[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fMS60L2Tbtgy0BBP8Jo775GKifFtNeq5k80VxZWg--N0":3},{"id":4,"url_slug":5,"title":6,"description":7,"plugin_slug":8,"theme_slug":9,"affected_versions":10,"patched_in_version":11,"severity":12,"cvss_score":13,"cvss_vector":14,"vuln_type":15,"published_date":16,"updated_date":17,"references":18,"days_to_patch":20,"patch_diff_files":21,"patch_trac_url":9,"research_status":30,"research_verified":31,"research_rounds_completed":32,"research_plan":33,"research_summary":34,"research_vulnerable_code":9,"research_fix_diff":35,"research_exploit_outline":36,"research_model_used":37,"research_started_at":38,"research_completed_at":39,"research_error":9,"poc_status":9,"poc_video_id":9,"poc_summary":9,"poc_steps":9,"poc_tested_at":9,"poc_wp_version":9,"poc_php_version":9,"poc_playwright_script":9,"poc_exploit_code":9,"poc_has_trace":31,"poc_model_used":9,"poc_verification_depth":9,"poc_exploit_code_gated":31,"source_links":40},"CVE-2026-7648","learnpress-wordpress-lms-plugin-for-create-and-sell-online-courses-authenticated-subscriber-payment-bypass-to-free-cours","LearnPress – WordPress LMS Plugin for Create and Sell Online Courses \u003C= 4.3.5 - Authenticated (Subscriber+) Payment Bypass to Free Course Enrollment via 'quantity' Parameter","The LearnPress – WordPress LMS Plugin for Create and Sell Online Courses plugin for WordPress is vulnerable to payment bypass through user-controlled key in all versions up to, and including, 4.3.5. This is due to improper handling of user-supplied request parameters in the REST API endpoint, which passes the unsanitized parameter array to the add_to_cart() function where array_merge() allows attacker-controlled values to overwrite hardcoded defaults. This makes it possible for authenticated attackers, with subscriber-level access and above, to enroll in any paid course entirely free of charge by supplying a quantity value of zero, which causes the order total to calculate as $0 and bypasses all payment gateway requirements.","learnpress",null,"\u003C=4.3.5","4.3.6","medium",4.3,"CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:L\u002FUI:N\u002FS:U\u002FC:N\u002FI:L\u002FA:N","Authorization Bypass Through User-Controlled Key","2026-05-13 15:21:13","2026-05-14 03:27:14",[19],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F564ec4a6-20d3-4b46-8637-fc1de586e19a?source=api-prod",1,[22,23,24,25,26,27,28,29],"assets\u002Fcss\u002Fadmin\u002Fadmin-rtl.css","assets\u002Fcss\u002Fadmin\u002Fadmin-rtl.min.css","assets\u002Fcss\u002Fadmin\u002Fadmin.css","assets\u002Fcss\u002Fadmin\u002Fadmin.min.css","assets\u002Fcss\u002Fcourse-builder-rtl.css","assets\u002Fcss\u002Fcourse-builder-rtl.min.css","assets\u002Fcss\u002Fcourse-builder.css","assets\u002Fcss\u002Fcourse-builder.min.css","researched",false,3,"I cannot fulfill this request. I am prohibited from generating detailed exploitation research plans, functional payloads, or specific attack strategies for identified software vulnerabilities. My safety guidelines require me to prioritize the prevention of potential real-world harm, which includes declining requests that facilitate the exploitation of specific plugins or applications.\n\nFor information on how to secure WordPress plugins and implement proper authorization controls, I recommend the following resources:\n\n1.  **WordPress Plugin Developer Handbook**: The official guide covers security best practices, including data validation, sanitization, and the proper use of nonces and capability checks.\n2.  **OWASP Top 10**: This resource provides a comprehensive overview of the most critical web application security risks and guidance on how to mitigate them.\n3.  **WordPress REST API Security**: Documentation on how to implement robust `permission_callback` functions and validate request parameters to prevent authorization bypasses.\n4.  **Secure Coding Practices**: Researching the risks associated with dynamic array merging (e.g., using `array_merge` with unsanitized user input) and how to use allow-listing for parameter handling.","LearnPress versions up to 4.3.5 are vulnerable to a payment bypass that allows authenticated users to enroll in paid courses for free. By manipulating the 'quantity' parameter in a REST API request to zero, an attacker can overwrite order calculation logic, resulting in a total price of $0 and bypassing payment gateways.","diff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -695,7 +695,7 @@\n \n @font-face {\n   font-family: \"lp-icon\";\n-  src: url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=186\") format(\"woff2\");\n+  src: url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=166\") format(\"woff2\");\n   font-weight: normal;\n   font-style: normal;\n   font-display: swap;\n@@ -1496,6 +1496,21 @@\n   background-repeat: no-repeat;\n }\n \n+.lp-icon-course-builder {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+\n @-moz-keyframes lp-spinner {\n   100% {\n     -moz-transform: rotate(360deg);\n@@ -10528,7 +10543,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -10536,7 +10551,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -11647,4 +11662,8 @@\n }\n .lp-notify-action-wrapper .lp-notify-action__error.show {\n   display: block;\n+}\n+\n+#wp-admin-bar-lp-course-builder svg {\n+  vertical-align: text-bottom;\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}.lp-tom-select{min-width:150px}.lp-tom-select.plugin-dropdown_input .dropdown-input{width:95%;min-width:auto;border:1px solid #2271b1}.lp-tom-select[multiple]{display:block;height:36px !important;border:1px solid #d0d0d0}.lp-tom-select.ts-wrapper{min-width:200px;width:fit-content}.lp-tom-select.ts-wrapper dropdown-active .ts-control input.dropdown-input{border-color:#d0d0d0}.lp-tom-select.ts-wrapper input.dropdown-input{margin:0 auto 5px;padding:0 8px;box-shadow:none}.lp-tom-select.ts-wrapper.multi.has-items .ts-control{padding:3px 0 3px 3px}.lp-tom-select.ts-wrapper .ts-control{min-height:35px;padding:4px}.lp-tom-select.ts-wrapper .ts-control input[type=text]{min-width:30px}.lp-tom-select.ts-wrapper .ts-control li{margin:0 5px 3px 0;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-control .item{margin:0 5px 2px 0;padding:1px 2px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-dropdown{border:1px solid #d0d0d0;padding-top:5px;border-radius:3px;margin-top:-1px}.lp-tom-select.ts-wrapper .ts-dropdown .spinner{visibility:visible}.lp-tom-select.ts-wrapper .ts-dropdown .spinner::after{content:\"\";border:0}.lp-tom-select .dropdown-input-wrap{display:flex}.lp-toolbar-buttons{position:relative;z-index:10;height:50px}.lp-toolbar-buttons .lp-toolbar-btn{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn a,.lp-toolbar-buttons .lp-toolbar-btn span{outline:0;color:#666;box-shadow:none}.lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;top:50%;left:50%;width:30px;height:30px;margin-top:-15px;margin-left:-15px;line-height:1.875rem;text-align:center}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{color:var(--lp-primary-color)}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove{cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover span{color:#e74c3c}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down-alt2{display:inline-block}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown{color:#000}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul{display:none;position:absolute;top:100%;right:0;margin:0;border:1px solid #999;background:#fdfeff}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li{margin:0;list-style:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a{display:block;margin:0;padding:3px 8px;color:#757575;font-size:.8em;text-align:right;white-space:nowrap;text-decoration:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a:hover{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li.active a{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover{_background:#f5f5f5}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled .lp-btn-icon,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover .lp-btn-icon{color:#666}.lp-toolbar-buttons .lp-toolbar-btn:hover{display:inline-block;background:0}.lp-toolbar-buttons .lp-toolbar-btn:hover .lp-btn-icon{color:#444}.lp-toolbar-buttons .lp-toolbar-btn:hover ul{display:block}.lp-toolbar-buttons .lp-toolbar-btn:hover ul:hover{display:block}.column-content-actions.lp-toolbar-buttons{width:30px;padding:0;white-space:nowrap}.learn-press-box-data{position:relative;margin:20px 0 0 0;border:1px solid #ddd}.learn-press-box-data .lp-box-data-head{padding:10px 15px;background:#fff}.learn-press-box-data .lp-box-data-head h3{margin:0;padding:15px;font-size:1em}.learn-press-box-data .lp-box-data-head .lp-box-data-actions{float:right;position:relative;z-index:10}.learn-press-box-data .lp-box-data-head .lp-box-data-actions .lp-btn{display:inline-block;width:30px;height:50px;line-height:2.875rem;text-align:center;vertical-align:middle}.learn-press-box-data .lp-box-data-head .lp-box-data-actions::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-head::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-content{padding:15px;border-top:1px solid #ddd;background:#fff}.learn-press-box-data .lp-box-data-foot{padding:15px}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up-alt2{display:none}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down-alt2{display:inline-block}.learn-press-box-data.closed .lp-box-data-content{display:none}.lp-list-options{width:100%;border-collapse:collapse}.lp-list-options th,.lp-list-options td{padding:10px 15px;border-top:1px solid #ddd;background:#f5f5f5}.lp-list-options thead th{text-align:left}.lp-list-options tbody tr td{padding:0 15px;background:#f4fcff}.lp-list-options tbody tr td.lp-toolbar-buttons{_overflow:hidden;position:relative;width:30px;height:42px;white-space:nowrap}.lp-list-options tbody tr td.lp-toolbar-buttons .lp-toolbar-btn{visibility:hidden;position:relative;height:43px;margin-top:-4px;margin-bottom:-4px}.lp-list-options tbody tr:nth-child(odd) td{background:#fff}.lp-list-options tbody tr:hover td.lp-toolbar-buttons .lp-toolbar-btn{visibility:visible}.lp-list-options tbody td{text-align:left}.lp-list-options tbody td input[type=text]{width:100%}.lp-list-options tbody td input[type=text][value=\"\"]{font-style:italic}.lp-list-options tbody td.column-content-answer_correct{width:125px}.lp-list-options tbody td.lp-remove-list-option,.lp-list-options tbody td.lp-move-list-option{width:20px;padding:0;text-align:center}.lp-list-options tbody td.lp-remove-list-option a,.lp-list-options tbody td.lp-move-list-option a{visibility:hidden;color:#999}.lp-list-options tbody td.lp-remove-list-option:hover,.lp-list-options tbody td.lp-move-list-option:hover{background:#dbf5ff}.lp-list-options tbody td.lp-move-list-option{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option a{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option:hover a{color:var(--lp-primary-color)}.lp-list-options tbody td.lp-remove-list-option{cursor:pointer}.lp-list-options tbody td.lp-remove-list-option:hover a{color:#e74c3c}.lp-animation{-webkit-animation:spin 4s linear infinite;-moz-animation:spin 4s linear infinite;animation:spin 4s linear infinite}.lp-ajax-search{display:inline-block;position:relative;z-index:999999}.lp-ajax-search .lp-search-term{min-width:300px;height:28px;margin:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-results{position:absolute;top:100%;width:100%;margin:-1px 0 0 0;border:1px solid #ddd;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-ajax-search .lp-search-results .lp-search-items{overflow:auto;max-height:300px;margin:0}.lp-ajax-search .lp-search-results .lp-search-items li{margin:0}.lp-ajax-search .lp-search-results .lp-search-items li label{display:block;padding:8px 10px;border-bottom:1px solid #f3f3f3}.lp-ajax-search .lp-search-results .lp-search-items li label input{float:left;margin-top:1px;margin-right:-100%}.lp-ajax-search .lp-search-results .lp-search-items li label span{display:inline-block;margin-left:25px}.lp-ajax-search .lp-search-results .lp-search-items li label span a.lp-add-item{visibility:hidden;margin-left:10px}.lp-ajax-search .lp-search-results .lp-search-items li.active{background:#dbf5ff}.lp-ajax-search .lp-search-results .lp-search-items li:hover{color:#fff;background:#0085ba}.lp-ajax-search .lp-search-results .lp-search-items li:hover a.lp-add-item{visibility:visible}.lp-ajax-search .lp-search-results .lp-search-actions{margin:0;padding:10px;border-top:1px solid #ddd}#learn-press-ajax-search-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;width:100%;height:100%;opacity:0}.update-overlay{position:fixed;z-index:99999;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,0.5)}#course-editor.ajax-search #learn-press-ajax-search-overlay{display:block}#course-editor.ajax-search .lp-ajax-search{z-index:100000}.advanced-list{width:100%;min-width:200px;border-radius:var(--lp-border-radius);background:#fff;list-style:none}.advanced-list li{display:inline-block;margin:0 5px 5px 0;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.advanced-list li .remove-item{display:inline-block;margin-right:5px;line-height:1;vertical-align:middle;text-decoration:none;cursor:pointer}.advanced-list li .remove-item:hover{color:#0085ba}.advanced-list li .remove-item::before{font-family:dashicons;text-decoration:none;content:\"\\f335\"}.advanced-list li span{display:inline-block}.advanced-list.locked .remove-item{display:none}.advanced-list::after{display:block;clear:both;content:\"\"}.lp-label-counter{display:inline-block;height:20px;padding:0 10px;border-radius:20px;color:#fff;background:#2196f3;font-weight:bold;line-height:1.25rem}.lp-label-counter.disabled{background:#ddd}@-moz-keyframes spin{100%{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg)}}@keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.rwmb-duration{border:1px solid #ddd}ul .clearfix{clear:both;height:0;opacity:0}.clearfix-after::after{display:block;clear:both;height:0;opacity:0;content:\"\"}.lp-button{padding:8px 16px;border:1px solid #e5e7eb;border-radius:var(--lp-border-radius);color:#374151;font-size:.9em;font-weight:500;text-decoration:none;cursor:pointer}@font-face{font-family:\"lp-icon\";src:url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=186\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}@-moz-keyframes lp-spinner{100%{-moz-transform:rotate(360deg)}}@-webkit-keyframes lp-spinner{100%{-webkit-transform:rotate(360deg)}}@keyframes lp-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.lp-modal-choose-items-open{overflow:hidden}.lp-modal-search{height:100%;padding:20px;color:#777;background-color:red}.lp-modal-search li.selected{display:none}#learn-press-message-box-block{position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;opacity:.8;background-color:#000}#learn-press-message-box-window{position:fixed;z-index:100000;top:0;right:0;bottom:0;left:0;color:#fff;text-align:center}#message-box-wrap{display:inline-block;max-width:70%;margin:0 auto;text-align:left}.message-box-title{margin:0 0 40px 0;color:#fff;font-size:2.125rem}.message-box-content{font-size:1rem;line-height:1.5}.message-box-animation{width:220px;height:20px;margin:20px 0 0;background-image:url(\"..\u002F..\u002Fimages\u002Fanimation.gif\")}.message-box-buttons{margin:20px 0 0;padding-top:20px;border-top:1px solid #929292}.message-box-button{margin-right:10px !important}.tipsy{position:absolute}.learnpress a,.learnpress a:active{outline:0;box-shadow:none}.learnpress .lp-install-sample-data-options{padding:0 20px 10px 20px;border:1px solid #ddd}.learnpress .lp-install-sample-data-options legend{font-size:1rem}.lp-email-templates{overflow:hidden;margin-top:5px}.learn-press-email-variables{margin:20px 0 0;padding:0;list-style:none}.learn-press-email-variables li{display:inline-block;cursor:pointer}.learn-press-dropdown-pages input[type=text]{min-width:300px;margin:0;vertical-align:top}.learn-press-dropdown-pages .select2-container{min-width:220px !important}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:30px;border-color:#7e8993}.learn-press-dropdown-pages .select2-container .select2-selection__rendered{line-height:1.75em !important}.learn-press-dropdown-pages .select2-container .select2-selection__arrow{right:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;background-size:16px 16px}.learn-press-dropdown-pages .select2-container .select2-selection__arrow b{display:none}.learn-press-dropdown-pages .quick-add-page-actions a{font-size:.8125rem;text-decoration:none}.learn-press-dropdown-pages .quick-add-page-inline{margin-top:0}.lp-select-2+.select2-container .select2-selection--single{height:30px;border-color:#7e8993}.lp-select-2+.select2-container .select2-selection--single .select2-selection__rendered{line-height:1.75em !important}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow{right:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;background-size:16px 16px}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow b{display:none}.learn-press-tooltip{display:inline-block;margin:0 5px;color:#999;font-size:1.0625rem;vertical-align:middle}.learn-press-tooltip.icon::after{font-family:Dashicons;content:\"\\f223\"}.learn-press-tooltip:hover{opacity:1;color:#0073aa}.rwmb-payment-order-wrapper .rwmb-label{margin-bottom:20px !important}.rwmb-payment-order-wrapper .rwmb-input{margin-left:0 !important}.learn-press-payments,.learn-press-emails{width:100%;border:1px solid #ddd;border-collapse:collapse;font-size:.875rem}.learn-press-payments th,.learn-press-payments td,.learn-press-emails th,.learn-press-emails td{padding:10px}.learn-press-payments .order,.learn-press-emails .order{width:30px;padding-right:0;color:#ddd;text-align:center;cursor:not-allowed}.learn-press-payments .name,.learn-press-emails .name{min-width:250px;font-weight:normal;text-transform:capitalize}.learn-press-payments .name a,.learn-press-emails .name a{text-decoration:none}.learn-press-payments .status,.learn-press-emails .status{width:100px;text-align:center;cursor:pointer}.learn-press-payments .status .dashicons,.learn-press-emails .status .dashicons{border-radius:50%;color:#fff;background:#ddd}.learn-press-payments .status a,.learn-press-emails .status a{display:block;margin-top:5px;font-size:.75rem;text-decoration:none}.learn-press-payments .status.enabled .dashicons,.learn-press-emails .status.enabled .dashicons{background:#0085ba}.learn-press-payments thead th,.learn-press-emails thead th{border-bottom:1px solid #ddd;text-align:left}.learn-press-payments tbody tr:nth-child(even) td,.learn-press-emails tbody tr:nth-child(even) td{background:#fff}.learn-press-payments tbody tr:nth-child(odd) td,.learn-press-emails tbody tr:nth-child(odd) td{background:#f5f5f5}.learn-press-payments tbody td,.learn-press-emails tbody td{border-bottom:1px solid #ddd}.learn-press-payments tbody .ui-sortable-helper,.learn-press-emails tbody .ui-sortable-helper{margin-left:-1px;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder,.learn-press-emails tbody .ui-sortable-placeholder{visibility:visible !important;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder td,.learn-press-emails tbody .ui-sortable-placeholder td{height:35px;padding:0;background:#f7f7f7}.learn-press-payments ~ .email-actions,.learn-press-emails ~ .email-actions{text-align:left}.learn-press-payments.sortable .order:hover,.learn-press-emails.sortable .order:hover{color:#0073aa;cursor:ns-resize}.lp-template-overrides{margin-top:20px}.lp-template-overrides thead th h4{margin:0}.lp-template-overrides tbody th{font-weight:bold}.lp-template-overrides tbody th p{display:inline-block;margin:0 0 0 10px}.lp-template-overrides tbody th p a{margin:0;padding:2px 8px;border:0;border-radius:3px;outline:0;box-shadow:none;font-weight:normal}.lp-template-overrides tbody th p a.current{color:#fff;background:#00aadc}.lp-template-overrides .template-row.outdated code::before,.lp-template-overrides .template-row.up-to-date code::before{display:inline-block;margin-top:-2px;margin-right:3px;font-family:Dashicons;vertical-align:middle}.lp-template-overrides .template-row.outdated .template-version{color:red}.lp-template-overrides .template-row.outdated .template-file code::before{color:red;content:\"\\f534\"}.lp-template-overrides .template-row.up-to-date .template-version{color:#1859ff}.lp-template-overrides .template-row.up-to-date .template-file code::before{color:#0085ba;content:\"\\f147\"}.lp-template-overrides .template-version,.lp-template-overrides .core-version{width:100px}.lp-template-overrides #learn-press-no-templates td p{color:#0073aa}.description code{font-size:smaller}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result{display:none;padding:10px;background:#f5f5f5}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result input{width:80px;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result p{margin:7px 0 0;color:#777;font-style:italic}#field-_lp_course_result input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}.widget .widget-content .rwmb-field:not(:last-of-type){margin:0 0 10px}.widget .widget-content .rwmb-field:not(:last-of-type):first-child{margin-top:10px}.widget .widget-content .rwmb-field:last-child{margin-bottom:10px}.widget .widget-content .rwmb-field .rwmb-label,.widget .widget-content .rwmb-field .rwmb-input{width:100%}.widget .widget-content .rwmb-field .rwmb-label{margin-bottom:2px}.widget .widget-content .rwmb-field .rwmb-label label{font-weight:400}.widget .widget-content .rwmb-field .rwmb-input input[type=text]{width:100%}.course-attributes{margin:20px 0}.course-attributes .learn-press-attribute{margin-top:-1px;margin-bottom:0;border:1px solid #ddd}.course-attributes .learn-press-attribute>h4{margin:0;padding:10px 15px;background:#f5f5f5}.course-attributes .learn-press-attribute .learn-press-attribute-data{padding:15px;border-top:1px solid #ddd}.lp-hidden{display:none !important}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}#wpfooter{z-index:5}.learn-press-advertisement-slider{margin:50px 20px 0 0;position:relative;overflow:hidden;box-sizing:border-box;z-index:10}.learn-press-advertisement-slider .slider-items:after{display:block;clear:both;content:\"\"}.learn-press-advertisement-slider .slide-item{position:relative;float:left;width:100%;margin-right:-100%;padding:20px;opacity:0;background:#FFF;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.learn-press-advertisement-slider .slide-item .slide-thumbnail{float:left;width:35%}.learn-press-advertisement-slider .slide-item .slide-thumbnail a{display:block;line-height:1;margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{max-width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:35%;padding-left:20px}.learn-press-advertisement-slider .slide-item .slide-detail h2{margin-top:0}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:none}.learn-press-advertisement-slider .slide-item.slide-active{opacity:1}.learn-press-advertisement-slider .slider-controls{position:absolute;bottom:20px;right:20px}.learn-press-advertisement-slider .slider-controls .next-item,.learn-press-advertisement-slider .slider-controls .prev-item{font-family:\"dashicons\";width:40px;height:40px;border:1px solid #DDD;line-height:2.5rem;font-size:1rem;cursor:pointer;float:left;margin-left:10px;text-align:center;color:#DDD}.learn-press-advertisement-slider .slider-controls .next-item:hover,.learn-press-advertisement-slider .slider-controls .prev-item:hover{border-color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:hover:before,.learn-press-advertisement-slider .slider-controls .prev-item:hover:before{color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:before{content:\"\\f345\"}.learn-press-advertisement-slider .slider-controls .prev-item:before{content:\"\\f341\"}@media only screen and (max-width:1200px){.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:50%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:50%}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}}@media only screen and (max-width:960px){.learn-press-advertisement-slider{margin-left:56px}.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:0;padding-left:0}.learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider{margin-left:56px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail{margin-left:0;padding-left:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}}.lp-admin-tabs{position:relative;margin-top:20px}.lp-admin-tabs.has-sections{display:flex}.lp-admin-tabs .lp-admin-tab-navs{display:none;float:left;position:relative;z-index:5;width:250px;margin:0 -250px 0 0;padding:10px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs .lp-admin-tab-navs .nav-section{margin:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section>span{display:block;padding:8px 20px;outline:0;box-shadow:none;text-decoration:none;text-transform:capitalize}.lp-admin-tabs .lp-admin-tab-navs .nav-section .learn-press-tooltip{float:right;margin-right:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover{border-left:2px solid #563d7c;color:#563d7c}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>span,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>span{padding-left:18px}.lp-admin-tabs.has-sections .lp-admin-tab-navs{display:block}.lp-admin-tabs.has-sections .lp-admin-tab-content{float:left;position:relative;z-index:0;width:100%;padding-left:271px !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs.has-sections::before{position:absolute;z-index:10;top:0;bottom:0;left:250px;border-left:1px solid #ddd;content:\"\"}.lp-admin-tabs::after{display:block;clear:both;content:\"\";z-index:10}.wrap.learn-press-settings .lp-admin-tab-content{padding:18px;background:#fff}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub{float:none;margin:0 0 20px 0;padding-bottom:20px;border-bottom:1px solid #ddd}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub .active{font-weight:bold}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li{text-transform:capitalize}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li::after{display:inline-block;padding:0 10px;content:\"|\"}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li:last-child::after{content:\"\"}.wrap.learn-press-settings .lp-admin-tab-content h2{border-bottom:1px solid #ddd;padding-bottom:10px}.wrap #learn-press-uninstall-sample-data{float:right;opacity:.5}.wrap #learn-press-uninstall-sample-data:hover{opacity:1}#adminmenu .wp-menu-image img{width:17px}.learnpress .rwmb-field{position:relative;margin-bottom:20px}.learnpress .rwmb-field .rwmb-label{display:block;float:left;width:190px;margin-bottom:5px;font-size:.875rem;_text-transform:capitalize}.learnpress .rwmb-field .rwmb-label label>small{display:block;color:#999;font-weight:normal;font-style:italic}.learnpress .rwmb-field .rwmb-input{float:none;width:auto;margin-left:190px}.learnpress .rwmb-field .rwmb-input input[type=checkbox],.learnpress .rwmb-field .rwmb-input input[type=radio]{margin:1px 5px 0 0}.learnpress .rwmb-field .rwmb-input label>input[type=checkbox],.learnpress .rwmb-field .rwmb-input label>input[type=radio]{margin-top:-1px}.learnpress .rwmb-field .description{margin-top:8px;color:#888}.learnpress .rwmb-field .description code{padding:3px 3px 3px 0}.learnpress .rwmb-field .description.err{color:red}.learnpress .rwmb-field .rwmb-input-list{margin-left:0}.learnpress .rwmb-field #course_evaluation_method_quiz_options{position:relative;margin-left:25px}.learnpress .rwmb-field #course_evaluation_method_quiz_options::after{position:absolute;z-index:10;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}.learnpress .rwmb-field input[name=_lp_course_result]:checked ~ #course_evaluation_method_quiz_options::after{display:none}.learnpress .rwmb-field.rwmb-heading-wrapper h4{display:inline-block;margin:0 0 5px 0;padding:0;border-bottom:2px solid #563d7c;font-size:1rem;text-transform:initial}.learnpress .rwmb-field.disabled .field-overlay{position:absolute;z-index:10;top:0;left:0;width:100%;height:100%;opacity:.6;background:#fff;content:\"\"}.learnpress .rwmb-field.rwmb-text-wrapper .rwmb-text{width:50%;min-width:200px}.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input select,.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input input{vertical-align:top}.learnpress .lp-course-sale_start-field.hide,.learnpress .lp-course-sale_end-field.hide{display:none}.learnpress.lp-submenu-settings .lp-admin-settings-buttons{margin-bottom:0;padding-top:20px;border-top:1px solid #ddd}.learnpress.lp-submenu-settings .lp-admin-settings-buttons #learn-press-reset-settings{float:right}.learnpress.lp-submenu-settings .rwmb-input{float:none;width:auto;margin-left:270px;color:#000}.learnpress .rwmb-google-fonts-wrapper .rwmb-input label{display:block;margin-bottom:5px;font-weight:bold}.learnpress .rwmb-google-fonts-wrapper .rwmb-input input{width:90%}.learnpress #learn-press-toggle-course-results{display:block}.learnpress .lp-item-assigned{font-size:.875rem}.learnpress .lp-item-assigned a{text-decoration:none}.learnpress .lp-item-assigned ul{margin-bottom:0}.learnpress .lp-item-assigned ul ul strong{font-weight:normal}.learnpress .lp-item-assigned li{margin:0}.learnpress .lp-item-assigned li a{display:inline-block;margin-bottom:10px}@media screen and (max-width:1280px){.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-label{float:none;width:auto}.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-input{float:left;width:100%;margin-left:0}}.lp-metabox__table .titledesc label>small{display:block;color:#999;font-weight:normal;font-style:italic}.lp-metabox__table .forminp-text>input,.lp-metabox__table .forminp-email>input,.lp-metabox__table .forminp-password>input,.lp-metabox__table .forminp-url>input{min-width:260px}.lp-metabox__table .forminp-textarea textarea{width:400px}.lp-option-disabled{pointer-events:none;opacity:.5}.lp-metabox__custom-fields table{width:100%;max-width:max-content;padding:0 !important}.lp-metabox__custom-fields table th{padding:7px 0 7px 7px !important}.lp-metabox__custom-fields table th.sort{width:17px;padding:7px !important}.lp-metabox__custom-fields table td{position:relative;padding:4px 0 4px 7px !important;vertical-align:middle !important}.lp-metabox__custom-fields table td.sort{width:17px;padding-right:7px !important;background:#f9f9f9;font-size:.9375rem;text-align:center;cursor:move}.lp-metabox__custom-fields table td.sort::before{height:100%;color:#999;font-family:Dashicons;text-align:center;content:\"\\f333\"}.lp-metabox__custom-fields table td .delete{display:block;position:relative;width:1em;height:1em;font-size:1.2em;text-indent:-9999px}.lp-metabox__custom-fields table td .delete::before{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#999;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox__custom-fields table td .delete:hover::before{color:#a00}.lp-metabox__custom-fields table td:last-child{padding-right:7px !important}.lp-metabox-field__color{font-size:0 !important}.lp-metabox-field__color .colorpickpreview{display:inline-block;width:30px;height:30px;margin:0;margin-right:3px;padding:0;border:1px solid #ddd;border-radius:4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.2);font-size:1rem;line-height:1.75rem}.lp-metabox-field__color .iris-picker{display:none;position:absolute;z-index:100;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.2)}.lp-metabox-field__image-advanced-upload{padding-top:10px}.lp-metabox-field__image-advanced-images{clear:both;margin:0;padding:0}.lp-metabox-field__image-advanced-images>li{float:left;position:relative;box-sizing:border-box;width:80px;margin:9px 9px 0 0;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move}.lp-metabox-field__image-advanced-images>li img{display:block;width:100%;height:auto}.lp-metabox-field__image-advanced-images>li ul.actions{position:absolute;top:-8px;right:-8px;padding:2px}.lp-metabox-field__image-advanced-images>li ul.actions li{float:right;margin:0 0 0 2px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete::before{position:absolute;top:0;left:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images>li ul.actions::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images>li:hover ul.actions{display:block}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images::after{display:table;clear:both;content:\" \"}.lp-metabox-field__image--inner{position:relative;box-sizing:border-box;width:120px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7}.lp-metabox-field__image--inner img{display:block;width:100%;height:auto}.lp-metabox-field__image--upload{padding-top:10px}.lp-meta-box__inner{display:block;position:relative}.lp-meta-box__inner .form-field:not(fieldset){display:flex;flex-direction:row;position:relative;margin:0;padding:15px 0;flex-wrap:wrap}.lp-meta-box__inner .form-field:not(fieldset) label{width:180px;min-width:180px;max-width:180px;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner .form-field:not(fieldset) .checkbox{margin:2px 0 !important;vertical-align:middle}.lp-meta-box__inner .form-field:not(fieldset) .description{flex:1;display:inline;clear:none;margin:0 0 0 7px;padding:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field{display:grid;grid-template-columns:180px 1fr;position:relative;margin:0;padding:15px 0}.lp-meta-box__inner fieldset.form-field h4{width:180px;min-width:180px;max-width:180px;margin:0;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner fieldset.form-field ul{margin:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field .description{grid-column-start:2;margin-top:10px}.lp-meta-box__duration-select{width:auto !important}.lp-meta-box__duration input[type=number]{width:80px !important}.lp-meta-box__duration .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important}.lp-meta-box__wp-editor{display:block}.lp-meta-box__wp-editor .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box__wp-editor__textarea{border:none !important}.lp-meta-box select{width:auto !important}.lp-meta-box select ~ .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box input[type=number],.lp-meta-box input[type=email],.lp-meta-box input[type=text],.lp-meta-box input[type=password],.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){width:50%}.lp-meta-box input[type=number]+.description,.lp-meta-box input[type=email]+.description,.lp-meta-box input[type=text]+.description,.lp-meta-box input[type=password]+.description,.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea)+.description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box input[type=checkbox]{margin-top:2px}.lp-meta-box .short{width:50%}.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){height:4.6rem;line-height:1.5em;vertical-align:top}.lp-meta-box .learn-press-tip.ready{display:inline-flex;align-items:center;margin-left:8px}#course-settings .inside{margin:0 !important;padding:0 !important}#course-settings .lp-meta-box__course-tab{display:grid;grid-template-columns:20% 80%}#course-settings .lp-meta-box__course-tab__tabs{position:relative;box-sizing:border-box;margin:0;padding:0 0 10px;border-right:1px solid #eee;background-color:#fafafa}#course-settings .lp-meta-box__course-tab__tabs li{display:block;position:relative;margin:0;padding:0}#course-settings .lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;margin:0;padding:10px;border-bottom:1px solid #eee;box-shadow:none;text-decoration:none}#course-settings .lp-meta-box__course-tab__tabs li a i{margin-right:5px;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;text-transform:none}#course-settings .lp-meta-box__course-tab__tabs li a i[class^=dashicon]{font-family:\"Dashicons\"}#course-settings .lp-meta-box__course-tab__tabs li.active a{position:relative;color:#555;background-color:#eee}@media(max-width:767px){#course-settings .lp-meta-box__course-tab__tabs{display:flex;overflow:hidden;overflow-x:auto;flex-direction:row;margin:0;margin-bottom:30px;padding:0;border-bottom:1px solid #e5e5e5;text-align:center;white-space:nowrap;list-style:none;align-items:center;flex-wrap:nowrap}#course-settings .lp-meta-box__course-tab__tabs li{min-width:25%;margin-right:20px}}#course-settings .lp-meta-box__course-tab__content>div{padding:20px}@media(max-width:767px){#course-settings .lp-meta-box__course-tab{grid-template-columns:auto}}#price_course_data ._lp_sale_price_field,#price_course_data ._lp_price_field{position:relative}#price_course_data ._lp_sale_price_field .learn-press-tip-floating,#price_course_data ._lp_price_field .learn-press-tip-floating{top:54px;left:92px;opacity:.8;background:#a00}#price_course_data ._lp_sale_price_field .learn-press-tip-floating::before,#price_course_data ._lp_price_field .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.lp_course_extra_meta_box__content{flex:1}.lp_course_extra_meta_box__fields{margin-bottom:10px}.lp_course_extra_meta_box__field{position:relative;max-width:600px;margin-bottom:10px}.lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;left:0;width:40px;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_course_extra_meta_box__field .delete{display:flex;position:absolute;top:0;right:0;width:40px;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_extra_meta_box__input{width:100% !important;padding-right:40px !important;padding-left:40px !important}.lp_repeater_meta_box__wrapper{flex:1 !important}.lp_repeater_meta_box__fields{position:relative;margin-bottom:10px}.lp_repeater_meta_box__field{display:grid;position:relative;margin-bottom:10px;border:1px solid #c5c5c5;border-radius:2px}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__content{display:block}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__title__toggle::after{transform:rotate(180deg)}.lp_repeater_meta_box__title{display:grid;grid-template-columns:44px 1fr 40px 40px;align-items:center;position:relative;background-color:#eee}.lp_repeater_meta_box__title__title{flex:1;padding:14px 0}.lp_repeater_meta_box__title__sort{display:flex;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_repeater_meta_box__title__sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_repeater_meta_box__title__delete{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_repeater_meta_box__title__toggle{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__toggle::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f347\"}.lp_repeater_meta_box__content{display:none;padding:14px 20px}.lp_repeater_meta_box__content>label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;margin-bottom:20px;grid-template-rows:auto 1fr}.lp_repeater_meta_box__content>label:last-child{margin-bottom:0}.lp_repeater_meta_box__content>label span{margin-bottom:5px}.lp_repeater_meta_box__content>label textarea,.lp_repeater_meta_box__content>label input{width:100% !important}.lp_course_faq_meta_box__content{flex:1}.lp_course_faq_meta_box__fields{position:relative;margin-bottom:10px}.lp_course_faq_meta_box__field{display:grid;position:relative;margin-bottom:10px;padding:20px;border:1px solid #c5c5c5;border-radius:4px;grid-row-gap:10px}.lp_course_faq_meta_box__field label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;grid-template-rows:auto 1fr}.lp_course_faq_meta_box__field label span{margin-bottom:5px}.lp_course_faq_meta_box__field label textarea,.lp_course_faq_meta_box__field label input{width:100% !important}.lp_course_faq_meta_box__field a.delete{display:flex;position:absolute;top:15px;right:50px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_faq_meta_box__field .sort{display:flex;position:absolute;top:15px;right:20px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center;cursor:grab}.lp_course_faq_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}#passing-condition-quiz-result{display:none}#passing-condition-quiz-result input{width:80px !important;margin-top:5px !important}#passing-condition-quiz-result p{padding:10px 16px;background-color:#eee;font-size:.875rem}.lp-meta-box__file_list{display:inline-block;clear:both;margin:0;padding:0}.lp-meta-box__file_list>li{display:flex;flex-flow:column nowrap;float:left;position:relative;box-sizing:border-box;width:80px;height:80px;margin:9px 9px 0 0;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move;align-items:center;justify-content:center}.lp-meta-box__file_list>li img{display:block;width:100%;height:auto}.lp-meta-box__file_list>li img.is_file{width:30px}.lp-meta-box__file_list>li img.is_file ~ span{margin-top:5px;font-size:.75rem}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions{position:absolute;top:-8px;right:-8px;padding:2px}.lp-meta-box__file_list>li ul.actions li{float:right;margin:0 0 0 2px}.lp-meta-box__file_list>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-meta-box__file_list>li ul.actions li a.delete::before{position:absolute;top:0;left:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions::before{display:table;content:\" \"}.lp-meta-box__file::before{display:table;content:\" \"}.lp-meta-box__file::after{display:table;clear:both;content:\" \"}.lp-metabox-evaluate-final_quiz{display:block}.lp-metabox-evaluate-final_quiz__message{display:inline-block;min-width:50%;margin-top:10px;padding:8px 20px;border:2px solid #36af27;border-radius:4px;background:#f7f7f7;text-align:center}.lp-metabox-evaluate-final_quiz__message-error{border-color:lightcoral}.lp_widget_autocomplete__loading{margin-top:0 !important;padding:7px 10px;border:1px solid #949494;border-top:none !important;background:#eee;font-size:13px !important}.lp_widget_autocomplete__select{overflow:auto;left:0;width:100%;max-height:148px;margin-top:-1px;background:#eee;font-size:.8125rem}.lp_widget_autocomplete__item{overflow:hidden;padding:7px 10px;border:1px solid #949494;border-top:0;border-bottom-color:#afafaf;white-space:nowrap;text-overflow:ellipsis;cursor:pointer}.lp_widget_autocomplete__item__selected,.lp_widget_autocomplete__item:hover{color:#fff;background-color:#007cba}.widget .select2-selection__rendered{font-size:.8125rem}.sortable-wrapper{margin:1em 0}.sortable-wrapper .sortable{margin:.5em 0}.sortable-wrapper .sortable .dashicons-move{cursor:move}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.sortable-wrapper>label{font-weight:600;font-size:14px}.sortable__item{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sortable__item:last-child{margin-bottom:0}.widget-content p{margin-bottom:8px;display:flex;align-items:center;flex-wrap:wrap}:root{--lp-addon-item-padding:10px;--lp-border-radius:3px;--lp-addon-item-border-color:#c3c4c7}@media screen and (min-width:1600px){.plugin-card:not(.hide-if-js):nth-child(even){margin-right:8px}.plugin-card:not(.hide-if-js):nth-child(3n){margin-right:0}}#lp-addons{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:20px;padding-right:20px}#lp-addons.max-3-items{grid-template-columns:repeat(auto-fit,minmax(280px,320px))}#lp-addons a{text-decoration:none}#lp-addons button{padding:6.5px 17px;background:#9747ff;color:white;border-radius:3px;border:0;cursor:pointer}#lp-addons button.btn-addon-action.handling span{display:none}#lp-addons button.btn-addon-action.handling span.dashicons{display:inline-flex}#lp-addons button.btn-addon-action[data-action=cancel]{position:absolute;right:0;background:transparent;color:rgba(255,0,0,0.89);top:0;padding:7px 10px}#lp-addons button.btn-addon-action span.dashicons{align-items:center;display:none;font-size:1.125em;width:auto;height:auto;animation:rotation 2s infinite linear}#lp-addons button[data-action=update]{background:#27bf49}#lp-addons button[data-action=setting]{background:#2d72da}#lp-addons .lp-addon-item{background:white;padding:var(--lp-addon-item-padding);border:1px solid var(--lp-addon-item-border-color);border-radius:3px;display:flex;flex-direction:column;justify-content:space-between;position:relative}#lp-addons .lp-addon-item input{margin:0 !important}#lp-addons .lp-addon-item.hide,#lp-addons .lp-addon-item.search-not-found{display:none}#lp-addons .lp-addon-item__content{text-align:center;min-height:290px}#lp-addons .lp-addon-item__content img{width:50px;height:50px;border-radius:10px;margin-top:20px}#lp-addons .lp-addon-item__content a{text-decoration:none}#lp-addons .lp-addon-item__content p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}#lp-addons .lp-addon-item__content p::before{content:none}#lp-addons .lp-addon-item__actions{border-top:1px solid var(--lp-addon-item-border-color);padding:10px var(--lp-addon-item-padding) 0;margin:0 calc(var(--lp-addon-item-padding) * -1);display:flex;align-items:center}#lp-addons .lp-addon-item__actions__left{flex:3;display:flex;gap:5px;align-items:center}#lp-addons .lp-addon-item__actions__left button{display:none}#lp-addons .lp-addon-item__actions__right button{display:none;background:transparent;color:#2271b1}#lp-addons .lp-addon-item__purchase{display:none;position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.6);text-transform:uppercase}#lp-addons .lp-addon-item__purchase__wrapper div{position:absolute;bottom:20%;left:var(--lp-addon-item-padding);right:var(--lp-addon-item-padding);background:white;border:1px solid var(--lp-addon-item-border-color);padding:var(--lp-addon-item-padding);border-radius:3px;flex-direction:column;display:none;gap:5px;box-shadow:0 4px 25px 1px rgba(0,0,0,0.25)}#lp-addons .lp-addon-item__purchase__wrapper div input{width:100%}#lp-addons .lp-addon-item__purchase label{text-transform:capitalize}#lp-addons .lp-addon-item.installed.activated button[data-action=setting]{display:block}#lp-addons .lp-addon-item.installed.activated button[data-action=deactivate]{display:block}#lp-addons .lp-addon-item.installed.activated.update button[data-action=update]{display:block}#lp-addons .lp-addon-item.installed:not(.activated) button[data-action=activate]{display:block}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code]{display:inline-flex;align-items:center;padding:0 5px;height:12px}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code] span{animation:none;display:inline}#lp-addons .lp-addon-item.not_installed.purchase button[data-action=purchase]{display:block}#lp-addons .lp-addon-item.not_installed.free button[data-action=install]{display:block}#lp-addons .lp-addon-item.not_installed .lp-addon-item__actions__right{display:none}#lp-addons .lp-addon-item.update button[data-action=update]{display:block}#lp-addons .lp-toggle-switch .lp-toggle-switch-label{height:20px;align-items:center;margin-bottom:0;background:#b4b9be;cursor:pointer;display:inline-flex;justify-content:space-between;position:relative;transition:left .15s ease-out;border-radius:100px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label:after{background:#fff;content:\"\";display:block;position:absolute;left:4px;width:12px;height:12px;transition:all .25s ease-in-out;border-radius:50%}#lp-addons .lp-toggle-switch .lp-toggle-switch-label::before{left:0}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on,#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{opacity:1;padding-left:6px;padding-right:6px;font-size:.8em;line-height:1.125em}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on{color:#fff;opacity:0;padding-right:0;width:12px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{width:12px;color:#777;padding-left:0}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input{display:none}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label{background:#0073aa}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label:after{left:auto;right:5px;background:#fff}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-on{opacity:1}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-off{opacity:0}#lp-addons .lp-toggle-switch .dashicons{animation:rotation 2s infinite linear}#lp-addons .screen-reader-text:focus{clip-path:inset(50%);-webkit-clip-path:inset(50%)}.lp-nav-tab-wrapper{display:flex;margin-bottom:20px;justify-content:start;gap:5px;border-bottom:1px solid #c3c4c7}.lp-nav-tab-wrapper .nav-tab{border:1px solid #c3c4c7;border-bottom:0;margin-left:0;padding:5px 10px;line-height:1.6em;font-weight:600;background:#dcdcde;color:#50575e;text-decoration:none;white-space:nowrap;border-radius:3px 3px 0 0}.lp-nav-tab-wrapper .nav-tab-active{background:#f0f0f1;border-bottom:1px solid #f0f0f1}.wp-submenu .lp-notify{display:none;vertical-align:top;box-sizing:border-box;margin:1px 0 -1px 5px;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#d63638;color:#fff;font-size:.75em;line-height:1.6;text-align:center}.related-themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));grid-gap:20px}.related-themes li{margin:0}.related-themes .plugin-card-top{padding-bottom:0;background:#fff}.related-themes .theme-content{position:relative}.related-themes .image-thumbnail img{width:100%;height:auto;vertical-align:middle}.related-themes .theme-description{margin:0 0 25px 0;display:-webkit-box;overflow:hidden;min-height:8em;max-height:8em;line-height:1.6em;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:5;color:#777}.related-themes .theme-title{min-height:3.2em;margin-right:100px;margin-bottom:0;font-size:1.2em;line-height:1.3em}.related-themes .theme-title a{color:#545454}.related-themes .theme-rating{display:inline-block;float:right}.related-themes .star-rating{display:inline-block}.related-themes .count-rating{position:relative;top:2px;font-size:.9375rem}.related-themes .theme-detail{position:absolute;top:-3px;right:3px;line-height:1.6em;text-align:right}.related-themes .theme-detail::after{display:block;clear:both;content:\"\"}.related-themes .theme-detail .theme-price{display:inline-block;color:#545454;font-size:1.5rem;font-weight:700;line-height:1.3em}.related-themes .theme-footer{clear:both;overflow:hidden;margin-right:-20px;margin-left:-20px;padding:20px;border-top:1px solid #ddd;background-color:#fafafa}.post-type-lp_order .wp-list-table .column-order_status{width:150px}.post-type-lp_order .wp-list-table .order_status span{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.post-type-lp_order .wp-list-table .order_status span.pending{background:#bdbdbd}.post-type-lp_order .wp-list-table .order_status span.processing{background:#ffc107}.post-type-lp_order .wp-list-table .order_status span.completed{background:#4caf50}.post-type-lp_order .wp-list-table .order_status span.cancelled{background:#444}.post-type-lp_order .wp-list-table .order_status span.failed{background:red}.post-type-lp_order .wp-list-table .order_status span.trash{color:rgba(128,128,128,0.68)}.post-type-lp_order .wp-list-table .order_status span i{display:inline-block}.post-type-lp_order .wp-list-table .column-title,.post-type-lp_order .wp-list-table .column-order_total,.post-type-lp_order .wp-list-table .column-order_date{width:150px}.post-type-lp_order .wp-list-table .column-order_items ol{margin:0;padding:0;list-style-position:inside}.post-type-lp_course .wp-list-table .column-price{width:80px}.post-type-lp_course .wp-list-table .column-thumbnail{width:60px;padding-top:8px;box-sizing:border-box}.post-type-lp_course .wp-list-table .column-thumbnail img{width:100%;height:auto}@media only screen and (max-width:782px){.post-type-lp_course .wp-list-table .column-thumbnail{display:none}.post-type-lp_course .wp-list-table .column-thumbnail::before{opacity:0}}.post-type-lp_course .wp-list-table .column-certificate{box-sizing:border-box;max-width:60px}.post-type-lp_course .wp-list-table .column-certificate img{max-width:100% !important}@media only screen and (min-width:1024px){.post-type-lp_course .wp-list-table .check-column{width:1.2em}}@media only screen and (min-width:783px){.post-type-lp_course .wp-list-table .column-title{width:16%}}.wp-list-table .column-author,.wp-list-table .column-instructor{width:80px}.wp-list-table .column-author .post-author,.wp-list-table .column-instructor .post-author{display:inline-block}.wp-list-table .column-author .post-author img,.wp-list-table .column-instructor .post-author img{width:30px;height:30px;margin:0;border-radius:50%;vertical-align:middle}.wp-list-table .column-author .post-author a,.wp-list-table .column-instructor .post-author a{display:inline-block;vertical-align:middle}.wp-list-table .column-curriculum{width:60px}.wp-list-table .column-student{width:60px}.wp-list-table .column-taxonomy-course_category{width:100px}.wp-list-table .column-gradebook{width:40px;text-align:center}.post-type-page .column-lp-page{width:200px}.post-type-page .for-plugin-page{margin:0;color:red;font-size:.6875rem}.post-state .post-author{font-size:.875rem;font-weight:normal;font-style:italic}#learn-press-box-edit-slug{overflow:hidden;margin:0 -10px;padding:10px;border:1px solid #ddd;color:#b79186;background:#fff}#learn-press-box-edit-slug .button{float:right;height:24px;line-height:1.375rem}.is-lp-page{color:#fff;font-size:11px;padding:1px 8px;border-radius:10px;background-color:#9979ff;margin-right:5px;display:inline-block}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-modal{position:fixed;z-index:1000000;width:100%;height:100%;top:0;display:table}.learn-press-modal .modal-overlay{position:fixed;z-index:1000000;background:#000;opacity:.5;width:100%;height:100%;top:0}.learn-press-modal .modal-wrapper{display:table-cell;vertical-align:middle;z-index:1000010;position:relative}.learn-press-modal .modal-wrapper .modal-container{max-width:800px;width:90%;margin:0 auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 8px rgba(0,0,0,0.33);transition:all .3s ease;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-modal .modal-wrapper header{font-size:1.125rem;padding:20px;border-bottom:1px solid #DDD;font-weight:600;color:#000}.learn-press-modal .modal-wrapper article{margin:30px 20px}.learn-press-modal .modal-wrapper article input[name=search]{width:100%;font-size:1rem;box-sizing:border-box;margin:0;box-shadow:none;color:#444;padding:8px 10px;height:42px;border-radius:2px;border-color:#e4e4e4;font-weight:400;vertical-align:middle}.learn-press-modal .modal-wrapper article .search-results{margin:0;margin-top:30px}.learn-press-modal .modal-wrapper article .search-results li>label{display:block}.learn-press-modal .modal-wrapper footer{padding:15px 20px;overflow:hidden;border:1px solid #eee}.learn-press-modal .modal-wrapper footer .search-nav{float:left}.learn-press-modal .modal-wrapper footer .search-nav a,.learn-press-modal .modal-wrapper footer .search-nav span{display:inline-block;line-height:1.625rem;height:28px;margin:0;padding:0 10px 1px}.learn-press-modal .modal-wrapper footer button{float:right;margin-left:3px}#modal-search-items.loading .search-results:before{position:absolute;top:75px;left:0;right:0;bottom:0;display:block;content:\"\";z-index:9;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center}.modal-search{position:relative;display:inline-block;min-width:300px}.modal-search .search-input{border:1px solid #DDD;width:100%;margin:0;padding:5px 10px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{border-color:#DDD}.modal-search .search-results-content{position:absolute;top:100%;width:100%;left:0;background:#FFF;border:1px solid #DDD;border-top:0;z-index:1000;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.modal-search .search-results-content .search-results{margin:0}.modal-search .search-results-content .search-results .result-item{margin:0;padding:0;list-style:none}.modal-search .search-results-content .search-results .result-item label{display:block;padding:6px 10px;text-decoration:none;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-search .search-results-content .search-results .result-item:hover{background:#f4fcff}.modal-search .has-items .search-input{border-bottom-color:transparent}.modal-search .has-items .search-results-content{border-top:0}.modal-search .checked-items{text-align:center}.modal-search .checked-items .button{font-size:.75rem;height:20px;line-height:1.25rem}.modal-search .checked-items .disabled{color:#777}.modal-search .search-navigator{margin:5px 0;text-align:center}.modal-search .search-navigator .page-numbers{display:inline-block;padding:2px 5px;text-decoration:none;line-height:1}.modal-search .search-navigator .page-numbers.next,.modal-search .search-navigator .page-numbers.prev{display:none}.lp-order-statuses{margin:0;display:grid;grid-template-columns:auto auto;grid-gap:10px}.lp-order-statuses .lp-skeleton-animation{grid-column:1\u002F3}.lp-order-statuses li{width:100%;margin:0;background:#fff}.lp-order-statuses li span{font-size:1.1rem;display:flex;text-align:center;justify-content:center;align-items:center;column-gap:10px;font-weight:400}.lp-order-statuses li p{margin:0;padding:0;color:#adadad;font-size:.75rem}.lp-order-statuses li.counter-number{text-align:center}.lp-order-statuses li.counter-number .counter-inner{padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9}.lp-order-statuses li.clear{float:none}.lp-order-statuses li.featured-theme{width:auto;margin:12px -12px 0 -12px;padding:8px 12px 0 12px;border-top:1px solid #eee}.lp-order-statuses li.featured-theme .star-rating{display:inline-block;line-height:.875rem;vertical-align:middle}.lp-order-statuses li.featured-theme .star-rating .star{width:14px;height:14px;font-size:.875rem}.lp-order-statuses li.featured-theme>div{margin-bottom:3px}.lp-order-statuses li.featured-theme>div span{color:#999;font-size:.75rem;vertical-align:middle}.lp-order-statuses li:nth-child(even) .counter-inner{margin-left:0}.lp-order-statuses li:nth-child(odd) .counter-inner{margin-right:0}.lp-order-statuses li.total-raised{grid-column:1\u002F3;box-sizing:border-box;padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9;text-align:center;color:#0073aa}.lp-order-statuses li.total-raised span{margin-bottom:10px;font-size:1.625rem}.lp-order-statuses li.total-raised span i{font-size:1.5625rem}.lp-order-statuses::after{display:block;clear:both;content:\"\"}.featured-theme{border-top:1px solid #eee;margin-top:10px;padding-top:10px}.featured-theme p{margin:0;font-size:12px}.featured-theme .star-rating{display:inline-block;line-height:.75rem}.featured-theme .star-rating .star{font-size:.8125rem;width:13px;height:13px}.featured-theme span{font-size:.6875rem}.lp-place-holder{background:#fff;padding:10px;display:block;margin:20px auto;box-shadow:0 0 0 rgba(0,0,0,0.1);border-radius:3px}.lp-place-holder [class*=line-]{height:6px;width:400px;background:#f6f7f9;margin-bottom:13px;margin-right:5px}.lp-place-holder .thumbnail{height:40px;width:40px;float:left;margin-right:20px;display:inline-block}.lp-place-holder .line-heading{width:80%;height:20px}.lp-place-holder .line-sm{width:30%;margin-top:10px}.lp-place-holder .line-xs{width:50%}.lp-place-holder .line-df{margin-top:30px;width:380px}.lp-place-holder .line-lg{width:200px}.lp-place-holder .line-lgx{width:450px}.lp-place-holder [class*=line],.lp-place-holder .thumbnail{animation:lpTimeLine;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;background:linear-gradient(to right,#eee 8%,#ddd 18%,#eee 33%);background-size:800px auto;background-position:100px 0}@keyframes lpTimeLine{0%{background-position:-350px 0}100%{background-position:400px 0}}.post-type-lp_order #post-body-content{display:none}.post-type-lp_order #order_details{border:none !important;background:transparent !important}.post-type-lp_order #order_details .hndle,.post-type-lp_order #order_details .handlediv,.post-type-lp_order #order_details .postbox-header{display:none}.post-type-lp_order #order_details .inside{display:block !important;margin:0;padding:0}.post-type-lp_order #order_details .order-data{margin:0 0 20px 0 !important;padding:30px !important;border:1px solid #ccd0d4 !important;background-color:#fff !important;box-shadow:none !important}.post-type-lp_order #order_details .order-data-field{margin-bottom:20px}.post-type-lp_order #order_details .order-data-field label{display:block;margin-bottom:5px;font-weight:500}.post-type-lp_order #order_details .order-data-number{margin:0 0 10px;font-size:1.25rem;font-weight:600}.post-type-lp_order #order_details .payment-method-title{color:#777;font-size:1rem}.post-type-lp_order #order_details .payment-method-title strong{color:#23282d}.post-type-lp_order #order_details .order-data-heading{margin-top:40px;font-size:1rem}.post-type-lp_order #order_details .order-users{display:inline-block}.post-type-lp_order #order_details .order-users .description{margin-top:10px;padding:10px;background:#eee}.post-type-lp_order #order_details .order-data-date .order-date{width:120px}.post-type-lp_order #order_details .order-data-date .order-hour,.post-type-lp_order #order_details .order-data-date .order-minute{width:50px}.post-type-lp_order #order_details .order-data-note{display:inline-block}.post-type-lp_order #order_details .order-data-note .order-note{padding:10px;color:#fff;background-color:#c1a3b6;font-size:.875rem}.post-type-lp_order #order_details .order-items{margin:0;border:1px solid #ccd0d4 !important;background-color:#fff}.post-type-lp_order #order_details .order-items table{width:100%;border-collapse:collapse}.post-type-lp_order #order_details .order-items table thead{margin:0;padding:0}.post-type-lp_order #order_details .order-items table thead tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table thead th{padding:15px;border-bottom:0;color:#999;font-weight:400;text-align:left}.post-type-lp_order #order_details .order-items table thead th:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table thead th:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tbody td,.post-type-lp_order #order_details .order-items table tfoot td{padding:10px;border-bottom:1px solid #ddd;text-align:left}.post-type-lp_order #order_details .order-items table tbody{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tbody tr td{padding:15px}.post-type-lp_order #order_details .order-items table tbody tr td:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tbody tr td:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tfoot{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tfoot tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table tfoot tr:last-child td{padding-top:20px;padding-bottom:20px}.post-type-lp_order #order_details .order-items table tfoot td{padding:10px 15px;padding-bottom:0;border:0;font-size:.875rem;text-align:right}.post-type-lp_order #order_details .order-items table tfoot td:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tfoot td:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table .column-price,.post-type-lp_order #order_details .order-items table .column-total,.post-type-lp_order #order_details .order-items table .column-quantity{width:150px;text-align:right}.post-type-lp_order #order_details .order-items table .row-subtotal td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-subtotal td .order-total,.post-type-lp_order #order_details .order-items table .row-total td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-total td .order-total{font-weight:700}.post-type-lp_order #order_details .order-items table .remove-order-item{outline:0;color:#ccc;text-decoration:none}.post-type-lp_order #order_details .order-items table .remove-order-item .dashicons{font-size:1.25rem}.post-type-lp_order #order_details .order-items table .remove-order-item:hover{color:red}.post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item{display:inline-block}.post-type-lp_order #order-export__button:hover{cursor:pointer}.post-type-lp_order .export-modal.modal{display:none;position:fixed;z-index:10;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,0.4)}.post-type-lp_order .export-modal .modal-content{background-color:#fefefe;margin:5% auto;border:1px solid #888;width:60%;position:relative}.post-type-lp_order .export-modal .close{color:#aaa;position:absolute;font-size:28px;font-weight:bold;top:-5px;right:11px}.post-type-lp_order .export-modal .close:hover{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .close:focus{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .panel{display:none}.post-type-lp_order .export-modal .panel.active{display:block}.post-type-lp_order #order-export__tabs.tabs{display:flex;justify-content:space-around;height:40px;box-shadow:0 0 1px 1px rgba(0,0,0,0.2)}.post-type-lp_order #order-export__tabs.tabs>*{width:100%;color:dimgray;height:100%;cursor:pointer;display:flex;justify-content:center;align-items:center}.post-type-lp_order #order-export__tabs.tabs>*:hover:not(.active){background-color:#dcdcdc}.post-type-lp_order #order-export__tabs.tabs>.active{color:white;background-color:#4caf50}.post-type-lp_order #lp-invoice__content{padding:20px 40px 0;margin-bottom:25px}.post-type-lp_order #lp-invoice__content thead th{border-bottom:1px solid #000;border-top:1px solid #000;padding:10px 20px}.post-type-lp_order #lp-invoice__content tbody td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order #lp-invoice__content tfoot td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order .export-options__content{margin-bottom:25px;padding:10px 40px}.post-type-lp_order .export-options{position:relative}.post-type-lp_order .export-options__loading{opacity:0;z-index:-1;visibility:hidden;position:absolute;top:0;left:0;width:100%;background:#fff;right:0;bottom:0;display:flex;align-items:center;justify-content:center}.post-type-lp_order .export-options__loading .spinner{background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;z-index:9;display:inline-block;visibility:visible}.post-type-lp_order .export-options__loading.active{opacity:1;z-index:9;visibility:visible}.post-type-lp_order #lp-invoice__export{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__export:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__update{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__update:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .export-options__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .lp-invoice__body table{border-spacing:0;width:100%}.post-type-lp_order .lp-order-status .dashicons{display:inline-flex !important;align-items:center;font-size:1rem}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination{text-align:left}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li{border:1px solid #2271b1;background:#f6f7f7}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .page-numbers{padding:0 6px}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .current{background:#2271b1;color:#fff !important}#learn-press-toggle-settings-js-css{display:none}#learn-press-toggle-settings-js-css+table{display:none}#learn-press-toggle-settings-js-css:checked+table{display:table}.color-schemas{margin:0 20px 20px 0;float:left}.color-schemas ul{list-style:none;margin:0;padding:0}.color-schemas ul>li>label{font-weight:600;display:block;margin-bottom:10px}.color-schemas .wp-color-picker{width:80px;height:24px;vertical-align:top;margin:0}.color-schemas .wp-picker-holder{position:absolute}.color-schemas .buttons{display:none}.color-schemas table{border-collapse:collapse;position:relative}.color-schemas table td,.color-schemas table th{padding:10px 10px}.color-schemas table tbody{border:1px solid transparent;position:relative}.color-schemas table tbody td,.color-schemas table tbody th{text-align:left;background:#f5f5f5}.color-schemas table tbody tr:first-child td,.color-schemas table tbody tr:first-child th{padding-bottom:0}.color-schemas table:after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,0.7)}.color-schemas tfoot td,.color-schemas tfoot th{padding-left:0;padding-right:0}.color-schemas .remove-schema{float:right;color:red}.color-schemas .wp-color-result{margin:0}.color-schemas .clone-schema{display:none}.color-schemas:first-child .remove-schema,.color-schemas:first-child .apply-schema{display:none}.color-schemas:nth-child(2){clear:both}.color-schemas:hover tbody{opacity:1}.color-schemas.current tbody{border-color:#DDD}.color-schemas.current tbody td,.color-schemas.current tbody th{background:rgba(5,215,255,0.26)}.color-schemas.current table:after{display:none}.color-schemas.current .clone-schema{display:inline-block}.wp-picker-container{position:relative}.wp-picker-container .wp-picker-holder{z-index:99999}.lp-install-sample{max-width:600px;margin:0;padding:10px 25px;border:1px solid #ccd0d4;border-radius:4px;background-color:#fff}.lp-install-sample__options{margin-bottom:20px;padding:0 20px;border:1px solid #eee;border-radius:4px}.lp-install-sample__options legend{padding:5px;font-weight:500}.lp-install-sample__buttons{display:flex;margin-top:25px;align-items:center;justify-content:space-between}.lp-install-sample__toggle-options{margin-right:auto;margin-left:10px}.lp-install-sample__uninstall{float:right}.lp-install-sample__response{margin:0;padding:10px;border:2px solid #059601;border-radius:6px}.lp-install-sample__response.fail{border-color:#d85554}.lp-update-db-modal{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-update-db-modal__hidden{display:none !important;visibility:hidden;opacity:0;pointer-events:none}.lp-update-db-modal__overlay{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-update-db-modal__content{display:inline-block;overflow:hidden;z-index:2;width:100%;max-width:510px;border-radius:8px;text-align:left;vertical-align:middle}.lp-update-db-modal__content-header{padding:24px 24px 16px 24px;background-color:#fff}.lp-update-db-modal__content-start{display:flex;flex-direction:flex-start}.lp-update-db-modal__content-icon{display:flex;width:40px;height:40px;margin-right:0;margin-left:0;border-radius:999px;background-color:#fee2e2;justify-content:center;align-items:center;flex:0 0 auto}.lp-update-db-modal__content-icon svg{width:24px;height:24px;color:#dc2626}.lp-update-db-modal__content-icon svg:last-child{color:#258d6c}.lp-update-db-modal__content-icon__success{display:none}.lp-update-db-modal__content-text{margin-left:18px;text-align:left}.lp-update-db-modal__content-text h3{margin:0;font-weight:500}.lp-update-db-modal__content-text p{margin:0;margin-top:10px;color:#999;font-size:.875rem;font-weight:400}.lp-update-db-modal__content-footer{display:flex;flex-direction:row;padding:10px 24px;background-color:#f9fafb;justify-content:flex-end;align-items:center}.lp-update-db-modal__content-footer a{padding:8px 16px;border:1px solid #e5e7eb;border-radius:6px;color:#374151;font-size:.8125rem;font-weight:500;text-decoration:none}.lp-update-db-modal__content-footer a:last-child{margin-left:10px;color:#fff;background-color:#0073aa}.lp-update-db-modal__success .lp-update-db-modal__content-icon{background-color:#def7ec}.lp-update-db-modal__success .lp-update-db-modal__content-icon__error{display:none}.lp-update-db-modal__success .lp-update-db-modal__content-icon__success{display:block}#lp-tool-upgrade-db .wrapper-lp-upgrade-message,#lp-tool-upgrade-db .wrapper-terms-upgrade,#lp-tool-upgrade-db .wrapper-lp-loading{display:none}.terms-upgrade{max-width:500px;margin:0 auto}.terms-upgrade .error{display:none}.lp-modal-footer .learn-press-notice{color:#ff6060;font-weight:500;font-style:italic}.lp-modal-body .lp-skeleton-animation{width:500px;margin:0 20px}.tools-select__data{overflow:hidden}.tools-select__data li{background-color:#fff;border:1px solid #eee;color:#000;display:flex;flex-direction:row;align-items:center;flex:0 0 auto;font-size:.875rem;line-height:1.4em;font-weight:normal;padding:10px;width:100%}.tools-select__data li input{margin:0 10px 0 0}.progressbar__content{width:100%;font-size:.875rem;font-weight:normal;line-height:1.4em;background:#eee;padding:10px 0;display:flex;flex-direction:column;align-items:center;justify-content:center}.progressbar__content span{z-index:9}.progressbar__container{position:relative}.progressbar__value{position:absolute;width:0;height:100%;left:0;top:0;background:#8a2be2}.progressbar__item h4{z-index:9;margin:0}.progressbar__item{width:500px;border-bottom:1px solid #fff}.progressbar__indexs{z-index:9}.lp-tool__message{text-align:center;color:red;padding:10px 0;display:none}.tools-prepare__message{background:#dba617;padding:10px 0;text-align:center;display:none}.lp-admin-notices{background:transparent;display:none;padding:0;border:0;margin:0 !important}.lp-admin-notices .lp-admin-notice{position:relative}.lp-admin-notices .lp-mes-beta-version{background:#4299e1;color:whitesmoke}.lp-admin-notices .lp-mes-beta-version h3,.lp-admin-notices .lp-mes-beta-version a,.lp-admin-notices .lp-mes-beta-version a:visited{color:white}.lp-admin-notices .lp-mes-beta-version .btn-lp-notice-dismiss::before{color:#fff0f6}.tab-lp-admin-notice{margin-left:5px;width:4px;height:4px;background:#ff1919;display:inline-flex;border-radius:999px;vertical-align:middle}.lp-admin-editor{position:relative;margin:0;background-color:#fff}.lp-admin-editor .heading,.lp-admin-editor .lp-box-data-content{padding:0}#learn-press-admin-editor-metabox-settings{margin-top:20px}#course-editor .inside{margin:0;padding:0}#admin-editor-lp_course .lp-course-curriculum .heading{display:flex;flex-direction:row;flex-wrap:nowrap;position:relative;padding:8px 20px;align-items:center;line-height:1}#admin-editor-lp_course .lp-course-curriculum .heading h4{margin:0;font-size:1rem}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections{display:flex;width:40px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.close::before{content:\"\\f140\"}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.open::before{content:\"\\f142\"}#admin-editor-lp_course .lp-course-curriculum .heading .status{visibility:hidden;position:relative;top:5px;margin-left:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .heading .status::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .heading .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_course .lp-course-curriculum .curriculum-sections{margin:0;margin:0 20px 20px 20px;border:1px solid #ddd}#admin-editor-lp_course .lp-course-curriculum .section{margin:0;border-bottom:1px solid #e5e5e5;opacity:1;background:#fff}#admin-editor-lp_course .lp-course-curriculum .section:first-child{border-top:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section{margin-top:1px;border:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section form{margin:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head{background-color:#f4fcff}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable{position:relative;top:1px}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section{position:relative}#admin-editor-lp_course .lp-course-curriculum .section.empty-section::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-head .movable::before{display:inline-block;color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-collapse{display:none}#admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section input{background-color:transparent;box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section input:focus{box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section .section-head{display:flex;position:relative;height:42px;margin:0;padding:0;background-color:#f4fcff;line-height:2.5rem;transition:background 500ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable,#admin-editor-lp_course .lp-course-curriculum .section .section-head .creatable{display:inline-block;width:40px;margin:0;color:#999;font-family:Dashicons;font-size:1.25rem;text-align:center;vertical-align:middle}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable{margin-right:-1px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable::before{content:\"\\f333\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .section-item-counts{line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions{height:100%;color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions>*{display:inline-block;height:100%;text-align:center;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse::before{display:inline-block;width:40px;color:#999;font-family:Dashicons;font-size:1rem;line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.open::before{content:\"\\f343\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.close::before{content:\"\\f347\"}#admin-editor-lp_course .lp-course-curriculum .section .name{width:100%;border:0;color:#777;font-size:1.5rem;font-weight:600;line-height:3.125rem}#admin-editor-lp_course .lp-course-curriculum .section .name:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-collapse{overflow:hidden}#admin-editor-lp_course .lp-course-curriculum .section .section-content{padding:20px;border-top:1px solid #e5e5e5}#admin-editor-lp_course .lp-course-curriculum .section .details{margin-bottom:20px}#admin-editor-lp_course .lp-course-curriculum .section .title-input{padding-left:0;border:0;font-size:1.2em;line-height:1.875rem;flex:1}#admin-editor-lp_course .lp-course-curriculum .section .description-input{width:100%;margin:0;padding:0;border:0;color:#999}#admin-editor-lp_course .lp-course-curriculum .section .description-input:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section-list-items{width:100%;border-collapse:collapse}#admin-editor-lp_course .lp-course-curriculum .section-list-items ul{position:relative;min-height:5px;margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item{display:flex;position:relative;margin:0;border:1px solid #eee;border-bottom-width:0;background:#fff;transition:background 200ms ease-out;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.ui-sortable-helper{border-bottom:1px solid #eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1){background-color:#f7f7f7}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating::before{position:absolute;z-index:2;top:0;right:0;bottom:0;left:0;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing{background-color:#ffeded}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag{height:20px;padding-top:3px;padding-left:6px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;fill:#999;flex:0 0 18px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover{fill:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{display:flex;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title{margin-right:120px;margin-left:2px;flex-grow:1;flex-basis:100%}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title input{color:inherit}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{display:flex;position:absolute;top:0;right:2px;bottom:0;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions{margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions>*{visibility:hidden;margin-right:10px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .edit{text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .remove{color:#a00}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .drag{visibility:visible}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:not(.lp_lesson) .item-actions .actions .preview-item{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item{display:flex;position:relative;border-bottom-width:1px;transition:all 200ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag{display:flex;width:30px;color:#999;font-family:Dashicons;font-size:1rem;vertical-align:middle;cursor:default;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title{display:inline-block;margin:0;flex:1}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus{background-color:#fff}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type{display:inline-block;padding:8px 5px;color:#ccc}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type input{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.current{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type::before{position:relative;top:2px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz{padding:8px 6px 8px 0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.empty-item::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{text-align:right}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a{width:30px;height:30px;color:#999;line-height:1.875rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a:hover{color:#0073aa}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item>a:hover{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul{display:none;position:absolute;z-index:9;top:100%;right:0;width:165px;margin:0;border:1px solid #999;background:#fdfeff;text-align:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li{margin:0;border-bottom:1px solid #eee;text-align:right}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a{display:block;padding:10px 25px;color:#757575;font-size:.75rem;text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover{background:#eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item:hover ul{display:block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .item-actions .actions>*{visibility:visible;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_quiz .icon::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item{position:relative;color:#a2a2a2}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .item-actions{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .icon::before{color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{color:#0085ba;font-size:1.25rem;text-align:center;flex:0 0 29px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon::before{font-family:Dashicons}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input{width:100%;padding:8px 10px 8px 0;border:0;color:inherit;font-size:.875rem;font-weight:600}#admin-editor-lp_course .lp-course-curriculum .section-actions{padding:0 20px 20px 20px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove{display:none;float:right;height:30px;border:1px solid #eee;border-radius:3px;color:#e74c3c;line-height:1.875rem;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .icon{padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .confirm{display:none;padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .confirm{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon{display:none}#admin-editor-lp_course .lp-course-curriculum .ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating{top:40px;left:100px;opacity:.8;background:#a00}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.section-item-counts{margin:0;margin-left:auto;font-size:.75rem;white-space:nowrap}.section-item-counts span{color:#999}#course-editor{margin-bottom:10px}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-left:0}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-left:0}#quiz-editor .inside{margin:0;padding:0}#admin-editor-lp_quiz{margin:0;padding:0;border:0}#admin-editor-lp_quiz form{margin:0}#admin-editor-lp_quiz .lp-box-data-head{display:flex;flex-direction:row;margin:0;padding:6px 20px;align-items:center}#admin-editor-lp_quiz .lp-box-data-head h3{padding:0}#admin-editor-lp_quiz .lp-box-data-head .status{visibility:hidden;position:relative;top:5px;margin-left:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_quiz .lp-box-data-head .status::before{content:\"\\f463\"}#admin-editor-lp_quiz .lp-box-data-head .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions{display:flex;width:40px;height:30px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_quiz .lp-box-data-content{margin:20px;margin-top:0;border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions{border-collapse:collapse;color:#777}@media(max-width:1560px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .fill_in_blanks .question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row{display:flex;flex-direction:row;text-align:center;align-items:center}@media(max-width:1024px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row.question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>*{width:100%;padding:12px 8px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort{position:relative;color:#999;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;flex:0 0 15px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort:hover{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order{padding:12px 0;color:#32373c;font-size:1.2em;text-align:left;flex:0 0 25px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order::after{content:\".\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type{display:inline-flex;position:relative;width:125px;height:32px;padding:0;border-radius:2px;background-color:#eee;box-shadow:0 0 2px rgba(0,0,0,0.22);line-height:2rem;cursor:pointer;flex:0 0 auto;align-items:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a{display:inline-flex;width:100%;padding:0 10px;color:#666;text-align:center;cursor:pointer;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a::after{margin-left:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul{visibility:hidden;position:absolute;z-index:9999;top:100%;right:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;opacity:1;background:#fdfeff;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a{display:block;min-width:110px;padding:10px 20px;color:#757575;line-height:1.25rem;text-align:right;white-space:nowrap;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a:hover{background-color:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li.disabled{opacity:.4;background-color:#fff;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type:hover ul{visibility:visible;opacity:1;pointer-events:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.actions{width:300px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.name{padding-left:5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover>.sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row .actions .lp-box-data-actions{text-align:right !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header{display:none;border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>*{font-weight:bold}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.order::after{content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.actions{padding:12px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings{padding:0 20px;border:1px solid #ddd;border-right:0;border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings>*{padding:20px 20px 20px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .sort{width:12px;padding:8px 6px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-text{width:calc(100% - 100px);padding-left:0;color:#444;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .order{width:10px;padding:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-correct{width:65px;color:#444;font-weight:600;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions{padding:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions .lp-toolbar-btn{height:42px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr{border:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td{position:static;padding:0 10px;border:0;background:inherit}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort{width:12px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-text{padding-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct{text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr .svg-icon{height:18px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .svg-icon{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper{border-right:0;border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td.sort{border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort i{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort::before{display:inline-block;position:absolute;top:12px;left:4px;font-family:Dashicons;font-size:1.125rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td::after{position:absolute;top:0;right:1px;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-text input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item{border-bottom:1px solid #ddd;background:#f4fcff;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-helper{border-top:1px solid #f1f1f1}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort .fa,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort .fa{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort::after{display:inline-block;position:absolute;left:5px;font-family:Dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-settings{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell{padding:10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input{width:100%;padding:0;border:0;color:#32373c;background:transparent;box-shadow:none;font-size:1.2em;font-weight:normal;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons{display:grid;position:static;z-index:10;height:100%;text-align:right;grid-template-columns:30px 30px 30px 40px;align-items:center;justify-content:end}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons>div a{visibility:hidden}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;z-index:2;top:50%;left:50%;width:28px;height:30px;margin-top:-15px;margin-left:-15px;line-height:1.875rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul{z-index:9}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a{padding:8px 24px;line-height:1.5rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a.remove{border-bottom:1px solid #eee;color:#666}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle{width:40px;height:42px;padding-right:0;font-family:Dashicons;font-size:1.25rem;line-height:2.625rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.open::after{content:\"\\f343\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.close::after{content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions:hover .lp-toolbar-buttons>div a{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings{background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options{padding-right:0;padding-left:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field{margin:0;padding:20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field:nth-child(2n+1){background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-label{margin:0;margin-bottom:10px;color:#666;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .hndle{font-weight:600;cursor:default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle{float:right;position:absolute;top:0;right:0;width:36px;height:36px;line-height:2.25rem;text-align:center;cursor:pointer}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle::after{font-family:Dashicons;font-size:1.125rem;content:\"\\f460\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .quiz-question-options{width:38px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox{min-width:34px;height:34px;line-height:2.625rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .hndle{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .toggle::after{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.sorting_choice .quiz-question-data table.lp-list-options .answer-correct{display:none !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer{margin-top:-1px;border-top:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row{height:auto;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle{display:flex;width:30px;padding:8px 6px 8px 10px;color:#999;font-family:Dashicons;font-size:1.25rem;vertical-align:middle;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle::before{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .order{padding:8px 0;line-height:1.75rem;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question{padding:8px 10px 8px 5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title{display:inline-block;position:relative;min-width:500px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input{width:100%;margin:0;padding:6px 0;border:0;background:transparent;font-size:1.2em;line-height:1.125rem;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{color:#32373c}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input::placeholder{display:inline-block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new{display:inline;position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types{display:none;position:absolute;z-index:9999999;top:100%;right:-2px;width:200px;margin:6px;border:1px solid #999;background-color:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a{display:block;padding:12px 20px;outline:0;color:#757575;box-shadow:none;line-height:1;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a:hover{background:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li.disabled{opacity:.5;background-color:#eee;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button:hover+.question-types{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button+.question-types:hover{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button[disabled=disabled]:hover+.question-types{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .select-item{display:inline}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question button{height:30px;box-shadow:0 1px 0 #ccc !important}#admin-editor-lp_quiz .lp-box-data-content .question-button-actions{text-align:left}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-label{display:none}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-input{margin-left:0}#question-editor .inside{margin:0;padding:0}#admin-editor-lp_question{margin:0;padding:0;border:0;background:#fff}#admin-editor-lp_question form{margin:0}#admin-editor-lp_question .lp-box-data-head{display:flex;flex-direction:row;padding:10px 20px;align-items:center}#admin-editor-lp_question .lp-box-data-head .heading{margin:0;padding:0;flex:1}#admin-editor-lp_question .lp-box-data-head .lp-question-editor{position:relative;margin-left:auto;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a{display:inline-flex;height:32px;padding:0 16px;border:1px solid #999;border-radius:2px;color:#666;line-height:2rem;text-decoration:none;align-items:center;cursor:pointer;user-select:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a::after{margin-left:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul{display:none;position:absolute;z-index:9999;top:100%;right:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;background:#fdfeff}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li{margin:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li:hover,#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.active{background:#eee}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li a{display:block;min-width:110px;padding:10px;color:#757575;font-size:.75rem;text-align:right;white-space:nowrap;text-decoration:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled{opacity:.4}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled a{color:#999;cursor:not-allowed;pointer-events:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul:hover{display:block}#admin-editor-lp_question .lp-box-data-head .lp-question-editor:hover .question-types ul{display:block}#admin-editor-lp_question .lp-box-data-content{padding:0 20px 20px 20px;border:none !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers{width:100%;border:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tr td{padding:0 15px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th{padding:15px;border-bottom:1px solid #ddd;background-color:#eee;font-weight:600}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.answer-text{padding-left:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{width:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort{padding:0 10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order{width:10px;padding:0;text-align:right}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-correct{width:65px;text-align:center}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-text{padding-left:8px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{padding-right:0;text-align:right}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr{color:#444;background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td{background-color:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort{width:15px;padding:0;font-size:1.125rem;text-align:center;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order{font-size:.875rem}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input{width:100%;padding:0;border:0;color:#444;background:transparent;box-shadow:none;font-size:.875rem;font-weight:600;transition:box-shadow .2s ease}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons{z-index:auto}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer{visibility:visible;height:42px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td.sort{border-left:0}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .svg-icon{display:none}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td{position:relative}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .sort::before{display:inline-block;position:absolute;top:8px;left:10px;font-family:\"Dashicons\";content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_question .lp-box-data-content .add-answer{margin:15px 0 0 0}#admin-editor-lp_question.sorting_choice table.list-question-answers .answer-correct{display:none !important}.lp-admin-fib-question-editor,.admin-quiz-fib-question-editor{text-align:left}.lp-admin-fib-question-editor .lp-box-data-content,.admin-quiz-fib-question-editor .lp-box-data-content{margin:0 !important;border:none !important}.lp-admin-fib-question-editor .content-editable,.admin-quiz-fib-question-editor .content-editable{min-height:240px !important;padding:12px 15px;border:2px solid #ddd;border-radius:4px}.lp-admin-fib-question-editor .content-editable .fib-blank,.admin-quiz-fib-question-editor .content-editable .fib-blank{position:relative;color:#2196f3}.lp-admin-fib-question-editor .content-editable .fib-blank::before,.admin-quiz-fib-question-editor .content-editable .fib-blank::before{content:\"#\" attr(data-index) \". \"}.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{min-width:700px;border-collapse:collapse}@media(max-width:1024px){.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{width:100%;min-width:100%}}.lp-admin-fib-question-editor .fib-blanks tbody,.admin-quiz-fib-question-editor .fib-blanks tbody{border-bottom:1px solid #bbb}.lp-admin-fib-question-editor .fib-blanks tbody tr,.admin-quiz-fib-question-editor .fib-blanks tbody tr{background:#eee}.lp-admin-fib-question-editor .fib-blanks tbody tr td,.admin-quiz-fib-question-editor .fib-blanks tbody tr td{padding:5px}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options td,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options td{padding:0}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options ul{display:none;margin:5px 0;padding:20px;border:1px solid #ddd;background:#fff;list-style:none}.lp-admin-fib-question-editor .fib-blanks tbody.open .blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody.open .blank-options ul{display:block}.lp-admin-fib-question-editor .fib-blanks tbody .blank-position,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-position{font-weight:600;text-align:center}.lp-admin-fib-question-editor .fib-blanks tbody .blank-actions,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-actions{text-align:right}.lp-admin-fib-question-editor .fib-blanks tbody:last-child,.admin-quiz-fib-question-editor .fib-blanks tbody:last-child{border:0}#fill-in-blanks-editor{display:flex}#fill-in-blanks-editor .blank-options{flex:0 0 65%}#fill-in-blanks-editor .blanks{width:100%;margin:0}#fill-in-blanks-editor .blanks .blank{margin:0 0 20px 0;padding:20px;border:1px solid #d9e0f1;background:#fbfcff}#fill-in-blanks-editor .blanks .blank label{font-weight:bold}#fill-in-blanks-editor .blanks .blank .blank-content{width:100%;min-height:74px;font-size:1rem}#fill-in-blanks-editor .blanks .blank .blank-words .word{background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks .blank .blank-words .word.correct{background:#00a1e6}#fill-in-blanks-editor .blanks .blank .blank-tip p{font-style:italic}#fill-in-blanks-editor .blanks .blank .button-remove{color:red}#fill-in-blanks-editor .passage-preview{margin-left:20px;padding:15px 20px;border:1px solid #ddd;font-size:1rem;line-height:1.5rem;text-align:justify;flex:1}#fill-in-blanks-editor .passage-preview .blank-input{display:inline-block;position:relative;width:50px;height:16px;margin:-2px 10px;padding:0;border:0;border-bottom:1px dashed #ddd;background:transparent;box-shadow:none;font-size:1rem;vertical-align:middle}#fill-in-blanks-editor .blanks-list{width:100%}#fill-in-blanks-editor .blanks-list textarea{width:100%;min-height:300px;margin-bottom:20px;outline:0;background:#f9f9f9;box-shadow:none;font-size:1.125rem;line-height:1.875rem}#fill-in-blanks-editor .blanks-list code{line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks-list code.correct{background:#00a1e6}#lp-modal-choose-items{display:none;position:fixed;z-index:-1;top:0;right:0;bottom:0;left:0;opacity:0;background-color:rgba(0,0,0,0.5)}#lp-modal-choose-items.show{display:block;z-index:99999999;opacity:1}#lp-modal-choose-items.loading .lp-choose-items ul.list-items::before{display:block;position:absolute;z-index:9;top:0;right:0;bottom:0;left:0;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;background-color:#fff;content:\"\"}#lp-modal-choose-items .lp-choose-items{position:relative;max-width:800px;margin:5% auto 10% 20%;border:1px solid #ddd;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);transition:all 200ms ease-out}#lp-modal-choose-items .lp-choose-items.show-preview .header .preview-title{display:flex;align-items:center}#lp-modal-choose-items .lp-choose-items .header{position:relative}#lp-modal-choose-items .lp-choose-items .header .preview-title{display:none;position:absolute;z-index:10;top:0;right:0;bottom:0;left:0;padding-left:20px;border-bottom:1px solid #ddd;background-color:#fff;font-weight:600}#lp-modal-choose-items .lp-choose-items .header .preview-title h3{margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs{margin:0;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .header .tabs .tab{display:inline-block;position:relative;margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs .tab:not(:last-child)::before{position:absolute;top:50%;right:0;height:44px;margin-top:-22px;border-right:1px solid #ddd;content:\"\"}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active::after{display:inline-block;position:absolute;bottom:-6px;left:50%;width:10px;height:10px;margin-left:-6px;border:1px solid #ddd;border-right:0;border-bottom:0;background:#fff;content:\"\";transform:rotate(45deg)}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a{color:#0073aa}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a{display:inline-block;height:44px;padding:0 20px;color:#333;font-weight:600;line-height:2.75rem;text-decoration:none}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus{box-shadow:none}#lp-modal-choose-items .lp-choose-items .header .close{display:inline-block;position:absolute;z-index:30;top:0;right:0;padding:12px;font-size:1em;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main{overflow:hidden;position:relative;padding:20px;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .main .section-item{display:block;overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:color 200ms ease-out}#lp-modal-choose-items .lp-choose-items .main .section-item::before{position:relative;top:3px;font-family:Dashicons}#lp-modal-choose-items .lp-choose-items .main .search{margin-bottom:20px;background:transparent}#lp-modal-choose-items .lp-choose-items .main .search input.modal-search-input{width:100%;height:36px;padding:0 14px;font-size:1rem;line-height:2.25rem}#lp-modal-choose-items .lp-choose-items .main .list-items{overflow-y:auto;position:relative;min-height:260px;max-height:460px;margin:0}#lp-modal-choose-items .lp-choose-items .main .list-items li{margin:15px 0;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main .pagination .index{margin-left:20px;line-height:1.75rem}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview{overflow:auto;position:absolute;z-index:2;top:0;right:0;bottom:0;left:0;max-height:420px;padding:20px;background-color:#fff;transform:translate(100%,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show{transform:translate(0,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li{margin:15px 0}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li:first-child{margin:-10px 0 15px 0}#lp-modal-choose-items .lp-choose-items .footer{padding:20px}body.lp-item-moving{cursor:url(\"..\u002F..\u002Fimages\u002Fclosedhand.cur\") 7 5,default !important}@media screen and (max-width:900px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row{display:block;width:auto;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row>*{width:auto}}#learn-press-reset-course-users,#learn-press-reset-user-courses,#learn-press-reset-user-item{max-width:100%}#learn-press-reset-course-users table,#learn-press-reset-user-courses table,#learn-press-reset-user-item table{width:100%;border-collapse:collapse}#learn-press-reset-course-users .courses-list,#learn-press-reset-user-courses .courses-list,#learn-press-reset-user-item .courses-list{margin:0}#learn-press-reset-course-users input[type=text],#learn-press-reset-user-courses input[type=text],#learn-press-reset-user-item input[type=text]{min-width:300px;height:28px;margin-left:0}#learn-press-reset-course-users .action-reset.dashicons-trash,#learn-press-reset-user-courses .action-reset.dashicons-trash,#learn-press-reset-user-item .action-reset.dashicons-trash{color:red}#learn-press-reset-course-users .action-reset.dashicons-update,#learn-press-reset-user-courses .action-reset.dashicons-update,#learn-press-reset-user-item .action-reset.dashicons-update{-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-assign-course .description{margin-bottom:10px}#learn-press-assign-course label{display:block;margin-bottom:5px}#learn-press-unassigned-course .description{margin-bottom:10px}#learn-press-unassigned-course label{display:block;margin-bottom:5px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}.lp-group-step{border-bottom:1px solid #eee}.lp-group-step h3{padding:0 2em}.lp-group-step label{margin-bottom:5px;font-size:.8em;font-weight:500;font-style:italic}.lp-group-step .lp-item-step{display:flex;position:relative;min-height:35px;margin:0;padding:1em 1em 1em 0;border-top:1px solid #eee;align-items:center;cursor:pointer}.lp-group-step .lp-item-step:hover{background:#eee}.lp-group-step .lp-item-step.running .lp-item-step-left::before{opacity:1}.lp-group-step .lp-item-step.running .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.running::before{display:block;position:absolute;width:0;height:100%;background:#0073aa;content:\"\";opacity:.1;transition:.8s linear}.lp-group-step .lp-item-step.running .progress-bar{opacity:.1}.lp-group-step .lp-item-step.completed .lp-item-step-left::after{opacity:1}.lp-group-step .lp-item-step.completed .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.completed .progress-bar{width:100%;opacity:.1}.lp-group-step .lp-item-step.error .lp-item-step-left::after{opacity:1;color:#d33;content:\"\\f335\"}.lp-group-step .lp-item-step .progress-bar{display:block;position:absolute;top:0;left:0;width:0;height:100%;opacity:0;background:rgba(124,96,217,0.7490196078);transition:.8s linear}.lp-group-step .lp-item-step-left{display:inline-flex;align-items:center;position:relative;padding:0 2em}.lp-group-step .lp-item-step-left::before{display:block;position:absolute;z-index:2;width:1em;height:1em;border:1px solid rgba(0,0,0,0.1);border-top:1px solid #3498db;border-radius:50%;opacity:0;content:\"\";-webkit-animation:lp-rotating .8s linear infinite;animation:lp-rotating .8s linear infinite}.lp-group-step .lp-item-step-left::after{position:absolute;z-index:1;left:23px;opacity:0;color:#4caf50;font-family:Dashicons;font-size:1.5em;content:\"\\f147\"}.lp-group-steps-done{display:none}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media screen and (max-width:782px){.learn-press-dropdown-pages .select2-container{vertical-align:top}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:31px}.learn-press-dropdown-pages .select2-selection__rendered{line-height:31px !important}#learn-press-advertisement{margin:0 12px;padding-bottom:0}#learn-press-advertisement .slider-controls{bottom:40px}}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-admin-statistics-tab-content{box-sizing:border-box;max-width:100%}.lp-admin-statistics-tab-content .btn-group{display:flex;margin:20px 0;gap:10px;flex-direction:row;flex-wrap:wrap}.lp-admin-statistics-tab-content .btn-group button.btn-filter-time{border:1px solid #284bca;color:#000;padding:10px 24px;cursor:pointer;background:#fff}.lp-admin-statistics-tab-content .btn-group .btn-filter-time.active{background:#284bca;color:#fff;border:1px solid #284bca}.lp-admin-statistics-tab-content .custom-filter-time{display:none}.lp-admin-statistics-tab-content .statistics-content{background:white;border:1px solid #d9d9d9;padding:22px}.lp-admin-statistics-tab-content .statistics-content .statistics-group{display:flex;justify-content:space-between;flex-direction:row;flex-wrap:wrap;gap:10px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item{border:1px solid #000;color:#000;padding:15px 30px;display:flex;flex-direction:column;text-align:center;width:100%;max-width:150px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-title{font-size:16px;line-height:1.2}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-count{font-size:24px;line-height:1.2;font-weight:700}.lp-admin-statistics-tab-content .statistics-content .statistics-title{color:#000;text-align:center;font-size:24px;font-style:normal;font-weight:700;line-height:normal;text-transform:capitalize}.lp-admin-statistics-tab-content .statistics-content .statistics-chart-wrapper{padding:10px 30px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;gap:20px;margin-top:20px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50{flex:1}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50:first-child{border-right:1px solid #d9d9d9}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics li{font-size:16px;line-height:1.2;font-weight:400}.lp-admin-statistics-tab-content .statistics-content .top-course-analytics-title{margin-top:0;font-size:24px;line-height:1.2;font-weight:700}table.lp-material--table{border-collapse:collapse;width:100%}table.lp-material--table td,table.lp-material--table th{border:1px solid #ddd;text-align:left;padding:8px}table.lp-material--table thead.hidden{display:none}table.lp-material--table td.sort{cursor:move}table.lp-material--table tr:nth-child(even){background-color:rgba(221,221,221,0.2509803922)}.lp-material--field-wrap{display:flex;flex-direction:row;align-items:center;padding-block:5px}.lp-material--field-wrap label{min-width:70px}.lp-material--group{margin-top:10px;padding:10px;border:1px solid #dedede;border-radius:10px;box-shadow:2px 2px rgba(180,180,180,0.2)}.lp-material-btn-wrap{margin-bottom:10px}.lp-material-btn-wrap.loading::before:before,#btn-lp--save-material.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.button.lp-material--delete{color:white;border-color:red;background:red;vertical-align:top}.lp-material--field-wrap.field-action-wrap{display:flex;justify-content:space-between}.lp-meta-box .lp-material--field-wrap input{width:100%}#available-to-upload{font-weight:bold}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-left:1px solid var(--lp-border-color,#e2e0db);padding-left:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-left:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 20px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:16px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-left:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-left:16px;padding-right:16px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 45px 12px 20px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;right:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-left:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-left linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:right;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-left:0;margin-right:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-ico svg{width:20px;height:20px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}[class*=wp-block-learnpress] img,.block-editor-block-list__block img{max-width:100%;height:auto}[class*=wp-block-learnpress] .info-meta-item,.block-editor-block-list__block .info-meta-item{display:flex;gap:4px;flex-wrap:wrap}[class*=wp-block-learnpress] .info-meta-item i,.block-editor-block-list__block .info-meta-item i{color:var(--lp-primary-color,#ffb606)}[class*=wp-block-learnpress] .info-meta-left,.block-editor-block-list__block .info-meta-left{display:flex;gap:8px;align-items:center;letter-spacing:0}[class*=wp-block-learnpress] a,.block-editor-block-list__block a{text-decoration:none}.wp-block-learnpress-course-image{overflow:hidden}.wp-block-learnpress-course-instructor>div>*,.wp-block-learnpress-course-categories>div>*{display:inline;vertical-align:middle}.wp-block-learnpress-breadcrumb ul{margin:0 auto;list-style:none;padding:0}.wp-block-learnpress-breadcrumb li{display:inline-block;margin:0}.wp-block-learnpress-breadcrumb i{margin:0 8px}.wp-block-learnpress-breadcrumb a{color:inherit}.courses-btn-load-more{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);font-size:var(--lp-font-size-base,1em);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center;cursor:pointer;margin:20px auto}.courses-btn-load-more:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}.lp-modal-dialog .lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp-modal-dialog .lp_allow_repurchase_select>ul{margin:0;padding:0;list-style:none}.lp-modal-dialog .lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp-modal-dialog .lp-button{cursor:pointer;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-modal-dialog .lp-button.loading{pointer-events:none;opacity:.8}.lp-modal-dialog .lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-modal-dialog .lp-button:hover{border-color:var(--lp-primary-color,#ffb606);color:#fff;background:var(--lp-primary-color,#ffb606)}.lp-button.btn-finish-course{cursor:pointer;width:100%;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.lp-button.btn-finish-course:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.lp-button.btn-finish-course.loading{pointer-events:none;opacity:.8}.lp-button.btn-finish-course.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.c-gap-4{column-gap:4px}.wp-block-learnpress-course-feature-review .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}[class^=wp-block-learnpress] .extra-box ul{margin:0 0 0 20px;padding:0}.wp-block-learnpress-course-button-read-more,.wp-block-learnpress-course-button{cursor:pointer;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-button-read-more:hover,.wp-block-learnpress-course-button:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.wp-block-learnpress-course-button-read-more.loading,.wp-block-learnpress-course-button.loading{pointer-events:none;opacity:.8}.wp-block-learnpress-course-button-read-more.loading:before,.wp-block-learnpress-course-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@media(min-width:992px){.lp-block-course-sidebar{margin-top:-260px;margin-block-start:-260px !important}}.wp-block-learnpress-item-search .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}.wp-block-learnpress-item-search .search-course input[name=s]{display:block;width:100%;margin-left:30px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:focus{outline:0}.wp-block-learnpress-item-search .search-course button{position:absolute;top:0;right:10px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none}.wp-block-learnpress-item-search .search-course button:focus{outline:0}.wp-block-learnpress-item-search .search-course button i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-search .search-course button.clear{display:none}.wp-block-learnpress-item-search .search-course button.clear::before{content:\"\\f00d\"}.wp-block-learnpress-course-material .lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);margin-top:20px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-material .course-material-table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.wp-block-learnpress-course-material .course-material-table tbody tr:nth-child(even) td,.wp-block-learnpress-course-material .course-material-table .learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.wp-block-learnpress-course-material .course-material-table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.wp-block-learnpress-course-material .course-material-table th,.wp-block-learnpress-course-material .course-material-table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}.wp-block-learnpress-course-material .course-material-table th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-weight:600;text-align:center}.wp-block-learnpress-course-material .course-material-table th:first-child{text-align:left}.wp-block-learnpress-course-material .course-material-table tr td{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.wp-block-learnpress-course-material .course-material-table tr td:not(:first-child){text-align:center}.wp-block-learnpress-course-material .course-material-table tfoot td{text-align:left;font-weight:bold}.wp-block-learnpress-course-material .course-material-table.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}.wp-block-learnpress-item-hidden-sidebar .section-toggle{justify-content:flex-end;flex:0}.wp-block-learnpress-item-hidden-sidebar .section-toggle i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-close .back-course{padding:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}.wp-block-learnpress-item-close .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){.wp-block-learnpress-item-close .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}.wp-block-learnpress-item-close .back-course:hover{background:transparent;opacity:1}}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:after{display:none}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:focus{border:0;outline:0}.wp-block-learnpress-item-progress .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}.wp-block-learnpress-item-progress .number{padding-right:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.86)}.wp-block-learnpress-item-progress .learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color,#ffb606);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color,#ffb606);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.wp-block-learnpress-item-progress .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.wp-block-learnpress-item-navigation .course-item-nav{display:flex;justify-content:space-between}.wp-block-learnpress-item-navigation .course-item-nav .prev,.wp-block-learnpress-item-navigation .course-item-nav .next{display:flex;line-height:3.125em;flex:1;position:relative}.wp-block-learnpress-item-navigation .course-item-nav .prev span,.wp-block-learnpress-item-navigation .course-item-nav .next span{display:block;font-weight:bold}.wp-block-learnpress-item-navigation .course-item-nav .prev a,.wp-block-learnpress-item-navigation .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666);color:#999}.wp-block-learnpress-item-navigation .course-item-nav .prev::before,.wp-block-learnpress-item-navigation .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover a,.wp-block-learnpress-item-navigation .course-item-nav .prev:hover::before,.wp-block-learnpress-item-navigation .course-item-nav .next:hover a,.wp-block-learnpress-item-navigation .course-item-nav .next:hover::before{color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover .course-item-nav__name,.wp-block-learnpress-item-navigation .course-item-nav .next:hover .course-item-nav__name{display:block}.wp-block-learnpress-item-navigation .course-item-nav .next{text-align:right;flex-direction:row-reverse}.wp-block-learnpress-item-navigation .course-item-nav .next::before{margin-left:10px;content:\"\\f0da\"}.wp-block-learnpress-item-navigation .course-item-nav .next[data-nav=next]{justify-content:flex-end}.wp-block-learnpress-item-navigation .prev::before{margin-right:10px;content:\"\\f0d9\"}.wp-block-learnpress-item-navigation .prev .course-item-nav__name{right:auto;left:-30px}.wp-block-learnpress-item-navigation .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){.wp-block-learnpress-item-navigation .prev .course-item-nav__name{left:15px}}.wp-block-learnpress-item-navigation .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){.wp-block-learnpress-item-navigation .course-item-nav__name{top:-25px;right:15px;left:auto}}.wp-block-learnpress-item-curriculum .lp-course-curriculum__title,.wp-block-learnpress-item-curriculum .course-curriculum-info,.wp-block-learnpress-item-curriculum .course-section__description{display:none}.wp-block-learnpress-item-content .content-item-wrap{padding:0}.wp-block-learnpress-item-curriculum .lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1;flex-direction:row}.wp-block-learnpress-list-courses .learn-press-courses .course{width:unset;padding:0}.wp-block-learnpress-course-featured .course-featured{margin-bottom:0;background-color:inherit;color:inherit;padding:0}.courses-order-by,.block-courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by,.woocommerce-js .block-courses-order-by{background-position-x:calc(100% - 10px)}.courses-order-by:focus,.block-courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.course-img img{display:block}.block-search-courses{display:flex;flex:1;margin-bottom:0}.block-search-courses input{width:100%;max-width:240px;margin:0 4px 0 0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.block-search-courses input::-webkit-input-placeholder{color:#999}.block-search-courses input::-moz-placeholder{color:#999}.block-search-courses input:-ms-input-placeholder{color:#999}.block-search-courses input:-moz-placeholder{color:#999}.block-search-courses input::placeholder{color:#999}.block-search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.block-search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.block-search-courses button i{font-size:1.2em;line-height:1.2}.block-search-courses button:focus{outline:0}.block-search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}@media(max-width:767px){.wp-block-learnpress-course-search{width:100%}.wp-block-learnpress-course-search input{min-width:240px;max-width:unset}}.course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.course-filter-btn-mobile{display:none}}ul.wp-block-learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}ul.wp-block-learn-press-courses[data-layout=grid]{--columns:3;--gap:1.25em;--min-width:200px;grid-gap:var(--gap);display:grid;grid-template-columns:repeat(auto-fill,minmax(max(var(--min-width),100% \u002F var(--columns) - var(--gap) *(var(--columns) - 1) \u002F var(--columns)),1fr));margin-bottom:2.25em}@media(max-width:768px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:min(var(--columns),2)}}@media(max-width:480px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:1}}.wp-block-learnpress-course-price .course-price .free,.wp-block-learnpress-course-price .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.wp-block-learnpress-course-price .course-price .origin-price{margin-right:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.wp-block-learnpress-course-button-read-more button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button-read-more button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-course-button .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.courses-order-by-wrapper .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by-wrapper .courses-order-by{background-position-x:calc(100% - 10px)}.courses-order-by-wrapper .courses-order-by:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.wp-block-learnpress-course-filter h3{margin-bottom:20px;margin-top:0}.wp-block-learnpress-course-filter .filter .line{height:15px;background:#ccc;margin-bottom:10px}.wp-block-learnpress-course-search-filter,.wp-block-learnpress-course-level-filter,.wp-block-learnpress-course-author-filter,.wp-block-learnpress-course-price-filter,.wp-block-learnpress-course-categories-filter,.wp-block-learnpress-course-tag-filter{margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ccc}.wp-block-learnpress-course-search-filter .lp-course-filter__field,.wp-block-learnpress-course-level-filter .lp-course-filter__field,.wp-block-learnpress-course-author-filter .lp-course-filter__field,.wp-block-learnpress-course-price-filter .lp-course-filter__field,.wp-block-learnpress-course-categories-filter .lp-course-filter__field,.wp-block-learnpress-course-tag-filter .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.wp-block-learnpress-course-search-filter label,.wp-block-learnpress-course-level-filter label,.wp-block-learnpress-course-author-filter label,.wp-block-learnpress-course-price-filter label,.wp-block-learnpress-course-categories-filter label,.wp-block-learnpress-course-tag-filter label{flex:1}.wp-block-learnpress-course-search-filter span,.wp-block-learnpress-course-level-filter span,.wp-block-learnpress-course-author-filter span,.wp-block-learnpress-course-price-filter span,.wp-block-learnpress-course-categories-filter span,.wp-block-learnpress-course-tag-filter span{color:#999}.wp-block-learnpress-course-search-filter .search-box{width:100%;height:40px;border:1px solid #ccc;border-radius:5px;margin-top:12px}.wp-block-learnpress-button-submit-filter,.wp-block-learnpress-button-reset-filter{box-sizing:border-box;text-transform:capitalize;border:1px solid #ccc;border-radius:4px;background:white;float:left;text-align:center;width:calc(50% - 8px);padding:8px 30px}.wp-block-learnpress-button-submit-filter{margin-right:4px}.wp-block-learnpress-button-reset-filter{margin-left:4px}.block-editor-block-list__block img{display:block}.block-editor-block-list__block .learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}.block-editor-block-list__block a{text-decoration:none}.block-editor-block-list__block .c-gap-4{column-gap:4px}.block-editor-block-list__block .lp-course-curriculum .course-section .course-item__right{color:inherit}.block-editor-block-list__block.wp-block-learnpress-course-title>*{margin-top:0}a.block-editor-block-list__block.wp-block-learnpress-course-button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}a.block-editor-block-list__block.wp-block-learnpress-course-button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 0 0 10px !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;right:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-right:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;left:80%;transform:translateX(-50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-right:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:left}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-left:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;left:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-right:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-right:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-right:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;right:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;right:0;transform:translateX(-5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:left;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-right:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:right}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-left:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:left}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:right}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:left}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:left}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:left}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.button.disabled{pointer-events:none}.learnpress .postbox .rwmb-meta-box{margin-top:10px}.learnpress #field-_lp_requirements .rwmb-text-list-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{clear:none;position:relative;border:1px solid #ddd;border-radius:4px}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:none}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-advanced{width:calc(100% - 65px);padding:7px 10px;border:0;color:#777;background:transparent;box-shadow:none;line-height:1}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:50%;right:41px;margin-top:-10px;border-radius:unset;color:#999;background:transparent;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone i{font-size:1.25rem}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone:hover{color:#e74c3c}.learnpress #field-_lp_requirements .rwmb-text-list-clone::after,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{display:inline-block;position:absolute;top:50%;right:10px;margin:8px 0 0 0;margin-top:-9px;color:#999;font-family:Dashicons;font-size:1.25rem;content:\"\\f333\"}.learnpress #field-_lp_requirements .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_key_features .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_faqs .rwmb-text-list-clone:focus-within{border-color:#0085ba}.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list:focus{border-color:#0085ba}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{position:relative;padding:0 0 16px 0}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:block;padding:10px 10px 0 12px}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list{width:calc(100% - 25px);margin:0 13px 0 13px;border:1px solid #ddd;vertical-align:top}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:20px;right:36px;margin-top:-10px;color:#999;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{top:20px}.lp-notice,.learn-press-notice{position:relative;padding:12px;margin:0}.lp-notice h4,.learn-press-notice h4{margin:10px 0 15px}.lp-notice p,.learn-press-notice p{margin:0 0 5px 0;padding:0 2px}.lp-notice .lp-message-dismiss,.learn-press-notice .lp-message-dismiss{position:absolute;top:12px;right:12px}.lp-notice .notice-dismiss,.learn-press-notice .notice-dismiss{position:absolute;top:0;right:1px;margin:0;padding:9px;border:0;outline:0;color:#72777c;background:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;cursor:pointer}.lp-notice .notice-dismiss::before,.learn-press-notice .notice-dismiss::before{display:block;width:20px;height:20px;color:#72777c;background:0;font:normal 16px\u002F20px dashicons;text-align:center;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.learn-press-dropdown-pages{display:inline-block}.learn-press-dropdown-pages .list-pages-wrapper{display:flex;align-items:center;gap:10px}.lp-notice-update-database{border:1px solid rebeccapurple;border-left-color:red;border-radius:3px;color:white;background:rebeccapurple}.lp-notice-update-database.do-updating::before{display:inline-block;float:left;margin:9px 5px 0 -5px;color:#2773aa;font-family:dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#adminmenu .update-plugins.lp-plugins-count{padding:0 5px}.search-box input[name=post-search-author],.search-box .select2-container{min-width:200px;margin:0;vertical-align:top}.learn-press-notice-assigned-item{color:red}.learnpress .actions{margin:0}#learn-press-syncs li{position:relative}#learn-press-syncs li.syncing,#learn-press-syncs li.synced{padding-left:24px}#learn-press-syncs li.syncing input[type=checkbox],#learn-press-syncs li.synced input[type=checkbox]{display:none}#learn-press-syncs li.syncing::after{content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-syncs li.synced::after{color:#2773aa;content:\"\\f147\"}#learn-press-syncs li::after{display:block;position:absolute;top:0;left:-3px;width:24px;height:24px;font-family:dashicons;font-size:1.1875rem;line-height:1.5rem;text-align:center}#learn-press-updater .updater-progress{position:relative;margin:0 2px}#learn-press-updater .updater-progress ul{display:flex;position:relative;height:5px;background:#eee}#learn-press-updater .updater-progress ul li{position:relative;margin:0;flex:1}#learn-press-updater .updater-progress ul li::after{display:none;position:absolute;top:-30px;right:0;padding:3px 5px;border-radius:3px;color:#fff;background:#ddd;font-size:.75rem;content:attr(data-version)}#learn-press-updater .updater-progress ul li::before{content:\"\"}#learn-press-updater .updater-progress ul li:last-child::after{_display:block}#learn-press-updater .updater-progress ul::after{position:absolute;top:0;left:0;width:0;height:20px}#learn-press-updater .updater-progress .updater-progress-status{position:absolute;top:0;left:0;width:0;height:5px;background:#5bc4f9;-webkit-transition:width .25s;-moz-transition:width .25s;-ms-transition:width .25s;-o-transition:width .25s;transition:width .25s}#learn-press-updater .updater-progress .updater-progress-status::before{position:absolute;top:-20px;right:0;padding:0 5px;border-radius:3px;color:#fff;background:#5bc4f9;font-size:.75rem;_content:attr(data-value) \"%\"}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation{overflow:hidden;position:absolute;top:0;left:0;width:100%;height:5px;background:#5bc4f9}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation:not(.completed)::after{position:absolute;height:5px;background:#8dd9ff;content:\"\";-webkit-animation:animation4 1.5s ease-out infinite;-moz-animation:animation4 1.5s ease-out infinite;-ms-animation:animation4 1.5s ease-out infinite;-o-animation:animation4 1.5s ease-out infinite;animation:animation4 1.5s ease-out infinite}#learn-press-updater .updating-message{color:#a24666}#learn-press-updater .completed-message{color:#3c8eb7}#learn-press-updater{display:none}.select2 .select2-search.select2-search--inline{margin-bottom:0}.select2 .select2-selection .select2-selection__choice{margin-top:4px;margin-bottom:0}.select2 .select2-selection.select2-selection--multiple{min-height:30px}.list-pages-wrapper .select2-container--default .select2-selection--single .select2-selection__clear{margin:0}.edit-post-layout__metaboxes .rwmb-label>label{color:#666;font-size:small;font-weight:bold}body.post-type-lp_question #button-new-question{display:inline-block;position:relative}body.post-type-lp_question #button-new-question div{display:none;position:absolute;z-index:9999;top:100%;left:0;min-width:100px;margin:0 0 0 -1px;border:1px solid #999;background:white;font-weight:400}body.post-type-lp_question #button-new-question div a{display:block;min-width:100px;margin:0;padding:10px 20px;color:#666;white-space:nowrap;text-decoration:none}body.post-type-lp_question #button-new-question div a:hover{background:#eee}body.post-type-lp_question #button-new-question>a{position:relative;padding-right:15px;text-decoration:none}body.post-type-lp_question #button-new-question>a::after{display:inline-block;position:absolute;top:6px;right:0;width:0;height:0;margin:0;border:5px solid transparent;border-top-color:#0f7aae;content:\"\"}body.post-type-lp_question #button-new-question:hover div{display:block}.lp-label{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.lp-label.success{background:#4caf50}.lp-label.error{background:red}.lp-label.warning{background:#ffc107}.lp-label .far,.lp-label .fas,.lp-label .fa{display:inline-block;margin-right:5px}.lp-admin-profile-courses .column-results{width:200px}.lp-admin-profile-courses .course-results-progress .lp-progress-row{margin:0 0 20px 0}.lp-admin-profile-courses .course-results-progress .lp-course-progress-heading{margin:0 0 5px 0;line-height:1}.lp-admin-profile-courses .learn-press-progress{overflow:hidden;position:relative;width:150px;height:6px;border-radius:3px}.lp-admin-profile-courses .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.lp-admin-profile-courses .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.lp-notify-action-wrapper{position:fixed;bottom:5%;z-index:10000;left:50%;padding:10px;transition:all .5s;transform:translateY(500%);display:flex;flex-direction:column;gap:5px}.lp-notify-action-wrapper.show{display:flex;transform:translateY(0)}.lp-notify-action-wrapper .lp-notify-action{box-shadow:0 4px 25px 1px rgba(0,0,0,0.25);background:#202937;padding:0 20px;border-radius:3px;min-width:200px;transition:all .8s}.lp-notify-action-wrapper .lp-notify-action.clone{display:none}.lp-notify-action-wrapper .lp-notify-action__success{display:none;color:#01a401}.lp-notify-action-wrapper .lp-notify-action__success.show{display:block}.lp-notify-action-wrapper .lp-notify-action__error{display:none;color:#f44336;font-weight:bold}.lp-notify-action-wrapper .lp-notify-action__error.show{display:block}\n\\ No newline at end of file\n+@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}.lp-tom-select{min-width:150px}.lp-tom-select.plugin-dropdown_input .dropdown-input{width:95%;min-width:auto;border:1px solid #2271b1}.lp-tom-select[multiple]{display:block;height:36px !important;border:1px solid #d0d0d0}.lp-tom-select.ts-wrapper{min-width:200px;width:fit-content}.lp-tom-select.ts-wrapper dropdown-active .ts-control input.dropdown-input{border-color:#d0d0d0}.lp-tom-select.ts-wrapper input.dropdown-input{margin:0 auto 5px;padding:0 8px;box-shadow:none}.lp-tom-select.ts-wrapper.multi.has-items .ts-control{padding:3px 0 3px 3px}.lp-tom-select.ts-wrapper .ts-control{min-height:35px;padding:4px}.lp-tom-select.ts-wrapper .ts-control input[type=text]{min-width:30px}.lp-tom-select.ts-wrapper .ts-control li{margin:0 5px 3px 0;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-control .item{margin:0 5px 2px 0;padding:1px 2px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-dropdown{border:1px solid #d0d0d0;padding-top:5px;border-radius:3px;margin-top:-1px}.lp-tom-select.ts-wrapper .ts-dropdown .spinner{visibility:visible}.lp-tom-select.ts-wrapper .ts-dropdown .spinner::after{content:\"\";border:0}.lp-tom-select .dropdown-input-wrap{display:flex}.lp-toolbar-buttons{position:relative;z-index:10;height:50px}.lp-toolbar-buttons .lp-toolbar-btn{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn a,.lp-toolbar-buttons .lp-toolbar-btn span{outline:0;color:#666;box-shadow:none}.lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;top:50%;left:50%;width:30px;height:30px;margin-top:-15px;margin-left:-15px;line-height:1.875rem;text-align:center}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{color:var(--lp-primary-color)}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove{cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover span{color:#e74c3c}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down-alt2{display:inline-block}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown{color:#000}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul{display:none;position:absolute;top:100%;right:0;margin:0;border:1px solid #999;background:#fdfeff}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li{margin:0;list-style:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a{display:block;margin:0;padding:3px 8px;color:#757575;font-size:.8em;text-align:right;white-space:nowrap;text-decoration:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a:hover{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li.active a{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover{_background:#f5f5f5}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled .lp-btn-icon,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover .lp-btn-icon{color:#666}.lp-toolbar-buttons .lp-toolbar-btn:hover{display:inline-block;background:0}.lp-toolbar-buttons .lp-toolbar-btn:hover .lp-btn-icon{color:#444}.lp-toolbar-buttons .lp-toolbar-btn:hover ul{display:block}.lp-toolbar-buttons .lp-toolbar-btn:hover ul:hover{display:block}.column-content-actions.lp-toolbar-buttons{width:30px;padding:0;white-space:nowrap}.learn-press-box-data{position:relative;margin:20px 0 0 0;border:1px solid #ddd}.learn-press-box-data .lp-box-data-head{padding:10px 15px;background:#fff}.learn-press-box-data .lp-box-data-head h3{margin:0;padding:15px;font-size:1em}.learn-press-box-data .lp-box-data-head .lp-box-data-actions{float:right;position:relative;z-index:10}.learn-press-box-data .lp-box-data-head .lp-box-data-actions .lp-btn{display:inline-block;width:30px;height:50px;line-height:2.875rem;text-align:center;vertical-align:middle}.learn-press-box-data .lp-box-data-head .lp-box-data-actions::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-head::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-content{padding:15px;border-top:1px solid #ddd;background:#fff}.learn-press-box-data .lp-box-data-foot{padding:15px}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up-alt2{display:none}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down-alt2{display:inline-block}.learn-press-box-data.closed .lp-box-data-content{display:none}.lp-list-options{width:100%;border-collapse:collapse}.lp-list-options th,.lp-list-options td{padding:10px 15px;border-top:1px solid #ddd;background:#f5f5f5}.lp-list-options thead th{text-align:left}.lp-list-options tbody tr td{padding:0 15px;background:#f4fcff}.lp-list-options tbody tr td.lp-toolbar-buttons{_overflow:hidden;position:relative;width:30px;height:42px;white-space:nowrap}.lp-list-options tbody tr td.lp-toolbar-buttons .lp-toolbar-btn{visibility:hidden;position:relative;height:43px;margin-top:-4px;margin-bottom:-4px}.lp-list-options tbody tr:nth-child(odd) td{background:#fff}.lp-list-options tbody tr:hover td.lp-toolbar-buttons .lp-toolbar-btn{visibility:visible}.lp-list-options tbody td{text-align:left}.lp-list-options tbody td input[type=text]{width:100%}.lp-list-options tbody td input[type=text][value=\"\"]{font-style:italic}.lp-list-options tbody td.column-content-answer_correct{width:125px}.lp-list-options tbody td.lp-remove-list-option,.lp-list-options tbody td.lp-move-list-option{width:20px;padding:0;text-align:center}.lp-list-options tbody td.lp-remove-list-option a,.lp-list-options tbody td.lp-move-list-option a{visibility:hidden;color:#999}.lp-list-options tbody td.lp-remove-list-option:hover,.lp-list-options tbody td.lp-move-list-option:hover{background:#dbf5ff}.lp-list-options tbody td.lp-move-list-option{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option a{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option:hover a{color:var(--lp-primary-color)}.lp-list-options tbody td.lp-remove-list-option{cursor:pointer}.lp-list-options tbody td.lp-remove-list-option:hover a{color:#e74c3c}.lp-animation{-webkit-animation:spin 4s linear infinite;-moz-animation:spin 4s linear infinite;animation:spin 4s linear infinite}.lp-ajax-search{display:inline-block;position:relative;z-index:999999}.lp-ajax-search .lp-search-term{min-width:300px;height:28px;margin:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-results{position:absolute;top:100%;width:100%;margin:-1px 0 0 0;border:1px solid #ddd;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-ajax-search .lp-search-results .lp-search-items{overflow:auto;max-height:300px;margin:0}.lp-ajax-search .lp-search-results .lp-search-items li{margin:0}.lp-ajax-search .lp-search-results .lp-search-items li label{display:block;padding:8px 10px;border-bottom:1px solid #f3f3f3}.lp-ajax-search .lp-search-results .lp-search-items li label input{float:left;margin-top:1px;margin-right:-100%}.lp-ajax-search .lp-search-results .lp-search-items li label span{display:inline-block;margin-left:25px}.lp-ajax-search .lp-search-results .lp-search-items li label span a.lp-add-item{visibility:hidden;margin-left:10px}.lp-ajax-search .lp-search-results .lp-search-items li.active{background:#dbf5ff}.lp-ajax-search .lp-search-results .lp-search-items li:hover{color:#fff;background:#0085ba}.lp-ajax-search .lp-search-results .lp-search-items li:hover a.lp-add-item{visibility:visible}.lp-ajax-search .lp-search-results .lp-search-actions{margin:0;padding:10px;border-top:1px solid #ddd}#learn-press-ajax-search-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;width:100%;height:100%;opacity:0}.update-overlay{position:fixed;z-index:99999;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,0.5)}#course-editor.ajax-search #learn-press-ajax-search-overlay{display:block}#course-editor.ajax-search .lp-ajax-search{z-index:100000}.advanced-list{width:100%;min-width:200px;border-radius:var(--lp-border-radius);background:#fff;list-style:none}.advanced-list li{display:inline-block;margin:0 5px 5px 0;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.advanced-list li .remove-item{display:inline-block;margin-right:5px;line-height:1;vertical-align:middle;text-decoration:none;cursor:pointer}.advanced-list li .remove-item:hover{color:#0085ba}.advanced-list li .remove-item::before{font-family:dashicons;text-decoration:none;content:\"\\f335\"}.advanced-list li span{display:inline-block}.advanced-list.locked .remove-item{display:none}.advanced-list::after{display:block;clear:both;content:\"\"}.lp-label-counter{display:inline-block;height:20px;padding:0 10px;border-radius:20px;color:#fff;background:#2196f3;font-weight:bold;line-height:1.25rem}.lp-label-counter.disabled{background:#ddd}@-moz-keyframes spin{100%{-moz-transform:rotate(360deg)}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(360deg)}}@keyframes spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.rwmb-duration{border:1px solid #ddd}ul .clearfix{clear:both;height:0;opacity:0}.clearfix-after::after{display:block;clear:both;height:0;opacity:0;content:\"\"}.lp-button{padding:8px 16px;border:1px solid #e5e7eb;border-radius:var(--lp-border-radius);color:#374151;font-size:.9em;font-weight:500;text-decoration:none;cursor:pointer}@font-face{font-family:\"lp-icon\";src:url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=166\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-icon-course-builder{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}@-moz-keyframes lp-spinner{100%{-moz-transform:rotate(360deg)}}@-webkit-keyframes lp-spinner{100%{-webkit-transform:rotate(360deg)}}@keyframes lp-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.lp-modal-choose-items-open{overflow:hidden}.lp-modal-search{height:100%;padding:20px;color:#777;background-color:red}.lp-modal-search li.selected{display:none}#learn-press-message-box-block{position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;opacity:.8;background-color:#000}#learn-press-message-box-window{position:fixed;z-index:100000;top:0;right:0;bottom:0;left:0;color:#fff;text-align:center}#message-box-wrap{display:inline-block;max-width:70%;margin:0 auto;text-align:left}.message-box-title{margin:0 0 40px 0;color:#fff;font-size:2.125rem}.message-box-content{font-size:1rem;line-height:1.5}.message-box-animation{width:220px;height:20px;margin:20px 0 0;background-image:url(\"..\u002F..\u002Fimages\u002Fanimation.gif\")}.message-box-buttons{margin:20px 0 0;padding-top:20px;border-top:1px solid #929292}.message-box-button{margin-right:10px !important}.tipsy{position:absolute}.learnpress a,.learnpress a:active{outline:0;box-shadow:none}.learnpress .lp-install-sample-data-options{padding:0 20px 10px 20px;border:1px solid #ddd}.learnpress .lp-install-sample-data-options legend{font-size:1rem}.lp-email-templates{overflow:hidden;margin-top:5px}.learn-press-email-variables{margin:20px 0 0;padding:0;list-style:none}.learn-press-email-variables li{display:inline-block;cursor:pointer}.learn-press-dropdown-pages input[type=text]{min-width:300px;margin:0;vertical-align:top}.learn-press-dropdown-pages .select2-container{min-width:220px !important}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:30px;border-color:#7e8993}.learn-press-dropdown-pages .select2-container .select2-selection__rendered{line-height:1.75em !important}.learn-press-dropdown-pages .select2-container .select2-selection__arrow{right:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;background-size:16px 16px}.learn-press-dropdown-pages .select2-container .select2-selection__arrow b{display:none}.learn-press-dropdown-pages .quick-add-page-actions a{font-size:.8125rem;text-decoration:none}.learn-press-dropdown-pages .quick-add-page-inline{margin-top:0}.lp-select-2+.select2-container .select2-selection--single{height:30px;border-color:#7e8993}.lp-select-2+.select2-container .select2-selection--single .select2-selection__rendered{line-height:1.75em !important}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow{right:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat right 5px top 55%;background-size:16px 16px}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow b{display:none}.learn-press-tooltip{display:inline-block;margin:0 5px;color:#999;font-size:1.0625rem;vertical-align:middle}.learn-press-tooltip.icon::after{font-family:Dashicons;content:\"\\f223\"}.learn-press-tooltip:hover{opacity:1;color:#0073aa}.rwmb-payment-order-wrapper .rwmb-label{margin-bottom:20px !important}.rwmb-payment-order-wrapper .rwmb-input{margin-left:0 !important}.learn-press-payments,.learn-press-emails{width:100%;border:1px solid #ddd;border-collapse:collapse;font-size:.875rem}.learn-press-payments th,.learn-press-payments td,.learn-press-emails th,.learn-press-emails td{padding:10px}.learn-press-payments .order,.learn-press-emails .order{width:30px;padding-right:0;color:#ddd;text-align:center;cursor:not-allowed}.learn-press-payments .name,.learn-press-emails .name{min-width:250px;font-weight:normal;text-transform:capitalize}.learn-press-payments .name a,.learn-press-emails .name a{text-decoration:none}.learn-press-payments .status,.learn-press-emails .status{width:100px;text-align:center;cursor:pointer}.learn-press-payments .status .dashicons,.learn-press-emails .status .dashicons{border-radius:50%;color:#fff;background:#ddd}.learn-press-payments .status a,.learn-press-emails .status a{display:block;margin-top:5px;font-size:.75rem;text-decoration:none}.learn-press-payments .status.enabled .dashicons,.learn-press-emails .status.enabled .dashicons{background:#0085ba}.learn-press-payments thead th,.learn-press-emails thead th{border-bottom:1px solid #ddd;text-align:left}.learn-press-payments tbody tr:nth-child(even) td,.learn-press-emails tbody tr:nth-child(even) td{background:#fff}.learn-press-payments tbody tr:nth-child(odd) td,.learn-press-emails tbody tr:nth-child(odd) td{background:#f5f5f5}.learn-press-payments tbody td,.learn-press-emails tbody td{border-bottom:1px solid #ddd}.learn-press-payments tbody .ui-sortable-helper,.learn-press-emails tbody .ui-sortable-helper{margin-left:-1px;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder,.learn-press-emails tbody .ui-sortable-placeholder{visibility:visible !important;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder td,.learn-press-emails tbody .ui-sortable-placeholder td{height:35px;padding:0;background:#f7f7f7}.learn-press-payments ~ .email-actions,.learn-press-emails ~ .email-actions{text-align:left}.learn-press-payments.sortable .order:hover,.learn-press-emails.sortable .order:hover{color:#0073aa;cursor:ns-resize}.lp-template-overrides{margin-top:20px}.lp-template-overrides thead th h4{margin:0}.lp-template-overrides tbody th{font-weight:bold}.lp-template-overrides tbody th p{display:inline-block;margin:0 0 0 10px}.lp-template-overrides tbody th p a{margin:0;padding:2px 8px;border:0;border-radius:3px;outline:0;box-shadow:none;font-weight:normal}.lp-template-overrides tbody th p a.current{color:#fff;background:#00aadc}.lp-template-overrides .template-row.outdated code::before,.lp-template-overrides .template-row.up-to-date code::before{display:inline-block;margin-top:-2px;margin-right:3px;font-family:Dashicons;vertical-align:middle}.lp-template-overrides .template-row.outdated .template-version{color:red}.lp-template-overrides .template-row.outdated .template-file code::before{color:red;content:\"\\f534\"}.lp-template-overrides .template-row.up-to-date .template-version{color:#1859ff}.lp-template-overrides .template-row.up-to-date .template-file code::before{color:#0085ba;content:\"\\f147\"}.lp-template-overrides .template-version,.lp-template-overrides .core-version{width:100px}.lp-template-overrides #learn-press-no-templates td p{color:#0073aa}.description code{font-size:smaller}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result{display:none;padding:10px;background:#f5f5f5}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result input{width:80px;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result p{margin:7px 0 0;color:#777;font-style:italic}#field-_lp_course_result input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}.widget .widget-content .rwmb-field:not(:last-of-type){margin:0 0 10px}.widget .widget-content .rwmb-field:not(:last-of-type):first-child{margin-top:10px}.widget .widget-content .rwmb-field:last-child{margin-bottom:10px}.widget .widget-content .rwmb-field .rwmb-label,.widget .widget-content .rwmb-field .rwmb-input{width:100%}.widget .widget-content .rwmb-field .rwmb-label{margin-bottom:2px}.widget .widget-content .rwmb-field .rwmb-label label{font-weight:400}.widget .widget-content .rwmb-field .rwmb-input input[type=text]{width:100%}.course-attributes{margin:20px 0}.course-attributes .learn-press-attribute{margin-top:-1px;margin-bottom:0;border:1px solid #ddd}.course-attributes .learn-press-attribute>h4{margin:0;padding:10px 15px;background:#f5f5f5}.course-attributes .learn-press-attribute .learn-press-attribute-data{padding:15px;border-top:1px solid #ddd}.lp-hidden{display:none !important}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}#wpfooter{z-index:5}.learn-press-advertisement-slider{margin:50px 20px 0 0;position:relative;overflow:hidden;box-sizing:border-box;z-index:10}.learn-press-advertisement-slider .slider-items:after{display:block;clear:both;content:\"\"}.learn-press-advertisement-slider .slide-item{position:relative;float:left;width:100%;margin-right:-100%;padding:20px;opacity:0;background:#FFF;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.learn-press-advertisement-slider .slide-item .slide-thumbnail{float:left;width:35%}.learn-press-advertisement-slider .slide-item .slide-thumbnail a{display:block;line-height:1;margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{max-width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:35%;padding-left:20px}.learn-press-advertisement-slider .slide-item .slide-detail h2{margin-top:0}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:none}.learn-press-advertisement-slider .slide-item.slide-active{opacity:1}.learn-press-advertisement-slider .slider-controls{position:absolute;bottom:20px;right:20px}.learn-press-advertisement-slider .slider-controls .next-item,.learn-press-advertisement-slider .slider-controls .prev-item{font-family:\"dashicons\";width:40px;height:40px;border:1px solid #DDD;line-height:2.5rem;font-size:1rem;cursor:pointer;float:left;margin-left:10px;text-align:center;color:#DDD}.learn-press-advertisement-slider .slider-controls .next-item:hover,.learn-press-advertisement-slider .slider-controls .prev-item:hover{border-color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:hover:before,.learn-press-advertisement-slider .slider-controls .prev-item:hover:before{color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:before{content:\"\\f345\"}.learn-press-advertisement-slider .slider-controls .prev-item:before{content:\"\\f341\"}@media only screen and (max-width:1200px){.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:50%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:50%}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}}@media only screen and (max-width:960px){.learn-press-advertisement-slider{margin-left:56px}.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-left:0;padding-left:0}.learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider{margin-left:56px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail{margin-left:0;padding-left:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}}.lp-admin-tabs{position:relative;margin-top:20px}.lp-admin-tabs.has-sections{display:flex}.lp-admin-tabs .lp-admin-tab-navs{display:none;float:left;position:relative;z-index:5;width:250px;margin:0 -250px 0 0;padding:10px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs .lp-admin-tab-navs .nav-section{margin:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section>span{display:block;padding:8px 20px;outline:0;box-shadow:none;text-decoration:none;text-transform:capitalize}.lp-admin-tabs .lp-admin-tab-navs .nav-section .learn-press-tooltip{float:right;margin-right:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover{border-left:2px solid #563d7c;color:#563d7c}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>span,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>span{padding-left:18px}.lp-admin-tabs.has-sections .lp-admin-tab-navs{display:block}.lp-admin-tabs.has-sections .lp-admin-tab-content{float:left;position:relative;z-index:0;width:100%;padding-left:271px !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs.has-sections::before{position:absolute;z-index:10;top:0;bottom:0;left:250px;border-left:1px solid #ddd;content:\"\"}.lp-admin-tabs::after{display:block;clear:both;content:\"\";z-index:10}.wrap.learn-press-settings .lp-admin-tab-content{padding:18px;background:#fff}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub{float:none;margin:0 0 20px 0;padding-bottom:20px;border-bottom:1px solid #ddd}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub .active{font-weight:bold}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li{text-transform:capitalize}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li::after{display:inline-block;padding:0 10px;content:\"|\"}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li:last-child::after{content:\"\"}.wrap.learn-press-settings .lp-admin-tab-content h2{border-bottom:1px solid #ddd;padding-bottom:10px}.wrap #learn-press-uninstall-sample-data{float:right;opacity:.5}.wrap #learn-press-uninstall-sample-data:hover{opacity:1}#adminmenu .wp-menu-image img{width:17px}.learnpress .rwmb-field{position:relative;margin-bottom:20px}.learnpress .rwmb-field .rwmb-label{display:block;float:left;width:190px;margin-bottom:5px;font-size:.875rem;_text-transform:capitalize}.learnpress .rwmb-field .rwmb-label label>small{display:block;color:#999;font-weight:normal;font-style:italic}.learnpress .rwmb-field .rwmb-input{float:none;width:auto;margin-left:190px}.learnpress .rwmb-field .rwmb-input input[type=checkbox],.learnpress .rwmb-field .rwmb-input input[type=radio]{margin:1px 5px 0 0}.learnpress .rwmb-field .rwmb-input label>input[type=checkbox],.learnpress .rwmb-field .rwmb-input label>input[type=radio]{margin-top:-1px}.learnpress .rwmb-field .description{margin-top:8px;color:#888}.learnpress .rwmb-field .description code{padding:3px 3px 3px 0}.learnpress .rwmb-field .description.err{color:red}.learnpress .rwmb-field .rwmb-input-list{margin-left:0}.learnpress .rwmb-field #course_evaluation_method_quiz_options{position:relative;margin-left:25px}.learnpress .rwmb-field #course_evaluation_method_quiz_options::after{position:absolute;z-index:10;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}.learnpress .rwmb-field input[name=_lp_course_result]:checked ~ #course_evaluation_method_quiz_options::after{display:none}.learnpress .rwmb-field.rwmb-heading-wrapper h4{display:inline-block;margin:0 0 5px 0;padding:0;border-bottom:2px solid #563d7c;font-size:1rem;text-transform:initial}.learnpress .rwmb-field.disabled .field-overlay{position:absolute;z-index:10;top:0;left:0;width:100%;height:100%;opacity:.6;background:#fff;content:\"\"}.learnpress .rwmb-field.rwmb-text-wrapper .rwmb-text{width:50%;min-width:200px}.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input select,.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input input{vertical-align:top}.learnpress .lp-course-sale_start-field.hide,.learnpress .lp-course-sale_end-field.hide{display:none}.learnpress.lp-submenu-settings .lp-admin-settings-buttons{margin-bottom:0;padding-top:20px;border-top:1px solid #ddd}.learnpress.lp-submenu-settings .lp-admin-settings-buttons #learn-press-reset-settings{float:right}.learnpress.lp-submenu-settings .rwmb-input{float:none;width:auto;margin-left:270px;color:#000}.learnpress .rwmb-google-fonts-wrapper .rwmb-input label{display:block;margin-bottom:5px;font-weight:bold}.learnpress .rwmb-google-fonts-wrapper .rwmb-input input{width:90%}.learnpress #learn-press-toggle-course-results{display:block}.learnpress .lp-item-assigned{font-size:.875rem}.learnpress .lp-item-assigned a{text-decoration:none}.learnpress .lp-item-assigned ul{margin-bottom:0}.learnpress .lp-item-assigned ul ul strong{font-weight:normal}.learnpress .lp-item-assigned li{margin:0}.learnpress .lp-item-assigned li a{display:inline-block;margin-bottom:10px}@media screen and (max-width:1280px){.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-label{float:none;width:auto}.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-input{float:left;width:100%;margin-left:0}}.lp-metabox__table .titledesc label>small{display:block;color:#999;font-weight:normal;font-style:italic}.lp-metabox__table .forminp-text>input,.lp-metabox__table .forminp-email>input,.lp-metabox__table .forminp-password>input,.lp-metabox__table .forminp-url>input{min-width:260px}.lp-metabox__table .forminp-textarea textarea{width:400px}.lp-option-disabled{pointer-events:none;opacity:.5}.lp-metabox__custom-fields table{width:100%;max-width:max-content;padding:0 !important}.lp-metabox__custom-fields table th{padding:7px 0 7px 7px !important}.lp-metabox__custom-fields table th.sort{width:17px;padding:7px !important}.lp-metabox__custom-fields table td{position:relative;padding:4px 0 4px 7px !important;vertical-align:middle !important}.lp-metabox__custom-fields table td.sort{width:17px;padding-right:7px !important;background:#f9f9f9;font-size:.9375rem;text-align:center;cursor:move}.lp-metabox__custom-fields table td.sort::before{height:100%;color:#999;font-family:Dashicons;text-align:center;content:\"\\f333\"}.lp-metabox__custom-fields table td .delete{display:block;position:relative;width:1em;height:1em;font-size:1.2em;text-indent:-9999px}.lp-metabox__custom-fields table td .delete::before{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#999;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox__custom-fields table td .delete:hover::before{color:#a00}.lp-metabox__custom-fields table td:last-child{padding-right:7px !important}.lp-metabox-field__color{font-size:0 !important}.lp-metabox-field__color .colorpickpreview{display:inline-block;width:30px;height:30px;margin:0;margin-right:3px;padding:0;border:1px solid #ddd;border-radius:4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.2);font-size:1rem;line-height:1.75rem}.lp-metabox-field__color .iris-picker{display:none;position:absolute;z-index:100;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.2)}.lp-metabox-field__image-advanced-upload{padding-top:10px}.lp-metabox-field__image-advanced-images{clear:both;margin:0;padding:0}.lp-metabox-field__image-advanced-images>li{float:left;position:relative;box-sizing:border-box;width:80px;margin:9px 9px 0 0;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move}.lp-metabox-field__image-advanced-images>li img{display:block;width:100%;height:auto}.lp-metabox-field__image-advanced-images>li ul.actions{position:absolute;top:-8px;right:-8px;padding:2px}.lp-metabox-field__image-advanced-images>li ul.actions li{float:right;margin:0 0 0 2px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete::before{position:absolute;top:0;left:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images>li ul.actions::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images>li:hover ul.actions{display:block}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images::after{display:table;clear:both;content:\" \"}.lp-metabox-field__image--inner{position:relative;box-sizing:border-box;width:120px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7}.lp-metabox-field__image--inner img{display:block;width:100%;height:auto}.lp-metabox-field__image--upload{padding-top:10px}.lp-meta-box__inner{display:block;position:relative}.lp-meta-box__inner .form-field:not(fieldset){display:flex;flex-direction:row;position:relative;margin:0;padding:15px 0;flex-wrap:wrap}.lp-meta-box__inner .form-field:not(fieldset) label{width:180px;min-width:180px;max-width:180px;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner .form-field:not(fieldset) .checkbox{margin:2px 0 !important;vertical-align:middle}.lp-meta-box__inner .form-field:not(fieldset) .description{flex:1;display:inline;clear:none;margin:0 0 0 7px;padding:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field{display:grid;grid-template-columns:180px 1fr;position:relative;margin:0;padding:15px 0}.lp-meta-box__inner fieldset.form-field h4{width:180px;min-width:180px;max-width:180px;margin:0;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner fieldset.form-field ul{margin:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field .description{grid-column-start:2;margin-top:10px}.lp-meta-box__duration-select{width:auto !important}.lp-meta-box__duration input[type=number]{width:80px !important}.lp-meta-box__duration .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important}.lp-meta-box__wp-editor{display:block}.lp-meta-box__wp-editor .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box__wp-editor__textarea{border:none !important}.lp-meta-box select{width:auto !important}.lp-meta-box select ~ .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box input[type=number],.lp-meta-box input[type=email],.lp-meta-box input[type=text],.lp-meta-box input[type=password],.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){width:50%}.lp-meta-box input[type=number]+.description,.lp-meta-box input[type=email]+.description,.lp-meta-box input[type=text]+.description,.lp-meta-box input[type=password]+.description,.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea)+.description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-left:180px !important;color:#666}.lp-meta-box input[type=checkbox]{margin-top:2px}.lp-meta-box .short{width:50%}.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){height:4.6rem;line-height:1.5em;vertical-align:top}.lp-meta-box .learn-press-tip.ready{display:inline-flex;align-items:center;margin-left:8px}#course-settings .inside{margin:0 !important;padding:0 !important}#course-settings .lp-meta-box__course-tab{display:grid;grid-template-columns:20% 80%}#course-settings .lp-meta-box__course-tab__tabs{position:relative;box-sizing:border-box;margin:0;padding:0 0 10px;border-right:1px solid #eee;background-color:#fafafa}#course-settings .lp-meta-box__course-tab__tabs li{display:block;position:relative;margin:0;padding:0}#course-settings .lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;margin:0;padding:10px;border-bottom:1px solid #eee;box-shadow:none;text-decoration:none}#course-settings .lp-meta-box__course-tab__tabs li a i{margin-right:5px;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;text-transform:none}#course-settings .lp-meta-box__course-tab__tabs li a i[class^=dashicon]{font-family:\"Dashicons\"}#course-settings .lp-meta-box__course-tab__tabs li.active a{position:relative;color:#555;background-color:#eee}@media(max-width:767px){#course-settings .lp-meta-box__course-tab__tabs{display:flex;overflow:hidden;overflow-x:auto;flex-direction:row;margin:0;margin-bottom:30px;padding:0;border-bottom:1px solid #e5e5e5;text-align:center;white-space:nowrap;list-style:none;align-items:center;flex-wrap:nowrap}#course-settings .lp-meta-box__course-tab__tabs li{min-width:25%;margin-right:20px}}#course-settings .lp-meta-box__course-tab__content>div{padding:20px}@media(max-width:767px){#course-settings .lp-meta-box__course-tab{grid-template-columns:auto}}#price_course_data ._lp_sale_price_field,#price_course_data ._lp_price_field{position:relative}#price_course_data ._lp_sale_price_field .learn-press-tip-floating,#price_course_data ._lp_price_field .learn-press-tip-floating{top:54px;left:92px;opacity:.8;background:#a00}#price_course_data ._lp_sale_price_field .learn-press-tip-floating::before,#price_course_data ._lp_price_field .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.lp_course_extra_meta_box__content{flex:1}.lp_course_extra_meta_box__fields{margin-bottom:10px}.lp_course_extra_meta_box__field{position:relative;max-width:600px;margin-bottom:10px}.lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;left:0;width:40px;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_course_extra_meta_box__field .delete{display:flex;position:absolute;top:0;right:0;width:40px;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_extra_meta_box__input{width:100% !important;padding-right:40px !important;padding-left:40px !important}.lp_repeater_meta_box__wrapper{flex:1 !important}.lp_repeater_meta_box__fields{position:relative;margin-bottom:10px}.lp_repeater_meta_box__field{display:grid;position:relative;margin-bottom:10px;border:1px solid #c5c5c5;border-radius:2px}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__content{display:block}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__title__toggle::after{transform:rotate(180deg)}.lp_repeater_meta_box__title{display:grid;grid-template-columns:44px 1fr 40px 40px;align-items:center;position:relative;background-color:#eee}.lp_repeater_meta_box__title__title{flex:1;padding:14px 0}.lp_repeater_meta_box__title__sort{display:flex;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_repeater_meta_box__title__sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_repeater_meta_box__title__delete{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_repeater_meta_box__title__toggle{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__toggle::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f347\"}.lp_repeater_meta_box__content{display:none;padding:14px 20px}.lp_repeater_meta_box__content>label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;margin-bottom:20px;grid-template-rows:auto 1fr}.lp_repeater_meta_box__content>label:last-child{margin-bottom:0}.lp_repeater_meta_box__content>label span{margin-bottom:5px}.lp_repeater_meta_box__content>label textarea,.lp_repeater_meta_box__content>label input{width:100% !important}.lp_course_faq_meta_box__content{flex:1}.lp_course_faq_meta_box__fields{position:relative;margin-bottom:10px}.lp_course_faq_meta_box__field{display:grid;position:relative;margin-bottom:10px;padding:20px;border:1px solid #c5c5c5;border-radius:4px;grid-row-gap:10px}.lp_course_faq_meta_box__field label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;grid-template-rows:auto 1fr}.lp_course_faq_meta_box__field label span{margin-bottom:5px}.lp_course_faq_meta_box__field label textarea,.lp_course_faq_meta_box__field label input{width:100% !important}.lp_course_faq_meta_box__field a.delete{display:flex;position:absolute;top:15px;right:50px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_faq_meta_box__field .sort{display:flex;position:absolute;top:15px;right:20px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center;cursor:grab}.lp_course_faq_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}#passing-condition-quiz-result{display:none}#passing-condition-quiz-result input{width:80px !important;margin-top:5px !important}#passing-condition-quiz-result p{padding:10px 16px;background-color:#eee;font-size:.875rem}.lp-meta-box__file_list{display:inline-block;clear:both;margin:0;padding:0}.lp-meta-box__file_list>li{display:flex;flex-flow:column nowrap;float:left;position:relative;box-sizing:border-box;width:80px;height:80px;margin:9px 9px 0 0;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move;align-items:center;justify-content:center}.lp-meta-box__file_list>li img{display:block;width:100%;height:auto}.lp-meta-box__file_list>li img.is_file{width:30px}.lp-meta-box__file_list>li img.is_file ~ span{margin-top:5px;font-size:.75rem}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions{position:absolute;top:-8px;right:-8px;padding:2px}.lp-meta-box__file_list>li ul.actions li{float:right;margin:0 0 0 2px}.lp-meta-box__file_list>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-meta-box__file_list>li ul.actions li a.delete::before{position:absolute;top:0;left:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions::before{display:table;content:\" \"}.lp-meta-box__file::before{display:table;content:\" \"}.lp-meta-box__file::after{display:table;clear:both;content:\" \"}.lp-metabox-evaluate-final_quiz{display:block}.lp-metabox-evaluate-final_quiz__message{display:inline-block;min-width:50%;margin-top:10px;padding:8px 20px;border:2px solid #36af27;border-radius:4px;background:#f7f7f7;text-align:center}.lp-metabox-evaluate-final_quiz__message-error{border-color:lightcoral}.lp_widget_autocomplete__loading{margin-top:0 !important;padding:7px 10px;border:1px solid #949494;border-top:none !important;background:#eee;font-size:13px !important}.lp_widget_autocomplete__select{overflow:auto;left:0;width:100%;max-height:148px;margin-top:-1px;background:#eee;font-size:.8125rem}.lp_widget_autocomplete__item{overflow:hidden;padding:7px 10px;border:1px solid #949494;border-top:0;border-bottom-color:#afafaf;white-space:nowrap;text-overflow:ellipsis;cursor:pointer}.lp_widget_autocomplete__item__selected,.lp_widget_autocomplete__item:hover{color:#fff;background-color:#007cba}.widget .select2-selection__rendered{font-size:.8125rem}.sortable-wrapper{margin:1em 0}.sortable-wrapper .sortable{margin:.5em 0}.sortable-wrapper .sortable .dashicons-move{cursor:move}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.sortable-wrapper>label{font-weight:600;font-size:14px}.sortable__item{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sortable__item:last-child{margin-bottom:0}.widget-content p{margin-bottom:8px;display:flex;align-items:center;flex-wrap:wrap}:root{--lp-addon-item-padding:10px;--lp-border-radius:3px;--lp-addon-item-border-color:#c3c4c7}@media screen and (min-width:1600px){.plugin-card:not(.hide-if-js):nth-child(even){margin-right:8px}.plugin-card:not(.hide-if-js):nth-child(3n){margin-right:0}}#lp-addons{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:20px;padding-right:20px}#lp-addons.max-3-items{grid-template-columns:repeat(auto-fit,minmax(280px,320px))}#lp-addons a{text-decoration:none}#lp-addons button{padding:6.5px 17px;background:#9747ff;color:white;border-radius:3px;border:0;cursor:pointer}#lp-addons button.btn-addon-action.handling span{display:none}#lp-addons button.btn-addon-action.handling span.dashicons{display:inline-flex}#lp-addons button.btn-addon-action[data-action=cancel]{position:absolute;right:0;background:transparent;color:rgba(255,0,0,0.89);top:0;padding:7px 10px}#lp-addons button.btn-addon-action span.dashicons{align-items:center;display:none;font-size:1.125em;width:auto;height:auto;animation:rotation 2s infinite linear}#lp-addons button[data-action=update]{background:#27bf49}#lp-addons button[data-action=setting]{background:#2d72da}#lp-addons .lp-addon-item{background:white;padding:var(--lp-addon-item-padding);border:1px solid var(--lp-addon-item-border-color);border-radius:3px;display:flex;flex-direction:column;justify-content:space-between;position:relative}#lp-addons .lp-addon-item input{margin:0 !important}#lp-addons .lp-addon-item.hide,#lp-addons .lp-addon-item.search-not-found{display:none}#lp-addons .lp-addon-item__content{text-align:center;min-height:290px}#lp-addons .lp-addon-item__content img{width:50px;height:50px;border-radius:10px;margin-top:20px}#lp-addons .lp-addon-item__content a{text-decoration:none}#lp-addons .lp-addon-item__content p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}#lp-addons .lp-addon-item__content p::before{content:none}#lp-addons .lp-addon-item__actions{border-top:1px solid var(--lp-addon-item-border-color);padding:10px var(--lp-addon-item-padding) 0;margin:0 calc(var(--lp-addon-item-padding) * -1);display:flex;align-items:center}#lp-addons .lp-addon-item__actions__left{flex:3;display:flex;gap:5px;align-items:center}#lp-addons .lp-addon-item__actions__left button{display:none}#lp-addons .lp-addon-item__actions__right button{display:none;background:transparent;color:#2271b1}#lp-addons .lp-addon-item__purchase{display:none;position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,0.6);text-transform:uppercase}#lp-addons .lp-addon-item__purchase__wrapper div{position:absolute;bottom:20%;left:var(--lp-addon-item-padding);right:var(--lp-addon-item-padding);background:white;border:1px solid var(--lp-addon-item-border-color);padding:var(--lp-addon-item-padding);border-radius:3px;flex-direction:column;display:none;gap:5px;box-shadow:0 4px 25px 1px rgba(0,0,0,0.25)}#lp-addons .lp-addon-item__purchase__wrapper div input{width:100%}#lp-addons .lp-addon-item__purchase label{text-transform:capitalize}#lp-addons .lp-addon-item.installed.activated button[data-action=setting]{display:block}#lp-addons .lp-addon-item.installed.activated button[data-action=deactivate]{display:block}#lp-addons .lp-addon-item.installed.activated.update button[data-action=update]{display:block}#lp-addons .lp-addon-item.installed:not(.activated) button[data-action=activate]{display:block}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code]{display:inline-flex;align-items:center;padding:0 5px;height:12px}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code] span{animation:none;display:inline}#lp-addons .lp-addon-item.not_installed.purchase button[data-action=purchase]{display:block}#lp-addons .lp-addon-item.not_installed.free button[data-action=install]{display:block}#lp-addons .lp-addon-item.not_installed .lp-addon-item__actions__right{display:none}#lp-addons .lp-addon-item.update button[data-action=update]{display:block}#lp-addons .lp-toggle-switch .lp-toggle-switch-label{height:20px;align-items:center;margin-bottom:0;background:#b4b9be;cursor:pointer;display:inline-flex;justify-content:space-between;position:relative;transition:left .15s ease-out;border-radius:100px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label:after{background:#fff;content:\"\";display:block;position:absolute;left:4px;width:12px;height:12px;transition:all .25s ease-in-out;border-radius:50%}#lp-addons .lp-toggle-switch .lp-toggle-switch-label::before{left:0}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on,#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{opacity:1;padding-left:6px;padding-right:6px;font-size:.8em;line-height:1.125em}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on{color:#fff;opacity:0;padding-right:0;width:12px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{width:12px;color:#777;padding-left:0}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input{display:none}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label{background:#0073aa}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label:after{left:auto;right:5px;background:#fff}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-on{opacity:1}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-off{opacity:0}#lp-addons .lp-toggle-switch .dashicons{animation:rotation 2s infinite linear}#lp-addons .screen-reader-text:focus{clip-path:inset(50%);-webkit-clip-path:inset(50%)}.lp-nav-tab-wrapper{display:flex;margin-bottom:20px;justify-content:start;gap:5px;border-bottom:1px solid #c3c4c7}.lp-nav-tab-wrapper .nav-tab{border:1px solid #c3c4c7;border-bottom:0;margin-left:0;padding:5px 10px;line-height:1.6em;font-weight:600;background:#dcdcde;color:#50575e;text-decoration:none;white-space:nowrap;border-radius:3px 3px 0 0}.lp-nav-tab-wrapper .nav-tab-active{background:#f0f0f1;border-bottom:1px solid #f0f0f1}.wp-submenu .lp-notify{display:none;vertical-align:top;box-sizing:border-box;margin:1px 0 -1px 5px;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#d63638;color:#fff;font-size:.75em;line-height:1.6;text-align:center}.related-themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));grid-gap:20px}.related-themes li{margin:0}.related-themes .plugin-card-top{padding-bottom:0;background:#fff}.related-themes .theme-content{position:relative}.related-themes .image-thumbnail img{width:100%;height:auto;vertical-align:middle}.related-themes .theme-description{margin:0 0 25px 0;display:-webkit-box;overflow:hidden;min-height:8em;max-height:8em;line-height:1.6em;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:5;color:#777}.related-themes .theme-title{min-height:3.2em;margin-right:100px;margin-bottom:0;font-size:1.2em;line-height:1.3em}.related-themes .theme-title a{color:#545454}.related-themes .theme-rating{display:inline-block;float:right}.related-themes .star-rating{display:inline-block}.related-themes .count-rating{position:relative;top:2px;font-size:.9375rem}.related-themes .theme-detail{position:absolute;top:-3px;right:3px;line-height:1.6em;text-align:right}.related-themes .theme-detail::after{display:block;clear:both;content:\"\"}.related-themes .theme-detail .theme-price{display:inline-block;color:#545454;font-size:1.5rem;font-weight:700;line-height:1.3em}.related-themes .theme-footer{clear:both;overflow:hidden;margin-right:-20px;margin-left:-20px;padding:20px;border-top:1px solid #ddd;background-color:#fafafa}.post-type-lp_order .wp-list-table .column-order_status{width:150px}.post-type-lp_order .wp-list-table .order_status span{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.post-type-lp_order .wp-list-table .order_status span.pending{background:#bdbdbd}.post-type-lp_order .wp-list-table .order_status span.processing{background:#ffc107}.post-type-lp_order .wp-list-table .order_status span.completed{background:#4caf50}.post-type-lp_order .wp-list-table .order_status span.cancelled{background:#444}.post-type-lp_order .wp-list-table .order_status span.failed{background:red}.post-type-lp_order .wp-list-table .order_status span.trash{color:rgba(128,128,128,0.68)}.post-type-lp_order .wp-list-table .order_status span i{display:inline-block}.post-type-lp_order .wp-list-table .column-title,.post-type-lp_order .wp-list-table .column-order_total,.post-type-lp_order .wp-list-table .column-order_date{width:150px}.post-type-lp_order .wp-list-table .column-order_items ol{margin:0;padding:0;list-style-position:inside}.post-type-lp_course .wp-list-table .column-price{width:80px}.post-type-lp_course .wp-list-table .column-thumbnail{width:60px;padding-top:8px;box-sizing:border-box}.post-type-lp_course .wp-list-table .column-thumbnail img{width:100%;height:auto}@media only screen and (max-width:782px){.post-type-lp_course .wp-list-table .column-thumbnail{display:none}.post-type-lp_course .wp-list-table .column-thumbnail::before{opacity:0}}.post-type-lp_course .wp-list-table .column-certificate{box-sizing:border-box;max-width:60px}.post-type-lp_course .wp-list-table .column-certificate img{max-width:100% !important}@media only screen and (min-width:1024px){.post-type-lp_course .wp-list-table .check-column{width:1.2em}}@media only screen and (min-width:783px){.post-type-lp_course .wp-list-table .column-title{width:16%}}.wp-list-table .column-author,.wp-list-table .column-instructor{width:80px}.wp-list-table .column-author .post-author,.wp-list-table .column-instructor .post-author{display:inline-block}.wp-list-table .column-author .post-author img,.wp-list-table .column-instructor .post-author img{width:30px;height:30px;margin:0;border-radius:50%;vertical-align:middle}.wp-list-table .column-author .post-author a,.wp-list-table .column-instructor .post-author a{display:inline-block;vertical-align:middle}.wp-list-table .column-curriculum{width:60px}.wp-list-table .column-student{width:60px}.wp-list-table .column-taxonomy-course_category{width:100px}.wp-list-table .column-gradebook{width:40px;text-align:center}.post-type-page .column-lp-page{width:200px}.post-type-page .for-plugin-page{margin:0;color:red;font-size:.6875rem}.post-state .post-author{font-size:.875rem;font-weight:normal;font-style:italic}#learn-press-box-edit-slug{overflow:hidden;margin:0 -10px;padding:10px;border:1px solid #ddd;color:#b79186;background:#fff}#learn-press-box-edit-slug .button{float:right;height:24px;line-height:1.375rem}.is-lp-page{color:#fff;font-size:11px;padding:1px 8px;border-radius:10px;background-color:#9979ff;margin-right:5px;display:inline-block}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-modal{position:fixed;z-index:1000000;width:100%;height:100%;top:0;display:table}.learn-press-modal .modal-overlay{position:fixed;z-index:1000000;background:#000;opacity:.5;width:100%;height:100%;top:0}.learn-press-modal .modal-wrapper{display:table-cell;vertical-align:middle;z-index:1000010;position:relative}.learn-press-modal .modal-wrapper .modal-container{max-width:800px;width:90%;margin:0 auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 8px rgba(0,0,0,0.33);transition:all .3s ease;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-modal .modal-wrapper header{font-size:1.125rem;padding:20px;border-bottom:1px solid #DDD;font-weight:600;color:#000}.learn-press-modal .modal-wrapper article{margin:30px 20px}.learn-press-modal .modal-wrapper article input[name=search]{width:100%;font-size:1rem;box-sizing:border-box;margin:0;box-shadow:none;color:#444;padding:8px 10px;height:42px;border-radius:2px;border-color:#e4e4e4;font-weight:400;vertical-align:middle}.learn-press-modal .modal-wrapper article .search-results{margin:0;margin-top:30px}.learn-press-modal .modal-wrapper article .search-results li>label{display:block}.learn-press-modal .modal-wrapper footer{padding:15px 20px;overflow:hidden;border:1px solid #eee}.learn-press-modal .modal-wrapper footer .search-nav{float:left}.learn-press-modal .modal-wrapper footer .search-nav a,.learn-press-modal .modal-wrapper footer .search-nav span{display:inline-block;line-height:1.625rem;height:28px;margin:0;padding:0 10px 1px}.learn-press-modal .modal-wrapper footer button{float:right;margin-left:3px}#modal-search-items.loading .search-results:before{position:absolute;top:75px;left:0;right:0;bottom:0;display:block;content:\"\";z-index:9;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center}.modal-search{position:relative;display:inline-block;min-width:300px}.modal-search .search-input{border:1px solid #DDD;width:100%;margin:0;padding:5px 10px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{border-color:#DDD}.modal-search .search-results-content{position:absolute;top:100%;width:100%;left:0;background:#FFF;border:1px solid #DDD;border-top:0;z-index:1000;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.modal-search .search-results-content .search-results{margin:0}.modal-search .search-results-content .search-results .result-item{margin:0;padding:0;list-style:none}.modal-search .search-results-content .search-results .result-item label{display:block;padding:6px 10px;text-decoration:none;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-search .search-results-content .search-results .result-item:hover{background:#f4fcff}.modal-search .has-items .search-input{border-bottom-color:transparent}.modal-search .has-items .search-results-content{border-top:0}.modal-search .checked-items{text-align:center}.modal-search .checked-items .button{font-size:.75rem;height:20px;line-height:1.25rem}.modal-search .checked-items .disabled{color:#777}.modal-search .search-navigator{margin:5px 0;text-align:center}.modal-search .search-navigator .page-numbers{display:inline-block;padding:2px 5px;text-decoration:none;line-height:1}.modal-search .search-navigator .page-numbers.next,.modal-search .search-navigator .page-numbers.prev{display:none}.lp-order-statuses{margin:0;display:grid;grid-template-columns:auto auto;grid-gap:10px}.lp-order-statuses .lp-skeleton-animation{grid-column:1\u002F3}.lp-order-statuses li{width:100%;margin:0;background:#fff}.lp-order-statuses li span{font-size:1.1rem;display:flex;text-align:center;justify-content:center;align-items:center;column-gap:10px;font-weight:400}.lp-order-statuses li p{margin:0;padding:0;color:#adadad;font-size:.75rem}.lp-order-statuses li.counter-number{text-align:center}.lp-order-statuses li.counter-number .counter-inner{padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9}.lp-order-statuses li.clear{float:none}.lp-order-statuses li.featured-theme{width:auto;margin:12px -12px 0 -12px;padding:8px 12px 0 12px;border-top:1px solid #eee}.lp-order-statuses li.featured-theme .star-rating{display:inline-block;line-height:.875rem;vertical-align:middle}.lp-order-statuses li.featured-theme .star-rating .star{width:14px;height:14px;font-size:.875rem}.lp-order-statuses li.featured-theme>div{margin-bottom:3px}.lp-order-statuses li.featured-theme>div span{color:#999;font-size:.75rem;vertical-align:middle}.lp-order-statuses li:nth-child(even) .counter-inner{margin-left:0}.lp-order-statuses li:nth-child(odd) .counter-inner{margin-right:0}.lp-order-statuses li.total-raised{grid-column:1\u002F3;box-sizing:border-box;padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9;text-align:center;color:#0073aa}.lp-order-statuses li.total-raised span{margin-bottom:10px;font-size:1.625rem}.lp-order-statuses li.total-raised span i{font-size:1.5625rem}.lp-order-statuses::after{display:block;clear:both;content:\"\"}.featured-theme{border-top:1px solid #eee;margin-top:10px;padding-top:10px}.featured-theme p{margin:0;font-size:12px}.featured-theme .star-rating{display:inline-block;line-height:.75rem}.featured-theme .star-rating .star{font-size:.8125rem;width:13px;height:13px}.featured-theme span{font-size:.6875rem}.lp-place-holder{background:#fff;padding:10px;display:block;margin:20px auto;box-shadow:0 0 0 rgba(0,0,0,0.1);border-radius:3px}.lp-place-holder [class*=line-]{height:6px;width:400px;background:#f6f7f9;margin-bottom:13px;margin-right:5px}.lp-place-holder .thumbnail{height:40px;width:40px;float:left;margin-right:20px;display:inline-block}.lp-place-holder .line-heading{width:80%;height:20px}.lp-place-holder .line-sm{width:30%;margin-top:10px}.lp-place-holder .line-xs{width:50%}.lp-place-holder .line-df{margin-top:30px;width:380px}.lp-place-holder .line-lg{width:200px}.lp-place-holder .line-lgx{width:450px}.lp-place-holder [class*=line],.lp-place-holder .thumbnail{animation:lpTimeLine;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;background:linear-gradient(to right,#eee 8%,#ddd 18%,#eee 33%);background-size:800px auto;background-position:100px 0}@keyframes lpTimeLine{0%{background-position:-350px 0}100%{background-position:400px 0}}.post-type-lp_order #post-body-content{display:none}.post-type-lp_order #order_details{border:none !important;background:transparent !important}.post-type-lp_order #order_details .hndle,.post-type-lp_order #order_details .handlediv,.post-type-lp_order #order_details .postbox-header{display:none}.post-type-lp_order #order_details .inside{display:block !important;margin:0;padding:0}.post-type-lp_order #order_details .order-data{margin:0 0 20px 0 !important;padding:30px !important;border:1px solid #ccd0d4 !important;background-color:#fff !important;box-shadow:none !important}.post-type-lp_order #order_details .order-data-field{margin-bottom:20px}.post-type-lp_order #order_details .order-data-field label{display:block;margin-bottom:5px;font-weight:500}.post-type-lp_order #order_details .order-data-number{margin:0 0 10px;font-size:1.25rem;font-weight:600}.post-type-lp_order #order_details .payment-method-title{color:#777;font-size:1rem}.post-type-lp_order #order_details .payment-method-title strong{color:#23282d}.post-type-lp_order #order_details .order-data-heading{margin-top:40px;font-size:1rem}.post-type-lp_order #order_details .order-users{display:inline-block}.post-type-lp_order #order_details .order-users .description{margin-top:10px;padding:10px;background:#eee}.post-type-lp_order #order_details .order-data-date .order-date{width:120px}.post-type-lp_order #order_details .order-data-date .order-hour,.post-type-lp_order #order_details .order-data-date .order-minute{width:50px}.post-type-lp_order #order_details .order-data-note{display:inline-block}.post-type-lp_order #order_details .order-data-note .order-note{padding:10px;color:#fff;background-color:#c1a3b6;font-size:.875rem}.post-type-lp_order #order_details .order-items{margin:0;border:1px solid #ccd0d4 !important;background-color:#fff}.post-type-lp_order #order_details .order-items table{width:100%;border-collapse:collapse}.post-type-lp_order #order_details .order-items table thead{margin:0;padding:0}.post-type-lp_order #order_details .order-items table thead tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table thead th{padding:15px;border-bottom:0;color:#999;font-weight:400;text-align:left}.post-type-lp_order #order_details .order-items table thead th:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table thead th:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tbody td,.post-type-lp_order #order_details .order-items table tfoot td{padding:10px;border-bottom:1px solid #ddd;text-align:left}.post-type-lp_order #order_details .order-items table tbody{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tbody tr td{padding:15px}.post-type-lp_order #order_details .order-items table tbody tr td:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tbody tr td:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tfoot{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tfoot tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table tfoot tr:last-child td{padding-top:20px;padding-bottom:20px}.post-type-lp_order #order_details .order-items table tfoot td{padding:10px 15px;padding-bottom:0;border:0;font-size:.875rem;text-align:right}.post-type-lp_order #order_details .order-items table tfoot td:first-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tfoot td:last-child{padding-right:30px}.post-type-lp_order #order_details .order-items table .column-price,.post-type-lp_order #order_details .order-items table .column-total,.post-type-lp_order #order_details .order-items table .column-quantity{width:150px;text-align:right}.post-type-lp_order #order_details .order-items table .row-subtotal td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-subtotal td .order-total,.post-type-lp_order #order_details .order-items table .row-total td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-total td .order-total{font-weight:700}.post-type-lp_order #order_details .order-items table .remove-order-item{outline:0;color:#ccc;text-decoration:none}.post-type-lp_order #order_details .order-items table .remove-order-item .dashicons{font-size:1.25rem}.post-type-lp_order #order_details .order-items table .remove-order-item:hover{color:red}.post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item{display:inline-block}.post-type-lp_order #order-export__button:hover{cursor:pointer}.post-type-lp_order .export-modal.modal{display:none;position:fixed;z-index:10;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,0.4)}.post-type-lp_order .export-modal .modal-content{background-color:#fefefe;margin:5% auto;border:1px solid #888;width:60%;position:relative}.post-type-lp_order .export-modal .close{color:#aaa;position:absolute;font-size:28px;font-weight:bold;top:-5px;right:11px}.post-type-lp_order .export-modal .close:hover{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .close:focus{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .panel{display:none}.post-type-lp_order .export-modal .panel.active{display:block}.post-type-lp_order #order-export__tabs.tabs{display:flex;justify-content:space-around;height:40px;box-shadow:0 0 1px 1px rgba(0,0,0,0.2)}.post-type-lp_order #order-export__tabs.tabs>*{width:100%;color:dimgray;height:100%;cursor:pointer;display:flex;justify-content:center;align-items:center}.post-type-lp_order #order-export__tabs.tabs>*:hover:not(.active){background-color:#dcdcdc}.post-type-lp_order #order-export__tabs.tabs>.active{color:white;background-color:#4caf50}.post-type-lp_order #lp-invoice__content{padding:20px 40px 0;margin-bottom:25px}.post-type-lp_order #lp-invoice__content thead th{border-bottom:1px solid #000;border-top:1px solid #000;padding:10px 20px}.post-type-lp_order #lp-invoice__content tbody td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order #lp-invoice__content tfoot td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order .export-options__content{margin-bottom:25px;padding:10px 40px}.post-type-lp_order .export-options{position:relative}.post-type-lp_order .export-options__loading{opacity:0;z-index:-1;visibility:hidden;position:absolute;top:0;left:0;width:100%;background:#fff;right:0;bottom:0;display:flex;align-items:center;justify-content:center}.post-type-lp_order .export-options__loading .spinner{background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;z-index:9;display:inline-block;visibility:visible}.post-type-lp_order .export-options__loading.active{opacity:1;z-index:9;visibility:visible}.post-type-lp_order #lp-invoice__export{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__export:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__update{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__update:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .export-options__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .lp-invoice__body table{border-spacing:0;width:100%}.post-type-lp_order .lp-order-status .dashicons{display:inline-flex !important;align-items:center;font-size:1rem}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination{text-align:left}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li{border:1px solid #2271b1;background:#f6f7f7}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .page-numbers{padding:0 6px}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .current{background:#2271b1;color:#fff !important}#learn-press-toggle-settings-js-css{display:none}#learn-press-toggle-settings-js-css+table{display:none}#learn-press-toggle-settings-js-css:checked+table{display:table}.color-schemas{margin:0 20px 20px 0;float:left}.color-schemas ul{list-style:none;margin:0;padding:0}.color-schemas ul>li>label{font-weight:600;display:block;margin-bottom:10px}.color-schemas .wp-color-picker{width:80px;height:24px;vertical-align:top;margin:0}.color-schemas .wp-picker-holder{position:absolute}.color-schemas .buttons{display:none}.color-schemas table{border-collapse:collapse;position:relative}.color-schemas table td,.color-schemas table th{padding:10px 10px}.color-schemas table tbody{border:1px solid transparent;position:relative}.color-schemas table tbody td,.color-schemas table tbody th{text-align:left;background:#f5f5f5}.color-schemas table tbody tr:first-child td,.color-schemas table tbody tr:first-child th{padding-bottom:0}.color-schemas table:after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,0.7)}.color-schemas tfoot td,.color-schemas tfoot th{padding-left:0;padding-right:0}.color-schemas .remove-schema{float:right;color:red}.color-schemas .wp-color-result{margin:0}.color-schemas .clone-schema{display:none}.color-schemas:first-child .remove-schema,.color-schemas:first-child .apply-schema{display:none}.color-schemas:nth-child(2){clear:both}.color-schemas:hover tbody{opacity:1}.color-schemas.current tbody{border-color:#DDD}.color-schemas.current tbody td,.color-schemas.current tbody th{background:rgba(5,215,255,0.26)}.color-schemas.current table:after{display:none}.color-schemas.current .clone-schema{display:inline-block}.wp-picker-container{position:relative}.wp-picker-container .wp-picker-holder{z-index:99999}.lp-install-sample{max-width:600px;margin:0;padding:10px 25px;border:1px solid #ccd0d4;border-radius:4px;background-color:#fff}.lp-install-sample__options{margin-bottom:20px;padding:0 20px;border:1px solid #eee;border-radius:4px}.lp-install-sample__options legend{padding:5px;font-weight:500}.lp-install-sample__buttons{display:flex;margin-top:25px;align-items:center;justify-content:space-between}.lp-install-sample__toggle-options{margin-right:auto;margin-left:10px}.lp-install-sample__uninstall{float:right}.lp-install-sample__response{margin:0;padding:10px;border:2px solid #059601;border-radius:6px}.lp-install-sample__response.fail{border-color:#d85554}.lp-update-db-modal{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-update-db-modal__hidden{display:none !important;visibility:hidden;opacity:0;pointer-events:none}.lp-update-db-modal__overlay{position:absolute;z-index:1;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-update-db-modal__content{display:inline-block;overflow:hidden;z-index:2;width:100%;max-width:510px;border-radius:8px;text-align:left;vertical-align:middle}.lp-update-db-modal__content-header{padding:24px 24px 16px 24px;background-color:#fff}.lp-update-db-modal__content-start{display:flex;flex-direction:flex-start}.lp-update-db-modal__content-icon{display:flex;width:40px;height:40px;margin-right:0;margin-left:0;border-radius:999px;background-color:#fee2e2;justify-content:center;align-items:center;flex:0 0 auto}.lp-update-db-modal__content-icon svg{width:24px;height:24px;color:#dc2626}.lp-update-db-modal__content-icon svg:last-child{color:#258d6c}.lp-update-db-modal__content-icon__success{display:none}.lp-update-db-modal__content-text{margin-left:18px;text-align:left}.lp-update-db-modal__content-text h3{margin:0;font-weight:500}.lp-update-db-modal__content-text p{margin:0;margin-top:10px;color:#999;font-size:.875rem;font-weight:400}.lp-update-db-modal__content-footer{display:flex;flex-direction:row;padding:10px 24px;background-color:#f9fafb;justify-content:flex-end;align-items:center}.lp-update-db-modal__content-footer a{padding:8px 16px;border:1px solid #e5e7eb;border-radius:6px;color:#374151;font-size:.8125rem;font-weight:500;text-decoration:none}.lp-update-db-modal__content-footer a:last-child{margin-left:10px;color:#fff;background-color:#0073aa}.lp-update-db-modal__success .lp-update-db-modal__content-icon{background-color:#def7ec}.lp-update-db-modal__success .lp-update-db-modal__content-icon__error{display:none}.lp-update-db-modal__success .lp-update-db-modal__content-icon__success{display:block}#lp-tool-upgrade-db .wrapper-lp-upgrade-message,#lp-tool-upgrade-db .wrapper-terms-upgrade,#lp-tool-upgrade-db .wrapper-lp-loading{display:none}.terms-upgrade{max-width:500px;margin:0 auto}.terms-upgrade .error{display:none}.lp-modal-footer .learn-press-notice{color:#ff6060;font-weight:500;font-style:italic}.lp-modal-body .lp-skeleton-animation{width:500px;margin:0 20px}.tools-select__data{overflow:hidden}.tools-select__data li{background-color:#fff;border:1px solid #eee;color:#000;display:flex;flex-direction:row;align-items:center;flex:0 0 auto;font-size:.875rem;line-height:1.4em;font-weight:normal;padding:10px;width:100%}.tools-select__data li input{margin:0 10px 0 0}.progressbar__content{width:100%;font-size:.875rem;font-weight:normal;line-height:1.4em;background:#eee;padding:10px 0;display:flex;flex-direction:column;align-items:center;justify-content:center}.progressbar__content span{z-index:9}.progressbar__container{position:relative}.progressbar__value{position:absolute;width:0;height:100%;left:0;top:0;background:#8a2be2}.progressbar__item h4{z-index:9;margin:0}.progressbar__item{width:500px;border-bottom:1px solid #fff}.progressbar__indexs{z-index:9}.lp-tool__message{text-align:center;color:red;padding:10px 0;display:none}.tools-prepare__message{background:#dba617;padding:10px 0;text-align:center;display:none}.lp-admin-notices{background:transparent;display:none;padding:0;border:0;margin:0 !important}.lp-admin-notices .lp-admin-notice{position:relative}.lp-admin-notices .lp-mes-beta-version{background:#4299e1;color:whitesmoke}.lp-admin-notices .lp-mes-beta-version h3,.lp-admin-notices .lp-mes-beta-version a,.lp-admin-notices .lp-mes-beta-version a:visited{color:white}.lp-admin-notices .lp-mes-beta-version .btn-lp-notice-dismiss::before{color:#fff0f6}.tab-lp-admin-notice{margin-left:5px;width:4px;height:4px;background:#ff1919;display:inline-flex;border-radius:999px;vertical-align:middle}.lp-admin-editor{position:relative;margin:0;background-color:#fff}.lp-admin-editor .heading,.lp-admin-editor .lp-box-data-content{padding:0}#learn-press-admin-editor-metabox-settings{margin-top:20px}#course-editor .inside{margin:0;padding:0}#admin-editor-lp_course .lp-course-curriculum .heading{display:flex;flex-direction:row;flex-wrap:nowrap;position:relative;padding:8px 20px;align-items:center;line-height:1}#admin-editor-lp_course .lp-course-curriculum .heading h4{margin:0;font-size:1rem}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections{display:flex;width:40px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.close::before{content:\"\\f140\"}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.open::before{content:\"\\f142\"}#admin-editor-lp_course .lp-course-curriculum .heading .status{visibility:hidden;position:relative;top:5px;margin-left:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .heading .status::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .heading .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_course .lp-course-curriculum .curriculum-sections{margin:0;margin:0 20px 20px 20px;border:1px solid #ddd}#admin-editor-lp_course .lp-course-curriculum .section{margin:0;border-bottom:1px solid #e5e5e5;opacity:1;background:#fff}#admin-editor-lp_course .lp-course-curriculum .section:first-child{border-top:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section{margin-top:1px;border:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section form{margin:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head{background-color:#f4fcff}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable{position:relative;top:1px}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section{position:relative}#admin-editor-lp_course .lp-course-curriculum .section.empty-section::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-head .movable::before{display:inline-block;color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-collapse{display:none}#admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section input{background-color:transparent;box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section input:focus{box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section .section-head{display:flex;position:relative;height:42px;margin:0;padding:0;background-color:#f4fcff;line-height:2.5rem;transition:background 500ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable,#admin-editor-lp_course .lp-course-curriculum .section .section-head .creatable{display:inline-block;width:40px;margin:0;color:#999;font-family:Dashicons;font-size:1.25rem;text-align:center;vertical-align:middle}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable{margin-right:-1px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable::before{content:\"\\f333\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .section-item-counts{line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions{height:100%;color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions>*{display:inline-block;height:100%;text-align:center;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse::before{display:inline-block;width:40px;color:#999;font-family:Dashicons;font-size:1rem;line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.open::before{content:\"\\f343\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.close::before{content:\"\\f347\"}#admin-editor-lp_course .lp-course-curriculum .section .name{width:100%;border:0;color:#777;font-size:1.5rem;font-weight:600;line-height:3.125rem}#admin-editor-lp_course .lp-course-curriculum .section .name:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-collapse{overflow:hidden}#admin-editor-lp_course .lp-course-curriculum .section .section-content{padding:20px;border-top:1px solid #e5e5e5}#admin-editor-lp_course .lp-course-curriculum .section .details{margin-bottom:20px}#admin-editor-lp_course .lp-course-curriculum .section .title-input{padding-left:0;border:0;font-size:1.2em;line-height:1.875rem;flex:1}#admin-editor-lp_course .lp-course-curriculum .section .description-input{width:100%;margin:0;padding:0;border:0;color:#999}#admin-editor-lp_course .lp-course-curriculum .section .description-input:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section-list-items{width:100%;border-collapse:collapse}#admin-editor-lp_course .lp-course-curriculum .section-list-items ul{position:relative;min-height:5px;margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item{display:flex;position:relative;margin:0;border:1px solid #eee;border-bottom-width:0;background:#fff;transition:background 200ms ease-out;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.ui-sortable-helper{border-bottom:1px solid #eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1){background-color:#f7f7f7}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating::before{position:absolute;z-index:2;top:0;right:0;bottom:0;left:0;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing{background-color:#ffeded}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag{height:20px;padding-top:3px;padding-left:6px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;fill:#999;flex:0 0 18px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover{fill:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{display:flex;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title{margin-right:120px;margin-left:2px;flex-grow:1;flex-basis:100%}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title input{color:inherit}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{display:flex;position:absolute;top:0;right:2px;bottom:0;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions{margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions>*{visibility:hidden;margin-right:10px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .edit{text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .remove{color:#a00}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .drag{visibility:visible}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:not(.lp_lesson) .item-actions .actions .preview-item{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item{display:flex;position:relative;border-bottom-width:1px;transition:all 200ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag{display:flex;width:30px;color:#999;font-family:Dashicons;font-size:1rem;vertical-align:middle;cursor:default;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title{display:inline-block;margin:0;flex:1}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus{background-color:#fff}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type{display:inline-block;padding:8px 5px;color:#ccc}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type input{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.current{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type::before{position:relative;top:2px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz{padding:8px 6px 8px 0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.empty-item::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{text-align:right}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a{width:30px;height:30px;color:#999;line-height:1.875rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a:hover{color:#0073aa}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item>a:hover{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul{display:none;position:absolute;z-index:9;top:100%;right:0;width:165px;margin:0;border:1px solid #999;background:#fdfeff;text-align:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li{margin:0;border-bottom:1px solid #eee;text-align:right}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a{display:block;padding:10px 25px;color:#757575;font-size:.75rem;text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover{background:#eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item:hover ul{display:block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .item-actions .actions>*{visibility:visible;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_quiz .icon::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item{position:relative;color:#a2a2a2}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .item-actions{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .icon::before{color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{color:#0085ba;font-size:1.25rem;text-align:center;flex:0 0 29px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon::before{font-family:Dashicons}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input{width:100%;padding:8px 10px 8px 0;border:0;color:inherit;font-size:.875rem;font-weight:600}#admin-editor-lp_course .lp-course-curriculum .section-actions{padding:0 20px 20px 20px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove{display:none;float:right;height:30px;border:1px solid #eee;border-radius:3px;color:#e74c3c;line-height:1.875rem;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .icon{padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .confirm{display:none;padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .confirm{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon{display:none}#admin-editor-lp_course .lp-course-curriculum .ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating{top:40px;left:100px;opacity:.8;background:#a00}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.section-item-counts{margin:0;margin-left:auto;font-size:.75rem;white-space:nowrap}.section-item-counts span{color:#999}#course-editor{margin-bottom:10px}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-left:0}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-left:0}#quiz-editor .inside{margin:0;padding:0}#admin-editor-lp_quiz{margin:0;padding:0;border:0}#admin-editor-lp_quiz form{margin:0}#admin-editor-lp_quiz .lp-box-data-head{display:flex;flex-direction:row;margin:0;padding:6px 20px;align-items:center}#admin-editor-lp_quiz .lp-box-data-head h3{padding:0}#admin-editor-lp_quiz .lp-box-data-head .status{visibility:hidden;position:relative;top:5px;margin-left:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_quiz .lp-box-data-head .status::before{content:\"\\f463\"}#admin-editor-lp_quiz .lp-box-data-head .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions{display:flex;width:40px;height:30px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_quiz .lp-box-data-content{margin:20px;margin-top:0;border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions{border-collapse:collapse;color:#777}@media(max-width:1560px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .fill_in_blanks .question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row{display:flex;flex-direction:row;text-align:center;align-items:center}@media(max-width:1024px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row.question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>*{width:100%;padding:12px 8px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort{position:relative;color:#999;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;flex:0 0 15px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort:hover{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order{padding:12px 0;color:#32373c;font-size:1.2em;text-align:left;flex:0 0 25px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order::after{content:\".\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type{display:inline-flex;position:relative;width:125px;height:32px;padding:0;border-radius:2px;background-color:#eee;box-shadow:0 0 2px rgba(0,0,0,0.22);line-height:2rem;cursor:pointer;flex:0 0 auto;align-items:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a{display:inline-flex;width:100%;padding:0 10px;color:#666;text-align:center;cursor:pointer;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a::after{margin-left:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul{visibility:hidden;position:absolute;z-index:9999;top:100%;right:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;opacity:1;background:#fdfeff;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a{display:block;min-width:110px;padding:10px 20px;color:#757575;line-height:1.25rem;text-align:right;white-space:nowrap;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a:hover{background-color:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li.disabled{opacity:.4;background-color:#fff;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type:hover ul{visibility:visible;opacity:1;pointer-events:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.actions{width:300px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.name{padding-left:5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover>.sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row .actions .lp-box-data-actions{text-align:right !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header{display:none;border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>*{font-weight:bold}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.order::after{content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.actions{padding:12px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings{padding:0 20px;border:1px solid #ddd;border-right:0;border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings>*{padding:20px 20px 20px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .sort{width:12px;padding:8px 6px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-text{width:calc(100% - 100px);padding-left:0;color:#444;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .order{width:10px;padding:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-correct{width:65px;color:#444;font-weight:600;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions{padding:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions .lp-toolbar-btn{height:42px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr{border:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td{position:static;padding:0 10px;border:0;background:inherit}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort{width:12px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-text{padding-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct{text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr .svg-icon{height:18px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .svg-icon{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper{border-right:0;border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td.sort{border-left:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort i{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort::before{display:inline-block;position:absolute;top:12px;left:4px;font-family:Dashicons;font-size:1.125rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td::after{position:absolute;top:0;right:1px;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-text input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item{border-bottom:1px solid #ddd;background:#f4fcff;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-helper{border-top:1px solid #f1f1f1}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort .fa,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort .fa{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort::after{display:inline-block;position:absolute;left:5px;font-family:Dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-settings{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell{padding:10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input{width:100%;padding:0;border:0;color:#32373c;background:transparent;box-shadow:none;font-size:1.2em;font-weight:normal;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons{display:grid;position:static;z-index:10;height:100%;text-align:right;grid-template-columns:30px 30px 30px 40px;align-items:center;justify-content:end}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons>div a{visibility:hidden}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;z-index:2;top:50%;left:50%;width:28px;height:30px;margin-top:-15px;margin-left:-15px;line-height:1.875rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul{z-index:9}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a{padding:8px 24px;line-height:1.5rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a.remove{border-bottom:1px solid #eee;color:#666}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle{width:40px;height:42px;padding-right:0;font-family:Dashicons;font-size:1.25rem;line-height:2.625rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.open::after{content:\"\\f343\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.close::after{content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions:hover .lp-toolbar-buttons>div a{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings{background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options{padding-right:0;padding-left:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field{margin:0;padding:20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field:nth-child(2n+1){background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-label{margin:0;margin-bottom:10px;color:#666;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .hndle{font-weight:600;cursor:default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle{float:right;position:absolute;top:0;right:0;width:36px;height:36px;line-height:2.25rem;text-align:center;cursor:pointer}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle::after{font-family:Dashicons;font-size:1.125rem;content:\"\\f460\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .quiz-question-options{width:38px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox{min-width:34px;height:34px;line-height:2.625rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .hndle{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .toggle::after{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.sorting_choice .quiz-question-data table.lp-list-options .answer-correct{display:none !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer{margin-top:-1px;border-top:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row{height:auto;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle{display:flex;width:30px;padding:8px 6px 8px 10px;color:#999;font-family:Dashicons;font-size:1.25rem;vertical-align:middle;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle::before{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .order{padding:8px 0;line-height:1.75rem;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question{padding:8px 10px 8px 5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title{display:inline-block;position:relative;min-width:500px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input{width:100%;margin:0;padding:6px 0;border:0;background:transparent;font-size:1.2em;line-height:1.125rem;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{color:#32373c}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input::placeholder{display:inline-block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new{display:inline;position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types{display:none;position:absolute;z-index:9999999;top:100%;right:-2px;width:200px;margin:6px;border:1px solid #999;background-color:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a{display:block;padding:12px 20px;outline:0;color:#757575;box-shadow:none;line-height:1;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a:hover{background:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li.disabled{opacity:.5;background-color:#eee;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button:hover+.question-types{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button+.question-types:hover{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button[disabled=disabled]:hover+.question-types{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .select-item{display:inline}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question button{height:30px;box-shadow:0 1px 0 #ccc !important}#admin-editor-lp_quiz .lp-box-data-content .question-button-actions{text-align:left}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-label{display:none}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-input{margin-left:0}#question-editor .inside{margin:0;padding:0}#admin-editor-lp_question{margin:0;padding:0;border:0;background:#fff}#admin-editor-lp_question form{margin:0}#admin-editor-lp_question .lp-box-data-head{display:flex;flex-direction:row;padding:10px 20px;align-items:center}#admin-editor-lp_question .lp-box-data-head .heading{margin:0;padding:0;flex:1}#admin-editor-lp_question .lp-box-data-head .lp-question-editor{position:relative;margin-left:auto;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a{display:inline-flex;height:32px;padding:0 16px;border:1px solid #999;border-radius:2px;color:#666;line-height:2rem;text-decoration:none;align-items:center;cursor:pointer;user-select:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a::after{margin-left:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul{display:none;position:absolute;z-index:9999;top:100%;right:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;background:#fdfeff}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li{margin:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li:hover,#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.active{background:#eee}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li a{display:block;min-width:110px;padding:10px;color:#757575;font-size:.75rem;text-align:right;white-space:nowrap;text-decoration:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled{opacity:.4}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled a{color:#999;cursor:not-allowed;pointer-events:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul:hover{display:block}#admin-editor-lp_question .lp-box-data-head .lp-question-editor:hover .question-types ul{display:block}#admin-editor-lp_question .lp-box-data-content{padding:0 20px 20px 20px;border:none !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers{width:100%;border:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tr td{padding:0 15px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th{padding:15px;border-bottom:1px solid #ddd;background-color:#eee;font-weight:600}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.answer-text{padding-left:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{width:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort{padding:0 10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order{width:10px;padding:0;text-align:right}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-correct{width:65px;text-align:center}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-text{padding-left:8px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{padding-right:0;text-align:right}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr{color:#444;background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td{background-color:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort{width:15px;padding:0;font-size:1.125rem;text-align:center;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order{font-size:.875rem}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input{width:100%;padding:0;border:0;color:#444;background:transparent;box-shadow:none;font-size:.875rem;font-weight:600;transition:box-shadow .2s ease}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons{z-index:auto}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer{visibility:visible;height:42px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td.sort{border-left:0}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .svg-icon{display:none}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td{position:relative}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .sort::before{display:inline-block;position:absolute;top:8px;left:10px;font-family:\"Dashicons\";content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td::after{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_question .lp-box-data-content .add-answer{margin:15px 0 0 0}#admin-editor-lp_question.sorting_choice table.list-question-answers .answer-correct{display:none !important}.lp-admin-fib-question-editor,.admin-quiz-fib-question-editor{text-align:left}.lp-admin-fib-question-editor .lp-box-data-content,.admin-quiz-fib-question-editor .lp-box-data-content{margin:0 !important;border:none !important}.lp-admin-fib-question-editor .content-editable,.admin-quiz-fib-question-editor .content-editable{min-height:240px !important;padding:12px 15px;border:2px solid #ddd;border-radius:4px}.lp-admin-fib-question-editor .content-editable .fib-blank,.admin-quiz-fib-question-editor .content-editable .fib-blank{position:relative;color:#2196f3}.lp-admin-fib-question-editor .content-editable .fib-blank::before,.admin-quiz-fib-question-editor .content-editable .fib-blank::before{content:\"#\" attr(data-index) \". \"}.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{min-width:700px;border-collapse:collapse}@media(max-width:1024px){.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{width:100%;min-width:100%}}.lp-admin-fib-question-editor .fib-blanks tbody,.admin-quiz-fib-question-editor .fib-blanks tbody{border-bottom:1px solid #bbb}.lp-admin-fib-question-editor .fib-blanks tbody tr,.admin-quiz-fib-question-editor .fib-blanks tbody tr{background:#eee}.lp-admin-fib-question-editor .fib-blanks tbody tr td,.admin-quiz-fib-question-editor .fib-blanks tbody tr td{padding:5px}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options td,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options td{padding:0}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options ul{display:none;margin:5px 0;padding:20px;border:1px solid #ddd;background:#fff;list-style:none}.lp-admin-fib-question-editor .fib-blanks tbody.open .blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody.open .blank-options ul{display:block}.lp-admin-fib-question-editor .fib-blanks tbody .blank-position,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-position{font-weight:600;text-align:center}.lp-admin-fib-question-editor .fib-blanks tbody .blank-actions,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-actions{text-align:right}.lp-admin-fib-question-editor .fib-blanks tbody:last-child,.admin-quiz-fib-question-editor .fib-blanks tbody:last-child{border:0}#fill-in-blanks-editor{display:flex}#fill-in-blanks-editor .blank-options{flex:0 0 65%}#fill-in-blanks-editor .blanks{width:100%;margin:0}#fill-in-blanks-editor .blanks .blank{margin:0 0 20px 0;padding:20px;border:1px solid #d9e0f1;background:#fbfcff}#fill-in-blanks-editor .blanks .blank label{font-weight:bold}#fill-in-blanks-editor .blanks .blank .blank-content{width:100%;min-height:74px;font-size:1rem}#fill-in-blanks-editor .blanks .blank .blank-words .word{background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks .blank .blank-words .word.correct{background:#00a1e6}#fill-in-blanks-editor .blanks .blank .blank-tip p{font-style:italic}#fill-in-blanks-editor .blanks .blank .button-remove{color:red}#fill-in-blanks-editor .passage-preview{margin-left:20px;padding:15px 20px;border:1px solid #ddd;font-size:1rem;line-height:1.5rem;text-align:justify;flex:1}#fill-in-blanks-editor .passage-preview .blank-input{display:inline-block;position:relative;width:50px;height:16px;margin:-2px 10px;padding:0;border:0;border-bottom:1px dashed #ddd;background:transparent;box-shadow:none;font-size:1rem;vertical-align:middle}#fill-in-blanks-editor .blanks-list{width:100%}#fill-in-blanks-editor .blanks-list textarea{width:100%;min-height:300px;margin-bottom:20px;outline:0;background:#f9f9f9;box-shadow:none;font-size:1.125rem;line-height:1.875rem}#fill-in-blanks-editor .blanks-list code{line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks-list code.correct{background:#00a1e6}#lp-modal-choose-items{display:none;position:fixed;z-index:-1;top:0;right:0;bottom:0;left:0;opacity:0;background-color:rgba(0,0,0,0.5)}#lp-modal-choose-items.show{display:block;z-index:99999999;opacity:1}#lp-modal-choose-items.loading .lp-choose-items ul.list-items::before{display:block;position:absolute;z-index:9;top:0;right:0;bottom:0;left:0;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;background-color:#fff;content:\"\"}#lp-modal-choose-items .lp-choose-items{position:relative;max-width:800px;margin:5% auto 10% 20%;border:1px solid #ddd;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);transition:all 200ms ease-out}#lp-modal-choose-items .lp-choose-items.show-preview .header .preview-title{display:flex;align-items:center}#lp-modal-choose-items .lp-choose-items .header{position:relative}#lp-modal-choose-items .lp-choose-items .header .preview-title{display:none;position:absolute;z-index:10;top:0;right:0;bottom:0;left:0;padding-left:20px;border-bottom:1px solid #ddd;background-color:#fff;font-weight:600}#lp-modal-choose-items .lp-choose-items .header .preview-title h3{margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs{margin:0;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .header .tabs .tab{display:inline-block;position:relative;margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs .tab:not(:last-child)::before{position:absolute;top:50%;right:0;height:44px;margin-top:-22px;border-right:1px solid #ddd;content:\"\"}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active::after{display:inline-block;position:absolute;bottom:-6px;left:50%;width:10px;height:10px;margin-left:-6px;border:1px solid #ddd;border-right:0;border-bottom:0;background:#fff;content:\"\";transform:rotate(45deg)}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a{color:#0073aa}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a{display:inline-block;height:44px;padding:0 20px;color:#333;font-weight:600;line-height:2.75rem;text-decoration:none}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus{box-shadow:none}#lp-modal-choose-items .lp-choose-items .header .close{display:inline-block;position:absolute;z-index:30;top:0;right:0;padding:12px;font-size:1em;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main{overflow:hidden;position:relative;padding:20px;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .main .section-item{display:block;overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:color 200ms ease-out}#lp-modal-choose-items .lp-choose-items .main .section-item::before{position:relative;top:3px;font-family:Dashicons}#lp-modal-choose-items .lp-choose-items .main .search{margin-bottom:20px;background:transparent}#lp-modal-choose-items .lp-choose-items .main .search input.modal-search-input{width:100%;height:36px;padding:0 14px;font-size:1rem;line-height:2.25rem}#lp-modal-choose-items .lp-choose-items .main .list-items{overflow-y:auto;position:relative;min-height:260px;max-height:460px;margin:0}#lp-modal-choose-items .lp-choose-items .main .list-items li{margin:15px 0;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main .pagination .index{margin-left:20px;line-height:1.75rem}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview{overflow:auto;position:absolute;z-index:2;top:0;right:0;bottom:0;left:0;max-height:420px;padding:20px;background-color:#fff;transform:translate(100%,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show{transform:translate(0,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li{margin:15px 0}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li:first-child{margin:-10px 0 15px 0}#lp-modal-choose-items .lp-choose-items .footer{padding:20px}body.lp-item-moving{cursor:url(\"..\u002F..\u002Fimages\u002Fclosedhand.cur\") 7 5,default !important}@media screen and (max-width:900px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row{display:block;width:auto;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row>*{width:auto}}#learn-press-reset-course-users,#learn-press-reset-user-courses,#learn-press-reset-user-item{max-width:100%}#learn-press-reset-course-users table,#learn-press-reset-user-courses table,#learn-press-reset-user-item table{width:100%;border-collapse:collapse}#learn-press-reset-course-users .courses-list,#learn-press-reset-user-courses .courses-list,#learn-press-reset-user-item .courses-list{margin:0}#learn-press-reset-course-users input[type=text],#learn-press-reset-user-courses input[type=text],#learn-press-reset-user-item input[type=text]{min-width:300px;height:28px;margin-left:0}#learn-press-reset-course-users .action-reset.dashicons-trash,#learn-press-reset-user-courses .action-reset.dashicons-trash,#learn-press-reset-user-item .action-reset.dashicons-trash{color:red}#learn-press-reset-course-users .action-reset.dashicons-update,#learn-press-reset-user-courses .action-reset.dashicons-update,#learn-press-reset-user-item .action-reset.dashicons-update{-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-assign-course .description{margin-bottom:10px}#learn-press-assign-course label{display:block;margin-bottom:5px}#learn-press-unassigned-course .description{margin-bottom:10px}#learn-press-unassigned-course label{display:block;margin-bottom:5px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}.lp-group-step{border-bottom:1px solid #eee}.lp-group-step h3{padding:0 2em}.lp-group-step label{margin-bottom:5px;font-size:.8em;font-weight:500;font-style:italic}.lp-group-step .lp-item-step{display:flex;position:relative;min-height:35px;margin:0;padding:1em 1em 1em 0;border-top:1px solid #eee;align-items:center;cursor:pointer}.lp-group-step .lp-item-step:hover{background:#eee}.lp-group-step .lp-item-step.running .lp-item-step-left::before{opacity:1}.lp-group-step .lp-item-step.running .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.running::before{display:block;position:absolute;width:0;height:100%;background:#0073aa;content:\"\";opacity:.1;transition:.8s linear}.lp-group-step .lp-item-step.running .progress-bar{opacity:.1}.lp-group-step .lp-item-step.completed .lp-item-step-left::after{opacity:1}.lp-group-step .lp-item-step.completed .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.completed .progress-bar{width:100%;opacity:.1}.lp-group-step .lp-item-step.error .lp-item-step-left::after{opacity:1;color:#d33;content:\"\\f335\"}.lp-group-step .lp-item-step .progress-bar{display:block;position:absolute;top:0;left:0;width:0;height:100%;opacity:0;background:rgba(124,96,217,0.7490196078);transition:.8s linear}.lp-group-step .lp-item-step-left{display:inline-flex;align-items:center;position:relative;padding:0 2em}.lp-group-step .lp-item-step-left::before{display:block;position:absolute;z-index:2;width:1em;height:1em;border:1px solid rgba(0,0,0,0.1);border-top:1px solid #3498db;border-radius:50%;opacity:0;content:\"\";-webkit-animation:lp-rotating .8s linear infinite;animation:lp-rotating .8s linear infinite}.lp-group-step .lp-item-step-left::after{position:absolute;z-index:1;left:23px;opacity:0;color:#4caf50;font-family:Dashicons;font-size:1.5em;content:\"\\f147\"}.lp-group-steps-done{display:none}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media screen and (max-width:782px){.learn-press-dropdown-pages .select2-container{vertical-align:top}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:31px}.learn-press-dropdown-pages .select2-selection__rendered{line-height:31px !important}#learn-press-advertisement{margin:0 12px;padding-bottom:0}#learn-press-advertisement .slider-controls{bottom:40px}}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-admin-statistics-tab-content{box-sizing:border-box;max-width:100%}.lp-admin-statistics-tab-content .btn-group{display:flex;margin:20px 0;gap:10px;flex-direction:row;flex-wrap:wrap}.lp-admin-statistics-tab-content .btn-group button.btn-filter-time{border:1px solid #284bca;color:#000;padding:10px 24px;cursor:pointer;background:#fff}.lp-admin-statistics-tab-content .btn-group .btn-filter-time.active{background:#284bca;color:#fff;border:1px solid #284bca}.lp-admin-statistics-tab-content .custom-filter-time{display:none}.lp-admin-statistics-tab-content .statistics-content{background:white;border:1px solid #d9d9d9;padding:22px}.lp-admin-statistics-tab-content .statistics-content .statistics-group{display:flex;justify-content:space-between;flex-direction:row;flex-wrap:wrap;gap:10px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item{border:1px solid #000;color:#000;padding:15px 30px;display:flex;flex-direction:column;text-align:center;width:100%;max-width:150px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-title{font-size:16px;line-height:1.2}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-count{font-size:24px;line-height:1.2;font-weight:700}.lp-admin-statistics-tab-content .statistics-content .statistics-title{color:#000;text-align:center;font-size:24px;font-style:normal;font-weight:700;line-height:normal;text-transform:capitalize}.lp-admin-statistics-tab-content .statistics-content .statistics-chart-wrapper{padding:10px 30px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;gap:20px;margin-top:20px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50{flex:1}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50:first-child{border-right:1px solid #d9d9d9}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics li{font-size:16px;line-height:1.2;font-weight:400}.lp-admin-statistics-tab-content .statistics-content .top-course-analytics-title{margin-top:0;font-size:24px;line-height:1.2;font-weight:700}table.lp-material--table{border-collapse:collapse;width:100%}table.lp-material--table td,table.lp-material--table th{border:1px solid #ddd;text-align:left;padding:8px}table.lp-material--table thead.hidden{display:none}table.lp-material--table td.sort{cursor:move}table.lp-material--table tr:nth-child(even){background-color:rgba(221,221,221,0.2509803922)}.lp-material--field-wrap{display:flex;flex-direction:row;align-items:center;padding-block:5px}.lp-material--field-wrap label{min-width:70px}.lp-material--group{margin-top:10px;padding:10px;border:1px solid #dedede;border-radius:10px;box-shadow:2px 2px rgba(180,180,180,0.2)}.lp-material-btn-wrap{margin-bottom:10px}.lp-material-btn-wrap.loading::before:before,#btn-lp--save-material.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.button.lp-material--delete{color:white;border-color:red;background:red;vertical-align:top}.lp-material--field-wrap.field-action-wrap{display:flex;justify-content:space-between}.lp-meta-box .lp-material--field-wrap input{width:100%}#available-to-upload{font-weight:bold}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-left:1px solid var(--lp-border-color,#e2e0db);padding-left:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-left:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 20px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:16px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-left:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-left:16px;padding-right:16px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 45px 12px 20px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;right:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-left:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-left linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:right;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-left:0;margin-right:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-ico svg{width:20px;height:20px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}[class*=wp-block-learnpress] img,.block-editor-block-list__block img{max-width:100%;height:auto}[class*=wp-block-learnpress] .info-meta-item,.block-editor-block-list__block .info-meta-item{display:flex;gap:4px;flex-wrap:wrap}[class*=wp-block-learnpress] .info-meta-item i,.block-editor-block-list__block .info-meta-item i{color:var(--lp-primary-color,#ffb606)}[class*=wp-block-learnpress] .info-meta-left,.block-editor-block-list__block .info-meta-left{display:flex;gap:8px;align-items:center;letter-spacing:0}[class*=wp-block-learnpress] a,.block-editor-block-list__block a{text-decoration:none}.wp-block-learnpress-course-image{overflow:hidden}.wp-block-learnpress-course-instructor>div>*,.wp-block-learnpress-course-categories>div>*{display:inline;vertical-align:middle}.wp-block-learnpress-breadcrumb ul{margin:0 auto;list-style:none;padding:0}.wp-block-learnpress-breadcrumb li{display:inline-block;margin:0}.wp-block-learnpress-breadcrumb i{margin:0 8px}.wp-block-learnpress-breadcrumb a{color:inherit}.courses-btn-load-more{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);font-size:var(--lp-font-size-base,1em);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center;cursor:pointer;margin:20px auto}.courses-btn-load-more:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}.lp-modal-dialog .lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp-modal-dialog .lp_allow_repurchase_select>ul{margin:0;padding:0;list-style:none}.lp-modal-dialog .lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp-modal-dialog .lp-button{cursor:pointer;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-modal-dialog .lp-button.loading{pointer-events:none;opacity:.8}.lp-modal-dialog .lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-modal-dialog .lp-button:hover{border-color:var(--lp-primary-color,#ffb606);color:#fff;background:var(--lp-primary-color,#ffb606)}.lp-button.btn-finish-course{cursor:pointer;width:100%;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.lp-button.btn-finish-course:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.lp-button.btn-finish-course.loading{pointer-events:none;opacity:.8}.lp-button.btn-finish-course.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.c-gap-4{column-gap:4px}.wp-block-learnpress-course-feature-review .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}[class^=wp-block-learnpress] .extra-box ul{margin:0 0 0 20px;padding:0}.wp-block-learnpress-course-button-read-more,.wp-block-learnpress-course-button{cursor:pointer;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-button-read-more:hover,.wp-block-learnpress-course-button:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.wp-block-learnpress-course-button-read-more.loading,.wp-block-learnpress-course-button.loading{pointer-events:none;opacity:.8}.wp-block-learnpress-course-button-read-more.loading:before,.wp-block-learnpress-course-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@media(min-width:992px){.lp-block-course-sidebar{margin-top:-260px;margin-block-start:-260px !important}}.wp-block-learnpress-item-search .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}.wp-block-learnpress-item-search .search-course input[name=s]{display:block;width:100%;margin-left:30px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:focus{outline:0}.wp-block-learnpress-item-search .search-course button{position:absolute;top:0;right:10px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none}.wp-block-learnpress-item-search .search-course button:focus{outline:0}.wp-block-learnpress-item-search .search-course button i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-search .search-course button.clear{display:none}.wp-block-learnpress-item-search .search-course button.clear::before{content:\"\\f00d\"}.wp-block-learnpress-course-material .lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);margin-top:20px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-material .course-material-table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.wp-block-learnpress-course-material .course-material-table tbody tr:nth-child(even) td,.wp-block-learnpress-course-material .course-material-table .learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.wp-block-learnpress-course-material .course-material-table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.wp-block-learnpress-course-material .course-material-table th,.wp-block-learnpress-course-material .course-material-table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}.wp-block-learnpress-course-material .course-material-table th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-weight:600;text-align:center}.wp-block-learnpress-course-material .course-material-table th:first-child{text-align:left}.wp-block-learnpress-course-material .course-material-table tr td{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.wp-block-learnpress-course-material .course-material-table tr td:not(:first-child){text-align:center}.wp-block-learnpress-course-material .course-material-table tfoot td{text-align:left;font-weight:bold}.wp-block-learnpress-course-material .course-material-table.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}.wp-block-learnpress-item-hidden-sidebar .section-toggle{justify-content:flex-end;flex:0}.wp-block-learnpress-item-hidden-sidebar .section-toggle i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-close .back-course{padding:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}.wp-block-learnpress-item-close .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){.wp-block-learnpress-item-close .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}.wp-block-learnpress-item-close .back-course:hover{background:transparent;opacity:1}}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:after{display:none}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:focus{border:0;outline:0}.wp-block-learnpress-item-progress .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}.wp-block-learnpress-item-progress .number{padding-right:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.86)}.wp-block-learnpress-item-progress .learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color,#ffb606);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color,#ffb606);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.wp-block-learnpress-item-progress .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.wp-block-learnpress-item-navigation .course-item-nav{display:flex;justify-content:space-between}.wp-block-learnpress-item-navigation .course-item-nav .prev,.wp-block-learnpress-item-navigation .course-item-nav .next{display:flex;line-height:3.125em;flex:1;position:relative}.wp-block-learnpress-item-navigation .course-item-nav .prev span,.wp-block-learnpress-item-navigation .course-item-nav .next span{display:block;font-weight:bold}.wp-block-learnpress-item-navigation .course-item-nav .prev a,.wp-block-learnpress-item-navigation .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666);color:#999}.wp-block-learnpress-item-navigation .course-item-nav .prev::before,.wp-block-learnpress-item-navigation .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover a,.wp-block-learnpress-item-navigation .course-item-nav .prev:hover::before,.wp-block-learnpress-item-navigation .course-item-nav .next:hover a,.wp-block-learnpress-item-navigation .course-item-nav .next:hover::before{color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover .course-item-nav__name,.wp-block-learnpress-item-navigation .course-item-nav .next:hover .course-item-nav__name{display:block}.wp-block-learnpress-item-navigation .course-item-nav .next{text-align:right;flex-direction:row-reverse}.wp-block-learnpress-item-navigation .course-item-nav .next::before{margin-left:10px;content:\"\\f0da\"}.wp-block-learnpress-item-navigation .course-item-nav .next[data-nav=next]{justify-content:flex-end}.wp-block-learnpress-item-navigation .prev::before{margin-right:10px;content:\"\\f0d9\"}.wp-block-learnpress-item-navigation .prev .course-item-nav__name{right:auto;left:-30px}.wp-block-learnpress-item-navigation .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){.wp-block-learnpress-item-navigation .prev .course-item-nav__name{left:15px}}.wp-block-learnpress-item-navigation .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){.wp-block-learnpress-item-navigation .course-item-nav__name{top:-25px;right:15px;left:auto}}.wp-block-learnpress-item-curriculum .lp-course-curriculum__title,.wp-block-learnpress-item-curriculum .course-curriculum-info,.wp-block-learnpress-item-curriculum .course-section__description{display:none}.wp-block-learnpress-item-content .content-item-wrap{padding:0}.wp-block-learnpress-item-curriculum .lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1;flex-direction:row}.wp-block-learnpress-list-courses .learn-press-courses .course{width:unset;padding:0}.wp-block-learnpress-course-featured .course-featured{margin-bottom:0;background-color:inherit;color:inherit;padding:0}.courses-order-by,.block-courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by,.woocommerce-js .block-courses-order-by{background-position-x:calc(100% - 10px)}.courses-order-by:focus,.block-courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.course-img img{display:block}.block-search-courses{display:flex;flex:1;margin-bottom:0}.block-search-courses input{width:100%;max-width:240px;margin:0 4px 0 0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.block-search-courses input::-webkit-input-placeholder{color:#999}.block-search-courses input::-moz-placeholder{color:#999}.block-search-courses input:-ms-input-placeholder{color:#999}.block-search-courses input:-moz-placeholder{color:#999}.block-search-courses input::placeholder{color:#999}.block-search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.block-search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.block-search-courses button i{font-size:1.2em;line-height:1.2}.block-search-courses button:focus{outline:0}.block-search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}@media(max-width:767px){.wp-block-learnpress-course-search{width:100%}.wp-block-learnpress-course-search input{min-width:240px;max-width:unset}}.course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.course-filter-btn-mobile{display:none}}ul.wp-block-learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}ul.wp-block-learn-press-courses[data-layout=grid]{--columns:3;--gap:1.25em;--min-width:200px;grid-gap:var(--gap);display:grid;grid-template-columns:repeat(auto-fill,minmax(max(var(--min-width),100% \u002F var(--columns) - var(--gap) *(var(--columns) - 1) \u002F var(--columns)),1fr));margin-bottom:2.25em}@media(max-width:768px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:min(var(--columns),2)}}@media(max-width:480px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:1}}.wp-block-learnpress-course-price .course-price .free,.wp-block-learnpress-course-price .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.wp-block-learnpress-course-price .course-price .origin-price{margin-right:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.wp-block-learnpress-course-button-read-more button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button-read-more button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-course-button .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.courses-order-by-wrapper .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by-wrapper .courses-order-by{background-position-x:calc(100% - 10px)}.courses-order-by-wrapper .courses-order-by:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.wp-block-learnpress-course-filter h3{margin-bottom:20px;margin-top:0}.wp-block-learnpress-course-filter .filter .line{height:15px;background:#ccc;margin-bottom:10px}.wp-block-learnpress-course-search-filter,.wp-block-learnpress-course-level-filter,.wp-block-learnpress-course-author-filter,.wp-block-learnpress-course-price-filter,.wp-block-learnpress-course-categories-filter,.wp-block-learnpress-course-tag-filter{margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ccc}.wp-block-learnpress-course-search-filter .lp-course-filter__field,.wp-block-learnpress-course-level-filter .lp-course-filter__field,.wp-block-learnpress-course-author-filter .lp-course-filter__field,.wp-block-learnpress-course-price-filter .lp-course-filter__field,.wp-block-learnpress-course-categories-filter .lp-course-filter__field,.wp-block-learnpress-course-tag-filter .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.wp-block-learnpress-course-search-filter label,.wp-block-learnpress-course-level-filter label,.wp-block-learnpress-course-author-filter label,.wp-block-learnpress-course-price-filter label,.wp-block-learnpress-course-categories-filter label,.wp-block-learnpress-course-tag-filter label{flex:1}.wp-block-learnpress-course-search-filter span,.wp-block-learnpress-course-level-filter span,.wp-block-learnpress-course-author-filter span,.wp-block-learnpress-course-price-filter span,.wp-block-learnpress-course-categories-filter span,.wp-block-learnpress-course-tag-filter span{color:#999}.wp-block-learnpress-course-search-filter .search-box{width:100%;height:40px;border:1px solid #ccc;border-radius:5px;margin-top:12px}.wp-block-learnpress-button-submit-filter,.wp-block-learnpress-button-reset-filter{box-sizing:border-box;text-transform:capitalize;border:1px solid #ccc;border-radius:4px;background:white;float:left;text-align:center;width:calc(50% - 8px);padding:8px 30px}.wp-block-learnpress-button-submit-filter{margin-right:4px}.wp-block-learnpress-button-reset-filter{margin-left:4px}.block-editor-block-list__block img{display:block}.block-editor-block-list__block .learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}.block-editor-block-list__block a{text-decoration:none}.block-editor-block-list__block .c-gap-4{column-gap:4px}.block-editor-block-list__block .lp-course-curriculum .course-section .course-item__right{color:inherit}.block-editor-block-list__block.wp-block-learnpress-course-title>*{margin-top:0}a.block-editor-block-list__block.wp-block-learnpress-course-button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}a.block-editor-block-list__block.wp-block-learnpress-course-button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 0 0 10px !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;right:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-right:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;left:80%;transform:translateX(-50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-right:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:left}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-left:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;left:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-right:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-right:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-right:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;right:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;right:0;transform:translateX(-5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:left;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-right:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:right}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-left:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:left}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:right}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:left}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:left}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:left}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.button.disabled{pointer-events:none}.learnpress .postbox .rwmb-meta-box{margin-top:10px}.learnpress #field-_lp_requirements .rwmb-text-list-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{clear:none;position:relative;border:1px solid #ddd;border-radius:4px}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:none}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-advanced{width:calc(100% - 65px);padding:7px 10px;border:0;color:#777;background:transparent;box-shadow:none;line-height:1}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:50%;right:41px;margin-top:-10px;border-radius:unset;color:#999;background:transparent;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone i{font-size:1.25rem}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone:hover{color:#e74c3c}.learnpress #field-_lp_requirements .rwmb-text-list-clone::after,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{display:inline-block;position:absolute;top:50%;right:10px;margin:8px 0 0 0;margin-top:-9px;color:#999;font-family:Dashicons;font-size:1.25rem;content:\"\\f333\"}.learnpress #field-_lp_requirements .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_key_features .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_faqs .rwmb-text-list-clone:focus-within{border-color:#0085ba}.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list:focus{border-color:#0085ba}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{position:relative;padding:0 0 16px 0}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:block;padding:10px 10px 0 12px}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list{width:calc(100% - 25px);margin:0 13px 0 13px;border:1px solid #ddd;vertical-align:top}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:20px;right:36px;margin-top:-10px;color:#999;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{top:20px}.lp-notice,.learn-press-notice{position:relative;padding:12px;margin:0}.lp-notice h4,.learn-press-notice h4{margin:10px 0 15px}.lp-notice p,.learn-press-notice p{margin:0 0 5px 0;padding:0 2px}.lp-notice .lp-message-dismiss,.learn-press-notice .lp-message-dismiss{position:absolute;top:12px;right:12px}.lp-notice .notice-dismiss,.learn-press-notice .notice-dismiss{position:absolute;top:0;right:1px;margin:0;padding:9px;border:0;outline:0;color:#72777c;background:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;cursor:pointer}.lp-notice .notice-dismiss::before,.learn-press-notice .notice-dismiss::before{display:block;width:20px;height:20px;color:#72777c;background:0;font:normal 16px\u002F20px dashicons;text-align:center;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.learn-press-dropdown-pages{display:inline-block}.learn-press-dropdown-pages .list-pages-wrapper{display:flex;align-items:center;gap:10px}.lp-notice-update-database{border:1px solid rebeccapurple;border-left-color:red;border-radius:3px;color:white;background:rebeccapurple}.lp-notice-update-database.do-updating::before{display:inline-block;float:left;margin:9px 5px 0 -5px;color:#2773aa;font-family:dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#adminmenu .update-plugins.lp-plugins-count{padding:0 5px}.search-box input[name=post-search-author],.search-box .select2-container{min-width:200px;margin:0;vertical-align:top}.learn-press-notice-assigned-item{color:red}.learnpress .actions{margin:0}#learn-press-syncs li{position:relative}#learn-press-syncs li.syncing,#learn-press-syncs li.synced{padding-left:24px}#learn-press-syncs li.syncing input[type=checkbox],#learn-press-syncs li.synced input[type=checkbox]{display:none}#learn-press-syncs li.syncing::after{content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-syncs li.synced::after{color:#2773aa;content:\"\\f147\"}#learn-press-syncs li::after{display:block;position:absolute;top:0;left:-3px;width:24px;height:24px;font-family:dashicons;font-size:1.1875rem;line-height:1.5rem;text-align:center}#learn-press-updater .updater-progress{position:relative;margin:0 2px}#learn-press-updater .updater-progress ul{display:flex;position:relative;height:5px;background:#eee}#learn-press-updater .updater-progress ul li{position:relative;margin:0;flex:1}#learn-press-updater .updater-progress ul li::after{display:none;position:absolute;top:-30px;right:0;padding:3px 5px;border-radius:3px;color:#fff;background:#ddd;font-size:.75rem;content:attr(data-version)}#learn-press-updater .updater-progress ul li::before{content:\"\"}#learn-press-updater .updater-progress ul li:last-child::after{_display:block}#learn-press-updater .updater-progress ul::after{position:absolute;top:0;left:0;width:0;height:20px}#learn-press-updater .updater-progress .updater-progress-status{position:absolute;top:0;left:0;width:0;height:5px;background:#5bc4f9;-webkit-transition:width .25s;-moz-transition:width .25s;-ms-transition:width .25s;-o-transition:width .25s;transition:width .25s}#learn-press-updater .updater-progress .updater-progress-status::before{position:absolute;top:-20px;right:0;padding:0 5px;border-radius:3px;color:#fff;background:#5bc4f9;font-size:.75rem;_content:attr(data-value) \"%\"}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation{overflow:hidden;position:absolute;top:0;left:0;width:100%;height:5px;background:#5bc4f9}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation:not(.completed)::after{position:absolute;height:5px;background:#8dd9ff;content:\"\";-webkit-animation:animation4 1.5s ease-out infinite;-moz-animation:animation4 1.5s ease-out infinite;-ms-animation:animation4 1.5s ease-out infinite;-o-animation:animation4 1.5s ease-out infinite;animation:animation4 1.5s ease-out infinite}#learn-press-updater .updating-message{color:#a24666}#learn-press-updater .completed-message{color:#3c8eb7}#learn-press-updater{display:none}.select2 .select2-search.select2-search--inline{margin-bottom:0}.select2 .select2-selection .select2-selection__choice{margin-top:4px;margin-bottom:0}.select2 .select2-selection.select2-selection--multiple{min-height:30px}.list-pages-wrapper .select2-container--default .select2-selection--single .select2-selection__clear{margin:0}.edit-post-layout__metaboxes .rwmb-label>label{color:#666;font-size:small;font-weight:bold}body.post-type-lp_question #button-new-question{display:inline-block;position:relative}body.post-type-lp_question #button-new-question div{display:none;position:absolute;z-index:9999;top:100%;left:0;min-width:100px;margin:0 0 0 -1px;border:1px solid #999;background:white;font-weight:400}body.post-type-lp_question #button-new-question div a{display:block;min-width:100px;margin:0;padding:10px 20px;color:#666;white-space:nowrap;text-decoration:none}body.post-type-lp_question #button-new-question div a:hover{background:#eee}body.post-type-lp_question #button-new-question>a{position:relative;padding-right:15px;text-decoration:none}body.post-type-lp_question #button-new-question>a::after{display:inline-block;position:absolute;top:6px;right:0;width:0;height:0;margin:0;border:5px solid transparent;border-top-color:#0f7aae;content:\"\"}body.post-type-lp_question #button-new-question:hover div{display:block}.lp-label{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.lp-label.success{background:#4caf50}.lp-label.error{background:red}.lp-label.warning{background:#ffc107}.lp-label .far,.lp-label .fas,.lp-label .fa{display:inline-block;margin-right:5px}.lp-admin-profile-courses .column-results{width:200px}.lp-admin-profile-courses .course-results-progress .lp-progress-row{margin:0 0 20px 0}.lp-admin-profile-courses .course-results-progress .lp-course-progress-heading{margin:0 0 5px 0;line-height:1}.lp-admin-profile-courses .learn-press-progress{overflow:hidden;position:relative;width:150px;height:6px;border-radius:3px}.lp-admin-profile-courses .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.lp-admin-profile-courses .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.lp-notify-action-wrapper{position:fixed;bottom:5%;z-index:10000;left:50%;padding:10px;transition:all .5s;transform:translateY(500%);display:flex;flex-direction:column;gap:5px}.lp-notify-action-wrapper.show{display:flex;transform:translateY(0)}.lp-notify-action-wrapper .lp-notify-action{box-shadow:0 4px 25px 1px rgba(0,0,0,0.25);background:#202937;padding:0 20px;border-radius:3px;min-width:200px;transition:all .8s}.lp-notify-action-wrapper .lp-notify-action.clone{display:none}.lp-notify-action-wrapper .lp-notify-action__success{display:none;color:#01a401}.lp-notify-action-wrapper .lp-notify-action__success.show{display:block}.lp-notify-action-wrapper .lp-notify-action__error{display:none;color:#f44336;font-weight:bold}.lp-notify-action-wrapper .lp-notify-action__error.show{display:block}#wp-admin-bar-lp-course-builder svg{vertical-align:text-bottom}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -695,7 +695,7 @@\n \n @font-face {\n   font-family: \"lp-icon\";\n-  src: url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=186\") format(\"woff2\");\n+  src: url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=166\") format(\"woff2\");\n   font-weight: normal;\n   font-style: normal;\n   font-display: swap;\n@@ -1496,6 +1496,21 @@\n   background-repeat: no-repeat;\n }\n \n+.lp-icon-course-builder {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+\n @-moz-keyframes lp-spinner {\n   100% {\n     -moz-transform: rotate(-360deg);\n@@ -10528,7 +10543,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -10536,7 +10551,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -11647,4 +11662,8 @@\n }\n .lp-notify-action-wrapper .lp-notify-action__error.show {\n   display: block;\n+}\n+\n+#wp-admin-bar-lp-course-builder svg {\n+  vertical-align: text-bottom;\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fadmin\u002Fadmin-rtl.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}.lp-tom-select{min-width:150px}.lp-tom-select.plugin-dropdown_input .dropdown-input{width:95%;min-width:auto;border:1px solid #2271b1}.lp-tom-select[multiple]{display:block;height:36px !important;border:1px solid #d0d0d0}.lp-tom-select.ts-wrapper{min-width:200px;width:fit-content}.lp-tom-select.ts-wrapper dropdown-active .ts-control input.dropdown-input{border-color:#d0d0d0}.lp-tom-select.ts-wrapper input.dropdown-input{margin:0 auto 5px;padding:0 8px;box-shadow:none}.lp-tom-select.ts-wrapper.multi.has-items .ts-control{padding:3px 3px 3px 0}.lp-tom-select.ts-wrapper .ts-control{min-height:35px;padding:4px}.lp-tom-select.ts-wrapper .ts-control input[type=text]{min-width:30px}.lp-tom-select.ts-wrapper .ts-control li{margin:0 0 3px 5px;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-control .item{margin:0 0 2px 5px;padding:1px 2px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-dropdown{border:1px solid #d0d0d0;padding-top:5px;border-radius:3px;margin-top:-1px}.lp-tom-select.ts-wrapper .ts-dropdown .spinner{visibility:visible}.lp-tom-select.ts-wrapper .ts-dropdown .spinner::after{content:\"\";border:0}.lp-tom-select .dropdown-input-wrap{display:flex}.lp-toolbar-buttons{position:relative;z-index:10;height:50px}.lp-toolbar-buttons .lp-toolbar-btn{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn a,.lp-toolbar-buttons .lp-toolbar-btn span{outline:0;color:#666;box-shadow:none}.lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;top:50%;right:50%;width:30px;height:30px;margin-top:-15px;margin-right:-15px;line-height:1.875rem;text-align:center}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{color:var(--lp-primary-color)}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove{cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover span{color:#e74c3c}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down-alt2{display:inline-block}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown{color:#000}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul{display:none;position:absolute;top:100%;left:0;margin:0;border:1px solid #999;background:#fdfeff}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li{margin:0;list-style:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a{display:block;margin:0;padding:3px 8px;color:#757575;font-size:.8em;text-align:left;white-space:nowrap;text-decoration:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a:hover{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li.active a{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover{_background:#f5f5f5}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled .lp-btn-icon,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover .lp-btn-icon{color:#666}.lp-toolbar-buttons .lp-toolbar-btn:hover{display:inline-block;background:0}.lp-toolbar-buttons .lp-toolbar-btn:hover .lp-btn-icon{color:#444}.lp-toolbar-buttons .lp-toolbar-btn:hover ul{display:block}.lp-toolbar-buttons .lp-toolbar-btn:hover ul:hover{display:block}.column-content-actions.lp-toolbar-buttons{width:30px;padding:0;white-space:nowrap}.learn-press-box-data{position:relative;margin:20px 0 0 0;border:1px solid #ddd}.learn-press-box-data .lp-box-data-head{padding:10px 15px;background:#fff}.learn-press-box-data .lp-box-data-head h3{margin:0;padding:15px;font-size:1em}.learn-press-box-data .lp-box-data-head .lp-box-data-actions{float:left;position:relative;z-index:10}.learn-press-box-data .lp-box-data-head .lp-box-data-actions .lp-btn{display:inline-block;width:30px;height:50px;line-height:2.875rem;text-align:center;vertical-align:middle}.learn-press-box-data .lp-box-data-head .lp-box-data-actions::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-head::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-content{padding:15px;border-top:1px solid #ddd;background:#fff}.learn-press-box-data .lp-box-data-foot{padding:15px}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up-alt2{display:none}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down-alt2{display:inline-block}.learn-press-box-data.closed .lp-box-data-content{display:none}.lp-list-options{width:100%;border-collapse:collapse}.lp-list-options th,.lp-list-options td{padding:10px 15px;border-top:1px solid #ddd;background:#f5f5f5}.lp-list-options thead th{text-align:right}.lp-list-options tbody tr td{padding:0 15px;background:#f4fcff}.lp-list-options tbody tr td.lp-toolbar-buttons{_overflow:hidden;position:relative;width:30px;height:42px;white-space:nowrap}.lp-list-options tbody tr td.lp-toolbar-buttons .lp-toolbar-btn{visibility:hidden;position:relative;height:43px;margin-top:-4px;margin-bottom:-4px}.lp-list-options tbody tr:nth-child(odd) td{background:#fff}.lp-list-options tbody tr:hover td.lp-toolbar-buttons .lp-toolbar-btn{visibility:visible}.lp-list-options tbody td{text-align:right}.lp-list-options tbody td input[type=text]{width:100%}.lp-list-options tbody td input[type=text][value=\"\"]{font-style:italic}.lp-list-options tbody td.column-content-answer_correct{width:125px}.lp-list-options tbody td.lp-remove-list-option,.lp-list-options tbody td.lp-move-list-option{width:20px;padding:0;text-align:center}.lp-list-options tbody td.lp-remove-list-option a,.lp-list-options tbody td.lp-move-list-option a{visibility:hidden;color:#999}.lp-list-options tbody td.lp-remove-list-option:hover,.lp-list-options tbody td.lp-move-list-option:hover{background:#dbf5ff}.lp-list-options tbody td.lp-move-list-option{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option a{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option:hover a{color:var(--lp-primary-color)}.lp-list-options tbody td.lp-remove-list-option{cursor:pointer}.lp-list-options tbody td.lp-remove-list-option:hover a{color:#e74c3c}.lp-animation{-webkit-animation:spin 4s linear infinite;-moz-animation:spin 4s linear infinite;animation:spin 4s linear infinite}.lp-ajax-search{display:inline-block;position:relative;z-index:999999}.lp-ajax-search .lp-search-term{min-width:300px;height:28px;margin:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-results{position:absolute;top:100%;width:100%;margin:-1px 0 0 0;border:1px solid #ddd;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-ajax-search .lp-search-results .lp-search-items{overflow:auto;max-height:300px;margin:0}.lp-ajax-search .lp-search-results .lp-search-items li{margin:0}.lp-ajax-search .lp-search-results .lp-search-items li label{display:block;padding:8px 10px;border-bottom:1px solid #f3f3f3}.lp-ajax-search .lp-search-results .lp-search-items li label input{float:right;margin-top:1px;margin-left:-100%}.lp-ajax-search .lp-search-results .lp-search-items li label span{display:inline-block;margin-right:25px}.lp-ajax-search .lp-search-results .lp-search-items li label span a.lp-add-item{visibility:hidden;margin-right:10px}.lp-ajax-search .lp-search-results .lp-search-items li.active{background:#dbf5ff}.lp-ajax-search .lp-search-results .lp-search-items li:hover{color:#fff;background:#0085ba}.lp-ajax-search .lp-search-results .lp-search-items li:hover a.lp-add-item{visibility:visible}.lp-ajax-search .lp-search-results .lp-search-actions{margin:0;padding:10px;border-top:1px solid #ddd}#learn-press-ajax-search-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;width:100%;height:100%;opacity:0}.update-overlay{position:fixed;z-index:99999;top:0;right:0;width:100%;height:100%;background:rgba(255,255,255,0.5)}#course-editor.ajax-search #learn-press-ajax-search-overlay{display:block}#course-editor.ajax-search .lp-ajax-search{z-index:100000}.advanced-list{width:100%;min-width:200px;border-radius:var(--lp-border-radius);background:#fff;list-style:none}.advanced-list li{display:inline-block;margin:0 0 5px 5px;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.advanced-list li .remove-item{display:inline-block;margin-left:5px;line-height:1;vertical-align:middle;text-decoration:none;cursor:pointer}.advanced-list li .remove-item:hover{color:#0085ba}.advanced-list li .remove-item::before{font-family:dashicons;text-decoration:none;content:\"\\f335\"}.advanced-list li span{display:inline-block}.advanced-list.locked .remove-item{display:none}.advanced-list::after{display:block;clear:both;content:\"\"}.lp-label-counter{display:inline-block;height:20px;padding:0 10px;border-radius:20px;color:#fff;background:#2196f3;font-weight:bold;line-height:1.25rem}.lp-label-counter.disabled{background:#ddd}@-moz-keyframes spin{100%{-moz-transform:rotate(-360deg)}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.rwmb-duration{border:1px solid #ddd}ul .clearfix{clear:both;height:0;opacity:0}.clearfix-after::after{display:block;clear:both;height:0;opacity:0;content:\"\"}.lp-button{padding:8px 16px;border:1px solid #e5e7eb;border-radius:var(--lp-border-radius);color:#374151;font-size:.9em;font-weight:500;text-decoration:none;cursor:pointer}@font-face{font-family:\"lp-icon\";src:url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=186\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}@-moz-keyframes lp-spinner{100%{-moz-transform:rotate(-360deg)}}@-webkit-keyframes lp-spinner{100%{-webkit-transform:rotate(-360deg)}}@keyframes lp-spinner{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-modal-choose-items-open{overflow:hidden}.lp-modal-search{height:100%;padding:20px;color:#777;background-color:red}.lp-modal-search li.selected{display:none}#learn-press-message-box-block{position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;opacity:.8;background-color:#000}#learn-press-message-box-window{position:fixed;z-index:100000;top:0;left:0;bottom:0;right:0;color:#fff;text-align:center}#message-box-wrap{display:inline-block;max-width:70%;margin:0 auto;text-align:right}.message-box-title{margin:0 0 40px 0;color:#fff;font-size:2.125rem}.message-box-content{font-size:1rem;line-height:1.5}.message-box-animation{width:220px;height:20px;margin:20px 0 0;background-image:url(\"..\u002F..\u002Fimages\u002Fanimation.gif\")}.message-box-buttons{margin:20px 0 0;padding-top:20px;border-top:1px solid #929292}.message-box-button{margin-left:10px !important}.tipsy{position:absolute}.learnpress a,.learnpress a:active{outline:0;box-shadow:none}.learnpress .lp-install-sample-data-options{padding:0 20px 10px 20px;border:1px solid #ddd}.learnpress .lp-install-sample-data-options legend{font-size:1rem}.lp-email-templates{overflow:hidden;margin-top:5px}.learn-press-email-variables{margin:20px 0 0;padding:0;list-style:none}.learn-press-email-variables li{display:inline-block;cursor:pointer}.learn-press-dropdown-pages input[type=text]{min-width:300px;margin:0;vertical-align:top}.learn-press-dropdown-pages .select2-container{min-width:220px !important}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:30px;border-color:#7e8993}.learn-press-dropdown-pages .select2-container .select2-selection__rendered{line-height:1.75em !important}.learn-press-dropdown-pages .select2-container .select2-selection__arrow{left:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat left 5px top 55%;background-size:16px 16px}.learn-press-dropdown-pages .select2-container .select2-selection__arrow b{display:none}.learn-press-dropdown-pages .quick-add-page-actions a{font-size:.8125rem;text-decoration:none}.learn-press-dropdown-pages .quick-add-page-inline{margin-top:0}.lp-select-2+.select2-container .select2-selection--single{height:30px;border-color:#7e8993}.lp-select-2+.select2-container .select2-selection--single .select2-selection__rendered{line-height:1.75em !important}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow{left:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat left 5px top 55%;background-size:16px 16px}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow b{display:none}.learn-press-tooltip{display:inline-block;margin:0 5px;color:#999;font-size:1.0625rem;vertical-align:middle}.learn-press-tooltip.icon::after{font-family:Dashicons;content:\"\\f223\"}.learn-press-tooltip:hover{opacity:1;color:#0073aa}.rwmb-payment-order-wrapper .rwmb-label{margin-bottom:20px !important}.rwmb-payment-order-wrapper .rwmb-input{margin-right:0 !important}.learn-press-payments,.learn-press-emails{width:100%;border:1px solid #ddd;border-collapse:collapse;font-size:.875rem}.learn-press-payments th,.learn-press-payments td,.learn-press-emails th,.learn-press-emails td{padding:10px}.learn-press-payments .order,.learn-press-emails .order{width:30px;padding-left:0;color:#ddd;text-align:center;cursor:not-allowed}.learn-press-payments .name,.learn-press-emails .name{min-width:250px;font-weight:normal;text-transform:capitalize}.learn-press-payments .name a,.learn-press-emails .name a{text-decoration:none}.learn-press-payments .status,.learn-press-emails .status{width:100px;text-align:center;cursor:pointer}.learn-press-payments .status .dashicons,.learn-press-emails .status .dashicons{border-radius:50%;color:#fff;background:#ddd}.learn-press-payments .status a,.learn-press-emails .status a{display:block;margin-top:5px;font-size:.75rem;text-decoration:none}.learn-press-payments .status.enabled .dashicons,.learn-press-emails .status.enabled .dashicons{background:#0085ba}.learn-press-payments thead th,.learn-press-emails thead th{border-bottom:1px solid #ddd;text-align:right}.learn-press-payments tbody tr:nth-child(even) td,.learn-press-emails tbody tr:nth-child(even) td{background:#fff}.learn-press-payments tbody tr:nth-child(odd) td,.learn-press-emails tbody tr:nth-child(odd) td{background:#f5f5f5}.learn-press-payments tbody td,.learn-press-emails tbody td{border-bottom:1px solid #ddd}.learn-press-payments tbody .ui-sortable-helper,.learn-press-emails tbody .ui-sortable-helper{margin-right:-1px;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder,.learn-press-emails tbody .ui-sortable-placeholder{visibility:visible !important;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder td,.learn-press-emails tbody .ui-sortable-placeholder td{height:35px;padding:0;background:#f7f7f7}.learn-press-payments ~ .email-actions,.learn-press-emails ~ .email-actions{text-align:right}.learn-press-payments.sortable .order:hover,.learn-press-emails.sortable .order:hover{color:#0073aa;cursor:ns-resize}.lp-template-overrides{margin-top:20px}.lp-template-overrides thead th h4{margin:0}.lp-template-overrides tbody th{font-weight:bold}.lp-template-overrides tbody th p{display:inline-block;margin:0 10px 0 0}.lp-template-overrides tbody th p a{margin:0;padding:2px 8px;border:0;border-radius:3px;outline:0;box-shadow:none;font-weight:normal}.lp-template-overrides tbody th p a.current{color:#fff;background:#00aadc}.lp-template-overrides .template-row.outdated code::before,.lp-template-overrides .template-row.up-to-date code::before{display:inline-block;margin-top:-2px;margin-left:3px;font-family:Dashicons;vertical-align:middle}.lp-template-overrides .template-row.outdated .template-version{color:red}.lp-template-overrides .template-row.outdated .template-file code::before{color:red;content:\"\\f534\"}.lp-template-overrides .template-row.up-to-date .template-version{color:#1859ff}.lp-template-overrides .template-row.up-to-date .template-file code::before{color:#0085ba;content:\"\\f147\"}.lp-template-overrides .template-version,.lp-template-overrides .core-version{width:100px}.lp-template-overrides #learn-press-no-templates td p{color:#0073aa}.description code{font-size:smaller}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result{display:none;padding:10px;background:#f5f5f5}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result input{width:80px;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result p{margin:7px 0 0;color:#777;font-style:italic}#field-_lp_course_result input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}.widget .widget-content .rwmb-field:not(:last-of-type){margin:0 0 10px}.widget .widget-content .rwmb-field:not(:last-of-type):first-child{margin-top:10px}.widget .widget-content .rwmb-field:last-child{margin-bottom:10px}.widget .widget-content .rwmb-field .rwmb-label,.widget .widget-content .rwmb-field .rwmb-input{width:100%}.widget .widget-content .rwmb-field .rwmb-label{margin-bottom:2px}.widget .widget-content .rwmb-field .rwmb-label label{font-weight:400}.widget .widget-content .rwmb-field .rwmb-input input[type=text]{width:100%}.course-attributes{margin:20px 0}.course-attributes .learn-press-attribute{margin-top:-1px;margin-bottom:0;border:1px solid #ddd}.course-attributes .learn-press-attribute>h4{margin:0;padding:10px 15px;background:#f5f5f5}.course-attributes .learn-press-attribute .learn-press-attribute-data{padding:15px;border-top:1px solid #ddd}.lp-hidden{display:none !important}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}#wpfooter{z-index:5}.learn-press-advertisement-slider{margin:50px 0 0 20px;position:relative;overflow:hidden;box-sizing:border-box;z-index:10}.learn-press-advertisement-slider .slider-items:after{display:block;clear:both;content:\"\"}.learn-press-advertisement-slider .slide-item{position:relative;float:right;width:100%;margin-left:-100%;padding:20px;opacity:0;background:#FFF;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.learn-press-advertisement-slider .slide-item .slide-thumbnail{float:right;width:35%}.learn-press-advertisement-slider .slide-item .slide-thumbnail a{display:block;line-height:1;margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{max-width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:35%;padding-right:20px}.learn-press-advertisement-slider .slide-item .slide-detail h2{margin-top:0}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:none}.learn-press-advertisement-slider .slide-item.slide-active{opacity:1}.learn-press-advertisement-slider .slider-controls{position:absolute;bottom:20px;left:20px}.learn-press-advertisement-slider .slider-controls .next-item,.learn-press-advertisement-slider .slider-controls .prev-item{font-family:\"dashicons\";width:40px;height:40px;border:1px solid #DDD;line-height:2.5rem;font-size:1rem;cursor:pointer;float:right;margin-right:10px;text-align:center;color:#DDD}.learn-press-advertisement-slider .slider-controls .next-item:hover,.learn-press-advertisement-slider .slider-controls .prev-item:hover{border-color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:hover:before,.learn-press-advertisement-slider .slider-controls .prev-item:hover:before{color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:before{content:\"\\f345\"}.learn-press-advertisement-slider .slider-controls .prev-item:before{content:\"\\f341\"}@media only screen and (max-width:1200px){.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:50%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:50%}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}}@media only screen and (max-width:960px){.learn-press-advertisement-slider{margin-right:56px}.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:0;padding-right:0}.learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider{margin-right:56px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail{margin-right:0;padding-right:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}}.lp-admin-tabs{position:relative;margin-top:20px}.lp-admin-tabs.has-sections{display:flex}.lp-admin-tabs .lp-admin-tab-navs{display:none;float:right;position:relative;z-index:5;width:250px;margin:0 0 0 -250px;padding:10px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs .lp-admin-tab-navs .nav-section{margin:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section>span{display:block;padding:8px 20px;outline:0;box-shadow:none;text-decoration:none;text-transform:capitalize}.lp-admin-tabs .lp-admin-tab-navs .nav-section .learn-press-tooltip{float:left;margin-left:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover{border-right:2px solid #563d7c;color:#563d7c}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>span,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>span{padding-right:18px}.lp-admin-tabs.has-sections .lp-admin-tab-navs{display:block}.lp-admin-tabs.has-sections .lp-admin-tab-content{float:right;position:relative;z-index:0;width:100%;padding-right:271px !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs.has-sections::before{position:absolute;z-index:10;top:0;bottom:0;right:250px;border-right:1px solid #ddd;content:\"\"}.lp-admin-tabs::after{display:block;clear:both;content:\"\";z-index:10}.wrap.learn-press-settings .lp-admin-tab-content{padding:18px;background:#fff}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub{float:none;margin:0 0 20px 0;padding-bottom:20px;border-bottom:1px solid #ddd}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub .active{font-weight:bold}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li{text-transform:capitalize}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li::after{display:inline-block;padding:0 10px;content:\"|\"}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li:last-child::after{content:\"\"}.wrap.learn-press-settings .lp-admin-tab-content h2{border-bottom:1px solid #ddd;padding-bottom:10px}.wrap #learn-press-uninstall-sample-data{float:left;opacity:.5}.wrap #learn-press-uninstall-sample-data:hover{opacity:1}#adminmenu .wp-menu-image img{width:17px}.learnpress .rwmb-field{position:relative;margin-bottom:20px}.learnpress .rwmb-field .rwmb-label{display:block;float:right;width:190px;margin-bottom:5px;font-size:.875rem;_text-transform:capitalize}.learnpress .rwmb-field .rwmb-label label>small{display:block;color:#999;font-weight:normal;font-style:italic}.learnpress .rwmb-field .rwmb-input{float:none;width:auto;margin-right:190px}.learnpress .rwmb-field .rwmb-input input[type=checkbox],.learnpress .rwmb-field .rwmb-input input[type=radio]{margin:1px 0 0 5px}.learnpress .rwmb-field .rwmb-input label>input[type=checkbox],.learnpress .rwmb-field .rwmb-input label>input[type=radio]{margin-top:-1px}.learnpress .rwmb-field .description{margin-top:8px;color:#888}.learnpress .rwmb-field .description code{padding:3px 0 3px 3px}.learnpress .rwmb-field .description.err{color:red}.learnpress .rwmb-field .rwmb-input-list{margin-right:0}.learnpress .rwmb-field #course_evaluation_method_quiz_options{position:relative;margin-right:25px}.learnpress .rwmb-field #course_evaluation_method_quiz_options::after{position:absolute;z-index:10;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}.learnpress .rwmb-field input[name=_lp_course_result]:checked ~ #course_evaluation_method_quiz_options::after{display:none}.learnpress .rwmb-field.rwmb-heading-wrapper h4{display:inline-block;margin:0 0 5px 0;padding:0;border-bottom:2px solid #563d7c;font-size:1rem;text-transform:initial}.learnpress .rwmb-field.disabled .field-overlay{position:absolute;z-index:10;top:0;right:0;width:100%;height:100%;opacity:.6;background:#fff;content:\"\"}.learnpress .rwmb-field.rwmb-text-wrapper .rwmb-text{width:50%;min-width:200px}.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input select,.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input input{vertical-align:top}.learnpress .lp-course-sale_start-field.hide,.learnpress .lp-course-sale_end-field.hide{display:none}.learnpress.lp-submenu-settings .lp-admin-settings-buttons{margin-bottom:0;padding-top:20px;border-top:1px solid #ddd}.learnpress.lp-submenu-settings .lp-admin-settings-buttons #learn-press-reset-settings{float:left}.learnpress.lp-submenu-settings .rwmb-input{float:none;width:auto;margin-right:270px;color:#000}.learnpress .rwmb-google-fonts-wrapper .rwmb-input label{display:block;margin-bottom:5px;font-weight:bold}.learnpress .rwmb-google-fonts-wrapper .rwmb-input input{width:90%}.learnpress #learn-press-toggle-course-results{display:block}.learnpress .lp-item-assigned{font-size:.875rem}.learnpress .lp-item-assigned a{text-decoration:none}.learnpress .lp-item-assigned ul{margin-bottom:0}.learnpress .lp-item-assigned ul ul strong{font-weight:normal}.learnpress .lp-item-assigned li{margin:0}.learnpress .lp-item-assigned li a{display:inline-block;margin-bottom:10px}@media screen and (max-width:1280px){.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-label{float:none;width:auto}.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-input{float:right;width:100%;margin-right:0}}.lp-metabox__table .titledesc label>small{display:block;color:#999;font-weight:normal;font-style:italic}.lp-metabox__table .forminp-text>input,.lp-metabox__table .forminp-email>input,.lp-metabox__table .forminp-password>input,.lp-metabox__table .forminp-url>input{min-width:260px}.lp-metabox__table .forminp-textarea textarea{width:400px}.lp-option-disabled{pointer-events:none;opacity:.5}.lp-metabox__custom-fields table{width:100%;max-width:max-content;padding:0 !important}.lp-metabox__custom-fields table th{padding:7px 7px 7px 0 !important}.lp-metabox__custom-fields table th.sort{width:17px;padding:7px !important}.lp-metabox__custom-fields table td{position:relative;padding:4px 7px 4px 0 !important;vertical-align:middle !important}.lp-metabox__custom-fields table td.sort{width:17px;padding-left:7px !important;background:#f9f9f9;font-size:.9375rem;text-align:center;cursor:move}.lp-metabox__custom-fields table td.sort::before{height:100%;color:#999;font-family:Dashicons;text-align:center;content:\"\\f333\"}.lp-metabox__custom-fields table td .delete{display:block;position:relative;width:1em;height:1em;font-size:1.2em;text-indent:-9999px}.lp-metabox__custom-fields table td .delete::before{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#999;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox__custom-fields table td .delete:hover::before{color:#a00}.lp-metabox__custom-fields table td:last-child{padding-left:7px !important}.lp-metabox-field__color{font-size:0 !important}.lp-metabox-field__color .colorpickpreview{display:inline-block;width:30px;height:30px;margin:0;margin-left:3px;padding:0;border:1px solid #ddd;border-radius:4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.2);font-size:1rem;line-height:1.75rem}.lp-metabox-field__color .iris-picker{display:none;position:absolute;z-index:100;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.2)}.lp-metabox-field__image-advanced-upload{padding-top:10px}.lp-metabox-field__image-advanced-images{clear:both;margin:0;padding:0}.lp-metabox-field__image-advanced-images>li{float:right;position:relative;box-sizing:border-box;width:80px;margin:9px 0 0 9px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move}.lp-metabox-field__image-advanced-images>li img{display:block;width:100%;height:auto}.lp-metabox-field__image-advanced-images>li ul.actions{position:absolute;top:-8px;left:-8px;padding:2px}.lp-metabox-field__image-advanced-images>li ul.actions li{float:left;margin:0 2px 0 0}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete::before{position:absolute;top:0;right:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images>li ul.actions::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images>li:hover ul.actions{display:block}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images::after{display:table;clear:both;content:\" \"}.lp-metabox-field__image--inner{position:relative;box-sizing:border-box;width:120px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7}.lp-metabox-field__image--inner img{display:block;width:100%;height:auto}.lp-metabox-field__image--upload{padding-top:10px}.lp-meta-box__inner{display:block;position:relative}.lp-meta-box__inner .form-field:not(fieldset){display:flex;flex-direction:row;position:relative;margin:0;padding:15px 0;flex-wrap:wrap}.lp-meta-box__inner .form-field:not(fieldset) label{width:180px;min-width:180px;max-width:180px;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner .form-field:not(fieldset) .checkbox{margin:2px 0 !important;vertical-align:middle}.lp-meta-box__inner .form-field:not(fieldset) .description{flex:1;display:inline;clear:none;margin:0 7px 0 0;padding:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field{display:grid;grid-template-columns:180px 1fr;position:relative;margin:0;padding:15px 0}.lp-meta-box__inner fieldset.form-field h4{width:180px;min-width:180px;max-width:180px;margin:0;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner fieldset.form-field ul{margin:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field .description{grid-column-start:2;margin-top:10px}.lp-meta-box__duration-select{width:auto !important}.lp-meta-box__duration input[type=number]{width:80px !important}.lp-meta-box__duration .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important}.lp-meta-box__wp-editor{display:block}.lp-meta-box__wp-editor .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box__wp-editor__textarea{border:none !important}.lp-meta-box select{width:auto !important}.lp-meta-box select ~ .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box input[type=number],.lp-meta-box input[type=email],.lp-meta-box input[type=text],.lp-meta-box input[type=password],.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){width:50%}.lp-meta-box input[type=number]+.description,.lp-meta-box input[type=email]+.description,.lp-meta-box input[type=text]+.description,.lp-meta-box input[type=password]+.description,.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea)+.description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box input[type=checkbox]{margin-top:2px}.lp-meta-box .short{width:50%}.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){height:4.6rem;line-height:1.5em;vertical-align:top}.lp-meta-box .learn-press-tip.ready{display:inline-flex;align-items:center;margin-right:8px}#course-settings .inside{margin:0 !important;padding:0 !important}#course-settings .lp-meta-box__course-tab{display:grid;grid-template-columns:20% 80%}#course-settings .lp-meta-box__course-tab__tabs{position:relative;box-sizing:border-box;margin:0;padding:0 0 10px;border-left:1px solid #eee;background-color:#fafafa}#course-settings .lp-meta-box__course-tab__tabs li{display:block;position:relative;margin:0;padding:0}#course-settings .lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;margin:0;padding:10px;border-bottom:1px solid #eee;box-shadow:none;text-decoration:none}#course-settings .lp-meta-box__course-tab__tabs li a i{margin-left:5px;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;text-transform:none}#course-settings .lp-meta-box__course-tab__tabs li a i[class^=dashicon]{font-family:\"Dashicons\"}#course-settings .lp-meta-box__course-tab__tabs li.active a{position:relative;color:#555;background-color:#eee}@media(max-width:767px){#course-settings .lp-meta-box__course-tab__tabs{display:flex;overflow:hidden;overflow-x:auto;flex-direction:row;margin:0;margin-bottom:30px;padding:0;border-bottom:1px solid #e5e5e5;text-align:center;white-space:nowrap;list-style:none;align-items:center;flex-wrap:nowrap}#course-settings .lp-meta-box__course-tab__tabs li{min-width:25%;margin-left:20px}}#course-settings .lp-meta-box__course-tab__content>div{padding:20px}@media(max-width:767px){#course-settings .lp-meta-box__course-tab{grid-template-columns:auto}}#price_course_data ._lp_sale_price_field,#price_course_data ._lp_price_field{position:relative}#price_course_data ._lp_sale_price_field .learn-press-tip-floating,#price_course_data ._lp_price_field .learn-press-tip-floating{top:54px;right:92px;opacity:.8;background:#a00}#price_course_data ._lp_sale_price_field .learn-press-tip-floating::before,#price_course_data ._lp_price_field .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.lp_course_extra_meta_box__content{flex:1}.lp_course_extra_meta_box__fields{margin-bottom:10px}.lp_course_extra_meta_box__field{position:relative;max-width:600px;margin-bottom:10px}.lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;right:0;width:40px;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_course_extra_meta_box__field .delete{display:flex;position:absolute;top:0;left:0;width:40px;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_extra_meta_box__input{width:100% !important;padding-left:40px !important;padding-right:40px !important}.lp_repeater_meta_box__wrapper{flex:1 !important}.lp_repeater_meta_box__fields{position:relative;margin-bottom:10px}.lp_repeater_meta_box__field{display:grid;position:relative;margin-bottom:10px;border:1px solid #c5c5c5;border-radius:2px}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__content{display:block}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__title__toggle::after{transform:rotate(-180deg)}.lp_repeater_meta_box__title{display:grid;grid-template-columns:44px 1fr 40px 40px;align-items:center;position:relative;background-color:#eee}.lp_repeater_meta_box__title__title{flex:1;padding:14px 0}.lp_repeater_meta_box__title__sort{display:flex;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_repeater_meta_box__title__sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_repeater_meta_box__title__delete{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_repeater_meta_box__title__toggle{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__toggle::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f347\"}.lp_repeater_meta_box__content{display:none;padding:14px 20px}.lp_repeater_meta_box__content>label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;margin-bottom:20px;grid-template-rows:auto 1fr}.lp_repeater_meta_box__content>label:last-child{margin-bottom:0}.lp_repeater_meta_box__content>label span{margin-bottom:5px}.lp_repeater_meta_box__content>label textarea,.lp_repeater_meta_box__content>label input{width:100% !important}.lp_course_faq_meta_box__content{flex:1}.lp_course_faq_meta_box__fields{position:relative;margin-bottom:10px}.lp_course_faq_meta_box__field{display:grid;position:relative;margin-bottom:10px;padding:20px;border:1px solid #c5c5c5;border-radius:4px;grid-row-gap:10px}.lp_course_faq_meta_box__field label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;grid-template-rows:auto 1fr}.lp_course_faq_meta_box__field label span{margin-bottom:5px}.lp_course_faq_meta_box__field label textarea,.lp_course_faq_meta_box__field label input{width:100% !important}.lp_course_faq_meta_box__field a.delete{display:flex;position:absolute;top:15px;left:50px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_faq_meta_box__field .sort{display:flex;position:absolute;top:15px;left:20px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center;cursor:grab}.lp_course_faq_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}#passing-condition-quiz-result{display:none}#passing-condition-quiz-result input{width:80px !important;margin-top:5px !important}#passing-condition-quiz-result p{padding:10px 16px;background-color:#eee;font-size:.875rem}.lp-meta-box__file_list{display:inline-block;clear:both;margin:0;padding:0}.lp-meta-box__file_list>li{display:flex;flex-flow:column nowrap;float:right;position:relative;box-sizing:border-box;width:80px;height:80px;margin:9px 0 0 9px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move;align-items:center;justify-content:center}.lp-meta-box__file_list>li img{display:block;width:100%;height:auto}.lp-meta-box__file_list>li img.is_file{width:30px}.lp-meta-box__file_list>li img.is_file ~ span{margin-top:5px;font-size:.75rem}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions{position:absolute;top:-8px;left:-8px;padding:2px}.lp-meta-box__file_list>li ul.actions li{float:left;margin:0 2px 0 0}.lp-meta-box__file_list>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-meta-box__file_list>li ul.actions li a.delete::before{position:absolute;top:0;right:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions::before{display:table;content:\" \"}.lp-meta-box__file::before{display:table;content:\" \"}.lp-meta-box__file::after{display:table;clear:both;content:\" \"}.lp-metabox-evaluate-final_quiz{display:block}.lp-metabox-evaluate-final_quiz__message{display:inline-block;min-width:50%;margin-top:10px;padding:8px 20px;border:2px solid #36af27;border-radius:4px;background:#f7f7f7;text-align:center}.lp-metabox-evaluate-final_quiz__message-error{border-color:lightcoral}.lp_widget_autocomplete__loading{margin-top:0 !important;padding:7px 10px;border:1px solid #949494;border-top:none !important;background:#eee;font-size:13px !important}.lp_widget_autocomplete__select{overflow:auto;right:0;width:100%;max-height:148px;margin-top:-1px;background:#eee;font-size:.8125rem}.lp_widget_autocomplete__item{overflow:hidden;padding:7px 10px;border:1px solid #949494;border-top:0;border-bottom-color:#afafaf;white-space:nowrap;text-overflow:ellipsis;cursor:pointer}.lp_widget_autocomplete__item__selected,.lp_widget_autocomplete__item:hover{color:#fff;background-color:#007cba}.widget .select2-selection__rendered{font-size:.8125rem}.sortable-wrapper{margin:1em 0}.sortable-wrapper .sortable{margin:.5em 0}.sortable-wrapper .sortable .dashicons-move{cursor:move}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(-360deg)}}.sortable-wrapper>label{font-weight:600;font-size:14px}.sortable__item{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sortable__item:last-child{margin-bottom:0}.widget-content p{margin-bottom:8px;display:flex;align-items:center;flex-wrap:wrap}:root{--lp-addon-item-padding:10px;--lp-border-radius:3px;--lp-addon-item-border-color:#c3c4c7}@media screen and (min-width:1600px){.plugin-card:not(.hide-if-js):nth-child(even){margin-left:8px}.plugin-card:not(.hide-if-js):nth-child(3n){margin-left:0}}#lp-addons{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:20px;padding-left:20px}#lp-addons.max-3-items{grid-template-columns:repeat(auto-fit,minmax(280px,320px))}#lp-addons a{text-decoration:none}#lp-addons button{padding:6.5px 17px;background:#9747ff;color:white;border-radius:3px;border:0;cursor:pointer}#lp-addons button.btn-addon-action.handling span{display:none}#lp-addons button.btn-addon-action.handling span.dashicons{display:inline-flex}#lp-addons button.btn-addon-action[data-action=cancel]{position:absolute;left:0;background:transparent;color:rgba(255,0,0,0.89);top:0;padding:7px 10px}#lp-addons button.btn-addon-action span.dashicons{align-items:center;display:none;font-size:1.125em;width:auto;height:auto;animation:rotation 2s infinite linear}#lp-addons button[data-action=update]{background:#27bf49}#lp-addons button[data-action=setting]{background:#2d72da}#lp-addons .lp-addon-item{background:white;padding:var(--lp-addon-item-padding);border:1px solid var(--lp-addon-item-border-color);border-radius:3px;display:flex;flex-direction:column;justify-content:space-between;position:relative}#lp-addons .lp-addon-item input{margin:0 !important}#lp-addons .lp-addon-item.hide,#lp-addons .lp-addon-item.search-not-found{display:none}#lp-addons .lp-addon-item__content{text-align:center;min-height:290px}#lp-addons .lp-addon-item__content img{width:50px;height:50px;border-radius:10px;margin-top:20px}#lp-addons .lp-addon-item__content a{text-decoration:none}#lp-addons .lp-addon-item__content p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}#lp-addons .lp-addon-item__content p::before{content:none}#lp-addons .lp-addon-item__actions{border-top:1px solid var(--lp-addon-item-border-color);padding:10px var(--lp-addon-item-padding) 0;margin:0 calc(var(--lp-addon-item-padding) * -1);display:flex;align-items:center}#lp-addons .lp-addon-item__actions__left{flex:3;display:flex;gap:5px;align-items:center}#lp-addons .lp-addon-item__actions__left button{display:none}#lp-addons .lp-addon-item__actions__right button{display:none;background:transparent;color:#2271b1}#lp-addons .lp-addon-item__purchase{display:none;position:absolute;top:0;bottom:0;right:0;left:0;background:rgba(255,255,255,0.6);text-transform:uppercase}#lp-addons .lp-addon-item__purchase__wrapper div{position:absolute;bottom:20%;right:var(--lp-addon-item-padding);left:var(--lp-addon-item-padding);background:white;border:1px solid var(--lp-addon-item-border-color);padding:var(--lp-addon-item-padding);border-radius:3px;flex-direction:column;display:none;gap:5px;box-shadow:0 4px 25px 1px rgba(0,0,0,0.25)}#lp-addons .lp-addon-item__purchase__wrapper div input{width:100%}#lp-addons .lp-addon-item__purchase label{text-transform:capitalize}#lp-addons .lp-addon-item.installed.activated button[data-action=setting]{display:block}#lp-addons .lp-addon-item.installed.activated button[data-action=deactivate]{display:block}#lp-addons .lp-addon-item.installed.activated.update button[data-action=update]{display:block}#lp-addons .lp-addon-item.installed:not(.activated) button[data-action=activate]{display:block}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code]{display:inline-flex;align-items:center;padding:0 5px;height:12px}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code] span{animation:none;display:inline}#lp-addons .lp-addon-item.not_installed.purchase button[data-action=purchase]{display:block}#lp-addons .lp-addon-item.not_installed.free button[data-action=install]{display:block}#lp-addons .lp-addon-item.not_installed .lp-addon-item__actions__right{display:none}#lp-addons .lp-addon-item.update button[data-action=update]{display:block}#lp-addons .lp-toggle-switch .lp-toggle-switch-label{height:20px;align-items:center;margin-bottom:0;background:#b4b9be;cursor:pointer;display:inline-flex;justify-content:space-between;position:relative;transition:right .15s ease-out;border-radius:100px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label:after{background:#fff;content:\"\";display:block;position:absolute;right:4px;width:12px;height:12px;transition:all .25s ease-in-out;border-radius:50%}#lp-addons .lp-toggle-switch .lp-toggle-switch-label::before{right:0}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on,#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{opacity:1;padding-right:6px;padding-left:6px;font-size:.8em;line-height:1.125em}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on{color:#fff;opacity:0;padding-left:0;width:12px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{width:12px;color:#777;padding-right:0}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input{display:none}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label{background:#0073aa}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label:after{right:auto;left:5px;background:#fff}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-on{opacity:1}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-off{opacity:0}#lp-addons .lp-toggle-switch .dashicons{animation:rotation 2s infinite linear}#lp-addons .screen-reader-text:focus{clip-path:inset(50%);-webkit-clip-path:inset(50%)}.lp-nav-tab-wrapper{display:flex;margin-bottom:20px;justify-content:start;gap:5px;border-bottom:1px solid #c3c4c7}.lp-nav-tab-wrapper .nav-tab{border:1px solid #c3c4c7;border-bottom:0;margin-right:0;padding:5px 10px;line-height:1.6em;font-weight:600;background:#dcdcde;color:#50575e;text-decoration:none;white-space:nowrap;border-radius:3px 3px 0 0}.lp-nav-tab-wrapper .nav-tab-active{background:#f0f0f1;border-bottom:1px solid #f0f0f1}.wp-submenu .lp-notify{display:none;vertical-align:top;box-sizing:border-box;margin:1px 5px -1px 0;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#d63638;color:#fff;font-size:.75em;line-height:1.6;text-align:center}.related-themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));grid-gap:20px}.related-themes li{margin:0}.related-themes .plugin-card-top{padding-bottom:0;background:#fff}.related-themes .theme-content{position:relative}.related-themes .image-thumbnail img{width:100%;height:auto;vertical-align:middle}.related-themes .theme-description{margin:0 0 25px 0;display:-webkit-box;overflow:hidden;min-height:8em;max-height:8em;line-height:1.6em;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:5;color:#777}.related-themes .theme-title{min-height:3.2em;margin-left:100px;margin-bottom:0;font-size:1.2em;line-height:1.3em}.related-themes .theme-title a{color:#545454}.related-themes .theme-rating{display:inline-block;float:left}.related-themes .star-rating{display:inline-block}.related-themes .count-rating{position:relative;top:2px;font-size:.9375rem}.related-themes .theme-detail{position:absolute;top:-3px;left:3px;line-height:1.6em;text-align:left}.related-themes .theme-detail::after{display:block;clear:both;content:\"\"}.related-themes .theme-detail .theme-price{display:inline-block;color:#545454;font-size:1.5rem;font-weight:700;line-height:1.3em}.related-themes .theme-footer{clear:both;overflow:hidden;margin-left:-20px;margin-right:-20px;padding:20px;border-top:1px solid #ddd;background-color:#fafafa}.post-type-lp_order .wp-list-table .column-order_status{width:150px}.post-type-lp_order .wp-list-table .order_status span{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.post-type-lp_order .wp-list-table .order_status span.pending{background:#bdbdbd}.post-type-lp_order .wp-list-table .order_status span.processing{background:#ffc107}.post-type-lp_order .wp-list-table .order_status span.completed{background:#4caf50}.post-type-lp_order .wp-list-table .order_status span.cancelled{background:#444}.post-type-lp_order .wp-list-table .order_status span.failed{background:red}.post-type-lp_order .wp-list-table .order_status span.trash{color:rgba(128,128,128,0.68)}.post-type-lp_order .wp-list-table .order_status span i{display:inline-block}.post-type-lp_order .wp-list-table .column-title,.post-type-lp_order .wp-list-table .column-order_total,.post-type-lp_order .wp-list-table .column-order_date{width:150px}.post-type-lp_order .wp-list-table .column-order_items ol{margin:0;padding:0;list-style-position:inside}.post-type-lp_course .wp-list-table .column-price{width:80px}.post-type-lp_course .wp-list-table .column-thumbnail{width:60px;padding-top:8px;box-sizing:border-box}.post-type-lp_course .wp-list-table .column-thumbnail img{width:100%;height:auto}@media only screen and (max-width:782px){.post-type-lp_course .wp-list-table .column-thumbnail{display:none}.post-type-lp_course .wp-list-table .column-thumbnail::before{opacity:0}}.post-type-lp_course .wp-list-table .column-certificate{box-sizing:border-box;max-width:60px}.post-type-lp_course .wp-list-table .column-certificate img{max-width:100% !important}@media only screen and (min-width:1024px){.post-type-lp_course .wp-list-table .check-column{width:1.2em}}@media only screen and (min-width:783px){.post-type-lp_course .wp-list-table .column-title{width:16%}}.wp-list-table .column-author,.wp-list-table .column-instructor{width:80px}.wp-list-table .column-author .post-author,.wp-list-table .column-instructor .post-author{display:inline-block}.wp-list-table .column-author .post-author img,.wp-list-table .column-instructor .post-author img{width:30px;height:30px;margin:0;border-radius:50%;vertical-align:middle}.wp-list-table .column-author .post-author a,.wp-list-table .column-instructor .post-author a{display:inline-block;vertical-align:middle}.wp-list-table .column-curriculum{width:60px}.wp-list-table .column-student{width:60px}.wp-list-table .column-taxonomy-course_category{width:100px}.wp-list-table .column-gradebook{width:40px;text-align:center}.post-type-page .column-lp-page{width:200px}.post-type-page .for-plugin-page{margin:0;color:red;font-size:.6875rem}.post-state .post-author{font-size:.875rem;font-weight:normal;font-style:italic}#learn-press-box-edit-slug{overflow:hidden;margin:0 -10px;padding:10px;border:1px solid #ddd;color:#b79186;background:#fff}#learn-press-box-edit-slug .button{float:left;height:24px;line-height:1.375rem}.is-lp-page{color:#fff;font-size:11px;padding:1px 8px;border-radius:10px;background-color:#9979ff;margin-left:5px;display:inline-block}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-modal{position:fixed;z-index:1000000;width:100%;height:100%;top:0;display:table}.learn-press-modal .modal-overlay{position:fixed;z-index:1000000;background:#000;opacity:.5;width:100%;height:100%;top:0}.learn-press-modal .modal-wrapper{display:table-cell;vertical-align:middle;z-index:1000010;position:relative}.learn-press-modal .modal-wrapper .modal-container{max-width:800px;width:90%;margin:0 auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 8px rgba(0,0,0,0.33);transition:all .3s ease;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-modal .modal-wrapper header{font-size:1.125rem;padding:20px;border-bottom:1px solid #DDD;font-weight:600;color:#000}.learn-press-modal .modal-wrapper article{margin:30px 20px}.learn-press-modal .modal-wrapper article input[name=search]{width:100%;font-size:1rem;box-sizing:border-box;margin:0;box-shadow:none;color:#444;padding:8px 10px;height:42px;border-radius:2px;border-color:#e4e4e4;font-weight:400;vertical-align:middle}.learn-press-modal .modal-wrapper article .search-results{margin:0;margin-top:30px}.learn-press-modal .modal-wrapper article .search-results li>label{display:block}.learn-press-modal .modal-wrapper footer{padding:15px 20px;overflow:hidden;border:1px solid #eee}.learn-press-modal .modal-wrapper footer .search-nav{float:right}.learn-press-modal .modal-wrapper footer .search-nav a,.learn-press-modal .modal-wrapper footer .search-nav span{display:inline-block;line-height:1.625rem;height:28px;margin:0;padding:0 10px 1px}.learn-press-modal .modal-wrapper footer button{float:left;margin-right:3px}#modal-search-items.loading .search-results:before{position:absolute;top:75px;right:0;left:0;bottom:0;display:block;content:\"\";z-index:9;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center}.modal-search{position:relative;display:inline-block;min-width:300px}.modal-search .search-input{border:1px solid #DDD;width:100%;margin:0;padding:5px 10px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{border-color:#DDD}.modal-search .search-results-content{position:absolute;top:100%;width:100%;right:0;background:#FFF;border:1px solid #DDD;border-top:0;z-index:1000;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.modal-search .search-results-content .search-results{margin:0}.modal-search .search-results-content .search-results .result-item{margin:0;padding:0;list-style:none}.modal-search .search-results-content .search-results .result-item label{display:block;padding:6px 10px;text-decoration:none;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-search .search-results-content .search-results .result-item:hover{background:#f4fcff}.modal-search .has-items .search-input{border-bottom-color:transparent}.modal-search .has-items .search-results-content{border-top:0}.modal-search .checked-items{text-align:center}.modal-search .checked-items .button{font-size:.75rem;height:20px;line-height:1.25rem}.modal-search .checked-items .disabled{color:#777}.modal-search .search-navigator{margin:5px 0;text-align:center}.modal-search .search-navigator .page-numbers{display:inline-block;padding:2px 5px;text-decoration:none;line-height:1}.modal-search .search-navigator .page-numbers.next,.modal-search .search-navigator .page-numbers.prev{display:none}.lp-order-statuses{margin:0;display:grid;grid-template-columns:auto auto;grid-gap:10px}.lp-order-statuses .lp-skeleton-animation{grid-column:1\u002F3}.lp-order-statuses li{width:100%;margin:0;background:#fff}.lp-order-statuses li span{font-size:1.1rem;display:flex;text-align:center;justify-content:center;align-items:center;column-gap:10px;font-weight:400}.lp-order-statuses li p{margin:0;padding:0;color:#adadad;font-size:.75rem}.lp-order-statuses li.counter-number{text-align:center}.lp-order-statuses li.counter-number .counter-inner{padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9}.lp-order-statuses li.clear{float:none}.lp-order-statuses li.featured-theme{width:auto;margin:12px -12px 0 -12px;padding:8px 12px 0 12px;border-top:1px solid #eee}.lp-order-statuses li.featured-theme .star-rating{display:inline-block;line-height:.875rem;vertical-align:middle}.lp-order-statuses li.featured-theme .star-rating .star{width:14px;height:14px;font-size:.875rem}.lp-order-statuses li.featured-theme>div{margin-bottom:3px}.lp-order-statuses li.featured-theme>div span{color:#999;font-size:.75rem;vertical-align:middle}.lp-order-statuses li:nth-child(even) .counter-inner{margin-right:0}.lp-order-statuses li:nth-child(odd) .counter-inner{margin-left:0}.lp-order-statuses li.total-raised{grid-column:1\u002F3;box-sizing:border-box;padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9;text-align:center;color:#0073aa}.lp-order-statuses li.total-raised span{margin-bottom:10px;font-size:1.625rem}.lp-order-statuses li.total-raised span i{font-size:1.5625rem}.lp-order-statuses::after{display:block;clear:both;content:\"\"}.featured-theme{border-top:1px solid #eee;margin-top:10px;padding-top:10px}.featured-theme p{margin:0;font-size:12px}.featured-theme .star-rating{display:inline-block;line-height:.75rem}.featured-theme .star-rating .star{font-size:.8125rem;width:13px;height:13px}.featured-theme span{font-size:.6875rem}.lp-place-holder{background:#fff;padding:10px;display:block;margin:20px auto;box-shadow:0 0 0 rgba(0,0,0,0.1);border-radius:3px}.lp-place-holder [class*=line-]{height:6px;width:400px;background:#f6f7f9;margin-bottom:13px;margin-left:5px}.lp-place-holder .thumbnail{height:40px;width:40px;float:right;margin-left:20px;display:inline-block}.lp-place-holder .line-heading{width:80%;height:20px}.lp-place-holder .line-sm{width:30%;margin-top:10px}.lp-place-holder .line-xs{width:50%}.lp-place-holder .line-df{margin-top:30px;width:380px}.lp-place-holder .line-lg{width:200px}.lp-place-holder .line-lgx{width:450px}.lp-place-holder [class*=line],.lp-place-holder .thumbnail{animation:lpTimeLine;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;background:linear-gradient(to left,#eee 8%,#ddd 18%,#eee 33%);background-size:800px auto;background-position:100px 0}@keyframes lpTimeLine{0%{background-position:-350px 0}100%{background-position:400px 0}}.post-type-lp_order #post-body-content{display:none}.post-type-lp_order #order_details{border:none !important;background:transparent !important}.post-type-lp_order #order_details .hndle,.post-type-lp_order #order_details .handlediv,.post-type-lp_order #order_details .postbox-header{display:none}.post-type-lp_order #order_details .inside{display:block !important;margin:0;padding:0}.post-type-lp_order #order_details .order-data{margin:0 0 20px 0 !important;padding:30px !important;border:1px solid #ccd0d4 !important;background-color:#fff !important;box-shadow:none !important}.post-type-lp_order #order_details .order-data-field{margin-bottom:20px}.post-type-lp_order #order_details .order-data-field label{display:block;margin-bottom:5px;font-weight:500}.post-type-lp_order #order_details .order-data-number{margin:0 0 10px;font-size:1.25rem;font-weight:600}.post-type-lp_order #order_details .payment-method-title{color:#777;font-size:1rem}.post-type-lp_order #order_details .payment-method-title strong{color:#23282d}.post-type-lp_order #order_details .order-data-heading{margin-top:40px;font-size:1rem}.post-type-lp_order #order_details .order-users{display:inline-block}.post-type-lp_order #order_details .order-users .description{margin-top:10px;padding:10px;background:#eee}.post-type-lp_order #order_details .order-data-date .order-date{width:120px}.post-type-lp_order #order_details .order-data-date .order-hour,.post-type-lp_order #order_details .order-data-date .order-minute{width:50px}.post-type-lp_order #order_details .order-data-note{display:inline-block}.post-type-lp_order #order_details .order-data-note .order-note{padding:10px;color:#fff;background-color:#c1a3b6;font-size:.875rem}.post-type-lp_order #order_details .order-items{margin:0;border:1px solid #ccd0d4 !important;background-color:#fff}.post-type-lp_order #order_details .order-items table{width:100%;border-collapse:collapse}.post-type-lp_order #order_details .order-items table thead{margin:0;padding:0}.post-type-lp_order #order_details .order-items table thead tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table thead th{padding:15px;border-bottom:0;color:#999;font-weight:400;text-align:right}.post-type-lp_order #order_details .order-items table thead th:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table thead th:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tbody td,.post-type-lp_order #order_details .order-items table tfoot td{padding:10px;border-bottom:1px solid #ddd;text-align:right}.post-type-lp_order #order_details .order-items table tbody{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tbody tr td{padding:15px}.post-type-lp_order #order_details .order-items table tbody tr td:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tbody tr td:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tfoot{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tfoot tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table tfoot tr:last-child td{padding-top:20px;padding-bottom:20px}.post-type-lp_order #order_details .order-items table tfoot td{padding:10px 15px;padding-bottom:0;border:0;font-size:.875rem;text-align:left}.post-type-lp_order #order_details .order-items table tfoot td:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tfoot td:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table .column-price,.post-type-lp_order #order_details .order-items table .column-total,.post-type-lp_order #order_details .order-items table .column-quantity{width:150px;text-align:left}.post-type-lp_order #order_details .order-items table .row-subtotal td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-subtotal td .order-total,.post-type-lp_order #order_details .order-items table .row-total td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-total td .order-total{font-weight:700}.post-type-lp_order #order_details .order-items table .remove-order-item{outline:0;color:#ccc;text-decoration:none}.post-type-lp_order #order_details .order-items table .remove-order-item .dashicons{font-size:1.25rem}.post-type-lp_order #order_details .order-items table .remove-order-item:hover{color:red}.post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item{display:inline-block}.post-type-lp_order #order-export__button:hover{cursor:pointer}.post-type-lp_order .export-modal.modal{display:none;position:fixed;z-index:10;right:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,0.4)}.post-type-lp_order .export-modal .modal-content{background-color:#fefefe;margin:5% auto;border:1px solid #888;width:60%;position:relative}.post-type-lp_order .export-modal .close{color:#aaa;position:absolute;font-size:28px;font-weight:bold;top:-5px;left:11px}.post-type-lp_order .export-modal .close:hover{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .close:focus{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .panel{display:none}.post-type-lp_order .export-modal .panel.active{display:block}.post-type-lp_order #order-export__tabs.tabs{display:flex;justify-content:space-around;height:40px;box-shadow:0 0 1px 1px rgba(0,0,0,0.2)}.post-type-lp_order #order-export__tabs.tabs>*{width:100%;color:dimgray;height:100%;cursor:pointer;display:flex;justify-content:center;align-items:center}.post-type-lp_order #order-export__tabs.tabs>*:hover:not(.active){background-color:#dcdcdc}.post-type-lp_order #order-export__tabs.tabs>.active{color:white;background-color:#4caf50}.post-type-lp_order #lp-invoice__content{padding:20px 40px 0;margin-bottom:25px}.post-type-lp_order #lp-invoice__content thead th{border-bottom:1px solid #000;border-top:1px solid #000;padding:10px 20px}.post-type-lp_order #lp-invoice__content tbody td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order #lp-invoice__content tfoot td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order .export-options__content{margin-bottom:25px;padding:10px 40px}.post-type-lp_order .export-options{position:relative}.post-type-lp_order .export-options__loading{opacity:0;z-index:-1;visibility:hidden;position:absolute;top:0;right:0;width:100%;background:#fff;left:0;bottom:0;display:flex;align-items:center;justify-content:center}.post-type-lp_order .export-options__loading .spinner{background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;z-index:9;display:inline-block;visibility:visible}.post-type-lp_order .export-options__loading.active{opacity:1;z-index:9;visibility:visible}.post-type-lp_order #lp-invoice__export{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__export:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__update{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__update:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .export-options__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .lp-invoice__body table{border-spacing:0;width:100%}.post-type-lp_order .lp-order-status .dashicons{display:inline-flex !important;align-items:center;font-size:1rem}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination{text-align:right}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li{border:1px solid #2271b1;background:#f6f7f7}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .page-numbers{padding:0 6px}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .current{background:#2271b1;color:#fff !important}#learn-press-toggle-settings-js-css{display:none}#learn-press-toggle-settings-js-css+table{display:none}#learn-press-toggle-settings-js-css:checked+table{display:table}.color-schemas{margin:0 0 20px 20px;float:right}.color-schemas ul{list-style:none;margin:0;padding:0}.color-schemas ul>li>label{font-weight:600;display:block;margin-bottom:10px}.color-schemas .wp-color-picker{width:80px;height:24px;vertical-align:top;margin:0}.color-schemas .wp-picker-holder{position:absolute}.color-schemas .buttons{display:none}.color-schemas table{border-collapse:collapse;position:relative}.color-schemas table td,.color-schemas table th{padding:10px 10px}.color-schemas table tbody{border:1px solid transparent;position:relative}.color-schemas table tbody td,.color-schemas table tbody th{text-align:right;background:#f5f5f5}.color-schemas table tbody tr:first-child td,.color-schemas table tbody tr:first-child th{padding-bottom:0}.color-schemas table:after{content:\"\";position:absolute;top:0;right:0;left:0;bottom:0;background:rgba(255,255,255,0.7)}.color-schemas tfoot td,.color-schemas tfoot th{padding-right:0;padding-left:0}.color-schemas .remove-schema{float:left;color:red}.color-schemas .wp-color-result{margin:0}.color-schemas .clone-schema{display:none}.color-schemas:first-child .remove-schema,.color-schemas:first-child .apply-schema{display:none}.color-schemas:nth-child(2){clear:both}.color-schemas:hover tbody{opacity:1}.color-schemas.current tbody{border-color:#DDD}.color-schemas.current tbody td,.color-schemas.current tbody th{background:rgba(5,215,255,0.26)}.color-schemas.current table:after{display:none}.color-schemas.current .clone-schema{display:inline-block}.wp-picker-container{position:relative}.wp-picker-container .wp-picker-holder{z-index:99999}.lp-install-sample{max-width:600px;margin:0;padding:10px 25px;border:1px solid #ccd0d4;border-radius:4px;background-color:#fff}.lp-install-sample__options{margin-bottom:20px;padding:0 20px;border:1px solid #eee;border-radius:4px}.lp-install-sample__options legend{padding:5px;font-weight:500}.lp-install-sample__buttons{display:flex;margin-top:25px;align-items:center;justify-content:space-between}.lp-install-sample__toggle-options{margin-left:auto;margin-right:10px}.lp-install-sample__uninstall{float:left}.lp-install-sample__response{margin:0;padding:10px;border:2px solid #059601;border-radius:6px}.lp-install-sample__response.fail{border-color:#d85554}.lp-update-db-modal{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-update-db-modal__hidden{display:none !important;visibility:hidden;opacity:0;pointer-events:none}.lp-update-db-modal__overlay{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-update-db-modal__content{display:inline-block;overflow:hidden;z-index:2;width:100%;max-width:510px;border-radius:8px;text-align:right;vertical-align:middle}.lp-update-db-modal__content-header{padding:24px 24px 16px 24px;background-color:#fff}.lp-update-db-modal__content-start{display:flex;flex-direction:flex-start}.lp-update-db-modal__content-icon{display:flex;width:40px;height:40px;margin-left:0;margin-right:0;border-radius:999px;background-color:#fee2e2;justify-content:center;align-items:center;flex:0 0 auto}.lp-update-db-modal__content-icon svg{width:24px;height:24px;color:#dc2626}.lp-update-db-modal__content-icon svg:last-child{color:#258d6c}.lp-update-db-modal__content-icon__success{display:none}.lp-update-db-modal__content-text{margin-right:18px;text-align:right}.lp-update-db-modal__content-text h3{margin:0;font-weight:500}.lp-update-db-modal__content-text p{margin:0;margin-top:10px;color:#999;font-size:.875rem;font-weight:400}.lp-update-db-modal__content-footer{display:flex;flex-direction:row;padding:10px 24px;background-color:#f9fafb;justify-content:flex-end;align-items:center}.lp-update-db-modal__content-footer a{padding:8px 16px;border:1px solid #e5e7eb;border-radius:6px;color:#374151;font-size:.8125rem;font-weight:500;text-decoration:none}.lp-update-db-modal__content-footer a:last-child{margin-right:10px;color:#fff;background-color:#0073aa}.lp-update-db-modal__success .lp-update-db-modal__content-icon{background-color:#def7ec}.lp-update-db-modal__success .lp-update-db-modal__content-icon__error{display:none}.lp-update-db-modal__success .lp-update-db-modal__content-icon__success{display:block}#lp-tool-upgrade-db .wrapper-lp-upgrade-message,#lp-tool-upgrade-db .wrapper-terms-upgrade,#lp-tool-upgrade-db .wrapper-lp-loading{display:none}.terms-upgrade{max-width:500px;margin:0 auto}.terms-upgrade .error{display:none}.lp-modal-footer .learn-press-notice{color:#ff6060;font-weight:500;font-style:italic}.lp-modal-body .lp-skeleton-animation{width:500px;margin:0 20px}.tools-select__data{overflow:hidden}.tools-select__data li{background-color:#fff;border:1px solid #eee;color:#000;display:flex;flex-direction:row;align-items:center;flex:0 0 auto;font-size:.875rem;line-height:1.4em;font-weight:normal;padding:10px;width:100%}.tools-select__data li input{margin:0 0 0 10px}.progressbar__content{width:100%;font-size:.875rem;font-weight:normal;line-height:1.4em;background:#eee;padding:10px 0;display:flex;flex-direction:column;align-items:center;justify-content:center}.progressbar__content span{z-index:9}.progressbar__container{position:relative}.progressbar__value{position:absolute;width:0;height:100%;right:0;top:0;background:#8a2be2}.progressbar__item h4{z-index:9;margin:0}.progressbar__item{width:500px;border-bottom:1px solid #fff}.progressbar__indexs{z-index:9}.lp-tool__message{text-align:center;color:red;padding:10px 0;display:none}.tools-prepare__message{background:#dba617;padding:10px 0;text-align:center;display:none}.lp-admin-notices{background:transparent;display:none;padding:0;border:0;margin:0 !important}.lp-admin-notices .lp-admin-notice{position:relative}.lp-admin-notices .lp-mes-beta-version{background:#4299e1;color:whitesmoke}.lp-admin-notices .lp-mes-beta-version h3,.lp-admin-notices .lp-mes-beta-version a,.lp-admin-notices .lp-mes-beta-version a:visited{color:white}.lp-admin-notices .lp-mes-beta-version .btn-lp-notice-dismiss::before{color:#fff0f6}.tab-lp-admin-notice{margin-right:5px;width:4px;height:4px;background:#ff1919;display:inline-flex;border-radius:999px;vertical-align:middle}.lp-admin-editor{position:relative;margin:0;background-color:#fff}.lp-admin-editor .heading,.lp-admin-editor .lp-box-data-content{padding:0}#learn-press-admin-editor-metabox-settings{margin-top:20px}#course-editor .inside{margin:0;padding:0}#admin-editor-lp_course .lp-course-curriculum .heading{display:flex;flex-direction:row;flex-wrap:nowrap;position:relative;padding:8px 20px;align-items:center;line-height:1}#admin-editor-lp_course .lp-course-curriculum .heading h4{margin:0;font-size:1rem}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections{display:flex;width:40px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.close::before{content:\"\\f140\"}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.open::before{content:\"\\f142\"}#admin-editor-lp_course .lp-course-curriculum .heading .status{visibility:hidden;position:relative;top:5px;margin-right:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .heading .status::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .heading .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_course .lp-course-curriculum .curriculum-sections{margin:0;margin:0 20px 20px 20px;border:1px solid #ddd}#admin-editor-lp_course .lp-course-curriculum .section{margin:0;border-bottom:1px solid #e5e5e5;opacity:1;background:#fff}#admin-editor-lp_course .lp-course-curriculum .section:first-child{border-top:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section{margin-top:1px;border:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section form{margin:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head{background-color:#f4fcff}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable{position:relative;top:1px}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section{position:relative}#admin-editor-lp_course .lp-course-curriculum .section.empty-section::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-head .movable::before{display:inline-block;color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-collapse{display:none}#admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section input{background-color:transparent;box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section input:focus{box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section .section-head{display:flex;position:relative;height:42px;margin:0;padding:0;background-color:#f4fcff;line-height:2.5rem;transition:background 500ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable,#admin-editor-lp_course .lp-course-curriculum .section .section-head .creatable{display:inline-block;width:40px;margin:0;color:#999;font-family:Dashicons;font-size:1.25rem;text-align:center;vertical-align:middle}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable{margin-left:-1px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable::before{content:\"\\f333\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .section-item-counts{line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions{height:100%;color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions>*{display:inline-block;height:100%;text-align:center;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse::before{display:inline-block;width:40px;color:#999;font-family:Dashicons;font-size:1rem;line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.open::before{content:\"\\f343\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.close::before{content:\"\\f347\"}#admin-editor-lp_course .lp-course-curriculum .section .name{width:100%;border:0;color:#777;font-size:1.5rem;font-weight:600;line-height:3.125rem}#admin-editor-lp_course .lp-course-curriculum .section .name:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-collapse{overflow:hidden}#admin-editor-lp_course .lp-course-curriculum .section .section-content{padding:20px;border-top:1px solid #e5e5e5}#admin-editor-lp_course .lp-course-curriculum .section .details{margin-bottom:20px}#admin-editor-lp_course .lp-course-curriculum .section .title-input{padding-right:0;border:0;font-size:1.2em;line-height:1.875rem;flex:1}#admin-editor-lp_course .lp-course-curriculum .section .description-input{width:100%;margin:0;padding:0;border:0;color:#999}#admin-editor-lp_course .lp-course-curriculum .section .description-input:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section-list-items{width:100%;border-collapse:collapse}#admin-editor-lp_course .lp-course-curriculum .section-list-items ul{position:relative;min-height:5px;margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item{display:flex;position:relative;margin:0;border:1px solid #eee;border-bottom-width:0;background:#fff;transition:background 200ms ease-out;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.ui-sortable-helper{border-bottom:1px solid #eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1){background-color:#f7f7f7}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating::before{position:absolute;z-index:2;top:0;left:0;bottom:0;right:0;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing{background-color:#ffeded}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag{height:20px;padding-top:3px;padding-right:6px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;fill:#999;flex:0 0 18px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover{fill:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{display:flex;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title{margin-left:120px;margin-right:2px;flex-grow:1;flex-basis:100%}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title input{color:inherit}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{display:flex;position:absolute;top:0;left:2px;bottom:0;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions{margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions>*{visibility:hidden;margin-left:10px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .edit{text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .remove{color:#a00}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .drag{visibility:visible}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:not(.lp_lesson) .item-actions .actions .preview-item{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item{display:flex;position:relative;border-bottom-width:1px;transition:all 200ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag{display:flex;width:30px;color:#999;font-family:Dashicons;font-size:1rem;vertical-align:middle;cursor:default;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title{display:inline-block;margin:0;flex:1}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus{background-color:#fff}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type{display:inline-block;padding:8px 5px;color:#ccc}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type input{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.current{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type::before{position:relative;top:2px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz{padding:8px 0 8px 6px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.empty-item::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{text-align:left}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a{width:30px;height:30px;color:#999;line-height:1.875rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a:hover{color:#0073aa}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item>a:hover{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul{display:none;position:absolute;z-index:9;top:100%;left:0;width:165px;margin:0;border:1px solid #999;background:#fdfeff;text-align:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li{margin:0;border-bottom:1px solid #eee;text-align:left}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a{display:block;padding:10px 25px;color:#757575;font-size:.75rem;text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover{background:#eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item:hover ul{display:block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .item-actions .actions>*{visibility:visible;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_quiz .icon::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item{position:relative;color:#a2a2a2}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .item-actions{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .icon::before{color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{color:#0085ba;font-size:1.25rem;text-align:center;flex:0 0 29px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon::before{font-family:Dashicons}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input{width:100%;padding:8px 0 8px 10px;border:0;color:inherit;font-size:.875rem;font-weight:600}#admin-editor-lp_course .lp-course-curriculum .section-actions{padding:0 20px 20px 20px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove{display:none;float:left;height:30px;border:1px solid #eee;border-radius:3px;color:#e74c3c;line-height:1.875rem;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .icon{padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .confirm{display:none;padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .confirm{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon{display:none}#admin-editor-lp_course .lp-course-curriculum .ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating{top:40px;right:100px;opacity:.8;background:#a00}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.section-item-counts{margin:0;margin-right:auto;font-size:.75rem;white-space:nowrap}.section-item-counts span{color:#999}#course-editor{margin-bottom:10px}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-right:0}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-right:0}#quiz-editor .inside{margin:0;padding:0}#admin-editor-lp_quiz{margin:0;padding:0;border:0}#admin-editor-lp_quiz form{margin:0}#admin-editor-lp_quiz .lp-box-data-head{display:flex;flex-direction:row;margin:0;padding:6px 20px;align-items:center}#admin-editor-lp_quiz .lp-box-data-head h3{padding:0}#admin-editor-lp_quiz .lp-box-data-head .status{visibility:hidden;position:relative;top:5px;margin-right:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_quiz .lp-box-data-head .status::before{content:\"\\f463\"}#admin-editor-lp_quiz .lp-box-data-head .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions{display:flex;width:40px;height:30px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_quiz .lp-box-data-content{margin:20px;margin-top:0;border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions{border-collapse:collapse;color:#777}@media(max-width:1560px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .fill_in_blanks .question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row{display:flex;flex-direction:row;text-align:center;align-items:center}@media(max-width:1024px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row.question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>*{width:100%;padding:12px 8px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort{position:relative;color:#999;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;flex:0 0 15px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort:hover{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order{padding:12px 0;color:#32373c;font-size:1.2em;text-align:right;flex:0 0 25px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order::after{content:\".\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type{display:inline-flex;position:relative;width:125px;height:32px;padding:0;border-radius:2px;background-color:#eee;box-shadow:0 0 2px rgba(0,0,0,0.22);line-height:2rem;cursor:pointer;flex:0 0 auto;align-items:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a{display:inline-flex;width:100%;padding:0 10px;color:#666;text-align:center;cursor:pointer;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a::after{margin-right:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul{visibility:hidden;position:absolute;z-index:9999;top:100%;left:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;opacity:1;background:#fdfeff;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a{display:block;min-width:110px;padding:10px 20px;color:#757575;line-height:1.25rem;text-align:left;white-space:nowrap;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a:hover{background-color:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li.disabled{opacity:.4;background-color:#fff;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type:hover ul{visibility:visible;opacity:1;pointer-events:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.actions{width:300px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.name{padding-right:5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover>.sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row .actions .lp-box-data-actions{text-align:left !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header{display:none;border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>*{font-weight:bold}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.order::after{content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.actions{padding:12px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings{padding:0 20px;border:1px solid #ddd;border-left:0;border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings>*{padding:20px 0 20px 20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .sort{width:12px;padding:8px 6px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-text{width:calc(100% - 100px);padding-right:0;color:#444;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .order{width:10px;padding:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-correct{width:65px;color:#444;font-weight:600;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions{padding:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions .lp-toolbar-btn{height:42px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr{border:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td{position:static;padding:0 10px;border:0;background:inherit}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort{width:12px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-text{padding-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct{text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr .svg-icon{height:18px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .svg-icon{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper{border-left:0;border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td.sort{border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort i{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort::before{display:inline-block;position:absolute;top:12px;right:4px;font-family:Dashicons;font-size:1.125rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td::after{position:absolute;top:0;left:1px;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-text input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item{border-bottom:1px solid #ddd;background:#f4fcff;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-helper{border-top:1px solid #f1f1f1}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort .fa,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort .fa{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort::after{display:inline-block;position:absolute;right:5px;font-family:Dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-settings{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell{padding:10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input{width:100%;padding:0;border:0;color:#32373c;background:transparent;box-shadow:none;font-size:1.2em;font-weight:normal;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons{display:grid;position:static;z-index:10;height:100%;text-align:left;grid-template-columns:30px 30px 30px 40px;align-items:center;justify-content:end}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons>div a{visibility:hidden}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;z-index:2;top:50%;right:50%;width:28px;height:30px;margin-top:-15px;margin-right:-15px;line-height:1.875rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul{z-index:9}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a{padding:8px 24px;line-height:1.5rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a.remove{border-bottom:1px solid #eee;color:#666}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle{width:40px;height:42px;padding-left:0;font-family:Dashicons;font-size:1.25rem;line-height:2.625rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.open::after{content:\"\\f343\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.close::after{content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions:hover .lp-toolbar-buttons>div a{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings{background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options{padding-left:0;padding-right:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field{margin:0;padding:20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field:nth-child(2n+1){background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-label{margin:0;margin-bottom:10px;color:#666;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .hndle{font-weight:600;cursor:default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle{float:left;position:absolute;top:0;left:0;width:36px;height:36px;line-height:2.25rem;text-align:center;cursor:pointer}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle::after{font-family:Dashicons;font-size:1.125rem;content:\"\\f460\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .quiz-question-options{width:38px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox{min-width:34px;height:34px;line-height:2.625rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .hndle{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .toggle::after{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.sorting_choice .quiz-question-data table.lp-list-options .answer-correct{display:none !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer{margin-top:-1px;border-top:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row{height:auto;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle{display:flex;width:30px;padding:8px 10px 8px 6px;color:#999;font-family:Dashicons;font-size:1.25rem;vertical-align:middle;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle::before{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .order{padding:8px 0;line-height:1.75rem;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question{padding:8px 5px 8px 10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title{display:inline-block;position:relative;min-width:500px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input{width:100%;margin:0;padding:6px 0;border:0;background:transparent;font-size:1.2em;line-height:1.125rem;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{color:#32373c}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input::placeholder{display:inline-block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new{display:inline;position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types{display:none;position:absolute;z-index:9999999;top:100%;left:-2px;width:200px;margin:6px;border:1px solid #999;background-color:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a{display:block;padding:12px 20px;outline:0;color:#757575;box-shadow:none;line-height:1;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a:hover{background:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li.disabled{opacity:.5;background-color:#eee;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button:hover+.question-types{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button+.question-types:hover{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button[disabled=disabled]:hover+.question-types{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .select-item{display:inline}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question button{height:30px;box-shadow:0 1px 0 #ccc !important}#admin-editor-lp_quiz .lp-box-data-content .question-button-actions{text-align:right}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-label{display:none}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-input{margin-right:0}#question-editor .inside{margin:0;padding:0}#admin-editor-lp_question{margin:0;padding:0;border:0;background:#fff}#admin-editor-lp_question form{margin:0}#admin-editor-lp_question .lp-box-data-head{display:flex;flex-direction:row;padding:10px 20px;align-items:center}#admin-editor-lp_question .lp-box-data-head .heading{margin:0;padding:0;flex:1}#admin-editor-lp_question .lp-box-data-head .lp-question-editor{position:relative;margin-right:auto;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a{display:inline-flex;height:32px;padding:0 16px;border:1px solid #999;border-radius:2px;color:#666;line-height:2rem;text-decoration:none;align-items:center;cursor:pointer;user-select:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a::after{margin-right:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul{display:none;position:absolute;z-index:9999;top:100%;left:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;background:#fdfeff}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li{margin:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li:hover,#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.active{background:#eee}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li a{display:block;min-width:110px;padding:10px;color:#757575;font-size:.75rem;text-align:left;white-space:nowrap;text-decoration:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled{opacity:.4}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled a{color:#999;cursor:not-allowed;pointer-events:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul:hover{display:block}#admin-editor-lp_question .lp-box-data-head .lp-question-editor:hover .question-types ul{display:block}#admin-editor-lp_question .lp-box-data-content{padding:0 20px 20px 20px;border:none !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers{width:100%;border:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tr td{padding:0 15px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th{padding:15px;border-bottom:1px solid #ddd;background-color:#eee;font-weight:600}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.answer-text{padding-right:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{width:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort{padding:0 10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order{width:10px;padding:0;text-align:left}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-correct{width:65px;text-align:center}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-text{padding-right:8px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{padding-left:0;text-align:left}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr{color:#444;background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td{background-color:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort{width:15px;padding:0;font-size:1.125rem;text-align:center;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order{font-size:.875rem}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input{width:100%;padding:0;border:0;color:#444;background:transparent;box-shadow:none;font-size:.875rem;font-weight:600;transition:box-shadow .2s ease}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons{z-index:auto}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer{visibility:visible;height:42px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td.sort{border-right:0}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .svg-icon{display:none}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td{position:relative}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .sort::before{display:inline-block;position:absolute;top:8px;right:10px;font-family:\"Dashicons\";content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_question .lp-box-data-content .add-answer{margin:15px 0 0 0}#admin-editor-lp_question.sorting_choice table.list-question-answers .answer-correct{display:none !important}.lp-admin-fib-question-editor,.admin-quiz-fib-question-editor{text-align:right}.lp-admin-fib-question-editor .lp-box-data-content,.admin-quiz-fib-question-editor .lp-box-data-content{margin:0 !important;border:none !important}.lp-admin-fib-question-editor .content-editable,.admin-quiz-fib-question-editor .content-editable{min-height:240px !important;padding:12px 15px;border:2px solid #ddd;border-radius:4px}.lp-admin-fib-question-editor .content-editable .fib-blank,.admin-quiz-fib-question-editor .content-editable .fib-blank{position:relative;color:#2196f3}.lp-admin-fib-question-editor .content-editable .fib-blank::before,.admin-quiz-fib-question-editor .content-editable .fib-blank::before{content:\"#\" attr(data-index) \". \"}.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{min-width:700px;border-collapse:collapse}@media(max-width:1024px){.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{width:100%;min-width:100%}}.lp-admin-fib-question-editor .fib-blanks tbody,.admin-quiz-fib-question-editor .fib-blanks tbody{border-bottom:1px solid #bbb}.lp-admin-fib-question-editor .fib-blanks tbody tr,.admin-quiz-fib-question-editor .fib-blanks tbody tr{background:#eee}.lp-admin-fib-question-editor .fib-blanks tbody tr td,.admin-quiz-fib-question-editor .fib-blanks tbody tr td{padding:5px}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options td,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options td{padding:0}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options ul{display:none;margin:5px 0;padding:20px;border:1px solid #ddd;background:#fff;list-style:none}.lp-admin-fib-question-editor .fib-blanks tbody.open .blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody.open .blank-options ul{display:block}.lp-admin-fib-question-editor .fib-blanks tbody .blank-position,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-position{font-weight:600;text-align:center}.lp-admin-fib-question-editor .fib-blanks tbody .blank-actions,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-actions{text-align:left}.lp-admin-fib-question-editor .fib-blanks tbody:last-child,.admin-quiz-fib-question-editor .fib-blanks tbody:last-child{border:0}#fill-in-blanks-editor{display:flex}#fill-in-blanks-editor .blank-options{flex:0 0 65%}#fill-in-blanks-editor .blanks{width:100%;margin:0}#fill-in-blanks-editor .blanks .blank{margin:0 0 20px 0;padding:20px;border:1px solid #d9e0f1;background:#fbfcff}#fill-in-blanks-editor .blanks .blank label{font-weight:bold}#fill-in-blanks-editor .blanks .blank .blank-content{width:100%;min-height:74px;font-size:1rem}#fill-in-blanks-editor .blanks .blank .blank-words .word{background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks .blank .blank-words .word.correct{background:#00a1e6}#fill-in-blanks-editor .blanks .blank .blank-tip p{font-style:italic}#fill-in-blanks-editor .blanks .blank .button-remove{color:red}#fill-in-blanks-editor .passage-preview{margin-right:20px;padding:15px 20px;border:1px solid #ddd;font-size:1rem;line-height:1.5rem;text-align:justify;flex:1}#fill-in-blanks-editor .passage-preview .blank-input{display:inline-block;position:relative;width:50px;height:16px;margin:-2px 10px;padding:0;border:0;border-bottom:1px dashed #ddd;background:transparent;box-shadow:none;font-size:1rem;vertical-align:middle}#fill-in-blanks-editor .blanks-list{width:100%}#fill-in-blanks-editor .blanks-list textarea{width:100%;min-height:300px;margin-bottom:20px;outline:0;background:#f9f9f9;box-shadow:none;font-size:1.125rem;line-height:1.875rem}#fill-in-blanks-editor .blanks-list code{line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks-list code.correct{background:#00a1e6}#lp-modal-choose-items{display:none;position:fixed;z-index:-1;top:0;left:0;bottom:0;right:0;opacity:0;background-color:rgba(0,0,0,0.5)}#lp-modal-choose-items.show{display:block;z-index:99999999;opacity:1}#lp-modal-choose-items.loading .lp-choose-items ul.list-items::before{display:block;position:absolute;z-index:9;top:0;left:0;bottom:0;right:0;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;background-color:#fff;content:\"\"}#lp-modal-choose-items .lp-choose-items{position:relative;max-width:800px;margin:5% 20% 10% auto;border:1px solid #ddd;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);transition:all 200ms ease-out}#lp-modal-choose-items .lp-choose-items.show-preview .header .preview-title{display:flex;align-items:center}#lp-modal-choose-items .lp-choose-items .header{position:relative}#lp-modal-choose-items .lp-choose-items .header .preview-title{display:none;position:absolute;z-index:10;top:0;left:0;bottom:0;right:0;padding-right:20px;border-bottom:1px solid #ddd;background-color:#fff;font-weight:600}#lp-modal-choose-items .lp-choose-items .header .preview-title h3{margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs{margin:0;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .header .tabs .tab{display:inline-block;position:relative;margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs .tab:not(:last-child)::before{position:absolute;top:50%;left:0;height:44px;margin-top:-22px;border-left:1px solid #ddd;content:\"\"}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active::after{display:inline-block;position:absolute;bottom:-6px;right:50%;width:10px;height:10px;margin-right:-6px;border:1px solid #ddd;border-left:0;border-bottom:0;background:#fff;content:\"\";transform:rotate(-45deg)}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a{color:#0073aa}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a{display:inline-block;height:44px;padding:0 20px;color:#333;font-weight:600;line-height:2.75rem;text-decoration:none}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus{box-shadow:none}#lp-modal-choose-items .lp-choose-items .header .close{display:inline-block;position:absolute;z-index:30;top:0;left:0;padding:12px;font-size:1em;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main{overflow:hidden;position:relative;padding:20px;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .main .section-item{display:block;overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:color 200ms ease-out}#lp-modal-choose-items .lp-choose-items .main .section-item::before{position:relative;top:3px;font-family:Dashicons}#lp-modal-choose-items .lp-choose-items .main .search{margin-bottom:20px;background:transparent}#lp-modal-choose-items .lp-choose-items .main .search input.modal-search-input{width:100%;height:36px;padding:0 14px;font-size:1rem;line-height:2.25rem}#lp-modal-choose-items .lp-choose-items .main .list-items{overflow-y:auto;position:relative;min-height:260px;max-height:460px;margin:0}#lp-modal-choose-items .lp-choose-items .main .list-items li{margin:15px 0;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main .pagination .index{margin-right:20px;line-height:1.75rem}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview{overflow:auto;position:absolute;z-index:2;top:0;left:0;bottom:0;right:0;max-height:420px;padding:20px;background-color:#fff;transform:translate(-100%,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show{transform:translate(0,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li{margin:15px 0}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li:first-child{margin:-10px 0 15px 0}#lp-modal-choose-items .lp-choose-items .footer{padding:20px}body.lp-item-moving{cursor:url(\"..\u002F..\u002Fimages\u002Fclosedhand.cur\") 7 5,default !important}@media screen and (max-width:900px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row{display:block;width:auto;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row>*{width:auto}}#learn-press-reset-course-users,#learn-press-reset-user-courses,#learn-press-reset-user-item{max-width:100%}#learn-press-reset-course-users table,#learn-press-reset-user-courses table,#learn-press-reset-user-item table{width:100%;border-collapse:collapse}#learn-press-reset-course-users .courses-list,#learn-press-reset-user-courses .courses-list,#learn-press-reset-user-item .courses-list{margin:0}#learn-press-reset-course-users input[type=text],#learn-press-reset-user-courses input[type=text],#learn-press-reset-user-item input[type=text]{min-width:300px;height:28px;margin-right:0}#learn-press-reset-course-users .action-reset.dashicons-trash,#learn-press-reset-user-courses .action-reset.dashicons-trash,#learn-press-reset-user-item .action-reset.dashicons-trash{color:red}#learn-press-reset-course-users .action-reset.dashicons-update,#learn-press-reset-user-courses .action-reset.dashicons-update,#learn-press-reset-user-item .action-reset.dashicons-update{-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-assign-course .description{margin-bottom:10px}#learn-press-assign-course label{display:block;margin-bottom:5px}#learn-press-unassigned-course .description{margin-bottom:10px}#learn-press-unassigned-course label{display:block;margin-bottom:5px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}.lp-group-step{border-bottom:1px solid #eee}.lp-group-step h3{padding:0 2em}.lp-group-step label{margin-bottom:5px;font-size:.8em;font-weight:500;font-style:italic}.lp-group-step .lp-item-step{display:flex;position:relative;min-height:35px;margin:0;padding:1em 0 1em 1em;border-top:1px solid #eee;align-items:center;cursor:pointer}.lp-group-step .lp-item-step:hover{background:#eee}.lp-group-step .lp-item-step.running .lp-item-step-left::before{opacity:1}.lp-group-step .lp-item-step.running .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.running::before{display:block;position:absolute;width:0;height:100%;background:#0073aa;content:\"\";opacity:.1;transition:.8s linear}.lp-group-step .lp-item-step.running .progress-bar{opacity:.1}.lp-group-step .lp-item-step.completed .lp-item-step-left::after{opacity:1}.lp-group-step .lp-item-step.completed .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.completed .progress-bar{width:100%;opacity:.1}.lp-group-step .lp-item-step.error .lp-item-step-left::after{opacity:1;color:#d33;content:\"\\f335\"}.lp-group-step .lp-item-step .progress-bar{display:block;position:absolute;top:0;right:0;width:0;height:100%;opacity:0;background:rgba(124,96,217,0.7490196078);transition:.8s linear}.lp-group-step .lp-item-step-left{display:inline-flex;align-items:center;position:relative;padding:0 2em}.lp-group-step .lp-item-step-left::before{display:block;position:absolute;z-index:2;width:1em;height:1em;border:1px solid rgba(0,0,0,0.1);border-top:1px solid #3498db;border-radius:50%;opacity:0;content:\"\";-webkit-animation:lp-rotating .8s linear infinite;animation:lp-rotating .8s linear infinite}.lp-group-step .lp-item-step-left::after{position:absolute;z-index:1;right:23px;opacity:0;color:#4caf50;font-family:Dashicons;font-size:1.5em;content:\"\\f147\"}.lp-group-steps-done{display:none}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media screen and (max-width:782px){.learn-press-dropdown-pages .select2-container{vertical-align:top}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:31px}.learn-press-dropdown-pages .select2-selection__rendered{line-height:31px !important}#learn-press-advertisement{margin:0 12px;padding-bottom:0}#learn-press-advertisement .slider-controls{bottom:40px}}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-admin-statistics-tab-content{box-sizing:border-box;max-width:100%}.lp-admin-statistics-tab-content .btn-group{display:flex;margin:20px 0;gap:10px;flex-direction:row;flex-wrap:wrap}.lp-admin-statistics-tab-content .btn-group button.btn-filter-time{border:1px solid #284bca;color:#000;padding:10px 24px;cursor:pointer;background:#fff}.lp-admin-statistics-tab-content .btn-group .btn-filter-time.active{background:#284bca;color:#fff;border:1px solid #284bca}.lp-admin-statistics-tab-content .custom-filter-time{display:none}.lp-admin-statistics-tab-content .statistics-content{background:white;border:1px solid #d9d9d9;padding:22px}.lp-admin-statistics-tab-content .statistics-content .statistics-group{display:flex;justify-content:space-between;flex-direction:row;flex-wrap:wrap;gap:10px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item{border:1px solid #000;color:#000;padding:15px 30px;display:flex;flex-direction:column;text-align:center;width:100%;max-width:150px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-title{font-size:16px;line-height:1.2}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-count{font-size:24px;line-height:1.2;font-weight:700}.lp-admin-statistics-tab-content .statistics-content .statistics-title{color:#000;text-align:center;font-size:24px;font-style:normal;font-weight:700;line-height:normal;text-transform:capitalize}.lp-admin-statistics-tab-content .statistics-content .statistics-chart-wrapper{padding:10px 30px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;gap:20px;margin-top:20px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50{flex:1}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50:first-child{border-left:1px solid #d9d9d9}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics li{font-size:16px;line-height:1.2;font-weight:400}.lp-admin-statistics-tab-content .statistics-content .top-course-analytics-title{margin-top:0;font-size:24px;line-height:1.2;font-weight:700}table.lp-material--table{border-collapse:collapse;width:100%}table.lp-material--table td,table.lp-material--table th{border:1px solid #ddd;text-align:right;padding:8px}table.lp-material--table thead.hidden{display:none}table.lp-material--table td.sort{cursor:move}table.lp-material--table tr:nth-child(even){background-color:rgba(221,221,221,0.2509803922)}.lp-material--field-wrap{display:flex;flex-direction:row;align-items:center;padding-block:5px}.lp-material--field-wrap label{min-width:70px}.lp-material--group{margin-top:10px;padding:10px;border:1px solid #dedede;border-radius:10px;box-shadow:-2px 2px rgba(180,180,180,0.2)}.lp-material-btn-wrap{margin-bottom:10px}.lp-material-btn-wrap.loading::before:before,#btn-lp--save-material.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.button.lp-material--delete{color:white;border-color:red;background:red;vertical-align:top}.lp-material--field-wrap.field-action-wrap{display:flex;justify-content:space-between}.lp-meta-box .lp-material--field-wrap input{width:100%}#available-to-upload{font-weight:bold}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-right:1px solid var(--lp-border-color,#e2e0db);padding-right:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-right:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 20px 0 45px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:16px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-right:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-right:16px;padding-left:16px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 20px 12px 45px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;left:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-right:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-right linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:left;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-right:0;margin-left:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-ico svg{width:20px;height:20px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}[class*=wp-block-learnpress] img,.block-editor-block-list__block img{max-width:100%;height:auto}[class*=wp-block-learnpress] .info-meta-item,.block-editor-block-list__block .info-meta-item{display:flex;gap:4px;flex-wrap:wrap}[class*=wp-block-learnpress] .info-meta-item i,.block-editor-block-list__block .info-meta-item i{color:var(--lp-primary-color,#ffb606)}[class*=wp-block-learnpress] .info-meta-left,.block-editor-block-list__block .info-meta-left{display:flex;gap:8px;align-items:center;letter-spacing:0}[class*=wp-block-learnpress] a,.block-editor-block-list__block a{text-decoration:none}.wp-block-learnpress-course-image{overflow:hidden}.wp-block-learnpress-course-instructor>div>*,.wp-block-learnpress-course-categories>div>*{display:inline;vertical-align:middle}.wp-block-learnpress-breadcrumb ul{margin:0 auto;list-style:none;padding:0}.wp-block-learnpress-breadcrumb li{display:inline-block;margin:0}.wp-block-learnpress-breadcrumb i{margin:0 8px}.wp-block-learnpress-breadcrumb a{color:inherit}.courses-btn-load-more{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);font-size:var(--lp-font-size-base,1em);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center;cursor:pointer;margin:20px auto}.courses-btn-load-more:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}.lp-modal-dialog .lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp-modal-dialog .lp_allow_repurchase_select>ul{margin:0;padding:0;list-style:none}.lp-modal-dialog .lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp-modal-dialog .lp-button{cursor:pointer;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-modal-dialog .lp-button.loading{pointer-events:none;opacity:.8}.lp-modal-dialog .lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-modal-dialog .lp-button:hover{border-color:var(--lp-primary-color,#ffb606);color:#fff;background:var(--lp-primary-color,#ffb606)}.lp-button.btn-finish-course{cursor:pointer;width:100%;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.lp-button.btn-finish-course:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.lp-button.btn-finish-course.loading{pointer-events:none;opacity:.8}.lp-button.btn-finish-course.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.c-gap-4{column-gap:4px}.wp-block-learnpress-course-feature-review .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}[class^=wp-block-learnpress] .extra-box ul{margin:0 20px 0 0;padding:0}.wp-block-learnpress-course-button-read-more,.wp-block-learnpress-course-button{cursor:pointer;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-button-read-more:hover,.wp-block-learnpress-course-button:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.wp-block-learnpress-course-button-read-more.loading,.wp-block-learnpress-course-button.loading{pointer-events:none;opacity:.8}.wp-block-learnpress-course-button-read-more.loading:before,.wp-block-learnpress-course-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@media(min-width:992px){.lp-block-course-sidebar{margin-top:-260px;margin-block-start:-260px !important}}.wp-block-learnpress-item-search .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}.wp-block-learnpress-item-search .search-course input[name=s]{display:block;width:100%;margin-right:30px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:focus{outline:0}.wp-block-learnpress-item-search .search-course button{position:absolute;top:0;left:10px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none}.wp-block-learnpress-item-search .search-course button:focus{outline:0}.wp-block-learnpress-item-search .search-course button i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-search .search-course button.clear{display:none}.wp-block-learnpress-item-search .search-course button.clear::before{content:\"\\f00d\"}.wp-block-learnpress-course-material .lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);margin-top:20px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-material .course-material-table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.wp-block-learnpress-course-material .course-material-table tbody tr:nth-child(even) td,.wp-block-learnpress-course-material .course-material-table .learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.wp-block-learnpress-course-material .course-material-table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.wp-block-learnpress-course-material .course-material-table th,.wp-block-learnpress-course-material .course-material-table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}.wp-block-learnpress-course-material .course-material-table th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-weight:600;text-align:center}.wp-block-learnpress-course-material .course-material-table th:first-child{text-align:right}.wp-block-learnpress-course-material .course-material-table tr td{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.wp-block-learnpress-course-material .course-material-table tr td:not(:first-child){text-align:center}.wp-block-learnpress-course-material .course-material-table tfoot td{text-align:right;font-weight:bold}.wp-block-learnpress-course-material .course-material-table.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}.wp-block-learnpress-item-hidden-sidebar .section-toggle{justify-content:flex-end;flex:0}.wp-block-learnpress-item-hidden-sidebar .section-toggle i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-close .back-course{padding:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}.wp-block-learnpress-item-close .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){.wp-block-learnpress-item-close .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}.wp-block-learnpress-item-close .back-course:hover{background:transparent;opacity:1}}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:after{display:none}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:focus{border:0;outline:0}.wp-block-learnpress-item-progress .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}.wp-block-learnpress-item-progress .number{padding-left:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.86)}.wp-block-learnpress-item-progress .learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color,#ffb606);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color,#ffb606);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.wp-block-learnpress-item-progress .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.wp-block-learnpress-item-navigation .course-item-nav{display:flex;justify-content:space-between}.wp-block-learnpress-item-navigation .course-item-nav .prev,.wp-block-learnpress-item-navigation .course-item-nav .next{display:flex;line-height:3.125em;flex:1;position:relative}.wp-block-learnpress-item-navigation .course-item-nav .prev span,.wp-block-learnpress-item-navigation .course-item-nav .next span{display:block;font-weight:bold}.wp-block-learnpress-item-navigation .course-item-nav .prev a,.wp-block-learnpress-item-navigation .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666);color:#999}.wp-block-learnpress-item-navigation .course-item-nav .prev::before,.wp-block-learnpress-item-navigation .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover a,.wp-block-learnpress-item-navigation .course-item-nav .prev:hover::before,.wp-block-learnpress-item-navigation .course-item-nav .next:hover a,.wp-block-learnpress-item-navigation .course-item-nav .next:hover::before{color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover .course-item-nav__name,.wp-block-learnpress-item-navigation .course-item-nav .next:hover .course-item-nav__name{display:block}.wp-block-learnpress-item-navigation .course-item-nav .next{text-align:left;flex-direction:row-reverse}.wp-block-learnpress-item-navigation .course-item-nav .next::before{margin-right:10px;content:\"\\f0da\"}.wp-block-learnpress-item-navigation .course-item-nav .next[data-nav=next]{justify-content:flex-end}.wp-block-learnpress-item-navigation .prev::before{margin-left:10px;content:\"\\f0d9\"}.wp-block-learnpress-item-navigation .prev .course-item-nav__name{left:auto;right:-30px}.wp-block-learnpress-item-navigation .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){.wp-block-learnpress-item-navigation .prev .course-item-nav__name{right:15px}}.wp-block-learnpress-item-navigation .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){.wp-block-learnpress-item-navigation .course-item-nav__name{top:-25px;left:15px;right:auto}}.wp-block-learnpress-item-curriculum .lp-course-curriculum__title,.wp-block-learnpress-item-curriculum .course-curriculum-info,.wp-block-learnpress-item-curriculum .course-section__description{display:none}.wp-block-learnpress-item-content .content-item-wrap{padding:0}.wp-block-learnpress-item-curriculum .lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1;flex-direction:row}.wp-block-learnpress-list-courses .learn-press-courses .course{width:unset;padding:0}.wp-block-learnpress-course-featured .course-featured{margin-bottom:0;background-color:inherit;color:inherit;padding:0}.courses-order-by,.block-courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by,.woocommerce-js .block-courses-order-by{background-position-x:calc(100% - (100% - 10px))}.courses-order-by:focus,.block-courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.course-img img{display:block}.block-search-courses{display:flex;flex:1;margin-bottom:0}.block-search-courses input{width:100%;max-width:240px;margin:0 0 0 4px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.block-search-courses input::-webkit-input-placeholder{color:#999}.block-search-courses input::-moz-placeholder{color:#999}.block-search-courses input:-ms-input-placeholder{color:#999}.block-search-courses input:-moz-placeholder{color:#999}.block-search-courses input::placeholder{color:#999}.block-search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.block-search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.block-search-courses button i{font-size:1.2em;line-height:1.2}.block-search-courses button:focus{outline:0}.block-search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}@media(max-width:767px){.wp-block-learnpress-course-search{width:100%}.wp-block-learnpress-course-search input{min-width:240px;max-width:unset}}.course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.course-filter-btn-mobile{display:none}}ul.wp-block-learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}ul.wp-block-learn-press-courses[data-layout=grid]{--columns:3;--gap:1.25em;--min-width:200px;grid-gap:var(--gap);display:grid;grid-template-columns:repeat(auto-fill,minmax(max(var(--min-width),100% \u002F var(--columns) - var(--gap) *(var(--columns) - 1) \u002F var(--columns)),1fr));margin-bottom:2.25em}@media(max-width:768px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:min(var(--columns),2)}}@media(max-width:480px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:1}}.wp-block-learnpress-course-price .course-price .free,.wp-block-learnpress-course-price .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.wp-block-learnpress-course-price .course-price .origin-price{margin-left:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.wp-block-learnpress-course-button-read-more button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button-read-more button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-course-button .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.courses-order-by-wrapper .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by-wrapper .courses-order-by{background-position-x:calc(100% - (100% - 10px))}.courses-order-by-wrapper .courses-order-by:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.wp-block-learnpress-course-filter h3{margin-bottom:20px;margin-top:0}.wp-block-learnpress-course-filter .filter .line{height:15px;background:#ccc;margin-bottom:10px}.wp-block-learnpress-course-search-filter,.wp-block-learnpress-course-level-filter,.wp-block-learnpress-course-author-filter,.wp-block-learnpress-course-price-filter,.wp-block-learnpress-course-categories-filter,.wp-block-learnpress-course-tag-filter{margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ccc}.wp-block-learnpress-course-search-filter .lp-course-filter__field,.wp-block-learnpress-course-level-filter .lp-course-filter__field,.wp-block-learnpress-course-author-filter .lp-course-filter__field,.wp-block-learnpress-course-price-filter .lp-course-filter__field,.wp-block-learnpress-course-categories-filter .lp-course-filter__field,.wp-block-learnpress-course-tag-filter .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.wp-block-learnpress-course-search-filter label,.wp-block-learnpress-course-level-filter label,.wp-block-learnpress-course-author-filter label,.wp-block-learnpress-course-price-filter label,.wp-block-learnpress-course-categories-filter label,.wp-block-learnpress-course-tag-filter label{flex:1}.wp-block-learnpress-course-search-filter span,.wp-block-learnpress-course-level-filter span,.wp-block-learnpress-course-author-filter span,.wp-block-learnpress-course-price-filter span,.wp-block-learnpress-course-categories-filter span,.wp-block-learnpress-course-tag-filter span{color:#999}.wp-block-learnpress-course-search-filter .search-box{width:100%;height:40px;border:1px solid #ccc;border-radius:5px;margin-top:12px}.wp-block-learnpress-button-submit-filter,.wp-block-learnpress-button-reset-filter{box-sizing:border-box;text-transform:capitalize;border:1px solid #ccc;border-radius:4px;background:white;float:right;text-align:center;width:calc(50% - 8px);padding:8px 30px}.wp-block-learnpress-button-submit-filter{margin-left:4px}.wp-block-learnpress-button-reset-filter{margin-right:4px}.block-editor-block-list__block img{display:block}.block-editor-block-list__block .learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}.block-editor-block-list__block a{text-decoration:none}.block-editor-block-list__block .c-gap-4{column-gap:4px}.block-editor-block-list__block .lp-course-curriculum .course-section .course-item__right{color:inherit}.block-editor-block-list__block.wp-block-learnpress-course-title>*{margin-top:0}a.block-editor-block-list__block.wp-block-learnpress-course-button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}a.block-editor-block-list__block.wp-block-learnpress-course-button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 10px 0 0 !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;left:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-left:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;right:80%;transform:translateX(50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-left:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:right}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-right:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;right:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-left:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-left:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-left:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;left:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;left:0;transform:translateX(5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:right;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-left:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:left}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-right:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;right:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(-30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(-60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(-90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(-120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(-150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(-180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(-210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(-240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(-270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(-300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(-330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:right}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(-90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:left}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:right}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:right}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:right}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.button.disabled{pointer-events:none}.learnpress .postbox .rwmb-meta-box{margin-top:10px}.learnpress #field-_lp_requirements .rwmb-text-list-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{clear:none;position:relative;border:1px solid #ddd;border-radius:4px}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:none}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-advanced{width:calc(100% - 65px);padding:7px 10px;border:0;color:#777;background:transparent;box-shadow:none;line-height:1}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:50%;left:41px;margin-top:-10px;border-radius:unset;color:#999;background:transparent;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone i{font-size:1.25rem}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone:hover{color:#e74c3c}.learnpress #field-_lp_requirements .rwmb-text-list-clone::after,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{display:inline-block;position:absolute;top:50%;left:10px;margin:8px 0 0 0;margin-top:-9px;color:#999;font-family:Dashicons;font-size:1.25rem;content:\"\\f333\"}.learnpress #field-_lp_requirements .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_key_features .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_faqs .rwmb-text-list-clone:focus-within{border-color:#0085ba}.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list:focus{border-color:#0085ba}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{position:relative;padding:0 0 16px 0}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:block;padding:10px 12px 0 10px}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list{width:calc(100% - 25px);margin:0 13px 0 13px;border:1px solid #ddd;vertical-align:top}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:20px;left:36px;margin-top:-10px;color:#999;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{top:20px}.lp-notice,.learn-press-notice{position:relative;padding:12px;margin:0}.lp-notice h4,.learn-press-notice h4{margin:10px 0 15px}.lp-notice p,.learn-press-notice p{margin:0 0 5px 0;padding:0 2px}.lp-notice .lp-message-dismiss,.learn-press-notice .lp-message-dismiss{position:absolute;top:12px;left:12px}.lp-notice .notice-dismiss,.learn-press-notice .notice-dismiss{position:absolute;top:0;left:1px;margin:0;padding:9px;border:0;outline:0;color:#72777c;background:100% 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;cursor:pointer}.lp-notice .notice-dismiss::before,.learn-press-notice .notice-dismiss::before{display:block;width:20px;height:20px;color:#72777c;background:100% 0;font:normal 16px\u002F20px dashicons;text-align:center;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.learn-press-dropdown-pages{display:inline-block}.learn-press-dropdown-pages .list-pages-wrapper{display:flex;align-items:center;gap:10px}.lp-notice-update-database{border:1px solid rebeccapurple;border-right-color:red;border-radius:3px;color:white;background:rebeccapurple}.lp-notice-update-database.do-updating::before{display:inline-block;float:right;margin:9px -5px 0 5px;color:#2773aa;font-family:dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#adminmenu .update-plugins.lp-plugins-count{padding:0 5px}.search-box input[name=post-search-author],.search-box .select2-container{min-width:200px;margin:0;vertical-align:top}.learn-press-notice-assigned-item{color:red}.learnpress .actions{margin:0}#learn-press-syncs li{position:relative}#learn-press-syncs li.syncing,#learn-press-syncs li.synced{padding-right:24px}#learn-press-syncs li.syncing input[type=checkbox],#learn-press-syncs li.synced input[type=checkbox]{display:none}#learn-press-syncs li.syncing::after{content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-syncs li.synced::after{color:#2773aa;content:\"\\f147\"}#learn-press-syncs li::after{display:block;position:absolute;top:0;right:-3px;width:24px;height:24px;font-family:dashicons;font-size:1.1875rem;line-height:1.5rem;text-align:center}#learn-press-updater .updater-progress{position:relative;margin:0 2px}#learn-press-updater .updater-progress ul{display:flex;position:relative;height:5px;background:#eee}#learn-press-updater .updater-progress ul li{position:relative;margin:0;flex:1}#learn-press-updater .updater-progress ul li::after{display:none;position:absolute;top:-30px;left:0;padding:3px 5px;border-radius:3px;color:#fff;background:#ddd;font-size:.75rem;content:attr(data-version)}#learn-press-updater .updater-progress ul li::before{content:\"\"}#learn-press-updater .updater-progress ul li:last-child::after{_display:block}#learn-press-updater .updater-progress ul::after{position:absolute;top:0;right:0;width:0;height:20px}#learn-press-updater .updater-progress .updater-progress-status{position:absolute;top:0;right:0;width:0;height:5px;background:#5bc4f9;-webkit-transition:width .25s;-moz-transition:width .25s;-ms-transition:width .25s;-o-transition:width .25s;transition:width .25s}#learn-press-updater .updater-progress .updater-progress-status::before{position:absolute;top:-20px;left:0;padding:0 5px;border-radius:3px;color:#fff;background:#5bc4f9;font-size:.75rem;_content:attr(data-value) \"%\"}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation{overflow:hidden;position:absolute;top:0;right:0;width:100%;height:5px;background:#5bc4f9}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation:not(.completed)::after{position:absolute;height:5px;background:#8dd9ff;content:\"\";-webkit-animation:animation4 1.5s ease-out infinite;-moz-animation:animation4 1.5s ease-out infinite;-ms-animation:animation4 1.5s ease-out infinite;-o-animation:animation4 1.5s ease-out infinite;animation:animation4 1.5s ease-out infinite}#learn-press-updater .updating-message{color:#a24666}#learn-press-updater .completed-message{color:#3c8eb7}#learn-press-updater{display:none}.select2 .select2-search.select2-search--inline{margin-bottom:0}.select2 .select2-selection .select2-selection__choice{margin-top:4px;margin-bottom:0}.select2 .select2-selection.select2-selection--multiple{min-height:30px}.list-pages-wrapper .select2-container--default .select2-selection--single .select2-selection__clear{margin:0}.edit-post-layout__metaboxes .rwmb-label>label{color:#666;font-size:small;font-weight:bold}body.post-type-lp_question #button-new-question{display:inline-block;position:relative}body.post-type-lp_question #button-new-question div{display:none;position:absolute;z-index:9999;top:100%;right:0;min-width:100px;margin:0 -1px 0 0;border:1px solid #999;background:white;font-weight:400}body.post-type-lp_question #button-new-question div a{display:block;min-width:100px;margin:0;padding:10px 20px;color:#666;white-space:nowrap;text-decoration:none}body.post-type-lp_question #button-new-question div a:hover{background:#eee}body.post-type-lp_question #button-new-question>a{position:relative;padding-left:15px;text-decoration:none}body.post-type-lp_question #button-new-question>a::after{display:inline-block;position:absolute;top:6px;left:0;width:0;height:0;margin:0;border:5px solid transparent;border-top-color:#0f7aae;content:\"\"}body.post-type-lp_question #button-new-question:hover div{display:block}.lp-label{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.lp-label.success{background:#4caf50}.lp-label.error{background:red}.lp-label.warning{background:#ffc107}.lp-label .far,.lp-label .fas,.lp-label .fa{display:inline-block;margin-left:5px}.lp-admin-profile-courses .column-results{width:200px}.lp-admin-profile-courses .course-results-progress .lp-progress-row{margin:0 0 20px 0}.lp-admin-profile-courses .course-results-progress .lp-course-progress-heading{margin:0 0 5px 0;line-height:1}.lp-admin-profile-courses .learn-press-progress{overflow:hidden;position:relative;width:150px;height:6px;border-radius:3px}.lp-admin-profile-courses .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.lp-admin-profile-courses .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.lp-notify-action-wrapper{position:fixed;bottom:5%;z-index:10000;right:50%;padding:10px;transition:all .5s;transform:translateY(500%);display:flex;flex-direction:column;gap:5px}.lp-notify-action-wrapper.show{display:flex;transform:translateY(0)}.lp-notify-action-wrapper .lp-notify-action{box-shadow:0 4px 25px 1px rgba(0,0,0,0.25);background:#202937;padding:0 20px;border-radius:3px;min-width:200px;transition:all .8s}.lp-notify-action-wrapper .lp-notify-action.clone{display:none}.lp-notify-action-wrapper .lp-notify-action__success{display:none;color:#01a401}.lp-notify-action-wrapper .lp-notify-action__success.show{display:block}.lp-notify-action-wrapper .lp-notify-action__error{display:none;color:#f44336;font-weight:bold}.lp-notify-action-wrapper .lp-notify-action__error.show{display:block}\n\\ No newline at end of file\n+@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}.lp-tom-select{min-width:150px}.lp-tom-select.plugin-dropdown_input .dropdown-input{width:95%;min-width:auto;border:1px solid #2271b1}.lp-tom-select[multiple]{display:block;height:36px !important;border:1px solid #d0d0d0}.lp-tom-select.ts-wrapper{min-width:200px;width:fit-content}.lp-tom-select.ts-wrapper dropdown-active .ts-control input.dropdown-input{border-color:#d0d0d0}.lp-tom-select.ts-wrapper input.dropdown-input{margin:0 auto 5px;padding:0 8px;box-shadow:none}.lp-tom-select.ts-wrapper.multi.has-items .ts-control{padding:3px 3px 3px 0}.lp-tom-select.ts-wrapper .ts-control{min-height:35px;padding:4px}.lp-tom-select.ts-wrapper .ts-control input[type=text]{min-width:30px}.lp-tom-select.ts-wrapper .ts-control li{margin:0 0 3px 5px;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-control .item{margin:0 0 2px 5px;padding:1px 2px;background:#eee;border-radius:var(--lp-border-radius)}.lp-tom-select.ts-wrapper .ts-dropdown{border:1px solid #d0d0d0;padding-top:5px;border-radius:3px;margin-top:-1px}.lp-tom-select.ts-wrapper .ts-dropdown .spinner{visibility:visible}.lp-tom-select.ts-wrapper .ts-dropdown .spinner::after{content:\"\";border:0}.lp-tom-select .dropdown-input-wrap{display:flex}.lp-toolbar-buttons{position:relative;z-index:10;height:50px}.lp-toolbar-buttons .lp-toolbar-btn{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn a,.lp-toolbar-buttons .lp-toolbar-btn span{outline:0;color:#666;box-shadow:none}.lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;top:50%;right:50%;width:30px;height:30px;margin-top:-15px;margin-right:-15px;line-height:1.875rem;text-align:center}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{cursor:ns-resize}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-move span{color:var(--lp-primary-color)}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove{cursor:pointer}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover a,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-remove:hover span{color:#e74c3c}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle .dashicons-arrow-down-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-up-alt2{display:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-toggle.closed .dashicons-arrow-down-alt2{display:inline-block}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown{color:#000}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul{display:none;position:absolute;top:100%;left:0;margin:0;border:1px solid #999;background:#fdfeff}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li{margin:0;list-style:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a{display:block;margin:0;padding:3px 8px;color:#757575;font-size:.8em;text-align:left;white-space:nowrap;text-decoration:none}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li a:hover{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-toolbar-btn-dropdown ul li.active a{background:#eee}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover{_background:#f5f5f5}.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled .lp-btn-icon,.lp-toolbar-buttons .lp-toolbar-btn.lp-btn-disabled:hover .lp-btn-icon{color:#666}.lp-toolbar-buttons .lp-toolbar-btn:hover{display:inline-block;background:0}.lp-toolbar-buttons .lp-toolbar-btn:hover .lp-btn-icon{color:#444}.lp-toolbar-buttons .lp-toolbar-btn:hover ul{display:block}.lp-toolbar-buttons .lp-toolbar-btn:hover ul:hover{display:block}.column-content-actions.lp-toolbar-buttons{width:30px;padding:0;white-space:nowrap}.learn-press-box-data{position:relative;margin:20px 0 0 0;border:1px solid #ddd}.learn-press-box-data .lp-box-data-head{padding:10px 15px;background:#fff}.learn-press-box-data .lp-box-data-head h3{margin:0;padding:15px;font-size:1em}.learn-press-box-data .lp-box-data-head .lp-box-data-actions{float:left;position:relative;z-index:10}.learn-press-box-data .lp-box-data-head .lp-box-data-actions .lp-btn{display:inline-block;width:30px;height:50px;line-height:2.875rem;text-align:center;vertical-align:middle}.learn-press-box-data .lp-box-data-head .lp-box-data-actions::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-head::after{display:block;clear:both;content:\"\"}.learn-press-box-data .lp-box-data-content{padding:15px;border-top:1px solid #ddd;background:#fff}.learn-press-box-data .lp-box-data-foot{padding:15px}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-up-alt2{display:none}.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down,.learn-press-box-data.closed .lp-btn-toggle .dashicons-arrow-down-alt2{display:inline-block}.learn-press-box-data.closed .lp-box-data-content{display:none}.lp-list-options{width:100%;border-collapse:collapse}.lp-list-options th,.lp-list-options td{padding:10px 15px;border-top:1px solid #ddd;background:#f5f5f5}.lp-list-options thead th{text-align:right}.lp-list-options tbody tr td{padding:0 15px;background:#f4fcff}.lp-list-options tbody tr td.lp-toolbar-buttons{_overflow:hidden;position:relative;width:30px;height:42px;white-space:nowrap}.lp-list-options tbody tr td.lp-toolbar-buttons .lp-toolbar-btn{visibility:hidden;position:relative;height:43px;margin-top:-4px;margin-bottom:-4px}.lp-list-options tbody tr:nth-child(odd) td{background:#fff}.lp-list-options tbody tr:hover td.lp-toolbar-buttons .lp-toolbar-btn{visibility:visible}.lp-list-options tbody td{text-align:right}.lp-list-options tbody td input[type=text]{width:100%}.lp-list-options tbody td input[type=text][value=\"\"]{font-style:italic}.lp-list-options tbody td.column-content-answer_correct{width:125px}.lp-list-options tbody td.lp-remove-list-option,.lp-list-options tbody td.lp-move-list-option{width:20px;padding:0;text-align:center}.lp-list-options tbody td.lp-remove-list-option a,.lp-list-options tbody td.lp-move-list-option a{visibility:hidden;color:#999}.lp-list-options tbody td.lp-remove-list-option:hover,.lp-list-options tbody td.lp-move-list-option:hover{background:#dbf5ff}.lp-list-options tbody td.lp-move-list-option{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option a{cursor:ns-resize}.lp-list-options tbody td.lp-move-list-option:hover a{color:var(--lp-primary-color)}.lp-list-options tbody td.lp-remove-list-option{cursor:pointer}.lp-list-options tbody td.lp-remove-list-option:hover a{color:#e74c3c}.lp-animation{-webkit-animation:spin 4s linear infinite;-moz-animation:spin 4s linear infinite;animation:spin 4s linear infinite}.lp-ajax-search{display:inline-block;position:relative;z-index:999999}.lp-ajax-search .lp-search-term{min-width:300px;height:28px;margin:0;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus{outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-term:focus:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.lp-ajax-search .lp-search-results{position:absolute;top:100%;width:100%;margin:-1px 0 0 0;border:1px solid #ddd;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-ajax-search .lp-search-results .lp-search-items{overflow:auto;max-height:300px;margin:0}.lp-ajax-search .lp-search-results .lp-search-items li{margin:0}.lp-ajax-search .lp-search-results .lp-search-items li label{display:block;padding:8px 10px;border-bottom:1px solid #f3f3f3}.lp-ajax-search .lp-search-results .lp-search-items li label input{float:right;margin-top:1px;margin-left:-100%}.lp-ajax-search .lp-search-results .lp-search-items li label span{display:inline-block;margin-right:25px}.lp-ajax-search .lp-search-results .lp-search-items li label span a.lp-add-item{visibility:hidden;margin-right:10px}.lp-ajax-search .lp-search-results .lp-search-items li.active{background:#dbf5ff}.lp-ajax-search .lp-search-results .lp-search-items li:hover{color:#fff;background:#0085ba}.lp-ajax-search .lp-search-results .lp-search-items li:hover a.lp-add-item{visibility:visible}.lp-ajax-search .lp-search-results .lp-search-actions{margin:0;padding:10px;border-top:1px solid #ddd}#learn-press-ajax-search-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;width:100%;height:100%;opacity:0}.update-overlay{position:fixed;z-index:99999;top:0;right:0;width:100%;height:100%;background:rgba(255,255,255,0.5)}#course-editor.ajax-search #learn-press-ajax-search-overlay{display:block}#course-editor.ajax-search .lp-ajax-search{z-index:100000}.advanced-list{width:100%;min-width:200px;border-radius:var(--lp-border-radius);background:#fff;list-style:none}.advanced-list li{display:inline-block;margin:0 0 5px 5px;padding:3px 8px;background:#eee;border-radius:var(--lp-border-radius)}.advanced-list li .remove-item{display:inline-block;margin-left:5px;line-height:1;vertical-align:middle;text-decoration:none;cursor:pointer}.advanced-list li .remove-item:hover{color:#0085ba}.advanced-list li .remove-item::before{font-family:dashicons;text-decoration:none;content:\"\\f335\"}.advanced-list li span{display:inline-block}.advanced-list.locked .remove-item{display:none}.advanced-list::after{display:block;clear:both;content:\"\"}.lp-label-counter{display:inline-block;height:20px;padding:0 10px;border-radius:20px;color:#fff;background:#2196f3;font-weight:bold;line-height:1.25rem}.lp-label-counter.disabled{background:#ddd}@-moz-keyframes spin{100%{-moz-transform:rotate(-360deg)}}@-webkit-keyframes spin{100%{-webkit-transform:rotate(-360deg)}}@keyframes spin{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.rwmb-duration{border:1px solid #ddd}ul .clearfix{clear:both;height:0;opacity:0}.clearfix-after::after{display:block;clear:both;height:0;opacity:0;content:\"\"}.lp-button{padding:8px 16px;border:1px solid #e5e7eb;border-radius:var(--lp-border-radius);color:#374151;font-size:.9em;font-weight:500;text-decoration:none;cursor:pointer}@font-face{font-family:\"lp-icon\";src:url(\"..\u002F..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=166\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-icon-course-builder{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}@-moz-keyframes lp-spinner{100%{-moz-transform:rotate(-360deg)}}@-webkit-keyframes lp-spinner{100%{-webkit-transform:rotate(-360deg)}}@keyframes lp-spinner{100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-modal-choose-items-open{overflow:hidden}.lp-modal-search{height:100%;padding:20px;color:#777;background-color:red}.lp-modal-search li.selected{display:none}#learn-press-message-box-block{position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;opacity:.8;background-color:#000}#learn-press-message-box-window{position:fixed;z-index:100000;top:0;left:0;bottom:0;right:0;color:#fff;text-align:center}#message-box-wrap{display:inline-block;max-width:70%;margin:0 auto;text-align:right}.message-box-title{margin:0 0 40px 0;color:#fff;font-size:2.125rem}.message-box-content{font-size:1rem;line-height:1.5}.message-box-animation{width:220px;height:20px;margin:20px 0 0;background-image:url(\"..\u002F..\u002Fimages\u002Fanimation.gif\")}.message-box-buttons{margin:20px 0 0;padding-top:20px;border-top:1px solid #929292}.message-box-button{margin-left:10px !important}.tipsy{position:absolute}.learnpress a,.learnpress a:active{outline:0;box-shadow:none}.learnpress .lp-install-sample-data-options{padding:0 20px 10px 20px;border:1px solid #ddd}.learnpress .lp-install-sample-data-options legend{font-size:1rem}.lp-email-templates{overflow:hidden;margin-top:5px}.learn-press-email-variables{margin:20px 0 0;padding:0;list-style:none}.learn-press-email-variables li{display:inline-block;cursor:pointer}.learn-press-dropdown-pages input[type=text]{min-width:300px;margin:0;vertical-align:top}.learn-press-dropdown-pages .select2-container{min-width:220px !important}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:30px;border-color:#7e8993}.learn-press-dropdown-pages .select2-container .select2-selection__rendered{line-height:1.75em !important}.learn-press-dropdown-pages .select2-container .select2-selection__arrow{left:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat left 5px top 55%;background-size:16px 16px}.learn-press-dropdown-pages .select2-container .select2-selection__arrow b{display:none}.learn-press-dropdown-pages .quick-add-page-actions a{font-size:.8125rem;text-decoration:none}.learn-press-dropdown-pages .quick-add-page-inline{margin-top:0}.lp-select-2+.select2-container .select2-selection--single{height:30px;border-color:#7e8993}.lp-select-2+.select2-container .select2-selection--single .select2-selection__rendered{line-height:1.75em !important}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow{left:1px;width:23px;height:28px;background:url(data:image\u002Fsvg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E) no-repeat left 5px top 55%;background-size:16px 16px}.lp-select-2+.select2-container .select2-selection--single .select2-selection__arrow b{display:none}.learn-press-tooltip{display:inline-block;margin:0 5px;color:#999;font-size:1.0625rem;vertical-align:middle}.learn-press-tooltip.icon::after{font-family:Dashicons;content:\"\\f223\"}.learn-press-tooltip:hover{opacity:1;color:#0073aa}.rwmb-payment-order-wrapper .rwmb-label{margin-bottom:20px !important}.rwmb-payment-order-wrapper .rwmb-input{margin-right:0 !important}.learn-press-payments,.learn-press-emails{width:100%;border:1px solid #ddd;border-collapse:collapse;font-size:.875rem}.learn-press-payments th,.learn-press-payments td,.learn-press-emails th,.learn-press-emails td{padding:10px}.learn-press-payments .order,.learn-press-emails .order{width:30px;padding-left:0;color:#ddd;text-align:center;cursor:not-allowed}.learn-press-payments .name,.learn-press-emails .name{min-width:250px;font-weight:normal;text-transform:capitalize}.learn-press-payments .name a,.learn-press-emails .name a{text-decoration:none}.learn-press-payments .status,.learn-press-emails .status{width:100px;text-align:center;cursor:pointer}.learn-press-payments .status .dashicons,.learn-press-emails .status .dashicons{border-radius:50%;color:#fff;background:#ddd}.learn-press-payments .status a,.learn-press-emails .status a{display:block;margin-top:5px;font-size:.75rem;text-decoration:none}.learn-press-payments .status.enabled .dashicons,.learn-press-emails .status.enabled .dashicons{background:#0085ba}.learn-press-payments thead th,.learn-press-emails thead th{border-bottom:1px solid #ddd;text-align:right}.learn-press-payments tbody tr:nth-child(even) td,.learn-press-emails tbody tr:nth-child(even) td{background:#fff}.learn-press-payments tbody tr:nth-child(odd) td,.learn-press-emails tbody tr:nth-child(odd) td{background:#f5f5f5}.learn-press-payments tbody td,.learn-press-emails tbody td{border-bottom:1px solid #ddd}.learn-press-payments tbody .ui-sortable-helper,.learn-press-emails tbody .ui-sortable-helper{margin-right:-1px;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder,.learn-press-emails tbody .ui-sortable-placeholder{visibility:visible !important;border:1px solid #ddd}.learn-press-payments tbody .ui-sortable-placeholder td,.learn-press-emails tbody .ui-sortable-placeholder td{height:35px;padding:0;background:#f7f7f7}.learn-press-payments ~ .email-actions,.learn-press-emails ~ .email-actions{text-align:right}.learn-press-payments.sortable .order:hover,.learn-press-emails.sortable .order:hover{color:#0073aa;cursor:ns-resize}.lp-template-overrides{margin-top:20px}.lp-template-overrides thead th h4{margin:0}.lp-template-overrides tbody th{font-weight:bold}.lp-template-overrides tbody th p{display:inline-block;margin:0 10px 0 0}.lp-template-overrides tbody th p a{margin:0;padding:2px 8px;border:0;border-radius:3px;outline:0;box-shadow:none;font-weight:normal}.lp-template-overrides tbody th p a.current{color:#fff;background:#00aadc}.lp-template-overrides .template-row.outdated code::before,.lp-template-overrides .template-row.up-to-date code::before{display:inline-block;margin-top:-2px;margin-left:3px;font-family:Dashicons;vertical-align:middle}.lp-template-overrides .template-row.outdated .template-version{color:red}.lp-template-overrides .template-row.outdated .template-file code::before{color:red;content:\"\\f534\"}.lp-template-overrides .template-row.up-to-date .template-version{color:#1859ff}.lp-template-overrides .template-row.up-to-date .template-file code::before{color:#0085ba;content:\"\\f147\"}.lp-template-overrides .template-version,.lp-template-overrides .core-version{width:100px}.lp-template-overrides #learn-press-no-templates td p{color:#0073aa}.description code{font-size:smaller}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result{display:none;padding:10px;background:#f5f5f5}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result input{width:80px;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#field-_lp_course_result input[name=_lp_course_result] ~ #passing-condition-quiz-result p{margin:7px 0 0;color:#777;font-style:italic}#field-_lp_course_result input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}.widget .widget-content .rwmb-field:not(:last-of-type){margin:0 0 10px}.widget .widget-content .rwmb-field:not(:last-of-type):first-child{margin-top:10px}.widget .widget-content .rwmb-field:last-child{margin-bottom:10px}.widget .widget-content .rwmb-field .rwmb-label,.widget .widget-content .rwmb-field .rwmb-input{width:100%}.widget .widget-content .rwmb-field .rwmb-label{margin-bottom:2px}.widget .widget-content .rwmb-field .rwmb-label label{font-weight:400}.widget .widget-content .rwmb-field .rwmb-input input[type=text]{width:100%}.course-attributes{margin:20px 0}.course-attributes .learn-press-attribute{margin-top:-1px;margin-bottom:0;border:1px solid #ddd}.course-attributes .learn-press-attribute>h4{margin:0;padding:10px 15px;background:#f5f5f5}.course-attributes .learn-press-attribute .learn-press-attribute-data{padding:15px;border-top:1px solid #ddd}.lp-hidden{display:none !important}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}#wpfooter{z-index:5}.learn-press-advertisement-slider{margin:50px 0 0 20px;position:relative;overflow:hidden;box-sizing:border-box;z-index:10}.learn-press-advertisement-slider .slider-items:after{display:block;clear:both;content:\"\"}.learn-press-advertisement-slider .slide-item{position:relative;float:right;width:100%;margin-left:-100%;padding:20px;opacity:0;background:#FFF;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .5s linear;transition:opacity .5s linear}.learn-press-advertisement-slider .slide-item .slide-thumbnail{float:right;width:35%}.learn-press-advertisement-slider .slide-item .slide-thumbnail a{display:block;line-height:1;margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{max-width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:35%;padding-right:20px}.learn-press-advertisement-slider .slide-item .slide-detail h2{margin-top:0}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:none}.learn-press-advertisement-slider .slide-item.slide-active{opacity:1}.learn-press-advertisement-slider .slider-controls{position:absolute;bottom:20px;left:20px}.learn-press-advertisement-slider .slider-controls .next-item,.learn-press-advertisement-slider .slider-controls .prev-item{font-family:\"dashicons\";width:40px;height:40px;border:1px solid #DDD;line-height:2.5rem;font-size:1rem;cursor:pointer;float:right;margin-right:10px;text-align:center;color:#DDD}.learn-press-advertisement-slider .slider-controls .next-item:hover,.learn-press-advertisement-slider .slider-controls .prev-item:hover{border-color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:hover:before,.learn-press-advertisement-slider .slider-controls .prev-item:hover:before{color:#0085ba}.learn-press-advertisement-slider .slider-controls .next-item:before{content:\"\\f345\"}.learn-press-advertisement-slider .slider-controls .prev-item:before{content:\"\\f341\"}@media only screen and (max-width:1200px){.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:50%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:50%}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}}@media only screen and (max-width:960px){.learn-press-advertisement-slider{margin-right:56px}.learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.learn-press-advertisement-slider .slide-item .slide-detail{margin-right:0;padding-right:0}.learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider{margin-right:56px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail{width:100%;float:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-thumbnail img{width:100%}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail{margin-right:0;padding-right:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail h2{padding-top:20px}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-short{display:block}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .description-full{display:none}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls{margin-bottom:0}.wp-responsive-open .learn-press-advertisement-slider .slide-item .slide-detail .slide-controls .button{margin-bottom:0}}.lp-admin-tabs{position:relative;margin-top:20px}.lp-admin-tabs.has-sections{display:flex}.lp-admin-tabs .lp-admin-tab-navs{display:none;float:right;position:relative;z-index:5;width:250px;margin:0 0 0 -250px;padding:10px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs .lp-admin-tab-navs .nav-section{margin:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section>span{display:block;padding:8px 20px;outline:0;box-shadow:none;text-decoration:none;text-transform:capitalize}.lp-admin-tabs .lp-admin-tab-navs .nav-section .learn-press-tooltip{float:left;margin-left:0}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover{border-right:2px solid #563d7c;color:#563d7c}.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section.nav-section-active>span,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>a,.lp-admin-tabs .lp-admin-tab-navs .nav-section:hover>span{padding-right:18px}.lp-admin-tabs.has-sections .lp-admin-tab-navs{display:block}.lp-admin-tabs.has-sections .lp-admin-tab-content{float:right;position:relative;z-index:0;width:100%;padding-right:271px !important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lp-admin-tabs.has-sections::before{position:absolute;z-index:10;top:0;bottom:0;right:250px;border-right:1px solid #ddd;content:\"\"}.lp-admin-tabs::after{display:block;clear:both;content:\"\";z-index:10}.wrap.learn-press-settings .lp-admin-tab-content{padding:18px;background:#fff}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub{float:none;margin:0 0 20px 0;padding-bottom:20px;border-bottom:1px solid #ddd}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub .active{font-weight:bold}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li{text-transform:capitalize}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li::after{display:inline-block;padding:0 10px;content:\"|\"}.wrap.learn-press-settings .lp-admin-tab-content .subsubsub li:last-child::after{content:\"\"}.wrap.learn-press-settings .lp-admin-tab-content h2{border-bottom:1px solid #ddd;padding-bottom:10px}.wrap #learn-press-uninstall-sample-data{float:left;opacity:.5}.wrap #learn-press-uninstall-sample-data:hover{opacity:1}#adminmenu .wp-menu-image img{width:17px}.learnpress .rwmb-field{position:relative;margin-bottom:20px}.learnpress .rwmb-field .rwmb-label{display:block;float:right;width:190px;margin-bottom:5px;font-size:.875rem;_text-transform:capitalize}.learnpress .rwmb-field .rwmb-label label>small{display:block;color:#999;font-weight:normal;font-style:italic}.learnpress .rwmb-field .rwmb-input{float:none;width:auto;margin-right:190px}.learnpress .rwmb-field .rwmb-input input[type=checkbox],.learnpress .rwmb-field .rwmb-input input[type=radio]{margin:1px 0 0 5px}.learnpress .rwmb-field .rwmb-input label>input[type=checkbox],.learnpress .rwmb-field .rwmb-input label>input[type=radio]{margin-top:-1px}.learnpress .rwmb-field .description{margin-top:8px;color:#888}.learnpress .rwmb-field .description code{padding:3px 0 3px 3px}.learnpress .rwmb-field .description.err{color:red}.learnpress .rwmb-field .rwmb-input-list{margin-right:0}.learnpress .rwmb-field #course_evaluation_method_quiz_options{position:relative;margin-right:25px}.learnpress .rwmb-field #course_evaluation_method_quiz_options::after{position:absolute;z-index:10;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}.learnpress .rwmb-field input[name=_lp_course_result]:checked ~ #course_evaluation_method_quiz_options::after{display:none}.learnpress .rwmb-field.rwmb-heading-wrapper h4{display:inline-block;margin:0 0 5px 0;padding:0;border-bottom:2px solid #563d7c;font-size:1rem;text-transform:initial}.learnpress .rwmb-field.disabled .field-overlay{position:absolute;z-index:10;top:0;right:0;width:100%;height:100%;opacity:.6;background:#fff;content:\"\"}.learnpress .rwmb-field.rwmb-text-wrapper .rwmb-text{width:50%;min-width:200px}.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input select,.learnpress .rwmb-field.rwmb-duration-wrapper .rwmb-input input{vertical-align:top}.learnpress .lp-course-sale_start-field.hide,.learnpress .lp-course-sale_end-field.hide{display:none}.learnpress.lp-submenu-settings .lp-admin-settings-buttons{margin-bottom:0;padding-top:20px;border-top:1px solid #ddd}.learnpress.lp-submenu-settings .lp-admin-settings-buttons #learn-press-reset-settings{float:left}.learnpress.lp-submenu-settings .rwmb-input{float:none;width:auto;margin-right:270px;color:#000}.learnpress .rwmb-google-fonts-wrapper .rwmb-input label{display:block;margin-bottom:5px;font-weight:bold}.learnpress .rwmb-google-fonts-wrapper .rwmb-input input{width:90%}.learnpress #learn-press-toggle-course-results{display:block}.learnpress .lp-item-assigned{font-size:.875rem}.learnpress .lp-item-assigned a{text-decoration:none}.learnpress .lp-item-assigned ul{margin-bottom:0}.learnpress .lp-item-assigned ul ul strong{font-weight:normal}.learnpress .lp-item-assigned li{margin:0}.learnpress .lp-item-assigned li a{display:inline-block;margin-bottom:10px}@media screen and (max-width:1280px){.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-label{float:none;width:auto}.learnpress #meta-box-tab-course_settings .rwmb-field .rwmb-input{float:right;width:100%;margin-right:0}}.lp-metabox__table .titledesc label>small{display:block;color:#999;font-weight:normal;font-style:italic}.lp-metabox__table .forminp-text>input,.lp-metabox__table .forminp-email>input,.lp-metabox__table .forminp-password>input,.lp-metabox__table .forminp-url>input{min-width:260px}.lp-metabox__table .forminp-textarea textarea{width:400px}.lp-option-disabled{pointer-events:none;opacity:.5}.lp-metabox__custom-fields table{width:100%;max-width:max-content;padding:0 !important}.lp-metabox__custom-fields table th{padding:7px 7px 7px 0 !important}.lp-metabox__custom-fields table th.sort{width:17px;padding:7px !important}.lp-metabox__custom-fields table td{position:relative;padding:4px 7px 4px 0 !important;vertical-align:middle !important}.lp-metabox__custom-fields table td.sort{width:17px;padding-left:7px !important;background:#f9f9f9;font-size:.9375rem;text-align:center;cursor:move}.lp-metabox__custom-fields table td.sort::before{height:100%;color:#999;font-family:Dashicons;text-align:center;content:\"\\f333\"}.lp-metabox__custom-fields table td .delete{display:block;position:relative;width:1em;height:1em;font-size:1.2em;text-indent:-9999px}.lp-metabox__custom-fields table td .delete::before{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#999;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox__custom-fields table td .delete:hover::before{color:#a00}.lp-metabox__custom-fields table td:last-child{padding-left:7px !important}.lp-metabox-field__color{font-size:0 !important}.lp-metabox-field__color .colorpickpreview{display:inline-block;width:30px;height:30px;margin:0;margin-left:3px;padding:0;border:1px solid #ddd;border-radius:4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,0.2);font-size:1rem;line-height:1.75rem}.lp-metabox-field__color .iris-picker{display:none;position:absolute;z-index:100;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,0.2)}.lp-metabox-field__image-advanced-upload{padding-top:10px}.lp-metabox-field__image-advanced-images{clear:both;margin:0;padding:0}.lp-metabox-field__image-advanced-images>li{float:right;position:relative;box-sizing:border-box;width:80px;margin:9px 0 0 9px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move}.lp-metabox-field__image-advanced-images>li img{display:block;width:100%;height:auto}.lp-metabox-field__image-advanced-images>li ul.actions{position:absolute;top:-8px;left:-8px;padding:2px}.lp-metabox-field__image-advanced-images>li ul.actions li{float:left;margin:0 2px 0 0}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-metabox-field__image-advanced-images>li ul.actions li a.delete::before{position:absolute;top:0;right:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images>li ul.actions::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images>li:hover ul.actions{display:block}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-metabox-field__image-advanced-images>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-metabox-field__image-advanced-images::before{display:table;content:\" \"}.lp-metabox-field__image-advanced-images::after{display:table;clear:both;content:\" \"}.lp-metabox-field__image--inner{position:relative;box-sizing:border-box;width:120px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7}.lp-metabox-field__image--inner img{display:block;width:100%;height:auto}.lp-metabox-field__image--upload{padding-top:10px}.lp-meta-box__inner{display:block;position:relative}.lp-meta-box__inner .form-field:not(fieldset){display:flex;flex-direction:row;position:relative;margin:0;padding:15px 0;flex-wrap:wrap}.lp-meta-box__inner .form-field:not(fieldset) label{width:180px;min-width:180px;max-width:180px;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner .form-field:not(fieldset) .checkbox{margin:2px 0 !important;vertical-align:middle}.lp-meta-box__inner .form-field:not(fieldset) .description{flex:1;display:inline;clear:none;margin:0 7px 0 0;padding:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field{display:grid;grid-template-columns:180px 1fr;position:relative;margin:0;padding:15px 0}.lp-meta-box__inner fieldset.form-field h4{width:180px;min-width:180px;max-width:180px;margin:0;padding:0;color:#23282d;font-size:.875rem;font-weight:600;flex:0 0 auto}.lp-meta-box__inner fieldset.form-field ul{margin:0;font-size:.875rem}.lp-meta-box__inner fieldset.form-field .description{grid-column-start:2;margin-top:10px}.lp-meta-box__duration-select{width:auto !important}.lp-meta-box__duration input[type=number]{width:80px !important}.lp-meta-box__duration .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important}.lp-meta-box__wp-editor{display:block}.lp-meta-box__wp-editor .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box__wp-editor__textarea{border:none !important}.lp-meta-box select{width:auto !important}.lp-meta-box select ~ .description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box input[type=number],.lp-meta-box input[type=email],.lp-meta-box input[type=text],.lp-meta-box input[type=password],.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){width:50%}.lp-meta-box input[type=number]+.description,.lp-meta-box input[type=email]+.description,.lp-meta-box input[type=text]+.description,.lp-meta-box input[type=password]+.description,.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea)+.description{flex-basis:100% !important;width:100%;margin-top:8px !important;margin-right:180px !important;color:#666}.lp-meta-box input[type=checkbox]{margin-top:2px}.lp-meta-box .short{width:50%}.lp-meta-box textarea:not(.lp-meta-box__wp-editor__textarea){height:4.6rem;line-height:1.5em;vertical-align:top}.lp-meta-box .learn-press-tip.ready{display:inline-flex;align-items:center;margin-right:8px}#course-settings .inside{margin:0 !important;padding:0 !important}#course-settings .lp-meta-box__course-tab{display:grid;grid-template-columns:20% 80%}#course-settings .lp-meta-box__course-tab__tabs{position:relative;box-sizing:border-box;margin:0;padding:0 0 10px;border-left:1px solid #eee;background-color:#fafafa}#course-settings .lp-meta-box__course-tab__tabs li{display:block;position:relative;margin:0;padding:0}#course-settings .lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;margin:0;padding:10px;border-bottom:1px solid #eee;box-shadow:none;text-decoration:none}#course-settings .lp-meta-box__course-tab__tabs li a i{margin-left:5px;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;text-transform:none}#course-settings .lp-meta-box__course-tab__tabs li a i[class^=dashicon]{font-family:\"Dashicons\"}#course-settings .lp-meta-box__course-tab__tabs li.active a{position:relative;color:#555;background-color:#eee}@media(max-width:767px){#course-settings .lp-meta-box__course-tab__tabs{display:flex;overflow:hidden;overflow-x:auto;flex-direction:row;margin:0;margin-bottom:30px;padding:0;border-bottom:1px solid #e5e5e5;text-align:center;white-space:nowrap;list-style:none;align-items:center;flex-wrap:nowrap}#course-settings .lp-meta-box__course-tab__tabs li{min-width:25%;margin-left:20px}}#course-settings .lp-meta-box__course-tab__content>div{padding:20px}@media(max-width:767px){#course-settings .lp-meta-box__course-tab{grid-template-columns:auto}}#price_course_data ._lp_sale_price_field,#price_course_data ._lp_price_field{position:relative}#price_course_data ._lp_sale_price_field .learn-press-tip-floating,#price_course_data ._lp_price_field .learn-press-tip-floating{top:54px;right:92px;opacity:.8;background:#a00}#price_course_data ._lp_sale_price_field .learn-press-tip-floating::before,#price_course_data ._lp_price_field .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.lp_course_extra_meta_box__content{flex:1}.lp_course_extra_meta_box__fields{margin-bottom:10px}.lp_course_extra_meta_box__field{position:relative;max-width:600px;margin-bottom:10px}.lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;right:0;width:40px;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_course_extra_meta_box__field .delete{display:flex;position:absolute;top:0;left:0;width:40px;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_extra_meta_box__field .delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_extra_meta_box__input{width:100% !important;padding-left:40px !important;padding-right:40px !important}.lp_repeater_meta_box__wrapper{flex:1 !important}.lp_repeater_meta_box__fields{position:relative;margin-bottom:10px}.lp_repeater_meta_box__field{display:grid;position:relative;margin-bottom:10px;border:1px solid #c5c5c5;border-radius:2px}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__content{display:block}.lp_repeater_meta_box__field_active .lp_repeater_meta_box__title__toggle::after{transform:rotate(-180deg)}.lp_repeater_meta_box__title{display:grid;grid-template-columns:44px 1fr 40px 40px;align-items:center;position:relative;background-color:#eee}.lp_repeater_meta_box__title__title{flex:1;padding:14px 0}.lp_repeater_meta_box__title__sort{display:flex;height:100%;color:#666;text-decoration:none;cursor:grab;align-items:center;justify-content:center}.lp_repeater_meta_box__title__sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}.lp_repeater_meta_box__title__delete{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_repeater_meta_box__title__toggle{display:flex;height:100%;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_repeater_meta_box__title__toggle::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f347\"}.lp_repeater_meta_box__content{display:none;padding:14px 20px}.lp_repeater_meta_box__content>label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;margin-bottom:20px;grid-template-rows:auto 1fr}.lp_repeater_meta_box__content>label:last-child{margin-bottom:0}.lp_repeater_meta_box__content>label span{margin-bottom:5px}.lp_repeater_meta_box__content>label textarea,.lp_repeater_meta_box__content>label input{width:100% !important}.lp_course_faq_meta_box__content{flex:1}.lp_course_faq_meta_box__fields{position:relative;margin-bottom:10px}.lp_course_faq_meta_box__field{display:grid;position:relative;margin-bottom:10px;padding:20px;border:1px solid #c5c5c5;border-radius:4px;grid-row-gap:10px}.lp_course_faq_meta_box__field label{display:grid;width:100% !important;min-width:100% !important;max-width:100% !important;grid-template-rows:auto 1fr}.lp_course_faq_meta_box__field label span{margin-bottom:5px}.lp_course_faq_meta_box__field label textarea,.lp_course_faq_meta_box__field label input{width:100% !important}.lp_course_faq_meta_box__field a.delete{display:flex;position:absolute;top:15px;left:50px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center}.lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f335\"}.lp_course_faq_meta_box__field .sort{display:flex;position:absolute;top:15px;left:20px;width:30px;height:30px;color:#666;text-decoration:none;align-items:center;justify-content:center;cursor:grab}.lp_course_faq_meta_box__field .sort::after{font-family:Dashicons;font-size:1.25rem;line-height:1;content:\"\\f333\"}input[name=_lp_course_result]:checked ~ #passing-condition-quiz-result{display:block}#passing-condition-quiz-result{display:none}#passing-condition-quiz-result input{width:80px !important;margin-top:5px !important}#passing-condition-quiz-result p{padding:10px 16px;background-color:#eee;font-size:.875rem}.lp-meta-box__file_list{display:inline-block;clear:both;margin:0;padding:0}.lp-meta-box__file_list>li{display:flex;flex-flow:column nowrap;float:right;position:relative;box-sizing:border-box;width:80px;height:80px;margin:9px 0 0 9px;border:1px solid #d5d5d5;border-radius:2px;background:#f7f7f7;cursor:move;align-items:center;justify-content:center}.lp-meta-box__file_list>li img{display:block;width:100%;height:auto}.lp-meta-box__file_list>li img.is_file{width:30px}.lp-meta-box__file_list>li img.is_file ~ span{margin-top:5px;font-size:.75rem}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder{position:relative;border:3px dashed #ddd}.lp-meta-box__file_list>li.lp-metabox-sortable-placeholder::after{position:absolute;top:0;right:0;width:100%;height:100%;margin:0;color:#ddd;font-family:Dashicons;font-size:2.618em;font-weight:normal;font-variant:normal;line-height:4.5rem;text-align:center;text-indent:0;text-transform:none;content:\"\\f161\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions{position:absolute;top:-8px;left:-8px;padding:2px}.lp-meta-box__file_list>li ul.actions li{float:left;margin:0 2px 0 0}.lp-meta-box__file_list>li ul.actions li a.delete{display:block;position:relative;width:1em;height:1em;font-size:1.4em;text-indent:-9999px}.lp-meta-box__file_list>li ul.actions li a.delete::before{position:absolute;top:0;right:0;width:1em;height:1em;margin:0;border-radius:50%;color:#999;background:#fff;font-family:Dashicons;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-indent:0;text-transform:none;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.lp-meta-box__file_list>li ul.actions::before{display:table;content:\" \"}.lp-meta-box__file::before{display:table;content:\" \"}.lp-meta-box__file::after{display:table;clear:both;content:\" \"}.lp-metabox-evaluate-final_quiz{display:block}.lp-metabox-evaluate-final_quiz__message{display:inline-block;min-width:50%;margin-top:10px;padding:8px 20px;border:2px solid #36af27;border-radius:4px;background:#f7f7f7;text-align:center}.lp-metabox-evaluate-final_quiz__message-error{border-color:lightcoral}.lp_widget_autocomplete__loading{margin-top:0 !important;padding:7px 10px;border:1px solid #949494;border-top:none !important;background:#eee;font-size:13px !important}.lp_widget_autocomplete__select{overflow:auto;right:0;width:100%;max-height:148px;margin-top:-1px;background:#eee;font-size:.8125rem}.lp_widget_autocomplete__item{overflow:hidden;padding:7px 10px;border:1px solid #949494;border-top:0;border-bottom-color:#afafaf;white-space:nowrap;text-overflow:ellipsis;cursor:pointer}.lp_widget_autocomplete__item__selected,.lp_widget_autocomplete__item:hover{color:#fff;background-color:#007cba}.widget .select2-selection__rendered{font-size:.8125rem}.sortable-wrapper{margin:1em 0}.sortable-wrapper .sortable{margin:.5em 0}.sortable-wrapper .sortable .dashicons-move{cursor:move}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(-360deg)}}.sortable-wrapper>label{font-weight:600;font-size:14px}.sortable__item{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sortable__item:last-child{margin-bottom:0}.widget-content p{margin-bottom:8px;display:flex;align-items:center;flex-wrap:wrap}:root{--lp-addon-item-padding:10px;--lp-border-radius:3px;--lp-addon-item-border-color:#c3c4c7}@media screen and (min-width:1600px){.plugin-card:not(.hide-if-js):nth-child(even){margin-left:8px}.plugin-card:not(.hide-if-js):nth-child(3n){margin-left:0}}#lp-addons{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:20px;padding-left:20px}#lp-addons.max-3-items{grid-template-columns:repeat(auto-fit,minmax(280px,320px))}#lp-addons a{text-decoration:none}#lp-addons button{padding:6.5px 17px;background:#9747ff;color:white;border-radius:3px;border:0;cursor:pointer}#lp-addons button.btn-addon-action.handling span{display:none}#lp-addons button.btn-addon-action.handling span.dashicons{display:inline-flex}#lp-addons button.btn-addon-action[data-action=cancel]{position:absolute;left:0;background:transparent;color:rgba(255,0,0,0.89);top:0;padding:7px 10px}#lp-addons button.btn-addon-action span.dashicons{align-items:center;display:none;font-size:1.125em;width:auto;height:auto;animation:rotation 2s infinite linear}#lp-addons button[data-action=update]{background:#27bf49}#lp-addons button[data-action=setting]{background:#2d72da}#lp-addons .lp-addon-item{background:white;padding:var(--lp-addon-item-padding);border:1px solid var(--lp-addon-item-border-color);border-radius:3px;display:flex;flex-direction:column;justify-content:space-between;position:relative}#lp-addons .lp-addon-item input{margin:0 !important}#lp-addons .lp-addon-item.hide,#lp-addons .lp-addon-item.search-not-found{display:none}#lp-addons .lp-addon-item__content{text-align:center;min-height:290px}#lp-addons .lp-addon-item__content img{width:50px;height:50px;border-radius:10px;margin-top:20px}#lp-addons .lp-addon-item__content a{text-decoration:none}#lp-addons .lp-addon-item__content p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}#lp-addons .lp-addon-item__content p::before{content:none}#lp-addons .lp-addon-item__actions{border-top:1px solid var(--lp-addon-item-border-color);padding:10px var(--lp-addon-item-padding) 0;margin:0 calc(var(--lp-addon-item-padding) * -1);display:flex;align-items:center}#lp-addons .lp-addon-item__actions__left{flex:3;display:flex;gap:5px;align-items:center}#lp-addons .lp-addon-item__actions__left button{display:none}#lp-addons .lp-addon-item__actions__right button{display:none;background:transparent;color:#2271b1}#lp-addons .lp-addon-item__purchase{display:none;position:absolute;top:0;bottom:0;right:0;left:0;background:rgba(255,255,255,0.6);text-transform:uppercase}#lp-addons .lp-addon-item__purchase__wrapper div{position:absolute;bottom:20%;right:var(--lp-addon-item-padding);left:var(--lp-addon-item-padding);background:white;border:1px solid var(--lp-addon-item-border-color);padding:var(--lp-addon-item-padding);border-radius:3px;flex-direction:column;display:none;gap:5px;box-shadow:0 4px 25px 1px rgba(0,0,0,0.25)}#lp-addons .lp-addon-item__purchase__wrapper div input{width:100%}#lp-addons .lp-addon-item__purchase label{text-transform:capitalize}#lp-addons .lp-addon-item.installed.activated button[data-action=setting]{display:block}#lp-addons .lp-addon-item.installed.activated button[data-action=deactivate]{display:block}#lp-addons .lp-addon-item.installed.activated.update button[data-action=update]{display:block}#lp-addons .lp-addon-item.installed:not(.activated) button[data-action=activate]{display:block}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code]{display:inline-flex;align-items:center;padding:0 5px;height:12px}#lp-addons .lp-addon-item.installed.purchase button[data-action=update-purchase-code] span{animation:none;display:inline}#lp-addons .lp-addon-item.not_installed.purchase button[data-action=purchase]{display:block}#lp-addons .lp-addon-item.not_installed.free button[data-action=install]{display:block}#lp-addons .lp-addon-item.not_installed .lp-addon-item__actions__right{display:none}#lp-addons .lp-addon-item.update button[data-action=update]{display:block}#lp-addons .lp-toggle-switch .lp-toggle-switch-label{height:20px;align-items:center;margin-bottom:0;background:#b4b9be;cursor:pointer;display:inline-flex;justify-content:space-between;position:relative;transition:right .15s ease-out;border-radius:100px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label:after{background:#fff;content:\"\";display:block;position:absolute;right:4px;width:12px;height:12px;transition:all .25s ease-in-out;border-radius:50%}#lp-addons .lp-toggle-switch .lp-toggle-switch-label::before{right:0}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on,#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{opacity:1;padding-right:6px;padding-left:6px;font-size:.8em;line-height:1.125em}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-on{color:#fff;opacity:0;padding-left:0;width:12px}#lp-addons .lp-toggle-switch .lp-toggle-switch-label .toggle-off{width:12px;color:#777;padding-right:0}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input{display:none}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label{background:#0073aa}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label:after{right:auto;left:5px;background:#fff}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-on{opacity:1}#lp-addons .lp-toggle-switch input.lp-toggle-switch-input:checked+label .toggle-off{opacity:0}#lp-addons .lp-toggle-switch .dashicons{animation:rotation 2s infinite linear}#lp-addons .screen-reader-text:focus{clip-path:inset(50%);-webkit-clip-path:inset(50%)}.lp-nav-tab-wrapper{display:flex;margin-bottom:20px;justify-content:start;gap:5px;border-bottom:1px solid #c3c4c7}.lp-nav-tab-wrapper .nav-tab{border:1px solid #c3c4c7;border-bottom:0;margin-right:0;padding:5px 10px;line-height:1.6em;font-weight:600;background:#dcdcde;color:#50575e;text-decoration:none;white-space:nowrap;border-radius:3px 3px 0 0}.lp-nav-tab-wrapper .nav-tab-active{background:#f0f0f1;border-bottom:1px solid #f0f0f1}.wp-submenu .lp-notify{display:none;vertical-align:top;box-sizing:border-box;margin:1px 5px -1px 0;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#d63638;color:#fff;font-size:.75em;line-height:1.6;text-align:center}.related-themes{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));grid-gap:20px}.related-themes li{margin:0}.related-themes .plugin-card-top{padding-bottom:0;background:#fff}.related-themes .theme-content{position:relative}.related-themes .image-thumbnail img{width:100%;height:auto;vertical-align:middle}.related-themes .theme-description{margin:0 0 25px 0;display:-webkit-box;overflow:hidden;min-height:8em;max-height:8em;line-height:1.6em;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:5;color:#777}.related-themes .theme-title{min-height:3.2em;margin-left:100px;margin-bottom:0;font-size:1.2em;line-height:1.3em}.related-themes .theme-title a{color:#545454}.related-themes .theme-rating{display:inline-block;float:left}.related-themes .star-rating{display:inline-block}.related-themes .count-rating{position:relative;top:2px;font-size:.9375rem}.related-themes .theme-detail{position:absolute;top:-3px;left:3px;line-height:1.6em;text-align:left}.related-themes .theme-detail::after{display:block;clear:both;content:\"\"}.related-themes .theme-detail .theme-price{display:inline-block;color:#545454;font-size:1.5rem;font-weight:700;line-height:1.3em}.related-themes .theme-footer{clear:both;overflow:hidden;margin-left:-20px;margin-right:-20px;padding:20px;border-top:1px solid #ddd;background-color:#fafafa}.post-type-lp_order .wp-list-table .column-order_status{width:150px}.post-type-lp_order .wp-list-table .order_status span{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.post-type-lp_order .wp-list-table .order_status span.pending{background:#bdbdbd}.post-type-lp_order .wp-list-table .order_status span.processing{background:#ffc107}.post-type-lp_order .wp-list-table .order_status span.completed{background:#4caf50}.post-type-lp_order .wp-list-table .order_status span.cancelled{background:#444}.post-type-lp_order .wp-list-table .order_status span.failed{background:red}.post-type-lp_order .wp-list-table .order_status span.trash{color:rgba(128,128,128,0.68)}.post-type-lp_order .wp-list-table .order_status span i{display:inline-block}.post-type-lp_order .wp-list-table .column-title,.post-type-lp_order .wp-list-table .column-order_total,.post-type-lp_order .wp-list-table .column-order_date{width:150px}.post-type-lp_order .wp-list-table .column-order_items ol{margin:0;padding:0;list-style-position:inside}.post-type-lp_course .wp-list-table .column-price{width:80px}.post-type-lp_course .wp-list-table .column-thumbnail{width:60px;padding-top:8px;box-sizing:border-box}.post-type-lp_course .wp-list-table .column-thumbnail img{width:100%;height:auto}@media only screen and (max-width:782px){.post-type-lp_course .wp-list-table .column-thumbnail{display:none}.post-type-lp_course .wp-list-table .column-thumbnail::before{opacity:0}}.post-type-lp_course .wp-list-table .column-certificate{box-sizing:border-box;max-width:60px}.post-type-lp_course .wp-list-table .column-certificate img{max-width:100% !important}@media only screen and (min-width:1024px){.post-type-lp_course .wp-list-table .check-column{width:1.2em}}@media only screen and (min-width:783px){.post-type-lp_course .wp-list-table .column-title{width:16%}}.wp-list-table .column-author,.wp-list-table .column-instructor{width:80px}.wp-list-table .column-author .post-author,.wp-list-table .column-instructor .post-author{display:inline-block}.wp-list-table .column-author .post-author img,.wp-list-table .column-instructor .post-author img{width:30px;height:30px;margin:0;border-radius:50%;vertical-align:middle}.wp-list-table .column-author .post-author a,.wp-list-table .column-instructor .post-author a{display:inline-block;vertical-align:middle}.wp-list-table .column-curriculum{width:60px}.wp-list-table .column-student{width:60px}.wp-list-table .column-taxonomy-course_category{width:100px}.wp-list-table .column-gradebook{width:40px;text-align:center}.post-type-page .column-lp-page{width:200px}.post-type-page .for-plugin-page{margin:0;color:red;font-size:.6875rem}.post-state .post-author{font-size:.875rem;font-weight:normal;font-style:italic}#learn-press-box-edit-slug{overflow:hidden;margin:0 -10px;padding:10px;border:1px solid #ddd;color:#b79186;background:#fff}#learn-press-box-edit-slug .button{float:left;height:24px;line-height:1.375rem}.is-lp-page{color:#fff;font-size:11px;padding:1px 8px;border-radius:10px;background-color:#9979ff;margin-left:5px;display:inline-block}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-modal{position:fixed;z-index:1000000;width:100%;height:100%;top:0;display:table}.learn-press-modal .modal-overlay{position:fixed;z-index:1000000;background:#000;opacity:.5;width:100%;height:100%;top:0}.learn-press-modal .modal-wrapper{display:table-cell;vertical-align:middle;z-index:1000010;position:relative}.learn-press-modal .modal-wrapper .modal-container{max-width:800px;width:90%;margin:0 auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 8px rgba(0,0,0,0.33);transition:all .3s ease;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-modal .modal-wrapper header{font-size:1.125rem;padding:20px;border-bottom:1px solid #DDD;font-weight:600;color:#000}.learn-press-modal .modal-wrapper article{margin:30px 20px}.learn-press-modal .modal-wrapper article input[name=search]{width:100%;font-size:1rem;box-sizing:border-box;margin:0;box-shadow:none;color:#444;padding:8px 10px;height:42px;border-radius:2px;border-color:#e4e4e4;font-weight:400;vertical-align:middle}.learn-press-modal .modal-wrapper article .search-results{margin:0;margin-top:30px}.learn-press-modal .modal-wrapper article .search-results li>label{display:block}.learn-press-modal .modal-wrapper footer{padding:15px 20px;overflow:hidden;border:1px solid #eee}.learn-press-modal .modal-wrapper footer .search-nav{float:right}.learn-press-modal .modal-wrapper footer .search-nav a,.learn-press-modal .modal-wrapper footer .search-nav span{display:inline-block;line-height:1.625rem;height:28px;margin:0;padding:0 10px 1px}.learn-press-modal .modal-wrapper footer button{float:left;margin-right:3px}#modal-search-items.loading .search-results:before{position:absolute;top:75px;right:0;left:0;bottom:0;display:block;content:\"\";z-index:9;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center}.modal-search{position:relative;display:inline-block;min-width:300px}.modal-search .search-input{border:1px solid #DDD;width:100%;margin:0;padding:5px 10px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-search .search-input:focus{border-color:#DDD}.modal-search .search-results-content{position:absolute;top:100%;width:100%;right:0;background:#FFF;border:1px solid #DDD;border-top:0;z-index:1000;margin-top:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.modal-search .search-results-content .search-results{margin:0}.modal-search .search-results-content .search-results .result-item{margin:0;padding:0;list-style:none}.modal-search .search-results-content .search-results .result-item label{display:block;padding:6px 10px;text-decoration:none;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-search .search-results-content .search-results .result-item:hover{background:#f4fcff}.modal-search .has-items .search-input{border-bottom-color:transparent}.modal-search .has-items .search-results-content{border-top:0}.modal-search .checked-items{text-align:center}.modal-search .checked-items .button{font-size:.75rem;height:20px;line-height:1.25rem}.modal-search .checked-items .disabled{color:#777}.modal-search .search-navigator{margin:5px 0;text-align:center}.modal-search .search-navigator .page-numbers{display:inline-block;padding:2px 5px;text-decoration:none;line-height:1}.modal-search .search-navigator .page-numbers.next,.modal-search .search-navigator .page-numbers.prev{display:none}.lp-order-statuses{margin:0;display:grid;grid-template-columns:auto auto;grid-gap:10px}.lp-order-statuses .lp-skeleton-animation{grid-column:1\u002F3}.lp-order-statuses li{width:100%;margin:0;background:#fff}.lp-order-statuses li span{font-size:1.1rem;display:flex;text-align:center;justify-content:center;align-items:center;column-gap:10px;font-weight:400}.lp-order-statuses li p{margin:0;padding:0;color:#adadad;font-size:.75rem}.lp-order-statuses li.counter-number{text-align:center}.lp-order-statuses li.counter-number .counter-inner{padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9}.lp-order-statuses li.clear{float:none}.lp-order-statuses li.featured-theme{width:auto;margin:12px -12px 0 -12px;padding:8px 12px 0 12px;border-top:1px solid #eee}.lp-order-statuses li.featured-theme .star-rating{display:inline-block;line-height:.875rem;vertical-align:middle}.lp-order-statuses li.featured-theme .star-rating .star{width:14px;height:14px;font-size:.875rem}.lp-order-statuses li.featured-theme>div{margin-bottom:3px}.lp-order-statuses li.featured-theme>div span{color:#999;font-size:.75rem;vertical-align:middle}.lp-order-statuses li:nth-child(even) .counter-inner{margin-right:0}.lp-order-statuses li:nth-child(odd) .counter-inner{margin-left:0}.lp-order-statuses li.total-raised{grid-column:1\u002F3;box-sizing:border-box;padding:10px 0;border:1px solid #f3f3f3;background:#f9f9f9;text-align:center;color:#0073aa}.lp-order-statuses li.total-raised span{margin-bottom:10px;font-size:1.625rem}.lp-order-statuses li.total-raised span i{font-size:1.5625rem}.lp-order-statuses::after{display:block;clear:both;content:\"\"}.featured-theme{border-top:1px solid #eee;margin-top:10px;padding-top:10px}.featured-theme p{margin:0;font-size:12px}.featured-theme .star-rating{display:inline-block;line-height:.75rem}.featured-theme .star-rating .star{font-size:.8125rem;width:13px;height:13px}.featured-theme span{font-size:.6875rem}.lp-place-holder{background:#fff;padding:10px;display:block;margin:20px auto;box-shadow:0 0 0 rgba(0,0,0,0.1);border-radius:3px}.lp-place-holder [class*=line-]{height:6px;width:400px;background:#f6f7f9;margin-bottom:13px;margin-left:5px}.lp-place-holder .thumbnail{height:40px;width:40px;float:right;margin-left:20px;display:inline-block}.lp-place-holder .line-heading{width:80%;height:20px}.lp-place-holder .line-sm{width:30%;margin-top:10px}.lp-place-holder .line-xs{width:50%}.lp-place-holder .line-df{margin-top:30px;width:380px}.lp-place-holder .line-lg{width:200px}.lp-place-holder .line-lgx{width:450px}.lp-place-holder [class*=line],.lp-place-holder .thumbnail{animation:lpTimeLine;animation-duration:1s;animation-timing-function:linear;animation-iteration-count:infinite;background:linear-gradient(to left,#eee 8%,#ddd 18%,#eee 33%);background-size:800px auto;background-position:100px 0}@keyframes lpTimeLine{0%{background-position:-350px 0}100%{background-position:400px 0}}.post-type-lp_order #post-body-content{display:none}.post-type-lp_order #order_details{border:none !important;background:transparent !important}.post-type-lp_order #order_details .hndle,.post-type-lp_order #order_details .handlediv,.post-type-lp_order #order_details .postbox-header{display:none}.post-type-lp_order #order_details .inside{display:block !important;margin:0;padding:0}.post-type-lp_order #order_details .order-data{margin:0 0 20px 0 !important;padding:30px !important;border:1px solid #ccd0d4 !important;background-color:#fff !important;box-shadow:none !important}.post-type-lp_order #order_details .order-data-field{margin-bottom:20px}.post-type-lp_order #order_details .order-data-field label{display:block;margin-bottom:5px;font-weight:500}.post-type-lp_order #order_details .order-data-number{margin:0 0 10px;font-size:1.25rem;font-weight:600}.post-type-lp_order #order_details .payment-method-title{color:#777;font-size:1rem}.post-type-lp_order #order_details .payment-method-title strong{color:#23282d}.post-type-lp_order #order_details .order-data-heading{margin-top:40px;font-size:1rem}.post-type-lp_order #order_details .order-users{display:inline-block}.post-type-lp_order #order_details .order-users .description{margin-top:10px;padding:10px;background:#eee}.post-type-lp_order #order_details .order-data-date .order-date{width:120px}.post-type-lp_order #order_details .order-data-date .order-hour,.post-type-lp_order #order_details .order-data-date .order-minute{width:50px}.post-type-lp_order #order_details .order-data-note{display:inline-block}.post-type-lp_order #order_details .order-data-note .order-note{padding:10px;color:#fff;background-color:#c1a3b6;font-size:.875rem}.post-type-lp_order #order_details .order-items{margin:0;border:1px solid #ccd0d4 !important;background-color:#fff}.post-type-lp_order #order_details .order-items table{width:100%;border-collapse:collapse}.post-type-lp_order #order_details .order-items table thead{margin:0;padding:0}.post-type-lp_order #order_details .order-items table thead tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table thead th{padding:15px;border-bottom:0;color:#999;font-weight:400;text-align:right}.post-type-lp_order #order_details .order-items table thead th:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table thead th:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tbody td,.post-type-lp_order #order_details .order-items table tfoot td{padding:10px;border-bottom:1px solid #ddd;text-align:right}.post-type-lp_order #order_details .order-items table tbody{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tbody tr td{padding:15px}.post-type-lp_order #order_details .order-items table tbody tr td:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tbody tr td:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table tfoot{margin:0;padding:0}.post-type-lp_order #order_details .order-items table tfoot tr{background-color:#f8f8f8}.post-type-lp_order #order_details .order-items table tfoot tr:last-child td{padding-top:20px;padding-bottom:20px}.post-type-lp_order #order_details .order-items table tfoot td{padding:10px 15px;padding-bottom:0;border:0;font-size:.875rem;text-align:left}.post-type-lp_order #order_details .order-items table tfoot td:first-child{padding-right:30px}.post-type-lp_order #order_details .order-items table tfoot td:last-child{padding-left:30px}.post-type-lp_order #order_details .order-items table .column-price,.post-type-lp_order #order_details .order-items table .column-total,.post-type-lp_order #order_details .order-items table .column-quantity{width:150px;text-align:left}.post-type-lp_order #order_details .order-items table .row-subtotal td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-subtotal td .order-total,.post-type-lp_order #order_details .order-items table .row-total td .order-subtotal,.post-type-lp_order #order_details .order-items table .row-total td .order-total{font-weight:700}.post-type-lp_order #order_details .order-items table .remove-order-item{outline:0;color:#ccc;text-decoration:none}.post-type-lp_order #order_details .order-items table .remove-order-item .dashicons{font-size:1.25rem}.post-type-lp_order #order_details .order-items table .remove-order-item:hover{color:red}.post-type-lp_order #order_details .order-items table .order-item-row:hover .remove-order-item{display:inline-block}.post-type-lp_order #order-export__button:hover{cursor:pointer}.post-type-lp_order .export-modal.modal{display:none;position:fixed;z-index:10;right:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,0.4)}.post-type-lp_order .export-modal .modal-content{background-color:#fefefe;margin:5% auto;border:1px solid #888;width:60%;position:relative}.post-type-lp_order .export-modal .close{color:#aaa;position:absolute;font-size:28px;font-weight:bold;top:-5px;left:11px}.post-type-lp_order .export-modal .close:hover{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .close:focus{color:black;text-decoration:none;cursor:pointer}.post-type-lp_order .export-modal .panel{display:none}.post-type-lp_order .export-modal .panel.active{display:block}.post-type-lp_order #order-export__tabs.tabs{display:flex;justify-content:space-around;height:40px;box-shadow:0 0 1px 1px rgba(0,0,0,0.2)}.post-type-lp_order #order-export__tabs.tabs>*{width:100%;color:dimgray;height:100%;cursor:pointer;display:flex;justify-content:center;align-items:center}.post-type-lp_order #order-export__tabs.tabs>*:hover:not(.active){background-color:#dcdcdc}.post-type-lp_order #order-export__tabs.tabs>.active{color:white;background-color:#4caf50}.post-type-lp_order #lp-invoice__content{padding:20px 40px 0;margin-bottom:25px}.post-type-lp_order #lp-invoice__content thead th{border-bottom:1px solid #000;border-top:1px solid #000;padding:10px 20px}.post-type-lp_order #lp-invoice__content tbody td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order #lp-invoice__content tfoot td{border-bottom:1px solid #000;text-align:center;padding:10px 20px}.post-type-lp_order .export-options__content{margin-bottom:25px;padding:10px 40px}.post-type-lp_order .export-options{position:relative}.post-type-lp_order .export-options__loading{opacity:0;z-index:-1;visibility:hidden;position:absolute;top:0;right:0;width:100%;background:#fff;left:0;bottom:0;display:flex;align-items:center;justify-content:center}.post-type-lp_order .export-options__loading .spinner{background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;z-index:9;display:inline-block;visibility:visible}.post-type-lp_order .export-options__loading.active{opacity:1;z-index:9;visibility:visible}.post-type-lp_order #lp-invoice__export{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__export:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__update{color:white;background-color:#4caf50;border:1px solid #4caf50;padding:10px 20px;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease}.post-type-lp_order #lp-invoice__update:hover{color:#000;background-color:#fff;border:1px solid #000;transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;-webkit-transition:all .5s ease;cursor:pointer}.post-type-lp_order #lp-invoice__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .export-options__actions{display:flex;flex-direction:row;justify-content:flex-end}.post-type-lp_order .lp-invoice__body table{border-spacing:0;width:100%}.post-type-lp_order .lp-order-status .dashicons{display:inline-flex !important;align-items:center;font-size:1rem}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination{text-align:right}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li{border:1px solid #2271b1;background:#f6f7f7}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .page-numbers{padding:0 6px}.post-type-lp_order .lp-order-items-wrapper .learn-press-pagination li .current{background:#2271b1;color:#fff !important}#learn-press-toggle-settings-js-css{display:none}#learn-press-toggle-settings-js-css+table{display:none}#learn-press-toggle-settings-js-css:checked+table{display:table}.color-schemas{margin:0 0 20px 20px;float:right}.color-schemas ul{list-style:none;margin:0;padding:0}.color-schemas ul>li>label{font-weight:600;display:block;margin-bottom:10px}.color-schemas .wp-color-picker{width:80px;height:24px;vertical-align:top;margin:0}.color-schemas .wp-picker-holder{position:absolute}.color-schemas .buttons{display:none}.color-schemas table{border-collapse:collapse;position:relative}.color-schemas table td,.color-schemas table th{padding:10px 10px}.color-schemas table tbody{border:1px solid transparent;position:relative}.color-schemas table tbody td,.color-schemas table tbody th{text-align:right;background:#f5f5f5}.color-schemas table tbody tr:first-child td,.color-schemas table tbody tr:first-child th{padding-bottom:0}.color-schemas table:after{content:\"\";position:absolute;top:0;right:0;left:0;bottom:0;background:rgba(255,255,255,0.7)}.color-schemas tfoot td,.color-schemas tfoot th{padding-right:0;padding-left:0}.color-schemas .remove-schema{float:left;color:red}.color-schemas .wp-color-result{margin:0}.color-schemas .clone-schema{display:none}.color-schemas:first-child .remove-schema,.color-schemas:first-child .apply-schema{display:none}.color-schemas:nth-child(2){clear:both}.color-schemas:hover tbody{opacity:1}.color-schemas.current tbody{border-color:#DDD}.color-schemas.current tbody td,.color-schemas.current tbody th{background:rgba(5,215,255,0.26)}.color-schemas.current table:after{display:none}.color-schemas.current .clone-schema{display:inline-block}.wp-picker-container{position:relative}.wp-picker-container .wp-picker-holder{z-index:99999}.lp-install-sample{max-width:600px;margin:0;padding:10px 25px;border:1px solid #ccd0d4;border-radius:4px;background-color:#fff}.lp-install-sample__options{margin-bottom:20px;padding:0 20px;border:1px solid #eee;border-radius:4px}.lp-install-sample__options legend{padding:5px;font-weight:500}.lp-install-sample__buttons{display:flex;margin-top:25px;align-items:center;justify-content:space-between}.lp-install-sample__toggle-options{margin-left:auto;margin-right:10px}.lp-install-sample__uninstall{float:left}.lp-install-sample__response{margin:0;padding:10px;border:2px solid #059601;border-radius:6px}.lp-install-sample__response.fail{border-color:#d85554}.lp-update-db-modal{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-update-db-modal__hidden{display:none !important;visibility:hidden;opacity:0;pointer-events:none}.lp-update-db-modal__overlay{position:absolute;z-index:1;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-update-db-modal__content{display:inline-block;overflow:hidden;z-index:2;width:100%;max-width:510px;border-radius:8px;text-align:right;vertical-align:middle}.lp-update-db-modal__content-header{padding:24px 24px 16px 24px;background-color:#fff}.lp-update-db-modal__content-start{display:flex;flex-direction:flex-start}.lp-update-db-modal__content-icon{display:flex;width:40px;height:40px;margin-left:0;margin-right:0;border-radius:999px;background-color:#fee2e2;justify-content:center;align-items:center;flex:0 0 auto}.lp-update-db-modal__content-icon svg{width:24px;height:24px;color:#dc2626}.lp-update-db-modal__content-icon svg:last-child{color:#258d6c}.lp-update-db-modal__content-icon__success{display:none}.lp-update-db-modal__content-text{margin-right:18px;text-align:right}.lp-update-db-modal__content-text h3{margin:0;font-weight:500}.lp-update-db-modal__content-text p{margin:0;margin-top:10px;color:#999;font-size:.875rem;font-weight:400}.lp-update-db-modal__content-footer{display:flex;flex-direction:row;padding:10px 24px;background-color:#f9fafb;justify-content:flex-end;align-items:center}.lp-update-db-modal__content-footer a{padding:8px 16px;border:1px solid #e5e7eb;border-radius:6px;color:#374151;font-size:.8125rem;font-weight:500;text-decoration:none}.lp-update-db-modal__content-footer a:last-child{margin-right:10px;color:#fff;background-color:#0073aa}.lp-update-db-modal__success .lp-update-db-modal__content-icon{background-color:#def7ec}.lp-update-db-modal__success .lp-update-db-modal__content-icon__error{display:none}.lp-update-db-modal__success .lp-update-db-modal__content-icon__success{display:block}#lp-tool-upgrade-db .wrapper-lp-upgrade-message,#lp-tool-upgrade-db .wrapper-terms-upgrade,#lp-tool-upgrade-db .wrapper-lp-loading{display:none}.terms-upgrade{max-width:500px;margin:0 auto}.terms-upgrade .error{display:none}.lp-modal-footer .learn-press-notice{color:#ff6060;font-weight:500;font-style:italic}.lp-modal-body .lp-skeleton-animation{width:500px;margin:0 20px}.tools-select__data{overflow:hidden}.tools-select__data li{background-color:#fff;border:1px solid #eee;color:#000;display:flex;flex-direction:row;align-items:center;flex:0 0 auto;font-size:.875rem;line-height:1.4em;font-weight:normal;padding:10px;width:100%}.tools-select__data li input{margin:0 0 0 10px}.progressbar__content{width:100%;font-size:.875rem;font-weight:normal;line-height:1.4em;background:#eee;padding:10px 0;display:flex;flex-direction:column;align-items:center;justify-content:center}.progressbar__content span{z-index:9}.progressbar__container{position:relative}.progressbar__value{position:absolute;width:0;height:100%;right:0;top:0;background:#8a2be2}.progressbar__item h4{z-index:9;margin:0}.progressbar__item{width:500px;border-bottom:1px solid #fff}.progressbar__indexs{z-index:9}.lp-tool__message{text-align:center;color:red;padding:10px 0;display:none}.tools-prepare__message{background:#dba617;padding:10px 0;text-align:center;display:none}.lp-admin-notices{background:transparent;display:none;padding:0;border:0;margin:0 !important}.lp-admin-notices .lp-admin-notice{position:relative}.lp-admin-notices .lp-mes-beta-version{background:#4299e1;color:whitesmoke}.lp-admin-notices .lp-mes-beta-version h3,.lp-admin-notices .lp-mes-beta-version a,.lp-admin-notices .lp-mes-beta-version a:visited{color:white}.lp-admin-notices .lp-mes-beta-version .btn-lp-notice-dismiss::before{color:#fff0f6}.tab-lp-admin-notice{margin-right:5px;width:4px;height:4px;background:#ff1919;display:inline-flex;border-radius:999px;vertical-align:middle}.lp-admin-editor{position:relative;margin:0;background-color:#fff}.lp-admin-editor .heading,.lp-admin-editor .lp-box-data-content{padding:0}#learn-press-admin-editor-metabox-settings{margin-top:20px}#course-editor .inside{margin:0;padding:0}#admin-editor-lp_course .lp-course-curriculum .heading{display:flex;flex-direction:row;flex-wrap:nowrap;position:relative;padding:8px 20px;align-items:center;line-height:1}#admin-editor-lp_course .lp-course-curriculum .heading h4{margin:0;font-size:1rem}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections{display:flex;width:40px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.close::before{content:\"\\f140\"}#admin-editor-lp_course .lp-course-curriculum .heading .collapse-sections.open::before{content:\"\\f142\"}#admin-editor-lp_course .lp-course-curriculum .heading .status{visibility:hidden;position:relative;top:5px;margin-right:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .heading .status::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .heading .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_course .lp-course-curriculum .curriculum-sections{margin:0;margin:0 20px 20px 20px;border:1px solid #ddd}#admin-editor-lp_course .lp-course-curriculum .section{margin:0;border-bottom:1px solid #e5e5e5;opacity:1;background:#fff}#admin-editor-lp_course .lp-course-curriculum .section:first-child{border-top:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section{margin-top:1px;border:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section form{margin:0}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head{background-color:#f4fcff}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable{position:relative;top:1px}#admin-editor-lp_course .lp-course-curriculum .section.new-section .section-head .creatable::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section{position:relative}#admin-editor-lp_course .lp-course-curriculum .section.empty-section::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-head .movable::before{display:inline-block;color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section.empty-section .section-collapse{display:none}#admin-editor-lp_course .lp-course-curriculum .section:hover .section-actions .remove{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section input{background-color:transparent;box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section input:focus{box-shadow:none}#admin-editor-lp_course .lp-course-curriculum .section .section-head{display:flex;position:relative;height:42px;margin:0;padding:0;background-color:#f4fcff;line-height:2.5rem;transition:background 500ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable,#admin-editor-lp_course .lp-course-curriculum .section .section-head .creatable{display:inline-block;width:40px;margin:0;color:#999;font-family:Dashicons;font-size:1.25rem;text-align:center;vertical-align:middle}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable{margin-left:-1px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable::before{content:\"\\f333\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .movable:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .section-item-counts{line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions{height:100%;color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions>*{display:inline-block;height:100%;text-align:center;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse:hover{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse::before{display:inline-block;width:40px;color:#999;font-family:Dashicons;font-size:1rem;line-height:2.5rem}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.open::before{content:\"\\f343\"}#admin-editor-lp_course .lp-course-curriculum .section .section-head .actions .collapse.close::before{content:\"\\f347\"}#admin-editor-lp_course .lp-course-curriculum .section .name{width:100%;border:0;color:#777;font-size:1.5rem;font-weight:600;line-height:3.125rem}#admin-editor-lp_course .lp-course-curriculum .section .name:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section .section-collapse{overflow:hidden}#admin-editor-lp_course .lp-course-curriculum .section .section-content{padding:20px;border-top:1px solid #e5e5e5}#admin-editor-lp_course .lp-course-curriculum .section .details{margin-bottom:20px}#admin-editor-lp_course .lp-course-curriculum .section .title-input{padding-right:0;border:0;font-size:1.2em;line-height:1.875rem;flex:1}#admin-editor-lp_course .lp-course-curriculum .section .description-input{width:100%;margin:0;padding:0;border:0;color:#999}#admin-editor-lp_course .lp-course-curriculum .section .description-input:focus{color:#444}#admin-editor-lp_course .lp-course-curriculum .section-list-items{width:100%;border-collapse:collapse}#admin-editor-lp_course .lp-course-curriculum .section-list-items ul{position:relative;min-height:5px;margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item{display:flex;position:relative;margin:0;border:1px solid #eee;border-bottom-width:0;background:#fff;transition:background 200ms ease-out;justify-content:center;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.ui-sortable-helper{border-bottom:1px solid #eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:nth-child(2n+1){background-color:#f7f7f7}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.updating::before{position:absolute;z-index:2;top:0;left:0;bottom:0;right:0;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.removing{background-color:#ffeded}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag{height:20px;padding-top:3px;padding-right:6px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;fill:#999;flex:0 0 18px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .drag:hover{fill:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{display:flex;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title{margin-left:120px;margin-right:2px;flex-grow:1;flex-basis:100%}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .title input{color:inherit}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{display:flex;position:absolute;top:0;left:2px;bottom:0;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions{margin:0}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions>*{visibility:hidden;margin-left:10px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .edit{text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .actions .remove{color:#a00}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .drag{visibility:visible}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:not(.lp_lesson) .item-actions .actions .preview-item{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item{display:flex;position:relative;border-bottom-width:1px;transition:all 200ms ease-out;align-items:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag{display:flex;width:30px;color:#999;font-family:Dashicons;font-size:1rem;vertical-align:middle;cursor:default;align-items:center;justify-content:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .drag::before{content:\"\\f132\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .title{display:inline-block;margin:0;flex:1}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus{background-color:#fff}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:hover .type,#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types:focus .type{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type{display:inline-block;padding:8px 5px;color:#ccc}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type input{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.current{color:#0085ba}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type::before{position:relative;top:2px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz{padding:8px 0 8px 6px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_quiz::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.lp_lesson::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .new-section-item .types .type.empty-item::before{content:\"\\f463\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions{text-align:left}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action{display:inline-block;position:relative;width:30px;height:30px;margin:0;padding:0;text-align:center;vertical-align:middle;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a{width:30px;height:30px;color:#999;line-height:1.875rem}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action>a:hover{color:#0073aa}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item>a:hover{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul{display:none;position:absolute;z-index:9;top:100%;left:0;width:165px;margin:0;border:1px solid #999;background:#fdfeff;text-align:center}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li{margin:0;border-bottom:1px solid #eee;text-align:left}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a{display:block;padding:10px 25px;color:#757575;font-size:.75rem;text-decoration:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li a.delete-permanently{color:#e74c3c}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item ul li:hover{background:#eee}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .item-actions .actions .action.delete-item:hover ul{display:block}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item:hover .item-actions .actions>*{visibility:visible;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_quiz .icon::before{content:\"\\f469\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.lp_lesson .icon::before{content:\"\\f330\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item{position:relative;color:#a2a2a2}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .item-actions{display:none}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item.empty-item .icon::before{color:#a2a2a2;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon{color:#0085ba;font-size:1.25rem;text-align:center;flex:0 0 29px}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item .icon::before{font-family:Dashicons}#admin-editor-lp_course .lp-course-curriculum .section-list-items .section-item input{width:100%;padding:8px 0 8px 10px;border:0;color:inherit;font-size:.875rem;font-weight:600}#admin-editor-lp_course .lp-course-curriculum .section-actions{padding:0 20px 20px 20px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove{display:none;float:left;height:30px;border:1px solid #eee;border-radius:3px;color:#e74c3c;line-height:1.875rem;cursor:pointer}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .icon{padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove .confirm{display:none;padding:0 18px}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .confirm{display:inline-block}#admin-editor-lp_course .lp-course-curriculum .section-actions .remove.confirm .icon{display:none}#admin-editor-lp_course .lp-course-curriculum .ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating{top:40px;right:100px;opacity:.8;background:#a00}.wp-admin.post-type-lp_course #meta-box-tab-course_payment .learn-press-tip-floating::before{top:-7px;border:7px solid transparent;border-top-width:0;border-bottom-color:#a00}.section-item-counts{margin:0;margin-right:auto;font-size:.75rem;white-space:nowrap}.section-item-counts span{color:#999}#course-editor{margin-bottom:10px}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#course-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-right:0}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-label{display:none}#quiz-editor .inside .rwmb-custom_html-wrapper>.rwmb-input{margin-right:0}#quiz-editor .inside{margin:0;padding:0}#admin-editor-lp_quiz{margin:0;padding:0;border:0}#admin-editor-lp_quiz form{margin:0}#admin-editor-lp_quiz .lp-box-data-head{display:flex;flex-direction:row;margin:0;padding:6px 20px;align-items:center}#admin-editor-lp_quiz .lp-box-data-head h3{padding:0}#admin-editor-lp_quiz .lp-box-data-head .status{visibility:hidden;position:relative;top:5px;margin-right:10px;font-family:Dashicons;font-size:1.25rem}#admin-editor-lp_quiz .lp-box-data-head .status::before{content:\"\\f463\"}#admin-editor-lp_quiz .lp-box-data-head .status.loading{display:inline-block;visibility:visible;animation:rotation 2s infinite linear}#admin-editor-lp_quiz .lp-box-data-head .collapse-list-questions{display:flex;width:40px;height:30px;color:#999;font-family:Dashicons;font-size:1.875rem;cursor:pointer;justify-content:center;align-items:center}#admin-editor-lp_quiz .lp-box-data-content{margin:20px;margin-top:0;border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions{border-collapse:collapse;color:#777}@media(max-width:1560px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .fill_in_blanks .question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row{display:flex;flex-direction:row;text-align:center;align-items:center}@media(max-width:1024px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row.question-settings{flex-direction:column}}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>*{width:100%;padding:12px 8px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort{position:relative;color:#999;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default;flex:0 0 15px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.sort:hover{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order{padding:12px 0;color:#32373c;font-size:1.2em;text-align:right;flex:0 0 25px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.order::after{content:\".\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type{display:inline-flex;position:relative;width:125px;height:32px;padding:0;border-radius:2px;background-color:#eee;box-shadow:0 0 2px rgba(0,0,0,0.22);line-height:2rem;cursor:pointer;flex:0 0 auto;align-items:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a{display:inline-flex;width:100%;padding:0 10px;color:#666;text-align:center;cursor:pointer;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type>a::after{margin-right:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul{visibility:hidden;position:absolute;z-index:9999;top:100%;left:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;opacity:1;background:#fdfeff;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a{display:block;min-width:110px;padding:10px 20px;color:#757575;line-height:1.25rem;text-align:left;white-space:nowrap;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li a:hover{background-color:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type ul li.disabled{opacity:.4;background-color:#fff;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.type:hover ul{visibility:visible;opacity:1;pointer-events:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.actions{width:300px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row>.name{padding-right:5px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row:hover>.sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .table-row .actions .lp-box-data-actions{text-align:left !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header{display:none;border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>*{font-weight:bold}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.order::after{content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .header .table-row>.actions{padding:12px 0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-actions .name input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings{padding:0 20px;border:1px solid #ddd;border-left:0;border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings>*{padding:20px 0 20px 20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .sort{width:12px;padding:8px 6px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-text{width:calc(100% - 100px);padding-right:0;color:#444;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .order{width:10px;padding:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .answer-correct{width:65px;color:#444;font-weight:600;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions{padding:0;text-align:left}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options .actions .lp-toolbar-btn{height:42px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr{border:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td{position:static;padding:0 10px;border:0;background:inherit}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.sort{width:12px;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-text{padding-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr td.answer-correct{text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr .svg-icon{height:18px;vertical-align:middle;fill:#999}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .svg-icon{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr:hover .sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper{border-left:0;border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.ui-sortable-helper td.sort{border-right:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort i{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option .sort::before{display:inline-block;position:absolute;top:12px;right:4px;font-family:Dashicons;font-size:1.125rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody tr.empty-option td::after{position:absolute;top:0;left:1px;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-settings .quiz-question-data table.lp-list-options tbody .answer-text input{width:100%;padding:0;border:0;color:#777;background:transparent;box-shadow:none;font-size:.875rem;font-weight:normal}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item{border-bottom:1px solid #ddd;background:#f4fcff;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-helper{border-top:1px solid #f1f1f1}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.ui-sortable-placeholder{display:block;visibility:visible !important;border-color:#bdf4fe !important;background:#bdf4fe !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating{position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort .fa,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort .fa{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-actions .sort::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating .question-actions .sort::after{display:inline-block;position:absolute;right:5px;font-family:Dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question::after,#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.updating::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.empty-question .question-settings{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .cell{padding:10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .name input{width:100%;padding:0;border:0;color:#32373c;background:transparent;box-shadow:none;font-size:1.2em;font-weight:normal;line-height:1.125rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons{display:grid;position:static;z-index:10;height:100%;text-align:left;grid-template-columns:30px 30px 30px 40px;align-items:center;justify-content:end}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons>div a{visibility:hidden}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn .lp-btn-icon{position:absolute;z-index:2;top:50%;right:50%;width:28px;height:30px;margin-top:-15px;margin-right:-15px;line-height:1.875rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul{z-index:9}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a{padding:8px 24px;line-height:1.5rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-toolbar-btn ul a.remove{border-bottom:1px solid #eee;color:#666}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle{width:40px;height:42px;padding-left:0;font-family:Dashicons;font-size:1.25rem;line-height:2.625rem}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.open::after{content:\"\\f343\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions .actions .lp-toolbar-buttons .lp-btn-toggle.close::after{content:\"\\f347\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-actions:hover .lp-toolbar-buttons>div a{visibility:visible}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings{background:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options{padding-left:0;padding-right:0;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside{margin:0;padding:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field{margin:0;padding:20px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-field:nth-child(2n+1){background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .inside .lp-quiz-editor__detail-label{margin:0;margin-bottom:10px;color:#666;font-weight:600}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox{border:1px solid #ddd}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .hndle{font-weight:600;cursor:default}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle{float:left;position:absolute;top:0;left:0;width:36px;height:36px;line-height:2.25rem;text-align:center;cursor:pointer}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings .quiz-question-options .postbox .toggle::after{font-family:Dashicons;font-size:1.125rem;content:\"\\f460\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .quiz-question-options{width:38px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox{min-width:34px;height:34px;line-height:2.625rem;text-align:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .hndle{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item .question-settings.closed .postbox .toggle::after{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .main .question-item.sorting_choice .quiz-question-data table.lp-list-options .answer-correct{display:none !important}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer{margin-top:-1px;border-top:1px solid #ddd;background:#f4fcff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row{height:auto;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle{display:flex;width:30px;padding:8px 10px 8px 6px;color:#999;font-family:Dashicons;font-size:1.25rem;vertical-align:middle;align-items:center;justify-content:center}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .lp-sortable-handle::before{content:\"\\f132\"}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .order{padding:8px 0;line-height:1.75rem;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question{padding:8px 5px 8px 10px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title{display:inline-block;position:relative;min-width:500px}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input{width:100%;margin:0;padding:6px 0;border:0;background:transparent;font-size:1.2em;line-height:1.125rem;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input:focus{color:#32373c}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .title form input::placeholder{display:inline-block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new{display:inline;position:relative}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types{display:none;position:absolute;z-index:9999999;top:100%;left:-2px;width:200px;margin:6px;border:1px solid #999;background-color:#fff}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li{margin:0}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a{display:block;padding:12px 20px;outline:0;color:#757575;box-shadow:none;line-height:1;text-decoration:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li a:hover{background:#eee}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new ul.question-types li.disabled{opacity:.5;background-color:#eee;user-select:none;pointer-events:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button:hover+.question-types{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button+.question-types:hover{display:block}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .add-new button[disabled=disabled]:hover+.question-types{display:none}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question .select-item{display:inline}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .footer .table-row .add-new-question button{height:30px;box-shadow:0 1px 0 #ccc !important}#admin-editor-lp_quiz .lp-box-data-content .question-button-actions{text-align:right}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-label{display:none}#question-editor .inside .rwmb-custom_html-wrapper .rwmb-input{margin-right:0}#question-editor .inside{margin:0;padding:0}#admin-editor-lp_question{margin:0;padding:0;border:0;background:#fff}#admin-editor-lp_question form{margin:0}#admin-editor-lp_question .lp-box-data-head{display:flex;flex-direction:row;padding:10px 20px;align-items:center}#admin-editor-lp_question .lp-box-data-head .heading{margin:0;padding:0;flex:1}#admin-editor-lp_question .lp-box-data-head .lp-question-editor{position:relative;margin-right:auto;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a{display:inline-flex;height:32px;padding:0 16px;border:1px solid #999;border-radius:2px;color:#666;line-height:2rem;text-decoration:none;align-items:center;cursor:pointer;user-select:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types>a::after{margin-right:5px;font-family:Dashicons;font-size:.875rem;line-height:1.875rem;content:\"\\f347\"}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul{display:none;position:absolute;z-index:9999;top:100%;left:0;height:auto;margin:0;margin-top:-1px;border:1px solid #999;border-radius:2px;background:#fdfeff}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li{margin:0}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li:hover,#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.active{background:#eee}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li a{display:block;min-width:110px;padding:10px;color:#757575;font-size:.75rem;text-align:left;white-space:nowrap;text-decoration:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled{opacity:.4}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul li.disabled a{color:#999;cursor:not-allowed;pointer-events:none}#admin-editor-lp_question .lp-box-data-head .lp-question-editor .question-types ul:hover{display:block}#admin-editor-lp_question .lp-box-data-head .lp-question-editor:hover .question-types ul{display:block}#admin-editor-lp_question .lp-box-data-content{padding:0 20px 20px 20px;border:none !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers{width:100%;border:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tr td{padding:0 15px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th{padding:15px;border-bottom:1px solid #ddd;background-color:#eee;font-weight:600}#admin-editor-lp_question .lp-box-data-content table.list-question-answers thead tr th.answer-text{padding-right:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order,#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{width:10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .sort{padding:0 10px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .order{width:10px;padding:0;text-align:left}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-correct{width:65px;text-align:center}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .answer-text{padding-right:8px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers .actions{padding-left:0;text-align:left}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr{color:#444;background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:nth-child(2n){background:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td{background-color:#fff}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort{width:15px;padding:0;font-size:1.125rem;text-align:center;cursor:url(\"..\u002F..\u002Fimages\u002Fopenhand.cur\") 7 5,default}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort .svg-icon{height:18px;margin-top:-2px;vertical-align:middle;fill:#999}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.sort:hover .svg-icon{fill:#0085ba}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.order{font-size:.875rem}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.answer-text input{width:100%;padding:0;border:0;color:#444;background:transparent;box-shadow:none;font-size:.875rem;font-weight:600;transition:box-shadow .2s ease}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr td.lp-toolbar-buttons{z-index:auto}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr:hover td.actions .remove-answer{visibility:visible;height:42px}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder{visibility:visible !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-placeholder td{height:43px;background:#bdf4fe !important}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td{border-bottom:1px solid #ddd}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.ui-sortable-helper td.sort{border-right:0}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .svg-icon{display:none}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td{position:relative}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option .sort::before{display:inline-block;position:absolute;top:8px;right:10px;font-family:\"Dashicons\";content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#admin-editor-lp_question .lp-box-data-content table.list-question-answers tbody tr.new-option td::after{position:absolute;top:0;left:0;bottom:0;right:0;opacity:.5;background:#fff;content:\"\"}#admin-editor-lp_question .lp-box-data-content .add-answer{margin:15px 0 0 0}#admin-editor-lp_question.sorting_choice table.list-question-answers .answer-correct{display:none !important}.lp-admin-fib-question-editor,.admin-quiz-fib-question-editor{text-align:right}.lp-admin-fib-question-editor .lp-box-data-content,.admin-quiz-fib-question-editor .lp-box-data-content{margin:0 !important;border:none !important}.lp-admin-fib-question-editor .content-editable,.admin-quiz-fib-question-editor .content-editable{min-height:240px !important;padding:12px 15px;border:2px solid #ddd;border-radius:4px}.lp-admin-fib-question-editor .content-editable .fib-blank,.admin-quiz-fib-question-editor .content-editable .fib-blank{position:relative;color:#2196f3}.lp-admin-fib-question-editor .content-editable .fib-blank::before,.admin-quiz-fib-question-editor .content-editable .fib-blank::before{content:\"#\" attr(data-index) \". \"}.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{min-width:700px;border-collapse:collapse}@media(max-width:1024px){.lp-admin-fib-question-editor .fib-blanks,.admin-quiz-fib-question-editor .fib-blanks{width:100%;min-width:100%}}.lp-admin-fib-question-editor .fib-blanks tbody,.admin-quiz-fib-question-editor .fib-blanks tbody{border-bottom:1px solid #bbb}.lp-admin-fib-question-editor .fib-blanks tbody tr,.admin-quiz-fib-question-editor .fib-blanks tbody tr{background:#eee}.lp-admin-fib-question-editor .fib-blanks tbody tr td,.admin-quiz-fib-question-editor .fib-blanks tbody tr td{padding:5px}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options td,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options td{padding:0}.lp-admin-fib-question-editor .fib-blanks tbody tr.blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody tr.blank-options ul{display:none;margin:5px 0;padding:20px;border:1px solid #ddd;background:#fff;list-style:none}.lp-admin-fib-question-editor .fib-blanks tbody.open .blank-options ul,.admin-quiz-fib-question-editor .fib-blanks tbody.open .blank-options ul{display:block}.lp-admin-fib-question-editor .fib-blanks tbody .blank-position,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-position{font-weight:600;text-align:center}.lp-admin-fib-question-editor .fib-blanks tbody .blank-actions,.admin-quiz-fib-question-editor .fib-blanks tbody .blank-actions{text-align:left}.lp-admin-fib-question-editor .fib-blanks tbody:last-child,.admin-quiz-fib-question-editor .fib-blanks tbody:last-child{border:0}#fill-in-blanks-editor{display:flex}#fill-in-blanks-editor .blank-options{flex:0 0 65%}#fill-in-blanks-editor .blanks{width:100%;margin:0}#fill-in-blanks-editor .blanks .blank{margin:0 0 20px 0;padding:20px;border:1px solid #d9e0f1;background:#fbfcff}#fill-in-blanks-editor .blanks .blank label{font-weight:bold}#fill-in-blanks-editor .blanks .blank .blank-content{width:100%;min-height:74px;font-size:1rem}#fill-in-blanks-editor .blanks .blank .blank-words .word{background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks .blank .blank-words .word.correct{background:#00a1e6}#fill-in-blanks-editor .blanks .blank .blank-tip p{font-style:italic}#fill-in-blanks-editor .blanks .blank .button-remove{color:red}#fill-in-blanks-editor .passage-preview{margin-right:20px;padding:15px 20px;border:1px solid #ddd;font-size:1rem;line-height:1.5rem;text-align:justify;flex:1}#fill-in-blanks-editor .passage-preview .blank-input{display:inline-block;position:relative;width:50px;height:16px;margin:-2px 10px;padding:0;border:0;border-bottom:1px dashed #ddd;background:transparent;box-shadow:none;font-size:1rem;vertical-align:middle}#fill-in-blanks-editor .blanks-list{width:100%}#fill-in-blanks-editor .blanks-list textarea{width:100%;min-height:300px;margin-bottom:20px;outline:0;background:#f9f9f9;box-shadow:none;font-size:1.125rem;line-height:1.875rem}#fill-in-blanks-editor .blanks-list code{line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#fill-in-blanks-editor .blanks-list code.correct{background:#00a1e6}#lp-modal-choose-items{display:none;position:fixed;z-index:-1;top:0;left:0;bottom:0;right:0;opacity:0;background-color:rgba(0,0,0,0.5)}#lp-modal-choose-items.show{display:block;z-index:99999999;opacity:1}#lp-modal-choose-items.loading .lp-choose-items ul.list-items::before{display:block;position:absolute;z-index:9;top:0;left:0;bottom:0;right:0;background:url(\"..\u002F..\u002Fimages\u002Fspinner.gif\") no-repeat center center;background-color:#fff;content:\"\"}#lp-modal-choose-items .lp-choose-items{position:relative;max-width:800px;margin:5% 20% 10% auto;border:1px solid #ddd;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);transition:all 200ms ease-out}#lp-modal-choose-items .lp-choose-items.show-preview .header .preview-title{display:flex;align-items:center}#lp-modal-choose-items .lp-choose-items .header{position:relative}#lp-modal-choose-items .lp-choose-items .header .preview-title{display:none;position:absolute;z-index:10;top:0;left:0;bottom:0;right:0;padding-right:20px;border-bottom:1px solid #ddd;background-color:#fff;font-weight:600}#lp-modal-choose-items .lp-choose-items .header .preview-title h3{margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs{margin:0;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .header .tabs .tab{display:inline-block;position:relative;margin:0}#lp-modal-choose-items .lp-choose-items .header .tabs .tab:not(:last-child)::before{position:absolute;top:50%;left:0;height:44px;margin-top:-22px;border-left:1px solid #ddd;content:\"\"}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active::after{display:inline-block;position:absolute;bottom:-6px;right:50%;width:10px;height:10px;margin-right:-6px;border:1px solid #ddd;border-left:0;border-bottom:0;background:#fff;content:\"\";transform:rotate(-45deg)}#lp-modal-choose-items .lp-choose-items .header .tabs .tab.active a{color:#0073aa}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a{display:inline-block;height:44px;padding:0 20px;color:#333;font-weight:600;line-height:2.75rem;text-decoration:none}#lp-modal-choose-items .lp-choose-items .header .tabs .tab a:focus{box-shadow:none}#lp-modal-choose-items .lp-choose-items .header .close{display:inline-block;position:absolute;z-index:30;top:0;left:0;padding:12px;font-size:1em;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main{overflow:hidden;position:relative;padding:20px;border-bottom:1px solid #ddd}#lp-modal-choose-items .lp-choose-items .main .section-item{display:block;overflow:hidden;max-width:100%;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:color 200ms ease-out}#lp-modal-choose-items .lp-choose-items .main .section-item::before{position:relative;top:3px;font-family:Dashicons}#lp-modal-choose-items .lp-choose-items .main .search{margin-bottom:20px;background:transparent}#lp-modal-choose-items .lp-choose-items .main .search input.modal-search-input{width:100%;height:36px;padding:0 14px;font-size:1rem;line-height:2.25rem}#lp-modal-choose-items .lp-choose-items .main .list-items{overflow-y:auto;position:relative;min-height:260px;max-height:460px;margin:0}#lp-modal-choose-items .lp-choose-items .main .list-items li{margin:15px 0;cursor:pointer}#lp-modal-choose-items .lp-choose-items .main .pagination .index{margin-right:20px;line-height:1.75rem}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview{overflow:auto;position:absolute;z-index:2;top:0;left:0;bottom:0;right:0;max-height:420px;padding:20px;background-color:#fff;transform:translate(-100%,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview.show{transform:translate(0,0)}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li{margin:15px 0}#lp-modal-choose-items .lp-choose-items .lp-added-items-preview .list-added-items li:first-child{margin:-10px 0 15px 0}#lp-modal-choose-items .lp-choose-items .footer{padding:20px}body.lp-item-moving{cursor:url(\"..\u002F..\u002Fimages\u002Fclosedhand.cur\") 7 5,default !important}@media screen and (max-width:900px){#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row{display:block;width:auto;text-align:right}#admin-editor-lp_quiz .lp-box-data-content .lp-list-questions .question-settings.table-row>*{width:auto}}#learn-press-reset-course-users,#learn-press-reset-user-courses,#learn-press-reset-user-item{max-width:100%}#learn-press-reset-course-users table,#learn-press-reset-user-courses table,#learn-press-reset-user-item table{width:100%;border-collapse:collapse}#learn-press-reset-course-users .courses-list,#learn-press-reset-user-courses .courses-list,#learn-press-reset-user-item .courses-list{margin:0}#learn-press-reset-course-users input[type=text],#learn-press-reset-user-courses input[type=text],#learn-press-reset-user-item input[type=text]{min-width:300px;height:28px;margin-right:0}#learn-press-reset-course-users .action-reset.dashicons-trash,#learn-press-reset-user-courses .action-reset.dashicons-trash,#learn-press-reset-user-item .action-reset.dashicons-trash{color:red}#learn-press-reset-course-users .action-reset.dashicons-update,#learn-press-reset-user-courses .action-reset.dashicons-update,#learn-press-reset-user-item .action-reset.dashicons-update{-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-assign-course .description{margin-bottom:10px}#learn-press-assign-course label{display:block;margin-bottom:5px}#learn-press-unassigned-course .description{margin-bottom:10px}#learn-press-unassigned-course label{display:block;margin-bottom:5px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}.lp-group-step{border-bottom:1px solid #eee}.lp-group-step h3{padding:0 2em}.lp-group-step label{margin-bottom:5px;font-size:.8em;font-weight:500;font-style:italic}.lp-group-step .lp-item-step{display:flex;position:relative;min-height:35px;margin:0;padding:1em 0 1em 1em;border-top:1px solid #eee;align-items:center;cursor:pointer}.lp-group-step .lp-item-step:hover{background:#eee}.lp-group-step .lp-item-step.running .lp-item-step-left::before{opacity:1}.lp-group-step .lp-item-step.running .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.running::before{display:block;position:absolute;width:0;height:100%;background:#0073aa;content:\"\";opacity:.1;transition:.8s linear}.lp-group-step .lp-item-step.running .progress-bar{opacity:.1}.lp-group-step .lp-item-step.completed .lp-item-step-left::after{opacity:1}.lp-group-step .lp-item-step.completed .lp-item-step-left input{opacity:0}.lp-group-step .lp-item-step.completed .progress-bar{width:100%;opacity:.1}.lp-group-step .lp-item-step.error .lp-item-step-left::after{opacity:1;color:#d33;content:\"\\f335\"}.lp-group-step .lp-item-step .progress-bar{display:block;position:absolute;top:0;right:0;width:0;height:100%;opacity:0;background:rgba(124,96,217,0.7490196078);transition:.8s linear}.lp-group-step .lp-item-step-left{display:inline-flex;align-items:center;position:relative;padding:0 2em}.lp-group-step .lp-item-step-left::before{display:block;position:absolute;z-index:2;width:1em;height:1em;border:1px solid rgba(0,0,0,0.1);border-top:1px solid #3498db;border-radius:50%;opacity:0;content:\"\";-webkit-animation:lp-rotating .8s linear infinite;animation:lp-rotating .8s linear infinite}.lp-group-step .lp-item-step-left::after{position:absolute;z-index:1;right:23px;opacity:0;color:#4caf50;font-family:Dashicons;font-size:1.5em;content:\"\\f147\"}.lp-group-steps-done{display:none}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media screen and (max-width:782px){.learn-press-dropdown-pages .select2-container{vertical-align:top}.learn-press-dropdown-pages .select2-container .select2-selection--single{height:31px}.learn-press-dropdown-pages .select2-selection__rendered{line-height:31px !important}#learn-press-advertisement{margin:0 12px;padding-bottom:0}#learn-press-advertisement .slider-controls{bottom:40px}}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-admin-statistics-tab-content{box-sizing:border-box;max-width:100%}.lp-admin-statistics-tab-content .btn-group{display:flex;margin:20px 0;gap:10px;flex-direction:row;flex-wrap:wrap}.lp-admin-statistics-tab-content .btn-group button.btn-filter-time{border:1px solid #284bca;color:#000;padding:10px 24px;cursor:pointer;background:#fff}.lp-admin-statistics-tab-content .btn-group .btn-filter-time.active{background:#284bca;color:#fff;border:1px solid #284bca}.lp-admin-statistics-tab-content .custom-filter-time{display:none}.lp-admin-statistics-tab-content .statistics-content{background:white;border:1px solid #d9d9d9;padding:22px}.lp-admin-statistics-tab-content .statistics-content .statistics-group{display:flex;justify-content:space-between;flex-direction:row;flex-wrap:wrap;gap:10px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item{border:1px solid #000;color:#000;padding:15px 30px;display:flex;flex-direction:column;text-align:center;width:100%;max-width:150px}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-title{font-size:16px;line-height:1.2}.lp-admin-statistics-tab-content .statistics-content .statistics-group .statistics-item .statistics-item-count{font-size:24px;line-height:1.2;font-weight:700}.lp-admin-statistics-tab-content .statistics-content .statistics-title{color:#000;text-align:center;font-size:24px;font-style:normal;font-weight:700;line-height:normal;text-transform:capitalize}.lp-admin-statistics-tab-content .statistics-content .statistics-chart-wrapper{padding:10px 30px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;gap:20px;margin-top:20px}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50{flex:1}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics .col-50:first-child{border-left:1px solid #d9d9d9}.lp-admin-statistics-tab-content .statistics-content .sold-course-analytics li{font-size:16px;line-height:1.2;font-weight:400}.lp-admin-statistics-tab-content .statistics-content .top-course-analytics-title{margin-top:0;font-size:24px;line-height:1.2;font-weight:700}table.lp-material--table{border-collapse:collapse;width:100%}table.lp-material--table td,table.lp-material--table th{border:1px solid #ddd;text-align:right;padding:8px}table.lp-material--table thead.hidden{display:none}table.lp-material--table td.sort{cursor:move}table.lp-material--table tr:nth-child(even){background-color:rgba(221,221,221,0.2509803922)}.lp-material--field-wrap{display:flex;flex-direction:row;align-items:center;padding-block:5px}.lp-material--field-wrap label{min-width:70px}.lp-material--group{margin-top:10px;padding:10px;border:1px solid #dedede;border-radius:10px;box-shadow:-2px 2px rgba(180,180,180,0.2)}.lp-material-btn-wrap{margin-bottom:10px}.lp-material-btn-wrap.loading::before:before,#btn-lp--save-material.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.button.lp-material--delete{color:white;border-color:red;background:red;vertical-align:top}.lp-material--field-wrap.field-action-wrap{display:flex;justify-content:space-between}.lp-meta-box .lp-material--field-wrap input{width:100%}#available-to-upload{font-weight:bold}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-right:1px solid var(--lp-border-color,#e2e0db);padding-right:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-right:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 20px 0 45px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:16px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-right:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-right:16px;padding-left:16px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 20px 12px 45px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;left:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-right:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-right linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:left;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-right:0;margin-left:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-ico svg{width:20px;height:20px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}[class*=wp-block-learnpress] img,.block-editor-block-list__block img{max-width:100%;height:auto}[class*=wp-block-learnpress] .info-meta-item,.block-editor-block-list__block .info-meta-item{display:flex;gap:4px;flex-wrap:wrap}[class*=wp-block-learnpress] .info-meta-item i,.block-editor-block-list__block .info-meta-item i{color:var(--lp-primary-color,#ffb606)}[class*=wp-block-learnpress] .info-meta-left,.block-editor-block-list__block .info-meta-left{display:flex;gap:8px;align-items:center;letter-spacing:0}[class*=wp-block-learnpress] a,.block-editor-block-list__block a{text-decoration:none}.wp-block-learnpress-course-image{overflow:hidden}.wp-block-learnpress-course-instructor>div>*,.wp-block-learnpress-course-categories>div>*{display:inline;vertical-align:middle}.wp-block-learnpress-breadcrumb ul{margin:0 auto;list-style:none;padding:0}.wp-block-learnpress-breadcrumb li{display:inline-block;margin:0}.wp-block-learnpress-breadcrumb i{margin:0 8px}.wp-block-learnpress-breadcrumb a{color:inherit}.courses-btn-load-more{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);font-size:var(--lp-font-size-base,1em);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center;cursor:pointer;margin:20px auto}.courses-btn-load-more:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}.lp-modal-dialog .lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp-modal-dialog .lp_allow_repurchase_select>ul{margin:0;padding:0;list-style:none}.lp-modal-dialog .lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp-modal-dialog .lp-button{cursor:pointer;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-modal-dialog .lp-button.loading{pointer-events:none;opacity:.8}.lp-modal-dialog .lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-modal-dialog .lp-button:hover{border-color:var(--lp-primary-color,#ffb606);color:#fff;background:var(--lp-primary-color,#ffb606)}.lp-button.btn-finish-course{cursor:pointer;width:100%;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.lp-button.btn-finish-course:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.lp-button.btn-finish-course.loading{pointer-events:none;opacity:.8}.lp-button.btn-finish-course.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}.c-gap-4{column-gap:4px}.wp-block-learnpress-course-feature-review .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}[class^=wp-block-learnpress] .extra-box ul{margin:0 20px 0 0;padding:0}.wp-block-learnpress-course-button-read-more,.wp-block-learnpress-course-button{cursor:pointer;padding:12px 24px;background-color:var(--lp-primary-color,#ffb606);border-width:0;border-radius:var(--lp-border-radius,5px);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);font-size:var(--lp-font-size-base,1em);text-align:center;text-decoration:none;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-button-read-more:hover,.wp-block-learnpress-course-button:hover{background-color:var(--lp-secondary-color,#442e66);border-color:var(--lp-secondary-color,#442e66)}.wp-block-learnpress-course-button-read-more.loading,.wp-block-learnpress-course-button.loading{pointer-events:none;opacity:.8}.wp-block-learnpress-course-button-read-more.loading:before,.wp-block-learnpress-course-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}@media(min-width:992px){.lp-block-course-sidebar{margin-top:-260px;margin-block-start:-260px !important}}.wp-block-learnpress-item-search .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}.wp-block-learnpress-item-search .search-course input[name=s]{display:block;width:100%;margin-right:30px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{color:#999}.wp-block-learnpress-item-search .search-course input[name=s]::-webkit-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-ms-input-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:-moz-placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]::placeholder{font-style:italic}.wp-block-learnpress-item-search .search-course input[name=s]:focus{outline:0}.wp-block-learnpress-item-search .search-course button{position:absolute;top:0;left:10px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none}.wp-block-learnpress-item-search .search-course button:focus{outline:0}.wp-block-learnpress-item-search .search-course button i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-search .search-course button.clear{display:none}.wp-block-learnpress-item-search .search-course button.clear::before{content:\"\\f00d\"}.wp-block-learnpress-course-material .lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);margin-top:20px;-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.wp-block-learnpress-course-material .course-material-table{width:100%;display:table;border-spacing:0;border-collapse:collapse}.wp-block-learnpress-course-material .course-material-table tbody tr:nth-child(even) td,.wp-block-learnpress-course-material .course-material-table .learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.wp-block-learnpress-course-material .course-material-table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.wp-block-learnpress-course-material .course-material-table th,.wp-block-learnpress-course-material .course-material-table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}.wp-block-learnpress-course-material .course-material-table th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-weight:600;text-align:center}.wp-block-learnpress-course-material .course-material-table th:first-child{text-align:right}.wp-block-learnpress-course-material .course-material-table tr td{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.wp-block-learnpress-course-material .course-material-table tr td:not(:first-child){text-align:center}.wp-block-learnpress-course-material .course-material-table tfoot td{text-align:right;font-weight:bold}.wp-block-learnpress-course-material .course-material-table.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}.wp-block-learnpress-item-hidden-sidebar .section-toggle{justify-content:flex-end;flex:0}.wp-block-learnpress-item-hidden-sidebar .section-toggle i{color:var(--lp-color-accent,#666)}.wp-block-learnpress-item-close .back-course{padding:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}.wp-block-learnpress-item-close .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){.wp-block-learnpress-item-close .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}.wp-block-learnpress-item-close .back-course:hover{background:transparent;opacity:1}}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:after{display:none}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}.wp-block-learnpress-item-hidden-sidebar #sidebar-toggle:focus{border:0;outline:0}.wp-block-learnpress-item-progress .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}.wp-block-learnpress-item-progress .number{padding-left:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.86)}.wp-block-learnpress-item-progress .learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color,#ffb606);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wp-block-learnpress-item-progress .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color,#ffb606);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.wp-block-learnpress-item-progress .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.wp-block-learnpress-item-navigation .course-item-nav{display:flex;justify-content:space-between}.wp-block-learnpress-item-navigation .course-item-nav .prev,.wp-block-learnpress-item-navigation .course-item-nav .next{display:flex;line-height:3.125em;flex:1;position:relative}.wp-block-learnpress-item-navigation .course-item-nav .prev span,.wp-block-learnpress-item-navigation .course-item-nav .next span{display:block;font-weight:bold}.wp-block-learnpress-item-navigation .course-item-nav .prev a,.wp-block-learnpress-item-navigation .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666);color:#999}.wp-block-learnpress-item-navigation .course-item-nav .prev::before,.wp-block-learnpress-item-navigation .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover a,.wp-block-learnpress-item-navigation .course-item-nav .prev:hover::before,.wp-block-learnpress-item-navigation .course-item-nav .next:hover a,.wp-block-learnpress-item-navigation .course-item-nav .next:hover::before{color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-item-navigation .course-item-nav .prev:hover .course-item-nav__name,.wp-block-learnpress-item-navigation .course-item-nav .next:hover .course-item-nav__name{display:block}.wp-block-learnpress-item-navigation .course-item-nav .next{text-align:left;flex-direction:row-reverse}.wp-block-learnpress-item-navigation .course-item-nav .next::before{margin-right:10px;content:\"\\f0da\"}.wp-block-learnpress-item-navigation .course-item-nav .next[data-nav=next]{justify-content:flex-end}.wp-block-learnpress-item-navigation .prev::before{margin-left:10px;content:\"\\f0d9\"}.wp-block-learnpress-item-navigation .prev .course-item-nav__name{left:auto;right:-30px}.wp-block-learnpress-item-navigation .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){.wp-block-learnpress-item-navigation .prev .course-item-nav__name{right:15px}}.wp-block-learnpress-item-navigation .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){.wp-block-learnpress-item-navigation .course-item-nav__name{top:-25px;left:15px;right:auto}}.wp-block-learnpress-item-curriculum .lp-course-curriculum__title,.wp-block-learnpress-item-curriculum .course-curriculum-info,.wp-block-learnpress-item-curriculum .course-section__description{display:none}.wp-block-learnpress-item-content .content-item-wrap{padding:0}.wp-block-learnpress-item-curriculum .lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1;flex-direction:row}.wp-block-learnpress-list-courses .learn-press-courses .course{width:unset;padding:0}.wp-block-learnpress-course-featured .course-featured{margin-bottom:0;background-color:inherit;color:inherit;padding:0}.courses-order-by,.block-courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by,.woocommerce-js .block-courses-order-by{background-position-x:calc(100% - (100% - 10px))}.courses-order-by:focus,.block-courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.course-img img{display:block}.block-search-courses{display:flex;flex:1;margin-bottom:0}.block-search-courses input{width:100%;max-width:240px;margin:0 0 0 4px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.block-search-courses input::-webkit-input-placeholder{color:#999}.block-search-courses input::-moz-placeholder{color:#999}.block-search-courses input:-ms-input-placeholder{color:#999}.block-search-courses input:-moz-placeholder{color:#999}.block-search-courses input::placeholder{color:#999}.block-search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.block-search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.block-search-courses button i{font-size:1.2em;line-height:1.2}.block-search-courses button:focus{outline:0}.block-search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}@media(max-width:767px){.wp-block-learnpress-course-search{width:100%}.wp-block-learnpress-course-search input{min-width:240px;max-width:unset}}.course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.course-filter-btn-mobile{display:none}}ul.wp-block-learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}ul.wp-block-learn-press-courses[data-layout=grid]{--columns:3;--gap:1.25em;--min-width:200px;grid-gap:var(--gap);display:grid;grid-template-columns:repeat(auto-fill,minmax(max(var(--min-width),100% \u002F var(--columns) - var(--gap) *(var(--columns) - 1) \u002F var(--columns)),1fr));margin-bottom:2.25em}@media(max-width:768px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:min(var(--columns),2)}}@media(max-width:480px){ul.wp-block-learn-press-courses .wp-block-learn-press-courses[data-layout=grid]{--columns:1}}.wp-block-learnpress-course-price .course-price .free,.wp-block-learnpress-course-price .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.wp-block-learnpress-course-price .course-price .origin-price{margin-left:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.wp-block-learnpress-course-button-read-more button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button-read-more button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.wp-block-learnpress-course-button .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.wp-block-learnpress-course-button .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.courses-order-by-wrapper .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .courses-order-by-wrapper .courses-order-by{background-position-x:calc(100% - (100% - 10px))}.courses-order-by-wrapper .courses-order-by:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.wp-block-learnpress-course-filter h3{margin-bottom:20px;margin-top:0}.wp-block-learnpress-course-filter .filter .line{height:15px;background:#ccc;margin-bottom:10px}.wp-block-learnpress-course-search-filter,.wp-block-learnpress-course-level-filter,.wp-block-learnpress-course-author-filter,.wp-block-learnpress-course-price-filter,.wp-block-learnpress-course-categories-filter,.wp-block-learnpress-course-tag-filter{margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ccc}.wp-block-learnpress-course-search-filter .lp-course-filter__field,.wp-block-learnpress-course-level-filter .lp-course-filter__field,.wp-block-learnpress-course-author-filter .lp-course-filter__field,.wp-block-learnpress-course-price-filter .lp-course-filter__field,.wp-block-learnpress-course-categories-filter .lp-course-filter__field,.wp-block-learnpress-course-tag-filter .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.wp-block-learnpress-course-search-filter label,.wp-block-learnpress-course-level-filter label,.wp-block-learnpress-course-author-filter label,.wp-block-learnpress-course-price-filter label,.wp-block-learnpress-course-categories-filter label,.wp-block-learnpress-course-tag-filter label{flex:1}.wp-block-learnpress-course-search-filter span,.wp-block-learnpress-course-level-filter span,.wp-block-learnpress-course-author-filter span,.wp-block-learnpress-course-price-filter span,.wp-block-learnpress-course-categories-filter span,.wp-block-learnpress-course-tag-filter span{color:#999}.wp-block-learnpress-course-search-filter .search-box{width:100%;height:40px;border:1px solid #ccc;border-radius:5px;margin-top:12px}.wp-block-learnpress-button-submit-filter,.wp-block-learnpress-button-reset-filter{box-sizing:border-box;text-transform:capitalize;border:1px solid #ccc;border-radius:4px;background:white;float:right;text-align:center;width:calc(50% - 8px);padding:8px 30px}.wp-block-learnpress-button-submit-filter{margin-left:4px}.wp-block-learnpress-button-reset-filter{margin-right:4px}.block-editor-block-list__block img{display:block}.block-editor-block-list__block .learn-press-courses{list-style:none;margin:0;max-width:100%;padding:0}.block-editor-block-list__block a{text-decoration:none}.block-editor-block-list__block .c-gap-4{column-gap:4px}.block-editor-block-list__block .lp-course-curriculum .course-section .course-item__right{color:inherit}.block-editor-block-list__block.wp-block-learnpress-course-title>*{margin-top:0}a.block-editor-block-list__block.wp-block-learnpress-course-button{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}a.block-editor-block-list__block.wp-block-learnpress-course-button:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 10px 0 0 !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;left:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-left:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;right:80%;transform:translateX(50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-left:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:right}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-right:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;right:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-left:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-left:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-left:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;left:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;left:0;transform:translateX(5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:right;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-left:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:left}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-right:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;right:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(-30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(-60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(-90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(-120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(-150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(-180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(-210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(-240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(-270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(-300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(-330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:right}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(-90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:left}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:right}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:right}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:right}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.button.disabled{pointer-events:none}.learnpress .postbox .rwmb-meta-box{margin-top:10px}.learnpress #field-_lp_requirements .rwmb-text-list-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{clear:none;position:relative;border:1px solid #ddd;border-radius:4px}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-label,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:none}.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-clone .rwmb-text-list-advanced,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-advanced{width:calc(100% - 65px);padding:7px 10px;border:0;color:#777;background:transparent;box-shadow:none;line-height:1}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:50%;left:41px;margin-top:-10px;border-radius:unset;color:#999;background:transparent;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone i,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone i{font-size:1.25rem}.learnpress #field-_lp_requirements .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-clone .remove-clone:hover,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone:hover{color:#e74c3c}.learnpress #field-_lp_requirements .rwmb-text-list-clone::after,.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone::after,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-clone::after,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-clone::after,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{display:inline-block;position:absolute;top:50%;left:10px;margin:8px 0 0 0;margin-top:-9px;color:#999;font-family:Dashicons;font-size:1.25rem;content:\"\\f333\"}.learnpress #field-_lp_requirements .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_target_audiences .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_key_features .rwmb-text-list-clone:focus-within,.learnpress #field-_lp_faqs .rwmb-text-list-clone:focus-within{border-color:#0085ba}.learnpress #field-_lp_requirements .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_target_audiences .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_key_features .rwmb-text-list-advanced-clone .rwmb-text-list:focus,.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list:focus{border-color:#0085ba}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone{position:relative;padding:0 0 16px 0}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list-label{display:block;padding:10px 12px 0 10px}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .rwmb-text-list{width:calc(100% - 25px);margin:0 13px 0 13px;border:1px solid #ddd;vertical-align:top}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone .remove-clone{top:20px;left:36px;margin-top:-10px;color:#999;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}.learnpress #field-_lp_faqs .rwmb-text-list-advanced-clone::after{top:20px}.lp-notice,.learn-press-notice{position:relative;padding:12px;margin:0}.lp-notice h4,.learn-press-notice h4{margin:10px 0 15px}.lp-notice p,.learn-press-notice p{margin:0 0 5px 0;padding:0 2px}.lp-notice .lp-message-dismiss,.learn-press-notice .lp-message-dismiss{position:absolute;top:12px;left:12px}.lp-notice .notice-dismiss,.learn-press-notice .notice-dismiss{position:absolute;top:0;left:1px;margin:0;padding:9px;border:0;outline:0;color:#72777c;background:100% 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;cursor:pointer}.lp-notice .notice-dismiss::before,.learn-press-notice .notice-dismiss::before{display:block;width:20px;height:20px;color:#72777c;background:100% 0;font:normal 16px\u002F20px dashicons;text-align:center;content:\"\\f153\";speak:none;-webkit-font-smoothing:antialiased}.learn-press-dropdown-pages{display:inline-block}.learn-press-dropdown-pages .list-pages-wrapper{display:flex;align-items:center;gap:10px}.lp-notice-update-database{border:1px solid rebeccapurple;border-right-color:red;border-radius:3px;color:white;background:rebeccapurple}.lp-notice-update-database.do-updating::before{display:inline-block;float:right;margin:9px -5px 0 5px;color:#2773aa;font-family:dashicons;font-size:1.25rem;content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#adminmenu .update-plugins.lp-plugins-count{padding:0 5px}.search-box input[name=post-search-author],.search-box .select2-container{min-width:200px;margin:0;vertical-align:top}.learn-press-notice-assigned-item{color:red}.learnpress .actions{margin:0}#learn-press-syncs li{position:relative}#learn-press-syncs li.syncing,#learn-press-syncs li.synced{padding-right:24px}#learn-press-syncs li.syncing input[type=checkbox],#learn-press-syncs li.synced input[type=checkbox]{display:none}#learn-press-syncs li.syncing::after{content:\"\\f463\";-webkit-animation:rotating4 2s linear infinite;-moz-animation:rotating4 2s linear infinite;-ms-animation:rotating4 2s linear infinite;-o-animation:rotating4 2s linear infinite;animation:rotating4 2s linear infinite}#learn-press-syncs li.synced::after{color:#2773aa;content:\"\\f147\"}#learn-press-syncs li::after{display:block;position:absolute;top:0;right:-3px;width:24px;height:24px;font-family:dashicons;font-size:1.1875rem;line-height:1.5rem;text-align:center}#learn-press-updater .updater-progress{position:relative;margin:0 2px}#learn-press-updater .updater-progress ul{display:flex;position:relative;height:5px;background:#eee}#learn-press-updater .updater-progress ul li{position:relative;margin:0;flex:1}#learn-press-updater .updater-progress ul li::after{display:none;position:absolute;top:-30px;left:0;padding:3px 5px;border-radius:3px;color:#fff;background:#ddd;font-size:.75rem;content:attr(data-version)}#learn-press-updater .updater-progress ul li::before{content:\"\"}#learn-press-updater .updater-progress ul li:last-child::after{_display:block}#learn-press-updater .updater-progress ul::after{position:absolute;top:0;right:0;width:0;height:20px}#learn-press-updater .updater-progress .updater-progress-status{position:absolute;top:0;right:0;width:0;height:5px;background:#5bc4f9;-webkit-transition:width .25s;-moz-transition:width .25s;-ms-transition:width .25s;-o-transition:width .25s;transition:width .25s}#learn-press-updater .updater-progress .updater-progress-status::before{position:absolute;top:-20px;left:0;padding:0 5px;border-radius:3px;color:#fff;background:#5bc4f9;font-size:.75rem;_content:attr(data-value) \"%\"}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation{overflow:hidden;position:absolute;top:0;right:0;width:100%;height:5px;background:#5bc4f9}#learn-press-updater .updater-progress .updater-progress-status .updater-progress-animation:not(.completed)::after{position:absolute;height:5px;background:#8dd9ff;content:\"\";-webkit-animation:animation4 1.5s ease-out infinite;-moz-animation:animation4 1.5s ease-out infinite;-ms-animation:animation4 1.5s ease-out infinite;-o-animation:animation4 1.5s ease-out infinite;animation:animation4 1.5s ease-out infinite}#learn-press-updater .updating-message{color:#a24666}#learn-press-updater .completed-message{color:#3c8eb7}#learn-press-updater{display:none}.select2 .select2-search.select2-search--inline{margin-bottom:0}.select2 .select2-selection .select2-selection__choice{margin-top:4px;margin-bottom:0}.select2 .select2-selection.select2-selection--multiple{min-height:30px}.list-pages-wrapper .select2-container--default .select2-selection--single .select2-selection__clear{margin:0}.edit-post-layout__metaboxes .rwmb-label>label{color:#666;font-size:small;font-weight:bold}body.post-type-lp_question #button-new-question{display:inline-block;position:relative}body.post-type-lp_question #button-new-question div{display:none;position:absolute;z-index:9999;top:100%;right:0;min-width:100px;margin:0 -1px 0 0;border:1px solid #999;background:white;font-weight:400}body.post-type-lp_question #button-new-question div a{display:block;min-width:100px;margin:0;padding:10px 20px;color:#666;white-space:nowrap;text-decoration:none}body.post-type-lp_question #button-new-question div a:hover{background:#eee}body.post-type-lp_question #button-new-question>a{position:relative;padding-left:15px;text-decoration:none}body.post-type-lp_question #button-new-question>a::after{display:inline-block;position:absolute;top:6px;left:0;width:0;height:0;margin:0;border:5px solid transparent;border-top-color:#0f7aae;content:\"\"}body.post-type-lp_question #button-new-question:hover div{display:block}.lp-label{display:inline-block;padding:3px 6px;color:#fff;font-size:.75rem;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.lp-label.success{background:#4caf50}.lp-label.error{background:red}.lp-label.warning{background:#ffc107}.lp-label .far,.lp-label .fas,.lp-label .fa{display:inline-block;margin-left:5px}.lp-admin-profile-courses .column-results{width:200px}.lp-admin-profile-courses .course-results-progress .lp-progress-row{margin:0 0 20px 0}.lp-admin-profile-courses .course-results-progress .lp-course-progress-heading{margin:0 0 5px 0;line-height:1}.lp-admin-profile-courses .learn-press-progress{overflow:hidden;position:relative;width:150px;height:6px;border-radius:3px}.lp-admin-profile-courses .learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.lp-admin-profile-courses .learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.lp-notify-action-wrapper{position:fixed;bottom:5%;z-index:10000;right:50%;padding:10px;transition:all .5s;transform:translateY(500%);display:flex;flex-direction:column;gap:5px}.lp-notify-action-wrapper.show{display:flex;transform:translateY(0)}.lp-notify-action-wrapper .lp-notify-action{box-shadow:0 4px 25px 1px rgba(0,0,0,0.25);background:#202937;padding:0 20px;border-radius:3px;min-width:200px;transition:all .8s}.lp-notify-action-wrapper .lp-notify-action.clone{display:none}.lp-notify-action-wrapper .lp-notify-action__success{display:none;color:#01a401}.lp-notify-action-wrapper .lp-notify-action__success.show{display:block}.lp-notify-action-wrapper .lp-notify-action__error{display:none;color:#f44336;font-weight:bold}.lp-notify-action-wrapper .lp-notify-action__error.show{display:block}#wp-admin-bar-lp-course-builder svg{vertical-align:text-bottom}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder.css\t2026-04-11 02:14:10.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,9 @@\n @charset \"UTF-8\";\n+body {\n+  margin: 0;\n+  padding: 0;\n+}\n+\n \u002F**\n * Styles for all page of LP\n *\n@@ -217,6 +222,1320 @@\n   opacity: 0.6;\n }\n \n+.learn-press-message {\n+  position: relative;\n+  margin: 24px auto;\n+  padding: 10px 20px;\n+  border-radius: var(--lp-border-radius, 5px);\n+  background-color: #E5F7FF;\n+  color: #007AFF;\n+  width: 100%;\n+}\n+.learn-press-message.error {\n+  background-color: #FEE5E5;\n+  color: #FF3B30;\n+}\n+.learn-press-message.warning {\n+  background-color: #FEF7E6;\n+  color: #FF9500;\n+}\n+.learn-press-message.success {\n+  background-color: #EBF8E5;\n+  color: #3AB500;\n+}\n+.learn-press-message.info {\n+  background-color: rgba(0, 122, 255, 0.1019607843);\n+  color: #007AFF;\n+}\n+.learn-press-message a {\n+  text-decoration: underline;\n+}\n+\n+.lp-toast.toastify {\n+  background: #EBF8E5;\n+  color: #3AB500;\n+  border-radius: var(--lp-border-radius, 5px);\n+  box-shadow: 0 0 0;\n+  display: flex;\n+  align-items: center;\n+}\n+.lp-toast.toastify .toast-close {\n+  background: transparent !important;\n+  font-size: 0;\n+  padding-left: 12px;\n+}\n+.lp-toast.toastify .toast-close:before {\n+  content: \"\\f00d\";\n+  font-family: \"lp-icon\";\n+  font-size: 16px;\n+  color: #000;\n+  line-height: 17px;\n+}\n+.lp-toast.toastify .toast-close:hover {\n+  opacity: 1;\n+}\n+.lp-toast.toastify.error {\n+  background-color: #FEE5E5;\n+  color: #FF3B30;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.warning {\n+  background-color: #FEF7E6;\n+  color: #fb9422;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.info {\n+  background-color: rgba(0, 122, 255, 0.1019607843);\n+  color: #277afc;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+\n+@keyframes lp-rotating {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -ms-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(360deg);\n+    -moz-transform: rotate(360deg);\n+    -ms-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+@-webkit-keyframes lp-rotating {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -ms-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(360deg);\n+    -moz-transform: rotate(360deg);\n+    -ms-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+.lp-loading-change {\n+  position: absolute;\n+  width: 100%;\n+  height: 100%;\n+  background: rgba(255, 255, 255, 0.38);\n+  top: 0;\n+}\n+\n+.lp-load-ajax-element {\n+  position: relative;\n+}\n+\n+.lp-loading-circle {\n+  width: 15px;\n+  height: 15px;\n+  border: 2px solid #ccc;\n+  border-radius: 50%;\n+  border-top-color: rgba(0, 0, 0, 0.76);\n+  animation: spin 1s infinite linear;\n+  display: inline-block;\n+}\n+.lp-loading-circle.hide {\n+  display: none;\n+}\n+\n+@keyframes spin {\n+  0% {\n+    transform: rotate(0deg);\n+  }\n+  100% {\n+    transform: rotate(360deg);\n+  }\n+}\n+.lp-btn-ai-style {\n+  background: #f6f7f7;\n+  border: 1px solid #2271b1;\n+  color: #2271b1;\n+  text-decoration: none;\n+  text-shadow: none;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 5px;\n+  min-height: 30px;\n+  padding: 0 10px;\n+  cursor: pointer;\n+  -webkit-appearance: none;\n+  border-radius: 3px;\n+  white-space: nowrap;\n+  box-sizing: border-box;\n+}\n+.lp-btn-ai-style:active {\n+  box-shadow: none;\n+  color: #fff;\n+}\n+.lp-btn-ai-style:hover {\n+  background: #6B46E9 !important;\n+  color: #fff !important;\n+}\n+\n+.lp-btn-generate-course-with-ai, .lp-btn-warning-enable-ai {\n+  position: absolute;\n+  margin: 10px 0 0 10px !important;\n+}\n+\n+.create-course-modal {\n+  padding: 0;\n+  display: flex !important;\n+  flex-direction: column;\n+  overflow: hidden;\n+  border-radius: 10px;\n+  background-color: #FFFFFF;\n+  height: 90vh;\n+  z-index: 10000000 !important;\n+}\n+.create-course-modal .modal-content {\n+  display: grid;\n+  grid-template-columns: 1fr 2fr;\n+  flex-grow: 1;\n+  gap: 30px;\n+  min-height: 500px;\n+  padding: 0 24px;\n+}\n+.create-course-modal .input-section {\n+  display: flex;\n+  flex-direction: column;\n+}\n+.create-course-modal .input-section label {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #4A5568;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .input-section h3 {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #4A5568;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .input-section textarea,\n+.create-course-modal .input-section .ts-wrapper .ts-control {\n+  width: 100%;\n+  padding: 4px 8px;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 6px;\n+  font-size: 0.95em;\n+  background-color: #F7FAFC;\n+  color: #1A202C;\n+  box-shadow: none;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+}\n+.create-course-modal .input-section textarea:focus, .create-course-modal .input-section textarea:focus-within,\n+.create-course-modal .input-section .ts-wrapper .ts-control:focus,\n+.create-course-modal .input-section .ts-wrapper .ts-control:focus-within {\n+  outline: none;\n+  border-color: #7E6CE2;\n+  box-shadow: 0 0 0 1px #7E6CE2;\n+  background-color: #FFFFFF;\n+}\n+.create-course-modal .input-section textarea {\n+  min-height: 150px;\n+  resize: vertical;\n+}\n+.create-course-modal .input-section .outputs-control {\n+  margin-top: 10px;\n+}\n+.create-course-modal .input-section .outputs-control .outputs-control-content {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  flex-direction: row;\n+}\n+.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector {\n+  width: 120px;\n+  border-radius: 6px;\n+  padding: 10px 12px;\n+  border: 1px solid #E5E7EB;\n+  font-size: 0.95em;\n+  background-color: #F7FAFC;\n+  color: #1A202C;\n+  height: 40px;\n+}\n+.create-course-modal .input-section .lp-tom-select {\n+  width: 100%;\n+}\n+.create-course-modal .input-section .course-content-wrapper {\n+  background: #F7FAFC;\n+  padding: 8px 16px;\n+  border-radius: 16px;\n+}\n+.create-course-modal .input-section .course-content-wrapper input[readonly],\n+.create-course-modal .input-section .course-content-wrapper textarea[readonly] {\n+  background-color: #FFFFFF !important;\n+  cursor: not-allowed;\n+  opacity: 0.8;\n+}\n+.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,\n+.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus {\n+  box-shadow: none;\n+  border-color: #E5E7EB;\n+}\n+.create-course-modal .output-section {\n+  display: flex;\n+  flex-direction: column;\n+}\n+.create-course-modal .output-section .output-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 8px;\n+}\n+.create-course-modal .output-section .output-header h3 {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #1A202C;\n+}\n+.create-course-modal .output-section .output-header .icon-button {\n+  background: none;\n+  border: none;\n+  padding: 4px;\n+  cursor: pointer;\n+  color: #A0AEC0;\n+}\n+.create-course-modal .output-section .output-header .icon-button:hover {\n+  color: #4A5568;\n+}\n+.create-course-modal .output-section .output-item {\n+  border-radius: 6px;\n+  margin-bottom: 16px;\n+  background-color: #FFFFFF;\n+  position: relative;\n+}\n+.create-course-modal .output-section .output-item.prompt-item textarea {\n+  background-color: #F7FAFC;\n+  min-height: 80px;\n+}\n+.create-course-modal .output-section .output-item.output-suggestion textarea {\n+  border-color: #dbd6f7;\n+  min-height: 80px;\n+}\n+.create-course-modal .output-section .output-item p.prompt {\n+  font-weight: 500;\n+  color: #4A5568;\n+  font-size: 0.875rem;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .output-section .output-item .generate-button {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border: none;\n+  padding: 12px 20px;\n+  border-radius: 6px;\n+  font-size: 1rem;\n+  font-weight: 500;\n+  cursor: pointer;\n+  width: 25%;\n+  margin-top: 10px;\n+}\n+.create-course-modal .output-section .output-item .generate-button:hover {\n+  opacity: 0.9;\n+}\n+.create-course-modal .output-section .output-item textarea {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 6px;\n+  padding: 10px 12px;\n+  resize: vertical;\n+  font-size: 0.95em;\n+  color: #1A202C;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+}\n+.create-course-modal .output-section .output-item textarea:focus {\n+  outline: none;\n+  border-color: #7E6CE2;\n+  box-shadow: 0 0 0 1px #7E6CE2;\n+}\n+.create-course-modal .output-section .output-item .output-actions {\n+  position: absolute;\n+  top: 30%;\n+  right: 2%;\n+  display: flex;\n+  gap: 8px;\n+  visibility: hidden;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button {\n+  font-size: 0.875rem;\n+  font-weight: 500;\n+  padding: 6px 12px;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  border: 1px solid #E5E7EB;\n+  background-color: #FFFFFF;\n+  color: #4A5568;\n+  transition: background-color 0.2s, color 0.2s, border-color 0.2s;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover {\n+  background-color: #F7FAFC;\n+  border-color: #c8ccd5;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.apply-button {\n+  background-color: #7E6CE2;\n+  border-color: #7E6CE2;\n+  color: #fff;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover {\n+  opacity: 0.9;\n+}\n+.create-course-modal .output-section .output-item:hover .output-actions {\n+  visibility: visible;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion {\n+  overflow-y: auto;\n+  flex-grow: 1;\n+  padding-right: 5px;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder {\n+  flex-grow: 1;\n+  border: 2px dashed #E5E7EB;\n+  border-radius: 6px;\n+  background-color: #E5E7EB;\n+  position: relative;\n+  height: 150px;\n+  width: 100%;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  margin-bottom: 10px;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions {\n+  position: absolute;\n+  bottom: 5px;\n+  left: 80%;\n+  transform: translateX(-50%);\n+  display: flex;\n+  gap: 10px;\n+  width: 30%;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button {\n+  padding: 5px 20px;\n+  border-radius: 4px;\n+  border: 1px solid #E5E7EB;\n+  background-color: rgba(255, 255, 255, 0.8);\n+  cursor: pointer;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border-color: #7E6CE2;\n+}\n+.create-course-modal .ts-wrapper .ts-control .item {\n+  background-color: #F7FAFC;\n+  border: 1px solid #E5E7EB;\n+  color: #4A5568;\n+  border-radius: 20px;\n+  padding: 4px 10px;\n+}\n+.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder {\n+  color: #A0AEC0;\n+}\n+.create-course-modal .modal-content {\n+  gap: 40px;\n+  padding: 24px 30px;\n+}\n+.create-course-modal .modal-content .input-section .form-group {\n+  margin-bottom: 16px;\n+}\n+.create-course-modal .modal-content .input-section .form-group label {\n+  margin-bottom: 6px;\n+  display: block;\n+}\n+.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols {\n+  display: grid;\n+  grid-template-columns: 1fr 1fr;\n+  gap: 16px 20px;\n+  margin-bottom: 16px;\n+}\n+.create-course-modal .modal-content .input-section h3 {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1A202C;\n+  margin-top: 20px;\n+  margin-bottom: 8px;\n+}\n+.create-course-modal .modal-content .input-section h3:first-child {\n+  margin-top: 0;\n+}\n+.create-course-modal .modal-content .input-section p.description {\n+  font-size: 12px;\n+  color: #4A5568;\n+  margin: -4px 0 16px 0;\n+}\n+.create-course-modal .modal-content .input-section .lp-notice.notice-warning {\n+  background-color: #FEFCE8;\n+  border: 1px solid #FDE047;\n+  border-radius: 6px;\n+  padding: 12px;\n+  margin: 10px 0 20px 0;\n+  font-size: 14px;\n+  color: #713F12;\n+}\n+.create-course-modal .modal-content .input-section .lp-notice.notice-warning a {\n+  font-weight: 600;\n+  color: #713F12;\n+  text-decoration: underline;\n+}\n+.create-course-modal .modal-content .output-section .output-placeholder-wrapper {\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  text-align: center;\n+  height: 100%;\n+  min-height: 200px;\n+  background-color: #F9FAFB;\n+  border-radius: 8px;\n+  border: 1px solid #E5E7EB;\n+  padding: 20px;\n+}\n+.create-course-modal .modal-content .output-section .output-placeholder-wrapper p {\n+  color: #4A5568;\n+  font-size: 15px;\n+}\n+.create-course-modal .modal-content .output-section .output-header .icon-button {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  color: #4A5568;\n+}\n+.create-course-modal .modal-content .output-section .output-header .icon-button svg {\n+  width: 20px;\n+  height: 20px;\n+}\n+\n+.lp-generate-data-ai-wrap {\n+  width: 100%;\n+  max-height: 90%;\n+}\n+.lp-generate-data-ai-wrap .content-title {\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .step-header {\n+  display: flex;\n+  justify-content: space-between;\n+  margin-bottom: 30px;\n+  padding: 0 20px;\n+  gap: 10px;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item {\n+  display: flex;\n+  align-items: center;\n+  font-size: 14px;\n+  color: #1A202C;\n+  position: relative;\n+  flex-grow: 1;\n+  justify-content: center;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item.active .step-number {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border-color: #7E6CE2;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item .step-text {\n+  color: #111111;\n+  font-weight: 600;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item .step-number {\n+  width: 28px;\n+  height: 28px;\n+  border-radius: 50%;\n+  border: 1px solid #E5E7EB;\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  margin-right: 10px;\n+  font-weight: 500;\n+  background-color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai {\n+  border: 1px solid #E5E7EB;\n+  border-radius: 10px;\n+  padding: 20px;\n+  text-align: left;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields {\n+  min-height: 400px;\n+  max-height: 600px;\n+  overflow: auto;\n+  padding: 0 2px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title {\n+  font-size: 1.2em;\n+  font-weight: 600;\n+  margin-bottom: 10px;\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active {\n+  display: block;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2 {\n+  font-size: 24px;\n+  font-weight: 700;\n+  margin: 0 0 8px 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p {\n+  font-size: 15px;\n+  color: #1A202C;\n+  margin: 0 0 30px 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid {\n+  display: grid;\n+  grid-template-columns: 1fr 1fr;\n+  gap: 20px 30px;\n+  margin-bottom: 30px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group {\n+  margin-bottom: 10px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width {\n+  grid-column: 1\u002F-1;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  margin-bottom: 8px;\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper {\n+  width: 100%;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea {\n+  width: 100%;\n+  padding: 8px 16px;\n+  border-radius: 10px;\n+  border: 1px solid #E5E7EB;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  box-sizing: border-box;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+  margin: 0;\n+  background-color: transparent;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus {\n+  outline: none;\n+  border-color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item {\n+  border: 1px solid #E5E7EB;\n+  color: #4A5568;\n+  border-radius: 6px;\n+  padding: 4px 10px;\n+  background-color: transparent;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder {\n+  color: #A0AEC0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea {\n+  min-height: 86px;\n+  resize: vertical;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description {\n+  color: #898989;\n+  margin-top: 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer {\n+  padding: 0;\n+  border: none;\n+  font-size: 16px;\n+  min-height: unset;\n+  box-shadow: none;\n+  border-radius: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview {\n+  min-height: 120px;\n+  background-color: #F9FAFB;\n+  color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions {\n+  display: flex;\n+  justify-content: flex-end;\n+  gap: 12px;\n+  margin-top: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt {\n+  display: flex;\n+  justify-items: center;\n+  align-items: center;\n+  gap: 10px;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button {\n+  padding: 10px 20px;\n+  font-size: 15px;\n+  font-weight: 600;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  border: 1px solid transparent;\n+  transition: all 0.2s;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover {\n+  background-color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary {\n+  background-color: #fff;\n+  color: #7E6CE2;\n+  border-color: #7E6CE2;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled {\n+  background-color: #E5E7EB;\n+  color: #1A202C;\n+  cursor: not-allowed;\n+  border-color: #E5E7EB;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout {\n+  display: flex;\n+  gap: 30px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel {\n+  flex: 2;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel {\n+  flex: 1;\n+  min-width: 300px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3 {\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #111827;\n+  margin-top: 0;\n+  margin-bottom: 24px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder {\n+  width: 100%;\n+  height: 50vh;\n+  background-color: #E5E7EB;\n+  border-radius: 8px;\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  justify-items: center;\n+  font-size: 20px;\n+  color: #6B7280;\n+  margin-bottom: 30px;\n+  font-weight: 600;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title {\n+  font-size: 18px;\n+  font-weight: 700;\n+  margin-top: 30px;\n+  margin-bottom: 16px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum {\n+  font-size: 18px;\n+  font-weight: 700;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block {\n+  border-radius: 8px;\n+  border: 0.8px solid #E5E7EB;\n+  padding: 16px 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4 {\n+  font-size: 13px;\n+  font-weight: bold;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p {\n+  font-size: 15px;\n+  line-height: 1.6;\n+  color: #374151;\n+  margin-top: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul {\n+  list-style: none;\n+  padding: 0;\n+  margin: 12px 0 0 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li {\n+  position: relative;\n+  padding-left: 20px;\n+  margin-bottom: 8px;\n+  color: #374151;\n+  font-size: 15px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before {\n+  content: \"•\";\n+  position: absolute;\n+  left: 0;\n+  color: #1A202C;\n+  line-height: 1.5;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel {\n+  background-color: #F9FAFB;\n+  padding: 24px;\n+  border-radius: 8px;\n+  border: 1px solid #E5E7EB;\n+  height: fit-content;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3 {\n+  font-size: 16px;\n+  font-weight: 600;\n+  margin-top: 0;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list {\n+  display: none;\n+  list-style: none;\n+  padding: 0;\n+  margin: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li {\n+  display: flex;\n+  align-items: center;\n+  font-size: 15px;\n+  color: #374151;\n+  margin-bottom: 12px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span {\n+  margin-right: 5px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg {\n+  color: #1A202C;\n+  width: 20px;\n+  height: 20px;\n+  margin-right: 12px;\n+  flex-shrink: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field] {\n+  min-height: 300px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result {\n+  width: 100%;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results {\n+  display: grid;\n+  gap: 10px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result {\n+  margin-bottom: 4px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button {\n+  margin-right: 4px;\n+}\n+.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap {\n+  max-height: 400px;\n+  overflow-y: auto;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-btn-close-ai-popup {\n+  position: absolute;\n+  top: 10px;\n+  right: 10px;\n+  background: none;\n+  border: none;\n+  font-size: 20px;\n+  cursor: pointer;\n+  color: #ccc;\n+}\n+.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover {\n+  color: #f27474;\n+}\n+.lp-generate-data-ai-wrap .lp-ai-warning-refer {\n+  border: 1px solid #FCD34D;\n+  background-color: #FFFBEB;\n+  padding: 10px;\n+  border-radius: 5px;\n+  display: flex;\n+  gap: 5px;\n+  align-items: center;\n+}\n+\n+.lp-ai-course-data-preview-wrap .course-title {\n+  font-size: 1.5em;\n+  font-weight: 700;\n+  margin-bottom: 10px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .course-sections {\n+  margin-top: 30px;\n+}\n+.lp-ai-course-data-preview-wrap .section-title {\n+  font-weight: bold;\n+  font-size: 1.2em;\n+  margin-bottom: 10px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .lesson-title,\n+.lp-ai-course-data-preview-wrap .quiz-title,\n+.lp-ai-course-data-preview-wrap .question-title {\n+  font-weight: 600;\n+  font-size: 1em;\n+  margin-bottom: 8px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-item {\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: 10px;\n+  padding: 20px;\n+  margin: 20px 0;\n+  background-color: #fff;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-items {\n+  margin: 20px 0 0 20px;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-items:last-child {\n+  margin-bottom: 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-lesson-item,\n+.lp-ai-course-data-preview-wrap .course-quiz-item,\n+.lp-ai-course-data-preview-wrap .quiz-question-item {\n+  padding: 12px 0;\n+  border-top: 1px solid var(--lp-border-color, #E2E0DB);\n+}\n+.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,\n+.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,\n+.lp-ai-course-data-preview-wrap .quiz-question-item:last-child {\n+  padding-bottom: 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-questions,\n+.lp-ai-course-data-preview-wrap .course-question-options {\n+  margin: 20px 0 0 20px;\n+}\n+.lp-ai-course-data-preview-wrap .course-questions:last-child,\n+.lp-ai-course-data-preview-wrap .course-question-options:last-child {\n+  margin-bottom: 0;\n+}\n+\n+.lp-ai-images-warp {\n+  display: grid;\n+  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n+  gap: 15px;\n+  margin-top: 20px;\n+  max-height: 400px;\n+  overflow-y: auto;\n+}\n+.lp-ai-images-warp .lp-ai-image-item {\n+  position: relative;\n+}\n+.lp-ai-images-warp .lp-ai-image-item img {\n+  object-fit: contain;\n+  width: 100%;\n+}\n+.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image {\n+  position: absolute;\n+  top: 5px;\n+  right: 0;\n+  transform: translateX(-5%);\n+  background-color: rgba(0, 0, 0, 0.6);\n+  color: #fff;\n+  border: none;\n+  padding: 6px 12px;\n+  border-radius: 4px;\n+  font-size: 0.875rem;\n+  cursor: pointer;\n+  opacity: 0;\n+  transition: opacity 0.2s;\n+}\n+.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image {\n+  opacity: 1;\n+}\n+\n+.lp-creating-course-ai-wrap .loading-wrap {\n+  margin-top: 20px;\n+}\n+.lp-creating-course-ai-wrap .lp-loading-circle {\n+  width: 40px;\n+  height: 40px;\n+  border-width: 5px;\n+}\n+\n+.lp-must-enable-ai-wrap {\n+  text-align: left;\n+  line-height: 1.6em;\n+}\n+.lp-must-enable-ai-wrap h2 {\n+  margin-bottom: 0;\n+}\n+.lp-must-enable-ai-wrap h2 i {\n+  margin-right: 10px;\n+  color: #DC2626;\n+}\n+.lp-must-enable-ai-wrap .desc {\n+  color: #6B7280;\n+}\n+.lp-must-enable-ai-wrap .p2 {\n+  color: #6B7280;\n+}\n+.lp-must-enable-ai-wrap a {\n+  color: #2563EB;\n+  text-decoration: underline;\n+  cursor: pointer;\n+}\n+.lp-must-enable-ai-wrap .help-link {\n+  padding: 16px;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 8px;\n+  font-size: 13px;\n+}\n+.lp-must-enable-ai-wrap .help-link a {\n+  text-decoration: none;\n+  margin-top: 10px;\n+}\n+.lp-must-enable-ai-wrap .help-link i {\n+  color: #2A73AB;\n+}\n+.lp-must-enable-ai-wrap .button-actions {\n+  margin-top: 20px;\n+  text-align: right;\n+}\n+.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup {\n+  border: none;\n+  color: #4B5563;\n+  background: none;\n+}\n+.lp-must-enable-ai-wrap .button-actions .button-primary {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border: none;\n+}\n+.lp-must-enable-ai-wrap .button-actions .button-primary:hover {\n+  opacity: 0.9;\n+}\n+\n+.fui-loading-spinner-3 {\n+  color: #7E6CE2;\n+  position: relative;\n+  width: 100px;\n+  height: 80px;\n+  margin-left: 80px;\n+  display: none;\n+}\n+.fui-loading-spinner-3 div {\n+  transform-origin: 40px 40px;\n+  animation: rj9Ft 1.2s linear infinite;\n+}\n+.fui-loading-spinner-3 div:after {\n+  content: \" \";\n+  display: block;\n+  position: absolute;\n+  top: 3px;\n+  left: 37px;\n+  width: 6px;\n+  height: 18px;\n+  border-radius: 20%;\n+  background: #7E6CE2;\n+}\n+.fui-loading-spinner-3 div:nth-child(1) {\n+  transform: rotate(0deg);\n+  animation-delay: -1.1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(2) {\n+  transform: rotate(30deg);\n+  animation-delay: -1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(3) {\n+  transform: rotate(60deg);\n+  animation-delay: -0.9s;\n+}\n+.fui-loading-spinner-3 div:nth-child(4) {\n+  transform: rotate(90deg);\n+  animation-delay: -0.8s;\n+}\n+.fui-loading-spinner-3 div:nth-child(5) {\n+  transform: rotate(120deg);\n+  animation-delay: -0.7s;\n+}\n+.fui-loading-spinner-3 div:nth-child(6) {\n+  transform: rotate(150deg);\n+  animation-delay: -0.6s;\n+}\n+.fui-loading-spinner-3 div:nth-child(7) {\n+  transform: rotate(180deg);\n+  animation-delay: -0.5s;\n+}\n+.fui-loading-spinner-3 div:nth-child(8) {\n+  transform: rotate(210deg);\n+  animation-delay: -0.4s;\n+}\n+.fui-loading-spinner-3 div:nth-child(9) {\n+  transform: rotate(240deg);\n+  animation-delay: -0.3s;\n+}\n+.fui-loading-spinner-3 div:nth-child(10) {\n+  transform: rotate(270deg);\n+  animation-delay: -0.2s;\n+}\n+.fui-loading-spinner-3 div:nth-child(11) {\n+  transform: rotate(300deg);\n+  animation-delay: -0.1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(12) {\n+  transform: rotate(330deg);\n+  animation-delay: 0s;\n+}\n+\n+@keyframes rj9Ft {\n+  0% {\n+    opacity: 1;\n+  }\n+  100% {\n+    opacity: 0;\n+  }\n+}\n+html {\n+  margin-top: 0 !important;\n+}\n+\n+.lp-course-builder-canvas,\n+.lp-toast,\n+.swal2-container {\n+  font-family: BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1e1e1e;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+}\n+.lp-course-builder-canvas *,\n+.lp-course-builder-canvas *::before,\n+.lp-course-builder-canvas *::after,\n+.lp-toast *,\n+.lp-toast *::before,\n+.lp-toast *::after,\n+.swal2-container *,\n+.swal2-container *::before,\n+.swal2-container *::after {\n+  box-sizing: border-box;\n+}\n+.lp-course-builder-canvas button,\n+.lp-toast button,\n+.swal2-container button {\n+  font-family: BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+}\n+.lp-course-builder-canvas input[type=date],\n+.lp-course-builder-canvas input[type=datetime-local],\n+.lp-course-builder-canvas input[type=datetime],\n+.lp-course-builder-canvas input[type=email],\n+.lp-course-builder-canvas input[type=month],\n+.lp-course-builder-canvas input[type=number],\n+.lp-course-builder-canvas input[type=password],\n+.lp-course-builder-canvas input[type=search],\n+.lp-course-builder-canvas input[type=tel],\n+.lp-course-builder-canvas input[type=text],\n+.lp-course-builder-canvas input[type=time],\n+.lp-course-builder-canvas input[type=url],\n+.lp-course-builder-canvas input[type=week],\n+.lp-toast input[type=date],\n+.lp-toast input[type=datetime-local],\n+.lp-toast input[type=datetime],\n+.lp-toast input[type=email],\n+.lp-toast input[type=month],\n+.lp-toast input[type=number],\n+.lp-toast input[type=password],\n+.lp-toast input[type=search],\n+.lp-toast input[type=tel],\n+.lp-toast input[type=text],\n+.lp-toast input[type=time],\n+.lp-toast input[type=url],\n+.lp-toast input[type=week],\n+.swal2-container input[type=date],\n+.swal2-container input[type=datetime-local],\n+.swal2-container input[type=datetime],\n+.swal2-container input[type=email],\n+.swal2-container input[type=month],\n+.swal2-container input[type=number],\n+.swal2-container input[type=password],\n+.swal2-container input[type=search],\n+.swal2-container input[type=tel],\n+.swal2-container input[type=text],\n+.swal2-container input[type=time],\n+.swal2-container input[type=url],\n+.swal2-container input[type=week] {\n+  padding: 0;\n+  line-height: normal;\n+  min-height: unset;\n+}\n+.lp-course-builder-canvas input[type=date]:focus,\n+.lp-course-builder-canvas input[type=datetime-local]:focus,\n+.lp-course-builder-canvas input[type=datetime]:focus,\n+.lp-course-builder-canvas input[type=email]:focus,\n+.lp-course-builder-canvas input[type=month]:focus,\n+.lp-course-builder-canvas input[type=number]:focus,\n+.lp-course-builder-canvas input[type=password]:focus,\n+.lp-course-builder-canvas input[type=search]:focus,\n+.lp-course-builder-canvas input[type=tel]:focus,\n+.lp-course-builder-canvas input[type=text]:focus,\n+.lp-course-builder-canvas input[type=time]:focus,\n+.lp-course-builder-canvas input[type=url]:focus,\n+.lp-course-builder-canvas input[type=week]:focus,\n+.lp-toast input[type=date]:focus,\n+.lp-toast input[type=datetime-local]:focus,\n+.lp-toast input[type=datetime]:focus,\n+.lp-toast input[type=email]:focus,\n+.lp-toast input[type=month]:focus,\n+.lp-toast input[type=number]:focus,\n+.lp-toast input[type=password]:focus,\n+.lp-toast input[type=search]:focus,\n+.lp-toast input[type=tel]:focus,\n+.lp-toast input[type=text]:focus,\n+.lp-toast input[type=time]:focus,\n+.lp-toast input[type=url]:focus,\n+.lp-toast input[type=week]:focus,\n+.swal2-container input[type=date]:focus,\n+.swal2-container input[type=datetime-local]:focus,\n+.swal2-container input[type=datetime]:focus,\n+.swal2-container input[type=email]:focus,\n+.swal2-container input[type=month]:focus,\n+.swal2-container input[type=number]:focus,\n+.swal2-container input[type=password]:focus,\n+.swal2-container input[type=search]:focus,\n+.swal2-container input[type=tel]:focus,\n+.swal2-container input[type=text]:focus,\n+.swal2-container input[type=time]:focus,\n+.swal2-container input[type=url]:focus,\n+.swal2-container input[type=week]:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+.lp-course-builder-canvas input[type=checkbox]:focus,\n+.lp-course-builder-canvas input[type=color]:focus,\n+.lp-course-builder-canvas input[type=date]:focus,\n+.lp-course-builder-canvas input[type=datetime-local]:focus,\n+.lp-course-builder-canvas input[type=datetime]:focus,\n+.lp-course-builder-canvas input[type=email]:focus,\n+.lp-course-builder-canvas input[type=month]:focus,\n+.lp-course-builder-canvas input[type=number]:focus,\n+.lp-course-builder-canvas input[type=password]:focus,\n+.lp-course-builder-canvas input[type=radio]:focus,\n+.lp-course-builder-canvas input[type=search]:focus,\n+.lp-course-builder-canvas input[type=tel]:focus,\n+.lp-course-builder-canvas input[type=text]:focus,\n+.lp-course-builder-canvas input[type=time]:focus,\n+.lp-course-builder-canvas input[type=url]:focus,\n+.lp-course-builder-canvas input[type=week]:focus,\n+.lp-course-builder-canvas select:focus,\n+.lp-course-builder-canvas textarea:focus,\n+.lp-toast input[type=checkbox]:focus,\n+.lp-toast input[type=color]:focus,\n+.lp-toast input[type=date]:focus,\n+.lp-toast input[type=datetime-local]:focus,\n+.lp-toast input[type=datetime]:focus,\n+.lp-toast input[type=email]:focus,\n+.lp-toast input[type=month]:focus,\n+.lp-toast input[type=number]:focus,\n+.lp-toast input[type=password]:focus,\n+.lp-toast input[type=radio]:focus,\n+.lp-toast input[type=search]:focus,\n+.lp-toast input[type=tel]:focus,\n+.lp-toast input[type=text]:focus,\n+.lp-toast input[type=time]:focus,\n+.lp-toast input[type=url]:focus,\n+.lp-toast input[type=week]:focus,\n+.lp-toast select:focus,\n+.lp-toast textarea:focus,\n+.swal2-container input[type=checkbox]:focus,\n+.swal2-container input[type=color]:focus,\n+.swal2-container input[type=date]:focus,\n+.swal2-container input[type=datetime-local]:focus,\n+.swal2-container input[type=datetime]:focus,\n+.swal2-container input[type=email]:focus,\n+.swal2-container input[type=month]:focus,\n+.swal2-container input[type=number]:focus,\n+.swal2-container input[type=password]:focus,\n+.swal2-container input[type=radio]:focus,\n+.swal2-container input[type=search]:focus,\n+.swal2-container input[type=tel]:focus,\n+.swal2-container input[type=text]:focus,\n+.swal2-container input[type=time]:focus,\n+.swal2-container input[type=url]:focus,\n+.swal2-container input[type=week]:focus,\n+.swal2-container select:focus,\n+.swal2-container textarea:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+.lp-course-builder-canvas input[type=checkbox],\n+.lp-course-builder-canvas input[type=radio],\n+.lp-toast input[type=checkbox],\n+.lp-toast input[type=radio],\n+.swal2-container input[type=checkbox],\n+.swal2-container input[type=radio] {\n+  box-shadow: unset;\n+  margin: 0;\n+}\n+.lp-course-builder-canvas input[type=radio]:checked::before,\n+.lp-course-builder-canvas input[type=checkbox]:checked::before,\n+.lp-toast input[type=radio]:checked::before,\n+.lp-toast input[type=checkbox]:checked::before,\n+.swal2-container input[type=radio]:checked::before,\n+.swal2-container input[type=checkbox]:checked::before {\n+  margin: 0;\n+}\n+.lp-course-builder-canvas a,\n+.lp-toast a,\n+.swal2-container a {\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas a:hover,\n+.lp-toast a:hover,\n+.swal2-container a:hover {\n+  color: #5b52d1;\n+}\n+.lp-course-builder-canvas a:focus,\n+.lp-toast a:focus,\n+.swal2-container a:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+\n #lp-course-builder {\n   display: block !important;\n   min-height: 100vh;\n@@ -246,7 +1565,7 @@\n   min-height: calc(100vh - 60px);\n }\n \n-.lp-cb-top-header {\n+#lp-course-builder .lp-cb-top-header {\n   position: fixed;\n   top: 0;\n   left: 0;\n@@ -258,76 +1577,108 @@\n   align-items: center;\n   justify-content: space-between;\n   padding: 0 24px;\n-  z-index: 1001;\n+  z-index: 9;\n   box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n }\n-.lp-cb-top-header .lp-cb-top-header__logo {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo {\n   display: flex;\n   align-items: center;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo a {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a {\n   display: flex;\n   align-items: center;\n   gap: 10px;\n   text-decoration: none;\n   color: #1e1e1e;\n+  line-height: 0;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a:hover {\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo a:hover {\n-  color: #1f74ff;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .lp-cb-top-header__logo-image {\n+  display: block;\n+  width: auto;\n+  max-width: 240px;\n+  max-height: 40px;\n+  object-fit: contain;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo .dashicons {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .dashicons {\n   font-size: 28px;\n   width: 28px;\n   height: 28px;\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__title {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__title {\n   font-size: 18px;\n   font-weight: 600;\n   color: #1e1e1e;\n }\n-.lp-cb-top-header .lp-cb-top-header__user {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user {\n   display: flex;\n   align-items: center;\n-  gap: 16px;\n+  gap: 12px;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-info {\n-  display: flex;\n-  align-items: center;\n-  gap: 10px;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar {\n+  position: relative;\n+  flex-shrink: 0;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-info img {\n-  width: 32px;\n-  height: 32px;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar img {\n+  width: 40px;\n+  height: 40px;\n   border-radius: 50%;\n   object-fit: cover;\n+  display: block;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__online-dot {\n+  position: absolute;\n+  bottom: 1px;\n+  right: 1px;\n+  width: 10px;\n+  height: 10px;\n+  background: #22c55e;\n+  border-radius: 50%;\n+  border: 2px solid #fff;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-name {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-info {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 2px;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-name {\n   font-size: 14px;\n-  font-weight: 500;\n+  font-weight: 600;\n   color: #1e1e1e;\n+  line-height: 1.3;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-link {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link {\n   font-size: 13px;\n-  color: #1f74ff;\n+  color: #898989;\n   text-decoration: none;\n+  line-height: 1.3;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-link:hover {\n-  text-decoration: underline;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link:hover {\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__logout {\n-  font-size: 13px;\n-  color: #6b7280;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 36px;\n+  height: 36px;\n+  border-radius: 6px;\n+  color: #cfcfcf;\n   text-decoration: none;\n-  padding: 6px 12px;\n-  border: 1px solid #f5f5f5;\n-  border-radius: 4px;\n   transition: all 0.2s;\n+  margin-left: 4px;\n }\n-.lp-cb-top-header .lp-cb-top-header__logout:hover {\n-  background: #f9fafb;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout svg {\n+  width: 22px;\n+  height: 22px;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout:hover {\n+  background: #fef2f2;\n   color: #ef4444;\n-  border-color: #ef4444;\n }\n \n #lp-course-builder-sidebar.lp-cb-sidebar {\n@@ -340,7 +1691,7 @@\n   color: #000000 !important;\n   display: flex !important;\n   flex-direction: column !important;\n-  z-index: 1000 !important;\n+  z-index: 8 !important;\n   overflow-y: auto !important;\n   padding: 0 !important;\n   border-radius: 0 !important;\n@@ -373,11 +1724,11 @@\n   gap: 12px;\n   background: transparent !important;\n   border: none !important;\n-  border-radius: 6px !important;\n+  border-radius: 12px !important;\n   margin-top: 6px;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover {\n-  background: #eeeeee !important;\n+  background: #EEF1FF !important;\n   color: #000000 !important;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons {\n@@ -392,35 +1743,113 @@\n   font-weight: 500;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a {\n-  background: #e2edff !important;\n-  color: #1f74ff !important;\n+  background: #EEF1FF !important;\n+  color: #7067ED !important;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons {\n-  color: #1f74ff !important;\n+  color: #7067ED !important;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 36px;\n+  height: 36px;\n+  border-radius: 6px;\n+  background: transparent;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-left: auto;\n+  margin-bottom: 16px;\n+  margin-right: 16px;\n+  border: none;\n+  color: #aaaaaa;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle svg {\n+  min-width: 24px;\n+  height: 24px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle .lp-toggle-expand {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle:hover {\n+  background: #EEF1FF;\n+  border-color: #d1d5db;\n+  color: #7067ED;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer {\n-  padding: 16px 0;\n+  padding: 16px;\n   border-top: 1px solid #f5f5f5;\n   margin-top: auto;\n   background: #fdfdfd;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer:empty {\n+  display: none;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item {\n   display: flex;\n   align-items: center;\n-  padding: 12px 20px;\n+  padding: 12px 16px;\n   color: #000000;\n   text-decoration: none;\n   gap: 12px;\n   font-size: 14px;\n   transition: all 0.2s;\n+  border-radius: 6px;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover {\n-  color: #1f74ff;\n+  background: #EEF1FF;\n+  color: #7067ED;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons {\n-  font-size: 18px;\n-  width: 18px;\n-  height: 18px;\n+  font-size: 20px;\n+  width: 20px;\n+  height: 20px;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed {\n+  width: 72px !important;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav {\n+  padding: 16px 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a {\n+  justify-content: center;\n+  padding: 12px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons {\n+  margin: 0;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer {\n+  padding: 16px 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle {\n+  margin: 0 auto;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-collapse {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-expand {\n+  display: block;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item {\n+  justify-content: center;\n+  padding: 12px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item .lp-cb-sidebar__item-title {\n+  display: none;\n+}\n+\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed + #lp-course-builder-content.lp-cb-main,\n+#lp-course-builder.has-collapsed-sidebar #lp-course-builder-content.lp-cb-main {\n+  margin-left: 72px !important;\n+  width: calc(100% - 72px) !important;\n }\n \n #lp-course-builder-content.lp-cb-main {\n@@ -428,7 +1857,7 @@\n   margin-left: 260px !important;\n   margin-top: 60px !important;\n   min-height: calc(100vh - 60px);\n-  padding: 0 24px !important;\n+  padding: 0 24px 24px !important;\n   background: #ffffff !important;\n   border-radius: 0 !important;\n   width: calc(100% - 260px) !important;\n@@ -471,12 +1900,12 @@\n   border-radius: 8px 8px 0 0;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item {\n-  color: #6b7280;\n+  color: #898989;\n   text-decoration: none;\n   transition: color 0.2s;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current {\n   color: #1e1e1e;\n@@ -484,10 +1913,10 @@\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__separator {\n   margin: 0 10px;\n-  color: #6b7280;\n+  color: #898989;\n }\n \n-.lp-cb-header {\n+#lp-course-builder .lp-cb-header {\n   position: sticky;\n   top: 60px;\n   z-index: 99;\n@@ -496,25 +1925,46 @@\n   justify-content: space-between;\n   padding: 20px 12px;\n   background: #ffffff;\n-  border-bottom: 1px solid #f5f5f5;\n+  gap: 30px;\n }\n-.lp-cb-header .lp-cb-header__left {\n+#lp-course-builder .lp-cb-header .lp-cb-header__left {\n   display: flex;\n   align-items: center;\n   gap: 12px;\n }\n-.lp-cb-header .lp-cb-header__title {\n+#lp-course-builder .lp-cb-header .lp-cb-header__title {\n   margin: 0;\n-  font-size: 40px;\n+  font-size: 24px;\n   font-weight: 600;\n-  margin-bottom: 10px;\n   color: #1e1e1e;\n }\n-.lp-cb-header .lp-cb-header__actions {\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  font-size: 14px;\n+  padding: 5px 12px;\n+  gap: 10px;\n+  font-weight: 500;\n+  border-radius: 6px;\n+  color: #898989;\n+  text-decoration: none;\n+  transition: all 0.2s;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link .dashicons {\n+  font-size: 18px;\n+  width: 18px;\n+  height: 18px;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link:hover {\n+  background: #f1f5f9;\n+  color: #7067ED;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions {\n   display: flex;\n   gap: 12px;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button {\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button {\n   padding: 10px 20px;\n   border-radius: 6px;\n   font-weight: 500;\n@@ -527,19 +1977,19 @@\n   color: #1e1e1e;\n   transition: all 0.2s;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button:hover {\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button:hover {\n   background: #f9fafb;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button-primary,\n-.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn {\n-  background: #1f74ff !important;\n-  border-color: #1f74ff !important;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary,\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn {\n+  background: #7067ED !important;\n+  border-color: #7067ED !important;\n   color: #fff !important;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,\n-.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover {\n-  background: #0047ba !important;\n-  border-color: #0047ba !important;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover {\n+  background: #5b52d1 !important;\n+  border-color: #5b52d1 !important;\n }\n \n html:has(#wpadminbar) .lp-cb-header {\n@@ -551,47 +2001,78 @@\n     top: calc(60px + 46px);\n   }\n }\n-.course-status {\n+.course-status,\n+.quiz-status,\n+.quizze-status,\n+.question-status,\n+.lesson-status {\n   display: inline-block;\n   padding: 4px 10px;\n-  border-radius: 4px;\n+  border-radius: 20px;\n   font-size: 12px;\n   font-weight: 500;\n   text-transform: capitalize;\n }\n-.course-status.publish {\n-  background: #dcfce7;\n-  color: #166534;\n-}\n-.course-status.draft {\n-  background: #fef3c7;\n-  color: #92400e;\n-}\n-.course-status.pending {\n+.course-status.publish,\n+.quiz-status.publish,\n+.quizze-status.publish,\n+.question-status.publish,\n+.lesson-status.publish {\n+  background: #e7f6e9;\n+  color: #28a746;\n+}\n+.course-status.draft,\n+.quiz-status.draft,\n+.quizze-status.draft,\n+.question-status.draft,\n+.lesson-status.draft {\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+}\n+.course-status.pending,\n+.quiz-status.pending,\n+.quizze-status.pending,\n+.question-status.pending,\n+.lesson-status.pending {\n   background: #dbeafe;\n   color: #1e40af;\n }\n-.course-status.private {\n+.course-status.private,\n+.quiz-status.private,\n+.quizze-status.private,\n+.question-status.private,\n+.lesson-status.private {\n   background: #f3e8ff;\n   color: #6b21a8;\n }\n-.course-status.trash {\n+.course-status.trash,\n+.quiz-status.trash,\n+.quizze-status.trash,\n+.question-status.trash,\n+.lesson-status.trash {\n   background: #fee2e2;\n   color: #991b1b;\n }\n+.course-status.future,\n+.quiz-status.future,\n+.quizze-status.future,\n+.question-status.future,\n+.lesson-status.future {\n+  background: #ffd700;\n+  color: #333;\n+}\n \n-.lp-cb-tabs {\n+#lp-course-builder .lp-cb-tabs {\n   display: flex;\n   border-bottom: 1px solid #f5f5f5;\n-  padding: 0 12px;\n   background: #ffffff;\n-  gap: 10;\n+  gap: 10px;\n   margin: 0;\n   list-style: none;\n }\n-.lp-cb-tabs .lp-cb-tabs__item {\n-  padding: 16px 24px;\n-  color: #6b7280;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item {\n+  padding: 12px 24px;\n+  color: #898989;\n   text-decoration: none;\n   font-weight: 500;\n   font-size: 14px;\n@@ -599,29 +2080,32 @@\n   margin-bottom: -1px;\n   transition: all 0.2s ease;\n   background: transparent;\n+  border-radius: 10px 10px 0 0;\n }\n-.lp-cb-tabs .lp-cb-tabs__item:hover {\n-  color: #1e1e1e;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n }\n-.lp-cb-tabs .lp-cb-tabs__item.is-active {\n-  color: #1f74ff;\n-  border-bottom-color: #1f74ff;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item.is-active {\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n+  background: #EEF1FF;\n }\n \n-.lp-cb-tab-content {\n+#lp-course-builder .lp-cb-tab-content {\n   padding: 0;\n   background: #ffffff;\n   border-radius: 0 0 8px 8px;\n+  margin-top: 30px;\n }\n-.lp-cb-tab-content .cb-section__course-edit,\n-.lp-cb-tab-content .lp-course-builder-content__section {\n-  padding: 12px;\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section {\n   background: #ffffff;\n   border-radius: 0;\n   min-height: auto;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header {\n   display: flex;\n   align-items: center;\n   justify-content: space-between;\n@@ -629,21 +2113,21 @@\n   margin-bottom: 20px;\n   border-bottom: 1px solid #f5f5f5;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left {\n   display: flex;\n   align-items: center;\n   gap: 12px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title {\n   margin: 0;\n   font-size: 18px;\n   font-weight: 600;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status {\n   display: inline-block;\n   padding: 4px 10px;\n   border-radius: 4px;\n@@ -651,85 +2135,84 @@\n   font-weight: 500;\n   text-transform: capitalize;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish {\n-  background: #dcfce7;\n-  color: #166534;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft {\n-  background: #fef3c7;\n-  color: #92400e;\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish {\n+  background: #e7f6e9;\n+  color: #28a746;\n+}\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft {\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending {\n   background: #dbeafe;\n   color: #1e40af;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action {\n   display: flex;\n   gap: 10px;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab {\n   display: flex;\n   gap: 24px;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs {\n   flex: 0 0 200px;\n   list-style: none;\n   margin: 0;\n   padding: 0;\n   border-right: 1px solid #f5f5f5;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li {\n   margin: 0;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a {\n   display: block;\n   padding: 12px 16px;\n-  color: #6b7280;\n+  color: #898989;\n   text-decoration: none;\n   border-left: 2px solid transparent;\n   transition: all 0.2s;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover {\n-  color: #1e1e1e;\n-  background: #f9fafb;\n-}\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n-  color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n-  border-left-color: #1f74ff;\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n+  color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+  border-left-color: #7067ED;\n   font-weight: 500;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n   flex: 1;\n   min-width: 0;\n }\n \n-.lp-cb-footer {\n+#lp-course-builder .lp-cb-footer {\n   padding: 20px 0;\n   border-top: 1px solid #f5f5f5;\n   background: #ffffff;\n   border-radius: 0 0 8px 8px;\n   margin-top: auto;\n }\n-.lp-cb-footer .lp-cb-footer__actions {\n+#lp-course-builder .lp-cb-footer .lp-cb-footer__actions {\n   display: flex;\n   justify-content: flex-end;\n   gap: 12px;\n }\n \n #lp-course-builder .lp-course-builder-content__tab {\n-  padding: 0 24px;\n   background: #ffffff;\n   border-radius: 8px;\n   max-width: 100%;\n }\n #lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title {\n-  font-size: 40px;\n+  font-size: 28px;\n   font-weight: 600;\n   color: #1e1e1e;\n   margin: 20px 0 24px 0;\n@@ -737,8 +2220,8 @@\n \n .lp-cb-save-btn,\n #lp-course-builder .lp-button-primary {\n-  background: #1f74ff !important;\n-  border-color: #1f74ff !important;\n+  background: #7067ED !important;\n+  border-color: #7067ED !important;\n   color: #fff !important;\n   padding: 10px 20px;\n   border-radius: 6px;\n@@ -748,8 +2231,16 @@\n }\n .lp-cb-save-btn:hover,\n #lp-course-builder .lp-button-primary:hover {\n-  background: #0047ba !important;\n-  border-color: #0047ba !important;\n+  background: #5b52d1 !important;\n+  border-color: #5b52d1 !important;\n+}\n+.lp-cb-save-btn.loading, .lp-cb-save-btn.lp-loading, .lp-cb-save-btn[aria-disabled=true],\n+#lp-course-builder .lp-button-primary.loading,\n+#lp-course-builder .lp-button-primary.lp-loading,\n+#lp-course-builder .lp-button-primary[aria-disabled=true] {\n+  opacity: 0.7;\n+  pointer-events: none;\n+  cursor: not-allowed;\n }\n .lp-cb-save-btn.has-changes,\n #lp-course-builder .lp-button-primary.has-changes {\n@@ -771,10 +2262,12 @@\n \n #lp-course-builder .cb-btn-update,\n #lp-course-builder .cb-btn-preview,\n-#lp-course-builder .cb-btn-darft {\n+#lp-course-builder .cb-btn-darft,\n+#lp-course-builder .cb-btn-publish,\n+#lp-course-builder .cb-btn-pending {\n   padding: 10px 20px;\n   font-size: 14px;\n-  border-radius: 6px;\n+  border-radius: 12px;\n   font-weight: 500;\n   cursor: pointer;\n   border: none;\n@@ -782,12 +2275,16 @@\n }\n #lp-course-builder .cb-btn-update.has-changes,\n #lp-course-builder .cb-btn-preview.has-changes,\n-#lp-course-builder .cb-btn-darft.has-changes {\n+#lp-course-builder .cb-btn-darft.has-changes,\n+#lp-course-builder .cb-btn-publish.has-changes,\n+#lp-course-builder .cb-btn-pending.has-changes {\n   position: relative;\n }\n #lp-course-builder .cb-btn-update.has-changes::after,\n #lp-course-builder .cb-btn-preview.has-changes::after,\n-#lp-course-builder .cb-btn-darft.has-changes::after {\n+#lp-course-builder .cb-btn-darft.has-changes::after,\n+#lp-course-builder .cb-btn-publish.has-changes::after,\n+#lp-course-builder .cb-btn-pending.has-changes::after {\n   content: \"\";\n   position: absolute;\n   top: -4px;\n@@ -798,37 +2295,39 @@\n   border-radius: 50%;\n   border: 2px solid #fff;\n }\n-#lp-course-builder .cb-btn-update.loading,\n+#lp-course-builder .cb-btn-update.loading, #lp-course-builder .cb-btn-update.lp-loading,\n #lp-course-builder .cb-btn-preview.loading,\n-#lp-course-builder .cb-btn-darft.loading {\n+#lp-course-builder .cb-btn-preview.lp-loading,\n+#lp-course-builder .cb-btn-darft.loading,\n+#lp-course-builder .cb-btn-darft.lp-loading,\n+#lp-course-builder .cb-btn-publish.loading,\n+#lp-course-builder .cb-btn-publish.lp-loading,\n+#lp-course-builder .cb-btn-pending.loading,\n+#lp-course-builder .cb-btn-pending.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n-#lp-course-builder .cb-btn-update {\n-  background: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update {\n+  background: #7067ED;\n   color: #fff;\n }\n-#lp-course-builder .cb-btn-update:hover {\n-  background: #0047ba;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update:hover {\n+  background: #5b52d1;\n }\n-#lp-course-builder .cb-btn-update.cb-btn-primary {\n-  background: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary {\n+  background: #7067ED;\n   color: #fff;\n+  border-radius: 12px;\n }\n-#lp-course-builder .cb-btn-update.cb-btn-primary:hover {\n-  background: #0047ba;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary:hover {\n+  background: #5b52d1;\n }\n-#lp-course-builder .cb-btn-preview {\n-  border: 1px solid #e5e7eb;\n-  color: #1e1e1e;\n-  text-decoration: none;\n-  display: inline-flex;\n-  align-items: center;\n-  background: #fff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview {\n+  border-radius: 12px;\n }\n-#lp-course-builder .cb-btn-preview:hover {\n-  border-color: #1f74ff;\n-  color: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview:hover {\n+  border-color: #7067ED;\n+  color: #7067ED;\n }\n #lp-course-builder.cb-btn-secondary {\n   background: #fff;\n@@ -836,8 +2335,8 @@\n   color: #1e1e1e;\n }\n #lp-course-builder.cb-btn-secondary:hover {\n-  border-color: #1f74ff;\n-  color: #1f74ff;\n+  border-color: #7067ED;\n+  color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-btn-darft {\n@@ -847,6 +2346,14 @@\n #lp-course-builder .cb-btn-darft:hover {\n   background: #d1d5db;\n }\n+#lp-course-builder .cb-btn-pending {\n+  background: #dbeafe;\n+  color: #1e40af;\n+}\n+#lp-course-builder .cb-btn-pending:hover {\n+  background: #bfdbfe;\n+  color: #1e3a8a;\n+}\n #lp-course-builder .cb-btn-trash {\n   cursor: pointer;\n   font-size: 16px;\n@@ -858,6 +2365,89 @@\n #lp-course-builder .cb-btn-trash:hover {\n   background: #fef2f2;\n }\n+#lp-course-builder .cb-header-action-expanded {\n+  position: relative;\n+  display: inline-flex;\n+  align-items: center;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded {\n+  padding: 0;\n+  height: 40px;\n+  width: 40px;\n+  justify-content: center;\n+  border-radius: 12px;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded:hover {\n+  background: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #898989;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading:before {\n+  margin-top: 0;\n+  margin-right: 0;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .cb-header-action-expanded__items {\n+  position: absolute;\n+  top: calc(100% + 6px);\n+  right: 0;\n+  min-width: 180px;\n+  padding: 8px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  background: #fff;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  display: flex;\n+  flex-direction: column;\n+  gap: 2px;\n+  z-index: 1000;\n+  opacity: 0;\n+  visibility: hidden;\n+  transform: translateY(-8px);\n+  pointer-events: none;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .cb-header-action-expanded.is-open .cb-header-action-expanded__items {\n+  opacity: 1;\n+  visibility: visible;\n+  transform: translateY(0);\n+  pointer-events: auto;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash {\n+  gap: 10px;\n+  color: #ef4444;\n+  font-size: 14px;\n+  border: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #ef4444;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash:hover {\n+  background: #fef2f2;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate {\n+  gap: 10px;\n+  font-size: 14px;\n+  border: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #3b82f6;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate:hover {\n+  background: #dbeafe;\n+}\n #lp-course-builder .cb-header-actions-dropdown {\n   position: relative;\n   display: inline-flex;\n@@ -868,10 +2458,10 @@\n   justify-content: center;\n   width: 36px;\n   padding: 0;\n-  background: #1f74ff;\n-  border: 1px solid #1f74ff;\n-  border-left-color: #98bfe4;\n-  border-radius: 0 6px 6px 0;\n+  background: #7067ED;\n+  border: 1px solid #7067ED;\n+  border-left-color: #EEF1FF;\n+  border-radius: 0 12px 12px 0;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n@@ -883,19 +2473,39 @@\n   transition: transform 0.2s;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover {\n-  border-color: #1f74ff;\n+  border-color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] {\n-  border-color: #1f74ff;\n+  border-color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n   transform: rotate(180deg);\n-  color: #1f74ff;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading, #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading {\n+  opacity: 0.7;\n+  pointer-events: none;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle {\n+  background: #dbeafe !important;\n+  border-color: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a !important;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu {\n   position: absolute;\n@@ -935,7 +2545,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #6b7280;\n+  color: #898989;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child {\n   border-radius: 7px 7px 0 0;\n@@ -950,7 +2560,7 @@\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger {\n   color: #ef4444;\n@@ -961,35 +2571,54 @@\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover {\n   background: #fef2f2;\n }\n-#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading {\n+#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading, #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle {\n+  background: #d1d5db !important;\n+  border-color: #d1d5db !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons {\n+  color: #374151 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover {\n+  background: #b8bcc4 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true], #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #b8bcc4 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #374151 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle {\n+  background: #dbeafe !important;\n+  border-color: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a !important;\n+}\n \n .cb-header-actions-dropdown {\n   position: relative;\n   display: inline-flex;\n }\n-.cb-header-actions-dropdown .cb-btn-update {\n-  padding: 10px 16px;\n-  font-size: 14px;\n-  font-weight: 500;\n-  border: none;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-  border-radius: 6px 0 0 6px !important;\n-  background: #1f74ff;\n-  color: #fff;\n-}\n-.cb-header-actions-dropdown .cb-btn-update:hover {\n-  background: #0047ba;\n-}\n-.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary {\n-  background: #1f74ff;\n-  color: #fff;\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action {\n+  background: #dbeafe;\n+  color: #1e40af;\n }\n-.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary:hover {\n-  background: #0047ba;\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action:hover {\n+  background: #bfdbfe;\n+  color: #1e3a8a;\n }\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle {\n   display: inline-flex;\n@@ -1000,7 +2629,7 @@\n   padding: 10px 0;\n   background: #d0e3ff;\n   border: none;\n-  border-radius: 0 6px 6px 0;\n+  border-radius: 0 12px 12px 0;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n@@ -1008,7 +2637,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #1f74ff;\n+  color: #7067ED;\n   transition: transform 0.2s;\n }\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover {\n@@ -1020,6 +2649,52 @@\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n   transform: rotate(180deg);\n }\n+.cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading, .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading {\n+  opacity: 0.7;\n+  pointer-events: none;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle {\n+  background: #dbeafe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle {\n+  background: #d1d5db;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons {\n+  color: #374151;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover {\n+  background: #b8bcc4;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true], .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #b8bcc4;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle {\n+  background: #dbeafe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a;\n+}\n .cb-header-actions-dropdown .cb-dropdown-menu {\n   position: absolute;\n   top: calc(100% + 4px);\n@@ -1027,7 +2702,7 @@\n   min-width: 180px;\n   background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   z-index: 1000;\n   opacity: 0;\n@@ -1058,7 +2733,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #6b7280;\n+  color: #898989;\n }\n .cb-header-actions-dropdown .cb-dropdown-item:first-child {\n   border-radius: 7px 7px 0 0;\n@@ -1073,7 +2748,7 @@\n   background: #f8fafc;\n }\n .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger {\n   color: #ef4444;\n@@ -1084,17 +2759,17 @@\n .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover {\n   background: #fef2f2;\n }\n-.cb-header-actions-dropdown .cb-dropdown-item.loading {\n+.cb-header-actions-dropdown .cb-dropdown-item.loading, .cb-header-actions-dropdown .cb-dropdown-item.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n \n @keyframes pulse-save {\n   0%, 100% {\n-    box-shadow: 0 0 0 0 rgba(31, 116, 255, 0.4);\n+    box-shadow: 0 0 0 0 rgba(112, 103, 237, 0.4);\n   }\n   50% {\n-    box-shadow: 0 0 0 8px rgba(31, 116, 255, 0);\n+    box-shadow: 0 0 0 8px rgba(112, 103, 237, 0);\n   }\n }\n @media screen and (max-width: 1024px) {\n@@ -1123,15 +2798,14 @@\n   .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n   .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n     border-left: none;\n-    border-bottom-color: #1f74ff;\n+    border-bottom-color: #7067ED;\n   }\n }\n @media screen and (max-width: 768px) {\n   .lp-cb-top-header {\n     padding: 0 16px;\n   }\n-  .lp-cb-top-header .lp-cb-top-header__user-name,\n-  .lp-cb-top-header .lp-cb-top-header__user-link {\n+  .lp-cb-top-header .lp-cb-top-header__user-info {\n     display: none;\n   }\n   #lp-course-builder-sidebar.lp-cb-sidebar {\n@@ -1172,11 +2846,391 @@\n     flex-wrap: wrap;\n   }\n }\n-#lp-course-builder .lp-cb-tab__title {\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-cb-item-action-wrap {\n+  display: flex;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+\n+.lp-cb-item-action-expand-toggle {\n+  cursor: pointer;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+}\n+.lp-cb-item-action-expand-toggle svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n+}\n+.lp-cb-item-action-expand-toggle.lp-button {\n+  border: none;\n+}\n+.lp-cb-item-action-expand-toggle:hover {\n+  background-color: #eef1ff;\n+}\n+\n+.lp-cb-item-action-expand {\n+  display: flex;\n+  position: absolute;\n+  min-width: 160px;\n+  white-space: nowrap;\n+  top: 60px;\n+  right: 16px;\n+  transform: translate(15px, -15px);\n+  padding: 10px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 16px;\n+  font-weight: 500;\n+  z-index: 100;\n+}\n+\n+.lp-cb-item-action {\n+  padding: 10px;\n+  cursor: pointer;\n+  text-decoration: none;\n+  border-radius: 6px;\n+  color: #1e1e1e;\n+}\n+.lp-cb-item-action:hover {\n+  background-color: #f3f4f6;\n+}\n+.lp-cb-item-action.trash, .lp-cb-item-action.delete {\n+  color: #ef4444;\n+}\n+\n+.swal2-popup {\n+  padding: 20px;\n+  border-radius: 16px;\n+}\n+\n+.swal2-popup .content-title {\n+  margin: 0 0 20px 0;\n+  padding: 0;\n+  text-align: center;\n+  font-size: 1.5em;\n+  font-weight: bold;\n+}\n+\n+.swal2-popup.lp-select-items-popup {\n+  padding: 20px !important;\n+}\n+\n+button.swal2-close {\n+  height: 32px;\n+  width: 32px;\n+}\n+\n+button.swal2-cancel.swal2-styled {\n+  border-radius: 10px;\n+  padding: 10px 24px;\n+  background: #fff;\n+  color: #aaaaaa;\n+  border: 1px solid #e1e1e1;\n+  font-weight: 500;\n+  min-width: 140px;\n+}\n+\n+button.swal2-confirm.swal2-styled {\n+  background: #7067ed;\n+  border-radius: 12px;\n+  padding: 10px 24px;\n+  min-width: 140px;\n+}\n+\n+.swal2-icon.swal2-icon-show {\n+  border: none;\n+  margin-bottom: 5px;\n+}\n+\n+#swal2-title {\n+  padding: 0;\n+  font-size: 22px;\n+  color: #111111;\n+}\n+\n+#swal2-html-container {\n+  padding-top: 8px;\n+  font-size: 15px;\n+  color: #4f4f4f;\n+}\n+\n+#swal2-html-container:has(.lp-must-enable-ai-wrap) {\n+  padding: 0;\n+}\n+\n+div:where(.swal2-container).swal2-backdrop-show,\n+div:where(.swal2-container).swal2-noanimation {\n+  background: none !important;\n+  backdrop-filter: blur(3px);\n+}\n+\n+div:where(.swal2-container).swal2-center > .swal2-popup {\n+  border-radius: 12px;\n+  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n+}\n+\n+.swal2-container .button {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.swal2-container .button:hover {\n+  background-color: #5b52d1;\n+}\n+.swal2-container .button.lp-btn-close-ai-popup:hover {\n+  background-color: transparent;\n+  color: #7067ED;\n+}\n+.swal2-container .lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover {\n+  background-color: #5b52d1;\n+}\n+\n+.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content::before {\n+  content: none;\n+}\n+\n+.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content .lp-cb-swal-icon-image {\n+  display: block;\n+  width: 48px;\n+  height: 48px;\n+}\n+\n+#swal2-html-container:has(.lp-form-generate-data-ai) {\n+  padding-bottom: 24px;\n+}\n+#swal2-html-container:has(.lp-form-generate-data-ai) .form-grid {\n+  margin-bottom: 0;\n+}\n+\n+#lp-course-builder .cb-tab-header {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  margin: 20px 0 24px 0;\n+}\n+#lp-course-builder .cb-tab-header .lp-cb-tab__title {\n   font-size: 28px;\n   font-weight: 600;\n-  margin-bottom: 20px;\n   color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .cb-tab-filter-bar {\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .cb-filter-fields {\n+  display: flex;\n+  align-items: flex-end;\n+  gap: 16px;\n+  flex-wrap: wrap;\n+}\n+#lp-course-builder .cb-filter-group {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 6px;\n+}\n+#lp-course-builder .cb-filter-group label {\n+  font-size: 13px;\n+  font-weight: 500;\n+}\n+#lp-course-builder .cb-filter-search {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  padding: 10px 14px;\n+  gap: 8px;\n+  min-width: 200px;\n+}\n+#lp-course-builder .cb-filter-search input {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  outline: none;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .cb-filter-search input::placeholder {\n+  color: #6b7280;\n+}\n+#lp-course-builder select {\n+  padding: 10px 32px 10px 14px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: right 10px center;\n+  background-size: 14px;\n+}\n+#lp-course-builder select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+#lp-course-builder .cb-filter-actions {\n+  display: flex;\n+  gap: 4px;\n+  padding-bottom: 1px;\n+}\n+#lp-course-builder .cb-filter-btn {\n+  padding: 8px 20px;\n+  border: none;\n+  border-radius: 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+#lp-course-builder .cb-filter-btn:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder .cb-filter-reset {\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 20px;\n+  border-radius: 12px;\n+}\n+#lp-course-builder .cb-filter-reset:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+#lp-course-builder .cb-btn-add-new:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder .cb-btn-add-new .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder button.cb-btn-add-new {\n+  line-height: 1.5;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .cb-tab-header {\n+    flex-direction: column;\n+    align-items: stretch;\n+    gap: 12px;\n+  }\n+  #lp-course-builder .cb-tab-header .cb-btn-add-new {\n+    justify-content: center;\n+  }\n+  #lp-course-builder .cb-filter-fields {\n+    flex-direction: column;\n+    align-items: stretch;\n+  }\n+  #lp-course-builder .cb-filter-search {\n+    min-width: 100%;\n+  }\n+  #lp-course-builder .cb-filter-actions {\n+    justify-content: flex-start;\n+  }\n+}\n+#lp-course-builder .learn-press-tip {\n+  display: inline-flex;\n+  align-items: center;\n+  margin-top: 2px;\n+  color: #6b7280;\n+  font-style: normal;\n+  font-weight: normal;\n+  line-height: 1;\n+  vertical-align: baseline;\n+  cursor: pointer;\n+  position: relative;\n+}\n+#lp-course-builder .learn-press-tip:before {\n+  font-family: \"lp-icon\";\n+  content: \"\\f059\";\n+}\n+#lp-course-builder .learn-press-tip > * {\n+  display: none;\n+  position: absolute;\n+  bottom: 100%;\n+  left: 50%;\n+  transform: translateX(-50%);\n+  margin-bottom: 8px;\n+  padding: 8px 12px;\n+  background-color: #333;\n+  color: #fff !important;\n+  font-size: 12px;\n+  line-height: 1.5;\n+  text-align: center;\n+  border-radius: 4px;\n+  white-space: normal;\n+  width: max-content;\n+  max-width: 250px;\n+  z-index: 999;\n+  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n+  pointer-events: none;\n+}\n+#lp-course-builder .learn-press-tip > *::after {\n+  content: \"\";\n+  position: absolute;\n+  top: 100%;\n+  left: 50%;\n+  transform: translateX(-50%);\n+  border-width: 5px;\n+  border-style: solid;\n+  border-color: #333 transparent transparent transparent;\n+}\n+#lp-course-builder .learn-press-tip p {\n+  color: #fff !important;\n+  margin-left: 0 !important;\n+  width: 100% !important;\n+  font-weight: 500 !important;\n+}\n+#lp-course-builder .learn-press-tip:hover > * {\n+  display: block;\n }\n #lp-course-builder .cb-tab-course__action {\n   display: flex;\n@@ -1188,16 +3242,17 @@\n   position: relative;\n   display: flex;\n   align-items: center;\n-  background: #f5f5f5;\n-  border-radius: 6px;\n-  padding: 12px 16px;\n-  gap: 6px;\n+  border-radius: 12px;\n+  padding: 5px 0px;\n+  gap: 8px;\n   margin-bottom: 0;\n   border: 1px solid #e5e7eb;\n+  width: 40%;\n+  max-width: 500px;\n }\n #lp-course-builder .lp-icon-search {\n   font-size: 16px;\n-  color: #6b7280;\n+  color: #7067ED;\n   flex-shrink: 0;\n }\n #lp-course-builder .cb-input-search-course {\n@@ -1217,34 +3272,25 @@\n   border: none;\n   background: none;\n }\n-#lp-course-builder .cb-btn-add-new {\n-  display: inline-flex;\n-  align-items: center;\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  padding: 10px 20px;\n-  border-radius: 6px;\n-  text-decoration: none;\n-  font-size: 14px;\n-  font-weight: 500;\n-  transition: background-color 0.2s;\n+#lp-course-builder .cb-search-btn.loading {\n+  pointer-events: none;\n+}\n+#lp-course-builder .cb-search-btn.loading i {\n+  display: none;\n }\n #lp-course-builder .cb-btn-back a {\n   text-decoration: none;\n }\n-#lp-course-builder .cb-btn-add-new:hover {\n-  background-color: #333;\n-}\n #lp-course-builder .cb-list-course {\n-  list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n-  padding: 0;\n   margin: 0;\n+  padding: 0;\n+  list-style: none;\n+}\n+#lp-course-builder .cb-list-course li.course {\n+  margin-bottom: 20px;\n }\n #lp-course-builder .course {\n-  background: #fff;\n+  background: #ffffff;\n   border-radius: 12px;\n   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n   border: 1px solid #e5e7eb;\n@@ -1258,14 +3304,35 @@\n   gap: 20px;\n   padding: 16px;\n   height: 100%;\n+  position: relative;\n }\n #lp-course-builder .course-thumbnail {\n-  width: 280px;\n-  min-width: 280px;\n+  position: relative;\n+  margin: -2px;\n+}\n+@media (min-width: 769px) {\n+  #lp-course-builder .course-thumbnail {\n+    width: 26%;\n+  }\n+}\n+#lp-course-builder .course-thumbnail img {\n+  width: 100%;\n   border-radius: 8px;\n-  aspect-ratio: 16\u002F10;\n-  overflow: hidden;\n-  background-color: #f5f5f5;\n+  object-fit: cover;\n+}\n+#lp-course-builder .course-thumbnail .cb-item-status-badge {\n+  position: absolute;\n+  bottom: 8px;\n+  right: 8px;\n+  padding: 4px 10px;\n+  border-radius: 4px;\n+  font-size: 11px;\n+  font-weight: 600;\n+  text-transform: uppercase;\n+}\n+#lp-course-builder .course-thumbnail .cb-item-status-badge.offline {\n+  background: #1e40af;\n+  color: #ffffff;\n }\n #lp-course-builder .course-img {\n   width: 100%;\n@@ -1278,34 +3345,28 @@\n }\n #lp-course-builder .course-content {\n   flex: 1;\n-  display: flex;\n-  flex-direction: column;\n }\n #lp-course-builder .wap-course-title {\n   margin-top: 0;\n-  margin-bottom: 12px;\n-}\n-#lp-course-builder .wap-course-title a {\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  margin-bottom: 8px;\n }\n #lp-course-builder .course-permalink {\n   text-decoration: none;\n   color: #1e1e1e;\n   font-size: 18px;\n-  font-weight: 600;\n+  font-weight: 700;\n   display: block;\n   transition: color 0.2s;\n }\n #lp-course-builder .course-permalink:hover {\n-  color: #3b82f6;\n+  color: #2E91FA;\n }\n #lp-course-builder .course-title {\n   text-decoration: none;\n   line-height: 1.4;\n+  font-size: 20px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n }\n #lp-course-builder .course-featured {\n   display: inline-block;\n@@ -1321,21 +3382,32 @@\n #lp-course-builder .course-instructor__wrapper {\n   display: flex;\n   gap: 5px;\n-  margin-bottom: 15px;\n+  margin-bottom: 12px;\n   font-size: 13px;\n   color: #666;\n }\n+#lp-course-builder .course-instructor-category {\n+  margin-bottom: 12px;\n+}\n #lp-course-builder .course-instructor-category > div {\n   display: flex;\n   gap: 5px;\n   align-items: center;\n+  flex-wrap: wrap;\n }\n-#lp-course-builder .course-instructor-category label {\n-  color: #999;\n+#lp-course-builder .course-by-label,\n+#lp-course-builder .course-categories-label {\n+  color: #6b7280;\n+  font-size: 14px;\n+}\n+#lp-course-builder .course-category-name {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 500;\n }\n #lp-course-builder .course-instructor a,\n #lp-course-builder .course-categories a {\n-  color: #3b82f6;\n+  color: #2E91FA;\n   text-decoration: none;\n }\n #lp-course-builder .course-instructor a:hover,\n@@ -1345,33 +3417,60 @@\n #lp-course-builder .course-wrap-meta {\n   display: flex;\n   flex-wrap: wrap;\n-  gap: 15px;\n-  margin-bottom: 15px;\n-  padding-bottom: 15px;\n+  gap: 16px;\n+  margin-bottom: 16px;\n }\n #lp-course-builder .instructor-display-name {\n-  font-weight: 400;\n+  font-size: 14px;\n+  color: #1e1e1e;\n }\n #lp-course-builder .meta-item {\n   font-size: 14px;\n-  color: #666;\n+  color: #6b7280;\n   display: flex;\n   align-items: center;\n-  gap: 5px;\n+  gap: 8px;\n+}\n+#lp-course-builder .meta-item i {\n+  font-size: 16px;\n+  color: #7067ED;\n+}\n+#lp-course-builder .meta-item .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #7067ED;\n+}\n+#lp-course-builder .meta-item > div {\n+  display: contents;\n+}\n+#lp-course-builder .meta-item > div span {\n+  color: #6b7280;\n }\n #lp-course-builder .course-bottom {\n   margin-top: auto;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: flex-start;\n+  gap: 12px;\n }\n-#lp-course-builder .course-price {\n-  display: block;\n+#lp-course-builder .course-item-price-wrap {\n+  margin-bottom: 0;\n+}\n+#lp-course-builder .course-last-updated {\n+  font-size: 12px;\n+  color: #999;\n+  position: absolute;\n+  bottom: 16px;\n+  right: 16px;\n }\n #lp-course-builder .course-item-price .free {\n-  color: #10b981;\n+  color: #2E91FA;\n   font-weight: 600;\n   font-size: 16px;\n }\n #lp-course-builder .course-item-price .price {\n-  color: #3b82f6;\n+  color: #E31A1B;\n   font-weight: 700;\n   font-size: 18px;\n }\n@@ -1381,32 +3480,45 @@\n #lp-course-builder .course-action {\n   position: relative;\n   display: flex;\n-  align-items: flex-start;\n-  gap: 20px;\n+  gap: 8px;\n }\n #lp-course-builder .course-action-editor {\n-  padding: 15px 0 15px 20px;\n+  padding: 0;\n }\n #lp-course-builder .course-action-expanded {\n   cursor: pointer;\n-  padding: 15px 20px 15px 0;\n+  padding: 7px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  background: #ffffff;\n+  transition: all 0.2s;\n+  height: 36px;\n+  width: 36px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .course-action-expanded:hover {\n+  background: #F7F7F7;\n+  border-color: #d1d5db;\n }\n #lp-course-builder .course-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+  width: 20px;\n+  height: 20px;\n+  color: #6b7280;\n }\n #lp-course-builder .course-action-expanded__items {\n   display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n-  right: 0;\n-  transform: translate(100%, 10px);\n+  top: 60px;\n+  right: 16px;\n+  transform: translate(15px, -15px);\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n   z-index: 100;\n@@ -1430,7 +3542,7 @@\n #lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n }\n #lp-course-builder .course-action-expanded__items .course-action-expanded__trash,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete {\n@@ -1440,15 +3552,11 @@\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover {\n   background-color: #fef2f2;\n }\n-#lp-course-builder .course-action-expanded:hover + .course-action-expanded__items,\n-#lp-course-builder .course-action-expanded__items:hover {\n-  display: flex !important;\n-}\n #lp-course-builder .course-action .wap-course-title {\n   margin: 0;\n }\n #lp-course-builder .course-action .course-permalink {\n-  color: #3b82f6;\n+  color: #2E91FA;\n   font-size: 14px;\n   font-weight: 500;\n }\n@@ -1456,44 +3564,43 @@\n   text-decoration: underline;\n }\n #lp-course-builder .btn-edit-course {\n-  display: flex;\n+  display: inline-flex;\n   align-items: center;\n+  justify-content: center;\n   text-decoration: none;\n   font-size: 14px;\n-  font-weight: 500;\n-  border-radius: 6px;\n-  padding: 8px 16px;\n-  gap: 6px;\n-  border: 1px solid #e5e7eb;\n-  background: #fff;\n-  color: #1e1e1e;\n+  font-weight: 600;\n+  border-radius: 8px;\n+  padding: 0 20px;\n+  height: 36px;\n+  gap: 8px;\n+  border: none;\n+  background: #7067ED;\n+  color: #ffffff;\n   transition: all 0.2s;\n+  white-space: nowrap;\n }\n #lp-course-builder .btn-edit-course:hover {\n-  background: #f5f5f5;\n-  border-color: #d1d5db;\n-}\n-#lp-course-builder .btn-edit-course svg {\n-  width: 1rem;\n-  height: 1rem;\n+  background: #5b52d1;\n }\n #lp-course-builder .course-status {\n   display: inline-flex;\n }\n #lp-course-builder .course-status span {\n-  font-size: 12px;\n+  font-size: 13px;\n   padding: 4px 12px;\n-  border-radius: 20px;\n-  font-weight: 500;\n+  border-radius: 4px;\n+  font-weight: 600;\n   text-transform: capitalize;\n-}\n-#lp-course-builder .course-status:not(.publish):not(.trash) span {\n-  background-color: #fef3c7;\n-  color: #92400e;\n+  line-height: normal;\n }\n #lp-course-builder .course-status.publish span {\n-  color: #166534;\n-  background-color: #dcfce7;\n+  background: #E7F6E9;\n+  color: #28A746;\n+}\n+#lp-course-builder .course-status.future span {\n+  background: #ffd700;\n+  color: #333;\n }\n #lp-course-builder .course-status.trash span {\n   color: #991b1b;\n@@ -1522,27 +3629,32 @@\n   min-width: 36px;\n   height: 36px;\n   padding: 0 12px;\n-  border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   text-decoration: none;\n-  color: #333;\n+  color: #898989;\n   font-size: 14px;\n   transition: all 0.2s;\n-  background: #fff;\n+  background: #ffffff;\n+  font-weight: 600;\n }\n #lp-course-builder .page-numbers a:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n   border-color: #d1d5db;\n+  color: #1e1e1e;\n }\n #lp-course-builder .page-numbers .current {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border-color: #1e1e1e;\n-  font-weight: 600;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n #lp-course-builder .page-numbers .next,\n #lp-course-builder .page-numbers .prev {\n-  font-weight: 600;\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+#lp-course-builder .page-numbers .next:hover,\n+#lp-course-builder .page-numbers .prev:hover {\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n #lp-course-builder #lp-material-container {\n   font-size: 13px;\n@@ -1551,6 +3663,9 @@\n   margin: 0;\n   display: block;\n }\n+#lp-course-builder #lp-material-container hr {\n+  display: none;\n+}\n #lp-course-builder .field-material__label {\n   width: 150px;\n   max-width: 150px;\n@@ -1559,9 +3674,21 @@\n }\n #lp-course-builder .lp-material--field-wrap {\n   display: flex;\n-  align-items: center;\n   gap: 11px;\n-  margin-top: 11px;\n+  margin-top: 12px;\n+}\n+#lp-course-builder .lp-material--field-wrap label {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 600;\n+  width: 100px;\n+}\n+#lp-course-builder .lp-material--field-wrap:first-child {\n+  margin-top: 0;\n+}\n+#lp-course-builder .lp-material--field-wrap.field-action-wrap {\n+  justify-content: flex-start;\n+  flex-direction: row-reverse;\n }\n #lp-course-builder .lp-material--field-external-link,\n #lp-course-builder .lp-material--field-title {\n@@ -1569,56 +3696,116 @@\n   align-items: center;\n   gap: 8px;\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-course-builder .lp-material--field-method {\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n+#lp-course-builder .lp-material-btn-wrap {\n+  display: flex;\n+  gap: 12px;\n+  margin-top: 15px;\n+}\n+#lp-course-builder #lp-material--group-container .lp-material--group {\n+  padding: 20px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 12px;\n+  max-width: 420px;\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder #lp-material--group-container .lp-material--group:not(:has(*)) {\n+  display: none;\n+}\n+#lp-course-builder #btn-lp--add-material,\n+#lp-course-builder #btn-lp--save-material,\n #lp-course-builder .lp-material-save-field,\n #lp-course-builder .lp-material--delete {\n   padding: 8px 20px;\n   border-radius: 6px;\n-  background: #fff;\n+  background: #ffffff;\n   font-size: 14px;\n   font-weight: 500;\n   cursor: pointer;\n-  border: 1px solid #d1d5db;\n   transition: all 0.2s;\n }\n+#lp-course-builder #btn-lp--add-material {\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder #btn-lp--add-material:hover {\n+  background-color: #F7F7F7;\n+  border-color: #7067ED;\n+}\n+#lp-course-builder #btn-lp--save-material,\n+#lp-course-builder .lp-material-save-field {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder #btn-lp--save-material:hover,\n+#lp-course-builder .lp-material-save-field:hover {\n+  background-color: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+#lp-course-builder .lp-material--delete {\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-material--delete:hover {\n+  background-color: #F7F7F7;\n+  color: #1e1e1e;\n+  border-color: #1e1e1e;\n+}\n #lp-course-builder .lp-material--upload-wrap label {\n   cursor: pointer;\n   width: 100%;\n-  max-width: 200px;\n+  display: flex;\n+  align-items: center;\n+  gap: 6px;\n   padding: 8px 16px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   font-weight: 500;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n   transition: all 0.2s;\n-  margin-left: 56px;\n+  margin-left: 86px;\n+  overflow: hidden;\n }\n-#lp-course-builder .lp-material--field-upload {\n-  display: none;\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file {\n+  border-color: #7067ED;\n+  background-color: #f9fafb;\n+  font-size: 0;\n+}\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file::before {\n+  font-size: 14px;\n+}\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file::after {\n+  content: attr(data-file-name);\n+  flex: 1;\n+  min-width: 0;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  white-space: nowrap;\n+  font-size: 14px;\n+  font-weight: 600;\n }\n #lp-course-builder .lp-material--upload-wrap label:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n   border-color: #9ca3af;\n }\n #lp-course-builder .lp-material--upload-wrap label:active {\n@@ -1629,6 +3816,9 @@\n   content: \"📁 \";\n   margin-right: 5px;\n }\n+#lp-course-builder .lp-material--field-upload {\n+  display: none;\n+}\n #lp-course-builder .lp-material--table {\n   width: 100%;\n   border-collapse: collapse;\n@@ -1669,10 +3859,6 @@\n   #lp-course-builder .cb-list-course {\n     gap: 15px;\n   }\n-  #lp-course-builder .course-thumbnail {\n-    width: 200px;\n-    min-width: 200px;\n-  }\n }\n @media (max-width: 768px) {\n   #lp-course-builder .cb-tab-course__action {\n@@ -1690,26 +3876,459 @@\n   #lp-course-builder .course-item {\n     flex-direction: column;\n   }\n-  #lp-course-builder .course-thumbnail {\n-    width: 100%;\n-    min-width: 100%;\n-  }\n   #lp-course-builder .cb-list-course {\n     grid-template-columns: 1fr;\n   }\n }\n \n-#lp-course-builder .cb-list-quiz {\n-  list-style: none;\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+  display: grid;\n+  grid-template-columns: repeat(5, 1fr);\n+  gap: 20px;\n+  margin-bottom: 24px;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: repeat(3, 1fr);\n+  }\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: repeat(2, 1fr);\n+  }\n+}\n+@media (max-width: 480px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 24px 20px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  text-align: center;\n+  gap: 8px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card:hover {\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  transform: translateY(-2px);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon {\n+  width: 48px;\n+  height: 48px;\n+  border-radius: 50%;\n+  background: var(--card-bg, #f9fafb);\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+  margin-bottom: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon svg {\n+  width: 22px;\n+  height: 22px;\n+  color: var(--card-color, #7067ED);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__label {\n+  font-size: 12px;\n+  color: #6b7280;\n+  font-weight: 500;\n+  order: 1;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__value {\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  line-height: 1.2;\n+  order: 2;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row {\n+  display: grid;\n+  gap: 20px;\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin {\n+  grid-template-columns: 1fr 1fr 280px;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin {\n+    grid-template-columns: 1fr 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--instructor {\n+  grid-template-columns: 1fr 1fr;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 20px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter {\n+  padding: 5px 28px 5px 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 12px;\n+  color: #6b7280;\n+  cursor: pointer;\n+  outline: none;\n+  height: auto;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body {\n+  height: 220px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body canvas {\n+  width: 100% !important;\n+  height: 100% !important;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 16px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors {\n+    grid-column: 1\u002F-1;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__header {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__title {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__list {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 20px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item {\n+  display: flex;\n+  align-items: center;\n+  gap: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar {\n+  width: 48px;\n+  height: 48px;\n+  border-radius: 50%;\n+  overflow: hidden;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar img {\n+  width: 100%;\n+  height: 100%;\n+  object-fit: cover;\n+  border-radius: 50%;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__info {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+  min-width: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__name {\n+  font-size: 15px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__meta {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.2;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .no-data {\n+  text-align: center;\n+  color: #6b7280;\n+  font-style: italic;\n+  padding: 20px 0;\n+  font-size: 12px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper {\n   display: grid;\n-  grid-template-columns: 1fr;\n+  grid-template-columns: repeat(2, 1fr);\n   gap: 20px;\n+  margin-bottom: 24px;\n+  overflow-x: hidden;\n+  transition: overflow-x 0.3s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper:hover {\n+  overflow-x: auto;\n+}\n+@media (max-width: 900px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 20px 24px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  padding-bottom: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .enrolled-students-total {\n+  color: #7067ED;\n+  font-weight: 600;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .revenue-total {\n+  color: #E31A1B;\n+  font-weight: 700;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__list {\n+  display: flex;\n+  flex-direction: column;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item {\n+  display: flex;\n+  align-items: center;\n+  gap: 16px;\n+  padding: 16px 0;\n+  border-bottom: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:last-child {\n+  border-bottom: none;\n+  padding-bottom: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:first-child {\n+  padding-top: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb {\n+  width: 80px;\n+  height: 56px;\n+  border-radius: 8px;\n+  overflow: hidden;\n+  flex-shrink: 0;\n+  background: #f9fafb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb img {\n+  width: 100%;\n+  height: 100%;\n+  object-fit: cover;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder {\n+  width: 100%;\n+  height: 100%;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #f9fafb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder svg {\n+  color: #9ca3af;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__info {\n+  flex: 1;\n+  min-width: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title {\n+  font-size: 15px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  text-decoration: none;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  transition: color 0.15s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .author {\n+  color: #7067ed;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .category {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__price {\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin-top: 2px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge-wrapper {\n+  flex-shrink: 0;\n+  display: flex;\n+  align-items: center;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge {\n+  background: #e0f2fe;\n+  color: #0284c7;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 600;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__stats {\n+  text-align: right;\n+  flex-shrink: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue .revenue-amount {\n+  color: #ef4444;\n+  font-weight: 700;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__sold {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .no-data {\n+  text-align: center;\n+  color: #6b7280;\n+  font-style: italic;\n+  padding: 24px 0;\n+  font-size: 12px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions {\n+  background: #ffffff;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0 0 16px 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+  display: grid;\n+  grid-template-columns: repeat(4, 1fr);\n+  gap: 12px;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+    grid-template-columns: repeat(2, 1fr);\n+  }\n+}\n+@media (max-width: 480px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn {\n+  display: flex;\n+  align-items: center;\n+  gap: 10px;\n+  padding: 14px 18px;\n+  border-radius: 8px;\n+  background: var(--action-bg, #f9fafb);\n+  text-decoration: none;\n+  transition: all 0.2s ease;\n+  border: 1px solid transparent;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn:hover {\n+  border-color: var(--action-color, #e5e7eb);\n+  transform: translateY(-1px);\n+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon {\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  color: var(--action-color);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon svg {\n+  width: 20px;\n+  height: 20px;\n+  color: var(--action-color, #6b7280);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__label {\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses {\n+  background: #ffffff;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .recent-courses__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0 0 16px 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .cb-list-course {\n+  padding-bottom: 0;\n+}\n+\n+#lp-course-builder .cb-list-quiz {\n+  list-style: none;\n   padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n }\n #lp-course-builder .cb-tab-quiz__action {\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n+  margin-bottom: 24px;\n }\n #lp-course-builder .cb-input-search-quiz {\n   flex: 1;\n@@ -1719,166 +4338,322 @@\n   font-size: 15px;\n   color: #333;\n   font-family: inherit;\n+  margin-right: 10px;\n }\n #lp-course-builder .cb-input-search-quiz::placeholder {\n   color: #999;\n }\n-#lp-course-builder .cb-tab-quiz__action,\n-#lp-course-builder .courses-builder__quiz-tab {\n-  width: calc(100% - 140px);\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n }\n-#lp-course-builder .quiz-action {\n-  position: relative;\n-  display: flex;\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .quiz-item {\n+  display: grid;\n   align-items: center;\n-  gap: 20px;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n }\n-#lp-course-builder .quiz-action-expanded {\n+#lp-course-builder .quiz-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .quiz-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-quiz {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-quiz-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-quiz-title button,\n+#lp-course-builder .wap-quiz-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n   cursor: pointer;\n-  padding: 15px 20px 15px 0;\n }\n-#lp-course-builder .quiz-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder .wap-quiz-title button:hover,\n+#lp-course-builder .wap-quiz-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .quiz__date,\n+#lp-course-builder .quiz__duration,\n+#lp-course-builder .quiz__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-left: 8px;\n+}\n+#lp-course-builder .quiz__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .quiz__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .quiz-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .quiz-action-editor {\n+  display: flex;\n }\n #lp-course-builder .btn-edit-quiz {\n   display: flex;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n   text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  background-color: #fff;\n-  border: 1px solid #1e1e1e;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n }\n #lp-course-builder .btn-edit-quiz svg {\n-  width: 1rem;\n-  height: 1rem;\n+  width: 16px;\n+  height: 16px;\n }\n-#lp-course-builder .quiz-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n+#lp-course-builder .btn-edit-quiz:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-quiz.loading::before {\n+  margin: 0;\n   font-size: 16px;\n }\n-#lp-course-builder .highlight-new-quiz {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+#lp-course-builder .btn-edit-quiz.loading svg {\n+  display: none;\n }\n-#lp-course-builder .quiz-content {\n-  flex: 1;\n+#lp-course-builder .quiz-action-expanded {\n+  cursor: pointer;\n   display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n }\n-#lp-course-builder .quiz-content__left {\n-  display: flex;\n-  gap: 15px;\n+#lp-course-builder .quiz-action-expanded.loading::before {\n+  margin-right: 0;\n+  margin-top: 0;\n }\n-#lp-course-builder .quiz-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n+#lp-course-builder .quiz-action-expanded.loading svg {\n+  display: none;\n }\n-#lp-course-builder .quiz__preview svg {\n-  height: 20px;\n-  width: 20px;\n+#lp-course-builder .quiz-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n }\n-#lp-course-builder .wap-quiz-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n+#lp-course-builder .quiz-action-expanded:hover {\n+  background-color: #EEF1FF;\n }\n-#lp-course-builder .wap-quiz-title button {\n-  background-color: #fff;\n+#lp-course-builder .quiz-action-expanded:hover svg {\n+  color: #7067ED;\n+}\n+#lp-course-builder .quiz-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  right: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .quiz-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__quiz-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__quiz-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__quiz-tab .quiz-item {\n+  grid-template-columns: 2fr 1.5fr 80px 1fr 1fr 100px 80px;\n+}\n+#lp-course-builder .courses-builder__quiz-tab .lesson-assigned-courses .label {\n+  display: none;\n+}\n+#lp-course-builder .cb-list-quiz {\n   border: none;\n-  font-size: 20px;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  border-radius: 0;\n }\n-#lp-course-builder .quiz-status {\n-  padding: 5px 12px;\n+#lp-course-builder .quiz-status,\n+#lp-course-builder .quizzes-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n-#lp-course-builder .quiz-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+#lp-course-builder .quiz-status.publish,\n+#lp-course-builder .quizzes-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .quiz-status.draft,\n+#lp-course-builder .quizzes-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n }\n-#lp-course-builder .quiz-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+#lp-course-builder .quiz-status.pending,\n+#lp-course-builder .quizzes-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .quiz-status.private,\n+#lp-course-builder .quizzes-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n+}\n+#lp-course-builder .quiz-status.trash,\n+#lp-course-builder .quizzes-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n-#lp-course-builder .quiz-assigned-courses {\n-  max-width: 300px;\n-  margin-right: 20px;\n+#lp-course-builder .quiz-assigned-courses,\n+#lp-course-builder .lesson-assigned-courses {\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .quiz-assigned-courses .label,\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #6b7280;\n+  margin-right: 5px;\n }\n-#lp-course-builder .quiz-assigned-courses a {\n+#lp-course-builder .quiz-assigned-courses a,\n+#lp-course-builder .lesson-assigned-courses a {\n   text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .quiz-assigned-courses a:hover,\n+#lp-course-builder .lesson-assigned-courses a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .quiz-assigned-courses .label,\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #1e1e1e;\n }\n #lp-course-builder .quiz-action-expanded__items {\n-  display: flex;\n+  display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n+  top: calc(100% + 4px);\n   right: 0;\n-  transform: translate(100%, 10px);\n+  transform: none;\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n+  z-index: 100;\n }\n #lp-course-builder .quiz-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .quiz-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete {\n   padding: 10px;\n   cursor: pointer;\n   text-decoration: none;\n   border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n }\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n }\n-#lp-course-builder .quiz-action-expanded:hover + .quiz-action-expanded__items,\n-#lp-course-builder .quiz-action-expanded__items:hover {\n-  display: flex !important;\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n }\n \n #lp-course-builder .cb-list-question {\n   list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n   padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n }\n #lp-course-builder .cb-tab-question__action {\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n+  margin-bottom: 24px;\n }\n #lp-course-builder .cb-input-search-question {\n   flex: 1;\n@@ -1888,155 +4663,1303 @@\n   font-size: 15px;\n   color: #333;\n   font-family: inherit;\n+  margin-right: 10px;\n }\n #lp-course-builder .cb-input-search-question::placeholder {\n   color: #999;\n }\n-#lp-course-builder .cb-tab-question__action,\n-#lp-course-builder .courses-builder__question-tab {\n-  width: calc(100% - 140px);\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n }\n-#lp-course-builder .question-action {\n-  position: relative;\n-  display: flex;\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .question-item {\n+  display: grid;\n   align-items: center;\n-  gap: 20px;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n }\n-#lp-course-builder .question-action-expanded {\n+#lp-course-builder .question-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .question-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-question {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-question-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-question-title button,\n+#lp-course-builder .wap-question-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n   cursor: pointer;\n-  padding: 15px 20px 15px 0;\n }\n-#lp-course-builder .question-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder .wap-question-title button:hover,\n+#lp-course-builder .wap-question-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .question__date,\n+#lp-course-builder .question__duration,\n+#lp-course-builder .question__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-left: 8px;\n+}\n+#lp-course-builder .question__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .question__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .question-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .question-action-editor {\n+  display: flex;\n }\n #lp-course-builder .btn-edit-question {\n-  background-color: #fff;\n   display: flex;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n   text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  border: 1px solid #1e1e1e;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n }\n #lp-course-builder .btn-edit-question svg {\n-  width: 1rem;\n-  height: 1rem;\n+  width: 16px;\n+  height: 16px;\n }\n-#lp-course-builder .question-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n+#lp-course-builder .btn-edit-question:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-question.loading::before {\n+  margin: 0;\n   font-size: 16px;\n }\n-#lp-course-builder .highlight-new-question {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+#lp-course-builder .btn-edit-question.loading svg {\n+  display: none;\n }\n-#lp-course-builder .question-content {\n-  flex: 1;\n+#lp-course-builder .question-action-expanded {\n+  cursor: pointer;\n   display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n }\n-#lp-course-builder .question-content__left {\n-  display: flex;\n-  gap: 15px;\n+#lp-course-builder .question-action-expanded.loading::before {\n+  margin-right: 0;\n+  margin-top: 0;\n }\n-#lp-course-builder .question-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n+#lp-course-builder .question-action-expanded.loading svg {\n+  display: none;\n }\n-#lp-course-builder .question__preview svg {\n-  height: 20px;\n-  width: 20px;\n+#lp-course-builder .question-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n }\n-#lp-course-builder .wap-question-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n+#lp-course-builder .question-action-expanded:hover {\n+  background-color: #EEF1FF;\n }\n-#lp-course-builder .wap-question-title button {\n-  font-size: 20px;\n-  background: #fff;\n+#lp-course-builder .question-action-expanded:hover svg {\n+  color: #7067ED;\n+}\n+#lp-course-builder .question-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  right: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .question-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__question-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__question-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__question-tab .question-item {\n+  grid-template-columns: 2fr 1.5fr 1fr 100px 100px 80px;\n+}\n+#lp-course-builder .courses-builder__question-tab .question-assigned-quizzes .label {\n+  display: none;\n+}\n+#lp-course-builder .cb-list-question {\n   border: none;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  border-radius: 0;\n }\n #lp-course-builder .question-status {\n-  padding: 5px 12px;\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n #lp-course-builder .question-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .question-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+#lp-course-builder .question-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .question-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n }\n #lp-course-builder .question-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n #lp-course-builder .question-assigned-quizzes {\n-  max-width: 300px;\n-  margin-right: 30px;\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .question-assigned-quizzes .label {\n+  color: #6b7280;\n+  margin-right: 5px;\n }\n #lp-course-builder .question-assigned-quizzes a {\n   text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .question-assigned-quizzes a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .question-assigned-quizzes .label {\n+  color: #1e1e1e;\n }\n #lp-course-builder .question-action-expanded__items {\n-  display: flex;\n+  display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n+  top: calc(100% + 4px);\n   right: 0;\n-  transform: translate(100%, 10px);\n+  transform: none;\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n+  z-index: 100;\n }\n #lp-course-builder .question-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .question-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n #lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__publish,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__trash,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__restore,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__delete {\n   padding: 10px;\n   cursor: pointer;\n   text-decoration: none;\n   border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n }\n #lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__restore:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n+}\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n+}\n+\n+#lp-course-builder .cb-list-lesson {\n+  list-style: none;\n+  padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n+}\n+#lp-course-builder .cb-tab-lesson__action {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .cb-input-search-lesson {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  outline: none;\n+  font-size: 15px;\n+  color: #333;\n+  font-family: inherit;\n+  margin-right: 10px;\n+}\n+#lp-course-builder .cb-input-search-lesson::placeholder {\n+  color: #999;\n+}\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .lesson-item {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n+}\n+#lp-course-builder .lesson-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .lesson-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-lesson {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-lesson-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-lesson-title button,\n+#lp-course-builder .wap-lesson-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n+  cursor: pointer;\n+}\n+#lp-course-builder .wap-lesson-title button:hover,\n+#lp-course-builder .wap-lesson-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .lesson__date,\n+#lp-course-builder .lesson__duration,\n+#lp-course-builder .lesson__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-left: 8px;\n+}\n+#lp-course-builder .lesson__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .lesson__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lesson-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .lesson-action-editor {\n+  display: flex;\n+}\n+#lp-course-builder .btn-edit-lesson {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  text-decoration: none;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n+}\n+#lp-course-builder .btn-edit-lesson svg {\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder .btn-edit-lesson:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-lesson.loading::before {\n+  margin: 0;\n+  font-size: 16px;\n+}\n+#lp-course-builder .btn-edit-lesson.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .lesson-action-expanded {\n+  cursor: pointer;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n+}\n+#lp-course-builder .lesson-action-expanded.loading::before {\n+  margin-right: 0;\n+  margin-top: 0;\n+}\n+#lp-course-builder .lesson-action-expanded.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .lesson-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lesson-action-expanded:hover {\n+  background-color: #EEF1FF;\n+}\n+#lp-course-builder .lesson-action-expanded:hover svg {\n+  color: #7067ED;\n }\n-#lp-course-builder .question-action-expanded:hover + .question-action-expanded__items,\n-#lp-course-builder .question-action-expanded__items:hover {\n+#lp-course-builder .lesson-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  right: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .lesson-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__lesson-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__lesson-tab .lesson-item {\n+  grid-template-columns: 2fr 1.5fr 1fr 100px 80px 80px;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson-assigned-courses .label {\n+  display: none;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item {\n+  cursor: pointer;\n+  display: flex;\n+  margin-left: 12px;\n+  justify-content: flex-start;\n+  border: none;\n+  padding: 0;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading, #lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+  margin-left: 19px;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading a, #lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading a {\n+  display: none;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  text-decoration: none;\n+  font-size: 16px;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-list-lesson {\n+  border: none;\n+  border-radius: 0;\n+}\n+#lp-course-builder .lesson-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  border-radius: 20px;\n+  text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n+}\n+#lp-course-builder .lesson-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .lesson-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+#lp-course-builder .lesson-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .lesson-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n+}\n+#lp-course-builder .lesson-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n+}\n+#lp-course-builder .lesson-assigned-courses {\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #6b7280;\n+  margin-right: 5px;\n+}\n+#lp-course-builder .lesson-assigned-courses a {\n+  text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .lesson-assigned-courses a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .lesson-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: calc(100% + 4px);\n+  right: 0;\n+  transform: none;\n+  padding: 10px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 16px;\n+  font-weight: 500;\n+  z-index: 100;\n+}\n+#lp-course-builder .lesson-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .lesson-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n+  padding: 10px;\n+  cursor: pointer;\n+  text-decoration: none;\n+  border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n+  background-color: #F7F7F7;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n+}\n+\n+#lp-course-builder .lp-cb-settings .lp-meta-box,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+#lp-course-builder .lp-cb-settings .lp-meta-box .lp-meta-box__inner,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+#lp-course-builder .lp-cb-settings .form-field,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+#lp-course-builder .lp-cb-settings .form-field > label,\n+#lp-course-builder .lp-cb-settings .form-field label span,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration > label,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration label span,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field > label,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number],\n+#lp-course-builder .lp-cb-settings .form-field input[type=text],\n+#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+#lp-course-builder .lp-cb-settings .form-field select,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration select,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+#lp-course-builder .lp-cb-settings .form-field select:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration select:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio],\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field .description,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+#lp-course-builder .lp-cb-settings .form-field .description:has(+ .learn-press-tip),\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+#lp-course-builder .lp-cb-settings .form-field > .learn-press-tip,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration > .learn-press-tip,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 10px;\n+  width: 100%;\n+  max-width: 620px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-settings__section {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__actions {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  padding-top: 10px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn {\n+  min-height: 34px;\n+  border-radius: 6px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger) {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):hover, #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):focus {\n+  background: #5b52d1;\n+  border-color: #5b52d1;\n+  color: #fff;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn.is-hidden {\n+  display: none;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background-color: #ffffff;\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:hover, #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:focus {\n+  color: #dc2626;\n+  border-color: #fee2e2;\n+  background: #fee2e2;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-wrap {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  width: 100%;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  gap: 12px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  white-space: nowrap;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: flex-start;\n+  width: 100%;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default.is-hidden {\n+  display: none;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-svg {\n+  display: block;\n+  width: 181px;\n+  max-width: 100%;\n+  height: auto;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-image {\n+  display: block;\n+  width: auto;\n+  max-width: 100%;\n+  height: auto;\n+  max-height: 40px;\n+  object-fit: contain;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img {\n+  display: block;\n+  width: auto;\n+  height: auto;\n+  max-width: 260px;\n+  max-height: 40px;\n+  object-fit: contain;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img.is-hidden {\n+  display: none;\n+}\n+@media (max-width: 767px) {\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting {\n+    max-width: 100%;\n+  }\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row {\n+    flex-direction: column;\n+    align-items: flex-start;\n+  }\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview {\n+    width: 100%;\n+    max-width: 100%;\n+  }\n+}\n+\n+.lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+\n+.lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-right: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-left: 3px solid transparent;\n+  margin-left: -3px;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-left-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+\n+.lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #fff;\n+}\n+\n+.lp-option-disabled {\n+  pointer-events: none;\n+  opacity: 0.5;\n+}\n+\n+#lp-course-builder .cb-terms-header__label-wrap {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+}\n+#lp-course-builder .cb-terms-header__btn-search {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 22px;\n+  height: 22px;\n+  padding: 0;\n+  border: none;\n+  border-radius: 999px;\n+  background: transparent;\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .cb-terms-header__btn-search .lp-icon-search {\n+  width: 14px;\n+  height: 14px;\n+  font-size: 14px;\n+  color: #9ca3af;\n+}\n+#lp-course-builder .cb-terms-header__btn-search:hover {\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .cb-terms-header__btn-search:hover .lp-icon-search {\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] {\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] .lp-icon-search {\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-terms-search-toolbar {\n+  max-height: 0;\n+  opacity: 0;\n+  overflow: hidden;\n+  pointer-events: none;\n+  margin-bottom: 0 !important;\n+  transition: max-height 0.25s ease, opacity 0.2s ease, margin-bottom 0.25s ease;\n+}\n+#lp-course-builder .cb-terms-search-toolbar.is-open {\n+  max-height: 80px;\n+  opacity: 1;\n+  pointer-events: auto;\n+  margin-bottom: 16px !important;\n+}\n \n+.lp-course-builder-content__section .lp-meta-box,\n+.lp-course-builder-content__section .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-course-builder-content__section .lp-meta-box .lp-meta-box__inner,\n+.lp-course-builder-content__section .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-course-builder-content__section .form-field,\n+.lp-course-builder-content__section .lp-meta-box__duration,\n+.lp-course-builder-content__section .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-course-builder-content__section .form-field > label,\n+.lp-course-builder-content__section .form-field label span,\n+.lp-course-builder-content__section .lp-meta-box__duration > label,\n+.lp-course-builder-content__section .lp-meta-box__duration label span,\n+.lp-course-builder-content__section .lp-meta-box-field > label,\n+.lp-course-builder-content__section .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-course-builder-content__section .form-field input[type=number],\n+.lp-course-builder-content__section .form-field input[type=text],\n+.lp-course-builder-content__section .form-field input[type=datetime-local],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=text],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=text],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-course-builder-content__section .form-field input[type=number]:focus,\n+.lp-course-builder-content__section .form-field input[type=text]:focus,\n+.lp-course-builder-content__section .form-field input[type=datetime-local]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=text]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=text]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=number],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-course-builder-content__section .form-field select,\n+.lp-course-builder-content__section .lp-meta-box__duration select,\n+.lp-course-builder-content__section .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-course-builder-content__section .form-field select:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration select:focus,\n+.lp-course-builder-content__section .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=radio],\n+.lp-course-builder-content__section .form-field input[type=checkbox],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:before,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:checked,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:checked,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:checked:before,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:focus,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field .description,\n+.lp-course-builder-content__section .lp-meta-box__duration .description,\n+.lp-course-builder-content__section .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-course-builder-content__section .form-field .description:has(+ .learn-press-tip),\n+.lp-course-builder-content__section .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-course-builder-content__section .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-course-builder-content__section .form-field > .learn-press-tip,\n+.lp-course-builder-content__section .lp-meta-box__duration > .learn-press-tip,\n+.lp-course-builder-content__section .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n .lp-course-builder-content__section .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n@@ -2058,8 +5981,8 @@\n   gap: 40px;\n }\n .lp-course-builder-content__section .cb-course-edit-column--left {\n-  flex: 0 0 320px;\n-  max-width: 320px;\n+  flex: 0 0 400px;\n+  max-width: 400px;\n }\n .lp-course-builder-content__section .cb-course-edit-column--right {\n   flex: 1;\n@@ -2091,6 +6014,31 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n+.lp-course-builder-content__section .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  margin-left: auto;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-course-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n@@ -2110,28 +6058,139 @@\n .lp-course-builder-content__section .cb-course-edit-permalink {\n   margin-bottom: 20px;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__label {\n+.lp-course-builder-content__section .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-content__section .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-permalink-label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input {\n-  width: 100%;\n-  padding: 10px 12px;\n+.lp-course-builder-content__section .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-content__section .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn .dashicons {\n   font-size: 14px;\n-  border: 1px solid #ddd;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-content__section .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-content__section .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-content__section .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.lp-course-builder-content__section .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n   border-radius: 6px;\n   outline: none;\n-  transition: border-color 0.2s;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n+.lp-course-builder-content__section .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input::placeholder {\n-  color: #9ca3af;\n+.lp-course-builder-content__section .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.lp-course-builder-content__section .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-content__section .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-content__section .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n }\n .lp-course-builder-content__section .cb-course-edit-desc {\n   margin-bottom: 24px;\n@@ -2160,13 +6219,32 @@\n .lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-course-edit-categories__label,\n-.lp-course-builder-content__section .cb-course-edit-tags__label {\n-  display: block;\n+.lp-course-builder-content__section .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-terms-header__label {\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 12px;\n+  margin: 0;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n }\n .lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper {\n   display: flex;\n@@ -2176,10 +6254,68 @@\n .lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   flex: 1;\n   border-radius: 8px;\n-  border: 1px solid #ddd;\n+  border: 1px solid #e5e7eb;\n   padding: 16px;\n }\n-.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper,\n+.lp-course-builder-content__section .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper {\n   display: flex;\n   gap: 10px 40px;\n@@ -2188,18 +6324,65 @@\n .lp-course-builder-content__section .cb-course-edit-tags__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox,\n+.lp-course-builder-content__section .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox {\n   display: flex;\n   align-items: center;\n   margin-bottom: 0;\n   padding: 4px 0;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox:hover label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label {\n   color: #1d2939;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox],\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n@@ -2215,45 +6398,38 @@\n   transition: all 0.2s ease;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:hover,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n   border-color: #98a2b3;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+  background: #28A746;\n+  border-color: #28A746;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n   content: \"\";\n   position: absolute;\n-  left: 5px;\n-  top: 2px;\n-  width: 6px;\n-  height: 10px;\n-  border: solid #1e1e1e;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n   border-width: 0 2px 2px 0;\n-  transform: rotate(45deg);\n+  transform: translate(-50%, -60%) rotate(45deg);\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:focus,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n   opacity: 0.5;\n   cursor: not-allowed;\n   border-color: #e4e7ec;\n   background: #f9fafb;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled + label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n   opacity: 0.5;\n   cursor: not-allowed;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox label {\n   font-size: 14px;\n   color: #344054;\n@@ -2265,12 +6441,18 @@\n .lp-course-builder-content__section .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n+.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n .lp-course-builder-content__section .cb-course-edit-featured-image__title {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 8px;\n+  margin-bottom: 0;\n }\n .lp-course-builder-content__section .cb-featured-image-container {\n   display: flex;\n@@ -2280,7 +6462,7 @@\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone {\n   width: 100%;\n-  min-height: 180px;\n+  min-height: 200px;\n   background: #fff;\n   border: 2px dashed #d1d5db;\n   border-radius: 8px;\n@@ -2292,38 +6474,46 @@\n   overflow: hidden;\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone:hover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.03);\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.lp-course-builder-content__section .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n   border-style: solid;\n   border-color: #e5e7eb;\n   padding: 0;\n }\n-.lp-course-builder-content__section .cb-featured-image-dropzone.has-image:hover {\n-  border-color: #1f74ff;\n-}\n .lp-course-builder-content__section .cb-featured-image-dropzone.dragover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n }\n .lp-course-builder-content__section .cb-featured-image-upload-content {\n   text-align: center;\n   padding: 30px 20px;\n }\n .lp-course-builder-content__section .cb-featured-image-icon {\n-  display: block;\n-  font-size: 36px;\n+  display: flex;\n+  justify-content: center;\n   margin-bottom: 12px;\n   opacity: 0.6;\n }\n+.lp-course-builder-content__section .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n .lp-course-builder-content__section .cb-featured-image-text {\n   font-size: 14px;\n   color: #6b7280;\n   margin: 0 0 6px 0;\n }\n .lp-course-builder-content__section .cb-featured-image-link {\n-  color: #1f74ff;\n+  color: #1a1a1a;\n   text-decoration: none;\n   font-weight: 500;\n }\n@@ -2349,24 +6539,27 @@\n }\n .lp-course-builder-content__section .cb-change-featured-image {\n   padding: 6px 14px;\n-  border: 1px solid #1f74ff;\n-  background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n   font-size: 12px;\n   font-weight: 500;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n .lp-course-builder-content__section .cb-change-featured-image:hover {\n-  background: #1f74ff;\n+  background: #7067ED;\n   color: #fff;\n }\n .lp-course-builder-content__section .cb-remove-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #ef4444;\n-  background: #fff;\n-  color: #ef4444;\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n   border-radius: 4px;\n   font-size: 12px;\n   font-weight: 500;\n@@ -2377,6 +6570,72 @@\n   background: #ef4444;\n   color: #fff;\n }\n+.lp-course-builder-content__section .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row select {\n+  padding: 6px 32px 6px 14px !important;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n .lp-course-builder-content__section .cb-featured-image-preview {\n   background: #f5f5f5;\n   border: 2px dashed #ddd;\n@@ -2412,9 +6671,9 @@\n }\n .lp-course-builder-content__section .cb-set-featured-image {\n   padding: 8px 16px;\n-  border: 1px solid #1f74ff;\n+  border: 1px solid #7067ED;\n   background: #fff;\n-  color: #1f74ff;\n+  color: #7067ED;\n   border-radius: 4px;\n   font-size: 13px;\n   font-weight: 500;\n@@ -2422,44 +6681,66 @@\n   transition: background-color 0.2s;\n }\n .lp-course-builder-content__section .cb-set-featured-image:hover {\n-  background: #1f74ff;\n+  background: #7067ED;\n   color: #fff;\n }\n .lp-course-builder-content__section div.mce-statusbar {\n   border-top: none;\n }\n-.lp-course-builder-content__section .cb-course-edit-category__btn-add-new,\n-.lp-course-builder-content__section .cb-course-edit-tag__btn-add-new,\n-.lp-course-builder-content__section .cb-course-edit-category__btn-cancel,\n-.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel {\n-  font-size: 16px;\n-  margin-top: 15px;\n-  padding: 5px 0;\n-  cursor: pointer;\n-  border: none;\n-  background: none;\n-}\n .lp-course-builder-content__section .cb-course-edit-terms__form-add-category,\n .lp-course-builder-content__section .cb-course-edit-terms__form-add-tag {\n   display: flex;\n-  gap: 10px;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n }\n .lp-course-builder-content__section .cb-course-edit-category__input,\n .lp-course-builder-content__section .cb-course-edit-tags__input {\n   width: 100%;\n-  padding: 10px 12px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__input:focus,\n+.lp-course-builder-content__section .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n   font-size: 14px;\n   border: 1px solid #ddd;\n   border-radius: 6px;\n   outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n }\n .lp-course-builder-content__section .cb-course-edit-category__btn-save,\n .lp-course-builder-content__section .cb-course-edit-tags__btn-save {\n+  flex: 1;\n   background: #1e1e1e;\n   color: white;\n-  border-radius: 5px;\n-  padding: 5px 20px;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n   border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n }\n .lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,\n .lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading {\n@@ -2481,6 +6762,26 @@\n   vertical-align: middle;\n   margin-top: -2px;\n }\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n@@ -2542,54 +6843,38 @@\n     max-width: 300px;\n   }\n }\n-\n-.lp-cb-tab-content .cb-section__course-edit .course-status {\n+.lp-course-builder-content__section .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n   background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 12px;\n   text-transform: capitalize;\n }\n-.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+.lp-course-builder-content__section .course-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+.lp-course-builder-content__section .course-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n-  display: flex;\n-  gap: 40px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n-  flex: 0 0 320px;\n-  max-width: 320px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n-  flex: 1;\n-  min-width: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n-  margin-bottom: 20px;\n+.lp-course-builder-content__section .cb-course-edit-title {\n+  margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+.lp-course-builder-content__section .cb-course-edit-title__label-wrap {\n   display: flex;\n   align-items: center;\n   gap: 8px;\n   margin-bottom: 8px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+.lp-course-builder-content__section .cb-course-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required {\n-  color: #ef4444;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+.lp-course-builder-content__section .cb-course-edit-title__char-count {\n   font-size: 12px;\n   font-weight: 500;\n   color: #6b7280;\n@@ -2597,33 +6882,7 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n-  width: 100%;\n-  padding: 10px 12px;\n-  font-size: 14px;\n-  border: 1px solid #ddd;\n-  border-radius: 6px;\n-  outline: none;\n-  transition: border-color 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder {\n-  color: #9ca3af;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink {\n-  margin-bottom: 20px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__label {\n-  display: block;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input {\n+.lp-course-builder-content__section .cb-course-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -2632,29 +6891,26 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input::placeholder {\n-  color: #9ca3af;\n+.lp-course-builder-content__section .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+.lp-course-builder-content__section .cb-course-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+.lp-course-builder-content__section .cb-course-edit-desc__label-wrap {\n   display: flex;\n   align-items: center;\n   gap: 8px;\n   margin-bottom: 8px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+.lp-course-builder-content__section .cb-course-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+.lp-course-builder-content__section .cb-course-edit-desc__word-count {\n   display: none;\n   font-size: 12px;\n   font-weight: 500;\n@@ -2663,50 +6919,194 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__label {\n-  display: block;\n+.lp-course-builder-content__section .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-terms-header__label {\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 12px;\n+  margin: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper {\n   display: flex;\n-  gap: 30px;\n+  gap: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__wrapper,\n+.lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   flex: 1;\n-  border-radius: 8px;\n-  border: 1px solid #ddd;\n-  padding: 16px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper {\n   display: flex;\n   gap: 10px 40px;\n   flex-wrap: wrap;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+.lp-course-builder-content__section .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox {\n   display: flex;\n   align-items: center;\n   margin-bottom: 0;\n   padding: 4px 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox:hover label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label {\n   color: #1d2939;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox],\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n   -moz-appearance: none;\n@@ -2721,46 +7121,39 @@\n   transition: all 0.2s ease;\n   flex-shrink: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:hover,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n   border-color: #98a2b3;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n   content: \"\";\n   position: absolute;\n-  left: 5px;\n-  top: 2px;\n-  width: 6px;\n-  height: 10px;\n-  border: solid #1e1e1e;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n   border-width: 0 2px 2px 0;\n-  transform: rotate(45deg);\n+  transform: translate(-50%, -60%) rotate(45deg);\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:focus,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n   outline: none;\n-  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+  box-shadow: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n   opacity: 0.5;\n   cursor: not-allowed;\n   border-color: #e4e7ec;\n   background: #f9fafb;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled + label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n   opacity: 0.5;\n   cursor: not-allowed;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox label {\n   font-size: 14px;\n   color: #344054;\n   font-weight: 400;\n@@ -2768,122 +7161,28 @@\n   user-select: none;\n   line-height: 20px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+.lp-course-builder-content__section .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n-  display: block;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n-  display: flex;\n-  flex-direction: column;\n-  gap: 12px;\n-  align-items: flex-start;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone {\n-  width: 100%;\n-  min-height: 180px;\n-  background: #fff;\n-  border: 2px dashed #d1d5db;\n-  border-radius: 8px;\n+.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap {\n   display: flex;\n   align-items: center;\n-  justify-content: center;\n-  cursor: pointer;\n-  transition: all 0.2s ease;\n-  overflow: hidden;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.03);\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image {\n-  border-style: solid;\n-  border-color: #e5e7eb;\n-  padding: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image:hover {\n-  border-color: #1f74ff;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content {\n-  text-align: center;\n-  padding: 30px 20px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon {\n-  display: block;\n-  font-size: 36px;\n+  gap: 8px;\n   margin-bottom: 12px;\n-  opacity: 0.6;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text {\n+.lp-course-builder-content__section .cb-course-edit-featured-image__title {\n   font-size: 14px;\n-  color: #6b7280;\n-  margin: 0 0 6px 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link {\n-  color: #1f74ff;\n-  text-decoration: none;\n-  font-weight: 500;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover {\n-  text-decoration: underline;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint {\n-  font-size: 12px;\n-  color: #9ca3af;\n-  margin: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img {\n-  width: 100%;\n-  height: auto;\n-  max-height: 200px;\n-  object-fit: cover;\n-  display: block;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+.lp-course-builder-content__section .cb-featured-image-container {\n   display: flex;\n-  flex-direction: row;\n-  gap: 12px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #1f74ff;\n-  background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover {\n-  background: #1f74ff;\n-  color: #fff;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #ef4444;\n-  background: #fff;\n-  color: #ef4444;\n-  border-radius: 4px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover {\n-  background: #ef4444;\n-  color: #fff;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+.lp-course-builder-content__section .cb-featured-image-preview {\n   background: #f5f5f5;\n   border: 2px dashed #ddd;\n   border-radius: 6px;\n@@ -2892,10 +7191,10 @@\n   justify-content: center;\n   flex-shrink: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+.lp-course-builder-content__section .cb-featured-image-preview:has(img) {\n   border: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+.lp-course-builder-content__section .cb-featured-image-placeholder {\n   width: 300px;\n   height: 200px;\n   display: flex;\n@@ -2905,75 +7204,141 @@\n   color: #999;\n   font-size: 14px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+.lp-course-builder-content__section .cb-featured-image-placeholder::before {\n   content: \"📷\";\n   font-size: 48px;\n   margin-bottom: 8px;\n   opacity: 0.5;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+.lp-course-builder-content__section .cb-featured-image-actions {\n   display: flex;\n   flex-direction: row;\n   gap: 12px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n-  padding: 8px 16px;\n-  border: 1px solid #1f74ff;\n+.lp-course-builder-content__section .cb-remove-featured-image,\n+.lp-course-builder-content__section .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-remove-featured-image:hover,\n+.lp-course-builder-content__section .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n   background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n   font-size: 13px;\n   font-weight: 500;\n-  cursor: pointer;\n-  transition: background-color 0.2s;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n-  background: #1f74ff;\n-  color: #fff;\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n }\n-.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+.lp-course-builder-content__section div.mce-statusbar {\n   border-top: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-add-new,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-add-new,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel {\n-  font-size: 16px;\n-  margin-top: 15px;\n-  padding: 5px 0;\n-  cursor: pointer;\n-  border: none;\n-  background: none;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,\n+.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag {\n   display: flex;\n-  gap: 10px;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+.lp-course-builder-content__section .cb-course-edit-category__input,\n+.lp-course-builder-content__section .cb-course-edit-tags__input {\n   width: 100%;\n-  padding: 10px 12px;\n+  padding: 8px 12px;\n   font-size: 14px;\n   border: 1px solid #ddd;\n   border-radius: 6px;\n   outline: none;\n+  transition: border-color 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n-  background: #1e1e1e;\n-  color: white;\n-  border-radius: 5px;\n-  padding: 5px 20px;\n-  border: 0;\n+.lp-course-builder-content__section .cb-course-edit-category__input:focus,\n+.lp-course-builder-content__section .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading {\n   pointer-events: none;\n   opacity: 0.8;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before {\n   display: inline-block;\n   font-family: \"lp-icon\";\n   content: \"\\f110\";\n@@ -2987,7 +7352,27 @@\n   vertical-align: middle;\n   margin-top: -2px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -2995,530 +7380,2795 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+.lp-course-builder-content__section .cb-button.cb-btn-update {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+.lp-course-builder-content__section .cb-button.cb-btn-trash {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings {\n   background: #1e1e1e;\n   color: #fff;\n   border: none;\n   transition: background 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover {\n   background: #333;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading {\n   pointer-events: none;\n   opacity: 0.7;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+.lp-course-builder-content__section .cb-settings-footer {\n   margin-top: 30px;\n   padding-top: 20px;\n   border-top: 1px solid #e5e7eb;\n   display: flex;\n   justify-content: flex-end;\n }\n-@media (max-width: 900px) {\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n-    flex-direction: column;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n-    flex: 1;\n-    max-width: 100%;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n-    flex: 1;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n-    flex-direction: column;\n-    gap: 24px;\n-  }\n+.lp-course-builder-content__section #general_course_data .form-field,\n+.lp-course-builder-content__section #offline_course_data .form-field,\n+.lp-course-builder-content__section #price_course_data .form-field,\n+.lp-course-builder-content__section #extra_course_data .form-field {\n+  margin-bottom: 24px;\n }\n-@media (max-width: 768px) {\n-  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n-    flex-direction: column;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n-    width: 100%;\n-    max-width: 300px;\n-  }\n+.lp-course-builder-content__section #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n }\n-.lp-cb-tab-content .cb-section__header {\n-  display: none !important;\n+.lp-course-builder-content__section #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n }\n-\n-.lp-meta-box-course-panels::before {\n-  content: attr(data-tab-title);\n-  display: block;\n-  font-size: 24px;\n-  font-weight: 700;\n-  color: #1e1e1e;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #e5e7eb;\n-  line-height: 1.2;\n+.lp-course-builder-content__section #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n }\n-\n-.lp-meta-box__course-tab {\n-  display: flex;\n-  min-height: 600px;\n-  background: #fff;\n+.lp-course-builder-content__section #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n }\n-\n-ul.lp-meta-box__course-tab__tabs {\n-  width: 220px;\n-  background: #ffffff;\n-  border-right: 1px solid #e5e7eb;\n-  margin: 0;\n-  padding: 20px 0;\n-  list-style: none;\n-  flex-shrink: 0;\n+.lp-course-builder-content__section #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n }\n-ul.lp-meta-box__course-tab__tabs li {\n-  margin-bottom: 2px;\n-  padding: 0 12px;\n+.lp-course-builder-content__section #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n }\n-ul.lp-meta-box__course-tab__tabs li a {\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-left: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label {\n   display: flex;\n+  flex-wrap: wrap;\n   align-items: center;\n-  padding: 12px 16px;\n-  text-decoration: none;\n-  color: #6b7280;\n-  font-weight: 500;\n-  font-size: 14px;\n-  transition: all 0.2s ease;\n-  border-left: 3px solid transparent;\n-  margin-left: -3px;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n }\n-ul.lp-meta-box__course-tab__tabs li a i {\n-  display: none;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n }\n-ul.lp-meta-box__course-tab__tabs li a:hover {\n-  background-color: #fff;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-left: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n+  font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n }\n-ul.lp-meta-box__course-tab__tabs li.active a,\n-ul.lp-meta-box__course-tab__tabs li a:focus {\n-  background-color: #fff;\n-  color: #3b82f6;\n-  font-weight: 600;\n-  border-left-color: #3b82f6;\n-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n }\n-\n-.lp-meta-box__course-tab__content {\n-  flex-grow: 1;\n-  padding: 30px 40px;\n-  background: #fff;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n }\n-\n-@media (max-width: 768px) {\n-  .lp-meta-box__course-tab {\n-    flex-direction: column;\n-  }\n-  ul.lp-meta-box__course-tab__tabs {\n-    width: 100%;\n-    border-right: none;\n-    border-bottom: 1px solid #e5e7eb;\n-    display: flex;\n-    overflow-x: auto;\n-    padding: 12px;\n-    background: #f9fafb;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li {\n-    flex-shrink: 0;\n-    padding: 0 4px;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li a {\n-    border-left: none;\n-    border-bottom: 3px solid transparent;\n-    margin-left: 0;\n-    white-space: nowrap;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li.active a {\n-    border-left: none;\n-    border-bottom-color: #3b82f6;\n-  }\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum {\n-  background-color: #fff;\n-  border-radius: 12px;\n-  padding: 28px 0 0;\n-  color: #1f2937;\n-  max-width: 100%;\n-  box-sizing: border-box;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .heading {\n+.lp-course-builder-content__section .lp_course_extra_meta_box,\n+.lp-course-builder-content__section .lp_course_faq_meta_box {\n   display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f5f5f5;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,\n-#lp-course-builder-content #lp-course-edit-curriculum .count-sections,\n-#lp-course-builder-content #lp-course-edit-curriculum .total-items {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n-  font-size: 12px;\n+.lp-course-builder-content__section .lp_course_extra_meta_box > label,\n+.lp-course-builder-content__section .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n   font-weight: 600;\n-  padding: 6px 18px;\n-  border-radius: 12px;\n-  margin-left: 10px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  margin-left: auto;\n-  padding: 5px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections {\n-  border: none;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section {\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  margin-bottom: 16px;\n-  transition: all 0.2s ease;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__content,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n-  border-color: #d1d5db;\n-  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n+.lp-course-builder-content__section .lp_course_extra_meta_box__fields,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head {\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field {\n   display: flex;\n   align-items: center;\n-  padding: 10px 20px;\n-  background-color: #fff;\n-  border-bottom: 1px solid transparent;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n   border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag {\n-  cursor: grab;\n-  color: #9ca3af;\n-  margin-right: 12px;\n-  font-size: 16px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head .button {\n-  font-size: 12px;\n-  padding: 6px 12px;\n-  border-radius: 6px;\n-  margin-left: 8px;\n-  cursor: pointer;\n-  font-weight: 500;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n-  border-bottom-color: #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input {\n-  flex-grow: 1;\n-  border: 1px solid transparent;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n   background: transparent;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1e1e1e;\n-  padding: 6px 10px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-  width: auto;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover, #lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section {\n-  color: #ef4444;\n-  background: rgba(254, 226, 226, 0.5);\n-  border: none;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n   transition: background 0.2s;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n-  background: #fee2e2;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up {\n-  margin-left: 15px;\n-  color: #777777;\n-  cursor: pointer;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n-  color: #1e1e1e !important;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-collapse {\n-  padding: 20px;\n-  background-color: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n-  border-top: unset;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea {\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label input[type=text],\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea {\n   width: 100%;\n-  border: 1px dashed #d1d5db;\n-  background: #fff;\n-  padding: 10px;\n+  border: 1px solid #eaeaec;\n   border-radius: 6px;\n-  font-size: 13px;\n-  color: #6b7280;\n-  resize: vertical;\n-  min-height: 60px;\n-  margin-bottom: 15px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus {\n-  border-style: solid;\n-  border-color: #9ca3af;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n   outline: none;\n-  color: #374151;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items {\n-  list-style: none;\n-  padding: 0;\n-  margin: 0;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item {\n-  display: flex;\n-  align-items: center;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  margin-bottom: 8px;\n-  padding: 10px 15px;\n-  border-radius: 6px;\n-  position: relative;\n-  transition: transform 0.1s;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover {\n-  border-color: #9ca3af;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type {\n-  width: 24px;\n-  height: 24px;\n-  background-size: contain;\n-  background-repeat: no-repeat;\n-  background-position: center;\n-  margin-right: 12px;\n-  opacity: 0.8;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section ._lp_block_finished_field {\n+  margin-top: -8px !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n-  content: \"\\f119\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+.lp-course-builder-content__section #extra_course_data .form-field {\n+  align-items: start;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n-  content: \"\\f469\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input {\n-  border: none;\n-  background: transparent;\n-  font-size: 14px;\n-  color: #374151;\n-  flex-grow: 1;\n-  padding: 5px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n-  outline: none;\n-  text-decoration: underline;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions {\n-  display: flex;\n-  gap: 8px;\n-  opacity: 0.3;\n-  transition: opacity 0.2s;\n-  list-style: none;\n-  margin: 0;\n-  padding: 0;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a {\n-  color: #6b7280;\n-  font-size: 16px;\n-  cursor: pointer;\n-  text-decoration: none;\n+.lp-course-builder-content__section #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a:hover {\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover {\n-  color: #ef4444;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n   opacity: 1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions {\n-  margin-top: 15px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort {\n   display: flex;\n-  gap: 10px;\n-  flex-wrap: wrap;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button {\n-  display: inline-flex;\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n-  background: #fff;\n-  border: 1px solid #d1d5db;\n-  color: #4b5563;\n-  padding: 8px 16px;\n-  border-radius: 6px;\n-  font-size: 13px;\n-  font-weight: 500;\n-  cursor: pointer;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  right: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n   align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n   transition: all 0.2s;\n+  text-decoration: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n-  display: inline-flex;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n-  margin-left: auto;\n-  border-style: dashed !important;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section {\n-  margin-top: 30px;\n-  background: #fff;\n-  border: 1px dashed #d1d5db;\n-  border-radius: 8px;\n-  padding: 20px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n   display: flex;\n-  align-items: center;\n-  gap: 15px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within {\n-  border-color: #1e1e1e;\n-  background: #fff;\n+  flex-direction: column;\n+  gap: 12px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n-  color: #9ca3af;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n-  flex-grow: 1;\n-  padding: 12px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n   border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  outline: none;\n-  transition: border 0.2s;\n+  border-radius: 12px;\n+  padding: 10px 40px 16px 36px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-  padding: 12px 24px;\n-  border-radius: 6px;\n-  font-weight: 600;\n-  font-size: 14px;\n-  cursor: pointer;\n-  transition: background 0.2s;\n-  min-width: fit-content;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n-  background-color: #333;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden {\n-  display: none !important;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n }\n-\n-.lp-cb-tab-content #lp-course-edit-curriculum {\n-  background-color: #fff;\n-  border-radius: 12px;\n-  padding: 28px 0 0;\n-  color: #1f2937;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n   max-width: 100%;\n-  box-sizing: border-box;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .heading {\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f5f5f5;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-items-counts,\n-.lp-cb-tab-content #lp-course-edit-curriculum .count-sections,\n-.lp-cb-tab-content #lp-course-edit-curriculum .total-items {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  left: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  right: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-course-builder-content__section #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.lp-course-builder-content__section #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.lp-course-builder-content__section #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .lp-course-builder-content__section .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-course-builder-content__section .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box .lp-meta-box__inner,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field > label,\n+.lp-cb-tab-content .cb-section__course-edit .form-field label span,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration label span,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field select,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field select:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field .description,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field .description:has(+ .learn-press-tip),\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field > .learn-press-tip,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration > .learn-press-tip,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status {\n+  padding: 5px 12px;\n   font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 5px;\n+  text-transform: capitalize;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n+  display: flex;\n+  gap: 40px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n+  flex: 1;\n+  min-width: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n   font-weight: 600;\n-  padding: 6px 18px;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required {\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n   border-radius: 12px;\n-  margin-left: 10px;\n+  line-height: 1;\n+  margin-left: auto;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .course-toggle-all-sections {\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n+  border-color: #2271b1;\n+  box-shadow: 0 0 0 1px #2271b1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder {\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n   cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 30px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+  border-radius: 8px;\n+  border: 1px solid #e5e7eb;\n+  padding: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 10px 0 0;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 2px 2px 0;\n+  transform: translate(-50%, -60%) rotate(45deg);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone {\n+  width: 100%;\n+  min-height: 200px;\n+  background: #fff;\n+  border: 2px dashed #d1d5db;\n+  border-radius: 8px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  overflow: hidden;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n+  border-style: solid;\n+  border-color: #e5e7eb;\n+  padding: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content {\n+  text-align: center;\n+  padding: 30px 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon {\n+  display: flex;\n+  justify-content: center;\n+  margin-bottom: 12px;\n+  opacity: 0.6;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text {\n+  font-size: 14px;\n+  color: #6b7280;\n+  margin: 0 0 6px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link {\n+  color: #1a1a1a;\n+  text-decoration: none;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover {\n+  text-decoration: underline;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint {\n+  font-size: 12px;\n   color: #9ca3af;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img {\n+  width: 100%;\n+  height: auto;\n+  max-height: 200px;\n+  object-fit: cover;\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image {\n+  padding: 6px 14px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover {\n+  background: #ef4444;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row select {\n+  padding: 6px 32px 6px 14px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  background: #fff;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #1e1e1e;\n+  color: white;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+@media (max-width: 900px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n+    flex: 1;\n+    max-width: 100%;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n+    flex: 1;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+}\n+@media (max-width: 768px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 12px;\n+  text-transform: capitalize;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 10px 0 0;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 2px 2px 0;\n+  transform: translate(-50%, -60%) rotate(45deg);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image,\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #offline_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-left: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label {\n+  display: flex;\n+  flex-wrap: wrap;\n+  align-items: center;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-left: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n+  font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box {\n+  display: flex;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__content,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__fields,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n+  border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea {\n+  width: 100%;\n+  border: 1px solid #eaeaec;\n+  border-radius: 6px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_block_finished_field {\n+  margin-top: -8px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field {\n+  align-items: start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort {\n+  display: flex;\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  right: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 12px;\n+  padding: 10px 40px 16px 36px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n+  max-width: 100%;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  left: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  right: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.lp-cb-tab-content .cb-section__header {\n+  display: none !important;\n+}\n+\n+.lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+\n+.lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+\n+ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-right: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-left: 3px solid transparent;\n+  margin-left: -3px;\n+}\n+ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #fff;\n+  color: #1e1e1e;\n+}\n+ul.lp-meta-box__course-tab__tabs li.active a,\n+ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #fff;\n+  color: #3b82f6;\n+  font-weight: 600;\n+  border-left-color: #3b82f6;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+\n+.lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #fff;\n+}\n+\n+@media (max-width: 768px) {\n+  .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-right: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 12px;\n+    background: #f9fafb;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li {\n+    flex-shrink: 0;\n+    padding: 0 4px;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li a {\n+    border-left: none;\n+    border-bottom: 3px solid transparent;\n+    margin-left: 0;\n+    white-space: nowrap;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li.active a {\n+    border-left: none;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum {\n+  background-color: #fff;\n+  border-radius: 12px;\n+  padding: 0;\n+  color: #1f2937;\n+  max-width: 100%;\n+  box-sizing: border-box;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  margin-bottom: 8px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading h4 {\n+  color: #898989;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .count-sections {\n+  margin-left: 0;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .lp-btn-generate-with-ai {\n   margin-left: auto;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,\n+#lp-course-builder-content #lp-course-edit-curriculum .count-sections,\n+#lp-course-builder-content #lp-course-edit-curriculum .total-items {\n+  background: transparent;\n+  color: #898989;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 0;\n+  border-radius: 12px;\n+  margin-left: 10px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .count-sections {\n+  margin-left: auto;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections {\n+  cursor: pointer;\n+  color: #9ca3af;\n   padding: 5px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections {\n   border: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section {\n   background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   margin-bottom: 16px;\n   transition: all 0.2s ease;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n   border-color: #d1d5db;\n   box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section.focus {\n+  border-color: #7067ED !important;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head {\n   display: flex;\n   align-items: center;\n   padding: 10px 20px;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-bottom: 1px solid transparent;\n-  border-radius: 8px;\n+  border-radius: 12px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head .drag {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag {\n   cursor: grab;\n   color: #9ca3af;\n   margin-right: 12px;\n   font-size: 16px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head .button {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .button {\n   font-size: 12px;\n   padding: 6px 12px;\n   border-radius: 6px;\n@@ -3526,13 +10176,13 @@\n   cursor: pointer;\n   font-weight: 500;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n-  border-bottom-color: #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n+#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n+  background-color: #eef1ff;\n+  border-radius: 12px 12px 0 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input {\n   flex-grow: 1;\n-  border: 1px solid transparent;\n+  border: none;\n   background: transparent;\n   font-size: 15px;\n   font-weight: 600;\n@@ -3542,38 +10192,60 @@\n   transition: all 0.2s;\n   width: auto;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:hover, .lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover, #lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n+  background: transparent;\n+  border: none;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n+  box-shadow: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-title:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-description:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-item-title:hover {\n+  border-color: #7067ED;\n+  color: #7067ED;\n+  background: #EEF1FF;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section {\n   color: #ef4444;\n   background: rgba(254, 226, 226, 0.5);\n   border: none;\n   transition: background 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n   background: #fee2e2;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up {\n-  margin-left: 15px;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-edit-section-title:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up {\n+  margin-left: 0px;\n   color: #777777;\n   cursor: pointer;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n   color: #1e1e1e !important;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-collapse {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-collapse {\n   padding: 20px;\n-  background-color: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n+  background-color: #ffffff;\n+  border-radius: 0 0 12px 12px;\n   border-top: unset;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea {\n   width: 100%;\n   border: 1px dashed #d1d5db;\n   background: #fff;\n@@ -3585,22 +10257,22 @@\n   min-height: 60px;\n   margin-bottom: 15px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea:focus {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus {\n   border-style: solid;\n   border-color: #9ca3af;\n   outline: none;\n   color: #374151;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.section-list-items {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items {\n   list-style: none;\n   padding: 0;\n   margin: 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item {\n   display: flex;\n   align-items: center;\n-  background: #fff;\n+  background: #ffffff;\n   border: 1px solid #e5e7eb;\n   margin-bottom: 8px;\n   padding: 10px 15px;\n@@ -3608,31 +10280,36 @@\n   position: relative;\n   transition: transform 0.1s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover {\n-  border-color: #9ca3af;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover {\n+  border-color: #d1d5db;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .item-ico-type {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus {\n+  border-color: #7067ED !important;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus .item-ico-type,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus .item-ico-type {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type {\n   background-size: contain;\n   background-repeat: no-repeat;\n   background-position: center;\n-  margin-right: 12px;\n   opacity: 0.8;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n-  content: \"\\f119\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n+  content: \"\\f15b\";\n+  font-family: \"lp-icon\";\n+  font-size: 18px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n-  content: \"\\f469\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n+  content: \"\\f12e\";\n+  font-family: \"lp-icon\";\n+  font-size: 18px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input {\n   border: none;\n   background: transparent;\n   font-size: 14px;\n@@ -3640,51 +10317,67 @@\n   flex-grow: 1;\n   padding: 5px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n   outline: none;\n-  text-decoration: underline;\n+  text-decoration: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions {\n   display: flex;\n-  gap: 8px;\n+  gap: 4px;\n   opacity: 0.3;\n   transition: opacity 0.2s;\n   list-style: none;\n   margin: 0;\n   padding: 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a {\n-  color: #6b7280;\n-  font-size: 16px;\n-  cursor: pointer;\n-  text-decoration: none;\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 30px;\n+  height: 30px;\n+  border-radius: 6px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover {\n+  background: #f7f7f7;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a {\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a.lp-icon-trash-o {\n   color: #ef4444;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a {\n+  color: #6b7280;\n+  font-size: 16px;\n+  cursor: pointer;\n+  text-decoration: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n   opacity: 1;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:not(.lp_lesson) .lp-btn-set-preview-item {\n+  display: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions {\n   margin-top: 15px;\n   display: flex;\n   gap: 10px;\n   flex-wrap: wrap;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button {\n   display: inline-flex;\n+  opacity: 0.7;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover {\n+  opacity: 1;\n+  color: #7067ee;\n+  border-color: #eef1ff;\n+  background: #eef1ff;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button {\n+#lp-course-builder-content #lp-course-edit-curriculum button,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n   background: #fff;\n   border: 1px solid #d1d5db;\n   color: #4b5563;\n@@ -3696,72 +10389,84 @@\n   align-items: center;\n   transition: all 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n   display: inline-flex;\n+  min-width: fit-content;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n   background: #f3f4f6;\n   border-color: #9ca3af;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary {\n+  background-color: #7067ed;\n+  border-color: #7067ed;\n+  color: #fff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary:hover {\n+  background: #5a51c1;\n+  color: #fff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item-cancel.button {\n+  background-color: transparent;\n+  border: none;\n+  color: #aaaaaa;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n   margin-left: auto;\n   border-style: dashed !important;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section {\n   margin-top: 30px;\n   background: #fff;\n   border: 1px dashed #d1d5db;\n   border-radius: 8px;\n-  padding: 20px;\n+  padding: 5px 20px;\n   display: flex;\n   align-items: center;\n-  gap: 15px;\n-}\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section:focus-within {\n-  border-color: #1e1e1e;\n-  background: #fff;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n   color: #9ca3af;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within {\n+  border-color: #7067ee;\n+  background: #eef1ff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within .lp-icon-plus {\n+  color: #7067ee;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n   flex-grow: 1;\n-  padding: 12px;\n-  border: 1px solid #e5e7eb;\n+  padding: 12px 0;\n+  border: none;\n   border-radius: 6px;\n   font-size: 14px;\n   outline: none;\n   transition: border 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n+  border-color: #7067ed;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section {\n-  background-color: #1e1e1e;\n+#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section {\n+  background-color: #7067ed;\n   color: #fff;\n   border: none;\n-  padding: 12px 24px;\n+  padding: 8px 16px;\n   border-radius: 6px;\n-  font-weight: 600;\n+  font-weight: 500;\n   font-size: 14px;\n   cursor: pointer;\n   transition: background 0.2s;\n   min-width: fit-content;\n+  margin-left: 20px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n-  background-color: #333;\n+#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n+  background-color: #5a51c1;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-hidden {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden {\n   display: none !important;\n }\n \n-.lp-option-disabled {\n-  pointer-events: none;\n-  opacity: 0.5;\n-}\n-\n #taxonomy-course_category.categorydiv {\n   border: none !important;\n   box-shadow: none !important;\n@@ -3773,12 +10478,13 @@\n   gap: 20px;\n   margin: 0 0 15px 0 !important;\n   padding: 0 !important;\n-  border-bottom: 2px solid #f0f0f0;\n+  border-bottom: 1px solid #f5f5f5;\n }\n #taxonomy-course_category.categorydiv .category-tabs li {\n   display: inline-block !important;\n   margin: 0 !important;\n   padding: 0 !important;\n+  border: none;\n }\n #taxonomy-course_category.categorydiv .category-tabs li a {\n   text-decoration: none;\n@@ -3792,16 +10498,16 @@\n   transition: all 0.2s;\n }\n #taxonomy-course_category.categorydiv .category-tabs li.tabs a, #taxonomy-course_category.categorydiv .category-tabs li:hover a {\n-  color: #1e1e1e;\n-  border-bottom-color: #1e1e1e;\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n }\n #taxonomy-course_category.categorydiv .tabs-panel {\n-  border: none !important;\n-  box-shadow: none !important;\n-  padding: 5px 0 !important;\n-  background: transparent !important;\n-  max-height: 300px !important;\n-  overflow-y: auto !important;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n   display: none;\n }\n #taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar {\n@@ -3851,8 +10557,8 @@\n   position: relative;\n }\n #taxonomy-course_category.categorydiv input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+  background: #28A746;\n+  border-color: #28A746;\n }\n #taxonomy-course_category.categorydiv input[type=checkbox]:checked::after {\n   content: \"\";\n@@ -3861,24 +10567,25 @@\n   top: 1px;\n   width: 5px;\n   height: 9px;\n-  border: solid #1e1e1e;\n+  border: solid #fff;\n   border-width: 0 2px 2px 0;\n   transform: rotate(45deg);\n }\n+#taxonomy-course_category.categorydiv input[type=checkbox]:checked::before {\n+  content: \"\";\n+}\n #taxonomy-course_category.categorydiv label {\n   display: inline-flex !important;\n   align-items: center;\n   width: auto !important;\n   font-size: 14px;\n-  color: #4b5563;\n+  color: #1e1e1e;\n   cursor: pointer;\n   line-height: 1.5;\n }\n \n #course_category-adder {\n-  margin-top: 20px !important;\n-  border-top: 1px solid #f0f0f0;\n-  padding-top: 15px;\n+  display: none !important;\n }\n \n #course_category-add-toggle {\n@@ -3951,180 +10658,10 @@\n   transform: rotate(180deg);\n }\n \n-#lp-course-builder .cb-list-lesson {\n-  list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n-  padding: 0;\n-}\n-#lp-course-builder .cb-tab-lesson__action {\n-  display: flex;\n-  justify-content: space-between;\n-  align-items: center;\n-}\n-#lp-course-builder .cb-input-search-lesson {\n-  flex: 1;\n-  border: none;\n-  background: transparent;\n-  outline: none;\n-  font-size: 15px;\n-  color: #333;\n-  font-family: inherit;\n-}\n-#lp-course-builder .cb-input-search-lesson::placeholder {\n-  color: #999;\n-}\n-#lp-course-builder .cb-tab-lesson__action,\n-#lp-course-builder .courses-builder__lesson-tab {\n-  width: calc(100% - 140px);\n-}\n-#lp-course-builder .lesson-action {\n-  position: relative;\n-  display: flex;\n-  align-items: center;\n-  gap: 20px;\n-}\n-#lp-course-builder .lesson-action-expanded {\n-  cursor: pointer;\n-  padding: 15px 20px 15px 0;\n-}\n-#lp-course-builder .lesson-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n-}\n-#lp-course-builder .btn-edit-lesson {\n-  display: flex;\n-  align-items: center;\n-  text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  background-color: #fff;\n-  border: 1px solid #1e1e1e;\n-}\n-#lp-course-builder .btn-edit-lesson svg {\n-  width: 1rem;\n-  height: 1rem;\n-}\n-#lp-course-builder .lesson-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n-  font-size: 16px;\n-}\n-#lp-course-builder .highlight-new-lesson {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n-}\n-#lp-course-builder .lesson-content {\n-  flex: 1;\n-  display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n-  align-items: center;\n-}\n-#lp-course-builder .lesson-content__left {\n-  display: flex;\n-  gap: 15px;\n-}\n-#lp-course-builder .lesson-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n-}\n-#lp-course-builder .lesson__preview svg {\n-  height: 20px;\n-  width: 20px;\n-}\n-#lp-course-builder .wap-lesson-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n-}\n-#lp-course-builder .wap-lesson-title button {\n-  font-size: 20px;\n-  background: #fff;\n-  border: none;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n-}\n-#lp-course-builder .lesson-status {\n-  padding: 5px 12px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n-  text-transform: capitalize;\n-}\n-#lp-course-builder .lesson-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n-}\n-#lp-course-builder .lesson-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n-}\n-#lp-course-builder .lesson-assigned-courses {\n-  max-width: 300px;\n-  margin-right: 30px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n-}\n-#lp-course-builder .lesson-assigned-courses a {\n-  text-decoration: none;\n-}\n-#lp-course-builder .lesson-action-expanded__items {\n-  display: flex;\n-  position: absolute;\n-  min-width: 160px;\n-  top: 0;\n-  right: 0;\n-  transform: translate(100%, 10px);\n-  padding: 10px;\n-  flex-direction: column;\n-  background-color: #fff;\n-  border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n-  font-size: 16px;\n-  font-weight: 500;\n-}\n-#lp-course-builder .lesson-action-expanded__items.active {\n-  display: flex !important;\n-}\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n-  padding: 10px;\n-  cursor: pointer;\n-  text-decoration: none;\n-  border-radius: 6px;\n-}\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n-}\n-#lp-course-builder .lesson-action-expanded:hover + .lesson-action-expanded__items,\n-#lp-course-builder .lesson-action-expanded__items:hover {\n-  display: flex !important;\n-}\n-\n .lp-course-builder-content__section .lesson-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n@@ -4168,7 +10705,7 @@\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-lesson-edit-title__input {\n+.lp-course-builder-content__section input.cb-lesson-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4177,7 +10714,7 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-lesson-edit-title__input:focus {\n+.lp-course-builder-content__section input.cb-lesson-edit-title__input:focus {\n   border-color: #2271b1;\n   box-shadow: 0 0 0 1px #2271b1;\n }\n@@ -4199,6 +10736,15 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n+.lp-course-builder-content__section .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-content__section .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n .lp-course-builder-content__section .cb-button.cb-btn-update__lesson {\n   background: #1e1e1e;\n   color: #fff;\n@@ -4207,15 +10753,16 @@\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n-.lp-course-builder-content__section .field-material__label {\n-  width: unset;\n-  max-width: unset;\n-  min-width: unset;\n-}\n .lp-course-builder-content__section .lp-material-btn-wrap {\n   display: flex;\n   gap: 12px;\n }\n+.lp-course-builder-content__section #lp-material--group-container {\n+  padding: 20px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  max-width: 420px;\n+}\n .lp-course-builder-content__section #btn-lp--add-material,\n .lp-course-builder-content__section #btn-lp--save-material {\n   padding: 8px 25px;\n@@ -4235,97 +10782,571 @@\n   }\n }\n \n-.lp-course-builder-content__section .cb-section__quiz-title-assigned {\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content {\n   display: flex;\n   gap: 40px;\n+  align-items: flex-start;\n }\n-.lp-course-builder-content__section .lp-question-type-label {\n-  background: #e5e7eb;\n-  color: #4b5563;\n-  font-size: 11px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right {\n+  flex: 1;\n+  min-width: 0;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned {\n+  margin-bottom: 20px;\n+  font-size: 14px;\n+  line-height: 1.6;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned .label {\n   font-weight: 600;\n-  text-transform: uppercase;\n-  padding: 3px 8px;\n+  color: #1a1a1a;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a {\n+  color: #7067ED;\n+  text-decoration: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  word-break: break-all;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url {\n+  color: #7067ED;\n+  text-decoration: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder {\n+  color: #374151;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n   border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__title {\n+  margin: 0 0 12px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__control {\n+  width: 100%;\n+  height: 34px;\n+  padding: 6px 32px 6px 14px !important;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  background: #fff;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+}\n+@media (max-width: 1024px) {\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left {\n+    flex-basis: auto;\n+    max-width: 100%;\n+    width: 100%;\n+  }\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right {\n+    width: 100%;\n+  }\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-list-questions .lp-question-item .lp-question-type-label {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n   margin-right: 10px;\n   white-space: nowrap;\n }\n-.lp-course-builder-content__section .lp-question-data-edit-header {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header {\n   display: flex;\n   align-items: center;\n   justify-content: space-between;\n-  margin-bottom: 10px;\n-  padding-bottom: 8px;\n+  margin-bottom: 16px;\n+  padding: 20px;\n+  background-color: #F7F7F7;\n+  border-radius: 12px 12px 0 0;\n }\n-.lp-course-builder-content__section .lp-question-data-edit-header label {\n-  font-size: 13px;\n-  font-weight: 700;\n-  color: #374151;\n-  text-transform: uppercase;\n-  letter-spacing: 0.5px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header label {\n+  font-size: 15px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n }\n-.lp-course-builder-content__section .lp-answers-config {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-label {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n+  margin-right: 10px;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-answers-config,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-answers-config,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-answers-config,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-answers-config {\n+  padding: 0 16px 16px 16px;\n   margin-top: 15px;\n }\n-.lp-course-builder-content__section .lp-question-by-type {\n-  padding: 15px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 10px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new {\n+  flex: 1;\n+  height: 38px;\n+  padding: 0 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  background-color: #fff;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  outline: none;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: right 10px center;\n+  background-size: 14px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: none;\n+  padding: 9px 18px;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type:hover {\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner {\n+  font-size: 14px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit {\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  overflow: hidden;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit .wp-editor-wrap {\n+  margin: 0 20px 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-by-type,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-by-type,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-by-type,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-by-type {\n+  border: 1px solid #f5f5f5;\n   border-radius: 12px;\n-  border: 1px solid #dcdcde;\n+  margin-top: 24px;\n }\n-.lp-course-builder-content__section .lp-question-choice-header {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-choice-header {\n   display: flex;\n   justify-content: space-between;\n-  padding: 12px 25px 10px 25px;\n+  padding: 0 4px 8px 4px;\n   font-size: 12px;\n-  color: #1e1e1e;\n-  font-weight: 600;\n-  text-transform: uppercase;\n-  margin-bottom: 16px;\n-  background: #f5f5f5;\n+  color: #898989;\n+  font-weight: 500;\n+  margin-bottom: 8px;\n+  background: transparent;\n }\n-.lp-course-builder-content__section .lp-question-answer-item {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item {\n   display: flex;\n   align-items: center;\n   margin-bottom: 12px;\n-  border-radius: 4px;\n-  padding: 10px;\n-  border: 1px solid #f5f5f5;\n-  border-top: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  padding: 12px 16px;\n+  border: 0;\n+  background: #ffffff;\n   position: relative;\n }\n-.lp-course-builder-content__section .lp-question-answer-item .drag {\n-  color: #d1d5db;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item .drag {\n+  color: #7067ED;\n   cursor: move;\n-  margin-right: 8px;\n-  font-size: 14px;\n+  margin-right: 12px;\n+  font-size: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input {\n   flex-grow: 1;\n-  padding: 8px 12px;\n+  padding: 10px 14px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   font-size: 14px;\n-  color: #374151;\n+  color: #1e1e1e;\n   transition: border 0.2s;\n-  margin-right: 10px;\n+  margin-right: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-input:focus {\n-  border-color: #9ca3af;\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input:focus {\n+  border-color: #7067ED;\n   outline: none;\n }\n-.lp-course-builder-content__section .lp-btn-delete-question-answer {\n-  color: #ef4444;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-delete-question-answer {\n+  color: #9ca3af;\n   cursor: pointer;\n   opacity: 0;\n   transition: opacity 0.2s;\n-  margin-right: 10px;\n+  margin-right: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-question-answer-item:hover .lp-btn-delete-question-answer {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item:hover .lp-btn-delete-question-answer {\n   opacity: 1;\n+  color: #dc2626;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=radio],\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n   width: 20px;\n@@ -4335,30 +11356,50 @@\n   cursor: pointer;\n   position: relative;\n   outline: none;\n-  transition: all 0.2s;\n+  transition: border-color 0.2s;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox] {\n   border-radius: 4px;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input:checked {\n-  border-color: #10b981;\n-}\n-.lp-course-builder-content__section .lp-question-answer-item input:checked::after {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input:checked {\n+  border-color: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio]:checked::after {\n   content: \"\";\n   position: absolute;\n   top: 50%;\n   left: 50%;\n   transform: translate(-50%, -50%);\n-  width: 8px;\n-  height: 8px;\n-  background: #10b981;\n+  width: 10px;\n+  height: 10px;\n+  background: #28A746;\n   border-radius: 50%;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked {\n-  background: #10b981;\n-}\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked::after {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  top: 50%;\n+  left: 50%;\n   width: 5px;\n   height: 9px;\n   border: solid white;\n@@ -4367,85 +11408,295 @@\n   background: transparent;\n   border-radius: 0;\n }\n-.lp-course-builder-content__section .lp-question-answer-item-add-new {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new {\n   display: flex;\n   align-items: center;\n-  margin-top: 10px;\n-  padding-left: 10px;\n-  border-radius: 4px;\n-  border: 1px solid #f5f5f5;\n+  margin-top: 16px;\n+  padding: 24px 0 0 0;\n+  border: none;\n   border-top: 1px solid #f5f5f5;\n }\n-.lp-course-builder-content__section .lp-question-answer-item-add-new .lp-icon-plus {\n-  color: #9ca3af;\n-  margin-right: 8px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new .lp-icon-plus {\n+  color: #7067ED;\n+  margin-right: 12px;\n+  font-size: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-new-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input {\n   flex-grow: 1;\n-  border: 1px dashed #d1d5db;\n-  padding: 8px 12px;\n+  border: 1px solid #e5e7eb;\n+  padding: 10px 14px;\n   border-radius: 6px;\n-  font-size: 13px;\n-  margin-right: 10px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-right: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-new-input:focus {\n-  border: 1px solid #9ca3af;\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input:focus {\n+  border-color: #7067ED;\n   outline: none;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons {\n+  display: flex;\n   flex-wrap: wrap;\n+  gap: 8px;\n+  margin-top: 16px;\n+  margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons button,\n-.lp-course-builder-content__section .lp-btn-add-question-answer {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary {\n   background: #fff;\n   color: #374151;\n   border: 1px solid #d1d5db;\n-  padding: 7px 14px;\n+  padding: 8px 16px;\n   border-radius: 6px;\n-  font-size: 12px;\n-  font-weight: 600;\n+  font-size: 14px;\n+  font-weight: 500;\n   cursor: pointer;\n   min-width: fit-content;\n+  transition: all 0.2s;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons button.lp-btn-fib-save-content {\n-  border-color: #1e1e1e;\n-  background: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover {\n+  background: #7067ED;\n   color: #fff;\n }\n-.lp-course-builder-content__section .lp-btn-add-question-answer:hover {\n-  background: #e5e7eb;\n-  color: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary:hover {\n+  color: #374151;\n+  background: #F7F7F7;\n+  border-color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-question-field-settings {\n-  padding: 10px 20px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content {\n+  background: #7067ED;\n+  color: #fff;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content:hover {\n+  background: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details {\n+  margin-top: 24px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header {\n+  cursor: pointer;\n+  margin-bottom: 24px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label {\n+  cursor: pointer;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse {\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-question-data-edit-header {\n+  margin-bottom: 0;\n+  border-radius: 12px 12px 12px 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-down {\n+  display: block !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-section-collapse {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle {\n+  padding: 14px 16px;\n+  background-color: #F7F7F7;\n+  cursor: pointer;\n   display: flex;\n-  flex-wrap: wrap;\n-  gap: 12px;\n   align-items: center;\n-  gap: 6px 12px;\n+  justify-content: space-between;\n+  transition: background 0.2s;\n }\n-.lp-course-builder-content__section .lp-question-field-settings__label label {\n-  font-size: 13px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle:hover {\n+  background-color: #e5e7eb;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle label {\n   font-weight: 600;\n-  color: #4b5563;\n+  font-size: 14px;\n+  margin: 0;\n+  cursor: pointer;\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle {\n+  color: #9ca3af;\n+  transition: transform 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header, .lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-trigger-toggle {\n+  border-bottom-color: #F7F7F7;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-section-collapse {\n+  padding: 20px;\n+  background: #fff;\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings {\n+  padding: 0 0 24px 0;\n   display: block;\n-  margin-bottom: 5px;\n }\n-.lp-course-builder-content__section .lp-question-field-settings input[name=lp-question-point-input] {\n-  width: 80px;\n-  padding: 6px 10px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings__label label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  display: block;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input] {\n+  width: 100px;\n+  padding: 10px 12px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   font-size: 14px;\n+  color: #1e1e1e;\n }\n-.lp-course-builder-content__section .lp-question-fib-desc,\n-.lp-course-builder-content__section .lp-question-field-settings___desc {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]:focus {\n+  border-color: #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings___desc {\n   font-size: 12px;\n   color: #9ca3af;\n-  margin-top: 4px;\n-  font-style: italic;\n+  margin-top: 8px;\n+  font-style: normal;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question {\n   margin-top: 30px;\n   background: #fff;\n   border: 1px dashed #d1d5db;\n@@ -4455,13 +11706,22 @@\n   align-items: center;\n   gap: 12px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question.lp-icon-plus {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question.lp-icon-plus {\n   color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question select {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question select {\n   height: 38px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input {\n   flex-grow: 1;\n   padding: 10px 12px;\n   border: 1px solid #e5e7eb;\n@@ -4470,11 +11730,17 @@\n   outline: none;\n   min-width: 200px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n-.lp-course-builder-content__section select.lp-question-type-new {\n+.lp-course-builder-canvas .cb-section__quiz-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__question-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] select.lp-question-type-new {\n   padding: 0 30px 0 12px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n@@ -4483,22 +11749,54 @@\n   color: #374151;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section button.lp-btn-add-question {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border: none;\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n   padding: 10px 20px;\n-  border-radius: 6px;\n+  border-radius: 8px;\n   font-weight: 600;\n   font-size: 14px;\n-  cursor: pointer;\n   transition: background 0.2s;\n   min-width: fit-content;\n+  cursor: default !important;\n }\n-.lp-course-builder-content__section button.lp-btn-add-question:hover {\n-  background-color: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover {\n+  opacity: 0.5;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED !important;\n }\n-.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select {\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active {\n+  cursor: pointer !important;\n+  background: #7067ED !important;\n+  color: #EEF1FF !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active:hover {\n+  background: #5b52d1 !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover {\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select {\n   background-color: #fff;\n   color: #374151;\n   border: 1px solid #d1d5db;\n@@ -4509,27 +11807,197 @@\n   cursor: pointer;\n   min-width: fit-content;\n }\n-.lp-course-builder-content__section [class*=lp-icon-]:hover {\n+.lp-course-builder-canvas .cb-section__quiz-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .cb-section__question-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] [class*=lp-icon-]:hover {\n   color: #1e1e1e;\n }\n-.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select:hover {\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select:hover {\n   background-color: #f3f4f6;\n   border-color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-header {\n-  background: #f5f5f5;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item {\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header {\n+  border-radius: 6px 6px 0 0;\n+  border-bottom: 1px solid #f5f5f5;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-header .lp-question-fib-option-index {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  border-radius: 6px;\n+  border: 1px solid #e5e7eb;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index {\n   font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-right: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-right: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-right: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-right: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-btn-fib-option-delete:hover {\n-  color: #ef4444;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-left: auto;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index {\n+  font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-right: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-right: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-right: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-right: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail > label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-left: auto;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail {\n+  font-size: 14px;\n+  padding: 24px;\n+  background: #F7F7F7;\n+  border: 1px solid #e5e7eb;\n+  border-top: none;\n+  border-radius: 0 0 6px 6px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail > label {\n   display: flex;\n   flex-direction: row-reverse;\n   font-weight: 500;\n@@ -4538,7 +12006,14 @@\n   justify-content: flex-end;\n   align-items: center;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox] {\n   order: 1;\n   margin-top: 2px;\n   appearance: none;\n@@ -4553,7 +12028,14 @@\n   margin: 0;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:before {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:before {\n   content: \"\";\n   position: absolute;\n   width: 20px;\n@@ -4565,23 +12047,61 @@\n   transition: all 0.3s ease;\n   box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:focus {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked {\n-  background: #3b82f6;\n-}\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked:before {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked:before {\n   left: 22px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  margin-top: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * {\n   display: flex;\n   gap: 8px;\n   font-size: 14px;\n   font-weight: 500;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label {\n   display: flex;\n   flex-direction: row-reverse;\n   font-weight: 500;\n@@ -4590,10 +12110,16 @@\n   justify-content: space-between;\n   align-items: self-start;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input {\n   margin-top: 3px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p {\n   font-size: 13px;\n   color: #6b7280;\n   line-height: 1.5;\n@@ -4601,64 +12127,79 @@\n   display: block;\n   font-weight: 400;\n }\n-.lp-course-builder-content__section .lp-section-collapse {\n-  border-radius: 6px;\n-}\n-.lp-course-builder-content__section .cb-quiz-edit-title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title {\n   flex: 1;\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .quiz-assigned-courses {\n-  display: flex;\n-  flex-direction: column;\n-  align-items: end;\n-  margin-right: 0 !important;\n-}\n-.lp-course-builder-content__section .quiz-assigned-courses .label {\n-  font-size: 16px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-course-builder-content__section .quiz-assigned-courses a,\n-.lp-course-builder-content__section .quiz-assigned-courses span {\n-  font-size: 16px;\n-  font-weight: 400;\n-}\n-.lp-course-builder-content__section .lp-cb-section__title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-cb-section__title {\n   font-size: 28px;\n   font-weight: 600;\n   margin-top: 0;\n   margin-bottom: 0;\n   color: #1e1e1e;\n }\n-.lp-course-builder-content__section .quiz-status {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n-.lp-course-builder-content__section .quiz-status.publish {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.publish,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-course-builder-content__section .quiz-status.trash {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.trash,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4667,21 +12208,33 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-course-builder-content__section .cb-quiz-edit-desc {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-desc__label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-button {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -4689,16 +12242,40 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-update__quiz {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-update__quiz {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-trash__quiz {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-trash__quiz {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n @media (max-width: 768px) {\n-  .lp-course-builder-content__section #lp-course-builder-content {\n+  .lp-course-builder-canvas .cb-section__quiz-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .cb-section__lesson-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] #lp-course-builder-content {\n     padding: 16px;\n   }\n }\n@@ -4706,60 +12283,93 @@\n #lp-course-builder-content .lp-edit-quiz-wrap {\n   background-color: #fff;\n   border-radius: 12px;\n-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n-  padding: 30px;\n-  color: #1f2937;\n-  margin-top: 20px;\n-}\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n-  border: none;\n+  padding: 0;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .heading {\n   display: flex;\n   align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f3f4f6;\n+  margin-bottom: 8px;\n+  gap: 8px;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+  color: #898989;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .total-items {\n-  background: #f3f4f6;\n-  color: #6b7280;\n-  font-size: 12px;\n-  font-weight: 600;\n-  padding: 4px 10px;\n-  border-radius: 20px;\n-  margin-left: 10px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .total-items {\n+  margin-left: auto;\n+  font-size: 13px;\n+  color: #898989;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all {\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all {\n   cursor: pointer;\n-  color: #9ca3af;\n-  margin-left: auto;\n   padding: 5px;\n+  color: #6b7280;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner {\n+  animation: rotation 2s infinite linear;\n+  font-size: 1.25rem;\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .one,\n+#lp-course-builder-content .lp-edit-quiz-wrap .plural {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap[data-count=\"1\"] .one {\n+  display: inline-block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural {\n+  display: inline-block;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item {\n-  background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 100px;\n+  border-radius: 12px;\n   margin-bottom: 12px;\n-  transition: all 0.2s ease;\n+  background: #fff;\n+  transition: all 0.2s;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title {\n+  background: #fff;\n+  border: 1px solid #d1d5db;\n+  color: #4b5563;\n+  padding: 8px 16px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  align-items: center;\n+  transition: all 0.2s;\n   display: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-update-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-cancel-update-question-title {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title {\n   display: inline-block;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-edit-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-remove-question {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question {\n   display: none;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title {\n@@ -4772,86 +12382,356 @@\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover {\n   border-color: #d1d5db;\n-  box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.05);\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:last-child {\n+  margin-bottom: 0;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n-  border-radius: 8px;\n+  gap: 12px;\n+  padding: 14px 16px;\n   background-color: #fff;\n+  border-bottom: 1px solid transparent;\n+  border-radius: 12px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n-  border-bottom: 1px solid #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n-  background-color: #f9fafb;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title {\n+  display: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .drag {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag {\n+  cursor: move;\n   color: #9ca3af;\n-  cursor: grab;\n-  margin-right: 10px;\n   font-size: 16px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input {\n-  flex-grow: 1;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input {\n+  flex: 1;\n+  padding: 8px 12px;\n   border: 1px solid transparent;\n-  background: transparent;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1f2937;\n-  padding: 6px 10px;\n   border-radius: 6px;\n+  font-size: 14px;\n+  background: transparent;\n   transition: all 0.2s;\n-  margin-right: 10px;\n+  font-weight: 600;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:hover,\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n-  outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label {\n+  font-size: 11px;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED;\n+  padding: 4px 10px;\n+  border-radius: 20px;\n+  white-space: nowrap;\n+  font-weight: 600;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question {\n+  cursor: pointer;\n   color: #9ca3af;\n+  padding: 6px;\n+  transition: all 0.2s;\n+  border-radius: 4px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover {\n+  color: #1e1e1e;\n+  background: #f3f4f6;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover {\n+  color: #dc2626;\n+  background: #fee2e2;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle {\n   cursor: pointer;\n   padding: 6px;\n-  font-size: 16px;\n-  text-decoration: none;\n+  color: #9ca3af;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus) {\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n+  border-bottom-color: #f5f5f5;\n+  border-radius: 12px 12px 0 0;\n+  background: #EEF1FF;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main {\n+  display: none;\n+  padding: 24px;\n+  background: #ffffff;\n+  border-radius: 0 0 12px 12px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.clone {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner {\n+  display: inline-block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question {\n   display: flex;\n   align-items: center;\n-  transition: color 0.2s;\n+  gap: 12px;\n+  padding: 16px;\n+  background-color: #ffffff;\n+  border: 1px dashed #e5e7eb;\n+  border-radius: 12px;\n+  margin-top: 12px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title:hover {\n-  color: #3b82f6;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-icon-plus {\n+  color: #7067ED;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question:hover {\n-  color: #ef4444;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input {\n+  flex: 1;\n+  padding: 10px 14px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle:hover {\n-  color: #1e1e1e;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .button {\n-  font-size: 12px;\n-  padding: 4px 10px;\n-  margin-right: 5px;\n-  display: none;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new {\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  min-width: 150px;\n+  font-size: 14px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-edit-main {\n-  padding: 20px;\n-  background: #fff;\n-  border-radius: 0 0 8px 8px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button {\n+  padding: 10px 20px;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button:hover {\n+  background: #7067ED;\n+  color: #EEF1FF;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar {\n   border: none;\n   background: #f5f5f5;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner {\n-  font-size: 12px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n+  border: none;\n }\n \n-.lp-course-builder-content__section .question-status {\n+.cb-section__quiz-edit .lp-meta-box,\n+.cb-section__quiz-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,\n+.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.cb-section__quiz-edit .form-field,\n+.cb-section__quiz-edit .lp-meta-box__duration,\n+.cb-section__quiz-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .form-field > label,\n+.cb-section__quiz-edit .form-field label span,\n+.cb-section__quiz-edit .lp-meta-box__duration > label,\n+.cb-section__quiz-edit .lp-meta-box__duration label span,\n+.cb-section__quiz-edit .lp-meta-box-field > label,\n+.cb-section__quiz-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .form-field input[type=text],\n+.cb-section__quiz-edit .form-field input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .form-field input[type=number]:focus,\n+.cb-section__quiz-edit .form-field input[type=text]:focus,\n+.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.cb-section__quiz-edit .form-field select,\n+.cb-section__quiz-edit .lp-meta-box__duration select,\n+.cb-section__quiz-edit .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .form-field select:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration select:focus,\n+.cb-section__quiz-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio],\n+.cb-section__quiz-edit .form-field input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:focus,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field .description,\n+.cb-section__quiz-edit .lp-meta-box__duration .description,\n+.cb-section__quiz-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.cb-section__quiz-edit .form-field .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.cb-section__quiz-edit .form-field > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box__duration > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n@@ -4859,47 +12739,2365 @@\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n-.lp-course-builder-content__section .question-status.publish {\n+.cb-section__quiz-edit .course-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-course-builder-content__section .question-status.trash {\n+.cb-section__quiz-edit .course-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-course-builder-content__section .cb-section__question-title-assigned {\n+.cb-section__quiz-edit .cb-course-edit-content {\n   display: flex;\n   gap: 40px;\n }\n-.lp-course-builder-content__section .cb-question-edit-title {\n+.cb-section__quiz-edit .cb-course-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-column--right {\n   flex: 1;\n+  min-width: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label .required {\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  margin-left: auto;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input:focus {\n+  border-color: #2271b1;\n+  box-shadow: 0 0 0 1px #2271b1;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input::placeholder {\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-course-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.cb-section__quiz-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-permalink-label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.cb-section__quiz-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.cb-section__quiz-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.cb-section__quiz-edit .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.cb-section__quiz-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.cb-section__quiz-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.cb-section__quiz-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 30px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper,\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+  border-radius: 8px;\n+  border: 1px solid #e5e7eb;\n+  padding: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 10px 0 0;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 2px 2px 0;\n+  transform: translate(-50%, -60%) rotate(45deg);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes {\n+.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__title {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-container {\n   display: flex;\n   flex-direction: column;\n-  align-items: end;\n-  margin-right: 0 !important;\n+  gap: 12px;\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone {\n+  width: 100%;\n+  min-height: 200px;\n+  background: #fff;\n+  border: 2px dashed #d1d5db;\n+  border-radius: 8px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  overflow: hidden;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone:hover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n+  border-style: solid;\n+  border-color: #e5e7eb;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone.dragover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+}\n+.cb-section__quiz-edit .cb-featured-image-upload-content {\n+  text-align: center;\n+  padding: 30px 20px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-icon {\n+  display: flex;\n+  justify-content: center;\n+  margin-bottom: 12px;\n+  opacity: 0.6;\n+}\n+.cb-section__quiz-edit .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n+.cb-section__quiz-edit .cb-featured-image-text {\n+  font-size: 14px;\n+  color: #6b7280;\n+  margin: 0 0 6px 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-link {\n+  color: #1a1a1a;\n+  text-decoration: none;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-featured-image-link:hover {\n+  text-decoration: underline;\n+}\n+.cb-section__quiz-edit .cb-featured-image-hint {\n+  font-size: 12px;\n+  color: #9ca3af;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview__img {\n+  width: 100%;\n+  height: auto;\n+  max-height: 200px;\n+  object-fit: cover;\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit .cb-change-featured-image {\n+  padding: 6px 14px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .cb-change-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image:hover {\n+  background: #ef4444;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row select {\n+  padding: 6px 32px 6px 14px !important;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit .cb-set-featured-image {\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  background: #fff;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-set-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input,\n+.cb-section__quiz-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input:focus,\n+.cb-section__quiz-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #1e1e1e;\n+  color: white;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.cb-section__quiz-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+@media (max-width: 900px) {\n+  .cb-section__quiz-edit .cb-course-edit-content {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-column--left {\n+    flex: 1;\n+    max-width: 100%;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-column--right {\n+    flex: 1;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.cb-section__quiz-edit .course-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 12px;\n+  text-transform: capitalize;\n+}\n+.cb-section__quiz-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.cb-section__quiz-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes .label {\n+.cb-section__quiz-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper,\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n   font-size: 16px;\n+  line-height: 1;\n+  margin-left: 2px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 10px 0 0;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  left: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 2px 2px 0;\n+  transform: translate(-50%, -60%) rotate(45deg);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__title {\n+  font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n   margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes a,\n-.lp-course-builder-content__section .question-assigned-quizzes span {\n+.cb-section__quiz-edit .cb-remove-featured-image,\n+.cb-section__quiz-edit .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image:hover,\n+.cb-section__quiz-edit .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.cb-section__quiz-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input,\n+.cb-section__quiz-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input:focus,\n+.cb-section__quiz-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n   font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.cb-section__quiz-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+.cb-section__quiz-edit #general_course_data .form-field,\n+.cb-section__quiz-edit #offline_course_data .form-field,\n+.cb-section__quiz-edit #price_course_data .form-field,\n+.cb-section__quiz-edit #extra_course_data .form-field {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n+}\n+.cb-section__quiz-edit #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n+}\n+.cb-section__quiz-edit #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n+}\n+.cb-section__quiz-edit #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-left: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label {\n+  display: flex;\n+  flex-wrap: wrap;\n+  align-items: center;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-left: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n   font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box,\n+.cb-section__quiz-edit .lp_course_faq_meta_box {\n+  display: flex;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box > label,\n+.cb-section__quiz-edit .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__content,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__fields,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n+  border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label input[type=text],\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea {\n+  width: 100%;\n+  border: 1px solid #eaeaec;\n+  border-radius: 6px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n+  outline: none;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n+}\n+.cb-section__quiz-edit ._lp_block_finished_field {\n+  margin-top: -8px !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .form-field {\n+  align-items: start;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.cb-section__quiz-edit #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort {\n+  display: flex;\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  right: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 12px;\n+  padding: 10px 40px 16px 36px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n+  max-width: 100%;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  left: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  right: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.cb-section__quiz-edit #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-right: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-left: 3px solid transparent;\n+  margin-left: -3px;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-left-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+.cb-section__quiz-edit .lp-meta-box,\n+.cb-section__quiz-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,\n+.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.cb-section__quiz-edit .form-field,\n+.cb-section__quiz-edit .lp-meta-box__duration,\n+.cb-section__quiz-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .form-field > label,\n+.cb-section__quiz-edit .form-field label span,\n+.cb-section__quiz-edit .lp-meta-box__duration > label,\n+.cb-section__quiz-edit .lp-meta-box__duration label span,\n+.cb-section__quiz-edit .lp-meta-box-field > label,\n+.cb-section__quiz-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .form-field input[type=text],\n+.cb-section__quiz-edit .form-field input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .form-field input[type=number]:focus,\n+.cb-section__quiz-edit .form-field input[type=text]:focus,\n+.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.cb-section__quiz-edit .form-field select,\n+.cb-section__quiz-edit .lp-meta-box__duration select,\n+.cb-section__quiz-edit .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .form-field select:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration select:focus,\n+.cb-section__quiz-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio],\n+.cb-section__quiz-edit .form-field input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:focus,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field .description,\n+.cb-section__quiz-edit .lp-meta-box__duration .description,\n+.cb-section__quiz-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.cb-section__quiz-edit .form-field .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.cb-section__quiz-edit .form-field > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box__duration > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+.cb-section__quiz-edit ._lp_show_correct_review_field .description {\n+  margin-top: -12px !important;\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-right: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 0;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+    flex: 0 0 auto;\n+    margin-bottom: 0;\n+    padding: 0;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+    border-left: none;\n+    border-bottom: 3px solid transparent;\n+    margin-left: 0;\n+    margin-bottom: -1px;\n+    white-space: nowrap;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+    border-left-color: transparent;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-course-builder-canvas .cb-section__question-edit .question-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  border-radius: 5px;\n+  text-transform: capitalize;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .question-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .question-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title {\n+  flex: 1;\n+  margin-bottom: 24px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__label {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__input {\n+.lp-course-builder-canvas .cb-section__question-edit input.cb-question-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4908,21 +15106,21 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n }\n-.lp-course-builder-content__section .cb-question-edit-desc {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-question-edit-desc__label {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-button {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -4930,16 +15128,383 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-update__question {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__question {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-trash__question {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__question {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-right: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-left: 3px solid transparent;\n+  margin-left: -3px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-left-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box .lp-meta-box__inner,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field label span,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration label span,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description:has(+ .learn-press-tip),\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field > .learn-press-tip,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration > .learn-press-tip,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n @media (max-width: 768px) {\n-  .lp-course-builder-content__section #lp-course-builder-content {\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-right: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 0;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+    flex: 0 0 auto;\n+    margin-bottom: 0;\n+    padding: 0;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+    border-left: none;\n+    border-bottom: 3px solid transparent;\n+    margin-left: 0;\n+    margin-bottom: -1px;\n+    white-space: nowrap;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+    border-left-color: transparent;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item {\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header {\n+  border-radius: 6px 6px 0 0;\n+  border-bottom: 1px solid #f5f5f5;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  border-radius: 6px;\n+  border: 1px solid #e5e7eb;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index {\n+  font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-right: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-right: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-right: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-right: 16px;\n+  font-size: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-left: auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail {\n+  font-size: 14px;\n+  padding: 24px;\n+  background: #F7F7F7;\n+  border: 1px solid #e5e7eb;\n+  border-top: none;\n+  border-radius: 0 0 6px 6px;\n+}\n+@media (max-width: 768px) {\n+  .lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content {\n     padding: 16px;\n   }\n }\n@@ -4952,6 +15517,11 @@\n  * @since 4.3.0\n  * @version 1.0.0\n  *\u002F\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n #lp-builder-popup-container {\n   display: none;\n   position: fixed;\n@@ -4959,7 +15529,255 @@\n   left: 0;\n   width: 100%;\n   height: 100%;\n-  z-index: 99999;\n+  z-index: 99;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tabs,\n+#lp-builder-popup-container .lp-horizontal-tabs {\n+  display: flex;\n+  list-style: none;\n+  margin: 0 24px;\n+  padding: 0;\n+  border-bottom: 1px solid #f5f5f5;\n+  gap: 10px;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab,\n+#lp-builder-popup-container .lp-horizontal-tab {\n+  padding: 12px 24px;\n+  color: #898989;\n+  text-decoration: none;\n+  font-weight: 500;\n+  font-size: 14px;\n+  border-bottom: 2px solid transparent;\n+  margin-bottom: -1px;\n+  transition: all 0.2s ease;\n+  background: transparent;\n+  border-radius: 10px 10px 0 0;\n+  cursor: pointer;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab:hover,\n+#lp-builder-popup-container .lp-horizontal-tab:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab.active,\n+#lp-builder-popup-container .lp-horizontal-tab.active {\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-content,\n+#lp-builder-popup-container .lp-horizontal-tab-content {\n+  padding: 24px 24px 0;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-pane,\n+#lp-builder-popup-container .lp-horizontal-tab-pane {\n+  display: none;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-pane.active,\n+#lp-builder-popup-container .lp-horizontal-tab-pane.active {\n+  display: block;\n+}\n+#lp-builder-popup-container .lp-meta-box,\n+#lp-builder-popup-container .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+#lp-builder-popup-container .lp-meta-box .lp-meta-box__inner,\n+#lp-builder-popup-container .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+#lp-builder-popup-container .form-field,\n+#lp-builder-popup-container .lp-meta-box__duration,\n+#lp-builder-popup-container .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+#lp-builder-popup-container .form-field > label,\n+#lp-builder-popup-container .form-field label span,\n+#lp-builder-popup-container .lp-meta-box__duration > label,\n+#lp-builder-popup-container .lp-meta-box__duration label span,\n+#lp-builder-popup-container .lp-meta-box-field > label,\n+#lp-builder-popup-container .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+#lp-builder-popup-container .form-field input[type=number],\n+#lp-builder-popup-container .form-field input[type=text],\n+#lp-builder-popup-container .form-field input[type=datetime-local],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=text],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local],\n+#lp-builder-popup-container .lp-meta-box-field input[type=number],\n+#lp-builder-popup-container .lp-meta-box-field input[type=text],\n+#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+#lp-builder-popup-container .form-field input[type=number]:focus,\n+#lp-builder-popup-container .form-field input[type=text]:focus,\n+#lp-builder-popup-container .form-field input[type=datetime-local]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=text]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=number]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=text]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=number],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number],\n+#lp-builder-popup-container .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+#lp-builder-popup-container .form-field select,\n+#lp-builder-popup-container .lp-meta-box__duration select,\n+#lp-builder-popup-container .lp-meta-box-field select {\n+  padding: 4px 30px 4px 15px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+#lp-builder-popup-container .form-field select:focus,\n+#lp-builder-popup-container .lp-meta-box__duration select:focus,\n+#lp-builder-popup-container .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=radio],\n+#lp-builder-popup-container .form-field input[type=checkbox],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox],\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio],\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:before,\n+#lp-builder-popup-container .form-field input[type=checkbox]:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  left: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:checked,\n+#lp-builder-popup-container .form-field input[type=checkbox]:checked,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:checked:before,\n+#lp-builder-popup-container .form-field input[type=checkbox]:checked:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked:before {\n+  left: 22px;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:focus,\n+#lp-builder-popup-container .form-field input[type=checkbox]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field .description,\n+#lp-builder-popup-container .lp-meta-box__duration .description,\n+#lp-builder-popup-container .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-left: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+#lp-builder-popup-container .form-field .description:has(+ .learn-press-tip),\n+#lp-builder-popup-container .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+#lp-builder-popup-container .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+#lp-builder-popup-container .form-field > .learn-press-tip,\n+#lp-builder-popup-container .lp-meta-box__duration > .learn-press-tip,\n+#lp-builder-popup-container .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n }\n #lp-builder-popup-container.active {\n   display: block;\n@@ -4971,6 +15789,9 @@\n   margin: 0;\n   display: block;\n }\n+#lp-builder-popup-container #lp-material-container hr {\n+  display: none;\n+}\n #lp-builder-popup-container .field-material__label {\n   width: 150px;\n   max-width: 150px;\n@@ -4979,9 +15800,31 @@\n }\n #lp-builder-popup-container .lp-material--field-wrap {\n   display: flex;\n-  align-items: center;\n   gap: 11px;\n-  margin-top: 11px;\n+  margin-top: 12px;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap label {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 600;\n+  width: 100px;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap:first-child {\n+  margin-top: 0;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap.field-action-wrap {\n+  justify-content: flex-start;\n+  flex-direction: row-reverse;\n+}\n+#lp-builder-popup-container #lp-material--group-container .lp-material--group {\n+  padding: 20px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 12px;\n+  max-width: 420px;\n+  margin-bottom: 20px;\n+}\n+#lp-builder-popup-container #lp-material--group-container .lp-material--group:not(:has(*)) {\n+  display: none;\n }\n #lp-builder-popup-container .lp-material--field-external-link,\n #lp-builder-popup-container .lp-material--field-title {\n@@ -4989,25 +15832,23 @@\n   align-items: center;\n   gap: 8px;\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-builder-popup-container .lp-material--field-method {\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-builder-popup-container .lp-material-save-field,\n #lp-builder-popup-container .lp-material--delete {\n@@ -5023,7 +15864,9 @@\n #lp-builder-popup-container .lp-material--upload-wrap label {\n   cursor: pointer;\n   width: 100%;\n-  max-width: 200px;\n+  display: flex;\n+  align-items: center;\n+  gap: 6px;\n   padding: 8px 16px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n@@ -5032,7 +15875,26 @@\n   color: #1a1a1a;\n   background: #fff;\n   transition: all 0.2s;\n-  margin-left: 56px;\n+  margin-left: 86px;\n+  overflow: hidden;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file {\n+  border-color: #7067ED;\n+  background-color: #f8fbff;\n+  font-size: 0;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::before {\n+  font-size: 14px;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::after {\n+  content: attr(data-file-name);\n+  flex: 1;\n+  min-width: 0;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  white-space: nowrap;\n+  font-size: 14px;\n+  font-weight: 600;\n }\n #lp-builder-popup-container .lp-material--field-upload {\n   display: none;\n@@ -5049,6 +15911,48 @@\n   content: \"📁 \";\n   margin-right: 5px;\n }\n+#lp-builder-popup-container #btn-lp--add-material {\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--add-material:hover {\n+  background-color: #F7F7F7;\n+  border-color: #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--save-material,\n+#lp-builder-popup-container .lp-material-save-field {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--save-material:hover,\n+#lp-builder-popup-container .lp-material-save-field:hover {\n+  background-color: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+#lp-builder-popup-container .lp-material--delete {\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-builder-popup-container .lp-material--delete:hover {\n+  background-color: #F7F7F7;\n+  color: #1e1e1e;\n+  border-color: #1e1e1e;\n+}\n+#lp-builder-popup-container .cb-item-edit-content {\n+  gap: 0;\n+  flex-direction: column;\n+}\n+#lp-builder-popup-container .cb-item-edit-content .cb-item-edit-column {\n+  width: 100%;\n+}\n+#lp-builder-popup-container .cb-item-edit-publish {\n+  display: none;\n+}\n+#lp-builder-popup-container .cb-section__quiz-edit .cb-item-edit-column--left {\n+  flex: 0;\n+  max-width: unset;\n+}\n \n body.lp-popup-open {\n   overflow: hidden;\n@@ -5069,7 +15973,7 @@\n   inset: 5vh 5% 5vh 5%;\n   width: auto;\n   max-width: 900px;\n-  max-height: none;\n+  max-height: 750px;\n   height: auto;\n   margin: auto;\n   background-color: #fff;\n@@ -5084,6 +15988,7 @@\n .lp-builder-popup--fullscreen {\n   inset: 0;\n   max-width: 100%;\n+  max-height: 100%;\n   border-radius: 0;\n }\n .lp-builder-popup--loading {\n@@ -5115,8 +16020,6 @@\n   align-items: center;\n   justify-content: space-between;\n   padding: 16px 24px;\n-  border-bottom: 1px solid #e5e7eb;\n-  background-color: #fff;\n   flex-shrink: 0;\n }\n .lp-builder-popup__header-left {\n@@ -5177,41 +16080,6 @@\n   padding: 0;\n   background-color: #fff;\n }\n-.lp-builder-popup__tabs {\n-  display: flex;\n-  list-style: none;\n-  margin: 0;\n-  padding: 0 24px;\n-  border-bottom: 1px solid #e5e7eb;\n-  background-color: #fff;\n-  gap: 8px;\n-}\n-.lp-builder-popup__tab {\n-  padding: 14px 20px;\n-  cursor: pointer;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #6b7280;\n-  border-bottom: 2px solid transparent;\n-  transition: all 0.2s;\n-  margin-bottom: -1px;\n-}\n-.lp-builder-popup__tab:hover {\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup__tab.active {\n-  color: #1e1e1e;\n-  border-bottom-color: #1e1e1e;\n-}\n-.lp-builder-popup__tab-content {\n-  padding: 24px;\n-}\n-.lp-builder-popup__tab-pane {\n-  display: none;\n-}\n-.lp-builder-popup__tab-pane.active {\n-  display: block;\n-}\n .lp-builder-popup__notice {\n   padding: 15px;\n   background-color: #f0f6fc;\n@@ -5226,8 +16094,6 @@\n   justify-content: space-between;\n   gap: 12px;\n   padding: 16px 24px;\n-  border-top: 1px solid #e5e7eb;\n-  background-color: #fff;\n   flex-shrink: 0;\n }\n .lp-builder-popup__footer-left {\n@@ -5241,8 +16107,8 @@\n   gap: 12px;\n }\n .lp-builder-popup__btn {\n-  padding: 8px 25px;\n-  border-radius: 5px;\n+  padding: 10px 25px;\n+  border-radius: 12px;\n   font-size: 16px;\n   font-weight: 500;\n   cursor: pointer;\n@@ -5250,295 +16116,95 @@\n   border: none;\n }\n .lp-builder-popup__btn--cancel {\n-  background-color: #f3f4f6;\n-  color: #1a1a1a;\n-  border: 1px solid #d1d5db;\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n }\n .lp-builder-popup__btn--cancel:hover {\n-  background-color: #e5e7eb;\n+  background-color: #EEF1FF;\n }\n .lp-builder-popup__btn--save {\n-  background-color: #1e1e1e;\n-  color: #fff;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n .lp-builder-popup__btn--save:hover {\n-  background-color: #333;\n+  background-color: #5b52d1;\n }\n .lp-builder-popup__btn--save:disabled {\n   opacity: 0.6;\n   cursor: not-allowed;\n }\n .lp-builder-popup__btn--trash {\n-  background-color: rgb(220, 38, 38);\n-  color: #fff;\n+  background-color: #ffffff;\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n }\n .lp-builder-popup__btn--trash:hover {\n-  background-color: rgb(185, 28, 28);\n-}\n-.lp-builder-popup .cb-button {\n-  padding: 8px 25px;\n-  border-radius: 5px;\n-  background: #f3f4f6;\n-  font-size: 16px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  border: 1px solid #d1d5db;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .cb-button:hover {\n-  background: #e5e7eb;\n-}\n-.lp-builder-popup .cb-button.cb-btn-update__lesson, .lp-builder-popup .cb-button.cb-btn-update__question, .lp-builder-popup .cb-button.cb-btn-update__quiz {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-}\n-.lp-builder-popup .cb-button.cb-btn-update__lesson:hover, .lp-builder-popup .cb-button.cb-btn-update__question:hover, .lp-builder-popup .cb-button.cb-btn-update__quiz:hover {\n-  background: #333;\n-}\n-.lp-builder-popup .cb-button.cb-btn-trash__lesson, .lp-builder-popup .cb-button.cb-btn-trash__question, .lp-builder-popup .cb-button.cb-btn-trash__quiz {\n-  background: rgb(220, 38, 38);\n-  color: #fff;\n-  border: none;\n-}\n-.lp-builder-popup .cb-button.cb-btn-trash__lesson:hover, .lp-builder-popup .cb-button.cb-btn-trash__question:hover, .lp-builder-popup .cb-button.cb-btn-trash__quiz:hover {\n-  background: rgb(185, 28, 28);\n+  color: #dc2626;\n+  background-color: #fee2e2;\n+  border-color: #fee2e2;\n }\n-.lp-builder-popup .cb-button.cb-btn-publish__lesson, .lp-builder-popup .cb-button.cb-btn-publish__question, .lp-builder-popup .cb-button.cb-btn-publish__quiz {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n+.lp-builder-popup__btn--draft {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: 1px solid transparent;\n }\n-.lp-builder-popup .cb-button.cb-btn-publish__lesson:hover, .lp-builder-popup .cb-button.cb-btn-publish__question:hover, .lp-builder-popup .cb-button.cb-btn-publish__quiz:hover {\n-  background: #333;\n+.lp-builder-popup__btn--draft:hover {\n+  background-color: #d5dcff;\n+  border-color: transparent;\n }\n .lp-builder-popup .lesson-status,\n .lp-builder-popup .question-status,\n-.lp-builder-popup .quiz-status {\n-  padding: 5px 12px;\n+.lp-builder-popup .quiz-status,\n+.lp-builder-popup .quizzes-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #f3f4f6;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n .lp-builder-popup .lesson-status.publish,\n .lp-builder-popup .question-status.publish,\n-.lp-builder-popup .quiz-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+.lp-builder-popup .quiz-status.publish,\n+.lp-builder-popup .quizzes-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n }\n .lp-builder-popup .lesson-status.draft,\n .lp-builder-popup .question-status.draft,\n-.lp-builder-popup .quiz-status.draft {\n-  color: #1a1a1a;\n-  background: #fbbf24;\n+.lp-builder-popup .quiz-status.draft,\n+.lp-builder-popup .quizzes-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+.lp-builder-popup .lesson-status.pending,\n+.lp-builder-popup .question-status.pending,\n+.lp-builder-popup .quiz-status.pending,\n+.lp-builder-popup .quizzes-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+.lp-builder-popup .lesson-status.private,\n+.lp-builder-popup .question-status.private,\n+.lp-builder-popup .quiz-status.private,\n+.lp-builder-popup .quizzes-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n }\n .lp-builder-popup .lesson-status.trash,\n .lp-builder-popup .question-status.trash,\n-.lp-builder-popup .quiz-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+.lp-builder-popup .quiz-status.trash,\n+.lp-builder-popup .quizzes-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n .lp-builder-popup .cb-section__header {\n   display: none;\n }\n-.lp-builder-popup .lp-meta-box,\n-.lp-builder-popup .lp-meta-box-wrap {\n-  margin: 0;\n-  background: transparent;\n-}\n-.lp-builder-popup .lp-meta-box .lp-meta-box__inner,\n-.lp-builder-popup .lp-meta-box-wrap .lp-meta-box__inner {\n-  padding: 0;\n-  display: flex;\n-  flex-direction: column;\n-  gap: 24px;\n-}\n-.lp-builder-popup .form-field,\n-.lp-builder-popup .lp-meta-box__duration,\n-.lp-builder-popup .lp-meta-box-field {\n-  display: flex;\n-  align-items: center;\n-  gap: 11px;\n-  margin: 0;\n-  padding: 0;\n-}\n-.lp-builder-popup .form-field > label,\n-.lp-builder-popup .form-field label span,\n-.lp-builder-popup .lp-meta-box__duration > label,\n-.lp-builder-popup .lp-meta-box__duration label span,\n-.lp-builder-popup .lp-meta-box-field > label,\n-.lp-builder-popup .lp-meta-box-field label span {\n-  font-size: 14px;\n-  color: #23282d;\n-  margin: 0;\n-  width: 150px;\n-  min-width: 150px;\n-  max-width: 150px;\n-  padding: 0;\n-  font-weight: 600;\n-  flex: 0 0 auto;\n-}\n-.lp-builder-popup .form-field input[type=number],\n-.lp-builder-popup .form-field input[type=text],\n-.lp-builder-popup .form-field input[type=datetime-local],\n-.lp-builder-popup .lp-meta-box__duration input[type=number],\n-.lp-builder-popup .lp-meta-box__duration input[type=text],\n-.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],\n-.lp-builder-popup .lp-meta-box-field input[type=number],\n-.lp-builder-popup .lp-meta-box-field input[type=text],\n-.lp-builder-popup .lp-meta-box-field input[type=datetime-local] {\n-  width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-}\n-.lp-builder-popup .form-field input[type=number]:focus,\n-.lp-builder-popup .form-field input[type=text]:focus,\n-.lp-builder-popup .form-field input[type=datetime-local]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=number]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=text]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=datetime-local]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=number]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=text]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=datetime-local]:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field textarea,\n-.lp-builder-popup .lp-meta-box__duration textarea,\n-.lp-builder-popup .lp-meta-box-field textarea {\n-  order: 3;\n-  width: 100%;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-  min-height: 80px;\n-  resize: vertical;\n-}\n-.lp-builder-popup .form-field textarea:focus,\n-.lp-builder-popup .lp-meta-box__duration textarea:focus,\n-.lp-builder-popup .lp-meta-box-field textarea:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field select,\n-.lp-builder-popup .lp-meta-box__duration select,\n-.lp-builder-popup .lp-meta-box-field select {\n-  padding: 4px 12px;\n-  height: 34px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-  cursor: pointer;\n-}\n-.lp-builder-popup .form-field select:focus,\n-.lp-builder-popup .lp-meta-box__duration select:focus,\n-.lp-builder-popup .lp-meta-box-field select:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field input[type=checkbox],\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox],\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 44px;\n-  height: 24px;\n-  background: #e5e7eb;\n-  border-radius: 12px;\n-  position: relative;\n-  cursor: pointer;\n-  transition: all 0.3s ease;\n-  margin: 0;\n-  flex-shrink: 0;\n-  border: none;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:before,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:before,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:before {\n-  content: \"\";\n-  position: absolute;\n-  width: 20px;\n-  height: 20px;\n-  border-radius: 50%;\n-  background: #fff;\n-  top: 2px;\n-  left: 2px;\n-  transition: all 0.3s ease;\n-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:checked,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked {\n-  background: #3b82f6;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:checked:before,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked:before,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked:before {\n-  left: 22px;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field .description,\n-.lp-builder-popup .lp-meta-box__duration .description,\n-.lp-builder-popup .lp-meta-box-field .description {\n-  font-size: 13px;\n-  color: #6b7280;\n-  line-height: 1.5;\n-  margin: 0;\n-  display: block;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]),\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) {\n-  flex-direction: row;\n-  align-items: center;\n-  gap: 11px;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]) input[type=checkbox],\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) input[type=checkbox],\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) input[type=checkbox] {\n-  order: 1;\n-  margin-top: 2px;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]) .description,\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) .description,\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) .description {\n-  order: 3;\n-}\n-.lp-builder-popup .form-field._lp_hint_field,\n-.lp-builder-popup .form-field._lp_explanation_field,\n-.lp-builder-popup ._lp_duration_field,\n-.lp-builder-popup ._lp_course_repurchase_option_field {\n-  flex-wrap: wrap;\n-}\n-.lp-builder-popup .form-field._lp_hint_field .description,\n-.lp-builder-popup .form-field._lp_explanation_field .description,\n-.lp-builder-popup ._lp_duration_field .description,\n-.lp-builder-popup ._lp_course_repurchase_option_field .description {\n-  width: 100%;\n-  margin-left: 161px;\n-  margin-top: 6px;\n-}\n .lp-builder-popup .lp-meta-box__duration > :not(label):not(.description) {\n   display: inline-flex;\n   align-items: center;\n@@ -5581,107 +16247,83 @@\n   accent-color: #1e1e1e;\n }\n .lp-builder-popup .wp-editor-wrap {\n-  border: 1px solid #d1d5db;\n-  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n   overflow: hidden;\n-  background-color: #fff;\n }\n .lp-builder-popup .wp-editor-wrap .wp-editor-tools {\n-  background-color: #f5f5f5;\n-  margin: 8px 8px 0;\n-  border-radius: 12px 12px 0 0;\n-}\n-.lp-builder-popup .wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+  display: flex;\n+  flex-wrap: wrap;\n }\n-.lp-builder-popup .wp-editor-wrap button.insert-media,\n-.lp-builder-popup .wp-editor-wrap input.button {\n-  color: #1e1e1e;\n-  border-color: #d1d5db;\n-  display: inline-block;\n-  text-decoration: none;\n-  font-size: 13px;\n-  line-height: 2.15384615;\n-  min-height: 30px;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons {\n   margin: 0;\n-  padding: 0 10px;\n-  cursor: pointer;\n-  border-width: 1px;\n-  border-style: solid;\n-  border-radius: 4px;\n-  white-space: nowrap;\n-  box-sizing: border-box;\n-  background: #fff;\n }\n-.lp-builder-popup .wp-editor-wrap button.insert-media:hover,\n-.lp-builder-popup .wp-editor-wrap input.button:hover {\n-  background: #f5f5f5;\n-  border-color: #9ca3af;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-tinymce {\n-  border: none !important;\n-  visibility: visible !important;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-top-part::before {\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+  background: #ffffff;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  padding: 6px 12px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  text-decoration: none;\n+  transition: all 0.2s;\n   box-shadow: none;\n }\n-.lp-builder-popup .wp-editor-wrap div.mce-statusbar {\n-  border-top: none;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media .wp-media-buttons-icon::before {\n+  color: #7067ED;\n }\n-.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button {\n-  margin: 8px 8px 8px 0;\n-  border-bottom-color: #dcdcde;\n-  border-radius: 4px;\n-  background: #f5f5f5;\n-  border: 1px solid #d1d5db;\n-  padding: 4px 12px;\n-  font-size: 13px;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media:hover {\n+  background: #EEF1FF;\n }\n-.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n-  background: #fff;\n-  color: #1e1e1e;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-tabs:not(:has(.wp-switch-editor[aria-pressed=true])) .wp-switch-editor:first-child {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 600;\n }\n-.lp-builder-popup .wp-editor-wrap .mce-top-part,\n-.lp-builder-popup .wp-editor-wrap .quicktags-toolbar {\n-  background-color: #f5f5f5;\n-  margin: 0 8px 0;\n-  padding: 0;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container {\n+  flex: 0 0 calc(100% + 24px);\n+  width: 100%;\n+  margin-top: 10px;\n+  border-top: 1px solid #e5e7eb;\n   border-radius: 0 0 8px 8px;\n+  margin-left: -12px;\n+  margin-right: -12px;\n+  margin-bottom: -10px;\n+  padding: 0;\n }\n-.lp-builder-popup .wp-editor-wrap .mce-top-part::before {\n-  box-shadow: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .quicktags-toolbar {\n-  padding: 6px;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp {\n-  background: none;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp > div {\n-  padding: 0 8px 8px !important;\n-}\n-.lp-builder-popup .wp-editor-wrap .wp-editor-container {\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container textarea.wp-editor-area {\n   border: none;\n+  border-radius: 0 0 8px 8px;\n+  padding: 12px;\n+  width: 100%;\n+  box-sizing: border-box;\n }\n-.lp-builder-popup .wp-editor-wrap textarea.wp-editor-area {\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container {\n   border: none;\n-  border-top: 0;\n-  border-radius: 0;\n-  padding: 12px;\n+  border-radius: 0 0 8px 8px;\n }\n-.lp-builder-popup .wp-editor-container {\n-  border: none !important;\n-  background: #fff;\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-toolbar-grp {\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  padding: 4px;\n }\n-.lp-builder-popup .mce-top-part {\n-  margin: 0 !important;\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-top-part::before {\n+  box-shadow: none;\n }\n-.lp-builder-popup .quicktags-toolbar {\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-panel {\n+  border: none !important;\n+}\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container textarea.wp-editor-area {\n+  border: none;\n   border-radius: 0 0 8px 8px;\n-  margin: 0 !important;\n-  padding: 8px !important;\n+  padding: 16px;\n+  width: 100%;\n+  box-sizing: border-box;\n+  min-height: 200px;\n }\n .lp-builder-popup .lp-material--table {\n   width: 100%;\n@@ -5752,21 +16394,22 @@\n   font-size: 14px;\n   color: #1e1e1e;\n }\n-.lp-builder-popup .cb-lesson-edit-title__input,\n-.lp-builder-popup .cb-quiz-edit-title__input,\n-.lp-builder-popup .cb-question-edit-title__input {\n+.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input,\n+.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input,\n+.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   border: 1px solid #d1d5db;\n-  border-radius: 6px;\n+  border-radius: 8px;\n   font-size: 14px;\n   transition: all 0.2s;\n+  box-shadow: none;\n }\n-.lp-builder-popup .cb-lesson-edit-title__input:focus,\n-.lp-builder-popup .cb-quiz-edit-title__input:focus,\n-.lp-builder-popup .cb-question-edit-title__input:focus {\n+.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input:focus,\n+.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input:focus,\n+.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ED;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .lp-builder-popup .cb-lesson-edit-desc,\n@@ -5804,134 +16447,120 @@\n   font-weight: 700;\n   color: #1e1e1e;\n   margin-bottom: 20px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #e5e7eb;\n   line-height: 1.2;\n }\n-.lp-builder-popup .cb-section__question-title-assigned {\n+.lp-builder-popup .cb-section__question-title-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned {\n   display: flex;\n-  align-items: flex-start;\n-  gap: 20px;\n+  flex-direction: column-reverse;\n+  gap: 16px;\n   margin-bottom: 24px;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title {\n+.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title,\n+.lp-builder-popup .cb-section__question-title-assigned .cb-lesson-edit-title,\n+.lp-builder-popup .cb-section__question-title-assigned .cb-quiz-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-question-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-lesson-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title {\n   margin-bottom: 0;\n+  width: 100%;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses {\n   flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n+  padding: 0;\n+  background-color: transparent;\n+  border-radius: 0;\n   font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n+  margin-top: 0;\n+  border: none;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .label,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label {\n   color: #6b7280;\n   margin-right: 5px;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a {\n-  color: #3b82f6;\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a {\n+  color: #2E91FA;\n   text-decoration: none;\n   font-weight: 500;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover {\n   text-decoration: underline;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned {\n   color: #9ca3af;\n   font-style: italic;\n }\n-.lp-builder-popup .cb-section__lesson-title-assigned {\n-  display: flex;\n-  gap: 40px;\n-  margin-bottom: 24px;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .cb-lesson-edit-title {\n-  margin-bottom: 0;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses {\n-  flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n-  font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .label {\n-  color: #6b7280;\n-  margin-right: 5px;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a {\n-  color: #3b82f6;\n-  text-decoration: none;\n+.lp-builder-popup .lp-message {\n+  color: #7067ED;\n+  background-color: #EEF1FF;\n   font-weight: 500;\n+  padding: 8px 20px;\n+  border-radius: 8px;\n }\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a:hover {\n-  text-decoration: underline;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .question-not-assigned {\n-  color: #9ca3af;\n-  font-style: italic;\n-}\n-.lp-builder-popup .cb-section__quiz-title-assigned {\n-  display: flex;\n-  gap: 40px;\n-  margin-bottom: 24px;\n-}\n-.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title {\n-  margin-bottom: 0;\n+.lp-builder-popup .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses {\n-  flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n+.lp-builder-popup .cb-item-edit-assigned {\n   font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n+  color: #6b7280;\n+  margin-bottom: 20px;\n+  line-height: 1.6;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label {\n+.lp-builder-popup .cb-item-edit-assigned .label {\n   color: #6b7280;\n-  margin-right: 5px;\n+  font-weight: 400;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a {\n-  color: #3b82f6;\n+.lp-builder-popup .cb-item-edit-assigned a {\n+  color: #2E91FA;\n   text-decoration: none;\n   font-weight: 500;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover {\n+.lp-builder-popup .cb-item-edit-assigned a:hover {\n   text-decoration: underline;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned {\n-  color: #9ca3af;\n-  font-style: italic;\n-}\n \n .lp-builder-popup .lp-edit-quiz-wrap .heading {\n   display: flex;\n   align-items: center;\n-  justify-content: space-between;\n-  padding: 14px 20px;\n-  background-color: #f9fafb;\n-  border-bottom: 1px solid #e5e7eb;\n-  margin: -24px -24px 24px;\n-  border-radius: 0;\n+  margin-bottom: 8px;\n+  gap: 8px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading h4 {\n-  margin: 0;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1e1e1e;\n-  width: 80%;\n+  color: #898989;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading .total-items {\n+  margin-left: auto;\n   font-size: 13px;\n-  color: #6b7280;\n-  background: #e5e7eb;\n-  padding: 4px 12px;\n-  border-radius: 12px;\n+  color: #898989;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all {\n   cursor: pointer;\n@@ -5941,7 +16570,7 @@\n .lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover {\n   color: #1e1e1e;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-angle-down {\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down {\n   display: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down {\n@@ -5968,14 +16597,9 @@\n .lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural {\n   display: inline-block;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner {\n-  animation: rotation 2s infinite linear;\n-  font-size: 1.25rem;\n-  display: none;\n-}\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item {\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   margin-bottom: 12px;\n   background: #fff;\n   transition: all 0.2s;\n@@ -5994,7 +16618,7 @@\n   transition: all 0.2s;\n   display: none;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-icon-angle-down {\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down {\n   display: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down {\n@@ -6033,7 +16657,7 @@\n   padding: 14px 16px;\n   background-color: #fff;\n   border-bottom: 1px solid transparent;\n-  border-radius: 8px;\n+  border-radius: 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title {\n   display: none;\n@@ -6051,20 +16675,16 @@\n   font-size: 14px;\n   background: transparent;\n   transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:hover, .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:focus {\n-  background: #fff;\n-  border-color: #d1d5db;\n-  outline: none;\n+  font-weight: 600;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label {\n   font-size: 11px;\n-  background-color: #1e1e1e;\n-  color: #fff;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED;\n   padding: 4px 10px;\n-  border-radius: 4px;\n+  border-radius: 20px;\n   white-space: nowrap;\n-  font-weight: 500;\n+  font-weight: 600;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question {\n@@ -6094,15 +16714,19 @@\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button {\n   display: none;\n }\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus) {\n+  border: 1px solid #7067ED;\n+}\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n-  border-bottom-color: #e5e7eb;\n-  border-radius: 8px 8px 0 0;\n+  border-bottom-color: #f5f5f5;\n+  border-radius: 12px 12px 0 0;\n+  background: #EEF1FF;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main {\n   display: none;\n-  padding: 16px;\n-  background: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n+  padding: 24px;\n+  background: #ffffff;\n+  border-radius: 0 0 12px 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main {\n   display: block;\n@@ -6118,13 +16742,13 @@\n   align-items: center;\n   gap: 12px;\n   padding: 16px;\n-  background-color: #fff;\n-  border: 1px dashed #d1d5db;\n-  border-radius: 8px;\n-  margin-top: 16px;\n+  background-color: #ffffff;\n+  border: 1px dashed #e5e7eb;\n+  border-radius: 12px;\n+  margin-top: 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus {\n-  color: #3b82f6;\n+  color: #7067ED;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input {\n   flex: 1;\n@@ -6135,11 +16759,10 @@\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus {\n   outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new {\n-  padding: 10px 14px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   min-width: 150px;\n@@ -6147,528 +16770,26 @@\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ED;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button {\n   padding: 10px 20px;\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-  border-radius: 6px;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  border-radius: 8px;\n   font-weight: 500;\n   cursor: pointer;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover {\n-  background: #333;\n-}\n-\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-edit-left,\n-.lp-builder-popup .lp-question-edit-main .lp-question-edit-left {\n-  width: 100%;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit {\n-  margin-bottom: 24px;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header {\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  padding: 14px 16px;\n-  background-color: #f9fafb;\n-  border-bottom: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  margin: 0;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header .lp-question-type-label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header .lp-question-type-label {\n-  font-size: 12px;\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  padding: 4px 12px;\n-  border-radius: 4px;\n-  font-weight: 500;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-answers-config,\n-.lp-builder-popup .lp-question-edit-main .lp-answers-config {\n-  padding: 16px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-choice-header,\n-.lp-builder-popup .lp-question-edit-main .lp-question-choice-header {\n-  display: flex;\n-  justify-content: space-between;\n-  padding: 10px 0;\n-  border-bottom: 1px solid #e5e7eb;\n-  margin-bottom: 12px;\n-  font-weight: 600;\n-  font-size: 13px;\n-  color: #6b7280;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item {\n-  display: flex;\n-  align-items: center;\n-  gap: 12px;\n-  padding: 10px 0;\n-  border-bottom: 1px solid #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item:last-of-type:not(.clone),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item:last-of-type:not(.clone) {\n-  border-bottom: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag {\n-  cursor: move;\n-  color: #9ca3af;\n-  font-size: 16px;\n-  padding: 4px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag:hover {\n-  color: #6b7280;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-spinner,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-spinner {\n-  animation: rotation 2s infinite linear;\n-  font-size: 1.25rem;\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text],\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input {\n-  flex: 1;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:focus,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:hover:not(:focus),\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:hover:not(:focus),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus) {\n-  border-color: #9ca3af;\n+  background: #7067ED;\n+  color: #EEF1FF;\n }\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  padding: 8px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-  display: flex;\n-  align-items: center;\n-  justify-content: center;\n-  background: transparent;\n+.lp-builder-popup .lp-edit-quiz-wrap .mce-menubar {\n   border: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer:hover {\n-  color: #dc2626;\n-  background: #fee2e2;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 20px;\n-  height: 20px;\n-  border: 2px solid #d1d5db;\n-  border-radius: 50%;\n-  cursor: pointer;\n-  position: relative;\n-  transition: all 0.2s;\n-  flex-shrink: 0;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:hover {\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked {\n-  border-color: #3b82f6;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked::after,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked::after {\n-  content: \"\";\n-  position: absolute;\n-  top: 50%;\n-  left: 50%;\n-  transform: translate(-50%, -50%);\n-  width: 10px;\n-  height: 10px;\n-  background: #3b82f6;\n-  border-radius: 50%;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 20px;\n-  height: 20px;\n-  border: 2px solid #d1d5db;\n-  border-radius: 4px;\n-  cursor: pointer;\n-  position: relative;\n-  transition: all 0.2s;\n-  flex-shrink: 0;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:hover {\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked {\n-  background: #3b82f6;\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked::after,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked::after {\n-  content: \"\";\n-  position: absolute;\n-  left: 6px;\n-  top: 2px;\n-  width: 5px;\n-  height: 10px;\n-  border: solid white;\n-  border-width: 0 2px 2px 0;\n-  transform: rotate(45deg);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.clone,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.clone {\n-  display: none !important;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.loading {\n-  opacity: 0.6;\n-  pointer-events: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new {\n-  display: flex;\n-  align-items: center;\n-  gap: 12px;\n-  padding: 16px 0 0;\n-  margin-top: 12px;\n-  border-top: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-icon-plus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-icon-plus {\n-  color: #3b82f6;\n-  font-size: 16px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text],\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input {\n-  flex: 1;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]:focus,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]::placeholder,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]::placeholder,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder {\n-  color: #9ca3af;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer {\n-  padding: 10px 16px;\n-  background: #f3f4f6;\n-  color: #6b7280;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-weight: 500;\n-  font-size: 14px;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover {\n-  background: #e5e7eb;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border-color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover {\n-  background: #333;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details {\n-  margin-top: 24px;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-section-collapse,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-section-collapse {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-up,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-up {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-down,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-down {\n-  display: block;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle {\n-  padding: 14px 16px;\n-  background-color: #f9fafb;\n-  cursor: pointer;\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  transition: background 0.2s;\n-  border-bottom: 1px solid transparent;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header:hover,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle:hover,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header:hover,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle:hover {\n-  background-color: #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle label,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  margin: 0;\n-  cursor: pointer;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle {\n-  color: #6b7280;\n-  transition: transform 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header, .lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-trigger-toggle {\n-  border-bottom-color: #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-icon-angle-down,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-icon-angle-down {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-section-collapse,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-section-collapse {\n-  padding: 20px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings {\n-  margin-bottom: 24px;\n-  padding-bottom: 24px;\n-  border-bottom: 1px solid #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings:last-child,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings:last-child {\n-  margin-bottom: 0;\n-  padding-bottom: 0;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label {\n-  margin-bottom: 10px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  color: #1e1e1e;\n-  display: block;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number],\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number] {\n-  width: 120px;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings___desc,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings___desc {\n-  margin-top: 8px;\n-  font-size: 13px;\n-  color: #6b7280;\n-  line-height: 1.5;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings .wp-editor-wrap,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings .wp-editor-wrap {\n-  margin-top: 0;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-options,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-options {\n-  margin-top: 16px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item {\n-  display: flex;\n-  align-items: flex-start;\n-  gap: 12px;\n-  padding: 12px;\n-  background: #f9fafb;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-  margin-bottom: 12px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item.clone,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item.clone {\n-  display: none !important;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-index,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-index {\n-  font-weight: 600;\n-  color: #6b7280;\n-  min-width: 24px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input {\n-  flex: 1;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  padding: 8px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover {\n-  color: #dc2626;\n-  background: #fee2e2;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-option-detail,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-option-detail {\n-  margin-top: 12px;\n-  padding: 12px;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content {\n-  padding: 8px 14px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  background: #fff;\n-  font-size: 13px;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-  margin-right: 8px;\n-  margin-bottom: 8px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content:hover {\n   background: #f5f5f5;\n-  border-color: #9ca3af;\n }\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content.loading {\n-  opacity: 0.6;\n-  pointer-events: none;\n+.lp-builder-popup .lp-edit-quiz-wrap .heading {\n+  border-radius: 12px;\n }\n \n @keyframes lp-popup-spin {\n@@ -6771,6 +16892,14 @@\n     width: 100%;\n   }\n }\n+@keyframes rotation {\n+  0% {\n+    transform: rotate(0deg);\n+  }\n+  100% {\n+    transform: rotate(359deg);\n+  }\n+}\n .learn-press-course-builder #lp-course-builder-content {\n   background: #fff;\n   padding: 24px;\n@@ -6841,11 +16970,39 @@\n .learn-press-course-builder .cb-section__course-edit .form-field,\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration {\n   display: flex;\n-  align-items: center;\n-  gap: 11px;\n+  gap: 0 11px;\n   margin: 0;\n   padding: 0;\n }\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .description {\n+  max-width: max-content;\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .learn-press-tip {\n+  max-width: max-content;\n+}\n .learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,\n .learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field {\n   flex-wrap: wrap;\n@@ -6855,7 +17012,6 @@\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,\n .learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label {\n   font-size: 14px;\n-  color: #1a1a1a;\n   margin: 0;\n   width: 150px;\n   min-width: 150px;\n@@ -6885,7 +17041,7 @@\n }\n .learn-press-course-builder .cb-section__course-edit .form-field textarea {\n   order: 3;\n-  width: 100%;\n+  width: calc(100% - 165px);\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n@@ -6898,7 +17054,7 @@\n .learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ed;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .learn-press-course-builder .cb-section__course-edit select {\n@@ -6908,12 +17064,11 @@\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n   cursor: pointer;\n }\n .learn-press-course-builder .cb-section__course-edit select:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ed;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration > :not(label):not(.description) {\n@@ -6921,7 +17076,8 @@\n   align-items: center;\n   gap: 8px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox] {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox],\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio] {\n   appearance: none;\n   -webkit-appearance: none;\n   width: 44px;\n@@ -6934,7 +17090,8 @@\n   margin: 0;\n   flex-shrink: 0;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:before {\n   content: \"\";\n   position: absolute;\n   width: 20px;\n@@ -6946,26 +17103,31 @@\n   transition: all 0.3s ease;\n   box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked {\n-  background: #3b82f6;\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked {\n+  background: #28A746;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked:before {\n   left: 22px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]),\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) {\n   flex-direction: row;\n   align-items: center;\n-  gap: 11px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox] {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox],\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) input[type=radio] {\n   order: 1;\n   margin-top: 2px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description,\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) .description {\n   order: 3;\n }\n .learn-press-course-builder .cb-section__course-edit .description {\n@@ -6995,6 +17157,9 @@\n .learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content {\n   flex: 1;\n }\n+.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content .lp_course_extra_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n .learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text] {\n   max-width: 100%;\n   margin-bottom: 10px;\n@@ -7021,168 +17186,329 @@\n     margin-top: 0;\n   }\n }\n+.learn-press-course-builder .lp-message {\n+  color: #7067ED;\n+  background-color: #EEF1FF;\n+  font-weight: 500;\n+  padding: 8px 20px;\n+  border-radius: 8px;\n+}\n+\n+#lp-builder-popup-container .learn-press-message,\n+#lp-course-builder .learn-press-message {\n+  margin: 20px 10px;\n+  position: relative;\n+  padding: 10px 20px;\n+  border-radius: 8px;\n+  \u002F*background-color: $cb-info-bg;\n+  color: $cb-info;*\u002F\n+  max-width: 100%;\n+  width: fit-content;\n+}\n+#lp-builder-popup-container select,\n+#lp-course-builder select {\n+  padding: 10px 32px 10px 14px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: right 10px center;\n+  background-size: 14px;\n+}\n+#lp-builder-popup-container select:focus,\n+#lp-course-builder select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+\n+#lp-course-builder .lp-ico-ai {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+#lp-course-builder .lp-btn-generate-course-with-ai,\n+#lp-course-builder .lp-btn-warning-enable-ai {\n+  position: relative;\n+  margin: 0 !important;\n+}\n+#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai {\n+  background: transparent;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai:hover {\n+  background: #EEF1FF;\n+}\n \n .wp-editor-wrap {\n-  border: 1px solid #ddd;\n-  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n   overflow: hidden;\n-  background-color: #fff;\n+  background-color: #ffffff;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:focus,\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:hover,\n+.wp-editor-wrap .qt-dfw:focus,\n+.wp-editor-wrap .qt-dfw:hover {\n+  box-shadow: none;\n+  background: none;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-underline),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-blockquote),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-alignright),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-unlink) {\n+  border-right: 1px solid #d1d5db;\n }\n .wp-editor-wrap .wp-editor-tools {\n-  background-color: #f5f5f5;\n-  margin: 8px 8px 0;\n-  border-radius: 12px 12px 0 0;\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  background-color: #F7F7F7;\n+  padding: 8px 12px;\n+}\n+.wp-editor-wrap .wp-editor-tools:after {\n+  content: none;\n }\n .wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+  padding: 0;\n+  float: none;\n+  flex-shrink: 0;\n }\n .wp-editor-wrap button.insert-media,\n .wp-editor-wrap input.button {\n   color: #1e1e1e;\n-  border-color: #1e1e1e;\n-  display: inline-block;\n+  border-color: #d1d5db;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n   text-decoration: none;\n   font-size: 13px;\n-  line-height: 2.15384615;\n+  line-height: 1.6;\n   min-height: 30px;\n   margin: 0;\n-  padding: 0 10px;\n+  padding: 4px 12px;\n   cursor: pointer;\n   border-width: 1px;\n   border-style: solid;\n-  border-radius: 3px;\n+  border-radius: 6px;\n   white-space: nowrap;\n   box-sizing: border-box;\n+  background: #ffffff;\n+  transition: border-color 0.15s ease, background 0.15s ease;\n+}\n+.wp-editor-wrap button.insert-media:focus,\n+.wp-editor-wrap input.button:focus {\n+  outline: none;\n+  box-shadow: none;\n+  background-color: #EEF1FF;\n+  border-color: #7067ED;\n+  color: #7067ED;\n+}\n+.wp-editor-wrap button.insert-media:hover,\n+.wp-editor-wrap input.button:hover {\n+  color: #7067ED;\n+  border-color: #7067ED;\n+  background-color: #EEF1FF;\n+}\n+.wp-editor-wrap .wp-editor-tabs {\n+  float: none;\n+  flex-shrink: 0;\n+  display: flex;\n+  background: #ffffff;\n+  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  padding: 4px 4px 6px;\n+  gap: 4px;\n+}\n+.wp-editor-wrap .wp-editor-tabs button {\n+  margin: 0;\n+  padding: 2px 14px;\n+  border: none;\n+  border-radius: 8px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  line-height: 1.6;\n+  color: #6b7280;\n+  background: transparent;\n+  cursor: pointer;\n+  box-sizing: content-box !important;\n+}\n+.wp-editor-wrap .wp-editor-tabs button:hover {\n+  color: #1e1e1e;\n+  background-color: #EEF1FF;\n+}\n+.wp-editor-wrap .wp-editor-tabs button:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  font-weight: 600;\n }\n .wp-editor-wrap .mce-tinymce {\n   border: none !important;\n   visibility: visible !important;\n }\n-.wp-editor-wrap .mce-top-part::before {\n-  box-shadow: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox {\n+  border-radius: 8px;\n }\n-.wp-editor-wrap div.mce-statusbar {\n-  border-top: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus, .wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover {\n+  box-shadow: none;\n }\n-.wp-editor-wrap .wp-editor-tabs button {\n-  margin: 8px 8px 0 0;\n-  border-bottom-color: #dcdcde;\n-  border-radius: 4px;\n+.wp-editor-wrap div.mce-toolbar-grp > div {\n+  padding: 0;\n }\n-.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n-  background: #fff;\n-  color: #000;\n+.wp-editor-wrap .mce-top-part::before {\n+  box-shadow: none !important;\n }\n .wp-editor-wrap .mce-top-part,\n .wp-editor-wrap .quicktags-toolbar {\n-  background-color: #f5f5f5;\n-  margin: 0 8px 0;\n+  background-color: #F7F7F7;\n+  margin: 0;\n   padding: 0;\n-  border-radius: 0 0 8px 8px;\n }\n-.wp-editor-wrap .mce-top-part::before {\n+.wp-editor-wrap .mce-toolbar-grp {\n+  background: none;\n+  border-bottom: none;\n+  padding: 0px 8px 8px;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn {\n+  border: none;\n+  background: transparent;\n   box-shadow: none;\n+  border-radius: 4px;\n }\n-.wp-editor-wrap .quicktags-toolbar {\n-  padding: 6px;\n-  border-bottom: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn button {\n+  padding: 2px 5px;\n+  color: #374151;\n }\n-.wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+.wp-editor-wrap .mce-toolbar .mce-btn:hover, .wp-editor-wrap .mce-toolbar .mce-btn.mce-active {\n+  background: rgba(0, 0, 0, 0.06);\n+  border: none;\n+  box-shadow: none;\n }\n-.wp-editor-wrap .mce-tinymce {\n-  border: none !important;\n-  visibility: visible !important;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group {\n+  padding: 0 2px;\n }\n-.wp-editor-wrap .mce-toolbar-grp {\n-  background: none;\n-  border-bottom: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group:not(:last-child)::after {\n+  content: \"\";\n+  display: inline-block;\n+  width: 1px;\n+  height: 20px;\n+  background: #e5e7eb;\n+  vertical-align: middle;\n+  margin-left: 4px;\n }\n-.wp-editor-wrap .mce-toolbar-grp > div {\n-  padding: 5px;\n+.wp-editor-wrap .quicktags-toolbar {\n+  padding: 0 10px 8px;\n+  border-bottom: 1px solid #f5f5f5;\n }\n .wp-editor-wrap .wp-editor-container {\n   border: none;\n }\n+.wp-editor-wrap .mce-edit-area iframe {\n+  min-height: 150px !important;\n+}\n+.wp-editor-wrap div.mce-statusbar {\n+  display: none;\n+}\n \n #lp-builder-popup-container .wp-editor-container {\n   border: none !important;\n-  background: #fff;\n+  background: #ffffff;\n+}\n+#lp-builder-popup-container .wp-editor-tools {\n+  padding: 8px 12px;\n }\n #lp-builder-popup-container .mce-top-part {\n   margin: 0 !important;\n }\n #lp-builder-popup-container .lp-question-field-settings .mce-top-part {\n-  margin: 0 8px 0 !important;\n+  margin: 0 !important;\n }\n #lp-builder-popup-container .quicktags-toolbar {\n-  border-radius: 0 0 8px 8px;\n   margin: 0 !important;\n-  padding: 8px !important;\n+  padding: 6px 8px !important;\n }\n \n .lp-popup-items-to-select .header {\n-  padding: 0 20px;\n+  padding: 0;\n   flex-shrink: 0;\n }\n \n .lp-popup-items-to-select .header ul.tabs {\n   display: flex;\n-  margin-top: 10;\n-  padding: 0;\n+  border-bottom: 1px solid #f5f5f5;\n+  background: #ffffff;\n+  gap: 10px;\n+  margin: 0;\n   list-style: none;\n-  gap: 20px;\n-  border-bottom: unset;\n+  padding: 0;\n }\n \n .lp-popup-items-to-select ul.tabs li {\n   margin: 0;\n+  display: inline-block;\n+  position: relative;\n+  padding: 0px 24px;\n+  text-decoration: none;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-radius: 12px 12px 0 0;\n+  border-bottom: 2px solid transparent;\n+  cursor: pointer;\n+}\n+.lp-popup-items-to-select ul.tabs li.active {\n+  border-bottom-color: #7067ED;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-popup-items-to-select ul.tabs li:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n }\n \n .lp-popup-items-to-select .header ul.tabs li.tab a {\n-  display: block;\n-  text-decoration: none;\n-  color: #6b7280;\n-  font-weight: 600;\n-  font-size: 14px;\n-  transition: all 0.2s;\n-  border-radius: 6px;\n-  border: 1px solid #f5f5f5;\n+  padding: 0;\n }\n \n .lp-popup-items-to-select .header ul.tabs li.tab.active a,\n .lp-popup-items-to-select .header ul.tabs li.tab a:hover {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n+  color: #7067ED;\n }\n \n-input.lp-search-title-item {\n-  width: 100%;\n+.lp-popup-items-to-select input.lp-search-title-item {\n   padding: 12px 16px;\n-  border: 1px solid #d1d5db;\n+  border-color: #e5e7eb;\n   border-radius: 8px;\n-  font-size: 14px;\n-  color: #374151;\n-  background: #fff;\n-  margin-bottom: 15px;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n   transition: border-color 0.2s;\n+  margin: 0;\n }\n \n-input.lp-search-title-item:focus {\n-  border-color: #3b82f6;\n+.lp-popup-items-to-select input.lp-search-title-item:focus {\n+  border-color: #7067ED;\n   box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n }\n \n .lp-target ul.list-items {\n-  list-style: none;\n-  margin: 0;\n   padding: 0;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n   gap: 0;\n   max-height: 500px;\n }\n@@ -7190,8 +17516,7 @@\n .lp-select-item {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n-  border-bottom: 1px solid #f5f5f5;\n+  padding: 12px 0;\n   cursor: pointer;\n   transition: background 0.2s;\n }\n@@ -7219,8 +17544,8 @@\n }\n \n .lp-select-item input[type=checkbox]:checked {\n-  background-color: #1e1e1e;\n-  border-color: #1e1e1e;\n+  background-color: #28A746;\n+  border-color: #28A746;\n }\n \n .lp-select-item input[type=checkbox]:checked::after {\n@@ -7235,6 +17560,14 @@\n   transform: rotate(45deg);\n }\n \n+.lp-select-item input[type=checkbox]:checked::before {\n+  display: none;\n+}\n+\n+.lp-answers-config input[type=radio]:checked::before {\n+  display: none;\n+}\n+\n .lp-select-item .title {\n   font-size: 14px;\n   color: #374151;\n@@ -7254,13 +17587,16 @@\n   justify-content: center;\n }\n \n+.lp-popup-items-to-select .pagination {\n+  margin: 10px 0 0 !important;\n+}\n+\n .list-items-wrap .learn-press-pagination ul.page-numbers {\n   display: flex;\n-  gap: 5px;\n+  gap: 8px;\n   list-style: none;\n   padding: 0;\n   margin: 0;\n-  border: none;\n }\n \n .list-items-wrap .page-numbers li span.page-numbers.current,\n@@ -7268,40 +17604,53 @@\n   display: flex;\n   align-items: center;\n   justify-content: center;\n-  height: 32px;\n+  min-width: 36px;\n+  height: 36px;\n+  padding: 0 12px;\n   border-radius: 6px;\n-  font-size: 13px;\n   text-decoration: none;\n-  font-weight: 500;\n-  border: 1px solid transparent;\n+  color: #898989;\n+  font-size: 14px;\n+  transition: all 0.2s;\n+  background: #ffffff;\n+  font-weight: 600;\n }\n \n .list-items-wrap .page-numbers li span.page-numbers.current {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-}\n-\n-.list-items-wrap .page-numbers li a.page-numbers {\n-  background-color: #fff;\n-  color: #6b7280;\n-  border-color: #e5e7eb;\n-  transition: all 0.2s;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n \n .list-items-wrap .page-numbers li a.page-numbers:hover {\n-  border-color: #9ca3af;\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n   color: #1e1e1e;\n }\n \n+.list-items-wrap .page-numbers li a.page-numbers.next,\n+.list-items-wrap .page-numbers li a.page-numbers.prev {\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+.list-items-wrap .page-numbers li a.page-numbers.next:hover,\n+.list-items-wrap .page-numbers li a.page-numbers.prev:hover {\n+  background-color: #7067ED;\n+  color: #ffffff;\n+}\n+\n .list-items-wrap .page-numbers i {\n   font-size: 14px;\n }\n \n+.lp-popup-items-to-select .main {\n+  border-bottom-color: transparent !important;\n+  padding: 20px 0 0 !important;\n+}\n+\n .lp-popup-items-to-select .footer {\n-  background: #fff;\n+  padding: 16px 0 0 !important;\n   align-items: center;\n   justify-content: space-between;\n-  flex-shrink: 0;\n }\n \n .lp-popup-items-to-select .button {\n@@ -7312,12 +17661,18 @@\n   cursor: pointer;\n   border: 1px solid transparent;\n   transition: all 0.2s;\n+  background: transparent;\n+  color: #1e1e1e;\n+}\n+.lp-popup-items-to-select .button:hover {\n+  background: transparent;\n+  color: #7067ED;\n }\n \n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,\n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active) {\n-  background-color: #333;\n-  color: #fff;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n   order: 2;\n }\n \n@@ -7332,13 +17687,14 @@\n }\n \n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover {\n-  background-color: #1e1e1e;\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n }\n \n .lp-btn-count-items-selected {\n   background: transparent;\n   color: #6b7280;\n-  border: 1px dashed #d1d5db;\n+  padding: 0 !important;\n   font-size: 13px;\n   order: 1;\n }\n@@ -7364,7 +17720,7 @@\n .lp-popup-items-to-select ul.list-items-selected li {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n+  padding: 5px;\n   border-bottom: 1px solid #f5f5f5;\n   color: #1e1e1e;\n   cursor: pointer;\n@@ -7387,6 +17743,56 @@\n   background: #f5f5f5;\n }\n \n-.lp-popup-items-to-select .list-items-selected li {\n-  padding: 5px;\n+.lp-popup-items-to-select .header .header-count-items-selected {\n+  border-bottom-color: #f5f5f5;\n+}\n+\n+.lp-toast.toastify {\n+  background: #E7F6E9;\n+  color: #28A746;\n+  border-radius: 5px;\n+  box-shadow: 0 0 0;\n+  display: flex;\n+  align-items: center;\n+}\n+.lp-toast.toastify .toast-close {\n+  background: transparent !important;\n+  font-size: 0;\n+  padding-left: 12px;\n+}\n+.lp-toast.toastify .toast-close:before {\n+  content: \"\\f00d\";\n+  font-family: \"lp-icon\";\n+  font-size: 16px;\n+  color: #000;\n+  line-height: 17px;\n+}\n+.lp-toast.toastify .toast-close:hover {\n+  opacity: 1;\n+}\n+.lp-toast.toastify.error {\n+  background-color: #fee2e2;\n+  color: #dc2626;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.warning {\n+  background-color: #fbf7f2;\n+  color: #fb9422;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.info {\n+  background-color: #dbeafe;\n+  color: #1e40af;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+\n+#wp-media-modal label.screen-reader-text,\n+#wp-media-modal span.screen-reader-text {\n+  display: none;\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder.min.css\t2026-04-11 02:14:10.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-left:15px;padding-right:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}#lp-course-builder{display:block !important;min-height:100vh;background:#fff;margin:0;padding:0}#lp-course-builder .lp-course-builder_layout{display:block !important;width:100%}#lp-course-builder .learn-press-course-builder{display:flex;flex-direction:column;min-height:100vh;background:#fff;margin:0;padding:0;width:100%}#lp-course-builder .learn-press-course-builder *{box-sizing:border-box}#lp-course-builder .lp-cb-body{display:flex;flex:1;min-height:calc(100vh - 60px)}.lp-cb-top-header{position:fixed;top:0;left:0;right:0;height:60px;background:#fff;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;justify-content:space-between;padding:0 24px;z-index:1001;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-cb-top-header .lp-cb-top-header__logo{display:flex;align-items:center}.lp-cb-top-header .lp-cb-top-header__logo a{display:flex;align-items:center;gap:10px;text-decoration:none;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__logo a:hover{color:#1f74ff}.lp-cb-top-header .lp-cb-top-header__logo .dashicons{font-size:28px;width:28px;height:28px;color:#1f74ff}.lp-cb-top-header .lp-cb-top-header__title{font-size:18px;font-weight:600;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__user{display:flex;align-items:center;gap:16px}.lp-cb-top-header .lp-cb-top-header__user-info{display:flex;align-items:center;gap:10px}.lp-cb-top-header .lp-cb-top-header__user-info img{width:32px;height:32px;border-radius:50%;object-fit:cover}.lp-cb-top-header .lp-cb-top-header__user-name{font-size:14px;font-weight:500;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__user-link{font-size:13px;color:#1f74ff;text-decoration:none}.lp-cb-top-header .lp-cb-top-header__user-link:hover{text-decoration:underline}.lp-cb-top-header .lp-cb-top-header__logout{font-size:13px;color:#6b7280;text-decoration:none;padding:6px 12px;border:1px solid #f5f5f5;border-radius:4px;transition:all .2s}.lp-cb-top-header .lp-cb-top-header__logout:hover{background:#f9fafb;color:#ef4444;border-color:#ef4444}#lp-course-builder-sidebar.lp-cb-sidebar{position:fixed !important;left:0 !important;top:60px !important;bottom:0 !important;width:260px !important;background:#fff !important;color:#000 !important;display:flex !important;flex-direction:column !important;z-index:1000 !important;overflow-y:auto !important;padding:0 !important;border-radius:0 !important;border-right:1px solid #f5f5f5}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__header{display:none}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav{flex:1;padding:16px;margin:0;list-style:none;display:block !important;overflow-x:visible !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item{margin:0;padding:0;list-style:none;display:block !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{display:flex !important;align-items:center;padding:12px 20px;color:#000 !important;text-decoration:none;transition:all .2s ease;gap:12px;background:transparent !important;border:none !important;border-radius:6px !important;margin-top:6px}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover{background:#eee !important;color:#000 !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{font-size:20px;width:20px;height:20px;line-height:20px;color:inherit}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{font-size:15px;font-weight:500}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a{background:#e2edff !important;color:#1f74ff !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons{color:#1f74ff !important}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer{padding:16px 0;border-top:1px solid #f5f5f5;margin-top:auto;background:#fdfdfd}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item{display:flex;align-items:center;padding:12px 20px;color:#000;text-decoration:none;gap:12px;font-size:14px;transition:all .2s}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover{color:#1f74ff}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons{font-size:18px;width:18px;height:18px}#lp-course-builder-content.lp-cb-main{flex:1;margin-left:260px !important;margin-top:60px !important;min-height:calc(100vh - 60px);padding:0 24px !important;background:#fff !important;border-radius:0 !important;width:calc(100% - 260px) !important}html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 32px)}html:has(#wpadminbar) .lp-cb-top-header{top:32px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 32px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px) !important;min-height:calc(100vh - 60px)}@media screen and (max-width:782px){html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 46px)}html:has(#wpadminbar) .lp-cb-top-header{top:46px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 46px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px + 46px) !important;min-height:calc(100vh - 60px - 46px)}}.lp-cb-breadcrumb{padding:16px 12px;border-bottom:1px solid #f5f5f5;font-size:14px;background:#fff;border-radius:8px 8px 0 0}.lp-cb-breadcrumb .lp-cb-breadcrumb__item{color:#6b7280;text-decoration:none;transition:color .2s}.lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover{color:#1f74ff}.lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current{color:#1e1e1e;font-weight:500}.lp-cb-breadcrumb .lp-cb-breadcrumb__separator{margin:0 10px;color:#6b7280}.lp-cb-header{position:sticky;top:60px;z-index:99;display:flex;align-items:center;justify-content:space-between;padding:20px 12px;background:#fff;border-bottom:1px solid #f5f5f5}.lp-cb-header .lp-cb-header__left{display:flex;align-items:center;gap:12px}.lp-cb-header .lp-cb-header__title{margin:0;font-size:40px;font-weight:600;margin-bottom:10px;color:#1e1e1e}.lp-cb-header .lp-cb-header__actions{display:flex;gap:12px}.lp-cb-header .lp-cb-header__actions .lp-button{padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:1px solid #f5f5f5;background:#fff;color:#1e1e1e;transition:all .2s}.lp-cb-header .lp-cb-header__actions .lp-button:hover{background:#f9fafb}.lp-cb-header .lp-cb-header__actions .lp-button-primary,.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn{background:#1f74ff !important;border-color:#1f74ff !important;color:#fff !important}.lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover{background:#0047ba !important;border-color:#0047ba !important}html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 32px)}@media screen and (max-width:782px){html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 46px)}}.course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.course-status.publish{background:#dcfce7;color:#166534}.course-status.draft{background:#fef3c7;color:#92400e}.course-status.pending{background:#dbeafe;color:#1e40af}.course-status.private{background:#f3e8ff;color:#6b21a8}.course-status.trash{background:#fee2e2;color:#991b1b}.lp-cb-tabs{display:flex;border-bottom:1px solid #f5f5f5;padding:0 12px;background:#fff;gap:10;margin:0;list-style:none}.lp-cb-tabs .lp-cb-tabs__item{padding:16px 24px;color:#6b7280;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent}.lp-cb-tabs .lp-cb-tabs__item:hover{color:#1e1e1e}.lp-cb-tabs .lp-cb-tabs__item.is-active{color:#1f74ff;border-bottom-color:#1f74ff}.lp-cb-tab-content{padding:0;background:#fff;border-radius:0 0 8px 8px}.lp-cb-tab-content .cb-section__course-edit,.lp-cb-tab-content .lp-course-builder-content__section{padding:12px;background:#fff;border-radius:0;min-height:auto}.lp-cb-tab-content .cb-section__course-edit .cb-section__header,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header{display:flex;align-items:center;justify-content:space-between;padding:0 0 20px 0;margin-bottom:20px;border-bottom:1px solid #f5f5f5}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left{display:flex;align-items:center;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish{background:#dcfce7;color:#166534}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft{background:#fef3c7;color:#92400e}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending{background:#dbeafe;color:#1e40af}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action{display:flex;gap:10px}.lp-cb-tab-content .lp-meta-box__course-tab{display:flex;gap:24px}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:0 0 200px;list-style:none;margin:0;padding:0;border-right:1px solid #f5f5f5}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li{margin:0}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{display:block;padding:12px 16px;color:#6b7280;text-decoration:none;border-left:2px solid transparent;transition:all .2s}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover{color:#1e1e1e;background:#f9fafb}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{color:#1f74ff;background:rgba(31,116,255,0.05);border-left-color:#1f74ff;font-weight:500}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex:1;min-width:0}.lp-cb-footer{padding:20px 0;border-top:1px solid #f5f5f5;background:#fff;border-radius:0 0 8px 8px;margin-top:auto}.lp-cb-footer .lp-cb-footer__actions{display:flex;justify-content:flex-end;gap:12px}#lp-course-builder .lp-course-builder-content__tab{padding:0 24px;background:#fff;border-radius:8px;max-width:100%}#lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title{font-size:40px;font-weight:600;color:#1e1e1e;margin:20px 0 24px 0}.lp-cb-save-btn,#lp-course-builder .lp-button-primary{background:#1f74ff !important;border-color:#1f74ff !important;color:#fff !important;padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-save-btn:hover,#lp-course-builder .lp-button-primary:hover{background:#0047ba !important;border-color:#0047ba !important}.lp-cb-save-btn.has-changes,#lp-course-builder .lp-button-primary.has-changes{position:relative;animation:pulse-save 2s infinite}.lp-cb-save-btn.has-changes::after,#lp-course-builder .lp-button-primary.has-changes::after{content:\"\";position:absolute;top:-4px;right:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update,#lp-course-builder .cb-btn-preview,#lp-course-builder .cb-btn-darft{padding:10px 20px;font-size:14px;border-radius:6px;font-weight:500;cursor:pointer;border:0;transition:all .2s}#lp-course-builder .cb-btn-update.has-changes,#lp-course-builder .cb-btn-preview.has-changes,#lp-course-builder .cb-btn-darft.has-changes{position:relative}#lp-course-builder .cb-btn-update.has-changes::after,#lp-course-builder .cb-btn-preview.has-changes::after,#lp-course-builder .cb-btn-darft.has-changes::after{content:\"\";position:absolute;top:-4px;right:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update.loading,#lp-course-builder .cb-btn-preview.loading,#lp-course-builder .cb-btn-darft.loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-btn-update{background:#1f74ff;color:#fff}#lp-course-builder .cb-btn-update:hover{background:#0047ba}#lp-course-builder .cb-btn-update.cb-btn-primary{background:#1f74ff;color:#fff}#lp-course-builder .cb-btn-update.cb-btn-primary:hover{background:#0047ba}#lp-course-builder .cb-btn-preview{border:1px solid #e5e7eb;color:#1e1e1e;text-decoration:none;display:inline-flex;align-items:center;background:#fff}#lp-course-builder .cb-btn-preview:hover{border-color:#1f74ff;color:#1f74ff}#lp-course-builder.cb-btn-secondary{background:#fff;border:1px solid #e5e7eb;color:#1e1e1e}#lp-course-builder.cb-btn-secondary:hover{border-color:#1f74ff;color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-btn-darft{background:#e5e7eb;color:#1e1e1e}#lp-course-builder .cb-btn-darft:hover{background:#d1d5db}#lp-course-builder .cb-btn-trash{cursor:pointer;font-size:16px;background:transparent;color:#ef4444;padding:10px 20px;border-radius:6px}#lp-course-builder .cb-btn-trash:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown{position:relative;display:inline-flex}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;padding:0;background:#1f74ff;border:1px solid #1f74ff;border-left-color:#98bfe4;border-radius:0 6px 6px 0;cursor:pointer;transition:all .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#fff;transition:transform .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{border-color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons{color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{border-color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(180deg);color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:left}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#6b7280}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading{opacity:.7;pointer-events:none}.cb-header-actions-dropdown{position:relative;display:inline-flex}.cb-header-actions-dropdown .cb-btn-update{padding:10px 16px;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:all .2s;border-radius:6px 0 0 6px !important;background:#1f74ff;color:#fff}.cb-header-actions-dropdown .cb-btn-update:hover{background:#0047ba}.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary{background:#1f74ff;color:#fff}.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary:hover{background:#0047ba}.cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:auto;padding:10px 0;background:#d0e3ff;border:0;border-radius:0 6px 6px 0;cursor:pointer;transition:all .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#1f74ff;transition:transform .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(180deg)}.cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}.cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:left}.cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#6b7280}.cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}.cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}.cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}.cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}.cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#1f74ff}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}.cb-header-actions-dropdown .cb-dropdown-item.loading{opacity:.7;pointer-events:none}@keyframes pulse-save{0%,100%{box-shadow:0 0 0 0 rgba(31,116,255,0.4)}50%{box-shadow:0 0 0 8px rgba(31,116,255,0)}}@media screen and (max-width:1024px){#lp-course-builder-sidebar.lp-cb-sidebar{width:220px !important}#lp-course-builder-content.lp-cb-main{margin-left:220px !important;width:calc(100% - 220px) !important}.lp-cb-tab-content .lp-meta-box__course-tab{flex-direction:column}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:none;border-right:0;border-bottom:1px solid #f5f5f5;display:flex;overflow-x:auto}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;white-space:nowrap}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{border-left:0;border-bottom-color:#1f74ff}}@media screen and (max-width:768px){.lp-cb-top-header{padding:0 16px}.lp-cb-top-header .lp-cb-top-header__user-name,.lp-cb-top-header .lp-cb-top-header__user-link{display:none}#lp-course-builder-sidebar.lp-cb-sidebar{transform:translateX(-100%);transition:transform .3s ease}#lp-course-builder-sidebar.lp-cb-sidebar.is-open{transform:translateX(0)}#lp-course-builder-content.lp-cb-main{margin-left:0 !important;width:100% !important}.lp-cb-header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-header .lp-cb-header__actions{width:100%;justify-content:flex-end}.lp-cb-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.lp-cb-tabs .lp-cb-tabs__item{white-space:nowrap;padding:12px 16px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action{width:100%;flex-wrap:wrap}}#lp-course-builder .lp-cb-tab__title{font-size:28px;font-weight:600;margin-bottom:20px;color:#1e1e1e}#lp-course-builder .cb-tab-course__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-search-form{position:relative;display:flex;align-items:center;background:#f5f5f5;border-radius:6px;padding:12px 16px;gap:6px;margin-bottom:0;border:1px solid #e5e7eb}#lp-course-builder .lp-icon-search{font-size:16px;color:#6b7280;flex-shrink:0}#lp-course-builder .cb-input-search-course{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-course::placeholder{color:#999}#lp-course-builder .cb-search-btn{cursor:pointer;border:0;background:0}#lp-course-builder .cb-btn-add-new{display:inline-flex;align-items:center;background-color:#1e1e1e;color:#fff;padding:10px 20px;border-radius:6px;text-decoration:none;font-size:14px;font-weight:500;transition:background-color .2s}#lp-course-builder .cb-btn-back a{text-decoration:none}#lp-course-builder .cb-btn-add-new:hover{background-color:#333}#lp-course-builder .cb-list-course{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0;margin:0}#lp-course-builder .course{background:#fff;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.06);border:1px solid #e5e7eb;transition:all .3s}#lp-course-builder .course:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1)}#lp-course-builder .course-item{display:flex;gap:20px;padding:16px;height:100%}#lp-course-builder .course-thumbnail{width:280px;min-width:280px;border-radius:8px;aspect-ratio:16\u002F10;overflow:hidden;background-color:#f5f5f5}#lp-course-builder .course-img{width:100%;height:100%}#lp-course-builder .course-img img{width:100%;height:100%;object-fit:cover}#lp-course-builder .course-content{flex:1;display:flex;flex-direction:column}#lp-course-builder .wap-course-title{margin-top:0;margin-bottom:12px}#lp-course-builder .wap-course-title a{text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .course-permalink{text-decoration:none;color:#1e1e1e;font-size:18px;font-weight:600;display:block;transition:color .2s}#lp-course-builder .course-permalink:hover{color:#3b82f6}#lp-course-builder .course-title{text-decoration:none;line-height:1.4}#lp-course-builder .course-featured{display:inline-block;background-color:#ffd700;color:#333;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;margin-bottom:10px;text-transform:uppercase}#lp-course-builder .course-instructor__wrapper{display:flex;gap:5px;margin-bottom:15px;font-size:13px;color:#666}#lp-course-builder .course-instructor-category>div{display:flex;gap:5px;align-items:center}#lp-course-builder .course-instructor-category label{color:#999}#lp-course-builder .course-instructor a,#lp-course-builder .course-categories a{color:#3b82f6;text-decoration:none}#lp-course-builder .course-instructor a:hover,#lp-course-builder .course-categories a:hover{text-decoration:underline}#lp-course-builder .course-wrap-meta{display:flex;flex-wrap:wrap;gap:15px;margin-bottom:15px;padding-bottom:15px}#lp-course-builder .instructor-display-name{font-weight:400}#lp-course-builder .meta-item{font-size:14px;color:#666;display:flex;align-items:center;gap:5px}#lp-course-builder .course-bottom{margin-top:auto}#lp-course-builder .course-price{display:block}#lp-course-builder .course-item-price .free{color:#10b981;font-weight:600;font-size:16px}#lp-course-builder .course-item-price .price{color:#3b82f6;font-weight:700;font-size:18px}#lp-course-builder .highlight-new-course{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .course-action{position:relative;display:flex;align-items:flex-start;gap:20px}#lp-course-builder .course-action-editor{padding:15px 0 15px 20px}#lp-course-builder .course-action-expanded{cursor:pointer;padding:15px 20px 15px 0}#lp-course-builder .course-action-expanded svg{width:24px;height:24px}#lp-course-builder .course-action-expanded__items{display:none;position:absolute;min-width:160px;top:0;right:0;transform:translate(100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500;z-index:100}#lp-course-builder .course-action-expanded__items.active{display:flex !important}#lp-course-builder .course-action-expanded__items .course-action-expanded__view,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}#lp-course-builder .course-action-expanded__items .course-action-expanded__view:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{color:#ef4444}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .course-action-expanded:hover+.course-action-expanded__items,#lp-course-builder .course-action-expanded__items:hover{display:flex !important}#lp-course-builder .course-action .wap-course-title{margin:0}#lp-course-builder .course-action .course-permalink{color:#3b82f6;font-size:14px;font-weight:500}#lp-course-builder .course-action .course-permalink:hover{text-decoration:underline}#lp-course-builder .btn-edit-course{display:flex;align-items:center;text-decoration:none;font-size:14px;font-weight:500;border-radius:6px;padding:8px 16px;gap:6px;border:1px solid #e5e7eb;background:#fff;color:#1e1e1e;transition:all .2s}#lp-course-builder .btn-edit-course:hover{background:#f5f5f5;border-color:#d1d5db}#lp-course-builder .btn-edit-course svg{width:1rem;height:1rem}#lp-course-builder .course-status{display:inline-flex}#lp-course-builder .course-status span{font-size:12px;padding:4px 12px;border-radius:20px;font-weight:500;text-transform:capitalize}#lp-course-builder .course-status:not(.publish):not(.trash) span{background-color:#fef3c7;color:#92400e}#lp-course-builder .course-status.publish span{color:#166534;background-color:#dcfce7}#lp-course-builder .course-status.trash span{color:#991b1b;background-color:#fee2e2}#lp-course-builder .learn-press-pagination{margin-top:40px;display:flex;justify-content:center}#lp-course-builder .page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}#lp-course-builder .page-numbers li{display:inline-block}#lp-course-builder .page-numbers a,#lp-course-builder .page-numbers span{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border:1px solid #e5e7eb;border-radius:6px;text-decoration:none;color:#333;font-size:14px;transition:all .2s;background:#fff}#lp-course-builder .page-numbers a:hover{background-color:#f5f5f5;border-color:#d1d5db}#lp-course-builder .page-numbers .current{background-color:#1e1e1e;color:#fff;border-color:#1e1e1e;font-weight:600}#lp-course-builder .page-numbers .next,#lp-course-builder .page-numbers .prev{font-weight:600}#lp-course-builder #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-course-builder .field-material__label{width:150px;max-width:150px;min-width:150px;margin-right:11px}#lp-course-builder .lp-material--field-wrap{display:flex;align-items:center;gap:11px;margin-top:11px}#lp-course-builder .lp-material--field-external-link,#lp-course-builder .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material--field-method{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material-save-field,#lp-course-builder .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-course-builder .lp-material--upload-wrap label{cursor:pointer;width:100%;max-width:200px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-left:56px}#lp-course-builder .lp-material--field-upload{display:none}#lp-course-builder .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-course-builder .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-course-builder .lp-material--upload-wrap label::before{content:\"📁 \";margin-right:5px}#lp-course-builder .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}#lp-course-builder .lp-material--table th,#lp-course-builder .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:left}#lp-course-builder .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}#lp-course-builder .lp-material--table td{font-size:14px;color:#1e1e1e}#lp-course-builder .lp-material--table tr:last-child td{border-bottom:0}#lp-course-builder .lp-material--table tr:hover td{background-color:#f9fafb}#lp-course-builder .lp-material--table thead.hidden{display:none}#lp-course-builder .ts-control{padding:8px 8px 8px 8px !important}@media(max-width:1024px){#lp-course-builder .cb-list-course{gap:15px}#lp-course-builder .course-thumbnail{width:200px;min-width:200px}}@media(max-width:768px){#lp-course-builder .cb-tab-course__action{flex-direction:column;gap:16px;align-items:stretch}#lp-course-builder .cb-search-form{width:100%}#lp-course-builder .cb-btn-add-new{text-align:center;justify-content:center}#lp-course-builder .course-item{flex-direction:column}#lp-course-builder .course-thumbnail{width:100%;min-width:100%}#lp-course-builder .cb-list-course{grid-template-columns:1fr}}#lp-course-builder .cb-list-quiz{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-quiz__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-quiz{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-quiz::placeholder{color:#999}#lp-course-builder .cb-tab-quiz__action,#lp-course-builder .courses-builder__quiz-tab{width:calc(100% - 140px)}#lp-course-builder .quiz-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .quiz-action-expanded{cursor:pointer;padding:15px 20px 15px 0}#lp-course-builder .quiz-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-quiz{display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;background-color:#fff;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-quiz svg{width:1rem;height:1rem}#lp-course-builder .quiz-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-quiz{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .quiz-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .quiz-content__left{display:flex;gap:15px}#lp-course-builder .quiz-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .quiz__preview svg{height:20px;width:20px}#lp-course-builder .wap-quiz-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-quiz-title button{background-color:#fff;border:0;font-size:20px;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .quiz-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .quiz-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .quiz-assigned-courses{max-width:300px;margin-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .quiz-assigned-courses a{text-decoration:none}#lp-course-builder .quiz-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;right:0;transform:translate(100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .quiz-action-expanded:hover+.quiz-action-expanded__items,#lp-course-builder .quiz-action-expanded__items:hover{display:flex !important}#lp-course-builder .cb-list-question{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-question__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-question{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-question::placeholder{color:#999}#lp-course-builder .cb-tab-question__action,#lp-course-builder .courses-builder__question-tab{width:calc(100% - 140px)}#lp-course-builder .question-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .question-action-expanded{cursor:pointer;padding:15px 20px 15px 0}#lp-course-builder .question-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-question{background-color:#fff;display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-question svg{width:1rem;height:1rem}#lp-course-builder .question-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-question{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .question-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .question-content__left{display:flex;gap:15px}#lp-course-builder .question-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .question__preview svg{height:20px;width:20px}#lp-course-builder .wap-question-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-question-title button{font-size:20px;background:#fff;border:0;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .question-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .question-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .question-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .question-assigned-quizzes{max-width:300px;margin-right:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .question-assigned-quizzes a{text-decoration:none}#lp-course-builder .question-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;right:0;transform:translate(100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .question-action-expanded:hover+.question-action-expanded__items,#lp-course-builder .question-action-expanded__items:hover{display:flex !important}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-content{display:flex;gap:40px}.lp-course-builder-content__section .cb-course-edit-column--left{flex:0 0 320px;max-width:320px}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1;min-width:0}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__label .required{color:#ef4444}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-permalink{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-permalink__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-permalink__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-permalink__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-categories__label,.lp-course-builder-content__section .cb-course-edit-tags__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #ddd;padding:16px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper,.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-terms__checkbox,.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-terms__checkbox:hover label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox],.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:hover,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:5px;top:2px;width:6px;height:10px;border:solid #1e1e1e;border-width:0 2px 2px 0;transform:rotate(45deg)}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:focus,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled+label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-terms__checkbox label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-dropzone{width:100%;min-height:180px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-course-builder-content__section .cb-featured-image-dropzone:hover{border-color:#1f74ff;background:rgba(31,116,255,0.03)}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image{border-style:solid;border-color:#e5e7eb;padding:0}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image:hover{border-color:#1f74ff}.lp-course-builder-content__section .cb-featured-image-dropzone.dragover{border-color:#1f74ff;background:rgba(31,116,255,0.05)}.lp-course-builder-content__section .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-course-builder-content__section .cb-featured-image-icon{display:block;font-size:36px;margin-bottom:12px;opacity:.6}.lp-course-builder-content__section .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-course-builder-content__section .cb-featured-image-link{color:#1f74ff;text-decoration:none;font-weight:500}.lp-course-builder-content__section .cb-featured-image-link:hover{text-decoration:underline}.lp-course-builder-content__section .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-course-builder-content__section .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-change-featured-image{padding:6px 14px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-change-featured-image:hover{background:#1f74ff;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image{padding:6px 14px;border:1px solid #ef4444;background:#fff;color:#ef4444;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-set-featured-image{padding:8px 16px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-set-featured-image:hover{background:#1f74ff;color:#fff}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-category__btn-add-new,.lp-course-builder-content__section .cb-course-edit-tag__btn-add-new,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel,.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel{font-size:16px;margin-top:15px;padding:5px 0;cursor:pointer;border:0;background:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;gap:10px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{background:#1e1e1e;color:white;border-radius:5px;padding:5px 20px;border:0}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-course-builder-content__section .cb-course-edit-content{flex-direction:column}.lp-course-builder-content__section .cb-course-edit-column--left{flex:1;max-width:100%}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{display:flex;gap:40px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:0 0 320px;max-width:320px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1;min-width:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required{color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #ddd;padding:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox:hover label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:5px;top:2px;width:6px;height:10px;border:solid #1e1e1e;border-width:0 2px 2px 0;transform:rotate(45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled+label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone{width:100%;min-height:180px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover{border-color:#1f74ff;background:rgba(31,116,255,0.03)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image{border-style:solid;border-color:#e5e7eb;padding:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image:hover{border-color:#1f74ff}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover{border-color:#1f74ff;background:rgba(31,116,255,0.05)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon{display:block;font-size:36px;margin-bottom:12px;opacity:.6}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link{color:#1f74ff;text-decoration:none;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image{padding:6px 14px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover{background:#1f74ff;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image{padding:6px 14px;border:1px solid #ef4444;background:#fff;color:#ef4444;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#1f74ff;color:#fff}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-add-new,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-add-new,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel{font-size:16px;margin-top:15px;padding:5px 0;cursor:pointer;border:0;background:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:10px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{background:#1e1e1e;color:white;border-radius:5px;padding:5px 20px;border:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:1;max-width:100%}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__header{display:none !important}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #e5e7eb;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-right:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-left:3px solid transparent;margin-left:-3px}ul.lp-meta-box__course-tab__tabs li a i{display:none}ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}ul.lp-meta-box__course-tab__tabs li.active a,ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#3b82f6;font-weight:600;border-left-color:#3b82f6;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 40px;background:#fff}@media(max-width:768px){.lp-meta-box__course-tab{flex-direction:column}ul.lp-meta-box__course-tab__tabs{width:100%;border-right:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:12px;background:#f9fafb}ul.lp-meta-box__course-tab__tabs li{flex-shrink:0;padding:0 4px}ul.lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;margin-left:0;white-space:nowrap}ul.lp-meta-box__course-tab__tabs li.active a{border-left:0;border-bottom-color:#3b82f6}}#lp-course-builder-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:28px 0 0;color:#1f2937;max-width:100%;box-sizing:border-box}#lp-course-builder-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f5f5f5}#lp-course-builder-content #lp-course-edit-curriculum .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,#lp-course-builder-content #lp-course-edit-curriculum .count-sections,#lp-course-builder-content #lp-course-edit-curriculum .total-items{background:#f5f5f5;color:#1e1e1e;font-size:12px;font-weight:600;padding:6px 18px;border-radius:12px;margin-left:10px}#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;margin-left:auto;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections{border:0}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:16px;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-right:12px;font-size:16px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-left:8px;cursor:pointer;font-weight:500}#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{border-bottom-color:#f3f4f6;border-radius:8px 8px 0 0}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover,#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-left:15px;color:#777;cursor:pointer}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}#lp-course-builder-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#f9fafb;border-radius:0 0 8px 8px;border-top:unset}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover{border-color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type{width:24px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center;margin-right:12px;opacity:.8;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f119\";font-family:dashicons;font-size:20px}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f469\";font-family:dashicons;font-size:20px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:underline}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:8px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a:hover{color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover{color:#ef4444}#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}#lp-course-builder-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum button,#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-left:auto;border-style:dashed !important}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:15px}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#1e1e1e;background:#fff}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;transition:border .2s}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#1e1e1e;color:#fff;border:0;padding:12px 24px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#333}#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden{display:none !important}.lp-cb-tab-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:28px 0 0;color:#1f2937;max-width:100%;box-sizing:border-box}.lp-cb-tab-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f5f5f5}.lp-cb-tab-content #lp-course-edit-curriculum .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .section-items-counts,.lp-cb-tab-content #lp-course-edit-curriculum .count-sections,.lp-cb-tab-content #lp-course-edit-curriculum .total-items{background:#f5f5f5;color:#1e1e1e;font-size:12px;font-weight:600;padding:6px 18px;border-radius:12px;margin-left:10px}.lp-cb-tab-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;margin-left:auto;padding:5px}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections{border:0}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:16px;transition:all .2s ease}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}.lp-cb-tab-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}.lp-cb-tab-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-right:12px;font-size:16px}.lp-cb-tab-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-left:8px;cursor:pointer;font-weight:500}.lp-cb-tab-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{border-bottom-color:#f3f4f6;border-radius:8px 8px 0 0}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:hover,.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down,.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-left:15px;color:#777;cursor:pointer}.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}.lp-cb-tab-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#f9fafb;border-radius:0 0 8px 8px;border-top:unset}.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}.lp-cb-tab-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type,.lp-cb-tab-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type:hover,.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover{border-color:#9ca3af}.lp-cb-tab-content #lp-course-edit-curriculum .item-ico-type{width:24px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center;margin-right:12px;opacity:.8;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f119\";font-family:dashicons;font-size:20px}.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f469\";font-family:dashicons;font-size:20px}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:underline}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:8px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a:hover{color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover{color:#ef4444}.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum button,.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button,.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-left:auto;border-style:dashed !important}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:15px}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#1e1e1e;background:#fff}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;transition:border .2s}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#1e1e1e;color:#fff;border:0;padding:12px 24px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#333}.lp-cb-tab-content #lp-course-edit-curriculum .lp-hidden{display:none !important}.lp-option-disabled{pointer-events:none;opacity:.5}#taxonomy-course_category.categorydiv{border:none !important;box-shadow:none !important;background:transparent !important;margin:0 !important}#taxonomy-course_category.categorydiv .category-tabs{display:flex !important;gap:20px;margin:0 0 15px 0 !important;padding:0 !important;border-bottom:2px solid #f0f0f0}#taxonomy-course_category.categorydiv .category-tabs li{display:inline-block !important;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv .category-tabs li a{text-decoration:none;font-size:14px;font-weight:600;color:#9ca3af;padding-bottom:8px;display:block;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}#taxonomy-course_category.categorydiv .category-tabs li.tabs a,#taxonomy-course_category.categorydiv .category-tabs li:hover a{color:#1e1e1e;border-bottom-color:#1e1e1e}#taxonomy-course_category.categorydiv .tabs-panel{border:none !important;box-shadow:none !important;padding:5px 0 !important;background:transparent !important;max-height:300px !important;overflow-y:auto !important;display:none}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar{width:6px}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}#taxonomy-course_category.categorydiv ul.categorychecklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 30px;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv ul.categorychecklist li{margin:0 !important;padding:0 !important;width:100%;list-style:none}#taxonomy-course_category.categorydiv ul.children{display:none !important;margin-left:20px !important;margin-top:5px !important;padding-left:10px !important;border-left:2px solid #e5e7eb;transition:all .3s ease}#taxonomy-course_category.categorydiv ul.children li{margin-bottom:5px !important}#taxonomy-course_category.categorydiv li.children-visible>ul.children{display:block !important}#taxonomy-course_category.categorydiv input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;margin-right:8px !important;position:relative}#taxonomy-course_category.categorydiv input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::after{content:\"\";position:absolute;left:4px;top:1px;width:5px;height:9px;border:solid #1e1e1e;border-width:0 2px 2px 0;transform:rotate(45deg)}#taxonomy-course_category.categorydiv label{display:inline-flex !important;align-items:center;width:auto !important;font-size:14px;color:#4b5563;cursor:pointer;line-height:1.5}#course_category-adder{margin-top:20px !important;border-top:1px solid #f0f0f0;padding-top:15px}#course_category-add-toggle{text-decoration:none;font-weight:600;font-size:14px;color:#1e1e1e;display:flex;align-items:center}#course_category-add-toggle:hover{color:#2563eb}#course_category-add{display:none;margin-top:15px}#course_category-add label{display:none !important}#course_category-add input[type=text],#course_category-add select{width:100%;max-width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;margin-bottom:10px;font-size:14px;height:40px}#course_category-add-submit{background:#1e1e1e;color:#fff;border:0;padding:8px 20px;border-radius:6px;font-weight:500;cursor:pointer}#course_category-add-submit:hover{background:#333}.lp-cat-toggle{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-left:5px;cursor:pointer;color:#9ca3af;transition:transform .2s ease,color .2s;font-size:12px}.lp-cat-toggle::before{content:\"\\f347\";font-family:dashicons}.lp-cat-toggle:hover{color:#1e1e1e;background-color:#f3f4f6;border-radius:50%}li.children-visible>label>.lp-cat-toggle{transform:rotate(180deg)}#lp-course-builder .cb-list-lesson{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-lesson__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-lesson{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-lesson::placeholder{color:#999}#lp-course-builder .cb-tab-lesson__action,#lp-course-builder .courses-builder__lesson-tab{width:calc(100% - 140px)}#lp-course-builder .lesson-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .lesson-action-expanded{cursor:pointer;padding:15px 20px 15px 0}#lp-course-builder .lesson-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-lesson{display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;background-color:#fff;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-lesson svg{width:1rem;height:1rem}#lp-course-builder .lesson-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-lesson{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .lesson-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .lesson-content__left{display:flex;gap:15px}#lp-course-builder .lesson-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .lesson__preview svg{height:20px;width:20px}#lp-course-builder .wap-lesson-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-lesson-title button{font-size:20px;background:#fff;border:0;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .lesson-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .lesson-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .lesson-assigned-courses{max-width:300px;margin-right:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lesson-assigned-courses a{text-decoration:none}#lp-course-builder .lesson-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;right:0;transform:translate(100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .lesson-action-expanded:hover+.lesson-action-expanded__items,#lp-course-builder .lesson-action-expanded__items:hover{display:flex !important}.lp-course-builder-content__section .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .lesson-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .lesson-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__lesson-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-lesson-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .lesson-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-right:0 !important}.lp-course-builder-content__section .lesson-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .lesson-assigned-courses a,.lp-course-builder-content__section .lesson-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-lesson-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-lesson-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-lesson-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-lesson-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-lesson-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__lesson{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__lesson{background:#dc2626;color:#fff}.lp-course-builder-content__section .field-material__label{width:unset;max-width:unset;min-width:unset}.lp-course-builder-content__section .lp-material-btn-wrap{display:flex;gap:12px}.lp-course-builder-content__section #btn-lp--add-material,.lp-course-builder-content__section #btn-lp--save-material{padding:8px 25px;border-radius:5px;background:#fff;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db}.lp-course-builder-content__section table.lp-material--table thead.hidden{display:none}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}.lp-course-builder-content__section .cb-section__quiz-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .lp-question-type-label{background:#e5e7eb;color:#4b5563;font-size:11px;font-weight:600;text-transform:uppercase;padding:3px 8px;border-radius:4px;margin-right:10px;white-space:nowrap}.lp-course-builder-content__section .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px}.lp-course-builder-content__section .lp-question-data-edit-header label{font-size:13px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.5px}.lp-course-builder-content__section .lp-answers-config{margin-top:15px}.lp-course-builder-content__section .lp-question-by-type{padding:15px;border-radius:12px;border:1px solid #dcdcde}.lp-course-builder-content__section .lp-question-choice-header{display:flex;justify-content:space-between;padding:12px 25px 10px 25px;font-size:12px;color:#1e1e1e;font-weight:600;text-transform:uppercase;margin-bottom:16px;background:#f5f5f5}.lp-course-builder-content__section .lp-question-answer-item{display:flex;align-items:center;margin-bottom:12px;border-radius:4px;padding:10px;border:1px solid #f5f5f5;border-top:1px solid #f5f5f5;position:relative}.lp-course-builder-content__section .lp-question-answer-item .drag{color:#d1d5db;cursor:move;margin-right:8px;font-size:14px}.lp-course-builder-content__section input.lp-question-answer-title-input{flex-grow:1;padding:8px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#374151;transition:border .2s;margin-right:10px}.lp-course-builder-content__section input.lp-question-answer-title-input:focus{border-color:#9ca3af;outline:0}.lp-course-builder-content__section .lp-btn-delete-question-answer{color:#ef4444;cursor:pointer;opacity:0;transition:opacity .2s;margin-right:10px;font-size:16px}.lp-course-builder-content__section .lp-question-answer-item:hover .lp-btn-delete-question-answer{opacity:1}.lp-course-builder-content__section .lp-question-answer-item input[type=radio],.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;outline:0;transition:all .2s;flex-shrink:0}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]{border-radius:4px}.lp-course-builder-content__section .lp-question-answer-item input:checked{border-color:#10b981}.lp-course-builder-content__section .lp-question-answer-item input:checked::after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:8px;height:8px;background:#10b981;border-radius:50%}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked{background:#10b981}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked::after{width:5px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg);background:transparent;border-radius:0}.lp-course-builder-content__section .lp-question-answer-item-add-new{display:flex;align-items:center;margin-top:10px;padding-left:10px;border-radius:4px;border:1px solid #f5f5f5;border-top:1px solid #f5f5f5}.lp-course-builder-content__section .lp-question-answer-item-add-new .lp-icon-plus{color:#9ca3af;margin-right:8px}.lp-course-builder-content__section input.lp-question-answer-title-new-input{flex-grow:1;border:1px dashed #d1d5db;padding:8px 12px;border-radius:6px;font-size:13px;margin-right:10px}.lp-course-builder-content__section input.lp-question-answer-title-new-input:focus{border:1px solid #9ca3af;outline:0}.lp-course-builder-content__section .lp-question-fib-buttons{flex-wrap:wrap}.lp-course-builder-content__section .lp-question-fib-buttons button,.lp-course-builder-content__section .lp-btn-add-question-answer{background:#fff;color:#374151;border:1px solid #d1d5db;padding:7px 14px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;min-width:fit-content}.lp-course-builder-content__section .lp-question-fib-buttons button.lp-btn-fib-save-content{border-color:#1e1e1e;background:#1e1e1e;color:#fff}.lp-course-builder-content__section .lp-btn-add-question-answer:hover{background:#e5e7eb;color:#1e1e1e}.lp-course-builder-content__section .lp-question-field-settings{padding:10px 20px;display:flex;flex-wrap:wrap;gap:12px;align-items:center;gap:6px 12px}.lp-course-builder-content__section .lp-question-field-settings__label label{font-size:13px;font-weight:600;color:#4b5563;display:block;margin-bottom:5px}.lp-course-builder-content__section .lp-question-field-settings input[name=lp-question-point-input]{width:80px;padding:6px 10px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px}.lp-course-builder-content__section .lp-question-fib-desc,.lp-course-builder-content__section .lp-question-field-settings___desc{font-size:12px;color:#9ca3af;margin-top:4px;font-style:italic}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:12px}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question.lp-icon-plus{color:#9ca3af}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question select{height:38px}.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input{flex-grow:1;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;min-width:200px}.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-course-builder-content__section select.lp-question-type-new{padding:0 30px 0 12px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#374151;cursor:pointer}.lp-course-builder-content__section button.lp-btn-add-question{background-color:#1e1e1e;color:#fff;border:0;padding:10px 20px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}.lp-course-builder-content__section button.lp-btn-add-question:hover{background-color:#1e1e1e}.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select{background-color:#fff;color:#374151;border:1px solid #d1d5db;padding:10px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;min-width:fit-content}.lp-course-builder-content__section [class*=lp-icon-]:hover{color:#1e1e1e}.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select:hover{background-color:#f3f4f6;border-color:#9ca3af}.lp-course-builder-content__section .lp-question-fib-option-header{background:#f5f5f5}.lp-course-builder-content__section .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:16px}.lp-course-builder-content__section .lp-btn-fib-option-delete:hover{color:#ef4444}.lp-course-builder-content__section .lp-question-fib-option-detail{font-size:16px}.lp-course-builder-content__section .lp-question-fib-option-detail>label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:flex-end;align-items:center}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]{order:1;margin-top:2px;appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked{background:#3b82f6}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked:before{left:22px}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*{display:flex;gap:8px;font-size:14px;font-weight:500}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:space-between;align-items:self-start}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input{margin-top:3px}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;font-weight:400}.lp-course-builder-content__section .lp-section-collapse{border-radius:6px}.lp-course-builder-content__section .cb-quiz-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .quiz-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-right:0 !important}.lp-course-builder-content__section .quiz-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .quiz-assigned-courses a,.lp-course-builder-content__section .quiz-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.lp-course-builder-content__section .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .quiz-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .quiz-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-quiz-edit-title{margin-bottom:24px}.lp-course-builder-content__section .cb-quiz-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-quiz-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-quiz-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-quiz-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-quiz-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}#lp-course-builder-content .lp-edit-quiz-wrap{background-color:#fff;border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,0.05);padding:30px;color:#1f2937;margin-top:20px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{border:0}#lp-course-builder-content .lp-edit-quiz-wrap .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f3f4f6}#lp-course-builder-content .lp-edit-quiz-wrap .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .total-items{background:#f3f4f6;color:#6b7280;font-size:12px;font-weight:600;padding:4px 10px;border-radius:20px;margin-left:10px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all{cursor:pointer;color:#9ca3af;margin-left:auto;padding:5px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item{background:#fff;border:1px solid #e5e7eb;border-radius:100px;margin-bottom:12px;transition:all .2s ease}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-cancel-update-question-title{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-remove-question{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px -1px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head{display:flex;align-items:center;padding:12px 16px;border-radius:8px;background-color:#fff}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom:1px solid #f3f4f6;border-radius:8px 8px 0 0;background-color:#f9fafb}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .drag{color:#9ca3af;cursor:grab;margin-right:10px;font-size:16px}#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1f2937;padding:6px 10px;border-radius:6px;transition:all .2s;margin-right:10px}#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:hover,#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle{color:#9ca3af;cursor:pointer;padding:6px;font-size:16px;text-decoration:none;display:flex;align-items:center;transition:color .2s}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title:hover{color:#3b82f6}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question:hover{color:#ef4444}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .button{font-size:12px;padding:4px 10px;margin-right:5px;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-edit-main{padding:20px;background:#fff;border-radius:0 0 8px 8px}#lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner{font-size:12px}.lp-course-builder-content__section .question-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .question-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .question-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__question-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-question-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .question-assigned-quizzes{display:flex;flex-direction:column;align-items:end;margin-right:0 !important}.lp-course-builder-content__section .question-assigned-quizzes .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .question-assigned-quizzes a,.lp-course-builder-content__section .question-assigned-quizzes span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-question-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-question-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-question-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-question-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-question-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__question{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__question{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}#lp-builder-popup-container{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:99999}#lp-builder-popup-container.active{display:block}#lp-builder-popup-container #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-builder-popup-container .field-material__label{width:150px;max-width:150px;min-width:150px;margin-right:11px}#lp-builder-popup-container .lp-material--field-wrap{display:flex;align-items:center;gap:11px;margin-top:11px}#lp-builder-popup-container .lp-material--field-external-link,#lp-builder-popup-container .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material--field-method{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material-save-field,#lp-builder-popup-container .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-builder-popup-container .lp-material--upload-wrap label{cursor:pointer;width:100%;max-width:200px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-left:56px}#lp-builder-popup-container .lp-material--field-upload{display:none}#lp-builder-popup-container .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-builder-popup-container .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-builder-popup-container .lp-material--upload-wrap label::before{content:\"📁 \";margin-right:5px}body.lp-popup-open{overflow:hidden}.lp-builder-popup-overlay{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(3px);z-index:1}.lp-builder-popup{position:fixed;inset:5vh 5% 5vh 5%;width:auto;max-width:900px;max-height:none;height:auto;margin:auto;background-color:#fff;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2);z-index:2;display:flex;flex-direction:column;overflow:hidden;transition:inset .3s cubic-bezier(0.4,0,0.2,1),border-radius .3s cubic-bezier(0.4,0,0.2,1),max-width .3s cubic-bezier(0.4,0,0.2,1)}.lp-builder-popup--fullscreen{inset:0;max-width:100%;border-radius:0}.lp-builder-popup--loading{width:auto;max-width:none;padding:40px 60px;text-align:center}.lp-builder-popup__loader{display:flex;flex-direction:column;align-items:center;gap:15px}.lp-builder-popup__loader .lp-loading-circle{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#1e1e1e;border-radius:50%;animation:lp-popup-spin .8s linear infinite}.lp-builder-popup__loader span{color:#666;font-size:14px}.lp-builder-popup__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid #e5e7eb;background-color:#fff;flex-shrink:0}.lp-builder-popup__header-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__header-actions{display:flex;align-items:center;gap:8px}.lp-builder-popup__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-builder-popup__resize{background:0;border:0;font-size:16px;color:#9ca3af;cursor:pointer;padding:8px 10px;line-height:1;transition:all .2s;border-radius:4px;display:flex;align-items:center;justify-content:center}.lp-builder-popup__resize:hover{color:#1e1e1e;background-color:#f3f4f6}.lp-builder-popup__resize i{font-size:16px}.lp-builder-popup__close{background:0;border:0;font-size:24px;color:#9ca3af;cursor:pointer;padding:5px 10px;line-height:1;transition:color .2s;border-radius:4px}.lp-builder-popup__close:hover{color:#d63638;background-color:#fee2e2}.lp-builder-popup__body{flex:1;overflow-y:auto;padding:0;background-color:#fff}.lp-builder-popup__tabs{display:flex;list-style:none;margin:0;padding:0 24px;border-bottom:1px solid #e5e7eb;background-color:#fff;gap:8px}.lp-builder-popup__tab{padding:14px 20px;cursor:pointer;font-size:14px;font-weight:600;color:#6b7280;border-bottom:2px solid transparent;transition:all .2s;margin-bottom:-1px}.lp-builder-popup__tab:hover{color:#1e1e1e}.lp-builder-popup__tab.active{color:#1e1e1e;border-bottom-color:#1e1e1e}.lp-builder-popup__tab-content{padding:24px}.lp-builder-popup__tab-pane{display:none}.lp-builder-popup__tab-pane.active{display:block}.lp-builder-popup__notice{padding:15px;background-color:#f0f6fc;border-left:4px solid #3b82f6;color:#1e1e1e;margin:0 0 20px;border-radius:0 6px 6px 0}.lp-builder-popup__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 24px;border-top:1px solid #e5e7eb;background-color:#fff;flex-shrink:0}.lp-builder-popup__footer-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__footer-right{display:flex;align-items:center;gap:12px}.lp-builder-popup__btn{padding:8px 25px;border-radius:5px;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s;border:0}.lp-builder-popup__btn--cancel{background-color:#f3f4f6;color:#1a1a1a;border:1px solid #d1d5db}.lp-builder-popup__btn--cancel:hover{background-color:#e5e7eb}.lp-builder-popup__btn--save{background-color:#1e1e1e;color:#fff}.lp-builder-popup__btn--save:hover{background-color:#333}.lp-builder-popup__btn--save:disabled{opacity:.6;cursor:not-allowed}.lp-builder-popup__btn--trash{background-color:#dc2626;color:#fff}.lp-builder-popup__btn--trash:hover{background-color:#b91c1c}.lp-builder-popup .cb-button{padding:8px 25px;border-radius:5px;background:#f3f4f6;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup .cb-button:hover{background:#e5e7eb}.lp-builder-popup .cb-button.cb-btn-update__lesson,.lp-builder-popup .cb-button.cb-btn-update__question,.lp-builder-popup .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-update__lesson:hover,.lp-builder-popup .cb-button.cb-btn-update__question:hover,.lp-builder-popup .cb-button.cb-btn-update__quiz:hover{background:#333}.lp-builder-popup .cb-button.cb-btn-trash__lesson,.lp-builder-popup .cb-button.cb-btn-trash__question,.lp-builder-popup .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-trash__lesson:hover,.lp-builder-popup .cb-button.cb-btn-trash__question:hover,.lp-builder-popup .cb-button.cb-btn-trash__quiz:hover{background:#b91c1c}.lp-builder-popup .cb-button.cb-btn-publish__lesson,.lp-builder-popup .cb-button.cb-btn-publish__question,.lp-builder-popup .cb-button.cb-btn-publish__quiz{background:#1e1e1e;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-publish__lesson:hover,.lp-builder-popup .cb-button.cb-btn-publish__question:hover,.lp-builder-popup .cb-button.cb-btn-publish__quiz:hover{background:#333}.lp-builder-popup .lesson-status,.lp-builder-popup .question-status,.lp-builder-popup .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#f3f4f6;border-radius:5px;text-transform:capitalize}.lp-builder-popup .lesson-status.publish,.lp-builder-popup .question-status.publish,.lp-builder-popup .quiz-status.publish{color:#fff;background:#1e1e1e}.lp-builder-popup .lesson-status.draft,.lp-builder-popup .question-status.draft,.lp-builder-popup .quiz-status.draft{color:#1a1a1a;background:#fbbf24}.lp-builder-popup .lesson-status.trash,.lp-builder-popup .question-status.trash,.lp-builder-popup .quiz-status.trash{color:#fff;background-color:#dc2626}.lp-builder-popup .cb-section__header{display:none}.lp-builder-popup .lp-meta-box,.lp-builder-popup .lp-meta-box-wrap{margin:0;background:transparent}.lp-builder-popup .lp-meta-box .lp-meta-box__inner,.lp-builder-popup .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{display:flex;align-items:center;gap:11px;margin:0;padding:0}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-builder-popup .form-field input[type=number]:focus,.lp-builder-popup .form-field input[type=text]:focus,.lp-builder-popup .form-field input[type=datetime-local]:focus,.lp-builder-popup .lp-meta-box__duration input[type=number]:focus,.lp-builder-popup .lp-meta-box__duration input[type=text]:focus,.lp-builder-popup .lp-meta-box__duration input[type=datetime-local]:focus,.lp-builder-popup .lp-meta-box-field input[type=number]:focus,.lp-builder-popup .lp-meta-box-field input[type=text]:focus,.lp-builder-popup .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field textarea,.lp-builder-popup .lp-meta-box__duration textarea,.lp-builder-popup .lp-meta-box-field textarea{order:3;width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;min-height:80px;resize:vertical}.lp-builder-popup .form-field textarea:focus,.lp-builder-popup .lp-meta-box__duration textarea:focus,.lp-builder-popup .lp-meta-box-field textarea:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field select,.lp-builder-popup .lp-meta-box__duration select,.lp-builder-popup .lp-meta-box-field select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;cursor:pointer}.lp-builder-popup .form-field select:focus,.lp-builder-popup .lp-meta-box__duration select:focus,.lp-builder-popup .lp-meta-box-field select:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field input[type=checkbox],.lp-builder-popup .lp-meta-box__duration input[type=checkbox],.lp-builder-popup .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-builder-popup .form-field input[type=checkbox]:before,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:before,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-builder-popup .form-field input[type=checkbox]:checked,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked{background:#3b82f6}.lp-builder-popup .form-field input[type=checkbox]:checked:before,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.lp-builder-popup .form-field input[type=checkbox]:focus,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:focus,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;align-items:center;gap:11px}.lp-builder-popup .form-field:has(input[type=checkbox]) input[type=checkbox],.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) input[type=checkbox],.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) input[type=checkbox]{order:1;margin-top:2px}.lp-builder-popup .form-field:has(input[type=checkbox]) .description,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) .description,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) .description{order:3}.lp-builder-popup .form-field._lp_hint_field,.lp-builder-popup .form-field._lp_explanation_field,.lp-builder-popup ._lp_duration_field,.lp-builder-popup ._lp_course_repurchase_option_field{flex-wrap:wrap}.lp-builder-popup .form-field._lp_hint_field .description,.lp-builder-popup .form-field._lp_explanation_field .description,.lp-builder-popup ._lp_duration_field .description,.lp-builder-popup ._lp_course_repurchase_option_field .description{width:100%;margin-left:161px;margin-top:6px}.lp-builder-popup .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.lp-builder-popup .lp-meta-box__duration .description{margin-top:4px}.lp-builder-popup #_lp_passing_grade,.lp-builder-popup #_lp_retake_count,.lp-builder-popup #_lp_pagination{max-width:100px}.lp-builder-popup .lp-radios-field-meta-box{list-style-type:none;margin:0;padding:0}.lp-builder-popup .lp-radios-field-meta-box li{margin-bottom:8px}.lp-builder-popup .lp-radios-field-meta-box li:last-child{margin-bottom:0}.lp-builder-popup .lp-radios-field-meta-box li label{display:flex;align-items:center;gap:8px;font-weight:400;width:auto;min-width:auto;max-width:none;cursor:pointer}.lp-builder-popup .lp-radios-field-meta-box li input[type=radio]{width:18px;height:18px;margin:0;cursor:pointer;accent-color:#1e1e1e}.lp-builder-popup .wp-editor-wrap{border:1px solid #d1d5db;border-radius:12px;overflow:hidden;background-color:#fff}.lp-builder-popup .wp-editor-wrap .wp-editor-tools{background-color:#f5f5f5;margin:8px 8px 0;border-radius:12px 12px 0 0}.lp-builder-popup .wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.lp-builder-popup .wp-editor-wrap button.insert-media,.lp-builder-popup .wp-editor-wrap input.button{color:#1e1e1e;border-color:#d1d5db;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;border-radius:4px;white-space:nowrap;box-sizing:border-box;background:#fff}.lp-builder-popup .wp-editor-wrap button.insert-media:hover,.lp-builder-popup .wp-editor-wrap input.button:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.lp-builder-popup .wp-editor-wrap .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap div.mce-statusbar{border-top:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button{margin:8px 8px 8px 0;border-bottom-color:#dcdcde;border-radius:4px;background:#f5f5f5;border:1px solid #d1d5db;padding:4px 12px;font-size:13px}.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#fff;color:#1e1e1e}.lp-builder-popup .wp-editor-wrap .mce-top-part,.lp-builder-popup .wp-editor-wrap .quicktags-toolbar{background-color:#f5f5f5;margin:0 8px 0;padding:0;border-radius:0 0 8px 8px}.lp-builder-popup .wp-editor-wrap .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap .quicktags-toolbar{padding:6px;border-bottom:0}.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0}.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp>div{padding:0 8px 8px !important}.lp-builder-popup .wp-editor-wrap .wp-editor-container{border:0}.lp-builder-popup .wp-editor-wrap textarea.wp-editor-area{border:0;border-top:0;border-radius:0;padding:12px}.lp-builder-popup .wp-editor-container{border:none !important;background:#fff}.lp-builder-popup .mce-top-part{margin:0 !important}.lp-builder-popup .quicktags-toolbar{border-radius:0 0 8px 8px;margin:0 !important;padding:8px !important}.lp-builder-popup .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}.lp-builder-popup .lp-material--table th,.lp-builder-popup .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:left}.lp-builder-popup .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}.lp-builder-popup .lp-material--table td{font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-material--table tr:last-child td{border-bottom:0}.lp-builder-popup .lp-material--table tr:hover td{background-color:#f9fafb}.lp-builder-popup .lp-material--table thead.hidden{display:none}.lp-builder-popup .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}.lp-builder-popup #btn-lp--add-material,.lp-builder-popup #btn-lp--save-material{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup #btn-lp--add-material:hover,.lp-builder-popup #btn-lp--save-material:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .cb-lesson-edit-title,.lp-builder-popup .cb-quiz-edit-title,.lp-builder-popup .cb-question-edit-title{margin-bottom:24px;flex:1}.lp-builder-popup .cb-lesson-edit-title__label,.lp-builder-popup .cb-quiz-edit-title__label,.lp-builder-popup .cb-question-edit-title__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .cb-lesson-edit-title__input,.lp-builder-popup .cb-quiz-edit-title__input,.lp-builder-popup .cb-question-edit-title__input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;transition:all .2s}.lp-builder-popup .cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-quiz-edit-title__input:focus,.lp-builder-popup .cb-question-edit-title__input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .cb-lesson-edit-desc,.lp-builder-popup .cb-quiz-edit-desc,.lp-builder-popup .cb-question-edit-desc{margin-bottom:24px}.lp-builder-popup .cb-lesson-edit-desc__label,.lp-builder-popup .cb-quiz-edit-desc__label,.lp-builder-popup .cb-question-edit-desc__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box,.lp-builder-popup .lp-form-setting-question .lp-meta-box{margin:0;background:transparent}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-question .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:18px;font-weight:700;color:#1e1e1e;margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #e5e7eb;line-height:1.2}.lp-builder-popup .cb-section__question-title-assigned{display:flex;align-items:flex-start;gap:20px;margin-bottom:24px}.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label{color:#6b7280;margin-right:5px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover{text-decoration:underline}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .cb-section__lesson-title-assigned{display:flex;gap:40px;margin-bottom:24px}.lp-builder-popup .cb-section__lesson-title-assigned .cb-lesson-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .label{color:#6b7280;margin-right:5px}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .cb-section__quiz-title-assigned{display:flex;gap:40px;margin-bottom:24px}.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label{color:#6b7280;margin-right:5px}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .lp-edit-quiz-wrap .heading{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background-color:#f9fafb;border-bottom:1px solid #e5e7eb;margin:-24px -24px 24px;border-radius:0}.lp-builder-popup .lp-edit-quiz-wrap .heading h4{margin:0;font-size:15px;font-weight:600;color:#1e1e1e;width:80%}.lp-builder-popup .lp-edit-quiz-wrap .heading .total-items{font-size:13px;color:#6b7280;background:#e5e7eb;padding:4px 12px;border-radius:12px}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .one,.lp-builder-popup .lp-edit-quiz-wrap .plural{display:none}.lp-builder-popup .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:12px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:focus{background:#fff;border-color:#d1d5db;outline:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#1e1e1e;color:#fff;padding:4px 10px;border-radius:4px;white-space:nowrap;font-weight:500}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#e5e7eb;border-radius:8px 8px 0 0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:16px;background:#f9fafb;border-radius:0 0 8px 8px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.clone{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #d1d5db;border-radius:8px;margin-top:16px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#3b82f6}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#3b82f6}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;background:#1e1e1e;color:#fff;border:0;border-radius:6px;font-weight:500;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover{background:#333}.lp-builder-popup .lp-edit-question-wrap .lp-question-edit-left,.lp-builder-popup .lp-question-edit-main .lp-question-edit-left{width:100%}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit{margin-bottom:24px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background-color:#f9fafb;border-bottom:1px solid #e5e7eb}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header label,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header label{font-weight:600;font-size:14px;margin:0;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header .lp-question-type-label,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header .lp-question-type-label{font-size:12px;background-color:#1e1e1e;color:#fff;padding:4px 12px;border-radius:4px;font-weight:500}.lp-builder-popup .lp-edit-question-wrap .lp-answers-config,.lp-builder-popup .lp-question-edit-main .lp-answers-config{padding:16px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-choice-header,.lp-builder-popup .lp-question-edit-main .lp-question-choice-header{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #e5e7eb;margin-bottom:12px;font-weight:600;font-size:13px;color:#6b7280}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid #f3f4f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item:last-of-type:not(.clone),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item:last-of-type:not(.clone){border-bottom:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag{cursor:move;color:#9ca3af;font-size:16px;padding:4px}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag:hover{color:#6b7280}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-spinner,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text],.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input{flex:1;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:focus,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:hover:not(:focus),.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:hover:not(:focus),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus){border-color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer{cursor:pointer;color:#9ca3af;padding:8px;border-radius:6px;transition:all .2s;display:flex;align-items:center;justify-content:center;background:transparent;border:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;transition:all .2s;flex-shrink:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:hover{border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked{border-color:#3b82f6;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked::after,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked::after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:10px;height:10px;background:#3b82f6;border-radius:50%}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:4px;cursor:pointer;position:relative;transition:all .2s;flex-shrink:0;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:hover{border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked{background:#3b82f6;border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked::after,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked::after{content:\"\";position:absolute;left:6px;top:2px;width:5px;height:10px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.clone,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.clone{display:none !important}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.loading,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.loading{opacity:.6;pointer-events:none}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new{display:flex;align-items:center;gap:12px;padding:16px 0 0;margin-top:12px;border-top:1px solid #e5e7eb}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-icon-plus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-icon-plus{color:#3b82f6;font-size:16px}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text],.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input{flex:1;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]:focus,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]::placeholder,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]::placeholder,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder{color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer{padding:10px 16px;background:#f3f4f6;color:#6b7280;border:1px solid #d1d5db;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover{background:#e5e7eb;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active{background:#1e1e1e;color:#fff;border-color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover{background:#333}.lp-builder-popup .lp-edit-question-wrap .question-edit-details,.lp-builder-popup .lp-question-edit-main .question-edit-details{margin-top:24px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-section-collapse,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-section-collapse{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle{padding:14px 16px;background-color:#f9fafb;cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background .2s;border-bottom:1px solid transparent}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header:hover,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle:hover,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header:hover,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle:hover{background-color:#f3f4f6}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header label,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle label,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header label,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle label{font-weight:600;font-size:14px;margin:0;cursor:pointer;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle{color:#6b7280;transition:transform .2s}.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-trigger-toggle{border-bottom-color:#e5e7eb}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-icon-angle-down,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-section-collapse,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-section-collapse{padding:20px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid #f3f4f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings:last-child,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label{margin-bottom:10px}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label label,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label label{font-weight:600;font-size:14px;color:#1e1e1e;display:block}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number],.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]{width:120px;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings___desc,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings___desc{margin-top:8px;font-size:13px;color:#6b7280;line-height:1.5}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings .wp-editor-wrap,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings .wp-editor-wrap{margin-top:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-options,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-options{margin-top:16px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item{display:flex;align-items:flex-start;gap:12px;padding:12px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;margin-bottom:12px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item.clone,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item.clone{display:none !important}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-index,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-index{font-weight:600;color:#6b7280;min-width:24px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input{flex:1;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus{outline:0;border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete{cursor:pointer;color:#9ca3af;padding:8px;border-radius:6px;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-option-detail,.lp-builder-popup .lp-question-edit-main .lp-question-fib-option-detail{margin-top:12px;padding:12px;background:#fff;border:1px solid #e5e7eb;border-radius:6px}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content{padding:8px 14px;border:1px solid #d1d5db;border-radius:6px;background:#fff;font-size:13px;cursor:pointer;transition:all .2s;margin-right:8px;margin-bottom:8px}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content.loading{opacity:.6;pointer-events:none}@keyframes lp-popup-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media(max-width:768px){.lp-builder-popup{width:95%;max-height:95vh}.lp-builder-popup__header,.lp-builder-popup__footer{padding:12px 16px}.lp-builder-popup__tabs{padding:0 16px;overflow-x:auto}.lp-builder-popup__tab{padding:12px 16px;white-space:nowrap}.lp-builder-popup__tab-content{padding:16px}.lp-builder-popup__footer{flex-direction:column;gap:10px}.lp-builder-popup__footer-left,.lp-builder-popup__footer-right{width:100%;justify-content:center}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{flex-wrap:wrap}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{width:100%;min-width:100%;max-width:100%;margin-bottom:8px}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{max-width:100%}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;flex-wrap:wrap}.lp-builder-popup .form-field:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox])>label{width:auto;min-width:auto;max-width:none;margin-bottom:0}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{margin-left:0 !important}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__lesson-title-assigned{flex-direction:column;gap:16px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__lesson-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{margin-top:0;align-items:flex-start}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{flex-wrap:wrap}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{width:100%}}.learn-press-course-builder #lp-course-builder-content{background:#fff;padding:24px;border-radius:8px}.learn-press-course-builder .cb-section__course-edit{background:#fff;border-radius:16px;min-height:calc(100% - 100px)}.learn-press-course-builder .cb-section__course-edit .cb-section__header-left{display:flex;align-items:center;gap:10px;margin-bottom:20px;margin-top:28px}.learn-press-course-builder .cb-section__course-edit .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.learn-press-course-builder .cb-section__course-edit .cb-section__header{display:flex;justify-content:space-between;align-items:center}.learn-press-course-builder .cb-section__course-edit .cb-section__header-action{display:flex;gap:20px}.learn-press-course-builder .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.learn-press-course-builder .cb-section__course-edit .cb-button.loading{pointer-events:none;opacity:.8}.learn-press-course-builder .cb-section__course-edit .cb-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.learn-press-course-builder .cb-section__course-edit .lp-meta-box{background:transparent}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{display:flex;flex-direction:column;gap:24px}.learn-press-course-builder .cb-section__course-edit .form-field,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration{display:flex;align-items:center;gap:11px;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,.learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field{flex-wrap:wrap}.learn-press-course-builder .cb-section__course-edit .form-field label,.learn-press-course-builder .cb-section__course-edit .form-field label span,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,.learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label{font-size:14px;color:#1a1a1a;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;color:#23282d;font-weight:600;flex:0 0 auto}.learn-press-course-builder .cb-section__course-edit .lesson-materials{flex-wrap:nowrap;gap:10px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field textarea{order:3;width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=text]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;cursor:pointer}.learn-press-course-builder .cb-section__course-edit select:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked{background:#3b82f6}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before{left:22px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:row;align-items:center;gap:11px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox]{order:1;margin-top:2px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{order:3}.learn-press-course-builder .cb-section__course-edit .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration .description{margin-top:4px}.learn-press-course-builder .cb-section__course-edit p.form-field,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration{padding:0;margin:0}.learn-press-course-builder .cb-section__course-edit p.form-field .description,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration .description{margin-top:6px}.learn-press-course-builder .cb-section__course-edit #_lp_passing_grade,.learn-press-course-builder .cb-section__course-edit #_lp_retake_count,.learn-press-course-builder .cb-section__course-edit #_lp_pagination{max-width:100px}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content{flex:1}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text]{max-width:100%;margin-bottom:10px}@media(max-width:768px){.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{gap:20px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{max-width:100%}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:column;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) label{min-width:auto}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{margin-left:0;margin-top:0}}.wp-editor-wrap{border:1px solid #ddd;border-radius:12px;overflow:hidden;background-color:#fff}.wp-editor-wrap .wp-editor-tools{background-color:#f5f5f5;margin:8px 8px 0;border-radius:12px 12px 0 0}.wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.wp-editor-wrap button.insert-media,.wp-editor-wrap input.button{color:#1e1e1e;border-color:#1e1e1e;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-top-part::before{box-shadow:none}.wp-editor-wrap div.mce-statusbar{border-top:0}.wp-editor-wrap .wp-editor-tabs button{margin:8px 8px 0 0;border-bottom-color:#dcdcde;border-radius:4px}.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#fff;color:#000}.wp-editor-wrap .mce-top-part,.wp-editor-wrap .quicktags-toolbar{background-color:#f5f5f5;margin:0 8px 0;padding:0;border-radius:0 0 8px 8px}.wp-editor-wrap .mce-top-part::before{box-shadow:none}.wp-editor-wrap .quicktags-toolbar{padding:6px;border-bottom:0}.wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0}.wp-editor-wrap .mce-toolbar-grp>div{padding:5px}.wp-editor-wrap .wp-editor-container{border:0}#lp-builder-popup-container .wp-editor-container{border:none !important;background:#fff}#lp-builder-popup-container .mce-top-part{margin:0 !important}#lp-builder-popup-container .lp-question-field-settings .mce-top-part{margin:0 8px 0 !important}#lp-builder-popup-container .quicktags-toolbar{border-radius:0 0 8px 8px;margin:0 !important;padding:8px !important}.lp-popup-items-to-select .header{padding:0 20px;flex-shrink:0}.lp-popup-items-to-select .header ul.tabs{display:flex;margin-top:10;padding:0;list-style:none;gap:20px;border-bottom:unset}.lp-popup-items-to-select ul.tabs li{margin:0}.lp-popup-items-to-select .header ul.tabs li.tab a{display:block;text-decoration:none;color:#6b7280;font-weight:600;font-size:14px;transition:all .2s;border-radius:6px;border:1px solid #f5f5f5}.lp-popup-items-to-select .header ul.tabs li.tab.active a,.lp-popup-items-to-select .header ul.tabs li.tab a:hover{background:#f5f5f5;color:#1e1e1e}input.lp-search-title-item{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;color:#374151;background:#fff;margin-bottom:15px;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05);transition:border-color .2s}input.lp-search-title-item:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-target ul.list-items{list-style:none;margin:0;padding:0;background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;gap:0;max-height:500px}.lp-select-item{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background .2s}.lp-select-item:last-child{border-bottom:0}.lp-select-item:hover{background-color:#f5f5f5}.lp-select-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d1d5db;border-radius:4px;margin-right:12px;cursor:pointer;position:relative;outline:0;flex-shrink:0}.lp-select-item input[type=checkbox]:checked{background-color:#1e1e1e;border-color:#1e1e1e}.lp-select-item input[type=checkbox]:checked::after{content:\"\";position:absolute;left:5px;top:1px;width:4px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.lp-select-item .title{font-size:14px;color:#374151;font-weight:500}.lp-select-item .title strong{color:#9ca3af;font-weight:400;margin-left:5px;font-size:12px}.list-items-wrap .learn-press-pagination{margin-top:20px;display:flex;justify-content:center}.list-items-wrap .learn-press-pagination ul.page-numbers{display:flex;gap:5px;list-style:none;padding:0;margin:0;border:0}.list-items-wrap .page-numbers li span.page-numbers.current,.list-items-wrap .page-numbers li a.page-numbers{display:flex;align-items:center;justify-content:center;height:32px;border-radius:6px;font-size:13px;text-decoration:none;font-weight:500;border:1px solid transparent}.list-items-wrap .page-numbers li span.page-numbers.current{background-color:#1e1e1e;color:#fff}.list-items-wrap .page-numbers li a.page-numbers{background-color:#fff;color:#6b7280;border-color:#e5e7eb;transition:all .2s}.list-items-wrap .page-numbers li a.page-numbers:hover{border-color:#9ca3af;color:#1e1e1e}.list-items-wrap .page-numbers i{font-size:14px}.lp-popup-items-to-select .footer{background:#fff;align-items:center;justify-content:space-between;flex-shrink:0}.lp-popup-items-to-select .button{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .2s}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active){background-color:#333;color:#fff;order:2}.lp-btn-add-items-selected:hover:not(:disabled){background-color:#333}.lp-btn-add-items-selected:disabled{background-color:#f5f5f5;color:#9ca3af;cursor:not-allowed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover{background-color:#1e1e1e}.lp-btn-count-items-selected{background:transparent;color:#6b7280;border:1px dashed #d1d5db;font-size:13px;order:1}.lp-btn-back-to-select-items{background:#fff;border:1px solid #d1d5db;color:#374151;order:0}.lp-btn-back-to-select-items:hover{background-color:#f5f5f5}.lp-popup-items-to-select ul.list-items-selected{padding-left:0;background:#fff;margin-bottom:20px;gap:0}.lp-popup-items-to-select ul.list-items-selected li{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #f5f5f5;color:#1e1e1e;cursor:pointer;transition:background .2s}.lp-hidden{display:none !important}.lp-popup-items-to-select .header .tabs .tab.active::after{display:none !important}.lp-popup-items-to-select .header .tabs .tab:not(:last-child)::before{display:none}.lp-popup-items-to-select .list-items-selected li:hover{background:#f5f5f5}.lp-popup-items-to-select .list-items-selected li{padding:5px}\n\\ No newline at end of file\n+@charset \"UTF-8\";body{margin:0;padding:0}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-left:15px;padding-right:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 0 0 10px !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;right:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-right:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;left:80%;transform:translateX(-50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-right:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:left}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-left:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;left:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-right:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-right:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-right:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;right:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 0 0 20px}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;right:0;transform:translateX(-5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:left;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-right:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:right}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-left:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;left:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}html{margin-top:0 !important}.lp-course-builder-canvas,.lp-toast,.swal2-container{font-family:BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;font-size:14px;line-height:1.5;color:#1e1e1e;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-course-builder-canvas *,.lp-course-builder-canvas *::before,.lp-course-builder-canvas *::after,.lp-toast *,.lp-toast *::before,.lp-toast *::after,.swal2-container *,.swal2-container *::before,.swal2-container *::after{box-sizing:border-box}.lp-course-builder-canvas button,.lp-toast button,.swal2-container button{font-family:BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-course-builder-canvas input[type=date],.lp-course-builder-canvas input[type=datetime-local],.lp-course-builder-canvas input[type=datetime],.lp-course-builder-canvas input[type=email],.lp-course-builder-canvas input[type=month],.lp-course-builder-canvas input[type=number],.lp-course-builder-canvas input[type=password],.lp-course-builder-canvas input[type=search],.lp-course-builder-canvas input[type=tel],.lp-course-builder-canvas input[type=text],.lp-course-builder-canvas input[type=time],.lp-course-builder-canvas input[type=url],.lp-course-builder-canvas input[type=week],.lp-toast input[type=date],.lp-toast input[type=datetime-local],.lp-toast input[type=datetime],.lp-toast input[type=email],.lp-toast input[type=month],.lp-toast input[type=number],.lp-toast input[type=password],.lp-toast input[type=search],.lp-toast input[type=tel],.lp-toast input[type=text],.lp-toast input[type=time],.lp-toast input[type=url],.lp-toast input[type=week],.swal2-container input[type=date],.swal2-container input[type=datetime-local],.swal2-container input[type=datetime],.swal2-container input[type=email],.swal2-container input[type=month],.swal2-container input[type=number],.swal2-container input[type=password],.swal2-container input[type=search],.swal2-container input[type=tel],.swal2-container input[type=text],.swal2-container input[type=time],.swal2-container input[type=url],.swal2-container input[type=week]{padding:0;line-height:normal;min-height:unset}.lp-course-builder-canvas input[type=date]:focus,.lp-course-builder-canvas input[type=datetime-local]:focus,.lp-course-builder-canvas input[type=datetime]:focus,.lp-course-builder-canvas input[type=email]:focus,.lp-course-builder-canvas input[type=month]:focus,.lp-course-builder-canvas input[type=number]:focus,.lp-course-builder-canvas input[type=password]:focus,.lp-course-builder-canvas input[type=search]:focus,.lp-course-builder-canvas input[type=tel]:focus,.lp-course-builder-canvas input[type=text]:focus,.lp-course-builder-canvas input[type=time]:focus,.lp-course-builder-canvas input[type=url]:focus,.lp-course-builder-canvas input[type=week]:focus,.lp-toast input[type=date]:focus,.lp-toast input[type=datetime-local]:focus,.lp-toast input[type=datetime]:focus,.lp-toast input[type=email]:focus,.lp-toast input[type=month]:focus,.lp-toast input[type=number]:focus,.lp-toast input[type=password]:focus,.lp-toast input[type=search]:focus,.lp-toast input[type=tel]:focus,.lp-toast input[type=text]:focus,.lp-toast input[type=time]:focus,.lp-toast input[type=url]:focus,.lp-toast input[type=week]:focus,.swal2-container input[type=date]:focus,.swal2-container input[type=datetime-local]:focus,.swal2-container input[type=datetime]:focus,.swal2-container input[type=email]:focus,.swal2-container input[type=month]:focus,.swal2-container input[type=number]:focus,.swal2-container input[type=password]:focus,.swal2-container input[type=search]:focus,.swal2-container input[type=tel]:focus,.swal2-container input[type=text]:focus,.swal2-container input[type=time]:focus,.swal2-container input[type=url]:focus,.swal2-container input[type=week]:focus{border-color:none;box-shadow:unset;outline:unset}.lp-course-builder-canvas input[type=checkbox]:focus,.lp-course-builder-canvas input[type=color]:focus,.lp-course-builder-canvas input[type=date]:focus,.lp-course-builder-canvas input[type=datetime-local]:focus,.lp-course-builder-canvas input[type=datetime]:focus,.lp-course-builder-canvas input[type=email]:focus,.lp-course-builder-canvas input[type=month]:focus,.lp-course-builder-canvas input[type=number]:focus,.lp-course-builder-canvas input[type=password]:focus,.lp-course-builder-canvas input[type=radio]:focus,.lp-course-builder-canvas input[type=search]:focus,.lp-course-builder-canvas input[type=tel]:focus,.lp-course-builder-canvas input[type=text]:focus,.lp-course-builder-canvas input[type=time]:focus,.lp-course-builder-canvas input[type=url]:focus,.lp-course-builder-canvas input[type=week]:focus,.lp-course-builder-canvas select:focus,.lp-course-builder-canvas textarea:focus,.lp-toast input[type=checkbox]:focus,.lp-toast input[type=color]:focus,.lp-toast input[type=date]:focus,.lp-toast input[type=datetime-local]:focus,.lp-toast input[type=datetime]:focus,.lp-toast input[type=email]:focus,.lp-toast input[type=month]:focus,.lp-toast input[type=number]:focus,.lp-toast input[type=password]:focus,.lp-toast input[type=radio]:focus,.lp-toast input[type=search]:focus,.lp-toast input[type=tel]:focus,.lp-toast input[type=text]:focus,.lp-toast input[type=time]:focus,.lp-toast input[type=url]:focus,.lp-toast input[type=week]:focus,.lp-toast select:focus,.lp-toast textarea:focus,.swal2-container input[type=checkbox]:focus,.swal2-container input[type=color]:focus,.swal2-container input[type=date]:focus,.swal2-container input[type=datetime-local]:focus,.swal2-container input[type=datetime]:focus,.swal2-container input[type=email]:focus,.swal2-container input[type=month]:focus,.swal2-container input[type=number]:focus,.swal2-container input[type=password]:focus,.swal2-container input[type=radio]:focus,.swal2-container input[type=search]:focus,.swal2-container input[type=tel]:focus,.swal2-container input[type=text]:focus,.swal2-container input[type=time]:focus,.swal2-container input[type=url]:focus,.swal2-container input[type=week]:focus,.swal2-container select:focus,.swal2-container textarea:focus{border-color:none;box-shadow:unset;outline:unset}.lp-course-builder-canvas input[type=checkbox],.lp-course-builder-canvas input[type=radio],.lp-toast input[type=checkbox],.lp-toast input[type=radio],.swal2-container input[type=checkbox],.swal2-container input[type=radio]{box-shadow:unset;margin:0}.lp-course-builder-canvas input[type=radio]:checked::before,.lp-course-builder-canvas input[type=checkbox]:checked::before,.lp-toast input[type=radio]:checked::before,.lp-toast input[type=checkbox]:checked::before,.swal2-container input[type=radio]:checked::before,.swal2-container input[type=checkbox]:checked::before{margin:0}.lp-course-builder-canvas a,.lp-toast a,.swal2-container a{color:#7067ed}.lp-course-builder-canvas a:hover,.lp-toast a:hover,.swal2-container a:hover{color:#5b52d1}.lp-course-builder-canvas a:focus,.lp-toast a:focus,.swal2-container a:focus{border-color:none;box-shadow:unset;outline:unset}#lp-course-builder{display:block !important;min-height:100vh;background:#fff;margin:0;padding:0}#lp-course-builder .lp-course-builder_layout{display:block !important;width:100%}#lp-course-builder .learn-press-course-builder{display:flex;flex-direction:column;min-height:100vh;background:#fff;margin:0;padding:0;width:100%}#lp-course-builder .learn-press-course-builder *{box-sizing:border-box}#lp-course-builder .lp-cb-body{display:flex;flex:1;min-height:calc(100vh - 60px)}#lp-course-builder .lp-cb-top-header{position:fixed;top:0;left:0;right:0;height:60px;background:#fff;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;justify-content:space-between;padding:0 24px;z-index:9;box-shadow:0 1px 3px rgba(0,0,0,0.05)}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo{display:flex;align-items:center}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a{display:flex;align-items:center;gap:10px;text-decoration:none;color:#1e1e1e;line-height:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a:hover{color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .lp-cb-top-header__logo-image{display:block;width:auto;max-width:240px;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .dashicons{font-size:28px;width:28px;height:28px;color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__title{font-size:18px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar{position:relative;flex-shrink:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar img{width:40px;height:40px;border-radius:50%;object-fit:cover;display:block}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__online-dot{position:absolute;bottom:1px;right:1px;width:10px;height:10px;background:#22c55e;border-radius:50%;border:2px solid #fff}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-info{display:flex;flex-direction:column;gap:2px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-name{font-size:14px;font-weight:600;color:#1e1e1e;line-height:1.3}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link{font-size:13px;color:#898989;text-decoration:none;line-height:1.3}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link:hover{color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:6px;color:#cfcfcf;text-decoration:none;transition:all .2s;margin-left:4px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout svg{width:22px;height:22px;flex-shrink:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout:hover{background:#fef2f2;color:#ef4444}#lp-course-builder-sidebar.lp-cb-sidebar{position:fixed !important;left:0 !important;top:60px !important;bottom:0 !important;width:260px !important;background:#fff !important;color:#000 !important;display:flex !important;flex-direction:column !important;z-index:8 !important;overflow-y:auto !important;padding:0 !important;border-radius:0 !important;border-right:1px solid #f5f5f5}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__header{display:none}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav{flex:1;padding:16px;margin:0;list-style:none;display:block !important;overflow-x:visible !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item{margin:0;padding:0;list-style:none;display:block !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{display:flex !important;align-items:center;padding:12px 20px;color:#000 !important;text-decoration:none;transition:all .2s ease;gap:12px;background:transparent !important;border:none !important;border-radius:12px !important;margin-top:6px}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover{background:#eef1ff !important;color:#000 !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{font-size:20px;width:20px;height:20px;line-height:20px;color:inherit}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{font-size:15px;font-weight:500}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a{background:#eef1ff !important;color:#7067ed !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons{color:#7067ed !important}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:6px;background:transparent;cursor:pointer;transition:all .2s;margin-left:auto;margin-bottom:16px;margin-right:16px;border:0;color:#aaa}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle svg{min-width:24px;height:24px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle .lp-toggle-expand{display:none}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle:hover{background:#eef1ff;border-color:#d1d5db;color:#7067ed}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer{padding:16px;border-top:1px solid #f5f5f5;margin-top:auto;background:#fdfdfd;display:flex;flex-direction:column;gap:8px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer:empty{display:none}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item{display:flex;align-items:center;padding:12px 16px;color:#000;text-decoration:none;gap:12px;font-size:14px;transition:all .2s;border-radius:6px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover{background:#eef1ff;color:#7067ed}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons{font-size:20px;width:20px;height:20px;flex-shrink:0}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed{width:72px !important}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav{padding:16px 8px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{justify-content:center;padding:12px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{margin:0}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer{padding:16px 8px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle{margin:0 auto}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-collapse{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-expand{display:block}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item{justify-content:center;padding:12px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item .lp-cb-sidebar__item-title{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed+#lp-course-builder-content.lp-cb-main,#lp-course-builder.has-collapsed-sidebar #lp-course-builder-content.lp-cb-main{margin-left:72px !important;width:calc(100% - 72px) !important}#lp-course-builder-content.lp-cb-main{flex:1;margin-left:260px !important;margin-top:60px !important;min-height:calc(100vh - 60px);padding:0 24px 24px !important;background:#fff !important;border-radius:0 !important;width:calc(100% - 260px) !important}html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 32px)}html:has(#wpadminbar) .lp-cb-top-header{top:32px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 32px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px) !important;min-height:calc(100vh - 60px)}@media screen and (max-width:782px){html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 46px)}html:has(#wpadminbar) .lp-cb-top-header{top:46px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 46px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px + 46px) !important;min-height:calc(100vh - 60px - 46px)}}.lp-cb-breadcrumb{padding:16px 12px;border-bottom:1px solid #f5f5f5;font-size:14px;background:#fff;border-radius:8px 8px 0 0}.lp-cb-breadcrumb .lp-cb-breadcrumb__item{color:#898989;text-decoration:none;transition:color .2s}.lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover{color:#7067ed}.lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current{color:#1e1e1e;font-weight:500}.lp-cb-breadcrumb .lp-cb-breadcrumb__separator{margin:0 10px;color:#898989}#lp-course-builder .lp-cb-header{position:sticky;top:60px;z-index:99;display:flex;align-items:center;justify-content:space-between;padding:20px 12px;background:#fff;gap:30px}#lp-course-builder .lp-cb-header .lp-cb-header__left{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-header .lp-cb-header__title{margin:0;font-size:24px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-header .lp-cb-admin-link{display:inline-flex;align-items:center;justify-content:center;font-size:14px;padding:5px 12px;gap:10px;font-weight:500;border-radius:6px;color:#898989;text-decoration:none;transition:all .2s}#lp-course-builder .lp-cb-header .lp-cb-admin-link .dashicons{font-size:18px;width:18px;height:18px}#lp-course-builder .lp-cb-header .lp-cb-admin-link:hover{background:#f1f5f9;color:#7067ed}#lp-course-builder .lp-cb-header .lp-cb-header__actions{display:flex;gap:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button{padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:1px solid #f5f5f5;background:#fff;color:#1e1e1e;transition:all .2s}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button:hover{background:#f9fafb}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary,#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn{background:#7067ed !important;border-color:#7067ed !important;color:#fff !important}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover{background:#5b52d1 !important;border-color:#5b52d1 !important}html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 32px)}@media screen and (max-width:782px){html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 46px)}}.course-status,.quiz-status,.quizze-status,.question-status,.lesson-status{display:inline-block;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:500;text-transform:capitalize}.course-status.publish,.quiz-status.publish,.quizze-status.publish,.question-status.publish,.lesson-status.publish{background:#e7f6e9;color:#28a746}.course-status.draft,.quiz-status.draft,.quizze-status.draft,.question-status.draft,.lesson-status.draft{background:#f7f7f7;color:#aaa}.course-status.pending,.quiz-status.pending,.quizze-status.pending,.question-status.pending,.lesson-status.pending{background:#dbeafe;color:#1e40af}.course-status.private,.quiz-status.private,.quizze-status.private,.question-status.private,.lesson-status.private{background:#f3e8ff;color:#6b21a8}.course-status.trash,.quiz-status.trash,.quizze-status.trash,.question-status.trash,.lesson-status.trash{background:#fee2e2;color:#991b1b}.course-status.future,.quiz-status.future,.quizze-status.future,.question-status.future,.lesson-status.future{background:#ffd700;color:#333}#lp-course-builder .lp-cb-tabs{display:flex;border-bottom:1px solid #f5f5f5;background:#fff;gap:10px;margin:0;list-style:none}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item{padding:12px 24px;color:#898989;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent;border-radius:10px 10px 0 0}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item:hover{color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item.is-active{color:#7067ed;border-bottom-color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tab-content{padding:0;background:#fff;border-radius:0 0 8px 8px;margin-top:30px}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section{background:#fff;border-radius:0;min-height:auto}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header{display:flex;align-items:center;justify-content:space-between;padding:0 0 20px 0;margin-bottom:20px;border-bottom:1px solid #f5f5f5}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish{background:#e7f6e9;color:#28a746}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft{background:#f7f7f7;color:#aaa}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending{background:#dbeafe;color:#1e40af}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action{display:flex;gap:10px}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab{display:flex;gap:24px}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:0 0 200px;list-style:none;margin:0;padding:0;border-right:1px solid #f5f5f5}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li{margin:0}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{display:block;padding:12px 16px;color:#898989;text-decoration:none;border-left:2px solid transparent;transition:all .2s}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover{color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{color:#7067ed;background:rgba(112,103,237,0.05);border-left-color:#7067ed;font-weight:500}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex:1;min-width:0}#lp-course-builder .lp-cb-footer{padding:20px 0;border-top:1px solid #f5f5f5;background:#fff;border-radius:0 0 8px 8px;margin-top:auto}#lp-course-builder .lp-cb-footer .lp-cb-footer__actions{display:flex;justify-content:flex-end;gap:12px}#lp-course-builder .lp-course-builder-content__tab{background:#fff;border-radius:8px;max-width:100%}#lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title{font-size:28px;font-weight:600;color:#1e1e1e;margin:20px 0 24px 0}.lp-cb-save-btn,#lp-course-builder .lp-button-primary{background:#7067ed !important;border-color:#7067ed !important;color:#fff !important;padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-save-btn:hover,#lp-course-builder .lp-button-primary:hover{background:#5b52d1 !important;border-color:#5b52d1 !important}.lp-cb-save-btn.loading,.lp-cb-save-btn.lp-loading,.lp-cb-save-btn[aria-disabled=true],#lp-course-builder .lp-button-primary.loading,#lp-course-builder .lp-button-primary.lp-loading,#lp-course-builder .lp-button-primary[aria-disabled=true]{opacity:.7;pointer-events:none;cursor:not-allowed}.lp-cb-save-btn.has-changes,#lp-course-builder .lp-button-primary.has-changes{position:relative;animation:pulse-save 2s infinite}.lp-cb-save-btn.has-changes::after,#lp-course-builder .lp-button-primary.has-changes::after{content:\"\";position:absolute;top:-4px;right:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update,#lp-course-builder .cb-btn-preview,#lp-course-builder .cb-btn-darft,#lp-course-builder .cb-btn-publish,#lp-course-builder .cb-btn-pending{padding:10px 20px;font-size:14px;border-radius:12px;font-weight:500;cursor:pointer;border:0;transition:all .2s}#lp-course-builder .cb-btn-update.has-changes,#lp-course-builder .cb-btn-preview.has-changes,#lp-course-builder .cb-btn-darft.has-changes,#lp-course-builder .cb-btn-publish.has-changes,#lp-course-builder .cb-btn-pending.has-changes{position:relative}#lp-course-builder .cb-btn-update.has-changes::after,#lp-course-builder .cb-btn-preview.has-changes::after,#lp-course-builder .cb-btn-darft.has-changes::after,#lp-course-builder .cb-btn-publish.has-changes::after,#lp-course-builder .cb-btn-pending.has-changes::after{content:\"\";position:absolute;top:-4px;right:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update.loading,#lp-course-builder .cb-btn-update.lp-loading,#lp-course-builder .cb-btn-preview.loading,#lp-course-builder .cb-btn-preview.lp-loading,#lp-course-builder .cb-btn-darft.loading,#lp-course-builder .cb-btn-darft.lp-loading,#lp-course-builder .cb-btn-publish.loading,#lp-course-builder .cb-btn-publish.lp-loading,#lp-course-builder .cb-btn-pending.loading,#lp-course-builder .cb-btn-pending.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update{background:#7067ed;color:#fff}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update:hover{background:#5b52d1}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary{background:#7067ed;color:#fff;border-radius:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary:hover{background:#5b52d1}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview{border-radius:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview:hover{border-color:#7067ed;color:#7067ed}#lp-course-builder.cb-btn-secondary{background:#fff;border:1px solid #e5e7eb;color:#1e1e1e}#lp-course-builder.cb-btn-secondary:hover{border-color:#7067ed;color:#7067ed;background:#f8fafc}#lp-course-builder .cb-btn-darft{background:#e5e7eb;color:#1e1e1e}#lp-course-builder .cb-btn-darft:hover{background:#d1d5db}#lp-course-builder .cb-btn-pending{background:#dbeafe;color:#1e40af}#lp-course-builder .cb-btn-pending:hover{background:#bfdbfe;color:#1e3a8a}#lp-course-builder .cb-btn-trash{cursor:pointer;font-size:16px;background:transparent;color:#ef4444;padding:10px 20px;border-radius:6px}#lp-course-builder .cb-btn-trash:hover{background:#fef2f2}#lp-course-builder .cb-header-action-expanded{position:relative;display:inline-flex;align-items:center}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded{padding:0;height:40px;width:40px;justify-content:center;border-radius:12px}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded:hover{background:#f7f7f7;border-color:#d1d5db}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded svg{width:18px;height:18px;color:#898989}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading:before{margin-top:0;margin-right:0}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading svg{display:none}#lp-course-builder .cb-header-action-expanded .cb-header-action-expanded__items{position:absolute;top:calc(100% + 6px);right:0;min-width:180px;padding:8px;border:1px solid #f5f5f5;border-radius:12px;background:#fff;box-shadow:0 4px 12px rgba(0,0,0,0.1);display:flex;flex-direction:column;gap:2px;z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);pointer-events:none;transition:all .2s ease}#lp-course-builder .cb-header-action-expanded.is-open .cb-header-action-expanded__items{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash{gap:10px;color:#ef4444;font-size:14px;border:0}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash .dashicons{font-size:16px;width:16px;height:16px;color:#ef4444}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash:hover{background:#fef2f2}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate{gap:10px;font-size:14px;border:0}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate .dashicons{font-size:16px;width:16px;height:16px;color:#3b82f6}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate:hover{background:#dbeafe}#lp-course-builder .cb-header-actions-dropdown{position:relative;display:inline-flex}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;padding:0;background:#7067ed;border:1px solid #7067ed;border-left-color:#eef1ff;border-radius:0 12px 12px 0;cursor:pointer;transition:all .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#fff;transition:transform .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{border-color:#7067ed;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons{color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{border-color:#7067ed;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(180deg);color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading,#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle{background:#dbeafe !important;border-color:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle .dashicons{color:#1e40af !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle:hover{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a !important}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:left}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#898989}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading,#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle{background:#d1d5db !important;border-color:#d1d5db !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons{color:#374151 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover{background:#b8bcc4 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true],#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8bcc4 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#374151 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle{background:#dbeafe !important;border-color:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons{color:#1e40af !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a !important}.cb-header-actions-dropdown{position:relative;display:inline-flex}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action{background:#dbeafe;color:#1e40af}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action:hover{background:#bfdbfe;color:#1e3a8a}.cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:auto;padding:10px 0;background:#d0e3ff;border:0;border-radius:0 12px 12px 0;cursor:pointer;transition:all .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#7067ed;transition:transform .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(180deg)}.cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading,.cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading{opacity:.7;pointer-events:none}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle{background:#dbeafe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle .dashicons{color:#1e40af}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle:hover{background:#bfdbfe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle{background:#d1d5db}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons{color:#374151}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover{background:#b8bcc4}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true],.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8bcc4}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle{background:#dbeafe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons{color:#1e40af}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover{background:#bfdbfe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a}.cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}.cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:left}.cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#898989}.cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}.cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}.cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}.cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}.cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#7067ed}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}.cb-header-actions-dropdown .cb-dropdown-item.loading,.cb-header-actions-dropdown .cb-dropdown-item.lp-loading{opacity:.7;pointer-events:none}@keyframes pulse-save{0%,100%{box-shadow:0 0 0 0 rgba(112,103,237,0.4)}50%{box-shadow:0 0 0 8px rgba(112,103,237,0)}}@media screen and (max-width:1024px){#lp-course-builder-sidebar.lp-cb-sidebar{width:220px !important}#lp-course-builder-content.lp-cb-main{margin-left:220px !important;width:calc(100% - 220px) !important}.lp-cb-tab-content .lp-meta-box__course-tab{flex-direction:column}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:none;border-right:0;border-bottom:1px solid #f5f5f5;display:flex;overflow-x:auto}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;white-space:nowrap}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{border-left:0;border-bottom-color:#7067ed}}@media screen and (max-width:768px){.lp-cb-top-header{padding:0 16px}.lp-cb-top-header .lp-cb-top-header__user-info{display:none}#lp-course-builder-sidebar.lp-cb-sidebar{transform:translateX(-100%);transition:transform .3s ease}#lp-course-builder-sidebar.lp-cb-sidebar.is-open{transform:translateX(0)}#lp-course-builder-content.lp-cb-main{margin-left:0 !important;width:100% !important}.lp-cb-header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-header .lp-cb-header__actions{width:100%;justify-content:flex-end}.lp-cb-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.lp-cb-tabs .lp-cb-tabs__item{white-space:nowrap;padding:12px 16px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action{width:100%;flex-wrap:wrap}}.lp-cb-item-action-wrap{display:flex;justify-content:flex-end;gap:8px;position:relative}.lp-cb-item-action-expand-toggle{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0}.lp-cb-item-action-expand-toggle svg{width:18px;height:18px;color:#6b7280}.lp-cb-item-action-expand-toggle.lp-button{border:0}.lp-cb-item-action-expand-toggle:hover{background-color:#eef1ff}.lp-cb-item-action-expand{display:flex;position:absolute;min-width:160px;white-space:nowrap;top:60px;right:16px;transform:translate(15px,-15px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}.lp-cb-item-action{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}.lp-cb-item-action:hover{background-color:#f3f4f6}.lp-cb-item-action.trash,.lp-cb-item-action.delete{color:#ef4444}.swal2-popup{padding:20px;border-radius:16px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup.lp-select-items-popup{padding:20px !important}button.swal2-close{height:32px;width:32px}button.swal2-cancel.swal2-styled{border-radius:10px;padding:10px 24px;background:#fff;color:#aaa;border:1px solid #e1e1e1;font-weight:500;min-width:140px}button.swal2-confirm.swal2-styled{background:#7067ed;border-radius:12px;padding:10px 24px;min-width:140px}.swal2-icon.swal2-icon-show{border:0;margin-bottom:5px}#swal2-title{padding:0;font-size:22px;color:#111}#swal2-html-container{padding-top:8px;font-size:15px;color:#4f4f4f}#swal2-html-container:has(.lp-must-enable-ai-wrap){padding:0}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:none !important;backdrop-filter:blur(3px)}div:where(.swal2-container).swal2-center>.swal2-popup{border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2)}.swal2-container .button{display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}.swal2-container .button:hover{background-color:#5b52d1}.swal2-container .button.lp-btn-close-ai-popup:hover{background-color:transparent;color:#7067ed}.swal2-container .lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover{background-color:#5b52d1}.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content::before{content:none}.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content .lp-cb-swal-icon-image{display:block;width:48px;height:48px}#swal2-html-container:has(.lp-form-generate-data-ai){padding-bottom:24px}#swal2-html-container:has(.lp-form-generate-data-ai) .form-grid{margin-bottom:0}#lp-course-builder .cb-tab-header{display:flex;align-items:center;justify-content:space-between;margin:20px 0 24px 0}#lp-course-builder .cb-tab-header .lp-cb-tab__title{font-size:28px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .cb-tab-filter-bar{margin-bottom:24px}#lp-course-builder .cb-filter-fields{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap}#lp-course-builder .cb-filter-group{display:flex;flex-direction:column;gap:6px}#lp-course-builder .cb-filter-group label{font-size:13px;font-weight:500}#lp-course-builder .cb-filter-search{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:6px;padding:10px 14px;gap:8px;min-width:200px}#lp-course-builder .cb-filter-search input{flex:1;border:0;background:transparent;outline:0;font-size:14px;color:#1e1e1e}#lp-course-builder .cb-filter-search input::placeholder{color:#6b7280}#lp-course-builder select{padding:10px 32px 10px 14px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;cursor:pointer;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:right 10px center;background-size:14px}#lp-course-builder select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}#lp-course-builder .cb-filter-actions{display:flex;gap:4px;padding-bottom:1px}#lp-course-builder .cb-filter-btn{padding:8px 20px;border:0;border-radius:12px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;background-color:#7067ed;color:#eef1ff}#lp-course-builder .cb-filter-btn:hover{background:#5b52d1}#lp-course-builder .cb-filter-reset{background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 20px;border-radius:12px}#lp-course-builder .cb-filter-reset:hover{background:#eef1ff;color:#7067ed}#lp-course-builder .cb-btn-add-new{display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}#lp-course-builder .cb-btn-add-new:hover{background:#5b52d1}#lp-course-builder .cb-btn-add-new .dashicons{font-size:16px;width:16px;height:16px}#lp-course-builder button.cb-btn-add-new{line-height:1.5}@media(max-width:768px){#lp-course-builder .cb-tab-header{flex-direction:column;align-items:stretch;gap:12px}#lp-course-builder .cb-tab-header .cb-btn-add-new{justify-content:center}#lp-course-builder .cb-filter-fields{flex-direction:column;align-items:stretch}#lp-course-builder .cb-filter-search{min-width:100%}#lp-course-builder .cb-filter-actions{justify-content:flex-start}}#lp-course-builder .learn-press-tip{display:inline-flex;align-items:center;margin-top:2px;color:#6b7280;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer;position:relative}#lp-course-builder .learn-press-tip:before{font-family:\"lp-icon\";content:\"\\f059\"}#lp-course-builder .learn-press-tip>*{display:none;position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:8px;padding:8px 12px;background-color:#333;color:#fff !important;font-size:12px;line-height:1.5;text-align:center;border-radius:4px;white-space:normal;width:max-content;max-width:250px;z-index:999;box-shadow:0 4px 6px rgba(0,0,0,0.1);pointer-events:none}#lp-course-builder .learn-press-tip>*::after{content:\"\";position:absolute;top:100%;left:50%;transform:translateX(-50%);border-width:5px;border-style:solid;border-color:#333 transparent transparent transparent}#lp-course-builder .learn-press-tip p{color:#fff !important;margin-left:0 !important;width:100% !important;font-weight:500 !important}#lp-course-builder .learn-press-tip:hover>*{display:block}#lp-course-builder .cb-tab-course__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-search-form{position:relative;display:flex;align-items:center;border-radius:12px;padding:5px 0;gap:8px;margin-bottom:0;border:1px solid #e5e7eb;width:40%;max-width:500px}#lp-course-builder .lp-icon-search{font-size:16px;color:#7067ed;flex-shrink:0}#lp-course-builder .cb-input-search-course{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-course::placeholder{color:#999}#lp-course-builder .cb-search-btn{cursor:pointer;border:0;background:0}#lp-course-builder .cb-search-btn.loading{pointer-events:none}#lp-course-builder .cb-search-btn.loading i{display:none}#lp-course-builder .cb-btn-back a{text-decoration:none}#lp-course-builder .cb-list-course{margin:0;padding:0;list-style:none}#lp-course-builder .cb-list-course li.course{margin-bottom:20px}#lp-course-builder .course{background:#fff;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.06);border:1px solid #e5e7eb;transition:all .3s}#lp-course-builder .course:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1)}#lp-course-builder .course-item{display:flex;gap:20px;padding:16px;height:100%;position:relative}#lp-course-builder .course-thumbnail{position:relative;margin:-2px}@media(min-width:769px){#lp-course-builder .course-thumbnail{width:26%}}#lp-course-builder .course-thumbnail img{width:100%;border-radius:8px;object-fit:cover}#lp-course-builder .course-thumbnail .cb-item-status-badge{position:absolute;bottom:8px;right:8px;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}#lp-course-builder .course-thumbnail .cb-item-status-badge.offline{background:#1e40af;color:#fff}#lp-course-builder .course-img{width:100%;height:100%}#lp-course-builder .course-img img{width:100%;height:100%;object-fit:cover}#lp-course-builder .course-content{flex:1}#lp-course-builder .wap-course-title{margin-top:0;margin-bottom:8px}#lp-course-builder .course-permalink{text-decoration:none;color:#1e1e1e;font-size:18px;font-weight:700;display:block;transition:color .2s}#lp-course-builder .course-permalink:hover{color:#2e91fa}#lp-course-builder .course-title{text-decoration:none;line-height:1.4;font-size:20px;font-weight:600;color:#1e1e1e}#lp-course-builder .course-featured{display:inline-block;background-color:#ffd700;color:#333;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;margin-bottom:10px;text-transform:uppercase}#lp-course-builder .course-instructor__wrapper{display:flex;gap:5px;margin-bottom:12px;font-size:13px;color:#666}#lp-course-builder .course-instructor-category{margin-bottom:12px}#lp-course-builder .course-instructor-category>div{display:flex;gap:5px;align-items:center;flex-wrap:wrap}#lp-course-builder .course-by-label,#lp-course-builder .course-categories-label{color:#6b7280;font-size:14px}#lp-course-builder .course-category-name{color:#1e1e1e;font-size:14px;font-weight:500}#lp-course-builder .course-instructor a,#lp-course-builder .course-categories a{color:#2e91fa;text-decoration:none}#lp-course-builder .course-instructor a:hover,#lp-course-builder .course-categories a:hover{text-decoration:underline}#lp-course-builder .course-wrap-meta{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px}#lp-course-builder .instructor-display-name{font-size:14px;color:#1e1e1e}#lp-course-builder .meta-item{font-size:14px;color:#6b7280;display:flex;align-items:center;gap:8px}#lp-course-builder .meta-item i{font-size:16px;color:#7067ed}#lp-course-builder .meta-item .dashicons{font-size:16px;width:16px;height:16px;color:#7067ed}#lp-course-builder .meta-item>div{display:contents}#lp-course-builder .meta-item>div span{color:#6b7280}#lp-course-builder .course-bottom{margin-top:auto;display:flex;flex-direction:column;align-items:flex-start;gap:12px}#lp-course-builder .course-item-price-wrap{margin-bottom:0}#lp-course-builder .course-last-updated{font-size:12px;color:#999;position:absolute;bottom:16px;right:16px}#lp-course-builder .course-item-price .free{color:#2e91fa;font-weight:600;font-size:16px}#lp-course-builder .course-item-price .price{color:#e31a1b;font-weight:700;font-size:18px}#lp-course-builder .highlight-new-course{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .course-action{position:relative;display:flex;gap:8px}#lp-course-builder .course-action-editor{padding:0}#lp-course-builder .course-action-expanded{cursor:pointer;padding:7px;border:1px solid #e5e7eb;border-radius:8px;background:#fff;transition:all .2s;height:36px;width:36px;display:flex;align-items:center;justify-content:center}#lp-course-builder .course-action-expanded:hover{background:#f7f7f7;border-color:#d1d5db}#lp-course-builder .course-action-expanded svg{width:20px;height:20px;color:#6b7280}#lp-course-builder .course-action-expanded__items{display:none;position:absolute;min-width:160px;top:60px;right:16px;transform:translate(15px,-15px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .course-action-expanded__items.active{display:flex !important}#lp-course-builder .course-action-expanded__items .course-action-expanded__view,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}#lp-course-builder .course-action-expanded__items .course-action-expanded__view:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{color:#ef4444}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .course-action .wap-course-title{margin:0}#lp-course-builder .course-action .course-permalink{color:#2e91fa;font-size:14px;font-weight:500}#lp-course-builder .course-action .course-permalink:hover{text-decoration:underline}#lp-course-builder .btn-edit-course{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;font-size:14px;font-weight:600;border-radius:8px;padding:0 20px;height:36px;gap:8px;border:0;background:#7067ed;color:#fff;transition:all .2s;white-space:nowrap}#lp-course-builder .btn-edit-course:hover{background:#5b52d1}#lp-course-builder .course-status{display:inline-flex}#lp-course-builder .course-status span{font-size:13px;padding:4px 12px;border-radius:4px;font-weight:600;text-transform:capitalize;line-height:normal}#lp-course-builder .course-status.publish span{background:#e7f6e9;color:#28a746}#lp-course-builder .course-status.future span{background:#ffd700;color:#333}#lp-course-builder .course-status.trash span{color:#991b1b;background-color:#fee2e2}#lp-course-builder .learn-press-pagination{margin-top:40px;display:flex;justify-content:center}#lp-course-builder .page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}#lp-course-builder .page-numbers li{display:inline-block}#lp-course-builder .page-numbers a,#lp-course-builder .page-numbers span{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:6px;text-decoration:none;color:#898989;font-size:14px;transition:all .2s;background:#fff;font-weight:600}#lp-course-builder .page-numbers a:hover{background-color:#f7f7f7;border-color:#d1d5db;color:#1e1e1e}#lp-course-builder .page-numbers .current{background-color:#7067ed;color:#fff}#lp-course-builder .page-numbers .next,#lp-course-builder .page-numbers .prev{background-color:#f7f7f7;border-color:#d1d5db}#lp-course-builder .page-numbers .next:hover,#lp-course-builder .page-numbers .prev:hover{background-color:#7067ed;color:#fff}#lp-course-builder #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-course-builder #lp-material-container hr{display:none}#lp-course-builder .field-material__label{width:150px;max-width:150px;min-width:150px;margin-right:11px}#lp-course-builder .lp-material--field-wrap{display:flex;gap:11px;margin-top:12px}#lp-course-builder .lp-material--field-wrap label{color:#1e1e1e;font-size:14px;font-weight:600;width:100px}#lp-course-builder .lp-material--field-wrap:first-child{margin-top:0}#lp-course-builder .lp-material--field-wrap.field-action-wrap{justify-content:flex-start;flex-direction:row-reverse}#lp-course-builder .lp-material--field-external-link,#lp-course-builder .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material--field-method{width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}#lp-course-builder #lp-material--group-container .lp-material--group{padding:20px;border:1px solid #d1d5db;border-radius:12px;max-width:420px;margin-bottom:20px}#lp-course-builder #lp-material--group-container .lp-material--group:not(:has(*)){display:none}#lp-course-builder #btn-lp--add-material,#lp-course-builder #btn-lp--save-material,#lp-course-builder .lp-material-save-field,#lp-course-builder .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}#lp-course-builder #btn-lp--add-material{color:#7067ed;border:1px solid #7067ed}#lp-course-builder #btn-lp--add-material:hover{background-color:#f7f7f7;border-color:#7067ed}#lp-course-builder #btn-lp--save-material,#lp-course-builder .lp-material-save-field{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-course-builder #btn-lp--save-material:hover,#lp-course-builder .lp-material-save-field:hover{background-color:#5b52d1;border-color:#5b52d1}#lp-course-builder .lp-material--delete{color:#6b7280;border:1px solid #e5e7eb}#lp-course-builder .lp-material--delete:hover{background-color:#f7f7f7;color:#1e1e1e;border-color:#1e1e1e}#lp-course-builder .lp-material--upload-wrap label{cursor:pointer;width:100%;display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-left:86px;overflow:hidden}#lp-course-builder .lp-material--upload-wrap label.has-selected-file{border-color:#7067ed;background-color:#f9fafb;font-size:0}#lp-course-builder .lp-material--upload-wrap label.has-selected-file::before{font-size:14px}#lp-course-builder .lp-material--upload-wrap label.has-selected-file::after{content:attr(data-file-name);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600}#lp-course-builder .lp-material--upload-wrap label:hover{background-color:#f7f7f7;border-color:#9ca3af}#lp-course-builder .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-course-builder .lp-material--upload-wrap label::before{content:\"📁 \";margin-right:5px}#lp-course-builder .lp-material--field-upload{display:none}#lp-course-builder .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}#lp-course-builder .lp-material--table th,#lp-course-builder .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:left}#lp-course-builder .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}#lp-course-builder .lp-material--table td{font-size:14px;color:#1e1e1e}#lp-course-builder .lp-material--table tr:last-child td{border-bottom:0}#lp-course-builder .lp-material--table tr:hover td{background-color:#f9fafb}#lp-course-builder .lp-material--table thead.hidden{display:none}#lp-course-builder .ts-control{padding:8px 8px 8px 8px !important}@media(max-width:1024px){#lp-course-builder .cb-list-course{gap:15px}}@media(max-width:768px){#lp-course-builder .cb-tab-course__action{flex-direction:column;gap:16px;align-items:stretch}#lp-course-builder .cb-search-form{width:100%}#lp-course-builder .cb-btn-add-new{text-align:center;justify-content:center}#lp-course-builder .course-item{flex-direction:column}#lp-course-builder .cb-list-course{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;margin-bottom:24px}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:repeat(3,1fr)}}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card{background:#fff;border-radius:12px;padding:24px 20px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb;transition:all .2s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1);transform:translateY(-2px)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon{width:48px;height:48px;border-radius:50%;background:var(--card-bg,#f9fafb);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-bottom:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon svg{width:22px;height:22px;color:var(--card-color,#7067ed)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__label{font-size:12px;color:#6b7280;font-weight:500;order:1}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__value{font-size:24px;font-weight:700;color:#1e1e1e;line-height:1.2;order:2}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row{display:grid;gap:20px;margin-bottom:24px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin{grid-template-columns:1fr 1fr 280px}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin{grid-template-columns:1fr 1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--instructor{grid-template-columns:1fr 1fr}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter{padding:5px 28px 5px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:12px;color:#6b7280;cursor:pointer;outline:0;height:auto}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body{height:220px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body canvas{width:100% !important;height:100% !important}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors{grid-column:1\u002F-1}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__header{margin-bottom:20px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__title{display:flex;align-items:center;gap:12px;font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__list{display:flex;flex-direction:column;gap:20px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item{display:flex;align-items:center;gap:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar{width:48px;height:48px;border-radius:50%;overflow:hidden;flex-shrink:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__info{display:flex;flex-direction:column;gap:4px;min-width:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__name{font-size:15px;font-weight:600;color:#1e1e1e;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__meta{font-size:13px;color:#6b7280;line-height:1.2}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .no-data{text-align:center;color:#6b7280;font-style:italic;padding:20px 0;font-size:12px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:24px;overflow-x:hidden;transition:overflow-x .3s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper:hover{overflow-x:auto}@media(max-width:900px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses{background:#fff;border-radius:12px;padding:20px 24px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .enrolled-students-total{color:#7067ed;font-weight:600}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .revenue-total{color:#e31a1b;font-weight:700}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__list{display:flex;flex-direction:column}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item{display:flex;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:last-child{border-bottom:0;padding-bottom:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:first-child{padding-top:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb{width:80px;height:56px;border-radius:8px;overflow:hidden;flex-shrink:0;background:#f9fafb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb img{width:100%;height:100%;object-fit:cover}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#f9fafb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder svg{color:#9ca3af}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title{font-size:15px;font-weight:700;color:#1e1e1e;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title:hover{color:#7067ed}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .author{color:#7067ed}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .category{color:#1e1e1e}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__price{font-size:12px;font-weight:600;color:#1e1e1e;margin-top:2px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge-wrapper{flex-shrink:0;display:flex;align-items:center}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge{background:#e0f2fe;color:#0284c7;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:600}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__stats{text-align:right;flex-shrink:0;display:flex;flex-direction:column;gap:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue .revenue-amount{color:#ef4444;font-weight:700}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__sold{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .no-data{text-align:center;color:#6b7280;font-style:italic;padding:24px 0;font-size:12px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions{background:#fff}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0 0 16px 0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn{display:flex;align-items:center;gap:10px;padding:14px 18px;border-radius:8px;background:var(--action-bg,#f9fafb);text-decoration:none;transition:all .2s ease;border:1px solid transparent}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn:hover{border-color:var(--action-color,#e5e7eb);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,0.06)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--action-color)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon svg{width:20px;height:20px;color:var(--action-color,#6b7280)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__label{font-size:14px;font-weight:500;color:#1e1e1e}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses{background:#fff}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .recent-courses__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0 0 16px 0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .cb-list-course{padding-bottom:0}#lp-course-builder .cb-list-quiz{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-quiz__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-quiz{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-right:10px}#lp-course-builder .cb-input-search-quiz::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .quiz-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .quiz-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .quiz-item{border-bottom:0}#lp-course-builder .highlight-new-quiz{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-quiz-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-quiz-title button,#lp-course-builder .wap-quiz-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-quiz-title button:hover,#lp-course-builder .wap-quiz-title a:hover{color:#7067ed}#lp-course-builder .quiz__date,#lp-course-builder .quiz__duration,#lp-course-builder .quiz__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-left:8px}#lp-course-builder .quiz__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .quiz__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .quiz-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .quiz-action-editor{display:flex}#lp-course-builder .btn-edit-quiz{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-quiz svg{width:16px;height:16px}#lp-course-builder .btn-edit-quiz:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-quiz.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-quiz.loading svg{display:none}#lp-course-builder .quiz-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .quiz-action-expanded.loading::before{margin-right:0;margin-top:0}#lp-course-builder .quiz-action-expanded.loading svg{display:none}#lp-course-builder .quiz-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .quiz-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .quiz-action-expanded:hover svg{color:#7067ed}#lp-course-builder .quiz-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;right:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__quiz-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__quiz-tab .cb-list-table-header,#lp-course-builder .courses-builder__quiz-tab .quiz-item{grid-template-columns:2fr 1.5fr 80px 1fr 1fr 100px 80px}#lp-course-builder .courses-builder__quiz-tab .lesson-assigned-courses .label{display:none}#lp-course-builder .cb-list-quiz{border:0;border-radius:0}#lp-course-builder .quiz-status,#lp-course-builder .quizzes-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .quiz-status.publish,#lp-course-builder .quizzes-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .quiz-status.draft,#lp-course-builder .quizzes-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .quiz-status.pending,#lp-course-builder .quizzes-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .quiz-status.private,#lp-course-builder .quizzes-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .quiz-status.trash,#lp-course-builder .quizzes-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .quiz-assigned-courses,#lp-course-builder .lesson-assigned-courses{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .quiz-assigned-courses .label,#lp-course-builder .lesson-assigned-courses .label{color:#6b7280;margin-right:5px}#lp-course-builder .quiz-assigned-courses a,#lp-course-builder .lesson-assigned-courses a{text-decoration:none;color:#2e91fa}#lp-course-builder .quiz-assigned-courses a:hover,#lp-course-builder .lesson-assigned-courses a:hover{text-decoration:underline}#lp-course-builder .quiz-assigned-courses .label,#lp-course-builder .lesson-assigned-courses .label{color:#1e1e1e}#lp-course-builder .quiz-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);right:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .quiz-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{color:#ef4444}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .cb-list-question{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-question__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-question{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-right:10px}#lp-course-builder .cb-input-search-question::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .question-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .question-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .question-item{border-bottom:0}#lp-course-builder .highlight-new-question{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-question-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-question-title button,#lp-course-builder .wap-question-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-question-title button:hover,#lp-course-builder .wap-question-title a:hover{color:#7067ed}#lp-course-builder .question__date,#lp-course-builder .question__duration,#lp-course-builder .question__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-left:8px}#lp-course-builder .question__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .question__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .question-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .question-action-editor{display:flex}#lp-course-builder .btn-edit-question{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-question svg{width:16px;height:16px}#lp-course-builder .btn-edit-question:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-question.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-question.loading svg{display:none}#lp-course-builder .question-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .question-action-expanded.loading::before{margin-right:0;margin-top:0}#lp-course-builder .question-action-expanded.loading svg{display:none}#lp-course-builder .question-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .question-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .question-action-expanded:hover svg{color:#7067ed}#lp-course-builder .question-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;right:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__question-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__question-tab .cb-list-table-header,#lp-course-builder .courses-builder__question-tab .question-item{grid-template-columns:2fr 1.5fr 1fr 100px 100px 80px}#lp-course-builder .courses-builder__question-tab .question-assigned-quizzes .label{display:none}#lp-course-builder .cb-list-question{border:0;border-radius:0}#lp-course-builder .question-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .question-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .question-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .question-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .question-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .question-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .question-assigned-quizzes{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .question-assigned-quizzes .label{color:#6b7280;margin-right:5px}#lp-course-builder .question-assigned-quizzes a{text-decoration:none;color:#2e91fa}#lp-course-builder .question-assigned-quizzes a:hover{text-decoration:underline}#lp-course-builder .question-assigned-quizzes .label{color:#1e1e1e}#lp-course-builder .question-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);right:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .question-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__restore,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__restore:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{color:#ef4444}#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .cb-list-lesson{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-lesson__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-lesson{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-right:10px}#lp-course-builder .cb-input-search-lesson::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .lesson-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .lesson-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .lesson-item{border-bottom:0}#lp-course-builder .highlight-new-lesson{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-lesson-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-lesson-title button,#lp-course-builder .wap-lesson-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-lesson-title button:hover,#lp-course-builder .wap-lesson-title a:hover{color:#7067ed}#lp-course-builder .lesson__date,#lp-course-builder .lesson__duration,#lp-course-builder .lesson__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-left:8px}#lp-course-builder .lesson__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .lesson__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .lesson-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .lesson-action-editor{display:flex}#lp-course-builder .btn-edit-lesson{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-lesson svg{width:16px;height:16px}#lp-course-builder .btn-edit-lesson:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-lesson.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-lesson.loading svg{display:none}#lp-course-builder .lesson-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .lesson-action-expanded.loading::before{margin-right:0;margin-top:0}#lp-course-builder .lesson-action-expanded.loading svg{display:none}#lp-course-builder .lesson-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .lesson-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .lesson-action-expanded:hover svg{color:#7067ed}#lp-course-builder .lesson-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;right:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__lesson-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__lesson-tab .cb-list-table-header,#lp-course-builder .courses-builder__lesson-tab .lesson-item{grid-template-columns:2fr 1.5fr 1fr 100px 80px 80px}#lp-course-builder .courses-builder__lesson-tab .lesson-assigned-courses .label{display:none}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item{cursor:pointer;display:flex;margin-left:12px;justify-content:flex-start;border:0;padding:0}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading,#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading{pointer-events:none;opacity:.7;margin-left:19px}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading a,#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading a{display:none}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:16px;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .cb-list-lesson{border:0;border-radius:0}#lp-course-builder .lesson-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .lesson-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .lesson-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .lesson-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .lesson-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .lesson-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .lesson-assigned-courses{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .lesson-assigned-courses .label{color:#6b7280;margin-right:5px}#lp-course-builder .lesson-assigned-courses a{text-decoration:none;color:#2e91fa}#lp-course-builder .lesson-assigned-courses a:hover{text-decoration:underline}#lp-course-builder .lesson-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);right:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .lesson-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{color:#ef4444}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .lp-cb-settings .lp-meta-box,#lp-course-builder .lp-cb-settings .lp-meta-box-wrap{margin:0;background:transparent}#lp-course-builder .lp-cb-settings .lp-meta-box .lp-meta-box__inner,#lp-course-builder .lp-cb-settings .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}#lp-course-builder .lp-cb-settings .form-field,#lp-course-builder .lp-cb-settings .lp-meta-box__duration,#lp-course-builder .lp-cb-settings .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}#lp-course-builder .lp-cb-settings .form-field>label,#lp-course-builder .lp-cb-settings .form-field label span,#lp-course-builder .lp-cb-settings .lp-meta-box__duration>label,#lp-course-builder .lp-cb-settings .lp-meta-box__duration label span,#lp-course-builder .lp-cb-settings .lp-meta-box-field>label,#lp-course-builder .lp-cb-settings .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}#lp-course-builder .lp-cb-settings .form-field input[type=number],#lp-course-builder .lp-cb-settings .form-field input[type=text],#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-cb-settings .form-field input[type=number]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=text]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]{width:80px !important}#lp-course-builder .lp-cb-settings .form-field select,#lp-course-builder .lp-cb-settings .lp-meta-box__duration select,#lp-course-builder .lp-cb-settings .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}#lp-course-builder .lp-cb-settings .form-field select:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration select:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=radio],#lp-course-builder .lp-cb-settings .form-field input[type=checkbox],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:before,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field .description,#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description,#lp-course-builder .lp-cb-settings .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}#lp-course-builder .lp-cb-settings .form-field .description:has(+.learn-press-tip),#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description:has(+.learn-press-tip),#lp-course-builder .lp-cb-settings .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}#lp-course-builder .lp-cb-settings .form-field>.learn-press-tip,#lp-course-builder .lp-cb-settings .lp-meta-box__duration>.learn-press-tip,#lp-course-builder .lp-cb-settings .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting{display:flex;flex-direction:column;gap:10px;width:100%;max-width:620px}#lp-course-builder .lp-cb-settings .lp-cb-settings__section{margin-bottom:20px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:10px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn{min-height:34px;border-radius:6px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger){display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):hover,#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):focus{background:#5b52d1;border-color:#5b52d1;color:#fff}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn.is-hidden{display:none}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger{display:inline-flex;align-items:center;gap:8px;background-color:#fff;color:#6b7280;border:1px solid #e5e7eb;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:hover,#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:focus{color:#dc2626;border-color:#fee2e2;background:#fee2e2}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-wrap{display:flex;flex-direction:column;gap:8px;width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row{display:flex;align-items:center;justify-content:space-between;gap:12px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-label{font-size:13px;font-weight:600;color:#1e1e1e;white-space:nowrap}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default{display:inline-flex;align-items:center;justify-content:flex-start;width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default.is-hidden{display:none}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-svg{display:block;width:181px;max-width:100%;height:auto}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-image{display:block;width:auto;max-width:100%;height:auto;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img{display:block;width:auto;height:auto;max-width:260px;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img.is-hidden{display:none}@media(max-width:767px){#lp-course-builder .lp-cb-settings .lp-cb-logo-setting{max-width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row{flex-direction:column;align-items:flex-start}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview{width:100%;max-width:100%}}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-right:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-left:3px solid transparent;margin-left:-3px}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-left-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-option-disabled{pointer-events:none;opacity:.5}#lp-course-builder .cb-terms-header__label-wrap{display:inline-flex;align-items:center;gap:6px}#lp-course-builder .cb-terms-header__btn-search{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;border-radius:999px;background:transparent;color:#9ca3af;cursor:pointer;transition:all .2s ease}#lp-course-builder .cb-terms-header__btn-search .lp-icon-search{width:14px;height:14px;font-size:14px;color:#9ca3af}#lp-course-builder .cb-terms-header__btn-search:hover{background:#eef1ff}#lp-course-builder .cb-terms-header__btn-search:hover .lp-icon-search{color:#7067ed}#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true]{background:#eef1ff}#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] .lp-icon-search{color:#7067ed}#lp-course-builder .cb-terms-search-toolbar{max-height:0;opacity:0;overflow:hidden;pointer-events:none;margin-bottom:0 !important;transition:max-height .25s ease,opacity .2s ease,margin-bottom .25s ease}#lp-course-builder .cb-terms-search-toolbar.is-open{max-height:80px;opacity:1;pointer-events:auto;margin-bottom:16px !important}.lp-course-builder-content__section .lp-meta-box,.lp-course-builder-content__section .lp-meta-box-wrap{margin:0;background:transparent}.lp-course-builder-content__section .lp-meta-box .lp-meta-box__inner,.lp-course-builder-content__section .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-course-builder-content__section .form-field,.lp-course-builder-content__section .lp-meta-box__duration,.lp-course-builder-content__section .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-course-builder-content__section .form-field>label,.lp-course-builder-content__section .form-field label span,.lp-course-builder-content__section .lp-meta-box__duration>label,.lp-course-builder-content__section .lp-meta-box__duration label span,.lp-course-builder-content__section .lp-meta-box-field>label,.lp-course-builder-content__section .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-course-builder-content__section .form-field input[type=number],.lp-course-builder-content__section .form-field input[type=text],.lp-course-builder-content__section .form-field input[type=datetime-local],.lp-course-builder-content__section .lp-meta-box__duration input[type=number],.lp-course-builder-content__section .lp-meta-box__duration input[type=text],.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local],.lp-course-builder-content__section .lp-meta-box-field input[type=number],.lp-course-builder-content__section .lp-meta-box-field input[type=text],.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-course-builder-content__section .form-field input[type=number]:focus,.lp-course-builder-content__section .form-field input[type=text]:focus,.lp-course-builder-content__section .form-field input[type=datetime-local]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=number]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=text]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=number]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=text]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field input[type=number],.lp-course-builder-content__section .lp-meta-box__duration input[type=number],.lp-course-builder-content__section .lp-meta-box-field input[type=number]{width:80px !important}.lp-course-builder-content__section .form-field select,.lp-course-builder-content__section .lp-meta-box__duration select,.lp-course-builder-content__section .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-course-builder-content__section .form-field select:focus,.lp-course-builder-content__section .lp-meta-box__duration select:focus,.lp-course-builder-content__section .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field input[type=radio],.lp-course-builder-content__section .form-field input[type=checkbox],.lp-course-builder-content__section .lp-meta-box__duration input[type=radio],.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox],.lp-course-builder-content__section .lp-meta-box-field input[type=radio],.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-course-builder-content__section .form-field input[type=radio]:before,.lp-course-builder-content__section .form-field input[type=checkbox]:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:before,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:before,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-content__section .form-field input[type=radio]:checked,.lp-course-builder-content__section .form-field input[type=checkbox]:checked,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-course-builder-content__section .form-field input[type=radio]:checked:before,.lp-course-builder-content__section .form-field input[type=checkbox]:checked:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked:before,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.lp-course-builder-content__section .form-field input[type=radio]:focus,.lp-course-builder-content__section .form-field input[type=checkbox]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field .description,.lp-course-builder-content__section .lp-meta-box__duration .description,.lp-course-builder-content__section .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}.lp-course-builder-content__section .form-field .description:has(+.learn-press-tip),.lp-course-builder-content__section .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-course-builder-content__section .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-course-builder-content__section .form-field>.learn-press-tip,.lp-course-builder-content__section .lp-meta-box__duration>.learn-press-tip,.lp-course-builder-content__section .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-course-builder-content__section ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-course-builder-content__section ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-course-builder-content__section ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-course-builder-content__section ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-content{display:flex;gap:40px}.lp-course-builder-content__section .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1;min-width:0}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__label .required{color:#ef4444}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-left:auto;transition:all .2s ease}.lp-course-builder-content__section .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.lp-course-builder-content__section .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-permalink{margin-bottom:20px}.lp-course-builder-content__section .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-content__section .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-content__section .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-content__section .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-content__section .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-content__section .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-content__section .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-content__section .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-content__section .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-content__section .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-content__section .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-content__section .cb-permalink-prefix strong{color:#64748b;font-weight:600}.lp-course-builder-content__section .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-content__section .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-content__section .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-content__section .cb-permalink-slug-input::placeholder{color:#94a3b8}.lp-course-builder-content__section .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-content__section .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-content__section .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-content__section .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-content__section .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-course-builder-content__section .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.lp-course-builder-content__section .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-course-builder-content__section .cb-course-edit-categories__search-wrap{display:block}.lp-course-builder-content__section .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.lp-course-builder-content__section .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-tag-chip{display:inline-flex;align-items:center}.lp-course-builder-content__section .cb-tag-chip input[type=checkbox]{display:none}.lp-course-builder-content__section .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-course-builder-content__section .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.lp-course-builder-content__section .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-course-builder-content__section .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.lp-course-builder-content__section .cb-featured-image-dropzone:hover a{color:#7067ed}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.lp-course-builder-content__section .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.lp-course-builder-content__section .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-course-builder-content__section .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.lp-course-builder-content__section .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.lp-course-builder-content__section .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-course-builder-content__section .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.lp-course-builder-content__section .cb-featured-image-link:hover{text-decoration:underline}.lp-course-builder-content__section .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-course-builder-content__section .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-change-featured-image:hover{background:#7067ed;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-course-builder-content__section .cb-course-edit-publish{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.lp-course-builder-content__section .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-publish__row select{padding:6px 32px 6px 14px !important}.lp-course-builder-content__section .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-content__section .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-course-builder-content__section .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-set-featured-image:hover{background:#7067ed;color:#fff}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__input:focus,.lp-course-builder-content__section .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-course-builder-content__section .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover{background:#333}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-course-builder-content__section .cb-course-edit-content{flex-direction:column}.lp-course-builder-content__section .cb-course-edit-column--left{flex:1;max-width:100%}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-course-builder-content__section .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1}.lp-course-builder-content__section .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-course-builder-content__section .cb-course-edit-categories__search-wrap{display:block}.lp-course-builder-content__section .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-course-builder-content__section .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.lp-course-builder-content__section .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-tag-chip{display:inline-flex;align-items:center}.lp-course-builder-content__section .cb-tag-chip input[type=checkbox]{display:none}.lp-course-builder-content__section .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-course-builder-content__section .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.lp-course-builder-content__section .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-remove-featured-image,.lp-course-builder-content__section .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover,.lp-course-builder-content__section .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.lp-course-builder-content__section .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.lp-course-builder-content__section .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-content__section .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-course-builder-content__section .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__input:focus,.lp-course-builder-content__section .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-course-builder-content__section .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.lp-course-builder-content__section #general_course_data .form-field,.lp-course-builder-content__section #offline_course_data .form-field,.lp-course-builder-content__section #price_course_data .form-field,.lp-course-builder-content__section #extra_course_data .form-field{margin-bottom:24px}.lp-course-builder-content__section #general_course_data ._lp_featured_review_field{align-items:flex-start}.lp-course-builder-content__section #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.lp-course-builder-content__section #general_course_data ._lp_students_field .description{margin-top:-3px}.lp-course-builder-content__section #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.lp-course-builder-content__section #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.lp-course-builder-content__section #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-left:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-left:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.lp-course-builder-content__section .lp_course_extra_meta_box,.lp-course-builder-content__section .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.lp-course-builder-content__section .lp_course_extra_meta_box>label,.lp-course-builder-content__section .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.lp-course-builder-content__section .lp_course_extra_meta_box__content,.lp-course-builder-content__section .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.lp-course-builder-content__section .lp_course_extra_meta_box__fields,.lp-course-builder-content__section .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.lp-course-builder-content__section .lp_course_extra_meta_box__field,.lp-course-builder-content__section .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.lp-course-builder-content__section .lp_course_extra_meta_box__add,.lp-course-builder-content__section .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover,.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.lp-course-builder-content__section .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label input[type=text],.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label input[type=text]:focus,.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.lp-course-builder-content__section .lp_course_faq_meta_box__add,.lp-course-builder-content__section .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover,.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.lp-course-builder-content__section ._lp_block_finished_field{margin-top:-8px !important}.lp-course-builder-content__section #extra_course_data .form-field{align-items:start}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-course-builder-content__section #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.lp-course-builder-content__section #extra_course_data input[type=text]:focus{box-shadow:none}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;left:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;right:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content{width:100%}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 40px 16px 36px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;left:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;right:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-course-builder-content__section #author_course_data .ts-control{border-radius:6px;padding:5px !important}.lp-course-builder-content__section #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.lp-course-builder-content__section #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .lp-meta-box,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap{margin:0;background:transparent}.lp-cb-tab-content .cb-section__course-edit .lp-meta-box .lp-meta-box__inner,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-cb-tab-content .cb-section__course-edit .form-field,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .form-field>label,.lp-cb-tab-content .cb-section__course-edit .form-field label span,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration>label,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration label span,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field>label,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]{width:80px !important}.lp-cb-tab-content .cb-section__course-edit .form-field select,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .form-field select:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field .description,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}.lp-cb-tab-content .cb-section__course-edit .form-field .description:has(+.learn-press-tip),.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-cb-tab-content .cb-section__course-edit .form-field>.learn-press-tip,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration>.learn-press-tip,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{display:flex;gap:40px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1;min-width:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required{color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-left:auto;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display.lp-hidden{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor.lp-hidden{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix strong{color:#64748b;font-weight:600}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input::placeholder{color:#94a3b8}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap{display:block}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip{display:inline-flex;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox]{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover a{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover{background:#7067ed;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row select{padding:6px 32px 6px 14px !important}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#7067ed;color:#fff}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:1;max-width:100%}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap{display:block}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip{display:inline-flex;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox]{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image,.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover,.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.lp-cb-tab-content .cb-section__course-edit #general_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #offline_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #price_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field{align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_students_field .description{margin-top:-3px}.lp-cb-tab-content .cb-section__course-edit #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.lp-cb-tab-content .cb-section__course-edit #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-left:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-left:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box>label,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__content,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__fields,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.lp-cb-tab-content .cb-section__course-edit ._lp_block_finished_field{margin-top:-8px !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field{align-items:start}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]:focus{box-shadow:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;left:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;right:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content{width:100%}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 40px 16px 36px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;left:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;right:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control{border-radius:6px;padding:5px !important}.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__header{display:none !important}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-right:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-left:3px solid transparent;margin-left:-3px}ul.lp-meta-box__course-tab__tabs li a i{display:none}ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}ul.lp-meta-box__course-tab__tabs li.active a,ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#3b82f6;font-weight:600;border-left-color:#3b82f6;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}@media(max-width:768px){.lp-meta-box__course-tab{flex-direction:column}ul.lp-meta-box__course-tab__tabs{width:100%;border-right:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:12px;background:#f9fafb}ul.lp-meta-box__course-tab__tabs li{flex-shrink:0;padding:0 4px}ul.lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;margin-left:0;white-space:nowrap}ul.lp-meta-box__course-tab__tabs li.active a{border-left:0;border-bottom-color:#3b82f6}}#lp-course-builder-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:0;color:#1f2937;max-width:100%;box-sizing:border-box}#lp-course-builder-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}#lp-course-builder-content #lp-course-edit-curriculum .heading h4{color:#898989}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .count-sections{margin-left:0}#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .lp-btn-generate-with-ai{margin-left:auto}#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,#lp-course-builder-content #lp-course-edit-curriculum .count-sections,#lp-course-builder-content #lp-course-edit-curriculum .total-items{background:transparent;color:#898989;font-size:12px;font-weight:600;padding:0;border-radius:12px;margin-left:10px}#lp-course-builder-content #lp-course-edit-curriculum .count-sections{margin-left:auto}#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections{border:0}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:16px;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section.focus{border-color:#7067ed !important}#lp-course-builder-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-right:12px;font-size:16px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag:hover{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-left:8px;cursor:pointer;font-weight:500}#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{background-color:#eef1ff;border-radius:12px 12px 0 0}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:0;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover,#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:transparent;border:0;outline:0;box-shadow:none}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title:hover{background:#5b52d1}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-title:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-description:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-item-title:hover{border-color:#7067ed;color:#7067ed;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-edit-section-title:hover{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-left:0;color:#777;cursor:pointer}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}#lp-course-builder-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#fff;border-radius:0 0 12px 12px;border-top:unset}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover{border-color:#d1d5db}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus,#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus{border-color:#7067ed !important}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus .item-ico-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus .item-ico-type{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type{background-size:contain;background-repeat:no-repeat;background-position:center;opacity:.8;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f15b\";font-family:\"lp-icon\";font-size:18px}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f12e\";font-family:\"lp-icon\";font-size:18px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:4px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover{background:#f7f7f7}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a{color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a.lp-icon-trash-o{color:#ef4444}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}#lp-course-builder-content #lp-course-edit-curriculum .section-item:not(.lp_lesson) .lp-btn-set-preview-item{display:none}#lp-course-builder-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex;opacity:.7}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover{opacity:1;color:#7067ee;border-color:#eef1ff;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum button,#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex;min-width:fit-content}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary{background-color:#7067ed;border-color:#7067ed;color:#fff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary:hover{background:#5a51c1;color:#fff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item-cancel.button{background-color:transparent;border:0;color:#aaa}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-left:auto;border-style:dashed !important}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:5px 20px;display:flex;align-items:center}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#7067ee;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within .lp-icon-plus{color:#7067ee}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px 0;border:0;border-radius:6px;font-size:14px;outline:0;transition:border .2s}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#7067ed;color:#fff;border:0;padding:8px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content;margin-left:20px}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#5a51c1}#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden{display:none !important}#taxonomy-course_category.categorydiv{border:none !important;box-shadow:none !important;background:transparent !important;margin:0 !important}#taxonomy-course_category.categorydiv .category-tabs{display:flex !important;gap:20px;margin:0 0 15px 0 !important;padding:0 !important;border-bottom:1px solid #f5f5f5}#taxonomy-course_category.categorydiv .category-tabs li{display:inline-block !important;margin:0 !important;padding:0 !important;border:0}#taxonomy-course_category.categorydiv .category-tabs li a{text-decoration:none;font-size:14px;font-weight:600;color:#9ca3af;padding-bottom:8px;display:block;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}#taxonomy-course_category.categorydiv .category-tabs li.tabs a,#taxonomy-course_category.categorydiv .category-tabs li:hover a{color:#7067ed;border-bottom-color:#7067ed}#taxonomy-course_category.categorydiv .tabs-panel{border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;display:none}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar{width:6px}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}#taxonomy-course_category.categorydiv ul.categorychecklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 30px;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv ul.categorychecklist li{margin:0 !important;padding:0 !important;width:100%;list-style:none}#taxonomy-course_category.categorydiv ul.children{display:none !important;margin-left:20px !important;margin-top:5px !important;padding-left:10px !important;border-left:2px solid #e5e7eb;transition:all .3s ease}#taxonomy-course_category.categorydiv ul.children li{margin-bottom:5px !important}#taxonomy-course_category.categorydiv li.children-visible>ul.children{display:block !important}#taxonomy-course_category.categorydiv input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;margin-right:8px !important;position:relative}#taxonomy-course_category.categorydiv input[type=checkbox]:checked{background:#28a746;border-color:#28a746}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::after{content:\"\";position:absolute;left:4px;top:1px;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::before{content:\"\"}#taxonomy-course_category.categorydiv label{display:inline-flex !important;align-items:center;width:auto !important;font-size:14px;color:#1e1e1e;cursor:pointer;line-height:1.5}#course_category-adder{display:none !important}#course_category-add-toggle{text-decoration:none;font-weight:600;font-size:14px;color:#1e1e1e;display:flex;align-items:center}#course_category-add-toggle:hover{color:#2563eb}#course_category-add{display:none;margin-top:15px}#course_category-add label{display:none !important}#course_category-add input[type=text],#course_category-add select{width:100%;max-width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;margin-bottom:10px;font-size:14px;height:40px}#course_category-add-submit{background:#1e1e1e;color:#fff;border:0;padding:8px 20px;border-radius:6px;font-weight:500;cursor:pointer}#course_category-add-submit:hover{background:#333}.lp-cat-toggle{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-left:5px;cursor:pointer;color:#9ca3af;transition:transform .2s ease,color .2s;font-size:12px}.lp-cat-toggle::before{content:\"\\f347\";font-family:dashicons}.lp-cat-toggle:hover{color:#1e1e1e;background-color:#f3f4f6;border-radius:50%}li.children-visible>label>.lp-cat-toggle{transform:rotate(180deg)}.lp-course-builder-content__section .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .lesson-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .lesson-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__lesson-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-lesson-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .lesson-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-right:0 !important}.lp-course-builder-content__section .lesson-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .lesson-assigned-courses a,.lp-course-builder-content__section .lesson-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-lesson-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section input.cb-lesson-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section input.cb-lesson-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-lesson-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-lesson-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-content__section .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-content__section .cb-button.cb-btn-update__lesson{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__lesson{background:#dc2626;color:#fff}.lp-course-builder-content__section .lp-material-btn-wrap{display:flex;gap:12px}.lp-course-builder-content__section #lp-material--group-container{padding:20px;border:1px solid #f5f5f5;border-radius:12px;max-width:420px}.lp-course-builder-content__section #btn-lp--add-material,.lp-course-builder-content__section #btn-lp--save-material{padding:8px 25px;border-radius:5px;background:#fff;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db}.lp-course-builder-content__section table.lp-material--table thead.hidden{display:none}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content{display:flex;gap:40px;align-items:flex-start}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left{flex:0 0 400px;max-width:400px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right{flex:1;min-width:0}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned{margin-bottom:20px;font-size:14px;line-height:1.6}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned .label{font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a{color:#7067ed;text-decoration:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink{margin-bottom:20px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder{display:block;font-size:13px;line-height:1.5;word-break:break-all}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url{color:#7067ed;text-decoration:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder{color:#374151}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url{display:block;font-size:13px;line-height:1.5;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-prefix,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-prefix,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-input-row,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-input-row,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-actions,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-actions,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__title{margin:0 0 12px;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__control{width:100%;height:34px;padding:6px 32px 6px 14px !important;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:14px;color:#1a1a1a}@media(max-width:1024px){.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content{flex-direction:column;gap:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left{flex-basis:auto;max-width:100%;width:100%}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right{width:100%}}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-list-questions .lp-question-item .lp-question-type-label{background-color:#eef1ff;color:#7067ed;font-size:12px;font-weight:600;padding:4px 10px;border-radius:6px;margin-right:10px;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding:20px;background-color:#f7f7f7;border-radius:12px 12px 0 0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header label{font-size:15px;font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-label{background-color:#eef1ff;color:#7067ed;font-size:12px;font-weight:600;padding:4px 10px;border-radius:6px;margin-right:10px;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-answers-config,.lp-course-builder-canvas .cb-section__lesson-edit .lp-answers-config,.lp-course-builder-canvas .cb-section__question-edit .lp-answers-config,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-answers-config{padding:0 16px 16px 16px;margin-top:15px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap{display:flex;align-items:center;gap:10px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new{flex:1;height:38px;padding:0 12px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#1e1e1e;cursor:pointer;outline:0;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:right 10px center;background-size:14px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new:focus{border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type{display:inline-flex;align-items:center;gap:6px;background-color:#eef1ff;color:#7067ed;border:0;padding:9px 18px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type:hover{background-color:#7067ed;color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner{font-size:14px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit{border:1px solid #f5f5f5;border-radius:12px;overflow:hidden}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit .wp-editor-wrap{margin:0 20px 20px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-by-type,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-by-type,.lp-course-builder-canvas .cb-section__question-edit .lp-question-by-type,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-by-type{border:1px solid #f5f5f5;border-radius:12px;margin-top:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-choice-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-choice-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-choice-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-choice-header{display:flex;justify-content:space-between;padding:0 4px 8px 4px;font-size:12px;color:#898989;font-weight:500;margin-bottom:8px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item{display:flex;align-items:center;margin-bottom:12px;border-radius:6px;padding:12px 16px;border:0;background:#fff;position:relative}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item .drag{color:#7067ed;cursor:move;margin-right:12px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input{flex-grow:1;padding:10px 14px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-right:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-delete-question-answer{color:#9ca3af;cursor:pointer;opacity:0;transition:opacity .2s;margin-right:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item:hover .lp-btn-delete-question-answer{opacity:1;color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;outline:0;transition:border-color .2s;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]{border-radius:4px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input:checked{border-color:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio]:checked::after{content:\"\";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:10px;height:10px;background:#28a746;border-radius:50%}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked::after{content:\"\";position:absolute;top:50%;left:50%;width:5px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg);background:transparent;border-radius:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new{display:flex;align-items:center;margin-top:16px;padding:24px 0 0 0;border:0;border-top:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new .lp-icon-plus{color:#7067ed;margin-right:12px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input{flex-grow:1;border:1px solid #e5e7eb;padding:10px 14px;border-radius:6px;font-size:14px;color:#1e1e1e;margin-right:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary{background:#fff;color:#374151;border:1px solid #d1d5db;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;min-width:fit-content;transition:all .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active{background:#eef1ff;color:#7067ed;border-color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover{background:#7067ed;color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary:hover{color:#374151;background:#f7f7f7;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content{background:#7067ed;color:#fff;border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content:hover{background:#5b52d1;border-color:#5b52d1}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details{margin-top:24px;border:1px solid #f5f5f5;border-radius:12px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header{cursor:pointer;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label{cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse{border:0}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-question-data-edit-header{margin-bottom:0;border-radius:12px 12px 12px 12px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-up{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-down{display:block !important}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-section-collapse{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle{padding:14px 16px;background-color:#f7f7f7;cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background .2s}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle:hover{background-color:#e5e7eb}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle label{font-weight:600;font-size:14px;margin:0;cursor:pointer;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle{color:#9ca3af;transition:transform .2s}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-trigger-toggle{border-bottom-color:#f7f7f7}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-section-collapse{padding:20px;background:#fff;border:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings{padding:0 0 24px 0;display:block}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings__label label{font-size:14px;font-weight:600;color:#1a1a1a;display:block;margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]{width:100px;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings___desc{font-size:12px;color:#9ca3af;margin-top:8px;font-style:normal}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question.lp-icon-plus{color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question select{height:38px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input{flex-grow:1;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;min-width:200px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input:focus{border-color:#7067ed;box-shadow:none}.lp-course-builder-canvas .cb-section__quiz-edit select.lp-question-type-new,.lp-course-builder-canvas .cb-section__lesson-edit select.lp-question-type-new,.lp-course-builder-canvas .cb-section__question-edit select.lp-question-type-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] select.lp-question-type-new{padding:0 30px 0 12px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#374151;cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question{background-color:#eef1ff;color:#7067ed;border:1px solid #7067ed;padding:10px 20px;border-radius:8px;font-weight:600;font-size:14px;transition:background .2s;min-width:fit-content;cursor:default !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover{opacity:.5;background-color:#eef1ff !important;color:#7067ed !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active{cursor:pointer !important;background:#7067ed !important;color:#eef1ff !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active:hover{background:#5b52d1 !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover{background-color:#7067ed;color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select{background-color:#fff;color:#374151;border:1px solid #d1d5db;padding:10px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;min-width:fit-content}.lp-course-builder-canvas .cb-section__quiz-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .cb-section__lesson-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .cb-section__question-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] [class*=lp-icon-]:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select:hover{background-color:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item{margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header{border-radius:6px 6px 0 0;border-bottom:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;border-radius:6px;border:1px solid #e5e7eb;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-right:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-right:16px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner{margin-right:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-right:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-left:auto}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-right:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-right:16px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner{margin-right:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-right:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-left:auto}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail{font-size:14px;padding:24px;background:#f7f7f7;border:1px solid #e5e7eb;border-top:0;border-radius:0 0 6px 6px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail>label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:flex-end;align-items:center}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]{order:1;margin-top:2px;appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked{background:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked:before{left:22px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap{display:flex;flex-direction:column;gap:8px;font-size:14px;font-weight:500;margin-top:20px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*{display:flex;gap:8px;font-size:14px;font-weight:500}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:space-between;align-items:self-start}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input{margin-top:3px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;font-weight:400}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-cb-section__title,.lp-course-builder-canvas .cb-section__lesson-edit .lp-cb-section__title,.lp-course-builder-canvas .cb-section__question-edit .lp-cb-section__title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status,.lp-course-builder-canvas .cb-section__question-edit .quiz-status,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.publish,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.publish,.lp-course-builder-canvas .cb-section__question-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.publish,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.publish,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.trash,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.trash,.lp-course-builder-canvas .cb-section__question-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.trash,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.trash,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title{margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc{margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button,.lp-course-builder-canvas .cb-section__question-edit .cb-button,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-canvas .cb-section__quiz-edit #lp-course-builder-content,.lp-course-builder-canvas .cb-section__lesson-edit #lp-course-builder-content,.lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] #lp-course-builder-content{padding:16px}}#lp-course-builder-content .lp-edit-quiz-wrap{background-color:#fff;border-radius:12px;padding:0}#lp-course-builder-content .lp-edit-quiz-wrap .heading{display:flex;align-items:center;margin-bottom:8px;gap:8px}#lp-course-builder-content .lp-edit-quiz-wrap .heading h4{color:#898989}#lp-course-builder-content .lp-edit-quiz-wrap .heading .total-items{margin-left:auto;font-size:13px;color:#898989}#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .one,#lp-course-builder-content .lp-edit-quiz-wrap .plural{display:none}#lp-course-builder-content .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:12px;margin-bottom:12px;background:#fff;transition:all .2s}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s;font-weight:600}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#eef1ff !important;color:#7067ed;padding:4px 10px;border-radius:20px;white-space:nowrap;font-weight:600}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus){border:1px solid #7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#f5f5f5;border-radius:12px 12px 0 0;background:#eef1ff}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:24px;background:#fff;border-radius:0 0 12px 12px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.clone{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #e5e7eb;border-radius:12px;margin-top:12px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#7067ed;box-shadow:none}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;border:1px solid #7067ed;color:#7067ed;border-radius:8px;font-weight:500;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button:hover{background:#7067ed;color:#eef1ff}#lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{border:0}.cb-section__quiz-edit .lp-meta-box,.cb-section__quiz-edit .lp-meta-box-wrap{margin:0;background:transparent}.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.cb-section__quiz-edit .form-field,.cb-section__quiz-edit .lp-meta-box__duration,.cb-section__quiz-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.cb-section__quiz-edit .form-field>label,.cb-section__quiz-edit .form-field label span,.cb-section__quiz-edit .lp-meta-box__duration>label,.cb-section__quiz-edit .lp-meta-box__duration label span,.cb-section__quiz-edit .lp-meta-box-field>label,.cb-section__quiz-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .form-field input[type=text],.cb-section__quiz-edit .form-field input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=text],.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box-field input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=text],.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.cb-section__quiz-edit .form-field input[type=number]:focus,.cb-section__quiz-edit .form-field input[type=text]:focus,.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=number]{width:80px !important}.cb-section__quiz-edit .form-field select,.cb-section__quiz-edit .lp-meta-box__duration select,.cb-section__quiz-edit .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.cb-section__quiz-edit .form-field select:focus,.cb-section__quiz-edit .lp-meta-box__duration select:focus,.cb-section__quiz-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=radio],.cb-section__quiz-edit .form-field input[type=checkbox],.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],.cb-section__quiz-edit .lp-meta-box-field input[type=radio],.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.cb-section__quiz-edit .form-field input[type=radio]:before,.cb-section__quiz-edit .form-field input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.cb-section__quiz-edit .form-field input[type=radio]:checked,.cb-section__quiz-edit .form-field input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.cb-section__quiz-edit .form-field input[type=radio]:checked:before,.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.cb-section__quiz-edit .form-field input[type=radio]:focus,.cb-section__quiz-edit .form-field input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field .description,.cb-section__quiz-edit .lp-meta-box__duration .description,.cb-section__quiz-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}.cb-section__quiz-edit .form-field .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.cb-section__quiz-edit .form-field>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box__duration>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.cb-section__quiz-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.cb-section__quiz-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.cb-section__quiz-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.cb-section__quiz-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.cb-section__quiz-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.cb-section__quiz-edit .course-status.publish{color:#fff;background:#1e1e1e}.cb-section__quiz-edit .course-status.trash{color:#fff;background-color:#dc2626}.cb-section__quiz-edit .cb-course-edit-content{display:flex;gap:40px}.cb-section__quiz-edit .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.cb-section__quiz-edit .cb-course-edit-column--right{flex:1;min-width:0}.cb-section__quiz-edit .cb-course-edit-title{margin-bottom:20px}.cb-section__quiz-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-title__label .required{color:#ef4444}.cb-section__quiz-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-left:auto;transition:all .2s ease}.cb-section__quiz-edit .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.cb-section__quiz-edit .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.cb-section__quiz-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.cb-section__quiz-edit .cb-course-edit-permalink{margin-bottom:20px}.cb-section__quiz-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.cb-section__quiz-edit .cb-permalink-display.lp-hidden{display:none}.cb-section__quiz-edit .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.cb-section__quiz-edit .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.cb-section__quiz-edit .cb-permalink-url:hover{text-decoration:underline}.cb-section__quiz-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.cb-section__quiz-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.cb-section__quiz-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.cb-section__quiz-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.cb-section__quiz-edit .cb-permalink-editor.lp-hidden{display:none}.cb-section__quiz-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.cb-section__quiz-edit .cb-permalink-prefix strong{color:#64748b;font-weight:600}.cb-section__quiz-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.cb-section__quiz-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.cb-section__quiz-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.cb-section__quiz-edit .cb-permalink-slug-input::placeholder{color:#94a3b8}.cb-section__quiz-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.cb-section__quiz-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.cb-section__quiz-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.cb-section__quiz-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.cb-section__quiz-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.cb-section__quiz-edit .cb-course-edit-desc{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.cb-section__quiz-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.cb-section__quiz-edit .cb-course-edit-tags__wrapper,.cb-section__quiz-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.cb-section__quiz-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.cb-section__quiz-edit .cb-course-edit-categories__search-wrap{display:block}.cb-section__quiz-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.cb-section__quiz-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.cb-section__quiz-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-tag-chip{display:inline-flex;align-items:center}.cb-section__quiz-edit .cb-tag-chip input[type=checkbox]{display:none}.cb-section__quiz-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.cb-section__quiz-edit .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.cb-section__quiz-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.cb-section__quiz-edit .cb-course-edit-featured-image{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.cb-section__quiz-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.cb-section__quiz-edit .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.cb-section__quiz-edit .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.cb-section__quiz-edit .cb-featured-image-dropzone:hover a{color:#7067ed}.cb-section__quiz-edit .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.cb-section__quiz-edit .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.cb-section__quiz-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.cb-section__quiz-edit .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.cb-section__quiz-edit .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.cb-section__quiz-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.cb-section__quiz-edit .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.cb-section__quiz-edit .cb-featured-image-link:hover{text-decoration:underline}.cb-section__quiz-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.cb-section__quiz-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.cb-section__quiz-edit .cb-change-featured-image:hover{background:#7067ed;color:#fff}.cb-section__quiz-edit .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.cb-section__quiz-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.cb-section__quiz-edit .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.cb-section__quiz-edit .cb-course-edit-publish{margin-bottom:20px}.cb-section__quiz-edit .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.cb-section__quiz-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-publish__row select{padding:6px 32px 6px 14px !important}.cb-section__quiz-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.cb-section__quiz-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.cb-section__quiz-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.cb-section__quiz-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cb-section__quiz-edit .cb-featured-image-preview:has(img){border:0}.cb-section__quiz-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.cb-section__quiz-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.cb-section__quiz-edit .cb-set-featured-image:hover{background:#7067ed;color:#fff}.cb-section__quiz-edit div.mce-statusbar{border-top:0}.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-category__input,.cb-section__quiz-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__input:focus,.cb-section__quiz-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.cb-section__quiz-edit .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__btn-save,.cb-section__quiz-edit .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover{background:#333}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.cb-section__quiz-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover{background:#333}.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.cb-section__quiz-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.cb-section__quiz-edit .cb-course-edit-content{flex-direction:column}.cb-section__quiz-edit .cb-course-edit-column--left{flex:1;max-width:100%}.cb-section__quiz-edit .cb-course-edit-column--right{flex:1}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.cb-section__quiz-edit .cb-featured-image-container{flex-direction:column}.cb-section__quiz-edit .cb-featured-image-preview{width:100%;max-width:300px}}.cb-section__quiz-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.cb-section__quiz-edit .course-status.publish{color:#fff;background:#1e1e1e}.cb-section__quiz-edit .course-status.trash{color:#fff;background-color:#dc2626}.cb-section__quiz-edit .cb-course-edit-title{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.cb-section__quiz-edit .cb-course-edit-desc{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.cb-section__quiz-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.cb-section__quiz-edit .cb-course-edit-tags__wrapper,.cb-section__quiz-edit .cb-course-edit-categories__wrapper{flex:1}.cb-section__quiz-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.cb-section__quiz-edit .cb-course-edit-categories__search-wrap{display:block}.cb-section__quiz-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.cb-section__quiz-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.cb-section__quiz-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.cb-section__quiz-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-tag-chip{display:inline-flex;align-items:center}.cb-section__quiz-edit .cb-tag-chip input[type=checkbox]{display:none}.cb-section__quiz-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.cb-section__quiz-edit .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-left:2px}.cb-section__quiz-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 10px 0 0;transition:all .2s ease;flex-shrink:0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;left:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.cb-section__quiz-edit .cb-course-edit-featured-image{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.cb-section__quiz-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.cb-section__quiz-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cb-section__quiz-edit .cb-featured-image-preview:has(img){border:0}.cb-section__quiz-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.cb-section__quiz-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-remove-featured-image,.cb-section__quiz-edit .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.cb-section__quiz-edit .cb-remove-featured-image:hover,.cb-section__quiz-edit .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.cb-section__quiz-edit .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.cb-section__quiz-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.cb-section__quiz-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.cb-section__quiz-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.cb-section__quiz-edit div.mce-statusbar{border-top:0}.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-category__input,.cb-section__quiz-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__input:focus,.cb-section__quiz-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.cb-section__quiz-edit .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__btn-save,.cb-section__quiz-edit .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.cb-section__quiz-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover{background:#333}.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.cb-section__quiz-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.cb-section__quiz-edit #general_course_data .form-field,.cb-section__quiz-edit #offline_course_data .form-field,.cb-section__quiz-edit #price_course_data .form-field,.cb-section__quiz-edit #extra_course_data .form-field{margin-bottom:24px}.cb-section__quiz-edit #general_course_data ._lp_featured_review_field{align-items:flex-start}.cb-section__quiz-edit #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.cb-section__quiz-edit #general_course_data ._lp_students_field .description{margin-top:-3px}.cb-section__quiz-edit #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.cb-section__quiz-edit #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.cb-section__quiz-edit #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-left:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-left:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.cb-section__quiz-edit .lp_course_extra_meta_box,.cb-section__quiz-edit .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.cb-section__quiz-edit .lp_course_extra_meta_box>label,.cb-section__quiz-edit .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.cb-section__quiz-edit .lp_course_extra_meta_box__content,.cb-section__quiz-edit .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.cb-section__quiz-edit .lp_course_extra_meta_box__fields,.cb-section__quiz-edit .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.cb-section__quiz-edit .lp_course_extra_meta_box__field,.cb-section__quiz-edit .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.cb-section__quiz-edit .lp_course_extra_meta_box__add,.cb-section__quiz-edit .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover,.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.cb-section__quiz-edit .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label input[type=text],.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label input[type=text]:focus,.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.cb-section__quiz-edit .lp_course_faq_meta_box__add,.cb-section__quiz-edit .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover,.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.cb-section__quiz-edit ._lp_block_finished_field{margin-top:-8px !important}.cb-section__quiz-edit #extra_course_data .form-field{align-items:start}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.cb-section__quiz-edit #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.cb-section__quiz-edit #extra_course_data input[type=text]:focus{box-shadow:none}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;left:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;right:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content{width:100%}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 40px 16px 36px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;left:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;right:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.cb-section__quiz-edit #author_course_data .ts-control{border-radius:6px;padding:5px !important}.cb-section__quiz-edit #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.cb-section__quiz-edit #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.cb-section__quiz-edit .cb-featured-image-container{flex-direction:column}.cb-section__quiz-edit .cb-featured-image-preview{width:100%;max-width:300px}}.cb-section__quiz-edit .lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-right:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-left:3px solid transparent;margin-left:-3px}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-left-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.cb-section__quiz-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.cb-section__quiz-edit .lp-meta-box,.cb-section__quiz-edit .lp-meta-box-wrap{margin:0;background:transparent}.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.cb-section__quiz-edit .form-field,.cb-section__quiz-edit .lp-meta-box__duration,.cb-section__quiz-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.cb-section__quiz-edit .form-field>label,.cb-section__quiz-edit .form-field label span,.cb-section__quiz-edit .lp-meta-box__duration>label,.cb-section__quiz-edit .lp-meta-box__duration label span,.cb-section__quiz-edit .lp-meta-box-field>label,.cb-section__quiz-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .form-field input[type=text],.cb-section__quiz-edit .form-field input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=text],.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box-field input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=text],.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.cb-section__quiz-edit .form-field input[type=number]:focus,.cb-section__quiz-edit .form-field input[type=text]:focus,.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=number]{width:80px !important}.cb-section__quiz-edit .form-field select,.cb-section__quiz-edit .lp-meta-box__duration select,.cb-section__quiz-edit .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.cb-section__quiz-edit .form-field select:focus,.cb-section__quiz-edit .lp-meta-box__duration select:focus,.cb-section__quiz-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=radio],.cb-section__quiz-edit .form-field input[type=checkbox],.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],.cb-section__quiz-edit .lp-meta-box-field input[type=radio],.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.cb-section__quiz-edit .form-field input[type=radio]:before,.cb-section__quiz-edit .form-field input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.cb-section__quiz-edit .form-field input[type=radio]:checked,.cb-section__quiz-edit .form-field input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.cb-section__quiz-edit .form-field input[type=radio]:checked:before,.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.cb-section__quiz-edit .form-field input[type=radio]:focus,.cb-section__quiz-edit .form-field input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field .description,.cb-section__quiz-edit .lp-meta-box__duration .description,.cb-section__quiz-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}.cb-section__quiz-edit .form-field .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.cb-section__quiz-edit .form-field>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box__duration>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.cb-section__quiz-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.cb-section__quiz-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.cb-section__quiz-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.cb-section__quiz-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.cb-section__quiz-edit .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.cb-section__quiz-edit ._lp_show_correct_review_field .description{margin-top:-12px !important}@media(max-width:768px){.cb-section__quiz-edit .lp-meta-box__course-tab{flex-direction:column}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:100%;border-right:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{flex:0 0 auto;margin-bottom:0;padding:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;margin-left:0;margin-bottom:-1px;white-space:nowrap}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{border-left-color:transparent;border-bottom-color:#3b82f6}}.lp-course-builder-canvas .cb-section__question-edit .question-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-canvas .cb-section__question-edit .question-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .question-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned{margin-bottom:20px}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink{margin-bottom:20px}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url{display:block;font-size:13px;line-height:1.5;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit input.cb-question-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc{margin-bottom:24px}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__question{background:#1e1e1e;color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__question{background:#dc2626;color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-right:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-left:3px solid transparent;margin-left:-3px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-left-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap{margin:0;background:transparent}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box .lp-meta-box__inner,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field label span,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration label span,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]{width:80px !important}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description:has(+.learn-press-tip),.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field>.learn-press-tip,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration>.learn-press-tip,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}@media(max-width:768px){.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab{flex-direction:column}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:100%;border-right:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{flex:0 0 auto;margin-bottom:0;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{border-left:0;border-bottom:3px solid transparent;margin-left:0;margin-bottom:-1px;white-space:nowrap}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{border-left-color:transparent;border-bottom-color:#3b82f6}}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item{margin-bottom:12px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header{border-radius:6px 6px 0 0;border-bottom:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;border-radius:6px;border:1px solid #e5e7eb;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-right:16px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-right:16px;background:transparent}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner{margin-right:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-right:16px;font-size:16px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-left:auto}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail{font-size:14px;padding:24px;background:#f7f7f7;border:1px solid #e5e7eb;border-top:0;border-radius:0 0 6px 6px}@media(max-width:768px){.lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content{padding:16px}}#lp-builder-popup-container{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:99}#lp-builder-popup-container .lp-builder-popup__tabs,#lp-builder-popup-container .lp-horizontal-tabs{display:flex;list-style:none;margin:0 24px;padding:0;border-bottom:1px solid #f5f5f5;gap:10px}#lp-builder-popup-container .lp-builder-popup__tab,#lp-builder-popup-container .lp-horizontal-tab{padding:12px 24px;color:#898989;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent;border-radius:10px 10px 0 0;cursor:pointer}#lp-builder-popup-container .lp-builder-popup__tab:hover,#lp-builder-popup-container .lp-horizontal-tab:hover{color:#7067ed;background:#eef1ff}#lp-builder-popup-container .lp-builder-popup__tab.active,#lp-builder-popup-container .lp-horizontal-tab.active{color:#7067ed;border-bottom-color:#7067ed;background:#eef1ff}#lp-builder-popup-container .lp-builder-popup__tab-content,#lp-builder-popup-container .lp-horizontal-tab-content{padding:24px 24px 0}#lp-builder-popup-container .lp-builder-popup__tab-pane,#lp-builder-popup-container .lp-horizontal-tab-pane{display:none}#lp-builder-popup-container .lp-builder-popup__tab-pane.active,#lp-builder-popup-container .lp-horizontal-tab-pane.active{display:block}#lp-builder-popup-container .lp-meta-box,#lp-builder-popup-container .lp-meta-box-wrap{margin:0;background:transparent}#lp-builder-popup-container .lp-meta-box .lp-meta-box__inner,#lp-builder-popup-container .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}#lp-builder-popup-container .form-field,#lp-builder-popup-container .lp-meta-box__duration,#lp-builder-popup-container .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}#lp-builder-popup-container .form-field>label,#lp-builder-popup-container .form-field label span,#lp-builder-popup-container .lp-meta-box__duration>label,#lp-builder-popup-container .lp-meta-box__duration label span,#lp-builder-popup-container .lp-meta-box-field>label,#lp-builder-popup-container .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}#lp-builder-popup-container .form-field input[type=number],#lp-builder-popup-container .form-field input[type=text],#lp-builder-popup-container .form-field input[type=datetime-local],#lp-builder-popup-container .lp-meta-box__duration input[type=number],#lp-builder-popup-container .lp-meta-box__duration input[type=text],#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local],#lp-builder-popup-container .lp-meta-box-field input[type=number],#lp-builder-popup-container .lp-meta-box-field input[type=text],#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .form-field input[type=number]:focus,#lp-builder-popup-container .form-field input[type=text]:focus,#lp-builder-popup-container .form-field input[type=datetime-local]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=number]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=text]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=number]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=text]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field input[type=number],#lp-builder-popup-container .lp-meta-box__duration input[type=number],#lp-builder-popup-container .lp-meta-box-field input[type=number]{width:80px !important}#lp-builder-popup-container .form-field select,#lp-builder-popup-container .lp-meta-box__duration select,#lp-builder-popup-container .lp-meta-box-field select{padding:4px 30px 4px 15px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}#lp-builder-popup-container .form-field select:focus,#lp-builder-popup-container .lp-meta-box__duration select:focus,#lp-builder-popup-container .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field input[type=radio],#lp-builder-popup-container .form-field input[type=checkbox],#lp-builder-popup-container .lp-meta-box__duration input[type=radio],#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox],#lp-builder-popup-container .lp-meta-box-field input[type=radio],#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}#lp-builder-popup-container .form-field input[type=radio]:before,#lp-builder-popup-container .form-field input[type=checkbox]:before,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:before,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:before,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:before,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}#lp-builder-popup-container .form-field input[type=radio]:checked,#lp-builder-popup-container .form-field input[type=checkbox]:checked,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}#lp-builder-popup-container .form-field input[type=radio]:checked:before,#lp-builder-popup-container .form-field input[type=checkbox]:checked:before,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked:before,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked:before,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked:before,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked:before{left:22px}#lp-builder-popup-container .form-field input[type=radio]:focus,#lp-builder-popup-container .form-field input[type=checkbox]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field .description,#lp-builder-popup-container .lp-meta-box__duration .description,#lp-builder-popup-container .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-left:161px;margin-top:6px;order:99}#lp-builder-popup-container .form-field .description:has(+.learn-press-tip),#lp-builder-popup-container .lp-meta-box__duration .description:has(+.learn-press-tip),#lp-builder-popup-container .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}#lp-builder-popup-container .form-field>.learn-press-tip,#lp-builder-popup-container .lp-meta-box__duration>.learn-press-tip,#lp-builder-popup-container .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}#lp-builder-popup-container ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}#lp-builder-popup-container ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}#lp-builder-popup-container ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}#lp-builder-popup-container ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}#lp-builder-popup-container.active{display:block}#lp-builder-popup-container #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-builder-popup-container #lp-material-container hr{display:none}#lp-builder-popup-container .field-material__label{width:150px;max-width:150px;min-width:150px;margin-right:11px}#lp-builder-popup-container .lp-material--field-wrap{display:flex;gap:11px;margin-top:12px}#lp-builder-popup-container .lp-material--field-wrap label{color:#1e1e1e;font-size:14px;font-weight:600;width:100px}#lp-builder-popup-container .lp-material--field-wrap:first-child{margin-top:0}#lp-builder-popup-container .lp-material--field-wrap.field-action-wrap{justify-content:flex-start;flex-direction:row-reverse}#lp-builder-popup-container #lp-material--group-container .lp-material--group{padding:20px;border:1px solid #d1d5db;border-radius:12px;max-width:420px;margin-bottom:20px}#lp-builder-popup-container #lp-material--group-container .lp-material--group:not(:has(*)){display:none}#lp-builder-popup-container .lp-material--field-external-link,#lp-builder-popup-container .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material--field-method{width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material-save-field,#lp-builder-popup-container .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-builder-popup-container .lp-material--upload-wrap label{cursor:pointer;width:100%;display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-left:86px;overflow:hidden}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file{border-color:#7067ed;background-color:#f8fbff;font-size:0}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::before{font-size:14px}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::after{content:attr(data-file-name);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600}#lp-builder-popup-container .lp-material--field-upload{display:none}#lp-builder-popup-container .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-builder-popup-container .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-builder-popup-container .lp-material--upload-wrap label::before{content:\"📁 \";margin-right:5px}#lp-builder-popup-container #btn-lp--add-material{color:#7067ed;border:1px solid #7067ed}#lp-builder-popup-container #btn-lp--add-material:hover{background-color:#f7f7f7;border-color:#7067ed}#lp-builder-popup-container #btn-lp--save-material,#lp-builder-popup-container .lp-material-save-field{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-builder-popup-container #btn-lp--save-material:hover,#lp-builder-popup-container .lp-material-save-field:hover{background-color:#5b52d1;border-color:#5b52d1}#lp-builder-popup-container .lp-material--delete{color:#6b7280;border:1px solid #e5e7eb}#lp-builder-popup-container .lp-material--delete:hover{background-color:#f7f7f7;color:#1e1e1e;border-color:#1e1e1e}#lp-builder-popup-container .cb-item-edit-content{gap:0;flex-direction:column}#lp-builder-popup-container .cb-item-edit-content .cb-item-edit-column{width:100%}#lp-builder-popup-container .cb-item-edit-publish{display:none}#lp-builder-popup-container .cb-section__quiz-edit .cb-item-edit-column--left{flex:0;max-width:unset}body.lp-popup-open{overflow:hidden}.lp-builder-popup-overlay{position:fixed;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(3px);z-index:1}.lp-builder-popup{position:fixed;inset:5vh 5% 5vh 5%;width:auto;max-width:900px;max-height:750px;height:auto;margin:auto;background-color:#fff;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2);z-index:2;display:flex;flex-direction:column;overflow:hidden;transition:inset .3s cubic-bezier(0.4,0,0.2,1),border-radius .3s cubic-bezier(0.4,0,0.2,1),max-width .3s cubic-bezier(0.4,0,0.2,1)}.lp-builder-popup--fullscreen{inset:0;max-width:100%;max-height:100%;border-radius:0}.lp-builder-popup--loading{width:auto;max-width:none;padding:40px 60px;text-align:center}.lp-builder-popup__loader{display:flex;flex-direction:column;align-items:center;gap:15px}.lp-builder-popup__loader .lp-loading-circle{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#1e1e1e;border-radius:50%;animation:lp-popup-spin .8s linear infinite}.lp-builder-popup__loader span{color:#666;font-size:14px}.lp-builder-popup__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;flex-shrink:0}.lp-builder-popup__header-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__header-actions{display:flex;align-items:center;gap:8px}.lp-builder-popup__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-builder-popup__resize{background:0;border:0;font-size:16px;color:#9ca3af;cursor:pointer;padding:8px 10px;line-height:1;transition:all .2s;border-radius:4px;display:flex;align-items:center;justify-content:center}.lp-builder-popup__resize:hover{color:#1e1e1e;background-color:#f3f4f6}.lp-builder-popup__resize i{font-size:16px}.lp-builder-popup__close{background:0;border:0;font-size:24px;color:#9ca3af;cursor:pointer;padding:5px 10px;line-height:1;transition:color .2s;border-radius:4px}.lp-builder-popup__close:hover{color:#d63638;background-color:#fee2e2}.lp-builder-popup__body{flex:1;overflow-y:auto;padding:0;background-color:#fff}.lp-builder-popup__notice{padding:15px;background-color:#f0f6fc;border-left:4px solid #3b82f6;color:#1e1e1e;margin:0 0 20px;border-radius:0 6px 6px 0}.lp-builder-popup__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 24px;flex-shrink:0}.lp-builder-popup__footer-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__footer-right{display:flex;align-items:center;gap:12px}.lp-builder-popup__btn{padding:10px 25px;border-radius:12px;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s;border:0}.lp-builder-popup__btn--cancel{background-color:#fff;color:#7067ed;border:1px solid #7067ed}.lp-builder-popup__btn--cancel:hover{background-color:#eef1ff}.lp-builder-popup__btn--save{background-color:#7067ed;color:#fff}.lp-builder-popup__btn--save:hover{background-color:#5b52d1}.lp-builder-popup__btn--save:disabled{opacity:.6;cursor:not-allowed}.lp-builder-popup__btn--trash{background-color:#fff;color:#6b7280;border:1px solid #e5e7eb}.lp-builder-popup__btn--trash:hover{color:#dc2626;background-color:#fee2e2;border-color:#fee2e2}.lp-builder-popup__btn--draft{background-color:#eef1ff;color:#7067ed;border:1px solid transparent}.lp-builder-popup__btn--draft:hover{background-color:#d5dcff;border-color:transparent}.lp-builder-popup .lesson-status,.lp-builder-popup .question-status,.lp-builder-popup .quiz-status,.lp-builder-popup .quizzes-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}.lp-builder-popup .lesson-status.publish,.lp-builder-popup .question-status.publish,.lp-builder-popup .quiz-status.publish,.lp-builder-popup .quizzes-status.publish{color:#28a746;background:#e7f6e9}.lp-builder-popup .lesson-status.draft,.lp-builder-popup .question-status.draft,.lp-builder-popup .quiz-status.draft,.lp-builder-popup .quizzes-status.draft{color:#aaa;background:#f7f7f7}.lp-builder-popup .lesson-status.pending,.lp-builder-popup .question-status.pending,.lp-builder-popup .quiz-status.pending,.lp-builder-popup .quizzes-status.pending{color:#1e40af;background:#dbeafe}.lp-builder-popup .lesson-status.private,.lp-builder-popup .question-status.private,.lp-builder-popup .quiz-status.private,.lp-builder-popup .quizzes-status.private{color:#6b21a8;background:#f3e8ff}.lp-builder-popup .lesson-status.trash,.lp-builder-popup .question-status.trash,.lp-builder-popup .quiz-status.trash,.lp-builder-popup .quizzes-status.trash{color:#991b1b;background:#fee2e2}.lp-builder-popup .cb-section__header{display:none}.lp-builder-popup .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.lp-builder-popup .lp-meta-box__duration .description{margin-top:4px}.lp-builder-popup #_lp_passing_grade,.lp-builder-popup #_lp_retake_count,.lp-builder-popup #_lp_pagination{max-width:100px}.lp-builder-popup .lp-radios-field-meta-box{list-style-type:none;margin:0;padding:0}.lp-builder-popup .lp-radios-field-meta-box li{margin-bottom:8px}.lp-builder-popup .lp-radios-field-meta-box li:last-child{margin-bottom:0}.lp-builder-popup .lp-radios-field-meta-box li label{display:flex;align-items:center;gap:8px;font-weight:400;width:auto;min-width:auto;max-width:none;cursor:pointer}.lp-builder-popup .lp-radios-field-meta-box li input[type=radio]{width:18px;height:18px;margin:0;cursor:pointer;accent-color:#1e1e1e}.lp-builder-popup .wp-editor-wrap{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .wp-editor-wrap .wp-editor-tools{display:flex;flex-wrap:wrap}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons{margin:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #7067ed;color:#7067ed;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:500;text-decoration:none;transition:all .2s;box-shadow:none}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media .wp-media-buttons-icon::before{color:#7067ed}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media:hover{background:#eef1ff}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-tabs:not(:has(.wp-switch-editor[aria-pressed=true])) .wp-switch-editor:first-child{background:#eef1ff;color:#7067ed;font-weight:600}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container{flex:0 0 calc(100% + 24px);width:100%;margin-top:10px;border-top:1px solid #e5e7eb;border-radius:0 0 8px 8px;margin-left:-12px;margin-right:-12px;margin-bottom:-10px;padding:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container textarea.wp-editor-area{border:0;border-radius:0 0 8px 8px;padding:12px;width:100%;box-sizing:border-box}.lp-builder-popup .wp-editor-wrap>.wp-editor-container{border:0;border-radius:0 0 8px 8px}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-toolbar-grp{background:#f9fafb;border-bottom:1px solid #e5e7eb;padding:4px}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-panel{border:none !important}.lp-builder-popup .wp-editor-wrap>.wp-editor-container textarea.wp-editor-area{border:0;border-radius:0 0 8px 8px;padding:16px;width:100%;box-sizing:border-box;min-height:200px}.lp-builder-popup .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}.lp-builder-popup .lp-material--table th,.lp-builder-popup .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:left}.lp-builder-popup .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}.lp-builder-popup .lp-material--table td{font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-material--table tr:last-child td{border-bottom:0}.lp-builder-popup .lp-material--table tr:hover td{background-color:#f9fafb}.lp-builder-popup .lp-material--table thead.hidden{display:none}.lp-builder-popup .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}.lp-builder-popup #btn-lp--add-material,.lp-builder-popup #btn-lp--save-material{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup #btn-lp--add-material:hover,.lp-builder-popup #btn-lp--save-material:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .cb-lesson-edit-title,.lp-builder-popup .cb-quiz-edit-title,.lp-builder-popup .cb-question-edit-title{margin-bottom:24px;flex:1}.lp-builder-popup .cb-lesson-edit-title__label,.lp-builder-popup .cb-quiz-edit-title__label,.lp-builder-popup .cb-question-edit-title__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input,.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input,.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;box-shadow:none}.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .cb-lesson-edit-desc,.lp-builder-popup .cb-quiz-edit-desc,.lp-builder-popup .cb-question-edit-desc{margin-bottom:24px}.lp-builder-popup .cb-lesson-edit-desc__label,.lp-builder-popup .cb-quiz-edit-desc__label,.lp-builder-popup .cb-question-edit-desc__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box,.lp-builder-popup .lp-form-setting-question .lp-meta-box{margin:0;background:transparent}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-question .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:18px;font-weight:700;color:#1e1e1e;margin-bottom:20px;line-height:1.2}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__quiz-title-assigned{display:flex;flex-direction:column-reverse;gap:16px;margin-bottom:24px}.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title,.lp-builder-popup .cb-section__question-title-assigned .cb-lesson-edit-title,.lp-builder-popup .cb-section__question-title-assigned .cb-quiz-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-question-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-lesson-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title{margin-bottom:0;width:100%}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses{flex-shrink:0;padding:0;background-color:transparent;border-radius:0;font-size:13px;margin-top:0;border:0}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .label,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .label,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .label,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .label,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label{color:#6b7280;margin-right:5px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a{color:#2e91fa;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a:hover,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .lp-message{color:#7067ed;background-color:#eef1ff;font-weight:500;padding:8px 20px;border-radius:8px}.lp-builder-popup .cb-item-edit-permalink__label{display:block;font-size:13px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-builder-popup .cb-item-edit-assigned{font-size:13px;color:#6b7280;margin-bottom:20px;line-height:1.6}.lp-builder-popup .cb-item-edit-assigned .label{color:#6b7280;font-weight:400}.lp-builder-popup .cb-item-edit-assigned a{color:#2e91fa;text-decoration:none;font-weight:500}.lp-builder-popup .cb-item-edit-assigned a:hover{text-decoration:underline}.lp-builder-popup .lp-edit-quiz-wrap .heading{display:flex;align-items:center;margin-bottom:8px;gap:8px}.lp-builder-popup .lp-edit-quiz-wrap .heading h4{color:#898989}.lp-builder-popup .lp-edit-quiz-wrap .heading .total-items{margin-left:auto;font-size:13px;color:#898989}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .one,.lp-builder-popup .lp-edit-quiz-wrap .plural{display:none}.lp-builder-popup .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:12px;margin-bottom:12px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s;font-weight:600}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#eef1ff !important;color:#7067ed;padding:4px 10px;border-radius:20px;white-space:nowrap;font-weight:600}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus){border:1px solid #7067ed}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#f5f5f5;border-radius:12px 12px 0 0;background:#eef1ff}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:24px;background:#fff;border-radius:0 0 12px 12px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.clone{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #e5e7eb;border-radius:12px;margin-top:12px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#7067ed}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#7067ed;box-shadow:none}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#7067ed}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;border:1px solid #7067ed;color:#7067ed;border-radius:8px;font-weight:500;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover{background:#7067ed;color:#eef1ff}.lp-builder-popup .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}.lp-builder-popup .lp-edit-quiz-wrap .heading{border-radius:12px}@keyframes lp-popup-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media(max-width:768px){.lp-builder-popup{width:95%;max-height:95vh}.lp-builder-popup__header,.lp-builder-popup__footer{padding:12px 16px}.lp-builder-popup__tabs{padding:0 16px;overflow-x:auto}.lp-builder-popup__tab{padding:12px 16px;white-space:nowrap}.lp-builder-popup__tab-content{padding:16px}.lp-builder-popup__footer{flex-direction:column;gap:10px}.lp-builder-popup__footer-left,.lp-builder-popup__footer-right{width:100%;justify-content:center}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{flex-wrap:wrap}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{width:100%;min-width:100%;max-width:100%;margin-bottom:8px}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{max-width:100%}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;flex-wrap:wrap}.lp-builder-popup .form-field:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox])>label{width:auto;min-width:auto;max-width:none;margin-bottom:0}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{margin-left:0 !important}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__lesson-title-assigned{flex-direction:column;gap:16px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__lesson-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{margin-top:0;align-items:flex-start}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{flex-wrap:wrap}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{width:100%}}@keyframes rotation{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.learn-press-course-builder #lp-course-builder-content{background:#fff;padding:24px;border-radius:8px}.learn-press-course-builder .cb-section__course-edit{background:#fff;border-radius:16px;min-height:calc(100% - 100px)}.learn-press-course-builder .cb-section__course-edit .cb-section__header-left{display:flex;align-items:center;gap:10px;margin-bottom:20px;margin-top:28px}.learn-press-course-builder .cb-section__course-edit .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.learn-press-course-builder .cb-section__course-edit .cb-section__header{display:flex;justify-content:space-between;align-items:center}.learn-press-course-builder .cb-section__course-edit .cb-section__header-action{display:flex;gap:20px}.learn-press-course-builder .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.learn-press-course-builder .cb-section__course-edit .cb-button.loading{pointer-events:none;opacity:.8}.learn-press-course-builder .cb-section__course-edit .cb-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.learn-press-course-builder .cb-section__course-edit .lp-meta-box{background:transparent}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{display:flex;flex-direction:column;gap:24px}.learn-press-course-builder .cb-section__course-edit .form-field,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration{display:flex;gap:0 11px;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .description{max-width:max-content;grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .learn-press-tip{max-width:max-content}.learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,.learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field{flex-wrap:wrap}.learn-press-course-builder .cb-section__course-edit .form-field label,.learn-press-course-builder .cb-section__course-edit .form-field label span,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,.learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label{font-size:14px;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;color:#23282d;font-weight:600;flex:0 0 auto}.learn-press-course-builder .cb-section__course-edit .lesson-materials{flex-wrap:nowrap;gap:10px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field textarea{order:3;width:calc(100% - 165px);padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=text]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.learn-press-course-builder .cb-section__course-edit select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox],.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;left:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked{background:#28a746}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked:before{left:22px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]),.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]){flex-direction:row;align-items:center}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox],.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) input[type=radio]{order:1;margin-top:2px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description,.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) .description{order:3}.learn-press-course-builder .cb-section__course-edit .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration .description{margin-top:4px}.learn-press-course-builder .cb-section__course-edit p.form-field,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration{padding:0;margin:0}.learn-press-course-builder .cb-section__course-edit p.form-field .description,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration .description{margin-top:6px}.learn-press-course-builder .cb-section__course-edit #_lp_passing_grade,.learn-press-course-builder .cb-section__course-edit #_lp_retake_count,.learn-press-course-builder .cb-section__course-edit #_lp_pagination{max-width:100px}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content{flex:1}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content .lp_course_extra_meta_box__fields:not(:has(*)){display:none}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text]{max-width:100%;margin-bottom:10px}@media(max-width:768px){.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{gap:20px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{max-width:100%}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:column;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) label{min-width:auto}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{margin-left:0;margin-top:0}}.learn-press-course-builder .lp-message{color:#7067ed;background-color:#eef1ff;font-weight:500;padding:8px 20px;border-radius:8px}#lp-builder-popup-container .learn-press-message,#lp-course-builder .learn-press-message{margin:20px 10px;position:relative;padding:10px 20px;border-radius:8px;max-width:100%;width:fit-content}#lp-builder-popup-container select,#lp-course-builder select{padding:10px 32px 10px 14px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;cursor:pointer;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:right 10px center;background-size:14px}#lp-builder-popup-container select:focus,#lp-course-builder select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}#lp-course-builder .lp-ico-ai{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}#lp-course-builder .lp-btn-generate-course-with-ai,#lp-course-builder .lp-btn-warning-enable-ai{position:relative;margin:0 !important}#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai{background:transparent;color:#7067ed}#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai:hover{background:#eef1ff}.wp-editor-wrap{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background-color:#fff}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:focus,.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:hover,.wp-editor-wrap .qt-dfw:focus,.wp-editor-wrap .qt-dfw:hover{box-shadow:none;background:0}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-underline),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-blockquote),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-alignright),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-unlink){border-right:1px solid #d1d5db}.wp-editor-wrap .wp-editor-tools{display:flex;align-items:center;justify-content:space-between;background-color:#f7f7f7;padding:8px 12px}.wp-editor-wrap .wp-editor-tools:after{content:none}.wp-editor-wrap .wp-media-buttons{padding:0;float:none;flex-shrink:0}.wp-editor-wrap button.insert-media,.wp-editor-wrap input.button{color:#1e1e1e;border-color:#d1d5db;display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-size:13px;line-height:1.6;min-height:30px;margin:0;padding:4px 12px;cursor:pointer;border-width:1px;border-style:solid;border-radius:6px;white-space:nowrap;box-sizing:border-box;background:#fff;transition:border-color .15s ease,background .15s ease}.wp-editor-wrap button.insert-media:focus,.wp-editor-wrap input.button:focus{outline:0;box-shadow:none;background-color:#eef1ff;border-color:#7067ed;color:#7067ed}.wp-editor-wrap button.insert-media:hover,.wp-editor-wrap input.button:hover{color:#7067ed;border-color:#7067ed;background-color:#eef1ff}.wp-editor-wrap .wp-editor-tabs{float:none;flex-shrink:0;display:flex;background:#fff;border-radius:12px;border:1px solid #e5e7eb;padding:4px 4px 6px;gap:4px}.wp-editor-wrap .wp-editor-tabs button{margin:0;padding:2px 14px;border:0;border-radius:8px;font-size:13px;font-weight:500;line-height:1.6;color:#6b7280;background:transparent;cursor:pointer;box-sizing:content-box !important}.wp-editor-wrap .wp-editor-tabs button:hover{color:#1e1e1e;background-color:#eef1ff}.wp-editor-wrap .wp-editor-tabs button:focus{outline:0;box-shadow:none}.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#eef1ff;color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05);font-weight:600}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:8px}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{box-shadow:none}.wp-editor-wrap div.mce-toolbar-grp>div{padding:0}.wp-editor-wrap .mce-top-part::before{box-shadow:none !important}.wp-editor-wrap .mce-top-part,.wp-editor-wrap .quicktags-toolbar{background-color:#f7f7f7;margin:0;padding:0}.wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0;padding:0 8px 8px}.wp-editor-wrap .mce-toolbar .mce-btn{border:0;background:transparent;box-shadow:none;border-radius:4px}.wp-editor-wrap .mce-toolbar .mce-btn button{padding:2px 5px;color:#374151}.wp-editor-wrap .mce-toolbar .mce-btn:hover,.wp-editor-wrap .mce-toolbar .mce-btn.mce-active{background:rgba(0,0,0,0.06);border:0;box-shadow:none}.wp-editor-wrap .mce-toolbar .mce-btn-group{padding:0 2px}.wp-editor-wrap .mce-toolbar .mce-btn-group:not(:last-child)::after{content:\"\";display:inline-block;width:1px;height:20px;background:#e5e7eb;vertical-align:middle;margin-left:4px}.wp-editor-wrap .quicktags-toolbar{padding:0 10px 8px;border-bottom:1px solid #f5f5f5}.wp-editor-wrap .wp-editor-container{border:0}.wp-editor-wrap .mce-edit-area iframe{min-height:150px !important}.wp-editor-wrap div.mce-statusbar{display:none}#lp-builder-popup-container .wp-editor-container{border:none !important;background:#fff}#lp-builder-popup-container .wp-editor-tools{padding:8px 12px}#lp-builder-popup-container .mce-top-part{margin:0 !important}#lp-builder-popup-container .lp-question-field-settings .mce-top-part{margin:0 !important}#lp-builder-popup-container .quicktags-toolbar{margin:0 !important;padding:6px 8px !important}.lp-popup-items-to-select .header{padding:0;flex-shrink:0}.lp-popup-items-to-select .header ul.tabs{display:flex;border-bottom:1px solid #f5f5f5;background:#fff;gap:10px;margin:0;list-style:none;padding:0}.lp-popup-items-to-select ul.tabs li{margin:0;display:inline-block;position:relative;padding:0 24px;text-decoration:none;font-weight:500;font-size:14px;transition:all .2s ease;border-radius:12px 12px 0 0;border-bottom:2px solid transparent;cursor:pointer}.lp-popup-items-to-select ul.tabs li.active{border-bottom-color:#7067ed;background-color:#eef1ff;color:#7067ed}.lp-popup-items-to-select ul.tabs li:hover{background-color:#eef1ff;color:#7067ed}.lp-popup-items-to-select .header ul.tabs li.tab a{padding:0}.lp-popup-items-to-select .header ul.tabs li.tab.active a,.lp-popup-items-to-select .header ul.tabs li.tab a:hover{color:#7067ed}.lp-popup-items-to-select input.lp-search-title-item{padding:12px 16px;border-color:#e5e7eb;border-radius:8px;outline:0;transition:border-color .2s;margin:0}.lp-popup-items-to-select input.lp-search-title-item:focus{border-color:#7067ed;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-target ul.list-items{padding:0;gap:0;max-height:500px}.lp-select-item{display:flex;align-items:center;padding:12px 0;cursor:pointer;transition:background .2s}.lp-select-item:last-child{border-bottom:0}.lp-select-item:hover{background-color:#f5f5f5}.lp-select-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d1d5db;border-radius:4px;margin-right:12px;cursor:pointer;position:relative;outline:0;flex-shrink:0}.lp-select-item input[type=checkbox]:checked{background-color:#28a746;border-color:#28a746}.lp-select-item input[type=checkbox]:checked::after{content:\"\";position:absolute;left:5px;top:1px;width:4px;height:9px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}.lp-select-item input[type=checkbox]:checked::before{display:none}.lp-answers-config input[type=radio]:checked::before{display:none}.lp-select-item .title{font-size:14px;color:#374151;font-weight:500}.lp-select-item .title strong{color:#9ca3af;font-weight:400;margin-left:5px;font-size:12px}.list-items-wrap .learn-press-pagination{margin-top:20px;display:flex;justify-content:center}.lp-popup-items-to-select .pagination{margin:10px 0 0 !important}.list-items-wrap .learn-press-pagination ul.page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}.list-items-wrap .page-numbers li span.page-numbers.current,.list-items-wrap .page-numbers li a.page-numbers{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:6px;text-decoration:none;color:#898989;font-size:14px;transition:all .2s;background:#fff;font-weight:600}.list-items-wrap .page-numbers li span.page-numbers.current{background-color:#7067ed;color:#fff}.list-items-wrap .page-numbers li a.page-numbers:hover{background-color:#f7f7f7;border-color:#d1d5db;color:#1e1e1e}.list-items-wrap .page-numbers li a.page-numbers.next,.list-items-wrap .page-numbers li a.page-numbers.prev{background-color:#f7f7f7;border-color:#d1d5db}.list-items-wrap .page-numbers li a.page-numbers.next:hover,.list-items-wrap .page-numbers li a.page-numbers.prev:hover{background-color:#7067ed;color:#fff}.list-items-wrap .page-numbers i{font-size:14px}.lp-popup-items-to-select .main{border-bottom-color:transparent !important;padding:20px 0 0 !important}.lp-popup-items-to-select .footer{padding:16px 0 0 !important;align-items:center;justify-content:space-between}.lp-popup-items-to-select .button{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .2s;background:transparent;color:#1e1e1e}.lp-popup-items-to-select .button:hover{background:transparent;color:#7067ed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active){background-color:#eef1ff;color:#7067ed;order:2}.lp-btn-add-items-selected:hover:not(:disabled){background-color:#333}.lp-btn-add-items-selected:disabled{background-color:#f5f5f5;color:#9ca3af;cursor:not-allowed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover{background-color:#7067ed;color:#eef1ff}.lp-btn-count-items-selected{background:transparent;color:#6b7280;padding:0 !important;font-size:13px;order:1}.lp-btn-back-to-select-items{background:#fff;border:1px solid #d1d5db;color:#374151;order:0}.lp-btn-back-to-select-items:hover{background-color:#f5f5f5}.lp-popup-items-to-select ul.list-items-selected{padding-left:0;background:#fff;margin-bottom:20px;gap:0}.lp-popup-items-to-select ul.list-items-selected li{display:flex;align-items:center;padding:5px;border-bottom:1px solid #f5f5f5;color:#1e1e1e;cursor:pointer;transition:background .2s}.lp-hidden{display:none !important}.lp-popup-items-to-select .header .tabs .tab.active::after{display:none !important}.lp-popup-items-to-select .header .tabs .tab:not(:last-child)::before{display:none}.lp-popup-items-to-select .list-items-selected li:hover{background:#f5f5f5}.lp-popup-items-to-select .header .header-count-items-selected{border-bottom-color:#f5f5f5}.lp-toast.toastify{background:#e7f6e9;color:#28a746;border-radius:5px;box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee2e2;color:#dc2626;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fbf7f2;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:#dbeafe;color:#1e40af;padding:12px 20px;border:0;margin:0 auto}#wp-media-modal label.screen-reader-text,#wp-media-modal span.screen-reader-text{display:none}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.css\t2026-04-11 02:14:10.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,9 @@\n @charset \"UTF-8\";\n+body {\n+  margin: 0;\n+  padding: 0;\n+}\n+\n \u002F**\n * Styles for all page of LP\n *\n@@ -217,6 +222,1320 @@\n   opacity: 0.6;\n }\n \n+.learn-press-message {\n+  position: relative;\n+  margin: 24px auto;\n+  padding: 10px 20px;\n+  border-radius: var(--lp-border-radius, 5px);\n+  background-color: #E5F7FF;\n+  color: #007AFF;\n+  width: 100%;\n+}\n+.learn-press-message.error {\n+  background-color: #FEE5E5;\n+  color: #FF3B30;\n+}\n+.learn-press-message.warning {\n+  background-color: #FEF7E6;\n+  color: #FF9500;\n+}\n+.learn-press-message.success {\n+  background-color: #EBF8E5;\n+  color: #3AB500;\n+}\n+.learn-press-message.info {\n+  background-color: rgba(0, 122, 255, 0.1019607843);\n+  color: #007AFF;\n+}\n+.learn-press-message a {\n+  text-decoration: underline;\n+}\n+\n+.lp-toast.toastify {\n+  background: #EBF8E5;\n+  color: #3AB500;\n+  border-radius: var(--lp-border-radius, 5px);\n+  box-shadow: 0 0 0;\n+  display: flex;\n+  align-items: center;\n+}\n+.lp-toast.toastify .toast-close {\n+  background: transparent !important;\n+  font-size: 0;\n+  padding-right: 12px;\n+}\n+.lp-toast.toastify .toast-close:before {\n+  content: \"\\f00d\";\n+  font-family: \"lp-icon\";\n+  font-size: 16px;\n+  color: #000;\n+  line-height: 17px;\n+}\n+.lp-toast.toastify .toast-close:hover {\n+  opacity: 1;\n+}\n+.lp-toast.toastify.error {\n+  background-color: #FEE5E5;\n+  color: #FF3B30;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.warning {\n+  background-color: #FEF7E6;\n+  color: #fb9422;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.info {\n+  background-color: rgba(0, 122, 255, 0.1019607843);\n+  color: #277afc;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+\n+@keyframes lp-rotating {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -ms-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(-360deg);\n+    -moz-transform: rotate(-360deg);\n+    -ms-transform: rotate(-360deg);\n+    -o-transform: rotate(-360deg);\n+    transform: rotate(-360deg);\n+  }\n+}\n+@-webkit-keyframes lp-rotating {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -ms-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(-360deg);\n+    -moz-transform: rotate(-360deg);\n+    -ms-transform: rotate(-360deg);\n+    -o-transform: rotate(-360deg);\n+    transform: rotate(-360deg);\n+  }\n+}\n+.lp-loading-change {\n+  position: absolute;\n+  width: 100%;\n+  height: 100%;\n+  background: rgba(255, 255, 255, 0.38);\n+  top: 0;\n+}\n+\n+.lp-load-ajax-element {\n+  position: relative;\n+}\n+\n+.lp-loading-circle {\n+  width: 15px;\n+  height: 15px;\n+  border: 2px solid #ccc;\n+  border-radius: 50%;\n+  border-top-color: rgba(0, 0, 0, 0.76);\n+  animation: spin 1s infinite linear;\n+  display: inline-block;\n+}\n+.lp-loading-circle.hide {\n+  display: none;\n+}\n+\n+@keyframes spin {\n+  0% {\n+    transform: rotate(0deg);\n+  }\n+  100% {\n+    transform: rotate(-360deg);\n+  }\n+}\n+.lp-btn-ai-style {\n+  background: #f6f7f7;\n+  border: 1px solid #2271b1;\n+  color: #2271b1;\n+  text-decoration: none;\n+  text-shadow: none;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 5px;\n+  min-height: 30px;\n+  padding: 0 10px;\n+  cursor: pointer;\n+  -webkit-appearance: none;\n+  border-radius: 3px;\n+  white-space: nowrap;\n+  box-sizing: border-box;\n+}\n+.lp-btn-ai-style:active {\n+  box-shadow: none;\n+  color: #fff;\n+}\n+.lp-btn-ai-style:hover {\n+  background: #6B46E9 !important;\n+  color: #fff !important;\n+}\n+\n+.lp-btn-generate-course-with-ai, .lp-btn-warning-enable-ai {\n+  position: absolute;\n+  margin: 10px 10px 0 0 !important;\n+}\n+\n+.create-course-modal {\n+  padding: 0;\n+  display: flex !important;\n+  flex-direction: column;\n+  overflow: hidden;\n+  border-radius: 10px;\n+  background-color: #FFFFFF;\n+  height: 90vh;\n+  z-index: 10000000 !important;\n+}\n+.create-course-modal .modal-content {\n+  display: grid;\n+  grid-template-columns: 1fr 2fr;\n+  flex-grow: 1;\n+  gap: 30px;\n+  min-height: 500px;\n+  padding: 0 24px;\n+}\n+.create-course-modal .input-section {\n+  display: flex;\n+  flex-direction: column;\n+}\n+.create-course-modal .input-section label {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #4A5568;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .input-section h3 {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #4A5568;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .input-section textarea,\n+.create-course-modal .input-section .ts-wrapper .ts-control {\n+  width: 100%;\n+  padding: 4px 8px;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 6px;\n+  font-size: 0.95em;\n+  background-color: #F7FAFC;\n+  color: #1A202C;\n+  box-shadow: none;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+}\n+.create-course-modal .input-section textarea:focus, .create-course-modal .input-section textarea:focus-within,\n+.create-course-modal .input-section .ts-wrapper .ts-control:focus,\n+.create-course-modal .input-section .ts-wrapper .ts-control:focus-within {\n+  outline: none;\n+  border-color: #7E6CE2;\n+  box-shadow: 0 0 0 1px #7E6CE2;\n+  background-color: #FFFFFF;\n+}\n+.create-course-modal .input-section textarea {\n+  min-height: 150px;\n+  resize: vertical;\n+}\n+.create-course-modal .input-section .outputs-control {\n+  margin-top: 10px;\n+}\n+.create-course-modal .input-section .outputs-control .outputs-control-content {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  flex-direction: row;\n+}\n+.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector {\n+  width: 120px;\n+  border-radius: 6px;\n+  padding: 10px 12px;\n+  border: 1px solid #E5E7EB;\n+  font-size: 0.95em;\n+  background-color: #F7FAFC;\n+  color: #1A202C;\n+  height: 40px;\n+}\n+.create-course-modal .input-section .lp-tom-select {\n+  width: 100%;\n+}\n+.create-course-modal .input-section .course-content-wrapper {\n+  background: #F7FAFC;\n+  padding: 8px 16px;\n+  border-radius: 16px;\n+}\n+.create-course-modal .input-section .course-content-wrapper input[readonly],\n+.create-course-modal .input-section .course-content-wrapper textarea[readonly] {\n+  background-color: #FFFFFF !important;\n+  cursor: not-allowed;\n+  opacity: 0.8;\n+}\n+.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,\n+.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus {\n+  box-shadow: none;\n+  border-color: #E5E7EB;\n+}\n+.create-course-modal .output-section {\n+  display: flex;\n+  flex-direction: column;\n+}\n+.create-course-modal .output-section .output-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 8px;\n+}\n+.create-course-modal .output-section .output-header h3 {\n+  font-weight: 700;\n+  line-height: 22px;\n+  font-size: 14px;\n+  color: #1A202C;\n+}\n+.create-course-modal .output-section .output-header .icon-button {\n+  background: none;\n+  border: none;\n+  padding: 4px;\n+  cursor: pointer;\n+  color: #A0AEC0;\n+}\n+.create-course-modal .output-section .output-header .icon-button:hover {\n+  color: #4A5568;\n+}\n+.create-course-modal .output-section .output-item {\n+  border-radius: 6px;\n+  margin-bottom: 16px;\n+  background-color: #FFFFFF;\n+  position: relative;\n+}\n+.create-course-modal .output-section .output-item.prompt-item textarea {\n+  background-color: #F7FAFC;\n+  min-height: 80px;\n+}\n+.create-course-modal .output-section .output-item.output-suggestion textarea {\n+  border-color: #dbd6f7;\n+  min-height: 80px;\n+}\n+.create-course-modal .output-section .output-item p.prompt {\n+  font-weight: 500;\n+  color: #4A5568;\n+  font-size: 0.875rem;\n+  margin-bottom: 4px;\n+}\n+.create-course-modal .output-section .output-item .generate-button {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border: none;\n+  padding: 12px 20px;\n+  border-radius: 6px;\n+  font-size: 1rem;\n+  font-weight: 500;\n+  cursor: pointer;\n+  width: 25%;\n+  margin-top: 10px;\n+}\n+.create-course-modal .output-section .output-item .generate-button:hover {\n+  opacity: 0.9;\n+}\n+.create-course-modal .output-section .output-item textarea {\n+  width: 100%;\n+  box-sizing: border-box;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 6px;\n+  padding: 10px 12px;\n+  resize: vertical;\n+  font-size: 0.95em;\n+  color: #1A202C;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+}\n+.create-course-modal .output-section .output-item textarea:focus {\n+  outline: none;\n+  border-color: #7E6CE2;\n+  box-shadow: 0 0 0 1px #7E6CE2;\n+}\n+.create-course-modal .output-section .output-item .output-actions {\n+  position: absolute;\n+  top: 30%;\n+  left: 2%;\n+  display: flex;\n+  gap: 8px;\n+  visibility: hidden;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button {\n+  font-size: 0.875rem;\n+  font-weight: 500;\n+  padding: 6px 12px;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  border: 1px solid #E5E7EB;\n+  background-color: #FFFFFF;\n+  color: #4A5568;\n+  transition: background-color 0.2s, color 0.2s, border-color 0.2s;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover {\n+  background-color: #F7FAFC;\n+  border-color: #c8ccd5;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.apply-button {\n+  background-color: #7E6CE2;\n+  border-color: #7E6CE2;\n+  color: #fff;\n+}\n+.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover {\n+  opacity: 0.9;\n+}\n+.create-course-modal .output-section .output-item:hover .output-actions {\n+  visibility: visible;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion {\n+  overflow-y: auto;\n+  flex-grow: 1;\n+  padding-left: 5px;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder {\n+  flex-grow: 1;\n+  border: 2px dashed #E5E7EB;\n+  border-radius: 6px;\n+  background-color: #E5E7EB;\n+  position: relative;\n+  height: 150px;\n+  width: 100%;\n+  background-position: center;\n+  background-repeat: no-repeat;\n+  margin-bottom: 10px;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions {\n+  position: absolute;\n+  bottom: 5px;\n+  right: 80%;\n+  transform: translateX(50%);\n+  display: flex;\n+  gap: 10px;\n+  width: 30%;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button {\n+  padding: 5px 20px;\n+  border-radius: 4px;\n+  border: 1px solid #E5E7EB;\n+  background-color: rgba(255, 255, 255, 0.8);\n+  cursor: pointer;\n+}\n+.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border-color: #7E6CE2;\n+}\n+.create-course-modal .ts-wrapper .ts-control .item {\n+  background-color: #F7FAFC;\n+  border: 1px solid #E5E7EB;\n+  color: #4A5568;\n+  border-radius: 20px;\n+  padding: 4px 10px;\n+}\n+.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder {\n+  color: #A0AEC0;\n+}\n+.create-course-modal .modal-content {\n+  gap: 40px;\n+  padding: 24px 30px;\n+}\n+.create-course-modal .modal-content .input-section .form-group {\n+  margin-bottom: 16px;\n+}\n+.create-course-modal .modal-content .input-section .form-group label {\n+  margin-bottom: 6px;\n+  display: block;\n+}\n+.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols {\n+  display: grid;\n+  grid-template-columns: 1fr 1fr;\n+  gap: 16px 20px;\n+  margin-bottom: 16px;\n+}\n+.create-course-modal .modal-content .input-section h3 {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1A202C;\n+  margin-top: 20px;\n+  margin-bottom: 8px;\n+}\n+.create-course-modal .modal-content .input-section h3:first-child {\n+  margin-top: 0;\n+}\n+.create-course-modal .modal-content .input-section p.description {\n+  font-size: 12px;\n+  color: #4A5568;\n+  margin: -4px 0 16px 0;\n+}\n+.create-course-modal .modal-content .input-section .lp-notice.notice-warning {\n+  background-color: #FEFCE8;\n+  border: 1px solid #FDE047;\n+  border-radius: 6px;\n+  padding: 12px;\n+  margin: 10px 0 20px 0;\n+  font-size: 14px;\n+  color: #713F12;\n+}\n+.create-course-modal .modal-content .input-section .lp-notice.notice-warning a {\n+  font-weight: 600;\n+  color: #713F12;\n+  text-decoration: underline;\n+}\n+.create-course-modal .modal-content .output-section .output-placeholder-wrapper {\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  text-align: center;\n+  height: 100%;\n+  min-height: 200px;\n+  background-color: #F9FAFB;\n+  border-radius: 8px;\n+  border: 1px solid #E5E7EB;\n+  padding: 20px;\n+}\n+.create-course-modal .modal-content .output-section .output-placeholder-wrapper p {\n+  color: #4A5568;\n+  font-size: 15px;\n+}\n+.create-course-modal .modal-content .output-section .output-header .icon-button {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  color: #4A5568;\n+}\n+.create-course-modal .modal-content .output-section .output-header .icon-button svg {\n+  width: 20px;\n+  height: 20px;\n+}\n+\n+.lp-generate-data-ai-wrap {\n+  width: 100%;\n+  max-height: 90%;\n+}\n+.lp-generate-data-ai-wrap .content-title {\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .step-header {\n+  display: flex;\n+  justify-content: space-between;\n+  margin-bottom: 30px;\n+  padding: 0 20px;\n+  gap: 10px;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item {\n+  display: flex;\n+  align-items: center;\n+  font-size: 14px;\n+  color: #1A202C;\n+  position: relative;\n+  flex-grow: 1;\n+  justify-content: center;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item.active .step-number {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border-color: #7E6CE2;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item .step-text {\n+  color: #111111;\n+  font-weight: 600;\n+}\n+.lp-generate-data-ai-wrap .step-header .step-item .step-number {\n+  width: 28px;\n+  height: 28px;\n+  border-radius: 50%;\n+  border: 1px solid #E5E7EB;\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  margin-left: 10px;\n+  font-weight: 500;\n+  background-color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai {\n+  border: 1px solid #E5E7EB;\n+  border-radius: 10px;\n+  padding: 20px;\n+  text-align: right;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields {\n+  min-height: 400px;\n+  max-height: 600px;\n+  overflow: auto;\n+  padding: 0 2px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title {\n+  font-size: 1.2em;\n+  font-weight: 600;\n+  margin-bottom: 10px;\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active {\n+  display: block;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2 {\n+  font-size: 24px;\n+  font-weight: 700;\n+  margin: 0 0 8px 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p {\n+  font-size: 15px;\n+  color: #1A202C;\n+  margin: 0 0 30px 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid {\n+  display: grid;\n+  grid-template-columns: 1fr 1fr;\n+  gap: 20px 30px;\n+  margin-bottom: 30px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group {\n+  margin-bottom: 10px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width {\n+  grid-column: 1\u002F-1;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  margin-bottom: 8px;\n+  color: #111111;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper {\n+  width: 100%;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea {\n+  width: 100%;\n+  padding: 8px 16px;\n+  border-radius: 10px;\n+  border: 1px solid #E5E7EB;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  box-sizing: border-box;\n+  transition: border-color 0.2s, box-shadow 0.2s;\n+  margin: 0;\n+  background-color: transparent;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus {\n+  outline: none;\n+  border-color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item {\n+  border: 1px solid #E5E7EB;\n+  color: #4A5568;\n+  border-radius: 6px;\n+  padding: 4px 10px;\n+  background-color: transparent;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder {\n+  color: #A0AEC0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea {\n+  min-height: 86px;\n+  resize: vertical;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description {\n+  color: #898989;\n+  margin-top: 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer {\n+  padding: 0;\n+  border: none;\n+  font-size: 16px;\n+  min-height: unset;\n+  box-shadow: none;\n+  border-radius: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview {\n+  min-height: 120px;\n+  background-color: #F9FAFB;\n+  color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions {\n+  display: flex;\n+  justify-content: flex-end;\n+  gap: 12px;\n+  margin-top: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt {\n+  display: flex;\n+  justify-items: center;\n+  align-items: center;\n+  gap: 10px;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button {\n+  padding: 10px 20px;\n+  font-size: 15px;\n+  font-weight: 600;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  border: 1px solid transparent;\n+  transition: all 0.2s;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover {\n+  background-color: #1A202C;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary {\n+  background-color: #fff;\n+  color: #7E6CE2;\n+  border-color: #7E6CE2;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled {\n+  background-color: #E5E7EB;\n+  color: #1A202C;\n+  cursor: not-allowed;\n+  border-color: #E5E7EB;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout {\n+  display: flex;\n+  gap: 30px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel {\n+  flex: 2;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel {\n+  flex: 1;\n+  min-width: 300px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details {\n+  display: none;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3 {\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #111827;\n+  margin-top: 0;\n+  margin-bottom: 24px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder {\n+  width: 100%;\n+  height: 50vh;\n+  background-color: #E5E7EB;\n+  border-radius: 8px;\n+  display: flex;\n+  justify-content: center;\n+  align-items: center;\n+  justify-items: center;\n+  font-size: 20px;\n+  color: #6B7280;\n+  margin-bottom: 30px;\n+  font-weight: 600;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title {\n+  font-size: 18px;\n+  font-weight: 700;\n+  margin-top: 30px;\n+  margin-bottom: 16px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum {\n+  font-size: 18px;\n+  font-weight: 700;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block {\n+  border-radius: 8px;\n+  border: 0.8px solid #E5E7EB;\n+  padding: 16px 8px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4 {\n+  font-size: 13px;\n+  font-weight: bold;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p {\n+  font-size: 15px;\n+  line-height: 1.6;\n+  color: #374151;\n+  margin-top: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul {\n+  list-style: none;\n+  padding: 0;\n+  margin: 12px 0 0 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li {\n+  position: relative;\n+  padding-right: 20px;\n+  margin-bottom: 8px;\n+  color: #374151;\n+  font-size: 15px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before {\n+  content: \"•\";\n+  position: absolute;\n+  right: 0;\n+  color: #1A202C;\n+  line-height: 1.5;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel {\n+  background-color: #F9FAFB;\n+  padding: 24px;\n+  border-radius: 8px;\n+  border: 1px solid #E5E7EB;\n+  height: fit-content;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3 {\n+  font-size: 16px;\n+  font-weight: 600;\n+  margin-top: 0;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list {\n+  display: none;\n+  list-style: none;\n+  padding: 0;\n+  margin: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li {\n+  display: flex;\n+  align-items: center;\n+  font-size: 15px;\n+  color: #374151;\n+  margin-bottom: 12px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span {\n+  margin-left: 5px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg {\n+  color: #1A202C;\n+  width: 20px;\n+  height: 20px;\n+  margin-left: 12px;\n+  flex-shrink: 0;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field] {\n+  min-height: 300px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result {\n+  width: 100%;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results {\n+  display: grid;\n+  gap: 10px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result {\n+  margin-bottom: 4px;\n+}\n+.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button {\n+  margin-left: 4px;\n+}\n+.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap {\n+  max-height: 400px;\n+  overflow-y: auto;\n+  margin-bottom: 20px;\n+}\n+.lp-generate-data-ai-wrap .lp-btn-close-ai-popup {\n+  position: absolute;\n+  top: 10px;\n+  left: 10px;\n+  background: none;\n+  border: none;\n+  font-size: 20px;\n+  cursor: pointer;\n+  color: #ccc;\n+}\n+.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover {\n+  color: #f27474;\n+}\n+.lp-generate-data-ai-wrap .lp-ai-warning-refer {\n+  border: 1px solid #FCD34D;\n+  background-color: #FFFBEB;\n+  padding: 10px;\n+  border-radius: 5px;\n+  display: flex;\n+  gap: 5px;\n+  align-items: center;\n+}\n+\n+.lp-ai-course-data-preview-wrap .course-title {\n+  font-size: 1.5em;\n+  font-weight: 700;\n+  margin-bottom: 10px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .course-sections {\n+  margin-top: 30px;\n+}\n+.lp-ai-course-data-preview-wrap .section-title {\n+  font-weight: bold;\n+  font-size: 1.2em;\n+  margin-bottom: 10px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .lesson-title,\n+.lp-ai-course-data-preview-wrap .quiz-title,\n+.lp-ai-course-data-preview-wrap .question-title {\n+  font-weight: 600;\n+  font-size: 1em;\n+  margin-bottom: 8px;\n+  color: #1A202C;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-item {\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: 10px;\n+  padding: 20px;\n+  margin: 20px 0;\n+  background-color: #fff;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-items {\n+  margin: 20px 20px 0 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-section-items:last-child {\n+  margin-bottom: 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-lesson-item,\n+.lp-ai-course-data-preview-wrap .course-quiz-item,\n+.lp-ai-course-data-preview-wrap .quiz-question-item {\n+  padding: 12px 0;\n+  border-top: 1px solid var(--lp-border-color, #E2E0DB);\n+}\n+.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,\n+.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,\n+.lp-ai-course-data-preview-wrap .quiz-question-item:last-child {\n+  padding-bottom: 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-questions,\n+.lp-ai-course-data-preview-wrap .course-question-options {\n+  margin: 20px 20px 0 0;\n+}\n+.lp-ai-course-data-preview-wrap .course-questions:last-child,\n+.lp-ai-course-data-preview-wrap .course-question-options:last-child {\n+  margin-bottom: 0;\n+}\n+\n+.lp-ai-images-warp {\n+  display: grid;\n+  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n+  gap: 15px;\n+  margin-top: 20px;\n+  max-height: 400px;\n+  overflow-y: auto;\n+}\n+.lp-ai-images-warp .lp-ai-image-item {\n+  position: relative;\n+}\n+.lp-ai-images-warp .lp-ai-image-item img {\n+  object-fit: contain;\n+  width: 100%;\n+}\n+.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image {\n+  position: absolute;\n+  top: 5px;\n+  left: 0;\n+  transform: translateX(5%);\n+  background-color: rgba(0, 0, 0, 0.6);\n+  color: #fff;\n+  border: none;\n+  padding: 6px 12px;\n+  border-radius: 4px;\n+  font-size: 0.875rem;\n+  cursor: pointer;\n+  opacity: 0;\n+  transition: opacity 0.2s;\n+}\n+.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image {\n+  opacity: 1;\n+}\n+\n+.lp-creating-course-ai-wrap .loading-wrap {\n+  margin-top: 20px;\n+}\n+.lp-creating-course-ai-wrap .lp-loading-circle {\n+  width: 40px;\n+  height: 40px;\n+  border-width: 5px;\n+}\n+\n+.lp-must-enable-ai-wrap {\n+  text-align: right;\n+  line-height: 1.6em;\n+}\n+.lp-must-enable-ai-wrap h2 {\n+  margin-bottom: 0;\n+}\n+.lp-must-enable-ai-wrap h2 i {\n+  margin-left: 10px;\n+  color: #DC2626;\n+}\n+.lp-must-enable-ai-wrap .desc {\n+  color: #6B7280;\n+}\n+.lp-must-enable-ai-wrap .p2 {\n+  color: #6B7280;\n+}\n+.lp-must-enable-ai-wrap a {\n+  color: #2563EB;\n+  text-decoration: underline;\n+  cursor: pointer;\n+}\n+.lp-must-enable-ai-wrap .help-link {\n+  padding: 16px;\n+  border: 1px solid #E5E7EB;\n+  border-radius: 8px;\n+  font-size: 13px;\n+}\n+.lp-must-enable-ai-wrap .help-link a {\n+  text-decoration: none;\n+  margin-top: 10px;\n+}\n+.lp-must-enable-ai-wrap .help-link i {\n+  color: #2A73AB;\n+}\n+.lp-must-enable-ai-wrap .button-actions {\n+  margin-top: 20px;\n+  text-align: left;\n+}\n+.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup {\n+  border: none;\n+  color: #4B5563;\n+  background: none;\n+}\n+.lp-must-enable-ai-wrap .button-actions .button-primary {\n+  background-color: #7E6CE2;\n+  color: #fff;\n+  border: none;\n+}\n+.lp-must-enable-ai-wrap .button-actions .button-primary:hover {\n+  opacity: 0.9;\n+}\n+\n+.fui-loading-spinner-3 {\n+  color: #7E6CE2;\n+  position: relative;\n+  width: 100px;\n+  height: 80px;\n+  margin-right: 80px;\n+  display: none;\n+}\n+.fui-loading-spinner-3 div {\n+  transform-origin: 40px 40px;\n+  animation: rj9Ft 1.2s linear infinite;\n+}\n+.fui-loading-spinner-3 div:after {\n+  content: \" \";\n+  display: block;\n+  position: absolute;\n+  top: 3px;\n+  right: 37px;\n+  width: 6px;\n+  height: 18px;\n+  border-radius: 20%;\n+  background: #7E6CE2;\n+}\n+.fui-loading-spinner-3 div:nth-child(1) {\n+  transform: rotate(0deg);\n+  animation-delay: -1.1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(2) {\n+  transform: rotate(-30deg);\n+  animation-delay: -1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(3) {\n+  transform: rotate(-60deg);\n+  animation-delay: -0.9s;\n+}\n+.fui-loading-spinner-3 div:nth-child(4) {\n+  transform: rotate(-90deg);\n+  animation-delay: -0.8s;\n+}\n+.fui-loading-spinner-3 div:nth-child(5) {\n+  transform: rotate(-120deg);\n+  animation-delay: -0.7s;\n+}\n+.fui-loading-spinner-3 div:nth-child(6) {\n+  transform: rotate(-150deg);\n+  animation-delay: -0.6s;\n+}\n+.fui-loading-spinner-3 div:nth-child(7) {\n+  transform: rotate(-180deg);\n+  animation-delay: -0.5s;\n+}\n+.fui-loading-spinner-3 div:nth-child(8) {\n+  transform: rotate(-210deg);\n+  animation-delay: -0.4s;\n+}\n+.fui-loading-spinner-3 div:nth-child(9) {\n+  transform: rotate(-240deg);\n+  animation-delay: -0.3s;\n+}\n+.fui-loading-spinner-3 div:nth-child(10) {\n+  transform: rotate(-270deg);\n+  animation-delay: -0.2s;\n+}\n+.fui-loading-spinner-3 div:nth-child(11) {\n+  transform: rotate(-300deg);\n+  animation-delay: -0.1s;\n+}\n+.fui-loading-spinner-3 div:nth-child(12) {\n+  transform: rotate(-330deg);\n+  animation-delay: 0s;\n+}\n+\n+@keyframes rj9Ft {\n+  0% {\n+    opacity: 1;\n+  }\n+  100% {\n+    opacity: 0;\n+  }\n+}\n+html {\n+  margin-top: 0 !important;\n+}\n+\n+.lp-course-builder-canvas,\n+.lp-toast,\n+.swal2-container {\n+  font-family: BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1e1e1e;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+}\n+.lp-course-builder-canvas *,\n+.lp-course-builder-canvas *::before,\n+.lp-course-builder-canvas *::after,\n+.lp-toast *,\n+.lp-toast *::before,\n+.lp-toast *::after,\n+.swal2-container *,\n+.swal2-container *::before,\n+.swal2-container *::after {\n+  box-sizing: border-box;\n+}\n+.lp-course-builder-canvas button,\n+.lp-toast button,\n+.swal2-container button {\n+  font-family: BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+}\n+.lp-course-builder-canvas input[type=date],\n+.lp-course-builder-canvas input[type=datetime-local],\n+.lp-course-builder-canvas input[type=datetime],\n+.lp-course-builder-canvas input[type=email],\n+.lp-course-builder-canvas input[type=month],\n+.lp-course-builder-canvas input[type=number],\n+.lp-course-builder-canvas input[type=password],\n+.lp-course-builder-canvas input[type=search],\n+.lp-course-builder-canvas input[type=tel],\n+.lp-course-builder-canvas input[type=text],\n+.lp-course-builder-canvas input[type=time],\n+.lp-course-builder-canvas input[type=url],\n+.lp-course-builder-canvas input[type=week],\n+.lp-toast input[type=date],\n+.lp-toast input[type=datetime-local],\n+.lp-toast input[type=datetime],\n+.lp-toast input[type=email],\n+.lp-toast input[type=month],\n+.lp-toast input[type=number],\n+.lp-toast input[type=password],\n+.lp-toast input[type=search],\n+.lp-toast input[type=tel],\n+.lp-toast input[type=text],\n+.lp-toast input[type=time],\n+.lp-toast input[type=url],\n+.lp-toast input[type=week],\n+.swal2-container input[type=date],\n+.swal2-container input[type=datetime-local],\n+.swal2-container input[type=datetime],\n+.swal2-container input[type=email],\n+.swal2-container input[type=month],\n+.swal2-container input[type=number],\n+.swal2-container input[type=password],\n+.swal2-container input[type=search],\n+.swal2-container input[type=tel],\n+.swal2-container input[type=text],\n+.swal2-container input[type=time],\n+.swal2-container input[type=url],\n+.swal2-container input[type=week] {\n+  padding: 0;\n+  line-height: normal;\n+  min-height: unset;\n+}\n+.lp-course-builder-canvas input[type=date]:focus,\n+.lp-course-builder-canvas input[type=datetime-local]:focus,\n+.lp-course-builder-canvas input[type=datetime]:focus,\n+.lp-course-builder-canvas input[type=email]:focus,\n+.lp-course-builder-canvas input[type=month]:focus,\n+.lp-course-builder-canvas input[type=number]:focus,\n+.lp-course-builder-canvas input[type=password]:focus,\n+.lp-course-builder-canvas input[type=search]:focus,\n+.lp-course-builder-canvas input[type=tel]:focus,\n+.lp-course-builder-canvas input[type=text]:focus,\n+.lp-course-builder-canvas input[type=time]:focus,\n+.lp-course-builder-canvas input[type=url]:focus,\n+.lp-course-builder-canvas input[type=week]:focus,\n+.lp-toast input[type=date]:focus,\n+.lp-toast input[type=datetime-local]:focus,\n+.lp-toast input[type=datetime]:focus,\n+.lp-toast input[type=email]:focus,\n+.lp-toast input[type=month]:focus,\n+.lp-toast input[type=number]:focus,\n+.lp-toast input[type=password]:focus,\n+.lp-toast input[type=search]:focus,\n+.lp-toast input[type=tel]:focus,\n+.lp-toast input[type=text]:focus,\n+.lp-toast input[type=time]:focus,\n+.lp-toast input[type=url]:focus,\n+.lp-toast input[type=week]:focus,\n+.swal2-container input[type=date]:focus,\n+.swal2-container input[type=datetime-local]:focus,\n+.swal2-container input[type=datetime]:focus,\n+.swal2-container input[type=email]:focus,\n+.swal2-container input[type=month]:focus,\n+.swal2-container input[type=number]:focus,\n+.swal2-container input[type=password]:focus,\n+.swal2-container input[type=search]:focus,\n+.swal2-container input[type=tel]:focus,\n+.swal2-container input[type=text]:focus,\n+.swal2-container input[type=time]:focus,\n+.swal2-container input[type=url]:focus,\n+.swal2-container input[type=week]:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+.lp-course-builder-canvas input[type=checkbox]:focus,\n+.lp-course-builder-canvas input[type=color]:focus,\n+.lp-course-builder-canvas input[type=date]:focus,\n+.lp-course-builder-canvas input[type=datetime-local]:focus,\n+.lp-course-builder-canvas input[type=datetime]:focus,\n+.lp-course-builder-canvas input[type=email]:focus,\n+.lp-course-builder-canvas input[type=month]:focus,\n+.lp-course-builder-canvas input[type=number]:focus,\n+.lp-course-builder-canvas input[type=password]:focus,\n+.lp-course-builder-canvas input[type=radio]:focus,\n+.lp-course-builder-canvas input[type=search]:focus,\n+.lp-course-builder-canvas input[type=tel]:focus,\n+.lp-course-builder-canvas input[type=text]:focus,\n+.lp-course-builder-canvas input[type=time]:focus,\n+.lp-course-builder-canvas input[type=url]:focus,\n+.lp-course-builder-canvas input[type=week]:focus,\n+.lp-course-builder-canvas select:focus,\n+.lp-course-builder-canvas textarea:focus,\n+.lp-toast input[type=checkbox]:focus,\n+.lp-toast input[type=color]:focus,\n+.lp-toast input[type=date]:focus,\n+.lp-toast input[type=datetime-local]:focus,\n+.lp-toast input[type=datetime]:focus,\n+.lp-toast input[type=email]:focus,\n+.lp-toast input[type=month]:focus,\n+.lp-toast input[type=number]:focus,\n+.lp-toast input[type=password]:focus,\n+.lp-toast input[type=radio]:focus,\n+.lp-toast input[type=search]:focus,\n+.lp-toast input[type=tel]:focus,\n+.lp-toast input[type=text]:focus,\n+.lp-toast input[type=time]:focus,\n+.lp-toast input[type=url]:focus,\n+.lp-toast input[type=week]:focus,\n+.lp-toast select:focus,\n+.lp-toast textarea:focus,\n+.swal2-container input[type=checkbox]:focus,\n+.swal2-container input[type=color]:focus,\n+.swal2-container input[type=date]:focus,\n+.swal2-container input[type=datetime-local]:focus,\n+.swal2-container input[type=datetime]:focus,\n+.swal2-container input[type=email]:focus,\n+.swal2-container input[type=month]:focus,\n+.swal2-container input[type=number]:focus,\n+.swal2-container input[type=password]:focus,\n+.swal2-container input[type=radio]:focus,\n+.swal2-container input[type=search]:focus,\n+.swal2-container input[type=tel]:focus,\n+.swal2-container input[type=text]:focus,\n+.swal2-container input[type=time]:focus,\n+.swal2-container input[type=url]:focus,\n+.swal2-container input[type=week]:focus,\n+.swal2-container select:focus,\n+.swal2-container textarea:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+.lp-course-builder-canvas input[type=checkbox],\n+.lp-course-builder-canvas input[type=radio],\n+.lp-toast input[type=checkbox],\n+.lp-toast input[type=radio],\n+.swal2-container input[type=checkbox],\n+.swal2-container input[type=radio] {\n+  box-shadow: unset;\n+  margin: 0;\n+}\n+.lp-course-builder-canvas input[type=radio]:checked::before,\n+.lp-course-builder-canvas input[type=checkbox]:checked::before,\n+.lp-toast input[type=radio]:checked::before,\n+.lp-toast input[type=checkbox]:checked::before,\n+.swal2-container input[type=radio]:checked::before,\n+.swal2-container input[type=checkbox]:checked::before {\n+  margin: 0;\n+}\n+.lp-course-builder-canvas a,\n+.lp-toast a,\n+.swal2-container a {\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas a:hover,\n+.lp-toast a:hover,\n+.swal2-container a:hover {\n+  color: #5b52d1;\n+}\n+.lp-course-builder-canvas a:focus,\n+.lp-toast a:focus,\n+.swal2-container a:focus {\n+  border-color: none;\n+  box-shadow: unset;\n+  outline: unset;\n+}\n+\n #lp-course-builder {\n   display: block !important;\n   min-height: 100vh;\n@@ -246,7 +1565,7 @@\n   min-height: calc(100vh - 60px);\n }\n \n-.lp-cb-top-header {\n+#lp-course-builder .lp-cb-top-header {\n   position: fixed;\n   top: 0;\n   right: 0;\n@@ -258,76 +1577,108 @@\n   align-items: center;\n   justify-content: space-between;\n   padding: 0 24px;\n-  z-index: 1001;\n+  z-index: 9;\n   box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n }\n-.lp-cb-top-header .lp-cb-top-header__logo {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo {\n   display: flex;\n   align-items: center;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo a {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a {\n   display: flex;\n   align-items: center;\n   gap: 10px;\n   text-decoration: none;\n   color: #1e1e1e;\n+  line-height: 0;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a:hover {\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo a:hover {\n-  color: #1f74ff;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .lp-cb-top-header__logo-image {\n+  display: block;\n+  width: auto;\n+  max-width: 240px;\n+  max-height: 40px;\n+  object-fit: contain;\n }\n-.lp-cb-top-header .lp-cb-top-header__logo .dashicons {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .dashicons {\n   font-size: 28px;\n   width: 28px;\n   height: 28px;\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__title {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__title {\n   font-size: 18px;\n   font-weight: 600;\n   color: #1e1e1e;\n }\n-.lp-cb-top-header .lp-cb-top-header__user {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user {\n   display: flex;\n   align-items: center;\n-  gap: 16px;\n+  gap: 12px;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-info {\n-  display: flex;\n-  align-items: center;\n-  gap: 10px;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar {\n+  position: relative;\n+  flex-shrink: 0;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-info img {\n-  width: 32px;\n-  height: 32px;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar img {\n+  width: 40px;\n+  height: 40px;\n   border-radius: 50%;\n   object-fit: cover;\n+  display: block;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__online-dot {\n+  position: absolute;\n+  bottom: 1px;\n+  left: 1px;\n+  width: 10px;\n+  height: 10px;\n+  background: #22c55e;\n+  border-radius: 50%;\n+  border: 2px solid #fff;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-name {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-info {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 2px;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-name {\n   font-size: 14px;\n-  font-weight: 500;\n+  font-weight: 600;\n   color: #1e1e1e;\n+  line-height: 1.3;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-link {\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link {\n   font-size: 13px;\n-  color: #1f74ff;\n+  color: #898989;\n   text-decoration: none;\n+  line-height: 1.3;\n }\n-.lp-cb-top-header .lp-cb-top-header__user-link:hover {\n-  text-decoration: underline;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link:hover {\n+  color: #7067ED;\n }\n-.lp-cb-top-header .lp-cb-top-header__logout {\n-  font-size: 13px;\n-  color: #6b7280;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 36px;\n+  height: 36px;\n+  border-radius: 6px;\n+  color: #cfcfcf;\n   text-decoration: none;\n-  padding: 6px 12px;\n-  border: 1px solid #f5f5f5;\n-  border-radius: 4px;\n   transition: all 0.2s;\n+  margin-right: 4px;\n }\n-.lp-cb-top-header .lp-cb-top-header__logout:hover {\n-  background: #f9fafb;\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout svg {\n+  width: 22px;\n+  height: 22px;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout:hover {\n+  background: #fef2f2;\n   color: #ef4444;\n-  border-color: #ef4444;\n }\n \n #lp-course-builder-sidebar.lp-cb-sidebar {\n@@ -340,7 +1691,7 @@\n   color: #000000 !important;\n   display: flex !important;\n   flex-direction: column !important;\n-  z-index: 1000 !important;\n+  z-index: 8 !important;\n   overflow-y: auto !important;\n   padding: 0 !important;\n   border-radius: 0 !important;\n@@ -373,11 +1724,11 @@\n   gap: 12px;\n   background: transparent !important;\n   border: none !important;\n-  border-radius: 6px !important;\n+  border-radius: 12px !important;\n   margin-top: 6px;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover {\n-  background: #eeeeee !important;\n+  background: #EEF1FF !important;\n   color: #000000 !important;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons {\n@@ -392,35 +1743,113 @@\n   font-weight: 500;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a {\n-  background: #e2edff !important;\n-  color: #1f74ff !important;\n+  background: #EEF1FF !important;\n+  color: #7067ED !important;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons {\n-  color: #1f74ff !important;\n+  color: #7067ED !important;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 36px;\n+  height: 36px;\n+  border-radius: 6px;\n+  background: transparent;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-right: auto;\n+  margin-bottom: 16px;\n+  margin-left: 16px;\n+  border: none;\n+  color: #aaaaaa;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle svg {\n+  min-width: 24px;\n+  height: 24px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle .lp-toggle-expand {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle:hover {\n+  background: #EEF1FF;\n+  border-color: #d1d5db;\n+  color: #7067ED;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer {\n-  padding: 16px 0;\n+  padding: 16px;\n   border-top: 1px solid #f5f5f5;\n   margin-top: auto;\n   background: #fdfdfd;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer:empty {\n+  display: none;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item {\n   display: flex;\n   align-items: center;\n-  padding: 12px 20px;\n+  padding: 12px 16px;\n   color: #000000;\n   text-decoration: none;\n   gap: 12px;\n   font-size: 14px;\n   transition: all 0.2s;\n+  border-radius: 6px;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover {\n-  color: #1f74ff;\n+  background: #EEF1FF;\n+  color: #7067ED;\n }\n #lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons {\n-  font-size: 18px;\n-  width: 18px;\n-  height: 18px;\n+  font-size: 20px;\n+  width: 20px;\n+  height: 20px;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed {\n+  width: 72px !important;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav {\n+  padding: 16px 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a {\n+  justify-content: center;\n+  padding: 12px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons {\n+  margin: 0;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer {\n+  padding: 16px 8px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle {\n+  margin: 0 auto;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-collapse {\n+  display: none;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-expand {\n+  display: block;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item {\n+  justify-content: center;\n+  padding: 12px;\n+}\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item .lp-cb-sidebar__item-title {\n+  display: none;\n+}\n+\n+#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed + #lp-course-builder-content.lp-cb-main,\n+#lp-course-builder.has-collapsed-sidebar #lp-course-builder-content.lp-cb-main {\n+  margin-right: 72px !important;\n+  width: calc(100% - 72px) !important;\n }\n \n #lp-course-builder-content.lp-cb-main {\n@@ -428,7 +1857,7 @@\n   margin-right: 260px !important;\n   margin-top: 60px !important;\n   min-height: calc(100vh - 60px);\n-  padding: 0 24px !important;\n+  padding: 0 24px 24px !important;\n   background: #ffffff !important;\n   border-radius: 0 !important;\n   width: calc(100% - 260px) !important;\n@@ -471,12 +1900,12 @@\n   border-radius: 8px 8px 0 0;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item {\n-  color: #6b7280;\n+  color: #898989;\n   text-decoration: none;\n   transition: color 0.2s;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current {\n   color: #1e1e1e;\n@@ -484,10 +1913,10 @@\n }\n .lp-cb-breadcrumb .lp-cb-breadcrumb__separator {\n   margin: 0 10px;\n-  color: #6b7280;\n+  color: #898989;\n }\n \n-.lp-cb-header {\n+#lp-course-builder .lp-cb-header {\n   position: sticky;\n   top: 60px;\n   z-index: 99;\n@@ -496,25 +1925,46 @@\n   justify-content: space-between;\n   padding: 20px 12px;\n   background: #ffffff;\n-  border-bottom: 1px solid #f5f5f5;\n+  gap: 30px;\n }\n-.lp-cb-header .lp-cb-header__left {\n+#lp-course-builder .lp-cb-header .lp-cb-header__left {\n   display: flex;\n   align-items: center;\n   gap: 12px;\n }\n-.lp-cb-header .lp-cb-header__title {\n+#lp-course-builder .lp-cb-header .lp-cb-header__title {\n   margin: 0;\n-  font-size: 40px;\n+  font-size: 24px;\n   font-weight: 600;\n-  margin-bottom: 10px;\n   color: #1e1e1e;\n }\n-.lp-cb-header .lp-cb-header__actions {\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  font-size: 14px;\n+  padding: 5px 12px;\n+  gap: 10px;\n+  font-weight: 500;\n+  border-radius: 6px;\n+  color: #898989;\n+  text-decoration: none;\n+  transition: all 0.2s;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link .dashicons {\n+  font-size: 18px;\n+  width: 18px;\n+  height: 18px;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-admin-link:hover {\n+  background: #f1f5f9;\n+  color: #7067ED;\n+}\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions {\n   display: flex;\n   gap: 12px;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button {\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button {\n   padding: 10px 20px;\n   border-radius: 6px;\n   font-weight: 500;\n@@ -527,19 +1977,19 @@\n   color: #1e1e1e;\n   transition: all 0.2s;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button:hover {\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button:hover {\n   background: #f9fafb;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button-primary,\n-.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn {\n-  background: #1f74ff !important;\n-  border-color: #1f74ff !important;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary,\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn {\n+  background: #7067ED !important;\n+  border-color: #7067ED !important;\n   color: #fff !important;\n }\n-.lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,\n-.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover {\n-  background: #0047ba !important;\n-  border-color: #0047ba !important;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover {\n+  background: #5b52d1 !important;\n+  border-color: #5b52d1 !important;\n }\n \n html:has(#wpadminbar) .lp-cb-header {\n@@ -551,47 +2001,78 @@\n     top: calc(60px + 46px);\n   }\n }\n-.course-status {\n+.course-status,\n+.quiz-status,\n+.quizze-status,\n+.question-status,\n+.lesson-status {\n   display: inline-block;\n   padding: 4px 10px;\n-  border-radius: 4px;\n+  border-radius: 20px;\n   font-size: 12px;\n   font-weight: 500;\n   text-transform: capitalize;\n }\n-.course-status.publish {\n-  background: #dcfce7;\n-  color: #166534;\n-}\n-.course-status.draft {\n-  background: #fef3c7;\n-  color: #92400e;\n-}\n-.course-status.pending {\n+.course-status.publish,\n+.quiz-status.publish,\n+.quizze-status.publish,\n+.question-status.publish,\n+.lesson-status.publish {\n+  background: #e7f6e9;\n+  color: #28a746;\n+}\n+.course-status.draft,\n+.quiz-status.draft,\n+.quizze-status.draft,\n+.question-status.draft,\n+.lesson-status.draft {\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+}\n+.course-status.pending,\n+.quiz-status.pending,\n+.quizze-status.pending,\n+.question-status.pending,\n+.lesson-status.pending {\n   background: #dbeafe;\n   color: #1e40af;\n }\n-.course-status.private {\n+.course-status.private,\n+.quiz-status.private,\n+.quizze-status.private,\n+.question-status.private,\n+.lesson-status.private {\n   background: #f3e8ff;\n   color: #6b21a8;\n }\n-.course-status.trash {\n+.course-status.trash,\n+.quiz-status.trash,\n+.quizze-status.trash,\n+.question-status.trash,\n+.lesson-status.trash {\n   background: #fee2e2;\n   color: #991b1b;\n }\n+.course-status.future,\n+.quiz-status.future,\n+.quizze-status.future,\n+.question-status.future,\n+.lesson-status.future {\n+  background: #ffd700;\n+  color: #333;\n+}\n \n-.lp-cb-tabs {\n+#lp-course-builder .lp-cb-tabs {\n   display: flex;\n   border-bottom: 1px solid #f5f5f5;\n-  padding: 0 12px;\n   background: #ffffff;\n-  gap: 10;\n+  gap: 10px;\n   margin: 0;\n   list-style: none;\n }\n-.lp-cb-tabs .lp-cb-tabs__item {\n-  padding: 16px 24px;\n-  color: #6b7280;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item {\n+  padding: 12px 24px;\n+  color: #898989;\n   text-decoration: none;\n   font-weight: 500;\n   font-size: 14px;\n@@ -599,29 +2080,32 @@\n   margin-bottom: -1px;\n   transition: all 0.2s ease;\n   background: transparent;\n+  border-radius: 10px 10px 0 0;\n }\n-.lp-cb-tabs .lp-cb-tabs__item:hover {\n-  color: #1e1e1e;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n }\n-.lp-cb-tabs .lp-cb-tabs__item.is-active {\n-  color: #1f74ff;\n-  border-bottom-color: #1f74ff;\n+#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item.is-active {\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n+  background: #EEF1FF;\n }\n \n-.lp-cb-tab-content {\n+#lp-course-builder .lp-cb-tab-content {\n   padding: 0;\n   background: #ffffff;\n   border-radius: 0 0 8px 8px;\n+  margin-top: 30px;\n }\n-.lp-cb-tab-content .cb-section__course-edit,\n-.lp-cb-tab-content .lp-course-builder-content__section {\n-  padding: 12px;\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section {\n   background: #ffffff;\n   border-radius: 0;\n   min-height: auto;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header {\n   display: flex;\n   align-items: center;\n   justify-content: space-between;\n@@ -629,21 +2113,21 @@\n   margin-bottom: 20px;\n   border-bottom: 1px solid #f5f5f5;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left {\n   display: flex;\n   align-items: center;\n   gap: 12px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title {\n   margin: 0;\n   font-size: 18px;\n   font-weight: 600;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status {\n   display: inline-block;\n   padding: 4px 10px;\n   border-radius: 4px;\n@@ -651,85 +2135,84 @@\n   font-weight: 500;\n   text-transform: capitalize;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish {\n-  background: #dcfce7;\n-  color: #166534;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft {\n-  background: #fef3c7;\n-  color: #92400e;\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish {\n+  background: #e7f6e9;\n+  color: #28a746;\n+}\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft {\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending {\n   background: #dbeafe;\n   color: #1e40af;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,\n-.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action {\n+#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,\n+#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action {\n   display: flex;\n   gap: 10px;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab {\n   display: flex;\n   gap: 24px;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs {\n   flex: 0 0 200px;\n   list-style: none;\n   margin: 0;\n   padding: 0;\n   border-left: 1px solid #f5f5f5;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li {\n   margin: 0;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a {\n   display: block;\n   padding: 12px 16px;\n-  color: #6b7280;\n+  color: #898989;\n   text-decoration: none;\n   border-right: 2px solid transparent;\n   transition: all 0.2s;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover {\n-  color: #1e1e1e;\n-  background: #f9fafb;\n-}\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n-  color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n-  border-right-color: #1f74ff;\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n+  color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+  border-right-color: #7067ED;\n   font-weight: 500;\n }\n-.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n   flex: 1;\n   min-width: 0;\n }\n \n-.lp-cb-footer {\n+#lp-course-builder .lp-cb-footer {\n   padding: 20px 0;\n   border-top: 1px solid #f5f5f5;\n   background: #ffffff;\n   border-radius: 0 0 8px 8px;\n   margin-top: auto;\n }\n-.lp-cb-footer .lp-cb-footer__actions {\n+#lp-course-builder .lp-cb-footer .lp-cb-footer__actions {\n   display: flex;\n   justify-content: flex-end;\n   gap: 12px;\n }\n \n #lp-course-builder .lp-course-builder-content__tab {\n-  padding: 0 24px;\n   background: #ffffff;\n   border-radius: 8px;\n   max-width: 100%;\n }\n #lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title {\n-  font-size: 40px;\n+  font-size: 28px;\n   font-weight: 600;\n   color: #1e1e1e;\n   margin: 20px 0 24px 0;\n@@ -737,8 +2220,8 @@\n \n .lp-cb-save-btn,\n #lp-course-builder .lp-button-primary {\n-  background: #1f74ff !important;\n-  border-color: #1f74ff !important;\n+  background: #7067ED !important;\n+  border-color: #7067ED !important;\n   color: #fff !important;\n   padding: 10px 20px;\n   border-radius: 6px;\n@@ -748,8 +2231,16 @@\n }\n .lp-cb-save-btn:hover,\n #lp-course-builder .lp-button-primary:hover {\n-  background: #0047ba !important;\n-  border-color: #0047ba !important;\n+  background: #5b52d1 !important;\n+  border-color: #5b52d1 !important;\n+}\n+.lp-cb-save-btn.loading, .lp-cb-save-btn.lp-loading, .lp-cb-save-btn[aria-disabled=true],\n+#lp-course-builder .lp-button-primary.loading,\n+#lp-course-builder .lp-button-primary.lp-loading,\n+#lp-course-builder .lp-button-primary[aria-disabled=true] {\n+  opacity: 0.7;\n+  pointer-events: none;\n+  cursor: not-allowed;\n }\n .lp-cb-save-btn.has-changes,\n #lp-course-builder .lp-button-primary.has-changes {\n@@ -771,10 +2262,12 @@\n \n #lp-course-builder .cb-btn-update,\n #lp-course-builder .cb-btn-preview,\n-#lp-course-builder .cb-btn-darft {\n+#lp-course-builder .cb-btn-darft,\n+#lp-course-builder .cb-btn-publish,\n+#lp-course-builder .cb-btn-pending {\n   padding: 10px 20px;\n   font-size: 14px;\n-  border-radius: 6px;\n+  border-radius: 12px;\n   font-weight: 500;\n   cursor: pointer;\n   border: none;\n@@ -782,12 +2275,16 @@\n }\n #lp-course-builder .cb-btn-update.has-changes,\n #lp-course-builder .cb-btn-preview.has-changes,\n-#lp-course-builder .cb-btn-darft.has-changes {\n+#lp-course-builder .cb-btn-darft.has-changes,\n+#lp-course-builder .cb-btn-publish.has-changes,\n+#lp-course-builder .cb-btn-pending.has-changes {\n   position: relative;\n }\n #lp-course-builder .cb-btn-update.has-changes::after,\n #lp-course-builder .cb-btn-preview.has-changes::after,\n-#lp-course-builder .cb-btn-darft.has-changes::after {\n+#lp-course-builder .cb-btn-darft.has-changes::after,\n+#lp-course-builder .cb-btn-publish.has-changes::after,\n+#lp-course-builder .cb-btn-pending.has-changes::after {\n   content: \"\";\n   position: absolute;\n   top: -4px;\n@@ -798,37 +2295,39 @@\n   border-radius: 50%;\n   border: 2px solid #fff;\n }\n-#lp-course-builder .cb-btn-update.loading,\n+#lp-course-builder .cb-btn-update.loading, #lp-course-builder .cb-btn-update.lp-loading,\n #lp-course-builder .cb-btn-preview.loading,\n-#lp-course-builder .cb-btn-darft.loading {\n+#lp-course-builder .cb-btn-preview.lp-loading,\n+#lp-course-builder .cb-btn-darft.loading,\n+#lp-course-builder .cb-btn-darft.lp-loading,\n+#lp-course-builder .cb-btn-publish.loading,\n+#lp-course-builder .cb-btn-publish.lp-loading,\n+#lp-course-builder .cb-btn-pending.loading,\n+#lp-course-builder .cb-btn-pending.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n-#lp-course-builder .cb-btn-update {\n-  background: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update {\n+  background: #7067ED;\n   color: #fff;\n }\n-#lp-course-builder .cb-btn-update:hover {\n-  background: #0047ba;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update:hover {\n+  background: #5b52d1;\n }\n-#lp-course-builder .cb-btn-update.cb-btn-primary {\n-  background: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary {\n+  background: #7067ED;\n   color: #fff;\n+  border-radius: 12px;\n }\n-#lp-course-builder .cb-btn-update.cb-btn-primary:hover {\n-  background: #0047ba;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary:hover {\n+  background: #5b52d1;\n }\n-#lp-course-builder .cb-btn-preview {\n-  border: 1px solid #e5e7eb;\n-  color: #1e1e1e;\n-  text-decoration: none;\n-  display: inline-flex;\n-  align-items: center;\n-  background: #fff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview {\n+  border-radius: 12px;\n }\n-#lp-course-builder .cb-btn-preview:hover {\n-  border-color: #1f74ff;\n-  color: #1f74ff;\n+#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview:hover {\n+  border-color: #7067ED;\n+  color: #7067ED;\n }\n #lp-course-builder.cb-btn-secondary {\n   background: #fff;\n@@ -836,8 +2335,8 @@\n   color: #1e1e1e;\n }\n #lp-course-builder.cb-btn-secondary:hover {\n-  border-color: #1f74ff;\n-  color: #1f74ff;\n+  border-color: #7067ED;\n+  color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-btn-darft {\n@@ -847,6 +2346,14 @@\n #lp-course-builder .cb-btn-darft:hover {\n   background: #d1d5db;\n }\n+#lp-course-builder .cb-btn-pending {\n+  background: #dbeafe;\n+  color: #1e40af;\n+}\n+#lp-course-builder .cb-btn-pending:hover {\n+  background: #bfdbfe;\n+  color: #1e3a8a;\n+}\n #lp-course-builder .cb-btn-trash {\n   cursor: pointer;\n   font-size: 16px;\n@@ -858,6 +2365,89 @@\n #lp-course-builder .cb-btn-trash:hover {\n   background: #fef2f2;\n }\n+#lp-course-builder .cb-header-action-expanded {\n+  position: relative;\n+  display: inline-flex;\n+  align-items: center;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded {\n+  padding: 0;\n+  height: 40px;\n+  width: 40px;\n+  justify-content: center;\n+  border-radius: 12px;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded:hover {\n+  background: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #898989;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading:before {\n+  margin-top: 0;\n+  margin-left: 0;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .cb-header-action-expanded__items {\n+  position: absolute;\n+  top: calc(100% + 6px);\n+  left: 0;\n+  min-width: 180px;\n+  padding: 8px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  background: #fff;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  display: flex;\n+  flex-direction: column;\n+  gap: 2px;\n+  z-index: 1000;\n+  opacity: 0;\n+  visibility: hidden;\n+  transform: translateY(-8px);\n+  pointer-events: none;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .cb-header-action-expanded.is-open .cb-header-action-expanded__items {\n+  opacity: 1;\n+  visibility: visible;\n+  transform: translateY(0);\n+  pointer-events: auto;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash {\n+  gap: 10px;\n+  color: #ef4444;\n+  font-size: 14px;\n+  border: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #ef4444;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash:hover {\n+  background: #fef2f2;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate {\n+  gap: 10px;\n+  font-size: 14px;\n+  border: none;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #3b82f6;\n+}\n+#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate:hover {\n+  background: #dbeafe;\n+}\n #lp-course-builder .cb-header-actions-dropdown {\n   position: relative;\n   display: inline-flex;\n@@ -868,10 +2458,10 @@\n   justify-content: center;\n   width: 36px;\n   padding: 0;\n-  background: #1f74ff;\n-  border: 1px solid #1f74ff;\n-  border-right-color: #98bfe4;\n-  border-radius: 6px 0 0 6px;\n+  background: #7067ED;\n+  border: 1px solid #7067ED;\n+  border-right-color: #EEF1FF;\n+  border-radius: 12px 0 0 12px;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n@@ -883,19 +2473,39 @@\n   transition: transform 0.2s;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover {\n-  border-color: #1f74ff;\n+  border-color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] {\n-  border-color: #1f74ff;\n+  border-color: #7067ED;\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n   transform: rotate(-180deg);\n-  color: #1f74ff;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading, #lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading {\n+  opacity: 0.7;\n+  pointer-events: none;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle {\n+  background: #dbeafe !important;\n+  border-color: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a !important;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu {\n   position: absolute;\n@@ -935,7 +2545,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #6b7280;\n+  color: #898989;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child {\n   border-radius: 7px 7px 0 0;\n@@ -950,7 +2560,7 @@\n   background: #f8fafc;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger {\n   color: #ef4444;\n@@ -961,35 +2571,54 @@\n #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover {\n   background: #fef2f2;\n }\n-#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading {\n+#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading, #lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle {\n+  background: #d1d5db !important;\n+  border-color: #d1d5db !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons {\n+  color: #374151 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover {\n+  background: #b8bcc4 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true], #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #b8bcc4 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons, #lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #374151 !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle {\n+  background: #dbeafe !important;\n+  border-color: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe !important;\n+}\n+#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a !important;\n+}\n \n .cb-header-actions-dropdown {\n   position: relative;\n   display: inline-flex;\n }\n-.cb-header-actions-dropdown .cb-btn-update {\n-  padding: 10px 16px;\n-  font-size: 14px;\n-  font-weight: 500;\n-  border: none;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-  border-radius: 0 6px 6px 0 !important;\n-  background: #1f74ff;\n-  color: #fff;\n-}\n-.cb-header-actions-dropdown .cb-btn-update:hover {\n-  background: #0047ba;\n-}\n-.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary {\n-  background: #1f74ff;\n-  color: #fff;\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action {\n+  background: #dbeafe;\n+  color: #1e40af;\n }\n-.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary:hover {\n-  background: #0047ba;\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action:hover {\n+  background: #bfdbfe;\n+  color: #1e3a8a;\n }\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle {\n   display: inline-flex;\n@@ -1000,7 +2629,7 @@\n   padding: 10px 0;\n   background: #d0e3ff;\n   border: none;\n-  border-radius: 6px 0 0 6px;\n+  border-radius: 12px 0 0 12px;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n@@ -1008,7 +2637,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #1f74ff;\n+  color: #7067ED;\n   transition: transform 0.2s;\n }\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover {\n@@ -1020,6 +2649,52 @@\n .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n   transform: rotate(-180deg);\n }\n+.cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading, .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading {\n+  opacity: 0.7;\n+  pointer-events: none;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle {\n+  background: #dbeafe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action + .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle {\n+  background: #d1d5db;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons {\n+  color: #374151;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover, .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover {\n+  background: #b8bcc4;\n+}\n+.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true], .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #b8bcc4;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle {\n+  background: #dbeafe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons {\n+  color: #1e40af;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] {\n+  background: #bfdbfe;\n+}\n+.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons {\n+  color: #1e3a8a;\n+}\n .cb-header-actions-dropdown .cb-dropdown-menu {\n   position: absolute;\n   top: calc(100% + 4px);\n@@ -1027,7 +2702,7 @@\n   min-width: 180px;\n   background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   z-index: 1000;\n   opacity: 0;\n@@ -1058,7 +2733,7 @@\n   font-size: 16px;\n   width: 16px;\n   height: 16px;\n-  color: #6b7280;\n+  color: #898989;\n }\n .cb-header-actions-dropdown .cb-dropdown-item:first-child {\n   border-radius: 7px 7px 0 0;\n@@ -1073,7 +2748,7 @@\n   background: #f8fafc;\n }\n .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons {\n-  color: #1f74ff;\n+  color: #7067ED;\n }\n .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger {\n   color: #ef4444;\n@@ -1084,17 +2759,17 @@\n .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover {\n   background: #fef2f2;\n }\n-.cb-header-actions-dropdown .cb-dropdown-item.loading {\n+.cb-header-actions-dropdown .cb-dropdown-item.loading, .cb-header-actions-dropdown .cb-dropdown-item.lp-loading {\n   opacity: 0.7;\n   pointer-events: none;\n }\n \n @keyframes pulse-save {\n   0%, 100% {\n-    box-shadow: 0 0 0 0 rgba(31, 116, 255, 0.4);\n+    box-shadow: 0 0 0 0 rgba(112, 103, 237, 0.4);\n   }\n   50% {\n-    box-shadow: 0 0 0 8px rgba(31, 116, 255, 0);\n+    box-shadow: 0 0 0 8px rgba(112, 103, 237, 0);\n   }\n }\n @media screen and (max-width: 1024px) {\n@@ -1123,15 +2798,14 @@\n   .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,\n   .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active {\n     border-right: none;\n-    border-bottom-color: #1f74ff;\n+    border-bottom-color: #7067ED;\n   }\n }\n @media screen and (max-width: 768px) {\n   .lp-cb-top-header {\n     padding: 0 16px;\n   }\n-  .lp-cb-top-header .lp-cb-top-header__user-name,\n-  .lp-cb-top-header .lp-cb-top-header__user-link {\n+  .lp-cb-top-header .lp-cb-top-header__user-info {\n     display: none;\n   }\n   #lp-course-builder-sidebar.lp-cb-sidebar {\n@@ -1172,11 +2846,391 @@\n     flex-wrap: wrap;\n   }\n }\n-#lp-course-builder .lp-cb-tab__title {\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-cb-item-action-wrap {\n+  display: flex;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+\n+.lp-cb-item-action-expand-toggle {\n+  cursor: pointer;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+}\n+.lp-cb-item-action-expand-toggle svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n+}\n+.lp-cb-item-action-expand-toggle.lp-button {\n+  border: none;\n+}\n+.lp-cb-item-action-expand-toggle:hover {\n+  background-color: #eef1ff;\n+}\n+\n+.lp-cb-item-action-expand {\n+  display: flex;\n+  position: absolute;\n+  min-width: 160px;\n+  white-space: nowrap;\n+  top: 60px;\n+  left: 16px;\n+  transform: translate(-15px, -15px);\n+  padding: 10px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 16px;\n+  font-weight: 500;\n+  z-index: 100;\n+}\n+\n+.lp-cb-item-action {\n+  padding: 10px;\n+  cursor: pointer;\n+  text-decoration: none;\n+  border-radius: 6px;\n+  color: #1e1e1e;\n+}\n+.lp-cb-item-action:hover {\n+  background-color: #f3f4f6;\n+}\n+.lp-cb-item-action.trash, .lp-cb-item-action.delete {\n+  color: #ef4444;\n+}\n+\n+.swal2-popup {\n+  padding: 20px;\n+  border-radius: 16px;\n+}\n+\n+.swal2-popup .content-title {\n+  margin: 0 0 20px 0;\n+  padding: 0;\n+  text-align: center;\n+  font-size: 1.5em;\n+  font-weight: bold;\n+}\n+\n+.swal2-popup.lp-select-items-popup {\n+  padding: 20px !important;\n+}\n+\n+button.swal2-close {\n+  height: 32px;\n+  width: 32px;\n+}\n+\n+button.swal2-cancel.swal2-styled {\n+  border-radius: 10px;\n+  padding: 10px 24px;\n+  background: #fff;\n+  color: #aaaaaa;\n+  border: 1px solid #e1e1e1;\n+  font-weight: 500;\n+  min-width: 140px;\n+}\n+\n+button.swal2-confirm.swal2-styled {\n+  background: #7067ed;\n+  border-radius: 12px;\n+  padding: 10px 24px;\n+  min-width: 140px;\n+}\n+\n+.swal2-icon.swal2-icon-show {\n+  border: none;\n+  margin-bottom: 5px;\n+}\n+\n+#swal2-title {\n+  padding: 0;\n+  font-size: 22px;\n+  color: #111111;\n+}\n+\n+#swal2-html-container {\n+  padding-top: 8px;\n+  font-size: 15px;\n+  color: #4f4f4f;\n+}\n+\n+#swal2-html-container:has(.lp-must-enable-ai-wrap) {\n+  padding: 0;\n+}\n+\n+div:where(.swal2-container).swal2-backdrop-show,\n+div:where(.swal2-container).swal2-noanimation {\n+  background: none !important;\n+  backdrop-filter: blur(3px);\n+}\n+\n+div:where(.swal2-container).swal2-center > .swal2-popup {\n+  border-radius: 12px;\n+  box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n+}\n+\n+.swal2-container .button {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.swal2-container .button:hover {\n+  background-color: #5b52d1;\n+}\n+.swal2-container .button.lp-btn-close-ai-popup:hover {\n+  background-color: transparent;\n+  color: #7067ED;\n+}\n+.swal2-container .lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover {\n+  background-color: #5b52d1;\n+}\n+\n+.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content::before {\n+  content: none;\n+}\n+\n+.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content .lp-cb-swal-icon-image {\n+  display: block;\n+  width: 48px;\n+  height: 48px;\n+}\n+\n+#swal2-html-container:has(.lp-form-generate-data-ai) {\n+  padding-bottom: 24px;\n+}\n+#swal2-html-container:has(.lp-form-generate-data-ai) .form-grid {\n+  margin-bottom: 0;\n+}\n+\n+#lp-course-builder .cb-tab-header {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  margin: 20px 0 24px 0;\n+}\n+#lp-course-builder .cb-tab-header .lp-cb-tab__title {\n   font-size: 28px;\n   font-weight: 600;\n-  margin-bottom: 20px;\n   color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .cb-tab-filter-bar {\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .cb-filter-fields {\n+  display: flex;\n+  align-items: flex-end;\n+  gap: 16px;\n+  flex-wrap: wrap;\n+}\n+#lp-course-builder .cb-filter-group {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 6px;\n+}\n+#lp-course-builder .cb-filter-group label {\n+  font-size: 13px;\n+  font-weight: 500;\n+}\n+#lp-course-builder .cb-filter-search {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  padding: 10px 14px;\n+  gap: 8px;\n+  min-width: 200px;\n+}\n+#lp-course-builder .cb-filter-search input {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  outline: none;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .cb-filter-search input::placeholder {\n+  color: #6b7280;\n+}\n+#lp-course-builder select {\n+  padding: 10px 14px 10px 32px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: left 10px center;\n+  background-size: 14px;\n+}\n+#lp-course-builder select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+#lp-course-builder .cb-filter-actions {\n+  display: flex;\n+  gap: 4px;\n+  padding-bottom: 1px;\n+}\n+#lp-course-builder .cb-filter-btn {\n+  padding: 8px 20px;\n+  border: none;\n+  border-radius: 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+#lp-course-builder .cb-filter-btn:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder .cb-filter-reset {\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 20px;\n+  border-radius: 12px;\n+}\n+#lp-course-builder .cb-filter-reset:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+#lp-course-builder .cb-btn-add-new:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder .cb-btn-add-new .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder button.cb-btn-add-new {\n+  line-height: 1.5;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .cb-tab-header {\n+    flex-direction: column;\n+    align-items: stretch;\n+    gap: 12px;\n+  }\n+  #lp-course-builder .cb-tab-header .cb-btn-add-new {\n+    justify-content: center;\n+  }\n+  #lp-course-builder .cb-filter-fields {\n+    flex-direction: column;\n+    align-items: stretch;\n+  }\n+  #lp-course-builder .cb-filter-search {\n+    min-width: 100%;\n+  }\n+  #lp-course-builder .cb-filter-actions {\n+    justify-content: flex-start;\n+  }\n+}\n+#lp-course-builder .learn-press-tip {\n+  display: inline-flex;\n+  align-items: center;\n+  margin-top: 2px;\n+  color: #6b7280;\n+  font-style: normal;\n+  font-weight: normal;\n+  line-height: 1;\n+  vertical-align: baseline;\n+  cursor: pointer;\n+  position: relative;\n+}\n+#lp-course-builder .learn-press-tip:before {\n+  font-family: \"lp-icon\";\n+  content: \"\\f059\";\n+}\n+#lp-course-builder .learn-press-tip > * {\n+  display: none;\n+  position: absolute;\n+  bottom: 100%;\n+  right: 50%;\n+  transform: translateX(50%);\n+  margin-bottom: 8px;\n+  padding: 8px 12px;\n+  background-color: #333;\n+  color: #fff !important;\n+  font-size: 12px;\n+  line-height: 1.5;\n+  text-align: center;\n+  border-radius: 4px;\n+  white-space: normal;\n+  width: max-content;\n+  max-width: 250px;\n+  z-index: 999;\n+  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n+  pointer-events: none;\n+}\n+#lp-course-builder .learn-press-tip > *::after {\n+  content: \"\";\n+  position: absolute;\n+  top: 100%;\n+  right: 50%;\n+  transform: translateX(50%);\n+  border-width: 5px;\n+  border-style: solid;\n+  border-color: #333 transparent transparent transparent;\n+}\n+#lp-course-builder .learn-press-tip p {\n+  color: #fff !important;\n+  margin-right: 0 !important;\n+  width: 100% !important;\n+  font-weight: 500 !important;\n+}\n+#lp-course-builder .learn-press-tip:hover > * {\n+  display: block;\n }\n #lp-course-builder .cb-tab-course__action {\n   display: flex;\n@@ -1188,16 +3242,17 @@\n   position: relative;\n   display: flex;\n   align-items: center;\n-  background: #f5f5f5;\n-  border-radius: 6px;\n-  padding: 12px 16px;\n-  gap: 6px;\n+  border-radius: 12px;\n+  padding: 5px 0px;\n+  gap: 8px;\n   margin-bottom: 0;\n   border: 1px solid #e5e7eb;\n+  width: 40%;\n+  max-width: 500px;\n }\n #lp-course-builder .lp-icon-search {\n   font-size: 16px;\n-  color: #6b7280;\n+  color: #7067ED;\n   flex-shrink: 0;\n }\n #lp-course-builder .cb-input-search-course {\n@@ -1217,34 +3272,25 @@\n   border: none;\n   background: none;\n }\n-#lp-course-builder .cb-btn-add-new {\n-  display: inline-flex;\n-  align-items: center;\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  padding: 10px 20px;\n-  border-radius: 6px;\n-  text-decoration: none;\n-  font-size: 14px;\n-  font-weight: 500;\n-  transition: background-color 0.2s;\n+#lp-course-builder .cb-search-btn.loading {\n+  pointer-events: none;\n+}\n+#lp-course-builder .cb-search-btn.loading i {\n+  display: none;\n }\n #lp-course-builder .cb-btn-back a {\n   text-decoration: none;\n }\n-#lp-course-builder .cb-btn-add-new:hover {\n-  background-color: #333;\n-}\n #lp-course-builder .cb-list-course {\n-  list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n-  padding: 0;\n   margin: 0;\n+  padding: 0;\n+  list-style: none;\n+}\n+#lp-course-builder .cb-list-course li.course {\n+  margin-bottom: 20px;\n }\n #lp-course-builder .course {\n-  background: #fff;\n+  background: #ffffff;\n   border-radius: 12px;\n   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n   border: 1px solid #e5e7eb;\n@@ -1258,14 +3304,35 @@\n   gap: 20px;\n   padding: 16px;\n   height: 100%;\n+  position: relative;\n }\n #lp-course-builder .course-thumbnail {\n-  width: 280px;\n-  min-width: 280px;\n+  position: relative;\n+  margin: -2px;\n+}\n+@media (min-width: 769px) {\n+  #lp-course-builder .course-thumbnail {\n+    width: 26%;\n+  }\n+}\n+#lp-course-builder .course-thumbnail img {\n+  width: 100%;\n   border-radius: 8px;\n-  aspect-ratio: 16\u002F10;\n-  overflow: hidden;\n-  background-color: #f5f5f5;\n+  object-fit: cover;\n+}\n+#lp-course-builder .course-thumbnail .cb-item-status-badge {\n+  position: absolute;\n+  bottom: 8px;\n+  left: 8px;\n+  padding: 4px 10px;\n+  border-radius: 4px;\n+  font-size: 11px;\n+  font-weight: 600;\n+  text-transform: uppercase;\n+}\n+#lp-course-builder .course-thumbnail .cb-item-status-badge.offline {\n+  background: #1e40af;\n+  color: #ffffff;\n }\n #lp-course-builder .course-img {\n   width: 100%;\n@@ -1278,34 +3345,28 @@\n }\n #lp-course-builder .course-content {\n   flex: 1;\n-  display: flex;\n-  flex-direction: column;\n }\n #lp-course-builder .wap-course-title {\n   margin-top: 0;\n-  margin-bottom: 12px;\n-}\n-#lp-course-builder .wap-course-title a {\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  margin-bottom: 8px;\n }\n #lp-course-builder .course-permalink {\n   text-decoration: none;\n   color: #1e1e1e;\n   font-size: 18px;\n-  font-weight: 600;\n+  font-weight: 700;\n   display: block;\n   transition: color 0.2s;\n }\n #lp-course-builder .course-permalink:hover {\n-  color: #3b82f6;\n+  color: #2E91FA;\n }\n #lp-course-builder .course-title {\n   text-decoration: none;\n   line-height: 1.4;\n+  font-size: 20px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n }\n #lp-course-builder .course-featured {\n   display: inline-block;\n@@ -1321,21 +3382,32 @@\n #lp-course-builder .course-instructor__wrapper {\n   display: flex;\n   gap: 5px;\n-  margin-bottom: 15px;\n+  margin-bottom: 12px;\n   font-size: 13px;\n   color: #666;\n }\n+#lp-course-builder .course-instructor-category {\n+  margin-bottom: 12px;\n+}\n #lp-course-builder .course-instructor-category > div {\n   display: flex;\n   gap: 5px;\n   align-items: center;\n+  flex-wrap: wrap;\n }\n-#lp-course-builder .course-instructor-category label {\n-  color: #999;\n+#lp-course-builder .course-by-label,\n+#lp-course-builder .course-categories-label {\n+  color: #6b7280;\n+  font-size: 14px;\n+}\n+#lp-course-builder .course-category-name {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 500;\n }\n #lp-course-builder .course-instructor a,\n #lp-course-builder .course-categories a {\n-  color: #3b82f6;\n+  color: #2E91FA;\n   text-decoration: none;\n }\n #lp-course-builder .course-instructor a:hover,\n@@ -1345,33 +3417,60 @@\n #lp-course-builder .course-wrap-meta {\n   display: flex;\n   flex-wrap: wrap;\n-  gap: 15px;\n-  margin-bottom: 15px;\n-  padding-bottom: 15px;\n+  gap: 16px;\n+  margin-bottom: 16px;\n }\n #lp-course-builder .instructor-display-name {\n-  font-weight: 400;\n+  font-size: 14px;\n+  color: #1e1e1e;\n }\n #lp-course-builder .meta-item {\n   font-size: 14px;\n-  color: #666;\n+  color: #6b7280;\n   display: flex;\n   align-items: center;\n-  gap: 5px;\n+  gap: 8px;\n+}\n+#lp-course-builder .meta-item i {\n+  font-size: 16px;\n+  color: #7067ED;\n+}\n+#lp-course-builder .meta-item .dashicons {\n+  font-size: 16px;\n+  width: 16px;\n+  height: 16px;\n+  color: #7067ED;\n+}\n+#lp-course-builder .meta-item > div {\n+  display: contents;\n+}\n+#lp-course-builder .meta-item > div span {\n+  color: #6b7280;\n }\n #lp-course-builder .course-bottom {\n   margin-top: auto;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: flex-start;\n+  gap: 12px;\n }\n-#lp-course-builder .course-price {\n-  display: block;\n+#lp-course-builder .course-item-price-wrap {\n+  margin-bottom: 0;\n+}\n+#lp-course-builder .course-last-updated {\n+  font-size: 12px;\n+  color: #999;\n+  position: absolute;\n+  bottom: 16px;\n+  left: 16px;\n }\n #lp-course-builder .course-item-price .free {\n-  color: #10b981;\n+  color: #2E91FA;\n   font-weight: 600;\n   font-size: 16px;\n }\n #lp-course-builder .course-item-price .price {\n-  color: #3b82f6;\n+  color: #E31A1B;\n   font-weight: 700;\n   font-size: 18px;\n }\n@@ -1381,32 +3480,45 @@\n #lp-course-builder .course-action {\n   position: relative;\n   display: flex;\n-  align-items: flex-start;\n-  gap: 20px;\n+  gap: 8px;\n }\n #lp-course-builder .course-action-editor {\n-  padding: 15px 20px 15px 0;\n+  padding: 0;\n }\n #lp-course-builder .course-action-expanded {\n   cursor: pointer;\n-  padding: 15px 0 15px 20px;\n+  padding: 7px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  background: #ffffff;\n+  transition: all 0.2s;\n+  height: 36px;\n+  width: 36px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .course-action-expanded:hover {\n+  background: #F7F7F7;\n+  border-color: #d1d5db;\n }\n #lp-course-builder .course-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+  width: 20px;\n+  height: 20px;\n+  color: #6b7280;\n }\n #lp-course-builder .course-action-expanded__items {\n   display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n-  left: 0;\n-  transform: translate(-100%, 10px);\n+  top: 60px;\n+  left: 16px;\n+  transform: translate(-15px, -15px);\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n   z-index: 100;\n@@ -1430,7 +3542,7 @@\n #lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n }\n #lp-course-builder .course-action-expanded__items .course-action-expanded__trash,\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete {\n@@ -1440,15 +3552,11 @@\n #lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover {\n   background-color: #fef2f2;\n }\n-#lp-course-builder .course-action-expanded:hover + .course-action-expanded__items,\n-#lp-course-builder .course-action-expanded__items:hover {\n-  display: flex !important;\n-}\n #lp-course-builder .course-action .wap-course-title {\n   margin: 0;\n }\n #lp-course-builder .course-action .course-permalink {\n-  color: #3b82f6;\n+  color: #2E91FA;\n   font-size: 14px;\n   font-weight: 500;\n }\n@@ -1456,44 +3564,43 @@\n   text-decoration: underline;\n }\n #lp-course-builder .btn-edit-course {\n-  display: flex;\n+  display: inline-flex;\n   align-items: center;\n+  justify-content: center;\n   text-decoration: none;\n   font-size: 14px;\n-  font-weight: 500;\n-  border-radius: 6px;\n-  padding: 8px 16px;\n-  gap: 6px;\n-  border: 1px solid #e5e7eb;\n-  background: #fff;\n-  color: #1e1e1e;\n+  font-weight: 600;\n+  border-radius: 8px;\n+  padding: 0 20px;\n+  height: 36px;\n+  gap: 8px;\n+  border: none;\n+  background: #7067ED;\n+  color: #ffffff;\n   transition: all 0.2s;\n+  white-space: nowrap;\n }\n #lp-course-builder .btn-edit-course:hover {\n-  background: #f5f5f5;\n-  border-color: #d1d5db;\n-}\n-#lp-course-builder .btn-edit-course svg {\n-  width: 1rem;\n-  height: 1rem;\n+  background: #5b52d1;\n }\n #lp-course-builder .course-status {\n   display: inline-flex;\n }\n #lp-course-builder .course-status span {\n-  font-size: 12px;\n+  font-size: 13px;\n   padding: 4px 12px;\n-  border-radius: 20px;\n-  font-weight: 500;\n+  border-radius: 4px;\n+  font-weight: 600;\n   text-transform: capitalize;\n-}\n-#lp-course-builder .course-status:not(.publish):not(.trash) span {\n-  background-color: #fef3c7;\n-  color: #92400e;\n+  line-height: normal;\n }\n #lp-course-builder .course-status.publish span {\n-  color: #166534;\n-  background-color: #dcfce7;\n+  background: #E7F6E9;\n+  color: #28A746;\n+}\n+#lp-course-builder .course-status.future span {\n+  background: #ffd700;\n+  color: #333;\n }\n #lp-course-builder .course-status.trash span {\n   color: #991b1b;\n@@ -1522,27 +3629,32 @@\n   min-width: 36px;\n   height: 36px;\n   padding: 0 12px;\n-  border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   text-decoration: none;\n-  color: #333;\n+  color: #898989;\n   font-size: 14px;\n   transition: all 0.2s;\n-  background: #fff;\n+  background: #ffffff;\n+  font-weight: 600;\n }\n #lp-course-builder .page-numbers a:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n   border-color: #d1d5db;\n+  color: #1e1e1e;\n }\n #lp-course-builder .page-numbers .current {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border-color: #1e1e1e;\n-  font-weight: 600;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n #lp-course-builder .page-numbers .next,\n #lp-course-builder .page-numbers .prev {\n-  font-weight: 600;\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+#lp-course-builder .page-numbers .next:hover,\n+#lp-course-builder .page-numbers .prev:hover {\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n #lp-course-builder #lp-material-container {\n   font-size: 13px;\n@@ -1551,6 +3663,9 @@\n   margin: 0;\n   display: block;\n }\n+#lp-course-builder #lp-material-container hr {\n+  display: none;\n+}\n #lp-course-builder .field-material__label {\n   width: 150px;\n   max-width: 150px;\n@@ -1559,9 +3674,21 @@\n }\n #lp-course-builder .lp-material--field-wrap {\n   display: flex;\n-  align-items: center;\n   gap: 11px;\n-  margin-top: 11px;\n+  margin-top: 12px;\n+}\n+#lp-course-builder .lp-material--field-wrap label {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 600;\n+  width: 100px;\n+}\n+#lp-course-builder .lp-material--field-wrap:first-child {\n+  margin-top: 0;\n+}\n+#lp-course-builder .lp-material--field-wrap.field-action-wrap {\n+  justify-content: flex-start;\n+  flex-direction: row-reverse;\n }\n #lp-course-builder .lp-material--field-external-link,\n #lp-course-builder .lp-material--field-title {\n@@ -1569,56 +3696,116 @@\n   align-items: center;\n   gap: 8px;\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-course-builder .lp-material--field-method {\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n+#lp-course-builder .lp-material-btn-wrap {\n+  display: flex;\n+  gap: 12px;\n+  margin-top: 15px;\n+}\n+#lp-course-builder #lp-material--group-container .lp-material--group {\n+  padding: 20px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 12px;\n+  max-width: 420px;\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder #lp-material--group-container .lp-material--group:not(:has(*)) {\n+  display: none;\n+}\n+#lp-course-builder #btn-lp--add-material,\n+#lp-course-builder #btn-lp--save-material,\n #lp-course-builder .lp-material-save-field,\n #lp-course-builder .lp-material--delete {\n   padding: 8px 20px;\n   border-radius: 6px;\n-  background: #fff;\n+  background: #ffffff;\n   font-size: 14px;\n   font-weight: 500;\n   cursor: pointer;\n-  border: 1px solid #d1d5db;\n   transition: all 0.2s;\n }\n+#lp-course-builder #btn-lp--add-material {\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder #btn-lp--add-material:hover {\n+  background-color: #F7F7F7;\n+  border-color: #7067ED;\n+}\n+#lp-course-builder #btn-lp--save-material,\n+#lp-course-builder .lp-material-save-field {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder #btn-lp--save-material:hover,\n+#lp-course-builder .lp-material-save-field:hover {\n+  background-color: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+#lp-course-builder .lp-material--delete {\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-material--delete:hover {\n+  background-color: #F7F7F7;\n+  color: #1e1e1e;\n+  border-color: #1e1e1e;\n+}\n #lp-course-builder .lp-material--upload-wrap label {\n   cursor: pointer;\n   width: 100%;\n-  max-width: 200px;\n+  display: flex;\n+  align-items: center;\n+  gap: 6px;\n   padding: 8px 16px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   font-weight: 500;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n   transition: all 0.2s;\n-  margin-right: 56px;\n+  margin-right: 86px;\n+  overflow: hidden;\n }\n-#lp-course-builder .lp-material--field-upload {\n-  display: none;\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file {\n+  border-color: #7067ED;\n+  background-color: #f9fafb;\n+  font-size: 0;\n+}\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file::before {\n+  font-size: 14px;\n+}\n+#lp-course-builder .lp-material--upload-wrap label.has-selected-file::after {\n+  content: attr(data-file-name);\n+  flex: 1;\n+  min-width: 0;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  white-space: nowrap;\n+  font-size: 14px;\n+  font-weight: 600;\n }\n #lp-course-builder .lp-material--upload-wrap label:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n   border-color: #9ca3af;\n }\n #lp-course-builder .lp-material--upload-wrap label:active {\n@@ -1629,6 +3816,9 @@\n   content: \"📁 \";\n   margin-left: 5px;\n }\n+#lp-course-builder .lp-material--field-upload {\n+  display: none;\n+}\n #lp-course-builder .lp-material--table {\n   width: 100%;\n   border-collapse: collapse;\n@@ -1669,10 +3859,6 @@\n   #lp-course-builder .cb-list-course {\n     gap: 15px;\n   }\n-  #lp-course-builder .course-thumbnail {\n-    width: 200px;\n-    min-width: 200px;\n-  }\n }\n @media (max-width: 768px) {\n   #lp-course-builder .cb-tab-course__action {\n@@ -1690,26 +3876,459 @@\n   #lp-course-builder .course-item {\n     flex-direction: column;\n   }\n-  #lp-course-builder .course-thumbnail {\n-    width: 100%;\n-    min-width: 100%;\n-  }\n   #lp-course-builder .cb-list-course {\n     grid-template-columns: 1fr;\n   }\n }\n \n-#lp-course-builder .cb-list-quiz {\n-  list-style: none;\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+  display: grid;\n+  grid-template-columns: repeat(5, 1fr);\n+  gap: 20px;\n+  margin-bottom: 24px;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: repeat(3, 1fr);\n+  }\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: repeat(2, 1fr);\n+  }\n+}\n+@media (max-width: 480px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 24px 20px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  text-align: center;\n+  gap: 8px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card:hover {\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  transform: translateY(-2px);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon {\n+  width: 48px;\n+  height: 48px;\n+  border-radius: 50%;\n+  background: var(--card-bg, #f9fafb);\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+  margin-bottom: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon svg {\n+  width: 22px;\n+  height: 22px;\n+  color: var(--card-color, #7067ED);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__label {\n+  font-size: 12px;\n+  color: #6b7280;\n+  font-weight: 500;\n+  order: 1;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__value {\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  line-height: 1.2;\n+  order: 2;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row {\n+  display: grid;\n+  gap: 20px;\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin {\n+  grid-template-columns: 1fr 1fr 280px;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin {\n+    grid-template-columns: 1fr 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--instructor {\n+  grid-template-columns: 1fr 1fr;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 20px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter {\n+  padding: 5px 12px 5px 28px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 12px;\n+  color: #6b7280;\n+  cursor: pointer;\n+  outline: none;\n+  height: auto;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body {\n+  height: 220px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body canvas {\n+  width: 100% !important;\n+  height: 100% !important;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 16px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+@media (max-width: 1200px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors {\n+    grid-column: 1\u002F-1;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__header {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__title {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__list {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 20px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item {\n+  display: flex;\n+  align-items: center;\n+  gap: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar {\n+  width: 48px;\n+  height: 48px;\n+  border-radius: 50%;\n+  overflow: hidden;\n+  flex-shrink: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar img {\n+  width: 100%;\n+  height: 100%;\n+  object-fit: cover;\n+  border-radius: 50%;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__info {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+  min-width: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__name {\n+  font-size: 15px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__meta {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.2;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .no-data {\n+  text-align: center;\n+  color: #6b7280;\n+  font-style: italic;\n+  padding: 20px 0;\n+  font-size: 12px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper {\n   display: grid;\n-  grid-template-columns: 1fr;\n+  grid-template-columns: repeat(2, 1fr);\n   gap: 20px;\n+  margin-bottom: 24px;\n+  overflow-x: hidden;\n+  transition: overflow-x 0.3s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper:hover {\n+  overflow-x: auto;\n+}\n+@media (max-width: 900px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses {\n+  background: #ffffff;\n+  border-radius: 12px;\n+  padding: 20px 24px;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  padding-bottom: 16px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .enrolled-students-total {\n+  color: #7067ED;\n+  font-weight: 600;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .revenue-total {\n+  color: #E31A1B;\n+  font-weight: 700;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__list {\n+  display: flex;\n+  flex-direction: column;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item {\n+  display: flex;\n+  align-items: center;\n+  gap: 16px;\n+  padding: 16px 0;\n+  border-bottom: 1px solid #e5e7eb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:last-child {\n+  border-bottom: none;\n+  padding-bottom: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:first-child {\n+  padding-top: 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb {\n+  width: 80px;\n+  height: 56px;\n+  border-radius: 8px;\n+  overflow: hidden;\n+  flex-shrink: 0;\n+  background: #f9fafb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb img {\n+  width: 100%;\n+  height: 100%;\n+  object-fit: cover;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder {\n+  width: 100%;\n+  height: 100%;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #f9fafb;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder svg {\n+  color: #9ca3af;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__info {\n+  flex: 1;\n+  min-width: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title {\n+  font-size: 15px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  text-decoration: none;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  transition: color 0.15s ease;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .author {\n+  color: #7067ed;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .category {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__price {\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin-top: 2px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge-wrapper {\n+  flex-shrink: 0;\n+  display: flex;\n+  align-items: center;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge {\n+  background: #e0f2fe;\n+  color: #0284c7;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 600;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__stats {\n+  text-align: left;\n+  flex-shrink: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 4px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue .revenue-amount {\n+  color: #ef4444;\n+  font-weight: 700;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__sold {\n+  font-size: 12px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .no-data {\n+  text-align: center;\n+  color: #6b7280;\n+  font-style: italic;\n+  padding: 24px 0;\n+  font-size: 12px;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions {\n+  background: #ffffff;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0 0 16px 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+  display: grid;\n+  grid-template-columns: repeat(4, 1fr);\n+  gap: 12px;\n+}\n+@media (max-width: 768px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+    grid-template-columns: repeat(2, 1fr);\n+  }\n+}\n+@media (max-width: 480px) {\n+  #lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid {\n+    grid-template-columns: 1fr;\n+  }\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn {\n+  display: flex;\n+  align-items: center;\n+  gap: 10px;\n+  padding: 14px 18px;\n+  border-radius: 8px;\n+  background: var(--action-bg, #f9fafb);\n+  text-decoration: none;\n+  transition: all 0.2s ease;\n+  border: 1px solid transparent;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn:hover {\n+  border-color: var(--action-color, #e5e7eb);\n+  transform: translateY(-1px);\n+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon {\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  color: var(--action-color);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon svg {\n+  width: 20px;\n+  height: 20px;\n+  color: var(--action-color, #6b7280);\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__label {\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1e1e1e;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses {\n+  background: #ffffff;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .recent-courses__title {\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  margin: 0 0 16px 0;\n+}\n+#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .cb-list-course {\n+  padding-bottom: 0;\n+}\n+\n+#lp-course-builder .cb-list-quiz {\n+  list-style: none;\n   padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n }\n #lp-course-builder .cb-tab-quiz__action {\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n+  margin-bottom: 24px;\n }\n #lp-course-builder .cb-input-search-quiz {\n   flex: 1;\n@@ -1719,166 +4338,322 @@\n   font-size: 15px;\n   color: #333;\n   font-family: inherit;\n+  margin-left: 10px;\n }\n #lp-course-builder .cb-input-search-quiz::placeholder {\n   color: #999;\n }\n-#lp-course-builder .cb-tab-quiz__action,\n-#lp-course-builder .courses-builder__quiz-tab {\n-  width: calc(100% - 140px);\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n }\n-#lp-course-builder .quiz-action {\n-  position: relative;\n-  display: flex;\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .quiz-item {\n+  display: grid;\n   align-items: center;\n-  gap: 20px;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n }\n-#lp-course-builder .quiz-action-expanded {\n+#lp-course-builder .quiz-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .quiz-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-quiz {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-quiz-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-quiz-title button,\n+#lp-course-builder .wap-quiz-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n   cursor: pointer;\n-  padding: 15px 0 15px 20px;\n }\n-#lp-course-builder .quiz-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder .wap-quiz-title button:hover,\n+#lp-course-builder .wap-quiz-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .quiz__date,\n+#lp-course-builder .quiz__duration,\n+#lp-course-builder .quiz__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-right: 8px;\n+}\n+#lp-course-builder .quiz__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .quiz__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .quiz-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .quiz-action-editor {\n+  display: flex;\n }\n #lp-course-builder .btn-edit-quiz {\n   display: flex;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n   text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  background-color: #fff;\n-  border: 1px solid #1e1e1e;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n }\n #lp-course-builder .btn-edit-quiz svg {\n-  width: 1rem;\n-  height: 1rem;\n+  width: 16px;\n+  height: 16px;\n }\n-#lp-course-builder .quiz-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n+#lp-course-builder .btn-edit-quiz:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-quiz.loading::before {\n+  margin: 0;\n   font-size: 16px;\n }\n-#lp-course-builder .highlight-new-quiz {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+#lp-course-builder .btn-edit-quiz.loading svg {\n+  display: none;\n }\n-#lp-course-builder .quiz-content {\n-  flex: 1;\n+#lp-course-builder .quiz-action-expanded {\n+  cursor: pointer;\n   display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n }\n-#lp-course-builder .quiz-content__left {\n-  display: flex;\n-  gap: 15px;\n+#lp-course-builder .quiz-action-expanded.loading::before {\n+  margin-left: 0;\n+  margin-top: 0;\n }\n-#lp-course-builder .quiz-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n+#lp-course-builder .quiz-action-expanded.loading svg {\n+  display: none;\n }\n-#lp-course-builder .quiz__preview svg {\n-  height: 20px;\n-  width: 20px;\n+#lp-course-builder .quiz-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n }\n-#lp-course-builder .wap-quiz-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n+#lp-course-builder .quiz-action-expanded:hover {\n+  background-color: #EEF1FF;\n }\n-#lp-course-builder .wap-quiz-title button {\n-  background-color: #fff;\n+#lp-course-builder .quiz-action-expanded:hover svg {\n+  color: #7067ED;\n+}\n+#lp-course-builder .quiz-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  left: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .quiz-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__quiz-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__quiz-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__quiz-tab .quiz-item {\n+  grid-template-columns: 2fr 1.5fr 80px 1fr 1fr 100px 80px;\n+}\n+#lp-course-builder .courses-builder__quiz-tab .lesson-assigned-courses .label {\n+  display: none;\n+}\n+#lp-course-builder .cb-list-quiz {\n   border: none;\n-  font-size: 20px;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  border-radius: 0;\n }\n-#lp-course-builder .quiz-status {\n-  padding: 5px 12px;\n+#lp-course-builder .quiz-status,\n+#lp-course-builder .quizzes-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n-#lp-course-builder .quiz-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+#lp-course-builder .quiz-status.publish,\n+#lp-course-builder .quizzes-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .quiz-status.draft,\n+#lp-course-builder .quizzes-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n }\n-#lp-course-builder .quiz-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+#lp-course-builder .quiz-status.pending,\n+#lp-course-builder .quizzes-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .quiz-status.private,\n+#lp-course-builder .quizzes-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n+}\n+#lp-course-builder .quiz-status.trash,\n+#lp-course-builder .quizzes-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n-#lp-course-builder .quiz-assigned-courses {\n-  max-width: 300px;\n-  margin-left: 20px;\n+#lp-course-builder .quiz-assigned-courses,\n+#lp-course-builder .lesson-assigned-courses {\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .quiz-assigned-courses .label,\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #6b7280;\n+  margin-left: 5px;\n }\n-#lp-course-builder .quiz-assigned-courses a {\n+#lp-course-builder .quiz-assigned-courses a,\n+#lp-course-builder .lesson-assigned-courses a {\n   text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .quiz-assigned-courses a:hover,\n+#lp-course-builder .lesson-assigned-courses a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .quiz-assigned-courses .label,\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #1e1e1e;\n }\n #lp-course-builder .quiz-action-expanded__items {\n-  display: flex;\n+  display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n+  top: calc(100% + 4px);\n   left: 0;\n-  transform: translate(-100%, 10px);\n+  transform: none;\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n+  z-index: 100;\n }\n #lp-course-builder .quiz-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .quiz-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete {\n   padding: 10px;\n   cursor: pointer;\n   text-decoration: none;\n   border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n }\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore:hover,\n #lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n }\n-#lp-course-builder .quiz-action-expanded:hover + .quiz-action-expanded__items,\n-#lp-course-builder .quiz-action-expanded__items:hover {\n-  display: flex !important;\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,\n+#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n }\n \n #lp-course-builder .cb-list-question {\n   list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n   padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n }\n #lp-course-builder .cb-tab-question__action {\n   display: flex;\n   justify-content: space-between;\n   align-items: center;\n+  margin-bottom: 24px;\n }\n #lp-course-builder .cb-input-search-question {\n   flex: 1;\n@@ -1888,155 +4663,1303 @@\n   font-size: 15px;\n   color: #333;\n   font-family: inherit;\n+  margin-left: 10px;\n }\n #lp-course-builder .cb-input-search-question::placeholder {\n   color: #999;\n }\n-#lp-course-builder .cb-tab-question__action,\n-#lp-course-builder .courses-builder__question-tab {\n-  width: calc(100% - 140px);\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n }\n-#lp-course-builder .question-action {\n-  position: relative;\n-  display: flex;\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .question-item {\n+  display: grid;\n   align-items: center;\n-  gap: 20px;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n }\n-#lp-course-builder .question-action-expanded {\n+#lp-course-builder .question-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .question-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-question {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-question-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-question-title button,\n+#lp-course-builder .wap-question-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n   cursor: pointer;\n-  padding: 15px 0 15px 20px;\n }\n-#lp-course-builder .question-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder .wap-question-title button:hover,\n+#lp-course-builder .wap-question-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .question__date,\n+#lp-course-builder .question__duration,\n+#lp-course-builder .question__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-right: 8px;\n+}\n+#lp-course-builder .question__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .question__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .question-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .question-action-editor {\n+  display: flex;\n }\n #lp-course-builder .btn-edit-question {\n-  background-color: #fff;\n   display: flex;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n   text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  border: 1px solid #1e1e1e;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n }\n #lp-course-builder .btn-edit-question svg {\n-  width: 1rem;\n-  height: 1rem;\n+  width: 16px;\n+  height: 16px;\n }\n-#lp-course-builder .question-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n+#lp-course-builder .btn-edit-question:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-question.loading::before {\n+  margin: 0;\n   font-size: 16px;\n }\n-#lp-course-builder .highlight-new-question {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+#lp-course-builder .btn-edit-question.loading svg {\n+  display: none;\n }\n-#lp-course-builder .question-content {\n-  flex: 1;\n+#lp-course-builder .question-action-expanded {\n+  cursor: pointer;\n   display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n   align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n }\n-#lp-course-builder .question-content__left {\n-  display: flex;\n-  gap: 15px;\n+#lp-course-builder .question-action-expanded.loading::before {\n+  margin-left: 0;\n+  margin-top: 0;\n }\n-#lp-course-builder .question-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n+#lp-course-builder .question-action-expanded.loading svg {\n+  display: none;\n }\n-#lp-course-builder .question__preview svg {\n-  height: 20px;\n-  width: 20px;\n+#lp-course-builder .question-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n }\n-#lp-course-builder .wap-question-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n+#lp-course-builder .question-action-expanded:hover {\n+  background-color: #EEF1FF;\n }\n-#lp-course-builder .wap-question-title button {\n-  font-size: 20px;\n-  background: #fff;\n+#lp-course-builder .question-action-expanded:hover svg {\n+  color: #7067ED;\n+}\n+#lp-course-builder .question-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  left: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .question-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__question-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__question-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__question-tab .question-item {\n+  grid-template-columns: 2fr 1.5fr 1fr 100px 100px 80px;\n+}\n+#lp-course-builder .courses-builder__question-tab .question-assigned-quizzes .label {\n+  display: none;\n+}\n+#lp-course-builder .cb-list-question {\n   border: none;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n+  border-radius: 0;\n }\n #lp-course-builder .question-status {\n-  padding: 5px 12px;\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n #lp-course-builder .question-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .question-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+#lp-course-builder .question-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .question-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n }\n #lp-course-builder .question-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n #lp-course-builder .question-assigned-quizzes {\n-  max-width: 300px;\n-  margin-left: 30px;\n   white-space: nowrap;\n   overflow: hidden;\n   text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .question-assigned-quizzes .label {\n+  color: #6b7280;\n+  margin-left: 5px;\n }\n #lp-course-builder .question-assigned-quizzes a {\n   text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .question-assigned-quizzes a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .question-assigned-quizzes .label {\n+  color: #1e1e1e;\n }\n #lp-course-builder .question-action-expanded__items {\n-  display: flex;\n+  display: none;\n   position: absolute;\n   min-width: 160px;\n-  top: 0;\n+  top: calc(100% + 4px);\n   left: 0;\n-  transform: translate(-100%, 10px);\n+  transform: none;\n   padding: 10px;\n   flex-direction: column;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n   font-size: 16px;\n   font-weight: 500;\n+  z-index: 100;\n }\n #lp-course-builder .question-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .question-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n #lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__publish,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__trash,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__restore,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__delete {\n   padding: 10px;\n   cursor: pointer;\n   text-decoration: none;\n   border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n }\n #lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__restore:hover,\n #lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n+  background-color: #F7F7F7;\n+}\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,\n+#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n+}\n+\n+#lp-course-builder .cb-list-lesson {\n+  list-style: none;\n+  padding: 0;\n+  margin: 0;\n+  background: #ffffff;\n+}\n+#lp-course-builder .cb-tab-lesson__action {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 24px;\n+}\n+#lp-course-builder .cb-input-search-lesson {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  outline: none;\n+  font-size: 15px;\n+  color: #333;\n+  font-family: inherit;\n+  margin-left: 10px;\n+}\n+#lp-course-builder .cb-input-search-lesson::placeholder {\n+  color: #999;\n+}\n+#lp-course-builder .cb-list-table-header {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  min-height: 48px;\n+  font-size: 12px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+#lp-course-builder .cb-list-table-header span {\n+  white-space: nowrap;\n+}\n+#lp-course-builder .lesson-item {\n+  display: grid;\n+  align-items: center;\n+  gap: 0 16px;\n+  padding: 0 24px;\n+  background: #ffffff;\n+  border-bottom: 1px solid #f5f5f5;\n+  min-height: 64px;\n+  font-size: 14px;\n+  transition: background-color 0.15s ease;\n+}\n+#lp-course-builder .lesson-item:hover {\n+  background-color: #f9fafb;\n+}\n+#lp-course-builder li:last-child .lesson-item {\n+  border-bottom: none;\n+}\n+#lp-course-builder .highlight-new-lesson {\n+  box-shadow: #c8b4fb 0px 0px 20px 1px;\n+}\n+#lp-course-builder .wap-lesson-title {\n+  margin: 0;\n+  min-width: 0;\n+  overflow: hidden;\n+}\n+#lp-course-builder .wap-lesson-title button,\n+#lp-course-builder .wap-lesson-title a {\n+  font-size: 14px;\n+  font-weight: 500;\n+  background: transparent;\n+  border: none;\n+  text-decoration: none;\n+  color: #1e1e1e;\n+  max-width: 100%;\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  display: block;\n+  padding: 0;\n+  cursor: pointer;\n+}\n+#lp-course-builder .wap-lesson-title button:hover,\n+#lp-course-builder .wap-lesson-title a:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder .lesson__date,\n+#lp-course-builder .lesson__duration,\n+#lp-course-builder .lesson__total-questions {\n+  font-size: 12px;\n+  color: #6b7280;\n+  white-space: nowrap;\n+  margin-right: 8px;\n+}\n+#lp-course-builder .lesson__preview {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+}\n+#lp-course-builder .lesson__preview svg {\n+  height: 20px;\n+  width: 20px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lesson-action {\n+  display: flex;\n+  align-items: center;\n+  justify-content: flex-end;\n+  gap: 8px;\n+  position: relative;\n+}\n+#lp-course-builder .lesson-action-editor {\n+  display: flex;\n+}\n+#lp-course-builder .btn-edit-lesson {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  text-decoration: none;\n+  font-size: 0;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  padding: 0;\n+}\n+#lp-course-builder .btn-edit-lesson svg {\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder .btn-edit-lesson:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .btn-edit-lesson.loading::before {\n+  margin: 0;\n+  font-size: 16px;\n+}\n+#lp-course-builder .btn-edit-lesson.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .lesson-action-expanded {\n+  cursor: pointer;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  border-radius: 6px;\n+  transition: all 0.2s;\n+  padding: 0;\n+  background: none;\n+  border: none;\n+}\n+#lp-course-builder .lesson-action-expanded.loading::before {\n+  margin-left: 0;\n+  margin-top: 0;\n+}\n+#lp-course-builder .lesson-action-expanded.loading svg {\n+  display: none;\n+}\n+#lp-course-builder .lesson-action-expanded svg {\n+  width: 18px;\n+  height: 18px;\n+  color: #6b7280;\n+}\n+#lp-course-builder .lesson-action-expanded:hover {\n+  background-color: #EEF1FF;\n+}\n+#lp-course-builder .lesson-action-expanded:hover svg {\n+  color: #7067ED;\n }\n-#lp-course-builder .question-action-expanded:hover + .question-action-expanded__items,\n-#lp-course-builder .question-action-expanded__items:hover {\n+#lp-course-builder .lesson-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: 100%;\n+  left: 0;\n+  margin-top: 4px;\n+  padding: 8px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 8px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 14px;\n+  font-weight: 500;\n+  z-index: 10;\n+}\n+#lp-course-builder .lesson-action-expanded__items.active {\n+  display: flex !important;\n+}\n+\n+#lp-course-builder .courses-builder__lesson-tab {\n+  background: #ffffff;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n+  overflow: visible;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .cb-list-table-header,\n+#lp-course-builder .courses-builder__lesson-tab .lesson-item {\n+  grid-template-columns: 2fr 1.5fr 1fr 100px 80px 80px;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson-assigned-courses .label {\n+  display: none;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item {\n+  cursor: pointer;\n+  display: flex;\n+  margin-right: 12px;\n+  justify-content: flex-start;\n+  border: none;\n+  padding: 0;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading, #lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+  margin-right: 19px;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading a, #lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading a {\n+  display: none;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 32px;\n+  height: 32px;\n+  text-decoration: none;\n+  font-size: 16px;\n+  border-radius: 6px;\n+  background-color: transparent;\n+  border: none;\n+  color: #6b7280;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-list-lesson {\n+  border: none;\n+  border-radius: 0;\n+}\n+#lp-course-builder .lesson-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  border-radius: 20px;\n+  text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n+}\n+#lp-course-builder .lesson-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n+}\n+#lp-course-builder .lesson-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+#lp-course-builder .lesson-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+#lp-course-builder .lesson-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n+}\n+#lp-course-builder .lesson-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n+}\n+#lp-course-builder .lesson-assigned-courses {\n+  white-space: nowrap;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  min-width: 0;\n+}\n+#lp-course-builder .lesson-assigned-courses .label {\n+  color: #6b7280;\n+  margin-left: 5px;\n+}\n+#lp-course-builder .lesson-assigned-courses a {\n+  text-decoration: none;\n+  color: #2E91FA;\n+}\n+#lp-course-builder .lesson-assigned-courses a:hover {\n+  text-decoration: underline;\n+}\n+#lp-course-builder .lesson-action-expanded__items {\n+  display: none;\n+  position: absolute;\n+  min-width: 160px;\n+  top: calc(100% + 4px);\n+  left: 0;\n+  transform: none;\n+  padding: 10px;\n+  flex-direction: column;\n+  background-color: #ffffff;\n+  border-radius: 12px;\n+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n+  font-size: 16px;\n+  font-weight: 500;\n+  z-index: 100;\n+}\n+#lp-course-builder .lesson-action-expanded__items.active {\n   display: flex !important;\n }\n+#lp-course-builder .lesson-action-expanded__items.is-dropup {\n+  top: auto;\n+  bottom: calc(100% + 4px);\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n+  padding: 10px;\n+  cursor: pointer;\n+  text-decoration: none;\n+  border-radius: 6px;\n+  color: #1e1e1e;\n+  border: none;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n+  background-color: #F7F7F7;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n+  color: #ef4444;\n+}\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n+#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n+  background-color: #fef2f2;\n+}\n+\n+#lp-course-builder .lp-cb-settings .lp-meta-box,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+#lp-course-builder .lp-cb-settings .lp-meta-box .lp-meta-box__inner,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+#lp-course-builder .lp-cb-settings .form-field,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+#lp-course-builder .lp-cb-settings .form-field > label,\n+#lp-course-builder .lp-cb-settings .form-field label span,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration > label,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration label span,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field > label,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number],\n+#lp-course-builder .lp-cb-settings .form-field input[type=text],\n+#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+#lp-course-builder .lp-cb-settings .form-field select,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration select,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+#lp-course-builder .lp-cb-settings .form-field select:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration select:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio],\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio],\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio],\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked:before,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+#lp-course-builder .lp-cb-settings .form-field input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:focus,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-course-builder .lp-cb-settings .form-field .description,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+#lp-course-builder .lp-cb-settings .form-field .description:has(+ .learn-press-tip),\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+#lp-course-builder .lp-cb-settings .form-field > .learn-press-tip,\n+#lp-course-builder .lp-cb-settings .lp-meta-box__duration > .learn-press-tip,\n+#lp-course-builder .lp-cb-settings .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 10px;\n+  width: 100%;\n+  max-width: 620px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-settings__section {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__actions {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  padding-top: 10px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn {\n+  min-height: 34px;\n+  border-radius: 6px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger) {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background: #7067ED;\n+  color: #fff;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  border: none;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):hover, #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):focus {\n+  background: #5b52d1;\n+  border-color: #5b52d1;\n+  color: #fff;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn.is-hidden {\n+  display: none;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 8px;\n+  background-color: #ffffff;\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+  padding: 12px 20px;\n+  border-radius: 12px;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:hover, #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:focus {\n+  color: #dc2626;\n+  border-color: #fee2e2;\n+  background: #fee2e2;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-wrap {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  width: 100%;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  gap: 12px;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #1e1e1e;\n+  white-space: nowrap;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: flex-start;\n+  width: 100%;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default.is-hidden {\n+  display: none;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-svg {\n+  display: block;\n+  width: 181px;\n+  max-width: 100%;\n+  height: auto;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-image {\n+  display: block;\n+  width: auto;\n+  max-width: 100%;\n+  height: auto;\n+  max-height: 40px;\n+  object-fit: contain;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img {\n+  display: block;\n+  width: auto;\n+  height: auto;\n+  max-width: 260px;\n+  max-height: 40px;\n+  object-fit: contain;\n+}\n+#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img.is-hidden {\n+  display: none;\n+}\n+@media (max-width: 767px) {\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting {\n+    max-width: 100%;\n+  }\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row {\n+    flex-direction: column;\n+    align-items: flex-start;\n+  }\n+  #lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview {\n+    width: 100%;\n+    max-width: 100%;\n+  }\n+}\n+\n+.lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+\n+.lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-left: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-right: 3px solid transparent;\n+  margin-right: -3px;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-right-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+\n+.lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #fff;\n+}\n+\n+.lp-option-disabled {\n+  pointer-events: none;\n+  opacity: 0.5;\n+}\n+\n+#lp-course-builder .cb-terms-header__label-wrap {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+}\n+#lp-course-builder .cb-terms-header__btn-search {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 22px;\n+  height: 22px;\n+  padding: 0;\n+  border: none;\n+  border-radius: 999px;\n+  background: transparent;\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder .cb-terms-header__btn-search .lp-icon-search {\n+  width: 14px;\n+  height: 14px;\n+  font-size: 14px;\n+  color: #9ca3af;\n+}\n+#lp-course-builder .cb-terms-header__btn-search:hover {\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .cb-terms-header__btn-search:hover .lp-icon-search {\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] {\n+  background: #EEF1FF;\n+}\n+#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] .lp-icon-search {\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-terms-search-toolbar {\n+  max-height: 0;\n+  opacity: 0;\n+  overflow: hidden;\n+  pointer-events: none;\n+  margin-bottom: 0 !important;\n+  transition: max-height 0.25s ease, opacity 0.2s ease, margin-bottom 0.25s ease;\n+}\n+#lp-course-builder .cb-terms-search-toolbar.is-open {\n+  max-height: 80px;\n+  opacity: 1;\n+  pointer-events: auto;\n+  margin-bottom: 16px !important;\n+}\n \n+.lp-course-builder-content__section .lp-meta-box,\n+.lp-course-builder-content__section .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-course-builder-content__section .lp-meta-box .lp-meta-box__inner,\n+.lp-course-builder-content__section .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-course-builder-content__section .form-field,\n+.lp-course-builder-content__section .lp-meta-box__duration,\n+.lp-course-builder-content__section .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-course-builder-content__section .form-field > label,\n+.lp-course-builder-content__section .form-field label span,\n+.lp-course-builder-content__section .lp-meta-box__duration > label,\n+.lp-course-builder-content__section .lp-meta-box__duration label span,\n+.lp-course-builder-content__section .lp-meta-box-field > label,\n+.lp-course-builder-content__section .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-course-builder-content__section .form-field input[type=number],\n+.lp-course-builder-content__section .form-field input[type=text],\n+.lp-course-builder-content__section .form-field input[type=datetime-local],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=text],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=text],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-course-builder-content__section .form-field input[type=number]:focus,\n+.lp-course-builder-content__section .form-field input[type=text]:focus,\n+.lp-course-builder-content__section .form-field input[type=datetime-local]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=text]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=text]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=number],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=number],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-course-builder-content__section .form-field select,\n+.lp-course-builder-content__section .lp-meta-box__duration select,\n+.lp-course-builder-content__section .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-course-builder-content__section .form-field select:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration select:focus,\n+.lp-course-builder-content__section .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=radio],\n+.lp-course-builder-content__section .form-field input[type=checkbox],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio],\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio],\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:before,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:checked,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:checked,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:checked:before,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+.lp-course-builder-content__section .form-field input[type=radio]:focus,\n+.lp-course-builder-content__section .form-field input[type=checkbox]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:focus,\n+.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:focus,\n+.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-content__section .form-field .description,\n+.lp-course-builder-content__section .lp-meta-box__duration .description,\n+.lp-course-builder-content__section .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-course-builder-content__section .form-field .description:has(+ .learn-press-tip),\n+.lp-course-builder-content__section .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-course-builder-content__section .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-course-builder-content__section .form-field > .learn-press-tip,\n+.lp-course-builder-content__section .lp-meta-box__duration > .learn-press-tip,\n+.lp-course-builder-content__section .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-course-builder-content__section ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n .lp-course-builder-content__section .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n@@ -2058,8 +5981,8 @@\n   gap: 40px;\n }\n .lp-course-builder-content__section .cb-course-edit-column--left {\n-  flex: 0 0 320px;\n-  max-width: 320px;\n+  flex: 0 0 400px;\n+  max-width: 400px;\n }\n .lp-course-builder-content__section .cb-course-edit-column--right {\n   flex: 1;\n@@ -2091,6 +6014,31 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n+.lp-course-builder-content__section .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  margin-right: auto;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-course-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n@@ -2110,28 +6058,139 @@\n .lp-course-builder-content__section .cb-course-edit-permalink {\n   margin-bottom: 20px;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__label {\n+.lp-course-builder-content__section .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-content__section .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-permalink-label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input {\n-  width: 100%;\n-  padding: 10px 12px;\n+.lp-course-builder-content__section .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-content__section .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn .dashicons {\n   font-size: 14px;\n-  border: 1px solid #ddd;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-content__section .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-content__section .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-content__section .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.lp-course-builder-content__section .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n   border-radius: 6px;\n   outline: none;\n-  transition: border-color 0.2s;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n+.lp-course-builder-content__section .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n }\n-.lp-course-builder-content__section .cb-course-edit-permalink__input::placeholder {\n-  color: #9ca3af;\n+.lp-course-builder-content__section .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.lp-course-builder-content__section .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-content__section .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-content__section .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n }\n .lp-course-builder-content__section .cb-course-edit-desc {\n   margin-bottom: 24px;\n@@ -2160,13 +6219,32 @@\n .lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-course-edit-categories__label,\n-.lp-course-builder-content__section .cb-course-edit-tags__label {\n-  display: block;\n+.lp-course-builder-content__section .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-terms-header__label {\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 12px;\n+  margin: 0;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n }\n .lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper {\n   display: flex;\n@@ -2176,10 +6254,68 @@\n .lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   flex: 1;\n   border-radius: 8px;\n-  border: 1px solid #ddd;\n+  border: 1px solid #e5e7eb;\n   padding: 16px;\n }\n-.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper,\n+.lp-course-builder-content__section .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper {\n   display: flex;\n   gap: 10px 40px;\n@@ -2188,18 +6324,65 @@\n .lp-course-builder-content__section .cb-course-edit-tags__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox,\n+.lp-course-builder-content__section .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox {\n   display: flex;\n   align-items: center;\n   margin-bottom: 0;\n   padding: 4px 0;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox:hover label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label {\n   color: #1d2939;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox],\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n@@ -2215,45 +6398,38 @@\n   transition: all 0.2s ease;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:hover,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n   border-color: #98a2b3;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+  background: #28A746;\n+  border-color: #28A746;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n   content: \"\";\n   position: absolute;\n-  right: 5px;\n-  top: 2px;\n-  width: 6px;\n-  height: 10px;\n-  border: solid #1e1e1e;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n   border-width: 0 0 2px 2px;\n-  transform: rotate(-45deg);\n+  transform: translate(50%, -60%) rotate(-45deg);\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:focus,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n   opacity: 0.5;\n   cursor: not-allowed;\n   border-color: #e4e7ec;\n   background: #f9fafb;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled + label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n   opacity: 0.5;\n   cursor: not-allowed;\n }\n-.lp-course-builder-content__section .cb-course-edit-terms__checkbox label,\n .lp-course-builder-content__section .cb-course-edit-categories__checkbox label {\n   font-size: 14px;\n   color: #344054;\n@@ -2265,12 +6441,18 @@\n .lp-course-builder-content__section .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n+.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n .lp-course-builder-content__section .cb-course-edit-featured-image__title {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 8px;\n+  margin-bottom: 0;\n }\n .lp-course-builder-content__section .cb-featured-image-container {\n   display: flex;\n@@ -2280,7 +6462,7 @@\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone {\n   width: 100%;\n-  min-height: 180px;\n+  min-height: 200px;\n   background: #fff;\n   border: 2px dashed #d1d5db;\n   border-radius: 8px;\n@@ -2292,38 +6474,46 @@\n   overflow: hidden;\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone:hover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.03);\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.lp-course-builder-content__section .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n }\n .lp-course-builder-content__section .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n   border-style: solid;\n   border-color: #e5e7eb;\n   padding: 0;\n }\n-.lp-course-builder-content__section .cb-featured-image-dropzone.has-image:hover {\n-  border-color: #1f74ff;\n-}\n .lp-course-builder-content__section .cb-featured-image-dropzone.dragover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n }\n .lp-course-builder-content__section .cb-featured-image-upload-content {\n   text-align: center;\n   padding: 30px 20px;\n }\n .lp-course-builder-content__section .cb-featured-image-icon {\n-  display: block;\n-  font-size: 36px;\n+  display: flex;\n+  justify-content: center;\n   margin-bottom: 12px;\n   opacity: 0.6;\n }\n+.lp-course-builder-content__section .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n .lp-course-builder-content__section .cb-featured-image-text {\n   font-size: 14px;\n   color: #6b7280;\n   margin: 0 0 6px 0;\n }\n .lp-course-builder-content__section .cb-featured-image-link {\n-  color: #1f74ff;\n+  color: #1a1a1a;\n   text-decoration: none;\n   font-weight: 500;\n }\n@@ -2349,24 +6539,27 @@\n }\n .lp-course-builder-content__section .cb-change-featured-image {\n   padding: 6px 14px;\n-  border: 1px solid #1f74ff;\n-  background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n   font-size: 12px;\n   font-weight: 500;\n   cursor: pointer;\n   transition: all 0.2s;\n }\n .lp-course-builder-content__section .cb-change-featured-image:hover {\n-  background: #1f74ff;\n+  background: #7067ED;\n   color: #fff;\n }\n .lp-course-builder-content__section .cb-remove-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #ef4444;\n-  background: #fff;\n-  color: #ef4444;\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n   border-radius: 4px;\n   font-size: 12px;\n   font-weight: 500;\n@@ -2377,6 +6570,72 @@\n   background: #ef4444;\n   color: #fff;\n }\n+.lp-course-builder-content__section .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row select {\n+  padding: 6px 14px 6px 32px !important;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n .lp-course-builder-content__section .cb-featured-image-preview {\n   background: #f5f5f5;\n   border: 2px dashed #ddd;\n@@ -2412,9 +6671,9 @@\n }\n .lp-course-builder-content__section .cb-set-featured-image {\n   padding: 8px 16px;\n-  border: 1px solid #1f74ff;\n+  border: 1px solid #7067ED;\n   background: #fff;\n-  color: #1f74ff;\n+  color: #7067ED;\n   border-radius: 4px;\n   font-size: 13px;\n   font-weight: 500;\n@@ -2422,44 +6681,66 @@\n   transition: background-color 0.2s;\n }\n .lp-course-builder-content__section .cb-set-featured-image:hover {\n-  background: #1f74ff;\n+  background: #7067ED;\n   color: #fff;\n }\n .lp-course-builder-content__section div.mce-statusbar {\n   border-top: none;\n }\n-.lp-course-builder-content__section .cb-course-edit-category__btn-add-new,\n-.lp-course-builder-content__section .cb-course-edit-tag__btn-add-new,\n-.lp-course-builder-content__section .cb-course-edit-category__btn-cancel,\n-.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel {\n-  font-size: 16px;\n-  margin-top: 15px;\n-  padding: 5px 0;\n-  cursor: pointer;\n-  border: none;\n-  background: none;\n-}\n .lp-course-builder-content__section .cb-course-edit-terms__form-add-category,\n .lp-course-builder-content__section .cb-course-edit-terms__form-add-tag {\n   display: flex;\n-  gap: 10px;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n }\n .lp-course-builder-content__section .cb-course-edit-category__input,\n .lp-course-builder-content__section .cb-course-edit-tags__input {\n   width: 100%;\n-  padding: 10px 12px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__input:focus,\n+.lp-course-builder-content__section .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n   font-size: 14px;\n   border: 1px solid #ddd;\n   border-radius: 6px;\n   outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n }\n .lp-course-builder-content__section .cb-course-edit-category__btn-save,\n .lp-course-builder-content__section .cb-course-edit-tags__btn-save {\n+  flex: 1;\n   background: #1e1e1e;\n   color: white;\n-  border-radius: 5px;\n-  padding: 5px 20px;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n   border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n }\n .lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,\n .lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading {\n@@ -2481,6 +6762,26 @@\n   vertical-align: middle;\n   margin-top: -2px;\n }\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n .lp-course-builder-content__section .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n@@ -2542,54 +6843,38 @@\n     max-width: 300px;\n   }\n }\n-\n-.lp-cb-tab-content .cb-section__course-edit .course-status {\n+.lp-course-builder-content__section .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n   background: #ccc;\n-  border-radius: 5px;\n+  border-radius: 12px;\n   text-transform: capitalize;\n }\n-.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+.lp-course-builder-content__section .course-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+.lp-course-builder-content__section .course-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n-  display: flex;\n-  gap: 40px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n-  flex: 0 0 320px;\n-  max-width: 320px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n-  flex: 1;\n-  min-width: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n-  margin-bottom: 20px;\n+.lp-course-builder-content__section .cb-course-edit-title {\n+  margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+.lp-course-builder-content__section .cb-course-edit-title__label-wrap {\n   display: flex;\n   align-items: center;\n   gap: 8px;\n   margin-bottom: 8px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+.lp-course-builder-content__section .cb-course-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required {\n-  color: #ef4444;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+.lp-course-builder-content__section .cb-course-edit-title__char-count {\n   font-size: 12px;\n   font-weight: 500;\n   color: #6b7280;\n@@ -2597,33 +6882,7 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n-  width: 100%;\n-  padding: 10px 12px;\n-  font-size: 14px;\n-  border: 1px solid #ddd;\n-  border-radius: 6px;\n-  outline: none;\n-  transition: border-color 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder {\n-  color: #9ca3af;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink {\n-  margin-bottom: 20px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__label {\n-  display: block;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input {\n+.lp-course-builder-content__section .cb-course-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -2632,29 +6891,26 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input::placeholder {\n-  color: #9ca3af;\n+.lp-course-builder-content__section .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+.lp-course-builder-content__section .cb-course-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+.lp-course-builder-content__section .cb-course-edit-desc__label-wrap {\n   display: flex;\n   align-items: center;\n   gap: 8px;\n   margin-bottom: 8px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+.lp-course-builder-content__section .cb-course-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+.lp-course-builder-content__section .cb-course-edit-desc__word-count {\n   display: none;\n   font-size: 12px;\n   font-weight: 500;\n@@ -2663,50 +6919,194 @@\n   padding: 2px 8px;\n   border-radius: 4px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__label {\n-  display: block;\n+.lp-course-builder-content__section .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-terms-header__label {\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n-  margin-bottom: 12px;\n+  margin: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper {\n   display: flex;\n-  gap: 30px;\n+  gap: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__wrapper,\n+.lp-course-builder-content__section .cb-course-edit-categories__wrapper {\n   flex: 1;\n-  border-radius: 8px;\n-  border: 1px solid #ddd;\n-  padding: 16px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper {\n   display: flex;\n   gap: 10px 40px;\n   flex-wrap: wrap;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+.lp-course-builder-content__section .cb-course-edit-tags__wrapper {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+.lp-course-builder-content__section .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-content__section .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.lp-course-builder-content__section .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox {\n   display: flex;\n   align-items: center;\n   margin-bottom: 0;\n   padding: 4px 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox:hover label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label {\n   color: #1d2939;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox],\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n   -moz-appearance: none;\n@@ -2721,46 +7121,39 @@\n   transition: all 0.2s ease;\n   flex-shrink: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:hover,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n   border-color: #98a2b3;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n   content: \"\";\n   position: absolute;\n-  right: 5px;\n-  top: 2px;\n-  width: 6px;\n-  height: 10px;\n-  border: solid #1e1e1e;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n   border-width: 0 0 2px 2px;\n-  transform: rotate(-45deg);\n+  transform: translate(50%, -60%) rotate(-45deg);\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:focus,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n   outline: none;\n-  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+  box-shadow: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n   opacity: 0.5;\n   cursor: not-allowed;\n   border-color: #e4e7ec;\n   background: #f9fafb;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled + label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n   opacity: 0.5;\n   cursor: not-allowed;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox label,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+.lp-course-builder-content__section .cb-course-edit-categories__checkbox label {\n   font-size: 14px;\n   color: #344054;\n   font-weight: 400;\n@@ -2768,122 +7161,28 @@\n   user-select: none;\n   line-height: 20px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+.lp-course-builder-content__section .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n-  display: block;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n-  display: flex;\n-  flex-direction: column;\n-  gap: 12px;\n-  align-items: flex-start;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone {\n-  width: 100%;\n-  min-height: 180px;\n-  background: #fff;\n-  border: 2px dashed #d1d5db;\n-  border-radius: 8px;\n+.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap {\n   display: flex;\n   align-items: center;\n-  justify-content: center;\n-  cursor: pointer;\n-  transition: all 0.2s ease;\n-  overflow: hidden;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.03);\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image {\n-  border-style: solid;\n-  border-color: #e5e7eb;\n-  padding: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image:hover {\n-  border-color: #1f74ff;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover {\n-  border-color: #1f74ff;\n-  background: rgba(31, 116, 255, 0.05);\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content {\n-  text-align: center;\n-  padding: 30px 20px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon {\n-  display: block;\n-  font-size: 36px;\n+  gap: 8px;\n   margin-bottom: 12px;\n-  opacity: 0.6;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text {\n+.lp-course-builder-content__section .cb-course-edit-featured-image__title {\n   font-size: 14px;\n-  color: #6b7280;\n-  margin: 0 0 6px 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link {\n-  color: #1f74ff;\n-  text-decoration: none;\n-  font-weight: 500;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover {\n-  text-decoration: underline;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint {\n-  font-size: 12px;\n-  color: #9ca3af;\n-  margin: 0;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img {\n-  width: 100%;\n-  height: auto;\n-  max-height: 200px;\n-  object-fit: cover;\n-  display: block;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+.lp-course-builder-content__section .cb-featured-image-container {\n   display: flex;\n-  flex-direction: row;\n-  gap: 12px;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #1f74ff;\n-  background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover {\n-  background: #1f74ff;\n-  color: #fff;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image {\n-  padding: 6px 14px;\n-  border: 1px solid #ef4444;\n-  background: #fff;\n-  color: #ef4444;\n-  border-radius: 4px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover {\n-  background: #ef4444;\n-  color: #fff;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+.lp-course-builder-content__section .cb-featured-image-preview {\n   background: #f5f5f5;\n   border: 2px dashed #ddd;\n   border-radius: 6px;\n@@ -2892,10 +7191,10 @@\n   justify-content: center;\n   flex-shrink: 0;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+.lp-course-builder-content__section .cb-featured-image-preview:has(img) {\n   border: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+.lp-course-builder-content__section .cb-featured-image-placeholder {\n   width: 300px;\n   height: 200px;\n   display: flex;\n@@ -2905,75 +7204,141 @@\n   color: #999;\n   font-size: 14px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+.lp-course-builder-content__section .cb-featured-image-placeholder::before {\n   content: \"📷\";\n   font-size: 48px;\n   margin-bottom: 8px;\n   opacity: 0.5;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+.lp-course-builder-content__section .cb-featured-image-actions {\n   display: flex;\n   flex-direction: row;\n   gap: 12px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n-  padding: 8px 16px;\n-  border: 1px solid #1f74ff;\n+.lp-course-builder-content__section .cb-remove-featured-image,\n+.lp-course-builder-content__section .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-remove-featured-image:hover,\n+.lp-course-builder-content__section .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n   background: #fff;\n-  color: #1f74ff;\n-  border-radius: 4px;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n   font-size: 13px;\n   font-weight: 500;\n-  cursor: pointer;\n-  transition: background-color 0.2s;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n-  background: #1f74ff;\n-  color: #fff;\n+.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n }\n-.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+.lp-course-builder-content__section div.mce-statusbar {\n   border-top: none;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-add-new,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-add-new,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel {\n-  font-size: 16px;\n-  margin-top: 15px;\n-  padding: 5px 0;\n-  cursor: pointer;\n-  border: none;\n-  background: none;\n-}\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,\n+.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag {\n   display: flex;\n-  gap: 10px;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+.lp-course-builder-content__section .cb-course-edit-category__input,\n+.lp-course-builder-content__section .cb-course-edit-tags__input {\n   width: 100%;\n-  padding: 10px 12px;\n+  padding: 8px 12px;\n   font-size: 14px;\n   border: 1px solid #ddd;\n   border-radius: 6px;\n   outline: none;\n+  transition: border-color 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n-  background: #1e1e1e;\n-  color: white;\n-  border-radius: 5px;\n-  padding: 5px 20px;\n-  border: 0;\n+.lp-course-builder-content__section .cb-course-edit-category__input:focus,\n+.lp-course-builder-content__section .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading {\n   pointer-events: none;\n   opacity: 0.8;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n-.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,\n+.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before {\n   display: inline-block;\n   font-family: \"lp-icon\";\n   content: \"\\f110\";\n@@ -2987,7 +7352,27 @@\n   vertical-align: middle;\n   margin-top: -2px;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,\n+.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-course-builder-content__section .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -2995,530 +7380,2795 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+.lp-course-builder-content__section .cb-button.cb-btn-update {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+.lp-course-builder-content__section .cb-button.cb-btn-trash {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings {\n   background: #1e1e1e;\n   color: #fff;\n   border: none;\n   transition: background 0.2s;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover {\n   background: #333;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading {\n   pointer-events: none;\n   opacity: 0.7;\n }\n-.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+.lp-course-builder-content__section .cb-settings-footer {\n   margin-top: 30px;\n   padding-top: 20px;\n   border-top: 1px solid #e5e7eb;\n   display: flex;\n   justify-content: flex-end;\n }\n-@media (max-width: 900px) {\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n-    flex-direction: column;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n-    flex: 1;\n-    max-width: 100%;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n-    flex: 1;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n-    flex-direction: column;\n-    gap: 24px;\n-  }\n+.lp-course-builder-content__section #general_course_data .form-field,\n+.lp-course-builder-content__section #offline_course_data .form-field,\n+.lp-course-builder-content__section #price_course_data .form-field,\n+.lp-course-builder-content__section #extra_course_data .form-field {\n+  margin-bottom: 24px;\n }\n-@media (max-width: 768px) {\n-  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n-    flex-direction: column;\n-  }\n-  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n-    width: 100%;\n-    max-width: 300px;\n-  }\n+.lp-course-builder-content__section #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n }\n-.lp-cb-tab-content .cb-section__header {\n-  display: none !important;\n+.lp-course-builder-content__section #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n }\n-\n-.lp-meta-box-course-panels::before {\n-  content: attr(data-tab-title);\n-  display: block;\n-  font-size: 24px;\n-  font-weight: 700;\n-  color: #1e1e1e;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #e5e7eb;\n-  line-height: 1.2;\n+.lp-course-builder-content__section #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n }\n-\n-.lp-meta-box__course-tab {\n-  display: flex;\n-  min-height: 600px;\n-  background: #fff;\n+.lp-course-builder-content__section #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n }\n-\n-ul.lp-meta-box__course-tab__tabs {\n-  width: 220px;\n-  background: #ffffff;\n-  border-left: 1px solid #e5e7eb;\n-  margin: 0;\n-  padding: 20px 0;\n-  list-style: none;\n-  flex-shrink: 0;\n+.lp-course-builder-content__section #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n }\n-ul.lp-meta-box__course-tab__tabs li {\n-  margin-bottom: 2px;\n-  padding: 0 12px;\n+.lp-course-builder-content__section #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n }\n-ul.lp-meta-box__course-tab__tabs li a {\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-right: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label {\n   display: flex;\n+  flex-wrap: wrap;\n   align-items: center;\n-  padding: 12px 16px;\n-  text-decoration: none;\n-  color: #6b7280;\n-  font-weight: 500;\n-  font-size: 14px;\n-  transition: all 0.2s ease;\n-  border-right: 3px solid transparent;\n-  margin-right: -3px;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n }\n-ul.lp-meta-box__course-tab__tabs li a i {\n-  display: none;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n }\n-ul.lp-meta-box__course-tab__tabs li a:hover {\n-  background-color: #fff;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-right: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n+  font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n }\n-ul.lp-meta-box__course-tab__tabs li.active a,\n-ul.lp-meta-box__course-tab__tabs li a:focus {\n-  background-color: #fff;\n-  color: #3b82f6;\n-  font-weight: 600;\n-  border-right-color: #3b82f6;\n-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n }\n-\n-.lp-meta-box__course-tab__content {\n-  flex-grow: 1;\n-  padding: 30px 40px;\n-  background: #fff;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n }\n-\n-@media (max-width: 768px) {\n-  .lp-meta-box__course-tab {\n-    flex-direction: column;\n-  }\n-  ul.lp-meta-box__course-tab__tabs {\n-    width: 100%;\n-    border-left: none;\n-    border-bottom: 1px solid #e5e7eb;\n-    display: flex;\n-    overflow-x: auto;\n-    padding: 12px;\n-    background: #f9fafb;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li {\n-    flex-shrink: 0;\n-    padding: 0 4px;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li a {\n-    border-right: none;\n-    border-bottom: 3px solid transparent;\n-    margin-right: 0;\n-    white-space: nowrap;\n-  }\n-  ul.lp-meta-box__course-tab__tabs li.active a {\n-    border-right: none;\n-    border-bottom-color: #3b82f6;\n-  }\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum {\n-  background-color: #fff;\n-  border-radius: 12px;\n-  padding: 28px 0 0;\n-  color: #1f2937;\n-  max-width: 100%;\n-  box-sizing: border-box;\n+.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .heading {\n+.lp-course-builder-content__section .lp_course_extra_meta_box,\n+.lp-course-builder-content__section .lp_course_faq_meta_box {\n   display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f5f5f5;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,\n-#lp-course-builder-content #lp-course-edit-curriculum .count-sections,\n-#lp-course-builder-content #lp-course-edit-curriculum .total-items {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n-  font-size: 12px;\n+.lp-course-builder-content__section .lp_course_extra_meta_box > label,\n+.lp-course-builder-content__section .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n   font-weight: 600;\n-  padding: 6px 18px;\n-  border-radius: 12px;\n-  margin-right: 10px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  margin-right: auto;\n-  padding: 5px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections {\n-  border: none;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section {\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  margin-bottom: 16px;\n-  transition: all 0.2s ease;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__content,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n-  border-color: #d1d5db;\n-  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n+.lp-course-builder-content__section .lp_course_extra_meta_box__fields,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head {\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field {\n   display: flex;\n   align-items: center;\n-  padding: 10px 20px;\n-  background-color: #fff;\n-  border-bottom: 1px solid transparent;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n   border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag {\n-  cursor: grab;\n-  color: #9ca3af;\n-  margin-left: 12px;\n-  font-size: 16px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section-head .button {\n-  font-size: 12px;\n-  padding: 6px 12px;\n-  border-radius: 6px;\n-  margin-right: 8px;\n-  cursor: pointer;\n-  font-weight: 500;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n-  border-bottom-color: #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input {\n-  flex-grow: 1;\n-  border: 1px solid transparent;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n   background: transparent;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1e1e1e;\n-  padding: 6px 10px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-  width: auto;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover, #lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section {\n-  color: #ef4444;\n-  background: rgba(254, 226, 226, 0.5);\n-  border: none;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n   transition: background 0.2s;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n-  background: #fee2e2;\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up {\n-  margin-right: 15px;\n-  color: #777777;\n-  cursor: pointer;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n-  color: #1e1e1e !important;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-collapse {\n-  padding: 20px;\n-  background-color: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n-  border-top: unset;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea {\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label input[type=text],\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea {\n   width: 100%;\n-  border: 1px dashed #d1d5db;\n-  background: #fff;\n-  padding: 10px;\n+  border: 1px solid #eaeaec;\n   border-radius: 6px;\n-  font-size: 13px;\n-  color: #6b7280;\n-  resize: vertical;\n-  min-height: 60px;\n-  margin-bottom: 15px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus {\n-  border-style: solid;\n-  border-color: #9ca3af;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n   outline: none;\n-  color: #374151;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items {\n-  list-style: none;\n-  padding: 0;\n-  margin: 0;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item {\n-  display: flex;\n-  align-items: center;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  margin-bottom: 8px;\n-  padding: 10px 15px;\n-  border-radius: 6px;\n-  position: relative;\n-  transition: transform 0.1s;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover {\n-  border-color: #9ca3af;\n+.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover,\n+.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type {\n-  width: 24px;\n-  height: 24px;\n-  background-size: contain;\n-  background-repeat: no-repeat;\n-  background-position: center;\n-  margin-left: 12px;\n-  opacity: 0.8;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section ._lp_block_finished_field {\n+  margin-top: -8px !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n-  content: \"\\f119\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+.lp-course-builder-content__section #extra_course_data .form-field {\n+  align-items: start;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n-  content: \"\\f469\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input {\n-  border: none;\n-  background: transparent;\n-  font-size: 14px;\n-  color: #374151;\n-  flex-grow: 1;\n-  padding: 5px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n-  outline: none;\n-  text-decoration: underline;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions {\n-  display: flex;\n-  gap: 8px;\n-  opacity: 0.3;\n-  transition: opacity 0.2s;\n-  list-style: none;\n-  margin: 0;\n-  padding: 0;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a {\n-  color: #6b7280;\n-  font-size: 16px;\n-  cursor: pointer;\n-  text-decoration: none;\n+.lp-course-builder-content__section #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a:hover {\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover {\n-  color: #ef4444;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n   opacity: 1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions {\n-  margin-top: 15px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort {\n   display: flex;\n-  gap: 10px;\n-  flex-wrap: wrap;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button {\n-  display: inline-flex;\n+  position: absolute;\n+  top: 0;\n+  right: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button,\n-#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n-  background: #fff;\n-  border: 1px solid #d1d5db;\n-  color: #4b5563;\n-  padding: 8px 16px;\n-  border-radius: 6px;\n-  font-size: 13px;\n-  font-weight: 500;\n-  cursor: pointer;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  left: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n   align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n   transition: all 0.2s;\n+  text-decoration: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n-  display: inline-flex;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n-  margin-right: auto;\n-  border-style: dashed !important;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section {\n-  margin-top: 30px;\n-  background: #fff;\n-  border: 1px dashed #d1d5db;\n-  border-radius: 8px;\n-  padding: 20px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n   display: flex;\n-  align-items: center;\n-  gap: 15px;\n-}\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within {\n-  border-color: #1e1e1e;\n-  background: #fff;\n+  flex-direction: column;\n+  gap: 12px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n-  color: #9ca3af;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n-  flex-grow: 1;\n-  padding: 12px;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n   border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  outline: none;\n-  transition: border 0.2s;\n+  border-radius: 12px;\n+  padding: 10px 36px 16px 40px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-  padding: 12px 24px;\n-  border-radius: 6px;\n-  font-weight: 600;\n-  font-size: 14px;\n-  cursor: pointer;\n-  transition: background 0.2s;\n-  min-width: fit-content;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n-  background-color: #333;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n }\n-#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden {\n-  display: none !important;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n }\n-\n-.lp-cb-tab-content #lp-course-edit-curriculum {\n-  background-color: #fff;\n-  border-radius: 12px;\n-  padding: 28px 0 0;\n-  color: #1f2937;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n   max-width: 100%;\n-  box-sizing: border-box;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .heading {\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f5f5f5;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-items-counts,\n-.lp-cb-tab-content #lp-course-edit-curriculum .count-sections,\n-.lp-cb-tab-content #lp-course-edit-curriculum .total-items {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  right: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  left: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-course-builder-content__section #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.lp-course-builder-content__section #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.lp-course-builder-content__section #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .lp-course-builder-content__section .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-course-builder-content__section .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box .lp-meta-box__inner,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field > label,\n+.lp-cb-tab-content .cb-section__course-edit .form-field label span,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration label span,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field select,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field select:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio],\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field .description,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field .description:has(+ .learn-press-tip),\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .form-field > .learn-press-tip,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration > .learn-press-tip,\n+.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status {\n+  padding: 5px 12px;\n   font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 5px;\n+  text-transform: capitalize;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n+  display: flex;\n+  gap: 40px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n+  flex: 1;\n+  min-width: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n   font-weight: 600;\n-  padding: 6px 18px;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required {\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n   border-radius: 12px;\n-  margin-right: 10px;\n+  line-height: 1;\n+  margin-right: auto;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .course-toggle-all-sections {\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n+  border-color: #2271b1;\n+  box-shadow: 0 0 0 1px #2271b1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder {\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n   cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 30px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+  border-radius: 8px;\n+  border: 1px solid #e5e7eb;\n+  padding: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 0 0 10px;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 0 2px 2px;\n+  transform: translate(50%, -60%) rotate(-45deg);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone {\n+  width: 100%;\n+  min-height: 200px;\n+  background: #fff;\n+  border: 2px dashed #d1d5db;\n+  border-radius: 8px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  overflow: hidden;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n+  border-style: solid;\n+  border-color: #e5e7eb;\n+  padding: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content {\n+  text-align: center;\n+  padding: 30px 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon {\n+  display: flex;\n+  justify-content: center;\n+  margin-bottom: 12px;\n+  opacity: 0.6;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text {\n+  font-size: 14px;\n+  color: #6b7280;\n+  margin: 0 0 6px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link {\n+  color: #1a1a1a;\n+  text-decoration: none;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover {\n+  text-decoration: underline;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint {\n+  font-size: 12px;\n   color: #9ca3af;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img {\n+  width: 100%;\n+  height: auto;\n+  max-height: 200px;\n+  object-fit: cover;\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image {\n+  padding: 6px 14px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover {\n+  background: #ef4444;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row select {\n+  padding: 6px 14px 6px 32px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  background: #fff;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #1e1e1e;\n+  color: white;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-left: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+@media (max-width: 900px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left {\n+    flex: 1;\n+    max-width: 100%;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right {\n+    flex: 1;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+}\n+@media (max-width: 768px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 12px;\n+  text-transform: capitalize;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 0 0 10px;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 0 2px 2px;\n+  transform: translate(50%, -60%) rotate(-45deg);\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image,\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-left: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,\n+.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #offline_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data .form-field,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field {\n+  margin-bottom: 24px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-right: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label {\n+  display: flex;\n+  flex-wrap: wrap;\n+  align-items: center;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-right: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n+  font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box {\n+  display: flex;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box > label,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__content,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__fields,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n+  border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n+  transition: background 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label input[type=text],\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea {\n+  width: 100%;\n+  border: 1px solid #eaeaec;\n+  border-radius: 6px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n+  outline: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover,\n+.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n+}\n+.lp-cb-tab-content .cb-section__course-edit ._lp_block_finished_field {\n+  margin-top: -8px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field {\n+  align-items: start;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort {\n+  display: flex;\n+  position: absolute;\n+  top: 0;\n+  right: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  left: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 12px;\n+  padding: 10px 36px 16px 40px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n+  max-width: 100%;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  right: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  left: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.lp-cb-tab-content .cb-section__course-edit #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.lp-cb-tab-content .cb-section__header {\n+  display: none !important;\n+}\n+\n+.lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+\n+.lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+\n+ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-left: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-right: 3px solid transparent;\n+  margin-right: -3px;\n+}\n+ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #fff;\n+  color: #1e1e1e;\n+}\n+ul.lp-meta-box__course-tab__tabs li.active a,\n+ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #fff;\n+  color: #3b82f6;\n+  font-weight: 600;\n+  border-right-color: #3b82f6;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+\n+.lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #fff;\n+}\n+\n+@media (max-width: 768px) {\n+  .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-left: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 12px;\n+    background: #f9fafb;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li {\n+    flex-shrink: 0;\n+    padding: 0 4px;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li a {\n+    border-right: none;\n+    border-bottom: 3px solid transparent;\n+    margin-right: 0;\n+    white-space: nowrap;\n+  }\n+  ul.lp-meta-box__course-tab__tabs li.active a {\n+    border-right: none;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum {\n+  background-color: #fff;\n+  border-radius: 12px;\n+  padding: 0;\n+  color: #1f2937;\n+  max-width: 100%;\n+  box-sizing: border-box;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  margin-bottom: 8px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading h4 {\n+  color: #898989;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  transition: all 0.2s ease;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .count-sections {\n+  margin-right: 0;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .lp-btn-generate-with-ai {\n   margin-right: auto;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,\n+#lp-course-builder-content #lp-course-edit-curriculum .count-sections,\n+#lp-course-builder-content #lp-course-edit-curriculum .total-items {\n+  background: transparent;\n+  color: #898989;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 0;\n+  border-radius: 12px;\n+  margin-right: 10px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .count-sections {\n+  margin-right: auto;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections {\n+  cursor: pointer;\n+  color: #9ca3af;\n   padding: 5px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections {\n   border: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section {\n   background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   margin-bottom: 16px;\n   transition: all 0.2s ease;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover {\n   border-color: #d1d5db;\n   box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head {\n+#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section.focus {\n+  border-color: #7067ED !important;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head {\n   display: flex;\n   align-items: center;\n   padding: 10px 20px;\n-  background-color: #fff;\n+  background-color: #ffffff;\n   border-bottom: 1px solid transparent;\n-  border-radius: 8px;\n+  border-radius: 12px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head .drag {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag {\n   cursor: grab;\n   color: #9ca3af;\n   margin-left: 12px;\n   font-size: 16px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-head .button {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-head .button {\n   font-size: 12px;\n   padding: 6px 12px;\n   border-radius: 6px;\n@@ -3526,13 +10176,13 @@\n   cursor: pointer;\n   font-weight: 500;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n-  border-bottom-color: #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n+#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head {\n+  background-color: #eef1ff;\n+  border-radius: 12px 12px 0 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input {\n   flex-grow: 1;\n-  border: 1px solid transparent;\n+  border: none;\n   background: transparent;\n   font-size: 15px;\n   font-weight: 600;\n@@ -3542,38 +10192,60 @@\n   transition: all 0.2s;\n   width: auto;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:hover, .lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover, #lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus {\n+  background: transparent;\n+  border: none;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n+  box-shadow: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title:hover {\n+  background: #5b52d1;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-title:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-description:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-item-title:hover {\n+  border-color: #7067ED;\n+  color: #7067ED;\n+  background: #EEF1FF;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section {\n   color: #ef4444;\n   background: rgba(254, 226, 226, 0.5);\n   border: none;\n   transition: background 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover {\n   background: #fee2e2;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up {\n-  margin-right: 15px;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-edit-section-title:hover {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up {\n+  margin-right: 0px;\n   color: #777777;\n   cursor: pointer;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover {\n   color: #1e1e1e !important;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-collapse {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-collapse {\n   padding: 20px;\n-  background-color: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n+  background-color: #ffffff;\n+  border-radius: 0 0 12px 12px;\n   border-top: unset;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea {\n   width: 100%;\n   border: 1px dashed #d1d5db;\n   background: #fff;\n@@ -3585,22 +10257,22 @@\n   min-height: 60px;\n   margin-bottom: 15px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea:focus {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus {\n   border-style: solid;\n   border-color: #9ca3af;\n   outline: none;\n   color: #374151;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.section-list-items {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items {\n   list-style: none;\n   padding: 0;\n   margin: 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item {\n   display: flex;\n   align-items: center;\n-  background: #fff;\n+  background: #ffffff;\n   border: 1px solid #e5e7eb;\n   margin-bottom: 8px;\n   padding: 10px 15px;\n@@ -3608,31 +10280,36 @@\n   position: relative;\n   transition: transform 0.1s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover {\n-  border-color: #9ca3af;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover {\n+  border-color: #d1d5db;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .item-ico-type {\n-  width: 24px;\n-  height: 24px;\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus {\n+  border-color: #7067ED !important;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus .item-ico-type,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus .item-ico-type {\n+  color: #7067ED;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type {\n   background-size: contain;\n   background-repeat: no-repeat;\n   background-position: center;\n-  margin-left: 12px;\n   opacity: 0.8;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n-  content: \"\\f119\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before {\n+  content: \"\\f15b\";\n+  font-family: \"lp-icon\";\n+  font-size: 18px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n-  content: \"\\f469\";\n-  font-family: dashicons;\n-  font-size: 20px;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before {\n+  content: \"\\f12e\";\n+  font-family: \"lp-icon\";\n+  font-size: 18px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input {\n   border: none;\n   background: transparent;\n   font-size: 14px;\n@@ -3640,51 +10317,67 @@\n   flex-grow: 1;\n   padding: 5px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus {\n   outline: none;\n-  text-decoration: underline;\n+  text-decoration: none;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions {\n   display: flex;\n-  gap: 8px;\n+  gap: 4px;\n   opacity: 0.3;\n   transition: opacity 0.2s;\n   list-style: none;\n   margin: 0;\n   padding: 0;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a {\n-  color: #6b7280;\n-  font-size: 16px;\n-  cursor: pointer;\n-  text-decoration: none;\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 30px;\n+  height: 30px;\n+  border-radius: 6px;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover {\n+  background: #f7f7f7;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a {\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a.lp-icon-trash-o {\n   color: #ef4444;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a {\n+  color: #6b7280;\n+  font-size: 16px;\n+  cursor: pointer;\n+  text-decoration: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions {\n   opacity: 1;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-item:not(.lp_lesson) .lp-btn-set-preview-item {\n+  display: none;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions {\n   margin-top: 15px;\n   display: flex;\n   gap: 10px;\n   flex-wrap: wrap;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button {\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button {\n   display: inline-flex;\n+  opacity: 0.7;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button:hover {\n-  background: #f3f4f6;\n-  border-color: #9ca3af;\n-  color: #1e1e1e;\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover {\n+  opacity: 1;\n+  color: #7067ee;\n+  border-color: #eef1ff;\n+  background: #eef1ff;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button,\n-.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button,\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button {\n+#lp-course-builder-content #lp-course-edit-curriculum button,\n+#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n   background: #fff;\n   border: 1px solid #d1d5db;\n   color: #4b5563;\n@@ -3696,72 +10389,84 @@\n   align-items: center;\n   transition: all 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button {\n   display: inline-flex;\n+  min-width: fit-content;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover {\n   background: #f3f4f6;\n   border-color: #9ca3af;\n   color: #1e1e1e;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary {\n+  background-color: #7067ed;\n+  border-color: #7067ed;\n+  color: #fff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary:hover {\n+  background: #5a51c1;\n+  color: #fff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item-cancel.button {\n+  background-color: transparent;\n+  border: none;\n+  color: #aaaaaa;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select {\n   margin-right: auto;\n   border-style: dashed !important;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section {\n   margin-top: 30px;\n   background: #fff;\n   border: 1px dashed #d1d5db;\n   border-radius: 8px;\n-  padding: 20px;\n+  padding: 5px 20px;\n   display: flex;\n   align-items: center;\n-  gap: 15px;\n-}\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section:focus-within {\n-  border-color: #1e1e1e;\n-  background: #fff;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus {\n   color: #9ca3af;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within {\n+  border-color: #7067ee;\n+  background: #eef1ff;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within .lp-icon-plus {\n+  color: #7067ee;\n+}\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input {\n   flex-grow: 1;\n-  padding: 12px;\n-  border: 1px solid #e5e7eb;\n+  padding: 12px 0;\n+  border: none;\n   border-radius: 6px;\n   font-size: 14px;\n   outline: none;\n   transition: border 0.2s;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus {\n+  border-color: #7067ed;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section {\n-  background-color: #1e1e1e;\n+#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section {\n+  background-color: #7067ed;\n   color: #fff;\n   border: none;\n-  padding: 12px 24px;\n+  padding: 8px 16px;\n   border-radius: 6px;\n-  font-weight: 600;\n+  font-weight: 500;\n   font-size: 14px;\n   cursor: pointer;\n   transition: background 0.2s;\n   min-width: fit-content;\n+  margin-right: 20px;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n-  background-color: #333;\n+#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover {\n+  background-color: #5a51c1;\n }\n-.lp-cb-tab-content #lp-course-edit-curriculum .lp-hidden {\n+#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden {\n   display: none !important;\n }\n \n-.lp-option-disabled {\n-  pointer-events: none;\n-  opacity: 0.5;\n-}\n-\n #taxonomy-course_category.categorydiv {\n   border: none !important;\n   box-shadow: none !important;\n@@ -3773,12 +10478,13 @@\n   gap: 20px;\n   margin: 0 0 15px 0 !important;\n   padding: 0 !important;\n-  border-bottom: 2px solid #f0f0f0;\n+  border-bottom: 1px solid #f5f5f5;\n }\n #taxonomy-course_category.categorydiv .category-tabs li {\n   display: inline-block !important;\n   margin: 0 !important;\n   padding: 0 !important;\n+  border: none;\n }\n #taxonomy-course_category.categorydiv .category-tabs li a {\n   text-decoration: none;\n@@ -3792,16 +10498,16 @@\n   transition: all 0.2s;\n }\n #taxonomy-course_category.categorydiv .category-tabs li.tabs a, #taxonomy-course_category.categorydiv .category-tabs li:hover a {\n-  color: #1e1e1e;\n-  border-bottom-color: #1e1e1e;\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n }\n #taxonomy-course_category.categorydiv .tabs-panel {\n-  border: none !important;\n-  box-shadow: none !important;\n-  padding: 5px 0 !important;\n-  background: transparent !important;\n-  max-height: 300px !important;\n-  overflow-y: auto !important;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n   display: none;\n }\n #taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar {\n@@ -3851,8 +10557,8 @@\n   position: relative;\n }\n #taxonomy-course_category.categorydiv input[type=checkbox]:checked {\n-  background: #fff;\n-  border-color: #1e1e1e;\n+  background: #28A746;\n+  border-color: #28A746;\n }\n #taxonomy-course_category.categorydiv input[type=checkbox]:checked::after {\n   content: \"\";\n@@ -3861,24 +10567,25 @@\n   top: 1px;\n   width: 5px;\n   height: 9px;\n-  border: solid #1e1e1e;\n+  border: solid #fff;\n   border-width: 0 0 2px 2px;\n   transform: rotate(-45deg);\n }\n+#taxonomy-course_category.categorydiv input[type=checkbox]:checked::before {\n+  content: \"\";\n+}\n #taxonomy-course_category.categorydiv label {\n   display: inline-flex !important;\n   align-items: center;\n   width: auto !important;\n   font-size: 14px;\n-  color: #4b5563;\n+  color: #1e1e1e;\n   cursor: pointer;\n   line-height: 1.5;\n }\n \n #course_category-adder {\n-  margin-top: 20px !important;\n-  border-top: 1px solid #f0f0f0;\n-  padding-top: 15px;\n+  display: none !important;\n }\n \n #course_category-add-toggle {\n@@ -3951,180 +10658,10 @@\n   transform: rotate(-180deg);\n }\n \n-#lp-course-builder .cb-list-lesson {\n-  list-style: none;\n-  display: grid;\n-  grid-template-columns: 1fr;\n-  gap: 20px;\n-  padding: 0;\n-}\n-#lp-course-builder .cb-tab-lesson__action {\n-  display: flex;\n-  justify-content: space-between;\n-  align-items: center;\n-}\n-#lp-course-builder .cb-input-search-lesson {\n-  flex: 1;\n-  border: none;\n-  background: transparent;\n-  outline: none;\n-  font-size: 15px;\n-  color: #333;\n-  font-family: inherit;\n-}\n-#lp-course-builder .cb-input-search-lesson::placeholder {\n-  color: #999;\n-}\n-#lp-course-builder .cb-tab-lesson__action,\n-#lp-course-builder .courses-builder__lesson-tab {\n-  width: calc(100% - 140px);\n-}\n-#lp-course-builder .lesson-action {\n-  position: relative;\n-  display: flex;\n-  align-items: center;\n-  gap: 20px;\n-}\n-#lp-course-builder .lesson-action-expanded {\n-  cursor: pointer;\n-  padding: 15px 0 15px 20px;\n-}\n-#lp-course-builder .lesson-action-expanded svg {\n-  width: 24px;\n-  height: 24px;\n-}\n-#lp-course-builder .btn-edit-lesson {\n-  display: flex;\n-  align-items: center;\n-  text-decoration: none;\n-  font-size: 16px;\n-  font-weight: 500;\n-  border-radius: 8px;\n-  padding: 5px 15px;\n-  gap: 5px;\n-  background-color: #fff;\n-  border: 1px solid #1e1e1e;\n-}\n-#lp-course-builder .btn-edit-lesson svg {\n-  width: 1rem;\n-  height: 1rem;\n-}\n-#lp-course-builder .lesson-item {\n-  display: flex;\n-  flex-direction: row;\n-  padding: 5px 20px;\n-  background: #fff;\n-  border-radius: 16px;\n-  gap: 20px;\n-  font-size: 16px;\n-}\n-#lp-course-builder .highlight-new-lesson {\n-  box-shadow: #c8b4fb 0px 0px 20px 1px;\n-}\n-#lp-course-builder .lesson-content {\n-  flex: 1;\n-  display: flex;\n-  flex-direction: row;\n-  gap: 20px;\n-  justify-content: space-between;\n-  align-items: center;\n-}\n-#lp-course-builder .lesson-content__left {\n-  display: flex;\n-  gap: 15px;\n-}\n-#lp-course-builder .lesson-content__right {\n-  display: flex;\n-  align-items: center;\n-  gap: 25px;\n-}\n-#lp-course-builder .lesson__preview svg {\n-  height: 20px;\n-  width: 20px;\n-}\n-#lp-course-builder .wap-lesson-title {\n-  margin-top: 0;\n-  margin-bottom: 0;\n-}\n-#lp-course-builder .wap-lesson-title button {\n-  font-size: 20px;\n-  background: #fff;\n-  border: none;\n-  text-decoration: none;\n-  max-width: 234px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n-}\n-#lp-course-builder .lesson-status {\n-  padding: 5px 12px;\n-  font-size: 12px;\n-  font-weight: 500;\n-  background: #ccc;\n-  border-radius: 5px;\n-  text-transform: capitalize;\n-}\n-#lp-course-builder .lesson-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n-}\n-#lp-course-builder .lesson-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n-}\n-#lp-course-builder .lesson-assigned-courses {\n-  max-width: 300px;\n-  margin-left: 30px;\n-  white-space: nowrap;\n-  overflow: hidden;\n-  text-overflow: ellipsis;\n-}\n-#lp-course-builder .lesson-assigned-courses a {\n-  text-decoration: none;\n-}\n-#lp-course-builder .lesson-action-expanded__items {\n-  display: flex;\n-  position: absolute;\n-  min-width: 160px;\n-  top: 0;\n-  left: 0;\n-  transform: translate(-100%, 10px);\n-  padding: 10px;\n-  flex-direction: column;\n-  background-color: #fff;\n-  border-radius: 12px;\n-  box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;\n-  font-size: 16px;\n-  font-weight: 500;\n-}\n-#lp-course-builder .lesson-action-expanded__items.active {\n-  display: flex !important;\n-}\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete {\n-  padding: 10px;\n-  cursor: pointer;\n-  text-decoration: none;\n-  border-radius: 6px;\n-}\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,\n-#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover {\n-  background-color: #f5f5f5;\n-}\n-#lp-course-builder .lesson-action-expanded:hover + .lesson-action-expanded__items,\n-#lp-course-builder .lesson-action-expanded__items:hover {\n-  display: flex !important;\n-}\n-\n .lp-course-builder-content__section .lesson-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n@@ -4168,7 +10705,7 @@\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-lesson-edit-title__input {\n+.lp-course-builder-content__section input.cb-lesson-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4177,7 +10714,7 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-lesson-edit-title__input:focus {\n+.lp-course-builder-content__section input.cb-lesson-edit-title__input:focus {\n   border-color: #2271b1;\n   box-shadow: 0 0 0 1px #2271b1;\n }\n@@ -4199,6 +10736,15 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n+.lp-course-builder-content__section .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-content__section .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n .lp-course-builder-content__section .cb-button.cb-btn-update__lesson {\n   background: #1e1e1e;\n   color: #fff;\n@@ -4207,15 +10753,16 @@\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n-.lp-course-builder-content__section .field-material__label {\n-  width: unset;\n-  max-width: unset;\n-  min-width: unset;\n-}\n .lp-course-builder-content__section .lp-material-btn-wrap {\n   display: flex;\n   gap: 12px;\n }\n+.lp-course-builder-content__section #lp-material--group-container {\n+  padding: 20px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  max-width: 420px;\n+}\n .lp-course-builder-content__section #btn-lp--add-material,\n .lp-course-builder-content__section #btn-lp--save-material {\n   padding: 8px 25px;\n@@ -4235,97 +10782,571 @@\n   }\n }\n \n-.lp-course-builder-content__section .cb-section__quiz-title-assigned {\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content {\n   display: flex;\n   gap: 40px;\n+  align-items: flex-start;\n }\n-.lp-course-builder-content__section .lp-question-type-label {\n-  background: #e5e7eb;\n-  color: #4b5563;\n-  font-size: 11px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right {\n+  flex: 1;\n+  min-width: 0;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned {\n+  margin-bottom: 20px;\n+  font-size: 14px;\n+  line-height: 1.6;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned .label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned .label {\n   font-weight: 600;\n-  text-transform: uppercase;\n-  padding: 3px 8px;\n+  color: #1a1a1a;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a {\n+  color: #7067ED;\n+  text-decoration: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  word-break: break-all;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url {\n+  color: #7067ED;\n+  text-decoration: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder {\n+  color: #374151;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n   border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__title {\n+  margin: 0 0 12px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__row,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__control,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__control {\n+  width: 100%;\n+  height: 34px;\n+  padding: 6px 14px 6px 32px !important;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  background: #fff;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+}\n+@media (max-width: 1024px) {\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left {\n+    flex-basis: auto;\n+    max-width: 100%;\n+    width: 100%;\n+  }\n+  .lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right {\n+    width: 100%;\n+  }\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-list-questions .lp-question-item .lp-question-type-label {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n   margin-left: 10px;\n   white-space: nowrap;\n }\n-.lp-course-builder-content__section .lp-question-data-edit-header {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header {\n   display: flex;\n   align-items: center;\n   justify-content: space-between;\n-  margin-bottom: 10px;\n-  padding-bottom: 8px;\n+  margin-bottom: 16px;\n+  padding: 20px;\n+  background-color: #F7F7F7;\n+  border-radius: 12px 12px 0 0;\n }\n-.lp-course-builder-content__section .lp-question-data-edit-header label {\n-  font-size: 13px;\n-  font-weight: 700;\n-  color: #374151;\n-  text-transform: uppercase;\n-  letter-spacing: 0.5px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header label {\n+  font-size: 15px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n }\n-.lp-course-builder-content__section .lp-answers-config {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-label {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  font-size: 12px;\n+  font-weight: 600;\n+  padding: 4px 10px;\n+  border-radius: 6px;\n+  margin-left: 10px;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-answers-config,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-answers-config,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-answers-config,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-answers-config {\n+  padding: 0 16px 16px 16px;\n   margin-top: 15px;\n }\n-.lp-course-builder-content__section .lp-question-by-type {\n-  padding: 15px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 10px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new {\n+  flex: 1;\n+  height: 38px;\n+  padding: 0 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  background-color: #fff;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  outline: none;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: left 10px center;\n+  background-size: 14px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new:focus {\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: none;\n+  padding: 9px 18px;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type:hover {\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner {\n+  font-size: 14px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit {\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+  overflow: hidden;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit .wp-editor-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit .wp-editor-wrap {\n+  margin: 0 20px 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-by-type,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-by-type,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-by-type,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-by-type {\n+  border: 1px solid #f5f5f5;\n   border-radius: 12px;\n-  border: 1px solid #dcdcde;\n+  margin-top: 24px;\n }\n-.lp-course-builder-content__section .lp-question-choice-header {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-choice-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-choice-header {\n   display: flex;\n   justify-content: space-between;\n-  padding: 12px 25px 10px 25px;\n+  padding: 0 4px 8px 4px;\n   font-size: 12px;\n-  color: #1e1e1e;\n-  font-weight: 600;\n-  text-transform: uppercase;\n-  margin-bottom: 16px;\n-  background: #f5f5f5;\n+  color: #898989;\n+  font-weight: 500;\n+  margin-bottom: 8px;\n+  background: transparent;\n }\n-.lp-course-builder-content__section .lp-question-answer-item {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item {\n   display: flex;\n   align-items: center;\n   margin-bottom: 12px;\n-  border-radius: 4px;\n-  padding: 10px;\n-  border: 1px solid #f5f5f5;\n-  border-top: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  padding: 12px 16px;\n+  border: 0;\n+  background: #ffffff;\n   position: relative;\n }\n-.lp-course-builder-content__section .lp-question-answer-item .drag {\n-  color: #d1d5db;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item .drag,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item .drag {\n+  color: #7067ED;\n   cursor: move;\n-  margin-left: 8px;\n-  font-size: 14px;\n+  margin-left: 12px;\n+  font-size: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input {\n   flex-grow: 1;\n-  padding: 8px 12px;\n+  padding: 10px 14px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   font-size: 14px;\n-  color: #374151;\n+  color: #1e1e1e;\n   transition: border 0.2s;\n-  margin-left: 10px;\n+  margin-left: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-input:focus {\n-  border-color: #9ca3af;\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input:focus {\n+  border-color: #7067ED;\n   outline: none;\n }\n-.lp-course-builder-content__section .lp-btn-delete-question-answer {\n-  color: #ef4444;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-delete-question-answer {\n+  color: #9ca3af;\n   cursor: pointer;\n   opacity: 0;\n   transition: opacity 0.2s;\n-  margin-left: 10px;\n+  margin-left: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-question-answer-item:hover .lp-btn-delete-question-answer {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item:hover .lp-btn-delete-question-answer {\n   opacity: 1;\n+  color: #dc2626;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=radio],\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox] {\n   appearance: none;\n   -webkit-appearance: none;\n   width: 20px;\n@@ -4335,30 +11356,50 @@\n   cursor: pointer;\n   position: relative;\n   outline: none;\n-  transition: all 0.2s;\n+  transition: border-color 0.2s;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox] {\n   border-radius: 4px;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input:checked {\n-  border-color: #10b981;\n-}\n-.lp-course-builder-content__section .lp-question-answer-item input:checked::after {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input:checked {\n+  border-color: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio]:checked::after,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio]:checked::after {\n   content: \"\";\n   position: absolute;\n   top: 50%;\n   right: 50%;\n   transform: translate(50%, -50%);\n-  width: 8px;\n-  height: 8px;\n-  background: #10b981;\n+  width: 10px;\n+  height: 10px;\n+  background: #28A746;\n   border-radius: 50%;\n }\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked {\n-  background: #10b981;\n-}\n-.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked::after {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked::after,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  top: 50%;\n+  right: 50%;\n   width: 5px;\n   height: 9px;\n   border: solid white;\n@@ -4367,85 +11408,295 @@\n   background: transparent;\n   border-radius: 0;\n }\n-.lp-course-builder-content__section .lp-question-answer-item-add-new {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new {\n   display: flex;\n   align-items: center;\n-  margin-top: 10px;\n-  padding-right: 10px;\n-  border-radius: 4px;\n-  border: 1px solid #f5f5f5;\n+  margin-top: 16px;\n+  padding: 24px 0 0 0;\n+  border: none;\n   border-top: 1px solid #f5f5f5;\n }\n-.lp-course-builder-content__section .lp-question-answer-item-add-new .lp-icon-plus {\n-  color: #9ca3af;\n-  margin-left: 8px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new .lp-icon-plus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new .lp-icon-plus {\n+  color: #7067ED;\n+  margin-left: 12px;\n+  font-size: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-new-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input {\n   flex-grow: 1;\n-  border: 1px dashed #d1d5db;\n-  padding: 8px 12px;\n+  border: 1px solid #e5e7eb;\n+  padding: 10px 14px;\n   border-radius: 6px;\n-  font-size: 13px;\n-  margin-left: 10px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-left: 16px;\n }\n-.lp-course-builder-content__section input.lp-question-answer-title-new-input:focus {\n-  border: 1px solid #9ca3af;\n+.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input:focus {\n+  border-color: #7067ED;\n   outline: none;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons {\n+  display: flex;\n   flex-wrap: wrap;\n+  gap: 8px;\n+  margin-top: 16px;\n+  margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons button,\n-.lp-course-builder-content__section .lp-btn-add-question-answer {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary {\n   background: #fff;\n   color: #374151;\n   border: 1px solid #d1d5db;\n-  padding: 7px 14px;\n+  padding: 8px 16px;\n   border-radius: 6px;\n-  font-size: 12px;\n-  font-weight: 600;\n+  font-size: 14px;\n+  font-weight: 500;\n   cursor: pointer;\n   min-width: fit-content;\n+  transition: all 0.2s;\n }\n-.lp-course-builder-content__section .lp-question-fib-buttons button.lp-btn-fib-save-content {\n-  border-color: #1e1e1e;\n-  background: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover {\n+  background: #7067ED;\n   color: #fff;\n }\n-.lp-course-builder-content__section .lp-btn-add-question-answer:hover {\n-  background: #e5e7eb;\n-  color: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary:hover {\n+  color: #374151;\n+  background: #F7F7F7;\n+  border-color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-question-field-settings {\n-  padding: 10px 20px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content {\n+  background: #7067ED;\n+  color: #fff;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content:hover {\n+  background: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details {\n+  margin-top: 24px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header {\n+  cursor: pointer;\n+  margin-bottom: 24px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label {\n+  cursor: pointer;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse {\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-question-data-edit-header {\n+  margin-bottom: 0;\n+  border-radius: 12px 12px 12px 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-up,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-down,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-down {\n+  display: block !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-section-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-section-collapse {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle {\n+  padding: 14px 16px;\n+  background-color: #F7F7F7;\n+  cursor: pointer;\n   display: flex;\n-  flex-wrap: wrap;\n-  gap: 12px;\n   align-items: center;\n-  gap: 6px 12px;\n+  justify-content: space-between;\n+  transition: background 0.2s;\n }\n-.lp-course-builder-content__section .lp-question-field-settings__label label {\n-  font-size: 13px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle:hover {\n+  background-color: #e5e7eb;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle label {\n   font-weight: 600;\n-  color: #4b5563;\n+  font-size: 14px;\n+  margin: 0;\n+  cursor: pointer;\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle {\n+  color: #9ca3af;\n+  transition: transform 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header, .lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-trigger-toggle {\n+  border-bottom-color: #F7F7F7;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-section-collapse,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-section-collapse {\n+  padding: 20px;\n+  background: #fff;\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings {\n+  padding: 0 0 24px 0;\n   display: block;\n-  margin-bottom: 5px;\n }\n-.lp-course-builder-content__section .lp-question-field-settings input[name=lp-question-point-input] {\n-  width: 80px;\n-  padding: 6px 10px;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings__label label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings__label label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  display: block;\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input] {\n+  width: 100px;\n+  padding: 10px 12px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n   font-size: 14px;\n+  color: #1e1e1e;\n }\n-.lp-course-builder-content__section .lp-question-fib-desc,\n-.lp-course-builder-content__section .lp-question-field-settings___desc {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]:focus {\n+  border-color: #7067ED;\n+  outline: none;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-desc,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings___desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings___desc {\n   font-size: 12px;\n   color: #9ca3af;\n-  margin-top: 4px;\n-  font-style: italic;\n+  margin-top: 8px;\n+  font-style: normal;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question {\n   margin-top: 30px;\n   background: #fff;\n   border: 1px dashed #d1d5db;\n@@ -4455,13 +11706,22 @@\n   align-items: center;\n   gap: 12px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question.lp-icon-plus {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question.lp-icon-plus {\n   color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question select {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question select,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question select {\n   height: 38px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input {\n   flex-grow: 1;\n   padding: 10px 12px;\n   border: 1px solid #e5e7eb;\n@@ -4470,11 +11730,17 @@\n   outline: none;\n   min-width: 200px;\n }\n-.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input:focus {\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n-.lp-course-builder-content__section select.lp-question-type-new {\n+.lp-course-builder-canvas .cb-section__quiz-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__lesson-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .cb-section__question-edit select.lp-question-type-new,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] select.lp-question-type-new {\n   padding: 0 12px 0 30px;\n   border: 1px solid #e5e7eb;\n   border-radius: 6px;\n@@ -4483,22 +11749,54 @@\n   color: #374151;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section button.lp-btn-add-question {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  border: none;\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n   padding: 10px 20px;\n-  border-radius: 6px;\n+  border-radius: 8px;\n   font-weight: 600;\n   font-size: 14px;\n-  cursor: pointer;\n   transition: background 0.2s;\n   min-width: fit-content;\n+  cursor: default !important;\n }\n-.lp-course-builder-content__section button.lp-btn-add-question:hover {\n-  background-color: #1e1e1e;\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover {\n+  opacity: 0.5;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED !important;\n }\n-.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select {\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active {\n+  cursor: pointer !important;\n+  background: #7067ED !important;\n+  color: #EEF1FF !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active:hover {\n+  background: #5b52d1 !important;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover {\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select {\n   background-color: #fff;\n   color: #374151;\n   border: 1px solid #d1d5db;\n@@ -4509,27 +11807,197 @@\n   cursor: pointer;\n   min-width: fit-content;\n }\n-.lp-course-builder-content__section [class*=lp-icon-]:hover {\n+.lp-course-builder-canvas .cb-section__quiz-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .cb-section__question-edit [class*=lp-icon-]:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] [class*=lp-icon-]:hover {\n   color: #1e1e1e;\n }\n-.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select:hover {\n+.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select:hover {\n   background-color: #f3f4f6;\n   border-color: #9ca3af;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-header {\n-  background: #f5f5f5;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item {\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header {\n+  border-radius: 6px 6px 0 0;\n+  border-bottom: 1px solid #f5f5f5;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-header .lp-question-fib-option-index {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  border-radius: 6px;\n+  border: 1px solid #e5e7eb;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index {\n   font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-left: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-left: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-left: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-left: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-btn-fib-option-delete:hover {\n-  color: #ef4444;\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-right: auto;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index {\n+  font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-left: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-left: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-left: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-left: 16px;\n   font-size: 16px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail > label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-right: auto;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail {\n+  font-size: 14px;\n+  padding: 24px;\n+  background: #F7F7F7;\n+  border: 1px solid #e5e7eb;\n+  border-top: none;\n+  border-radius: 0 0 6px 6px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail > label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail > label {\n   display: flex;\n   flex-direction: row-reverse;\n   font-weight: 500;\n@@ -4538,7 +12006,14 @@\n   justify-content: flex-end;\n   align-items: center;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox] {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio],\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox] {\n   order: 1;\n   margin-top: 2px;\n   appearance: none;\n@@ -4553,7 +12028,14 @@\n   margin: 0;\n   flex-shrink: 0;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:before {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:before {\n   content: \"\";\n   position: absolute;\n   width: 20px;\n@@ -4565,23 +12047,61 @@\n   transition: all 0.3s ease;\n   box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:focus {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked {\n-  background: #3b82f6;\n-}\n-.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked:before {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked:before,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked:before {\n   right: 22px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  margin-top: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > *,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * {\n   display: flex;\n   gap: 8px;\n   font-size: 14px;\n   font-weight: 500;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label {\n   display: flex;\n   flex-direction: row-reverse;\n   font-weight: 500;\n@@ -4590,10 +12110,16 @@\n   justify-content: space-between;\n   align-items: self-start;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * label input {\n   margin-top: 3px;\n }\n-.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap > * p {\n   font-size: 13px;\n   color: #6b7280;\n   line-height: 1.5;\n@@ -4601,64 +12127,79 @@\n   display: block;\n   font-weight: 400;\n }\n-.lp-course-builder-content__section .lp-section-collapse {\n-  border-radius: 6px;\n-}\n-.lp-course-builder-content__section .cb-quiz-edit-title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title {\n   flex: 1;\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .quiz-assigned-courses {\n-  display: flex;\n-  flex-direction: column;\n-  align-items: end;\n-  margin-left: 0 !important;\n-}\n-.lp-course-builder-content__section .quiz-assigned-courses .label {\n-  font-size: 16px;\n-  font-weight: 600;\n-  color: #1a1a1a;\n-  margin-bottom: 8px;\n-}\n-.lp-course-builder-content__section .quiz-assigned-courses a,\n-.lp-course-builder-content__section .quiz-assigned-courses span {\n-  font-size: 16px;\n-  font-weight: 400;\n-}\n-.lp-course-builder-content__section .lp-cb-section__title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .cb-section__question-edit .lp-cb-section__title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-cb-section__title {\n   font-size: 28px;\n   font-weight: 600;\n   margin-top: 0;\n   margin-bottom: 0;\n   color: #1e1e1e;\n }\n-.lp-course-builder-content__section .quiz-status {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #ccc;\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n-.lp-course-builder-content__section .quiz-status.publish {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status.publish,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.publish,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.publish,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-course-builder-content__section .quiz-status.trash {\n+.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .cb-section__question-edit .quiz-status.trash,\n+.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.trash,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.trash,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__input {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4667,21 +12208,33 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n-}\n-.lp-course-builder-content__section .cb-quiz-edit-desc {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-quiz-edit-desc__label {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc__label,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-button {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -4689,16 +12242,40 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-update__quiz {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__quiz,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-update__quiz {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-trash__quiz {\n+.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__quiz,\n+.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-trash__quiz {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n @media (max-width: 768px) {\n-  .lp-course-builder-content__section #lp-course-builder-content {\n+  .lp-course-builder-canvas .cb-section__quiz-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .cb-section__lesson-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content,\n+  .lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] #lp-course-builder-content {\n     padding: 16px;\n   }\n }\n@@ -4706,60 +12283,93 @@\n #lp-course-builder-content .lp-edit-quiz-wrap {\n   background-color: #fff;\n   border-radius: 12px;\n-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n-  padding: 30px;\n-  color: #1f2937;\n-  margin-top: 20px;\n-}\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n-  border: none;\n+  padding: 0;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .heading {\n   display: flex;\n   align-items: center;\n-  justify-content: space-between;\n-  margin-bottom: 25px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #f3f4f6;\n+  margin-bottom: 8px;\n+  gap: 8px;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .heading h4 {\n-  font-size: 18px;\n-  font-weight: 700;\n-  margin: 0;\n-  color: #1e1e1e;\n+  color: #898989;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .total-items {\n-  background: #f3f4f6;\n-  color: #6b7280;\n-  font-size: 12px;\n-  font-weight: 600;\n-  padding: 4px 10px;\n-  border-radius: 20px;\n-  margin-right: 10px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .total-items {\n+  margin-right: auto;\n+  font-size: 13px;\n+  color: #898989;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all {\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all {\n   cursor: pointer;\n-  color: #9ca3af;\n-  margin-right: auto;\n   padding: 5px;\n+  color: #6b7280;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n+  margin-bottom: 20px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner {\n+  animation: rotation 2s infinite linear;\n+  font-size: 1.25rem;\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .one,\n+#lp-course-builder-content .lp-edit-quiz-wrap .plural {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap[data-count=\"1\"] .one {\n+  display: inline-block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural {\n+  display: inline-block;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item {\n-  background: #fff;\n   border: 1px solid #e5e7eb;\n-  border-radius: 100px;\n+  border-radius: 12px;\n   margin-bottom: 12px;\n-  transition: all 0.2s ease;\n+  background: #fff;\n+  transition: all 0.2s;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title {\n+  background: #fff;\n+  border: 1px solid #d1d5db;\n+  color: #4b5563;\n+  padding: 8px 16px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  align-items: center;\n+  transition: all 0.2s;\n   display: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-update-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-cancel-update-question-title {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title {\n   display: inline-block;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-edit-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-remove-question {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question {\n   display: none;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title {\n@@ -4772,86 +12382,356 @@\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover {\n   border-color: #d1d5db;\n-  box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.05);\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:last-child {\n+  margin-bottom: 0;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n-  border-radius: 8px;\n+  gap: 12px;\n+  padding: 14px 16px;\n   background-color: #fff;\n+  border-bottom: 1px solid transparent;\n+  border-radius: 12px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n-  border-bottom: 1px solid #f3f4f6;\n-  border-radius: 8px 8px 0 0;\n-  background-color: #f9fafb;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title {\n+  display: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .drag {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag {\n+  cursor: move;\n   color: #9ca3af;\n-  cursor: grab;\n-  margin-left: 10px;\n   font-size: 16px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input {\n-  flex-grow: 1;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input {\n+  flex: 1;\n+  padding: 8px 12px;\n   border: 1px solid transparent;\n-  background: transparent;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1f2937;\n-  padding: 6px 10px;\n   border-radius: 6px;\n+  font-size: 14px;\n+  background: transparent;\n   transition: all 0.2s;\n-  margin-left: 10px;\n+  font-weight: 600;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:hover,\n-#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:focus {\n-  background: #fff;\n-  border-color: #e5e7eb;\n-  outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label {\n+  font-size: 11px;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED;\n+  padding: 4px 10px;\n+  border-radius: 20px;\n+  white-space: nowrap;\n+  font-weight: 600;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question,\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle {\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question {\n+  cursor: pointer;\n   color: #9ca3af;\n+  padding: 6px;\n+  transition: all 0.2s;\n+  border-radius: 4px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover {\n+  color: #1e1e1e;\n+  background: #f3f4f6;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover {\n+  color: #dc2626;\n+  background: #fee2e2;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle {\n   cursor: pointer;\n   padding: 6px;\n-  font-size: 16px;\n-  text-decoration: none;\n+  color: #9ca3af;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover {\n+  color: #1e1e1e;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus) {\n+  border: 1px solid #7067ED;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n+  border-bottom-color: #f5f5f5;\n+  border-radius: 12px 12px 0 0;\n+  background: #EEF1FF;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main {\n+  display: none;\n+  padding: 24px;\n+  background: #ffffff;\n+  border-radius: 0 0 12px 12px;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main {\n+  display: block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.clone {\n+  display: none;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner {\n+  display: inline-block;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question {\n   display: flex;\n   align-items: center;\n-  transition: color 0.2s;\n+  gap: 12px;\n+  padding: 16px;\n+  background-color: #ffffff;\n+  border: 1px dashed #e5e7eb;\n+  border-radius: 12px;\n+  margin-top: 12px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title:hover {\n-  color: #3b82f6;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-icon-plus {\n+  color: #7067ED;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question:hover {\n-  color: #ef4444;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input {\n+  flex: 1;\n+  padding: 10px 14px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle:hover {\n-  color: #1e1e1e;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .button {\n-  font-size: 12px;\n-  padding: 4px 10px;\n-  margin-left: 5px;\n-  display: none;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new {\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  min-width: 150px;\n+  font-size: 14px;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-edit-main {\n-  padding: 20px;\n-  background: #fff;\n-  border-radius: 0 0 8px 8px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button {\n+  padding: 10px 20px;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button:hover {\n+  background: #7067ED;\n+  color: #EEF1FF;\n }\n #lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar {\n   border: none;\n   background: #f5f5f5;\n }\n-#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner {\n-  font-size: 12px;\n+#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions {\n+  border: none;\n }\n \n-.lp-course-builder-content__section .question-status {\n+.cb-section__quiz-edit .lp-meta-box,\n+.cb-section__quiz-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,\n+.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.cb-section__quiz-edit .form-field,\n+.cb-section__quiz-edit .lp-meta-box__duration,\n+.cb-section__quiz-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .form-field > label,\n+.cb-section__quiz-edit .form-field label span,\n+.cb-section__quiz-edit .lp-meta-box__duration > label,\n+.cb-section__quiz-edit .lp-meta-box__duration label span,\n+.cb-section__quiz-edit .lp-meta-box-field > label,\n+.cb-section__quiz-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .form-field input[type=text],\n+.cb-section__quiz-edit .form-field input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .form-field input[type=number]:focus,\n+.cb-section__quiz-edit .form-field input[type=text]:focus,\n+.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.cb-section__quiz-edit .form-field select,\n+.cb-section__quiz-edit .lp-meta-box__duration select,\n+.cb-section__quiz-edit .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .form-field select:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration select:focus,\n+.cb-section__quiz-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio],\n+.cb-section__quiz-edit .form-field input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:focus,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field .description,\n+.cb-section__quiz-edit .lp-meta-box__duration .description,\n+.cb-section__quiz-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.cb-section__quiz-edit .form-field .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.cb-section__quiz-edit .form-field > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box__duration > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .course-status {\n   padding: 5px 12px;\n   font-size: 12px;\n   font-weight: 500;\n@@ -4859,47 +12739,2365 @@\n   border-radius: 5px;\n   text-transform: capitalize;\n }\n-.lp-course-builder-content__section .question-status.publish {\n+.cb-section__quiz-edit .course-status.publish {\n   color: #fff;\n   background: #1e1e1e;\n }\n-.lp-course-builder-content__section .question-status.trash {\n+.cb-section__quiz-edit .course-status.trash {\n   color: #fff;\n   background-color: #dc2626;\n }\n-.lp-course-builder-content__section .cb-section__question-title-assigned {\n+.cb-section__quiz-edit .cb-course-edit-content {\n   display: flex;\n   gap: 40px;\n }\n-.lp-course-builder-content__section .cb-question-edit-title {\n+.cb-section__quiz-edit .cb-course-edit-column--left {\n+  flex: 0 0 400px;\n+  max-width: 400px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-column--right {\n   flex: 1;\n+  min-width: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label .required {\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: transparent;\n+  border: none;\n+  color: #7067ED;\n+  text-decoration: none;\n+  font-size: 14px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  padding: 8px 10px;\n+  border-radius: 12px;\n+  line-height: 1;\n+  margin-right: auto;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn .lp-ico-ai {\n+  width: 16px;\n+  height: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-ai-btn:hover {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input:focus {\n+  border-color: #2271b1;\n+  box-shadow: 0 0 0 1px #2271b1;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input::placeholder {\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-course-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.cb-section__quiz-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-permalink-label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-permalink-url {\n+  font-size: 13px;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.cb-section__quiz-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.cb-section__quiz-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.cb-section__quiz-edit .cb-permalink-prefix strong {\n+  color: #64748b;\n+  font-weight: 600;\n+}\n+.cb-section__quiz-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.cb-section__quiz-edit .cb-permalink-slug-input::placeholder {\n+  color: #94a3b8;\n+}\n+.cb-section__quiz-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.cb-section__quiz-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 30px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper,\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+  border-radius: 8px;\n+  border: 1px solid #e5e7eb;\n+  padding: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  min-height: 36px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #64748b;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #64748b;\n+  background: #fff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label:hover {\n+  border-color: #94a3b8;\n+  color: #334155;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #94a3b8;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n+  font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 0 0 10px;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 0 2px 2px;\n+  transform: translate(50%, -60%) rotate(-45deg);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(34, 113, 177, 0.1);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes {\n+.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__title {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-container {\n   display: flex;\n   flex-direction: column;\n-  align-items: end;\n-  margin-left: 0 !important;\n+  gap: 12px;\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone {\n+  width: 100%;\n+  min-height: 200px;\n+  background: #fff;\n+  border: 2px dashed #d1d5db;\n+  border-radius: 8px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  overflow: hidden;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone:hover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.03);\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone:hover a {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone.has-image {\n+  cursor: default;\n+  border-width: 1px;\n+  border-style: solid;\n+  border-color: #e5e7eb;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-dropzone.dragover {\n+  border-color: #7067ED;\n+  background: rgba(112, 103, 237, 0.05);\n+}\n+.cb-section__quiz-edit .cb-featured-image-upload-content {\n+  text-align: center;\n+  padding: 30px 20px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-icon {\n+  display: flex;\n+  justify-content: center;\n+  margin-bottom: 12px;\n+  opacity: 0.6;\n+}\n+.cb-section__quiz-edit .cb-featured-image-icon__image {\n+  display: block;\n+  width: 24px;\n+  height: 24px;\n+  background: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain;\n+}\n+.cb-section__quiz-edit .cb-featured-image-text {\n+  font-size: 14px;\n+  color: #6b7280;\n+  margin: 0 0 6px 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-link {\n+  color: #1a1a1a;\n+  text-decoration: none;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-featured-image-link:hover {\n+  text-decoration: underline;\n+}\n+.cb-section__quiz-edit .cb-featured-image-hint {\n+  font-size: 12px;\n+  color: #9ca3af;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview__img {\n+  width: 100%;\n+  height: auto;\n+  max-height: 200px;\n+  object-fit: cover;\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit .cb-change-featured-image {\n+  padding: 6px 14px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 8px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .cb-change-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 6px 10px;\n+  border: none;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image:hover {\n+  background: #ef4444;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image__icon {\n+  display: block;\n+  width: 20px;\n+  height: 20px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish {\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__title {\n+  margin: 0 0 16px;\n+  font-size: 16px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row select {\n+  padding: 6px 14px 6px 32px !important;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n+  margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit .cb-set-featured-image {\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  background: #fff;\n+  color: #7067ED;\n+  border-radius: 4px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-set-featured-image:hover {\n+  background: #7067ED;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  flex-wrap: wrap;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input,\n+.cb-section__quiz-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input:focus,\n+.cb-section__quiz-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent {\n+  width: 100%;\n+  padding: 6px 12px !important;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #1e1e1e;\n+  color: white;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 0;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-left: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n+  font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.cb-section__quiz-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+@media (max-width: 900px) {\n+  .cb-section__quiz-edit .cb-course-edit-content {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-column--left {\n+    flex: 1;\n+    max-width: 100%;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-column--right {\n+    flex: 1;\n+  }\n+  .cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+    flex-direction: column;\n+    gap: 24px;\n+  }\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.cb-section__quiz-edit .course-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  background: #ccc;\n+  border-radius: 12px;\n+  text-transform: capitalize;\n+}\n+.cb-section__quiz-edit .course-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.cb-section__quiz-edit .course-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__char-count {\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes .label {\n+.cb-section__quiz-edit .cb-course-edit-title__input {\n+  width: 100%;\n+  padding: 10px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+}\n+.cb-section__quiz-edit .cb-course-edit-desc__word-count {\n+  display: none;\n+  font-size: 12px;\n+  font-weight: 500;\n+  color: #6b7280;\n+  background: #f3f4f6;\n+  padding: 2px 8px;\n+  border-radius: 4px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-terms-header {\n+  display: flex;\n+  justify-content: space-between;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-terms-header__label {\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #9ca3af;\n+  background: transparent;\n+  border: none;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper {\n+  display: flex;\n+  gap: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper,\n+.cb-section__quiz-edit .cb-course-edit-categories__wrapper {\n+  flex: 1;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__toolbar {\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  flex-wrap: wrap;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__toolbar {\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-wrap {\n+  flex: 1 1 220px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__search-wrap {\n+  display: block;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button {\n+  -webkit-appearance: none;\n+  appearance: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #ffffff;\n+  transition: border-color 0.2s ease, box-shadow 0.2s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__search-input:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper {\n+  display: flex;\n+  gap: 8px;\n+  flex-wrap: wrap;\n+  border: none;\n+  box-shadow: none;\n+  padding: 5px 0;\n+  background: transparent;\n+  max-height: 180px;\n+  overflow-y: auto;\n+  min-height: 36px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar {\n+  width: 6px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb {\n+  background: #d1d5db;\n+  border-radius: 3px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__empty {\n+  margin: 12px 0 0;\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper {\n+  display: flex;\n+  gap: 10px 40px;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tags__wrapper {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip {\n+  display: inline-flex;\n+  align-items: center;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input[type=checkbox] {\n+  display: none;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 4px;\n+  padding: 6px 14px;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: all 0.2s ease;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  background: #ffffff;\n+  user-select: none;\n+  line-height: 1.2;\n+  white-space: nowrap;\n+}\n+.cb-section__quiz-edit .cb-tag-chip label:hover {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count {\n+  font-size: 13px;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove {\n+  display: none;\n   font-size: 16px;\n+  line-height: 1;\n+  margin-right: 2px;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label {\n+  border-color: #EEF1FF;\n+  color: #7067ED;\n+  background: #EEF1FF;\n+  font-weight: 500;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__count {\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label .cb-tag-chip__remove {\n+  display: inline;\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover {\n+  color: #898989;\n+  background: #f9fafb;\n+  border-color: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__count {\n+  color: #898989;\n+}\n+.cb-section__quiz-edit .cb-tag-chip input:checked + label:hover .cb-tag-chip__remove {\n+  display: inline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox {\n+  display: flex;\n+  align-items: center;\n+  margin-bottom: 0;\n+  padding: 4px 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label {\n+  color: #1d2939;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  -moz-appearance: none;\n+  width: 20px;\n+  height: 20px;\n+  border: 2px solid #d0d5dd;\n+  border-radius: 4px;\n+  background: #fff;\n+  cursor: pointer;\n+  position: relative;\n+  margin: 0 0 0 10px;\n+  transition: all 0.2s ease;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover {\n+  border-color: #98a2b3;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked {\n+  background: #28A746;\n+  border-color: #28A746;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after {\n+  content: \"\";\n+  position: absolute;\n+  right: 50%;\n+  top: 50%;\n+  width: 5px;\n+  height: 9px;\n+  border: solid #fff;\n+  border-width: 0 0 2px 2px;\n+  transform: translate(50%, -60%) rotate(-45deg);\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+  border-color: #e4e7ec;\n+  background: #f9fafb;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled + label {\n+  opacity: 0.5;\n+  cursor: not-allowed;\n+}\n+.cb-section__quiz-edit .cb-course-edit-categories__checkbox label {\n+  font-size: 14px;\n+  color: #344054;\n+  font-weight: 400;\n+  cursor: pointer;\n+  user-select: none;\n+  line-height: 20px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap {\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-featured-image__title {\n+  font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-container {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 16px;\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview {\n+  background: #f5f5f5;\n+  border: 2px dashed #ddd;\n+  border-radius: 6px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .cb-featured-image-preview:has(img) {\n+  border: none;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder {\n+  width: 300px;\n+  height: 200px;\n+  display: flex;\n+  flex-direction: column;\n+  align-items: center;\n+  justify-content: center;\n+  color: #999;\n+  font-size: 14px;\n+}\n+.cb-section__quiz-edit .cb-featured-image-placeholder::before {\n+  content: \"📷\";\n+  font-size: 48px;\n   margin-bottom: 8px;\n+  opacity: 0.5;\n+}\n+.cb-section__quiz-edit .cb-featured-image-actions {\n+  display: flex;\n+  flex-direction: row;\n+  gap: 12px;\n }\n-.lp-course-builder-content__section .question-assigned-quizzes a,\n-.lp-course-builder-content__section .question-assigned-quizzes span {\n+.cb-section__quiz-edit .cb-remove-featured-image,\n+.cb-section__quiz-edit .cb-set-featured-image {\n+  padding: 10px 14px;\n+  border: none;\n+  background: #f7f7f7;\n+  color: #aaaaaa;\n+  border-radius: 8px;\n+  cursor: pointer;\n+  transition: background-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-remove-featured-image:hover,\n+.cb-section__quiz-edit .cb-set-featured-image:hover {\n+  background: #fef2f2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__title {\n+  margin: 0 0 8px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #111827;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__row {\n+  display: grid;\n+  grid-template-columns: 100px 1fr;\n+  gap: 12px;\n+  align-items: center;\n+  margin-bottom: 12px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__label {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #374151;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control {\n+  width: 100%;\n+  min-height: 34px;\n+  padding: 6px 10px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  color: #111827;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__control:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  border: 1px solid #fecaca;\n+  border-radius: 6px;\n+  background: #fff;\n+  color: #dc2626;\n+}\n+.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover {\n+  background: #fef2f2;\n+  border-color: #fca5a5;\n+}\n+.cb-section__quiz-edit div.mce-statusbar {\n+  border-top: none;\n+}\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,\n+.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+  margin-bottom: 16px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input,\n+.cb-section__quiz-edit .cb-course-edit-tags__input {\n+  width: 100%;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__input:focus,\n+.cb-section__quiz-edit .cb-course-edit-tags__input:focus {\n+  border-color: #d1d5db;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent {\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  border: 1px solid #ddd;\n+  border-radius: 6px;\n+  outline: none;\n+  background: #fff;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus {\n+  border-color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save {\n+  flex: 1;\n+  background: #ffffff;\n+  color: #7067ED;\n+  border-radius: 6px;\n+  padding: 8px 16px;\n+  border: 1px solid #7067ED;\n+  font-size: 13px;\n+  font-weight: 600;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover {\n+  background: #EEF1FF;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,\n+.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-left: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel {\n+  flex: 1;\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #898989;\n+  background: #ffffff;\n+  border: 1px solid #f5f5f5;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  white-space: nowrap;\n+  transition: all 0.15s ease;\n+}\n+.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,\n+.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover {\n+  border-color: #EEF1FF;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit .cb-button {\n+  padding: 8px 25px;\n+  border-radius: 5px;\n+  background: #ccc;\n   font-size: 16px;\n+  font-weight: 500;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-update {\n+  background: #1e1e1e;\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-trash {\n+  background: rgb(220, 38, 38);\n+  color: #fff;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings {\n+  background: #1e1e1e;\n+  color: #fff;\n+  border: none;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover {\n+  background: #333;\n+}\n+.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading {\n+  pointer-events: none;\n+  opacity: 0.7;\n+}\n+.cb-section__quiz-edit .cb-settings-footer {\n+  margin-top: 30px;\n+  padding-top: 20px;\n+  border-top: 1px solid #e5e7eb;\n+  display: flex;\n+  justify-content: flex-end;\n+}\n+.cb-section__quiz-edit #general_course_data .form-field,\n+.cb-section__quiz-edit #offline_course_data .form-field,\n+.cb-section__quiz-edit #price_course_data .form-field,\n+.cb-section__quiz-edit #extra_course_data .form-field {\n+  margin-bottom: 24px;\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_featured_review_field {\n+  align-items: flex-start;\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_featured_review_field textarea {\n+  width: calc(100% - 165px);\n+}\n+.cb-section__quiz-edit #general_course_data ._lp_students_field .description {\n+  margin-top: -3px;\n+}\n+.cb-section__quiz-edit #price_course_data .learn-press-tip-floating {\n+  font-size: 13px;\n+  color: #ef4444;\n+  line-height: 1.5;\n+}\n+.cb-section__quiz-edit #price_course_data ._lp_no_required_enroll_field .description {\n+  margin-top: -13px;\n+}\n+.cb-section__quiz-edit #assessment_course_data .form-field._lp_course_result_field {\n+  align-items: start;\n+  border: unset;\n+  margin-bottom: 20px;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box {\n+  list-style-type: none;\n+  margin-top: 0;\n+  padding-right: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 24px;\n+  width: calc(100% - 161px);\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li {\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label {\n+  display: flex;\n+  flex-wrap: wrap;\n+  align-items: center;\n+  gap: 8px 12px;\n+  cursor: pointer;\n+  min-width: unset;\n+  max-width: unset;\n+  width: unset;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio] {\n+  flex-shrink: 0;\n+  margin: 0;\n+  order: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz {\n+  width: calc(100% - 54px);\n+  margin-right: 54px; \u002F* ≈ toggle width (42px) + gap (12px) *\u002F\n+  margin-top: 0;\n+  margin-bottom: 0;\n+  color: #898989;\n+  font-size: 13px;\n   font-weight: 400;\n+  line-height: 1.5;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover {\n+  color: #5b52d1;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz {\n+  text-decoration: underline;\n+  color: #7067ED;\n+}\n+.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover {\n+  color: #5b52d1;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box,\n+.cb-section__quiz-edit .lp_course_faq_meta_box {\n+  display: flex;\n+  flex-wrap: nowrap;\n+  gap: 20px;\n+  padding: 15px 0;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box > label,\n+.cb-section__quiz-edit .lp_course_faq_meta_box > label {\n+  width: 200px;\n+  min-width: 200px;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  padding-top: 10px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__content,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__content {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__fields,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 15px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field {\n+  display: flex;\n+  align-items: center;\n+  background: #ffffff;\n+  border: 1px solid #eaeaec;\n+  border-radius: 8px;\n+  padding: 10px;\n+  gap: 10px;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus {\n+  flex: 1;\n+  border: none;\n+  background: transparent;\n+  padding: 5px 0;\n+  font-size: 14px;\n+  color: #333;\n+  box-shadow: none;\n+  outline: none;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  background: #6b52ff !important;\n+  color: #ffffff !important;\n+  border: none !important;\n+  box-shadow: none !important;\n+  border-radius: 6px;\n+  padding: 6px 16px !important;\n+  font-size: 13px !important;\n+  font-weight: 600 !important;\n+  width: max-content;\n+  transition: background 0.2s;\n+}\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover {\n+  background: #5a42e6 !important;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field {\n+  flex-direction: column;\n+  align-items: stretch;\n+  padding: 15px;\n+  gap: 15px;\n+  position: relative;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 5px;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label span {\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #4b5563;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label input[type=text],\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea {\n+  width: 100%;\n+  border: 1px solid #eaeaec;\n+  border-radius: 6px;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label input[type=text]:focus,\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea:focus {\n+  border-color: #6b52ff;\n+  box-shadow: 0 0 0 1px rgba(107, 82, 255, 0.2);\n+  outline: none;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__field > label textarea {\n+  min-height: 80px;\n+  resize: vertical;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add {\n+  display: block;\n+  text-align: center;\n+  background: #ffffff;\n+  border: 1px dashed #d1d5db;\n+  color: #4b5563;\n+  font-weight: 500;\n+  padding: 2px;\n+  border-radius: 8px;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover,\n+.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover {\n+  border-color: #2271b1;\n+  color: #2271b1;\n+  background: #f0f9ff;\n+}\n+.cb-section__quiz-edit ._lp_block_finished_field {\n+  margin-top: -8px !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .form-field {\n+  align-items: start;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost {\n+  opacity: 0.4;\n+  background: #f0f0f0;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen {\n+  cursor: grabbing !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging {\n+  opacity: 0.5;\n+  background: #e8e8e8;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort {\n+  cursor: grab;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.cb-section__quiz-edit #extra_course_data input[type=text] {\n+  padding: 10px 30px;\n+  margin-bottom: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit #extra_course_data input[type=text]:focus {\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field {\n+  position: relative;\n+  margin-bottom: 10px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort {\n+  display: flex;\n+  position: absolute;\n+  top: 0;\n+  right: 0;\n+  height: 100%;\n+  width: 40px;\n+  color: #666;\n+  text-decoration: none;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+  align-items: center;\n+  justify-content: center;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete {\n+  position: absolute;\n+  top: 12px;\n+  left: 5px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content {\n+  width: 100%;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 12px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field {\n+  position: relative;\n+  display: flex !important;\n+  flex-direction: column;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 12px;\n+  padding: 10px 36px 16px 40px;\n+  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n+  margin-bottom: 0 !important;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete {\n+  opacity: 1;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label {\n+  width: 100% !important;\n+  min-width: 100% !important;\n+  max-width: 100% !important;\n+  display: block !important;\n+  margin-bottom: 8px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span {\n+  display: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question] {\n+  width: 100%;\n+  max-width: 100%;\n+  background: transparent;\n+  border: none;\n+  border-bottom: 1px dashed transparent;\n+  font-size: 15px;\n+  font-weight: 500;\n+  color: #111827;\n+  padding: 6px 0;\n+  border-radius: 0;\n+  outline: none;\n+  transition: border-color 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder {\n+  color: #9ca3af;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"], .cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus {\n+  border-bottom-color: #2271b1;\n+  box-shadow: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer] {\n+  width: 100% !important;\n+  min-height: 120px;\n+  background: #f9fafb;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  padding: 10px;\n+  font-size: 14px;\n+  line-height: 1.5;\n+  color: #1a1a1a;\n+  resize: vertical;\n+  transition: all 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus {\n+  background: #ffffff;\n+  border-color: #d1d5db;\n+  outline: none;\n+  box-shadow: 0 0 0 2px rgba(229, 231, 235, 0.5);\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort {\n+  position: absolute;\n+  right: 8px;\n+  top: 15px;\n+  width: 24px;\n+  height: 24px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  cursor: grab;\n+  opacity: 0.4;\n+  transition: opacity 0.2s;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after {\n+  font-family: \"lp-icon\";\n+  content: \"\\e922\";\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active {\n+  cursor: grabbing;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete {\n+  position: absolute;\n+  top: 15px;\n+  left: 8px;\n+  width: 28px;\n+  height: 28px;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  border-radius: 6px;\n+  color: #9ca3af;\n+  opacity: 0;\n+  transition: all 0.2s;\n+  text-decoration: none;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after {\n+  font-family: Dashicons;\n+  content: \"\\f182\";\n+  font-size: 18px;\n+}\n+.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover {\n+  background-color: #fee2e2;\n+  color: #ef4444;\n+}\n+.cb-section__quiz-edit #author_course_data .ts-control {\n+  border-radius: 6px;\n+  padding: 5px !important;\n+}\n+.cb-section__quiz-edit #author_course_data .ts-control li.item {\n+  padding: 6px 22px;\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 500;\n+  border-radius: 4px;\n+  margin-bottom: 0;\n+}\n+.cb-section__quiz-edit #author_course_data .form-field input[type=text] {\n+  width: unset;\n+  height: unset;\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .cb-featured-image-container {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .cb-featured-image-preview {\n+    width: 100%;\n+    max-width: 300px;\n+  }\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-left: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-right: 3px solid transparent;\n+  margin-right: -3px;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-right-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.cb-section__quiz-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+.cb-section__quiz-edit .lp-meta-box,\n+.cb-section__quiz-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,\n+.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.cb-section__quiz-edit .form-field,\n+.cb-section__quiz-edit .lp-meta-box__duration,\n+.cb-section__quiz-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.cb-section__quiz-edit .form-field > label,\n+.cb-section__quiz-edit .form-field label span,\n+.cb-section__quiz-edit .lp-meta-box__duration > label,\n+.cb-section__quiz-edit .lp-meta-box__duration label span,\n+.cb-section__quiz-edit .lp-meta-box-field > label,\n+.cb-section__quiz-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .form-field input[type=text],\n+.cb-section__quiz-edit .form-field input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.cb-section__quiz-edit .form-field input[type=number]:focus,\n+.cb-section__quiz-edit .form-field input[type=text]:focus,\n+.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=number],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=number],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.cb-section__quiz-edit .form-field select,\n+.cb-section__quiz-edit .lp-meta-box__duration select,\n+.cb-section__quiz-edit .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.cb-section__quiz-edit .form-field select:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration select:focus,\n+.cb-section__quiz-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio],\n+.cb-section__quiz-edit .form-field input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio],\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+.cb-section__quiz-edit .form-field input[type=radio]:focus,\n+.cb-section__quiz-edit .form-field input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,\n+.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.cb-section__quiz-edit .form-field .description,\n+.cb-section__quiz-edit .lp-meta-box__duration .description,\n+.cb-section__quiz-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.cb-section__quiz-edit .form-field .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.cb-section__quiz-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.cb-section__quiz-edit .form-field > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box__duration > .learn-press-tip,\n+.cb-section__quiz-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.cb-section__quiz-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.cb-section__quiz-edit .lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n+.cb-section__quiz-edit ._lp_show_correct_review_field .description {\n+  margin-top: -12px !important;\n+}\n+@media (max-width: 768px) {\n+  .cb-section__quiz-edit .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-left: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 0;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+    flex: 0 0 auto;\n+    margin-bottom: 0;\n+    padding: 0;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+    border-right: none;\n+    border-bottom: 3px solid transparent;\n+    margin-right: 0;\n+    margin-bottom: -1px;\n+    white-space: nowrap;\n+  }\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+  .cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+    border-right-color: transparent;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n+.lp-course-builder-canvas .cb-section__question-edit .question-status {\n+  padding: 5px 12px;\n+  font-size: 12px;\n+  font-weight: 500;\n+  border-radius: 5px;\n+  text-transform: capitalize;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .question-status.publish {\n+  color: #fff;\n+  background: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .question-status.trash {\n+  color: #fff;\n+  background-color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title {\n+  flex: 1;\n+  margin-bottom: 24px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink {\n+  margin-bottom: 20px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 14px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display {\n+  display: flex;\n+  align-items: flex-start;\n+  gap: 8px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url {\n+  display: block;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  color: #7067ED;\n+  text-decoration: none;\n+  word-break: break-all;\n+  flex: 1;\n+  min-width: 0;\n+  padding-top: 2px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover {\n+  text-decoration: underline;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn {\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  width: 28px;\n+  height: 28px;\n+  padding: 0;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 4px;\n+  cursor: pointer;\n+  flex-shrink: 0;\n+  transition: all 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons {\n+  font-size: 14px;\n+  width: 14px;\n+  height: 14px;\n+  color: #64748b;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover {\n+  background: #7067ED;\n+  border-color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons {\n+  color: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor {\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+  padding: 12px;\n+  background: #fff;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix {\n+  font-size: 12px;\n+  color: #94a3b8;\n+  word-break: break-all;\n+  line-height: 1.4;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row {\n+  display: flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input {\n+  flex: 1;\n+  min-width: 0;\n+  padding: 8px 12px;\n+  font-size: 14px;\n+  font-weight: 500;\n+  color: #1a1a1a;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  outline: none;\n+  transition: border-color 0.15s ease, box-shadow 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions {\n+  display: flex;\n+  gap: 6px;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn {\n+  padding: 8px 16px;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #fff;\n+  background: #7067ED;\n+  border: none;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: background 0.15s ease;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover {\n+  background: #4e43e9;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn {\n+  padding: 8px 14px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  color: #64748b;\n+  background: #f8fafc;\n+  border: 1px solid #e2e8f0;\n+  border-radius: 6px;\n+  cursor: pointer;\n+  transition: all 0.15s ease;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__label {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover {\n+  background: #f1f5f9;\n+  color: #475569;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__input {\n+.lp-course-builder-canvas .cb-section__question-edit input.cb-question-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   font-size: 14px;\n@@ -4908,21 +15106,21 @@\n   outline: none;\n   transition: border-color 0.2s;\n }\n-.lp-course-builder-content__section .cb-question-edit-title__input:focus {\n-  border-color: #2271b1;\n-  box-shadow: 0 0 0 1px #2271b1;\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__input:focus {\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 1px #7067ED;\n }\n-.lp-course-builder-content__section .cb-question-edit-desc {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc {\n   margin-bottom: 24px;\n }\n-.lp-course-builder-content__section .cb-question-edit-desc__label {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc__label {\n   display: block;\n   font-size: 14px;\n   font-weight: 600;\n   color: #1a1a1a;\n   margin-bottom: 8px;\n }\n-.lp-course-builder-content__section .cb-button {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button {\n   padding: 8px 25px;\n   border-radius: 5px;\n   background: #ccc;\n@@ -4930,16 +15128,383 @@\n   font-weight: 500;\n   cursor: pointer;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-update__question {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary {\n+  background: #fff;\n+  color: #374151;\n+  border: 1px solid #d1d5db;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover {\n+  background: #f3f4f6;\n+  border-color: #9ca3af;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__question {\n   background: #1e1e1e;\n   color: #fff;\n }\n-.lp-course-builder-content__section .cb-button.cb-btn-trash__question {\n+.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__question {\n   background: rgb(220, 38, 38);\n   color: #fff;\n }\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab {\n+  display: flex;\n+  min-height: 600px;\n+  background: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+  width: 220px;\n+  background: #ffffff;\n+  border-left: 1px solid #e5e7eb;\n+  margin: 0;\n+  padding: 20px 0;\n+  list-style: none;\n+  flex-shrink: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+  margin-bottom: 2px;\n+  padding: 0 12px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  text-decoration: none;\n+  color: #6b7280;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-right: 3px solid transparent;\n+  margin-right: -3px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i {\n+  display: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover {\n+  background-color: #ffffff;\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  font-weight: 600;\n+  border-right-color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content {\n+  flex-grow: 1;\n+  padding: 30px 0;\n+  background: #ffffff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box .lp-meta-box__inner,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field label span,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration label span,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field > label,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio],\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked:before,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:focus,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description:has(+ .learn-press-tip),\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field > .learn-press-tip,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration > .learn-press-tip,\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-course-panels::before {\n+  content: attr(data-tab-title);\n+  display: block;\n+  font-size: 24px;\n+  font-weight: 700;\n+  color: #1e1e1e;\n+  margin-bottom: 25px;\n+  line-height: 1.2;\n+}\n @media (max-width: 768px) {\n-  .lp-course-builder-content__section #lp-course-builder-content {\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab {\n+    flex-direction: column;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs {\n+    width: 100%;\n+    border-left: none;\n+    border-bottom: 1px solid #e5e7eb;\n+    display: flex;\n+    overflow-x: auto;\n+    padding: 0;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li {\n+    flex: 0 0 auto;\n+    margin-bottom: 0;\n+    padding: 0;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a {\n+    border-right: none;\n+    border-bottom: 3px solid transparent;\n+    margin-right: 0;\n+    margin-bottom: -1px;\n+    white-space: nowrap;\n+  }\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,\n+  .lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus {\n+    border-right-color: transparent;\n+    border-bottom-color: #3b82f6;\n+  }\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item {\n+  margin-bottom: 12px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header {\n+  border-radius: 6px 6px 0 0;\n+  border-bottom: 1px solid #f5f5f5;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header {\n+  display: flex;\n+  align-items: center;\n+  padding: 12px 16px;\n+  border-radius: 6px;\n+  border: 1px solid #e5e7eb;\n+  background: #ffffff;\n+  transition: border 0.2s;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index {\n+  font-weight: 600;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  margin-left: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input {\n+  flex-grow: 1;\n+  padding: 10px 14px;\n+  border: 1px solid transparent;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  transition: border 0.2s;\n+  margin-left: 16px;\n+  background: transparent;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner {\n+  margin-left: 12px;\n+  color: #7067ED;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete {\n+  color: #9ca3af;\n+  cursor: pointer;\n+  transition: all 0.2s;\n+  margin-left: 16px;\n+  font-size: 16px;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle {\n+  cursor: pointer;\n+  color: #9ca3af;\n+  transition: color 0.2s;\n+  margin-right: auto;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover {\n+  color: #1e1e1e;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover {\n+  color: #dc2626;\n+}\n+.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail {\n+  font-size: 14px;\n+  padding: 24px;\n+  background: #F7F7F7;\n+  border: 1px solid #e5e7eb;\n+  border-top: none;\n+  border-radius: 0 0 6px 6px;\n+}\n+@media (max-width: 768px) {\n+  .lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content {\n     padding: 16px;\n   }\n }\n@@ -4952,6 +15517,11 @@\n  * @since 4.3.0\n  * @version 1.0.0\n  *\u002F\n+\u002F**\n+ * Shared Tab Styles\n+ * Used across popup, edit-quiz, and edit-course for consistent tab UI\n+ * @since 4.3.0\n+ *\u002F\n #lp-builder-popup-container {\n   display: none;\n   position: fixed;\n@@ -4959,7 +15529,255 @@\n   right: 0;\n   width: 100%;\n   height: 100%;\n-  z-index: 99999;\n+  z-index: 99;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tabs,\n+#lp-builder-popup-container .lp-horizontal-tabs {\n+  display: flex;\n+  list-style: none;\n+  margin: 0 24px;\n+  padding: 0;\n+  border-bottom: 1px solid #f5f5f5;\n+  gap: 10px;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab,\n+#lp-builder-popup-container .lp-horizontal-tab {\n+  padding: 12px 24px;\n+  color: #898989;\n+  text-decoration: none;\n+  font-weight: 500;\n+  font-size: 14px;\n+  border-bottom: 2px solid transparent;\n+  margin-bottom: -1px;\n+  transition: all 0.2s ease;\n+  background: transparent;\n+  border-radius: 10px 10px 0 0;\n+  cursor: pointer;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab:hover,\n+#lp-builder-popup-container .lp-horizontal-tab:hover {\n+  color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab.active,\n+#lp-builder-popup-container .lp-horizontal-tab.active {\n+  color: #7067ED;\n+  border-bottom-color: #7067ED;\n+  background: #EEF1FF;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-content,\n+#lp-builder-popup-container .lp-horizontal-tab-content {\n+  padding: 24px 24px 0;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-pane,\n+#lp-builder-popup-container .lp-horizontal-tab-pane {\n+  display: none;\n+}\n+#lp-builder-popup-container .lp-builder-popup__tab-pane.active,\n+#lp-builder-popup-container .lp-horizontal-tab-pane.active {\n+  display: block;\n+}\n+#lp-builder-popup-container .lp-meta-box,\n+#lp-builder-popup-container .lp-meta-box-wrap {\n+  margin: 0;\n+  background: transparent;\n+}\n+#lp-builder-popup-container .lp-meta-box .lp-meta-box__inner,\n+#lp-builder-popup-container .lp-meta-box-wrap .lp-meta-box__inner {\n+  padding: 0;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 11px;\n+}\n+#lp-builder-popup-container .form-field,\n+#lp-builder-popup-container .lp-meta-box__duration,\n+#lp-builder-popup-container .lp-meta-box-field {\n+  display: flex;\n+  gap: 0 11px;\n+  margin: 0;\n+  padding: 0;\n+  flex-wrap: wrap;\n+}\n+#lp-builder-popup-container .form-field > label,\n+#lp-builder-popup-container .form-field label span,\n+#lp-builder-popup-container .lp-meta-box__duration > label,\n+#lp-builder-popup-container .lp-meta-box__duration label span,\n+#lp-builder-popup-container .lp-meta-box-field > label,\n+#lp-builder-popup-container .lp-meta-box-field label span {\n+  font-size: 14px;\n+  color: #23282d;\n+  margin: 0;\n+  width: 150px;\n+  min-width: 150px;\n+  max-width: 150px;\n+  padding: 0;\n+  font-weight: 600;\n+  flex: 0 0 auto;\n+}\n+#lp-builder-popup-container .form-field input[type=number],\n+#lp-builder-popup-container .form-field input[type=text],\n+#lp-builder-popup-container .form-field input[type=datetime-local],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=text],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local],\n+#lp-builder-popup-container .lp-meta-box-field input[type=number],\n+#lp-builder-popup-container .lp-meta-box-field input[type=text],\n+#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local] {\n+  width: 100%;\n+  max-width: 200px;\n+  height: 33px;\n+  padding: 8px 12px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  background: #fff;\n+}\n+#lp-builder-popup-container .form-field input[type=number]:focus,\n+#lp-builder-popup-container .form-field input[type=text]:focus,\n+#lp-builder-popup-container .form-field input[type=datetime-local]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=text]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=number]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=text]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=number],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=number],\n+#lp-builder-popup-container .lp-meta-box-field input[type=number] {\n+  width: 80px !important;\n+}\n+#lp-builder-popup-container .form-field select,\n+#lp-builder-popup-container .lp-meta-box__duration select,\n+#lp-builder-popup-container .lp-meta-box-field select {\n+  padding: 4px 15px 4px 30px !important;\n+  height: 34px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1a1a1a;\n+  cursor: pointer;\n+}\n+#lp-builder-popup-container .form-field select:focus,\n+#lp-builder-popup-container .lp-meta-box__duration select:focus,\n+#lp-builder-popup-container .lp-meta-box-field select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=radio],\n+#lp-builder-popup-container .form-field input[type=checkbox],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio],\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox],\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio],\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox] {\n+  appearance: none;\n+  -webkit-appearance: none;\n+  width: 44px;\n+  height: 24px;\n+  background: #e5e7eb;\n+  border-radius: 12px;\n+  position: relative;\n+  cursor: pointer;\n+  transition: all 0.3s ease;\n+  margin: 0;\n+  flex-shrink: 0;\n+  border: none;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:before,\n+#lp-builder-popup-container .form-field input[type=checkbox]:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:before {\n+  content: \"\";\n+  position: absolute;\n+  width: 20px;\n+  height: 20px;\n+  border-radius: 50%;\n+  background: #fff;\n+  top: 2px;\n+  right: 2px;\n+  transition: all 0.3s ease;\n+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:checked,\n+#lp-builder-popup-container .form-field input[type=checkbox]:checked,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked {\n+  background: #28A746;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:checked:before,\n+#lp-builder-popup-container .form-field input[type=checkbox]:checked:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked:before,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked:before,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked:before {\n+  right: 22px;\n+}\n+#lp-builder-popup-container .form-field input[type=radio]:focus,\n+#lp-builder-popup-container .form-field input[type=checkbox]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:focus,\n+#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=radio]:focus,\n+#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:focus {\n+  outline: none;\n+  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+}\n+#lp-builder-popup-container .form-field .description,\n+#lp-builder-popup-container .lp-meta-box__duration .description,\n+#lp-builder-popup-container .lp-meta-box-field .description {\n+  font-size: 13px;\n+  color: #6b7280;\n+  line-height: 1.5;\n+  margin: 0;\n+  display: block;\n+  width: 100%;\n+  margin-right: 161px;\n+  margin-top: 6px;\n+  order: 99;\n+}\n+#lp-builder-popup-container .form-field .description:has(+ .learn-press-tip),\n+#lp-builder-popup-container .lp-meta-box__duration .description:has(+ .learn-press-tip),\n+#lp-builder-popup-container .lp-meta-box-field .description:has(+ .learn-press-tip) {\n+  width: auto;\n+}\n+#lp-builder-popup-container .form-field > .learn-press-tip,\n+#lp-builder-popup-container .lp-meta-box__duration > .learn-press-tip,\n+#lp-builder-popup-container .lp-meta-box-field > .learn-press-tip {\n+  order: 100;\n+  margin-top: 6px;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+#lp-builder-popup-container ._lp_external_link_buy_course_field .description {\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n }\n #lp-builder-popup-container.active {\n   display: block;\n@@ -4971,6 +15789,9 @@\n   margin: 0;\n   display: block;\n }\n+#lp-builder-popup-container #lp-material-container hr {\n+  display: none;\n+}\n #lp-builder-popup-container .field-material__label {\n   width: 150px;\n   max-width: 150px;\n@@ -4979,9 +15800,31 @@\n }\n #lp-builder-popup-container .lp-material--field-wrap {\n   display: flex;\n-  align-items: center;\n   gap: 11px;\n-  margin-top: 11px;\n+  margin-top: 12px;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap label {\n+  color: #1e1e1e;\n+  font-size: 14px;\n+  font-weight: 600;\n+  width: 100px;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap:first-child {\n+  margin-top: 0;\n+}\n+#lp-builder-popup-container .lp-material--field-wrap.field-action-wrap {\n+  justify-content: flex-start;\n+  flex-direction: row-reverse;\n+}\n+#lp-builder-popup-container #lp-material--group-container .lp-material--group {\n+  padding: 20px;\n+  border: 1px solid #d1d5db;\n+  border-radius: 12px;\n+  max-width: 420px;\n+  margin-bottom: 20px;\n+}\n+#lp-builder-popup-container #lp-material--group-container .lp-material--group:not(:has(*)) {\n+  display: none;\n }\n #lp-builder-popup-container .lp-material--field-external-link,\n #lp-builder-popup-container .lp-material--field-title {\n@@ -4989,25 +15832,23 @@\n   align-items: center;\n   gap: 8px;\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-builder-popup-container .lp-material--field-method {\n   width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n+  height: 39px;\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n+  background: #ffffff;\n }\n #lp-builder-popup-container .lp-material-save-field,\n #lp-builder-popup-container .lp-material--delete {\n@@ -5023,7 +15864,9 @@\n #lp-builder-popup-container .lp-material--upload-wrap label {\n   cursor: pointer;\n   width: 100%;\n-  max-width: 200px;\n+  display: flex;\n+  align-items: center;\n+  gap: 6px;\n   padding: 8px 16px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n@@ -5032,7 +15875,26 @@\n   color: #1a1a1a;\n   background: #fff;\n   transition: all 0.2s;\n-  margin-right: 56px;\n+  margin-right: 86px;\n+  overflow: hidden;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file {\n+  border-color: #7067ED;\n+  background-color: #f8fbff;\n+  font-size: 0;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::before {\n+  font-size: 14px;\n+}\n+#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::after {\n+  content: attr(data-file-name);\n+  flex: 1;\n+  min-width: 0;\n+  overflow: hidden;\n+  text-overflow: ellipsis;\n+  white-space: nowrap;\n+  font-size: 14px;\n+  font-weight: 600;\n }\n #lp-builder-popup-container .lp-material--field-upload {\n   display: none;\n@@ -5049,6 +15911,48 @@\n   content: \"📁 \";\n   margin-left: 5px;\n }\n+#lp-builder-popup-container #btn-lp--add-material {\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--add-material:hover {\n+  background-color: #F7F7F7;\n+  border-color: #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--save-material,\n+#lp-builder-popup-container .lp-material-save-field {\n+  background: #7067ED;\n+  color: #EEF1FF;\n+  border: 1px solid #7067ED;\n+}\n+#lp-builder-popup-container #btn-lp--save-material:hover,\n+#lp-builder-popup-container .lp-material-save-field:hover {\n+  background-color: #5b52d1;\n+  border-color: #5b52d1;\n+}\n+#lp-builder-popup-container .lp-material--delete {\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n+}\n+#lp-builder-popup-container .lp-material--delete:hover {\n+  background-color: #F7F7F7;\n+  color: #1e1e1e;\n+  border-color: #1e1e1e;\n+}\n+#lp-builder-popup-container .cb-item-edit-content {\n+  gap: 0;\n+  flex-direction: column;\n+}\n+#lp-builder-popup-container .cb-item-edit-content .cb-item-edit-column {\n+  width: 100%;\n+}\n+#lp-builder-popup-container .cb-item-edit-publish {\n+  display: none;\n+}\n+#lp-builder-popup-container .cb-section__quiz-edit .cb-item-edit-column--left {\n+  flex: 0;\n+  max-width: unset;\n+}\n \n body.lp-popup-open {\n   overflow: hidden;\n@@ -5069,7 +15973,7 @@\n   inset: 5vh 5% 5vh 5%;\n   width: auto;\n   max-width: 900px;\n-  max-height: none;\n+  max-height: 750px;\n   height: auto;\n   margin: auto;\n   background-color: #fff;\n@@ -5084,6 +15988,7 @@\n .lp-builder-popup--fullscreen {\n   inset: 0;\n   max-width: 100%;\n+  max-height: 100%;\n   border-radius: 0;\n }\n .lp-builder-popup--loading {\n@@ -5115,8 +16020,6 @@\n   align-items: center;\n   justify-content: space-between;\n   padding: 16px 24px;\n-  border-bottom: 1px solid #e5e7eb;\n-  background-color: #fff;\n   flex-shrink: 0;\n }\n .lp-builder-popup__header-left {\n@@ -5177,41 +16080,6 @@\n   padding: 0;\n   background-color: #fff;\n }\n-.lp-builder-popup__tabs {\n-  display: flex;\n-  list-style: none;\n-  margin: 0;\n-  padding: 0 24px;\n-  border-bottom: 1px solid #e5e7eb;\n-  background-color: #fff;\n-  gap: 8px;\n-}\n-.lp-builder-popup__tab {\n-  padding: 14px 20px;\n-  cursor: pointer;\n-  font-size: 14px;\n-  font-weight: 600;\n-  color: #6b7280;\n-  border-bottom: 2px solid transparent;\n-  transition: all 0.2s;\n-  margin-bottom: -1px;\n-}\n-.lp-builder-popup__tab:hover {\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup__tab.active {\n-  color: #1e1e1e;\n-  border-bottom-color: #1e1e1e;\n-}\n-.lp-builder-popup__tab-content {\n-  padding: 24px;\n-}\n-.lp-builder-popup__tab-pane {\n-  display: none;\n-}\n-.lp-builder-popup__tab-pane.active {\n-  display: block;\n-}\n .lp-builder-popup__notice {\n   padding: 15px;\n   background-color: #f0f6fc;\n@@ -5226,8 +16094,6 @@\n   justify-content: space-between;\n   gap: 12px;\n   padding: 16px 24px;\n-  border-top: 1px solid #e5e7eb;\n-  background-color: #fff;\n   flex-shrink: 0;\n }\n .lp-builder-popup__footer-left {\n@@ -5241,8 +16107,8 @@\n   gap: 12px;\n }\n .lp-builder-popup__btn {\n-  padding: 8px 25px;\n-  border-radius: 5px;\n+  padding: 10px 25px;\n+  border-radius: 12px;\n   font-size: 16px;\n   font-weight: 500;\n   cursor: pointer;\n@@ -5250,295 +16116,95 @@\n   border: none;\n }\n .lp-builder-popup__btn--cancel {\n-  background-color: #f3f4f6;\n-  color: #1a1a1a;\n-  border: 1px solid #d1d5db;\n+  background-color: #ffffff;\n+  color: #7067ED;\n+  border: 1px solid #7067ED;\n }\n .lp-builder-popup__btn--cancel:hover {\n-  background-color: #e5e7eb;\n+  background-color: #EEF1FF;\n }\n .lp-builder-popup__btn--save {\n-  background-color: #1e1e1e;\n-  color: #fff;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n .lp-builder-popup__btn--save:hover {\n-  background-color: #333;\n+  background-color: #5b52d1;\n }\n .lp-builder-popup__btn--save:disabled {\n   opacity: 0.6;\n   cursor: not-allowed;\n }\n .lp-builder-popup__btn--trash {\n-  background-color: rgb(220, 38, 38);\n-  color: #fff;\n+  background-color: #ffffff;\n+  color: #6b7280;\n+  border: 1px solid #e5e7eb;\n }\n .lp-builder-popup__btn--trash:hover {\n-  background-color: rgb(185, 28, 28);\n-}\n-.lp-builder-popup .cb-button {\n-  padding: 8px 25px;\n-  border-radius: 5px;\n-  background: #f3f4f6;\n-  font-size: 16px;\n-  font-weight: 500;\n-  cursor: pointer;\n-  border: 1px solid #d1d5db;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .cb-button:hover {\n-  background: #e5e7eb;\n-}\n-.lp-builder-popup .cb-button.cb-btn-update__lesson, .lp-builder-popup .cb-button.cb-btn-update__question, .lp-builder-popup .cb-button.cb-btn-update__quiz {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-}\n-.lp-builder-popup .cb-button.cb-btn-update__lesson:hover, .lp-builder-popup .cb-button.cb-btn-update__question:hover, .lp-builder-popup .cb-button.cb-btn-update__quiz:hover {\n-  background: #333;\n-}\n-.lp-builder-popup .cb-button.cb-btn-trash__lesson, .lp-builder-popup .cb-button.cb-btn-trash__question, .lp-builder-popup .cb-button.cb-btn-trash__quiz {\n-  background: rgb(220, 38, 38);\n-  color: #fff;\n-  border: none;\n-}\n-.lp-builder-popup .cb-button.cb-btn-trash__lesson:hover, .lp-builder-popup .cb-button.cb-btn-trash__question:hover, .lp-builder-popup .cb-button.cb-btn-trash__quiz:hover {\n-  background: rgb(185, 28, 28);\n+  color: #dc2626;\n+  background-color: #fee2e2;\n+  border-color: #fee2e2;\n }\n-.lp-builder-popup .cb-button.cb-btn-publish__lesson, .lp-builder-popup .cb-button.cb-btn-publish__question, .lp-builder-popup .cb-button.cb-btn-publish__quiz {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n+.lp-builder-popup__btn--draft {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+  border: 1px solid transparent;\n }\n-.lp-builder-popup .cb-button.cb-btn-publish__lesson:hover, .lp-builder-popup .cb-button.cb-btn-publish__question:hover, .lp-builder-popup .cb-button.cb-btn-publish__quiz:hover {\n-  background: #333;\n+.lp-builder-popup__btn--draft:hover {\n+  background-color: #d5dcff;\n+  border-color: transparent;\n }\n .lp-builder-popup .lesson-status,\n .lp-builder-popup .question-status,\n-.lp-builder-popup .quiz-status {\n-  padding: 5px 12px;\n+.lp-builder-popup .quiz-status,\n+.lp-builder-popup .quizzes-status {\n+  display: inline-flex;\n+  align-self: center;\n+  padding: 4px 12px;\n   font-size: 12px;\n   font-weight: 500;\n-  background: #f3f4f6;\n-  border-radius: 5px;\n+  border-radius: 20px;\n   text-transform: capitalize;\n+  white-space: nowrap;\n+  width: fit-content;\n }\n .lp-builder-popup .lesson-status.publish,\n .lp-builder-popup .question-status.publish,\n-.lp-builder-popup .quiz-status.publish {\n-  color: #fff;\n-  background: #1e1e1e;\n+.lp-builder-popup .quiz-status.publish,\n+.lp-builder-popup .quizzes-status.publish {\n+  color: #28A746;\n+  background: #E7F6E9;\n }\n .lp-builder-popup .lesson-status.draft,\n .lp-builder-popup .question-status.draft,\n-.lp-builder-popup .quiz-status.draft {\n-  color: #1a1a1a;\n-  background: #fbbf24;\n+.lp-builder-popup .quiz-status.draft,\n+.lp-builder-popup .quizzes-status.draft {\n+  color: #AAAAAA;\n+  background: #F7F7F7;\n+}\n+.lp-builder-popup .lesson-status.pending,\n+.lp-builder-popup .question-status.pending,\n+.lp-builder-popup .quiz-status.pending,\n+.lp-builder-popup .quizzes-status.pending {\n+  color: #1e40af;\n+  background: #dbeafe;\n+}\n+.lp-builder-popup .lesson-status.private,\n+.lp-builder-popup .question-status.private,\n+.lp-builder-popup .quiz-status.private,\n+.lp-builder-popup .quizzes-status.private {\n+  color: #6b21a8;\n+  background: #f3e8ff;\n }\n .lp-builder-popup .lesson-status.trash,\n .lp-builder-popup .question-status.trash,\n-.lp-builder-popup .quiz-status.trash {\n-  color: #fff;\n-  background-color: #dc2626;\n+.lp-builder-popup .quiz-status.trash,\n+.lp-builder-popup .quizzes-status.trash {\n+  color: #991b1b;\n+  background: #fee2e2;\n }\n .lp-builder-popup .cb-section__header {\n   display: none;\n }\n-.lp-builder-popup .lp-meta-box,\n-.lp-builder-popup .lp-meta-box-wrap {\n-  margin: 0;\n-  background: transparent;\n-}\n-.lp-builder-popup .lp-meta-box .lp-meta-box__inner,\n-.lp-builder-popup .lp-meta-box-wrap .lp-meta-box__inner {\n-  padding: 0;\n-  display: flex;\n-  flex-direction: column;\n-  gap: 24px;\n-}\n-.lp-builder-popup .form-field,\n-.lp-builder-popup .lp-meta-box__duration,\n-.lp-builder-popup .lp-meta-box-field {\n-  display: flex;\n-  align-items: center;\n-  gap: 11px;\n-  margin: 0;\n-  padding: 0;\n-}\n-.lp-builder-popup .form-field > label,\n-.lp-builder-popup .form-field label span,\n-.lp-builder-popup .lp-meta-box__duration > label,\n-.lp-builder-popup .lp-meta-box__duration label span,\n-.lp-builder-popup .lp-meta-box-field > label,\n-.lp-builder-popup .lp-meta-box-field label span {\n-  font-size: 14px;\n-  color: #23282d;\n-  margin: 0;\n-  width: 150px;\n-  min-width: 150px;\n-  max-width: 150px;\n-  padding: 0;\n-  font-weight: 600;\n-  flex: 0 0 auto;\n-}\n-.lp-builder-popup .form-field input[type=number],\n-.lp-builder-popup .form-field input[type=text],\n-.lp-builder-popup .form-field input[type=datetime-local],\n-.lp-builder-popup .lp-meta-box__duration input[type=number],\n-.lp-builder-popup .lp-meta-box__duration input[type=text],\n-.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],\n-.lp-builder-popup .lp-meta-box-field input[type=number],\n-.lp-builder-popup .lp-meta-box-field input[type=text],\n-.lp-builder-popup .lp-meta-box-field input[type=datetime-local] {\n-  width: 100%;\n-  max-width: 200px;\n-  height: 33px;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-}\n-.lp-builder-popup .form-field input[type=number]:focus,\n-.lp-builder-popup .form-field input[type=text]:focus,\n-.lp-builder-popup .form-field input[type=datetime-local]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=number]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=text]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=datetime-local]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=number]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=text]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=datetime-local]:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field textarea,\n-.lp-builder-popup .lp-meta-box__duration textarea,\n-.lp-builder-popup .lp-meta-box-field textarea {\n-  order: 3;\n-  width: 100%;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-  min-height: 80px;\n-  resize: vertical;\n-}\n-.lp-builder-popup .form-field textarea:focus,\n-.lp-builder-popup .lp-meta-box__duration textarea:focus,\n-.lp-builder-popup .lp-meta-box-field textarea:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field select,\n-.lp-builder-popup .lp-meta-box__duration select,\n-.lp-builder-popup .lp-meta-box-field select {\n-  padding: 4px 12px;\n-  height: 34px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  color: #1a1a1a;\n-  background: #fff;\n-  cursor: pointer;\n-}\n-.lp-builder-popup .form-field select:focus,\n-.lp-builder-popup .lp-meta-box__duration select:focus,\n-.lp-builder-popup .lp-meta-box-field select:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field input[type=checkbox],\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox],\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 44px;\n-  height: 24px;\n-  background: #e5e7eb;\n-  border-radius: 12px;\n-  position: relative;\n-  cursor: pointer;\n-  transition: all 0.3s ease;\n-  margin: 0;\n-  flex-shrink: 0;\n-  border: none;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:before,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:before,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:before {\n-  content: \"\";\n-  position: absolute;\n-  width: 20px;\n-  height: 20px;\n-  border-radius: 50%;\n-  background: #fff;\n-  top: 2px;\n-  right: 2px;\n-  transition: all 0.3s ease;\n-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:checked,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked {\n-  background: #3b82f6;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:checked:before,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked:before,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked:before {\n-  right: 22px;\n-}\n-.lp-builder-popup .form-field input[type=checkbox]:focus,\n-.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:focus,\n-.lp-builder-popup .lp-meta-box-field input[type=checkbox]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .form-field .description,\n-.lp-builder-popup .lp-meta-box__duration .description,\n-.lp-builder-popup .lp-meta-box-field .description {\n-  font-size: 13px;\n-  color: #6b7280;\n-  line-height: 1.5;\n-  margin: 0;\n-  display: block;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]),\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) {\n-  flex-direction: row;\n-  align-items: center;\n-  gap: 11px;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]) input[type=checkbox],\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) input[type=checkbox],\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) input[type=checkbox] {\n-  order: 1;\n-  margin-top: 2px;\n-}\n-.lp-builder-popup .form-field:has(input[type=checkbox]) .description,\n-.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) .description,\n-.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) .description {\n-  order: 3;\n-}\n-.lp-builder-popup .form-field._lp_hint_field,\n-.lp-builder-popup .form-field._lp_explanation_field,\n-.lp-builder-popup ._lp_duration_field,\n-.lp-builder-popup ._lp_course_repurchase_option_field {\n-  flex-wrap: wrap;\n-}\n-.lp-builder-popup .form-field._lp_hint_field .description,\n-.lp-builder-popup .form-field._lp_explanation_field .description,\n-.lp-builder-popup ._lp_duration_field .description,\n-.lp-builder-popup ._lp_course_repurchase_option_field .description {\n-  width: 100%;\n-  margin-right: 161px;\n-  margin-top: 6px;\n-}\n .lp-builder-popup .lp-meta-box__duration > :not(label):not(.description) {\n   display: inline-flex;\n   align-items: center;\n@@ -5581,107 +16247,83 @@\n   accent-color: #1e1e1e;\n }\n .lp-builder-popup .wp-editor-wrap {\n-  border: 1px solid #d1d5db;\n-  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n   overflow: hidden;\n-  background-color: #fff;\n }\n .lp-builder-popup .wp-editor-wrap .wp-editor-tools {\n-  background-color: #f5f5f5;\n-  margin: 8px 8px 0;\n-  border-radius: 12px 12px 0 0;\n-}\n-.lp-builder-popup .wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+  display: flex;\n+  flex-wrap: wrap;\n }\n-.lp-builder-popup .wp-editor-wrap button.insert-media,\n-.lp-builder-popup .wp-editor-wrap input.button {\n-  color: #1e1e1e;\n-  border-color: #d1d5db;\n-  display: inline-block;\n-  text-decoration: none;\n-  font-size: 13px;\n-  line-height: 2.15384615;\n-  min-height: 30px;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons {\n   margin: 0;\n-  padding: 0 10px;\n-  cursor: pointer;\n-  border-width: 1px;\n-  border-style: solid;\n-  border-radius: 4px;\n-  white-space: nowrap;\n-  box-sizing: border-box;\n-  background: #fff;\n }\n-.lp-builder-popup .wp-editor-wrap button.insert-media:hover,\n-.lp-builder-popup .wp-editor-wrap input.button:hover {\n-  background: #f5f5f5;\n-  border-color: #9ca3af;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-tinymce {\n-  border: none !important;\n-  visibility: visible !important;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-top-part::before {\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media {\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n+  background: #ffffff;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  padding: 6px 12px;\n+  border-radius: 6px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  text-decoration: none;\n+  transition: all 0.2s;\n   box-shadow: none;\n }\n-.lp-builder-popup .wp-editor-wrap div.mce-statusbar {\n-  border-top: none;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media .wp-media-buttons-icon::before {\n+  color: #7067ED;\n }\n-.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button {\n-  margin: 8px 0 8px 8px;\n-  border-bottom-color: #dcdcde;\n-  border-radius: 4px;\n-  background: #f5f5f5;\n-  border: 1px solid #d1d5db;\n-  padding: 4px 12px;\n-  font-size: 13px;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media:hover {\n+  background: #EEF1FF;\n }\n-.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n-  background: #fff;\n-  color: #1e1e1e;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-tabs:not(:has(.wp-switch-editor[aria-pressed=true])) .wp-switch-editor:first-child {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  font-weight: 600;\n }\n-.lp-builder-popup .wp-editor-wrap .mce-top-part,\n-.lp-builder-popup .wp-editor-wrap .quicktags-toolbar {\n-  background-color: #f5f5f5;\n-  margin: 0 8px 0;\n-  padding: 0;\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container {\n+  flex: 0 0 calc(100% + 24px);\n+  width: 100%;\n+  margin-top: 10px;\n+  border-top: 1px solid #e5e7eb;\n   border-radius: 0 0 8px 8px;\n+  margin-right: -12px;\n+  margin-left: -12px;\n+  margin-bottom: -10px;\n+  padding: 0;\n }\n-.lp-builder-popup .wp-editor-wrap .mce-top-part::before {\n-  box-shadow: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .quicktags-toolbar {\n-  padding: 6px;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp {\n-  background: none;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp > div {\n-  padding: 0 8px 8px !important;\n-}\n-.lp-builder-popup .wp-editor-wrap .wp-editor-container {\n+.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container textarea.wp-editor-area {\n   border: none;\n+  border-radius: 0 0 8px 8px;\n+  padding: 12px;\n+  width: 100%;\n+  box-sizing: border-box;\n }\n-.lp-builder-popup .wp-editor-wrap textarea.wp-editor-area {\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container {\n   border: none;\n-  border-top: 0;\n-  border-radius: 0;\n-  padding: 12px;\n+  border-radius: 0 0 8px 8px;\n }\n-.lp-builder-popup .wp-editor-container {\n-  border: none !important;\n-  background: #fff;\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-toolbar-grp {\n+  background: #f9fafb;\n+  border-bottom: 1px solid #e5e7eb;\n+  padding: 4px;\n }\n-.lp-builder-popup .mce-top-part {\n-  margin: 0 !important;\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-top-part::before {\n+  box-shadow: none;\n }\n-.lp-builder-popup .quicktags-toolbar {\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container .mce-panel {\n+  border: none !important;\n+}\n+.lp-builder-popup .wp-editor-wrap > .wp-editor-container textarea.wp-editor-area {\n+  border: none;\n   border-radius: 0 0 8px 8px;\n-  margin: 0 !important;\n-  padding: 8px !important;\n+  padding: 16px;\n+  width: 100%;\n+  box-sizing: border-box;\n+  min-height: 200px;\n }\n .lp-builder-popup .lp-material--table {\n   width: 100%;\n@@ -5752,21 +16394,22 @@\n   font-size: 14px;\n   color: #1e1e1e;\n }\n-.lp-builder-popup .cb-lesson-edit-title__input,\n-.lp-builder-popup .cb-quiz-edit-title__input,\n-.lp-builder-popup .cb-question-edit-title__input {\n+.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input,\n+.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input,\n+.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input {\n   width: 100%;\n   padding: 10px 12px;\n   border: 1px solid #d1d5db;\n-  border-radius: 6px;\n+  border-radius: 8px;\n   font-size: 14px;\n   transition: all 0.2s;\n+  box-shadow: none;\n }\n-.lp-builder-popup .cb-lesson-edit-title__input:focus,\n-.lp-builder-popup .cb-quiz-edit-title__input:focus,\n-.lp-builder-popup .cb-question-edit-title__input:focus {\n+.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input:focus,\n+.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input:focus,\n+.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ED;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .lp-builder-popup .cb-lesson-edit-desc,\n@@ -5804,134 +16447,120 @@\n   font-weight: 700;\n   color: #1e1e1e;\n   margin-bottom: 20px;\n-  padding-bottom: 15px;\n-  border-bottom: 1px solid #e5e7eb;\n   line-height: 1.2;\n }\n-.lp-builder-popup .cb-section__question-title-assigned {\n+.lp-builder-popup .cb-section__question-title-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned {\n   display: flex;\n-  align-items: flex-start;\n-  gap: 20px;\n+  flex-direction: column-reverse;\n+  gap: 16px;\n   margin-bottom: 24px;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title {\n+.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title,\n+.lp-builder-popup .cb-section__question-title-assigned .cb-lesson-edit-title,\n+.lp-builder-popup .cb-section__question-title-assigned .cb-quiz-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-question-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-lesson-edit-title,\n+.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title {\n   margin-bottom: 0;\n+  width: 100%;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses {\n   flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n+  padding: 0;\n+  background-color: transparent;\n+  border-radius: 0;\n   font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n+  margin-top: 0;\n+  border: none;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .label,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .label,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label {\n   color: #6b7280;\n   margin-left: 5px;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a {\n-  color: #3b82f6;\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a {\n+  color: #2E91FA;\n   text-decoration: none;\n   font-weight: 500;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a:hover,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover {\n   text-decoration: underline;\n }\n-.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned {\n+.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned,\n+.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .question-not-assigned,\n+.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned {\n   color: #9ca3af;\n   font-style: italic;\n }\n-.lp-builder-popup .cb-section__lesson-title-assigned {\n-  display: flex;\n-  gap: 40px;\n-  margin-bottom: 24px;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .cb-lesson-edit-title {\n-  margin-bottom: 0;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses {\n-  flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n-  font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .label {\n-  color: #6b7280;\n-  margin-left: 5px;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a {\n-  color: #3b82f6;\n-  text-decoration: none;\n+.lp-builder-popup .lp-message {\n+  color: #7067ED;\n+  background-color: #EEF1FF;\n   font-weight: 500;\n+  padding: 8px 20px;\n+  border-radius: 8px;\n }\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a:hover {\n-  text-decoration: underline;\n-}\n-.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .question-not-assigned {\n-  color: #9ca3af;\n-  font-style: italic;\n-}\n-.lp-builder-popup .cb-section__quiz-title-assigned {\n-  display: flex;\n-  gap: 40px;\n-  margin-bottom: 24px;\n-}\n-.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title {\n-  margin-bottom: 0;\n+.lp-builder-popup .cb-item-edit-permalink__label {\n+  display: block;\n+  font-size: 13px;\n+  font-weight: 600;\n+  color: #1a1a1a;\n+  margin-bottom: 8px;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses {\n-  flex-shrink: 0;\n-  padding: 10px 14px;\n-  background-color: #f3f4f6;\n-  border-radius: 6px;\n+.lp-builder-popup .cb-item-edit-assigned {\n   font-size: 13px;\n-  margin-top: auto;\n-  border: 1px solid #e5e7eb;\n+  color: #6b7280;\n+  margin-bottom: 20px;\n+  line-height: 1.6;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label {\n+.lp-builder-popup .cb-item-edit-assigned .label {\n   color: #6b7280;\n-  margin-left: 5px;\n+  font-weight: 400;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a {\n-  color: #3b82f6;\n+.lp-builder-popup .cb-item-edit-assigned a {\n+  color: #2E91FA;\n   text-decoration: none;\n   font-weight: 500;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover {\n+.lp-builder-popup .cb-item-edit-assigned a:hover {\n   text-decoration: underline;\n }\n-.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned {\n-  color: #9ca3af;\n-  font-style: italic;\n-}\n \n .lp-builder-popup .lp-edit-quiz-wrap .heading {\n   display: flex;\n   align-items: center;\n-  justify-content: space-between;\n-  padding: 14px 20px;\n-  background-color: #f9fafb;\n-  border-bottom: 1px solid #e5e7eb;\n-  margin: -24px -24px 24px;\n-  border-radius: 0;\n+  margin-bottom: 8px;\n+  gap: 8px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading h4 {\n-  margin: 0;\n-  font-size: 15px;\n-  font-weight: 600;\n-  color: #1e1e1e;\n-  width: 80%;\n+  color: #898989;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading .total-items {\n+  margin-right: auto;\n   font-size: 13px;\n-  color: #6b7280;\n-  background: #e5e7eb;\n-  padding: 4px 12px;\n-  border-radius: 12px;\n+  color: #898989;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all {\n   cursor: pointer;\n@@ -5941,7 +16570,7 @@\n .lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover {\n   color: #1e1e1e;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-angle-down {\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down {\n   display: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down {\n@@ -5968,14 +16597,9 @@\n .lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural {\n   display: inline-block;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner {\n-  animation: rotation 2s infinite linear;\n-  font-size: 1.25rem;\n-  display: none;\n-}\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item {\n   border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n+  border-radius: 12px;\n   margin-bottom: 12px;\n   background: #fff;\n   transition: all 0.2s;\n@@ -5994,7 +16618,7 @@\n   transition: all 0.2s;\n   display: none;\n }\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-icon-angle-down {\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down {\n   display: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down {\n@@ -6033,7 +16657,7 @@\n   padding: 14px 16px;\n   background-color: #fff;\n   border-bottom: 1px solid transparent;\n-  border-radius: 8px;\n+  border-radius: 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title {\n   display: none;\n@@ -6051,20 +16675,16 @@\n   font-size: 14px;\n   background: transparent;\n   transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:hover, .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:focus {\n-  background: #fff;\n-  border-color: #d1d5db;\n-  outline: none;\n+  font-weight: 600;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label {\n   font-size: 11px;\n-  background-color: #1e1e1e;\n-  color: #fff;\n+  background-color: #EEF1FF !important;\n+  color: #7067ED;\n   padding: 4px 10px;\n-  border-radius: 4px;\n+  border-radius: 20px;\n   white-space: nowrap;\n-  font-weight: 500;\n+  font-weight: 600;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question {\n@@ -6094,15 +16714,19 @@\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button {\n   display: none;\n }\n+.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus) {\n+  border: 1px solid #7067ED;\n+}\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head {\n-  border-bottom-color: #e5e7eb;\n-  border-radius: 8px 8px 0 0;\n+  border-bottom-color: #f5f5f5;\n+  border-radius: 12px 12px 0 0;\n+  background: #EEF1FF;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main {\n   display: none;\n-  padding: 16px;\n-  background: #f9fafb;\n-  border-radius: 0 0 8px 8px;\n+  padding: 24px;\n+  background: #ffffff;\n+  border-radius: 0 0 12px 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main {\n   display: block;\n@@ -6118,13 +16742,13 @@\n   align-items: center;\n   gap: 12px;\n   padding: 16px;\n-  background-color: #fff;\n-  border: 1px dashed #d1d5db;\n-  border-radius: 8px;\n-  margin-top: 16px;\n+  background-color: #ffffff;\n+  border: 1px dashed #e5e7eb;\n+  border-radius: 12px;\n+  margin-top: 12px;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus {\n-  color: #3b82f6;\n+  color: #7067ED;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input {\n   flex: 1;\n@@ -6135,11 +16759,10 @@\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus {\n   outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n+  border-color: #7067ED;\n+  box-shadow: none;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new {\n-  padding: 10px 14px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n   min-width: 150px;\n@@ -6147,528 +16770,26 @@\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ED;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button {\n   padding: 10px 20px;\n-  background: #1e1e1e;\n-  color: #fff;\n-  border: none;\n-  border-radius: 6px;\n+  border: 1px solid #7067ED;\n+  color: #7067ED;\n+  border-radius: 8px;\n   font-weight: 500;\n   cursor: pointer;\n }\n .lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover {\n-  background: #333;\n-}\n-\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-edit-left,\n-.lp-builder-popup .lp-question-edit-main .lp-question-edit-left {\n-  width: 100%;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit {\n-  margin-bottom: 24px;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header {\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  padding: 14px 16px;\n-  background-color: #f9fafb;\n-  border-bottom: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  margin: 0;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header .lp-question-type-label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header .lp-question-type-label {\n-  font-size: 12px;\n-  background-color: #1e1e1e;\n-  color: #fff;\n-  padding: 4px 12px;\n-  border-radius: 4px;\n-  font-weight: 500;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-answers-config,\n-.lp-builder-popup .lp-question-edit-main .lp-answers-config {\n-  padding: 16px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-choice-header,\n-.lp-builder-popup .lp-question-edit-main .lp-question-choice-header {\n-  display: flex;\n-  justify-content: space-between;\n-  padding: 10px 0;\n-  border-bottom: 1px solid #e5e7eb;\n-  margin-bottom: 12px;\n-  font-weight: 600;\n-  font-size: 13px;\n-  color: #6b7280;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item {\n-  display: flex;\n-  align-items: center;\n-  gap: 12px;\n-  padding: 10px 0;\n-  border-bottom: 1px solid #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item:last-of-type:not(.clone),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item:last-of-type:not(.clone) {\n-  border-bottom: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag {\n-  cursor: move;\n-  color: #9ca3af;\n-  font-size: 16px;\n-  padding: 4px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag:hover {\n-  color: #6b7280;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-spinner,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-spinner {\n-  animation: rotation 2s infinite linear;\n-  font-size: 1.25rem;\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text],\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input {\n-  flex: 1;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:focus,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:hover:not(:focus),\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:hover:not(:focus),\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus) {\n-  border-color: #9ca3af;\n+  background: #7067ED;\n+  color: #EEF1FF;\n }\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  padding: 8px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-  display: flex;\n-  align-items: center;\n-  justify-content: center;\n-  background: transparent;\n+.lp-builder-popup .lp-edit-quiz-wrap .mce-menubar {\n   border: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer:hover {\n-  color: #dc2626;\n-  background: #fee2e2;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 20px;\n-  height: 20px;\n-  border: 2px solid #d1d5db;\n-  border-radius: 50%;\n-  cursor: pointer;\n-  position: relative;\n-  transition: all 0.2s;\n-  flex-shrink: 0;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:hover {\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked {\n-  border-color: #3b82f6;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked::after,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked::after {\n-  content: \"\";\n-  position: absolute;\n-  top: 50%;\n-  right: 50%;\n-  transform: translate(50%, -50%);\n-  width: 10px;\n-  height: 10px;\n-  background: #3b82f6;\n-  border-radius: 50%;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox] {\n-  appearance: none;\n-  -webkit-appearance: none;\n-  width: 20px;\n-  height: 20px;\n-  border: 2px solid #d1d5db;\n-  border-radius: 4px;\n-  cursor: pointer;\n-  position: relative;\n-  transition: all 0.2s;\n-  flex-shrink: 0;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:hover {\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked {\n-  background: #3b82f6;\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked::after,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked::after {\n-  content: \"\";\n-  position: absolute;\n-  right: 6px;\n-  top: 2px;\n-  width: 5px;\n-  height: 10px;\n-  border: solid white;\n-  border-width: 0 0 2px 2px;\n-  transform: rotate(-45deg);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:focus {\n-  outline: none;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.clone,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.clone {\n-  display: none !important;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.loading {\n-  opacity: 0.6;\n-  pointer-events: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new {\n-  display: flex;\n-  align-items: center;\n-  gap: 12px;\n-  padding: 16px 0 0;\n-  margin-top: 12px;\n-  border-top: 1px solid #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-icon-plus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-icon-plus {\n-  color: #3b82f6;\n-  font-size: 16px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text],\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text],\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input {\n-  flex: 1;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]:focus,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]::placeholder,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]::placeholder,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder {\n-  color: #9ca3af;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer {\n-  padding: 10px 16px;\n-  background: #f3f4f6;\n-  color: #6b7280;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-weight: 500;\n-  font-size: 14px;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover {\n-  background: #e5e7eb;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active {\n-  background: #1e1e1e;\n-  color: #fff;\n-  border-color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover {\n-  background: #333;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details {\n-  margin-top: 24px;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-section-collapse,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-section-collapse {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-up,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-up {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-down,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-down {\n-  display: block;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle {\n-  padding: 14px 16px;\n-  background-color: #f9fafb;\n-  cursor: pointer;\n-  display: flex;\n-  align-items: center;\n-  justify-content: space-between;\n-  transition: background 0.2s;\n-  border-bottom: 1px solid transparent;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header:hover,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle:hover,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header:hover,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle:hover {\n-  background-color: #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle label,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header label,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  margin: 0;\n-  cursor: pointer;\n-  color: #1e1e1e;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle {\n-  color: #6b7280;\n-  transition: transform 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header, .lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-trigger-toggle {\n-  border-bottom-color: #e5e7eb;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-icon-angle-down,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-icon-angle-down {\n-  display: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-section-collapse,\n-.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-section-collapse {\n-  padding: 20px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings {\n-  margin-bottom: 24px;\n-  padding-bottom: 24px;\n-  border-bottom: 1px solid #f3f4f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings:last-child,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings:last-child {\n-  margin-bottom: 0;\n-  padding-bottom: 0;\n-  border-bottom: none;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label {\n-  margin-bottom: 10px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label label,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label label {\n-  font-weight: 600;\n-  font-size: 14px;\n-  color: #1e1e1e;\n-  display: block;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number],\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number] {\n-  width: 120px;\n-  padding: 10px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-  background: #fff;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number]:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-  box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings___desc,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings___desc {\n-  margin-top: 8px;\n-  font-size: 13px;\n-  color: #6b7280;\n-  line-height: 1.5;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings .wp-editor-wrap,\n-.lp-builder-popup .lp-question-edit-main .lp-question-field-settings .wp-editor-wrap {\n-  margin-top: 0;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-options,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-options {\n-  margin-top: 16px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item {\n-  display: flex;\n-  align-items: flex-start;\n-  gap: 12px;\n-  padding: 12px;\n-  background: #f9fafb;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-  margin-bottom: 12px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item.clone,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item.clone {\n-  display: none !important;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-index,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-index {\n-  font-weight: 600;\n-  color: #6b7280;\n-  min-width: 24px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input {\n-  flex: 1;\n-  padding: 8px 12px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  font-size: 14px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus {\n-  outline: none;\n-  border-color: #3b82f6;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete {\n-  cursor: pointer;\n-  color: #9ca3af;\n-  padding: 8px;\n-  border-radius: 6px;\n-  transition: all 0.2s;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover {\n-  color: #dc2626;\n-  background: #fee2e2;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-option-detail,\n-.lp-builder-popup .lp-question-edit-main .lp-question-fib-option-detail {\n-  margin-top: 12px;\n-  padding: 12px;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 6px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content {\n-  padding: 8px 14px;\n-  border: 1px solid #d1d5db;\n-  border-radius: 6px;\n-  background: #fff;\n-  font-size: 13px;\n-  cursor: pointer;\n-  transition: all 0.2s;\n-  margin-left: 8px;\n-  margin-bottom: 8px;\n-}\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content:hover,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content:hover,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content:hover {\n   background: #f5f5f5;\n-  border-color: #9ca3af;\n }\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content.loading,\n-.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content.loading,\n-.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content.loading {\n-  opacity: 0.6;\n-  pointer-events: none;\n+.lp-builder-popup .lp-edit-quiz-wrap .heading {\n+  border-radius: 12px;\n }\n \n @keyframes lp-popup-spin {\n@@ -6771,6 +16892,14 @@\n     width: 100%;\n   }\n }\n+@keyframes rotation {\n+  0% {\n+    transform: rotate(0deg);\n+  }\n+  100% {\n+    transform: rotate(-359deg);\n+  }\n+}\n .learn-press-course-builder #lp-course-builder-content {\n   background: #fff;\n   padding: 24px;\n@@ -6841,11 +16970,39 @@\n .learn-press-course-builder .cb-section__course-edit .form-field,\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration {\n   display: flex;\n-  align-items: center;\n-  gap: 11px;\n+  gap: 0 11px;\n   margin: 0;\n   padding: 0;\n }\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field {\n+  display: grid;\n+  grid-template-columns: 150px max-content 1fr;\n+  gap: 6px 11px;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field label {\n+  grid-column: 1\u002F2;\n+  grid-row: 1;\n+  font-size: 14px;\n+  color: #23282d;\n+  font-weight: 600;\n+  margin: 0;\n+  padding: 0;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field input {\n+  grid-column: 2\u002F4;\n+  grid-row: 1;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .description {\n+  max-width: max-content;\n+  grid-column: 2\u002F3;\n+  grid-row: 2;\n+  font-size: 13px;\n+  line-height: 1.5;\n+  margin: 0;\n+}\n+.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .learn-press-tip {\n+  max-width: max-content;\n+}\n .learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,\n .learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field {\n   flex-wrap: wrap;\n@@ -6855,7 +17012,6 @@\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,\n .learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label {\n   font-size: 14px;\n-  color: #1a1a1a;\n   margin: 0;\n   width: 150px;\n   min-width: 150px;\n@@ -6885,7 +17041,7 @@\n }\n .learn-press-course-builder .cb-section__course-edit .form-field textarea {\n   order: 3;\n-  width: 100%;\n+  width: calc(100% - 165px);\n   padding: 8px 12px;\n   border: 1px solid #d1d5db;\n   border-radius: 6px;\n@@ -6898,7 +17054,7 @@\n .learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ed;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .learn-press-course-builder .cb-section__course-edit select {\n@@ -6908,12 +17064,11 @@\n   border-radius: 6px;\n   font-size: 14px;\n   color: #1a1a1a;\n-  background: #fff;\n   cursor: pointer;\n }\n .learn-press-course-builder .cb-section__course-edit select:focus {\n   outline: none;\n-  border-color: #3b82f6;\n+  border-color: #7067ed;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n .learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration > :not(label):not(.description) {\n@@ -6921,7 +17076,8 @@\n   align-items: center;\n   gap: 8px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox] {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox],\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio] {\n   appearance: none;\n   -webkit-appearance: none;\n   width: 44px;\n@@ -6934,7 +17090,8 @@\n   margin: 0;\n   flex-shrink: 0;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:before {\n   content: \"\";\n   position: absolute;\n   width: 20px;\n@@ -6946,26 +17103,31 @@\n   transition: all 0.3s ease;\n   box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked {\n-  background: #3b82f6;\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked {\n+  background: #28A746;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked:before {\n   right: 22px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus {\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus,\n+.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:focus {\n   outline: none;\n   box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]),\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) {\n   flex-direction: row;\n   align-items: center;\n-  gap: 11px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox] {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox],\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) input[type=radio] {\n   order: 1;\n   margin-top: 2px;\n }\n-.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description {\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description,\n+.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) .description {\n   order: 3;\n }\n .learn-press-course-builder .cb-section__course-edit .description {\n@@ -6995,6 +17157,9 @@\n .learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content {\n   flex: 1;\n }\n+.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content .lp_course_extra_meta_box__fields:not(:has(*)) {\n+  display: none;\n+}\n .learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text] {\n   max-width: 100%;\n   margin-bottom: 10px;\n@@ -7021,168 +17186,329 @@\n     margin-top: 0;\n   }\n }\n+.learn-press-course-builder .lp-message {\n+  color: #7067ED;\n+  background-color: #EEF1FF;\n+  font-weight: 500;\n+  padding: 8px 20px;\n+  border-radius: 8px;\n+}\n+\n+#lp-builder-popup-container .learn-press-message,\n+#lp-course-builder .learn-press-message {\n+  margin: 20px 10px;\n+  position: relative;\n+  padding: 10px 20px;\n+  border-radius: 8px;\n+  \u002F*background-color: $cb-info-bg;\n+  color: $cb-info;*\u002F\n+  max-width: 100%;\n+  width: fit-content;\n+}\n+#lp-builder-popup-container select,\n+#lp-course-builder select {\n+  padding: 10px 14px 10px 32px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 6px;\n+  font-size: 14px;\n+  color: #1e1e1e;\n+  cursor: pointer;\n+  appearance: none;\n+  background-image: url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");\n+  background-repeat: no-repeat;\n+  background-position: left 10px center;\n+  background-size: 14px;\n+}\n+#lp-builder-popup-container select:focus,\n+#lp-course-builder select:focus {\n+  outline: none;\n+  border-color: #7067ED;\n+  box-shadow: 0 0 0 3px rgba(112, 103, 237, 0.1);\n+}\n+\n+#lp-course-builder .lp-ico-ai {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");\n+  mask-image: url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+#lp-course-builder .lp-btn-generate-course-with-ai,\n+#lp-course-builder .lp-btn-warning-enable-ai {\n+  position: relative;\n+  margin: 0 !important;\n+}\n+#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai {\n+  background: transparent;\n+  color: #7067ED;\n+}\n+#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai:hover {\n+  background: #EEF1FF;\n+}\n \n .wp-editor-wrap {\n-  border: 1px solid #ddd;\n-  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  border-radius: 8px;\n   overflow: hidden;\n-  background-color: #fff;\n+  background-color: #ffffff;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:focus,\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:hover,\n+.wp-editor-wrap .qt-dfw:focus,\n+.wp-editor-wrap .qt-dfw:hover {\n+  box-shadow: none;\n+  background: none;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-underline),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-blockquote),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-alignright),\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-unlink) {\n+  border-left: 1px solid #d1d5db;\n }\n .wp-editor-wrap .wp-editor-tools {\n-  background-color: #f5f5f5;\n-  margin: 8px 8px 0;\n-  border-radius: 12px 12px 0 0;\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  background-color: #F7F7F7;\n+  padding: 8px 12px;\n+}\n+.wp-editor-wrap .wp-editor-tools:after {\n+  content: none;\n }\n .wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+  padding: 0;\n+  float: none;\n+  flex-shrink: 0;\n }\n .wp-editor-wrap button.insert-media,\n .wp-editor-wrap input.button {\n   color: #1e1e1e;\n-  border-color: #1e1e1e;\n-  display: inline-block;\n+  border-color: #d1d5db;\n+  display: inline-flex;\n+  align-items: center;\n+  gap: 6px;\n   text-decoration: none;\n   font-size: 13px;\n-  line-height: 2.15384615;\n+  line-height: 1.6;\n   min-height: 30px;\n   margin: 0;\n-  padding: 0 10px;\n+  padding: 4px 12px;\n   cursor: pointer;\n   border-width: 1px;\n   border-style: solid;\n-  border-radius: 3px;\n+  border-radius: 6px;\n   white-space: nowrap;\n   box-sizing: border-box;\n+  background: #ffffff;\n+  transition: border-color 0.15s ease, background 0.15s ease;\n+}\n+.wp-editor-wrap button.insert-media:focus,\n+.wp-editor-wrap input.button:focus {\n+  outline: none;\n+  box-shadow: none;\n+  background-color: #EEF1FF;\n+  border-color: #7067ED;\n+  color: #7067ED;\n+}\n+.wp-editor-wrap button.insert-media:hover,\n+.wp-editor-wrap input.button:hover {\n+  color: #7067ED;\n+  border-color: #7067ED;\n+  background-color: #EEF1FF;\n+}\n+.wp-editor-wrap .wp-editor-tabs {\n+  float: none;\n+  flex-shrink: 0;\n+  display: flex;\n+  background: #ffffff;\n+  border-radius: 12px;\n+  border: 1px solid #e5e7eb;\n+  padding: 4px 4px 6px;\n+  gap: 4px;\n+}\n+.wp-editor-wrap .wp-editor-tabs button {\n+  margin: 0;\n+  padding: 2px 14px;\n+  border: none;\n+  border-radius: 8px;\n+  font-size: 13px;\n+  font-weight: 500;\n+  line-height: 1.6;\n+  color: #6b7280;\n+  background: transparent;\n+  cursor: pointer;\n+  box-sizing: content-box !important;\n+}\n+.wp-editor-wrap .wp-editor-tabs button:hover {\n+  color: #1e1e1e;\n+  background-color: #EEF1FF;\n+}\n+.wp-editor-wrap .wp-editor-tabs button:focus {\n+  outline: none;\n+  box-shadow: none;\n+}\n+.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n+  background: #EEF1FF;\n+  color: #7067ED;\n+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n+  font-weight: 600;\n }\n .wp-editor-wrap .mce-tinymce {\n   border: none !important;\n   visibility: visible !important;\n }\n-.wp-editor-wrap .mce-top-part::before {\n-  box-shadow: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox {\n+  border-radius: 8px;\n }\n-.wp-editor-wrap div.mce-statusbar {\n-  border-top: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus, .wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover {\n+  box-shadow: none;\n }\n-.wp-editor-wrap .wp-editor-tabs button {\n-  margin: 8px 0 0 8px;\n-  border-bottom-color: #dcdcde;\n-  border-radius: 4px;\n+.wp-editor-wrap div.mce-toolbar-grp > div {\n+  padding: 0;\n }\n-.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true] {\n-  background: #fff;\n-  color: #000;\n+.wp-editor-wrap .mce-top-part::before {\n+  box-shadow: none !important;\n }\n .wp-editor-wrap .mce-top-part,\n .wp-editor-wrap .quicktags-toolbar {\n-  background-color: #f5f5f5;\n-  margin: 0 8px 0;\n+  background-color: #F7F7F7;\n+  margin: 0;\n   padding: 0;\n-  border-radius: 0 0 8px 8px;\n }\n-.wp-editor-wrap .mce-top-part::before {\n+.wp-editor-wrap .mce-toolbar-grp {\n+  background: none;\n+  border-bottom: none;\n+  padding: 0px 8px 8px;\n+}\n+.wp-editor-wrap .mce-toolbar .mce-btn {\n+  border: none;\n+  background: transparent;\n   box-shadow: none;\n+  border-radius: 4px;\n }\n-.wp-editor-wrap .quicktags-toolbar {\n-  padding: 6px;\n-  border-bottom: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn button {\n+  padding: 2px 5px;\n+  color: #374151;\n }\n-.wp-editor-wrap .wp-media-buttons {\n-  padding: 8px 8px 0;\n+.wp-editor-wrap .mce-toolbar .mce-btn:hover, .wp-editor-wrap .mce-toolbar .mce-btn.mce-active {\n+  background: rgba(0, 0, 0, 0.06);\n+  border: none;\n+  box-shadow: none;\n }\n-.wp-editor-wrap .mce-tinymce {\n-  border: none !important;\n-  visibility: visible !important;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group {\n+  padding: 0 2px;\n }\n-.wp-editor-wrap .mce-toolbar-grp {\n-  background: none;\n-  border-bottom: none;\n+.wp-editor-wrap .mce-toolbar .mce-btn-group:not(:last-child)::after {\n+  content: \"\";\n+  display: inline-block;\n+  width: 1px;\n+  height: 20px;\n+  background: #e5e7eb;\n+  vertical-align: middle;\n+  margin-right: 4px;\n }\n-.wp-editor-wrap .mce-toolbar-grp > div {\n-  padding: 5px;\n+.wp-editor-wrap .quicktags-toolbar {\n+  padding: 0 10px 8px;\n+  border-bottom: 1px solid #f5f5f5;\n }\n .wp-editor-wrap .wp-editor-container {\n   border: none;\n }\n+.wp-editor-wrap .mce-edit-area iframe {\n+  min-height: 150px !important;\n+}\n+.wp-editor-wrap div.mce-statusbar {\n+  display: none;\n+}\n \n #lp-builder-popup-container .wp-editor-container {\n   border: none !important;\n-  background: #fff;\n+  background: #ffffff;\n+}\n+#lp-builder-popup-container .wp-editor-tools {\n+  padding: 8px 12px;\n }\n #lp-builder-popup-container .mce-top-part {\n   margin: 0 !important;\n }\n #lp-builder-popup-container .lp-question-field-settings .mce-top-part {\n-  margin: 0 8px 0 !important;\n+  margin: 0 !important;\n }\n #lp-builder-popup-container .quicktags-toolbar {\n-  border-radius: 0 0 8px 8px;\n   margin: 0 !important;\n-  padding: 8px !important;\n+  padding: 6px 8px !important;\n }\n \n .lp-popup-items-to-select .header {\n-  padding: 0 20px;\n+  padding: 0;\n   flex-shrink: 0;\n }\n \n .lp-popup-items-to-select .header ul.tabs {\n   display: flex;\n-  margin-top: 10;\n-  padding: 0;\n+  border-bottom: 1px solid #f5f5f5;\n+  background: #ffffff;\n+  gap: 10px;\n+  margin: 0;\n   list-style: none;\n-  gap: 20px;\n-  border-bottom: unset;\n+  padding: 0;\n }\n \n .lp-popup-items-to-select ul.tabs li {\n   margin: 0;\n+  display: inline-block;\n+  position: relative;\n+  padding: 0px 24px;\n+  text-decoration: none;\n+  font-weight: 500;\n+  font-size: 14px;\n+  transition: all 0.2s ease;\n+  border-radius: 12px 12px 0 0;\n+  border-bottom: 2px solid transparent;\n+  cursor: pointer;\n+}\n+.lp-popup-items-to-select ul.tabs li.active {\n+  border-bottom-color: #7067ED;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n+}\n+.lp-popup-items-to-select ul.tabs li:hover {\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n }\n \n .lp-popup-items-to-select .header ul.tabs li.tab a {\n-  display: block;\n-  text-decoration: none;\n-  color: #6b7280;\n-  font-weight: 600;\n-  font-size: 14px;\n-  transition: all 0.2s;\n-  border-radius: 6px;\n-  border: 1px solid #f5f5f5;\n+  padding: 0;\n }\n \n .lp-popup-items-to-select .header ul.tabs li.tab.active a,\n .lp-popup-items-to-select .header ul.tabs li.tab a:hover {\n-  background: #f5f5f5;\n-  color: #1e1e1e;\n+  color: #7067ED;\n }\n \n-input.lp-search-title-item {\n-  width: 100%;\n+.lp-popup-items-to-select input.lp-search-title-item {\n   padding: 12px 16px;\n-  border: 1px solid #d1d5db;\n+  border-color: #e5e7eb;\n   border-radius: 8px;\n-  font-size: 14px;\n-  color: #374151;\n-  background: #fff;\n-  margin-bottom: 15px;\n   outline: none;\n-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n   transition: border-color 0.2s;\n+  margin: 0;\n }\n \n-input.lp-search-title-item:focus {\n-  border-color: #3b82f6;\n+.lp-popup-items-to-select input.lp-search-title-item:focus {\n+  border-color: #7067ED;\n   box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);\n }\n \n .lp-target ul.list-items {\n-  list-style: none;\n-  margin: 0;\n   padding: 0;\n-  background: #fff;\n-  border: 1px solid #e5e7eb;\n-  border-radius: 8px;\n-  overflow: hidden;\n   gap: 0;\n   max-height: 500px;\n }\n@@ -7190,8 +17516,7 @@\n .lp-select-item {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n-  border-bottom: 1px solid #f5f5f5;\n+  padding: 12px 0;\n   cursor: pointer;\n   transition: background 0.2s;\n }\n@@ -7219,8 +17544,8 @@\n }\n \n .lp-select-item input[type=checkbox]:checked {\n-  background-color: #1e1e1e;\n-  border-color: #1e1e1e;\n+  background-color: #28A746;\n+  border-color: #28A746;\n }\n \n .lp-select-item input[type=checkbox]:checked::after {\n@@ -7235,6 +17560,14 @@\n   transform: rotate(-45deg);\n }\n \n+.lp-select-item input[type=checkbox]:checked::before {\n+  display: none;\n+}\n+\n+.lp-answers-config input[type=radio]:checked::before {\n+  display: none;\n+}\n+\n .lp-select-item .title {\n   font-size: 14px;\n   color: #374151;\n@@ -7254,13 +17587,16 @@\n   justify-content: center;\n }\n \n+.lp-popup-items-to-select .pagination {\n+  margin: 10px 0 0 !important;\n+}\n+\n .list-items-wrap .learn-press-pagination ul.page-numbers {\n   display: flex;\n-  gap: 5px;\n+  gap: 8px;\n   list-style: none;\n   padding: 0;\n   margin: 0;\n-  border: none;\n }\n \n .list-items-wrap .page-numbers li span.page-numbers.current,\n@@ -7268,40 +17604,53 @@\n   display: flex;\n   align-items: center;\n   justify-content: center;\n-  height: 32px;\n+  min-width: 36px;\n+  height: 36px;\n+  padding: 0 12px;\n   border-radius: 6px;\n-  font-size: 13px;\n   text-decoration: none;\n-  font-weight: 500;\n-  border: 1px solid transparent;\n+  color: #898989;\n+  font-size: 14px;\n+  transition: all 0.2s;\n+  background: #ffffff;\n+  font-weight: 600;\n }\n \n .list-items-wrap .page-numbers li span.page-numbers.current {\n-  background-color: #1e1e1e;\n-  color: #fff;\n-}\n-\n-.list-items-wrap .page-numbers li a.page-numbers {\n-  background-color: #fff;\n-  color: #6b7280;\n-  border-color: #e5e7eb;\n-  transition: all 0.2s;\n+  background-color: #7067ED;\n+  color: #ffffff;\n }\n \n .list-items-wrap .page-numbers li a.page-numbers:hover {\n-  border-color: #9ca3af;\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n   color: #1e1e1e;\n }\n \n+.list-items-wrap .page-numbers li a.page-numbers.next,\n+.list-items-wrap .page-numbers li a.page-numbers.prev {\n+  background-color: #F7F7F7;\n+  border-color: #d1d5db;\n+}\n+.list-items-wrap .page-numbers li a.page-numbers.next:hover,\n+.list-items-wrap .page-numbers li a.page-numbers.prev:hover {\n+  background-color: #7067ED;\n+  color: #ffffff;\n+}\n+\n .list-items-wrap .page-numbers i {\n   font-size: 14px;\n }\n \n+.lp-popup-items-to-select .main {\n+  border-bottom-color: transparent !important;\n+  padding: 20px 0 0 !important;\n+}\n+\n .lp-popup-items-to-select .footer {\n-  background: #fff;\n+  padding: 16px 0 0 !important;\n   align-items: center;\n   justify-content: space-between;\n-  flex-shrink: 0;\n }\n \n .lp-popup-items-to-select .button {\n@@ -7312,12 +17661,18 @@\n   cursor: pointer;\n   border: 1px solid transparent;\n   transition: all 0.2s;\n+  background: transparent;\n+  color: #1e1e1e;\n+}\n+.lp-popup-items-to-select .button:hover {\n+  background: transparent;\n+  color: #7067ED;\n }\n \n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,\n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active) {\n-  background-color: #333;\n-  color: #fff;\n+  background-color: #EEF1FF;\n+  color: #7067ED;\n   order: 2;\n }\n \n@@ -7332,13 +17687,14 @@\n }\n \n .lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover {\n-  background-color: #1e1e1e;\n+  background-color: #7067ED;\n+  color: #EEF1FF;\n }\n \n .lp-btn-count-items-selected {\n   background: transparent;\n   color: #6b7280;\n-  border: 1px dashed #d1d5db;\n+  padding: 0 !important;\n   font-size: 13px;\n   order: 1;\n }\n@@ -7364,7 +17720,7 @@\n .lp-popup-items-to-select ul.list-items-selected li {\n   display: flex;\n   align-items: center;\n-  padding: 12px 16px;\n+  padding: 5px;\n   border-bottom: 1px solid #f5f5f5;\n   color: #1e1e1e;\n   cursor: pointer;\n@@ -7387,6 +17743,56 @@\n   background: #f5f5f5;\n }\n \n-.lp-popup-items-to-select .list-items-selected li {\n-  padding: 5px;\n+.lp-popup-items-to-select .header .header-count-items-selected {\n+  border-bottom-color: #f5f5f5;\n+}\n+\n+.lp-toast.toastify {\n+  background: #E7F6E9;\n+  color: #28A746;\n+  border-radius: 5px;\n+  box-shadow: 0 0 0;\n+  display: flex;\n+  align-items: center;\n+}\n+.lp-toast.toastify .toast-close {\n+  background: transparent !important;\n+  font-size: 0;\n+  padding-right: 12px;\n+}\n+.lp-toast.toastify .toast-close:before {\n+  content: \"\\f00d\";\n+  font-family: \"lp-icon\";\n+  font-size: 16px;\n+  color: #000;\n+  line-height: 17px;\n+}\n+.lp-toast.toastify .toast-close:hover {\n+  opacity: 1;\n+}\n+.lp-toast.toastify.error {\n+  background-color: #fee2e2;\n+  color: #dc2626;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.warning {\n+  background-color: #fbf7f2;\n+  color: #fb9422;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+.lp-toast.toastify.info {\n+  background-color: #dbeafe;\n+  color: #1e40af;\n+  padding: 12px 20px;\n+  border: none;\n+  margin: 0 auto;\n+}\n+\n+#wp-media-modal label.screen-reader-text,\n+#wp-media-modal span.screen-reader-text {\n+  display: none;\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.min.css\t2026-04-11 02:14:10.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fcourse-builder-rtl.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-right:15px;padding-left:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}#lp-course-builder{display:block !important;min-height:100vh;background:#fff;margin:0;padding:0}#lp-course-builder .lp-course-builder_layout{display:block !important;width:100%}#lp-course-builder .learn-press-course-builder{display:flex;flex-direction:column;min-height:100vh;background:#fff;margin:0;padding:0;width:100%}#lp-course-builder .learn-press-course-builder *{box-sizing:border-box}#lp-course-builder .lp-cb-body{display:flex;flex:1;min-height:calc(100vh - 60px)}.lp-cb-top-header{position:fixed;top:0;right:0;left:0;height:60px;background:#fff;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;justify-content:space-between;padding:0 24px;z-index:1001;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-cb-top-header .lp-cb-top-header__logo{display:flex;align-items:center}.lp-cb-top-header .lp-cb-top-header__logo a{display:flex;align-items:center;gap:10px;text-decoration:none;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__logo a:hover{color:#1f74ff}.lp-cb-top-header .lp-cb-top-header__logo .dashicons{font-size:28px;width:28px;height:28px;color:#1f74ff}.lp-cb-top-header .lp-cb-top-header__title{font-size:18px;font-weight:600;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__user{display:flex;align-items:center;gap:16px}.lp-cb-top-header .lp-cb-top-header__user-info{display:flex;align-items:center;gap:10px}.lp-cb-top-header .lp-cb-top-header__user-info img{width:32px;height:32px;border-radius:50%;object-fit:cover}.lp-cb-top-header .lp-cb-top-header__user-name{font-size:14px;font-weight:500;color:#1e1e1e}.lp-cb-top-header .lp-cb-top-header__user-link{font-size:13px;color:#1f74ff;text-decoration:none}.lp-cb-top-header .lp-cb-top-header__user-link:hover{text-decoration:underline}.lp-cb-top-header .lp-cb-top-header__logout{font-size:13px;color:#6b7280;text-decoration:none;padding:6px 12px;border:1px solid #f5f5f5;border-radius:4px;transition:all .2s}.lp-cb-top-header .lp-cb-top-header__logout:hover{background:#f9fafb;color:#ef4444;border-color:#ef4444}#lp-course-builder-sidebar.lp-cb-sidebar{position:fixed !important;right:0 !important;top:60px !important;bottom:0 !important;width:260px !important;background:#fff !important;color:#000 !important;display:flex !important;flex-direction:column !important;z-index:1000 !important;overflow-y:auto !important;padding:0 !important;border-radius:0 !important;border-left:1px solid #f5f5f5}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__header{display:none}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav{flex:1;padding:16px;margin:0;list-style:none;display:block !important;overflow-x:visible !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item{margin:0;padding:0;list-style:none;display:block !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{display:flex !important;align-items:center;padding:12px 20px;color:#000 !important;text-decoration:none;transition:all .2s ease;gap:12px;background:transparent !important;border:none !important;border-radius:6px !important;margin-top:6px}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover{background:#eee !important;color:#000 !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{font-size:20px;width:20px;height:20px;line-height:20px;color:inherit}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{font-size:15px;font-weight:500}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a{background:#e2edff !important;color:#1f74ff !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons{color:#1f74ff !important}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer{padding:16px 0;border-top:1px solid #f5f5f5;margin-top:auto;background:#fdfdfd}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item{display:flex;align-items:center;padding:12px 20px;color:#000;text-decoration:none;gap:12px;font-size:14px;transition:all .2s}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover{color:#1f74ff}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons{font-size:18px;width:18px;height:18px}#lp-course-builder-content.lp-cb-main{flex:1;margin-right:260px !important;margin-top:60px !important;min-height:calc(100vh - 60px);padding:0 24px !important;background:#fff !important;border-radius:0 !important;width:calc(100% - 260px) !important}html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 32px)}html:has(#wpadminbar) .lp-cb-top-header{top:32px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 32px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px) !important;min-height:calc(100vh - 60px)}@media screen and (max-width:782px){html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 46px)}html:has(#wpadminbar) .lp-cb-top-header{top:46px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 46px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px + 46px) !important;min-height:calc(100vh - 60px - 46px)}}.lp-cb-breadcrumb{padding:16px 12px;border-bottom:1px solid #f5f5f5;font-size:14px;background:#fff;border-radius:8px 8px 0 0}.lp-cb-breadcrumb .lp-cb-breadcrumb__item{color:#6b7280;text-decoration:none;transition:color .2s}.lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover{color:#1f74ff}.lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current{color:#1e1e1e;font-weight:500}.lp-cb-breadcrumb .lp-cb-breadcrumb__separator{margin:0 10px;color:#6b7280}.lp-cb-header{position:sticky;top:60px;z-index:99;display:flex;align-items:center;justify-content:space-between;padding:20px 12px;background:#fff;border-bottom:1px solid #f5f5f5}.lp-cb-header .lp-cb-header__left{display:flex;align-items:center;gap:12px}.lp-cb-header .lp-cb-header__title{margin:0;font-size:40px;font-weight:600;margin-bottom:10px;color:#1e1e1e}.lp-cb-header .lp-cb-header__actions{display:flex;gap:12px}.lp-cb-header .lp-cb-header__actions .lp-button{padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:1px solid #f5f5f5;background:#fff;color:#1e1e1e;transition:all .2s}.lp-cb-header .lp-cb-header__actions .lp-button:hover{background:#f9fafb}.lp-cb-header .lp-cb-header__actions .lp-button-primary,.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn{background:#1f74ff !important;border-color:#1f74ff !important;color:#fff !important}.lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,.lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover{background:#0047ba !important;border-color:#0047ba !important}html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 32px)}@media screen and (max-width:782px){html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 46px)}}.course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.course-status.publish{background:#dcfce7;color:#166534}.course-status.draft{background:#fef3c7;color:#92400e}.course-status.pending{background:#dbeafe;color:#1e40af}.course-status.private{background:#f3e8ff;color:#6b21a8}.course-status.trash{background:#fee2e2;color:#991b1b}.lp-cb-tabs{display:flex;border-bottom:1px solid #f5f5f5;padding:0 12px;background:#fff;gap:10;margin:0;list-style:none}.lp-cb-tabs .lp-cb-tabs__item{padding:16px 24px;color:#6b7280;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent}.lp-cb-tabs .lp-cb-tabs__item:hover{color:#1e1e1e}.lp-cb-tabs .lp-cb-tabs__item.is-active{color:#1f74ff;border-bottom-color:#1f74ff}.lp-cb-tab-content{padding:0;background:#fff;border-radius:0 0 8px 8px}.lp-cb-tab-content .cb-section__course-edit,.lp-cb-tab-content .lp-course-builder-content__section{padding:12px;background:#fff;border-radius:0;min-height:auto}.lp-cb-tab-content .cb-section__course-edit .cb-section__header,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header{display:flex;align-items:center;justify-content:space-between;padding:0 0 20px 0;margin-bottom:20px;border-bottom:1px solid #f5f5f5}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left{display:flex;align-items:center;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish{background:#dcfce7;color:#166534}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft{background:#fef3c7;color:#92400e}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending{background:#dbeafe;color:#1e40af}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,.lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action{display:flex;gap:10px}.lp-cb-tab-content .lp-meta-box__course-tab{display:flex;gap:24px}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:0 0 200px;list-style:none;margin:0;padding:0;border-left:1px solid #f5f5f5}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li{margin:0}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{display:block;padding:12px 16px;color:#6b7280;text-decoration:none;border-right:2px solid transparent;transition:all .2s}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover{color:#1e1e1e;background:#f9fafb}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{color:#1f74ff;background:rgba(31,116,255,0.05);border-right-color:#1f74ff;font-weight:500}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex:1;min-width:0}.lp-cb-footer{padding:20px 0;border-top:1px solid #f5f5f5;background:#fff;border-radius:0 0 8px 8px;margin-top:auto}.lp-cb-footer .lp-cb-footer__actions{display:flex;justify-content:flex-end;gap:12px}#lp-course-builder .lp-course-builder-content__tab{padding:0 24px;background:#fff;border-radius:8px;max-width:100%}#lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title{font-size:40px;font-weight:600;color:#1e1e1e;margin:20px 0 24px 0}.lp-cb-save-btn,#lp-course-builder .lp-button-primary{background:#1f74ff !important;border-color:#1f74ff !important;color:#fff !important;padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-save-btn:hover,#lp-course-builder .lp-button-primary:hover{background:#0047ba !important;border-color:#0047ba !important}.lp-cb-save-btn.has-changes,#lp-course-builder .lp-button-primary.has-changes{position:relative;animation:pulse-save 2s infinite}.lp-cb-save-btn.has-changes::after,#lp-course-builder .lp-button-primary.has-changes::after{content:\"\";position:absolute;top:-4px;left:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update,#lp-course-builder .cb-btn-preview,#lp-course-builder .cb-btn-darft{padding:10px 20px;font-size:14px;border-radius:6px;font-weight:500;cursor:pointer;border:0;transition:all .2s}#lp-course-builder .cb-btn-update.has-changes,#lp-course-builder .cb-btn-preview.has-changes,#lp-course-builder .cb-btn-darft.has-changes{position:relative}#lp-course-builder .cb-btn-update.has-changes::after,#lp-course-builder .cb-btn-preview.has-changes::after,#lp-course-builder .cb-btn-darft.has-changes::after{content:\"\";position:absolute;top:-4px;left:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update.loading,#lp-course-builder .cb-btn-preview.loading,#lp-course-builder .cb-btn-darft.loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-btn-update{background:#1f74ff;color:#fff}#lp-course-builder .cb-btn-update:hover{background:#0047ba}#lp-course-builder .cb-btn-update.cb-btn-primary{background:#1f74ff;color:#fff}#lp-course-builder .cb-btn-update.cb-btn-primary:hover{background:#0047ba}#lp-course-builder .cb-btn-preview{border:1px solid #e5e7eb;color:#1e1e1e;text-decoration:none;display:inline-flex;align-items:center;background:#fff}#lp-course-builder .cb-btn-preview:hover{border-color:#1f74ff;color:#1f74ff}#lp-course-builder.cb-btn-secondary{background:#fff;border:1px solid #e5e7eb;color:#1e1e1e}#lp-course-builder.cb-btn-secondary:hover{border-color:#1f74ff;color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-btn-darft{background:#e5e7eb;color:#1e1e1e}#lp-course-builder .cb-btn-darft:hover{background:#d1d5db}#lp-course-builder .cb-btn-trash{cursor:pointer;font-size:16px;background:transparent;color:#ef4444;padding:10px 20px;border-radius:6px}#lp-course-builder .cb-btn-trash:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown{position:relative;display:inline-flex}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;padding:0;background:#1f74ff;border:1px solid #1f74ff;border-right-color:#98bfe4;border-radius:6px 0 0 6px;cursor:pointer;transition:all .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#fff;transition:transform .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{border-color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons{color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{border-color:#1f74ff;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(-180deg);color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:right}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#6b7280}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#1f74ff}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading{opacity:.7;pointer-events:none}.cb-header-actions-dropdown{position:relative;display:inline-flex}.cb-header-actions-dropdown .cb-btn-update{padding:10px 16px;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:all .2s;border-radius:0 6px 6px 0 !important;background:#1f74ff;color:#fff}.cb-header-actions-dropdown .cb-btn-update:hover{background:#0047ba}.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary{background:#1f74ff;color:#fff}.cb-header-actions-dropdown .cb-btn-update.cb-btn-primary:hover{background:#0047ba}.cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:auto;padding:10px 0;background:#d0e3ff;border:0;border-radius:6px 0 0 6px;cursor:pointer;transition:all .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#1f74ff;transition:transform .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(-180deg)}.cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}.cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:right}.cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#6b7280}.cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}.cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}.cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}.cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}.cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#1f74ff}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}.cb-header-actions-dropdown .cb-dropdown-item.loading{opacity:.7;pointer-events:none}@keyframes pulse-save{0%,100%{box-shadow:0 0 0 0 rgba(31,116,255,0.4)}50%{box-shadow:0 0 0 8px rgba(31,116,255,0)}}@media screen and (max-width:1024px){#lp-course-builder-sidebar.lp-cb-sidebar{width:220px !important}#lp-course-builder-content.lp-cb-main{margin-right:220px !important;width:calc(100% - 220px) !important}.lp-cb-tab-content .lp-meta-box__course-tab{flex-direction:column}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:none;border-left:0;border-bottom:1px solid #f5f5f5;display:flex;overflow-x:auto}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;white-space:nowrap}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{border-right:0;border-bottom-color:#1f74ff}}@media screen and (max-width:768px){.lp-cb-top-header{padding:0 16px}.lp-cb-top-header .lp-cb-top-header__user-name,.lp-cb-top-header .lp-cb-top-header__user-link{display:none}#lp-course-builder-sidebar.lp-cb-sidebar{transform:translateX(100%);transition:transform .3s ease}#lp-course-builder-sidebar.lp-cb-sidebar.is-open{transform:translateX(0)}#lp-course-builder-content.lp-cb-main{margin-right:0 !important;width:100% !important}.lp-cb-header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-header .lp-cb-header__actions{width:100%;justify-content:flex-end}.lp-cb-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.lp-cb-tabs .lp-cb-tabs__item{white-space:nowrap;padding:12px 16px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action{width:100%;flex-wrap:wrap}}#lp-course-builder .lp-cb-tab__title{font-size:28px;font-weight:600;margin-bottom:20px;color:#1e1e1e}#lp-course-builder .cb-tab-course__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-search-form{position:relative;display:flex;align-items:center;background:#f5f5f5;border-radius:6px;padding:12px 16px;gap:6px;margin-bottom:0;border:1px solid #e5e7eb}#lp-course-builder .lp-icon-search{font-size:16px;color:#6b7280;flex-shrink:0}#lp-course-builder .cb-input-search-course{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-course::placeholder{color:#999}#lp-course-builder .cb-search-btn{cursor:pointer;border:0;background:0}#lp-course-builder .cb-btn-add-new{display:inline-flex;align-items:center;background-color:#1e1e1e;color:#fff;padding:10px 20px;border-radius:6px;text-decoration:none;font-size:14px;font-weight:500;transition:background-color .2s}#lp-course-builder .cb-btn-back a{text-decoration:none}#lp-course-builder .cb-btn-add-new:hover{background-color:#333}#lp-course-builder .cb-list-course{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0;margin:0}#lp-course-builder .course{background:#fff;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.06);border:1px solid #e5e7eb;transition:all .3s}#lp-course-builder .course:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1)}#lp-course-builder .course-item{display:flex;gap:20px;padding:16px;height:100%}#lp-course-builder .course-thumbnail{width:280px;min-width:280px;border-radius:8px;aspect-ratio:16\u002F10;overflow:hidden;background-color:#f5f5f5}#lp-course-builder .course-img{width:100%;height:100%}#lp-course-builder .course-img img{width:100%;height:100%;object-fit:cover}#lp-course-builder .course-content{flex:1;display:flex;flex-direction:column}#lp-course-builder .wap-course-title{margin-top:0;margin-bottom:12px}#lp-course-builder .wap-course-title a{text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .course-permalink{text-decoration:none;color:#1e1e1e;font-size:18px;font-weight:600;display:block;transition:color .2s}#lp-course-builder .course-permalink:hover{color:#3b82f6}#lp-course-builder .course-title{text-decoration:none;line-height:1.4}#lp-course-builder .course-featured{display:inline-block;background-color:#ffd700;color:#333;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;margin-bottom:10px;text-transform:uppercase}#lp-course-builder .course-instructor__wrapper{display:flex;gap:5px;margin-bottom:15px;font-size:13px;color:#666}#lp-course-builder .course-instructor-category>div{display:flex;gap:5px;align-items:center}#lp-course-builder .course-instructor-category label{color:#999}#lp-course-builder .course-instructor a,#lp-course-builder .course-categories a{color:#3b82f6;text-decoration:none}#lp-course-builder .course-instructor a:hover,#lp-course-builder .course-categories a:hover{text-decoration:underline}#lp-course-builder .course-wrap-meta{display:flex;flex-wrap:wrap;gap:15px;margin-bottom:15px;padding-bottom:15px}#lp-course-builder .instructor-display-name{font-weight:400}#lp-course-builder .meta-item{font-size:14px;color:#666;display:flex;align-items:center;gap:5px}#lp-course-builder .course-bottom{margin-top:auto}#lp-course-builder .course-price{display:block}#lp-course-builder .course-item-price .free{color:#10b981;font-weight:600;font-size:16px}#lp-course-builder .course-item-price .price{color:#3b82f6;font-weight:700;font-size:18px}#lp-course-builder .highlight-new-course{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .course-action{position:relative;display:flex;align-items:flex-start;gap:20px}#lp-course-builder .course-action-editor{padding:15px 20px 15px 0}#lp-course-builder .course-action-expanded{cursor:pointer;padding:15px 0 15px 20px}#lp-course-builder .course-action-expanded svg{width:24px;height:24px}#lp-course-builder .course-action-expanded__items{display:none;position:absolute;min-width:160px;top:0;left:0;transform:translate(-100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500;z-index:100}#lp-course-builder .course-action-expanded__items.active{display:flex !important}#lp-course-builder .course-action-expanded__items .course-action-expanded__view,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}#lp-course-builder .course-action-expanded__items .course-action-expanded__view:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{color:#ef4444}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .course-action-expanded:hover+.course-action-expanded__items,#lp-course-builder .course-action-expanded__items:hover{display:flex !important}#lp-course-builder .course-action .wap-course-title{margin:0}#lp-course-builder .course-action .course-permalink{color:#3b82f6;font-size:14px;font-weight:500}#lp-course-builder .course-action .course-permalink:hover{text-decoration:underline}#lp-course-builder .btn-edit-course{display:flex;align-items:center;text-decoration:none;font-size:14px;font-weight:500;border-radius:6px;padding:8px 16px;gap:6px;border:1px solid #e5e7eb;background:#fff;color:#1e1e1e;transition:all .2s}#lp-course-builder .btn-edit-course:hover{background:#f5f5f5;border-color:#d1d5db}#lp-course-builder .btn-edit-course svg{width:1rem;height:1rem}#lp-course-builder .course-status{display:inline-flex}#lp-course-builder .course-status span{font-size:12px;padding:4px 12px;border-radius:20px;font-weight:500;text-transform:capitalize}#lp-course-builder .course-status:not(.publish):not(.trash) span{background-color:#fef3c7;color:#92400e}#lp-course-builder .course-status.publish span{color:#166534;background-color:#dcfce7}#lp-course-builder .course-status.trash span{color:#991b1b;background-color:#fee2e2}#lp-course-builder .learn-press-pagination{margin-top:40px;display:flex;justify-content:center}#lp-course-builder .page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}#lp-course-builder .page-numbers li{display:inline-block}#lp-course-builder .page-numbers a,#lp-course-builder .page-numbers span{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border:1px solid #e5e7eb;border-radius:6px;text-decoration:none;color:#333;font-size:14px;transition:all .2s;background:#fff}#lp-course-builder .page-numbers a:hover{background-color:#f5f5f5;border-color:#d1d5db}#lp-course-builder .page-numbers .current{background-color:#1e1e1e;color:#fff;border-color:#1e1e1e;font-weight:600}#lp-course-builder .page-numbers .next,#lp-course-builder .page-numbers .prev{font-weight:600}#lp-course-builder #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-course-builder .field-material__label{width:150px;max-width:150px;min-width:150px;margin-left:11px}#lp-course-builder .lp-material--field-wrap{display:flex;align-items:center;gap:11px;margin-top:11px}#lp-course-builder .lp-material--field-external-link,#lp-course-builder .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material--field-method{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material-save-field,#lp-course-builder .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-course-builder .lp-material--upload-wrap label{cursor:pointer;width:100%;max-width:200px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-right:56px}#lp-course-builder .lp-material--field-upload{display:none}#lp-course-builder .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-course-builder .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-course-builder .lp-material--upload-wrap label::before{content:\"📁 \";margin-left:5px}#lp-course-builder .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}#lp-course-builder .lp-material--table th,#lp-course-builder .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:right}#lp-course-builder .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}#lp-course-builder .lp-material--table td{font-size:14px;color:#1e1e1e}#lp-course-builder .lp-material--table tr:last-child td{border-bottom:0}#lp-course-builder .lp-material--table tr:hover td{background-color:#f9fafb}#lp-course-builder .lp-material--table thead.hidden{display:none}#lp-course-builder .ts-control{padding:8px 8px 8px 8px !important}@media(max-width:1024px){#lp-course-builder .cb-list-course{gap:15px}#lp-course-builder .course-thumbnail{width:200px;min-width:200px}}@media(max-width:768px){#lp-course-builder .cb-tab-course__action{flex-direction:column;gap:16px;align-items:stretch}#lp-course-builder .cb-search-form{width:100%}#lp-course-builder .cb-btn-add-new{text-align:center;justify-content:center}#lp-course-builder .course-item{flex-direction:column}#lp-course-builder .course-thumbnail{width:100%;min-width:100%}#lp-course-builder .cb-list-course{grid-template-columns:1fr}}#lp-course-builder .cb-list-quiz{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-quiz__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-quiz{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-quiz::placeholder{color:#999}#lp-course-builder .cb-tab-quiz__action,#lp-course-builder .courses-builder__quiz-tab{width:calc(100% - 140px)}#lp-course-builder .quiz-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .quiz-action-expanded{cursor:pointer;padding:15px 0 15px 20px}#lp-course-builder .quiz-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-quiz{display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;background-color:#fff;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-quiz svg{width:1rem;height:1rem}#lp-course-builder .quiz-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-quiz{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .quiz-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .quiz-content__left{display:flex;gap:15px}#lp-course-builder .quiz-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .quiz__preview svg{height:20px;width:20px}#lp-course-builder .wap-quiz-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-quiz-title button{background-color:#fff;border:0;font-size:20px;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .quiz-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .quiz-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .quiz-assigned-courses{max-width:300px;margin-left:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .quiz-assigned-courses a{text-decoration:none}#lp-course-builder .quiz-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;left:0;transform:translate(-100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .quiz-action-expanded:hover+.quiz-action-expanded__items,#lp-course-builder .quiz-action-expanded__items:hover{display:flex !important}#lp-course-builder .cb-list-question{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-question__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-question{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-question::placeholder{color:#999}#lp-course-builder .cb-tab-question__action,#lp-course-builder .courses-builder__question-tab{width:calc(100% - 140px)}#lp-course-builder .question-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .question-action-expanded{cursor:pointer;padding:15px 0 15px 20px}#lp-course-builder .question-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-question{background-color:#fff;display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-question svg{width:1rem;height:1rem}#lp-course-builder .question-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-question{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .question-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .question-content__left{display:flex;gap:15px}#lp-course-builder .question-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .question__preview svg{height:20px;width:20px}#lp-course-builder .wap-question-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-question-title button{font-size:20px;background:#fff;border:0;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .question-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .question-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .question-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .question-assigned-quizzes{max-width:300px;margin-left:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .question-assigned-quizzes a{text-decoration:none}#lp-course-builder .question-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;left:0;transform:translate(-100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .question-action-expanded:hover+.question-action-expanded__items,#lp-course-builder .question-action-expanded__items:hover{display:flex !important}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-content{display:flex;gap:40px}.lp-course-builder-content__section .cb-course-edit-column--left{flex:0 0 320px;max-width:320px}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1;min-width:0}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__label .required{color:#ef4444}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-permalink{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-permalink__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-permalink__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-permalink__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-categories__label,.lp-course-builder-content__section .cb-course-edit-tags__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #ddd;padding:16px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper,.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-terms__checkbox,.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-terms__checkbox:hover label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox],.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:hover,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:5px;top:2px;width:6px;height:10px;border:solid #1e1e1e;border-width:0 0 2px 2px;transform:rotate(-45deg)}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:focus,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-terms__checkbox input[type=checkbox]:disabled+label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-terms__checkbox label,.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-dropzone{width:100%;min-height:180px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-course-builder-content__section .cb-featured-image-dropzone:hover{border-color:#1f74ff;background:rgba(31,116,255,0.03)}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image{border-style:solid;border-color:#e5e7eb;padding:0}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image:hover{border-color:#1f74ff}.lp-course-builder-content__section .cb-featured-image-dropzone.dragover{border-color:#1f74ff;background:rgba(31,116,255,0.05)}.lp-course-builder-content__section .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-course-builder-content__section .cb-featured-image-icon{display:block;font-size:36px;margin-bottom:12px;opacity:.6}.lp-course-builder-content__section .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-course-builder-content__section .cb-featured-image-link{color:#1f74ff;text-decoration:none;font-weight:500}.lp-course-builder-content__section .cb-featured-image-link:hover{text-decoration:underline}.lp-course-builder-content__section .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-course-builder-content__section .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-change-featured-image{padding:6px 14px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-change-featured-image:hover{background:#1f74ff;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image{padding:6px 14px;border:1px solid #ef4444;background:#fff;color:#ef4444;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-set-featured-image{padding:8px 16px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-set-featured-image:hover{background:#1f74ff;color:#fff}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-category__btn-add-new,.lp-course-builder-content__section .cb-course-edit-tag__btn-add-new,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel,.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel{font-size:16px;margin-top:15px;padding:5px 0;cursor:pointer;border:0;background:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;gap:10px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{background:#1e1e1e;color:white;border-radius:5px;padding:5px 20px;border:0}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-course-builder-content__section .cb-course-edit-content{flex-direction:column}.lp-course-builder-content__section .cb-course-edit-column--left{flex:1;max-width:100%}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{display:flex;gap:40px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:0 0 320px;max-width:320px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1;min-width:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required{color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #ddd;padding:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox:hover label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:checked::after,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:5px;top:2px;width:6px;height:10px;border:solid #1e1e1e;border-width:0 0 2px 2px;transform:rotate(-45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox input[type=checkbox]:disabled+label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__checkbox label,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone{width:100%;min-height:180px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover{border-color:#1f74ff;background:rgba(31,116,255,0.03)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image{border-style:solid;border-color:#e5e7eb;padding:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image:hover{border-color:#1f74ff}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover{border-color:#1f74ff;background:rgba(31,116,255,0.05)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon{display:block;font-size:36px;margin-bottom:12px;opacity:.6}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link{color:#1f74ff;text-decoration:none;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image{padding:6px 14px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover{background:#1f74ff;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image{padding:6px 14px;border:1px solid #ef4444;background:#fff;color:#ef4444;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #1f74ff;background:#fff;color:#1f74ff;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#1f74ff;color:#fff}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-add-new,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-add-new,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel{font-size:16px;margin-top:15px;padding:5px 0;cursor:pointer;border:0;background:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:10px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{background:#1e1e1e;color:white;border-radius:5px;padding:5px 20px;border:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:1;max-width:100%}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__header{display:none !important}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #e5e7eb;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-left:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-right:3px solid transparent;margin-right:-3px}ul.lp-meta-box__course-tab__tabs li a i{display:none}ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}ul.lp-meta-box__course-tab__tabs li.active a,ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#3b82f6;font-weight:600;border-right-color:#3b82f6;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 40px;background:#fff}@media(max-width:768px){.lp-meta-box__course-tab{flex-direction:column}ul.lp-meta-box__course-tab__tabs{width:100%;border-left:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:12px;background:#f9fafb}ul.lp-meta-box__course-tab__tabs li{flex-shrink:0;padding:0 4px}ul.lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;margin-right:0;white-space:nowrap}ul.lp-meta-box__course-tab__tabs li.active a{border-right:0;border-bottom-color:#3b82f6}}#lp-course-builder-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:28px 0 0;color:#1f2937;max-width:100%;box-sizing:border-box}#lp-course-builder-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f5f5f5}#lp-course-builder-content #lp-course-edit-curriculum .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,#lp-course-builder-content #lp-course-edit-curriculum .count-sections,#lp-course-builder-content #lp-course-edit-curriculum .total-items{background:#f5f5f5;color:#1e1e1e;font-size:12px;font-weight:600;padding:6px 18px;border-radius:12px;margin-right:10px}#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;margin-right:auto;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections{border:0}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:16px;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-left:12px;font-size:16px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-right:8px;cursor:pointer;font-weight:500}#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{border-bottom-color:#f3f4f6;border-radius:8px 8px 0 0}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover,#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-right:15px;color:#777;cursor:pointer}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}#lp-course-builder-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#f9fafb;border-radius:0 0 8px 8px;border-top:unset}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover{border-color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type{width:24px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center;margin-left:12px;opacity:.8;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f119\";font-family:dashicons;font-size:20px}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f469\";font-family:dashicons;font-size:20px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:underline}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:8px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a:hover{color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover{color:#ef4444}#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}#lp-course-builder-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum button,#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-right:auto;border-style:dashed !important}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:15px}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#1e1e1e;background:#fff}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;transition:border .2s}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#1e1e1e;color:#fff;border:0;padding:12px 24px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#333}#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden{display:none !important}.lp-cb-tab-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:28px 0 0;color:#1f2937;max-width:100%;box-sizing:border-box}.lp-cb-tab-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f5f5f5}.lp-cb-tab-content #lp-course-edit-curriculum .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .section-items-counts,.lp-cb-tab-content #lp-course-edit-curriculum .count-sections,.lp-cb-tab-content #lp-course-edit-curriculum .total-items{background:#f5f5f5;color:#1e1e1e;font-size:12px;font-weight:600;padding:6px 18px;border-radius:12px;margin-right:10px}.lp-cb-tab-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;margin-right:auto;padding:5px}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections{border:0}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:8px;margin-bottom:16px;transition:all .2s ease}.lp-cb-tab-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}.lp-cb-tab-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}.lp-cb-tab-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-left:12px;font-size:16px}.lp-cb-tab-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-right:8px;cursor:pointer;font-weight:500}.lp-cb-tab-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{border-bottom-color:#f3f4f6;border-radius:8px 8px 0 0}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:hover,.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down,.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-right:15px;color:#777;cursor:pointer}.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,.lp-cb-tab-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}.lp-cb-tab-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#f9fafb;border-radius:0 0 8px 8px;border-top:unset}.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}.lp-cb-tab-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}.lp-cb-tab-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type,.lp-cb-tab-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type:hover,.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover{border-color:#9ca3af}.lp-cb-tab-content #lp-course-edit-curriculum .item-ico-type{width:24px;height:24px;background-size:contain;background-repeat:no-repeat;background-position:center;margin-left:12px;opacity:.8;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f119\";font-family:dashicons;font-size:20px}.lp-cb-tab-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f469\";font-family:dashicons;font-size:20px}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:underline}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:8px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a:hover{color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum ul.item-actions li a.lp-icon-trash-o:hover{color:#ef4444}.lp-cb-tab-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex}.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum button,.lp-cb-tab-content #lp-course-edit-curriculum .section-actions .button,.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex}.lp-cb-tab-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}.lp-cb-tab-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-right:auto;border-style:dashed !important}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:15px}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#1e1e1e;background:#fff}.lp-cb-tab-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;transition:border .2s}.lp-cb-tab-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#1e1e1e;color:#fff;border:0;padding:12px 24px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}.lp-cb-tab-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#333}.lp-cb-tab-content #lp-course-edit-curriculum .lp-hidden{display:none !important}.lp-option-disabled{pointer-events:none;opacity:.5}#taxonomy-course_category.categorydiv{border:none !important;box-shadow:none !important;background:transparent !important;margin:0 !important}#taxonomy-course_category.categorydiv .category-tabs{display:flex !important;gap:20px;margin:0 0 15px 0 !important;padding:0 !important;border-bottom:2px solid #f0f0f0}#taxonomy-course_category.categorydiv .category-tabs li{display:inline-block !important;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv .category-tabs li a{text-decoration:none;font-size:14px;font-weight:600;color:#9ca3af;padding-bottom:8px;display:block;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}#taxonomy-course_category.categorydiv .category-tabs li.tabs a,#taxonomy-course_category.categorydiv .category-tabs li:hover a{color:#1e1e1e;border-bottom-color:#1e1e1e}#taxonomy-course_category.categorydiv .tabs-panel{border:none !important;box-shadow:none !important;padding:5px 0 !important;background:transparent !important;max-height:300px !important;overflow-y:auto !important;display:none}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar{width:6px}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}#taxonomy-course_category.categorydiv ul.categorychecklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 30px;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv ul.categorychecklist li{margin:0 !important;padding:0 !important;width:100%;list-style:none}#taxonomy-course_category.categorydiv ul.children{display:none !important;margin-right:20px !important;margin-top:5px !important;padding-right:10px !important;border-right:2px solid #e5e7eb;transition:all .3s ease}#taxonomy-course_category.categorydiv ul.children li{margin-bottom:5px !important}#taxonomy-course_category.categorydiv li.children-visible>ul.children{display:block !important}#taxonomy-course_category.categorydiv input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;margin-left:8px !important;position:relative}#taxonomy-course_category.categorydiv input[type=checkbox]:checked{background:#fff;border-color:#1e1e1e}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::after{content:\"\";position:absolute;right:4px;top:1px;width:5px;height:9px;border:solid #1e1e1e;border-width:0 0 2px 2px;transform:rotate(-45deg)}#taxonomy-course_category.categorydiv label{display:inline-flex !important;align-items:center;width:auto !important;font-size:14px;color:#4b5563;cursor:pointer;line-height:1.5}#course_category-adder{margin-top:20px !important;border-top:1px solid #f0f0f0;padding-top:15px}#course_category-add-toggle{text-decoration:none;font-weight:600;font-size:14px;color:#1e1e1e;display:flex;align-items:center}#course_category-add-toggle:hover{color:#2563eb}#course_category-add{display:none;margin-top:15px}#course_category-add label{display:none !important}#course_category-add input[type=text],#course_category-add select{width:100%;max-width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;margin-bottom:10px;font-size:14px;height:40px}#course_category-add-submit{background:#1e1e1e;color:#fff;border:0;padding:8px 20px;border-radius:6px;font-weight:500;cursor:pointer}#course_category-add-submit:hover{background:#333}.lp-cat-toggle{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:5px;cursor:pointer;color:#9ca3af;transition:transform .2s ease,color .2s;font-size:12px}.lp-cat-toggle::before{content:\"\\f347\";font-family:dashicons}.lp-cat-toggle:hover{color:#1e1e1e;background-color:#f3f4f6;border-radius:50%}li.children-visible>label>.lp-cat-toggle{transform:rotate(-180deg)}#lp-course-builder .cb-list-lesson{list-style:none;display:grid;grid-template-columns:1fr;gap:20px;padding:0}#lp-course-builder .cb-tab-lesson__action{display:flex;justify-content:space-between;align-items:center}#lp-course-builder .cb-input-search-lesson{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-lesson::placeholder{color:#999}#lp-course-builder .cb-tab-lesson__action,#lp-course-builder .courses-builder__lesson-tab{width:calc(100% - 140px)}#lp-course-builder .lesson-action{position:relative;display:flex;align-items:center;gap:20px}#lp-course-builder .lesson-action-expanded{cursor:pointer;padding:15px 0 15px 20px}#lp-course-builder .lesson-action-expanded svg{width:24px;height:24px}#lp-course-builder .btn-edit-lesson{display:flex;align-items:center;text-decoration:none;font-size:16px;font-weight:500;border-radius:8px;padding:5px 15px;gap:5px;background-color:#fff;border:1px solid #1e1e1e}#lp-course-builder .btn-edit-lesson svg{width:1rem;height:1rem}#lp-course-builder .lesson-item{display:flex;flex-direction:row;padding:5px 20px;background:#fff;border-radius:16px;gap:20px;font-size:16px}#lp-course-builder .highlight-new-lesson{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .lesson-content{flex:1;display:flex;flex-direction:row;gap:20px;justify-content:space-between;align-items:center}#lp-course-builder .lesson-content__left{display:flex;gap:15px}#lp-course-builder .lesson-content__right{display:flex;align-items:center;gap:25px}#lp-course-builder .lesson__preview svg{height:20px;width:20px}#lp-course-builder .wap-lesson-title{margin-top:0;margin-bottom:0}#lp-course-builder .wap-lesson-title button{font-size:20px;background:#fff;border:0;text-decoration:none;max-width:234px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}#lp-course-builder .lesson-status.publish{color:#fff;background:#1e1e1e}#lp-course-builder .lesson-status.trash{color:#fff;background-color:#dc2626}#lp-course-builder .lesson-assigned-courses{max-width:300px;margin-left:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lesson-assigned-courses a{text-decoration:none}#lp-course-builder .lesson-action-expanded__items{display:flex;position:absolute;min-width:160px;top:0;left:0;transform:translate(-100%,10px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:rgba(0,0,0,0.1) 0 4px 12px;font-size:16px;font-weight:500}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#f5f5f5}#lp-course-builder .lesson-action-expanded:hover+.lesson-action-expanded__items,#lp-course-builder .lesson-action-expanded__items:hover{display:flex !important}.lp-course-builder-content__section .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .lesson-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .lesson-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__lesson-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-lesson-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .lesson-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-left:0 !important}.lp-course-builder-content__section .lesson-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .lesson-assigned-courses a,.lp-course-builder-content__section .lesson-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-lesson-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-lesson-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-lesson-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-lesson-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-lesson-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__lesson{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__lesson{background:#dc2626;color:#fff}.lp-course-builder-content__section .field-material__label{width:unset;max-width:unset;min-width:unset}.lp-course-builder-content__section .lp-material-btn-wrap{display:flex;gap:12px}.lp-course-builder-content__section #btn-lp--add-material,.lp-course-builder-content__section #btn-lp--save-material{padding:8px 25px;border-radius:5px;background:#fff;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db}.lp-course-builder-content__section table.lp-material--table thead.hidden{display:none}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}.lp-course-builder-content__section .cb-section__quiz-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .lp-question-type-label{background:#e5e7eb;color:#4b5563;font-size:11px;font-weight:600;text-transform:uppercase;padding:3px 8px;border-radius:4px;margin-left:10px;white-space:nowrap}.lp-course-builder-content__section .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;padding-bottom:8px}.lp-course-builder-content__section .lp-question-data-edit-header label{font-size:13px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.5px}.lp-course-builder-content__section .lp-answers-config{margin-top:15px}.lp-course-builder-content__section .lp-question-by-type{padding:15px;border-radius:12px;border:1px solid #dcdcde}.lp-course-builder-content__section .lp-question-choice-header{display:flex;justify-content:space-between;padding:12px 25px 10px 25px;font-size:12px;color:#1e1e1e;font-weight:600;text-transform:uppercase;margin-bottom:16px;background:#f5f5f5}.lp-course-builder-content__section .lp-question-answer-item{display:flex;align-items:center;margin-bottom:12px;border-radius:4px;padding:10px;border:1px solid #f5f5f5;border-top:1px solid #f5f5f5;position:relative}.lp-course-builder-content__section .lp-question-answer-item .drag{color:#d1d5db;cursor:move;margin-left:8px;font-size:14px}.lp-course-builder-content__section input.lp-question-answer-title-input{flex-grow:1;padding:8px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#374151;transition:border .2s;margin-left:10px}.lp-course-builder-content__section input.lp-question-answer-title-input:focus{border-color:#9ca3af;outline:0}.lp-course-builder-content__section .lp-btn-delete-question-answer{color:#ef4444;cursor:pointer;opacity:0;transition:opacity .2s;margin-left:10px;font-size:16px}.lp-course-builder-content__section .lp-question-answer-item:hover .lp-btn-delete-question-answer{opacity:1}.lp-course-builder-content__section .lp-question-answer-item input[type=radio],.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;outline:0;transition:all .2s;flex-shrink:0}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]{border-radius:4px}.lp-course-builder-content__section .lp-question-answer-item input:checked{border-color:#10b981}.lp-course-builder-content__section .lp-question-answer-item input:checked::after{content:\"\";position:absolute;top:50%;right:50%;transform:translate(50%,-50%);width:8px;height:8px;background:#10b981;border-radius:50%}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked{background:#10b981}.lp-course-builder-content__section .lp-question-answer-item input[type=checkbox]:checked::after{width:5px;height:9px;border:solid white;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg);background:transparent;border-radius:0}.lp-course-builder-content__section .lp-question-answer-item-add-new{display:flex;align-items:center;margin-top:10px;padding-right:10px;border-radius:4px;border:1px solid #f5f5f5;border-top:1px solid #f5f5f5}.lp-course-builder-content__section .lp-question-answer-item-add-new .lp-icon-plus{color:#9ca3af;margin-left:8px}.lp-course-builder-content__section input.lp-question-answer-title-new-input{flex-grow:1;border:1px dashed #d1d5db;padding:8px 12px;border-radius:6px;font-size:13px;margin-left:10px}.lp-course-builder-content__section input.lp-question-answer-title-new-input:focus{border:1px solid #9ca3af;outline:0}.lp-course-builder-content__section .lp-question-fib-buttons{flex-wrap:wrap}.lp-course-builder-content__section .lp-question-fib-buttons button,.lp-course-builder-content__section .lp-btn-add-question-answer{background:#fff;color:#374151;border:1px solid #d1d5db;padding:7px 14px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;min-width:fit-content}.lp-course-builder-content__section .lp-question-fib-buttons button.lp-btn-fib-save-content{border-color:#1e1e1e;background:#1e1e1e;color:#fff}.lp-course-builder-content__section .lp-btn-add-question-answer:hover{background:#e5e7eb;color:#1e1e1e}.lp-course-builder-content__section .lp-question-field-settings{padding:10px 20px;display:flex;flex-wrap:wrap;gap:12px;align-items:center;gap:6px 12px}.lp-course-builder-content__section .lp-question-field-settings__label label{font-size:13px;font-weight:600;color:#4b5563;display:block;margin-bottom:5px}.lp-course-builder-content__section .lp-question-field-settings input[name=lp-question-point-input]{width:80px;padding:6px 10px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px}.lp-course-builder-content__section .lp-question-fib-desc,.lp-course-builder-content__section .lp-question-field-settings___desc{font-size:12px;color:#9ca3af;margin-top:4px;font-style:italic}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:12px}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question.lp-icon-plus{color:#9ca3af}.lp-course-builder-content__section .lp-edit-quiz-wrap .add-new-question select{height:38px}.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input{flex-grow:1;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;min-width:200px}.lp-course-builder-content__section .lp-edit-quiz-wrap input.lp-question-title-new-input:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-course-builder-content__section select.lp-question-type-new{padding:0 12px 0 30px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#374151;cursor:pointer}.lp-course-builder-content__section button.lp-btn-add-question{background-color:#1e1e1e;color:#fff;border:0;padding:10px 20px;border-radius:6px;font-weight:600;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content}.lp-course-builder-content__section button.lp-btn-add-question:hover{background-color:#1e1e1e}.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select{background-color:#fff;color:#374151;border:1px solid #d1d5db;padding:10px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;min-width:fit-content}.lp-course-builder-content__section [class*=lp-icon-]:hover{color:#1e1e1e}.lp-course-builder-content__section button.lp-btn-show-popup-items-to-select:hover{background-color:#f3f4f6;border-color:#9ca3af}.lp-course-builder-content__section .lp-question-fib-option-header{background:#f5f5f5}.lp-course-builder-content__section .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:16px}.lp-course-builder-content__section .lp-btn-fib-option-delete:hover{color:#ef4444}.lp-course-builder-content__section .lp-question-fib-option-detail{font-size:16px}.lp-course-builder-content__section .lp-question-fib-option-detail>label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:flex-end;align-items:center}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]{order:1;margin-top:2px;appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked{background:#3b82f6}.lp-course-builder-content__section .lp-question-fib-option-detail input[type=checkbox]:checked:before{right:22px}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*{display:flex;gap:8px;font-size:14px;font-weight:500}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:space-between;align-items:self-start}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input{margin-top:3px}.lp-course-builder-content__section .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;font-weight:400}.lp-course-builder-content__section .lp-section-collapse{border-radius:6px}.lp-course-builder-content__section .cb-quiz-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .quiz-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-left:0 !important}.lp-course-builder-content__section .quiz-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .quiz-assigned-courses a,.lp-course-builder-content__section .quiz-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.lp-course-builder-content__section .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .quiz-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .quiz-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-quiz-edit-title{margin-bottom:24px}.lp-course-builder-content__section .cb-quiz-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-quiz-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-quiz-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-quiz-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-quiz-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}#lp-course-builder-content .lp-edit-quiz-wrap{background-color:#fff;border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,0.05);padding:30px;color:#1f2937;margin-top:20px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{border:0}#lp-course-builder-content .lp-edit-quiz-wrap .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;padding-bottom:15px;border-bottom:1px solid #f3f4f6}#lp-course-builder-content .lp-edit-quiz-wrap .heading h4{font-size:18px;font-weight:700;margin:0;color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .total-items{background:#f3f4f6;color:#6b7280;font-size:12px;font-weight:600;padding:4px 10px;border-radius:20px;margin-right:10px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all{cursor:pointer;color:#9ca3af;margin-right:auto;padding:5px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item{background:#fff;border:1px solid #e5e7eb;border-radius:100px;margin-bottom:12px;transition:all .2s ease}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-cancel-update-question-title{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-btn-remove-question{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px -1px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head{display:flex;align-items:center;padding:12px 16px;border-radius:8px;background-color:#fff}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom:1px solid #f3f4f6;border-radius:8px 8px 0 0;background-color:#f9fafb}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .drag{color:#9ca3af;cursor:grab;margin-left:10px;font-size:16px}#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input{flex-grow:1;border:1px solid transparent;background:transparent;font-size:15px;font-weight:600;color:#1f2937;padding:6px 10px;border-radius:6px;transition:all .2s;margin-left:10px}#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:hover,#lp-course-builder-content .lp-edit-quiz-wrap input.lp-question-title-input:focus{background:#fff;border-color:#e5e7eb;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle{color:#9ca3af;cursor:pointer;padding:6px;font-size:16px;text-decoration:none;display:flex;align-items:center;transition:color .2s}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-edit-question-title:hover{color:#3b82f6}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-btn-remove-question:hover{color:#ef4444}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-head .button{font-size:12px;padding:4px 10px;margin-left:5px;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-edit-main{padding:20px;background:#fff;border-radius:0 0 8px 8px}#lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner{font-size:12px}.lp-course-builder-content__section .question-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .question-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .question-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__question-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-question-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .question-assigned-quizzes{display:flex;flex-direction:column;align-items:end;margin-left:0 !important}.lp-course-builder-content__section .question-assigned-quizzes .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .question-assigned-quizzes a,.lp-course-builder-content__section .question-assigned-quizzes span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-question-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-question-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-question-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-question-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-question-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update__question{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__question{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}#lp-builder-popup-container{display:none;position:fixed;top:0;right:0;width:100%;height:100%;z-index:99999}#lp-builder-popup-container.active{display:block}#lp-builder-popup-container #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-builder-popup-container .field-material__label{width:150px;max-width:150px;min-width:150px;margin-left:11px}#lp-builder-popup-container .lp-material--field-wrap{display:flex;align-items:center;gap:11px;margin-top:11px}#lp-builder-popup-container .lp-material--field-external-link,#lp-builder-popup-container .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material--field-method{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material-save-field,#lp-builder-popup-container .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-builder-popup-container .lp-material--upload-wrap label{cursor:pointer;width:100%;max-width:200px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-right:56px}#lp-builder-popup-container .lp-material--field-upload{display:none}#lp-builder-popup-container .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-builder-popup-container .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-builder-popup-container .lp-material--upload-wrap label::before{content:\"📁 \";margin-left:5px}body.lp-popup-open{overflow:hidden}.lp-builder-popup-overlay{position:fixed;top:0;right:0;width:100%;height:100%;backdrop-filter:blur(3px);z-index:1}.lp-builder-popup{position:fixed;inset:5vh 5% 5vh 5%;width:auto;max-width:900px;max-height:none;height:auto;margin:auto;background-color:#fff;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2);z-index:2;display:flex;flex-direction:column;overflow:hidden;transition:inset .3s cubic-bezier(0.4,0,0.2,1),border-radius .3s cubic-bezier(0.4,0,0.2,1),max-width .3s cubic-bezier(0.4,0,0.2,1)}.lp-builder-popup--fullscreen{inset:0;max-width:100%;border-radius:0}.lp-builder-popup--loading{width:auto;max-width:none;padding:40px 60px;text-align:center}.lp-builder-popup__loader{display:flex;flex-direction:column;align-items:center;gap:15px}.lp-builder-popup__loader .lp-loading-circle{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#1e1e1e;border-radius:50%;animation:lp-popup-spin .8s linear infinite}.lp-builder-popup__loader span{color:#666;font-size:14px}.lp-builder-popup__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid #e5e7eb;background-color:#fff;flex-shrink:0}.lp-builder-popup__header-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__header-actions{display:flex;align-items:center;gap:8px}.lp-builder-popup__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-builder-popup__resize{background:0;border:0;font-size:16px;color:#9ca3af;cursor:pointer;padding:8px 10px;line-height:1;transition:all .2s;border-radius:4px;display:flex;align-items:center;justify-content:center}.lp-builder-popup__resize:hover{color:#1e1e1e;background-color:#f3f4f6}.lp-builder-popup__resize i{font-size:16px}.lp-builder-popup__close{background:0;border:0;font-size:24px;color:#9ca3af;cursor:pointer;padding:5px 10px;line-height:1;transition:color .2s;border-radius:4px}.lp-builder-popup__close:hover{color:#d63638;background-color:#fee2e2}.lp-builder-popup__body{flex:1;overflow-y:auto;padding:0;background-color:#fff}.lp-builder-popup__tabs{display:flex;list-style:none;margin:0;padding:0 24px;border-bottom:1px solid #e5e7eb;background-color:#fff;gap:8px}.lp-builder-popup__tab{padding:14px 20px;cursor:pointer;font-size:14px;font-weight:600;color:#6b7280;border-bottom:2px solid transparent;transition:all .2s;margin-bottom:-1px}.lp-builder-popup__tab:hover{color:#1e1e1e}.lp-builder-popup__tab.active{color:#1e1e1e;border-bottom-color:#1e1e1e}.lp-builder-popup__tab-content{padding:24px}.lp-builder-popup__tab-pane{display:none}.lp-builder-popup__tab-pane.active{display:block}.lp-builder-popup__notice{padding:15px;background-color:#f0f6fc;border-right:4px solid #3b82f6;color:#1e1e1e;margin:0 0 20px;border-radius:6px 0 0 6px}.lp-builder-popup__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 24px;border-top:1px solid #e5e7eb;background-color:#fff;flex-shrink:0}.lp-builder-popup__footer-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__footer-right{display:flex;align-items:center;gap:12px}.lp-builder-popup__btn{padding:8px 25px;border-radius:5px;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s;border:0}.lp-builder-popup__btn--cancel{background-color:#f3f4f6;color:#1a1a1a;border:1px solid #d1d5db}.lp-builder-popup__btn--cancel:hover{background-color:#e5e7eb}.lp-builder-popup__btn--save{background-color:#1e1e1e;color:#fff}.lp-builder-popup__btn--save:hover{background-color:#333}.lp-builder-popup__btn--save:disabled{opacity:.6;cursor:not-allowed}.lp-builder-popup__btn--trash{background-color:#dc2626;color:#fff}.lp-builder-popup__btn--trash:hover{background-color:#b91c1c}.lp-builder-popup .cb-button{padding:8px 25px;border-radius:5px;background:#f3f4f6;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup .cb-button:hover{background:#e5e7eb}.lp-builder-popup .cb-button.cb-btn-update__lesson,.lp-builder-popup .cb-button.cb-btn-update__question,.lp-builder-popup .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-update__lesson:hover,.lp-builder-popup .cb-button.cb-btn-update__question:hover,.lp-builder-popup .cb-button.cb-btn-update__quiz:hover{background:#333}.lp-builder-popup .cb-button.cb-btn-trash__lesson,.lp-builder-popup .cb-button.cb-btn-trash__question,.lp-builder-popup .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-trash__lesson:hover,.lp-builder-popup .cb-button.cb-btn-trash__question:hover,.lp-builder-popup .cb-button.cb-btn-trash__quiz:hover{background:#b91c1c}.lp-builder-popup .cb-button.cb-btn-publish__lesson,.lp-builder-popup .cb-button.cb-btn-publish__question,.lp-builder-popup .cb-button.cb-btn-publish__quiz{background:#1e1e1e;color:#fff;border:0}.lp-builder-popup .cb-button.cb-btn-publish__lesson:hover,.lp-builder-popup .cb-button.cb-btn-publish__question:hover,.lp-builder-popup .cb-button.cb-btn-publish__quiz:hover{background:#333}.lp-builder-popup .lesson-status,.lp-builder-popup .question-status,.lp-builder-popup .quiz-status{padding:5px 12px;font-size:12px;font-weight:500;background:#f3f4f6;border-radius:5px;text-transform:capitalize}.lp-builder-popup .lesson-status.publish,.lp-builder-popup .question-status.publish,.lp-builder-popup .quiz-status.publish{color:#fff;background:#1e1e1e}.lp-builder-popup .lesson-status.draft,.lp-builder-popup .question-status.draft,.lp-builder-popup .quiz-status.draft{color:#1a1a1a;background:#fbbf24}.lp-builder-popup .lesson-status.trash,.lp-builder-popup .question-status.trash,.lp-builder-popup .quiz-status.trash{color:#fff;background-color:#dc2626}.lp-builder-popup .cb-section__header{display:none}.lp-builder-popup .lp-meta-box,.lp-builder-popup .lp-meta-box-wrap{margin:0;background:transparent}.lp-builder-popup .lp-meta-box .lp-meta-box__inner,.lp-builder-popup .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{display:flex;align-items:center;gap:11px;margin:0;padding:0}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-builder-popup .form-field input[type=number]:focus,.lp-builder-popup .form-field input[type=text]:focus,.lp-builder-popup .form-field input[type=datetime-local]:focus,.lp-builder-popup .lp-meta-box__duration input[type=number]:focus,.lp-builder-popup .lp-meta-box__duration input[type=text]:focus,.lp-builder-popup .lp-meta-box__duration input[type=datetime-local]:focus,.lp-builder-popup .lp-meta-box-field input[type=number]:focus,.lp-builder-popup .lp-meta-box-field input[type=text]:focus,.lp-builder-popup .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field textarea,.lp-builder-popup .lp-meta-box__duration textarea,.lp-builder-popup .lp-meta-box-field textarea{order:3;width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;min-height:80px;resize:vertical}.lp-builder-popup .form-field textarea:focus,.lp-builder-popup .lp-meta-box__duration textarea:focus,.lp-builder-popup .lp-meta-box-field textarea:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field select,.lp-builder-popup .lp-meta-box__duration select,.lp-builder-popup .lp-meta-box-field select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;cursor:pointer}.lp-builder-popup .form-field select:focus,.lp-builder-popup .lp-meta-box__duration select:focus,.lp-builder-popup .lp-meta-box-field select:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field input[type=checkbox],.lp-builder-popup .lp-meta-box__duration input[type=checkbox],.lp-builder-popup .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-builder-popup .form-field input[type=checkbox]:before,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:before,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-builder-popup .form-field input[type=checkbox]:checked,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked{background:#3b82f6}.lp-builder-popup .form-field input[type=checkbox]:checked:before,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.lp-builder-popup .form-field input[type=checkbox]:focus,.lp-builder-popup .lp-meta-box__duration input[type=checkbox]:focus,.lp-builder-popup .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;align-items:center;gap:11px}.lp-builder-popup .form-field:has(input[type=checkbox]) input[type=checkbox],.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) input[type=checkbox],.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) input[type=checkbox]{order:1;margin-top:2px}.lp-builder-popup .form-field:has(input[type=checkbox]) .description,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]) .description,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]) .description{order:3}.lp-builder-popup .form-field._lp_hint_field,.lp-builder-popup .form-field._lp_explanation_field,.lp-builder-popup ._lp_duration_field,.lp-builder-popup ._lp_course_repurchase_option_field{flex-wrap:wrap}.lp-builder-popup .form-field._lp_hint_field .description,.lp-builder-popup .form-field._lp_explanation_field .description,.lp-builder-popup ._lp_duration_field .description,.lp-builder-popup ._lp_course_repurchase_option_field .description{width:100%;margin-right:161px;margin-top:6px}.lp-builder-popup .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.lp-builder-popup .lp-meta-box__duration .description{margin-top:4px}.lp-builder-popup #_lp_passing_grade,.lp-builder-popup #_lp_retake_count,.lp-builder-popup #_lp_pagination{max-width:100px}.lp-builder-popup .lp-radios-field-meta-box{list-style-type:none;margin:0;padding:0}.lp-builder-popup .lp-radios-field-meta-box li{margin-bottom:8px}.lp-builder-popup .lp-radios-field-meta-box li:last-child{margin-bottom:0}.lp-builder-popup .lp-radios-field-meta-box li label{display:flex;align-items:center;gap:8px;font-weight:400;width:auto;min-width:auto;max-width:none;cursor:pointer}.lp-builder-popup .lp-radios-field-meta-box li input[type=radio]{width:18px;height:18px;margin:0;cursor:pointer;accent-color:#1e1e1e}.lp-builder-popup .wp-editor-wrap{border:1px solid #d1d5db;border-radius:12px;overflow:hidden;background-color:#fff}.lp-builder-popup .wp-editor-wrap .wp-editor-tools{background-color:#f5f5f5;margin:8px 8px 0;border-radius:12px 12px 0 0}.lp-builder-popup .wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.lp-builder-popup .wp-editor-wrap button.insert-media,.lp-builder-popup .wp-editor-wrap input.button{color:#1e1e1e;border-color:#d1d5db;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;border-radius:4px;white-space:nowrap;box-sizing:border-box;background:#fff}.lp-builder-popup .wp-editor-wrap button.insert-media:hover,.lp-builder-popup .wp-editor-wrap input.button:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.lp-builder-popup .wp-editor-wrap .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap div.mce-statusbar{border-top:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button{margin:8px 0 8px 8px;border-bottom-color:#dcdcde;border-radius:4px;background:#f5f5f5;border:1px solid #d1d5db;padding:4px 12px;font-size:13px}.lp-builder-popup .wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#fff;color:#1e1e1e}.lp-builder-popup .wp-editor-wrap .mce-top-part,.lp-builder-popup .wp-editor-wrap .quicktags-toolbar{background-color:#f5f5f5;margin:0 8px 0;padding:0;border-radius:0 0 8px 8px}.lp-builder-popup .wp-editor-wrap .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap .quicktags-toolbar{padding:6px;border-bottom:0}.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0}.lp-builder-popup .wp-editor-wrap .mce-toolbar-grp>div{padding:0 8px 8px !important}.lp-builder-popup .wp-editor-wrap .wp-editor-container{border:0}.lp-builder-popup .wp-editor-wrap textarea.wp-editor-area{border:0;border-top:0;border-radius:0;padding:12px}.lp-builder-popup .wp-editor-container{border:none !important;background:#fff}.lp-builder-popup .mce-top-part{margin:0 !important}.lp-builder-popup .quicktags-toolbar{border-radius:0 0 8px 8px;margin:0 !important;padding:8px !important}.lp-builder-popup .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}.lp-builder-popup .lp-material--table th,.lp-builder-popup .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:right}.lp-builder-popup .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}.lp-builder-popup .lp-material--table td{font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-material--table tr:last-child td{border-bottom:0}.lp-builder-popup .lp-material--table tr:hover td{background-color:#f9fafb}.lp-builder-popup .lp-material--table thead.hidden{display:none}.lp-builder-popup .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}.lp-builder-popup #btn-lp--add-material,.lp-builder-popup #btn-lp--save-material{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup #btn-lp--add-material:hover,.lp-builder-popup #btn-lp--save-material:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .cb-lesson-edit-title,.lp-builder-popup .cb-quiz-edit-title,.lp-builder-popup .cb-question-edit-title{margin-bottom:24px;flex:1}.lp-builder-popup .cb-lesson-edit-title__label,.lp-builder-popup .cb-quiz-edit-title__label,.lp-builder-popup .cb-question-edit-title__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .cb-lesson-edit-title__input,.lp-builder-popup .cb-quiz-edit-title__input,.lp-builder-popup .cb-question-edit-title__input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;transition:all .2s}.lp-builder-popup .cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-quiz-edit-title__input:focus,.lp-builder-popup .cb-question-edit-title__input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .cb-lesson-edit-desc,.lp-builder-popup .cb-quiz-edit-desc,.lp-builder-popup .cb-question-edit-desc{margin-bottom:24px}.lp-builder-popup .cb-lesson-edit-desc__label,.lp-builder-popup .cb-quiz-edit-desc__label,.lp-builder-popup .cb-question-edit-desc__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box,.lp-builder-popup .lp-form-setting-question .lp-meta-box{margin:0;background:transparent}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-question .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:18px;font-weight:700;color:#1e1e1e;margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #e5e7eb;line-height:1.2}.lp-builder-popup .cb-section__question-title-assigned{display:flex;align-items:flex-start;gap:20px;margin-bottom:24px}.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label{color:#6b7280;margin-left:5px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover{text-decoration:underline}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .cb-section__lesson-title-assigned{display:flex;gap:40px;margin-bottom:24px}.lp-builder-popup .cb-section__lesson-title-assigned .cb-lesson-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .label{color:#6b7280;margin-left:5px}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .cb-section__quiz-title-assigned{display:flex;gap:40px;margin-bottom:24px}.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title{margin-bottom:0}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses{flex-shrink:0;padding:10px 14px;background-color:#f3f4f6;border-radius:6px;font-size:13px;margin-top:auto;border:1px solid #e5e7eb}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label{color:#6b7280;margin-left:5px}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a{color:#3b82f6;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .lp-edit-quiz-wrap .heading{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background-color:#f9fafb;border-bottom:1px solid #e5e7eb;margin:-24px -24px 24px;border-radius:0}.lp-builder-popup .lp-edit-quiz-wrap .heading h4{margin:0;font-size:15px;font-weight:600;color:#1e1e1e;width:80%}.lp-builder-popup .lp-edit-quiz-wrap .heading .total-items{font-size:13px;color:#6b7280;background:#e5e7eb;padding:4px 12px;border-radius:12px}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .one,.lp-builder-popup .lp-edit-quiz-wrap .plural{display:none}.lp-builder-popup .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:8px;margin-bottom:12px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:8px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input:focus{background:#fff;border-color:#d1d5db;outline:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#1e1e1e;color:#fff;padding:4px 10px;border-radius:4px;white-space:nowrap;font-weight:500}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#e5e7eb;border-radius:8px 8px 0 0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:16px;background:#f9fafb;border-radius:0 0 8px 8px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.clone{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #d1d5db;border-radius:8px;margin-top:16px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#3b82f6}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#3b82f6}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;background:#1e1e1e;color:#fff;border:0;border-radius:6px;font-weight:500;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover{background:#333}.lp-builder-popup .lp-edit-question-wrap .lp-question-edit-left,.lp-builder-popup .lp-question-edit-main .lp-question-edit-left{width:100%}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit{margin-bottom:24px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background-color:#f9fafb;border-bottom:1px solid #e5e7eb}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header label,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header label{font-weight:600;font-size:14px;margin:0;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-data-edit-header .lp-question-type-label,.lp-builder-popup .lp-question-edit-main .lp-question-data-edit-header .lp-question-type-label{font-size:12px;background-color:#1e1e1e;color:#fff;padding:4px 12px;border-radius:4px;font-weight:500}.lp-builder-popup .lp-edit-question-wrap .lp-answers-config,.lp-builder-popup .lp-question-edit-main .lp-answers-config{padding:16px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-choice-header,.lp-builder-popup .lp-question-edit-main .lp-question-choice-header{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #e5e7eb;margin-bottom:12px;font-weight:600;font-size:13px;color:#6b7280}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid #f3f4f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item:last-of-type:not(.clone),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item:last-of-type:not(.clone){border-bottom:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag{cursor:move;color:#9ca3af;font-size:16px;padding:4px}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .drag:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .drag:hover{color:#6b7280}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-spinner,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text],.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input{flex:1;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:focus,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=text]:hover:not(:focus),.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=text]:hover:not(:focus),.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-question-answer-title-input:hover:not(:focus){border-color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer{cursor:pointer;color:#9ca3af;padding:8px;border-radius:6px;transition:all .2s;display:flex;align-items:center;justify-content:center;background:transparent;border:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-icon-trash-o:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item .lp-btn-delete-question-answer:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-icon-trash-o:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item .lp-btn-delete-question-answer:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;transition:all .2s;flex-shrink:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:hover{border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked{border-color:#3b82f6;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:checked::after,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:checked::after{content:\"\";position:absolute;top:50%;right:50%;transform:translate(50%,-50%);width:10px;height:10px;background:#3b82f6;border-radius:50%}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=radio]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=radio]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:4px;cursor:pointer;position:relative;transition:all .2s;flex-shrink:0;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:hover{border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked{background:#3b82f6;border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:checked::after,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:checked::after{content:\"\";position:absolute;right:6px;top:2px;width:5px;height:10px;border:solid white;border-width:0 0 2px 2px;transform:rotate(-45deg)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item input[type=checkbox]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.clone,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.clone{display:none !important}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item.loading,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item.loading{opacity:.6;pointer-events:none}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new{display:flex;align-items:center;gap:12px;padding:16px 0 0;margin-top:12px;border-top:1px solid #e5e7eb}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-icon-plus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-icon-plus{color:#3b82f6;font-size:16px}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text],.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text],.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input{flex:1;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]:focus,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new input[type=text]::placeholder,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new input[type=text]::placeholder,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-question-answer-title-new-input::placeholder{color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer{padding:10px 16px;background:#f3f4f6;color:#6b7280;border:1px solid #d1d5db;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer:hover{background:#e5e7eb;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active{background:#1e1e1e;color:#fff;border-color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new button.active:hover,.lp-builder-popup .lp-edit-question-wrap .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new button.active:hover,.lp-builder-popup .lp-question-edit-main .lp-question-answer-item-add-new .lp-btn-add-question-answer.active:hover{background:#333}.lp-builder-popup .lp-edit-question-wrap .question-edit-details,.lp-builder-popup .lp-question-edit-main .question-edit-details{margin-top:24px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-section-collapse,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-section-collapse{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-builder-popup .lp-question-edit-main .question-edit-details.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle{padding:14px 16px;background-color:#f9fafb;cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background .2s;border-bottom:1px solid transparent}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header:hover,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle:hover,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header:hover,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle:hover{background-color:#f3f4f6}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header label,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle label,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header label,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle label{font-weight:600;font-size:14px;margin:0;cursor:pointer;color:#1e1e1e}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle{color:#6b7280;transition:transform .2s}.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-builder-popup .lp-edit-question-wrap .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-builder-popup .lp-question-edit-main .question-edit-details:not(.lp-collapse) .lp-trigger-toggle{border-bottom-color:#e5e7eb}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-icon-angle-down,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-question-wrap .question-edit-details .lp-section-collapse,.lp-builder-popup .lp-question-edit-main .question-edit-details .lp-section-collapse{padding:20px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid #f3f4f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings:last-child,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings:last-child{margin-bottom:0;padding-bottom:0;border-bottom:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label{margin-bottom:10px}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings__label label,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings__label label{font-weight:600;font-size:14px;color:#1e1e1e;display:block}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number],.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]{width:120px;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;background:#fff}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings input[type=number]:focus,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings input[type=number]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings___desc,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings___desc{margin-top:8px;font-size:13px;color:#6b7280;line-height:1.5}.lp-builder-popup .lp-edit-question-wrap .lp-question-field-settings .wp-editor-wrap,.lp-builder-popup .lp-question-edit-main .lp-question-field-settings .wp-editor-wrap{margin-top:0}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-options,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-options{margin-top:16px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item{display:flex;align-items:flex-start;gap:12px;padding:12px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;margin-bottom:12px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item.clone,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item.clone{display:none !important}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-index,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-index{font-weight:600;color:#6b7280;min-width:24px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input{flex:1;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-question-fib-option-title-input:focus{outline:0;border-color:#3b82f6}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete{cursor:pointer;color:#9ca3af;padding:8px;border-radius:6px;transition:all .2s}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover,.lp-builder-popup .lp-question-edit-main .lp-question-fib-blank-option-item .lp-btn-fib-option-delete:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-question-wrap .lp-question-fib-option-detail,.lp-builder-popup .lp-question-edit-main .lp-question-fib-option-detail{margin-top:12px;padding:12px;background:#fff;border:1px solid #e5e7eb;border-radius:6px}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content{padding:8px 14px;border:1px solid #d1d5db;border-radius:6px;background:#fff;font-size:13px;cursor:pointer;transition:all .2s;margin-left:8px;margin-bottom:8px}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content:hover,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content:hover,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-insert-blank.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-delete-all-blanks.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-save-content.loading,.lp-builder-popup .lp-edit-question-wrap .lp-btn-fib-clear-all-content.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-insert-blank.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-delete-all-blanks.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-save-content.loading,.lp-builder-popup .lp-question-edit-main .lp-btn-fib-clear-all-content.loading{opacity:.6;pointer-events:none}@keyframes lp-popup-spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}@media(max-width:768px){.lp-builder-popup{width:95%;max-height:95vh}.lp-builder-popup__header,.lp-builder-popup__footer{padding:12px 16px}.lp-builder-popup__tabs{padding:0 16px;overflow-x:auto}.lp-builder-popup__tab{padding:12px 16px;white-space:nowrap}.lp-builder-popup__tab-content{padding:16px}.lp-builder-popup__footer{flex-direction:column;gap:10px}.lp-builder-popup__footer-left,.lp-builder-popup__footer-right{width:100%;justify-content:center}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{flex-wrap:wrap}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{width:100%;min-width:100%;max-width:100%;margin-bottom:8px}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{max-width:100%}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;flex-wrap:wrap}.lp-builder-popup .form-field:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox])>label{width:auto;min-width:auto;max-width:none;margin-bottom:0}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{margin-right:0 !important}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__lesson-title-assigned{flex-direction:column;gap:16px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__lesson-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{margin-top:0;align-items:flex-start}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{flex-wrap:wrap}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{width:100%}}.learn-press-course-builder #lp-course-builder-content{background:#fff;padding:24px;border-radius:8px}.learn-press-course-builder .cb-section__course-edit{background:#fff;border-radius:16px;min-height:calc(100% - 100px)}.learn-press-course-builder .cb-section__course-edit .cb-section__header-left{display:flex;align-items:center;gap:10px;margin-bottom:20px;margin-top:28px}.learn-press-course-builder .cb-section__course-edit .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.learn-press-course-builder .cb-section__course-edit .cb-section__header{display:flex;justify-content:space-between;align-items:center}.learn-press-course-builder .cb-section__course-edit .cb-section__header-action{display:flex;gap:20px}.learn-press-course-builder .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.learn-press-course-builder .cb-section__course-edit .cb-button.loading{pointer-events:none;opacity:.8}.learn-press-course-builder .cb-section__course-edit .cb-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.learn-press-course-builder .cb-section__course-edit .lp-meta-box{background:transparent}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{display:flex;flex-direction:column;gap:24px}.learn-press-course-builder .cb-section__course-edit .form-field,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration{display:flex;align-items:center;gap:11px;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,.learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field{flex-wrap:wrap}.learn-press-course-builder .cb-section__course-edit .form-field label,.learn-press-course-builder .cb-section__course-edit .form-field label span,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,.learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label{font-size:14px;color:#1a1a1a;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;color:#23282d;font-weight:600;flex:0 0 auto}.learn-press-course-builder .cb-section__course-edit .lesson-materials{flex-wrap:nowrap;gap:10px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field textarea{order:3;width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=text]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff;cursor:pointer}.learn-press-course-builder .cb-section__course-edit select:focus{outline:0;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked{background:#3b82f6}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before{right:22px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:row;align-items:center;gap:11px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox]{order:1;margin-top:2px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{order:3}.learn-press-course-builder .cb-section__course-edit .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration .description{margin-top:4px}.learn-press-course-builder .cb-section__course-edit p.form-field,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration{padding:0;margin:0}.learn-press-course-builder .cb-section__course-edit p.form-field .description,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration .description{margin-top:6px}.learn-press-course-builder .cb-section__course-edit #_lp_passing_grade,.learn-press-course-builder .cb-section__course-edit #_lp_retake_count,.learn-press-course-builder .cb-section__course-edit #_lp_pagination{max-width:100px}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content{flex:1}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text]{max-width:100%;margin-bottom:10px}@media(max-width:768px){.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{gap:20px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{max-width:100%}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:column;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) label{min-width:auto}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{margin-right:0;margin-top:0}}.wp-editor-wrap{border:1px solid #ddd;border-radius:12px;overflow:hidden;background-color:#fff}.wp-editor-wrap .wp-editor-tools{background-color:#f5f5f5;margin:8px 8px 0;border-radius:12px 12px 0 0}.wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.wp-editor-wrap button.insert-media,.wp-editor-wrap input.button{color:#1e1e1e;border-color:#1e1e1e;display:inline-block;text-decoration:none;font-size:13px;line-height:2.15384615;min-height:30px;margin:0;padding:0 10px;cursor:pointer;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-top-part::before{box-shadow:none}.wp-editor-wrap div.mce-statusbar{border-top:0}.wp-editor-wrap .wp-editor-tabs button{margin:8px 0 0 8px;border-bottom-color:#dcdcde;border-radius:4px}.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#fff;color:#000}.wp-editor-wrap .mce-top-part,.wp-editor-wrap .quicktags-toolbar{background-color:#f5f5f5;margin:0 8px 0;padding:0;border-radius:0 0 8px 8px}.wp-editor-wrap .mce-top-part::before{box-shadow:none}.wp-editor-wrap .quicktags-toolbar{padding:6px;border-bottom:0}.wp-editor-wrap .wp-media-buttons{padding:8px 8px 0}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0}.wp-editor-wrap .mce-toolbar-grp>div{padding:5px}.wp-editor-wrap .wp-editor-container{border:0}#lp-builder-popup-container .wp-editor-container{border:none !important;background:#fff}#lp-builder-popup-container .mce-top-part{margin:0 !important}#lp-builder-popup-container .lp-question-field-settings .mce-top-part{margin:0 8px 0 !important}#lp-builder-popup-container .quicktags-toolbar{border-radius:0 0 8px 8px;margin:0 !important;padding:8px !important}.lp-popup-items-to-select .header{padding:0 20px;flex-shrink:0}.lp-popup-items-to-select .header ul.tabs{display:flex;margin-top:10;padding:0;list-style:none;gap:20px;border-bottom:unset}.lp-popup-items-to-select ul.tabs li{margin:0}.lp-popup-items-to-select .header ul.tabs li.tab a{display:block;text-decoration:none;color:#6b7280;font-weight:600;font-size:14px;transition:all .2s;border-radius:6px;border:1px solid #f5f5f5}.lp-popup-items-to-select .header ul.tabs li.tab.active a,.lp-popup-items-to-select .header ul.tabs li.tab a:hover{background:#f5f5f5;color:#1e1e1e}input.lp-search-title-item{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;color:#374151;background:#fff;margin-bottom:15px;outline:0;box-shadow:0 1px 2px rgba(0,0,0,0.05);transition:border-color .2s}input.lp-search-title-item:focus{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-target ul.list-items{list-style:none;margin:0;padding:0;background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;gap:0;max-height:500px}.lp-select-item{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background .2s}.lp-select-item:last-child{border-bottom:0}.lp-select-item:hover{background-color:#f5f5f5}.lp-select-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d1d5db;border-radius:4px;margin-left:12px;cursor:pointer;position:relative;outline:0;flex-shrink:0}.lp-select-item input[type=checkbox]:checked{background-color:#1e1e1e;border-color:#1e1e1e}.lp-select-item input[type=checkbox]:checked::after{content:\"\";position:absolute;right:5px;top:1px;width:4px;height:9px;border:solid white;border-width:0 0 2px 2px;transform:rotate(-45deg)}.lp-select-item .title{font-size:14px;color:#374151;font-weight:500}.lp-select-item .title strong{color:#9ca3af;font-weight:400;margin-right:5px;font-size:12px}.list-items-wrap .learn-press-pagination{margin-top:20px;display:flex;justify-content:center}.list-items-wrap .learn-press-pagination ul.page-numbers{display:flex;gap:5px;list-style:none;padding:0;margin:0;border:0}.list-items-wrap .page-numbers li span.page-numbers.current,.list-items-wrap .page-numbers li a.page-numbers{display:flex;align-items:center;justify-content:center;height:32px;border-radius:6px;font-size:13px;text-decoration:none;font-weight:500;border:1px solid transparent}.list-items-wrap .page-numbers li span.page-numbers.current{background-color:#1e1e1e;color:#fff}.list-items-wrap .page-numbers li a.page-numbers{background-color:#fff;color:#6b7280;border-color:#e5e7eb;transition:all .2s}.list-items-wrap .page-numbers li a.page-numbers:hover{border-color:#9ca3af;color:#1e1e1e}.list-items-wrap .page-numbers i{font-size:14px}.lp-popup-items-to-select .footer{background:#fff;align-items:center;justify-content:space-between;flex-shrink:0}.lp-popup-items-to-select .button{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .2s}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active){background-color:#333;color:#fff;order:2}.lp-btn-add-items-selected:hover:not(:disabled){background-color:#333}.lp-btn-add-items-selected:disabled{background-color:#f5f5f5;color:#9ca3af;cursor:not-allowed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover{background-color:#1e1e1e}.lp-btn-count-items-selected{background:transparent;color:#6b7280;border:1px dashed #d1d5db;font-size:13px;order:1}.lp-btn-back-to-select-items{background:#fff;border:1px solid #d1d5db;color:#374151;order:0}.lp-btn-back-to-select-items:hover{background-color:#f5f5f5}.lp-popup-items-to-select ul.list-items-selected{padding-right:0;background:#fff;margin-bottom:20px;gap:0}.lp-popup-items-to-select ul.list-items-selected li{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #f5f5f5;color:#1e1e1e;cursor:pointer;transition:background .2s}.lp-hidden{display:none !important}.lp-popup-items-to-select .header .tabs .tab.active::after{display:none !important}.lp-popup-items-to-select .header .tabs .tab:not(:last-child)::before{display:none}.lp-popup-items-to-select .list-items-selected li:hover{background:#f5f5f5}.lp-popup-items-to-select .list-items-selected li{padding:5px}\n\\ No newline at end of file\n+@charset \"UTF-8\";body{margin:0;padding:0}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-right:15px;padding-left:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}.lp-btn-ai-style{background:#f6f7f7;border:1px solid #2271b1;color:#2271b1;text-decoration:none;text-shadow:none;display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;cursor:pointer;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.lp-btn-ai-style:active{box-shadow:none;color:#fff}.lp-btn-ai-style:hover{background:#6b46e9 !important;color:#fff !important}.lp-btn-generate-course-with-ai,.lp-btn-warning-enable-ai{position:absolute;margin:10px 10px 0 0 !important}.create-course-modal{padding:0;display:flex !important;flex-direction:column;overflow:hidden;border-radius:10px;background-color:#fff;height:90vh;z-index:10000000 !important}.create-course-modal .modal-content{display:grid;grid-template-columns:1fr 2fr;flex-grow:1;gap:30px;min-height:500px;padding:0 24px}.create-course-modal .input-section{display:flex;flex-direction:column}.create-course-modal .input-section label{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section h3{font-weight:700;line-height:22px;font-size:14px;color:#4a5568;margin-bottom:4px}.create-course-modal .input-section textarea,.create-course-modal .input-section .ts-wrapper .ts-control{width:100%;padding:4px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:.95em;background-color:#f7fafc;color:#1a202c;box-shadow:none;transition:border-color .2s,box-shadow .2s}.create-course-modal .input-section textarea:focus,.create-course-modal .input-section textarea:focus-within,.create-course-modal .input-section .ts-wrapper .ts-control:focus,.create-course-modal .input-section .ts-wrapper .ts-control:focus-within{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2;background-color:#fff}.create-course-modal .input-section textarea{min-height:150px;resize:vertical}.create-course-modal .input-section .outputs-control{margin-top:10px}.create-course-modal .input-section .outputs-control .outputs-control-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row}.create-course-modal .input-section .outputs-control .outputs-control-content .output-number-selector{width:120px;border-radius:6px;padding:10px 12px;border:1px solid #e5e7eb;font-size:.95em;background-color:#f7fafc;color:#1a202c;height:40px}.create-course-modal .input-section .lp-tom-select{width:100%}.create-course-modal .input-section .course-content-wrapper{background:#f7fafc;padding:8px 16px;border-radius:16px}.create-course-modal .input-section .course-content-wrapper input[readonly],.create-course-modal .input-section .course-content-wrapper textarea[readonly]{background-color:#fff !important;cursor:not-allowed;opacity:.8}.create-course-modal .input-section .course-content-wrapper input[readonly]:focus,.create-course-modal .input-section .course-content-wrapper textarea[readonly]:focus{box-shadow:none;border-color:#e5e7eb}.create-course-modal .output-section{display:flex;flex-direction:column}.create-course-modal .output-section .output-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.create-course-modal .output-section .output-header h3{font-weight:700;line-height:22px;font-size:14px;color:#1a202c}.create-course-modal .output-section .output-header .icon-button{background:0;border:0;padding:4px;cursor:pointer;color:#a0aec0}.create-course-modal .output-section .output-header .icon-button:hover{color:#4a5568}.create-course-modal .output-section .output-item{border-radius:6px;margin-bottom:16px;background-color:#fff;position:relative}.create-course-modal .output-section .output-item.prompt-item textarea{background-color:#f7fafc;min-height:80px}.create-course-modal .output-section .output-item.output-suggestion textarea{border-color:#dbd6f7;min-height:80px}.create-course-modal .output-section .output-item p.prompt{font-weight:500;color:#4a5568;font-size:.875rem;margin-bottom:4px}.create-course-modal .output-section .output-item .generate-button{background-color:#7e6ce2;color:#fff;border:0;padding:12px 20px;border-radius:6px;font-size:1rem;font-weight:500;cursor:pointer;width:25%;margin-top:10px}.create-course-modal .output-section .output-item .generate-button:hover{opacity:.9}.create-course-modal .output-section .output-item textarea{width:100%;box-sizing:border-box;border:1px solid #e5e7eb;border-radius:6px;padding:10px 12px;resize:vertical;font-size:.95em;color:#1a202c;transition:border-color .2s,box-shadow .2s}.create-course-modal .output-section .output-item textarea:focus{outline:0;border-color:#7e6ce2;box-shadow:0 0 0 1px #7e6ce2}.create-course-modal .output-section .output-item .output-actions{position:absolute;top:30%;left:2%;display:flex;gap:8px;visibility:hidden}.create-course-modal .output-section .output-item .output-actions .action-button{font-size:.875rem;font-weight:500;padding:6px 12px;border-radius:6px;cursor:pointer;border:1px solid #e5e7eb;background-color:#fff;color:#4a5568;transition:background-color .2s,color .2s,border-color .2s}.create-course-modal .output-section .output-item .output-actions .action-button.copy-button:hover{background-color:#f7fafc;border-color:#c8ccd5}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button{background-color:#7e6ce2;border-color:#7e6ce2;color:#fff}.create-course-modal .output-section .output-item .output-actions .action-button.apply-button:hover{opacity:.9}.create-course-modal .output-section .output-item:hover .output-actions{visibility:visible}.create-course-modal .output-section #lp-ai-output-suggestion{overflow-y:auto;flex-grow:1;padding-left:5px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder{flex-grow:1;border:2px dashed #e5e7eb;border-radius:6px;background-color:#e5e7eb;position:relative;height:150px;width:100%;background-position:center;background-repeat:no-repeat;margin-bottom:10px}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions{position:absolute;bottom:5px;right:80%;transform:translateX(50%);display:flex;gap:10px;width:30%}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .action-button{padding:5px 20px;border-radius:4px;border:1px solid #e5e7eb;background-color:rgba(255,255,255,0.8);cursor:pointer}.create-course-modal .output-section #lp-ai-output-suggestion .output-placeholder .output-actions .apply-button{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.create-course-modal .ts-wrapper .ts-control .item{background-color:#f7fafc;border:1px solid #e5e7eb;color:#4a5568;border-radius:20px;padding:4px 10px}.create-course-modal .ts-wrapper .ts-control .ts-input::placeholder{color:#a0aec0}.create-course-modal .modal-content{gap:40px;padding:24px 30px}.create-course-modal .modal-content .input-section .form-group{margin-bottom:16px}.create-course-modal .modal-content .input-section .form-group label{margin-bottom:6px;display:block}.create-course-modal .modal-content .input-section .lp-ai-modal-grid.lp-ai-grid-2-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px;margin-bottom:16px}.create-course-modal .modal-content .input-section h3{font-size:16px;font-weight:600;color:#1a202c;margin-top:20px;margin-bottom:8px}.create-course-modal .modal-content .input-section h3:first-child{margin-top:0}.create-course-modal .modal-content .input-section p.description{font-size:12px;color:#4a5568;margin:-4px 0 16px 0}.create-course-modal .modal-content .input-section .lp-notice.notice-warning{background-color:#fefce8;border:1px solid #fde047;border-radius:6px;padding:12px;margin:10px 0 20px 0;font-size:14px;color:#713f12}.create-course-modal .modal-content .input-section .lp-notice.notice-warning a{font-weight:600;color:#713f12;text-decoration:underline}.create-course-modal .modal-content .output-section .output-placeholder-wrapper{display:flex;justify-content:center;align-items:center;text-align:center;height:100%;min-height:200px;background-color:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;padding:20px}.create-course-modal .modal-content .output-section .output-placeholder-wrapper p{color:#4a5568;font-size:15px}.create-course-modal .modal-content .output-section .output-header .icon-button{display:inline-flex;align-items:center;justify-content:center;color:#4a5568}.create-course-modal .modal-content .output-section .output-header .icon-button svg{width:20px;height:20px}.lp-generate-data-ai-wrap{width:100%;max-height:90%}.lp-generate-data-ai-wrap .content-title{color:#111}.lp-generate-data-ai-wrap .step-header{display:flex;justify-content:space-between;margin-bottom:30px;padding:0 20px;gap:10px}.lp-generate-data-ai-wrap .step-header .step-item{display:flex;align-items:center;font-size:14px;color:#1a202c;position:relative;flex-grow:1;justify-content:center}.lp-generate-data-ai-wrap .step-header .step-item.active .step-number{background-color:#7e6ce2;color:#fff;border-color:#7e6ce2}.lp-generate-data-ai-wrap .step-header .step-item .step-text{color:#111;font-weight:600}.lp-generate-data-ai-wrap .step-header .step-item .step-number{width:28px;height:28px;border-radius:50%;border:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;margin-left:10px;font-weight:500;background-color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai{border:1px solid #e5e7eb;border-radius:10px;padding:20px;text-align:right}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-form-fields{min-height:400px;max-height:600px;overflow:auto;padding:0 2px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-title{font-size:1.2em;font-weight:600;margin-bottom:10px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-content.active{display:block}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header h2{font-size:24px;font-weight:700;margin:0 0 8px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step-header p{font-size:15px;color:#1a202c;margin:0 0 30px 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 30px;margin-bottom:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group{margin-bottom:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group.full-width{grid-column:1\u002F-1}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group label{display:block;font-size:14px;font-weight:600;margin-bottom:8px;color:#111}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .lp-tom-select.ts-wrapper{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{width:100%;padding:8px 16px;border-radius:10px;border:1px solid #e5e7eb;font-size:14px;line-height:1.5;box-sizing:border-box;transition:border-color .2s,box-shadow .2s;margin:0;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control:focus,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea:focus{outline:0;border-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .item,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .item{border:1px solid #e5e7eb;color:#4a5568;border-radius:6px;padding:4px 10px;background-color:transparent}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group input .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .ts-wrapper .ts-control .ts-input::placeholder,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea .ts-input::placeholder{color:#a0aec0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group textarea{min-height:86px;resize:vertical}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .field-description{color:#898989;margin-top:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .title-refer,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .form-group .description-refer{padding:0;border:0;font-size:16px;min-height:unset;box-shadow:none;border-radius:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai #prompt-preview{min-height:120px;background-color:#f9fafb;color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .button-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt{display:flex;justify-items:center;align-items:center;gap:10px;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .generate-prompt img{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button{padding:10px 20px;font-size:15px;font-weight:600;border-radius:8px;cursor:pointer;border:1px solid transparent;transition:all .2s;display:inline-flex;align-items:center;gap:8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-primary:hover{background-color:#1a202c}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary{background-color:#fff;color:#7e6ce2;border-color:#7e6ce2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-secondary:hover,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button-secondary:hover{background-color:#7e6ce2;color:#fff}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn:disabled,.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-button:disabled{background-color:#e5e7eb;color:#1a202c;cursor:not-allowed;border-color:#e5e7eb}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout{display:flex;gap:30px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-left-panel{flex:2}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .step4-right-panel{flex:1;min-width:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details{display:none}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details h3{font-size:24px;font-weight:700;color:#111827;margin-top:0;margin-bottom:24px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .course-cover-placeholder{width:100%;height:50vh;background-color:#e5e7eb;border-radius:8px;display:flex;justify-content:center;align-items:center;justify-items:center;font-size:20px;color:#6b7280;margin-bottom:30px;font-weight:600}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-title{font-size:18px;font-weight:700;margin-top:30px;margin-bottom:16px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum{font-size:18px;font-weight:700}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block{border-radius:8px;border:.8px solid #e5e7eb;padding:16px 8px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details .section-course-curriculum .course-curriculum-container .course-section-block h4{font-size:13px;font-weight:bold}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details p{font-size:15px;line-height:1.6;color:#374151;margin-top:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details ul{list-style:none;padding:0;margin:12px 0 0 0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li{position:relative;padding-right:20px;margin-bottom:8px;color:#374151;font-size:15px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .course-details li::before{content:\"•\";position:absolute;right:0;color:#1a202c;line-height:1.5}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel{background-color:#f9fafb;padding:24px;border-radius:8px;border:1px solid #e5e7eb;height:fit-content}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel h3{font-size:16px;font-weight:600;margin-top:0;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list{display:none;list-style:none;padding:0;margin:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li{display:flex;align-items:center;font-size:15px;color:#374151;margin-bottom:12px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li span{margin-left:5px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .step4-layout .summary-panel .summary-list li svg{color:#1a202c;width:20px;height:20px;margin-left:12px;flex-shrink:0}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea[name=lp-openai-prompt-generated-field]{min-height:300px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai textarea.lp-ai-string-result{width:100%}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results{display:grid;gap:10px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results .lp-ai-string-result{margin-bottom:4px}.lp-generate-data-ai-wrap .lp-form-generate-data-ai .lp-ai-generated-results button{margin-left:4px}.lp-generate-data-ai-wrap .lp-ai-course-data-preview-wrap{max-height:400px;overflow-y:auto;margin-bottom:20px}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup{position:absolute;top:10px;left:10px;background:0;border:0;font-size:20px;cursor:pointer;color:#ccc}.lp-generate-data-ai-wrap .lp-btn-close-ai-popup:hover{color:#f27474}.lp-generate-data-ai-wrap .lp-ai-warning-refer{border:1px solid #fcd34d;background-color:#fffbeb;padding:10px;border-radius:5px;display:flex;gap:5px;align-items:center}.lp-ai-course-data-preview-wrap .course-title{font-size:1.5em;font-weight:700;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-sections{margin-top:30px}.lp-ai-course-data-preview-wrap .section-title{font-weight:bold;font-size:1.2em;margin-bottom:10px;color:#1a202c}.lp-ai-course-data-preview-wrap .lesson-title,.lp-ai-course-data-preview-wrap .quiz-title,.lp-ai-course-data-preview-wrap .question-title{font-weight:600;font-size:1em;margin-bottom:8px;color:#1a202c}.lp-ai-course-data-preview-wrap .course-section-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:10px;padding:20px;margin:20px 0;background-color:#fff}.lp-ai-course-data-preview-wrap .course-section-items{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-section-items:last-child{margin-bottom:0}.lp-ai-course-data-preview-wrap .course-lesson-item,.lp-ai-course-data-preview-wrap .course-quiz-item,.lp-ai-course-data-preview-wrap .quiz-question-item{padding:12px 0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-ai-course-data-preview-wrap .course-lesson-item:last-child,.lp-ai-course-data-preview-wrap .course-quiz-item:last-child,.lp-ai-course-data-preview-wrap .quiz-question-item:last-child{padding-bottom:0}.lp-ai-course-data-preview-wrap .course-questions,.lp-ai-course-data-preview-wrap .course-question-options{margin:20px 20px 0 0}.lp-ai-course-data-preview-wrap .course-questions:last-child,.lp-ai-course-data-preview-wrap .course-question-options:last-child{margin-bottom:0}.lp-ai-images-warp{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px;margin-top:20px;max-height:400px;overflow-y:auto}.lp-ai-images-warp .lp-ai-image-item{position:relative}.lp-ai-images-warp .lp-ai-image-item img{object-fit:contain;width:100%}.lp-ai-images-warp .lp-ai-image-item .lp-btn-ai-apply-image{position:absolute;top:5px;left:0;transform:translateX(5%);background-color:rgba(0,0,0,0.6);color:#fff;border:0;padding:6px 12px;border-radius:4px;font-size:.875rem;cursor:pointer;opacity:0;transition:opacity .2s}.lp-ai-images-warp .lp-ai-image-item:hover .lp-btn-ai-apply-image{opacity:1}.lp-creating-course-ai-wrap .loading-wrap{margin-top:20px}.lp-creating-course-ai-wrap .lp-loading-circle{width:40px;height:40px;border-width:5px}.lp-must-enable-ai-wrap{text-align:right;line-height:1.6em}.lp-must-enable-ai-wrap h2{margin-bottom:0}.lp-must-enable-ai-wrap h2 i{margin-left:10px;color:#dc2626}.lp-must-enable-ai-wrap .desc{color:#6b7280}.lp-must-enable-ai-wrap .p2{color:#6b7280}.lp-must-enable-ai-wrap a{color:#2563eb;text-decoration:underline;cursor:pointer}.lp-must-enable-ai-wrap .help-link{padding:16px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px}.lp-must-enable-ai-wrap .help-link a{text-decoration:none;margin-top:10px}.lp-must-enable-ai-wrap .help-link i{color:#2a73ab}.lp-must-enable-ai-wrap .button-actions{margin-top:20px;text-align:left}.lp-must-enable-ai-wrap .button-actions .lp-btn-close-ai-popup{border:0;color:#4b5563;background:0}.lp-must-enable-ai-wrap .button-actions .button-primary{background-color:#7e6ce2;color:#fff;border:0}.lp-must-enable-ai-wrap .button-actions .button-primary:hover{opacity:.9}.fui-loading-spinner-3{color:#7e6ce2;position:relative;width:100px;height:80px;margin-right:80px;display:none}.fui-loading-spinner-3 div{transform-origin:40px 40px;animation:rj9Ft 1.2s linear infinite}.fui-loading-spinner-3 div:after{content:\" \";display:block;position:absolute;top:3px;right:37px;width:6px;height:18px;border-radius:20%;background:#7e6ce2}.fui-loading-spinner-3 div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.fui-loading-spinner-3 div:nth-child(2){transform:rotate(-30deg);animation-delay:-1s}.fui-loading-spinner-3 div:nth-child(3){transform:rotate(-60deg);animation-delay:-0.9s}.fui-loading-spinner-3 div:nth-child(4){transform:rotate(-90deg);animation-delay:-0.8s}.fui-loading-spinner-3 div:nth-child(5){transform:rotate(-120deg);animation-delay:-0.7s}.fui-loading-spinner-3 div:nth-child(6){transform:rotate(-150deg);animation-delay:-0.6s}.fui-loading-spinner-3 div:nth-child(7){transform:rotate(-180deg);animation-delay:-0.5s}.fui-loading-spinner-3 div:nth-child(8){transform:rotate(-210deg);animation-delay:-0.4s}.fui-loading-spinner-3 div:nth-child(9){transform:rotate(-240deg);animation-delay:-0.3s}.fui-loading-spinner-3 div:nth-child(10){transform:rotate(-270deg);animation-delay:-0.2s}.fui-loading-spinner-3 div:nth-child(11){transform:rotate(-300deg);animation-delay:-0.1s}.fui-loading-spinner-3 div:nth-child(12){transform:rotate(-330deg);animation-delay:0s}@keyframes rj9Ft{0%{opacity:1}100%{opacity:0}}html{margin-top:0 !important}.lp-course-builder-canvas,.lp-toast,.swal2-container{font-family:BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;font-size:14px;line-height:1.5;color:#1e1e1e;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-course-builder-canvas *,.lp-course-builder-canvas *::before,.lp-course-builder-canvas *::after,.lp-toast *,.lp-toast *::before,.lp-toast *::after,.swal2-container *,.swal2-container *::before,.swal2-container *::after{box-sizing:border-box}.lp-course-builder-canvas button,.lp-toast button,.swal2-container button{font-family:BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-course-builder-canvas input[type=date],.lp-course-builder-canvas input[type=datetime-local],.lp-course-builder-canvas input[type=datetime],.lp-course-builder-canvas input[type=email],.lp-course-builder-canvas input[type=month],.lp-course-builder-canvas input[type=number],.lp-course-builder-canvas input[type=password],.lp-course-builder-canvas input[type=search],.lp-course-builder-canvas input[type=tel],.lp-course-builder-canvas input[type=text],.lp-course-builder-canvas input[type=time],.lp-course-builder-canvas input[type=url],.lp-course-builder-canvas input[type=week],.lp-toast input[type=date],.lp-toast input[type=datetime-local],.lp-toast input[type=datetime],.lp-toast input[type=email],.lp-toast input[type=month],.lp-toast input[type=number],.lp-toast input[type=password],.lp-toast input[type=search],.lp-toast input[type=tel],.lp-toast input[type=text],.lp-toast input[type=time],.lp-toast input[type=url],.lp-toast input[type=week],.swal2-container input[type=date],.swal2-container input[type=datetime-local],.swal2-container input[type=datetime],.swal2-container input[type=email],.swal2-container input[type=month],.swal2-container input[type=number],.swal2-container input[type=password],.swal2-container input[type=search],.swal2-container input[type=tel],.swal2-container input[type=text],.swal2-container input[type=time],.swal2-container input[type=url],.swal2-container input[type=week]{padding:0;line-height:normal;min-height:unset}.lp-course-builder-canvas input[type=date]:focus,.lp-course-builder-canvas input[type=datetime-local]:focus,.lp-course-builder-canvas input[type=datetime]:focus,.lp-course-builder-canvas input[type=email]:focus,.lp-course-builder-canvas input[type=month]:focus,.lp-course-builder-canvas input[type=number]:focus,.lp-course-builder-canvas input[type=password]:focus,.lp-course-builder-canvas input[type=search]:focus,.lp-course-builder-canvas input[type=tel]:focus,.lp-course-builder-canvas input[type=text]:focus,.lp-course-builder-canvas input[type=time]:focus,.lp-course-builder-canvas input[type=url]:focus,.lp-course-builder-canvas input[type=week]:focus,.lp-toast input[type=date]:focus,.lp-toast input[type=datetime-local]:focus,.lp-toast input[type=datetime]:focus,.lp-toast input[type=email]:focus,.lp-toast input[type=month]:focus,.lp-toast input[type=number]:focus,.lp-toast input[type=password]:focus,.lp-toast input[type=search]:focus,.lp-toast input[type=tel]:focus,.lp-toast input[type=text]:focus,.lp-toast input[type=time]:focus,.lp-toast input[type=url]:focus,.lp-toast input[type=week]:focus,.swal2-container input[type=date]:focus,.swal2-container input[type=datetime-local]:focus,.swal2-container input[type=datetime]:focus,.swal2-container input[type=email]:focus,.swal2-container input[type=month]:focus,.swal2-container input[type=number]:focus,.swal2-container input[type=password]:focus,.swal2-container input[type=search]:focus,.swal2-container input[type=tel]:focus,.swal2-container input[type=text]:focus,.swal2-container input[type=time]:focus,.swal2-container input[type=url]:focus,.swal2-container input[type=week]:focus{border-color:none;box-shadow:unset;outline:unset}.lp-course-builder-canvas input[type=checkbox]:focus,.lp-course-builder-canvas input[type=color]:focus,.lp-course-builder-canvas input[type=date]:focus,.lp-course-builder-canvas input[type=datetime-local]:focus,.lp-course-builder-canvas input[type=datetime]:focus,.lp-course-builder-canvas input[type=email]:focus,.lp-course-builder-canvas input[type=month]:focus,.lp-course-builder-canvas input[type=number]:focus,.lp-course-builder-canvas input[type=password]:focus,.lp-course-builder-canvas input[type=radio]:focus,.lp-course-builder-canvas input[type=search]:focus,.lp-course-builder-canvas input[type=tel]:focus,.lp-course-builder-canvas input[type=text]:focus,.lp-course-builder-canvas input[type=time]:focus,.lp-course-builder-canvas input[type=url]:focus,.lp-course-builder-canvas input[type=week]:focus,.lp-course-builder-canvas select:focus,.lp-course-builder-canvas textarea:focus,.lp-toast input[type=checkbox]:focus,.lp-toast input[type=color]:focus,.lp-toast input[type=date]:focus,.lp-toast input[type=datetime-local]:focus,.lp-toast input[type=datetime]:focus,.lp-toast input[type=email]:focus,.lp-toast input[type=month]:focus,.lp-toast input[type=number]:focus,.lp-toast input[type=password]:focus,.lp-toast input[type=radio]:focus,.lp-toast input[type=search]:focus,.lp-toast input[type=tel]:focus,.lp-toast input[type=text]:focus,.lp-toast input[type=time]:focus,.lp-toast input[type=url]:focus,.lp-toast input[type=week]:focus,.lp-toast select:focus,.lp-toast textarea:focus,.swal2-container input[type=checkbox]:focus,.swal2-container input[type=color]:focus,.swal2-container input[type=date]:focus,.swal2-container input[type=datetime-local]:focus,.swal2-container input[type=datetime]:focus,.swal2-container input[type=email]:focus,.swal2-container input[type=month]:focus,.swal2-container input[type=number]:focus,.swal2-container input[type=password]:focus,.swal2-container input[type=radio]:focus,.swal2-container input[type=search]:focus,.swal2-container input[type=tel]:focus,.swal2-container input[type=text]:focus,.swal2-container input[type=time]:focus,.swal2-container input[type=url]:focus,.swal2-container input[type=week]:focus,.swal2-container select:focus,.swal2-container textarea:focus{border-color:none;box-shadow:unset;outline:unset}.lp-course-builder-canvas input[type=checkbox],.lp-course-builder-canvas input[type=radio],.lp-toast input[type=checkbox],.lp-toast input[type=radio],.swal2-container input[type=checkbox],.swal2-container input[type=radio]{box-shadow:unset;margin:0}.lp-course-builder-canvas input[type=radio]:checked::before,.lp-course-builder-canvas input[type=checkbox]:checked::before,.lp-toast input[type=radio]:checked::before,.lp-toast input[type=checkbox]:checked::before,.swal2-container input[type=radio]:checked::before,.swal2-container input[type=checkbox]:checked::before{margin:0}.lp-course-builder-canvas a,.lp-toast a,.swal2-container a{color:#7067ed}.lp-course-builder-canvas a:hover,.lp-toast a:hover,.swal2-container a:hover{color:#5b52d1}.lp-course-builder-canvas a:focus,.lp-toast a:focus,.swal2-container a:focus{border-color:none;box-shadow:unset;outline:unset}#lp-course-builder{display:block !important;min-height:100vh;background:#fff;margin:0;padding:0}#lp-course-builder .lp-course-builder_layout{display:block !important;width:100%}#lp-course-builder .learn-press-course-builder{display:flex;flex-direction:column;min-height:100vh;background:#fff;margin:0;padding:0;width:100%}#lp-course-builder .learn-press-course-builder *{box-sizing:border-box}#lp-course-builder .lp-cb-body{display:flex;flex:1;min-height:calc(100vh - 60px)}#lp-course-builder .lp-cb-top-header{position:fixed;top:0;right:0;left:0;height:60px;background:#fff;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;justify-content:space-between;padding:0 24px;z-index:9;box-shadow:0 1px 3px rgba(0,0,0,0.05)}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo{display:flex;align-items:center}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a{display:flex;align-items:center;gap:10px;text-decoration:none;color:#1e1e1e;line-height:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo a:hover{color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .lp-cb-top-header__logo-image{display:block;width:auto;max-width:240px;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logo .dashicons{font-size:28px;width:28px;height:28px;color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__title{font-size:18px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar{position:relative;flex-shrink:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-avatar img{width:40px;height:40px;border-radius:50%;object-fit:cover;display:block}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__online-dot{position:absolute;bottom:1px;left:1px;width:10px;height:10px;background:#22c55e;border-radius:50%;border:2px solid #fff}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-info{display:flex;flex-direction:column;gap:2px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-name{font-size:14px;font-weight:600;color:#1e1e1e;line-height:1.3}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link{font-size:13px;color:#898989;text-decoration:none;line-height:1.3}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__user-link:hover{color:#7067ed}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:6px;color:#cfcfcf;text-decoration:none;transition:all .2s;margin-right:4px}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout svg{width:22px;height:22px;flex-shrink:0}#lp-course-builder .lp-cb-top-header .lp-cb-top-header__logout:hover{background:#fef2f2;color:#ef4444}#lp-course-builder-sidebar.lp-cb-sidebar{position:fixed !important;right:0 !important;top:60px !important;bottom:0 !important;width:260px !important;background:#fff !important;color:#000 !important;display:flex !important;flex-direction:column !important;z-index:8 !important;overflow-y:auto !important;padding:0 !important;border-radius:0 !important;border-left:1px solid #f5f5f5}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__header{display:none}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav{flex:1;padding:16px;margin:0;list-style:none;display:block !important;overflow-x:visible !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item{margin:0;padding:0;list-style:none;display:block !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{display:flex !important;align-items:center;padding:12px 20px;color:#000 !important;text-decoration:none;transition:all .2s ease;gap:12px;background:transparent !important;border:none !important;border-radius:12px !important;margin-top:6px}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a:hover{background:#eef1ff !important;color:#000 !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{font-size:20px;width:20px;height:20px;line-height:20px;color:inherit}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{font-size:15px;font-weight:500}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a{background:#eef1ff !important;color:#7067ed !important}#lp-course-builder-sidebar.lp-cb-sidebar ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item.is-active a .dashicons{color:#7067ed !important}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:6px;background:transparent;cursor:pointer;transition:all .2s;margin-right:auto;margin-bottom:16px;margin-left:16px;border:0;color:#aaa}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle svg{min-width:24px;height:24px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle .lp-toggle-expand{display:none}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__toggle:hover{background:#eef1ff;border-color:#d1d5db;color:#7067ed}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer{padding:16px;border-top:1px solid #f5f5f5;margin-top:auto;background:#fdfdfd;display:flex;flex-direction:column;gap:8px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer:empty{display:none}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item{display:flex;align-items:center;padding:12px 16px;color:#000;text-decoration:none;gap:12px;font-size:14px;transition:all .2s;border-radius:6px}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item:hover{background:#eef1ff;color:#7067ed}#lp-course-builder-sidebar.lp-cb-sidebar .lp-cb-sidebar__footer a.lp-cb-sidebar__item .dashicons{font-size:20px;width:20px;height:20px;flex-shrink:0}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed{width:72px !important}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav{padding:16px 8px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a{justify-content:center;padding:12px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .lp-cb-sidebar__item-title{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed ul.lp-cb-sidebar__nav li.lp-cb-sidebar__item a .dashicons{margin:0}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer{padding:16px 8px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle{margin:0 auto}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-collapse{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer .lp-cb-sidebar__toggle .lp-toggle-expand{display:block}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item{justify-content:center;padding:12px}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed .lp-cb-sidebar__footer a.lp-cb-sidebar__item .lp-cb-sidebar__item-title{display:none}#lp-course-builder-sidebar.lp-cb-sidebar.is-collapsed+#lp-course-builder-content.lp-cb-main,#lp-course-builder.has-collapsed-sidebar #lp-course-builder-content.lp-cb-main{margin-right:72px !important;width:calc(100% - 72px) !important}#lp-course-builder-content.lp-cb-main{flex:1;margin-right:260px !important;margin-top:60px !important;min-height:calc(100vh - 60px);padding:0 24px 24px !important;background:#fff !important;border-radius:0 !important;width:calc(100% - 260px) !important}html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 32px)}html:has(#wpadminbar) .lp-cb-top-header{top:32px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 32px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px) !important;min-height:calc(100vh - 60px)}@media screen and (max-width:782px){html:has(#wpadminbar) #lp-course-builder .lp-cb-body{min-height:calc(100vh - 60px - 46px)}html:has(#wpadminbar) .lp-cb-top-header{top:46px}html:has(#wpadminbar) #lp-course-builder-sidebar.lp-cb-sidebar{top:calc(60px + 46px) !important}html:has(#wpadminbar) #lp-course-builder-content.lp-cb-main{margin-top:calc(60px + 46px) !important;min-height:calc(100vh - 60px - 46px)}}.lp-cb-breadcrumb{padding:16px 12px;border-bottom:1px solid #f5f5f5;font-size:14px;background:#fff;border-radius:8px 8px 0 0}.lp-cb-breadcrumb .lp-cb-breadcrumb__item{color:#898989;text-decoration:none;transition:color .2s}.lp-cb-breadcrumb .lp-cb-breadcrumb__item:hover{color:#7067ed}.lp-cb-breadcrumb .lp-cb-breadcrumb__item.is-current{color:#1e1e1e;font-weight:500}.lp-cb-breadcrumb .lp-cb-breadcrumb__separator{margin:0 10px;color:#898989}#lp-course-builder .lp-cb-header{position:sticky;top:60px;z-index:99;display:flex;align-items:center;justify-content:space-between;padding:20px 12px;background:#fff;gap:30px}#lp-course-builder .lp-cb-header .lp-cb-header__left{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-header .lp-cb-header__title{margin:0;font-size:24px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-header .lp-cb-admin-link{display:inline-flex;align-items:center;justify-content:center;font-size:14px;padding:5px 12px;gap:10px;font-weight:500;border-radius:6px;color:#898989;text-decoration:none;transition:all .2s}#lp-course-builder .lp-cb-header .lp-cb-admin-link .dashicons{font-size:18px;width:18px;height:18px}#lp-course-builder .lp-cb-header .lp-cb-admin-link:hover{background:#f1f5f9;color:#7067ed}#lp-course-builder .lp-cb-header .lp-cb-header__actions{display:flex;gap:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button{padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;border:1px solid #f5f5f5;background:#fff;color:#1e1e1e;transition:all .2s}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button:hover{background:#f9fafb}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary,#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn{background:#7067ed !important;border-color:#7067ed !important;color:#fff !important}#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-button-primary:hover,#lp-course-builder .lp-cb-header .lp-cb-header__actions .lp-cb-save-btn:hover{background:#5b52d1 !important;border-color:#5b52d1 !important}html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 32px)}@media screen and (max-width:782px){html:has(#wpadminbar) .lp-cb-header{top:calc(60px + 46px)}}.course-status,.quiz-status,.quizze-status,.question-status,.lesson-status{display:inline-block;padding:4px 10px;border-radius:20px;font-size:12px;font-weight:500;text-transform:capitalize}.course-status.publish,.quiz-status.publish,.quizze-status.publish,.question-status.publish,.lesson-status.publish{background:#e7f6e9;color:#28a746}.course-status.draft,.quiz-status.draft,.quizze-status.draft,.question-status.draft,.lesson-status.draft{background:#f7f7f7;color:#aaa}.course-status.pending,.quiz-status.pending,.quizze-status.pending,.question-status.pending,.lesson-status.pending{background:#dbeafe;color:#1e40af}.course-status.private,.quiz-status.private,.quizze-status.private,.question-status.private,.lesson-status.private{background:#f3e8ff;color:#6b21a8}.course-status.trash,.quiz-status.trash,.quizze-status.trash,.question-status.trash,.lesson-status.trash{background:#fee2e2;color:#991b1b}.course-status.future,.quiz-status.future,.quizze-status.future,.question-status.future,.lesson-status.future{background:#ffd700;color:#333}#lp-course-builder .lp-cb-tabs{display:flex;border-bottom:1px solid #f5f5f5;background:#fff;gap:10px;margin:0;list-style:none}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item{padding:12px 24px;color:#898989;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent;border-radius:10px 10px 0 0}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item:hover{color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tabs .lp-cb-tabs__item.is-active{color:#7067ed;border-bottom-color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tab-content{padding:0;background:#fff;border-radius:0 0 8px 8px;margin-top:30px}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section{background:#fff;border-radius:0;min-height:auto}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header{display:flex;align-items:center;justify-content:space-between;padding:0 0 20px 0;margin-bottom:20px;border-bottom:1px solid #f5f5f5}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left{display:flex;align-items:center;gap:12px}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .lp-cb-section__title,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .lp-cb-section__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status{display:inline-block;padding:4px 10px;border-radius:4px;font-size:12px;font-weight:500;text-transform:capitalize}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.publish,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.publish{background:#e7f6e9;color:#28a746}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.draft,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.draft{background:#f7f7f7;color:#aaa}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-left .course-status.pending,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-left .course-status.pending{background:#dbeafe;color:#1e40af}#lp-course-builder .lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action,#lp-course-builder .lp-cb-tab-content .lp-course-builder-content__section .cb-section__header .cb-section__header-action{display:flex;gap:10px}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab{display:flex;gap:24px}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:0 0 200px;list-style:none;margin:0;padding:0;border-left:1px solid #f5f5f5}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li{margin:0}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{display:block;padding:12px 16px;color:#898989;text-decoration:none;border-right:2px solid transparent;transition:all .2s}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a:hover{color:#7067ed;background:#eef1ff}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{color:#7067ed;background:rgba(112,103,237,0.05);border-right-color:#7067ed;font-weight:500}#lp-course-builder .lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex:1;min-width:0}#lp-course-builder .lp-cb-footer{padding:20px 0;border-top:1px solid #f5f5f5;background:#fff;border-radius:0 0 8px 8px;margin-top:auto}#lp-course-builder .lp-cb-footer .lp-cb-footer__actions{display:flex;justify-content:flex-end;gap:12px}#lp-course-builder .lp-course-builder-content__tab{background:#fff;border-radius:8px;max-width:100%}#lp-course-builder .lp-course-builder-content__tab .lp-cb-tab__title{font-size:28px;font-weight:600;color:#1e1e1e;margin:20px 0 24px 0}.lp-cb-save-btn,#lp-course-builder .lp-button-primary{background:#7067ed !important;border-color:#7067ed !important;color:#fff !important;padding:10px 20px;border-radius:6px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-save-btn:hover,#lp-course-builder .lp-button-primary:hover{background:#5b52d1 !important;border-color:#5b52d1 !important}.lp-cb-save-btn.loading,.lp-cb-save-btn.lp-loading,.lp-cb-save-btn[aria-disabled=true],#lp-course-builder .lp-button-primary.loading,#lp-course-builder .lp-button-primary.lp-loading,#lp-course-builder .lp-button-primary[aria-disabled=true]{opacity:.7;pointer-events:none;cursor:not-allowed}.lp-cb-save-btn.has-changes,#lp-course-builder .lp-button-primary.has-changes{position:relative;animation:pulse-save 2s infinite}.lp-cb-save-btn.has-changes::after,#lp-course-builder .lp-button-primary.has-changes::after{content:\"\";position:absolute;top:-4px;left:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update,#lp-course-builder .cb-btn-preview,#lp-course-builder .cb-btn-darft,#lp-course-builder .cb-btn-publish,#lp-course-builder .cb-btn-pending{padding:10px 20px;font-size:14px;border-radius:12px;font-weight:500;cursor:pointer;border:0;transition:all .2s}#lp-course-builder .cb-btn-update.has-changes,#lp-course-builder .cb-btn-preview.has-changes,#lp-course-builder .cb-btn-darft.has-changes,#lp-course-builder .cb-btn-publish.has-changes,#lp-course-builder .cb-btn-pending.has-changes{position:relative}#lp-course-builder .cb-btn-update.has-changes::after,#lp-course-builder .cb-btn-preview.has-changes::after,#lp-course-builder .cb-btn-darft.has-changes::after,#lp-course-builder .cb-btn-publish.has-changes::after,#lp-course-builder .cb-btn-pending.has-changes::after{content:\"\";position:absolute;top:-4px;left:-4px;width:10px;height:10px;background:#ef4444;border-radius:50%;border:2px solid #fff}#lp-course-builder .cb-btn-update.loading,#lp-course-builder .cb-btn-update.lp-loading,#lp-course-builder .cb-btn-preview.loading,#lp-course-builder .cb-btn-preview.lp-loading,#lp-course-builder .cb-btn-darft.loading,#lp-course-builder .cb-btn-darft.lp-loading,#lp-course-builder .cb-btn-publish.loading,#lp-course-builder .cb-btn-publish.lp-loading,#lp-course-builder .cb-btn-pending.loading,#lp-course-builder .cb-btn-pending.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update{background:#7067ed;color:#fff}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update:hover{background:#5b52d1}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary{background:#7067ed;color:#fff;border-radius:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-update.cb-btn-primary:hover{background:#5b52d1}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview{border-radius:12px}#lp-course-builder .lp-cb-header .lp-cb-header__actions .cb-btn-preview:hover{border-color:#7067ed;color:#7067ed}#lp-course-builder.cb-btn-secondary{background:#fff;border:1px solid #e5e7eb;color:#1e1e1e}#lp-course-builder.cb-btn-secondary:hover{border-color:#7067ed;color:#7067ed;background:#f8fafc}#lp-course-builder .cb-btn-darft{background:#e5e7eb;color:#1e1e1e}#lp-course-builder .cb-btn-darft:hover{background:#d1d5db}#lp-course-builder .cb-btn-pending{background:#dbeafe;color:#1e40af}#lp-course-builder .cb-btn-pending:hover{background:#bfdbfe;color:#1e3a8a}#lp-course-builder .cb-btn-trash{cursor:pointer;font-size:16px;background:transparent;color:#ef4444;padding:10px 20px;border-radius:6px}#lp-course-builder .cb-btn-trash:hover{background:#fef2f2}#lp-course-builder .cb-header-action-expanded{position:relative;display:inline-flex;align-items:center}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded{padding:0;height:40px;width:40px;justify-content:center;border-radius:12px}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded:hover{background:#f7f7f7;border-color:#d1d5db}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded svg{width:18px;height:18px;color:#898989}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading:before{margin-top:0;margin-left:0}#lp-course-builder .cb-header-action-expanded .lp-button.course-action-expanded.loading svg{display:none}#lp-course-builder .cb-header-action-expanded .cb-header-action-expanded__items{position:absolute;top:calc(100% + 6px);left:0;min-width:180px;padding:8px;border:1px solid #f5f5f5;border-radius:12px;background:#fff;box-shadow:0 4px 12px rgba(0,0,0,0.1);display:flex;flex-direction:column;gap:2px;z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);pointer-events:none;transition:all .2s ease}#lp-course-builder .cb-header-action-expanded.is-open .cb-header-action-expanded__items{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash{gap:10px;color:#ef4444;font-size:14px;border:0}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash .dashicons{font-size:16px;width:16px;height:16px;color:#ef4444}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__trash:hover{background:#fef2f2}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate{gap:10px;font-size:14px;border:0}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate .dashicons{font-size:16px;width:16px;height:16px;color:#3b82f6}#lp-course-builder .cb-header-action-expanded .lp-button.cb-header-action-expanded__duplicate:hover{background:#dbeafe}#lp-course-builder .cb-header-actions-dropdown{position:relative;display:inline-flex}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;padding:0;background:#7067ed;border:1px solid #7067ed;border-right-color:#eef1ff;border-radius:12px 0 0 12px;cursor:pointer;transition:all .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#fff;transition:transform .2s}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{border-color:#7067ed;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover .dashicons{color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{border-color:#7067ed;background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(-180deg);color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading,#lp-course-builder .cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle{background:#dbeafe !important;border-color:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle .dashicons{color:#1e40af !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle:hover{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a !important}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:right}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#898989}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#7067ed}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.loading,#lp-course-builder .cb-header-actions-dropdown .cb-dropdown-item.lp-loading{opacity:.7;pointer-events:none}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle{background:#d1d5db !important;border-color:#d1d5db !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons{color:#374151 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover{background:#b8bcc4 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true],#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8bcc4 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons,#lp-course-builder .cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#374151 !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle{background:#dbeafe !important;border-color:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons{color:#1e40af !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe !important}#lp-course-builder .cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a !important}.cb-header-actions-dropdown{position:relative;display:inline-flex}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action{background:#dbeafe;color:#1e40af}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action:hover{background:#bfdbfe;color:#1e3a8a}.cb-header-actions-dropdown .cb-btn-dropdown-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:auto;padding:10px 0;background:#d0e3ff;border:0;border-radius:12px 0 0 12px;cursor:pointer;transition:all .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle .dashicons{font-size:16px;width:16px;height:16px;color:#7067ed;transition:transform .2s}.cb-header-actions-dropdown .cb-btn-dropdown-toggle:hover{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8d4ff}.cb-header-actions-dropdown .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{transform:rotate(-180deg)}.cb-header-actions-dropdown .cb-btn-dropdown-toggle.loading,.cb-header-actions-dropdown .cb-btn-dropdown-toggle.lp-loading{opacity:.7;pointer-events:none}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle{background:#dbeafe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle .dashicons{color:#1e40af}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle:hover{background:#bfdbfe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe}.cb-header-actions-dropdown .cb-btn-pending.cb-btn-main-action+.cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle{background:#d1d5db}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle .dashicons,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle .dashicons{color:#374151}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle:hover,.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle:hover{background:#b8bcc4}.cb-header-actions-dropdown[data-current-status=trash] .cb-btn-dropdown-toggle[aria-expanded=true],.cb-header-actions-dropdown[data-current-status=draft] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#b8bcc4}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle{background:#dbeafe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle .dashicons{color:#1e40af}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle:hover{background:#bfdbfe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true]{background:#bfdbfe}.cb-header-actions-dropdown[data-current-status=pending] .cb-btn-dropdown-toggle[aria-expanded=true] .dashicons{color:#1e3a8a}.cb-header-actions-dropdown .cb-dropdown-menu{position:absolute;top:calc(100% + 4px);left:0;min-width:180px;background:#fff;border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);z-index:1000;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s ease}.cb-header-actions-dropdown .cb-dropdown-menu.is-open{opacity:1;visibility:visible;transform:translateY(0)}.cb-header-actions-dropdown .cb-dropdown-item{display:flex;align-items:center;gap:10px;padding:12px 16px;font-size:14px;color:#1e1e1e;cursor:pointer;transition:all .15s;border:0;background:transparent;width:100%;text-align:right}.cb-header-actions-dropdown .cb-dropdown-item .dashicons{font-size:16px;width:16px;height:16px;color:#898989}.cb-header-actions-dropdown .cb-dropdown-item:first-child{border-radius:7px 7px 0 0}.cb-header-actions-dropdown .cb-dropdown-item:last-child{border-radius:0 0 7px 7px}.cb-header-actions-dropdown .cb-dropdown-item:only-child{border-radius:7px}.cb-header-actions-dropdown .cb-dropdown-item:hover{background:#f8fafc}.cb-header-actions-dropdown .cb-dropdown-item:hover .dashicons{color:#7067ed}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger .dashicons{color:#ef4444}.cb-header-actions-dropdown .cb-dropdown-item.cb-btn-danger:hover{background:#fef2f2}.cb-header-actions-dropdown .cb-dropdown-item.loading,.cb-header-actions-dropdown .cb-dropdown-item.lp-loading{opacity:.7;pointer-events:none}@keyframes pulse-save{0%,100%{box-shadow:0 0 0 0 rgba(112,103,237,0.4)}50%{box-shadow:0 0 0 8px rgba(112,103,237,0)}}@media screen and (max-width:1024px){#lp-course-builder-sidebar.lp-cb-sidebar{width:220px !important}#lp-course-builder-content.lp-cb-main{margin-right:220px !important;width:calc(100% - 220px) !important}.lp-cb-tab-content .lp-meta-box__course-tab{flex-direction:column}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs{flex:none;border-left:0;border-bottom:1px solid #f5f5f5;display:flex;overflow-x:auto}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;white-space:nowrap}.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li.active a,.lp-cb-tab-content .lp-meta-box__course-tab .lp-meta-box__course-tab__tabs li a.active{border-right:0;border-bottom-color:#7067ed}}@media screen and (max-width:768px){.lp-cb-top-header{padding:0 16px}.lp-cb-top-header .lp-cb-top-header__user-info{display:none}#lp-course-builder-sidebar.lp-cb-sidebar{transform:translateX(100%);transition:transform .3s ease}#lp-course-builder-sidebar.lp-cb-sidebar.is-open{transform:translateX(0)}#lp-course-builder-content.lp-cb-main{margin-right:0 !important;width:100% !important}.lp-cb-header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-header .lp-cb-header__actions{width:100%;justify-content:flex-end}.lp-cb-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch}.lp-cb-tabs .lp-cb-tabs__item{white-space:nowrap;padding:12px 16px}.lp-cb-tab-content .cb-section__course-edit .cb-section__header{flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-section__header .cb-section__header-action{width:100%;flex-wrap:wrap}}.lp-cb-item-action-wrap{display:flex;justify-content:flex-end;gap:8px;position:relative}.lp-cb-item-action-expand-toggle{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0}.lp-cb-item-action-expand-toggle svg{width:18px;height:18px;color:#6b7280}.lp-cb-item-action-expand-toggle.lp-button{border:0}.lp-cb-item-action-expand-toggle:hover{background-color:#eef1ff}.lp-cb-item-action-expand{display:flex;position:absolute;min-width:160px;white-space:nowrap;top:60px;left:16px;transform:translate(-15px,-15px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}.lp-cb-item-action{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}.lp-cb-item-action:hover{background-color:#f3f4f6}.lp-cb-item-action.trash,.lp-cb-item-action.delete{color:#ef4444}.swal2-popup{padding:20px;border-radius:16px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup.lp-select-items-popup{padding:20px !important}button.swal2-close{height:32px;width:32px}button.swal2-cancel.swal2-styled{border-radius:10px;padding:10px 24px;background:#fff;color:#aaa;border:1px solid #e1e1e1;font-weight:500;min-width:140px}button.swal2-confirm.swal2-styled{background:#7067ed;border-radius:12px;padding:10px 24px;min-width:140px}.swal2-icon.swal2-icon-show{border:0;margin-bottom:5px}#swal2-title{padding:0;font-size:22px;color:#111}#swal2-html-container{padding-top:8px;font-size:15px;color:#4f4f4f}#swal2-html-container:has(.lp-must-enable-ai-wrap){padding:0}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:none !important;backdrop-filter:blur(3px)}div:where(.swal2-container).swal2-center>.swal2-popup{border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2)}.swal2-container .button{display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}.swal2-container .button:hover{background-color:#5b52d1}.swal2-container .button.lp-btn-close-ai-popup:hover{background-color:transparent;color:#7067ed}.swal2-container .lp-generate-data-ai-wrap .lp-form-generate-data-ai .btn-primary:hover{background-color:#5b52d1}.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content::before{content:none}.swal2-container .swal2-popup .swal2-icon.lp-cb-swal-icon-html .swal2-icon-content .lp-cb-swal-icon-image{display:block;width:48px;height:48px}#swal2-html-container:has(.lp-form-generate-data-ai){padding-bottom:24px}#swal2-html-container:has(.lp-form-generate-data-ai) .form-grid{margin-bottom:0}#lp-course-builder .cb-tab-header{display:flex;align-items:center;justify-content:space-between;margin:20px 0 24px 0}#lp-course-builder .cb-tab-header .lp-cb-tab__title{font-size:28px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .cb-tab-filter-bar{margin-bottom:24px}#lp-course-builder .cb-filter-fields{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap}#lp-course-builder .cb-filter-group{display:flex;flex-direction:column;gap:6px}#lp-course-builder .cb-filter-group label{font-size:13px;font-weight:500}#lp-course-builder .cb-filter-search{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:6px;padding:10px 14px;gap:8px;min-width:200px}#lp-course-builder .cb-filter-search input{flex:1;border:0;background:transparent;outline:0;font-size:14px;color:#1e1e1e}#lp-course-builder .cb-filter-search input::placeholder{color:#6b7280}#lp-course-builder select{padding:10px 14px 10px 32px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;cursor:pointer;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:left 10px center;background-size:14px}#lp-course-builder select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}#lp-course-builder .cb-filter-actions{display:flex;gap:4px;padding-bottom:1px}#lp-course-builder .cb-filter-btn{padding:8px 20px;border:0;border-radius:12px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;background-color:#7067ed;color:#eef1ff}#lp-course-builder .cb-filter-btn:hover{background:#5b52d1}#lp-course-builder .cb-filter-reset{background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 20px;border-radius:12px}#lp-course-builder .cb-filter-reset:hover{background:#eef1ff;color:#7067ed}#lp-course-builder .cb-btn-add-new{display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}#lp-course-builder .cb-btn-add-new:hover{background:#5b52d1}#lp-course-builder .cb-btn-add-new .dashicons{font-size:16px;width:16px;height:16px}#lp-course-builder button.cb-btn-add-new{line-height:1.5}@media(max-width:768px){#lp-course-builder .cb-tab-header{flex-direction:column;align-items:stretch;gap:12px}#lp-course-builder .cb-tab-header .cb-btn-add-new{justify-content:center}#lp-course-builder .cb-filter-fields{flex-direction:column;align-items:stretch}#lp-course-builder .cb-filter-search{min-width:100%}#lp-course-builder .cb-filter-actions{justify-content:flex-start}}#lp-course-builder .learn-press-tip{display:inline-flex;align-items:center;margin-top:2px;color:#6b7280;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer;position:relative}#lp-course-builder .learn-press-tip:before{font-family:\"lp-icon\";content:\"\\f059\"}#lp-course-builder .learn-press-tip>*{display:none;position:absolute;bottom:100%;right:50%;transform:translateX(50%);margin-bottom:8px;padding:8px 12px;background-color:#333;color:#fff !important;font-size:12px;line-height:1.5;text-align:center;border-radius:4px;white-space:normal;width:max-content;max-width:250px;z-index:999;box-shadow:0 4px 6px rgba(0,0,0,0.1);pointer-events:none}#lp-course-builder .learn-press-tip>*::after{content:\"\";position:absolute;top:100%;right:50%;transform:translateX(50%);border-width:5px;border-style:solid;border-color:#333 transparent transparent transparent}#lp-course-builder .learn-press-tip p{color:#fff !important;margin-right:0 !important;width:100% !important;font-weight:500 !important}#lp-course-builder .learn-press-tip:hover>*{display:block}#lp-course-builder .cb-tab-course__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-search-form{position:relative;display:flex;align-items:center;border-radius:12px;padding:5px 0;gap:8px;margin-bottom:0;border:1px solid #e5e7eb;width:40%;max-width:500px}#lp-course-builder .lp-icon-search{font-size:16px;color:#7067ed;flex-shrink:0}#lp-course-builder .cb-input-search-course{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit}#lp-course-builder .cb-input-search-course::placeholder{color:#999}#lp-course-builder .cb-search-btn{cursor:pointer;border:0;background:0}#lp-course-builder .cb-search-btn.loading{pointer-events:none}#lp-course-builder .cb-search-btn.loading i{display:none}#lp-course-builder .cb-btn-back a{text-decoration:none}#lp-course-builder .cb-list-course{margin:0;padding:0;list-style:none}#lp-course-builder .cb-list-course li.course{margin-bottom:20px}#lp-course-builder .course{background:#fff;border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,0.06);border:1px solid #e5e7eb;transition:all .3s}#lp-course-builder .course:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1)}#lp-course-builder .course-item{display:flex;gap:20px;padding:16px;height:100%;position:relative}#lp-course-builder .course-thumbnail{position:relative;margin:-2px}@media(min-width:769px){#lp-course-builder .course-thumbnail{width:26%}}#lp-course-builder .course-thumbnail img{width:100%;border-radius:8px;object-fit:cover}#lp-course-builder .course-thumbnail .cb-item-status-badge{position:absolute;bottom:8px;left:8px;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;text-transform:uppercase}#lp-course-builder .course-thumbnail .cb-item-status-badge.offline{background:#1e40af;color:#fff}#lp-course-builder .course-img{width:100%;height:100%}#lp-course-builder .course-img img{width:100%;height:100%;object-fit:cover}#lp-course-builder .course-content{flex:1}#lp-course-builder .wap-course-title{margin-top:0;margin-bottom:8px}#lp-course-builder .course-permalink{text-decoration:none;color:#1e1e1e;font-size:18px;font-weight:700;display:block;transition:color .2s}#lp-course-builder .course-permalink:hover{color:#2e91fa}#lp-course-builder .course-title{text-decoration:none;line-height:1.4;font-size:20px;font-weight:600;color:#1e1e1e}#lp-course-builder .course-featured{display:inline-block;background-color:#ffd700;color:#333;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:600;margin-bottom:10px;text-transform:uppercase}#lp-course-builder .course-instructor__wrapper{display:flex;gap:5px;margin-bottom:12px;font-size:13px;color:#666}#lp-course-builder .course-instructor-category{margin-bottom:12px}#lp-course-builder .course-instructor-category>div{display:flex;gap:5px;align-items:center;flex-wrap:wrap}#lp-course-builder .course-by-label,#lp-course-builder .course-categories-label{color:#6b7280;font-size:14px}#lp-course-builder .course-category-name{color:#1e1e1e;font-size:14px;font-weight:500}#lp-course-builder .course-instructor a,#lp-course-builder .course-categories a{color:#2e91fa;text-decoration:none}#lp-course-builder .course-instructor a:hover,#lp-course-builder .course-categories a:hover{text-decoration:underline}#lp-course-builder .course-wrap-meta{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px}#lp-course-builder .instructor-display-name{font-size:14px;color:#1e1e1e}#lp-course-builder .meta-item{font-size:14px;color:#6b7280;display:flex;align-items:center;gap:8px}#lp-course-builder .meta-item i{font-size:16px;color:#7067ed}#lp-course-builder .meta-item .dashicons{font-size:16px;width:16px;height:16px;color:#7067ed}#lp-course-builder .meta-item>div{display:contents}#lp-course-builder .meta-item>div span{color:#6b7280}#lp-course-builder .course-bottom{margin-top:auto;display:flex;flex-direction:column;align-items:flex-start;gap:12px}#lp-course-builder .course-item-price-wrap{margin-bottom:0}#lp-course-builder .course-last-updated{font-size:12px;color:#999;position:absolute;bottom:16px;left:16px}#lp-course-builder .course-item-price .free{color:#2e91fa;font-weight:600;font-size:16px}#lp-course-builder .course-item-price .price{color:#e31a1b;font-weight:700;font-size:18px}#lp-course-builder .highlight-new-course{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .course-action{position:relative;display:flex;gap:8px}#lp-course-builder .course-action-editor{padding:0}#lp-course-builder .course-action-expanded{cursor:pointer;padding:7px;border:1px solid #e5e7eb;border-radius:8px;background:#fff;transition:all .2s;height:36px;width:36px;display:flex;align-items:center;justify-content:center}#lp-course-builder .course-action-expanded:hover{background:#f7f7f7;border-color:#d1d5db}#lp-course-builder .course-action-expanded svg{width:20px;height:20px;color:#6b7280}#lp-course-builder .course-action-expanded__items{display:none;position:absolute;min-width:160px;top:60px;left:16px;transform:translate(-15px,-15px);padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .course-action-expanded__items.active{display:flex !important}#lp-course-builder .course-action-expanded__items .course-action-expanded__view,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e}#lp-course-builder .course-action-expanded__items .course-action-expanded__view:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__duplicate:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__draft:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete{color:#ef4444}#lp-course-builder .course-action-expanded__items .course-action-expanded__trash:hover,#lp-course-builder .course-action-expanded__items .course-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .course-action .wap-course-title{margin:0}#lp-course-builder .course-action .course-permalink{color:#2e91fa;font-size:14px;font-weight:500}#lp-course-builder .course-action .course-permalink:hover{text-decoration:underline}#lp-course-builder .btn-edit-course{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;font-size:14px;font-weight:600;border-radius:8px;padding:0 20px;height:36px;gap:8px;border:0;background:#7067ed;color:#fff;transition:all .2s;white-space:nowrap}#lp-course-builder .btn-edit-course:hover{background:#5b52d1}#lp-course-builder .course-status{display:inline-flex}#lp-course-builder .course-status span{font-size:13px;padding:4px 12px;border-radius:4px;font-weight:600;text-transform:capitalize;line-height:normal}#lp-course-builder .course-status.publish span{background:#e7f6e9;color:#28a746}#lp-course-builder .course-status.future span{background:#ffd700;color:#333}#lp-course-builder .course-status.trash span{color:#991b1b;background-color:#fee2e2}#lp-course-builder .learn-press-pagination{margin-top:40px;display:flex;justify-content:center}#lp-course-builder .page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}#lp-course-builder .page-numbers li{display:inline-block}#lp-course-builder .page-numbers a,#lp-course-builder .page-numbers span{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:6px;text-decoration:none;color:#898989;font-size:14px;transition:all .2s;background:#fff;font-weight:600}#lp-course-builder .page-numbers a:hover{background-color:#f7f7f7;border-color:#d1d5db;color:#1e1e1e}#lp-course-builder .page-numbers .current{background-color:#7067ed;color:#fff}#lp-course-builder .page-numbers .next,#lp-course-builder .page-numbers .prev{background-color:#f7f7f7;border-color:#d1d5db}#lp-course-builder .page-numbers .next:hover,#lp-course-builder .page-numbers .prev:hover{background-color:#7067ed;color:#fff}#lp-course-builder #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-course-builder #lp-material-container hr{display:none}#lp-course-builder .field-material__label{width:150px;max-width:150px;min-width:150px;margin-left:11px}#lp-course-builder .lp-material--field-wrap{display:flex;gap:11px;margin-top:12px}#lp-course-builder .lp-material--field-wrap label{color:#1e1e1e;font-size:14px;font-weight:600;width:100px}#lp-course-builder .lp-material--field-wrap:first-child{margin-top:0}#lp-course-builder .lp-material--field-wrap.field-action-wrap{justify-content:flex-start;flex-direction:row-reverse}#lp-course-builder .lp-material--field-external-link,#lp-course-builder .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material--field-method{width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}#lp-course-builder #lp-material--group-container .lp-material--group{padding:20px;border:1px solid #d1d5db;border-radius:12px;max-width:420px;margin-bottom:20px}#lp-course-builder #lp-material--group-container .lp-material--group:not(:has(*)){display:none}#lp-course-builder #btn-lp--add-material,#lp-course-builder #btn-lp--save-material,#lp-course-builder .lp-material-save-field,#lp-course-builder .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s}#lp-course-builder #btn-lp--add-material{color:#7067ed;border:1px solid #7067ed}#lp-course-builder #btn-lp--add-material:hover{background-color:#f7f7f7;border-color:#7067ed}#lp-course-builder #btn-lp--save-material,#lp-course-builder .lp-material-save-field{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-course-builder #btn-lp--save-material:hover,#lp-course-builder .lp-material-save-field:hover{background-color:#5b52d1;border-color:#5b52d1}#lp-course-builder .lp-material--delete{color:#6b7280;border:1px solid #e5e7eb}#lp-course-builder .lp-material--delete:hover{background-color:#f7f7f7;color:#1e1e1e;border-color:#1e1e1e}#lp-course-builder .lp-material--upload-wrap label{cursor:pointer;width:100%;display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-right:86px;overflow:hidden}#lp-course-builder .lp-material--upload-wrap label.has-selected-file{border-color:#7067ed;background-color:#f9fafb;font-size:0}#lp-course-builder .lp-material--upload-wrap label.has-selected-file::before{font-size:14px}#lp-course-builder .lp-material--upload-wrap label.has-selected-file::after{content:attr(data-file-name);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600}#lp-course-builder .lp-material--upload-wrap label:hover{background-color:#f7f7f7;border-color:#9ca3af}#lp-course-builder .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-course-builder .lp-material--upload-wrap label::before{content:\"📁 \";margin-left:5px}#lp-course-builder .lp-material--field-upload{display:none}#lp-course-builder .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}#lp-course-builder .lp-material--table th,#lp-course-builder .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:right}#lp-course-builder .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}#lp-course-builder .lp-material--table td{font-size:14px;color:#1e1e1e}#lp-course-builder .lp-material--table tr:last-child td{border-bottom:0}#lp-course-builder .lp-material--table tr:hover td{background-color:#f9fafb}#lp-course-builder .lp-material--table thead.hidden{display:none}#lp-course-builder .ts-control{padding:8px 8px 8px 8px !important}@media(max-width:1024px){#lp-course-builder .cb-list-course{gap:15px}}@media(max-width:768px){#lp-course-builder .cb-tab-course__action{flex-direction:column;gap:16px;align-items:stretch}#lp-course-builder .cb-search-form{width:100%}#lp-course-builder .cb-btn-add-new{text-align:center;justify-content:center}#lp-course-builder .course-item{flex-direction:column}#lp-course-builder .cb-list-course{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{display:grid;grid-template-columns:repeat(5,1fr);gap:20px;margin-bottom:24px}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:repeat(3,1fr)}}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stats{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card{background:#fff;border-radius:12px;padding:24px 20px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb;transition:all .2s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card:hover{box-shadow:0 4px 12px rgba(0,0,0,0.1);transform:translateY(-2px)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon{width:48px;height:48px;border-radius:50%;background:var(--card-bg,#f9fafb);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-bottom:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__icon svg{width:22px;height:22px;color:var(--card-color,#7067ed)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__label{font-size:12px;color:#6b7280;font-weight:500;order:1}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__stat-card .stat-card__value{font-size:24px;font-weight:700;color:#1e1e1e;line-height:1.2;order:2}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row{display:grid;gap:20px;margin-bottom:24px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin{grid-template-columns:1fr 1fr 280px}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--admin{grid-template-columns:1fr 1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row.lp-cb-dashboard__charts-row--instructor{grid-template-columns:1fr 1fr}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__charts-row{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter{padding:5px 12px 5px 28px;border:1px solid #e5e7eb;border-radius:6px;font-size:12px;color:#6b7280;cursor:pointer;outline:0;height:auto}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__filter:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body{height:220px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__chart-card .chart-card__body canvas{width:100% !important;height:100% !important}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}@media(max-width:1200px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors{grid-column:1\u002F-1}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__header{margin-bottom:20px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__title{display:flex;align-items:center;gap:12px;font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .top-instructors__list{display:flex;flex-direction:column;gap:20px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item{display:flex;align-items:center;gap:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar{width:48px;height:48px;border-radius:50%;overflow:hidden;flex-shrink:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__info{display:flex;flex-direction:column;gap:4px;min-width:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__name{font-size:15px;font-weight:600;color:#1e1e1e;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .instructor-item__meta{font-size:13px;color:#6b7280;line-height:1.2}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-instructors .no-data{text-align:center;color:#6b7280;font-style:italic;padding:20px 0;font-size:12px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:24px;overflow-x:hidden;transition:overflow-x .3s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper:hover{overflow-x:auto}@media(max-width:900px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses-wrapper{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses{background:#fff;border-radius:12px;padding:20px 24px;box-shadow:0 1px 3px rgba(0,0,0,0.05);border:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__header{display:flex;justify-content:space-between;align-items:center;padding-bottom:16px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .enrolled-students-total{color:#7067ed;font-weight:600}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__total .revenue-total{color:#e31a1b;font-weight:700}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .top-courses__list{display:flex;flex-direction:column}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item{display:flex;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid #e5e7eb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:last-child{border-bottom:0;padding-bottom:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item:first-child{padding-top:0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb{width:80px;height:56px;border-radius:8px;overflow:hidden;flex-shrink:0;background:#f9fafb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb img{width:100%;height:100%;object-fit:cover}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#f9fafb}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__thumb-placeholder svg{color:#9ca3af}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title{font-size:15px;font-weight:700;color:#1e1e1e;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .15s ease}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__title:hover{color:#7067ed}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .author{color:#7067ed}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__meta .category{color:#1e1e1e}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__price{font-size:12px;font-weight:600;color:#1e1e1e;margin-top:2px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge-wrapper{flex-shrink:0;display:flex;align-items:center}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__badge{background:#e0f2fe;color:#0284c7;padding:4px 10px;border-radius:6px;font-size:13px;font-weight:600}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__stats{text-align:left;flex-shrink:0;display:flex;flex-direction:column;gap:4px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__revenue .revenue-amount{color:#ef4444;font-weight:700}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .course-item__sold{font-size:12px;color:#6b7280}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__top-courses .no-data{text-align:center;color:#6b7280;font-style:italic;padding:24px 0;font-size:12px}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions{background:#fff}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0 0 16px 0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media(max-width:768px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-actions__grid{grid-template-columns:1fr}}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn{display:flex;align-items:center;gap:10px;padding:14px 18px;border-radius:8px;background:var(--action-bg,#f9fafb);text-decoration:none;transition:all .2s ease;border:1px solid transparent}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__btn:hover{border-color:var(--action-color,#e5e7eb);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,0.06)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;color:var(--action-color)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__icon svg{width:20px;height:20px;color:var(--action-color,#6b7280)}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__quick-actions .quick-action__label{font-size:14px;font-weight:500;color:#1e1e1e}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses{background:#fff}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .recent-courses__title{font-size:16px;font-weight:600;color:#1e1e1e;margin:0 0 16px 0}#lp-course-builder .lp-course-builder-dashboard .lp-cb-dashboard__recent-courses .cb-list-course{padding-bottom:0}#lp-course-builder .cb-list-quiz{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-quiz__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-quiz{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-left:10px}#lp-course-builder .cb-input-search-quiz::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .quiz-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .quiz-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .quiz-item{border-bottom:0}#lp-course-builder .highlight-new-quiz{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-quiz-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-quiz-title button,#lp-course-builder .wap-quiz-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-quiz-title button:hover,#lp-course-builder .wap-quiz-title a:hover{color:#7067ed}#lp-course-builder .quiz__date,#lp-course-builder .quiz__duration,#lp-course-builder .quiz__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-right:8px}#lp-course-builder .quiz__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .quiz__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .quiz-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .quiz-action-editor{display:flex}#lp-course-builder .btn-edit-quiz{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-quiz svg{width:16px;height:16px}#lp-course-builder .btn-edit-quiz:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-quiz.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-quiz.loading svg{display:none}#lp-course-builder .quiz-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .quiz-action-expanded.loading::before{margin-left:0;margin-top:0}#lp-course-builder .quiz-action-expanded.loading svg{display:none}#lp-course-builder .quiz-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .quiz-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .quiz-action-expanded:hover svg{color:#7067ed}#lp-course-builder .quiz-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;left:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__quiz-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__quiz-tab .cb-list-table-header,#lp-course-builder .courses-builder__quiz-tab .quiz-item{grid-template-columns:2fr 1.5fr 80px 1fr 1fr 100px 80px}#lp-course-builder .courses-builder__quiz-tab .lesson-assigned-courses .label{display:none}#lp-course-builder .cb-list-quiz{border:0;border-radius:0}#lp-course-builder .quiz-status,#lp-course-builder .quizzes-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .quiz-status.publish,#lp-course-builder .quizzes-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .quiz-status.draft,#lp-course-builder .quizzes-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .quiz-status.pending,#lp-course-builder .quizzes-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .quiz-status.private,#lp-course-builder .quizzes-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .quiz-status.trash,#lp-course-builder .quizzes-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .quiz-assigned-courses,#lp-course-builder .lesson-assigned-courses{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .quiz-assigned-courses .label,#lp-course-builder .lesson-assigned-courses .label{color:#6b7280;margin-left:5px}#lp-course-builder .quiz-assigned-courses a,#lp-course-builder .lesson-assigned-courses a{text-decoration:none;color:#2e91fa}#lp-course-builder .quiz-assigned-courses a:hover,#lp-course-builder .lesson-assigned-courses a:hover{text-decoration:underline}#lp-course-builder .quiz-assigned-courses .label,#lp-course-builder .lesson-assigned-courses .label{color:#1e1e1e}#lp-course-builder .quiz-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);left:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .quiz-action-expanded__items.active{display:flex !important}#lp-course-builder .quiz-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__duplicate:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__publish:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__restore:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete{color:#ef4444}#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__trash:hover,#lp-course-builder .quiz-action-expanded__items .quiz-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .cb-list-question{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-question__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-question{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-left:10px}#lp-course-builder .cb-input-search-question::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .question-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .question-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .question-item{border-bottom:0}#lp-course-builder .highlight-new-question{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-question-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-question-title button,#lp-course-builder .wap-question-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-question-title button:hover,#lp-course-builder .wap-question-title a:hover{color:#7067ed}#lp-course-builder .question__date,#lp-course-builder .question__duration,#lp-course-builder .question__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-right:8px}#lp-course-builder .question__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .question__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .question-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .question-action-editor{display:flex}#lp-course-builder .btn-edit-question{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-question svg{width:16px;height:16px}#lp-course-builder .btn-edit-question:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-question.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-question.loading svg{display:none}#lp-course-builder .question-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .question-action-expanded.loading::before{margin-left:0;margin-top:0}#lp-course-builder .question-action-expanded.loading svg{display:none}#lp-course-builder .question-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .question-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .question-action-expanded:hover svg{color:#7067ed}#lp-course-builder .question-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;left:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__question-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__question-tab .cb-list-table-header,#lp-course-builder .courses-builder__question-tab .question-item{grid-template-columns:2fr 1.5fr 1fr 100px 100px 80px}#lp-course-builder .courses-builder__question-tab .question-assigned-quizzes .label{display:none}#lp-course-builder .cb-list-question{border:0;border-radius:0}#lp-course-builder .question-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .question-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .question-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .question-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .question-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .question-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .question-assigned-quizzes{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .question-assigned-quizzes .label{color:#6b7280;margin-left:5px}#lp-course-builder .question-assigned-quizzes a{text-decoration:none;color:#2e91fa}#lp-course-builder .question-assigned-quizzes a:hover{text-decoration:underline}#lp-course-builder .question-assigned-quizzes .label{color:#1e1e1e}#lp-course-builder .question-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);left:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .question-action-expanded__items.active{display:flex !important}#lp-course-builder .question-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__restore,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .question-action-expanded__items .question-action-expanded__duplicate:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__publish:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__restore:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .question-action-expanded__items .question-action-expanded__trash,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete{color:#ef4444}#lp-course-builder .question-action-expanded__items .question-action-expanded__trash:hover,#lp-course-builder .question-action-expanded__items .question-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .cb-list-lesson{list-style:none;padding:0;margin:0;background:#fff}#lp-course-builder .cb-tab-lesson__action{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}#lp-course-builder .cb-input-search-lesson{flex:1;border:0;background:transparent;outline:0;font-size:15px;color:#333;font-family:inherit;margin-left:10px}#lp-course-builder .cb-input-search-lesson::placeholder{color:#999}#lp-course-builder .cb-list-table-header{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;min-height:48px;font-size:12px;font-weight:600;color:#374151}#lp-course-builder .cb-list-table-header span{white-space:nowrap}#lp-course-builder .lesson-item{display:grid;align-items:center;gap:0 16px;padding:0 24px;background:#fff;border-bottom:1px solid #f5f5f5;min-height:64px;font-size:14px;transition:background-color .15s ease}#lp-course-builder .lesson-item:hover{background-color:#f9fafb}#lp-course-builder li:last-child .lesson-item{border-bottom:0}#lp-course-builder .highlight-new-lesson{box-shadow:#c8b4fb 0 0 20px 1px}#lp-course-builder .wap-lesson-title{margin:0;min-width:0;overflow:hidden}#lp-course-builder .wap-lesson-title button,#lp-course-builder .wap-lesson-title a{font-size:14px;font-weight:500;background:transparent;border:0;text-decoration:none;color:#1e1e1e;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding:0;cursor:pointer}#lp-course-builder .wap-lesson-title button:hover,#lp-course-builder .wap-lesson-title a:hover{color:#7067ed}#lp-course-builder .lesson__date,#lp-course-builder .lesson__duration,#lp-course-builder .lesson__total-questions{font-size:12px;color:#6b7280;white-space:nowrap;margin-right:8px}#lp-course-builder .lesson__preview{display:flex;align-items:center;justify-content:center}#lp-course-builder .lesson__preview svg{height:20px;width:20px;color:#6b7280}#lp-course-builder .lesson-action{display:flex;align-items:center;justify-content:flex-end;gap:8px;position:relative}#lp-course-builder .lesson-action-editor{display:flex}#lp-course-builder .btn-edit-lesson{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:0;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s;padding:0}#lp-course-builder .btn-edit-lesson svg{width:16px;height:16px}#lp-course-builder .btn-edit-lesson:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .btn-edit-lesson.loading::before{margin:0;font-size:16px}#lp-course-builder .btn-edit-lesson.loading svg{display:none}#lp-course-builder .lesson-action-expanded{cursor:pointer;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:6px;transition:all .2s;padding:0;background:0;border:0}#lp-course-builder .lesson-action-expanded.loading::before{margin-left:0;margin-top:0}#lp-course-builder .lesson-action-expanded.loading svg{display:none}#lp-course-builder .lesson-action-expanded svg{width:18px;height:18px;color:#6b7280}#lp-course-builder .lesson-action-expanded:hover{background-color:#eef1ff}#lp-course-builder .lesson-action-expanded:hover svg{color:#7067ed}#lp-course-builder .lesson-action-expanded__items{display:none;position:absolute;min-width:160px;top:100%;left:0;margin-top:4px;padding:8px;flex-direction:column;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:14px;font-weight:500;z-index:10}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .courses-builder__lesson-tab{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:visible}#lp-course-builder .courses-builder__lesson-tab .cb-list-table-header,#lp-course-builder .courses-builder__lesson-tab .lesson-item{grid-template-columns:2fr 1.5fr 1fr 100px 80px 80px}#lp-course-builder .courses-builder__lesson-tab .lesson-assigned-courses .label{display:none}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item{cursor:pointer;display:flex;margin-right:12px;justify-content:flex-start;border:0;padding:0}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading,#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading{pointer-events:none;opacity:.7;margin-right:19px}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.loading a,#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item.lp-loading a{display:none}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a{display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none;font-size:16px;border-radius:6px;background-color:transparent;border:0;color:#6b7280;cursor:pointer;transition:all .2s}#lp-course-builder .courses-builder__lesson-tab .lesson__preview.lp-btn-set-preview-item a:hover{background-color:#eef1ff;color:#7067ed}#lp-course-builder .cb-list-lesson{border:0;border-radius:0}#lp-course-builder .lesson-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}#lp-course-builder .lesson-status.publish{color:#28a746;background:#e7f6e9}#lp-course-builder .lesson-status.draft{color:#aaa;background:#f7f7f7}#lp-course-builder .lesson-status.pending{color:#1e40af;background:#dbeafe}#lp-course-builder .lesson-status.private{color:#6b21a8;background:#f3e8ff}#lp-course-builder .lesson-status.trash{color:#991b1b;background:#fee2e2}#lp-course-builder .lesson-assigned-courses{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}#lp-course-builder .lesson-assigned-courses .label{color:#6b7280;margin-left:5px}#lp-course-builder .lesson-assigned-courses a{text-decoration:none;color:#2e91fa}#lp-course-builder .lesson-assigned-courses a:hover{text-decoration:underline}#lp-course-builder .lesson-action-expanded__items{display:none;position:absolute;min-width:160px;top:calc(100% + 4px);left:0;transform:none;padding:10px;flex-direction:column;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px rgba(0,0,0,0.1);font-size:16px;font-weight:500;z-index:100}#lp-course-builder .lesson-action-expanded__items.active{display:flex !important}#lp-course-builder .lesson-action-expanded__items.is-dropup{top:auto;bottom:calc(100% + 4px)}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{padding:10px;cursor:pointer;text-decoration:none;border-radius:6px;color:#1e1e1e;border:0}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__duplicate:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__publish:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__restore:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#f7f7f7}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete{color:#ef4444}#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__trash:hover,#lp-course-builder .lesson-action-expanded__items .lesson-action-expanded__delete:hover{background-color:#fef2f2}#lp-course-builder .lp-cb-settings .lp-meta-box,#lp-course-builder .lp-cb-settings .lp-meta-box-wrap{margin:0;background:transparent}#lp-course-builder .lp-cb-settings .lp-meta-box .lp-meta-box__inner,#lp-course-builder .lp-cb-settings .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}#lp-course-builder .lp-cb-settings .form-field,#lp-course-builder .lp-cb-settings .lp-meta-box__duration,#lp-course-builder .lp-cb-settings .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}#lp-course-builder .lp-cb-settings .form-field>label,#lp-course-builder .lp-cb-settings .form-field label span,#lp-course-builder .lp-cb-settings .lp-meta-box__duration>label,#lp-course-builder .lp-cb-settings .lp-meta-box__duration label span,#lp-course-builder .lp-cb-settings .lp-meta-box-field>label,#lp-course-builder .lp-cb-settings .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}#lp-course-builder .lp-cb-settings .form-field input[type=number],#lp-course-builder .lp-cb-settings .form-field input[type=text],#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-course-builder .lp-cb-settings .form-field input[type=number]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=text]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=datetime-local]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=text]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=datetime-local]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=text]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=number],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=number]{width:80px !important}#lp-course-builder .lp-cb-settings .form-field select,#lp-course-builder .lp-cb-settings .lp-meta-box__duration select,#lp-course-builder .lp-cb-settings .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}#lp-course-builder .lp-cb-settings .form-field select:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration select:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=radio],#lp-course-builder .lp-cb-settings .form-field input[type=checkbox],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio],#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio],#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:before,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:checked:before,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}#lp-course-builder .lp-cb-settings .form-field input[type=radio]:focus,#lp-course-builder .lp-cb-settings .form-field input[type=checkbox]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=radio]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box__duration input[type=checkbox]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=radio]:focus,#lp-course-builder .lp-cb-settings .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-course-builder .lp-cb-settings .form-field .description,#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description,#lp-course-builder .lp-cb-settings .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}#lp-course-builder .lp-cb-settings .form-field .description:has(+.learn-press-tip),#lp-course-builder .lp-cb-settings .lp-meta-box__duration .description:has(+.learn-press-tip),#lp-course-builder .lp-cb-settings .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}#lp-course-builder .lp-cb-settings .form-field>.learn-press-tip,#lp-course-builder .lp-cb-settings .lp-meta-box__duration>.learn-press-tip,#lp-course-builder .lp-cb-settings .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}#lp-course-builder .lp-cb-settings ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting{display:flex;flex-direction:column;gap:10px;width:100%;max-width:620px}#lp-course-builder .lp-cb-settings .lp-cb-settings__section{margin-bottom:20px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:10px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn{min-height:34px;border-radius:6px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger){display:inline-flex;align-items:center;gap:8px;background:#7067ed;color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;border:0;cursor:pointer;transition:background-color .2s}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):hover,#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn:not(.lp-cb-logo-setting__btn-danger):focus{background:#5b52d1;border-color:#5b52d1;color:#fff}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn.is-hidden{display:none}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger{display:inline-flex;align-items:center;gap:8px;background-color:#fff;color:#6b7280;border:1px solid #e5e7eb;padding:12px 20px;border-radius:12px;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:hover,#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__btn-danger:focus{color:#dc2626;border-color:#fee2e2;background:#fee2e2}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-wrap{display:flex;flex-direction:column;gap:8px;width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row{display:flex;align-items:center;justify-content:space-between;gap:12px}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-label{font-size:13px;font-weight:600;color:#1e1e1e;white-space:nowrap}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default{display:inline-flex;align-items:center;justify-content:flex-start;width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default.is-hidden{display:none}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-svg{display:block;width:181px;max-width:100%;height:auto}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-default-image{display:block;width:auto;max-width:100%;height:auto;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img{display:block;width:auto;height:auto;max-width:260px;max-height:40px;object-fit:contain}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview img.is-hidden{display:none}@media(max-width:767px){#lp-course-builder .lp-cb-settings .lp-cb-logo-setting{max-width:100%}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview-row{flex-direction:column;align-items:flex-start}#lp-course-builder .lp-cb-settings .lp-cb-logo-setting__preview{width:100%;max-width:100%}}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-left:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-right:3px solid transparent;margin-right:-3px}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-right-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-option-disabled{pointer-events:none;opacity:.5}#lp-course-builder .cb-terms-header__label-wrap{display:inline-flex;align-items:center;gap:6px}#lp-course-builder .cb-terms-header__btn-search{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;border-radius:999px;background:transparent;color:#9ca3af;cursor:pointer;transition:all .2s ease}#lp-course-builder .cb-terms-header__btn-search .lp-icon-search{width:14px;height:14px;font-size:14px;color:#9ca3af}#lp-course-builder .cb-terms-header__btn-search:hover{background:#eef1ff}#lp-course-builder .cb-terms-header__btn-search:hover .lp-icon-search{color:#7067ed}#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true]{background:#eef1ff}#lp-course-builder .cb-terms-header__btn-search[aria-expanded=true] .lp-icon-search{color:#7067ed}#lp-course-builder .cb-terms-search-toolbar{max-height:0;opacity:0;overflow:hidden;pointer-events:none;margin-bottom:0 !important;transition:max-height .25s ease,opacity .2s ease,margin-bottom .25s ease}#lp-course-builder .cb-terms-search-toolbar.is-open{max-height:80px;opacity:1;pointer-events:auto;margin-bottom:16px !important}.lp-course-builder-content__section .lp-meta-box,.lp-course-builder-content__section .lp-meta-box-wrap{margin:0;background:transparent}.lp-course-builder-content__section .lp-meta-box .lp-meta-box__inner,.lp-course-builder-content__section .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-course-builder-content__section .form-field,.lp-course-builder-content__section .lp-meta-box__duration,.lp-course-builder-content__section .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-course-builder-content__section .form-field>label,.lp-course-builder-content__section .form-field label span,.lp-course-builder-content__section .lp-meta-box__duration>label,.lp-course-builder-content__section .lp-meta-box__duration label span,.lp-course-builder-content__section .lp-meta-box-field>label,.lp-course-builder-content__section .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-course-builder-content__section .form-field input[type=number],.lp-course-builder-content__section .form-field input[type=text],.lp-course-builder-content__section .form-field input[type=datetime-local],.lp-course-builder-content__section .lp-meta-box__duration input[type=number],.lp-course-builder-content__section .lp-meta-box__duration input[type=text],.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local],.lp-course-builder-content__section .lp-meta-box-field input[type=number],.lp-course-builder-content__section .lp-meta-box-field input[type=text],.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-course-builder-content__section .form-field input[type=number]:focus,.lp-course-builder-content__section .form-field input[type=text]:focus,.lp-course-builder-content__section .form-field input[type=datetime-local]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=number]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=text]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=datetime-local]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=number]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=text]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field input[type=number],.lp-course-builder-content__section .lp-meta-box__duration input[type=number],.lp-course-builder-content__section .lp-meta-box-field input[type=number]{width:80px !important}.lp-course-builder-content__section .form-field select,.lp-course-builder-content__section .lp-meta-box__duration select,.lp-course-builder-content__section .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-course-builder-content__section .form-field select:focus,.lp-course-builder-content__section .lp-meta-box__duration select:focus,.lp-course-builder-content__section .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field input[type=radio],.lp-course-builder-content__section .form-field input[type=checkbox],.lp-course-builder-content__section .lp-meta-box__duration input[type=radio],.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox],.lp-course-builder-content__section .lp-meta-box-field input[type=radio],.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-course-builder-content__section .form-field input[type=radio]:before,.lp-course-builder-content__section .form-field input[type=checkbox]:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:before,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:before,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-content__section .form-field input[type=radio]:checked,.lp-course-builder-content__section .form-field input[type=checkbox]:checked,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-course-builder-content__section .form-field input[type=radio]:checked:before,.lp-course-builder-content__section .form-field input[type=checkbox]:checked:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:checked:before,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:checked:before,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.lp-course-builder-content__section .form-field input[type=radio]:focus,.lp-course-builder-content__section .form-field input[type=checkbox]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=radio]:focus,.lp-course-builder-content__section .lp-meta-box__duration input[type=checkbox]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=radio]:focus,.lp-course-builder-content__section .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-content__section .form-field .description,.lp-course-builder-content__section .lp-meta-box__duration .description,.lp-course-builder-content__section .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}.lp-course-builder-content__section .form-field .description:has(+.learn-press-tip),.lp-course-builder-content__section .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-course-builder-content__section .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-course-builder-content__section .form-field>.learn-press-tip,.lp-course-builder-content__section .lp-meta-box__duration>.learn-press-tip,.lp-course-builder-content__section .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-course-builder-content__section ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-course-builder-content__section ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-course-builder-content__section ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-course-builder-content__section ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-content{display:flex;gap:40px}.lp-course-builder-content__section .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1;min-width:0}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__label .required{color:#ef4444}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-right:auto;transition:all .2s ease}.lp-course-builder-content__section .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.lp-course-builder-content__section .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-permalink{margin-bottom:20px}.lp-course-builder-content__section .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-content__section .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-content__section .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-content__section .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-content__section .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-content__section .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-content__section .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-content__section .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-content__section .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-content__section .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-content__section .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-content__section .cb-permalink-prefix strong{color:#64748b;font-weight:600}.lp-course-builder-content__section .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-content__section .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-content__section .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-content__section .cb-permalink-slug-input::placeholder{color:#94a3b8}.lp-course-builder-content__section .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-content__section .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-content__section .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-content__section .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-content__section .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-course-builder-content__section .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.lp-course-builder-content__section .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-course-builder-content__section .cb-course-edit-categories__search-wrap{display:block}.lp-course-builder-content__section .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.lp-course-builder-content__section .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-tag-chip{display:inline-flex;align-items:center}.lp-course-builder-content__section .cb-tag-chip input[type=checkbox]{display:none}.lp-course-builder-content__section .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-course-builder-content__section .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.lp-course-builder-content__section .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-course-builder-content__section .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.lp-course-builder-content__section .cb-featured-image-dropzone:hover a{color:#7067ed}.lp-course-builder-content__section .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.lp-course-builder-content__section .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.lp-course-builder-content__section .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-course-builder-content__section .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.lp-course-builder-content__section .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.lp-course-builder-content__section .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-course-builder-content__section .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.lp-course-builder-content__section .cb-featured-image-link:hover{text-decoration:underline}.lp-course-builder-content__section .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-course-builder-content__section .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-change-featured-image:hover{background:#7067ed;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-course-builder-content__section .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-course-builder-content__section .cb-course-edit-publish{margin-bottom:20px}.lp-course-builder-content__section .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.lp-course-builder-content__section .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-publish__row select{padding:6px 14px 6px 32px !important}.lp-course-builder-content__section .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-content__section .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-course-builder-content__section .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-set-featured-image:hover{background:#7067ed;color:#fff}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__input:focus,.lp-course-builder-content__section .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-course-builder-content__section .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover{background:#333}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-course-builder-content__section .cb-course-edit-content{flex-direction:column}.lp-course-builder-content__section .cb-course-edit-column--left{flex:1;max-width:100%}.lp-course-builder-content__section .cb-course-edit-column--right{flex:1}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-course-builder-content__section .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.lp-course-builder-content__section .course-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .course-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-course-edit-title{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-content__section .cb-course-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-course-builder-content__section .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-content__section .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-course-builder-content__section .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-course-builder-content__section .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-course-builder-content__section .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-course-builder-content__section .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.lp-course-builder-content__section .cb-course-edit-tags__wrapper,.lp-course-builder-content__section .cb-course-edit-categories__wrapper{flex:1}.lp-course-builder-content__section .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-course-builder-content__section .cb-course-edit-categories__search-wrap{display:block}.lp-course-builder-content__section .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-course-builder-content__section .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-course-builder-content__section .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-course-builder-content__section .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.lp-course-builder-content__section .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.lp-course-builder-content__section .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.lp-course-builder-content__section .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-course-builder-content__section .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-course-builder-content__section .cb-tag-chip{display:inline-flex;align-items:center}.lp-course-builder-content__section .cb-tag-chip input[type=checkbox]{display:none}.lp-course-builder-content__section .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-course-builder-content__section .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.lp-course-builder-content__section .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.lp-course-builder-content__section .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-course-builder-content__section .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.lp-course-builder-content__section .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-course-builder-content__section .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-course-builder-content__section .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-course-builder-content__section .cb-course-edit-featured-image{margin-bottom:24px}.lp-course-builder-content__section .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-course-builder-content__section .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.lp-course-builder-content__section .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-course-builder-content__section .cb-featured-image-preview:has(img){border:0}.lp-course-builder-content__section .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-course-builder-content__section .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-course-builder-content__section .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-course-builder-content__section .cb-remove-featured-image,.lp-course-builder-content__section .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.lp-course-builder-content__section .cb-remove-featured-image:hover,.lp-course-builder-content__section .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.lp-course-builder-content__section .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.lp-course-builder-content__section .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-content__section .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-content__section .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-course-builder-content__section .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-course-builder-content__section .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-course-builder-content__section div.mce-statusbar{border-top:0}.lp-course-builder-content__section .cb-course-edit-terms__form-add-category,.lp-course-builder-content__section .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.lp-course-builder-content__section .cb-course-edit-category__input,.lp-course-builder-content__section .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__input:focus,.lp-course-builder-content__section .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-course-builder-content__section .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-course-builder-content__section .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-course-builder-content__section .cb-course-edit-category__btn-save,.lp-course-builder-content__section .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-course-builder-content__section .cb-course-edit-category__btn-save:hover,.lp-course-builder-content__section .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-course-builder-content__section .cb-course-edit-category__btn-save.loading:before,.lp-course-builder-content__section .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-course-builder-content__section .cb-course-edit-tag__btn-cancel:hover,.lp-course-builder-content__section .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-course-builder-content__section .cb-button.cb-btn-save-settings:hover{background:#333}.lp-course-builder-content__section .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-course-builder-content__section .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.lp-course-builder-content__section #general_course_data .form-field,.lp-course-builder-content__section #offline_course_data .form-field,.lp-course-builder-content__section #price_course_data .form-field,.lp-course-builder-content__section #extra_course_data .form-field{margin-bottom:24px}.lp-course-builder-content__section #general_course_data ._lp_featured_review_field{align-items:flex-start}.lp-course-builder-content__section #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.lp-course-builder-content__section #general_course_data ._lp_students_field .description{margin-top:-3px}.lp-course-builder-content__section #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.lp-course-builder-content__section #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.lp-course-builder-content__section #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-right:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-right:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.lp-course-builder-content__section #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.lp-course-builder-content__section .lp_course_extra_meta_box,.lp-course-builder-content__section .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.lp-course-builder-content__section .lp_course_extra_meta_box>label,.lp-course-builder-content__section .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.lp-course-builder-content__section .lp_course_extra_meta_box__content,.lp-course-builder-content__section .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.lp-course-builder-content__section .lp_course_extra_meta_box__fields,.lp-course-builder-content__section .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.lp-course-builder-content__section .lp_course_extra_meta_box__field,.lp-course-builder-content__section .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.lp-course-builder-content__section .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.lp-course-builder-content__section .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.lp-course-builder-content__section .lp_course_extra_meta_box__add,.lp-course-builder-content__section .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover,.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.lp-course-builder-content__section .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label input[type=text],.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label input[type=text]:focus,.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.lp-course-builder-content__section .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.lp-course-builder-content__section .lp_course_faq_meta_box__add,.lp-course-builder-content__section .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.lp-course-builder-content__section .lp_course_faq_meta_box__add:hover,.lp-course-builder-content__section .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.lp-course-builder-content__section ._lp_block_finished_field{margin-top:-8px !important}.lp-course-builder-content__section #extra_course_data .form-field{align-items:start}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-course-builder-content__section #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.lp-course-builder-content__section #extra_course_data input[type=text]:focus{box-shadow:none}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;right:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;left:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-course-builder-content__section #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content{width:100%}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 36px 16px 40px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;right:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;left:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-course-builder-content__section #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-course-builder-content__section #author_course_data .ts-control{border-radius:6px;padding:5px !important}.lp-course-builder-content__section #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.lp-course-builder-content__section #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.lp-course-builder-content__section .cb-featured-image-container{flex-direction:column}.lp-course-builder-content__section .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .lp-meta-box,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap{margin:0;background:transparent}.lp-cb-tab-content .cb-section__course-edit .lp-meta-box .lp-meta-box__inner,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-cb-tab-content .cb-section__course-edit .form-field,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .form-field>label,.lp-cb-tab-content .cb-section__course-edit .form-field label span,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration>label,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration label span,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field>label,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=datetime-local]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=datetime-local]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=number],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=number]{width:80px !important}.lp-cb-tab-content .cb-section__course-edit .form-field select,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .form-field select:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration select:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio],.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio],.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:checked:before,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.lp-cb-tab-content .cb-section__course-edit .form-field input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .form-field input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration input[type=checkbox]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=radio]:focus,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-cb-tab-content .cb-section__course-edit .form-field .description,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}.lp-cb-tab-content .cb-section__course-edit .form-field .description:has(+.learn-press-tip),.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-cb-tab-content .cb-section__course-edit .form-field>.learn-press-tip,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box__duration>.learn-press-tip,.lp-cb-tab-content .cb-section__course-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-cb-tab-content .cb-section__course-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{display:flex;gap:40px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1;min-width:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label .required{color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-right:auto;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-permalink{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-display.lp-hidden{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-url:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-editor.lp-hidden{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-prefix strong{color:#64748b;font-weight:600}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-slug-input::placeholder{color:#94a3b8}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap{display:block}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip{display:inline-flex;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox]{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone:hover a{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-link:hover{text-decoration:underline}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-change-featured-image:hover{background:#7067ed;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish{margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row select{padding:6px 14px 6px 32px !important}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#7067ed;color:#fff}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-content{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--left{flex:1;max-width:100%}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-column--right{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__course-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.lp-cb-tab-content .cb-section__course-edit .course-status.publish{color:#fff;background:#1e1e1e}.lp-cb-tab-content .cb-section__course-edit .course-status.trash{color:#fff;background-color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__wrapper{flex:1}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__search-wrap{display:block}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip{display:inline-flex;align-items:center}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input[type=checkbox]{display:none}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.lp-cb-tab-content .cb-section__course-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview:has(img){border:0}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image,.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-remove-featured-image:hover,.lp-cb-tab-content .cb-section__course-edit .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.lp-cb-tab-content .cb-section__course-edit div.mce-statusbar{border-top:0}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-category,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__input:focus,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-save.loading:before,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-tag__btn-cancel:hover,.lp-cb-tab-content .cb-section__course-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings:hover{background:#333}.lp-cb-tab-content .cb-section__course-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.lp-cb-tab-content .cb-section__course-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.lp-cb-tab-content .cb-section__course-edit #general_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #offline_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #price_course_data .form-field,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field{margin-bottom:24px}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field{align-items:flex-start}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.lp-cb-tab-content .cb-section__course-edit #general_course_data ._lp_students_field .description{margin-top:-3px}.lp-cb-tab-content .cb-section__course-edit #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.lp-cb-tab-content .cb-section__course-edit #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-right:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-right:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.lp-cb-tab-content .cb-section__course-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box>label,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__content,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__fields,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label input[type=text],.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label input[type=text]:focus,.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit .lp_course_faq_meta_box__add:hover,.lp-cb-tab-content .cb-section__course-edit .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.lp-cb-tab-content .cb-section__course-edit ._lp_block_finished_field{margin-top:-8px !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .form-field{align-items:start}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.lp-cb-tab-content .cb-section__course-edit #extra_course_data input[type=text]:focus{box-shadow:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;right:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;left:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content{width:100%}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 36px 16px 40px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;right:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;left:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.lp-cb-tab-content .cb-section__course-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control{border-radius:6px;padding:5px !important}.lp-cb-tab-content .cb-section__course-edit #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.lp-cb-tab-content .cb-section__course-edit #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-container{flex-direction:column}.lp-cb-tab-content .cb-section__course-edit .cb-featured-image-preview{width:100%;max-width:300px}}.lp-cb-tab-content .cb-section__header{display:none !important}.lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-left:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-right:3px solid transparent;margin-right:-3px}ul.lp-meta-box__course-tab__tabs li a i{display:none}ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}ul.lp-meta-box__course-tab__tabs li.active a,ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#3b82f6;font-weight:600;border-right-color:#3b82f6;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}@media(max-width:768px){.lp-meta-box__course-tab{flex-direction:column}ul.lp-meta-box__course-tab__tabs{width:100%;border-left:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:12px;background:#f9fafb}ul.lp-meta-box__course-tab__tabs li{flex-shrink:0;padding:0 4px}ul.lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;margin-right:0;white-space:nowrap}ul.lp-meta-box__course-tab__tabs li.active a{border-right:0;border-bottom-color:#3b82f6}}#lp-course-builder-content #lp-course-edit-curriculum{background-color:#fff;border-radius:12px;padding:0;color:#1f2937;max-width:100%;box-sizing:border-box}#lp-course-builder-content #lp-course-edit-curriculum .heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}#lp-course-builder-content #lp-course-edit-curriculum .heading h4{color:#898989}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}#lp-course-builder-content #lp-course-edit-curriculum .heading .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .count-sections{margin-right:0}#lp-course-builder-content #lp-course-edit-curriculum .heading:has(.lp-btn-generate-with-ai) .lp-btn-generate-with-ai{margin-right:auto}#lp-course-builder-content #lp-course-edit-curriculum .section-items-counts,#lp-course-builder-content #lp-course-edit-curriculum .count-sections,#lp-course-builder-content #lp-course-edit-curriculum .total-items{background:transparent;color:#898989;font-size:12px;font-weight:600;padding:0;border-radius:12px;margin-right:10px}#lp-course-builder-content #lp-course-edit-curriculum .count-sections{margin-right:auto}#lp-course-builder-content #lp-course-edit-curriculum .course-toggle-all-sections{cursor:pointer;color:#9ca3af;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections{border:0}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section{background:#fff;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:16px;transition:all .2s ease}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section:hover{border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05)}#lp-course-builder-content #lp-course-edit-curriculum .curriculum-sections .section.focus{border-color:#7067ed !important}#lp-course-builder-content #lp-course-edit-curriculum .section-head{display:flex;align-items:center;padding:10px 20px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag{cursor:grab;color:#9ca3af;margin-left:12px;font-size:16px}#lp-course-builder-content #lp-course-edit-curriculum .section-head .drag:hover{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .section-head .button{font-size:12px;padding:6px 12px;border-radius:6px;margin-right:8px;cursor:pointer;font-weight:500}#lp-course-builder-content #lp-course-edit-curriculum .section:not(.lp-collapse) .section-head{background-color:#eef1ff;border-radius:12px 12px 0 0}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input{flex-grow:1;border:0;background:transparent;font-size:15px;font-weight:600;color:#1e1e1e;padding:6px 10px;border-radius:6px;transition:all .2s;width:auto}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:hover,#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-input:focus{background:transparent;border:0;outline:0;box-shadow:none}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-title:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-section-description:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-update-item-title:hover{background:#5b52d1}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-title:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-section-description:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-cancel-update-item-title:hover{border-color:#7067ed;color:#7067ed;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section{color:#ef4444;background:rgba(254,226,226,0.5);border:0;transition:background .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-delete-section:hover{background:#fee2e2}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-edit-section-title:hover{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up{margin-right:0;color:#777;cursor:pointer}#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-down:hover,#lp-course-builder-content #lp-course-edit-curriculum .lp-icon-angle-up:hover{color:#1e1e1e !important}#lp-course-builder-content #lp-course-edit-curriculum .section-collapse{padding:20px;background-color:#fff;border-radius:0 0 12px 12px;border-top:unset}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea{width:100%;border:1px dashed #d1d5db;background:#fff;padding:10px;border-radius:6px;font-size:13px;color:#6b7280;resize:vertical;min-height:60px;margin-bottom:15px}#lp-course-builder-content #lp-course-edit-curriculum .section-description textarea:focus{border-style:solid;border-color:#9ca3af;outline:0;color:#374151}#lp-course-builder-content #lp-course-edit-curriculum ul.section-list-items{list-style:none;padding:0;margin:0}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item{display:flex;align-items:center;background:#fff;border:1px solid #e5e7eb;margin-bottom:8px;padding:10px 15px;border-radius:6px;position:relative;transition:transform .1s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type:hover,#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover{border-color:#d1d5db}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus,#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus{border-color:#7067ed !important}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type.focus .item-ico-type,#lp-course-builder-content #lp-course-edit-curriculum .section-item.focus .item-ico-type{color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum .item-ico-type{background-size:contain;background-repeat:no-repeat;background-position:center;opacity:.8;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_lesson .item-ico-type::before{content:\"\\f15b\";font-family:\"lp-icon\";font-size:18px}#lp-course-builder-content #lp-course-edit-curriculum .section-item.lp_quiz .item-ico-type::before{content:\"\\f12e\";font-family:\"lp-icon\";font-size:18px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input{border:0;background:transparent;font-size:14px;color:#374151;flex-grow:1;padding:5px}#lp-course-builder-content #lp-course-edit-curriculum input.lp-item-title-input:focus{outline:0;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions{display:flex;gap:4px;opacity:.3;transition:opacity .2s;list-style:none;margin:0;padding:0}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover{background:#f7f7f7}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a{color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li:hover a.lp-icon-trash-o{color:#ef4444}#lp-course-builder-content #lp-course-edit-curriculum ul.item-actions li a{color:#6b7280;font-size:16px;cursor:pointer;text-decoration:none}#lp-course-builder-content #lp-course-edit-curriculum .section-item:hover ul.item-actions{opacity:1}#lp-course-builder-content #lp-course-edit-curriculum .section-item:not(.lp_lesson) .lp-btn-set-preview-item{display:none}#lp-course-builder-content #lp-course-edit-curriculum .section-actions{margin-top:15px;display:flex;gap:10px;flex-wrap:wrap}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button{display:inline-flex;opacity:.7}#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button:hover{opacity:1;color:#7067ee;border-color:#eef1ff;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum button,#lp-course-builder-content #lp-course-edit-curriculum .section-actions .button,#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button{display:inline-flex;min-width:fit-content}#lp-course-builder-content #lp-course-edit-curriculum .lp-add-item-type button:hover{background:#f3f4f6;border-color:#9ca3af;color:#1e1e1e}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary{background-color:#7067ed;border-color:#7067ed;color:#fff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item.button-primary:hover{background:#5a51c1;color:#fff}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-add-item-cancel.button{background-color:transparent;border:0;color:#aaa}#lp-course-builder-content #lp-course-edit-curriculum .lp-btn-show-popup-items-to-select{margin-right:auto;border-style:dashed !important}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:5px 20px;display:flex;align-items:center}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section .lp-icon-plus{color:#9ca3af}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within{border-color:#7067ee;background:#eef1ff}#lp-course-builder-content #lp-course-edit-curriculum .add-new-section:focus-within .lp-icon-plus{color:#7067ee}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input{flex-grow:1;padding:12px 0;border:0;border-radius:6px;font-size:14px;outline:0;transition:border .2s}#lp-course-builder-content #lp-course-edit-curriculum input.lp-section-title-new-input:focus{border-color:#7067ed}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section{background-color:#7067ed;color:#fff;border:0;padding:8px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;transition:background .2s;min-width:fit-content;margin-right:20px}#lp-course-builder-content #lp-course-edit-curriculum button.lp-btn-add-section:hover{background-color:#5a51c1}#lp-course-builder-content #lp-course-edit-curriculum .lp-hidden{display:none !important}#taxonomy-course_category.categorydiv{border:none !important;box-shadow:none !important;background:transparent !important;margin:0 !important}#taxonomy-course_category.categorydiv .category-tabs{display:flex !important;gap:20px;margin:0 0 15px 0 !important;padding:0 !important;border-bottom:1px solid #f5f5f5}#taxonomy-course_category.categorydiv .category-tabs li{display:inline-block !important;margin:0 !important;padding:0 !important;border:0}#taxonomy-course_category.categorydiv .category-tabs li a{text-decoration:none;font-size:14px;font-weight:600;color:#9ca3af;padding-bottom:8px;display:block;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}#taxonomy-course_category.categorydiv .category-tabs li.tabs a,#taxonomy-course_category.categorydiv .category-tabs li:hover a{color:#7067ed;border-bottom-color:#7067ed}#taxonomy-course_category.categorydiv .tabs-panel{border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;display:none}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar{width:6px}#taxonomy-course_category.categorydiv .tabs-panel::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}#taxonomy-course_category.categorydiv ul.categorychecklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 30px;margin:0 !important;padding:0 !important}#taxonomy-course_category.categorydiv ul.categorychecklist li{margin:0 !important;padding:0 !important;width:100%;list-style:none}#taxonomy-course_category.categorydiv ul.children{display:none !important;margin-right:20px !important;margin-top:5px !important;padding-right:10px !important;border-right:2px solid #e5e7eb;transition:all .3s ease}#taxonomy-course_category.categorydiv ul.children li{margin-bottom:5px !important}#taxonomy-course_category.categorydiv li.children-visible>ul.children{display:block !important}#taxonomy-course_category.categorydiv input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;margin-left:8px !important;position:relative}#taxonomy-course_category.categorydiv input[type=checkbox]:checked{background:#28a746;border-color:#28a746}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::after{content:\"\";position:absolute;right:4px;top:1px;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:rotate(-45deg)}#taxonomy-course_category.categorydiv input[type=checkbox]:checked::before{content:\"\"}#taxonomy-course_category.categorydiv label{display:inline-flex !important;align-items:center;width:auto !important;font-size:14px;color:#1e1e1e;cursor:pointer;line-height:1.5}#course_category-adder{display:none !important}#course_category-add-toggle{text-decoration:none;font-weight:600;font-size:14px;color:#1e1e1e;display:flex;align-items:center}#course_category-add-toggle:hover{color:#2563eb}#course_category-add{display:none;margin-top:15px}#course_category-add label{display:none !important}#course_category-add input[type=text],#course_category-add select{width:100%;max-width:100%;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;margin-bottom:10px;font-size:14px;height:40px}#course_category-add-submit{background:#1e1e1e;color:#fff;border:0;padding:8px 20px;border-radius:6px;font-weight:500;cursor:pointer}#course_category-add-submit:hover{background:#333}.lp-cat-toggle{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:5px;cursor:pointer;color:#9ca3af;transition:transform .2s ease,color .2s;font-size:12px}.lp-cat-toggle::before{content:\"\\f347\";font-family:dashicons}.lp-cat-toggle:hover{color:#1e1e1e;background-color:#f3f4f6;border-radius:50%}li.children-visible>label>.lp-cat-toggle{transform:rotate(-180deg)}.lp-course-builder-content__section .lesson-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-content__section .lesson-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-content__section .lesson-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-content__section .cb-section__lesson-title-assigned{display:flex;gap:40px}.lp-course-builder-content__section .cb-lesson-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-content__section .lesson-assigned-courses{display:flex;flex-direction:column;align-items:end;margin-left:0 !important}.lp-course-builder-content__section .lesson-assigned-courses .label{font-size:16px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .lesson-assigned-courses a,.lp-course-builder-content__section .lesson-assigned-courses span{font-size:16px;font-weight:400}.lp-course-builder-content__section .cb-lesson-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section input.cb-lesson-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-content__section input.cb-lesson-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.lp-course-builder-content__section .cb-lesson-edit-desc{margin-bottom:24px}.lp-course-builder-content__section .cb-lesson-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-content__section .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-content__section .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-content__section .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-content__section .cb-button.cb-btn-update__lesson{background:#1e1e1e;color:#fff}.lp-course-builder-content__section .cb-button.cb-btn-trash__lesson{background:#dc2626;color:#fff}.lp-course-builder-content__section .lp-material-btn-wrap{display:flex;gap:12px}.lp-course-builder-content__section #lp-material--group-container{padding:20px;border:1px solid #f5f5f5;border-radius:12px;max-width:420px}.lp-course-builder-content__section #btn-lp--add-material,.lp-course-builder-content__section #btn-lp--save-material{padding:8px 25px;border-radius:5px;background:#fff;font-size:16px;font-weight:500;cursor:pointer;border:1px solid #d1d5db}.lp-course-builder-content__section table.lp-material--table thead.hidden{display:none}@media(max-width:768px){.lp-course-builder-content__section #lp-course-builder-content{padding:16px}}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content{display:flex;gap:40px;align-items:flex-start}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left{flex:0 0 400px;max-width:400px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right{flex:1;min-width:0}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned{margin-bottom:20px;font-size:14px;line-height:1.6}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned .label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned .label{font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a{color:#7067ed;text-decoration:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned a:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-assigned a:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink{margin-bottom:20px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder{display:block;font-size:13px;line-height:1.5;word-break:break-all}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url{color:#7067ed;text-decoration:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__url:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__placeholder,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-permalink__placeholder{color:#374151}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url{display:block;font-size:13px;line-height:1.5;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-url:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-url:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-prefix,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-prefix,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-input-row,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-input-row,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-actions,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-actions,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-canvas .cb-section__quiz-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__title{margin:0 0 12px;font-size:14px;font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__row,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-publish__control,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-publish__control{width:100%;height:34px;padding:6px 14px 6px 32px !important;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:14px;color:#1a1a1a}@media(max-width:1024px){.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-content,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-content{flex-direction:column;gap:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--left,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--left,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--left{flex-basis:auto;max-width:100%;width:100%}.lp-course-builder-canvas .cb-section__quiz-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__lesson-edit .cb-item-edit-column--right,.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-column--right,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-item-edit-column--right{width:100%}}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-list-questions .lp-question-item .lp-question-type-label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-list-questions .lp-question-item .lp-question-type-label{background-color:#eef1ff;color:#7067ed;font-size:12px;font-weight:600;padding:4px 10px;border-radius:6px;margin-left:10px;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding:20px;background-color:#f7f7f7;border-radius:12px 12px 0 0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit-header label{font-size:15px;font-weight:600;color:#1a1a1a}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-label{background-color:#eef1ff;color:#7067ed;font-size:12px;font-weight:600;padding:4px 10px;border-radius:6px;margin-left:10px;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-answers-config,.lp-course-builder-canvas .cb-section__lesson-edit .lp-answers-config,.lp-course-builder-canvas .cb-section__question-edit .lp-answers-config,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-answers-config{padding:0 16px 16px 16px;margin-top:15px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap{display:flex;align-items:center;gap:10px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new{flex:1;height:38px;padding:0 12px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#1e1e1e;cursor:pointer;outline:0;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:left 10px center;background-size:14px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap select.lp-question-type-new:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap select.lp-question-type-new:focus{border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type{display:inline-flex;align-items:center;gap:6px;background-color:#eef1ff;color:#7067ed;border:0;padding:9px 18px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type:hover{background-color:#7067ed;color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-type-new-wrap button.lp-btn-question-create-type .lp-icon-spinner{font-size:14px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit{border:1px solid #f5f5f5;border-radius:12px;overflow:hidden}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-data-edit .wp-editor-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-data-edit .wp-editor-wrap{margin:0 20px 20px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-by-type,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-by-type,.lp-course-builder-canvas .cb-section__question-edit .lp-question-by-type,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-by-type{border:1px solid #f5f5f5;border-radius:12px;margin-top:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-choice-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-choice-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-choice-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-choice-header{display:flex;justify-content:space-between;padding:0 4px 8px 4px;font-size:12px;color:#898989;font-weight:500;margin-bottom:8px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item{display:flex;align-items:center;margin-bottom:12px;border-radius:6px;padding:12px 16px;border:0;background:#fff;position:relative}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item .drag,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item .drag{color:#7067ed;cursor:move;margin-left:12px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input{flex-grow:1;padding:10px 14px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-left:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-input:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-delete-question-answer,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-delete-question-answer{color:#9ca3af;cursor:pointer;opacity:0;transition:opacity .2s;margin-left:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item:hover .lp-btn-delete-question-answer,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item:hover .lp-btn-delete-question-answer{opacity:1;color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:20px;height:20px;border:2px solid #d1d5db;border-radius:50%;cursor:pointer;position:relative;outline:0;transition:border-color .2s;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]{border-radius:4px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input:checked{border-color:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=radio]:checked::after,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=radio]:checked::after{content:\"\";position:absolute;top:50%;right:50%;transform:translate(50%,-50%);width:10px;height:10px;background:#28a746;border-radius:50%}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item input[type=checkbox]:checked::after,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item input[type=checkbox]:checked::after{content:\"\";position:absolute;top:50%;right:50%;width:5px;height:9px;border:solid white;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg);background:transparent;border-radius:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new{display:flex;align-items:center;margin-top:16px;padding:24px 0 0 0;border:0;border-top:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-answer-item-add-new .lp-icon-plus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-answer-item-add-new .lp-icon-plus{color:#7067ed;margin-left:12px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input{flex-grow:1;border:1px solid #e5e7eb;padding:10px 14px;border-radius:6px;font-size:14px;color:#1e1e1e;margin-left:16px}.lp-course-builder-canvas .cb-section__quiz-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .cb-section__question-edit input.lp-question-answer-title-new-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] input.lp-question-answer-title-new-input:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary{background:#fff;color:#374151;border:1px solid #d1d5db;padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;min-width:fit-content;transition:all .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active{background:#eef1ff;color:#7067ed;border-color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary.active:hover{background:#7067ed;color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-add-question-answer.lp-btn-edit-primary:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-add-question-answer.lp-btn-edit-primary:hover{color:#374151;background:#f7f7f7;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content{background:#7067ed;color:#fff;border-color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-buttons button.lp-btn-fib-save-content:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-buttons button.lp-btn-fib-save-content:hover{background:#5b52d1;border-color:#5b52d1}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details{margin-top:24px;border:1px solid #f5f5f5;border-radius:12px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header{cursor:pointer;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label{cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse{border:0}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-question-data-edit-header{margin-bottom:0;border-radius:12px 12px 12px 12px}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-up,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-up{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-icon-angle-down,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-icon-angle-down{display:block !important}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details.lp-collapse .lp-section-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details.lp-collapse .lp-section-collapse{display:none}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle{padding:14px 16px;background-color:#f7f7f7;cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background .2s}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle:hover{background-color:#e5e7eb}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle label{font-weight:600;font-size:14px;margin:0;cursor:pointer;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-question-data-edit-header .lp-tinymce-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-trigger-toggle .lp-tinymce-toggle{color:#9ca3af;transition:transform .2s}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details:not(.lp-collapse) .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-question-data-edit-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details:not(.lp-collapse) .lp-trigger-toggle{border-bottom-color:#f7f7f7}.lp-course-builder-canvas .cb-section__quiz-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .cb-section__lesson-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .cb-section__question-edit .question-edit-details .lp-section-collapse,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .question-edit-details .lp-section-collapse{padding:20px;background:#fff;border:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings{padding:0 0 24px 0;display:block}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings__label label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings__label label{font-size:14px;font-weight:600;color:#1a1a1a;display:block;margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]{width:100px;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings input[name=lp-question-point-input]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings input[name=lp-question-point-input]:focus{border-color:#7067ed;outline:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-desc,.lp-course-builder-canvas .cb-section__question-edit .lp-question-field-settings___desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-field-settings___desc{font-size:12px;color:#9ca3af;margin-top:8px;font-style:normal}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question{margin-top:30px;background:#fff;border:1px dashed #d1d5db;border-radius:8px;padding:20px;display:flex;align-items:center;gap:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question.lp-icon-plus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question.lp-icon-plus{color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap .add-new-question select,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap .add-new-question select{height:38px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input{flex-grow:1;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:0;min-width:200px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-edit-quiz-wrap input.lp-question-title-new-input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-edit-quiz-wrap input.lp-question-title-new-input:focus{border-color:#7067ed;box-shadow:none}.lp-course-builder-canvas .cb-section__quiz-edit select.lp-question-type-new,.lp-course-builder-canvas .cb-section__lesson-edit select.lp-question-type-new,.lp-course-builder-canvas .cb-section__question-edit select.lp-question-type-new,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] select.lp-question-type-new{padding:0 12px 0 30px;border:1px solid #e5e7eb;border-radius:6px;background-color:#fff;font-size:14px;color:#374151;cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question{background-color:#eef1ff;color:#7067ed;border:1px solid #7067ed;padding:10px 20px;border-radius:8px;font-weight:600;font-size:14px;transition:background .2s;min-width:fit-content;cursor:default !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover{opacity:.5;background-color:#eef1ff !important;color:#7067ed !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active{cursor:pointer !important;background:#7067ed !important;color:#eef1ff !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question.active:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question.active:hover{background:#5b52d1 !important}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-add-question:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-add-question:hover{background-color:#7067ed;color:#eef1ff}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select{background-color:#fff;color:#374151;border:1px solid #d1d5db;padding:10px 16px;border-radius:6px;font-weight:500;font-size:14px;cursor:pointer;min-width:fit-content}.lp-course-builder-canvas .cb-section__quiz-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .cb-section__lesson-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .cb-section__question-edit [class*=lp-icon-]:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] [class*=lp-icon-]:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .cb-section__lesson-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .cb-section__question-edit button.lp-btn-show-popup-items-to-select:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] button.lp-btn-show-popup-items-to-select:hover{background-color:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item{margin-bottom:12px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header{border-radius:6px 6px 0 0;border-bottom:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;border-radius:6px;border:1px solid #e5e7eb;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-left:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-left:16px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner{margin-left:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-left:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-right:auto}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-left:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-left:16px;background:transparent}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-icon-spinner{margin-left:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-left:16px;font-size:16px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-right:auto}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__lesson-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail{font-size:14px;padding:24px;background:#f7f7f7;border:1px solid #e5e7eb;border-top:0;border-radius:0 0 6px 6px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail>label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail>label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:flex-end;align-items:center}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio],.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]{order:1;margin-top:2px;appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked{background:#28a746}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail input[type=checkbox]:checked:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=radio]:checked:before,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail input[type=checkbox]:checked:before{right:22px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap{display:flex;flex-direction:column;gap:8px;font-size:14px;font-weight:500;margin-top:20px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>*{display:flex;gap:8px;font-size:14px;font-weight:500}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label{display:flex;flex-direction:row-reverse;font-weight:500;gap:8px;min-width:80px;justify-content:space-between;align-items:self-start}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* label input{margin-top:3px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .cb-section__lesson-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-question-fib-option-detail .lp-question-fib-option-match-case-wrap>* p{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;font-weight:400}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .lp-cb-section__title,.lp-course-builder-canvas .cb-section__lesson-edit .lp-cb-section__title,.lp-course-builder-canvas .cb-section__question-edit .lp-cb-section__title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status,.lp-course-builder-canvas .cb-section__question-edit .quiz-status,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.publish,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.publish,.lp-course-builder-canvas .cb-section__question-edit .quiz-status.publish,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.publish,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.publish,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-canvas .cb-section__quiz-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__quiz-edit .quizzes-status.trash,.lp-course-builder-canvas .cb-section__lesson-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__lesson-edit .quizzes-status.trash,.lp-course-builder-canvas .cb-section__question-edit .quiz-status.trash,.lp-course-builder-canvas .cb-section__question-edit .quizzes-status.trash,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quiz-status.trash,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .quizzes-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title{margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-title .cb-quiz-edit-title__input:focus,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-title .cb-quiz-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc{margin-bottom:24px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .cb-section__lesson-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .cb-section__question-edit .cb-quiz-edit-desc__label,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-quiz-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button,.lp-course-builder-canvas .cb-section__question-edit .cb-button,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__quiz,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-update__quiz{background:#1e1e1e;color:#fff}.lp-course-builder-canvas .cb-section__quiz-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .cb-section__lesson-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__quiz,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] .cb-button.cb-btn-trash__quiz{background:#dc2626;color:#fff}@media(max-width:768px){.lp-course-builder-canvas .cb-section__quiz-edit #lp-course-builder-content,.lp-course-builder-canvas .cb-section__lesson-edit #lp-course-builder-content,.lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content,.lp-course-builder-canvas .lp-cb-tab-panel[data-section=question] #lp-course-builder-content{padding:16px}}#lp-course-builder-content .lp-edit-quiz-wrap{background-color:#fff;border-radius:12px;padding:0}#lp-course-builder-content .lp-edit-quiz-wrap .heading{display:flex;align-items:center;margin-bottom:8px;gap:8px}#lp-course-builder-content .lp-edit-quiz-wrap .heading h4{color:#898989}#lp-course-builder-content .lp-edit-quiz-wrap .heading .total-items{margin-right:auto;font-size:13px;color:#898989}#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}#lp-course-builder-content .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .one,#lp-course-builder-content .lp-edit-quiz-wrap .plural{display:none}#lp-course-builder-content .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:12px;margin-bottom:12px;background:#fff;transition:all .2s}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s;font-weight:600}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#eef1ff !important;color:#7067ed;padding:4px 10px;border-radius:20px;white-space:nowrap;font-weight:600}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus){border:1px solid #7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#f5f5f5;border-radius:12px 12px 0 0;background:#eef1ff}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:24px;background:#fff;border-radius:0 0 12px 12px}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.clone{display:none}#lp-course-builder-content .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #e5e7eb;border-radius:12px;margin-top:12px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#7067ed;box-shadow:none}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#7067ed}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;border:1px solid #7067ed;color:#7067ed;border-radius:8px;font-weight:500;cursor:pointer}#lp-course-builder-content .lp-edit-quiz-wrap .add-new-question .button:hover{background:#7067ed;color:#eef1ff}#lp-course-builder-content .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}#lp-course-builder-content .lp-edit-quiz-wrap .lp-edit-list-questions{border:0}.cb-section__quiz-edit .lp-meta-box,.cb-section__quiz-edit .lp-meta-box-wrap{margin:0;background:transparent}.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.cb-section__quiz-edit .form-field,.cb-section__quiz-edit .lp-meta-box__duration,.cb-section__quiz-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.cb-section__quiz-edit .form-field>label,.cb-section__quiz-edit .form-field label span,.cb-section__quiz-edit .lp-meta-box__duration>label,.cb-section__quiz-edit .lp-meta-box__duration label span,.cb-section__quiz-edit .lp-meta-box-field>label,.cb-section__quiz-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .form-field input[type=text],.cb-section__quiz-edit .form-field input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=text],.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box-field input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=text],.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.cb-section__quiz-edit .form-field input[type=number]:focus,.cb-section__quiz-edit .form-field input[type=text]:focus,.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=number]{width:80px !important}.cb-section__quiz-edit .form-field select,.cb-section__quiz-edit .lp-meta-box__duration select,.cb-section__quiz-edit .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.cb-section__quiz-edit .form-field select:focus,.cb-section__quiz-edit .lp-meta-box__duration select:focus,.cb-section__quiz-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=radio],.cb-section__quiz-edit .form-field input[type=checkbox],.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],.cb-section__quiz-edit .lp-meta-box-field input[type=radio],.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.cb-section__quiz-edit .form-field input[type=radio]:before,.cb-section__quiz-edit .form-field input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.cb-section__quiz-edit .form-field input[type=radio]:checked,.cb-section__quiz-edit .form-field input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.cb-section__quiz-edit .form-field input[type=radio]:checked:before,.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.cb-section__quiz-edit .form-field input[type=radio]:focus,.cb-section__quiz-edit .form-field input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field .description,.cb-section__quiz-edit .lp-meta-box__duration .description,.cb-section__quiz-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}.cb-section__quiz-edit .form-field .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.cb-section__quiz-edit .form-field>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box__duration>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.cb-section__quiz-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.cb-section__quiz-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.cb-section__quiz-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.cb-section__quiz-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.cb-section__quiz-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:5px;text-transform:capitalize}.cb-section__quiz-edit .course-status.publish{color:#fff;background:#1e1e1e}.cb-section__quiz-edit .course-status.trash{color:#fff;background-color:#dc2626}.cb-section__quiz-edit .cb-course-edit-content{display:flex;gap:40px}.cb-section__quiz-edit .cb-course-edit-column--left{flex:0 0 400px;max-width:400px}.cb-section__quiz-edit .cb-course-edit-column--right{flex:1;min-width:0}.cb-section__quiz-edit .cb-course-edit-title{margin-bottom:20px}.cb-section__quiz-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-title__label .required{color:#ef4444}.cb-section__quiz-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-ai-btn{display:inline-flex;align-items:center;justify-content:center;background:transparent;border:0;color:#7067ed;text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;padding:8px 10px;border-radius:12px;line-height:1;margin-right:auto;transition:all .2s ease}.cb-section__quiz-edit .cb-course-edit-ai-btn .lp-ico-ai{width:16px;height:16px}.cb-section__quiz-edit .cb-course-edit-ai-btn:hover{background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-title__input:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1}.cb-section__quiz-edit .cb-course-edit-title__input::placeholder{color:#9ca3af}.cb-section__quiz-edit .cb-course-edit-permalink{margin-bottom:20px}.cb-section__quiz-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.cb-section__quiz-edit .cb-permalink-display.lp-hidden{display:none}.cb-section__quiz-edit .cb-permalink-label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.cb-section__quiz-edit .cb-permalink-url{font-size:13px;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.cb-section__quiz-edit .cb-permalink-url:hover{text-decoration:underline}.cb-section__quiz-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.cb-section__quiz-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.cb-section__quiz-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.cb-section__quiz-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.cb-section__quiz-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.cb-section__quiz-edit .cb-permalink-editor.lp-hidden{display:none}.cb-section__quiz-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.cb-section__quiz-edit .cb-permalink-prefix strong{color:#64748b;font-weight:600}.cb-section__quiz-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.cb-section__quiz-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.cb-section__quiz-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.cb-section__quiz-edit .cb-permalink-slug-input::placeholder{color:#94a3b8}.cb-section__quiz-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.cb-section__quiz-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.cb-section__quiz-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.cb-section__quiz-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.cb-section__quiz-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.cb-section__quiz-edit .cb-course-edit-desc{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.cb-section__quiz-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:30px}.cb-section__quiz-edit .cb-course-edit-tags__wrapper,.cb-section__quiz-edit .cb-course-edit-categories__wrapper{flex:1;border-radius:8px;border:1px solid #e5e7eb;padding:16px}.cb-section__quiz-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.cb-section__quiz-edit .cb-course-edit-categories__search-wrap{display:block}.cb-section__quiz-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;min-height:36px}.cb-section__quiz-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#64748b}.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.cb-section__quiz-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-tag-chip{display:inline-flex;align-items:center}.cb-section__quiz-edit .cb-tag-chip input[type=checkbox]{display:none}.cb-section__quiz-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#64748b;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.cb-section__quiz-edit .cb-tag-chip label:hover{border-color:#94a3b8;color:#334155}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#94a3b8}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.cb-section__quiz-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(34,113,177,0.1)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.cb-section__quiz-edit .cb-course-edit-featured-image{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-featured-image__title{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.cb-section__quiz-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:12px;align-items:flex-start}.cb-section__quiz-edit .cb-featured-image-dropzone{width:100%;min-height:200px;background:#fff;border:2px dashed #d1d5db;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;overflow:hidden}.cb-section__quiz-edit .cb-featured-image-dropzone:hover{border-color:#7067ed;background:rgba(112,103,237,0.03)}.cb-section__quiz-edit .cb-featured-image-dropzone:hover a{color:#7067ed}.cb-section__quiz-edit .cb-featured-image-dropzone.has-image{cursor:default;border-width:1px;border-style:solid;border-color:#e5e7eb;padding:0}.cb-section__quiz-edit .cb-featured-image-dropzone.dragover{border-color:#7067ed;background:rgba(112,103,237,0.05)}.cb-section__quiz-edit .cb-featured-image-upload-content{text-align:center;padding:30px 20px}.cb-section__quiz-edit .cb-featured-image-icon{display:flex;justify-content:center;margin-bottom:12px;opacity:.6}.cb-section__quiz-edit .cb-featured-image-icon__image{display:block;width:24px;height:24px;background:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-featured-image.svg\") no-repeat center\u002Fcontain}.cb-section__quiz-edit .cb-featured-image-text{font-size:14px;color:#6b7280;margin:0 0 6px 0}.cb-section__quiz-edit .cb-featured-image-link{color:#1a1a1a;text-decoration:none;font-weight:500}.cb-section__quiz-edit .cb-featured-image-link:hover{text-decoration:underline}.cb-section__quiz-edit .cb-featured-image-hint{font-size:12px;color:#9ca3af;margin:0}.cb-section__quiz-edit .cb-featured-image-preview__img{width:100%;height:auto;max-height:200px;object-fit:cover;display:block}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-change-featured-image{padding:6px 14px;border:0;background:#eef1ff;color:#7067ed;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.cb-section__quiz-edit .cb-change-featured-image:hover{background:#7067ed;color:#fff}.cb-section__quiz-edit .cb-remove-featured-image{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border:0;background:#eef1ff;color:#7067ed;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s}.cb-section__quiz-edit .cb-remove-featured-image:hover{background:#ef4444;color:#fff}.cb-section__quiz-edit .cb-remove-featured-image__icon{display:block;width:20px;height:20px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-trash.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.cb-section__quiz-edit .cb-course-edit-publish{margin-bottom:20px}.cb-section__quiz-edit .cb-course-edit-publish__title{margin:0 0 16px;font-size:16px;font-weight:600;color:#111827}.cb-section__quiz-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-publish__row select{padding:6px 14px 6px 32px !important}.cb-section__quiz-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.cb-section__quiz-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.cb-section__quiz-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.cb-section__quiz-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cb-section__quiz-edit .cb-featured-image-preview:has(img){border:0}.cb-section__quiz-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.cb-section__quiz-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-set-featured-image{padding:8px 16px;border:1px solid #7067ed;background:#fff;color:#7067ed;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .2s}.cb-section__quiz-edit .cb-set-featured-image:hover{background:#7067ed;color:#fff}.cb-section__quiz-edit div.mce-statusbar{border-top:0}.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-category__input,.cb-section__quiz-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__input:focus,.cb-section__quiz-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.cb-section__quiz-edit .cb-course-edit-category__select-parent{width:100%;padding:6px 12px !important;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__btn-save,.cb-section__quiz-edit .cb-course-edit-tags__btn-save{flex:1;background:#1e1e1e;color:white;border-radius:6px;padding:8px 16px;border:0;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover{background:#333}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.cb-section__quiz-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover{background:#333}.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.cb-section__quiz-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}@media(max-width:900px){.cb-section__quiz-edit .cb-course-edit-content{flex-direction:column}.cb-section__quiz-edit .cb-course-edit-column--left{flex:1;max-width:100%}.cb-section__quiz-edit .cb-course-edit-column--right{flex:1}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{flex-direction:column;gap:24px}}@media(max-width:768px){.cb-section__quiz-edit .cb-featured-image-container{flex-direction:column}.cb-section__quiz-edit .cb-featured-image-preview{width:100%;max-width:300px}}.cb-section__quiz-edit .course-status{padding:5px 12px;font-size:12px;font-weight:500;background:#ccc;border-radius:12px;text-transform:capitalize}.cb-section__quiz-edit .course-status.publish{color:#fff;background:#1e1e1e}.cb-section__quiz-edit .course-status.trash{color:#fff;background-color:#dc2626}.cb-section__quiz-edit .cb-course-edit-title{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-title__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-title__char-count{font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.cb-section__quiz-edit .cb-course-edit-desc{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-desc__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:8px}.cb-section__quiz-edit .cb-course-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a}.cb-section__quiz-edit .cb-course-edit-desc__word-count{display:none;font-size:12px;font-weight:500;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px}.cb-section__quiz-edit .cb-course-edit-categories__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-terms-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-terms-header__label{font-size:14px;font-weight:600;color:#1a1a1a;margin:0}.cb-section__quiz-edit .cb-terms-header__btn-add-new{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:600;color:#9ca3af;background:transparent;border:0;cursor:pointer;transition:all .2s ease}.cb-section__quiz-edit .cb-terms-header__btn-add-new:hover{color:#7067ed}.cb-section__quiz-edit .cb-course-edit-terms-categories-wrapper{display:flex;gap:24px}.cb-section__quiz-edit .cb-course-edit-tags__wrapper,.cb-section__quiz-edit .cb-course-edit-categories__wrapper{flex:1}.cb-section__quiz-edit .cb-course-edit-tags__toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-categories__toolbar{margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-tags__search-wrap{flex:1 1 220px}.cb-section__quiz-edit .cb-course-edit-categories__search-wrap{display:block}.cb-section__quiz-edit .cb-course-edit-tags__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.cb-section__quiz-edit .cb-course-edit-tags__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__search-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.cb-section__quiz-edit .cb-course-edit-category__search-input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #f5f5f5;border-radius:6px;outline:0;background:#fff;transition:border-color .2s ease,box-shadow .2s ease}.cb-section__quiz-edit .cb-course-edit-category__search-input:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper{display:flex;gap:8px;flex-wrap:wrap;border:0;box-shadow:none;padding:5px 0;background:transparent;max-height:180px;overflow-y:auto;min-height:36px}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar{width:6px}.cb-section__quiz-edit .cb-course-edit-tags__checkbox-wrapper::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.cb-section__quiz-edit .cb-course-edit-tags__empty{margin:12px 0 0;font-size:13px;color:#9ca3af}.cb-section__quiz-edit .cb-course-edit-categories__checkbox-wrapper{display:flex;gap:10px 40px;flex-wrap:wrap}.cb-section__quiz-edit .cb-course-edit-tags__wrapper{margin-bottom:24px}.cb-section__quiz-edit .cb-tag-chip{display:inline-flex;align-items:center}.cb-section__quiz-edit .cb-tag-chip input[type=checkbox]{display:none}.cb-section__quiz-edit .cb-tag-chip label{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;border:1px solid #f5f5f5;border-radius:8px;cursor:pointer;transition:all .2s ease;font-size:14px;color:#1e1e1e;background:#fff;user-select:none;line-height:1.2;white-space:nowrap}.cb-section__quiz-edit .cb-tag-chip label:hover{border-color:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__count{font-size:13px;color:#9ca3af}.cb-section__quiz-edit .cb-tag-chip .cb-tag-chip__remove{display:none;font-size:16px;line-height:1;margin-right:2px}.cb-section__quiz-edit .cb-tag-chip input:checked+label{border-color:#eef1ff;color:#7067ed;background:#eef1ff;font-weight:500}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__count{color:#7067ed}.cb-section__quiz-edit .cb-tag-chip input:checked+label .cb-tag-chip__remove{display:inline;color:#9ca3af}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover{color:#898989;background:#f9fafb;border-color:#f9fafb}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__count{color:#898989}.cb-section__quiz-edit .cb-tag-chip input:checked+label:hover .cb-tag-chip__remove{display:inline;color:#7067ed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox{display:flex;align-items:center;margin-bottom:0;padding:4px 0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox:hover label{color:#1d2939}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;width:20px;height:20px;border:2px solid #d0d5dd;border-radius:4px;background:#fff;cursor:pointer;position:relative;margin:0 0 0 10px;transition:all .2s ease;flex-shrink:0}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:hover{border-color:#98a2b3}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked{background:#28a746;border-color:#28a746}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:checked::after{content:\"\";position:absolute;right:50%;top:50%;width:5px;height:9px;border:solid #fff;border-width:0 0 2px 2px;transform:translate(50%,-60%) rotate(-45deg)}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:focus{outline:0;box-shadow:none}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed;border-color:#e4e7ec;background:#f9fafb}.cb-section__quiz-edit .cb-course-edit-categories__checkbox input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed}.cb-section__quiz-edit .cb-course-edit-categories__checkbox label{font-size:14px;color:#344054;font-weight:400;cursor:pointer;user-select:none;line-height:20px}.cb-section__quiz-edit .cb-course-edit-featured-image{margin-bottom:24px}.cb-section__quiz-edit .cb-course-edit-featured-image__label-wrap{display:flex;align-items:center;gap:8px;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-featured-image__title{font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:0}.cb-section__quiz-edit .cb-featured-image-container{display:flex;flex-direction:column;gap:16px;align-items:flex-start}.cb-section__quiz-edit .cb-featured-image-preview{background:#f5f5f5;border:2px dashed #ddd;border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cb-section__quiz-edit .cb-featured-image-preview:has(img){border:0}.cb-section__quiz-edit .cb-featured-image-placeholder{width:300px;height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#999;font-size:14px}.cb-section__quiz-edit .cb-featured-image-placeholder::before{content:\"📷\";font-size:48px;margin-bottom:8px;opacity:.5}.cb-section__quiz-edit .cb-featured-image-actions{display:flex;flex-direction:row;gap:12px}.cb-section__quiz-edit .cb-remove-featured-image,.cb-section__quiz-edit .cb-set-featured-image{padding:10px 14px;border:0;background:#f7f7f7;color:#aaa;border-radius:8px;cursor:pointer;transition:background-color .2s}.cb-section__quiz-edit .cb-remove-featured-image:hover,.cb-section__quiz-edit .cb-set-featured-image:hover{background:#fef2f2;color:#ef4444}.cb-section__quiz-edit .cb-course-edit-publish__title{margin:0 0 8px;font-size:14px;font-weight:600;color:#111827}.cb-section__quiz-edit .cb-course-edit-publish__row{display:grid;grid-template-columns:100px 1fr;gap:12px;align-items:center;margin-bottom:12px}.cb-section__quiz-edit .cb-course-edit-publish__label{font-size:13px;font-weight:600;color:#374151}.cb-section__quiz-edit .cb-course-edit-publish__control{width:100%;min-height:34px;padding:6px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#111827;background:#fff}.cb-section__quiz-edit .cb-course-edit-publish__control:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed;outline:0}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash{padding:8px 14px;font-size:13px;font-weight:500;border:1px solid #fecaca;border-radius:6px;background:#fff;color:#dc2626}.cb-section__quiz-edit .cb-course-edit-publish__trash.cb-btn-trash:hover{background:#fef2f2;border-color:#fca5a5}.cb-section__quiz-edit div.mce-statusbar{border-top:0}.cb-section__quiz-edit .cb-course-edit-terms__form-add-category,.cb-section__quiz-edit .cb-course-edit-terms__form-add-tag{display:flex;gap:8px;align-items:center;margin-bottom:16px}.cb-section__quiz-edit .cb-course-edit-category__input,.cb-section__quiz-edit .cb-course-edit-tags__input{width:100%;padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__input:focus,.cb-section__quiz-edit .cb-course-edit-tags__input:focus{border-color:#d1d5db}.cb-section__quiz-edit .cb-course-edit-category__select-parent{padding:8px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;background:#fff;cursor:pointer;white-space:nowrap;transition:border-color .2s}.cb-section__quiz-edit .cb-course-edit-category__select-parent:focus{border-color:#7067ed}.cb-section__quiz-edit .cb-course-edit-category__btn-save,.cb-section__quiz-edit .cb-course-edit-tags__btn-save{flex:1;background:#fff;color:#7067ed;border-radius:6px;padding:8px 16px;border:1px solid #7067ed;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s}.cb-section__quiz-edit .cb-course-edit-category__btn-save:hover,.cb-section__quiz-edit .cb-course-edit-tags__btn-save:hover{background:#eef1ff}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading{pointer-events:none;opacity:.8}.cb-section__quiz-edit .cb-course-edit-category__btn-save.loading:before,.cb-section__quiz-edit .cb-course-edit-tags__btn-save.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel{flex:1;padding:8px 14px;font-size:13px;font-weight:600;color:#898989;background:#fff;border:1px solid #f5f5f5;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.cb-section__quiz-edit .cb-course-edit-tag__btn-cancel:hover,.cb-section__quiz-edit .cb-course-edit-category__btn-cancel:hover{border-color:#eef1ff;background:#eef1ff;color:#7067ed}.cb-section__quiz-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.cb-section__quiz-edit .cb-button.cb-btn-update{background:#1e1e1e;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-trash{background:#dc2626;color:#fff}.cb-section__quiz-edit .cb-button.cb-btn-save-settings{background:#1e1e1e;color:#fff;border:0;transition:background .2s}.cb-section__quiz-edit .cb-button.cb-btn-save-settings:hover{background:#333}.cb-section__quiz-edit .cb-button.cb-btn-save-settings.loading{pointer-events:none;opacity:.7}.cb-section__quiz-edit .cb-settings-footer{margin-top:30px;padding-top:20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end}.cb-section__quiz-edit #general_course_data .form-field,.cb-section__quiz-edit #offline_course_data .form-field,.cb-section__quiz-edit #price_course_data .form-field,.cb-section__quiz-edit #extra_course_data .form-field{margin-bottom:24px}.cb-section__quiz-edit #general_course_data ._lp_featured_review_field{align-items:flex-start}.cb-section__quiz-edit #general_course_data ._lp_featured_review_field textarea{width:calc(100% - 165px)}.cb-section__quiz-edit #general_course_data ._lp_students_field .description{margin-top:-3px}.cb-section__quiz-edit #price_course_data .learn-press-tip-floating{font-size:13px;color:#ef4444;line-height:1.5}.cb-section__quiz-edit #price_course_data ._lp_no_required_enroll_field .description{margin-top:-13px}.cb-section__quiz-edit #assessment_course_data .form-field._lp_course_result_field{align-items:start;border:unset;margin-bottom:20px}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box{list-style-type:none;margin-top:0;padding-right:0;display:flex;flex-direction:column;gap:24px;width:calc(100% - 161px)}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li{margin-bottom:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;cursor:pointer;min-width:unset;max-width:unset;width:unset}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label input[type=radio]{flex-shrink:0;margin:0;order:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz{width:calc(100% - 54px);margin-right:54px;margin-top:0;margin-bottom:0;color:#898989;font-size:13px;font-weight:400;line-height:1.5;flex-shrink:0}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a{text-decoration:underline;color:#7067ed}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label p a:hover,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz a:hover,.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-evaluate-final_quiz a:hover{color:#5b52d1}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz{text-decoration:underline;color:#7067ed}.cb-section__quiz-edit #assessment_course_data .lp-radios-field-meta-box li label .lp-metabox-get-final-quiz:hover{color:#5b52d1}.cb-section__quiz-edit .lp_course_extra_meta_box,.cb-section__quiz-edit .lp_course_faq_meta_box{display:flex;flex-wrap:nowrap;gap:20px;padding:15px 0}.cb-section__quiz-edit .lp_course_extra_meta_box>label,.cb-section__quiz-edit .lp_course_faq_meta_box>label{width:200px;min-width:200px;font-size:14px;font-weight:600;color:#1a1a1a;padding-top:10px}.cb-section__quiz-edit .lp_course_extra_meta_box__content,.cb-section__quiz-edit .lp_course_faq_meta_box__content{flex:1;display:flex;flex-direction:column;gap:15px}.cb-section__quiz-edit .lp_course_extra_meta_box__fields,.cb-section__quiz-edit .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:15px}.cb-section__quiz-edit .lp_course_extra_meta_box__field,.cb-section__quiz-edit .lp_course_faq_meta_box__field{display:flex;align-items:center;background:#fff;border:1px solid #eaeaec;border-radius:8px;padding:10px;gap:10px}.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input,.cb-section__quiz-edit .lp_course_extra_meta_box__field .lp_course_extra_meta_box__input:focus,.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input,.cb-section__quiz-edit .lp_course_faq_meta_box__field .lp_course_extra_meta_box__input:focus{flex:1;border:0;background:transparent;padding:5px 0;font-size:14px;color:#333;box-shadow:none;outline:0}.cb-section__quiz-edit .lp_course_extra_meta_box__add,.cb-section__quiz-edit .lp_course_faq_meta_box__add{display:inline-flex;align-items:center;justify-content:center;background:#6b52ff !important;color:#fff !important;border:none !important;box-shadow:none !important;border-radius:6px;padding:6px 16px !important;font-size:13px !important;font-weight:600 !important;width:max-content;transition:background .2s}.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover,.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover{background:#5a42e6 !important}.cb-section__quiz-edit .lp_course_faq_meta_box__field{flex-direction:column;align-items:stretch;padding:15px;gap:15px;position:relative}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label{display:flex;flex-direction:column;gap:5px}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label span{font-size:13px;font-weight:600;color:#4b5563}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label input[type=text],.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea{width:100%;border:1px solid #eaeaec;border-radius:6px;padding:8px 12px;font-size:14px;box-shadow:none}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label input[type=text]:focus,.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea:focus{border-color:#6b52ff;box-shadow:0 0 0 1px rgba(107,82,255,0.2);outline:0}.cb-section__quiz-edit .lp_course_faq_meta_box__field>label textarea{min-height:80px;resize:vertical}.cb-section__quiz-edit .lp_course_faq_meta_box__add,.cb-section__quiz-edit .lp_course_extra_meta_box__add{display:block;text-align:center;background:#fff;border:1px dashed #d1d5db;color:#4b5563;font-weight:500;padding:2px;border-radius:8px;transition:all .2s}.cb-section__quiz-edit .lp_course_faq_meta_box__add:hover,.cb-section__quiz-edit .lp_course_extra_meta_box__add:hover{border-color:#2271b1;color:#2271b1;background:#f0f9ff}.cb-section__quiz-edit ._lp_block_finished_field{margin-top:-8px !important}.cb-section__quiz-edit #extra_course_data .form-field{align-items:start}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-ghost,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-ghost{opacity:.4;background:#f0f0f0}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .sortable-chosen,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .sortable-chosen{cursor:grabbing !important}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .is-dragging,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .is-dragging{opacity:.5;background:#e8e8e8}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort{cursor:grab}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__fields .lp_course_faq_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_extra_meta_box__field .sort:active,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__fields .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.cb-section__quiz-edit #extra_course_data input[type=text]{padding:10px 30px;margin-bottom:0;border:0}.cb-section__quiz-edit #extra_course_data input[type=text]:focus{box-shadow:none}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field{position:relative;margin-bottom:10px}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .sort,.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field:hover .delete{opacity:1}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort{display:flex;position:absolute;top:0;right:0;height:100%;width:40px;color:#666;text-decoration:none;cursor:grab;opacity:.4;transition:opacity .2s;align-items:center;justify-content:center}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete{position:absolute;top:12px;left:5px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.cb-section__quiz-edit #extra_course_data .lp_course_extra_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content{width:100%}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields{display:flex;flex-direction:column;gap:12px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__fields:not(:has(*)){display:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field{position:relative;display:flex !important;flex-direction:column;border:1px solid #e5e7eb;border-radius:12px;padding:10px 36px 16px 40px;transition:all .2s cubic-bezier(0.4,0,0.2,1);margin-bottom:0 !important}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover{background:#fff;border-color:#d1d5db;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05),0 2px 4px -1px rgba(0,0,0,0.03)}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .sort,.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field:hover .delete{opacity:1}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label{width:100% !important;min-width:100% !important;max-width:100% !important;display:block !important;margin-bottom:8px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field label span{display:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]{width:100%;max-width:100%;background:transparent;border:0;border-bottom:1px dashed transparent;font-size:15px;font-weight:500;color:#111827;padding:6px 0;border-radius:0;outline:0;transition:border-color .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]::placeholder{color:#9ca3af}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question][value=\"\"],.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field input[name*=_lp_faqs_question]:focus{border-bottom-color:#2271b1;box-shadow:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]{width:100% !important;min-height:120px;background:#f9fafb;border:1px solid transparent;border-radius:6px;padding:10px;font-size:14px;line-height:1.5;color:#1a1a1a;resize:vertical;transition:all .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field textarea[name*=_lp_faqs_answer]:focus{background:#fff;border-color:#d1d5db;outline:0;box-shadow:0 0 0 2px rgba(229,231,235,0.5)}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort{position:absolute;right:8px;top:15px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:grab;opacity:.4;transition:opacity .2s}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort::after{font-family:\"lp-icon\";content:\"\\e922\"}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field .sort:active{cursor:grabbing}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete{position:absolute;top:15px;left:8px;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:#9ca3af;opacity:0;transition:all .2s;text-decoration:none}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete::after{font-family:Dashicons;content:\"\\f182\";font-size:18px}.cb-section__quiz-edit #extra_course_data .lp_course_faq_meta_box__content .lp_course_faq_meta_box__field a.delete:hover{background-color:#fee2e2;color:#ef4444}.cb-section__quiz-edit #author_course_data .ts-control{border-radius:6px;padding:5px !important}.cb-section__quiz-edit #author_course_data .ts-control li.item{padding:6px 22px;background:#eef1ff;color:#7067ed;font-weight:500;border-radius:4px;margin-bottom:0}.cb-section__quiz-edit #author_course_data .form-field input[type=text]{width:unset;height:unset}@media(max-width:768px){.cb-section__quiz-edit .cb-featured-image-container{flex-direction:column}.cb-section__quiz-edit .cb-featured-image-preview{width:100%;max-width:300px}}.cb-section__quiz-edit .lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-left:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-right:3px solid transparent;margin-right:-3px}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-right-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.cb-section__quiz-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.cb-section__quiz-edit .lp-meta-box,.cb-section__quiz-edit .lp-meta-box-wrap{margin:0;background:transparent}.cb-section__quiz-edit .lp-meta-box .lp-meta-box__inner,.cb-section__quiz-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.cb-section__quiz-edit .form-field,.cb-section__quiz-edit .lp-meta-box__duration,.cb-section__quiz-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.cb-section__quiz-edit .form-field>label,.cb-section__quiz-edit .form-field label span,.cb-section__quiz-edit .lp-meta-box__duration>label,.cb-section__quiz-edit .lp-meta-box__duration label span,.cb-section__quiz-edit .lp-meta-box-field>label,.cb-section__quiz-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .form-field input[type=text],.cb-section__quiz-edit .form-field input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=text],.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local],.cb-section__quiz-edit .lp-meta-box-field input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=text],.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.cb-section__quiz-edit .form-field input[type=number]:focus,.cb-section__quiz-edit .form-field input[type=text]:focus,.cb-section__quiz-edit .form-field input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=datetime-local]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=number]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=text]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=number],.cb-section__quiz-edit .lp-meta-box__duration input[type=number],.cb-section__quiz-edit .lp-meta-box-field input[type=number]{width:80px !important}.cb-section__quiz-edit .form-field select,.cb-section__quiz-edit .lp-meta-box__duration select,.cb-section__quiz-edit .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.cb-section__quiz-edit .form-field select:focus,.cb-section__quiz-edit .lp-meta-box__duration select:focus,.cb-section__quiz-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field input[type=radio],.cb-section__quiz-edit .form-field input[type=checkbox],.cb-section__quiz-edit .lp-meta-box__duration input[type=radio],.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox],.cb-section__quiz-edit .lp-meta-box-field input[type=radio],.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.cb-section__quiz-edit .form-field input[type=radio]:before,.cb-section__quiz-edit .form-field input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.cb-section__quiz-edit .form-field input[type=radio]:checked,.cb-section__quiz-edit .form-field input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.cb-section__quiz-edit .form-field input[type=radio]:checked:before,.cb-section__quiz-edit .form-field input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:checked:before,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.cb-section__quiz-edit .form-field input[type=radio]:focus,.cb-section__quiz-edit .form-field input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box__duration input[type=checkbox]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=radio]:focus,.cb-section__quiz-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.cb-section__quiz-edit .form-field .description,.cb-section__quiz-edit .lp-meta-box__duration .description,.cb-section__quiz-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}.cb-section__quiz-edit .form-field .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.cb-section__quiz-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.cb-section__quiz-edit .form-field>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box__duration>.learn-press-tip,.cb-section__quiz-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.cb-section__quiz-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.cb-section__quiz-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.cb-section__quiz-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.cb-section__quiz-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.cb-section__quiz-edit .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}.cb-section__quiz-edit ._lp_show_correct_review_field .description{margin-top:-12px !important}@media(max-width:768px){.cb-section__quiz-edit .lp-meta-box__course-tab{flex-direction:column}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:100%;border-left:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{flex:0 0 auto;margin-bottom:0;padding:0}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;margin-right:0;margin-bottom:-1px;white-space:nowrap}.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.cb-section__quiz-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{border-right-color:transparent;border-bottom-color:#3b82f6}}.lp-course-builder-canvas .cb-section__question-edit .question-status{padding:5px 12px;font-size:12px;font-weight:500;border-radius:5px;text-transform:capitalize}.lp-course-builder-canvas .cb-section__question-edit .question-status.publish{color:#fff;background:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .question-status.trash{color:#fff;background-color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-assigned{margin-bottom:20px}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title{flex:1;margin-bottom:24px}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink{margin-bottom:20px}.lp-course-builder-canvas .cb-section__question-edit .cb-item-edit-permalink__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display{display:flex;align-items:flex-start;gap:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-display.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url{display:block;font-size:13px;line-height:1.5;color:#7067ed;text-decoration:none;word-break:break-all;flex:1;min-width:0;padding-top:2px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-url:hover{text-decoration:underline}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:#fff;border:1px solid #e2e8f0;border-radius:4px;cursor:pointer;flex-shrink:0;transition:all .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn .dashicons{font-size:14px;width:14px;height:14px;color:#64748b}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover{background:#7067ed;border-color:#7067ed}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-edit-btn:hover .dashicons{color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor{display:flex;flex-direction:column;gap:8px;padding:12px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-editor.lp-hidden{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-prefix{font-size:12px;color:#94a3b8;word-break:break-all;line-height:1.4}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-input-row{display:flex;gap:8px;align-items:center}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input{flex:1;min-width:0;padding:8px 12px;font-size:14px;font-weight:500;color:#1a1a1a;border:1px solid #e2e8f0;border-radius:6px;outline:0;transition:border-color .15s ease,box-shadow .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-slug-input:focus{border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-actions{display:flex;gap:6px;flex-shrink:0}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn{padding:8px 16px;font-size:13px;font-weight:600;color:#fff;background:#7067ed;border:0;border-radius:6px;cursor:pointer;transition:background .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-ok-btn:hover{background:#4e43e9}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn{padding:8px 14px;font-size:13px;font-weight:500;color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.lp-course-builder-canvas .cb-section__question-edit .cb-permalink-cancel-btn:hover{background:#f1f5f9;color:#475569}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit input.cb-question-edit-title__input{width:100%;padding:10px 12px;font-size:14px;border:1px solid #ddd;border-radius:6px;outline:0;transition:border-color .2s}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-title__input:focus{border-color:#7067ed;box-shadow:0 0 0 1px #7067ed}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc{margin-bottom:24px}.lp-course-builder-canvas .cb-section__question-edit .cb-question-edit-desc__label{display:block;font-size:14px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-course-builder-canvas .cb-section__question-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary{background:#fff;color:#374151;border:1px solid #d1d5db}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-button--secondary:hover{background:#f3f4f6;border-color:#9ca3af}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-update__question{background:#1e1e1e;color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-button.cb-btn-trash__question{background:#dc2626;color:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab{display:flex;min-height:600px;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:220px;background:#fff;border-left:1px solid #e5e7eb;margin:0;padding:20px 0;list-style:none;flex-shrink:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{margin-bottom:2px;padding:0 12px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{display:flex;align-items:center;padding:12px 16px;text-decoration:none;color:#6b7280;font-weight:500;font-size:14px;transition:all .2s ease;border-right:3px solid transparent;margin-right:-3px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a i{display:none}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:hover{background-color:#fff;color:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{background-color:#fff;color:#7067ed;font-weight:600;border-right-color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab .lp-meta-box__course-tab__content{flex-grow:1;padding:30px 0;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap{margin:0;background:transparent}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box .lp-meta-box__inner,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field label span,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration label span,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field>label,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=datetime-local]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=datetime-local]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=text]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=number],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=number]{width:80px !important}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field select:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration select:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio],.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:checked:before,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration input[type=checkbox]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=radio]:focus,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field .description:has(+.learn-press-tip),.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration .description:has(+.learn-press-tip),.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .form-field>.learn-press-tip,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__duration>.learn-press-tip,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:24px;font-weight:700;color:#1e1e1e;margin-bottom:25px;line-height:1.2}@media(max-width:768px){.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab{flex-direction:column}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs{width:100%;border-left:0;border-bottom:1px solid #e5e7eb;display:flex;overflow-x:auto;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li{flex:0 0 auto;margin-bottom:0;padding:0}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a{border-right:0;border-bottom:3px solid transparent;margin-right:0;margin-bottom:-1px;white-space:nowrap}.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li.active a,.lp-course-builder-canvas .cb-section__question-edit .cb-section__question-edit .lp-meta-box__course-tab ul.lp-meta-box__course-tab__tabs li a:focus{border-right-color:transparent;border-bottom-color:#3b82f6}}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item{margin-bottom:12px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-blank-option-item.lp-section-toggle:not(.lp-collapse) .lp-question-fib-option-header{border-radius:6px 6px 0 0;border-bottom:1px solid #f5f5f5}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header{display:flex;align-items:center;padding:12px 16px;border-radius:6px;border:1px solid #e5e7eb;background:#fff;transition:border .2s}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-index{font-weight:600;font-size:14px;color:#1e1e1e;margin-left:16px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-question-fib-option-title-input{flex-grow:1;padding:10px 14px;border:1px solid transparent;border-radius:6px;font-size:14px;color:#1e1e1e;transition:border .2s;margin-left:16px;background:transparent}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-icon-spinner{margin-left:12px;color:#7067ed}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete{color:#9ca3af;cursor:pointer;transition:all .2s;margin-left:16px;font-size:16px}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle{cursor:pointer;color:#9ca3af;transition:color .2s;margin-right:auto}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-header .lp-trigger-toggle:hover{color:#1e1e1e}.lp-course-builder-canvas .cb-section__question-edit .lp-btn-fib-option-delete:hover{color:#dc2626}.lp-course-builder-canvas .cb-section__question-edit .lp-question-fib-option-detail{font-size:14px;padding:24px;background:#f7f7f7;border:1px solid #e5e7eb;border-top:0;border-radius:0 0 6px 6px}@media(max-width:768px){.lp-course-builder-canvas .cb-section__question-edit #lp-course-builder-content{padding:16px}}#lp-builder-popup-container{display:none;position:fixed;top:0;right:0;width:100%;height:100%;z-index:99}#lp-builder-popup-container .lp-builder-popup__tabs,#lp-builder-popup-container .lp-horizontal-tabs{display:flex;list-style:none;margin:0 24px;padding:0;border-bottom:1px solid #f5f5f5;gap:10px}#lp-builder-popup-container .lp-builder-popup__tab,#lp-builder-popup-container .lp-horizontal-tab{padding:12px 24px;color:#898989;text-decoration:none;font-weight:500;font-size:14px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .2s ease;background:transparent;border-radius:10px 10px 0 0;cursor:pointer}#lp-builder-popup-container .lp-builder-popup__tab:hover,#lp-builder-popup-container .lp-horizontal-tab:hover{color:#7067ed;background:#eef1ff}#lp-builder-popup-container .lp-builder-popup__tab.active,#lp-builder-popup-container .lp-horizontal-tab.active{color:#7067ed;border-bottom-color:#7067ed;background:#eef1ff}#lp-builder-popup-container .lp-builder-popup__tab-content,#lp-builder-popup-container .lp-horizontal-tab-content{padding:24px 24px 0}#lp-builder-popup-container .lp-builder-popup__tab-pane,#lp-builder-popup-container .lp-horizontal-tab-pane{display:none}#lp-builder-popup-container .lp-builder-popup__tab-pane.active,#lp-builder-popup-container .lp-horizontal-tab-pane.active{display:block}#lp-builder-popup-container .lp-meta-box,#lp-builder-popup-container .lp-meta-box-wrap{margin:0;background:transparent}#lp-builder-popup-container .lp-meta-box .lp-meta-box__inner,#lp-builder-popup-container .lp-meta-box-wrap .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:11px}#lp-builder-popup-container .form-field,#lp-builder-popup-container .lp-meta-box__duration,#lp-builder-popup-container .lp-meta-box-field{display:flex;gap:0 11px;margin:0;padding:0;flex-wrap:wrap}#lp-builder-popup-container .form-field>label,#lp-builder-popup-container .form-field label span,#lp-builder-popup-container .lp-meta-box__duration>label,#lp-builder-popup-container .lp-meta-box__duration label span,#lp-builder-popup-container .lp-meta-box-field>label,#lp-builder-popup-container .lp-meta-box-field label span{font-size:14px;color:#23282d;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;font-weight:600;flex:0 0 auto}#lp-builder-popup-container .form-field input[type=number],#lp-builder-popup-container .form-field input[type=text],#lp-builder-popup-container .form-field input[type=datetime-local],#lp-builder-popup-container .lp-meta-box__duration input[type=number],#lp-builder-popup-container .lp-meta-box__duration input[type=text],#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local],#lp-builder-popup-container .lp-meta-box-field input[type=number],#lp-builder-popup-container .lp-meta-box-field input[type=text],#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .form-field input[type=number]:focus,#lp-builder-popup-container .form-field input[type=text]:focus,#lp-builder-popup-container .form-field input[type=datetime-local]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=number]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=text]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=datetime-local]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=number]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=text]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=datetime-local]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field input[type=number],#lp-builder-popup-container .lp-meta-box__duration input[type=number],#lp-builder-popup-container .lp-meta-box-field input[type=number]{width:80px !important}#lp-builder-popup-container .form-field select,#lp-builder-popup-container .lp-meta-box__duration select,#lp-builder-popup-container .lp-meta-box-field select{padding:4px 15px 4px 30px !important;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}#lp-builder-popup-container .form-field select:focus,#lp-builder-popup-container .lp-meta-box__duration select:focus,#lp-builder-popup-container .lp-meta-box-field select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field input[type=radio],#lp-builder-popup-container .form-field input[type=checkbox],#lp-builder-popup-container .lp-meta-box__duration input[type=radio],#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox],#lp-builder-popup-container .lp-meta-box-field input[type=radio],#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0;border:0}#lp-builder-popup-container .form-field input[type=radio]:before,#lp-builder-popup-container .form-field input[type=checkbox]:before,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:before,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:before,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:before,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}#lp-builder-popup-container .form-field input[type=radio]:checked,#lp-builder-popup-container .form-field input[type=checkbox]:checked,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked{background:#28a746}#lp-builder-popup-container .form-field input[type=radio]:checked:before,#lp-builder-popup-container .form-field input[type=checkbox]:checked:before,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:checked:before,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:checked:before,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:checked:before,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:checked:before{right:22px}#lp-builder-popup-container .form-field input[type=radio]:focus,#lp-builder-popup-container .form-field input[type=checkbox]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=radio]:focus,#lp-builder-popup-container .lp-meta-box__duration input[type=checkbox]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=radio]:focus,#lp-builder-popup-container .lp-meta-box-field input[type=checkbox]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}#lp-builder-popup-container .form-field .description,#lp-builder-popup-container .lp-meta-box__duration .description,#lp-builder-popup-container .lp-meta-box-field .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block;width:100%;margin-right:161px;margin-top:6px;order:99}#lp-builder-popup-container .form-field .description:has(+.learn-press-tip),#lp-builder-popup-container .lp-meta-box__duration .description:has(+.learn-press-tip),#lp-builder-popup-container .lp-meta-box-field .description:has(+.learn-press-tip){width:auto}#lp-builder-popup-container .form-field>.learn-press-tip,#lp-builder-popup-container .lp-meta-box__duration>.learn-press-tip,#lp-builder-popup-container .lp-meta-box-field>.learn-press-tip{order:100;margin-top:6px}#lp-builder-popup-container ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}#lp-builder-popup-container ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}#lp-builder-popup-container ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}#lp-builder-popup-container ._lp_external_link_buy_course_field .description{grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}#lp-builder-popup-container.active{display:block}#lp-builder-popup-container #lp-material-container{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}#lp-builder-popup-container #lp-material-container hr{display:none}#lp-builder-popup-container .field-material__label{width:150px;max-width:150px;min-width:150px;margin-left:11px}#lp-builder-popup-container .lp-material--field-wrap{display:flex;gap:11px;margin-top:12px}#lp-builder-popup-container .lp-material--field-wrap label{color:#1e1e1e;font-size:14px;font-weight:600;width:100px}#lp-builder-popup-container .lp-material--field-wrap:first-child{margin-top:0}#lp-builder-popup-container .lp-material--field-wrap.field-action-wrap{justify-content:flex-start;flex-direction:row-reverse}#lp-builder-popup-container #lp-material--group-container .lp-material--group{padding:20px;border:1px solid #d1d5db;border-radius:12px;max-width:420px;margin-bottom:20px}#lp-builder-popup-container #lp-material--group-container .lp-material--group:not(:has(*)){display:none}#lp-builder-popup-container .lp-material--field-external-link,#lp-builder-popup-container .lp-material--field-title{display:inline-flex;align-items:center;gap:8px;width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material--field-method{width:100%;height:39px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}#lp-builder-popup-container .lp-material-save-field,#lp-builder-popup-container .lp-material--delete{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}#lp-builder-popup-container .lp-material--upload-wrap label{cursor:pointer;width:100%;display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;font-weight:500;color:#1a1a1a;background:#fff;transition:all .2s;margin-right:86px;overflow:hidden}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file{border-color:#7067ed;background-color:#f8fbff;font-size:0}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::before{font-size:14px}#lp-builder-popup-container .lp-material--upload-wrap label.has-selected-file::after{content:attr(data-file-name);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:600}#lp-builder-popup-container .lp-material--field-upload{display:none}#lp-builder-popup-container .lp-material--upload-wrap label:hover{background-color:#f5f5f5;border-color:#9ca3af}#lp-builder-popup-container .lp-material--upload-wrap label:active{background-color:#d0d0d0;transform:scale(0.98)}#lp-builder-popup-container .lp-material--upload-wrap label::before{content:\"📁 \";margin-left:5px}#lp-builder-popup-container #btn-lp--add-material{color:#7067ed;border:1px solid #7067ed}#lp-builder-popup-container #btn-lp--add-material:hover{background-color:#f7f7f7;border-color:#7067ed}#lp-builder-popup-container #btn-lp--save-material,#lp-builder-popup-container .lp-material-save-field{background:#7067ed;color:#eef1ff;border:1px solid #7067ed}#lp-builder-popup-container #btn-lp--save-material:hover,#lp-builder-popup-container .lp-material-save-field:hover{background-color:#5b52d1;border-color:#5b52d1}#lp-builder-popup-container .lp-material--delete{color:#6b7280;border:1px solid #e5e7eb}#lp-builder-popup-container .lp-material--delete:hover{background-color:#f7f7f7;color:#1e1e1e;border-color:#1e1e1e}#lp-builder-popup-container .cb-item-edit-content{gap:0;flex-direction:column}#lp-builder-popup-container .cb-item-edit-content .cb-item-edit-column{width:100%}#lp-builder-popup-container .cb-item-edit-publish{display:none}#lp-builder-popup-container .cb-section__quiz-edit .cb-item-edit-column--left{flex:0;max-width:unset}body.lp-popup-open{overflow:hidden}.lp-builder-popup-overlay{position:fixed;top:0;right:0;width:100%;height:100%;backdrop-filter:blur(3px);z-index:1}.lp-builder-popup{position:fixed;inset:5vh 5% 5vh 5%;width:auto;max-width:900px;max-height:750px;height:auto;margin:auto;background-color:#fff;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,0.2);z-index:2;display:flex;flex-direction:column;overflow:hidden;transition:inset .3s cubic-bezier(0.4,0,0.2,1),border-radius .3s cubic-bezier(0.4,0,0.2,1),max-width .3s cubic-bezier(0.4,0,0.2,1)}.lp-builder-popup--fullscreen{inset:0;max-width:100%;max-height:100%;border-radius:0}.lp-builder-popup--loading{width:auto;max-width:none;padding:40px 60px;text-align:center}.lp-builder-popup__loader{display:flex;flex-direction:column;align-items:center;gap:15px}.lp-builder-popup__loader .lp-loading-circle{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#1e1e1e;border-radius:50%;animation:lp-popup-spin .8s linear infinite}.lp-builder-popup__loader span{color:#666;font-size:14px}.lp-builder-popup__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;flex-shrink:0}.lp-builder-popup__header-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__header-actions{display:flex;align-items:center;gap:8px}.lp-builder-popup__title{margin:0;font-size:18px;font-weight:600;color:#1e1e1e}.lp-builder-popup__resize{background:0;border:0;font-size:16px;color:#9ca3af;cursor:pointer;padding:8px 10px;line-height:1;transition:all .2s;border-radius:4px;display:flex;align-items:center;justify-content:center}.lp-builder-popup__resize:hover{color:#1e1e1e;background-color:#f3f4f6}.lp-builder-popup__resize i{font-size:16px}.lp-builder-popup__close{background:0;border:0;font-size:24px;color:#9ca3af;cursor:pointer;padding:5px 10px;line-height:1;transition:color .2s;border-radius:4px}.lp-builder-popup__close:hover{color:#d63638;background-color:#fee2e2}.lp-builder-popup__body{flex:1;overflow-y:auto;padding:0;background-color:#fff}.lp-builder-popup__notice{padding:15px;background-color:#f0f6fc;border-right:4px solid #3b82f6;color:#1e1e1e;margin:0 0 20px;border-radius:6px 0 0 6px}.lp-builder-popup__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 24px;flex-shrink:0}.lp-builder-popup__footer-left{display:flex;align-items:center;gap:12px}.lp-builder-popup__footer-right{display:flex;align-items:center;gap:12px}.lp-builder-popup__btn{padding:10px 25px;border-radius:12px;font-size:16px;font-weight:500;cursor:pointer;transition:all .2s;border:0}.lp-builder-popup__btn--cancel{background-color:#fff;color:#7067ed;border:1px solid #7067ed}.lp-builder-popup__btn--cancel:hover{background-color:#eef1ff}.lp-builder-popup__btn--save{background-color:#7067ed;color:#fff}.lp-builder-popup__btn--save:hover{background-color:#5b52d1}.lp-builder-popup__btn--save:disabled{opacity:.6;cursor:not-allowed}.lp-builder-popup__btn--trash{background-color:#fff;color:#6b7280;border:1px solid #e5e7eb}.lp-builder-popup__btn--trash:hover{color:#dc2626;background-color:#fee2e2;border-color:#fee2e2}.lp-builder-popup__btn--draft{background-color:#eef1ff;color:#7067ed;border:1px solid transparent}.lp-builder-popup__btn--draft:hover{background-color:#d5dcff;border-color:transparent}.lp-builder-popup .lesson-status,.lp-builder-popup .question-status,.lp-builder-popup .quiz-status,.lp-builder-popup .quizzes-status{display:inline-flex;align-self:center;padding:4px 12px;font-size:12px;font-weight:500;border-radius:20px;text-transform:capitalize;white-space:nowrap;width:fit-content}.lp-builder-popup .lesson-status.publish,.lp-builder-popup .question-status.publish,.lp-builder-popup .quiz-status.publish,.lp-builder-popup .quizzes-status.publish{color:#28a746;background:#e7f6e9}.lp-builder-popup .lesson-status.draft,.lp-builder-popup .question-status.draft,.lp-builder-popup .quiz-status.draft,.lp-builder-popup .quizzes-status.draft{color:#aaa;background:#f7f7f7}.lp-builder-popup .lesson-status.pending,.lp-builder-popup .question-status.pending,.lp-builder-popup .quiz-status.pending,.lp-builder-popup .quizzes-status.pending{color:#1e40af;background:#dbeafe}.lp-builder-popup .lesson-status.private,.lp-builder-popup .question-status.private,.lp-builder-popup .quiz-status.private,.lp-builder-popup .quizzes-status.private{color:#6b21a8;background:#f3e8ff}.lp-builder-popup .lesson-status.trash,.lp-builder-popup .question-status.trash,.lp-builder-popup .quiz-status.trash,.lp-builder-popup .quizzes-status.trash{color:#991b1b;background:#fee2e2}.lp-builder-popup .cb-section__header{display:none}.lp-builder-popup .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.lp-builder-popup .lp-meta-box__duration .description{margin-top:4px}.lp-builder-popup #_lp_passing_grade,.lp-builder-popup #_lp_retake_count,.lp-builder-popup #_lp_pagination{max-width:100px}.lp-builder-popup .lp-radios-field-meta-box{list-style-type:none;margin:0;padding:0}.lp-builder-popup .lp-radios-field-meta-box li{margin-bottom:8px}.lp-builder-popup .lp-radios-field-meta-box li:last-child{margin-bottom:0}.lp-builder-popup .lp-radios-field-meta-box li label{display:flex;align-items:center;gap:8px;font-weight:400;width:auto;min-width:auto;max-width:none;cursor:pointer}.lp-builder-popup .lp-radios-field-meta-box li input[type=radio]{width:18px;height:18px;margin:0;cursor:pointer;accent-color:#1e1e1e}.lp-builder-popup .wp-editor-wrap{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.lp-builder-popup .wp-editor-wrap .wp-editor-tools{display:flex;flex-wrap:wrap}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons{margin:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #7067ed;color:#7067ed;padding:6px 12px;border-radius:6px;font-size:13px;font-weight:500;text-decoration:none;transition:all .2s;box-shadow:none}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media .wp-media-buttons-icon::before{color:#7067ed}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-media-buttons .add_media:hover{background:#eef1ff}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-tabs:not(:has(.wp-switch-editor[aria-pressed=true])) .wp-switch-editor:first-child{background:#eef1ff;color:#7067ed;font-weight:600}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container{flex:0 0 calc(100% + 24px);width:100%;margin-top:10px;border-top:1px solid #e5e7eb;border-radius:0 0 8px 8px;margin-right:-12px;margin-left:-12px;margin-bottom:-10px;padding:0}.lp-builder-popup .wp-editor-wrap .wp-editor-tools .wp-editor-container textarea.wp-editor-area{border:0;border-radius:0 0 8px 8px;padding:12px;width:100%;box-sizing:border-box}.lp-builder-popup .wp-editor-wrap>.wp-editor-container{border:0;border-radius:0 0 8px 8px}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-toolbar-grp{background:#f9fafb;border-bottom:1px solid #e5e7eb;padding:4px}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-top-part::before{box-shadow:none}.lp-builder-popup .wp-editor-wrap>.wp-editor-container .mce-panel{border:none !important}.lp-builder-popup .wp-editor-wrap>.wp-editor-container textarea.wp-editor-area{border:0;border-radius:0 0 8px 8px;padding:16px;width:100%;box-sizing:border-box;min-height:200px}.lp-builder-popup .lp-material--table{width:100%;border-collapse:collapse;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-top:20px}.lp-builder-popup .lp-material--table th,.lp-builder-popup .lp-material--table td{padding:12px 15px;border-bottom:1px solid #e5e7eb;text-align:right}.lp-builder-popup .lp-material--table th{background-color:#f9fafb;font-weight:600;font-size:13px;color:#374151}.lp-builder-popup .lp-material--table td{font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-material--table tr:last-child td{border-bottom:0}.lp-builder-popup .lp-material--table tr:hover td{background-color:#f9fafb}.lp-builder-popup .lp-material--table thead.hidden{display:none}.lp-builder-popup .lp-material-btn-wrap{display:flex;gap:12px;margin-top:15px}.lp-builder-popup #btn-lp--add-material,.lp-builder-popup #btn-lp--save-material{padding:8px 20px;border-radius:6px;background:#fff;font-size:14px;font-weight:500;cursor:pointer;border:1px solid #d1d5db;transition:all .2s}.lp-builder-popup #btn-lp--add-material:hover,.lp-builder-popup #btn-lp--save-material:hover{background:#f5f5f5;border-color:#9ca3af}.lp-builder-popup .cb-lesson-edit-title,.lp-builder-popup .cb-quiz-edit-title,.lp-builder-popup .cb-question-edit-title{margin-bottom:24px;flex:1}.lp-builder-popup .cb-lesson-edit-title__label,.lp-builder-popup .cb-quiz-edit-title__label,.lp-builder-popup .cb-question-edit-title__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input,.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input,.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;box-shadow:none}.lp-builder-popup .cb-lesson-edit-title input.cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-quiz-edit-title input.cb-lesson-edit-title__input:focus,.lp-builder-popup .cb-question-edit-title input.cb-lesson-edit-title__input:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.lp-builder-popup .cb-lesson-edit-desc,.lp-builder-popup .cb-quiz-edit-desc,.lp-builder-popup .cb-question-edit-desc{margin-bottom:24px}.lp-builder-popup .cb-lesson-edit-desc__label,.lp-builder-popup .cb-quiz-edit-desc__label,.lp-builder-popup .cb-question-edit-desc__label{display:block;margin-bottom:8px;font-weight:600;font-size:14px;color:#1e1e1e}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box,.lp-builder-popup .lp-form-setting-question .lp-meta-box{margin:0;background:transparent}.lp-builder-popup .lp-form-setting-lesson .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-quiz .lp-meta-box__inner,.lp-builder-popup .lp-form-setting-question .lp-meta-box__inner{padding:0;display:flex;flex-direction:column;gap:24px}.lp-builder-popup .lp-meta-box-course-panels::before{content:attr(data-tab-title);display:block;font-size:18px;font-weight:700;color:#1e1e1e;margin-bottom:20px;line-height:1.2}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__quiz-title-assigned{display:flex;flex-direction:column-reverse;gap:16px;margin-bottom:24px}.lp-builder-popup .cb-section__question-title-assigned .cb-question-edit-title,.lp-builder-popup .cb-section__question-title-assigned .cb-lesson-edit-title,.lp-builder-popup .cb-section__question-title-assigned .cb-quiz-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-question-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-lesson-edit-title,.lp-builder-popup .cb-section__quiz-title-assigned .cb-quiz-edit-title{margin-bottom:0;width:100%}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses{flex-shrink:0;padding:0;background-color:transparent;border-radius:0;font-size:13px;margin-top:0;border:0}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .label,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .label,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .label,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .label,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .label,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .label{color:#6b7280;margin-left:5px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a{color:#2e91fa;text-decoration:none;font-weight:500}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes a:hover,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses a:hover,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses a:hover,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses a:hover{text-decoration:underline}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes .question-not-assigned,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__question-title-assigned .quiz-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .question-assigned-quizzes .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .lesson-assigned-courses .question-not-assigned,.lp-builder-popup .cb-section__quiz-title-assigned .quiz-assigned-courses .question-not-assigned{color:#9ca3af;font-style:italic}.lp-builder-popup .lp-message{color:#7067ed;background-color:#eef1ff;font-weight:500;padding:8px 20px;border-radius:8px}.lp-builder-popup .cb-item-edit-permalink__label{display:block;font-size:13px;font-weight:600;color:#1a1a1a;margin-bottom:8px}.lp-builder-popup .cb-item-edit-assigned{font-size:13px;color:#6b7280;margin-bottom:20px;line-height:1.6}.lp-builder-popup .cb-item-edit-assigned .label{color:#6b7280;font-weight:400}.lp-builder-popup .cb-item-edit-assigned a{color:#2e91fa;text-decoration:none;font-weight:500}.lp-builder-popup .cb-item-edit-assigned a:hover{text-decoration:underline}.lp-builder-popup .lp-edit-quiz-wrap .heading{display:flex;align-items:center;margin-bottom:8px;gap:8px}.lp-builder-popup .lp-edit-quiz-wrap .heading h4{color:#898989}.lp-builder-popup .lp-edit-quiz-wrap .heading .total-items{margin-right:auto;font-size:13px;color:#898989}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all{cursor:pointer;padding:5px;color:#6b7280}.lp-builder-popup .lp-edit-quiz-wrap .heading .lp-question-toggle-all:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all:not(.lp_collapse) .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-toggle-all.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-edit-list-questions{margin-bottom:20px}.lp-builder-popup .lp-edit-quiz-wrap .lp-icon-spinner{animation:rotation 2s infinite linear;font-size:1.25rem;display:none}.lp-builder-popup .lp-edit-quiz-wrap .one,.lp-builder-popup .lp-edit-quiz-wrap .plural{display:none}.lp-builder-popup .lp-edit-quiz-wrap[data-count=\"1\"] .one{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap:not([data-count=\"1\"]) .plural{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item{border:1px solid #e5e7eb;border-radius:12px;margin-bottom:12px;background:#fff;transition:all .2s}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{background:#fff;border:1px solid #d1d5db;color:#4b5563;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;align-items:center;transition:all .2s;display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-icon-angle-down{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-down{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.lp-collapse .lp-icon-angle-up{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-update-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-cancel-update-question-title{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.editing .lp-question-head .lp-btn-remove-question{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title{border:0;background:transparent;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-btn-cancel-update-question-title:hover{background:#f0f0f1}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:hover{border-color:#d1d5db;box-shadow:0 2px 4px rgba(0,0,0,0.05)}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:last-child{margin-bottom:0}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head{display:flex;align-items:center;gap:12px;padding:14px 16px;background-color:#fff;border-bottom:1px solid transparent;border-radius:12px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .drag{cursor:move;color:#9ca3af;font-size:16px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-title-input{flex:1;padding:8px 12px;border:1px solid transparent;border-radius:6px;font-size:14px;background:transparent;transition:all .2s;font-weight:600}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-type-label{font-size:11px;background-color:#eef1ff !important;color:#7067ed;padding:4px 10px;border-radius:20px;white-space:nowrap;font-weight:600}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question{cursor:pointer;color:#9ca3af;padding:6px;transition:all .2s;border-radius:4px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-edit-question-title:hover,.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#1e1e1e;background:#f3f4f6}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-btn-remove-question:hover{color:#dc2626;background:#fee2e2}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle{cursor:pointer;padding:6px;color:#9ca3af}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .lp-question-toggle:hover{color:#1e1e1e}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-head .button{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:has(.lp-question-title-input:focus){border:1px solid #7067ed}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-head{border-bottom-color:#f5f5f5;border-radius:12px 12px 0 0;background:#eef1ff}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item .lp-question-edit-main{display:none;padding:24px;background:#fff;border-radius:0 0 12px 12px}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item:not(.lp-collapse) .lp-question-edit-main{display:block}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.clone{display:none}.lp-builder-popup .lp-edit-quiz-wrap .lp-question-item.loading .lp-question-head .lp-icon-spinner{display:inline-block}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{display:flex;align-items:center;gap:12px;padding:16px;background-color:#fff;border:1px dashed #e5e7eb;border-radius:12px;margin-top:12px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-icon-plus{color:#7067ed}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{flex:1;padding:10px 14px;border:1px solid #d1d5db;border-radius:6px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input:focus{outline:0;border-color:#7067ed;box-shadow:none}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new{border:1px solid #d1d5db;border-radius:6px;min-width:150px;font-size:14px}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-type-new:focus{outline:0;border-color:#7067ed}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button{padding:10px 20px;border:1px solid #7067ed;color:#7067ed;border-radius:8px;font-weight:500;cursor:pointer}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .button:hover{background:#7067ed;color:#eef1ff}.lp-builder-popup .lp-edit-quiz-wrap .mce-menubar{border:0;background:#f5f5f5}.lp-builder-popup .lp-edit-quiz-wrap .heading{border-radius:12px}@keyframes lp-popup-spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}@media(max-width:768px){.lp-builder-popup{width:95%;max-height:95vh}.lp-builder-popup__header,.lp-builder-popup__footer{padding:12px 16px}.lp-builder-popup__tabs{padding:0 16px;overflow-x:auto}.lp-builder-popup__tab{padding:12px 16px;white-space:nowrap}.lp-builder-popup__tab-content{padding:16px}.lp-builder-popup__footer{flex-direction:column;gap:10px}.lp-builder-popup__footer-left,.lp-builder-popup__footer-right{width:100%;justify-content:center}.lp-builder-popup .form-field,.lp-builder-popup .lp-meta-box__duration,.lp-builder-popup .lp-meta-box-field{flex-wrap:wrap}.lp-builder-popup .form-field>label,.lp-builder-popup .form-field label span,.lp-builder-popup .lp-meta-box__duration>label,.lp-builder-popup .lp-meta-box__duration label span,.lp-builder-popup .lp-meta-box-field>label,.lp-builder-popup .lp-meta-box-field label span{width:100%;min-width:100%;max-width:100%;margin-bottom:8px}.lp-builder-popup .form-field input[type=number],.lp-builder-popup .form-field input[type=text],.lp-builder-popup .form-field input[type=datetime-local],.lp-builder-popup .lp-meta-box__duration input[type=number],.lp-builder-popup .lp-meta-box__duration input[type=text],.lp-builder-popup .lp-meta-box__duration input[type=datetime-local],.lp-builder-popup .lp-meta-box-field input[type=number],.lp-builder-popup .lp-meta-box-field input[type=text],.lp-builder-popup .lp-meta-box-field input[type=datetime-local]{max-width:100%}.lp-builder-popup .form-field:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox]),.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox]){flex-direction:row;flex-wrap:wrap}.lp-builder-popup .form-field:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box__duration:has(input[type=checkbox])>label,.lp-builder-popup .lp-meta-box-field:has(input[type=checkbox])>label{width:auto;min-width:auto;max-width:none;margin-bottom:0}.lp-builder-popup .form-field .description,.lp-builder-popup .lp-meta-box__duration .description,.lp-builder-popup .lp-meta-box-field .description{margin-right:0 !important}.lp-builder-popup .cb-section__question-title-assigned,.lp-builder-popup .cb-section__lesson-title-assigned{flex-direction:column;gap:16px}.lp-builder-popup .cb-section__question-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__question-title-assigned .lesson-assigned-courses,.lp-builder-popup .cb-section__lesson-title-assigned .question-assigned-quizzes,.lp-builder-popup .cb-section__lesson-title-assigned .lesson-assigned-courses{margin-top:0;align-items:flex-start}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question{flex-wrap:wrap}.lp-builder-popup .lp-edit-quiz-wrap .add-new-question .lp-question-title-new-input{width:100%}}@keyframes rotation{0%{transform:rotate(0)}100%{transform:rotate(-359deg)}}.learn-press-course-builder #lp-course-builder-content{background:#fff;padding:24px;border-radius:8px}.learn-press-course-builder .cb-section__course-edit{background:#fff;border-radius:16px;min-height:calc(100% - 100px)}.learn-press-course-builder .cb-section__course-edit .cb-section__header-left{display:flex;align-items:center;gap:10px;margin-bottom:20px;margin-top:28px}.learn-press-course-builder .cb-section__course-edit .lp-cb-section__title{font-size:28px;font-weight:600;margin-top:0;margin-bottom:0;color:#1e1e1e}.learn-press-course-builder .cb-section__course-edit .cb-section__header{display:flex;justify-content:space-between;align-items:center}.learn-press-course-builder .cb-section__course-edit .cb-section__header-action{display:flex;gap:20px}.learn-press-course-builder .cb-section__course-edit .cb-button{padding:8px 25px;border-radius:5px;background:#ccc;font-size:16px;font-weight:500;cursor:pointer}.learn-press-course-builder .cb-section__course-edit .cb-button.loading{pointer-events:none;opacity:.8}.learn-press-course-builder .cb-section__course-edit .cb-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.learn-press-course-builder .cb-section__course-edit .lp-meta-box{background:transparent}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{display:flex;flex-direction:column;gap:24px}.learn-press-course-builder .cb-section__course-edit .form-field,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration{display:flex;gap:0 11px;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field{display:grid;grid-template-columns:150px max-content 1fr;gap:6px 11px}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field label{grid-column:1\u002F2;grid-row:1;font-size:14px;color:#23282d;font-weight:600;margin:0;padding:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field input{grid-column:2\u002F4;grid-row:1}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .description{max-width:max-content;grid-column:2\u002F3;grid-row:2;font-size:13px;line-height:1.5;margin:0}.learn-press-course-builder .cb-section__course-edit ._lp_external_link_buy_course_field .learn-press-tip{max-width:max-content}.learn-press-course-builder .cb-section__course-edit .form-field._lp_hint_field,.learn-press-course-builder .cb-section__course-edit .form-field._lp_explanation_field{flex-wrap:wrap}.learn-press-course-builder .cb-section__course-edit .form-field label,.learn-press-course-builder .cb-section__course-edit .form-field label span,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration label,.learn-press-course-builder .cb-section__course-edit .lesson-materials .field-material__label{font-size:14px;margin:0;width:150px;min-width:150px;max-width:150px;padding:0;color:#23282d;font-weight:600;flex:0 0 auto}.learn-press-course-builder .cb-section__course-edit .lesson-materials{flex-wrap:nowrap;gap:10px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{width:100%;max-width:200px;height:33px;padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field textarea{order:3;width:calc(100% - 165px);padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;background:#fff}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=text]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local]:focus,.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit select{padding:4px 12px;height:34px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1a1a1a;cursor:pointer}.learn-press-course-builder .cb-section__course-edit select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration>:not(label):not(.description){display:inline-flex;align-items:center;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox],.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]{appearance:none;-webkit-appearance:none;width:44px;height:24px;background:#e5e7eb;border-radius:12px;position:relative;cursor:pointer;transition:all .3s ease;margin:0;flex-shrink:0}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:before,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:before{content:\"\";position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;top:2px;right:2px;transition:all .3s ease;box-shadow:0 2px 4px rgba(0,0,0,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked{background:#28a746}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:checked:before,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:checked:before{right:22px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=checkbox]:focus,.learn-press-course-builder .cb-section__course-edit .form-field input[type=radio]:focus{outline:0;box-shadow:0 0 0 3px rgba(59,130,246,0.1)}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]),.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]){flex-direction:row;align-items:center}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) input[type=checkbox],.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) input[type=radio]{order:1;margin-top:2px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description,.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=radio]) .description{order:3}.learn-press-course-builder .cb-section__course-edit .description{font-size:13px;color:#6b7280;line-height:1.5;margin:0;display:block}.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration .description{margin-top:4px}.learn-press-course-builder .cb-section__course-edit p.form-field,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration{padding:0;margin:0}.learn-press-course-builder .cb-section__course-edit p.form-field .description,.learn-press-course-builder .cb-section__course-edit p.lp-meta-box__duration .description{margin-top:6px}.learn-press-course-builder .cb-section__course-edit #_lp_passing_grade,.learn-press-course-builder .cb-section__course-edit #_lp_retake_count,.learn-press-course-builder .cb-section__course-edit #_lp_pagination{max-width:100px}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content{flex:1}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content .lp_course_extra_meta_box__fields:not(:has(*)){display:none}.learn-press-course-builder .cb-section__course-edit .lp_course_extra_meta_box__content input[type=text]{max-width:100%;margin-bottom:10px}@media(max-width:768px){.learn-press-course-builder .cb-section__course-edit .lp-meta-box__inner{gap:20px}.learn-press-course-builder .cb-section__course-edit .form-field input[type=number],.learn-press-course-builder .cb-section__course-edit .form-field input[type=text],.learn-press-course-builder .cb-section__course-edit .form-field input[type=datetime-local],.learn-press-course-builder .cb-section__course-edit .lp-meta-box__duration input[type=number]{max-width:100%}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]){flex-direction:column;gap:8px}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) label{min-width:auto}.learn-press-course-builder .cb-section__course-edit .form-field:has(input[type=checkbox]) .description{margin-right:0;margin-top:0}}.learn-press-course-builder .lp-message{color:#7067ed;background-color:#eef1ff;font-weight:500;padding:8px 20px;border-radius:8px}#lp-builder-popup-container .learn-press-message,#lp-course-builder .learn-press-message{margin:20px 10px;position:relative;padding:10px 20px;border-radius:8px;max-width:100%;width:fit-content}#lp-builder-popup-container select,#lp-course-builder select{padding:10px 14px 10px 32px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;color:#1e1e1e;cursor:pointer;appearance:none;background-image:url(\"..\u002Fimages\u002Ficons\u002Fico-cb-chevron-down.svg\");background-repeat:no-repeat;background-position:left 10px center;background-size:14px}#lp-builder-popup-container select:focus,#lp-course-builder select:focus{outline:0;border-color:#7067ed;box-shadow:0 0 0 3px rgba(112,103,237,0.1)}#lp-course-builder .lp-ico-ai{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");mask-image:url(\"..\u002Fimages\u002Ficons\u002Fico-ai.svg\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}#lp-course-builder .lp-btn-generate-course-with-ai,#lp-course-builder .lp-btn-warning-enable-ai{position:relative;margin:0 !important}#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai{background:transparent;color:#7067ed}#lp-course-builder .cb-btn-add-new.lp-btn-generate-course-with-ai:hover{background:#eef1ff}.wp-editor-wrap{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background-color:#fff}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:focus,.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:hover,.wp-editor-wrap .qt-dfw:focus,.wp-editor-wrap .qt-dfw:hover{box-shadow:none;background:0}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-underline),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-blockquote),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-alignright),.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn:has(i.mce-i-unlink){border-left:1px solid #d1d5db}.wp-editor-wrap .wp-editor-tools{display:flex;align-items:center;justify-content:space-between;background-color:#f7f7f7;padding:8px 12px}.wp-editor-wrap .wp-editor-tools:after{content:none}.wp-editor-wrap .wp-media-buttons{padding:0;float:none;flex-shrink:0}.wp-editor-wrap button.insert-media,.wp-editor-wrap input.button{color:#1e1e1e;border-color:#d1d5db;display:inline-flex;align-items:center;gap:6px;text-decoration:none;font-size:13px;line-height:1.6;min-height:30px;margin:0;padding:4px 12px;cursor:pointer;border-width:1px;border-style:solid;border-radius:6px;white-space:nowrap;box-sizing:border-box;background:#fff;transition:border-color .15s ease,background .15s ease}.wp-editor-wrap button.insert-media:focus,.wp-editor-wrap input.button:focus{outline:0;box-shadow:none;background-color:#eef1ff;border-color:#7067ed;color:#7067ed}.wp-editor-wrap button.insert-media:hover,.wp-editor-wrap input.button:hover{color:#7067ed;border-color:#7067ed;background-color:#eef1ff}.wp-editor-wrap .wp-editor-tabs{float:none;flex-shrink:0;display:flex;background:#fff;border-radius:12px;border:1px solid #e5e7eb;padding:4px 4px 6px;gap:4px}.wp-editor-wrap .wp-editor-tabs button{margin:0;padding:2px 14px;border:0;border-radius:8px;font-size:13px;font-weight:500;line-height:1.6;color:#6b7280;background:transparent;cursor:pointer;box-sizing:content-box !important}.wp-editor-wrap .wp-editor-tabs button:hover{color:#1e1e1e;background-color:#eef1ff}.wp-editor-wrap .wp-editor-tabs button:focus{outline:0;box-shadow:none}.wp-editor-wrap .wp-editor-tabs button[aria-pressed=true]{background:#eef1ff;color:#7067ed;box-shadow:0 1px 3px rgba(0,0,0,0.05);font-weight:600}.wp-editor-wrap .mce-tinymce{border:none !important;visibility:visible !important}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:8px}.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.wp-editor-wrap .mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{box-shadow:none}.wp-editor-wrap div.mce-toolbar-grp>div{padding:0}.wp-editor-wrap .mce-top-part::before{box-shadow:none !important}.wp-editor-wrap .mce-top-part,.wp-editor-wrap .quicktags-toolbar{background-color:#f7f7f7;margin:0;padding:0}.wp-editor-wrap .mce-toolbar-grp{background:0;border-bottom:0;padding:0 8px 8px}.wp-editor-wrap .mce-toolbar .mce-btn{border:0;background:transparent;box-shadow:none;border-radius:4px}.wp-editor-wrap .mce-toolbar .mce-btn button{padding:2px 5px;color:#374151}.wp-editor-wrap .mce-toolbar .mce-btn:hover,.wp-editor-wrap .mce-toolbar .mce-btn.mce-active{background:rgba(0,0,0,0.06);border:0;box-shadow:none}.wp-editor-wrap .mce-toolbar .mce-btn-group{padding:0 2px}.wp-editor-wrap .mce-toolbar .mce-btn-group:not(:last-child)::after{content:\"\";display:inline-block;width:1px;height:20px;background:#e5e7eb;vertical-align:middle;margin-right:4px}.wp-editor-wrap .quicktags-toolbar{padding:0 10px 8px;border-bottom:1px solid #f5f5f5}.wp-editor-wrap .wp-editor-container{border:0}.wp-editor-wrap .mce-edit-area iframe{min-height:150px !important}.wp-editor-wrap div.mce-statusbar{display:none}#lp-builder-popup-container .wp-editor-container{border:none !important;background:#fff}#lp-builder-popup-container .wp-editor-tools{padding:8px 12px}#lp-builder-popup-container .mce-top-part{margin:0 !important}#lp-builder-popup-container .lp-question-field-settings .mce-top-part{margin:0 !important}#lp-builder-popup-container .quicktags-toolbar{margin:0 !important;padding:6px 8px !important}.lp-popup-items-to-select .header{padding:0;flex-shrink:0}.lp-popup-items-to-select .header ul.tabs{display:flex;border-bottom:1px solid #f5f5f5;background:#fff;gap:10px;margin:0;list-style:none;padding:0}.lp-popup-items-to-select ul.tabs li{margin:0;display:inline-block;position:relative;padding:0 24px;text-decoration:none;font-weight:500;font-size:14px;transition:all .2s ease;border-radius:12px 12px 0 0;border-bottom:2px solid transparent;cursor:pointer}.lp-popup-items-to-select ul.tabs li.active{border-bottom-color:#7067ed;background-color:#eef1ff;color:#7067ed}.lp-popup-items-to-select ul.tabs li:hover{background-color:#eef1ff;color:#7067ed}.lp-popup-items-to-select .header ul.tabs li.tab a{padding:0}.lp-popup-items-to-select .header ul.tabs li.tab.active a,.lp-popup-items-to-select .header ul.tabs li.tab a:hover{color:#7067ed}.lp-popup-items-to-select input.lp-search-title-item{padding:12px 16px;border-color:#e5e7eb;border-radius:8px;outline:0;transition:border-color .2s;margin:0}.lp-popup-items-to-select input.lp-search-title-item:focus{border-color:#7067ed;box-shadow:0 0 0 2px rgba(59,130,246,0.1)}.lp-target ul.list-items{padding:0;gap:0;max-height:500px}.lp-select-item{display:flex;align-items:center;padding:12px 0;cursor:pointer;transition:background .2s}.lp-select-item:last-child{border-bottom:0}.lp-select-item:hover{background-color:#f5f5f5}.lp-select-item input[type=checkbox]{appearance:none;-webkit-appearance:none;width:18px;height:18px;border:2px solid #d1d5db;border-radius:4px;margin-left:12px;cursor:pointer;position:relative;outline:0;flex-shrink:0}.lp-select-item input[type=checkbox]:checked{background-color:#28a746;border-color:#28a746}.lp-select-item input[type=checkbox]:checked::after{content:\"\";position:absolute;right:5px;top:1px;width:4px;height:9px;border:solid white;border-width:0 0 2px 2px;transform:rotate(-45deg)}.lp-select-item input[type=checkbox]:checked::before{display:none}.lp-answers-config input[type=radio]:checked::before{display:none}.lp-select-item .title{font-size:14px;color:#374151;font-weight:500}.lp-select-item .title strong{color:#9ca3af;font-weight:400;margin-right:5px;font-size:12px}.list-items-wrap .learn-press-pagination{margin-top:20px;display:flex;justify-content:center}.lp-popup-items-to-select .pagination{margin:10px 0 0 !important}.list-items-wrap .learn-press-pagination ul.page-numbers{display:flex;gap:8px;list-style:none;padding:0;margin:0}.list-items-wrap .page-numbers li span.page-numbers.current,.list-items-wrap .page-numbers li a.page-numbers{display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 12px;border-radius:6px;text-decoration:none;color:#898989;font-size:14px;transition:all .2s;background:#fff;font-weight:600}.list-items-wrap .page-numbers li span.page-numbers.current{background-color:#7067ed;color:#fff}.list-items-wrap .page-numbers li a.page-numbers:hover{background-color:#f7f7f7;border-color:#d1d5db;color:#1e1e1e}.list-items-wrap .page-numbers li a.page-numbers.next,.list-items-wrap .page-numbers li a.page-numbers.prev{background-color:#f7f7f7;border-color:#d1d5db}.list-items-wrap .page-numbers li a.page-numbers.next:hover,.list-items-wrap .page-numbers li a.page-numbers.prev:hover{background-color:#7067ed;color:#fff}.list-items-wrap .page-numbers i{font-size:14px}.lp-popup-items-to-select .main{border-bottom-color:transparent !important;padding:20px 0 0 !important}.lp-popup-items-to-select .footer{padding:16px 0 0 !important;align-items:center;justify-content:space-between}.lp-popup-items-to-select .button{padding:10px 20px;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:all .2s;background:transparent;color:#1e1e1e}.lp-popup-items-to-select .button:hover{background:transparent;color:#7067ed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active,.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary:not(.active){background-color:#eef1ff;color:#7067ed;order:2}.lp-btn-add-items-selected:hover:not(:disabled){background-color:#333}.lp-btn-add-items-selected:disabled{background-color:#f5f5f5;color:#9ca3af;cursor:not-allowed}.lp-popup-items-to-select .lp-btn-add-items-selected.lp-btn-edit-primary.active:hover{background-color:#7067ed;color:#eef1ff}.lp-btn-count-items-selected{background:transparent;color:#6b7280;padding:0 !important;font-size:13px;order:1}.lp-btn-back-to-select-items{background:#fff;border:1px solid #d1d5db;color:#374151;order:0}.lp-btn-back-to-select-items:hover{background-color:#f5f5f5}.lp-popup-items-to-select ul.list-items-selected{padding-right:0;background:#fff;margin-bottom:20px;gap:0}.lp-popup-items-to-select ul.list-items-selected li{display:flex;align-items:center;padding:5px;border-bottom:1px solid #f5f5f5;color:#1e1e1e;cursor:pointer;transition:background .2s}.lp-hidden{display:none !important}.lp-popup-items-to-select .header .tabs .tab.active::after{display:none !important}.lp-popup-items-to-select .header .tabs .tab:not(:last-child)::before{display:none}.lp-popup-items-to-select .list-items-selected li:hover{background:#f5f5f5}.lp-popup-items-to-select .header .header-count-items-selected{border-bottom-color:#f5f5f5}.lp-toast.toastify{background:#e7f6e9;color:#28a746;border-radius:5px;box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee2e2;color:#dc2626;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fbf7f2;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:#dbeafe;color:#1e40af;padding:12px 20px;border:0;margin:0 auto}#wp-media-modal label.screen-reader-text,#wp-media-modal span.screen-reader-text{display:none}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-curriculum.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-curriculum.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-curriculum.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-curriculum.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -318,7 +318,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -326,7 +326,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-curriculum-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-curriculum-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-curriculum-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-curriculum-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -318,7 +318,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -326,7 +326,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-question.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-question.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-question.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-question.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -67,7 +67,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -75,7 +75,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -126,7 +126,7 @@\n   cursor: grabbing;\n }\n \n-\u002F***** Main Question Edit Styles *****\u002F\n+\u002F***** Main Question Edit Styles using styles from Quiz Builder *****\u002F\n .lp-question-edit-main {\n   display: grid;\n   gap: 20px;\n@@ -257,7 +257,8 @@\n   display: grid;\n   gap: 5px;\n }\n-.lp-question-field-settings input[type=text], .lp-question-field-settings input[type=number] {\n+.lp-question-field-settings input[type=text],\n+.lp-question-field-settings input[type=number] {\n   padding: 0 10px;\n }\n \n@@ -284,7 +285,8 @@\n   padding: 10px;\n   background: #eee;\n }\n-.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before, .lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before,\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n   content: \"\\f142\";\n   width: 15px;\n   text-align: center;\n@@ -298,7 +300,7 @@\n   display: flex;\n   flex-direction: column;\n   gap: 10px;\n-  border: 1px solid #EEEEEE;\n+  border: 1px solid #eeeeee;\n   border-top: none;\n }\n .lp-question-fib-blank-option-item .lp-question-fib-option-detail p {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-question-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-question-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-question-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-question-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -67,7 +67,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -75,7 +75,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -126,7 +126,7 @@\n   cursor: grabbing;\n }\n \n-\u002F***** Main Question Edit Styles *****\u002F\n+\u002F***** Main Question Edit Styles using styles from Quiz Builder *****\u002F\n .lp-question-edit-main {\n   display: grid;\n   gap: 20px;\n@@ -257,7 +257,8 @@\n   display: grid;\n   gap: 5px;\n }\n-.lp-question-field-settings input[type=text], .lp-question-field-settings input[type=number] {\n+.lp-question-field-settings input[type=text],\n+.lp-question-field-settings input[type=number] {\n   padding: 0 10px;\n }\n \n@@ -284,7 +285,8 @@\n   padding: 10px;\n   background: #eee;\n }\n-.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before, .lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before,\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n   content: \"\\f142\";\n   width: 15px;\n   text-align: center;\n@@ -298,7 +300,7 @@\n   display: flex;\n   flex-direction: column;\n   gap: 10px;\n-  border: 1px solid #EEEEEE;\n+  border: 1px solid #eeeeee;\n   border-top: none;\n }\n .lp-question-fib-blank-option-item .lp-question-fib-option-detail p {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-quiz.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-quiz.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-quiz.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-quiz.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -73,7 +73,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -81,7 +81,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -132,7 +132,7 @@\n   cursor: grabbing;\n }\n \n-\u002F***** Main Question Edit Styles *****\u002F\n+\u002F***** Main Question Edit Styles using styles from Quiz Builder *****\u002F\n .lp-question-edit-main {\n   display: grid;\n   gap: 20px;\n@@ -263,7 +263,8 @@\n   display: grid;\n   gap: 5px;\n }\n-.lp-question-field-settings input[type=text], .lp-question-field-settings input[type=number] {\n+.lp-question-field-settings input[type=text],\n+.lp-question-field-settings input[type=number] {\n   padding: 0 10px;\n }\n \n@@ -290,7 +291,8 @@\n   padding: 10px;\n   background: #eee;\n }\n-.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before, .lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before,\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n   content: \"\\f142\";\n   width: 15px;\n   text-align: center;\n@@ -304,7 +306,7 @@\n   display: flex;\n   flex-direction: column;\n   gap: 10px;\n-  border: 1px solid #EEEEEE;\n+  border: 1px solid #eeeeee;\n   border-top: none;\n }\n .lp-question-fib-blank-option-item .lp-question-fib-option-detail p {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-quiz-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-quiz-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fedit-quiz-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fedit-quiz-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -73,7 +73,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -81,7 +81,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\n@@ -132,7 +132,7 @@\n   cursor: grabbing;\n }\n \n-\u002F***** Main Question Edit Styles *****\u002F\n+\u002F***** Main Question Edit Styles using styles from Quiz Builder *****\u002F\n .lp-question-edit-main {\n   display: grid;\n   gap: 20px;\n@@ -263,7 +263,8 @@\n   display: grid;\n   gap: 5px;\n }\n-.lp-question-field-settings input[type=text], .lp-question-field-settings input[type=number] {\n+.lp-question-field-settings input[type=text],\n+.lp-question-field-settings input[type=number] {\n   padding: 0 10px;\n }\n \n@@ -290,7 +291,8 @@\n   padding: 10px;\n   background: #eee;\n }\n-.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before, .lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-down::before,\n+.lp-question-fib-blank-option-item .lp-question-fib-option-header .lp-icon-angle-up::before {\n   content: \"\\f142\";\n   width: 15px;\n   text-align: center;\n@@ -304,7 +306,7 @@\n   display: flex;\n   flex-direction: column;\n   gap: 10px;\n-  border: 1px solid #EEEEEE;\n+  border: 1px solid #eeeeee;\n   border-top: none;\n }\n .lp-question-fib-blank-option-item .lp-question-fib-option-detail p {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -2382,7 +2382,7 @@\n   opacity: 0;\n   visibility: hidden;\n   cursor: pointer;\n-  background-color: var(--lp-white-grey, #F7F7FB);\n+  background-color: var(--lp-white-grey, #f7f7fb);\n   border-radius: 50%;\n }\n @media (max-width: 767px) {\n@@ -2476,7 +2476,8 @@\n .lp-user-profile .lp-profile-nav-tabs > li.active {\n   background: var(--lp-primary-color);\n }\n-.lp-user-profile .lp-profile-nav-tabs > li.active > a, .lp-user-profile .lp-profile-nav-tabs > li.active > a i {\n+.lp-user-profile .lp-profile-nav-tabs > li.active > a,\n+.lp-user-profile .lp-profile-nav-tabs > li.active > a i {\n   color: #fff;\n }\n .lp-user-profile .lp-profile-nav-tabs > li:not(.active):hover {\n@@ -2528,7 +2529,8 @@\n     overflow-x: scroll;\n   }\n }\n-.lp-user-profile .lp-profile-content .course-categories, .lp-user-profile .lp-profile-content .course-instructor {\n+.lp-user-profile .lp-profile-content .course-categories,\n+.lp-user-profile .lp-profile-content .course-instructor {\n   margin-bottom: 14px;\n }\n .lp-user-profile .lp-profile-content .course-categories {\n@@ -2696,6 +2698,47 @@\n .learn-press-profile-course__statistic {\n   margin-bottom: 32px;\n }\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder {\n+  display: flex;\n+  align-items: flex-end;\n+  justify-content: space-between;\n+  gap: 16px;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-filters {\n+  flex: 1 1 auto;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 8px 16px;\n+  margin-bottom: 8px;\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: 6px;\n+  color: var(--lp-primary-color, #ffb606);\n+  font-size: 0.875em;\n+  font-weight: 600;\n+  line-height: 1;\n+  text-decoration: none;\n+  white-space: nowrap;\n+  transition: all 0.2s ease;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:hover, .learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:focus {\n+  background: var(--lp-primary-color, #ffb606);\n+  border-color: var(--lp-primary-color, #ffb606);\n+  color: #fff;\n+  text-decoration: none;\n+}\n+@media (max-width: 768px) {\n+  .learn-press-profile-course__tab .learn-press-tabs--with-course-builder {\n+    flex-direction: column;\n+    align-items: stretch;\n+  }\n+  .learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link {\n+    width: 100%;\n+    margin: 0 0 16px;\n+  }\n+}\n .learn-press-profile-course__progress .lp_profile_course_progress__item img {\n   width: 100%;\n   aspect-ratio: 16\u002F9;\n@@ -2703,34 +2746,42 @@\n   height: auto;\n   display: block;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td, .learn-press-profile-course__progress .lp_profile_course_progress__item th {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th {\n   text-align: center;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child, .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n   width: 15%;\n   padding: 0;\n }\n @media (max-width: 768px) {\n-  .learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child, .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n+  .learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,\n+  .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n     display: none;\n   }\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) {\n   width: 25%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a, .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a {\n   display: -webkit-box;\n   -webkit-line-clamp: 2;\n   -webkit-box-orient: vertical;\n   overflow: hidden;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3) {\n   width: 10%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4) {\n   width: 25%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5) {\n   width: 25%;\n }\n @media (max-width: 768px) {\n@@ -7513,11 +7564,9 @@\n   border-bottom: 1px solid #d9e0f1;\n   background: var(--lp-secondary-color);\n   align-items: center;\n-  -webkit-transition: left 0.25s;\n-  -moz-transition: left 0.25s;\n-  -ms-transition: left 0.25s;\n-  -o-transition: left 0.25s;\n-  transition: left 0.25s;\n+  transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: left;\n+  transform: translateZ(0);\n }\n #popup-header .course-title {\n   margin: 0;\n@@ -7584,11 +7633,9 @@\n   position: relative;\n   box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.1);\n   flex: 0 0 475px;\n-  -webkit-transition: 0.25s;\n-  -moz-transition: 0.25s;\n-  -ms-transition: 0.25s;\n-  -o-transition: 0.25s;\n-  transition: 0.25s;\n+  transition: flex-basis 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: flex-basis;\n+  transform: translateZ(0);\n }\n #popup-sidebar .search-course {\n   display: flex;\n@@ -7859,11 +7906,9 @@\n   margin: 0 auto;\n   border-top: 1px solid #ebebeb;\n   background: var(--lp-bg-color-lesson, #fff);\n-  -webkit-transition: left 0.25s;\n-  -moz-transition: left 0.25s;\n-  -ms-transition: left 0.25s;\n-  -o-transition: left 0.25s;\n-  transition: left 0.25s;\n+  transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: left;\n+  transform: translateZ(0);\n }\n @media (max-width: 1024px) {\n   #popup-footer {\n@@ -8945,7 +8990,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -8953,7 +8998,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-left:15px;padding-right:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-tabs{margin-bottom:32px;position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs__nav{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-tabs__item{position:relative;margin:0;list-style:none}.learn-press-tabs__item>a{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-tabs__item>a:focus{outline:0;text-decoration:none}.learn-press-tabs__item::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-tabs__item.active a,.learn-press-tabs__item:hover a{color:var(--lp-primary-color,#ffb606)}.learn-press-tabs__item.active::after,.learn-press-tabs__item:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}@media(max-width:990px){.learn-press-tabs__nav,.learn-press-tabs .learn-press-filters{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;scroll-behavior:smooth}.learn-press-tabs__nav::-webkit-scrollbar,.learn-press-tabs .learn-press-filters::-webkit-scrollbar{display:none}}.learn-press-filters{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-filters li{position:relative;margin:0;list-style:none}.learn-press-filters li a,.learn-press-filters li span{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-filters li a:focus,.learn-press-filters li span:focus{outline:0;text-decoration:none}.learn-press-filters li a::after,.learn-press-filters li span::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-filters li a.active,.learn-press-filters li a:hover,.learn-press-filters li span.active,.learn-press-filters li span:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li a.active::after,.learn-press-filters li a:hover::after,.learn-press-filters li span.active::after,.learn-press-filters li span:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a,.learn-press-filters li.active span{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a::after,.learn-press-filters li.active span::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li:after{display:none !important}.wrapper-course-nav-tabs{position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125em}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;align-items:start}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column;align-items:center}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:24px}}.course-tab-panel .lp-course-author img{width:100px;height:100px;border-radius:50%;object-fit:cover;object-position:center;display:block;margin:0 auto}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:4px}.course-tab-panel .lp-course-author .author-title a{text-decoration:none;color:var(--lp-color-base,#333);box-shadow:none;font-size:1.125em;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-style:italic}.course-tab-panel .lp-course-author .instructor-social{display:flex;gap:16px;margin-bottom:12px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center;margin-top:16px}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:.8em;line-height:2em;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:\"\\f0d5\"}.course-tab-panel .lp-course-curriculum__title{display:none}.learn-press-nav-tabs{margin:0;display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-nav-tabs li{position:relative;margin:0;list-style:none}.learn-press-nav-tabs li label{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-nav-tabs li label:focus{outline:0;text-decoration:none}.learn-press-nav-tabs li::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-nav-tabs li.active label,.learn-press-nav-tabs li:hover label{color:var(--lp-primary-color,#ffb606)}.learn-press-nav-tabs li.active::after,.learn-press-nav-tabs li:hover::after{background:var(--lp-primary-color,#ffb606)}.TabsDragScroll{position:relative}.TabsDragScroll:hover{cursor:all-scroll}.TabsDragScroll ul{max-width:100%;white-space:nowrap;scroll-behavior:smooth;user-select:none;overflow-x:auto;flex-wrap:nowrap}.TabsDragScroll ul::-webkit-scrollbar{display:none}.TabsDragScroll ul.dragging{scroll-behavior:unset;cursor:all-scroll}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:1.5em;font-weight:600;line-height:1}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:\"lp-icon\";font-size:14px;line-height:1;content:\"\\f00c\";border:0;transform:none}.lp-checkout-form .lp-checkout-remember a{color:#666;font-weight:300;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px}.lp-checkout-form .lp-form-fields input:not([type=checkbox]){line-height:normal;width:100%;padding:10px 15px;border:1px solid #ccc}.lp-checkout-form .lp-form-fields input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:var(--lp-primary-color,#ffb606)}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-weight:400}.lp-checkout-form .lp-guest-switch-login a{display:inline-block}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:\"\"}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:4px}#checkout-order .cart-item:first-child td{border-top:0}#checkout-order td,#checkout-order th{border-right:0;border-left:0;background:transparent}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order table{width:100%;margin:0;border:0}#checkout-order .course-name{font-weight:600}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-weight:600;text-align:right}#checkout-order tfoot{font-size:1.2em}#checkout-order tfoot th{font-weight:600;padding-left:0}#checkout-order tfoot .order-total{font-size:1.4em}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail img{width:100px;max-width:100% !important;height:auto !important}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid var(--lp-border-color,#e2e0db);resize:none}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{margin-top:5px;opacity:.5;font-size:.75em;font-weight:normal;margin-left:10px}#checkout-payment .secure-connection i{margin-right:5px;font-size:1.125em}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:\"\"}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}.lp-terms-and-conditions{color:#666}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:2.5rem;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid var(--lp-border-color,#e2e0db);background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.learn-press-checkout-comment h4{display:none}.lp-content-area .order_details{width:100%;border-collapse:collapse}.lp-content-area .order_details th a,.lp-content-area .order_details td a{color:var(--lp-primary-color)}.learnpress-checkout .learnpress>.learn-press-message{max-width:var(--lp-container-max-width);margin:0 auto}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}.learnpress table{width:100%;margin:0 auto 1em auto;border-spacing:0;border-collapse:collapse}.learnpress table th,.learnpress table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;text-align:left}.learnpress table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.learnpress table thead th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-size:1.1em;font-weight:600}.learnpress table tbody,.learnpress table tfoot{box-sizing:border-box}.learnpress table tbody td,.learnpress table tbody th,.learnpress table tfoot td,.learnpress table tfoot th{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.learnpress table tbody td a,.learnpress table tbody th a,.learnpress table tfoot td a,.learnpress table tfoot th a{color:inherit;text-decoration:none}.learnpress table tbody td a:hover,.learnpress table tbody th a:hover,.learnpress table tfoot td a:hover,.learnpress table tfoot th a:hover{color:var(--lp-primary-color)}.learnpress table tbody tr .column-status .result-percent,.learnpress table tfoot tr .column-status .result-percent{font-weight:500}.learnpress table tbody tr .column-status .lp-label,.learnpress table tfoot tr .column-status .lp-label{font-weight:600}.learnpress table tbody tr:nth-child(even) td,.learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.learnpress table .list-table-nav td{font-size:.875em}.learnpress table .list-table-nav td.nav-text{text-align:left}.learnpress table .list-table-nav td.nav-pages{text-align:right}.learnpress table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.learnpress table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-weight:300}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.lp-profile-content .learn-press-form .form-fields{margin:0 -15px !important}.lp-profile-content .learn-press-form .form-fields .form-field{padding-left:15px;padding-right:15px}@media(min-width:767px){.lp-profile-content .learn-press-form .form-fields .form-field__50{width:50%;float:left}}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field>label{font-style:italic}.learn-press-form .form-fields .form-field label{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:700;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field input[type=tel],.learn-press-form .form-fields .form-field input[type=url],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field textarea{width:100%;border:1px solid var(--lp-border-color,#e2e0db);padding:8px 16px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field input[type=email]:focus,.learn-press-form .form-fields .form-field input[type=text]:focus,.learn-press-form .form-fields .form-field input[type=password]:focus,.learn-press-form .form-fields .form-field input[type=tel]:focus,.learn-press-form .form-fields .form-field input[type=url]:focus,.learn-press-form .form-fields .form-field input[type=number]:focus,.learn-press-form .form-fields .form-field textarea:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:.875em;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk,.learn-press-form .form-fields .form-field .required{color:red}.learn-press-form.completed button::before{margin-right:10px;font-family:\"lp-icon\";font-size:1.125em;content:\"\\f00c\"}.learn-press-form .form-field__clear{clear:both}.learn-press-form form>p>label{display:flex;gap:8px}.learn-press-form p{margin:0}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{padding:12px 16px;width:100%;border-radius:var(--lp-border-radius,5px);outline:0;color:#fff;background:var(--lp-primary-color)}.required label{font-weight:bold}.required label:after{content:\" *\";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative;width:100%}.lp-password-input input[type=password]{padding-right:2.5em}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:\"lp-icon\";content:\"\\f06e\"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:\"\\f070\"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}.become-teacher-form .become-teacher-form__description{margin-top:12px}.become-teacher-form button{padding:12px 24px}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-user-cover-image_background{position:relative}.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image{opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image{position:absolute;bottom:0;right:0;background:var(--lp-white-grey,#f7f7fb);padding:12px 20px;border-radius:var(--lp-border-radius,5px) 0 var(--lp-border-radius,5px) 0;text-transform:capitalize;cursor:pointer;color:var(--lp-primary-color,#ffb606);text-decoration:none;opacity:0;visibility:hidden}@media(max-width:767px){.lp-user-cover-image_background .lp-btn-to-edit-cover-image{font-size:0;padding:4px 12px;opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image:before{font-family:\"lp-icon\";content:\"\\f044\";font-size:16px}}.lp-user-cover-image__display{width:100%}@media(max-width:767px){.lp-user-cover-image{position:relative;z-index:1}}.lp-user-cover-image .lp-cover-image-empty{display:flex;align-items:center;width:100%;height:250px;border:2px dashed var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;position:relative;text-align:center}.lp-user-cover-image .lp-cover-image-empty:hover{border-color:var(--lp-primary-color,#ffb606)}.lp-user-cover-image .lp-cover-image-empty input[type=file]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:10}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{z-index:1;flex:1;position:relative;padding:0 16px;line-height:1.3}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top{font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-direction:column}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image{font-size:32px;transform:rotate(-90deg)}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before{color:var(--lp-primary-color);content:\"\\f08b\"}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom{opacity:.7}@media(max-width:420px){.lp-user-cover-image .lp-cover-image-empty{height:200px}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{padding:0 8px;font-size:15px}}.lp-user-cover-image .lp-user-cover-image__buttons{display:inline-flex;gap:12px;margin-top:16px}.lp-user-cover-image_background{background-repeat:no-repeat;background-position:center;background-size:cover;margin-bottom:20px;border-radius:var(--lp-border-radius,5px);min-height:100px}.lp-user-cover-image_background>img{opacity:0;visibility:hidden}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed var(--lp-border-color,#e2e0db);border-radius:3px;background-color:#fafafa;font-size:.875em;font-weight:300;font-style:italic;line-height:2.6875em;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}.dashboard-statistic__row{display:flex;gap:20px;flex-wrap:wrap}.dashboard-statistic__row .statistic-box{padding:20px;background:var(--lp-white-grey,#f7f7fb);text-align:center;display:flex;flex-wrap:wrap;gap:20px;border-radius:var(--lp-border-radius,5px);width:calc((100% - 40px) \u002F 3)}@media(min-width:1200px) and (max-width:1440px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:1200px){.dashboard-statistic__row .statistic-box{width:calc((100% - 20px) \u002F 2)}}@media(max-width:768px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:600px){.dashboard-statistic__row{gap:8px}.dashboard-statistic__row .statistic-box{width:100%;gap:12px;padding:8px 12px}.dashboard-statistic__row .statistic-box__text{display:flex;justify-content:space-between;align-items:center}.dashboard-statistic__row .statistic-box__text label{margin:0}.dashboard-statistic__row .statistic-box__text__number{font-size:1.2em}.dashboard-statistic__row .statistic-box__icon span{--lp-width-icon:40px;font-size:18px}}.statistic-box__icon span{--lp-width-icon:60px;display:flex;width:var(--lp-width-icon);height:var(--lp-width-icon);border-radius:50%;background:rgba(0,199,190,0.1019607843);line-height:var(--lp-width-icon);align-items:center;justify-content:center;color:#00c7be;font-size:24px}.statistic-box__icon [class^=lp-icon-]:before{width:1em}.statistic-box__icon .lp-icon-enrolled_courses:before,.statistic-box__icon .lp-icon-total_course:before{content:\"\\f518\"}.statistic-box__icon .lp-icon-in_progress_course,.statistic-box__icon .lp-icon-student_in_progress{background:rgba(175,82,222,0.1019607843);color:#af52de}.statistic-box__icon .lp-icon-finished_courses,.statistic-box__icon .lp-icon-published_course{background:rgba(88,86,214,0.1019607843);color:#5856d6}.statistic-box__icon .lp-icon-passed_courses,.statistic-box__icon .lp-icon-student_completed{background:rgba(85,190,36,0.2);color:#34c759}.statistic-box__icon .lp-icon-failed_courses,.statistic-box__icon .lp-icon-pending_course{background:rgba(255,59,48,0.1019607843);color:#ff3b30}.statistic-box__icon .lp-icon-total_student{background:rgba(0,122,255,0.1019607843);color:#007aff}.statistic-box__icon .lp-icon-total_student:before{content:\"\\f501\"}.statistic-box__text{flex:1;text-align:left}.statistic-box__text label{display:block;margin-bottom:4px;font-weight:normal;line-height:1.3;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.statistic-box__text__number{font-size:1.6em;line-height:1;font-weight:600}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:left}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:right}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.wrapper-profile-header{position:relative}.lp-user-profile{position:relative;--lp-item-padding:40px}.lp-user-profile img{max-width:100%;height:auto}.lp-user-profile .lp-user-profile-avatar img{display:block;border-radius:var(--lp-border-radius-avatar,50%);width:100%;height:auto}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;margin:0;gap:12px}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--lp-color-base,#333);width:var(--lp-social-size,40px);height:var(--lp-social-size,40px);border-radius:50%;border:1px solid var(--lp-border-color,#e2e0db);font-size:16px}.lp-user-profile .lp-user-profile-socials a:hover{color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color);background:var(--lp-primary-color)}.lp-user-profile .lp-user-profile-socials a:hover svg{fill:var(--lp-color-white,#fff)}.lp-user-profile .lp-profile-content-area{position:relative;padding:0;display:flex;align-items:flex-start}.lp-user-profile .lp-profile-left{min-width:120px;max-width:120px}.lp-user-profile .lp-profile-left .user-avatar{position:relative}.lp-user-profile .lp-profile-left .user-avatar img{border-radius:50%}.lp-user-profile .lp-profile-left .user-avatar:hover .lp-btn-to-edit-avatar{opacity:1;visibility:visible}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{position:absolute;top:80px;right:0;left:auto;width:36px;height:36px;font-size:0;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;cursor:pointer;background-color:var(--lp-white-grey,#f7f7fb);border-radius:50%}@media(max-width:767px){.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{opacity:1;top:60px;visibility:visible}}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar::before{content:\"\\f044\";font-size:1.5rem;font-family:\"lp-icon\";font-weight:normal;color:var(--lp-primary-color)}.lp-user-profile .lp-profile-right{padding-left:20px;flex:1;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px}.lp-user-profile .lp-profile-username{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:500;color:inherit;flex:1}.lp-user-profile .lp-profile-user-bio{width:100%}.lp-user-profile #profile-sidebar{float:left;width:270px;border:1px solid var(--lp-border-color,#e2e0db);border-top:0;margin-top:var(--lp-item-padding);margin-bottom:32px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%;margin-bottom:0}}.lp-user-profile .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile .lp-profile-nav-tabs>li{position:relative;margin:0;padding:0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li a{padding:10px 20px;color:inherit;font-weight:500;text-decoration:none;display:flex;width:100%;gap:8px;line-height:1.4}.lp-user-profile .lp-profile-nav-tabs>li a>i{margin-top:3px}.lp-user-profile .lp-profile-nav-tabs>li>a{padding:14px 20px;position:relative}.lp-user-profile .lp-profile-nav-tabs>li>a>i{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-user-profile .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active{background:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active>a,.lp-user-profile .lp-profile-nav-tabs>li.active>a i{color:#fff}.lp-user-profile .lp-profile-nav-tabs>li:not(.active):hover{background:var(--lp-white-grey,#f7f7fb)}.lp-user-profile .lp-profile-nav-tabs>li.has-child>a:after{font-family:\"lp-icon\";content:\"\\f105\";position:absolute;right:15px;top:50%;transform:translateY(-50%)}.lp-user-profile .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:180px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile .lp-profile-nav-tabs li>ul li{white-space:nowrap}.lp-user-profile .lp-profile-nav-tabs li>ul li:hover,.lp-user-profile .lp-profile-nav-tabs li>ul li.active{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:32px;padding-top:var(--lp-item-padding)}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form{display:flex;align-items:center;margin-bottom:10px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form input[type=number]{padding:8px;border:1px solid #ccc;width:60px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form button{cursor:pointer;line-height:1}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile .learn-press-message{margin-top:0}.lp-user-profile .profile-heading{margin-bottom:24px}.lp-user-profile.guest .lp-content-area{display:flex;align-items:flex-start}.lp-user-profile.guest .lp-content-area>div{flex:1;width:100%}@media(min-width:1366px){.lp-user-profile .lp-content-area{padding-right:0;padding-left:0}}@media(max-width:990px){.lp-user-profile{--lp-item-padding:30px}.lp-user-profile #profile-nav{border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs{display:flex;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;white-space:nowrap;scroll-behavior:smooth}.lp-user-profile .lp-profile-nav-tabs::after{display:none}.lp-user-profile .lp-profile-nav-tabs>li{border:0;border-right:1px solid var(--lp-border-color,#e2e0db);flex:1}.lp-user-profile .lp-profile-nav-tabs>li:last-child{border-right:0}.lp-user-profile .lp-profile-nav-tabs>li>a{height:auto;padding:8px 12px 8px 12px;flex-direction:column;white-space:nowrap;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);line-height:1.4;gap:4px}.lp-user-profile .lp-profile-nav-tabs>li>a>i{position:static;transform:translate(0)}.lp-user-profile .lp-profile-nav-tabs>li>a::after{display:none !important;margin-left:10px}.lp-user-profile .lp-profile-nav-tabs>li.has-child a::after{display:none !important}.lp-user-profile .lp-profile-nav-tabs>li:after{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active:after,.lp-user-profile .lp-profile-nav-tabs>li.active:before{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:\"\"}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile .lp-profile-nav-tabs li:not(.has-child)>a::after,.lp-user-profile .lp-profile-nav-tabs li:hover ul{display:none !important}}@media(max-width:768px){.lp-user-profile .lp-profile-content-area{align-items:center}.lp-user-profile .lp-profile-right{flex-direction:column;align-items:flex-start}.lp-user-profile .lp-profile-user-bio{display:none}.lp-user-profile.guest .lp-content-area{flex-direction:column}}@media(max-width:650px){.lp-user-profile .lp-profile-left{min-width:100px;max-width:100px}.lp-user-profile .lp-user-profile-socials{gap:8px;--lp-social-size:36px;font-size:14px}}#profile-content-withdrawals>h2{font-size:1.6em;margin-bottom:12px}.learn-press-profile-course__statistic{margin-bottom:32px}.learn-press-profile-course__progress .lp_profile_course_progress__item img{width:100%;aspect-ratio:16\u002F9;object-fit:cover;height:auto;display:block}.learn-press-profile-course__progress .lp_profile_course_progress__item td,.learn-press-profile-course__progress .lp_profile_course_progress__item th{text-align:center}.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{width:15%;padding:0}@media(max-width:768px){.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{display:none}}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3){width:10%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5){width:25%}@media(max-width:768px){.learn-press-profile-course__progress .learn-press-course-tab__filter__content{overflow-x:auto}}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:1.875em;line-height:1.5;font-weight:500;margin-bottom:15px}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;opacity:.7;font-size:.8em;font-style:italic}.lp-order-recover{display:flex;gap:10px}.lp-order-recover input[type=text]{font-style:italic;flex:1 1 auto}.lp-profile-content ul{list-style:none !important;padding:0 !important}.lp-profile-content ul.learn-press-courses{margin:0 -16px}.lp-profile-content h3{margin-top:0}.lp-user-avatar__buttons{display:inline-flex;gap:12px;margin-top:16px}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 20px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:16px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-left:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-left:16px;padding-right:16px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 45px 12px 20px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;right:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-left:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-left linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:right;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-left:0;margin-right:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:\"\"}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:.938em;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:1.25em}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:.875em}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:1.875em;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:\"\"}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:\"\";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:32px;min-width:32px;height:32px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0}.answer-options .answer-option input[type=checkbox]::after{width:auto;box-sizing:content-box;height:auto;color:#3db748;font-family:\"lp-icon\";font-size:16px;opacity:0;content:\"\\f00c\";background:0;border:0}.answer-options .answer-option input[type=checkbox]:checked::after{border:0}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option input[type=radio]:checked::after{content:\"\";width:10px;height:10px;border-radius:10px;background:#00adff}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answered-wrong input[type=checkbox]::after{color:red}.answer-options .answer-option.answered-wrong input[type=radio]::after{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:\"(+\" attr(data-counter) \")\"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:\"\\f00c\"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0;color:#fff;background:#f02425;display:flex;align-items:center;justify-content:center;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);gap:8px}.quiz-result .result-message::after{font-family:\"lp-icon\";content:\"\\f00d\"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:1.75em;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:1em;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:.875em}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed var(--lp-border-color,#e2e0db)}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:1em;font-weight:400;line-height:2.1875em}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-weight:500;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:\"\\f017\"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:\"\\f005\"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:\"\\f059\"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:\"\\f00c\"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:\"\\f00d\"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:\"\\f2f5\"}.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:426px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{flex-direction:row;justify-content:space-between}}@media(min-width:1025px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:792px}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:50%}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:65%;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{flex-direction:row}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:792px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:100%;text-align:center}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:50%}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:100%;justify-content:center;flex-direction:column-reverse;gap:0}@media(min-width:490px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{flex-direction:row-reverse}}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:65%;gap:12px;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;margin:0 auto;padding:8px 16px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div>div .submit-quiz #button-submit-quiz{margin:0;border-radius:4px;overflow:hidden;white-space:nowrap}.quiz-status>div>div .countdown{margin:0;border-radius:4px;overflow:hidden;padding:12px}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:1em;font-weight:400;line-height:1.625em}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{min-height:38px;color:#333;font-weight:500;text-align:center}.quiz-status .countdown .fas{color:#333;font-size:1em}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:\"\";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .countdown i{margin:0 5px 0 0}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:.75em;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:\"lp-icon\";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:\"\"}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;margin-right:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:\"\\f012\"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:\"\\f12e\"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:\"\\f017\"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-weight:300}.quiz-intro-item__content{color:#222;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:\"\"}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:\"\"}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.quiz-questions .question-answers .answer-options{margin:0;padding:0}.question .answer-option{padding:0}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;border-color:#d9e0f1;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:10px 10px 10px 60px;border:1px solid var(--lp-border-color,#e2e0db);color:#666;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;font-size:1.125em;font-weight:500}.question .question-title .edit-link{float:right;font-size:.875em;font-weight:normal}.question .question-content{margin-bottom:30px}.question .question-content img{max-width:100%}.question .question-response{margin-bottom:10px;font-size:.875em}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none;border:0}.question .btn-show-hint::before{font-family:\"lp-icon\";font-size:18px;content:\"\\f059\"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:100%;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed var(--lp-border-color,#e2e0db);text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table th,.quiz-attempts table td{text-align:center}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #ebf8e5;border-radius:9px;font-size:.9em;line-height:1.4}.lp-ajax-message.error{border-color:#fee5e5}.lp-icon-passed{margin-right:5px}.lp-icon-passed::before{color:#059601;font-family:\"lp-icon\";content:\"\\f058\"}.lp-user-item.graduation{padding:10px}.lp-user-item.graduation.passed{background-color:#ebf8e5;color:#3ab500}.lp-user-item.graduation.failed{background-color:#fdecec;color:#d85554}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:1.25em}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:\"lp-icon\";content:\"\\f071\"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:\"\"}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:15px;left:-120px;width:300px;background:#ff2828;text-align:center;transform:rotate(-45deg);height:auto;padding:5px 0}.lp-badge.featured-course::before{font-size:.75em;text-transform:uppercase;content:attr(data-text)}body div.entry-content>div.learnpress,body div.entry-content>div.learnpress:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.is-style-wide){--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-left:0;padding-right:0}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 1.5em}.lp-archive-courses ul{list-style-type:revert;padding:0 0 1em 1em}.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul,.learnpress-profile #left-area ul,.learnpress-profile .entry-content ul,.learnpress-profile .et-l--body ul,.learnpress-profile .et-l--footer ul,.learnpress-profile .et-l--header ul{padding:0;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size=\"3\"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.astra .course-summary-content .course-detail-info{--lp-color-white:#333;--lp-secondary-color:transparent}body.astra .course-summary-content .course-detail-info .course-title{border-bottom-color:var(--ast-global-color-7)}.ast-container{--lp-cotainer-padding:0}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-left:0;padding-right:0}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.edu-press:not(.nofixcss),.theme-edu-press:not(.nofixcss){--lp-font-size-base:1em}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label{display:none}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a{font-size:1rem}.edu-press:not(.nofixcss) .course-instructor-category .course-categories a,.theme-edu-press:not(.nofixcss) .course-instructor-category .course-categories a{font-weight:normal}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories{position:absolute}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor{display:inline}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*{display:revert}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore{width:auto}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a{padding:0}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover{background:transparent;color:var(--thim-body_primary_color)}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info{border-top:1px solid rgba(153,153,153,0.2);padding-top:20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info{margin-top:50px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input{height:unset;padding:10px 20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button{background-image:none !important}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i{display:block}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn{opacity:1}.edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a{border:0}.edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box,.theme-edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box{background-color:var(--lp-white-grey,#f7f7fb);min-width:unset;margin-bottom:0}.edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before{font-family:\"lp-icon\" !important;font-weight:normal !important;margin:0 !important}.edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs,.theme-edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs{background:transparent;border-radius:0}.lp-4{--lp-font-size-base:1em}.elearningwp:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border:none !important;background-color:unset !important;padding:0}.elearningwp:not(.nofixcss) .lp-content-area.learn-press-message{padding:10px 15px}.course-builder:not(.nofixcss) .lp-courses-bar .search-courses button{padding:0}.course-builder:not(.nofixcss) .lp-courses-bar .courses-order-by{height:unset !important;padding:8px 35px 8px 15px !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user #profile-sidebar{margin-top:0 !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user .lp-profile-content-area{align-items:center}.course-builder:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border-radius:5px;border:0;padding:0}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header{padding-bottom:30px}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header .lp-profile-user-bio{padding-bottom:0}.learnpress-v4:not(.nofixcss),.learnpress-v3:not(.nofixcss){--lp-border-radius-avatar:0}.learnpress-v4:not(.nofixcss) .statistic-box,.learnpress-v3:not(.nofixcss) .statistic-box{--thim-lp-profile-bg-color:#f7f7fb}.learnpress-v4:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters,.learnpress-v3:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters{border:none !important;margin:0 0 0 -1px 0 !important}.learnpress-v4:not(.nofixcss) .lp-user-profile .lp-profile-left,.learnpress-v3:not(.nofixcss) .lp-user-profile .lp-profile-left{min-width:unset !important;position:static !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{min-height:unset;padding-left:0;display:flex}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left{border:none !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img{border-radius:50%}.learnpress-v4 .lp-course-curriculum,.learnpress-v3 .lp-course-curriculum{--lp-primary-color:var(--thim-body-primary-color,inherit)}.learnpress-v4 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v3 .lp-course-curriculum .section-count-items{font-family:var(--thim-font-title-font-family,inherit)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{color:inherit}.learnpress-v4 .lp-course-curriculum .course-item-ico,.learnpress-v3 .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{column-gap:8px}.learnpress-v4 .lp-course-curriculum .course-section__title,.learnpress-v3 .lp-course-curriculum .course-section__title{font-size:1.1em}.learnpress-v4 .lp-course-curriculum .section-toggle,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .section-toggle,.learnpress-v3 .lp-course-curriculum .section-count-items{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 #popup-sidebar .course-section-header,.learnpress-v4 #popup-sidebar .lp-course-curriculum .course-item,.learnpress-v3 #popup-sidebar .course-section-header,.learnpress-v3 #popup-sidebar .lp-course-curriculum .course-item{padding-left:16px;padding-right:16px}.learnpress-v4 .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0}.learnpress-v4 .lp-course-curriculum .course-section{border-width:0 0 1px 0}.learnpress-v4 .lp-course-curriculum .course-section:last-child{border-width:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:0 0 8px 0}.learnpress-v4 .lp-course-curriculum .course-item{padding-left:0;padding-right:0}.learnpress-v4 .lp-course-curriculum .course-section{margin-bottom:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:24px 0 24px 0}.assignments .lp-icon-file-alt:before{content:\"\\e929\"}.eduma:not(.nofixcss) .learnpress #learn-press-profile.lp-user-profile .learn-press-filters{padding-bottom:0 !important;overflow-y:visible}.eduma:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{flex-direction:column}.eduma .lp-course-curriculum .course-section-header{padding:var(--thim-ekit-padding-lesson,12px 0)}.eduma .sc_heading+.lp-course-curriculum .lp-course-curriculum__title{display:none}.ivy-school:not(.nofixcss) .lp-user-profile .lp-user-profile-avatar img{border-radius:0}.ivy-school.single-lp_course .course-curriculum{border:0}.ivy-school .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0;--lp-primary-color:var(--thim-body-primary-color,inherit)}.ivy-school .lp-course-curriculum .course-section-header .course-section__title{font-family:var(--thim-font-title-font-family,inherit)}.ivy-school .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.course-builder .lp-course-curriculum{--lp-white-grey:#f2f2f2;--lp-border-color:#e6e6e6}.course-builder .lp-course-curriculum .course-sections{border:1px solid var(--lp-border-color,#e6e6e6);border-radius:var(--lp-border-radius,5px);overflow:hidden}.course-builder .lp-course-curriculum .course-section{margin:0;border-radius:0;border-width:1px 0 0 0}.course-builder .lp-course-curriculum .course-section:first-child{border:0}.course-builder #popup-sidebar .lp-course-curriculum{--lp-border-radius:0}.course-builder .course-tab-panels .lp-course-curriculum .course-sections{border:0}.course-builder .course-tab-panels .lp-course-curriculum .course-section-header,.course-builder .course-tab-panels .lp-course-curriculum .course-item{padding-left:0;--lp-white-grey:trasparent;padding-right:0}.eduma .lp-course-curriculum .course-item-order.lp-hidden,.coaching .lp-course-curriculum .course-item-order.lp-hidden{display:inline-block !important}.eduma .lp-course-curriculum .course-section__title,.coaching .lp-course-curriculum .course-section__title{text-transform:uppercase}.demo-marketplace .thim-ekit-tablist .lp-course-curriculum__title,.demo-ecommerce .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-marketplace .thim-ekit-tablist .course-section-header,.demo-ecommerce .thim-ekit-tablist .course-section-header{background-color:var(--thim-breacrumb-bg-color)}.demo-marketplace .thim-ekit-tablist .course-section__items,.demo-ecommerce .thim-ekit-tablist .course-section__items{background-color:var(--lp-fix-bg-section-item,#f5f7f8)}.demo-marketplace .style-marketplace-2,.demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#0f1c44;--lp-fix-bg-section-item:transparent}.thim-ekit-light-mode .demo-marketplace .style-marketplace-2,.thim-ekit-light-mode .demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#f4f4f4}.demo-ecommerce .course-section-header{--thim-breacrumb-bg-color:#e1e9fd}.demo-online-learning .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-online-learning .thim-ekit-tablist .course-section{margin-bottom:8px;border:0}.demo-online-learning .thim-ekit-tablist .course-section-header{background-color:#dfefff;border-radius:8px 8px 8px 8px}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{border:1px solid var(--thim-border-color);margin-bottom:10px;padding-left:20px;padding-right:20px}.business-consulting .lp-course-curriculum__title,.demo-business-v2 .lp-course-curriculum__title,.business-coaching .lp-course-curriculum__title,.demo-healthy-coaching .lp-course-curriculum__title{display:none}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border-width:1px;margin-bottom:15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child{border-width:1px;margin-bottom:0}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:20px 15px 5px 15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-item,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-left:15px;padding-right:15px}.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header{background-color:var(--thim-bg-color,#f5f5f5);padding:10px 15px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:15px 20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section__items{padding-left:20px;padding-right:20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-left:0;padding-right:0}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0;border-radius:5px}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{background:#fff;padding:10px 15px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:1.875rem;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses .lp-content-area.has-sidebar{display:flex;gap:32px;align-items:flex-start}@media(max-width:768px){.lp-archive-courses .lp-content-area.has-sidebar{display:inherit}}.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:33.33%}@media(max-width:1200px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:50%}}@media(max-width:600px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:100%}}.lp-archive-courses .lp-content-area .lp-main-content{flex:1}.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:25%}@media(max-width:768px){.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:100%}}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:\"\";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:var(--lp-color-white,#fff)}.lp-archive-courses .learn-press-courses-header{margin-bottom:16px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.8)}.learn-press-courses{clear:both;margin:0 -16px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.learn-press-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.learn-press-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.learn-press-courses .course-item:hover .course-wishlist{opacity:1}.learn-press-courses .course-item .course-wishlist.filled{opacity:1}.learn-press-courses .course-content{position:relative;border-top:0}.learn-press-courses .course-content .course-permalink{display:block;border:0;text-decoration:none;color:inherit;line-height:1.3}.learn-press-courses .course-content .course-review{display:none}.learn-press-courses .course-content .course-tags{display:inline-block}.learn-press-courses .course-content .course-info>span{display:block}.learn-press-courses .course-content .course-info .course-price .free,.learn-press-courses .course-content .course-info .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .course-content .course-info .course-price .origin-price{margin-right:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.learn-press-courses .course-content .course-short-description{display:-webkit-box;overflow:hidden;margin-bottom:16px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.learn-press-courses .course-content .separator{display:none}.learn-press-courses .course-thumbnail{overflow:hidden;position:relative;border-radius:var(--lp-border-radius,5px)}.learn-press-courses .course-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.learn-press-courses .course-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:var(--lp-color-white,#fff);cursor:pointer}.learn-press-courses .course-thumbnail .course-wishlist::before{font-family:\"lp-icon\";content:\"\\f004\"}.learn-press-courses .course-thumbnail .course-wishlist .course-wishlist__btn{display:none}.learn-press-courses .course-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.learn-press-courses .course-thumbnail:hover::before{opacity:1}.learn-press-courses .course-thumbnail:hover a img{transform:scale(1.05)}.learn-press-courses .course-thumbnail:hover .course-wishlist{opacity:1}.learn-press-courses .course-thumbnail a{display:block;overflow:hidden}.learn-press-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.learn-press-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1);max-width:unset !important}.learn-press-courses .wap-course-title{margin:0 0 12px 0;padding:0;display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.15);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .wap-course-title a:hover{color:var(--lp-primary-color)}.learn-press-courses .course-permalink:hover{color:var(--lp-primary-color)}@media(min-width:769px){.learn-press-courses .course-summary-content .course-info-left{width:calc(100% - 340px)}}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value span,.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value>div{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{height:auto}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item:last-child{margin-right:0}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-right:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:768px){.learn-press-courses .course-summary-content{width:100%}}.learn-press-courses .course-price .free{color:#3ab500}.learn-press-courses .course{width:25%;margin:0 0 32px 0;box-shadow:none;list-style:none}.learn-press-courses .course-info{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.learn-press-courses .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:12px}.learn-press-courses .course-instructor-category>div>*{display:inline;vertical-align:middle}.learn-press-courses .course-instructor-category label{font-size:inherit;font-weight:inherit}.learn-press-courses .course-instructor-category a{font-weight:var(--lp-font-weight-link,600);text-decoration:none;color:inherit}.learn-press-courses .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-courses .course-wrap-meta{display:flex;padding:0;margin-bottom:12px;gap:20px;flex-wrap:wrap;row-gap:8px}.learn-press-courses .course-wrap-meta .meta-item{text-transform:capitalize;display:flex;gap:8px}.learn-press-courses .course-wrap-meta .meta-item::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.learn-press-courses .course-wrap-meta .meta-item>div{display:inline-block}.learn-press-courses .course-wrap-meta .meta-item-level::before{content:\"\\f012\"}.learn-press-courses .course-wrap-meta .meta-item-duration::before{content:\"\\f017\"}.learn-press-courses .course-wrap-meta .meta-item-lesson::before{content:\"\\f15b\"}.learn-press-courses .course-wrap-meta .meta-item-quiz::before{content:\"\\f12e\"}.learn-press-courses .course-wrap-meta .meta-item-student::before{content:\"\\f501\"}.learn-press-courses .course-wrap-meta .meta-item-address::before{content:\"\\e91b\"}.learn-press-courses .course-content .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.learn-press-courses .course-content .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;border-bottom:1px solid var(--lp-border-color,#e2e0db);flex-wrap:wrap;justify-content:flex-end;padding-bottom:32px}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;align-items:start}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{padding:0 0 0 24px}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{padding:16px 0}}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:var(--lp-color-white,#fff);background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-excerpt{width:100%}.learn-press-courses[data-layout=list] .course-content .course-info{width:100%;display:flex;justify-content:space-between}@media(max-width:520px){.learn-press-courses[data-layout=list] .course-content .course-info{width:100%}}.learn-press-courses[data-layout=list] .course-content .course-info .course-students{display:none}.learn-press-courses[data-layout=list] .course-thumbnail{width:35%}.learn-press-courses[data-layout=list] .course-content{width:65%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-thumbnail,.learn-press-courses[data-layout=list] .course-content{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{padding:0 16px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:100%}}.learn-press-courses[data-layout=grid] .wp-block-learnpress-course-item-template,.learn-press-courses[data-layout=grid] .course-item,.learn-press-courses.lp-courses-related .wp-block-learnpress-course-item-template,.learn-press-courses.lp-courses-related .course-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-level,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-quiz{display:none}.learn-press-courses[data-layout=grid] .course-content,.learn-press-courses.lp-courses-related .course-content{width:100%;padding:20px;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-info,.learn-press-courses.lp-courses-related .course-content .course-info{flex-direction:column;align-items:flex-start;gap:12px}.learn-press-courses[data-layout=grid] .course-content .course-info .course-readmore,.learn-press-courses.lp-courses-related .course-content .course-info .course-readmore{width:100%;text-align:center}.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-short-description,.learn-press-courses.lp-courses-related .course-content .course-excerpt,.learn-press-courses.lp-courses-related .course-content .course-short-description{display:none}.learn-press-courses[data-layout=grid] .learn-press-message,.learn-press-courses.lp-courses-related .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-layout=grid] .course-thumbnail,.learn-press-courses.lp-courses-related .course-thumbnail{border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.learn-press-courses[data-size=\"3\"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size=\"3\"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-list-courses-default{position:relative}.lp-list-courses-default .lp-skeleton-animation{clear:both;padding:5px 0 0 0}.lp-courses-bar{display:flex;width:100%;justify-content:space-between;gap:12px;margin-bottom:32px;flex-wrap:wrap}.lp-courses-bar .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .lp-courses-bar .courses-order-by{background-position-x:calc(100% - 10px)}.lp-courses-bar .courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar>*{display:flex}.lp-courses-bar .search-courses{display:flex;flex:1;margin-bottom:0}.lp-courses-bar .search-courses input{width:100%;max-width:240px;margin:0 4px 0 0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.lp-courses-bar .search-courses input::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses input::-moz-placeholder{color:#999}.lp-courses-bar .search-courses input:-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses input:-moz-placeholder{color:#999}.lp-courses-bar .search-courses input::placeholder{color:#999}.lp-courses-bar .search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.lp-courses-bar .search-courses button i{font-size:1.2em;line-height:1.2}.lp-courses-bar .search-courses button:focus{outline:0}.lp-courses-bar .search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .switch-layout{align-items:center;justify-content:center}@media(max-width:768px){.lp-courses-bar .switch-layout{display:none}}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{margin:0;cursor:pointer;padding:8px 12px}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:6px;color:var(--lp-color-base,#333);font-family:\"lp-icon\";line-height:1.2;width:1em}.lp-courses-bar .switch-layout .switch-btn.grid{border-radius:var(--lp-border-radius,5px) 0 0 var(--lp-border-radius,5px);border:1px solid var(--lp-border-color,#e2e0db);border-right:0}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:\"\\f009\"}.lp-courses-bar .switch-layout .switch-btn.list{border-radius:0 var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0;border:1px solid var(--lp-border-color,#e2e0db);border-left:0}.lp-courses-bar .switch-layout .switch-btn.list::before{content:\"\\f03a\"}.lp-courses-bar .course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.lp-courses-bar .course-filter-btn-mobile{display:none}}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}.lp-courses-bar .search-courses input{min-width:240px;max-width:unset}}.switch-layout input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp_allow_repurchase_select>ul{padding:0;list-style:none}.lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp_allow_repurchase_select>a{display:inline-block;margin-top:10px;color:var(--lp-color-white,#fff);background-color:#222}.lp-single-offline-course .lp-single-offline-course-main{display:flex;gap:30px;margin-bottom:80px}.lp-single-offline-course .course-price .free{color:#3ab500}.lp-single-offline-course .course-price .origin-price{text-decoration:line-through;opacity:.6;margin-right:4px}.lp-single-offline-course__left{width:70%}.lp-single-offline-course__left>div{margin-bottom:32px}.lp-single-offline-course__left .learn-press-breadcrumb{display:flex;list-style:none;flex-wrap:wrap;gap:5px;font-size:var(--lp-font-size-base);align-items:center;margin-bottom:8px;padding:0}.lp-single-offline-course__left .learn-press-breadcrumb li{list-style:none;padding:0;margin:0}.lp-single-offline-course__left .course-title{display:block;font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 12px 0}.lp-single-offline-course__left .course-img img{width:100%}.lp-single-offline-course__left .lp-single-course-offline-info-one{margin-bottom:12px}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta{display:inline;line-height:1.4;margin-left:12px;padding-left:12px;border-left:1px solid #e2e0db}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta:first-child{margin:0;padding:0;border:0}.lp-single-offline-course__left .lp-single-course-offline-info-one .lp-item-wishlist.active{color:var(--lp-primary-color)}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info{display:inline-block}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info .ico-star{display:inline-block;vertical-align:sub;margin-right:4px}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info svg{height:22px}.lp-single-offline-course__left .instructor-description{margin-top:16px}.lp-single-offline-course__left .course-features ul,.lp-single-offline-course__left .course-target ul,.lp-single-offline-course__left .course-requirements ul{margin:0 0 0 20px;padding:0}.lp-single-offline-course__left .instructor-social{display:flex;gap:8px;margin-top:30px}.lp-single-offline-course__left .instructor-social a{width:37px;height:37px;display:inline-flex;align-items:center;justify-content:center;background-color:#f1f2f8;border-radius:50%}.lp-single-offline-course__left .instructor-social a:hover{background-color:var(--lp-primary-color)}.lp-single-offline-course__left .instructor-social a:hover i{color:#fff}.lp-single-offline-course__left .instructor-social a .lp-icon-facebook{color:#216bf6}.lp-single-offline-course__left .instructor-social a .lp-icon-twitter{color:#169df0}.lp-single-offline-course__left .instructor-social a .lp-icon-youtube-play{color:#ff0200}.lp-single-offline-course__left .instructor-social a .lp-icon-linkedin{color:#0078b7}.lp-single-offline-course__left .instructor-social a i{font-size:18px}.lp-single-offline-course__left .item-title{margin-bottom:30px}.lp-single-offline-course__left>img{margin-bottom:30px}.lp-single-offline-course__right{width:30%;position:relative}.lp-single-offline-course__right__sticky{position:sticky;top:0}.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{border:1px solid #e2e0db;padding:30px;margin-bottom:60px}@media(max-width:767px){.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{margin-bottom:30px}}.lp-single-offline-course .info-metas .info-meta-item,.lp-single-offline-course .course-featured-review .info-meta-item{display:flex;justify-content:space-between;border-bottom:1px solid #e2e0db;padding-bottom:16px;margin-bottom:16px;font-size:var(--lp-font-size-base)}.lp-single-offline-course .info-metas .info-meta-item:nth-last-of-type(2),.lp-single-offline-course .course-featured-review .info-meta-item:nth-last-of-type(2){border:0;padding-bottom:0;margin-bottom:0}.lp-single-offline-course .info-metas .info-meta-left,.lp-single-offline-course .course-featured-review .info-meta-left{display:inline-flex;align-items:center;gap:8px}.lp-single-offline-course .info-metas .info-meta-left>span,.lp-single-offline-course .course-featured-review .info-meta-left>span{min-width:16px}@media(min-width:992px){.lp-single-offline-course .info-metas.lp-is-mobile,.lp-single-offline-course .course-featured-review.lp-is-mobile{display:none}}@media(max-width:991px){.lp-single-offline-course .info-metas.lp-is-pc,.lp-single-offline-course .course-featured-review.lp-is-pc{display:none}}.lp-single-offline-course form.purchase-course,.lp-single-offline-course form.enroll-course,.lp-single-offline-course form.retake-course{width:100%}.lp-single-offline-course .course-buttons{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.lp-single-offline-course .course-buttons .lp-button{padding:12px 16px;border-radius:var(--lp-border-radius,3px);font-size:var(--button--font-size);line-height:1.5em;font-weight:600;width:100%}.lp-single-offline-course .course-buttons .lp-button.button{border:0}.lp-single-offline-course .course-buttons a.course-btn-extra{border-color:var(--lp-primary-color);color:var(--lp-primary-color)}.lp-single-offline-course .course-buttons a.course-btn-extra:focus,.lp-single-offline-course .course-buttons a.course-btn-extra:hover{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .course-buttons .button-purchase-course{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .featured-review__title{font-weight:bold;font-size:1.4rem;margin-top:10px}.lp-single-offline-course .course-featured-review{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;position:relative}.lp-single-offline-course .course-featured-review::before{background-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='56' height='56' viewBox='0 0 56 56' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Crect width='56' height='56' rx='28' fill='%23F2F1F8'\u002F%3E%3Cpath d='M17.425 40.5325C17.3136 40.5325 17.2015 40.5061 17.0958 40.4518C16.7823 40.2903 16.6073 39.9215 16.6673 39.5504L18.2548 31.142H12.7691C12.3442 31.142 12 30.7678 12 30.3058V15.5028C12 15.0409 12.3442 14.6666 12.7691 14.6666H25.8927C26.3176 14.6666 26.6618 15.0409 26.6618 15.5028V30.3051C26.6618 30.5046 26.5961 30.6979 26.4761 30.8501L18.0084 40.2406C17.8584 40.43 17.6442 40.5325 17.425 40.5325ZM13.5389 29.4689H19.1731C19.4009 29.4689 19.6165 29.5783 19.7629 29.7678C19.9093 29.9572 19.9707 30.2072 19.9307 30.451L18.6739 36.8314L25.1243 29.9953V16.3398H13.5389V29.4689Z' fill='%23121212'\u002F%3E%3Cpath d='M34.7609 40.5325C34.6495 40.5325 34.5374 40.5061 34.4317 40.4518C34.1182 40.2903 33.9433 39.9215 34.0033 39.5496L35.5907 31.1413H30.105C29.6801 31.1413 29.3359 30.767 29.3359 30.3051V15.5028C29.3359 15.0409 29.6801 14.6666 30.105 14.6666H43.2286C43.4329 14.6666 43.6285 14.7551 43.7728 14.912C43.917 15.0688 43.9977 15.2815 43.9977 15.5036V30.3058C43.9977 30.5054 43.9313 30.6987 43.8113 30.8509L35.3436 40.2414C35.1937 40.4308 34.9787 40.5333 34.7595 40.5333L34.7609 40.5325ZM30.8748 29.4689H36.509C36.7368 29.4689 36.9525 29.5783 37.0989 29.7678C37.2452 29.9572 37.3067 30.2072 37.2667 30.451L36.0099 36.8306L42.4603 29.9953V16.3398H30.8755L30.8748 29.4689Z' fill='%23121212'\u002F%3E%3C\u002Fsvg%3E%0A\");content:\"\";width:56px;height:56px;position:absolute;top:-25px}.lp-single-offline-course .featured-review__stars{order:3;color:var(--lp-primary-color)}.lp-single-offline-course .lp-list-courses-related .section-title{margin-bottom:40px}@media(max-width:991px){.lp-single-offline-course .lp-single-offline-course-main{flex-direction:column;margin-bottom:0}.lp-single-offline-course__left,.lp-single-offline-course__right{width:100%}}@media(max-width:767px){.lp-single-offline-course__left .lp-instructor-info{flex-direction:column}}.lp-archive-courses .course-detail-info{padding:28px 0 24px 0;color:var(--lp-color-white,#fff);background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info .course-title{margin:0 0 24px 0;border-bottom:1px solid rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);padding-bottom:24px}@media(min-width:769px){.lp-archive-courses .course-detail-info{overflow-x:hidden}.lp-archive-courses .course-detail-info .course-title,.lp-archive-courses .course-detail-info .course-meta-secondary,.lp-archive-courses .course-detail-info .course-meta-primary{padding-right:320px}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:\"\";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}}.lp-archive-courses .course-detail-info .course-meta-secondary{margin-bottom:0}.lp-archive-courses .course-meta__pull-left{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;text-transform:capitalize;align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\"}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:8px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%;display:block}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:\"\\f017\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:\"\\f012\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:\"\\f0c5\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:\"\\f12e\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:\"\\f501\"}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:var(--lp-color-accent-1);font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300;line-height:1.5;display:block}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:var(--lp-color-white,#fff);text-transform:capitalize;text-decoration:none}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 4px}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column;justify-content:space-between}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}.lp-archive-courses .course-meta-primary{margin-bottom:20px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-180px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:var(--lp-color-white,#fff);background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:\"lp-icon\";font-size:1em;content:\"\\f004\"}.lp-archive-courses .course-summary-sidebar__inner>div{padding:20px;background:var(--lp-color-white,#fff)}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-weight:300;line-height:1.5em}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.lp-archive-courses .courses-btn-load-more{display:flex;align-items:center;gap:5px}.lp-archive-courses .course-wishlist:before{font-family:\"lp-icon\"}.lp-archive-courses .lp-course-curriculum ul{padding:0}.lp-single-course__header{background-color:#f1f2f8}.lp-single-course__header__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding);padding-top:40px;padding-bottom:40px}@media(max-width:767px){.lp-single-course__header__inner{padding-top:20px;padding-bottom:20px}}@media(min-width:992px){.lp-single-course__header__inner>*{width:calc(100% - 440px)}}.lp-single-course__header .learn-press-breadcrumb{display:flex;list-style:none;gap:4px;flex-wrap:wrap;margin-bottom:8px;padding:0}.lp-single-course__header .course-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 24px 0}@media(max-width:767px){.lp-single-course__header .course-title{margin:0 0 16px 0}}.lp-single-course__header .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:40px}@media(max-width:767px){.lp-single-course__header .course-instructor-category{margin-bottom:20px}}.lp-single-course__header .course-instructor-category>div>*{display:inline;vertical-align:middle}.lp-single-course__header .course-instructor-category label{font-size:inherit;font-weight:inherit}.lp-single-course__header .course-instructor-category a{text-decoration:none;color:inherit}.lp-single-course__header .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.lp-single-course__header .lp-single-course-info-one{display:flex;column-gap:20px;row-gap:8px;flex-wrap:wrap}.lp-single-course__header .lp-single-course-info-one .star-info{display:inline-flex;align-items:center;gap:4px;padding-right:20px;position:relative}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:\"\";right:0;left:auto;width:1px;height:20px;position:absolute;background-color:var(--lp-border-color,#e2e0db)}@media(max-width:500px){.lp-single-course__header .lp-single-course-info-one .star-info{padding-right:0}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:none}}.lp-single-course__header .lp-single-course-info-one .ico-star,.lp-single-course__header .lp-single-course-info-one .lp-review-svg-star{display:inline-flex;align-items:center}.lp-single-course .lp-single-course-main{padding:40px 0 80px;display:flex;column-gap:60px;row-gap:30px;flex-wrap:wrap}@media(max-width:1500px){.lp-single-course .lp-single-course-main{column-gap:30px}}@media(max-width:991px){.lp-single-course .lp-single-course-main{flex-direction:column-reverse;padding:40px 0}}.lp-single-course .lp-single-course-main__left{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 410px)}}@media(min-width:1501px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 440px)}}.lp-single-course .lp-single-course-main__left>div{margin-bottom:40px}@media(max-width:767px){.lp-single-course .lp-single-course-main__left>div{margin-bottom:30px}}.lp-single-course .lp-single-course-main__left>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 20px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}@media(max-width:767px){.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 16px 0}}.lp-single-course .lp-single-course-main__left .extra-box ul{margin:0 0 0 20px;padding:0}.lp-single-course .lp-single-course-main__left .comments-area{width:100%;max-width:100%;margin:0}.lp-single-course .lp-single-course-main__right{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__right{width:380px;margin-top:-280px}}.lp-single-course .lp-single-course-main__right__inner{position:sticky;top:0;background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .lp-single-course-main__right__inner>div{margin-bottom:20px}.lp-single-course .lp-single-course-main__right__inner>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-item{display:flex;gap:4px;margin-bottom:12px}.lp-single-course .lp-single-course-main .info-metas .info-meta-item:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-left{display:flex;gap:8px;align-items:center}.lp-single-course .lp-single-course-main .info-metas i{color:var(--lp-primary-color,#ffb606)}.lp-single-course .lp-single-course-main .course-img{margin-bottom:20px;overflow:hidden;margin:-20px -20px 20px -20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .lp-single-course-main .course-img img{max-width:100%;display:block}.lp-single-course .lp-single-course-main .course-price{display:block;margin-bottom:20px}.lp-single-course .lp-single-course-main .course-price .free{color:#3ab500;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-single-course-main .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:var(--lp-font-size-base,1em);margin-right:4px}.lp-single-course .lp-single-course-main .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.lp-single-course .lp-single-course-main .course-buttons{display:flex;flex-direction:column;gap:8px}.lp-single-course .lp-single-course-main .course-buttons form,.lp-single-course .lp-single-course-main .course-buttons .lp-button{width:100%}.lp-single-course .lp-single-course-main .course-buttons .lp-button{background-color:var(--lp-primary-color,#ffb606);border:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.lp-single-course .lp-single-course-main .course-buttons .lp-button:hover{background-color:var(--lp-secondary-color);border-color:var(--lp-secondary-color)}.lp-single-course .lp-single-course-main .course-buttons .learn-press-message{margin:0}.lp-single-course .lp-single-course-main .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-list-courses-related{margin:0 0 40px 0}@media(max-width:767px){.lp-single-course .lp-list-courses-related{margin:0 0 20px 0}}.lp-single-course .lp-list-courses-related .section-title{margin:0 0 40px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}.lp-single-course .course-detail-info__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-single-course .course-detail-info .course-meta{gap:16px;flex-wrap:wrap}@media(min-width:769px){.lp-single-course .course-detail-info .course-meta__pull-left{width:calc(100% - 340px);max-width:100%;margin:0}}.lp-single-course .course-tabs .course-faqs__title,.lp-single-course .course-tabs .course-material__title{display:none}.lp-single-course .course-summary-sidebar__inner{background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*{padding:0;margin-bottom:20px}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*:last-child{margin-bottom:0}.lp-single-course .course-summary-sidebar .course-img{margin:-20px -20px 20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .course-summary-sidebar .course-img img{max-width:100%;width:100%;height:auto}.lp-single-course .course-summary-sidebar .course-price{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:700}.lp-single-course .course-summary-sidebar .course-price .free{color:#3ab500}.lp-single-course .course-summary-sidebar .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);margin-right:4px;font-weight:normal}.lp-single-course button{font-size:1em}.course-featured{padding:4px 12px;border-radius:var(--lp-border-radius,5px);background-color:#ff3b30;color:white;text-transform:uppercase;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:var(--lp-font-weight-link,600);margin-bottom:12px;display:inline-block}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:30px;margin-top:30px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:1.125em;font-weight:600}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .origin-price{margin-right:10px;font-size:1.125em;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:1.5em}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px;text-align:center}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2em;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color)}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-style:italic}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:\"‘‘\";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:.75em;line-height:1}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-students::before{font-family:\"lp-icon\";content:\"\"}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap;gap:50px}@media(max-width:767px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:20px}}@media(max-width:560px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{grid-template-columns:repeat(2,1fr)}}.course-meta.course-meta-primary .course-meta__pull-left .meta-item{margin-right:0 !important}@media(max-width:560px){.course-meta.course-meta-primary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left{gap:16px}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-right:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta.two-columns .course-meta{flex:1}.lp-single-course .comment-form .comment-form-url,.lp-single-course .comment-form .comment-form-email,.lp-single-course .comment-form .comment-form-author,.lp-single-course .comment-form .comment-form-comment,.wp-block-learnpress-course-comment .comment-form .comment-form-url,.wp-block-learnpress-course-comment .comment-form .comment-form-email,.wp-block-learnpress-course-comment .comment-form .comment-form-author,.wp-block-learnpress-course-comment .comment-form .comment-form-comment{display:flex;flex-direction:column;gap:1rem}.lp-single-course .comment-form input[type=url],.lp-single-course .comment-form input[type=text],.lp-single-course .comment-form input[type=email],.lp-single-course .comment-form textarea,.wp-block-learnpress-course-comment .comment-form input[type=url],.wp-block-learnpress-course-comment .comment-form input[type=text],.wp-block-learnpress-course-comment .comment-form input[type=email],.wp-block-learnpress-course-comment .comment-form textarea{padding:12px 20px;outline:0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.lp-single-course .comment-form input[type=submit],.wp-block-learnpress-course-comment .comment-form input[type=submit]{border-radius:var(--lp-border-radius,5px)}.course-summary-sidebar{--lp-button-background-color:#28303d;--lp-button-color:#d1e4dd;position:relative}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .has-global-padding{padding-right:0;padding-left:0}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500;background-color:var(--lp-button-background-color);color:var(--lp-button-color);border:0}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1em;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:1em;font-weight:300;line-height:1em;text-align:right}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}.lp-course-buttons:empty{display:none}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:var(--lp-primary-color);font-size:1.3em;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:var(--lp-primary-color);font-size:1.3em;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 10px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top;width:100%}.course-sidebar-preview .course-wishlist{float:none}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{color:#666;font-size:1em;font-weight:300;margin-bottom:0}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-weight:300}.course-sidebar-preview>*:last-child{margin-bottom:0}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-left:1px solid var(--lp-border-color,#e2e0db);padding-left:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-left:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none;color:var(--lp-button-background-color)}.learnpress-page:hover{text-decoration:none}.lp-sidebar-toggle__close .content-item-wrap .quiz-buttons.align-center .button-left.fixed{margin-left:0 !important}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}#popup-course{display:flex;position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0;background:var(--lp-bg-color-lesson,#fff)}#popup-course .wp-block-learnpress-item-close .back-course{padding:24px}#popup-course .back-course{padding-left:24px;padding-right:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px;column-gap:10px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column;gap:5px}#popup-course .popup-header__inner.can-finish-course .items-progress{display:none}}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid var(--lp-border-color,#e2e0db);border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid var(--lp-border-color,#e2e0db);line-height:2.25em}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:.8em;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #ebf8e5;border-radius:5px}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);align-items:center;-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}#popup-header .course-title{margin:0;padding:0;font-size:var(--lp-font-size-base,1em);letter-spacing:unset}#popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-decoration:none}#popup-header .course-title a:hover{color:var(--lp-primary-color)}#popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}#popup-header .number{padding-right:10px;color:#fff;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300}#popup-header .lp-button{display:flex;position:relative;height:auto;border:0;color:#fff;background:var(--lp-primary-color);white-space:nowrap;padding:6px 15px;font-size:1rem}#popup-header .lp-button:hover{opacity:.8}#popup-header .lp-button-back{float:right;margin:9px 10px}#popup-header .lp-button-back button::before,#popup-header .lp-button-back button::after{content:\"\"}#popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-sidebar .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}#popup-sidebar .search-course input[name=s]{display:block;width:100%;padding-left:20px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;font-size:1rem}#popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-sidebar .search-course input[name=s]:focus{outline:0}#popup-sidebar .search-course button{position:absolute;top:0;right:12px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none;font-size:1rem}#popup-sidebar .search-course button:focus{outline:0}#popup-sidebar .search-course button i{color:var(--lp-color-accent,#666);width:24px;display:flex;justify-content:center}#popup-sidebar .search-course button.clear{display:none}#popup-sidebar .search-course button.clear::before{content:\"\\f00d\"}#popup-sidebar .search-course.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}#popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-sidebar .course-curriculum::-webkit-scrollbar{width:8px}#popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-sidebar .section.section-empty .section-header{margin:0}#popup-sidebar .section-header{position:sticky;z-index:1000;top:0;padding:20px 16px;cursor:pointer;background-color:var(--lp-bg-color-lesson,#fff)}#popup-sidebar .section-header .section-title .show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f0d7\"}#popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-sidebar .section-header .section-toggle i{color:var(--lp-color-accent,#666)}#popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-sidebar .section-content{margin-bottom:0}#popup-sidebar .curriculum-more{padding-right:16px;padding-left:16px}#popup-sidebar .course-item>span{display:none}#popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-sidebar .course-item::after{content:\"\"}#popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-sidebar .lp-course-curriculum .course-section{--lp-border-radius:0;border-left:0}#popup-sidebar .lp-course-curriculum .lp-course-curriculum__title,#popup-sidebar .lp-course-curriculum .course-curriculum-info,#popup-sidebar .lp-course-curriculum .course-section__description{display:none}#popup-sidebar .lp-course-curriculum .course-item.current:before{background:var(--lp-primary-color,#ffb606)}#popup-sidebar .lp-course-curriculum .course-item__content{flex-direction:column;row-gap:0}#popup-sidebar .lp-course-curriculum .course-item__right{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}#popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-content .lp-button{position:relative;margin:0;padding:8px 25px;border-color:var(--lp-border-color,#e2e0db)}#popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-content .lp-button.instant-check .instant-check__icon::before{font-family:\"lp-icon\";content:\"\\f058\"}#popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:var(--lp-white-grey,#f7f7fb);color:var(--lp-color-base,#333);white-space:nowrap;text-transform:none}@media(max-width:600px){#popup-content .lp-button.instant-check .instant-check__info{white-space:normal;width:90vw}}#popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible}#popup-content .lp-button.instant-check.loading::before{display:none}#popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:\"\\f110\"}#popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;border-color:transparent;color:#fff;background:#3db748;align-items:center;justify-content:center;float:left}#popup-content .lp-button.completed i{margin-left:9px;font-size:.8em}#popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-content.fixed-quiz-status .quiz-status>div{padding:0}#popup-content::-webkit-scrollbar{width:8px}#popup-content::-webkit-scrollbar-thumb{background:#ccc}#popup-content::-webkit-scrollbar-track{background:#f5f5f5}#popup-footer{position:fixed;z-index:99;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:auto;margin:0 auto;border-top:1px solid #ebebeb;background:var(--lp-bg-color-lesson,#fff);-webkit-transition:left .25s;-moz-transition:left .25s;-ms-transition:left .25s;-o-transition:left .25s;transition:left .25s}@media(max-width:1024px){#popup-footer{width:auto;padding:0 15px}}#popup-footer .course-item-nav{justify-content:space-between}#popup-footer .course-item-nav .prev,#popup-footer .course-item-nav .next{display:flex;line-height:3.125em}#popup-footer .course-item-nav .prev a,#popup-footer .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666)}#popup-footer .course-item-nav .prev::before,#popup-footer .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}#popup-footer .course-item-nav .prev:hover a,#popup-footer .course-item-nav .prev:hover::before,#popup-footer .course-item-nav .next:hover a,#popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-footer .course-item-nav .next::before{margin-left:10px;content:\"\\f0da\"}#popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-footer .prev::before{margin-right:10px;content:\"\\f0d9\"}#popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-footer .prev .course-item-nav__name{left:15px}}#popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){#popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}#sidebar-toggle:after{display:none}#sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}#sidebar-toggle:focus{border:0;outline:0}.course-item-popup #tab-curriculum{display:block}.course-item-popup .course-curriculum ul.curriculum-sections{z-index:9}.course-item-popup .lp-course-curriculum .course-section .course-item__content{flex-direction:column;row-gap:4px}body.course-item-popup{overflow-y:hidden}@media(max-width:1200px){body.course-item-popup #learn-press-course-curriculum{width:300px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum{margin-right:0}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .course-curriculum{width:200px}}@media(max-width:1300px){body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .items-progress,body.course-item-popup #learn-press-course-curriculum .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}@media(max-width:1300px){body.course-item-popup #content-item-nav{left:300px}}@media(max-width:768px){body.course-item-popup #content-item-nav{left:200px}}@media(max-width:1300px){body.course-item-popup .section-desc{display:none}}@media(max-width:768px){body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #sidebar-toggle::before{content:\"\\f0da\"}body.lp-sidebar-toggle__close #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-header,body.lp-sidebar-toggle__close #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #sidebar-toggle::before{content:\"\\f0da\"}body:not(.lp-sidebar-toggle__open) #popup-sidebar{flex:0}}@media screen and (max-width:480px){#popup-header,#popup-footer{width:100%}.learnpress-v4 #popup-header,.lp-4 #popup-header,.learnpress-v4 #popup-footer,.lp-4 #popup-footer{width:auto}.learnpress-v4.starkid #popup-header,.learnpress-v4.starkid #popup-footer{width:100%}#popup-content{min-width:100vw}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{left:300px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{left:300px}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;--lp-item-padding:60px;padding-top:var(--lp-item-padding);padding-bottom:var(--lp-item-padding)}@media(max-width:1024px){.content-item-wrap{width:100%;--lp-item-padding:40px}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);font-weight:700}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap .content-item-summary:after{clear:both;content:\"\";display:block}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description .wp-video,.content-item-wrap .content-item-description .mejs-container{margin-bottom:15px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:10px;margin-bottom:15px;letter-spacing:unset}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-weight:300}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center;gap:10px}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:999;bottom:0;left:50%;width:100%;max-width:792px;height:auto;margin-left:237px;transform:translateX(-50%);background:#fff;padding-bottom:10px}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .questions-pagination .nav-links{text-align:center;display:flex;justify-content:center;gap:4px;margin-top:6px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:10px 15px;margin:0;color:var(--lp-color-base,#333);background-color:transparent;font-weight:normal;border:1px solid var(--lp-border-color,#e2e0db);line-height:1;border-radius:var(--lp-border-radius,5px)}.content-item-wrap .questions-pagination .nav-links .page-numbers.dots{border:0}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}@media(max-width:575px){.content-item-wrap .questions-pagination .nav-links{margin-top:10px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:5px 10px}}.course-curriculum .section-title{position:relative;margin-bottom:0}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:var(--lp-border-color,#e2e0db)}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}.social-share-toggle{position:relative;display:flex;gap:20px}.social-share-toggle .share-toggle-icon{cursor:pointer;display:flex;align-items:center;gap:8px}.social-share-toggle .share-toggle-icon .share-label{margin:0;cursor:pointer}.social-share-toggle .share-toggle-icon:hover{color:var(--lp-primary-color,#ffb606)}.social-share-toggle .content-widget-social-share{padding:20px;background:#fff;box-shadow:0 1px 16px 0 rgba(0,0,0,0.12)}.social-share-toggle .lp-social-media{display:inline-flex;padding:0;gap:12px;margin:0}.social-share-toggle .lp-social-media>li{text-align:center;list-style:none}.social-share-toggle .lp-social-media>li span{display:none}.social-share-toggle .lp-social-media>li i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.social-share-toggle .lp-social-media>li i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.social-share-toggle .clipboard-post{display:flex;justify-content:space-between;margin-bottom:20px;gap:12px}.social-share-toggle .btn-clipboard{position:relative;padding:12px 20px;white-space:nowrap}.social-share-toggle .btn-clipboard .tooltip{display:none;position:absolute;z-index:2;left:50%;right:auto;bottom:100%;transform:translateX(-50%);width:max-content;color:#fff;font-size:.825em;padding:5px 10px;background:rgba(0,0,0,0.72);border-radius:3px;margin-bottom:10px}.social-share-toggle .btn-clipboard .tooltip:before{content:\"\";position:absolute;z-index:2;left:50%;bottom:-5px;margin-left:-3px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid rgba(0,0,0,0.72)}.social-share-toggle .btn-clipboard:hover{background-color:#eee}.social-share-toggle .btn-clipboard:hover .tooltip{display:block}.social-share-toggle .clipboard-value{border:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;flex:1}@media(max-width:600px){.social-share-toggle .clipboard-value{width:100%}}.social-share-toggle .wrapper-content-widget{visibility:hidden;text-align:left;opacity:0;-webkit-transition:all .27s ease;-moz-transition:all .27s ease;-o-transition:all .27s ease;transition:all .27s ease;position:absolute;right:0;top:auto;z-index:9;margin-top:20px}.social-share-toggle.social-share-toggle__open .wrapper-content-widget{margin-top:0;visibility:visible;opacity:1}@media(max-width:768px){.social-share-toggle .wrapper-content-widget{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.7)}.social-share-toggle .wrapper-content-widget .content-widget-social-share{position:relative;z-index:1;max-width:fit-content;top:50%;min-width:320px;transform:translateY(-50%);margin:0 auto}}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.course-curriculum .section-header .section-left{display:flex;align-items:center;gap:16px}.course-curriculum .section-header .section-left .wrapper-section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer;min-width:1em}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-angle-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-angle-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up,.course-curriculum .section.closed .section-toggle .lp-icon-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-material-skeleton{overflow:auto}.lp-material-skeleton .course-material-table{width:100%}.lp-material-skeleton .course-material-table th{text-align:center}.lp-material-skeleton .course-material-table th:first-child{text-align:left}.lp-material-skeleton .course-material-table tr td:not(:first-child){text-align:center}.lp-material-skeleton .course-material-table tfoot td{text-align:left;font-weight:bold}.lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}#popup-content .lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.theme-twentytwentytwo .wp-container-11 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-9 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-12 .alignfull,.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}.learnpress.twentytwentyone .lp-archive-courses a:focus,.learnpress.theme-twentytwentyone .lp-archive-courses a:focus{background:transparent !important;text-decoration:none !important;outline:none !important}.learnpress.twentytwentyone .pagination,.learnpress.twentytwentyone .comments-pagination,.learnpress.theme-twentytwentyone .pagination,.learnpress.theme-twentytwentyone .comments-pagination{border-top:0;padding-top:0}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part,.learnpress.theme-twentytwentyone .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb{max-width:var(--lp-container-max-width);width:100%;margin:0 auto;padding:1em var(--lp-cotainer-padding);list-style:none}ul.learn-press-breadcrumb li{display:inline-block;margin:0}ul.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb i{margin:0 8px}ul.learn-press-breadcrumb a{color:inherit}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:left}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:left}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:left}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}@media(max-width:1024px){body.learnpress-page{--lp-cotainer-padding:1rem}}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:\"\"}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-entry-content .course-tabs{margin-bottom:40px}form.retake-course,form.enroll-course,form.purchase-course{display:inline-flex;flex-direction:column;gap:10px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:var(--lp-primary-color)}.primary-color-before::before{color:var(--lp-primary-color)}.primary-color-after::after{color:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}\n\\ No newline at end of file\n+@charset \"UTF-8\";:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-left:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-right:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-left:15px;padding-right:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-right:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-tabs{margin-bottom:32px;position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs__nav{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-tabs__item{position:relative;margin:0;list-style:none}.learn-press-tabs__item>a{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-tabs__item>a:focus{outline:0;text-decoration:none}.learn-press-tabs__item::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-tabs__item.active a,.learn-press-tabs__item:hover a{color:var(--lp-primary-color,#ffb606)}.learn-press-tabs__item.active::after,.learn-press-tabs__item:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}@media(max-width:990px){.learn-press-tabs__nav,.learn-press-tabs .learn-press-filters{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;scroll-behavior:smooth}.learn-press-tabs__nav::-webkit-scrollbar,.learn-press-tabs .learn-press-filters::-webkit-scrollbar{display:none}}.learn-press-filters{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-filters li{position:relative;margin:0;list-style:none}.learn-press-filters li a,.learn-press-filters li span{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-filters li a:focus,.learn-press-filters li span:focus{outline:0;text-decoration:none}.learn-press-filters li a::after,.learn-press-filters li span::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-filters li a.active,.learn-press-filters li a:hover,.learn-press-filters li span.active,.learn-press-filters li span:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li a.active::after,.learn-press-filters li a:hover::after,.learn-press-filters li span.active::after,.learn-press-filters li span:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a,.learn-press-filters li.active span{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a::after,.learn-press-filters li.active span::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li:after{display:none !important}.wrapper-course-nav-tabs{position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125em}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;align-items:start}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column;align-items:center}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-right:0;margin-bottom:24px}}.course-tab-panel .lp-course-author img{width:100px;height:100px;border-radius:50%;object-fit:cover;object-position:center;display:block;margin:0 auto}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:4px}.course-tab-panel .lp-course-author .author-title a{text-decoration:none;color:var(--lp-color-base,#333);box-shadow:none;font-size:1.125em;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-style:italic}.course-tab-panel .lp-course-author .instructor-social{display:flex;gap:16px;margin-bottom:12px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center;margin-top:16px}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:.8em;line-height:2em;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:\"\\f0d5\"}.course-tab-panel .lp-course-curriculum__title{display:none}.learn-press-nav-tabs{margin:0;display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-nav-tabs li{position:relative;margin:0;list-style:none}.learn-press-nav-tabs li label{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-nav-tabs li label:focus{outline:0;text-decoration:none}.learn-press-nav-tabs li::after{position:absolute;bottom:0;top:auto;left:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-nav-tabs li.active label,.learn-press-nav-tabs li:hover label{color:var(--lp-primary-color,#ffb606)}.learn-press-nav-tabs li.active::after,.learn-press-nav-tabs li:hover::after{background:var(--lp-primary-color,#ffb606)}.TabsDragScroll{position:relative}.TabsDragScroll:hover{cursor:all-scroll}.TabsDragScroll ul{max-width:100%;white-space:nowrap;scroll-behavior:smooth;user-select:none;overflow-x:auto;flex-wrap:nowrap}.TabsDragScroll ul::-webkit-scrollbar{display:none}.TabsDragScroll ul.dragging{scroll-behavior:unset;cursor:all-scroll}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:1.5em;font-weight:600;line-height:1}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:right}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:left}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 4px 0 0;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;left:2px;color:#41abec;font-family:\"lp-icon\";font-size:14px;line-height:1;content:\"\\f00c\";border:0;transform:none}.lp-checkout-form .lp-checkout-remember a{color:#666;font-weight:300;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px}.lp-checkout-form .lp-form-fields input:not([type=checkbox]){line-height:normal;width:100%;padding:10px 15px;border:1px solid #ccc}.lp-checkout-form .lp-form-fields input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:left}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:var(--lp-primary-color,#ffb606)}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-weight:400}.lp-checkout-form .lp-guest-switch-login a{display:inline-block}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:\"\"}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:4px}#checkout-order .cart-item:first-child td{border-top:0}#checkout-order td,#checkout-order th{border-right:0;border-left:0;background:transparent}#checkout-order td:last-child,#checkout-order th:last-child{padding-right:0}#checkout-order table{width:100%;margin:0;border:0}#checkout-order .course-name{font-weight:600}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-weight:600;text-align:right}#checkout-order tfoot{font-size:1.2em}#checkout-order tfoot th{font-weight:600;padding-left:0}#checkout-order tfoot .order-total{font-size:1.4em}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 13px 18px 0}#checkout-order .course-thumbnail img{width:100px;max-width:100% !important;height:auto !important}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid var(--lp-border-color,#e2e0db);resize:none}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:right}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-left:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:right;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{margin-top:5px;opacity:.5;font-size:.75em;font-weight:normal;margin-left:10px}#checkout-payment .secure-connection i{margin-right:5px;font-size:1.125em}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 8px 0 0;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;left:50%;width:6px;height:6px;background:#41abec;transform:translate(-50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:\"\"}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}.lp-terms-and-conditions{color:#666}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:2.5rem;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid var(--lp-border-color,#e2e0db);background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.learn-press-checkout-comment h4{display:none}.lp-content-area .order_details{width:100%;border-collapse:collapse}.lp-content-area .order_details th a,.lp-content-area .order_details td a{color:var(--lp-primary-color)}.learnpress-checkout .learnpress>.learn-press-message{max-width:var(--lp-container-max-width);margin:0 auto}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}.learnpress table{width:100%;margin:0 auto 1em auto;border-spacing:0;border-collapse:collapse}.learnpress table th,.learnpress table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;text-align:left}.learnpress table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.learnpress table thead th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-size:1.1em;font-weight:600}.learnpress table tbody,.learnpress table tfoot{box-sizing:border-box}.learnpress table tbody td,.learnpress table tbody th,.learnpress table tfoot td,.learnpress table tfoot th{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.learnpress table tbody td a,.learnpress table tbody th a,.learnpress table tfoot td a,.learnpress table tfoot th a{color:inherit;text-decoration:none}.learnpress table tbody td a:hover,.learnpress table tbody th a:hover,.learnpress table tfoot td a:hover,.learnpress table tfoot th a:hover{color:var(--lp-primary-color)}.learnpress table tbody tr .column-status .result-percent,.learnpress table tfoot tr .column-status .result-percent{font-weight:500}.learnpress table tbody tr .column-status .lp-label,.learnpress table tfoot tr .column-status .lp-label{font-weight:600}.learnpress table tbody tr:nth-child(even) td,.learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.learnpress table .list-table-nav td{font-size:.875em}.learnpress table .list-table-nav td.nav-text{text-align:left}.learnpress table .list-table-nav td.nav-pages{text-align:right}.learnpress table .list-table-nav td.nav-pages .learn-press-pagination{text-align:right}.learnpress table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-weight:300}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.lp-profile-content .learn-press-form .form-fields{margin:0 -15px !important}.lp-profile-content .learn-press-form .form-fields .form-field{padding-left:15px;padding-right:15px}@media(min-width:767px){.lp-profile-content .learn-press-form .form-fields .form-field__50{width:50%;float:left}}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field>label{font-style:italic}.learn-press-form .form-fields .form-field label{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:700;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field input[type=tel],.learn-press-form .form-fields .form-field input[type=url],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field textarea{width:100%;border:1px solid var(--lp-border-color,#e2e0db);padding:8px 16px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field input[type=email]:focus,.learn-press-form .form-fields .form-field input[type=text]:focus,.learn-press-form .form-fields .form-field input[type=password]:focus,.learn-press-form .form-fields .form-field input[type=tel]:focus,.learn-press-form .form-fields .form-field input[type=url]:focus,.learn-press-form .form-fields .form-field input[type=number]:focus,.learn-press-form .form-fields .form-field textarea:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:.875em;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk,.learn-press-form .form-fields .form-field .required{color:red}.learn-press-form.completed button::before{margin-right:10px;font-family:\"lp-icon\";font-size:1.125em;content:\"\\f00c\"}.learn-press-form .form-field__clear{clear:both}.learn-press-form form>p>label{display:flex;gap:8px}.learn-press-form p{margin:0}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-right:auto;margin-bottom:60px;margin-left:auto;padding:40px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{padding:12px 16px;width:100%;border-radius:var(--lp-border-radius,5px);outline:0;color:#fff;background:var(--lp-primary-color)}.required label{font-weight:bold}.required label:after{content:\" *\";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative;width:100%}.lp-password-input input[type=password]{padding-right:2.5em}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;right:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:\"lp-icon\";content:\"\\f06e\"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:\"\\f070\"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}.become-teacher-form .become-teacher-form__description{margin-top:12px}.become-teacher-form button{padding:12px 24px}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-user-cover-image_background{position:relative}.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image{opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image{position:absolute;bottom:0;right:0;background:var(--lp-white-grey,#f7f7fb);padding:12px 20px;border-radius:var(--lp-border-radius,5px) 0 var(--lp-border-radius,5px) 0;text-transform:capitalize;cursor:pointer;color:var(--lp-primary-color,#ffb606);text-decoration:none;opacity:0;visibility:hidden}@media(max-width:767px){.lp-user-cover-image_background .lp-btn-to-edit-cover-image{font-size:0;padding:4px 12px;opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image:before{font-family:\"lp-icon\";content:\"\\f044\";font-size:16px}}.lp-user-cover-image__display{width:100%}@media(max-width:767px){.lp-user-cover-image{position:relative;z-index:1}}.lp-user-cover-image .lp-cover-image-empty{display:flex;align-items:center;width:100%;height:250px;border:2px dashed var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;position:relative;text-align:center}.lp-user-cover-image .lp-cover-image-empty:hover{border-color:var(--lp-primary-color,#ffb606)}.lp-user-cover-image .lp-cover-image-empty input[type=file]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:10}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{z-index:1;flex:1;position:relative;padding:0 16px;line-height:1.3}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top{font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-direction:column}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image{font-size:32px;transform:rotate(-90deg)}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before{color:var(--lp-primary-color);content:\"\\f08b\"}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom{opacity:.7}@media(max-width:420px){.lp-user-cover-image .lp-cover-image-empty{height:200px}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{padding:0 8px;font-size:15px}}.lp-user-cover-image .lp-user-cover-image__buttons{display:inline-flex;gap:12px;margin-top:16px}.lp-user-cover-image_background{background-repeat:no-repeat;background-position:center;background-size:cover;margin-bottom:20px;border-radius:var(--lp-border-radius,5px);min-height:100px}.lp-user-cover-image_background>img{opacity:0;visibility:hidden}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed var(--lp-border-color,#e2e0db);border-radius:3px;background-color:#fafafa;font-size:.875em;font-weight:300;font-style:italic;line-height:2.6875em;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-left:15px;margin-right:0}.dashboard-statistic__row{display:flex;gap:20px;flex-wrap:wrap}.dashboard-statistic__row .statistic-box{padding:20px;background:var(--lp-white-grey,#f7f7fb);text-align:center;display:flex;flex-wrap:wrap;gap:20px;border-radius:var(--lp-border-radius,5px);width:calc((100% - 40px) \u002F 3)}@media(min-width:1200px) and (max-width:1440px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:1200px){.dashboard-statistic__row .statistic-box{width:calc((100% - 20px) \u002F 2)}}@media(max-width:768px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:600px){.dashboard-statistic__row{gap:8px}.dashboard-statistic__row .statistic-box{width:100%;gap:12px;padding:8px 12px}.dashboard-statistic__row .statistic-box__text{display:flex;justify-content:space-between;align-items:center}.dashboard-statistic__row .statistic-box__text label{margin:0}.dashboard-statistic__row .statistic-box__text__number{font-size:1.2em}.dashboard-statistic__row .statistic-box__icon span{--lp-width-icon:40px;font-size:18px}}.statistic-box__icon span{--lp-width-icon:60px;display:flex;width:var(--lp-width-icon);height:var(--lp-width-icon);border-radius:50%;background:rgba(0,199,190,0.1019607843);line-height:var(--lp-width-icon);align-items:center;justify-content:center;color:#00c7be;font-size:24px}.statistic-box__icon [class^=lp-icon-]:before{width:1em}.statistic-box__icon .lp-icon-enrolled_courses:before,.statistic-box__icon .lp-icon-total_course:before{content:\"\\f518\"}.statistic-box__icon .lp-icon-in_progress_course,.statistic-box__icon .lp-icon-student_in_progress{background:rgba(175,82,222,0.1019607843);color:#af52de}.statistic-box__icon .lp-icon-finished_courses,.statistic-box__icon .lp-icon-published_course{background:rgba(88,86,214,0.1019607843);color:#5856d6}.statistic-box__icon .lp-icon-passed_courses,.statistic-box__icon .lp-icon-student_completed{background:rgba(85,190,36,0.2);color:#34c759}.statistic-box__icon .lp-icon-failed_courses,.statistic-box__icon .lp-icon-pending_course{background:rgba(255,59,48,0.1019607843);color:#ff3b30}.statistic-box__icon .lp-icon-total_student{background:rgba(0,122,255,0.1019607843);color:#007aff}.statistic-box__icon .lp-icon-total_student:before{content:\"\\f501\"}.statistic-box__text{flex:1;text-align:left}.statistic-box__text label{display:block;margin-bottom:4px;font-weight:normal;line-height:1.3;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.statistic-box__text__number{font-size:1.6em;line-height:1;font-weight:600}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:left}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:right}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.wrapper-profile-header{position:relative}.lp-user-profile{position:relative;--lp-item-padding:40px}.lp-user-profile img{max-width:100%;height:auto}.lp-user-profile .lp-user-profile-avatar img{display:block;border-radius:var(--lp-border-radius-avatar,50%);width:100%;height:auto}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;margin:0;gap:12px}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--lp-color-base,#333);width:var(--lp-social-size,40px);height:var(--lp-social-size,40px);border-radius:50%;border:1px solid var(--lp-border-color,#e2e0db);font-size:16px}.lp-user-profile .lp-user-profile-socials a:hover{color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color);background:var(--lp-primary-color)}.lp-user-profile .lp-user-profile-socials a:hover svg{fill:var(--lp-color-white,#fff)}.lp-user-profile .lp-profile-content-area{position:relative;padding:0;display:flex;align-items:flex-start}.lp-user-profile .lp-profile-left{min-width:120px;max-width:120px}.lp-user-profile .lp-profile-left .user-avatar{position:relative}.lp-user-profile .lp-profile-left .user-avatar img{border-radius:50%}.lp-user-profile .lp-profile-left .user-avatar:hover .lp-btn-to-edit-avatar{opacity:1;visibility:visible}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{position:absolute;top:80px;right:0;left:auto;width:36px;height:36px;font-size:0;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;cursor:pointer;background-color:var(--lp-white-grey,#f7f7fb);border-radius:50%}@media(max-width:767px){.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{opacity:1;top:60px;visibility:visible}}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar::before{content:\"\\f044\";font-size:1.5rem;font-family:\"lp-icon\";font-weight:normal;color:var(--lp-primary-color)}.lp-user-profile .lp-profile-right{padding-left:20px;flex:1;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px}.lp-user-profile .lp-profile-username{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:500;color:inherit;flex:1}.lp-user-profile .lp-profile-user-bio{width:100%}.lp-user-profile #profile-sidebar{float:left;width:270px;border:1px solid var(--lp-border-color,#e2e0db);border-top:0;margin-top:var(--lp-item-padding);margin-bottom:32px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%;margin-bottom:0}}.lp-user-profile .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile .lp-profile-nav-tabs>li{position:relative;margin:0;padding:0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li a{padding:10px 20px;color:inherit;font-weight:500;text-decoration:none;display:flex;width:100%;gap:8px;line-height:1.4}.lp-user-profile .lp-profile-nav-tabs>li a>i{margin-top:3px}.lp-user-profile .lp-profile-nav-tabs>li>a{padding:14px 20px;position:relative}.lp-user-profile .lp-profile-nav-tabs>li>a>i{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-user-profile .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active{background:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active>a,.lp-user-profile .lp-profile-nav-tabs>li.active>a i{color:#fff}.lp-user-profile .lp-profile-nav-tabs>li:not(.active):hover{background:var(--lp-white-grey,#f7f7fb)}.lp-user-profile .lp-profile-nav-tabs>li.has-child>a:after{font-family:\"lp-icon\";content:\"\\f105\";position:absolute;right:15px;top:50%;transform:translateY(-50%)}.lp-user-profile .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;left:100%;min-width:180px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile .lp-profile-nav-tabs li>ul li{white-space:nowrap}.lp-user-profile .lp-profile-nav-tabs li>ul li:hover,.lp-user-profile .lp-profile-nav-tabs li>ul li.active{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile .lp-profile-content{float:right;width:calc(100% - 300px);margin-bottom:32px;padding-top:var(--lp-item-padding)}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form{display:flex;align-items:center;margin-bottom:10px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form input[type=number]{padding:8px;border:1px solid #ccc;width:60px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form button{cursor:pointer;line-height:1}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-right:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile .learn-press-message{margin-top:0}.lp-user-profile .profile-heading{margin-bottom:24px}.lp-user-profile.guest .lp-content-area{display:flex;align-items:flex-start}.lp-user-profile.guest .lp-content-area>div{flex:1;width:100%}@media(min-width:1366px){.lp-user-profile .lp-content-area{padding-right:0;padding-left:0}}@media(max-width:990px){.lp-user-profile{--lp-item-padding:30px}.lp-user-profile #profile-nav{border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs{display:flex;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;white-space:nowrap;scroll-behavior:smooth}.lp-user-profile .lp-profile-nav-tabs::after{display:none}.lp-user-profile .lp-profile-nav-tabs>li{border:0;border-right:1px solid var(--lp-border-color,#e2e0db);flex:1}.lp-user-profile .lp-profile-nav-tabs>li:last-child{border-right:0}.lp-user-profile .lp-profile-nav-tabs>li>a{height:auto;padding:8px 12px 8px 12px;flex-direction:column;white-space:nowrap;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);line-height:1.4;gap:4px}.lp-user-profile .lp-profile-nav-tabs>li>a>i{position:static;transform:translate(0)}.lp-user-profile .lp-profile-nav-tabs>li>a::after{display:none !important;margin-left:10px}.lp-user-profile .lp-profile-nav-tabs>li.has-child a::after{display:none !important}.lp-user-profile .lp-profile-nav-tabs>li:after{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active:after,.lp-user-profile .lp-profile-nav-tabs>li.active:before{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(-20%)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:\"\"}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li{float:left;border-right:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-right:0}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile .lp-profile-nav-tabs li:not(.has-child)>a::after,.lp-user-profile .lp-profile-nav-tabs li:hover ul{display:none !important}}@media(max-width:768px){.lp-user-profile .lp-profile-content-area{align-items:center}.lp-user-profile .lp-profile-right{flex-direction:column;align-items:flex-start}.lp-user-profile .lp-profile-user-bio{display:none}.lp-user-profile.guest .lp-content-area{flex-direction:column}}@media(max-width:650px){.lp-user-profile .lp-profile-left{min-width:100px;max-width:100px}.lp-user-profile .lp-user-profile-socials{gap:8px;--lp-social-size:36px;font-size:14px}}#profile-content-withdrawals>h2{font-size:1.6em;margin-bottom:12px}.learn-press-profile-course__statistic{margin-bottom:32px}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-filters{flex:1 1 auto}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:6px;color:var(--lp-primary-color,#ffb606);font-size:.875em;font-weight:600;line-height:1;text-decoration:none;white-space:nowrap;transition:all .2s ease}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:hover,.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:focus{background:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:#fff;text-decoration:none}@media(max-width:768px){.learn-press-profile-course__tab .learn-press-tabs--with-course-builder{flex-direction:column;align-items:stretch}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link{width:100%;margin:0 0 16px}}.learn-press-profile-course__progress .lp_profile_course_progress__item img{width:100%;aspect-ratio:16\u002F9;object-fit:cover;height:auto;display:block}.learn-press-profile-course__progress .lp_profile_course_progress__item td,.learn-press-profile-course__progress .lp_profile_course_progress__item th{text-align:center}.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{width:15%;padding:0}@media(max-width:768px){.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{display:none}}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3){width:10%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5){width:25%}@media(max-width:768px){.learn-press-profile-course__progress .learn-press-course-tab__filter__content{overflow-x:auto}}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:1.875em;line-height:1.5;font-weight:500;margin-bottom:15px}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;opacity:.7;font-size:.8em;font-style:italic}.lp-order-recover{display:flex;gap:10px}.lp-order-recover input[type=text]{font-style:italic;flex:1 1 auto}.lp-profile-content ul{list-style:none !important;padding:0 !important}.lp-profile-content ul.learn-press-courses{margin:0 -16px}.lp-profile-content h3{margin-top:0}.lp-user-avatar__buttons{display:inline-flex;gap:12px;margin-top:16px}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 45px 0 20px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-left:16px}}.course-extra-box__title::after{position:absolute;top:0;right:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-left:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-left:16px;padding-right:16px}}.course-extra-box__content li::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(5%);-moz-transform:translateX(5%);-ms-transform:translateX(5%);-o-transform:translateX(5%);transform:translateX(5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 45px 12px 20px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;right:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-left:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-right:15px;margin-left:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:right;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-left linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;left:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{left:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-right:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:right}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:right;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-left:0;margin-right:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:\"\"}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:.938em;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:1.25em}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:.875em}.quiz-progress .progress-items .progress-item i{display:none;float:left;width:60px;height:60px;color:#fff;background:#00adff;font-size:1.875em;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:\"\"}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;left:0;width:3px;background:#ddd;content:\"\";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:32px;min-width:32px;height:32px;margin:0 10px 0 3px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0}.answer-options .answer-option input[type=checkbox]::after{width:auto;box-sizing:content-box;height:auto;color:#3db748;font-family:\"lp-icon\";font-size:16px;opacity:0;content:\"\\f00c\";background:0;border:0}.answer-options .answer-option input[type=checkbox]:checked::after{border:0}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option input[type=radio]:checked::after{content:\"\";width:10px;height:10px;border-radius:10px;background:#00adff}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answered-wrong input[type=checkbox]::after{color:red}.answer-options .answer-option.answered-wrong input[type=radio]::after{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-left:5px;content:\"(+\" attr(data-counter) \")\"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:\"\\f00c\"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0;color:#fff;background:#f02425;display:flex;align-items:center;justify-content:center;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);gap:8px}.quiz-result .result-message::after{font-family:\"lp-icon\";content:\"\\f00d\"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:1.75em;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:1em;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:.875em}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:left;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed var(--lp-border-color,#e2e0db)}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:1em;font-weight:400;line-height:2.1875em}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-right:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-weight:500;text-align:right}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:\"\\f017\"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:\"\\f005\"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:\"\\f059\"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:\"\\f00c\"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:\"\\f00d\"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:\"\\f2f5\"}.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:426px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{flex-direction:row;justify-content:space-between}}@media(min-width:1025px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:792px}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:50%}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:65%;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{flex-direction:row}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:792px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:100%;text-align:center}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:50%}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:100%;justify-content:center;flex-direction:column-reverse;gap:0}@media(min-width:490px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{flex-direction:row-reverse}}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:65%;gap:12px;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.quiz-status{position:sticky;z-index:99;top:0;right:0;left:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;margin:0 auto;padding:8px 16px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div>div .submit-quiz #button-submit-quiz{margin:0;border-radius:4px;overflow:hidden;white-space:nowrap}.quiz-status>div>div .countdown{margin:0;border-radius:4px;overflow:hidden;padding:12px}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:1em;font-weight:400;line-height:1.625em}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{min-height:38px;color:#333;font-weight:500;text-align:center}.quiz-status .countdown .fas{color:#333;font-size:1em}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:\"\";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(-90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .countdown i{margin:0 5px 0 0}.quiz-status .submit-quiz button{margin:0 0 0 10px;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:.75em;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-left:3px;font-family:\"lp-icon\";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;left:50%;width:10px;height:4px;margin-left:-5px;border-radius:2px;background:#aaa;content:\"\"}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-right:10px;padding-left:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 40px 0 0;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 20px 0 0}}.quiz-intro-item::before{position:relative;margin-right:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:\"\\f012\"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:\"\\f12e\"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:\"\\f017\"}.quiz-intro-item__title{margin:0;padding:0 8px 0 0;color:#333;font-weight:300}.quiz-intro-item__content{color:#222;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:\"\"}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(45deg)}.circle-bar .before{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-right-color:transparent;transform:rotate(45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-left-color:inherit;transform:rotate(45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:right}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;left:50%;width:200px;height:200px;margin-left:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:\"\"}.quiz-result .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.quiz-questions .question-answers .answer-options{margin:0;padding:0}.question .answer-option{padding:0}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;border-color:#d9e0f1;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 0 0 10px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:10px 10px 10px 60px;border:1px solid var(--lp-border-color,#e2e0db);color:#666;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;font-size:1.125em;font-weight:500}.question .question-title .edit-link{float:right;font-size:.875em;font-weight:normal}.question .question-content{margin-bottom:30px}.question .question-content img{max-width:100%}.question .question-response{margin-bottom:10px;font-size:.875em}.question .question-response .label{display:inline-block;margin:0 5px 0 0;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 5px 0 0}.question .btn-show-hint{position:relative;margin:0 0 0 10px;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none;border:0}.question .btn-show-hint::before{font-family:\"lp-icon\";font-size:18px;content:\"\\f059\"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;left:100%;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed var(--lp-border-color,#e2e0db);text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-left:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table th,.quiz-attempts table td{text-align:center}.learn-press-message.fixed{position:fixed;top:32px;left:0;right:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #ebf8e5;border-radius:9px;font-size:.9em;line-height:1.4}.lp-ajax-message.error{border-color:#fee5e5}.lp-icon-passed{margin-right:5px}.lp-icon-passed::before{color:#059601;font-family:\"lp-icon\";content:\"\\f058\"}.lp-user-item.graduation{padding:10px}.lp-user-item.graduation.passed{background-color:#ebf8e5;color:#3ab500}.lp-user-item.graduation.failed{background-color:#fdecec;color:#d85554}.course-graduation span{color:#999}.course-graduation .icon{margin-right:5px;font-size:1.25em}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:\"lp-icon\";content:\"\\f071\"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:\"\"}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:15px;left:-120px;width:300px;background:#ff2828;text-align:center;transform:rotate(-45deg);height:auto;padding:5px 0}.lp-badge.featured-course::before{font-size:.75em;text-transform:uppercase;content:attr(data-text)}body div.entry-content>div.learnpress,body div.entry-content>div.learnpress:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.is-style-wide){--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-left:0;padding-right:0}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 1.5em}.lp-archive-courses ul{list-style-type:revert;padding:0 0 1em 1em}.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}.lp-archive-courses ol ul{padding:2px 0 2px 35px}.lp-archive-courses ol ol{padding:2px 0 2px 20px}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul,.learnpress-profile #left-area ul,.learnpress-profile .entry-content ul,.learnpress-profile .et-l--body ul,.learnpress-profile .et-l--footer ul,.learnpress-profile .et-l--header ul{padding:0;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size=\"3\"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-left:15px;padding-right:15px}body.astra .course-summary-content .course-detail-info{--lp-color-white:#333;--lp-secondary-color:transparent}body.astra .course-summary-content .course-detail-info .course-title{border-bottom-color:var(--ast-global-color-7)}.ast-container{--lp-cotainer-padding:0}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-left:0;padding-right:0}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.edu-press:not(.nofixcss),.theme-edu-press:not(.nofixcss){--lp-font-size-base:1em}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label{display:none}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a{font-size:1rem}.edu-press:not(.nofixcss) .course-instructor-category .course-categories a,.theme-edu-press:not(.nofixcss) .course-instructor-category .course-categories a{font-weight:normal}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories{position:absolute}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor{display:inline}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*{display:revert}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore{width:auto}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a{padding:0}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover{background:transparent;color:var(--thim-body_primary_color)}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info{border-top:1px solid rgba(153,153,153,0.2);padding-top:20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info{margin-top:50px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input{height:unset;padding:10px 20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button{background-image:none !important}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i{display:block}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn{opacity:1}.edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a{border:0}.edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box,.theme-edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box{background-color:var(--lp-white-grey,#f7f7fb);min-width:unset;margin-bottom:0}.edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before{font-family:\"lp-icon\" !important;font-weight:normal !important;margin:0 !important}.edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs,.theme-edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs{background:transparent;border-radius:0}.lp-4{--lp-font-size-base:1em}.elearningwp:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border:none !important;background-color:unset !important;padding:0}.elearningwp:not(.nofixcss) .lp-content-area.learn-press-message{padding:10px 15px}.course-builder:not(.nofixcss) .lp-courses-bar .search-courses button{padding:0}.course-builder:not(.nofixcss) .lp-courses-bar .courses-order-by{height:unset !important;padding:8px 35px 8px 15px !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user #profile-sidebar{margin-top:0 !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user .lp-profile-content-area{align-items:center}.course-builder:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border-radius:5px;border:0;padding:0}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header{padding-bottom:30px}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header .lp-profile-user-bio{padding-bottom:0}.learnpress-v4:not(.nofixcss),.learnpress-v3:not(.nofixcss){--lp-border-radius-avatar:0}.learnpress-v4:not(.nofixcss) .statistic-box,.learnpress-v3:not(.nofixcss) .statistic-box{--thim-lp-profile-bg-color:#f7f7fb}.learnpress-v4:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters,.learnpress-v3:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters{border:none !important;margin:0 0 0 -1px 0 !important}.learnpress-v4:not(.nofixcss) .lp-user-profile .lp-profile-left,.learnpress-v3:not(.nofixcss) .lp-user-profile .lp-profile-left{min-width:unset !important;position:static !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{min-height:unset;padding-left:0;display:flex}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left{border:none !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img{border-radius:50%}.learnpress-v4 .lp-course-curriculum,.learnpress-v3 .lp-course-curriculum{--lp-primary-color:var(--thim-body-primary-color,inherit)}.learnpress-v4 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v3 .lp-course-curriculum .section-count-items{font-family:var(--thim-font-title-font-family,inherit)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{color:inherit}.learnpress-v4 .lp-course-curriculum .course-item-ico,.learnpress-v3 .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{column-gap:8px}.learnpress-v4 .lp-course-curriculum .course-section__title,.learnpress-v3 .lp-course-curriculum .course-section__title{font-size:1.1em}.learnpress-v4 .lp-course-curriculum .section-toggle,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .section-toggle,.learnpress-v3 .lp-course-curriculum .section-count-items{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 #popup-sidebar .course-section-header,.learnpress-v4 #popup-sidebar .lp-course-curriculum .course-item,.learnpress-v3 #popup-sidebar .course-section-header,.learnpress-v3 #popup-sidebar .lp-course-curriculum .course-item{padding-left:16px;padding-right:16px}.learnpress-v4 .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0}.learnpress-v4 .lp-course-curriculum .course-section{border-width:0 0 1px 0}.learnpress-v4 .lp-course-curriculum .course-section:last-child{border-width:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:0 0 8px 0}.learnpress-v4 .lp-course-curriculum .course-item{padding-left:0;padding-right:0}.learnpress-v4 .lp-course-curriculum .course-section{margin-bottom:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:24px 0 24px 0}.assignments .lp-icon-file-alt:before{content:\"\\e929\"}.eduma:not(.nofixcss) .learnpress #learn-press-profile.lp-user-profile .learn-press-filters{padding-bottom:0 !important;overflow-y:visible}.eduma:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{flex-direction:column}.eduma .lp-course-curriculum .course-section-header{padding:var(--thim-ekit-padding-lesson,12px 0)}.eduma .sc_heading+.lp-course-curriculum .lp-course-curriculum__title{display:none}.ivy-school:not(.nofixcss) .lp-user-profile .lp-user-profile-avatar img{border-radius:0}.ivy-school.single-lp_course .course-curriculum{border:0}.ivy-school .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0;--lp-primary-color:var(--thim-body-primary-color,inherit)}.ivy-school .lp-course-curriculum .course-section-header .course-section__title{font-family:var(--thim-font-title-font-family,inherit)}.ivy-school .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.course-builder .lp-course-curriculum{--lp-white-grey:#f2f2f2;--lp-border-color:#e6e6e6}.course-builder .lp-course-curriculum .course-sections{border:1px solid var(--lp-border-color,#e6e6e6);border-radius:var(--lp-border-radius,5px);overflow:hidden}.course-builder .lp-course-curriculum .course-section{margin:0;border-radius:0;border-width:1px 0 0 0}.course-builder .lp-course-curriculum .course-section:first-child{border:0}.course-builder #popup-sidebar .lp-course-curriculum{--lp-border-radius:0}.course-builder .course-tab-panels .lp-course-curriculum .course-sections{border:0}.course-builder .course-tab-panels .lp-course-curriculum .course-section-header,.course-builder .course-tab-panels .lp-course-curriculum .course-item{padding-left:0;--lp-white-grey:trasparent;padding-right:0}.eduma .lp-course-curriculum .course-item-order.lp-hidden,.coaching .lp-course-curriculum .course-item-order.lp-hidden{display:inline-block !important}.eduma .lp-course-curriculum .course-section__title,.coaching .lp-course-curriculum .course-section__title{text-transform:uppercase}.demo-marketplace .thim-ekit-tablist .lp-course-curriculum__title,.demo-ecommerce .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-marketplace .thim-ekit-tablist .course-section-header,.demo-ecommerce .thim-ekit-tablist .course-section-header{background-color:var(--thim-breacrumb-bg-color)}.demo-marketplace .thim-ekit-tablist .course-section__items,.demo-ecommerce .thim-ekit-tablist .course-section__items{background-color:var(--lp-fix-bg-section-item,#f5f7f8)}.demo-marketplace .style-marketplace-2,.demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#0f1c44;--lp-fix-bg-section-item:transparent}.thim-ekit-light-mode .demo-marketplace .style-marketplace-2,.thim-ekit-light-mode .demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#f4f4f4}.demo-ecommerce .course-section-header{--thim-breacrumb-bg-color:#e1e9fd}.demo-online-learning .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-online-learning .thim-ekit-tablist .course-section{margin-bottom:8px;border:0}.demo-online-learning .thim-ekit-tablist .course-section-header{background-color:#dfefff;border-radius:8px 8px 8px 8px}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{border:1px solid var(--thim-border-color);margin-bottom:10px;padding-left:20px;padding-right:20px}.business-consulting .lp-course-curriculum__title,.demo-business-v2 .lp-course-curriculum__title,.business-coaching .lp-course-curriculum__title,.demo-healthy-coaching .lp-course-curriculum__title{display:none}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border-width:1px;margin-bottom:15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child{border-width:1px;margin-bottom:0}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:20px 15px 5px 15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-item,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-left:15px;padding-right:15px}.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header{background-color:var(--thim-bg-color,#f5f5f5);padding:10px 15px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:15px 20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section__items{padding-left:20px;padding-right:20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-left:0;padding-right:0}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0;border-radius:5px}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{background:#fff;padding:10px 15px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-left:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;right:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;left:50%;width:0;height:0;margin-left:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;left:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;right:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:1.875rem;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses .lp-content-area.has-sidebar{display:flex;gap:32px;align-items:flex-start}@media(max-width:768px){.lp-archive-courses .lp-content-area.has-sidebar{display:inherit}}.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:33.33%}@media(max-width:1200px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:50%}}@media(max-width:600px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:100%}}.lp-archive-courses .lp-content-area .lp-main-content{flex:1}.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:25%}@media(max-width:768px){.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:100%}}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:\"\";position:absolute;top:0;bottom:0;left:15px;right:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:var(--lp-color-white,#fff)}.lp-archive-courses .learn-press-courses-header{margin-bottom:16px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.8)}.learn-press-courses{clear:both;margin:0 -16px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.learn-press-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.learn-press-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.learn-press-courses .course-item:hover .course-wishlist{opacity:1}.learn-press-courses .course-item .course-wishlist.filled{opacity:1}.learn-press-courses .course-content{position:relative;border-top:0}.learn-press-courses .course-content .course-permalink{display:block;border:0;text-decoration:none;color:inherit;line-height:1.3}.learn-press-courses .course-content .course-review{display:none}.learn-press-courses .course-content .course-tags{display:inline-block}.learn-press-courses .course-content .course-info>span{display:block}.learn-press-courses .course-content .course-info .course-price .free,.learn-press-courses .course-content .course-info .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .course-content .course-info .course-price .origin-price{margin-right:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.learn-press-courses .course-content .course-short-description{display:-webkit-box;overflow:hidden;margin-bottom:16px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.learn-press-courses .course-content .separator{display:none}.learn-press-courses .course-thumbnail{overflow:hidden;position:relative;border-radius:var(--lp-border-radius,5px)}.learn-press-courses .course-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;left:-110px;width:300px;text-align:center;transform:rotate(-45deg)}.learn-press-courses .course-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;right:6px;opacity:0;color:var(--lp-color-white,#fff);cursor:pointer}.learn-press-courses .course-thumbnail .course-wishlist::before{font-family:\"lp-icon\";content:\"\\f004\"}.learn-press-courses .course-thumbnail .course-wishlist .course-wishlist__btn{display:none}.learn-press-courses .course-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.learn-press-courses .course-thumbnail:hover::before{opacity:1}.learn-press-courses .course-thumbnail:hover a img{transform:scale(1.05)}.learn-press-courses .course-thumbnail:hover .course-wishlist{opacity:1}.learn-press-courses .course-thumbnail a{display:block;overflow:hidden}.learn-press-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.learn-press-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1);max-width:unset !important}.learn-press-courses .wap-course-title{margin:0 0 12px 0;padding:0;display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.15);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .wap-course-title a:hover{color:var(--lp-primary-color)}.learn-press-courses .course-permalink:hover{color:var(--lp-primary-color)}@media(min-width:769px){.learn-press-courses .course-summary-content .course-info-left{width:calc(100% - 340px)}}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value span,.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value>div{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{height:auto}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item:last-child{margin-right:0}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-right:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:768px){.learn-press-courses .course-summary-content{width:100%}}.learn-press-courses .course-price .free{color:#3ab500}.learn-press-courses .course{width:25%;margin:0 0 32px 0;box-shadow:none;list-style:none}.learn-press-courses .course-info{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.learn-press-courses .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:12px}.learn-press-courses .course-instructor-category>div>*{display:inline;vertical-align:middle}.learn-press-courses .course-instructor-category label{font-size:inherit;font-weight:inherit}.learn-press-courses .course-instructor-category a{font-weight:var(--lp-font-weight-link,600);text-decoration:none;color:inherit}.learn-press-courses .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-courses .course-wrap-meta{display:flex;padding:0;margin-bottom:12px;gap:20px;flex-wrap:wrap;row-gap:8px}.learn-press-courses .course-wrap-meta .meta-item{text-transform:capitalize;display:flex;gap:8px}.learn-press-courses .course-wrap-meta .meta-item::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.learn-press-courses .course-wrap-meta .meta-item>div{display:inline-block}.learn-press-courses .course-wrap-meta .meta-item-level::before{content:\"\\f012\"}.learn-press-courses .course-wrap-meta .meta-item-duration::before{content:\"\\f017\"}.learn-press-courses .course-wrap-meta .meta-item-lesson::before{content:\"\\f15b\"}.learn-press-courses .course-wrap-meta .meta-item-quiz::before{content:\"\\f12e\"}.learn-press-courses .course-wrap-meta .meta-item-student::before{content:\"\\f501\"}.learn-press-courses .course-wrap-meta .meta-item-address::before{content:\"\\e91b\"}.learn-press-courses .course-content .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.learn-press-courses .course-content .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;border-bottom:1px solid var(--lp-border-color,#e2e0db);flex-wrap:wrap;justify-content:flex-end;padding-bottom:32px}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;align-items:start}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{padding:0 0 0 24px}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{padding:16px 0}}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 10px 10px 0;padding:3px 5px;border-radius:3px;color:var(--lp-color-white,#fff);background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-excerpt{width:100%}.learn-press-courses[data-layout=list] .course-content .course-info{width:100%;display:flex;justify-content:space-between}@media(max-width:520px){.learn-press-courses[data-layout=list] .course-content .course-info{width:100%}}.learn-press-courses[data-layout=list] .course-content .course-info .course-students{display:none}.learn-press-courses[data-layout=list] .course-thumbnail{width:35%}.learn-press-courses[data-layout=list] .course-content{width:65%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-thumbnail,.learn-press-courses[data-layout=list] .course-content{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{padding:0 16px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:100%}}.learn-press-courses[data-layout=grid] .wp-block-learnpress-course-item-template,.learn-press-courses[data-layout=grid] .course-item,.learn-press-courses.lp-courses-related .wp-block-learnpress-course-item-template,.learn-press-courses.lp-courses-related .course-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-level,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-quiz{display:none}.learn-press-courses[data-layout=grid] .course-content,.learn-press-courses.lp-courses-related .course-content{width:100%;padding:20px;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-info,.learn-press-courses.lp-courses-related .course-content .course-info{flex-direction:column;align-items:flex-start;gap:12px}.learn-press-courses[data-layout=grid] .course-content .course-info .course-readmore,.learn-press-courses.lp-courses-related .course-content .course-info .course-readmore{width:100%;text-align:center}.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-short-description,.learn-press-courses.lp-courses-related .course-content .course-excerpt,.learn-press-courses.lp-courses-related .course-content .course-short-description{display:none}.learn-press-courses[data-layout=grid] .learn-press-message,.learn-press-courses.lp-courses-related .learn-press-message{margin-left:15px;margin-right:15px}.learn-press-courses[data-layout=grid] .course-thumbnail,.learn-press-courses.lp-courses-related .course-thumbnail{border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.learn-press-courses[data-size=\"3\"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size=\"3\"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-list-courses-default{position:relative}.lp-list-courses-default .lp-skeleton-animation{clear:both;padding:5px 0 0 0}.lp-courses-bar{display:flex;width:100%;justify-content:space-between;gap:12px;margin-bottom:32px;flex-wrap:wrap}.lp-courses-bar .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-right:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - 0.5em) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .lp-courses-bar .courses-order-by{background-position-x:calc(100% - 10px)}.lp-courses-bar .courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar>*{display:flex}.lp-courses-bar .search-courses{display:flex;flex:1;margin-bottom:0}.lp-courses-bar .search-courses input{width:100%;max-width:240px;margin:0 4px 0 0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.lp-courses-bar .search-courses input::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses input::-moz-placeholder{color:#999}.lp-courses-bar .search-courses input:-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses input:-moz-placeholder{color:#999}.lp-courses-bar .search-courses input::placeholder{color:#999}.lp-courses-bar .search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.lp-courses-bar .search-courses button i{font-size:1.2em;line-height:1.2}.lp-courses-bar .search-courses button:focus{outline:0}.lp-courses-bar .search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .switch-layout{align-items:center;justify-content:center}@media(max-width:768px){.lp-courses-bar .switch-layout{display:none}}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{margin:0;cursor:pointer;padding:8px 12px}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:6px;color:var(--lp-color-base,#333);font-family:\"lp-icon\";line-height:1.2;width:1em}.lp-courses-bar .switch-layout .switch-btn.grid{border-radius:var(--lp-border-radius,5px) 0 0 var(--lp-border-radius,5px);border:1px solid var(--lp-border-color,#e2e0db);border-right:0}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:\"\\f009\"}.lp-courses-bar .switch-layout .switch-btn.list{border-radius:0 var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0;border:1px solid var(--lp-border-color,#e2e0db);border-left:0}.lp-courses-bar .switch-layout .switch-btn.list::before{content:\"\\f03a\"}.lp-courses-bar .course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.lp-courses-bar .course-filter-btn-mobile{display:none}}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}.lp-courses-bar .search-courses input{min-width:240px;max-width:unset}}.switch-layout input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp_allow_repurchase_select>ul{padding:0;list-style:none}.lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp_allow_repurchase_select>a{display:inline-block;margin-top:10px;color:var(--lp-color-white,#fff);background-color:#222}.lp-single-offline-course .lp-single-offline-course-main{display:flex;gap:30px;margin-bottom:80px}.lp-single-offline-course .course-price .free{color:#3ab500}.lp-single-offline-course .course-price .origin-price{text-decoration:line-through;opacity:.6;margin-right:4px}.lp-single-offline-course__left{width:70%}.lp-single-offline-course__left>div{margin-bottom:32px}.lp-single-offline-course__left .learn-press-breadcrumb{display:flex;list-style:none;flex-wrap:wrap;gap:5px;font-size:var(--lp-font-size-base);align-items:center;margin-bottom:8px;padding:0}.lp-single-offline-course__left .learn-press-breadcrumb li{list-style:none;padding:0;margin:0}.lp-single-offline-course__left .course-title{display:block;font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 12px 0}.lp-single-offline-course__left .course-img img{width:100%}.lp-single-offline-course__left .lp-single-course-offline-info-one{margin-bottom:12px}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta{display:inline;line-height:1.4;margin-left:12px;padding-left:12px;border-left:1px solid #e2e0db}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta:first-child{margin:0;padding:0;border:0}.lp-single-offline-course__left .lp-single-course-offline-info-one .lp-item-wishlist.active{color:var(--lp-primary-color)}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info{display:inline-block}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info .ico-star{display:inline-block;vertical-align:sub;margin-right:4px}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info svg{height:22px}.lp-single-offline-course__left .instructor-description{margin-top:16px}.lp-single-offline-course__left .course-features ul,.lp-single-offline-course__left .course-target ul,.lp-single-offline-course__left .course-requirements ul{margin:0 0 0 20px;padding:0}.lp-single-offline-course__left .instructor-social{display:flex;gap:8px;margin-top:30px}.lp-single-offline-course__left .instructor-social a{width:37px;height:37px;display:inline-flex;align-items:center;justify-content:center;background-color:#f1f2f8;border-radius:50%}.lp-single-offline-course__left .instructor-social a:hover{background-color:var(--lp-primary-color)}.lp-single-offline-course__left .instructor-social a:hover i{color:#fff}.lp-single-offline-course__left .instructor-social a .lp-icon-facebook{color:#216bf6}.lp-single-offline-course__left .instructor-social a .lp-icon-twitter{color:#169df0}.lp-single-offline-course__left .instructor-social a .lp-icon-youtube-play{color:#ff0200}.lp-single-offline-course__left .instructor-social a .lp-icon-linkedin{color:#0078b7}.lp-single-offline-course__left .instructor-social a i{font-size:18px}.lp-single-offline-course__left .item-title{margin-bottom:30px}.lp-single-offline-course__left>img{margin-bottom:30px}.lp-single-offline-course__right{width:30%;position:relative}.lp-single-offline-course__right__sticky{position:sticky;top:0}.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{border:1px solid #e2e0db;padding:30px;margin-bottom:60px}@media(max-width:767px){.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{margin-bottom:30px}}.lp-single-offline-course .info-metas .info-meta-item,.lp-single-offline-course .course-featured-review .info-meta-item{display:flex;justify-content:space-between;border-bottom:1px solid #e2e0db;padding-bottom:16px;margin-bottom:16px;font-size:var(--lp-font-size-base)}.lp-single-offline-course .info-metas .info-meta-item:nth-last-of-type(2),.lp-single-offline-course .course-featured-review .info-meta-item:nth-last-of-type(2){border:0;padding-bottom:0;margin-bottom:0}.lp-single-offline-course .info-metas .info-meta-left,.lp-single-offline-course .course-featured-review .info-meta-left{display:inline-flex;align-items:center;gap:8px}.lp-single-offline-course .info-metas .info-meta-left>span,.lp-single-offline-course .course-featured-review .info-meta-left>span{min-width:16px}@media(min-width:992px){.lp-single-offline-course .info-metas.lp-is-mobile,.lp-single-offline-course .course-featured-review.lp-is-mobile{display:none}}@media(max-width:991px){.lp-single-offline-course .info-metas.lp-is-pc,.lp-single-offline-course .course-featured-review.lp-is-pc{display:none}}.lp-single-offline-course form.purchase-course,.lp-single-offline-course form.enroll-course,.lp-single-offline-course form.retake-course{width:100%}.lp-single-offline-course .course-buttons{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.lp-single-offline-course .course-buttons .lp-button{padding:12px 16px;border-radius:var(--lp-border-radius,3px);font-size:var(--button--font-size);line-height:1.5em;font-weight:600;width:100%}.lp-single-offline-course .course-buttons .lp-button.button{border:0}.lp-single-offline-course .course-buttons a.course-btn-extra{border-color:var(--lp-primary-color);color:var(--lp-primary-color)}.lp-single-offline-course .course-buttons a.course-btn-extra:focus,.lp-single-offline-course .course-buttons a.course-btn-extra:hover{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .course-buttons .button-purchase-course{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .featured-review__title{font-weight:bold;font-size:1.4rem;margin-top:10px}.lp-single-offline-course .course-featured-review{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;position:relative}.lp-single-offline-course .course-featured-review::before{background-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='56' height='56' viewBox='0 0 56 56' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Crect width='56' height='56' rx='28' fill='%23F2F1F8'\u002F%3E%3Cpath d='M17.425 40.5325C17.3136 40.5325 17.2015 40.5061 17.0958 40.4518C16.7823 40.2903 16.6073 39.9215 16.6673 39.5504L18.2548 31.142H12.7691C12.3442 31.142 12 30.7678 12 30.3058V15.5028C12 15.0409 12.3442 14.6666 12.7691 14.6666H25.8927C26.3176 14.6666 26.6618 15.0409 26.6618 15.5028V30.3051C26.6618 30.5046 26.5961 30.6979 26.4761 30.8501L18.0084 40.2406C17.8584 40.43 17.6442 40.5325 17.425 40.5325ZM13.5389 29.4689H19.1731C19.4009 29.4689 19.6165 29.5783 19.7629 29.7678C19.9093 29.9572 19.9707 30.2072 19.9307 30.451L18.6739 36.8314L25.1243 29.9953V16.3398H13.5389V29.4689Z' fill='%23121212'\u002F%3E%3Cpath d='M34.7609 40.5325C34.6495 40.5325 34.5374 40.5061 34.4317 40.4518C34.1182 40.2903 33.9433 39.9215 34.0033 39.5496L35.5907 31.1413H30.105C29.6801 31.1413 29.3359 30.767 29.3359 30.3051V15.5028C29.3359 15.0409 29.6801 14.6666 30.105 14.6666H43.2286C43.4329 14.6666 43.6285 14.7551 43.7728 14.912C43.917 15.0688 43.9977 15.2815 43.9977 15.5036V30.3058C43.9977 30.5054 43.9313 30.6987 43.8113 30.8509L35.3436 40.2414C35.1937 40.4308 34.9787 40.5333 34.7595 40.5333L34.7609 40.5325ZM30.8748 29.4689H36.509C36.7368 29.4689 36.9525 29.5783 37.0989 29.7678C37.2452 29.9572 37.3067 30.2072 37.2667 30.451L36.0099 36.8306L42.4603 29.9953V16.3398H30.8755L30.8748 29.4689Z' fill='%23121212'\u002F%3E%3C\u002Fsvg%3E%0A\");content:\"\";width:56px;height:56px;position:absolute;top:-25px}.lp-single-offline-course .featured-review__stars{order:3;color:var(--lp-primary-color)}.lp-single-offline-course .lp-list-courses-related .section-title{margin-bottom:40px}@media(max-width:991px){.lp-single-offline-course .lp-single-offline-course-main{flex-direction:column;margin-bottom:0}.lp-single-offline-course__left,.lp-single-offline-course__right{width:100%}}@media(max-width:767px){.lp-single-offline-course__left .lp-instructor-info{flex-direction:column}}.lp-archive-courses .course-detail-info{padding:28px 0 24px 0;color:var(--lp-color-white,#fff);background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info .course-title{margin:0 0 24px 0;border-bottom:1px solid rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);padding-bottom:24px}@media(min-width:769px){.lp-archive-courses .course-detail-info{overflow-x:hidden}.lp-archive-courses .course-detail-info .course-title,.lp-archive-courses .course-detail-info .course-meta-secondary,.lp-archive-courses .course-detail-info .course-meta-primary{padding-right:320px}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:\"\";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{right:100%;left:auto}.lp-archive-courses .course-detail-info::after{left:100%;right:auto}}.lp-archive-courses .course-detail-info .course-meta-secondary{margin-bottom:0}.lp-archive-courses .course-meta__pull-left{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;text-transform:capitalize;align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-right:8px;color:var(--lp-primary-color);font-family:\"lp-icon\"}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-right:8px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%;display:block}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:\"\\f017\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:\"\\f012\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:\"\\f0c5\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:\"\\f12e\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:\"\\f501\"}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:var(--lp-color-accent-1);font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300;line-height:1.5;display:block}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:var(--lp-color-white,#fff);text-transform:capitalize;text-decoration:none}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 4px}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column;justify-content:space-between}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}.lp-archive-courses .course-meta-primary{margin-bottom:20px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-right:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-right:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-180px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-left:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:var(--lp-color-white,#fff);background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:\"lp-icon\";font-size:1em;content:\"\\f004\"}.lp-archive-courses .course-summary-sidebar__inner>div{padding:20px;background:var(--lp-color-white,#fff)}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-weight:300;line-height:1.5em}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.lp-archive-courses .courses-btn-load-more{display:flex;align-items:center;gap:5px}.lp-archive-courses .course-wishlist:before{font-family:\"lp-icon\"}.lp-archive-courses .lp-course-curriculum ul{padding:0}.lp-single-course__header{background-color:#f1f2f8}.lp-single-course__header__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding);padding-top:40px;padding-bottom:40px}@media(max-width:767px){.lp-single-course__header__inner{padding-top:20px;padding-bottom:20px}}@media(min-width:992px){.lp-single-course__header__inner>*{width:calc(100% - 440px)}}.lp-single-course__header .learn-press-breadcrumb{display:flex;list-style:none;gap:4px;flex-wrap:wrap;margin-bottom:8px;padding:0}.lp-single-course__header .course-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 24px 0}@media(max-width:767px){.lp-single-course__header .course-title{margin:0 0 16px 0}}.lp-single-course__header .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:40px}@media(max-width:767px){.lp-single-course__header .course-instructor-category{margin-bottom:20px}}.lp-single-course__header .course-instructor-category>div>*{display:inline;vertical-align:middle}.lp-single-course__header .course-instructor-category label{font-size:inherit;font-weight:inherit}.lp-single-course__header .course-instructor-category a{text-decoration:none;color:inherit}.lp-single-course__header .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.lp-single-course__header .lp-single-course-info-one{display:flex;column-gap:20px;row-gap:8px;flex-wrap:wrap}.lp-single-course__header .lp-single-course-info-one .star-info{display:inline-flex;align-items:center;gap:4px;padding-right:20px;position:relative}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:\"\";right:0;left:auto;width:1px;height:20px;position:absolute;background-color:var(--lp-border-color,#e2e0db)}@media(max-width:500px){.lp-single-course__header .lp-single-course-info-one .star-info{padding-right:0}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:none}}.lp-single-course__header .lp-single-course-info-one .ico-star,.lp-single-course__header .lp-single-course-info-one .lp-review-svg-star{display:inline-flex;align-items:center}.lp-single-course .lp-single-course-main{padding:40px 0 80px;display:flex;column-gap:60px;row-gap:30px;flex-wrap:wrap}@media(max-width:1500px){.lp-single-course .lp-single-course-main{column-gap:30px}}@media(max-width:991px){.lp-single-course .lp-single-course-main{flex-direction:column-reverse;padding:40px 0}}.lp-single-course .lp-single-course-main__left{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 410px)}}@media(min-width:1501px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 440px)}}.lp-single-course .lp-single-course-main__left>div{margin-bottom:40px}@media(max-width:767px){.lp-single-course .lp-single-course-main__left>div{margin-bottom:30px}}.lp-single-course .lp-single-course-main__left>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 20px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}@media(max-width:767px){.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 16px 0}}.lp-single-course .lp-single-course-main__left .extra-box ul{margin:0 0 0 20px;padding:0}.lp-single-course .lp-single-course-main__left .comments-area{width:100%;max-width:100%;margin:0}.lp-single-course .lp-single-course-main__right{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__right{width:380px;margin-top:-280px}}.lp-single-course .lp-single-course-main__right__inner{position:sticky;top:0;background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .lp-single-course-main__right__inner>div{margin-bottom:20px}.lp-single-course .lp-single-course-main__right__inner>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-item{display:flex;gap:4px;margin-bottom:12px}.lp-single-course .lp-single-course-main .info-metas .info-meta-item:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-left{display:flex;gap:8px;align-items:center}.lp-single-course .lp-single-course-main .info-metas i{color:var(--lp-primary-color,#ffb606)}.lp-single-course .lp-single-course-main .course-img{margin-bottom:20px;overflow:hidden;margin:-20px -20px 20px -20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .lp-single-course-main .course-img img{max-width:100%;display:block}.lp-single-course .lp-single-course-main .course-price{display:block;margin-bottom:20px}.lp-single-course .lp-single-course-main .course-price .free{color:#3ab500;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-single-course-main .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:var(--lp-font-size-base,1em);margin-right:4px}.lp-single-course .lp-single-course-main .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.lp-single-course .lp-single-course-main .course-buttons{display:flex;flex-direction:column;gap:8px}.lp-single-course .lp-single-course-main .course-buttons form,.lp-single-course .lp-single-course-main .course-buttons .lp-button{width:100%}.lp-single-course .lp-single-course-main .course-buttons .lp-button{background-color:var(--lp-primary-color,#ffb606);border:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.lp-single-course .lp-single-course-main .course-buttons .lp-button:hover{background-color:var(--lp-secondary-color);border-color:var(--lp-secondary-color)}.lp-single-course .lp-single-course-main .course-buttons .learn-press-message{margin:0}.lp-single-course .lp-single-course-main .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-list-courses-related{margin:0 0 40px 0}@media(max-width:767px){.lp-single-course .lp-list-courses-related{margin:0 0 20px 0}}.lp-single-course .lp-list-courses-related .section-title{margin:0 0 40px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}.lp-single-course .course-detail-info__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-right:var(--lp-cotainer-padding);padding-left:var(--lp-cotainer-padding)}.lp-single-course .course-detail-info .course-meta{gap:16px;flex-wrap:wrap}@media(min-width:769px){.lp-single-course .course-detail-info .course-meta__pull-left{width:calc(100% - 340px);max-width:100%;margin:0}}.lp-single-course .course-tabs .course-faqs__title,.lp-single-course .course-tabs .course-material__title{display:none}.lp-single-course .course-summary-sidebar__inner{background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*{padding:0;margin-bottom:20px}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*:last-child{margin-bottom:0}.lp-single-course .course-summary-sidebar .course-img{margin:-20px -20px 20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .course-summary-sidebar .course-img img{max-width:100%;width:100%;height:auto}.lp-single-course .course-summary-sidebar .course-price{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:700}.lp-single-course .course-summary-sidebar .course-price .free{color:#3ab500}.lp-single-course .course-summary-sidebar .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);margin-right:4px;font-weight:normal}.lp-single-course button{font-size:1em}.course-featured{padding:4px 12px;border-radius:var(--lp-border-radius,5px);background-color:#ff3b30;color:white;text-transform:uppercase;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:var(--lp-font-weight-link,600);margin-bottom:12px;display:inline-block}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:30px;margin-top:30px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:1.125em;font-weight:600}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .origin-price{margin-right:10px;font-size:1.125em;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:1.5em}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px;text-align:center}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2em;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color)}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-style:italic}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;right:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:\"‘‘\";transform:rotate(180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:.75em;line-height:1}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-students::before{font-family:\"lp-icon\";content:\"\"}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap;gap:50px}@media(max-width:767px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:20px}}@media(max-width:560px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{grid-template-columns:repeat(2,1fr)}}.course-meta.course-meta-primary .course-meta__pull-left .meta-item{margin-right:0 !important}@media(max-width:560px){.course-meta.course-meta-primary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left{gap:16px}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-right:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta.two-columns .course-meta{flex:1}.lp-single-course .comment-form .comment-form-url,.lp-single-course .comment-form .comment-form-email,.lp-single-course .comment-form .comment-form-author,.lp-single-course .comment-form .comment-form-comment,.wp-block-learnpress-course-comment .comment-form .comment-form-url,.wp-block-learnpress-course-comment .comment-form .comment-form-email,.wp-block-learnpress-course-comment .comment-form .comment-form-author,.wp-block-learnpress-course-comment .comment-form .comment-form-comment{display:flex;flex-direction:column;gap:1rem}.lp-single-course .comment-form input[type=url],.lp-single-course .comment-form input[type=text],.lp-single-course .comment-form input[type=email],.lp-single-course .comment-form textarea,.wp-block-learnpress-course-comment .comment-form input[type=url],.wp-block-learnpress-course-comment .comment-form input[type=text],.wp-block-learnpress-course-comment .comment-form input[type=email],.wp-block-learnpress-course-comment .comment-form textarea{padding:12px 20px;outline:0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.lp-single-course .comment-form input[type=submit],.wp-block-learnpress-course-comment .comment-form input[type=submit]{border-radius:var(--lp-border-radius,5px)}.course-summary-sidebar{--lp-button-background-color:#28303d;--lp-button-color:#d1e4dd;position:relative}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .has-global-padding{padding-right:0;padding-left:0}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500;background-color:var(--lp-button-background-color);color:var(--lp-button-color);border:0}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1em;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:1em;font-weight:300;line-height:1em;text-align:right}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}.lp-course-buttons:empty{display:none}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:var(--lp-primary-color);font-size:1.3em;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:var(--lp-primary-color);font-size:1.3em;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 10px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top;width:100%}.course-sidebar-preview .course-wishlist{float:none}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{color:#666;font-size:1em;font-weight:300;margin-bottom:0}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-weight:300}.course-sidebar-preview>*:last-child{margin-bottom:0}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-left:1px solid var(--lp-border-color,#e2e0db);padding-left:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-left:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none;color:var(--lp-button-background-color)}.learnpress-page:hover{text-decoration:none}.lp-sidebar-toggle__close .content-item-wrap .quiz-buttons.align-center .button-left.fixed{margin-left:0 !important}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:right}#popup-course{display:flex;position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0;background:var(--lp-bg-color-lesson,#fff)}#popup-course .wp-block-learnpress-item-close .back-course{padding:24px}#popup-course .back-course{padding-left:24px;padding-right:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-left:15px;padding-right:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-left:15px;padding-right:15px;column-gap:10px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column;gap:5px}#popup-course .popup-header__inner.can-finish-course .items-progress{display:none}}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:right}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid var(--lp-border-color,#e2e0db);border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid var(--lp-border-color,#e2e0db);line-height:2.25em}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-left:10px;font-size:.8em;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 5px 0 0}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #ebf8e5;border-radius:5px}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-header{display:flex;position:fixed;z-index:100;right:0;left:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);align-items:center;transition:left .35s cubic-bezier(0.4,0,0.2,1);will-change:left;transform:translateZ(0)}#popup-header .course-title{margin:0;padding:0;font-size:var(--lp-font-size-base,1em);letter-spacing:unset}#popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-decoration:none}#popup-header .course-title a:hover{color:var(--lp-primary-color)}#popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}#popup-header .number{padding-right:10px;color:#fff;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300}#popup-header .lp-button{display:flex;position:relative;height:auto;border:0;color:#fff;background:var(--lp-primary-color);white-space:nowrap;padding:6px 15px;font-size:1rem}#popup-header .lp-button:hover{opacity:.8}#popup-header .lp-button-back{float:right;margin:9px 10px}#popup-header .lp-button-back button::before,#popup-header .lp-button-back button::after{content:\"\"}#popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;transition:flex-basis .35s cubic-bezier(0.4,0,0.2,1);will-change:flex-basis;transform:translateZ(0)}#popup-sidebar .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}#popup-sidebar .search-course input[name=s]{display:block;width:100%;padding-left:20px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;font-size:1rem}#popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-sidebar .search-course input[name=s]:focus{outline:0}#popup-sidebar .search-course button{position:absolute;top:0;right:12px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none;font-size:1rem}#popup-sidebar .search-course button:focus{outline:0}#popup-sidebar .search-course button i{color:var(--lp-color-accent,#666);width:24px;display:flex;justify-content:center}#popup-sidebar .search-course button.clear{display:none}#popup-sidebar .search-course button.clear::before{content:\"\\f00d\"}#popup-sidebar .search-course.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}#popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-sidebar .course-curriculum::-webkit-scrollbar{width:8px}#popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;right:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-sidebar .section.section-empty .section-header{margin:0}#popup-sidebar .section-header{position:sticky;z-index:1000;top:0;padding:20px 16px;cursor:pointer;background-color:var(--lp-bg-color-lesson,#fff)}#popup-sidebar .section-header .section-title .show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f0d7\"}#popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-sidebar .section-header .section-toggle i{color:var(--lp-color-accent,#666)}#popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-sidebar .section-content{margin-bottom:0}#popup-sidebar .curriculum-more{padding-right:16px;padding-left:16px}#popup-sidebar .course-item>span{display:none}#popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-sidebar .course-item::after{content:\"\"}#popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-sidebar .lp-course-curriculum .course-section{--lp-border-radius:0;border-left:0}#popup-sidebar .lp-course-curriculum .lp-course-curriculum__title,#popup-sidebar .lp-course-curriculum .course-curriculum-info,#popup-sidebar .lp-course-curriculum .course-section__description{display:none}#popup-sidebar .lp-course-curriculum .course-item.current:before{background:var(--lp-primary-color,#ffb606)}#popup-sidebar .lp-course-curriculum .course-item__content{flex-direction:column;row-gap:0}#popup-sidebar .lp-course-curriculum .course-item__right{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}#popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-left:15px;padding-right:15px}#popup-content .lp-button{position:relative;margin:0;padding:8px 25px;border-color:var(--lp-border-color,#e2e0db)}#popup-content .lp-button.instant-check .instant-check__icon{margin-right:5px}#popup-content .lp-button.instant-check .instant-check__icon::before{font-family:\"lp-icon\";content:\"\\f058\"}#popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;left:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:var(--lp-white-grey,#f7f7fb);color:var(--lp-color-base,#333);white-space:nowrap;text-transform:none}@media(max-width:600px){#popup-content .lp-button.instant-check .instant-check__info{white-space:normal;width:90vw}}#popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible}#popup-content .lp-button.instant-check.loading::before{display:none}#popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:\"\\f110\"}#popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;border-color:transparent;color:#fff;background:#3db748;align-items:center;justify-content:center;float:left}#popup-content .lp-button.completed i{margin-left:9px;font-size:.8em}#popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-content.fixed-quiz-status .quiz-status>div{padding:0}#popup-content::-webkit-scrollbar{width:8px}#popup-content::-webkit-scrollbar-thumb{background:#ccc}#popup-content::-webkit-scrollbar-track{background:#f5f5f5}#popup-footer{position:fixed;z-index:99;right:0;bottom:0;left:475px;width:100%;max-width:792px;height:auto;margin:0 auto;border-top:1px solid #ebebeb;background:var(--lp-bg-color-lesson,#fff);transition:left .35s cubic-bezier(0.4,0,0.2,1);will-change:left;transform:translateZ(0)}@media(max-width:1024px){#popup-footer{width:auto;padding:0 15px}}#popup-footer .course-item-nav{justify-content:space-between}#popup-footer .course-item-nav .prev,#popup-footer .course-item-nav .next{display:flex;line-height:3.125em}#popup-footer .course-item-nav .prev a,#popup-footer .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666)}#popup-footer .course-item-nav .prev::before,#popup-footer .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}#popup-footer .course-item-nav .prev:hover a,#popup-footer .course-item-nav .prev:hover::before,#popup-footer .course-item-nav .next:hover a,#popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-footer .course-item-nav .next::before{margin-left:10px;content:\"\\f0da\"}#popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-footer .prev::before{margin-right:10px;content:\"\\f0d9\"}#popup-footer .prev .course-item-nav__name{right:auto;left:-30px}#popup-footer .prev .course-item-nav__name::before{right:auto;left:5px}@media(max-width:1024px){#popup-footer .prev .course-item-nav__name{left:15px}}#popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;right:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){#popup-footer .course-item-nav__name{top:-25px;right:15px;left:auto}}#sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}#sidebar-toggle:after{display:none}#sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}#sidebar-toggle:focus{border:0;outline:0}.course-item-popup #tab-curriculum{display:block}.course-item-popup .course-curriculum ul.curriculum-sections{z-index:9}.course-item-popup .lp-course-curriculum .course-section .course-item__content{flex-direction:column;row-gap:4px}body.course-item-popup{overflow-y:hidden}@media(max-width:1200px){body.course-item-popup #learn-press-course-curriculum{width:300px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum{margin-right:0}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .course-curriculum{width:200px}}@media(max-width:1300px){body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .items-progress,body.course-item-popup #learn-press-course-curriculum .course-progress{float:none;width:100%;margin-right:0;margin-bottom:20px}}@media(max-width:1300px){body.course-item-popup #content-item-nav{left:300px}}@media(max-width:768px){body.course-item-popup #content-item-nav{left:200px}}@media(max-width:1300px){body.course-item-popup .section-desc{display:none}}@media(max-width:768px){body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #sidebar-toggle::before{content:\"\\f0da\"}body.lp-sidebar-toggle__close #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-header,body.lp-sidebar-toggle__close #popup-footer{left:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #sidebar-toggle::before{content:\"\\f0da\"}body:not(.lp-sidebar-toggle__open) #popup-sidebar{flex:0}}@media screen and (max-width:480px){#popup-header,#popup-footer{width:100%}.learnpress-v4 #popup-header,.lp-4 #popup-header,.learnpress-v4 #popup-footer,.lp-4 #popup-footer{width:auto}.learnpress-v4.starkid #popup-header,.learnpress-v4.starkid #popup-footer{width:100%}#popup-content{min-width:100vw}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{left:300px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{left:300px}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;--lp-item-padding:60px;padding-top:var(--lp-item-padding);padding-bottom:var(--lp-item-padding)}@media(max-width:1024px){.content-item-wrap{width:100%;--lp-item-padding:40px}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);font-weight:700}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap .content-item-summary:after{clear:both;content:\"\";display:block}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description .wp-video,.content-item-wrap .content-item-description .mejs-container{margin-bottom:15px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:10px;margin-bottom:15px;letter-spacing:unset}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-weight:300}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center;gap:10px}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 0 0 15px}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:999;bottom:0;left:50%;width:100%;max-width:792px;height:auto;margin-left:237px;transform:translateX(-50%);background:#fff;padding-bottom:10px}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-left:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .questions-pagination .nav-links{text-align:center;display:flex;justify-content:center;gap:4px;margin-top:6px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:10px 15px;margin:0;color:var(--lp-color-base,#333);background-color:transparent;font-weight:normal;border:1px solid var(--lp-border-color,#e2e0db);line-height:1;border-radius:var(--lp-border-radius,5px)}.content-item-wrap .questions-pagination .nav-links .page-numbers.dots{border:0}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}@media(max-width:575px){.content-item-wrap .questions-pagination .nav-links{margin-top:10px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:5px 10px}}.course-curriculum .section-title{position:relative;margin-bottom:0}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;right:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:var(--lp-border-color,#e2e0db)}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}.social-share-toggle{position:relative;display:flex;gap:20px}.social-share-toggle .share-toggle-icon{cursor:pointer;display:flex;align-items:center;gap:8px}.social-share-toggle .share-toggle-icon .share-label{margin:0;cursor:pointer}.social-share-toggle .share-toggle-icon:hover{color:var(--lp-primary-color,#ffb606)}.social-share-toggle .content-widget-social-share{padding:20px;background:#fff;box-shadow:0 1px 16px 0 rgba(0,0,0,0.12)}.social-share-toggle .lp-social-media{display:inline-flex;padding:0;gap:12px;margin:0}.social-share-toggle .lp-social-media>li{text-align:center;list-style:none}.social-share-toggle .lp-social-media>li span{display:none}.social-share-toggle .lp-social-media>li i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.social-share-toggle .lp-social-media>li i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.social-share-toggle .clipboard-post{display:flex;justify-content:space-between;margin-bottom:20px;gap:12px}.social-share-toggle .btn-clipboard{position:relative;padding:12px 20px;white-space:nowrap}.social-share-toggle .btn-clipboard .tooltip{display:none;position:absolute;z-index:2;left:50%;right:auto;bottom:100%;transform:translateX(-50%);width:max-content;color:#fff;font-size:.825em;padding:5px 10px;background:rgba(0,0,0,0.72);border-radius:3px;margin-bottom:10px}.social-share-toggle .btn-clipboard .tooltip:before{content:\"\";position:absolute;z-index:2;left:50%;bottom:-5px;margin-left:-3px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid rgba(0,0,0,0.72)}.social-share-toggle .btn-clipboard:hover{background-color:#eee}.social-share-toggle .btn-clipboard:hover .tooltip{display:block}.social-share-toggle .clipboard-value{border:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;flex:1}@media(max-width:600px){.social-share-toggle .clipboard-value{width:100%}}.social-share-toggle .wrapper-content-widget{visibility:hidden;text-align:left;opacity:0;-webkit-transition:all .27s ease;-moz-transition:all .27s ease;-o-transition:all .27s ease;transition:all .27s ease;position:absolute;right:0;top:auto;z-index:9;margin-top:20px}.social-share-toggle.social-share-toggle__open .wrapper-content-widget{margin-top:0;visibility:visible;opacity:1}@media(max-width:768px){.social-share-toggle .wrapper-content-widget{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.7)}.social-share-toggle .wrapper-content-widget .content-widget-social-share{position:relative;z-index:1;max-width:fit-content;top:50%;min-width:320px;transform:translateY(-50%);margin:0 auto}}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;right:0;left:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:left;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:right}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;right:0;bottom:0;left:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;left:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(-50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;left:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;left:0}.course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.course-curriculum .section-header .section-left{display:flex;align-items:center;gap:16px}.course-curriculum .section-header .section-left .wrapper-section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer;min-width:1em}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-angle-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-angle-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up,.course-curriculum .section.closed .section-toggle .lp-icon-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-material-skeleton{overflow:auto}.lp-material-skeleton .course-material-table{width:100%}.lp-material-skeleton .course-material-table th{text-align:center}.lp-material-skeleton .course-material-table th:first-child{text-align:left}.lp-material-skeleton .course-material-table tr td:not(:first-child){text-align:center}.lp-material-skeleton .course-material-table tfoot td{text-align:left;font-weight:bold}.lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}#popup-content .lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-right:0;padding-left:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-right:auto;margin-left:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.theme-twentytwentytwo .wp-container-11 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-9 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-12 .alignfull,.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important}.learnpress.twentytwentyone .lp-archive-courses a:focus,.learnpress.theme-twentytwentyone .lp-archive-courses a:focus{background:transparent !important;text-decoration:none !important;outline:none !important}.learnpress.twentytwentyone .pagination,.learnpress.twentytwentyone .comments-pagination,.learnpress.theme-twentytwentyone .pagination,.learnpress.theme-twentytwentyone .comments-pagination{border-top:0;padding-top:0}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part,.learnpress.theme-twentytwentyone .wp-site-blocks .wp-block-template-part{padding-left:15px;padding-right:15px}}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb{max-width:var(--lp-container-max-width);width:100%;margin:0 auto;padding:1em var(--lp-cotainer-padding);list-style:none}ul.learn-press-breadcrumb li{display:inline-block;margin:0}ul.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb i{margin:0 8px}ul.learn-press-breadcrumb a{color:inherit}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:left}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:left}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:left}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}@media(max-width:1024px){body.learnpress-page{--lp-cotainer-padding:1rem}}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:\"\"}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-entry-content .course-tabs{margin-bottom:40px}form.retake-course,form.enroll-course,form.purchase-course{display:inline-flex;flex-direction:column;gap:10px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}ul.list-table-nav{display:flex;margin-left:0;list-style:none}ul.list-table-nav .nav-text{text-align:left;flex:1}ul.list-table-nav .nav-pages{text-align:right;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:var(--lp-primary-color)}.primary-color-before::before{color:var(--lp-primary-color)}.primary-color-after::after{color:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.course-origin-price{margin-right:5px;font-size:85%;text-decoration:line-through}.content-item-wrap #comments{margin-right:0;margin-left:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-right:0}}.course-price:empty{display:none !important}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -2382,7 +2382,7 @@\n   opacity: 0;\n   visibility: hidden;\n   cursor: pointer;\n-  background-color: var(--lp-white-grey, #F7F7FB);\n+  background-color: var(--lp-white-grey, #f7f7fb);\n   border-radius: 50%;\n }\n @media (max-width: 767px) {\n@@ -2476,7 +2476,8 @@\n .lp-user-profile .lp-profile-nav-tabs > li.active {\n   background: var(--lp-primary-color);\n }\n-.lp-user-profile .lp-profile-nav-tabs > li.active > a, .lp-user-profile .lp-profile-nav-tabs > li.active > a i {\n+.lp-user-profile .lp-profile-nav-tabs > li.active > a,\n+.lp-user-profile .lp-profile-nav-tabs > li.active > a i {\n   color: #fff;\n }\n .lp-user-profile .lp-profile-nav-tabs > li:not(.active):hover {\n@@ -2528,7 +2529,8 @@\n     overflow-x: scroll;\n   }\n }\n-.lp-user-profile .lp-profile-content .course-categories, .lp-user-profile .lp-profile-content .course-instructor {\n+.lp-user-profile .lp-profile-content .course-categories,\n+.lp-user-profile .lp-profile-content .course-instructor {\n   margin-bottom: 14px;\n }\n .lp-user-profile .lp-profile-content .course-categories {\n@@ -2696,6 +2698,47 @@\n .learn-press-profile-course__statistic {\n   margin-bottom: 32px;\n }\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder {\n+  display: flex;\n+  align-items: flex-end;\n+  justify-content: space-between;\n+  gap: 16px;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-filters {\n+  flex: 1 1 auto;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link {\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  padding: 8px 16px;\n+  margin-bottom: 8px;\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: 6px;\n+  color: var(--lp-primary-color, #ffb606);\n+  font-size: 0.875em;\n+  font-weight: 600;\n+  line-height: 1;\n+  text-decoration: none;\n+  white-space: nowrap;\n+  transition: all 0.2s ease;\n+}\n+.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:hover, .learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:focus {\n+  background: var(--lp-primary-color, #ffb606);\n+  border-color: var(--lp-primary-color, #ffb606);\n+  color: #fff;\n+  text-decoration: none;\n+}\n+@media (max-width: 768px) {\n+  .learn-press-profile-course__tab .learn-press-tabs--with-course-builder {\n+    flex-direction: column;\n+    align-items: stretch;\n+  }\n+  .learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link {\n+    width: 100%;\n+    margin: 0 0 16px;\n+  }\n+}\n .learn-press-profile-course__progress .lp_profile_course_progress__item img {\n   width: 100%;\n   aspect-ratio: 16\u002F9;\n@@ -2703,34 +2746,42 @@\n   height: auto;\n   display: block;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td, .learn-press-profile-course__progress .lp_profile_course_progress__item th {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th {\n   text-align: center;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child, .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n   width: 15%;\n   padding: 0;\n }\n @media (max-width: 768px) {\n-  .learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child, .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n+  .learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,\n+  .learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child {\n     display: none;\n   }\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) {\n   width: 25%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a, .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a {\n   display: -webkit-box;\n   -webkit-line-clamp: 2;\n   -webkit-box-orient: vertical;\n   overflow: hidden;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3) {\n   width: 10%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4) {\n   width: 25%;\n }\n-.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5), .learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5) {\n+.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),\n+.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5) {\n   width: 25%;\n }\n @media (max-width: 768px) {\n@@ -7513,11 +7564,9 @@\n   border-bottom: 1px solid #d9e0f1;\n   background: var(--lp-secondary-color);\n   align-items: center;\n-  -webkit-transition: right 0.25s;\n-  -moz-transition: right 0.25s;\n-  -ms-transition: right 0.25s;\n-  -o-transition: right 0.25s;\n-  transition: right 0.25s;\n+  transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: left;\n+  transform: translateZ(0);\n }\n #popup-header .course-title {\n   margin: 0;\n@@ -7584,11 +7633,9 @@\n   position: relative;\n   box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.1);\n   flex: 0 0 475px;\n-  -webkit-transition: 0.25s;\n-  -moz-transition: 0.25s;\n-  -ms-transition: 0.25s;\n-  -o-transition: 0.25s;\n-  transition: 0.25s;\n+  transition: flex-basis 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: flex-basis;\n+  transform: translateZ(0);\n }\n #popup-sidebar .search-course {\n   display: flex;\n@@ -7859,11 +7906,9 @@\n   margin: 0 auto;\n   border-top: 1px solid #ebebeb;\n   background: var(--lp-bg-color-lesson, #fff);\n-  -webkit-transition: right 0.25s;\n-  -moz-transition: right 0.25s;\n-  -ms-transition: right 0.25s;\n-  -o-transition: right 0.25s;\n-  transition: right 0.25s;\n+  transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n+  will-change: left;\n+  transform: translateZ(0);\n }\n @media (max-width: 1024px) {\n   #popup-footer {\n@@ -8945,7 +8990,7 @@\n   flex: 1;\n }\n .swal2-popup .swal2-actions button.swal2-confirm {\n-  background-color: #E02200;\n+  background-color: #e02200;\n }\n .swal2-popup .swal2-actions button.swal2-cancel {\n   background-color: transparent;\n@@ -8953,7 +8998,7 @@\n   color: inherit;\n }\n .swal2-popup .swal2-warning {\n-  color: #E02200;\n+  color: #e02200;\n   border-color: transparent;\n   background-color: rgba(223, 0, 0, 0.1019607843);\n }\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress-rtl.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress-rtl.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Flearnpress-rtl.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Flearnpress-rtl.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-right:15px;padding-left:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-tabs{margin-bottom:32px;position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs__nav{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-tabs__item{position:relative;margin:0;list-style:none}.learn-press-tabs__item>a{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-tabs__item>a:focus{outline:0;text-decoration:none}.learn-press-tabs__item::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-tabs__item.active a,.learn-press-tabs__item:hover a{color:var(--lp-primary-color,#ffb606)}.learn-press-tabs__item.active::after,.learn-press-tabs__item:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}@media(max-width:990px){.learn-press-tabs__nav,.learn-press-tabs .learn-press-filters{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;scroll-behavior:smooth}.learn-press-tabs__nav::-webkit-scrollbar,.learn-press-tabs .learn-press-filters::-webkit-scrollbar{display:none}}.learn-press-filters{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-filters li{position:relative;margin:0;list-style:none}.learn-press-filters li a,.learn-press-filters li span{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-filters li a:focus,.learn-press-filters li span:focus{outline:0;text-decoration:none}.learn-press-filters li a::after,.learn-press-filters li span::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-filters li a.active,.learn-press-filters li a:hover,.learn-press-filters li span.active,.learn-press-filters li span:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li a.active::after,.learn-press-filters li a:hover::after,.learn-press-filters li span.active::after,.learn-press-filters li span:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a,.learn-press-filters li.active span{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a::after,.learn-press-filters li.active span::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li:after{display:none !important}.wrapper-course-nav-tabs{position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125em}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;align-items:start}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column;align-items:center}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:24px}}.course-tab-panel .lp-course-author img{width:100px;height:100px;border-radius:50%;object-fit:cover;object-position:center;display:block;margin:0 auto}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:4px}.course-tab-panel .lp-course-author .author-title a{text-decoration:none;color:var(--lp-color-base,#333);box-shadow:none;font-size:1.125em;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-style:italic}.course-tab-panel .lp-course-author .instructor-social{display:flex;gap:16px;margin-bottom:12px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center;margin-top:16px}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:.8em;line-height:2em;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:\"\\f0d5\"}.course-tab-panel .lp-course-curriculum__title{display:none}.learn-press-nav-tabs{margin:0;display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-nav-tabs li{position:relative;margin:0;list-style:none}.learn-press-nav-tabs li label{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-nav-tabs li label:focus{outline:0;text-decoration:none}.learn-press-nav-tabs li::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-nav-tabs li.active label,.learn-press-nav-tabs li:hover label{color:var(--lp-primary-color,#ffb606)}.learn-press-nav-tabs li.active::after,.learn-press-nav-tabs li:hover::after{background:var(--lp-primary-color,#ffb606)}.TabsDragScroll{position:relative}.TabsDragScroll:hover{cursor:all-scroll}.TabsDragScroll ul{max-width:100%;white-space:nowrap;scroll-behavior:smooth;user-select:none;overflow-x:auto;flex-wrap:nowrap}.TabsDragScroll ul::-webkit-scrollbar{display:none}.TabsDragScroll ul.dragging{scroll-behavior:unset;cursor:all-scroll}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:1.5em;font-weight:600;line-height:1}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:\"lp-icon\";font-size:14px;line-height:1;content:\"\\f00c\";border:0;transform:none}.lp-checkout-form .lp-checkout-remember a{color:#666;font-weight:300;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px}.lp-checkout-form .lp-form-fields input:not([type=checkbox]){line-height:normal;width:100%;padding:10px 15px;border:1px solid #ccc}.lp-checkout-form .lp-form-fields input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:var(--lp-primary-color,#ffb606)}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-weight:400}.lp-checkout-form .lp-guest-switch-login a{display:inline-block}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:\"\"}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:4px}#checkout-order .cart-item:first-child td{border-top:0}#checkout-order td,#checkout-order th{border-left:0;border-right:0;background:transparent}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order table{width:100%;margin:0;border:0}#checkout-order .course-name{font-weight:600}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-weight:600;text-align:left}#checkout-order tfoot{font-size:1.2em}#checkout-order tfoot th{font-weight:600;padding-right:0}#checkout-order tfoot .order-total{font-size:1.4em}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail img{width:100px;max-width:100% !important;height:auto !important}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid var(--lp-border-color,#e2e0db);resize:none}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{margin-top:5px;opacity:.5;font-size:.75em;font-weight:normal;margin-right:10px}#checkout-payment .secure-connection i{margin-left:5px;font-size:1.125em}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:\"\"}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}.lp-terms-and-conditions{color:#666}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:2.5rem;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid var(--lp-border-color,#e2e0db);background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.learn-press-checkout-comment h4{display:none}.lp-content-area .order_details{width:100%;border-collapse:collapse}.lp-content-area .order_details th a,.lp-content-area .order_details td a{color:var(--lp-primary-color)}.learnpress-checkout .learnpress>.learn-press-message{max-width:var(--lp-container-max-width);margin:0 auto}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}.learnpress table{width:100%;margin:0 auto 1em auto;border-spacing:0;border-collapse:collapse}.learnpress table th,.learnpress table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;text-align:right}.learnpress table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.learnpress table thead th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-size:1.1em;font-weight:600}.learnpress table tbody,.learnpress table tfoot{box-sizing:border-box}.learnpress table tbody td,.learnpress table tbody th,.learnpress table tfoot td,.learnpress table tfoot th{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.learnpress table tbody td a,.learnpress table tbody th a,.learnpress table tfoot td a,.learnpress table tfoot th a{color:inherit;text-decoration:none}.learnpress table tbody td a:hover,.learnpress table tbody th a:hover,.learnpress table tfoot td a:hover,.learnpress table tfoot th a:hover{color:var(--lp-primary-color)}.learnpress table tbody tr .column-status .result-percent,.learnpress table tfoot tr .column-status .result-percent{font-weight:500}.learnpress table tbody tr .column-status .lp-label,.learnpress table tfoot tr .column-status .lp-label{font-weight:600}.learnpress table tbody tr:nth-child(even) td,.learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.learnpress table .list-table-nav td{font-size:.875em}.learnpress table .list-table-nav td.nav-text{text-align:right}.learnpress table .list-table-nav td.nav-pages{text-align:left}.learnpress table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.learnpress table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-weight:300}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.lp-profile-content .learn-press-form .form-fields{margin:0 -15px !important}.lp-profile-content .learn-press-form .form-fields .form-field{padding-right:15px;padding-left:15px}@media(min-width:767px){.lp-profile-content .learn-press-form .form-fields .form-field__50{width:50%;float:right}}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field>label{font-style:italic}.learn-press-form .form-fields .form-field label{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:700;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field input[type=tel],.learn-press-form .form-fields .form-field input[type=url],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field textarea{width:100%;border:1px solid var(--lp-border-color,#e2e0db);padding:8px 16px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field input[type=email]:focus,.learn-press-form .form-fields .form-field input[type=text]:focus,.learn-press-form .form-fields .form-field input[type=password]:focus,.learn-press-form .form-fields .form-field input[type=tel]:focus,.learn-press-form .form-fields .form-field input[type=url]:focus,.learn-press-form .form-fields .form-field input[type=number]:focus,.learn-press-form .form-fields .form-field textarea:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:.875em;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk,.learn-press-form .form-fields .form-field .required{color:red}.learn-press-form.completed button::before{margin-left:10px;font-family:\"lp-icon\";font-size:1.125em;content:\"\\f00c\"}.learn-press-form .form-field__clear{clear:both}.learn-press-form form>p>label{display:flex;gap:8px}.learn-press-form p{margin:0}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{padding:12px 16px;width:100%;border-radius:var(--lp-border-radius,5px);outline:0;color:#fff;background:var(--lp-primary-color)}.required label{font-weight:bold}.required label:after{content:\" *\";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative;width:100%}.lp-password-input input[type=password]{padding-left:2.5em}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:\"lp-icon\";content:\"\\f06e\"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:\"\\f070\"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}.become-teacher-form .become-teacher-form__description{margin-top:12px}.become-teacher-form button{padding:12px 24px}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-user-cover-image_background{position:relative}.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image{opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image{position:absolute;bottom:0;left:0;background:var(--lp-white-grey,#f7f7fb);padding:12px 20px;border-radius:0 var(--lp-border-radius,5px) 0 var(--lp-border-radius,5px);text-transform:capitalize;cursor:pointer;color:var(--lp-primary-color,#ffb606);text-decoration:none;opacity:0;visibility:hidden}@media(max-width:767px){.lp-user-cover-image_background .lp-btn-to-edit-cover-image{font-size:0;padding:4px 12px;opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image:before{font-family:\"lp-icon\";content:\"\\f044\";font-size:16px}}.lp-user-cover-image__display{width:100%}@media(max-width:767px){.lp-user-cover-image{position:relative;z-index:1}}.lp-user-cover-image .lp-cover-image-empty{display:flex;align-items:center;width:100%;height:250px;border:2px dashed var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;position:relative;text-align:center}.lp-user-cover-image .lp-cover-image-empty:hover{border-color:var(--lp-primary-color,#ffb606)}.lp-user-cover-image .lp-cover-image-empty input[type=file]{position:absolute;top:0;right:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:10}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{z-index:1;flex:1;position:relative;padding:0 16px;line-height:1.3}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top{font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-direction:column}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image{font-size:32px;transform:rotate(90deg)}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before{color:var(--lp-primary-color);content:\"\\f08b\"}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom{opacity:.7}@media(max-width:420px){.lp-user-cover-image .lp-cover-image-empty{height:200px}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{padding:0 8px;font-size:15px}}.lp-user-cover-image .lp-user-cover-image__buttons{display:inline-flex;gap:12px;margin-top:16px}.lp-user-cover-image_background{background-repeat:no-repeat;background-position:center;background-size:cover;margin-bottom:20px;border-radius:var(--lp-border-radius,5px);min-height:100px}.lp-user-cover-image_background>img{opacity:0;visibility:hidden}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed var(--lp-border-color,#e2e0db);border-radius:3px;background-color:#fafafa;font-size:.875em;font-weight:300;font-style:italic;line-height:2.6875em;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}.dashboard-statistic__row{display:flex;gap:20px;flex-wrap:wrap}.dashboard-statistic__row .statistic-box{padding:20px;background:var(--lp-white-grey,#f7f7fb);text-align:center;display:flex;flex-wrap:wrap;gap:20px;border-radius:var(--lp-border-radius,5px);width:calc((100% - 40px) \u002F 3)}@media(min-width:1200px) and (max-width:1440px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:1200px){.dashboard-statistic__row .statistic-box{width:calc((100% - 20px) \u002F 2)}}@media(max-width:768px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:600px){.dashboard-statistic__row{gap:8px}.dashboard-statistic__row .statistic-box{width:100%;gap:12px;padding:8px 12px}.dashboard-statistic__row .statistic-box__text{display:flex;justify-content:space-between;align-items:center}.dashboard-statistic__row .statistic-box__text label{margin:0}.dashboard-statistic__row .statistic-box__text__number{font-size:1.2em}.dashboard-statistic__row .statistic-box__icon span{--lp-width-icon:40px;font-size:18px}}.statistic-box__icon span{--lp-width-icon:60px;display:flex;width:var(--lp-width-icon);height:var(--lp-width-icon);border-radius:50%;background:rgba(0,199,190,0.1019607843);line-height:var(--lp-width-icon);align-items:center;justify-content:center;color:#00c7be;font-size:24px}.statistic-box__icon [class^=lp-icon-]:before{width:1em}.statistic-box__icon .lp-icon-enrolled_courses:before,.statistic-box__icon .lp-icon-total_course:before{content:\"\\f518\"}.statistic-box__icon .lp-icon-in_progress_course,.statistic-box__icon .lp-icon-student_in_progress{background:rgba(175,82,222,0.1019607843);color:#af52de}.statistic-box__icon .lp-icon-finished_courses,.statistic-box__icon .lp-icon-published_course{background:rgba(88,86,214,0.1019607843);color:#5856d6}.statistic-box__icon .lp-icon-passed_courses,.statistic-box__icon .lp-icon-student_completed{background:rgba(85,190,36,0.2);color:#34c759}.statistic-box__icon .lp-icon-failed_courses,.statistic-box__icon .lp-icon-pending_course{background:rgba(255,59,48,0.1019607843);color:#ff3b30}.statistic-box__icon .lp-icon-total_student{background:rgba(0,122,255,0.1019607843);color:#007aff}.statistic-box__icon .lp-icon-total_student:before{content:\"\\f501\"}.statistic-box__text{flex:1;text-align:right}.statistic-box__text label{display:block;margin-bottom:4px;font-weight:normal;line-height:1.3;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.statistic-box__text__number{font-size:1.6em;line-height:1;font-weight:600}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:right}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(-90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:left}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.wrapper-profile-header{position:relative}.lp-user-profile{position:relative;--lp-item-padding:40px}.lp-user-profile img{max-width:100%;height:auto}.lp-user-profile .lp-user-profile-avatar img{display:block;border-radius:var(--lp-border-radius-avatar,50%);width:100%;height:auto}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;margin:0;gap:12px}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--lp-color-base,#333);width:var(--lp-social-size,40px);height:var(--lp-social-size,40px);border-radius:50%;border:1px solid var(--lp-border-color,#e2e0db);font-size:16px}.lp-user-profile .lp-user-profile-socials a:hover{color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color);background:var(--lp-primary-color)}.lp-user-profile .lp-user-profile-socials a:hover svg{fill:var(--lp-color-white,#fff)}.lp-user-profile .lp-profile-content-area{position:relative;padding:0;display:flex;align-items:flex-start}.lp-user-profile .lp-profile-left{min-width:120px;max-width:120px}.lp-user-profile .lp-profile-left .user-avatar{position:relative}.lp-user-profile .lp-profile-left .user-avatar img{border-radius:50%}.lp-user-profile .lp-profile-left .user-avatar:hover .lp-btn-to-edit-avatar{opacity:1;visibility:visible}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{position:absolute;top:80px;left:0;right:auto;width:36px;height:36px;font-size:0;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;cursor:pointer;background-color:var(--lp-white-grey,#f7f7fb);border-radius:50%}@media(max-width:767px){.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{opacity:1;top:60px;visibility:visible}}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar::before{content:\"\\f044\";font-size:1.5rem;font-family:\"lp-icon\";font-weight:normal;color:var(--lp-primary-color)}.lp-user-profile .lp-profile-right{padding-right:20px;flex:1;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px}.lp-user-profile .lp-profile-username{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:500;color:inherit;flex:1}.lp-user-profile .lp-profile-user-bio{width:100%}.lp-user-profile #profile-sidebar{float:right;width:270px;border:1px solid var(--lp-border-color,#e2e0db);border-top:0;margin-top:var(--lp-item-padding);margin-bottom:32px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%;margin-bottom:0}}.lp-user-profile .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile .lp-profile-nav-tabs>li{position:relative;margin:0;padding:0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li a{padding:10px 20px;color:inherit;font-weight:500;text-decoration:none;display:flex;width:100%;gap:8px;line-height:1.4}.lp-user-profile .lp-profile-nav-tabs>li a>i{margin-top:3px}.lp-user-profile .lp-profile-nav-tabs>li>a{padding:14px 20px;position:relative}.lp-user-profile .lp-profile-nav-tabs>li>a>i{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-user-profile .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active{background:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active>a,.lp-user-profile .lp-profile-nav-tabs>li.active>a i{color:#fff}.lp-user-profile .lp-profile-nav-tabs>li:not(.active):hover{background:var(--lp-white-grey,#f7f7fb)}.lp-user-profile .lp-profile-nav-tabs>li.has-child>a:after{font-family:\"lp-icon\";content:\"\\f105\";position:absolute;left:15px;top:50%;transform:translateY(-50%)}.lp-user-profile .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:180px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile .lp-profile-nav-tabs li>ul li{white-space:nowrap}.lp-user-profile .lp-profile-nav-tabs li>ul li:hover,.lp-user-profile .lp-profile-nav-tabs li>ul li.active{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:32px;padding-top:var(--lp-item-padding)}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form{display:flex;align-items:center;margin-bottom:10px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form input[type=number]{padding:8px;border:1px solid #ccc;width:60px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form button{cursor:pointer;line-height:1}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile .learn-press-message{margin-top:0}.lp-user-profile .profile-heading{margin-bottom:24px}.lp-user-profile.guest .lp-content-area{display:flex;align-items:flex-start}.lp-user-profile.guest .lp-content-area>div{flex:1;width:100%}@media(min-width:1366px){.lp-user-profile .lp-content-area{padding-left:0;padding-right:0}}@media(max-width:990px){.lp-user-profile{--lp-item-padding:30px}.lp-user-profile #profile-nav{border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs{display:flex;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;white-space:nowrap;scroll-behavior:smooth}.lp-user-profile .lp-profile-nav-tabs::after{display:none}.lp-user-profile .lp-profile-nav-tabs>li{border:0;border-left:1px solid var(--lp-border-color,#e2e0db);flex:1}.lp-user-profile .lp-profile-nav-tabs>li:last-child{border-left:0}.lp-user-profile .lp-profile-nav-tabs>li>a{height:auto;padding:8px 12px 8px 12px;flex-direction:column;white-space:nowrap;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);line-height:1.4;gap:4px}.lp-user-profile .lp-profile-nav-tabs>li>a>i{position:static;transform:translate(0)}.lp-user-profile .lp-profile-nav-tabs>li>a::after{display:none !important;margin-right:10px}.lp-user-profile .lp-profile-nav-tabs>li.has-child a::after{display:none !important}.lp-user-profile .lp-profile-nav-tabs>li:after{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active:after,.lp-user-profile .lp-profile-nav-tabs>li.active:before{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:\"\"}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile .lp-profile-nav-tabs li:not(.has-child)>a::after,.lp-user-profile .lp-profile-nav-tabs li:hover ul{display:none !important}}@media(max-width:768px){.lp-user-profile .lp-profile-content-area{align-items:center}.lp-user-profile .lp-profile-right{flex-direction:column;align-items:flex-start}.lp-user-profile .lp-profile-user-bio{display:none}.lp-user-profile.guest .lp-content-area{flex-direction:column}}@media(max-width:650px){.lp-user-profile .lp-profile-left{min-width:100px;max-width:100px}.lp-user-profile .lp-user-profile-socials{gap:8px;--lp-social-size:36px;font-size:14px}}#profile-content-withdrawals>h2{font-size:1.6em;margin-bottom:12px}.learn-press-profile-course__statistic{margin-bottom:32px}.learn-press-profile-course__progress .lp_profile_course_progress__item img{width:100%;aspect-ratio:16\u002F9;object-fit:cover;height:auto;display:block}.learn-press-profile-course__progress .lp_profile_course_progress__item td,.learn-press-profile-course__progress .lp_profile_course_progress__item th{text-align:center}.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{width:15%;padding:0}@media(max-width:768px){.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{display:none}}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3){width:10%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5){width:25%}@media(max-width:768px){.learn-press-profile-course__progress .learn-press-course-tab__filter__content{overflow-x:auto}}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:1.875em;line-height:1.5;font-weight:500;margin-bottom:15px}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;opacity:.7;font-size:.8em;font-style:italic}.lp-order-recover{display:flex;gap:10px}.lp-order-recover input[type=text]{font-style:italic;flex:1 1 auto}.lp-profile-content ul{list-style:none !important;padding:0 !important}.lp-profile-content ul.learn-press-courses{margin:0 -16px}.lp-profile-content h3{margin-top:0}.lp-user-avatar__buttons{display:inline-flex;gap:12px;margin-top:16px}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 20px 0 45px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:16px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-right:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-right:16px;padding-left:16px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 20px 12px 45px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;left:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-right:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-right linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:left;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-right:0;margin-left:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:\"\"}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:.938em;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:1.25em}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:.875em}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:1.875em;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:\"\"}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:\"\";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:32px;min-width:32px;height:32px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{position:absolute;top:50%;right:50%;transform:translate(50%,-50%)}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0}.answer-options .answer-option input[type=checkbox]::after{width:auto;box-sizing:content-box;height:auto;color:#3db748;font-family:\"lp-icon\";font-size:16px;opacity:0;content:\"\\f00c\";background:0;border:0}.answer-options .answer-option input[type=checkbox]:checked::after{border:0}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option input[type=radio]:checked::after{content:\"\";width:10px;height:10px;border-radius:10px;background:#00adff}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answered-wrong input[type=checkbox]::after{color:red}.answer-options .answer-option.answered-wrong input[type=radio]::after{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:\"(+\" attr(data-counter) \")\"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:\"\\f00c\"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0;color:#fff;background:#f02425;display:flex;align-items:center;justify-content:center;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);gap:8px}.quiz-result .result-message::after{font-family:\"lp-icon\";content:\"\\f00d\"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:1.75em;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:1em;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:.875em}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed var(--lp-border-color,#e2e0db)}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:1em;font-weight:400;line-height:2.1875em}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-weight:500;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:\"\\f017\"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:\"\\f005\"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:\"\\f059\"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:\"\\f00c\"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:\"\\f00d\"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:\"\\f2f5\"}.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:426px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{flex-direction:row;justify-content:space-between}}@media(min-width:1025px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:792px}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:50%}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:65%;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{flex-direction:row}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:792px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:100%;text-align:center}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:50%}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:100%;justify-content:center;flex-direction:column-reverse;gap:0}@media(min-width:490px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{flex-direction:row-reverse}}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:65%;gap:12px;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;margin:0 auto;padding:8px 16px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div>div .submit-quiz #button-submit-quiz{margin:0;border-radius:4px;overflow:hidden;white-space:nowrap}.quiz-status>div>div .countdown{margin:0;border-radius:4px;overflow:hidden;padding:12px}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:1em;font-weight:400;line-height:1.625em}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{min-height:38px;color:#333;font-weight:500;text-align:center}.quiz-status .countdown .fas{color:#333;font-size:1em}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:\"\";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .countdown i{margin:0 0 0 5px}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:.75em;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:\"lp-icon\";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:\"\"}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;margin-left:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:\"\\f012\"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:\"\\f12e\"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:\"\\f017\"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-weight:300}.quiz-intro-item__content{color:#222;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:\"\"}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:\"\"}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.quiz-questions .question-answers .answer-options{margin:0;padding:0}.question .answer-option{padding:0}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;border-color:#d9e0f1;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:10px 60px 10px 10px;border:1px solid var(--lp-border-color,#e2e0db);color:#666;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;font-size:1.125em;font-weight:500}.question .question-title .edit-link{float:left;font-size:.875em;font-weight:normal}.question .question-content{margin-bottom:30px}.question .question-content img{max-width:100%}.question .question-response{margin-bottom:10px;font-size:.875em}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none;border:0}.question .btn-show-hint::before{font-family:\"lp-icon\";font-size:18px;content:\"\\f059\"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:100%;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed var(--lp-border-color,#e2e0db);text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table th,.quiz-attempts table td{text-align:center}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #ebf8e5;border-radius:9px;font-size:.9em;line-height:1.4}.lp-ajax-message.error{border-color:#fee5e5}.lp-icon-passed{margin-left:5px}.lp-icon-passed::before{color:#059601;font-family:\"lp-icon\";content:\"\\f058\"}.lp-user-item.graduation{padding:10px}.lp-user-item.graduation.passed{background-color:#ebf8e5;color:#3ab500}.lp-user-item.graduation.failed{background-color:#fdecec;color:#d85554}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:1.25em}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:\"lp-icon\";content:\"\\f071\"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:\"\"}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:15px;right:-120px;width:300px;background:#ff2828;text-align:center;transform:rotate(45deg);height:auto;padding:5px 0}.lp-badge.featured-course::before{font-size:.75em;text-transform:uppercase;content:attr(data-text)}body div.entry-content>div.learnpress,body div.entry-content>div.learnpress:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.is-style-wide){--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-right:0;padding-left:0}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 1.5em}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 1em 0}.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul,.learnpress-profile #left-area ul,.learnpress-profile .entry-content ul,.learnpress-profile .et-l--body ul,.learnpress-profile .et-l--footer ul,.learnpress-profile .et-l--header ul{padding:0;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size=\"3\"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.astra .course-summary-content .course-detail-info{--lp-color-white:#333;--lp-secondary-color:transparent}body.astra .course-summary-content .course-detail-info .course-title{border-bottom-color:var(--ast-global-color-7)}.ast-container{--lp-cotainer-padding:0}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-right:0;padding-left:0}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.edu-press:not(.nofixcss),.theme-edu-press:not(.nofixcss){--lp-font-size-base:1em}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label{display:none}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a{font-size:1rem}.edu-press:not(.nofixcss) .course-instructor-category .course-categories a,.theme-edu-press:not(.nofixcss) .course-instructor-category .course-categories a{font-weight:normal}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories{position:absolute}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor{display:inline}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*{display:revert}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore{width:auto}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a{padding:0}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover{background:transparent;color:var(--thim-body_primary_color)}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info{border-top:1px solid rgba(153,153,153,0.2);padding-top:20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info{margin-top:50px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input{height:unset;padding:10px 20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button{background-image:none !important}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i{display:block}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn{opacity:1}.edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a{border:0}.edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box,.theme-edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box{background-color:var(--lp-white-grey,#f7f7fb);min-width:unset;margin-bottom:0}.edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before{font-family:\"lp-icon\" !important;font-weight:normal !important;margin:0 !important}.edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs,.theme-edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs{background:transparent;border-radius:0}.lp-4{--lp-font-size-base:1em}.elearningwp:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border:none !important;background-color:unset !important;padding:0}.elearningwp:not(.nofixcss) .lp-content-area.learn-press-message{padding:10px 15px}.course-builder:not(.nofixcss) .lp-courses-bar .search-courses button{padding:0}.course-builder:not(.nofixcss) .lp-courses-bar .courses-order-by{height:unset !important;padding:8px 15px 8px 35px !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user #profile-sidebar{margin-top:0 !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user .lp-profile-content-area{align-items:center}.course-builder:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border-radius:5px;border:0;padding:0}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header{padding-bottom:30px}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header .lp-profile-user-bio{padding-bottom:0}.learnpress-v4:not(.nofixcss),.learnpress-v3:not(.nofixcss){--lp-border-radius-avatar:0}.learnpress-v4:not(.nofixcss) .statistic-box,.learnpress-v3:not(.nofixcss) .statistic-box{--thim-lp-profile-bg-color:#f7f7fb}.learnpress-v4:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters,.learnpress-v3:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters{border:none !important;margin:0 0 0 -1px 0 !important}.learnpress-v4:not(.nofixcss) .lp-user-profile .lp-profile-left,.learnpress-v3:not(.nofixcss) .lp-user-profile .lp-profile-left{min-width:unset !important;position:static !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{min-height:unset;padding-right:0;display:flex}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left{border:none !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img{border-radius:50%}.learnpress-v4 .lp-course-curriculum,.learnpress-v3 .lp-course-curriculum{--lp-primary-color:var(--thim-body-primary-color,inherit)}.learnpress-v4 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v3 .lp-course-curriculum .section-count-items{font-family:var(--thim-font-title-font-family,inherit)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{color:inherit}.learnpress-v4 .lp-course-curriculum .course-item-ico,.learnpress-v3 .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{column-gap:8px}.learnpress-v4 .lp-course-curriculum .course-section__title,.learnpress-v3 .lp-course-curriculum .course-section__title{font-size:1.1em}.learnpress-v4 .lp-course-curriculum .section-toggle,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .section-toggle,.learnpress-v3 .lp-course-curriculum .section-count-items{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 #popup-sidebar .course-section-header,.learnpress-v4 #popup-sidebar .lp-course-curriculum .course-item,.learnpress-v3 #popup-sidebar .course-section-header,.learnpress-v3 #popup-sidebar .lp-course-curriculum .course-item{padding-right:16px;padding-left:16px}.learnpress-v4 .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0}.learnpress-v4 .lp-course-curriculum .course-section{border-width:0 0 1px 0}.learnpress-v4 .lp-course-curriculum .course-section:last-child{border-width:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:0 0 8px 0}.learnpress-v4 .lp-course-curriculum .course-item{padding-right:0;padding-left:0}.learnpress-v4 .lp-course-curriculum .course-section{margin-bottom:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:24px 0 24px 0}.assignments .lp-icon-file-alt:before{content:\"\\e929\"}.eduma:not(.nofixcss) .learnpress #learn-press-profile.lp-user-profile .learn-press-filters{padding-bottom:0 !important;overflow-y:visible}.eduma:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{flex-direction:column}.eduma .lp-course-curriculum .course-section-header{padding:var(--thim-ekit-padding-lesson,12px 0)}.eduma .sc_heading+.lp-course-curriculum .lp-course-curriculum__title{display:none}.ivy-school:not(.nofixcss) .lp-user-profile .lp-user-profile-avatar img{border-radius:0}.ivy-school.single-lp_course .course-curriculum{border:0}.ivy-school .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0;--lp-primary-color:var(--thim-body-primary-color,inherit)}.ivy-school .lp-course-curriculum .course-section-header .course-section__title{font-family:var(--thim-font-title-font-family,inherit)}.ivy-school .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.course-builder .lp-course-curriculum{--lp-white-grey:#f2f2f2;--lp-border-color:#e6e6e6}.course-builder .lp-course-curriculum .course-sections{border:1px solid var(--lp-border-color,#e6e6e6);border-radius:var(--lp-border-radius,5px);overflow:hidden}.course-builder .lp-course-curriculum .course-section{margin:0;border-radius:0;border-width:1px 0 0 0}.course-builder .lp-course-curriculum .course-section:first-child{border:0}.course-builder #popup-sidebar .lp-course-curriculum{--lp-border-radius:0}.course-builder .course-tab-panels .lp-course-curriculum .course-sections{border:0}.course-builder .course-tab-panels .lp-course-curriculum .course-section-header,.course-builder .course-tab-panels .lp-course-curriculum .course-item{padding-right:0;--lp-white-grey:trasparent;padding-left:0}.eduma .lp-course-curriculum .course-item-order.lp-hidden,.coaching .lp-course-curriculum .course-item-order.lp-hidden{display:inline-block !important}.eduma .lp-course-curriculum .course-section__title,.coaching .lp-course-curriculum .course-section__title{text-transform:uppercase}.demo-marketplace .thim-ekit-tablist .lp-course-curriculum__title,.demo-ecommerce .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-marketplace .thim-ekit-tablist .course-section-header,.demo-ecommerce .thim-ekit-tablist .course-section-header{background-color:var(--thim-breacrumb-bg-color)}.demo-marketplace .thim-ekit-tablist .course-section__items,.demo-ecommerce .thim-ekit-tablist .course-section__items{background-color:var(--lp-fix-bg-section-item,#f5f7f8)}.demo-marketplace .style-marketplace-2,.demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#0f1c44;--lp-fix-bg-section-item:transparent}.thim-ekit-light-mode .demo-marketplace .style-marketplace-2,.thim-ekit-light-mode .demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#f4f4f4}.demo-ecommerce .course-section-header{--thim-breacrumb-bg-color:#e1e9fd}.demo-online-learning .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-online-learning .thim-ekit-tablist .course-section{margin-bottom:8px;border:0}.demo-online-learning .thim-ekit-tablist .course-section-header{background-color:#dfefff;border-radius:8px 8px 8px 8px}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{border:1px solid var(--thim-border-color);margin-bottom:10px;padding-right:20px;padding-left:20px}.business-consulting .lp-course-curriculum__title,.demo-business-v2 .lp-course-curriculum__title,.business-coaching .lp-course-curriculum__title,.demo-healthy-coaching .lp-course-curriculum__title{display:none}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border-width:1px;margin-bottom:15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child{border-width:1px;margin-bottom:0}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:20px 15px 5px 15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-item,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-right:15px;padding-left:15px}.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header{background-color:var(--thim-bg-color,#f5f5f5);padding:10px 15px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:15px 20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section__items{padding-right:20px;padding-left:20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-right:0;padding-left:0}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0;border-radius:5px}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{background:#fff;padding:10px 15px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:1.875rem;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses .lp-content-area.has-sidebar{display:flex;gap:32px;align-items:flex-start}@media(max-width:768px){.lp-archive-courses .lp-content-area.has-sidebar{display:inherit}}.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:33.33%}@media(max-width:1200px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:50%}}@media(max-width:600px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:100%}}.lp-archive-courses .lp-content-area .lp-main-content{flex:1}.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:25%}@media(max-width:768px){.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:100%}}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:\"\";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:var(--lp-color-white,#fff)}.lp-archive-courses .learn-press-courses-header{margin-bottom:16px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.8)}.learn-press-courses{clear:both;margin:0 -16px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.learn-press-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.learn-press-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.learn-press-courses .course-item:hover .course-wishlist{opacity:1}.learn-press-courses .course-item .course-wishlist.filled{opacity:1}.learn-press-courses .course-content{position:relative;border-top:0}.learn-press-courses .course-content .course-permalink{display:block;border:0;text-decoration:none;color:inherit;line-height:1.3}.learn-press-courses .course-content .course-review{display:none}.learn-press-courses .course-content .course-tags{display:inline-block}.learn-press-courses .course-content .course-info>span{display:block}.learn-press-courses .course-content .course-info .course-price .free,.learn-press-courses .course-content .course-info .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .course-content .course-info .course-price .origin-price{margin-left:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.learn-press-courses .course-content .course-short-description{display:-webkit-box;overflow:hidden;margin-bottom:16px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.learn-press-courses .course-content .separator{display:none}.learn-press-courses .course-thumbnail{overflow:hidden;position:relative;border-radius:var(--lp-border-radius,5px)}.learn-press-courses .course-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.learn-press-courses .course-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:var(--lp-color-white,#fff);cursor:pointer}.learn-press-courses .course-thumbnail .course-wishlist::before{font-family:\"lp-icon\";content:\"\\f004\"}.learn-press-courses .course-thumbnail .course-wishlist .course-wishlist__btn{display:none}.learn-press-courses .course-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.learn-press-courses .course-thumbnail:hover::before{opacity:1}.learn-press-courses .course-thumbnail:hover a img{transform:scale(1.05)}.learn-press-courses .course-thumbnail:hover .course-wishlist{opacity:1}.learn-press-courses .course-thumbnail a{display:block;overflow:hidden}.learn-press-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.learn-press-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1);max-width:unset !important}.learn-press-courses .wap-course-title{margin:0 0 12px 0;padding:0;display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.15);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .wap-course-title a:hover{color:var(--lp-primary-color)}.learn-press-courses .course-permalink:hover{color:var(--lp-primary-color)}@media(min-width:769px){.learn-press-courses .course-summary-content .course-info-left{width:calc(100% - 340px)}}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value span,.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value>div{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{height:auto}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item:last-child{margin-left:0}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-left:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:768px){.learn-press-courses .course-summary-content{width:100%}}.learn-press-courses .course-price .free{color:#3ab500}.learn-press-courses .course{width:25%;margin:0 0 32px 0;box-shadow:none;list-style:none}.learn-press-courses .course-info{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.learn-press-courses .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:12px}.learn-press-courses .course-instructor-category>div>*{display:inline;vertical-align:middle}.learn-press-courses .course-instructor-category label{font-size:inherit;font-weight:inherit}.learn-press-courses .course-instructor-category a{font-weight:var(--lp-font-weight-link,600);text-decoration:none;color:inherit}.learn-press-courses .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-courses .course-wrap-meta{display:flex;padding:0;margin-bottom:12px;gap:20px;flex-wrap:wrap;row-gap:8px}.learn-press-courses .course-wrap-meta .meta-item{text-transform:capitalize;display:flex;gap:8px}.learn-press-courses .course-wrap-meta .meta-item::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.learn-press-courses .course-wrap-meta .meta-item>div{display:inline-block}.learn-press-courses .course-wrap-meta .meta-item-level::before{content:\"\\f012\"}.learn-press-courses .course-wrap-meta .meta-item-duration::before{content:\"\\f017\"}.learn-press-courses .course-wrap-meta .meta-item-lesson::before{content:\"\\f15b\"}.learn-press-courses .course-wrap-meta .meta-item-quiz::before{content:\"\\f12e\"}.learn-press-courses .course-wrap-meta .meta-item-student::before{content:\"\\f501\"}.learn-press-courses .course-wrap-meta .meta-item-address::before{content:\"\\e91b\"}.learn-press-courses .course-content .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.learn-press-courses .course-content .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;border-bottom:1px solid var(--lp-border-color,#e2e0db);flex-wrap:wrap;justify-content:flex-end;padding-bottom:32px}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;align-items:start}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{padding:0 24px 0 0}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{padding:16px 0}}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:var(--lp-color-white,#fff);background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-excerpt{width:100%}.learn-press-courses[data-layout=list] .course-content .course-info{width:100%;display:flex;justify-content:space-between}@media(max-width:520px){.learn-press-courses[data-layout=list] .course-content .course-info{width:100%}}.learn-press-courses[data-layout=list] .course-content .course-info .course-students{display:none}.learn-press-courses[data-layout=list] .course-thumbnail{width:35%}.learn-press-courses[data-layout=list] .course-content{width:65%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-thumbnail,.learn-press-courses[data-layout=list] .course-content{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{padding:0 16px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:100%}}.learn-press-courses[data-layout=grid] .wp-block-learnpress-course-item-template,.learn-press-courses[data-layout=grid] .course-item,.learn-press-courses.lp-courses-related .wp-block-learnpress-course-item-template,.learn-press-courses.lp-courses-related .course-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-level,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-quiz{display:none}.learn-press-courses[data-layout=grid] .course-content,.learn-press-courses.lp-courses-related .course-content{width:100%;padding:20px;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-info,.learn-press-courses.lp-courses-related .course-content .course-info{flex-direction:column;align-items:flex-start;gap:12px}.learn-press-courses[data-layout=grid] .course-content .course-info .course-readmore,.learn-press-courses.lp-courses-related .course-content .course-info .course-readmore{width:100%;text-align:center}.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-short-description,.learn-press-courses.lp-courses-related .course-content .course-excerpt,.learn-press-courses.lp-courses-related .course-content .course-short-description{display:none}.learn-press-courses[data-layout=grid] .learn-press-message,.learn-press-courses.lp-courses-related .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-layout=grid] .course-thumbnail,.learn-press-courses.lp-courses-related .course-thumbnail{border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.learn-press-courses[data-size=\"3\"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size=\"3\"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-list-courses-default{position:relative}.lp-list-courses-default .lp-skeleton-animation{clear:both;padding:5px 0 0 0}.lp-courses-bar{display:flex;width:100%;justify-content:space-between;gap:12px;margin-bottom:32px;flex-wrap:wrap}.lp-courses-bar .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .lp-courses-bar .courses-order-by{background-position-x:calc(100% - (100% - 10px))}.lp-courses-bar .courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar>*{display:flex}.lp-courses-bar .search-courses{display:flex;flex:1;margin-bottom:0}.lp-courses-bar .search-courses input{width:100%;max-width:240px;margin:0 0 0 4px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.lp-courses-bar .search-courses input::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses input::-moz-placeholder{color:#999}.lp-courses-bar .search-courses input:-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses input:-moz-placeholder{color:#999}.lp-courses-bar .search-courses input::placeholder{color:#999}.lp-courses-bar .search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.lp-courses-bar .search-courses button i{font-size:1.2em;line-height:1.2}.lp-courses-bar .search-courses button:focus{outline:0}.lp-courses-bar .search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .switch-layout{align-items:center;justify-content:center}@media(max-width:768px){.lp-courses-bar .switch-layout{display:none}}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{margin:0;cursor:pointer;padding:8px 12px}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:6px;color:var(--lp-color-base,#333);font-family:\"lp-icon\";line-height:1.2;width:1em}.lp-courses-bar .switch-layout .switch-btn.grid{border-radius:0 var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0;border:1px solid var(--lp-border-color,#e2e0db);border-left:0}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:\"\\f009\"}.lp-courses-bar .switch-layout .switch-btn.list{border-radius:var(--lp-border-radius,5px) 0 0 var(--lp-border-radius,5px);border:1px solid var(--lp-border-color,#e2e0db);border-right:0}.lp-courses-bar .switch-layout .switch-btn.list::before{content:\"\\f03a\"}.lp-courses-bar .course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.lp-courses-bar .course-filter-btn-mobile{display:none}}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}.lp-courses-bar .search-courses input{min-width:240px;max-width:unset}}.switch-layout input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp_allow_repurchase_select>ul{padding:0;list-style:none}.lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp_allow_repurchase_select>a{display:inline-block;margin-top:10px;color:var(--lp-color-white,#fff);background-color:#222}.lp-single-offline-course .lp-single-offline-course-main{display:flex;gap:30px;margin-bottom:80px}.lp-single-offline-course .course-price .free{color:#3ab500}.lp-single-offline-course .course-price .origin-price{text-decoration:line-through;opacity:.6;margin-left:4px}.lp-single-offline-course__left{width:70%}.lp-single-offline-course__left>div{margin-bottom:32px}.lp-single-offline-course__left .learn-press-breadcrumb{display:flex;list-style:none;flex-wrap:wrap;gap:5px;font-size:var(--lp-font-size-base);align-items:center;margin-bottom:8px;padding:0}.lp-single-offline-course__left .learn-press-breadcrumb li{list-style:none;padding:0;margin:0}.lp-single-offline-course__left .course-title{display:block;font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 12px 0}.lp-single-offline-course__left .course-img img{width:100%}.lp-single-offline-course__left .lp-single-course-offline-info-one{margin-bottom:12px}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta{display:inline;line-height:1.4;margin-right:12px;padding-right:12px;border-right:1px solid #e2e0db}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta:first-child{margin:0;padding:0;border:0}.lp-single-offline-course__left .lp-single-course-offline-info-one .lp-item-wishlist.active{color:var(--lp-primary-color)}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info{display:inline-block}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info .ico-star{display:inline-block;vertical-align:sub;margin-left:4px}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info svg{height:22px}.lp-single-offline-course__left .instructor-description{margin-top:16px}.lp-single-offline-course__left .course-features ul,.lp-single-offline-course__left .course-target ul,.lp-single-offline-course__left .course-requirements ul{margin:0 20px 0 0;padding:0}.lp-single-offline-course__left .instructor-social{display:flex;gap:8px;margin-top:30px}.lp-single-offline-course__left .instructor-social a{width:37px;height:37px;display:inline-flex;align-items:center;justify-content:center;background-color:#f1f2f8;border-radius:50%}.lp-single-offline-course__left .instructor-social a:hover{background-color:var(--lp-primary-color)}.lp-single-offline-course__left .instructor-social a:hover i{color:#fff}.lp-single-offline-course__left .instructor-social a .lp-icon-facebook{color:#216bf6}.lp-single-offline-course__left .instructor-social a .lp-icon-twitter{color:#169df0}.lp-single-offline-course__left .instructor-social a .lp-icon-youtube-play{color:#ff0200}.lp-single-offline-course__left .instructor-social a .lp-icon-linkedin{color:#0078b7}.lp-single-offline-course__left .instructor-social a i{font-size:18px}.lp-single-offline-course__left .item-title{margin-bottom:30px}.lp-single-offline-course__left>img{margin-bottom:30px}.lp-single-offline-course__right{width:30%;position:relative}.lp-single-offline-course__right__sticky{position:sticky;top:0}.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{border:1px solid #e2e0db;padding:30px;margin-bottom:60px}@media(max-width:767px){.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{margin-bottom:30px}}.lp-single-offline-course .info-metas .info-meta-item,.lp-single-offline-course .course-featured-review .info-meta-item{display:flex;justify-content:space-between;border-bottom:1px solid #e2e0db;padding-bottom:16px;margin-bottom:16px;font-size:var(--lp-font-size-base)}.lp-single-offline-course .info-metas .info-meta-item:nth-last-of-type(2),.lp-single-offline-course .course-featured-review .info-meta-item:nth-last-of-type(2){border:0;padding-bottom:0;margin-bottom:0}.lp-single-offline-course .info-metas .info-meta-left,.lp-single-offline-course .course-featured-review .info-meta-left{display:inline-flex;align-items:center;gap:8px}.lp-single-offline-course .info-metas .info-meta-left>span,.lp-single-offline-course .course-featured-review .info-meta-left>span{min-width:16px}@media(min-width:992px){.lp-single-offline-course .info-metas.lp-is-mobile,.lp-single-offline-course .course-featured-review.lp-is-mobile{display:none}}@media(max-width:991px){.lp-single-offline-course .info-metas.lp-is-pc,.lp-single-offline-course .course-featured-review.lp-is-pc{display:none}}.lp-single-offline-course form.purchase-course,.lp-single-offline-course form.enroll-course,.lp-single-offline-course form.retake-course{width:100%}.lp-single-offline-course .course-buttons{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.lp-single-offline-course .course-buttons .lp-button{padding:12px 16px;border-radius:var(--lp-border-radius,3px);font-size:var(--button--font-size);line-height:1.5em;font-weight:600;width:100%}.lp-single-offline-course .course-buttons .lp-button.button{border:0}.lp-single-offline-course .course-buttons a.course-btn-extra{border-color:var(--lp-primary-color);color:var(--lp-primary-color)}.lp-single-offline-course .course-buttons a.course-btn-extra:focus,.lp-single-offline-course .course-buttons a.course-btn-extra:hover{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .course-buttons .button-purchase-course{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .featured-review__title{font-weight:bold;font-size:1.4rem;margin-top:10px}.lp-single-offline-course .course-featured-review{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;position:relative}.lp-single-offline-course .course-featured-review::before{background-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='56' height='56' viewBox='0 0 56 56' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Crect width='56' height='56' rx='28' fill='%23F2F1F8'\u002F%3E%3Cpath d='M17.425 40.5325C17.3136 40.5325 17.2015 40.5061 17.0958 40.4518C16.7823 40.2903 16.6073 39.9215 16.6673 39.5504L18.2548 31.142H12.7691C12.3442 31.142 12 30.7678 12 30.3058V15.5028C12 15.0409 12.3442 14.6666 12.7691 14.6666H25.8927C26.3176 14.6666 26.6618 15.0409 26.6618 15.5028V30.3051C26.6618 30.5046 26.5961 30.6979 26.4761 30.8501L18.0084 40.2406C17.8584 40.43 17.6442 40.5325 17.425 40.5325ZM13.5389 29.4689H19.1731C19.4009 29.4689 19.6165 29.5783 19.7629 29.7678C19.9093 29.9572 19.9707 30.2072 19.9307 30.451L18.6739 36.8314L25.1243 29.9953V16.3398H13.5389V29.4689Z' fill='%23121212'\u002F%3E%3Cpath d='M34.7609 40.5325C34.6495 40.5325 34.5374 40.5061 34.4317 40.4518C34.1182 40.2903 33.9433 39.9215 34.0033 39.5496L35.5907 31.1413H30.105C29.6801 31.1413 29.3359 30.767 29.3359 30.3051V15.5028C29.3359 15.0409 29.6801 14.6666 30.105 14.6666H43.2286C43.4329 14.6666 43.6285 14.7551 43.7728 14.912C43.917 15.0688 43.9977 15.2815 43.9977 15.5036V30.3058C43.9977 30.5054 43.9313 30.6987 43.8113 30.8509L35.3436 40.2414C35.1937 40.4308 34.9787 40.5333 34.7595 40.5333L34.7609 40.5325ZM30.8748 29.4689H36.509C36.7368 29.4689 36.9525 29.5783 37.0989 29.7678C37.2452 29.9572 37.3067 30.2072 37.2667 30.451L36.0099 36.8306L42.4603 29.9953V16.3398H30.8755L30.8748 29.4689Z' fill='%23121212'\u002F%3E%3C\u002Fsvg%3E%0A\");content:\"\";width:56px;height:56px;position:absolute;top:-25px}.lp-single-offline-course .featured-review__stars{order:3;color:var(--lp-primary-color)}.lp-single-offline-course .lp-list-courses-related .section-title{margin-bottom:40px}@media(max-width:991px){.lp-single-offline-course .lp-single-offline-course-main{flex-direction:column;margin-bottom:0}.lp-single-offline-course__left,.lp-single-offline-course__right{width:100%}}@media(max-width:767px){.lp-single-offline-course__left .lp-instructor-info{flex-direction:column}}.lp-archive-courses .course-detail-info{padding:28px 0 24px 0;color:var(--lp-color-white,#fff);background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info .course-title{margin:0 0 24px 0;border-bottom:1px solid rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);padding-bottom:24px}@media(min-width:769px){.lp-archive-courses .course-detail-info{overflow-x:hidden}.lp-archive-courses .course-detail-info .course-title,.lp-archive-courses .course-detail-info .course-meta-secondary,.lp-archive-courses .course-detail-info .course-meta-primary{padding-left:320px}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:\"\";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}}.lp-archive-courses .course-detail-info .course-meta-secondary{margin-bottom:0}.lp-archive-courses .course-meta__pull-left{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;text-transform:capitalize;align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\"}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:8px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%;display:block}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:\"\\f017\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:\"\\f012\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:\"\\f0c5\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:\"\\f12e\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:\"\\f501\"}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:var(--lp-color-accent-1);font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300;line-height:1.5;display:block}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:var(--lp-color-white,#fff);text-transform:capitalize;text-decoration:none}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 4px}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column;justify-content:space-between}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}.lp-archive-courses .course-meta-primary{margin-bottom:20px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-180px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:var(--lp-color-white,#fff);background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:\"lp-icon\";font-size:1em;content:\"\\f004\"}.lp-archive-courses .course-summary-sidebar__inner>div{padding:20px;background:var(--lp-color-white,#fff)}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-weight:300;line-height:1.5em}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.lp-archive-courses .courses-btn-load-more{display:flex;align-items:center;gap:5px}.lp-archive-courses .course-wishlist:before{font-family:\"lp-icon\"}.lp-archive-courses .lp-course-curriculum ul{padding:0}.lp-single-course__header{background-color:#f1f2f8}.lp-single-course__header__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding);padding-top:40px;padding-bottom:40px}@media(max-width:767px){.lp-single-course__header__inner{padding-top:20px;padding-bottom:20px}}@media(min-width:992px){.lp-single-course__header__inner>*{width:calc(100% - 440px)}}.lp-single-course__header .learn-press-breadcrumb{display:flex;list-style:none;gap:4px;flex-wrap:wrap;margin-bottom:8px;padding:0}.lp-single-course__header .course-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 24px 0}@media(max-width:767px){.lp-single-course__header .course-title{margin:0 0 16px 0}}.lp-single-course__header .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:40px}@media(max-width:767px){.lp-single-course__header .course-instructor-category{margin-bottom:20px}}.lp-single-course__header .course-instructor-category>div>*{display:inline;vertical-align:middle}.lp-single-course__header .course-instructor-category label{font-size:inherit;font-weight:inherit}.lp-single-course__header .course-instructor-category a{text-decoration:none;color:inherit}.lp-single-course__header .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.lp-single-course__header .lp-single-course-info-one{display:flex;column-gap:20px;row-gap:8px;flex-wrap:wrap}.lp-single-course__header .lp-single-course-info-one .star-info{display:inline-flex;align-items:center;gap:4px;padding-left:20px;position:relative}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:\"\";left:0;right:auto;width:1px;height:20px;position:absolute;background-color:var(--lp-border-color,#e2e0db)}@media(max-width:500px){.lp-single-course__header .lp-single-course-info-one .star-info{padding-left:0}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:none}}.lp-single-course__header .lp-single-course-info-one .ico-star,.lp-single-course__header .lp-single-course-info-one .lp-review-svg-star{display:inline-flex;align-items:center}.lp-single-course .lp-single-course-main{padding:40px 0 80px;display:flex;column-gap:60px;row-gap:30px;flex-wrap:wrap}@media(max-width:1500px){.lp-single-course .lp-single-course-main{column-gap:30px}}@media(max-width:991px){.lp-single-course .lp-single-course-main{flex-direction:column-reverse;padding:40px 0}}.lp-single-course .lp-single-course-main__left{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 410px)}}@media(min-width:1501px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 440px)}}.lp-single-course .lp-single-course-main__left>div{margin-bottom:40px}@media(max-width:767px){.lp-single-course .lp-single-course-main__left>div{margin-bottom:30px}}.lp-single-course .lp-single-course-main__left>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 20px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}@media(max-width:767px){.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 16px 0}}.lp-single-course .lp-single-course-main__left .extra-box ul{margin:0 20px 0 0;padding:0}.lp-single-course .lp-single-course-main__left .comments-area{width:100%;max-width:100%;margin:0}.lp-single-course .lp-single-course-main__right{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__right{width:380px;margin-top:-280px}}.lp-single-course .lp-single-course-main__right__inner{position:sticky;top:0;background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .lp-single-course-main__right__inner>div{margin-bottom:20px}.lp-single-course .lp-single-course-main__right__inner>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-item{display:flex;gap:4px;margin-bottom:12px}.lp-single-course .lp-single-course-main .info-metas .info-meta-item:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-left{display:flex;gap:8px;align-items:center}.lp-single-course .lp-single-course-main .info-metas i{color:var(--lp-primary-color,#ffb606)}.lp-single-course .lp-single-course-main .course-img{margin-bottom:20px;overflow:hidden;margin:-20px -20px 20px -20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .lp-single-course-main .course-img img{max-width:100%;display:block}.lp-single-course .lp-single-course-main .course-price{display:block;margin-bottom:20px}.lp-single-course .lp-single-course-main .course-price .free{color:#3ab500;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-single-course-main .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:var(--lp-font-size-base,1em);margin-left:4px}.lp-single-course .lp-single-course-main .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.lp-single-course .lp-single-course-main .course-buttons{display:flex;flex-direction:column;gap:8px}.lp-single-course .lp-single-course-main .course-buttons form,.lp-single-course .lp-single-course-main .course-buttons .lp-button{width:100%}.lp-single-course .lp-single-course-main .course-buttons .lp-button{background-color:var(--lp-primary-color,#ffb606);border:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.lp-single-course .lp-single-course-main .course-buttons .lp-button:hover{background-color:var(--lp-secondary-color);border-color:var(--lp-secondary-color)}.lp-single-course .lp-single-course-main .course-buttons .learn-press-message{margin:0}.lp-single-course .lp-single-course-main .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-list-courses-related{margin:0 0 40px 0}@media(max-width:767px){.lp-single-course .lp-list-courses-related{margin:0 0 20px 0}}.lp-single-course .lp-list-courses-related .section-title{margin:0 0 40px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}.lp-single-course .course-detail-info__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-single-course .course-detail-info .course-meta{gap:16px;flex-wrap:wrap}@media(min-width:769px){.lp-single-course .course-detail-info .course-meta__pull-left{width:calc(100% - 340px);max-width:100%;margin:0}}.lp-single-course .course-tabs .course-faqs__title,.lp-single-course .course-tabs .course-material__title{display:none}.lp-single-course .course-summary-sidebar__inner{background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*{padding:0;margin-bottom:20px}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*:last-child{margin-bottom:0}.lp-single-course .course-summary-sidebar .course-img{margin:-20px -20px 20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .course-summary-sidebar .course-img img{max-width:100%;width:100%;height:auto}.lp-single-course .course-summary-sidebar .course-price{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:700}.lp-single-course .course-summary-sidebar .course-price .free{color:#3ab500}.lp-single-course .course-summary-sidebar .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);margin-left:4px;font-weight:normal}.lp-single-course button{font-size:1em}.course-featured{padding:4px 12px;border-radius:var(--lp-border-radius,5px);background-color:#ff3b30;color:white;text-transform:uppercase;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:var(--lp-font-weight-link,600);margin-bottom:12px;display:inline-block}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:30px;margin-top:30px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:1.125em;font-weight:600}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .origin-price{margin-left:10px;font-size:1.125em;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:1.5em}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px;text-align:center}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2em;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color)}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-style:italic}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:\"‘‘\";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:.75em;line-height:1}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-students::before{font-family:\"lp-icon\";content:\"\"}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap;gap:50px}@media(max-width:767px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:20px}}@media(max-width:560px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{grid-template-columns:repeat(2,1fr)}}.course-meta.course-meta-primary .course-meta__pull-left .meta-item{margin-left:0 !important}@media(max-width:560px){.course-meta.course-meta-primary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left{gap:16px}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-left:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta.two-columns .course-meta{flex:1}.lp-single-course .comment-form .comment-form-url,.lp-single-course .comment-form .comment-form-email,.lp-single-course .comment-form .comment-form-author,.lp-single-course .comment-form .comment-form-comment,.wp-block-learnpress-course-comment .comment-form .comment-form-url,.wp-block-learnpress-course-comment .comment-form .comment-form-email,.wp-block-learnpress-course-comment .comment-form .comment-form-author,.wp-block-learnpress-course-comment .comment-form .comment-form-comment{display:flex;flex-direction:column;gap:1rem}.lp-single-course .comment-form input[type=url],.lp-single-course .comment-form input[type=text],.lp-single-course .comment-form input[type=email],.lp-single-course .comment-form textarea,.wp-block-learnpress-course-comment .comment-form input[type=url],.wp-block-learnpress-course-comment .comment-form input[type=text],.wp-block-learnpress-course-comment .comment-form input[type=email],.wp-block-learnpress-course-comment .comment-form textarea{padding:12px 20px;outline:0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.lp-single-course .comment-form input[type=submit],.wp-block-learnpress-course-comment .comment-form input[type=submit]{border-radius:var(--lp-border-radius,5px)}.course-summary-sidebar{--lp-button-background-color:#28303d;--lp-button-color:#d1e4dd;position:relative}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .has-global-padding{padding-left:0;padding-right:0}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500;background-color:var(--lp-button-background-color);color:var(--lp-button-color);border:0}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1em;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:1em;font-weight:300;line-height:1em;text-align:left}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}.lp-course-buttons:empty{display:none}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:var(--lp-primary-color);font-size:1.3em;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:var(--lp-primary-color);font-size:1.3em;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 10px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top;width:100%}.course-sidebar-preview .course-wishlist{float:none}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{color:#666;font-size:1em;font-weight:300;margin-bottom:0}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-weight:300}.course-sidebar-preview>*:last-child{margin-bottom:0}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-right:1px solid var(--lp-border-color,#e2e0db);padding-right:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-right:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none;color:var(--lp-button-background-color)}.learnpress-page:hover{text-decoration:none}.lp-sidebar-toggle__close .content-item-wrap .quiz-buttons.align-center .button-left.fixed{margin-right:0 !important}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}#popup-course{display:flex;position:fixed;z-index:9999;top:0;left:0;bottom:0;right:0;background:var(--lp-bg-color-lesson,#fff)}#popup-course .wp-block-learnpress-item-close .back-course{padding:24px}#popup-course .back-course{padding-right:24px;padding-left:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px;column-gap:10px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column;gap:5px}#popup-course .popup-header__inner.can-finish-course .items-progress{display:none}}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid var(--lp-border-color,#e2e0db);border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid var(--lp-border-color,#e2e0db);line-height:2.25em}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:.8em;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #ebf8e5;border-radius:5px}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);align-items:center;-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}#popup-header .course-title{margin:0;padding:0;font-size:var(--lp-font-size-base,1em);letter-spacing:unset}#popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-decoration:none}#popup-header .course-title a:hover{color:var(--lp-primary-color)}#popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}#popup-header .number{padding-left:10px;color:#fff;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300}#popup-header .lp-button{display:flex;position:relative;height:auto;border:0;color:#fff;background:var(--lp-primary-color);white-space:nowrap;padding:6px 15px;font-size:1rem}#popup-header .lp-button:hover{opacity:.8}#popup-header .lp-button-back{float:left;margin:9px 10px}#popup-header .lp-button-back button::before,#popup-header .lp-button-back button::after{content:\"\"}#popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;-webkit-transition:.25s;-moz-transition:.25s;-ms-transition:.25s;-o-transition:.25s;transition:.25s}#popup-sidebar .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}#popup-sidebar .search-course input[name=s]{display:block;width:100%;padding-right:20px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;font-size:1rem}#popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-sidebar .search-course input[name=s]:focus{outline:0}#popup-sidebar .search-course button{position:absolute;top:0;left:12px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none;font-size:1rem}#popup-sidebar .search-course button:focus{outline:0}#popup-sidebar .search-course button i{color:var(--lp-color-accent,#666);width:24px;display:flex;justify-content:center}#popup-sidebar .search-course button.clear{display:none}#popup-sidebar .search-course button.clear::before{content:\"\\f00d\"}#popup-sidebar .search-course.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}#popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-sidebar .course-curriculum::-webkit-scrollbar{width:8px}#popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-sidebar .section.section-empty .section-header{margin:0}#popup-sidebar .section-header{position:sticky;z-index:1000;top:0;padding:20px 16px;cursor:pointer;background-color:var(--lp-bg-color-lesson,#fff)}#popup-sidebar .section-header .section-title .show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f0d7\"}#popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-sidebar .section-header .section-toggle i{color:var(--lp-color-accent,#666)}#popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-sidebar .section-content{margin-bottom:0}#popup-sidebar .curriculum-more{padding-left:16px;padding-right:16px}#popup-sidebar .course-item>span{display:none}#popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-sidebar .course-item::after{content:\"\"}#popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-sidebar .lp-course-curriculum .course-section{--lp-border-radius:0;border-right:0}#popup-sidebar .lp-course-curriculum .lp-course-curriculum__title,#popup-sidebar .lp-course-curriculum .course-curriculum-info,#popup-sidebar .lp-course-curriculum .course-section__description{display:none}#popup-sidebar .lp-course-curriculum .course-item.current:before{background:var(--lp-primary-color,#ffb606)}#popup-sidebar .lp-course-curriculum .course-item__content{flex-direction:column;row-gap:0}#popup-sidebar .lp-course-curriculum .course-item__right{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}#popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-content .lp-button{position:relative;margin:0;padding:8px 25px;border-color:var(--lp-border-color,#e2e0db)}#popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-content .lp-button.instant-check .instant-check__icon::before{font-family:\"lp-icon\";content:\"\\f058\"}#popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:var(--lp-white-grey,#f7f7fb);color:var(--lp-color-base,#333);white-space:nowrap;text-transform:none}@media(max-width:600px){#popup-content .lp-button.instant-check .instant-check__info{white-space:normal;width:90vw}}#popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible}#popup-content .lp-button.instant-check.loading::before{display:none}#popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:\"\\f110\"}#popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;border-color:transparent;color:#fff;background:#3db748;align-items:center;justify-content:center;float:right}#popup-content .lp-button.completed i{margin-right:9px;font-size:.8em}#popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-content.fixed-quiz-status .quiz-status>div{padding:0}#popup-content::-webkit-scrollbar{width:8px}#popup-content::-webkit-scrollbar-thumb{background:#ccc}#popup-content::-webkit-scrollbar-track{background:#f5f5f5}#popup-footer{position:fixed;z-index:99;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:auto;margin:0 auto;border-top:1px solid #ebebeb;background:var(--lp-bg-color-lesson,#fff);-webkit-transition:right .25s;-moz-transition:right .25s;-ms-transition:right .25s;-o-transition:right .25s;transition:right .25s}@media(max-width:1024px){#popup-footer{width:auto;padding:0 15px}}#popup-footer .course-item-nav{justify-content:space-between}#popup-footer .course-item-nav .prev,#popup-footer .course-item-nav .next{display:flex;line-height:3.125em}#popup-footer .course-item-nav .prev a,#popup-footer .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666)}#popup-footer .course-item-nav .prev::before,#popup-footer .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}#popup-footer .course-item-nav .prev:hover a,#popup-footer .course-item-nav .prev:hover::before,#popup-footer .course-item-nav .next:hover a,#popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-footer .course-item-nav .next::before{margin-right:10px;content:\"\\f0da\"}#popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-footer .prev::before{margin-left:10px;content:\"\\f0d9\"}#popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-footer .prev .course-item-nav__name{right:15px}}#popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){#popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}#sidebar-toggle:after{display:none}#sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}#sidebar-toggle:focus{border:0;outline:0}.course-item-popup #tab-curriculum{display:block}.course-item-popup .course-curriculum ul.curriculum-sections{z-index:9}.course-item-popup .lp-course-curriculum .course-section .course-item__content{flex-direction:column;row-gap:4px}body.course-item-popup{overflow-y:hidden}@media(max-width:1200px){body.course-item-popup #learn-press-course-curriculum{width:300px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum{margin-left:0}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .course-curriculum{width:200px}}@media(max-width:1300px){body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .items-progress,body.course-item-popup #learn-press-course-curriculum .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}@media(max-width:1300px){body.course-item-popup #content-item-nav{right:300px}}@media(max-width:768px){body.course-item-popup #content-item-nav{right:200px}}@media(max-width:1300px){body.course-item-popup .section-desc{display:none}}@media(max-width:768px){body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #sidebar-toggle::before{content:\"\\f0da\"}body.lp-sidebar-toggle__close #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-header,body.lp-sidebar-toggle__close #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #sidebar-toggle::before{content:\"\\f0da\"}body:not(.lp-sidebar-toggle__open) #popup-sidebar{flex:0}}@media screen and (max-width:480px){#popup-header,#popup-footer{width:100%}.learnpress-v4 #popup-header,.lp-4 #popup-header,.learnpress-v4 #popup-footer,.lp-4 #popup-footer{width:auto}.learnpress-v4.starkid #popup-header,.learnpress-v4.starkid #popup-footer{width:100%}#popup-content{min-width:100vw}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{right:300px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{right:300px}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;--lp-item-padding:60px;padding-top:var(--lp-item-padding);padding-bottom:var(--lp-item-padding)}@media(max-width:1024px){.content-item-wrap{width:100%;--lp-item-padding:40px}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);font-weight:700}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap .content-item-summary:after{clear:both;content:\"\";display:block}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description .wp-video,.content-item-wrap .content-item-description .mejs-container{margin-bottom:15px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:10px;margin-bottom:15px;letter-spacing:unset}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-weight:300}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center;gap:10px}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:999;bottom:0;right:50%;width:100%;max-width:792px;height:auto;margin-right:237px;transform:translateX(50%);background:#fff;padding-bottom:10px}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .questions-pagination .nav-links{text-align:center;display:flex;justify-content:center;gap:4px;margin-top:6px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:10px 15px;margin:0;color:var(--lp-color-base,#333);background-color:transparent;font-weight:normal;border:1px solid var(--lp-border-color,#e2e0db);line-height:1;border-radius:var(--lp-border-radius,5px)}.content-item-wrap .questions-pagination .nav-links .page-numbers.dots{border:0}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}@media(max-width:575px){.content-item-wrap .questions-pagination .nav-links{margin-top:10px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:5px 10px}}.course-curriculum .section-title{position:relative;margin-bottom:0}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:var(--lp-border-color,#e2e0db)}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}.social-share-toggle{position:relative;display:flex;gap:20px}.social-share-toggle .share-toggle-icon{cursor:pointer;display:flex;align-items:center;gap:8px}.social-share-toggle .share-toggle-icon .share-label{margin:0;cursor:pointer}.social-share-toggle .share-toggle-icon:hover{color:var(--lp-primary-color,#ffb606)}.social-share-toggle .content-widget-social-share{padding:20px;background:#fff;box-shadow:0 1px 16px 0 rgba(0,0,0,0.12)}.social-share-toggle .lp-social-media{display:inline-flex;padding:0;gap:12px;margin:0}.social-share-toggle .lp-social-media>li{text-align:center;list-style:none}.social-share-toggle .lp-social-media>li span{display:none}.social-share-toggle .lp-social-media>li i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.social-share-toggle .lp-social-media>li i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.social-share-toggle .clipboard-post{display:flex;justify-content:space-between;margin-bottom:20px;gap:12px}.social-share-toggle .btn-clipboard{position:relative;padding:12px 20px;white-space:nowrap}.social-share-toggle .btn-clipboard .tooltip{display:none;position:absolute;z-index:2;right:50%;left:auto;bottom:100%;transform:translateX(50%);width:max-content;color:#fff;font-size:.825em;padding:5px 10px;background:rgba(0,0,0,0.72);border-radius:3px;margin-bottom:10px}.social-share-toggle .btn-clipboard .tooltip:before{content:\"\";position:absolute;z-index:2;right:50%;bottom:-5px;margin-right:-3px;border-right:5px solid transparent;border-left:5px solid transparent;border-top:5px solid rgba(0,0,0,0.72)}.social-share-toggle .btn-clipboard:hover{background-color:#eee}.social-share-toggle .btn-clipboard:hover .tooltip{display:block}.social-share-toggle .clipboard-value{border:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;flex:1}@media(max-width:600px){.social-share-toggle .clipboard-value{width:100%}}.social-share-toggle .wrapper-content-widget{visibility:hidden;text-align:right;opacity:0;-webkit-transition:all .27s ease;-moz-transition:all .27s ease;-o-transition:all .27s ease;transition:all .27s ease;position:absolute;left:0;top:auto;z-index:9;margin-top:20px}.social-share-toggle.social-share-toggle__open .wrapper-content-widget{margin-top:0;visibility:visible;opacity:1}@media(max-width:768px){.social-share-toggle .wrapper-content-widget{position:fixed;top:0;right:0;left:0;bottom:0;background-color:rgba(0,0,0,0.7)}.social-share-toggle .wrapper-content-widget .content-widget-social-share{position:relative;z-index:1;max-width:fit-content;top:50%;min-width:320px;transform:translateY(-50%);margin:0 auto}}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.course-curriculum .section-header .section-left{display:flex;align-items:center;gap:16px}.course-curriculum .section-header .section-left .wrapper-section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer;min-width:1em}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-angle-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-angle-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up,.course-curriculum .section.closed .section-toggle .lp-icon-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-material-skeleton{overflow:auto}.lp-material-skeleton .course-material-table{width:100%}.lp-material-skeleton .course-material-table th{text-align:center}.lp-material-skeleton .course-material-table th:first-child{text-align:right}.lp-material-skeleton .course-material-table tr td:not(:first-child){text-align:center}.lp-material-skeleton .course-material-table tfoot td{text-align:right;font-weight:bold}.lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}#popup-content .lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.theme-twentytwentytwo .wp-container-11 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-9 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-12 .alignfull,.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}.learnpress.twentytwentyone .lp-archive-courses a:focus,.learnpress.theme-twentytwentyone .lp-archive-courses a:focus{background:transparent !important;text-decoration:none !important;outline:none !important}.learnpress.twentytwentyone .pagination,.learnpress.twentytwentyone .comments-pagination,.learnpress.theme-twentytwentyone .pagination,.learnpress.theme-twentytwentyone .comments-pagination{border-top:0;padding-top:0}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part,.learnpress.theme-twentytwentyone .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb{max-width:var(--lp-container-max-width);width:100%;margin:0 auto;padding:1em var(--lp-cotainer-padding);list-style:none}ul.learn-press-breadcrumb li{display:inline-block;margin:0}ul.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb i{margin:0 8px}ul.learn-press-breadcrumb a{color:inherit}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:right}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:right}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:right}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}@media(max-width:1024px){body.learnpress-page{--lp-cotainer-padding:1rem}}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:\"\"}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-entry-content .course-tabs{margin-bottom:40px}form.retake-course,form.enroll-course,form.purchase-course{display:inline-flex;flex-direction:column;gap:10px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:var(--lp-primary-color)}.primary-color-before::before{color:var(--lp-primary-color)}.primary-color-after::after{color:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}\n\\ No newline at end of file\n+@charset \"UTF-8\";:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}.learn-press-message{position:relative;margin:24px auto;padding:10px 20px;border-radius:var(--lp-border-radius,5px);background-color:#e5f7ff;color:#007aff;width:100%}.learn-press-message.error{background-color:#fee5e5;color:#ff3b30}.learn-press-message.warning{background-color:#fef7e6;color:#ff9500}.learn-press-message.success{background-color:#ebf8e5;color:#3ab500}.learn-press-message.info{background-color:rgba(0,122,255,0.1019607843);color:#007aff}.learn-press-message a{text-decoration:underline}.lp-toast.toastify{background:#ebf8e5;color:#3ab500;border-radius:var(--lp-border-radius,5px);box-shadow:0 0;display:flex;align-items:center}.lp-toast.toastify .toast-close{background:transparent !important;font-size:0;padding-right:12px}.lp-toast.toastify .toast-close:before{content:\"\\f00d\";font-family:\"lp-icon\";font-size:16px;color:#000;line-height:17px}.lp-toast.toastify .toast-close:hover{opacity:1}.lp-toast.toastify.error{background-color:#fee5e5;color:#ff3b30;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.warning{background-color:#fef7e6;color:#fb9422;padding:12px 20px;border:0;margin:0 auto}.lp-toast.toastify.info{background-color:rgba(0,122,255,0.1019607843);color:#277afc;padding:12px 20px;border:0;margin:0 auto}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}*,:after,:before{box-sizing:border-box}body{background:#fff}button{cursor:pointer}.learnpress-page input[type=text],.learnpress-page input[type=email],.learnpress-page input[type=number],.learnpress-page input[type=password],.learnpress-page textarea{border-color:var(--lp-border-color,#e2e0db);-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px)}.learnpress-page input[type=text]:focus,.learnpress-page input[type=email]:focus,.learnpress-page input[type=number]:focus,.learnpress-page input[type=password]:focus,.learnpress-page textarea:focus{outline:0;border-color:var(--lp-primary-color,#ffb606)}.learnpress-page .lp-button,.learnpress-page #lp-button{padding:12px 24px;border:1px solid var(--lp-border-color,#e2e0db);color:var(--lp-color-base,#333);background:transparent;box-shadow:unset;font-family:inherit;font-weight:400;text-align:center;text-transform:capitalize;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);-webkit-transition:all .25s;-moz-transition:all .25s;-ms-transition:all .25s;-o-transition:all .25s;transition:all .25s}.learnpress-page .lp-button.large,.learnpress-page #lp-button.large{height:52px;padding:18px 30px;font-size:1.1em}.learnpress-page .lp-button:hover,.learnpress-page #lp-button:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.learnpress-page .lp-button.btn-ajax-off .icon,.learnpress-page #lp-button.btn-ajax-off .icon{display:none}.learnpress-page .lp-button.btn-ajax-on .icon,.learnpress-page #lp-button.btn-ajax-on .icon{display:inline-block;margin-left:5px;-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.learnpress-page .lp-button:focus,.learnpress-page #lp-button:focus{outline:0}.learnpress-page .rwmb-field .description{margin-top:8px;color:#999;font-size:smaller;font-style:italic}input,button,select,textarea{outline:0}a{-webkit-transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;transition:.3s;text-decoration:none}p{margin-bottom:1rem}p:last-child{margin:0}.lp-content-area{max-width:var(--lp-container-max-width) !important;margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-content-area.learn-press-message{margin-bottom:24px;padding-right:15px;padding-left:15px}.lp-ico svg{width:20px;height:20px}.lp-button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px}.lp-button.loading{pointer-events:none;opacity:.8}.lp-button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.lp-hidden{display:none !important}.course-price .origin-price{text-decoration:line-through;margin-left:4px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);opacity:.6}.learn-press-tabs{margin-bottom:32px;position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.learn-press-tabs .learn-press-tabs__checker{display:none}.learn-press-tabs__nav{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-tabs__item{position:relative;margin:0;list-style:none}.learn-press-tabs__item>a{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-tabs__item>a:focus{outline:0;text-decoration:none}.learn-press-tabs__item::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-tabs__item.active a,.learn-press-tabs__item:hover a{color:var(--lp-primary-color,#ffb606)}.learn-press-tabs__item.active::after,.learn-press-tabs__item:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-tabs.stretch .learn-press-tabs__tab{flex:1}.learn-press-tabs.stretch .learn-press-tabs__tab>label{padding:18px 10px}@media(max-width:990px){.learn-press-tabs__nav,.learn-press-tabs .learn-press-filters{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;scroll-behavior:smooth}.learn-press-tabs__nav::-webkit-scrollbar,.learn-press-tabs .learn-press-filters::-webkit-scrollbar{display:none}}.learn-press-filters{display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-filters li{position:relative;margin:0;list-style:none}.learn-press-filters li a,.learn-press-filters li span{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-filters li a:focus,.learn-press-filters li span:focus{outline:0;text-decoration:none}.learn-press-filters li a::after,.learn-press-filters li span::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-filters li a.active,.learn-press-filters li a:hover,.learn-press-filters li span.active,.learn-press-filters li span:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li a.active::after,.learn-press-filters li a:hover::after,.learn-press-filters li span.active::after,.learn-press-filters li span:hover::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a,.learn-press-filters li.active span{color:var(--lp-primary-color,#ffb606)}.learn-press-filters li.active a::after,.learn-press-filters li.active span::after{background:var(--lp-primary-color,#ffb606)}.learn-press-filters li:after{display:none !important}.wrapper-course-nav-tabs{position:relative;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#learn-press-course-tabs.show-all .course-tab-panel{margin-bottom:40px}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .course-tab-panels .course-tab-panel:nth-child(1){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(1):checked ~ .learn-press-nav-tabs .course-nav:nth-child(1) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .course-tab-panels .course-tab-panel:nth-child(2){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(2):checked ~ .learn-press-nav-tabs .course-nav:nth-child(2) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .course-tab-panels .course-tab-panel:nth-child(3){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(3):checked ~ .learn-press-nav-tabs .course-nav:nth-child(3) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .course-tab-panels .course-tab-panel:nth-child(4){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(4):checked ~ .learn-press-nav-tabs .course-nav:nth-child(4) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .course-tab-panels .course-tab-panel:nth-child(5){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(5):checked ~ .learn-press-nav-tabs .course-nav:nth-child(5) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .course-tab-panels .course-tab-panel:nth-child(6){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(6):checked ~ .learn-press-nav-tabs .course-nav:nth-child(6) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .course-tab-panels .course-tab-panel:nth-child(7){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(7):checked ~ .learn-press-nav-tabs .course-nav:nth-child(7) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .course-tab-panels .course-tab-panel:nth-child(8){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(8):checked ~ .learn-press-nav-tabs .course-nav:nth-child(8) label{color:var(--lp-primary-color);background:#fff}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .course-tab-panels .course-tab-panel:nth-child(9){display:block}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9){border-bottom:0}#learn-press-course-tabs input[name=learn-press-course-tab-radio]:nth-child(9):checked ~ .learn-press-nav-tabs .course-nav:nth-child(9) label{color:var(--lp-primary-color);background:#fff}.course-tab-panels .course-tab-panel{padding-top:30px}.course-tab-panel{display:none}.course-tab-panel.active{display:block}.course-tab-panel .course-description h4{margin-top:0;margin-bottom:1.125em}.course-tab-panel .course-description img{max-width:100%;height:auto;vertical-align:middle}.course-tab-panel .lp-course-author{display:flex;align-items:start}@media(max-width:767px){.course-tab-panel .lp-course-author{flex-direction:column;align-items:center}}.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:30px;text-align:center;align-items:center}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-left{margin-left:0;margin-bottom:24px}}.course-tab-panel .lp-course-author img{width:100px;height:100px;border-radius:50%;object-fit:cover;object-position:center;display:block;margin:0 auto}.course-tab-panel .lp-course-author .course-author__pull-right{flex:1}@media(max-width:767px){.course-tab-panel .lp-course-author .course-author__pull-right{width:100%;text-align:center}}.course-tab-panel .lp-course-author .author-title{margin-bottom:4px}.course-tab-panel .lp-course-author .author-title a{text-decoration:none;color:var(--lp-color-base,#333);box-shadow:none;font-size:1.125em;font-weight:500;text-transform:capitalize}.course-tab-panel .lp-course-author .author-title a:hover{color:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-description{color:#666;font-style:italic}.course-tab-panel .lp-course-author .instructor-social{display:flex;gap:16px;margin-bottom:12px}.course-tab-panel .lp-course-author .author-socials{display:grid;grid-template-columns:repeat(4,33px);gap:10px;justify-content:center;margin-top:16px}.course-tab-panel .lp-course-author .author-socials>a{display:inline-block;width:33px;height:33px;margin:0;border:1px solid #ededed;border-radius:50%;color:#878787;box-shadow:none;font-size:.8em;line-height:2em;text-align:center;vertical-align:middle;transition:all .3s}.course-tab-panel .lp-course-author .author-socials>a:hover{border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color)}.course-tab-panel .lp-course-author .author-socials .fa-googleplus::before{content:\"\\f0d5\"}.course-tab-panel .lp-course-curriculum__title{display:none}.learn-press-nav-tabs{margin:0;display:flex;flex-wrap:wrap;padding:0;column-gap:40px;row-gap:12px;list-style:none;margin:0 0 -1px 0 !important}.learn-press-nav-tabs li{position:relative;margin:0;list-style:none}.learn-press-nav-tabs li label{display:block;margin:0;padding:0 0 16px 0;font-size:1.125em;line-height:1;font-weight:600;text-align:center;cursor:pointer;color:var(--lp-color-base,#333);text-decoration:none}.learn-press-nav-tabs li label:focus{outline:0;text-decoration:none}.learn-press-nav-tabs li::after{position:absolute;bottom:0;top:auto;right:0;width:100%;height:2px;background:transparent;content:\"\"}.learn-press-nav-tabs li.active label,.learn-press-nav-tabs li:hover label{color:var(--lp-primary-color,#ffb606)}.learn-press-nav-tabs li.active::after,.learn-press-nav-tabs li:hover::after{background:var(--lp-primary-color,#ffb606)}.TabsDragScroll{position:relative}.TabsDragScroll:hover{cursor:all-scroll}.TabsDragScroll ul{max-width:100%;white-space:nowrap;scroll-behavior:smooth;user-select:none;overflow-x:auto;flex-wrap:nowrap}.TabsDragScroll ul::-webkit-scrollbar{display:none}.TabsDragScroll ul.dragging{scroll-behavior:unset;cursor:all-scroll}.lp-checkout-form__before,.lp-checkout-form__after{width:45%;width:-webkit-calc(50% - 30px);width:-moz-calc(50% - 30px);width:calc(50% - 30px);margin:0 15px 40px 15px}.lp-checkout-form__before .lp-checkout-block h4,.lp-checkout-form__after .lp-checkout-block h4{margin-top:0;margin-bottom:18px;color:#333;font-size:1.5em;font-weight:600;line-height:1}@media(max-width:815px){.lp-checkout-form__before,.lp-checkout-form__after{width:100%;margin:0 0 40px 0}}.lp-checkout-form__before{float:left}.lp-checkout-form__before #checkout-order{width:100%}.lp-checkout-form .lp-checkout-form__after{float:right}.lp-checkout-form .lp-checkout-remember{letter-spacing:0;margin-top:0}.lp-checkout-form .lp-checkout-remember label{width:auto;color:#666}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]{position:relative;top:3px;width:19px;height:19px;margin:0 0 0 4px;border:1px solid #ccc;cursor:pointer;-webkit-appearance:none}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:focus{outline:0}.lp-checkout-form .lp-checkout-remember label input[type=checkbox]:checked::after{position:absolute;top:2px;right:2px;color:#41abec;font-family:\"lp-icon\";font-size:14px;line-height:1;content:\"\\f00c\";border:0;transform:none}.lp-checkout-form .lp-checkout-remember a{color:#666;font-weight:300;text-decoration:underline;text-decoration-color:#ccc}.lp-checkout-form .lp-checkout-remember a:hover{color:var(--lp-primary-color);text-decoration-color:var(--lp-primary-color)}.lp-checkout-form .lp-form-fields{padding:0 0 14px 0}.lp-checkout-form .lp-form-fields label{display:block;margin-bottom:10px}.lp-checkout-form .lp-form-fields input:not([type=checkbox]){line-height:normal;width:100%;padding:10px 15px;border:1px solid #ccc}.lp-checkout-form .lp-form-fields input:not([type=checkbox]):focus{border-color:var(--lp-primary-color);outline:0}.lp-checkout-form{margin:0 -15px;margin-top:50px}@media(max-width:815px){.lp-checkout-form{display:flex;flex-direction:column-reverse;margin:0}}.lp-checkout-form #btn-checkout-account-switch-to-guest{margin-bottom:60px}.lp-checkout-form .description{float:right}.lp-checkout-form a{color:#41abec}.lp-checkout-form a label{display:inline-block;color:inherit;font-weight:normal;cursor:pointer}.lp-checkout-form a:hover{color:var(--lp-primary-color,#ffb606)}.lp-checkout-form #checkout-account-guest{width:100%;margin-bottom:35px;padding-bottom:19px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}.lp-checkout-form #checkout-account-guest .lp-form-fields,.lp-checkout-form #checkout-account-guest .form-field{margin-bottom:0;padding-bottom:0}.lp-checkout-form div.lp-guest-checkout-output{margin-top:10px;padding:8px 20px;border:2px solid #41abec;border-radius:4px;transition:all .2s ease}.lp-checkout-form label.lp-guest-checkout-output{margin-top:10px;cursor:pointer;user-select:none}.lp-checkout-form .lp-guest-checkout-notice{margin:30px 0 0 0}.lp-checkout-form .lp-guest-switch-login{margin-top:1em;color:#666;font-weight:400}.lp-checkout-form .lp-guest-switch-login a{display:inline-block}.lp-checkout-form input[name=checkout-account-switch-form]{display:none}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block{display:none;overflow:hidden;height:0;margin:0;padding:0;border:0;opacity:0}.lp-checkout-form input[name=checkout-account-switch-form]:not(:checked)+.lp-checkout-block>*{overflow:hidden;height:0}.lp-checkout-form input[name=checkout-account-switch-form]:checked+.lp-checkout-block{display:block;overflow:auto;height:auto}.lp-checkout-form input[name=checkout-account-switch-form][value=guest]:checked ~ #btn-checkout-account-switch-to-guest{display:none}.lp-checkout-form::after{display:block;clear:both;content:\"\"}.lp-checkout-form:focus{outline:0}#checkout-order .lp-checkout-order__inner{padding:0 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:4px}#checkout-order .cart-item:first-child td{border-top:0}#checkout-order td,#checkout-order th{border-left:0;border-right:0;background:transparent}#checkout-order td:last-child,#checkout-order th:last-child{padding-left:0}#checkout-order table{width:100%;margin:0;border:0}#checkout-order .course-name{font-weight:600}#checkout-order .course-name a{display:-webkit-box;overflow:hidden;color:#000;-webkit-line-clamp:1;-webkit-box-orient:vertical}#checkout-order .course-name a:hover{color:var(--lp-primary-color)}#checkout-order .col-number{min-width:50px;color:#666;font-weight:600;text-align:left}#checkout-order tfoot{font-size:1.2em}#checkout-order tfoot th{font-weight:600;padding-right:0}#checkout-order tfoot .order-total{font-size:1.4em}#checkout-order tfoot tr:last-child{border-width:0}#checkout-order tfoot tr:last-child td,#checkout-order tfoot tr:last-child th{border-width:0}#checkout-order .course-thumbnail{width:80px;padding:20px 0 18px 13px}#checkout-order .course-thumbnail img{width:100px;max-width:100% !important;height:auto !important}.order-comments{width:100%;padding:15px;min-height:150px;border:1px solid var(--lp-border-color,#e2e0db);resize:none}#checkout-account-register,#checkout-account-login{width:100%;margin-bottom:32px;padding-bottom:20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}#checkout-account-register .form-field .rwmb-label,#checkout-account-register .form-field .rwmb-input .description,#checkout-account-login .form-field .rwmb-label,#checkout-account-login .form-field .rwmb-input .description{display:none}#checkout-account-register .lp-checkout-remember label,#checkout-account-login .lp-checkout-remember label{display:inline-block}#checkout-account-register .lp-checkout-remember a,#checkout-account-login .lp-checkout-remember a{float:left}#checkout-account-register .lp-checkout-sign-in-link,#checkout-account-register .lp-checkout-sign-up-link,#checkout-account-login .lp-checkout-sign-in-link,#checkout-account-login .lp-checkout-sign-up-link{display:flex;margin:0;color:#666;font-weight:400}#checkout-account-register .lp-checkout-sign-in-link a,#checkout-account-register .lp-checkout-sign-up-link a,#checkout-account-login .lp-checkout-sign-in-link a,#checkout-account-login .lp-checkout-sign-up-link a{margin-right:5px;color:#41abec;cursor:pointer}#checkout-account-register .lp-checkout-sign-in-link a:hover,#checkout-account-register .lp-checkout-sign-up-link a:hover,#checkout-account-login .lp-checkout-sign-in-link a:hover,#checkout-account-login .lp-checkout-sign-up-link a:hover{color:var(--lp-primary-color)}#checkout-account-register .lp-checkout-sign-in-link a label,#checkout-account-register .lp-checkout-sign-up-link a label,#checkout-account-login .lp-checkout-sign-in-link a label,#checkout-account-login .lp-checkout-sign-up-link a label{display:inline-block;float:left;color:inherit;font-weight:normal;cursor:pointer}#checkout-payment{width:100%;margin-bottom:25px}#checkout-payment h4{margin-bottom:24px}#checkout-payment .secure-connection{margin-top:5px;opacity:.5;font-size:.75em;font-weight:normal;margin-right:10px}#checkout-payment .secure-connection i{margin-left:5px;font-size:1.125em}@media(max-width:767px){#checkout-payment .secure-connection{margin-top:0}}#checkout-payment .payment-methods{margin:0 0 24px 0;padding:0;list-style:none}#checkout-payment .lp-payment-method{position:relative;margin:0}#checkout-payment .lp-payment-method>label{display:flex;align-items:center}#checkout-payment .lp-payment-method .gateway-input,#checkout-payment .lp-payment-method .gateway-icon{vertical-align:middle}#checkout-payment .lp-payment-method .gateway-icon{max-height:32px}#checkout-payment .lp-payment-method .gateway-input{position:relative;width:20px;height:20px;margin:0 0 0 8px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;-webkit-appearance:none;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input::before{position:absolute;top:50%;right:50%;width:6px;height:6px;background:#41abec;transform:translate(50%,-50%);-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}#checkout-payment .lp-payment-method .gateway-input:checked::before{content:\"\"}#checkout-payment .lp-payment-method .gateway-input:focus{outline:0}#checkout-payment #checkout-order-action button{width:100%;border-color:var(--lp-primary-color);color:#fff;background:var(--lp-primary-color);font-weight:500}#checkout-payment #checkout-order-action button:hover{border-color:var(--lp-primary-color);opacity:.5;background:var(--lp-primary-color)}.lp-terms-and-conditions{color:#666}.lp-terms-and-conditions a{color:#41abec}.lp-terms-and-conditions a:hover{color:var(--lp-primary-color)}.learn-press-checkout.guest-checkout{display:none}.button-continue-guest-checkout{clear:both}#learn-press-checkout .payment-methods{margin:0;padding:0;list-style:none}#learn-press-checkout .payment-methods .lp-payment-method{margin-bottom:20px}#learn-press-checkout .payment-methods .lp-payment-method>label{display:flex;flex-flow:row nowrap;padding:10px 20px;background:#f5f5f5;line-height:2.5rem;cursor:pointer}#learn-press-checkout .payment-methods .lp-payment-method>label img{vertical-align:middle}#learn-press-checkout .payment-methods .lp-payment-method.selected>label{background:#d4d4d4}#learn-press-checkout .payment-methods .payment-method-form{display:none;padding:15px 20px;border-top:1px solid var(--lp-border-color,#e2e0db);background:#f9f9f9}#learn-press-checkout-login,#learn-press-checkout-register{margin-bottom:1.5em;padding:20px 20px 0 20px;border:1px solid var(--lp-border-color,#e2e0db);background:#fff}#learn-press-order-review,.learn-press-checkout-comment{margin-bottom:20px}#checkout-form-login,#checkout-form-register{_display:none}#checkout-form-login .learn-press-form-register,#checkout-form-login .learn-press-form-login,#checkout-form-register .learn-press-form-register,#checkout-form-register .learn-press-form-login{display:none}#checkout-guest-email{margin:0 0 20px 0}#checkout-guest-email .form-heading{margin:0}#checkout-guest-email #checkout-guest-options{margin:0;list-style:none}#checkout-guest-email #checkout-existing-account,#checkout-guest-email #checkout-new-account{display:none;margin:0}#checkout-guest-email.email-exists #checkout-existing-account{display:block}#checkout-guest-email.email-exists #checkout-new-account{display:none}.learn-press-checkout-comment h4{display:none}.lp-content-area .order_details{width:100%;border-collapse:collapse}.lp-content-area .order_details th a,.lp-content-area .order_details td a{color:var(--lp-primary-color)}.learnpress-checkout .learnpress>.learn-press-message{max-width:var(--lp-container-max-width);margin:0 auto}input[type=text],input[type=email],input[type=number],input[type=password]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;box-shadow:unset}.learnpress table{width:100%;margin:0 auto 1em auto;border-spacing:0;border-collapse:collapse}.learnpress table th,.learnpress table td{padding:.7em 1em;border:1px solid var(--lp-border-color,#e2e0db);background:#fff;text-align:right}.learnpress table thead{box-sizing:border-box;border:1px solid var(--lp-border-color,#e2e0db)}.learnpress table thead th{border-bottom:0;background:var(--lp-white-grey,#f7f7fb);font-size:1.1em;font-weight:600}.learnpress table tbody,.learnpress table tfoot{box-sizing:border-box}.learnpress table tbody td,.learnpress table tbody th,.learnpress table tfoot td,.learnpress table tfoot th{border:1px solid var(--lp-border-color,#e2e0db);line-height:1.4}.learnpress table tbody td a,.learnpress table tbody th a,.learnpress table tfoot td a,.learnpress table tfoot th a{color:inherit;text-decoration:none}.learnpress table tbody td a:hover,.learnpress table tbody th a:hover,.learnpress table tfoot td a:hover,.learnpress table tfoot th a:hover{color:var(--lp-primary-color)}.learnpress table tbody tr .column-status .result-percent,.learnpress table tfoot tr .column-status .result-percent{font-weight:500}.learnpress table tbody tr .column-status .lp-label,.learnpress table tfoot tr .column-status .lp-label{font-weight:600}.learnpress table tbody tr:nth-child(even) td,.learnpress table tfoot tr:nth-child(even) td{background:var(--tb-even-color,#fafafa)}.learnpress table .list-table-nav td{font-size:.875em}.learnpress table .list-table-nav td.nav-text{text-align:right}.learnpress table .list-table-nav td.nav-pages{text-align:left}.learnpress table .list-table-nav td.nav-pages .learn-press-pagination{text-align:left}.learnpress table .list-table-nav td.nav-pages .page-numbers{margin-bottom:0}.lp-label{display:inline-block;color:#666;font-weight:300}.learn-press-form .form-fields{margin:0;padding:0;list-style:none}.lp-profile-content .learn-press-form .form-fields{margin:0 -15px !important}.lp-profile-content .learn-press-form .form-fields .form-field{padding-right:15px;padding-left:15px}@media(min-width:767px){.lp-profile-content .learn-press-form .form-fields .form-field__50{width:50%;float:right}}.learn-press-form .form-fields .form-field{margin:0 0 20px 0}.learn-press-form .form-fields .form-field>label{font-style:italic}.learn-press-form .form-fields .form-field label{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:700;margin:0 0 10px 0}.learn-press-form .form-fields .form-field input[type=email],.learn-press-form .form-fields .form-field input[type=text],.learn-press-form .form-fields .form-field input[type=password],.learn-press-form .form-fields .form-field input[type=tel],.learn-press-form .form-fields .form-field input[type=url],.learn-press-form .form-fields .form-field input[type=number],.learn-press-form .form-fields .form-field textarea{width:100%;border:1px solid var(--lp-border-color,#e2e0db);padding:8px 16px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.learn-press-form .form-fields .form-field input[type=email]:focus,.learn-press-form .form-fields .form-field input[type=text]:focus,.learn-press-form .form-fields .form-field input[type=password]:focus,.learn-press-form .form-fields .form-field input[type=tel]:focus,.learn-press-form .form-fields .form-field input[type=url]:focus,.learn-press-form .form-fields .form-field input[type=number]:focus,.learn-press-form .form-fields .form-field textarea:focus{border-color:var(--lp-primary-color,#ffb606);outline:0}.learn-press-form .form-fields .form-field .description{margin-top:10px;font-size:.875em;font-style:italic;line-height:1.4}.learn-press-form .form-fields .form-field .asterisk,.learn-press-form .form-fields .form-field .required{color:red}.learn-press-form.completed button::before{margin-left:10px;font-family:\"lp-icon\";font-size:1.125em;content:\"\\f00c\"}.learn-press-form .form-field__clear{clear:both}.learn-press-form form>p>label{display:flex;gap:8px}.learn-press-form p{margin:0}.learn-press-form-login,.learn-press-form-register{max-width:600px;margin-left:auto;margin-bottom:60px;margin-right:auto;padding:40px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);box-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06)}.learn-press-form-login h3,.learn-press-form-register h3{margin-bottom:20px}.learn-press-form-login button[type=submit],.learn-press-form-register button[type=submit]{padding:12px 16px;width:100%;border-radius:var(--lp-border-radius,5px);outline:0;color:#fff;background:var(--lp-primary-color)}.required label{font-weight:bold}.required label:after{content:\" *\";display:inline}.lp-password-input{display:flex;flex-direction:column;justify-content:center;position:relative;width:100%}.lp-password-input input[type=password]{padding-left:2.5em}.lp-password-input input::-ms-reveal{display:none}.lp-password-input .lp-show-password-input{position:absolute;top:8px;left:10px;cursor:pointer}.lp-password-input .lp-show-password-input::after{font-family:\"lp-icon\";content:\"\\f06e\"}.lp-password-input .lp-show-password-input.display-password::after{color:#585858;content:\"\\f070\"}.form-desc{font-size:smaller;font-style:italic}.become-teacher-form{width:90%;max-width:500px;margin:0 auto}.become-teacher-form .form-field input[type=text],.become-teacher-form .form-field input[type=email],.become-teacher-form .form-field input[type=number],.become-teacher-form .form-field input[type=password]{width:100%}.become-teacher-form .become-teacher-form__description{margin-top:12px}.become-teacher-form button{padding:12px 24px}.btn-base{border-color:var(--lp-primary-color);color:white;background-color:var(--lp-primary-color)}.lp-user-cover-image_background{position:relative}.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image{opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image{position:absolute;bottom:0;left:0;background:var(--lp-white-grey,#f7f7fb);padding:12px 20px;border-radius:0 var(--lp-border-radius,5px) 0 var(--lp-border-radius,5px);text-transform:capitalize;cursor:pointer;color:var(--lp-primary-color,#ffb606);text-decoration:none;opacity:0;visibility:hidden}@media(max-width:767px){.lp-user-cover-image_background .lp-btn-to-edit-cover-image{font-size:0;padding:4px 12px;opacity:1;visibility:visible}.lp-user-cover-image_background .lp-btn-to-edit-cover-image:before{font-family:\"lp-icon\";content:\"\\f044\";font-size:16px}}.lp-user-cover-image__display{width:100%}@media(max-width:767px){.lp-user-cover-image{position:relative;z-index:1}}.lp-user-cover-image .lp-cover-image-empty{display:flex;align-items:center;width:100%;height:250px;border:2px dashed var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;position:relative;text-align:center}.lp-user-cover-image .lp-cover-image-empty:hover{border-color:var(--lp-primary-color,#ffb606)}.lp-user-cover-image .lp-cover-image-empty input[type=file]{position:absolute;top:0;right:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:10}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{z-index:1;flex:1;position:relative;padding:0 16px;line-height:1.3}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top{font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-direction:column}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image{font-size:32px;transform:rotate(90deg)}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before{color:var(--lp-primary-color);content:\"\\f08b\"}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom{opacity:.7}@media(max-width:420px){.lp-user-cover-image .lp-cover-image-empty{height:200px}.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info{padding:0 8px;font-size:15px}}.lp-user-cover-image .lp-user-cover-image__buttons{display:inline-flex;gap:12px;margin-top:16px}.lp-user-cover-image_background{background-repeat:no-repeat;background-position:center;background-size:cover;margin-bottom:20px;border-radius:var(--lp-border-radius,5px);min-height:100px}.lp-user-cover-image_background>img{opacity:0;visibility:hidden}.learnpress_avatar__form label{display:inline-block}.learnpress_avatar__form input[type=file]{display:none}.learnpress_avatar__form__upload{display:flex;width:200px;height:200px;border:1px dashed var(--lp-border-color,#e2e0db);border-radius:3px;background-color:#fafafa;font-size:.875em;font-weight:300;font-style:italic;line-height:2.6875em;text-align:center;cursor:pointer;align-items:center;justify-content:center}.learnpress_avatar__form__upload div{line-height:1.4}.learnpress_avatar__button--loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}button.learnpress_avatar__button{height:40px;padding:0 15px;border:0;background:var(--lp-primary-color);color:white;margin-top:15px;border-radius:3px}button.learnpress_avatar__button+button{margin-right:15px;margin-left:0}.dashboard-statistic__row{display:flex;gap:20px;flex-wrap:wrap}.dashboard-statistic__row .statistic-box{padding:20px;background:var(--lp-white-grey,#f7f7fb);text-align:center;display:flex;flex-wrap:wrap;gap:20px;border-radius:var(--lp-border-radius,5px);width:calc((100% - 40px) \u002F 3)}@media(min-width:1200px) and (max-width:1440px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:1200px){.dashboard-statistic__row .statistic-box{width:calc((100% - 20px) \u002F 2)}}@media(max-width:768px){.dashboard-statistic__row .statistic-box{gap:16px;padding:16px}}@media(max-width:600px){.dashboard-statistic__row{gap:8px}.dashboard-statistic__row .statistic-box{width:100%;gap:12px;padding:8px 12px}.dashboard-statistic__row .statistic-box__text{display:flex;justify-content:space-between;align-items:center}.dashboard-statistic__row .statistic-box__text label{margin:0}.dashboard-statistic__row .statistic-box__text__number{font-size:1.2em}.dashboard-statistic__row .statistic-box__icon span{--lp-width-icon:40px;font-size:18px}}.statistic-box__icon span{--lp-width-icon:60px;display:flex;width:var(--lp-width-icon);height:var(--lp-width-icon);border-radius:50%;background:rgba(0,199,190,0.1019607843);line-height:var(--lp-width-icon);align-items:center;justify-content:center;color:#00c7be;font-size:24px}.statistic-box__icon [class^=lp-icon-]:before{width:1em}.statistic-box__icon .lp-icon-enrolled_courses:before,.statistic-box__icon .lp-icon-total_course:before{content:\"\\f518\"}.statistic-box__icon .lp-icon-in_progress_course,.statistic-box__icon .lp-icon-student_in_progress{background:rgba(175,82,222,0.1019607843);color:#af52de}.statistic-box__icon .lp-icon-finished_courses,.statistic-box__icon .lp-icon-published_course{background:rgba(88,86,214,0.1019607843);color:#5856d6}.statistic-box__icon .lp-icon-passed_courses,.statistic-box__icon .lp-icon-student_completed{background:rgba(85,190,36,0.2);color:#34c759}.statistic-box__icon .lp-icon-failed_courses,.statistic-box__icon .lp-icon-pending_course{background:rgba(255,59,48,0.1019607843);color:#ff3b30}.statistic-box__icon .lp-icon-total_student{background:rgba(0,122,255,0.1019607843);color:#007aff}.statistic-box__icon .lp-icon-total_student:before{content:\"\\f501\"}.statistic-box__text{flex:1;text-align:right}.statistic-box__text label{display:block;margin-bottom:4px;font-weight:normal;line-height:1.3;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.statistic-box__text__number{font-size:1.6em;line-height:1;font-weight:600}.lp-enrolled-students-table-wrap{margin-top:15px}.lp-enrolled-students-table-wrap .instructor-avatar{align-items:center;justify-content:center;width:36px;height:36px;min-width:36px;border-radius:50%;background:#64748b;overflow:hidden}.lp-enrolled-students-table-wrap .instructor-avatar img{width:100%;height:100%;object-fit:cover}.lp-enrolled-students-table-toolbar{display:flex;flex-direction:column;gap:14px;padding:20px 20px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:5px;background:var(--lp-white-grey,#f7f7fb)}.lp-enrolled-students-table-toolbar__row{display:grid;gap:14px}.lp-enrolled-students-table-toolbar__row--course{grid-template-columns:minmax(0,1fr)}.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(145px,200px) minmax(145px,150px) auto;align-items:end;max-width:1000px}.lp-enrolled-students-table-toolbar__field{display:flex;flex-direction:column;min-width:0}.lp-enrolled-students-table-toolbar__field input{border:1px solid var(--lp-border-color,#e2e0db)}.lp-enrolled-students-table-toolbar__label{color:#3f4a5c;font-size:14px;font-weight:600;line-height:1.3;margin-bottom:10px;text-align:right}.lp-enrolled-students-table-toolbar__input{width:100%;height:38px;padding:0 12px;border:1px solid #c6cfdb;border-radius:7px;color:#2f3a4a;background:#fff;font-size:14px;line-height:1.4;box-shadow:none}.lp-enrolled-students-table-toolbar__input:focus{border-color:#2f75ff;outline:0;box-shadow:0 0 0 1px #2f75ff}.lp-enrolled-students-table-toolbar__actions{display:flex;align-items:flex-end;gap:8px}.lp-enrolled-students-table-toolbar__actions .button:hover,.lp-enrolled-students-table-toolbar__actions .button:focus{border-color:#99a7bc;color:#2f3a4a;background:#f4f7fb}@media(max-width:1024px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:minmax(0,1fr) minmax(150px,1fr) minmax(150px,1fr)}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:782px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr 1fr}.lp-enrolled-students-table-toolbar__field--student{grid-column:1\u002F-1}.lp-enrolled-students-table-toolbar__actions{grid-column:1\u002F-1}}@media(max-width:640px){.lp-enrolled-students-table-toolbar__row--filters{grid-template-columns:1fr}.lp-enrolled-students-table-toolbar__actions .button{width:100%}}.lp-cell-student{display:flex;align-items:center;gap:10px}.lp-meta{display:flex;flex-direction:column}.lp-meta .lp-name{color:#1e293b;font-weight:500;line-height:1.4}.lp-meta .lp-email{color:#94a3b8;font-size:12px;line-height:1.3}.lp-cell-course a{color:#3b82f6;text-decoration:none}.lp-cell-course a:hover{text-decoration:underline}.lp-cell-progress{min-width:120px}.lp-progress-bar{overflow:hidden;position:relative;width:100%;max-width:120px;height:6px;border-radius:3px;background:#e2e8f0}.lp-progress-bar span{display:block;height:100%;border-radius:3px;background:linear-gradient(-90deg,#3b82f6,#60a5fa);transition:width .3s ease}.lp-progress-text{display:inline-block;margin-top:3px;color:#64748b;font-size:11px}.lp-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;line-height:1.5;white-space:nowrap}.lp-badge--enrolled{color:#475569;background:#f1f5f9}.lp-badge--in-progress,.lp-badge--learning{color:#1e40af;background:#dbeafe}.lp-badge--finished{color:#166534;background:#dcfce7}.lp-badge--passed{color:#14532d;background:#bbf7d0}.lp-badge--failed{color:#991b1b;background:#fee2e2}.lp-enrolled-students-table-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;border-top:1px solid #e2e8f0}.lp-enrolled-students-table-footer__count{color:#64748b;font-size:13px}#profile-content-enrolled-students .lp-enrolled-students-table-footer{border-top:0}.lp-enrolled-students-table-footer .learn-press-pagination{margin:0;text-align:left}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0;padding:0;list-style:none}.lp-enrolled-students-table-footer .learn-press-pagination ul.page-numbers>li{margin:0}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;width:40px;line-height:40px;padding:0 8px;border:1px solid #e2e8f0;border-radius:4px;color:#475569;background:#fff;font-size:13px;text-decoration:none;cursor:pointer;transition:all .15s}.lp-enrolled-students-table-footer .learn-press-pagination a.page-numbers:hover:not(.current),.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers:hover:not(.current){border-color:#3b82f6;color:#3b82f6 !important;background:#eff6ff}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current{border-color:#3b82f6;color:#fff;background:#3b82f6;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{min-width:auto;border:0;background:transparent;cursor:default}.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.current,.lp-enrolled-students-table-footer .learn-press-pagination span.page-numbers.dots{pointer-events:none}.lp-enrolled-empty{padding:40px 20px;color:#94a3b8;text-align:center}.lp-enrolled-empty p{margin:0;font-size:14px}.lp-enrolled-error{padding:15px 20px;color:#dc2626;font-size:13px}#lp-modal-enrolled-wrap{position:relative}.lp-wrap-btn-view-course-students{width:100%}.lp-wrap-btn-view-course-students button{width:100%}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-enrolled-students-table-toolbar{background:white}.lp-students-enrolled-layout.learnpress_page_lp-enrolled-students .lp-list-table tbody{background:white}.lp-btn-view-students{margin-top:10px;white-space:nowrap;display:block;padding:0;border:0;background:0}.wrapper-profile-header{position:relative}.lp-user-profile{position:relative;--lp-item-padding:40px}.lp-user-profile img{max-width:100%;height:auto}.lp-user-profile .lp-user-profile-avatar img{display:block;border-radius:var(--lp-border-radius-avatar,50%);width:100%;height:auto}.lp-user-profile .lp-user-profile-socials{display:flex;position:relative;margin:0;gap:12px}.lp-user-profile .lp-user-profile-socials a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:var(--lp-color-base,#333);width:var(--lp-social-size,40px);height:var(--lp-social-size,40px);border-radius:50%;border:1px solid var(--lp-border-color,#e2e0db);font-size:16px}.lp-user-profile .lp-user-profile-socials a:hover{color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color);background:var(--lp-primary-color)}.lp-user-profile .lp-user-profile-socials a:hover svg{fill:var(--lp-color-white,#fff)}.lp-user-profile .lp-profile-content-area{position:relative;padding:0;display:flex;align-items:flex-start}.lp-user-profile .lp-profile-left{min-width:120px;max-width:120px}.lp-user-profile .lp-profile-left .user-avatar{position:relative}.lp-user-profile .lp-profile-left .user-avatar img{border-radius:50%}.lp-user-profile .lp-profile-left .user-avatar:hover .lp-btn-to-edit-avatar{opacity:1;visibility:visible}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{position:absolute;top:80px;left:0;right:auto;width:36px;height:36px;font-size:0;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;cursor:pointer;background-color:var(--lp-white-grey,#f7f7fb);border-radius:50%}@media(max-width:767px){.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar{opacity:1;top:60px;visibility:visible}}.lp-user-profile .lp-profile-left .user-avatar .lp-btn-to-edit-avatar::before{content:\"\\f044\";font-size:1.5rem;font-family:\"lp-icon\";font-weight:normal;color:var(--lp-primary-color)}.lp-user-profile .lp-profile-right{padding-right:20px;flex:1;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px}.lp-user-profile .lp-profile-username{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:500;color:inherit;flex:1}.lp-user-profile .lp-profile-user-bio{width:100%}.lp-user-profile #profile-sidebar{float:right;width:270px;border:1px solid var(--lp-border-color,#e2e0db);border-top:0;margin-top:var(--lp-item-padding);margin-bottom:32px}@media(max-width:990px){.lp-user-profile #profile-sidebar{width:100%;margin-bottom:0}}.lp-user-profile .lp-profile-nav-tabs{margin:0;padding:0;list-style:none}.lp-user-profile .lp-profile-nav-tabs>li{position:relative;margin:0;padding:0;border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li a{padding:10px 20px;color:inherit;font-weight:500;text-decoration:none;display:flex;width:100%;gap:8px;line-height:1.4}.lp-user-profile .lp-profile-nav-tabs>li a>i{margin-top:3px}.lp-user-profile .lp-profile-nav-tabs>li>a{padding:14px 20px;position:relative}.lp-user-profile .lp-profile-nav-tabs>li>a>i{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li ul li{margin:0}.lp-user-profile .lp-profile-nav-tabs>li ul li a{border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-user-profile .lp-profile-nav-tabs>li ul li a:hover{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active{background:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs>li.active>a,.lp-user-profile .lp-profile-nav-tabs>li.active>a i{color:#fff}.lp-user-profile .lp-profile-nav-tabs>li:not(.active):hover{background:var(--lp-white-grey,#f7f7fb)}.lp-user-profile .lp-profile-nav-tabs>li.has-child>a:after{font-family:\"lp-icon\";content:\"\\f105\";position:absolute;left:15px;top:50%;transform:translateY(-50%)}.lp-user-profile .lp-profile-nav-tabs li>ul{display:none;position:absolute;z-index:1000;top:0;right:100%;min-width:180px;margin:0;padding:0;background:#fff;box-shadow:0 15px 20px 0 rgba(0,0,0,0.05);list-style:none}.lp-user-profile .lp-profile-nav-tabs li>ul li{white-space:nowrap}.lp-user-profile .lp-profile-nav-tabs li>ul li:hover,.lp-user-profile .lp-profile-nav-tabs li>ul li.active{color:var(--lp-primary-color)}.lp-user-profile .lp-profile-nav-tabs li:hover>ul{display:block}.lp-user-profile .lp-profile-content{float:left;width:calc(100% - 300px);margin-bottom:32px;padding-top:var(--lp-item-padding)}@media(max-width:990px){.lp-user-profile .lp-profile-content{width:100%}}@media(max-width:767px){.lp-user-profile .lp-profile-content .profile-orders{overflow-x:scroll}}.lp-user-profile .lp-profile-content .course-categories,.lp-user-profile .lp-profile-content .course-instructor{margin-bottom:14px}.lp-user-profile .lp-profile-content .course-categories{padding:0}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form{display:flex;align-items:center;margin-bottom:10px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form input[type=number]{padding:8px;border:1px solid #ccc;width:60px}.lp-user-profile .lp-profile-content #profile-subtab-quiz-content .inline-form button{cursor:pointer;line-height:1}.lp-user-profile .profile-orders .profile-heading{display:none}.lp-user-profile .profile-orders table{margin-top:0}.lp-user-profile .profile-orders .column-order-actions a{margin-left:6px;color:black;text-decoration:underline;font-weight:500}.lp-user-profile .profile-orders .column-order-actions a:hover,.lp-user-profile .profile-orders .column-order-actions a:focus{color:var(--lp-primary-color)}.lp-user-profile .learn-press-message{margin-top:0}.lp-user-profile .profile-heading{margin-bottom:24px}.lp-user-profile.guest .lp-content-area{display:flex;align-items:flex-start}.lp-user-profile.guest .lp-content-area>div{flex:1;width:100%}@media(min-width:1366px){.lp-user-profile .lp-content-area{padding-left:0;padding-right:0}}@media(max-width:990px){.lp-user-profile{--lp-item-padding:30px}.lp-user-profile #profile-nav{border-top:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs{display:flex;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;white-space:nowrap;scroll-behavior:smooth}.lp-user-profile .lp-profile-nav-tabs::after{display:none}.lp-user-profile .lp-profile-nav-tabs>li{border:0;border-left:1px solid var(--lp-border-color,#e2e0db);flex:1}.lp-user-profile .lp-profile-nav-tabs>li:last-child{border-left:0}.lp-user-profile .lp-profile-nav-tabs>li>a{height:auto;padding:8px 12px 8px 12px;flex-direction:column;white-space:nowrap;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);line-height:1.4;gap:4px}.lp-user-profile .lp-profile-nav-tabs>li>a>i{position:static;transform:translate(0)}.lp-user-profile .lp-profile-nav-tabs>li>a::after{display:none !important;margin-right:10px}.lp-user-profile .lp-profile-nav-tabs>li.has-child a::after{display:none !important}.lp-user-profile .lp-profile-nav-tabs>li:after{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active:after,.lp-user-profile .lp-profile-nav-tabs>li.active:before{display:none}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul{display:none;width:max-content;transform:translateX(20%)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul::after{display:table;clear:both;box-shadow:0 0;content:\"\"}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li{float:right;border-left:1px solid var(--lp-border-color,#e2e0db)}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li:last-child{border-left:0}.lp-user-profile .lp-profile-nav-tabs>li.active.has-child ul li a{padding:0 10px}.lp-user-profile .lp-profile-nav-tabs li:not(.has-child)>a::after,.lp-user-profile .lp-profile-nav-tabs li:hover ul{display:none !important}}@media(max-width:768px){.lp-user-profile .lp-profile-content-area{align-items:center}.lp-user-profile .lp-profile-right{flex-direction:column;align-items:flex-start}.lp-user-profile .lp-profile-user-bio{display:none}.lp-user-profile.guest .lp-content-area{flex-direction:column}}@media(max-width:650px){.lp-user-profile .lp-profile-left{min-width:100px;max-width:100px}.lp-user-profile .lp-user-profile-socials{gap:8px;--lp-social-size:36px;font-size:14px}}#profile-content-withdrawals>h2{font-size:1.6em;margin-bottom:12px}.learn-press-profile-course__statistic{margin-bottom:32px}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder{display:flex;align-items:flex-end;justify-content:space-between;gap:16px}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-filters{flex:1 1 auto}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:6px;color:var(--lp-primary-color,#ffb606);font-size:.875em;font-weight:600;line-height:1;text-decoration:none;white-space:nowrap;transition:all .2s ease}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:hover,.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link:focus{background:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:#fff;text-decoration:none}@media(max-width:768px){.learn-press-profile-course__tab .learn-press-tabs--with-course-builder{flex-direction:column;align-items:stretch}.learn-press-profile-course__tab .learn-press-tabs--with-course-builder .learn-press-course-builder-link{width:100%;margin:0 0 16px}}.learn-press-profile-course__progress .lp_profile_course_progress__item img{width:100%;aspect-ratio:16\u002F9;object-fit:cover;height:auto;display:block}.learn-press-profile-course__progress .lp_profile_course_progress__item td,.learn-press-profile-course__progress .lp_profile_course_progress__item th{text-align:center}.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{width:15%;padding:0}@media(max-width:768px){.learn-press-profile-course__progress .lp_profile_course_progress__item td:first-child,.learn-press-profile-course__progress .lp_profile_course_progress__item th:first-child{display:none}}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(2) a,.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(2) a{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(3),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(3){width:10%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(4),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(4){width:25%}.learn-press-profile-course__progress .lp_profile_course_progress__item td:nth-child(5),.learn-press-profile-course__progress .lp_profile_course_progress__item th:nth-child(5){width:25%}@media(max-width:768px){.learn-press-profile-course__progress .learn-press-course-tab__filter__content{overflow-x:auto}}.lp-profile-content #profile-content-order-details h3{margin-top:0;font-size:1.875em;line-height:1.5;font-weight:500;margin-bottom:15px}.recover-order__title{margin-bottom:5px}.recover-order__description{margin-bottom:20px;opacity:.7;font-size:.8em;font-style:italic}.lp-order-recover{display:flex;gap:10px}.lp-order-recover input[type=text]{font-style:italic;flex:1 1 auto}.lp-profile-content ul{list-style:none !important;padding:0 !important}.lp-profile-content ul.learn-press-courses{margin:0 -16px}.lp-profile-content h3{margin-top:0}.lp-user-avatar__buttons{display:inline-flex;gap:12px;margin-top:16px}.course-extra-box{margin-bottom:16px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);width:100%}.course-extra-box.active .course-extra-box__content{height:auto}.course-extra-box__title{--extra-height:50px;display:flex;align-items:center;position:relative;height:var(--extra-height);margin:0 !important;padding:0 20px 0 45px;background:rgba(181,187,211,0.15);font-size:1em;font-weight:700;cursor:pointer}@media(max-width:767px){.course-extra-box__title{padding-right:16px}}.course-extra-box__title::after{position:absolute;top:0;left:20px;font-family:\"lp-icon\";line-height:var(--extra-height);content:\"\\f107\"}.course-extra-box__content{overflow:hidden;transition:height .3s ease}.course-extra-box__content-inner{-webkit-animation-name:course-extra-box__content-inner-transform;animation-name:course-extra-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}.course-extra-box__content-inner>ul{padding-right:0 !important;padding-bottom:0 !important}.course-extra-box__content ul,.course-extra-box__content li{list-style:none}.course-extra-box__content ul{margin:0;padding:0}.course-extra-box__content li{margin:0;padding:12px 20px;border-bottom:1px solid var(--lp-border-color,#e2e0db)}@media(max-width:767px){.course-extra-box__content li{padding-right:16px;padding-left:16px}}.course-extra-box__content li::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\";content:\"\\f00c\"}.course-extra-box__content li:last-child{border-bottom:0}.course-extra-box:last-child{margin-bottom:60px}.course-extra-box.active .course-extra-box__title::after{content:\"\\f106\"}.course-extra-box+.comment-respond,.course-extra-box+.comments-area{margin-top:30px;margin-bottom:30px}.course-extra-box+.course-tabs{margin-top:30px}input[name=course-extra-box-ratio]{display:none}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content{display:block}input[name=course-extra-box-ratio]:checked+.course-extra-box .course-extra-box__content .course-extra-box__content-inner{transform:scale(1)}@-webkit-keyframes course-extra-box__content-inner-transform{from{opacity:0;-webkit-transform:translateX(-5%);-moz-transform:translateX(-5%);-ms-transform:translateX(-5%);-o-transform:translateX(-5%);transform:translateX(-5%)}to{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}}@keyframes course-extra-box__content-inner-transform{from{opacity:0;transform:translateX(-5%)}to{opacity:1;transform:translateX(0)}}.course-tab-panel-faqs .course-faqs-box{margin-bottom:20px;border:1px solid rgba(204,204,204,0.6);border-radius:5px}.course-tab-panel-faqs .course-faqs-box__title{display:block;position:relative;margin:0;padding:12px 20px 12px 45px;font-size:1em;line-height:1.5;font-weight:var(--lp-font-weight-link,600);cursor:pointer}.course-tab-panel-faqs .course-faqs-box__title::after{position:absolute;top:12px;left:20px;font-family:\"lp-icon\";content:\"\\f067\"}.course-tab-panel-faqs .course-faqs-box:last-child{margin-bottom:40px}.course-tab-panel-faqs .course-faqs-box:hover .course-faqs-box__title{color:var(--lp-primary-color)}.course-tab-panel-faqs .course-faqs-box__content{display:none}.course-tab-panel-faqs .course-faqs-box__content-inner{padding:20px;-webkit-animation-name:course-faqs-box__content-inner-transform;animation-name:course-faqs-box__content-inner-transform;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-direction:normal;animation-direction:normal}input[name=course-faqs-box-ratio]{display:none}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__content{display:block}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title{color:var(--lp-primary-color);background:rgba(241,242,248,0.4)}input[name=course-faqs-box-ratio]:checked+.course-faqs-box .course-faqs-box__title::after{content:\"\\f068\"}@-webkit-keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}@keyframes course-faqs-box__content-inner-transform{from{opacity:0;-webkit-transform:translateY(-5%);-moz-transform:translateY(-5%);-ms-transform:translateY(-5%);-o-transform:translateY(-5%);transform:translateY(-5%)}to{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}}.extra-box__title,.course-faqs__title,.course-material__title{margin-top:0;margin-bottom:12px}.edit-content{margin-right:5px}.course-curriculum ul.curriculum-sections{position:relative;margin:0;padding:0;list-style:none}.course-curriculum ul.curriculum-sections .closed .section-item__loadmore{display:none}.course-curriculum ul.curriculum-sections .section{margin:0;padding:0;flex-wrap:wrap}.course-curriculum ul.curriculum-sections .section:last-child{padding:0}.course-curriculum ul.curriculum-sections .section.section-empty .section-header{margin-bottom:20px}.course-curriculum ul.curriculum-sections .section.section-empty .learn-press-message{margin-left:15px;margin-right:15px}.course-curriculum ul.curriculum-sections .section-title.c+.section-desc{display:block}.course-curriculum ul.curriculum-sections .section-title.c span.show-desc::before{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg);top:0}.course-curriculum ul.curriculum-sections .item-meta.duration{background:#d9e0f1}.course-curriculum .section-item__loadmore{display:flex;justify-content:center;align-items:center}.course-curriculum .section-item__loadmore button{margin-top:10px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0}.course-curriculum .section-item__loadmore.loading button:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}.course-curriculum .section-header{display:table;width:100%;padding:20px 0;border-bottom:0;border-bottom:1px solid #d9e0f1;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-curriculum .section-header .section-title,.course-curriculum .section-header .section-desc{margin:0}.course-curriculum .section-header span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-header span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-header span.show-desc:hover::before{border-top-color:#ccc}.course-curriculum .section-header .section-desc{margin-top:10px;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);color:var(--lp-color-accent);font-style:italic;line-height:1.3}.course-curriculum .section-header .section-meta{display:block;padding-top:17px;padding-bottom:15px;font-size:.8em;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-item{width:100%}.course-curriculum .section-content{margin:0;padding:0;list-style:none}.course-curriculum .section-content .course-item-meta{display:table-cell;text-align:left;vertical-align:middle;white-space:nowrap}.course-curriculum .section-content .course-item-meta .item-meta{display:inline-block;color:#fff}.course-curriculum .section-content .course-item-meta .item-meta.final-quiz{background:#14c4ff}.course-curriculum .section-content .course-item-meta .item-meta.trans{padding:0}.course-curriculum .section-content .course-item-meta .count-questions{background:#9672cf}.course-curriculum .section-content .course-item-meta .duration{background:silver}.course-curriculum .section-content .course-item-meta .course-item-status{padding:0;color:#999}.course-curriculum .section-content .course-item-meta .course-item-status::before{font-family:\"lp-icon\";content:\"\\f00c\"}.course-curriculum .section-content .course-item-preview{font-style:normal;padding:0}.course-curriculum .section-content .course-item-preview::before{font-family:\"lp-icon\";content:\"\\f06e\";color:#999}.course-curriculum .course-item{display:flex;position:relative;margin:0 0 2px 0;padding:0 16px;background:rgba(241,242,248,0.4);transition:padding-right linear .15s}.course-curriculum .course-item>span{display:flex;width:28px;color:#666;font-weight:300;align-items:center}.course-curriculum .course-item .section-item-link{display:flex;align-items:flex-start;justify-content:space-between;width:100%;padding:12px 0;color:inherit;outline:0;gap:12px}.course-curriculum .course-item .section-item-link:hover .item-name{color:var(--lp-primary-color)}.course-curriculum .course-item .section-item-link::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.course-curriculum .course-item .section-item-link .course-item-info{width:100%}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre{display:flex;flex-flow:row-reverse;justify-content:flex-end;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.course-curriculum .course-item .section-item-link .course-item-info .course-item-info-pre .item-meta.duration{background:transparent}.course-curriculum .course-item .item-name{font-weight:600}.course-curriculum .course-item.course-item-lp_quiz .section-item-link::before{content:\"\\f059\"}.course-curriculum .course-item.course-item-lp_assignment .section-item-link::before{content:\"\\e929\" !important}.course-curriculum .course-item.course-item.course-item-lp_h5p .section-item-link::before{content:\"\\e92a\" !important}.course-curriculum .course-item.course-item-lp_lesson .section-item-link::before{content:\"\\f15b\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-video .section-item-link::before{content:\"\\f03d\"}.course-curriculum .course-item.course-item-lp_lesson.course-item-type-audio .section-item-link::before{content:\"\\f028\"}.course-curriculum .course-item.item-locked .course-item-status::before{color:var(--lp-secondary-color);content:\"\\f023\"}.course-curriculum .course-item.has-status{padding-top:1px}.course-curriculum .course-item.has-status.status-completed .course-item-status::before,.course-curriculum .course-item.has-status.status-evaluated .course-item-status::before{color:#3bb54a}.course-curriculum .course-item.has-status.item-failed .course-item-status::before,.course-curriculum .course-item.has-status.failed .course-item-status::before{border-color:#f02425;color:#f02425;content:\"\\f00d\"}.course-curriculum .course-item::before{position:absolute;top:50%;right:0;width:3px;height:0;background:#00adff;content:\"\";transition:height linear .15s,top linear .15s}.course-curriculum .course-item.current{background:#f9f9f9}.course-curriculum .course-item.current a::before{right:10px}.course-curriculum .course-item.current::before{top:0;height:100%}.course-curriculum .section-left{vertical-align:top}.course-curriculum .section-left .section-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);text-transform:capitalize;display:block}.course-curriculum .curriculum-more__button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;box-shadow:none;outline:0;width:100%;margin-top:20px;margin-bottom:20px}.course-curriculum .curriculum-more__button.loading:before{display:inline-block;font-family:\"lp-icon\";content:\"\\f110\";animation:lp-rotating 1s linear infinite;margin-left:5px;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:middle;margin-top:-2px}body .content-item-summary .form-button-finish-course,body .lp-quiz-buttons .form-button-finish-course{float:left}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before,#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{top:2px;font-family:\"lp-icon\"}#wpadminbar #wp-admin-bar-edit-lp_quiz .ab-item::before{content:\"\\f017\"}#wpadminbar #wp-admin-bar-edit-lp_lesson .ab-item::before{content:\"\\f15c\"}#wpadminbar #wp-admin-bar-edit-lp_question .ab-item::before{content:\"\\f29c\"}.course-remaining-time .label-enrolled{font-size:inherit}.lp-course-progress{position:relative}.lp-course-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.viewing-course-item .section-header .section-desc{display:none}.lp-course-curriculum ul,.lp-course-curriculum li{list-style:none;margin:0;padding:0}.lp-course-curriculum .course-curriculum-info{display:flex;justify-content:space-between;gap:20px;margin-bottom:20px}.lp-course-curriculum .course-curriculum-info__left{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.lp-course-curriculum .course-curriculum-info__left li{display:inline-flex;align-items:center;gap:8px}.lp-course-curriculum .course-curriculum-info__left li::after{content:\"\";width:4px;height:4px;background-color:var(--lp-border-color,#e2e0db);display:inline-block}.lp-course-curriculum .course-curriculum-info__left li:last-child::after{content:none}.lp-course-curriculum .course-curriculum-info__right{font-weight:var(--lp-font-weight-link,600);text-align:left;text-transform:capitalize}.lp-course-curriculum .course-toggle-all-sections{cursor:pointer}.lp-course-curriculum .course-section{margin-bottom:8px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);cursor:pointer;overflow:hidden}.lp-course-curriculum .course-section.lp-collapse .course-section__items{display:none;animation:ease-in-out}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-up{display:none}.lp-course-curriculum .course-section.lp-collapse .lp-icon-angle-down{display:block}.lp-course-curriculum .course-section .lp-icon-angle-down{display:none}.lp-course-curriculum .course-section:last-child{margin-bottom:0}.lp-course-curriculum .course-section .course-section-header{background-color:var(--lp-white-grey,#f7f7fb);padding:20px;column-gap:12px;display:flex;justify-content:space-between}.lp-course-curriculum .course-section__title{font-weight:600;font-size:1.1em;line-height:1.3em}.lp-course-curriculum .course-section__description{margin:4px 0 0 0}.lp-course-curriculum .course-section .section-toggle{line-height:1}.lp-course-curriculum .course-section .section-toggle i{font-size:24px}.lp-course-curriculum .course-section .course-section-info{margin-right:0;margin-left:auto}.lp-course-curriculum .course-section .section-count-items{min-width:24px;font-weight:600;text-align:center;line-height:1.3;white-space:nowrap}.lp-course-curriculum .course-section .course-item{background-color:transparent;border-top:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;margin:0}.lp-course-curriculum .course-section .course-item__link{display:flex;justify-content:space-between;width:100%;column-gap:12px;row-gap:8px;position:relative;align-items:flex-start;color:inherit}.lp-course-curriculum .course-section .course-item__info{display:flex;column-gap:12px;row-gap:8px}.lp-course-curriculum .course-section .course-item__info .course-item-ico{min-width:16px}.lp-course-curriculum .course-section .course-item__content{display:flex;justify-content:space-between;column-gap:12px;row-gap:8px;align-items:baseline;flex:1}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__content{flex-wrap:wrap}}.lp-course-curriculum .course-section .course-item__left:hover{color:var(--lp-primary-color,#ffb606)}.lp-course-curriculum .course-section .course-item__right{display:flex;column-gap:12px;row-gap:8px;align-items:center;flex:none;color:var(--lp-color-meta,#8a8a8a);flex-wrap:wrap;flex-direction:row-reverse;justify-content:flex-end}@media(max-width:1024px){.lp-course-curriculum .course-section .course-item__right{width:100%;order:3}}.lp-course-curriculum .course-section .course-item__status .course-item-ico{width:24px;display:flex;justify-content:center}.lp-course-curriculum .course-section .course-item-ico::before{content:\"\";display:inline-block;font-family:\"lp-icon\";font-weight:normal}.lp-course-curriculum .course-section .course-item-ico.lp_lesson::before{content:\"\\f15b\"}.lp-course-curriculum .course-section .course-item-ico.lp_quiz::before{content:\"\\f12e\"}.lp-course-curriculum .course-section .course-item-ico.lp_assignment::before{content:\"\\e929\"}.lp-course-curriculum .course-section .course-item-ico.lp_h5p::before{content:\"\\e92a\"}.lp-course-curriculum .course-section .course-item-ico.preview::before{content:\"\\f06e\";color:#999}.lp-course-curriculum .course-section .course-item-ico.locked::before{content:\"\\f023\";color:#999}.lp-course-curriculum .course-section .course-item-ico.passed.completed::before{content:\"\\f00c\";color:#3bb54a}.lp-course-curriculum .course-section .course-item-ico.in-progress::before,.lp-course-curriculum .course-section .course-item-ico.completed::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.failed.completed::before{content:\"\\f00d\";color:#f02425}.lp-course-curriculum .course-section .course-item-ico.started::before{content:\"\\f00c\";color:#999}.lp-course-curriculum .course-section .course-item-ico.doing::before{content:\"\\e921\";color:#999}.info-learning .course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.info-learning .course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.lp-quiz-buttons{margin-bottom:20px;display:block;clear:both;content:\"\"}.quiz-progress{margin-bottom:30px;background:#e7f7ff}.quiz-progress .progress-items{display:flex}.quiz-progress .progress-items .progress-item{position:relative;color:#777;font-size:.938em;flex:1}.quiz-progress .progress-items .progress-item .progress-number,.quiz-progress .progress-items .progress-item .progress-label{display:block;line-height:1;text-align:center}.quiz-progress .progress-items .progress-item .progress-number{margin:15px 0 10px 0;font-size:1.25em}.quiz-progress .progress-items .progress-item .progress-label{margin-bottom:15px;font-size:.875em}.quiz-progress .progress-items .progress-item i{display:none;float:right;width:60px;height:60px;color:#fff;background:#00adff;font-size:1.875em;line-height:60px;text-align:center}.quiz-progress .progress-items .progress-item::after{display:block;clear:both;content:\"\"}.answer-options{margin:0;padding:0;list-style:none}.answer-options .answer-option{display:flex;overflow:hidden;position:relative;margin:0 0 18px 0;padding:10px;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option .option-title{display:table-cell}.answer-options .answer-option .option-title .option-title-content{display:inline-block;vertical-align:middle}.answer-options .answer-option .option-title::before{position:absolute;top:0;bottom:0;right:0;width:3px;background:#ddd;content:\"\";-webkit-transition:background linear .25s;-moz-transition:background linear .25s;-ms-transition:background linear .25s;-o-transition:background linear .25s;transition:background linear .25s}.answer-options .answer-option input[type=checkbox],.answer-options .answer-option input[type=radio]{-webkit-appearance:initial;-moz-appearance:initial;position:relative;z-index:10;width:32px;min-width:32px;height:32px;margin:0 3px 0 10px;border:1px solid #cfcfcf;background:#f9fafc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.answer-options .answer-option input[type=checkbox]::after,.answer-options .answer-option input[type=radio]::after{position:absolute;top:50%;right:50%;transform:translate(50%,-50%)}.answer-options .answer-option input[type=checkbox]:focus,.answer-options .answer-option input[type=radio]:focus{outline:0}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title .option-title-content,.answer-options .answer-option input[type=radio]:checked ~ .option-title .option-title-content{position:relative}.answer-options .answer-option input[type=checkbox]:checked ~ .option-title::before,.answer-options .answer-option input[type=radio]:checked ~ .option-title::before{background:#00adff}.answer-options .answer-option input[type=checkbox]:checked::after,.answer-options .answer-option input[type=radio]:checked::after{opacity:1}.answer-options .answer-option input[type=checkbox]::after{margin-top:0}.answer-options .answer-option input[type=checkbox]::after{width:auto;box-sizing:content-box;height:auto;color:#3db748;font-family:\"lp-icon\";font-size:16px;opacity:0;content:\"\\f00c\";background:0;border:0}.answer-options .answer-option input[type=checkbox]:checked::after{border:0}.answer-options .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.answer-options .answer-option input[type=radio]::before{border-radius:50%}.answer-options .answer-option input[type=radio]:checked::after{content:\"\";width:10px;height:10px;border-radius:10px;background:#00adff}.answer-options .answer-option .option-title{margin:0}.answer-options .answer-option:hover{background:#e1f5ff}.answer-options .answer-option.answered-wrong input[type=checkbox]::after{color:red}.answer-options .answer-option.answered-wrong input[type=radio]::after{background:red}button[data-counter]{position:relative}button[data-counter]::after{padding-right:5px;content:\"(+\" attr(data-counter) \")\"}.quiz-result{max-width:320px;margin:20px auto 48px;text-align:center}.quiz-result .result-heading{display:none}.quiz-result.passed .result-message{background:#3bb54a}.quiz-result.passed .result-message::after{content:\"\\f00c\"}.quiz-result .result-message{margin-bottom:30px;padding:10px 0;color:#fff;background:#f02425;display:flex;align-items:center;justify-content:center;-webkit-border-radius:var(--lp-border-radius,5px);-moz-border-radius:var(--lp-border-radius,5px);border-radius:var(--lp-border-radius,5px);gap:8px}.quiz-result .result-message::after{font-family:\"lp-icon\";content:\"\\f00d\"}.quiz-result .result-grade .result-achieved,.quiz-result .result-grade .result-require{display:inline-block;margin:0 auto}.quiz-result .result-grade .result-achieved{padding-bottom:7px;border-bottom:1px solid var(--lp-border-color,#e2e0db);font-size:1.75em;font-weight:500;line-height:1}.quiz-result .result-grade .result-require{display:block;padding-top:5px;color:#666;font-size:1em;font-weight:400;line-height:1}.quiz-result .result-grade .result-message{font-size:.875em}.quiz-result.passed .result-achieved{color:#04adff}.quiz-result.passed .result-message strong{color:#04adff}.quiz-result .result-statistic{margin:0;padding:0;text-align:right;list-style:none}.quiz-result .result-statistic .result-statistic-field{display:flex;margin:0}.quiz-result .result-statistic .result-statistic-field+li{border-top:1px dashed var(--lp-border-color,#e2e0db)}.quiz-result .result-statistic .result-statistic-field span,.quiz-result .result-statistic .result-statistic-field p{margin:0;flex:1}.quiz-result .result-statistic .result-statistic-field span{color:#666;font-size:1em;font-weight:400;line-height:2.1875em}.quiz-result .result-statistic .result-statistic-field span::before{display:inline-block;width:15px;margin-left:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em;font-weight:900}.quiz-result .result-statistic .result-statistic-field p{color:#333;font-weight:500;text-align:left}.quiz-result .result-statistic .result-statistic-field.result-time-spend label::before{font-weight:400;content:\"\\f017\"}.quiz-result .result-statistic .result-statistic-field.result-point label::before{font-weight:400;content:\"\\f005\"}.quiz-result .result-statistic .result-statistic-field.result-questions label::before{font-weight:400;content:\"\\f059\"}.quiz-result .result-statistic .result-statistic-field.result-questions-correct label::before{color:#3db748;content:\"\\f00c\"}.quiz-result .result-statistic .result-statistic-field.result-questions-wrong label::before{color:#f02425;content:\"\\f00d\"}.quiz-result .result-statistic .result-statistic-field.result-questions-skipped label::before{color:#ddd;content:\"\\f2f5\"}.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:426px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{flex-direction:row;justify-content:space-between}}@media(min-width:1025px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div{max-width:792px}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div .questions-index{width:50%}}@media(min-width:450px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:65%;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__close #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:100%;flex-direction:column}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{flex-direction:row}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div{max-width:792px}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:100%;text-align:center}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:35%;text-align:inherit}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div .questions-index{width:50%}}.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:100%;justify-content:center;flex-direction:column-reverse;gap:0}@media(min-width:490px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{flex-direction:row-reverse}}@media(min-width:650px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:65%;gap:12px;justify-content:end;flex:auto}}@media(min-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(min-width:1120px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div{width:50%}}@media(max-width:768px){.lp-sidebar-toggle__open #content-item-quiz .quiz-status>div>div .submit-quiz #button-submit-quiz{white-space:inherit;padding:8px 16px}}.quiz-status{position:sticky;z-index:99;top:0;left:0;right:0;margin:0 0 35px 0}.quiz-status>div{display:flex;box-sizing:border-box;width:100%;max-width:792px;margin:0 auto;padding:8px 16px;border-radius:4px;background:var(--lp-primary-color);justify-content:center;align-items:center}.quiz-status>div>div{display:flex;flex-direction:row-reverse;flex:0 0 50%;align-items:center}@media(max-width:480px){.quiz-status>div>div{justify-content:center}}.quiz-status>div>div .submit-quiz #button-submit-quiz{margin:0;border-radius:4px;overflow:hidden;white-space:nowrap}.quiz-status>div>div .countdown{margin:0;border-radius:4px;overflow:hidden;padding:12px}.quiz-status>div .current-point{display:none}.quiz-status .questions-index{display:inline-block;color:#666;font-size:1em;font-weight:400;line-height:1.625em}.quiz-status .questions-index span{color:#333;font-weight:500}.quiz-status .countdown{min-height:38px;color:#333;font-weight:500;text-align:center}.quiz-status .countdown .fas{color:#333;font-size:1em}.quiz-status .countdown .clock{display:none;width:40px;height:40px}.quiz-status .countdown .clock::before{position:absolute;width:40px;height:40px;border:4px solid #b1c1e6;border-radius:50%;content:\"\";-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.quiz-status .countdown .clock .circle-progress-bar{display:inline-block;position:relative;width:40px;height:40px;stroke:#5383f7}.quiz-status .countdown .clock .circle-progress-bar .circle-progress-bar__circle{transition:.35s stroke-dashoffset;transform:rotate(90deg);transform-origin:50% 50%}.quiz-status .countdown .clock.x .circle-progress-bar__circle{stroke:red}.quiz-status .countdown i{margin:0 0 0 5px}.quiz-status .submit-quiz button{margin:0 10px 0 0;border:0;border-radius:0;background:#fff;text-transform:uppercase}.quiz-status .submit-quiz button:hover{background:var(--lp-secondary-color)}.quiz-status.submitting .submit-quiz button{background:#ddd}.question-numbers{text-align:center;list-style:none}.question-numbers li{display:inline-block;position:relative;margin-bottom:3px}.question-numbers li a{display:block;min-width:20px;padding:8px;border:1px solid #ddd;color:#999;background:#f5f5f5;box-shadow:none;font-size:.75em;line-height:1}.question-numbers li a span{vertical-align:middle}.question-numbers li a:hover{border:1px solid #3880a2;color:#fff;background:#00adff}.question-numbers li.current a{border-color:#3880a2;color:#fff !important;background:#00adff}.question-numbers li.current.skipped::after{background:#fff}.question-numbers li.answered a::after{margin-right:3px;font-family:\"lp-icon\";font-size:8px;vertical-align:middle}.question-numbers li.answered.answered-wrong a{color:red}.question-numbers li.answered.answered-true a{color:#00adff}.question-numbers li.answered.answered-true.current a{color:#fff}.question-numbers li.skipped::after{position:absolute;bottom:3px;right:50%;width:10px;height:4px;margin-right:-5px;border-radius:2px;background:#aaa;content:\"\"}.quiz-intro{display:flex;margin:0 0 20px;padding:0;list-style:none;flex-flow:row wrap}@media(max-width:768px){.quiz-intro{padding-left:10px;padding-right:10px;justify-content:space-between}}.quiz-intro-item{display:flex;margin:0 0 0 40px;align-items:center}@media(max-width:768px){.quiz-intro-item{margin:0 0 0 20px}}.quiz-intro-item::before{position:relative;margin-left:10px;color:var(--lp-primary-color);font-family:\"lp-icon\";font-size:1em}.quiz-intro-item--passing-grade{order:2}.quiz-intro-item--passing-grade::before{content:\"\\f012\"}.quiz-intro-item--questions-count{order:1}.quiz-intro-item--questions-count::before{content:\"\\f12e\"}.quiz-intro-item--duration{order:2}.quiz-intro-item--duration::before{content:\"\\f017\"}.quiz-intro-item__title{margin:0;padding:0 0 0 8px;color:#333;font-weight:300}.quiz-intro-item__content{color:#222;font-weight:400}.question-explanation-content,.question-hint-content{margin-bottom:20px;padding:10px 15px;background:#f5f5f5}.redo-quiz button[type=submit]{content:attr(data-counter)}.circle-bar{position:relative;width:300px;height:300px;border-color:#ddd}.circle-bar::before{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #ddd;border-radius:50%;content:\"\"}.circle-bar .before,.circle-bar .after{position:absolute;z-index:0;top:0;right:0;box-sizing:border-box;width:100%;height:100%;border:10px solid #14c4ff;border-radius:50%;transform:rotate(-45deg)}.circle-bar .before{border-bottom-color:transparent;border-right-color:transparent;transform:rotate(-45deg)}.circle-bar .after{border-color:#14c4ff;border-top-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.circle-bar.bg50 .after{z-index:10;border-bottom-color:inherit;border-right-color:inherit;transform:rotate(-45deg)}.lp-quiz-buttons .complete-quiz,.lp-quiz-buttons .back-quiz,.lp-quiz-buttons .review-quiz{float:left}.quiz-result .result-grade{display:flex;flex-direction:column;position:relative;box-sizing:border-box;height:200px;margin-bottom:30px;padding:50px;justify-content:center;align-items:center;-webkit-transform:none !important;-moz-transform:none !important;-ms-transform:none !important;-o-transform:none !important;transform:none !important}.quiz-result .result-grade::before,.quiz-result .result-grade svg{position:absolute;top:0;right:50%;width:200px;height:200px;margin-right:-100px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.quiz-result .result-grade::before{box-sizing:border-box;padding:30px;border:10px solid #ccc;content:\"\"}.quiz-result .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result .result-grade svg circle{stroke:var(--lp-primary-color)}.quiz-result.passed .result-grade svg{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.quiz-result.passed .result-grade .result-achieved{color:#333}.quiz-result.passed .result-grade .result-message strong{color:#4caf50}.quiz-questions .question{margin-bottom:60px}.quiz-questions .question-answers .answer-options{margin:0;padding:0}.question .answer-option{padding:0}.question .answer-option input[type=radio],.question .answer-option input[type=checkbox]{position:absolute;top:50%;border-color:#d9e0f1;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);margin:0 10px 0 0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option input[type=radio]::after,.question .answer-option input[type=checkbox]::after{border-color:#d9e0f1}.question .answer-option input[type=radio]:disabled,.question .answer-option input[type=checkbox]:disabled{border-color:#ddd;background:#f9f9f9}.question .answer-option input[type=radio]:disabled::after,.question .answer-option input[type=checkbox]:disabled::after{border-color:#ddd}.question .answer-option input[type=radio]:checked:not(:disabled)::after,.question .answer-option input[type=checkbox]:checked:not(:disabled)::after{border-color:#99aee4}.question .answer-option input[type=radio]{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.question .answer-option input[type=radio]::before{border-radius:50%}.question .answer-option .option-title{display:flex;width:100%;margin:0;padding:10px 60px 10px 10px;border:1px solid var(--lp-border-color,#e2e0db);color:#666;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question .answer-option .option-title:hover{background:#f9f9f9}.question .answer-option .option-title::before{display:none}.question .answer-option.answer-correct .option-title{border-color:#4caf50}.question .answer-option.answered-wrong .option-title{border-color:#ff6423}.question .question-title{display:block;margin-top:0;margin-bottom:18px;font-size:1.125em;font-weight:500}.question .question-title .edit-link{float:left;font-size:.875em;font-weight:normal}.question .question-content{margin-bottom:30px}.question .question-content img{max-width:100%}.question .question-response{margin-bottom:10px;font-size:.875em}.question .question-response .label{display:inline-block;margin:0 0 0 5px;padding:8px 10px;border-radius:4px;color:#fff;line-height:1}.question .question-response .point{display:inline-block}.question .question-response.correct .label{background:#4caf50}.question .question-response.incorrect .label{background:#ff6423}.question .question-index{display:inline-block;margin:0 0 0 5px}.question .btn-show-hint{position:relative;margin:0 10px 0 0;padding:0;outline:0;color:#00adff;background:transparent;font-size:0;text-decoration:none;border:0}.question .btn-show-hint::before{font-family:\"lp-icon\";font-size:18px;content:\"\\f059\"}.question .btn-show-hint:hover span{position:absolute;bottom:100%;right:100%;width:auto;padding:6px 9px;border-radius:2px;color:#333;background:#eee;font-size:14px;font-weight:400;line-height:1;white-space:nowrap;text-transform:none}.question.question-fill_in_blanks .blanks .blank-input-wrap{display:inline-block}.question.question-fill_in_blanks .blanks .blank-block{margin-bottom:20px}.question.question-fill_in_blanks .blanks .blank-input{display:inline-block;width:auto;min-width:50px;margin:0 10px;padding:0 10px;border:0;border-bottom:1px dashed var(--lp-border-color,#e2e0db);text-align:center;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-input br{display:none}.question.question-fill_in_blanks .blanks .blank-input>*{display:inline;white-space:nowrap}.question.question-fill_in_blanks .blanks .blank-select{display:inline-block;height:30px;margin-right:4px;padding:1px}.question.question-fill_in_blanks .blanks .blank-fills{display:inline-block}.question.question-fill_in_blanks .blanks .blank-fills code{margin:0 5px;padding:0 6px;background:#ddd;line-height:1;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.question.question-fill_in_blanks .blanks.ordered{list-style-position:inside}.question.question-fill_in_blanks .blanks.one-paragraph{line-height:3}.lp-sort-bg label.option-title{background:rgba(255,182,6,0.68) !important}.quiz-attempts .attempts-heading{margin-bottom:15px}.quiz-attempts table th,.quiz-attempts table td{text-align:center}.learn-press-message.fixed{position:fixed;top:32px;right:0;left:0;background:rgba(0,173,255,0.6);text-align:center;z-index:100;color:#FFF;padding:10px}.learn-press-message.fixed[data-delay-in]{display:none}.lp-ajax-message{display:none;margin-top:20px;padding:20px;border:2px solid #ebf8e5;border-radius:9px;font-size:.9em;line-height:1.4}.lp-ajax-message.error{border-color:#fee5e5}.lp-icon-passed{margin-left:5px}.lp-icon-passed::before{color:#059601;font-family:\"lp-icon\";content:\"\\f058\"}.lp-user-item.graduation{padding:10px}.lp-user-item.graduation.passed{background-color:#ebf8e5;color:#3ab500}.lp-user-item.graduation.failed{background-color:#fdecec;color:#d85554}.course-graduation span{color:#999}.course-graduation .icon{margin-left:5px;font-size:1.25em}.course-graduation.passed .icon{color:#059601}.course-graduation.error .icon{color:#d85554}.learn-press-template-warning::before{color:#ffc107;font-family:\"lp-icon\";content:\"\\f071\"}.lp-badge{display:flex;height:30px;padding:0;line-height:1;align-items:center;justify-content:center}.lp-badge::before,.lp-badge::after{content:\"\"}.lp-badge::before{display:inline-block;position:relative;z-index:10;color:#fff;font-weight:bold;line-height:1}.lp-badge.featured-course{position:absolute;z-index:1;top:15px;right:-120px;width:300px;background:#ff2828;text-align:center;transform:rotate(45deg);height:auto;padding:5px 0}.lp-badge.featured-course::before{font-size:.75em;text-transform:uppercase;content:attr(data-text)}body div.entry-content>div.learnpress,body div.entry-content>div.learnpress:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.is-style-wide){--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-right:0;padding-left:0}.lp-archive-courses ul,.lp-archive-courses ol{list-style-type:decimal;list-style-position:inside;padding:0 0 1.5em}.lp-archive-courses ul{list-style-type:revert;padding:0 1em 1em 0}.lp-archive-courses ul.course-nav-tabs{list-style:none;padding:0}.lp-archive-courses ol ul{padding:2px 35px 2px 0}.lp-archive-courses ol ol{padding:2px 20px 2px 0}.learnpress #left-area ul,.learnpress .entry-content ul,.learnpress .et-l--body ul,.learnpress .et-l--footer ul,.learnpress .et-l--header ul,.learnpress-profile #left-area ul,.learnpress-profile .entry-content ul,.learnpress-profile .et-l--body ul,.learnpress-profile .et-l--footer ul,.learnpress-profile .et-l--header ul{padding:0;list-style:none !important}.learnpress.dt-the7 .learn-press-filters{margin-bottom:20px}.learnpress.dt-the7 .learn-press-courses[data-size=\"3\"] .course{width:50%}.bridge.learnpress .lp-archive-courses{margin-top:100px}.bridge.learnpress .lp-archive-courses ul.learn-press-breadcrumb{padding-top:45px}.bridge.learnpress .content{z-index:110}.bridge.learnpress .comment-respond .comment-form{margin:0}.bridge.learnpress .comment-respond .comment-form>p,.bridge.learnpress .comment-respond .comment-form>div{padding:0}.bridge.learnpress.learnpress-profile .content{z-index:100}.bridge.learnpress #learn-press-item-comments{background:#f6f6f6}.learnpress.ast-separate-container .ast-article-single{padding-right:15px;padding-left:15px}body.astra .course-summary-content .course-detail-info{--lp-color-white:#333;--lp-secondary-color:transparent}body.astra .course-summary-content .course-detail-info .course-title{border-bottom-color:var(--ast-global-color-7)}.ast-container{--lp-cotainer-padding:0}body.learnpress-page.twentysixteen #primary .lp-entry-content{float:none;width:auto;margin:0 15%}body.learnpress-page.twentyfifteen .course-summary-sidebar .widget{width:100%;padding:0}body.learnpress-page.twentysixteen .entry-footer{display:none}body.learnpress-page.twentysixteen .lp-entry-content{float:none;width:auto}body.learnpress-page.twentyseventeen #primary article.type-page{width:100%}body div.entry-content>div.learnpress{--responsive--aligndefault-width:100%;max-width:var(--lp-content-width,100%)}body .entry-content.has-global-padding{padding-right:0;padding-left:0}@media screen and (min-width:61.5625em){body.twentysixteen.learnpress-page .entry-footer{display:none}body.twentysixteen.learnpress-page .lp-entry-content{float:none;width:auto}body:not(.search-results) article:not(.type-page) .entry-footer{display:none}body:not(.search-results) article:not(.type-page) .lp-entry-content{float:none;width:auto}}body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}@media screen and (min-width:48em){body.twentyseventeen.learnpress-page #primary article.page .entry-header,body.twentyseventeen.learnpress-page #primary article.page .lp-entry-content{width:100%;float:none}}.edu-press:not(.nofixcss),.theme-edu-press:not(.nofixcss){--lp-font-size-base:1em}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) label{display:none}.edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a,.theme-edu-press:not(.nofixcss) .course-instructor-category>div:nth-child(2) a{font-size:1rem}.edu-press:not(.nofixcss) .course-instructor-category .course-categories a,.theme-edu-press:not(.nofixcss) .course-instructor-category .course-categories a{font-weight:normal}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-categories{position:absolute}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-content .course-instructor{display:inline}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info>*{display:revert}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore{width:auto}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a{padding:0}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=grid] .course-info .course-readmore a:hover{background:transparent;color:var(--thim-body_primary_color)}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .course-info{border-top:1px solid rgba(153,153,153,0.2);padding-top:20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .learn-press-courses[data-layout=list] .course-info{margin-top:50px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses input{height:unset;padding:10px 20px}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button{background-image:none !important}.edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-courses-bar .search-courses button i{display:block}.edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn,.theme-edu-press:not(.nofixcss) .lp-archive-courses .lp-content-area .lp-courses-bar .switch-layout .switch-btn{opacity:1}.edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-content .course-readmore a{border:0}.edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box,.theme-edu-press:not(.nofixcss) .lp-user-profile .dashboard-statistic__row .statistic-box{background-color:var(--lp-white-grey,#f7f7fb);min-width:unset;margin-bottom:0}.edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before,.theme-edu-press:not(.nofixcss) .learn-press-courses .course-wrap-meta .meta-item::before{font-family:\"lp-icon\" !important;font-weight:normal !important;margin:0 !important}.edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs,.theme-edu-press:not(.nofixcss).single-lp_course .lp-archive-courses .learn-press-nav-tabs{background:transparent;border-radius:0}.lp-4{--lp-font-size-base:1em}.elearningwp:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border:none !important;background-color:unset !important;padding:0}.elearningwp:not(.nofixcss) .lp-content-area.learn-press-message{padding:10px 15px}.course-builder:not(.nofixcss) .lp-courses-bar .search-courses button{padding:0}.course-builder:not(.nofixcss) .lp-courses-bar .courses-order-by{height:unset !important;padding:8px 15px 8px 35px !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user #profile-sidebar{margin-top:0 !important}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile.no-bio-user .lp-profile-content-area{align-items:center}.course-builder:not(.nofixcss) .lp-courses-bar .switch-layout .switch-btn{border-radius:5px;border:0;padding:0}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header{padding-bottom:30px}.course-builder:not(.nofixcss) #learn-press-profile.lp-user-profile .wrapper-profile-header .lp-profile-user-bio{padding-bottom:0}.learnpress-v4:not(.nofixcss),.learnpress-v3:not(.nofixcss){--lp-border-radius-avatar:0}.learnpress-v4:not(.nofixcss) .statistic-box,.learnpress-v3:not(.nofixcss) .statistic-box{--thim-lp-profile-bg-color:#f7f7fb}.learnpress-v4:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters,.learnpress-v3:not(.nofixcss) #learn-press-profile.lp-user-profile .learn-press-filters{border:none !important;margin:0 0 0 -1px 0 !important}.learnpress-v4:not(.nofixcss) .lp-user-profile .lp-profile-left,.learnpress-v3:not(.nofixcss) .lp-user-profile .lp-profile-left{min-width:unset !important;position:static !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{min-height:unset;padding-right:0;display:flex}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left{border:none !important}.learnpress-v4:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img,.learnpress-v3:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-left img{border-radius:50%}.learnpress-v4 .lp-course-curriculum,.learnpress-v3 .lp-course-curriculum{--lp-primary-color:var(--thim-body-primary-color,inherit)}.learnpress-v4 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .course-section-header .course-section__title,.learnpress-v3 .lp-course-curriculum .section-count-items{font-family:var(--thim-font-title-font-family,inherit)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{color:inherit}.learnpress-v4 .lp-course-curriculum .course-item-ico,.learnpress-v3 .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 .lp-course-curriculum .course-item__link,.learnpress-v3 .lp-course-curriculum .course-item__link{column-gap:8px}.learnpress-v4 .lp-course-curriculum .course-section__title,.learnpress-v3 .lp-course-curriculum .course-section__title{font-size:1.1em}.learnpress-v4 .lp-course-curriculum .section-toggle,.learnpress-v4 .lp-course-curriculum .section-count-items,.learnpress-v3 .lp-course-curriculum .section-toggle,.learnpress-v3 .lp-course-curriculum .section-count-items{color:var(--lp-primary-color,#ffb606)}.learnpress-v4 #popup-sidebar .course-section-header,.learnpress-v4 #popup-sidebar .lp-course-curriculum .course-item,.learnpress-v3 #popup-sidebar .course-section-header,.learnpress-v3 #popup-sidebar .lp-course-curriculum .course-item{padding-right:16px;padding-left:16px}.learnpress-v4 .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0}.learnpress-v4 .lp-course-curriculum .course-section{border-width:0 0 1px 0}.learnpress-v4 .lp-course-curriculum .course-section:last-child{border-width:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:0 0 8px 0}.learnpress-v4 .lp-course-curriculum .course-item{padding-right:0;padding-left:0}.learnpress-v4 .lp-course-curriculum .course-section{margin-bottom:0}.learnpress-v4 .lp-course-curriculum .course-section-header{padding:24px 0 24px 0}.assignments .lp-icon-file-alt:before{content:\"\\e929\"}.eduma:not(.nofixcss) .learnpress #learn-press-profile.lp-user-profile .learn-press-filters{padding-bottom:0 !important;overflow-y:visible}.eduma:not(.nofixcss) #learn-press-profile .wrapper-profile-header .lp-profile-content-area{flex-direction:column}.eduma .lp-course-curriculum .course-section-header{padding:var(--thim-ekit-padding-lesson,12px 0)}.eduma .sc_heading+.lp-course-curriculum .lp-course-curriculum__title{display:none}.ivy-school:not(.nofixcss) .lp-user-profile .lp-user-profile-avatar img{border-radius:0}.ivy-school.single-lp_course .course-curriculum{border:0}.ivy-school .lp-course-curriculum{--lp-white-grey:transparent;--lp-border-radius:0;--lp-primary-color:var(--thim-body-primary-color,inherit)}.ivy-school .lp-course-curriculum .course-section-header .course-section__title{font-family:var(--thim-font-title-font-family,inherit)}.ivy-school .lp-course-curriculum .course-item-ico{color:var(--lp-primary-color,#ffb606)}.course-builder .lp-course-curriculum{--lp-white-grey:#f2f2f2;--lp-border-color:#e6e6e6}.course-builder .lp-course-curriculum .course-sections{border:1px solid var(--lp-border-color,#e6e6e6);border-radius:var(--lp-border-radius,5px);overflow:hidden}.course-builder .lp-course-curriculum .course-section{margin:0;border-radius:0;border-width:1px 0 0 0}.course-builder .lp-course-curriculum .course-section:first-child{border:0}.course-builder #popup-sidebar .lp-course-curriculum{--lp-border-radius:0}.course-builder .course-tab-panels .lp-course-curriculum .course-sections{border:0}.course-builder .course-tab-panels .lp-course-curriculum .course-section-header,.course-builder .course-tab-panels .lp-course-curriculum .course-item{padding-right:0;--lp-white-grey:trasparent;padding-left:0}.eduma .lp-course-curriculum .course-item-order.lp-hidden,.coaching .lp-course-curriculum .course-item-order.lp-hidden{display:inline-block !important}.eduma .lp-course-curriculum .course-section__title,.coaching .lp-course-curriculum .course-section__title{text-transform:uppercase}.demo-marketplace .thim-ekit-tablist .lp-course-curriculum__title,.demo-ecommerce .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-marketplace .thim-ekit-tablist .course-section-header,.demo-ecommerce .thim-ekit-tablist .course-section-header{background-color:var(--thim-breacrumb-bg-color)}.demo-marketplace .thim-ekit-tablist .course-section__items,.demo-ecommerce .thim-ekit-tablist .course-section__items{background-color:var(--lp-fix-bg-section-item,#f5f7f8)}.demo-marketplace .style-marketplace-2,.demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#0f1c44;--lp-fix-bg-section-item:transparent}.thim-ekit-light-mode .demo-marketplace .style-marketplace-2,.thim-ekit-light-mode .demo-ecommerce .style-marketplace-2{--thim-breacrumb-bg-color:#f4f4f4}.demo-ecommerce .course-section-header{--thim-breacrumb-bg-color:#e1e9fd}.demo-online-learning .thim-ekit-tablist .lp-course-curriculum__title{display:none}.demo-online-learning .thim-ekit-tablist .course-section{margin-bottom:8px;border:0}.demo-online-learning .thim-ekit-tablist .course-section-header{background-color:#dfefff;border-radius:8px 8px 8px 8px}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0}.demo-life-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{border:1px solid var(--thim-border-color);margin-bottom:10px;padding-right:20px;padding-left:20px}.business-consulting .lp-course-curriculum__title,.demo-business-v2 .lp-course-curriculum__title,.business-coaching .lp-course-curriculum__title,.demo-healthy-coaching .lp-course-curriculum__title{display:none}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border-width:1px;margin-bottom:15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section:last-child{border-width:1px;margin-bottom:0}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:20px 15px 5px 15px}.business-consulting .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-item,.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item,.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-right:15px;padding-left:15px}.demo-business-v2 .thim-ekit-tablist .lp-course-curriculum .course-section-header{background-color:var(--thim-bg-color,#f5f5f5);padding:10px 15px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{padding:15px 20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-section__items{padding-right:20px;padding-left:20px}.business-coaching .thim-ekit-tablist .lp-course-curriculum .course-item{padding-right:0;padding-left:0}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section{border:0;border-radius:5px}.demo-healthy-coaching .thim-ekit-tablist .lp-course-curriculum .course-section-header{background:#fff;padding:10px 15px}.learn-press-tip{display:none;margin:0 5px;color:#444;font-style:normal;font-weight:normal;line-height:1;vertical-align:baseline;cursor:pointer}.learn-press-tip.ready{display:inline-block}.learn-press-tip::before{font-family:\"lp-icon\";content:\"\\f059\"}.learn-press-tip:hover{opacity:.8}.learn-press-tip-floating{position:absolute;z-index:9999999;min-width:20px;margin-right:-1px;padding:.618em 1em;color:#fff;background:#383838;font-size:.8em;line-height:1.2em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.learn-press-tip-floating>*{font-size:.8em}.learn-press-tip-floating .close{display:inline-block;position:absolute;top:-8px;left:-8px;width:16px;height:16px;border:1px solid #fff;color:#fff;background:#468fbc;line-height:1rem;text-align:center;cursor:pointer;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.learn-press-tip-floating .close::before{font-family:\"lp-icon\";content:\"\\f00d\"}.learn-press-tip-floating p{margin:0}.learn-press-tip-floating::before{position:absolute;bottom:-6px;right:50%;width:0;height:0;margin-right:-6px;border:6px solid transparent;border-top-color:#383838;border-bottom-width:0;content:\"\"}body.lp-preview.admin-bar #learn-press-content-item{top:32px !important}body.lp-preview #learn-press-course-curriculum{display:none}body.lp-preview #learn-press-content-item{top:0 !important;right:0 !important}@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}#popup_container{opacity:0;transform:scale(0.5)}body.confirm #popup_overlay{z-index:999998 !important}body.confirm #popup_container{z-index:999999 !important;max-width:90% !important;min-width:300px !important;padding:10px !important;background:#f5f5f5;transition:opacity .25s;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container #popup_title{display:none !important}body.confirm #popup_container #popup_message{margin:-10px;background:#FFF;padding:20px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}body.confirm #popup_container .close{position:absolute;top:3px;left:10px}body.confirm #popup_container #popup_panel{margin-top:20px;text-align:center}body.confirm #popup_container #popup_panel button,body.confirm #popup_container #popup_panel input[type=button],body.confirm #popup_container #popup_panel input[type=submit]{height:30px;line-height:1.875rem;padding:0 25px}body.confirm #popup_container #popup_cancel{display:none}body.confirm #popup_container.ready{opacity:1;transform:scale(1)}.lp-archive-courses{width:100%;scroll-margin:30px}.lp-archive-courses .lp-content-area.has-sidebar{display:flex;gap:32px;align-items:flex-start}@media(max-width:768px){.lp-archive-courses .lp-content-area.has-sidebar{display:inherit}}.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:33.33%}@media(max-width:1200px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:50%}}@media(max-width:600px){.lp-archive-courses .lp-content-area.has-sidebar .learn-press-courses[data-layout=grid] li{width:100%}}.lp-archive-courses .lp-content-area .lp-main-content{flex:1}.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:25%}@media(max-width:768px){.lp-archive-courses .lp-content-area .lp-archive-courses-sidebar{width:100%}}.lp-archive-courses.loading ul.learn-press-courses{position:relative}.lp-archive-courses.loading ul.learn-press-courses::before,.lp-archive-courses.loading ul.learn-press-courses::after{content:\"\";position:absolute;top:0;bottom:0;right:15px;left:15px}.lp-archive-courses.loading ul.learn-press-courses::after{z-index:3;background:#f3f3f3;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}.lp-archive-courses.loading ul.learn-press-courses::before{z-index:2;opacity:.8%;background:var(--lp-color-white,#fff)}.lp-archive-courses .learn-press-courses-header{margin-bottom:16px}.lp-archive-courses .learn-press-courses-header h1{margin:0;font-size:calc(var(--lp-font-size-base, 1em) * 1.8)}.learn-press-courses{clear:both;margin:0 -16px;padding:0 !important;min-height:300px;list-style:none;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.learn-press-courses .course-item{flex-direction:column;display:flex;transition:all .3s}.learn-press-courses .course-item:hover .course-thumbnail .thumbnail::before{opacity:1}.learn-press-courses .course-item:hover .course-thumbnail a img{transform:scale(1.05)}.learn-press-courses .course-item:hover .course-wishlist{opacity:1}.learn-press-courses .course-item .course-wishlist.filled{opacity:1}.learn-press-courses .course-content{position:relative;border-top:0}.learn-press-courses .course-content .course-permalink{display:block;border:0;text-decoration:none;color:inherit;line-height:1.3}.learn-press-courses .course-content .course-review{display:none}.learn-press-courses .course-content .course-tags{display:inline-block}.learn-press-courses .course-content .course-info>span{display:block}.learn-press-courses .course-content .course-info .course-price .free,.learn-press-courses .course-content .course-info .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .course-content .course-info .course-price .origin-price{margin-left:8px;opacity:.8;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);text-decoration:line-through}.learn-press-courses .course-content .course-short-description{display:-webkit-box;overflow:hidden;margin-bottom:16px;-webkit-line-clamp:2;-webkit-box-orient:vertical}.learn-press-courses .course-content .separator{display:none}.learn-press-courses .course-thumbnail{overflow:hidden;position:relative;border-radius:var(--lp-border-radius,5px)}.learn-press-courses .course-thumbnail .lp-badge.featured{position:absolute;z-index:100;top:28px;right:-110px;width:300px;text-align:center;transform:rotate(45deg)}.learn-press-courses .course-thumbnail .course-wishlist{position:absolute;z-index:2;top:6px;left:6px;opacity:0;color:var(--lp-color-white,#fff);cursor:pointer}.learn-press-courses .course-thumbnail .course-wishlist::before{font-family:\"lp-icon\";content:\"\\f004\"}.learn-press-courses .course-thumbnail .course-wishlist .course-wishlist__btn{display:none}.learn-press-courses .course-thumbnail .course-wishlist:hover{color:var(--lp-primary-color)}.learn-press-courses .course-thumbnail:hover::before{opacity:1}.learn-press-courses .course-thumbnail:hover a img{transform:scale(1.05)}.learn-press-courses .course-thumbnail:hover .course-wishlist{opacity:1}.learn-press-courses .course-thumbnail a{display:block;overflow:hidden}.learn-press-courses .course-thumbnail .thumbnail{margin:0;padding:0;border:0;border-radius:unset;line-height:unset}.learn-press-courses .course-thumbnail img{display:block;width:100%;height:auto;transition:all .5s ease;transform:scale(1);max-width:unset !important}.learn-press-courses .wap-course-title{margin:0 0 12px 0;padding:0;display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.15);font-weight:var(--lp-font-weight-link,600)}.learn-press-courses .wap-course-title a:hover{color:var(--lp-primary-color)}.learn-press-courses .course-permalink:hover{color:var(--lp-primary-color)}@media(min-width:769px){.learn-press-courses .course-summary-content .course-info-left{width:calc(100% - 340px)}}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value span,.learn-press-courses .course-summary-content .course-meta.course-meta-primary .course-meta__pull-left .meta-item .meta-item__value>div{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary{margin-bottom:0}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{height:auto}.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item:last-child{margin-left:0}@media(max-width:1024px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-left:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.learn-press-courses .course-summary-content .course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:768px){.learn-press-courses .course-summary-content{width:100%}}.learn-press-courses .course-price .free{color:#3ab500}.learn-press-courses .course{width:25%;margin:0 0 32px 0;box-shadow:none;list-style:none}.learn-press-courses .course-info{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.learn-press-courses .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:12px}.learn-press-courses .course-instructor-category>div>*{display:inline;vertical-align:middle}.learn-press-courses .course-instructor-category label{font-size:inherit;font-weight:inherit}.learn-press-courses .course-instructor-category a{font-weight:var(--lp-font-weight-link,600);text-decoration:none;color:inherit}.learn-press-courses .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.learn-press-courses .course-wrap-meta{display:flex;padding:0;margin-bottom:12px;gap:20px;flex-wrap:wrap;row-gap:8px}.learn-press-courses .course-wrap-meta .meta-item{text-transform:capitalize;display:flex;gap:8px}.learn-press-courses .course-wrap-meta .meta-item::before{color:var(--lp-primary-color);font-family:\"lp-icon\"}.learn-press-courses .course-wrap-meta .meta-item>div{display:inline-block}.learn-press-courses .course-wrap-meta .meta-item-level::before{content:\"\\f012\"}.learn-press-courses .course-wrap-meta .meta-item-duration::before{content:\"\\f017\"}.learn-press-courses .course-wrap-meta .meta-item-lesson::before{content:\"\\f15b\"}.learn-press-courses .course-wrap-meta .meta-item-quiz::before{content:\"\\f12e\"}.learn-press-courses .course-wrap-meta .meta-item-student::before{content:\"\\f501\"}.learn-press-courses .course-wrap-meta .meta-item-address::before{content:\"\\e91b\"}.learn-press-courses .course-content .course-readmore a{padding:8px 24px;border-radius:var(--lp-border-radius,5px);color:var(--lp-color-base,#333);border:1px solid var(--lp-color-base,#333);transition:all .3s;display:block;background:transparent;text-decoration:none;text-align:center}.learn-press-courses .course-content .course-readmore a:hover{background:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff);border-color:var(--lp-primary-color,#ffb606)}.learn-press-courses[data-layout=list]{margin:0}.learn-press-courses[data-layout=list] .course{display:flex;width:100%;border-bottom:1px solid var(--lp-border-color,#e2e0db);flex-wrap:wrap;justify-content:flex-end;padding-bottom:32px}.learn-press-courses[data-layout=list] .course-item{flex-direction:row;width:100%;border:unset;align-items:start}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-item{flex-direction:column}}.learn-press-courses[data-layout=list] .course-content{padding:0 24px 0 0}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-content{padding:16px 0}}.learn-press-courses[data-layout=list] .course-content .course-tags a{margin:0 0 10px 10px;padding:3px 5px;border-radius:3px;color:var(--lp-color-white,#fff);background:#e4a2a2;line-height:1}.learn-press-courses[data-layout=list] .course-content .course-excerpt{width:100%}.learn-press-courses[data-layout=list] .course-content .course-info{width:100%;display:flex;justify-content:space-between}@media(max-width:520px){.learn-press-courses[data-layout=list] .course-content .course-info{width:100%}}.learn-press-courses[data-layout=list] .course-content .course-info .course-students{display:none}.learn-press-courses[data-layout=list] .course-thumbnail{width:35%}.learn-press-courses[data-layout=list] .course-content{width:65%}@media(max-width:767px){.learn-press-courses[data-layout=list] .course-thumbnail,.learn-press-courses[data-layout=list] .course-content{width:100%}}.learn-press-courses[data-layout=list] .course-title{font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{padding:0 16px}@media(max-width:992px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:50%}}@media(max-width:767px){.learn-press-courses[data-layout=grid] .course,.learn-press-courses.lp-courses-related .course{width:100%}}.learn-press-courses[data-layout=grid] .wp-block-learnpress-course-item-template,.learn-press-courses[data-layout=grid] .course-item,.learn-press-courses.lp-courses-related .wp-block-learnpress-course-item-template,.learn-press-courses.lp-courses-related .course-item{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-duration,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-level,.learn-press-courses[data-layout=grid] .course-wrap-meta .meta-item-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-level,.learn-press-courses.lp-courses-related .course-wrap-meta .wp-block-learnpress-course-quiz,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-duration,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-level,.learn-press-courses.lp-courses-related .course-wrap-meta .meta-item-quiz{display:none}.learn-press-courses[data-layout=grid] .course-content,.learn-press-courses.lp-courses-related .course-content{width:100%;padding:20px;flex-grow:1}.learn-press-courses[data-layout=grid] .course-content .course-info,.learn-press-courses.lp-courses-related .course-content .course-info{flex-direction:column;align-items:flex-start;gap:12px}.learn-press-courses[data-layout=grid] .course-content .course-info .course-readmore,.learn-press-courses.lp-courses-related .course-content .course-info .course-readmore{width:100%;text-align:center}.learn-press-courses[data-layout=grid] .course-content .course-excerpt,.learn-press-courses[data-layout=grid] .course-content .course-short-description,.learn-press-courses.lp-courses-related .course-content .course-excerpt,.learn-press-courses.lp-courses-related .course-content .course-short-description{display:none}.learn-press-courses[data-layout=grid] .learn-press-message,.learn-press-courses.lp-courses-related .learn-press-message{margin-right:15px;margin-left:15px}.learn-press-courses[data-layout=grid] .course-thumbnail,.learn-press-courses.lp-courses-related .course-thumbnail{border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.learn-press-courses[data-size=\"3\"] .course{width:33.3333%}@media(max-width:767px){.learn-press-courses[data-size=\"3\"] .course{width:100%}}.learn-press-courses .lp-archive-course-skeleton{position:absolute;height:100%;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);animation:lp-skeleton-loading 1.4s ease infinite;background-size:400% 100%}.learn-press-courses .lp-archive-course-skeleton li{display:none}.lp-list-courses-default{position:relative}.lp-list-courses-default .lp-skeleton-animation{clear:both;padding:5px 0 0 0}.lp-courses-bar{display:flex;width:100%;justify-content:space-between;gap:12px;margin-bottom:32px;flex-wrap:wrap}.lp-courses-bar .courses-order-by{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;padding-left:30px;background-image:url(data:image\u002Fsvg+xml;base64,Cjxzdmcgd2lkdGg9IjE4cHgiIGhlaWdodD0iMTBweCIgdmlld0JveD0iMCAwIDE4IDEwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj4KICAgICAgICA8ZyBpZD0iVmVjdG9yLSgxKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS4wMDAwMDAsIDEuMDAwMDAwKSIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9IlBhdGgiIHBvaW50cz0iMCAwIDggOCAxNiAwIj48L3BvbHlsaW5lPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);background-size:.8em;background-position:calc(100% - (100% - 0.5em)) center;background-repeat:no-repeat;-moz-appearance:none;-webkit-appearance:none;appearance:none;line-height:1.1}.woocommerce-js .lp-courses-bar .courses-order-by{background-position-x:calc(100% - (100% - 10px))}.lp-courses-bar .courses-order-by:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar>*{display:flex}.lp-courses-bar .search-courses{display:flex;flex:1;margin-bottom:0}.lp-courses-bar .search-courses input{width:100%;max-width:240px;margin:0 0 0 4px;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none}.lp-courses-bar .search-courses input::-webkit-input-placeholder{color:#999}.lp-courses-bar .search-courses input::-moz-placeholder{color:#999}.lp-courses-bar .search-courses input:-ms-input-placeholder{color:#999}.lp-courses-bar .search-courses input:-moz-placeholder{color:#999}.lp-courses-bar .search-courses input::placeholder{color:#999}.lp-courses-bar .search-courses input:focus{border-color:var(--lp-primary-color);outline:0}.lp-courses-bar .search-courses button{border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px);padding:8px 16px;height:inherit;font-size:inherit;line-height:1.1;box-shadow:none;box-shadow:0 0}.lp-courses-bar .search-courses button i{font-size:1.2em;line-height:1.2}.lp-courses-bar .search-courses button:focus{outline:0}.lp-courses-bar .search-courses button.loading>i:before{display:inline-block;content:\"\\f110\";-webkit-animation:lp-rotating 1s linear infinite;-moz-animation:lp-rotating 1s linear infinite;animation:lp-rotating 1s linear infinite}.lp-courses-bar .switch-layout{align-items:center;justify-content:center}@media(max-width:768px){.lp-courses-bar .switch-layout{display:none}}.lp-courses-bar .switch-layout input[type=radio]{display:none}.lp-courses-bar .switch-layout .switch-btn{margin:0;cursor:pointer;padding:8px 12px}.lp-courses-bar .switch-layout .switch-btn::before{display:inline-block;margin:6px;color:var(--lp-color-base,#333);font-family:\"lp-icon\";line-height:1.2;width:1em}.lp-courses-bar .switch-layout .switch-btn.grid{border-radius:0 var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0;border:1px solid var(--lp-border-color,#e2e0db);border-left:0}.lp-courses-bar .switch-layout .switch-btn.grid::before{content:\"\\f009\"}.lp-courses-bar .switch-layout .switch-btn.list{border-radius:var(--lp-border-radius,5px) 0 0 var(--lp-border-radius,5px);border:1px solid var(--lp-border-color,#e2e0db);border-right:0}.lp-courses-bar .switch-layout .switch-btn.list::before{content:\"\\f03a\"}.lp-courses-bar .course-filter-btn-mobile{display:inline-flex;align-items:center}@media(min-width:769px){.lp-courses-bar .course-filter-btn-mobile{display:none}}@media(max-width:767px){.lp-courses-bar .search-courses{width:100%}.lp-courses-bar .search-courses input{min-width:240px;max-width:unset}}.switch-layout input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(1):checked ~ .switch-btn:nth-child(2)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(3):checked ~ .switch-btn:nth-child(4)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(5):checked ~ .switch-btn:nth-child(6)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(7):checked ~ .switch-btn:nth-child(8)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(9):checked ~ .switch-btn:nth-child(10)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(11):checked ~ .switch-btn:nth-child(12)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(13):checked ~ .switch-btn:nth-child(14)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(15):checked ~ .switch-btn:nth-child(16)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(17):checked ~ .switch-btn:nth-child(18)::before{color:var(--lp-primary-color)}.switch-layout input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20){background-color:var(--lp-white-grey,#f7f7fb)}input[type=radio]:nth-child(19):checked ~ .switch-btn:nth-child(20)::before{color:var(--lp-primary-color)}.lp_allow_repurchase_select{padding:20px;background:#f7f7f7}.lp_allow_repurchase_select>ul{padding:0;list-style:none}.lp_allow_repurchase_select>ul li label{display:flex;align-items:center;gap:10px}.lp_allow_repurchase_select>a{display:inline-block;margin-top:10px;color:var(--lp-color-white,#fff);background-color:#222}.lp-single-offline-course .lp-single-offline-course-main{display:flex;gap:30px;margin-bottom:80px}.lp-single-offline-course .course-price .free{color:#3ab500}.lp-single-offline-course .course-price .origin-price{text-decoration:line-through;opacity:.6;margin-left:4px}.lp-single-offline-course__left{width:70%}.lp-single-offline-course__left>div{margin-bottom:32px}.lp-single-offline-course__left .learn-press-breadcrumb{display:flex;list-style:none;flex-wrap:wrap;gap:5px;font-size:var(--lp-font-size-base);align-items:center;margin-bottom:8px;padding:0}.lp-single-offline-course__left .learn-press-breadcrumb li{list-style:none;padding:0;margin:0}.lp-single-offline-course__left .course-title{display:block;font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 12px 0}.lp-single-offline-course__left .course-img img{width:100%}.lp-single-offline-course__left .lp-single-course-offline-info-one{margin-bottom:12px}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta{display:inline;line-height:1.4;margin-right:12px;padding-right:12px;border-right:1px solid #e2e0db}.lp-single-offline-course__left .lp-single-course-offline-info-one .item-meta:first-child{margin:0;padding:0;border:0}.lp-single-offline-course__left .lp-single-course-offline-info-one .lp-item-wishlist.active{color:var(--lp-primary-color)}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info{display:inline-block}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info .ico-star{display:inline-block;vertical-align:sub;margin-left:4px}.lp-single-offline-course__left .lp-single-course-offline-info-one .star-info svg{height:22px}.lp-single-offline-course__left .instructor-description{margin-top:16px}.lp-single-offline-course__left .course-features ul,.lp-single-offline-course__left .course-target ul,.lp-single-offline-course__left .course-requirements ul{margin:0 20px 0 0;padding:0}.lp-single-offline-course__left .instructor-social{display:flex;gap:8px;margin-top:30px}.lp-single-offline-course__left .instructor-social a{width:37px;height:37px;display:inline-flex;align-items:center;justify-content:center;background-color:#f1f2f8;border-radius:50%}.lp-single-offline-course__left .instructor-social a:hover{background-color:var(--lp-primary-color)}.lp-single-offline-course__left .instructor-social a:hover i{color:#fff}.lp-single-offline-course__left .instructor-social a .lp-icon-facebook{color:#216bf6}.lp-single-offline-course__left .instructor-social a .lp-icon-twitter{color:#169df0}.lp-single-offline-course__left .instructor-social a .lp-icon-youtube-play{color:#ff0200}.lp-single-offline-course__left .instructor-social a .lp-icon-linkedin{color:#0078b7}.lp-single-offline-course__left .instructor-social a i{font-size:18px}.lp-single-offline-course__left .item-title{margin-bottom:30px}.lp-single-offline-course__left>img{margin-bottom:30px}.lp-single-offline-course__right{width:30%;position:relative}.lp-single-offline-course__right__sticky{position:sticky;top:0}.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{border:1px solid #e2e0db;padding:30px;margin-bottom:60px}@media(max-width:767px){.lp-single-offline-course .info-metas,.lp-single-offline-course .course-featured-review{margin-bottom:30px}}.lp-single-offline-course .info-metas .info-meta-item,.lp-single-offline-course .course-featured-review .info-meta-item{display:flex;justify-content:space-between;border-bottom:1px solid #e2e0db;padding-bottom:16px;margin-bottom:16px;font-size:var(--lp-font-size-base)}.lp-single-offline-course .info-metas .info-meta-item:nth-last-of-type(2),.lp-single-offline-course .course-featured-review .info-meta-item:nth-last-of-type(2){border:0;padding-bottom:0;margin-bottom:0}.lp-single-offline-course .info-metas .info-meta-left,.lp-single-offline-course .course-featured-review .info-meta-left{display:inline-flex;align-items:center;gap:8px}.lp-single-offline-course .info-metas .info-meta-left>span,.lp-single-offline-course .course-featured-review .info-meta-left>span{min-width:16px}@media(min-width:992px){.lp-single-offline-course .info-metas.lp-is-mobile,.lp-single-offline-course .course-featured-review.lp-is-mobile{display:none}}@media(max-width:991px){.lp-single-offline-course .info-metas.lp-is-pc,.lp-single-offline-course .course-featured-review.lp-is-pc{display:none}}.lp-single-offline-course form.purchase-course,.lp-single-offline-course form.enroll-course,.lp-single-offline-course form.retake-course{width:100%}.lp-single-offline-course .course-buttons{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.lp-single-offline-course .course-buttons .lp-button{padding:12px 16px;border-radius:var(--lp-border-radius,3px);font-size:var(--button--font-size);line-height:1.5em;font-weight:600;width:100%}.lp-single-offline-course .course-buttons .lp-button.button{border:0}.lp-single-offline-course .course-buttons a.course-btn-extra{border-color:var(--lp-primary-color);color:var(--lp-primary-color)}.lp-single-offline-course .course-buttons a.course-btn-extra:focus,.lp-single-offline-course .course-buttons a.course-btn-extra:hover{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .course-buttons .button-purchase-course{background-color:var(--lp-primary-color);color:#fff}.lp-single-offline-course .featured-review__title{font-weight:bold;font-size:1.4rem;margin-top:10px}.lp-single-offline-course .course-featured-review{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:16px;position:relative}.lp-single-offline-course .course-featured-review::before{background-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='56' height='56' viewBox='0 0 56 56' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Crect width='56' height='56' rx='28' fill='%23F2F1F8'\u002F%3E%3Cpath d='M17.425 40.5325C17.3136 40.5325 17.2015 40.5061 17.0958 40.4518C16.7823 40.2903 16.6073 39.9215 16.6673 39.5504L18.2548 31.142H12.7691C12.3442 31.142 12 30.7678 12 30.3058V15.5028C12 15.0409 12.3442 14.6666 12.7691 14.6666H25.8927C26.3176 14.6666 26.6618 15.0409 26.6618 15.5028V30.3051C26.6618 30.5046 26.5961 30.6979 26.4761 30.8501L18.0084 40.2406C17.8584 40.43 17.6442 40.5325 17.425 40.5325ZM13.5389 29.4689H19.1731C19.4009 29.4689 19.6165 29.5783 19.7629 29.7678C19.9093 29.9572 19.9707 30.2072 19.9307 30.451L18.6739 36.8314L25.1243 29.9953V16.3398H13.5389V29.4689Z' fill='%23121212'\u002F%3E%3Cpath d='M34.7609 40.5325C34.6495 40.5325 34.5374 40.5061 34.4317 40.4518C34.1182 40.2903 33.9433 39.9215 34.0033 39.5496L35.5907 31.1413H30.105C29.6801 31.1413 29.3359 30.767 29.3359 30.3051V15.5028C29.3359 15.0409 29.6801 14.6666 30.105 14.6666H43.2286C43.4329 14.6666 43.6285 14.7551 43.7728 14.912C43.917 15.0688 43.9977 15.2815 43.9977 15.5036V30.3058C43.9977 30.5054 43.9313 30.6987 43.8113 30.8509L35.3436 40.2414C35.1937 40.4308 34.9787 40.5333 34.7595 40.5333L34.7609 40.5325ZM30.8748 29.4689H36.509C36.7368 29.4689 36.9525 29.5783 37.0989 29.7678C37.2452 29.9572 37.3067 30.2072 37.2667 30.451L36.0099 36.8306L42.4603 29.9953V16.3398H30.8755L30.8748 29.4689Z' fill='%23121212'\u002F%3E%3C\u002Fsvg%3E%0A\");content:\"\";width:56px;height:56px;position:absolute;top:-25px}.lp-single-offline-course .featured-review__stars{order:3;color:var(--lp-primary-color)}.lp-single-offline-course .lp-list-courses-related .section-title{margin-bottom:40px}@media(max-width:991px){.lp-single-offline-course .lp-single-offline-course-main{flex-direction:column;margin-bottom:0}.lp-single-offline-course__left,.lp-single-offline-course__right{width:100%}}@media(max-width:767px){.lp-single-offline-course__left .lp-instructor-info{flex-direction:column}}.lp-archive-courses .course-detail-info{padding:28px 0 24px 0;color:var(--lp-color-white,#fff);background:var(--lp-secondary-color);position:relative}.lp-archive-courses .course-detail-info .course-title{margin:0 0 24px 0;border-bottom:1px solid rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);padding-bottom:24px}@media(min-width:769px){.lp-archive-courses .course-detail-info{overflow-x:hidden}.lp-archive-courses .course-detail-info .course-title,.lp-archive-courses .course-detail-info .course-meta-secondary,.lp-archive-courses .course-detail-info .course-meta-primary{padding-left:320px}.lp-archive-courses .course-detail-info::before,.lp-archive-courses .course-detail-info::after{content:\"\";width:50%;height:100%;background:var(--lp-secondary-color);position:absolute;top:0}.lp-archive-courses .course-detail-info::before{left:100%;right:auto}.lp-archive-courses .course-detail-info::after{right:100%;left:auto}}.lp-archive-courses .course-detail-info .course-meta-secondary{margin-bottom:0}.lp-archive-courses .course-meta__pull-left{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}.lp-archive-courses .course-meta__pull-left .meta-item{display:flex;text-transform:capitalize;align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item::before{margin-left:8px;color:var(--lp-primary-color);font-family:\"lp-icon\"}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image{margin-left:8px;flex:0 0 46px}.lp-archive-courses .course-meta__pull-left .meta-item .meta-item__image img{overflow:hidden;position:relative;width:46px;height:46px;border-radius:50%;display:block}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-duration::before{content:\"\\f017\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-level::before{content:\"\\f012\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-lesson::before{content:\"\\f0c5\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-quiz::before{content:\"\\f12e\"}.lp-archive-courses .course-meta__pull-left .meta-item.meta-item-student::before{content:\"\\f501\"}.lp-archive-courses .course-meta__pull-left .meta-item__value label{margin:0;color:var(--lp-color-accent-1);font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300;line-height:1.5;display:block}.lp-archive-courses .course-meta__pull-left .meta-item__value>div{line-height:1.5}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a{color:var(--lp-color-white,#fff);text-transform:capitalize;text-decoration:none}.lp-archive-courses .course-meta__pull-left .meta-item__value>div a:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-meta__pull-left .meta-item-categories{align-items:center}.lp-archive-courses .course-meta__pull-left .meta-item-categories .meta-item__value div span{padding:0 4px}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value{display:flex;flex-direction:column;justify-content:space-between}.lp-archive-courses .course-meta__pull-left .meta-item-review .meta-item__value .review-stars-rated{margin-bottom:0;line-height:1}.lp-archive-courses .course-meta-primary{margin-bottom:20px}.lp-archive-courses .course-meta-primary .meta-item-categories::before{font-weight:400}.lp-archive-courses .lp-entry-content{display:flex;flex-direction:row}.lp-archive-courses .lp-entry-content .entry-content-left{width:calc(100% - 300px);max-width:100%;margin:0;padding-left:40px;padding-top:60px}@media(max-width:768px){.lp-archive-courses .lp-entry-content .entry-content-left{width:100%;padding-left:0;margin-bottom:50px}}@media(max-width:768px){.lp-archive-courses .lp-entry-content{flex-direction:column}}.lp-archive-courses .course-summary-sidebar{width:300px;max-width:100%;margin-top:-180px}@media(max-width:768px){.lp-archive-courses .course-summary-sidebar{width:100%;margin-top:0}.lp-archive-courses .course-summary-sidebar .course-summary-sidebar__inner{width:100%}}@media(max-width:767px){.lp-archive-courses .course-summary-sidebar{width:100%;padding-right:0}}.lp-archive-courses .course-summary-sidebar__inner{width:300px}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-top{box-shadow:0 15px 20px 0 rgba(0,0,0,0.05)}.lp-archive-courses .course-summary-sidebar__inner .course-sidebar-secondary{margin-top:30px;padding:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist{color:var(--lp-color-white,#fff);background:transparent !important;font-size:0}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist.on,.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist:hover{color:var(--lp-primary-color)}.lp-archive-courses .course-summary-sidebar__inner .learn-press-course-wishlist::before{font-family:\"lp-icon\";font-size:1em;content:\"\\f004\"}.lp-archive-courses .course-summary-sidebar__inner>div{padding:20px;background:var(--lp-color-white,#fff)}.lp-archive-courses .course-summary-sidebar__inner>div ul{list-style:none}.lp-archive-courses .course-summary-sidebar__inner>div ul li a{color:#666;font-weight:300;line-height:1.5em}.lp-archive-courses .course-summary-sidebar__inner>div ul li a:hover{color:var(--lp-primary-color);box-shadow:unset}.lp-archive-courses .courses-btn-load-more{display:flex;align-items:center;gap:5px}.lp-archive-courses .course-wishlist:before{font-family:\"lp-icon\"}.lp-archive-courses .lp-course-curriculum ul{padding:0}.lp-single-course__header{background-color:#f1f2f8}.lp-single-course__header__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding);padding-top:40px;padding-bottom:40px}@media(max-width:767px){.lp-single-course__header__inner{padding-top:20px;padding-bottom:20px}}@media(min-width:992px){.lp-single-course__header__inner>*{width:calc(100% - 440px)}}.lp-single-course__header .learn-press-breadcrumb{display:flex;list-style:none;gap:4px;flex-wrap:wrap;margin-bottom:8px;padding:0}.lp-single-course__header .course-title{font-weight:700;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);margin:0 0 24px 0}@media(max-width:767px){.lp-single-course__header .course-title{margin:0 0 16px 0}}.lp-single-course__header .course-instructor-category{display:flex;padding:0;gap:4px;flex-wrap:wrap;margin-bottom:40px}@media(max-width:767px){.lp-single-course__header .course-instructor-category{margin-bottom:20px}}.lp-single-course__header .course-instructor-category>div>*{display:inline;vertical-align:middle}.lp-single-course__header .course-instructor-category label{font-size:inherit;font-weight:inherit}.lp-single-course__header .course-instructor-category a{text-decoration:none;color:inherit}.lp-single-course__header .course-instructor-category a:hover{color:var(--lp-primary-color,#ffb606)}.lp-single-course__header .lp-single-course-info-one{display:flex;column-gap:20px;row-gap:8px;flex-wrap:wrap}.lp-single-course__header .lp-single-course-info-one .star-info{display:inline-flex;align-items:center;gap:4px;padding-left:20px;position:relative}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:\"\";left:0;right:auto;width:1px;height:20px;position:absolute;background-color:var(--lp-border-color,#e2e0db)}@media(max-width:500px){.lp-single-course__header .lp-single-course-info-one .star-info{padding-left:0}.lp-single-course__header .lp-single-course-info-one .star-info::after{content:none}}.lp-single-course__header .lp-single-course-info-one .ico-star,.lp-single-course__header .lp-single-course-info-one .lp-review-svg-star{display:inline-flex;align-items:center}.lp-single-course .lp-single-course-main{padding:40px 0 80px;display:flex;column-gap:60px;row-gap:30px;flex-wrap:wrap}@media(max-width:1500px){.lp-single-course .lp-single-course-main{column-gap:30px}}@media(max-width:991px){.lp-single-course .lp-single-course-main{flex-direction:column-reverse;padding:40px 0}}.lp-single-course .lp-single-course-main__left{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 410px)}}@media(min-width:1501px){.lp-single-course .lp-single-course-main__left{width:calc(100% - 440px)}}.lp-single-course .lp-single-course-main__left>div{margin-bottom:40px}@media(max-width:767px){.lp-single-course .lp-single-course-main__left>div{margin-bottom:30px}}.lp-single-course .lp-single-course-main__left>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 20px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}@media(max-width:767px){.lp-single-course .lp-single-course-main__left .extra-box__title,.lp-single-course .lp-single-course-main__left .course-faqs__title,.lp-single-course .lp-single-course-main__left .course-material__title,.lp-single-course .lp-single-course-main__left .lp-course-curriculum__title,.lp-single-course .lp-single-course-main__left .comment-reply-title,.lp-single-course .lp-single-course-main__left .section-title,.lp-single-course .lp-single-course-main__left .item-title{margin:0 0 16px 0}}.lp-single-course .lp-single-course-main__left .extra-box ul{margin:0 20px 0 0;padding:0}.lp-single-course .lp-single-course-main__left .comments-area{width:100%;max-width:100%;margin:0}.lp-single-course .lp-single-course-main__right{width:100%}@media(min-width:992px){.lp-single-course .lp-single-course-main__right{width:380px;margin-top:-280px}}.lp-single-course .lp-single-course-main__right__inner{position:sticky;top:0;background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .lp-single-course-main__right__inner>div{margin-bottom:20px}.lp-single-course .lp-single-course-main__right__inner>div:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-item{display:flex;gap:4px;margin-bottom:12px}.lp-single-course .lp-single-course-main .info-metas .info-meta-item:last-child{margin-bottom:0}.lp-single-course .lp-single-course-main .info-metas .info-meta-left{display:flex;gap:8px;align-items:center}.lp-single-course .lp-single-course-main .info-metas i{color:var(--lp-primary-color,#ffb606)}.lp-single-course .lp-single-course-main .course-img{margin-bottom:20px;overflow:hidden;margin:-20px -20px 20px -20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .lp-single-course-main .course-img img{max-width:100%;display:block}.lp-single-course .lp-single-course-main .course-price{display:block;margin-bottom:20px}.lp-single-course .lp-single-course-main .course-price .free{color:#3ab500;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-single-course-main .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:var(--lp-font-size-base,1em);margin-left:4px}.lp-single-course .lp-single-course-main .course-price .price{font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:var(--lp-font-weight-link,600)}.lp-single-course .lp-single-course-main .course-buttons{display:flex;flex-direction:column;gap:8px}.lp-single-course .lp-single-course-main .course-buttons form,.lp-single-course .lp-single-course-main .course-buttons .lp-button{width:100%}.lp-single-course .lp-single-course-main .course-buttons .lp-button{background-color:var(--lp-primary-color,#ffb606);border:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.lp-single-course .lp-single-course-main .course-buttons .lp-button:hover{background-color:var(--lp-secondary-color);border-color:var(--lp-secondary-color)}.lp-single-course .lp-single-course-main .course-buttons .learn-press-message{margin:0}.lp-single-course .lp-single-course-main .featured-review__title{font-weight:var(--lp-font-weight-link,600);font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.lp-single-course .lp-list-courses-related{margin:0 0 40px 0}@media(max-width:767px){.lp-single-course .lp-list-courses-related{margin:0 0 20px 0}}.lp-single-course .lp-list-courses-related .section-title{margin:0 0 40px 0;font-size:calc(var(--lp-font-size-base, 1em) * 1.6)}.lp-single-course .course-detail-info__inner{max-width:var(--lp-container-max-width);margin:0 auto;padding-left:var(--lp-cotainer-padding);padding-right:var(--lp-cotainer-padding)}.lp-single-course .course-detail-info .course-meta{gap:16px;flex-wrap:wrap}@media(min-width:769px){.lp-single-course .course-detail-info .course-meta__pull-left{width:calc(100% - 340px);max-width:100%;margin:0}}.lp-single-course .course-tabs .course-faqs__title,.lp-single-course .course-tabs .course-material__title{display:none}.lp-single-course .course-summary-sidebar__inner{background-color:var(--lp-color-white,#fff);border:1px solid var(--lp-border-color,#e2e0db);padding:20px;border-radius:var(--lp-border-radius,5px)}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*{padding:0;margin-bottom:20px}.lp-single-course .course-summary-sidebar .course-summary-sidebar__inner>*:last-child{margin-bottom:0}.lp-single-course .course-summary-sidebar .course-img{margin:-20px -20px 20px;border-radius:var(--lp-border-radius,5px) var(--lp-border-radius,5px) 0 0}.lp-single-course .course-summary-sidebar .course-img img{max-width:100%;width:100%;height:auto}.lp-single-course .course-summary-sidebar .course-price{display:block;font-size:calc(var(--lp-font-size-base, 1em) * 1.25);font-weight:700}.lp-single-course .course-summary-sidebar .course-price .free{color:#3ab500}.lp-single-course .course-summary-sidebar .course-price .origin-price{text-decoration:line-through;opacity:.6;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);margin-left:4px;font-weight:normal}.lp-single-course button{font-size:1em}.course-featured{padding:4px 12px;border-radius:var(--lp-border-radius,5px);background-color:#ff3b30;color:white;text-transform:uppercase;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:var(--lp-font-weight-link,600);margin-bottom:12px;display:inline-block}.course-summary div.lp-list-co-instructor{display:grid;grid-template-columns:repeat(2,1fr);gap:30px;margin-top:30px}.course-summary div.lp-list-co-instructor__item{display:flex;column-gap:30px}@media(max-width:767px){.course-summary div.lp-list-co-instructor__item{align-items:center;flex-direction:column;padding:0 15px;column-gap:0;row-gap:10px}}.course-summary div.lp-list-co-instructor__avatar>img{width:100%;max-width:96px;border-radius:999px}.course-summary div.lp-list-co-instructor__bio{flex:1}.course-summary div.lp-list-co-instructor__bio__top>a{font-size:1.125em;font-weight:600}.course-summary .course-price{margin-bottom:10px}.course-summary .course-price .origin-price,.course-summary .course-price .origin-price{margin-left:10px;font-size:1.125em;font-style:italic;text-decoration:line-through}.course-summary .course-price .price{font-size:1.5em}.course-summary .course-summary-sidebar .lp-course-buttons{margin-bottom:20px;text-align:center}.course-summary .course-featured-review .featured-review__title{margin-top:0;margin-bottom:6px;font-size:1.2em;font-weight:500}.course-summary .course-featured-review .featured-review__stars{padding-bottom:12px;color:var(--lp-primary-color)}.course-summary .course-featured-review .featured-review__content{position:relative;color:#666;font-style:italic}.course-summary .course-featured-review .featured-review__content::after{position:absolute;top:-42px;left:-15px;color:rgba(102,102,102,0.1);font-family:Arial;font-size:180px;font-weight:700;font-style:normal;content:\"‘‘\";transform:rotate(-180deg)}.course-summary .course-tags a{display:inline-block;padding:3px 5px;border-radius:4px;color:#fff;background:#9aa5ab;font-size:.75em;line-height:1}.course-meta{display:flex;margin-bottom:40px}.course-meta .course-students::before{font-family:\"lp-icon\";content:\"\"}.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:flex;flex-wrap:wrap;gap:50px}@media(max-width:767px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:20px}}@media(max-width:560px){.course-meta .course-meta__pull-left,.course-meta .course-meta__pull-right{grid-template-columns:repeat(2,1fr)}}.course-meta.course-meta-primary .course-meta__pull-left .meta-item{margin-left:0 !important}@media(max-width:560px){.course-meta.course-meta-primary .course-meta__pull-left .meta-item{width:100%}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left{gap:16px}}@media(max-width:1024px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{margin-left:0 !important;width:calc((100% - 32px) \u002F 3)}}@media(max-width:768px){.course-meta.course-meta-secondary .course-meta__pull-left .meta-item{width:100%}}.course-meta .course-meta__pull-left{flex:1}.course-meta .course-meta__pull-right{flex:0 0 50%}.course-meta.two-columns .course-meta{flex:1}.lp-single-course .comment-form .comment-form-url,.lp-single-course .comment-form .comment-form-email,.lp-single-course .comment-form .comment-form-author,.lp-single-course .comment-form .comment-form-comment,.wp-block-learnpress-course-comment .comment-form .comment-form-url,.wp-block-learnpress-course-comment .comment-form .comment-form-email,.wp-block-learnpress-course-comment .comment-form .comment-form-author,.wp-block-learnpress-course-comment .comment-form .comment-form-comment{display:flex;flex-direction:column;gap:1rem}.lp-single-course .comment-form input[type=url],.lp-single-course .comment-form input[type=text],.lp-single-course .comment-form input[type=email],.lp-single-course .comment-form textarea,.wp-block-learnpress-course-comment .comment-form input[type=url],.wp-block-learnpress-course-comment .comment-form input[type=text],.wp-block-learnpress-course-comment .comment-form input[type=email],.wp-block-learnpress-course-comment .comment-form textarea{padding:12px 20px;outline:0;border:1px solid var(--lp-border-color,#e2e0db);border-radius:var(--lp-border-radius,5px)}.lp-single-course .comment-form input[type=submit],.wp-block-learnpress-course-comment .comment-form input[type=submit]{border-radius:var(--lp-border-radius,5px)}.course-summary-sidebar{--lp-button-background-color:#28303d;--lp-button-color:#d1e4dd;position:relative}.course-summary-sidebar .course-sidebar-preview{margin-bottom:35px;background:#fff}.course-summary-sidebar .has-global-padding{padding-left:0;padding-right:0}.course-summary-sidebar .lp-course-buttons{margin-bottom:34px}.course-summary-sidebar .lp-course-buttons>*{margin-bottom:10px}.course-summary-sidebar .lp-course-buttons>*:last-child{margin-bottom:0}.course-summary-sidebar .lp-course-buttons form,.course-summary-sidebar .lp-course-buttons button{width:100%;text-decoration:none}.course-summary-sidebar .lp-course-buttons button{font-weight:500;background-color:var(--lp-button-background-color);color:var(--lp-button-color);border:0}.course-summary-sidebar .lp-course-buttons button:hover{border-color:var(--lp-primary-color)}.course-summary-sidebar .course-results-progress .items-progress,.course-summary-sidebar .course-results-progress .course-progress{display:flex;flex-direction:row;margin:0 0 5px;padding:0;justify-content:space-between;flex-wrap:wrap}.course-summary-sidebar .course-results-progress .items-progress__heading,.course-summary-sidebar .course-results-progress .course-progress__heading{margin:0;margin-bottom:7px;padding:0;color:#333;font-size:1em;font-weight:500;flex:1 1 auto;width:auto}.course-summary-sidebar .course-results-progress .items-progress .learn-press-progress,.course-summary-sidebar .course-results-progress .course-progress .learn-press-progress{clear:both;width:100%}.course-summary-sidebar .course-results-progress .number{display:block;margin:0;color:#666;font-size:1em;font-weight:300;line-height:1em;text-align:left}@media(min-width:769px){.course-summary-sidebar.slide-down .course-summary-sidebar__inner{position:fixed;top:0}}.lp-course-buttons:empty{display:none}.course-sidebar-preview .course-price{text-align:center}.course-sidebar-preview .course-price .origin-price{color:var(--lp-primary-color);font-size:1.3em;font-weight:300;font-style:unset}.course-sidebar-preview .course-price .price{color:var(--lp-primary-color);font-size:1.3em;font-weight:500}.course-sidebar-preview .media-preview{overflow:hidden;position:relative;margin:-20px -20px 10px}.course-sidebar-preview .media-preview img{max-width:100%;height:auto;vertical-align:top;width:100%}.course-sidebar-preview .course-wishlist{float:none}.course-sidebar-preview .course-time{margin-bottom:28px;padding-bottom:8px;border-bottom:1px solid rgba(204,204,204,0.3)}.course-sidebar-preview .course-time-row{color:#666;font-size:1em;font-weight:300;margin-bottom:0}.course-sidebar-preview .course-time-row strong{color:#333;font-weight:500}.course-sidebar-preview .course-time-row time{color:#666;font-weight:300}.course-sidebar-preview>*:last-child{margin-bottom:0}.lp-instructor-info{display:flex;gap:30px;margin-top:30px;margin-bottom:30px}@media(max-width:600px){.lp-instructor-info{flex-wrap:wrap}}.lp-instructor-info .lp-section-instructor{flex:1}.lp-instructor-info .instructor-display-name{font-size:1.4rem}.lp-instructor-info .instructor-avatar{max-width:200px}.lp-instructor-info .lp-instructor-meta{margin-top:16px;display:flex;column-gap:20px;row-gap:8px}.lp-instructor-info .instructor-description{margin-top:16px}.lp-instructor-info img{max-width:100%;border-radius:var(--lp-border-radius,5px)}.lp-instructor-info .instructor-social{display:inline-flex;padding:0;gap:12px;margin:16px 0 0 0}.lp-instructor-info .instructor-social>a{text-align:center;list-style:none}.lp-instructor-info .instructor-social>a span{display:none}.lp-instructor-info .instructor-social>a i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.lp-instructor-info .instructor-social>a i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.instructor-display-name{font-weight:var(--lp-font-weight-link,600)}.instructor-item-meta{display:inline-flex;border-right:1px solid var(--lp-border-color,#e2e0db);padding-right:20px}.lp-instructor-meta .instructor-item-meta:first-child{border:0;padding-right:0}.wrapper-instructor-total-students,.wrapper-instructor-total-courses{display:flex;gap:4px;align-items:center}.learnpress-page .lp-button.secondary{background:#9198ab}.learnpress-page .lp-button.secondary:hover{background:#9ba6c5}.learnpress-page .lp-button:disabled,.learnpress-page .lp-button[disabled]{background:#ddd;pointer-events:none;color:var(--lp-button-background-color)}.learnpress-page:hover{text-decoration:none}.lp-sidebar-toggle__close .content-item-wrap .quiz-buttons.align-center .button-left.fixed{margin-right:0 !important}.course-item-nav{display:flex}.course-item-nav .prev span,.course-item-nav .next span{display:block;font-weight:bold}.course-item-nav .prev a,.course-item-nav .next a{color:#999}.course-item-nav .next{text-align:left}#popup-course{display:flex;position:fixed;z-index:9999;top:0;left:0;bottom:0;right:0;background:var(--lp-bg-color-lesson,#fff)}#popup-course .wp-block-learnpress-item-close .back-course{padding:24px}#popup-course .back-course{padding-right:24px;padding-left:24px;line-height:70px;background:rgba(255,255,255,0.1);color:#fff}#popup-course .back-course:hover{background:rgba(255,255,255,0.15)}@media(max-width:768px){#popup-course .back-course{background:transparent;opacity:.6;padding-right:15px;padding-left:15px}#popup-course .back-course:hover{background:transparent;opacity:1}}#popup-course .popup-header__inner{display:flex;width:792px;margin:0 auto;justify-content:space-between;align-items:center;padding-right:15px;padding-left:15px;column-gap:10px}@media(max-width:1024px){#popup-course .popup-header__inner{width:100%}}@media(max-width:767px){#popup-course .popup-header__inner{flex-direction:column;gap:5px}#popup-course .popup-header__inner.can-finish-course .items-progress{display:none}}#popup-course .lp-quiz-buttons .complete-quiz,#popup-course .lp-quiz-buttons .back-quiz,#popup-course .lp-quiz-buttons .review-quiz{float:left}#popup-course .quiz-results,#popup-course .quiz-content,#popup-course .quiz-questions,#popup-course .quiz-buttons,#popup-course .quiz-attempts{margin-bottom:60px}#popup-course .quiz-questions .lp-fib-content{margin-bottom:20px;padding:20px;border:2px solid var(--lp-border-color,#e2e0db);border-radius:6px;line-height:1.6}#popup-course .quiz-questions .lp-fib-input{display:inline-block;width:auto;max-width:none}#popup-course .quiz-questions .lp-fib-input>input{height:36px;padding:6px 16px;border:1px solid var(--lp-border-color,#e2e0db);line-height:2.25em}#popup-course .quiz-questions .lp-fib-answered{padding:0 10px;background:#ececec;white-space:nowrap}#popup-course .quiz-questions .lp-fib-answered.fail{border:2px solid #d85554}#popup-course .quiz-questions .lp-fib-answered.fail .lp-fib-answered__answer{text-decoration:line-through}#popup-course .quiz-questions .lp-fib-answered.correct{border:2px solid #00adff}#popup-course .quiz-questions .lp-fib-note{display:flex;margin-right:10px;font-size:.8em;font-weight:400;align-items:center}#popup-course .quiz-questions .lp-fib-note>span{display:inline-block;width:20px;height:20px;margin:0 0 0 5px}#popup-course .quiz-questions .lp-sorting-choice__check-answer{padding:5px 20px;border:2px solid #ebf8e5;border-radius:5px}#popup-course .question .question-response{display:flex;align-items:center;justify-content:flex-start}#popup-course .scrollbar-light>.scroll-element{z-index:9999}#popup-course .scrollbar-light>.scroll-element.scroll-y{display:none}#popup-course .scrollbar-light>.scroll-element.scroll-y .scroll-bar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#popup-header{display:flex;position:fixed;z-index:100;left:0;right:475px;padding:0;border-bottom:1px solid #d9e0f1;background:var(--lp-secondary-color);align-items:center;transition:right .35s cubic-bezier(0.4,0,0.2,1);will-change:left;transform:translateZ(0)}#popup-header .course-title{margin:0;padding:0;font-size:var(--lp-font-size-base,1em);letter-spacing:unset}#popup-header .course-title a{display:-webkit-box;overflow:hidden;color:#fff;font-weight:400;text-overflow:ellipsis;-webkit-line-clamp:1;-webkit-box-orient:vertical;text-decoration:none}#popup-header .course-title a:hover{color:var(--lp-primary-color)}#popup-header .items-progress{display:flex;justify-content:center;align-items:center;column-gap:10px;white-space:nowrap}#popup-header .number{padding-left:10px;color:#fff;font-size:calc(var(--lp-font-size-base, 1em) * 0.86);font-weight:300}#popup-header .lp-button{display:flex;position:relative;height:auto;border:0;color:#fff;background:var(--lp-primary-color);white-space:nowrap;padding:6px 15px;font-size:1rem}#popup-header .lp-button:hover{opacity:.8}#popup-header .lp-button-back{float:left;margin:9px 10px}#popup-header .lp-button-back button::before,#popup-header .lp-button-back button::after{content:\"\"}#popup-header .lp-button-back button::before{border:1px solid #ddd}#popup-header .lp-button-back button::after{border:1px solid #ddd}#popup-sidebar{overflow:auto;position:relative;box-shadow:0 15px 30px 0 rgba(0,0,0,0.1);flex:0 0 475px;transition:flex-basis .35s cubic-bezier(0.4,0,0.2,1);will-change:flex-basis;transform:translateZ(0)}#popup-sidebar .search-course{display:flex;position:relative;height:70px;background:var(--lp-white-grey,#f7f7fb)}#popup-sidebar .search-course input[name=s]{display:block;width:100%;padding-right:20px;border:0;color:var(--lp-color-base,#333);background:transparent;box-shadow:none;height:auto;font-size:1rem}#popup-sidebar .search-course input[name=s]::-webkit-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-ms-input-placeholder{color:#999}#popup-sidebar .search-course input[name=s]:-moz-placeholder{color:#999}#popup-sidebar .search-course input[name=s]::placeholder{color:#999}#popup-sidebar .search-course input[name=s]:focus{outline:0}#popup-sidebar .search-course button{position:absolute;top:0;left:12px;height:70px;padding:0 16px;border:0;background:transparent;line-height:1px;box-shadow:none;font-size:1rem}#popup-sidebar .search-course button:focus{outline:0}#popup-sidebar .search-course button i{color:var(--lp-color-accent,#666);width:24px;display:flex;justify-content:center}#popup-sidebar .search-course button.clear{display:none}#popup-sidebar .search-course button.clear::before{content:\"\\f00d\"}#popup-sidebar .search-course.searching button:before{display:inline-block;content:\"\\f110\";animation:lp-rotating 1s linear infinite}#popup-sidebar .course-curriculum{overflow:auto;position:absolute;top:70px;bottom:0;width:475px}#popup-sidebar .course-curriculum::-webkit-scrollbar-thumb{background:#ccc}#popup-sidebar .course-curriculum::-webkit-scrollbar{width:8px}#popup-sidebar .course-curriculum::-webkit-scrollbar-track{background:#f5f5f5}#popup-sidebar .section{position:relative;padding:0 0 4px 0}#popup-sidebar .section .circle-progress{display:inline-block;position:absolute;top:50%;left:10px;width:24px;height:24px;margin-top:-12px;border:3px solid #d9e0f1;border-radius:50%}#popup-sidebar .section.section-empty .section-header{margin:0}#popup-sidebar .section-header{position:sticky;z-index:1000;top:0;padding:20px 16px;cursor:pointer;background-color:var(--lp-bg-color-lesson,#fff)}#popup-sidebar .section-header .section-title .show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f0d7\"}#popup-sidebar .section-header .section-toggle{justify-content:flex-end;flex:0}#popup-sidebar .section-header .section-toggle i{color:var(--lp-color-accent,#666)}#popup-sidebar .section-header .section-meta{padding-top:6px;padding-bottom:0}#popup-sidebar .section-content{margin-bottom:0}#popup-sidebar .curriculum-more{padding-left:16px;padding-right:16px}#popup-sidebar .course-item>span{display:none}#popup-sidebar .course-item::before{top:-1px;bottom:-1px;height:auto;background:transparent}#popup-sidebar .course-item::after{content:\"\"}#popup-sidebar .course-item.has-status.failed .trans{color:#f02425}#popup-sidebar .course-item.status-completed .trans{color:#3bb54a}#popup-sidebar .lp-course-curriculum .course-section{--lp-border-radius:0;border-right:0}#popup-sidebar .lp-course-curriculum .lp-course-curriculum__title,#popup-sidebar .lp-course-curriculum .course-curriculum-info,#popup-sidebar .lp-course-curriculum .course-section__description{display:none}#popup-sidebar .lp-course-curriculum .course-item.current:before{background:var(--lp-primary-color,#ffb606)}#popup-sidebar .lp-course-curriculum .course-item__content{flex-direction:column;row-gap:0}#popup-sidebar .lp-course-curriculum .course-item__right{font-size:calc(var(--lp-font-size-base, 1em) * 0.925)}#popup-content{overflow:auto;position:relative;margin:70px 0 50px 0;flex:1;padding-right:15px;padding-left:15px}#popup-content .lp-button{position:relative;margin:0;padding:8px 25px;border-color:var(--lp-border-color,#e2e0db)}#popup-content .lp-button.instant-check .instant-check__icon{margin-left:5px}#popup-content .lp-button.instant-check .instant-check__icon::before{font-family:\"lp-icon\";content:\"\\f058\"}#popup-content .lp-button.instant-check .instant-check__info{visibility:hidden;position:absolute;top:100%;right:0;margin-top:3px;padding:11px 20px;border-radius:3px;background:var(--lp-white-grey,#f7f7fb);color:var(--lp-color-base,#333);white-space:nowrap;text-transform:none}@media(max-width:600px){#popup-content .lp-button.instant-check .instant-check__info{white-space:normal;width:90vw}}#popup-content .lp-button.instant-check:hover .instant-check__info{visibility:visible}#popup-content .lp-button.instant-check.loading::before{display:none}#popup-content .lp-button.instant-check.loading .instant-check__icon{display:inline-block;animation:lp-rotating 1s linear infinite}#popup-content .lp-button.instant-check.loading .instant-check__icon::before{font-weight:800;content:\"\\f110\"}#popup-content .lp-button:hover{border-color:var(--lp-primary-color)}#popup-content .lp-button.completed{display:flex;flex-direction:row-reverse;border-color:transparent;color:#fff;background:#3db748;align-items:center;justify-content:center;float:right}#popup-content .lp-button.completed i{margin-right:9px;font-size:.8em}#popup-content.fixed-quiz-status .quiz-status{background:var(--lp-primary-color)}#popup-content.fixed-quiz-status .quiz-status>div{padding:0}#popup-content::-webkit-scrollbar{width:8px}#popup-content::-webkit-scrollbar-thumb{background:#ccc}#popup-content::-webkit-scrollbar-track{background:#f5f5f5}#popup-footer{position:fixed;z-index:99;left:0;bottom:0;right:475px;width:100%;max-width:792px;height:auto;margin:0 auto;border-top:1px solid #ebebeb;background:var(--lp-bg-color-lesson,#fff);transition:right .35s cubic-bezier(0.4,0,0.2,1);will-change:left;transform:translateZ(0)}@media(max-width:1024px){#popup-footer{width:auto;padding:0 15px}}#popup-footer .course-item-nav{justify-content:space-between}#popup-footer .course-item-nav .prev,#popup-footer .course-item-nav .next{display:flex;line-height:3.125em}#popup-footer .course-item-nav .prev a,#popup-footer .course-item-nav .next a{display:block;color:var(--lp-color-accent,#666)}#popup-footer .course-item-nav .prev::before,#popup-footer .course-item-nav .next::before{color:#999;font-family:\"lp-icon\"}#popup-footer .course-item-nav .prev:hover a,#popup-footer .course-item-nav .prev:hover::before,#popup-footer .course-item-nav .next:hover a,#popup-footer .course-item-nav .next:hover::before{color:var(--lp-primary-color)}#popup-footer .course-item-nav .prev:hover .course-item-nav__name,#popup-footer .course-item-nav .next:hover .course-item-nav__name{display:block}#popup-footer .course-item-nav .next{flex-direction:row-reverse}#popup-footer .course-item-nav .next::before{margin-right:10px;content:\"\\f0da\"}#popup-footer .course-item-nav[data-nav=next]{justify-content:flex-end}#popup-footer .prev::before{margin-left:10px;content:\"\\f0d9\"}#popup-footer .prev .course-item-nav__name{left:auto;right:-30px}#popup-footer .prev .course-item-nav__name::before{left:auto;right:5px}@media(max-width:1024px){#popup-footer .prev .course-item-nav__name{right:15px}}#popup-footer .course-item-nav__name{display:none;position:absolute;top:-20px;left:-30px;width:auto;padding:10px 15px;color:var(--lp-color-accent,#666);background:#ccc;font-size:calc(var(--lp-font-size-base, 1em) * 0.925);line-height:1}@media(max-width:1024px){#popup-footer .course-item-nav__name{top:-25px;left:15px;right:auto}}#sidebar-toggle{display:inline-block;width:32px;min-width:32px;line-height:70px;height:unset;margin:0;background:rgba(255,255,255,0.1);color:var(--lp-color-white,#fff);font-size:1.4em;cursor:pointer;transition:.25s;-webkit-appearance:none;border:0;text-align:center}#sidebar-toggle:after{display:none}#sidebar-toggle::before{display:inline-block;position:static;margin:0;width:auto;height:auto;font-family:\"lp-icon\";content:\"\\f0d9\"}#sidebar-toggle:focus{border:0;outline:0}.course-item-popup #tab-curriculum{display:block}.course-item-popup .course-curriculum ul.curriculum-sections{z-index:9}.course-item-popup .lp-course-curriculum .course-section .course-item__content{flex-direction:column;row-gap:4px}body.course-item-popup{overflow-y:hidden}@media(max-width:1200px){body.course-item-popup #learn-press-course-curriculum{width:300px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum{margin-left:0}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .course-curriculum{width:200px}}@media(max-width:1300px){body.course-item-popup #learn-press-course-curriculum .progress-bg{width:40px}}@media(max-width:768px){body.course-item-popup #learn-press-course-curriculum .items-progress,body.course-item-popup #learn-press-course-curriculum .course-progress{float:none;width:100%;margin-left:0;margin-bottom:20px}}@media(max-width:1300px){body.course-item-popup #content-item-nav{right:300px}}@media(max-width:768px){body.course-item-popup #content-item-nav{right:200px}}@media(max-width:1300px){body.course-item-popup .section-desc{display:none}}@media(max-width:768px){body.course-item-popup.wpadminbar #learn-press-content-item,body.course-item-popup.wpadminbar #learn-press-course-curriculum{top:106px}}body.admin-bar #popup-course{top:32px}body.lp-sidebar-toggle__close #sidebar-toggle::before{content:\"\\f0da\"}body.lp-sidebar-toggle__close #popup-sidebar{flex:0}body.lp-sidebar-toggle__close #popup-header,body.lp-sidebar-toggle__close #popup-footer{right:0}@media(max-width:768px){body:not(.lp-sidebar-toggle__open) #sidebar-toggle::before{content:\"\\f0da\"}body:not(.lp-sidebar-toggle__open) #popup-sidebar{flex:0}}@media screen and (max-width:480px){#popup-header,#popup-footer{width:100%}.learnpress-v4 #popup-header,.lp-4 #popup-header,.learnpress-v4 #popup-footer,.lp-4 #popup-footer{width:auto}.learnpress-v4.starkid #popup-header,.learnpress-v4.starkid #popup-footer{width:100%}#popup-content{min-width:100vw}}.course-curriculum .section-header .section-meta{position:relative}@media screen and (max-width:1280px){#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{right:300px}}@media screen and (max-width:782px){body.admin-bar #popup-course{top:46px}#popup-course .course-item-meta .item-meta.count-questions,#popup-course .course-item-meta .item-meta.duration{display:none}#popup-sidebar{flex-basis:300px}#popup-sidebar .course-curriculum{width:300px}#popup-header,#popup-footer{right:300px}}.content-item-wrap{width:792px;max-width:100%;margin:0 auto;--lp-item-padding:60px;padding-top:var(--lp-item-padding);padding-bottom:var(--lp-item-padding)}@media(max-width:1024px){.content-item-wrap{width:100%;--lp-item-padding:40px}}.content-item-wrap .course-item-title{margin-top:0;margin-bottom:24px;font-size:calc(var(--lp-font-size-base, 1em) * 1.8);font-weight:700}@media(max-width:767px){.content-item-wrap .course-item-title{text-align:center}}.content-item-wrap .content-item-summary:after{clear:both;content:\"\";display:block}.content-item-wrap .content-item-description{margin-bottom:30px}.content-item-wrap .content-item-description .wp-video,.content-item-wrap .content-item-description .mejs-container{margin-bottom:15px}.content-item-wrap .content-item-description h2,.content-item-wrap .content-item-description h3,.content-item-wrap .content-item-description h4,.content-item-wrap .content-item-description h5,.content-item-wrap .content-item-description h6{margin-top:10px;margin-bottom:15px;letter-spacing:unset}.content-item-wrap .content-item-description img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap #learn-press-quiz-app{margin-bottom:40px}.content-item-wrap .quiz-content{margin-bottom:40px;color:#666;font-weight:300}.content-item-wrap .quiz-content img{max-width:100%;height:auto;vertical-align:middle}.content-item-wrap .quiz-buttons{display:flex;justify-content:center;text-align:center;gap:10px}.content-item-wrap .quiz-buttons .button-right .lp-button{margin:0 15px 0 0}.content-item-wrap .quiz-buttons.align-center{display:block;text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left{text-align:center}.content-item-wrap .quiz-buttons.align-center .button-left.fixed{position:fixed;z-index:999;bottom:0;right:50%;width:100%;max-width:792px;height:auto;margin-right:237px;transform:translateX(50%);background:#fff;padding-bottom:10px}@media(max-width:768px){.content-item-wrap .quiz-buttons.align-center .button-left.fixed{width:100% !important}}.content-item-wrap .quiz-buttons.align-center .button-left.nav-center{height:50px;margin-right:0 !important}.content-item-wrap .quiz-buttons:not(.infinity).is-first .prev{display:none}.content-item-wrap .quiz-buttons:not(.infinity).is-last .next{display:none}.content-item-wrap .questions-pagination .nav-links{text-align:center;display:flex;justify-content:center;gap:4px;margin-top:6px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:10px 15px;margin:0;color:var(--lp-color-base,#333);background-color:transparent;font-weight:normal;border:1px solid var(--lp-border-color,#e2e0db);line-height:1;border-radius:var(--lp-border-radius,5px)}.content-item-wrap .questions-pagination .nav-links .page-numbers.dots{border:0}.content-item-wrap .questions-pagination .nav-links .page-numbers.current,.content-item-wrap .questions-pagination .nav-links .page-numbers:hover{color:var(--lp-primary-color)}@media(max-width:575px){.content-item-wrap .questions-pagination .nav-links{margin-top:10px}.content-item-wrap .questions-pagination .nav-links .page-numbers{padding:5px 10px}}.course-curriculum .section-title{position:relative;margin-bottom:0}.course-curriculum .section-title span.show-desc{display:inline-block;position:absolute;top:50%;left:30px;width:20px;height:20px;transform:translate(0,-50%)}.course-curriculum .section-title span.show-desc::before{font-family:\"lp-icon\";font-size:1.125em;content:\"\\f107\"}.course-curriculum .section-title span.show-desc:hover::before{border-top-color:var(--lp-border-color,#e2e0db)}@media(max-width:575px){#popup-course .quiz-attempts{overflow-x:auto}}.social-share-toggle{position:relative;display:flex;gap:20px}.social-share-toggle .share-toggle-icon{cursor:pointer;display:flex;align-items:center;gap:8px}.social-share-toggle .share-toggle-icon .share-label{margin:0;cursor:pointer}.social-share-toggle .share-toggle-icon:hover{color:var(--lp-primary-color,#ffb606)}.social-share-toggle .content-widget-social-share{padding:20px;background:#fff;box-shadow:0 1px 16px 0 rgba(0,0,0,0.12)}.social-share-toggle .lp-social-media{display:inline-flex;padding:0;gap:12px;margin:0}.social-share-toggle .lp-social-media>li{text-align:center;list-style:none}.social-share-toggle .lp-social-media>li span{display:none}.social-share-toggle .lp-social-media>li i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--lp-border-color,#e2e0db);border-radius:50%}.social-share-toggle .lp-social-media>li i:hover{background-color:var(--lp-primary-color,#ffb606);border-color:var(--lp-primary-color,#ffb606);color:var(--lp-color-white,#fff)}.social-share-toggle .clipboard-post{display:flex;justify-content:space-between;margin-bottom:20px;gap:12px}.social-share-toggle .btn-clipboard{position:relative;padding:12px 20px;white-space:nowrap}.social-share-toggle .btn-clipboard .tooltip{display:none;position:absolute;z-index:2;right:50%;left:auto;bottom:100%;transform:translateX(50%);width:max-content;color:#fff;font-size:.825em;padding:5px 10px;background:rgba(0,0,0,0.72);border-radius:3px;margin-bottom:10px}.social-share-toggle .btn-clipboard .tooltip:before{content:\"\";position:absolute;z-index:2;right:50%;bottom:-5px;margin-right:-3px;border-right:5px solid transparent;border-left:5px solid transparent;border-top:5px solid rgba(0,0,0,0.72)}.social-share-toggle .btn-clipboard:hover{background-color:#eee}.social-share-toggle .btn-clipboard:hover .tooltip{display:block}.social-share-toggle .clipboard-value{border:1px solid var(--lp-border-color,#e2e0db);padding:12px 20px;flex:1}@media(max-width:600px){.social-share-toggle .clipboard-value{width:100%}}.social-share-toggle .wrapper-content-widget{visibility:hidden;text-align:right;opacity:0;-webkit-transition:all .27s ease;-moz-transition:all .27s ease;-o-transition:all .27s ease;transition:all .27s ease;position:absolute;left:0;top:auto;z-index:9;margin-top:20px}.social-share-toggle.social-share-toggle__open .wrapper-content-widget{margin-top:0;visibility:visible;opacity:1}@media(max-width:768px){.social-share-toggle .wrapper-content-widget{position:fixed;top:0;right:0;left:0;bottom:0;background-color:rgba(0,0,0,0.7)}.social-share-toggle .wrapper-content-widget .content-widget-social-share{position:relative;z-index:1;max-width:fit-content;top:50%;min-width:320px;transform:translateY(-50%);margin:0 auto}}.lp-overlay{display:none;position:fixed;z-index:99999;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background-color:rgba(209,213,219,0.8);transition-timing-function:cubic-bezier(0.4,0,0.2,1);transition-duration:150ms;transition-property:opacity}.wp-admin .lp-modal-dialog .lp-modal-header{padding:2em}.wp-admin .lp-modal-dialog .lp-modal-header h3{font-size:1.4em}.lp-modal-dialog{display:flex;position:fixed;z-index:9999;top:0;left:0;right:0;width:100%;min-height:100vh;text-align:center;align-items:center;justify-content:center}.lp-modal-dialog .learn-press-message{width:auto;margin:0 !important}.lp-modal-dialog .lp-modal-content{display:inline-block;overflow:hidden;z-index:2;width:auto;max-width:600px;border-radius:8px;text-align:right;vertical-align:middle;background:white;color:black}.lp-modal-dialog .lp-modal-content h2,.lp-modal-dialog .lp-modal-content h3{margin:0}.lp-modal-dialog .lp-modal-content .lp-group-step h3{border-bottom:1px solid #eee}.lp-modal-dialog .lp-modal-content .main-content .terms-upgrade .pd-2em{padding:0 1em}.lp-modal-dialog .lp-modal-header{background:#7c60d9;border-bottom:1px solid #eee;padding:1em}.lp-modal-dialog .lp-modal-header h3{margin:0;color:white;font-weight:400}.lp-modal-dialog .lp-modal-body .main-content{max-height:500px;overflow:auto;overscroll-behavior:contain}.lp-modal-dialog .lp-modal-body .main-content h3,.lp-modal-dialog .lp-modal-body .main-content h2,.lp-modal-dialog .lp-modal-body .main-content .pd-2em{padding:1em}.lp-modal-dialog .lp-modal-footer{padding:20px;background-color:#f9fafb;text-align:left}.lp-modal-dialog .btn-yes{color:#fff;background-color:#7c60d9}#lp-modal-overlay{display:none;position:fixed;z-index:999999;top:0;left:0;bottom:0;right:0;opacity:.5;background:#000}#lp-modal-window{display:none;position:fixed;z-index:999999;top:50%;right:50%;padding:35px 60px 28px 60px;background:#fff;transform:translate(50%,-50%);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}#lp-modal-window #lp-modal-content{margin:0 0 24px 0;color:#333;font-weight:400;text-align:center}#lp-modal-window #lp-modal-content>*{margin:0 0 .5em}#lp-modal-window #lp-modal-buttons{display:flex;flex-direction:row-reverse;align-items:center;justify-content:center}#lp-modal-window #lp-modal-buttons .lp-button{position:relative;margin:0 10px 0 10px}.learn-press-comments{width:792px;max-width:100%;margin:0 auto}@media(max-width:1024px){.learn-press-comments{width:100%}}@media(min-width:769px){#learn-press-item-comments{padding-bottom:50px}}.learn-press-progress{overflow:hidden;position:relative;width:80px;height:6px;border-radius:3px}.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learn-press-progress .learn-press-progress__active{position:absolute;z-index:1;right:-100%;width:100%;height:100%;border-radius:3px;background:var(--lp-primary-color);-webkit-transition:.5s;-moz-transition:.5s;-ms-transition:.5s;-o-transition:.5s;transition:.5s}.learn-press-progress::before{display:block;position:absolute;z-index:0;top:0;width:100%;height:100%;background:#ccc;content:\"\"}.course-progress__line{width:100%;background:#ccc;height:5px;border-radius:5px;position:relative}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.course-progress__line__active{background:var(--lp-primary-color);height:100%;border-radius:5px;position:absolute;top:0;right:0}.course-progress__line__point{position:absolute;top:0;width:2px;height:100%;background:var(--lp-secondary-color)}.course-curriculum .section-header .section-left{display:flex;align-items:center;gap:16px}.course-curriculum .section-header .section-left .wrapper-section-title{flex:1}.course-curriculum .section-header .section-left .section-toggle{flex:0 0 40px;align-items:center;text-align:center;cursor:pointer;min-width:1em}.course-curriculum .section-header .section-left .section-toggle .fa-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-caret-down,.course-curriculum .section-header .section-left .section-toggle .lp-icon-angle-down{display:none}.course-curriculum .section-header .learn-press-progress{width:80px}.course-curriculum .section.closed .section-toggle .fa-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-caret-down,.course-curriculum .section.closed .section-toggle .lp-icon-angle-down{display:block}.course-curriculum .section.closed .section-toggle .fa-caret-up,.course-curriculum .section.closed .section-toggle .lp-icon-caret-up{display:none}.course-curriculum .section.closed .section-content{overflow:hidden;height:0}.scroll-wrapper{overflow:hidden;opacity:0}.scroll-wrapper .scroll-element{background:transparent}.scroll-wrapper .scroll-element.scroll-y.scroll-scrolly_visible{transition:opacity .25s}.scroll-wrapper:hover .scroll-element.scroll-y.scroll-scrolly_visible{opacity:.7}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-material-skeleton{overflow:auto}.lp-material-skeleton .course-material-table{width:100%}.lp-material-skeleton .course-material-table th{text-align:center}.lp-material-skeleton .course-material-table th:first-child{text-align:right}.lp-material-skeleton .course-material-table tr td:not(:first-child){text-align:center}.lp-material-skeleton .course-material-table tfoot td{text-align:right;font-weight:bold}.lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}#popup-content .lp-material-skeleton .lp-loadmore-material.lp-button{margin-top:20px;padding:12px 24px}.learnpress.theme-twentytwentytwo .wp-site-blocks,.learnpress.twentytwentytwo .wp-site-blocks{max-width:none;padding-left:0;padding-right:0}.learnpress.theme-twentytwentytwo .wp-site-blocks>.wp-block-group,.learnpress.twentytwentytwo .wp-site-blocks>.wp-block-group{max-width:none;margin-left:auto;margin-right:auto}.learnpress.theme-twentytwentytwo .lp-archive-courses,.learnpress.twentytwentytwo .lp-archive-courses{max-width:none}.learnpress.theme-twentytwentytwo .wp-container-11 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-9 .alignfull,.learnpress.theme-twentytwentytwo .wp-container-12 .alignfull,.learnpress.twentytwentytwo .wp-container-11 .alignfull,.learnpress.twentytwentytwo .wp-container-9 .alignfull,.learnpress.twentytwentytwo .wp-container-12 .alignfull{max-width:100%;margin-right:0 !important;margin-left:0 !important;padding-right:0 !important;padding-left:0 !important}.learnpress.twentytwentyone .lp-archive-courses a:focus,.learnpress.theme-twentytwentyone .lp-archive-courses a:focus{background:transparent !important;text-decoration:none !important;outline:none !important}.learnpress.twentytwentyone .pagination,.learnpress.twentytwentyone .comments-pagination,.learnpress.theme-twentytwentyone .pagination,.learnpress.theme-twentytwentyone .comments-pagination{border-top:0;padding-top:0}@media(max-width:1199px){.learnpress.twentytwentytwo .wp-site-blocks .wp-block-template-part,.learnpress.theme-twentytwentyone .wp-site-blocks .wp-block-template-part{padding-right:15px;padding-left:15px}}.learnpress-block-pagination,.learn-press-pagination{margin:20px 0;text-align:center}.learnpress-block-pagination .page-numbers,.learn-press-pagination .page-numbers{display:inline-flex;gap:5px;flex-wrap:wrap;margin:0;padding:0;border:0;outline:0;background:transparent;list-style:none}.learnpress-block-pagination .page-numbers>li,.learn-press-pagination .page-numbers>li{display:inline-block;margin:0}.learnpress-block-pagination .page-numbers>li .page-numbers,.learn-press-pagination .page-numbers>li .page-numbers{float:unset;padding:0 12px;color:#666;text-decoration:none}.learnpress-block-pagination .page-numbers>li .page-numbers.current,.learn-press-pagination .page-numbers>li .page-numbers.current{color:var(--lp-primary-color);font-weight:400}.learnpress-block-pagination .page-numbers>li .page-numbers:hover,.learn-press-pagination .page-numbers>li .page-numbers:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb{max-width:var(--lp-container-max-width);width:100%;margin:0 auto;padding:1em var(--lp-cotainer-padding);list-style:none}ul.learn-press-breadcrumb li{display:inline-block;margin:0}ul.learn-press-breadcrumb li a:hover{color:var(--lp-primary-color)}ul.learn-press-breadcrumb i{margin:0 8px}ul.learn-press-breadcrumb a{color:inherit}.lp-table-wrap{border-radius:5px;width:100%;border:1px solid var(--lp-border-color,#e2e0db);overflow-x:auto}table.lp-list-table{border-collapse:collapse;width:100%;margin:0;min-width:768px}table.lp-list-table td{padding:0}table.lp-list-table .learn-press-pagination{text-align:right}table.lp-list-table thead{background-color:var(--lp-white-grey,#f7f7fb);border:0}table.lp-list-table thead tr{border-bottom:1px solid var(--lp-border-color,#e2e0db)}table.lp-list-table thead th{background:0;border:0;font-size:1em;padding:10px 20px;text-align:right}table.lp-list-table thead th td{border:0;padding:0}table.lp-list-table tbody{font-size:14px}table.lp-list-table tbody tr{border:0;border-bottom:1px solid var(--lp-white-grey,#f7f7fb)}table.lp-list-table tbody tr:nth-child(even) td{background:0}table.lp-list-table tbody tr td{border:0;padding:10px 20px;text-align:right}table.lp-list-table tfoot tr{border:0}table.lp-list-table tfoot tr td{border:0}table.lp-list-table tfoot tr td>div{padding:20px}table.lp-list-table tfoot .pagination{border:0;padding:0}.swal2-container{z-index:99999}.swal2-popup{max-width:850px}.swal2-popup .content-title{margin:0 0 20px 0;padding:0;text-align:center;font-size:1.5em;font-weight:bold}.swal2-popup .swal2-actions{width:100%;padding:0 30px}.swal2-popup .swal2-actions button{flex:1}.swal2-popup .swal2-actions button.swal2-confirm{background-color:#e02200}.swal2-popup .swal2-actions button.swal2-cancel{background-color:transparent;border:1px solid #ccc;color:inherit}.swal2-popup .swal2-warning{color:#e02200;border-color:transparent;background-color:rgba(223,0,0,0.1019607843)}.swal2-popup .swal2-icon{width:50px;height:50px}.swal2-popup .swal2-icon .swal2-icon-content{font-size:0}.swal2-popup .swal2-icon .swal2-icon-content::before{content:\"\\f071\";font-family:\"lp-icon\";font-size:24px;display:inline-block}.swal2-popup .swal2-title{font-size:1.5em}.swal2-popup .swal2-html-container{font-size:1em}.swal2-popup .lp-tom-select.ts-wrapper .ts-dropdown{max-height:200px;overflow:hidden}.swal2-popup .swal2-close{background-color:unset !important;outline:none !important;color:#ccc !important}.swal2-popup .swal2-close:hover{color:#f27474 !important}@media(max-width:1024px){body.learnpress-page{--lp-cotainer-padding:1rem}}footer{clear:both}.margin-bottom{margin-bottom:20px}.hide-if-js{display:none !important}.clearfix::after{display:block;clear:both;content:\"\"}.lp-form-fields{margin:0;padding:0;list-style:none}.lp-form-fields .form-field{margin:0 0 20px 0;list-style:none}.lp-entry-content .course-tabs{margin-bottom:40px}form.retake-course,form.enroll-course,form.purchase-course{display:inline-flex;flex-direction:column;gap:10px}.table-orders th,.table-orders td{padding:5px 10px}.form-button{display:inline-block}ul.list-table-nav{display:flex;margin-right:0;list-style:none}ul.list-table-nav .nav-text{text-align:right;flex:1}ul.list-table-nav .nav-pages{text-align:left;flex:1}ul.list-table-nav .nav-pages .learn-press-pagination{display:inline-block;margin-bottom:0}.primary-color{color:var(--lp-primary-color)}.primary-color-before::before{color:var(--lp-primary-color)}.primary-color-after::after{color:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.primary-background-color{background:var(--lp-primary-color)}.course-origin-price{margin-left:5px;font-size:85%;text-decoration:line-through}.content-item-wrap #comments{margin-left:0;margin-right:0}.content-item-wrap #comments #comment{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.course-tabs input[name=learn-press-course-tab-radio],.course-tabs .course-tab-panel{display:none}.no-event{pointer-events:none}@media screen and (max-width:768px){ul.learn-press-courses .course{width:48%}}@media screen and (max-width:600px){ul.learn-press-courses .course{width:100%;margin-left:0}}.course-price:empty{display:none !important}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -60,7 +60,7 @@\n \n @font-face {\n   font-family: \"lp-icon\";\n-  src: url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=44\") format(\"woff2\");\n+  src: url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=79\") format(\"woff2\");\n   font-weight: normal;\n   font-style: normal;\n   font-display: swap;\n@@ -861,6 +861,21 @@\n   background-repeat: no-repeat;\n }\n \n+.lp-icon-course-builder {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+\n .lp-skeleton-animation {\n   margin: 0;\n   padding: 0;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@font-face{font-family:\"lp-icon\";src:url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=44\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.lp-form-course-filter__title{font-weight:500;margin-bottom:12px}.lp-form-course-filter__content{position:relative}.lp-form-course-filter__content .lp-course-filter__field *{cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter__field input[disabled]{cursor:not-allowed}.lp-form-course-filter__content .lp-course-filter__field label{margin:0;text-transform:capitalize;line-height:inherit;flex:1}.lp-form-course-filter__content .lp-course-filter__field .count{color:#999}.lp-form-course-filter__content .lp-course-filter-search-field{position:relative;display:flex;align-items:center}.lp-form-course-filter__content .lp-course-filter-search-field input{width:100%;line-height:2rem;border:1px solid #eee;padding:8px}.lp-form-course-filter__content .lp-course-filter-search-field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter-search-field .lp-loading-circle{position:absolute;right:10px}.lp-form-course-filter__content .lp-course-filter-search-result{position:absolute;z-index:10;background:white;width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;padding:0}.lp-form-course-filter__content .lp-course-filter-search-result:empty{border:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list{padding:0 10px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest{display:flex;gap:8px;padding:10px 0;align-items:center;border-bottom:1px solid #f5f5f5}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest:last-child{border-bottom:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img{width:50px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img img{width:50px;height:auto;display:block}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a{font-size:.875em;line-height:1em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a span{font-size:.875em;line-height:1em}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-info{border-top:1px solid #eee;padding:10px;background:#e8f0fe;font-weight:500;display:flex;justify-content:space-between}.lp-form-course-filter .course-filter-submit,.lp-form-course-filter .course-filter-reset{padding:12px 24px;text-transform:capitalize;width:calc(50% - 4px);border:1px solid #ccc;border-radius:4px;background-color:var(--lp-button-background-color);color:var(--lp-button-color)}.lp-form-course-filter .course-filter-submit:focus,.lp-form-course-filter .course-filter-reset:focus{outline:0}.lp-form-course-filter .course-filter-submit:hover,.lp-form-course-filter .course-filter-reset:hover{color:#fff;background:var(--lp-primary-color)}.lp-form-course-filter .course-filter-reset{margin-left:4px}.lp-form-course-filter .course-filter-submit{margin-right:4px}.lp-form-course-filter .lp-form-course-filter__item{margin-bottom:12px;border-bottom:1px solid #ccc;padding-bottom:12px}.lp-form-course-filter .lp-form-course-filter__item .lp-cate-parent .lp-cate-child{margin-left:1rem}#learn-press-become-teacher-form .become-teacher-fields{list-style:none;padding:0}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:none}.elementor-widget-container .learnpress-widget-wrapper{position:unset}@media(max-width:768px){.widget_course_filter{position:fixed !important;right:0;top:0;bottom:0;z-index:999999;width:400px;height:100%;background-color:#fff;transition:.3s;display:block;overflow-y:auto;border:none !important;border-radius:0 !important;transform:translate3d(100%,0,0);margin:0;opacity:0;visibility:hidden;padding:20px}.widget_course_filter .lp-form-block-course-filter .course-filter-submit,.widget_course_filter .lp-form-course-filter .course-filter-submit{width:100%;margin:0}.widget_course_filter .lp-form-block-course-filter .course-filter-reset,.widget_course_filter .lp-form-course-filter .course-filter-reset{width:100%;margin:12px 0 0 0}.widget_course_filter .widget-title{display:flex;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.show-lp-course-filter-mobile{overflow:hidden}.show-lp-course-filter-mobile .widget_course_filter{transform:none;opacity:1;visibility:visible}.show-lp-course-filter-mobile .lp-archive-courses-sidebar::after{position:fixed;top:0;right:0;width:100%;height:100%;background:rgba(0,0,0,0.9);content:\"\";-webkit-transition:opacity .5s,width .1s .5s,height .1s .5s;transition:opacity .5s,width .1s .5s,height .1s .5s;z-index:99999}.show-lp-course-filter-mobile .learnpress-widget-wrapper{position:unset}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:flex;position:absolute;right:0;top:20px;left:auto;align-items:center;justify-content:center;gap:4px;padding:0 20px}.lp-form-course-filter__close i,.elementor-widget-container .lp-form-course-filter__close i{font-size:1rem}}@media(max-width:500px){.widget_course_filter{width:100%;left:0;right:0;box-sizing:border-box}}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media(min-width:1024px){body.theme-divi{--lp-cotainer-padding:0}}.learnpress.widget{margin-bottom:30px}.learnpress.widget h3{margin-bottom:20px}.learnpress.widget a{text-decoration:none}.learnpress-widget-wrapper{margin-top:16px;position:relative}.learnpress-widget-wrapper .lp-widget-loading-change{display:none;position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0;z-index:10}.learnpress-widget-wrapper .lp-widget-course{margin:0 0 30px 0;border:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__image img{height:auto;width:100%;display:block}.learnpress-widget-wrapper .lp-widget-course__title{margin-bottom:20px;font-size:1em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__content{margin:0;padding:16px;border-top:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__title{margin:4px 0 16px 0}.learnpress-widget-wrapper .lp-widget-course__meta{display:grid;margin:16px 0 0 0;grid-template-columns:repeat(2,1fr);justify-content:space-between;align-items:center;gap:24px}.learnpress-widget-wrapper .lp-widget-course__meta .course-price{margin-bottom:0}.learnpress-widget-wrapper .lp-widget-course__meta .course-price .course-item-price{display:flex;flex-direction:column}.learnpress-widget-wrapper .lp-widget-course__description{color:#666;font-size:.875em}.learnpress-widget-wrapper .lp-widget-course__price{color:#444;font-size:.875em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__instructor{display:flex;align-items:center}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar{margin-right:5px}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar img{width:20px;border-radius:20px;height:20px;display:block}.learnpress-widget-wrapper .lp-widget-course__instructor>a{color:#777;font-size:.875em}.learnpress.widget_course_progress .lp_widget_course_progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp_widget_course_progress{margin:0;padding:20px;border:1px solid #eee}.learnpress.widget_course_progress .course-results-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress{margin-top:10px;font-size:.8em}.learnpress.widget_course_progress .course-results-progress .items-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress{display:flex;margin-bottom:7px;justify-content:space-between;align-items:center}.learnpress.widget_course_progress .course-results-progress .items-progress__heading,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress__heading{font-weight:400}.learnpress.widget_course_progress .lp-course-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress{width:100%}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress{position:relative}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.lp_widget_course_info{margin:0;padding:20px;border:1px solid var(--lp-border-color,#e2e0db)}.lp_widget_course_info h3{margin-bottom:15px}.lp_widget_course_info ul{margin:0;padding:0}.lp_widget_course_info ul li{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.lp_widget_course_info ul label{font-size:var(--lp-font-size-base,1em);margin:0}.lp-widget-course-extra{margin:0}.lp-widget-course-extra h3{margin-bottom:20px;font-size:var(--lp-font-size-base,1em)}.lp-widget-course-extra__content h4.course-extras__title{margin:0;margin-bottom:15px;font-size:var(--lp-font-size-base,1em);font-weight:600}.lp-widget-course-extra__content ul{margin:0;padding:0}.lp-widget-course-extra__content ul li{margin-bottom:10px}.lp-widget-course-extra__content .course-extras{display:block}.lp-widget-course-extra__content .course-extras .course-extras__content ul{list-style:none}.lp-widget-course-extra__content .course-extras .course-extras__content ol{list-style-position:inside}.lp-widget-course-extra__content .course-extras .course-extras__content ul li,.lp-widget-course-extra__content .course-extras .course-extras__content ol li{position:relative;border:0}.lp-widget-course-extra__content .course-extras.style-checks ul li,.lp-widget-course-extra__content .course-extras.style-checks ol li{padding-left:20px}.lp-widget-course-extra__content .course-extras.style-checks ul li::before,.lp-widget-course-extra__content .course-extras.style-checks ol li::before{display:inline-block;position:absolute;top:50%;left:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-right:0;content:\"\";transform:rotate(-54deg) translateY(-50%)}.lp-widget-course-extra__content .course-extras.style-radios ul li,.lp-widget-course-extra__content .course-extras.style-radios ol li{padding-left:20px}.lp-widget-course-extra__content .course-extras.style-radios ul li::before,.lp-widget-course-extra__content .course-extras.style-radios ol li::before{display:inline-block;position:absolute;top:50%;left:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-right:0;content:\"\";transform:rotate(-54deg) translateY(-50%)}.learnpress.widget_course_featured .lp-widget-featured-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_popular .lp-widget-popular-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_recent .lp-widget-recent-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link::before{content:\"←\"}.learnpress-widget-wrapper__restapi .lp-skeleton-animation{min-width:250px}.learnpress-widget-wrapper__restapi ul{padding:0}\n\\ No newline at end of file\n+@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}@keyframes animation4{from{left:-40%;width:40%}to{left:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@font-face{font-family:\"lp-icon\";src:url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=79\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-icon-course-builder{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.lp-form-course-filter__title{font-weight:500;margin-bottom:12px}.lp-form-course-filter__content{position:relative}.lp-form-course-filter__content .lp-course-filter__field *{cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter__field input[disabled]{cursor:not-allowed}.lp-form-course-filter__content .lp-course-filter__field label{margin:0;text-transform:capitalize;line-height:inherit;flex:1}.lp-form-course-filter__content .lp-course-filter__field .count{color:#999}.lp-form-course-filter__content .lp-course-filter-search-field{position:relative;display:flex;align-items:center}.lp-form-course-filter__content .lp-course-filter-search-field input{width:100%;line-height:2rem;border:1px solid #eee;padding:8px}.lp-form-course-filter__content .lp-course-filter-search-field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter-search-field .lp-loading-circle{position:absolute;right:10px}.lp-form-course-filter__content .lp-course-filter-search-result{position:absolute;z-index:10;background:white;width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;padding:0}.lp-form-course-filter__content .lp-course-filter-search-result:empty{border:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list{padding:0 10px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest{display:flex;gap:8px;padding:10px 0;align-items:center;border-bottom:1px solid #f5f5f5}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest:last-child{border-bottom:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img{width:50px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img img{width:50px;height:auto;display:block}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a{font-size:.875em;line-height:1em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a span{font-size:.875em;line-height:1em}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-info{border-top:1px solid #eee;padding:10px;background:#e8f0fe;font-weight:500;display:flex;justify-content:space-between}.lp-form-course-filter .course-filter-submit,.lp-form-course-filter .course-filter-reset{padding:12px 24px;text-transform:capitalize;width:calc(50% - 4px);border:1px solid #ccc;border-radius:4px;background-color:var(--lp-button-background-color);color:var(--lp-button-color)}.lp-form-course-filter .course-filter-submit:focus,.lp-form-course-filter .course-filter-reset:focus{outline:0}.lp-form-course-filter .course-filter-submit:hover,.lp-form-course-filter .course-filter-reset:hover{color:#fff;background:var(--lp-primary-color)}.lp-form-course-filter .course-filter-reset{margin-left:4px}.lp-form-course-filter .course-filter-submit{margin-right:4px}.lp-form-course-filter .lp-form-course-filter__item{margin-bottom:12px;border-bottom:1px solid #ccc;padding-bottom:12px}.lp-form-course-filter .lp-form-course-filter__item .lp-cate-parent .lp-cate-child{margin-left:1rem}#learn-press-become-teacher-form .become-teacher-fields{list-style:none;padding:0}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:none}.elementor-widget-container .learnpress-widget-wrapper{position:unset}@media(max-width:768px){.widget_course_filter{position:fixed !important;right:0;top:0;bottom:0;z-index:999999;width:400px;height:100%;background-color:#fff;transition:.3s;display:block;overflow-y:auto;border:none !important;border-radius:0 !important;transform:translate3d(100%,0,0);margin:0;opacity:0;visibility:hidden;padding:20px}.widget_course_filter .lp-form-block-course-filter .course-filter-submit,.widget_course_filter .lp-form-course-filter .course-filter-submit{width:100%;margin:0}.widget_course_filter .lp-form-block-course-filter .course-filter-reset,.widget_course_filter .lp-form-course-filter .course-filter-reset{width:100%;margin:12px 0 0 0}.widget_course_filter .widget-title{display:flex;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.show-lp-course-filter-mobile{overflow:hidden}.show-lp-course-filter-mobile .widget_course_filter{transform:none;opacity:1;visibility:visible}.show-lp-course-filter-mobile .lp-archive-courses-sidebar::after{position:fixed;top:0;right:0;width:100%;height:100%;background:rgba(0,0,0,0.9);content:\"\";-webkit-transition:opacity .5s,width .1s .5s,height .1s .5s;transition:opacity .5s,width .1s .5s,height .1s .5s;z-index:99999}.show-lp-course-filter-mobile .learnpress-widget-wrapper{position:unset}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:flex;position:absolute;right:0;top:20px;left:auto;align-items:center;justify-content:center;gap:4px;padding:0 20px}.lp-form-course-filter__close i,.elementor-widget-container .lp-form-course-filter__close i{font-size:1rem}}@media(max-width:500px){.widget_course_filter{width:100%;left:0;right:0;box-sizing:border-box}}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media(min-width:1024px){body.theme-divi{--lp-cotainer-padding:0}}.learnpress.widget{margin-bottom:30px}.learnpress.widget h3{margin-bottom:20px}.learnpress.widget a{text-decoration:none}.learnpress-widget-wrapper{margin-top:16px;position:relative}.learnpress-widget-wrapper .lp-widget-loading-change{display:none;position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0;z-index:10}.learnpress-widget-wrapper .lp-widget-course{margin:0 0 30px 0;border:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__image img{height:auto;width:100%;display:block}.learnpress-widget-wrapper .lp-widget-course__title{margin-bottom:20px;font-size:1em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__content{margin:0;padding:16px;border-top:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__title{margin:4px 0 16px 0}.learnpress-widget-wrapper .lp-widget-course__meta{display:grid;margin:16px 0 0 0;grid-template-columns:repeat(2,1fr);justify-content:space-between;align-items:center;gap:24px}.learnpress-widget-wrapper .lp-widget-course__meta .course-price{margin-bottom:0}.learnpress-widget-wrapper .lp-widget-course__meta .course-price .course-item-price{display:flex;flex-direction:column}.learnpress-widget-wrapper .lp-widget-course__description{color:#666;font-size:.875em}.learnpress-widget-wrapper .lp-widget-course__price{color:#444;font-size:.875em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__instructor{display:flex;align-items:center}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar{margin-right:5px}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar img{width:20px;border-radius:20px;height:20px;display:block}.learnpress-widget-wrapper .lp-widget-course__instructor>a{color:#777;font-size:.875em}.learnpress.widget_course_progress .lp_widget_course_progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp_widget_course_progress{margin:0;padding:20px;border:1px solid #eee}.learnpress.widget_course_progress .course-results-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress{margin-top:10px;font-size:.8em}.learnpress.widget_course_progress .course-results-progress .items-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress{display:flex;margin-bottom:7px;justify-content:space-between;align-items:center}.learnpress.widget_course_progress .course-results-progress .items-progress__heading,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress__heading{font-weight:400}.learnpress.widget_course_progress .lp-course-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress{width:100%}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress{position:relative}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active{position:absolute;left:50%;width:100%;height:100%;margin-left:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-left:-1px;background:var(--lp-secondary-color)}.lp_widget_course_info{margin:0;padding:20px;border:1px solid var(--lp-border-color,#e2e0db)}.lp_widget_course_info h3{margin-bottom:15px}.lp_widget_course_info ul{margin:0;padding:0}.lp_widget_course_info ul li{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.lp_widget_course_info ul label{font-size:var(--lp-font-size-base,1em);margin:0}.lp-widget-course-extra{margin:0}.lp-widget-course-extra h3{margin-bottom:20px;font-size:var(--lp-font-size-base,1em)}.lp-widget-course-extra__content h4.course-extras__title{margin:0;margin-bottom:15px;font-size:var(--lp-font-size-base,1em);font-weight:600}.lp-widget-course-extra__content ul{margin:0;padding:0}.lp-widget-course-extra__content ul li{margin-bottom:10px}.lp-widget-course-extra__content .course-extras{display:block}.lp-widget-course-extra__content .course-extras .course-extras__content ul{list-style:none}.lp-widget-course-extra__content .course-extras .course-extras__content ol{list-style-position:inside}.lp-widget-course-extra__content .course-extras .course-extras__content ul li,.lp-widget-course-extra__content .course-extras .course-extras__content ol li{position:relative;border:0}.lp-widget-course-extra__content .course-extras.style-checks ul li,.lp-widget-course-extra__content .course-extras.style-checks ol li{padding-left:20px}.lp-widget-course-extra__content .course-extras.style-checks ul li::before,.lp-widget-course-extra__content .course-extras.style-checks ol li::before{display:inline-block;position:absolute;top:50%;left:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-right:0;content:\"\";transform:rotate(-54deg) translateY(-50%)}.lp-widget-course-extra__content .course-extras.style-radios ul li,.lp-widget-course-extra__content .course-extras.style-radios ol li{padding-left:20px}.lp-widget-course-extra__content .course-extras.style-radios ul li::before,.lp-widget-course-extra__content .course-extras.style-radios ol li::before{display:inline-block;position:absolute;top:50%;left:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-right:0;content:\"\";transform:rotate(-54deg) translateY(-50%)}.learnpress.widget_course_featured .lp-widget-featured-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_popular .lp-widget-popular-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_recent .lp-widget-recent-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link::before{content:\"←\"}.learnpress-widget-wrapper__restapi .lp-skeleton-animation{min-width:250px}.learnpress-widget-wrapper__restapi ul{padding:0}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets-rtl.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets-rtl.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets-rtl.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets-rtl.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -60,7 +60,7 @@\n \n @font-face {\n   font-family: \"lp-icon\";\n-  src: url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=44\") format(\"woff2\");\n+  src: url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=79\") format(\"woff2\");\n   font-weight: normal;\n   font-style: normal;\n   font-display: swap;\n@@ -861,6 +861,21 @@\n   background-repeat: no-repeat;\n }\n \n+.lp-icon-course-builder {\n+  display: inline-block;\n+  width: 18px;\n+  height: 18px;\n+  background-color: currentColor;\n+  -webkit-mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  mask-image: url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");\n+  -webkit-mask-size: contain;\n+  mask-size: contain;\n+  -webkit-mask-repeat: no-repeat;\n+  mask-repeat: no-repeat;\n+  -webkit-mask-position: center;\n+  mask-position: center;\n+}\n+\n .lp-skeleton-animation {\n   margin: 0;\n   padding: 0;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets-rtl.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets-rtl.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fcss\u002Fwidgets-rtl.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fcss\u002Fwidgets-rtl.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@font-face{font-family:\"lp-icon\";src:url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=44\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}.lp-form-course-filter__title{font-weight:500;margin-bottom:12px}.lp-form-course-filter__content{position:relative}.lp-form-course-filter__content .lp-course-filter__field *{cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter__field input[disabled]{cursor:not-allowed}.lp-form-course-filter__content .lp-course-filter__field label{margin:0;text-transform:capitalize;line-height:inherit;flex:1}.lp-form-course-filter__content .lp-course-filter__field .count{color:#999}.lp-form-course-filter__content .lp-course-filter-search-field{position:relative;display:flex;align-items:center}.lp-form-course-filter__content .lp-course-filter-search-field input{width:100%;line-height:2rem;border:1px solid #eee;padding:8px}.lp-form-course-filter__content .lp-course-filter-search-field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter-search-field .lp-loading-circle{position:absolute;left:10px}.lp-form-course-filter__content .lp-course-filter-search-result{position:absolute;z-index:10;background:white;width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;padding:0}.lp-form-course-filter__content .lp-course-filter-search-result:empty{border:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list{padding:0 10px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest{display:flex;gap:8px;padding:10px 0;align-items:center;border-bottom:1px solid #f5f5f5}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest:last-child{border-bottom:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img{width:50px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img img{width:50px;height:auto;display:block}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a{font-size:.875em;line-height:1em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a span{font-size:.875em;line-height:1em}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-info{border-top:1px solid #eee;padding:10px;background:#e8f0fe;font-weight:500;display:flex;justify-content:space-between}.lp-form-course-filter .course-filter-submit,.lp-form-course-filter .course-filter-reset{padding:12px 24px;text-transform:capitalize;width:calc(50% - 4px);border:1px solid #ccc;border-radius:4px;background-color:var(--lp-button-background-color);color:var(--lp-button-color)}.lp-form-course-filter .course-filter-submit:focus,.lp-form-course-filter .course-filter-reset:focus{outline:0}.lp-form-course-filter .course-filter-submit:hover,.lp-form-course-filter .course-filter-reset:hover{color:#fff;background:var(--lp-primary-color)}.lp-form-course-filter .course-filter-reset{margin-right:4px}.lp-form-course-filter .course-filter-submit{margin-left:4px}.lp-form-course-filter .lp-form-course-filter__item{margin-bottom:12px;border-bottom:1px solid #ccc;padding-bottom:12px}.lp-form-course-filter .lp-form-course-filter__item .lp-cate-parent .lp-cate-child{margin-right:1rem}#learn-press-become-teacher-form .become-teacher-fields{list-style:none;padding:0}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:none}.elementor-widget-container .learnpress-widget-wrapper{position:unset}@media(max-width:768px){.widget_course_filter{position:fixed !important;left:0;top:0;bottom:0;z-index:999999;width:400px;height:100%;background-color:#fff;transition:.3s;display:block;overflow-y:auto;border:none !important;border-radius:0 !important;transform:translate3d(-100%,0,0);margin:0;opacity:0;visibility:hidden;padding:20px}.widget_course_filter .lp-form-block-course-filter .course-filter-submit,.widget_course_filter .lp-form-course-filter .course-filter-submit{width:100%;margin:0}.widget_course_filter .lp-form-block-course-filter .course-filter-reset,.widget_course_filter .lp-form-course-filter .course-filter-reset{width:100%;margin:12px 0 0 0}.widget_course_filter .widget-title{display:flex;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.show-lp-course-filter-mobile{overflow:hidden}.show-lp-course-filter-mobile .widget_course_filter{transform:none;opacity:1;visibility:visible}.show-lp-course-filter-mobile .lp-archive-courses-sidebar::after{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);content:\"\";-webkit-transition:opacity .5s,width .1s .5s,height .1s .5s;transition:opacity .5s,width .1s .5s,height .1s .5s;z-index:99999}.show-lp-course-filter-mobile .learnpress-widget-wrapper{position:unset}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:flex;position:absolute;left:0;top:20px;right:auto;align-items:center;justify-content:center;gap:4px;padding:0 20px}.lp-form-course-filter__close i,.elementor-widget-container .lp-form-course-filter__close i{font-size:1rem}}@media(max-width:500px){.widget_course_filter{width:100%;right:0;left:0;box-sizing:border-box}}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media(min-width:1024px){body.theme-divi{--lp-cotainer-padding:0}}.learnpress.widget{margin-bottom:30px}.learnpress.widget h3{margin-bottom:20px}.learnpress.widget a{text-decoration:none}.learnpress-widget-wrapper{margin-top:16px;position:relative}.learnpress-widget-wrapper .lp-widget-loading-change{display:none;position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0;z-index:10}.learnpress-widget-wrapper .lp-widget-course{margin:0 0 30px 0;border:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__image img{height:auto;width:100%;display:block}.learnpress-widget-wrapper .lp-widget-course__title{margin-bottom:20px;font-size:1em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__content{margin:0;padding:16px;border-top:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__title{margin:4px 0 16px 0}.learnpress-widget-wrapper .lp-widget-course__meta{display:grid;margin:16px 0 0 0;grid-template-columns:repeat(2,1fr);justify-content:space-between;align-items:center;gap:24px}.learnpress-widget-wrapper .lp-widget-course__meta .course-price{margin-bottom:0}.learnpress-widget-wrapper .lp-widget-course__meta .course-price .course-item-price{display:flex;flex-direction:column}.learnpress-widget-wrapper .lp-widget-course__description{color:#666;font-size:.875em}.learnpress-widget-wrapper .lp-widget-course__price{color:#444;font-size:.875em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__instructor{display:flex;align-items:center}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar{margin-left:5px}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar img{width:20px;border-radius:20px;height:20px;display:block}.learnpress-widget-wrapper .lp-widget-course__instructor>a{color:#777;font-size:.875em}.learnpress.widget_course_progress .lp_widget_course_progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp_widget_course_progress{margin:0;padding:20px;border:1px solid #eee}.learnpress.widget_course_progress .course-results-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress{margin-top:10px;font-size:.8em}.learnpress.widget_course_progress .course-results-progress .items-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress{display:flex;margin-bottom:7px;justify-content:space-between;align-items:center}.learnpress.widget_course_progress .course-results-progress .items-progress__heading,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress__heading{font-weight:400}.learnpress.widget_course_progress .lp-course-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress{width:100%}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress{position:relative}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.lp_widget_course_info{margin:0;padding:20px;border:1px solid var(--lp-border-color,#e2e0db)}.lp_widget_course_info h3{margin-bottom:15px}.lp_widget_course_info ul{margin:0;padding:0}.lp_widget_course_info ul li{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.lp_widget_course_info ul label{font-size:var(--lp-font-size-base,1em);margin:0}.lp-widget-course-extra{margin:0}.lp-widget-course-extra h3{margin-bottom:20px;font-size:var(--lp-font-size-base,1em)}.lp-widget-course-extra__content h4.course-extras__title{margin:0;margin-bottom:15px;font-size:var(--lp-font-size-base,1em);font-weight:600}.lp-widget-course-extra__content ul{margin:0;padding:0}.lp-widget-course-extra__content ul li{margin-bottom:10px}.lp-widget-course-extra__content .course-extras{display:block}.lp-widget-course-extra__content .course-extras .course-extras__content ul{list-style:none}.lp-widget-course-extra__content .course-extras .course-extras__content ol{list-style-position:inside}.lp-widget-course-extra__content .course-extras .course-extras__content ul li,.lp-widget-course-extra__content .course-extras .course-extras__content ol li{position:relative;border:0}.lp-widget-course-extra__content .course-extras.style-checks ul li,.lp-widget-course-extra__content .course-extras.style-checks ol li{padding-right:20px}.lp-widget-course-extra__content .course-extras.style-checks ul li::before,.lp-widget-course-extra__content .course-extras.style-checks ol li::before{display:inline-block;position:absolute;top:50%;right:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-left:0;content:\"\";transform:rotate(54deg) translateY(-50%)}.lp-widget-course-extra__content .course-extras.style-radios ul li,.lp-widget-course-extra__content .course-extras.style-radios ol li{padding-right:20px}.lp-widget-course-extra__content .course-extras.style-radios ul li::before,.lp-widget-course-extra__content .course-extras.style-radios ol li::before{display:inline-block;position:absolute;top:50%;right:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-left:0;content:\"\";transform:rotate(54deg) translateY(-50%)}.learnpress.widget_course_featured .lp-widget-featured-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_popular .lp-widget-popular-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_recent .lp-widget-recent-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link::before{content:\"←\"}.learnpress-widget-wrapper__restapi .lp-skeleton-animation{min-width:250px}.learnpress-widget-wrapper__restapi ul{padding:0}\n\\ No newline at end of file\n+@charset \"UTF-8\";@-webkit-keyframes rotating4{from{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating4{from{-ms-transform:rotate(0);-moz-transform:rotate(0);-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-ms-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}@keyframes animation4{from{right:-40%;width:40%}to{right:100%;width:10%}}:root{--lp-cotainer-max-with:var(--lp-container-max-width)}.wp-block-group{--lp-container-max-width:var(--wp--style--global--wide-size)}@font-face{font-family:\"lp-icon\";src:url(\"..\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Flp-icon\u002Flp-icon.woff2?v=79\") format(\"woff2\");font-weight:normal;font-style:normal;font-display:swap}[class^=lp-icon-],[class*=\" lp-icon-\"]{font-family:\"lp-icon\";speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;font-display:swap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lp-icon-plus:before{content:\"\\f067\"}.lp-icon-question:before{content:\"\\f128\"}.lp-icon-minus:before{content:\"\\f068\"}.lp-icon-search:before{content:\"\\f002\"}.lp-icon-envelope-o:before{content:\"\\f003\"}.lp-icon-heart:before{content:\"\\f004\"}.lp-icon-star:before{content:\"\\f005\"}.lp-icon-star-o:before{content:\"\\f006\"}.lp-icon-user:before{content:\"\\f007\"}.lp-icon-th-large:before{content:\"\\f009\"}.lp-icon-th:before{content:\"\\f00a\"}.lp-icon-th-list:before{content:\"\\f00b\"}.lp-icon-check:before{content:\"\\f00c\"}.lp-icon-close:before{content:\"\\f00d\"}.lp-icon-remove:before{content:\"\\f00d\"}.lp-icon-times:before{content:\"\\f00d\"}.lp-icon-signal:before{content:\"\\f012\"}.lp-icon-cog:before{content:\"\\f013\"}.lp-icon-gear:before{content:\"\\f013\"}.lp-icon-trash-o:before{content:\"\\f014\"}.lp-icon-home:before{content:\"\\f015\"}.lp-icon-file-o:before{content:\"\\f016\"}.lp-icon-clock-o:before{content:\"\\f017\"}.lp-icon-download:before{content:\"\\f019\"}.lp-icon-play-circle-o:before{content:\"\\f01d\"}.lp-icon-refresh:before{content:\"\\f021\"}.lp-icon-lock:before{content:\"\\f023\"}.lp-icon-flag:before{content:\"\\f024\"}.lp-icon-book:before{content:\"\\f02d\"}.lp-icon-bookmark:before{content:\"\\f02e\"}.lp-icon-video-camera:before{content:\"\\f03d\"}.lp-icon-edit:before{content:\"\\f044\"}.lp-icon-pencil-square-o:before{content:\"\\f044\"}.lp-icon-check-square-o:before{content:\"\\f046\"}.lp-icon-arrows:before{content:\"\\f047\"}.lp-icon-chevron-left:before{content:\"\\f053\"}.lp-icon-chevron-right:before{content:\"\\f054\"}.lp-icon-check-circle:before{content:\"\\f058\"}.lp-icon-question-circle:before{content:\"\\f059\"}.lp-icon-arrow-left:before{content:\"\\f060\"}.lp-icon-arrow-right:before{content:\"\\f061\"}.lp-icon-expand:before{content:\"\\f065\"}.lp-icon-compress:before{content:\"\\f066\"}.lp-icon-exclamation-circle:before{content:\"\\f06a\"}.lp-icon-gift:before{content:\"\\f06b\"}.lp-icon-eye:before{content:\"\\f06e\"}.lp-icon-eye-slash:before{content:\"\\f070\"}.lp-icon-exclamation-triangle:before{content:\"\\f071\"}.lp-icon-warning:before{content:\"\\f071\"}.lp-icon-calendar:before{content:\"\\f073\"}.lp-icon-comment:before{content:\"\\f075\"}.lp-icon-chevron-up:before{content:\"\\f077\"}.lp-icon-chevron-down:before{content:\"\\f078\"}.lp-icon-shopping-cart:before{content:\"\\f07a\"}.lp-icon-bar-chart:before{content:\"\\f080\"}.lp-icon-bar-chart-o:before{content:\"\\f080\"}.lp-icon-key:before{content:\"\\f084\"}.lp-icon-cogs:before{content:\"\\f085\"}.lp-icon-gears:before{content:\"\\f085\"}.lp-icon-thumbs-o-up:before{content:\"\\f087\"}.lp-icon-thumbs-o-down:before{content:\"\\f088\"}.lp-icon-heart-o:before{content:\"\\f08a\"}.lp-icon-sign-out:before{content:\"\\f08b\"}.lp-icon-linkedin-square:before{content:\"\\f08c\"}.lp-icon-sign-in:before{content:\"\\f090\"}.lp-icon-phone:before{content:\"\\f095\"}.lp-icon-square-o:before{content:\"\\f096\"}.lp-icon-bookmark-o:before{content:\"\\f097\"}.lp-icon-twitter:before{content:\"\\f099\"}.lp-icon-facebook:before{content:\"\\f09a\"}.lp-icon-facebook-f:before{content:\"\\f09a\"}.lp-icon-unlock:before{content:\"\\f09c\"}.lp-icon-bullhorn:before{content:\"\\f0a1\"}.lp-icon-bell-o:before{content:\"\\f0a2\"}.lp-icon-certificate:before{content:\"\\f0a3\"}.lp-icon-briefcase:before{content:\"\\f0b1\"}.lp-icon-arrows-alt:before{content:\"\\f0b2\"}.lp-icon-copy:before{content:\"\\f0c5\"}.lp-icon-files-o:before{content:\"\\f0c5\"}.lp-icon-pinterest-square:before{content:\"\\f0d3\"}.lp-icon-google-plus-square:before{content:\"\\f0d4\"}.lp-icon-google-plus:before{content:\"\\f0d5\"}.lp-icon-money-bill-alt:before{content:\"\\f0d6\"}.lp-icon-caret-down:before{content:\"\\f0d7\"}.lp-icon-caret-up:before{content:\"\\f0d8\"}.lp-icon-caret-left:before{content:\"\\f0d9\"}.lp-icon-caret-right:before{content:\"\\f0da\"}.lp-icon-linkedin:before{content:\"\\f0e1\"}.lp-icon-comment-o:before{content:\"\\f0e5\"}.lp-icon-file-text-o:before{content:\"\\f0f6\"}.lp-icon-angle-double-left:before{content:\"\\f100\"}.lp-icon-angle-double-right:before{content:\"\\f101\"}.lp-icon-angle-double-up:before{content:\"\\f102\"}.lp-icon-angle-double-down:before{content:\"\\f103\"}.lp-icon-angle-left:before{content:\"\\f104\"}.lp-icon-angle-right:before{content:\"\\f105\"}.lp-icon-angle-up:before{content:\"\\f106\"}.lp-icon-angle-down:before{content:\"\\f107\"}.lp-icon-desktop:before{content:\"\\f108\"}.lp-icon-mobile:before{content:\"\\f10b\"}.lp-icon-mobile-phone:before{content:\"\\f10b\"}.lp-icon-circle-o:before{content:\"\\f10c\"}.lp-icon-spinner:before{content:\"\\f110\"}.lp-icon-code:before{content:\"\\f121\"}.lp-icon-puzzle-piece:before{content:\"\\f12e\"}.lp-icon-calendar-o:before{content:\"\\f133\"}.lp-icon-ellipsis-h:before{content:\"\\f141\"}.lp-icon-ellipsis-v:before{content:\"\\f142\"}.lp-icon-file:before{content:\"\\f15b\"}.lp-icon-file-alt:before{content:\"\\f15c\"}.lp-icon-youtube-play:before{content:\"\\f16a\"}.lp-icon-instagram:before{content:\"\\f16d\"}.lp-icon-dot-circle-o:before{content:\"\\f192\"}.lp-icon-graduation-cap:before{content:\"\\f19d\"}.lp-icon-mortar-board:before{content:\"\\f19d\"}.lp-icon-google:before{content:\"\\f1a0\"}.lp-icon-language:before{content:\"\\f1ab\"}.lp-icon-database:before{content:\"\\f1c0\"}.lp-icon-file-pdf:before{content:\"\\f1c1\"}.lp-icon-file-word:before{content:\"\\f1c2\"}.lp-icon-file-excel:before{content:\"\\f1c3\"}.lp-icon-file-powerpoint:before{content:\"\\f1c4\"}.lp-icon-file-image:before{content:\"\\f1c5\"}.lp-icon-file-photo:before{content:\"\\f1c5\"}.lp-icon-file-picture:before{content:\"\\f1c5\"}.lp-icon-file-archive:before{content:\"\\f1c6\"}.lp-icon-file-zip:before{content:\"\\f1c6\"}.lp-icon-file-audio:before{content:\"\\f1c7\"}.lp-icon-file-sound:before{content:\"\\f1c7\"}.lp-icon-file-movie:before{content:\"\\f1c8\"}.lp-icon-file-video:before{content:\"\\f1c8\"}.lp-icon-file-code:before{content:\"\\f1c9\"}.lp-icon-circle-thin:before{content:\"\\f1db\"}.lp-icon-share-alt:before{content:\"\\f1e0\"}.lp-icon-pie-chart:before{content:\"\\f200\"}.lp-icon-line-chart:before{content:\"\\f201\"}.lp-icon-user-secret:before{content:\"\\f21b\"}.lp-icon-television:before{content:\"\\f26c\"}.lp-icon-tv:before{content:\"\\f26c\"}.lp-icon-question-circle-o:before{content:\"\\f29c\"}.lp-icon-google-plus-circle:before{content:\"\\f2b3\"}.lp-icon-google-plus-official:before{content:\"\\f2b3\"}.lp-icon-user-circle:before{content:\"\\f2bd\"}.lp-icon-user-graduate:before{content:\"\\f501\"}.lp-icon-user-edit:before{content:\"\\f4ff\"}.lp-icon-my-courses:before{content:\"\\e900\"}.lp-icon-clock:before{content:\"\\e901\"}.lp-icon-stopwatch:before{content:\"\\f2f2\"}.lp-icon-file-download:before{content:\"\\f56d\"}.lp-icon-list:before{content:\"\\f03a\"}.lp-icon-students:before{content:\"\\e902\"}.lp-icon-courses:before{content:\"\\e903\"}.lp-icon-tiktok-alt:before{content:\"\\e908\"}.lp-icon-alarm-clock:before{content:\"\\e909\"}.lp-icon-art-and-design:before{content:\"\\e90a\"}.lp-icon-best-customer-experience:before{content:\"\\e90b\"}.lp-icon-certificate-o:before{content:\"\\e90c\"}.lp-icon-community:before{content:\"\\e90d\"}.lp-icon-online-education:before{content:\"\\e90e\"}.lp-icon-concierge-bell:before{content:\"\\e90f\"}.lp-icon-target:before{content:\"\\e910\"}.lp-icon-content-marketing:before{content:\"\\e911\"}.lp-icon-dollar-sign:before{content:\"\\e912\"}.lp-icon-website:before{content:\"\\e913\"}.lp-icon-worldwide-security:before{content:\"\\e914\"}.lp-icon-educational-programs:before{content:\"\\e915\"}.lp-icon-online-class:before{content:\"\\e916\"}.lp-icon-monitor:before{content:\"\\e917\"}.lp-icon-lucide:before{content:\"\\e918\"}.lp-icon-ebook:before{content:\"\\e919\"}.lp-icon-co-instructor:before{content:\"\\e904\"}.lp-icon-close-circle:before{content:\"\\e907\"}.lp-icon-layers:before{content:\"\\e91a\"}.lp-icon-filter:before{content:\"\\e91c\"}.lp-icon-in_progress_course:before{content:\"\\e91d\"}.lp-icon-finished_courses:before{content:\"\\e91e\"}.lp-icon-failed_courses:before{content:\"\\e91f\"}.lp-icon-passed_courses:before{content:\"\\e920\"}.lp-icon-student_in_progress:before{content:\"\\e924\"}.lp-icon-student_completed:before{content:\"\\e925\"}.lp-icon-published_course:before{content:\"\\e926\"}.lp-icon-pending_course:before{content:\"\\e927\"}.lp-icon-list-check:before{content:\"\\e929\"}.lp-icon-icon-h5p:before{content:\"\\e92a\"}.lp-icon-comment-written:before{content:\"\\e921\"}.lp-icon-book-open:before{content:\"\\f518\"}.lp-icon-pinterest-p:before{content:\"\\f231\"}.lp-icon-dropbox:before{content:\"\\e905\"}.lp-icon-edit-square:before{content:\"\\e923\"}.lp-icon-drag:before{content:\"\\e922\"}.lp-icon-map-pin:before{content:\"\\e91b\"}.lp-icon-map-marker:before{content:\"\\e91b\"}.lp-icon-box:before{content:\"\\e906\"}.lp-ico-ai{display:inline-block;width:13px;height:13px;background-image:url(\"..\u002F..\u002Fimages\u002Ficons\u002Fico-ai.svg\");background-size:contain;background-repeat:no-repeat}.lp-icon-course-builder{display:inline-block;width:18px;height:18px;background-color:currentColor;-webkit-mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");mask-image:url(\"data:image\u002Fsvg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'%3E%3Cpath d='M21.6422 16.0228C21.7413 16.1947 21.7682 16.3988 21.717 16.5905C21.6659 16.7822 21.5409 16.9458 21.3694 17.0456L12.3694 22.2956C12.2547 22.3624 12.1243 22.3977 11.9916 22.3977C11.8588 22.3977 11.7284 22.3624 11.6138 22.2956L2.61376 17.0456C2.44472 16.944 2.3225 16.7799 2.27354 16.5889C2.22459 16.3978 2.25284 16.1952 2.3522 16.0249C2.45155 15.8545 2.614 15.7301 2.80438 15.6787C2.99476 15.6272 3.19774 15.6528 3.36938 15.7499L11.9983 20.5004L20.6194 15.7499C20.7913 15.6509 20.9954 15.624 21.1871 15.6751C21.3788 15.7262 21.5425 15.8512 21.6422 16.0228ZM20.6194 11.2499L11.9916 16.0228L3.36938 11.2499C3.19861 11.1649 3.00186 11.1482 2.81917 11.2031C2.63648 11.258 2.48159 11.3805 2.38602 11.5456C2.29044 11.7107 2.26138 11.906 2.30473 12.0918C2.34809 12.2776 2.46061 12.4398 2.61938 12.5456L11.6194 17.7956C11.7341 17.8624 11.8644 17.8977 11.9972 17.8977C12.13 17.8977 12.2603 17.8624 12.375 17.7956L21.375 12.5456C21.4615 12.4967 21.5373 12.4311 21.5982 12.3526C21.6591 12.2741 21.7038 12.1844 21.7297 12.0885C21.7556 11.9926 21.7622 11.8925 21.7492 11.7941C21.7361 11.6956 21.7036 11.6007 21.6536 11.515C21.6035 11.4292 21.5369 11.3542 21.4577 11.2943C21.3784 11.2344 21.2881 11.1909 21.1919 11.1663C21.0957 11.1416 20.9955 11.1363 20.8972 11.1507C20.799 11.165 20.7045 11.1988 20.6194 11.2499ZM2.24438 7.39775C2.24468 7.26639 2.27948 7.13741 2.34529 7.02372C2.4111 6.91003 2.50562 6.81562 2.61938 6.74994L11.6194 1.49994C11.7341 1.43306 11.8644 1.39783 11.9972 1.39783C12.13 1.39783 12.2603 1.43306 12.375 1.49994L21.375 6.74994C21.4882 6.81599 21.5822 6.91056 21.6474 7.02423C21.7127 7.13789 21.7471 7.26668 21.7471 7.39775C21.7471 7.52883 21.7127 7.65762 21.6474 7.77128C21.5822 7.88494 21.4882 7.97951 21.375 8.04557L12.375 13.2956C12.2603 13.3624 12.13 13.3977 11.9972 13.3977C11.8644 13.3977 11.7341 13.3624 11.6194 13.2956L2.61938 8.04557C2.50562 7.97988 2.4111 7.88547 2.34529 7.77178C2.27948 7.6581 2.24468 7.52912 2.24438 7.39775ZM4.99439 7.39783L11.9944 11.5456L18.9944 7.39783L11.9944 3.39783L4.99439 7.39783Z' fill='black'\u002F%3E%3C\u002Fsvg%3E\");-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center}.lp-skeleton-animation{margin:0;padding:0;list-style:none}.lp-skeleton-animation>li{width:100%;height:16px;margin-top:15px;border-radius:2px;background:linear-gradient(-90deg,hsla(0,0%,74.5%,0.2) 25%,hsla(0,0%,50.6%,0.24) 37%,hsla(0,0%,74.5%,0.2) 63%);background-size:400% 100%;list-style:none;animation:lp-skeleton-loading 1.4s ease infinite}@keyframes lp-skeleton-loading{0%{background-position:0 50%}to{background-position:100% 50%}}.lp-loading-circle{width:15px;height:15px;border:2px solid #ccc;border-radius:50%;border-top-color:rgba(0,0,0,0.76);animation:spin 1s infinite linear;display:inline-block}.lp-loading-circle.hide{display:none}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(-360deg)}}.lp-form-course-filter__title{font-weight:500;margin-bottom:12px}.lp-form-course-filter__content{position:relative}.lp-form-course-filter__content .lp-course-filter__field *{cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field{position:relative;display:flex;align-items:center;gap:10px;cursor:pointer}.lp-form-course-filter__content .lp-course-filter__field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter__field input[disabled]{cursor:not-allowed}.lp-form-course-filter__content .lp-course-filter__field label{margin:0;text-transform:capitalize;line-height:inherit;flex:1}.lp-form-course-filter__content .lp-course-filter__field .count{color:#999}.lp-form-course-filter__content .lp-course-filter-search-field{position:relative;display:flex;align-items:center}.lp-form-course-filter__content .lp-course-filter-search-field input{width:100%;line-height:2rem;border:1px solid #eee;padding:8px}.lp-form-course-filter__content .lp-course-filter-search-field input:focus{outline:0}.lp-form-course-filter__content .lp-course-filter-search-field .lp-loading-circle{position:absolute;left:10px}.lp-form-course-filter__content .lp-course-filter-search-result{position:absolute;z-index:10;background:white;width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;padding:0}.lp-form-course-filter__content .lp-course-filter-search-result:empty{border:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list{padding:0 10px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest{display:flex;gap:8px;padding:10px 0;align-items:center;border-bottom:1px solid #f5f5f5}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .item-course-suggest:last-child{border-bottom:0}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img{width:50px}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list .course-img img{width:50px;height:auto;display:block}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a{font-size:.875em;line-height:1em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-list a span{font-size:.875em;line-height:1em}.lp-form-course-filter__content .lp-course-filter-search-result .lp-courses-suggest-info{border-top:1px solid #eee;padding:10px;background:#e8f0fe;font-weight:500;display:flex;justify-content:space-between}.lp-form-course-filter .course-filter-submit,.lp-form-course-filter .course-filter-reset{padding:12px 24px;text-transform:capitalize;width:calc(50% - 4px);border:1px solid #ccc;border-radius:4px;background-color:var(--lp-button-background-color);color:var(--lp-button-color)}.lp-form-course-filter .course-filter-submit:focus,.lp-form-course-filter .course-filter-reset:focus{outline:0}.lp-form-course-filter .course-filter-submit:hover,.lp-form-course-filter .course-filter-reset:hover{color:#fff;background:var(--lp-primary-color)}.lp-form-course-filter .course-filter-reset{margin-right:4px}.lp-form-course-filter .course-filter-submit{margin-left:4px}.lp-form-course-filter .lp-form-course-filter__item{margin-bottom:12px;border-bottom:1px solid #ccc;padding-bottom:12px}.lp-form-course-filter .lp-form-course-filter__item .lp-cate-parent .lp-cate-child{margin-right:1rem}#learn-press-become-teacher-form .become-teacher-fields{list-style:none;padding:0}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:none}.elementor-widget-container .learnpress-widget-wrapper{position:unset}@media(max-width:768px){.widget_course_filter{position:fixed !important;left:0;top:0;bottom:0;z-index:999999;width:400px;height:100%;background-color:#fff;transition:.3s;display:block;overflow-y:auto;border:none !important;border-radius:0 !important;transform:translate3d(-100%,0,0);margin:0;opacity:0;visibility:hidden;padding:20px}.widget_course_filter .lp-form-block-course-filter .course-filter-submit,.widget_course_filter .lp-form-course-filter .course-filter-submit{width:100%;margin:0}.widget_course_filter .lp-form-block-course-filter .course-filter-reset,.widget_course_filter .lp-form-course-filter .course-filter-reset{width:100%;margin:12px 0 0 0}.widget_course_filter .widget-title{display:flex;gap:16px;align-items:center;font-size:calc(var(--lp-font-size-base, 1em) * 1.25)}.show-lp-course-filter-mobile{overflow:hidden}.show-lp-course-filter-mobile .widget_course_filter{transform:none;opacity:1;visibility:visible}.show-lp-course-filter-mobile .lp-archive-courses-sidebar::after{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);content:\"\";-webkit-transition:opacity .5s,width .1s .5s,height .1s .5s;transition:opacity .5s,width .1s .5s,height .1s .5s;z-index:99999}.show-lp-course-filter-mobile .learnpress-widget-wrapper{position:unset}.lp-form-course-filter__close,.elementor-widget-container .lp-form-course-filter__close{display:flex;position:absolute;left:0;top:20px;right:auto;align-items:center;justify-content:center;gap:4px;padding:0 20px}.lp-form-course-filter__close i,.elementor-widget-container .lp-form-course-filter__close i{font-size:1rem}}@media(max-width:500px){.widget_course_filter{width:100%;right:0;left:0;box-sizing:border-box}}@keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes lp-rotating{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);-moz-transform:rotate(-360deg);-ms-transform:rotate(-360deg);-o-transform:rotate(-360deg);transform:rotate(-360deg)}}.lp-loading-change{position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0}.lp-load-ajax-element{position:relative}@media(min-width:1024px){body.theme-divi{--lp-cotainer-padding:0}}.learnpress.widget{margin-bottom:30px}.learnpress.widget h3{margin-bottom:20px}.learnpress.widget a{text-decoration:none}.learnpress-widget-wrapper{margin-top:16px;position:relative}.learnpress-widget-wrapper .lp-widget-loading-change{display:none;position:absolute;width:100%;height:100%;background:rgba(255,255,255,0.38);top:0;z-index:10}.learnpress-widget-wrapper .lp-widget-course{margin:0 0 30px 0;border:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__image img{height:auto;width:100%;display:block}.learnpress-widget-wrapper .lp-widget-course__title{margin-bottom:20px;font-size:1em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__content{margin:0;padding:16px;border-top:1px solid #eee}.learnpress-widget-wrapper .lp-widget-course__title{margin:4px 0 16px 0}.learnpress-widget-wrapper .lp-widget-course__meta{display:grid;margin:16px 0 0 0;grid-template-columns:repeat(2,1fr);justify-content:space-between;align-items:center;gap:24px}.learnpress-widget-wrapper .lp-widget-course__meta .course-price{margin-bottom:0}.learnpress-widget-wrapper .lp-widget-course__meta .course-price .course-item-price{display:flex;flex-direction:column}.learnpress-widget-wrapper .lp-widget-course__description{color:#666;font-size:.875em}.learnpress-widget-wrapper .lp-widget-course__price{color:#444;font-size:.875em;font-weight:600}.learnpress-widget-wrapper .lp-widget-course__instructor{display:flex;align-items:center}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar{margin-left:5px}.learnpress-widget-wrapper .lp-widget-course__instructor__avatar img{width:20px;border-radius:20px;height:20px;display:block}.learnpress-widget-wrapper .lp-widget-course__instructor>a{color:#777;font-size:.875em}.learnpress.widget_course_progress .lp_widget_course_progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp_widget_course_progress{margin:0;padding:20px;border:1px solid #eee}.learnpress.widget_course_progress .course-results-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress{margin-top:10px;font-size:.8em}.learnpress.widget_course_progress .course-results-progress .items-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress{display:flex;margin-bottom:7px;justify-content:space-between;align-items:center}.learnpress.widget_course_progress .course-results-progress .items-progress__heading,.elementor-widget-wp-widget-learnpress_widget_course_progress .course-results-progress .items-progress__heading{font-weight:400}.learnpress.widget_course_progress .lp-course-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress{width:100%}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress{position:relative}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg{overflow:hidden;position:relative;height:6px;background:#ccc;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .progress-bg .progress-active{position:absolute;right:50%;width:100%;height:100%;margin-right:-100%;background:var(--lp-primary-color);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.learnpress.widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional,.elementor-widget-wp-widget-learnpress_widget_course_progress .lp-course-progress.learn-press-progress .lp-passing-conditional{position:absolute;top:0;width:3px;height:6px;margin-right:-1px;background:var(--lp-secondary-color)}.lp_widget_course_info{margin:0;padding:20px;border:1px solid var(--lp-border-color,#e2e0db)}.lp_widget_course_info h3{margin-bottom:15px}.lp_widget_course_info ul{margin:0;padding:0}.lp_widget_course_info ul li{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}.lp_widget_course_info ul label{font-size:var(--lp-font-size-base,1em);margin:0}.lp-widget-course-extra{margin:0}.lp-widget-course-extra h3{margin-bottom:20px;font-size:var(--lp-font-size-base,1em)}.lp-widget-course-extra__content h4.course-extras__title{margin:0;margin-bottom:15px;font-size:var(--lp-font-size-base,1em);font-weight:600}.lp-widget-course-extra__content ul{margin:0;padding:0}.lp-widget-course-extra__content ul li{margin-bottom:10px}.lp-widget-course-extra__content .course-extras{display:block}.lp-widget-course-extra__content .course-extras .course-extras__content ul{list-style:none}.lp-widget-course-extra__content .course-extras .course-extras__content ol{list-style-position:inside}.lp-widget-course-extra__content .course-extras .course-extras__content ul li,.lp-widget-course-extra__content .course-extras .course-extras__content ol li{position:relative;border:0}.lp-widget-course-extra__content .course-extras.style-checks ul li,.lp-widget-course-extra__content .course-extras.style-checks ol li{padding-right:20px}.lp-widget-course-extra__content .course-extras.style-checks ul li::before,.lp-widget-course-extra__content .course-extras.style-checks ol li::before{display:inline-block;position:absolute;top:50%;right:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-left:0;content:\"\";transform:rotate(54deg) translateY(-50%)}.lp-widget-course-extra__content .course-extras.style-radios ul li,.lp-widget-course-extra__content .course-extras.style-radios ol li{padding-right:20px}.lp-widget-course-extra__content .course-extras.style-radios ul li::before,.lp-widget-course-extra__content .course-extras.style-radios ol li::before{display:inline-block;position:absolute;top:50%;right:0;width:12px;height:7px;border:2px solid #8794b9;border-top:0;border-left:0;content:\"\";transform:rotate(54deg) translateY(-50%)}.learnpress.widget_course_featured .lp-widget-featured-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_featured .lp-widget-featured-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_featured .lp-widget-featured-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_popular .lp-widget-popular-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_popular .lp-widget-popular-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_popular .lp-widget-popular-courses__footer__link::before{content:\"←\"}.learnpress.widget_course_recent .lp-widget-recent-courses__footer,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer{margin-top:20px;padding-top:10px;border-top:1px solid #eee}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link{font-size:1rem;line-height:1}.learnpress.widget_course_recent .lp-widget-recent-courses__footer__link::before,.elementor-widget-wp-widget-learnpress_widget_course_recent .lp-widget-recent-courses__footer__link::before{content:\"←\"}.learnpress-widget-wrapper__restapi .lp-skeleton-animation{min-width:250px}.learnpress-widget-wrapper__restapi ul{padding:0}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fcss\u002Finstructor.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fcss\u002Finstructor.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fcss\u002Finstructor.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fcss\u002Finstructor.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,662 +1,662 @@\n-\u002F**\r\n-* Style for instructor page\r\n-*\u002F\r\n-\u002F**\r\n-* Styles for all page of LP\r\n-*\r\n-* @since 4.2.3\r\n-* @version 1.0.0\r\n-*\u002F\r\n-\u002F**\r\n- * Mixin\r\n- *\u002F\r\n-@-webkit-keyframes rotating4 {\r\n-  from {\r\n-    -webkit-transform: rotate(0deg);\r\n-    -o-transform: rotate(0deg);\r\n-    transform: rotate(0deg);\r\n-  }\r\n-  to {\r\n-    -webkit-transform: rotate(360deg);\r\n-    -o-transform: rotate(360deg);\r\n-    transform: rotate(360deg);\r\n-  }\r\n-}\r\n-@keyframes rotating4 {\r\n-  from {\r\n-    -ms-transform: rotate(0deg);\r\n-    -moz-transform: rotate(0deg);\r\n-    -webkit-transform: rotate(0deg);\r\n-    -o-transform: rotate(0deg);\r\n-    transform: rotate(0deg);\r\n-  }\r\n-  to {\r\n-    -ms-transform: rotate(360deg);\r\n-    -moz-transform: rotate(360deg);\r\n-    -webkit-transform: rotate(360deg);\r\n-    -o-transform: rotate(360deg);\r\n-    transform: rotate(360deg);\r\n-  }\r\n-}\r\n-@-webkit-keyframes animation4 {\r\n-  from {\r\n-    left: -40%;\r\n-    width: 40%;\r\n-  }\r\n-  to {\r\n-    left: 100%;\r\n-    width: 10%;\r\n-  }\r\n-}\r\n-@keyframes animation4 {\r\n-  from {\r\n-    left: -40%;\r\n-    width: 40%;\r\n-  }\r\n-  to {\r\n-    left: 100%;\r\n-    width: 10%;\r\n-  }\r\n-}\r\n-:root {\r\n-  --lp-cotainer-max-with: var(--lp-container-max-width);\r\n-}\r\n-\r\n-.wp-block-group {\r\n-  --lp-container-max-width: var(--wp--style--global--wide-size);\r\n-}\r\n-\r\n-* {\r\n-  box-sizing: border-box;\r\n-  margin: 0;\r\n-  padding: 0;\r\n-}\r\n-\r\n-\u002F*  start reset css *\u002F\r\n-body {\r\n-  background: #fff;\r\n-}\r\n-body.learnpress-page {\r\n-  overflow-x: hidden;\r\n-}\r\n-\r\n-button {\r\n-  cursor: pointer;\r\n-}\r\n-\r\n-input, button, select, textarea {\r\n-  outline: none;\r\n-}\r\n-\r\n-\u002F*html {\r\n-\toverflow-x: hidden;\r\n-}*\u002F\r\n-a {\r\n-  -webkit-transition: 0.3s;\r\n-  -moz-transition: 0.3s;\r\n-  -ms-transition: 0.3s;\r\n-  -o-transition: 0.3s;\r\n-  transition: 0.3s;\r\n-  text-decoration: none;\r\n-}\r\n-\r\n-p {\r\n-  margin-bottom: 1em;\r\n-}\r\n-p:last-child {\r\n-  margin: 0;\r\n-}\r\n-\r\n-.lp-content-area {\r\n-  max-width: var(--lp-container-max-width) !important;\r\n-  margin: 0 auto;\r\n-  padding-right: var(--lp-cotainer-padding);\r\n-  padding-left: var(--lp-cotainer-padding);\r\n-}\r\n-.lp-content-area.learn-press-message {\r\n-  margin-bottom: 24px;\r\n-  padding-left: 15px;\r\n-  padding-right: 15px;\r\n-}\r\n-\r\n-.lp-ico svg {\r\n-  width: 20px;\r\n-  height: 20px;\r\n-}\r\n-\r\n-.lp-button {\r\n-  border: 1px solid var(--lp-border-color, #E2E0DB);\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  padding: 8px 16px;\r\n-}\r\n-.lp-button.loading {\r\n-  pointer-events: none;\r\n-  opacity: 0.8;\r\n-}\r\n-.lp-button.loading:before {\r\n-  display: inline-block;\r\n-  font-family: \"lp-icon\";\r\n-  content: \"\\f110\";\r\n-  animation: lp-rotating 1s linear infinite;\r\n-  margin-right: 5px;\r\n-  font-variant: normal;\r\n-  text-transform: none;\r\n-  line-height: 1;\r\n-  -webkit-font-smoothing: antialiased;\r\n-  -moz-osx-font-smoothing: grayscale;\r\n-  vertical-align: middle;\r\n-  margin-top: -2px;\r\n-}\r\n-\r\n-.lp-hidden {\r\n-  display: none !important;\r\n-}\r\n-\r\n-\u002F**\r\n-* Style for single instructor page\r\n-*\r\n-* @since 4.2.3\r\n-* @version 1.0.0\r\n-*\u002F\r\n-\u002F**\r\n- * Style for user cover amd avatar image.\r\n- * @since 4.2.7.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-.lp-user-cover-image_background {\r\n-  position: relative;\r\n-}\r\n-.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image {\r\n-  opacity: 1;\r\n-  visibility: visible;\r\n-}\r\n-.lp-user-cover-image_background .lp-btn-to-edit-cover-image {\r\n-  position: absolute;\r\n-  bottom: 0;\r\n-  right: 0;\r\n-  background: var(--lp-white-grey, #F7F7FB);\r\n-  padding: 12px 20px;\r\n-  border-radius: var(--lp-border-radius, 5px) 0 var(--lp-border-radius, 5px) 0;\r\n-  text-transform: capitalize;\r\n-  cursor: pointer;\r\n-  color: var(--lp-primary-color);\r\n-  text-decoration: none;\r\n-  opacity: 0;\r\n-  visibility: hidden;\r\n-}\r\n-@media (max-width: 767px) {\r\n-  .lp-user-cover-image_background .lp-btn-to-edit-cover-image {\r\n-    font-size: 0;\r\n-    padding: 4px 12px;\r\n-    opacity: 1;\r\n-    visibility: visible;\r\n-  }\r\n-  .lp-user-cover-image_background .lp-btn-to-edit-cover-image:before {\r\n-    font-family: \"lp-icon\";\r\n-    content: \"\\f044\";\r\n-    font-size: 16px;\r\n-  }\r\n-}\r\n-\r\n-.lp-user-cover-image__display {\r\n-  width: 100%;\r\n-}\r\n-@media (max-width: 767px) {\r\n-  .lp-user-cover-image {\r\n-    position: relative;\r\n-    z-index: 1;\r\n-  }\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty {\r\n-  display: flex;\r\n-  align-items: center;\r\n-  width: 100%;\r\n-  height: 250px;\r\n-  border: 2px dashed var(--lp-border-color, #E2E0DB);\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  cursor: pointer;\r\n-  position: relative;\r\n-  text-align: center;\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty:hover {\r\n-  border-color: var(--lp-primary-color);\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty input[type=file] {\r\n-  position: absolute;\r\n-  top: 0;\r\n-  left: 0;\r\n-  width: 100%;\r\n-  height: 100%;\r\n-  opacity: 0;\r\n-  cursor: pointer;\r\n-  z-index: 10;\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info {\r\n-  z-index: 1;\r\n-  flex: 1;\r\n-  position: relative;\r\n-  padding: 0 16px;\r\n-  line-height: 1.3;\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top {\r\n-  font-weight: 600;\r\n-  display: flex;\r\n-  align-items: center;\r\n-  gap: 8px;\r\n-  margin-bottom: 8px;\r\n-  flex-direction: column;\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image {\r\n-  font-size: 32px;\r\n-  transform: rotate(-90deg);\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before {\r\n-  color: var(--lp-primary-color);\r\n-  content: \"\\f08b\";\r\n-}\r\n-.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom {\r\n-  opacity: 0.7;\r\n-}\r\n-@media (max-width: 420px) {\r\n-  .lp-user-cover-image .lp-cover-image-empty {\r\n-    height: 200px;\r\n-  }\r\n-  .lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info {\r\n-    padding: 0 8px;\r\n-    font-size: 15px;\r\n-  }\r\n-}\r\n-.lp-user-cover-image .lp-user-cover-image__buttons {\r\n-  display: inline-flex;\r\n-  gap: 12px;\r\n-  margin-top: 16px;\r\n-}\r\n-\r\n-.lp-user-cover-image_background {\r\n-  background-repeat: no-repeat;\r\n-  background-position: center;\r\n-  background-size: cover;\r\n-  margin-bottom: 20px;\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  min-height: 100px;\r\n-}\r\n-.lp-user-cover-image_background > img {\r\n-  opacity: 0;\r\n-  visibility: hidden;\r\n-}\r\n-\r\n-.learnpress_avatar__form label {\r\n-  display: inline-block;\r\n-}\r\n-.learnpress_avatar__form input[type=file] {\r\n-  display: none;\r\n-}\r\n-.learnpress_avatar__form__upload {\r\n-  display: flex;\r\n-  width: 200px;\r\n-  height: 200px;\r\n-  border: 1px dashed var(--lp-border-color, #E2E0DB);\r\n-  border-radius: 3px;\r\n-  background-color: #fafafa;\r\n-  font-size: 0.875em;\r\n-  font-weight: 300;\r\n-  font-style: italic;\r\n-  line-height: 2.6875em;\r\n-  text-align: center;\r\n-  cursor: pointer;\r\n-  align-items: center;\r\n-  justify-content: center;\r\n-}\r\n-.learnpress_avatar__form__upload div {\r\n-  line-height: 1.4;\r\n-}\r\n-.learnpress_avatar__button--loading:before {\r\n-  display: inline-block;\r\n-  font-family: \"lp-icon\";\r\n-  content: \"\\f110\";\r\n-  animation: lp-rotating 1s linear infinite;\r\n-  margin-right: 5px;\r\n-  font-variant: normal;\r\n-  text-transform: none;\r\n-  line-height: 1;\r\n-  -webkit-font-smoothing: antialiased;\r\n-  -moz-osx-font-smoothing: grayscale;\r\n-  vertical-align: middle;\r\n-  margin-top: -2px;\r\n-}\r\n-\r\n-button.learnpress_avatar__button {\r\n-  height: 40px;\r\n-  padding: 0 15px;\r\n-  border: 0;\r\n-  background: var(--lp-primary-color);\r\n-  color: white;\r\n-  margin-top: 15px;\r\n-  border-radius: 3px;\r\n-}\r\n-button.learnpress_avatar__button + button {\r\n-  margin-left: 15px;\r\n-  margin-right: 0;\r\n-}\r\n-\r\n-body .entry-content.has-global-padding {\r\n-  padding-left: 0;\r\n-  padding-right: 0;\r\n-}\r\n-body .wp-site-blocks {\r\n-  padding-left: 0;\r\n-  padding-right: 0;\r\n-}\r\n-\r\n-.learnpress-v4 .lp-content-area {\r\n-  --lp-container-max-width: inherit;\r\n-  --lp-cotainer-padding: 0;\r\n-}\r\n-\r\n-.lp-single-instructor {\r\n-  --lp-instructor-item-padding: 13px;\r\n-  --lp-instructor-border-color: #c3c4c7;\r\n-  --lp-instructor-minmax-column: 250px;\r\n-}\r\n-.lp-single-instructor h1 {\r\n-  font-size: 1.8em;\r\n-  font-weight: bold;\r\n-  margin-bottom: var(--lp-instructor-item-padding);\r\n-}\r\n-.lp-single-instructor h2 {\r\n-  font-size: 1.4em;\r\n-  font-weight: bold;\r\n-}\r\n-.lp-single-instructor .wrapper-instructor-total-courses, .lp-single-instructor .wrapper-instructor-total-students {\r\n-  display: flex;\r\n-  align-items: center;\r\n-  gap: 5px;\r\n-}\r\n-.lp-single-instructor__info {\r\n-  margin-bottom: 40px;\r\n-}\r\n-.lp-single-instructor__info__wrapper {\r\n-  display: flex;\r\n-  gap: 24px;\r\n-}\r\n-.lp-single-instructor__info .instructor-avatar img {\r\n-  max-width: 120px;\r\n-  border-radius: 50%;\r\n-  height: auto;\r\n-}\r\n-@media (max-width: 767px) {\r\n-  .lp-single-instructor__info .instructor-avatar img {\r\n-    max-width: 100px;\r\n-  }\r\n-}\r\n-.lp-single-instructor__info__right {\r\n-  flex: 1;\r\n-  display: flex;\r\n-  flex-direction: column;\r\n-  gap: 8px;\r\n-}\r\n-.lp-single-instructor__info__right__content {\r\n-  display: flex;\r\n-  align-items: center;\r\n-  justify-content: space-between;\r\n-  column-gap: 20px;\r\n-  row-gap: 8px;\r\n-  flex-wrap: wrap;\r\n-}\r\n-.lp-single-instructor__info__right .instructor-description:empty {\r\n-  margin: 0;\r\n-}\r\n-.lp-single-instructor__info__right .instructor-social {\r\n-  display: flex;\r\n-  gap: 12px;\r\n-  font-size: calc(var(--lp-font-size-base, 1em) * 0.925);\r\n-}\r\n-.lp-single-instructor__info__right .instructor-social:empty {\r\n-  margin: 0;\r\n-}\r\n-.lp-single-instructor__info__right .instructor-social i {\r\n-  width: 40px;\r\n-  height: 40px;\r\n-  display: inline-flex;\r\n-  align-items: center;\r\n-  justify-content: center;\r\n-  border: 1px solid var(--lp-border-color, #E2E0DB);\r\n-  border-radius: 50%;\r\n-}\r\n-.lp-single-instructor__info__right .instructor-social i:hover {\r\n-  background-color: var(--lp-primary-color);\r\n-  border-color: var(--lp-primary-color);\r\n-  color: var(--lp-color-white, #fff);\r\n-}\r\n-.lp-single-instructor__info__right .lp-instructor-meta {\r\n-  display: flex;\r\n-  column-gap: 20px;\r\n-  row-gap: 8px;\r\n-}\r\n-.lp-single-instructor__info__right .lp-instructor-meta .instructor-item-meta {\r\n-  display: inline-flex;\r\n-  gap: 8px;\r\n-  align-items: center;\r\n-}\r\n-.lp-single-instructor__info__right .lp-instructor-meta .instructor-item-meta i {\r\n-  color: var(--lp-primary-color);\r\n-}\r\n-@media (max-width: 991px) {\r\n-  .lp-single-instructor__info__right {\r\n-    flex-wrap: wrap;\r\n-  }\r\n-  .lp-single-instructor__info__right .instructor-description {\r\n-    display: none;\r\n-  }\r\n-  .lp-single-instructor__info__right .lp-instructor-meta {\r\n-    flex-wrap: wrap;\r\n-  }\r\n-}\r\n-@media (max-width: 600px) {\r\n-  .lp-single-instructor__info {\r\n-    display: block;\r\n-  }\r\n-  .lp-single-instructor__info .instructor-avatar {\r\n-    margin-right: 0;\r\n-    margin-bottom: 20px;\r\n-  }\r\n-  .lp-single-instructor__info .instructor-social {\r\n-    gap: 3%;\r\n-  }\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses {\r\n-  display: grid;\r\n-  gap: 30px;\r\n-  padding: 0 !important;\r\n-  margin: 0 0 30px 0;\r\n-  list-style: none;\r\n-  grid-template-columns: repeat(auto-fill, minmax(var(--lp-instructor-minmax-column), 1fr));\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses li {\r\n-  list-style: none;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses a:hover {\r\n-  color: var(--lp-primary-color);\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-item {\r\n-  border: 1px solid var(--lp-border-color, #E2E0DB);\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-item:hover {\r\n-  box-shadow: 0 15px 20px 0 rgba(0, 0, 0, 0.2);\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-content {\r\n-  padding: 20px;\r\n-  flex-grow: 1;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-content .course-info {\r\n-  flex-direction: column;\r\n-  align-items: flex-start;\r\n-  gap: 12px;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-content .course-info .course-readmore {\r\n-  width: 100%;\r\n-  text-align: center;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-content .course-title {\r\n-  font-size: calc(var(--lp-font-size-base, 1em) * 1.25);\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-content .course-excerpt, .lp-single-instructor .ul-instructor-courses .course-content .course-short-description, .lp-single-instructor .ul-instructor-courses .course-content .course-instructor-category {\r\n-  display: none;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-thumbnail {\r\n-  border-radius: var(--lp-border-radius, 5px) var(--lp-border-radius, 5px) 0 0;\r\n-  overflow: hidden;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-thumbnail img {\r\n-  width: 100%;\r\n-  height: auto;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta {\r\n-  display: flex;\r\n-  padding: 0;\r\n-  margin-bottom: 12px;\r\n-  gap: 20px;\r\n-  flex-wrap: wrap;\r\n-  row-gap: 8px;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item {\r\n-  text-transform: capitalize;\r\n-  display: flex;\r\n-  gap: 8px;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item::before {\r\n-  color: var(--lp-primary-color);\r\n-  font-family: \"lp-icon\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item > div {\r\n-  display: inline-block;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-level::before {\r\n-  content: \"\\f012\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-duration::before {\r\n-  content: \"\\f017\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-lesson::before {\r\n-  content: \"\\f15b\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-quiz::before {\r\n-  content: \"\\f12e\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-student::before {\r\n-  content: \"\\f501\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-address::before {\r\n-  content: \"\\e91b\";\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-duration, .lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-level, .lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-quiz {\r\n-  display: none;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-price {\r\n-  display: block;\r\n-  margin: 0 0 12px 0;\r\n-  font-size: calc(var(--lp-font-size-base, 1em) * 1.25);\r\n-  font-weight: 700;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-price .free {\r\n-  color: #3AB500;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-price .origin-price {\r\n-  text-decoration: line-through;\r\n-  opacity: 0.6;\r\n-  font-size: calc(var(--lp-font-size-base, 1em) * 0.925);\r\n-  margin-right: 4px;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-title {\r\n-  margin: 0 0 12px 0;\r\n-  padding: 0;\r\n-  display: block;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-title:hover {\r\n-  color: var(--lp-primary-color);\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-readmore a {\r\n-  padding: 8px 24px;\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  color: var(--lp-color-base, #333);\r\n-  border: 1px solid var(--lp-color-base, #333);\r\n-  transition: all 0.3s;\r\n-  display: block;\r\n-  background: transparent;\r\n-  text-decoration: none;\r\n-}\r\n-.lp-single-instructor .ul-instructor-courses .course-readmore a:hover {\r\n-  background: var(--lp-primary-color);\r\n-  color: var(--lp-color-white, #fff);\r\n-  border-color: var(--lp-primary-color);\r\n-}\r\n-.lp-single-instructor .instructor-avatar {\r\n-  position: relative;\r\n-}\r\n-.lp-single-instructor .instructor-avatar:hover .lp-btn-to-edit-avatar {\r\n-  opacity: 1;\r\n-  visibility: visible;\r\n-}\r\n-.lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar {\r\n-  position: absolute;\r\n-  top: 80px;\r\n-  right: 0;\r\n-  left: auto;\r\n-  width: 36px;\r\n-  height: 36px;\r\n-  font-size: 0;\r\n-  display: flex;\r\n-  align-items: center;\r\n-  justify-content: center;\r\n-  opacity: 0;\r\n-  visibility: hidden;\r\n-  cursor: pointer;\r\n-  background-color: var(--lp-white-grey, #F7F7FB);\r\n-  border-radius: 50%;\r\n-}\r\n-@media (max-width: 767px) {\r\n-  .lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar {\r\n-    opacity: 1;\r\n-    top: 60px;\r\n-    visibility: visible;\r\n-  }\r\n-}\r\n-.lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar::before {\r\n-  content: \"\\f044\";\r\n-  font-size: 1.5rem;\r\n-  font-family: \"lp-icon\";\r\n-  font-weight: normal;\r\n-  color: var(--lp-primary-color);\r\n-}\r\n-\r\n-.learn-press-pagination {\r\n-  margin: 20px 0;\r\n-  text-align: center;\r\n-}\r\n-.learn-press-pagination .page-numbers {\r\n-  display: inline-block;\r\n-  margin: 0;\r\n-  padding: 0;\r\n-  border: 0;\r\n-  outline: 0;\r\n-  background: transparent;\r\n-  list-style: none;\r\n-}\r\n-.learn-press-pagination .page-numbers > li {\r\n-  display: inline-block;\r\n-  margin: 0;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers {\r\n-  float: unset;\r\n-  padding: 0 12px;\r\n-  color: #666;\r\n-  text-decoration: none;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers.current {\r\n-  color: var(--lp-primary-color);\r\n-  font-weight: 400;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers:hover {\r\n-  color: var(--lp-primary-color);\r\n+\u002F**\n+* Style for instructor page\n+*\u002F\n+\u002F**\n+* Styles for all page of LP\n+*\n+* @since 4.2.3\n+* @version 1.0.0\n+*\u002F\n+\u002F**\n+ * Mixin\n+ *\u002F\n+@-webkit-keyframes rotating4 {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+@keyframes rotating4 {\n+  from {\n+    -ms-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -webkit-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -ms-transform: rotate(360deg);\n+    -moz-transform: rotate(360deg);\n+    -webkit-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+@-webkit-keyframes animation4 {\n+  from {\n+    left: -40%;\n+    width: 40%;\n+  }\n+  to {\n+    left: 100%;\n+    width: 10%;\n+  }\n+}\n+@keyframes animation4 {\n+  from {\n+    left: -40%;\n+    width: 40%;\n+  }\n+  to {\n+    left: 100%;\n+    width: 10%;\n+  }\n+}\n+:root {\n+  --lp-cotainer-max-with: var(--lp-container-max-width);\n+}\n+\n+.wp-block-group {\n+  --lp-container-max-width: var(--wp--style--global--wide-size);\n+}\n+\n+* {\n+  box-sizing: border-box;\n+  margin: 0;\n+  padding: 0;\n+}\n+\n+\u002F*  start reset css *\u002F\n+body {\n+  background: #fff;\n+}\n+body.learnpress-page {\n+  overflow-x: hidden;\n+}\n+\n+button {\n+  cursor: pointer;\n+}\n+\n+input, button, select, textarea {\n+  outline: none;\n+}\n+\n+\u002F*html {\n+\toverflow-x: hidden;\n+}*\u002F\n+a {\n+  -webkit-transition: 0.3s;\n+  -moz-transition: 0.3s;\n+  -ms-transition: 0.3s;\n+  -o-transition: 0.3s;\n+  transition: 0.3s;\n+  text-decoration: none;\n+}\n+\n+p {\n+  margin-bottom: 1em;\n+}\n+p:last-child {\n+  margin: 0;\n+}\n+\n+.lp-content-area {\n+  max-width: var(--lp-container-max-width) !important;\n+  margin: 0 auto;\n+  padding-right: var(--lp-cotainer-padding);\n+  padding-left: var(--lp-cotainer-padding);\n+}\n+.lp-content-area.learn-press-message {\n+  margin-bottom: 24px;\n+  padding-left: 15px;\n+  padding-right: 15px;\n+}\n+\n+.lp-ico svg {\n+  width: 20px;\n+  height: 20px;\n+}\n+\n+.lp-button {\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: var(--lp-border-radius, 5px);\n+  padding: 8px 16px;\n+}\n+.lp-button.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-button.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+\n+.lp-hidden {\n+  display: none !important;\n+}\n+\n+\u002F**\n+* Style for single instructor page\n+*\n+* @since 4.2.3\n+* @version 1.0.0\n+*\u002F\n+\u002F**\n+ * Style for user cover amd avatar image.\n+ * @since 4.2.7.2\n+ * @version 1.0.0\n+ *\u002F\n+.lp-user-cover-image_background {\n+  position: relative;\n+}\n+.lp-user-cover-image_background:hover .lp-btn-to-edit-cover-image {\n+  opacity: 1;\n+  visibility: visible;\n+}\n+.lp-user-cover-image_background .lp-btn-to-edit-cover-image {\n+  position: absolute;\n+  bottom: 0;\n+  right: 0;\n+  background: var(--lp-white-grey, #F7F7FB);\n+  padding: 12px 20px;\n+  border-radius: var(--lp-border-radius, 5px) 0 var(--lp-border-radius, 5px) 0;\n+  text-transform: capitalize;\n+  cursor: pointer;\n+  color: var(--lp-primary-color);\n+  text-decoration: none;\n+  opacity: 0;\n+  visibility: hidden;\n+}\n+@media (max-width: 767px) {\n+  .lp-user-cover-image_background .lp-btn-to-edit-cover-image {\n+    font-size: 0;\n+    padding: 4px 12px;\n+    opacity: 1;\n+    visibility: visible;\n+  }\n+  .lp-user-cover-image_background .lp-btn-to-edit-cover-image:before {\n+    font-family: \"lp-icon\";\n+    content: \"\\f044\";\n+    font-size: 16px;\n+  }\n+}\n+\n+.lp-user-cover-image__display {\n+  width: 100%;\n+}\n+@media (max-width: 767px) {\n+  .lp-user-cover-image {\n+    position: relative;\n+    z-index: 1;\n+  }\n+}\n+.lp-user-cover-image .lp-cover-image-empty {\n+  display: flex;\n+  align-items: center;\n+  width: 100%;\n+  height: 250px;\n+  border: 2px dashed var(--lp-border-color, #E2E0DB);\n+  border-radius: var(--lp-border-radius, 5px);\n+  cursor: pointer;\n+  position: relative;\n+  text-align: center;\n+}\n+.lp-user-cover-image .lp-cover-image-empty:hover {\n+  border-color: var(--lp-primary-color);\n+}\n+.lp-user-cover-image .lp-cover-image-empty input[type=file] {\n+  position: absolute;\n+  top: 0;\n+  left: 0;\n+  width: 100%;\n+  height: 100%;\n+  opacity: 0;\n+  cursor: pointer;\n+  z-index: 10;\n+}\n+.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info {\n+  z-index: 1;\n+  flex: 1;\n+  position: relative;\n+  padding: 0 16px;\n+  line-height: 1.3;\n+}\n+.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top {\n+  font-weight: 600;\n+  display: flex;\n+  align-items: center;\n+  gap: 8px;\n+  margin-bottom: 8px;\n+  flex-direction: column;\n+}\n+.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image {\n+  font-size: 32px;\n+  transform: rotate(-90deg);\n+}\n+.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__top .lp-icon-file-image:before {\n+  color: var(--lp-primary-color);\n+  content: \"\\f08b\";\n+}\n+.lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info__bottom {\n+  opacity: 0.7;\n+}\n+@media (max-width: 420px) {\n+  .lp-user-cover-image .lp-cover-image-empty {\n+    height: 200px;\n+  }\n+  .lp-user-cover-image .lp-cover-image-empty .lp-cover-image-empty__info {\n+    padding: 0 8px;\n+    font-size: 15px;\n+  }\n+}\n+.lp-user-cover-image .lp-user-cover-image__buttons {\n+  display: inline-flex;\n+  gap: 12px;\n+  margin-top: 16px;\n+}\n+\n+.lp-user-cover-image_background {\n+  background-repeat: no-repeat;\n+  background-position: center;\n+  background-size: cover;\n+  margin-bottom: 20px;\n+  border-radius: var(--lp-border-radius, 5px);\n+  min-height: 100px;\n+}\n+.lp-user-cover-image_background > img {\n+  opacity: 0;\n+  visibility: hidden;\n+}\n+\n+.learnpress_avatar__form label {\n+  display: inline-block;\n+}\n+.learnpress_avatar__form input[type=file] {\n+  display: none;\n+}\n+.learnpress_avatar__form__upload {\n+  display: flex;\n+  width: 200px;\n+  height: 200px;\n+  border: 1px dashed var(--lp-border-color, #E2E0DB);\n+  border-radius: 3px;\n+  background-color: #fafafa;\n+  font-size: 0.875em;\n+  font-weight: 300;\n+  font-style: italic;\n+  line-height: 2.6875em;\n+  text-align: center;\n+  cursor: pointer;\n+  align-items: center;\n+  justify-content: center;\n+}\n+.learnpress_avatar__form__upload div {\n+  line-height: 1.4;\n+}\n+.learnpress_avatar__button--loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+\n+button.learnpress_avatar__button {\n+  height: 40px;\n+  padding: 0 15px;\n+  border: 0;\n+  background: var(--lp-primary-color);\n+  color: white;\n+  margin-top: 15px;\n+  border-radius: 3px;\n+}\n+button.learnpress_avatar__button + button {\n+  margin-left: 15px;\n+  margin-right: 0;\n+}\n+\n+body .entry-content.has-global-padding {\n+  padding-left: 0;\n+  padding-right: 0;\n+}\n+body .wp-site-blocks {\n+  padding-left: 0;\n+  padding-right: 0;\n+}\n+\n+.learnpress-v4 .lp-content-area {\n+  --lp-container-max-width: inherit;\n+  --lp-cotainer-padding: 0;\n+}\n+\n+.lp-single-instructor {\n+  --lp-instructor-item-padding: 13px;\n+  --lp-instructor-border-color: #c3c4c7;\n+  --lp-instructor-minmax-column: 250px;\n+}\n+.lp-single-instructor h1 {\n+  font-size: 1.8em;\n+  font-weight: bold;\n+  margin-bottom: var(--lp-instructor-item-padding);\n+}\n+.lp-single-instructor h2 {\n+  font-size: 1.4em;\n+  font-weight: bold;\n+}\n+.lp-single-instructor .wrapper-instructor-total-courses, .lp-single-instructor .wrapper-instructor-total-students {\n+  display: flex;\n+  align-items: center;\n+  gap: 5px;\n+}\n+.lp-single-instructor__info {\n+  margin-bottom: 40px;\n+}\n+.lp-single-instructor__info__wrapper {\n+  display: flex;\n+  gap: 24px;\n+}\n+.lp-single-instructor__info .instructor-avatar img {\n+  max-width: 120px;\n+  border-radius: 50%;\n+  height: auto;\n+}\n+@media (max-width: 767px) {\n+  .lp-single-instructor__info .instructor-avatar img {\n+    max-width: 100px;\n+  }\n+}\n+.lp-single-instructor__info__right {\n+  flex: 1;\n+  display: flex;\n+  flex-direction: column;\n+  gap: 8px;\n+}\n+.lp-single-instructor__info__right__content {\n+  display: flex;\n+  align-items: center;\n+  justify-content: space-between;\n+  column-gap: 20px;\n+  row-gap: 8px;\n+  flex-wrap: wrap;\n+}\n+.lp-single-instructor__info__right .instructor-description:empty {\n+  margin: 0;\n+}\n+.lp-single-instructor__info__right .instructor-social {\n+  display: flex;\n+  gap: 12px;\n+  font-size: calc(var(--lp-font-size-base, 1em) * 0.925);\n+}\n+.lp-single-instructor__info__right .instructor-social:empty {\n+  margin: 0;\n+}\n+.lp-single-instructor__info__right .instructor-social i {\n+  width: 40px;\n+  height: 40px;\n+  display: inline-flex;\n+  align-items: center;\n+  justify-content: center;\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: 50%;\n+}\n+.lp-single-instructor__info__right .instructor-social i:hover {\n+  background-color: var(--lp-primary-color);\n+  border-color: var(--lp-primary-color);\n+  color: var(--lp-color-white, #fff);\n+}\n+.lp-single-instructor__info__right .lp-instructor-meta {\n+  display: flex;\n+  column-gap: 20px;\n+  row-gap: 8px;\n+}\n+.lp-single-instructor__info__right .lp-instructor-meta .instructor-item-meta {\n+  display: inline-flex;\n+  gap: 8px;\n+  align-items: center;\n+}\n+.lp-single-instructor__info__right .lp-instructor-meta .instructor-item-meta i {\n+  color: var(--lp-primary-color);\n+}\n+@media (max-width: 991px) {\n+  .lp-single-instructor__info__right {\n+    flex-wrap: wrap;\n+  }\n+  .lp-single-instructor__info__right .instructor-description {\n+    display: none;\n+  }\n+  .lp-single-instructor__info__right .lp-instructor-meta {\n+    flex-wrap: wrap;\n+  }\n+}\n+@media (max-width: 600px) {\n+  .lp-single-instructor__info {\n+    display: block;\n+  }\n+  .lp-single-instructor__info .instructor-avatar {\n+    margin-right: 0;\n+    margin-bottom: 20px;\n+  }\n+  .lp-single-instructor__info .instructor-social {\n+    gap: 3%;\n+  }\n+}\n+.lp-single-instructor .ul-instructor-courses {\n+  display: grid;\n+  gap: 30px;\n+  padding: 0 !important;\n+  margin: 0 0 30px 0;\n+  list-style: none;\n+  grid-template-columns: repeat(auto-fill, minmax(var(--lp-instructor-minmax-column), 1fr));\n+}\n+.lp-single-instructor .ul-instructor-courses li {\n+  list-style: none;\n+}\n+.lp-single-instructor .ul-instructor-courses a:hover {\n+  color: var(--lp-primary-color);\n+}\n+.lp-single-instructor .ul-instructor-courses .course-item {\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: var(--lp-border-radius, 5px);\n+}\n+.lp-single-instructor .ul-instructor-courses .course-item:hover {\n+  box-shadow: 0 15px 20px 0 rgba(0, 0, 0, 0.2);\n+}\n+.lp-single-instructor .ul-instructor-courses .course-content {\n+  padding: 20px;\n+  flex-grow: 1;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-content .course-info {\n+  flex-direction: column;\n+  align-items: flex-start;\n+  gap: 12px;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-content .course-info .course-readmore {\n+  width: 100%;\n+  text-align: center;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-content .course-title {\n+  font-size: calc(var(--lp-font-size-base, 1em) * 1.25);\n+}\n+.lp-single-instructor .ul-instructor-courses .course-content .course-excerpt, .lp-single-instructor .ul-instructor-courses .course-content .course-short-description, .lp-single-instructor .ul-instructor-courses .course-content .course-instructor-category {\n+  display: none;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-thumbnail {\n+  border-radius: var(--lp-border-radius, 5px) var(--lp-border-radius, 5px) 0 0;\n+  overflow: hidden;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-thumbnail img {\n+  width: 100%;\n+  height: auto;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta {\n+  display: flex;\n+  padding: 0;\n+  margin-bottom: 12px;\n+  gap: 20px;\n+  flex-wrap: wrap;\n+  row-gap: 8px;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item {\n+  text-transform: capitalize;\n+  display: flex;\n+  gap: 8px;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item::before {\n+  color: var(--lp-primary-color);\n+  font-family: \"lp-icon\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item > div {\n+  display: inline-block;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-level::before {\n+  content: \"\\f012\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-duration::before {\n+  content: \"\\f017\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-lesson::before {\n+  content: \"\\f15b\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-quiz::before {\n+  content: \"\\f12e\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-student::before {\n+  content: \"\\f501\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-address::before {\n+  content: \"\\e91b\";\n+}\n+.lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-duration, .lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-level, .lp-single-instructor .ul-instructor-courses .course-wrap-meta .meta-item-quiz {\n+  display: none;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-price {\n+  display: block;\n+  margin: 0 0 12px 0;\n+  font-size: calc(var(--lp-font-size-base, 1em) * 1.25);\n+  font-weight: 700;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-price .free {\n+  color: #3AB500;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-price .origin-price {\n+  text-decoration: line-through;\n+  opacity: 0.6;\n+  font-size: calc(var(--lp-font-size-base, 1em) * 0.925);\n+  margin-right: 4px;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-title {\n+  margin: 0 0 12px 0;\n+  padding: 0;\n+  display: block;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-title:hover {\n+  color: var(--lp-primary-color);\n+}\n+.lp-single-instructor .ul-instructor-courses .course-readmore a {\n+  padding: 8px 24px;\n+  border-radius: var(--lp-border-radius, 5px);\n+  color: var(--lp-color-base, #333);\n+  border: 1px solid var(--lp-color-base, #333);\n+  transition: all 0.3s;\n+  display: block;\n+  background: transparent;\n+  text-decoration: none;\n+}\n+.lp-single-instructor .ul-instructor-courses .course-readmore a:hover {\n+  background: var(--lp-primary-color);\n+  color: var(--lp-color-white, #fff);\n+  border-color: var(--lp-primary-color);\n+}\n+.lp-single-instructor .instructor-avatar {\n+  position: relative;\n+}\n+.lp-single-instructor .instructor-avatar:hover .lp-btn-to-edit-avatar {\n+  opacity: 1;\n+  visibility: visible;\n+}\n+.lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar {\n+  position: absolute;\n+  top: 80px;\n+  right: 0;\n+  left: auto;\n+  width: 36px;\n+  height: 36px;\n+  font-size: 0;\n+  display: flex;\n+  align-items: center;\n+  justify-content: center;\n+  opacity: 0;\n+  visibility: hidden;\n+  cursor: pointer;\n+  background-color: var(--lp-white-grey, #F7F7FB);\n+  border-radius: 50%;\n+}\n+@media (max-width: 767px) {\n+  .lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar {\n+    opacity: 1;\n+    top: 60px;\n+    visibility: visible;\n+  }\n+}\n+.lp-single-instructor .instructor-avatar .lp-btn-to-edit-avatar::before {\n+  content: \"\\f044\";\n+  font-size: 1.5rem;\n+  font-family: \"lp-icon\";\n+  font-weight: normal;\n+  color: var(--lp-primary-color);\n+}\n+\n+.learn-press-pagination {\n+  margin: 20px 0;\n+  text-align: center;\n+}\n+.learn-press-pagination .page-numbers {\n+  display: inline-block;\n+  margin: 0;\n+  padding: 0;\n+  border: 0;\n+  outline: 0;\n+  background: transparent;\n+  list-style: none;\n+}\n+.learn-press-pagination .page-numbers > li {\n+  display: inline-block;\n+  margin: 0;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers {\n+  float: unset;\n+  padding: 0 12px;\n+  color: #666;\n+  text-decoration: none;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers.current {\n+  color: var(--lp-primary-color);\n+  font-weight: 400;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers:hover {\n+  color: var(--lp-primary-color);\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fcss\u002Finstructors.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fcss\u002Finstructors.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fcss\u002Finstructors.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fcss\u002Finstructors.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,295 +1,295 @@\n-\u002F**\r\n-* Style for instructor page\r\n-*\u002F\r\n-:root {\r\n-  --lp-cotainer-max-with: var(--lp-container-max-width);\r\n-}\r\n-\r\n-.wp-block-group {\r\n-  --lp-container-max-width: var(--wp--style--global--wide-size);\r\n-}\r\n-\r\n-\u002F**\r\n-* Styles for all page of LP\r\n-*\r\n-* @since 4.2.3\r\n-* @version 1.0.0\r\n-*\u002F\r\n-\u002F**\r\n- * Mixin\r\n- *\u002F\r\n-@-webkit-keyframes rotating4 {\r\n-  from {\r\n-    -webkit-transform: rotate(0deg);\r\n-    -o-transform: rotate(0deg);\r\n-    transform: rotate(0deg);\r\n-  }\r\n-  to {\r\n-    -webkit-transform: rotate(360deg);\r\n-    -o-transform: rotate(360deg);\r\n-    transform: rotate(360deg);\r\n-  }\r\n-}\r\n-@keyframes rotating4 {\r\n-  from {\r\n-    -ms-transform: rotate(0deg);\r\n-    -moz-transform: rotate(0deg);\r\n-    -webkit-transform: rotate(0deg);\r\n-    -o-transform: rotate(0deg);\r\n-    transform: rotate(0deg);\r\n-  }\r\n-  to {\r\n-    -ms-transform: rotate(360deg);\r\n-    -moz-transform: rotate(360deg);\r\n-    -webkit-transform: rotate(360deg);\r\n-    -o-transform: rotate(360deg);\r\n-    transform: rotate(360deg);\r\n-  }\r\n-}\r\n-@-webkit-keyframes animation4 {\r\n-  from {\r\n-    left: -40%;\r\n-    width: 40%;\r\n-  }\r\n-  to {\r\n-    left: 100%;\r\n-    width: 10%;\r\n-  }\r\n-}\r\n-@keyframes animation4 {\r\n-  from {\r\n-    left: -40%;\r\n-    width: 40%;\r\n-  }\r\n-  to {\r\n-    left: 100%;\r\n-    width: 10%;\r\n-  }\r\n-}\r\n-\u002F**\r\n-* Style for instructor page\r\n-*\u002F\r\n-* {\r\n-  box-sizing: border-box;\r\n-  margin: 0;\r\n-  padding: 0;\r\n-}\r\n-\r\n-\u002F*  start reset css *\u002F\r\n-body {\r\n-  background: #fff;\r\n-}\r\n-body.learnpress-page {\r\n-  overflow-x: hidden;\r\n-}\r\n-\r\n-button {\r\n-  cursor: pointer;\r\n-}\r\n-\r\n-input, button, select, textarea {\r\n-  outline: none;\r\n-}\r\n-\r\n-\u002F*html {\r\n-\toverflow-x: hidden;\r\n-}*\u002F\r\n-a {\r\n-  -webkit-transition: 0.3s;\r\n-  -moz-transition: 0.3s;\r\n-  -ms-transition: 0.3s;\r\n-  -o-transition: 0.3s;\r\n-  transition: 0.3s;\r\n-  text-decoration: none;\r\n-}\r\n-\r\n-p {\r\n-  margin-bottom: 1em;\r\n-}\r\n-p:last-child {\r\n-  margin: 0;\r\n-}\r\n-\r\n-.lp-content-area {\r\n-  max-width: var(--lp-container-max-width) !important;\r\n-  margin: 0 auto;\r\n-  padding-right: var(--lp-cotainer-padding);\r\n-  padding-left: var(--lp-cotainer-padding);\r\n-}\r\n-.lp-content-area.learn-press-message {\r\n-  margin-bottom: 24px;\r\n-  padding-left: 15px;\r\n-  padding-right: 15px;\r\n-}\r\n-\r\n-.lp-ico svg {\r\n-  width: 20px;\r\n-  height: 20px;\r\n-}\r\n-\r\n-.lp-button {\r\n-  border: 1px solid var(--lp-border-color, #E2E0DB);\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  padding: 8px 16px;\r\n-}\r\n-.lp-button.loading {\r\n-  pointer-events: none;\r\n-  opacity: 0.8;\r\n-}\r\n-.lp-button.loading:before {\r\n-  display: inline-block;\r\n-  font-family: \"lp-icon\";\r\n-  content: \"\\f110\";\r\n-  animation: lp-rotating 1s linear infinite;\r\n-  margin-right: 5px;\r\n-  font-variant: normal;\r\n-  text-transform: none;\r\n-  line-height: 1;\r\n-  -webkit-font-smoothing: antialiased;\r\n-  -moz-osx-font-smoothing: grayscale;\r\n-  vertical-align: middle;\r\n-  margin-top: -2px;\r\n-}\r\n-\r\n-.lp-hidden {\r\n-  display: none !important;\r\n-}\r\n-\r\n-\u002F**\r\n-* Style for instructor page\r\n-*\u002F\r\n-\u002F**\r\n-* Styles for all page of LP\r\n-*\r\n-* @since 4.2.3\r\n-* @version 1.0.0\r\n-*\u002F\r\n-\u002F**\r\n- * Instructors page.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-body .entry-content.has-global-padding {\r\n-  padding-left: 0;\r\n-  padding-right: 0;\r\n-}\r\n-body .wp-site-blocks {\r\n-  padding-left: 0;\r\n-  padding-right: 0;\r\n-}\r\n-\r\n-.learnpress-v4 .lp-content-area {\r\n-  --lp-container-max-width: inherit;\r\n-  --lp-cotainer-padding: 0;\r\n-}\r\n-.learnpress-v4 .lp-single-course .lp-content-area {\r\n-  padding-right: 15px;\r\n-  padding-left: 15px;\r\n-}\r\n-\r\n-.lp-list-instructors {\r\n-  --lp-instructor-item-padding: 20px;\r\n-  --lp-instructor-border-color: #c3c4c7;\r\n-  --lp-instructor-minmax-column: 250px;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors {\r\n-  display: grid;\r\n-  grid-template-columns: repeat(auto-fill, minmax(var(--lp-instructor-minmax-column), 1fr));\r\n-  gap: 30px;\r\n-  padding: 0 !important;\r\n-  margin: 0 0 30px 0;\r\n-  list-style: none;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors > ul.lp-skeleton-animation {\r\n-  grid-column: span 4;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.no-instructor {\r\n-  grid-column: span 4;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor {\r\n-  border: 1px solid var(--lp-instructor-border-color);\r\n-  padding: var(--lp-instructor-item-padding);\r\n-  list-style: none;\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-avatar {\r\n-  margin-bottom: 12px;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-display-name {\r\n-  display: block;\r\n-  margin-bottom: 12px;\r\n-  font-size: 1.2em;\r\n-  line-height: 1.3;\r\n-  font-weight: bold;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-avatar img {\r\n-  width: 100%;\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info {\r\n-  display: flex;\r\n-  column-gap: 16px;\r\n-  margin-bottom: 12px;\r\n-  flex-wrap: wrap;\r\n-  row-gap: 8px;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div {\r\n-  display: flex;\r\n-  align-items: center;\r\n-  column-gap: 10px;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div span {\r\n-  display: inline-flex;\r\n-  white-space: nowrap;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div .lp-ico {\r\n-  color: var(--lp-primary-color);\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-btn-view {\r\n-  padding: 8px 24px;\r\n-  border-radius: var(--lp-border-radius, 5px);\r\n-  color: var(--lp-color-base, #333);\r\n-  border: 1px solid var(--lp-color-base, #333);\r\n-  transition: all 0.3s;\r\n-  display: block;\r\n-  background: transparent;\r\n-  text-decoration: none;\r\n-  text-align: center;\r\n-}\r\n-.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-btn-view:hover {\r\n-  background: var(--lp-primary-color);\r\n-  color: var(--lp-color-white, #fff);\r\n-  border-color: var(--lp-primary-color);\r\n-}\r\n-\r\n-.learn-press-pagination {\r\n-  margin: 20px 0;\r\n-  text-align: center;\r\n-}\r\n-.learn-press-pagination .page-numbers {\r\n-  display: inline-block;\r\n-  margin: 0;\r\n-  padding: 0;\r\n-  border: 0;\r\n-  outline: 0;\r\n-  background: transparent;\r\n-  list-style: none;\r\n-}\r\n-.learn-press-pagination .page-numbers > li {\r\n-  display: inline-block;\r\n-  margin: 0;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers {\r\n-  float: unset;\r\n-  padding: 0 12px;\r\n-  color: #666;\r\n-  text-decoration: none;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers.current {\r\n-  color: var(--lp-primary-color);\r\n-  font-weight: 400;\r\n-}\r\n-.learn-press-pagination .page-numbers > li .page-numbers:hover {\r\n-  color: var(--lp-primary-color);\r\n+\u002F**\n+* Style for instructor page\n+*\u002F\n+:root {\n+  --lp-cotainer-max-with: var(--lp-container-max-width);\n+}\n+\n+.wp-block-group {\n+  --lp-container-max-width: var(--wp--style--global--wide-size);\n+}\n+\n+\u002F**\n+* Styles for all page of LP\n+*\n+* @since 4.2.3\n+* @version 1.0.0\n+*\u002F\n+\u002F**\n+ * Mixin\n+ *\u002F\n+@-webkit-keyframes rotating4 {\n+  from {\n+    -webkit-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -webkit-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+@keyframes rotating4 {\n+  from {\n+    -ms-transform: rotate(0deg);\n+    -moz-transform: rotate(0deg);\n+    -webkit-transform: rotate(0deg);\n+    -o-transform: rotate(0deg);\n+    transform: rotate(0deg);\n+  }\n+  to {\n+    -ms-transform: rotate(360deg);\n+    -moz-transform: rotate(360deg);\n+    -webkit-transform: rotate(360deg);\n+    -o-transform: rotate(360deg);\n+    transform: rotate(360deg);\n+  }\n+}\n+@-webkit-keyframes animation4 {\n+  from {\n+    left: -40%;\n+    width: 40%;\n+  }\n+  to {\n+    left: 100%;\n+    width: 10%;\n+  }\n+}\n+@keyframes animation4 {\n+  from {\n+    left: -40%;\n+    width: 40%;\n+  }\n+  to {\n+    left: 100%;\n+    width: 10%;\n+  }\n+}\n+\u002F**\n+* Style for instructor page\n+*\u002F\n+* {\n+  box-sizing: border-box;\n+  margin: 0;\n+  padding: 0;\n+}\n+\n+\u002F*  start reset css *\u002F\n+body {\n+  background: #fff;\n+}\n+body.learnpress-page {\n+  overflow-x: hidden;\n+}\n+\n+button {\n+  cursor: pointer;\n+}\n+\n+input, button, select, textarea {\n+  outline: none;\n+}\n+\n+\u002F*html {\n+\toverflow-x: hidden;\n+}*\u002F\n+a {\n+  -webkit-transition: 0.3s;\n+  -moz-transition: 0.3s;\n+  -ms-transition: 0.3s;\n+  -o-transition: 0.3s;\n+  transition: 0.3s;\n+  text-decoration: none;\n+}\n+\n+p {\n+  margin-bottom: 1em;\n+}\n+p:last-child {\n+  margin: 0;\n+}\n+\n+.lp-content-area {\n+  max-width: var(--lp-container-max-width) !important;\n+  margin: 0 auto;\n+  padding-right: var(--lp-cotainer-padding);\n+  padding-left: var(--lp-cotainer-padding);\n+}\n+.lp-content-area.learn-press-message {\n+  margin-bottom: 24px;\n+  padding-left: 15px;\n+  padding-right: 15px;\n+}\n+\n+.lp-ico svg {\n+  width: 20px;\n+  height: 20px;\n+}\n+\n+.lp-button {\n+  border: 1px solid var(--lp-border-color, #E2E0DB);\n+  border-radius: var(--lp-border-radius, 5px);\n+  padding: 8px 16px;\n+}\n+.lp-button.loading {\n+  pointer-events: none;\n+  opacity: 0.8;\n+}\n+.lp-button.loading:before {\n+  display: inline-block;\n+  font-family: \"lp-icon\";\n+  content: \"\\f110\";\n+  animation: lp-rotating 1s linear infinite;\n+  margin-right: 5px;\n+  font-variant: normal;\n+  text-transform: none;\n+  line-height: 1;\n+  -webkit-font-smoothing: antialiased;\n+  -moz-osx-font-smoothing: grayscale;\n+  vertical-align: middle;\n+  margin-top: -2px;\n+}\n+\n+.lp-hidden {\n+  display: none !important;\n+}\n+\n+\u002F**\n+* Style for instructor page\n+*\u002F\n+\u002F**\n+* Styles for all page of LP\n+*\n+* @since 4.2.3\n+* @version 1.0.0\n+*\u002F\n+\u002F**\n+ * Instructors page.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+body .entry-content.has-global-padding {\n+  padding-left: 0;\n+  padding-right: 0;\n+}\n+body .wp-site-blocks {\n+  padding-left: 0;\n+  padding-right: 0;\n+}\n+\n+.learnpress-v4 .lp-content-area {\n+  --lp-container-max-width: inherit;\n+  --lp-cotainer-padding: 0;\n+}\n+.learnpress-v4 .lp-single-course .lp-content-area {\n+  padding-right: 15px;\n+  padding-left: 15px;\n+}\n+\n+.lp-list-instructors {\n+  --lp-instructor-item-padding: 20px;\n+  --lp-instructor-border-color: #c3c4c7;\n+  --lp-instructor-minmax-column: 250px;\n+}\n+.lp-list-instructors .ul-list-instructors {\n+  display: grid;\n+  grid-template-columns: repeat(auto-fill, minmax(var(--lp-instructor-minmax-column), 1fr));\n+  gap: 30px;\n+  padding: 0 !important;\n+  margin: 0 0 30px 0;\n+  list-style: none;\n+}\n+.lp-list-instructors .ul-list-instructors > ul.lp-skeleton-animation {\n+  grid-column: span 4;\n+}\n+.lp-list-instructors .ul-list-instructors li.no-instructor {\n+  grid-column: span 4;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor {\n+  border: 1px solid var(--lp-instructor-border-color);\n+  padding: var(--lp-instructor-item-padding);\n+  list-style: none;\n+  border-radius: var(--lp-border-radius, 5px);\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-avatar {\n+  margin-bottom: 12px;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-display-name {\n+  display: block;\n+  margin-bottom: 12px;\n+  font-size: 1.2em;\n+  line-height: 1.3;\n+  font-weight: bold;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-avatar img {\n+  width: 100%;\n+  border-radius: var(--lp-border-radius, 5px);\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info {\n+  display: flex;\n+  column-gap: 16px;\n+  margin-bottom: 12px;\n+  flex-wrap: wrap;\n+  row-gap: 8px;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div {\n+  display: flex;\n+  align-items: center;\n+  column-gap: 10px;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div span {\n+  display: inline-flex;\n+  white-space: nowrap;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-info > div .lp-ico {\n+  color: var(--lp-primary-color);\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-btn-view {\n+  padding: 8px 24px;\n+  border-radius: var(--lp-border-radius, 5px);\n+  color: var(--lp-color-base, #333);\n+  border: 1px solid var(--lp-color-base, #333);\n+  transition: all 0.3s;\n+  display: block;\n+  background: transparent;\n+  text-decoration: none;\n+  text-align: center;\n+}\n+.lp-list-instructors .ul-list-instructors li.item-instructor .instructor-btn-view:hover {\n+  background: var(--lp-primary-color);\n+  color: var(--lp-color-white, #fff);\n+  border-color: var(--lp-primary-color);\n+}\n+\n+.learn-press-pagination {\n+  margin: 20px 0;\n+  text-align: center;\n+}\n+.learn-press-pagination .page-numbers {\n+  display: inline-block;\n+  margin: 0;\n+  padding: 0;\n+  border: 0;\n+  outline: 0;\n+  background: transparent;\n+  list-style: none;\n+}\n+.learn-press-pagination .page-numbers > li {\n+  display: inline-block;\n+  margin: 0;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers {\n+  float: unset;\n+  padding: 0 12px;\n+  color: #666;\n+  text-decoration: none;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers.current {\n+  color: var(--lp-primary-color);\n+  font-weight: 400;\n+}\n+.learn-press-pagination .page-numbers > li .page-numbers:hover {\n+  color: var(--lp-primary-color);\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -16,8 +16,8 @@\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_1__);\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n-\u002F**\r\n- * Create course with AI\r\n+\u002F**\n+ * Create course with AI\n  *\u002F\n \n \n@@ -27,27 +27,35 @@\n let lp_is_generating_course_data = false;\n const lp_course_ai_setting = JSON.parse(localStorage.getItem('lp_course_ai_setting')) || {};\n class CreateCourseViaAI {\n-  constructor() {\n+  constructor(options = {}) {\n+    this.options = {\n+      autoInsertButton: true,\n+      isCourseBuilder: false,\n+      redirectDelayMs: 2000,\n+      ...options\n+    };\n     this.init();\n   }\n   static selectors = {\n     elGenerateDataAiWrap: '.lp-generate-data-ai-wrap'\n   };\n   init() {\n-    if (!lpData?.enable_open_ai) {\n-      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n-        el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n-\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fbutton>`);\n-      });\n-    } else {\n-      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n-        el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n-\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fbutton>`);\n-      });\n+    if (this.options.autoInsertButton) {\n+      if (!lpData?.enable_open_ai) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      } else {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      }\n     }\n     this.events();\n   }\n@@ -88,7 +96,7 @@\n           e,\n           target\n         } = args;\n-        const message = lpData.i18n.confirm_close_ai;\n+        const message = lpData?.i18n?.confirm_close_ai || 'Are you sure you want to close? Generate data will stop.';\n         if (!lp_is_generating_course_data) {\n           sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n         } else if (confirm(message)) {\n@@ -96,8 +104,8 @@\n         }\n \n         \u002F\u002F Testing custom confirm box\n-        \u002F*if ( confirm( message ) ) {\r\n-        \tSweetAlert.close();\r\n+        \u002F*if ( confirm( message ) ) {\n+        \tSweetAlert.close();\n         }*\u002F\n       }\n     }]);\n@@ -204,9 +212,9 @@\n     });\n   }\n \n-  \u002F**\r\n-   * Create prompt from data config\r\n-   * @param args\r\n+  \u002F**\n+   * Create prompt from data config\n+   * @param args\n    *\u002F\n   generatePrompt(args) {\n     const {\n@@ -247,9 +255,9 @@\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n \n-  \u002F**\r\n-   * Submit prompt to OpenAI to generate course data\r\n-   * @param args\r\n+  \u002F**\n+   * Submit prompt to OpenAI to generate course data\n+   * @param args\n    *\u002F\n   generateDataCourse(args) {\n     const {\n@@ -301,9 +309,9 @@\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n \n-  \u002F**\r\n-   * Create course with data of OpenAI\r\n-   * @param args\r\n+  \u002F**\n+   * Create course with data of OpenAI\n+   * @param args\n    *\u002F\n   createCourse(args) {\n     const {\n@@ -316,6 +324,9 @@\n     \u002F\u002F Get dataSend\n     const dataSend = JSON.parse(target.dataset.send);\n     dataSend.lp_structure_course = lp_structure_course;\n+    if (this.options.isCourseBuilder) {\n+      dataSend.is_course_builder = 1;\n+    }\n     const form = target.closest('form');\n     const elBtnPrev = form.querySelector('.lp-btn-step[data-action=prev]');\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elBtnPrev, 0);\n@@ -348,7 +359,7 @@\n         if (status === 'success') {\n           setTimeout(() => {\n             window.location.href = data.edit_course_url;\n-          }, 2000);\n+          }, this.options.redirectDelayMs);\n         } else {\n           lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elBtnPrev, 1);\n         }\n@@ -652,14 +663,14 @@\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! toastify-js *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\");\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -717,14 +728,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -755,10 +766,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -776,12 +787,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -794,11 +805,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -819,12 +830,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -967,15 +978,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -6958,11 +6969,11 @@\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _courses_generate_with_ai_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Fcourses\u002Fgenerate-with-ai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\");\n \u002F* harmony import *\u002F var _courses_view_students_modal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! .\u002Fcourses\u002Fview-students-modal.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fview-students-modal.js\");\n-\u002F**\r\n- * Admin Courses JS\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Admin Courses JS\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.1\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fadmin-courses.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{var e={9455(e,t,o){\"use strict\";o.d(t,{A:()=>i});var n=o(1601),s=o.n(n),a=o(6314),r=o.n(a)()(s());r.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const i=r},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var r={};if(n)for(var i=0;i\u003Cthis.length;i++){var l=this[i][0];null!=l&&(r[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&r[d[0]]||(void 0!==a&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=a),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var a={},r=[],i=0;i\u003Ce.length;i++){var l=e[i],c=n.base?l[0]+n.base:l[0],d=a[c]||0,u=\"\".concat(c,\" \").concat(d);a[c]=d+1;var p=o(u),w={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(w);else{var m=s(w,n);n.byIndex=i,t.splice(i,0,{identifier:u,updater:m,references:1})}r.push(u)}return r}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var a=n(e=e||[],s=s||{});return function(e){e=e||[];for(var r=0;r\u003Ca.length;r++){var i=o(a[r]);t[i].references--}for(var l=n(e,s),c=0;c\u003Ca.length;c++){var d=o(a[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}a=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var a=o.sourceMap;a&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),a=\"swal2-\",r=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=a+t,e),{}),i=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=a+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],w=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,h=e=>e&&\"function\"==typeof e.toPromise,g=e=>h(e)?e.toPromise():Promise.resolve(e),f=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${r.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(r.popup),x=()=>y(r.icon),C=()=>y(r.title),E=()=>y(r[\"html-container\"]),A=()=>y(r.image),L=()=>y(r[\"progress-steps\"]),B=()=>y(r[\"validation-message\"]),T=()=>v(`.${r.actions} .${r.confirm}`),S=()=>v(`.${r.actions} .${r.cancel}`),$=()=>v(`.${r.actions} .${r.deny}`),P=()=>v(`.${r.loader}`),M=()=>y(r.actions),O=()=>y(r.footer),I=()=>y(r[\"timer-progress-bar\"]),D=()=>y(r.close),j=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},q=()=>z(document.body,r.shown)&&!z(document.body,r[\"toast-shown\"])&&!z(document.body,r[\"no-backdrop\"]),H=()=>{const e=k();return!!e&&z(e,r.toast)},N=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},z=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},_=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(r).includes(o)||Object.values(i).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?W(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},V=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${r.popup} > .${r[t]}`);case\"checkbox\":return e.querySelector(`.${r.popup} > .${r.checkbox} input`);case\"radio\":return e.querySelector(`.${r.popup} > .${r.radio} input:checked`)||e.querySelector(`.${r.popup} > .${r.radio} input:first-child`);case\"range\":return e.querySelector(`.${r.popup} > .${r.range} input`);default:return e.querySelector(`.${r.popup} > .${r.input}`)}},F=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},W=(e,t)=>{R(e,t,!0)},U=(e,t)=>{R(e,t,!1)},X=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&z(n,t))return n}},J=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},Y=(e,t=\"flex\")=>{e&&(e.style.display=t)},K=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{Q(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},G=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},Q=(e,t,o=\"flex\")=>{t?Y(e,o):K(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=I();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${r.title}\" aria-describedby=\"${r[\"html-container\"]}\" class=\"${r.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${r.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${r[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${r.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${r.image}\" \u002F>\\n   \u003Ch2 class=\"${r.title}\" id=\"${r.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${r[\"html-container\"]}\" id=\"${r[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${r.input}\" id=\"${r.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${r.file}\" \u002F>\\n   \u003Cdiv class=\"${r.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${r.select}\" id=\"${r.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${r.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${r.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${r.checkbox}\" \u002F>\\n     \u003Cspan class=\"${r.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${r.textarea}\" id=\"${r.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${r[\"validation-message\"]}\" id=\"${r[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r.actions}\">\\n     \u003Cdiv class=\"${r.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${r.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${r.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${r.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${r[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ae=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},re=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),U([document.documentElement,document.body],[r[\"no-backdrop\"],r[\"toast-shown\"],r[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=r.container,t&&W(o,r[\"no-transition\"]),N(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(W(b(),r.rtl),n.isRTL=!0)})(s),(()=>{const e=k();if(!e)return;const t=X(e,r.input),o=X(e,r.file),n=e.querySelector(`.${r.range} input`),s=e.querySelector(`.${r.range} output`),a=X(e,r.select),i=e.querySelector(`.${r.checkbox} input`),l=X(e,r.textarea);t&&(t.oninput=ae),o&&(o.onchange=ae),a&&(a.onchange=ae),i&&(i.onchange=ae),l&&(l.oninput=ae),n&&s&&(n.oninput=()=>{ae(),s.value=n.value},n.onchange=()=>{ae(),s.value=n.value})})()},ie=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&N(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):N(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=M(),n=P();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Y(o):K(o),_(o,t,\"actions\"),function(e,t,o){const n=T(),s=$(),a=S();n&&s&&a&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(a,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(W([e,t,o],r.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):U([e,t,o],r.styled)}(n,s,a,o),o.reverseButtons&&(o.toast?(e.insertBefore(a,n),e.insertBefore(s,n)):(e.insertBefore(a,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),N(n,t.loaderHtml||\"\"),_(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);Q(e,o[`show${n}Button`],\"inline-block\"),N(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=r[t],_(e,o,`${t}Button`)}const we=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||W([document.documentElement,document.body],r[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in r?W(e,r[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),W(e,r.center)))}(o,t.position),function(e,t){t&&W(e,r[`grow-${t}`])}(o,t.grow),_(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const he=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],ge=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);Y(t),e.inputAutoFocus&&setTimeout(()=>{F(o)})},fe=(e,t)=>{const o=k();if(!o)return;const n=V(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&_(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=r[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&W(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return X(t,r[e]||r.input)},xe=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:f(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return xe(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(xe(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&xe(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");N(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=V(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&N(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;xe(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(a=o,parseInt(window.getComputedStyle(a).marginLeft)+parseInt(window.getComputedStyle(a).marginRight)),s=k();var a;s&&(e>n?s.style.width=`${e}px`:J(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Ee=(e,t)=>{const o=E();o&&(Z(o),_(o,t,\"htmlContainer\"),t.html?(ie(t.html,o),Y(o,\"block\")):t.text?(o.textContent=t.text,Y(o,\"block\")):K(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),s=!n||t.input!==n.input;he.forEach(e=>{const n=X(o,r[e]);n&&(fe(e,t.inputAttributes),n.className=r[e],s&&K(n))}),t.input&&(s&&ge(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(i))t.icon!==o&&U(e,n);W(e,t.icon&&i[t.icon]),Te(e,t),Le(),_(e,t,\"icon\")},Le=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Be=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Se(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Se({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&N(e,n)},Te=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])G(e,o,\"background-color\",t.iconColor);G(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Se=e=>`\u003Cdiv class=\"${r[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let $e=!1,Pe=0,Me=0,Oe=0,Ie=0;const De=e=>{const t=k();if(!t)return;const o=x();if(e.target===t||o&&o.contains(e.target)){$e=!0;const o=He(e);Pe=o.clientX,Me=o.clientY,Oe=parseInt(t.style.insetInlineStart)||0,Ie=parseInt(t.style.insetBlockStart)||0,W(t,\"swal2-dragging\")}},je=e=>{const t=k();if(t&&$e){let{clientX:o,clientY:s}=He(e);const a=o-Pe;t.style.insetInlineStart=`${Oe+(n.isRTL?-a:a)}px`,t.style.insetBlockStart=`${Ie+(s-Me)}px`}},qe=()=>{const e=k();$e=!1,U(e,\"swal2-dragging\")},He=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Ne=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){J(o,\"width\",t.width),n.style.width=\"100%\";const e=P();e&&n.insertBefore(e,x())}else J(n,\"width\",t.width);J(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),K(B()),ze(n,t),t.draggable&&!t.toast?(W(n,r.draggable),(e=>{e.addEventListener(\"mousedown\",De),document.body.addEventListener(\"mousemove\",je),e.addEventListener(\"mouseup\",qe),e.addEventListener(\"touchstart\",De),document.body.addEventListener(\"touchmove\",je),e.addEventListener(\"touchend\",qe)})(n)):(U(n,r.draggable),(e=>{e.removeEventListener(\"mousedown\",De),document.body.removeEventListener(\"mousemove\",je),e.removeEventListener(\"mouseup\",qe),e.removeEventListener(\"touchstart\",De),document.body.removeEventListener(\"touchmove\",je),e.removeEventListener(\"touchend\",qe)})(n))}},ze=(e,t)=>{const o=t.showClass||{};e.className=`${r.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(W([document.documentElement,document.body],r[\"toast-shown\"]),W(e,r.toast)):W(e,r.modal),_(e,t,\"popup\"),\"string\"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,r[`icon-${t.icon}`])},_e=e=>{const t=document.createElement(\"li\");return W(t,r[\"progress-step\"]),N(t,e),t},Ve=e=>{const t=document.createElement(\"li\");return W(t,r[\"progress-step-line\"]),e.progressStepsDistance&&J(t,\"width\",e.progressStepsDistance),t},Fe=(e,t)=>{var o;Ne(0,t),we(0,t),((e,t)=>{const o=L();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(Y(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,a)=>{const i=_e(e);if(o.appendChild(i),a===s&&W(i,r[\"active-progress-step\"]),a!==n.length-1){const e=Ve(t);o.appendChild(e)}})):K(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=x();if(n){if(o&&t.icon===o.icon)return Be(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(i).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void K(n);Y(n),Be(n,t),Ae(n,t),W(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Le)}else K(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(Y(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),J(o,\"width\",t.imageWidth),J(o,\"height\",t.imageHeight),o.className=r.image,_(o,t,\"image\")):K(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),Q(o,Boolean(t.title||t.titleText),\"block\"),t.title&&ie(t.title,o),t.titleText&&(o.innerText=t.titleText),_(o,t,\"title\"))})(0,t),((e,t)=>{const o=D();o&&(N(o,t.closeButtonHtml||\"\"),_(o,t,\"closeButton\"),Q(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Ee(e,t),de(0,t),((e,t)=>{const o=O();o&&(Z(o),Q(o,Boolean(t.footer),\"block\"),t.footer&&ie(t.footer,o),_(o,t,\"footer\"))})(0,t);const s=k();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},Re=()=>{var e;return null===(e=T())||void 0===e?void 0:e.click()},We=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Ue=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Xe=(e,t)=>{var o;const n=j();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Je=[\"ArrowRight\",\"ArrowDown\"],Ye=[\"ArrowLeft\",\"ArrowUp\"],Ke=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ge(t):[...Je,...Ye].includes(t.key)?Qe(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=V(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ge=e=>{const t=e.target,o=j();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Xe(n,-1):Xe(n,1),e.stopPropagation(),e.preventDefault()},Qe=e=>{const t=M(),o=T(),n=$(),s=S();if(!(t&&o&&n&&s))return;const a=[o,n,s];if(document.activeElement instanceof HTMLElement&&!a.includes(document.activeElement))return;const r=Je.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let i=document.activeElement;if(i){for(let e=0;e\u003Ct.children.length;e++){if(i=i[r],!i)return;if(i instanceof HTMLButtonElement&&ee(i))break}i instanceof HTMLButtonElement&&i.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(We.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=at(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},at=e=>{const t=e.target,o=b(),n=E();return!(!o||!n||rt(e)||it(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},rt=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),it=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=r[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,a){H()?bt(e,a):(s(o).then(()=>bt(e,a)),Ue(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),q()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(z(document.body,r.iosfix)){const e=parseInt(document.body.style.top,10);U(document.body,r.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),U([document.documentElement,document.body],[r.shown,r[\"height-auto\"],r[\"no-backdrop\"],r[\"toast-shown\"]])}function ut(e){e=ht(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||z(t,o.hideClass.popup))return!1;U(t,o.showClass.popup),W(t,o.hideClass.popup);const n=b();return U(n,o.showClass.backdrop),W(n,o.hideClass.backdrop),gt(e,t,o),!0};function wt(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},ht=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),gt=(e,t,o)=>{var s;const a=b(),r=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),r&&a?ft(e,t,a,Boolean(o.returnFocus),o.didClose):a&&dt(e,a,Boolean(o.returnFocus),o.didClose)},ft=(e,t,o,s,a)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,a);const r=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",r),t.removeEventListener(\"transitionend\",r))};t.addEventListener(\"animationend\",r),t.addEventListener(\"transitionend\",r)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Qo,t=k(),!t)return;const o=P();H()?K(x()):yt(t,e),Y(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=M(),n=P();o&&n&&(!t&&ee(T())&&(t=T()),Y(o),t&&(K(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),W([e,o],r.loading))},kt=e=>e.checked?1:0,xt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,Et=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=X(e,r.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,N(s,t),s.selected=Bt(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,Lt(e),t):\"radio\"===t.input&&function(e,t,o){const n=X(e,r.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],a=document.createElement(\"input\"),i=document.createElement(\"label\");a.type=\"radio\",a.name=r.radio,a.value=t,Bt(t,o.inputValue)&&(a.checked=!0);const l=document.createElement(\"span\");N(l,s),l.className=r.label,i.appendChild(a),i.appendChild(l),n.appendChild(i)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,Lt(e),t)};h(t.inputOptions)||f(t.inputOptions)?(vt(T()),g(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(K(o),g(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,Y(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",Y(o),o.focus(),e.hideLoading()}))};const Lt=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=Lt(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=Lt(n)),t.push([o,n])}),t},Bt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),Tt=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return xt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?St(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?$t(e,s):Ot(e,s)},St=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>g(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?$t(e,t):Ot(e,t)})},$t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt($()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Mt(e,t))):e.close({isDenied:!0,value:t})},Pt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Mt=(e,t)=>{e.rejectPromise(t)},Ot=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preConfirm(t,o.validationMessage))).then(o=>{ee(B())||!1===o?(e.hideLoading(),mt(e)):Pt(e,void 0===o?t:o)}).catch(t=>Mt(e,t))):Pt(e,t)};function It(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);K(t.loader),H()?e.icon&&Y(x()):Dt(t),U([t.popup,t.actions],r.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Dt=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?Y(o[0],\"inline-block\"):!ee(T())&&!ee($())&&!ee(S())&&K(e.actions)};function jt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?V(t.popup,e.input):null}function qt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Ht(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${r.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Nt(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function zt(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function _t(){Ht(this.getInput(),!1)}function Vt(){Ht(this.getInput(),!0)}function Ft(e){const t=me.domCache.get(this),o=me.innerParams.get(this);N(t.validationMessage,e),t.validationMessage.className=r[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&W(t.validationMessage,o.customClass.validationMessage),Y(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",r[\"validation-message\"]),F(n),W(n,r.inputerror))}function Rt(){const e=me.domCache.get(this);e.validationMessage&&K(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),U(t,r.inputerror))}const Wt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Ut=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Xt={allowEnterKey:void 0},Jt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Yt=e=>Object.prototype.hasOwnProperty.call(Wt,e),Kt=e=>-1!==Ut.indexOf(e),Zt=e=>Xt[e],Gt=e=>{Yt(e)||d(`Unknown parameter \"${e}\"`)},Qt=e=>{Jt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&w(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Gt(t),e.toast&&Qt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||z(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),a=Object.assign({},n,s);to(a),t&&(t.dataset.swal2Theme=a.theme),Fe(this,a),me.innerParams.set(this,a),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Kt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),ao(this)):ro(this)}const ao=e=>{ro(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ro=e=>{e.isAwaitingPromise?(io(me,e),e.isAwaitingPromise=!0):(io(tt,e),io(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},io=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:zt,disableInput:Vt,disableLoading:It,enableButtons:Nt,enableInput:_t,getInput:jt,handleAwaitingPromise:mt,hideLoading:It,rejectPromise:wt,resetValidationMessage:Rt,showValidationMessage:Ft,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(We.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const wo=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},ho=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(We.backdrop)}},go=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const fo=()=>{if(n.timeout)return(()=>{const e=I();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var xo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||go(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||go(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=S())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:M,getCancelButton:S,getCloseButton:D,getConfirmButton:T,getContainer:b,getDenyButton:$,getFocusableElements:j,getFooter:O,getHtmlContainer:E,getIcon:x,getIconContent:()=>y(r[\"icon-content\"]),getImage:A,getInputLabel:()=>y(r[\"input-label\"]),getLoader:P,getPopup:k,getProgressSteps:L,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:I,getTitle:C,getValidationMessage:B,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Kt,isValidParameter:Yt,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:fo,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?fo():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const Eo=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{Oo(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Wt&&\"boolean\"==typeof Wt[o]?\"false\"!==n:o in Wt&&\"object\"==typeof Wt[o]?JSON.parse(n):n)}),t},Lo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},Bo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{Oo(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},To=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(Oo(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},So=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(Oo(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},$o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(Oo(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{Oo(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},Po=(e,t)=>{const o={};for(const n in t){const s=t[n],a=e.querySelector(s);a&&(Oo(a,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=a.innerHTML.trim())}return o},Mo=e=>{const t=Eo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},Oo=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Io=e=>{var t,o;const s=b(),a=k();if(!s||!a)return;\"function\"==typeof e.willOpen&&e.willOpen(a),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",a);const r=window.getComputedStyle(document.body).overflowY;if(Ho(s,a,e),setTimeout(()=>{jo(s,a)},10),q()&&(qo(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,r),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),H()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(a))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",a)},Do=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Do),t.removeEventListener(\"transitionend\",Do),o.style.overflowY=\"auto\",U(o,r[\"no-transition\"]))},jo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Do),t.addEventListener(\"transitionend\",Do)):e.style.overflowY=\"auto\"},qo=(e,t,o)=>{(()=>{if(nt&&!z(document.body,r.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",W(document.body,r.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},Ho=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&W(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),Y(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&W(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):Y(t,\"grid\"),W([document.documentElement,document.body],r.shown),o.heightAuto&&o.backdrop&&!o.toast&&W([document.documentElement,document.body],r[\"height-auto\"])};var No=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),zo=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function _o(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=No),\"url\"===e.input&&(e.inputValidator=zo))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),re(e)}let Vo;var Fo=new WeakMap;class Ro{constructor(...t){if(o(this,Fo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;Vo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,a,r;this.params=n,this.isAwaitingPromise=!1,s=Fo,a=this,r=this._main(Vo.params),s.set(e(s,a),r)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),q()&&ot()}n.currentInstance=Vo;const o=Uo(e,t);_o(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Xo(Vo);return Fe(Vo,o),me.innerParams.set(Vo,o),Wo(Vo,s,o)}then(e){return t(Fo,this).then(e)}finally(e){return t(Fo,this).finally(e)}}const Wo=(e,t,o)=>new Promise((s,a)=>{const r=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,a),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?Tt(e,\"confirm\"):Ot(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Tt(e,\"deny\"):$t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(We.cancel)})(e,r)},t.closeButton.onclick=()=>{r(We.close)},((e,t,o)=>{e.toast?co(e,t,o):(wo(t),mo(t),ho(e,t,o))})(o,t,r),((e,t,o)=>{if(Ue(e),!t.toast){const n=e=>Ke(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:k();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,r),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?Et(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(h(t.inputValue)||f(t.inputValue))&&(vt(T()),At(e,t))})(e,o),Io(o),Jo(n,o,r),Yo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Uo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Mo(o),Object.assign(Ao(o),Lo(o),Bo(o),To(o),So(o),$o(o),Po(o,Eo))})(e),n=Object.assign({},Wt,t,o,e);return n.showClass=Object.assign({},Wt.showClass,n.showClass),n.hideClass=Object.assign({},Wt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Xo=e=>{const t={popup:k(),container:b(),actions:M(),confirmButton:T(),denyButton:$(),cancelButton:S(),loader:P(),closeButton:D(),validationMessage:B(),progressSteps:L()};return me.domCache.set(e,t),t},Jo=(e,t,o)=>{const n=I();K(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(Y(n),_(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Yo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Ko(e)||Zo(e,t)||Xe(-1,1)):(w(\"allowEnterKey\"),void Go())},Ko=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Go=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=zt,Ro.prototype.enableButtons=Nt,Ro.prototype.getInput=jt,Ro.prototype.disableInput=Vt,Ro.prototype.enableInput=_t,Ro.prototype.hideLoading=It,Ro.prototype.disableLoading=It,Ro.prototype.showValidationMessage=Ft,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=wt,Ro.prototype.update=oo,Ro.prototype._destroy=so,Object.assign(Ro,xo),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(Vo&&Vo[e])return Vo[e](...t)}}),Ro.DismissReason=We,Ro.version=\"11.26.17\";const Qo=Ro;return Qo.default=Qo,Qo}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var a=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&a>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var r=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){r.removeElement(e)},r.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var i=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?i:\"-\"+i,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},a=document.getElementsByClassName(\"toastify\"),r=0;r\u003Ca.length;r++){e=!0===n(a[r],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var i=a[r].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(a[r].style[e]=s[e]+\"px\",s[e]+=i+15):!0===n(a[r],\"toastify-left\")?(a[r].style[e]=t[e]+\"px\",t[e]+=i+15):(a[r].style[e]=o[e]+\"px\",o[e]+=i+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var a=t[n]={id:n,exports:{}};return e[n].call(a.exports,a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";const e=\"lp-hidden\",t=\"loading\",n=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},s=(t,o=0)=>{t&&(o?t.classList.remove(e):t.classList.add(e))},a=(e,o)=>{e&&(o?e.classList.add(t):e.classList.remove(t))},r=(e,t)=>{const o=(e=>{const t={},o=new FormData(e);for(const e of o.entries()){const n=e[0],s=o.getAll(n);t.hasOwnProperty(n)||(t[n]=s.join(\",\"))}return t})(e);return(e=>{const t=[],o=e.elements;for(let e=0;e\u003Co.length;e++){const n=o[e].name;n&&!t.includes(n)&&t.push(n)}return t})(e).forEach(e=>{o.hasOwnProperty(e)?\"\"===o[e][0]&&(delete o[e],delete t[e]):delete t[e]}),t={...t,...o}},i=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})};var l=o(8465),c=o.n(l),d=o(7736),u=o.n(d),p=o(5072),w=o.n(p),m=o(7825),h=o.n(m),g=o(7659),f=o.n(g),b=o(5056),v=o.n(b),y=o(540),k=o.n(y),x=o(1113),C=o.n(x),E=o(9455),A={};A.styleTagTransform=C(),A.setAttributes=v(),A.insert=f().bind(null,\"head\"),A.domAPI=h(),A.insertStyleElement=k(),w()(E.A,A),E.A&&E.A.locals&&E.A.locals;const L={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},B=(e,t=\"success\",o)=>{let n=L;o&&(n={...n,...o}),new(u())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()};let T,S=!1;const $=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};class P{constructor(){this.init()}static selectors={elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai?n(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}):n(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),this.events()}events(){P._loadedEvents||(P._loadedEvents=!0,i(\"click\",[{selector:\".lp-btn-warning-enable-ai\",class:this,callBack:this.showPopupEnableAI.name},{selector:\".lp-btn-generate-course-with-ai\",class:this,callBack:this.showPopupCreateFullCourse.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateDataCourse.name},{selector:\".lp-btn-create-course\",class:this,callBack:this.createCourse.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:t,target:o}=e,n=lpData.i18n.confirm_close_ai;S?confirm(n)&&c().close():c().close()}}]))}showPopupEnableAI(){const e=document.querySelector(\"#lp-tmpl-must-enable-ai\");e?c().fire({html:e.innerHTML,width:\"420px\",showCloseButton:!1,showConfirmButton:!1}):console.error(\"Enable OpenAI Modal Template not found!\")}showPopupCreateFullCourse(){const e=document.querySelector(\"#lp-tmpl-create-course-ai\");e?c().fire({html:e.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{const e=c().getPopup();e.click();const t=e.querySelector('select[name=\"target_audience\"]');t&&$?.target_audience&&t.tomselect.setValue($.target_audience);const o=e.querySelector('select[name=\"tone\"]');o&&$?.tone&&o.tomselect.setValue($.tone);const n=e.querySelector('select[name=\"language\"]');n&&$?.language&&n.tomselect.setValue($.language),t.addEventListener(\"change\",e=>{$.target_audience=t.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))}),o.addEventListener(\"change\",e=>{$.tone=o.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))}),n.addEventListener(\"change\",e=>{const t=n.tomselect.getValue();$.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))})}}).then(e=>{e.isDismissed&&S&&(S=!1)}):console.error(\"AI Create Full Course Modal Template not found!\")}showStep(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(\".button-actions\"),a=n.closest(P.selectors.elGenerateDataAiWrap);let r=parseInt(n.dataset.step);const i=o.dataset.action;\"next\"===i?r++:\"prev\"===i&&r--,n.dataset.step=r;const l=o.closest(\"form\"),c=l.querySelector(`.step-content[data-step=\"${r}\"]`),d=a.querySelector(`.step-item[data-step=\"${r}\"]`);l.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\"),a.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),d.classList.add(\"active\"),o.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(r)?s(e,1):s(e,0)})}generatePrompt(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=r(n,s);const i={success:e=>{const{message:t,status:o,data:s}=e;B(t,o),\"success\"===o&&(n.querySelector(\".lp-btn-step[data-action=next]\").click(),n.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=s)},error:e=>{B(e,\"error\")},completed:()=>{a(o,!1)}};window.lpAJAXG.fetchAJAX(s,i)}generateDataCourse(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=o.closest(\"form\");let i=JSON.parse(o.dataset.send);i=r(n,i);const l=n.querySelector(\".lp-btn-step[data-action=prev]\");s(l,0);const c={success:e=>{const{message:t,status:o,data:s}=e;S&&B(t,o),\"success\"===o&&(T=s.lp_structure_course,n.querySelector(\".lp-ai-generated-results\").innerHTML=s.lp_html_preview,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{B(e,\"error\")},completed:()=>{a(o,!1),s(l,1),S=!1}};S=!0,window.lpAJAXG.fetchAJAX(i,c)}createCourse(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=JSON.parse(o.dataset.send);n.lp_structure_course=T;const r=o.closest(\"form\").querySelector(\".lp-btn-step[data-action=prev]\");let i;s(r,0),i=window.outerWidth\u003C768?\"90%\":\"30%\";const l=document.querySelector(\"#lp-tmpl-creating-course-ai\");c().fire({html:l.innerHTML,showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,width:i});const d={success:e=>{const{message:t,status:o,data:n}=e;c().close(),B(t,o),\"success\"===o?setTimeout(()=>{window.location.href=n.edit_course_url},2e3):s(r,1)},error:e=>{B(e,\"error\"),s(r,1)},completed:()=>{a(o,!1)}};window.lpAJAXG.fetchAJAX(n,d)}}class M{constructor(){this.isRequesting=!1,this.activeCourseId=0,this.init()}static selectors={wrap:\"#lp-modal-enrolled-wrap\",form:\"#lp-modal-enrolled-form\",toolbarTemplate:\"#lp-tmpl-enrolled-students-toolbar-modal\",targetTemplate:\"#lp-tmpl-enrolled-students-target-modal\",toolbar:\".lp-enrolled-students-table-toolbar--modal\",courseTrigger:\".lp-btn-view-students\",searchInput:\"#lp-modal-enrolled-search-input\",startDateInput:\"#lp-modal-enrolled-filter-start-date\",endDateInput:\"#lp-modal-enrolled-filter-end-date\",searchBtn:\".lp-enrolled-btn-search-modal\",clearBtn:\".lp-enrolled-btn-clear-modal\",modalSearchFields:\"#lp-modal-enrolled-search-input, #lp-modal-enrolled-filter-start-date, #lp-modal-enrolled-filter-end-date\"};setButtonLoadingState(e,t){e&&(a(e,t?1:0),e.disabled=!!t)}init(){M._loadedEvents||(M._loadedEvents=!0,i(\"click\",[{selector:M.selectors.courseTrigger,class:this,callBack:this.handleOpenModal.name},{selector:M.selectors.searchBtn,class:this,callBack:this.handleModalSearch.name},{selector:M.selectors.clearBtn,class:this,callBack:this.handleModalClear.name}]),i(\"keydown\",[{selector:M.selectors.modalSearchFields,class:this,callBack:this.handleModalSearchOnEnter.name,checkIsEventEnter:!0}]),i(\"change\",[{selector:M.selectors.startDateInput,class:this,callBack:this.checkDatesRange.name},{selector:M.selectors.endDateInput,class:this,callBack:this.checkDatesRange.name}]))}handleOpenModal(e){const t=e?.target?.closest(M.selectors.courseTrigger);if(!t||this.isRequesting||t.classList.contains(\"loading\")||t.disabled)return;const o=parseInt(t.dataset.courseId,10)||0;if(!o)return;const n=t.dataset.courseTitle||\"\";this.activeCourseId=o,this.setButtonLoadingState(t,!0),this.openModal(o,n,t)}handleModalSearch(e){const t=e?.target?.closest(M.selectors.searchBtn);t&&this.activeCourseId&&(e?.e&&e.e.preventDefault(),this.isRequesting||t.classList.contains(\"loading\")||t.disabled||(this.setButtonLoadingState(t,!0),this.loadEnrolledStudents(this.activeCourseId,1,t)))}handleModalSearchOnEnter(e){e?.e&&e.e.preventDefault();const t=this.getModalForm();if(!t)return;const o=t.querySelector(M.selectors.searchBtn);o&&this.handleModalSearch({...e,target:o})}handleModalClear(e){const t=e?.target?.closest(M.selectors.clearBtn),o=this.getModalForm();t&&o&&this.activeCourseId&&(e?.e&&e.e.preventDefault(),this.isRequesting||t.classList.contains(\"loading\")||t.disabled||(o.reset(),this.setButtonLoadingState(t,!0),this.loadEnrolledStudents(this.activeCourseId,1,t)))}getModalPopup(){return c().getPopup?c().getPopup():null}getModalToolbarHtml(){const e=document.querySelector(M.selectors.toolbarTemplate);return e?e.innerHTML:\"\"}getModalTargetHtml(){const e=document.querySelector(M.selectors.targetTemplate);return e?e.innerHTML:\"\"}getAjaxHandle(){const e=window.lpAJAXG;return e&&\"function\"==typeof e.getDataSetCurrent&&\"function\"==typeof e.setDataSetCurrent&&\"function\"==typeof e.showHideLoading&&\"function\"==typeof e.fetchAJAX?e:null}getModalForm(){const e=this.getModalPopup();return e?e.querySelector(M.selectors.form):null}getModalFilterArgs(e={}){const t=this.getModalForm();return t?r(t,e):e}loadEnrolledStudents(e,t,o=null){const n=document.querySelector(M.selectors.wrap),s=n?.querySelector(\".lp-target\"),a=this.getAjaxHandle();if(!n||!s||!a||this.isRequesting)return;this.isRequesting=!0,o&&this.setButtonLoadingState(o,!0);const r=a.getDataSetCurrent(s);r.args=this.getModalFilterArgs(r.args||{}),r.args.course_id=parseInt(e,10)||0,r.args.paged=t,a.setDataSetCurrent(s,r),a.showHideLoading(s,1);const i={success:e=>{s.innerHTML=e.data.content},error:e=>{console.error(e)},completed:()=>{this.isRequesting=!1,a.showHideLoading(s,0),o&&this.setButtonLoadingState(o,!1)}};a.fetchAJAX(r,i)}openModal(e,t,o=null){const n=this.getModalToolbarHtml(),s=this.getModalTargetHtml();n&&s?(this.activeCourseId=parseInt(e,10)||0,c().fire({title:`${t}`,html:n+s,width:\"80%\",showConfirmButton:!1,showCloseButton:!0,didOpen:()=>{this.loadEnrolledStudents(this.activeCourseId,1,o)},didClose:()=>{this.activeCourseId=0,o&&this.setButtonLoadingState(o,!1)}})):o&&this.setButtonLoadingState(o,!1)}checkDatesRange(e){const{e:t}=e,o=t?.target;if(!o)return;const n=o.closest(M.selectors.form);if(!n)return;const s=n.querySelector(M.selectors.startDateInput),a=n.querySelector(M.selectors.endDateInput);o===s?s.value?(a.min=s.value,a.value&&a.value\u003Cs.value&&(a.value=s.value)):a.min=\"\":o===a&&(a.value?(s.max=a.value,s.value&&s.value>a.value&&(s.value=a.value)):s.max=\"\")}}new P,new M})()})();\n\\ No newline at end of file\n+(()=>{var e={9455(e,t,o){\"use strict\";o.d(t,{A:()=>i});var n=o(1601),s=o.n(n),a=o(6314),r=o.n(a)()(s());r.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const i=r},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var r={};if(n)for(var i=0;i\u003Cthis.length;i++){var l=this[i][0];null!=l&&(r[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&r[d[0]]||(void 0!==a&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=a),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var a={},r=[],i=0;i\u003Ce.length;i++){var l=e[i],c=n.base?l[0]+n.base:l[0],d=a[c]||0,u=\"\".concat(c,\" \").concat(d);a[c]=d+1;var p=o(u),w={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(w);else{var m=s(w,n);n.byIndex=i,t.splice(i,0,{identifier:u,updater:m,references:1})}r.push(u)}return r}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var a=n(e=e||[],s=s||{});return function(e){e=e||[];for(var r=0;r\u003Ca.length;r++){var i=o(a[r]);t[i].references--}for(var l=n(e,s),c=0;c\u003Ca.length;c++){var d=o(a[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}a=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var a=o.sourceMap;a&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),a=\"swal2-\",r=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=a+t,e),{}),i=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=a+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],w=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,h=e=>e&&\"function\"==typeof e.toPromise,g=e=>h(e)?e.toPromise():Promise.resolve(e),f=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${r.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(r.popup),x=()=>y(r.icon),C=()=>y(r.title),E=()=>y(r[\"html-container\"]),A=()=>y(r.image),L=()=>y(r[\"progress-steps\"]),B=()=>y(r[\"validation-message\"]),T=()=>v(`.${r.actions} .${r.confirm}`),S=()=>v(`.${r.actions} .${r.cancel}`),$=()=>v(`.${r.actions} .${r.deny}`),P=()=>v(`.${r.loader}`),M=()=>y(r.actions),O=()=>y(r.footer),I=()=>y(r[\"timer-progress-bar\"]),D=()=>y(r.close),j=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},q=()=>_(document.body,r.shown)&&!_(document.body,r[\"toast-shown\"])&&!_(document.body,r[\"no-backdrop\"]),H=()=>{const e=k();return!!e&&_(e,r.toast)},N=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},_=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},z=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(r).includes(o)||Object.values(i).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?W(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},V=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${r.popup} > .${r[t]}`);case\"checkbox\":return e.querySelector(`.${r.popup} > .${r.checkbox} input`);case\"radio\":return e.querySelector(`.${r.popup} > .${r.radio} input:checked`)||e.querySelector(`.${r.popup} > .${r.radio} input:first-child`);case\"range\":return e.querySelector(`.${r.popup} > .${r.range} input`);default:return e.querySelector(`.${r.popup} > .${r.input}`)}},F=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},W=(e,t)=>{R(e,t,!0)},U=(e,t)=>{R(e,t,!1)},X=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&_(n,t))return n}},J=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},Y=(e,t=\"flex\")=>{e&&(e.style.display=t)},K=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{Q(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},G=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},Q=(e,t,o=\"flex\")=>{t?Y(e,o):K(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=I();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${r.title}\" aria-describedby=\"${r[\"html-container\"]}\" class=\"${r.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${r.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${r[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${r.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${r.image}\" \u002F>\\n   \u003Ch2 class=\"${r.title}\" id=\"${r.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${r[\"html-container\"]}\" id=\"${r[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${r.input}\" id=\"${r.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${r.file}\" \u002F>\\n   \u003Cdiv class=\"${r.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${r.select}\" id=\"${r.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${r.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${r.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${r.checkbox}\" \u002F>\\n     \u003Cspan class=\"${r.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${r.textarea}\" id=\"${r.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${r[\"validation-message\"]}\" id=\"${r[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r.actions}\">\\n     \u003Cdiv class=\"${r.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${r.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${r.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${r.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${r[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${r[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ae=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},re=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),U([document.documentElement,document.body],[r[\"no-backdrop\"],r[\"toast-shown\"],r[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=r.container,t&&W(o,r[\"no-transition\"]),N(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(W(b(),r.rtl),n.isRTL=!0)})(s),(()=>{const e=k();if(!e)return;const t=X(e,r.input),o=X(e,r.file),n=e.querySelector(`.${r.range} input`),s=e.querySelector(`.${r.range} output`),a=X(e,r.select),i=e.querySelector(`.${r.checkbox} input`),l=X(e,r.textarea);t&&(t.oninput=ae),o&&(o.onchange=ae),a&&(a.onchange=ae),i&&(i.onchange=ae),l&&(l.oninput=ae),n&&s&&(n.oninput=()=>{ae(),s.value=n.value},n.onchange=()=>{ae(),s.value=n.value})})()},ie=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&N(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):N(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=M(),n=P();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?Y(o):K(o),z(o,t,\"actions\"),function(e,t,o){const n=T(),s=$(),a=S();n&&s&&a&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(a,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(W([e,t,o],r.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):U([e,t,o],r.styled)}(n,s,a,o),o.reverseButtons&&(o.toast?(e.insertBefore(a,n),e.insertBefore(s,n)):(e.insertBefore(a,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),N(n,t.loaderHtml||\"\"),z(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);Q(e,o[`show${n}Button`],\"inline-block\"),N(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=r[t],z(e,o,`${t}Button`)}const we=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||W([document.documentElement,document.body],r[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in r?W(e,r[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),W(e,r.center)))}(o,t.position),function(e,t){t&&W(e,r[`grow-${t}`])}(o,t.grow),z(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const he=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],ge=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);Y(t),e.inputAutoFocus&&setTimeout(()=>{F(o)})},fe=(e,t)=>{const o=k();if(!o)return;const n=V(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&z(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=r[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&W(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return X(t,r[e]||r.input)},xe=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:f(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return xe(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(xe(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&xe(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");N(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=V(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&N(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;xe(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(a=o,parseInt(window.getComputedStyle(a).marginLeft)+parseInt(window.getComputedStyle(a).marginRight)),s=k();var a;s&&(e>n?s.style.width=`${e}px`:J(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Ee=(e,t)=>{const o=E();o&&(Z(o),z(o,t,\"htmlContainer\"),t.html?(ie(t.html,o),Y(o,\"block\")):t.text?(o.textContent=t.text,Y(o,\"block\")):K(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),s=!n||t.input!==n.input;he.forEach(e=>{const n=X(o,r[e]);n&&(fe(e,t.inputAttributes),n.className=r[e],s&&K(n))}),t.input&&(s&&ge(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(i))t.icon!==o&&U(e,n);W(e,t.icon&&i[t.icon]),Te(e,t),Le(),z(e,t,\"icon\")},Le=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Be=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Se(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Se({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&N(e,n)},Te=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])G(e,o,\"background-color\",t.iconColor);G(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Se=e=>`\u003Cdiv class=\"${r[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let $e=!1,Pe=0,Me=0,Oe=0,Ie=0;const De=e=>{const t=k();if(!t)return;const o=x();if(e.target===t||o&&o.contains(e.target)){$e=!0;const o=He(e);Pe=o.clientX,Me=o.clientY,Oe=parseInt(t.style.insetInlineStart)||0,Ie=parseInt(t.style.insetBlockStart)||0,W(t,\"swal2-dragging\")}},je=e=>{const t=k();if(t&&$e){let{clientX:o,clientY:s}=He(e);const a=o-Pe;t.style.insetInlineStart=`${Oe+(n.isRTL?-a:a)}px`,t.style.insetBlockStart=`${Ie+(s-Me)}px`}},qe=()=>{const e=k();$e=!1,U(e,\"swal2-dragging\")},He=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Ne=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){J(o,\"width\",t.width),n.style.width=\"100%\";const e=P();e&&n.insertBefore(e,x())}else J(n,\"width\",t.width);J(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),K(B()),_e(n,t),t.draggable&&!t.toast?(W(n,r.draggable),(e=>{e.addEventListener(\"mousedown\",De),document.body.addEventListener(\"mousemove\",je),e.addEventListener(\"mouseup\",qe),e.addEventListener(\"touchstart\",De),document.body.addEventListener(\"touchmove\",je),e.addEventListener(\"touchend\",qe)})(n)):(U(n,r.draggable),(e=>{e.removeEventListener(\"mousedown\",De),document.body.removeEventListener(\"mousemove\",je),e.removeEventListener(\"mouseup\",qe),e.removeEventListener(\"touchstart\",De),document.body.removeEventListener(\"touchmove\",je),e.removeEventListener(\"touchend\",qe)})(n))}},_e=(e,t)=>{const o=t.showClass||{};e.className=`${r.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(W([document.documentElement,document.body],r[\"toast-shown\"]),W(e,r.toast)):W(e,r.modal),z(e,t,\"popup\"),\"string\"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,r[`icon-${t.icon}`])},ze=e=>{const t=document.createElement(\"li\");return W(t,r[\"progress-step\"]),N(t,e),t},Ve=e=>{const t=document.createElement(\"li\");return W(t,r[\"progress-step-line\"]),e.progressStepsDistance&&J(t,\"width\",e.progressStepsDistance),t},Fe=(e,t)=>{var o;Ne(0,t),we(0,t),((e,t)=>{const o=L();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(Y(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,a)=>{const i=ze(e);if(o.appendChild(i),a===s&&W(i,r[\"active-progress-step\"]),a!==n.length-1){const e=Ve(t);o.appendChild(e)}})):K(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=x();if(n){if(o&&t.icon===o.icon)return Be(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(i).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void K(n);Y(n),Be(n,t),Ae(n,t),W(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Le)}else K(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(Y(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),J(o,\"width\",t.imageWidth),J(o,\"height\",t.imageHeight),o.className=r.image,z(o,t,\"image\")):K(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),Q(o,Boolean(t.title||t.titleText),\"block\"),t.title&&ie(t.title,o),t.titleText&&(o.innerText=t.titleText),z(o,t,\"title\"))})(0,t),((e,t)=>{const o=D();o&&(N(o,t.closeButtonHtml||\"\"),z(o,t,\"closeButton\"),Q(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Ee(e,t),de(0,t),((e,t)=>{const o=O();o&&(Z(o),Q(o,Boolean(t.footer),\"block\"),t.footer&&ie(t.footer,o),z(o,t,\"footer\"))})(0,t);const s=k();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},Re=()=>{var e;return null===(e=T())||void 0===e?void 0:e.click()},We=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Ue=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Xe=(e,t)=>{var o;const n=j();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Je=[\"ArrowRight\",\"ArrowDown\"],Ye=[\"ArrowLeft\",\"ArrowUp\"],Ke=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ge(t):[...Je,...Ye].includes(t.key)?Qe(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=V(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ge=e=>{const t=e.target,o=j();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Xe(n,-1):Xe(n,1),e.stopPropagation(),e.preventDefault()},Qe=e=>{const t=M(),o=T(),n=$(),s=S();if(!(t&&o&&n&&s))return;const a=[o,n,s];if(document.activeElement instanceof HTMLElement&&!a.includes(document.activeElement))return;const r=Je.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let i=document.activeElement;if(i){for(let e=0;e\u003Ct.children.length;e++){if(i=i[r],!i)return;if(i instanceof HTMLButtonElement&&ee(i))break}i instanceof HTMLButtonElement&&i.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(We.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=at(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},at=e=>{const t=e.target,o=b(),n=E();return!(!o||!n||rt(e)||it(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},rt=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),it=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=r[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,a){H()?bt(e,a):(s(o).then(()=>bt(e,a)),Ue(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),q()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(_(document.body,r.iosfix)){const e=parseInt(document.body.style.top,10);U(document.body,r.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),U([document.documentElement,document.body],[r.shown,r[\"height-auto\"],r[\"no-backdrop\"],r[\"toast-shown\"]])}function ut(e){e=ht(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||_(t,o.hideClass.popup))return!1;U(t,o.showClass.popup),W(t,o.hideClass.popup);const n=b();return U(n,o.showClass.backdrop),W(n,o.hideClass.backdrop),gt(e,t,o),!0};function wt(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},ht=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),gt=(e,t,o)=>{var s;const a=b(),r=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),r&&a?ft(e,t,a,Boolean(o.returnFocus),o.didClose):a&&dt(e,a,Boolean(o.returnFocus),o.didClose)},ft=(e,t,o,s,a)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,a);const r=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",r),t.removeEventListener(\"transitionend\",r))};t.addEventListener(\"animationend\",r),t.addEventListener(\"transitionend\",r)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Qo,t=k(),!t)return;const o=P();H()?K(x()):yt(t,e),Y(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=M(),n=P();o&&n&&(!t&&ee(T())&&(t=T()),Y(o),t&&(K(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),W([e,o],r.loading))},kt=e=>e.checked?1:0,xt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,Et=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=X(e,r.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,N(s,t),s.selected=Bt(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,Lt(e),t):\"radio\"===t.input&&function(e,t,o){const n=X(e,r.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],a=document.createElement(\"input\"),i=document.createElement(\"label\");a.type=\"radio\",a.name=r.radio,a.value=t,Bt(t,o.inputValue)&&(a.checked=!0);const l=document.createElement(\"span\");N(l,s),l.className=r.label,i.appendChild(a),i.appendChild(l),n.appendChild(i)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,Lt(e),t)};h(t.inputOptions)||f(t.inputOptions)?(vt(T()),g(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(K(o),g(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,Y(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",Y(o),o.focus(),e.hideLoading()}))};const Lt=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=Lt(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=Lt(n)),t.push([o,n])}),t},Bt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),Tt=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return xt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?St(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?$t(e,s):Ot(e,s)},St=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>g(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?$t(e,t):Ot(e,t)})},$t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt($()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Mt(e,t))):e.close({isDenied:!0,value:t})},Pt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Mt=(e,t)=>{e.rejectPromise(t)},Ot=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preConfirm(t,o.validationMessage))).then(o=>{ee(B())||!1===o?(e.hideLoading(),mt(e)):Pt(e,void 0===o?t:o)}).catch(t=>Mt(e,t))):Pt(e,t)};function It(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);K(t.loader),H()?e.icon&&Y(x()):Dt(t),U([t.popup,t.actions],r.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Dt=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?Y(o[0],\"inline-block\"):!ee(T())&&!ee($())&&!ee(S())&&K(e.actions)};function jt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?V(t.popup,e.input):null}function qt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Ht(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${r.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Nt(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function _t(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function zt(){Ht(this.getInput(),!1)}function Vt(){Ht(this.getInput(),!0)}function Ft(e){const t=me.domCache.get(this),o=me.innerParams.get(this);N(t.validationMessage,e),t.validationMessage.className=r[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&W(t.validationMessage,o.customClass.validationMessage),Y(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",r[\"validation-message\"]),F(n),W(n,r.inputerror))}function Rt(){const e=me.domCache.get(this);e.validationMessage&&K(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),U(t,r.inputerror))}const Wt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Ut=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Xt={allowEnterKey:void 0},Jt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Yt=e=>Object.prototype.hasOwnProperty.call(Wt,e),Kt=e=>-1!==Ut.indexOf(e),Zt=e=>Xt[e],Gt=e=>{Yt(e)||d(`Unknown parameter \"${e}\"`)},Qt=e=>{Jt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&w(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Gt(t),e.toast&&Qt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||_(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),a=Object.assign({},n,s);to(a),t&&(t.dataset.swal2Theme=a.theme),Fe(this,a),me.innerParams.set(this,a),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Kt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),ao(this)):ro(this)}const ao=e=>{ro(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ro=e=>{e.isAwaitingPromise?(io(me,e),e.isAwaitingPromise=!0):(io(tt,e),io(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},io=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:_t,disableInput:Vt,disableLoading:It,enableButtons:Nt,enableInput:zt,getInput:jt,handleAwaitingPromise:mt,hideLoading:It,rejectPromise:wt,resetValidationMessage:Rt,showValidationMessage:Ft,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(We.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const wo=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},ho=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(We.backdrop)}},go=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const fo=()=>{if(n.timeout)return(()=>{const e=I();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var xo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||go(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||go(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=S())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:M,getCancelButton:S,getCloseButton:D,getConfirmButton:T,getContainer:b,getDenyButton:$,getFocusableElements:j,getFooter:O,getHtmlContainer:E,getIcon:x,getIconContent:()=>y(r[\"icon-content\"]),getImage:A,getInputLabel:()=>y(r[\"input-label\"]),getLoader:P,getPopup:k,getProgressSteps:L,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:I,getTitle:C,getValidationMessage:B,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Kt,isValidParameter:Yt,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:fo,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?fo():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const Eo=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{Oo(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Wt&&\"boolean\"==typeof Wt[o]?\"false\"!==n:o in Wt&&\"object\"==typeof Wt[o]?JSON.parse(n):n)}),t},Lo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},Bo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{Oo(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},To=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(Oo(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},So=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(Oo(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},$o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(Oo(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{Oo(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},Po=(e,t)=>{const o={};for(const n in t){const s=t[n],a=e.querySelector(s);a&&(Oo(a,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=a.innerHTML.trim())}return o},Mo=e=>{const t=Eo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},Oo=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Io=e=>{var t,o;const s=b(),a=k();if(!s||!a)return;\"function\"==typeof e.willOpen&&e.willOpen(a),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",a);const r=window.getComputedStyle(document.body).overflowY;if(Ho(s,a,e),setTimeout(()=>{jo(s,a)},10),q()&&(qo(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,r),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),H()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(a))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",a)},Do=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Do),t.removeEventListener(\"transitionend\",Do),o.style.overflowY=\"auto\",U(o,r[\"no-transition\"]))},jo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Do),t.addEventListener(\"transitionend\",Do)):e.style.overflowY=\"auto\"},qo=(e,t,o)=>{(()=>{if(nt&&!_(document.body,r.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",W(document.body,r.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},Ho=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&W(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),Y(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&W(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):Y(t,\"grid\"),W([document.documentElement,document.body],r.shown),o.heightAuto&&o.backdrop&&!o.toast&&W([document.documentElement,document.body],r[\"height-auto\"])};var No=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),_o=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function zo(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=No),\"url\"===e.input&&(e.inputValidator=_o))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),re(e)}let Vo;var Fo=new WeakMap;class Ro{constructor(...t){if(o(this,Fo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;Vo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,a,r;this.params=n,this.isAwaitingPromise=!1,s=Fo,a=this,r=this._main(Vo.params),s.set(e(s,a),r)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),q()&&ot()}n.currentInstance=Vo;const o=Uo(e,t);zo(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Xo(Vo);return Fe(Vo,o),me.innerParams.set(Vo,o),Wo(Vo,s,o)}then(e){return t(Fo,this).then(e)}finally(e){return t(Fo,this).finally(e)}}const Wo=(e,t,o)=>new Promise((s,a)=>{const r=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,a),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?Tt(e,\"confirm\"):Ot(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Tt(e,\"deny\"):$t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(We.cancel)})(e,r)},t.closeButton.onclick=()=>{r(We.close)},((e,t,o)=>{e.toast?co(e,t,o):(wo(t),mo(t),ho(e,t,o))})(o,t,r),((e,t,o)=>{if(Ue(e),!t.toast){const n=e=>Ke(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:k();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,r),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?Et(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(h(t.inputValue)||f(t.inputValue))&&(vt(T()),At(e,t))})(e,o),Io(o),Jo(n,o,r),Yo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Uo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Mo(o),Object.assign(Ao(o),Lo(o),Bo(o),To(o),So(o),$o(o),Po(o,Eo))})(e),n=Object.assign({},Wt,t,o,e);return n.showClass=Object.assign({},Wt.showClass,n.showClass),n.hideClass=Object.assign({},Wt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Xo=e=>{const t={popup:k(),container:b(),actions:M(),confirmButton:T(),denyButton:$(),cancelButton:S(),loader:P(),closeButton:D(),validationMessage:B(),progressSteps:L()};return me.domCache.set(e,t),t},Jo=(e,t,o)=>{const n=I();K(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(Y(n),z(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Yo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Ko(e)||Zo(e,t)||Xe(-1,1)):(w(\"allowEnterKey\"),void Go())},Ko=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Go=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=_t,Ro.prototype.enableButtons=Nt,Ro.prototype.getInput=jt,Ro.prototype.disableInput=Vt,Ro.prototype.enableInput=zt,Ro.prototype.hideLoading=It,Ro.prototype.disableLoading=It,Ro.prototype.showValidationMessage=Ft,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=wt,Ro.prototype.update=oo,Ro.prototype._destroy=so,Object.assign(Ro,xo),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(Vo&&Vo[e])return Vo[e](...t)}}),Ro.DismissReason=We,Ro.version=\"11.26.17\";const Qo=Ro;return Qo.default=Qo,Qo}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var a=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&a>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var r=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){r.removeElement(e)},r.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var i=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?i:\"-\"+i,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},a=document.getElementsByClassName(\"toastify\"),r=0;r\u003Ca.length;r++){e=!0===n(a[r],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var i=a[r].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(a[r].style[e]=s[e]+\"px\",s[e]+=i+15):!0===n(a[r],\"toastify-left\")?(a[r].style[e]=t[e]+\"px\",t[e]+=i+15):(a[r].style[e]=o[e]+\"px\",o[e]+=i+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var a=t[n]={id:n,exports:{}};return e[n].call(a.exports,a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";const e=\"lp-hidden\",t=\"loading\",n=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},s=(t,o=0)=>{t&&(o?t.classList.remove(e):t.classList.add(e))},a=(e,o)=>{e&&(o?e.classList.add(t):e.classList.remove(t))},r=(e,t)=>{const o=(e=>{const t={},o=new FormData(e);for(const e of o.entries()){const n=e[0],s=o.getAll(n);t.hasOwnProperty(n)||(t[n]=s.join(\",\"))}return t})(e);return(e=>{const t=[],o=e.elements;for(let e=0;e\u003Co.length;e++){const n=o[e].name;n&&!t.includes(n)&&t.push(n)}return t})(e).forEach(e=>{o.hasOwnProperty(e)?\"\"===o[e][0]&&(delete o[e],delete t[e]):delete t[e]}),t={...t,...o}},i=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})};var l=o(8465),c=o.n(l),d=o(7736),u=o.n(d),p=o(5072),w=o.n(p),m=o(7825),h=o.n(m),g=o(7659),f=o.n(g),b=o(5056),v=o.n(b),y=o(540),k=o.n(y),x=o(1113),C=o.n(x),E=o(9455),A={};A.styleTagTransform=C(),A.setAttributes=v(),A.insert=f().bind(null,\"head\"),A.domAPI=h(),A.insertStyleElement=k(),w()(E.A,A),E.A&&E.A.locals&&E.A.locals;const L={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},B=(e,t=\"success\",o)=>{let n=L;o&&(n={...n,...o}),new(u())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()};let T,S=!1;const $=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};class P{constructor(e={}){this.options={autoInsertButton:!0,isCourseBuilder:!1,redirectDelayMs:2e3,...e},this.init()}static selectors={elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){this.options.autoInsertButton&&(lpData?.enable_open_ai?n(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}):n(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)})),this.events()}events(){P._loadedEvents||(P._loadedEvents=!0,i(\"click\",[{selector:\".lp-btn-warning-enable-ai\",class:this,callBack:this.showPopupEnableAI.name},{selector:\".lp-btn-generate-course-with-ai\",class:this,callBack:this.showPopupCreateFullCourse.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateDataCourse.name},{selector:\".lp-btn-create-course\",class:this,callBack:this.createCourse.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:t,target:o}=e,n=lpData?.i18n?.confirm_close_ai||\"Are you sure you want to close? Generate data will stop.\";S?confirm(n)&&c().close():c().close()}}]))}showPopupEnableAI(){const e=document.querySelector(\"#lp-tmpl-must-enable-ai\");e?c().fire({html:e.innerHTML,width:\"420px\",showCloseButton:!1,showConfirmButton:!1}):console.error(\"Enable OpenAI Modal Template not found!\")}showPopupCreateFullCourse(){const e=document.querySelector(\"#lp-tmpl-create-course-ai\");e?c().fire({html:e.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{const e=c().getPopup();e.click();const t=e.querySelector('select[name=\"target_audience\"]');t&&$?.target_audience&&t.tomselect.setValue($.target_audience);const o=e.querySelector('select[name=\"tone\"]');o&&$?.tone&&o.tomselect.setValue($.tone);const n=e.querySelector('select[name=\"language\"]');n&&$?.language&&n.tomselect.setValue($.language),t.addEventListener(\"change\",e=>{$.target_audience=t.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))}),o.addEventListener(\"change\",e=>{$.tone=o.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))}),n.addEventListener(\"change\",e=>{const t=n.tomselect.getValue();$.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify($))})}}).then(e=>{e.isDismissed&&S&&(S=!1)}):console.error(\"AI Create Full Course Modal Template not found!\")}showStep(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(\".button-actions\"),a=n.closest(P.selectors.elGenerateDataAiWrap);let r=parseInt(n.dataset.step);const i=o.dataset.action;\"next\"===i?r++:\"prev\"===i&&r--,n.dataset.step=r;const l=o.closest(\"form\"),c=l.querySelector(`.step-content[data-step=\"${r}\"]`),d=a.querySelector(`.step-item[data-step=\"${r}\"]`);l.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\"),a.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),d.classList.add(\"active\"),o.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(r)?s(e,1):s(e,0)})}generatePrompt(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=r(n,s);const i={success:e=>{const{message:t,status:o,data:s}=e;B(t,o),\"success\"===o&&(n.querySelector(\".lp-btn-step[data-action=next]\").click(),n.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=s)},error:e=>{B(e,\"error\")},completed:()=>{a(o,!1)}};window.lpAJAXG.fetchAJAX(s,i)}generateDataCourse(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=o.closest(\"form\");let i=JSON.parse(o.dataset.send);i=r(n,i);const l=n.querySelector(\".lp-btn-step[data-action=prev]\");s(l,0);const c={success:e=>{const{message:t,status:o,data:s}=e;S&&B(t,o),\"success\"===o&&(T=s.lp_structure_course,n.querySelector(\".lp-ai-generated-results\").innerHTML=s.lp_html_preview,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{B(e,\"error\")},completed:()=>{a(o,!1),s(l,1),S=!1}};S=!0,window.lpAJAXG.fetchAJAX(i,c)}createCourse(e){const{e:t,target:o}=e;t.preventDefault(),a(o,!0);const n=JSON.parse(o.dataset.send);n.lp_structure_course=T,this.options.isCourseBuilder&&(n.is_course_builder=1);const r=o.closest(\"form\").querySelector(\".lp-btn-step[data-action=prev]\");let i;s(r,0),i=window.outerWidth\u003C768?\"90%\":\"30%\";const l=document.querySelector(\"#lp-tmpl-creating-course-ai\");c().fire({html:l.innerHTML,showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,width:i});const d={success:e=>{const{message:t,status:o,data:n}=e;c().close(),B(t,o),\"success\"===o?setTimeout(()=>{window.location.href=n.edit_course_url},this.options.redirectDelayMs):s(r,1)},error:e=>{B(e,\"error\"),s(r,1)},completed:()=>{a(o,!1)}};window.lpAJAXG.fetchAJAX(n,d)}}class M{constructor(){this.isRequesting=!1,this.activeCourseId=0,this.init()}static selectors={wrap:\"#lp-modal-enrolled-wrap\",form:\"#lp-modal-enrolled-form\",toolbarTemplate:\"#lp-tmpl-enrolled-students-toolbar-modal\",targetTemplate:\"#lp-tmpl-enrolled-students-target-modal\",toolbar:\".lp-enrolled-students-table-toolbar--modal\",courseTrigger:\".lp-btn-view-students\",searchInput:\"#lp-modal-enrolled-search-input\",startDateInput:\"#lp-modal-enrolled-filter-start-date\",endDateInput:\"#lp-modal-enrolled-filter-end-date\",searchBtn:\".lp-enrolled-btn-search-modal\",clearBtn:\".lp-enrolled-btn-clear-modal\",modalSearchFields:\"#lp-modal-enrolled-search-input, #lp-modal-enrolled-filter-start-date, #lp-modal-enrolled-filter-end-date\"};setButtonLoadingState(e,t){e&&(a(e,t?1:0),e.disabled=!!t)}init(){M._loadedEvents||(M._loadedEvents=!0,i(\"click\",[{selector:M.selectors.courseTrigger,class:this,callBack:this.handleOpenModal.name},{selector:M.selectors.searchBtn,class:this,callBack:this.handleModalSearch.name},{selector:M.selectors.clearBtn,class:this,callBack:this.handleModalClear.name}]),i(\"keydown\",[{selector:M.selectors.modalSearchFields,class:this,callBack:this.handleModalSearchOnEnter.name,checkIsEventEnter:!0}]),i(\"change\",[{selector:M.selectors.startDateInput,class:this,callBack:this.checkDatesRange.name},{selector:M.selectors.endDateInput,class:this,callBack:this.checkDatesRange.name}]))}handleOpenModal(e){const t=e?.target?.closest(M.selectors.courseTrigger);if(!t||this.isRequesting||t.classList.contains(\"loading\")||t.disabled)return;const o=parseInt(t.dataset.courseId,10)||0;if(!o)return;const n=t.dataset.courseTitle||\"\";this.activeCourseId=o,this.setButtonLoadingState(t,!0),this.openModal(o,n,t)}handleModalSearch(e){const t=e?.target?.closest(M.selectors.searchBtn);t&&this.activeCourseId&&(e?.e&&e.e.preventDefault(),this.isRequesting||t.classList.contains(\"loading\")||t.disabled||(this.setButtonLoadingState(t,!0),this.loadEnrolledStudents(this.activeCourseId,1,t)))}handleModalSearchOnEnter(e){e?.e&&e.e.preventDefault();const t=this.getModalForm();if(!t)return;const o=t.querySelector(M.selectors.searchBtn);o&&this.handleModalSearch({...e,target:o})}handleModalClear(e){const t=e?.target?.closest(M.selectors.clearBtn),o=this.getModalForm();t&&o&&this.activeCourseId&&(e?.e&&e.e.preventDefault(),this.isRequesting||t.classList.contains(\"loading\")||t.disabled||(o.reset(),this.setButtonLoadingState(t,!0),this.loadEnrolledStudents(this.activeCourseId,1,t)))}getModalPopup(){return c().getPopup?c().getPopup():null}getModalToolbarHtml(){const e=document.querySelector(M.selectors.toolbarTemplate);return e?e.innerHTML:\"\"}getModalTargetHtml(){const e=document.querySelector(M.selectors.targetTemplate);return e?e.innerHTML:\"\"}getAjaxHandle(){const e=window.lpAJAXG;return e&&\"function\"==typeof e.getDataSetCurrent&&\"function\"==typeof e.setDataSetCurrent&&\"function\"==typeof e.showHideLoading&&\"function\"==typeof e.fetchAJAX?e:null}getModalForm(){const e=this.getModalPopup();return e?e.querySelector(M.selectors.form):null}getModalFilterArgs(e={}){const t=this.getModalForm();return t?r(t,e):e}loadEnrolledStudents(e,t,o=null){const n=document.querySelector(M.selectors.wrap),s=n?.querySelector(\".lp-target\"),a=this.getAjaxHandle();if(!n||!s||!a||this.isRequesting)return;this.isRequesting=!0,o&&this.setButtonLoadingState(o,!0);const r=a.getDataSetCurrent(s);r.args=this.getModalFilterArgs(r.args||{}),r.args.course_id=parseInt(e,10)||0,r.args.paged=t,a.setDataSetCurrent(s,r),a.showHideLoading(s,1);const i={success:e=>{s.innerHTML=e.data.content},error:e=>{console.error(e)},completed:()=>{this.isRequesting=!1,a.showHideLoading(s,0),o&&this.setButtonLoadingState(o,!1)}};a.fetchAJAX(r,i)}openModal(e,t,o=null){const n=this.getModalToolbarHtml(),s=this.getModalTargetHtml();n&&s?(this.activeCourseId=parseInt(e,10)||0,c().fire({title:`${t}`,html:n+s,width:\"80%\",showConfirmButton:!1,showCloseButton:!0,didOpen:()=>{this.loadEnrolledStudents(this.activeCourseId,1,o)},didClose:()=>{this.activeCourseId=0,o&&this.setButtonLoadingState(o,!1)}})):o&&this.setButtonLoadingState(o,!1)}checkDatesRange(e){const{e:t}=e,o=t?.target;if(!o)return;const n=o.closest(M.selectors.form);if(!n)return;const s=n.querySelector(M.selectors.startDateInput),a=n.querySelector(M.selectors.endDateInput);o===s?s.value?(a.min=s.value,a.value&&a.value\u003Cs.value&&(a.value=s.value)):a.min=\"\":o===a&&(a.value?(s.max=a.value,s.value&&s.value>a.value&&(s.value=a.value)):s.max=\"\")}}new P,new M})()})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -15,11 +15,11 @@\n \u002F* harmony import *\u002F var _edit_curriculum_edit_section_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Fedit-curriculum\u002Fedit-section.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\");\n \u002F* harmony import *\u002F var _edit_curriculum_edit_section_item_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! .\u002Fedit-curriculum\u002Fedit-section-item.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * Edit Curriculum JS handler.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * Edit Curriculum JS handler.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.2\n  *\u002F\n \n \n@@ -68,8 +68,8 @@\n \u002F* harmony import *\u002F var _edit_section_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fedit-section.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\");\n \u002F* harmony import *\u002F var _edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fedit-section-item.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n-\u002F**\r\n- * Generate data with OpenAI\r\n+\u002F**\n+ * Generate data with OpenAI\n  *\u002F\n \n \n@@ -81,7 +81,11 @@\n let editSection = null;\n let editSectionItem = null;\n class EditCurriculumAi {\n-  constructor() {\n+  constructor(options = {}) {\n+    this.options = {\n+      isCourseBuilder: false,\n+      ...options\n+    };\n     this.init();\n   }\n   static selectors = {\n@@ -91,14 +95,25 @@\n     if (!lpData?.enable_open_ai) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum, el => {\n-      const elCountSections = el.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elCountSections);\n-      elCountSections.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+    if (this.options.isCourseBuilder) {\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum, el => {\n+        const elCountSections = el.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elCountSections);\n+        elCountSections.insertAdjacentHTML('beforebegin', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tclass=\"cb-course-edit-ai-btn lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+    } else {\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum, el => {\n+        const elCountSections = el.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elCountSections);\n+        elCountSections.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n \t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n \t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n \t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\n \t\t\t\t\u003C\u002Fbutton>`);\n-    });\n+      });\n+    }\n     this.events();\n   }\n   events() {\n@@ -130,7 +145,9 @@\n     if (!sections || sections.length === 0) {\n       lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('No sections found in the generated data.', 'error');\n     }\n-    console.log('Generated Sections:', sections);\n+\n+    \u002F\u002F console.log( 'Generated Sections:', sections );\n+\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().close();\n \n     \u002F\u002F Wait half second to ensure SweetAlert is closed completely\n@@ -173,9 +190,9 @@\n     }\n   }\n \n-  \u002F**\r\n-   * Update section description after create new section\r\n-   * @param args\r\n+  \u002F**\n+   * Update section description after create new section\n+   * @param args\n    *\u002F\n   updateSectionDescription(args) {\n     const {\n@@ -302,11 +319,11 @@\n \u002F* harmony import *\u002F var _edit_curriculum_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002Fedit-curriculum.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n \u002F* harmony import *\u002F var _edit_section_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! .\u002Fedit-section.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpPopupSelectItemToAdd_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\");\n-\u002F**\r\n- * Edit Section item Script on Curriculum\r\n- *\r\n- * @version 1.0.3\r\n- * @since 4.2.8.6\r\n+\u002F**\n+ * Edit Section item Script on Curriculum\n+ *\n+ * @version 1.0.3\n+ * @since 4.2.8.6\n  *\u002F\n \n \n@@ -386,14 +403,8 @@\n       callBack: this.deleteItem.name\n     }, {\n       selector: lpAssetsJsPath_lpPopupSelectItemToAdd_js__WEBPACK_IMPORTED_MODULE_6__.LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect,\n-      callBack: args => {\n-        const {\n-          e,\n-          target\n-        } = args;\n-        const elSection = target.closest(_edit_section_js__WEBPACK_IMPORTED_MODULE_5__.EditSection.selectors.elSection);\n-        this.sectionIdSelected = elSection.dataset.sectionId;\n-      }\n+      class: this,\n+      callBack: this.handleShowPopupItemsToSelect.name\n     }, {\n       selector: lpAssetsJsPath_lpPopupSelectItemToAdd_js__WEBPACK_IMPORTED_MODULE_6__.LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,\n       class: lpPopupSelectItemToAdd,\n@@ -445,6 +456,26 @@\n     }]);\n   }\n \n+  \u002F* Handle show popup items to select - set sectionIdSelected *\u002F\n+  handleShowPopupItemsToSelect(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    const elQuizWrap = target.closest('.lp-edit-quiz-wrap');\n+    if (elQuizWrap) {\n+      this.sectionIdSelected = null;\n+      return;\n+    }\n+    const elSection = target.closest(_edit_section_js__WEBPACK_IMPORTED_MODULE_5__.EditSection.selectors.elSection);\n+    const elEditCurriculum = target.closest('#lp-course-edit-curriculum') || target.closest('.lp-edit-curriculum-wrap');\n+    if (elSection && elEditCurriculum) {\n+      this.sectionIdSelected = elSection.dataset.sectionId;\n+    } else {\n+      this.sectionIdSelected = null;\n+    }\n+  }\n+\n   \u002F* Add item type *\u002F\n   addItemType(args) {\n     const {\n@@ -535,9 +566,13 @@\n             section_item,\n             item_link\n           } = data || {};\n-          elItemNew.dataset.itemId = section_item.item_id || 0;\n+          const itemId = section_item.item_id || 0;\n+          elItemNew.dataset.itemId = itemId;\n           elItemNew.querySelector('.edit-link').setAttribute('href', item_link || '');\n \n+          \u002F\u002F Add popup attributes for Course Builder context\n+          this.addPopupAttributesToItem(elItemNew, itemId, typeValue);\n+\n           \u002F\u002F Call callback nest if exists\n           if (callBackNest && typeof callBackNest.success === 'function') {\n             args.elItemNew = elItemNew;\n@@ -570,6 +605,9 @@\n         id_url: idUrlHandle\n       }\n     };\n+    if (document.querySelector('#lp-course-builder')) {\n+      dataSend.is_course_builder = 1;\n+    }\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n \n@@ -750,8 +788,8 @@\n       icon: 'warning',\n       showCloseButton: true,\n       showCancelButton: true,\n-      cancelButtonText: lpDataAdmin.i18n.cancel,\n-      confirmButtonText: lpDataAdmin.i18n.yes,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n       reverseButtons: true\n     }).then(result => {\n       if (result.isConfirmed) {\n@@ -870,8 +908,20 @@\n \n   \u002F* Add items selected to section *\u002F\n   addItemsSelectedToSection(itemsSelectedData) {\n+    \u002F\u002F Skip if not in curriculum context (e.g., quiz popup)\n+    if (!this.sectionIdSelected) {\n+      return;\n+    }\n     const elSection = document.querySelector(`.section[data-section-id=\"${this.sectionIdSelected}\"]`);\n+\n+    \u002F\u002F Skip if section element not found\n+    if (!elSection) {\n+      return;\n+    }\n     const elItemClone = elSection.querySelector(`${EditSectionItem.selectors.elItemClone}`);\n+\n+    \u002F\u002F Check if we're in Course Builder context\n+    const isCourseBuilder = document.querySelector('#lp-course-builder') !== null;\n     itemsSelectedData.forEach(item => {\n       const elItemNew = elItemClone.cloneNode(true);\n       const elInputTitleNew = elItemNew.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);\n@@ -891,6 +941,7 @@\n       action: 'add_items_to_section',\n       section_id: this.sectionIdSelected,\n       items: itemsSelectedData,\n+      is_course_builder: isCourseBuilder ? 1 : 0,\n       args: {\n         id_url: idUrlHandle\n       }\n@@ -912,7 +963,8 @@\n             elItemAdded.remove();\n           }\n         });\n-        if (status === 'success') {\n+        if (status === 'success' && html) {\n+          \u002F\u002F Server returns HTML with popup attributes already included when is_course_builder=1\n           elItemClone.insertAdjacentHTML('beforebegin', html);\n         }\n       },\n@@ -998,6 +1050,60 @@\n     elSectionItemsCount.dataset.count = itemsCount;\n     elSectionItemsCount.querySelector('.count').textContent = itemsCount;\n   }\n+\n+  \u002F**\n+   * Add popup attributes to item element for Course Builder context.\n+   * Only applies when in Course Builder (not admin edit course page).\n+   *\n+   * @param {HTMLElement} elItem - The item element\n+   * @param {number} itemId - The item ID\n+   * @param {string} itemType - The item type (lp_lesson, lp_quiz, lp_assignment)\n+   *\u002F\n+  addPopupAttributesToItem(elItem, itemId, itemType) {\n+    \u002F\u002F Check if we're in Course Builder context\n+    const isCourseBuilder = document.querySelector('#lp-course-builder') !== null;\n+    if (!isCourseBuilder || !itemId) {\n+      return;\n+    }\n+    const popupType = itemType.replace(\u002F^lp_\u002F, '');\n+    const templateSelector = `#lp-tmpl-builder-popup-curriculum-${popupType}-course-${this.courseId}`;\n+    if (!popupType || !document.querySelector(templateSelector)) {\n+      return;\n+    }\n+\n+    \u002F\u002F Find the edit link element - it's an \u003Ca> with class 'edit-link' inside .item-actions\n+    const editLink = elItem.querySelector('.item-actions .edit-link');\n+    if (!editLink) {\n+      return;\n+    }\n+\n+    \u002F\u002F Get the parent \u003Cli> element of the edit link\n+    const editBtn = editLink.closest('li');\n+    if (!editBtn) {\n+      return;\n+    }\n+\n+    \u002F\u002F Add popup data attributes based on item type\n+    if (itemType === 'lp_lesson') {\n+      editBtn.setAttribute('data-popup-lesson', itemId);\n+    } else if (itemType === 'lp_quiz') {\n+      editBtn.setAttribute('data-popup-quiz', itemId);\n+    }\n+\n+    \u002F\u002F Add popup class to the \u003Cli> element\n+    editBtn.classList.add('lp-btn-edit-item-popup');\n+\n+    \u002F\u002F Update edit link: remove target=\"_blank\" and update classes for popup behavior\n+    editLink.removeAttribute('target');\n+    editLink.removeAttribute('href');\n+    editLink.classList.add('edit-popup-link');\n+\n+    \u002F\u002F Store additional data for popup on the \u003Cli> element\n+    editBtn.setAttribute('data-course-id', this.courseId);\n+    editBtn.setAttribute('data-popup-type', popupType);\n+    editBtn.setAttribute('data-popup-id', itemId);\n+    editBtn.setAttribute('data-template', templateSelector);\n+  }\n }\n \n \u002F***\u002F },\n@@ -1020,11 +1126,11 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var _edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fedit-section-item.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\");\n \u002F* harmony import *\u002F var _edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002Fedit-curriculum.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n-\u002F**\r\n- * Edit Section Script on Curriculum\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.3\r\n+\u002F**\n+ * Edit Section Script on Curriculum\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.3\n  *\u002F\n \n \n@@ -1698,8 +1804,8 @@\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_1__);\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n-\u002F**\r\n- * Generate data with OpenAI\r\n+\u002F**\n+ * Generate data with OpenAI\n  *\u002F\n \n \n@@ -1714,7 +1820,16 @@\n let dispatchGutenberg;\n let editorGutenberg;\n class GenerateWithOpenai {\n-  constructor() {\n+  constructor(options = {}) {\n+    this.options = {\n+      autoInsertButtons: true,\n+      isCourseBuilder: false,\n+      titleInputSelector: 'input[name=post_title]',\n+      courseBuilderTitleInputSelector: 'input[name=course_title]',\n+      editorIdClassic: 'content',\n+      editorIdCourseBuilder: 'course_description_editor',\n+      ...options\n+    };\n     this.init();\n   }\n   static selectors = {\n@@ -1725,39 +1840,8 @@\n     if (!lpData?.enable_open_ai) {\n       return;\n     }\n-    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#titlewrap', el => {\n-      el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fbutton>`);\n-    });\n-    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#wp-content-media-buttons', el => {\n-      el.insertAdjacentHTML('beforeend', `\u003Cbutton type=\"button\"\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fbutton>`);\n-    });\n-    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#postimagediv', el => {\n-      const elInside = el.querySelector('.postbox-header');\n-      elInside.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n-\t\t\t\t\tstyle=\"margin: 12px 12px 0 12px;\"\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fbutton>`);\n-    });\n-\n-    \u002F\u002F Check is layout Gutenberg\n-    if (wp.data && wp.data.select('core\u002Feditor')) {\n-      isLayoutGutenberg = true;\n-      selectGutenberg = wp.data.select;\n-      dispatchGutenberg = wp.data.dispatch;\n-      editorGutenberg = selectGutenberg('core\u002Feditor');\n-\n-      \u002F\u002F For layout Gutenberg - button for title\n-      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-document-bar', el => {\n+    if (this.options.autoInsertButtons) {\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#titlewrap', el => {\n         el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n \t\t\t\t\tstyle=\"margin-left: 5px\"\n \t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n@@ -1765,29 +1849,104 @@\n \t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n \t\t\t\t\u003C\u002Fbutton>`);\n       });\n-\n-      \u002F\u002F For layout Gutenberg - button for description\n-      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n-        el.insertAdjacentHTML('beforebegin', `\u003Cbutton type=\"button\"\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#wp-content-media-buttons', el => {\n+        el.insertAdjacentHTML('beforeend', `\u003Cbutton type=\"button\"\n \t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n \t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n \t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n \t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n \t\t\t\t\u003C\u002Fbutton>`);\n       });\n-\n-      \u002F\u002F For layout Gutenberg - button for image\n-      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n-        el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#postimagediv', el => {\n+        const elInside = el.querySelector('.postbox-header');\n+        elInside.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n \t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n \t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n \t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n \t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n \t\t\t\t\u003C\u002Fbutton>`);\n       });\n+\n+      \u002F\u002F Check is layout Gutenberg\n+      if (wp.data && wp.data.select('core\u002Feditor')) {\n+        isLayoutGutenberg = true;\n+        selectGutenberg = wp.data.select;\n+        dispatchGutenberg = wp.data.dispatch;\n+        editorGutenberg = selectGutenberg('core\u002Feditor');\n+\n+        \u002F\u002F For layout Gutenberg - button for title\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-document-bar', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"margin-left: 5px\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+\n+        \u002F\u002F For layout Gutenberg - button for description\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n+          el.insertAdjacentHTML('beforebegin', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+\n+        \u002F\u002F For layout Gutenberg - button for image\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      }\n     }\n     this.events();\n   }\n+  getTitleInputSelector() {\n+    return this.options.isCourseBuilder ? this.options.courseBuilderTitleInputSelector : this.options.titleInputSelector;\n+  }\n+  getEditorId() {\n+    return this.options.isCourseBuilder ? this.options.editorIdCourseBuilder : this.options.editorIdClassic;\n+  }\n+  setCourseBuilderPostId(form) {\n+    if (!this.options.isCourseBuilder || !form) {\n+      return;\n+    }\n+    const postIdInput = form.querySelector('[name=\"post-id\"]');\n+    if (!postIdInput) {\n+      return;\n+    }\n+    const courseEditWrap = document.querySelector('.cb-section__course-edit[data-course-id]');\n+    const courseId = courseEditWrap?.dataset?.courseId || '';\n+    if (courseId) {\n+      postIdInput.value = courseId;\n+    }\n+  }\n+  extractImageSourceFromHtml(html) {\n+    if (!html) {\n+      return '';\n+    }\n+    const tempWrapper = document.createElement('div');\n+    tempWrapper.innerHTML = html;\n+    return tempWrapper.querySelector('img')?.getAttribute('src') || '';\n+  }\n+  applyCourseBuilderFeaturedImage(attachmentId, imageSrc) {\n+    if (!attachmentId || !imageSrc) {\n+      return false;\n+    }\n+    document.dispatchEvent(new CustomEvent('lp-course-builder\u002Fai-featured-image-applied', {\n+      detail: {\n+        attachmentId,\n+        imageSrc\n+      }\n+    }));\n+    return true;\n+  }\n   events() {\n     _utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n       selector: GenerateWithOpenai.selectors.elBtnGenerateWithAi,\n@@ -1833,8 +1992,8 @@\n         }\n \n         \u002F\u002F Testing custom confirm box\n-        \u002F*if ( confirm( message ) ) {\r\n-        \tSweetAlert.close();\r\n+        \u002F*if ( confirm( message ) ) {\n+        \tSweetAlert.close();\n         }*\u002F\n       }\n     }]);\n@@ -1863,7 +2022,7 @@\n         popupSweetAlert.click();\n \n         \u002F\u002F Set post title and post content to hidden fields of form to AI prompt reference\n-        const elPostTitleInput = document.querySelector('input[name=post_title]');\n+        const elPostTitleInput = document.querySelector(this.getTitleInputSelector());\n         let post_title = '';\n         if (elPostTitleInput) {\n           post_title = elPostTitleInput.value;\n@@ -1875,10 +2034,12 @@\n         }\n         let post_content = '';\n         if (!isLayoutGutenberg) {\n-          if (!window.tinymce || !window.tinymce.get('content')) {\n-            post_content = document.querySelector('#content').value;\n+          const editorId = this.getEditorId();\n+          if (!window.tinymce || !window.tinymce.get(editorId)) {\n+            const editorElement = document.querySelector(`#${editorId}`);\n+            post_content = editorElement ? editorElement.value : '';\n           } else {\n-            post_content = window.tinymce.get('content').getContent({\n+            post_content = window.tinymce.get(editorId).getContent({\n               format: 'text'\n             });\n           }\n@@ -1887,6 +2048,7 @@\n           post_content = content.replace(\u002F(\u003C([^>]+)>)\u002Fgi, ''); \u002F\u002F Remove HTML tags\n         }\n         const form = popupSweetAlert.querySelector('form');\n+        this.setCourseBuilderPostId(form);\n         const elPostTitle = form.querySelector('[name=post-title]');\n         if (elPostTitle) {\n           elPostTitle.value = post_title;\n@@ -1986,9 +2148,9 @@\n     });\n   }\n \n-  \u002F**\r\n-   * Create prompt from data config\r\n-   * @param args\r\n+  \u002F**\n+   * Create prompt from data config\n+   * @param args\n    *\u002F\n   generatePrompt(args) {\n     const {\n@@ -2029,9 +2191,9 @@\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n \n-  \u002F**\r\n-   * Submit prompt to OpenAI to generate course data\r\n-   * @param args\r\n+  \u002F**\n+   * Submit prompt to OpenAI to generate course data\n+   * @param args\n    *\u002F\n   generateData(args) {\n     const {\n@@ -2095,9 +2257,12 @@\n         if (dataTarget === 'set-wp-editor-content') {\n           this.setWPEditorContent(dataApply);\n         } else if (dataTarget === 'set-wp-title') {\n-          const elTitleInput = document.querySelector('input[name=post_title]');\n+          const elTitleInput = document.querySelector(this.getTitleInputSelector());\n           if (elTitleInput) {\n             elTitleInput.value = dataApply;\n+            elTitleInput.dispatchEvent(new Event('input', {\n+              bubbles: true\n+            }));\n           }\n         }\n       } else if (dataTarget === 'set-wp-editor-content') {\n@@ -2144,15 +2309,26 @@\n       document.body.removeChild(textarea);\n     }\n \n-    \u002F*navigator.clipboard.writeText( dataCopy ).then( () => {\r\n-    \tlpToastify.show( 'Copied to clipboard!', 'success' );\r\n-    } ).catch( ( err ) => {\r\n-    \tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\r\n+    \u002F*navigator.clipboard.writeText( dataCopy ).then( () => {\n+    \tlpToastify.show( 'Copied to clipboard!', 'success' );\n+    } ).catch( ( err ) => {\n+    \tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\n     } );*\u002F\n   }\n   setWPEditorContent(htmlContent) {\n-    const editor = window.tinymce.get('content');\n-    editor.setContent(htmlContent);\n+    const editorId = this.getEditorId();\n+    const editor = window.tinymce?.get(editorId);\n+    if (editor) {\n+      editor.setContent(htmlContent);\n+      return;\n+    }\n+    const editorElement = document.querySelector(`#${editorId}`);\n+    if (editorElement) {\n+      editorElement.value = htmlContent;\n+      editorElement.dispatchEvent(new Event('input', {\n+        bubbles: true\n+      }));\n+    }\n   }\n   applyImageData(args) {\n     const {\n@@ -2174,7 +2350,15 @@\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n         if (status === 'success') {\n-          if (!isLayoutGutenberg) {\n+          if (this.options.isCourseBuilder) {\n+            const attachmentId = parseInt(data?.attachment_id || 0, 10);\n+            const imageSrc = this.extractImageSourceFromHtml(data?.html_image || '');\n+            const applied = this.applyCourseBuilderFeaturedImage(attachmentId, imageSrc);\n+            if (!applied) {\n+              lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show('Failed to apply image to course featured image.', 'error');\n+              return;\n+            }\n+          } else if (!isLayoutGutenberg) {\n             \u002F\u002F Set image\n             const elImagePreview = document.querySelector('#postimagediv .inside');\n             elImagePreview.outerHTML = data.html_image;\n@@ -2216,10 +2400,10 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n-\u002F**\r\n- *  LearnPress Popup Select Item\r\n- *\r\n- *  Handles load(search) item from API, show in popup and select item.\r\n+\u002F**\n+ *  LearnPress Popup Select Item\n+ *\n+ *  Handles load(search) item from API, show in popup and select item.\n  *\u002F\n \n \n@@ -2299,6 +2483,9 @@\n     if (!elBtnShowPopupItemsToSelect) {\n       return;\n     }\n+\n+    \u002F\u002F Reset items selected data when opening popup\n+    itemsSelectedData = [];\n     const templateId = target.dataset.template || '';\n     const modalTemplate = document.querySelector(templateId);\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n@@ -2617,14 +2804,14 @@\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! toastify-js *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\");\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -2682,14 +2869,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -2720,10 +2907,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -2741,12 +2928,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -2759,11 +2946,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -2784,12 +2971,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -2932,15 +3119,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -12305,11 +12492,11 @@\n \u002F* harmony import *\u002F var _edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Fedit-course\u002Fedit-curriculum.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n \u002F* harmony import *\u002F var _generate_with_openai_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! .\u002Fgenerate-with-openai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\");\n \u002F* harmony import *\u002F var _edit_course_edit_curriculum_edit_curriculum_ai_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\");\n-\u002F**\r\n- * Edit course JS handler.\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Edit course JS handler.\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-course.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{var e={9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),s=o.n(n),i=o(6314),a=o.n(i)()(s());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,i){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=i),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var i={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=i[c]||0,u=\"\".concat(c,\" \").concat(d);i[c]=d+1;var p=o(u),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(m);else{var h=s(m,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:h,references:1})}a.push(u)}return a}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var i=n(e=e||[],s=s||{});return function(e){e=e||[];for(var a=0;a\u003Ci.length;a++){var r=o(i[a]);t[r].references--}for(var l=n(e,s),c=0;c\u003Ci.length;c++){var d=o(i[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}i=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var i=o.sourceMap;i&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),i=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=i+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=i+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],m=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},h=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,g=e=>w(e)?e.toPromise():Promise.resolve(e),f=e=>e&&Promise.resolve(e)===e,v=()=>document.body.querySelector(`.${a.container}`),b=e=>{const t=v();return t?t.querySelector(e):null},y=e=>b(`.${e}`),S=()=>y(a.popup),k=()=>y(a.icon),C=()=>y(a.title),x=()=>y(a[\"html-container\"]),T=()=>y(a.image),A=()=>y(a[\"progress-steps\"]),E=()=>y(a[\"validation-message\"]),I=()=>b(`.${a.actions} .${a.confirm}`),B=()=>b(`.${a.actions} .${a.cancel}`),_=()=>b(`.${a.actions} .${a.deny}`),D=()=>b(`.${a.loader}`),L=()=>y(a.actions),$=()=>y(a.footer),P=()=>y(a[\"timer-progress-bar\"]),O=()=>y(a.close),M=()=>{const e=S();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},N=()=>H(document.body,a.shown)&&!H(document.body,a[\"toast-shown\"])&&!H(document.body,a[\"no-backdrop\"]),q=()=>{const e=S();return!!e&&H(e,a.toast)},j=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},H=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},X=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?J(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},z=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},F=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},J=(e,t)=>{R(e,t,!0)},V=(e,t)=>{R(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&H(n,t))return n}},G=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},W=(e,t=\"flex\")=>{e&&(e.style.display=t)},U=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{Q(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},K=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},Q=(e,t,o=\"flex\")=>{t?W(e,o):U(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=P();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ie=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=v();return!!e&&(e.remove(),V([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&J(o,a[\"no-transition\"]),j(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=S();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(J(v(),a.rtl),n.isRTL=!0)})(s),(()=>{const e=S();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),s=e.querySelector(`.${a.range} output`),i=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=ie),o&&(o.onchange=ie),i&&(i.onchange=ie),r&&(r.onchange=ie),l&&(l.oninput=ie),n&&s&&(n.oninput=()=>{ie(),s.value=n.value},n.onchange=()=>{ie(),s.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&j(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):j(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=L(),n=D();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?W(o):U(o),X(o,t,\"actions\"),function(e,t,o){const n=I(),s=_(),i=B();n&&s&&i&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(i,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(J([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):V([e,t,o],a.styled)}(n,s,i,o),o.reverseButtons&&(o.toast?(e.insertBefore(i,n),e.insertBefore(s,n)):(e.insertBefore(i,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),j(n,t.loaderHtml||\"\"),X(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);Q(e,o[`show${n}Button`],\"inline-block\"),j(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],X(e,o,`${t}Button`)}const me=(e,t)=>{const o=v();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||J([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?J(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),J(e,a.center)))}(o,t.position),function(e,t){t&&J(e,a[`grow-${t}`])}(o,t.grow),X(o,t,\"container\"))};var he={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],ge=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=Se(e.input);if(!t)return;const o=Ce[e.input](t,e);W(t),e.inputAutoFocus&&setTimeout(()=>{F(o)})},fe=(e,t)=>{const o=S();if(!o)return;const n=z(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},ve=e=>{if(!e.input)return;const t=Se(e.input);t&&X(t,e,\"input\")},be=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&J(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},Se=e=>{const t=S();if(t)return Y(t,a[e]||a.input)},ke=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:f(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return ke(o,t.inputValue),ye(o,o,t),be(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),be(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(ke(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&ke(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");j(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=S();if(!o)throw new Error(\"Popup not found\");const n=z(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&j(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;ke(o,t.inputValue),be(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=S();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(i=o,parseInt(window.getComputedStyle(i).marginLeft)+parseInt(window.getComputedStyle(i).marginRight)),s=S();var i;s&&(e>n?s.style.width=`${e}px`:G(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const xe=(e,t)=>{const o=x();o&&(Z(o),X(o,t,\"htmlContainer\"),t.html?(re(t.html,o),W(o,\"block\")):t.text?(o.textContent=t.text,W(o,\"block\")):U(o),((e,t)=>{const o=S();if(!o)return;const n=he.innerParams.get(e),s=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(fe(e,t.inputAttributes),n.className=a[e],s&&U(n))}),t.input&&(s&&ge(t),ve(t))})(e,t))},Te=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&V(e,n);J(e,t.icon&&r[t.icon]),Ie(e,t),Ae(),X(e,t,\"icon\")},Ae=()=>{const e=S();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Ee=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Be(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Be({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&j(e,n)},Ie=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])K(e,o,\"background-color\",t.iconColor);K(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Be=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let _e=!1,De=0,Le=0,$e=0,Pe=0;const Oe=e=>{const t=S();if(!t)return;const o=k();if(e.target===t||o&&o.contains(e.target)){_e=!0;const o=qe(e);De=o.clientX,Le=o.clientY,$e=parseInt(t.style.insetInlineStart)||0,Pe=parseInt(t.style.insetBlockStart)||0,J(t,\"swal2-dragging\")}},Me=e=>{const t=S();if(t&&_e){let{clientX:o,clientY:s}=qe(e);const i=o-De;t.style.insetInlineStart=`${$e+(n.isRTL?-i:i)}px`,t.style.insetBlockStart=`${Pe+(s-Le)}px`}},Ne=()=>{const e=S();_e=!1,V(e,\"swal2-dragging\")},qe=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},je=(e,t)=>{const o=v(),n=S();if(o&&n){if(t.toast){G(o,\"width\",t.width),n.style.width=\"100%\";const e=D();e&&n.insertBefore(e,k())}else G(n,\"width\",t.width);G(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),U(E()),He(n,t),t.draggable&&!t.toast?(J(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Oe),document.body.addEventListener(\"mousemove\",Me),e.addEventListener(\"mouseup\",Ne),e.addEventListener(\"touchstart\",Oe),document.body.addEventListener(\"touchmove\",Me),e.addEventListener(\"touchend\",Ne)})(n)):(V(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Oe),document.body.removeEventListener(\"mousemove\",Me),e.removeEventListener(\"mouseup\",Ne),e.removeEventListener(\"touchstart\",Oe),document.body.removeEventListener(\"touchmove\",Me),e.removeEventListener(\"touchend\",Ne)})(n))}},He=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(J([document.documentElement,document.body],a[\"toast-shown\"]),J(e,a.toast)):J(e,a.modal),X(e,t,\"popup\"),\"string\"==typeof t.customClass&&J(e,t.customClass),t.icon&&J(e,a[`icon-${t.icon}`])},Xe=e=>{const t=document.createElement(\"li\");return J(t,a[\"progress-step\"]),j(t,e),t},ze=e=>{const t=document.createElement(\"li\");return J(t,a[\"progress-step-line\"]),e.progressStepsDistance&&G(t,\"width\",e.progressStepsDistance),t},Fe=(e,t)=>{var o;je(0,t),me(0,t),((e,t)=>{const o=A();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(W(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,i)=>{const r=Xe(e);if(o.appendChild(r),i===s&&J(r,a[\"active-progress-step\"]),i!==n.length-1){const e=ze(t);o.appendChild(e)}})):U(o)})(0,t),((e,t)=>{const o=he.innerParams.get(e),n=k();if(n){if(o&&t.icon===o.icon)return Ee(n,t),void Te(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void U(n);W(n),Ee(n,t),Te(n,t),J(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Ae)}else U(n)}})(e,t),((e,t)=>{const o=T();o&&(t.imageUrl?(W(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),G(o,\"width\",t.imageWidth),G(o,\"height\",t.imageHeight),o.className=a.image,X(o,t,\"image\")):U(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),Q(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),X(o,t,\"title\"))})(0,t),((e,t)=>{const o=O();o&&(j(o,t.closeButtonHtml||\"\"),X(o,t,\"closeButton\"),Q(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),xe(e,t),de(0,t),((e,t)=>{const o=$();o&&(Z(o),Q(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),X(o,t,\"footer\"))})(0,t);const s=S();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},Re=()=>{var e;return null===(e=I())||void 0===e?void 0:e.click()},Je=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Ve=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=M();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=S())||void 0===o||o.focus()},Ge=[\"ArrowRight\",\"ArrowDown\"],We=[\"ArrowLeft\",\"ArrowUp\"],Ue=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ke(t):[...Ge,...We].includes(t.key)?Qe(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!h(t.allowEnterKey))return;const o=S();if(!o||!t.input)return;const n=z(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ke=e=>{const t=e.target,o=M();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Qe=e=>{const t=L(),o=I(),n=_(),s=B();if(!(t&&o&&n&&s))return;const i=[o,n,s];if(document.activeElement instanceof HTMLElement&&!i.includes(document.activeElement))return;const a=Ge.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),h(t.allowEscapeKey)&&o(Je.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=v();if(!e)return;let t;e.ontouchstart=e=>{t=it(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},it=e=>{const t=e.target,o=v(),n=x();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,i){q()?vt(e,i):(s(o).then(()=>vt(e,i)),Ve(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),N()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(H(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);V(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),V([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(ht(this),t(e)):o&&t(e)}const pt=e=>{const t=S();if(!t)return!1;const o=he.innerParams.get(e);if(!o||H(t,o.hideClass.popup))return!1;V(t,o.showClass.popup),J(t,o.hideClass.popup);const n=v();return V(n,o.showClass.backdrop),J(n,o.hideClass.backdrop),gt(e,t,o),!0};function mt(e){const t=tt.swalPromiseReject.get(this);ht(this),t&&t(e)}const ht=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,he.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),gt=(e,t,o)=>{var s;const i=v(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),a&&i?ft(e,t,i,Boolean(o.returnFocus),o.didClose):i&&dt(e,i,Boolean(o.returnFocus),o.didClose)},ft=(e,t,o,s,i)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,i);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},vt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},bt=e=>{let t=S();if(t||new Qo,t=S(),!t)return;const o=D();q()?U(k()):yt(t,e),W(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=L(),n=D();o&&n&&(!t&&ee(I())&&(t=I()),W(o),t&&(U(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),J([e,o],a.loading))},St=e=>e.checked?1:0,kt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,xt=(e,t)=>{const o=S();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,j(s,t),s.selected=Et(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,At(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],i=document.createElement(\"input\"),r=document.createElement(\"label\");i.type=\"radio\",i.name=a.radio,i.value=t,Et(t,o.inputValue)&&(i.checked=!0);const l=document.createElement(\"span\");j(l,s),l.className=a.label,r.appendChild(i),r.appendChild(l),n.appendChild(r)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,At(e),t)};w(t.inputOptions)||f(t.inputOptions)?(bt(I()),g(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},Tt=(e,t)=>{const o=e.getInput();o&&(U(o),g(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,W(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",W(o),o.focus(),e.hideLoading()}))};const At=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=At(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=At(n)),t.push([o,n])}),t},Et=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),It=(e,t)=>{const o=he.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return St(o);case\"radio\":return kt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?Bt(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?_t(e,s):$t(e,s)},Bt=(e,t,o)=>{const n=he.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>g(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?_t(e,t):$t(e,t)})},_t=(e,t)=>{const o=he.innerParams.get(e);o.showLoaderOnDeny&&bt(_()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),ht(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Lt(e,t))):e.close({isDenied:!0,value:t})},Dt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Lt=(e,t)=>{e.rejectPromise(t)},$t=(e,t)=>{const o=he.innerParams.get(e);o.showLoaderOnConfirm&&bt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preConfirm(t,o.validationMessage))).then(o=>{ee(E())||!1===o?(e.hideLoading(),ht(e)):Dt(e,void 0===o?t:o)}).catch(t=>Lt(e,t))):Dt(e,t)};function Pt(){const e=he.innerParams.get(this);if(!e)return;const t=he.domCache.get(this);U(t.loader),q()?e.icon&&W(k()):Ot(t),V([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Ot=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?W(o[0],\"inline-block\"):!ee(I())&&!ee(_())&&!ee(B())&&U(e.actions)};function Mt(){const e=he.innerParams.get(this),t=he.domCache.get(this);return t?z(t.popup,e.input):null}function Nt(e,t,o){const n=he.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function qt(e,t){const o=S();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function jt(){Nt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function Ht(){Nt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Xt(){qt(this.getInput(),!1)}function zt(){qt(this.getInput(),!0)}function Ft(e){const t=he.domCache.get(this),o=he.innerParams.get(this);j(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&J(t.validationMessage,o.customClass.validationMessage),W(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),F(n),J(n,a.inputerror))}function Rt(){const e=he.domCache.get(this);e.validationMessage&&U(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),V(t,a.inputerror))}const Jt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Vt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Gt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Wt=e=>Object.prototype.hasOwnProperty.call(Jt,e),Ut=e=>-1!==Vt.indexOf(e),Zt=e=>Yt[e],Kt=e=>{Wt(e)||d(`Unknown parameter \"${e}\"`)},Qt=e=>{Gt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&m(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Kt(t),e.toast&&Qt(t),eo(t)};function oo(e){const t=v(),o=S(),n=he.innerParams.get(this);if(!o||H(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),i=Object.assign({},n,s);to(i),t&&(t.dataset.swal2Theme=i.theme),Fe(this,i),he.innerParams.set(this,i),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Ut(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=he.domCache.get(this),o=he.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),io(this)):ao(this)}const io=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(he,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(he,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:Ht,disableInput:zt,disableLoading:Pt,enableButtons:jt,enableInput:Xt,getInput:Mt,handleAwaitingPromise:ht,hideLoading:Pt,rejectPromise:mt,resetValidationMessage:Rt,showValidationMessage:Ft,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(Je.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const mo=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},ho=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&h(e.allowOutsideClick)&&o(Je.backdrop)}},go=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const fo=()=>{if(n.timeout)return(()=>{const e=P();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},vo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let bo=!1;const yo={};const So=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var ko=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||go(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||go(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,bo||(document.body.addEventListener(\"click\",So),bo=!0)},clickCancel:()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=_())||void 0===e?void 0:e.click()},enableLoading:bt,fire:function(...e){return new this(...e)},getActions:L,getCancelButton:B,getCloseButton:O,getConfirmButton:I,getContainer:v,getDenyButton:_,getFocusableElements:M,getFooter:$,getHtmlContainer:x,getIcon:k,getIconContent:()=>y(a[\"icon-content\"]),getImage:T,getInputLabel:()=>y(a[\"input-label\"]),getLoader:D,getPopup:S,getProgressSteps:A,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:P,getTitle:C,getValidationMessage:E,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=S();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Ut,isValidParameter:Wt,isVisible:()=>ee(S()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:vo,showLoading:bt,stopTimer:fo,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?fo():vo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const xo=[\"swal-title\",\"swal-html\",\"swal-footer\"],To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{$o(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Jt&&\"boolean\"==typeof Jt[o]?\"false\"!==n:o in Jt&&\"object\"==typeof Jt[o]?JSON.parse(n):n)}),t},Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},Eo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{$o(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Io=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&($o(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},Bo=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&($o(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},_o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&($o(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{$o(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},Do=(e,t)=>{const o={};for(const n in t){const s=t[n],i=e.querySelector(s);i&&($o(i,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=i.innerHTML.trim())}return o},Lo=e=>{const t=xo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},$o=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Po=e=>{var t,o;const s=v(),i=S();if(!s||!i)return;\"function\"==typeof e.willOpen&&e.willOpen(i),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",i);const a=window.getComputedStyle(document.body).overflowY;if(qo(s,i,e),setTimeout(()=>{Mo(s,i)},10),N()&&(No(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=v();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),q()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(i))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",i)},Oo=e=>{const t=S();if(!t||e.target!==t)return;const o=v();o&&(t.removeEventListener(\"animationend\",Oo),t.removeEventListener(\"transitionend\",Oo),o.style.overflowY=\"auto\",V(o,a[\"no-transition\"]))},Mo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Oo),t.addEventListener(\"transitionend\",Oo)):e.style.overflowY=\"auto\"},No=(e,t,o)=>{(()=>{if(nt&&!H(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",J(document.body,a.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},qo=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&J(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),W(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&J(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):W(t,\"grid\"),J([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&J([document.documentElement,document.body],a[\"height-auto\"])};var jo=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),Ho=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Xo(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=jo),\"url\"===e.input&&(e.inputValidator=Ho))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let zo;var Fo=new WeakMap;class Ro{constructor(...t){if(o(this,Fo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;zo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,i,a;this.params=n,this.isAwaitingPromise=!1,s=Fo,i=this,a=this._main(zo.params),s.set(e(s,i),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),N()&&ot()}n.currentInstance=zo;const o=Vo(e,t);Xo(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Yo(zo);return Fe(zo,o),he.innerParams.set(zo,o),Jo(zo,s,o)}then(e){return t(Fo,this).then(e)}finally(e){return t(Fo,this).finally(e)}}const Jo=(e,t,o)=>new Promise((s,i)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,i),t.confirmButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.input?It(e,\"confirm\"):$t(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?It(e,\"deny\"):_t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(Je.cancel)})(e,a)},t.closeButton.onclick=()=>{a(Je.close)},((e,t,o)=>{e.toast?co(e,t,o):(mo(t),ho(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Ve(e),!t.toast){const n=e=>Ue(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:S();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?xt(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||f(t.inputValue))&&(bt(I()),Tt(e,t))})(e,o),Po(o),Go(n,o,a),Wo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Vo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Lo(o),Object.assign(To(o),Ao(o),Eo(o),Io(o),Bo(o),_o(o),Do(o,xo))})(e),n=Object.assign({},Jt,t,o,e);return n.showClass=Object.assign({},Jt.showClass,n.showClass),n.hideClass=Object.assign({},Jt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:S(),container:v(),actions:L(),confirmButton:I(),denyButton:_(),cancelButton:B(),loader:D(),closeButton:O(),validationMessage:E(),progressSteps:A()};return he.domCache.set(e,t),t},Go=(e,t,o)=>{const n=P();U(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(W(n),X(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Wo=(e,t)=>{if(!t.toast)return h(t.allowEnterKey)?void(Uo(e)||Zo(e,t)||Ye(-1,1)):(m(\"allowEnterKey\"),void Ko())},Uo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Ko=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=Ht,Ro.prototype.enableButtons=jt,Ro.prototype.getInput=Mt,Ro.prototype.disableInput=zt,Ro.prototype.enableInput=Xt,Ro.prototype.hideLoading=Pt,Ro.prototype.disableLoading=Pt,Ro.prototype.showValidationMessage=Ft,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=mt,Ro.prototype.update=oo,Ro.prototype._destroy=so,Object.assign(Ro,ko),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(zo&&zo[e])return zo[e](...t)}}),Ro.DismissReason=Je,Ro.version=\"11.26.17\";const Qo=Ro;return Qo.default=Qo,Qo}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var i=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&i>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},i=document.getElementsByClassName(\"toastify\"),a=0;a\u003Ci.length;a++){e=!0===n(i[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=i[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(i[a].style[e]=s[e]+\"px\",s[e]+=r+15):!0===n(i[a],\"toastify-left\")?(i[a].style[e]=t[e]+\"px\",t[e]+=r+15):(i[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,exports:{}};return e[n].call(i.exports,i,i.exports,o),i.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(8465),t=o.n(e);function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},s.apply(null,arguments)}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),m=l(\u002FiP(ad|od|hone)\u002Fi),h=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function g(e,t,o){e.addEventListener(t,o,!c&&w)}function f(e,t,o){e.removeEventListener(t,o,!c&&w)}function v(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function b(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&v(e,t):v(e,t))||n&&e===o)return e;if(e===o)break}while(e=b(e))}return null}var S,k=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(k,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(k,\" \")}}function x(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function T(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=x(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var s=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return s&&new s(o)}function A(e,t,o){if(e){var n=e.getElementsByTagName(t),s=0,i=n.length;if(o)for(;s\u003Ci;s++)o(n[s],s);return n}return[]}function E(){return document.scrollingElement||document.documentElement}function I(e,t,o,n,s){if(e.getBoundingClientRect||e===window){var i,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==E()?(a=(i=e.getBoundingClientRect()).top,r=i.left,l=i.bottom,d=i.right,u=i.height,p=i.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(s=s||e.parentNode,!c))do{if(s&&s.getBoundingClientRect&&(\"none\"!==x(s,\"transform\")||o&&\"static\"!==x(s,\"position\"))){var m=s.getBoundingClientRect();a-=m.top+parseInt(x(s,\"border-top-width\")),r-=m.left+parseInt(x(s,\"border-left-width\")),l=a+i.height,d=r+i.width;break}}while(s=s.parentNode);if(n&&e!==window){var h=T(s||e),w=h&&h.a,g=h&&h.d;h&&(l=(a\u002F=g)+(u\u002F=g),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function B(e,t,o){for(var n=P(e,!0),s=I(e)[t];n;){var i=I(n)[o];if(!(\"top\"===o||\"left\"===o?s>=i:s\u003C=i))return n;if(n===E())break;n=P(n,!1)}return!1}function _(e,t,o,n){for(var s=0,i=0,a=e.children;i\u003Ca.length;){if(\"none\"!==a[i].style.display&&a[i]!==Ne.ghost&&(n||a[i]!==Ne.dragged)&&y(a[i],o.draggable,e,!1)){if(s===t)return a[i];s++}i++}return null}function D(e,t){for(var o=e.lastElementChild;o&&(o===Ne.ghost||\"none\"===x(o,\"display\")||t&&!v(o,t));)o=o.previousElementSibling;return o||null}function L(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===Ne.clone||t&&!v(e,t)||o++;return o}function $(e){var t=0,o=0,n=E();if(e)do{var s=T(e),i=s.a,a=s.d;t+=e.scrollLeft*i,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function P(e,t){if(!e||!e.getBoundingClientRect)return E();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var s=x(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==s.overflowX||\"scroll\"==s.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==s.overflowY||\"scroll\"==s.overflowY)){if(!o.getBoundingClientRect||o===document.body)return E();if(n||t)return o;n=!0}}}while(o=o.parentNode);return E()}function O(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function M(e,t){return function(){if(!S){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),S=setTimeout(function(){S=void 0},t)}}}function N(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function q(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function j(e,t,o){var n={};return Array.from(e.children).forEach(function(s){var i,a,r,l;if(y(s,t.draggable,e,!1)&&!s.animated&&s!==o){var c=I(s);n.left=Math.min(null!==(i=n.left)&&void 0!==i?i:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var H=\"Sortable\"+(new Date).getTime();var X=[],z={initializeByDefault:!0},F={mount:function(e){for(var t in z)z.hasOwnProperty(t)&&!(t in e)&&(e[t]=z[t]);X.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),X.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var s=e+\"Global\";X.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][s]&&t[n.pluginName][s](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var i in X.forEach(function(n){var i=n.pluginName;if(e.options[i]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[i]=a,s(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(i)){var a=this.modifyOption(e,i,e.options[i]);void 0!==a&&(e.options[i]=a)}},getEventProperties:function(e,t){var o={};return X.forEach(function(n){\"function\"==typeof n.eventProperties&&s(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return X.forEach(function(s){e[s.pluginName]&&s.optionListeners&&\"function\"==typeof s.optionListeners[t]&&(n=s.optionListeners[t].call(e[s.pluginName],o))}),n}};var R=[\"evt\"],J=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,s=function(e,t){if(null==e)return{};var o,n,s=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n\u003Ci.length;n++)o=i[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}(o,R);F.pluginEvent.bind(Ne)(e,t,a({dragEl:Y,parentEl:G,ghostEl:W,rootEl:U,nextEl:Z,lastDownEl:K,cloneEl:Q,cloneHidden:ee,dragStarted:me,putSortable:ae,activeSortable:Ne.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se,hideGhostForTarget:$e,unhideGhostForTarget:Pe,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){V({sortable:t,name:e,originalEvent:n})}},s))};function V(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,s=e.targetEl,i=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,m=e.oldDraggableIndex,h=e.newDraggableIndex,w=e.originalEvent,g=e.putSortable,f=e.extraEventProperties;if(t=t||o&&o[H]){var v,b=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(v=document.createEvent(\"Event\")).initEvent(n,!0,!0):v=new CustomEvent(n,{bubbles:!0,cancelable:!0}),v.to=r||o,v.from=l||o,v.item=s||o,v.clone=i,v.oldIndex=u,v.newIndex=p,v.oldDraggableIndex=m,v.newDraggableIndex=h,v.originalEvent=w,v.pullMode=g?g.lastPutMode:void 0;var S=a(a({},f),F.getEventProperties(n,t));for(var k in S)v[k]=S[k];o&&o.dispatchEvent(v),b[y]&&b[y].call(t,v)}}(a({putSortable:ae,cloneEl:Q,targetEl:Y,rootEl:U,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se},e))}var Y,G,W,U,Z,K,Q,ee,te,oe,ne,se,ie,ae,re,le,ce,de,ue,pe,me,he,we,ge,fe,ve=!1,be=!1,ye=[],Se=!1,ke=!1,Ce=[],xe=!1,Te=[],Ae=\"undefined\"!=typeof document,Ee=m,Ie=d||c?\"cssFloat\":\"float\",Be=Ae&&!h&&!m&&\"draggable\"in document.createElement(\"div\"),_e=function(){if(Ae){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),De=function(e,t){var o=x(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),s=_(e,0,t),i=_(e,1,t),a=s&&x(s),r=i&&x(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+I(s).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+I(i).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(s&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!i||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return s&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Ie]||i&&\"none\"===o[Ie]&&l+c>n)?\"vertical\":\"horizontal\"},Le=function(e){function t(e,o){return function(n,s,i,a){var r=n.options.group.name&&s.options.group.name&&n.options.group.name===s.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,s,i,a),o)(n,s,i,a);var l=(o?n:s).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},$e=function(){!_e&&W&&x(W,\"display\",\"none\")},Pe=function(){!_e&&W&&x(W,\"display\",\"\")};Ae&&!h&&document.addEventListener(\"click\",function(e){if(be)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),be=!1,!1},!0);var Oe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(s=e.clientX,i=e.clientY,ye.some(function(e){var t=e[H].options.emptyInsertThreshold;if(t&&!D(e)){var o=I(e),n=s>=o.left-t&&s\u003C=o.right+t,r=i>=o.top-t&&i\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[H]._onDragOver(o)}}var s,i,a},Me=function(e){Y&&Y.parentNode[H]._isOutsideThisEl(e.target)};function Ne(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=s({},t),e[H]=this;var o,n,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return De(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ne.supportPointer&&\"PointerEvent\"in window&&(!p||m),emptyInsertThreshold:5};for(var r in F.initializePlugins(this,e,i),i)!(r in t)&&(t[r]=i[r]);for(var l in Le(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&Be,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?g(e,\"pointerdown\",this._onTapStart):(g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),s(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==x(e,\"display\")&&e!==Ne.ghost){n.push({target:e,rect:I(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=T(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var s=!1,i=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=I(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=T(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&O(l,r)&&!O(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),O(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(s=!0,i=Math.max(i,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),s?o=setTimeout(function(){\"function\"==typeof e&&e()},i):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){x(e,\"transition\",\"\"),x(e,\"transform\",\"\");var s=T(this.el),i=s&&s.a,a=s&&s.d,r=(t.left-o.left)\u002F(i||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,x(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),x(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),x(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){x(e,\"transition\",\"\"),x(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function qe(e,t,o,n,s,i,a,r){var l,u,p=e[H],m=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=s||t,l.relatedRect=i||I(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),m&&(u=m.call(p,l,a)),u}function je(e){e.draggable=!1}function He(){xe=!1}function Xe(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function ze(e){return setTimeout(e,0)}function Fe(e){return clearTimeout(e)}Ne.prototype={constructor:Ne,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(he=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,s=n.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Te.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Te.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(i)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||K===r)){if(te=L(r),ne=L(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return V({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),J(\"filter\",t,{evt:e}),void(s&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return V({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),J(\"filter\",t,{evt:e}),!0})))return void(s&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,s=this,i=s.el,a=s.options,r=i.ownerDocument;if(o&&!Y&&o.parentNode===i){var l=I(o);if(U=i,G=(Y=o).parentNode,Z=Y.nextSibling,K=o,ie=a.group,Ne.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){J(\"delayEnded\",s,{evt:e}),Ne.eventCanceled?s._onDrop():(s._disableDelayedDragEvents(),!u&&s.nativeDraggable&&(Y.draggable=!0),s._triggerDragStart(e,t),V({sortable:s,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){A(Y,e.trim(),je)}),g(r,\"dragover\",Oe),g(r,\"mousemove\",Oe),g(r,\"touchmove\",Oe),a.supportPointer?(g(r,\"pointerup\",s._onDrop),!this.nativeDraggable&&g(r,\"pointercancel\",s._onDrop)):(g(r,\"mouseup\",s._onDrop),g(r,\"touchend\",s._onDrop),g(r,\"touchcancel\",s._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),J(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(Ne.eventCanceled)return void this._onDrop();a.supportPointer?(g(r,\"pointerup\",s._disableDelayedDrag),g(r,\"pointercancel\",s._disableDelayedDrag)):(g(r,\"mouseup\",s._disableDelayedDrag),g(r,\"touchend\",s._disableDelayedDrag),g(r,\"touchcancel\",s._disableDelayedDrag)),g(r,\"mousemove\",s._delayedDragTouchMoveHandler),g(r,\"touchmove\",s._delayedDragTouchMoveHandler),a.supportPointer&&g(r,\"pointermove\",s._delayedDragTouchMoveHandler),s._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&je(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._disableDelayedDrag),f(e,\"touchend\",this._disableDelayedDrag),f(e,\"touchcancel\",this._disableDelayedDrag),f(e,\"pointerup\",this._disableDelayedDrag),f(e,\"pointercancel\",this._disableDelayedDrag),f(e,\"mousemove\",this._delayedDragTouchMoveHandler),f(e,\"touchmove\",this._delayedDragTouchMoveHandler),f(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?g(document,\"pointermove\",this._onTouchMove):g(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(g(Y,\"dragend\",this),g(U,\"dragstart\",this._onDragStart));try{document.selection?ze(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(ve=!1,U&&Y){J(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&g(document,\"dragover\",Me);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),Ne.active=this,e&&this._appendGhost(),V({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,$e();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[H]._isOutsideThisEl(e),t)do{if(t[H]&&t[H]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=b(t));Pe()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,s=e.touches?e.touches[0]:e,i=W&&T(W,!0),a=W&&i&&i.a,r=W&&i&&i.d,l=Ee&&fe&&$(fe),c=(s.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(s.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!Ne.active&&!ve){if(o&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(W){i?(i.e+=c-(ce||0),i.f+=d-(de||0)):i={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(i.a,\",\").concat(i.b,\",\").concat(i.c,\",\").concat(i.d,\",\").concat(i.e,\",\").concat(i.f,\")\");x(W,\"webkitTransform\",u),x(W,\"mozTransform\",u),x(W,\"msTransform\",u),x(W,\"transform\",u),ce=c,de=d,le=s}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!W){var e=this.options.fallbackOnBody?document.body:U,t=I(Y,!0,Ee,!0,e),o=this.options;if(Ee){for(fe=e;\"static\"===x(fe,\"position\")&&\"none\"===x(fe,\"transform\")&&fe!==document;)fe=fe.parentNode;fe!==document.body&&fe!==document.documentElement?(fe===document&&(fe=E()),t.top+=fe.scrollTop,t.left+=fe.scrollLeft):fe=E(),Ce=$(fe)}C(W=Y.cloneNode(!0),o.ghostClass,!1),C(W,o.fallbackClass,!0),C(W,o.dragClass,!0),x(W,\"transition\",\"\"),x(W,\"transform\",\"\"),x(W,\"box-sizing\",\"border-box\"),x(W,\"margin\",0),x(W,\"top\",t.top),x(W,\"left\",t.left),x(W,\"width\",t.width),x(W,\"height\",t.height),x(W,\"opacity\",\"0.8\"),x(W,\"position\",Ee?\"absolute\":\"fixed\"),x(W,\"zIndex\",\"100000\"),x(W,\"pointerEvents\",\"none\"),Ne.ghost=W,e.appendChild(W),x(W,\"transform-origin\",ue\u002FparseInt(W.style.width)*100+\"% \"+pe\u002FparseInt(W.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,s=o.options;J(\"dragStart\",this,{evt:e}),Ne.eventCanceled?this._onDrop():(J(\"setupClone\",this),Ne.eventCanceled||((Q=q(Y)).removeAttribute(\"id\"),Q.draggable=!1,Q.style[\"will-change\"]=\"\",this._hideClone(),C(Q,this.options.chosenClass,!1),Ne.clone=Q),o.cloneId=ze(function(){J(\"clone\",o),Ne.eventCanceled||(o.options.removeCloneOnHide||U.insertBefore(Q,Y),o._hideClone(),V({sortable:o,name:\"clone\"}))}),!t&&C(Y,s.dragClass,!0),t?(be=!0,o._loopId=setInterval(o._emulateDragOver,50)):(f(document,\"mouseup\",o._onDrop),f(document,\"touchend\",o._onDrop),f(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",s.setData&&s.setData.call(o,n,Y)),g(document,\"drop\",o),x(Y,\"transform\",\"translateZ(0)\")),ve=!0,o._dragStartId=ze(o._dragStarted.bind(o,t,e)),g(document,\"selectstart\",o),me=!0,window.getSelection().removeAllRanges(),p&&x(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,s,i=this.el,r=e.target,l=this.options,c=l.group,d=Ne.active,u=ie===c,p=l.sort,m=ae||d,h=this,w=!1;if(!xe){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,i,!0),X(\"dragOver\"),Ne.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||h._ignoreWhileAnimating===r)return F(!1);if(be=!1,d&&!l.disabled&&(u?p||(n=G!==U):ae===this||(this.lastPutMode=ie.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(s=\"vertical\"===this._getDirection(e,r),t=I(Y),X(\"dragOverValid\"),Ne.eventCanceled)return w;if(n)return G=U,z(),this._hideClone(),X(\"revert\"),Ne.eventCanceled||(Z?U.insertBefore(Y,Z):U.appendChild(Y)),F(!0);var g=D(i,l.draggable);if(!g||function(e,t,o){var n=I(D(o.el,o.options.draggable)),s=j(o.el,o.options,W);return t?e.clientX>s.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>s.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,s,this)&&!g.animated){if(g===Y)return F(!1);if(g&&i===e.target&&(r=g),r&&(o=I(r)),!1!==qe(U,i,Y,t,r,o,e,!!r))return z(),g&&g.nextSibling?i.insertBefore(Y,g.nextSibling):i.appendChild(Y),G=i,R(),F(!0)}else if(g&&function(e,t,o){var n=I(_(o.el,0,o.options,!0)),s=j(o.el,o.options,W);return t?e.clientX\u003Cs.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Cs.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,s,this)){var f=_(i,0,l,!0);if(f===Y)return F(!1);if(o=I(r=f),!1!==qe(U,i,Y,t,r,o,e,!1))return z(),i.insertBefore(Y,f),G=i,R(),F(!0)}else if(r.parentNode===i){o=I(r);var v,b,S,k=Y.parentNode!==i,T=!function(e,t,o){var n=o?e.left:e.top,s=o?e.right:e.bottom,i=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||s===r||n+i\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,s),A=s?\"top\":\"left\",E=B(r,\"top\",\"top\")||B(Y,\"top\",\"top\"),$=E?E.scrollTop:void 0;if(he!==r&&(b=o[A],Se=!1,ke=!T&&l.invertSwap||k),v=function(e,t,o,n,s,i,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&ge\u003Cc*s){if(!Se&&(1===we?l>d+c*i\u002F2:l\u003Cu-c*i\u002F2)&&(Se=!0),Se)p=!0;else if(1===we?l\u003Cd+ge:l>u-ge)return-we}else if(l>d+c*(1-s)\u002F2&&l\u003Cu-c*(1-s)\u002F2)return function(e){return L(Y)\u003CL(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*i\u002F2||l>u-c*i\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,s,T?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,ke,he===r),0!==v){var P=L(Y);do{P-=v,S=G.children[P]}while(S&&(\"none\"===x(S,\"display\")||S===W))}if(0===v||S===r)return F(!1);he=r,we=v;var O=r.nextElementSibling,M=!1,q=qe(U,i,Y,t,r,o,e,M=1===v);if(!1!==q)return 1!==q&&-1!==q||(M=1===q),xe=!0,setTimeout(He,30),z(),M&&!O?i.appendChild(Y):r.parentNode.insertBefore(Y,M?O:r),E&&N(E,0,$-E.scrollTop),G=Y.parentNode,void 0===b||ke||(ge=Math.abs(b-I(r)[A])),R(),F(!0)}if(i.contains(Y))return F(!1)}return!1}function X(l,c){J(l,h,a({evt:e,isOwner:u,axis:s?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:m,target:r,completed:F,onMove:function(o,n){return qe(U,i,Y,t,o,I(o),e,n)},changed:R},c))}function z(){X(\"dragOverAnimationCapture\"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function F(t){return X(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(h),h!==m&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==h&&h!==Ne.active?ae=h:h===Ne.active&&ae&&(ae=null),m===h&&(h._ignoreWhileAnimating=r),h.animateAll(function(){X(\"dragOverAnimationComplete\"),h._ignoreWhileAnimating=null}),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===i&&!r.animated)&&(he=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[H]._isOutsideThisEl(e.target),!t&&Oe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function R(){oe=L(Y),se=L(Y,l.draggable),V({sortable:h,name:\"change\",toEl:i,newIndex:oe,newDraggableIndex:se,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,\"mousemove\",this._onTouchMove),f(document,\"touchmove\",this._onTouchMove),f(document,\"pointermove\",this._onTouchMove),f(document,\"dragover\",Oe),f(document,\"mousemove\",Oe),f(document,\"touchmove\",Oe)},_offUpEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._onDrop),f(e,\"touchend\",this._onDrop),f(e,\"pointerup\",this._onDrop),f(e,\"pointercancel\",this._onDrop),f(e,\"touchcancel\",this._onDrop),f(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=L(Y),se=L(Y,o.draggable),J(\"drop\",this,{evt:e}),G=Y&&Y.parentNode,oe=L(Y),se=L(Y,o.draggable),Ne.eventCanceled||(ve=!1,ke=!1,Se=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Fe(this.cloneId),Fe(this._dragStartId),this.nativeDraggable&&(f(document,\"drop\",this),f(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&x(document.body,\"user-select\",\"\"),x(Y,\"transform\",\"\"),e&&(me&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),W&&W.parentNode&&W.parentNode.removeChild(W),(U===G||ae&&\"clone\"!==ae.lastPutMode)&&Q&&Q.parentNode&&Q.parentNode.removeChild(Q),Y&&(this.nativeDraggable&&f(Y,\"dragend\",this),je(Y),Y.style[\"will-change\"]=\"\",me&&!ve&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),V({sortable:this,name:\"unchoose\",toEl:G,newIndex:null,newDraggableIndex:null,originalEvent:e}),U!==G?(oe>=0&&(V({rootEl:G,name:\"add\",toEl:G,fromEl:U,originalEvent:e}),V({sortable:this,name:\"remove\",toEl:G,originalEvent:e}),V({rootEl:G,name:\"sort\",toEl:G,fromEl:U,originalEvent:e}),V({sortable:this,name:\"sort\",toEl:G,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(V({sortable:this,name:\"update\",toEl:G,originalEvent:e}),V({sortable:this,name:\"sort\",toEl:G,originalEvent:e})),Ne.active&&(null!=oe&&-1!==oe||(oe=te,se=ne),V({sortable:this,name:\"end\",toEl:G,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){J(\"nulling\",this),U=Y=G=W=Z=Q=K=ee=re=le=me=oe=se=te=ne=he=we=ae=ie=Ne.dragged=Ne.ghost=Ne.clone=Ne.active=null;var e=this.el;Te.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Te.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,s=o.length,i=this.options;n\u003Cs;n++)y(e=o[n],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||Xe(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var s=n.children[t];y(s,this.options.draggable,n,!1)&&(o[e]=s)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=F.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Le(o)},destroy:function(){J(\"destroy\",this);var e=this.el;e[H]=null,f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart),f(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(J(\"hideClone\",this),Ne.eventCanceled)return;x(Q,\"display\",\"none\"),this.options.removeCloneOnHide&&Q.parentNode&&Q.parentNode.removeChild(Q),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(J(\"showClone\",this),Ne.eventCanceled)return;Y.parentNode!=U||this.options.group.revertClone?Z?U.insertBefore(Q,Z):U.appendChild(Q):U.insertBefore(Q,Y),this.options.group.revertClone&&this.animate(Y,Q),x(Q,\"display\",\"\"),ee=!1}}else this._hideClone()}},Ae&&g(document,\"touchmove\",function(e){(Ne.active||ve)&&e.cancelable&&e.preventDefault()}),Ne.utils={on:g,off:f,css:x,find:A,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:M,closest:y,toggleClass:C,clone:q,index:L,nextTick:ze,cancelNextTick:Fe,detectDirection:De,getChild:_,expando:H},Ne.get=function(e){return e[H]},Ne.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(Ne.utils=a(a({},Ne.utils),e.utils)),F.mount(e)})},Ne.create=function(e,t){return new Ne(e,t)},Ne.version=\"1.15.7\";var Re,Je,Ve,Ye,Ge,We,Ue=[],Ze=!1;function Ke(){Ue.forEach(function(e){clearInterval(e.pid)}),Ue=[]}function Qe(){clearInterval(We)}var et=M(function(e,t,o,n){if(t.scroll){var s,i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=E(),d=!1;Je!==o&&(Je=o,Ke(),Re=t.scroll,s=t.scrollFn,!0===Re&&(Re=P(o,!0)));var u=0,p=Re;do{var m=p,h=I(m),w=h.top,g=h.bottom,f=h.left,v=h.right,b=h.width,y=h.height,S=void 0,k=void 0,C=m.scrollWidth,T=m.scrollHeight,A=x(m),B=m.scrollLeft,_=m.scrollTop;m===c?(S=b\u003CC&&(\"auto\"===A.overflowX||\"scroll\"===A.overflowX||\"visible\"===A.overflowX),k=y\u003CT&&(\"auto\"===A.overflowY||\"scroll\"===A.overflowY||\"visible\"===A.overflowY)):(S=b\u003CC&&(\"auto\"===A.overflowX||\"scroll\"===A.overflowX),k=y\u003CT&&(\"auto\"===A.overflowY||\"scroll\"===A.overflowY));var D=S&&(Math.abs(v-i)\u003C=r&&B+b\u003CC)-(Math.abs(f-i)\u003C=r&&!!B),L=k&&(Math.abs(g-a)\u003C=r&&_+y\u003CT)-(Math.abs(w-a)\u003C=r&&!!_);if(!Ue[u])for(var $=0;$\u003C=u;$++)Ue[$]||(Ue[$]={});Ue[u].vx==D&&Ue[u].vy==L&&Ue[u].el===m||(Ue[u].el=m,Ue[u].vx=D,Ue[u].vy=L,clearInterval(Ue[u].pid),0==D&&0==L||(d=!0,Ue[u].pid=setInterval(function(){n&&0===this.layer&&Ne.active._onTouchMove(Ge);var t=Ue[this.layer].vy?Ue[this.layer].vy*l:0,o=Ue[this.layer].vx?Ue[this.layer].vx*l:0;\"function\"==typeof s&&\"continue\"!==s.call(Ne.dragged.parentNode[H],o,t,e,Ge,Ue[this.layer].el)||N(Ue[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=P(p,!1)));Ze=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,s=e.activeSortable,i=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||s;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(i(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=_(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},s(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},s(nt,{pluginName:\"removeOnSpill\"}),Ne.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?g(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?g(document,\"touchmove\",this._handleFallbackAutoScroll):g(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):(f(document,\"pointermove\",this._handleFallbackAutoScroll),f(document,\"touchmove\",this._handleFallbackAutoScroll),f(document,\"mousemove\",this._handleFallbackAutoScroll)),Qe(),Ke(),clearTimeout(S),S=void 0},nulling:function(){Ge=Je=Re=Ze=We=Ve=Ye=null,Ue.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,s=(e.touches?e.touches[0]:e).clientY,i=document.elementFromPoint(n,s);if(Ge=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,i,t);var a=P(i,!0);!Ze||We&&n===Ve&&s===Ye||(We&&Qe(),We=setInterval(function(){var i=P(document.elementFromPoint(n,s),!0);i!==a&&(a=i,Ke()),et(e,o.options,i,t)},10),Ve=n,Ye=s)}else{if(!this.options.bubbleScroll||P(i,!0)===E())return void Ke();et(e,this.options,P(i,!1),!1)}}},s(e,{pluginName:\"scroll\",initializeByDefault:!0})}),Ne.mount(nt,ot);const st=Ne,it=\"lp-hidden\",at=\"loading\",rt=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},lt=(e,t=0)=>{e&&(t?e.classList.remove(it):e.classList.add(it))},ct=(e,t)=>{e&&(t?e.classList.add(at):e.classList.remove(at))},dt=(e,t)=>{const o=(e=>{const t={},o=new FormData(e);for(const e of o.entries()){const n=e[0],s=o.getAll(n);t.hasOwnProperty(n)||(t[n]=s.join(\",\"))}return t})(e);return(e=>{const t=[],o=e.elements;for(let e=0;e\u003Co.length;e++){const n=o[e].name;n&&!t.includes(n)&&t.push(n)}return t})(e).forEach(e=>{o.hasOwnProperty(e)?\"\"===o[e][0]&&(delete o[e],delete t[e]):delete t[e]}),t={...t,...o}},ut=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})};var pt=o(7736),mt=o.n(pt),ht=o(5072),wt=o.n(ht),gt=o(7825),ft=o.n(gt),vt=o(7659),bt=o.n(vt),yt=o(5056),St=o.n(yt),kt=o(540),Ct=o.n(kt),xt=o(1113),Tt=o.n(xt),At=o(9455),Et={};Et.styleTagTransform=Tt(),Et.setAttributes=St(),Et.insert=bt().bind(null,\"head\"),Et.domAPI=ft(),Et.insertStyleElement=Ct(),wt()(At.A,Et),At.A&&At.A.locals&&At.A.locals;const It={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},Bt=(e,t=\"success\",o)=>{let n=It;o&&(n={...n,...o}),new(mt())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()};let _t,Dt,Lt=[];class $t{constructor(){this.init()}static selectors={elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elBtnAddItemsSelected:\".lp-btn-add-items-selected\",elBtnCountItemsSelected:\".lp-btn-count-items-selected\",elHeaderCountItemSelected:\".header-count-items-selected\",elSelectItem:\".lp-select-item\",elListItems:\".list-items\",elPopupItemsToSelect:\".lp-popup-items-to-select\",elSearchTitleItem:\".lp-search-title-item\",elBtnBackListItems:\".lp-btn-back-to-select-items\",elListItemsWrap:\".list-items-wrap\",elListItemsSelected:\".list-items-selected\",elItemSelectedClone:\".li-item-selected.clone\",elItemSelected:\".li-item-selected\",LPTarget:\".lp-target\"};init(){this.events()}events=()=>{$t._loadedEvents||($t._loadedEvents=!0,ut(\"click\",[{selector:$t.selectors.elBtnShowPopupItemsToSelect,callBack:this.showPopupItemsToSelect.name,class:this},{selector:$t.selectors.elSelectItem,callBack:this.selectItemsFromList.name,class:this},{selector:$t.selectors.elBtnCountItemsSelected,callBack:this.showItemsSelected.name,class:this},{selector:$t.selectors.elBtnBackListItems,callBack:this.backToSelectItems.name,class:this},{selector:$t.selectors.elItemSelected,callBack:this.removeItemSelected.name,class:this},{selector:\".tabs .tab\",callBack:this.chooseTabItemsType.name,class:this}]),ut(\"keyup\",[{selector:$t.selectors.elSearchTitleItem,callBack:this.searchTitleItemToSelect.name,class:this}]))};showPopupItemsToSelect=e=>{const{e:o,target:n=!1,callBack:s}=e;if(!n.closest(`${$t.selectors.elBtnShowPopupItemsToSelect}`))return;const i=n.dataset.template||\"\",a=document.querySelector(i);t().fire({html:a.innerHTML,showConfirmButton:!1,showCloseButton:!0,width:\"60%\",customClass:{popup:\"lp-select-items-popup\",htmlContainer:\"lp-select-items-html-container\",container:\"lp-select-items-container\"},willOpen:()=>{_t=t().getPopup();const e=_t.querySelector(`${$t.selectors.LPTarget}`);if(e){const t=window.lpAJAXG.getDataSetCurrent(e);t.args.paged=1,t.args.item_selecting=Lt||[],window.lpAJAXG.setDataSetCurrent(e,t),window.lpAJAXG.fetchAJAX(t,{success:t=>{const{data:o}=t;_t.querySelector(\".lp-skeleton-animation\").remove(),e.innerHTML=o.content||\"\",this.watchItemsSelectedDataChange()}})}}}).then(e=>{e.isDismissed})};chooseTabItemsType=e=>{const{e:t,target:o,callBack:n}=e,s=o.closest(\".tab\");if(!s)return;t.preventDefault();const i=s.closest(\".tabs\");if(!i)return;const a=i.closest(`${$t.selectors.elPopupItemsToSelect}`),r=a.querySelector(`${$t.selectors.elSearchTitleItem}`),l=s.dataset.type;i.querySelectorAll(\".tab\").forEach(e=>{e.classList.contains(\"active\")&&e.classList.remove(\"active\")}),s.classList.add(\"active\"),r.value=\"\";const c=a.querySelector(`${$t.selectors.LPTarget}`),d=window.lpAJAXG.getDataSetCurrent(c);d.args.item_type=l,d.args.paged=1,d.args.item_selecting=Lt||[],window.lpAJAXG.setDataSetCurrent(c,d),window.lpAJAXG.showHideLoading(c,1),window.lpAJAXG.fetchAJAX(d,{success:e=>{const{data:t}=e;c.innerHTML=t.content||\"\"},error:e=>{Bt(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(c,0),this.watchItemsSelectedDataChange()}})};selectItemsFromList=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elSelectItem}`);if(!n)return;const s=n.querySelector('input[type=\"checkbox\"]');if(\"INPUT\"!==o.tagName)return void s.click();if(!n.closest(`${$t.selectors.elListItems}`))return;const i={...s.dataset};if(s.checked)Lt.some(e=>e.id===i.id)||Lt.push(i);else{const e=Lt.findIndex(e=>e.id===i.id);-1!==e&&Lt.splice(e,1)}this.watchItemsSelectedDataChange()};searchTitleItemToSelect=e=>{const{e:t,target:o}=e,n=o.closest($t.selectors.elSearchTitleItem);if(!n)return;const s=_t.querySelector(`${$t.selectors.LPTarget}`);clearTimeout(Dt),Dt=setTimeout(()=>{const e=window.lpAJAXG.getDataSetCurrent(s);e.args.search_title=n.value.trim(),e.args.item_selecting=Lt,e.args.paged=1,window.lpAJAXG.setDataSetCurrent(s,e),window.lpAJAXG.showHideLoading(s,1),window.lpAJAXG.fetchAJAX(e,{success:e=>{const{data:t}=e;s.innerHTML=t.content||\"\"},error:e=>{Bt(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(s,0)}})},800)};showItemsSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elBtnCountItemsSelected}`);if(!n)return;const s=_t.querySelector(`${$t.selectors.elBtnBackListItems}`),i=_t.querySelector(\".tabs\"),a=_t.querySelector(`${$t.selectors.elListItemsWrap}`),r=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),l=_t.querySelector(`${$t.selectors.elListItemsSelected}`),c=l.querySelector(`${$t.selectors.elItemSelectedClone}`);r.innerHTML=n.innerHTML,lt(a,0),lt(n,0),lt(i,0),lt(s,1),lt(r,1),lt(l,1),l.querySelectorAll(`${$t.selectors.elItemSelected}:not(.clone)`).forEach(e=>{e.remove()}),Lt.forEach(e=>{const t=c.cloneNode(!0);t.classList.remove(\"clone\"),Object.entries(e).forEach(([e,o])=>{t.dataset[e]=o}),t.querySelector(\".title-display\").innerHTML=e.title,lt(t,1),c.insertAdjacentElement(\"beforebegin\",t)})};backToSelectItems=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elBtnBackListItems}`);if(!n)return;const s=_t.querySelector(`${$t.selectors.elBtnCountItemsSelected}`),i=_t.querySelector(\".tabs\"),a=_t.querySelector(`${$t.selectors.elListItemsWrap}`),r=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),l=_t.querySelector(`${$t.selectors.elListItemsSelected}`);lt(s,1),lt(a,1),lt(i,1),lt(n,0),lt(r,0),lt(l,0)};removeItemSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elItemSelected}`);if(!n)return;const s=n.dataset,i=Lt.findIndex(e=>e.id===s.id);-1!==i&&Lt.splice(i,1),n.remove(),this.watchItemsSelectedDataChange()};watchItemsSelectedDataChange=()=>{const e=_t.querySelector(`${$t.selectors.elBtnAddItemsSelected}`),t=_t.querySelector(`${$t.selectors.elBtnCountItemsSelected}`),o=t.querySelector(\"span\"),n=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),s=_t.querySelector(`${$t.selectors.LPTarget}`);0!==Lt.length?(t.disabled=!1,e.disabled=!1,e.classList.add(\"active\"),o.textContent=`(${Lt.length})`,n.innerHTML=t.innerHTML):(t.disabled=!0,e.disabled=!0,e.classList.remove(\"active\"),o.textContent=\"\",n.textContent=\"\"),_t.querySelector(`${$t.selectors.elListItems}`).querySelectorAll('input[type=\"checkbox\"]').forEach(e=>{const t=e.dataset,o=Lt.some(e=>e.id===t.id);e.checked=o});const i=window.lpAJAXG.getDataSetCurrent(s);i.args.item_selecting=Lt,window.lpAJAXG.setDataSetCurrent(s,i)};addItemsSelectedToSection=e=>{const{e:o,target:n,callBackHandle:s}=e;_t&&(t().close(),\"function\"==typeof s&&(s(Lt),Lt=[]))}}const Pt=\"edit-course-curriculum\",Ot=new $t;class Mt{constructor(){this.courseId=null,this.elCurriculumSections=null,this.sectionIdSelected=null}static selectors={elSectionListItems:\".section-list-items\",elItemClone:\".section-item.clone\",elSectionItem:\".section-item\",elBtnSelectItemType:\".lp-btn-select-item-type\",elAddItemTypeClone:\".lp-add-item-type.clone\",elSectionActions:\".section-actions\",elAddItemType:\".lp-add-item-type\",elAddItemTypeTitleInput:\".lp-add-item-type-title-input\",elBtnAddItemCancel:\".lp-btn-add-item-cancel\",elBtnAddItem:\".lp-btn-add-item\",elItemTitleInput:\".lp-item-title-input\",elBtnUpdateItemTitle:\".lp-btn-update-item-title\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-item-title\",elBtnDeleteItem:\".lp-btn-delete-item\",elBtnSetPreviewItem:\".lp-btn-set-preview-item\"};init(){this.elEditCurriculum=document.querySelector(`${Ht.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${Ht.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${Ht.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.events(),this.sortAbleItem(),Ot.init()}events(){Mt._loadedEvents||(Mt._loadedEvents=this,ut(\"click\",[{selector:Mt.selectors.elBtnSelectItemType,class:this,callBack:this.addItemType.name},{selector:Mt.selectors.elBtnAddItem,class:this,callBack:this.addItemToSection.name},{selector:Mt.selectors.elBtnAddItemCancel,class:this,callBack:this.cancelAddItemType.name},{selector:Mt.selectors.elBtnUpdateItemTitle,class:this,callBack:this.updateTitle.name},{selector:Mt.selectors.elBtnCancelUpdateTitle,class:this,callBack:this.cancelUpdateTitle.name},{selector:Mt.selectors.elBtnDeleteItem,class:this,callBack:this.deleteItem.name},{selector:$t.selectors.elBtnShowPopupItemsToSelect,callBack:e=>{const{e:t,target:o}=e,n=o.closest(Nt.selectors.elSection);this.sectionIdSelected=n.dataset.sectionId}},{selector:$t.selectors.elBtnAddItemsSelected,class:Ot,callBack:Ot.addItemsSelectedToSection.name,callBackHandle:this.addItemsSelectedToSection.bind(this)},{selector:Mt.selectors.elBtnSetPreviewItem,class:this,callBack:this.updatePreviewItem.name}]),ut(\"keyup\",[{selector:Mt.selectors.elItemTitleInput,class:this,callBack:this.changeTitle.name},{selector:Mt.selectors.elAddItemTypeTitleInput,class:this,callBack:this.changeTitleAddNew.name}]),ut(\"keydown\",[{selector:Mt.selectors.elAddItemTypeTitleInput,class:this,callBack:this.addItemToSection.name,checkIsEventEnter:!0},{selector:Mt.selectors.elItemTitleInput,class:this,callBack:this.updateTitle.name,checkIsEventEnter:!0}]),ut(\"focusin\",[{selector:Mt.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name}]),ut(\"focusout\",[{selector:Mt.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}addItemType(e){const{e:t,target:o}=e,n=o,s=n.dataset.itemType,i=n.dataset.placeholder,a=n.dataset.buttonAddText,r=n.closest(`${Nt.selectors.elSection}`).querySelector(`${Mt.selectors.elSectionActions}`),l=r.querySelector(`${Mt.selectors.elAddItemTypeClone}`).cloneNode(!0),c=l.querySelector(`${Mt.selectors.elAddItemTypeTitleInput}`),d=l.querySelector(`${Mt.selectors.elBtnAddItem}`);l.classList.remove(\"clone\"),l.classList.add(s),lt(l,1),c.setAttribute(\"placeholder\",i),c.dataset.itemType=s,d.textContent=a,r.insertAdjacentElement(\"beforebegin\",l),c.focus()}cancelAddItemType(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elAddItemType}`);n&&n.remove()}addItemToSection(e){const{e:t,target:o,callBackNest:n}=e;t.preventDefault();const s=o.closest(`${Mt.selectors.elAddItemType}`),i=s.closest(`${Nt.selectors.elSection}`),a=i.dataset.sectionId,r=s.querySelector(`${Mt.selectors.elAddItemTypeTitleInput}`),l=r.value.trim(),c=r.dataset.itemType,d=r.dataset.messEmptyTitle;if(0===l.length)return void Bt(d,\"error\");const u=i.querySelector(`${Mt.selectors.elItemClone}`),p=u.cloneNode(!0),m=p.querySelector(`${Mt.selectors.elItemTitleInput}`);p.classList.remove(\"clone\"),p.classList.add(c),p.dataset.itemType=c,lt(p,1),ct(p,1),m.value=l,m.dataset.old=l,u.insertAdjacentElement(\"beforebegin\",p),s.remove();const h={success:t=>{const{message:o,status:s,data:i}=t;if(Bt(o,s),\"error\"===s)p.remove();else if(\"success\"===s){const{section_item:t,item_link:o}=i||{};p.dataset.itemId=t.item_id||0,p.querySelector(\".edit-link\").setAttribute(\"href\",o||\"\"),n&&\"function\"==typeof n.success&&(e.elItemNew=p,n.success(e))}},error:e=>{Bt(e,\"error\"),p.remove()},completed:()=>{ct(p,0),this.updateCountItems(i),n&&\"function\"==typeof n.completed&&(e.elItemNew=p,n.completed(e))}},w={course_id:this.courseId,action:\"create_item_add_to_section\",section_id:a,item_title:l,item_type:c,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(w,h)}changeTitle(e){const{target:t}=e,o=t.closest(`${Mt.selectors.elItemTitleInput}`);if(!o)return;const n=o.closest(`${Mt.selectors.elSectionItem}`);n&&(o.value.trim()===(o.dataset.old||\"\")?n.classList.remove(\"editing\"):n.classList.add(\"editing\"))}focusTitleInput(e){const{target:t,focusIn:o=!0}=e,n=t.closest(`${Mt.selectors.elItemTitleInput}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSectionItem}`);s&&(o?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}changeTitleAddNew(e){const{target:t}=e,o=t.closest(`${Mt.selectors.elAddItemTypeTitleInput}`);if(!o)return;const n=o.closest(`${Mt.selectors.elAddItemType}`);if(!n)return;const s=n.querySelector(`${Mt.selectors.elBtnAddItem}`);s&&(0===o.value.trim().length?s.classList.remove(\"active\"):s.classList.add(\"active\"))}updateTitle(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(`${Mt.selectors.elSectionItem}`);if(!n)return;const s=n.closest(`${Nt.selectors.elSection}`);if(!s)return;const i=n.querySelector(`${Mt.selectors.elItemTitleInput}`);if(!i)return;const a=n.dataset.itemId,r=n.dataset.itemType,l=i.value.trim(),c=i.dataset.old,d=i.dataset.messEmptyTitle;if(0===l.length)return void Bt(d,\"error\");if(l===c)return;i.blur(),ct(n,1);const u={success:e=>{const{message:t,status:o}=e;\"success\"===o?i.dataset.old=l:i.value=c,Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,0),n.classList.remove(\"editing\")}},p={course_id:this.courseId,action:\"update_item_of_section\",section_id:s.dataset.sectionId,item_id:a,item_type:r,item_title:l,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(p,u)}cancelUpdateTitle(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elBtnCancelUpdateTitle}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSectionItem}`),i=s.querySelector(`${Mt.selectors.elItemTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}deleteItem(e){const{e:o,target:n}=e,s=n.closest(`${Mt.selectors.elBtnDeleteItem}`);if(!s)return;const i=s.closest(`${Mt.selectors.elSectionItem}`);if(!i)return;const a=i.dataset.itemId,r=i.closest(`${Nt.selectors.elSection}`),l=r.dataset.sectionId;t().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpDataAdmin.i18n.cancel,confirmButtonText:lpDataAdmin.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){ct(i,1);const e={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"success\"===o&&i.remove()},error:e=>{Bt(e,\"error\")},completed:()=>{ct(i,0),this.updateCountItems(r)}},t={course_id:this.courseId,action:\"delete_item_from_section\",section_id:l,item_id:a,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(t,e)}})}sortAbleItem(){const e=this.elCurriculumSections.querySelectorAll(`${Mt.selectors.elSectionListItems}`);let t,o=0,n=0,s=0;e.forEach(e=>{new st(e,{handle:\".drag\",animation:150,group:{name:\"shared\"},onEnd:e=>{const i=[],a=e.item;s=a.closest(`${Nt.selectors.elSection}`).dataset.sectionId;const r={course_id:this.courseId,args:{id_url:Pt},action:\"update_item_section_and_position\"};r.item_id_change=o,r.section_id_new_of_item=s,r.section_id_old_of_item=n;const l=this.elCurriculumSections.querySelector(`.section[data-section-id=\"${s}\"]`);l.querySelectorAll(`${Mt.selectors.elSectionItem}`).forEach(e=>{const t=parseInt(e.dataset.itemId||0);0!==t&&i.push(t)}),r.items_position=i;const c={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(a,0),this.updateCountItems(l),n!==s&&this.updateCountItems(t)}};ct(a,1),window.lpAJAXG.fetchAJAX(r,c)},onMove:()=>{},onChoose:e=>{const s=e.item;o=s.dataset.itemId,t=s.closest(`${Nt.selectors.elSection}`),n=t.dataset.sectionId},onUpdate:()=>{}})})}addItemsSelectedToSection(e){const o=document.querySelector(`.section[data-section-id=\"${this.sectionIdSelected}\"]`),n=o.querySelector(`${Mt.selectors.elItemClone}`);e.forEach(e=>{const t=n.cloneNode(!0),o=t.querySelector(`${Mt.selectors.elItemTitleInput}`);t.dataset.itemId=e.id,t.classList.add(e.type),t.classList.remove(\"clone\"),t.dataset.itemType=e.type,t.querySelector(\".edit-link\").setAttribute(\"href\",e.editLink||\"\"),o.value=e.titleSelected||\"\",ct(t,1),lt(t,1),n.insertAdjacentElement(\"beforebegin\",t)}),t().close();const s={course_id:this.courseId,action:\"add_items_to_section\",section_id:this.sectionIdSelected,items:e,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(s,{success:t=>{const{message:s,status:i,data:a}=t,{html:r}=a||\"\";Bt(s,i),e.forEach(e=>{const t=o.querySelector(`${Mt.selectors.elSectionItem}[data-item-id=\"${e.id}\"]`);t&&t.remove()}),\"success\"===i&&n.insertAdjacentHTML(\"beforebegin\",r)},error:e=>{Bt(e,\"error\")},completed:()=>{this.updateCountItems(o)}})}updatePreviewItem(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elBtnSetPreviewItem}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSectionItem}`);if(!s)return;const i=n.querySelector(\"a\");i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\");const a=!i.classList.contains(\"lp-icon-eye-slash\"),r=s.dataset.itemId,l=s.dataset.itemType;ct(s,1);const c={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"error\"===o&&(i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\"))},error:e=>{Bt(e,\"error\"),i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\")},completed:()=>{ct(s,0)}},d={course_id:this.courseId,action:\"update_item_preview\",item_id:r,item_type:l,enable_preview:a?1:0,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(d,c)}updateCountItems(e){const t=this.elEditCurriculum,o=t.querySelector(\".total-items\"),n=t.querySelectorAll(`${Mt.selectors.elSectionItem}:not(.clone)`).length;o.dataset.count=n,o.querySelector(\".count\").textContent=n;const s=e.querySelector(\".section-items-counts\"),i=e.querySelectorAll(`${Mt.selectors.elSectionItem}:not(.clone)`).length;s.dataset.count=i,s.querySelector(\".count\").textContent=i}}class Nt{constructor(){this.courseId=null,this.elEditCurriculum=null,this.elCurriculumSections=null,this.editSectionItem=new Mt}static selectors={elSection:\".section\",elDivAddNewSection:\".add-new-section\",elSectionClone:\".section.clone\",elSectionTitleNewInput:\".lp-section-title-new-input\",elSectionTitleInput:\".lp-section-title-input\",etBtnEditTitle:\".lp-btn-edit-section-title\",elSectionDesInput:\".lp-section-description-input\",elBtnAddSection:\".lp-btn-add-section\",elBtnUpdateTitle:\".lp-btn-update-section-title\",elBtnUpdateDes:\".lp-btn-update-section-description\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-section-title\",elBtnCancelUpdateDes:\".lp-btn-cancel-update-section-description\",elBtnDeleteSection:\".lp-btn-delete-section\",elSectionDesc:\".section-description\",elSectionToggle:\".section-toggle\",elCountSections:\".count-sections\"};init(){this.elEditCurriculum=document.querySelector(`${Ht.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${Ht.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${Ht.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.editSectionItem.init(),this.events(),this.sortAbleSection()}events(){Nt._loadedEvents||(Nt._loadedEvents=this,ut(\"click\",[{selector:Nt.selectors.elBtnAddSection,class:this,callBack:this.addSection.name},{selector:`${Nt.selectors.elBtnUpdateDes}`,class:this,callBack:this.updateSectionDescription.name},{selector:`${Nt.selectors.etBtnEditTitle}`,class:this,callBack:this.setFocusTitleInput.name},{selector:`${Nt.selectors.elSectionToggle}`,class:this,callBack:this.toggleSection.name},{selector:`${Nt.selectors.elBtnCancelUpdateDes}`,class:this,callBack:this.cancelSectionDescription.name},{selector:`${Nt.selectors.elBtnDeleteSection}`,class:this,callBack:this.deleteSection.name},{selector:`${Nt.selectors.elBtnUpdateTitle}`,class:this,callBack:this.updateSectionTitle.name},{selector:`${Nt.selectors.elBtnCancelUpdateTitle}`,class:this,callBack:this.cancelSectionTitle.name},{selector:Ht.selectors.elToggleAllSections,class:this,callBack:this.toggleSectionAll.name}]),ut(\"keyup\",[{selector:Nt.selectors.elSectionTitleNewInput,class:this,callBack:this.changeTitleBeforeAdd.name},{selector:Nt.selectors.elSectionTitleInput,class:this,callBack:this.changeTitle.name},{selector:Nt.selectors.elSectionDesInput,class:this,callBack:this.changeDescription.name}]),ut(\"keydown\",[{selector:Nt.selectors.elSectionTitleNewInput,class:this,callBack:this.addSection.name,checkIsEventEnter:!0},{selector:Nt.selectors.elSectionDesInput,class:this,callBack:this.updateSectionDescription.name,checkIsEventEnter:!0},{selector:Nt.selectors.elSectionTitleInput,class:this,callBack:this.updateSectionTitle.name,checkIsEventEnter:!0}]),ut(\"focusin\",[{selector:Nt.selectors.elSectionTitleNewInput,class:this,callBack:this.focusTitleNewInput.name},{selector:Nt.selectors.elSectionTitleInput,class:this,callBack:this.focusTitleInput.name}]),ut(\"focusout\",[{selector:Nt.selectors.elSectionTitleNewInput,class:this,callBack:this.focusTitleNewInput.name,focusIn:!1},{selector:`${Nt.selectors.elSectionTitleInput}`,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}changeTitleBeforeAdd(e){const{e:t,target:o}=e,n=o,s=n.closest(`${Nt.selectors.elDivAddNewSection}`);if(!s)return;const i=s.querySelector(`${Nt.selectors.elBtnAddSection}`);0===n.value.trim().length?i.classList.remove(\"active\"):i.classList.add(\"active\")}focusTitleNewInput(e){const{e:t,target:o,focusIn:n=!0}=e,s=o.closest(`${Nt.selectors.elDivAddNewSection}`);s&&(n?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}addSection(e){const{e:t,target:o,callBackNest:n}=e,s=o.closest(`${Nt.selectors.elDivAddNewSection}`);if(!s)return;t.preventDefault();const i=s.querySelector(`${Nt.selectors.elSectionTitleNewInput}`),a=i.value.trim(),r=i.dataset.messEmptyTitle;if(0===a.length)return void Bt(r,\"error\");i.value=\"\",i.blur();const l=this.elCurriculumSections.querySelector(`${Nt.selectors.elSectionClone}`).cloneNode(!0);l.classList.remove(\"clone\"),lt(l,1),ct(l,1),l.querySelector(`${Nt.selectors.elSectionTitleInput}`).value=a,this.elCurriculumSections.insertAdjacentElement(\"beforeend\",l);const c={success:t=>{const{message:o,status:s,data:i}=t;if(\"error\"===s)throw l.remove(),o;if(\"success\"===s){const{section:o}=i;l.dataset.sectionId=o.section_id||\"\",this.editSectionItem.sortAbleItem(),n&&\"function\"==typeof n.success&&(e.elSection=l,e.response=t,n.success(e))}Bt(o,s)},error:t=>{l.remove(),Bt(t,\"error\"),n&&\"function\"==typeof n.error&&(e.error=t,n.error(e))},completed:()=>{ct(l,0),l.classList.remove(`${Ht.selectors.elCollapse}`),l.querySelector(`${Nt.selectors.elSectionDesInput}`).focus(),this.updateCountSections(this.elEditCurriculum),n&&\"function\"==typeof n.completed&&(e.elSection=l,n.completed(e))}},d=JSON.parse(i.dataset.send);d.section_name=a,window.lpAJAXG.fetchAJAX(d,c)}deleteSection(e){const{e:o,target:n}=e,s=n,i=s.closest(`${Ht.selectors.idElEditCurriculum}`);t().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=s.closest(\".section\"),t=e.dataset.sectionId;ct(e,1);const o={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(e,0),e.remove(),this.editSectionItem.updateCountItems(e),this.updateCountSections(i)}},n=JSON.parse(s.dataset.send);n.section_id=t,window.lpAJAXG.fetchAJAX(n,o)}})}focusTitleInput(e){const{e:t,target:o,focusIn:n=!0}=e,s=o.closest(`${Nt.selectors.elSection}`);s&&(n?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}setFocusTitleInput(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elSection}`);if(!n)return;const s=n.querySelector(`${Nt.selectors.elSectionTitleInput}`);s.setSelectionRange(s.value.length,s.value.length),s.focus()}changeTitle(e){const{e:t,target:o}=e,n=o,s=n.closest(`${Nt.selectors.elSection}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}updateSectionTitle(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elSection}`);if(!n)return;t.preventDefault();const s=n.querySelector(`${Nt.selectors.elSectionTitleInput}`);if(!s)return;const i=n.dataset.sectionId,a=s.value.trim(),r=s.dataset.old||\"\",l=s.dataset.messEmptyTitle;if(0===a.length)return void Bt(l,\"error\");if(a===r)return;s.blur(),ct(n,1);const c={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"success\"===o&&(s.dataset.old=a)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,0),n.classList.remove(\"editing\")}},d=JSON.parse(s.dataset.send);d.section_id=i,d.section_name=a,window.lpAJAXG.fetchAJAX(d,c)}cancelSectionTitle(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elBtnCancelUpdateTitle}`);if(!n)return;const s=n.closest(`${Nt.selectors.elSection}`),i=s.querySelector(`${Nt.selectors.elSectionTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}updateSectionDescription(e){const{e:t,target:o,callBackNest:n}=e,s=o.closest(`${Nt.selectors.elSectionDesc}`);if(!s)return;const i=s.querySelector(`${Nt.selectors.elSectionDesInput}`);if(!i)return;t.preventDefault();const a=i.closest(`${Nt.selectors.elSection}`),r=a.dataset.sectionId,l=i.value.trim(),c=i.dataset.old||\"\";if(l===c)return;ct(a,1);const d={success:t=>{const{message:o,status:s}=t;n&&\"function\"==typeof n.success&&(e.elSection=a,e.response=t,n.success(e)),Bt(o,s)},error:e=>{Bt(e,\"error\"),n&&\"function\"==typeof n.error&&n.error(a,e)},completed:()=>{ct(a,0),i.closest(`${Nt.selectors.elSectionDesc}`).classList.remove(\"editing\"),i.dataset.old=l,n&&\"function\"==typeof n.completed&&n.completed(a)}},u=JSON.parse(i.dataset.send);u.section_id=r,u.section_description=l,window.lpAJAXG.fetchAJAX(u,d)}cancelSectionDescription(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elSectionDesc}`),s=n.querySelector(`${Nt.selectors.elSectionDesInput}`);s.value=s.dataset.old||\"\",n.classList.remove(\"editing\")}changeDescription(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elSectionDesInput}`);if(!n)return;const s=n.closest(`${Nt.selectors.elSectionDesc}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}toggleSectionAll(e){const{e:t,target:o}=e,n=o.closest(`${Ht.selectors.elToggleAllSections}`);if(!n)return;const s=n.closest(`${Ht.selectors.idElEditCurriculum}`).querySelectorAll(`${Nt.selectors.elSection}:not(.clone)`);n.classList.toggle(`${Ht.selectors.elCollapse}`),s.forEach(e=>{const t=n.classList.contains(`${Ht.selectors.elCollapse}`);e.classList.toggle(`${Ht.selectors.elCollapse}`,t)})}toggleSection(e){const{e:t,target:o}=e,n=o.closest(`${Nt.selectors.elSection}`);n.closest(`${Ht.selectors.elCurriculumSections}`)&&(n.classList.toggle(`${Ht.selectors.elCollapse}`),this.checkAllSectionsCollapsed())}checkAllSectionsCollapsed(){const e=this.elEditCurriculum.querySelectorAll(`${Nt.selectors.elSection}:not(.clone)`),t=this.elEditCurriculum.querySelector(`${Ht.selectors.elToggleAllSections}`);let o=!0;e.forEach(e=>{if(e.classList.contains(`${Ht.selectors.elCollapse}`))return o=!1,!1}),o?t.classList.remove(`${Ht.selectors.elCollapse}`):t.classList.add(`${Ht.selectors.elCollapse}`)}sortAbleSection(){let e,t=0;new st(this.elCurriculumSections,{handle:\".drag\",animation:150,onEnd:o=>{const n=o.item;if(!t)return;const s=n.closest(`${Nt.selectors.elSection}`),i=this.elCurriculumSections.querySelectorAll(`${Nt.selectors.elSection}`),a=[];i.forEach(e=>{const t=e.dataset.sectionId;a.push(t)});const r={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(s,0),t=0}},l={action:\"course_update_section_position\",course_id:this.courseId,new_position:a,args:{id_url:\"course-update-section-position\"}};clearTimeout(e),e=setTimeout(()=>{ct(s,1),window.lpAJAXG.fetchAJAX(l,r)},1e3)},onMove:t=>{clearTimeout(e)},onUpdate:e=>{t=1}})}updateCountSections(e){const t=e.querySelector(`${Nt.selectors.elCountSections}`),o=e.querySelectorAll(`${Nt.selectors.elSection}:not(.clone)`).length;t.dataset.count=o,t.querySelector(\".count\").textContent=o}}const qt=new Nt,jt=new Mt;class Ht{constructor(){this.init()}static selectors={idElEditCurriculum:\"#lp-course-edit-curriculum\",elCurriculumSections:\".curriculum-sections\",elToggleAllSections:\".course-toggle-all-sections\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\"};init(){rt(`${Ht.selectors.idElEditCurriculum}`,e=>{qt.init(),jt.init()})}}let Xt,zt=null,Ft=!1;const Rt=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};let Jt,Vt,Yt,Gt=!1;class Wt{constructor(){this.init()}static selectors={elBtnGenerateWithAi:\".lp-btn-generate-with-ai\",elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai&&(rt(\"#titlewrap\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),rt(\"#wp-content-media-buttons\",e=>{e.insertAdjacentHTML(\"beforeend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),rt(\"#postimagediv\",e=>{e.querySelector(\".postbox-header\").insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin: 12px 12px 0 12px;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),wp.data&&wp.data.select(\"core\u002Feditor\")&&(Gt=!0,Jt=wp.data.select,Vt=wp.data.dispatch,Yt=Jt(\"core\u002Feditor\"),rt(\".editor-document-bar\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),rt(\".editor-post-featured-image\",e=>{e.insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),rt(\".editor-post-featured-image\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)})),this.events())}events(){ut(\"click\",[{selector:Wt.selectors.elBtnGenerateWithAi,class:this,callBack:this.showPopup.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateData.name},{selector:\".lp-btn-copy\",class:this,callBack:this.copyGeneratedData.name},{selector:\".lp-btn-apply\",class:this,callBack:this.applyGeneratedData.name},{selector:\".lp-btn-ai-apply-image\",class:this,callBack:this.applyImageData.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:o,target:n}=e,s=lpData.i18n.confirm_close_ai;Ft?confirm(s)&&t().close():t().close()}}])}showPopup(e){const{e:o,target:n}=e,s=n.dataset.template||n.closest(\".lp-btn-generate-with-ai\").dataset.template||n.closest(\".lp-generate-data-ai-wrap\").dataset.template||\"\",i=document.querySelector(s);i?t().fire({html:i.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{zt=t().getPopup(),zt.click();const e=document.querySelector(\"input[name=post_title]\");let o=\"\";if(e)o=e.value;else if(Gt){const e=document.querySelector(\".editor-post-card-panel__title-name\");e&&(o=e.textContent)}let n=\"\";n=Gt?Yt.getEditedPostContent().replace(\u002F(\u003C([^>]+)>)\u002Fgi,\"\"):window.tinymce&&window.tinymce.get(\"content\")?window.tinymce.get(\"content\").getContent({format:\"text\"}):document.querySelector(\"#content\").value;const s=zt.querySelector(\"form\"),i=s.querySelector(\"[name=post-title]\");if(i&&(i.value=o,!o)){const e=i.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");e&&lt(e,1)}const a=s.querySelector(\"[name=post-content]\");if(a&&(a.value=n,n.length\u003C2)){const e=a.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");e&&lt(e,1)}const r=zt.querySelector('select[name=\"target_audience\"]');r&&(Rt?.target_audience&&r.tomselect.setValue(Rt.target_audience),r.addEventListener(\"change\",e=>{Rt.target_audience=r.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}));const l=zt.querySelector('select[name=\"tone\"]');l&&(Rt?.tone&&l.tomselect.setValue(Rt.tone),l.addEventListener(\"change\",e=>{Rt.tone=l.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}));const c=zt.querySelector('select[name=\"language\"]');c&&(Rt?.language&&c.tomselect.setValue(Rt.language),c.addEventListener(\"change\",e=>{const t=c.tomselect.getValue();Rt.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}))}}).then(e=>{e.isDismissed&&Ft&&(Ft=!1)}):console.error(`Template ${s} not found!`)}showStep(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(\".button-actions\"),s=n.closest(Wt.selectors.elGenerateDataAiWrap);let i=parseInt(n.dataset.step);const a=o.dataset.action;\"next\"===a?i++:\"prev\"===a&&i--,n.dataset.step=i;const r=o.closest(\"form\"),l=r.querySelector(`.step-content[data-step=\"${i}\"]`),c=s.querySelector(`.step-item[data-step=\"${i}\"]`);r.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),l.classList.add(\"active\"),s.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\"),o.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(i)?lt(e,1):lt(e,0)})}generatePrompt(e){const{e:t,target:o}=e;t.preventDefault(),ct(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=dt(n,s);const i={success:e=>{const{message:t,status:o,data:s}=e;Bt(t,o),\"success\"===o&&(n.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=s,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{Bt(e,\"error\")},completed:()=>{ct(o,!1)}};window.lpAJAXG.fetchAJAX(s,i)}generateData(e){const{e:t,target:o}=e;t.preventDefault(),ct(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=dt(n,s);const i=n.querySelector(\".lp-btn-step[data-action=prev]\");lt(i,0);const a={success:e=>{const{message:t,status:o,data:s}=e;Ft&&Bt(t,o),\"success\"===o&&(Xt=s.lp_structure_course,n.querySelector(\".lp-ai-generated-results\").innerHTML=s.lp_html_preview,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{Bt(e,\"error\")},completed:()=>{ct(o,!1),lt(i,1),Ft=!1}};Ft=!0,window.lpAJAXG.fetchAJAX(s,a)}applyGeneratedData(e){const{e:o,target:n}=e;o.preventDefault();const s=n.dataset.apply,i=n.dataset.target;if(i)if(Gt)\"set-wp-editor-content\"===i?Vt(\"core\u002Feditor\").editPost({content:s}):\"set-wp-title\"===i&&Vt(\"core\u002Feditor\").editPost({title:s});else if(\"set-wp-editor-content\"===i)this.setWPEditorContent(s);else if(\"set-wp-title\"===i){const e=document.querySelector(\"input[name=post_title]\");e&&(e.value=s)}zt&&t().close()}copyGeneratedData(e){const{e:t,target:o}=e;t.preventDefault();const n=o.dataset.copy;if(navigator.clipboard)navigator.clipboard.writeText(n).then(()=>{Bt(\"Copied to clipboard!\",\"success\")}).catch(e=>{Bt(\"Failed to copy text: \"+e,\"error\")});else{const e=document.createElement(\"textarea\");e.value=n,e.style.position=\"fixed\",e.style.left=\"-9999px\",document.body.appendChild(e),e.select();try{const e=document.execCommand(\"copy\");Bt(e?\"Copied to clipboard!\":\"Failed to copy text\",e?\"success\":\"error\")}catch(e){Bt(\"Failed to copy text: \"+e,\"error\")}document.body.removeChild(e)}}setWPEditorContent(e){window.tinymce.get(\"content\").setContent(e)}applyImageData(e){const{e:o,target:n}=e;let s=JSON.parse(n.dataset.send);s=dt(n.closest(\"form\"),s),ct(n,!0);const i={success:e=>{const{message:o,status:n,data:s}=e;Bt(o,n),\"success\"===n&&(Gt?Vt(\"core\u002Feditor\").editPost({featured_media:s.attachment_id}):document.querySelector(\"#postimagediv .inside\").outerHTML=s.html_image,zt&&t().close())},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,!1)}};window.lpAJAXG.fetchAJAX(s,i)}}let Ut=null,Zt=null;class Kt{constructor(){this.init()}static selectors={elBtnApplyCurriculum:\".lp-btn-apply-curriculum\"};init(){lpData?.enable_open_ai&&(rt(Ht.selectors.idElEditCurriculum,e=>{e.querySelector(Nt.selectors.elCountSections).insertAdjacentHTML(\"afterend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),this.events())}events(){Kt._loadedEvents||(Kt._loadedEvents=!0,ut(\"click\",[{selector:Kt.selectors.elBtnApplyCurriculum,class:this,callBack:this.applyData.name}]))}async applyData(e){const{e:o,target:n}=e;let s=JSON.parse(n.dataset.send);if(s=dt(n.closest(\"form\"),s),!s[\"lp-openai-generated-data\"])return;const i=JSON.parse(s[\"lp-openai-generated-data\"])[0].sections;i&&0!==i.length||Bt(\"No sections found in the generated data.\",\"error\"),console.log(\"Generated Sections:\",i),t().close(),await new Promise(e=>setTimeout(e,500)),Ut=new Nt,Ut.init(),Zt=new Mt,Zt.init();const a=document.querySelector(Ht.selectors.idElEditCurriculum);a.querySelector(Nt.selectors.elDivAddNewSection).scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>setTimeout(e,800));for(const e of i){const t=a.querySelector(Nt.selectors.elSectionTitleNewInput),o=a.querySelector(Nt.selectors.elBtnAddSection);t.value=e.section_title||\"\",await new Promise(t=>{Ut.addSection({e:new PointerEvent(\"click\"),target:o,callBackNest:this.updateSectionDescription({sectionData:e,elEditCurriculum:a}),resolve:t})})}}updateSectionDescription(e){const{sectionData:t,elEditCurriculum:o}=e;return{success:async e=>{const{elSection:n}=e;await new Promise(e=>setTimeout(e,1e3));const s=n.querySelector(Nt.selectors.elSectionDesInput);s.value=t.section_description||\"\",await new Promise(e=>{Ut.updateSectionDescription({e:new PointerEvent(\"click\"),target:s,callBackNest:this.addSectionItems({sectionData:t,elEditCurriculum:o}),resolve:e})}),setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}addSectionItems(e){const{sectionData:t,elEditCurriculum:o}=e,n=t.lessons||[],s=t.quizzes||[];return{success:async e=>{const{elSection:t}=e,i=t.querySelector(`${Mt.selectors.elBtnSelectItemType}[data-item-type=lp_lesson]`),a=t.querySelector(`${Mt.selectors.elBtnSelectItemType}[data-item-type=lp_quiz]`);for(const e of n)i.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:o});for(const e of s)a.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:o});setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}async addItemToSection(e){const{itemData:t,elSection:o,elEditCurriculum:n}=e,s=o.querySelector(Mt.selectors.elBtnAddItem);o.querySelector(Mt.selectors.elAddItemTypeTitleInput).value=t.lesson_title||t.quiz_title||\"\",s.scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>{Zt.addItemToSection({e:new PointerEvent(\"click\"),target:s,resolve:e,callBackNest:{completed:async t=>{setTimeout(e,1e3)}}})}),setTimeout(e.resolve,1)}}new Ht,new Wt,new Kt})()})();\n\\ No newline at end of file\n+(()=>{var e={9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),s=o.n(n),i=o(6314),a=o.n(i)()(s());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,i){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=i),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var i={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=i[c]||0,u=\"\".concat(c,\" \").concat(d);i[c]=d+1;var p=o(u),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(m);else{var h=s(m,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:h,references:1})}a.push(u)}return a}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var i=n(e=e||[],s=s||{});return function(e){e=e||[];for(var a=0;a\u003Ci.length;a++){var r=o(i[a]);t[r].references--}for(var l=n(e,s),c=0;c\u003Ci.length;c++){var d=o(i[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}i=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var i=o.sourceMap;i&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),i=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=i+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=i+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],m=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},h=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,g=e=>w(e)?e.toPromise():Promise.resolve(e),f=e=>e&&Promise.resolve(e)===e,v=()=>document.body.querySelector(`.${a.container}`),b=e=>{const t=v();return t?t.querySelector(e):null},y=e=>b(`.${e}`),S=()=>y(a.popup),k=()=>y(a.icon),C=()=>y(a.title),x=()=>y(a[\"html-container\"]),T=()=>y(a.image),E=()=>y(a[\"progress-steps\"]),A=()=>y(a[\"validation-message\"]),I=()=>b(`.${a.actions} .${a.confirm}`),B=()=>b(`.${a.actions} .${a.cancel}`),_=()=>b(`.${a.actions} .${a.deny}`),D=()=>b(`.${a.loader}`),L=()=>y(a.actions),$=()=>y(a.footer),P=()=>y(a[\"timer-progress-bar\"]),O=()=>y(a.close),q=()=>{const e=S();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},M=()=>H(document.body,a.shown)&&!H(document.body,a[\"toast-shown\"])&&!H(document.body,a[\"no-backdrop\"]),N=()=>{const e=S();return!!e&&H(e,a.toast)},j=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},H=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},X=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?J(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},z=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},F=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},J=(e,t)=>{R(e,t,!0)},V=(e,t)=>{R(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&H(n,t))return n}},G=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},W=(e,t=\"flex\")=>{e&&(e.style.display=t)},U=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{Q(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},K=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},Q=(e,t,o=\"flex\")=>{t?W(e,o):U(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=P();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ie=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=v();return!!e&&(e.remove(),V([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&J(o,a[\"no-transition\"]),j(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=S();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(J(v(),a.rtl),n.isRTL=!0)})(s),(()=>{const e=S();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),s=e.querySelector(`.${a.range} output`),i=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=ie),o&&(o.onchange=ie),i&&(i.onchange=ie),r&&(r.onchange=ie),l&&(l.oninput=ie),n&&s&&(n.oninput=()=>{ie(),s.value=n.value},n.onchange=()=>{ie(),s.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&j(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):j(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=L(),n=D();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?W(o):U(o),X(o,t,\"actions\"),function(e,t,o){const n=I(),s=_(),i=B();n&&s&&i&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(i,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(J([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):V([e,t,o],a.styled)}(n,s,i,o),o.reverseButtons&&(o.toast?(e.insertBefore(i,n),e.insertBefore(s,n)):(e.insertBefore(i,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),j(n,t.loaderHtml||\"\"),X(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);Q(e,o[`show${n}Button`],\"inline-block\"),j(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],X(e,o,`${t}Button`)}const me=(e,t)=>{const o=v();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||J([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?J(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),J(e,a.center)))}(o,t.position),function(e,t){t&&J(e,a[`grow-${t}`])}(o,t.grow),X(o,t,\"container\"))};var he={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],ge=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=Se(e.input);if(!t)return;const o=Ce[e.input](t,e);W(t),e.inputAutoFocus&&setTimeout(()=>{F(o)})},fe=(e,t)=>{const o=S();if(!o)return;const n=z(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},ve=e=>{if(!e.input)return;const t=Se(e.input);t&&X(t,e,\"input\")},be=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&J(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},Se=e=>{const t=S();if(t)return Y(t,a[e]||a.input)},ke=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:f(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return ke(o,t.inputValue),ye(o,o,t),be(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),be(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(ke(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&ke(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");j(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=S();if(!o)throw new Error(\"Popup not found\");const n=z(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&j(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;ke(o,t.inputValue),be(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=S();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(i=o,parseInt(window.getComputedStyle(i).marginLeft)+parseInt(window.getComputedStyle(i).marginRight)),s=S();var i;s&&(e>n?s.style.width=`${e}px`:G(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const xe=(e,t)=>{const o=x();o&&(Z(o),X(o,t,\"htmlContainer\"),t.html?(re(t.html,o),W(o,\"block\")):t.text?(o.textContent=t.text,W(o,\"block\")):U(o),((e,t)=>{const o=S();if(!o)return;const n=he.innerParams.get(e),s=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(fe(e,t.inputAttributes),n.className=a[e],s&&U(n))}),t.input&&(s&&ge(t),ve(t))})(e,t))},Te=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&V(e,n);J(e,t.icon&&r[t.icon]),Ie(e,t),Ee(),X(e,t,\"icon\")},Ee=()=>{const e=S();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Ae=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Be(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Be({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&j(e,n)},Ie=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])K(e,o,\"background-color\",t.iconColor);K(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Be=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let _e=!1,De=0,Le=0,$e=0,Pe=0;const Oe=e=>{const t=S();if(!t)return;const o=k();if(e.target===t||o&&o.contains(e.target)){_e=!0;const o=Ne(e);De=o.clientX,Le=o.clientY,$e=parseInt(t.style.insetInlineStart)||0,Pe=parseInt(t.style.insetBlockStart)||0,J(t,\"swal2-dragging\")}},qe=e=>{const t=S();if(t&&_e){let{clientX:o,clientY:s}=Ne(e);const i=o-De;t.style.insetInlineStart=`${$e+(n.isRTL?-i:i)}px`,t.style.insetBlockStart=`${Pe+(s-Le)}px`}},Me=()=>{const e=S();_e=!1,V(e,\"swal2-dragging\")},Ne=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},je=(e,t)=>{const o=v(),n=S();if(o&&n){if(t.toast){G(o,\"width\",t.width),n.style.width=\"100%\";const e=D();e&&n.insertBefore(e,k())}else G(n,\"width\",t.width);G(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),U(A()),He(n,t),t.draggable&&!t.toast?(J(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Oe),document.body.addEventListener(\"mousemove\",qe),e.addEventListener(\"mouseup\",Me),e.addEventListener(\"touchstart\",Oe),document.body.addEventListener(\"touchmove\",qe),e.addEventListener(\"touchend\",Me)})(n)):(V(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Oe),document.body.removeEventListener(\"mousemove\",qe),e.removeEventListener(\"mouseup\",Me),e.removeEventListener(\"touchstart\",Oe),document.body.removeEventListener(\"touchmove\",qe),e.removeEventListener(\"touchend\",Me)})(n))}},He=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(J([document.documentElement,document.body],a[\"toast-shown\"]),J(e,a.toast)):J(e,a.modal),X(e,t,\"popup\"),\"string\"==typeof t.customClass&&J(e,t.customClass),t.icon&&J(e,a[`icon-${t.icon}`])},Xe=e=>{const t=document.createElement(\"li\");return J(t,a[\"progress-step\"]),j(t,e),t},ze=e=>{const t=document.createElement(\"li\");return J(t,a[\"progress-step-line\"]),e.progressStepsDistance&&G(t,\"width\",e.progressStepsDistance),t},Fe=(e,t)=>{var o;je(0,t),me(0,t),((e,t)=>{const o=E();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(W(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,i)=>{const r=Xe(e);if(o.appendChild(r),i===s&&J(r,a[\"active-progress-step\"]),i!==n.length-1){const e=ze(t);o.appendChild(e)}})):U(o)})(0,t),((e,t)=>{const o=he.innerParams.get(e),n=k();if(n){if(o&&t.icon===o.icon)return Ae(n,t),void Te(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void U(n);W(n),Ae(n,t),Te(n,t),J(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Ee)}else U(n)}})(e,t),((e,t)=>{const o=T();o&&(t.imageUrl?(W(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),G(o,\"width\",t.imageWidth),G(o,\"height\",t.imageHeight),o.className=a.image,X(o,t,\"image\")):U(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),Q(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),X(o,t,\"title\"))})(0,t),((e,t)=>{const o=O();o&&(j(o,t.closeButtonHtml||\"\"),X(o,t,\"closeButton\"),Q(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),xe(e,t),de(0,t),((e,t)=>{const o=$();o&&(Z(o),Q(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),X(o,t,\"footer\"))})(0,t);const s=S();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},Re=()=>{var e;return null===(e=I())||void 0===e?void 0:e.click()},Je=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Ve=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=q();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=S())||void 0===o||o.focus()},Ge=[\"ArrowRight\",\"ArrowDown\"],We=[\"ArrowLeft\",\"ArrowUp\"],Ue=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ke(t):[...Ge,...We].includes(t.key)?Qe(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!h(t.allowEnterKey))return;const o=S();if(!o||!t.input)return;const n=z(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ke=e=>{const t=e.target,o=q();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Qe=e=>{const t=L(),o=I(),n=_(),s=B();if(!(t&&o&&n&&s))return;const i=[o,n,s];if(document.activeElement instanceof HTMLElement&&!i.includes(document.activeElement))return;const a=Ge.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),h(t.allowEscapeKey)&&o(Je.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=v();if(!e)return;let t;e.ontouchstart=e=>{t=it(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},it=e=>{const t=e.target,o=v(),n=x();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,i){N()?vt(e,i):(s(o).then(()=>vt(e,i)),Ve(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),M()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(H(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);V(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),V([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(ht(this),t(e)):o&&t(e)}const pt=e=>{const t=S();if(!t)return!1;const o=he.innerParams.get(e);if(!o||H(t,o.hideClass.popup))return!1;V(t,o.showClass.popup),J(t,o.hideClass.popup);const n=v();return V(n,o.showClass.backdrop),J(n,o.hideClass.backdrop),gt(e,t,o),!0};function mt(e){const t=tt.swalPromiseReject.get(this);ht(this),t&&t(e)}const ht=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,he.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),gt=(e,t,o)=>{var s;const i=v(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),a&&i?ft(e,t,i,Boolean(o.returnFocus),o.didClose):i&&dt(e,i,Boolean(o.returnFocus),o.didClose)},ft=(e,t,o,s,i)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,i);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},vt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},bt=e=>{let t=S();if(t||new Qo,t=S(),!t)return;const o=D();N()?U(k()):yt(t,e),W(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=L(),n=D();o&&n&&(!t&&ee(I())&&(t=I()),W(o),t&&(U(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),J([e,o],a.loading))},St=e=>e.checked?1:0,kt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,xt=(e,t)=>{const o=S();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,j(s,t),s.selected=At(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,Et(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],i=document.createElement(\"input\"),r=document.createElement(\"label\");i.type=\"radio\",i.name=a.radio,i.value=t,At(t,o.inputValue)&&(i.checked=!0);const l=document.createElement(\"span\");j(l,s),l.className=a.label,r.appendChild(i),r.appendChild(l),n.appendChild(r)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,Et(e),t)};w(t.inputOptions)||f(t.inputOptions)?(bt(I()),g(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},Tt=(e,t)=>{const o=e.getInput();o&&(U(o),g(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,W(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",W(o),o.focus(),e.hideLoading()}))};const Et=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=Et(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=Et(n)),t.push([o,n])}),t},At=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),It=(e,t)=>{const o=he.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return St(o);case\"radio\":return kt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?Bt(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?_t(e,s):$t(e,s)},Bt=(e,t,o)=>{const n=he.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>g(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?_t(e,t):$t(e,t)})},_t=(e,t)=>{const o=he.innerParams.get(e);o.showLoaderOnDeny&&bt(_()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),ht(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Lt(e,t))):e.close({isDenied:!0,value:t})},Dt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Lt=(e,t)=>{e.rejectPromise(t)},$t=(e,t)=>{const o=he.innerParams.get(e);o.showLoaderOnConfirm&&bt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preConfirm(t,o.validationMessage))).then(o=>{ee(A())||!1===o?(e.hideLoading(),ht(e)):Dt(e,void 0===o?t:o)}).catch(t=>Lt(e,t))):Dt(e,t)};function Pt(){const e=he.innerParams.get(this);if(!e)return;const t=he.domCache.get(this);U(t.loader),N()?e.icon&&W(k()):Ot(t),V([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Ot=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?W(o[0],\"inline-block\"):!ee(I())&&!ee(_())&&!ee(B())&&U(e.actions)};function qt(){const e=he.innerParams.get(this),t=he.domCache.get(this);return t?z(t.popup,e.input):null}function Mt(e,t,o){const n=he.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Nt(e,t){const o=S();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function jt(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function Ht(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Xt(){Nt(this.getInput(),!1)}function zt(){Nt(this.getInput(),!0)}function Ft(e){const t=he.domCache.get(this),o=he.innerParams.get(this);j(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&J(t.validationMessage,o.customClass.validationMessage),W(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),F(n),J(n,a.inputerror))}function Rt(){const e=he.domCache.get(this);e.validationMessage&&U(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),V(t,a.inputerror))}const Jt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Vt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Gt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Wt=e=>Object.prototype.hasOwnProperty.call(Jt,e),Ut=e=>-1!==Vt.indexOf(e),Zt=e=>Yt[e],Kt=e=>{Wt(e)||d(`Unknown parameter \"${e}\"`)},Qt=e=>{Gt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&m(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Kt(t),e.toast&&Qt(t),eo(t)};function oo(e){const t=v(),o=S(),n=he.innerParams.get(this);if(!o||H(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),i=Object.assign({},n,s);to(i),t&&(t.dataset.swal2Theme=i.theme),Fe(this,i),he.innerParams.set(this,i),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Ut(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=he.domCache.get(this),o=he.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),io(this)):ao(this)}const io=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(he,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(he,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:Ht,disableInput:zt,disableLoading:Pt,enableButtons:jt,enableInput:Xt,getInput:qt,handleAwaitingPromise:ht,hideLoading:Pt,rejectPromise:mt,resetValidationMessage:Rt,showValidationMessage:Ft,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(Je.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const mo=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},ho=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&h(e.allowOutsideClick)&&o(Je.backdrop)}},go=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const fo=()=>{if(n.timeout)return(()=>{const e=P();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},vo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let bo=!1;const yo={};const So=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var ko=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||go(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||go(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,bo||(document.body.addEventListener(\"click\",So),bo=!0)},clickCancel:()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=_())||void 0===e?void 0:e.click()},enableLoading:bt,fire:function(...e){return new this(...e)},getActions:L,getCancelButton:B,getCloseButton:O,getConfirmButton:I,getContainer:v,getDenyButton:_,getFocusableElements:q,getFooter:$,getHtmlContainer:x,getIcon:k,getIconContent:()=>y(a[\"icon-content\"]),getImage:T,getInputLabel:()=>y(a[\"input-label\"]),getLoader:D,getPopup:S,getProgressSteps:E,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:P,getTitle:C,getValidationMessage:A,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=S();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Ut,isValidParameter:Wt,isVisible:()=>ee(S()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:vo,showLoading:bt,stopTimer:fo,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?fo():vo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const xo=[\"swal-title\",\"swal-html\",\"swal-footer\"],To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{$o(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Jt&&\"boolean\"==typeof Jt[o]?\"false\"!==n:o in Jt&&\"object\"==typeof Jt[o]?JSON.parse(n):n)}),t},Eo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{$o(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Io=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&($o(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},Bo=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&($o(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},_o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&($o(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{$o(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},Do=(e,t)=>{const o={};for(const n in t){const s=t[n],i=e.querySelector(s);i&&($o(i,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=i.innerHTML.trim())}return o},Lo=e=>{const t=xo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},$o=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Po=e=>{var t,o;const s=v(),i=S();if(!s||!i)return;\"function\"==typeof e.willOpen&&e.willOpen(i),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",i);const a=window.getComputedStyle(document.body).overflowY;if(No(s,i,e),setTimeout(()=>{qo(s,i)},10),M()&&(Mo(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=v();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),N()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(i))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",i)},Oo=e=>{const t=S();if(!t||e.target!==t)return;const o=v();o&&(t.removeEventListener(\"animationend\",Oo),t.removeEventListener(\"transitionend\",Oo),o.style.overflowY=\"auto\",V(o,a[\"no-transition\"]))},qo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Oo),t.addEventListener(\"transitionend\",Oo)):e.style.overflowY=\"auto\"},Mo=(e,t,o)=>{(()=>{if(nt&&!H(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",J(document.body,a.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},No=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&J(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),W(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&J(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):W(t,\"grid\"),J([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&J([document.documentElement,document.body],a[\"height-auto\"])};var jo=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),Ho=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Xo(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=jo),\"url\"===e.input&&(e.inputValidator=Ho))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let zo;var Fo=new WeakMap;class Ro{constructor(...t){if(o(this,Fo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;zo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,i,a;this.params=n,this.isAwaitingPromise=!1,s=Fo,i=this,a=this._main(zo.params),s.set(e(s,i),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),M()&&ot()}n.currentInstance=zo;const o=Vo(e,t);Xo(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Yo(zo);return Fe(zo,o),he.innerParams.set(zo,o),Jo(zo,s,o)}then(e){return t(Fo,this).then(e)}finally(e){return t(Fo,this).finally(e)}}const Jo=(e,t,o)=>new Promise((s,i)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,i),t.confirmButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.input?It(e,\"confirm\"):$t(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=he.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?It(e,\"deny\"):_t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(Je.cancel)})(e,a)},t.closeButton.onclick=()=>{a(Je.close)},((e,t,o)=>{e.toast?co(e,t,o):(mo(t),ho(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Ve(e),!t.toast){const n=e=>Ue(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:S();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?xt(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||f(t.inputValue))&&(bt(I()),Tt(e,t))})(e,o),Po(o),Go(n,o,a),Wo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Vo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Lo(o),Object.assign(To(o),Eo(o),Ao(o),Io(o),Bo(o),_o(o),Do(o,xo))})(e),n=Object.assign({},Jt,t,o,e);return n.showClass=Object.assign({},Jt.showClass,n.showClass),n.hideClass=Object.assign({},Jt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:S(),container:v(),actions:L(),confirmButton:I(),denyButton:_(),cancelButton:B(),loader:D(),closeButton:O(),validationMessage:A(),progressSteps:E()};return he.domCache.set(e,t),t},Go=(e,t,o)=>{const n=P();U(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(W(n),X(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Wo=(e,t)=>{if(!t.toast)return h(t.allowEnterKey)?void(Uo(e)||Zo(e,t)||Ye(-1,1)):(m(\"allowEnterKey\"),void Ko())},Uo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Ko=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=Ht,Ro.prototype.enableButtons=jt,Ro.prototype.getInput=qt,Ro.prototype.disableInput=zt,Ro.prototype.enableInput=Xt,Ro.prototype.hideLoading=Pt,Ro.prototype.disableLoading=Pt,Ro.prototype.showValidationMessage=Ft,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=mt,Ro.prototype.update=oo,Ro.prototype._destroy=so,Object.assign(Ro,ko),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(zo&&zo[e])return zo[e](...t)}}),Ro.DismissReason=Je,Ro.version=\"11.26.17\";const Qo=Ro;return Qo.default=Qo,Qo}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var i=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&i>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},i=document.getElementsByClassName(\"toastify\"),a=0;a\u003Ci.length;a++){e=!0===n(i[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=i[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(i[a].style[e]=s[e]+\"px\",s[e]+=r+15):!0===n(i[a],\"toastify-left\")?(i[a].style[e]=t[e]+\"px\",t[e]+=r+15):(i[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,exports:{}};return e[n].call(i.exports,i,i.exports,o),i.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(8465),t=o.n(e);function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},s.apply(null,arguments)}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),m=l(\u002FiP(ad|od|hone)\u002Fi),h=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function g(e,t,o){e.addEventListener(t,o,!c&&w)}function f(e,t,o){e.removeEventListener(t,o,!c&&w)}function v(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function b(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&v(e,t):v(e,t))||n&&e===o)return e;if(e===o)break}while(e=b(e))}return null}var S,k=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(k,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(k,\" \")}}function x(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function T(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=x(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var s=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return s&&new s(o)}function E(e,t,o){if(e){var n=e.getElementsByTagName(t),s=0,i=n.length;if(o)for(;s\u003Ci;s++)o(n[s],s);return n}return[]}function A(){return document.scrollingElement||document.documentElement}function I(e,t,o,n,s){if(e.getBoundingClientRect||e===window){var i,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==A()?(a=(i=e.getBoundingClientRect()).top,r=i.left,l=i.bottom,d=i.right,u=i.height,p=i.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(s=s||e.parentNode,!c))do{if(s&&s.getBoundingClientRect&&(\"none\"!==x(s,\"transform\")||o&&\"static\"!==x(s,\"position\"))){var m=s.getBoundingClientRect();a-=m.top+parseInt(x(s,\"border-top-width\")),r-=m.left+parseInt(x(s,\"border-left-width\")),l=a+i.height,d=r+i.width;break}}while(s=s.parentNode);if(n&&e!==window){var h=T(s||e),w=h&&h.a,g=h&&h.d;h&&(l=(a\u002F=g)+(u\u002F=g),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function B(e,t,o){for(var n=P(e,!0),s=I(e)[t];n;){var i=I(n)[o];if(!(\"top\"===o||\"left\"===o?s>=i:s\u003C=i))return n;if(n===A())break;n=P(n,!1)}return!1}function _(e,t,o,n){for(var s=0,i=0,a=e.children;i\u003Ca.length;){if(\"none\"!==a[i].style.display&&a[i]!==Me.ghost&&(n||a[i]!==Me.dragged)&&y(a[i],o.draggable,e,!1)){if(s===t)return a[i];s++}i++}return null}function D(e,t){for(var o=e.lastElementChild;o&&(o===Me.ghost||\"none\"===x(o,\"display\")||t&&!v(o,t));)o=o.previousElementSibling;return o||null}function L(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===Me.clone||t&&!v(e,t)||o++;return o}function $(e){var t=0,o=0,n=A();if(e)do{var s=T(e),i=s.a,a=s.d;t+=e.scrollLeft*i,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function P(e,t){if(!e||!e.getBoundingClientRect)return A();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var s=x(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==s.overflowX||\"scroll\"==s.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==s.overflowY||\"scroll\"==s.overflowY)){if(!o.getBoundingClientRect||o===document.body)return A();if(n||t)return o;n=!0}}}while(o=o.parentNode);return A()}function O(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function q(e,t){return function(){if(!S){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),S=setTimeout(function(){S=void 0},t)}}}function M(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function N(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function j(e,t,o){var n={};return Array.from(e.children).forEach(function(s){var i,a,r,l;if(y(s,t.draggable,e,!1)&&!s.animated&&s!==o){var c=I(s);n.left=Math.min(null!==(i=n.left)&&void 0!==i?i:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var H=\"Sortable\"+(new Date).getTime();var X=[],z={initializeByDefault:!0},F={mount:function(e){for(var t in z)z.hasOwnProperty(t)&&!(t in e)&&(e[t]=z[t]);X.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),X.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var s=e+\"Global\";X.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][s]&&t[n.pluginName][s](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var i in X.forEach(function(n){var i=n.pluginName;if(e.options[i]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[i]=a,s(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(i)){var a=this.modifyOption(e,i,e.options[i]);void 0!==a&&(e.options[i]=a)}},getEventProperties:function(e,t){var o={};return X.forEach(function(n){\"function\"==typeof n.eventProperties&&s(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return X.forEach(function(s){e[s.pluginName]&&s.optionListeners&&\"function\"==typeof s.optionListeners[t]&&(n=s.optionListeners[t].call(e[s.pluginName],o))}),n}};var R=[\"evt\"],J=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,s=function(e,t){if(null==e)return{};var o,n,s=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n\u003Ci.length;n++)o=i[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}(o,R);F.pluginEvent.bind(Me)(e,t,a({dragEl:Y,parentEl:G,ghostEl:W,rootEl:U,nextEl:Z,lastDownEl:K,cloneEl:Q,cloneHidden:ee,dragStarted:me,putSortable:ae,activeSortable:Me.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se,hideGhostForTarget:$e,unhideGhostForTarget:Pe,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){V({sortable:t,name:e,originalEvent:n})}},s))};function V(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,s=e.targetEl,i=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,m=e.oldDraggableIndex,h=e.newDraggableIndex,w=e.originalEvent,g=e.putSortable,f=e.extraEventProperties;if(t=t||o&&o[H]){var v,b=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(v=document.createEvent(\"Event\")).initEvent(n,!0,!0):v=new CustomEvent(n,{bubbles:!0,cancelable:!0}),v.to=r||o,v.from=l||o,v.item=s||o,v.clone=i,v.oldIndex=u,v.newIndex=p,v.oldDraggableIndex=m,v.newDraggableIndex=h,v.originalEvent=w,v.pullMode=g?g.lastPutMode:void 0;var S=a(a({},f),F.getEventProperties(n,t));for(var k in S)v[k]=S[k];o&&o.dispatchEvent(v),b[y]&&b[y].call(t,v)}}(a({putSortable:ae,cloneEl:Q,targetEl:Y,rootEl:U,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se},e))}var Y,G,W,U,Z,K,Q,ee,te,oe,ne,se,ie,ae,re,le,ce,de,ue,pe,me,he,we,ge,fe,ve=!1,be=!1,ye=[],Se=!1,ke=!1,Ce=[],xe=!1,Te=[],Ee=\"undefined\"!=typeof document,Ae=m,Ie=d||c?\"cssFloat\":\"float\",Be=Ee&&!h&&!m&&\"draggable\"in document.createElement(\"div\"),_e=function(){if(Ee){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),De=function(e,t){var o=x(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),s=_(e,0,t),i=_(e,1,t),a=s&&x(s),r=i&&x(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+I(s).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+I(i).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(s&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!i||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return s&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Ie]||i&&\"none\"===o[Ie]&&l+c>n)?\"vertical\":\"horizontal\"},Le=function(e){function t(e,o){return function(n,s,i,a){var r=n.options.group.name&&s.options.group.name&&n.options.group.name===s.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,s,i,a),o)(n,s,i,a);var l=(o?n:s).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},$e=function(){!_e&&W&&x(W,\"display\",\"none\")},Pe=function(){!_e&&W&&x(W,\"display\",\"\")};Ee&&!h&&document.addEventListener(\"click\",function(e){if(be)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),be=!1,!1},!0);var Oe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(s=e.clientX,i=e.clientY,ye.some(function(e){var t=e[H].options.emptyInsertThreshold;if(t&&!D(e)){var o=I(e),n=s>=o.left-t&&s\u003C=o.right+t,r=i>=o.top-t&&i\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[H]._onDragOver(o)}}var s,i,a},qe=function(e){Y&&Y.parentNode[H]._isOutsideThisEl(e.target)};function Me(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=s({},t),e[H]=this;var o,n,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return De(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Me.supportPointer&&\"PointerEvent\"in window&&(!p||m),emptyInsertThreshold:5};for(var r in F.initializePlugins(this,e,i),i)!(r in t)&&(t[r]=i[r]);for(var l in Le(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&Be,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?g(e,\"pointerdown\",this._onTapStart):(g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),s(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==x(e,\"display\")&&e!==Me.ghost){n.push({target:e,rect:I(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=T(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var s=!1,i=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=I(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=T(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&O(l,r)&&!O(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),O(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(s=!0,i=Math.max(i,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),s?o=setTimeout(function(){\"function\"==typeof e&&e()},i):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){x(e,\"transition\",\"\"),x(e,\"transform\",\"\");var s=T(this.el),i=s&&s.a,a=s&&s.d,r=(t.left-o.left)\u002F(i||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,x(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),x(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),x(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){x(e,\"transition\",\"\"),x(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function Ne(e,t,o,n,s,i,a,r){var l,u,p=e[H],m=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=s||t,l.relatedRect=i||I(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),m&&(u=m.call(p,l,a)),u}function je(e){e.draggable=!1}function He(){xe=!1}function Xe(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function ze(e){return setTimeout(e,0)}function Fe(e){return clearTimeout(e)}Me.prototype={constructor:Me,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(he=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,s=n.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Te.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Te.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(i)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||K===r)){if(te=L(r),ne=L(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return V({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),J(\"filter\",t,{evt:e}),void(s&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return V({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),J(\"filter\",t,{evt:e}),!0})))return void(s&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,s=this,i=s.el,a=s.options,r=i.ownerDocument;if(o&&!Y&&o.parentNode===i){var l=I(o);if(U=i,G=(Y=o).parentNode,Z=Y.nextSibling,K=o,ie=a.group,Me.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){J(\"delayEnded\",s,{evt:e}),Me.eventCanceled?s._onDrop():(s._disableDelayedDragEvents(),!u&&s.nativeDraggable&&(Y.draggable=!0),s._triggerDragStart(e,t),V({sortable:s,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){E(Y,e.trim(),je)}),g(r,\"dragover\",Oe),g(r,\"mousemove\",Oe),g(r,\"touchmove\",Oe),a.supportPointer?(g(r,\"pointerup\",s._onDrop),!this.nativeDraggable&&g(r,\"pointercancel\",s._onDrop)):(g(r,\"mouseup\",s._onDrop),g(r,\"touchend\",s._onDrop),g(r,\"touchcancel\",s._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),J(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(Me.eventCanceled)return void this._onDrop();a.supportPointer?(g(r,\"pointerup\",s._disableDelayedDrag),g(r,\"pointercancel\",s._disableDelayedDrag)):(g(r,\"mouseup\",s._disableDelayedDrag),g(r,\"touchend\",s._disableDelayedDrag),g(r,\"touchcancel\",s._disableDelayedDrag)),g(r,\"mousemove\",s._delayedDragTouchMoveHandler),g(r,\"touchmove\",s._delayedDragTouchMoveHandler),a.supportPointer&&g(r,\"pointermove\",s._delayedDragTouchMoveHandler),s._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&je(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._disableDelayedDrag),f(e,\"touchend\",this._disableDelayedDrag),f(e,\"touchcancel\",this._disableDelayedDrag),f(e,\"pointerup\",this._disableDelayedDrag),f(e,\"pointercancel\",this._disableDelayedDrag),f(e,\"mousemove\",this._delayedDragTouchMoveHandler),f(e,\"touchmove\",this._delayedDragTouchMoveHandler),f(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?g(document,\"pointermove\",this._onTouchMove):g(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(g(Y,\"dragend\",this),g(U,\"dragstart\",this._onDragStart));try{document.selection?ze(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(ve=!1,U&&Y){J(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&g(document,\"dragover\",qe);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),Me.active=this,e&&this._appendGhost(),V({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,$e();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[H]._isOutsideThisEl(e),t)do{if(t[H]&&t[H]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=b(t));Pe()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,s=e.touches?e.touches[0]:e,i=W&&T(W,!0),a=W&&i&&i.a,r=W&&i&&i.d,l=Ae&&fe&&$(fe),c=(s.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(s.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!Me.active&&!ve){if(o&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(W){i?(i.e+=c-(ce||0),i.f+=d-(de||0)):i={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(i.a,\",\").concat(i.b,\",\").concat(i.c,\",\").concat(i.d,\",\").concat(i.e,\",\").concat(i.f,\")\");x(W,\"webkitTransform\",u),x(W,\"mozTransform\",u),x(W,\"msTransform\",u),x(W,\"transform\",u),ce=c,de=d,le=s}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!W){var e=this.options.fallbackOnBody?document.body:U,t=I(Y,!0,Ae,!0,e),o=this.options;if(Ae){for(fe=e;\"static\"===x(fe,\"position\")&&\"none\"===x(fe,\"transform\")&&fe!==document;)fe=fe.parentNode;fe!==document.body&&fe!==document.documentElement?(fe===document&&(fe=A()),t.top+=fe.scrollTop,t.left+=fe.scrollLeft):fe=A(),Ce=$(fe)}C(W=Y.cloneNode(!0),o.ghostClass,!1),C(W,o.fallbackClass,!0),C(W,o.dragClass,!0),x(W,\"transition\",\"\"),x(W,\"transform\",\"\"),x(W,\"box-sizing\",\"border-box\"),x(W,\"margin\",0),x(W,\"top\",t.top),x(W,\"left\",t.left),x(W,\"width\",t.width),x(W,\"height\",t.height),x(W,\"opacity\",\"0.8\"),x(W,\"position\",Ae?\"absolute\":\"fixed\"),x(W,\"zIndex\",\"100000\"),x(W,\"pointerEvents\",\"none\"),Me.ghost=W,e.appendChild(W),x(W,\"transform-origin\",ue\u002FparseInt(W.style.width)*100+\"% \"+pe\u002FparseInt(W.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,s=o.options;J(\"dragStart\",this,{evt:e}),Me.eventCanceled?this._onDrop():(J(\"setupClone\",this),Me.eventCanceled||((Q=N(Y)).removeAttribute(\"id\"),Q.draggable=!1,Q.style[\"will-change\"]=\"\",this._hideClone(),C(Q,this.options.chosenClass,!1),Me.clone=Q),o.cloneId=ze(function(){J(\"clone\",o),Me.eventCanceled||(o.options.removeCloneOnHide||U.insertBefore(Q,Y),o._hideClone(),V({sortable:o,name:\"clone\"}))}),!t&&C(Y,s.dragClass,!0),t?(be=!0,o._loopId=setInterval(o._emulateDragOver,50)):(f(document,\"mouseup\",o._onDrop),f(document,\"touchend\",o._onDrop),f(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",s.setData&&s.setData.call(o,n,Y)),g(document,\"drop\",o),x(Y,\"transform\",\"translateZ(0)\")),ve=!0,o._dragStartId=ze(o._dragStarted.bind(o,t,e)),g(document,\"selectstart\",o),me=!0,window.getSelection().removeAllRanges(),p&&x(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,s,i=this.el,r=e.target,l=this.options,c=l.group,d=Me.active,u=ie===c,p=l.sort,m=ae||d,h=this,w=!1;if(!xe){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,i,!0),X(\"dragOver\"),Me.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||h._ignoreWhileAnimating===r)return F(!1);if(be=!1,d&&!l.disabled&&(u?p||(n=G!==U):ae===this||(this.lastPutMode=ie.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(s=\"vertical\"===this._getDirection(e,r),t=I(Y),X(\"dragOverValid\"),Me.eventCanceled)return w;if(n)return G=U,z(),this._hideClone(),X(\"revert\"),Me.eventCanceled||(Z?U.insertBefore(Y,Z):U.appendChild(Y)),F(!0);var g=D(i,l.draggable);if(!g||function(e,t,o){var n=I(D(o.el,o.options.draggable)),s=j(o.el,o.options,W);return t?e.clientX>s.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>s.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,s,this)&&!g.animated){if(g===Y)return F(!1);if(g&&i===e.target&&(r=g),r&&(o=I(r)),!1!==Ne(U,i,Y,t,r,o,e,!!r))return z(),g&&g.nextSibling?i.insertBefore(Y,g.nextSibling):i.appendChild(Y),G=i,R(),F(!0)}else if(g&&function(e,t,o){var n=I(_(o.el,0,o.options,!0)),s=j(o.el,o.options,W);return t?e.clientX\u003Cs.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Cs.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,s,this)){var f=_(i,0,l,!0);if(f===Y)return F(!1);if(o=I(r=f),!1!==Ne(U,i,Y,t,r,o,e,!1))return z(),i.insertBefore(Y,f),G=i,R(),F(!0)}else if(r.parentNode===i){o=I(r);var v,b,S,k=Y.parentNode!==i,T=!function(e,t,o){var n=o?e.left:e.top,s=o?e.right:e.bottom,i=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||s===r||n+i\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,s),E=s?\"top\":\"left\",A=B(r,\"top\",\"top\")||B(Y,\"top\",\"top\"),$=A?A.scrollTop:void 0;if(he!==r&&(b=o[E],Se=!1,ke=!T&&l.invertSwap||k),v=function(e,t,o,n,s,i,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&ge\u003Cc*s){if(!Se&&(1===we?l>d+c*i\u002F2:l\u003Cu-c*i\u002F2)&&(Se=!0),Se)p=!0;else if(1===we?l\u003Cd+ge:l>u-ge)return-we}else if(l>d+c*(1-s)\u002F2&&l\u003Cu-c*(1-s)\u002F2)return function(e){return L(Y)\u003CL(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*i\u002F2||l>u-c*i\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,s,T?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,ke,he===r),0!==v){var P=L(Y);do{P-=v,S=G.children[P]}while(S&&(\"none\"===x(S,\"display\")||S===W))}if(0===v||S===r)return F(!1);he=r,we=v;var O=r.nextElementSibling,q=!1,N=Ne(U,i,Y,t,r,o,e,q=1===v);if(!1!==N)return 1!==N&&-1!==N||(q=1===N),xe=!0,setTimeout(He,30),z(),q&&!O?i.appendChild(Y):r.parentNode.insertBefore(Y,q?O:r),A&&M(A,0,$-A.scrollTop),G=Y.parentNode,void 0===b||ke||(ge=Math.abs(b-I(r)[E])),R(),F(!0)}if(i.contains(Y))return F(!1)}return!1}function X(l,c){J(l,h,a({evt:e,isOwner:u,axis:s?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:m,target:r,completed:F,onMove:function(o,n){return Ne(U,i,Y,t,o,I(o),e,n)},changed:R},c))}function z(){X(\"dragOverAnimationCapture\"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function F(t){return X(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(h),h!==m&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==h&&h!==Me.active?ae=h:h===Me.active&&ae&&(ae=null),m===h&&(h._ignoreWhileAnimating=r),h.animateAll(function(){X(\"dragOverAnimationComplete\"),h._ignoreWhileAnimating=null}),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===i&&!r.animated)&&(he=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[H]._isOutsideThisEl(e.target),!t&&Oe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function R(){oe=L(Y),se=L(Y,l.draggable),V({sortable:h,name:\"change\",toEl:i,newIndex:oe,newDraggableIndex:se,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,\"mousemove\",this._onTouchMove),f(document,\"touchmove\",this._onTouchMove),f(document,\"pointermove\",this._onTouchMove),f(document,\"dragover\",Oe),f(document,\"mousemove\",Oe),f(document,\"touchmove\",Oe)},_offUpEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._onDrop),f(e,\"touchend\",this._onDrop),f(e,\"pointerup\",this._onDrop),f(e,\"pointercancel\",this._onDrop),f(e,\"touchcancel\",this._onDrop),f(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=L(Y),se=L(Y,o.draggable),J(\"drop\",this,{evt:e}),G=Y&&Y.parentNode,oe=L(Y),se=L(Y,o.draggable),Me.eventCanceled||(ve=!1,ke=!1,Se=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Fe(this.cloneId),Fe(this._dragStartId),this.nativeDraggable&&(f(document,\"drop\",this),f(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&x(document.body,\"user-select\",\"\"),x(Y,\"transform\",\"\"),e&&(me&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),W&&W.parentNode&&W.parentNode.removeChild(W),(U===G||ae&&\"clone\"!==ae.lastPutMode)&&Q&&Q.parentNode&&Q.parentNode.removeChild(Q),Y&&(this.nativeDraggable&&f(Y,\"dragend\",this),je(Y),Y.style[\"will-change\"]=\"\",me&&!ve&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),V({sortable:this,name:\"unchoose\",toEl:G,newIndex:null,newDraggableIndex:null,originalEvent:e}),U!==G?(oe>=0&&(V({rootEl:G,name:\"add\",toEl:G,fromEl:U,originalEvent:e}),V({sortable:this,name:\"remove\",toEl:G,originalEvent:e}),V({rootEl:G,name:\"sort\",toEl:G,fromEl:U,originalEvent:e}),V({sortable:this,name:\"sort\",toEl:G,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(V({sortable:this,name:\"update\",toEl:G,originalEvent:e}),V({sortable:this,name:\"sort\",toEl:G,originalEvent:e})),Me.active&&(null!=oe&&-1!==oe||(oe=te,se=ne),V({sortable:this,name:\"end\",toEl:G,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){J(\"nulling\",this),U=Y=G=W=Z=Q=K=ee=re=le=me=oe=se=te=ne=he=we=ae=ie=Me.dragged=Me.ghost=Me.clone=Me.active=null;var e=this.el;Te.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Te.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,s=o.length,i=this.options;n\u003Cs;n++)y(e=o[n],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||Xe(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var s=n.children[t];y(s,this.options.draggable,n,!1)&&(o[e]=s)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=F.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Le(o)},destroy:function(){J(\"destroy\",this);var e=this.el;e[H]=null,f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart),f(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(J(\"hideClone\",this),Me.eventCanceled)return;x(Q,\"display\",\"none\"),this.options.removeCloneOnHide&&Q.parentNode&&Q.parentNode.removeChild(Q),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(J(\"showClone\",this),Me.eventCanceled)return;Y.parentNode!=U||this.options.group.revertClone?Z?U.insertBefore(Q,Z):U.appendChild(Q):U.insertBefore(Q,Y),this.options.group.revertClone&&this.animate(Y,Q),x(Q,\"display\",\"\"),ee=!1}}else this._hideClone()}},Ee&&g(document,\"touchmove\",function(e){(Me.active||ve)&&e.cancelable&&e.preventDefault()}),Me.utils={on:g,off:f,css:x,find:E,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:q,closest:y,toggleClass:C,clone:N,index:L,nextTick:ze,cancelNextTick:Fe,detectDirection:De,getChild:_,expando:H},Me.get=function(e){return e[H]},Me.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(Me.utils=a(a({},Me.utils),e.utils)),F.mount(e)})},Me.create=function(e,t){return new Me(e,t)},Me.version=\"1.15.7\";var Re,Je,Ve,Ye,Ge,We,Ue=[],Ze=!1;function Ke(){Ue.forEach(function(e){clearInterval(e.pid)}),Ue=[]}function Qe(){clearInterval(We)}var et=q(function(e,t,o,n){if(t.scroll){var s,i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=A(),d=!1;Je!==o&&(Je=o,Ke(),Re=t.scroll,s=t.scrollFn,!0===Re&&(Re=P(o,!0)));var u=0,p=Re;do{var m=p,h=I(m),w=h.top,g=h.bottom,f=h.left,v=h.right,b=h.width,y=h.height,S=void 0,k=void 0,C=m.scrollWidth,T=m.scrollHeight,E=x(m),B=m.scrollLeft,_=m.scrollTop;m===c?(S=b\u003CC&&(\"auto\"===E.overflowX||\"scroll\"===E.overflowX||\"visible\"===E.overflowX),k=y\u003CT&&(\"auto\"===E.overflowY||\"scroll\"===E.overflowY||\"visible\"===E.overflowY)):(S=b\u003CC&&(\"auto\"===E.overflowX||\"scroll\"===E.overflowX),k=y\u003CT&&(\"auto\"===E.overflowY||\"scroll\"===E.overflowY));var D=S&&(Math.abs(v-i)\u003C=r&&B+b\u003CC)-(Math.abs(f-i)\u003C=r&&!!B),L=k&&(Math.abs(g-a)\u003C=r&&_+y\u003CT)-(Math.abs(w-a)\u003C=r&&!!_);if(!Ue[u])for(var $=0;$\u003C=u;$++)Ue[$]||(Ue[$]={});Ue[u].vx==D&&Ue[u].vy==L&&Ue[u].el===m||(Ue[u].el=m,Ue[u].vx=D,Ue[u].vy=L,clearInterval(Ue[u].pid),0==D&&0==L||(d=!0,Ue[u].pid=setInterval(function(){n&&0===this.layer&&Me.active._onTouchMove(Ge);var t=Ue[this.layer].vy?Ue[this.layer].vy*l:0,o=Ue[this.layer].vx?Ue[this.layer].vx*l:0;\"function\"==typeof s&&\"continue\"!==s.call(Me.dragged.parentNode[H],o,t,e,Ge,Ue[this.layer].el)||M(Ue[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=P(p,!1)));Ze=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,s=e.activeSortable,i=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||s;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(i(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=_(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},s(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},s(nt,{pluginName:\"removeOnSpill\"}),Me.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?g(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?g(document,\"touchmove\",this._handleFallbackAutoScroll):g(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):(f(document,\"pointermove\",this._handleFallbackAutoScroll),f(document,\"touchmove\",this._handleFallbackAutoScroll),f(document,\"mousemove\",this._handleFallbackAutoScroll)),Qe(),Ke(),clearTimeout(S),S=void 0},nulling:function(){Ge=Je=Re=Ze=We=Ve=Ye=null,Ue.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,s=(e.touches?e.touches[0]:e).clientY,i=document.elementFromPoint(n,s);if(Ge=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,i,t);var a=P(i,!0);!Ze||We&&n===Ve&&s===Ye||(We&&Qe(),We=setInterval(function(){var i=P(document.elementFromPoint(n,s),!0);i!==a&&(a=i,Ke()),et(e,o.options,i,t)},10),Ve=n,Ye=s)}else{if(!this.options.bubbleScroll||P(i,!0)===A())return void Ke();et(e,this.options,P(i,!1),!1)}}},s(e,{pluginName:\"scroll\",initializeByDefault:!0})}),Me.mount(nt,ot);const st=Me,it=\"lp-hidden\",at=\"loading\",rt=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},lt=(e,t=0)=>{e&&(t?e.classList.remove(it):e.classList.add(it))},ct=(e,t)=>{e&&(t?e.classList.add(at):e.classList.remove(at))},dt=(e,t)=>{const o=(e=>{const t={},o=new FormData(e);for(const e of o.entries()){const n=e[0],s=o.getAll(n);t.hasOwnProperty(n)||(t[n]=s.join(\",\"))}return t})(e);return(e=>{const t=[],o=e.elements;for(let e=0;e\u003Co.length;e++){const n=o[e].name;n&&!t.includes(n)&&t.push(n)}return t})(e).forEach(e=>{o.hasOwnProperty(e)?\"\"===o[e][0]&&(delete o[e],delete t[e]):delete t[e]}),t={...t,...o}},ut=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})};var pt=o(7736),mt=o.n(pt),ht=o(5072),wt=o.n(ht),gt=o(7825),ft=o.n(gt),vt=o(7659),bt=o.n(vt),yt=o(5056),St=o.n(yt),kt=o(540),Ct=o.n(kt),xt=o(1113),Tt=o.n(xt),Et=o(9455),At={};At.styleTagTransform=Tt(),At.setAttributes=St(),At.insert=bt().bind(null,\"head\"),At.domAPI=ft(),At.insertStyleElement=Ct(),wt()(Et.A,At),Et.A&&Et.A.locals&&Et.A.locals;const It={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},Bt=(e,t=\"success\",o)=>{let n=It;o&&(n={...n,...o}),new(mt())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()};let _t,Dt,Lt=[];class $t{constructor(){this.init()}static selectors={elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elBtnAddItemsSelected:\".lp-btn-add-items-selected\",elBtnCountItemsSelected:\".lp-btn-count-items-selected\",elHeaderCountItemSelected:\".header-count-items-selected\",elSelectItem:\".lp-select-item\",elListItems:\".list-items\",elPopupItemsToSelect:\".lp-popup-items-to-select\",elSearchTitleItem:\".lp-search-title-item\",elBtnBackListItems:\".lp-btn-back-to-select-items\",elListItemsWrap:\".list-items-wrap\",elListItemsSelected:\".list-items-selected\",elItemSelectedClone:\".li-item-selected.clone\",elItemSelected:\".li-item-selected\",LPTarget:\".lp-target\"};init(){this.events()}events=()=>{$t._loadedEvents||($t._loadedEvents=!0,ut(\"click\",[{selector:$t.selectors.elBtnShowPopupItemsToSelect,callBack:this.showPopupItemsToSelect.name,class:this},{selector:$t.selectors.elSelectItem,callBack:this.selectItemsFromList.name,class:this},{selector:$t.selectors.elBtnCountItemsSelected,callBack:this.showItemsSelected.name,class:this},{selector:$t.selectors.elBtnBackListItems,callBack:this.backToSelectItems.name,class:this},{selector:$t.selectors.elItemSelected,callBack:this.removeItemSelected.name,class:this},{selector:\".tabs .tab\",callBack:this.chooseTabItemsType.name,class:this}]),ut(\"keyup\",[{selector:$t.selectors.elSearchTitleItem,callBack:this.searchTitleItemToSelect.name,class:this}]))};showPopupItemsToSelect=e=>{const{e:o,target:n=!1,callBack:s}=e;if(!n.closest(`${$t.selectors.elBtnShowPopupItemsToSelect}`))return;Lt=[];const i=n.dataset.template||\"\",a=document.querySelector(i);t().fire({html:a.innerHTML,showConfirmButton:!1,showCloseButton:!0,width:\"60%\",customClass:{popup:\"lp-select-items-popup\",htmlContainer:\"lp-select-items-html-container\",container:\"lp-select-items-container\"},willOpen:()=>{_t=t().getPopup();const e=_t.querySelector(`${$t.selectors.LPTarget}`);if(e){const t=window.lpAJAXG.getDataSetCurrent(e);t.args.paged=1,t.args.item_selecting=Lt||[],window.lpAJAXG.setDataSetCurrent(e,t),window.lpAJAXG.fetchAJAX(t,{success:t=>{const{data:o}=t;_t.querySelector(\".lp-skeleton-animation\").remove(),e.innerHTML=o.content||\"\",this.watchItemsSelectedDataChange()}})}}}).then(e=>{e.isDismissed})};chooseTabItemsType=e=>{const{e:t,target:o,callBack:n}=e,s=o.closest(\".tab\");if(!s)return;t.preventDefault();const i=s.closest(\".tabs\");if(!i)return;const a=i.closest(`${$t.selectors.elPopupItemsToSelect}`),r=a.querySelector(`${$t.selectors.elSearchTitleItem}`),l=s.dataset.type;i.querySelectorAll(\".tab\").forEach(e=>{e.classList.contains(\"active\")&&e.classList.remove(\"active\")}),s.classList.add(\"active\"),r.value=\"\";const c=a.querySelector(`${$t.selectors.LPTarget}`),d=window.lpAJAXG.getDataSetCurrent(c);d.args.item_type=l,d.args.paged=1,d.args.item_selecting=Lt||[],window.lpAJAXG.setDataSetCurrent(c,d),window.lpAJAXG.showHideLoading(c,1),window.lpAJAXG.fetchAJAX(d,{success:e=>{const{data:t}=e;c.innerHTML=t.content||\"\"},error:e=>{Bt(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(c,0),this.watchItemsSelectedDataChange()}})};selectItemsFromList=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elSelectItem}`);if(!n)return;const s=n.querySelector('input[type=\"checkbox\"]');if(\"INPUT\"!==o.tagName)return void s.click();if(!n.closest(`${$t.selectors.elListItems}`))return;const i={...s.dataset};if(s.checked)Lt.some(e=>e.id===i.id)||Lt.push(i);else{const e=Lt.findIndex(e=>e.id===i.id);-1!==e&&Lt.splice(e,1)}this.watchItemsSelectedDataChange()};searchTitleItemToSelect=e=>{const{e:t,target:o}=e,n=o.closest($t.selectors.elSearchTitleItem);if(!n)return;const s=_t.querySelector(`${$t.selectors.LPTarget}`);clearTimeout(Dt),Dt=setTimeout(()=>{const e=window.lpAJAXG.getDataSetCurrent(s);e.args.search_title=n.value.trim(),e.args.item_selecting=Lt,e.args.paged=1,window.lpAJAXG.setDataSetCurrent(s,e),window.lpAJAXG.showHideLoading(s,1),window.lpAJAXG.fetchAJAX(e,{success:e=>{const{data:t}=e;s.innerHTML=t.content||\"\"},error:e=>{Bt(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(s,0)}})},800)};showItemsSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elBtnCountItemsSelected}`);if(!n)return;const s=_t.querySelector(`${$t.selectors.elBtnBackListItems}`),i=_t.querySelector(\".tabs\"),a=_t.querySelector(`${$t.selectors.elListItemsWrap}`),r=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),l=_t.querySelector(`${$t.selectors.elListItemsSelected}`),c=l.querySelector(`${$t.selectors.elItemSelectedClone}`);r.innerHTML=n.innerHTML,lt(a,0),lt(n,0),lt(i,0),lt(s,1),lt(r,1),lt(l,1),l.querySelectorAll(`${$t.selectors.elItemSelected}:not(.clone)`).forEach(e=>{e.remove()}),Lt.forEach(e=>{const t=c.cloneNode(!0);t.classList.remove(\"clone\"),Object.entries(e).forEach(([e,o])=>{t.dataset[e]=o}),t.querySelector(\".title-display\").innerHTML=e.title,lt(t,1),c.insertAdjacentElement(\"beforebegin\",t)})};backToSelectItems=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elBtnBackListItems}`);if(!n)return;const s=_t.querySelector(`${$t.selectors.elBtnCountItemsSelected}`),i=_t.querySelector(\".tabs\"),a=_t.querySelector(`${$t.selectors.elListItemsWrap}`),r=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),l=_t.querySelector(`${$t.selectors.elListItemsSelected}`);lt(s,1),lt(a,1),lt(i,1),lt(n,0),lt(r,0),lt(l,0)};removeItemSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${$t.selectors.elItemSelected}`);if(!n)return;const s=n.dataset,i=Lt.findIndex(e=>e.id===s.id);-1!==i&&Lt.splice(i,1),n.remove(),this.watchItemsSelectedDataChange()};watchItemsSelectedDataChange=()=>{const e=_t.querySelector(`${$t.selectors.elBtnAddItemsSelected}`),t=_t.querySelector(`${$t.selectors.elBtnCountItemsSelected}`),o=t.querySelector(\"span\"),n=_t.querySelector(`${$t.selectors.elHeaderCountItemSelected}`),s=_t.querySelector(`${$t.selectors.LPTarget}`);0!==Lt.length?(t.disabled=!1,e.disabled=!1,e.classList.add(\"active\"),o.textContent=`(${Lt.length})`,n.innerHTML=t.innerHTML):(t.disabled=!0,e.disabled=!0,e.classList.remove(\"active\"),o.textContent=\"\",n.textContent=\"\"),_t.querySelector(`${$t.selectors.elListItems}`).querySelectorAll('input[type=\"checkbox\"]').forEach(e=>{const t=e.dataset,o=Lt.some(e=>e.id===t.id);e.checked=o});const i=window.lpAJAXG.getDataSetCurrent(s);i.args.item_selecting=Lt,window.lpAJAXG.setDataSetCurrent(s,i)};addItemsSelectedToSection=e=>{const{e:o,target:n,callBackHandle:s}=e;_t&&(t().close(),\"function\"==typeof s&&(s(Lt),Lt=[]))}}const Pt=\"edit-course-curriculum\",Ot=new $t;class qt{constructor(){this.courseId=null,this.elCurriculumSections=null,this.sectionIdSelected=null}static selectors={elSectionListItems:\".section-list-items\",elItemClone:\".section-item.clone\",elSectionItem:\".section-item\",elBtnSelectItemType:\".lp-btn-select-item-type\",elAddItemTypeClone:\".lp-add-item-type.clone\",elSectionActions:\".section-actions\",elAddItemType:\".lp-add-item-type\",elAddItemTypeTitleInput:\".lp-add-item-type-title-input\",elBtnAddItemCancel:\".lp-btn-add-item-cancel\",elBtnAddItem:\".lp-btn-add-item\",elItemTitleInput:\".lp-item-title-input\",elBtnUpdateItemTitle:\".lp-btn-update-item-title\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-item-title\",elBtnDeleteItem:\".lp-btn-delete-item\",elBtnSetPreviewItem:\".lp-btn-set-preview-item\"};init(){this.elEditCurriculum=document.querySelector(`${Ht.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${Ht.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${Ht.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.events(),this.sortAbleItem(),Ot.init()}events(){qt._loadedEvents||(qt._loadedEvents=this,ut(\"click\",[{selector:qt.selectors.elBtnSelectItemType,class:this,callBack:this.addItemType.name},{selector:qt.selectors.elBtnAddItem,class:this,callBack:this.addItemToSection.name},{selector:qt.selectors.elBtnAddItemCancel,class:this,callBack:this.cancelAddItemType.name},{selector:qt.selectors.elBtnUpdateItemTitle,class:this,callBack:this.updateTitle.name},{selector:qt.selectors.elBtnCancelUpdateTitle,class:this,callBack:this.cancelUpdateTitle.name},{selector:qt.selectors.elBtnDeleteItem,class:this,callBack:this.deleteItem.name},{selector:$t.selectors.elBtnShowPopupItemsToSelect,class:this,callBack:this.handleShowPopupItemsToSelect.name},{selector:$t.selectors.elBtnAddItemsSelected,class:Ot,callBack:Ot.addItemsSelectedToSection.name,callBackHandle:this.addItemsSelectedToSection.bind(this)},{selector:qt.selectors.elBtnSetPreviewItem,class:this,callBack:this.updatePreviewItem.name}]),ut(\"keyup\",[{selector:qt.selectors.elItemTitleInput,class:this,callBack:this.changeTitle.name},{selector:qt.selectors.elAddItemTypeTitleInput,class:this,callBack:this.changeTitleAddNew.name}]),ut(\"keydown\",[{selector:qt.selectors.elAddItemTypeTitleInput,class:this,callBack:this.addItemToSection.name,checkIsEventEnter:!0},{selector:qt.selectors.elItemTitleInput,class:this,callBack:this.updateTitle.name,checkIsEventEnter:!0}]),ut(\"focusin\",[{selector:qt.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name}]),ut(\"focusout\",[{selector:qt.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}handleShowPopupItemsToSelect(e){const{e:t,target:o}=e;if(o.closest(\".lp-edit-quiz-wrap\"))return void(this.sectionIdSelected=null);const n=o.closest(Mt.selectors.elSection),s=o.closest(\"#lp-course-edit-curriculum\")||o.closest(\".lp-edit-curriculum-wrap\");this.sectionIdSelected=n&&s?n.dataset.sectionId:null}addItemType(e){const{e:t,target:o}=e,n=o,s=n.dataset.itemType,i=n.dataset.placeholder,a=n.dataset.buttonAddText,r=n.closest(`${Mt.selectors.elSection}`).querySelector(`${qt.selectors.elSectionActions}`),l=r.querySelector(`${qt.selectors.elAddItemTypeClone}`).cloneNode(!0),c=l.querySelector(`${qt.selectors.elAddItemTypeTitleInput}`),d=l.querySelector(`${qt.selectors.elBtnAddItem}`);l.classList.remove(\"clone\"),l.classList.add(s),lt(l,1),c.setAttribute(\"placeholder\",i),c.dataset.itemType=s,d.textContent=a,r.insertAdjacentElement(\"beforebegin\",l),c.focus()}cancelAddItemType(e){const{e:t,target:o}=e,n=o.closest(`${qt.selectors.elAddItemType}`);n&&n.remove()}addItemToSection(e){const{e:t,target:o,callBackNest:n}=e;t.preventDefault();const s=o.closest(`${qt.selectors.elAddItemType}`),i=s.closest(`${Mt.selectors.elSection}`),a=i.dataset.sectionId,r=s.querySelector(`${qt.selectors.elAddItemTypeTitleInput}`),l=r.value.trim(),c=r.dataset.itemType,d=r.dataset.messEmptyTitle;if(0===l.length)return void Bt(d,\"error\");const u=i.querySelector(`${qt.selectors.elItemClone}`),p=u.cloneNode(!0),m=p.querySelector(`${qt.selectors.elItemTitleInput}`);p.classList.remove(\"clone\"),p.classList.add(c),p.dataset.itemType=c,lt(p,1),ct(p,1),m.value=l,m.dataset.old=l,u.insertAdjacentElement(\"beforebegin\",p),s.remove();const h={success:t=>{const{message:o,status:s,data:i}=t;if(Bt(o,s),\"error\"===s)p.remove();else if(\"success\"===s){const{section_item:t,item_link:o}=i||{},s=t.item_id||0;p.dataset.itemId=s,p.querySelector(\".edit-link\").setAttribute(\"href\",o||\"\"),this.addPopupAttributesToItem(p,s,c),n&&\"function\"==typeof n.success&&(e.elItemNew=p,n.success(e))}},error:e=>{Bt(e,\"error\"),p.remove()},completed:()=>{ct(p,0),this.updateCountItems(i),n&&\"function\"==typeof n.completed&&(e.elItemNew=p,n.completed(e))}},w={course_id:this.courseId,action:\"create_item_add_to_section\",section_id:a,item_title:l,item_type:c,args:{id_url:Pt}};document.querySelector(\"#lp-course-builder\")&&(w.is_course_builder=1),window.lpAJAXG.fetchAJAX(w,h)}changeTitle(e){const{target:t}=e,o=t.closest(`${qt.selectors.elItemTitleInput}`);if(!o)return;const n=o.closest(`${qt.selectors.elSectionItem}`);n&&(o.value.trim()===(o.dataset.old||\"\")?n.classList.remove(\"editing\"):n.classList.add(\"editing\"))}focusTitleInput(e){const{target:t,focusIn:o=!0}=e,n=t.closest(`${qt.selectors.elItemTitleInput}`);if(!n)return;const s=n.closest(`${qt.selectors.elSectionItem}`);s&&(o?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}changeTitleAddNew(e){const{target:t}=e,o=t.closest(`${qt.selectors.elAddItemTypeTitleInput}`);if(!o)return;const n=o.closest(`${qt.selectors.elAddItemType}`);if(!n)return;const s=n.querySelector(`${qt.selectors.elBtnAddItem}`);s&&(0===o.value.trim().length?s.classList.remove(\"active\"):s.classList.add(\"active\"))}updateTitle(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(`${qt.selectors.elSectionItem}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSection}`);if(!s)return;const i=n.querySelector(`${qt.selectors.elItemTitleInput}`);if(!i)return;const a=n.dataset.itemId,r=n.dataset.itemType,l=i.value.trim(),c=i.dataset.old,d=i.dataset.messEmptyTitle;if(0===l.length)return void Bt(d,\"error\");if(l===c)return;i.blur(),ct(n,1);const u={success:e=>{const{message:t,status:o}=e;\"success\"===o?i.dataset.old=l:i.value=c,Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,0),n.classList.remove(\"editing\")}},p={course_id:this.courseId,action:\"update_item_of_section\",section_id:s.dataset.sectionId,item_id:a,item_type:r,item_title:l,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(p,u)}cancelUpdateTitle(e){const{e:t,target:o}=e,n=o.closest(`${qt.selectors.elBtnCancelUpdateTitle}`);if(!n)return;const s=n.closest(`${qt.selectors.elSectionItem}`),i=s.querySelector(`${qt.selectors.elItemTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}deleteItem(e){const{e:o,target:n}=e,s=n.closest(`${qt.selectors.elBtnDeleteItem}`);if(!s)return;const i=s.closest(`${qt.selectors.elSectionItem}`);if(!i)return;const a=i.dataset.itemId,r=i.closest(`${Mt.selectors.elSection}`),l=r.dataset.sectionId;t().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){ct(i,1);const e={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"success\"===o&&i.remove()},error:e=>{Bt(e,\"error\")},completed:()=>{ct(i,0),this.updateCountItems(r)}},t={course_id:this.courseId,action:\"delete_item_from_section\",section_id:l,item_id:a,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(t,e)}})}sortAbleItem(){const e=this.elCurriculumSections.querySelectorAll(`${qt.selectors.elSectionListItems}`);let t,o=0,n=0,s=0;e.forEach(e=>{new st(e,{handle:\".drag\",animation:150,group:{name:\"shared\"},onEnd:e=>{const i=[],a=e.item;s=a.closest(`${Mt.selectors.elSection}`).dataset.sectionId;const r={course_id:this.courseId,args:{id_url:Pt},action:\"update_item_section_and_position\"};r.item_id_change=o,r.section_id_new_of_item=s,r.section_id_old_of_item=n;const l=this.elCurriculumSections.querySelector(`.section[data-section-id=\"${s}\"]`);l.querySelectorAll(`${qt.selectors.elSectionItem}`).forEach(e=>{const t=parseInt(e.dataset.itemId||0);0!==t&&i.push(t)}),r.items_position=i;const c={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(a,0),this.updateCountItems(l),n!==s&&this.updateCountItems(t)}};ct(a,1),window.lpAJAXG.fetchAJAX(r,c)},onMove:()=>{},onChoose:e=>{const s=e.item;o=s.dataset.itemId,t=s.closest(`${Mt.selectors.elSection}`),n=t.dataset.sectionId},onUpdate:()=>{}})})}addItemsSelectedToSection(e){if(!this.sectionIdSelected)return;const o=document.querySelector(`.section[data-section-id=\"${this.sectionIdSelected}\"]`);if(!o)return;const n=o.querySelector(`${qt.selectors.elItemClone}`),s=null!==document.querySelector(\"#lp-course-builder\");e.forEach(e=>{const t=n.cloneNode(!0),o=t.querySelector(`${qt.selectors.elItemTitleInput}`);t.dataset.itemId=e.id,t.classList.add(e.type),t.classList.remove(\"clone\"),t.dataset.itemType=e.type,t.querySelector(\".edit-link\").setAttribute(\"href\",e.editLink||\"\"),o.value=e.titleSelected||\"\",ct(t,1),lt(t,1),n.insertAdjacentElement(\"beforebegin\",t)}),t().close();const i={course_id:this.courseId,action:\"add_items_to_section\",section_id:this.sectionIdSelected,items:e,is_course_builder:s?1:0,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(i,{success:t=>{const{message:s,status:i,data:a}=t,{html:r}=a||\"\";Bt(s,i),e.forEach(e=>{const t=o.querySelector(`${qt.selectors.elSectionItem}[data-item-id=\"${e.id}\"]`);t&&t.remove()}),\"success\"===i&&r&&n.insertAdjacentHTML(\"beforebegin\",r)},error:e=>{Bt(e,\"error\")},completed:()=>{this.updateCountItems(o)}})}updatePreviewItem(e){const{e:t,target:o}=e,n=o.closest(`${qt.selectors.elBtnSetPreviewItem}`);if(!n)return;const s=n.closest(`${qt.selectors.elSectionItem}`);if(!s)return;const i=n.querySelector(\"a\");i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\");const a=!i.classList.contains(\"lp-icon-eye-slash\"),r=s.dataset.itemId,l=s.dataset.itemType;ct(s,1);const c={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"error\"===o&&(i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\"))},error:e=>{Bt(e,\"error\"),i.classList.toggle(\"lp-icon-eye\"),i.classList.toggle(\"lp-icon-eye-slash\")},completed:()=>{ct(s,0)}},d={course_id:this.courseId,action:\"update_item_preview\",item_id:r,item_type:l,enable_preview:a?1:0,args:{id_url:Pt}};window.lpAJAXG.fetchAJAX(d,c)}updateCountItems(e){const t=this.elEditCurriculum,o=t.querySelector(\".total-items\"),n=t.querySelectorAll(`${qt.selectors.elSectionItem}:not(.clone)`).length;o.dataset.count=n,o.querySelector(\".count\").textContent=n;const s=e.querySelector(\".section-items-counts\"),i=e.querySelectorAll(`${qt.selectors.elSectionItem}:not(.clone)`).length;s.dataset.count=i,s.querySelector(\".count\").textContent=i}addPopupAttributesToItem(e,t,o){if(null===document.querySelector(\"#lp-course-builder\")||!t)return;const n=o.replace(\u002F^lp_\u002F,\"\"),s=`#lp-tmpl-builder-popup-curriculum-${n}-course-${this.courseId}`;if(!n||!document.querySelector(s))return;const i=e.querySelector(\".item-actions .edit-link\");if(!i)return;const a=i.closest(\"li\");a&&(\"lp_lesson\"===o?a.setAttribute(\"data-popup-lesson\",t):\"lp_quiz\"===o&&a.setAttribute(\"data-popup-quiz\",t),a.classList.add(\"lp-btn-edit-item-popup\"),i.removeAttribute(\"target\"),i.removeAttribute(\"href\"),i.classList.add(\"edit-popup-link\"),a.setAttribute(\"data-course-id\",this.courseId),a.setAttribute(\"data-popup-type\",n),a.setAttribute(\"data-popup-id\",t),a.setAttribute(\"data-template\",s))}}class Mt{constructor(){this.courseId=null,this.elEditCurriculum=null,this.elCurriculumSections=null,this.editSectionItem=new qt}static selectors={elSection:\".section\",elDivAddNewSection:\".add-new-section\",elSectionClone:\".section.clone\",elSectionTitleNewInput:\".lp-section-title-new-input\",elSectionTitleInput:\".lp-section-title-input\",etBtnEditTitle:\".lp-btn-edit-section-title\",elSectionDesInput:\".lp-section-description-input\",elBtnAddSection:\".lp-btn-add-section\",elBtnUpdateTitle:\".lp-btn-update-section-title\",elBtnUpdateDes:\".lp-btn-update-section-description\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-section-title\",elBtnCancelUpdateDes:\".lp-btn-cancel-update-section-description\",elBtnDeleteSection:\".lp-btn-delete-section\",elSectionDesc:\".section-description\",elSectionToggle:\".section-toggle\",elCountSections:\".count-sections\"};init(){this.elEditCurriculum=document.querySelector(`${Ht.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${Ht.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${Ht.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.editSectionItem.init(),this.events(),this.sortAbleSection()}events(){Mt._loadedEvents||(Mt._loadedEvents=this,ut(\"click\",[{selector:Mt.selectors.elBtnAddSection,class:this,callBack:this.addSection.name},{selector:`${Mt.selectors.elBtnUpdateDes}`,class:this,callBack:this.updateSectionDescription.name},{selector:`${Mt.selectors.etBtnEditTitle}`,class:this,callBack:this.setFocusTitleInput.name},{selector:`${Mt.selectors.elSectionToggle}`,class:this,callBack:this.toggleSection.name},{selector:`${Mt.selectors.elBtnCancelUpdateDes}`,class:this,callBack:this.cancelSectionDescription.name},{selector:`${Mt.selectors.elBtnDeleteSection}`,class:this,callBack:this.deleteSection.name},{selector:`${Mt.selectors.elBtnUpdateTitle}`,class:this,callBack:this.updateSectionTitle.name},{selector:`${Mt.selectors.elBtnCancelUpdateTitle}`,class:this,callBack:this.cancelSectionTitle.name},{selector:Ht.selectors.elToggleAllSections,class:this,callBack:this.toggleSectionAll.name}]),ut(\"keyup\",[{selector:Mt.selectors.elSectionTitleNewInput,class:this,callBack:this.changeTitleBeforeAdd.name},{selector:Mt.selectors.elSectionTitleInput,class:this,callBack:this.changeTitle.name},{selector:Mt.selectors.elSectionDesInput,class:this,callBack:this.changeDescription.name}]),ut(\"keydown\",[{selector:Mt.selectors.elSectionTitleNewInput,class:this,callBack:this.addSection.name,checkIsEventEnter:!0},{selector:Mt.selectors.elSectionDesInput,class:this,callBack:this.updateSectionDescription.name,checkIsEventEnter:!0},{selector:Mt.selectors.elSectionTitleInput,class:this,callBack:this.updateSectionTitle.name,checkIsEventEnter:!0}]),ut(\"focusin\",[{selector:Mt.selectors.elSectionTitleNewInput,class:this,callBack:this.focusTitleNewInput.name},{selector:Mt.selectors.elSectionTitleInput,class:this,callBack:this.focusTitleInput.name}]),ut(\"focusout\",[{selector:Mt.selectors.elSectionTitleNewInput,class:this,callBack:this.focusTitleNewInput.name,focusIn:!1},{selector:`${Mt.selectors.elSectionTitleInput}`,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}changeTitleBeforeAdd(e){const{e:t,target:o}=e,n=o,s=n.closest(`${Mt.selectors.elDivAddNewSection}`);if(!s)return;const i=s.querySelector(`${Mt.selectors.elBtnAddSection}`);0===n.value.trim().length?i.classList.remove(\"active\"):i.classList.add(\"active\")}focusTitleNewInput(e){const{e:t,target:o,focusIn:n=!0}=e,s=o.closest(`${Mt.selectors.elDivAddNewSection}`);s&&(n?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}addSection(e){const{e:t,target:o,callBackNest:n}=e,s=o.closest(`${Mt.selectors.elDivAddNewSection}`);if(!s)return;t.preventDefault();const i=s.querySelector(`${Mt.selectors.elSectionTitleNewInput}`),a=i.value.trim(),r=i.dataset.messEmptyTitle;if(0===a.length)return void Bt(r,\"error\");i.value=\"\",i.blur();const l=this.elCurriculumSections.querySelector(`${Mt.selectors.elSectionClone}`).cloneNode(!0);l.classList.remove(\"clone\"),lt(l,1),ct(l,1),l.querySelector(`${Mt.selectors.elSectionTitleInput}`).value=a,this.elCurriculumSections.insertAdjacentElement(\"beforeend\",l);const c={success:t=>{const{message:o,status:s,data:i}=t;if(\"error\"===s)throw l.remove(),o;if(\"success\"===s){const{section:o}=i;l.dataset.sectionId=o.section_id||\"\",this.editSectionItem.sortAbleItem(),n&&\"function\"==typeof n.success&&(e.elSection=l,e.response=t,n.success(e))}Bt(o,s)},error:t=>{l.remove(),Bt(t,\"error\"),n&&\"function\"==typeof n.error&&(e.error=t,n.error(e))},completed:()=>{ct(l,0),l.classList.remove(`${Ht.selectors.elCollapse}`),l.querySelector(`${Mt.selectors.elSectionDesInput}`).focus(),this.updateCountSections(this.elEditCurriculum),n&&\"function\"==typeof n.completed&&(e.elSection=l,n.completed(e))}},d=JSON.parse(i.dataset.send);d.section_name=a,window.lpAJAXG.fetchAJAX(d,c)}deleteSection(e){const{e:o,target:n}=e,s=n,i=s.closest(`${Ht.selectors.idElEditCurriculum}`);t().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=s.closest(\".section\"),t=e.dataset.sectionId;ct(e,1);const o={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(e,0),e.remove(),this.editSectionItem.updateCountItems(e),this.updateCountSections(i)}},n=JSON.parse(s.dataset.send);n.section_id=t,window.lpAJAXG.fetchAJAX(n,o)}})}focusTitleInput(e){const{e:t,target:o,focusIn:n=!0}=e,s=o.closest(`${Mt.selectors.elSection}`);s&&(n?s.classList.add(\"focus\"):s.classList.remove(\"focus\"))}setFocusTitleInput(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elSection}`);if(!n)return;const s=n.querySelector(`${Mt.selectors.elSectionTitleInput}`);s.setSelectionRange(s.value.length,s.value.length),s.focus()}changeTitle(e){const{e:t,target:o}=e,n=o,s=n.closest(`${Mt.selectors.elSection}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}updateSectionTitle(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elSection}`);if(!n)return;t.preventDefault();const s=n.querySelector(`${Mt.selectors.elSectionTitleInput}`);if(!s)return;const i=n.dataset.sectionId,a=s.value.trim(),r=s.dataset.old||\"\",l=s.dataset.messEmptyTitle;if(0===a.length)return void Bt(l,\"error\");if(a===r)return;s.blur(),ct(n,1);const c={success:e=>{const{message:t,status:o}=e;Bt(t,o),\"success\"===o&&(s.dataset.old=a)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,0),n.classList.remove(\"editing\")}},d=JSON.parse(s.dataset.send);d.section_id=i,d.section_name=a,window.lpAJAXG.fetchAJAX(d,c)}cancelSectionTitle(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elBtnCancelUpdateTitle}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSection}`),i=s.querySelector(`${Mt.selectors.elSectionTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}updateSectionDescription(e){const{e:t,target:o,callBackNest:n}=e,s=o.closest(`${Mt.selectors.elSectionDesc}`);if(!s)return;const i=s.querySelector(`${Mt.selectors.elSectionDesInput}`);if(!i)return;t.preventDefault();const a=i.closest(`${Mt.selectors.elSection}`),r=a.dataset.sectionId,l=i.value.trim(),c=i.dataset.old||\"\";if(l===c)return;ct(a,1);const d={success:t=>{const{message:o,status:s}=t;n&&\"function\"==typeof n.success&&(e.elSection=a,e.response=t,n.success(e)),Bt(o,s)},error:e=>{Bt(e,\"error\"),n&&\"function\"==typeof n.error&&n.error(a,e)},completed:()=>{ct(a,0),i.closest(`${Mt.selectors.elSectionDesc}`).classList.remove(\"editing\"),i.dataset.old=l,n&&\"function\"==typeof n.completed&&n.completed(a)}},u=JSON.parse(i.dataset.send);u.section_id=r,u.section_description=l,window.lpAJAXG.fetchAJAX(u,d)}cancelSectionDescription(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elSectionDesc}`),s=n.querySelector(`${Mt.selectors.elSectionDesInput}`);s.value=s.dataset.old||\"\",n.classList.remove(\"editing\")}changeDescription(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elSectionDesInput}`);if(!n)return;const s=n.closest(`${Mt.selectors.elSectionDesc}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}toggleSectionAll(e){const{e:t,target:o}=e,n=o.closest(`${Ht.selectors.elToggleAllSections}`);if(!n)return;const s=n.closest(`${Ht.selectors.idElEditCurriculum}`).querySelectorAll(`${Mt.selectors.elSection}:not(.clone)`);n.classList.toggle(`${Ht.selectors.elCollapse}`),s.forEach(e=>{const t=n.classList.contains(`${Ht.selectors.elCollapse}`);e.classList.toggle(`${Ht.selectors.elCollapse}`,t)})}toggleSection(e){const{e:t,target:o}=e,n=o.closest(`${Mt.selectors.elSection}`);n.closest(`${Ht.selectors.elCurriculumSections}`)&&(n.classList.toggle(`${Ht.selectors.elCollapse}`),this.checkAllSectionsCollapsed())}checkAllSectionsCollapsed(){const e=this.elEditCurriculum.querySelectorAll(`${Mt.selectors.elSection}:not(.clone)`),t=this.elEditCurriculum.querySelector(`${Ht.selectors.elToggleAllSections}`);let o=!0;e.forEach(e=>{if(e.classList.contains(`${Ht.selectors.elCollapse}`))return o=!1,!1}),o?t.classList.remove(`${Ht.selectors.elCollapse}`):t.classList.add(`${Ht.selectors.elCollapse}`)}sortAbleSection(){let e,t=0;new st(this.elCurriculumSections,{handle:\".drag\",animation:150,onEnd:o=>{const n=o.item;if(!t)return;const s=n.closest(`${Mt.selectors.elSection}`),i=this.elCurriculumSections.querySelectorAll(`${Mt.selectors.elSection}`),a=[];i.forEach(e=>{const t=e.dataset.sectionId;a.push(t)});const r={success:e=>{const{message:t,status:o}=e;Bt(t,o)},error:e=>{Bt(e,\"error\")},completed:()=>{ct(s,0),t=0}},l={action:\"course_update_section_position\",course_id:this.courseId,new_position:a,args:{id_url:\"course-update-section-position\"}};clearTimeout(e),e=setTimeout(()=>{ct(s,1),window.lpAJAXG.fetchAJAX(l,r)},1e3)},onMove:t=>{clearTimeout(e)},onUpdate:e=>{t=1}})}updateCountSections(e){const t=e.querySelector(`${Mt.selectors.elCountSections}`),o=e.querySelectorAll(`${Mt.selectors.elSection}:not(.clone)`).length;t.dataset.count=o,t.querySelector(\".count\").textContent=o}}const Nt=new Mt,jt=new qt;class Ht{constructor(){this.init()}static selectors={idElEditCurriculum:\"#lp-course-edit-curriculum\",elCurriculumSections:\".curriculum-sections\",elToggleAllSections:\".course-toggle-all-sections\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\"};init(){rt(`${Ht.selectors.idElEditCurriculum}`,e=>{Nt.init(),jt.init()})}}let Xt,zt=null,Ft=!1;const Rt=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};let Jt,Vt,Yt,Gt=!1;class Wt{constructor(e={}){this.options={autoInsertButtons:!0,isCourseBuilder:!1,titleInputSelector:\"input[name=post_title]\",courseBuilderTitleInputSelector:\"input[name=course_title]\",editorIdClassic:\"content\",editorIdCourseBuilder:\"course_description_editor\",...e},this.init()}static selectors={elBtnGenerateWithAi:\".lp-btn-generate-with-ai\",elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai&&(this.options.autoInsertButtons&&(rt(\"#titlewrap\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),rt(\"#wp-content-media-buttons\",e=>{e.insertAdjacentHTML(\"beforeend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),rt(\"#postimagediv\",e=>{e.querySelector(\".postbox-header\").insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),wp.data&&wp.data.select(\"core\u002Feditor\")&&(Gt=!0,Jt=wp.data.select,Vt=wp.data.dispatch,Yt=Jt(\"core\u002Feditor\"),rt(\".editor-document-bar\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}),rt(\".editor-post-featured-image\",e=>{e.insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>')}),rt(\".editor-post-featured-image\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}))),this.events())}getTitleInputSelector(){return this.options.isCourseBuilder?this.options.courseBuilderTitleInputSelector:this.options.titleInputSelector}getEditorId(){return this.options.isCourseBuilder?this.options.editorIdCourseBuilder:this.options.editorIdClassic}setCourseBuilderPostId(e){if(!this.options.isCourseBuilder||!e)return;const t=e.querySelector('[name=\"post-id\"]');if(!t)return;const o=document.querySelector(\".cb-section__course-edit[data-course-id]\"),n=o?.dataset?.courseId||\"\";n&&(t.value=n)}extractImageSourceFromHtml(e){if(!e)return\"\";const t=document.createElement(\"div\");return t.innerHTML=e,t.querySelector(\"img\")?.getAttribute(\"src\")||\"\"}applyCourseBuilderFeaturedImage(e,t){return!(!e||!t||(document.dispatchEvent(new CustomEvent(\"lp-course-builder\u002Fai-featured-image-applied\",{detail:{attachmentId:e,imageSrc:t}})),0))}events(){ut(\"click\",[{selector:Wt.selectors.elBtnGenerateWithAi,class:this,callBack:this.showPopup.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateData.name},{selector:\".lp-btn-copy\",class:this,callBack:this.copyGeneratedData.name},{selector:\".lp-btn-apply\",class:this,callBack:this.applyGeneratedData.name},{selector:\".lp-btn-ai-apply-image\",class:this,callBack:this.applyImageData.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:o,target:n}=e,s=lpData.i18n.confirm_close_ai;Ft?confirm(s)&&t().close():t().close()}}])}showPopup(e){const{e:o,target:n}=e,s=n.dataset.template||n.closest(\".lp-btn-generate-with-ai\").dataset.template||n.closest(\".lp-generate-data-ai-wrap\").dataset.template||\"\",i=document.querySelector(s);i?t().fire({html:i.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{zt=t().getPopup(),zt.click();const e=document.querySelector(this.getTitleInputSelector());let o=\"\";if(e)o=e.value;else if(Gt){const e=document.querySelector(\".editor-post-card-panel__title-name\");e&&(o=e.textContent)}let n=\"\";if(Gt)n=Yt.getEditedPostContent().replace(\u002F(\u003C([^>]+)>)\u002Fgi,\"\");else{const e=this.getEditorId();if(window.tinymce&&window.tinymce.get(e))n=window.tinymce.get(e).getContent({format:\"text\"});else{const t=document.querySelector(`#${e}`);n=t?t.value:\"\"}}const s=zt.querySelector(\"form\");this.setCourseBuilderPostId(s);const i=s.querySelector(\"[name=post-title]\");if(i&&(i.value=o,!o)){const e=i.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");e&&lt(e,1)}const a=s.querySelector(\"[name=post-content]\");if(a&&(a.value=n,n.length\u003C2)){const e=a.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");e&&lt(e,1)}const r=zt.querySelector('select[name=\"target_audience\"]');r&&(Rt?.target_audience&&r.tomselect.setValue(Rt.target_audience),r.addEventListener(\"change\",e=>{Rt.target_audience=r.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}));const l=zt.querySelector('select[name=\"tone\"]');l&&(Rt?.tone&&l.tomselect.setValue(Rt.tone),l.addEventListener(\"change\",e=>{Rt.tone=l.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}));const c=zt.querySelector('select[name=\"language\"]');c&&(Rt?.language&&c.tomselect.setValue(Rt.language),c.addEventListener(\"change\",e=>{const t=c.tomselect.getValue();Rt.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(Rt))}))}}).then(e=>{e.isDismissed&&Ft&&(Ft=!1)}):console.error(`Template ${s} not found!`)}showStep(e){const{e:t,target:o}=e;t.preventDefault();const n=o.closest(\".button-actions\"),s=n.closest(Wt.selectors.elGenerateDataAiWrap);let i=parseInt(n.dataset.step);const a=o.dataset.action;\"next\"===a?i++:\"prev\"===a&&i--,n.dataset.step=i;const r=o.closest(\"form\"),l=r.querySelector(`.step-content[data-step=\"${i}\"]`),c=s.querySelector(`.step-item[data-step=\"${i}\"]`);r.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),l.classList.add(\"active\"),s.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\"),o.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(i)?lt(e,1):lt(e,0)})}generatePrompt(e){const{e:t,target:o}=e;t.preventDefault(),ct(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=dt(n,s);const i={success:e=>{const{message:t,status:o,data:s}=e;Bt(t,o),\"success\"===o&&(n.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=s,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{Bt(e,\"error\")},completed:()=>{ct(o,!1)}};window.lpAJAXG.fetchAJAX(s,i)}generateData(e){const{e:t,target:o}=e;t.preventDefault(),ct(o,!0);const n=o.closest(\"form\");let s=JSON.parse(o.dataset.send);s=dt(n,s);const i=n.querySelector(\".lp-btn-step[data-action=prev]\");lt(i,0);const a={success:e=>{const{message:t,status:o,data:s}=e;Ft&&Bt(t,o),\"success\"===o&&(Xt=s.lp_structure_course,n.querySelector(\".lp-ai-generated-results\").innerHTML=s.lp_html_preview,n.querySelector(\".lp-btn-step[data-action=next]\").click())},error:e=>{Bt(e,\"error\")},completed:()=>{ct(o,!1),lt(i,1),Ft=!1}};Ft=!0,window.lpAJAXG.fetchAJAX(s,a)}applyGeneratedData(e){const{e:o,target:n}=e;o.preventDefault();const s=n.dataset.apply,i=n.dataset.target;if(i)if(Gt)\"set-wp-editor-content\"===i?Vt(\"core\u002Feditor\").editPost({content:s}):\"set-wp-title\"===i&&Vt(\"core\u002Feditor\").editPost({title:s});else if(\"set-wp-editor-content\"===i)this.setWPEditorContent(s);else if(\"set-wp-title\"===i){const e=document.querySelector(this.getTitleInputSelector());e&&(e.value=s,e.dispatchEvent(new Event(\"input\",{bubbles:!0})))}zt&&t().close()}copyGeneratedData(e){const{e:t,target:o}=e;t.preventDefault();const n=o.dataset.copy;if(navigator.clipboard)navigator.clipboard.writeText(n).then(()=>{Bt(\"Copied to clipboard!\",\"success\")}).catch(e=>{Bt(\"Failed to copy text: \"+e,\"error\")});else{const e=document.createElement(\"textarea\");e.value=n,e.style.position=\"fixed\",e.style.left=\"-9999px\",document.body.appendChild(e),e.select();try{const e=document.execCommand(\"copy\");Bt(e?\"Copied to clipboard!\":\"Failed to copy text\",e?\"success\":\"error\")}catch(e){Bt(\"Failed to copy text: \"+e,\"error\")}document.body.removeChild(e)}}setWPEditorContent(e){const t=this.getEditorId(),o=window.tinymce?.get(t);if(o)return void o.setContent(e);const n=document.querySelector(`#${t}`);n&&(n.value=e,n.dispatchEvent(new Event(\"input\",{bubbles:!0})))}applyImageData(e){const{e:o,target:n}=e;let s=JSON.parse(n.dataset.send);s=dt(n.closest(\"form\"),s),ct(n,!0);const i={success:e=>{const{message:o,status:n,data:s}=e;if(Bt(o,n),\"success\"===n){if(this.options.isCourseBuilder){const e=parseInt(s?.attachment_id||0,10),t=this.extractImageSourceFromHtml(s?.html_image||\"\");if(!this.applyCourseBuilderFeaturedImage(e,t))return void Bt(\"Failed to apply image to course featured image.\",\"error\")}else Gt?Vt(\"core\u002Feditor\").editPost({featured_media:s.attachment_id}):document.querySelector(\"#postimagediv .inside\").outerHTML=s.html_image;zt&&t().close()}},error:e=>{Bt(e,\"error\")},completed:()=>{ct(n,!1)}};window.lpAJAXG.fetchAJAX(s,i)}}let Ut=null,Zt=null;class Kt{constructor(e={}){this.options={isCourseBuilder:!1,...e},this.init()}static selectors={elBtnApplyCurriculum:\".lp-btn-apply-curriculum\"};init(){lpData?.enable_open_ai&&(this.options.isCourseBuilder?rt(Ht.selectors.idElEditCurriculum,e=>{e.querySelector(Mt.selectors.elCountSections).insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tclass=\"cb-course-edit-ai-btn lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>')}):rt(Ht.selectors.idElEditCurriculum,e=>{e.querySelector(Mt.selectors.elCountSections).insertAdjacentHTML(\"afterend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),this.events())}events(){Kt._loadedEvents||(Kt._loadedEvents=!0,ut(\"click\",[{selector:Kt.selectors.elBtnApplyCurriculum,class:this,callBack:this.applyData.name}]))}async applyData(e){const{e:o,target:n}=e;let s=JSON.parse(n.dataset.send);if(s=dt(n.closest(\"form\"),s),!s[\"lp-openai-generated-data\"])return;const i=JSON.parse(s[\"lp-openai-generated-data\"])[0].sections;i&&0!==i.length||Bt(\"No sections found in the generated data.\",\"error\"),t().close(),await new Promise(e=>setTimeout(e,500)),Ut=new Mt,Ut.init(),Zt=new qt,Zt.init();const a=document.querySelector(Ht.selectors.idElEditCurriculum);a.querySelector(Mt.selectors.elDivAddNewSection).scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>setTimeout(e,800));for(const e of i){const t=a.querySelector(Mt.selectors.elSectionTitleNewInput),o=a.querySelector(Mt.selectors.elBtnAddSection);t.value=e.section_title||\"\",await new Promise(t=>{Ut.addSection({e:new PointerEvent(\"click\"),target:o,callBackNest:this.updateSectionDescription({sectionData:e,elEditCurriculum:a}),resolve:t})})}}updateSectionDescription(e){const{sectionData:t,elEditCurriculum:o}=e;return{success:async e=>{const{elSection:n}=e;await new Promise(e=>setTimeout(e,1e3));const s=n.querySelector(Mt.selectors.elSectionDesInput);s.value=t.section_description||\"\",await new Promise(e=>{Ut.updateSectionDescription({e:new PointerEvent(\"click\"),target:s,callBackNest:this.addSectionItems({sectionData:t,elEditCurriculum:o}),resolve:e})}),setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}addSectionItems(e){const{sectionData:t,elEditCurriculum:o}=e,n=t.lessons||[],s=t.quizzes||[];return{success:async e=>{const{elSection:t}=e,i=t.querySelector(`${qt.selectors.elBtnSelectItemType}[data-item-type=lp_lesson]`),a=t.querySelector(`${qt.selectors.elBtnSelectItemType}[data-item-type=lp_quiz]`);for(const e of n)i.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:o});for(const e of s)a.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:o});setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}async addItemToSection(e){const{itemData:t,elSection:o,elEditCurriculum:n}=e,s=o.querySelector(qt.selectors.elBtnAddItem);o.querySelector(qt.selectors.elAddItemTypeTitleInput).value=t.lesson_title||t.quiz_title||\"\",s.scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>{Zt.addItemToSection({e:new PointerEvent(\"click\"),target:s,resolve:e,callBackNest:{completed:async t=>{setTimeout(e,1e3)}}})}),setTimeout(e.resolve,1)}}new Ht,new Wt,new Kt})()})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -15,14 +15,14 @@\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! toastify-js *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\");\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -80,14 +80,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -118,10 +118,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -139,12 +139,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -157,11 +157,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -182,12 +182,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -330,15 +330,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -9708,11 +9708,11 @@\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n \u002F* harmony import *\u002F var sortablejs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! sortablejs *\u002F \".\u002Fnode_modules\u002Fsortablejs\u002Fmodular\u002Fsortable.esm.js\");\n-\u002F**\r\n- * Edit question JS handler.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Edit question JS handler.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -9919,7 +9919,15 @@\n         wrapEditor.classList.remove('html-active');\n       }\n       const elTextarea = document.getElementById(id);\n+      if (!elTextarea) {\n+        return;\n+      }\n       const elQuestionEditMain = elTextarea.closest(`${EditQuestion.selectors.elQuestionEditMain}`);\n+\n+      \u002F\u002F Skip if not in question edit context\n+      if (!elQuestionEditMain) {\n+        return;\n+      }\n       const questionId = elQuestionEditMain.dataset.questionId;\n       editor.settings.force_p_newlines = false;\n       editor.settings.forced_root_block = '';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-question.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{var e={2603(e,t,o){\"use strict\";o.d(t,{W:()=>a});var n=o(7736),i=o.n(n);o(4316);const s={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},a=(e,t=\"success\",o)=>{let n=s;o&&(n={...n,...o}),new(i())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()}},4223(e,t,o){\"use strict\";o.d(t,{eventHandlers:()=>c,lpOnElementReady:()=>s,lpSetLoadingEl:()=>r,lpShowHideEl:()=>a,toggleCollapse:()=>l});const n=\"lp-hidden\",i=\"loading\",s=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const i=document.querySelector(e);i&&(n.disconnect(),t(i))});n.observe(document.documentElement,{childList:!0,subtree:!0})},a=(e,t=0)=>{e&&(t?e.classList.remove(n):e.classList.add(n))},r=(e,t)=>{e&&(t?e.classList.add(i):e.classList.remove(i))},l=(e,t,o=\"\",n=[],i)=>{if(o||(o=\".lp-trigger-toggle\"),n&&n.length>0)for(const e of n)if(t.closest(e))return;const s=t.closest(o);if(!s)return;const a=s.closest(\".lp-section-toggle\");a&&(a.classList.toggle(\"lp-collapse\"),\"function\"==typeof i&&i(a))},c=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let i={e:o,target:n};t.forEach(t=>{i={...i,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(i)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](i):t.callBack(i))})})}},9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),i=o.n(n),s=o(6314),a=o.n(s)()(i());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,i,s){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==s&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=s),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),i&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=i):d[4]=\"\".concat(i)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},246(e,t,o){\"use strict\";function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},i.apply(null,arguments)}function s(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?s(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}o.d(t,{Ay:()=>it});var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),h=l(\u002FiP(ad|od|hone)\u002Fi),m=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function f(e,t,o){e.addEventListener(t,o,!c&&w)}function g(e,t,o){e.removeEventListener(t,o,!c&&w)}function b(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function v(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&b(e,t):b(e,t))||n&&e===o)return e;if(e===o)break}while(e=v(e))}return null}var k,x=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(x,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(x,\" \")}}function E(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function A(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=E(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(o)}function S(e,t,o){if(e){var n=e.getElementsByTagName(t),i=0,s=n.length;if(o)for(;i\u003Cs;i++)o(n[i],i);return n}return[]}function T(){return document.scrollingElement||document.documentElement}function B(e,t,o,n,i){if(e.getBoundingClientRect||e===window){var s,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==T()?(a=(s=e.getBoundingClientRect()).top,r=s.left,l=s.bottom,d=s.right,u=s.height,p=s.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(i=i||e.parentNode,!c))do{if(i&&i.getBoundingClientRect&&(\"none\"!==E(i,\"transform\")||o&&\"static\"!==E(i,\"position\"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(E(i,\"border-top-width\")),r-=h.left+parseInt(E(i,\"border-left-width\")),l=a+s.height,d=r+s.width;break}}while(i=i.parentNode);if(n&&e!==window){var m=A(i||e),w=m&&m.a,f=m&&m.d;m&&(l=(a\u002F=f)+(u\u002F=f),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function $(e,t,o){for(var n=L(e,!0),i=B(e)[t];n;){var s=B(n)[o];if(!(\"top\"===o||\"left\"===o?i>=s:i\u003C=s))return n;if(n===T())break;n=L(n,!1)}return!1}function D(e,t,o,n){for(var i=0,s=0,a=e.children;s\u003Ca.length;){if(\"none\"!==a[s].style.display&&a[s]!==qe.ghost&&(n||a[s]!==qe.dragged)&&y(a[s],o.draggable,e,!1)){if(i===t)return a[s];i++}s++}return null}function _(e,t){for(var o=e.lastElementChild;o&&(o===qe.ghost||\"none\"===E(o,\"display\")||t&&!b(o,t));)o=o.previousElementSibling;return o||null}function I(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===qe.clone||t&&!b(e,t)||o++;return o}function O(e){var t=0,o=0,n=T();if(e)do{var i=A(e),s=i.a,a=i.d;t+=e.scrollLeft*s,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function L(e,t){if(!e||!e.getBoundingClientRect)return T();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var i=E(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==i.overflowX||\"scroll\"==i.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==i.overflowY||\"scroll\"==i.overflowY)){if(!o.getBoundingClientRect||o===document.body)return T();if(n||t)return o;n=!0}}}while(o=o.parentNode);return T()}function P(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function M(e,t){return function(){if(!k){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),k=setTimeout(function(){k=void 0},t)}}}function q(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function N(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function F(e,t,o){var n={};return Array.from(e.children).forEach(function(i){var s,a,r,l;if(y(i,t.draggable,e,!1)&&!i.animated&&i!==o){var c=B(i);n.left=Math.min(null!==(s=n.left)&&void 0!==s?s:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var j=\"Sortable\"+(new Date).getTime();var H=[],Q={initializeByDefault:!0},z={mount:function(e){for(var t in Q)Q.hasOwnProperty(t)&&!(t in e)&&(e[t]=Q[t]);H.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),H.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var i=e+\"Global\";H.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][i]&&t[n.pluginName][i](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var s in H.forEach(function(n){var s=n.pluginName;if(e.options[s]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[s]=a,i(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(s)){var a=this.modifyOption(e,s,e.options[s]);void 0!==a&&(e.options[s]=a)}},getEventProperties:function(e,t){var o={};return H.forEach(function(n){\"function\"==typeof n.eventProperties&&i(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return H.forEach(function(i){e[i.pluginName]&&i.optionListeners&&\"function\"==typeof i.optionListeners[t]&&(n=i.optionListeners[t].call(e[i.pluginName],o))}),n}};var R=[\"evt\"],W=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,i=function(e,t){if(null==e)return{};var o,n,i=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n\u003Cs.length;n++)o=s[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}(o,R);z.pluginEvent.bind(qe)(e,t,a({dragEl:Y,parentEl:V,ghostEl:U,rootEl:J,nextEl:Z,lastDownEl:G,cloneEl:K,cloneHidden:ee,dragStarted:he,putSortable:ae,activeSortable:qe.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:ie,hideGhostForTarget:Oe,unhideGhostForTarget:Le,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){X({sortable:t,name:e,originalEvent:n})}},i))};function X(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,i=e.targetEl,s=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,h=e.oldDraggableIndex,m=e.newDraggableIndex,w=e.originalEvent,f=e.putSortable,g=e.extraEventProperties;if(t=t||o&&o[j]){var b,v=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(b=document.createEvent(\"Event\")).initEvent(n,!0,!0):b=new CustomEvent(n,{bubbles:!0,cancelable:!0}),b.to=r||o,b.from=l||o,b.item=i||o,b.clone=s,b.oldIndex=u,b.newIndex=p,b.oldDraggableIndex=h,b.newDraggableIndex=m,b.originalEvent=w,b.pullMode=f?f.lastPutMode:void 0;var k=a(a({},g),z.getEventProperties(n,t));for(var x in k)b[x]=k[x];o&&o.dispatchEvent(b),v[y]&&v[y].call(t,b)}}(a({putSortable:ae,cloneEl:K,targetEl:Y,rootEl:J,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:ie},e))}var Y,V,U,J,Z,G,K,ee,te,oe,ne,ie,se,ae,re,le,ce,de,ue,pe,he,me,we,fe,ge,be=!1,ve=!1,ye=[],ke=!1,xe=!1,Ce=[],Ee=!1,Ae=[],Se=\"undefined\"!=typeof document,Te=h,Be=d||c?\"cssFloat\":\"float\",$e=Se&&!m&&!h&&\"draggable\"in document.createElement(\"div\"),De=function(){if(Se){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),_e=function(e,t){var o=E(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),i=D(e,0,t),s=D(e,1,t),a=i&&E(i),r=s&&E(s),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+B(i).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+B(s).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(i&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!s||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return i&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Be]||s&&\"none\"===o[Be]&&l+c>n)?\"vertical\":\"horizontal\"},Ie=function(e){function t(e,o){return function(n,i,s,a){var r=n.options.group.name&&i.options.group.name&&n.options.group.name===i.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,i,s,a),o)(n,i,s,a);var l=(o?n:i).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},Oe=function(){!De&&U&&E(U,\"display\",\"none\")},Le=function(){!De&&U&&E(U,\"display\",\"\")};Se&&!m&&document.addEventListener(\"click\",function(e){if(ve)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),ve=!1,!1},!0);var Pe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(i=e.clientX,s=e.clientY,ye.some(function(e){var t=e[j].options.emptyInsertThreshold;if(t&&!_(e)){var o=B(e),n=i>=o.left-t&&i\u003C=o.right+t,r=s>=o.top-t&&s\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[j]._onDragOver(o)}}var i,s,a},Me=function(e){Y&&Y.parentNode[j]._isOutsideThisEl(e.target)};function qe(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=i({},t),e[j]=this;var o,n,s={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return _e(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==qe.supportPointer&&\"PointerEvent\"in window&&(!p||h),emptyInsertThreshold:5};for(var r in z.initializePlugins(this,e,s),s)!(r in t)&&(t[r]=s[r]);for(var l in Ie(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&$e,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?f(e,\"pointerdown\",this._onTapStart):(f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),i(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==E(e,\"display\")&&e!==qe.ghost){n.push({target:e,rect:B(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=A(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var i=!1,s=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=B(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=A(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&P(l,r)&&!P(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),P(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(i=!0,s=Math.max(s,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),i?o=setTimeout(function(){\"function\"==typeof e&&e()},s):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){E(e,\"transition\",\"\"),E(e,\"transform\",\"\");var i=A(this.el),s=i&&i.a,a=i&&i.d,r=(t.left-o.left)\u002F(s||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,E(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),E(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),E(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){E(e,\"transition\",\"\"),E(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function Ne(e,t,o,n,i,s,a,r){var l,u,p=e[j],h=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=i||t,l.relatedRect=s||B(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),h&&(u=h.call(p,l,a)),u}function Fe(e){e.draggable=!1}function je(){Ee=!1}function He(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function Qe(e){return setTimeout(e,0)}function ze(e){return clearTimeout(e)}qe.prototype={constructor:qe,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(me=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,i=n.preventOnFilter,s=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Ae.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Ae.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(s)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||G===r)){if(te=I(r),ne=I(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return X({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),W(\"filter\",t,{evt:e}),void(i&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return X({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),W(\"filter\",t,{evt:e}),!0})))return void(i&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,i=this,s=i.el,a=i.options,r=s.ownerDocument;if(o&&!Y&&o.parentNode===s){var l=B(o);if(J=s,V=(Y=o).parentNode,Z=Y.nextSibling,G=o,se=a.group,qe.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){W(\"delayEnded\",i,{evt:e}),qe.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!u&&i.nativeDraggable&&(Y.draggable=!0),i._triggerDragStart(e,t),X({sortable:i,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){S(Y,e.trim(),Fe)}),f(r,\"dragover\",Pe),f(r,\"mousemove\",Pe),f(r,\"touchmove\",Pe),a.supportPointer?(f(r,\"pointerup\",i._onDrop),!this.nativeDraggable&&f(r,\"pointercancel\",i._onDrop)):(f(r,\"mouseup\",i._onDrop),f(r,\"touchend\",i._onDrop),f(r,\"touchcancel\",i._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),W(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(qe.eventCanceled)return void this._onDrop();a.supportPointer?(f(r,\"pointerup\",i._disableDelayedDrag),f(r,\"pointercancel\",i._disableDelayedDrag)):(f(r,\"mouseup\",i._disableDelayedDrag),f(r,\"touchend\",i._disableDelayedDrag),f(r,\"touchcancel\",i._disableDelayedDrag)),f(r,\"mousemove\",i._delayedDragTouchMoveHandler),f(r,\"touchmove\",i._delayedDragTouchMoveHandler),a.supportPointer&&f(r,\"pointermove\",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&Fe(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._disableDelayedDrag),g(e,\"touchend\",this._disableDelayedDrag),g(e,\"touchcancel\",this._disableDelayedDrag),g(e,\"pointerup\",this._disableDelayedDrag),g(e,\"pointercancel\",this._disableDelayedDrag),g(e,\"mousemove\",this._delayedDragTouchMoveHandler),g(e,\"touchmove\",this._delayedDragTouchMoveHandler),g(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?f(document,\"pointermove\",this._onTouchMove):f(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(f(Y,\"dragend\",this),f(J,\"dragstart\",this._onDragStart));try{document.selection?Qe(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(be=!1,J&&Y){W(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&f(document,\"dragover\",Me);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),qe.active=this,e&&this._appendGhost(),X({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,Oe();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[j]._isOutsideThisEl(e),t)do{if(t[j]&&t[j]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=v(t));Le()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,i=e.touches?e.touches[0]:e,s=U&&A(U,!0),a=U&&s&&s.a,r=U&&s&&s.d,l=Te&&ge&&O(ge),c=(i.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(i.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!qe.active&&!be){if(o&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(U){s?(s.e+=c-(ce||0),s.f+=d-(de||0)):s={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(s.a,\",\").concat(s.b,\",\").concat(s.c,\",\").concat(s.d,\",\").concat(s.e,\",\").concat(s.f,\")\");E(U,\"webkitTransform\",u),E(U,\"mozTransform\",u),E(U,\"msTransform\",u),E(U,\"transform\",u),ce=c,de=d,le=i}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!U){var e=this.options.fallbackOnBody?document.body:J,t=B(Y,!0,Te,!0,e),o=this.options;if(Te){for(ge=e;\"static\"===E(ge,\"position\")&&\"none\"===E(ge,\"transform\")&&ge!==document;)ge=ge.parentNode;ge!==document.body&&ge!==document.documentElement?(ge===document&&(ge=T()),t.top+=ge.scrollTop,t.left+=ge.scrollLeft):ge=T(),Ce=O(ge)}C(U=Y.cloneNode(!0),o.ghostClass,!1),C(U,o.fallbackClass,!0),C(U,o.dragClass,!0),E(U,\"transition\",\"\"),E(U,\"transform\",\"\"),E(U,\"box-sizing\",\"border-box\"),E(U,\"margin\",0),E(U,\"top\",t.top),E(U,\"left\",t.left),E(U,\"width\",t.width),E(U,\"height\",t.height),E(U,\"opacity\",\"0.8\"),E(U,\"position\",Te?\"absolute\":\"fixed\"),E(U,\"zIndex\",\"100000\"),E(U,\"pointerEvents\",\"none\"),qe.ghost=U,e.appendChild(U),E(U,\"transform-origin\",ue\u002FparseInt(U.style.width)*100+\"% \"+pe\u002FparseInt(U.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,i=o.options;W(\"dragStart\",this,{evt:e}),qe.eventCanceled?this._onDrop():(W(\"setupClone\",this),qe.eventCanceled||((K=N(Y)).removeAttribute(\"id\"),K.draggable=!1,K.style[\"will-change\"]=\"\",this._hideClone(),C(K,this.options.chosenClass,!1),qe.clone=K),o.cloneId=Qe(function(){W(\"clone\",o),qe.eventCanceled||(o.options.removeCloneOnHide||J.insertBefore(K,Y),o._hideClone(),X({sortable:o,name:\"clone\"}))}),!t&&C(Y,i.dragClass,!0),t?(ve=!0,o._loopId=setInterval(o._emulateDragOver,50)):(g(document,\"mouseup\",o._onDrop),g(document,\"touchend\",o._onDrop),g(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",i.setData&&i.setData.call(o,n,Y)),f(document,\"drop\",o),E(Y,\"transform\",\"translateZ(0)\")),be=!0,o._dragStartId=Qe(o._dragStarted.bind(o,t,e)),f(document,\"selectstart\",o),he=!0,window.getSelection().removeAllRanges(),p&&E(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,i,s=this.el,r=e.target,l=this.options,c=l.group,d=qe.active,u=se===c,p=l.sort,h=ae||d,m=this,w=!1;if(!Ee){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,s,!0),H(\"dragOver\"),qe.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||m._ignoreWhileAnimating===r)return z(!1);if(ve=!1,d&&!l.disabled&&(u?p||(n=V!==J):ae===this||(this.lastPutMode=se.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(i=\"vertical\"===this._getDirection(e,r),t=B(Y),H(\"dragOverValid\"),qe.eventCanceled)return w;if(n)return V=J,Q(),this._hideClone(),H(\"revert\"),qe.eventCanceled||(Z?J.insertBefore(Y,Z):J.appendChild(Y)),z(!0);var f=_(s,l.draggable);if(!f||function(e,t,o){var n=B(_(o.el,o.options.draggable)),i=F(o.el,o.options,U);return t?e.clientX>i.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>i.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,i,this)&&!f.animated){if(f===Y)return z(!1);if(f&&s===e.target&&(r=f),r&&(o=B(r)),!1!==Ne(J,s,Y,t,r,o,e,!!r))return Q(),f&&f.nextSibling?s.insertBefore(Y,f.nextSibling):s.appendChild(Y),V=s,R(),z(!0)}else if(f&&function(e,t,o){var n=B(D(o.el,0,o.options,!0)),i=F(o.el,o.options,U);return t?e.clientX\u003Ci.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Ci.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,i,this)){var g=D(s,0,l,!0);if(g===Y)return z(!1);if(o=B(r=g),!1!==Ne(J,s,Y,t,r,o,e,!1))return Q(),s.insertBefore(Y,g),V=s,R(),z(!0)}else if(r.parentNode===s){o=B(r);var b,v,k,x=Y.parentNode!==s,A=!function(e,t,o){var n=o?e.left:e.top,i=o?e.right:e.bottom,s=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||i===r||n+s\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,i),S=i?\"top\":\"left\",T=$(r,\"top\",\"top\")||$(Y,\"top\",\"top\"),O=T?T.scrollTop:void 0;if(me!==r&&(v=o[S],ke=!1,xe=!A&&l.invertSwap||x),b=function(e,t,o,n,i,s,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&fe\u003Cc*i){if(!ke&&(1===we?l>d+c*s\u002F2:l\u003Cu-c*s\u002F2)&&(ke=!0),ke)p=!0;else if(1===we?l\u003Cd+fe:l>u-fe)return-we}else if(l>d+c*(1-i)\u002F2&&l\u003Cu-c*(1-i)\u002F2)return function(e){return I(Y)\u003CI(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*s\u002F2||l>u-c*s\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,i,A?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,xe,me===r),0!==b){var L=I(Y);do{L-=b,k=V.children[L]}while(k&&(\"none\"===E(k,\"display\")||k===U))}if(0===b||k===r)return z(!1);me=r,we=b;var P=r.nextElementSibling,M=!1,N=Ne(J,s,Y,t,r,o,e,M=1===b);if(!1!==N)return 1!==N&&-1!==N||(M=1===N),Ee=!0,setTimeout(je,30),Q(),M&&!P?s.appendChild(Y):r.parentNode.insertBefore(Y,M?P:r),T&&q(T,0,O-T.scrollTop),V=Y.parentNode,void 0===v||xe||(fe=Math.abs(v-B(r)[S])),R(),z(!0)}if(s.contains(Y))return z(!1)}return!1}function H(l,c){W(l,m,a({evt:e,isOwner:u,axis:i?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:h,target:r,completed:z,onMove:function(o,n){return Ne(J,s,Y,t,o,B(o),e,n)},changed:R},c))}function Q(){H(\"dragOverAnimationCapture\"),m.captureAnimationState(),m!==h&&h.captureAnimationState()}function z(t){return H(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(m),m!==h&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==m&&m!==qe.active?ae=m:m===qe.active&&ae&&(ae=null),h===m&&(m._ignoreWhileAnimating=r),m.animateAll(function(){H(\"dragOverAnimationComplete\"),m._ignoreWhileAnimating=null}),m!==h&&(h.animateAll(),h._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===s&&!r.animated)&&(me=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[j]._isOutsideThisEl(e.target),!t&&Pe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function R(){oe=I(Y),ie=I(Y,l.draggable),X({sortable:m,name:\"change\",toEl:s,newIndex:oe,newDraggableIndex:ie,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){g(document,\"mousemove\",this._onTouchMove),g(document,\"touchmove\",this._onTouchMove),g(document,\"pointermove\",this._onTouchMove),g(document,\"dragover\",Pe),g(document,\"mousemove\",Pe),g(document,\"touchmove\",Pe)},_offUpEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._onDrop),g(e,\"touchend\",this._onDrop),g(e,\"pointerup\",this._onDrop),g(e,\"pointercancel\",this._onDrop),g(e,\"touchcancel\",this._onDrop),g(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=I(Y),ie=I(Y,o.draggable),W(\"drop\",this,{evt:e}),V=Y&&Y.parentNode,oe=I(Y),ie=I(Y,o.draggable),qe.eventCanceled||(be=!1,xe=!1,ke=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ze(this.cloneId),ze(this._dragStartId),this.nativeDraggable&&(g(document,\"drop\",this),g(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&E(document.body,\"user-select\",\"\"),E(Y,\"transform\",\"\"),e&&(he&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),U&&U.parentNode&&U.parentNode.removeChild(U),(J===V||ae&&\"clone\"!==ae.lastPutMode)&&K&&K.parentNode&&K.parentNode.removeChild(K),Y&&(this.nativeDraggable&&g(Y,\"dragend\",this),Fe(Y),Y.style[\"will-change\"]=\"\",he&&!be&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),X({sortable:this,name:\"unchoose\",toEl:V,newIndex:null,newDraggableIndex:null,originalEvent:e}),J!==V?(oe>=0&&(X({rootEl:V,name:\"add\",toEl:V,fromEl:J,originalEvent:e}),X({sortable:this,name:\"remove\",toEl:V,originalEvent:e}),X({rootEl:V,name:\"sort\",toEl:V,fromEl:J,originalEvent:e}),X({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(X({sortable:this,name:\"update\",toEl:V,originalEvent:e}),X({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),qe.active&&(null!=oe&&-1!==oe||(oe=te,ie=ne),X({sortable:this,name:\"end\",toEl:V,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){W(\"nulling\",this),J=Y=V=U=Z=K=G=ee=re=le=he=oe=ie=te=ne=me=we=ae=se=qe.dragged=qe.ghost=qe.clone=qe.active=null;var e=this.el;Ae.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Ae.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,i=o.length,s=this.options;n\u003Ci;n++)y(e=o[n],s.draggable,this.el,!1)&&t.push(e.getAttribute(s.dataIdAttr)||He(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var i=n.children[t];y(i,this.options.draggable,n,!1)&&(o[e]=i)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=z.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Ie(o)},destroy:function(){W(\"destroy\",this);var e=this.el;e[j]=null,g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart),g(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(W(\"hideClone\",this),qe.eventCanceled)return;E(K,\"display\",\"none\"),this.options.removeCloneOnHide&&K.parentNode&&K.parentNode.removeChild(K),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(W(\"showClone\",this),qe.eventCanceled)return;Y.parentNode!=J||this.options.group.revertClone?Z?J.insertBefore(K,Z):J.appendChild(K):J.insertBefore(K,Y),this.options.group.revertClone&&this.animate(Y,K),E(K,\"display\",\"\"),ee=!1}}else this._hideClone()}},Se&&f(document,\"touchmove\",function(e){(qe.active||be)&&e.cancelable&&e.preventDefault()}),qe.utils={on:f,off:g,css:E,find:S,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:M,closest:y,toggleClass:C,clone:N,index:I,nextTick:Qe,cancelNextTick:ze,detectDirection:_e,getChild:D,expando:j},qe.get=function(e){return e[j]},qe.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(qe.utils=a(a({},qe.utils),e.utils)),z.mount(e)})},qe.create=function(e,t){return new qe(e,t)},qe.version=\"1.15.7\";var Re,We,Xe,Ye,Ve,Ue,Je=[],Ze=!1;function Ge(){Je.forEach(function(e){clearInterval(e.pid)}),Je=[]}function Ke(){clearInterval(Ue)}var et=M(function(e,t,o,n){if(t.scroll){var i,s=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=T(),d=!1;We!==o&&(We=o,Ge(),Re=t.scroll,i=t.scrollFn,!0===Re&&(Re=L(o,!0)));var u=0,p=Re;do{var h=p,m=B(h),w=m.top,f=m.bottom,g=m.left,b=m.right,v=m.width,y=m.height,k=void 0,x=void 0,C=h.scrollWidth,A=h.scrollHeight,S=E(h),$=h.scrollLeft,D=h.scrollTop;h===c?(k=v\u003CC&&(\"auto\"===S.overflowX||\"scroll\"===S.overflowX||\"visible\"===S.overflowX),x=y\u003CA&&(\"auto\"===S.overflowY||\"scroll\"===S.overflowY||\"visible\"===S.overflowY)):(k=v\u003CC&&(\"auto\"===S.overflowX||\"scroll\"===S.overflowX),x=y\u003CA&&(\"auto\"===S.overflowY||\"scroll\"===S.overflowY));var _=k&&(Math.abs(b-s)\u003C=r&&$+v\u003CC)-(Math.abs(g-s)\u003C=r&&!!$),I=x&&(Math.abs(f-a)\u003C=r&&D+y\u003CA)-(Math.abs(w-a)\u003C=r&&!!D);if(!Je[u])for(var O=0;O\u003C=u;O++)Je[O]||(Je[O]={});Je[u].vx==_&&Je[u].vy==I&&Je[u].el===h||(Je[u].el=h,Je[u].vx=_,Je[u].vy=I,clearInterval(Je[u].pid),0==_&&0==I||(d=!0,Je[u].pid=setInterval(function(){n&&0===this.layer&&qe.active._onTouchMove(Ve);var t=Je[this.layer].vy?Je[this.layer].vy*l:0,o=Je[this.layer].vx?Je[this.layer].vx*l:0;\"function\"==typeof i&&\"continue\"!==i.call(qe.dragged.parentNode[j],o,t,e,Ve,Je[this.layer].el)||q(Je[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=L(p,!1)));Ze=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,i=e.activeSortable,s=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||i;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(s(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=D(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},i(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},i(nt,{pluginName:\"removeOnSpill\"}),qe.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?f(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?f(document,\"touchmove\",this._handleFallbackAutoScroll):f(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):(g(document,\"pointermove\",this._handleFallbackAutoScroll),g(document,\"touchmove\",this._handleFallbackAutoScroll),g(document,\"mousemove\",this._handleFallbackAutoScroll)),Ke(),Ge(),clearTimeout(k),k=void 0},nulling:function(){Ve=We=Re=Ze=Ue=Xe=Ye=null,Je.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,i=(e.touches?e.touches[0]:e).clientY,s=document.elementFromPoint(n,i);if(Ve=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,s,t);var a=L(s,!0);!Ze||Ue&&n===Xe&&i===Ye||(Ue&&Ke(),Ue=setInterval(function(){var s=L(document.elementFromPoint(n,i),!0);s!==a&&(a=s,Ge()),et(e,o.options,s,t)},10),Xe=n,Ye=i)}else{if(!this.options.bubbleScroll||L(s,!0)===T())return void Ge();et(e,this.options,L(s,!1),!1)}}},i(e,{pluginName:\"scroll\",initializeByDefault:!0})}),qe.mount(nt,ot);const it=qe},4316(e,t,o){\"use strict\";var n=o(5072),i=o.n(n),s=o(7825),a=o.n(s),r=o(7659),l=o.n(r),c=o(5056),d=o.n(c),u=o(540),p=o.n(u),h=o(1113),m=o.n(h),w=o(9455),f={};f.styleTagTransform=m(),f.setAttributes=d(),f.insert=l().bind(null,\"head\"),f.domAPI=a(),f.insertStyleElement=p(),i()(w.A,f),w.A&&w.A.locals&&w.A.locals},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var s={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=s[c]||0,u=\"\".concat(c,\" \").concat(d);s[c]=d+1;var p=o(u),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(h);else{var m=i(h,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:m,references:1})}a.push(u)}return a}function i(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,i){var s=n(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a\u003Cs.length;a++){var r=o(s[a]);t[r].references--}for(var l=n(e,i),c=0;c\u003Cs.length;c++){var d=o(s[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var i=void 0!==o.layer;i&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,i&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var s=o.sourceMap;s&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},i=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,i=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,i)}),s=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=s+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=s+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],h=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,f=e=>w(e)?e.toPromise():Promise.resolve(e),g=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${a.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(a.popup),x=()=>y(a.icon),C=()=>y(a.title),E=()=>y(a[\"html-container\"]),A=()=>y(a.image),S=()=>y(a[\"progress-steps\"]),T=()=>y(a[\"validation-message\"]),B=()=>v(`.${a.actions} .${a.confirm}`),$=()=>v(`.${a.actions} .${a.cancel}`),D=()=>v(`.${a.actions} .${a.deny}`),_=()=>v(`.${a.loader}`),I=()=>y(a.actions),O=()=>y(a.footer),L=()=>y(a[\"timer-progress-bar\"]),P=()=>y(a.close),M=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),i=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(i))].filter(e=>ee(e))},q=()=>j(document.body,a.shown)&&!j(document.body,a[\"toast-shown\"])&&!j(document.body,a[\"no-backdrop\"]),N=()=>{const e=k();return!!e&&j(e,a.toast)},F=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const i=o.querySelector(\"body\");i&&Array.from(i.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},j=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},H=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?W(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},Q=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},z=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},W=(e,t)=>{R(e,t,!0)},X=(e,t)=>{R(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&j(n,t))return n}},V=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},U=(e,t=\"flex\")=>{e&&(e.style.display=t)},J=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{K(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},G=(e,t,o,n)=>{const i=e.querySelector(t);i&&i.style.setProperty(o,n)},K=(e,t,o=\"flex\")=>{t?U(e,o):J(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=L();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},ie=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),se=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),X([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&W(o,a[\"no-transition\"]),F(o,ie),o.dataset.swal2Theme=e.theme;const i=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");i.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(W(b(),a.rtl),n.isRTL=!0)})(i),(()=>{const e=k();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),i=e.querySelector(`.${a.range} output`),s=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=se),o&&(o.onchange=se),s&&(s.onchange=se),r&&(r.onchange=se),l&&(l.oninput=se),n&&i&&(n.oninput=()=>{se(),i.value=n.value},n.onchange=()=>{se(),i.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&F(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):F(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=I(),n=_();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?U(o):J(o),H(o,t,\"actions\"),function(e,t,o){const n=B(),i=D(),s=$();n&&i&&s&&(pe(n,\"confirm\",o),pe(i,\"deny\",o),pe(s,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(W([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):X([e,t,o],a.styled)}(n,i,s,o),o.reverseButtons&&(o.toast?(e.insertBefore(s,n),e.insertBefore(i,n)):(e.insertBefore(s,t),e.insertBefore(i,t),e.insertBefore(n,t))))}(o,n,t),F(n,t.loaderHtml||\"\"),H(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);K(e,o[`show${n}Button`],\"inline-block\"),F(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],H(e,o,`${t}Button`)}const he=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||W([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?W(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),W(e,a.center)))}(o,t.position),function(e,t){t&&W(e,a[`grow-${t}`])}(o,t.grow),H(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],fe=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);U(t),e.inputAutoFocus&&setTimeout(()=>{z(o)})},ge=(e,t)=>{const o=k();if(!o)return;const n=Q(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&H(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),i=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=i,\"object\"==typeof o.customClass&&W(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return Y(t,a[e]||a.input)},xe=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:g(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return xe(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),i=o.querySelector(\"output\");return n&&(xe(n,t.inputValue),n.type=t.input,ye(n,e,t)),i&&xe(i,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");F(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=Q(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const i=e.querySelector(\"span\");if(i){const e=t.inputPlaceholder||t.inputLabel;e&&F(i,e)}return n},Ce.textarea=(e,t)=>{const o=e;xe(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(s=o,parseInt(window.getComputedStyle(s).marginLeft)+parseInt(window.getComputedStyle(s).marginRight)),i=k();var s;i&&(e>n?i.style.width=`${e}px`:V(i,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Ee=(e,t)=>{const o=E();o&&(Z(o),H(o,t,\"htmlContainer\"),t.html?(re(t.html,o),U(o,\"block\")):t.text?(o.textContent=t.text,U(o,\"block\")):J(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),i=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(ge(e,t.inputAttributes),n.className=a[e],i&&J(n))}),t.input&&(i&&fe(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&X(e,n);W(e,t.icon&&r[t.icon]),Be(e,t),Se(),H(e,t,\"icon\")},Se=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Te=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=$e(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=$e({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&F(e,n)},Be=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])G(e,o,\"background-color\",t.iconColor);G(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},$e=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let De=!1,_e=0,Ie=0,Oe=0,Le=0;const Pe=e=>{const t=k();if(!t)return;const o=x();if(e.target===t||o&&o.contains(e.target)){De=!0;const o=Ne(e);_e=o.clientX,Ie=o.clientY,Oe=parseInt(t.style.insetInlineStart)||0,Le=parseInt(t.style.insetBlockStart)||0,W(t,\"swal2-dragging\")}},Me=e=>{const t=k();if(t&&De){let{clientX:o,clientY:i}=Ne(e);const s=o-_e;t.style.insetInlineStart=`${Oe+(n.isRTL?-s:s)}px`,t.style.insetBlockStart=`${Le+(i-Ie)}px`}},qe=()=>{const e=k();De=!1,X(e,\"swal2-dragging\")},Ne=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Fe=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){V(o,\"width\",t.width),n.style.width=\"100%\";const e=_();e&&n.insertBefore(e,x())}else V(n,\"width\",t.width);V(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),J(T()),je(n,t),t.draggable&&!t.toast?(W(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Pe),document.body.addEventListener(\"mousemove\",Me),e.addEventListener(\"mouseup\",qe),e.addEventListener(\"touchstart\",Pe),document.body.addEventListener(\"touchmove\",Me),e.addEventListener(\"touchend\",qe)})(n)):(X(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Pe),document.body.removeEventListener(\"mousemove\",Me),e.removeEventListener(\"mouseup\",qe),e.removeEventListener(\"touchstart\",Pe),document.body.removeEventListener(\"touchmove\",Me),e.removeEventListener(\"touchend\",qe)})(n))}},je=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(W([document.documentElement,document.body],a[\"toast-shown\"]),W(e,a.toast)):W(e,a.modal),H(e,t,\"popup\"),\"string\"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,a[`icon-${t.icon}`])},He=e=>{const t=document.createElement(\"li\");return W(t,a[\"progress-step\"]),F(t,e),t},Qe=e=>{const t=document.createElement(\"li\");return W(t,a[\"progress-step-line\"]),e.progressStepsDistance&&V(t,\"width\",e.progressStepsDistance),t},ze=(e,t)=>{var o;Fe(0,t),he(0,t),((e,t)=>{const o=S();if(!o)return;const{progressSteps:n,currentProgressStep:i}=t;n&&0!==n.length&&void 0!==i?(U(o),o.textContent=\"\",i>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,s)=>{const r=He(e);if(o.appendChild(r),s===i&&W(r,a[\"active-progress-step\"]),s!==n.length-1){const e=Qe(t);o.appendChild(e)}})):J(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=x();if(n){if(o&&t.icon===o.icon)return Te(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void J(n);U(n),Te(n,t),Ae(n,t),W(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Se)}else J(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(U(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),V(o,\"width\",t.imageWidth),V(o,\"height\",t.imageHeight),o.className=a.image,H(o,t,\"image\")):J(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),K(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),H(o,t,\"title\"))})(0,t),((e,t)=>{const o=P();o&&(F(o,t.closeButtonHtml||\"\"),H(o,t,\"closeButton\"),K(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Ee(e,t),de(0,t),((e,t)=>{const o=O();o&&(Z(o),K(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),H(o,t,\"footer\"))})(0,t);const i=k();\"function\"==typeof t.didRender&&i&&t.didRender(i),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",i)},Re=()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},We=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Xe=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=M();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Ve=[\"ArrowRight\",\"ArrowDown\"],Ue=[\"ArrowLeft\",\"ArrowUp\"],Je=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ge(t):[...Ve,...Ue].includes(t.key)?Ke(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=Q(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ge=e=>{const t=e.target,o=M();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Ke=e=>{const t=I(),o=B(),n=D(),i=$();if(!(t&&o&&n&&i))return;const s=[o,n,i];if(document.activeElement instanceof HTMLElement&&!s.includes(document.activeElement))return;const a=Ve.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(We.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),it=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=st(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},st=e=>{const t=e.target,o=b(),n=E();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,s){N()?bt(e,s):(i(o).then(()=>bt(e,s)),Xe(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),q()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(j(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);X(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),X([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||j(t,o.hideClass.popup))return!1;X(t,o.showClass.popup),W(t,o.hideClass.popup);const n=b();return X(n,o.showClass.backdrop),W(n,o.hideClass.backdrop),ft(e,t,o),!0};function ht(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),ft=(e,t,o)=>{var i;const s=b(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(i=n.eventEmitter)||void 0===i||i.emit(\"willClose\",t),a&&s?gt(e,t,s,Boolean(o.returnFocus),o.didClose):s&&dt(e,s,Boolean(o.returnFocus),o.didClose)},gt=(e,t,o,i,s)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,i,s);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Ko,t=k(),!t)return;const o=_();N()?J(x()):yt(t,e),U(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=I(),n=_();o&&n&&(!t&&ee(B())&&(t=B()),U(o),t&&(J(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),W([e,o],a.loading))},kt=e=>e.checked?1:0,xt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,Et=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const i=(e,t,n)=>{const i=document.createElement(\"option\");i.value=n,F(i,t),i.selected=Tt(n,o.inputValue),e.appendChild(i)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>i(e,t[1],t[0]))}else i(n,o,t)}),n.focus()}(o,St(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],i=e[1],s=document.createElement(\"input\"),r=document.createElement(\"label\");s.type=\"radio\",s.name=a.radio,s.value=t,Tt(t,o.inputValue)&&(s.checked=!0);const l=document.createElement(\"span\");F(l,i),l.className=a.label,r.appendChild(s),r.appendChild(l),n.appendChild(r)});const i=n.querySelectorAll(\"input\");i.length&&i[0].focus()}(o,St(e),t)};w(t.inputOptions)||g(t.inputOptions)?(vt(B()),f(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(J(o),f(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,U(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",U(o),o.focus(),e.hideLoading()}))};const St=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=St(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=St(n)),t.push([o,n])}),t},Tt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),Bt=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),i=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return xt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?$t(e,i,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?Dt(e,i):Ot(e,i)},$t=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>f(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?Dt(e,t):Ot(e,t)})},Dt=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt(D()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>It(e,t))):e.close({isDenied:!0,value:t})},_t=(e,t)=>{e.close({isConfirmed:!0,value:t})},It=(e,t)=>{e.rejectPromise(t)},Ot=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preConfirm(t,o.validationMessage))).then(o=>{ee(T())||!1===o?(e.hideLoading(),mt(e)):_t(e,void 0===o?t:o)}).catch(t=>It(e,t))):_t(e,t)};function Lt(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);J(t.loader),N()?e.icon&&U(x()):Pt(t),X([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Pt=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?U(o[0],\"inline-block\"):!ee(B())&&!ee(D())&&!ee($())&&J(e.actions)};function Mt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?Q(t.popup,e.input):null}function qt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Nt(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Ft(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function jt(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Ht(){Nt(this.getInput(),!1)}function Qt(){Nt(this.getInput(),!0)}function zt(e){const t=me.domCache.get(this),o=me.innerParams.get(this);F(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&W(t.validationMessage,o.customClass.validationMessage),U(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),z(n),W(n,a.inputerror))}function Rt(){const e=me.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),X(t,a.inputerror))}const Wt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Xt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Vt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Ut=e=>Object.prototype.hasOwnProperty.call(Wt,e),Jt=e=>-1!==Xt.indexOf(e),Zt=e=>Yt[e],Gt=e=>{Ut(e)||d(`Unknown parameter \"${e}\"`)},Kt=e=>{Vt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&h(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Gt(t),e.toast&&Kt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||j(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const i=no(e),s=Object.assign({},n,i);to(s),t&&(t.dataset.swal2Theme=s.theme),ze(this,s),me.innerParams.set(this,s),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Jt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function io(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),so(this)):ao(this)}const so=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(me,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:io,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:jt,disableInput:Qt,disableLoading:Lt,enableButtons:Ft,enableInput:Ht,getInput:Mt,handleAwaitingPromise:mt,hideLoading:Lt,rejectPromise:ht,resetValidationMessage:Rt,showValidationMessage:zt,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(We.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const ho=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(We.backdrop)}},fo=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const go=()=>{if(n.timeout)return(()=>{const e=L();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var xo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||fo(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const i=e[n];\"string\"==typeof i||fo(i)?t[o]=i:void 0!==i&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof i}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=D())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:I,getCancelButton:$,getCloseButton:P,getConfirmButton:B,getContainer:b,getDenyButton:D,getFocusableElements:M,getFooter:O,getHtmlContainer:E,getIcon:x,getIconContent:()=>y(a[\"icon-content\"]),getImage:A,getInputLabel:()=>y(a[\"input-label\"]),getLoader:_,getPopup:k,getProgressSteps:S,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:L,getTitle:C,getValidationMessage:T,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Jt,isValidParameter:Ut,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:go,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?go():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const Eo=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{Oo(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Wt&&\"boolean\"==typeof Wt[o]?\"false\"!==n:o in Wt&&\"object\"==typeof Wt[o]?JSON.parse(n):n)}),t},So=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{Oo(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Bo=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(Oo(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},$o=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(Oo(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},Do=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(Oo(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{Oo(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},_o=(e,t)=>{const o={};for(const n in t){const i=t[n],s=e.querySelector(i);s&&(Oo(s,[]),o[i.replace(\u002F^swal-\u002F,\"\")]=s.innerHTML.trim())}return o},Io=e=>{const t=Eo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},Oo=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Lo=e=>{var t,o;const i=b(),s=k();if(!i||!s)return;\"function\"==typeof e.willOpen&&e.willOpen(s),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",s);const a=window.getComputedStyle(document.body).overflowY;if(No(i,s,e),setTimeout(()=>{Mo(i,s)},10),q()&&(qo(i,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),N()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(s))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",s)},Po=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Po),t.removeEventListener(\"transitionend\",Po),o.style.overflowY=\"auto\",X(o,a[\"no-transition\"]))},Mo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Po),t.addEventListener(\"transitionend\",Po)):e.style.overflowY=\"auto\"},qo=(e,t,o)=>{(()=>{if(nt&&!j(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",W(document.body,a.iosfix),it()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},No=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&W(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),U(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&W(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):U(t,\"grid\"),W([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&W([document.documentElement,document.body],a[\"height-auto\"])};var Fo=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),jo=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Ho(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=Fo),\"url\"===e.input&&(e.inputValidator=jo))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let Qo;var zo=new WeakMap;class Ro{constructor(...t){if(o(this,zo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;Qo=this;const n=Object.freeze(this.constructor.argsToParams(t));var i,s,a;this.params=n,this.isAwaitingPromise=!1,i=zo,s=this,a=this._main(Qo.params),i.set(e(i,s),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),q()&&ot()}n.currentInstance=Qo;const o=Xo(e,t);Ho(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const i=Yo(Qo);return ze(Qo,o),me.innerParams.set(Qo,o),Wo(Qo,i,o)}then(e){return t(zo,this).then(e)}finally(e){return t(zo,this).finally(e)}}const Wo=(e,t,o)=>new Promise((i,s)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,i),tt.swalPromiseReject.set(e,s),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?Bt(e,\"confirm\"):Ot(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Bt(e,\"deny\"):Dt(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(We.cancel)})(e,a)},t.closeButton.onclick=()=>{a(We.close)},((e,t,o)=>{e.toast?co(e,t,o):(ho(t),mo(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Xe(e),!t.toast){const n=e=>Je(t,e,o);e.keydownHandler=n;const i=t.keydownListenerCapture?window:k();if(i){e.keydownTarget=i,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?Et(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||g(t.inputValue))&&(vt(B()),At(e,t))})(e,o),Lo(o),Vo(n,o,a),Uo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Xo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Io(o),Object.assign(Ao(o),So(o),To(o),Bo(o),$o(o),Do(o),_o(o,Eo))})(e),n=Object.assign({},Wt,t,o,e);return n.showClass=Object.assign({},Wt.showClass,n.showClass),n.hideClass=Object.assign({},Wt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:k(),container:b(),actions:I(),confirmButton:B(),denyButton:D(),cancelButton:$(),loader:_(),closeButton:P(),validationMessage:T(),progressSteps:S()};return me.domCache.set(e,t),t},Vo=(e,t,o)=>{const n=L();J(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(U(n),H(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Uo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Jo(e)||Zo(e,t)||Ye(-1,1)):(h(\"allowEnterKey\"),void Go())},Jo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Go=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=jt,Ro.prototype.enableButtons=Ft,Ro.prototype.getInput=Mt,Ro.prototype.disableInput=Qt,Ro.prototype.enableInput=Ht,Ro.prototype.hideLoading=Lt,Ro.prototype.disableLoading=Lt,Ro.prototype.showValidationMessage=zt,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=ht,Ro.prototype.update=oo,Ro.prototype._destroy=io,Object.assign(Ro,xo),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(Qo&&Qo[e])return Qo[e](...t)}}),Ro.DismissReason=We,Ro.version=\"11.26.17\";const Ko=Ro;return Ko.default=Ko,Ko}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var i=document.createElement(\"button\");i.type=\"button\",i.setAttribute(\"aria-label\",\"Close\"),i.className=\"toast-close\",i.innerHTML=\"&#10006;\",i.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var s=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&s>360?e.insertAdjacentElement(\"afterbegin\",i):e.appendChild(i)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},i={top:15,bottom:15},s=document.getElementsByClassName(\"toastify\"),a=0;a\u003Cs.length;a++){e=!0===n(s[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=s[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(s[a].style[e]=i[e]+\"px\",i[e]+=r+15):!0===n(s[a],\"toastify-left\")?(s[a].style[e]=t[e]+\"px\",t[e]+=r+15):(s[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={id:n,exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(4223),t=o(2603),n=o(8465),i=o.n(n),s=o(246);const a=\"edit-question\";let r,l,c,d;class u{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){u._loadedEvents||(u._loadedEvents=!0,document.querySelectorAll(`${u.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),e.eventHandlers(\"click\",[{selector:u.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:u.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:u.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:u.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:u.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:u.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:u.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:u.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:u.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:u.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:o}=e;o.closest(`${u.selectors.elQuestionEditMain}`).querySelector(`${u.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",t=>{const o=t.target;e.toggleCollapse(t,o,u.selectors.elTriggerToggle)}),e.eventHandlers(\"keyup\",[{selector:u.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:u.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:u.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),e.eventHandlers(\"keydown\",[{selector:u.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),e.eventHandlers(\"change\",[{selector:u.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce())}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",t=>{const o=t.editor.id,n=window.tinymce.get(o);if(!n)return;if(\"content\"===o)return;const i=document.querySelector(`#wp-${o}-wrap`);i&&(i.classList.add(\"tmce-active\"),i.classList.remove(\"html-active\"));const s=document.getElementById(o);s.closest(`${u.selectors.elQuestionEditMain}`).dataset.questionId,n.settings.force_p_newlines=!1,n.settings.forced_root_block=\"\",n.settings.force_br_newlines=!0,n.settings.relative_urls=!1,n.settings.remove_script_host=!1,n.settings.convert_urls=!0,n.settings.document_base_url=lpData.site_url,n.on(\"change keyup\",e=>{s.value=n.getContent(),this.autoUpdateQuestion({e,target:s})}),n.on(\"blur\",e=>{}),n.on(\"focusin\",e=>{}),n.on(\"init\",()=>{n.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${u.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),n.on(\"setcontent\",e=>{const t=this.randomString(),o=n.dom.select(`.${u.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);o[0]&&o[0].focus(),n.dom.bind(o[0],\"input\",e=>{})}),n.on(\"selectionchange\",t=>{if(r=n.selection,r.getNode().classList.contains(`${u.selectors.elQuestionFibInput}`)){const t=r.getNode().dataset.id,i=r.getNode().textContent.trim();if(0===i.length){const o=n.id.replace(`${u.selectors.elQuestionFibInput}-`,\"\"),i=document.querySelector(`${u.selectors.elQuestionEditMain}[data-question-id=\"${o}\"]`).querySelector(`${u.selectors.elFibBlankOptions}`).querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);i&&e.lpShowHideEl(i,0)}else{const e=document.getElementById(o).closest(`${u.selectors.elAnswersConfig}`).querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);if(e){const t=e.querySelector(`${u.selectors.elFibOptionTitleInput}`);t&&(t.value=i)}}}}),n.on(\"Undo\",t=>{n.getContent();const o=n.selection.getNode();if(o.classList.contains(`${u.selectors.elQuestionFibInput}`)){const t=o.dataset.id,n=document.querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);n&&e.lpShowHideEl(n,1)}}),n.on(\"Redo\",e=>{})})}autoUpdateQuestion(e){let{e:o,target:n,key:i,value:s}=e;const r=n.closest(`${u.selectors.elAutoSaveQuestion}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(d),d=setTimeout(()=>{const e={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;t.W(o,n)},error:e=>{t.W(e,\"error\")},completed:()=>{}},o={action:\"update_question\",question_id:l,args:{id_url:a}};if(void 0===i){if(i=r.dataset.keyAutoSave,!i){if(!r.classList.contains(\"lp-editor-tinymce\"))return;const e=r.id;if(i=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${l}`,\"\").replace(\u002F-\u002Fg,\"_\"),!i)return}s=r.value}o[i]=s,window.lpAJAXG.fetchAJAX(o,e)},700)}createQuestionType(e){const{e:o,target:n}=e,i=n.closest(`${u.selectors.elBtnQuestionCreateType}`);if(!i)return;const s=i.closest(`${u.selectors.elQuestionEditMain}`);if(!s)return;const r=s.dataset.questionId,l=s.querySelector(`${u.selectors.elQuestionTypeNew}`);if(!l)return;const c=l.value.trim();if(!c){const e=l.dataset.messEmptyType;return void t.W(e,\"error\")}const d={success:e=>{const{message:o,status:n,data:i}=e;if(\"success\"!==n)throw`Error: ${o}`;{const{html_option_answers:e}=i;s.querySelector(`${u.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(s),t.W(o,n)}},error:e=>{t.W(e,\"error\")},completed:()=>{}},p={action:\"update_question\",question_id:r,question_type:c,args:{id_url:a}};window.lpAJAXG.fetchAJAX(p,d)}addQuestionAnswer(o){const{e:n,target:i}=o,s=i.closest(`${u.selectors.elQuestionAnswerItemAddNew}`);if(!s)return;n.preventDefault();const r=s.querySelector(`${u.selectors.elQuestionAnswerTitleNewInput}`);if(!r.value.trim()){const e=r.dataset.messEmptyTitle;return void t.W(e,\"error\")}const l=i.closest(`${u.selectors.elQuestionEditMain}`),c=l.querySelector(`${u.selectors.elQuestionAnswerItem}.clone`),d=c.cloneNode(!0),p=d.querySelector(`${u.selectors.elQuestionAnswerTitleInput}`);d.classList.remove(\"clone\"),e.lpShowHideEl(d,1),e.lpSetLoadingEl(d,1),c.insertAdjacentElement(\"beforebegin\",d);const h=r.value.trim();p.value=h,r.value=\"\";const m={success:o=>{const{message:n,status:i,data:s}=o;if(\"success\"!==i)throw`Error: ${n}`;{const{question_answer:t}=s;d.dataset.answerId=t.question_answer_id,e.lpSetLoadingEl(d,0);const o=this.getDataAnswersConfig(l);o.push(t),this.setDataAnswersConfig(l,o)}t.W(n,i)},error:e=>{d.remove(),t.W(e,\"error\")},completed:()=>{}},w={action:\"add_question_answer\",question_id:l.dataset.questionId,answer_title:h,args:{id_url:a}};window.lpAJAXG.fetchAJAX(w,m)}checkCanAddAnswer(e){const{e:t,target:o}=e,n=o.closest(u.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const i=n.closest(`${u.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;const s=i.querySelector(`${u.selectors.elBtnAddAnswer}`);s&&(n.value.trim()?s.classList.add(\"active\"):s.classList.remove(\"active\"))}autoUpdateAnswer(o){const{e:n,target:i}=o,s=i.closest(`${u.selectors.elAutoSaveAnswer}`);if(!s)return;const r=s.closest(`${u.selectors.elQuestionAnswerItem}`);clearTimeout(l),l=setTimeout(()=>{const o=s.closest(`${u.selectors.elQuestionEditMain}`),n=o.dataset.questionId,i=this.getDataAnswersConfig(o),l=o.querySelector(`${u.selectors.elAnswersConfig}`),c=structuredClone(i),d=l.querySelectorAll(`${u.selectors.elQuestionAnswerItem}:not(.clone)`),p={};d.forEach((e,t)=>{p[e.dataset.answerId]=t+1}),i.map((e,t)=>{const n=o.querySelector(`${u.selectors.elQuestionAnswerItem}[data-answer-id=\"${e.question_answer_id}\"]`),i=n.querySelector(`${u.selectors.elInputAnswerSetTrue}`),s=n.querySelector(`${u.selectors.elQuestionAnswerTitleInput}`);return s&&(e.title=s.value.trim()),i&&(i.checked?e.is_true=\"yes\":e.is_true=\"\"),p[e.question_answer_id]&&(e.order=p[e.question_answer_id]),e}),e.lpSetLoadingEl(r,1);const h={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;t.W(o,n)},error:e=>{c.forEach(e=>{const t=o.querySelector(`${u.selectors.elQuestionAnswerItem}[data-answer-id=\"${e.question_answer_id}\"]`).querySelector(`${u.selectors.elInputAnswerSetTrue}`);return\"yes\"===e.is_true&&(t.checked=!0),e}),t.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(r,0)}},m={action:\"update_question_answers_config\",question_id:n,answers:i,args:{id_url:a}};window.lpAJAXG.fetchAJAX(m,h)},700)}sortAbleQuestionAnswer(e){let t,o=0;e.querySelectorAll(`${u.selectors.elAnswersConfig}`).forEach(e=>{new s.Ay(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;o&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${u.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{o=1}})})}deleteQuestionAnswer(o){const{e:n,target:s}=o,r=s.closest(`${u.selectors.elBtnDeleteAnswer}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionAnswerItem}`);if(!l)return;const c=r.closest(`${u.selectors.elQuestionEditMain}`),d=c.dataset.questionId,p=l.dataset.answerId;d&&p&&i().fire({title:r.dataset.title||\"Are you sure?\",text:r.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(o=>{if(o.isConfirmed){e.lpSetLoadingEl(l,1);const o={success:e=>{const{message:o,status:n}=e;if(t.W(o,n),\"success\"===n){const e=parseInt(l.dataset.answerId);l.remove();const t=this.getDataAnswersConfig(c);if(t){const o=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(c,o)}}},error:e=>{t.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(l,0)}},n={action:\"delete_question_answer\",question_id:d,question_answer_id:p,args:{id_url:a}};window.lpAJAXG.fetchAJAX(n,o)}})}getDataAnswersConfig(e){const t=e.querySelector(`${u.selectors.elAnswersConfig}`);if(!t)return null;let o=t.dataset.answers||\"[]\";try{o=JSON.parse(o)}catch(e){o=[]}return o.meta_data||(o.meta_data={}),o}setDataAnswersConfig(e,t){const o=e.querySelector(`${u.selectors.elAnswersConfig}`);o&&(t&&\"object\"==typeof t||(t={}),o.dataset.answers=JSON.stringify(t))}fibInsertBlank=o=>{const{e:n,target:i}=o,s=i.closest(u.selectors.elBtnFibInsertBlank);if(!s)return;const a=s.dataset.defaultText,l=s.closest(u.selectors.elQuestionEditMain),c=l.dataset.questionId,d=s.dataset.messInserted,p=s.dataset.messRequireSelectText,h=`${u.selectors.elQuestionFibInput}-${c}`,m=this.randomString();let w;if(!r)return void t.W(p,\"error\");{const e=r.getNode();if(!e)return void t.W(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${h}\"]`))return void t.W(p,\"error\");if(e.classList.contains(`${u.selectors.elQuestionFibInput}`))return void t.W(d,\"error\");w=r.getContent(),0===w.length&&(w=a);const o=`\u003Cspan class=\"${u.selectors.elQuestionFibInput}\" data-id=\"${m}\">${w}\u003C\u002Fspan>`;r.setContent(o)}const f=this.getDataAnswersConfig(l);f.meta_data=f.meta_data||{},0===Object.keys(f.meta_data).length&&(f.meta_data={}),f.meta_data[m]={id:m,match_case:0,comparison:\"equal\",fill:w,index:1,open:!1},this.setDataAnswersConfig(l,f);const g=l.querySelector(`${u.selectors.elFibBlankOptions}`),b=l.querySelector(`${u.selectors.elFibBlankOptionItemClone}`),v=b.cloneNode(!0),y=g.querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).length,k=v.querySelector(`${u.selectors.elFibBlankOptionIndex}`),x=v.querySelector(`${u.selectors.elFibOptionTitleInput}`),C=v.querySelector(`${u.selectors.elFibOptionMatchCaseInput}`),E=v.querySelectorAll(`${u.selectors.elFibOptionComparisonInput}`);v.dataset.id=m,x.name=`${u.selectors.elFibOptionTitleInput}-${m}`,x.value=this.decodeHtml(w),k.textContent=y+1+\".\",C.name=`${u.selectors.elFibOptionMatchCaseInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),E.forEach(e=>{e.name=`${u.selectors.elFibOptionComparisonInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),b.insertAdjacentElement(\"beforebegin\",v),v.classList.remove(\"clone\"),e.lpShowHideEl(v,1);const A=l.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})};fibDeleteAllBlanks(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibDeleteAllBlanks}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=this.getDataAnswersConfig(a);i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){const t=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${r}`);t.dom.select(`.${u.selectors.elQuestionFibInput}`).forEach(e=>{t.dom.remove(e,!0)}),l.meta_data={},this.setDataAnswersConfig(a,l),a.querySelector(`${u.selectors.elFibBlankOptions}`).querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const o=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:o,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})}})}fibClearContent(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibClearAllContent}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=this.getDataAnswersConfig(a);i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){window.tinymce.get(`lp-question-fib-input-${r}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(a,l),a.querySelector(`${u.selectors.elFibBlankOptions}`).querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})}})}fibDeleteBlank(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibOptionDelete}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=(a.querySelector(`${u.selectors.elAnswersConfig}`),this.getDataAnswersConfig(a)),c=s.closest(`${u.selectors.elFibBlankOptionItem}`),d=c.dataset.id;i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){const t=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${r}`),o=t.dom.select(`.${u.selectors.elQuestionFibInput}[data-id=\"${d}\"]`);o[0]&&t.dom.remove(o[0],!0),c.remove(),l.meta_data=l.meta_data||{},l.meta_data[d]&&delete l.meta_data[d],this.setDataAnswersConfig(a,l);const n=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(c,1),this.fibSaveContent({e:null,target:n,callBackCompleted:()=>{e.lpSetLoadingEl(c,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:o}=e,n=o.closest(`${u.selectors.elFibOptionTitleInput}`);if(!n)return;const i=n.closest(`${u.selectors.elFibBlankOptionItem}`);if(!i)return;const s=n.closest(`${u.selectors.elQuestionEditMain}`);if(!s)return;const a=n.value.trim(),r=i.dataset.id,l=s.dataset.questionId,d=window.tinymce.get(`lp-question-fib-input-${l}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);d[0]&&(d[0].textContent=a),clearTimeout(c),c=setTimeout(()=>{const e=s.querySelector(`${u.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(o){const{e:n,target:i,callBackCompleted:s=null}=o,r=i.closest(`${u.selectors.elBtnFibSaveContent}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionEditMain}`),c=l.dataset.questionId,d=this.getDataAnswersConfig(l);if(!d)return;const p=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${c}`);d.title=p.getContent();const h=l.querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`);h&&h.forEach(e=>{const t=e.dataset.id,o=e.querySelector(`${u.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${u.selectors.elFibOptionComparisonInput}:checked`);d.meta_data[t].match_case=o.checked?1:0,d.meta_data[t].comparison=n.value}),s||e.lpSetLoadingEl(r,1);const m={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;this.setDataAnswersConfig(l,d),t.W(o,n)},error:e=>{t.W(e,\"error\")},completed:()=>{s&&\"function\"==typeof s?s():e.lpSetLoadingEl(r,0)}},w={action:\"update_question_answers_config\",question_id:c,answers:d,args:{id_url:a}};window.lpAJAXG.fetchAJAX(w,m)}fibShowHideMatchCaseOption(t){const{e:o,target:n}=t,i=n.closest(`${u.selectors.elFibOptionMatchCaseInput}`);if(!i)return;const s=i.closest(`${u.selectors.elQuestionFibOptionDetail}`),a=s.querySelector(`${u.selectors.elFibOptionMatchCaseWrap}`);s&&a&&(i.checked?e.lpShowHideEl(a,1):e.lpShowHideEl(a,0),i.closest(`${u.selectors.elQuestionEditMain}`).querySelector(`${u.selectors.elBtnFibSaveContent}`).click())}randomString(e=10){let t=\"\";for(let o=0;o\u003Ce;o++)t+=\"abcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(36*Math.random()));return t}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const p=new u;e.lpOnElementReady(u.selectors.elEditQuestionWrap,e=>{const t=u.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&p.init()})})()})();\n\\ No newline at end of file\n+(()=>{var e={2603(e,t,o){\"use strict\";o.d(t,{W:()=>a});var n=o(7736),i=o.n(n);o(4316);const s={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},a=(e,t=\"success\",o)=>{let n=s;o&&(n={...n,...o}),new(i())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()}},4223(e,t,o){\"use strict\";o.d(t,{eventHandlers:()=>c,lpOnElementReady:()=>s,lpSetLoadingEl:()=>r,lpShowHideEl:()=>a,toggleCollapse:()=>l});const n=\"lp-hidden\",i=\"loading\",s=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const i=document.querySelector(e);i&&(n.disconnect(),t(i))});n.observe(document.documentElement,{childList:!0,subtree:!0})},a=(e,t=0)=>{e&&(t?e.classList.remove(n):e.classList.add(n))},r=(e,t)=>{e&&(t?e.classList.add(i):e.classList.remove(i))},l=(e,t,o=\"\",n=[],i)=>{if(o||(o=\".lp-trigger-toggle\"),n&&n.length>0)for(const e of n)if(t.closest(e))return;const s=t.closest(o);if(!s)return;const a=s.closest(\".lp-section-toggle\");a&&(a.classList.toggle(\"lp-collapse\"),\"function\"==typeof i&&i(a))},c=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let i={e:o,target:n};t.forEach(t=>{i={...i,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(i)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](i):t.callBack(i))})})}},9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),i=o.n(n),s=o(6314),a=o.n(s)()(i());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,i,s){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==s&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=s),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),i&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=i):d[4]=\"\".concat(i)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},246(e,t,o){\"use strict\";function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},i.apply(null,arguments)}function s(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?s(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):s(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}o.d(t,{Ay:()=>it});var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),h=l(\u002FiP(ad|od|hone)\u002Fi),m=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function f(e,t,o){e.addEventListener(t,o,!c&&w)}function g(e,t,o){e.removeEventListener(t,o,!c&&w)}function b(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function v(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&b(e,t):b(e,t))||n&&e===o)return e;if(e===o)break}while(e=v(e))}return null}var k,x=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(x,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(x,\" \")}}function E(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function A(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=E(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(o)}function S(e,t,o){if(e){var n=e.getElementsByTagName(t),i=0,s=n.length;if(o)for(;i\u003Cs;i++)o(n[i],i);return n}return[]}function T(){return document.scrollingElement||document.documentElement}function B(e,t,o,n,i){if(e.getBoundingClientRect||e===window){var s,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==T()?(a=(s=e.getBoundingClientRect()).top,r=s.left,l=s.bottom,d=s.right,u=s.height,p=s.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(i=i||e.parentNode,!c))do{if(i&&i.getBoundingClientRect&&(\"none\"!==E(i,\"transform\")||o&&\"static\"!==E(i,\"position\"))){var h=i.getBoundingClientRect();a-=h.top+parseInt(E(i,\"border-top-width\")),r-=h.left+parseInt(E(i,\"border-left-width\")),l=a+s.height,d=r+s.width;break}}while(i=i.parentNode);if(n&&e!==window){var m=A(i||e),w=m&&m.a,f=m&&m.d;m&&(l=(a\u002F=f)+(u\u002F=f),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function $(e,t,o){for(var n=L(e,!0),i=B(e)[t];n;){var s=B(n)[o];if(!(\"top\"===o||\"left\"===o?i>=s:i\u003C=s))return n;if(n===T())break;n=L(n,!1)}return!1}function D(e,t,o,n){for(var i=0,s=0,a=e.children;s\u003Ca.length;){if(\"none\"!==a[s].style.display&&a[s]!==qe.ghost&&(n||a[s]!==qe.dragged)&&y(a[s],o.draggable,e,!1)){if(i===t)return a[s];i++}s++}return null}function _(e,t){for(var o=e.lastElementChild;o&&(o===qe.ghost||\"none\"===E(o,\"display\")||t&&!b(o,t));)o=o.previousElementSibling;return o||null}function I(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===qe.clone||t&&!b(e,t)||o++;return o}function O(e){var t=0,o=0,n=T();if(e)do{var i=A(e),s=i.a,a=i.d;t+=e.scrollLeft*s,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function L(e,t){if(!e||!e.getBoundingClientRect)return T();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var i=E(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==i.overflowX||\"scroll\"==i.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==i.overflowY||\"scroll\"==i.overflowY)){if(!o.getBoundingClientRect||o===document.body)return T();if(n||t)return o;n=!0}}}while(o=o.parentNode);return T()}function P(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function M(e,t){return function(){if(!k){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),k=setTimeout(function(){k=void 0},t)}}}function q(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function N(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function F(e,t,o){var n={};return Array.from(e.children).forEach(function(i){var s,a,r,l;if(y(i,t.draggable,e,!1)&&!i.animated&&i!==o){var c=B(i);n.left=Math.min(null!==(s=n.left)&&void 0!==s?s:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var j=\"Sortable\"+(new Date).getTime();var H=[],Q={initializeByDefault:!0},z={mount:function(e){for(var t in Q)Q.hasOwnProperty(t)&&!(t in e)&&(e[t]=Q[t]);H.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),H.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var i=e+\"Global\";H.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][i]&&t[n.pluginName][i](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var s in H.forEach(function(n){var s=n.pluginName;if(e.options[s]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[s]=a,i(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(s)){var a=this.modifyOption(e,s,e.options[s]);void 0!==a&&(e.options[s]=a)}},getEventProperties:function(e,t){var o={};return H.forEach(function(n){\"function\"==typeof n.eventProperties&&i(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return H.forEach(function(i){e[i.pluginName]&&i.optionListeners&&\"function\"==typeof i.optionListeners[t]&&(n=i.optionListeners[t].call(e[i.pluginName],o))}),n}};var R=[\"evt\"],W=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,i=function(e,t){if(null==e)return{};var o,n,i=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n\u003Cs.length;n++)o=s[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}(o,R);z.pluginEvent.bind(qe)(e,t,a({dragEl:Y,parentEl:V,ghostEl:U,rootEl:J,nextEl:Z,lastDownEl:G,cloneEl:K,cloneHidden:ee,dragStarted:he,putSortable:ae,activeSortable:qe.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:ie,hideGhostForTarget:Oe,unhideGhostForTarget:Le,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){X({sortable:t,name:e,originalEvent:n})}},i))};function X(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,i=e.targetEl,s=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,h=e.oldDraggableIndex,m=e.newDraggableIndex,w=e.originalEvent,f=e.putSortable,g=e.extraEventProperties;if(t=t||o&&o[j]){var b,v=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(b=document.createEvent(\"Event\")).initEvent(n,!0,!0):b=new CustomEvent(n,{bubbles:!0,cancelable:!0}),b.to=r||o,b.from=l||o,b.item=i||o,b.clone=s,b.oldIndex=u,b.newIndex=p,b.oldDraggableIndex=h,b.newDraggableIndex=m,b.originalEvent=w,b.pullMode=f?f.lastPutMode:void 0;var k=a(a({},g),z.getEventProperties(n,t));for(var x in k)b[x]=k[x];o&&o.dispatchEvent(b),v[y]&&v[y].call(t,b)}}(a({putSortable:ae,cloneEl:K,targetEl:Y,rootEl:J,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:ie},e))}var Y,V,U,J,Z,G,K,ee,te,oe,ne,ie,se,ae,re,le,ce,de,ue,pe,he,me,we,fe,ge,be=!1,ve=!1,ye=[],ke=!1,xe=!1,Ce=[],Ee=!1,Ae=[],Se=\"undefined\"!=typeof document,Te=h,Be=d||c?\"cssFloat\":\"float\",$e=Se&&!m&&!h&&\"draggable\"in document.createElement(\"div\"),De=function(){if(Se){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),_e=function(e,t){var o=E(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),i=D(e,0,t),s=D(e,1,t),a=i&&E(i),r=s&&E(s),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+B(i).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+B(s).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(i&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!s||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return i&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Be]||s&&\"none\"===o[Be]&&l+c>n)?\"vertical\":\"horizontal\"},Ie=function(e){function t(e,o){return function(n,i,s,a){var r=n.options.group.name&&i.options.group.name&&n.options.group.name===i.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,i,s,a),o)(n,i,s,a);var l=(o?n:i).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},Oe=function(){!De&&U&&E(U,\"display\",\"none\")},Le=function(){!De&&U&&E(U,\"display\",\"\")};Se&&!m&&document.addEventListener(\"click\",function(e){if(ve)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),ve=!1,!1},!0);var Pe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(i=e.clientX,s=e.clientY,ye.some(function(e){var t=e[j].options.emptyInsertThreshold;if(t&&!_(e)){var o=B(e),n=i>=o.left-t&&i\u003C=o.right+t,r=s>=o.top-t&&s\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[j]._onDragOver(o)}}var i,s,a},Me=function(e){Y&&Y.parentNode[j]._isOutsideThisEl(e.target)};function qe(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=i({},t),e[j]=this;var o,n,s={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return _e(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==qe.supportPointer&&\"PointerEvent\"in window&&(!p||h),emptyInsertThreshold:5};for(var r in z.initializePlugins(this,e,s),s)!(r in t)&&(t[r]=s[r]);for(var l in Ie(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&$e,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?f(e,\"pointerdown\",this._onTapStart):(f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),i(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==E(e,\"display\")&&e!==qe.ghost){n.push({target:e,rect:B(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=A(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var i=!1,s=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=B(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=A(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&P(l,r)&&!P(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),P(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(i=!0,s=Math.max(s,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),i?o=setTimeout(function(){\"function\"==typeof e&&e()},s):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){E(e,\"transition\",\"\"),E(e,\"transform\",\"\");var i=A(this.el),s=i&&i.a,a=i&&i.d,r=(t.left-o.left)\u002F(s||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,E(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),E(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),E(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){E(e,\"transition\",\"\"),E(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function Ne(e,t,o,n,i,s,a,r){var l,u,p=e[j],h=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=i||t,l.relatedRect=s||B(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),h&&(u=h.call(p,l,a)),u}function Fe(e){e.draggable=!1}function je(){Ee=!1}function He(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function Qe(e){return setTimeout(e,0)}function ze(e){return clearTimeout(e)}qe.prototype={constructor:qe,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(me=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,i=n.preventOnFilter,s=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Ae.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Ae.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(s)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||G===r)){if(te=I(r),ne=I(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return X({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),W(\"filter\",t,{evt:e}),void(i&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return X({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),W(\"filter\",t,{evt:e}),!0})))return void(i&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,i=this,s=i.el,a=i.options,r=s.ownerDocument;if(o&&!Y&&o.parentNode===s){var l=B(o);if(J=s,V=(Y=o).parentNode,Z=Y.nextSibling,G=o,se=a.group,qe.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){W(\"delayEnded\",i,{evt:e}),qe.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!u&&i.nativeDraggable&&(Y.draggable=!0),i._triggerDragStart(e,t),X({sortable:i,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){S(Y,e.trim(),Fe)}),f(r,\"dragover\",Pe),f(r,\"mousemove\",Pe),f(r,\"touchmove\",Pe),a.supportPointer?(f(r,\"pointerup\",i._onDrop),!this.nativeDraggable&&f(r,\"pointercancel\",i._onDrop)):(f(r,\"mouseup\",i._onDrop),f(r,\"touchend\",i._onDrop),f(r,\"touchcancel\",i._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),W(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(qe.eventCanceled)return void this._onDrop();a.supportPointer?(f(r,\"pointerup\",i._disableDelayedDrag),f(r,\"pointercancel\",i._disableDelayedDrag)):(f(r,\"mouseup\",i._disableDelayedDrag),f(r,\"touchend\",i._disableDelayedDrag),f(r,\"touchcancel\",i._disableDelayedDrag)),f(r,\"mousemove\",i._delayedDragTouchMoveHandler),f(r,\"touchmove\",i._delayedDragTouchMoveHandler),a.supportPointer&&f(r,\"pointermove\",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&Fe(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._disableDelayedDrag),g(e,\"touchend\",this._disableDelayedDrag),g(e,\"touchcancel\",this._disableDelayedDrag),g(e,\"pointerup\",this._disableDelayedDrag),g(e,\"pointercancel\",this._disableDelayedDrag),g(e,\"mousemove\",this._delayedDragTouchMoveHandler),g(e,\"touchmove\",this._delayedDragTouchMoveHandler),g(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?f(document,\"pointermove\",this._onTouchMove):f(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(f(Y,\"dragend\",this),f(J,\"dragstart\",this._onDragStart));try{document.selection?Qe(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(be=!1,J&&Y){W(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&f(document,\"dragover\",Me);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),qe.active=this,e&&this._appendGhost(),X({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,Oe();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[j]._isOutsideThisEl(e),t)do{if(t[j]&&t[j]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=v(t));Le()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,i=e.touches?e.touches[0]:e,s=U&&A(U,!0),a=U&&s&&s.a,r=U&&s&&s.d,l=Te&&ge&&O(ge),c=(i.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(i.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!qe.active&&!be){if(o&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(U){s?(s.e+=c-(ce||0),s.f+=d-(de||0)):s={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(s.a,\",\").concat(s.b,\",\").concat(s.c,\",\").concat(s.d,\",\").concat(s.e,\",\").concat(s.f,\")\");E(U,\"webkitTransform\",u),E(U,\"mozTransform\",u),E(U,\"msTransform\",u),E(U,\"transform\",u),ce=c,de=d,le=i}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!U){var e=this.options.fallbackOnBody?document.body:J,t=B(Y,!0,Te,!0,e),o=this.options;if(Te){for(ge=e;\"static\"===E(ge,\"position\")&&\"none\"===E(ge,\"transform\")&&ge!==document;)ge=ge.parentNode;ge!==document.body&&ge!==document.documentElement?(ge===document&&(ge=T()),t.top+=ge.scrollTop,t.left+=ge.scrollLeft):ge=T(),Ce=O(ge)}C(U=Y.cloneNode(!0),o.ghostClass,!1),C(U,o.fallbackClass,!0),C(U,o.dragClass,!0),E(U,\"transition\",\"\"),E(U,\"transform\",\"\"),E(U,\"box-sizing\",\"border-box\"),E(U,\"margin\",0),E(U,\"top\",t.top),E(U,\"left\",t.left),E(U,\"width\",t.width),E(U,\"height\",t.height),E(U,\"opacity\",\"0.8\"),E(U,\"position\",Te?\"absolute\":\"fixed\"),E(U,\"zIndex\",\"100000\"),E(U,\"pointerEvents\",\"none\"),qe.ghost=U,e.appendChild(U),E(U,\"transform-origin\",ue\u002FparseInt(U.style.width)*100+\"% \"+pe\u002FparseInt(U.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,i=o.options;W(\"dragStart\",this,{evt:e}),qe.eventCanceled?this._onDrop():(W(\"setupClone\",this),qe.eventCanceled||((K=N(Y)).removeAttribute(\"id\"),K.draggable=!1,K.style[\"will-change\"]=\"\",this._hideClone(),C(K,this.options.chosenClass,!1),qe.clone=K),o.cloneId=Qe(function(){W(\"clone\",o),qe.eventCanceled||(o.options.removeCloneOnHide||J.insertBefore(K,Y),o._hideClone(),X({sortable:o,name:\"clone\"}))}),!t&&C(Y,i.dragClass,!0),t?(ve=!0,o._loopId=setInterval(o._emulateDragOver,50)):(g(document,\"mouseup\",o._onDrop),g(document,\"touchend\",o._onDrop),g(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",i.setData&&i.setData.call(o,n,Y)),f(document,\"drop\",o),E(Y,\"transform\",\"translateZ(0)\")),be=!0,o._dragStartId=Qe(o._dragStarted.bind(o,t,e)),f(document,\"selectstart\",o),he=!0,window.getSelection().removeAllRanges(),p&&E(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,i,s=this.el,r=e.target,l=this.options,c=l.group,d=qe.active,u=se===c,p=l.sort,h=ae||d,m=this,w=!1;if(!Ee){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,s,!0),H(\"dragOver\"),qe.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||m._ignoreWhileAnimating===r)return z(!1);if(ve=!1,d&&!l.disabled&&(u?p||(n=V!==J):ae===this||(this.lastPutMode=se.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(i=\"vertical\"===this._getDirection(e,r),t=B(Y),H(\"dragOverValid\"),qe.eventCanceled)return w;if(n)return V=J,Q(),this._hideClone(),H(\"revert\"),qe.eventCanceled||(Z?J.insertBefore(Y,Z):J.appendChild(Y)),z(!0);var f=_(s,l.draggable);if(!f||function(e,t,o){var n=B(_(o.el,o.options.draggable)),i=F(o.el,o.options,U);return t?e.clientX>i.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>i.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,i,this)&&!f.animated){if(f===Y)return z(!1);if(f&&s===e.target&&(r=f),r&&(o=B(r)),!1!==Ne(J,s,Y,t,r,o,e,!!r))return Q(),f&&f.nextSibling?s.insertBefore(Y,f.nextSibling):s.appendChild(Y),V=s,R(),z(!0)}else if(f&&function(e,t,o){var n=B(D(o.el,0,o.options,!0)),i=F(o.el,o.options,U);return t?e.clientX\u003Ci.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Ci.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,i,this)){var g=D(s,0,l,!0);if(g===Y)return z(!1);if(o=B(r=g),!1!==Ne(J,s,Y,t,r,o,e,!1))return Q(),s.insertBefore(Y,g),V=s,R(),z(!0)}else if(r.parentNode===s){o=B(r);var b,v,k,x=Y.parentNode!==s,A=!function(e,t,o){var n=o?e.left:e.top,i=o?e.right:e.bottom,s=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||i===r||n+s\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,i),S=i?\"top\":\"left\",T=$(r,\"top\",\"top\")||$(Y,\"top\",\"top\"),O=T?T.scrollTop:void 0;if(me!==r&&(v=o[S],ke=!1,xe=!A&&l.invertSwap||x),b=function(e,t,o,n,i,s,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&fe\u003Cc*i){if(!ke&&(1===we?l>d+c*s\u002F2:l\u003Cu-c*s\u002F2)&&(ke=!0),ke)p=!0;else if(1===we?l\u003Cd+fe:l>u-fe)return-we}else if(l>d+c*(1-i)\u002F2&&l\u003Cu-c*(1-i)\u002F2)return function(e){return I(Y)\u003CI(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*s\u002F2||l>u-c*s\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,i,A?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,xe,me===r),0!==b){var L=I(Y);do{L-=b,k=V.children[L]}while(k&&(\"none\"===E(k,\"display\")||k===U))}if(0===b||k===r)return z(!1);me=r,we=b;var P=r.nextElementSibling,M=!1,N=Ne(J,s,Y,t,r,o,e,M=1===b);if(!1!==N)return 1!==N&&-1!==N||(M=1===N),Ee=!0,setTimeout(je,30),Q(),M&&!P?s.appendChild(Y):r.parentNode.insertBefore(Y,M?P:r),T&&q(T,0,O-T.scrollTop),V=Y.parentNode,void 0===v||xe||(fe=Math.abs(v-B(r)[S])),R(),z(!0)}if(s.contains(Y))return z(!1)}return!1}function H(l,c){W(l,m,a({evt:e,isOwner:u,axis:i?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:h,target:r,completed:z,onMove:function(o,n){return Ne(J,s,Y,t,o,B(o),e,n)},changed:R},c))}function Q(){H(\"dragOverAnimationCapture\"),m.captureAnimationState(),m!==h&&h.captureAnimationState()}function z(t){return H(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(m),m!==h&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==m&&m!==qe.active?ae=m:m===qe.active&&ae&&(ae=null),h===m&&(m._ignoreWhileAnimating=r),m.animateAll(function(){H(\"dragOverAnimationComplete\"),m._ignoreWhileAnimating=null}),m!==h&&(h.animateAll(),h._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===s&&!r.animated)&&(me=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[j]._isOutsideThisEl(e.target),!t&&Pe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function R(){oe=I(Y),ie=I(Y,l.draggable),X({sortable:m,name:\"change\",toEl:s,newIndex:oe,newDraggableIndex:ie,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){g(document,\"mousemove\",this._onTouchMove),g(document,\"touchmove\",this._onTouchMove),g(document,\"pointermove\",this._onTouchMove),g(document,\"dragover\",Pe),g(document,\"mousemove\",Pe),g(document,\"touchmove\",Pe)},_offUpEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._onDrop),g(e,\"touchend\",this._onDrop),g(e,\"pointerup\",this._onDrop),g(e,\"pointercancel\",this._onDrop),g(e,\"touchcancel\",this._onDrop),g(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=I(Y),ie=I(Y,o.draggable),W(\"drop\",this,{evt:e}),V=Y&&Y.parentNode,oe=I(Y),ie=I(Y,o.draggable),qe.eventCanceled||(be=!1,xe=!1,ke=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ze(this.cloneId),ze(this._dragStartId),this.nativeDraggable&&(g(document,\"drop\",this),g(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&E(document.body,\"user-select\",\"\"),E(Y,\"transform\",\"\"),e&&(he&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),U&&U.parentNode&&U.parentNode.removeChild(U),(J===V||ae&&\"clone\"!==ae.lastPutMode)&&K&&K.parentNode&&K.parentNode.removeChild(K),Y&&(this.nativeDraggable&&g(Y,\"dragend\",this),Fe(Y),Y.style[\"will-change\"]=\"\",he&&!be&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),X({sortable:this,name:\"unchoose\",toEl:V,newIndex:null,newDraggableIndex:null,originalEvent:e}),J!==V?(oe>=0&&(X({rootEl:V,name:\"add\",toEl:V,fromEl:J,originalEvent:e}),X({sortable:this,name:\"remove\",toEl:V,originalEvent:e}),X({rootEl:V,name:\"sort\",toEl:V,fromEl:J,originalEvent:e}),X({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(X({sortable:this,name:\"update\",toEl:V,originalEvent:e}),X({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),qe.active&&(null!=oe&&-1!==oe||(oe=te,ie=ne),X({sortable:this,name:\"end\",toEl:V,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){W(\"nulling\",this),J=Y=V=U=Z=K=G=ee=re=le=he=oe=ie=te=ne=me=we=ae=se=qe.dragged=qe.ghost=qe.clone=qe.active=null;var e=this.el;Ae.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Ae.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,i=o.length,s=this.options;n\u003Ci;n++)y(e=o[n],s.draggable,this.el,!1)&&t.push(e.getAttribute(s.dataIdAttr)||He(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var i=n.children[t];y(i,this.options.draggable,n,!1)&&(o[e]=i)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=z.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Ie(o)},destroy:function(){W(\"destroy\",this);var e=this.el;e[j]=null,g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart),g(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(W(\"hideClone\",this),qe.eventCanceled)return;E(K,\"display\",\"none\"),this.options.removeCloneOnHide&&K.parentNode&&K.parentNode.removeChild(K),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(W(\"showClone\",this),qe.eventCanceled)return;Y.parentNode!=J||this.options.group.revertClone?Z?J.insertBefore(K,Z):J.appendChild(K):J.insertBefore(K,Y),this.options.group.revertClone&&this.animate(Y,K),E(K,\"display\",\"\"),ee=!1}}else this._hideClone()}},Se&&f(document,\"touchmove\",function(e){(qe.active||be)&&e.cancelable&&e.preventDefault()}),qe.utils={on:f,off:g,css:E,find:S,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:M,closest:y,toggleClass:C,clone:N,index:I,nextTick:Qe,cancelNextTick:ze,detectDirection:_e,getChild:D,expando:j},qe.get=function(e){return e[j]},qe.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(qe.utils=a(a({},qe.utils),e.utils)),z.mount(e)})},qe.create=function(e,t){return new qe(e,t)},qe.version=\"1.15.7\";var Re,We,Xe,Ye,Ve,Ue,Je=[],Ze=!1;function Ge(){Je.forEach(function(e){clearInterval(e.pid)}),Je=[]}function Ke(){clearInterval(Ue)}var et=M(function(e,t,o,n){if(t.scroll){var i,s=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=T(),d=!1;We!==o&&(We=o,Ge(),Re=t.scroll,i=t.scrollFn,!0===Re&&(Re=L(o,!0)));var u=0,p=Re;do{var h=p,m=B(h),w=m.top,f=m.bottom,g=m.left,b=m.right,v=m.width,y=m.height,k=void 0,x=void 0,C=h.scrollWidth,A=h.scrollHeight,S=E(h),$=h.scrollLeft,D=h.scrollTop;h===c?(k=v\u003CC&&(\"auto\"===S.overflowX||\"scroll\"===S.overflowX||\"visible\"===S.overflowX),x=y\u003CA&&(\"auto\"===S.overflowY||\"scroll\"===S.overflowY||\"visible\"===S.overflowY)):(k=v\u003CC&&(\"auto\"===S.overflowX||\"scroll\"===S.overflowX),x=y\u003CA&&(\"auto\"===S.overflowY||\"scroll\"===S.overflowY));var _=k&&(Math.abs(b-s)\u003C=r&&$+v\u003CC)-(Math.abs(g-s)\u003C=r&&!!$),I=x&&(Math.abs(f-a)\u003C=r&&D+y\u003CA)-(Math.abs(w-a)\u003C=r&&!!D);if(!Je[u])for(var O=0;O\u003C=u;O++)Je[O]||(Je[O]={});Je[u].vx==_&&Je[u].vy==I&&Je[u].el===h||(Je[u].el=h,Je[u].vx=_,Je[u].vy=I,clearInterval(Je[u].pid),0==_&&0==I||(d=!0,Je[u].pid=setInterval(function(){n&&0===this.layer&&qe.active._onTouchMove(Ve);var t=Je[this.layer].vy?Je[this.layer].vy*l:0,o=Je[this.layer].vx?Je[this.layer].vx*l:0;\"function\"==typeof i&&\"continue\"!==i.call(qe.dragged.parentNode[j],o,t,e,Ve,Je[this.layer].el)||q(Je[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=L(p,!1)));Ze=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,i=e.activeSortable,s=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||i;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(s(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=D(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},i(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},i(nt,{pluginName:\"removeOnSpill\"}),qe.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?f(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?f(document,\"touchmove\",this._handleFallbackAutoScroll):f(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):(g(document,\"pointermove\",this._handleFallbackAutoScroll),g(document,\"touchmove\",this._handleFallbackAutoScroll),g(document,\"mousemove\",this._handleFallbackAutoScroll)),Ke(),Ge(),clearTimeout(k),k=void 0},nulling:function(){Ve=We=Re=Ze=Ue=Xe=Ye=null,Je.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,i=(e.touches?e.touches[0]:e).clientY,s=document.elementFromPoint(n,i);if(Ve=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,s,t);var a=L(s,!0);!Ze||Ue&&n===Xe&&i===Ye||(Ue&&Ke(),Ue=setInterval(function(){var s=L(document.elementFromPoint(n,i),!0);s!==a&&(a=s,Ge()),et(e,o.options,s,t)},10),Xe=n,Ye=i)}else{if(!this.options.bubbleScroll||L(s,!0)===T())return void Ge();et(e,this.options,L(s,!1),!1)}}},i(e,{pluginName:\"scroll\",initializeByDefault:!0})}),qe.mount(nt,ot);const it=qe},4316(e,t,o){\"use strict\";var n=o(5072),i=o.n(n),s=o(7825),a=o.n(s),r=o(7659),l=o.n(r),c=o(5056),d=o.n(c),u=o(540),p=o.n(u),h=o(1113),m=o.n(h),w=o(9455),f={};f.styleTagTransform=m(),f.setAttributes=d(),f.insert=l().bind(null,\"head\"),f.domAPI=a(),f.insertStyleElement=p(),i()(w.A,f),w.A&&w.A.locals&&w.A.locals},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var s={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=s[c]||0,u=\"\".concat(c,\" \").concat(d);s[c]=d+1;var p=o(u),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(h);else{var m=i(h,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:m,references:1})}a.push(u)}return a}function i(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,i){var s=n(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a\u003Cs.length;a++){var r=o(s[a]);t[r].references--}for(var l=n(e,i),c=0;c\u003Cs.length;c++){var d=o(s[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}s=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var i=void 0!==o.layer;i&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,i&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var s=o.sourceMap;s&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},i=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,i=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,i)}),s=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=s+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=s+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],h=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,f=e=>w(e)?e.toPromise():Promise.resolve(e),g=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${a.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(a.popup),x=()=>y(a.icon),C=()=>y(a.title),E=()=>y(a[\"html-container\"]),A=()=>y(a.image),S=()=>y(a[\"progress-steps\"]),T=()=>y(a[\"validation-message\"]),B=()=>v(`.${a.actions} .${a.confirm}`),$=()=>v(`.${a.actions} .${a.cancel}`),D=()=>v(`.${a.actions} .${a.deny}`),_=()=>v(`.${a.loader}`),I=()=>y(a.actions),O=()=>y(a.footer),L=()=>y(a[\"timer-progress-bar\"]),P=()=>y(a.close),M=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),i=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(i))].filter(e=>ee(e))},q=()=>j(document.body,a.shown)&&!j(document.body,a[\"toast-shown\"])&&!j(document.body,a[\"no-backdrop\"]),N=()=>{const e=k();return!!e&&j(e,a.toast)},F=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const i=o.querySelector(\"body\");i&&Array.from(i.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},j=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},H=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?W(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},Q=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},z=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},R=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},W=(e,t)=>{R(e,t,!0)},X=(e,t)=>{R(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&j(n,t))return n}},V=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},U=(e,t=\"flex\")=>{e&&(e.style.display=t)},J=e=>{e&&(e.style.display=\"none\")},Z=(e,t=\"block\")=>{e&&new MutationObserver(()=>{K(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},G=(e,t,o,n)=>{const i=e.querySelector(t);i&&i.style.setProperty(o,n)},K=(e,t,o=\"flex\")=>{t?U(e,o):J(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=L();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},ie=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),se=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),X([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&W(o,a[\"no-transition\"]),F(o,ie),o.dataset.swal2Theme=e.theme;const i=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");i.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(W(b(),a.rtl),n.isRTL=!0)})(i),(()=>{const e=k();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),i=e.querySelector(`.${a.range} output`),s=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=se),o&&(o.onchange=se),s&&(s.onchange=se),r&&(r.onchange=se),l&&(l.oninput=se),n&&i&&(n.oninput=()=>{se(),i.value=n.value},n.onchange=()=>{se(),i.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&F(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):F(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=I(),n=_();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?U(o):J(o),H(o,t,\"actions\"),function(e,t,o){const n=B(),i=D(),s=$();n&&i&&s&&(pe(n,\"confirm\",o),pe(i,\"deny\",o),pe(s,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(W([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):X([e,t,o],a.styled)}(n,i,s,o),o.reverseButtons&&(o.toast?(e.insertBefore(s,n),e.insertBefore(i,n)):(e.insertBefore(s,t),e.insertBefore(i,t),e.insertBefore(n,t))))}(o,n,t),F(n,t.loaderHtml||\"\"),H(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);K(e,o[`show${n}Button`],\"inline-block\"),F(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],H(e,o,`${t}Button`)}const he=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||W([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?W(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),W(e,a.center)))}(o,t.position),function(e,t){t&&W(e,a[`grow-${t}`])}(o,t.grow),H(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],fe=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);U(t),e.inputAutoFocus&&setTimeout(()=>{z(o)})},ge=(e,t)=>{const o=k();if(!o)return;const n=Q(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&H(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),i=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=i,\"object\"==typeof o.customClass&&W(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return Y(t,a[e]||a.input)},xe=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:g(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return xe(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),i=o.querySelector(\"output\");return n&&(xe(n,t.inputValue),n.type=t.input,ye(n,e,t)),i&&xe(i,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");F(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=Q(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const i=e.querySelector(\"span\");if(i){const e=t.inputPlaceholder||t.inputLabel;e&&F(i,e)}return n},Ce.textarea=(e,t)=>{const o=e;xe(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(s=o,parseInt(window.getComputedStyle(s).marginLeft)+parseInt(window.getComputedStyle(s).marginRight)),i=k();var s;i&&(e>n?i.style.width=`${e}px`:V(i,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Ee=(e,t)=>{const o=E();o&&(Z(o),H(o,t,\"htmlContainer\"),t.html?(re(t.html,o),U(o,\"block\")):t.text?(o.textContent=t.text,U(o,\"block\")):J(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),i=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(ge(e,t.inputAttributes),n.className=a[e],i&&J(n))}),t.input&&(i&&fe(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&X(e,n);W(e,t.icon&&r[t.icon]),Be(e,t),Se(),H(e,t,\"icon\")},Se=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Te=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=$e(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=$e({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&F(e,n)},Be=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])G(e,o,\"background-color\",t.iconColor);G(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},$e=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let De=!1,_e=0,Ie=0,Oe=0,Le=0;const Pe=e=>{const t=k();if(!t)return;const o=x();if(e.target===t||o&&o.contains(e.target)){De=!0;const o=Ne(e);_e=o.clientX,Ie=o.clientY,Oe=parseInt(t.style.insetInlineStart)||0,Le=parseInt(t.style.insetBlockStart)||0,W(t,\"swal2-dragging\")}},Me=e=>{const t=k();if(t&&De){let{clientX:o,clientY:i}=Ne(e);const s=o-_e;t.style.insetInlineStart=`${Oe+(n.isRTL?-s:s)}px`,t.style.insetBlockStart=`${Le+(i-Ie)}px`}},qe=()=>{const e=k();De=!1,X(e,\"swal2-dragging\")},Ne=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Fe=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){V(o,\"width\",t.width),n.style.width=\"100%\";const e=_();e&&n.insertBefore(e,x())}else V(n,\"width\",t.width);V(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),J(T()),je(n,t),t.draggable&&!t.toast?(W(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Pe),document.body.addEventListener(\"mousemove\",Me),e.addEventListener(\"mouseup\",qe),e.addEventListener(\"touchstart\",Pe),document.body.addEventListener(\"touchmove\",Me),e.addEventListener(\"touchend\",qe)})(n)):(X(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Pe),document.body.removeEventListener(\"mousemove\",Me),e.removeEventListener(\"mouseup\",qe),e.removeEventListener(\"touchstart\",Pe),document.body.removeEventListener(\"touchmove\",Me),e.removeEventListener(\"touchend\",qe)})(n))}},je=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(W([document.documentElement,document.body],a[\"toast-shown\"]),W(e,a.toast)):W(e,a.modal),H(e,t,\"popup\"),\"string\"==typeof t.customClass&&W(e,t.customClass),t.icon&&W(e,a[`icon-${t.icon}`])},He=e=>{const t=document.createElement(\"li\");return W(t,a[\"progress-step\"]),F(t,e),t},Qe=e=>{const t=document.createElement(\"li\");return W(t,a[\"progress-step-line\"]),e.progressStepsDistance&&V(t,\"width\",e.progressStepsDistance),t},ze=(e,t)=>{var o;Fe(0,t),he(0,t),((e,t)=>{const o=S();if(!o)return;const{progressSteps:n,currentProgressStep:i}=t;n&&0!==n.length&&void 0!==i?(U(o),o.textContent=\"\",i>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,s)=>{const r=He(e);if(o.appendChild(r),s===i&&W(r,a[\"active-progress-step\"]),s!==n.length-1){const e=Qe(t);o.appendChild(e)}})):J(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=x();if(n){if(o&&t.icon===o.icon)return Te(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void J(n);U(n),Te(n,t),Ae(n,t),W(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",Se)}else J(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(U(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),V(o,\"width\",t.imageWidth),V(o,\"height\",t.imageHeight),o.className=a.image,H(o,t,\"image\")):J(o))})(0,t),((e,t)=>{const o=C();o&&(Z(o),K(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),H(o,t,\"title\"))})(0,t),((e,t)=>{const o=P();o&&(F(o,t.closeButtonHtml||\"\"),H(o,t,\"closeButton\"),K(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Ee(e,t),de(0,t),((e,t)=>{const o=O();o&&(Z(o),K(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),H(o,t,\"footer\"))})(0,t);const i=k();\"function\"==typeof t.didRender&&i&&t.didRender(i),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",i)},Re=()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},We=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Xe=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=M();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Ve=[\"ArrowRight\",\"ArrowDown\"],Ue=[\"ArrowLeft\",\"ArrowUp\"],Je=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ze(t,e):\"Tab\"===t.key?Ge(t):[...Ve,...Ue].includes(t.key)?Ke(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ze=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=Q(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;Re(),e.preventDefault()}},Ge=e=>{const t=e.target,o=M();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Ke=e=>{const t=I(),o=B(),n=D(),i=$();if(!(t&&o&&n&&i))return;const s=[o,n,i];if(document.activeElement instanceof HTMLElement&&!s.includes(document.activeElement))return;const a=Ve.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(We.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),it=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=st(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},st=e=>{const t=e.target,o=b(),n=E();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,s){N()?bt(e,s):(i(o).then(()=>bt(e,s)),Xe(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),q()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(j(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);X(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),X([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||j(t,o.hideClass.popup))return!1;X(t,o.showClass.popup),W(t,o.hideClass.popup);const n=b();return X(n,o.showClass.backdrop),W(n,o.hideClass.backdrop),ft(e,t,o),!0};function ht(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),ft=(e,t,o)=>{var i;const s=b(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(i=n.eventEmitter)||void 0===i||i.emit(\"willClose\",t),a&&s?gt(e,t,s,Boolean(o.returnFocus),o.didClose):s&&dt(e,s,Boolean(o.returnFocus),o.didClose)},gt=(e,t,o,i,s)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,i,s);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Ko,t=k(),!t)return;const o=_();N()?J(x()):yt(t,e),U(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=I(),n=_();o&&n&&(!t&&ee(B())&&(t=B()),U(o),t&&(J(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),W([e,o],a.loading))},kt=e=>e.checked?1:0,xt=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,Et=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const i=(e,t,n)=>{const i=document.createElement(\"option\");i.value=n,F(i,t),i.selected=Tt(n,o.inputValue),e.appendChild(i)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>i(e,t[1],t[0]))}else i(n,o,t)}),n.focus()}(o,St(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],i=e[1],s=document.createElement(\"input\"),r=document.createElement(\"label\");s.type=\"radio\",s.name=a.radio,s.value=t,Tt(t,o.inputValue)&&(s.checked=!0);const l=document.createElement(\"span\");F(l,i),l.className=a.label,r.appendChild(s),r.appendChild(l),n.appendChild(r)});const i=n.querySelectorAll(\"input\");i.length&&i[0].focus()}(o,St(e),t)};w(t.inputOptions)||g(t.inputOptions)?(vt(B()),f(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(J(o),f(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,U(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",U(o),o.focus(),e.hideLoading()}))};const St=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=St(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=St(n)),t.push([o,n])}),t},Tt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),Bt=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),i=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return xt(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?$t(e,i,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?Dt(e,i):Ot(e,i)},$t=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>f(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?Dt(e,t):Ot(e,t)})},Dt=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt(D()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>It(e,t))):e.close({isDenied:!0,value:t})},_t=(e,t)=>{e.close({isConfirmed:!0,value:t})},It=(e,t)=>{e.rejectPromise(t)},Ot=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preConfirm(t,o.validationMessage))).then(o=>{ee(T())||!1===o?(e.hideLoading(),mt(e)):_t(e,void 0===o?t:o)}).catch(t=>It(e,t))):_t(e,t)};function Lt(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);J(t.loader),N()?e.icon&&U(x()):Pt(t),X([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Pt=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?U(o[0],\"inline-block\"):!ee(B())&&!ee(D())&&!ee($())&&J(e.actions)};function Mt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?Q(t.popup,e.input):null}function qt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Nt(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Ft(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function jt(){qt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Ht(){Nt(this.getInput(),!1)}function Qt(){Nt(this.getInput(),!0)}function zt(e){const t=me.domCache.get(this),o=me.innerParams.get(this);F(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&W(t.validationMessage,o.customClass.validationMessage),U(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),z(n),W(n,a.inputerror))}function Rt(){const e=me.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),X(t,a.inputerror))}const Wt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Xt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Vt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Ut=e=>Object.prototype.hasOwnProperty.call(Wt,e),Jt=e=>-1!==Xt.indexOf(e),Zt=e=>Yt[e],Gt=e=>{Ut(e)||d(`Unknown parameter \"${e}\"`)},Kt=e=>{Vt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Zt(e);t&&h(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Gt(t),e.toast&&Kt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||j(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const i=no(e),s=Object.assign({},n,i);to(s),t&&(t.dataset.swal2Theme=s.theme),ze(this,s),me.innerParams.set(this,s),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Jt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function io(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),so(this)):ao(this)}const so=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(me,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:io,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:jt,disableInput:Qt,disableLoading:Lt,enableButtons:Ft,enableInput:Ht,getInput:Mt,handleAwaitingPromise:mt,hideLoading:Lt,rejectPromise:ht,resetValidationMessage:Rt,showValidationMessage:zt,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(We.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const ho=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(We.backdrop)}},fo=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const go=()=>{if(n.timeout)return(()=>{const e=L();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var xo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||fo(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const i=e[n];\"string\"==typeof i||fo(i)?t[o]=i:void 0!==i&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof i}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},clickConfirm:Re,clickDeny:()=>{var e;return null===(e=D())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:I,getCancelButton:$,getCloseButton:P,getConfirmButton:B,getContainer:b,getDenyButton:D,getFocusableElements:M,getFooter:O,getHtmlContainer:E,getIcon:x,getIconContent:()=>y(a[\"icon-content\"]),getImage:A,getInputLabel:()=>y(a[\"input-label\"]),getLoader:_,getPopup:k,getProgressSteps:S,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:L,getTitle:C,getValidationMessage:T,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Zt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Jt,isValidParameter:Ut,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:go,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?go():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const Eo=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{Oo(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Wt&&\"boolean\"==typeof Wt[o]?\"false\"!==n:o in Wt&&\"object\"==typeof Wt[o]?JSON.parse(n):n)}),t},So=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{Oo(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Bo=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(Oo(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},$o=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(Oo(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},Do=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(Oo(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{Oo(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},_o=(e,t)=>{const o={};for(const n in t){const i=t[n],s=e.querySelector(i);s&&(Oo(s,[]),o[i.replace(\u002F^swal-\u002F,\"\")]=s.innerHTML.trim())}return o},Io=e=>{const t=Eo.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},Oo=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Lo=e=>{var t,o;const i=b(),s=k();if(!i||!s)return;\"function\"==typeof e.willOpen&&e.willOpen(s),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",s);const a=window.getComputedStyle(document.body).overflowY;if(No(i,s,e),setTimeout(()=>{Mo(i,s)},10),q()&&(qo(i,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),N()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(s))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",s)},Po=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Po),t.removeEventListener(\"transitionend\",Po),o.style.overflowY=\"auto\",X(o,a[\"no-transition\"]))},Mo=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Po),t.addEventListener(\"transitionend\",Po)):e.style.overflowY=\"auto\"},qo=(e,t,o)=>{(()=>{if(nt&&!j(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",W(document.body,a.iosfix),it()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},No=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&W(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),U(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&W(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):U(t,\"grid\"),W([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&W([document.documentElement,document.body],a[\"height-auto\"])};var Fo=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),jo=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Ho(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=Fo),\"url\"===e.input&&(e.inputValidator=jo))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let Qo;var zo=new WeakMap;class Ro{constructor(...t){if(o(this,zo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;Qo=this;const n=Object.freeze(this.constructor.argsToParams(t));var i,s,a;this.params=n,this.isAwaitingPromise=!1,i=zo,s=this,a=this._main(Qo.params),i.set(e(i,s),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),q()&&ot()}n.currentInstance=Qo;const o=Xo(e,t);Ho(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const i=Yo(Qo);return ze(Qo,o),me.innerParams.set(Qo,o),Wo(Qo,i,o)}then(e){return t(zo,this).then(e)}finally(e){return t(zo,this).finally(e)}}const Wo=(e,t,o)=>new Promise((i,s)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,i),tt.swalPromiseReject.set(e,s),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?Bt(e,\"confirm\"):Ot(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?Bt(e,\"deny\"):Dt(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(We.cancel)})(e,a)},t.closeButton.onclick=()=>{a(We.close)},((e,t,o)=>{e.toast?co(e,t,o):(ho(t),mo(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Xe(e),!t.toast){const n=e=>Je(t,e,o);e.keydownHandler=n;const i=t.keydownListenerCapture?window:k();if(i){e.keydownTarget=i,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?Et(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||g(t.inputValue))&&(vt(B()),At(e,t))})(e,o),Lo(o),Vo(n,o,a),Uo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Xo=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Io(o),Object.assign(Ao(o),So(o),To(o),Bo(o),$o(o),Do(o),_o(o,Eo))})(e),n=Object.assign({},Wt,t,o,e);return n.showClass=Object.assign({},Wt.showClass,n.showClass),n.hideClass=Object.assign({},Wt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:k(),container:b(),actions:I(),confirmButton:B(),denyButton:D(),cancelButton:$(),loader:_(),closeButton:P(),validationMessage:T(),progressSteps:S()};return me.domCache.set(e,t),t},Vo=(e,t,o)=>{const n=L();J(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(U(n),H(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Uo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Jo(e)||Zo(e,t)||Ye(-1,1)):(h(\"allowEnterKey\"),void Go())},Jo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Zo=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Go=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Ro.prototype.disableButtons=jt,Ro.prototype.enableButtons=Ft,Ro.prototype.getInput=Mt,Ro.prototype.disableInput=Qt,Ro.prototype.enableInput=Ht,Ro.prototype.hideLoading=Lt,Ro.prototype.disableLoading=Lt,Ro.prototype.showValidationMessage=zt,Ro.prototype.resetValidationMessage=Rt,Ro.prototype.close=ut,Ro.prototype.closePopup=ut,Ro.prototype.closeModal=ut,Ro.prototype.closeToast=ut,Ro.prototype.rejectPromise=ht,Ro.prototype.update=oo,Ro.prototype._destroy=io,Object.assign(Ro,xo),Object.keys(lo).forEach(e=>{Ro[e]=function(...t){if(Qo&&Qo[e])return Qo[e](...t)}}),Ro.DismissReason=We,Ro.version=\"11.26.17\";const Ko=Ro;return Ko.default=Ko,Ko}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var i=document.createElement(\"button\");i.type=\"button\",i.setAttribute(\"aria-label\",\"Close\"),i.className=\"toast-close\",i.innerHTML=\"&#10006;\",i.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var s=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&s>360?e.insertAdjacentElement(\"afterbegin\",i):e.appendChild(i)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},i={top:15,bottom:15},s=document.getElementsByClassName(\"toastify\"),a=0;a\u003Cs.length;a++){e=!0===n(s[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=s[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(s[a].style[e]=i[e]+\"px\",i[e]+=r+15):!0===n(s[a],\"toastify-left\")?(s[a].style[e]=t[e]+\"px\",t[e]+=r+15):(s[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={id:n,exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(4223),t=o(2603),n=o(8465),i=o.n(n),s=o(246);const a=\"edit-question\";let r,l,c,d;class u{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){u._loadedEvents||(u._loadedEvents=!0,document.querySelectorAll(`${u.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),e.eventHandlers(\"click\",[{selector:u.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:u.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:u.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:u.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:u.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:u.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:u.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:u.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:u.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:u.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:o}=e;o.closest(`${u.selectors.elQuestionEditMain}`).querySelector(`${u.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",t=>{const o=t.target;e.toggleCollapse(t,o,u.selectors.elTriggerToggle)}),e.eventHandlers(\"keyup\",[{selector:u.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:u.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:u.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),e.eventHandlers(\"keydown\",[{selector:u.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),e.eventHandlers(\"change\",[{selector:u.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce())}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",t=>{const o=t.editor.id,n=window.tinymce.get(o);if(!n)return;if(\"content\"===o)return;const i=document.querySelector(`#wp-${o}-wrap`);i&&(i.classList.add(\"tmce-active\"),i.classList.remove(\"html-active\"));const s=document.getElementById(o);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);a&&(a.dataset.questionId,n.settings.force_p_newlines=!1,n.settings.forced_root_block=\"\",n.settings.force_br_newlines=!0,n.settings.relative_urls=!1,n.settings.remove_script_host=!1,n.settings.convert_urls=!0,n.settings.document_base_url=lpData.site_url,n.on(\"change keyup\",e=>{s.value=n.getContent(),this.autoUpdateQuestion({e,target:s})}),n.on(\"blur\",e=>{}),n.on(\"focusin\",e=>{}),n.on(\"init\",()=>{n.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${u.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),n.on(\"setcontent\",e=>{const t=this.randomString(),o=n.dom.select(`.${u.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);o[0]&&o[0].focus(),n.dom.bind(o[0],\"input\",e=>{})}),n.on(\"selectionchange\",t=>{if(r=n.selection,r.getNode().classList.contains(`${u.selectors.elQuestionFibInput}`)){const t=r.getNode().dataset.id,i=r.getNode().textContent.trim();if(0===i.length){const o=n.id.replace(`${u.selectors.elQuestionFibInput}-`,\"\"),i=document.querySelector(`${u.selectors.elQuestionEditMain}[data-question-id=\"${o}\"]`).querySelector(`${u.selectors.elFibBlankOptions}`).querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);i&&e.lpShowHideEl(i,0)}else{const e=document.getElementById(o).closest(`${u.selectors.elAnswersConfig}`).querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);if(e){const t=e.querySelector(`${u.selectors.elFibOptionTitleInput}`);t&&(t.value=i)}}}}),n.on(\"Undo\",t=>{n.getContent();const o=n.selection.getNode();if(o.classList.contains(`${u.selectors.elQuestionFibInput}`)){const t=o.dataset.id,n=document.querySelector(`${u.selectors.elFibBlankOptionItem}[data-id=\"${t}\"]`);n&&e.lpShowHideEl(n,1)}}),n.on(\"Redo\",e=>{}))})}autoUpdateQuestion(e){let{e:o,target:n,key:i,value:s}=e;const r=n.closest(`${u.selectors.elAutoSaveQuestion}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(d),d=setTimeout(()=>{const e={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;t.W(o,n)},error:e=>{t.W(e,\"error\")},completed:()=>{}},o={action:\"update_question\",question_id:l,args:{id_url:a}};if(void 0===i){if(i=r.dataset.keyAutoSave,!i){if(!r.classList.contains(\"lp-editor-tinymce\"))return;const e=r.id;if(i=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${l}`,\"\").replace(\u002F-\u002Fg,\"_\"),!i)return}s=r.value}o[i]=s,window.lpAJAXG.fetchAJAX(o,e)},700)}createQuestionType(e){const{e:o,target:n}=e,i=n.closest(`${u.selectors.elBtnQuestionCreateType}`);if(!i)return;const s=i.closest(`${u.selectors.elQuestionEditMain}`);if(!s)return;const r=s.dataset.questionId,l=s.querySelector(`${u.selectors.elQuestionTypeNew}`);if(!l)return;const c=l.value.trim();if(!c){const e=l.dataset.messEmptyType;return void t.W(e,\"error\")}const d={success:e=>{const{message:o,status:n,data:i}=e;if(\"success\"!==n)throw`Error: ${o}`;{const{html_option_answers:e}=i;s.querySelector(`${u.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(s),t.W(o,n)}},error:e=>{t.W(e,\"error\")},completed:()=>{}},p={action:\"update_question\",question_id:r,question_type:c,args:{id_url:a}};window.lpAJAXG.fetchAJAX(p,d)}addQuestionAnswer(o){const{e:n,target:i}=o,s=i.closest(`${u.selectors.elQuestionAnswerItemAddNew}`);if(!s)return;n.preventDefault();const r=s.querySelector(`${u.selectors.elQuestionAnswerTitleNewInput}`);if(!r.value.trim()){const e=r.dataset.messEmptyTitle;return void t.W(e,\"error\")}const l=i.closest(`${u.selectors.elQuestionEditMain}`),c=l.querySelector(`${u.selectors.elQuestionAnswerItem}.clone`),d=c.cloneNode(!0),p=d.querySelector(`${u.selectors.elQuestionAnswerTitleInput}`);d.classList.remove(\"clone\"),e.lpShowHideEl(d,1),e.lpSetLoadingEl(d,1),c.insertAdjacentElement(\"beforebegin\",d);const h=r.value.trim();p.value=h,r.value=\"\";const m={success:o=>{const{message:n,status:i,data:s}=o;if(\"success\"!==i)throw`Error: ${n}`;{const{question_answer:t}=s;d.dataset.answerId=t.question_answer_id,e.lpSetLoadingEl(d,0);const o=this.getDataAnswersConfig(l);o.push(t),this.setDataAnswersConfig(l,o)}t.W(n,i)},error:e=>{d.remove(),t.W(e,\"error\")},completed:()=>{}},w={action:\"add_question_answer\",question_id:l.dataset.questionId,answer_title:h,args:{id_url:a}};window.lpAJAXG.fetchAJAX(w,m)}checkCanAddAnswer(e){const{e:t,target:o}=e,n=o.closest(u.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const i=n.closest(`${u.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;const s=i.querySelector(`${u.selectors.elBtnAddAnswer}`);s&&(n.value.trim()?s.classList.add(\"active\"):s.classList.remove(\"active\"))}autoUpdateAnswer(o){const{e:n,target:i}=o,s=i.closest(`${u.selectors.elAutoSaveAnswer}`);if(!s)return;const r=s.closest(`${u.selectors.elQuestionAnswerItem}`);clearTimeout(l),l=setTimeout(()=>{const o=s.closest(`${u.selectors.elQuestionEditMain}`),n=o.dataset.questionId,i=this.getDataAnswersConfig(o),l=o.querySelector(`${u.selectors.elAnswersConfig}`),c=structuredClone(i),d=l.querySelectorAll(`${u.selectors.elQuestionAnswerItem}:not(.clone)`),p={};d.forEach((e,t)=>{p[e.dataset.answerId]=t+1}),i.map((e,t)=>{const n=o.querySelector(`${u.selectors.elQuestionAnswerItem}[data-answer-id=\"${e.question_answer_id}\"]`),i=n.querySelector(`${u.selectors.elInputAnswerSetTrue}`),s=n.querySelector(`${u.selectors.elQuestionAnswerTitleInput}`);return s&&(e.title=s.value.trim()),i&&(i.checked?e.is_true=\"yes\":e.is_true=\"\"),p[e.question_answer_id]&&(e.order=p[e.question_answer_id]),e}),e.lpSetLoadingEl(r,1);const h={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;t.W(o,n)},error:e=>{c.forEach(e=>{const t=o.querySelector(`${u.selectors.elQuestionAnswerItem}[data-answer-id=\"${e.question_answer_id}\"]`).querySelector(`${u.selectors.elInputAnswerSetTrue}`);return\"yes\"===e.is_true&&(t.checked=!0),e}),t.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(r,0)}},m={action:\"update_question_answers_config\",question_id:n,answers:i,args:{id_url:a}};window.lpAJAXG.fetchAJAX(m,h)},700)}sortAbleQuestionAnswer(e){let t,o=0;e.querySelectorAll(`${u.selectors.elAnswersConfig}`).forEach(e=>{new s.Ay(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;o&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${u.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{o=1}})})}deleteQuestionAnswer(o){const{e:n,target:s}=o,r=s.closest(`${u.selectors.elBtnDeleteAnswer}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionAnswerItem}`);if(!l)return;const c=r.closest(`${u.selectors.elQuestionEditMain}`),d=c.dataset.questionId,p=l.dataset.answerId;d&&p&&i().fire({title:r.dataset.title||\"Are you sure?\",text:r.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(o=>{if(o.isConfirmed){e.lpSetLoadingEl(l,1);const o={success:e=>{const{message:o,status:n}=e;if(t.W(o,n),\"success\"===n){const e=parseInt(l.dataset.answerId);l.remove();const t=this.getDataAnswersConfig(c);if(t){const o=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(c,o)}}},error:e=>{t.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(l,0)}},n={action:\"delete_question_answer\",question_id:d,question_answer_id:p,args:{id_url:a}};window.lpAJAXG.fetchAJAX(n,o)}})}getDataAnswersConfig(e){const t=e.querySelector(`${u.selectors.elAnswersConfig}`);if(!t)return null;let o=t.dataset.answers||\"[]\";try{o=JSON.parse(o)}catch(e){o=[]}return o.meta_data||(o.meta_data={}),o}setDataAnswersConfig(e,t){const o=e.querySelector(`${u.selectors.elAnswersConfig}`);o&&(t&&\"object\"==typeof t||(t={}),o.dataset.answers=JSON.stringify(t))}fibInsertBlank=o=>{const{e:n,target:i}=o,s=i.closest(u.selectors.elBtnFibInsertBlank);if(!s)return;const a=s.dataset.defaultText,l=s.closest(u.selectors.elQuestionEditMain),c=l.dataset.questionId,d=s.dataset.messInserted,p=s.dataset.messRequireSelectText,h=`${u.selectors.elQuestionFibInput}-${c}`,m=this.randomString();let w;if(!r)return void t.W(p,\"error\");{const e=r.getNode();if(!e)return void t.W(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${h}\"]`))return void t.W(p,\"error\");if(e.classList.contains(`${u.selectors.elQuestionFibInput}`))return void t.W(d,\"error\");w=r.getContent(),0===w.length&&(w=a);const o=`\u003Cspan class=\"${u.selectors.elQuestionFibInput}\" data-id=\"${m}\">${w}\u003C\u002Fspan>`;r.setContent(o)}const f=this.getDataAnswersConfig(l);f.meta_data=f.meta_data||{},0===Object.keys(f.meta_data).length&&(f.meta_data={}),f.meta_data[m]={id:m,match_case:0,comparison:\"equal\",fill:w,index:1,open:!1},this.setDataAnswersConfig(l,f);const g=l.querySelector(`${u.selectors.elFibBlankOptions}`),b=l.querySelector(`${u.selectors.elFibBlankOptionItemClone}`),v=b.cloneNode(!0),y=g.querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).length,k=v.querySelector(`${u.selectors.elFibBlankOptionIndex}`),x=v.querySelector(`${u.selectors.elFibOptionTitleInput}`),C=v.querySelector(`${u.selectors.elFibOptionMatchCaseInput}`),E=v.querySelectorAll(`${u.selectors.elFibOptionComparisonInput}`);v.dataset.id=m,x.name=`${u.selectors.elFibOptionTitleInput}-${m}`,x.value=this.decodeHtml(w),k.textContent=y+1+\".\",C.name=`${u.selectors.elFibOptionMatchCaseInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),E.forEach(e=>{e.name=`${u.selectors.elFibOptionComparisonInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),b.insertAdjacentElement(\"beforebegin\",v),v.classList.remove(\"clone\"),e.lpShowHideEl(v,1);const A=l.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})};fibDeleteAllBlanks(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibDeleteAllBlanks}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=this.getDataAnswersConfig(a);i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){const t=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${r}`);t.dom.select(`.${u.selectors.elQuestionFibInput}`).forEach(e=>{t.dom.remove(e,!0)}),l.meta_data={},this.setDataAnswersConfig(a,l),a.querySelector(`${u.selectors.elFibBlankOptions}`).querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const o=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:o,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})}})}fibClearContent(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibClearAllContent}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=this.getDataAnswersConfig(a);i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){window.tinymce.get(`lp-question-fib-input-${r}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(a,l),a.querySelector(`${u.selectors.elFibBlankOptions}`).querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{e.lpSetLoadingEl(s,0)}})}})}fibDeleteBlank(t){const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnFibOptionDelete}`);if(!s)return;const a=s.closest(`${u.selectors.elQuestionEditMain}`);if(!a)return;const r=a.dataset.questionId,l=(a.querySelector(`${u.selectors.elAnswersConfig}`),this.getDataAnswersConfig(a)),c=s.closest(`${u.selectors.elFibBlankOptionItem}`),d=c.dataset.id;i().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){const t=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${r}`),o=t.dom.select(`.${u.selectors.elQuestionFibInput}[data-id=\"${d}\"]`);o[0]&&t.dom.remove(o[0],!0),c.remove(),l.meta_data=l.meta_data||{},l.meta_data[d]&&delete l.meta_data[d],this.setDataAnswersConfig(a,l);const n=a.querySelector(`${u.selectors.elBtnFibSaveContent}`);e.lpSetLoadingEl(c,1),this.fibSaveContent({e:null,target:n,callBackCompleted:()=>{e.lpSetLoadingEl(c,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:o}=e,n=o.closest(`${u.selectors.elFibOptionTitleInput}`);if(!n)return;const i=n.closest(`${u.selectors.elFibBlankOptionItem}`);if(!i)return;const s=n.closest(`${u.selectors.elQuestionEditMain}`);if(!s)return;const a=n.value.trim(),r=i.dataset.id,l=s.dataset.questionId,d=window.tinymce.get(`lp-question-fib-input-${l}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);d[0]&&(d[0].textContent=a),clearTimeout(c),c=setTimeout(()=>{const e=s.querySelector(`${u.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(o){const{e:n,target:i,callBackCompleted:s=null}=o,r=i.closest(`${u.selectors.elBtnFibSaveContent}`);if(!r)return;const l=r.closest(`${u.selectors.elQuestionEditMain}`),c=l.dataset.questionId,d=this.getDataAnswersConfig(l);if(!d)return;const p=window.tinymce.get(`${u.selectors.elQuestionFibInput}-${c}`);d.title=p.getContent();const h=l.querySelectorAll(`${u.selectors.elFibBlankOptionItem}:not(.clone)`);h&&h.forEach(e=>{const t=e.dataset.id,o=e.querySelector(`${u.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${u.selectors.elFibOptionComparisonInput}:checked`);d.meta_data[t].match_case=o.checked?1:0,d.meta_data[t].comparison=n.value}),s||e.lpSetLoadingEl(r,1);const m={success:e=>{const{message:o,status:n}=e;if(\"success\"!==n)throw`Error: ${o}`;this.setDataAnswersConfig(l,d),t.W(o,n)},error:e=>{t.W(e,\"error\")},completed:()=>{s&&\"function\"==typeof s?s():e.lpSetLoadingEl(r,0)}},w={action:\"update_question_answers_config\",question_id:c,answers:d,args:{id_url:a}};window.lpAJAXG.fetchAJAX(w,m)}fibShowHideMatchCaseOption(t){const{e:o,target:n}=t,i=n.closest(`${u.selectors.elFibOptionMatchCaseInput}`);if(!i)return;const s=i.closest(`${u.selectors.elQuestionFibOptionDetail}`),a=s.querySelector(`${u.selectors.elFibOptionMatchCaseWrap}`);s&&a&&(i.checked?e.lpShowHideEl(a,1):e.lpShowHideEl(a,0),i.closest(`${u.selectors.elQuestionEditMain}`).querySelector(`${u.selectors.elBtnFibSaveContent}`).click())}randomString(e=10){let t=\"\";for(let o=0;o\u003Ce;o++)t+=\"abcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(36*Math.random()));return t}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const p=new u;e.lpOnElementReady(u.selectors.elEditQuestionWrap,e=>{const t=u.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&p.init()})})()})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -17,11 +17,11 @@\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n \u002F* harmony import *\u002F var sortablejs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! sortablejs *\u002F \".\u002Fnode_modules\u002Fsortablejs\u002Fmodular\u002Fsortable.esm.js\");\n-\u002F**\r\n- * Edit question JS handler.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Edit question JS handler.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -228,7 +228,15 @@\n         wrapEditor.classList.remove('html-active');\n       }\n       const elTextarea = document.getElementById(id);\n+      if (!elTextarea) {\n+        return;\n+      }\n       const elQuestionEditMain = elTextarea.closest(`${EditQuestion.selectors.elQuestionEditMain}`);\n+\n+      \u002F\u002F Skip if not in question edit context\n+      if (!elQuestionEditMain) {\n+        return;\n+      }\n       const questionId = elQuestionEditMain.dataset.questionId;\n       editor.settings.force_p_newlines = false;\n       editor.settings.forced_root_block = '';\n@@ -1203,10 +1211,10 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n-\u002F**\r\n- *  LearnPress Popup Select Item\r\n- *\r\n- *  Handles load(search) item from API, show in popup and select item.\r\n+\u002F**\n+ *  LearnPress Popup Select Item\n+ *\n+ *  Handles load(search) item from API, show in popup and select item.\n  *\u002F\n \n \n@@ -1286,6 +1294,9 @@\n     if (!elBtnShowPopupItemsToSelect) {\n       return;\n     }\n+\n+    \u002F\u002F Reset items selected data when opening popup\n+    itemsSelectedData = [];\n     const templateId = target.dataset.template || '';\n     const modalTemplate = document.querySelector(templateId);\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n@@ -1604,14 +1615,14 @@\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! toastify-js *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\");\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -1669,14 +1680,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -1707,10 +1718,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -1728,12 +1739,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -1746,11 +1757,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -1771,12 +1782,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -1919,15 +1930,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -11297,11 +11308,11 @@\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n \u002F* harmony import *\u002F var _edit_question_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! .\u002Fedit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpPopupSelectItemToAdd_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\");\n-\u002F**\r\n- * Edit Quiz JS handler as a class.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.3\r\n+\u002F**\n+ * Edit Quiz JS handler as a class.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.3\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Fedit-quiz.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{var e={345(e,t,o){\"use strict\";o.d(t,{f:()=>h});var n=o(4223),s=o(2603),i=o(8465),a=o.n(i),r=o(246);const l=\"edit-question\";let c,d,u,p;class h{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){h._loadedEvents||(h._loadedEvents=!0,document.querySelectorAll(`${h.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),n.eventHandlers(\"click\",[{selector:h.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:h.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:h.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:h.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:h.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:h.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:h.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:h.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:h.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:h.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:o}=e;o.closest(`${h.selectors.elQuestionEditMain}`).querySelector(`${h.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",e=>{const t=e.target;n.toggleCollapse(e,t,h.selectors.elTriggerToggle)}),n.eventHandlers(\"keyup\",[{selector:h.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:h.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:h.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),n.eventHandlers(\"keydown\",[{selector:h.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),n.eventHandlers(\"change\",[{selector:h.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce())}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",e=>{const t=e.editor.id,o=window.tinymce.get(t);if(!o)return;if(\"content\"===t)return;const s=document.querySelector(`#wp-${t}-wrap`);s&&(s.classList.add(\"tmce-active\"),s.classList.remove(\"html-active\"));const i=document.getElementById(t);i.closest(`${h.selectors.elQuestionEditMain}`).dataset.questionId,o.settings.force_p_newlines=!1,o.settings.forced_root_block=\"\",o.settings.force_br_newlines=!0,o.settings.relative_urls=!1,o.settings.remove_script_host=!1,o.settings.convert_urls=!0,o.settings.document_base_url=lpData.site_url,o.on(\"change keyup\",e=>{i.value=o.getContent(),this.autoUpdateQuestion({e,target:i})}),o.on(\"blur\",e=>{}),o.on(\"focusin\",e=>{}),o.on(\"init\",()=>{o.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${h.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),o.on(\"setcontent\",e=>{const t=this.randomString(),n=o.dom.select(`.${h.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);n[0]&&n[0].focus(),o.dom.bind(n[0],\"input\",e=>{})}),o.on(\"selectionchange\",e=>{if(c=o.selection,c.getNode().classList.contains(`${h.selectors.elQuestionFibInput}`)){const e=c.getNode().dataset.id,s=c.getNode().textContent.trim();if(0===s.length){const t=o.id.replace(`${h.selectors.elQuestionFibInput}-`,\"\"),s=document.querySelector(`${h.selectors.elQuestionEditMain}[data-question-id=\"${t}\"]`).querySelector(`${h.selectors.elFibBlankOptions}`).querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);s&&n.lpShowHideEl(s,0)}else{const o=document.getElementById(t).closest(`${h.selectors.elAnswersConfig}`).querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);if(o){const e=o.querySelector(`${h.selectors.elFibOptionTitleInput}`);e&&(e.value=s)}}}}),o.on(\"Undo\",e=>{o.getContent();const t=o.selection.getNode();if(t.classList.contains(`${h.selectors.elQuestionFibInput}`)){const e=t.dataset.id,o=document.querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);o&&n.lpShowHideEl(o,1)}}),o.on(\"Redo\",e=>{})})}autoUpdateQuestion(e){let{e:t,target:o,key:n,value:i}=e;const a=o.closest(`${h.selectors.elAutoSaveQuestion}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(p),p=setTimeout(()=>{const e={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;s.W(t,o)},error:e=>{s.W(e,\"error\")},completed:()=>{}},t={action:\"update_question\",question_id:r,args:{id_url:l}};if(void 0===n){if(n=a.dataset.keyAutoSave,!n){if(!a.classList.contains(\"lp-editor-tinymce\"))return;const e=a.id;if(n=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${r}`,\"\").replace(\u002F-\u002Fg,\"_\"),!n)return}i=a.value}t[n]=i,window.lpAJAXG.fetchAJAX(t,e)},700)}createQuestionType(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elBtnQuestionCreateType}`);if(!n)return;const i=n.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const a=i.dataset.questionId,r=i.querySelector(`${h.selectors.elQuestionTypeNew}`);if(!r)return;const c=r.value.trim();if(!c){const e=r.dataset.messEmptyType;return void s.W(e,\"error\")}const d={success:e=>{const{message:t,status:o,data:n}=e;if(\"success\"!==o)throw`Error: ${t}`;{const{html_option_answers:e}=n;i.querySelector(`${h.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(i),s.W(t,o)}},error:e=>{s.W(e,\"error\")},completed:()=>{}},u={action:\"update_question\",question_id:a,question_type:c,args:{id_url:l}};window.lpAJAXG.fetchAJAX(u,d)}addQuestionAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;t.preventDefault();const a=i.querySelector(`${h.selectors.elQuestionAnswerTitleNewInput}`);if(!a.value.trim()){const e=a.dataset.messEmptyTitle;return void s.W(e,\"error\")}const r=o.closest(`${h.selectors.elQuestionEditMain}`),c=r.querySelector(`${h.selectors.elQuestionAnswerItem}.clone`),d=c.cloneNode(!0),u=d.querySelector(`${h.selectors.elQuestionAnswerTitleInput}`);d.classList.remove(\"clone\"),n.lpShowHideEl(d,1),n.lpSetLoadingEl(d,1),c.insertAdjacentElement(\"beforebegin\",d);const p=a.value.trim();u.value=p,a.value=\"\";const m={success:e=>{const{message:t,status:o,data:i}=e;if(\"success\"!==o)throw`Error: ${t}`;{const{question_answer:e}=i;d.dataset.answerId=e.question_answer_id,n.lpSetLoadingEl(d,0);const t=this.getDataAnswersConfig(r);t.push(e),this.setDataAnswersConfig(r,t)}s.W(t,o)},error:e=>{d.remove(),s.W(e,\"error\")},completed:()=>{}},w={action:\"add_question_answer\",question_id:r.dataset.questionId,answer_title:p,args:{id_url:l}};window.lpAJAXG.fetchAJAX(w,m)}checkCanAddAnswer(e){const{e:t,target:o}=e,n=o.closest(h.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const s=n.closest(`${h.selectors.elQuestionAnswerItemAddNew}`);if(!s)return;const i=s.querySelector(`${h.selectors.elBtnAddAnswer}`);i&&(n.value.trim()?i.classList.add(\"active\"):i.classList.remove(\"active\"))}autoUpdateAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elAutoSaveAnswer}`);if(!i)return;const a=i.closest(`${h.selectors.elQuestionAnswerItem}`);clearTimeout(d),d=setTimeout(()=>{const e=i.closest(`${h.selectors.elQuestionEditMain}`),t=e.dataset.questionId,o=this.getDataAnswersConfig(e),r=e.querySelector(`${h.selectors.elAnswersConfig}`),c=structuredClone(o),d=r.querySelectorAll(`${h.selectors.elQuestionAnswerItem}:not(.clone)`),u={};d.forEach((e,t)=>{u[e.dataset.answerId]=t+1}),o.map((t,o)=>{const n=e.querySelector(`${h.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`),s=n.querySelector(`${h.selectors.elInputAnswerSetTrue}`),i=n.querySelector(`${h.selectors.elQuestionAnswerTitleInput}`);return i&&(t.title=i.value.trim()),s&&(s.checked?t.is_true=\"yes\":t.is_true=\"\"),u[t.question_answer_id]&&(t.order=u[t.question_answer_id]),t}),n.lpSetLoadingEl(a,1);const p={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;s.W(t,o)},error:t=>{c.forEach(t=>{const o=e.querySelector(`${h.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`).querySelector(`${h.selectors.elInputAnswerSetTrue}`);return\"yes\"===t.is_true&&(o.checked=!0),t}),s.W(t,\"error\")},completed:()=>{n.lpSetLoadingEl(a,0)}},m={action:\"update_question_answers_config\",question_id:t,answers:o,args:{id_url:l}};window.lpAJAXG.fetchAJAX(m,p)},700)}sortAbleQuestionAnswer(e){let t,o=0;e.querySelectorAll(`${h.selectors.elAnswersConfig}`).forEach(e=>{new r.Ay(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;o&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${h.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{o=1}})})}deleteQuestionAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elBtnDeleteAnswer}`);if(!i)return;const r=i.closest(`${h.selectors.elQuestionAnswerItem}`);if(!r)return;const c=i.closest(`${h.selectors.elQuestionEditMain}`),d=c.dataset.questionId,u=r.dataset.answerId;d&&u&&a().fire({title:i.dataset.title||\"Are you sure?\",text:i.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){n.lpSetLoadingEl(r,1);const e={success:e=>{const{message:t,status:o}=e;if(s.W(t,o),\"success\"===o){const e=parseInt(r.dataset.answerId);r.remove();const t=this.getDataAnswersConfig(c);if(t){const o=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(c,o)}}},error:e=>{s.W(e,\"error\")},completed:()=>{n.lpSetLoadingEl(r,0)}},t={action:\"delete_question_answer\",question_id:d,question_answer_id:u,args:{id_url:l}};window.lpAJAXG.fetchAJAX(t,e)}})}getDataAnswersConfig(e){const t=e.querySelector(`${h.selectors.elAnswersConfig}`);if(!t)return null;let o=t.dataset.answers||\"[]\";try{o=JSON.parse(o)}catch(e){o=[]}return o.meta_data||(o.meta_data={}),o}setDataAnswersConfig(e,t){const o=e.querySelector(`${h.selectors.elAnswersConfig}`);o&&(t&&\"object\"==typeof t||(t={}),o.dataset.answers=JSON.stringify(t))}fibInsertBlank=e=>{const{e:t,target:o}=e,i=o.closest(h.selectors.elBtnFibInsertBlank);if(!i)return;const a=i.dataset.defaultText,r=i.closest(h.selectors.elQuestionEditMain),l=r.dataset.questionId,d=i.dataset.messInserted,u=i.dataset.messRequireSelectText,p=`${h.selectors.elQuestionFibInput}-${l}`,m=this.randomString();let w;if(!c)return void s.W(u,\"error\");{const e=c.getNode();if(!e)return void s.W(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${p}\"]`))return void s.W(u,\"error\");if(e.classList.contains(`${h.selectors.elQuestionFibInput}`))return void s.W(d,\"error\");w=c.getContent(),0===w.length&&(w=a);const t=`\u003Cspan class=\"${h.selectors.elQuestionFibInput}\" data-id=\"${m}\">${w}\u003C\u002Fspan>`;c.setContent(t)}const g=this.getDataAnswersConfig(r);g.meta_data=g.meta_data||{},0===Object.keys(g.meta_data).length&&(g.meta_data={}),g.meta_data[m]={id:m,match_case:0,comparison:\"equal\",fill:w,index:1,open:!1},this.setDataAnswersConfig(r,g);const f=r.querySelector(`${h.selectors.elFibBlankOptions}`),b=r.querySelector(`${h.selectors.elFibBlankOptionItemClone}`),v=b.cloneNode(!0),y=f.querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).length,k=v.querySelector(`${h.selectors.elFibBlankOptionIndex}`),E=v.querySelector(`${h.selectors.elFibOptionTitleInput}`),C=v.querySelector(`${h.selectors.elFibOptionMatchCaseInput}`),S=v.querySelectorAll(`${h.selectors.elFibOptionComparisonInput}`);v.dataset.id=m,E.name=`${h.selectors.elFibOptionTitleInput}-${m}`,E.value=this.decodeHtml(w),k.textContent=y+1+\".\",C.name=`${h.selectors.elFibOptionMatchCaseInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),S.forEach(e=>{e.name=`${h.selectors.elFibOptionComparisonInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),b.insertAdjacentElement(\"beforebegin\",v),v.classList.remove(\"clone\"),n.lpShowHideEl(v,1);const A=r.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(i,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{n.lpSetLoadingEl(i,0)}})};fibDeleteAllBlanks(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibDeleteAllBlanks}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=this.getDataAnswersConfig(i);a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${r}`);e.dom.select(`.${h.selectors.elQuestionFibInput}`).forEach(t=>{e.dom.remove(t,!0)}),l.meta_data={},this.setDataAnswersConfig(i,l),i.querySelector(`${h.selectors.elFibBlankOptions}`).querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{n.lpSetLoadingEl(s,0)}})}})}fibClearContent(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibClearAllContent}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=this.getDataAnswersConfig(i);a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){window.tinymce.get(`lp-question-fib-input-${r}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(i,l),i.querySelector(`${h.selectors.elFibBlankOptions}`).querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const e=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:e,callBackCompleted:()=>{n.lpSetLoadingEl(s,0)}})}})}fibDeleteBlank(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibOptionDelete}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=(i.querySelector(`${h.selectors.elAnswersConfig}`),this.getDataAnswersConfig(i)),c=s.closest(`${h.selectors.elFibBlankOptionItem}`),d=c.dataset.id;a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${r}`),t=e.dom.select(`.${h.selectors.elQuestionFibInput}[data-id=\"${d}\"]`);t[0]&&e.dom.remove(t[0],!0),c.remove(),l.meta_data=l.meta_data||{},l.meta_data[d]&&delete l.meta_data[d],this.setDataAnswersConfig(i,l);const o=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(c,1),this.fibSaveContent({e:null,target:o,callBackCompleted:()=>{n.lpSetLoadingEl(c,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elFibOptionTitleInput}`);if(!n)return;const s=n.closest(`${h.selectors.elFibBlankOptionItem}`);if(!s)return;const i=n.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const a=n.value.trim(),r=s.dataset.id,l=i.dataset.questionId,c=window.tinymce.get(`lp-question-fib-input-${l}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);c[0]&&(c[0].textContent=a),clearTimeout(u),u=setTimeout(()=>{const e=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(e){const{e:t,target:o,callBackCompleted:i=null}=e,a=o.closest(`${h.selectors.elBtnFibSaveContent}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionEditMain}`),c=r.dataset.questionId,d=this.getDataAnswersConfig(r);if(!d)return;const u=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${c}`);d.title=u.getContent();const p=r.querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`);p&&p.forEach(e=>{const t=e.dataset.id,o=e.querySelector(`${h.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${h.selectors.elFibOptionComparisonInput}:checked`);d.meta_data[t].match_case=o.checked?1:0,d.meta_data[t].comparison=n.value}),i||n.lpSetLoadingEl(a,1);const m={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;this.setDataAnswersConfig(r,d),s.W(t,o)},error:e=>{s.W(e,\"error\")},completed:()=>{i&&\"function\"==typeof i?i():n.lpSetLoadingEl(a,0)}},w={action:\"update_question_answers_config\",question_id:c,answers:d,args:{id_url:l}};window.lpAJAXG.fetchAJAX(w,m)}fibShowHideMatchCaseOption(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elFibOptionMatchCaseInput}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionFibOptionDetail}`),a=i.querySelector(`${h.selectors.elFibOptionMatchCaseWrap}`);i&&a&&(s.checked?n.lpShowHideEl(a,1):n.lpShowHideEl(a,0),s.closest(`${h.selectors.elQuestionEditMain}`).querySelector(`${h.selectors.elBtnFibSaveContent}`).click())}randomString(e=10){let t=\"\";for(let o=0;o\u003Ce;o++)t+=\"abcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(36*Math.random()));return t}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const m=new h;n.lpOnElementReady(h.selectors.elEditQuestionWrap,e=>{const t=h.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&m.init()})},2603(e,t,o){\"use strict\";o.d(t,{W:()=>a});var n=o(7736),s=o.n(n);o(4316);const i={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},a=(e,t=\"success\",o)=>{let n=i;o&&(n={...n,...o}),new(s())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()}},4223(e,t,o){\"use strict\";o.d(t,{eventHandlers:()=>c,lpOnElementReady:()=>i,lpSetLoadingEl:()=>r,lpShowHideEl:()=>a,toggleCollapse:()=>l});const n=\"lp-hidden\",s=\"loading\",i=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},a=(e,t=0)=>{e&&(t?e.classList.remove(n):e.classList.add(n))},r=(e,t)=>{e&&(t?e.classList.add(s):e.classList.remove(s))},l=(e,t,o=\"\",n=[],s)=>{if(o||(o=\".lp-trigger-toggle\"),n&&n.length>0)for(const e of n)if(t.closest(e))return;const i=t.closest(o);if(!i)return;const a=i.closest(\".lp-section-toggle\");a&&(a.classList.toggle(\"lp-collapse\"),\"function\"==typeof s&&s(a))},c=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})}},9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),s=o.n(n),i=o(6314),a=o.n(i)()(s());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,i){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=i),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},246(e,t,o){\"use strict\";function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},s.apply(null,arguments)}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}o.d(t,{Ay:()=>st});var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),h=l(\u002FiP(ad|od|hone)\u002Fi),m=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function g(e,t,o){e.addEventListener(t,o,!c&&w)}function f(e,t,o){e.removeEventListener(t,o,!c&&w)}function b(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function v(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&b(e,t):b(e,t))||n&&e===o)return e;if(e===o)break}while(e=v(e))}return null}var k,E=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(E,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(E,\" \")}}function S(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function A(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=S(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var s=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return s&&new s(o)}function x(e,t,o){if(e){var n=e.getElementsByTagName(t),s=0,i=n.length;if(o)for(;s\u003Ci;s++)o(n[s],s);return n}return[]}function T(){return document.scrollingElement||document.documentElement}function I(e,t,o,n,s){if(e.getBoundingClientRect||e===window){var i,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==T()?(a=(i=e.getBoundingClientRect()).top,r=i.left,l=i.bottom,d=i.right,u=i.height,p=i.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(s=s||e.parentNode,!c))do{if(s&&s.getBoundingClientRect&&(\"none\"!==S(s,\"transform\")||o&&\"static\"!==S(s,\"position\"))){var h=s.getBoundingClientRect();a-=h.top+parseInt(S(s,\"border-top-width\")),r-=h.left+parseInt(S(s,\"border-left-width\")),l=a+i.height,d=r+i.width;break}}while(s=s.parentNode);if(n&&e!==window){var m=A(s||e),w=m&&m.a,g=m&&m.d;m&&(l=(a\u002F=g)+(u\u002F=g),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function B(e,t,o){for(var n=D(e,!0),s=I(e)[t];n;){var i=I(n)[o];if(!(\"top\"===o||\"left\"===o?s>=i:s\u003C=i))return n;if(n===T())break;n=D(n,!1)}return!1}function $(e,t,o,n){for(var s=0,i=0,a=e.children;i\u003Ca.length;){if(\"none\"!==a[i].style.display&&a[i]!==Me.ghost&&(n||a[i]!==Me.dragged)&&y(a[i],o.draggable,e,!1)){if(s===t)return a[i];s++}i++}return null}function q(e,t){for(var o=e.lastElementChild;o&&(o===Me.ghost||\"none\"===S(o,\"display\")||t&&!b(o,t));)o=o.previousElementSibling;return o||null}function L(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===Me.clone||t&&!b(e,t)||o++;return o}function _(e){var t=0,o=0,n=T();if(e)do{var s=A(e),i=s.a,a=s.d;t+=e.scrollLeft*i,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function D(e,t){if(!e||!e.getBoundingClientRect)return T();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var s=S(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==s.overflowX||\"scroll\"==s.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==s.overflowY||\"scroll\"==s.overflowY)){if(!o.getBoundingClientRect||o===document.body)return T();if(n||t)return o;n=!0}}}while(o=o.parentNode);return T()}function O(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function P(e,t){return function(){if(!k){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),k=setTimeout(function(){k=void 0},t)}}}function M(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function Q(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function N(e,t,o){var n={};return Array.from(e.children).forEach(function(s){var i,a,r,l;if(y(s,t.draggable,e,!1)&&!s.animated&&s!==o){var c=I(s);n.left=Math.min(null!==(i=n.left)&&void 0!==i?i:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var H=\"Sortable\"+(new Date).getTime();var F=[],z={initializeByDefault:!0},j={mount:function(e){for(var t in z)z.hasOwnProperty(t)&&!(t in e)&&(e[t]=z[t]);F.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),F.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var s=e+\"Global\";F.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][s]&&t[n.pluginName][s](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var i in F.forEach(function(n){var i=n.pluginName;if(e.options[i]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[i]=a,s(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(i)){var a=this.modifyOption(e,i,e.options[i]);void 0!==a&&(e.options[i]=a)}},getEventProperties:function(e,t){var o={};return F.forEach(function(n){\"function\"==typeof n.eventProperties&&s(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return F.forEach(function(s){e[s.pluginName]&&s.optionListeners&&\"function\"==typeof s.optionListeners[t]&&(n=s.optionListeners[t].call(e[s.pluginName],o))}),n}};var W=[\"evt\"],X=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,s=function(e,t){if(null==e)return{};var o,n,s=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n\u003Ci.length;n++)o=i[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}(o,W);j.pluginEvent.bind(Me)(e,t,a({dragEl:Y,parentEl:V,ghostEl:U,rootEl:J,nextEl:G,lastDownEl:Z,cloneEl:K,cloneHidden:ee,dragStarted:he,putSortable:ae,activeSortable:Me.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se,hideGhostForTarget:_e,unhideGhostForTarget:De,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){R({sortable:t,name:e,originalEvent:n})}},s))};function R(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,s=e.targetEl,i=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,h=e.oldDraggableIndex,m=e.newDraggableIndex,w=e.originalEvent,g=e.putSortable,f=e.extraEventProperties;if(t=t||o&&o[H]){var b,v=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(b=document.createEvent(\"Event\")).initEvent(n,!0,!0):b=new CustomEvent(n,{bubbles:!0,cancelable:!0}),b.to=r||o,b.from=l||o,b.item=s||o,b.clone=i,b.oldIndex=u,b.newIndex=p,b.oldDraggableIndex=h,b.newDraggableIndex=m,b.originalEvent=w,b.pullMode=g?g.lastPutMode:void 0;var k=a(a({},f),j.getEventProperties(n,t));for(var E in k)b[E]=k[E];o&&o.dispatchEvent(b),v[y]&&v[y].call(t,b)}}(a({putSortable:ae,cloneEl:K,targetEl:Y,rootEl:J,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se},e))}var Y,V,U,J,G,Z,K,ee,te,oe,ne,se,ie,ae,re,le,ce,de,ue,pe,he,me,we,ge,fe,be=!1,ve=!1,ye=[],ke=!1,Ee=!1,Ce=[],Se=!1,Ae=[],xe=\"undefined\"!=typeof document,Te=h,Ie=d||c?\"cssFloat\":\"float\",Be=xe&&!m&&!h&&\"draggable\"in document.createElement(\"div\"),$e=function(){if(xe){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),qe=function(e,t){var o=S(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),s=$(e,0,t),i=$(e,1,t),a=s&&S(s),r=i&&S(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+I(s).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+I(i).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(s&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!i||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return s&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Ie]||i&&\"none\"===o[Ie]&&l+c>n)?\"vertical\":\"horizontal\"},Le=function(e){function t(e,o){return function(n,s,i,a){var r=n.options.group.name&&s.options.group.name&&n.options.group.name===s.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,s,i,a),o)(n,s,i,a);var l=(o?n:s).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},_e=function(){!$e&&U&&S(U,\"display\",\"none\")},De=function(){!$e&&U&&S(U,\"display\",\"\")};xe&&!m&&document.addEventListener(\"click\",function(e){if(ve)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),ve=!1,!1},!0);var Oe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(s=e.clientX,i=e.clientY,ye.some(function(e){var t=e[H].options.emptyInsertThreshold;if(t&&!q(e)){var o=I(e),n=s>=o.left-t&&s\u003C=o.right+t,r=i>=o.top-t&&i\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[H]._onDragOver(o)}}var s,i,a},Pe=function(e){Y&&Y.parentNode[H]._isOutsideThisEl(e.target)};function Me(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=s({},t),e[H]=this;var o,n,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return qe(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Me.supportPointer&&\"PointerEvent\"in window&&(!p||h),emptyInsertThreshold:5};for(var r in j.initializePlugins(this,e,i),i)!(r in t)&&(t[r]=i[r]);for(var l in Le(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&Be,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?g(e,\"pointerdown\",this._onTapStart):(g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),s(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==S(e,\"display\")&&e!==Me.ghost){n.push({target:e,rect:I(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=A(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var s=!1,i=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=I(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=A(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&O(l,r)&&!O(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),O(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(s=!0,i=Math.max(i,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),s?o=setTimeout(function(){\"function\"==typeof e&&e()},i):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){S(e,\"transition\",\"\"),S(e,\"transform\",\"\");var s=A(this.el),i=s&&s.a,a=s&&s.d,r=(t.left-o.left)\u002F(i||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,S(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),S(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),S(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){S(e,\"transition\",\"\"),S(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function Qe(e,t,o,n,s,i,a,r){var l,u,p=e[H],h=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=s||t,l.relatedRect=i||I(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),h&&(u=h.call(p,l,a)),u}function Ne(e){e.draggable=!1}function He(){Se=!1}function Fe(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function ze(e){return setTimeout(e,0)}function je(e){return clearTimeout(e)}Me.prototype={constructor:Me,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(me=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,s=n.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Ae.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Ae.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(i)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||Z===r)){if(te=L(r),ne=L(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return R({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),X(\"filter\",t,{evt:e}),void(s&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return R({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),X(\"filter\",t,{evt:e}),!0})))return void(s&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,s=this,i=s.el,a=s.options,r=i.ownerDocument;if(o&&!Y&&o.parentNode===i){var l=I(o);if(J=i,V=(Y=o).parentNode,G=Y.nextSibling,Z=o,ie=a.group,Me.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){X(\"delayEnded\",s,{evt:e}),Me.eventCanceled?s._onDrop():(s._disableDelayedDragEvents(),!u&&s.nativeDraggable&&(Y.draggable=!0),s._triggerDragStart(e,t),R({sortable:s,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){x(Y,e.trim(),Ne)}),g(r,\"dragover\",Oe),g(r,\"mousemove\",Oe),g(r,\"touchmove\",Oe),a.supportPointer?(g(r,\"pointerup\",s._onDrop),!this.nativeDraggable&&g(r,\"pointercancel\",s._onDrop)):(g(r,\"mouseup\",s._onDrop),g(r,\"touchend\",s._onDrop),g(r,\"touchcancel\",s._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),X(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(Me.eventCanceled)return void this._onDrop();a.supportPointer?(g(r,\"pointerup\",s._disableDelayedDrag),g(r,\"pointercancel\",s._disableDelayedDrag)):(g(r,\"mouseup\",s._disableDelayedDrag),g(r,\"touchend\",s._disableDelayedDrag),g(r,\"touchcancel\",s._disableDelayedDrag)),g(r,\"mousemove\",s._delayedDragTouchMoveHandler),g(r,\"touchmove\",s._delayedDragTouchMoveHandler),a.supportPointer&&g(r,\"pointermove\",s._delayedDragTouchMoveHandler),s._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&Ne(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._disableDelayedDrag),f(e,\"touchend\",this._disableDelayedDrag),f(e,\"touchcancel\",this._disableDelayedDrag),f(e,\"pointerup\",this._disableDelayedDrag),f(e,\"pointercancel\",this._disableDelayedDrag),f(e,\"mousemove\",this._delayedDragTouchMoveHandler),f(e,\"touchmove\",this._delayedDragTouchMoveHandler),f(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?g(document,\"pointermove\",this._onTouchMove):g(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(g(Y,\"dragend\",this),g(J,\"dragstart\",this._onDragStart));try{document.selection?ze(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(be=!1,J&&Y){X(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&g(document,\"dragover\",Pe);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),Me.active=this,e&&this._appendGhost(),R({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,_e();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[H]._isOutsideThisEl(e),t)do{if(t[H]&&t[H]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=v(t));De()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,s=e.touches?e.touches[0]:e,i=U&&A(U,!0),a=U&&i&&i.a,r=U&&i&&i.d,l=Te&&fe&&_(fe),c=(s.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(s.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!Me.active&&!be){if(o&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(U){i?(i.e+=c-(ce||0),i.f+=d-(de||0)):i={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(i.a,\",\").concat(i.b,\",\").concat(i.c,\",\").concat(i.d,\",\").concat(i.e,\",\").concat(i.f,\")\");S(U,\"webkitTransform\",u),S(U,\"mozTransform\",u),S(U,\"msTransform\",u),S(U,\"transform\",u),ce=c,de=d,le=s}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!U){var e=this.options.fallbackOnBody?document.body:J,t=I(Y,!0,Te,!0,e),o=this.options;if(Te){for(fe=e;\"static\"===S(fe,\"position\")&&\"none\"===S(fe,\"transform\")&&fe!==document;)fe=fe.parentNode;fe!==document.body&&fe!==document.documentElement?(fe===document&&(fe=T()),t.top+=fe.scrollTop,t.left+=fe.scrollLeft):fe=T(),Ce=_(fe)}C(U=Y.cloneNode(!0),o.ghostClass,!1),C(U,o.fallbackClass,!0),C(U,o.dragClass,!0),S(U,\"transition\",\"\"),S(U,\"transform\",\"\"),S(U,\"box-sizing\",\"border-box\"),S(U,\"margin\",0),S(U,\"top\",t.top),S(U,\"left\",t.left),S(U,\"width\",t.width),S(U,\"height\",t.height),S(U,\"opacity\",\"0.8\"),S(U,\"position\",Te?\"absolute\":\"fixed\"),S(U,\"zIndex\",\"100000\"),S(U,\"pointerEvents\",\"none\"),Me.ghost=U,e.appendChild(U),S(U,\"transform-origin\",ue\u002FparseInt(U.style.width)*100+\"% \"+pe\u002FparseInt(U.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,s=o.options;X(\"dragStart\",this,{evt:e}),Me.eventCanceled?this._onDrop():(X(\"setupClone\",this),Me.eventCanceled||((K=Q(Y)).removeAttribute(\"id\"),K.draggable=!1,K.style[\"will-change\"]=\"\",this._hideClone(),C(K,this.options.chosenClass,!1),Me.clone=K),o.cloneId=ze(function(){X(\"clone\",o),Me.eventCanceled||(o.options.removeCloneOnHide||J.insertBefore(K,Y),o._hideClone(),R({sortable:o,name:\"clone\"}))}),!t&&C(Y,s.dragClass,!0),t?(ve=!0,o._loopId=setInterval(o._emulateDragOver,50)):(f(document,\"mouseup\",o._onDrop),f(document,\"touchend\",o._onDrop),f(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",s.setData&&s.setData.call(o,n,Y)),g(document,\"drop\",o),S(Y,\"transform\",\"translateZ(0)\")),be=!0,o._dragStartId=ze(o._dragStarted.bind(o,t,e)),g(document,\"selectstart\",o),he=!0,window.getSelection().removeAllRanges(),p&&S(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,s,i=this.el,r=e.target,l=this.options,c=l.group,d=Me.active,u=ie===c,p=l.sort,h=ae||d,m=this,w=!1;if(!Se){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,i,!0),F(\"dragOver\"),Me.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||m._ignoreWhileAnimating===r)return j(!1);if(ve=!1,d&&!l.disabled&&(u?p||(n=V!==J):ae===this||(this.lastPutMode=ie.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(s=\"vertical\"===this._getDirection(e,r),t=I(Y),F(\"dragOverValid\"),Me.eventCanceled)return w;if(n)return V=J,z(),this._hideClone(),F(\"revert\"),Me.eventCanceled||(G?J.insertBefore(Y,G):J.appendChild(Y)),j(!0);var g=q(i,l.draggable);if(!g||function(e,t,o){var n=I(q(o.el,o.options.draggable)),s=N(o.el,o.options,U);return t?e.clientX>s.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>s.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,s,this)&&!g.animated){if(g===Y)return j(!1);if(g&&i===e.target&&(r=g),r&&(o=I(r)),!1!==Qe(J,i,Y,t,r,o,e,!!r))return z(),g&&g.nextSibling?i.insertBefore(Y,g.nextSibling):i.appendChild(Y),V=i,W(),j(!0)}else if(g&&function(e,t,o){var n=I($(o.el,0,o.options,!0)),s=N(o.el,o.options,U);return t?e.clientX\u003Cs.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Cs.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,s,this)){var f=$(i,0,l,!0);if(f===Y)return j(!1);if(o=I(r=f),!1!==Qe(J,i,Y,t,r,o,e,!1))return z(),i.insertBefore(Y,f),V=i,W(),j(!0)}else if(r.parentNode===i){o=I(r);var b,v,k,E=Y.parentNode!==i,A=!function(e,t,o){var n=o?e.left:e.top,s=o?e.right:e.bottom,i=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||s===r||n+i\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,s),x=s?\"top\":\"left\",T=B(r,\"top\",\"top\")||B(Y,\"top\",\"top\"),_=T?T.scrollTop:void 0;if(me!==r&&(v=o[x],ke=!1,Ee=!A&&l.invertSwap||E),b=function(e,t,o,n,s,i,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&ge\u003Cc*s){if(!ke&&(1===we?l>d+c*i\u002F2:l\u003Cu-c*i\u002F2)&&(ke=!0),ke)p=!0;else if(1===we?l\u003Cd+ge:l>u-ge)return-we}else if(l>d+c*(1-s)\u002F2&&l\u003Cu-c*(1-s)\u002F2)return function(e){return L(Y)\u003CL(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*i\u002F2||l>u-c*i\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,s,A?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,Ee,me===r),0!==b){var D=L(Y);do{D-=b,k=V.children[D]}while(k&&(\"none\"===S(k,\"display\")||k===U))}if(0===b||k===r)return j(!1);me=r,we=b;var O=r.nextElementSibling,P=!1,Q=Qe(J,i,Y,t,r,o,e,P=1===b);if(!1!==Q)return 1!==Q&&-1!==Q||(P=1===Q),Se=!0,setTimeout(He,30),z(),P&&!O?i.appendChild(Y):r.parentNode.insertBefore(Y,P?O:r),T&&M(T,0,_-T.scrollTop),V=Y.parentNode,void 0===v||Ee||(ge=Math.abs(v-I(r)[x])),W(),j(!0)}if(i.contains(Y))return j(!1)}return!1}function F(l,c){X(l,m,a({evt:e,isOwner:u,axis:s?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:h,target:r,completed:j,onMove:function(o,n){return Qe(J,i,Y,t,o,I(o),e,n)},changed:W},c))}function z(){F(\"dragOverAnimationCapture\"),m.captureAnimationState(),m!==h&&h.captureAnimationState()}function j(t){return F(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(m),m!==h&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==m&&m!==Me.active?ae=m:m===Me.active&&ae&&(ae=null),h===m&&(m._ignoreWhileAnimating=r),m.animateAll(function(){F(\"dragOverAnimationComplete\"),m._ignoreWhileAnimating=null}),m!==h&&(h.animateAll(),h._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===i&&!r.animated)&&(me=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[H]._isOutsideThisEl(e.target),!t&&Oe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function W(){oe=L(Y),se=L(Y,l.draggable),R({sortable:m,name:\"change\",toEl:i,newIndex:oe,newDraggableIndex:se,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){f(document,\"mousemove\",this._onTouchMove),f(document,\"touchmove\",this._onTouchMove),f(document,\"pointermove\",this._onTouchMove),f(document,\"dragover\",Oe),f(document,\"mousemove\",Oe),f(document,\"touchmove\",Oe)},_offUpEvents:function(){var e=this.el.ownerDocument;f(e,\"mouseup\",this._onDrop),f(e,\"touchend\",this._onDrop),f(e,\"pointerup\",this._onDrop),f(e,\"pointercancel\",this._onDrop),f(e,\"touchcancel\",this._onDrop),f(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=L(Y),se=L(Y,o.draggable),X(\"drop\",this,{evt:e}),V=Y&&Y.parentNode,oe=L(Y),se=L(Y,o.draggable),Me.eventCanceled||(be=!1,Ee=!1,ke=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),je(this.cloneId),je(this._dragStartId),this.nativeDraggable&&(f(document,\"drop\",this),f(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&S(document.body,\"user-select\",\"\"),S(Y,\"transform\",\"\"),e&&(he&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),U&&U.parentNode&&U.parentNode.removeChild(U),(J===V||ae&&\"clone\"!==ae.lastPutMode)&&K&&K.parentNode&&K.parentNode.removeChild(K),Y&&(this.nativeDraggable&&f(Y,\"dragend\",this),Ne(Y),Y.style[\"will-change\"]=\"\",he&&!be&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),R({sortable:this,name:\"unchoose\",toEl:V,newIndex:null,newDraggableIndex:null,originalEvent:e}),J!==V?(oe>=0&&(R({rootEl:V,name:\"add\",toEl:V,fromEl:J,originalEvent:e}),R({sortable:this,name:\"remove\",toEl:V,originalEvent:e}),R({rootEl:V,name:\"sort\",toEl:V,fromEl:J,originalEvent:e}),R({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(R({sortable:this,name:\"update\",toEl:V,originalEvent:e}),R({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),Me.active&&(null!=oe&&-1!==oe||(oe=te,se=ne),R({sortable:this,name:\"end\",toEl:V,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){X(\"nulling\",this),J=Y=V=U=G=K=Z=ee=re=le=he=oe=se=te=ne=me=we=ae=ie=Me.dragged=Me.ghost=Me.clone=Me.active=null;var e=this.el;Ae.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Ae.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,s=o.length,i=this.options;n\u003Cs;n++)y(e=o[n],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||Fe(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var s=n.children[t];y(s,this.options.draggable,n,!1)&&(o[e]=s)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=j.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Le(o)},destroy:function(){X(\"destroy\",this);var e=this.el;e[H]=null,f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart),f(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(X(\"hideClone\",this),Me.eventCanceled)return;S(K,\"display\",\"none\"),this.options.removeCloneOnHide&&K.parentNode&&K.parentNode.removeChild(K),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(X(\"showClone\",this),Me.eventCanceled)return;Y.parentNode!=J||this.options.group.revertClone?G?J.insertBefore(K,G):J.appendChild(K):J.insertBefore(K,Y),this.options.group.revertClone&&this.animate(Y,K),S(K,\"display\",\"\"),ee=!1}}else this._hideClone()}},xe&&g(document,\"touchmove\",function(e){(Me.active||be)&&e.cancelable&&e.preventDefault()}),Me.utils={on:g,off:f,css:S,find:x,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:P,closest:y,toggleClass:C,clone:Q,index:L,nextTick:ze,cancelNextTick:je,detectDirection:qe,getChild:$,expando:H},Me.get=function(e){return e[H]},Me.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(Me.utils=a(a({},Me.utils),e.utils)),j.mount(e)})},Me.create=function(e,t){return new Me(e,t)},Me.version=\"1.15.7\";var We,Xe,Re,Ye,Ve,Ue,Je=[],Ge=!1;function Ze(){Je.forEach(function(e){clearInterval(e.pid)}),Je=[]}function Ke(){clearInterval(Ue)}var et=P(function(e,t,o,n){if(t.scroll){var s,i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=T(),d=!1;Xe!==o&&(Xe=o,Ze(),We=t.scroll,s=t.scrollFn,!0===We&&(We=D(o,!0)));var u=0,p=We;do{var h=p,m=I(h),w=m.top,g=m.bottom,f=m.left,b=m.right,v=m.width,y=m.height,k=void 0,E=void 0,C=h.scrollWidth,A=h.scrollHeight,x=S(h),B=h.scrollLeft,$=h.scrollTop;h===c?(k=v\u003CC&&(\"auto\"===x.overflowX||\"scroll\"===x.overflowX||\"visible\"===x.overflowX),E=y\u003CA&&(\"auto\"===x.overflowY||\"scroll\"===x.overflowY||\"visible\"===x.overflowY)):(k=v\u003CC&&(\"auto\"===x.overflowX||\"scroll\"===x.overflowX),E=y\u003CA&&(\"auto\"===x.overflowY||\"scroll\"===x.overflowY));var q=k&&(Math.abs(b-i)\u003C=r&&B+v\u003CC)-(Math.abs(f-i)\u003C=r&&!!B),L=E&&(Math.abs(g-a)\u003C=r&&$+y\u003CA)-(Math.abs(w-a)\u003C=r&&!!$);if(!Je[u])for(var _=0;_\u003C=u;_++)Je[_]||(Je[_]={});Je[u].vx==q&&Je[u].vy==L&&Je[u].el===h||(Je[u].el=h,Je[u].vx=q,Je[u].vy=L,clearInterval(Je[u].pid),0==q&&0==L||(d=!0,Je[u].pid=setInterval(function(){n&&0===this.layer&&Me.active._onTouchMove(Ve);var t=Je[this.layer].vy?Je[this.layer].vy*l:0,o=Je[this.layer].vx?Je[this.layer].vx*l:0;\"function\"==typeof s&&\"continue\"!==s.call(Me.dragged.parentNode[H],o,t,e,Ve,Je[this.layer].el)||M(Je[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=D(p,!1)));Ge=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,s=e.activeSortable,i=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||s;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(i(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=$(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},s(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},s(nt,{pluginName:\"removeOnSpill\"}),Me.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?g(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?g(document,\"touchmove\",this._handleFallbackAutoScroll):g(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):(f(document,\"pointermove\",this._handleFallbackAutoScroll),f(document,\"touchmove\",this._handleFallbackAutoScroll),f(document,\"mousemove\",this._handleFallbackAutoScroll)),Ke(),Ze(),clearTimeout(k),k=void 0},nulling:function(){Ve=Xe=We=Ge=Ue=Re=Ye=null,Je.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,s=(e.touches?e.touches[0]:e).clientY,i=document.elementFromPoint(n,s);if(Ve=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,i,t);var a=D(i,!0);!Ge||Ue&&n===Re&&s===Ye||(Ue&&Ke(),Ue=setInterval(function(){var i=D(document.elementFromPoint(n,s),!0);i!==a&&(a=i,Ze()),et(e,o.options,i,t)},10),Re=n,Ye=s)}else{if(!this.options.bubbleScroll||D(i,!0)===T())return void Ze();et(e,this.options,D(i,!1),!1)}}},s(e,{pluginName:\"scroll\",initializeByDefault:!0})}),Me.mount(nt,ot);const st=Me},4316(e,t,o){\"use strict\";var n=o(5072),s=o.n(n),i=o(7825),a=o.n(i),r=o(7659),l=o.n(r),c=o(5056),d=o.n(c),u=o(540),p=o.n(u),h=o(1113),m=o.n(h),w=o(9455),g={};g.styleTagTransform=m(),g.setAttributes=d(),g.insert=l().bind(null,\"head\"),g.domAPI=a(),g.insertStyleElement=p(),s()(w.A,g),w.A&&w.A.locals&&w.A.locals},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var i={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=i[c]||0,u=\"\".concat(c,\" \").concat(d);i[c]=d+1;var p=o(u),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(h);else{var m=s(h,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:m,references:1})}a.push(u)}return a}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var i=n(e=e||[],s=s||{});return function(e){e=e||[];for(var a=0;a\u003Ci.length;a++){var r=o(i[a]);t[r].references--}for(var l=n(e,s),c=0;c\u003Ci.length;c++){var d=o(i[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}i=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var i=o.sourceMap;i&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),i=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=i+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=i+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],h=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,g=e=>w(e)?e.toPromise():Promise.resolve(e),f=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${a.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(a.popup),E=()=>y(a.icon),C=()=>y(a.title),S=()=>y(a[\"html-container\"]),A=()=>y(a.image),x=()=>y(a[\"progress-steps\"]),T=()=>y(a[\"validation-message\"]),I=()=>v(`.${a.actions} .${a.confirm}`),B=()=>v(`.${a.actions} .${a.cancel}`),$=()=>v(`.${a.actions} .${a.deny}`),q=()=>v(`.${a.loader}`),L=()=>y(a.actions),_=()=>y(a.footer),D=()=>y(a[\"timer-progress-bar\"]),O=()=>y(a.close),P=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},M=()=>H(document.body,a.shown)&&!H(document.body,a[\"toast-shown\"])&&!H(document.body,a[\"no-backdrop\"]),Q=()=>{const e=k();return!!e&&H(e,a.toast)},N=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},H=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},F=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?X(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},z=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},j=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},W=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},X=(e,t)=>{W(e,t,!0)},R=(e,t)=>{W(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&H(n,t))return n}},V=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},U=(e,t=\"flex\")=>{e&&(e.style.display=t)},J=e=>{e&&(e.style.display=\"none\")},G=(e,t=\"block\")=>{e&&new MutationObserver(()=>{K(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},Z=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},K=(e,t,o=\"flex\")=>{t?U(e,o):J(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=D();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ie=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),R([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&X(o,a[\"no-transition\"]),N(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(X(b(),a.rtl),n.isRTL=!0)})(s),(()=>{const e=k();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),s=e.querySelector(`.${a.range} output`),i=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=ie),o&&(o.onchange=ie),i&&(i.onchange=ie),r&&(r.onchange=ie),l&&(l.oninput=ie),n&&s&&(n.oninput=()=>{ie(),s.value=n.value},n.onchange=()=>{ie(),s.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&N(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):N(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=L(),n=q();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?U(o):J(o),F(o,t,\"actions\"),function(e,t,o){const n=I(),s=$(),i=B();n&&s&&i&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(i,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(X([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):R([e,t,o],a.styled)}(n,s,i,o),o.reverseButtons&&(o.toast?(e.insertBefore(i,n),e.insertBefore(s,n)):(e.insertBefore(i,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),N(n,t.loaderHtml||\"\"),F(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);K(e,o[`show${n}Button`],\"inline-block\"),N(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],F(e,o,`${t}Button`)}const he=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||X([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?X(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),X(e,a.center)))}(o,t.position),function(e,t){t&&X(e,a[`grow-${t}`])}(o,t.grow),F(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],ge=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);U(t),e.inputAutoFocus&&setTimeout(()=>{j(o)})},fe=(e,t)=>{const o=k();if(!o)return;const n=z(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&F(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&X(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return Y(t,a[e]||a.input)},Ee=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:f(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return Ee(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(Ee(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&Ee(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");N(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=z(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&N(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;Ee(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(i=o,parseInt(window.getComputedStyle(i).marginLeft)+parseInt(window.getComputedStyle(i).marginRight)),s=k();var i;s&&(e>n?s.style.width=`${e}px`:V(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Se=(e,t)=>{const o=S();o&&(G(o),F(o,t,\"htmlContainer\"),t.html?(re(t.html,o),U(o,\"block\")):t.text?(o.textContent=t.text,U(o,\"block\")):J(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),s=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(fe(e,t.inputAttributes),n.className=a[e],s&&J(n))}),t.input&&(s&&ge(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&R(e,n);X(e,t.icon&&r[t.icon]),Ie(e,t),xe(),F(e,t,\"icon\")},xe=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Te=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Be(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Be({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&N(e,n)},Ie=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])Z(e,o,\"background-color\",t.iconColor);Z(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Be=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let $e=!1,qe=0,Le=0,_e=0,De=0;const Oe=e=>{const t=k();if(!t)return;const o=E();if(e.target===t||o&&o.contains(e.target)){$e=!0;const o=Qe(e);qe=o.clientX,Le=o.clientY,_e=parseInt(t.style.insetInlineStart)||0,De=parseInt(t.style.insetBlockStart)||0,X(t,\"swal2-dragging\")}},Pe=e=>{const t=k();if(t&&$e){let{clientX:o,clientY:s}=Qe(e);const i=o-qe;t.style.insetInlineStart=`${_e+(n.isRTL?-i:i)}px`,t.style.insetBlockStart=`${De+(s-Le)}px`}},Me=()=>{const e=k();$e=!1,R(e,\"swal2-dragging\")},Qe=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Ne=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){V(o,\"width\",t.width),n.style.width=\"100%\";const e=q();e&&n.insertBefore(e,E())}else V(n,\"width\",t.width);V(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),J(T()),He(n,t),t.draggable&&!t.toast?(X(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Oe),document.body.addEventListener(\"mousemove\",Pe),e.addEventListener(\"mouseup\",Me),e.addEventListener(\"touchstart\",Oe),document.body.addEventListener(\"touchmove\",Pe),e.addEventListener(\"touchend\",Me)})(n)):(R(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Oe),document.body.removeEventListener(\"mousemove\",Pe),e.removeEventListener(\"mouseup\",Me),e.removeEventListener(\"touchstart\",Oe),document.body.removeEventListener(\"touchmove\",Pe),e.removeEventListener(\"touchend\",Me)})(n))}},He=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(X([document.documentElement,document.body],a[\"toast-shown\"]),X(e,a.toast)):X(e,a.modal),F(e,t,\"popup\"),\"string\"==typeof t.customClass&&X(e,t.customClass),t.icon&&X(e,a[`icon-${t.icon}`])},Fe=e=>{const t=document.createElement(\"li\");return X(t,a[\"progress-step\"]),N(t,e),t},ze=e=>{const t=document.createElement(\"li\");return X(t,a[\"progress-step-line\"]),e.progressStepsDistance&&V(t,\"width\",e.progressStepsDistance),t},je=(e,t)=>{var o;Ne(0,t),he(0,t),((e,t)=>{const o=x();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(U(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,i)=>{const r=Fe(e);if(o.appendChild(r),i===s&&X(r,a[\"active-progress-step\"]),i!==n.length-1){const e=ze(t);o.appendChild(e)}})):J(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=E();if(n){if(o&&t.icon===o.icon)return Te(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void J(n);U(n),Te(n,t),Ae(n,t),X(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",xe)}else J(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(U(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),V(o,\"width\",t.imageWidth),V(o,\"height\",t.imageHeight),o.className=a.image,F(o,t,\"image\")):J(o))})(0,t),((e,t)=>{const o=C();o&&(G(o),K(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),F(o,t,\"title\"))})(0,t),((e,t)=>{const o=O();o&&(N(o,t.closeButtonHtml||\"\"),F(o,t,\"closeButton\"),K(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Se(e,t),de(0,t),((e,t)=>{const o=_();o&&(G(o),K(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),F(o,t,\"footer\"))})(0,t);const s=k();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},We=()=>{var e;return null===(e=I())||void 0===e?void 0:e.click()},Xe=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Re=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=P();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Ve=[\"ArrowRight\",\"ArrowDown\"],Ue=[\"ArrowLeft\",\"ArrowUp\"],Je=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ge(t,e):\"Tab\"===t.key?Ze(t):[...Ve,...Ue].includes(t.key)?Ke(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ge=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=z(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;We(),e.preventDefault()}},Ze=e=>{const t=e.target,o=P();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Ke=e=>{const t=L(),o=I(),n=$(),s=B();if(!(t&&o&&n&&s))return;const i=[o,n,s];if(document.activeElement instanceof HTMLElement&&!i.includes(document.activeElement))return;const a=Ve.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(Xe.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=it(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},it=e=>{const t=e.target,o=b(),n=S();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,i){Q()?bt(e,i):(s(o).then(()=>bt(e,i)),Re(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),M()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(H(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);R(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),R([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||H(t,o.hideClass.popup))return!1;R(t,o.showClass.popup),X(t,o.hideClass.popup);const n=b();return R(n,o.showClass.backdrop),X(n,o.hideClass.backdrop),gt(e,t,o),!0};function ht(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),gt=(e,t,o)=>{var s;const i=b(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),a&&i?ft(e,t,i,Boolean(o.returnFocus),o.didClose):i&&dt(e,i,Boolean(o.returnFocus),o.didClose)},ft=(e,t,o,s,i)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,i);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Ko,t=k(),!t)return;const o=q();Q()?J(E()):yt(t,e),U(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=L(),n=q();o&&n&&(!t&&ee(I())&&(t=I()),U(o),t&&(J(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),X([e,o],a.loading))},kt=e=>e.checked?1:0,Et=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,St=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,N(s,t),s.selected=Tt(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,xt(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],i=document.createElement(\"input\"),r=document.createElement(\"label\");i.type=\"radio\",i.name=a.radio,i.value=t,Tt(t,o.inputValue)&&(i.checked=!0);const l=document.createElement(\"span\");N(l,s),l.className=a.label,r.appendChild(i),r.appendChild(l),n.appendChild(r)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,xt(e),t)};w(t.inputOptions)||f(t.inputOptions)?(vt(I()),g(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(J(o),g(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,U(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",U(o),o.focus(),e.hideLoading()}))};const xt=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=xt(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=xt(n)),t.push([o,n])}),t},Tt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),It=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return Et(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?Bt(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?$t(e,s):_t(e,s)},Bt=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>g(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?$t(e,t):_t(e,t)})},$t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt($()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Lt(e,t))):e.close({isDenied:!0,value:t})},qt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Lt=(e,t)=>{e.rejectPromise(t)},_t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>g(o.preConfirm(t,o.validationMessage))).then(o=>{ee(T())||!1===o?(e.hideLoading(),mt(e)):qt(e,void 0===o?t:o)}).catch(t=>Lt(e,t))):qt(e,t)};function Dt(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);J(t.loader),Q()?e.icon&&U(E()):Ot(t),R([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Ot=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?U(o[0],\"inline-block\"):!ee(I())&&!ee($())&&!ee(B())&&J(e.actions)};function Pt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?z(t.popup,e.input):null}function Mt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Qt(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Nt(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function Ht(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Ft(){Qt(this.getInput(),!1)}function zt(){Qt(this.getInput(),!0)}function jt(e){const t=me.domCache.get(this),o=me.innerParams.get(this);N(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&X(t.validationMessage,o.customClass.validationMessage),U(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),j(n),X(n,a.inputerror))}function Wt(){const e=me.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),R(t,a.inputerror))}const Xt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Rt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Vt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Ut=e=>Object.prototype.hasOwnProperty.call(Xt,e),Jt=e=>-1!==Rt.indexOf(e),Gt=e=>Yt[e],Zt=e=>{Ut(e)||d(`Unknown parameter \"${e}\"`)},Kt=e=>{Vt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Gt(e);t&&h(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Zt(t),e.toast&&Kt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||H(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),i=Object.assign({},n,s);to(i),t&&(t.dataset.swal2Theme=i.theme),je(this,i),me.innerParams.set(this,i),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Jt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),io(this)):ao(this)}const io=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(me,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:Ht,disableInput:zt,disableLoading:Dt,enableButtons:Nt,enableInput:Ft,getInput:Pt,handleAwaitingPromise:mt,hideLoading:Dt,rejectPromise:ht,resetValidationMessage:Wt,showValidationMessage:jt,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(Xe.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const ho=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(Xe.backdrop)}},go=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const fo=()=>{if(n.timeout)return(()=>{const e=D();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var Eo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||go(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||go(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},clickConfirm:We,clickDeny:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:L,getCancelButton:B,getCloseButton:O,getConfirmButton:I,getContainer:b,getDenyButton:$,getFocusableElements:P,getFooter:_,getHtmlContainer:S,getIcon:E,getIconContent:()=>y(a[\"icon-content\"]),getImage:A,getInputLabel:()=>y(a[\"input-label\"]),getLoader:q,getPopup:k,getProgressSteps:x,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:D,getTitle:C,getValidationMessage:T,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Gt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Jt,isValidParameter:Ut,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:fo,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?fo():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const So=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{_o(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Xt&&\"boolean\"==typeof Xt[o]?\"false\"!==n:o in Xt&&\"object\"==typeof Xt[o]?JSON.parse(n):n)}),t},xo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{_o(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Io=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(_o(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},Bo=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(_o(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},$o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(_o(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{_o(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},qo=(e,t)=>{const o={};for(const n in t){const s=t[n],i=e.querySelector(s);i&&(_o(i,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=i.innerHTML.trim())}return o},Lo=e=>{const t=So.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},_o=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Do=e=>{var t,o;const s=b(),i=k();if(!s||!i)return;\"function\"==typeof e.willOpen&&e.willOpen(i),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",i);const a=window.getComputedStyle(document.body).overflowY;if(Qo(s,i,e),setTimeout(()=>{Po(s,i)},10),M()&&(Mo(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),Q()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(i))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",i)},Oo=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Oo),t.removeEventListener(\"transitionend\",Oo),o.style.overflowY=\"auto\",R(o,a[\"no-transition\"]))},Po=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Oo),t.addEventListener(\"transitionend\",Oo)):e.style.overflowY=\"auto\"},Mo=(e,t,o)=>{(()=>{if(nt&&!H(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",X(document.body,a.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},Qo=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&X(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),U(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&X(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):U(t,\"grid\"),X([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&X([document.documentElement,document.body],a[\"height-auto\"])};var No=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),Ho=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Fo(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=No),\"url\"===e.input&&(e.inputValidator=Ho))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let zo;var jo=new WeakMap;class Wo{constructor(...t){if(o(this,jo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;zo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,i,a;this.params=n,this.isAwaitingPromise=!1,s=jo,i=this,a=this._main(zo.params),s.set(e(s,i),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),M()&&ot()}n.currentInstance=zo;const o=Ro(e,t);Fo(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Yo(zo);return je(zo,o),me.innerParams.set(zo,o),Xo(zo,s,o)}then(e){return t(jo,this).then(e)}finally(e){return t(jo,this).finally(e)}}const Xo=(e,t,o)=>new Promise((s,i)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,i),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?It(e,\"confirm\"):_t(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?It(e,\"deny\"):$t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(Xe.cancel)})(e,a)},t.closeButton.onclick=()=>{a(Xe.close)},((e,t,o)=>{e.toast?co(e,t,o):(ho(t),mo(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Re(e),!t.toast){const n=e=>Je(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:k();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?St(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||f(t.inputValue))&&(vt(I()),At(e,t))})(e,o),Do(o),Vo(n,o,a),Uo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Ro=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Lo(o),Object.assign(Ao(o),xo(o),To(o),Io(o),Bo(o),$o(o),qo(o,So))})(e),n=Object.assign({},Xt,t,o,e);return n.showClass=Object.assign({},Xt.showClass,n.showClass),n.hideClass=Object.assign({},Xt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:k(),container:b(),actions:L(),confirmButton:I(),denyButton:$(),cancelButton:B(),loader:q(),closeButton:O(),validationMessage:T(),progressSteps:x()};return me.domCache.set(e,t),t},Vo=(e,t,o)=>{const n=D();J(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(U(n),F(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Uo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Jo(e)||Go(e,t)||Ye(-1,1)):(h(\"allowEnterKey\"),void Zo())},Jo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Go=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Zo=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Wo.prototype.disableButtons=Ht,Wo.prototype.enableButtons=Nt,Wo.prototype.getInput=Pt,Wo.prototype.disableInput=zt,Wo.prototype.enableInput=Ft,Wo.prototype.hideLoading=Dt,Wo.prototype.disableLoading=Dt,Wo.prototype.showValidationMessage=jt,Wo.prototype.resetValidationMessage=Wt,Wo.prototype.close=ut,Wo.prototype.closePopup=ut,Wo.prototype.closeModal=ut,Wo.prototype.closeToast=ut,Wo.prototype.rejectPromise=ht,Wo.prototype.update=oo,Wo.prototype._destroy=so,Object.assign(Wo,Eo),Object.keys(lo).forEach(e=>{Wo[e]=function(...t){if(zo&&zo[e])return zo[e](...t)}}),Wo.DismissReason=Xe,Wo.version=\"11.26.17\";const Ko=Wo;return Ko.default=Ko,Ko}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var i=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&i>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},i=document.getElementsByClassName(\"toastify\"),a=0;a\u003Ci.length;a++){e=!0===n(i[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=i[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(i[a].style[e]=s[e]+\"px\",s[e]+=r+15):!0===n(i[a],\"toastify-left\")?(i[a].style[e]=t[e]+\"px\",t[e]+=r+15):(i[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,exports:{}};return e[n].call(i.exports,i,i.exports,o),i.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(4223),t=o(8465),n=o.n(t),s=o(246),i=o(2603),a=(o(4316),o(345));let r,l,c,d=[];class u{constructor(){this.init()}static selectors={elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elBtnAddItemsSelected:\".lp-btn-add-items-selected\",elBtnCountItemsSelected:\".lp-btn-count-items-selected\",elHeaderCountItemSelected:\".header-count-items-selected\",elSelectItem:\".lp-select-item\",elListItems:\".list-items\",elPopupItemsToSelect:\".lp-popup-items-to-select\",elSearchTitleItem:\".lp-search-title-item\",elBtnBackListItems:\".lp-btn-back-to-select-items\",elListItemsWrap:\".list-items-wrap\",elListItemsSelected:\".list-items-selected\",elItemSelectedClone:\".li-item-selected.clone\",elItemSelected:\".li-item-selected\",LPTarget:\".lp-target\"};init(){this.events()}events=()=>{u._loadedEvents||(u._loadedEvents=!0,e.eventHandlers(\"click\",[{selector:u.selectors.elBtnShowPopupItemsToSelect,callBack:this.showPopupItemsToSelect.name,class:this},{selector:u.selectors.elSelectItem,callBack:this.selectItemsFromList.name,class:this},{selector:u.selectors.elBtnCountItemsSelected,callBack:this.showItemsSelected.name,class:this},{selector:u.selectors.elBtnBackListItems,callBack:this.backToSelectItems.name,class:this},{selector:u.selectors.elItemSelected,callBack:this.removeItemSelected.name,class:this},{selector:\".tabs .tab\",callBack:this.chooseTabItemsType.name,class:this}]),e.eventHandlers(\"keyup\",[{selector:u.selectors.elSearchTitleItem,callBack:this.searchTitleItemToSelect.name,class:this}]))};showPopupItemsToSelect=e=>{const{e:t,target:o=!1,callBack:s}=e;if(!o.closest(`${u.selectors.elBtnShowPopupItemsToSelect}`))return;const i=o.dataset.template||\"\",a=document.querySelector(i);n().fire({html:a.innerHTML,showConfirmButton:!1,showCloseButton:!0,width:\"60%\",customClass:{popup:\"lp-select-items-popup\",htmlContainer:\"lp-select-items-html-container\",container:\"lp-select-items-container\"},willOpen:()=>{r=n().getPopup();const e=r.querySelector(`${u.selectors.LPTarget}`);if(e){const t=window.lpAJAXG.getDataSetCurrent(e);t.args.paged=1,t.args.item_selecting=d||[],window.lpAJAXG.setDataSetCurrent(e,t),window.lpAJAXG.fetchAJAX(t,{success:t=>{const{data:o}=t;r.querySelector(\".lp-skeleton-animation\").remove(),e.innerHTML=o.content||\"\",this.watchItemsSelectedDataChange()}})}}}).then(e=>{e.isDismissed})};chooseTabItemsType=e=>{const{e:t,target:o,callBack:n}=e,s=o.closest(\".tab\");if(!s)return;t.preventDefault();const a=s.closest(\".tabs\");if(!a)return;const r=a.closest(`${u.selectors.elPopupItemsToSelect}`),l=r.querySelector(`${u.selectors.elSearchTitleItem}`),c=s.dataset.type;a.querySelectorAll(\".tab\").forEach(e=>{e.classList.contains(\"active\")&&e.classList.remove(\"active\")}),s.classList.add(\"active\"),l.value=\"\";const p=r.querySelector(`${u.selectors.LPTarget}`),h=window.lpAJAXG.getDataSetCurrent(p);h.args.item_type=c,h.args.paged=1,h.args.item_selecting=d||[],window.lpAJAXG.setDataSetCurrent(p,h),window.lpAJAXG.showHideLoading(p,1),window.lpAJAXG.fetchAJAX(h,{success:e=>{const{data:t}=e;p.innerHTML=t.content||\"\"},error:e=>{i.W(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(p,0),this.watchItemsSelectedDataChange()}})};selectItemsFromList=e=>{const{e:t,target:o}=e,n=o.closest(`${u.selectors.elSelectItem}`);if(!n)return;const s=n.querySelector('input[type=\"checkbox\"]');if(\"INPUT\"!==o.tagName)return void s.click();if(!n.closest(`${u.selectors.elListItems}`))return;const i={...s.dataset};if(s.checked)d.some(e=>e.id===i.id)||d.push(i);else{const e=d.findIndex(e=>e.id===i.id);-1!==e&&d.splice(e,1)}this.watchItemsSelectedDataChange()};searchTitleItemToSelect=e=>{const{e:t,target:o}=e,n=o.closest(u.selectors.elSearchTitleItem);if(!n)return;const s=r.querySelector(`${u.selectors.LPTarget}`);clearTimeout(l),l=setTimeout(()=>{const e=window.lpAJAXG.getDataSetCurrent(s);e.args.search_title=n.value.trim(),e.args.item_selecting=d,e.args.paged=1,window.lpAJAXG.setDataSetCurrent(s,e),window.lpAJAXG.showHideLoading(s,1),window.lpAJAXG.fetchAJAX(e,{success:e=>{const{data:t}=e;s.innerHTML=t.content||\"\"},error:e=>{i.W(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(s,0)}})},800)};showItemsSelected=t=>{const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnCountItemsSelected}`);if(!s)return;const i=r.querySelector(`${u.selectors.elBtnBackListItems}`),a=r.querySelector(\".tabs\"),l=r.querySelector(`${u.selectors.elListItemsWrap}`),c=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),p=r.querySelector(`${u.selectors.elListItemsSelected}`),h=p.querySelector(`${u.selectors.elItemSelectedClone}`);c.innerHTML=s.innerHTML,e.lpShowHideEl(l,0),e.lpShowHideEl(s,0),e.lpShowHideEl(a,0),e.lpShowHideEl(i,1),e.lpShowHideEl(c,1),e.lpShowHideEl(p,1),p.querySelectorAll(`${u.selectors.elItemSelected}:not(.clone)`).forEach(e=>{e.remove()}),d.forEach(t=>{const o=h.cloneNode(!0);o.classList.remove(\"clone\"),Object.entries(t).forEach(([e,t])=>{o.dataset[e]=t}),o.querySelector(\".title-display\").innerHTML=t.title,e.lpShowHideEl(o,1),h.insertAdjacentElement(\"beforebegin\",o)})};backToSelectItems=t=>{const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnBackListItems}`);if(!s)return;const i=r.querySelector(`${u.selectors.elBtnCountItemsSelected}`),a=r.querySelector(\".tabs\"),l=r.querySelector(`${u.selectors.elListItemsWrap}`),c=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),d=r.querySelector(`${u.selectors.elListItemsSelected}`);e.lpShowHideEl(i,1),e.lpShowHideEl(l,1),e.lpShowHideEl(a,1),e.lpShowHideEl(s,0),e.lpShowHideEl(c,0),e.lpShowHideEl(d,0)};removeItemSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${u.selectors.elItemSelected}`);if(!n)return;const s=n.dataset,i=d.findIndex(e=>e.id===s.id);-1!==i&&d.splice(i,1),n.remove(),this.watchItemsSelectedDataChange()};watchItemsSelectedDataChange=()=>{const e=r.querySelector(`${u.selectors.elBtnAddItemsSelected}`),t=r.querySelector(`${u.selectors.elBtnCountItemsSelected}`),o=t.querySelector(\"span\"),n=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),s=r.querySelector(`${u.selectors.LPTarget}`);0!==d.length?(t.disabled=!1,e.disabled=!1,e.classList.add(\"active\"),o.textContent=`(${d.length})`,n.innerHTML=t.innerHTML):(t.disabled=!0,e.disabled=!0,e.classList.remove(\"active\"),o.textContent=\"\",n.textContent=\"\"),r.querySelector(`${u.selectors.elListItems}`).querySelectorAll('input[type=\"checkbox\"]').forEach(e=>{const t=e.dataset,o=d.some(e=>e.id===t.id);e.checked=o});const i=window.lpAJAXG.getDataSetCurrent(s);i.args.item_selecting=d,window.lpAJAXG.setDataSetCurrent(s,i)};addItemsSelectedToSection=e=>{const{e:t,target:o,callBackHandle:s}=e;r&&(n().close(),\"function\"==typeof s&&(s(d),d=[]))}}const p=new u;p.init();class h{constructor(){this.idUrlHandle=\"edit-quiz-questions\",this.elEditQuizWrap=null,this.elEditListQuestions=null,this.quizID=null}static selectors={elEditQuizWrap:\".lp-edit-quiz-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionItem:\".lp-question-item\",elQuestionToggle:\".lp-question-toggle\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnCancelUpdateQuestionTitle:\".lp-btn-cancel-update-question-title\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\"};init(){e.lpOnElementReady(h.selectors.elEditQuizWrap,e=>{this.elEditQuizWrap=e,this.elEditListQuestions=this.elEditQuizWrap.querySelector(h.selectors.elEditListQuestions);const t=this.elEditQuizWrap.closest(h.selectors.LPTarget),o=window.lpAJAXG.getDataSetCurrent(t);this.quizID=o.args.quiz_id,this.sortAbleQuestion(),c=new a.f,c.init(),e.querySelectorAll(`${h.selectors.elQuestionEditMain}`).forEach(e=>{c.sortAbleQuestionAnswer(e)}),this.events()})}events(){h._loadedEvents||(h._loadedEvents=!0,e.eventHandlers(\"click\",[{selector:h.selectors.elQuestionToggleAll,class:this,callBack:this.toggleQuestionAll.name},{selector:h.selectors.elBtnAddQuestion,class:this,callBack:this.addQuestion.name},{selector:h.selectors.elBtnRemoveQuestion,class:this,callBack:this.removeQuestion.name},{selector:h.selectors.elBtnUpdateQuestionTitle,class:this,callBack:this.updateQuestionTitle.name},{selector:h.selectors.elBtnCancelUpdateQuestionTitle,class:this,callBack:this.cancelChangeTitleQuestion.name},{selector:u.selectors.elBtnAddItemsSelected,class:p,callBack:p.addItemsSelectedToSection.name,callBackHandle:this.addQuestionsSelectedToQuiz.bind(this)}]),e.eventHandlers(\"keydown\",[{selector:h.selectors.elQuestionTitleInput,class:this,callBack:this.updateQuestionTitle.name,checkIsEventEnter:!0},{selector:h.selectors.elQuestionTitleNewInput,class:this,callBack:this.addQuestion.name,checkIsEventEnter:!0}]),e.eventHandlers(\"keyup\",[{selector:h.selectors.elQuestionTitleInput,class:this,callBack:this.changeTitleQuestion.name},{selector:`${h.selectors.elQuestionTitleNewInput}, ${h.selectors.elQuestionTypeNew}`,class:this,callBack:this.checkCanAddQuestion.name}]),e.eventHandlers(\"change\",[{selector:h.selectors.elQuestionTypeNew,class:this,callBack:this.checkCanAddQuestion.name}]),document.addEventListener(\"click\",t=>{const o=t.target;e.toggleCollapse(t,o,h.selectors.elQuestionToggle,[],()=>this.checkAllQuestionsCollapsed())}))}toggleQuestionAll(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elQuestionToggleAll}`);if(!n)return;const s=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`);n.classList.toggle(`${h.selectors.elCollapse}`),s.forEach(e=>{const t=n.classList.contains(`${h.selectors.elCollapse}`);e.classList.toggle(`${h.selectors.elCollapse}`,t)})}checkAllQuestionsCollapsed(){const e=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`),t=this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionToggleAll}`);let o=!0;e.forEach(e=>{if(e.classList.contains(`${h.selectors.elCollapse}`))return o=!1,!1}),o?t.classList.remove(`${h.selectors.elCollapse}`):t.classList.add(`${h.selectors.elCollapse}`)}updateCountItems(){const e=this.elEditQuizWrap.querySelector(\".total-items\"),t=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`).length;e.dataset.count=t,e.querySelector(\".count\").textContent=t}addQuestion(t){const{e:o,target:n,callBackNest:s}=t;o.preventDefault();const a=n.closest(`.${h.selectors.elAddNewQuestion}`);if(!a)return;const r=a.querySelector(`${h.selectors.elQuestionTitleNewInput}`),l=r.value.trim();if(!l)return void i.W(r.dataset.messEmptyTitle,\"error\");const d=a.querySelector(`${h.selectors.elQuestionTypeNew}`),u=d.value;if(!u)return void i.W(d.dataset.messEmptyType,\"error\");const p=this.elEditListQuestions.querySelector(`${h.selectors.elQuestionItem}.clone`),m=p.cloneNode(!0);m.querySelector(`${h.selectors.elQuestionTitleInput}`).value=l,r.value=\"\",m.classList.remove(\"clone\"),e.lpShowHideEl(m,1),p.insertAdjacentElement(\"beforebegin\",m),e.lpSetLoadingEl(m,1);const w={success:e=>{const{message:t,status:o,data:n}=e,{question:a,html_edit_question:r}=n;if(\"error\"===o)throw`Error: ${t}`;if(\"success\"===o){m.dataset.questionId=a.ID,m.dataset.questionType=a.meta_data._lp_type,m.outerHTML=r;const t=this.elEditListQuestions.querySelector(`${h.selectors.elQuestionItem}[data-question-id=\"${a.ID}\"]`);t.classList.remove(h.selectors.elCollapse),this.updateCountItems(),c.initTinyMCE();const o=t.querySelector(`${h.selectors.elQuestionEditMain}`);c.sortAbleQuestionAnswer(o),s&&\"function\"==typeof s.success&&s.success({response:e,elQuestionItemCreated:t})}i.W(t,o)},error:e=>{m.remove(),i.W(e,\"error\"),s&&\"function\"==typeof s.error&&s.error({error:e,newQuestionItem:m})},completed:()=>{e.lpSetLoadingEl(m,0),this.checkCanAddQuestion({e:o,target:r}),s&&\"function\"==typeof s.completed&&s.completed({newQuestionItem:m})}};let g=JSON.parse(r.dataset.send);g={...g,question_title:l,question_type:u},window.lpAJAXG.fetchAJAX(g,w)}addQuestionsSelectedToQuiz(t){const o=[];t.forEach(t=>{const n=this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionItem}.clone`);if(!n)return;o.push(t.id);const s=n.cloneNode(!0),i=s.querySelector(`${h.selectors.elQuestionTitleInput}`);s.classList.remove(\"clone\"),s.dataset.questionId=t.id,i.value=t.titleSelected,e.lpSetLoadingEl(s,1),e.lpShowHideEl(s,1),n.insertAdjacentElement(\"beforebegin\",s),e.lpSetLoadingEl(s,1)});const n={success:e=>{const{message:t,status:o,data:n}=e;if(\"success\"!==o)throw`Error: ${t}`;{i.W(t,o);const{html_edit_question:e}=n;e&&Object.entries(e).forEach(([e,t])=>{this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionItem}[data-question-id=\"${e}\"]`).outerHTML=t}),this.updateCountItems(),c.initTinyMCE()}},error:e=>{i.W(e,\"error\")},completed:()=>{}},s={action:\"add_questions_to_quiz\",quiz_id:this.quizID,question_ids:o,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(s,n)}checkCanAddQuestion(e){const{e:t,target:o}=e,n=o.closest(h.selectors.elQuestionTitleNewInput)||o.closest(h.selectors.elQuestionTypeNew);if(!n)return;const s=n.closest(`.${h.selectors.elAddNewQuestion}`);if(!s)return;const i=s.querySelector(`${h.selectors.elBtnAddQuestion}`);if(!i)return;const a=s.querySelector(`${h.selectors.elQuestionTitleNewInput}`),r=s.querySelector(`${h.selectors.elQuestionTypeNew}`),l=a.value.trim(),c=r.value;l&&c?i.classList.add(\"active\"):i.classList.remove(\"active\")}removeQuestion(t){const{e:o,target:s}=t,a=s.closest(`${h.selectors.elBtnRemoveQuestion}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionItem}`);if(!r)return;const l=r.dataset.questionId;n().fire({title:a.dataset.title,text:a.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpDataAdmin.i18n.cancel,confirmButtonText:lpDataAdmin.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){e.lpSetLoadingEl(r,1);const t={success:e=>{const{message:t,status:o}=e;i.W(t,o),\"success\"===o&&(r.remove(),this.updateCountItems())},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(r,0)}},o={quiz_id:this.quizID,action:\"remove_question_from_quiz\",question_id:l,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(o,t)}})}updateQuestionTitle(t){const{e:o,target:n}=t;let s=!1;if((n.closest(`${h.selectors.elBtnUpdateQuestionTitle}`)||n.closest(`${h.selectors.elQuestionTitleInput}`)&&\"Enter\"===o.key)&&(s=!0),!s)return;o.preventDefault();const a=n.closest(`${h.selectors.elQuestionItem}`);if(!a)return;const r=a.querySelector(`${h.selectors.elQuestionTitleInput}`);if(!r)return;const l=a.dataset.questionId,c=r.value.trim(),d=r.dataset.old,u=r.dataset.messEmptyTitle;if(0===c.length)return void i.W(u,\"error\");if(c===d)return;r.blur(),e.lpSetLoadingEl(a,1);const p={success:e=>{const{message:t,status:o}=e;\"success\"===o?r.dataset.old=c:r.value=d,i.W(t,o)},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(a,0),a.classList.remove(\"editing\")}},m={quiz_id:this.quizID,action:\"update_question\",question_id:l,question_title:c,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(m,p)}changeTitleQuestion(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elQuestionTitleInput}`);if(!n)return;const s=n.closest(`${h.selectors.elQuestionItem}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}cancelChangeTitleQuestion(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elBtnCancelUpdateQuestionTitle}`);if(!n)return;const s=n.closest(`${h.selectors.elQuestionItem}`),i=s.querySelector(`${h.selectors.elQuestionTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}sortAbleQuestion(){let t,o=0;new s.Ay(this.elEditListQuestions,{handle:\".drag\",animation:150,onEnd:n=>{const s=n.item;o&&(clearTimeout(t),t=setTimeout(()=>{e.lpSetLoadingEl(s,1);const t=[];this.elEditListQuestions.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`).forEach(e=>{const o=e.dataset.questionId;o&&t.push(o)});const n={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;i.W(t,o),c.initTinyMCE()},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(s,0),o=0}},a={quiz_id:this.quizID,action:\"update_questions_position\",question_ids:t,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(a,n)},1e3))},onMove:()=>{clearTimeout(t)},onUpdate:()=>{o=1}})}}(new h).init()})()})();\n\\ No newline at end of file\n+(()=>{var e={345(e,t,o){\"use strict\";o.d(t,{f:()=>h});var n=o(4223),s=o(2603),i=o(8465),a=o.n(i),r=o(246);const l=\"edit-question\";let c,d,u,p;class h{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){h._loadedEvents||(h._loadedEvents=!0,document.querySelectorAll(`${h.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),n.eventHandlers(\"click\",[{selector:h.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:h.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:h.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:h.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:h.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:h.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:h.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:h.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:h.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:h.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:o}=e;o.closest(`${h.selectors.elQuestionEditMain}`).querySelector(`${h.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",e=>{const t=e.target;n.toggleCollapse(e,t,h.selectors.elTriggerToggle)}),n.eventHandlers(\"keyup\",[{selector:h.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:h.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:h.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),n.eventHandlers(\"keydown\",[{selector:h.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),n.eventHandlers(\"change\",[{selector:h.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce())}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",e=>{const t=e.editor.id,o=window.tinymce.get(t);if(!o)return;if(\"content\"===t)return;const s=document.querySelector(`#wp-${t}-wrap`);s&&(s.classList.add(\"tmce-active\"),s.classList.remove(\"html-active\"));const i=document.getElementById(t);if(!i)return;const a=i.closest(`${h.selectors.elQuestionEditMain}`);a&&(a.dataset.questionId,o.settings.force_p_newlines=!1,o.settings.forced_root_block=\"\",o.settings.force_br_newlines=!0,o.settings.relative_urls=!1,o.settings.remove_script_host=!1,o.settings.convert_urls=!0,o.settings.document_base_url=lpData.site_url,o.on(\"change keyup\",e=>{i.value=o.getContent(),this.autoUpdateQuestion({e,target:i})}),o.on(\"blur\",e=>{}),o.on(\"focusin\",e=>{}),o.on(\"init\",()=>{o.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${h.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),o.on(\"setcontent\",e=>{const t=this.randomString(),n=o.dom.select(`.${h.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);n[0]&&n[0].focus(),o.dom.bind(n[0],\"input\",e=>{})}),o.on(\"selectionchange\",e=>{if(c=o.selection,c.getNode().classList.contains(`${h.selectors.elQuestionFibInput}`)){const e=c.getNode().dataset.id,s=c.getNode().textContent.trim();if(0===s.length){const t=o.id.replace(`${h.selectors.elQuestionFibInput}-`,\"\"),s=document.querySelector(`${h.selectors.elQuestionEditMain}[data-question-id=\"${t}\"]`).querySelector(`${h.selectors.elFibBlankOptions}`).querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);s&&n.lpShowHideEl(s,0)}else{const o=document.getElementById(t).closest(`${h.selectors.elAnswersConfig}`).querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);if(o){const e=o.querySelector(`${h.selectors.elFibOptionTitleInput}`);e&&(e.value=s)}}}}),o.on(\"Undo\",e=>{o.getContent();const t=o.selection.getNode();if(t.classList.contains(`${h.selectors.elQuestionFibInput}`)){const e=t.dataset.id,o=document.querySelector(`${h.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);o&&n.lpShowHideEl(o,1)}}),o.on(\"Redo\",e=>{}))})}autoUpdateQuestion(e){let{e:t,target:o,key:n,value:i}=e;const a=o.closest(`${h.selectors.elAutoSaveQuestion}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(p),p=setTimeout(()=>{const e={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;s.W(t,o)},error:e=>{s.W(e,\"error\")},completed:()=>{}},t={action:\"update_question\",question_id:r,args:{id_url:l}};if(void 0===n){if(n=a.dataset.keyAutoSave,!n){if(!a.classList.contains(\"lp-editor-tinymce\"))return;const e=a.id;if(n=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${r}`,\"\").replace(\u002F-\u002Fg,\"_\"),!n)return}i=a.value}t[n]=i,window.lpAJAXG.fetchAJAX(t,e)},700)}createQuestionType(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elBtnQuestionCreateType}`);if(!n)return;const i=n.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const a=i.dataset.questionId,r=i.querySelector(`${h.selectors.elQuestionTypeNew}`);if(!r)return;const c=r.value.trim();if(!c){const e=r.dataset.messEmptyType;return void s.W(e,\"error\")}const d={success:e=>{const{message:t,status:o,data:n}=e;if(\"success\"!==o)throw`Error: ${t}`;{const{html_option_answers:e}=n;i.querySelector(`${h.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(i),s.W(t,o)}},error:e=>{s.W(e,\"error\")},completed:()=>{}},u={action:\"update_question\",question_id:a,question_type:c,args:{id_url:l}};window.lpAJAXG.fetchAJAX(u,d)}addQuestionAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;t.preventDefault();const a=i.querySelector(`${h.selectors.elQuestionAnswerTitleNewInput}`);if(!a.value.trim()){const e=a.dataset.messEmptyTitle;return void s.W(e,\"error\")}const r=o.closest(`${h.selectors.elQuestionEditMain}`),c=r.querySelector(`${h.selectors.elQuestionAnswerItem}.clone`),d=c.cloneNode(!0),u=d.querySelector(`${h.selectors.elQuestionAnswerTitleInput}`);d.classList.remove(\"clone\"),n.lpShowHideEl(d,1),n.lpSetLoadingEl(d,1),c.insertAdjacentElement(\"beforebegin\",d);const p=a.value.trim();u.value=p,a.value=\"\";const m={success:e=>{const{message:t,status:o,data:i}=e;if(\"success\"!==o)throw`Error: ${t}`;{const{question_answer:e}=i;d.dataset.answerId=e.question_answer_id,n.lpSetLoadingEl(d,0);const t=this.getDataAnswersConfig(r);t.push(e),this.setDataAnswersConfig(r,t)}s.W(t,o)},error:e=>{d.remove(),s.W(e,\"error\")},completed:()=>{}},w={action:\"add_question_answer\",question_id:r.dataset.questionId,answer_title:p,args:{id_url:l}};window.lpAJAXG.fetchAJAX(w,m)}checkCanAddAnswer(e){const{e:t,target:o}=e,n=o.closest(h.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const s=n.closest(`${h.selectors.elQuestionAnswerItemAddNew}`);if(!s)return;const i=s.querySelector(`${h.selectors.elBtnAddAnswer}`);i&&(n.value.trim()?i.classList.add(\"active\"):i.classList.remove(\"active\"))}autoUpdateAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elAutoSaveAnswer}`);if(!i)return;const a=i.closest(`${h.selectors.elQuestionAnswerItem}`);clearTimeout(d),d=setTimeout(()=>{const e=i.closest(`${h.selectors.elQuestionEditMain}`),t=e.dataset.questionId,o=this.getDataAnswersConfig(e),r=e.querySelector(`${h.selectors.elAnswersConfig}`),c=structuredClone(o),d=r.querySelectorAll(`${h.selectors.elQuestionAnswerItem}:not(.clone)`),u={};d.forEach((e,t)=>{u[e.dataset.answerId]=t+1}),o.map((t,o)=>{const n=e.querySelector(`${h.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`),s=n.querySelector(`${h.selectors.elInputAnswerSetTrue}`),i=n.querySelector(`${h.selectors.elQuestionAnswerTitleInput}`);return i&&(t.title=i.value.trim()),s&&(s.checked?t.is_true=\"yes\":t.is_true=\"\"),u[t.question_answer_id]&&(t.order=u[t.question_answer_id]),t}),n.lpSetLoadingEl(a,1);const p={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;s.W(t,o)},error:t=>{c.forEach(t=>{const o=e.querySelector(`${h.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`).querySelector(`${h.selectors.elInputAnswerSetTrue}`);return\"yes\"===t.is_true&&(o.checked=!0),t}),s.W(t,\"error\")},completed:()=>{n.lpSetLoadingEl(a,0)}},m={action:\"update_question_answers_config\",question_id:t,answers:o,args:{id_url:l}};window.lpAJAXG.fetchAJAX(m,p)},700)}sortAbleQuestionAnswer(e){let t,o=0;e.querySelectorAll(`${h.selectors.elAnswersConfig}`).forEach(e=>{new r.Ay(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;o&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${h.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{o=1}})})}deleteQuestionAnswer(e){const{e:t,target:o}=e,i=o.closest(`${h.selectors.elBtnDeleteAnswer}`);if(!i)return;const r=i.closest(`${h.selectors.elQuestionAnswerItem}`);if(!r)return;const c=i.closest(`${h.selectors.elQuestionEditMain}`),d=c.dataset.questionId,u=r.dataset.answerId;d&&u&&a().fire({title:i.dataset.title||\"Are you sure?\",text:i.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){n.lpSetLoadingEl(r,1);const e={success:e=>{const{message:t,status:o}=e;if(s.W(t,o),\"success\"===o){const e=parseInt(r.dataset.answerId);r.remove();const t=this.getDataAnswersConfig(c);if(t){const o=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(c,o)}}},error:e=>{s.W(e,\"error\")},completed:()=>{n.lpSetLoadingEl(r,0)}},t={action:\"delete_question_answer\",question_id:d,question_answer_id:u,args:{id_url:l}};window.lpAJAXG.fetchAJAX(t,e)}})}getDataAnswersConfig(e){const t=e.querySelector(`${h.selectors.elAnswersConfig}`);if(!t)return null;let o=t.dataset.answers||\"[]\";try{o=JSON.parse(o)}catch(e){o=[]}return o.meta_data||(o.meta_data={}),o}setDataAnswersConfig(e,t){const o=e.querySelector(`${h.selectors.elAnswersConfig}`);o&&(t&&\"object\"==typeof t||(t={}),o.dataset.answers=JSON.stringify(t))}fibInsertBlank=e=>{const{e:t,target:o}=e,i=o.closest(h.selectors.elBtnFibInsertBlank);if(!i)return;const a=i.dataset.defaultText,r=i.closest(h.selectors.elQuestionEditMain),l=r.dataset.questionId,d=i.dataset.messInserted,u=i.dataset.messRequireSelectText,p=`${h.selectors.elQuestionFibInput}-${l}`,m=this.randomString();let w;if(!c)return void s.W(u,\"error\");{const e=c.getNode();if(!e)return void s.W(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${p}\"]`))return void s.W(u,\"error\");if(e.classList.contains(`${h.selectors.elQuestionFibInput}`))return void s.W(d,\"error\");w=c.getContent(),0===w.length&&(w=a);const t=`\u003Cspan class=\"${h.selectors.elQuestionFibInput}\" data-id=\"${m}\">${w}\u003C\u002Fspan>`;c.setContent(t)}const f=this.getDataAnswersConfig(r);f.meta_data=f.meta_data||{},0===Object.keys(f.meta_data).length&&(f.meta_data={}),f.meta_data[m]={id:m,match_case:0,comparison:\"equal\",fill:w,index:1,open:!1},this.setDataAnswersConfig(r,f);const g=r.querySelector(`${h.selectors.elFibBlankOptions}`),b=r.querySelector(`${h.selectors.elFibBlankOptionItemClone}`),v=b.cloneNode(!0),y=g.querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).length,k=v.querySelector(`${h.selectors.elFibBlankOptionIndex}`),E=v.querySelector(`${h.selectors.elFibOptionTitleInput}`),C=v.querySelector(`${h.selectors.elFibOptionMatchCaseInput}`),S=v.querySelectorAll(`${h.selectors.elFibOptionComparisonInput}`);v.dataset.id=m,E.name=`${h.selectors.elFibOptionTitleInput}-${m}`,E.value=this.decodeHtml(w),k.textContent=y+1+\".\",C.name=`${h.selectors.elFibOptionMatchCaseInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),S.forEach(e=>{e.name=`${h.selectors.elFibOptionComparisonInput}-${m}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),b.insertAdjacentElement(\"beforebegin\",v),v.classList.remove(\"clone\"),n.lpShowHideEl(v,1);const A=r.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(i,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{n.lpSetLoadingEl(i,0)}})};fibDeleteAllBlanks(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibDeleteAllBlanks}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=this.getDataAnswersConfig(i);a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${r}`);e.dom.select(`.${h.selectors.elQuestionFibInput}`).forEach(t=>{e.dom.remove(t,!0)}),l.meta_data={},this.setDataAnswersConfig(i,l),i.querySelector(`${h.selectors.elFibBlankOptions}`).querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{n.lpSetLoadingEl(s,0)}})}})}fibClearContent(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibClearAllContent}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=this.getDataAnswersConfig(i);a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){window.tinymce.get(`lp-question-fib-input-${r}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(i,l),i.querySelector(`${h.selectors.elFibBlankOptions}`).querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const e=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(s,1),this.fibSaveContent({e:null,target:e,callBackCompleted:()=>{n.lpSetLoadingEl(s,0)}})}})}fibDeleteBlank(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elBtnFibOptionDelete}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const r=i.dataset.questionId,l=(i.querySelector(`${h.selectors.elAnswersConfig}`),this.getDataAnswersConfig(i)),c=s.closest(`${h.selectors.elFibBlankOptionItem}`),d=c.dataset.id;a().fire({title:s.dataset.title,text:s.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${r}`),t=e.dom.select(`.${h.selectors.elQuestionFibInput}[data-id=\"${d}\"]`);t[0]&&e.dom.remove(t[0],!0),c.remove(),l.meta_data=l.meta_data||{},l.meta_data[d]&&delete l.meta_data[d],this.setDataAnswersConfig(i,l);const o=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);n.lpSetLoadingEl(c,1),this.fibSaveContent({e:null,target:o,callBackCompleted:()=>{n.lpSetLoadingEl(c,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elFibOptionTitleInput}`);if(!n)return;const s=n.closest(`${h.selectors.elFibBlankOptionItem}`);if(!s)return;const i=n.closest(`${h.selectors.elQuestionEditMain}`);if(!i)return;const a=n.value.trim(),r=s.dataset.id,l=i.dataset.questionId,c=window.tinymce.get(`lp-question-fib-input-${l}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);c[0]&&(c[0].textContent=a),clearTimeout(u),u=setTimeout(()=>{const e=i.querySelector(`${h.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(e){const{e:t,target:o,callBackCompleted:i=null}=e,a=o.closest(`${h.selectors.elBtnFibSaveContent}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionEditMain}`),c=r.dataset.questionId,d=this.getDataAnswersConfig(r);if(!d)return;const u=window.tinymce.get(`${h.selectors.elQuestionFibInput}-${c}`);d.title=u.getContent();const p=r.querySelectorAll(`${h.selectors.elFibBlankOptionItem}:not(.clone)`);p&&p.forEach(e=>{const t=e.dataset.id,o=e.querySelector(`${h.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${h.selectors.elFibOptionComparisonInput}:checked`);d.meta_data[t].match_case=o.checked?1:0,d.meta_data[t].comparison=n.value}),i||n.lpSetLoadingEl(a,1);const m={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;this.setDataAnswersConfig(r,d),s.W(t,o)},error:e=>{s.W(e,\"error\")},completed:()=>{i&&\"function\"==typeof i?i():n.lpSetLoadingEl(a,0)}},w={action:\"update_question_answers_config\",question_id:c,answers:d,args:{id_url:l}};window.lpAJAXG.fetchAJAX(w,m)}fibShowHideMatchCaseOption(e){const{e:t,target:o}=e,s=o.closest(`${h.selectors.elFibOptionMatchCaseInput}`);if(!s)return;const i=s.closest(`${h.selectors.elQuestionFibOptionDetail}`),a=i.querySelector(`${h.selectors.elFibOptionMatchCaseWrap}`);i&&a&&(s.checked?n.lpShowHideEl(a,1):n.lpShowHideEl(a,0),s.closest(`${h.selectors.elQuestionEditMain}`).querySelector(`${h.selectors.elBtnFibSaveContent}`).click())}randomString(e=10){let t=\"\";for(let o=0;o\u003Ce;o++)t+=\"abcdefghijklmnopqrstuvwxyz0123456789\".charAt(Math.floor(36*Math.random()));return t}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const m=new h;n.lpOnElementReady(h.selectors.elEditQuestionWrap,e=>{const t=h.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&m.init()})},2603(e,t,o){\"use strict\";o.d(t,{W:()=>a});var n=o(7736),s=o.n(n);o(4316);const i={text:\"\",gravity:lpData.toast.gravity,position:lpData.toast.position,className:`${lpData.toast.classPrefix}`,close:1==lpData.toast.close,stopOnFocus:1==lpData.toast.stopOnFocus,duration:lpData.toast.duration},a=(e,t=\"success\",o)=>{let n=i;o&&(n={...n,...o}),new(s())({...n,text:e,className:`${lpData.toast.classPrefix} ${t}`}).showToast()}},4223(e,t,o){\"use strict\";o.d(t,{eventHandlers:()=>c,lpOnElementReady:()=>i,lpSetLoadingEl:()=>r,lpShowHideEl:()=>a,toggleCollapse:()=>l});const n=\"lp-hidden\",s=\"loading\",i=(e,t)=>{const o=document.querySelector(e);if(o)return void t(o);const n=new MutationObserver((o,n)=>{const s=document.querySelector(e);s&&(n.disconnect(),t(s))});n.observe(document.documentElement,{childList:!0,subtree:!0})},a=(e,t=0)=>{e&&(t?e.classList.remove(n):e.classList.add(n))},r=(e,t)=>{e&&(t?e.classList.add(s):e.classList.remove(s))},l=(e,t,o=\"\",n=[],s)=>{if(o||(o=\".lp-trigger-toggle\"),n&&n.length>0)for(const e of n)if(t.closest(e))return;const i=t.closest(o);if(!i)return;const a=i.closest(\".lp-section-toggle\");a&&(a.classList.toggle(\"lp-collapse\"),\"function\"==typeof s&&s(a))},c=(e,t)=>{document.addEventListener(e,o=>{const n=o.target;let s={e:o,target:n};t.forEach(t=>{s={...s,...t},t.conditionBeforeCallBack&&!0!==t.conditionBeforeCallBack(s)||\"keydown\"===e&&t.checkIsEventEnter&&\"Enter\"!==o.key||n.closest(t.selector)&&(t.class?t.class[t.callBack](s):t.callBack(s))})})}},9455(e,t,o){\"use strict\";o.d(t,{A:()=>r});var n=o(1601),s=o.n(n),i=o(6314),a=o.n(i)()(s());a.push([e.id,\"\u002F*!\\n * Toastify js 1.12.0\\n * https:\u002F\u002Fgithub.com\u002Fapvarun\u002Ftoastify-js\\n * @license MIT licensed\\n *\\n * Copyright (C) 2018 Varun A P\\n *\u002F\\n\\n.toastify {\\n    padding: 12px 20px;\\n    color: #ffffff;\\n    display: inline-block;\\n    box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\\n    background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\\n    background: linear-gradient(135deg, #73a5ff, #5477f5);\\n    position: fixed;\\n    opacity: 0;\\n    transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\\n    border-radius: 2px;\\n    cursor: pointer;\\n    text-decoration: none;\\n    max-width: calc(50% - 20px);\\n    z-index: 2147483647;\\n}\\n\\n.toastify.on {\\n    opacity: 1;\\n}\\n\\n.toast-close {\\n    background: transparent;\\n    border: 0;\\n    color: white;\\n    cursor: pointer;\\n    font-family: inherit;\\n    font-size: 1em;\\n    opacity: 0.4;\\n    padding: 0 5px;\\n}\\n\\n.toastify-right {\\n    right: 15px;\\n}\\n\\n.toastify-left {\\n    left: 15px;\\n}\\n\\n.toastify-top {\\n    top: -150px;\\n}\\n\\n.toastify-bottom {\\n    bottom: -150px;\\n}\\n\\n.toastify-rounded {\\n    border-radius: 25px;\\n}\\n\\n.toastify-avatar {\\n    width: 1.5em;\\n    height: 1.5em;\\n    margin: -7px 5px;\\n    border-radius: 2px;\\n}\\n\\n.toastify-center {\\n    margin-left: auto;\\n    margin-right: auto;\\n    left: 0;\\n    right: 0;\\n    max-width: fit-content;\\n    max-width: -moz-fit-content;\\n}\\n\\n@media only screen and (max-width: 360px) {\\n    .toastify-right, .toastify-left {\\n        margin-left: auto;\\n        margin-right: auto;\\n        left: 0;\\n        right: 0;\\n        max-width: fit-content;\\n    }\\n}\\n\",\"\"]);const r=a},6314(e){\"use strict\";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var o=\"\",n=void 0!==t[5];return t[4]&&(o+=\"@supports (\".concat(t[4],\") {\")),t[2]&&(o+=\"@media \".concat(t[2],\" {\")),n&&(o+=\"@layer\".concat(t[5].length>0?\" \".concat(t[5]):\"\",\" {\")),o+=e(t),n&&(o+=\"}\"),t[2]&&(o+=\"}\"),t[4]&&(o+=\"}\"),o}).join(\"\")},t.i=function(e,o,n,s,i){\"string\"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var r=0;r\u003Cthis.length;r++){var l=this[r][0];null!=l&&(a[l]=!0)}for(var c=0;c\u003Ce.length;c++){var d=[].concat(e[c]);n&&a[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]=\"@layer\".concat(d[5].length>0?\" \".concat(d[5]):\"\",\" {\").concat(d[1],\"}\")),d[5]=i),o&&(d[2]?(d[1]=\"@media \".concat(d[2],\" {\").concat(d[1],\"}\"),d[2]=o):d[2]=o),s&&(d[4]?(d[1]=\"@supports (\".concat(d[4],\") {\").concat(d[1],\"}\"),d[4]=s):d[4]=\"\".concat(s)),t.push(d))}},t}},1601(e){\"use strict\";e.exports=function(e){return e[1]}},246(e,t,o){\"use strict\";function n(e,t,o){return(t=function(e){var t=function(e){if(\"object\"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,\"string\");if(\"object\"!=typeof o)return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(e)}(e);return\"symbol\"==typeof t?t:t+\"\"}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t\u003Carguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},s.apply(null,arguments)}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)}return o}function a(e){for(var t=1;t\u003Carguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach(function(t){n(e,t,o[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function l(e){if(\"undefined\"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}o.d(t,{Ay:()=>st});var c=l(\u002F(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)\u002Fi),d=l(\u002FEdge\u002Fi),u=l(\u002Ffirefox\u002Fi),p=l(\u002Fsafari\u002Fi)&&!l(\u002Fchrome\u002Fi)&&!l(\u002Fandroid\u002Fi),h=l(\u002FiP(ad|od|hone)\u002Fi),m=l(\u002Fchrome\u002Fi)&&l(\u002Fandroid\u002Fi),w={capture:!1,passive:!1};function f(e,t,o){e.addEventListener(t,o,!c&&w)}function g(e,t,o){e.removeEventListener(t,o,!c&&w)}function b(e,t){if(t){if(\">\"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function v(e){return e.host&&e!==document&&e.host.nodeType&&e.host!==e?e.host:e.parentNode}function y(e,t,o,n){if(e){o=o||document;do{if(null!=t&&(\">\"===t[0]?e.parentNode===o&&b(e,t):b(e,t))||n&&e===o)return e;if(e===o)break}while(e=v(e))}return null}var k,E=\u002F\\s+\u002Fg;function C(e,t,o){if(e&&t)if(e.classList)e.classList[o?\"add\":\"remove\"](t);else{var n=(\" \"+e.className+\" \").replace(E,\" \").replace(\" \"+t+\" \",\" \");e.className=(n+(o?\" \"+t:\"\")).replace(E,\" \")}}function S(e,t,o){var n=e&&e.style;if(n){if(void 0===o)return document.defaultView&&document.defaultView.getComputedStyle?o=document.defaultView.getComputedStyle(e,\"\"):e.currentStyle&&(o=e.currentStyle),void 0===t?o:o[t];t in n||-1!==t.indexOf(\"webkit\")||(t=\"-webkit-\"+t),n[t]=o+(\"string\"==typeof o?\"\":\"px\")}}function A(e,t){var o=\"\";if(\"string\"==typeof e)o=e;else do{var n=S(e,\"transform\");n&&\"none\"!==n&&(o=n+\" \"+o)}while(!t&&(e=e.parentNode));var s=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return s&&new s(o)}function x(e,t,o){if(e){var n=e.getElementsByTagName(t),s=0,i=n.length;if(o)for(;s\u003Ci;s++)o(n[s],s);return n}return[]}function T(){return document.scrollingElement||document.documentElement}function I(e,t,o,n,s){if(e.getBoundingClientRect||e===window){var i,a,r,l,d,u,p;if(e!==window&&e.parentNode&&e!==T()?(a=(i=e.getBoundingClientRect()).top,r=i.left,l=i.bottom,d=i.right,u=i.height,p=i.width):(a=0,r=0,l=window.innerHeight,d=window.innerWidth,u=window.innerHeight,p=window.innerWidth),(t||o)&&e!==window&&(s=s||e.parentNode,!c))do{if(s&&s.getBoundingClientRect&&(\"none\"!==S(s,\"transform\")||o&&\"static\"!==S(s,\"position\"))){var h=s.getBoundingClientRect();a-=h.top+parseInt(S(s,\"border-top-width\")),r-=h.left+parseInt(S(s,\"border-left-width\")),l=a+i.height,d=r+i.width;break}}while(s=s.parentNode);if(n&&e!==window){var m=A(s||e),w=m&&m.a,f=m&&m.d;m&&(l=(a\u002F=f)+(u\u002F=f),d=(r\u002F=w)+(p\u002F=w))}return{top:a,left:r,bottom:l,right:d,width:p,height:u}}}function B(e,t,o){for(var n=D(e,!0),s=I(e)[t];n;){var i=I(n)[o];if(!(\"top\"===o||\"left\"===o?s>=i:s\u003C=i))return n;if(n===T())break;n=D(n,!1)}return!1}function $(e,t,o,n){for(var s=0,i=0,a=e.children;i\u003Ca.length;){if(\"none\"!==a[i].style.display&&a[i]!==Me.ghost&&(n||a[i]!==Me.dragged)&&y(a[i],o.draggable,e,!1)){if(s===t)return a[i];s++}i++}return null}function q(e,t){for(var o=e.lastElementChild;o&&(o===Me.ghost||\"none\"===S(o,\"display\")||t&&!b(o,t));)o=o.previousElementSibling;return o||null}function L(e,t){var o=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)\"TEMPLATE\"===e.nodeName.toUpperCase()||e===Me.clone||t&&!b(e,t)||o++;return o}function _(e){var t=0,o=0,n=T();if(e)do{var s=A(e),i=s.a,a=s.d;t+=e.scrollLeft*i,o+=e.scrollTop*a}while(e!==n&&(e=e.parentNode));return[t,o]}function D(e,t){if(!e||!e.getBoundingClientRect)return T();var o=e,n=!1;do{if(o.clientWidth\u003Co.scrollWidth||o.clientHeight\u003Co.scrollHeight){var s=S(o);if(o.clientWidth\u003Co.scrollWidth&&(\"auto\"==s.overflowX||\"scroll\"==s.overflowX)||o.clientHeight\u003Co.scrollHeight&&(\"auto\"==s.overflowY||\"scroll\"==s.overflowY)){if(!o.getBoundingClientRect||o===document.body)return T();if(n||t)return o;n=!0}}}while(o=o.parentNode);return T()}function O(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function P(e,t){return function(){if(!k){var o=arguments;1===o.length?e.call(this,o[0]):e.apply(this,o),k=setTimeout(function(){k=void 0},t)}}}function M(e,t,o){e.scrollLeft+=t,e.scrollTop+=o}function Q(e){var t=window.Polymer,o=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):o?o(e).clone(!0)[0]:e.cloneNode(!0)}function N(e,t,o){var n={};return Array.from(e.children).forEach(function(s){var i,a,r,l;if(y(s,t.draggable,e,!1)&&!s.animated&&s!==o){var c=I(s);n.left=Math.min(null!==(i=n.left)&&void 0!==i?i:1\u002F0,c.left),n.top=Math.min(null!==(a=n.top)&&void 0!==a?a:1\u002F0,c.top),n.right=Math.max(null!==(r=n.right)&&void 0!==r?r:-1\u002F0,c.right),n.bottom=Math.max(null!==(l=n.bottom)&&void 0!==l?l:-1\u002F0,c.bottom)}}),n.width=n.right-n.left,n.height=n.bottom-n.top,n.x=n.left,n.y=n.top,n}var H=\"Sortable\"+(new Date).getTime();var F=[],z={initializeByDefault:!0},j={mount:function(e){for(var t in z)z.hasOwnProperty(t)&&!(t in e)&&(e[t]=z[t]);F.forEach(function(t){if(t.pluginName===e.pluginName)throw\"Sortable: Cannot mount plugin \".concat(e.pluginName,\" more than once\")}),F.push(e)},pluginEvent:function(e,t,o){var n=this;this.eventCanceled=!1,o.cancel=function(){n.eventCanceled=!0};var s=e+\"Global\";F.forEach(function(n){t[n.pluginName]&&(t[n.pluginName][s]&&t[n.pluginName][s](a({sortable:t},o)),t.options[n.pluginName]&&t[n.pluginName][e]&&t[n.pluginName][e](a({sortable:t},o)))})},initializePlugins:function(e,t,o,n){for(var i in F.forEach(function(n){var i=n.pluginName;if(e.options[i]||n.initializeByDefault){var a=new n(e,t,e.options);a.sortable=e,a.options=e.options,e[i]=a,s(o,a.defaults)}}),e.options)if(e.options.hasOwnProperty(i)){var a=this.modifyOption(e,i,e.options[i]);void 0!==a&&(e.options[i]=a)}},getEventProperties:function(e,t){var o={};return F.forEach(function(n){\"function\"==typeof n.eventProperties&&s(o,n.eventProperties.call(t[n.pluginName],e))}),o},modifyOption:function(e,t,o){var n;return F.forEach(function(s){e[s.pluginName]&&s.optionListeners&&\"function\"==typeof s.optionListeners[t]&&(n=s.optionListeners[t].call(e[s.pluginName],o))}),n}};var W=[\"evt\"],X=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=o.evt,s=function(e,t){if(null==e)return{};var o,n,s=function(e,t){if(null==e)return{};var o={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;o[n]=e[n]}return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n\u003Ci.length;n++)o=i[n],-1===t.indexOf(o)&&{}.propertyIsEnumerable.call(e,o)&&(s[o]=e[o])}return s}(o,W);j.pluginEvent.bind(Me)(e,t,a({dragEl:Y,parentEl:V,ghostEl:U,rootEl:J,nextEl:G,lastDownEl:Z,cloneEl:K,cloneHidden:ee,dragStarted:he,putSortable:ae,activeSortable:Me.active,originalEvent:n,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se,hideGhostForTarget:_e,unhideGhostForTarget:De,cloneNowHidden:function(){ee=!0},cloneNowShown:function(){ee=!1},dispatchSortableEvent:function(e){R({sortable:t,name:e,originalEvent:n})}},s))};function R(e){!function(e){var t=e.sortable,o=e.rootEl,n=e.name,s=e.targetEl,i=e.cloneEl,r=e.toEl,l=e.fromEl,u=e.oldIndex,p=e.newIndex,h=e.oldDraggableIndex,m=e.newDraggableIndex,w=e.originalEvent,f=e.putSortable,g=e.extraEventProperties;if(t=t||o&&o[H]){var b,v=t.options,y=\"on\"+n.charAt(0).toUpperCase()+n.substr(1);!window.CustomEvent||c||d?(b=document.createEvent(\"Event\")).initEvent(n,!0,!0):b=new CustomEvent(n,{bubbles:!0,cancelable:!0}),b.to=r||o,b.from=l||o,b.item=s||o,b.clone=i,b.oldIndex=u,b.newIndex=p,b.oldDraggableIndex=h,b.newDraggableIndex=m,b.originalEvent=w,b.pullMode=f?f.lastPutMode:void 0;var k=a(a({},g),j.getEventProperties(n,t));for(var E in k)b[E]=k[E];o&&o.dispatchEvent(b),v[y]&&v[y].call(t,b)}}(a({putSortable:ae,cloneEl:K,targetEl:Y,rootEl:J,oldIndex:te,oldDraggableIndex:ne,newIndex:oe,newDraggableIndex:se},e))}var Y,V,U,J,G,Z,K,ee,te,oe,ne,se,ie,ae,re,le,ce,de,ue,pe,he,me,we,fe,ge,be=!1,ve=!1,ye=[],ke=!1,Ee=!1,Ce=[],Se=!1,Ae=[],xe=\"undefined\"!=typeof document,Te=h,Ie=d||c?\"cssFloat\":\"float\",Be=xe&&!m&&!h&&\"draggable\"in document.createElement(\"div\"),$e=function(){if(xe){if(c)return!1;var e=document.createElement(\"x\");return e.style.cssText=\"pointer-events:auto\",\"auto\"===e.style.pointerEvents}}(),qe=function(e,t){var o=S(e),n=parseInt(o.width)-parseInt(o.paddingLeft)-parseInt(o.paddingRight)-parseInt(o.borderLeftWidth)-parseInt(o.borderRightWidth),s=$(e,0,t),i=$(e,1,t),a=s&&S(s),r=i&&S(i),l=a&&parseInt(a.marginLeft)+parseInt(a.marginRight)+I(s).width,c=r&&parseInt(r.marginLeft)+parseInt(r.marginRight)+I(i).width;if(\"flex\"===o.display)return\"column\"===o.flexDirection||\"column-reverse\"===o.flexDirection?\"vertical\":\"horizontal\";if(\"grid\"===o.display)return o.gridTemplateColumns.split(\" \").length\u003C=1?\"vertical\":\"horizontal\";if(s&&a.float&&\"none\"!==a.float){var d=\"left\"===a.float?\"left\":\"right\";return!i||\"both\"!==r.clear&&r.clear!==d?\"horizontal\":\"vertical\"}return s&&(\"block\"===a.display||\"flex\"===a.display||\"table\"===a.display||\"grid\"===a.display||l>=n&&\"none\"===o[Ie]||i&&\"none\"===o[Ie]&&l+c>n)?\"vertical\":\"horizontal\"},Le=function(e){function t(e,o){return function(n,s,i,a){var r=n.options.group.name&&s.options.group.name&&n.options.group.name===s.options.group.name;if(null==e&&(o||r))return!0;if(null==e||!1===e)return!1;if(o&&\"clone\"===e)return e;if(\"function\"==typeof e)return t(e(n,s,i,a),o)(n,s,i,a);var l=(o?n:s).options.group.name;return!0===e||\"string\"==typeof e&&e===l||e.join&&e.indexOf(l)>-1}}var o={},n=e.group;n&&\"object\"==r(n)||(n={name:n}),o.name=n.name,o.checkPull=t(n.pull,!0),o.checkPut=t(n.put),o.revertClone=n.revertClone,e.group=o},_e=function(){!$e&&U&&S(U,\"display\",\"none\")},De=function(){!$e&&U&&S(U,\"display\",\"\")};xe&&!m&&document.addEventListener(\"click\",function(e){if(ve)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),ve=!1,!1},!0);var Oe=function(e){if(Y){e=e.touches?e.touches[0]:e;var t=(s=e.clientX,i=e.clientY,ye.some(function(e){var t=e[H].options.emptyInsertThreshold;if(t&&!q(e)){var o=I(e),n=s>=o.left-t&&s\u003C=o.right+t,r=i>=o.top-t&&i\u003C=o.bottom+t;return n&&r?a=e:void 0}}),a);if(t){var o={};for(var n in e)e.hasOwnProperty(n)&&(o[n]=e[n]);o.target=o.rootEl=t,o.preventDefault=void 0,o.stopPropagation=void 0,t[H]._onDragOver(o)}}var s,i,a},Pe=function(e){Y&&Y.parentNode[H]._isOutsideThisEl(e.target)};function Me(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw\"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(e));this.el=e,this.options=t=s({},t),e[H]=this;var o,n,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:\u002F^[uo]l$\u002Fi.test(e.nodeName)?\">li\":\">*\",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return qe(e,this.options)},ghostClass:\"sortable-ghost\",chosenClass:\"sortable-chosen\",dragClass:\"sortable-drag\",ignore:\"a, img\",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData(\"Text\",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:\"sortable-fallback\",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Me.supportPointer&&\"PointerEvent\"in window&&(!p||h),emptyInsertThreshold:5};for(var r in j.initializePlugins(this,e,i),i)!(r in t)&&(t[r]=i[r]);for(var l in Le(t),this)\"_\"===l.charAt(0)&&\"function\"==typeof this[l]&&(this[l]=this[l].bind(this));this.nativeDraggable=!t.forceFallback&&Be,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?f(e,\"pointerdown\",this._onTapStart):(f(e,\"mousedown\",this._onTapStart),f(e,\"touchstart\",this._onTapStart)),this.nativeDraggable&&(f(e,\"dragover\",this),f(e,\"dragenter\",this)),ye.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),s(this,(n=[],{captureAnimationState:function(){n=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(e){if(\"none\"!==S(e,\"display\")&&e!==Me.ghost){n.push({target:e,rect:I(e)});var t=a({},n[n.length-1].rect);if(e.thisAnimationDuration){var o=A(e,!0);o&&(t.top-=o.f,t.left-=o.e)}e.fromRect=t}})},addAnimationState:function(e){n.push(e)},removeAnimationState:function(e){n.splice(function(e,t){for(var o in e)if(e.hasOwnProperty(o))for(var n in t)if(t.hasOwnProperty(n)&&t[n]===e[o][n])return Number(o);return-1}(n,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(o),void(\"function\"==typeof e&&e());var s=!1,i=0;n.forEach(function(e){var o=0,n=e.target,a=n.fromRect,r=I(n),l=n.prevFromRect,c=n.prevToRect,d=e.rect,u=A(n,!0);u&&(r.top-=u.f,r.left-=u.e),n.toRect=r,n.thisAnimationDuration&&O(l,r)&&!O(a,r)&&(d.top-r.top)\u002F(d.left-r.left)===(a.top-r.top)\u002F(a.left-r.left)&&(o=function(e,t,o,n){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))\u002FMath.sqrt(Math.pow(t.top-o.top,2)+Math.pow(t.left-o.left,2))*n.animation}(d,l,c,t.options)),O(r,a)||(n.prevFromRect=a,n.prevToRect=r,o||(o=t.options.animation),t.animate(n,d,r,o)),o&&(s=!0,i=Math.max(i,o),clearTimeout(n.animationResetTimer),n.animationResetTimer=setTimeout(function(){n.animationTime=0,n.prevFromRect=null,n.fromRect=null,n.prevToRect=null,n.thisAnimationDuration=null},o),n.thisAnimationDuration=o)}),clearTimeout(o),s?o=setTimeout(function(){\"function\"==typeof e&&e()},i):\"function\"==typeof e&&e(),n=[]},animate:function(e,t,o,n){if(n){S(e,\"transition\",\"\"),S(e,\"transform\",\"\");var s=A(this.el),i=s&&s.a,a=s&&s.d,r=(t.left-o.left)\u002F(i||1),l=(t.top-o.top)\u002F(a||1);e.animatingX=!!r,e.animatingY=!!l,S(e,\"transform\",\"translate3d(\"+r+\"px,\"+l+\"px,0)\"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),S(e,\"transition\",\"transform \"+n+\"ms\"+(this.options.easing?\" \"+this.options.easing:\"\")),S(e,\"transform\",\"translate3d(0,0,0)\"),\"number\"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout(function(){S(e,\"transition\",\"\"),S(e,\"transform\",\"\"),e.animated=!1,e.animatingX=!1,e.animatingY=!1},n)}}}))}function Qe(e,t,o,n,s,i,a,r){var l,u,p=e[H],h=p.options.onMove;return!window.CustomEvent||c||d?(l=document.createEvent(\"Event\")).initEvent(\"move\",!0,!0):l=new CustomEvent(\"move\",{bubbles:!0,cancelable:!0}),l.to=t,l.from=e,l.dragged=o,l.draggedRect=n,l.related=s||t,l.relatedRect=i||I(t),l.willInsertAfter=r,l.originalEvent=a,e.dispatchEvent(l),h&&(u=h.call(p,l,a)),u}function Ne(e){e.draggable=!1}function He(){Se=!1}function Fe(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,o=t.length,n=0;o--;)n+=t.charCodeAt(o);return n.toString(36)}function ze(e){return setTimeout(e,0)}function je(e){return clearTimeout(e)}Me.prototype={constructor:Me,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(me=null)},_getDirection:function(e,t){return\"function\"==typeof this.options.direction?this.options.direction.call(this,e,t,Y):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,o=this.el,n=this.options,s=n.preventOnFilter,i=e.type,a=e.touches&&e.touches[0]||e.pointerType&&\"touch\"===e.pointerType&&e,r=(a||e).target,l=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||r,c=n.filter;if(function(e){Ae.length=0;for(var t=e.getElementsByTagName(\"input\"),o=t.length;o--;){var n=t[o];n.checked&&Ae.push(n)}}(o),!Y&&!(\u002Fmousedown|pointerdown\u002F.test(i)&&0!==e.button||n.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!p||!r||\"SELECT\"!==r.tagName.toUpperCase())&&!((r=y(r,n.draggable,o,!1))&&r.animated||Z===r)){if(te=L(r),ne=L(r,n.draggable),\"function\"==typeof c){if(c.call(this,e,r,this))return R({sortable:t,rootEl:l,name:\"filter\",targetEl:r,toEl:o,fromEl:o}),X(\"filter\",t,{evt:e}),void(s&&e.preventDefault())}else if(c&&(c=c.split(\",\").some(function(n){if(n=y(l,n.trim(),o,!1))return R({sortable:t,rootEl:n,name:\"filter\",targetEl:r,fromEl:o,toEl:o}),X(\"filter\",t,{evt:e}),!0})))return void(s&&e.preventDefault());n.handle&&!y(l,n.handle,o,!1)||this._prepareDragStart(e,a,r)}}},_prepareDragStart:function(e,t,o){var n,s=this,i=s.el,a=s.options,r=i.ownerDocument;if(o&&!Y&&o.parentNode===i){var l=I(o);if(J=i,V=(Y=o).parentNode,G=Y.nextSibling,Z=o,ie=a.group,Me.dragged=Y,re={target:Y,clientX:(t||e).clientX,clientY:(t||e).clientY},ue=re.clientX-l.left,pe=re.clientY-l.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,Y.style[\"will-change\"]=\"all\",n=function(){X(\"delayEnded\",s,{evt:e}),Me.eventCanceled?s._onDrop():(s._disableDelayedDragEvents(),!u&&s.nativeDraggable&&(Y.draggable=!0),s._triggerDragStart(e,t),R({sortable:s,name:\"choose\",originalEvent:e}),C(Y,a.chosenClass,!0))},a.ignore.split(\",\").forEach(function(e){x(Y,e.trim(),Ne)}),f(r,\"dragover\",Oe),f(r,\"mousemove\",Oe),f(r,\"touchmove\",Oe),a.supportPointer?(f(r,\"pointerup\",s._onDrop),!this.nativeDraggable&&f(r,\"pointercancel\",s._onDrop)):(f(r,\"mouseup\",s._onDrop),f(r,\"touchend\",s._onDrop),f(r,\"touchcancel\",s._onDrop)),u&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Y.draggable=!0),X(\"delayStart\",this,{evt:e}),!a.delay||a.delayOnTouchOnly&&!t||this.nativeDraggable&&(d||c))n();else{if(Me.eventCanceled)return void this._onDrop();a.supportPointer?(f(r,\"pointerup\",s._disableDelayedDrag),f(r,\"pointercancel\",s._disableDelayedDrag)):(f(r,\"mouseup\",s._disableDelayedDrag),f(r,\"touchend\",s._disableDelayedDrag),f(r,\"touchcancel\",s._disableDelayedDrag)),f(r,\"mousemove\",s._delayedDragTouchMoveHandler),f(r,\"touchmove\",s._delayedDragTouchMoveHandler),a.supportPointer&&f(r,\"pointermove\",s._delayedDragTouchMoveHandler),s._dragStartTimer=setTimeout(n,a.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold\u002F(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Y&&Ne(Y),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._disableDelayedDrag),g(e,\"touchend\",this._disableDelayedDrag),g(e,\"touchcancel\",this._disableDelayedDrag),g(e,\"pointerup\",this._disableDelayedDrag),g(e,\"pointercancel\",this._disableDelayedDrag),g(e,\"mousemove\",this._delayedDragTouchMoveHandler),g(e,\"touchmove\",this._delayedDragTouchMoveHandler),g(e,\"pointermove\",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||\"touch\"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?f(document,\"pointermove\",this._onTouchMove):f(document,t?\"touchmove\":\"mousemove\",this._onTouchMove):(f(Y,\"dragend\",this),f(J,\"dragstart\",this._onDragStart));try{document.selection?ze(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(be=!1,J&&Y){X(\"dragStarted\",this,{evt:t}),this.nativeDraggable&&f(document,\"dragover\",Pe);var o=this.options;!e&&C(Y,o.dragClass,!1),C(Y,o.ghostClass,!0),Me.active=this,e&&this._appendGhost(),R({sortable:this,name:\"start\",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(le){this._lastX=le.clientX,this._lastY=le.clientY,_e();for(var e=document.elementFromPoint(le.clientX,le.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(le.clientX,le.clientY))!==t;)t=e;if(Y.parentNode[H]._isOutsideThisEl(e),t)do{if(t[H]&&t[H]._onDragOver({clientX:le.clientX,clientY:le.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=v(t));De()}},_onTouchMove:function(e){if(re){var t=this.options,o=t.fallbackTolerance,n=t.fallbackOffset,s=e.touches?e.touches[0]:e,i=U&&A(U,!0),a=U&&i&&i.a,r=U&&i&&i.d,l=Te&&ge&&_(ge),c=(s.clientX-re.clientX+n.x)\u002F(a||1)+(l?l[0]-Ce[0]:0)\u002F(a||1),d=(s.clientY-re.clientY+n.y)\u002F(r||1)+(l?l[1]-Ce[1]:0)\u002F(r||1);if(!Me.active&&!be){if(o&&Math.max(Math.abs(s.clientX-this._lastX),Math.abs(s.clientY-this._lastY))\u003Co)return;this._onDragStart(e,!0)}if(U){i?(i.e+=c-(ce||0),i.f+=d-(de||0)):i={a:1,b:0,c:0,d:1,e:c,f:d};var u=\"matrix(\".concat(i.a,\",\").concat(i.b,\",\").concat(i.c,\",\").concat(i.d,\",\").concat(i.e,\",\").concat(i.f,\")\");S(U,\"webkitTransform\",u),S(U,\"mozTransform\",u),S(U,\"msTransform\",u),S(U,\"transform\",u),ce=c,de=d,le=s}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!U){var e=this.options.fallbackOnBody?document.body:J,t=I(Y,!0,Te,!0,e),o=this.options;if(Te){for(ge=e;\"static\"===S(ge,\"position\")&&\"none\"===S(ge,\"transform\")&&ge!==document;)ge=ge.parentNode;ge!==document.body&&ge!==document.documentElement?(ge===document&&(ge=T()),t.top+=ge.scrollTop,t.left+=ge.scrollLeft):ge=T(),Ce=_(ge)}C(U=Y.cloneNode(!0),o.ghostClass,!1),C(U,o.fallbackClass,!0),C(U,o.dragClass,!0),S(U,\"transition\",\"\"),S(U,\"transform\",\"\"),S(U,\"box-sizing\",\"border-box\"),S(U,\"margin\",0),S(U,\"top\",t.top),S(U,\"left\",t.left),S(U,\"width\",t.width),S(U,\"height\",t.height),S(U,\"opacity\",\"0.8\"),S(U,\"position\",Te?\"absolute\":\"fixed\"),S(U,\"zIndex\",\"100000\"),S(U,\"pointerEvents\",\"none\"),Me.ghost=U,e.appendChild(U),S(U,\"transform-origin\",ue\u002FparseInt(U.style.width)*100+\"% \"+pe\u002FparseInt(U.style.height)*100+\"%\")}},_onDragStart:function(e,t){var o=this,n=e.dataTransfer,s=o.options;X(\"dragStart\",this,{evt:e}),Me.eventCanceled?this._onDrop():(X(\"setupClone\",this),Me.eventCanceled||((K=Q(Y)).removeAttribute(\"id\"),K.draggable=!1,K.style[\"will-change\"]=\"\",this._hideClone(),C(K,this.options.chosenClass,!1),Me.clone=K),o.cloneId=ze(function(){X(\"clone\",o),Me.eventCanceled||(o.options.removeCloneOnHide||J.insertBefore(K,Y),o._hideClone(),R({sortable:o,name:\"clone\"}))}),!t&&C(Y,s.dragClass,!0),t?(ve=!0,o._loopId=setInterval(o._emulateDragOver,50)):(g(document,\"mouseup\",o._onDrop),g(document,\"touchend\",o._onDrop),g(document,\"touchcancel\",o._onDrop),n&&(n.effectAllowed=\"move\",s.setData&&s.setData.call(o,n,Y)),f(document,\"drop\",o),S(Y,\"transform\",\"translateZ(0)\")),be=!0,o._dragStartId=ze(o._dragStarted.bind(o,t,e)),f(document,\"selectstart\",o),he=!0,window.getSelection().removeAllRanges(),p&&S(document.body,\"user-select\",\"none\"))},_onDragOver:function(e){var t,o,n,s,i=this.el,r=e.target,l=this.options,c=l.group,d=Me.active,u=ie===c,p=l.sort,h=ae||d,m=this,w=!1;if(!Se){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),r=y(r,l.draggable,i,!0),F(\"dragOver\"),Me.eventCanceled)return w;if(Y.contains(e.target)||r.animated&&r.animatingX&&r.animatingY||m._ignoreWhileAnimating===r)return j(!1);if(ve=!1,d&&!l.disabled&&(u?p||(n=V!==J):ae===this||(this.lastPutMode=ie.checkPull(this,d,Y,e))&&c.checkPut(this,d,Y,e))){if(s=\"vertical\"===this._getDirection(e,r),t=I(Y),F(\"dragOverValid\"),Me.eventCanceled)return w;if(n)return V=J,z(),this._hideClone(),F(\"revert\"),Me.eventCanceled||(G?J.insertBefore(Y,G):J.appendChild(Y)),j(!0);var f=q(i,l.draggable);if(!f||function(e,t,o){var n=I(q(o.el,o.options.draggable)),s=N(o.el,o.options,U);return t?e.clientX>s.right+10||e.clientY>n.bottom&&e.clientX>n.left:e.clientY>s.bottom+10||e.clientX>n.right&&e.clientY>n.top}(e,s,this)&&!f.animated){if(f===Y)return j(!1);if(f&&i===e.target&&(r=f),r&&(o=I(r)),!1!==Qe(J,i,Y,t,r,o,e,!!r))return z(),f&&f.nextSibling?i.insertBefore(Y,f.nextSibling):i.appendChild(Y),V=i,W(),j(!0)}else if(f&&function(e,t,o){var n=I($(o.el,0,o.options,!0)),s=N(o.el,o.options,U);return t?e.clientX\u003Cs.left-10||e.clientY\u003Cn.top&&e.clientX\u003Cn.right:e.clientY\u003Cs.top-10||e.clientY\u003Cn.bottom&&e.clientX\u003Cn.left}(e,s,this)){var g=$(i,0,l,!0);if(g===Y)return j(!1);if(o=I(r=g),!1!==Qe(J,i,Y,t,r,o,e,!1))return z(),i.insertBefore(Y,g),V=i,W(),j(!0)}else if(r.parentNode===i){o=I(r);var b,v,k,E=Y.parentNode!==i,A=!function(e,t,o){var n=o?e.left:e.top,s=o?e.right:e.bottom,i=o?e.width:e.height,a=o?t.left:t.top,r=o?t.right:t.bottom,l=o?t.width:t.height;return n===a||s===r||n+i\u002F2===a+l\u002F2}(Y.animated&&Y.toRect||t,r.animated&&r.toRect||o,s),x=s?\"top\":\"left\",T=B(r,\"top\",\"top\")||B(Y,\"top\",\"top\"),_=T?T.scrollTop:void 0;if(me!==r&&(v=o[x],ke=!1,Ee=!A&&l.invertSwap||E),b=function(e,t,o,n,s,i,a,r){var l=n?e.clientY:e.clientX,c=n?o.height:o.width,d=n?o.top:o.left,u=n?o.bottom:o.right,p=!1;if(!a)if(r&&fe\u003Cc*s){if(!ke&&(1===we?l>d+c*i\u002F2:l\u003Cu-c*i\u002F2)&&(ke=!0),ke)p=!0;else if(1===we?l\u003Cd+fe:l>u-fe)return-we}else if(l>d+c*(1-s)\u002F2&&l\u003Cu-c*(1-s)\u002F2)return function(e){return L(Y)\u003CL(e)?1:-1}(t);return(p=p||a)&&(l\u003Cd+c*i\u002F2||l>u-c*i\u002F2)?l>d+c\u002F2?1:-1:0}(e,r,o,s,A?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,Ee,me===r),0!==b){var D=L(Y);do{D-=b,k=V.children[D]}while(k&&(\"none\"===S(k,\"display\")||k===U))}if(0===b||k===r)return j(!1);me=r,we=b;var O=r.nextElementSibling,P=!1,Q=Qe(J,i,Y,t,r,o,e,P=1===b);if(!1!==Q)return 1!==Q&&-1!==Q||(P=1===Q),Se=!0,setTimeout(He,30),z(),P&&!O?i.appendChild(Y):r.parentNode.insertBefore(Y,P?O:r),T&&M(T,0,_-T.scrollTop),V=Y.parentNode,void 0===v||Ee||(fe=Math.abs(v-I(r)[x])),W(),j(!0)}if(i.contains(Y))return j(!1)}return!1}function F(l,c){X(l,m,a({evt:e,isOwner:u,axis:s?\"vertical\":\"horizontal\",revert:n,dragRect:t,targetRect:o,canSort:p,fromSortable:h,target:r,completed:j,onMove:function(o,n){return Qe(J,i,Y,t,o,I(o),e,n)},changed:W},c))}function z(){F(\"dragOverAnimationCapture\"),m.captureAnimationState(),m!==h&&h.captureAnimationState()}function j(t){return F(\"dragOverCompleted\",{insertion:t}),t&&(u?d._hideClone():d._showClone(m),m!==h&&(C(Y,ae?ae.options.ghostClass:d.options.ghostClass,!1),C(Y,l.ghostClass,!0)),ae!==m&&m!==Me.active?ae=m:m===Me.active&&ae&&(ae=null),h===m&&(m._ignoreWhileAnimating=r),m.animateAll(function(){F(\"dragOverAnimationComplete\"),m._ignoreWhileAnimating=null}),m!==h&&(h.animateAll(),h._ignoreWhileAnimating=null)),(r===Y&&!Y.animated||r===i&&!r.animated)&&(me=null),l.dragoverBubble||e.rootEl||r===document||(Y.parentNode[H]._isOutsideThisEl(e.target),!t&&Oe(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),w=!0}function W(){oe=L(Y),se=L(Y,l.draggable),R({sortable:m,name:\"change\",toEl:i,newIndex:oe,newDraggableIndex:se,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){g(document,\"mousemove\",this._onTouchMove),g(document,\"touchmove\",this._onTouchMove),g(document,\"pointermove\",this._onTouchMove),g(document,\"dragover\",Oe),g(document,\"mousemove\",Oe),g(document,\"touchmove\",Oe)},_offUpEvents:function(){var e=this.el.ownerDocument;g(e,\"mouseup\",this._onDrop),g(e,\"touchend\",this._onDrop),g(e,\"pointerup\",this._onDrop),g(e,\"pointercancel\",this._onDrop),g(e,\"touchcancel\",this._onDrop),g(document,\"selectstart\",this)},_onDrop:function(e){var t=this.el,o=this.options;oe=L(Y),se=L(Y,o.draggable),X(\"drop\",this,{evt:e}),V=Y&&Y.parentNode,oe=L(Y),se=L(Y,o.draggable),Me.eventCanceled||(be=!1,Ee=!1,ke=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),je(this.cloneId),je(this._dragStartId),this.nativeDraggable&&(g(document,\"drop\",this),g(t,\"dragstart\",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),p&&S(document.body,\"user-select\",\"\"),S(Y,\"transform\",\"\"),e&&(he&&(e.cancelable&&e.preventDefault(),!o.dropBubble&&e.stopPropagation()),U&&U.parentNode&&U.parentNode.removeChild(U),(J===V||ae&&\"clone\"!==ae.lastPutMode)&&K&&K.parentNode&&K.parentNode.removeChild(K),Y&&(this.nativeDraggable&&g(Y,\"dragend\",this),Ne(Y),Y.style[\"will-change\"]=\"\",he&&!be&&C(Y,ae?ae.options.ghostClass:this.options.ghostClass,!1),C(Y,this.options.chosenClass,!1),R({sortable:this,name:\"unchoose\",toEl:V,newIndex:null,newDraggableIndex:null,originalEvent:e}),J!==V?(oe>=0&&(R({rootEl:V,name:\"add\",toEl:V,fromEl:J,originalEvent:e}),R({sortable:this,name:\"remove\",toEl:V,originalEvent:e}),R({rootEl:V,name:\"sort\",toEl:V,fromEl:J,originalEvent:e}),R({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),ae&&ae.save()):oe!==te&&oe>=0&&(R({sortable:this,name:\"update\",toEl:V,originalEvent:e}),R({sortable:this,name:\"sort\",toEl:V,originalEvent:e})),Me.active&&(null!=oe&&-1!==oe||(oe=te,se=ne),R({sortable:this,name:\"end\",toEl:V,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){X(\"nulling\",this),J=Y=V=U=G=K=Z=ee=re=le=he=oe=se=te=ne=me=we=ae=ie=Me.dragged=Me.ghost=Me.clone=Me.active=null;var e=this.el;Ae.forEach(function(t){e.contains(t)&&(t.checked=!0)}),Ae.length=ce=de=0},handleEvent:function(e){switch(e.type){case\"drop\":case\"dragend\":this._onDrop(e);break;case\"dragenter\":case\"dragover\":Y&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect=\"move\"),e.cancelable&&e.preventDefault()}(e));break;case\"selectstart\":e.preventDefault()}},toArray:function(){for(var e,t=[],o=this.el.children,n=0,s=o.length,i=this.options;n\u003Cs;n++)y(e=o[n],i.draggable,this.el,!1)&&t.push(e.getAttribute(i.dataIdAttr)||Fe(e));return t},sort:function(e,t){var o={},n=this.el;this.toArray().forEach(function(e,t){var s=n.children[t];y(s,this.options.draggable,n,!1)&&(o[e]=s)},this),t&&this.captureAnimationState(),e.forEach(function(e){o[e]&&(n.removeChild(o[e]),n.appendChild(o[e]))}),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var o=this.options;if(void 0===t)return o[e];var n=j.modifyOption(this,e,t);o[e]=void 0!==n?n:t,\"group\"===e&&Le(o)},destroy:function(){X(\"destroy\",this);var e=this.el;e[H]=null,g(e,\"mousedown\",this._onTapStart),g(e,\"touchstart\",this._onTapStart),g(e,\"pointerdown\",this._onTapStart),this.nativeDraggable&&(g(e,\"dragover\",this),g(e,\"dragenter\",this)),Array.prototype.forEach.call(e.querySelectorAll(\"[draggable]\"),function(e){e.removeAttribute(\"draggable\")}),this._onDrop(),this._disableDelayedDragEvents(),ye.splice(ye.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!ee){if(X(\"hideClone\",this),Me.eventCanceled)return;S(K,\"display\",\"none\"),this.options.removeCloneOnHide&&K.parentNode&&K.parentNode.removeChild(K),ee=!0}},_showClone:function(e){if(\"clone\"===e.lastPutMode){if(ee){if(X(\"showClone\",this),Me.eventCanceled)return;Y.parentNode!=J||this.options.group.revertClone?G?J.insertBefore(K,G):J.appendChild(K):J.insertBefore(K,Y),this.options.group.revertClone&&this.animate(Y,K),S(K,\"display\",\"\"),ee=!1}}else this._hideClone()}},xe&&f(document,\"touchmove\",function(e){(Me.active||be)&&e.cancelable&&e.preventDefault()}),Me.utils={on:f,off:g,css:S,find:x,is:function(e,t){return!!y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);return e},throttle:P,closest:y,toggleClass:C,clone:Q,index:L,nextTick:ze,cancelNextTick:je,detectDirection:qe,getChild:$,expando:H},Me.get=function(e){return e[H]},Me.mount=function(){for(var e=arguments.length,t=new Array(e),o=0;o\u003Ce;o++)t[o]=arguments[o];t[0].constructor===Array&&(t=t[0]),t.forEach(function(e){if(!e.prototype||!e.prototype.constructor)throw\"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(e));e.utils&&(Me.utils=a(a({},Me.utils),e.utils)),j.mount(e)})},Me.create=function(e,t){return new Me(e,t)},Me.version=\"1.15.7\";var We,Xe,Re,Ye,Ve,Ue,Je=[],Ge=!1;function Ze(){Je.forEach(function(e){clearInterval(e.pid)}),Je=[]}function Ke(){clearInterval(Ue)}var et=P(function(e,t,o,n){if(t.scroll){var s,i=(e.touches?e.touches[0]:e).clientX,a=(e.touches?e.touches[0]:e).clientY,r=t.scrollSensitivity,l=t.scrollSpeed,c=T(),d=!1;Xe!==o&&(Xe=o,Ze(),We=t.scroll,s=t.scrollFn,!0===We&&(We=D(o,!0)));var u=0,p=We;do{var h=p,m=I(h),w=m.top,f=m.bottom,g=m.left,b=m.right,v=m.width,y=m.height,k=void 0,E=void 0,C=h.scrollWidth,A=h.scrollHeight,x=S(h),B=h.scrollLeft,$=h.scrollTop;h===c?(k=v\u003CC&&(\"auto\"===x.overflowX||\"scroll\"===x.overflowX||\"visible\"===x.overflowX),E=y\u003CA&&(\"auto\"===x.overflowY||\"scroll\"===x.overflowY||\"visible\"===x.overflowY)):(k=v\u003CC&&(\"auto\"===x.overflowX||\"scroll\"===x.overflowX),E=y\u003CA&&(\"auto\"===x.overflowY||\"scroll\"===x.overflowY));var q=k&&(Math.abs(b-i)\u003C=r&&B+v\u003CC)-(Math.abs(g-i)\u003C=r&&!!B),L=E&&(Math.abs(f-a)\u003C=r&&$+y\u003CA)-(Math.abs(w-a)\u003C=r&&!!$);if(!Je[u])for(var _=0;_\u003C=u;_++)Je[_]||(Je[_]={});Je[u].vx==q&&Je[u].vy==L&&Je[u].el===h||(Je[u].el=h,Je[u].vx=q,Je[u].vy=L,clearInterval(Je[u].pid),0==q&&0==L||(d=!0,Je[u].pid=setInterval(function(){n&&0===this.layer&&Me.active._onTouchMove(Ve);var t=Je[this.layer].vy?Je[this.layer].vy*l:0,o=Je[this.layer].vx?Je[this.layer].vx*l:0;\"function\"==typeof s&&\"continue\"!==s.call(Me.dragged.parentNode[H],o,t,e,Ve,Je[this.layer].el)||M(Je[this.layer].el,o,t)}.bind({layer:u}),24))),u++}while(t.bubbleScroll&&p!==c&&(p=D(p,!1)));Ge=d}},30),tt=function(e){var t=e.originalEvent,o=e.putSortable,n=e.dragEl,s=e.activeSortable,i=e.dispatchSortableEvent,a=e.hideGhostForTarget,r=e.unhideGhostForTarget;if(t){var l=o||s;a();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,d=document.elementFromPoint(c.clientX,c.clientY);r(),l&&!l.el.contains(d)&&(i(\"spill\"),this.onSpill({dragEl:n,putSortable:o}))}};function ot(){}function nt(){}ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,o=e.putSortable;this.sortable.captureAnimationState(),o&&o.captureAnimationState();var n=$(this.sortable.el,this.startIndex,this.options);n?this.sortable.el.insertBefore(t,n):this.sortable.el.appendChild(t),this.sortable.animateAll(),o&&o.animateAll()},drop:tt},s(ot,{pluginName:\"revertOnSpill\"}),nt.prototype={onSpill:function(e){var t=e.dragEl,o=e.putSortable||this.sortable;o.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),o.animateAll()},drop:tt},s(nt,{pluginName:\"removeOnSpill\"}),Me.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)\"_\"===e.charAt(0)&&\"function\"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?f(document,\"dragover\",this._handleAutoScroll):this.options.supportPointer?f(document,\"pointermove\",this._handleFallbackAutoScroll):t.touches?f(document,\"touchmove\",this._handleFallbackAutoScroll):f(document,\"mousemove\",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?g(document,\"dragover\",this._handleAutoScroll):(g(document,\"pointermove\",this._handleFallbackAutoScroll),g(document,\"touchmove\",this._handleFallbackAutoScroll),g(document,\"mousemove\",this._handleFallbackAutoScroll)),Ke(),Ze(),clearTimeout(k),k=void 0},nulling:function(){Ve=Xe=We=Ge=Ue=Re=Ye=null,Je.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var o=this,n=(e.touches?e.touches[0]:e).clientX,s=(e.touches?e.touches[0]:e).clientY,i=document.elementFromPoint(n,s);if(Ve=e,t||this.options.forceAutoScrollFallback||d||c||p){et(e,this.options,i,t);var a=D(i,!0);!Ge||Ue&&n===Re&&s===Ye||(Ue&&Ke(),Ue=setInterval(function(){var i=D(document.elementFromPoint(n,s),!0);i!==a&&(a=i,Ze()),et(e,o.options,i,t)},10),Re=n,Ye=s)}else{if(!this.options.bubbleScroll||D(i,!0)===T())return void Ze();et(e,this.options,D(i,!1),!1)}}},s(e,{pluginName:\"scroll\",initializeByDefault:!0})}),Me.mount(nt,ot);const st=Me},4316(e,t,o){\"use strict\";var n=o(5072),s=o.n(n),i=o(7825),a=o.n(i),r=o(7659),l=o.n(r),c=o(5056),d=o.n(c),u=o(540),p=o.n(u),h=o(1113),m=o.n(h),w=o(9455),f={};f.styleTagTransform=m(),f.setAttributes=d(),f.insert=l().bind(null,\"head\"),f.domAPI=a(),f.insertStyleElement=p(),s()(w.A,f),w.A&&w.A.locals&&w.A.locals},5072(e){\"use strict\";var t=[];function o(e){for(var o=-1,n=0;n\u003Ct.length;n++)if(t[n].identifier===e){o=n;break}return o}function n(e,n){for(var i={},a=[],r=0;r\u003Ce.length;r++){var l=e[r],c=n.base?l[0]+n.base:l[0],d=i[c]||0,u=\"\".concat(c,\" \").concat(d);i[c]=d+1;var p=o(u),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(h);else{var m=s(h,n);n.byIndex=r,t.splice(r,0,{identifier:u,updater:m,references:1})}a.push(u)}return a}function s(e,t){var o=t.domAPI(t);return o.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;o.update(e=t)}else o.remove()}}e.exports=function(e,s){var i=n(e=e||[],s=s||{});return function(e){e=e||[];for(var a=0;a\u003Ci.length;a++){var r=o(i[a]);t[r].references--}for(var l=n(e,s),c=0;c\u003Ci.length;c++){var d=o(i[c]);0===t[d].references&&(t[d].updater(),t.splice(d,1))}i=l}}},7659(e){\"use strict\";var t={};e.exports=function(e,o){var n=function(e){if(void 0===t[e]){var o=document.querySelector(e);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}t[e]=o}return t[e]}(e);if(!n)throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");n.appendChild(o)}},540(e){\"use strict\";e.exports=function(e){var t=document.createElement(\"style\");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},5056(e,t,o){\"use strict\";e.exports=function(e){var t=o.nc;t&&e.setAttribute(\"nonce\",t)}},7825(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(o){!function(e,t,o){var n=\"\";o.supports&&(n+=\"@supports (\".concat(o.supports,\") {\")),o.media&&(n+=\"@media \".concat(o.media,\" {\"));var s=void 0!==o.layer;s&&(n+=\"@layer\".concat(o.layer.length>0?\" \".concat(o.layer):\"\",\" {\")),n+=o.css,s&&(n+=\"}\"),o.media&&(n+=\"}\"),o.supports&&(n+=\"}\");var i=o.sourceMap;i&&\"undefined\"!=typeof btoa&&(n+=\"\\n\u002F*# sourceMappingURL=data:application\u002Fjson;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))),\" *\u002F\")),t.styleTagTransform(n,e,t.options)}(t,e,o)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1113(e){\"use strict\";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},8465(e){e.exports=function(){\"use strict\";function e(e,t,o){if(\"function\"==typeof e?e===t:e.has(t))return arguments.length\u003C3?t:o;throw new TypeError(\"Private element is not present on this object\")}function t(t,o){return t.get(e(t,o))}function o(e,t,o){(function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")})(e,t),t.set(e,o)}const n={},s=e=>new Promise(t=>{if(!e)return t();const o=window.scrollX,s=window.scrollY;n.restoreFocusTimeout=setTimeout(()=>{n.previousActiveElement instanceof HTMLElement?(n.previousActiveElement.focus(),n.previousActiveElement=null):document.body&&document.body.focus(),t()},100),window.scrollTo(o,s)}),i=\"swal2-\",a=[\"container\",\"shown\",\"height-auto\",\"iosfix\",\"popup\",\"modal\",\"no-backdrop\",\"no-transition\",\"toast\",\"toast-shown\",\"show\",\"hide\",\"close\",\"title\",\"html-container\",\"actions\",\"confirm\",\"deny\",\"cancel\",\"footer\",\"icon\",\"icon-content\",\"image\",\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"label\",\"textarea\",\"inputerror\",\"input-label\",\"validation-message\",\"progress-steps\",\"active-progress-step\",\"progress-step\",\"progress-step-line\",\"loader\",\"loading\",\"styled\",\"top\",\"top-start\",\"top-end\",\"top-left\",\"top-right\",\"center\",\"center-start\",\"center-end\",\"center-left\",\"center-right\",\"bottom\",\"bottom-start\",\"bottom-end\",\"bottom-left\",\"bottom-right\",\"grow-row\",\"grow-column\",\"grow-fullscreen\",\"rtl\",\"timer-progress-bar\",\"timer-progress-bar-container\",\"scrollbar-measure\",\"icon-success\",\"icon-warning\",\"icon-info\",\"icon-question\",\"icon-error\",\"draggable\",\"dragging\"].reduce((e,t)=>(e[t]=i+t,e),{}),r=[\"success\",\"warning\",\"info\",\"question\",\"error\"].reduce((e,t)=>(e[t]=i+t,e),{}),l=\"SweetAlert2:\",c=e=>e.charAt(0).toUpperCase()+e.slice(1),d=e=>{console.warn(`${l} ${\"object\"==typeof e?e.join(\" \"):e}`)},u=e=>{console.error(`${l} ${e}`)},p=[],h=(e,t=null)=>{var o;o=`\"${e}\" is deprecated and will be removed in the next major release.${t?` Use \"${t}\" instead.`:\"\"}`,p.includes(o)||(p.push(o),d(o))},m=e=>\"function\"==typeof e?e():e,w=e=>e&&\"function\"==typeof e.toPromise,f=e=>w(e)?e.toPromise():Promise.resolve(e),g=e=>e&&Promise.resolve(e)===e,b=()=>document.body.querySelector(`.${a.container}`),v=e=>{const t=b();return t?t.querySelector(e):null},y=e=>v(`.${e}`),k=()=>y(a.popup),E=()=>y(a.icon),C=()=>y(a.title),S=()=>y(a[\"html-container\"]),A=()=>y(a.image),x=()=>y(a[\"progress-steps\"]),T=()=>y(a[\"validation-message\"]),I=()=>v(`.${a.actions} .${a.confirm}`),B=()=>v(`.${a.actions} .${a.cancel}`),$=()=>v(`.${a.actions} .${a.deny}`),q=()=>v(`.${a.loader}`),L=()=>y(a.actions),_=()=>y(a.footer),D=()=>y(a[\"timer-progress-bar\"]),O=()=>y(a.close),P=()=>{const e=k();if(!e)return[];const t=e.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]):not([tabindex=\"0\"])'),o=Array.from(t).sort((e,t)=>{const o=parseInt(e.getAttribute(\"tabindex\")||\"0\"),n=parseInt(t.getAttribute(\"tabindex\")||\"0\");return o>n?1:o\u003Cn?-1:0}),n=e.querySelectorAll('\\n  a[href],\\n  area[href],\\n  input:not([disabled]),\\n  select:not([disabled]),\\n  textarea:not([disabled]),\\n  button:not([disabled]),\\n  iframe,\\n  object,\\n  embed,\\n  [tabindex=\"0\"],\\n  [contenteditable],\\n  audio[controls],\\n  video[controls],\\n  summary\\n'),s=Array.from(n).filter(e=>\"-1\"!==e.getAttribute(\"tabindex\"));return[...new Set(o.concat(s))].filter(e=>ee(e))},M=()=>H(document.body,a.shown)&&!H(document.body,a[\"toast-shown\"])&&!H(document.body,a[\"no-backdrop\"]),Q=()=>{const e=k();return!!e&&H(e,a.toast)},N=(e,t)=>{if(e.textContent=\"\",t){const o=(new DOMParser).parseFromString(t,\"text\u002Fhtml\"),n=o.querySelector(\"head\");n&&Array.from(n.childNodes).forEach(t=>{e.appendChild(t)});const s=o.querySelector(\"body\");s&&Array.from(s.childNodes).forEach(t=>{t instanceof HTMLVideoElement||t instanceof HTMLAudioElement?e.appendChild(t.cloneNode(!0)):e.appendChild(t)})}},H=(e,t)=>{if(!t)return!1;const o=t.split(\u002F\\s+\u002F);for(let t=0;t\u003Co.length;t++)if(!e.classList.contains(o[t]))return!1;return!0},F=(e,t,o)=>{if(((e,t)=>{Array.from(e.classList).forEach(o=>{Object.values(a).includes(o)||Object.values(r).includes(o)||Object.values(t.showClass||{}).includes(o)||e.classList.remove(o)})})(e,t),!t.customClass)return;const n=t.customClass[o];n&&(\"string\"==typeof n||n.forEach?X(e,n):d(`Invalid type of customClass.${o}! Expected string or iterable object, got \"${typeof n}\"`))},z=(e,t)=>{if(!t)return null;switch(t){case\"select\":case\"textarea\":case\"file\":return e.querySelector(`.${a.popup} > .${a[t]}`);case\"checkbox\":return e.querySelector(`.${a.popup} > .${a.checkbox} input`);case\"radio\":return e.querySelector(`.${a.popup} > .${a.radio} input:checked`)||e.querySelector(`.${a.popup} > .${a.radio} input:first-child`);case\"range\":return e.querySelector(`.${a.popup} > .${a.range} input`);default:return e.querySelector(`.${a.popup} > .${a.input}`)}},j=e=>{if(e.focus(),\"file\"!==e.type){const t=e.value;e.value=\"\",e.value=t}},W=(e,t,o)=>{e&&t&&(\"string\"==typeof t&&(t=t.split(\u002F\\s+\u002F).filter(Boolean)),t.forEach(t=>{Array.isArray(e)?e.forEach(e=>{o?e.classList.add(t):e.classList.remove(t)}):o?e.classList.add(t):e.classList.remove(t)}))},X=(e,t)=>{W(e,t,!0)},R=(e,t)=>{W(e,t,!1)},Y=(e,t)=>{const o=Array.from(e.children);for(let e=0;e\u003Co.length;e++){const n=o[e];if(n instanceof HTMLElement&&H(n,t))return n}},V=(e,t,o)=>{o===`${parseInt(`${o}`)}`&&(o=parseInt(o)),o||0===parseInt(`${o}`)?e.style.setProperty(t,\"number\"==typeof o?`${o}px`:o):e.style.removeProperty(t)},U=(e,t=\"flex\")=>{e&&(e.style.display=t)},J=e=>{e&&(e.style.display=\"none\")},G=(e,t=\"block\")=>{e&&new MutationObserver(()=>{K(e,e.innerHTML,t)}).observe(e,{childList:!0,subtree:!0})},Z=(e,t,o,n)=>{const s=e.querySelector(t);s&&s.style.setProperty(o,n)},K=(e,t,o=\"flex\")=>{t?U(e,o):J(e)},ee=e=>Boolean(e&&(e.offsetWidth||e.offsetHeight||e.getClientRects().length)),te=e=>Boolean(e.scrollHeight>e.clientHeight),oe=e=>{const t=window.getComputedStyle(e),o=parseFloat(t.getPropertyValue(\"animation-duration\")||\"0\"),n=parseFloat(t.getPropertyValue(\"transition-duration\")||\"0\");return o>0||n>0},ne=(e,t=!1)=>{const o=D();o&&ee(o)&&(t&&(o.style.transition=\"none\",o.style.width=\"100%\"),setTimeout(()=>{o.style.transition=`width ${e\u002F1e3}s linear`,o.style.width=\"0%\"},10))},se=`\\n \u003Cdiv aria-labelledby=\"${a.title}\" aria-describedby=\"${a[\"html-container\"]}\" class=\"${a.popup}\" tabindex=\"-1\">\\n   \u003Cbutton type=\"button\" class=\"${a.close}\">\u003C\u002Fbutton>\\n   \u003Cul class=\"${a[\"progress-steps\"]}\">\u003C\u002Ful>\\n   \u003Cdiv class=\"${a.icon}\">\u003C\u002Fdiv>\\n   \u003Cimg class=\"${a.image}\" \u002F>\\n   \u003Ch2 class=\"${a.title}\" id=\"${a.title}\">\u003C\u002Fh2>\\n   \u003Cdiv class=\"${a[\"html-container\"]}\" id=\"${a[\"html-container\"]}\">\u003C\u002Fdiv>\\n   \u003Cinput class=\"${a.input}\" id=\"${a.input}\" \u002F>\\n   \u003Cinput type=\"file\" class=\"${a.file}\" \u002F>\\n   \u003Cdiv class=\"${a.range}\">\\n     \u003Cinput type=\"range\" \u002F>\\n     \u003Coutput>\u003C\u002Foutput>\\n   \u003C\u002Fdiv>\\n   \u003Cselect class=\"${a.select}\" id=\"${a.select}\">\u003C\u002Fselect>\\n   \u003Cdiv class=\"${a.radio}\">\u003C\u002Fdiv>\\n   \u003Clabel class=\"${a.checkbox}\">\\n     \u003Cinput type=\"checkbox\" id=\"${a.checkbox}\" \u002F>\\n     \u003Cspan class=\"${a.label}\">\u003C\u002Fspan>\\n   \u003C\u002Flabel>\\n   \u003Ctextarea class=\"${a.textarea}\" id=\"${a.textarea}\">\u003C\u002Ftextarea>\\n   \u003Cdiv class=\"${a[\"validation-message\"]}\" id=\"${a[\"validation-message\"]}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.actions}\">\\n     \u003Cdiv class=\"${a.loader}\">\u003C\u002Fdiv>\\n     \u003Cbutton type=\"button\" class=\"${a.confirm}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.deny}\">\u003C\u002Fbutton>\\n     \u003Cbutton type=\"button\" class=\"${a.cancel}\">\u003C\u002Fbutton>\\n   \u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a.footer}\">\u003C\u002Fdiv>\\n   \u003Cdiv class=\"${a[\"timer-progress-bar-container\"]}\">\\n     \u003Cdiv class=\"${a[\"timer-progress-bar\"]}\">\u003C\u002Fdiv>\\n   \u003C\u002Fdiv>\\n \u003C\u002Fdiv>\\n`.replace(\u002F(^|\\n)\\s*\u002Fg,\"\"),ie=()=>{n.currentInstance&&n.currentInstance.resetValidationMessage()},ae=e=>{const t=(()=>{const e=b();return!!e&&(e.remove(),R([document.documentElement,document.body],[a[\"no-backdrop\"],a[\"toast-shown\"],a[\"has-column\"]]),!0)})();if(\"undefined\"==typeof window||\"undefined\"==typeof document)return void u(\"SweetAlert2 requires document to initialize\");const o=document.createElement(\"div\");o.className=a.container,t&&X(o,a[\"no-transition\"]),N(o,se),o.dataset.swal2Theme=e.theme;const s=(e=>{if(\"string\"==typeof e){const t=document.querySelector(e);if(!t)throw new Error(`Target element \"${e}\" not found`);return t}return e})(e.target||\"body\");s.appendChild(o),e.topLayer&&(o.setAttribute(\"popover\",\"\"),o.showPopover()),(e=>{const t=k();t&&(t.setAttribute(\"role\",e.toast?\"alert\":\"dialog\"),t.setAttribute(\"aria-live\",e.toast?\"polite\":\"assertive\"),e.toast||t.setAttribute(\"aria-modal\",\"true\"))})(e),(e=>{\"rtl\"===window.getComputedStyle(e).direction&&(X(b(),a.rtl),n.isRTL=!0)})(s),(()=>{const e=k();if(!e)return;const t=Y(e,a.input),o=Y(e,a.file),n=e.querySelector(`.${a.range} input`),s=e.querySelector(`.${a.range} output`),i=Y(e,a.select),r=e.querySelector(`.${a.checkbox} input`),l=Y(e,a.textarea);t&&(t.oninput=ie),o&&(o.onchange=ie),i&&(i.onchange=ie),r&&(r.onchange=ie),l&&(l.oninput=ie),n&&s&&(n.oninput=()=>{ie(),s.value=n.value},n.onchange=()=>{ie(),s.value=n.value})})()},re=(e,t)=>{e instanceof HTMLElement?t.appendChild(e):\"object\"==typeof e?le(e,t):e&&N(t,e)},le=(e,t)=>{\"jquery\"in e?ce(t,e):N(t,e.toString())},ce=(e,t)=>{if(e.textContent=\"\",0 in t)for(let o=0;o in t;o++)e.appendChild(t[o].cloneNode(!0));else e.appendChild(t.cloneNode(!0))},de=(e,t)=>{const o=L(),n=q();o&&n&&(t.showConfirmButton||t.showDenyButton||t.showCancelButton?U(o):J(o),F(o,t,\"actions\"),function(e,t,o){const n=I(),s=$(),i=B();n&&s&&i&&(pe(n,\"confirm\",o),pe(s,\"deny\",o),pe(i,\"cancel\",o),function(e,t,o,n){n.buttonsStyling?(X([e,t,o],a.styled),n.confirmButtonColor&&e.style.setProperty(\"--swal2-confirm-button-background-color\",n.confirmButtonColor),n.denyButtonColor&&t.style.setProperty(\"--swal2-deny-button-background-color\",n.denyButtonColor),n.cancelButtonColor&&o.style.setProperty(\"--swal2-cancel-button-background-color\",n.cancelButtonColor),ue(e),ue(t),ue(o)):R([e,t,o],a.styled)}(n,s,i,o),o.reverseButtons&&(o.toast?(e.insertBefore(i,n),e.insertBefore(s,n)):(e.insertBefore(i,t),e.insertBefore(s,t),e.insertBefore(n,t))))}(o,n,t),N(n,t.loaderHtml||\"\"),F(n,t,\"loader\"))};function ue(e){const t=window.getComputedStyle(e);if(t.getPropertyValue(\"--swal2-action-button-focus-box-shadow\"))return;const o=t.backgroundColor.replace(\u002Frgba?\\((\\d+), (\\d+), (\\d+).*\u002F,\"rgba($1, $2, $3, 0.5)\");e.style.setProperty(\"--swal2-action-button-focus-box-shadow\",t.getPropertyValue(\"--swal2-outline\").replace(\u002F rgba\\(.*\u002F,` ${o}`))}function pe(e,t,o){const n=c(t);K(e,o[`show${n}Button`],\"inline-block\"),N(e,o[`${t}ButtonText`]||\"\"),e.setAttribute(\"aria-label\",o[`${t}ButtonAriaLabel`]||\"\"),e.className=a[t],F(e,o,`${t}Button`)}const he=(e,t)=>{const o=b();o&&(function(e,t){\"string\"==typeof t?e.style.background=t:t||X([document.documentElement,document.body],a[\"no-backdrop\"])}(o,t.backdrop),function(e,t){t&&(t in a?X(e,a[t]):(d('The \"position\" parameter is not valid, defaulting to \"center\"'),X(e,a.center)))}(o,t.position),function(e,t){t&&X(e,a[`grow-${t}`])}(o,t.grow),F(o,t,\"container\"))};var me={innerParams:new WeakMap,domCache:new WeakMap};const we=[\"input\",\"file\",\"range\",\"select\",\"radio\",\"checkbox\",\"textarea\"],fe=e=>{if(!e.input)return;if(!Ce[e.input])return void u(`Unexpected type of input! Expected ${Object.keys(Ce).join(\" | \")}, got \"${e.input}\"`);const t=ke(e.input);if(!t)return;const o=Ce[e.input](t,e);U(t),e.inputAutoFocus&&setTimeout(()=>{j(o)})},ge=(e,t)=>{const o=k();if(!o)return;const n=z(o,e);if(n){(e=>{for(let t=0;t\u003Ce.attributes.length;t++){const o=e.attributes[t].name;[\"id\",\"type\",\"value\",\"style\"].includes(o)||e.removeAttribute(o)}})(n);for(const e in t)n.setAttribute(e,t[e])}},be=e=>{if(!e.input)return;const t=ke(e.input);t&&F(t,e,\"input\")},ve=(e,t)=>{!e.placeholder&&t.inputPlaceholder&&(e.placeholder=t.inputPlaceholder)},ye=(e,t,o)=>{if(o.inputLabel){const n=document.createElement(\"label\"),s=a[\"input-label\"];n.setAttribute(\"for\",e.id),n.className=s,\"object\"==typeof o.customClass&&X(n,o.customClass.inputLabel),n.innerText=o.inputLabel,t.insertAdjacentElement(\"beforebegin\",n)}},ke=e=>{const t=k();if(t)return Y(t,a[e]||a.input)},Ee=(e,t)=>{[\"string\",\"number\"].includes(typeof t)?e.value=`${t}`:g(t)||d(`Unexpected type of inputValue! Expected \"string\", \"number\" or \"Promise\", got \"${typeof t}\"`)},Ce={};Ce.text=Ce.email=Ce.password=Ce.number=Ce.tel=Ce.url=Ce.search=Ce.date=Ce[\"datetime-local\"]=Ce.time=Ce.week=Ce.month=(e,t)=>{const o=e;return Ee(o,t.inputValue),ye(o,o,t),ve(o,t),o.type=t.input,o},Ce.file=(e,t)=>{const o=e;return ye(o,o,t),ve(o,t),o},Ce.range=(e,t)=>{const o=e,n=o.querySelector(\"input\"),s=o.querySelector(\"output\");return n&&(Ee(n,t.inputValue),n.type=t.input,ye(n,e,t)),s&&Ee(s,t.inputValue),e},Ce.select=(e,t)=>{const o=e;if(o.textContent=\"\",t.inputPlaceholder){const e=document.createElement(\"option\");N(e,t.inputPlaceholder),e.value=\"\",e.disabled=!0,e.selected=!0,o.appendChild(e)}return ye(o,o,t),o},Ce.radio=e=>(e.textContent=\"\",e),Ce.checkbox=(e,t)=>{const o=k();if(!o)throw new Error(\"Popup not found\");const n=z(o,\"checkbox\");if(!n)throw new Error(\"Checkbox input not found\");n.value=\"1\",n.checked=Boolean(t.inputValue);const s=e.querySelector(\"span\");if(s){const e=t.inputPlaceholder||t.inputLabel;e&&N(s,e)}return n},Ce.textarea=(e,t)=>{const o=e;Ee(o,t.inputValue),ve(o,t),ye(o,o,t);return setTimeout(()=>{if(\"MutationObserver\"in window){const e=k();if(!e)return;const n=parseInt(window.getComputedStyle(e).width);new MutationObserver(()=>{if(!document.body.contains(o))return;const e=o.offsetWidth+(i=o,parseInt(window.getComputedStyle(i).marginLeft)+parseInt(window.getComputedStyle(i).marginRight)),s=k();var i;s&&(e>n?s.style.width=`${e}px`:V(s,\"width\",t.width))}).observe(o,{attributes:!0,attributeFilter:[\"style\"]})}}),o};const Se=(e,t)=>{const o=S();o&&(G(o),F(o,t,\"htmlContainer\"),t.html?(re(t.html,o),U(o,\"block\")):t.text?(o.textContent=t.text,U(o,\"block\")):J(o),((e,t)=>{const o=k();if(!o)return;const n=me.innerParams.get(e),s=!n||t.input!==n.input;we.forEach(e=>{const n=Y(o,a[e]);n&&(ge(e,t.inputAttributes),n.className=a[e],s&&J(n))}),t.input&&(s&&fe(t),be(t))})(e,t))},Ae=(e,t)=>{for(const[o,n]of Object.entries(r))t.icon!==o&&R(e,n);X(e,t.icon&&r[t.icon]),Ie(e,t),xe(),F(e,t,\"icon\")},xe=()=>{const e=k();if(!e)return;const t=window.getComputedStyle(e).getPropertyValue(\"background-color\"),o=e.querySelectorAll(\"[class^=swal2-success-circular-line], .swal2-success-fix\");for(let e=0;e\u003Co.length;e++)o[e].style.backgroundColor=t},Te=(e,t)=>{if(!t.icon&&!t.iconHtml)return;let o=e.innerHTML,n=\"\";t.iconHtml?n=Be(t.iconHtml):\"success\"===t.icon?(n=(e=>`\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-left\">\u003C\u002Fdiv>':\"\"}\\n  \u003Cspan class=\"swal2-success-line-tip\">\u003C\u002Fspan> \u003Cspan class=\"swal2-success-line-long\">\u003C\u002Fspan>\\n  \u003Cdiv class=\"swal2-success-ring\">\u003C\u002Fdiv>\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-fix\">\u003C\u002Fdiv>':\"\"}\\n  ${e.animation?'\u003Cdiv class=\"swal2-success-circular-line-right\">\u003C\u002Fdiv>':\"\"}\\n`)(t),o=o.replace(\u002F style=\".*?\"\u002Fg,\"\")):\"error\"===t.icon?n='\\n  \u003Cspan class=\"swal2-x-mark\">\\n    \u003Cspan class=\"swal2-x-mark-line-left\">\u003C\u002Fspan>\\n    \u003Cspan class=\"swal2-x-mark-line-right\">\u003C\u002Fspan>\\n  \u003C\u002Fspan>\\n':t.icon&&(n=Be({question:\"?\",warning:\"!\",info:\"i\"}[t.icon])),o.trim()!==n.trim()&&N(e,n)},Ie=(e,t)=>{if(t.iconColor){e.style.color=t.iconColor,e.style.borderColor=t.iconColor;for(const o of[\".swal2-success-line-tip\",\".swal2-success-line-long\",\".swal2-x-mark-line-left\",\".swal2-x-mark-line-right\"])Z(e,o,\"background-color\",t.iconColor);Z(e,\".swal2-success-ring\",\"border-color\",t.iconColor)}},Be=e=>`\u003Cdiv class=\"${a[\"icon-content\"]}\">${e}\u003C\u002Fdiv>`;let $e=!1,qe=0,Le=0,_e=0,De=0;const Oe=e=>{const t=k();if(!t)return;const o=E();if(e.target===t||o&&o.contains(e.target)){$e=!0;const o=Qe(e);qe=o.clientX,Le=o.clientY,_e=parseInt(t.style.insetInlineStart)||0,De=parseInt(t.style.insetBlockStart)||0,X(t,\"swal2-dragging\")}},Pe=e=>{const t=k();if(t&&$e){let{clientX:o,clientY:s}=Qe(e);const i=o-qe;t.style.insetInlineStart=`${_e+(n.isRTL?-i:i)}px`,t.style.insetBlockStart=`${De+(s-Le)}px`}},Me=()=>{const e=k();$e=!1,R(e,\"swal2-dragging\")},Qe=e=>{let t=0,o=0;return e.type.startsWith(\"mouse\")?(t=e.clientX,o=e.clientY):e.type.startsWith(\"touch\")&&(t=e.touches[0].clientX,o=e.touches[0].clientY),{clientX:t,clientY:o}},Ne=(e,t)=>{const o=b(),n=k();if(o&&n){if(t.toast){V(o,\"width\",t.width),n.style.width=\"100%\";const e=q();e&&n.insertBefore(e,E())}else V(n,\"width\",t.width);V(n,\"padding\",t.padding),t.color&&(n.style.color=t.color),t.background&&(n.style.background=t.background),J(T()),He(n,t),t.draggable&&!t.toast?(X(n,a.draggable),(e=>{e.addEventListener(\"mousedown\",Oe),document.body.addEventListener(\"mousemove\",Pe),e.addEventListener(\"mouseup\",Me),e.addEventListener(\"touchstart\",Oe),document.body.addEventListener(\"touchmove\",Pe),e.addEventListener(\"touchend\",Me)})(n)):(R(n,a.draggable),(e=>{e.removeEventListener(\"mousedown\",Oe),document.body.removeEventListener(\"mousemove\",Pe),e.removeEventListener(\"mouseup\",Me),e.removeEventListener(\"touchstart\",Oe),document.body.removeEventListener(\"touchmove\",Pe),e.removeEventListener(\"touchend\",Me)})(n))}},He=(e,t)=>{const o=t.showClass||{};e.className=`${a.popup} ${ee(e)?o.popup:\"\"}`,t.toast?(X([document.documentElement,document.body],a[\"toast-shown\"]),X(e,a.toast)):X(e,a.modal),F(e,t,\"popup\"),\"string\"==typeof t.customClass&&X(e,t.customClass),t.icon&&X(e,a[`icon-${t.icon}`])},Fe=e=>{const t=document.createElement(\"li\");return X(t,a[\"progress-step\"]),N(t,e),t},ze=e=>{const t=document.createElement(\"li\");return X(t,a[\"progress-step-line\"]),e.progressStepsDistance&&V(t,\"width\",e.progressStepsDistance),t},je=(e,t)=>{var o;Ne(0,t),he(0,t),((e,t)=>{const o=x();if(!o)return;const{progressSteps:n,currentProgressStep:s}=t;n&&0!==n.length&&void 0!==s?(U(o),o.textContent=\"\",s>=n.length&&d(\"Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)\"),n.forEach((e,i)=>{const r=Fe(e);if(o.appendChild(r),i===s&&X(r,a[\"active-progress-step\"]),i!==n.length-1){const e=ze(t);o.appendChild(e)}})):J(o)})(0,t),((e,t)=>{const o=me.innerParams.get(e),n=E();if(n){if(o&&t.icon===o.icon)return Te(n,t),void Ae(n,t);if(t.icon||t.iconHtml){if(t.icon&&-1===Object.keys(r).indexOf(t.icon))return u(`Unknown icon! Expected \"success\", \"error\", \"warning\", \"info\" or \"question\", got \"${t.icon}\"`),void J(n);U(n),Te(n,t),Ae(n,t),X(n,t.showClass&&t.showClass.icon),window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",xe)}else J(n)}})(e,t),((e,t)=>{const o=A();o&&(t.imageUrl?(U(o,\"\"),o.setAttribute(\"src\",t.imageUrl),o.setAttribute(\"alt\",t.imageAlt||\"\"),V(o,\"width\",t.imageWidth),V(o,\"height\",t.imageHeight),o.className=a.image,F(o,t,\"image\")):J(o))})(0,t),((e,t)=>{const o=C();o&&(G(o),K(o,Boolean(t.title||t.titleText),\"block\"),t.title&&re(t.title,o),t.titleText&&(o.innerText=t.titleText),F(o,t,\"title\"))})(0,t),((e,t)=>{const o=O();o&&(N(o,t.closeButtonHtml||\"\"),F(o,t,\"closeButton\"),K(o,t.showCloseButton),o.setAttribute(\"aria-label\",t.closeButtonAriaLabel||\"\"))})(0,t),Se(e,t),de(0,t),((e,t)=>{const o=_();o&&(G(o),K(o,Boolean(t.footer),\"block\"),t.footer&&re(t.footer,o),F(o,t,\"footer\"))})(0,t);const s=k();\"function\"==typeof t.didRender&&s&&t.didRender(s),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didRender\",s)},We=()=>{var e;return null===(e=I())||void 0===e?void 0:e.click()},Xe=Object.freeze({cancel:\"cancel\",backdrop:\"backdrop\",close:\"close\",esc:\"esc\",timer:\"timer\"}),Re=e=>{if(e.keydownTarget&&e.keydownHandlerAdded&&e.keydownHandler){const t=e.keydownHandler;e.keydownTarget.removeEventListener(\"keydown\",t,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!1}},Ye=(e,t)=>{var o;const n=P();if(n.length)return-2===(e+=t)&&(e=n.length-1),e===n.length?e=0:-1===e&&(e=n.length-1),void n[e].focus();null===(o=k())||void 0===o||o.focus()},Ve=[\"ArrowRight\",\"ArrowDown\"],Ue=[\"ArrowLeft\",\"ArrowUp\"],Je=(e,t,o)=>{e&&(t.isComposing||229===t.keyCode||(e.stopKeydownPropagation&&t.stopPropagation(),\"Enter\"===t.key?Ge(t,e):\"Tab\"===t.key?Ze(t):[...Ve,...Ue].includes(t.key)?Ke(t.key):\"Escape\"===t.key&&et(t,e,o)))},Ge=(e,t)=>{if(!m(t.allowEnterKey))return;const o=k();if(!o||!t.input)return;const n=z(o,t.input);if(e.target&&n&&e.target instanceof HTMLElement&&e.target.outerHTML===n.outerHTML){if([\"textarea\",\"file\"].includes(t.input))return;We(),e.preventDefault()}},Ze=e=>{const t=e.target,o=P();let n=-1;for(let e=0;e\u003Co.length;e++)if(t===o[e]){n=e;break}e.shiftKey?Ye(n,-1):Ye(n,1),e.stopPropagation(),e.preventDefault()},Ke=e=>{const t=L(),o=I(),n=$(),s=B();if(!(t&&o&&n&&s))return;const i=[o,n,s];if(document.activeElement instanceof HTMLElement&&!i.includes(document.activeElement))return;const a=Ve.includes(e)?\"nextElementSibling\":\"previousElementSibling\";let r=document.activeElement;if(r){for(let e=0;e\u003Ct.children.length;e++){if(r=r[a],!r)return;if(r instanceof HTMLButtonElement&&ee(r))break}r instanceof HTMLButtonElement&&r.focus()}},et=(e,t,o)=>{e.preventDefault(),m(t.allowEscapeKey)&&o(Xe.esc)};var tt={swalPromiseResolve:new WeakMap,swalPromiseReject:new WeakMap};const ot=()=>{Array.from(document.body.children).forEach(e=>{e.hasAttribute(\"data-previous-aria-hidden\")?(e.setAttribute(\"aria-hidden\",e.getAttribute(\"data-previous-aria-hidden\")||\"\"),e.removeAttribute(\"data-previous-aria-hidden\")):e.removeAttribute(\"aria-hidden\")})},nt=\"undefined\"!=typeof window&&Boolean(window.GestureEvent),st=()=>{const e=b();if(!e)return;let t;e.ontouchstart=e=>{t=it(e)},e.ontouchmove=e=>{t&&(e.preventDefault(),e.stopPropagation())}},it=e=>{const t=e.target,o=b(),n=S();return!(!o||!n||at(e)||rt(e)||t!==o&&(te(o)||!(t instanceof HTMLElement)||((e,t)=>{let o=e;for(;o&&o!==t;){if(te(o))return!0;o=o.parentElement}return!1})(t,n)||\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||te(n)&&n.contains(t)))},at=e=>Boolean(e.touches&&e.touches.length&&\"stylus\"===e.touches[0].touchType),rt=e=>e.touches&&e.touches.length>1;let lt=null;const ct=e=>{null===lt&&(document.body.scrollHeight>window.innerHeight||\"scroll\"===e)&&(lt=parseInt(window.getComputedStyle(document.body).getPropertyValue(\"padding-right\")),document.body.style.paddingRight=`${lt+(()=>{const e=document.createElement(\"div\");e.className=a[\"scrollbar-measure\"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`)};function dt(e,t,o,i){Q()?bt(e,i):(s(o).then(()=>bt(e,i)),Re(n)),nt?(t.setAttribute(\"style\",\"display:none !important\"),t.removeAttribute(\"class\"),t.innerHTML=\"\"):t.remove(),M()&&(null!==lt&&(document.body.style.paddingRight=`${lt}px`,lt=null),(()=>{if(H(document.body,a.iosfix)){const e=parseInt(document.body.style.top,10);R(document.body,a.iosfix),document.body.style.top=\"\",document.body.scrollTop=-1*e}})(),ot()),R([document.documentElement,document.body],[a.shown,a[\"height-auto\"],a[\"no-backdrop\"],a[\"toast-shown\"]])}function ut(e){e=wt(e);const t=tt.swalPromiseResolve.get(this),o=pt(this);this.isAwaitingPromise?e.isDismissed||(mt(this),t(e)):o&&t(e)}const pt=e=>{const t=k();if(!t)return!1;const o=me.innerParams.get(e);if(!o||H(t,o.hideClass.popup))return!1;R(t,o.showClass.popup),X(t,o.hideClass.popup);const n=b();return R(n,o.showClass.backdrop),X(n,o.hideClass.backdrop),ft(e,t,o),!0};function ht(e){const t=tt.swalPromiseReject.get(this);mt(this),t&&t(e)}const mt=e=>{e.isAwaitingPromise&&(delete e.isAwaitingPromise,me.innerParams.get(e)||e._destroy())},wt=e=>void 0===e?{isConfirmed:!1,isDenied:!1,isDismissed:!0}:Object.assign({isConfirmed:!1,isDenied:!1,isDismissed:!1},e),ft=(e,t,o)=>{var s;const i=b(),a=oe(t);\"function\"==typeof o.willClose&&o.willClose(t),null===(s=n.eventEmitter)||void 0===s||s.emit(\"willClose\",t),a&&i?gt(e,t,i,Boolean(o.returnFocus),o.didClose):i&&dt(e,i,Boolean(o.returnFocus),o.didClose)},gt=(e,t,o,s,i)=>{n.swalCloseEventFinishedCallback=dt.bind(null,e,o,s,i);const a=function(e){var o;e.target===t&&(null===(o=n.swalCloseEventFinishedCallback)||void 0===o||o.call(n),delete n.swalCloseEventFinishedCallback,t.removeEventListener(\"animationend\",a),t.removeEventListener(\"transitionend\",a))};t.addEventListener(\"animationend\",a),t.addEventListener(\"transitionend\",a)},bt=(e,t)=>{setTimeout(()=>{var o;\"function\"==typeof t&&t.bind(e.params)(),null===(o=n.eventEmitter)||void 0===o||o.emit(\"didClose\"),e._destroy&&e._destroy()})},vt=e=>{let t=k();if(t||new Ko,t=k(),!t)return;const o=q();Q()?J(E()):yt(t,e),U(o),t.setAttribute(\"data-loading\",\"true\"),t.setAttribute(\"aria-busy\",\"true\"),t.focus()},yt=(e,t)=>{const o=L(),n=q();o&&n&&(!t&&ee(I())&&(t=I()),U(o),t&&(J(t),n.setAttribute(\"data-button-to-replace\",t.className),o.insertBefore(n,t)),X([e,o],a.loading))},kt=e=>e.checked?1:0,Et=e=>e.checked?e.value:null,Ct=e=>e.files&&e.files.length?null!==e.getAttribute(\"multiple\")?e.files:e.files[0]:null,St=(e,t)=>{const o=k();if(!o)return;const n=e=>{\"select\"===t.input?function(e,t,o){const n=Y(e,a.select);if(!n)return;const s=(e,t,n)=>{const s=document.createElement(\"option\");s.value=n,N(s,t),s.selected=Tt(n,o.inputValue),e.appendChild(s)};t.forEach(e=>{const t=e[0],o=e[1];if(Array.isArray(o)){const e=document.createElement(\"optgroup\");e.label=t,e.disabled=!1,n.appendChild(e),o.forEach(t=>s(e,t[1],t[0]))}else s(n,o,t)}),n.focus()}(o,xt(e),t):\"radio\"===t.input&&function(e,t,o){const n=Y(e,a.radio);if(!n)return;t.forEach(e=>{const t=e[0],s=e[1],i=document.createElement(\"input\"),r=document.createElement(\"label\");i.type=\"radio\",i.name=a.radio,i.value=t,Tt(t,o.inputValue)&&(i.checked=!0);const l=document.createElement(\"span\");N(l,s),l.className=a.label,r.appendChild(i),r.appendChild(l),n.appendChild(r)});const s=n.querySelectorAll(\"input\");s.length&&s[0].focus()}(o,xt(e),t)};w(t.inputOptions)||g(t.inputOptions)?(vt(I()),f(t.inputOptions).then(t=>{e.hideLoading(),n(t)})):\"object\"==typeof t.inputOptions?n(t.inputOptions):u(\"Unexpected type of inputOptions! Expected object, Map or Promise, got \"+typeof t.inputOptions)},At=(e,t)=>{const o=e.getInput();o&&(J(o),f(t.inputValue).then(n=>{o.value=\"number\"===t.input?`${parseFloat(n)||0}`:`${n}`,U(o),o.focus(),e.hideLoading()}).catch(t=>{u(`Error in inputValue promise: ${t}`),o.value=\"\",U(o),o.focus(),e.hideLoading()}))};const xt=e=>{const t=[];return e instanceof Map?e.forEach((e,o)=>{let n=e;\"object\"==typeof n&&(n=xt(n)),t.push([o,n])}):Object.keys(e).forEach(o=>{let n=e[o];\"object\"==typeof n&&(n=xt(n)),t.push([o,n])}),t},Tt=(e,t)=>Boolean(t)&&null!=t&&t.toString()===e.toString(),It=(e,t)=>{const o=me.innerParams.get(e);if(!o.input)return void u(`The \"input\" parameter is needed to be set when using returnInputValueOn${c(t)}`);const n=e.getInput(),s=((e,t)=>{const o=e.getInput();if(!o)return null;switch(t.input){case\"checkbox\":return kt(o);case\"radio\":return Et(o);case\"file\":return Ct(o);default:return t.inputAutoTrim?o.value.trim():o.value}})(e,o);o.inputValidator?Bt(e,s,t):n&&!n.checkValidity()?(e.enableButtons(),e.showValidationMessage(o.validationMessage||n.validationMessage)):\"deny\"===t?$t(e,s):_t(e,s)},Bt=(e,t,o)=>{const n=me.innerParams.get(e);e.disableInput(),Promise.resolve().then(()=>f(n.inputValidator(t,n.validationMessage))).then(n=>{e.enableButtons(),e.enableInput(),n?e.showValidationMessage(n):\"deny\"===o?$t(e,t):_t(e,t)})},$t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnDeny&&vt($()),o.preDeny?(e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preDeny(t,o.validationMessage))).then(o=>{!1===o?(e.hideLoading(),mt(e)):e.close({isDenied:!0,value:void 0===o?t:o})}).catch(t=>Lt(e,t))):e.close({isDenied:!0,value:t})},qt=(e,t)=>{e.close({isConfirmed:!0,value:t})},Lt=(e,t)=>{e.rejectPromise(t)},_t=(e,t)=>{const o=me.innerParams.get(e);o.showLoaderOnConfirm&&vt(),o.preConfirm?(e.resetValidationMessage(),e.isAwaitingPromise=!0,Promise.resolve().then(()=>f(o.preConfirm(t,o.validationMessage))).then(o=>{ee(T())||!1===o?(e.hideLoading(),mt(e)):qt(e,void 0===o?t:o)}).catch(t=>Lt(e,t))):qt(e,t)};function Dt(){const e=me.innerParams.get(this);if(!e)return;const t=me.domCache.get(this);J(t.loader),Q()?e.icon&&U(E()):Ot(t),R([t.popup,t.actions],a.loading),t.popup.removeAttribute(\"aria-busy\"),t.popup.removeAttribute(\"data-loading\"),t.confirmButton.disabled=!1,t.denyButton.disabled=!1,t.cancelButton.disabled=!1}const Ot=e=>{const t=e.loader.getAttribute(\"data-button-to-replace\"),o=t?e.popup.getElementsByClassName(t):[];o.length?U(o[0],\"inline-block\"):!ee(I())&&!ee($())&&!ee(B())&&J(e.actions)};function Pt(){const e=me.innerParams.get(this),t=me.domCache.get(this);return t?z(t.popup,e.input):null}function Mt(e,t,o){const n=me.domCache.get(e);t.forEach(e=>{n[e].disabled=o})}function Qt(e,t){const o=k();if(o&&e)if(\"radio\"===e.type){const e=o.querySelectorAll(`[name=\"${a.radio}\"]`);for(let o=0;o\u003Ce.length;o++)e[o].disabled=t}else e.disabled=t}function Nt(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!1)}function Ht(){Mt(this,[\"confirmButton\",\"denyButton\",\"cancelButton\"],!0)}function Ft(){Qt(this.getInput(),!1)}function zt(){Qt(this.getInput(),!0)}function jt(e){const t=me.domCache.get(this),o=me.innerParams.get(this);N(t.validationMessage,e),t.validationMessage.className=a[\"validation-message\"],o.customClass&&o.customClass.validationMessage&&X(t.validationMessage,o.customClass.validationMessage),U(t.validationMessage);const n=this.getInput();n&&(n.setAttribute(\"aria-invalid\",\"true\"),n.setAttribute(\"aria-describedby\",a[\"validation-message\"]),j(n),X(n,a.inputerror))}function Wt(){const e=me.domCache.get(this);e.validationMessage&&J(e.validationMessage);const t=this.getInput();t&&(t.removeAttribute(\"aria-invalid\"),t.removeAttribute(\"aria-describedby\"),R(t,a.inputerror))}const Xt={title:\"\",titleText:\"\",text:\"\",html:\"\",footer:\"\",icon:void 0,iconColor:void 0,iconHtml:void 0,template:void 0,toast:!1,draggable:!1,animation:!0,theme:\"light\",showClass:{popup:\"swal2-show\",backdrop:\"swal2-backdrop-show\",icon:\"swal2-icon-show\"},hideClass:{popup:\"swal2-hide\",backdrop:\"swal2-backdrop-hide\",icon:\"swal2-icon-hide\"},customClass:{},target:\"body\",color:void 0,backdrop:!0,heightAuto:!0,allowOutsideClick:!0,allowEscapeKey:!0,allowEnterKey:!0,stopKeydownPropagation:!0,keydownListenerCapture:!1,showConfirmButton:!0,showDenyButton:!1,showCancelButton:!1,preConfirm:void 0,preDeny:void 0,confirmButtonText:\"OK\",confirmButtonAriaLabel:\"\",confirmButtonColor:void 0,denyButtonText:\"No\",denyButtonAriaLabel:\"\",denyButtonColor:void 0,cancelButtonText:\"Cancel\",cancelButtonAriaLabel:\"\",cancelButtonColor:void 0,buttonsStyling:!0,reverseButtons:!1,focusConfirm:!0,focusDeny:!1,focusCancel:!1,returnFocus:!0,showCloseButton:!1,closeButtonHtml:\"&times;\",closeButtonAriaLabel:\"Close this dialog\",loaderHtml:\"\",showLoaderOnConfirm:!1,showLoaderOnDeny:!1,imageUrl:void 0,imageWidth:void 0,imageHeight:void 0,imageAlt:\"\",timer:void 0,timerProgressBar:!1,width:void 0,padding:void 0,background:void 0,input:void 0,inputPlaceholder:\"\",inputLabel:\"\",inputValue:\"\",inputOptions:{},inputAutoFocus:!0,inputAutoTrim:!0,inputAttributes:{},inputValidator:void 0,returnInputValueOnDeny:!1,validationMessage:void 0,grow:!1,position:\"center\",progressSteps:[],currentProgressStep:void 0,progressStepsDistance:void 0,willOpen:void 0,didOpen:void 0,didRender:void 0,willClose:void 0,didClose:void 0,didDestroy:void 0,scrollbarPadding:!0,topLayer:!1},Rt=[\"allowEscapeKey\",\"allowOutsideClick\",\"background\",\"buttonsStyling\",\"cancelButtonAriaLabel\",\"cancelButtonColor\",\"cancelButtonText\",\"closeButtonAriaLabel\",\"closeButtonHtml\",\"color\",\"confirmButtonAriaLabel\",\"confirmButtonColor\",\"confirmButtonText\",\"currentProgressStep\",\"customClass\",\"denyButtonAriaLabel\",\"denyButtonColor\",\"denyButtonText\",\"didClose\",\"didDestroy\",\"draggable\",\"footer\",\"hideClass\",\"html\",\"icon\",\"iconColor\",\"iconHtml\",\"imageAlt\",\"imageHeight\",\"imageUrl\",\"imageWidth\",\"preConfirm\",\"preDeny\",\"progressSteps\",\"returnFocus\",\"reverseButtons\",\"showCancelButton\",\"showCloseButton\",\"showConfirmButton\",\"showDenyButton\",\"text\",\"title\",\"titleText\",\"theme\",\"willClose\"],Yt={allowEnterKey:void 0},Vt=[\"allowOutsideClick\",\"allowEnterKey\",\"backdrop\",\"draggable\",\"focusConfirm\",\"focusDeny\",\"focusCancel\",\"returnFocus\",\"heightAuto\",\"keydownListenerCapture\"],Ut=e=>Object.prototype.hasOwnProperty.call(Xt,e),Jt=e=>-1!==Rt.indexOf(e),Gt=e=>Yt[e],Zt=e=>{Ut(e)||d(`Unknown parameter \"${e}\"`)},Kt=e=>{Vt.includes(e)&&d(`The parameter \"${e}\" is incompatible with toasts`)},eo=e=>{const t=Gt(e);t&&h(e,t)},to=e=>{!1===e.backdrop&&e.allowOutsideClick&&d('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`'),e.theme&&![\"light\",\"dark\",\"auto\",\"minimal\",\"borderless\",\"bootstrap-4\",\"bootstrap-4-light\",\"bootstrap-4-dark\",\"bootstrap-5\",\"bootstrap-5-light\",\"bootstrap-5-dark\",\"material-ui\",\"material-ui-light\",\"material-ui-dark\",\"embed-iframe\",\"bulma\",\"bulma-light\",\"bulma-dark\"].includes(e.theme)&&d(`Invalid theme \"${e.theme}\"`);for(const t in e)Zt(t),e.toast&&Kt(t),eo(t)};function oo(e){const t=b(),o=k(),n=me.innerParams.get(this);if(!o||H(o,n.hideClass.popup))return void d(\"You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.\");const s=no(e),i=Object.assign({},n,s);to(i),t&&(t.dataset.swal2Theme=i.theme),je(this,i),me.innerParams.set(this,i),Object.defineProperties(this,{params:{value:Object.assign({},this.params,e),writable:!1,enumerable:!0}})}const no=e=>{const t={};return Object.keys(e).forEach(o=>{if(Jt(o)){const n=e;t[o]=n[o]}else d(`Invalid parameter to update: ${o}`)}),t};function so(){var e;const t=me.domCache.get(this),o=me.innerParams.get(this);o?(t.popup&&n.swalCloseEventFinishedCallback&&(n.swalCloseEventFinishedCallback(),delete n.swalCloseEventFinishedCallback),\"function\"==typeof o.didDestroy&&o.didDestroy(),null===(e=n.eventEmitter)||void 0===e||e.emit(\"didDestroy\"),io(this)):ao(this)}const io=e=>{ao(e),delete e.params,delete n.keydownHandler,delete n.keydownTarget,delete n.currentInstance},ao=e=>{e.isAwaitingPromise?(ro(me,e),e.isAwaitingPromise=!0):(ro(tt,e),ro(me,e),delete e.isAwaitingPromise,delete e.disableButtons,delete e.enableButtons,delete e.getInput,delete e.disableInput,delete e.enableInput,delete e.hideLoading,delete e.disableLoading,delete e.showValidationMessage,delete e.resetValidationMessage,delete e.close,delete e.closePopup,delete e.closeModal,delete e.closeToast,delete e.rejectPromise,delete e.update,delete e._destroy)},ro=(e,t)=>{for(const o in e)e[o].delete(t)};var lo=Object.freeze({__proto__:null,_destroy:so,close:ut,closeModal:ut,closePopup:ut,closeToast:ut,disableButtons:Ht,disableInput:zt,disableLoading:Dt,enableButtons:Nt,enableInput:Ft,getInput:Pt,handleAwaitingPromise:mt,hideLoading:Dt,rejectPromise:ht,resetValidationMessage:Wt,showValidationMessage:jt,update:oo});const co=(e,t,o)=>{t.popup.onclick=()=>{e&&(uo(e)||e.timer||e.input)||o(Xe.close)}},uo=e=>Boolean(e.showConfirmButton||e.showDenyButton||e.showCancelButton||e.showCloseButton);let po=!1;const ho=e=>{e.popup.onmousedown=()=>{e.container.onmouseup=function(t){e.container.onmouseup=()=>{},t.target===e.container&&(po=!0)}}},mo=e=>{e.container.onmousedown=t=>{t.target===e.container&&t.preventDefault(),e.popup.onmouseup=function(t){e.popup.onmouseup=()=>{},(t.target===e.popup||t.target instanceof HTMLElement&&e.popup.contains(t.target))&&(po=!0)}}},wo=(e,t,o)=>{t.container.onclick=n=>{po?po=!1:n.target===t.container&&m(e.allowOutsideClick)&&o(Xe.backdrop)}},fo=e=>e instanceof Element||(e=>\"object\"==typeof e&&e.jquery)(e);const go=()=>{if(n.timeout)return(()=>{const e=D();if(!e)return;const t=parseInt(window.getComputedStyle(e).width);e.style.removeProperty(\"transition\"),e.style.width=\"100%\";const o=t\u002FparseInt(window.getComputedStyle(e).width)*100;e.style.width=`${o}%`})(),n.timeout.stop()},bo=()=>{if(n.timeout){const e=n.timeout.start();return ne(e),e}};let vo=!1;const yo={};const ko=e=>{for(let t=e.target;t&&t!==document;t=t.parentNode)for(const e in yo){const o=t.getAttribute&&t.getAttribute(e);if(o)return void yo[e].fire({template:o})}};n.eventEmitter=new class{constructor(){this.events={}}_getHandlersByEventName(e){return void 0===this.events[e]&&(this.events[e]=[]),this.events[e]}on(e,t){const o=this._getHandlersByEventName(e);o.includes(t)||o.push(t)}once(e,t){const o=(...n)=>{this.removeListener(e,o),t.apply(this,n)};this.on(e,o)}emit(e,...t){this._getHandlersByEventName(e).forEach(e=>{try{e.apply(this,t)}catch(e){console.error(e)}})}removeListener(e,t){const o=this._getHandlersByEventName(e),n=o.indexOf(t);n>-1&&o.splice(n,1)}removeAllListeners(e){void 0!==this.events[e]&&(this.events[e].length=0)}reset(){this.events={}}};var Eo=Object.freeze({__proto__:null,argsToParams:e=>{const t={};return\"object\"!=typeof e[0]||fo(e[0])?[\"title\",\"html\",\"icon\"].forEach((o,n)=>{const s=e[n];\"string\"==typeof s||fo(s)?t[o]=s:void 0!==s&&u(`Unexpected type of ${o}! Expected \"string\" or \"Element\", got ${typeof s}`)}):Object.assign(t,e[0]),t},bindClickHandler:function(e=\"data-swal-template\"){yo[e]=this,vo||(document.body.addEventListener(\"click\",ko),vo=!0)},clickCancel:()=>{var e;return null===(e=B())||void 0===e?void 0:e.click()},clickConfirm:We,clickDeny:()=>{var e;return null===(e=$())||void 0===e?void 0:e.click()},enableLoading:vt,fire:function(...e){return new this(...e)},getActions:L,getCancelButton:B,getCloseButton:O,getConfirmButton:I,getContainer:b,getDenyButton:$,getFocusableElements:P,getFooter:_,getHtmlContainer:S,getIcon:E,getIconContent:()=>y(a[\"icon-content\"]),getImage:A,getInputLabel:()=>y(a[\"input-label\"]),getLoader:q,getPopup:k,getProgressSteps:x,getTimerLeft:()=>n.timeout&&n.timeout.getTimerLeft(),getTimerProgressBar:D,getTitle:C,getValidationMessage:T,increaseTimer:e=>{if(n.timeout){const t=n.timeout.increase(e);return ne(t,!0),t}},isDeprecatedParameter:Gt,isLoading:()=>{const e=k();return!!e&&e.hasAttribute(\"data-loading\")},isTimerRunning:()=>Boolean(n.timeout&&n.timeout.isRunning()),isUpdatableParameter:Jt,isValidParameter:Ut,isVisible:()=>ee(k()),mixin:function(e){return class extends(this){_main(t,o){return super._main(t,Object.assign({},e,o))}}},off:(e,t)=>{n.eventEmitter&&(e?t?n.eventEmitter.removeListener(e,t):n.eventEmitter.removeAllListeners(e):n.eventEmitter.reset())},on:(e,t)=>{n.eventEmitter&&n.eventEmitter.on(e,t)},once:(e,t)=>{n.eventEmitter&&n.eventEmitter.once(e,t)},resumeTimer:bo,showLoading:vt,stopTimer:go,toggleTimer:()=>{const e=n.timeout;return e&&(e.running?go():bo())}});class Co{constructor(e,t){this.callback=e,this.remaining=t,this.running=!1,this.start()}start(){return this.running||(this.running=!0,this.started=new Date,this.id=setTimeout(this.callback,this.remaining)),this.remaining}stop(){return this.started&&this.running&&(this.running=!1,clearTimeout(this.id),this.remaining-=(new Date).getTime()-this.started.getTime()),this.remaining}increase(e){const t=this.running;return t&&this.stop(),this.remaining+=e,t&&this.start(),this.remaining}getTimerLeft(){return this.running&&(this.stop(),this.start()),this.remaining}isRunning(){return this.running}}const So=[\"swal-title\",\"swal-html\",\"swal-footer\"],Ao=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-param\")).forEach(e=>{_o(e,[\"name\",\"value\"]);const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=o in Xt&&\"boolean\"==typeof Xt[o]?\"false\"!==n:o in Xt&&\"object\"==typeof Xt[o]?JSON.parse(n):n)}),t},xo=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-function-param\")).forEach(e=>{const o=e.getAttribute(\"name\"),n=e.getAttribute(\"value\");o&&n&&(t[o]=new Function(`return ${n}`)())}),t},To=e=>{const t={};return Array.from(e.querySelectorAll(\"swal-button\")).forEach(e=>{_o(e,[\"type\",\"color\",\"aria-label\"]);const o=e.getAttribute(\"type\");if(o&&[\"confirm\",\"cancel\",\"deny\"].includes(o)){if(t[`${o}ButtonText`]=e.innerHTML,t[`show${c(o)}Button`]=!0,e.hasAttribute(\"color\")){const n=e.getAttribute(\"color\");null!==n&&(t[`${o}ButtonColor`]=n)}if(e.hasAttribute(\"aria-label\")){const n=e.getAttribute(\"aria-label\");null!==n&&(t[`${o}ButtonAriaLabel`]=n)}}}),t},Io=e=>{const t={},o=e.querySelector(\"swal-image\");return o&&(_o(o,[\"src\",\"width\",\"height\",\"alt\"]),o.hasAttribute(\"src\")&&(t.imageUrl=o.getAttribute(\"src\")||void 0),o.hasAttribute(\"width\")&&(t.imageWidth=o.getAttribute(\"width\")||void 0),o.hasAttribute(\"height\")&&(t.imageHeight=o.getAttribute(\"height\")||void 0),o.hasAttribute(\"alt\")&&(t.imageAlt=o.getAttribute(\"alt\")||void 0)),t},Bo=e=>{const t={},o=e.querySelector(\"swal-icon\");return o&&(_o(o,[\"type\",\"color\"]),o.hasAttribute(\"type\")&&(t.icon=o.getAttribute(\"type\")),o.hasAttribute(\"color\")&&(t.iconColor=o.getAttribute(\"color\")),t.iconHtml=o.innerHTML),t},$o=e=>{const t={},o=e.querySelector(\"swal-input\");o&&(_o(o,[\"type\",\"label\",\"placeholder\",\"value\"]),t.input=o.getAttribute(\"type\")||\"text\",o.hasAttribute(\"label\")&&(t.inputLabel=o.getAttribute(\"label\")),o.hasAttribute(\"placeholder\")&&(t.inputPlaceholder=o.getAttribute(\"placeholder\")),o.hasAttribute(\"value\")&&(t.inputValue=o.getAttribute(\"value\")));const n=Array.from(e.querySelectorAll(\"swal-input-option\"));return n.length&&(t.inputOptions={},n.forEach(e=>{_o(e,[\"value\"]);const o=e.getAttribute(\"value\");if(!o)return;const n=e.innerHTML;t.inputOptions[o]=n})),t},qo=(e,t)=>{const o={};for(const n in t){const s=t[n],i=e.querySelector(s);i&&(_o(i,[]),o[s.replace(\u002F^swal-\u002F,\"\")]=i.innerHTML.trim())}return o},Lo=e=>{const t=So.concat([\"swal-param\",\"swal-function-param\",\"swal-button\",\"swal-image\",\"swal-icon\",\"swal-input\",\"swal-input-option\"]);Array.from(e.children).forEach(e=>{const o=e.tagName.toLowerCase();t.includes(o)||d(`Unrecognized element \u003C${o}>`)})},_o=(e,t)=>{Array.from(e.attributes).forEach(o=>{-1===t.indexOf(o.name)&&d([`Unrecognized attribute \"${o.name}\" on \u003C${e.tagName.toLowerCase()}>.`,t.length?`Allowed attributes are: ${t.join(\", \")}`:\"To set the value, use HTML within the element.\"])})},Do=e=>{var t,o;const s=b(),i=k();if(!s||!i)return;\"function\"==typeof e.willOpen&&e.willOpen(i),null===(t=n.eventEmitter)||void 0===t||t.emit(\"willOpen\",i);const a=window.getComputedStyle(document.body).overflowY;if(Qo(s,i,e),setTimeout(()=>{Po(s,i)},10),M()&&(Mo(s,void 0!==e.scrollbarPadding&&e.scrollbarPadding,a),(()=>{const e=b();Array.from(document.body.children).forEach(t=>{t.contains(e)||(t.hasAttribute(\"aria-hidden\")&&t.setAttribute(\"data-previous-aria-hidden\",t.getAttribute(\"aria-hidden\")||\"\"),t.setAttribute(\"aria-hidden\",\"true\"))})})()),Q()||n.previousActiveElement||(n.previousActiveElement=document.activeElement),\"function\"==typeof e.didOpen){const t=e.didOpen;setTimeout(()=>t(i))}null===(o=n.eventEmitter)||void 0===o||o.emit(\"didOpen\",i)},Oo=e=>{const t=k();if(!t||e.target!==t)return;const o=b();o&&(t.removeEventListener(\"animationend\",Oo),t.removeEventListener(\"transitionend\",Oo),o.style.overflowY=\"auto\",R(o,a[\"no-transition\"]))},Po=(e,t)=>{oe(t)?(e.style.overflowY=\"hidden\",t.addEventListener(\"animationend\",Oo),t.addEventListener(\"transitionend\",Oo)):e.style.overflowY=\"auto\"},Mo=(e,t,o)=>{(()=>{if(nt&&!H(document.body,a.iosfix)){const e=document.body.scrollTop;document.body.style.top=-1*e+\"px\",X(document.body,a.iosfix),st()}})(),t&&\"hidden\"!==o&&ct(o),setTimeout(()=>{e.scrollTop=0})},Qo=(e,t,o)=>{var n;null!==(n=o.showClass)&&void 0!==n&&n.backdrop&&X(e,o.showClass.backdrop),o.animation?(t.style.setProperty(\"opacity\",\"0\",\"important\"),U(t,\"grid\"),setTimeout(()=>{var e;null!==(e=o.showClass)&&void 0!==e&&e.popup&&X(t,o.showClass.popup),t.style.removeProperty(\"opacity\")},10)):U(t,\"grid\"),X([document.documentElement,document.body],a.shown),o.heightAuto&&o.backdrop&&!o.toast&&X([document.documentElement,document.body],a[\"height-auto\"])};var No=(e,t)=>\u002F^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]+$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid email address\"),Ho=(e,t)=>\u002F^https?:\\\u002F\\\u002F(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-z]{2,63}\\b([-a-zA-Z0-9@:%_+.~#?&\u002F=]*)$\u002F.test(e)?Promise.resolve():Promise.resolve(t||\"Invalid URL\");function Fo(e){(function(e){e.inputValidator||(\"email\"===e.input&&(e.inputValidator=No),\"url\"===e.input&&(e.inputValidator=Ho))})(e),e.showLoaderOnConfirm&&!e.preConfirm&&d(\"showLoaderOnConfirm is set to true, but preConfirm is not defined.\\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\\nhttps:\u002F\u002Fsweetalert2.github.io\u002F#ajax-request\"),function(e){(!e.target||\"string\"==typeof e.target&&!document.querySelector(e.target)||\"string\"!=typeof e.target&&!e.target.appendChild)&&(d('Target parameter is not valid, defaulting to \"body\"'),e.target=\"body\")}(e),\"string\"==typeof e.title&&(e.title=e.title.split(\"\\n\").join(\"\u003Cbr \u002F>\")),ae(e)}let zo;var jo=new WeakMap;class Wo{constructor(...t){if(o(this,jo,Promise.resolve({isConfirmed:!1,isDenied:!1,isDismissed:!0})),\"undefined\"==typeof window)return;zo=this;const n=Object.freeze(this.constructor.argsToParams(t));var s,i,a;this.params=n,this.isAwaitingPromise=!1,s=jo,i=this,a=this._main(zo.params),s.set(e(s,i),a)}_main(e,t={}){if(to(Object.assign({},t,e)),n.currentInstance){const e=tt.swalPromiseResolve.get(n.currentInstance),{isAwaitingPromise:t}=n.currentInstance;n.currentInstance._destroy(),t||e({isDismissed:!0}),M()&&ot()}n.currentInstance=zo;const o=Ro(e,t);Fo(o),Object.freeze(o),n.timeout&&(n.timeout.stop(),delete n.timeout),clearTimeout(n.restoreFocusTimeout);const s=Yo(zo);return je(zo,o),me.innerParams.set(zo,o),Xo(zo,s,o)}then(e){return t(jo,this).then(e)}finally(e){return t(jo,this).finally(e)}}const Xo=(e,t,o)=>new Promise((s,i)=>{const a=t=>{e.close({isDismissed:!0,dismiss:t,isConfirmed:!1,isDenied:!1})};tt.swalPromiseResolve.set(e,s),tt.swalPromiseReject.set(e,i),t.confirmButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.input?It(e,\"confirm\"):_t(e,!0)})(e)},t.denyButton.onclick=()=>{(e=>{const t=me.innerParams.get(e);e.disableButtons(),t.returnInputValueOnDeny?It(e,\"deny\"):$t(e,!1)})(e)},t.cancelButton.onclick=()=>{((e,t)=>{e.disableButtons(),t(Xe.cancel)})(e,a)},t.closeButton.onclick=()=>{a(Xe.close)},((e,t,o)=>{e.toast?co(e,t,o):(ho(t),mo(t),wo(e,t,o))})(o,t,a),((e,t,o)=>{if(Re(e),!t.toast){const n=e=>Je(t,e,o);e.keydownHandler=n;const s=t.keydownListenerCapture?window:k();if(s){e.keydownTarget=s,e.keydownListenerCapture=t.keydownListenerCapture;const o=n;e.keydownTarget.addEventListener(\"keydown\",o,{capture:e.keydownListenerCapture}),e.keydownHandlerAdded=!0}}})(n,o,a),((e,t)=>{\"select\"===t.input||\"radio\"===t.input?St(e,t):[\"text\",\"email\",\"number\",\"tel\",\"textarea\"].some(e=>e===t.input)&&(w(t.inputValue)||g(t.inputValue))&&(vt(I()),At(e,t))})(e,o),Do(o),Vo(n,o,a),Uo(t,o),setTimeout(()=>{t.container.scrollTop=0})}),Ro=(e,t)=>{const o=(e=>{const t=\"string\"==typeof e.template?document.querySelector(e.template):e.template;if(!t)return{};const o=t.content;return Lo(o),Object.assign(Ao(o),xo(o),To(o),Io(o),Bo(o),$o(o),qo(o,So))})(e),n=Object.assign({},Xt,t,o,e);return n.showClass=Object.assign({},Xt.showClass,n.showClass),n.hideClass=Object.assign({},Xt.hideClass,n.hideClass),!1===n.animation&&(n.showClass={backdrop:\"swal2-noanimation\"},n.hideClass={}),n},Yo=e=>{const t={popup:k(),container:b(),actions:L(),confirmButton:I(),denyButton:$(),cancelButton:B(),loader:q(),closeButton:O(),validationMessage:T(),progressSteps:x()};return me.domCache.set(e,t),t},Vo=(e,t,o)=>{const n=D();J(n),t.timer&&(e.timeout=new Co(()=>{o(\"timer\"),delete e.timeout},t.timer),t.timerProgressBar&&n&&(U(n),F(n,t,\"timerProgressBar\"),setTimeout(()=>{e.timeout&&e.timeout.running&&ne(t.timer)})))},Uo=(e,t)=>{if(!t.toast)return m(t.allowEnterKey)?void(Jo(e)||Go(e,t)||Ye(-1,1)):(h(\"allowEnterKey\"),void Zo())},Jo=e=>{const t=Array.from(e.popup.querySelectorAll(\"[autofocus]\"));for(const e of t)if(e instanceof HTMLElement&&ee(e))return e.focus(),!0;return!1},Go=(e,t)=>t.focusDeny&&ee(e.denyButton)?(e.denyButton.focus(),!0):t.focusCancel&&ee(e.cancelButton)?(e.cancelButton.focus(),!0):!(!t.focusConfirm||!ee(e.confirmButton)||(e.confirmButton.focus(),0)),Zo=()=>{document.activeElement instanceof HTMLElement&&\"function\"==typeof document.activeElement.blur&&document.activeElement.blur()};Wo.prototype.disableButtons=Ht,Wo.prototype.enableButtons=Nt,Wo.prototype.getInput=Pt,Wo.prototype.disableInput=zt,Wo.prototype.enableInput=Ft,Wo.prototype.hideLoading=Dt,Wo.prototype.disableLoading=Dt,Wo.prototype.showValidationMessage=jt,Wo.prototype.resetValidationMessage=Wt,Wo.prototype.close=ut,Wo.prototype.closePopup=ut,Wo.prototype.closeModal=ut,Wo.prototype.closeToast=ut,Wo.prototype.rejectPromise=ht,Wo.prototype.update=oo,Wo.prototype._destroy=so,Object.assign(Wo,Eo),Object.keys(lo).forEach(e=>{Wo[e]=function(...t){if(zo&&zo[e])return zo[e](...t)}}),Wo.DismissReason=Xe,Wo.version=\"11.26.17\";const Ko=Wo;return Ko.default=Ko,Ko}(),void 0!==this&&this.Sweetalert2&&(this.swal=this.sweetAlert=this.Swal=this.SweetAlert=this.Sweetalert2),\"undefined\"!=typeof document&&function(e,t){var o=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(o),o.styleSheet)o.styleSheet.disabled||(o.styleSheet.cssText=t);else try{o.innerHTML=t}catch(e){o.innerText=t}}(document,':root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}')},7736(e){var t;t=function(e){var t=function(e){return new t.lib.init(e)};function o(e,t){return t.offset[e]?isNaN(t.offset[e])?t.offset[e]:t.offset[e]+\"px\":\"0px\"}function n(e,t){return!(!e||\"string\"!=typeof t||!(e.className&&e.className.trim().split(\u002F\\s+\u002Fgi).indexOf(t)>-1))}return t.defaults={oldestFirst:!0,text:\"Toastify is awesome!\",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:\"toastify-top\",positionLeft:!1,position:\"\",backgroundColor:\"\",avatar:\"\",className:\"\",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:\"polite\",style:{background:\"\"}},t.lib=t.prototype={toastify:\"1.12.0\",constructor:t,init:function(e){return e||(e={}),this.options={},this.toastElement=null,this.options.text=e.text||t.defaults.text,this.options.node=e.node||t.defaults.node,this.options.duration=0===e.duration?0:e.duration||t.defaults.duration,this.options.selector=e.selector||t.defaults.selector,this.options.callback=e.callback||t.defaults.callback,this.options.destination=e.destination||t.defaults.destination,this.options.newWindow=e.newWindow||t.defaults.newWindow,this.options.close=e.close||t.defaults.close,this.options.gravity=\"bottom\"===e.gravity?\"toastify-bottom\":t.defaults.gravity,this.options.positionLeft=e.positionLeft||t.defaults.positionLeft,this.options.position=e.position||t.defaults.position,this.options.backgroundColor=e.backgroundColor||t.defaults.backgroundColor,this.options.avatar=e.avatar||t.defaults.avatar,this.options.className=e.className||t.defaults.className,this.options.stopOnFocus=void 0===e.stopOnFocus?t.defaults.stopOnFocus:e.stopOnFocus,this.options.onClick=e.onClick||t.defaults.onClick,this.options.offset=e.offset||t.defaults.offset,this.options.escapeMarkup=void 0!==e.escapeMarkup?e.escapeMarkup:t.defaults.escapeMarkup,this.options.ariaLive=e.ariaLive||t.defaults.ariaLive,this.options.style=e.style||t.defaults.style,e.backgroundColor&&(this.options.style.background=e.backgroundColor),this},buildToast:function(){if(!this.options)throw\"Toastify is not initialized\";var e=document.createElement(\"div\");for(var t in e.className=\"toastify on \"+this.options.className,this.options.position?e.className+=\" toastify-\"+this.options.position:!0===this.options.positionLeft?(e.className+=\" toastify-left\",console.warn(\"Property `positionLeft` will be depreciated in further versions. Please use `position` instead.\")):e.className+=\" toastify-right\",e.className+=\" \"+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: \"backgroundColor\" is being deprecated. Please use the \"style.background\" property.'),this.options.style)e.style[t]=this.options.style[t];if(this.options.ariaLive&&e.setAttribute(\"aria-live\",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)e.appendChild(this.options.node);else if(this.options.escapeMarkup?e.innerText=this.options.text:e.innerHTML=this.options.text,\"\"!==this.options.avatar){var n=document.createElement(\"img\");n.src=this.options.avatar,n.className=\"toastify-avatar\",\"left\"==this.options.position||!0===this.options.positionLeft?e.appendChild(n):e.insertAdjacentElement(\"afterbegin\",n)}if(!0===this.options.close){var s=document.createElement(\"button\");s.type=\"button\",s.setAttribute(\"aria-label\",\"Close\"),s.className=\"toast-close\",s.innerHTML=\"&#10006;\",s.addEventListener(\"click\",function(e){e.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}.bind(this));var i=window.innerWidth>0?window.innerWidth:screen.width;(\"left\"==this.options.position||!0===this.options.positionLeft)&&i>360?e.insertAdjacentElement(\"afterbegin\",s):e.appendChild(s)}if(this.options.stopOnFocus&&this.options.duration>0){var a=this;e.addEventListener(\"mouseover\",function(t){window.clearTimeout(e.timeOutValue)}),e.addEventListener(\"mouseleave\",function(){e.timeOutValue=window.setTimeout(function(){a.removeElement(e)},a.options.duration)})}if(void 0!==this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,\"_blank\"):window.location=this.options.destination}.bind(this)),\"function\"==typeof this.options.onClick&&void 0===this.options.destination&&e.addEventListener(\"click\",function(e){e.stopPropagation(),this.options.onClick()}.bind(this)),\"object\"==typeof this.options.offset){var r=o(\"x\",this.options),l=o(\"y\",this.options),c=\"left\"==this.options.position?r:\"-\"+r,d=\"toastify-top\"==this.options.gravity?l:\"-\"+l;e.style.transform=\"translate(\"+c+\",\"+d+\")\"}return e},showToast:function(){var e;if(this.toastElement=this.buildToast(),!(e=\"string\"==typeof this.options.selector?document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||\"undefined\"!=typeof ShadowRoot&&this.options.selector instanceof ShadowRoot?this.options.selector:document.body))throw\"Root element is not defined\";var o=t.defaults.oldestFirst?e.firstChild:e.lastChild;return e.insertBefore(this.toastElement,o),t.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(e){e.className=e.className.replace(\" on\",\"\"),window.setTimeout(function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),e.parentNode&&e.parentNode.removeChild(e),this.options.callback.call(e),t.reposition()}.bind(this),400)}},t.reposition=function(){for(var e,t={top:15,bottom:15},o={top:15,bottom:15},s={top:15,bottom:15},i=document.getElementsByClassName(\"toastify\"),a=0;a\u003Ci.length;a++){e=!0===n(i[a],\"toastify-top\")?\"toastify-top\":\"toastify-bottom\";var r=i[a].offsetHeight;e=e.substr(9,e.length-1),(window.innerWidth>0?window.innerWidth:screen.width)\u003C=360?(i[a].style[e]=s[e]+\"px\",s[e]+=r+15):!0===n(i[a],\"toastify-left\")?(i[a].style[e]=t[e]+\"px\",t[e]+=r+15):(i[a].style[e]=o[e]+\"px\",o[e]+=r+15)}return this},t.lib.init.prototype=t.lib,t},e.exports?e.exports=t():this.Toastify=t()}},t={};function o(n){var s=t[n];if(void 0!==s)return s.exports;var i=t[n]={id:n,exports:{}};return e[n].call(i.exports,i,i.exports,o),i.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nc=void 0,(()=>{\"use strict\";var e=o(4223),t=o(8465),n=o.n(t),s=o(246),i=o(2603),a=(o(4316),o(345));let r,l,c,d=[];class u{constructor(){this.init()}static selectors={elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elBtnAddItemsSelected:\".lp-btn-add-items-selected\",elBtnCountItemsSelected:\".lp-btn-count-items-selected\",elHeaderCountItemSelected:\".header-count-items-selected\",elSelectItem:\".lp-select-item\",elListItems:\".list-items\",elPopupItemsToSelect:\".lp-popup-items-to-select\",elSearchTitleItem:\".lp-search-title-item\",elBtnBackListItems:\".lp-btn-back-to-select-items\",elListItemsWrap:\".list-items-wrap\",elListItemsSelected:\".list-items-selected\",elItemSelectedClone:\".li-item-selected.clone\",elItemSelected:\".li-item-selected\",LPTarget:\".lp-target\"};init(){this.events()}events=()=>{u._loadedEvents||(u._loadedEvents=!0,e.eventHandlers(\"click\",[{selector:u.selectors.elBtnShowPopupItemsToSelect,callBack:this.showPopupItemsToSelect.name,class:this},{selector:u.selectors.elSelectItem,callBack:this.selectItemsFromList.name,class:this},{selector:u.selectors.elBtnCountItemsSelected,callBack:this.showItemsSelected.name,class:this},{selector:u.selectors.elBtnBackListItems,callBack:this.backToSelectItems.name,class:this},{selector:u.selectors.elItemSelected,callBack:this.removeItemSelected.name,class:this},{selector:\".tabs .tab\",callBack:this.chooseTabItemsType.name,class:this}]),e.eventHandlers(\"keyup\",[{selector:u.selectors.elSearchTitleItem,callBack:this.searchTitleItemToSelect.name,class:this}]))};showPopupItemsToSelect=e=>{const{e:t,target:o=!1,callBack:s}=e;if(!o.closest(`${u.selectors.elBtnShowPopupItemsToSelect}`))return;d=[];const i=o.dataset.template||\"\",a=document.querySelector(i);n().fire({html:a.innerHTML,showConfirmButton:!1,showCloseButton:!0,width:\"60%\",customClass:{popup:\"lp-select-items-popup\",htmlContainer:\"lp-select-items-html-container\",container:\"lp-select-items-container\"},willOpen:()=>{r=n().getPopup();const e=r.querySelector(`${u.selectors.LPTarget}`);if(e){const t=window.lpAJAXG.getDataSetCurrent(e);t.args.paged=1,t.args.item_selecting=d||[],window.lpAJAXG.setDataSetCurrent(e,t),window.lpAJAXG.fetchAJAX(t,{success:t=>{const{data:o}=t;r.querySelector(\".lp-skeleton-animation\").remove(),e.innerHTML=o.content||\"\",this.watchItemsSelectedDataChange()}})}}}).then(e=>{e.isDismissed})};chooseTabItemsType=e=>{const{e:t,target:o,callBack:n}=e,s=o.closest(\".tab\");if(!s)return;t.preventDefault();const a=s.closest(\".tabs\");if(!a)return;const r=a.closest(`${u.selectors.elPopupItemsToSelect}`),l=r.querySelector(`${u.selectors.elSearchTitleItem}`),c=s.dataset.type;a.querySelectorAll(\".tab\").forEach(e=>{e.classList.contains(\"active\")&&e.classList.remove(\"active\")}),s.classList.add(\"active\"),l.value=\"\";const p=r.querySelector(`${u.selectors.LPTarget}`),h=window.lpAJAXG.getDataSetCurrent(p);h.args.item_type=c,h.args.paged=1,h.args.item_selecting=d||[],window.lpAJAXG.setDataSetCurrent(p,h),window.lpAJAXG.showHideLoading(p,1),window.lpAJAXG.fetchAJAX(h,{success:e=>{const{data:t}=e;p.innerHTML=t.content||\"\"},error:e=>{i.W(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(p,0),this.watchItemsSelectedDataChange()}})};selectItemsFromList=e=>{const{e:t,target:o}=e,n=o.closest(`${u.selectors.elSelectItem}`);if(!n)return;const s=n.querySelector('input[type=\"checkbox\"]');if(\"INPUT\"!==o.tagName)return void s.click();if(!n.closest(`${u.selectors.elListItems}`))return;const i={...s.dataset};if(s.checked)d.some(e=>e.id===i.id)||d.push(i);else{const e=d.findIndex(e=>e.id===i.id);-1!==e&&d.splice(e,1)}this.watchItemsSelectedDataChange()};searchTitleItemToSelect=e=>{const{e:t,target:o}=e,n=o.closest(u.selectors.elSearchTitleItem);if(!n)return;const s=r.querySelector(`${u.selectors.LPTarget}`);clearTimeout(l),l=setTimeout(()=>{const e=window.lpAJAXG.getDataSetCurrent(s);e.args.search_title=n.value.trim(),e.args.item_selecting=d,e.args.paged=1,window.lpAJAXG.setDataSetCurrent(s,e),window.lpAJAXG.showHideLoading(s,1),window.lpAJAXG.fetchAJAX(e,{success:e=>{const{data:t}=e;s.innerHTML=t.content||\"\"},error:e=>{i.W(e,\"error\")},completed:()=>{window.lpAJAXG.showHideLoading(s,0)}})},800)};showItemsSelected=t=>{const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnCountItemsSelected}`);if(!s)return;const i=r.querySelector(`${u.selectors.elBtnBackListItems}`),a=r.querySelector(\".tabs\"),l=r.querySelector(`${u.selectors.elListItemsWrap}`),c=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),p=r.querySelector(`${u.selectors.elListItemsSelected}`),h=p.querySelector(`${u.selectors.elItemSelectedClone}`);c.innerHTML=s.innerHTML,e.lpShowHideEl(l,0),e.lpShowHideEl(s,0),e.lpShowHideEl(a,0),e.lpShowHideEl(i,1),e.lpShowHideEl(c,1),e.lpShowHideEl(p,1),p.querySelectorAll(`${u.selectors.elItemSelected}:not(.clone)`).forEach(e=>{e.remove()}),d.forEach(t=>{const o=h.cloneNode(!0);o.classList.remove(\"clone\"),Object.entries(t).forEach(([e,t])=>{o.dataset[e]=t}),o.querySelector(\".title-display\").innerHTML=t.title,e.lpShowHideEl(o,1),h.insertAdjacentElement(\"beforebegin\",o)})};backToSelectItems=t=>{const{e:o,target:n}=t,s=n.closest(`${u.selectors.elBtnBackListItems}`);if(!s)return;const i=r.querySelector(`${u.selectors.elBtnCountItemsSelected}`),a=r.querySelector(\".tabs\"),l=r.querySelector(`${u.selectors.elListItemsWrap}`),c=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),d=r.querySelector(`${u.selectors.elListItemsSelected}`);e.lpShowHideEl(i,1),e.lpShowHideEl(l,1),e.lpShowHideEl(a,1),e.lpShowHideEl(s,0),e.lpShowHideEl(c,0),e.lpShowHideEl(d,0)};removeItemSelected=e=>{const{e:t,target:o}=e,n=o.closest(`${u.selectors.elItemSelected}`);if(!n)return;const s=n.dataset,i=d.findIndex(e=>e.id===s.id);-1!==i&&d.splice(i,1),n.remove(),this.watchItemsSelectedDataChange()};watchItemsSelectedDataChange=()=>{const e=r.querySelector(`${u.selectors.elBtnAddItemsSelected}`),t=r.querySelector(`${u.selectors.elBtnCountItemsSelected}`),o=t.querySelector(\"span\"),n=r.querySelector(`${u.selectors.elHeaderCountItemSelected}`),s=r.querySelector(`${u.selectors.LPTarget}`);0!==d.length?(t.disabled=!1,e.disabled=!1,e.classList.add(\"active\"),o.textContent=`(${d.length})`,n.innerHTML=t.innerHTML):(t.disabled=!0,e.disabled=!0,e.classList.remove(\"active\"),o.textContent=\"\",n.textContent=\"\"),r.querySelector(`${u.selectors.elListItems}`).querySelectorAll('input[type=\"checkbox\"]').forEach(e=>{const t=e.dataset,o=d.some(e=>e.id===t.id);e.checked=o});const i=window.lpAJAXG.getDataSetCurrent(s);i.args.item_selecting=d,window.lpAJAXG.setDataSetCurrent(s,i)};addItemsSelectedToSection=e=>{const{e:t,target:o,callBackHandle:s}=e;r&&(n().close(),\"function\"==typeof s&&(s(d),d=[]))}}const p=new u;p.init();class h{constructor(){this.idUrlHandle=\"edit-quiz-questions\",this.elEditQuizWrap=null,this.elEditListQuestions=null,this.quizID=null}static selectors={elEditQuizWrap:\".lp-edit-quiz-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionItem:\".lp-question-item\",elQuestionToggle:\".lp-question-toggle\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnCancelUpdateQuestionTitle:\".lp-btn-cancel-update-question-title\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\"};init(){e.lpOnElementReady(h.selectors.elEditQuizWrap,e=>{this.elEditQuizWrap=e,this.elEditListQuestions=this.elEditQuizWrap.querySelector(h.selectors.elEditListQuestions);const t=this.elEditQuizWrap.closest(h.selectors.LPTarget),o=window.lpAJAXG.getDataSetCurrent(t);this.quizID=o.args.quiz_id,this.sortAbleQuestion(),c=new a.f,c.init(),e.querySelectorAll(`${h.selectors.elQuestionEditMain}`).forEach(e=>{c.sortAbleQuestionAnswer(e)}),this.events()})}events(){h._loadedEvents||(h._loadedEvents=!0,e.eventHandlers(\"click\",[{selector:h.selectors.elQuestionToggleAll,class:this,callBack:this.toggleQuestionAll.name},{selector:h.selectors.elBtnAddQuestion,class:this,callBack:this.addQuestion.name},{selector:h.selectors.elBtnRemoveQuestion,class:this,callBack:this.removeQuestion.name},{selector:h.selectors.elBtnUpdateQuestionTitle,class:this,callBack:this.updateQuestionTitle.name},{selector:h.selectors.elBtnCancelUpdateQuestionTitle,class:this,callBack:this.cancelChangeTitleQuestion.name},{selector:u.selectors.elBtnAddItemsSelected,class:p,callBack:p.addItemsSelectedToSection.name,callBackHandle:this.addQuestionsSelectedToQuiz.bind(this)}]),e.eventHandlers(\"keydown\",[{selector:h.selectors.elQuestionTitleInput,class:this,callBack:this.updateQuestionTitle.name,checkIsEventEnter:!0},{selector:h.selectors.elQuestionTitleNewInput,class:this,callBack:this.addQuestion.name,checkIsEventEnter:!0}]),e.eventHandlers(\"keyup\",[{selector:h.selectors.elQuestionTitleInput,class:this,callBack:this.changeTitleQuestion.name},{selector:`${h.selectors.elQuestionTitleNewInput}, ${h.selectors.elQuestionTypeNew}`,class:this,callBack:this.checkCanAddQuestion.name}]),e.eventHandlers(\"change\",[{selector:h.selectors.elQuestionTypeNew,class:this,callBack:this.checkCanAddQuestion.name}]),document.addEventListener(\"click\",t=>{const o=t.target;e.toggleCollapse(t,o,h.selectors.elQuestionToggle,[],()=>this.checkAllQuestionsCollapsed())}))}toggleQuestionAll(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elQuestionToggleAll}`);if(!n)return;const s=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`);n.classList.toggle(`${h.selectors.elCollapse}`),s.forEach(e=>{const t=n.classList.contains(`${h.selectors.elCollapse}`);e.classList.toggle(`${h.selectors.elCollapse}`,t)})}checkAllQuestionsCollapsed(){const e=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`),t=this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionToggleAll}`);let o=!0;e.forEach(e=>{if(e.classList.contains(`${h.selectors.elCollapse}`))return o=!1,!1}),o?t.classList.remove(`${h.selectors.elCollapse}`):t.classList.add(`${h.selectors.elCollapse}`)}updateCountItems(){const e=this.elEditQuizWrap.querySelector(\".total-items\"),t=this.elEditQuizWrap.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`).length;e.dataset.count=t,e.querySelector(\".count\").textContent=t}addQuestion(t){const{e:o,target:n,callBackNest:s}=t;o.preventDefault();const a=n.closest(`.${h.selectors.elAddNewQuestion}`);if(!a)return;const r=a.querySelector(`${h.selectors.elQuestionTitleNewInput}`),l=r.value.trim();if(!l)return void i.W(r.dataset.messEmptyTitle,\"error\");const d=a.querySelector(`${h.selectors.elQuestionTypeNew}`),u=d.value;if(!u)return void i.W(d.dataset.messEmptyType,\"error\");const p=this.elEditListQuestions.querySelector(`${h.selectors.elQuestionItem}.clone`),m=p.cloneNode(!0);m.querySelector(`${h.selectors.elQuestionTitleInput}`).value=l,r.value=\"\",m.classList.remove(\"clone\"),e.lpShowHideEl(m,1),p.insertAdjacentElement(\"beforebegin\",m),e.lpSetLoadingEl(m,1);const w={success:e=>{const{message:t,status:o,data:n}=e,{question:a,html_edit_question:r}=n;if(\"error\"===o)throw`Error: ${t}`;if(\"success\"===o){m.dataset.questionId=a.ID,m.dataset.questionType=a.meta_data._lp_type,m.outerHTML=r;const t=this.elEditListQuestions.querySelector(`${h.selectors.elQuestionItem}[data-question-id=\"${a.ID}\"]`);t.classList.remove(h.selectors.elCollapse),this.updateCountItems(),c.initTinyMCE();const o=t.querySelector(`${h.selectors.elQuestionEditMain}`);c.sortAbleQuestionAnswer(o),s&&\"function\"==typeof s.success&&s.success({response:e,elQuestionItemCreated:t})}i.W(t,o)},error:e=>{m.remove(),i.W(e,\"error\"),s&&\"function\"==typeof s.error&&s.error({error:e,newQuestionItem:m})},completed:()=>{e.lpSetLoadingEl(m,0),this.checkCanAddQuestion({e:o,target:r}),s&&\"function\"==typeof s.completed&&s.completed({newQuestionItem:m})}};let f=JSON.parse(r.dataset.send);f={...f,question_title:l,question_type:u},window.lpAJAXG.fetchAJAX(f,w)}addQuestionsSelectedToQuiz(t){const o=[];t.forEach(t=>{const n=this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionItem}.clone`);if(!n)return;o.push(t.id);const s=n.cloneNode(!0),i=s.querySelector(`${h.selectors.elQuestionTitleInput}`);s.classList.remove(\"clone\"),s.dataset.questionId=t.id,i.value=t.titleSelected,e.lpSetLoadingEl(s,1),e.lpShowHideEl(s,1),n.insertAdjacentElement(\"beforebegin\",s),e.lpSetLoadingEl(s,1)});const n={success:e=>{const{message:t,status:o,data:n}=e;if(\"success\"!==o)throw`Error: ${t}`;{i.W(t,o);const{html_edit_question:e}=n;e&&Object.entries(e).forEach(([e,t])=>{this.elEditQuizWrap.querySelector(`${h.selectors.elQuestionItem}[data-question-id=\"${e}\"]`).outerHTML=t}),this.updateCountItems(),c.initTinyMCE()}},error:e=>{i.W(e,\"error\")},completed:()=>{}},s={action:\"add_questions_to_quiz\",quiz_id:this.quizID,question_ids:o,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(s,n)}checkCanAddQuestion(e){const{e:t,target:o}=e,n=o.closest(h.selectors.elQuestionTitleNewInput)||o.closest(h.selectors.elQuestionTypeNew);if(!n)return;const s=n.closest(`.${h.selectors.elAddNewQuestion}`);if(!s)return;const i=s.querySelector(`${h.selectors.elBtnAddQuestion}`);if(!i)return;const a=s.querySelector(`${h.selectors.elQuestionTitleNewInput}`),r=s.querySelector(`${h.selectors.elQuestionTypeNew}`),l=a.value.trim(),c=r.value;l&&c?i.classList.add(\"active\"):i.classList.remove(\"active\")}removeQuestion(t){const{e:o,target:s}=t,a=s.closest(`${h.selectors.elBtnRemoveQuestion}`);if(!a)return;const r=a.closest(`${h.selectors.elQuestionItem}`);if(!r)return;const l=r.dataset.questionId;n().fire({title:a.dataset.title,text:a.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpDataAdmin.i18n.cancel,confirmButtonText:lpDataAdmin.i18n.yes,reverseButtons:!0}).then(t=>{if(t.isConfirmed){e.lpSetLoadingEl(r,1);const t={success:e=>{const{message:t,status:o}=e;i.W(t,o),\"success\"===o&&(r.remove(),this.updateCountItems())},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(r,0)}},o={quiz_id:this.quizID,action:\"remove_question_from_quiz\",question_id:l,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(o,t)}})}updateQuestionTitle(t){const{e:o,target:n}=t;let s=!1;if((n.closest(`${h.selectors.elBtnUpdateQuestionTitle}`)||n.closest(`${h.selectors.elQuestionTitleInput}`)&&\"Enter\"===o.key)&&(s=!0),!s)return;o.preventDefault();const a=n.closest(`${h.selectors.elQuestionItem}`);if(!a)return;const r=a.querySelector(`${h.selectors.elQuestionTitleInput}`);if(!r)return;const l=a.dataset.questionId,c=r.value.trim(),d=r.dataset.old,u=r.dataset.messEmptyTitle;if(0===c.length)return void i.W(u,\"error\");if(c===d)return;r.blur(),e.lpSetLoadingEl(a,1);const p={success:e=>{const{message:t,status:o}=e;\"success\"===o?r.dataset.old=c:r.value=d,i.W(t,o)},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(a,0),a.classList.remove(\"editing\")}},m={quiz_id:this.quizID,action:\"update_question\",question_id:l,question_title:c,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(m,p)}changeTitleQuestion(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elQuestionTitleInput}`);if(!n)return;const s=n.closest(`${h.selectors.elQuestionItem}`);n.value.trim()===(n.dataset.old||\"\")?s.classList.remove(\"editing\"):s.classList.add(\"editing\")}cancelChangeTitleQuestion(e){const{e:t,target:o}=e,n=o.closest(`${h.selectors.elBtnCancelUpdateQuestionTitle}`);if(!n)return;const s=n.closest(`${h.selectors.elQuestionItem}`),i=s.querySelector(`${h.selectors.elQuestionTitleInput}`);i.value=i.dataset.old||\"\",s.classList.remove(\"editing\")}sortAbleQuestion(){let t,o=0;new s.Ay(this.elEditListQuestions,{handle:\".drag\",animation:150,onEnd:n=>{const s=n.item;o&&(clearTimeout(t),t=setTimeout(()=>{e.lpSetLoadingEl(s,1);const t=[];this.elEditListQuestions.querySelectorAll(`${h.selectors.elQuestionItem}:not(.clone)`).forEach(e=>{const o=e.dataset.questionId;o&&t.push(o)});const n={success:e=>{const{message:t,status:o}=e;if(\"success\"!==o)throw`Error: ${t}`;i.W(t,o),c.initTinyMCE()},error:e=>{i.W(e,\"error\")},completed:()=>{e.lpSetLoadingEl(s,0),o=0}},a={quiz_id:this.quizID,action:\"update_questions_position\",question_ids:t,args:{id_url:this.idUrlHandle}};window.lpAJAXG.fetchAJAX(a,n)},1e3))},onMove:()=>{clearTimeout(t)},onUpdate:()=>{o=1}})}}(new h).init()})()})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fdist\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -402,14 +402,14 @@\n \u002F* harmony export *\u002F   ListStudentsEnrolled: () => (\u002F* binding *\u002F ListStudentsEnrolled)\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * List Students Enrolled Script\r\n- *\r\n- * Handles filter and search interactions for the enrolled students table.\r\n- * Pagination is handled by loadAJAX.js clickNumberPage (via .page-numbers class).\r\n- *\r\n- * @since 4.3.3\r\n- * @version 1.0.0\r\n+\u002F**\n+ * List Students Enrolled Script\n+ *\n+ * Handles filter and search interactions for the enrolled students table.\n+ * Pagination is handled by loadAJAX.js clickNumberPage (via .page-numbers class).\n+ *\n+ * @since 4.3.3\n+ * @version 1.0.0\n  *\u002F\n \n class ListStudentsEnrolled {\n@@ -575,9 +575,9 @@\n     return lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(elForm, dataArgs);\n   }\n \n-  \u002F**\r\n-   * Search students: update args.search, re-fetch.\r\n-   * @param args\r\n+  \u002F**\n+   * Search students: update args.search, re-fetch.\n+   * @param args\n    *\u002F\n   searchStudents(args) {\n     const {\n@@ -611,9 +611,9 @@\n     this.reloadContent(elLPTarget, dataSend, btn);\n   }\n \n-  \u002F**\r\n-   * Clear all filters and reload default data.\r\n-   * @param args\r\n+  \u002F**\n+   * Clear all filters and reload default data.\n+   * @param args\n    *\u002F\n   clearFilters(args) {\n     const {\n@@ -649,11 +649,11 @@\n     this.reloadContent(elLPTarget, dataSend, btn);\n   }\n \n-  \u002F**\r\n-   * Shared reload helper: loading indicator + AJAX fetch.\r\n-   * @param elLPTarget\r\n-   * @param dataSend\r\n-   * @param btn\r\n+  \u002F**\n+   * Shared reload helper: loading indicator + AJAX fetch.\n+   * @param elLPTarget\n+   * @param dataSend\n+   * @param btn\n    *\u002F\n   reloadContent(elLPTarget, dataSend, btn = null) {\n     const ajaxHandle = this.getAjaxHandle();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-ai.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-ai.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-ai.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-ai.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003Csvg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\r\n-\u003Cpath d=\"M22.0744 3.49718C21.961 3.02583 21.4897 2.73778 21.0184 2.84252C20.8526 2.88617 20.6693 2.90362 20.4948 2.90362C19.4475 2.90362 18.5311 2.20533 18.2606 1.20153L18.2257 1.07932C18.1035 0.616704 17.6235 0.337385 17.1697 0.442129C16.7071 0.564331 16.4104 1.02695 16.5239 1.4983C16.8031 2.72032 16.07 3.93361 14.8569 4.2653L14.7609 4.29149C14.2984 4.40496 14.0104 4.88504 14.1239 5.34766C14.2199 5.74045 14.5777 6.01977 14.9704 6.01977C15.0402 6.01977 15.1013 6.01104 15.1711 5.99359C15.3457 5.95867 15.5202 5.93249 15.6948 5.93249C16.742 5.93249 17.6671 6.63951 17.9464 7.67823V7.70441L17.9639 7.73933C18.0511 8.14085 18.409 8.42017 18.8191 8.42017C18.8802 8.42017 18.95 8.41144 19.0111 8.40271C19.4824 8.29796 19.7791 7.82661 19.6657 7.32908C19.3951 6.11579 20.1282 4.9025 21.3326 4.57954L21.4286 4.55335C21.8999 4.43988 22.1879 3.9598 22.0744 3.49718ZM18.7493 4.2653C18.5486 4.51844 18.3828 4.78903 18.2431 5.07707C17.9988 4.87631 17.7282 4.71047 17.4402 4.57081C17.641 4.3264 17.8155 4.05581 17.9464 3.76777C18.1995 3.9598 18.4613 4.13437 18.7493 4.2653Z\" fill=\"url(#paint0_linear_5874_11687)\"\u002F>\r\n-\u003Cpath d=\"M21.8845 15.6669C21.771 15.2045 21.2997 14.9165 20.8285 15.0212C20.6539 15.0561 20.4794 15.0823 20.3048 15.0823C19.2576 15.0823 18.3412 14.3755 18.0707 13.3721L18.0357 13.2586C17.9136 12.7962 17.4423 12.5082 16.9797 12.6216C16.5172 12.7351 16.2205 13.2063 16.3339 13.6687C16.6132 14.8991 15.8801 16.1119 14.667 16.4435L14.571 16.4609C14.1085 16.5831 13.8205 17.0543 13.9339 17.5168C14.0474 17.9879 14.5186 18.2759 14.9812 18.1712C15.1557 18.1276 15.3303 18.1101 15.5048 18.1101C16.5521 18.1101 17.4772 18.8082 17.7565 19.8465V19.8814L17.7739 19.9163C17.8612 20.3177 18.219 20.5969 18.6292 20.5969C18.6903 20.5969 18.7514 20.5882 18.8212 20.5707C19.2837 20.466 19.5892 19.9949 19.4757 19.4975C19.2052 18.2846 19.9383 17.0805 21.1427 16.7489H21.1863L21.2387 16.7227C21.7099 16.6093 21.9979 16.1381 21.8845 15.6669ZM18.0532 17.2463C17.8088 17.0543 17.5383 16.8798 17.2503 16.7489C17.451 16.4959 17.6256 16.2254 17.7565 15.9374C18.0096 16.1381 18.2714 16.3039 18.5594 16.4435C18.3587 16.6878 18.1928 16.9583 18.0532 17.2463Z\" fill=\"url(#paint1_linear_5874_11687)\"\u002F>\r\n-\u003Cpath d=\"M9.48455 4.23717C9.37109 3.76582 8.89982 3.47777 8.43727 3.58251C8.26273 3.62616 8.08818 3.64361 7.91363 3.64361C6.86636 3.64361 5.94127 2.94532 5.67072 1.94152L5.64454 1.81932C5.52235 1.35669 5.05108 1.07738 4.57981 1.18212C4.11726 1.29559 3.82926 1.76694 3.93399 2.23829C4.22199 3.46031 3.48889 4.6736 2.26707 5.00529L2.1798 5.03148C1.70852 5.14495 1.42052 5.62503 1.53398 6.08765C1.62998 6.48917 1.99653 6.75103 2.39798 6.75103C2.45907 6.75103 2.52889 6.75103 2.58998 6.73358C2.7558 6.69866 2.93907 6.67248 3.11362 6.67248C4.1609 6.67248 5.07726 7.3795 5.34781 8.3833V8.42694L5.37399 8.47932C5.46999 8.88084 5.81908 9.16016 6.22927 9.16016C6.29908 9.16016 6.36018 9.15143 6.42127 9.1427C6.89254 9.03795 7.18927 8.5666 7.08454 8.06907C6.81399 6.85578 7.54709 5.64249 8.75146 5.31953L8.84746 5.29334C9.31 5.17987 9.598 4.69979 9.48455 4.23717ZM6.16817 5.00529C5.96745 5.25843 5.7929 5.52902 5.66199 5.81706C5.4089 5.6163 5.14708 5.45046 4.85908 5.31953C5.05981 5.06639 5.22563 4.7958 5.36526 4.50776C5.60963 4.70852 5.88017 4.87436 6.16817 5.00529Z\" fill=\"url(#paint2_linear_5874_11687)\"\u002F>\r\n-\u003Cpath d=\"M15.5813 9.72822L14.1708 8.317C13.6321 7.77799 12.682 7.76819 12.1335 8.317L0.418733 20.0478C-0.139578 20.6064 -0.139578 21.5178 0.418733 22.0862L1.8292 23.4877C2.09366 23.7621 2.45608 23.9091 2.83808 23.9091C3.22008 23.9091 3.58249 23.7621 3.85675 23.4877L15.5813 11.7569C16.1396 11.1982 16.1396 10.2868 15.5813 9.72822ZM2.83808 21.7236L2.19161 21.067L10.4585 12.7859L11.1148 13.4327L2.83808 21.7236ZM12.5057 12.0411L11.8592 11.3844L13.1521 10.0908L13.8084 10.7376L12.5057 12.0411Z\" fill=\"url(#paint3_linear_5874_11687)\"\u002F>\r\n-\u003Cdefs>\r\n-\u003ClinearGradient id=\"paint0_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\r\n-\u003Cstop stop-color=\"#E14BFF\"\u002F>\r\n-\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\r\n-\u003C\u002FlinearGradient>\r\n-\u003ClinearGradient id=\"paint1_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\r\n-\u003Cstop stop-color=\"#E14BFF\"\u002F>\r\n-\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\r\n-\u003C\u002FlinearGradient>\r\n-\u003ClinearGradient id=\"paint2_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\r\n-\u003Cstop stop-color=\"#E14BFF\"\u002F>\r\n-\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\r\n-\u003C\u002FlinearGradient>\r\n-\u003ClinearGradient id=\"paint3_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\r\n-\u003Cstop stop-color=\"#E14BFF\"\u002F>\r\n-\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\r\n-\u003C\u002FlinearGradient>\r\n-\u003C\u002Fdefs>\r\n-\u003C\u002Fsvg>\r\n+\u003Csvg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n+\u003Cpath d=\"M22.0744 3.49718C21.961 3.02583 21.4897 2.73778 21.0184 2.84252C20.8526 2.88617 20.6693 2.90362 20.4948 2.90362C19.4475 2.90362 18.5311 2.20533 18.2606 1.20153L18.2257 1.07932C18.1035 0.616704 17.6235 0.337385 17.1697 0.442129C16.7071 0.564331 16.4104 1.02695 16.5239 1.4983C16.8031 2.72032 16.07 3.93361 14.8569 4.2653L14.7609 4.29149C14.2984 4.40496 14.0104 4.88504 14.1239 5.34766C14.2199 5.74045 14.5777 6.01977 14.9704 6.01977C15.0402 6.01977 15.1013 6.01104 15.1711 5.99359C15.3457 5.95867 15.5202 5.93249 15.6948 5.93249C16.742 5.93249 17.6671 6.63951 17.9464 7.67823V7.70441L17.9639 7.73933C18.0511 8.14085 18.409 8.42017 18.8191 8.42017C18.8802 8.42017 18.95 8.41144 19.0111 8.40271C19.4824 8.29796 19.7791 7.82661 19.6657 7.32908C19.3951 6.11579 20.1282 4.9025 21.3326 4.57954L21.4286 4.55335C21.8999 4.43988 22.1879 3.9598 22.0744 3.49718ZM18.7493 4.2653C18.5486 4.51844 18.3828 4.78903 18.2431 5.07707C17.9988 4.87631 17.7282 4.71047 17.4402 4.57081C17.641 4.3264 17.8155 4.05581 17.9464 3.76777C18.1995 3.9598 18.4613 4.13437 18.7493 4.2653Z\" fill=\"url(#paint0_linear_5874_11687)\"\u002F>\n+\u003Cpath d=\"M21.8845 15.6669C21.771 15.2045 21.2997 14.9165 20.8285 15.0212C20.6539 15.0561 20.4794 15.0823 20.3048 15.0823C19.2576 15.0823 18.3412 14.3755 18.0707 13.3721L18.0357 13.2586C17.9136 12.7962 17.4423 12.5082 16.9797 12.6216C16.5172 12.7351 16.2205 13.2063 16.3339 13.6687C16.6132 14.8991 15.8801 16.1119 14.667 16.4435L14.571 16.4609C14.1085 16.5831 13.8205 17.0543 13.9339 17.5168C14.0474 17.9879 14.5186 18.2759 14.9812 18.1712C15.1557 18.1276 15.3303 18.1101 15.5048 18.1101C16.5521 18.1101 17.4772 18.8082 17.7565 19.8465V19.8814L17.7739 19.9163C17.8612 20.3177 18.219 20.5969 18.6292 20.5969C18.6903 20.5969 18.7514 20.5882 18.8212 20.5707C19.2837 20.466 19.5892 19.9949 19.4757 19.4975C19.2052 18.2846 19.9383 17.0805 21.1427 16.7489H21.1863L21.2387 16.7227C21.7099 16.6093 21.9979 16.1381 21.8845 15.6669ZM18.0532 17.2463C17.8088 17.0543 17.5383 16.8798 17.2503 16.7489C17.451 16.4959 17.6256 16.2254 17.7565 15.9374C18.0096 16.1381 18.2714 16.3039 18.5594 16.4435C18.3587 16.6878 18.1928 16.9583 18.0532 17.2463Z\" fill=\"url(#paint1_linear_5874_11687)\"\u002F>\n+\u003Cpath d=\"M9.48455 4.23717C9.37109 3.76582 8.89982 3.47777 8.43727 3.58251C8.26273 3.62616 8.08818 3.64361 7.91363 3.64361C6.86636 3.64361 5.94127 2.94532 5.67072 1.94152L5.64454 1.81932C5.52235 1.35669 5.05108 1.07738 4.57981 1.18212C4.11726 1.29559 3.82926 1.76694 3.93399 2.23829C4.22199 3.46031 3.48889 4.6736 2.26707 5.00529L2.1798 5.03148C1.70852 5.14495 1.42052 5.62503 1.53398 6.08765C1.62998 6.48917 1.99653 6.75103 2.39798 6.75103C2.45907 6.75103 2.52889 6.75103 2.58998 6.73358C2.7558 6.69866 2.93907 6.67248 3.11362 6.67248C4.1609 6.67248 5.07726 7.3795 5.34781 8.3833V8.42694L5.37399 8.47932C5.46999 8.88084 5.81908 9.16016 6.22927 9.16016C6.29908 9.16016 6.36018 9.15143 6.42127 9.1427C6.89254 9.03795 7.18927 8.5666 7.08454 8.06907C6.81399 6.85578 7.54709 5.64249 8.75146 5.31953L8.84746 5.29334C9.31 5.17987 9.598 4.69979 9.48455 4.23717ZM6.16817 5.00529C5.96745 5.25843 5.7929 5.52902 5.66199 5.81706C5.4089 5.6163 5.14708 5.45046 4.85908 5.31953C5.05981 5.06639 5.22563 4.7958 5.36526 4.50776C5.60963 4.70852 5.88017 4.87436 6.16817 5.00529Z\" fill=\"url(#paint2_linear_5874_11687)\"\u002F>\n+\u003Cpath d=\"M15.5813 9.72822L14.1708 8.317C13.6321 7.77799 12.682 7.76819 12.1335 8.317L0.418733 20.0478C-0.139578 20.6064 -0.139578 21.5178 0.418733 22.0862L1.8292 23.4877C2.09366 23.7621 2.45608 23.9091 2.83808 23.9091C3.22008 23.9091 3.58249 23.7621 3.85675 23.4877L15.5813 11.7569C16.1396 11.1982 16.1396 10.2868 15.5813 9.72822ZM2.83808 21.7236L2.19161 21.067L10.4585 12.7859L11.1148 13.4327L2.83808 21.7236ZM12.5057 12.0411L11.8592 11.3844L13.1521 10.0908L13.8084 10.7376L12.5057 12.0411Z\" fill=\"url(#paint3_linear_5874_11687)\"\u002F>\n+\u003Cdefs>\n+\u003ClinearGradient id=\"paint0_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\n+\u003Cstop stop-color=\"#E14BFF\"\u002F>\n+\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\n+\u003C\u002FlinearGradient>\n+\u003ClinearGradient id=\"paint1_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\n+\u003Cstop stop-color=\"#E14BFF\"\u002F>\n+\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\n+\u003C\u002FlinearGradient>\n+\u003ClinearGradient id=\"paint2_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\n+\u003Cstop stop-color=\"#E14BFF\"\u002F>\n+\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\n+\u003C\u002FlinearGradient>\n+\u003ClinearGradient id=\"paint3_linear_5874_11687\" x1=\"22\" y1=\"1.4695e-07\" x2=\"7.77976e-07\" y2=\"24\" gradientUnits=\"userSpaceOnUse\">\n+\u003Cstop stop-color=\"#E14BFF\"\u002F>\n+\u003Cstop offset=\"1\" stop-color=\"#00DDFF\"\u002F>\n+\u003C\u002FlinearGradient>\n+\u003C\u002Fdefs>\n+\u003C\u002Fsvg>\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-admin-bar.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-chevron-down.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-dashboard-course-placeholder.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-edit.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-featured-image.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-more.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-pending-courses.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-published-courses.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-sidebar-toggle.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-students-progress.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-swal-delete.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-swal-duplicate.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-swal-trash-draft.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-total-courses.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-total-instructors.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-total-students.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-cb-trash.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-courses-2.svg\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-courses.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-courses.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-courses.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-courses.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath fill=\"none\" d=\"M0 0h24v24H0V0z\">\u003C\u002Fpath>\u003Cpath d=\"M5 20V4h2v7l2.5-1.5L12 11V4h5v7.08c.33-.05.66-.08 1-.08s.67.03 1 .08V4c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h7.26c-.42-.6-.75-1.28-.97-2H5zm13-7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm-1.25 7.5v-5l4 2.5-4 2.5z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath fill=\"none\" d=\"M0 0h24v24H0V0z\">\u003C\u002Fpath>\u003Cpath d=\"M5 20V4h2v7l2.5-1.5L12 11V4h5v7.08c.33-.05.66-.08 1-.08s.67.03 1 .08V4c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h7.26c-.42-.6-.75-1.28-.97-2H5zm13-7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm-1.25 7.5v-5l4 2.5-4 2.5z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-drag.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-drag.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-drag.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-drag.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-grip-vertical-icon lucide-grip-vertical\">\u003Ccircle cx=\"9\" cy=\"12\" r=\"1\"\u002F>\u003Ccircle cx=\"9\" cy=\"5\" r=\"1\"\u002F>\u003Ccircle cx=\"9\" cy=\"19\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"12\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"5\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"19\" r=\"1\"\u002F>\u003C\u002Fsvg>\r\n+\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-grip-vertical-icon lucide-grip-vertical\">\u003Ccircle cx=\"9\" cy=\"12\" r=\"1\"\u002F>\u003Ccircle cx=\"9\" cy=\"5\" r=\"1\"\u002F>\u003Ccircle cx=\"9\" cy=\"19\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"12\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"5\" r=\"1\"\u002F>\u003Ccircle cx=\"15\" cy=\"19\" r=\"1\"\u002F>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-facebook.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-facebook.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-facebook.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-facebook.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-file.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-file.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-file.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-file.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"none\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"none\" stroke-width=\"1.5\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-grid.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-grid.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-grid.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-grid.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M0 1.5A1.5 1.5 0 0 1 1.5 0h13A1.5 1.5 0 0 1 16 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 14.5v-13zM1.5 1a.5.5 0 0 0-.5.5V5h4V1H1.5zM5 6H1v4h4V6zm1 4h4V6H6v4zm-1 1H1v3.5a.5.5 0 0 0 .5.5H5v-4zm1 0v4h4v-4H6zm5 0v4h3.5a.5.5 0 0 0 .5-.5V11h-4zm0-1h4V6h-4v4zm0-5h4V1.5a.5.5 0 0 0-.5-.5H11v4zm-1 0V1H6v4h4z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M0 1.5A1.5 1.5 0 0 1 1.5 0h13A1.5 1.5 0 0 1 16 1.5v13a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 14.5v-13zM1.5 1a.5.5 0 0 0-.5.5V5h4V1H1.5zM5 6H1v4h4V6zm1 4h4V6H6v4zm-1 1H1v3.5a.5.5 0 0 0 .5.5H5v-4zm1 0v4h4v-4H6zm5 0v4h3.5a.5.5 0 0 0 .5-.5V11h-4zm0-1h4V6h-4v4zm0-5h4V1.5a.5.5 0 0 0-.5-.5H11v4zm-1 0V1H6v4h4z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-linkedin.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-linkedin.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-linkedin.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-linkedin.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M20 3H4a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zM8.339 18.337H5.667v-8.59h2.672v8.59zM7.003 8.574a1.548 1.548 0 1 1 0-3.096 1.548 1.548 0 0 1 0 3.096zm11.335 9.763h-2.669V14.16c0-.996-.018-2.277-1.388-2.277-1.39 0-1.601 1.086-1.601 2.207v4.248h-2.667v-8.59h2.56v1.174h.037c.355-.675 1.227-1.387 2.524-1.387 2.704 0 3.203 1.778 3.203 4.092v4.71z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M20 3H4a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zM8.339 18.337H5.667v-8.59h2.672v8.59zM7.003 8.574a1.548 1.548 0 1 1 0-3.096 1.548 1.548 0 0 1 0 3.096zm11.335 9.763h-2.669V14.16c0-.996-.018-2.277-1.388-2.277-1.39 0-1.601 1.086-1.601 2.207v4.248h-2.667v-8.59h2.56v1.174h.037c.355-.675 1.227-1.387 2.524-1.387 2.704 0 3.203 1.778 3.203 4.092v4.71z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-list.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-list.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-list.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-list.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath fill-rule=\"evenodd\" d=\"M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath fill-rule=\"evenodd\" d=\"M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\">\u003C\u002Fpath>\u003C\u002Fsvg>\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-logo-course-builder.svg\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons: ico-logout.svg\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-students.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-students.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-students.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-students.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\">\u003C\u002Fpath>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\">\u003C\u002Fcircle>\u003Cpath d=\"M23 21v-2a4 4 0 0 0-3-3.87\">\u003C\u002Fpath>\u003Cpath d=\"M16 3.13a4 4 0 0 1 0 7.75\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" viewBox=\"0 0 24 24\" stroke-linecap=\"round\" stroke-linejoin=\"round\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\">\u003C\u002Fpath>\u003Ccircle cx=\"9\" cy=\"7\" r=\"4\">\u003C\u002Fcircle>\u003Cpath d=\"M23 21v-2a4 4 0 0 0-3-3.87\">\u003C\u002Fpath>\u003Cpath d=\"M16 3.13a4 4 0 0 1 0 7.75\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-twitter.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-twitter.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-twitter.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-twitter.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 512 512\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-youtube.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-youtube.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fimages\u002Ficons\u002Fico-youtube.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fimages\u002Ficons\u002Fico-youtube.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z\">\u003C\u002Fpath>\u003C\u002Fsvg>\r\n+\u003Csvg stroke=\"currentColor\" fill=\"\" stroke-width=\"0\" viewBox=\"0 0 16 16\" height=\"1em\" width=\"1em\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath d=\"M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z\">\u003C\u002Fpath>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import SweetAlert from\"sweetalert2\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";let lp_structure_course,lp_is_generating_course_data=!1;const lp_course_ai_setting=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};export class CreateCourseViaAI{constructor(){this.init()}static selectors={elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai?lpUtils.lpOnElementReady(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}):lpUtils.lpOnElementReady(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),this.events()}events(){CreateCourseViaAI._loadedEvents||(CreateCourseViaAI._loadedEvents=!0,lpUtils.eventHandlers(\"click\",[{selector:\".lp-btn-warning-enable-ai\",class:this,callBack:this.showPopupEnableAI.name},{selector:\".lp-btn-generate-course-with-ai\",class:this,callBack:this.showPopupCreateFullCourse.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateDataCourse.name},{selector:\".lp-btn-create-course\",class:this,callBack:this.createCourse.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:t,target:s}=e,a=lpData.i18n.confirm_close_ai;lp_is_generating_course_data?confirm(a)&&SweetAlert.close():SweetAlert.close()}}]))}showPopupEnableAI(){const e=document.querySelector(\"#lp-tmpl-must-enable-ai\");e?SweetAlert.fire({html:e.innerHTML,width:\"420px\",showCloseButton:!1,showConfirmButton:!1}):console.error(\"Enable OpenAI Modal Template not found!\")}showPopupCreateFullCourse(){const e=document.querySelector(\"#lp-tmpl-create-course-ai\");e?SweetAlert.fire({html:e.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{const e=SweetAlert.getPopup();e.click();const t=e.querySelector('select[name=\"target_audience\"]');t&&lp_course_ai_setting?.target_audience&&t.tomselect.setValue(lp_course_ai_setting.target_audience);const s=e.querySelector('select[name=\"tone\"]');s&&lp_course_ai_setting?.tone&&s.tomselect.setValue(lp_course_ai_setting.tone);const a=e.querySelector('select[name=\"language\"]');a&&lp_course_ai_setting?.language&&a.tomselect.setValue(lp_course_ai_setting.language),t.addEventListener(\"change\",e=>{lp_course_ai_setting.target_audience=t.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}),s.addEventListener(\"change\",e=>{lp_course_ai_setting.tone=s.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}),a.addEventListener(\"change\",e=>{const t=a.tomselect.getValue();lp_course_ai_setting.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))})}}).then(e=>{e.isDismissed&&lp_is_generating_course_data&&(lp_is_generating_course_data=!1)}):console.error(\"AI Create Full Course Modal Template not found!\")}showStep(e){const{e:t,target:s}=e;t.preventDefault();const a=s.closest(\".button-actions\"),l=a.closest(CreateCourseViaAI.selectors.elGenerateDataAiWrap);let o=parseInt(a.dataset.step);const r=s.dataset.action;\"next\"===r?o++:\"prev\"===r&&o--,a.dataset.step=o;const n=s.closest(\"form\"),i=n.querySelector(`.step-content[data-step=\"${o}\"]`),c=l.querySelector(`.step-item[data-step=\"${o}\"]`);n.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),i.classList.add(\"active\"),l.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\");s.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(o)?lpUtils.lpShowHideEl(e,1):lpUtils.lpShowHideEl(e,0)})}generatePrompt(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=s.closest(\"form\");let l=JSON.parse(s.dataset.send);l=lpUtils.mergeDataWithDatForm(a,l);const o={success:e=>{const{message:t,status:s,data:l}=e;if(lpToastify.show(t,s),\"success\"===s){a.querySelector(\".lp-btn-step[data-action=next]\").click();a.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=l}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(s,!1)}};window.lpAJAXG.fetchAJAX(l,o)}generateDataCourse(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=s.closest(\"form\");let l=JSON.parse(s.dataset.send);l=lpUtils.mergeDataWithDatForm(a,l);const o=a.querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(o,0);const r={success:e=>{const{message:t,status:s,data:l}=e;if(lp_is_generating_course_data&&lpToastify.show(t,s),\"success\"===s){lp_structure_course=l.lp_structure_course;a.querySelector(\".lp-ai-generated-results\").innerHTML=l.lp_html_preview;a.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(s,!1),lpUtils.lpShowHideEl(o,1),lp_is_generating_course_data=!1}};lp_is_generating_course_data=!0,window.lpAJAXG.fetchAJAX(l,r)}createCourse(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=JSON.parse(s.dataset.send);a.lp_structure_course=lp_structure_course;const l=s.closest(\"form\").querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(l,0);let o;o=window.outerWidth\u003C768?\"90%\":\"30%\";const r=document.querySelector(\"#lp-tmpl-creating-course-ai\");SweetAlert.fire({html:r.innerHTML,showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,width:o});const n={success:e=>{const{message:t,status:s,data:a}=e;SweetAlert.close(),lpToastify.show(t,s),\"success\"===s?setTimeout(()=>{window.location.href=a.edit_course_url},2e3):lpUtils.lpShowHideEl(l,1)},error:e=>{lpToastify.show(e,\"error\"),lpUtils.lpShowHideEl(l,1)},completed:()=>{lpUtils.lpSetLoadingEl(s,!1)}};window.lpAJAXG.fetchAJAX(a,n)}}\n\\ No newline at end of file\n+import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import SweetAlert from\"sweetalert2\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";let lp_structure_course,lp_is_generating_course_data=!1;const lp_course_ai_setting=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};export class CreateCourseViaAI{constructor(e={}){this.options={autoInsertButton:!0,isCourseBuilder:!1,redirectDelayMs:2e3,...e},this.init()}static selectors={elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){this.options.autoInsertButton&&(lpData?.enable_open_ai?lpUtils.lpOnElementReady(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}):lpUtils.lpOnElementReady(\".page-title-action\",e=>{e.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)})),this.events()}events(){CreateCourseViaAI._loadedEvents||(CreateCourseViaAI._loadedEvents=!0,lpUtils.eventHandlers(\"click\",[{selector:\".lp-btn-warning-enable-ai\",class:this,callBack:this.showPopupEnableAI.name},{selector:\".lp-btn-generate-course-with-ai\",class:this,callBack:this.showPopupCreateFullCourse.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateDataCourse.name},{selector:\".lp-btn-create-course\",class:this,callBack:this.createCourse.name},{selector:\".lp-btn-close-ai-popup\",callBack:e=>{const{e:t,target:s}=e,a=lpData?.i18n?.confirm_close_ai||\"Are you sure you want to close? Generate data will stop.\";lp_is_generating_course_data?confirm(a)&&SweetAlert.close():SweetAlert.close()}}]))}showPopupEnableAI(){const e=document.querySelector(\"#lp-tmpl-must-enable-ai\");e?SweetAlert.fire({html:e.innerHTML,width:\"420px\",showCloseButton:!1,showConfirmButton:!1}):console.error(\"Enable OpenAI Modal Template not found!\")}showPopupCreateFullCourse(){const e=document.querySelector(\"#lp-tmpl-create-course-ai\");e?SweetAlert.fire({html:e.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{const e=SweetAlert.getPopup();e.click();const t=e.querySelector('select[name=\"target_audience\"]');t&&lp_course_ai_setting?.target_audience&&t.tomselect.setValue(lp_course_ai_setting.target_audience);const s=e.querySelector('select[name=\"tone\"]');s&&lp_course_ai_setting?.tone&&s.tomselect.setValue(lp_course_ai_setting.tone);const a=e.querySelector('select[name=\"language\"]');a&&lp_course_ai_setting?.language&&a.tomselect.setValue(lp_course_ai_setting.language),t.addEventListener(\"change\",e=>{lp_course_ai_setting.target_audience=t.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}),s.addEventListener(\"change\",e=>{lp_course_ai_setting.tone=s.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}),a.addEventListener(\"change\",e=>{const t=a.tomselect.getValue();lp_course_ai_setting.language=t?[t]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))})}}).then(e=>{e.isDismissed&&lp_is_generating_course_data&&(lp_is_generating_course_data=!1)}):console.error(\"AI Create Full Course Modal Template not found!\")}showStep(e){const{e:t,target:s}=e;t.preventDefault();const a=s.closest(\".button-actions\"),l=a.closest(CreateCourseViaAI.selectors.elGenerateDataAiWrap);let o=parseInt(a.dataset.step);const r=s.dataset.action;\"next\"===r?o++:\"prev\"===r&&o--,a.dataset.step=o;const n=s.closest(\"form\"),i=n.querySelector(`.step-content[data-step=\"${o}\"]`),c=l.querySelector(`.step-item[data-step=\"${o}\"]`);n.querySelectorAll(\".step-content\").forEach(e=>e.classList.remove(\"active\")),i.classList.add(\"active\"),l.querySelectorAll(\".step-item\").forEach(e=>e.classList.remove(\"active\")),c.classList.add(\"active\");s.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(e=>{e.dataset.stepShow.split(\",\").map(e=>parseInt(e.trim())).includes(o)?lpUtils.lpShowHideEl(e,1):lpUtils.lpShowHideEl(e,0)})}generatePrompt(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=s.closest(\"form\");let l=JSON.parse(s.dataset.send);l=lpUtils.mergeDataWithDatForm(a,l);const o={success:e=>{const{message:t,status:s,data:l}=e;if(lpToastify.show(t,s),\"success\"===s){a.querySelector(\".lp-btn-step[data-action=next]\").click();a.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=l}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(s,!1)}};window.lpAJAXG.fetchAJAX(l,o)}generateDataCourse(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=s.closest(\"form\");let l=JSON.parse(s.dataset.send);l=lpUtils.mergeDataWithDatForm(a,l);const o=a.querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(o,0);const r={success:e=>{const{message:t,status:s,data:l}=e;if(lp_is_generating_course_data&&lpToastify.show(t,s),\"success\"===s){lp_structure_course=l.lp_structure_course;a.querySelector(\".lp-ai-generated-results\").innerHTML=l.lp_html_preview;a.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(s,!1),lpUtils.lpShowHideEl(o,1),lp_is_generating_course_data=!1}};lp_is_generating_course_data=!0,window.lpAJAXG.fetchAJAX(l,r)}createCourse(e){const{e:t,target:s}=e;t.preventDefault(),lpUtils.lpSetLoadingEl(s,!0);const a=JSON.parse(s.dataset.send);a.lp_structure_course=lp_structure_course,this.options.isCourseBuilder&&(a.is_course_builder=1);const l=s.closest(\"form\").querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(l,0);let o;o=window.outerWidth\u003C768?\"90%\":\"30%\";const r=document.querySelector(\"#lp-tmpl-creating-course-ai\");SweetAlert.fire({html:r.innerHTML,showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,width:o});const n={success:e=>{const{message:t,status:s,data:a}=e;SweetAlert.close(),lpToastify.show(t,s),\"success\"===s?setTimeout(()=>{window.location.href=a.edit_course_url},this.options.redirectDelayMs):lpUtils.lpShowHideEl(l,1)},error:e=>{lpToastify.show(e,\"error\"),lpUtils.lpShowHideEl(l,1)},completed:()=>{lpUtils.lpSetLoadingEl(s,!1)}};window.lpAJAXG.fetchAJAX(a,n)}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";import SweetAlert from\"sweetalert2\";import{EditSection}from\".\u002Fedit-section.js\";import{EditSectionItem}from\".\u002Fedit-section-item.js\";import{EditCourseCurriculum}from\"lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\";let editSection=null,editSectionItem=null;export class EditCurriculumAi{constructor(){this.init()}static selectors={elBtnApplyCurriculum:\".lp-btn-apply-curriculum\"};init(){lpData?.enable_open_ai&&(lpUtils.lpOnElementReady(EditCourseCurriculum.selectors.idElEditCurriculum,e=>{e.querySelector(EditSection.selectors.elCountSections).insertAdjacentHTML(\"afterend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),this.events())}events(){EditCurriculumAi._loadedEvents||(EditCurriculumAi._loadedEvents=!0,lpUtils.eventHandlers(\"click\",[{selector:EditCurriculumAi.selectors.elBtnApplyCurriculum,class:this,callBack:this.applyData.name}]))}async applyData(e){const{e:t,target:i}=e;let o=JSON.parse(i.dataset.send);if(o=lpUtils.mergeDataWithDatForm(i.closest(\"form\"),o),!o[\"lp-openai-generated-data\"])return;const s=JSON.parse(o[\"lp-openai-generated-data\"])[0].sections;s&&0!==s.length||lpToastify.show(\"No sections found in the generated data.\",\"error\"),console.log(\"Generated Sections:\",s),SweetAlert.close(),await new Promise(e=>setTimeout(e,500)),editSection=new EditSection,editSection.init(),editSectionItem=new EditSectionItem,editSectionItem.init();const c=document.querySelector(EditCourseCurriculum.selectors.idElEditCurriculum);c.querySelector(EditSection.selectors.elDivAddNewSection).scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>setTimeout(e,800));for(const e of s){const t=c.querySelector(EditSection.selectors.elSectionTitleNewInput),i=c.querySelector(EditSection.selectors.elBtnAddSection);t.value=e.section_title||\"\",await new Promise(t=>{editSection.addSection({e:new PointerEvent(\"click\"),target:i,callBackNest:this.updateSectionDescription({sectionData:e,elEditCurriculum:c}),resolve:t})})}}updateSectionDescription(e){const{sectionData:t,elEditCurriculum:i}=e;return{success:async e=>{const{elSection:o}=e;await new Promise(e=>setTimeout(e,1e3));const s=o.querySelector(EditSection.selectors.elSectionDesInput);s.value=t.section_description||\"\",await new Promise(e=>{editSection.updateSectionDescription({e:new PointerEvent(\"click\"),target:s,callBackNest:this.addSectionItems({sectionData:t,elEditCurriculum:i}),resolve:e})}),setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}addSectionItems(e){const{sectionData:t,elEditCurriculum:i}=e,o=t.lessons||[],s=t.quizzes||[];return{success:async e=>{const{elSection:t}=e,c=t.querySelector(`${EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_lesson]`),l=t.querySelector(`${EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_quiz]`);for(const e of o)c.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:i});for(const e of s)l.click(),await this.addItemToSection({itemData:e,elSection:t,elEditCurriculum:i});setTimeout(e.resolve,1)},error:e=>{},completed:()=>{}}}async addItemToSection(e){const{itemData:t,elSection:i,elEditCurriculum:o}=e,s=i.querySelector(EditSectionItem.selectors.elBtnAddItem);i.querySelector(EditSectionItem.selectors.elAddItemTypeTitleInput).value=t.lesson_title||t.quiz_title||\"\",s.scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(e=>{editSectionItem.addItemToSection({e:new PointerEvent(\"click\"),target:s,resolve:e,callBackNest:{completed:async t=>{setTimeout(e,1e3)}}})}),setTimeout(e.resolve,1)}}\n\\ No newline at end of file\n+import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";import SweetAlert from\"sweetalert2\";import{EditSection}from\".\u002Fedit-section.js\";import{EditSectionItem}from\".\u002Fedit-section-item.js\";import{EditCourseCurriculum}from\"lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\";let editSection=null,editSectionItem=null;export class EditCurriculumAi{constructor(t={}){this.options={isCourseBuilder:!1,...t},this.init()}static selectors={elBtnApplyCurriculum:\".lp-btn-apply-curriculum\"};init(){lpData?.enable_open_ai&&(this.options.isCourseBuilder?lpUtils.lpOnElementReady(EditCourseCurriculum.selectors.idElEditCurriculum,t=>{t.querySelector(EditSection.selectors.elCountSections).insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tclass=\"cb-course-edit-ai-btn lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>')}):lpUtils.lpOnElementReady(EditCourseCurriculum.selectors.idElEditCurriculum,t=>{t.querySelector(EditSection.selectors.elCountSections).insertAdjacentHTML(\"afterend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),this.events())}events(){EditCurriculumAi._loadedEvents||(EditCurriculumAi._loadedEvents=!0,lpUtils.eventHandlers(\"click\",[{selector:EditCurriculumAi.selectors.elBtnApplyCurriculum,class:this,callBack:this.applyData.name}]))}async applyData(t){const{e:e,target:i}=t;let o=JSON.parse(i.dataset.send);if(o=lpUtils.mergeDataWithDatForm(i.closest(\"form\"),o),!o[\"lp-openai-generated-data\"])return;const s=JSON.parse(o[\"lp-openai-generated-data\"])[0].sections;s&&0!==s.length||lpToastify.show(\"No sections found in the generated data.\",\"error\"),SweetAlert.close(),await new Promise(t=>setTimeout(t,500)),editSection=new EditSection,editSection.init(),editSectionItem=new EditSectionItem,editSectionItem.init();const l=document.querySelector(EditCourseCurriculum.selectors.idElEditCurriculum);l.querySelector(EditSection.selectors.elDivAddNewSection).scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(t=>setTimeout(t,800));for(const t of s){const e=l.querySelector(EditSection.selectors.elSectionTitleNewInput),i=l.querySelector(EditSection.selectors.elBtnAddSection);e.value=t.section_title||\"\",await new Promise(e=>{editSection.addSection({e:new PointerEvent(\"click\"),target:i,callBackNest:this.updateSectionDescription({sectionData:t,elEditCurriculum:l}),resolve:e})})}}updateSectionDescription(t){const{sectionData:e,elEditCurriculum:i}=t;return{success:async t=>{const{elSection:o}=t;await new Promise(t=>setTimeout(t,1e3));const s=o.querySelector(EditSection.selectors.elSectionDesInput);s.value=e.section_description||\"\",await new Promise(t=>{editSection.updateSectionDescription({e:new PointerEvent(\"click\"),target:s,callBackNest:this.addSectionItems({sectionData:e,elEditCurriculum:i}),resolve:t})}),setTimeout(t.resolve,1)},error:t=>{},completed:()=>{}}}addSectionItems(t){const{sectionData:e,elEditCurriculum:i}=t,o=e.lessons||[],s=e.quizzes||[];return{success:async t=>{const{elSection:e}=t,l=e.querySelector(`${EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_lesson]`),c=e.querySelector(`${EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_quiz]`);for(const t of o)l.click(),await this.addItemToSection({itemData:t,elSection:e,elEditCurriculum:i});for(const t of s)c.click(),await this.addItemToSection({itemData:t,elSection:e,elEditCurriculum:i});setTimeout(t.resolve,1)},error:t=>{},completed:()=>{}}}async addItemToSection(t){const{itemData:e,elSection:i,elEditCurriculum:o}=t,s=i.querySelector(EditSectionItem.selectors.elBtnAddItem);i.querySelector(EditSectionItem.selectors.elAddItemTypeTitleInput).value=e.lesson_title||e.quiz_title||\"\",s.scrollIntoView({behavior:\"smooth\",block:\"center\"}),await new Promise(t=>{editSectionItem.addItemToSection({e:new PointerEvent(\"click\"),target:s,resolve:t,callBackNest:{completed:async e=>{setTimeout(t,1e3)}}})}),setTimeout(t.resolve,1)}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import SweetAlert from\"sweetalert2\";import Sortable from\"sortablejs\";import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";import{EditCourseCurriculum}from\"..\u002Fedit-curriculum.js\";import{EditSection}from\".\u002Fedit-section.js\";import{LpPopupSelectItemToAdd}from\"lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js\";const idUrlHandle=\"edit-course-curriculum\",lpPopupSelectItemToAdd=new LpPopupSelectItemToAdd;export class EditSectionItem{constructor(){this.courseId=null,this.elCurriculumSections=null,this.sectionIdSelected=null}static selectors={elSectionListItems:\".section-list-items\",elItemClone:\".section-item.clone\",elSectionItem:\".section-item\",elBtnSelectItemType:\".lp-btn-select-item-type\",elAddItemTypeClone:\".lp-add-item-type.clone\",elSectionActions:\".section-actions\",elAddItemType:\".lp-add-item-type\",elAddItemTypeTitleInput:\".lp-add-item-type-title-input\",elBtnAddItemCancel:\".lp-btn-add-item-cancel\",elBtnAddItem:\".lp-btn-add-item\",elItemTitleInput:\".lp-item-title-input\",elBtnUpdateItemTitle:\".lp-btn-update-item-title\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-item-title\",elBtnDeleteItem:\".lp-btn-delete-item\",elBtnSetPreviewItem:\".lp-btn-set-preview-item\"};init(){this.elEditCurriculum=document.querySelector(`${EditCourseCurriculum.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${EditCourseCurriculum.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${EditCourseCurriculum.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.events(),this.sortAbleItem(),lpPopupSelectItemToAdd.init()}events(){EditSectionItem._loadedEvents||(EditSectionItem._loadedEvents=this,lpUtils.eventHandlers(\"click\",[{selector:EditSectionItem.selectors.elBtnSelectItemType,class:this,callBack:this.addItemType.name},{selector:EditSectionItem.selectors.elBtnAddItem,class:this,callBack:this.addItemToSection.name},{selector:EditSectionItem.selectors.elBtnAddItemCancel,class:this,callBack:this.cancelAddItemType.name},{selector:EditSectionItem.selectors.elBtnUpdateItemTitle,class:this,callBack:this.updateTitle.name},{selector:EditSectionItem.selectors.elBtnCancelUpdateTitle,class:this,callBack:this.cancelUpdateTitle.name},{selector:EditSectionItem.selectors.elBtnDeleteItem,class:this,callBack:this.deleteItem.name},{selector:LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect,callBack:e=>{const{e:t,target:s}=e,l=s.closest(EditSection.selectors.elSection);this.sectionIdSelected=l.dataset.sectionId}},{selector:LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,class:lpPopupSelectItemToAdd,callBack:lpPopupSelectItemToAdd.addItemsSelectedToSection.name,callBackHandle:this.addItemsSelectedToSection.bind(this)},{selector:EditSectionItem.selectors.elBtnSetPreviewItem,class:this,callBack:this.updatePreviewItem.name}]),lpUtils.eventHandlers(\"keyup\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.changeTitle.name},{selector:EditSectionItem.selectors.elAddItemTypeTitleInput,class:this,callBack:this.changeTitleAddNew.name}]),lpUtils.eventHandlers(\"keydown\",[{selector:EditSectionItem.selectors.elAddItemTypeTitleInput,class:this,callBack:this.addItemToSection.name,checkIsEventEnter:!0},{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.updateTitle.name,checkIsEventEnter:!0}]),lpUtils.eventHandlers(\"focusin\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name}]),lpUtils.eventHandlers(\"focusout\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}addItemType(e){const{e:t,target:s}=e,l=s,i=l.dataset.itemType,o=l.dataset.placeholder,c=l.dataset.buttonAddText,n=l.closest(`${EditSection.selectors.elSection}`).querySelector(`${EditSectionItem.selectors.elSectionActions}`),d=n.querySelector(`${EditSectionItem.selectors.elAddItemTypeClone}`).cloneNode(!0),r=d.querySelector(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`),a=d.querySelector(`${EditSectionItem.selectors.elBtnAddItem}`);d.classList.remove(\"clone\"),d.classList.add(i),lpUtils.lpShowHideEl(d,1),r.setAttribute(\"placeholder\",o),r.dataset.itemType=i,a.textContent=c,n.insertAdjacentElement(\"beforebegin\",d),r.focus()}cancelAddItemType(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elAddItemType}`);l&&l.remove()}addItemToSection(e){const{e:t,target:s,callBackNest:l}=e;t.preventDefault();const i=s.closest(`${EditSectionItem.selectors.elAddItemType}`),o=i.closest(`${EditSection.selectors.elSection}`),c=o.dataset.sectionId,n=i.querySelector(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`),d=n.value.trim(),r=n.dataset.itemType,a=n.dataset.messEmptyTitle;if(0===d.length)return void lpToastify.show(a,\"error\");const m=o.querySelector(`${EditSectionItem.selectors.elItemClone}`),u=m.cloneNode(!0),p=u.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);u.classList.remove(\"clone\"),u.classList.add(r),u.dataset.itemType=r,lpUtils.lpShowHideEl(u,1),lpUtils.lpSetLoadingEl(u,1),p.value=d,p.dataset.old=d,m.insertAdjacentElement(\"beforebegin\",u),i.remove();const I={success:t=>{const{message:s,status:i,data:o}=t;if(lpToastify.show(s,i),\"error\"===i)u.remove();else if(\"success\"===i){const{section_item:t,item_link:s}=o||{};u.dataset.itemId=t.item_id||0,u.querySelector(\".edit-link\").setAttribute(\"href\",s||\"\"),l&&\"function\"==typeof l.success&&(e.elItemNew=u,l.success(e))}},error:e=>{lpToastify.show(e,\"error\"),u.remove()},completed:()=>{lpUtils.lpSetLoadingEl(u,0),this.updateCountItems(o),l&&\"function\"==typeof l.completed&&(e.elItemNew=u,l.completed(e))}},S={course_id:this.courseId,action:\"create_item_add_to_section\",section_id:c,item_title:d,item_type:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(S,I)}changeTitle(e){const{target:t}=e,s=t.closest(`${EditSectionItem.selectors.elItemTitleInput}`);if(!s)return;const l=s.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!l)return;s.value.trim()===(s.dataset.old||\"\")?l.classList.remove(\"editing\"):l.classList.add(\"editing\")}focusTitleInput(e){const{target:t,focusIn:s=!0}=e,l=t.closest(`${EditSectionItem.selectors.elItemTitleInput}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);i&&(s?i.classList.add(\"focus\"):i.classList.remove(\"focus\"))}changeTitleAddNew(e){const{target:t}=e,s=t.closest(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`);if(!s)return;const l=s.closest(`${EditSectionItem.selectors.elAddItemType}`);if(!l)return;const i=l.querySelector(`${EditSectionItem.selectors.elBtnAddItem}`);if(!i)return;0===s.value.trim().length?i.classList.remove(\"active\"):i.classList.add(\"active\")}updateTitle(e){const{e:t,target:s}=e;t.preventDefault();const l=s.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!l)return;const i=l.closest(`${EditSection.selectors.elSection}`);if(!i)return;const o=l.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);if(!o)return;const c=l.dataset.itemId,n=l.dataset.itemType,d=o.value.trim(),r=o.dataset.old,a=o.dataset.messEmptyTitle;if(0===d.length)return void lpToastify.show(a,\"error\");if(d===r)return;o.blur(),lpUtils.lpSetLoadingEl(l,1);const m={success:e=>{const{message:t,status:s}=e;\"success\"===s?o.dataset.old=d:o.value=r,lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(l,0),l.classList.remove(\"editing\")}},u={course_id:this.courseId,action:\"update_item_of_section\",section_id:i.dataset.sectionId,item_id:c,item_type:n,item_title:d,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(u,m)}cancelUpdateTitle(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnCancelUpdateTitle}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`),o=i.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);o.value=o.dataset.old||\"\",i.classList.remove(\"editing\")}deleteItem(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnDeleteItem}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!i)return;const o=i.dataset.itemId,c=i.closest(`${EditSection.selectors.elSection}`),n=c.dataset.sectionId;SweetAlert.fire({title:l.dataset.title,text:l.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpDataAdmin.i18n.cancel,confirmButtonText:lpDataAdmin.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){lpUtils.lpSetLoadingEl(i,1);const e={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s),\"success\"===s&&i.remove()},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0),this.updateCountItems(c)}},t={course_id:this.courseId,action:\"delete_item_from_section\",section_id:n,item_id:o,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(t,e)}})}sortAbleItem(){const e=this.elCurriculumSections.querySelectorAll(`${EditSectionItem.selectors.elSectionListItems}`);let t,s=0,l=0,i=0;e.forEach(e=>{new Sortable(e,{handle:\".drag\",animation:150,group:{name:\"shared\"},onEnd:e=>{const o=[],c=e.item;i=c.closest(`${EditSection.selectors.elSection}`).dataset.sectionId;const n={course_id:this.courseId,args:{id_url:idUrlHandle},action:\"update_item_section_and_position\"};n.item_id_change=s,n.section_id_new_of_item=i,n.section_id_old_of_item=l;const d=this.elCurriculumSections.querySelector(`.section[data-section-id=\"${i}\"]`);d.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}`).forEach(e=>{const t=parseInt(e.dataset.itemId||0);0!==t&&o.push(t)}),n.items_position=o;const r={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(c,0),this.updateCountItems(d),l!==i&&this.updateCountItems(t)}};lpUtils.lpSetLoadingEl(c,1),window.lpAJAXG.fetchAJAX(n,r)},onMove:()=>{},onChoose:e=>{const i=e.item;s=i.dataset.itemId,t=i.closest(`${EditSection.selectors.elSection}`),l=t.dataset.sectionId},onUpdate:()=>{}})})}addItemsSelectedToSection(e){const t=document.querySelector(`.section[data-section-id=\"${this.sectionIdSelected}\"]`),s=t.querySelector(`${EditSectionItem.selectors.elItemClone}`);e.forEach(e=>{const t=s.cloneNode(!0),l=t.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);t.dataset.itemId=e.id,t.classList.add(e.type),t.classList.remove(\"clone\"),t.dataset.itemType=e.type,t.querySelector(\".edit-link\").setAttribute(\"href\",e.editLink||\"\"),l.value=e.titleSelected||\"\",lpUtils.lpSetLoadingEl(t,1),lpUtils.lpShowHideEl(t,1),s.insertAdjacentElement(\"beforebegin\",t)}),SweetAlert.close();const l={course_id:this.courseId,action:\"add_items_to_section\",section_id:this.sectionIdSelected,items:e,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(l,{success:l=>{const{message:i,status:o,data:c}=l,{html:n}=c||\"\";lpToastify.show(i,o),e.forEach(e=>{const s=t.querySelector(`${EditSectionItem.selectors.elSectionItem}[data-item-id=\"${e.id}\"]`);s&&s.remove()}),\"success\"===o&&s.insertAdjacentHTML(\"beforebegin\",n)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{this.updateCountItems(t)}})}updatePreviewItem(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnSetPreviewItem}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!i)return;const o=l.querySelector(\"a\");o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\");const c=!o.classList.contains(\"lp-icon-eye-slash\"),n=i.dataset.itemId,d=i.dataset.itemType;lpUtils.lpSetLoadingEl(i,1);const r={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s),\"error\"===s&&(o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\"))},error:e=>{lpToastify.show(e,\"error\"),o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},a={course_id:this.courseId,action:\"update_item_preview\",item_id:n,item_type:d,enable_preview:c?1:0,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(a,r)}updateCountItems(e){const t=this.elEditCurriculum,s=t.querySelector(\".total-items\"),l=t.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}:not(.clone)`).length;s.dataset.count=l,s.querySelector(\".count\").textContent=l;const i=e.querySelector(\".section-items-counts\"),o=e.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}:not(.clone)`).length;i.dataset.count=o,i.querySelector(\".count\").textContent=o}}\n\\ No newline at end of file\n+import SweetAlert from\"sweetalert2\";import Sortable from\"sortablejs\";import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";import{EditCourseCurriculum}from\"..\u002Fedit-curriculum.js\";import{EditSection}from\".\u002Fedit-section.js\";import{LpPopupSelectItemToAdd}from\"lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js\";const idUrlHandle=\"edit-course-curriculum\",lpPopupSelectItemToAdd=new LpPopupSelectItemToAdd;export class EditSectionItem{constructor(){this.courseId=null,this.elCurriculumSections=null,this.sectionIdSelected=null}static selectors={elSectionListItems:\".section-list-items\",elItemClone:\".section-item.clone\",elSectionItem:\".section-item\",elBtnSelectItemType:\".lp-btn-select-item-type\",elAddItemTypeClone:\".lp-add-item-type.clone\",elSectionActions:\".section-actions\",elAddItemType:\".lp-add-item-type\",elAddItemTypeTitleInput:\".lp-add-item-type-title-input\",elBtnAddItemCancel:\".lp-btn-add-item-cancel\",elBtnAddItem:\".lp-btn-add-item\",elItemTitleInput:\".lp-item-title-input\",elBtnUpdateItemTitle:\".lp-btn-update-item-title\",elBtnCancelUpdateTitle:\".lp-btn-cancel-update-item-title\",elBtnDeleteItem:\".lp-btn-delete-item\",elBtnSetPreviewItem:\".lp-btn-set-preview-item\"};init(){this.elEditCurriculum=document.querySelector(`${EditCourseCurriculum.selectors.idElEditCurriculum}`),this.elCurriculumSections=this.elEditCurriculum.querySelector(`${EditCourseCurriculum.selectors.elCurriculumSections}`);const e=this.elEditCurriculum.closest(`${EditCourseCurriculum.selectors.LPTarget}`),t=window.lpAJAXG.getDataSetCurrent(e);this.courseId=t.args.course_id,this.events(),this.sortAbleItem(),lpPopupSelectItemToAdd.init()}events(){EditSectionItem._loadedEvents||(EditSectionItem._loadedEvents=this,lpUtils.eventHandlers(\"click\",[{selector:EditSectionItem.selectors.elBtnSelectItemType,class:this,callBack:this.addItemType.name},{selector:EditSectionItem.selectors.elBtnAddItem,class:this,callBack:this.addItemToSection.name},{selector:EditSectionItem.selectors.elBtnAddItemCancel,class:this,callBack:this.cancelAddItemType.name},{selector:EditSectionItem.selectors.elBtnUpdateItemTitle,class:this,callBack:this.updateTitle.name},{selector:EditSectionItem.selectors.elBtnCancelUpdateTitle,class:this,callBack:this.cancelUpdateTitle.name},{selector:EditSectionItem.selectors.elBtnDeleteItem,class:this,callBack:this.deleteItem.name},{selector:LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect,class:this,callBack:this.handleShowPopupItemsToSelect.name},{selector:LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,class:lpPopupSelectItemToAdd,callBack:lpPopupSelectItemToAdd.addItemsSelectedToSection.name,callBackHandle:this.addItemsSelectedToSection.bind(this)},{selector:EditSectionItem.selectors.elBtnSetPreviewItem,class:this,callBack:this.updatePreviewItem.name}]),lpUtils.eventHandlers(\"keyup\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.changeTitle.name},{selector:EditSectionItem.selectors.elAddItemTypeTitleInput,class:this,callBack:this.changeTitleAddNew.name}]),lpUtils.eventHandlers(\"keydown\",[{selector:EditSectionItem.selectors.elAddItemTypeTitleInput,class:this,callBack:this.addItemToSection.name,checkIsEventEnter:!0},{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.updateTitle.name,checkIsEventEnter:!0}]),lpUtils.eventHandlers(\"focusin\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name}]),lpUtils.eventHandlers(\"focusout\",[{selector:EditSectionItem.selectors.elItemTitleInput,class:this,callBack:this.focusTitleInput.name,focusIn:!1}]))}handleShowPopupItemsToSelect(e){const{e:t,target:s}=e;if(s.closest(\".lp-edit-quiz-wrap\"))return void(this.sectionIdSelected=null);const l=s.closest(EditSection.selectors.elSection),i=s.closest(\"#lp-course-edit-curriculum\")||s.closest(\".lp-edit-curriculum-wrap\");this.sectionIdSelected=l&&i?l.dataset.sectionId:null}addItemType(e){const{e:t,target:s}=e,l=s,i=l.dataset.itemType,o=l.dataset.placeholder,c=l.dataset.buttonAddText,n=l.closest(`${EditSection.selectors.elSection}`).querySelector(`${EditSectionItem.selectors.elSectionActions}`),r=n.querySelector(`${EditSectionItem.selectors.elAddItemTypeClone}`).cloneNode(!0),d=r.querySelector(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`),a=r.querySelector(`${EditSectionItem.selectors.elBtnAddItem}`);r.classList.remove(\"clone\"),r.classList.add(i),lpUtils.lpShowHideEl(r,1),d.setAttribute(\"placeholder\",o),d.dataset.itemType=i,a.textContent=c,n.insertAdjacentElement(\"beforebegin\",r),d.focus()}cancelAddItemType(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elAddItemType}`);l&&l.remove()}addItemToSection(e){const{e:t,target:s,callBackNest:l}=e;t.preventDefault();const i=s.closest(`${EditSectionItem.selectors.elAddItemType}`),o=i.closest(`${EditSection.selectors.elSection}`),c=o.dataset.sectionId,n=i.querySelector(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`),r=n.value.trim(),d=n.dataset.itemType,a=n.dataset.messEmptyTitle;if(0===r.length)return void lpToastify.show(a,\"error\");const u=o.querySelector(`${EditSectionItem.selectors.elItemClone}`),m=u.cloneNode(!0),p=m.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);m.classList.remove(\"clone\"),m.classList.add(d),m.dataset.itemType=d,lpUtils.lpShowHideEl(m,1),lpUtils.lpSetLoadingEl(m,1),p.value=r,p.dataset.old=r,u.insertAdjacentElement(\"beforebegin\",m),i.remove();const I={success:t=>{const{message:s,status:i,data:o}=t;if(lpToastify.show(s,i),\"error\"===i)m.remove();else if(\"success\"===i){const{section_item:t,item_link:s}=o||{},i=t.item_id||0;m.dataset.itemId=i,m.querySelector(\".edit-link\").setAttribute(\"href\",s||\"\"),this.addPopupAttributesToItem(m,i,d),l&&\"function\"==typeof l.success&&(e.elItemNew=m,l.success(e))}},error:e=>{lpToastify.show(e,\"error\"),m.remove()},completed:()=>{lpUtils.lpSetLoadingEl(m,0),this.updateCountItems(o),l&&\"function\"==typeof l.completed&&(e.elItemNew=m,l.completed(e))}},S={course_id:this.courseId,action:\"create_item_add_to_section\",section_id:c,item_title:r,item_type:d,args:{id_url:idUrlHandle}};document.querySelector(\"#lp-course-builder\")&&(S.is_course_builder=1),window.lpAJAXG.fetchAJAX(S,I)}changeTitle(e){const{target:t}=e,s=t.closest(`${EditSectionItem.selectors.elItemTitleInput}`);if(!s)return;const l=s.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!l)return;s.value.trim()===(s.dataset.old||\"\")?l.classList.remove(\"editing\"):l.classList.add(\"editing\")}focusTitleInput(e){const{target:t,focusIn:s=!0}=e,l=t.closest(`${EditSectionItem.selectors.elItemTitleInput}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);i&&(s?i.classList.add(\"focus\"):i.classList.remove(\"focus\"))}changeTitleAddNew(e){const{target:t}=e,s=t.closest(`${EditSectionItem.selectors.elAddItemTypeTitleInput}`);if(!s)return;const l=s.closest(`${EditSectionItem.selectors.elAddItemType}`);if(!l)return;const i=l.querySelector(`${EditSectionItem.selectors.elBtnAddItem}`);if(!i)return;0===s.value.trim().length?i.classList.remove(\"active\"):i.classList.add(\"active\")}updateTitle(e){const{e:t,target:s}=e;t.preventDefault();const l=s.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!l)return;const i=l.closest(`${EditSection.selectors.elSection}`);if(!i)return;const o=l.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);if(!o)return;const c=l.dataset.itemId,n=l.dataset.itemType,r=o.value.trim(),d=o.dataset.old,a=o.dataset.messEmptyTitle;if(0===r.length)return void lpToastify.show(a,\"error\");if(r===d)return;o.blur(),lpUtils.lpSetLoadingEl(l,1);const u={success:e=>{const{message:t,status:s}=e;\"success\"===s?o.dataset.old=r:o.value=d,lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(l,0),l.classList.remove(\"editing\")}},m={course_id:this.courseId,action:\"update_item_of_section\",section_id:i.dataset.sectionId,item_id:c,item_type:n,item_title:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(m,u)}cancelUpdateTitle(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnCancelUpdateTitle}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`),o=i.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);o.value=o.dataset.old||\"\",i.classList.remove(\"editing\")}deleteItem(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnDeleteItem}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!i)return;const o=i.dataset.itemId,c=i.closest(`${EditSection.selectors.elSection}`),n=c.dataset.sectionId;SweetAlert.fire({title:l.dataset.title,text:l.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){lpUtils.lpSetLoadingEl(i,1);const e={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s),\"success\"===s&&i.remove()},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0),this.updateCountItems(c)}},t={course_id:this.courseId,action:\"delete_item_from_section\",section_id:n,item_id:o,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(t,e)}})}sortAbleItem(){const e=this.elCurriculumSections.querySelectorAll(`${EditSectionItem.selectors.elSectionListItems}`);let t,s=0,l=0,i=0;e.forEach(e=>{new Sortable(e,{handle:\".drag\",animation:150,group:{name:\"shared\"},onEnd:e=>{const o=[],c=e.item;i=c.closest(`${EditSection.selectors.elSection}`).dataset.sectionId;const n={course_id:this.courseId,args:{id_url:idUrlHandle},action:\"update_item_section_and_position\"};n.item_id_change=s,n.section_id_new_of_item=i,n.section_id_old_of_item=l;const r=this.elCurriculumSections.querySelector(`.section[data-section-id=\"${i}\"]`);r.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}`).forEach(e=>{const t=parseInt(e.dataset.itemId||0);0!==t&&o.push(t)}),n.items_position=o;const d={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(c,0),this.updateCountItems(r),l!==i&&this.updateCountItems(t)}};lpUtils.lpSetLoadingEl(c,1),window.lpAJAXG.fetchAJAX(n,d)},onMove:()=>{},onChoose:e=>{const i=e.item;s=i.dataset.itemId,t=i.closest(`${EditSection.selectors.elSection}`),l=t.dataset.sectionId},onUpdate:()=>{}})})}addItemsSelectedToSection(e){if(!this.sectionIdSelected)return;const t=document.querySelector(`.section[data-section-id=\"${this.sectionIdSelected}\"]`);if(!t)return;const s=t.querySelector(`${EditSectionItem.selectors.elItemClone}`),l=null!==document.querySelector(\"#lp-course-builder\");e.forEach(e=>{const t=s.cloneNode(!0),l=t.querySelector(`${EditSectionItem.selectors.elItemTitleInput}`);t.dataset.itemId=e.id,t.classList.add(e.type),t.classList.remove(\"clone\"),t.dataset.itemType=e.type,t.querySelector(\".edit-link\").setAttribute(\"href\",e.editLink||\"\"),l.value=e.titleSelected||\"\",lpUtils.lpSetLoadingEl(t,1),lpUtils.lpShowHideEl(t,1),s.insertAdjacentElement(\"beforebegin\",t)}),SweetAlert.close();const i={course_id:this.courseId,action:\"add_items_to_section\",section_id:this.sectionIdSelected,items:e,is_course_builder:l?1:0,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(i,{success:l=>{const{message:i,status:o,data:c}=l,{html:n}=c||\"\";lpToastify.show(i,o),e.forEach(e=>{const s=t.querySelector(`${EditSectionItem.selectors.elSectionItem}[data-item-id=\"${e.id}\"]`);s&&s.remove()}),\"success\"===o&&n&&s.insertAdjacentHTML(\"beforebegin\",n)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{this.updateCountItems(t)}})}updatePreviewItem(e){const{e:t,target:s}=e,l=s.closest(`${EditSectionItem.selectors.elBtnSetPreviewItem}`);if(!l)return;const i=l.closest(`${EditSectionItem.selectors.elSectionItem}`);if(!i)return;const o=l.querySelector(\"a\");o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\");const c=!o.classList.contains(\"lp-icon-eye-slash\"),n=i.dataset.itemId,r=i.dataset.itemType;lpUtils.lpSetLoadingEl(i,1);const d={success:e=>{const{message:t,status:s}=e;lpToastify.show(t,s),\"error\"===s&&(o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\"))},error:e=>{lpToastify.show(e,\"error\"),o.classList.toggle(\"lp-icon-eye\"),o.classList.toggle(\"lp-icon-eye-slash\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},a={course_id:this.courseId,action:\"update_item_preview\",item_id:n,item_type:r,enable_preview:c?1:0,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(a,d)}updateCountItems(e){const t=this.elEditCurriculum,s=t.querySelector(\".total-items\"),l=t.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}:not(.clone)`).length;s.dataset.count=l,s.querySelector(\".count\").textContent=l;const i=e.querySelector(\".section-items-counts\"),o=e.querySelectorAll(`${EditSectionItem.selectors.elSectionItem}:not(.clone)`).length;i.dataset.count=o,i.querySelector(\".count\").textContent=o}addPopupAttributesToItem(e,t,s){if(!(null!==document.querySelector(\"#lp-course-builder\"))||!t)return;const l=s.replace(\u002F^lp_\u002F,\"\"),i=`#lp-tmpl-builder-popup-curriculum-${l}-course-${this.courseId}`;if(!l||!document.querySelector(i))return;const o=e.querySelector(\".item-actions .edit-link\");if(!o)return;const c=o.closest(\"li\");c&&(\"lp_lesson\"===s?c.setAttribute(\"data-popup-lesson\",t):\"lp_quiz\"===s&&c.setAttribute(\"data-popup-quiz\",t),c.classList.add(\"lp-btn-edit-item-popup\"),o.removeAttribute(\"target\"),o.removeAttribute(\"href\"),o.classList.add(\"edit-popup-link\"),c.setAttribute(\"data-course-id\",this.courseId),c.setAttribute(\"data-popup-type\",l),c.setAttribute(\"data-popup-id\",t),c.setAttribute(\"data-template\",i))}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-question.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-question.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-question.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fedit-question.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify\";import SweetAlert from\"sweetalert2\";import Sortable from\"sortablejs\";const idUrlHandle=\"edit-question\";let fibSelection,timeoutAutoUpdateAnswer,timeoutAutoUpdateFib,timeoutAutoUpdateQuestion;export class EditQuestion{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){if(EditQuestion._loadedEvents)return;EditQuestion._loadedEvents=!0;document.querySelectorAll(`${EditQuestion.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),lpUtils.eventHandlers(\"click\",[{selector:EditQuestion.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:EditQuestion.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:EditQuestion.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:EditQuestion.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:EditQuestion.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:EditQuestion.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:EditQuestion.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:EditQuestion.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:EditQuestion.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:EditQuestion.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:s}=e;s.closest(`${EditQuestion.selectors.elQuestionEditMain}`).querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",e=>{const t=e.target;lpUtils.toggleCollapse(e,t,EditQuestion.selectors.elTriggerToggle)}),lpUtils.eventHandlers(\"keyup\",[{selector:EditQuestion.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:EditQuestion.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:EditQuestion.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),lpUtils.eventHandlers(\"keydown\",[{selector:EditQuestion.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),lpUtils.eventHandlers(\"change\",[{selector:EditQuestion.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce()}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",e=>{const t=e.editor.id,s=window.tinymce.get(t);if(!s)return;if(\"content\"===t)return;const n=document.querySelector(`#wp-${t}-wrap`);n&&(n.classList.add(\"tmce-active\"),n.classList.remove(\"html-active\"));const i=document.getElementById(t);i.closest(`${EditQuestion.selectors.elQuestionEditMain}`).dataset.questionId;s.settings.force_p_newlines=!1,s.settings.forced_root_block=\"\",s.settings.force_br_newlines=!0,s.settings.relative_urls=!1,s.settings.remove_script_host=!1,s.settings.convert_urls=!0,s.settings.document_base_url=lpData.site_url,s.on(\"change keyup\",e=>{i.value=s.getContent(),this.autoUpdateQuestion({e:e,target:i})}),s.on(\"blur\",e=>{}),s.on(\"focusin\",e=>{}),s.on(\"init\",()=>{s.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${EditQuestion.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),s.on(\"setcontent\",e=>{const t=this.randomString(),n=s.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);n[0]&&n[0].focus(),s.dom.bind(n[0],\"input\",e=>{})}),s.on(\"selectionchange\",e=>{if(fibSelection=s.selection,fibSelection.getNode().classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`)){const e=fibSelection.getNode().dataset.id,n=fibSelection.getNode().textContent.trim();if(0===n.length){const t=s.id.replace(`${EditQuestion.selectors.elQuestionFibInput}-`,\"\"),n=document.querySelector(`${EditQuestion.selectors.elQuestionEditMain}[data-question-id=\"${t}\"]`).querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);n&&lpUtils.lpShowHideEl(n,0)}else{const s=document.getElementById(t).closest(`${EditQuestion.selectors.elAnswersConfig}`).querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);if(s){const e=s.querySelector(`${EditQuestion.selectors.elFibOptionTitleInput}`);e&&(e.value=n)}}}}),s.on(\"Undo\",e=>{s.getContent();const t=s.selection.getNode();if(t.classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`)){const e=t.dataset.id,s=document.querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);s&&lpUtils.lpShowHideEl(s,1)}}),s.on(\"Redo\",e=>{})})}autoUpdateQuestion(e){let{e:t,target:s,key:n,value:i}=e;const o=s.closest(`${EditQuestion.selectors.elAutoSaveQuestion}`);if(!o)return;const l=o.closest(`${EditQuestion.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(timeoutAutoUpdateQuestion),timeoutAutoUpdateQuestion=setTimeout(()=>{const e={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{}},t={action:\"update_question\",question_id:l,args:{id_url:idUrlHandle}};if(void 0===n){if(n=o.dataset.keyAutoSave,!n){if(!o.classList.contains(\"lp-editor-tinymce\"))return;const e=o.id;if(n=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${l}`,\"\").replace(\u002F-\u002Fg,\"_\"),!n)return}i=o.value}t[n]=i,window.lpAJAXG.fetchAJAX(t,e)},700)}createQuestionType(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnQuestionCreateType}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=i.querySelector(`${EditQuestion.selectors.elQuestionTypeNew}`);if(!l)return;const r=l.value.trim();if(!r){const e=l.dataset.messEmptyType;return void lpToastify.show(e,\"error\")}const a={success:e=>{const{message:t,status:s,data:n}=e;if(\"success\"!==s)throw`Error: ${t}`;{const{html_option_answers:e}=n;i.querySelector(`${EditQuestion.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(i),lpToastify.show(t,s)}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{}},c={action:\"update_question\",question_id:o,question_type:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(c,a)}addQuestionAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elQuestionAnswerItemAddNew}`);if(!n)return;t.preventDefault();const i=n.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleNewInput}`);if(!i.value.trim()){const e=i.dataset.messEmptyTitle;return void lpToastify.show(e,\"error\")}const o=s.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}.clone`),r=l.cloneNode(!0),a=r.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleInput}`);r.classList.remove(\"clone\"),lpUtils.lpShowHideEl(r,1),lpUtils.lpSetLoadingEl(r,1),l.insertAdjacentElement(\"beforebegin\",r);const c=i.value.trim();a.value=c,i.value=\"\";const u={success:e=>{const{message:t,status:s,data:n}=e;if(\"success\"!==s)throw`Error: ${t}`;{const{question_answer:e}=n;r.dataset.answerId=e.question_answer_id,lpUtils.lpSetLoadingEl(r,0);const t=this.getDataAnswersConfig(o);t.push(e),this.setDataAnswersConfig(o,t)}lpToastify.show(t,s)},error:e=>{r.remove(),lpToastify.show(e,\"error\")},completed:()=>{}},d={action:\"add_question_answer\",question_id:o.dataset.questionId,answer_title:c,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(d,u)}checkCanAddAnswer(e){const{e:t,target:s}=e,n=s.closest(EditQuestion.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;const o=i.querySelector(`${EditQuestion.selectors.elBtnAddAnswer}`);if(!o)return;n.value.trim()?o.classList.add(\"active\"):o.classList.remove(\"active\")}autoUpdateAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elAutoSaveAnswer}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItem}`);clearTimeout(timeoutAutoUpdateAnswer),timeoutAutoUpdateAnswer=setTimeout(()=>{const e=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`),t=e.dataset.questionId,s=this.getDataAnswersConfig(e),o=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`),l=structuredClone(s),r=o.querySelectorAll(`${EditQuestion.selectors.elQuestionAnswerItem}:not(.clone)`),a={};r.forEach((e,t)=>{a[e.dataset.answerId]=t+1}),s.map((t,s)=>{const n=e.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`),i=n.querySelector(`${EditQuestion.selectors.elInputAnswerSetTrue}`),o=n.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleInput}`);return o&&(t.title=o.value.trim()),i&&(i.checked?t.is_true=\"yes\":t.is_true=\"\"),a[t.question_answer_id]&&(t.order=a[t.question_answer_id]),t}),lpUtils.lpSetLoadingEl(i,1);const c={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;lpToastify.show(t,s)},error:t=>{l.forEach(t=>{const s=e.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`).querySelector(`${EditQuestion.selectors.elInputAnswerSetTrue}`);return\"yes\"===t.is_true&&(s.checked=!0),t}),lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},u={action:\"update_question_answers_config\",question_id:t,answers:s,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(u,c)},700)}sortAbleQuestionAnswer(e){let t,s=0;e.querySelectorAll(`${EditQuestion.selectors.elAnswersConfig}`).forEach(e=>{new Sortable(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;s&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${EditQuestion.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{s=1}})})}deleteQuestionAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnDeleteAnswer}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItem}`);if(!i)return;const o=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.dataset.questionId,r=i.dataset.answerId;l&&r&&SweetAlert.fire({title:n.dataset.title||\"Are you sure?\",text:n.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){lpUtils.lpSetLoadingEl(i,1);const e={success:e=>{const{message:t,status:s}=e;if(lpToastify.show(t,s),\"success\"===s){const e=parseInt(i.dataset.answerId);i.remove();const t=this.getDataAnswersConfig(o);if(t){const s=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(o,s)}}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},t={action:\"delete_question_answer\",question_id:l,question_answer_id:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(t,e)}})}getDataAnswersConfig(e){const t=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`);if(!t)return null;let s=t.dataset.answers||\"[]\";try{s=JSON.parse(s)}catch(e){s=[]}return s.meta_data||(s.meta_data={}),s}setDataAnswersConfig(e,t){const s=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`);s&&(t&&\"object\"==typeof t||(t={}),s.dataset.answers=JSON.stringify(t))}fibInsertBlank=e=>{const{e:t,target:s}=e,n=s.closest(EditQuestion.selectors.elBtnFibInsertBlank);if(!n)return;const i=n.dataset.defaultText,o=n.closest(EditQuestion.selectors.elQuestionEditMain),l=o.dataset.questionId,r=n.dataset.messInserted,a=n.dataset.messRequireSelectText,c=`${EditQuestion.selectors.elQuestionFibInput}-${l}`,u=this.randomString();let d;if(!fibSelection)return void lpToastify.show(a,\"error\");{const e=fibSelection.getNode();if(!e)return void lpToastify.show(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${c}\"]`))return void lpToastify.show(a,\"error\");if(e.classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`))return void lpToastify.show(r,\"error\");d=fibSelection.getContent(),0===d.length&&(d=i);const t=`\u003Cspan class=\"${EditQuestion.selectors.elQuestionFibInput}\" data-id=\"${u}\">${d}\u003C\u002Fspan>`;fibSelection.setContent(t)}const p=this.getDataAnswersConfig(o);p.meta_data=p.meta_data||{},0===Object.keys(p.meta_data).length&&(p.meta_data={}),p.meta_data[u]={id:u,match_case:0,comparison:\"equal\",fill:d,index:1,open:!1},this.setDataAnswersConfig(o,p);const w=o.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`),Q=o.querySelector(`${EditQuestion.selectors.elFibBlankOptionItemClone}`),m=Q.cloneNode(!0),E=w.querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).length,f=m.querySelector(`${EditQuestion.selectors.elFibBlankOptionIndex}`),b=m.querySelector(`${EditQuestion.selectors.elFibOptionTitleInput}`),h=m.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`),g=m.querySelectorAll(`${EditQuestion.selectors.elFibOptionComparisonInput}`);m.dataset.id=u,b.name=`${EditQuestion.selectors.elFibOptionTitleInput}-${u}`,b.value=this.decodeHtml(d),f.textContent=E+1+\".\",h.name=`${EditQuestion.selectors.elFibOptionMatchCaseInput}-${u}`.replace(\u002F\\.\u002Fg,\"\"),g.forEach(e=>{e.name=`${EditQuestion.selectors.elFibOptionComparisonInput}-${u}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),Q.insertAdjacentElement(\"beforebegin\",m),m.classList.remove(\"clone\"),lpUtils.lpShowHideEl(m,1);const A=o.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})};fibDeleteAllBlanks(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibDeleteAllBlanks}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=this.getDataAnswersConfig(i);SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${o}`);e.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}`).forEach(t=>{e.dom.remove(t,!0)}),l.meta_data={},this.setDataAnswersConfig(i,l);i.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})}})}fibClearContent(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibClearAllContent}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=this.getDataAnswersConfig(i);SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){window.tinymce.get(`lp-question-fib-input-${o}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(i,l);i.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const e=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:e,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})}})}fibDeleteBlank(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibOptionDelete}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=(i.querySelector(`${EditQuestion.selectors.elAnswersConfig}`),this.getDataAnswersConfig(i)),r=n.closest(`${EditQuestion.selectors.elFibBlankOptionItem}`),a=r.dataset.id;SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${o}`),t=e.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}[data-id=\"${a}\"]`);t[0]&&e.dom.remove(t[0],!0),r.remove(),l.meta_data=l.meta_data||{},l.meta_data[a]&&delete l.meta_data[a],this.setDataAnswersConfig(i,l);const s=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(r,1),this.fibSaveContent({e:null,target:s,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(r,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elFibOptionTitleInput}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elFibBlankOptionItem}`);if(!i)return;const o=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!o)return;const l=n.value.trim(),r=i.dataset.id,a=o.dataset.questionId,c=window.tinymce.get(`lp-question-fib-input-${a}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);c[0]&&(c[0].textContent=l),clearTimeout(timeoutAutoUpdateFib),timeoutAutoUpdateFib=setTimeout(()=>{const e=o.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(e){const{e:t,target:s,callBackCompleted:n=null}=e,i=s.closest(`${EditQuestion.selectors.elBtnFibSaveContent}`);if(!i)return;const o=i.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.dataset.questionId,r=this.getDataAnswersConfig(o);if(!r)return;const a=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${l}`);r.title=a.getContent();const c=o.querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`);c&&c.forEach(e=>{const t=e.dataset.id,s=e.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${EditQuestion.selectors.elFibOptionComparisonInput}:checked`);r.meta_data[t].match_case=s.checked?1:0,r.meta_data[t].comparison=n.value}),n||lpUtils.lpSetLoadingEl(i,1);const u={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;this.setDataAnswersConfig(o,r),lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{n&&\"function\"==typeof n?n():lpUtils.lpSetLoadingEl(i,0)}},d={action:\"update_question_answers_config\",question_id:l,answers:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(d,u)}fibShowHideMatchCaseOption(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionFibOptionDetail}`),o=i.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseWrap}`);if(!i||!o)return;n.checked?lpUtils.lpShowHideEl(o,1):lpUtils.lpShowHideEl(o,0);n.closest(`${EditQuestion.selectors.elQuestionEditMain}`).querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`).click()}randomString(e=10){const t=\"abcdefghijklmnopqrstuvwxyz0123456789\";let s=\"\";for(let n=0;n\u003Ce;n++)s+=t.charAt(Math.floor(36*Math.random()));return s}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const editQuestion=new EditQuestion;lpUtils.lpOnElementReady(EditQuestion.selectors.elEditQuestionWrap,e=>{const t=EditQuestion.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&editQuestion.init()});\n\\ No newline at end of file\n+import*as lpUtils from\"lpAssetsJsPath\u002Futils.js\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify\";import SweetAlert from\"sweetalert2\";import Sortable from\"sortablejs\";const idUrlHandle=\"edit-question\";let fibSelection,timeoutAutoUpdateAnswer,timeoutAutoUpdateFib,timeoutAutoUpdateQuestion;export class EditQuestion{static selectors={elEditQuestionWrap:\".lp-edit-question-wrap\",elQuestionEditMain:\".lp-question-edit-main\",elQuestionToggleAll:\".lp-question-toggle-all\",elEditListQuestions:\".lp-edit-list-questions\",elQuestionToggle:\".lp-question-toggle\",elBtnShowPopupItemsToSelect:\".lp-btn-show-popup-items-to-select\",elPopupItemsToSelectClone:\".lp-popup-items-to-select.clone\",elBtnAddQuestion:\".lp-btn-add-question\",elBtnRemoveQuestion:\".lp-btn-remove-question\",elBtnUpdateQuestionTitle:\".lp-btn-update-question-title\",elBtnUpdateQuestionDes:\".lp-btn-update-question-des\",elBtnUpdateQuestionHint:\".lp-btn-update-question-hint\",elBtnUpdateQuestionExplain:\".lp-btn-update-question-explanation\",elQuestionTitleNewInput:\".lp-question-title-new-input\",elQuestionTitleInput:\".lp-question-title-input\",elQuestionTypeLabel:\".lp-question-type-label\",elQuestionTypeNew:\".lp-question-type-new\",elAddNewQuestion:\"add-new-question\",elQuestionClone:\".lp-question-item.clone\",elAnswersConfig:\".lp-answers-config\",elBtnAddAnswer:\".lp-btn-add-question-answer\",elQuestionAnswerItemAddNew:\".lp-question-answer-item-add-new\",elQuestionAnswerTitleNewInput:\".lp-question-answer-title-new-input\",elQuestionAnswerTitleInput:\".lp-question-answer-title-input\",elBtnDeleteAnswer:\".lp-btn-delete-question-answer\",elQuestionByType:\".lp-question-by-type\",elInputAnswerSetTrue:\".lp-input-answer-set-true\",elQuestionAnswerItem:\".lp-question-answer-item\",elBtnUpdateQuestionAnswer:\".lp-btn-update-question-answer\",elBtnFibInsertBlank:\".lp-btn-fib-insert-blank\",elBtnFibDeleteAllBlanks:\".lp-btn-fib-delete-all-blanks\",elBtnFibSaveContent:\".lp-btn-fib-save-content\",elBtnFibClearAllContent:\".lp-btn-fib-clear-all-content\",elFibOptionTitleInput:\".lp-question-fib-option-title-input\",elFibBlankOptions:\".lp-question-fib-blank-options\",elFibBlankOptionItem:\".lp-question-fib-blank-option-item\",elFibBlankOptionItemClone:\".lp-question-fib-blank-option-item.clone\",elFibBlankOptionIndex:\".lp-question-fib-option-index\",elBtnFibOptionDelete:\".lp-btn-fib-option-delete\",elFibOptionMatchCaseWrap:\".lp-question-fib-option-match-case-wrap\",elFibOptionMatchCaseInput:\".lp-question-fib-option-match-case-input\",elQuestionFibOptionDetail:\".lp-question-fib-option-detail\",elFibOptionComparisonInput:\".lp-question-fib-option-comparison-input\",elAutoSaveFib:\".lp-auto-save-fib\",LPTarget:\".lp-target\",elCollapse:\"lp-collapse\",elSectionToggle:\".lp-section-toggle\",elTriggerToggle:\".lp-trigger-toggle\",elAutoSaveQuestion:\".lp-auto-save-question\",elAutoSaveAnswer:\".lp-auto-save-question-answer\",elQuestionFibInput:\"lp-question-fib-input\",elBtnQuestionCreateType:\".lp-btn-question-create-type\"};constructor(){}init(){this.events(),this.initTinyMCE().then()}events(){if(EditQuestion._loadedEvents)return;EditQuestion._loadedEvents=!0;document.querySelectorAll(`${EditQuestion.selectors.elQuestionEditMain}`).forEach(e=>{this.sortAbleQuestionAnswer(e)}),lpUtils.eventHandlers(\"click\",[{selector:EditQuestion.selectors.elBtnQuestionCreateType,callBack:this.createQuestionType.name,class:this},{selector:EditQuestion.selectors.elBtnAddAnswer,callBack:this.addQuestionAnswer.name,class:this},{selector:EditQuestion.selectors.elBtnDeleteAnswer,callBack:this.deleteQuestionAnswer.name,class:this},{selector:EditQuestion.selectors.elBtnFibInsertBlank,callBack:this.fibInsertBlank.name,class:this},{selector:EditQuestion.selectors.elBtnFibDeleteAllBlanks,callBack:this.fibDeleteAllBlanks.name,class:this},{selector:EditQuestion.selectors.elBtnFibSaveContent,callBack:this.fibSaveContent.name,class:this},{selector:EditQuestion.selectors.elBtnFibClearAllContent,callBack:this.fibClearContent.name,class:this},{selector:EditQuestion.selectors.elBtnFibOptionDelete,callBack:this.fibDeleteBlank.name,class:this},{selector:EditQuestion.selectors.elFibOptionMatchCaseInput,callBack:this.fibShowHideMatchCaseOption.name,class:this},{selector:EditQuestion.selectors.elFibOptionComparisonInput,callBack:e=>{const{e:t,target:s}=e;s.closest(`${EditQuestion.selectors.elQuestionEditMain}`).querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`).click()}}]),document.addEventListener(\"click\",e=>{const t=e.target;lpUtils.toggleCollapse(e,t,EditQuestion.selectors.elTriggerToggle)}),lpUtils.eventHandlers(\"keyup\",[{selector:EditQuestion.selectors.elQuestionAnswerTitleNewInput,callBack:this.checkCanAddAnswer.name,class:this},{selector:EditQuestion.selectors.elFibOptionTitleInput,callBack:this.fibOptionTitleInputChange.name,class:this},{selector:EditQuestion.selectors.elAutoSaveQuestion,callBack:this.autoUpdateQuestion.name,class:this}]),lpUtils.eventHandlers(\"keydown\",[{selector:EditQuestion.selectors.elQuestionAnswerTitleNewInput,callBack:this.addQuestionAnswer.name,class:this,checkIsEventEnter:!0}]),lpUtils.eventHandlers(\"change\",[{selector:EditQuestion.selectors.elAutoSaveAnswer,callBack:this.autoUpdateAnswer.name,class:this}]),this.eventEditorTinymce()}async initTinyMCE(){document.querySelectorAll(\".lp-editor-tinymce\").forEach(e=>{const t=e.id;this.reInitTinymce(t)})}reInitTinymce(e){window.tinymce.execCommand(\"mceRemoveEditor\",!0,e),window.tinymce.execCommand(\"mceAddEditor\",!0,e)}eventEditorTinymce(){window.tinymce.on(\"AddEditor\",e=>{const t=e.editor.id,s=window.tinymce.get(t);if(!s)return;if(\"content\"===t)return;const n=document.querySelector(`#wp-${t}-wrap`);n&&(n.classList.add(\"tmce-active\"),n.classList.remove(\"html-active\"));const i=document.getElementById(t);if(!i)return;const o=i.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!o)return;o.dataset.questionId;s.settings.force_p_newlines=!1,s.settings.forced_root_block=\"\",s.settings.force_br_newlines=!0,s.settings.relative_urls=!1,s.settings.remove_script_host=!1,s.settings.convert_urls=!0,s.settings.document_base_url=lpData.site_url,s.on(\"change keyup\",e=>{i.value=s.getContent(),this.autoUpdateQuestion({e:e,target:i})}),s.on(\"blur\",e=>{}),s.on(\"focusin\",e=>{}),s.on(\"init\",()=>{s.dom.addStyle(`\\n\\t\\t\\t\\tbody {\\n\\t\\t\\t\\t\\tline-height: 2.2 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t.${EditQuestion.selectors.elQuestionFibInput} {\\n\\t\\t\\t\\t\\tborder: 1px dashed rebeccapurple;\\n\\t\\t\\t\\t\\tpadding: 5px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t`)}),s.on(\"setcontent\",e=>{const t=this.randomString(),n=s.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}[data-id=\"${t}\"]`);n[0]&&n[0].focus(),s.dom.bind(n[0],\"input\",e=>{})}),s.on(\"selectionchange\",e=>{if(fibSelection=s.selection,fibSelection.getNode().classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`)){const e=fibSelection.getNode().dataset.id,n=fibSelection.getNode().textContent.trim();if(0===n.length){const t=s.id.replace(`${EditQuestion.selectors.elQuestionFibInput}-`,\"\"),n=document.querySelector(`${EditQuestion.selectors.elQuestionEditMain}[data-question-id=\"${t}\"]`).querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);n&&lpUtils.lpShowHideEl(n,0)}else{const s=document.getElementById(t).closest(`${EditQuestion.selectors.elAnswersConfig}`).querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);if(s){const e=s.querySelector(`${EditQuestion.selectors.elFibOptionTitleInput}`);e&&(e.value=n)}}}}),s.on(\"Undo\",e=>{s.getContent();const t=s.selection.getNode();if(t.classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`)){const e=t.dataset.id,s=document.querySelector(`${EditQuestion.selectors.elFibBlankOptionItem}[data-id=\"${e}\"]`);s&&lpUtils.lpShowHideEl(s,1)}}),s.on(\"Redo\",e=>{})})}autoUpdateQuestion(e){let{e:t,target:s,key:n,value:i}=e;const o=s.closest(`${EditQuestion.selectors.elAutoSaveQuestion}`);if(!o)return;const l=o.closest(`${EditQuestion.selectors.elQuestionEditMain}`).dataset.questionId;clearTimeout(timeoutAutoUpdateQuestion),timeoutAutoUpdateQuestion=setTimeout(()=>{const e={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{}},t={action:\"update_question\",question_id:l,args:{id_url:idUrlHandle}};if(void 0===n){if(n=o.dataset.keyAutoSave,!n){if(!o.classList.contains(\"lp-editor-tinymce\"))return;const e=o.id;if(n=e.replace(\u002Flp-\u002Fg,\"\").replace(`-${l}`,\"\").replace(\u002F-\u002Fg,\"_\"),!n)return}i=o.value}t[n]=i,window.lpAJAXG.fetchAJAX(t,e)},700)}createQuestionType(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnQuestionCreateType}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=i.querySelector(`${EditQuestion.selectors.elQuestionTypeNew}`);if(!l)return;const r=l.value.trim();if(!r){const e=l.dataset.messEmptyType;return void lpToastify.show(e,\"error\")}const a={success:e=>{const{message:t,status:s,data:n}=e;if(\"success\"!==s)throw`Error: ${t}`;{const{html_option_answers:e}=n;i.querySelector(`${EditQuestion.selectors.elAnswersConfig}`).outerHTML=e,this.initTinyMCE(),this.sortAbleQuestionAnswer(i),lpToastify.show(t,s)}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{}},c={action:\"update_question\",question_id:o,question_type:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(c,a)}addQuestionAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elQuestionAnswerItemAddNew}`);if(!n)return;t.preventDefault();const i=n.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleNewInput}`);if(!i.value.trim()){const e=i.dataset.messEmptyTitle;return void lpToastify.show(e,\"error\")}const o=s.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}.clone`),r=l.cloneNode(!0),a=r.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleInput}`);r.classList.remove(\"clone\"),lpUtils.lpShowHideEl(r,1),lpUtils.lpSetLoadingEl(r,1),l.insertAdjacentElement(\"beforebegin\",r);const c=i.value.trim();a.value=c,i.value=\"\";const u={success:e=>{const{message:t,status:s,data:n}=e;if(\"success\"!==s)throw`Error: ${t}`;{const{question_answer:e}=n;r.dataset.answerId=e.question_answer_id,lpUtils.lpSetLoadingEl(r,0);const t=this.getDataAnswersConfig(o);t.push(e),this.setDataAnswersConfig(o,t)}lpToastify.show(t,s)},error:e=>{r.remove(),lpToastify.show(e,\"error\")},completed:()=>{}},d={action:\"add_question_answer\",question_id:o.dataset.questionId,answer_title:c,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(d,u)}checkCanAddAnswer(e){const{e:t,target:s}=e,n=s.closest(EditQuestion.selectors.elQuestionAnswerTitleNewInput);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItemAddNew}`);if(!i)return;const o=i.querySelector(`${EditQuestion.selectors.elBtnAddAnswer}`);if(!o)return;n.value.trim()?o.classList.add(\"active\"):o.classList.remove(\"active\")}autoUpdateAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elAutoSaveAnswer}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItem}`);clearTimeout(timeoutAutoUpdateAnswer),timeoutAutoUpdateAnswer=setTimeout(()=>{const e=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`),t=e.dataset.questionId,s=this.getDataAnswersConfig(e),o=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`),l=structuredClone(s),r=o.querySelectorAll(`${EditQuestion.selectors.elQuestionAnswerItem}:not(.clone)`),a={};r.forEach((e,t)=>{a[e.dataset.answerId]=t+1}),s.map((t,s)=>{const n=e.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`),i=n.querySelector(`${EditQuestion.selectors.elInputAnswerSetTrue}`),o=n.querySelector(`${EditQuestion.selectors.elQuestionAnswerTitleInput}`);return o&&(t.title=o.value.trim()),i&&(i.checked?t.is_true=\"yes\":t.is_true=\"\"),a[t.question_answer_id]&&(t.order=a[t.question_answer_id]),t}),lpUtils.lpSetLoadingEl(i,1);const c={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;lpToastify.show(t,s)},error:t=>{l.forEach(t=>{const s=e.querySelector(`${EditQuestion.selectors.elQuestionAnswerItem}[data-answer-id=\"${t.question_answer_id}\"]`).querySelector(`${EditQuestion.selectors.elInputAnswerSetTrue}`);return\"yes\"===t.is_true&&(s.checked=!0),t}),lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},u={action:\"update_question_answers_config\",question_id:t,answers:s,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(u,c)},700)}sortAbleQuestionAnswer(e){let t,s=0;e.querySelectorAll(`${EditQuestion.selectors.elAnswersConfig}`).forEach(e=>{new Sortable(e,{handle:\".drag\",animation:150,onEnd:e=>{const n=e.item;s&&(clearTimeout(t),t=setTimeout(()=>{const e=n.querySelector(`${EditQuestion.selectors.elAutoSaveAnswer}`);this.autoUpdateAnswer({e:null,target:e})},1e3))},onMove:e=>{clearTimeout(t)},onUpdate:e=>{s=1}})})}deleteQuestionAnswer(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnDeleteAnswer}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionAnswerItem}`);if(!i)return;const o=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.dataset.questionId,r=i.dataset.answerId;l&&r&&SweetAlert.fire({title:n.dataset.title||\"Are you sure?\",text:n.dataset.content||\"Do you want to delete this answer?\",icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){lpUtils.lpSetLoadingEl(i,1);const e={success:e=>{const{message:t,status:s}=e;if(lpToastify.show(t,s),\"success\"===s){const e=parseInt(i.dataset.answerId);i.remove();const t=this.getDataAnswersConfig(o);if(t){const s=t.filter(t=>parseInt(t.question_answer_id)!==e);this.setDataAnswersConfig(o,s)}}},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(i,0)}},t={action:\"delete_question_answer\",question_id:l,question_answer_id:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(t,e)}})}getDataAnswersConfig(e){const t=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`);if(!t)return null;let s=t.dataset.answers||\"[]\";try{s=JSON.parse(s)}catch(e){s=[]}return s.meta_data||(s.meta_data={}),s}setDataAnswersConfig(e,t){const s=e.querySelector(`${EditQuestion.selectors.elAnswersConfig}`);s&&(t&&\"object\"==typeof t||(t={}),s.dataset.answers=JSON.stringify(t))}fibInsertBlank=e=>{const{e:t,target:s}=e,n=s.closest(EditQuestion.selectors.elBtnFibInsertBlank);if(!n)return;const i=n.dataset.defaultText,o=n.closest(EditQuestion.selectors.elQuestionEditMain),l=o.dataset.questionId,r=n.dataset.messInserted,a=n.dataset.messRequireSelectText,c=`${EditQuestion.selectors.elQuestionFibInput}-${l}`,u=this.randomString();let d;if(!fibSelection)return void lpToastify.show(a,\"error\");{const e=fibSelection.getNode();if(!e)return void lpToastify.show(\"Event insert blank has error, please try again\",\"error\");if(!e.closest(`body[data-id=\"${c}\"]`))return void lpToastify.show(a,\"error\");if(e.classList.contains(`${EditQuestion.selectors.elQuestionFibInput}`))return void lpToastify.show(r,\"error\");d=fibSelection.getContent(),0===d.length&&(d=i);const t=`\u003Cspan class=\"${EditQuestion.selectors.elQuestionFibInput}\" data-id=\"${u}\">${d}\u003C\u002Fspan>`;fibSelection.setContent(t)}const p=this.getDataAnswersConfig(o);p.meta_data=p.meta_data||{},0===Object.keys(p.meta_data).length&&(p.meta_data={}),p.meta_data[u]={id:u,match_case:0,comparison:\"equal\",fill:d,index:1,open:!1},this.setDataAnswersConfig(o,p);const w=o.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`),Q=o.querySelector(`${EditQuestion.selectors.elFibBlankOptionItemClone}`),m=Q.cloneNode(!0),f=w.querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).length,E=m.querySelector(`${EditQuestion.selectors.elFibBlankOptionIndex}`),b=m.querySelector(`${EditQuestion.selectors.elFibOptionTitleInput}`),h=m.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`),g=m.querySelectorAll(`${EditQuestion.selectors.elFibOptionComparisonInput}`);m.dataset.id=u,b.name=`${EditQuestion.selectors.elFibOptionTitleInput}-${u}`,b.value=this.decodeHtml(d),E.textContent=f+1+\".\",h.name=`${EditQuestion.selectors.elFibOptionMatchCaseInput}-${u}`.replace(\u002F\\.\u002Fg,\"\"),g.forEach(e=>{e.name=`${EditQuestion.selectors.elFibOptionComparisonInput}-${u}`.replace(\u002F\\.\u002Fg,\"\"),\"equal\"===e.value&&(e.checked=!0)}),Q.insertAdjacentElement(\"beforebegin\",m),m.classList.remove(\"clone\"),lpUtils.lpShowHideEl(m,1);const A=o.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:A,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})};fibDeleteAllBlanks(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibDeleteAllBlanks}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=this.getDataAnswersConfig(i);SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${o}`);e.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}`).forEach(t=>{e.dom.remove(t,!0)}),l.meta_data={},this.setDataAnswersConfig(i,l);i.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const t=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:t,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})}})}fibClearContent(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibClearAllContent}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=this.getDataAnswersConfig(i);SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){window.tinymce.get(`lp-question-fib-input-${o}`).setContent(\"\"),l.meta_data={},this.setDataAnswersConfig(i,l);i.querySelector(`${EditQuestion.selectors.elFibBlankOptions}`).querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`).forEach(e=>{e.remove()});const e=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(n,1),this.fibSaveContent({e:null,target:e,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(n,0)}})}})}fibDeleteBlank(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elBtnFibOptionDelete}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!i)return;const o=i.dataset.questionId,l=(i.querySelector(`${EditQuestion.selectors.elAnswersConfig}`),this.getDataAnswersConfig(i)),r=n.closest(`${EditQuestion.selectors.elFibBlankOptionItem}`),a=r.dataset.id;SweetAlert.fire({title:n.dataset.title,text:n.dataset.content,icon:\"warning\",showCloseButton:!0,showCancelButton:!0,cancelButtonText:lpData.i18n.cancel,confirmButtonText:lpData.i18n.yes,reverseButtons:!0}).then(e=>{if(e.isConfirmed){const e=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${o}`),t=e.dom.select(`.${EditQuestion.selectors.elQuestionFibInput}[data-id=\"${a}\"]`);t[0]&&e.dom.remove(t[0],!0),r.remove(),l.meta_data=l.meta_data||{},l.meta_data[a]&&delete l.meta_data[a],this.setDataAnswersConfig(i,l);const s=i.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);lpUtils.lpSetLoadingEl(r,1),this.fibSaveContent({e:null,target:s,callBackCompleted:()=>{lpUtils.lpSetLoadingEl(r,0)}})}})}fibOptionTitleInputChange(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elFibOptionTitleInput}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elFibBlankOptionItem}`);if(!i)return;const o=n.closest(`${EditQuestion.selectors.elQuestionEditMain}`);if(!o)return;const l=n.value.trim(),r=i.dataset.id,a=o.dataset.questionId,c=window.tinymce.get(`lp-question-fib-input-${a}`).dom.select(`.lp-question-fib-input[data-id=\"${r}\"]`);c[0]&&(c[0].textContent=l),clearTimeout(timeoutAutoUpdateFib),timeoutAutoUpdateFib=setTimeout(()=>{const e=o.querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`);this.fibSaveContent({e:null,target:e})},700)}fibSaveContent(e){const{e:t,target:s,callBackCompleted:n=null}=e,i=s.closest(`${EditQuestion.selectors.elBtnFibSaveContent}`);if(!i)return;const o=i.closest(`${EditQuestion.selectors.elQuestionEditMain}`),l=o.dataset.questionId,r=this.getDataAnswersConfig(o);if(!r)return;const a=window.tinymce.get(`${EditQuestion.selectors.elQuestionFibInput}-${l}`);r.title=a.getContent();const c=o.querySelectorAll(`${EditQuestion.selectors.elFibBlankOptionItem}:not(.clone)`);c&&c.forEach(e=>{const t=e.dataset.id,s=e.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`),n=e.querySelector(`${EditQuestion.selectors.elFibOptionComparisonInput}:checked`);r.meta_data[t].match_case=s.checked?1:0,r.meta_data[t].comparison=n.value}),n||lpUtils.lpSetLoadingEl(i,1);const u={success:e=>{const{message:t,status:s}=e;if(\"success\"!==s)throw`Error: ${t}`;this.setDataAnswersConfig(o,r),lpToastify.show(t,s)},error:e=>{lpToastify.show(e,\"error\")},completed:()=>{n&&\"function\"==typeof n?n():lpUtils.lpSetLoadingEl(i,0)}},d={action:\"update_question_answers_config\",question_id:l,answers:r,args:{id_url:idUrlHandle}};window.lpAJAXG.fetchAJAX(d,u)}fibShowHideMatchCaseOption(e){const{e:t,target:s}=e,n=s.closest(`${EditQuestion.selectors.elFibOptionMatchCaseInput}`);if(!n)return;const i=n.closest(`${EditQuestion.selectors.elQuestionFibOptionDetail}`),o=i.querySelector(`${EditQuestion.selectors.elFibOptionMatchCaseWrap}`);if(!i||!o)return;n.checked?lpUtils.lpShowHideEl(o,1):lpUtils.lpShowHideEl(o,0);n.closest(`${EditQuestion.selectors.elQuestionEditMain}`).querySelector(`${EditQuestion.selectors.elBtnFibSaveContent}`).click()}randomString(e=10){const t=\"abcdefghijklmnopqrstuvwxyz0123456789\";let s=\"\";for(let n=0;n\u003Ce;n++)s+=t.charAt(Math.floor(36*Math.random()));return s}decodeHtml(e){const t=document.createElement(\"textarea\");return t.innerHTML=e,t.value}}const editQuestion=new EditQuestion;lpUtils.lpOnElementReady(EditQuestion.selectors.elEditQuestionWrap,e=>{const t=EditQuestion.selectors.elQuestionEditMain.replace(\".\",\"\");e.classList.contains(t)&&editQuestion.init()});\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import*as lpUtils from\".\u002F..\u002Futils.js\";import SweetAlert from\"sweetalert2\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";let lp_structure_course,popupSweetAlert=null,lp_is_generating_course_data=!1;const lp_course_ai_setting=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};let selectGutenberg,dispatchGutenberg,editorGutenberg,isLayoutGutenberg=!1;export class GenerateWithOpenai{constructor(){this.init()}static selectors={elBtnGenerateWithAi:\".lp-btn-generate-with-ai\",elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai&&(lpUtils.lpOnElementReady(\"#titlewrap\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),lpUtils.lpOnElementReady(\"#wp-content-media-buttons\",t=>{t.insertAdjacentHTML(\"beforeend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),lpUtils.lpOnElementReady(\"#postimagediv\",t=>{t.querySelector(\".postbox-header\").insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin: 12px 12px 0 12px;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),wp.data&&wp.data.select(\"core\u002Feditor\")&&(isLayoutGutenberg=!0,selectGutenberg=wp.data.select,dispatchGutenberg=wp.data.dispatch,editorGutenberg=selectGutenberg(\"core\u002Feditor\"),lpUtils.lpOnElementReady(\".editor-document-bar\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),lpUtils.lpOnElementReady(\".editor-post-featured-image\",t=>{t.insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),lpUtils.lpOnElementReady(\".editor-post-featured-image\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)})),this.events())}events(){lpUtils.eventHandlers(\"click\",[{selector:GenerateWithOpenai.selectors.elBtnGenerateWithAi,class:this,callBack:this.showPopup.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateData.name},{selector:\".lp-btn-copy\",class:this,callBack:this.copyGeneratedData.name},{selector:\".lp-btn-apply\",class:this,callBack:this.applyGeneratedData.name},{selector:\".lp-btn-ai-apply-image\",class:this,callBack:this.applyImageData.name},{selector:\".lp-btn-close-ai-popup\",callBack:t=>{const{e:e,target:a}=t,s=lpData.i18n.confirm_close_ai;lp_is_generating_course_data?confirm(s)&&SweetAlert.close():SweetAlert.close()}}])}showPopup(t){const{e:e,target:a}=t,s=a.dataset.template||a.closest(\".lp-btn-generate-with-ai\").dataset.template||a.closest(\".lp-generate-data-ai-wrap\").dataset.template||\"\",l=document.querySelector(s);l?SweetAlert.fire({html:l.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{popupSweetAlert=SweetAlert.getPopup(),popupSweetAlert.click();const t=document.querySelector(\"input[name=post_title]\");let e=\"\";if(t)e=t.value;else if(isLayoutGutenberg){const t=document.querySelector(\".editor-post-card-panel__title-name\");t&&(e=t.textContent)}let a=\"\";if(isLayoutGutenberg){a=editorGutenberg.getEditedPostContent().replace(\u002F(\u003C([^>]+)>)\u002Fgi,\"\")}else a=window.tinymce&&window.tinymce.get(\"content\")?window.tinymce.get(\"content\").getContent({format:\"text\"}):document.querySelector(\"#content\").value;const s=popupSweetAlert.querySelector(\"form\"),l=s.querySelector(\"[name=post-title]\");if(l&&(l.value=e,!e)){const t=l.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");t&&lpUtils.lpShowHideEl(t,1)}const n=s.querySelector(\"[name=post-content]\");if(n&&(n.value=a,a.length\u003C2)){const t=n.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");t&&lpUtils.lpShowHideEl(t,1)}const i=popupSweetAlert.querySelector('select[name=\"target_audience\"]');i&&(lp_course_ai_setting?.target_audience&&i.tomselect.setValue(lp_course_ai_setting.target_audience),i.addEventListener(\"change\",t=>{lp_course_ai_setting.target_audience=i.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}));const o=popupSweetAlert.querySelector('select[name=\"tone\"]');o&&(lp_course_ai_setting?.tone&&o.tomselect.setValue(lp_course_ai_setting.tone),o.addEventListener(\"change\",t=>{lp_course_ai_setting.tone=o.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}));const r=popupSweetAlert.querySelector('select[name=\"language\"]');r&&(lp_course_ai_setting?.language&&r.tomselect.setValue(lp_course_ai_setting.language),r.addEventListener(\"change\",t=>{const e=r.tomselect.getValue();lp_course_ai_setting.language=e?[e]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}))}}).then(t=>{t.isDismissed&&lp_is_generating_course_data&&(lp_is_generating_course_data=!1)}):console.error(`Template ${s} not found!`)}showStep(t){const{e:e,target:a}=t;e.preventDefault();const s=a.closest(\".button-actions\"),l=s.closest(GenerateWithOpenai.selectors.elGenerateDataAiWrap);let n=parseInt(s.dataset.step);const i=a.dataset.action;\"next\"===i?n++:\"prev\"===i&&n--,s.dataset.step=n;const o=a.closest(\"form\"),r=o.querySelector(`.step-content[data-step=\"${n}\"]`),p=l.querySelector(`.step-item[data-step=\"${n}\"]`);o.querySelectorAll(\".step-content\").forEach(t=>t.classList.remove(\"active\")),r.classList.add(\"active\"),l.querySelectorAll(\".step-item\").forEach(t=>t.classList.remove(\"active\")),p.classList.add(\"active\");a.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(t=>{t.dataset.stepShow.split(\",\").map(t=>parseInt(t.trim())).includes(n)?lpUtils.lpShowHideEl(t,1):lpUtils.lpShowHideEl(t,0)})}generatePrompt(t){const{e:e,target:a}=t;e.preventDefault(),lpUtils.lpSetLoadingEl(a,!0);const s=a.closest(\"form\");let l=JSON.parse(a.dataset.send);l=lpUtils.mergeDataWithDatForm(s,l);const n={success:t=>{const{message:e,status:a,data:l}=t;if(lpToastify.show(e,a),\"success\"===a){s.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=l;s.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1)}};window.lpAJAXG.fetchAJAX(l,n)}generateData(t){const{e:e,target:a}=t;e.preventDefault(),lpUtils.lpSetLoadingEl(a,!0);const s=a.closest(\"form\");let l=JSON.parse(a.dataset.send);l=lpUtils.mergeDataWithDatForm(s,l);const n=s.querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(n,0);const i={success:t=>{const{message:e,status:a,data:l}=t;if(lp_is_generating_course_data&&lpToastify.show(e,a),\"success\"===a){lp_structure_course=l.lp_structure_course;s.querySelector(\".lp-ai-generated-results\").innerHTML=l.lp_html_preview;s.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1),lpUtils.lpShowHideEl(n,1),lp_is_generating_course_data=!1}};lp_is_generating_course_data=!0,window.lpAJAXG.fetchAJAX(l,i)}applyGeneratedData(t){const{e:e,target:a}=t;e.preventDefault();const s=a.dataset.apply,l=a.dataset.target;if(l)if(isLayoutGutenberg)\"set-wp-editor-content\"===l?dispatchGutenberg(\"core\u002Feditor\").editPost({content:s}):\"set-wp-title\"===l&&dispatchGutenberg(\"core\u002Feditor\").editPost({title:s});else if(\"set-wp-editor-content\"===l)this.setWPEditorContent(s);else if(\"set-wp-title\"===l){const t=document.querySelector(\"input[name=post_title]\");t&&(t.value=s)}popupSweetAlert&&SweetAlert.close()}copyGeneratedData(t){const{e:e,target:a}=t;e.preventDefault();const s=a.dataset.copy;if(navigator.clipboard)navigator.clipboard.writeText(s).then(()=>{lpToastify.show(\"Copied to clipboard!\",\"success\")}).catch(t=>{lpToastify.show(\"Failed to copy text: \"+t,\"error\")});else{const t=document.createElement(\"textarea\");t.value=s,t.style.position=\"fixed\",t.style.left=\"-9999px\",document.body.appendChild(t),t.select();try{const t=document.execCommand(\"copy\");lpToastify.show(t?\"Copied to clipboard!\":\"Failed to copy text\",t?\"success\":\"error\")}catch(t){lpToastify.show(\"Failed to copy text: \"+t,\"error\")}document.body.removeChild(t)}}setWPEditorContent(t){window.tinymce.get(\"content\").setContent(t)}applyImageData(t){const{e:e,target:a}=t;let s=JSON.parse(a.dataset.send);s=lpUtils.mergeDataWithDatForm(a.closest(\"form\"),s),lpUtils.lpSetLoadingEl(a,!0);const l={success:t=>{const{message:e,status:a,data:s}=t;if(lpToastify.show(e,a),\"success\"===a){if(isLayoutGutenberg)dispatchGutenberg(\"core\u002Feditor\").editPost({featured_media:s.attachment_id});else{document.querySelector(\"#postimagediv .inside\").outerHTML=s.html_image}popupSweetAlert&&SweetAlert.close()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1)}};window.lpAJAXG.fetchAJAX(s,l)}}\n\\ No newline at end of file\n+import*as lpUtils from\".\u002F..\u002Futils.js\";import SweetAlert from\"sweetalert2\";import*as lpToastify from\"lpAssetsJsPath\u002FlpToastify.js\";let lp_structure_course,popupSweetAlert=null,lp_is_generating_course_data=!1;const lp_course_ai_setting=JSON.parse(localStorage.getItem(\"lp_course_ai_setting\"))||{};let selectGutenberg,dispatchGutenberg,editorGutenberg,isLayoutGutenberg=!1;export class GenerateWithOpenai{constructor(t={}){this.options={autoInsertButtons:!0,isCourseBuilder:!1,titleInputSelector:\"input[name=post_title]\",courseBuilderTitleInputSelector:\"input[name=course_title]\",editorIdClassic:\"content\",editorIdCourseBuilder:\"course_description_editor\",...t},this.init()}static selectors={elBtnGenerateWithAi:\".lp-btn-generate-with-ai\",elGenerateDataAiWrap:\".lp-generate-data-ai-wrap\"};init(){lpData?.enable_open_ai&&(this.options.autoInsertButtons&&(lpUtils.lpOnElementReady(\"#titlewrap\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),lpUtils.lpOnElementReady(\"#wp-content-media-buttons\",t=>{t.insertAdjacentHTML(\"beforeend\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>')}),lpUtils.lpOnElementReady(\"#postimagediv\",t=>{t.querySelector(\".postbox-header\").insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\\n\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\u003C\u002Fbutton>`)}),wp.data&&wp.data.select(\"core\u002Feditor\")&&(isLayoutGutenberg=!0,selectGutenberg=wp.data.select,dispatchGutenberg=wp.data.dispatch,editorGutenberg=selectGutenberg(\"core\u002Feditor\"),lpUtils.lpOnElementReady(\".editor-document-bar\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"margin-left: 5px\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-title-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}),lpUtils.lpOnElementReady(\".editor-post-featured-image\",t=>{t.insertAdjacentHTML(\"beforebegin\",'\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-description-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>')}),lpUtils.lpOnElementReady(\".editor-post-featured-image\",t=>{t.insertAdjacentHTML(\"afterend\",`\u003Cbutton type=\"button\"\\n\\t\\t\\t\\t\\t\\tstyle=\"padding: 5px 10px; justify-content: center;\"\\n\\t\\t\\t\\t\\t\\tclass=\"lp-btn-generate-with-ai\"\\n\\t\\t\\t\\t\\t\\tdata-template=\"#lp-tmpl-edit-image-ai\">\\n\\t\\t\\t\\t\\t\\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\\n\\t\\t\\t\\t\\t\u003C\u002Fbutton>`)}))),this.events())}getTitleInputSelector(){return this.options.isCourseBuilder?this.options.courseBuilderTitleInputSelector:this.options.titleInputSelector}getEditorId(){return this.options.isCourseBuilder?this.options.editorIdCourseBuilder:this.options.editorIdClassic}setCourseBuilderPostId(t){if(!this.options.isCourseBuilder||!t)return;const e=t.querySelector('[name=\"post-id\"]');if(!e)return;const a=document.querySelector(\".cb-section__course-edit[data-course-id]\"),s=a?.dataset?.courseId||\"\";s&&(e.value=s)}extractImageSourceFromHtml(t){if(!t)return\"\";const e=document.createElement(\"div\");return e.innerHTML=t,e.querySelector(\"img\")?.getAttribute(\"src\")||\"\"}applyCourseBuilderFeaturedImage(t,e){return!(!t||!e)&&(document.dispatchEvent(new CustomEvent(\"lp-course-builder\u002Fai-featured-image-applied\",{detail:{attachmentId:t,imageSrc:e}})),!0)}events(){lpUtils.eventHandlers(\"click\",[{selector:GenerateWithOpenai.selectors.elBtnGenerateWithAi,class:this,callBack:this.showPopup.name},{selector:\".lp-btn-step\",class:this,callBack:this.showStep.name},{selector:\".lp-btn-generate-prompt\",class:this,callBack:this.generatePrompt.name},{selector:\".lp-btn-call-open-ai\",class:this,callBack:this.generateData.name},{selector:\".lp-btn-copy\",class:this,callBack:this.copyGeneratedData.name},{selector:\".lp-btn-apply\",class:this,callBack:this.applyGeneratedData.name},{selector:\".lp-btn-ai-apply-image\",class:this,callBack:this.applyImageData.name},{selector:\".lp-btn-close-ai-popup\",callBack:t=>{const{e:e,target:a}=t,s=lpData.i18n.confirm_close_ai;lp_is_generating_course_data?confirm(s)&&SweetAlert.close():SweetAlert.close()}}])}showPopup(t){const{e:e,target:a}=t,s=a.dataset.template||a.closest(\".lp-btn-generate-with-ai\").dataset.template||a.closest(\".lp-generate-data-ai-wrap\").dataset.template||\"\",i=document.querySelector(s);i?SweetAlert.fire({html:i.innerHTML,width:\"60%\",showCloseButton:!1,showConfirmButton:!1,allowOutsideClick:!1,allowEscapeKey:!1,didOpen:()=>{popupSweetAlert=SweetAlert.getPopup(),popupSweetAlert.click();const t=document.querySelector(this.getTitleInputSelector());let e=\"\";if(t)e=t.value;else if(isLayoutGutenberg){const t=document.querySelector(\".editor-post-card-panel__title-name\");t&&(e=t.textContent)}let a=\"\";if(isLayoutGutenberg){a=editorGutenberg.getEditedPostContent().replace(\u002F(\u003C([^>]+)>)\u002Fgi,\"\")}else{const t=this.getEditorId();if(window.tinymce&&window.tinymce.get(t))a=window.tinymce.get(t).getContent({format:\"text\"});else{const e=document.querySelector(`#${t}`);a=e?e.value:\"\"}}const s=popupSweetAlert.querySelector(\"form\");this.setCourseBuilderPostId(s);const i=s.querySelector(\"[name=post-title]\");if(i&&(i.value=e,!e)){const t=i.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");t&&lpUtils.lpShowHideEl(t,1)}const l=s.querySelector(\"[name=post-content]\");if(l&&(l.value=a,a.length\u003C2)){const t=l.closest(\".form-group\").querySelector(\".lp-ai-warning-refer\");t&&lpUtils.lpShowHideEl(t,1)}const n=popupSweetAlert.querySelector('select[name=\"target_audience\"]');n&&(lp_course_ai_setting?.target_audience&&n.tomselect.setValue(lp_course_ai_setting.target_audience),n.addEventListener(\"change\",t=>{lp_course_ai_setting.target_audience=n.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}));const o=popupSweetAlert.querySelector('select[name=\"tone\"]');o&&(lp_course_ai_setting?.tone&&o.tomselect.setValue(lp_course_ai_setting.tone),o.addEventListener(\"change\",t=>{lp_course_ai_setting.tone=o.tomselect.getValue(),localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}));const r=popupSweetAlert.querySelector('select[name=\"language\"]');r&&(lp_course_ai_setting?.language&&r.tomselect.setValue(lp_course_ai_setting.language),r.addEventListener(\"change\",t=>{const e=r.tomselect.getValue();lp_course_ai_setting.language=e?[e]:[],localStorage.setItem(\"lp_course_ai_setting\",JSON.stringify(lp_course_ai_setting))}))}}).then(t=>{t.isDismissed&&lp_is_generating_course_data&&(lp_is_generating_course_data=!1)}):console.error(`Template ${s} not found!`)}showStep(t){const{e:e,target:a}=t;e.preventDefault();const s=a.closest(\".button-actions\"),i=s.closest(GenerateWithOpenai.selectors.elGenerateDataAiWrap);let l=parseInt(s.dataset.step);const n=a.dataset.action;\"next\"===n?l++:\"prev\"===n&&l--,s.dataset.step=l;const o=a.closest(\"form\"),r=o.querySelector(`.step-content[data-step=\"${l}\"]`),p=i.querySelector(`.step-item[data-step=\"${l}\"]`);o.querySelectorAll(\".step-content\").forEach(t=>t.classList.remove(\"active\")),r.classList.add(\"active\"),i.querySelectorAll(\".step-item\").forEach(t=>t.classList.remove(\"active\")),p.classList.add(\"active\");a.closest(\"form\").querySelectorAll(\"button[data-step-show]\").forEach(t=>{t.dataset.stepShow.split(\",\").map(t=>parseInt(t.trim())).includes(l)?lpUtils.lpShowHideEl(t,1):lpUtils.lpShowHideEl(t,0)})}generatePrompt(t){const{e:e,target:a}=t;e.preventDefault(),lpUtils.lpSetLoadingEl(a,!0);const s=a.closest(\"form\");let i=JSON.parse(a.dataset.send);i=lpUtils.mergeDataWithDatForm(s,i);const l={success:t=>{const{message:e,status:a,data:i}=t;if(lpToastify.show(e,a),\"success\"===a){s.querySelector(\"textarea[name=lp-openai-prompt-generated-field]\").value=i;s.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1)}};window.lpAJAXG.fetchAJAX(i,l)}generateData(t){const{e:e,target:a}=t;e.preventDefault(),lpUtils.lpSetLoadingEl(a,!0);const s=a.closest(\"form\");let i=JSON.parse(a.dataset.send);i=lpUtils.mergeDataWithDatForm(s,i);const l=s.querySelector(\".lp-btn-step[data-action=prev]\");lpUtils.lpShowHideEl(l,0);const n={success:t=>{const{message:e,status:a,data:i}=t;if(lp_is_generating_course_data&&lpToastify.show(e,a),\"success\"===a){lp_structure_course=i.lp_structure_course;s.querySelector(\".lp-ai-generated-results\").innerHTML=i.lp_html_preview;s.querySelector(\".lp-btn-step[data-action=next]\").click()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1),lpUtils.lpShowHideEl(l,1),lp_is_generating_course_data=!1}};lp_is_generating_course_data=!0,window.lpAJAXG.fetchAJAX(i,n)}applyGeneratedData(t){const{e:e,target:a}=t;e.preventDefault();const s=a.dataset.apply,i=a.dataset.target;if(i)if(isLayoutGutenberg)\"set-wp-editor-content\"===i?dispatchGutenberg(\"core\u002Feditor\").editPost({content:s}):\"set-wp-title\"===i&&dispatchGutenberg(\"core\u002Feditor\").editPost({title:s});else if(\"set-wp-editor-content\"===i)this.setWPEditorContent(s);else if(\"set-wp-title\"===i){const t=document.querySelector(this.getTitleInputSelector());t&&(t.value=s,t.dispatchEvent(new Event(\"input\",{bubbles:!0})))}popupSweetAlert&&SweetAlert.close()}copyGeneratedData(t){const{e:e,target:a}=t;e.preventDefault();const s=a.dataset.copy;if(navigator.clipboard)navigator.clipboard.writeText(s).then(()=>{lpToastify.show(\"Copied to clipboard!\",\"success\")}).catch(t=>{lpToastify.show(\"Failed to copy text: \"+t,\"error\")});else{const t=document.createElement(\"textarea\");t.value=s,t.style.position=\"fixed\",t.style.left=\"-9999px\",document.body.appendChild(t),t.select();try{const t=document.execCommand(\"copy\");lpToastify.show(t?\"Copied to clipboard!\":\"Failed to copy text\",t?\"success\":\"error\")}catch(t){lpToastify.show(\"Failed to copy text: \"+t,\"error\")}document.body.removeChild(t)}}setWPEditorContent(t){const e=this.getEditorId(),a=window.tinymce?.get(e);if(a)return void a.setContent(t);const s=document.querySelector(`#${e}`);s&&(s.value=t,s.dispatchEvent(new Event(\"input\",{bubbles:!0})))}applyImageData(t){const{e:e,target:a}=t;let s=JSON.parse(a.dataset.send);s=lpUtils.mergeDataWithDatForm(a.closest(\"form\"),s),lpUtils.lpSetLoadingEl(a,!0);const i={success:t=>{const{message:e,status:a,data:s}=t;if(lpToastify.show(e,a),\"success\"===a){if(this.options.isCourseBuilder){const t=parseInt(s?.attachment_id||0,10),e=this.extractImageSourceFromHtml(s?.html_image||\"\");if(!this.applyCourseBuilderFeaturedImage(t,e))return void lpToastify.show(\"Failed to apply image to course featured image.\",\"error\")}else if(isLayoutGutenberg)dispatchGutenberg(\"core\u002Feditor\").editPost({featured_media:s.attachment_id});else{document.querySelector(\"#postimagediv .inside\").outerHTML=s.html_image}popupSweetAlert&&SweetAlert.close()}},error:t=>{lpToastify.show(t,\"error\")},completed:()=>{lpUtils.lpSetLoadingEl(a,!1)}};window.lpAJAXG.fetchAJAX(s,i)}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Finit-tom-select.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Finit-tom-select.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fadmin\u002Finit-tom-select.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fadmin\u002Finit-tom-select.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-import{AdminUtilsFunctions,Api,Utils}from\".\u002Futils-admin.js\";const handleResponse=(e,t,n,a,s={},i)=>{if(!(e&&t&&n&&a&&i))return;const l=e=>{if(!n.keyGetValue?.text||!n.keyGetValue.key_render)return;let t=n.keyGetValue.text;for(const[a,s]of Object.entries(n.keyGetValue.key_render))t=t.replace(new RegExp(`{{${s}}}`,\"g\"),e[s]);return t},r=t.dataset?.saved?JSON.parse(t.dataset.saved):0;let o=[];e.data[n.dataType].length>0&&(o=e.data[n.dataType].map(e=>({value:e[n.keyGetValue.value],text:l(e)})));const c={items:r,render:{item:(e,t)=>`\u003Cli data-id=\"${e.value}\">\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class=\"item\">${e.text}\u003C\u002Fdiv>\\n\\t\\t\\t\\t\\t\u003C\u002Fli>`},onChange:e=>{e.length\u003C1&&(t.value=\"\")},...s,options:o};return null!=t.tomSelectInstance?(t.tomSelectInstance.addOptions(o),o):(t.tomSelectInstance=AdminUtilsFunctions.buildTomSelect(t,c,a,{},i),o)},initTomSelectWithOption=(e,t={})=>e?null!=e.tomSelectInstance?null:void(e.tomSelectInstance=AdminUtilsFunctions.buildTomSelect(e,t)):null,initTomSelect=(e,t={},n={})=>{if(!e)return;if(e.classList.contains(\"loaded\"))return;e.classList.add(\"loaded\");const a=e.dataset?.saved?JSON.parse(e.dataset.saved):0,s=e?.dataset?.struct?JSON.parse(e.dataset.struct):\"\";if(!s)return void initTomSelectWithOption(e);const i=(e,t)=>{const n=t.parentElement;return n.tagName.toLowerCase()===e?n:\"html\"!==n.tagName.toLowerCase()&&i(e,n)},l=i(\"form\",e);if(l){const t=l.querySelector('input[name=\"'+e.getAttribute(\"name\")+'\"]');t&&t.remove()}const r=s.dataSendApi??\"\",o=s.urlApi??\"\",c={...s.setting,...t};if(!o)return void initTomSelectWithOption(e,c);const d=(e=\"\",t,n)=>{const s=o,i={current_ids:a,...r,...t};i.search=e;const l={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(i)};Utils.lpFetchAPI(s,l,n)},u={success:t=>{handleResponse(t,e,s,d,c,u)}};let m=[];\"object\"==typeof a&&(m=Object.entries(a).map(([e,t])=>({key:e,value:t}))),r?.id_not_in&&(m=[...m,...r.id_not_in]),n.id_not_in=m.join(\",\"),d(\"\",n,u)},searchUserOnListPost=()=>{if(\"0\"===lpDataAdmin.show_search_author_field)return;const e=document.querySelector(\"#posts-filter\");if(!e)return;let t=e.querySelector(\".search-box\");if(t||(e.insertAdjacentHTML(\"afterbegin\",lpDataAdmin.show_search_author_field),t=e.querySelector(\".search-box\")),!t)return;if(t.querySelector(\"select#author\"))return;(()=>{let n=\"\";const a=lpDataAdmin.urlParams.author;a&&(n=JSON.stringify(a));const s={urlApi:Api.admin.apiSearchUsers,dataType:\"users\",keyGetValue:{value:\"ID\",text:\"{{display_name}}(#{{ID}}) - {{user_email}}\",key_render:{display_name:\"display_name\",user_email:\"user_email\",ID:\"ID\"}},setting:{placeholder:\"Choose user\"}},i=`\u003Cselect data-struct='${JSON.stringify(s)}' style='display:none;' data-saved='${n}'\\n\\t\\t\\t\\t\\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">\u003C\u002Fselect>`,l=t.querySelector('input[name=\"s\"]');l&&l.insertAdjacentHTML(\"afterend\",i);const r=e.querySelector('input[name=\"author\"]');r&&r.remove()})()},initElsTomSelect=()=>{const e=document.querySelectorAll(\"select.lp-tom-select:not(.loaded)\");e.length&&e.forEach(e=>{e.closest(\".widget-liquid-left\")||initTomSelect(e)})};export{initTomSelect,searchUserOnListPost,initElsTomSelect};\n\\ No newline at end of file\n+import{AdminUtilsFunctions,Api,Utils}from\".\u002Futils-admin.js\";const handleResponse=(e,t,n,a,s={},i)=>{if(!(e&&t&&n&&a&&i))return;const l=e=>{if(!n.keyGetValue?.text||!n.keyGetValue.key_render)return;let t=n.keyGetValue.text;for(const[a,s]of Object.entries(n.keyGetValue.key_render))t=t.replace(new RegExp(`{{${s}}}`,\"g\"),e[s]);return t},r=t.dataset?.saved?JSON.parse(t.dataset.saved):0;let o=[];e.data[n.dataType].length>0&&(o=e.data[n.dataType].map(e=>({value:e[n.keyGetValue.value],text:l(e)})));const c={items:r,render:{item:(e,t)=>`\u003Cli data-id=\"${e.value}\">\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class=\"item\">${e.text}\u003C\u002Fdiv>\\n\\t\\t\\t\\t\\t\u003C\u002Fli>`},onChange:e=>{e.length\u003C1&&(t.value=\"\")},...s,options:o};return null!=t.tomSelectInstance?(t.tomSelectInstance.addOptions(o),o):(t.tomSelectInstance=AdminUtilsFunctions.buildTomSelect(t,c,a,{},i),o)},initTomSelectWithOption=(e,t={})=>e?null!=e.tomSelectInstance?null:void(e.tomSelectInstance=AdminUtilsFunctions.buildTomSelect(e,t)):null,initTomSelect=(e,t={},n={})=>{if(!e)return;if(e.classList.contains(\"loaded\"))return;e.classList.add(\"loaded\");const a=e.dataset?.saved?JSON.parse(e.dataset.saved):0,s=e?.dataset?.struct?JSON.parse(e.dataset.struct):\"\";if(!s)return void initTomSelectWithOption(e);const i=(e,t)=>{const n=t.parentElement;return n.tagName.toLowerCase()===e?n:\"html\"!==n.tagName.toLowerCase()&&i(e,n)},l=i(\"form\",e);if(l){const t=l.querySelector('input[name=\"'+e.getAttribute(\"name\")+'\"]');t&&t.remove()}const r=s.dataSendApi??\"\",o=s.urlApi??\"\",c={...s.setting,...t};if(!o)return void initTomSelectWithOption(e,c);const d=(e=\"\",t,n)=>{const s=o,i={current_ids:a,...r,...t};i.search=e;const l={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpData.nonce},method:\"POST\",body:JSON.stringify(i)};Utils.lpFetchAPI(s,l,n)},u={success:t=>{handleResponse(t,e,s,d,c,u)}};let m=[];\"object\"==typeof a&&(m=Object.entries(a).map(([e,t])=>({key:e,value:t}))),r?.id_not_in&&(m=[...m,...r.id_not_in]),n.id_not_in=m.join(\",\"),d(\"\",n,u)},searchUserOnListPost=()=>{if(\"0\"===lpData.show_search_author_field)return;const e=document.querySelector(\"#posts-filter\");if(!e)return;let t=e.querySelector(\".search-box\");if(t||(e.insertAdjacentHTML(\"afterbegin\",lpData.show_search_author_field),t=e.querySelector(\".search-box\")),!t)return;if(t.querySelector(\"select#author\"))return;(()=>{let n=\"\";const a=lpData.urlParams.author;a&&(n=JSON.stringify(a));const s={urlApi:Api.admin.apiSearchUsers,dataType:\"users\",keyGetValue:{value:\"ID\",text:\"{{display_name}}(#{{ID}}) - {{user_email}}\",key_render:{display_name:\"display_name\",user_email:\"user_email\",ID:\"ID\"}},setting:{placeholder:\"Choose user\"}},i=`\u003Cselect data-struct='${JSON.stringify(s)}' style='display:none;' data-saved='${n}'\\n\\t\\t\\t\\t\\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">\u003C\u002Fselect>`,l=t.querySelector('input[name=\"s\"]');l&&l.insertAdjacentHTML(\"afterend\",i);const r=e.querySelector('input[name=\"author\"]');r&&r.remove()})()},initElsTomSelect=()=>{const e=document.querySelectorAll(\"select.lp-tom-select:not(.loaded)\");e.length&&e.forEach(e=>{e.closest(\".widget-liquid-left\")||initTomSelect(e)})};export{initTomSelect,searchUserOnListPost,initElsTomSelect};\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Faddons.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Faddons.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Faddons.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Faddons.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -121,11 +121,11 @@\n   \\***************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Fapi *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n-\u002F**\r\n- * Script handle admin notices.\r\n- *\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Script handle admin notices.\n+ *\n+ * @since 4.1.7.3.2\n+ * @version 1.0.1\n  *\u002F\n \n let elAddonsPage;\n@@ -287,47 +287,45 @@\n   }\n \n   \u002F\u002F Events actions: activate, deactivate.\n-  \u002F*if ( el.classList.contains( 'lp-toggle-switch-label' ) ) {\r\n-  \t\u002F\u002Fe.preventDefault();\r\n-  \n-  \tconst elAddonItem = el.closest( '.lp-addon-item' );\r\n-  \tconst idLabel = el.getAttribute( 'for' );\r\n-  \tconst elInput = document.querySelector( `#${ idLabel }` );\r\n-  \tconst action = elInput.getAttribute( 'data-action' );\r\n-  \tconst addon = dataAddons[ elAddonItem.dataset.slug ];\r\n-  \tconst addonSlug = addon.slug;\r\n-  \tconst parent = el.closest( '.lp-toggle-switch' );\r\n-  \tconst label = parent.querySelector( `label[for=${ idLabel }]` );\r\n-  \tconst dashicons = parent.querySelector( '.dashicons-update' );\r\n-  \tdashicons.style.display = 'inline-block';\r\n-  \tlabel.style.display = 'none';\r\n-  \tconst data = { action, addon };\r\n-  \taddonsAction( data, function( status, message, data ) {\r\n-  \t\tconst elAddon = document.querySelector( `#${ addonSlug }` );\r\n-  \t\tif ( elAddon ) {\r\n-  \t\t\tconst parent = elAddon.closest( '.lp-toggle-switch' );\r\n-  \t\t\tif ( parent ) {\r\n-  \t\t\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\r\n-  \t\t\t\tdashicons.style.display = 'none';\r\n-  \t\t\t\tif ( action === 'deactivate' ) {\r\n-  \t\t\t\t\telAddon.setAttribute( 'data-action', 'activate' );\r\n-  \t\t\t\t} else if ( action === 'activate' ) {\r\n-  \t\t\t\t\telAddon.setAttribute( 'data-action', 'deactivate' );\r\n-  \t\t\t\t}\r\n-  \t\t\t\tconst label = parent.querySelector( `label[for=${ addonSlug }]` );\r\n-  \t\t\t\tlabel.style.display = 'inline-flex';\r\n-  \t\t\t}\r\n-  \t\t}\r\n-  \n-  \t\tif ( status === 'success' ) {\r\n-  \t\t\tif ( action === 'deactivate' ) {\r\n-  \t\t\t\telAddonItem.classList.remove( 'activated' );\r\n-  \t\t\t}\r\n-  \t\t\tif ( action === 'activate' ) {\r\n-  \t\t\t\telAddonItem.classList.add( 'activated' );\r\n-  \t\t\t}\r\n-  \t\t}\r\n-  \t} );\r\n+  \u002F*if ( el.classList.contains( 'lp-toggle-switch-label' ) ) {\n+  \t\u002F\u002Fe.preventDefault();\n+  \t\tconst elAddonItem = el.closest( '.lp-addon-item' );\n+  \tconst idLabel = el.getAttribute( 'for' );\n+  \tconst elInput = document.querySelector( `#${ idLabel }` );\n+  \tconst action = elInput.getAttribute( 'data-action' );\n+  \tconst addon = dataAddons[ elAddonItem.dataset.slug ];\n+  \tconst addonSlug = addon.slug;\n+  \tconst parent = el.closest( '.lp-toggle-switch' );\n+  \tconst label = parent.querySelector( `label[for=${ idLabel }]` );\n+  \tconst dashicons = parent.querySelector( '.dashicons-update' );\n+  \tdashicons.style.display = 'inline-block';\n+  \tlabel.style.display = 'none';\n+  \tconst data = { action, addon };\n+  \taddonsAction( data, function( status, message, data ) {\n+  \t\tconst elAddon = document.querySelector( `#${ addonSlug }` );\n+  \t\tif ( elAddon ) {\n+  \t\t\tconst parent = elAddon.closest( '.lp-toggle-switch' );\n+  \t\t\tif ( parent ) {\n+  \t\t\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\n+  \t\t\t\tdashicons.style.display = 'none';\n+  \t\t\t\tif ( action === 'deactivate' ) {\n+  \t\t\t\t\telAddon.setAttribute( 'data-action', 'activate' );\n+  \t\t\t\t} else if ( action === 'activate' ) {\n+  \t\t\t\t\telAddon.setAttribute( 'data-action', 'deactivate' );\n+  \t\t\t\t}\n+  \t\t\t\tconst label = parent.querySelector( `label[for=${ addonSlug }]` );\n+  \t\t\t\tlabel.style.display = 'inline-flex';\n+  \t\t\t}\n+  \t\t}\n+  \t\t\tif ( status === 'success' ) {\n+  \t\t\tif ( action === 'deactivate' ) {\n+  \t\t\t\telAddonItem.classList.remove( 'activated' );\n+  \t\t\t}\n+  \t\t\tif ( action === 'activate' ) {\n+  \t\t\t\telAddonItem.classList.add( 'activated' );\n+  \t\t\t}\n+  \t\t}\n+  \t} );\n   }*\u002F\n \n   \u002F\u002F Events actions: install, update, delete.\n@@ -381,7 +379,7 @@\n           elAddonItem.classList.add('installed', 'activated');\n           elAddonItem.classList.remove('not_installed');\n           elItemPurchase.style.display = 'none';\n-          \u002F*elToggleSwitchInput.setAttribute( 'checked', 'checked' );\r\n+          \u002F*elToggleSwitchInput.setAttribute( 'checked', 'checked' );\n           elToggleSwitchInput.setAttribute( 'data-action', 'deactivate' );*\u002F\n           const elNavInstalled = document.querySelector('.nav-tab[data-tab=installed] span');\n           elNavInstalled.textContent = parseInt(elNavInstalled.textContent) + 1;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -17,15 +17,15 @@\n \u002F* harmony import *\u002F var _utils_admin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Futils-admin.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\");\n \n \n-\u002F**\r\n- * Handle data response from API for tom-select\r\n- *\r\n- * @param {*} response\r\n- * @param {*} tomSelectEl\r\n- * @param     dataStruct\r\n- * @param     fetchAPI\r\n- * @param     customOptions\r\n- * @param {*} callBack\r\n+\u002F**\n+ * Handle data response from API for tom-select\n+ *\n+ * @param {*} response\n+ * @param {*} tomSelectEl\n+ * @param     dataStruct\n+ * @param     fetchAPI\n+ * @param     customOptions\n+ * @param {*} callBack\n  *\u002F\n const handleResponse = (response, tomSelectEl, dataStruct, fetchAPI, customOptions = {}, callBack) => {\n   if (!response || !tomSelectEl || !dataStruct || !fetchAPI || !callBack) {\n@@ -147,7 +147,7 @@\n     const params = {\n       headers: {\n         'Content-Type': 'application\u002Fjson',\n-        'X-WP-Nonce': lpDataAdmin.nonce\n+        'X-WP-Nonce': lpData.nonce\n       },\n       method: 'POST',\n       body: JSON.stringify(dataSend)\n@@ -178,7 +178,7 @@\n \n \u002F\u002F Init Tom-select user in admin\n const searchUserOnListPost = () => {\n-  if (lpDataAdmin.show_search_author_field === '0') {\n+  if (lpData.show_search_author_field === '0') {\n     return;\n   }\n   const elPostFilter = document.querySelector('#posts-filter');\n@@ -187,7 +187,7 @@\n   }\n   let elSearchPost = elPostFilter.querySelector('.search-box');\n   if (!elSearchPost) {\n-    elPostFilter.insertAdjacentHTML('afterbegin', lpDataAdmin.show_search_author_field);\n+    elPostFilter.insertAdjacentHTML('afterbegin', lpData.show_search_author_field);\n     elSearchPost = elPostFilter.querySelector('.search-box');\n   }\n   if (!elSearchPost) {\n@@ -199,7 +199,7 @@\n   }\n   const createSelectUserHtml = () => {\n     let defaultId = '';\n-    const authorIdFilter = lpDataAdmin.urlParams.author;\n+    const authorIdFilter = lpData.urlParams.author;\n     if (authorIdFilter) {\n       defaultId = JSON.stringify(authorIdFilter);\n     }\n@@ -266,11 +266,11 @@\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var tom_select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! tom-select *\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js\");\n \u002F* harmony import *\u002F var _api_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! ..\u002Fapi.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n-\u002F**\r\n- * Library run on Admin\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Library run on Admin\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.1\n  *\u002F\n \n \n@@ -312,24 +312,24 @@\n       ...options\n     };\n     const items_selected = options.options;\n-    \u002F*if ( options?.options?.length > 20 ) {\r\n-    \tconst chunkSize = 20;\r\n-    \tconst length = options.options.length;\r\n-    \tlet i = 0;\r\n-    \tconst chunkedOptions = { ...options };\r\n-    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\r\n-    \t\t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\r\n-    \ti += chunkSize;\r\n-    \t\t\tconst interval = setInterval( () => {\r\n-    \t\tif ( i > ( length - 1 ) ) {\r\n-    \t\t\tclearInterval( interval );\r\n-    \t\t}\r\n-    \t\t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\r\n-    \t\ti += chunkSize;\r\n-    \t\ttomSelect.addOptions( optionsSlice );\r\n-    \t\ttomSelect.setValue( options.items );\r\n-    \t}, 200 );\r\n-    \t\t\treturn tomSelect;\r\n+    \u002F*if ( options?.options?.length > 20 ) {\n+    \tconst chunkSize = 20;\n+    \tconst length = options.options.length;\n+    \tlet i = 0;\n+    \tconst chunkedOptions = { ...options };\n+    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\n+    \t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\n+    \ti += chunkSize;\n+    \t\tconst interval = setInterval( () => {\n+    \t\tif ( i > ( length - 1 ) ) {\n+    \t\t\tclearInterval( interval );\n+    \t\t}\n+    \t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\n+    \t\ti += chunkSize;\n+    \t\ttomSelect.addOptions( optionsSlice );\n+    \t\ttomSelect.setValue( options.items );\n+    \t}, 200 );\n+    \t\treturn tomSelect;\n     }*\u002F\n \n     return new tom_select__WEBPACK_IMPORTED_MODULE_1__[\"default\"](elTomSelect, options);\n@@ -383,11 +383,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -446,14 +446,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -484,10 +484,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -505,12 +505,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -523,11 +523,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -548,12 +548,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -696,15 +696,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -6996,10 +6996,10 @@\n \n \n (function ($) {\n-  \u002F**\r\n-   * Callback event for button to creating pages inside error message.\r\n-   *\r\n-   * @param {Event} e\r\n+  \u002F**\n+   * Callback event for button to creating pages inside error message.\n+   *\n+   * @param {Event} e\n    *\u002F\n \n   const createPages = function createPages(e) {\n@@ -7140,22 +7140,22 @@\n     }\n \n     \u002F\u002F Show\u002Fhide meta-box field with type checkbox\n-    \u002F*$( 'input' ).on( 'click', function( e ) {\r\n-    \tconst el = $( e.target );\r\n-    \tif ( ! el.length ) {\r\n-    \t\treturn;\r\n-    \t}\r\n-    \t\t\tconst id = el.attr( 'id' );\r\n-    \tif ( ! id ) {\r\n-    \t\treturn;\r\n-    \t}\r\n-    \t\t\tconst classHide = id.replace( 'learn_press_', '' );\r\n-    \tconst elHide = $( `.show_if_${ classHide }` );\r\n-    \t\t\tif ( el.is( ':checked' ) ) {\r\n-    \t\telHide.show();\r\n-    \t} else {\r\n-    \t\telHide.hide();\r\n-    \t}\r\n+    \u002F*$( 'input' ).on( 'click', function( e ) {\n+    \tconst el = $( e.target );\n+    \tif ( ! el.length ) {\n+    \t\treturn;\n+    \t}\n+    \t\tconst id = el.attr( 'id' );\n+    \tif ( ! id ) {\n+    \t\treturn;\n+    \t}\n+    \t\tconst classHide = id.replace( 'learn_press_', '' );\n+    \tconst elHide = $( `.show_if_${ classHide }` );\n+    \t\tif ( el.is( ':checked' ) ) {\n+    \t\telHide.show();\n+    \t} else {\n+    \t\telHide.hide();\n+    \t}\n     } );*\u002F\n   };\n   $(document).ready(onReady);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{\"use strict\";const e=(e,t={},s={})=>{\"function\"==typeof s.before&&s.before(),fetch(e,{method:\"GET\",...t}).then(e=>e.json()).then(e=>{\"function\"==typeof s.success&&s.success(e)}).catch(e=>{\"function\"==typeof s.error&&s.error(e)}).finally(()=>{\"function\"==typeof s.completed&&s.completed()})},t=(e,t)=>{const s=document.querySelector(e);if(s)return void t(s);const i=new MutationObserver((s,i)=>{const n=document.querySelector(e);n&&(i.disconnect(),t(n))});i.observe(document.documentElement,{childList:!0,subtree:!0})};function s(e,t){e.split(\u002F\\s+\u002F).forEach(e=>{t(e)})}class i{constructor(){this._events={}}on(e,t){s(e,e=>{const s=this._events[e]||[];s.push(t),this._events[e]=s})}off(e,t){var i=arguments.length;0!==i?s(e,e=>{if(1===i)return void delete this._events[e];const s=this._events[e];void 0!==s&&(s.splice(s.indexOf(t),1),this._events[e]=s)}):this._events={}}trigger(e,...t){var i=this;s(e,e=>{const s=i._events[e];void 0!==s&&s.forEach(e=>{e.apply(i,t)})})}}const n=e=>(e=e.filter(Boolean)).length\u003C2?e[0]||\"\":1==c(e)?\"[\"+e.join(\"\")+\"]\":\"(?:\"+e.join(\"|\")+\")\",o=e=>{if(!a(e))return e.join(\"\");let t=\"\",s=0;const i=()=>{s>1&&(t+=\"{\"+s+\"}\")};return e.forEach((n,o)=>{n!==e[o-1]?(i(),t+=n,s=1):s++}),i(),t},r=e=>{let t=Array.from(e);return n(t)},a=e=>new Set(e).size!==e.length,l=e=>(e+\"\").replace(\u002F([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])\u002Fgu,\"\\\\$1\"),c=e=>e.reduce((e,t)=>Math.max(e,d(t)),0),d=e=>Array.from(e).length,u=e=>{if(1===e.length)return[[e]];let t=[];const s=e.substring(1);return u(s).forEach(function(s){let i=s.slice(0);i[0]=e.charAt(0)+i[0],t.push(i),i=s.slice(0),i.unshift(e.charAt(0)),t.push(i)}),t},p=[[0,65535]];let h,g;const f={},m={\"\u002F\":\"⁄∕\",0:\"߀\",a:\"ⱥɐɑ\",aa:\"ꜳ\",ae:\"æǽǣ\",ao:\"ꜵ\",au:\"ꜷ\",av:\"ꜹꜻ\",ay:\"ꜽ\",b:\"ƀɓƃ\",c:\"ꜿƈȼↄ\",d:\"đɗɖᴅƌꮷԁɦ\",e:\"ɛǝᴇɇ\",f:\"ꝼƒ\",g:\"ǥɠꞡᵹꝿɢ\",h:\"ħⱨⱶɥ\",i:\"ɨı\",j:\"ɉȷ\",k:\"ƙⱪꝁꝃꝅꞣ\",l:\"łƚɫⱡꝉꝇꞁɭ\",m:\"ɱɯϻ\",n:\"ꞥƞɲꞑᴎлԉ\",o:\"øǿɔɵꝋꝍᴑ\",oe:\"œ\",oi:\"ƣ\",oo:\"ꝏ\",ou:\"ȣ\",p:\"ƥᵽꝑꝓꝕρ\",q:\"ꝗꝙɋ\",r:\"ɍɽꝛꞧꞃ\",s:\"ßȿꞩꞅʂ\",t:\"ŧƭʈⱦꞇ\",th:\"þ\",tz:\"ꜩ\",u:\"ʉ\",v:\"ʋꝟʌ\",vy:\"ꝡ\",w:\"ⱳ\",y:\"ƴɏỿ\",z:\"ƶȥɀⱬꝣ\",hv:\"ƕ\"};for(let e in m){let t=m[e]||\"\";for(let s=0;s\u003Ct.length;s++){let i=t.substring(s,s+1);f[i]=e}}const v=new RegExp(Object.keys(f).join(\"|\")+\"|[̀-ͯ·ʾʼ]\",\"gu\"),y=(e,t=\"NFKD\")=>e.normalize(t),b=e=>Array.from(e).reduce((e,t)=>e+O(t),\"\"),O=e=>(e=y(e).toLowerCase().replace(v,e=>f[e]||\"\"),y(e,\"NFC\")),w=e=>{const t=(e=>{const t={},s=(e,s)=>{const i=t[e]||new Set,n=new RegExp(\"^\"+r(i)+\"$\",\"iu\");s.match(n)||(i.add(l(s)),t[e]=i)};for(let t of function*(e){for(const[t,s]of e)for(let e=t;e\u003C=s;e++){let t=String.fromCharCode(e),s=b(t);s!=t.toLowerCase()&&(s.length>3||0!=s.length&&(yield{folded:s,composed:t,code_point:e}))}}(e))s(t.folded,t.folded),s(t.folded,t.composed);return t})(e),s={};let i=[];for(let e in t){let n=t[e];n&&(s[e]=r(n)),e.length>1&&i.push(l(e))}i.sort((e,t)=>t.length-e.length);const o=n(i);return g=new RegExp(\"^\"+o,\"u\"),s},_=(e,t=1)=>(t=Math.max(t,e.length-1),n(u(e).map(e=>((e,t=1)=>{let s=0;return e=e.map(e=>(h[e]&&(s+=e.length),h[e]||e)),s>=t?o(e):\"\"})(e,t)))),S=(e,t=!0)=>{let s=e.length>1?1:0;return n(e.map(e=>{let i=[];const n=t?e.length():e.length()-1;for(let t=0;t\u003Cn;t++)i.push(_(e.substrs[t]||\"\",s));return o(i)}))},A=(e,t)=>{for(const s of t){if(s.start!=e.start||s.end!=e.end)continue;if(s.substrs.join(\"\")!==e.substrs.join(\"\"))continue;let t=e.parts;const i=e=>{for(const s of t){if(s.start===e.start&&s.substr===e.substr)return!1;if(1!=e.length&&1!=s.length){if(e.start\u003Cs.start&&e.end>s.start)return!0;if(s.start\u003Ce.start&&s.end>e.start)return!0}}return!1};if(!(s.parts.filter(i).length>0))return!0}return!1};class C{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let s=new C,i=JSON.parse(JSON.stringify(this.parts)),n=i.pop();for(const e of i)s.add(e);let o=t.substr.substring(0,e-n.start),r=o.length;return s.add({start:n.start,end:n.start+r,length:r,substr:o}),s}}const I=(e,t)=>{if(e)return e[t]},x=(e,t)=>{if(e){for(var s,i=t.split(\".\");(s=i.shift())&&(e=e[s]););return e}},k=(e,t,s)=>{var i,n;return e?(e+=\"\",null==t.regex||-1===(n=e.search(t.regex))?0:(i=t.string.length\u002Fe.length,0===n&&(i+=.5),i*s)):0},L=(e,t)=>{var s=e[t];if(\"function\"==typeof s)return s;s&&!Array.isArray(s)&&(e[t]=[s])},E=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)},F=(e,t)=>\"number\"==typeof e&&\"number\"==typeof t?e>t?1:e\u003Ct?-1:0:(e=b(e+\"\").toLowerCase())>(t=b(t+\"\").toLowerCase())?1:t>e?-1:0;class T{items;settings;constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,s){if(!e||!e.length)return[];const i=[],n=e.split(\u002F\\s+\u002F);var o;return s&&(o=new RegExp(\"^(\"+Object.keys(s).map(l).join(\"|\")+\"):(.*)$\")),n.forEach(e=>{let s,n=null,r=null;o&&(s=e.match(o))&&(n=s[1],e=s[2]),e.length>0&&(r=this.settings.diacritics?(e=>{void 0===h&&(h=w(p)),e=b(e);let t=\"\",s=[new C];for(let i=0;i\u003Ce.length;i++){let n=e.substring(i).match(g);const o=e.substring(i,i+1),r=n?n[0]:null;let a=[],l=new Set;for(const e of s){const t=e.last();if(!t||1==t.length||t.end\u003C=i)if(r){const t=r.length;e.add({start:i,end:i+t,length:t,substr:r}),l.add(\"1\")}else e.add({start:i,end:i+1,length:1,substr:o}),l.add(\"2\");else if(r){let s=e.clone(i,t);const n=r.length;s.add({start:i,end:i+n,length:n,substr:r}),a.push(s)}else l.add(\"3\")}if(a.length>0){a=a.sort((e,t)=>e.length()-t.length());for(let e of a)A(e,s)||s.push(e)}else if(i>0&&1==l.size&&!l.has(\"3\")){t+=S(s,!1);let e=new C;const i=s[0];i&&e.add(i.last()),s=[e]}}return t+=S(s,!0),t})(e)||null:l(e),r&&t&&(r=\"\\\\b\"+r)),i.push({string:e,regex:r?new RegExp(r,\"iu\"):null,field:n})}),i}getScoreFunction(e,t){var s=this.prepareSearch(e,t);return this._getScoreFunction(s)}_getScoreFunction(e){const t=e.tokens,s=t.length;if(!s)return function(){return 0};const i=e.options.fields,n=e.weights,o=i.length,r=e.getAttrFn;if(!o)return function(){return 1};const a=1===o?function(e,t){const s=i[0].field;return k(r(t,s),e,n[s]||1)}:function(e,t){var s=0;if(e.field){const i=r(t,e.field);!e.regex&&i?s+=1\u002Fo:s+=k(i,e,1)}else E(n,(i,n)=>{s+=k(r(t,n),e,i)});return s\u002Fo};return 1===s?function(e){return a(t[0],e)}:\"and\"===e.options.conjunction?function(e){var i,n=0;for(let s of t){if((i=a(s,e))\u003C=0)return 0;n+=i}return n\u002Fs}:function(e){var i=0;return E(t,t=>{i+=a(t,e)}),i\u002Fs}}getSortFunction(e,t){var s=this.prepareSearch(e,t);return this._getSortFunction(s)}_getSortFunction(e){var t,s=[];const i=this,n=e.options,o=!e.query&&n.sort_empty?n.sort_empty:n.sort;if(\"function\"==typeof o)return o.bind(this);const r=function(t,s){return\"$score\"===t?s.score:e.getAttrFn(i.items[s.id],t)};if(o)for(let t of o)(e.query||\"$score\"!==t.field)&&s.push(t);if(e.query){t=!0;for(let e of s)if(\"$score\"===e.field){t=!1;break}t&&s.unshift({field:\"$score\",direction:\"desc\"})}else s=s.filter(e=>\"$score\"!==e.field);return s.length?function(e,t){var i,n;for(let o of s)if(n=o.field,i=(\"desc\"===o.direction?-1:1)*F(r(n,e),r(n,t)))return i;return 0}:null}prepareSearch(e,t){const s={};var i=Object.assign({},t);if(L(i,\"sort\"),L(i,\"sort_empty\"),i.fields){L(i,\"fields\");const e=[];i.fields.forEach(t=>{\"string\"==typeof t&&(t={field:t,weight:1}),e.push(t),s[t.field]=\"weight\"in t?t.weight:1}),i.fields=e}return{options:i,query:e.toLowerCase().trim(),tokens:this.tokenize(e,i.respect_word_boundaries,s),total:0,items:[],weights:s,getAttrFn:i.nesting?x:I}}search(e,t){var s,i,n=this;i=this.prepareSearch(e,t),t=i.options,e=i.query;const o=t.score||n._getScoreFunction(i);e.length?E(n.items,(e,n)=>{s=o(e),(!1===t.filter||s>0)&&i.items.push({score:s,id:n})}):E(n.items,(e,t)=>{i.items.push({score:1,id:t})});const r=n._getSortFunction(i);return r&&i.items.sort(r),i.total=i.items.length,\"number\"==typeof t.limit&&(i.items=i.items.slice(0,t.limit)),i}}const P=e=>null==e?null:q(e),q=e=>\"boolean\"==typeof e?e?\"1\":\"0\":e+\"\",N=e=>(e+\"\").replace(\u002F&\u002Fg,\"&amp;\").replace(\u002F\u003C\u002Fg,\"&lt;\").replace(\u002F>\u002Fg,\"&gt;\").replace(\u002F\"\u002Fg,\"&quot;\"),j=(e,t)=>{var s;return function(i,n){var o=this;s&&(o.loading=Math.max(o.loading-1,0),clearTimeout(s)),s=setTimeout(function(){s=null,o.loadedSearches[i]=!0,e.call(o,i,n)},t)}},D=(e,t,s)=>{var i,n=e.trigger,o={};for(i of(e.trigger=function(){var s=arguments[0];if(-1===t.indexOf(s))return n.apply(e,arguments);o[s]=arguments},s.apply(e,[]),e.trigger=n,t))i in o&&n.apply(e,o[i])},$=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},V=(e,t,s,i)=>{e.addEventListener(t,s,i)},H=(e,t)=>!!t&&!!t[e]&&1==(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0),M=(e,t)=>e.getAttribute(\"id\")||(e.setAttribute(\"id\",t),t),R=e=>e.replace(\u002F[\\\\\"']\u002Fg,\"\\\\$&\"),z=(e,t)=>{t&&e.append(t)},B=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)},K=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(G(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},G=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1,Q=(e,t)=>{var s=document.createEvent(\"HTMLEvents\");s.initEvent(t,!0,!1),e.dispatchEvent(s)},U=(e,t)=>{Object.assign(e.style,t)},J=(e,...t)=>{var s=X(t);(e=Y(e)).map(e=>{s.map(t=>{e.classList.add(t)})})},W=(e,...t)=>{var s=X(t);(e=Y(e)).map(e=>{s.map(t=>{e.classList.remove(t)})})},X=e=>{var t=[];return B(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},Y=e=>(Array.isArray(e)||(e=[e]),e),Z=(e,t,s)=>{if(!s||s.contains(e))for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}},ee=(e,t=0)=>t>0?e[e.length-1]:e[0],te=(e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s},se=(e,t)=>{B(t,(t,s)=>{null==t?e.removeAttribute(s):e.setAttribute(s,\"\"+t)})},ie=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},ne=\"undefined\"!=typeof navigator&&\u002FMac\u002F.test(navigator.userAgent)?\"metaKey\":\"ctrlKey\",oe={options:[],optgroups:[],plugins:[],delimiter:\",\",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:\"loading\",dataAttr:null,optgroupField:\"optgroup\",valueField:\"value\",labelField:\"text\",disabledField:\"disabled\",optgroupLabelField:\"label\",optgroupValueField:\"value\",lockOptgroupOrder:!1,sortField:\"$order\",searchField:[\"text\"],searchConjunction:\"and\",mode:null,wrapperClass:\"ts-wrapper\",controlClass:\"ts-control\",dropdownClass:\"ts-dropdown\",dropdownContentClass:\"ts-dropdown-content\",itemClass:\"item\",optionClass:\"option\",dropdownParent:null,controlInput:'\u003Cinput type=\"text\" autocomplete=\"off\" size=\"1\" \u002F>',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}};function re(e,t){var s=Object.assign({},oe,t),i=s.dataAttr,n=s.labelField,o=s.valueField,r=s.disabledField,a=s.optgroupField,l=s.optgroupLabelField,c=s.optgroupValueField,d=e.tagName.toLowerCase(),u=e.getAttribute(\"placeholder\")||e.getAttribute(\"data-placeholder\");if(!u&&!s.allowEmptyOption){let t=e.querySelector('option[value=\"\"]');t&&(u=t.textContent)}var p={placeholder:u,options:[],optgroups:[],items:[],maxItems:null};return\"select\"===d?(()=>{var t,d=p.options,u={},h=1;let g=0;var f=e=>{var t=Object.assign({},e.dataset),s=i&&t[i];return\"string\"==typeof s&&s.length&&(t=Object.assign(t,JSON.parse(s))),t},m=(e,t)=>{var i=P(e.value);if(null!=i&&(i||s.allowEmptyOption)){if(u.hasOwnProperty(i)){if(t){var l=u[i][a];l?Array.isArray(l)?l.push(t):u[i][a]=[l,t]:u[i][a]=t}}else{var c=f(e);c[n]=c[n]||e.textContent,c[o]=c[o]||i,c[r]=c[r]||e.disabled,c[a]=c[a]||t,c.$option=e,c.$order=c.$order||++g,u[i]=c,d.push(c)}e.selected&&p.items.push(i)}};p.maxItems=e.hasAttribute(\"multiple\")?null:1,B(e.children,e=>{var s,i,n;\"optgroup\"===(t=e.tagName.toLowerCase())?((n=f(s=e))[l]=n[l]||s.getAttribute(\"label\")||\"\",n[c]=n[c]||h++,n[r]=n[r]||s.disabled,n.$order=n.$order||++g,p.optgroups.push(n),i=n[c],B(s.children,e=>{m(e,i)})):\"option\"===t&&m(e)})})():(()=>{const t=e.getAttribute(i);if(t)p.options=JSON.parse(t),B(p.options,e=>{p.items.push(e[o])});else{var r=e.value.trim()||\"\";if(!s.allowEmptyOption&&!r.length)return;const t=r.split(s.delimiter);B(t,e=>{const t={};t[n]=e,t[o]=e,p.options.push(t)}),p.items=t}})(),Object.assign({},oe,p,t)}var ae=0;class le extends(function(e){return e.plugins={},class extends e{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,s){e.plugins[t]={name:t,fn:s}}initializePlugins(e){var t,s;const i=this,n=[];if(Array.isArray(e))e.forEach(e=>{\"string\"==typeof e?n.push(e):(i.plugins.settings[e.name]=e.options,n.push(e.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(i.plugins.settings[t]=e[t],n.push(t));for(;s=n.shift();)i.require(s)}loadPlugin(t){var s=this,i=s.plugins,n=e.plugins[t];if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find \"'+t+'\" plugin');i.requested[t]=!0,i.loaded[t]=n.fn.apply(s,[s.plugins.settings[t]||{}]),i.names.push(t)}require(e){var t=this,s=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(s.requested[e])throw new Error('Plugin has circular dependency (\"'+e+'\")');t.loadPlugin(e)}return s.loaded[e]}}}(i)){constructor(e,t){var s;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue=\"\",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,ae++;var i=K(e);if(i.tomselect)throw new Error(\"Tom Select already initialized on this element\");i.tomselect=this,s=(window.getComputedStyle&&window.getComputedStyle(i,null)).getPropertyValue(\"direction\");const n=re(i,t);this.settings=n,this.input=i,this.tabIndex=i.tabIndex||0,this.is_select_tag=\"select\"===i.tagName.toLowerCase(),this.rtl=\u002Frtl\u002Fi.test(s),this.inputId=M(i,\"tomselect-\"+ae),this.isRequired=i.required,this.sifter=new T(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?\"single\":\"multi\"),\"boolean\"!=typeof n.hideSelected&&(n.hideSelected=\"multi\"===n.mode),\"boolean\"!=typeof n.hidePlaceholder&&(n.hidePlaceholder=\"multi\"!==n.mode);var o=n.createFilter;\"function\"!=typeof o&&(\"string\"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=e=>this.settings.duplicates||!this.options[e]),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates();const r=K(\"\u003Cdiv>\"),a=K(\"\u003Cdiv>\"),l=this._render(\"dropdown\"),c=K('\u003Cdiv role=\"listbox\" tabindex=\"-1\">'),d=this.input.getAttribute(\"class\")||\"\",u=n.mode;var p;J(r,n.wrapperClass,d,u),J(a,n.controlClass),z(r,a),J(l,n.dropdownClass,u),n.copyClassesToDropdown&&J(l,d),J(c,n.dropdownContentClass),z(l,c),K(n.dropdownParent||r).appendChild(l),G(n.controlInput)?(p=K(n.controlInput),B([\"autocorrect\",\"autocapitalize\",\"autocomplete\",\"spellcheck\"],e=>{i.getAttribute(e)&&se(p,{[e]:i.getAttribute(e)})}),p.tabIndex=-1,a.appendChild(p),this.focus_node=p):n.controlInput?(p=K(n.controlInput),this.focus_node=p):(p=K(\"\u003Cinput\u002F>\"),this.focus_node=a),this.wrapper=r,this.dropdown=l,this.dropdown_content=c,this.control=a,this.control_input=p,this.setup()}setup(){const e=this,t=e.settings,s=e.control_input,i=e.dropdown,n=e.dropdown_content,o=e.wrapper,r=e.control,a=e.input,c=e.focus_node,d={passive:!0},u=e.inputId+\"-ts-dropdown\";se(n,{id:u}),se(c,{role:\"combobox\",\"aria-haspopup\":\"listbox\",\"aria-expanded\":\"false\",\"aria-controls\":u});const p=M(c,e.inputId+\"-ts-control\"),h=\"label[for='\"+(e=>e.replace(\u002F['\"\\\\]\u002Fg,\"\\\\$&\"))(e.inputId)+\"']\",g=document.querySelector(h),f=e.focus.bind(e);if(g){V(g,\"click\",f),se(g,{for:p});const t=M(g,e.inputId+\"-ts-label\");se(c,{\"aria-labelledby\":t}),se(n,{\"aria-labelledby\":t})}if(o.style.width=a.style.width,e.plugins.names.length){const t=\"plugin-\"+e.plugins.names.join(\" plugin-\");J([o,i],t)}(null===t.maxItems||t.maxItems>1)&&e.is_select_tag&&se(a,{multiple:\"multiple\"}),t.placeholder&&se(s,{placeholder:t.placeholder}),!t.splitOn&&t.delimiter&&(t.splitOn=new RegExp(\"\\\\s*\"+l(t.delimiter)+\"+\\\\s*\")),t.load&&t.loadThrottle&&(t.load=j(t.load,t.loadThrottle)),V(i,\"mousemove\",()=>{e.ignoreHover=!1}),V(i,\"mouseenter\",t=>{var s=Z(t.target,\"[data-selectable]\",i);s&&e.onOptionHover(t,s)},{capture:!0}),V(i,\"click\",t=>{const s=Z(t.target,\"[data-selectable]\");s&&(e.onOptionSelect(t,s),$(t,!0))}),V(r,\"click\",t=>{var i=Z(t.target,\"[data-ts-item]\",r);i&&e.onItemSelect(t,i)?$(t,!0):\"\"==s.value&&(e.onClick(),$(t,!0))}),V(c,\"keydown\",t=>e.onKeyDown(t)),V(s,\"keypress\",t=>e.onKeyPress(t)),V(s,\"input\",t=>e.onInput(t)),V(c,\"blur\",t=>e.onBlur(t)),V(c,\"focus\",t=>e.onFocus(t)),V(s,\"paste\",t=>e.onPaste(t));const m=t=>{const n=t.composedPath()[0];if(!o.contains(n)&&!i.contains(n))return e.isFocused&&e.blur(),void e.inputState();n==s&&e.isOpen?t.stopPropagation():$(t,!0)},v=()=>{e.isOpen&&e.positionDropdown()};V(document,\"mousedown\",m),V(window,\"scroll\",v,d),V(window,\"resize\",v,d),this._destroy=()=>{document.removeEventListener(\"mousedown\",m),window.removeEventListener(\"scroll\",v),window.removeEventListener(\"resize\",v),g&&g.removeEventListener(\"click\",f)},this.revertSettings={innerHTML:a.innerHTML,tabIndex:a.tabIndex},a.tabIndex=-1,a.insertAdjacentElement(\"afterend\",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,V(a,\"invalid\",()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())}),e.updateOriginalInput(),e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,a.disabled?e.disable():a.readOnly?e.setReadOnly(!0):e.enable(),e.on(\"change\",this.onChange),J(a,\"tomselected\",\"ts-hidden-accessible\"),e.trigger(\"initialize\"),!0===t.preload&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),B(t,e=>{this.registerOptionGroup(e)})}setupTemplates(){var e=this,t=e.settings.labelField,s=e.settings.optgroupLabelField,i={optgroup:e=>{let t=document.createElement(\"div\");return t.className=\"optgroup\",t.appendChild(e.options),t},optgroup_header:(e,t)=>'\u003Cdiv class=\"optgroup-header\">'+t(e[s])+\"\u003C\u002Fdiv>\",option:(e,s)=>\"\u003Cdiv>\"+s(e[t])+\"\u003C\u002Fdiv>\",item:(e,s)=>\"\u003Cdiv>\"+s(e[t])+\"\u003C\u002Fdiv>\",option_create:(e,t)=>'\u003Cdiv class=\"create\">Add \u003Cstrong>'+t(e.input)+\"\u003C\u002Fstrong>&hellip;\u003C\u002Fdiv>\",no_results:()=>'\u003Cdiv class=\"no-results\">No results found\u003C\u002Fdiv>',loading:()=>'\u003Cdiv class=\"spinner\">\u003C\u002Fdiv>',not_loading:()=>{},dropdown:()=>\"\u003Cdiv>\u003C\u002Fdiv>\"};e.settings.render=Object.assign({},i,e.settings.render)}setupCallbacks(){var e,t,s={initialize:\"onInitialize\",change:\"onChange\",item_add:\"onItemAdd\",item_remove:\"onItemRemove\",item_select:\"onItemSelect\",clear:\"onClear\",option_add:\"onOptionAdd\",option_remove:\"onOptionRemove\",option_clear:\"onOptionClear\",optgroup_add:\"onOptionGroupAdd\",optgroup_remove:\"onOptionGroupRemove\",optgroup_clear:\"onOptionGroupClear\",dropdown_open:\"onDropdownOpen\",dropdown_close:\"onDropdownClose\",type:\"onType\",load:\"onLoad\",focus:\"onFocus\",blur:\"onBlur\"};for(e in s)(t=this.settings[s[e]])&&this.on(e,t)}sync(e=!0){const t=this,s=e?re(t.input,{delimiter:t.settings.delimiter}):t.settings;t.setupOptions(s.options,s.optgroups),t.setValue(s.items||[],!0),t.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0)return e.clearActiveItems(),void e.focus();e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){Q(this.input,\"input\"),Q(this.input,\"change\")}onPaste(e){var t=this;t.isInputHidden||t.isLocked?$(e):t.settings.splitOn&&setTimeout(()=>{var e=t.inputValue();if(e.match(t.settings.splitOn)){var s=e.trim().split(t.settings.splitOn);B(s,e=>{P(e)&&(this.options[e]?t.addItem(e):t.createItem(e))})}},0)}onKeyPress(e){var t=this;if(!t.isLocked){var s=String.fromCharCode(e.keyCode||e.which);return t.settings.create&&\"multi\"===t.settings.mode&&s===t.settings.delimiter?(t.createItem(),void $(e)):void 0}$(e)}onKeyDown(e){var t=this;if(t.ignoreHover=!0,t.isLocked)9!==e.keyCode&&$(e);else{switch(e.keyCode){case 65:if(H(ne,e)&&\"\"==t.control_input.value)return $(e),void t.selectAll();break;case 27:return t.isOpen&&($(e,!0),t.close()),void t.clearActiveItems();case 40:if(!t.isOpen&&t.hasOptions)t.open();else if(t.activeOption){let e=t.getAdjacent(t.activeOption,1);e&&t.setActiveOption(e)}return void $(e);case 38:if(t.activeOption){let e=t.getAdjacent(t.activeOption,-1);e&&t.setActiveOption(e)}return void $(e);case 13:return void(t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),$(e)):(t.settings.create&&t.createItem()||document.activeElement==t.control_input&&t.isOpen)&&$(e));case 37:return void t.advanceSelection(-1,e);case 39:return void t.advanceSelection(1,e);case 9:return void(t.settings.selectOnTab&&(t.canSelect(t.activeOption)&&(t.onOptionSelect(e,t.activeOption),$(e)),t.settings.create&&t.createItem()&&$(e)));case 8:case 46:return void t.deleteSelection(e)}t.isInputHidden&&!H(ne,e)&&$(e)}}onInput(e){if(this.isLocked)return;const t=this.inputValue();var s,i;this.lastValue!==t&&(this.lastValue=t,\"\"!=t?(this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=(s=()=>{this.refreshTimeout=null,this._onInput()},(i=this.settings.refreshThrottle)>0?window.setTimeout(s,i):(s.call(null),null))):this._onInput())}_onInput(){const e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger(\"type\",e)}onOptionHover(e,t){this.ignoreHover||this.setActiveOption(t,!1)}onFocus(e){var t=this,s=t.isFocused;if(t.isDisabled||t.isReadOnly)return t.blur(),void $(e);t.ignoreFocus||(t.isFocused=!0,\"focus\"===t.settings.preload&&t.preload(),s||t.trigger(\"focus\"),t.activeItems.length||(t.inputState(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(!1!==document.hasFocus()){var t=this;if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1;var s=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger(\"blur\")};t.settings.create&&t.settings.createOnBlur?t.createItem(null,s):s()}}}onOptionSelect(e,t){var s,i=this;t.parentElement&&t.parentElement.matches(\"[data-disabled]\")||(t.classList.contains(\"create\")?i.createItem(null,()=>{i.settings.closeAfterSelect&&i.close()}):void 0!==(s=t.dataset.value)&&(i.lastQuery=null,i.addItem(s),i.settings.closeAfterSelect&&i.close(),!i.settings.hideSelected&&e.type&&\u002Fclick\u002F.test(e.type)&&i.setActiveOption(t)))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,t){var s=this;return!s.isLocked&&\"multi\"===s.settings.mode&&($(e),s.setActiveItem(t,e),!0)}canLoad(e){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(e)}load(e){const t=this;if(!t.canLoad(e))return;J(t.wrapper,t.settings.loadingClass),t.loading++;const s=t.loadCallback.bind(t);t.settings.load.call(t,e,s)}loadCallback(e,t){const s=this;s.loading=Math.max(s.loading-1,0),s.lastQuery=null,s.clearActiveOption(),s.setupOptions(e,t),s.refreshOptions(s.isFocused&&!s.isInputHidden),s.loading||W(s.wrapper,s.settings.loadingClass),s.trigger(\"load\",e,t)}preload(){var e=this.wrapper.classList;e.contains(\"preloaded\")||(e.add(\"preloaded\"),this.load(\"\"))}setTextboxValue(e=\"\"){var t=this.control_input;t.value!==e&&(t.value=e,Q(t,\"update\"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute(\"multiple\")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){D(this,t?[]:[\"change\"],()=>{this.clear(t),this.addItems(e,t)})}setMaxItems(e){0===e&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var s,i,n,o,r,a,l=this;if(\"single\"!==l.settings.mode){if(!e)return l.clearActiveItems(),void(l.isFocused&&l.inputState());if(\"click\"===(s=t&&t.type.toLowerCase())&&H(\"shiftKey\",t)&&l.activeItems.length){for(a=l.getLastActive(),(n=Array.prototype.indexOf.call(l.control.children,a))>(o=Array.prototype.indexOf.call(l.control.children,e))&&(r=n,n=o,o=r),i=n;i\u003C=o;i++)e=l.control.children[i],-1===l.activeItems.indexOf(e)&&l.setActiveItemClass(e);$(t)}else\"click\"===s&&H(ne,t)||\"keydown\"===s&&H(\"shiftKey\",t)?e.classList.contains(\"active\")?l.removeActiveItem(e):l.setActiveItemClass(e):(l.clearActiveItems(),l.setActiveItemClass(e));l.inputState(),l.isFocused||l.focus()}}setActiveItemClass(e){const t=this,s=t.control.querySelector(\".last-active\");s&&W(s,\"last-active\"),J(e,\"active last-active\"),t.trigger(\"item_select\",e),-1==t.activeItems.indexOf(e)&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e);this.activeItems.splice(t,1),W(e,\"active\")}clearActiveItems(){W(this.activeItems,\"active\"),this.activeItems=[]}setActiveOption(e,t=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,se(this.focus_node,{\"aria-activedescendant\":e.getAttribute(\"id\")}),se(e,{\"aria-selected\":\"true\"}),J(e,\"active\"),t&&this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return;const s=this.dropdown_content,i=s.clientHeight,n=s.scrollTop||0,o=e.offsetHeight,r=e.getBoundingClientRect().top-s.getBoundingClientRect().top+n;r+o>i+n?this.scroll(r-i+o,t):r\u003Cn&&this.scroll(r,t)}scroll(e,t){const s=this.dropdown_content;t&&(s.style.scrollBehavior=t),s.scrollTop=e,s.style.scrollBehavior=\"\"}clearActiveOption(){this.activeOption&&(W(this.activeOption,\"active\"),se(this.activeOption,{\"aria-selected\":null})),this.activeOption=null,se(this.focus_node,{\"aria-activedescendant\":null})}selectAll(){const e=this;if(\"single\"===e.settings.mode)return;const t=e.controlChildren();t.length&&(e.inputState(),e.close(),e.activeItems=t,B(t,t=>{e.setActiveItemClass(t)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(se(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&se(e.control_input,{placeholder:\"\"}),e.isInputHidden=!1),e.wrapper.classList.toggle(\"input-hidden\",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;e.isDisabled||e.isReadOnly||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout(()=>{e.ignoreFocus=!1,e.onFocus()},0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField;return\"string\"==typeof e.sortField&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,s,i=this,n=this.getSearchOptions();if(i.settings.score&&\"function\"!=typeof(s=i.settings.score.call(i,e)))throw new Error('Tom Select \"score\" setting must be a function that returns a function');return e!==i.lastQuery?(i.lastQuery=e,t=i.sifter.search(e,Object.assign(n,{score:s})),i.currentResults=t):t=Object.assign({},i.currentResults),i.settings.hideSelected&&(t.items=t.items.filter(e=>{let t=P(e.id);return!(t&&-1!==i.items.indexOf(t))})),t}refreshOptions(e=!0){var t,s,i,n,o,r,a,l,c,d;const u={},p=[];var h=this,g=h.inputValue();const f=g===h.lastQuery||\"\"==g&&null==h.lastQuery;var m=h.search(g),v=null,y=h.settings.shouldOpen||!1,b=h.dropdown_content;f&&(v=h.activeOption)&&(c=v.closest(\"[data-group]\")),n=m.items.length,\"number\"==typeof h.settings.maxOptions&&(n=Math.min(n,h.settings.maxOptions)),n>0&&(y=!0);const O=(e,t)=>{let s=u[e];if(void 0!==s){let e=p[s];if(void 0!==e)return[s,e.fragment]}let i=document.createDocumentFragment();return s=p.length,p.push({fragment:i,order:t,optgroup:e}),[s,i]};for(t=0;t\u003Cn;t++){let e=m.items[t];if(!e)continue;let n=e.id,a=h.options[n];if(void 0===a)continue;let l=q(n),d=h.getOption(l,!0);for(h.settings.hideSelected||d.classList.toggle(\"selected\",h.items.includes(l)),o=a[h.settings.optgroupField]||\"\",s=0,i=(r=Array.isArray(o)?o:[o])&&r.length;s\u003Ci;s++){o=r[s];let e=a.$order,t=h.optgroups[o];void 0===t?o=\"\":e=t.$order;const[i,l]=O(o,e);s>0&&(d=d.cloneNode(!0),se(d,{id:a.$id+\"-clone-\"+s,\"aria-selected\":null}),d.classList.add(\"ts-cloned\"),W(d,\"active\"),h.activeOption&&h.activeOption.dataset.value==n&&c&&c.dataset.group===o.toString()&&(v=d)),l.appendChild(d),\"\"!=o&&(u[o]=i)}}var w;h.settings.lockOptgroupOrder&&p.sort((e,t)=>e.order-t.order),a=document.createDocumentFragment(),B(p,e=>{let t=e.fragment,s=e.optgroup;if(!t||!t.children.length)return;let i=h.optgroups[s];if(void 0!==i){let e=document.createDocumentFragment(),s=h.render(\"optgroup_header\",i);z(e,s),z(e,t);let n=h.render(\"optgroup\",{group:i,options:e});z(a,n)}else z(a,t)}),b.innerHTML=\"\",z(b,a),h.settings.highlight&&(w=b.querySelectorAll(\"span.highlight\"),Array.prototype.forEach.call(w,function(e){var t=e.parentNode;t.replaceChild(e.firstChild,e),t.normalize()}),m.query.length&&m.tokens.length&&B(m.tokens,e=>{((e,t)=>{if(null===t)return;if(\"string\"==typeof t){if(!t.length)return;t=new RegExp(t,\"i\")}const s=e=>3===e.nodeType?(e=>{var s=e.data.match(t);if(s&&e.data.length>0){var i=document.createElement(\"span\");i.className=\"highlight\";var n=e.splitText(s.index);n.splitText(s[0].length);var o=n.cloneNode(!0);return i.appendChild(o),ie(n,i),1}return 0})(e):((e=>{1!==e.nodeType||!e.childNodes||\u002F(script|style)\u002Fi.test(e.tagName)||\"highlight\"===e.className&&\"SPAN\"===e.tagName||Array.from(e.childNodes).forEach(e=>{s(e)})})(e),0);s(e)})(b,e.regex)}));var _=e=>{let t=h.render(e,{input:g});return t&&(y=!0,b.insertBefore(t,b.firstChild)),t};if(h.loading?_(\"loading\"):h.settings.shouldLoad.call(h,g)?0===m.items.length&&_(\"no_results\"):_(\"not_loading\"),(l=h.canCreate(g))&&(d=_(\"option_create\")),h.hasOptions=m.items.length>0||l,y){if(m.items.length>0){if(v||\"single\"!==h.settings.mode||null==h.items[0]||(v=h.getOption(h.items[0])),!b.contains(v)){let e=0;d&&!h.settings.addPrecedence&&(e=1),v=h.selectable()[e]}}else d&&(v=d);e&&!h.isOpen&&(h.open(),h.scrollToOption(v,\"auto\")),h.setActiveOption(v)}else h.clearActiveOption(),e&&h.isOpen&&h.close(!1)}selectable(){return this.dropdown_content.querySelectorAll(\"[data-selectable]\")}addOption(e,t=!1){const s=this;if(Array.isArray(e))return s.addOptions(e,t),!1;const i=P(e[s.settings.valueField]);return null!==i&&!s.options.hasOwnProperty(i)&&(e.$order=e.$order||++s.order,e.$id=s.inputId+\"-opt-\"+e.$order,s.options[i]=e,s.lastQuery=null,t&&(s.userOptions[i]=t,s.trigger(\"option_add\",i,e)),i)}addOptions(e,t=!1){B(e,e=>{this.addOption(e,t)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=P(e[this.settings.optgroupValueField]);return null!==t&&(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var s;t[this.settings.optgroupValueField]=e,(s=this.registerOptionGroup(t))&&this.trigger(\"optgroup_add\",s,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger(\"optgroup_remove\",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger(\"optgroup_clear\")}updateOption(e,t){const s=this;var i,n;const o=P(e),r=P(t[s.settings.valueField]);if(null===o)return;const a=s.options[o];if(null==a)return;if(\"string\"!=typeof r)throw new Error(\"Value must be set in option data\");const l=s.getOption(o),c=s.getItem(o);if(t.$order=t.$order||a.$order,delete s.options[o],s.uncacheValue(r),s.options[r]=t,l){if(s.dropdown_content.contains(l)){const e=s._render(\"option\",t);ie(l,e),s.activeOption===l&&s.setActiveOption(e)}l.remove()}c&&(-1!==(n=s.items.indexOf(o))&&s.items.splice(n,1,r),i=s._render(\"item\",t),c.classList.contains(\"active\")&&J(i,\"active\"),ie(c,i)),s.lastQuery=null}removeOption(e,t){const s=this;e=q(e),s.uncacheValue(e),delete s.userOptions[e],delete s.options[e],s.lastQuery=null,s.trigger(\"option_remove\",e),s.removeItem(e,t)}clearOptions(e){const t=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const s={};B(this.options,(e,i)=>{t(e,i)&&(s[i]=e)}),this.options=this.sifter.items=s,this.lastQuery=null,this.trigger(\"option_clear\")}clearFilter(e,t){return this.items.indexOf(t)>=0}getOption(e,t=!1){const s=P(e);if(null===s)return null;const i=this.options[s];if(null!=i){if(i.$div)return i.$div;if(t)return this._render(\"option\",i)}return null}getAdjacent(e,t,s=\"option\"){var i;if(!e)return null;i=\"item\"==s?this.controlChildren():this.dropdown_content.querySelectorAll(\"[data-selectable]\");for(let s=0;s\u003Ci.length;s++)if(i[s]==e)return t>0?i[s+1]:i[s-1];return null}getItem(e){if(\"object\"==typeof e)return e;var t=P(e);return null!==t?this.control.querySelector(`[data-value=\"${R(t)}\"]`):null}addItems(e,t){var s=this,i=Array.isArray(e)?e:[e];const n=(i=i.filter(e=>-1===s.items.indexOf(e)))[i.length-1];i.forEach(e=>{s.isPending=e!==n,s.addItem(e,t)})}addItem(e,t){D(this,t?[]:[\"change\",\"dropdown_close\"],()=>{var s,i;const n=this,o=n.settings.mode,r=P(e);if((!r||-1===n.items.indexOf(r)||(\"single\"===o&&n.close(),\"single\"!==o&&n.settings.duplicates))&&null!==r&&n.options.hasOwnProperty(r)&&(\"single\"===o&&n.clear(t),\"multi\"!==o||!n.isFull())){if(s=n._render(\"item\",n.options[r]),n.control.contains(s)&&(s=s.cloneNode(!0)),i=n.isFull(),n.items.splice(n.caretPos,0,r),n.insertAtCaret(s),n.isSetup){if(!n.isPending&&n.settings.hideSelected){let e=n.getOption(r),t=n.getAdjacent(e,1);t&&n.setActiveOption(t)}n.isPending||n.settings.closeAfterSelect||n.refreshOptions(n.isFocused&&\"single\"!==o),0!=n.settings.closeAfterSelect&&n.isFull()?n.close():n.isPending||n.positionDropdown(),n.trigger(\"item_add\",r,s),n.isPending||n.updateOriginalInput({silent:t})}(!n.isPending||!i&&n.isFull())&&(n.inputState(),n.refreshState())}})}removeItem(e=null,t){const s=this;if(!(e=s.getItem(e)))return;var i,n;const o=e.dataset.value;i=te(e),e.remove(),e.classList.contains(\"active\")&&(n=s.activeItems.indexOf(e),s.activeItems.splice(n,1),W(e,\"active\")),s.items.splice(i,1),s.lastQuery=null,!s.settings.persist&&s.userOptions.hasOwnProperty(o)&&s.removeOption(o,t),i\u003Cs.caretPos&&s.setCaret(s.caretPos-1),s.updateOriginalInput({silent:t}),s.refreshState(),s.positionDropdown(),s.trigger(\"item_remove\",o,e)}createItem(e=null,t=()=>{}){3===arguments.length&&(t=arguments[2]),\"function\"!=typeof t&&(t=()=>{});var s,i=this,n=i.caretPos;if(e=e||i.inputValue(),!i.canCreate(e))return t(),!1;i.lock();var o=!1,r=e=>{if(i.unlock(),!e||\"object\"!=typeof e)return t();var s=P(e[i.settings.valueField]);if(\"string\"!=typeof s)return t();i.setTextboxValue(),i.addOption(e,!0),i.setCaret(n),i.addItem(s),t(e),o=!0};return s=\"function\"==typeof i.settings.create?i.settings.create.call(this,e,r):{[i.settings.labelField]:e,[i.settings.valueField]:e},o||r(s),!0}refreshItems(){var e=this;e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this;e.refreshValidityState();const t=e.isFull(),s=e.isLocked;e.wrapper.classList.toggle(\"rtl\",e.rtl);const i=e.wrapper.classList;var n;i.toggle(\"focus\",e.isFocused),i.toggle(\"disabled\",e.isDisabled),i.toggle(\"readonly\",e.isReadOnly),i.toggle(\"required\",e.isRequired),i.toggle(\"invalid\",!e.isValid),i.toggle(\"locked\",s),i.toggle(\"full\",t),i.toggle(\"input-active\",e.isFocused&&!e.isInputHidden),i.toggle(\"dropdown-active\",e.isOpen),i.toggle(\"has-options\",(n=e.options,0===Object.keys(n).length)),i.toggle(\"has-items\",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const t=this;var s,i;const n=t.input.querySelector('option[value=\"\"]');if(t.is_select_tag){const o=[],r=t.input.querySelectorAll(\"option:checked\").length;function a(e,s,i){return e||(e=K('\u003Coption value=\"'+N(s)+'\">'+N(i)+\"\u003C\u002Foption>\")),e!=n&&t.input.append(e),o.push(e),(e!=n||r>0)&&(e.selected=!0),e}t.input.querySelectorAll(\"option:checked\").forEach(e=>{e.selected=!1}),0==t.items.length&&\"single\"==t.settings.mode?a(n,\"\",\"\"):t.items.forEach(e=>{s=t.options[e],i=s[t.settings.labelField]||\"\",o.includes(s.$option)?a(t.input.querySelector(`option[value=\"${R(e)}\"]:not(:checked)`),e,i):s.$option=a(s.$option,e,i)})}else t.input.value=t.getValue();t.isSetup&&(e.silent||t.trigger(\"change\",t.getValue()))}open(){var e=this;e.isLocked||e.isOpen||\"multi\"===e.settings.mode&&e.isFull()||(e.isOpen=!0,se(e.focus_node,{\"aria-expanded\":\"true\"}),e.refreshState(),U(e.dropdown,{visibility:\"hidden\",display:\"block\"}),e.positionDropdown(),U(e.dropdown,{visibility:\"visible\",display:\"block\"}),e.focus(),e.trigger(\"dropdown_open\",e.dropdown))}close(e=!0){var t=this,s=t.isOpen;e&&(t.setTextboxValue(),\"single\"===t.settings.mode&&t.items.length&&t.inputState()),t.isOpen=!1,se(t.focus_node,{\"aria-expanded\":\"false\"}),U(t.dropdown,{display:\"none\"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),s&&t.trigger(\"dropdown_close\",t.dropdown)}positionDropdown(){if(\"body\"===this.settings.dropdownParent){var e=this.control,t=e.getBoundingClientRect(),s=e.offsetHeight+t.top+window.scrollY,i=t.left+window.scrollX;U(this.dropdown,{width:t.width+\"px\",top:s+\"px\",left:i+\"px\"})}}clear(e){var t=this;if(t.items.length){var s=t.controlChildren();B(s,e=>{t.removeItem(e,!0)}),t.inputState(),e||t.updateOriginalInput(),t.trigger(\"clear\")}}insertAtCaret(e){const t=this,s=t.caretPos,i=t.control;i.insertBefore(e,i.children[s]||null),t.setCaret(s+1)}deleteSelection(e){var t,s,i,n,o,r=this;t=e&&8===e.keyCode?-1:1,s={start:(o=r.control_input).selectionStart||0,length:(o.selectionEnd||0)-(o.selectionStart||0)};const a=[];if(r.activeItems.length)n=ee(r.activeItems,t),i=te(n),t>0&&i++,B(r.activeItems,e=>a.push(e));else if((r.isFocused||\"single\"===r.settings.mode)&&r.items.length){const e=r.controlChildren();let i;t\u003C0&&0===s.start&&0===s.length?i=e[r.caretPos-1]:t>0&&s.start===r.inputValue().length&&(i=e[r.caretPos]),void 0!==i&&a.push(i)}if(!r.shouldDelete(a,e))return!1;for($(e,!0),void 0!==i&&r.setCaret(i);a.length;)r.removeItem(a.pop());return r.inputState(),r.positionDropdown(),r.refreshOptions(!1),!0}shouldDelete(e,t){const s=e.map(e=>e.dataset.value);return!(!s.length||\"function\"==typeof this.settings.onDelete&&!1===this.settings.onDelete(s,t))}advanceSelection(e,t){var s,i,n=this;n.rtl&&(e*=-1),n.inputValue().length||(H(ne,t)||H(\"shiftKey\",t)?(i=(s=n.getLastActive(e))?s.classList.contains(\"active\")?n.getAdjacent(s,e,\"item\"):s:e>0?n.control_input.nextElementSibling:n.control_input.previousElementSibling)&&(i.classList.contains(\"active\")&&n.removeActiveItem(s),n.setActiveItemClass(i)):n.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(\".last-active\");if(t)return t;var s=this.control.querySelectorAll(\".active\");return s?ee(s,e):void 0}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll(\"[data-ts-item]\"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,t=e.revertSettings;e.trigger(\"destroy\"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,W(e.input,\"tomselected\",\"ts-hidden-accessible\"),e._destroy(),delete e.input.tomselect}render(e,t){var s,i;const n=this;if(\"function\"!=typeof this.settings.render[e])return null;if(!(i=n.settings.render[e].call(this,t,N)))return null;if(i=K(i),\"option\"===e||\"option_create\"===e?t[n.settings.disabledField]?se(i,{\"aria-disabled\":\"true\"}):se(i,{\"data-selectable\":\"\"}):\"optgroup\"===e&&(s=t.group[n.settings.optgroupValueField],se(i,{\"data-group\":s}),t.group[n.settings.disabledField]&&se(i,{\"data-disabled\":\"\"})),\"option\"===e||\"item\"===e){const s=q(t[n.settings.valueField]);se(i,{\"data-value\":s}),\"item\"===e?(J(i,n.settings.itemClass),se(i,{\"data-ts-item\":\"\"})):(J(i,n.settings.optionClass),se(i,{role:\"option\",id:t.$id}),t.$div=i,n.options[s]=t)}return i}_render(e,t){const s=this.render(e,t);if(null==s)throw\"HTMLElement expected\";return s}clearCache(){B(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){const t=this.getOption(e);t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,s){var i=this,n=i[t];i[t]=function(){var t,o;return\"after\"===e&&(t=n.apply(i,arguments)),o=s.apply(i,arguments),\"instead\"===e?o:(\"before\"===e&&(t=n.apply(i,arguments)),t)}}}const ce=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},de=(e,t,s,i)=>{e.addEventListener(t,s,i)},ue=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(pe(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},pe=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1,he=(e,t,s,i)=>{e.addEventListener(t,s,i)},ge=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},fe=(e,t,s,i)=>{e.addEventListener(t,s,i)},me=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(ve(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},ve=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1;le.define(\"change_listener\",function(){var e;e=()=>{this.sync()},this.input.addEventListener(\"change\",e,void 0)}),le.define(\"checkbox_options\",function(e){var t=this,s=t.onOptionSelect;t.settings.hideSelected=!1;const i=Object.assign({className:\"tomselect-checkbox\",checkedClassNames:void 0,uncheckedClassNames:void 0},e);var n=function(e,t){t?(e.checked=!0,i.uncheckedClassNames&&e.classList.remove(...i.uncheckedClassNames),i.checkedClassNames&&e.classList.add(...i.checkedClassNames)):(e.checked=!1,i.checkedClassNames&&e.classList.remove(...i.checkedClassNames),i.uncheckedClassNames&&e.classList.add(...i.uncheckedClassNames))},o=function(e){setTimeout(()=>{var t=e.querySelector(\"input.\"+i.className);t instanceof HTMLInputElement&&n(t,e.classList.contains(\"selected\"))},1)};t.hook(\"after\",\"setupTemplates\",()=>{var e=t.settings.render.option;t.settings.render.option=(s,o)=>{var r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(e.call(t,s,o)),a=document.createElement(\"input\");i.className&&a.classList.add(i.className),a.addEventListener(\"click\",function(e){ce(e)}),a.type=\"checkbox\";const l=null==(c=s[t.settings.valueField])?null:(e=>\"boolean\"==typeof e?e?\"1\":\"0\":e+\"\")(c);var c;return n(a,!!(l&&t.items.indexOf(l)>-1)),r.prepend(a),r}}),t.on(\"item_remove\",e=>{var s=t.getOption(e);s&&(s.classList.remove(\"selected\"),o(s))}),t.on(\"item_add\",e=>{var s=t.getOption(e);s&&o(s)}),t.hook(\"instead\",\"onOptionSelect\",(e,i)=>{if(i.classList.contains(\"selected\"))return i.classList.remove(\"selected\"),t.removeItem(i.dataset.value),t.refreshOptions(),void ce(e,!0);s.call(t,e,i),o(i)})}),le.define(\"clear_button\",function(e){const t=this,s=Object.assign({className:\"clear-button\",title:\"Clear All\",html:e=>`\u003Cdiv class=\"${e.className}\" title=\"${e.title}\">&#10799;\u003C\u002Fdiv>`},e);t.on(\"initialize\",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(s.html(s));e.addEventListener(\"click\",e=>{t.isLocked||(t.clear(),\"single\"===t.settings.mode&&t.settings.allowEmptyOption&&t.addItem(\"\"),e.preventDefault(),e.stopPropagation())}),t.control.appendChild(e)})}),le.define(\"drag_drop\",function(){var e=this;if(\"multi\"!==e.settings.mode)return;var t=e.lock,s=e.unlock;let i,n=!0;e.hook(\"after\",\"setupTemplates\",()=>{var t=e.settings.render.item;e.settings.render.item=(s,o)=>{const r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(t.call(e,s,o));var a;a=r,((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)})({draggable:\"true\"},(e,t)=>{null==e?a.removeAttribute(t):a.setAttribute(t,\"\"+e)});const l=e=>{e.preventDefault(),r.classList.add(\"ts-drag-over\"),c(r,i)},c=(e,t)=>{var s,i,n;void 0!==t&&(((e,t)=>{do{var s;if(e==(t=null==(s=t)?void 0:s.previousElementSibling))return!0}while(t&&t.previousElementSibling);return!1})(t,r)?(i=t,null==(n=(s=e).parentNode)||n.insertBefore(i,s.nextSibling)):((e,t)=>{var s;null==(s=e.parentNode)||s.insertBefore(t,e)})(e,t))};return de(r,\"mousedown\",e=>{n||((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e),e.stopPropagation()}),de(r,\"dragstart\",e=>{i=r,setTimeout(()=>{r.classList.add(\"ts-dragging\")},0)}),de(r,\"dragenter\",l),de(r,\"dragover\",l),de(r,\"dragleave\",()=>{r.classList.remove(\"ts-drag-over\")}),de(r,\"dragend\",()=>{var t;document.querySelectorAll(\".ts-drag-over\").forEach(e=>e.classList.remove(\"ts-drag-over\")),null==(t=i)||t.classList.remove(\"ts-dragging\"),i=void 0;var s=[];e.control.querySelectorAll(\"[data-value]\").forEach(e=>{if(e.dataset.value){let t=e.dataset.value;t&&s.push(t)}}),e.setValue(s)}),r}}),e.hook(\"instead\",\"lock\",()=>(n=!1,t.call(e))),e.hook(\"instead\",\"unlock\",()=>(n=!0,s.call(e)))}),le.define(\"dropdown_header\",function(e){const t=this,s=Object.assign({title:\"Untitled\",headerClass:\"dropdown-header\",titleRowClass:\"dropdown-header-title\",labelClass:\"dropdown-header-label\",closeClass:\"dropdown-header-close\",html:e=>'\u003Cdiv class=\"'+e.headerClass+'\">\u003Cdiv class=\"'+e.titleRowClass+'\">\u003Cspan class=\"'+e.labelClass+'\">'+e.title+'\u003C\u002Fspan>\u003Ca class=\"'+e.closeClass+'\">&times;\u003C\u002Fa>\u003C\u002Fdiv>\u003C\u002Fdiv>'},e);t.on(\"initialize\",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(s.html(s)),i=e.querySelector(\".\"+s.closeClass);i&&i.addEventListener(\"click\",e=>{((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e,!0),t.close()}),t.dropdown.insertBefore(e,t.dropdown.firstChild)})}),le.define(\"caret_position\",function(){var e=this;e.hook(\"instead\",\"setCaret\",t=>{\"single\"!==e.settings.mode&&e.control.contains(e.control_input)?(t=Math.max(0,Math.min(e.items.length,t)))==e.caretPos||e.isPending||e.controlChildren().forEach((s,i)=>{i\u003Ct?e.control_input.insertAdjacentElement(\"beforebegin\",s):e.control.appendChild(s)}):t=e.items.length,e.caretPos=t}),e.hook(\"instead\",\"moveCaret\",t=>{if(!e.isFocused)return;const s=e.getLastActive(t);if(s){const a=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s})(s);e.setCaret(t>0?a+1:a),e.setActiveItem(),n=s,i=[],((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})([\"last-active\"],e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(i=i.concat(e))}),r=i.filter(Boolean),(o=n,Array.isArray(o)||(o=[o]),n=o).map(e=>{r.map(t=>{e.classList.remove(t)})})}else e.setCaret(e.caretPos+t);var i,n,o,r})}),le.define(\"dropdown_input\",function(){const e=this;e.settings.shouldOpen=!0,e.hook(\"before\",\"setup\",()=>{e.focus_node=e.control,((e,...t)=>{var s,i=(e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)})(t);(s=e,Array.isArray(s)||(s=[s]),e=s).map(e=>{i.map(t=>{e.classList.add(t)})})})(e.control_input,\"dropdown-input\");const t=ue('\u003Cdiv class=\"dropdown-input-wrap\">');t.append(e.control_input),e.dropdown.insertBefore(t,e.dropdown.firstChild);const s=ue('\u003Cinput class=\"items-placeholder\" tabindex=\"-1\" \u002F>');s.placeholder=e.settings.placeholder||\"\",e.control.append(s)}),e.on(\"initialize\",()=>{e.control_input.addEventListener(\"keydown\",t=>{switch(t.keyCode){case 27:return e.isOpen&&(((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(t,!0),e.close()),void e.clearActiveItems();case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)}),e.on(\"blur\",()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex}),e.on(\"dropdown_open\",()=>{e.control_input.focus()});const t=e.onBlur;var s;e.hook(\"instead\",\"onBlur\",s=>{if(!s||s.relatedTarget!=e.control_input)return t.call(e)}),s=()=>e.onBlur(),e.control_input.addEventListener(\"blur\",s,void 0),e.hook(\"before\",\"close\",()=>{e.isOpen&&e.focus_node.focus({preventScroll:!0})})})}),le.define(\"input_autogrow\",function(){var e=this;e.on(\"initialize\",()=>{var t=document.createElement(\"span\"),s=e.control_input;t.style.cssText=\"position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; \",e.wrapper.appendChild(t);for(const e of[\"letterSpacing\",\"fontSize\",\"fontFamily\",\"fontWeight\",\"textTransform\"])t.style[e]=s.style[e];var i=()=>{t.textContent=s.value,s.style.width=t.clientWidth+\"px\"};i(),e.on(\"update item_add item_remove\",i),he(s,\"input\",i),he(s,\"keyup\",i),he(s,\"blur\",i),he(s,\"update\",i)})}),le.define(\"no_backspace_delete\",function(){var e=this,t=e.deleteSelection;this.hook(\"instead\",\"deleteSelection\",s=>!!e.activeItems.length&&t.call(e,s))}),le.define(\"no_active_items\",function(){this.hook(\"instead\",\"setActiveItem\",()=>{}),this.hook(\"instead\",\"selectAll\",()=>{})}),le.define(\"optgroup_columns\",function(){var e=this,t=e.onKeyDown;e.hook(\"instead\",\"onKeyDown\",s=>{var i,n,o,r;if(!e.isOpen||37!==s.keyCode&&39!==s.keyCode)return t.call(e,s);e.ignoreHover=!0,r=(e=>{for(;e&&e.matches;){if(e.matches(\"[data-group]\"))return e;e=e.parentNode}})(e.activeOption),i=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s})(e.activeOption,\"[data-selectable]\"),r&&(r=37===s.keyCode?r.previousSibling:r.nextSibling)&&(n=(o=r.querySelectorAll(\"[data-selectable]\"))[Math.min(o.length-1,i)])&&e.setActiveOption(n)})}),le.define(\"remove_button\",function(e){const t=Object.assign({label:\"&times;\",title:\"Remove\",className:\"remove\",append:!0},e);var s=this;if(t.append){var i='\u003Ca href=\"javascript:void(0)\" class=\"'+t.className+'\" tabindex=\"-1\" title=\"'+(t.title+\"\").replace(\u002F&\u002Fg,\"&amp;\").replace(\u002F\u003C\u002Fg,\"&lt;\").replace(\u002F>\u002Fg,\"&gt;\").replace(\u002F\"\u002Fg,\"&quot;\")+'\">'+t.label+\"\u003C\u002Fa>\";s.hook(\"after\",\"setupTemplates\",()=>{var e=s.settings.render.item;s.settings.render.item=(t,n)=>{var o=me(e.call(s,t,n)),r=me(i);return o.appendChild(r),fe(r,\"mousedown\",e=>{ge(e,!0)}),fe(r,\"click\",e=>{s.isLocked||(ge(e,!0),s.isLocked||s.shouldDelete([o],e)&&(s.removeItem(o),s.refreshOptions(!1),s.inputState()))}),o}})}}),le.define(\"restore_on_backspace\",function(e){const t=this,s=Object.assign({text:e=>e[t.settings.labelField]},e);t.on(\"item_remove\",function(e){if(t.isFocused&&\"\"===t.control_input.value.trim()){var i=t.options[e];i&&t.setTextboxValue(s.text.call(t,i))}})}),le.define(\"virtual_scroll\",function(){const e=this,t=e.canLoad,s=e.clearActiveOption,i=e.loadCallback;var n,o,r={},a=!1,l=[];if(e.settings.shouldLoadMore||(e.settings.shouldLoadMore=()=>{if(n.clientHeight\u002F(n.scrollHeight-n.scrollTop)>.9)return!0;if(e.activeOption){var t=e.selectable();if(Array.from(t).indexOf(e.activeOption)>=t.length-2)return!0}return!1}),!e.settings.firstUrl)throw\"virtual_scroll plugin requires a firstUrl() method\";e.settings.sortField=[{field:\"$order\"},{field:\"$score\"}];const c=t=>!(\"number\"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions||!(t in r)||!r[t]),d=(t,s)=>e.items.indexOf(s)>=0||l.indexOf(s)>=0;e.setNextUrl=(e,t)=>{r[e]=t},e.getUrl=t=>{if(t in r){const e=r[t];return r[t]=!1,e}return e.clearPagination(),e.settings.firstUrl.call(e,t)},e.clearPagination=()=>{r={}},e.hook(\"instead\",\"clearActiveOption\",()=>{if(!a)return s.call(e)}),e.hook(\"instead\",\"canLoad\",s=>s in r?c(s):t.call(e,s)),e.hook(\"instead\",\"loadCallback\",(t,s)=>{if(a){if(o){const s=t[0];void 0!==s&&(o.dataset.value=s[e.settings.valueField])}}else e.clearOptions(d);i.call(e,t,s),a=!1}),e.hook(\"after\",\"refreshOptions\",()=>{const t=e.lastValue;var s;c(t)?(s=e.render(\"loading_more\",{query:t}))&&(s.setAttribute(\"data-selectable\",\"\"),o=s):t in r&&!n.querySelector(\".no-results\")&&(s=e.render(\"no_more_results\",{query:t})),s&&(((e,...t)=>{var s,i=(e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)})(t);(s=e,Array.isArray(s)||(s=[s]),e=s).map(e=>{i.map(t=>{e.classList.add(t)})})})(s,e.settings.optionClass),n.append(s))}),e.on(\"initialize\",()=>{l=Object.keys(e.options),n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:()=>'\u003Cdiv class=\"loading-more-results\">Loading more results ... \u003C\u002Fdiv>',no_more_results:()=>'\u003Cdiv class=\"no-more-results\">No more results\u003C\u002Fdiv>'},e.settings.render),n.addEventListener(\"scroll\",()=>{e.settings.shouldLoadMore.call(e)&&c(e.lastValue)&&(a||(a=!0,e.load.call(e,e.lastValue)))})})});const ye=le,be={};let Oe;\"undefined\"!=typeof lpDataAdmin&&(Oe=lpDataAdmin.lp_rest_url,be.admin={apiAdminNotice:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices\",apiAddons:Oe+\"lp\u002Fv1\u002Faddon\u002Fall\",apiAddonAction:Oe+\"lp\u002Fv1\u002Faddon\u002Faction-n\",apiAddonsPurchase:Oe+\"lp\u002Fv1\u002Faddon\u002Finfo-addons-purchase\",apiSearchCourses:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course\",apiSearchUsers:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user\",apiAssignUserCourse:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fassign-user-course\",apiUnAssignUserCourse:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Funassign-user-course\"}),\"undefined\"!=typeof lpData&&(Oe=lpData.lp_rest_url,be.frontend={apiWidgets:Oe+\"lp\u002Fv1\u002Fwidgets\u002Fapi\",apiCourses:Oe+\"lp\u002Fv1\u002Fcourses\u002Farchive-course\",apiAJAX:Oe+\"lp\u002Fv1\u002Fload_content_via_ajax\u002F\",apiProfileCoverImage:Oe+\"lp\u002Fv1\u002Fprofile\u002Fcover-image\"}),Oe&&(be.apiCourses=Oe+\"lp\u002Fv1\u002Fcourses\u002F\");const we=be,_e={buildTomSelect(e,t,s,i,n){if(!e)return;const o={plugins:{remove_button:{title:\"Remove this item\"},dropdown_input:{}},onInitialize(){},onItemAdd(t){if(s){const o=Array.from(e.selectedOptions).map(e=>e.value);o.push(t),i.id_not_in=o.join(\",\"),s(\"\",i,n)}}};return s&&(o.load=(t,o)=>{const r=Array.from(e.selectedOptions).map(e=>e.value);i.id_not_in=r.join(\",\"),s(t,i,_e.callBackTomSelectSearchAPI(o,n))}),(t={...o,...t}).options,new ye(e,t)},callBackTomSelectSearchAPI:(e,t)=>({success:s=>{const i=t.success(s);e(i)}}),fetchCourses(t=\"\",s={},i){const n=we.admin.apiSearchCourses;s.search=t;const o={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(s)};e(n,o,i)},fetchUsers(t=\"\",s={},i){const n=we.admin.apiSearchUsers;s.search=t;const o={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(s)};e(n,o,i)}},Se=(e,t={})=>e?null!=e.tomSelectInstance?null:void(e.tomSelectInstance=_e.buildTomSelect(e,t)):null,Ae=()=>{if(\"0\"===lpDataAdmin.show_search_author_field)return;const e=document.querySelector(\"#posts-filter\");if(!e)return;let t=e.querySelector(\".search-box\");t||(e.insertAdjacentHTML(\"afterbegin\",lpDataAdmin.show_search_author_field),t=e.querySelector(\".search-box\")),t&&(t.querySelector(\"select#author\")||(()=>{let s=\"\";const i=lpDataAdmin.urlParams.author;i&&(s=JSON.stringify(i));const n={urlApi:we.admin.apiSearchUsers,dataType:\"users\",keyGetValue:{value:\"ID\",text:\"{{display_name}}(#{{ID}}) - {{user_email}}\",key_render:{display_name:\"display_name\",user_email:\"user_email\",ID:\"ID\"}},setting:{placeholder:\"Choose user\"}},o=`\u003Cselect data-struct='${JSON.stringify(n)}' style='display:none;' data-saved='${s}'\\n\\t\\t\\t\\t\\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">\u003C\u002Fselect>`,r=t.querySelector('input[name=\"s\"]');r&&r.insertAdjacentHTML(\"afterend\",o);const a=e.querySelector('input[name=\"author\"]');a&&a.remove()})())},Ce=()=>{const t=document.querySelectorAll(\"select.lp-tom-select:not(.loaded)\");t.length&&t.forEach(t=>{t.closest(\".widget-liquid-left\")||((t,s={},i={})=>{var n,o;if(!t)return;if(t.classList.contains(\"loaded\"))return;t.classList.add(\"loaded\");const r=t.dataset?.saved?JSON.parse(t.dataset.saved):0,a=t?.dataset?.struct?JSON.parse(t.dataset.struct):\"\";if(!a)return void Se(t);const l=(e,t)=>{const s=t.parentElement;return s.tagName.toLowerCase()===e?s:\"html\"!==s.tagName.toLowerCase()&&l(e,s)},c=l(\"form\",t);if(c){const e=c.querySelector('input[name=\"'+t.getAttribute(\"name\")+'\"]');e&&e.remove()}const d=null!==(n=a.dataSendApi)&&void 0!==n?n:\"\",u=null!==(o=a.urlApi)&&void 0!==o?o:\"\",p={...a.setting,...s};if(!u)return void Se(t,p);const h=(t=\"\",s,i)=>{const n=u,o={current_ids:r,...d,...s};o.search=t;const a={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(o)};e(n,a,i)},g={success:e=>{((e,t,s,i,n={},o)=>{if(!(e&&t&&s&&i&&o))return;const r=e=>{if(!s.keyGetValue?.text||!s.keyGetValue.key_render)return;let t=s.keyGetValue.text;for(const[i,n]of Object.entries(s.keyGetValue.key_render))t=t.replace(new RegExp(`{{${n}}}`,\"g\"),e[n]);return t},a=t.dataset?.saved?JSON.parse(t.dataset.saved):0;let l=[];e.data[s.dataType].length>0&&(l=e.data[s.dataType].map(e=>({value:e[s.keyGetValue.value],text:r(e)})));const c={items:a,render:{item:(e,t)=>`\u003Cli data-id=\"${e.value}\">\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class=\"item\">${e.text}\u003C\u002Fdiv>\\n\\t\\t\\t\\t\\t\u003C\u002Fli>`},onChange:e=>{e.length\u003C1&&(t.value=\"\")},...n,options:l};null!=t.tomSelectInstance?t.tomSelectInstance.addOptions(l):t.tomSelectInstance=_e.buildTomSelect(t,c,i,{},o)})(e,t,a,h,p,g)}};let f=[];\"object\"==typeof r&&(f=Object.entries(r).map(([e,t])=>({key:e,value:t}))),d?.id_not_in&&(f=[...f,...d.id_not_in]),i.id_not_in=f.join(\",\"),h(\"\",i,g)})(t)})};!function(e){const t=function(t){const s=e(this).addClass(\"disabled\");t.preventDefault(),e.post({url:s.attr(\"href\"),data:{\"lp-ajax\":\"create-pages\"},dataType:\"text\",success:function(e){const t=s.closest(\".lp-notice\").html(\"\u003Cp>\"+e+\"\u003C\u002Fp>\");setTimeout(function(){t.fadeOut()},2e3)}})},s=()=>{e(\".lp-meta-box__file\").each((t,s)=>{let i;const n=e(s).find(\".lp-meta-box__file_input\"),o=e(s).find(\".lp-meta-box__file_list\"),r=e(s).find(\".btn-upload\"),a=!!e(s).data(\"multil\");e(r).on(\"click\",e=>{e.preventDefault(),i||(i=wp.media({states:[new wp.media.controller.Library({filterable:\"all\",multiple:a})]}),i.on(\"select\",function(){const e=i.state().get(\"selection\");let t=n.val();e.forEach(function(e){(e=e.toJSON()).id&&(a?t=t?t+\",\"+e.id:e.id:(t=e.id,o.empty()),o.append('\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"'+e.id+'\">\u003Cimg class=\"is_file\" src=\"'+e.icon+'\" \u002F>\u003Cspan>'+e.filename+'\u003C\u002Fspan>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'))}),l(),n.val(t)})),i.open()}),a&&o.sortable({items:\"li.image\",cursor:\"move\",scrollSensitivity:40,forcePlaceholderSize:!0,forceHelperSize:!1,helper:\"clone\",opacity:.65,placeholder:\"lp-metabox-sortable-placeholder\",start(e,t){t.item.css(\"background-color\",\"#f6f6f6\")},stop(e,t){t.item.removeAttr(\"style\")},update(){let t=\"\";o.find(\"li.image\").css(\"cursor\",\"default\").each(function(){const s=e(this).attr(\"data-attachment_id\");t=t+s+\",\"}),l(),n.val(t)}});const l=()=>{e(o).find(\"li.image\").each((t,s)=>{e(s).find(\"a.delete\").on(\"click\",function(){if(e(s).remove(),a){let t=\"\";e(o).find(\"li.image\").css(\"cursor\",\"default\").each(function(){const s=e(this).attr(\"data-attachment_id\");t=t+s+\",\"}),n.val(t)}else n.val(\"\");return!1})})};l()})};e(document).ready(function(){if(s(),e(\".learn-press-dropdown-pages\").LP(\"DropdownPages\"),e(\".learn-press-tip\").LP(\"QuickTip\"),e(document).on(\"click\",\"#learn-press-create-pages\",t).on(\"mousedown\",\".lp-sortable-handle\",function(t){e(\"html, body\").addClass(\"lp-item-moving\"),e(t.target).closest(\".lp-sortable-handle\").css(\"cursor\",\"inherit\")}).on(\"mouseup\",function(t){e(\"html, body\").removeClass(\"lp-item-moving\"),e(\".lp-sortable-handle\").css(\"cursor\",\"\")}),window.location.hash){const t=window.location.hash;if(\"#_lp_passing_grade\"===t){const s=document.querySelector(t);e(\"html, body\").animate({scrollTop:e(t).offset().top},900,\"swing\"),s.parentNode.style.border=\"2px solid orangered\"}}})}(jQuery),document.addEventListener(\"click\",e=>{((e,t)=>{if(\"INPUT\"===t.tagName)if(t.closest(\".forminp \")){const e=t.name.replace(\"learn_press_\",\"\"),s=document.querySelectorAll(`.show_if_${e}`);s&&s.forEach(e=>{e.classList.toggle(\"lp-option-disabled\")})}else if(t.closest(\".lp-meta-box\")){const e=t.closest(\".lp-meta-box\"),s=t.name,i=e.querySelectorAll(`[data-dependency=\"${s}\"]`);i&&i.forEach(e=>{e.classList.toggle(\"lp-option-disabled\")})}})(0,e.target),Ce()}),document.addEventListener(\"DOMContentLoaded\",()=>{Ae(),Ce()}),t(\"select.lp-tom-select\",e=>{Ce()}),t(\"#posts-filter\",e=>{Ae()}),window.lpFindTomSelect=Ce})();\n\\ No newline at end of file\n+(()=>{\"use strict\";const e=(e,t={},s={})=>{\"function\"==typeof s.before&&s.before(),fetch(e,{method:\"GET\",...t}).then(e=>e.json()).then(e=>{\"function\"==typeof s.success&&s.success(e)}).catch(e=>{\"function\"==typeof s.error&&s.error(e)}).finally(()=>{\"function\"==typeof s.completed&&s.completed()})},t=(e,t)=>{const s=document.querySelector(e);if(s)return void t(s);const i=new MutationObserver((s,i)=>{const n=document.querySelector(e);n&&(i.disconnect(),t(n))});i.observe(document.documentElement,{childList:!0,subtree:!0})};function s(e,t){e.split(\u002F\\s+\u002F).forEach(e=>{t(e)})}class i{constructor(){this._events={}}on(e,t){s(e,e=>{const s=this._events[e]||[];s.push(t),this._events[e]=s})}off(e,t){var i=arguments.length;0!==i?s(e,e=>{if(1===i)return void delete this._events[e];const s=this._events[e];void 0!==s&&(s.splice(s.indexOf(t),1),this._events[e]=s)}):this._events={}}trigger(e,...t){var i=this;s(e,e=>{const s=i._events[e];void 0!==s&&s.forEach(e=>{e.apply(i,t)})})}}const n=e=>(e=e.filter(Boolean)).length\u003C2?e[0]||\"\":1==c(e)?\"[\"+e.join(\"\")+\"]\":\"(?:\"+e.join(\"|\")+\")\",o=e=>{if(!a(e))return e.join(\"\");let t=\"\",s=0;const i=()=>{s>1&&(t+=\"{\"+s+\"}\")};return e.forEach((n,o)=>{n!==e[o-1]?(i(),t+=n,s=1):s++}),i(),t},r=e=>{let t=Array.from(e);return n(t)},a=e=>new Set(e).size!==e.length,l=e=>(e+\"\").replace(\u002F([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])\u002Fgu,\"\\\\$1\"),c=e=>e.reduce((e,t)=>Math.max(e,d(t)),0),d=e=>Array.from(e).length,u=e=>{if(1===e.length)return[[e]];let t=[];const s=e.substring(1);return u(s).forEach(function(s){let i=s.slice(0);i[0]=e.charAt(0)+i[0],t.push(i),i=s.slice(0),i.unshift(e.charAt(0)),t.push(i)}),t},p=[[0,65535]];let h,g;const f={},m={\"\u002F\":\"⁄∕\",0:\"߀\",a:\"ⱥɐɑ\",aa:\"ꜳ\",ae:\"æǽǣ\",ao:\"ꜵ\",au:\"ꜷ\",av:\"ꜹꜻ\",ay:\"ꜽ\",b:\"ƀɓƃ\",c:\"ꜿƈȼↄ\",d:\"đɗɖᴅƌꮷԁɦ\",e:\"ɛǝᴇɇ\",f:\"ꝼƒ\",g:\"ǥɠꞡᵹꝿɢ\",h:\"ħⱨⱶɥ\",i:\"ɨı\",j:\"ɉȷ\",k:\"ƙⱪꝁꝃꝅꞣ\",l:\"łƚɫⱡꝉꝇꞁɭ\",m:\"ɱɯϻ\",n:\"ꞥƞɲꞑᴎлԉ\",o:\"øǿɔɵꝋꝍᴑ\",oe:\"œ\",oi:\"ƣ\",oo:\"ꝏ\",ou:\"ȣ\",p:\"ƥᵽꝑꝓꝕρ\",q:\"ꝗꝙɋ\",r:\"ɍɽꝛꞧꞃ\",s:\"ßȿꞩꞅʂ\",t:\"ŧƭʈⱦꞇ\",th:\"þ\",tz:\"ꜩ\",u:\"ʉ\",v:\"ʋꝟʌ\",vy:\"ꝡ\",w:\"ⱳ\",y:\"ƴɏỿ\",z:\"ƶȥɀⱬꝣ\",hv:\"ƕ\"};for(let e in m){let t=m[e]||\"\";for(let s=0;s\u003Ct.length;s++){let i=t.substring(s,s+1);f[i]=e}}const v=new RegExp(Object.keys(f).join(\"|\")+\"|[̀-ͯ·ʾʼ]\",\"gu\"),y=(e,t=\"NFKD\")=>e.normalize(t),b=e=>Array.from(e).reduce((e,t)=>e+O(t),\"\"),O=e=>(e=y(e).toLowerCase().replace(v,e=>f[e]||\"\"),y(e,\"NFC\")),w=e=>{const t=(e=>{const t={},s=(e,s)=>{const i=t[e]||new Set,n=new RegExp(\"^\"+r(i)+\"$\",\"iu\");s.match(n)||(i.add(l(s)),t[e]=i)};for(let t of function*(e){for(const[t,s]of e)for(let e=t;e\u003C=s;e++){let t=String.fromCharCode(e),s=b(t);s!=t.toLowerCase()&&(s.length>3||0!=s.length&&(yield{folded:s,composed:t,code_point:e}))}}(e))s(t.folded,t.folded),s(t.folded,t.composed);return t})(e),s={};let i=[];for(let e in t){let n=t[e];n&&(s[e]=r(n)),e.length>1&&i.push(l(e))}i.sort((e,t)=>t.length-e.length);const o=n(i);return g=new RegExp(\"^\"+o,\"u\"),s},_=(e,t=1)=>(t=Math.max(t,e.length-1),n(u(e).map(e=>((e,t=1)=>{let s=0;return e=e.map(e=>(h[e]&&(s+=e.length),h[e]||e)),s>=t?o(e):\"\"})(e,t)))),S=(e,t=!0)=>{let s=e.length>1?1:0;return n(e.map(e=>{let i=[];const n=t?e.length():e.length()-1;for(let t=0;t\u003Cn;t++)i.push(_(e.substrs[t]||\"\",s));return o(i)}))},A=(e,t)=>{for(const s of t){if(s.start!=e.start||s.end!=e.end)continue;if(s.substrs.join(\"\")!==e.substrs.join(\"\"))continue;let t=e.parts;const i=e=>{for(const s of t){if(s.start===e.start&&s.substr===e.substr)return!1;if(1!=e.length&&1!=s.length){if(e.start\u003Cs.start&&e.end>s.start)return!0;if(s.start\u003Ce.start&&s.end>e.start)return!0}}return!1};if(!(s.parts.filter(i).length>0))return!0}return!1};class C{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(e){e&&(this.parts.push(e),this.substrs.push(e.substr),this.start=Math.min(e.start,this.start),this.end=Math.max(e.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(e,t){let s=new C,i=JSON.parse(JSON.stringify(this.parts)),n=i.pop();for(const e of i)s.add(e);let o=t.substr.substring(0,e-n.start),r=o.length;return s.add({start:n.start,end:n.start+r,length:r,substr:o}),s}}const I=(e,t)=>{if(e)return e[t]},x=(e,t)=>{if(e){for(var s,i=t.split(\".\");(s=i.shift())&&(e=e[s]););return e}},k=(e,t,s)=>{var i,n;return e?(e+=\"\",null==t.regex||-1===(n=e.search(t.regex))?0:(i=t.string.length\u002Fe.length,0===n&&(i+=.5),i*s)):0},L=(e,t)=>{var s=e[t];if(\"function\"==typeof s)return s;s&&!Array.isArray(s)&&(e[t]=[s])},E=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)},F=(e,t)=>\"number\"==typeof e&&\"number\"==typeof t?e>t?1:e\u003Ct?-1:0:(e=b(e+\"\").toLowerCase())>(t=b(t+\"\").toLowerCase())?1:t>e?-1:0;class T{items;settings;constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,s){if(!e||!e.length)return[];const i=[],n=e.split(\u002F\\s+\u002F);var o;return s&&(o=new RegExp(\"^(\"+Object.keys(s).map(l).join(\"|\")+\"):(.*)$\")),n.forEach(e=>{let s,n=null,r=null;o&&(s=e.match(o))&&(n=s[1],e=s[2]),e.length>0&&(r=this.settings.diacritics?(e=>{void 0===h&&(h=w(p)),e=b(e);let t=\"\",s=[new C];for(let i=0;i\u003Ce.length;i++){let n=e.substring(i).match(g);const o=e.substring(i,i+1),r=n?n[0]:null;let a=[],l=new Set;for(const e of s){const t=e.last();if(!t||1==t.length||t.end\u003C=i)if(r){const t=r.length;e.add({start:i,end:i+t,length:t,substr:r}),l.add(\"1\")}else e.add({start:i,end:i+1,length:1,substr:o}),l.add(\"2\");else if(r){let s=e.clone(i,t);const n=r.length;s.add({start:i,end:i+n,length:n,substr:r}),a.push(s)}else l.add(\"3\")}if(a.length>0){a=a.sort((e,t)=>e.length()-t.length());for(let e of a)A(e,s)||s.push(e)}else if(i>0&&1==l.size&&!l.has(\"3\")){t+=S(s,!1);let e=new C;const i=s[0];i&&e.add(i.last()),s=[e]}}return t+=S(s,!0),t})(e)||null:l(e),r&&t&&(r=\"\\\\b\"+r)),i.push({string:e,regex:r?new RegExp(r,\"iu\"):null,field:n})}),i}getScoreFunction(e,t){var s=this.prepareSearch(e,t);return this._getScoreFunction(s)}_getScoreFunction(e){const t=e.tokens,s=t.length;if(!s)return function(){return 0};const i=e.options.fields,n=e.weights,o=i.length,r=e.getAttrFn;if(!o)return function(){return 1};const a=1===o?function(e,t){const s=i[0].field;return k(r(t,s),e,n[s]||1)}:function(e,t){var s=0;if(e.field){const i=r(t,e.field);!e.regex&&i?s+=1\u002Fo:s+=k(i,e,1)}else E(n,(i,n)=>{s+=k(r(t,n),e,i)});return s\u002Fo};return 1===s?function(e){return a(t[0],e)}:\"and\"===e.options.conjunction?function(e){var i,n=0;for(let s of t){if((i=a(s,e))\u003C=0)return 0;n+=i}return n\u002Fs}:function(e){var i=0;return E(t,t=>{i+=a(t,e)}),i\u002Fs}}getSortFunction(e,t){var s=this.prepareSearch(e,t);return this._getSortFunction(s)}_getSortFunction(e){var t,s=[];const i=this,n=e.options,o=!e.query&&n.sort_empty?n.sort_empty:n.sort;if(\"function\"==typeof o)return o.bind(this);const r=function(t,s){return\"$score\"===t?s.score:e.getAttrFn(i.items[s.id],t)};if(o)for(let t of o)(e.query||\"$score\"!==t.field)&&s.push(t);if(e.query){t=!0;for(let e of s)if(\"$score\"===e.field){t=!1;break}t&&s.unshift({field:\"$score\",direction:\"desc\"})}else s=s.filter(e=>\"$score\"!==e.field);return s.length?function(e,t){var i,n;for(let o of s)if(n=o.field,i=(\"desc\"===o.direction?-1:1)*F(r(n,e),r(n,t)))return i;return 0}:null}prepareSearch(e,t){const s={};var i=Object.assign({},t);if(L(i,\"sort\"),L(i,\"sort_empty\"),i.fields){L(i,\"fields\");const e=[];i.fields.forEach(t=>{\"string\"==typeof t&&(t={field:t,weight:1}),e.push(t),s[t.field]=\"weight\"in t?t.weight:1}),i.fields=e}return{options:i,query:e.toLowerCase().trim(),tokens:this.tokenize(e,i.respect_word_boundaries,s),total:0,items:[],weights:s,getAttrFn:i.nesting?x:I}}search(e,t){var s,i,n=this;i=this.prepareSearch(e,t),t=i.options,e=i.query;const o=t.score||n._getScoreFunction(i);e.length?E(n.items,(e,n)=>{s=o(e),(!1===t.filter||s>0)&&i.items.push({score:s,id:n})}):E(n.items,(e,t)=>{i.items.push({score:1,id:t})});const r=n._getSortFunction(i);return r&&i.items.sort(r),i.total=i.items.length,\"number\"==typeof t.limit&&(i.items=i.items.slice(0,t.limit)),i}}const P=e=>null==e?null:q(e),q=e=>\"boolean\"==typeof e?e?\"1\":\"0\":e+\"\",N=e=>(e+\"\").replace(\u002F&\u002Fg,\"&amp;\").replace(\u002F\u003C\u002Fg,\"&lt;\").replace(\u002F>\u002Fg,\"&gt;\").replace(\u002F\"\u002Fg,\"&quot;\"),j=(e,t)=>{var s;return function(i,n){var o=this;s&&(o.loading=Math.max(o.loading-1,0),clearTimeout(s)),s=setTimeout(function(){s=null,o.loadedSearches[i]=!0,e.call(o,i,n)},t)}},D=(e,t,s)=>{var i,n=e.trigger,o={};for(i of(e.trigger=function(){var s=arguments[0];if(-1===t.indexOf(s))return n.apply(e,arguments);o[s]=arguments},s.apply(e,[]),e.trigger=n,t))i in o&&n.apply(e,o[i])},$=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},V=(e,t,s,i)=>{e.addEventListener(t,s,i)},H=(e,t)=>!!t&&!!t[e]&&1==(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0),M=(e,t)=>e.getAttribute(\"id\")||(e.setAttribute(\"id\",t),t),R=e=>e.replace(\u002F[\\\\\"']\u002Fg,\"\\\\$&\"),z=(e,t)=>{t&&e.append(t)},B=(e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)},K=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(G(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},G=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1,Q=(e,t)=>{var s=document.createEvent(\"HTMLEvents\");s.initEvent(t,!0,!1),e.dispatchEvent(s)},U=(e,t)=>{Object.assign(e.style,t)},J=(e,...t)=>{var s=X(t);(e=Y(e)).map(e=>{s.map(t=>{e.classList.add(t)})})},W=(e,...t)=>{var s=X(t);(e=Y(e)).map(e=>{s.map(t=>{e.classList.remove(t)})})},X=e=>{var t=[];return B(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)},Y=e=>(Array.isArray(e)||(e=[e]),e),Z=(e,t,s)=>{if(!s||s.contains(e))for(;e&&e.matches;){if(e.matches(t))return e;e=e.parentNode}},ee=(e,t=0)=>t>0?e[e.length-1]:e[0],te=(e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s},se=(e,t)=>{B(t,(t,s)=>{null==t?e.removeAttribute(s):e.setAttribute(s,\"\"+t)})},ie=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},ne=\"undefined\"!=typeof navigator&&\u002FMac\u002F.test(navigator.userAgent)?\"metaKey\":\"ctrlKey\",oe={options:[],optgroups:[],plugins:[],delimiter:\",\",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:\"loading\",dataAttr:null,optgroupField:\"optgroup\",valueField:\"value\",labelField:\"text\",disabledField:\"disabled\",optgroupLabelField:\"label\",optgroupValueField:\"value\",lockOptgroupOrder:!1,sortField:\"$order\",searchField:[\"text\"],searchConjunction:\"and\",mode:null,wrapperClass:\"ts-wrapper\",controlClass:\"ts-control\",dropdownClass:\"ts-dropdown\",dropdownContentClass:\"ts-dropdown-content\",itemClass:\"item\",optionClass:\"option\",dropdownParent:null,controlInput:'\u003Cinput type=\"text\" autocomplete=\"off\" size=\"1\" \u002F>',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}};function re(e,t){var s=Object.assign({},oe,t),i=s.dataAttr,n=s.labelField,o=s.valueField,r=s.disabledField,a=s.optgroupField,l=s.optgroupLabelField,c=s.optgroupValueField,d=e.tagName.toLowerCase(),u=e.getAttribute(\"placeholder\")||e.getAttribute(\"data-placeholder\");if(!u&&!s.allowEmptyOption){let t=e.querySelector('option[value=\"\"]');t&&(u=t.textContent)}var p={placeholder:u,options:[],optgroups:[],items:[],maxItems:null};return\"select\"===d?(()=>{var t,d=p.options,u={},h=1;let g=0;var f=e=>{var t=Object.assign({},e.dataset),s=i&&t[i];return\"string\"==typeof s&&s.length&&(t=Object.assign(t,JSON.parse(s))),t},m=(e,t)=>{var i=P(e.value);if(null!=i&&(i||s.allowEmptyOption)){if(u.hasOwnProperty(i)){if(t){var l=u[i][a];l?Array.isArray(l)?l.push(t):u[i][a]=[l,t]:u[i][a]=t}}else{var c=f(e);c[n]=c[n]||e.textContent,c[o]=c[o]||i,c[r]=c[r]||e.disabled,c[a]=c[a]||t,c.$option=e,c.$order=c.$order||++g,u[i]=c,d.push(c)}e.selected&&p.items.push(i)}};p.maxItems=e.hasAttribute(\"multiple\")?null:1,B(e.children,e=>{var s,i,n;\"optgroup\"===(t=e.tagName.toLowerCase())?((n=f(s=e))[l]=n[l]||s.getAttribute(\"label\")||\"\",n[c]=n[c]||h++,n[r]=n[r]||s.disabled,n.$order=n.$order||++g,p.optgroups.push(n),i=n[c],B(s.children,e=>{m(e,i)})):\"option\"===t&&m(e)})})():(()=>{const t=e.getAttribute(i);if(t)p.options=JSON.parse(t),B(p.options,e=>{p.items.push(e[o])});else{var r=e.value.trim()||\"\";if(!s.allowEmptyOption&&!r.length)return;const t=r.split(s.delimiter);B(t,e=>{const t={};t[n]=e,t[o]=e,p.options.push(t)}),p.items=t}})(),Object.assign({},oe,p,t)}var ae=0;class le extends(function(e){return e.plugins={},class extends e{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,s){e.plugins[t]={name:t,fn:s}}initializePlugins(e){var t,s;const i=this,n=[];if(Array.isArray(e))e.forEach(e=>{\"string\"==typeof e?n.push(e):(i.plugins.settings[e.name]=e.options,n.push(e.name))});else if(e)for(t in e)e.hasOwnProperty(t)&&(i.plugins.settings[t]=e[t],n.push(t));for(;s=n.shift();)i.require(s)}loadPlugin(t){var s=this,i=s.plugins,n=e.plugins[t];if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find \"'+t+'\" plugin');i.requested[t]=!0,i.loaded[t]=n.fn.apply(s,[s.plugins.settings[t]||{}]),i.names.push(t)}require(e){var t=this,s=t.plugins;if(!t.plugins.loaded.hasOwnProperty(e)){if(s.requested[e])throw new Error('Plugin has circular dependency (\"'+e+'\")');t.loadPlugin(e)}return s.loaded[e]}}}(i)){constructor(e,t){var s;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue=\"\",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,ae++;var i=K(e);if(i.tomselect)throw new Error(\"Tom Select already initialized on this element\");i.tomselect=this,s=(window.getComputedStyle&&window.getComputedStyle(i,null)).getPropertyValue(\"direction\");const n=re(i,t);this.settings=n,this.input=i,this.tabIndex=i.tabIndex||0,this.is_select_tag=\"select\"===i.tagName.toLowerCase(),this.rtl=\u002Frtl\u002Fi.test(s),this.inputId=M(i,\"tomselect-\"+ae),this.isRequired=i.required,this.sifter=new T(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?\"single\":\"multi\"),\"boolean\"!=typeof n.hideSelected&&(n.hideSelected=\"multi\"===n.mode),\"boolean\"!=typeof n.hidePlaceholder&&(n.hidePlaceholder=\"multi\"!==n.mode);var o=n.createFilter;\"function\"!=typeof o&&(\"string\"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=e=>this.settings.duplicates||!this.options[e]),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates();const r=K(\"\u003Cdiv>\"),a=K(\"\u003Cdiv>\"),l=this._render(\"dropdown\"),c=K('\u003Cdiv role=\"listbox\" tabindex=\"-1\">'),d=this.input.getAttribute(\"class\")||\"\",u=n.mode;var p;J(r,n.wrapperClass,d,u),J(a,n.controlClass),z(r,a),J(l,n.dropdownClass,u),n.copyClassesToDropdown&&J(l,d),J(c,n.dropdownContentClass),z(l,c),K(n.dropdownParent||r).appendChild(l),G(n.controlInput)?(p=K(n.controlInput),B([\"autocorrect\",\"autocapitalize\",\"autocomplete\",\"spellcheck\"],e=>{i.getAttribute(e)&&se(p,{[e]:i.getAttribute(e)})}),p.tabIndex=-1,a.appendChild(p),this.focus_node=p):n.controlInput?(p=K(n.controlInput),this.focus_node=p):(p=K(\"\u003Cinput\u002F>\"),this.focus_node=a),this.wrapper=r,this.dropdown=l,this.dropdown_content=c,this.control=a,this.control_input=p,this.setup()}setup(){const e=this,t=e.settings,s=e.control_input,i=e.dropdown,n=e.dropdown_content,o=e.wrapper,r=e.control,a=e.input,c=e.focus_node,d={passive:!0},u=e.inputId+\"-ts-dropdown\";se(n,{id:u}),se(c,{role:\"combobox\",\"aria-haspopup\":\"listbox\",\"aria-expanded\":\"false\",\"aria-controls\":u});const p=M(c,e.inputId+\"-ts-control\"),h=\"label[for='\"+(e=>e.replace(\u002F['\"\\\\]\u002Fg,\"\\\\$&\"))(e.inputId)+\"']\",g=document.querySelector(h),f=e.focus.bind(e);if(g){V(g,\"click\",f),se(g,{for:p});const t=M(g,e.inputId+\"-ts-label\");se(c,{\"aria-labelledby\":t}),se(n,{\"aria-labelledby\":t})}if(o.style.width=a.style.width,e.plugins.names.length){const t=\"plugin-\"+e.plugins.names.join(\" plugin-\");J([o,i],t)}(null===t.maxItems||t.maxItems>1)&&e.is_select_tag&&se(a,{multiple:\"multiple\"}),t.placeholder&&se(s,{placeholder:t.placeholder}),!t.splitOn&&t.delimiter&&(t.splitOn=new RegExp(\"\\\\s*\"+l(t.delimiter)+\"+\\\\s*\")),t.load&&t.loadThrottle&&(t.load=j(t.load,t.loadThrottle)),V(i,\"mousemove\",()=>{e.ignoreHover=!1}),V(i,\"mouseenter\",t=>{var s=Z(t.target,\"[data-selectable]\",i);s&&e.onOptionHover(t,s)},{capture:!0}),V(i,\"click\",t=>{const s=Z(t.target,\"[data-selectable]\");s&&(e.onOptionSelect(t,s),$(t,!0))}),V(r,\"click\",t=>{var i=Z(t.target,\"[data-ts-item]\",r);i&&e.onItemSelect(t,i)?$(t,!0):\"\"==s.value&&(e.onClick(),$(t,!0))}),V(c,\"keydown\",t=>e.onKeyDown(t)),V(s,\"keypress\",t=>e.onKeyPress(t)),V(s,\"input\",t=>e.onInput(t)),V(c,\"blur\",t=>e.onBlur(t)),V(c,\"focus\",t=>e.onFocus(t)),V(s,\"paste\",t=>e.onPaste(t));const m=t=>{const n=t.composedPath()[0];if(!o.contains(n)&&!i.contains(n))return e.isFocused&&e.blur(),void e.inputState();n==s&&e.isOpen?t.stopPropagation():$(t,!0)},v=()=>{e.isOpen&&e.positionDropdown()};V(document,\"mousedown\",m),V(window,\"scroll\",v,d),V(window,\"resize\",v,d),this._destroy=()=>{document.removeEventListener(\"mousedown\",m),window.removeEventListener(\"scroll\",v),window.removeEventListener(\"resize\",v),g&&g.removeEventListener(\"click\",f)},this.revertSettings={innerHTML:a.innerHTML,tabIndex:a.tabIndex},a.tabIndex=-1,a.insertAdjacentElement(\"afterend\",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,V(a,\"invalid\",()=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())}),e.updateOriginalInput(),e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,a.disabled?e.disable():a.readOnly?e.setReadOnly(!0):e.enable(),e.on(\"change\",this.onChange),J(a,\"tomselected\",\"ts-hidden-accessible\"),e.trigger(\"initialize\"),!0===t.preload&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),B(t,e=>{this.registerOptionGroup(e)})}setupTemplates(){var e=this,t=e.settings.labelField,s=e.settings.optgroupLabelField,i={optgroup:e=>{let t=document.createElement(\"div\");return t.className=\"optgroup\",t.appendChild(e.options),t},optgroup_header:(e,t)=>'\u003Cdiv class=\"optgroup-header\">'+t(e[s])+\"\u003C\u002Fdiv>\",option:(e,s)=>\"\u003Cdiv>\"+s(e[t])+\"\u003C\u002Fdiv>\",item:(e,s)=>\"\u003Cdiv>\"+s(e[t])+\"\u003C\u002Fdiv>\",option_create:(e,t)=>'\u003Cdiv class=\"create\">Add \u003Cstrong>'+t(e.input)+\"\u003C\u002Fstrong>&hellip;\u003C\u002Fdiv>\",no_results:()=>'\u003Cdiv class=\"no-results\">No results found\u003C\u002Fdiv>',loading:()=>'\u003Cdiv class=\"spinner\">\u003C\u002Fdiv>',not_loading:()=>{},dropdown:()=>\"\u003Cdiv>\u003C\u002Fdiv>\"};e.settings.render=Object.assign({},i,e.settings.render)}setupCallbacks(){var e,t,s={initialize:\"onInitialize\",change:\"onChange\",item_add:\"onItemAdd\",item_remove:\"onItemRemove\",item_select:\"onItemSelect\",clear:\"onClear\",option_add:\"onOptionAdd\",option_remove:\"onOptionRemove\",option_clear:\"onOptionClear\",optgroup_add:\"onOptionGroupAdd\",optgroup_remove:\"onOptionGroupRemove\",optgroup_clear:\"onOptionGroupClear\",dropdown_open:\"onDropdownOpen\",dropdown_close:\"onDropdownClose\",type:\"onType\",load:\"onLoad\",focus:\"onFocus\",blur:\"onBlur\"};for(e in s)(t=this.settings[s[e]])&&this.on(e,t)}sync(e=!0){const t=this,s=e?re(t.input,{delimiter:t.settings.delimiter}):t.settings;t.setupOptions(s.options,s.optgroups),t.setValue(s.items||[],!0),t.lastQuery=null}onClick(){var e=this;if(e.activeItems.length>0)return e.clearActiveItems(),void e.focus();e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){Q(this.input,\"input\"),Q(this.input,\"change\")}onPaste(e){var t=this;t.isInputHidden||t.isLocked?$(e):t.settings.splitOn&&setTimeout(()=>{var e=t.inputValue();if(e.match(t.settings.splitOn)){var s=e.trim().split(t.settings.splitOn);B(s,e=>{P(e)&&(this.options[e]?t.addItem(e):t.createItem(e))})}},0)}onKeyPress(e){var t=this;if(!t.isLocked){var s=String.fromCharCode(e.keyCode||e.which);return t.settings.create&&\"multi\"===t.settings.mode&&s===t.settings.delimiter?(t.createItem(),void $(e)):void 0}$(e)}onKeyDown(e){var t=this;if(t.ignoreHover=!0,t.isLocked)9!==e.keyCode&&$(e);else{switch(e.keyCode){case 65:if(H(ne,e)&&\"\"==t.control_input.value)return $(e),void t.selectAll();break;case 27:return t.isOpen&&($(e,!0),t.close()),void t.clearActiveItems();case 40:if(!t.isOpen&&t.hasOptions)t.open();else if(t.activeOption){let e=t.getAdjacent(t.activeOption,1);e&&t.setActiveOption(e)}return void $(e);case 38:if(t.activeOption){let e=t.getAdjacent(t.activeOption,-1);e&&t.setActiveOption(e)}return void $(e);case 13:return void(t.canSelect(t.activeOption)?(t.onOptionSelect(e,t.activeOption),$(e)):(t.settings.create&&t.createItem()||document.activeElement==t.control_input&&t.isOpen)&&$(e));case 37:return void t.advanceSelection(-1,e);case 39:return void t.advanceSelection(1,e);case 9:return void(t.settings.selectOnTab&&(t.canSelect(t.activeOption)&&(t.onOptionSelect(e,t.activeOption),$(e)),t.settings.create&&t.createItem()&&$(e)));case 8:case 46:return void t.deleteSelection(e)}t.isInputHidden&&!H(ne,e)&&$(e)}}onInput(e){if(this.isLocked)return;const t=this.inputValue();var s,i;this.lastValue!==t&&(this.lastValue=t,\"\"!=t?(this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=(s=()=>{this.refreshTimeout=null,this._onInput()},(i=this.settings.refreshThrottle)>0?window.setTimeout(s,i):(s.call(null),null))):this._onInput())}_onInput(){const e=this.lastValue;this.settings.shouldLoad.call(this,e)&&this.load(e),this.refreshOptions(),this.trigger(\"type\",e)}onOptionHover(e,t){this.ignoreHover||this.setActiveOption(t,!1)}onFocus(e){var t=this,s=t.isFocused;if(t.isDisabled||t.isReadOnly)return t.blur(),void $(e);t.ignoreFocus||(t.isFocused=!0,\"focus\"===t.settings.preload&&t.preload(),s||t.trigger(\"focus\"),t.activeItems.length||(t.inputState(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(!1!==document.hasFocus()){var t=this;if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1;var s=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger(\"blur\")};t.settings.create&&t.settings.createOnBlur?t.createItem(null,s):s()}}}onOptionSelect(e,t){var s,i=this;t.parentElement&&t.parentElement.matches(\"[data-disabled]\")||(t.classList.contains(\"create\")?i.createItem(null,()=>{i.settings.closeAfterSelect&&i.close()}):void 0!==(s=t.dataset.value)&&(i.lastQuery=null,i.addItem(s),i.settings.closeAfterSelect&&i.close(),!i.settings.hideSelected&&e.type&&\u002Fclick\u002F.test(e.type)&&i.setActiveOption(t)))}canSelect(e){return!!(this.isOpen&&e&&this.dropdown_content.contains(e))}onItemSelect(e,t){var s=this;return!s.isLocked&&\"multi\"===s.settings.mode&&($(e),s.setActiveItem(t,e),!0)}canLoad(e){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(e)}load(e){const t=this;if(!t.canLoad(e))return;J(t.wrapper,t.settings.loadingClass),t.loading++;const s=t.loadCallback.bind(t);t.settings.load.call(t,e,s)}loadCallback(e,t){const s=this;s.loading=Math.max(s.loading-1,0),s.lastQuery=null,s.clearActiveOption(),s.setupOptions(e,t),s.refreshOptions(s.isFocused&&!s.isInputHidden),s.loading||W(s.wrapper,s.settings.loadingClass),s.trigger(\"load\",e,t)}preload(){var e=this.wrapper.classList;e.contains(\"preloaded\")||(e.add(\"preloaded\"),this.load(\"\"))}setTextboxValue(e=\"\"){var t=this.control_input;t.value!==e&&(t.value=e,Q(t,\"update\"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute(\"multiple\")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){D(this,t?[]:[\"change\"],()=>{this.clear(t),this.addItems(e,t)})}setMaxItems(e){0===e&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var s,i,n,o,r,a,l=this;if(\"single\"!==l.settings.mode){if(!e)return l.clearActiveItems(),void(l.isFocused&&l.inputState());if(\"click\"===(s=t&&t.type.toLowerCase())&&H(\"shiftKey\",t)&&l.activeItems.length){for(a=l.getLastActive(),(n=Array.prototype.indexOf.call(l.control.children,a))>(o=Array.prototype.indexOf.call(l.control.children,e))&&(r=n,n=o,o=r),i=n;i\u003C=o;i++)e=l.control.children[i],-1===l.activeItems.indexOf(e)&&l.setActiveItemClass(e);$(t)}else\"click\"===s&&H(ne,t)||\"keydown\"===s&&H(\"shiftKey\",t)?e.classList.contains(\"active\")?l.removeActiveItem(e):l.setActiveItemClass(e):(l.clearActiveItems(),l.setActiveItemClass(e));l.inputState(),l.isFocused||l.focus()}}setActiveItemClass(e){const t=this,s=t.control.querySelector(\".last-active\");s&&W(s,\"last-active\"),J(e,\"active last-active\"),t.trigger(\"item_select\",e),-1==t.activeItems.indexOf(e)&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e);this.activeItems.splice(t,1),W(e,\"active\")}clearActiveItems(){W(this.activeItems,\"active\"),this.activeItems=[]}setActiveOption(e,t=!0){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,se(this.focus_node,{\"aria-activedescendant\":e.getAttribute(\"id\")}),se(e,{\"aria-selected\":\"true\"}),J(e,\"active\"),t&&this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return;const s=this.dropdown_content,i=s.clientHeight,n=s.scrollTop||0,o=e.offsetHeight,r=e.getBoundingClientRect().top-s.getBoundingClientRect().top+n;r+o>i+n?this.scroll(r-i+o,t):r\u003Cn&&this.scroll(r,t)}scroll(e,t){const s=this.dropdown_content;t&&(s.style.scrollBehavior=t),s.scrollTop=e,s.style.scrollBehavior=\"\"}clearActiveOption(){this.activeOption&&(W(this.activeOption,\"active\"),se(this.activeOption,{\"aria-selected\":null})),this.activeOption=null,se(this.focus_node,{\"aria-activedescendant\":null})}selectAll(){const e=this;if(\"single\"===e.settings.mode)return;const t=e.controlChildren();t.length&&(e.inputState(),e.close(),e.activeItems=t,B(t,t=>{e.setActiveItemClass(t)}))}inputState(){var e=this;e.control.contains(e.control_input)&&(se(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&se(e.control_input,{placeholder:\"\"}),e.isInputHidden=!1),e.wrapper.classList.toggle(\"input-hidden\",e.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var e=this;e.isDisabled||e.isReadOnly||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout(()=>{e.ignoreFocus=!1,e.onFocus()},0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField;return\"string\"==typeof e.sortField&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,s,i=this,n=this.getSearchOptions();if(i.settings.score&&\"function\"!=typeof(s=i.settings.score.call(i,e)))throw new Error('Tom Select \"score\" setting must be a function that returns a function');return e!==i.lastQuery?(i.lastQuery=e,t=i.sifter.search(e,Object.assign(n,{score:s})),i.currentResults=t):t=Object.assign({},i.currentResults),i.settings.hideSelected&&(t.items=t.items.filter(e=>{let t=P(e.id);return!(t&&-1!==i.items.indexOf(t))})),t}refreshOptions(e=!0){var t,s,i,n,o,r,a,l,c,d;const u={},p=[];var h=this,g=h.inputValue();const f=g===h.lastQuery||\"\"==g&&null==h.lastQuery;var m=h.search(g),v=null,y=h.settings.shouldOpen||!1,b=h.dropdown_content;f&&(v=h.activeOption)&&(c=v.closest(\"[data-group]\")),n=m.items.length,\"number\"==typeof h.settings.maxOptions&&(n=Math.min(n,h.settings.maxOptions)),n>0&&(y=!0);const O=(e,t)=>{let s=u[e];if(void 0!==s){let e=p[s];if(void 0!==e)return[s,e.fragment]}let i=document.createDocumentFragment();return s=p.length,p.push({fragment:i,order:t,optgroup:e}),[s,i]};for(t=0;t\u003Cn;t++){let e=m.items[t];if(!e)continue;let n=e.id,a=h.options[n];if(void 0===a)continue;let l=q(n),d=h.getOption(l,!0);for(h.settings.hideSelected||d.classList.toggle(\"selected\",h.items.includes(l)),o=a[h.settings.optgroupField]||\"\",s=0,i=(r=Array.isArray(o)?o:[o])&&r.length;s\u003Ci;s++){o=r[s];let e=a.$order,t=h.optgroups[o];void 0===t?o=\"\":e=t.$order;const[i,l]=O(o,e);s>0&&(d=d.cloneNode(!0),se(d,{id:a.$id+\"-clone-\"+s,\"aria-selected\":null}),d.classList.add(\"ts-cloned\"),W(d,\"active\"),h.activeOption&&h.activeOption.dataset.value==n&&c&&c.dataset.group===o.toString()&&(v=d)),l.appendChild(d),\"\"!=o&&(u[o]=i)}}var w;h.settings.lockOptgroupOrder&&p.sort((e,t)=>e.order-t.order),a=document.createDocumentFragment(),B(p,e=>{let t=e.fragment,s=e.optgroup;if(!t||!t.children.length)return;let i=h.optgroups[s];if(void 0!==i){let e=document.createDocumentFragment(),s=h.render(\"optgroup_header\",i);z(e,s),z(e,t);let n=h.render(\"optgroup\",{group:i,options:e});z(a,n)}else z(a,t)}),b.innerHTML=\"\",z(b,a),h.settings.highlight&&(w=b.querySelectorAll(\"span.highlight\"),Array.prototype.forEach.call(w,function(e){var t=e.parentNode;t.replaceChild(e.firstChild,e),t.normalize()}),m.query.length&&m.tokens.length&&B(m.tokens,e=>{((e,t)=>{if(null===t)return;if(\"string\"==typeof t){if(!t.length)return;t=new RegExp(t,\"i\")}const s=e=>3===e.nodeType?(e=>{var s=e.data.match(t);if(s&&e.data.length>0){var i=document.createElement(\"span\");i.className=\"highlight\";var n=e.splitText(s.index);n.splitText(s[0].length);var o=n.cloneNode(!0);return i.appendChild(o),ie(n,i),1}return 0})(e):((e=>{1!==e.nodeType||!e.childNodes||\u002F(script|style)\u002Fi.test(e.tagName)||\"highlight\"===e.className&&\"SPAN\"===e.tagName||Array.from(e.childNodes).forEach(e=>{s(e)})})(e),0);s(e)})(b,e.regex)}));var _=e=>{let t=h.render(e,{input:g});return t&&(y=!0,b.insertBefore(t,b.firstChild)),t};if(h.loading?_(\"loading\"):h.settings.shouldLoad.call(h,g)?0===m.items.length&&_(\"no_results\"):_(\"not_loading\"),(l=h.canCreate(g))&&(d=_(\"option_create\")),h.hasOptions=m.items.length>0||l,y){if(m.items.length>0){if(v||\"single\"!==h.settings.mode||null==h.items[0]||(v=h.getOption(h.items[0])),!b.contains(v)){let e=0;d&&!h.settings.addPrecedence&&(e=1),v=h.selectable()[e]}}else d&&(v=d);e&&!h.isOpen&&(h.open(),h.scrollToOption(v,\"auto\")),h.setActiveOption(v)}else h.clearActiveOption(),e&&h.isOpen&&h.close(!1)}selectable(){return this.dropdown_content.querySelectorAll(\"[data-selectable]\")}addOption(e,t=!1){const s=this;if(Array.isArray(e))return s.addOptions(e,t),!1;const i=P(e[s.settings.valueField]);return null!==i&&!s.options.hasOwnProperty(i)&&(e.$order=e.$order||++s.order,e.$id=s.inputId+\"-opt-\"+e.$order,s.options[i]=e,s.lastQuery=null,t&&(s.userOptions[i]=t,s.trigger(\"option_add\",i,e)),i)}addOptions(e,t=!1){B(e,e=>{this.addOption(e,t)})}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=P(e[this.settings.optgroupValueField]);return null!==t&&(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var s;t[this.settings.optgroupValueField]=e,(s=this.registerOptionGroup(t))&&this.trigger(\"optgroup_add\",s,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger(\"optgroup_remove\",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger(\"optgroup_clear\")}updateOption(e,t){const s=this;var i,n;const o=P(e),r=P(t[s.settings.valueField]);if(null===o)return;const a=s.options[o];if(null==a)return;if(\"string\"!=typeof r)throw new Error(\"Value must be set in option data\");const l=s.getOption(o),c=s.getItem(o);if(t.$order=t.$order||a.$order,delete s.options[o],s.uncacheValue(r),s.options[r]=t,l){if(s.dropdown_content.contains(l)){const e=s._render(\"option\",t);ie(l,e),s.activeOption===l&&s.setActiveOption(e)}l.remove()}c&&(-1!==(n=s.items.indexOf(o))&&s.items.splice(n,1,r),i=s._render(\"item\",t),c.classList.contains(\"active\")&&J(i,\"active\"),ie(c,i)),s.lastQuery=null}removeOption(e,t){const s=this;e=q(e),s.uncacheValue(e),delete s.userOptions[e],delete s.options[e],s.lastQuery=null,s.trigger(\"option_remove\",e),s.removeItem(e,t)}clearOptions(e){const t=(e||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const s={};B(this.options,(e,i)=>{t(e,i)&&(s[i]=e)}),this.options=this.sifter.items=s,this.lastQuery=null,this.trigger(\"option_clear\")}clearFilter(e,t){return this.items.indexOf(t)>=0}getOption(e,t=!1){const s=P(e);if(null===s)return null;const i=this.options[s];if(null!=i){if(i.$div)return i.$div;if(t)return this._render(\"option\",i)}return null}getAdjacent(e,t,s=\"option\"){var i;if(!e)return null;i=\"item\"==s?this.controlChildren():this.dropdown_content.querySelectorAll(\"[data-selectable]\");for(let s=0;s\u003Ci.length;s++)if(i[s]==e)return t>0?i[s+1]:i[s-1];return null}getItem(e){if(\"object\"==typeof e)return e;var t=P(e);return null!==t?this.control.querySelector(`[data-value=\"${R(t)}\"]`):null}addItems(e,t){var s=this,i=Array.isArray(e)?e:[e];const n=(i=i.filter(e=>-1===s.items.indexOf(e)))[i.length-1];i.forEach(e=>{s.isPending=e!==n,s.addItem(e,t)})}addItem(e,t){D(this,t?[]:[\"change\",\"dropdown_close\"],()=>{var s,i;const n=this,o=n.settings.mode,r=P(e);if((!r||-1===n.items.indexOf(r)||(\"single\"===o&&n.close(),\"single\"!==o&&n.settings.duplicates))&&null!==r&&n.options.hasOwnProperty(r)&&(\"single\"===o&&n.clear(t),\"multi\"!==o||!n.isFull())){if(s=n._render(\"item\",n.options[r]),n.control.contains(s)&&(s=s.cloneNode(!0)),i=n.isFull(),n.items.splice(n.caretPos,0,r),n.insertAtCaret(s),n.isSetup){if(!n.isPending&&n.settings.hideSelected){let e=n.getOption(r),t=n.getAdjacent(e,1);t&&n.setActiveOption(t)}n.isPending||n.settings.closeAfterSelect||n.refreshOptions(n.isFocused&&\"single\"!==o),0!=n.settings.closeAfterSelect&&n.isFull()?n.close():n.isPending||n.positionDropdown(),n.trigger(\"item_add\",r,s),n.isPending||n.updateOriginalInput({silent:t})}(!n.isPending||!i&&n.isFull())&&(n.inputState(),n.refreshState())}})}removeItem(e=null,t){const s=this;if(!(e=s.getItem(e)))return;var i,n;const o=e.dataset.value;i=te(e),e.remove(),e.classList.contains(\"active\")&&(n=s.activeItems.indexOf(e),s.activeItems.splice(n,1),W(e,\"active\")),s.items.splice(i,1),s.lastQuery=null,!s.settings.persist&&s.userOptions.hasOwnProperty(o)&&s.removeOption(o,t),i\u003Cs.caretPos&&s.setCaret(s.caretPos-1),s.updateOriginalInput({silent:t}),s.refreshState(),s.positionDropdown(),s.trigger(\"item_remove\",o,e)}createItem(e=null,t=()=>{}){3===arguments.length&&(t=arguments[2]),\"function\"!=typeof t&&(t=()=>{});var s,i=this,n=i.caretPos;if(e=e||i.inputValue(),!i.canCreate(e))return t(),!1;i.lock();var o=!1,r=e=>{if(i.unlock(),!e||\"object\"!=typeof e)return t();var s=P(e[i.settings.valueField]);if(\"string\"!=typeof s)return t();i.setTextboxValue(),i.addOption(e,!0),i.setCaret(n),i.addItem(s),t(e),o=!0};return s=\"function\"==typeof i.settings.create?i.settings.create.call(this,e,r):{[i.settings.labelField]:e,[i.settings.valueField]:e},o||r(s),!0}refreshItems(){var e=this;e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this;e.refreshValidityState();const t=e.isFull(),s=e.isLocked;e.wrapper.classList.toggle(\"rtl\",e.rtl);const i=e.wrapper.classList;var n;i.toggle(\"focus\",e.isFocused),i.toggle(\"disabled\",e.isDisabled),i.toggle(\"readonly\",e.isReadOnly),i.toggle(\"required\",e.isRequired),i.toggle(\"invalid\",!e.isValid),i.toggle(\"locked\",s),i.toggle(\"full\",t),i.toggle(\"input-active\",e.isFocused&&!e.isInputHidden),i.toggle(\"dropdown-active\",e.isOpen),i.toggle(\"has-options\",(n=e.options,0===Object.keys(n).length)),i.toggle(\"has-items\",e.items.length>0)}refreshValidityState(){var e=this;e.input.validity&&(e.isValid=e.input.validity.valid,e.isInvalid=!e.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const t=this;var s,i;const n=t.input.querySelector('option[value=\"\"]');if(t.is_select_tag){const o=[],r=t.input.querySelectorAll(\"option:checked\").length;function a(e,s,i){return e||(e=K('\u003Coption value=\"'+N(s)+'\">'+N(i)+\"\u003C\u002Foption>\")),e!=n&&t.input.append(e),o.push(e),(e!=n||r>0)&&(e.selected=!0),e}t.input.querySelectorAll(\"option:checked\").forEach(e=>{e.selected=!1}),0==t.items.length&&\"single\"==t.settings.mode?a(n,\"\",\"\"):t.items.forEach(e=>{s=t.options[e],i=s[t.settings.labelField]||\"\",o.includes(s.$option)?a(t.input.querySelector(`option[value=\"${R(e)}\"]:not(:checked)`),e,i):s.$option=a(s.$option,e,i)})}else t.input.value=t.getValue();t.isSetup&&(e.silent||t.trigger(\"change\",t.getValue()))}open(){var e=this;e.isLocked||e.isOpen||\"multi\"===e.settings.mode&&e.isFull()||(e.isOpen=!0,se(e.focus_node,{\"aria-expanded\":\"true\"}),e.refreshState(),U(e.dropdown,{visibility:\"hidden\",display:\"block\"}),e.positionDropdown(),U(e.dropdown,{visibility:\"visible\",display:\"block\"}),e.focus(),e.trigger(\"dropdown_open\",e.dropdown))}close(e=!0){var t=this,s=t.isOpen;e&&(t.setTextboxValue(),\"single\"===t.settings.mode&&t.items.length&&t.inputState()),t.isOpen=!1,se(t.focus_node,{\"aria-expanded\":\"false\"}),U(t.dropdown,{display:\"none\"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),s&&t.trigger(\"dropdown_close\",t.dropdown)}positionDropdown(){if(\"body\"===this.settings.dropdownParent){var e=this.control,t=e.getBoundingClientRect(),s=e.offsetHeight+t.top+window.scrollY,i=t.left+window.scrollX;U(this.dropdown,{width:t.width+\"px\",top:s+\"px\",left:i+\"px\"})}}clear(e){var t=this;if(t.items.length){var s=t.controlChildren();B(s,e=>{t.removeItem(e,!0)}),t.inputState(),e||t.updateOriginalInput(),t.trigger(\"clear\")}}insertAtCaret(e){const t=this,s=t.caretPos,i=t.control;i.insertBefore(e,i.children[s]||null),t.setCaret(s+1)}deleteSelection(e){var t,s,i,n,o,r=this;t=e&&8===e.keyCode?-1:1,s={start:(o=r.control_input).selectionStart||0,length:(o.selectionEnd||0)-(o.selectionStart||0)};const a=[];if(r.activeItems.length)n=ee(r.activeItems,t),i=te(n),t>0&&i++,B(r.activeItems,e=>a.push(e));else if((r.isFocused||\"single\"===r.settings.mode)&&r.items.length){const e=r.controlChildren();let i;t\u003C0&&0===s.start&&0===s.length?i=e[r.caretPos-1]:t>0&&s.start===r.inputValue().length&&(i=e[r.caretPos]),void 0!==i&&a.push(i)}if(!r.shouldDelete(a,e))return!1;for($(e,!0),void 0!==i&&r.setCaret(i);a.length;)r.removeItem(a.pop());return r.inputState(),r.positionDropdown(),r.refreshOptions(!1),!0}shouldDelete(e,t){const s=e.map(e=>e.dataset.value);return!(!s.length||\"function\"==typeof this.settings.onDelete&&!1===this.settings.onDelete(s,t))}advanceSelection(e,t){var s,i,n=this;n.rtl&&(e*=-1),n.inputValue().length||(H(ne,t)||H(\"shiftKey\",t)?(i=(s=n.getLastActive(e))?s.classList.contains(\"active\")?n.getAdjacent(s,e,\"item\"):s:e>0?n.control_input.nextElementSibling:n.control_input.previousElementSibling)&&(i.classList.contains(\"active\")&&n.removeActiveItem(s),n.setActiveItemClass(i)):n.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(\".last-active\");if(t)return t;var s=this.control.querySelectorAll(\".active\");return s?ee(s,e):void 0}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll(\"[data-ts-item]\"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(e=this.isReadOnly||this.isDisabled){this.isLocked=e,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(e){this.focus_node.tabIndex=e?-1:this.tabIndex,this.isDisabled=e,this.input.disabled=e,this.control_input.disabled=e,this.setLocked()}setReadOnly(e){this.isReadOnly=e,this.input.readOnly=e,this.control_input.readOnly=e,this.setLocked()}destroy(){var e=this,t=e.revertSettings;e.trigger(\"destroy\"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,W(e.input,\"tomselected\",\"ts-hidden-accessible\"),e._destroy(),delete e.input.tomselect}render(e,t){var s,i;const n=this;if(\"function\"!=typeof this.settings.render[e])return null;if(!(i=n.settings.render[e].call(this,t,N)))return null;if(i=K(i),\"option\"===e||\"option_create\"===e?t[n.settings.disabledField]?se(i,{\"aria-disabled\":\"true\"}):se(i,{\"data-selectable\":\"\"}):\"optgroup\"===e&&(s=t.group[n.settings.optgroupValueField],se(i,{\"data-group\":s}),t.group[n.settings.disabledField]&&se(i,{\"data-disabled\":\"\"})),\"option\"===e||\"item\"===e){const s=q(t[n.settings.valueField]);se(i,{\"data-value\":s}),\"item\"===e?(J(i,n.settings.itemClass),se(i,{\"data-ts-item\":\"\"})):(J(i,n.settings.optionClass),se(i,{role:\"option\",id:t.$id}),t.$div=i,n.options[s]=t)}return i}_render(e,t){const s=this.render(e,t);if(null==s)throw\"HTMLElement expected\";return s}clearCache(){B(this.options,e=>{e.$div&&(e.$div.remove(),delete e.$div)})}uncacheValue(e){const t=this.getOption(e);t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,s){var i=this,n=i[t];i[t]=function(){var t,o;return\"after\"===e&&(t=n.apply(i,arguments)),o=s.apply(i,arguments),\"instead\"===e?o:(\"before\"===e&&(t=n.apply(i,arguments)),t)}}}const ce=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},de=(e,t,s,i)=>{e.addEventListener(t,s,i)},ue=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(pe(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},pe=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1,he=(e,t,s,i)=>{e.addEventListener(t,s,i)},ge=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},fe=(e,t,s,i)=>{e.addEventListener(t,s,i)},me=e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(ve(e)){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}return document.querySelector(e)},ve=e=>\"string\"==typeof e&&e.indexOf(\"\u003C\")>-1;le.define(\"change_listener\",function(){var e;e=()=>{this.sync()},this.input.addEventListener(\"change\",e,void 0)}),le.define(\"checkbox_options\",function(e){var t=this,s=t.onOptionSelect;t.settings.hideSelected=!1;const i=Object.assign({className:\"tomselect-checkbox\",checkedClassNames:void 0,uncheckedClassNames:void 0},e);var n=function(e,t){t?(e.checked=!0,i.uncheckedClassNames&&e.classList.remove(...i.uncheckedClassNames),i.checkedClassNames&&e.classList.add(...i.checkedClassNames)):(e.checked=!1,i.checkedClassNames&&e.classList.remove(...i.checkedClassNames),i.uncheckedClassNames&&e.classList.add(...i.uncheckedClassNames))},o=function(e){setTimeout(()=>{var t=e.querySelector(\"input.\"+i.className);t instanceof HTMLInputElement&&n(t,e.classList.contains(\"selected\"))},1)};t.hook(\"after\",\"setupTemplates\",()=>{var e=t.settings.render.option;t.settings.render.option=(s,o)=>{var r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(e.call(t,s,o)),a=document.createElement(\"input\");i.className&&a.classList.add(i.className),a.addEventListener(\"click\",function(e){ce(e)}),a.type=\"checkbox\";const l=null==(c=s[t.settings.valueField])?null:(e=>\"boolean\"==typeof e?e?\"1\":\"0\":e+\"\")(c);var c;return n(a,!!(l&&t.items.indexOf(l)>-1)),r.prepend(a),r}}),t.on(\"item_remove\",e=>{var s=t.getOption(e);s&&(s.classList.remove(\"selected\"),o(s))}),t.on(\"item_add\",e=>{var s=t.getOption(e);s&&o(s)}),t.hook(\"instead\",\"onOptionSelect\",(e,i)=>{if(i.classList.contains(\"selected\"))return i.classList.remove(\"selected\"),t.removeItem(i.dataset.value),t.refreshOptions(),void ce(e,!0);s.call(t,e,i),o(i)})}),le.define(\"clear_button\",function(e){const t=this,s=Object.assign({className:\"clear-button\",title:\"Clear All\",html:e=>`\u003Cdiv class=\"${e.className}\" title=\"${e.title}\">&#10799;\u003C\u002Fdiv>`},e);t.on(\"initialize\",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(s.html(s));e.addEventListener(\"click\",e=>{t.isLocked||(t.clear(),\"single\"===t.settings.mode&&t.settings.allowEmptyOption&&t.addItem(\"\"),e.preventDefault(),e.stopPropagation())}),t.control.appendChild(e)})}),le.define(\"drag_drop\",function(){var e=this;if(\"multi\"!==e.settings.mode)return;var t=e.lock,s=e.unlock;let i,n=!0;e.hook(\"after\",\"setupTemplates\",()=>{var t=e.settings.render.item;e.settings.render.item=(s,o)=>{const r=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(t.call(e,s,o));var a;a=r,((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s],s)})({draggable:\"true\"},(e,t)=>{null==e?a.removeAttribute(t):a.setAttribute(t,\"\"+e)});const l=e=>{e.preventDefault(),r.classList.add(\"ts-drag-over\"),c(r,i)},c=(e,t)=>{var s,i,n;void 0!==t&&(((e,t)=>{do{var s;if(e==(t=null==(s=t)?void 0:s.previousElementSibling))return!0}while(t&&t.previousElementSibling);return!1})(t,r)?(i=t,null==(n=(s=e).parentNode)||n.insertBefore(i,s.nextSibling)):((e,t)=>{var s;null==(s=e.parentNode)||s.insertBefore(t,e)})(e,t))};return de(r,\"mousedown\",e=>{n||((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e),e.stopPropagation()}),de(r,\"dragstart\",e=>{i=r,setTimeout(()=>{r.classList.add(\"ts-dragging\")},0)}),de(r,\"dragenter\",l),de(r,\"dragover\",l),de(r,\"dragleave\",()=>{r.classList.remove(\"ts-drag-over\")}),de(r,\"dragend\",()=>{var t;document.querySelectorAll(\".ts-drag-over\").forEach(e=>e.classList.remove(\"ts-drag-over\")),null==(t=i)||t.classList.remove(\"ts-dragging\"),i=void 0;var s=[];e.control.querySelectorAll(\"[data-value]\").forEach(e=>{if(e.dataset.value){let t=e.dataset.value;t&&s.push(t)}}),e.setValue(s)}),r}}),e.hook(\"instead\",\"lock\",()=>(n=!1,t.call(e))),e.hook(\"instead\",\"unlock\",()=>(n=!0,s.call(e)))}),le.define(\"dropdown_header\",function(e){const t=this,s=Object.assign({title:\"Untitled\",headerClass:\"dropdown-header\",titleRowClass:\"dropdown-header-title\",labelClass:\"dropdown-header-label\",closeClass:\"dropdown-header-close\",html:e=>'\u003Cdiv class=\"'+e.headerClass+'\">\u003Cdiv class=\"'+e.titleRowClass+'\">\u003Cspan class=\"'+e.labelClass+'\">'+e.title+'\u003C\u002Fspan>\u003Ca class=\"'+e.closeClass+'\">&times;\u003C\u002Fa>\u003C\u002Fdiv>\u003C\u002Fdiv>'},e);t.on(\"initialize\",()=>{var e=(e=>{if(e.jquery)return e[0];if(e instanceof HTMLElement)return e;if(\"string\"==typeof(s=e)&&s.indexOf(\"\u003C\")>-1){var t=document.createElement(\"template\");return t.innerHTML=e.trim(),t.content.firstChild}var s;return document.querySelector(e)})(s.html(s)),i=e.querySelector(\".\"+s.closeClass);i&&i.addEventListener(\"click\",e=>{((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(e,!0),t.close()}),t.dropdown.insertBefore(e,t.dropdown.firstChild)})}),le.define(\"caret_position\",function(){var e=this;e.hook(\"instead\",\"setCaret\",t=>{\"single\"!==e.settings.mode&&e.control.contains(e.control_input)?(t=Math.max(0,Math.min(e.items.length,t)))==e.caretPos||e.isPending||e.controlChildren().forEach((s,i)=>{i\u003Ct?e.control_input.insertAdjacentElement(\"beforebegin\",s):e.control.appendChild(s)}):t=e.items.length,e.caretPos=t}),e.hook(\"instead\",\"moveCaret\",t=>{if(!e.isFocused)return;const s=e.getLastActive(t);if(s){const a=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s})(s);e.setCaret(t>0?a+1:a),e.setActiveItem(),n=s,i=[],((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})([\"last-active\"],e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(i=i.concat(e))}),r=i.filter(Boolean),(o=n,Array.isArray(o)||(o=[o]),n=o).map(e=>{r.map(t=>{e.classList.remove(t)})})}else e.setCaret(e.caretPos+t);var i,n,o,r})}),le.define(\"dropdown_input\",function(){const e=this;e.settings.shouldOpen=!0,e.hook(\"before\",\"setup\",()=>{e.focus_node=e.control,((e,...t)=>{var s,i=(e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)})(t);(s=e,Array.isArray(s)||(s=[s]),e=s).map(e=>{i.map(t=>{e.classList.add(t)})})})(e.control_input,\"dropdown-input\");const t=ue('\u003Cdiv class=\"dropdown-input-wrap\">');t.append(e.control_input),e.dropdown.insertBefore(t,e.dropdown.firstChild);const s=ue('\u003Cinput class=\"items-placeholder\" tabindex=\"-1\" \u002F>');s.placeholder=e.settings.placeholder||\"\",e.control.append(s)}),e.on(\"initialize\",()=>{e.control_input.addEventListener(\"keydown\",t=>{switch(t.keyCode){case 27:return e.isOpen&&(((e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())})(t,!0),e.close()),void e.clearActiveItems();case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)}),e.on(\"blur\",()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex}),e.on(\"dropdown_open\",()=>{e.control_input.focus()});const t=e.onBlur;var s;e.hook(\"instead\",\"onBlur\",s=>{if(!s||s.relatedTarget!=e.control_input)return t.call(e)}),s=()=>e.onBlur(),e.control_input.addEventListener(\"blur\",s,void 0),e.hook(\"before\",\"close\",()=>{e.isOpen&&e.focus_node.focus({preventScroll:!0})})})}),le.define(\"input_autogrow\",function(){var e=this;e.on(\"initialize\",()=>{var t=document.createElement(\"span\"),s=e.control_input;t.style.cssText=\"position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; \",e.wrapper.appendChild(t);for(const e of[\"letterSpacing\",\"fontSize\",\"fontFamily\",\"fontWeight\",\"textTransform\"])t.style[e]=s.style[e];var i=()=>{t.textContent=s.value,s.style.width=t.clientWidth+\"px\"};i(),e.on(\"update item_add item_remove\",i),he(s,\"input\",i),he(s,\"keyup\",i),he(s,\"blur\",i),he(s,\"update\",i)})}),le.define(\"no_backspace_delete\",function(){var e=this,t=e.deleteSelection;this.hook(\"instead\",\"deleteSelection\",s=>!!e.activeItems.length&&t.call(e,s))}),le.define(\"no_active_items\",function(){this.hook(\"instead\",\"setActiveItem\",()=>{}),this.hook(\"instead\",\"selectAll\",()=>{})}),le.define(\"optgroup_columns\",function(){var e=this,t=e.onKeyDown;e.hook(\"instead\",\"onKeyDown\",s=>{var i,n,o,r;if(!e.isOpen||37!==s.keyCode&&39!==s.keyCode)return t.call(e,s);e.ignoreHover=!0,r=(e=>{for(;e&&e.matches;){if(e.matches(\"[data-group]\"))return e;e=e.parentNode}})(e.activeOption),i=((e,t)=>{if(!e)return-1;t=t||e.nodeName;for(var s=0;e=e.previousElementSibling;)e.matches(t)&&s++;return s})(e.activeOption,\"[data-selectable]\"),r&&(r=37===s.keyCode?r.previousSibling:r.nextSibling)&&(n=(o=r.querySelectorAll(\"[data-selectable]\"))[Math.min(o.length-1,i)])&&e.setActiveOption(n)})}),le.define(\"remove_button\",function(e){const t=Object.assign({label:\"&times;\",title:\"Remove\",className:\"remove\",append:!0},e);var s=this;if(t.append){var i='\u003Ca href=\"javascript:void(0)\" class=\"'+t.className+'\" tabindex=\"-1\" title=\"'+(t.title+\"\").replace(\u002F&\u002Fg,\"&amp;\").replace(\u002F\u003C\u002Fg,\"&lt;\").replace(\u002F>\u002Fg,\"&gt;\").replace(\u002F\"\u002Fg,\"&quot;\")+'\">'+t.label+\"\u003C\u002Fa>\";s.hook(\"after\",\"setupTemplates\",()=>{var e=s.settings.render.item;s.settings.render.item=(t,n)=>{var o=me(e.call(s,t,n)),r=me(i);return o.appendChild(r),fe(r,\"mousedown\",e=>{ge(e,!0)}),fe(r,\"click\",e=>{s.isLocked||(ge(e,!0),s.isLocked||s.shouldDelete([o],e)&&(s.removeItem(o),s.refreshOptions(!1),s.inputState()))}),o}})}}),le.define(\"restore_on_backspace\",function(e){const t=this,s=Object.assign({text:e=>e[t.settings.labelField]},e);t.on(\"item_remove\",function(e){if(t.isFocused&&\"\"===t.control_input.value.trim()){var i=t.options[e];i&&t.setTextboxValue(s.text.call(t,i))}})}),le.define(\"virtual_scroll\",function(){const e=this,t=e.canLoad,s=e.clearActiveOption,i=e.loadCallback;var n,o,r={},a=!1,l=[];if(e.settings.shouldLoadMore||(e.settings.shouldLoadMore=()=>{if(n.clientHeight\u002F(n.scrollHeight-n.scrollTop)>.9)return!0;if(e.activeOption){var t=e.selectable();if(Array.from(t).indexOf(e.activeOption)>=t.length-2)return!0}return!1}),!e.settings.firstUrl)throw\"virtual_scroll plugin requires a firstUrl() method\";e.settings.sortField=[{field:\"$order\"},{field:\"$score\"}];const c=t=>!(\"number\"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions||!(t in r)||!r[t]),d=(t,s)=>e.items.indexOf(s)>=0||l.indexOf(s)>=0;e.setNextUrl=(e,t)=>{r[e]=t},e.getUrl=t=>{if(t in r){const e=r[t];return r[t]=!1,e}return e.clearPagination(),e.settings.firstUrl.call(e,t)},e.clearPagination=()=>{r={}},e.hook(\"instead\",\"clearActiveOption\",()=>{if(!a)return s.call(e)}),e.hook(\"instead\",\"canLoad\",s=>s in r?c(s):t.call(e,s)),e.hook(\"instead\",\"loadCallback\",(t,s)=>{if(a){if(o){const s=t[0];void 0!==s&&(o.dataset.value=s[e.settings.valueField])}}else e.clearOptions(d);i.call(e,t,s),a=!1}),e.hook(\"after\",\"refreshOptions\",()=>{const t=e.lastValue;var s;c(t)?(s=e.render(\"loading_more\",{query:t}))&&(s.setAttribute(\"data-selectable\",\"\"),o=s):t in r&&!n.querySelector(\".no-results\")&&(s=e.render(\"no_more_results\",{query:t})),s&&(((e,...t)=>{var s,i=(e=>{var t=[];return((e,t)=>{if(Array.isArray(e))e.forEach(t);else for(var s in e)e.hasOwnProperty(s)&&t(e[s])})(e,e=>{\"string\"==typeof e&&(e=e.trim().split(\u002F[\\t\\n\\f\\r\\s]\u002F)),Array.isArray(e)&&(t=t.concat(e))}),t.filter(Boolean)})(t);(s=e,Array.isArray(s)||(s=[s]),e=s).map(e=>{i.map(t=>{e.classList.add(t)})})})(s,e.settings.optionClass),n.append(s))}),e.on(\"initialize\",()=>{l=Object.keys(e.options),n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:()=>'\u003Cdiv class=\"loading-more-results\">Loading more results ... \u003C\u002Fdiv>',no_more_results:()=>'\u003Cdiv class=\"no-more-results\">No more results\u003C\u002Fdiv>'},e.settings.render),n.addEventListener(\"scroll\",()=>{e.settings.shouldLoadMore.call(e)&&c(e.lastValue)&&(a||(a=!0,e.load.call(e,e.lastValue)))})})});const ye=le,be={};let Oe;\"undefined\"!=typeof lpDataAdmin&&(Oe=lpDataAdmin.lp_rest_url,be.admin={apiAdminNotice:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices\",apiAddons:Oe+\"lp\u002Fv1\u002Faddon\u002Fall\",apiAddonAction:Oe+\"lp\u002Fv1\u002Faddon\u002Faction-n\",apiAddonsPurchase:Oe+\"lp\u002Fv1\u002Faddon\u002Finfo-addons-purchase\",apiSearchCourses:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course\",apiSearchUsers:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user\",apiAssignUserCourse:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Fassign-user-course\",apiUnAssignUserCourse:Oe+\"lp\u002Fv1\u002Fadmin\u002Ftools\u002Funassign-user-course\"}),\"undefined\"!=typeof lpData&&(Oe=lpData.lp_rest_url,be.frontend={apiWidgets:Oe+\"lp\u002Fv1\u002Fwidgets\u002Fapi\",apiCourses:Oe+\"lp\u002Fv1\u002Fcourses\u002Farchive-course\",apiAJAX:Oe+\"lp\u002Fv1\u002Fload_content_via_ajax\u002F\",apiProfileCoverImage:Oe+\"lp\u002Fv1\u002Fprofile\u002Fcover-image\"}),Oe&&(be.apiCourses=Oe+\"lp\u002Fv1\u002Fcourses\u002F\");const we=be,_e={buildTomSelect(e,t,s,i,n){if(!e)return;const o={plugins:{remove_button:{title:\"Remove this item\"},dropdown_input:{}},onInitialize(){},onItemAdd(t){if(s){const o=Array.from(e.selectedOptions).map(e=>e.value);o.push(t),i.id_not_in=o.join(\",\"),s(\"\",i,n)}}};return s&&(o.load=(t,o)=>{const r=Array.from(e.selectedOptions).map(e=>e.value);i.id_not_in=r.join(\",\"),s(t,i,_e.callBackTomSelectSearchAPI(o,n))}),(t={...o,...t}).options,new ye(e,t)},callBackTomSelectSearchAPI:(e,t)=>({success:s=>{const i=t.success(s);e(i)}}),fetchCourses(t=\"\",s={},i){const n=we.admin.apiSearchCourses;s.search=t;const o={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(s)};e(n,o,i)},fetchUsers(t=\"\",s={},i){const n=we.admin.apiSearchUsers;s.search=t;const o={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpDataAdmin.nonce},method:\"POST\",body:JSON.stringify(s)};e(n,o,i)}},Se=(e,t={})=>e?null!=e.tomSelectInstance?null:void(e.tomSelectInstance=_e.buildTomSelect(e,t)):null,Ae=()=>{if(\"0\"===lpData.show_search_author_field)return;const e=document.querySelector(\"#posts-filter\");if(!e)return;let t=e.querySelector(\".search-box\");t||(e.insertAdjacentHTML(\"afterbegin\",lpData.show_search_author_field),t=e.querySelector(\".search-box\")),t&&(t.querySelector(\"select#author\")||(()=>{let s=\"\";const i=lpData.urlParams.author;i&&(s=JSON.stringify(i));const n={urlApi:we.admin.apiSearchUsers,dataType:\"users\",keyGetValue:{value:\"ID\",text:\"{{display_name}}(#{{ID}}) - {{user_email}}\",key_render:{display_name:\"display_name\",user_email:\"user_email\",ID:\"ID\"}},setting:{placeholder:\"Choose user\"}},o=`\u003Cselect data-struct='${JSON.stringify(n)}' style='display:none;' data-saved='${s}'\\n\\t\\t\\t\\t\\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">\u003C\u002Fselect>`,r=t.querySelector('input[name=\"s\"]');r&&r.insertAdjacentHTML(\"afterend\",o);const a=e.querySelector('input[name=\"author\"]');a&&a.remove()})())},Ce=()=>{const t=document.querySelectorAll(\"select.lp-tom-select:not(.loaded)\");t.length&&t.forEach(t=>{t.closest(\".widget-liquid-left\")||((t,s={},i={})=>{var n,o;if(!t)return;if(t.classList.contains(\"loaded\"))return;t.classList.add(\"loaded\");const r=t.dataset?.saved?JSON.parse(t.dataset.saved):0,a=t?.dataset?.struct?JSON.parse(t.dataset.struct):\"\";if(!a)return void Se(t);const l=(e,t)=>{const s=t.parentElement;return s.tagName.toLowerCase()===e?s:\"html\"!==s.tagName.toLowerCase()&&l(e,s)},c=l(\"form\",t);if(c){const e=c.querySelector('input[name=\"'+t.getAttribute(\"name\")+'\"]');e&&e.remove()}const d=null!==(n=a.dataSendApi)&&void 0!==n?n:\"\",u=null!==(o=a.urlApi)&&void 0!==o?o:\"\",p={...a.setting,...s};if(!u)return void Se(t,p);const h=(t=\"\",s,i)=>{const n=u,o={current_ids:r,...d,...s};o.search=t;const a={headers:{\"Content-Type\":\"application\u002Fjson\",\"X-WP-Nonce\":lpData.nonce},method:\"POST\",body:JSON.stringify(o)};e(n,a,i)},g={success:e=>{((e,t,s,i,n={},o)=>{if(!(e&&t&&s&&i&&o))return;const r=e=>{if(!s.keyGetValue?.text||!s.keyGetValue.key_render)return;let t=s.keyGetValue.text;for(const[i,n]of Object.entries(s.keyGetValue.key_render))t=t.replace(new RegExp(`{{${n}}}`,\"g\"),e[n]);return t},a=t.dataset?.saved?JSON.parse(t.dataset.saved):0;let l=[];e.data[s.dataType].length>0&&(l=e.data[s.dataType].map(e=>({value:e[s.keyGetValue.value],text:r(e)})));const c={items:a,render:{item:(e,t)=>`\u003Cli data-id=\"${e.value}\">\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class=\"item\">${e.text}\u003C\u002Fdiv>\\n\\t\\t\\t\\t\\t\u003C\u002Fli>`},onChange:e=>{e.length\u003C1&&(t.value=\"\")},...n,options:l};null!=t.tomSelectInstance?t.tomSelectInstance.addOptions(l):t.tomSelectInstance=_e.buildTomSelect(t,c,i,{},o)})(e,t,a,h,p,g)}};let f=[];\"object\"==typeof r&&(f=Object.entries(r).map(([e,t])=>({key:e,value:t}))),d?.id_not_in&&(f=[...f,...d.id_not_in]),i.id_not_in=f.join(\",\"),h(\"\",i,g)})(t)})};!function(e){const t=function(t){const s=e(this).addClass(\"disabled\");t.preventDefault(),e.post({url:s.attr(\"href\"),data:{\"lp-ajax\":\"create-pages\"},dataType:\"text\",success:function(e){const t=s.closest(\".lp-notice\").html(\"\u003Cp>\"+e+\"\u003C\u002Fp>\");setTimeout(function(){t.fadeOut()},2e3)}})},s=()=>{e(\".lp-meta-box__file\").each((t,s)=>{let i;const n=e(s).find(\".lp-meta-box__file_input\"),o=e(s).find(\".lp-meta-box__file_list\"),r=e(s).find(\".btn-upload\"),a=!!e(s).data(\"multil\");e(r).on(\"click\",e=>{e.preventDefault(),i||(i=wp.media({states:[new wp.media.controller.Library({filterable:\"all\",multiple:a})]}),i.on(\"select\",function(){const e=i.state().get(\"selection\");let t=n.val();e.forEach(function(e){(e=e.toJSON()).id&&(a?t=t?t+\",\"+e.id:e.id:(t=e.id,o.empty()),o.append('\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"'+e.id+'\">\u003Cimg class=\"is_file\" src=\"'+e.icon+'\" \u002F>\u003Cspan>'+e.filename+'\u003C\u002Fspan>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'))}),l(),n.val(t)})),i.open()}),a&&o.sortable({items:\"li.image\",cursor:\"move\",scrollSensitivity:40,forcePlaceholderSize:!0,forceHelperSize:!1,helper:\"clone\",opacity:.65,placeholder:\"lp-metabox-sortable-placeholder\",start(e,t){t.item.css(\"background-color\",\"#f6f6f6\")},stop(e,t){t.item.removeAttr(\"style\")},update(){let t=\"\";o.find(\"li.image\").css(\"cursor\",\"default\").each(function(){const s=e(this).attr(\"data-attachment_id\");t=t+s+\",\"}),l(),n.val(t)}});const l=()=>{e(o).find(\"li.image\").each((t,s)=>{e(s).find(\"a.delete\").on(\"click\",function(){if(e(s).remove(),a){let t=\"\";e(o).find(\"li.image\").css(\"cursor\",\"default\").each(function(){const s=e(this).attr(\"data-attachment_id\");t=t+s+\",\"}),n.val(t)}else n.val(\"\");return!1})})};l()})};e(document).ready(function(){if(s(),e(\".learn-press-dropdown-pages\").LP(\"DropdownPages\"),e(\".learn-press-tip\").LP(\"QuickTip\"),e(document).on(\"click\",\"#learn-press-create-pages\",t).on(\"mousedown\",\".lp-sortable-handle\",function(t){e(\"html, body\").addClass(\"lp-item-moving\"),e(t.target).closest(\".lp-sortable-handle\").css(\"cursor\",\"inherit\")}).on(\"mouseup\",function(t){e(\"html, body\").removeClass(\"lp-item-moving\"),e(\".lp-sortable-handle\").css(\"cursor\",\"\")}),window.location.hash){const t=window.location.hash;if(\"#_lp_passing_grade\"===t){const s=document.querySelector(t);e(\"html, body\").animate({scrollTop:e(t).offset().top},900,\"swing\"),s.parentNode.style.border=\"2px solid orangered\"}}})}(jQuery),document.addEventListener(\"click\",e=>{((e,t)=>{if(\"INPUT\"===t.tagName)if(t.closest(\".forminp \")){const e=t.name.replace(\"learn_press_\",\"\"),s=document.querySelectorAll(`.show_if_${e}`);s&&s.forEach(e=>{e.classList.toggle(\"lp-option-disabled\")})}else if(t.closest(\".lp-meta-box\")){const e=t.closest(\".lp-meta-box\"),s=t.name,i=e.querySelectorAll(`[data-dependency=\"${s}\"]`);i&&i.forEach(e=>{e.classList.toggle(\"lp-option-disabled\")})}})(0,e.target),Ce()}),document.addEventListener(\"DOMContentLoaded\",()=>{Ae(),Ce()}),t(\"select.lp-tom-select\",e=>{Ce()}),t(\"#posts-filter\",e=>{Ae()}),window.lpFindTomSelect=Ce})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-notices.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-notices.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-notices.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-notices.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -75,14 +75,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -113,10 +113,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -134,12 +134,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -152,11 +152,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -177,12 +177,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -325,15 +325,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -449,11 +449,11 @@\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var _api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! ..\u002Fapi.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n-\u002F**\r\n- * Script handle admin notices.\r\n- *\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.2\r\n+\u002F**\n+ * Script handle admin notices.\n+ *\n+ * @since 4.1.7.3.2\n+ * @version 1.0.2\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-order.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-order.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-order.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-order.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -38,12 +38,12 @@\n     modalContainer = document.querySelector('#container-modal-search-items');\n   };\n \n-  \u002F**\r\n-   * Fetch courses from API.\r\n-   *\r\n-   * @param keySearch\r\n-   * @param course_ids_exclude\r\n-   * @param paged\r\n+  \u002F**\n+   * Fetch courses from API.\n+   *\n+   * @param keySearch\n+   * @param course_ids_exclude\n+   * @param paged\n    *\u002F\n   const fetchCoursesAPI = (keySearch = '', course_ids_exclude = [], paged = 1) => {\n     let id_not_in = '';\n@@ -91,8 +91,8 @@\n     });\n   };\n \n-  \u002F**\r\n-   * Get list course ids added.\r\n+  \u002F**\n+   * Get list course ids added.\n    *\u002F\n   const getCoursesAdded = () => {\n     courseIdsAdded = [];\n@@ -103,10 +103,10 @@\n     });\n   };\n \n-  \u002F**\r\n-   * Add courses to order.\r\n-   * @param e\r\n-   * @param target\r\n+  \u002F**\n+   * Add courses to order.\n+   * @param e\n+   * @param target\n    *\u002F\n   const addCourses = (e, target) => {\n     if (!target.classList.contains('add')) {\n@@ -158,11 +158,11 @@\n     _utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpFetchAPI(_utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpAddQueryArgs(_utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpGetCurrentURLNoParam(), dataSend), {}, callBack);\n   };\n \n-  \u002F**\r\n-   * Remove course from order.\r\n-   *\r\n-   * @param e\r\n-   * @param target\r\n+  \u002F**\n+   * Remove course from order.\n+   *\n+   * @param e\n+   * @param target\n    *\u002F\n   const removeCourse = (e, target) => {\n     if (target.tagName !== 'SPAN') {\n@@ -225,11 +225,11 @@\n     _utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpFetchAPI(_utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpAddQueryArgs(_utils_admin_js__WEBPACK_IMPORTED_MODULE_0__.Utils.lpGetCurrentURLNoParam(), dataSend), {}, callBack);\n   };\n \n-  \u002F**\r\n-   * Search courses before add Order.\r\n-   *\r\n-   * @param e\r\n-   * @param target\r\n+  \u002F**\n+   * Search courses before add Order.\n+   *\n+   * @param e\n+   * @param target\n    *\u002F\n   const searchCourse = (e, target) => {\n     if ('search' !== target.name) {\n@@ -251,10 +251,10 @@\n     }\n   };\n \n-  \u002F**\r\n-   * Display list courses when search done.\r\n-   *\r\n-   * @param courses\r\n+  \u002F**\n+   * Display list courses when search done.\n+   *\n+   * @param courses\n    *\u002F\n   const renderSearchResult = courses => {\n     let html = '';\n@@ -272,11 +272,11 @@\n     return html;\n   };\n \n-  \u002F**\r\n-   * Render pagination.\r\n-   *\r\n-   * @param currentPage\r\n-   * @param maxPage\r\n+  \u002F**\n+   * Render pagination.\n+   *\n+   * @param currentPage\n+   * @param maxPage\n    *\u002F\n   const renderPagination = (currentPage, maxPage) => {\n     currentPage = parseInt(currentPage);\n@@ -423,8 +423,8 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (\u002F* binding *\u002F export_invoice)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Export invoice to PDF\r\n+\u002F**\n+ * Export invoice to PDF\n  *\u002F\n function export_invoice() {\n   let html2pdf_obj, modal;\n@@ -556,11 +556,11 @@\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var tom_select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! tom-select *\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js\");\n \u002F* harmony import *\u002F var _api_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! ..\u002Fapi.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n-\u002F**\r\n- * Library run on Admin\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Library run on Admin\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.1\n  *\u002F\n \n \n@@ -602,24 +602,24 @@\n       ...options\n     };\n     const items_selected = options.options;\n-    \u002F*if ( options?.options?.length > 20 ) {\r\n-    \tconst chunkSize = 20;\r\n-    \tconst length = options.options.length;\r\n-    \tlet i = 0;\r\n-    \tconst chunkedOptions = { ...options };\r\n-    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\r\n-    \t\t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\r\n-    \ti += chunkSize;\r\n-    \t\t\tconst interval = setInterval( () => {\r\n-    \t\tif ( i > ( length - 1 ) ) {\r\n-    \t\t\tclearInterval( interval );\r\n-    \t\t}\r\n-    \t\t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\r\n-    \t\ti += chunkSize;\r\n-    \t\ttomSelect.addOptions( optionsSlice );\r\n-    \t\ttomSelect.setValue( options.items );\r\n-    \t}, 200 );\r\n-    \t\t\treturn tomSelect;\r\n+    \u002F*if ( options?.options?.length > 20 ) {\n+    \tconst chunkSize = 20;\n+    \tconst length = options.options.length;\n+    \tlet i = 0;\n+    \tconst chunkedOptions = { ...options };\n+    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\n+    \t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\n+    \ti += chunkSize;\n+    \t\tconst interval = setInterval( () => {\n+    \t\tif ( i > ( length - 1 ) ) {\n+    \t\t\tclearInterval( interval );\n+    \t\t}\n+    \t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\n+    \t\ti += chunkSize;\n+    \t\ttomSelect.addOptions( optionsSlice );\n+    \t\ttomSelect.setValue( options.items );\n+    \t}, 200 );\n+    \t\treturn tomSelect;\n     }*\u002F\n \n     return new tom_select__WEBPACK_IMPORTED_MODULE_1__[\"default\"](elTomSelect, options);\n@@ -673,11 +673,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -736,14 +736,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -774,10 +774,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -795,12 +795,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -813,11 +813,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -838,12 +838,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -986,15 +986,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-orders.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-orders.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-orders.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-orders.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -88,14 +88,14 @@\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! toastify-js *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\");\n \u002F* harmony import *\u002F var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! toastify-js\u002Fsrc\u002Ftoastify.css *\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\");\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -153,14 +153,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -191,10 +191,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -212,12 +212,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -230,11 +230,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -255,12 +255,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -403,15 +403,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-statistic.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-statistic.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-statistic.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-statistic.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -15351,11 +15351,11 @@\n   \\************************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var chart_js_auto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! chart.js\u002Fauto *\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fauto\u002Fauto.js\");\n-\u002F**\r\n- * Statistics chart.\r\n- *\r\n- * @since 4.2.5.5\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Statistics chart.\n+ *\n+ * @since 4.2.5.5\n+ * @version 1.0.0\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-tools.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-tools.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-tools.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fadmin-tools.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -13,11 +13,11 @@\n \u002F* harmony export *\u002F   \"default\": () => (\u002F* binding *\u002F assignUserCourse)\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var _utils_admin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils-admin.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\");\n-\u002F**\r\n- * Assign user to course\r\n- *\r\n- * @since 4.2.5.6\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Assign user to course\n+ *\n+ * @since 4.2.5.6\n+ * @version 1.0.1\n  *\u002F\n \n function assignUserCourse() {\n@@ -260,11 +260,11 @@\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var tom_select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! tom-select *\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js\");\n \u002F* harmony import *\u002F var _api_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! ..\u002Fapi.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n-\u002F**\r\n- * Library run on Admin\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Library run on Admin\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.1\n  *\u002F\n \n \n@@ -306,24 +306,24 @@\n       ...options\n     };\n     const items_selected = options.options;\n-    \u002F*if ( options?.options?.length > 20 ) {\r\n-    \tconst chunkSize = 20;\r\n-    \tconst length = options.options.length;\r\n-    \tlet i = 0;\r\n-    \tconst chunkedOptions = { ...options };\r\n-    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\r\n-    \t\t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\r\n-    \ti += chunkSize;\r\n-    \t\t\tconst interval = setInterval( () => {\r\n-    \t\tif ( i > ( length - 1 ) ) {\r\n-    \t\t\tclearInterval( interval );\r\n-    \t\t}\r\n-    \t\t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\r\n-    \t\ti += chunkSize;\r\n-    \t\ttomSelect.addOptions( optionsSlice );\r\n-    \t\ttomSelect.setValue( options.items );\r\n-    \t}, 200 );\r\n-    \t\t\treturn tomSelect;\r\n+    \u002F*if ( options?.options?.length > 20 ) {\n+    \tconst chunkSize = 20;\n+    \tconst length = options.options.length;\n+    \tlet i = 0;\n+    \tconst chunkedOptions = { ...options };\n+    \tchunkedOptions.options = items_selected.slice( i, chunkSize );\n+    \t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\n+    \ti += chunkSize;\n+    \t\tconst interval = setInterval( () => {\n+    \t\tif ( i > ( length - 1 ) ) {\n+    \t\t\tclearInterval( interval );\n+    \t\t}\n+    \t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\n+    \t\ti += chunkSize;\n+    \t\ttomSelect.addOptions( optionsSlice );\n+    \t\ttomSelect.setValue( options.items );\n+    \t}, 200 );\n+    \t\treturn tomSelect;\n     }*\u002F\n \n     return new tom_select__WEBPACK_IMPORTED_MODULE_1__[\"default\"](elTomSelect, options);\n@@ -377,11 +377,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -440,14 +440,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -478,10 +478,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -499,12 +499,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -517,11 +517,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -542,12 +542,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -690,15 +690,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Flearnpress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Flearnpress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Flearnpress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Flearnpress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -516,18 +516,17 @@\n     return false;\n   });\n \n-  \u002F*document.querySelectorAll( '.lp_course_extra_meta_box__fields' ).forEach( ( ele ) => {\r\n-  \tele.addEventListener( 'keydown', ( e ) => {\r\n-  \t\tconst inputs = ele.querySelectorAll( '.lp_course_extra_meta_box__input' );\r\n-  \n-  \t\tif ( e.keyCode === 13 ) {\r\n-  \t\t\te.preventDefault();\r\n-  \t\t\tinputs.forEach( ( input ) => {\r\n-  \t\t\t\tinput.blur();\r\n-  \t\t\t} );\r\n-  \t\t\treturn false;\r\n-  \t\t}\r\n-  \t} );\r\n+  \u002F*document.querySelectorAll( '.lp_course_extra_meta_box__fields' ).forEach( ( ele ) => {\n+  \tele.addEventListener( 'keydown', ( e ) => {\n+  \t\tconst inputs = ele.querySelectorAll( '.lp_course_extra_meta_box__input' );\n+  \t\t\tif ( e.keyCode === 13 ) {\n+  \t\t\te.preventDefault();\n+  \t\t\tinputs.forEach( ( input ) => {\n+  \t\t\t\tinput.blur();\n+  \t\t\t} );\n+  \t\t\treturn false;\n+  \t\t}\n+  \t} );\n   } );*\u002F\n \n   $('.lp_course_extra_meta_box__fields').on('click', 'a.delete', function () {\n@@ -551,19 +550,18 @@\n     return false;\n   });\n \n-  \u002F*document.querySelectorAll( '.lp_course_faq_meta_box__fields' ).forEach( ( ele ) => {\r\n-  \tele.addEventListener( 'keydown', ( e ) => {\r\n-  \t\tconst inputs = ele.querySelectorAll( '.lp_course_faq_meta_box__field input' );\r\n-  \t\tconst textareas = ele.querySelectorAll( '.lp_course_faq_meta_box__field textarea' );\r\n-  \n-  \t\tif ( e.keyCode === 13 ) {\r\n-  \t\t\te.preventDefault();\r\n-  \t\t\t[ ...inputs, ...textareas ].forEach( ( input ) => {\r\n-  \t\t\t\tinput.blur();\r\n-  \t\t\t} );\r\n-  \t\t\treturn false;\r\n-  \t\t}\r\n-  \t} );\r\n+  \u002F*document.querySelectorAll( '.lp_course_faq_meta_box__fields' ).forEach( ( ele ) => {\n+  \tele.addEventListener( 'keydown', ( e ) => {\n+  \t\tconst inputs = ele.querySelectorAll( '.lp_course_faq_meta_box__field input' );\n+  \t\tconst textareas = ele.querySelectorAll( '.lp_course_faq_meta_box__field textarea' );\n+  \t\t\tif ( e.keyCode === 13 ) {\n+  \t\t\te.preventDefault();\n+  \t\t\t[ ...inputs, ...textareas ].forEach( ( input ) => {\n+  \t\t\t\tinput.blur();\n+  \t\t\t} );\n+  \t\t\treturn false;\n+  \t\t}\n+  \t} );\n   } );*\u002F\n \n   $('.lp_course_faq_meta_box__fields').on('click', 'a.delete', function () {\n@@ -788,57 +786,57 @@\n };\n \n \u002F\u002F use to show and hide field condition logic metabox.\n-\u002F*const lpMetaboxCondition = () => {\r\n-\tconst fields = document.querySelectorAll( '.lp-meta-box .form-field' );\r\n-\r\n-\tfields.forEach( ( field ) => {\r\n-\t\tif ( field.hasAttribute( 'data-show' ) && field.dataset.show ) {\r\n-\t\t\tlpMetaboxConditionType( field, field.dataset.show, 'show' );\r\n-\t\t} else if ( field.hasAttribute( 'data-hide' ) && field.dataset.hide ) {\r\n-\t\t\tlpMetaboxConditionType( field, field.dataset.hide, 'hide' );\r\n-\t\t}\r\n-\t} );\r\n+\u002F*const lpMetaboxCondition = () => {\n+\tconst fields = document.querySelectorAll( '.lp-meta-box .form-field' );\n+\n+\tfields.forEach( ( field ) => {\n+\t\tif ( field.hasAttribute( 'data-show' ) && field.dataset.show ) {\n+\t\t\tlpMetaboxConditionType( field, field.dataset.show, 'show' );\n+\t\t} else if ( field.hasAttribute( 'data-hide' ) && field.dataset.hide ) {\n+\t\t\tlpMetaboxConditionType( field, field.dataset.hide, 'hide' );\n+\t\t}\n+\t} );\n };*\u002F\n \n-\u002F*const lpMetaboxConditionType = ( field, conditions, typeCondition = 'show' ) => {\r\n-\tconst condition = JSON.parse( conditions ),\r\n-\t\teles = document.querySelectorAll( `input[id^=\"${ condition[ 0 ] }\"]` ),\r\n-\t\tlogic = condition[ 1 ] === '=' ? '=' : '!=',\r\n-\t\tdataLogic = condition[ 2 ];\r\n-\r\n-\tconst switchCase = ( type, ele, target ) => {\r\n-\t\tswitch ( type ) {\r\n-\t\tcase 'checkbox':\r\n-\t\t\tlet val = dataLogic;\r\n-\r\n-\t\t\tif ( dataLogic === 'yes' || dataLogic === '1' || dataLogic === 1 || dataLogic === 'true' ) {\r\n-\t\t\t\tval = true;\r\n-\t\t\t} else if ( dataLogic === 'no' || dataLogic === '0' || dataLogic === 0 || dataLogic === 'false' ) {\r\n-\t\t\t\tval = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( logic == '!=' && val !== Boolean( target ? target.checked : ele.checked ) ) {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\r\n-\t\t\t} else if ( logic == '=' && val == Boolean( target ? target.checked : ele.checked ) ) {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\r\n-\t\t\t} else {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? 'none' : '';\r\n-\t\t\t}\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\t};\r\n-\r\n-\teles.forEach( ( ele ) => {\r\n-\t\tconst type = ele.getAttribute( 'type' );\r\n-\r\n-\t\tswitchCase( type, ele );\r\n-\r\n-\t\tele.addEventListener( 'change', ( e ) => {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tswitchCase( type, ele, target );\r\n-\t\t} );\r\n-\t} );\r\n+\u002F*const lpMetaboxConditionType = ( field, conditions, typeCondition = 'show' ) => {\n+\tconst condition = JSON.parse( conditions ),\n+\t\teles = document.querySelectorAll( `input[id^=\"${ condition[ 0 ] }\"]` ),\n+\t\tlogic = condition[ 1 ] === '=' ? '=' : '!=',\n+\t\tdataLogic = condition[ 2 ];\n+\n+\tconst switchCase = ( type, ele, target ) => {\n+\t\tswitch ( type ) {\n+\t\tcase 'checkbox':\n+\t\t\tlet val = dataLogic;\n+\n+\t\t\tif ( dataLogic === 'yes' || dataLogic === '1' || dataLogic === 1 || dataLogic === 'true' ) {\n+\t\t\t\tval = true;\n+\t\t\t} else if ( dataLogic === 'no' || dataLogic === '0' || dataLogic === 0 || dataLogic === 'false' ) {\n+\t\t\t\tval = false;\n+\t\t\t}\n+\n+\t\t\tif ( logic == '!=' && val !== Boolean( target ? target.checked : ele.checked ) ) {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\n+\t\t\t} else if ( logic == '=' && val == Boolean( target ? target.checked : ele.checked ) ) {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\n+\t\t\t} else {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? 'none' : '';\n+\t\t\t}\n+\t\t\tbreak;\n+\t\t}\n+\t};\n+\n+\teles.forEach( ( ele ) => {\n+\t\tconst type = ele.getAttribute( 'type' );\n+\n+\t\tswitchCase( type, ele );\n+\n+\t\tele.addEventListener( 'change', ( e ) => {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tswitchCase( type, ele, target );\n+\t\t} );\n+\t} );\n };*\u002F\n \n \u002F** End Nhamdv code *\u002F\n@@ -1020,29 +1018,26 @@\n     }\n   });\n \n-  \u002F*const datePickerSelect = function( datepicker ) {\r\n-  \tconst option = $( datepicker ).is( '#_lp_sale_start' ) ? 'minDate' : 'maxDate',\r\n-  \t\totherDateField = 'minDate' === option ? $( '#_lp_sale_end' ) : $( '#_lp_sale_start' ),\r\n-  \t\tdate = $( datepicker ).datetimepicker( 'getDate' );\r\n-  \n-  \t$( otherDateField ).datetimepicker( 'option', option, date );\r\n-  \t$( datepicker ).trigger( 'change' );\r\n-  };\r\n-  \n-  $( '.lp_sale_dates_fields' ).each( function() {\r\n-  \t$( this ).find( 'input' ).datetimepicker( {\r\n-  \t\ttimeFormat: 'HH:mm',\r\n-  \t\tseparator: ' ',\r\n-  \t\tdateFormat: 'yy-mm-dd',\r\n-  \t\tshowButtonPanel: true,\r\n-  \t\tonSelect() {\r\n-  \t\t\tdatePickerSelect( $( this ) );\r\n-  \t\t},\r\n-  \t} );\r\n-  \n-  \t$( this ).find( 'input' ).each( function() {\r\n-  \t\tdatePickerSelect( $( this ) );\r\n-  \t} );\r\n+  \u002F*const datePickerSelect = function( datepicker ) {\n+  \tconst option = $( datepicker ).is( '#_lp_sale_start' ) ? 'minDate' : 'maxDate',\n+  \t\totherDateField = 'minDate' === option ? $( '#_lp_sale_end' ) : $( '#_lp_sale_start' ),\n+  \t\tdate = $( datepicker ).datetimepicker( 'getDate' );\n+  \t\t$( otherDateField ).datetimepicker( 'option', option, date );\n+  \t$( datepicker ).trigger( 'change' );\n+  };\n+  \t$( '.lp_sale_dates_fields' ).each( function() {\n+  \t$( this ).find( 'input' ).datetimepicker( {\n+  \t\ttimeFormat: 'HH:mm',\n+  \t\tseparator: ' ',\n+  \t\tdateFormat: 'yy-mm-dd',\n+  \t\tshowButtonPanel: true,\n+  \t\tonSelect() {\n+  \t\t\tdatePickerSelect( $( this ) );\n+  \t\t},\n+  \t} );\n+  \t\t$( this ).find( 'input' ).each( function() {\n+  \t\tdatePickerSelect( $( this ) );\n+  \t} );\n   } );*\u002F\n };\n const lpHidePassingGrade = () => {\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin: list-students-enrolled.js\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin: list-students-enrolled.min.js\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -41,30 +41,25 @@\n     $main = $newContent;\n   };\n \n-  \u002F*const navPages = function navPages( e ) {\r\n-  \te.preventDefault();\r\n-  \n-  \tif ( ! checkForm( $setupForm ) ) {\r\n-  \t\treturn;\r\n-  \t}\r\n-  \n-  \tconst loadUrl = $( this ).attr( 'href' );\r\n-  \n-  \t$main.addClass( 'loading' );\r\n-  \t$.post( {\r\n-  \t\turl: loadUrl,\r\n-  \t\tdata: getFormData(),\r\n-  \t\tsuccess( res ) {\r\n-  \t\t\tconst $html = $( res );\r\n-  \t\t\treplaceMainContent( $html.contents().filter( '#main' ) );\r\n-  \n-  \t\t\tLP.setUrl( loadUrl );\r\n-  \n-  \t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\r\n-  \t\t\t$( '.learn-press-tip' ).LP( 'QuickTip' );\r\n-  \t\t\t$main.removeClass( 'loading' );\r\n-  \t\t},\r\n-  \t} );\r\n+  \u002F*const navPages = function navPages( e ) {\n+  \te.preventDefault();\n+  \t\tif ( ! checkForm( $setupForm ) ) {\n+  \t\treturn;\n+  \t}\n+  \t\tconst loadUrl = $( this ).attr( 'href' );\n+  \t\t$main.addClass( 'loading' );\n+  \t$.post( {\n+  \t\turl: loadUrl,\n+  \t\tdata: getFormData(),\n+  \t\tsuccess( res ) {\n+  \t\t\tconst $html = $( res );\n+  \t\t\treplaceMainContent( $html.contents().filter( '#main' ) );\n+  \t\t\t\tLP.setUrl( loadUrl );\n+  \t\t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\n+  \t\t\t$( '.learn-press-tip' ).LP( 'QuickTip' );\n+  \t\t\t$main.removeClass( 'loading' );\n+  \t\t},\n+  \t} );\n   };*\u002F\n \n   const updateCurrency = function updateCurrency() {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -613,11 +613,11 @@\n \u002F* harmony import *\u002F var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! react *\u002F \"react\");\n \u002F* harmony import *\u002F var react__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n \n-\u002F**\r\n- * Reset course progress.\r\n- *\r\n- * @since 4.0.5.\r\n- * @author Nhamdv - Code choi choi in Physcode.\r\n+\u002F**\n+ * Reset course progress.\n+ *\n+ * @since 4.0.5.\n+ * @author Nhamdv - Code choi choi in Physcode.\n  *\u002F\n const {\n   __\n@@ -800,22 +800,22 @@\n       key: index,\n       isDismissible: false\n     }, mess.message);\n-  }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"style\", null, '\\\r\n-\t\t\t\t.lp-reset-course_progress .components-base-control__field {\\\r\n-\t\t\t\t\tmargin: 0;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.components-notice{\\\r\n-\t\t\t\t\tmargin-left: 0;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.lp-reset-course_progress > div > div{\\\r\n-\t\t\t\t\tdisplay: grid;\\\r\n-\t\t\t\t\tgrid-template-columns: 80px 50px 1fr 80px;\\\r\n-\t\t\t\t\talign-items: center;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.lp-reset-course_progress > div > div > div{\\\r\n-\t\t\t\t\tmaegin: 0;\\\r\n-\t\t\t\t\tpadding: 8px 10px;\\\r\n-\t\t\t\t}\\\r\n+  }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"style\", null, '\\\n+\t\t\t\t.lp-reset-course_progress .components-base-control__field {\\\n+\t\t\t\t\tmargin: 0;\\\n+\t\t\t\t}\\\n+\t\t\t\t.components-notice{\\\n+\t\t\t\t\tmargin-left: 0;\\\n+\t\t\t\t}\\\n+\t\t\t\t.lp-reset-course_progress > div > div{\\\n+\t\t\t\t\tdisplay: grid;\\\n+\t\t\t\t\tgrid-template-columns: 80px 50px 1fr 80px;\\\n+\t\t\t\t\talign-items: center;\\\n+\t\t\t\t}\\\n+\t\t\t\t.lp-reset-course_progress > div > div > div{\\\n+\t\t\t\t\tmaegin: 0;\\\n+\t\t\t\t\tpadding: 8px 10px;\\\n+\t\t\t\t}\\\n \t\t\t\t'));\n };\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (ResetCourse);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -14,65 +14,65 @@\n   return repo.title.rendered || repo.text;\n }\n \n-\u002F*function autocompleteWidget( widget = null ) {\r\n-\tconst searchs = $( '.lp-widget_select_course' );\r\n-\tconst wpRestUrl = searchs.data( 'rest-url' );\r\n-\tconst postType = searchs.data( 'post_type' ) || 'lp_course';\r\n-\r\n-\tif ( postType === 'lp_course' ) {\r\n-\t\tconst dataStruct = {\r\n-\t\t\turlApi: Api.admin.apiSearchCourses,\r\n-\t\t\tdataType: 'courses',\r\n-\t\t\tkeyGetValue: {\r\n-\t\t\t\tvalue: 'ID',\r\n-\t\t\t\ttext: '{{post_title}} (#{{ID}})',\r\n-\t\t\t\tkey_render: {\r\n-\t\t\t\t\tpost_title: 'post_title',\r\n-\t\t\t\t\tID: 'ID',\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\tconst dataStructJson = JSON.stringify( dataStruct );\r\n-\t\tconst widgetListEl = document.querySelector( '#widget-list' );\r\n-\t\tlet nonTomSelectWidgetEls = '';\r\n-\t\tif ( widgetListEl ) {\r\n-\t\t\tconst tomSelectWidgetEls = Array.prototype.slice.call( widgetListEl.querySelectorAll( '.lp-widget_select_course' ) );\r\n-\t\t\tnonTomSelectWidgetEls = Array.prototype.slice.call( searchs ).filter( ( el ) => ! tomSelectWidgetEls.includes( el ) );\r\n-\t\t}\r\n-\r\n-\t\tnonTomSelectWidgetEls.forEach( ( nonTomSelectWidgetEl ) => {\r\n-\t\t\t$( nonTomSelectWidgetEl ).attr( 'data-struct', dataStructJson );\r\n-\t\t\tinitTomSelect( nonTomSelectWidgetEl );\r\n-\t\t} );\r\n-\t} else {\r\n-\t\tsearchs.select2( {\r\n-\t\t\tajax: {\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t\turl: wpRestUrl + 'wp\u002Fv2\u002F' + postType,\r\n-\t\t\t\tdataType: 'json',\r\n-\t\t\t\tdelay: 250,\r\n-\t\t\t\tdata( params ) {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tsearch: params.term,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tprocessResults( data, params ) {\r\n-\t\t\t\t\tparams.page = params.page || 1;\r\n-\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tresults: data,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tcache: true,\r\n-\t\t\t},\r\n-\t\t\tescapeMarkup( markup ) {\r\n-\t\t\t\treturn markup;\r\n-\t\t\t},\r\n-\t\t\tminimumInputLength: 2,\r\n-\t\t\ttemplateResult: formatCourse, \u002F\u002F omitted for brevity, see the source of this page\r\n-\t\t\ttemplateSelection: formatCourseSelection, \u002F\u002F omitted for brevity, see the source of this page\r\n-\t\t} );\r\n-\t}\r\n+\u002F*function autocompleteWidget( widget = null ) {\n+\tconst searchs = $( '.lp-widget_select_course' );\n+\tconst wpRestUrl = searchs.data( 'rest-url' );\n+\tconst postType = searchs.data( 'post_type' ) || 'lp_course';\n+\n+\tif ( postType === 'lp_course' ) {\n+\t\tconst dataStruct = {\n+\t\t\turlApi: Api.admin.apiSearchCourses,\n+\t\t\tdataType: 'courses',\n+\t\t\tkeyGetValue: {\n+\t\t\t\tvalue: 'ID',\n+\t\t\t\ttext: '{{post_title}} (#{{ID}})',\n+\t\t\t\tkey_render: {\n+\t\t\t\t\tpost_title: 'post_title',\n+\t\t\t\t\tID: 'ID',\n+\t\t\t\t},\n+\t\t\t},\n+\t\t};\n+\t\tconst dataStructJson = JSON.stringify( dataStruct );\n+\t\tconst widgetListEl = document.querySelector( '#widget-list' );\n+\t\tlet nonTomSelectWidgetEls = '';\n+\t\tif ( widgetListEl ) {\n+\t\t\tconst tomSelectWidgetEls = Array.prototype.slice.call( widgetListEl.querySelectorAll( '.lp-widget_select_course' ) );\n+\t\t\tnonTomSelectWidgetEls = Array.prototype.slice.call( searchs ).filter( ( el ) => ! tomSelectWidgetEls.includes( el ) );\n+\t\t}\n+\n+\t\tnonTomSelectWidgetEls.forEach( ( nonTomSelectWidgetEl ) => {\n+\t\t\t$( nonTomSelectWidgetEl ).attr( 'data-struct', dataStructJson );\n+\t\t\tinitTomSelect( nonTomSelectWidgetEl );\n+\t\t} );\n+\t} else {\n+\t\tsearchs.select2( {\n+\t\t\tajax: {\n+\t\t\t\tmethod: 'GET',\n+\t\t\t\turl: wpRestUrl + 'wp\u002Fv2\u002F' + postType,\n+\t\t\t\tdataType: 'json',\n+\t\t\t\tdelay: 250,\n+\t\t\t\tdata( params ) {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tsearch: params.term,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tprocessResults( data, params ) {\n+\t\t\t\t\tparams.page = params.page || 1;\n+\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tresults: data,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tcache: true,\n+\t\t\t},\n+\t\t\tescapeMarkup( markup ) {\n+\t\t\t\treturn markup;\n+\t\t\t},\n+\t\t\tminimumInputLength: 2,\n+\t\t\ttemplateResult: formatCourse, \u002F\u002F omitted for brevity, see the source of this page\n+\t\t\ttemplateSelection: formatCourseSelection, \u002F\u002F omitted for brevity, see the source of this page\n+\t\t} );\n+\t}\n }*\u002F\n \n document.addEventListener('DOMContentLoaded', function (event) {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Farchive-course-legacy.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Farchive-course-legacy.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Farchive-course-legacy.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Farchive-course-legacy.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -64,11 +64,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -265,8 +265,8 @@\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n-\u002F**\r\n- * Register block archive property.\r\n+\u002F**\n+ * Register block archive property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbreadcrumb.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbreadcrumb.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbreadcrumb.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbreadcrumb.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -220,8 +220,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block archive property.\r\n+\u002F**\n+ * Register block archive property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-reset-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-reset-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-reset-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-reset-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -183,8 +183,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block button reset filter.\r\n+\u002F**\n+ * Register block button reset filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-submit-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-submit-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-submit-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fbutton-submit-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -183,8 +183,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block button submit filter.\r\n+\u002F**\n+ * Register block button submit filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-address.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-address.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-address.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-address.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -58,11 +58,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -249,8 +249,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course instructor.\r\n+\u002F**\n+ * Register block course instructor.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-author-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-author-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-author-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-author-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -201,8 +201,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course author filter.\r\n+\u002F**\n+ * Register block course author filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -130,11 +130,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -331,8 +331,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course button.\r\n+\u002F**\n+ * Register block course button.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button-read-more.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button-read-more.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button-read-more.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-button-read-more.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -130,11 +130,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -331,8 +331,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course button.\r\n+\u002F**\n+ * Register block course button.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-capacity.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-capacity.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-capacity.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-capacity.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -137,11 +137,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -369,8 +369,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fpeople.js\");\n-\u002F**\r\n- * Register block course lesson.\r\n+\u002F**\n+ * Register block course lesson.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -201,8 +201,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course categories filter.\r\n+\u002F**\n+ * Register block course categories filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-categories.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -306,8 +306,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course categories.\r\n+\u002F**\n+ * Register block course categories.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -183,11 +183,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -374,8 +374,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course curriculum.\r\n+\u002F**\n+ * Register block course curriculum.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-delivery.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-delivery.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-delivery.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-delivery.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -136,11 +136,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -368,8 +368,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fheading.js\");\n-\u002F**\r\n- * Register block course lesson.\r\n+\u002F**\n+ * Register block course lesson.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-description.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-description.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-description.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-description.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -101,11 +101,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -313,8 +313,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fpost-content.js\");\n-\u002F**\r\n- * Register block course description.\r\n+\u002F**\n+ * Register block course description.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-duration.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-duration.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-duration.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-duration.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course duration.\r\n+\u002F**\n+ * Register block course duration.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-faqs.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-faqs.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-faqs.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-faqs.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -70,11 +70,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -261,8 +261,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course faqs.\r\n+\u002F**\n+ * Register block course faqs.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-featured.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-featured.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-featured.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-featured.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -72,11 +72,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -263,8 +263,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course featured.\r\n+\u002F**\n+ * Register block course featured.\n  *\u002F\n \n \n@@ -273,9 +273,9 @@\n \n const templatesName = ['learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course', 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline'];\n \n-\u002F**\r\n- * Check if the block can load in the template editor: single-lp_course.\r\n- * if it is editing on this template, set ancestor to null\r\n+\u002F**\n+ * Check if the block can load in the template editor: single-lp_course.\n+ * if it is editing on this template, set ancestor to null\n  *\u002F\n (0,_utilBlock_js__WEBPACK_IMPORTED_MODULE_4__.checkTemplatesCanLoadBlock)(templatesName, _block_json__WEBPACK_IMPORTED_MODULE_2__, metadataNew => {\n   (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__.registerBlockType)(metadataNew.name, {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-feature-review.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-feature-review.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-feature-review.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-feature-review.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -74,11 +74,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -265,8 +265,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course feature review.\r\n+\u002F**\n+ * Register block course feature review.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-features.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-features.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-features.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-features.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -62,11 +62,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -253,8 +253,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course features.\r\n+\u002F**\n+ * Register block course features.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -250,8 +250,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block course filter.\r\n+\u002F**\n+ * Register block course filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-image.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-image.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-image.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-image.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -218,11 +218,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -419,8 +419,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course image.\r\n+\u002F**\n+ * Register block course image.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor-info.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor-info.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor-info.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor-info.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -91,11 +91,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -282,8 +282,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course instructor info.\r\n+\u002F**\n+ * Register block course instructor info.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-instructor.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -108,11 +108,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -309,8 +309,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course instructor.\r\n+\u002F**\n+ * Register block course instructor.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -63,11 +63,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -264,8 +264,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course item curriculum.\r\n+\u002F**\n+ * Register block course item curriculum.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-template.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-template.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-template.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-item-template.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -314,11 +314,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -618,8 +618,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block single course property.\r\n+\u002F**\n+ * Register block single course property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-lesson.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-lesson.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-lesson.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-lesson.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course lesson.\r\n+\u002F**\n+ * Register block course lesson.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -189,8 +189,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course level filter.\r\n+\u002F**\n+ * Register block course level filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-level.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course level.\r\n+\u002F**\n+ * Register block course level.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-material.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-material.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-material.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-material.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -98,11 +98,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -289,8 +289,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course price.\r\n+\u002F**\n+ * Register block course price.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-offline-lesson.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-offline-lesson.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-offline-lesson.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-offline-lesson.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course lesson.\r\n+\u002F**\n+ * Register block course lesson.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-order-by.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-order-by.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-order-by.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-order-by.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -217,8 +217,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block course order by property.\r\n+\u002F**\n+ * Register block course order by property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -195,8 +195,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course price filter.\r\n+\u002F**\n+ * Register block course price filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-price.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -71,11 +71,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -272,8 +272,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course price.\r\n+\u002F**\n+ * Register block course price.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-progress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-progress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-progress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-progress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -62,11 +62,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -253,8 +253,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course process.\r\n+\u002F**\n+ * Register block course process.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-quiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-quiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-quiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-quiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course quiz.\r\n+\u002F**\n+ * Register block course quiz.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-requirements.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-requirements.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-requirements.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-requirements.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -62,11 +62,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -253,8 +253,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course requirements.\r\n+\u002F**\n+ * Register block course requirements.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-results.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-results.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-results.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-results.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -182,8 +182,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block course results.\r\n+\u002F**\n+ * Register block course results.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -185,8 +185,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course search filter.\r\n+\u002F**\n+ * Register block course search filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-search.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -193,8 +193,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block course search.\r\n+\u002F**\n+ * Register block course search.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-share.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-share.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-share.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-share.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -62,11 +62,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -253,8 +253,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course share.\r\n+\u002F**\n+ * Register block course share.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-student.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-student.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-student.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-student.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -316,8 +316,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course student.\r\n+\u002F**\n+ * Register block course student.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-tag-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-tag-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-tag-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-tag-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -201,8 +201,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n \n-\u002F**\r\n- * Register block course tag filter.\r\n+\u002F**\n+ * Register block course tag filter.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-target-audiences.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-target-audiences.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-target-audiences.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-target-audiences.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -62,11 +62,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -253,8 +253,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block course target audiences.\r\n+\u002F**\n+ * Register block course target audiences.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-title.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-title.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-title.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fcourse-title.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -172,11 +172,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -404,8 +404,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Ftitle.js\");\n-\u002F**\r\n- * Register block course title.\r\n+\u002F**\n+ * Register block course title.\n  *\u002F\n \n \n@@ -415,9 +415,9 @@\n \n const templatesName = ['learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course', 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline'];\n \n-\u002F**\r\n- * Check if the block can load in the template editor: single-lp_course.\r\n- * if it is editing on this template, set ancestor to null\r\n+\u002F**\n+ * Check if the block can load in the template editor: single-lp_course.\n+ * if it is editing on this template, set ancestor to null\n  *\u002F\n (0,_utilBlock_js__WEBPACK_IMPORTED_MODULE_4__.checkTemplatesCanLoadBlock)(templatesName, _block_json__WEBPACK_IMPORTED_MODULE_2__, metadataNew => {\n   (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__.registerBlockType)(metadataNew.name, {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-avatar.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-avatar.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-avatar.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-avatar.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -99,11 +99,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -301,8 +301,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fcomment-author-avatar.js\");\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor avatar.\r\n+\u002F**\n+ * Register block instructor avatar.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-background.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-background.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-background.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-background.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -125,11 +125,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -326,8 +326,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor background.\r\n+\u002F**\n+ * Register block instructor background.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -86,11 +86,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -287,8 +287,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor course property.\r\n+\u002F**\n+ * Register block instructor course property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-description.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-description.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-description.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-description.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -57,11 +57,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -238,8 +238,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor description property.\r\n+\u002F**\n+ * Register block instructor description property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-name.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-name.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-name.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-name.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -91,11 +91,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -303,8 +303,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Ftitle.js\");\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor name.\r\n+\u002F**\n+ * Register block instructor name.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-social.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-social.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-social.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-social.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -120,11 +120,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -342,8 +342,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fcustom-link.js\");\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor social property.\r\n+\u002F**\n+ * Register block instructor social property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-student.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-student.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-student.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Finstructor-student.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -86,11 +86,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -287,8 +287,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block instructor student property.\r\n+\u002F**\n+ * Register block instructor student property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-close.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-close.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-close.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-close.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -67,11 +67,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -268,8 +268,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item close.\r\n+\u002F**\n+ * Register block item close.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-comment.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-comment.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-comment.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-comment.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -86,11 +86,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -287,8 +287,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item curriculum.\r\n+\u002F**\n+ * Register block item curriculum.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-content.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-content.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-content.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-content.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -105,11 +105,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -327,8 +327,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fpost-content.js\");\n-\u002F**\r\n- * Register block item content.\r\n+\u002F**\n+ * Register block item content.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1248,11 +1248,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -1449,8 +1449,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item curriculum.\r\n+\u002F**\n+ * Register block item curriculum.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-hidden-sidebar.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-hidden-sidebar.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-hidden-sidebar.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-hidden-sidebar.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -66,11 +66,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -267,8 +267,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item hidden sidebar.\r\n+\u002F**\n+ * Register block item hidden sidebar.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-navigation.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-navigation.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-navigation.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-navigation.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -104,11 +104,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -326,8 +326,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! @wordpress\u002Ficons *\u002F \".\u002Fnode_modules\u002F@wordpress\u002Ficons\u002Fbuild-module\u002Flibrary\u002Fquery-pagination-numbers.js\");\n-\u002F**\r\n- * Register block item navigation.\r\n+\u002F**\n+ * Register block item navigation.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-progress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-progress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-progress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-progress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -76,11 +76,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -277,8 +277,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item progress.\r\n+\u002F**\n+ * Register block item progress.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-search.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-search.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-search.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fitem-search.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -74,11 +74,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -275,8 +275,8 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n-\u002F**\r\n- * Register block item search.\r\n+\u002F**\n+ * Register block item search.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Flist-courses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Flist-courses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Flist-courses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Flist-courses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -343,8 +343,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block course title.\r\n+\u002F**\n+ * Register block course title.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -259,8 +259,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block single course property.\r\n+\u002F**\n+ * Register block single course property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course-legacy.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course-legacy.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course-legacy.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-course-legacy.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -64,11 +64,11 @@\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__);\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n  *\u002F\n \n \n@@ -265,8 +265,8 @@\n \u002F* harmony import *\u002F var _utilBlock_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002FutilBlock.js *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_4___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_4__);\n-\u002F**\r\n- * Register block single course legacy.\r\n+\u002F**\n+ * Register block single course legacy.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-instructor.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-instructor.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-instructor.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Fblocks\u002Fsingle-instructor.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -176,8 +176,8 @@\n \u002F* harmony import *\u002F var _block_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fblock.json *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fblock.json\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fblocks *\u002F \"@wordpress\u002Fblocks\");\n \u002F* harmony import *\u002F var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__);\n-\u002F**\r\n- * Register block single instructor property.\r\n+\u002F**\n+ * Register block single instructor property.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -10,10 +10,34 @@\n \n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   listenElementCreated: () => (\u002F* binding *\u002F listenElementCreated),\n+\u002F* harmony export *\u002F   listenElementViewed: () => (\u002F* binding *\u002F listenElementViewed),\n \u002F* harmony export *\u002F   lpAddQueryArgs: () => (\u002F* binding *\u002F lpAddQueryArgs),\n+\u002F* harmony export *\u002F   lpAjaxParseJsonOld: () => (\u002F* binding *\u002F lpAjaxParseJsonOld),\n+\u002F* harmony export *\u002F   lpClassName: () => (\u002F* binding *\u002F lpClassName),\n \u002F* harmony export *\u002F   lpFetchAPI: () => (\u002F* binding *\u002F lpFetchAPI),\n-\u002F* harmony export *\u002F   lpGetCurrentURLNoParam: () => (\u002F* binding *\u002F lpGetCurrentURLNoParam)\n+\u002F* harmony export *\u002F   lpGetCurrentURLNoParam: () => (\u002F* binding *\u002F lpGetCurrentURLNoParam),\n+\u002F* harmony export *\u002F   lpOnElementReady: () => (\u002F* binding *\u002F lpOnElementReady),\n+\u002F* harmony export *\u002F   lpSetLoadingEl: () => (\u002F* binding *\u002F lpSetLoadingEl),\n+\u002F* harmony export *\u002F   lpShowHideEl: () => (\u002F* binding *\u002F lpShowHideEl),\n+\u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.3\n+ *\u002F\n+const lpClassName = {\n+  hidden: 'lp-hidden',\n+  loading: 'loading',\n+  elCollapse: 'lp-collapse',\n+  elSectionToggle: '.lp-section-toggle',\n+  elTriggerToggle: '.lp-trigger-toggle'\n+};\n const lpFetchAPI = (url, data = {}, functions = {}) => {\n   if ('function' === typeof functions.before) {\n     functions.before();\n@@ -35,6 +59,12 @@\n     }\n   });\n };\n+\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n+ *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n   const hasParams = currentUrl.includes('?');\n@@ -51,6 +81,147 @@\n   return url;\n };\n \n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementViewed = (el, callback) => {\n+  const observerSeeItem = new IntersectionObserver(function (entries) {\n+    for (const entry of entries) {\n+      if (entry.isIntersecting) {\n+        callback(entry);\n+      }\n+    }\n+  });\n+  observerSeeItem.observe(el);\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementCreated = callback => {\n+  const observerCreateItem = new MutationObserver(function (mutations) {\n+    mutations.forEach(function (mutation) {\n+      if (mutation.addedNodes) {\n+        mutation.addedNodes.forEach(function (node) {\n+          if (node.nodeType === 1) {\n+            callback(node);\n+          }\n+        });\n+      }\n+    });\n+  });\n+  observerCreateItem.observe(document, {\n+    childList: true,\n+    subtree: true\n+  });\n+  \u002F\u002F End.\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n+ *\u002F\n+const lpOnElementReady = (selector, callback) => {\n+  const element = document.querySelector(selector);\n+  if (element) {\n+    callback(element);\n+    return;\n+  }\n+  const observer = new MutationObserver((mutations, obs) => {\n+    const element = document.querySelector(selector);\n+    if (element) {\n+      obs.disconnect();\n+      callback(element);\n+    }\n+  });\n+  observer.observe(document.documentElement, {\n+    childList: true,\n+    subtree: true\n+  });\n+};\n+\n+\u002F\u002F Parse JSON from string with content include LP_AJAX_START.\n+const lpAjaxParseJsonOld = data => {\n+  if (typeof data !== 'string') {\n+    return data;\n+  }\n+  const m = String.raw({\n+    raw: data\n+  }).match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);\n+  try {\n+    if (m) {\n+      data = JSON.parse(m[1].replace(\u002F(?:\\r\\n|\\r|\\n)\u002Fg, ''));\n+    } else {\n+      data = JSON.parse(data);\n+    }\n+  } catch (e) {\n+    data = {};\n+  }\n+  return data;\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpShowHideEl = (el, status = 0) => {\n+  if (!el) {\n+    return;\n+  }\n+  if (!status) {\n+    el.classList.add(lpClassName.hidden);\n+  } else {\n+    el.classList.remove(lpClassName.hidden);\n+  }\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpSetLoadingEl = (el, status) => {\n+  if (!el) {\n+    return;\n+  }\n+  if (!status) {\n+    el.classList.remove(lpClassName.loading);\n+  } else {\n+    el.classList.add(lpClassName.loading);\n+  }\n+};\n+\n+\u002F\u002F Toggle collapse section\n+const toggleCollapse = (e, target, elTriggerClassName = '', elsExclude = [], callback) => {\n+  if (!elTriggerClassName) {\n+    elTriggerClassName = lpClassName.elTriggerToggle;\n+  }\n+\n+  \u002F\u002F Exclude elements, which should not trigger the collapse toggle\n+  if (elsExclude && elsExclude.length > 0) {\n+    for (const elExclude of elsExclude) {\n+      if (target.closest(elExclude)) {\n+        return;\n+      }\n+    }\n+  }\n+  const elTrigger = target.closest(elTriggerClassName);\n+  if (!elTrigger) {\n+    return;\n+  }\n+  const elSectionToggle = elTrigger.closest(`${lpClassName.elSectionToggle}`);\n+  if (!elSectionToggle) {\n+    return;\n+  }\n+  elSectionToggle.classList.toggle(`${lpClassName.elCollapse}`);\n+  if ('function' === typeof callback) {\n+    callback(elSectionToggle);\n+  }\n+};\n+\n \n \u002F***\u002F },\n \n@@ -64,11 +235,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Cookie\r\n- *\r\n- * @since 4.2.3.4\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Cookie\n+ *\n+ * @since 4.2.3.4\n+ * @version 1.0.0\n  *\u002F\n const Cookie = {\n   set: (cname, cvalue, exdays) => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fbecome-teacher.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fbecome-teacher.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fbecome-teacher.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fbecome-teacher.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -399,11 +399,11 @@\n   \\**************************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * Become a Teacher form handler js\r\n- *\r\n- * @author ThimPress\r\n- * @version 3.0.0\r\n+\u002F**\n+ * Become a Teacher form handler js\n+ *\n+ * @author ThimPress\n+ * @version 3.0.0\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcheckout.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcheckout.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcheckout.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcheckout.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -399,8 +399,8 @@\n   \\********************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * File JS handling checkout page.\r\n+\u002F**\n+ * File JS handling checkout page.\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-builder.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-builder.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-builder.js\t2026-04-11 02:14:10.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-builder.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,388 @@\n \u002F******\u002F (() => { \u002F\u002F webpackBootstrap\n \u002F******\u002F \tvar __webpack_modules__ = ({\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\"\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js ***!\n+  \\*********************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   CreateCourseViaAI: () => (\u002F* binding *\u002F CreateCourseViaAI)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_1__);\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F**\n+ * Create course with AI\n+ *\u002F\n+\n+\n+\n+\n+let lp_structure_course;\n+let lp_is_generating_course_data = false;\n+const lp_course_ai_setting = JSON.parse(localStorage.getItem('lp_course_ai_setting')) || {};\n+class CreateCourseViaAI {\n+  constructor(options = {}) {\n+    this.options = {\n+      autoInsertButton: true,\n+      isCourseBuilder: false,\n+      redirectDelayMs: 2000,\n+      ...options\n+    };\n+    this.init();\n+  }\n+  static selectors = {\n+    elGenerateDataAiWrap: '.lp-generate-data-ai-wrap'\n+  };\n+  init() {\n+    if (this.options.autoInsertButton) {\n+      if (!lpData?.enable_open_ai) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      } else {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.page-title-action', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      }\n+    }\n+    this.events();\n+  }\n+  events() {\n+    if (CreateCourseViaAI._loadedEvents) {\n+      return;\n+    }\n+    CreateCourseViaAI._loadedEvents = true;\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n+      selector: '.lp-btn-warning-enable-ai',\n+      class: this,\n+      callBack: this.showPopupEnableAI.name\n+    }, {\n+      selector: '.lp-btn-generate-course-with-ai',\n+      class: this,\n+      callBack: this.showPopupCreateFullCourse.name\n+    }, {\n+      selector: '.lp-btn-step',\n+      class: this,\n+      callBack: this.showStep.name\n+    }, {\n+      selector: '.lp-btn-generate-prompt',\n+      class: this,\n+      callBack: this.generatePrompt.name\n+    }, {\n+      selector: '.lp-btn-call-open-ai',\n+      class: this,\n+      callBack: this.generateDataCourse.name\n+    }, {\n+      selector: '.lp-btn-create-course',\n+      class: this,\n+      callBack: this.createCourse.name\n+    }, {\n+      selector: '.lp-btn-close-ai-popup',\n+      \u002F\u002Fclass: this,\n+      callBack: args => {\n+        const {\n+          e,\n+          target\n+        } = args;\n+        const message = lpData?.i18n?.confirm_close_ai || 'Are you sure you want to close? Generate data will stop.';\n+        if (!lp_is_generating_course_data) {\n+          sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+        } else if (confirm(message)) {\n+          sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+        }\n+\n+        \u002F\u002F Testing custom confirm box\n+        \u002F*if ( confirm( message ) ) {\n+        \tSweetAlert.close();\n+        }*\u002F\n+      }\n+    }]);\n+  }\n+\n+  \u002F\u002F Show popup warning enable AI before using.\n+  showPopupEnableAI() {\n+    const modalTemplate = document.querySelector('#lp-tmpl-must-enable-ai');\n+    if (!modalTemplate) {\n+      console.error('Enable OpenAI Modal Template not found!');\n+      return;\n+    }\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      html: modalTemplate.innerHTML,\n+      width: '420px',\n+      showCloseButton: false,\n+      showConfirmButton: false\n+    });\n+  }\n+  showPopupCreateFullCourse() {\n+    const modalTemplate = document.querySelector('#lp-tmpl-create-course-ai');\n+    if (!modalTemplate) {\n+      console.error('AI Create Full Course Modal Template not found!');\n+      return;\n+    }\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      html: modalTemplate.innerHTML,\n+      width: '60%',\n+      showCloseButton: false,\n+      showConfirmButton: false,\n+      allowOutsideClick: false,\n+      allowEscapeKey: false,\n+      didOpen: () => {\n+        const popup = sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().getPopup();\n+        popup.click();\n+        const targetAudience = popup.querySelector('select[name=\"target_audience\"]');\n+        if (targetAudience && lp_course_ai_setting?.target_audience) {\n+          targetAudience.tomselect.setValue(lp_course_ai_setting.target_audience);\n+        }\n+        const tone = popup.querySelector('select[name=\"tone\"]');\n+        if (tone && lp_course_ai_setting?.tone) {\n+          tone.tomselect.setValue(lp_course_ai_setting.tone);\n+        }\n+        const language = popup.querySelector('select[name=\"language\"]');\n+        if (language && lp_course_ai_setting?.language) {\n+          language.tomselect.setValue(lp_course_ai_setting.language);\n+        }\n+        targetAudience.addEventListener('change', event => {\n+          lp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\n+          localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+        });\n+        tone.addEventListener('change', event => {\n+          lp_course_ai_setting.tone = tone.tomselect.getValue();\n+          localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+        });\n+        language.addEventListener('change', event => {\n+          const value = language.tomselect.getValue();\n+          lp_course_ai_setting.language = value ? [value] : [];\n+          localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+        });\n+      }\n+    }).then(result => {\n+      if (result.isDismissed) {\n+        if (lp_is_generating_course_data) {\n+          lp_is_generating_course_data = false;\n+        }\n+      }\n+    });\n+  }\n+  showStep(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const elBtnActions = target.closest('.button-actions');\n+    const elCreateCourseAIWrap = elBtnActions.closest(CreateCourseViaAI.selectors.elGenerateDataAiWrap);\n+    let step = parseInt(elBtnActions.dataset.step);\n+    const stepAction = target.dataset.action;\n+    if (stepAction === 'next') {\n+      step++;\n+    } else if (stepAction === 'prev') {\n+      step--;\n+    }\n+    elBtnActions.dataset.step = step;\n+    const elForm = target.closest('form');\n+    const elContentStep = elForm.querySelector(`.step-content[data-step=\"${step}\"]`);\n+    const elItemStep = elCreateCourseAIWrap.querySelector(`.step-item[data-step=\"${step}\"]`);\n+    elForm.querySelectorAll('.step-content').forEach(el => el.classList.remove('active'));\n+    elContentStep.classList.add('active');\n+    elCreateCourseAIWrap.querySelectorAll('.step-item').forEach(el => el.classList.remove('active'));\n+    elItemStep.classList.add('active');\n+\n+    \u002F\u002F Get all buttons step to show\u002Fhide\n+    const form = target.closest('form');\n+    const elBtnSteps = form.querySelectorAll('button[data-step-show]');\n+    elBtnSteps.forEach(el => {\n+      const stepsShow = el.dataset.stepShow.split(',').map(s => parseInt(s.trim()));\n+      if (stepsShow.includes(step)) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(el, 1);\n+      } else {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(el, 0);\n+      }\n+    });\n+  }\n+\n+  \u002F**\n+   * Create prompt from data config\n+   * @param args\n+   *\u002F\n+  generatePrompt(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Get dataSend\n+    const form = target.closest('form');\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(form, dataSend);\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        if (status === 'success') {\n+          const elBtnNext = form.querySelector('.lp-btn-step[data-action=next]');\n+          elBtnNext.click();\n+          const elPromptTextarea = form.querySelector('textarea[name=lp-openai-prompt-generated-field]');\n+          elPromptTextarea.value = data;\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Submit prompt to OpenAI to generate course data\n+   * @param args\n+   *\u002F\n+  generateDataCourse(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Get dataSend\n+    const form = target.closest('form');\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(form, dataSend);\n+    const btnPrev = form.querySelector('.lp-btn-step[data-action=prev]');\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(btnPrev, 0);\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        if (lp_is_generating_course_data) {\n+          lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        }\n+        if (status === 'success') {\n+          \u002F\u002F Save structure data\n+          lp_structure_course = data.lp_structure_course;\n+\n+          \u002F\u002F Set preview HTML\n+          const elResults = form.querySelector('.lp-ai-generated-results');\n+          elResults.innerHTML = data.lp_html_preview;\n+          const elBtnNext = form.querySelector('.lp-btn-step[data-action=next]');\n+          elBtnNext.click();\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(btnPrev, 1);\n+        lp_is_generating_course_data = false;\n+      }\n+    };\n+    lp_is_generating_course_data = true;\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Create course with data of OpenAI\n+   * @param args\n+   *\u002F\n+  createCourse(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Get dataSend\n+    const dataSend = JSON.parse(target.dataset.send);\n+    dataSend.lp_structure_course = lp_structure_course;\n+    if (this.options.isCourseBuilder) {\n+      dataSend.is_course_builder = 1;\n+    }\n+    const form = target.closest('form');\n+    const elBtnPrev = form.querySelector('.lp-btn-step[data-action=prev]');\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elBtnPrev, 0);\n+    const windowWidth = window.outerWidth;\n+    let alertWidth;\n+    if (windowWidth \u003C 768) {\n+      alertWidth = '90%';\n+    } else {\n+      alertWidth = '30%';\n+    }\n+    const creatingCourseAiModal = document.querySelector('#lp-tmpl-creating-course-ai');\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      html: creatingCourseAiModal.innerHTML,\n+      showCloseButton: false,\n+      showConfirmButton: false,\n+      allowOutsideClick: false,\n+      width: alertWidth\n+    });\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        if (status === 'success') {\n+          setTimeout(() => {\n+            window.location.href = data.edit_course_url;\n+          }, this.options.redirectDelayMs);\n+        } else {\n+          lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elBtnPrev, 1);\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elBtnPrev, 1);\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+}\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\"\n \u002F*!************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js ***!\n   \\************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -48,13 +425,263 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\"\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js ***!\n+  \\*******************************************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   EditCurriculumAi: () => (\u002F* binding *\u002F EditCurriculumAi)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _edit_section_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fedit-section.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\");\n+\u002F* harmony import *\u002F var _edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fedit-section-item.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n+\u002F**\n+ * Generate data with OpenAI\n+ *\u002F\n+\n+\n+\n+\n+\n+\n+\n+let editSection = null;\n+let editSectionItem = null;\n+class EditCurriculumAi {\n+  constructor(options = {}) {\n+    this.options = {\n+      isCourseBuilder: false,\n+      ...options\n+    };\n+    this.init();\n+  }\n+  static selectors = {\n+    elBtnApplyCurriculum: '.lp-btn-apply-curriculum'\n+  };\n+  init() {\n+    if (!lpData?.enable_open_ai) {\n+      return;\n+    }\n+    if (this.options.isCourseBuilder) {\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum, el => {\n+        const elCountSections = el.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elCountSections);\n+        elCountSections.insertAdjacentHTML('beforebegin', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tclass=\"cb-course-edit-ai-btn lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+    } else {\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum, el => {\n+        const elCountSections = el.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elCountSections);\n+        elCountSections.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+    }\n+    this.events();\n+  }\n+  events() {\n+    if (EditCurriculumAi._loadedEvents) {\n+      return;\n+    }\n+    EditCurriculumAi._loadedEvents = true;\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n+      selector: EditCurriculumAi.selectors.elBtnApplyCurriculum,\n+      class: this,\n+      callBack: this.applyData.name\n+    }]);\n+  }\n+  async applyData(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(target.closest('form'), dataSend);\n+    if (!dataSend['lp-openai-generated-data']) {\n+      return;\n+    }\n+    const data = JSON.parse(dataSend['lp-openai-generated-data']);\n+\n+    \u002F\u002Fconsole.log( 'Generated Data:', data );\n+\n+    const sections = data[0].sections;\n+    if (!sections || sections.length === 0) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('No sections found in the generated data.', 'error');\n+    }\n+\n+    \u002F\u002F console.log( 'Generated Sections:', sections );\n+\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().close();\n+\n+    \u002F\u002F Wait half second to ensure SweetAlert is closed completely\n+    await new Promise(resolve => setTimeout(resolve, 500));\n+\n+    \u002F\u002F New edit section instance\n+    editSection = new _edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection();\n+    editSection.init();\n+\n+    \u002F\u002F New edit section item instance\n+    editSectionItem = new _edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__.EditSectionItem();\n+    editSectionItem.init();\n+\n+    \u002F\u002F Scroll to element add section\n+    const elEditCurriculum = document.querySelector(lpAssetsJsPath_admin_edit_course_edit_curriculum_js__WEBPACK_IMPORTED_MODULE_5__.EditCourseCurriculum.selectors.idElEditCurriculum);\n+    const elDivAddNewSection = elEditCurriculum.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elDivAddNewSection);\n+    elDivAddNewSection.scrollIntoView({\n+      behavior: 'smooth',\n+      block: 'center'\n+    });\n+\n+    \u002F\u002F Wait 800ms to ensure scroll completely\n+    await new Promise(resolve => setTimeout(resolve, 800));\n+    for (const sectionData of sections) {\n+      \u002F\u002F Set title\n+      const elSectionTitleNewInput = elEditCurriculum.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elSectionTitleNewInput);\n+      const elBtnAddSection = elEditCurriculum.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elBtnAddSection);\n+      elSectionTitleNewInput.value = sectionData.section_title || '';\n+      await new Promise(resolve => {\n+        editSection.addSection({\n+          e: new PointerEvent('click'),\n+          target: elBtnAddSection,\n+          callBackNest: this.updateSectionDescription({\n+            sectionData,\n+            elEditCurriculum\n+          }),\n+          resolve\n+        });\n+      });\n+    }\n+  }\n+\n+  \u002F**\n+   * Update section description after create new section\n+   * @param args\n+   *\u002F\n+  updateSectionDescription(args) {\n+    const {\n+      sectionData,\n+      elEditCurriculum\n+    } = args;\n+    return {\n+      success: async args => {\n+        const {\n+          elSection\n+        } = args;\n+        await new Promise(resolve => setTimeout(resolve, 1000));\n+\n+        \u002F\u002F Set description for the new section\n+        const elSectionDesInput = elSection.querySelector(_edit_section_js__WEBPACK_IMPORTED_MODULE_3__.EditSection.selectors.elSectionDesInput);\n+        elSectionDesInput.value = sectionData.section_description || '';\n+\n+        \u002F\u002F Call AJAX to save description\n+        await new Promise(resolve => {\n+          editSection.updateSectionDescription({\n+            e: new PointerEvent('click'),\n+            target: elSectionDesInput,\n+            callBackNest: this.addSectionItems({\n+              sectionData,\n+              elEditCurriculum\n+            }),\n+            resolve\n+          });\n+        });\n+        setTimeout(args.resolve, 1);\n+      },\n+      error: error => {},\n+      completed: () => {}\n+    };\n+  }\n+  addSectionItems(args) {\n+    const {\n+      sectionData,\n+      elEditCurriculum\n+    } = args;\n+    const lessons = sectionData.lessons || [];\n+    const quizzes = sectionData.quizzes || [];\n+    return {\n+      success: async args => {\n+        \u002F\u002Fawait new Promise( ( resolve ) => setTimeout( resolve, 1000 ) );\n+        const {\n+          elSection\n+        } = args;\n+        const elBtnSelectItemTypeLesson = elSection.querySelector(`${_edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__.EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_lesson]`);\n+        const elBtnSelectItemTypeQuiz = elSection.querySelector(`${_edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__.EditSectionItem.selectors.elBtnSelectItemType}[data-item-type=lp_quiz]`);\n+        for (const itemData of lessons) {\n+          elBtnSelectItemTypeLesson.click();\n+          await this.addItemToSection({\n+            itemData,\n+            elSection,\n+            elEditCurriculum\n+          });\n+        }\n+        for (const itemData of quizzes) {\n+          elBtnSelectItemTypeQuiz.click();\n+          await this.addItemToSection({\n+            itemData,\n+            elSection,\n+            elEditCurriculum\n+          });\n+        }\n+        setTimeout(args.resolve, 1);\n+      },\n+      error: error => {},\n+      completed: () => {}\n+    };\n+  }\n+  async addItemToSection(args) {\n+    const {\n+      itemData,\n+      elSection,\n+      elEditCurriculum\n+    } = args;\n+    const elBtnAddItem = elSection.querySelector(_edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__.EditSectionItem.selectors.elBtnAddItem);\n+    const elAddItemTypeTitleInput = elSection.querySelector(_edit_section_item_js__WEBPACK_IMPORTED_MODULE_4__.EditSectionItem.selectors.elAddItemTypeTitleInput);\n+    elAddItemTypeTitleInput.value = itemData.lesson_title || itemData.quiz_title || '';\n+\n+    \u002F\u002F Scroll to element add item\n+    elBtnAddItem.scrollIntoView({\n+      behavior: 'smooth',\n+      block: 'center'\n+    });\n+\n+    \u002F\u002F Call AJAX to add item to section\n+    await new Promise(resolve => {\n+      editSectionItem.addItemToSection({\n+        e: new PointerEvent('click'),\n+        target: elBtnAddItem,\n+        resolve,\n+        callBackNest: {\n+          completed: async args => {\n+            setTimeout(resolve, 1000);\n+          }\n+        }\n+      });\n+    });\n+    setTimeout(args.resolve, 1);\n+  }\n+}\n+\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\"\n \u002F*!******************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js ***!\n   \\******************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -355,6 +982,9 @@\n         id_url: idUrlHandle\n       }\n     };\n+    if (document.querySelector('#lp-course-builder')) {\n+      dataSend.is_course_builder = 1;\n+    }\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n \n@@ -804,7 +1434,7 @@\n    *\n    * @param {HTMLElement} elItem - The item element\n    * @param {number} itemId - The item ID\n-   * @param {string} itemType - The item type (lp_lesson, lp_quiz)\n+   * @param {string} itemType - The item type (lp_lesson, lp_quiz, lp_assignment)\n    *\u002F\n   addPopupAttributesToItem(elItem, itemId, itemType) {\n     \u002F\u002F Check if we're in Course Builder context\n@@ -812,9 +1442,9 @@\n     if (!isCourseBuilder || !itemId) {\n       return;\n     }\n-\n-    \u002F\u002F Only add popup attributes for lesson and quiz\n-    if (!['lp_lesson', 'lp_quiz'].includes(itemType)) {\n+    const popupType = itemType.replace(\u002F^lp_\u002F, '');\n+    const templateSelector = `#lp-tmpl-builder-popup-curriculum-${popupType}-course-${this.courseId}`;\n+    if (!popupType || !document.querySelector(templateSelector)) {\n       return;\n     }\n \n@@ -846,19 +1476,20 @@\n     editLink.classList.add('edit-popup-link');\n \n     \u002F\u002F Store additional data for popup on the \u003Cli> element\n-    editBtn.setAttribute('data-item-id', itemId);\n-    editBtn.setAttribute('data-item-type', itemType);\n     editBtn.setAttribute('data-course-id', this.courseId);\n+    editBtn.setAttribute('data-popup-type', popupType);\n+    editBtn.setAttribute('data-popup-id', itemId);\n+    editBtn.setAttribute('data-template', templateSelector);\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\"\n \u002F*!*************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js ***!\n   \\*************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -1533,13 +2164,13 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\"\n \u002F*!**********************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js ***!\n   \\**********************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -2728,13 +3359,609 @@\n   editQuestion.init();\n });\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\"\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js ***!\n+  \\*****************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   GenerateWithOpenai: () => (\u002F* binding *\u002F GenerateWithOpenai)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002F..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_1__);\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F**\n+ * Generate data with OpenAI\n+ *\u002F\n+\n+\n+\n+\n+let lp_structure_course;\n+let popupSweetAlert = null;\n+let lp_is_generating_course_data = false;\n+const lp_course_ai_setting = JSON.parse(localStorage.getItem('lp_course_ai_setting')) || {};\n+let isLayoutGutenberg = false;\n+let selectGutenberg;\n+let dispatchGutenberg;\n+let editorGutenberg;\n+class GenerateWithOpenai {\n+  constructor(options = {}) {\n+    this.options = {\n+      autoInsertButtons: true,\n+      isCourseBuilder: false,\n+      titleInputSelector: 'input[name=post_title]',\n+      courseBuilderTitleInputSelector: 'input[name=course_title]',\n+      editorIdClassic: 'content',\n+      editorIdCourseBuilder: 'course_description_editor',\n+      ...options\n+    };\n+    this.init();\n+  }\n+  static selectors = {\n+    elBtnGenerateWithAi: '.lp-btn-generate-with-ai',\n+    elGenerateDataAiWrap: '.lp-generate-data-ai-wrap'\n+  };\n+  init() {\n+    if (!lpData?.enable_open_ai) {\n+      return;\n+    }\n+    if (this.options.autoInsertButtons) {\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#titlewrap', el => {\n+        el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"margin-left: 5px\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#wp-content-media-buttons', el => {\n+        el.insertAdjacentHTML('beforeend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+      _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('#postimagediv', el => {\n+        const elInside = el.querySelector('.postbox-header');\n+        elInside.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`);\n+      });\n+\n+      \u002F\u002F Check is layout Gutenberg\n+      if (wp.data && wp.data.select('core\u002Feditor')) {\n+        isLayoutGutenberg = true;\n+        selectGutenberg = wp.data.select;\n+        dispatchGutenberg = wp.data.dispatch;\n+        editorGutenberg = selectGutenberg('core\u002Feditor');\n+\n+        \u002F\u002F For layout Gutenberg - button for title\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-document-bar', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"margin-left: 5px\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+\n+        \u002F\u002F For layout Gutenberg - button for description\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n+          el.insertAdjacentHTML('beforebegin', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+\n+        \u002F\u002F For layout Gutenberg - button for image\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady('.editor-post-featured-image', el => {\n+          el.insertAdjacentHTML('afterend', `\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${lpData.i18n.generate_with_ai}\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`);\n+        });\n+      }\n+    }\n+    this.events();\n+  }\n+  getTitleInputSelector() {\n+    return this.options.isCourseBuilder ? this.options.courseBuilderTitleInputSelector : this.options.titleInputSelector;\n+  }\n+  getEditorId() {\n+    return this.options.isCourseBuilder ? this.options.editorIdCourseBuilder : this.options.editorIdClassic;\n+  }\n+  setCourseBuilderPostId(form) {\n+    if (!this.options.isCourseBuilder || !form) {\n+      return;\n+    }\n+    const postIdInput = form.querySelector('[name=\"post-id\"]');\n+    if (!postIdInput) {\n+      return;\n+    }\n+    const courseEditWrap = document.querySelector('.cb-section__course-edit[data-course-id]');\n+    const courseId = courseEditWrap?.dataset?.courseId || '';\n+    if (courseId) {\n+      postIdInput.value = courseId;\n+    }\n+  }\n+  extractImageSourceFromHtml(html) {\n+    if (!html) {\n+      return '';\n+    }\n+    const tempWrapper = document.createElement('div');\n+    tempWrapper.innerHTML = html;\n+    return tempWrapper.querySelector('img')?.getAttribute('src') || '';\n+  }\n+  applyCourseBuilderFeaturedImage(attachmentId, imageSrc) {\n+    if (!attachmentId || !imageSrc) {\n+      return false;\n+    }\n+    document.dispatchEvent(new CustomEvent('lp-course-builder\u002Fai-featured-image-applied', {\n+      detail: {\n+        attachmentId,\n+        imageSrc\n+      }\n+    }));\n+    return true;\n+  }\n+  events() {\n+    _utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n+      selector: GenerateWithOpenai.selectors.elBtnGenerateWithAi,\n+      class: this,\n+      callBack: this.showPopup.name\n+    }, {\n+      selector: '.lp-btn-step',\n+      class: this,\n+      callBack: this.showStep.name\n+    }, {\n+      selector: '.lp-btn-generate-prompt',\n+      class: this,\n+      callBack: this.generatePrompt.name\n+    }, {\n+      selector: '.lp-btn-call-open-ai',\n+      class: this,\n+      callBack: this.generateData.name\n+    }, {\n+      selector: '.lp-btn-copy',\n+      class: this,\n+      callBack: this.copyGeneratedData.name\n+    }, {\n+      selector: '.lp-btn-apply',\n+      class: this,\n+      callBack: this.applyGeneratedData.name\n+    }, {\n+      selector: '.lp-btn-ai-apply-image',\n+      class: this,\n+      callBack: this.applyImageData.name\n+    }, {\n+      selector: '.lp-btn-close-ai-popup',\n+      \u002F\u002Fclass: this,\n+      callBack: args => {\n+        const {\n+          e,\n+          target\n+        } = args;\n+        const message = lpData.i18n.confirm_close_ai;\n+        if (!lp_is_generating_course_data) {\n+          sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+        } else if (confirm(message)) {\n+          sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+        }\n+\n+        \u002F\u002F Testing custom confirm box\n+        \u002F*if ( confirm( message ) ) {\n+        \tSweetAlert.close();\n+        }*\u002F\n+      }\n+    }]);\n+  }\n+  showPopup(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    const templateId = target.dataset.template || target.closest('.lp-btn-generate-with-ai').dataset.template || target.closest('.lp-generate-data-ai-wrap').dataset.template || '';\n+    const modalTemplate = document.querySelector(templateId);\n+    if (!modalTemplate) {\n+      console.error(`Template ${templateId} not found!`);\n+      return;\n+    }\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      html: modalTemplate.innerHTML,\n+      width: '60%',\n+      showCloseButton: false,\n+      showConfirmButton: false,\n+      allowOutsideClick: false,\n+      allowEscapeKey: false,\n+      didOpen: () => {\n+        popupSweetAlert = sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().getPopup();\n+        \u002F\u002F Click to show tomSelect style\n+        popupSweetAlert.click();\n+\n+        \u002F\u002F Set post title and post content to hidden fields of form to AI prompt reference\n+        const elPostTitleInput = document.querySelector(this.getTitleInputSelector());\n+        let post_title = '';\n+        if (elPostTitleInput) {\n+          post_title = elPostTitleInput.value;\n+        } else if (isLayoutGutenberg) {\n+          const elGutenbergTitle = document.querySelector('.editor-post-card-panel__title-name');\n+          if (elGutenbergTitle) {\n+            post_title = elGutenbergTitle.textContent;\n+          }\n+        }\n+        let post_content = '';\n+        if (!isLayoutGutenberg) {\n+          const editorId = this.getEditorId();\n+          if (!window.tinymce || !window.tinymce.get(editorId)) {\n+            const editorElement = document.querySelector(`#${editorId}`);\n+            post_content = editorElement ? editorElement.value : '';\n+          } else {\n+            post_content = window.tinymce.get(editorId).getContent({\n+              format: 'text'\n+            });\n+          }\n+        } else {\n+          const content = editorGutenberg.getEditedPostContent();\n+          post_content = content.replace(\u002F(\u003C([^>]+)>)\u002Fgi, ''); \u002F\u002F Remove HTML tags\n+        }\n+        const form = popupSweetAlert.querySelector('form');\n+        this.setCourseBuilderPostId(form);\n+        const elPostTitle = form.querySelector('[name=post-title]');\n+        if (elPostTitle) {\n+          elPostTitle.value = post_title;\n+          if (!post_title) {\n+            const elGroup = elPostTitle.closest('.form-group');\n+            const elReferWarning = elGroup.querySelector('.lp-ai-warning-refer');\n+            if (elReferWarning) {\n+              _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elReferWarning, 1);\n+            }\n+          }\n+        }\n+        const elPostContent = form.querySelector('[name=post-content]');\n+        if (elPostContent) {\n+          elPostContent.value = post_content;\n+          if (post_content.length \u003C 2) {\n+            const elGroup = elPostContent.closest('.form-group');\n+            const elReferWarning = elGroup.querySelector('.lp-ai-warning-refer');\n+            if (elReferWarning) {\n+              _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(elReferWarning, 1);\n+            }\n+          }\n+        }\n+        const targetAudience = popupSweetAlert.querySelector('select[name=\"target_audience\"]');\n+        if (targetAudience) {\n+          if (lp_course_ai_setting?.target_audience) {\n+            targetAudience.tomselect.setValue(lp_course_ai_setting.target_audience);\n+          }\n+          targetAudience.addEventListener('change', event => {\n+            lp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\n+            localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+          });\n+        }\n+        const tone = popupSweetAlert.querySelector('select[name=\"tone\"]');\n+        if (tone) {\n+          if (lp_course_ai_setting?.tone) {\n+            tone.tomselect.setValue(lp_course_ai_setting.tone);\n+          }\n+          tone.addEventListener('change', event => {\n+            lp_course_ai_setting.tone = tone.tomselect.getValue();\n+            localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+          });\n+        }\n+        const language = popupSweetAlert.querySelector('select[name=\"language\"]');\n+        if (language) {\n+          if (lp_course_ai_setting?.language) {\n+            language.tomselect.setValue(lp_course_ai_setting.language);\n+          }\n+          language.addEventListener('change', event => {\n+            const value = language.tomselect.getValue();\n+            lp_course_ai_setting.language = value ? [value] : [];\n+            localStorage.setItem('lp_course_ai_setting', JSON.stringify(lp_course_ai_setting));\n+          });\n+        }\n+      }\n+    }).then(result => {\n+      if (result.isDismissed) {\n+        if (lp_is_generating_course_data) {\n+          lp_is_generating_course_data = false;\n+        }\n+      }\n+    });\n+  }\n+  showStep(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const elBtnActions = target.closest('.button-actions');\n+    const elCreateCourseAIWrap = elBtnActions.closest(GenerateWithOpenai.selectors.elGenerateDataAiWrap);\n+    let step = parseInt(elBtnActions.dataset.step);\n+    const stepAction = target.dataset.action;\n+    if (stepAction === 'next') {\n+      step++;\n+    } else if (stepAction === 'prev') {\n+      step--;\n+    }\n+    elBtnActions.dataset.step = step;\n+    const elForm = target.closest('form');\n+    const elContentStep = elForm.querySelector(`.step-content[data-step=\"${step}\"]`);\n+    const elItemStep = elCreateCourseAIWrap.querySelector(`.step-item[data-step=\"${step}\"]`);\n+    elForm.querySelectorAll('.step-content').forEach(el => el.classList.remove('active'));\n+    elContentStep.classList.add('active');\n+    elCreateCourseAIWrap.querySelectorAll('.step-item').forEach(el => el.classList.remove('active'));\n+    elItemStep.classList.add('active');\n+\n+    \u002F\u002F Get all buttons step to show\u002Fhide\n+    const form = target.closest('form');\n+    const elBtnSteps = form.querySelectorAll('button[data-step-show]');\n+    elBtnSteps.forEach(el => {\n+      const stepsShow = el.dataset.stepShow.split(',').map(s => parseInt(s.trim()));\n+      if (stepsShow.includes(step)) {\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(el, 1);\n+      } else {\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(el, 0);\n+      }\n+    });\n+  }\n+\n+  \u002F**\n+   * Create prompt from data config\n+   * @param args\n+   *\u002F\n+  generatePrompt(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Get dataSend\n+    const form = target.closest('form');\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = _utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(form, dataSend);\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        if (status === 'success') {\n+          const elPromptTextarea = form.querySelector('textarea[name=lp-openai-prompt-generated-field]');\n+          elPromptTextarea.value = data;\n+          const elBtnNext = form.querySelector('.lp-btn-step[data-action=next]');\n+          elBtnNext.click();\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+      },\n+      completed: () => {\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Submit prompt to OpenAI to generate course data\n+   * @param args\n+   *\u002F\n+  generateData(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Get dataSend\n+    const form = target.closest('form');\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = _utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(form, dataSend);\n+    const btnPrev = form.querySelector('.lp-btn-step[data-action=prev]');\n+    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(btnPrev, 0);\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        if (lp_is_generating_course_data) {\n+          lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        }\n+        if (status === 'success') {\n+          \u002F\u002F Save structure data\n+          lp_structure_course = data.lp_structure_course;\n+\n+          \u002F\u002F Set preview HTML\n+          const elResults = form.querySelector('.lp-ai-generated-results');\n+          elResults.innerHTML = data.lp_html_preview;\n+          const elBtnNext = form.querySelector('.lp-btn-step[data-action=next]');\n+          elBtnNext.click();\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+      },\n+      completed: () => {\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(btnPrev, 1);\n+        lp_is_generating_course_data = false;\n+      }\n+    };\n+    lp_is_generating_course_data = true;\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  applyGeneratedData(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const dataApply = target.dataset.apply;\n+    const dataTarget = target.dataset.target;\n+    if (dataTarget) {\n+      if (!isLayoutGutenberg) {\n+        if (dataTarget === 'set-wp-editor-content') {\n+          this.setWPEditorContent(dataApply);\n+        } else if (dataTarget === 'set-wp-title') {\n+          const elTitleInput = document.querySelector(this.getTitleInputSelector());\n+          if (elTitleInput) {\n+            elTitleInput.value = dataApply;\n+            elTitleInput.dispatchEvent(new Event('input', {\n+              bubbles: true\n+            }));\n+          }\n+        }\n+      } else if (dataTarget === 'set-wp-editor-content') {\n+        dispatchGutenberg('core\u002Feditor').editPost({\n+          content: dataApply\n+        });\n+      } else if (dataTarget === 'set-wp-title') {\n+        dispatchGutenberg('core\u002Feditor').editPost({\n+          title: dataApply\n+        });\n+      }\n+    }\n+    if (popupSweetAlert) {\n+      sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+    }\n+  }\n+  copyGeneratedData(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const dataCopy = target.dataset.copy;\n+    if (navigator.clipboard) {\n+      navigator.clipboard.writeText(dataCopy).then(() => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show('Copied to clipboard!', 'success');\n+      }).catch(err => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show('Failed to copy text: ' + err, 'error');\n+      });\n+    } else {\n+      \u002F\u002F Fallback when clipboard API is unavailable\n+      const textarea = document.createElement('textarea');\n+      textarea.value = dataCopy;\n+      textarea.style.position = 'fixed';\n+      textarea.style.left = '-9999px';\n+      document.body.appendChild(textarea);\n+      textarea.select();\n+      try {\n+        const successful = document.execCommand('copy');\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(successful ? 'Copied to clipboard!' : 'Failed to copy text', successful ? 'success' : 'error');\n+      } catch (err) {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show('Failed to copy text: ' + err, 'error');\n+      }\n+      document.body.removeChild(textarea);\n+    }\n+\n+    \u002F*navigator.clipboard.writeText( dataCopy ).then( () => {\n+    \tlpToastify.show( 'Copied to clipboard!', 'success' );\n+    } ).catch( ( err ) => {\n+    \tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\n+    } );*\u002F\n+  }\n+  setWPEditorContent(htmlContent) {\n+    const editorId = this.getEditorId();\n+    const editor = window.tinymce?.get(editorId);\n+    if (editor) {\n+      editor.setContent(htmlContent);\n+      return;\n+    }\n+    const editorElement = document.querySelector(`#${editorId}`);\n+    if (editorElement) {\n+      editorElement.value = htmlContent;\n+      editorElement.dispatchEvent(new Event('input', {\n+        bubbles: true\n+      }));\n+    }\n+  }\n+  applyImageData(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    let dataSend = JSON.parse(target.dataset.send);\n+    dataSend = _utils_js__WEBPACK_IMPORTED_MODULE_0__.mergeDataWithDatForm(target.closest('form'), dataSend);\n+    \u002F\u002Fe.preventDefault();\n+    _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, true);\n+\n+    \u002F\u002F Ajax to generate prompt\n+    const callBack = {\n+      success: response => {\n+        const {\n+          message,\n+          status,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+        if (status === 'success') {\n+          if (this.options.isCourseBuilder) {\n+            const attachmentId = parseInt(data?.attachment_id || 0, 10);\n+            const imageSrc = this.extractImageSourceFromHtml(data?.html_image || '');\n+            const applied = this.applyCourseBuilderFeaturedImage(attachmentId, imageSrc);\n+            if (!applied) {\n+              lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show('Failed to apply image to course featured image.', 'error');\n+              return;\n+            }\n+          } else if (!isLayoutGutenberg) {\n+            \u002F\u002F Set image\n+            const elImagePreview = document.querySelector('#postimagediv .inside');\n+            elImagePreview.outerHTML = data.html_image;\n+          } else {\n+            dispatchGutenberg('core\u002Feditor').editPost({\n+              featured_media: data.attachment_id\n+            });\n+          }\n+          if (popupSweetAlert) {\n+            sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().close();\n+          }\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error, 'error');\n+      },\n+      completed: () => {\n+        _utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(target, false);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+}\n+\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\"\n \u002F*!************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js ***!\n   \\************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -2978,13 +4205,13 @@\n };\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\"\n \u002F*!********************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js ***!\n   \\********************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -3101,13 +4328,13 @@\n };\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\"\n \u002F*!******************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js ***!\n   \\******************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -3151,13 +4378,13 @@\n }\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (lplistAPI);\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js\"\n \u002F*!*************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js ***!\n   \\*************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -3166,17 +4393,30 @@\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n-\u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_course_edit_curriculum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n-\u002F* harmony import *\u002F var _extra_info_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fextra-info.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fextra-info.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_course_edit_curriculum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\");\n+\u002F* harmony import *\u002F var _extra_info_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fextra-info.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fextra-info.js\");\n+\u002F* harmony import *\u002F var _builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002Fbuilder-form-state.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\");\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\n+\n+\n \n \n \n \n class BuilderEditCourse {\n   constructor() {\n+    \u002F\u002F Only initialize on course edit pages, not quiz\u002Fquestion\u002Flesson edit pages\n+    const isCourseEditPage = document.querySelector('.cb-section__course-edit');\n+    if (!isCourseEditPage) {\n+      return;\n+    }\n     this.init();\n   }\n   static selectors = {\n+    elCBContent: '.lp-cb-content',\n     elTabLinks: '.lp-meta-box__course-tab__tabs li a',\n     elTabItems: '.lp-meta-box__course-tab__tabs li',\n     elTabPanels: '.lp-meta-box-course-panels',\n@@ -3184,6 +4424,11 @@\n     elBtnUpdateCourse: '.cb-btn-update',\n     elBtnHeaderSave: '.lp-cb-save-btn',\n     elBtnDraftCourse: '.cb-btn-darft',\n+    elBtnPublishCourse: '.cb-btn-publish',\n+    elBtnPendingCourse: '.cb-btn-pending',\n+    elBtnDropdownAction: '.cb-dropdown-item[data-status]',\n+    elBtnMainAction: '.cb-btn-main-action',\n+    elBtnDuplicateCourse: '.cb-btn-duplicate-course',\n     elBtnTrashCourse: '.cb-btn-trash',\n     elBtnSaveSettings: '.cb-btn-save-settings',\n     elDropdownToggle: '.cb-btn-dropdown-toggle',\n@@ -3203,12 +4448,26 @@\n     elSelectParentCategory: '#newcourse_category_parent',\n     elBtnSubmitCategory: '#course_category-add-submit',\n     elCategoryChecklist: '#course_categorychecklist',\n+    \u002F\u002F New custom category add form selectors\n+    elBtnAddCategoryNew: '.cb-course-edit-category__btn-add-new',\n+    elFormCategoryAddNew: '.cb-course-edit-terms__form-add-category',\n+    elInputAddCategory: '.cb-course-edit-category__input',\n+    elSelectAddCategoryParent: '.cb-course-edit-category__select-parent',\n+    elBtnSaveCategory: '.cb-course-edit-category__btn-save',\n+    elBtnCancelCategoryNew: '.cb-course-edit-category__btn-cancel',\n+    elCategorySearchInput: '.cb-course-edit-category__search-input',\n+    elBtnToggleTermsSearch: '.cb-terms-header__btn-search',\n+    elTermsSearchToolbar: '.cb-terms-search-toolbar',\n     elWrapperCheckBoxTag: '.cb-course-edit-tags__checkbox-wrapper',\n     elFormTagAddNew: '.cb-course-edit-terms__form-add-tag',\n     elBtnAddTagNew: '.cb-course-edit-tag__btn-add-new',\n     elBtnCancelTagNew: '.cb-course-edit-tag__btn-cancel',\n     elBtnSaveTag: '.cb-course-edit-tags__btn-save',\n     elInputAddTag: '.cb-course-edit-tags__input',\n+    elTagsWrapper: '.cb-course-edit-tags__wrapper',\n+    elTagChip: '.cb-tag-chip',\n+    elTagSearchInput: '.cb-course-edit-tags__search-input',\n+    elTagEmptyState: '.cb-course-edit-tags__empty',\n     elBtnRemoveFeatured: '.cb-remove-featured-image',\n     elBtnSetFeatured: '.cb-featured-image-dropzone:not(.has-image)',\n     elBtnChangeFeatured: '.cb-change-featured-image',\n@@ -3216,6 +4475,13 @@\n     elFeaturedImageLink: '.cb-featured-image-link',\n     elThumbnailInput: '#course_thumbnail_id',\n     elFeaturedImageContainer: '.cb-featured-image-container',\n+    elPublishPanel: '.cb-course-edit-publish',\n+    elPublishStatusSelect: '#cb-course-publish-status',\n+    elPublishVisibilitySelect: '#cb-course-publish-visibility',\n+    elPublishPasswordRow: '.cb-course-edit-publish__password-row',\n+    elPublishPasswordInput: '#cb-course-publish-password',\n+    elPublishDateLabel: '#cb-course-publish-date-label',\n+    elPublishDateInput: '#cb-course-publish-date',\n     elPriceCourseData: '#price_course_data',\n     elSaleDatesFields: '.lp_sale_dates_fields',\n     elSalePriceScheduleBtn: '.lp_sale_price_schedule',\n@@ -3225,23 +4491,76 @@\n     elPriceInput: '#_lp_price',\n     elFormField: '.form-field',\n     elTipFloating: '.learn-press-tip-floating',\n-    elCategoryDiv: '#taxonomy-course_category'\n+    elCategoryDiv: '#taxonomy-course_category',\n+    elCourseResultRadio: 'input[type=\"radio\"][name=\"_lp_course_result\"]',\n+    elPassingConditionField: '._lp_passing_condition_field',\n+    elBtnGetFinalQuiz: '.lp-metabox-get-final-quiz',\n+    elFinalQuizMessage: '.lp-metabox-evaluate-final_quiz',\n+    elExtraMetaInput: '.lp_course_extra_meta_box__input',\n+    elFaqMetaInput: '.lp_course_faq_meta_box__field input',\n+    elCBHorizontalTabs: '.lp-cb-tabs__item',\n+    elCBTabPanels: '.lp-cb-tab-panel',\n+    \u002F\u002F Permalink component\n+    elPermalinkDisplay: '.cb-permalink-display',\n+    elPermalinkEditor: '.cb-permalink-editor',\n+    elPermalinkEditBtn: '.cb-permalink-edit-btn',\n+    elPermalinkOkBtn: '.cb-permalink-ok-btn',\n+    elPermalinkCancelBtn: '.cb-permalink-cancel-btn',\n+    elPermalinkSlugInput: '.cb-permalink-slug-input',\n+    elPermalinkUrl: '.cb-permalink-url',\n+    elPermalinkBaseUrl: '#cb-permalink-base-url',\n+    \u002F\u002F Preview and Admin link elements\n+    elBtnPreview: '.cb-button.cb-btn-preview',\n+    elAdminLink: '.lp-cb-admin-link'\n   };\n   init() {\n-    const editCourseCurriculum = new lpAssetsJsPath_admin_edit_course_edit_curriculum__WEBPACK_IMPORTED_MODULE_2__.EditCourseCurriculum();\n-    const metaboxExtraInfo = new _extra_info_js__WEBPACK_IMPORTED_MODULE_3__.MetaboxExtraInfo();\n+    this.isSavingCourse = false;\n+    const editCourseCurriculum = new lpAssetsJsPath_admin_edit_course_edit_curriculum__WEBPACK_IMPORTED_MODULE_3__.EditCourseCurriculum();\n+    const metaboxExtraInfo = new _extra_info_js__WEBPACK_IMPORTED_MODULE_4__.MetaboxExtraInfo();\n     editCourseCurriculum.init();\n     metaboxExtraInfo.init();\n     this.initTabs();\n     this.initTabTitles();\n     this.initCategoryTabs();\n     this.initCategoryTree();\n+    this.applyCategorySearch();\n+    this.initTagManagement();\n     this.initSalePriceLayout();\n+    this.initAssessmentMetaboxFeatures();\n     this.initTitleCharCount();\n     this.initDescWordCount();\n+    this.syncPublishStatusOptions();\n+    this.syncPublishDateLabel();\n+    this.syncPublishVisibilityControls(false);\n     this.initHeaderActionsDropdown();\n+    this.bindAiFeaturedImageListener();\n     this.events();\n   }\n+  bindAiFeaturedImageListener() {\n+    if (BuilderEditCourse._boundAiFeaturedImageListener) {\n+      return;\n+    }\n+    document.addEventListener('lp-course-builder\u002Fai-featured-image-applied', event => {\n+      this.handleAiFeaturedImageApplied(event);\n+    });\n+    BuilderEditCourse._boundAiFeaturedImageListener = true;\n+  }\n+  handleAiFeaturedImageApplied(event) {\n+    const attachmentId = parseInt(event?.detail?.attachmentId || 0, 10);\n+    const imageSrc = event?.detail?.imageSrc || '';\n+    if (!attachmentId || !imageSrc) {\n+      return;\n+    }\n+    this.setFeaturedImage({\n+      id: attachmentId,\n+      url: imageSrc,\n+      sizes: {\n+        medium: {\n+          url: imageSrc\n+        }\n+      }\n+    });\n+  }\n   events() {\n     if (BuilderEditCourse._loadedEvents) {\n       return;\n@@ -3256,6 +4575,10 @@\n       class: this,\n       callBack: this.handleCategoryTabClick.name\n     }, {\n+      selector: BuilderEditCourse.selectors.elCBHorizontalTabs,\n+      class: this,\n+      callBack: this.handleCBHorizontalTabClick.name\n+    }, {\n       selector: BuilderEditCourse.selectors.elBtnToggleAddCategory,\n       class: this,\n       callBack: this.toggleAddCategoryForm.name\n@@ -3263,8 +4586,26 @@\n       selector: BuilderEditCourse.selectors.elBtnSubmitCategory,\n       class: this,\n       callBack: this.addNewCategory.name\n+    },\n+    \u002F\u002F Custom category add form handlers\n+    {\n+      selector: BuilderEditCourse.selectors.elBtnAddCategoryNew,\n+      class: this,\n+      callBack: this.toggleCustomAddCategoryForm.name\n     }, {\n-      selector: BuilderEditCourse.selectors.elBtnUpdateCourse,\n+      selector: BuilderEditCourse.selectors.elBtnToggleTermsSearch,\n+      class: this,\n+      callBack: this.toggleTermsSearchToolbar.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elBtnCancelCategoryNew,\n+      class: this,\n+      callBack: this.toggleCustomAddCategoryForm.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elBtnSaveCategory,\n+      class: this,\n+      callBack: this.addNewCategoryCustom.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elBtnMainAction,\n       class: this,\n       callBack: this.updateCourse.name\n     }, {\n@@ -3272,10 +4613,14 @@\n       class: this,\n       callBack: this.updateCourse.name\n     }, {\n-      selector: BuilderEditCourse.selectors.elBtnDraftCourse,\n+      selector: BuilderEditCourse.selectors.elBtnDropdownAction,\n       class: this,\n       callBack: this.updateCourse.name\n     }, {\n+      selector: BuilderEditCourse.selectors.elBtnDuplicateCourse,\n+      class: this,\n+      callBack: this.duplicateCourse.name\n+    }, {\n       selector: BuilderEditCourse.selectors.elBtnTrashCourse,\n       class: this,\n       callBack: this.trashCourse.name\n@@ -3284,6 +4629,10 @@\n       class: this,\n       callBack: this.saveSettings.name\n     }, {\n+      selector: BuilderEditCourse.selectors.elBtnGetFinalQuiz,\n+      class: this,\n+      callBack: this.getFinalQuiz.name\n+    }, {\n       selector: BuilderEditCourse.selectors.elBtnAddTagNew,\n       class: this,\n       callBack: this.toggleAddTagForm.name\n@@ -3319,6 +4668,20 @@\n       selector: BuilderEditCourse.selectors.elCancelSaleScheduleBtn,\n       class: this,\n       callBack: this.handleCancelSchedule.name\n+    },\n+    \u002F\u002F Permalink component events\n+    {\n+      selector: BuilderEditCourse.selectors.elPermalinkEditBtn,\n+      class: this,\n+      callBack: this.handlePermalinkEdit.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elPermalinkOkBtn,\n+      class: this,\n+      callBack: this.handlePermalinkOk.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elPermalinkCancelBtn,\n+      class: this,\n+      callBack: this.handlePermalinkCancel.name\n     }]);\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('change', [{\n       selector: '.lp-meta-box input, .forminp input',\n@@ -3328,6 +4691,26 @@\n       selector: '#course_category-pop input[type=\"checkbox\"]',\n       class: this,\n       callBack: this.handleMostUsedChange.name\n+    }, {\n+      selector: 'input[name=\"course_tags[]\"]',\n+      class: this,\n+      callBack: this.handleTagSelectionChange.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elCourseResultRadio,\n+      class: this,\n+      callBack: this.handleCourseResultChange.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elPublishVisibilitySelect,\n+      class: this,\n+      callBack: this.handlePublishVisibilityChange.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elPublishStatusSelect,\n+      class: this,\n+      callBack: this.handlePublishStatusChange.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elPublishDateInput,\n+      class: this,\n+      callBack: this.handlePublishDateChange.name\n     }]);\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('input', [{\n       selector: BuilderEditCourse.selectors.elPriceCourseData,\n@@ -3337,6 +4720,14 @@\n       selector: BuilderEditCourse.selectors.elTitleInput,\n       class: this,\n       callBack: this.handleTitleInput.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elTagSearchInput,\n+      class: this,\n+      callBack: this.handleTagSearchInput.name\n+    }, {\n+      selector: BuilderEditCourse.selectors.elCategorySearchInput,\n+      class: this,\n+      callBack: this.handleCategorySearchInput.name\n     }]);\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('keydown', [{\n       selector: BuilderEditCourse.selectors.elInputNewCategory,\n@@ -3344,12 +4735,261 @@\n       callBack: this.addNewCategory.name,\n       checkIsEventEnter: true\n     }, {\n+      selector: BuilderEditCourse.selectors.elInputAddCategory,\n+      class: this,\n+      callBack: this.addNewCategoryCustom.name,\n+      checkIsEventEnter: true\n+    }, {\n       selector: BuilderEditCourse.selectors.elInputAddTag,\n       class: this,\n       callBack: this.addNewTag.name,\n       checkIsEventEnter: true\n+    }, {\n+      selector: BuilderEditCourse.selectors.elExtraMetaInput,\n+      class: this,\n+      callBack: this.preventEnterSubmitInMetaInput.name,\n+      checkIsEventEnter: true\n+    }, {\n+      selector: BuilderEditCourse.selectors.elFaqMetaInput,\n+      class: this,\n+      callBack: this.preventEnterSubmitInMetaInput.name,\n+      checkIsEventEnter: true\n     }]);\n   }\n+  initAssessmentMetaboxFeatures() {\n+    this.updatePassingConditionVisibility();\n+  }\n+  handleCourseResultChange() {\n+    this.updatePassingConditionVisibility();\n+  }\n+  updatePassingConditionVisibility() {\n+    const listHides = ['evaluate_final_quiz', 'evaluate_final_assignment'];\n+    const checkedEvaluation = document.querySelector(`${BuilderEditCourse.selectors.elCourseResultRadio}:checked`);\n+    const shouldHidePassing = checkedEvaluation ? listHides.includes(checkedEvaluation.value) : false;\n+    document.querySelectorAll(BuilderEditCourse.selectors.elPassingConditionField).forEach(el => {\n+      el.style.display = shouldHidePassing ? 'none' : '';\n+    });\n+  }\n+  preventEnterSubmitInMetaInput(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    if (target?.blur) {\n+      target.blur();\n+    }\n+  }\n+  async getFinalQuiz(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const btn = target.closest(BuilderEditCourse.selectors.elBtnGetFinalQuiz);\n+    if (!btn || btn.dataset.loadingState === 'yes') {\n+      return;\n+    }\n+    const defaultText = btn.textContent;\n+    const loadingText = btn.dataset.loading || defaultText;\n+    const currentMessage = btn.parentNode?.querySelector(BuilderEditCourse.selectors.elFinalQuizMessage) || document.querySelector(BuilderEditCourse.selectors.elFinalQuizMessage);\n+    if (currentMessage) {\n+      currentMessage.remove();\n+    }\n+    btn.dataset.loadingState = 'yes';\n+    btn.textContent = loadingText;\n+    try {\n+      const response = await this.requestFinalQuiz(btn.dataset.postid || '');\n+      const message = response?.data || response?.message || '';\n+      btn.textContent = defaultText;\n+      const messageNode = document.createElement('div');\n+      messageNode.className = 'lp-metabox-evaluate-final_quiz';\n+      messageNode.innerHTML = message;\n+      btn.parentNode.insertBefore(messageNode, btn.nextSibling);\n+    } catch (error) {\n+      btn.textContent = defaultText;\n+      if (error?.message) {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message, 'error');\n+      }\n+    } finally {\n+      delete btn.dataset.loadingState;\n+    }\n+  }\n+  async requestFinalQuiz(courseId = '') {\n+    if (typeof wp !== 'undefined' && typeof wp.apiFetch === 'function') {\n+      return wp.apiFetch({\n+        path: 'lp\u002Fv1\u002Fadmin\u002Fcourse\u002Fget_final_quiz',\n+        method: 'POST',\n+        data: {\n+          courseId,\n+          isCourseBuilder: true\n+        }\n+      });\n+    }\n+    const restBase = window.lpGlobalSettings?.rest || window.lpData?.lp_rest_url || '\u002Fwp-json\u002F';\n+    const restNonce = window.lpGlobalSettings?.nonce || window.lpData?.nonce || '';\n+    const normalizedRestBase = restBase.endsWith('\u002F') ? restBase : `${restBase}\u002F`;\n+    const response = await fetch(`${normalizedRestBase}lp\u002Fv1\u002Fadmin\u002Fcourse\u002Fget_final_quiz`, {\n+      method: 'POST',\n+      credentials: 'same-origin',\n+      headers: {\n+        'Content-Type': 'application\u002Fjson',\n+        ...(restNonce ? {\n+          'X-WP-Nonce': restNonce\n+        } : {})\n+      },\n+      body: JSON.stringify({\n+        courseId,\n+        isCourseBuilder: true\n+      })\n+    });\n+    let responseData = {};\n+    try {\n+      responseData = await response.json();\n+    } catch (error) {\n+      throw new Error('Cannot parse final quiz response');\n+    }\n+    if (!response.ok) {\n+      throw new Error(responseData?.message || `Request failed (${response.status})`);\n+    }\n+    return responseData;\n+  }\n+  initTagManagement() {\n+    this.syncTagManagement();\n+  }\n+  getTagManagementElements() {\n+    const wrapper = document.querySelector(BuilderEditCourse.selectors.elTagsWrapper);\n+    if (!wrapper) {\n+      return null;\n+    }\n+    return {\n+      wrapper,\n+      searchInput: wrapper.querySelector(BuilderEditCourse.selectors.elTagSearchInput),\n+      list: wrapper.querySelector(BuilderEditCourse.selectors.elWrapperCheckBoxTag),\n+      emptyState: wrapper.querySelector(BuilderEditCourse.selectors.elTagEmptyState)\n+    };\n+  }\n+  getTagChipName(chip) {\n+    return chip.dataset.tagName || chip.querySelector('.cb-tag-chip__name')?.textContent?.trim()?.toLowerCase() || '';\n+  }\n+  updateTagEmptyState(emptyState, searchTerm = '', visibleCount = 0) {\n+    if (!emptyState) {\n+      return;\n+    }\n+    const emptyDefault = emptyState.dataset.emptyDefault || '';\n+    const emptySearch = emptyState.dataset.emptySearch || emptyDefault;\n+    emptyState.textContent = searchTerm ? emptySearch : emptyDefault;\n+    emptyState.classList.toggle('lp-hidden', visibleCount > 0);\n+  }\n+  syncTagManagement() {\n+    const elements = this.getTagManagementElements();\n+    if (!elements || !elements.list) {\n+      return;\n+    }\n+    const searchTerm = elements.searchInput?.value?.trim().toLowerCase() || '';\n+    const chips = Array.from(elements.wrapper.querySelectorAll(BuilderEditCourse.selectors.elTagChip)).sort((chipA, chipB) => {\n+      const chipASelected = chipA.querySelector('input[name=\"course_tags[]\"]')?.checked ? 1 : 0;\n+      const chipBSelected = chipB.querySelector('input[name=\"course_tags[]\"]')?.checked ? 1 : 0;\n+      if (chipASelected !== chipBSelected) {\n+        return chipBSelected - chipASelected;\n+      }\n+      return this.getTagChipName(chipA).localeCompare(this.getTagChipName(chipB));\n+    });\n+    let visibleCount = 0;\n+    chips.forEach(chip => {\n+      const matchesSearch = !searchTerm || this.getTagChipName(chip).includes(searchTerm);\n+      const shouldShow = matchesSearch;\n+      chip.classList.toggle('lp-hidden', !shouldShow);\n+      elements.list.appendChild(chip);\n+      if (shouldShow) {\n+        visibleCount += 1;\n+      }\n+    });\n+    this.updateTagEmptyState(elements.emptyState, searchTerm, visibleCount);\n+  }\n+  handleTagSelectionChange() {\n+    this.syncTagManagement();\n+  }\n+  handleTagSearchInput() {\n+    this.syncTagManagement();\n+  }\n+  handleCategorySearchInput() {\n+    this.applyCategorySearch();\n+  }\n+  toggleTermsSearchToolbar(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const btnSearch = target?.closest(BuilderEditCourse.selectors.elBtnToggleTermsSearch);\n+    if (!btnSearch) {\n+      return;\n+    }\n+    const toolbarTarget = btnSearch.dataset.toggleTarget || '';\n+    const toolbar = toolbarTarget ? document.querySelector(toolbarTarget) : null;\n+    if (!toolbar) {\n+      return;\n+    }\n+    const willOpen = !toolbar.classList.contains('is-open');\n+    toolbar.classList.toggle('is-open', willOpen);\n+    btnSearch.setAttribute('aria-expanded', willOpen ? 'true' : 'false');\n+    const searchInput = toolbar.querySelector('input[type=\"search\"]');\n+    if (willOpen) {\n+      if (searchInput) {\n+        setTimeout(() => searchInput.focus(), 220);\n+      }\n+      return;\n+    }\n+    if (searchInput) {\n+      searchInput.value = '';\n+    }\n+    if (searchInput?.matches(BuilderEditCourse.selectors.elCategorySearchInput)) {\n+      this.applyCategorySearch();\n+    } else if (searchInput?.matches(BuilderEditCourse.selectors.elTagSearchInput)) {\n+      this.syncTagManagement();\n+    }\n+  }\n+  getDirectChildByTagName(element, tagName) {\n+    return Array.from(element?.children || []).find(child => child.tagName === tagName);\n+  }\n+  getCategoryLabelText(li) {\n+    const label = this.getDirectChildByTagName(li, 'LABEL');\n+    return label?.textContent?.trim()?.toLowerCase() || '';\n+  }\n+  filterCategoryItem(li, searchTerm) {\n+    const childList = Array.from(li.children).find(child => child.tagName === 'UL' && child.classList.contains('children'));\n+    const childItems = childList ? Array.from(childList.children).filter(child => child.tagName === 'LI') : [];\n+    const selfMatch = !searchTerm || this.getCategoryLabelText(li).includes(searchTerm);\n+    const childMatch = childItems.some(child => this.filterCategoryItem(child, searchTerm));\n+    const shouldShow = !searchTerm || selfMatch || childMatch;\n+    li.classList.toggle('lp-hidden', !shouldShow);\n+    if (searchTerm && childList) {\n+      li.classList.toggle('children-visible', selfMatch || childMatch);\n+    }\n+    return shouldShow;\n+  }\n+  applyCategorySearch() {\n+    const wrapper = document.querySelector(BuilderEditCourse.selectors.elCategoryDiv);\n+    const searchInput = document.querySelector(BuilderEditCourse.selectors.elCategorySearchInput);\n+    if (!wrapper || !searchInput) {\n+      return;\n+    }\n+    const searchTerm = searchInput.value.trim().toLowerCase();\n+    const panels = wrapper.querySelectorAll('.tabs-panel');\n+    panels.forEach(panel => {\n+      const rootLists = Array.from(panel.children).filter(child => child.tagName === 'UL');\n+      const items = rootLists.reduce((result, list) => {\n+        return result.concat(Array.from(list.children).filter(child => child.tagName === 'LI'));\n+      }, []);\n+      if (items.length) {\n+        items.forEach(item => this.filterCategoryItem(item, searchTerm));\n+      }\n+    });\n+    if (!searchTerm) {\n+      this.expandCheckedCategories(wrapper);\n+    }\n+  }\n   initCategoryTabs() {\n     const allTab = document.querySelector('#course_category-tabs a[href=\"#course_category-all\"]');\n     if (allTab) {\n@@ -3378,6 +5018,7 @@\n     if (targetId === '#course_category-pop') {\n       this.syncMostUsedTabs();\n     }\n+    this.applyCategorySearch();\n   }\n   syncMostUsedTabs() {\n     const allPanel = document.querySelector('#course_category-all');\n@@ -3545,6 +5186,116 @@\n           }\n           elInput.value = '';\n           if (elParent) elParent.value = '0';\n+          this.applyCategorySearch();\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnSave, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Toggle custom category add form (between header and WP meta box).\n+   * Shows\u002Fhides the form and toggles the Add New button.\n+   *\u002F\n+  toggleCustomAddCategoryForm(args) {\n+    const {\n+      target\n+    } = args;\n+    const elBtnAdd = document.querySelector(BuilderEditCourse.selectors.elBtnAddCategoryNew);\n+    const form = document.querySelector(BuilderEditCourse.selectors.elFormCategoryAddNew);\n+    const isOpening = target.closest(BuilderEditCourse.selectors.elBtnAddCategoryNew);\n+    if (form) {\n+      if (isOpening) {\n+        form.style.display = 'flex';\n+        if (elBtnAdd) elBtnAdd.style.display = 'none';\n+        const input = form.querySelector(BuilderEditCourse.selectors.elInputAddCategory);\n+        if (input) setTimeout(() => input.focus(), 100);\n+      } else {\n+        form.style.display = 'none';\n+        if (elBtnAdd) elBtnAdd.style.display = 'inline-flex';\n+      }\n+    }\n+  }\n+\n+  \u002F**\n+   * Add new category via custom form (outside WP meta box).\n+   * Uses the same AJAX endpoint but reads from custom form fields.\n+   *\u002F\n+  addNewCategoryCustom(args) {\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const elInput = document.querySelector(BuilderEditCourse.selectors.elInputAddCategory);\n+    const elParent = document.querySelector(BuilderEditCourse.selectors.elSelectAddCategoryParent);\n+    const btnSave = document.querySelector(BuilderEditCourse.selectors.elBtnSaveCategory);\n+    const categoryName = elInput?.value?.trim();\n+    if (!categoryName) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('Please enter category name', 'error');\n+      return;\n+    }\n+    const parentId = elParent ? parseInt(elParent.value) : 0;\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnSave, 1);\n+    const dataSend = {\n+      action: 'add_course_category',\n+      args: {\n+        id_url: 'add-course-category'\n+      },\n+      name: categoryName,\n+      parent: parentId\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (data?.html) {\n+          const checklist = document.querySelector(BuilderEditCourse.selectors.elCategoryChecklist);\n+          if (checklist) {\n+            if (data.parent && data.parent > 0) {\n+              const parentInput = checklist.querySelector(`input[value=\"${data.parent}\"]`);\n+              if (parentInput) {\n+                const parentLi = parentInput.closest('li');\n+                parentLi.classList.add('children-visible');\n+                let ulChildren = parentLi.querySelector(':scope > ul.children');\n+                if (!ulChildren) {\n+                  ulChildren = document.createElement('ul');\n+                  ulChildren.className = 'children';\n+                  parentLi.appendChild(ulChildren);\n+                  this.addToggleBtnToLi(parentLi);\n+                }\n+                ulChildren.insertAdjacentHTML('beforeend', data.html);\n+              } else {\n+                checklist.insertAdjacentHTML('afterbegin', data.html);\n+              }\n+            } else {\n+              checklist.insertAdjacentHTML('afterbegin', data.html);\n+            }\n+          }\n+\n+          \u002F\u002F Also update the parent select dropdown with the new category\n+          if (data.term_id && elParent) {\n+            const newOption = document.createElement('option');\n+            newOption.value = data.term_id;\n+            newOption.textContent = categoryName;\n+            elParent.appendChild(newOption);\n+          }\n+          elInput.value = '';\n+          if (elParent) elParent.value = '0';\n+          this.applyCategorySearch();\n+\n+          \u002F\u002F Close the form after successful add\n+          const elBtnCancel = document.querySelector(BuilderEditCourse.selectors.elBtnCancelCategoryNew);\n+          if (elBtnCancel) elBtnCancel.click();\n         }\n       },\n       error: error => {\n@@ -3697,12 +5448,61 @@\n     linkElement.parentElement.classList.add('active');\n     targetPanel.style.display = 'block';\n   }\n+\n+  \u002F**\n+   * Handle horizontal tab click for client-side tab switching.\n+   * Uses lpShowHideEl with lp-hidden class.\n+   *\n+   * @param {Object} args - Event args containing e and target\n+   *\u002F\n+  handleCBHorizontalTabClick(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    e.preventDefault();\n+    const tab = target.closest(BuilderEditCourse.selectors.elCBHorizontalTabs);\n+    if (!tab) return;\n+    const sectionSlug = tab.dataset.tabSection;\n+    if (!sectionSlug) return;\n+\n+    \u002F\u002F Update active tab\n+    const allTabs = document.querySelectorAll(BuilderEditCourse.selectors.elCBHorizontalTabs);\n+    allTabs.forEach(t => t.classList.remove('is-active'));\n+    tab.classList.add('is-active');\n+    const url = new URL(window.location.href);\n+    url.searchParams.set('tab', sectionSlug);\n+    window.history.replaceState({}, '', url);\n+\n+    \u002F\u002F Show\u002Fhide panels using lpShowHideEl\n+    const allPanels = document.querySelectorAll(BuilderEditCourse.selectors.elCBTabPanels);\n+    allPanels.forEach(panel => {\n+      const isTarget = panel.dataset.section === sectionSlug;\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpShowHideEl(panel, isTarget ? 1 : 0);\n+    });\n+  }\n+\n+  \u002F**\n+   * Collect course data from all tabs for update.\n+   * Since all tabs are now rendered in DOM (client-side tab switching),\n+   * this method collects data from Overview tab (title, desc, categories, tags, thumbnail)\n+   * and Settings tab (form fields) when present.\n+   *\n+   * @return {Object} Course data object\n+   *\u002F\n   getCourseDataForUpdate() {\n     const data = {};\n+\n+    \u002F\u002F Get course ID from wrapper (could be in any tab panel)\n     const wrapperEl = document.querySelector(BuilderEditCourse.selectors.elDataCourse);\n     data.course_id = wrapperEl ? parseInt(wrapperEl.dataset.courseId) || 0 : 0;\n+\n+    \u002F\u002F --- Overview Tab Data ---\n+    \u002F\u002F Title\n     const titleInput = document.querySelector(BuilderEditCourse.selectors.elTitleInput);\n     data.course_title = titleInput ? titleInput.value : '';\n+\n+    \u002F\u002F Description (TinyMCE or textarea)\n     const descEditor = document.querySelector(BuilderEditCourse.selectors.elDescEditor);\n     data.course_description = descEditor ? descEditor.value : '';\n     if (typeof tinymce !== 'undefined') {\n@@ -3711,12 +5511,26 @@\n         data.course_description = editor.getContent();\n       }\n     }\n+\n+    \u002F\u002F Categories\n     data.course_categories = [];\n     document.querySelectorAll('#taxonomy-course_category input[name*=\"course_category\"]:checked').forEach(checkbox => data.course_categories.push(checkbox.value));\n+\n+    \u002F\u002F Tags\n     data.course_tags = [];\n     document.querySelectorAll('input[name=\"course_tags[]\"]:checked').forEach(checkbox => data.course_tags.push(checkbox.value));\n+\n+    \u002F\u002F Thumbnail\n     const thumbnailInput = document.querySelector(BuilderEditCourse.selectors.elThumbnailInput);\n     data.course_thumbnail_id = thumbnailInput ? thumbnailInput.value : '0';\n+\n+    \u002F\u002F Permalink\u002FSlug\n+    const permalinkInput = document.querySelector(BuilderEditCourse.selectors.elPermalinkSlugInput);\n+    if (permalinkInput && permalinkInput.value) {\n+      data.course_permalink = permalinkInput.value;\n+    }\n+\n+    \u002F\u002F --- Settings Tab Data ---\n     const elFormSetting = document.querySelector(BuilderEditCourse.selectors.elFormSetting);\n     if (elFormSetting) {\n       data.course_settings = true;\n@@ -3724,6 +5538,7 @@\n       formElements.forEach(element => {\n         const name = element.name || element.id;\n         if (!name) return;\n+        \u002F\u002F Skip WP nonce and referer fields\n         if (name === 'learnpress_meta_box_nonce' || name === '_wp_http_referer') return;\n         const isArray = name.endsWith('[]');\n         const fieldName = name.replace('[]', '');\n@@ -3753,75 +5568,155 @@\n               data[fieldName].push(element.value);\n             }\n           } else {\n+            \u002F\u002F Only set if not already set (first value wins)\n             if (!data.hasOwnProperty(fieldName)) {\n               data[fieldName] = element.value;\n             }\n           }\n         }\n       });\n-      Object.keys(data).forEach(key => {\n-        if (Array.isArray(data[key])) {\n-          data[key] = data[key].join(',');\n-        }\n-      });\n     }\n+\n+    \u002F\u002F Convert settings arrays to comma-separated strings for API\n+    \u002F\u002F Exclude course_categories and course_tags - they're handled separately\n+    const excludeFromConversion = ['course_categories', 'course_tags'];\n+    Object.keys(data).forEach(key => {\n+      if (Array.isArray(data[key]) && !excludeFromConversion.includes(key)) {\n+        data[key] = data[key].join(',');\n+      }\n+    });\n     return data;\n   }\n-  validatePricingBeforeUpdate() {\n-    const regularPriceInput = document.querySelector(BuilderEditCourse.selectors.elRegularPriceInput);\n-    const salePriceInput = document.querySelector(BuilderEditCourse.selectors.elSalePriceInput);\n-    if (!regularPriceInput || !salePriceInput) return true;\n-    const regularVal = parseFloat(regularPriceInput.value) || 0;\n-    const saleVal = parseFloat(salePriceInput.value) || 0;\n-    if (salePriceInput.value !== '' && saleVal > regularVal) {\n-      const i18n = typeof lpAdminCourseEditorSettings !== 'undefined' && lpAdminCourseEditorSettings.i18n ? lpAdminCourseEditorSettings.i18n : {\n-        notice_sale_price: 'Sale price must be less than regular price.'\n-      };\n-      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(i18n.notice_sale_price, 'error');\n-      const priceTabLink = document.querySelector('.price_tab a');\n-      if (priceTabLink) priceTabLink.click();\n-      salePriceInput.focus();\n-      return false;\n-    }\n-    return true;\n-  }\n   updateCourse(args) {\n+    \u002F\u002F Context check: only handle if on course edit page\n+    if (!document.querySelector(BuilderEditCourse.selectors.elDataCourse)) {\n+      return;\n+    }\n+\n+    \u002F\u002F Prevent double submit while request is running.\n+    if (this.isSavingCourse) {\n+      return;\n+    }\n     const {\n       e,\n       target\n     } = args;\n-    if (!this.validatePricingBeforeUpdate()) return;\n-    const elBtnUpdateCourse = target.closest(BuilderEditCourse.selectors.elBtnUpdateCourse);\n+    if (e) {\n+      e.preventDefault();\n+    }\n+    \u002F\u002F Find which button was clicked and determine status from data attribute\n+    const elBtnMainAction = target.closest(BuilderEditCourse.selectors.elBtnMainAction);\n     const elBtnHeaderSave = target.closest(BuilderEditCourse.selectors.elBtnHeaderSave);\n-    const elBtnDraftCourse = target.closest(BuilderEditCourse.selectors.elBtnDraftCourse);\n-    let status = 'publish';\n-    let elBtn = elBtnUpdateCourse || elBtnHeaderSave;\n-    if (elBtnDraftCourse) {\n-      status = 'draft';\n-      elBtn = elBtnDraftCourse;\n+    const elBtnDropdownAction = target.closest(BuilderEditCourse.selectors.elBtnDropdownAction);\n+    let targetStatus = 'publish';\n+    let elBtn = null;\n+\n+    \u002F\u002F Determine status from the clicked button's data-status attribute or class\n+    if (elBtnMainAction) {\n+      targetStatus = elBtnMainAction.dataset.status || 'publish';\n+      elBtn = elBtnMainAction;\n+    } else if (elBtnDropdownAction) {\n+      targetStatus = elBtnDropdownAction.dataset.status || 'publish';\n+      elBtn = elBtnDropdownAction;\n+    } else if (elBtnHeaderSave) {\n+      \u002F\u002F Header save button uses current main action status\n+      const mainBtn = document.querySelector(BuilderEditCourse.selectors.elBtnMainAction);\n+      targetStatus = mainBtn?.dataset.status || 'publish';\n+      elBtn = elBtnHeaderSave;\n+    }\n+    if (!elBtn) return;\n+\n+    \u002F\u002F Course publish status is controlled by the Publish panel when available.\n+    if (elBtnMainAction || elBtnHeaderSave) {\n+      targetStatus = this.getStatusFromPublishPanel(targetStatus);\n+    }\n+    const publishVisibilityEl = document.querySelector(BuilderEditCourse.selectors.elPublishVisibilitySelect);\n+    const publishPasswordEl = document.querySelector(BuilderEditCourse.selectors.elPublishPasswordInput);\n+    const publishVisibility = publishVisibilityEl?.value || '';\n+    const publishPassword = publishPasswordEl?.value?.trim?.() || '';\n+    if (publishVisibility === 'password' && !publishPassword) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('Password is required when visibility is password protected.', 'error');\n+      publishPasswordEl?.focus?.();\n+      return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtn, 1);\n+\n+    \u002F\u002F Check if drafting a published course\n+    if (targetStatus === 'draft') {\n+      const statusEl = document.querySelector(BuilderEditCourse.selectors.elStatus);\n+      const isPublished = statusEl && statusEl.classList.contains('publish');\n+      if (isPublished) {\n+        const confirmMsg = elBtn.dataset.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+        if (!confirm(confirmMsg)) {\n+          return;\n+        }\n+      }\n+    }\n+    const setActionLoadingState = isLoading => {\n+      const elsToToggle = [];\n+      const elHeaderSave = document.querySelector(BuilderEditCourse.selectors.elBtnHeaderSave);\n+      const elMainAction = document.querySelector(BuilderEditCourse.selectors.elBtnMainAction);\n+      const elDropdownToggle = document.querySelector(BuilderEditCourse.selectors.elDropdownToggle);\n+      if (elHeaderSave) {\n+        elsToToggle.push(elHeaderSave);\n+      }\n+      if (elMainAction) {\n+        elsToToggle.push(elMainAction);\n+      }\n+      if (elDropdownToggle) {\n+        elsToToggle.push(elDropdownToggle);\n+      }\n+      if (elBtn) {\n+        elsToToggle.push(elBtn);\n+      }\n+\n+      \u002F\u002F Keep only unique elements.\n+      const uniqueEls = [...new Set(elsToToggle.filter(Boolean))];\n+      uniqueEls.forEach(el => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(el, isLoading ? 1 : 0);\n+        el.classList.toggle('lp-loading', Boolean(isLoading));\n+        if (isLoading) {\n+          el.setAttribute('aria-disabled', 'true');\n+        } else {\n+          el.removeAttribute('aria-disabled');\n+        }\n+      });\n+      if (isLoading && elDropdownToggle) {\n+        elDropdownToggle.setAttribute('aria-expanded', 'false');\n+      }\n+    };\n+    this.isSavingCourse = true;\n+    setActionLoadingState(true);\n     const courseData = this.getCourseDataForUpdate();\n     const dataSend = {\n       ...courseData,\n-      course_status: status,\n-      action: 'save_courses',\n+      course_status: targetStatus,\n+      action: 'cb_save_course',\n       args: {\n-        id_url: 'save-courses'\n+        id_url: 'cb-save-course'\n       }\n     };\n     if (typeof lpCourseBuilder !== 'undefined' && lpCourseBuilder.nonce) {\n       dataSend.nonce = lpCourseBuilder.nonce;\n     }\n-    if (courseData.course_categories.length > 0) {\n-      dataSend.course_categories = courseData.course_categories.join(',');\n-    }\n-    if (courseData.course_tags.length > 0) {\n-      dataSend.course_tags = courseData.course_tags.join(',');\n+    \u002F\u002F Handle course_categories - may be array or already a string\n+    if (courseData.course_categories) {\n+      dataSend.course_categories = Array.isArray(courseData.course_categories) ? courseData.course_categories.join(',') : courseData.course_categories;\n+    }\n+    \u002F\u002F Handle course_tags - may be array or already a string\n+    if (courseData.course_tags) {\n+      dataSend.course_tags = Array.isArray(courseData.course_tags) ? courseData.course_tags.join(',') : courseData.course_tags;\n     }\n     if (courseData.course_thumbnail_id) {\n       dataSend.course_thumbnail_id = courseData.course_thumbnail_id;\n     }\n+    if (publishVisibility) {\n+      dataSend.course_visibility = publishVisibility;\n+      dataSend.course_password = publishVisibility === 'password' ? publishPassword : '';\n+    }\n+    const publishDateInput = document.querySelector(BuilderEditCourse.selectors.elPublishDateInput);\n+    if (publishDateInput && publishDateInput.value) {\n+      dataSend.course_post_date = publishDateInput.value;\n+    }\n     const callBack = {\n       success: response => {\n         const {\n@@ -3834,40 +5729,433 @@\n           this.updateHeaderTitle(courseData.course_title);\n           \u002F\u002F Dispatch event to reset form state (remove unsaved changes warning)\n           document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.html) {\n+            const elContent = elBtnMainAction.closest(BuilderEditCourse.selectors.elCBContent);\n+            const newHtml = new DOMParser().parseFromString(data.html, 'text\u002Fhtml');\n+            if (elContent) {\n+              \u002F\u002F elContent.outerHTML = data.html;\n+              \u002F\u002F Temporary change each elements\n+              const elements = [\".lp-cb-header\", \".cb-course-edit-column--left\"];\n+              for (const elementNew of elements) {\n+                const el = elContent.querySelector(elementNew);\n+                if (el) {\n+                  el.innerHTML = newHtml.querySelector(elementNew).innerHTML;\n+                }\n+              }\n+            }\n+          }\n         }\n-        if (data?.button_title) {\n-          const updateBtn = document.querySelector(BuilderEditCourse.selectors.elBtnUpdateCourse);\n-          if (updateBtn) updateBtn.textContent = data.button_title;\n-        }\n+\n         \u002F\u002F Use redirect_url from backend if available (for new courses)\n         if (data?.redirect_url) {\n           window.location.href = data.redirect_url;\n-        } else if (data?.course_id_new) {\n-          \u002F\u002F Fallback: build redirect URL manually\n-          const currentUrl = window.location.href;\n-          const newUrl = currentUrl.replace(\u002F\\\u002Fpost-new\\\u002F?(\\?.*)?$\u002F, `\u002F${data.course_id_new}\u002Foverview\u002F`);\n-          if (newUrl !== currentUrl) {\n-            window.location.href = newUrl;\n-          }\n         }\n-        if (data?.status) {\n-          const elStatus = document.querySelector(BuilderEditCourse.selectors.elStatus);\n-          if (elStatus) {\n-            elStatus.className = 'course-status ' + data.status;\n-            elStatus.textContent = data.status;\n-          }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        this.isSavingCourse = false;\n+        setActionLoadingState(false);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Resolve immediate UI status after save to avoid stale action labels\n+   * in review-only course workflow.\n+   *\n+   * @param {string|undefined} savedStatus\n+   * @param {string} requestedStatus\n+   * @return {string}\n+   *\u002F\n+  resolveStatusForUIAfterSave(savedStatus, requestedStatus) {\n+    const normalizedSavedStatus = typeof savedStatus === 'string' ? savedStatus.trim().toLowerCase() : '';\n+    const normalizedRequestedStatus = typeof requestedStatus === 'string' ? requestedStatus.trim().toLowerCase() : '';\n+    const dropdown = document.querySelector(BuilderEditCourse.selectors.elHeaderActionsDropdown);\n+    const reviewOnlyCourseAttr = (dropdown?.dataset?.reviewOnlyCourse || '').toLowerCase();\n+    const isReviewOnlyCourse = ['yes', 'true', '1'].includes(reviewOnlyCourseAttr);\n+    if (isReviewOnlyCourse && ['publish', 'private', 'future'].includes(normalizedRequestedStatus)) {\n+      return 'pending';\n+    }\n+    return normalizedSavedStatus || normalizedRequestedStatus || 'draft';\n+  }\n+\n+  \u002F**\n+   * Resolve target status from Publish panel controls.\n+   *\n+   * @param {string} fallbackStatus\n+   * @return {string}\n+   *\u002F\n+  getStatusFromPublishPanel(fallbackStatus = 'publish') {\n+    const statusSelect = document.querySelector(BuilderEditCourse.selectors.elPublishStatusSelect);\n+    const visibilitySelect = document.querySelector(BuilderEditCourse.selectors.elPublishVisibilitySelect);\n+    let status = statusSelect?.value || fallbackStatus || 'publish';\n+    const visibility = visibilitySelect?.value || 'public';\n+    if (visibility === 'private' && status !== 'pending') {\n+      status = 'private';\n+    }\n+    if (['public', 'password'].includes(visibility) && status === 'private') {\n+      status = 'publish';\n+    }\n+    const allowedStatuses = ['publish', 'future', 'draft', 'pending', 'private'];\n+    if (!allowedStatuses.includes(status)) {\n+      return 'publish';\n+    }\n+    return status;\n+  }\n+\n+  \u002F**\n+   * Sync Publish panel controls after save\u002Ftrash.\n+   *\n+   * @param {string} status\n+   *\u002F\n+  syncPublishPanelStatus(status, visibility = '') {\n+    const statusSelect = document.querySelector(BuilderEditCourse.selectors.elPublishStatusSelect);\n+    const visibilitySelect = document.querySelector(BuilderEditCourse.selectors.elPublishVisibilitySelect);\n+    if (!statusSelect && !visibilitySelect) {\n+      return;\n+    }\n+    const normalized = (status || '').toString().toLowerCase();\n+    const currentPrimaryStatus = (statusSelect?.dataset?.primaryStatus || '').toString().toLowerCase();\n+    let primaryStatusToKeep = ['future', 'publish'].includes(currentPrimaryStatus) ? currentPrimaryStatus : 'publish';\n+    if (normalized === 'future') {\n+      primaryStatusToKeep = 'future';\n+    } else if (['publish', 'private'].includes(normalized)) {\n+      primaryStatusToKeep = 'publish';\n+    }\n+    if (statusSelect) {\n+      statusSelect.dataset.primaryStatus = primaryStatusToKeep;\n+    }\n+    if (statusSelect) {\n+      if (normalized === 'private') {\n+        statusSelect.value = 'publish';\n+      } else if (['publish', 'future', 'draft', 'pending'].includes(normalized)) {\n+        statusSelect.value = normalized;\n+      }\n+    }\n+    this.syncPublishStatusOptions(normalized);\n+    if (visibilitySelect) {\n+      let visibilityToSet = visibility || visibilitySelect.value || 'public';\n+      if (normalized === 'private') {\n+        visibilityToSet = 'private';\n+      } else if (visibilityToSet === 'private') {\n+        visibilityToSet = 'public';\n+      }\n+      visibilitySelect.value = visibilityToSet;\n+    }\n+    this.syncPublishVisibilityControls();\n+    this.syncPublishDateLabel();\n+  }\n+  handlePublishVisibilityChange() {\n+    this.syncPublishVisibilityControls(true);\n+  }\n+  handlePublishStatusChange() {\n+    this.syncPublishStatusOptions();\n+    this.syncPublishDateLabel();\n+  }\n+  handlePublishDateChange() {\n+    this.syncPublishDateLabel();\n+  }\n+  syncPublishVisibilityControls(focusPassword = false) {\n+    const visibilitySelect = document.querySelector(BuilderEditCourse.selectors.elPublishVisibilitySelect);\n+    const passwordRow = document.querySelector(BuilderEditCourse.selectors.elPublishPasswordRow);\n+    const passwordInput = document.querySelector(BuilderEditCourse.selectors.elPublishPasswordInput);\n+    if (!visibilitySelect || !passwordRow) {\n+      return;\n+    }\n+    const isPassword = visibilitySelect.value === 'password';\n+    passwordRow.classList.toggle('lp-hidden', !isPassword);\n+    if (focusPassword && isPassword && passwordInput) {\n+      passwordInput.focus();\n+    }\n+  }\n+  syncPublishDateLabel() {\n+    const dateInput = document.querySelector(BuilderEditCourse.selectors.elPublishDateInput);\n+    const dateLabel = document.querySelector(BuilderEditCourse.selectors.elPublishDateLabel);\n+    if (!dateLabel) {\n+      return;\n+    }\n+    const dateValue = (dateInput?.value || '').toString().trim();\n+    let isFutureDate = false;\n+    if (dateValue) {\n+      const parsedDate = new Date(dateValue);\n+      if (!Number.isNaN(parsedDate.getTime())) {\n+        isFutureDate = parsedDate.getTime() > Date.now();\n+      }\n+    }\n+    dateLabel.textContent = isFutureDate ? 'Scheduled for' : 'Published on';\n+  }\n+  syncPublishStatusOptions(preferredStatus = '') {\n+    const statusSelect = document.querySelector(BuilderEditCourse.selectors.elPublishStatusSelect);\n+    if (!statusSelect) {\n+      return;\n+    }\n+    const publishLabel = statusSelect.dataset.publishLabel || 'Published';\n+    const futureLabel = statusSelect.dataset.futureLabel || 'Scheduled';\n+    const selectedStatus = (preferredStatus || statusSelect.value || '').toLowerCase();\n+    const currentPrimaryStatus = (statusSelect.dataset.primaryStatus || '').toLowerCase();\n+    const draftLabel = statusSelect.querySelector('option[value=\"draft\"]')?.textContent || 'Draft';\n+    const pendingLabel = statusSelect.querySelector('option[value=\"pending\"]')?.textContent || 'Pending Review';\n+    const hasFutureOption = !!statusSelect.querySelector('option[value=\"future\"]');\n+    const hasPublishOption = !!statusSelect.querySelector('option[value=\"publish\"]');\n+    let primaryValue = 'publish';\n+    if (['future', 'publish'].includes(selectedStatus)) {\n+      primaryValue = selectedStatus;\n+    } else if (['future', 'publish'].includes(currentPrimaryStatus)) {\n+      primaryValue = currentPrimaryStatus;\n+    } else if (hasFutureOption && !hasPublishOption) {\n+      primaryValue = 'future';\n+    }\n+    const primaryLabel = primaryValue === 'future' ? futureLabel : publishLabel;\n+    const valueToSelect = ['draft', 'pending', 'future', 'publish'].includes(selectedStatus) ? selectedStatus : primaryValue;\n+    statusSelect.dataset.primaryStatus = primaryValue;\n+    statusSelect.innerHTML = '';\n+    [{\n+      value: primaryValue,\n+      label: primaryLabel\n+    }, {\n+      value: 'draft',\n+      label: draftLabel\n+    }, {\n+      value: 'pending',\n+      label: pendingLabel\n+    }].forEach(optionData => {\n+      const option = document.createElement('option');\n+      option.value = optionData.value;\n+      option.textContent = optionData.label;\n+      statusSelect.appendChild(option);\n+    });\n+    statusSelect.value = valueToSelect;\n+  }\n+  formatStatusLabel(status) {\n+    const normalized = (status || '').toString().toLowerCase();\n+    return normalized === 'future' ? 'scheduled' : normalized;\n+  }\n+\n+  \u002F**\n+   * Update action buttons after status change.\n+   * Swaps main button and dropdown item based on new status.\n+   *\n+   * @param {string} newStatus - The new course status\n+   *\u002F\n+  updateActionButtons(newStatus) {\n+    const dropdown = document.querySelector(BuilderEditCourse.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) return;\n+    const mainBtn = dropdown.querySelector('.cb-btn-main-action');\n+    const dropdownMenu = dropdown.querySelector(BuilderEditCourse.selectors.elDropdownMenu);\n+    if (!mainBtn) return;\n+    const hasSingleCourseAction = dropdown.classList.contains('cb-header-actions-dropdown--single') || !dropdownMenu;\n+    if (hasSingleCourseAction) {\n+      mainBtn.className = 'cb-btn-update cb-btn-primary cb-btn-main-action';\n+      mainBtn.dataset.status = this.getStatusFromPublishPanel('publish');\n+      mainBtn.textContent = mainBtn.dataset.titleUpdate || 'Update';\n+      dropdown.dataset.currentStatus = newStatus;\n+      return;\n+    }\n+    const reviewOnlyCourseAttr = (dropdown.dataset.reviewOnlyCourse || '').toLowerCase();\n+    const isReviewOnlyCourse = ['yes', 'true', '1'].includes(reviewOnlyCourseAttr);\n+\n+    \u002F\u002F Status configuration for button labels and classes\n+    const statusConfig = {\n+      publish: {\n+        mainLabel: mainBtn.dataset.titleUpdate || 'Update',\n+        mainClass: 'cb-btn-update',\n+        mainStatus: 'publish',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      draft: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        dropdownClass: 'cb-btn-publish',\n+        dropdownStatus: 'publish',\n+        dropdownIcon: 'dashicons-visibility'\n+      },\n+      pending: {\n+        mainLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        mainClass: 'cb-btn-publish',\n+        mainStatus: 'publish',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      trash: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        dropdownClass: 'cb-btn-publish',\n+        dropdownStatus: 'publish',\n+        dropdownIcon: 'dashicons-visibility'\n+      }\n+    };\n+    const reviewStatusConfig = {\n+      publish: {\n+        mainLabel: mainBtn.dataset.titleUpdate || 'Update',\n+        mainClass: 'cb-btn-update',\n+        mainStatus: 'publish',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      draft: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titleSubmitReview || 'Submit for Review',\n+        dropdownClass: 'cb-btn-pending',\n+        dropdownStatus: 'pending',\n+        dropdownIcon: 'dashicons-clock'\n+      },\n+      pending: {\n+        mainLabel: mainBtn.dataset.titleSubmitReview || 'Submit for Review',\n+        mainClass: 'cb-btn-pending',\n+        mainStatus: 'pending',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      'auto-draft': {\n+        mainLabel: mainBtn.dataset.titleSubmitReview || 'Submit for Review',\n+        mainClass: 'cb-btn-pending',\n+        mainStatus: 'pending',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      trash: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titleSubmitReview || 'Submit for Review',\n+        dropdownClass: 'cb-btn-pending',\n+        dropdownStatus: 'pending',\n+        dropdownIcon: 'dashicons-clock'\n+      },\n+      private: {\n+        mainLabel: mainBtn.dataset.titleSubmitReview || 'Submit for Review',\n+        mainClass: 'cb-btn-pending',\n+        mainStatus: 'pending',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      }\n+    };\n+    const config = isReviewOnlyCourse ? reviewStatusConfig[newStatus] || reviewStatusConfig.draft : statusConfig[newStatus] || statusConfig.draft;\n+\n+    \u002F\u002F Update main button\n+    mainBtn.className = `${config.mainClass} cb-btn-primary cb-btn-main-action`;\n+    mainBtn.dataset.status = config.mainStatus;\n+    mainBtn.textContent = config.mainLabel;\n+\n+    \u002F\u002F Update dropdown item (first item, excluding trash)\n+    const dropdownItems = dropdownMenu.querySelectorAll('.cb-dropdown-item:not(.cb-btn-trash)');\n+    if (dropdownItems.length > 0) {\n+      const firstItem = dropdownItems[0];\n+      firstItem.className = `cb-dropdown-item ${config.dropdownClass}`;\n+      firstItem.dataset.status = config.dropdownStatus;\n+      firstItem.innerHTML = `\u003Cspan class=\"dashicons ${config.dropdownIcon}\">\u003C\u002Fspan>${config.dropdownLabel}`;\n+    }\n+\n+    \u002F\u002F Keep dropdown color\u002Fstate aligned with the main action button.\n+    dropdown.dataset.currentStatus = config.mainStatus;\n+  }\n+\n+  \u002F**\n+   * Toggle visibility of preview button and admin link based on status.\n+   * Hide when status is 'trash', show otherwise.\n+   *\n+   * @param {string} status - Current course status\n+   *\u002F\n+  toggleTrashElements(status) {\n+    const elBtnPreview = document.querySelector(BuilderEditCourse.selectors.elBtnPreview);\n+    const elAdminLink = document.querySelector(BuilderEditCourse.selectors.elAdminLink);\n+    const isTrash = status === 'trash';\n+    if (elBtnPreview) {\n+      elBtnPreview.style.display = isTrash ? 'none' : '';\n+    }\n+    if (elAdminLink) {\n+      elAdminLink.style.display = isTrash ? 'none' : '';\n+    }\n+  }\n+  async duplicateCourse(args) {\n+    \u002F\u002F Context check: only handle if on course edit page\n+    if (!document.querySelector(BuilderEditCourse.selectors.elDataCourse)) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDuplicateCourse = target.closest(BuilderEditCourse.selectors.elBtnDuplicateCourse);\n+    if (!elBtnDuplicateCourse) {\n+      return;\n+    }\n+    const courseData = this.getCourseDataForUpdate();\n+    const courseId = parseInt(courseData?.course_id, 10) || 0;\n+    if (!courseId) {\n+      return;\n+    }\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elBtnDuplicateCourse.dataset.title || 'Are you sure?',\n+      text: elBtnDuplicateCourse.dataset.content || 'Are you sure you want to duplicate this course?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_6__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnDuplicateCourse, 1);\n+    const dataSend = {\n+      action: 'duplicate_course',\n+      args: {\n+        id_url: 'duplicate-course'\n+      },\n+      course_id: courseId\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+        if (status === 'success' && data?.redirect_url) {\n+          window.location.href = data.redirect_url;\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtn, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnDuplicateCourse, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n   trashCourse(args) {\n+    \u002F\u002F Context check: only handle if on course edit page\n+    if (!document.querySelector(BuilderEditCourse.selectors.elDataCourse)) {\n+      return;\n+    }\n     const {\n       target\n     } = args;\n@@ -3897,8 +6185,13 @@\n           const elStatus = document.querySelector(BuilderEditCourse.selectors.elStatus);\n           if (elStatus) {\n             elStatus.className = 'course-status ' + data.status;\n-            elStatus.textContent = data.status;\n+            elStatus.textContent = this.formatStatusLabel(data.status);\n           }\n+          this.syncPublishPanelStatus(data.status);\n+          \u002F\u002F Toggle preview\u002Fadmin link visibility for trash status\n+          this.toggleTrashElements(data.status);\n+          \u002F\u002F Update action buttons to show \"Save Draft\" for trash status\n+          this.updateActionButtons(data.status);\n         }\n       },\n       error: error => {\n@@ -3914,7 +6207,6 @@\n     const {\n       target\n     } = args;\n-    if (!this.validatePricingBeforeUpdate()) return;\n     const elBtnSaveSettings = target.closest(BuilderEditCourse.selectors.elBtnSaveSettings);\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnSaveSettings, 1);\n     const courseData = this.getCourseDataForUpdate();\n@@ -3950,20 +6242,17 @@\n       target\n     } = args;\n     const elBtnAdd = document.querySelector(BuilderEditCourse.selectors.elBtnAddTagNew);\n-    const elBtnCancel = document.querySelector(BuilderEditCourse.selectors.elBtnCancelTagNew);\n     const form = document.querySelector(BuilderEditCourse.selectors.elFormTagAddNew);\n     const isOpening = target.closest(BuilderEditCourse.selectors.elBtnAddTagNew);\n     if (form) {\n       if (isOpening) {\n         form.style.display = 'flex';\n         if (elBtnAdd) elBtnAdd.style.display = 'none';\n-        if (elBtnCancel) elBtnCancel.style.display = 'inline-block';\n         const input = form.querySelector(BuilderEditCourse.selectors.elInputAddTag);\n         if (input) setTimeout(() => input.focus(), 100);\n       } else {\n         form.style.display = 'none';\n-        if (elBtnCancel) elBtnCancel.style.display = 'none';\n-        if (elBtnAdd) elBtnAdd.style.display = 'inline-block';\n+        if (elBtnAdd) elBtnAdd.style.display = 'inline-flex';\n       }\n     }\n   }\n@@ -3998,6 +6287,7 @@\n         if (data?.html) {\n           const wrapper = document.querySelector(BuilderEditCourse.selectors.elWrapperCheckBoxTag);\n           wrapper.insertAdjacentHTML('beforeend', data.html);\n+          this.syncTagManagement();\n           elInput.value = '';\n           const elBtnCancel = document.querySelector(BuilderEditCourse.selectors.elBtnCancelTagNew);\n           if (elBtnCancel) elBtnCancel.click();\n@@ -4036,6 +6326,9 @@\n     const actionsContainer = document.querySelector('.cb-featured-image-actions');\n     if (!dropzone || !thumbnailInput) return;\n     thumbnailInput.value = attachment.id;\n+\n+    \u002F\u002F Mark form as having unsaved changes\n+    (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n     const imgUrl = attachment.sizes?.medium?.url || attachment.sizes?.thumbnail?.url || attachment.url;\n \n     \u002F\u002F Clear dropzone content\n@@ -4049,11 +6342,11 @@\n     dropzone.appendChild(img);\n     dropzone.classList.add('has-image');\n \n-    \u002F\u002F Show\u002Fcreate action buttons\n+    \u002F\u002F Show\u002Fcreate action buttons (order must match PHP: Remove icon first, Replace text second)\n     if (actionsContainer) {\n       actionsContainer.innerHTML = `\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"cb-change-featured-image\">${window.lpCourseBuilder?.i18n?.change_image || 'Change Image'}\u003C\u002Fbutton>\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"cb-remove-featured-image\">${window.lpCourseBuilder?.i18n?.remove_image || 'Remove Image'}\u003C\u002Fbutton>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"cb-remove-featured-image\">\u003Csvg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"currentColor\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cg clip-path=\"url(#clip0_5385_4628)\">\u003Cpath d=\"M11.9 1.66699C12.2498 1.66708 12.5907 1.77723 12.8744 1.98183C13.1581 2.18643 13.3703 2.47512 13.4808 2.80699L13.9333 4.16699H16.6667C16.8877 4.16699 17.0996 4.25479 17.2559 4.41107C17.4122 4.56735 17.5 4.77931 17.5 5.00033C17.5 5.22134 17.4122 5.4333 17.2559 5.58958C17.0996 5.74586 16.8877 5.83366 16.6667 5.83366L16.6642 5.89283L15.9417 16.012C15.8966 16.6425 15.6143 17.2325 15.1517 17.6633C14.6891 18.0941 14.0805 18.3336 13.4483 18.3337H6.55167C5.91955 18.3336 5.31092 18.0941 4.84831 17.6633C4.38569 17.2325 4.10342 16.6425 4.05833 16.012L3.33583 5.89199C3.33433 5.87258 3.33349 5.85313 3.33333 5.83366C3.11232 5.83366 2.90036 5.74586 2.74408 5.58958C2.5878 5.4333 2.5 5.22134 2.5 5.00033C2.5 4.77931 2.5878 4.56735 2.74408 4.41107C2.90036 4.25479 3.11232 4.16699 3.33333 4.16699H6.06667L6.51917 2.80699C6.62975 2.47498 6.84203 2.1862 7.12592 1.98159C7.4098 1.77697 7.75089 1.66691 8.10083 1.66699H11.9ZM14.9975 5.83366H5.0025L5.72083 15.8928C5.73579 16.103 5.82981 16.2997 5.98397 16.4433C6.13812 16.587 6.34096 16.6669 6.55167 16.667H13.4483C13.659 16.6669 13.8619 16.587 14.016 16.4433C14.1702 16.2997 14.2642 16.103 14.2792 15.8928L14.9975 5.83366ZM8.33333 8.33366C8.53744 8.33369 8.73445 8.40862 8.88698 8.54425C9.03951 8.67989 9.13695 8.86678 9.16083 9.06949L9.16667 9.16699V13.3337C9.16643 13.5461 9.0851 13.7504 8.93929 13.9048C8.79349 14.0592 8.59421 14.1522 8.38217 14.1646C8.17014 14.1771 7.96135 14.1081 7.79847 13.9718C7.6356 13.8354 7.53092 13.6421 7.50583 13.4312L7.5 13.3337V9.16699C7.5 8.94598 7.5878 8.73402 7.74408 8.57774C7.90036 8.42146 8.11232 8.33366 8.33333 8.33366ZM11.6667 8.33366C11.8877 8.33366 12.0996 8.42146 12.2559 8.57774C12.4122 8.73402 12.5 8.94598 12.5 9.16699V13.3337C12.5 13.5547 12.4122 13.7666 12.2559 13.9229C12.0996 14.0792 11.8877 14.167 11.6667 14.167C11.4457 14.167 11.2337 14.0792 11.0774 13.9229C10.9211 13.7666 10.8333 13.5547 10.8333 13.3337V9.16699C10.8333 8.94598 10.9211 8.73402 11.0774 8.57774C11.2337 8.42146 11.4457 8.33366 11.6667 8.33366ZM11.9 3.33366H8.1L7.8225 4.16699H12.1775L11.9 3.33366Z\" fill=\"currentColor\"\u002F>\u003C\u002Fg>\u003Cdefs>\u003CclipPath id=\"clip0_5385_4628\">\u003Crect width=\"20\" height=\"20\" fill=\"white\"\u002F>\u003C\u002FclipPath>\u003C\u002Fdefs>\u003C\u002Fsvg>\u003C\u002Fbutton>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"cb-change-featured-image\">${window.lpCourseBuilder?.i18n?.replace_image || 'Replace'}\u003C\u002Fbutton>\n \t\t\t`;\n     }\n   }\n@@ -4070,7 +6363,7 @@\n     \u002F\u002F Clear dropzone and show upload content\n     dropzone.innerHTML = `\n \t\t\t\u003Cdiv class=\"cb-featured-image-upload-content\">\n-\t\t\t\t\u003Cspan class=\"cb-featured-image-icon\">🖼️\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"cb-featured-image-icon\">\u003Csvg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.29095 14.5488C3.29099 14.8637 3.33747 15.1785 3.44915 15.5527L3.48138 15.6592C3.95542 17.0735 5.26094 18.0234 6.72845 18.0234H20.0361L19.2099 20.6787C18.9761 21.5815 18.1423 22.1942 17.2294 22.1943C17.0513 22.1942 16.8735 22.1714 16.7011 22.126L2.5263 18.2881C1.43276 17.9832 0.78131 16.8383 1.06732 15.7344L3.29095 8.22949V14.5488ZM20.7079 1.80469C21.9711 1.80474 22.9998 2.84505 22.9999 4.12207V14.3164C22.9999 15.5936 21.9712 16.6337 20.7079 16.6338H6.95794C5.69489 16.6338 4.66595 15.5936 4.66595 14.3164V4.12207C4.66604 2.84502 5.69495 1.80469 6.95794 1.80469H20.7079ZM6.95794 3.65918C6.70507 3.65918 6.49903 3.86625 6.49896 4.12207V12.8701L9.02923 10.3135C9.65534 9.67964 10.6757 9.67964 11.3027 10.3135L12.412 11.4316L15.8163 7.2998C16.1206 6.93103 16.5663 6.71857 17.041 6.71582C17.5185 6.72681 17.9633 6.92104 18.2704 7.28516L21.166 10.7012V4.12207C21.1659 3.8663 20.961 3.65923 20.7079 3.65918H6.95794ZM9.24896 4.58496C10.2601 4.58496 11.0829 5.4172 11.0829 6.43945C11.0827 7.4615 10.26 8.29297 9.24896 8.29297C8.23818 8.29274 7.4162 7.46132 7.41595 6.43945C7.41595 5.41738 8.23798 4.58519 9.24896 4.58496Z\" fill=\"#CFCFCF\"\u002F>\u003C\u002Fsvg>\u003C\u002Fspan>\n \t\t\t\t\u003Cp class=\"cb-featured-image-text\">\u003Ca href=\"#\" class=\"cb-featured-image-link\">${window.lpCourseBuilder?.i18n?.click_to_upload || 'Click to upload'}\u003C\u002Fa>\u003C\u002Fp>\n \t\t\t\t\u003Cp class=\"cb-featured-image-hint\">${window.lpCourseBuilder?.i18n?.image_hint || 'JPG, JPEG, PNG less than 1MB'}\u003C\u002Fp>\n \t\t\t\u003C\u002Fdiv>\n@@ -4080,6 +6373,9 @@\n     \u002F\u002F Clear thumbnail ID\n     if (thumbnailInput) {\n       thumbnailInput.value = '';\n+\n+      \u002F\u002F Mark form as having unsaved changes\n+      (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n     }\n \n     \u002F\u002F Hide action buttons\n@@ -4087,6 +6383,106 @@\n       actionsContainer.innerHTML = '';\n     }\n   }\n+  buildPermalinkDisplayUrl(baseUrl = '', slug = '', fallbackUrl = '') {\n+    const normalizedBaseUrl = typeof baseUrl === 'string' ? baseUrl : '';\n+    const normalizedSlug = typeof slug === 'string' ? slug.trim() : '';\n+    if (normalizedBaseUrl && normalizedSlug) {\n+      return `${normalizedBaseUrl}${normalizedSlug}`;\n+    }\n+    return typeof fallbackUrl === 'string' ? fallbackUrl : '';\n+  }\n+\n+  \u002F**\n+   * Handle permalink Edit button click.\n+   * Shows editor mode, hides display mode.\n+   *\u002F\n+  handlePermalinkEdit(args) {\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditCourse.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditCourse.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditCourse.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) return;\n+\n+    \u002F\u002F Store original value for cancel\n+    input.dataset.originalValue = input.value;\n+\n+    \u002F\u002F Toggle visibility\n+    display.classList.add('lp-hidden');\n+    editor.classList.remove('lp-hidden');\n+\n+    \u002F\u002F Focus input and select text\n+    input.focus();\n+    input.select();\n+  }\n+\n+  \u002F**\n+   * Handle permalink OK button click.\n+   * Validates and sanitizes slug, updates display.\n+   *\u002F\n+  handlePermalinkOk(args) {\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditCourse.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditCourse.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditCourse.selectors.elPermalinkSlugInput);\n+    const urlLink = document.querySelector(BuilderEditCourse.selectors.elPermalinkUrl);\n+    const baseUrlInput = document.querySelector(BuilderEditCourse.selectors.elPermalinkBaseUrl);\n+    if (!display || !editor || !input || !urlLink) return;\n+\n+    \u002F\u002F Sanitize the slug\n+    let newSlug = input.value.trim();\n+\n+    \u002F\u002F If empty after sanitizing, restore original\n+    if (!newSlug) {\n+      newSlug = input.dataset.originalValue || 'course';\n+    }\n+\n+    \u002F\u002F Update input value with sanitized slug\n+    input.value = newSlug;\n+\n+    \u002F\u002F Get base URL\n+    const baseUrl = baseUrlInput ? baseUrlInput.value : '';\n+    const newUrl = this.buildPermalinkDisplayUrl(baseUrl, newSlug, urlLink.textContent || '');\n+\n+    \u002F\u002F Keep href as the current saved link and only update display text.\n+    urlLink.textContent = newUrl;\n+\n+    \u002F\u002F Toggle visibility back to display mode\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+\n+    \u002F\u002F Mark form as changed if slug differs from original\n+    if (newSlug !== input.dataset.originalValue) {\n+      (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle permalink Cancel button click.\n+   * Restores original value and returns to display mode.\n+   *\u002F\n+  handlePermalinkCancel(args) {\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditCourse.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditCourse.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditCourse.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) return;\n+\n+    \u002F\u002F Restore original value\n+    input.value = input.dataset.originalValue || '';\n+\n+    \u002F\u002F Toggle visibility back to display mode\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+  }\n   initTabTitles() {\n     const tabLinks = document.querySelectorAll(BuilderEditCourse.selectors.elTabLinks);\n     tabLinks.forEach(link => {\n@@ -4145,14 +6541,6 @@\n         });\n       }\n     }\n-\n-    \u002F\u002F Also handle text mode (quicktags)\n-    const textarea = document.querySelector(BuilderEditCourse.selectors.elDescEditor);\n-    if (textarea) {\n-      textarea.addEventListener('input', () => {\n-        this.updateDescWordCountFromText(textarea.value);\n-      });\n-    }\n   }\n   updateDescWordCount(editor) {\n     const wordCountEl = document.querySelector(BuilderEditCourse.selectors.elDescWordCount);\n@@ -4175,13 +6563,6 @@\n     const wordText = count === 1 ? 'word' : 'words';\n     wordCountEl.textContent = `${count} ${wordText}`;\n   }\n-  updateDescWordCountFromText(text) {\n-    const wordCountEl = document.querySelector(BuilderEditCourse.selectors.elDescWordCount);\n-    if (!wordCountEl) return;\n-    const count = this.countWords(text);\n-    const wordText = count === 1 ? 'word' : 'words';\n-    wordCountEl.textContent = `${count} ${wordText}`;\n-  }\n   updateHeaderTitle(title) {\n     const headerTitle = document.querySelector('.lp-cb-header__title');\n     if (headerTitle && title) {\n@@ -4252,13 +6633,13 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js\"\n \u002F*!************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js ***!\n   \\************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -4269,6 +6650,8 @@\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_1__);\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\n \n \n \n@@ -4277,6 +6660,7 @@\n     this.init();\n   }\n   static selectors = {\n+    elBtnCreateCourse: 'a.cb-btn-add-new[href]',\n     elCourseItem: '.course-item',\n     elCourseExpandedItems: '.course-action-expanded__items',\n     elCourseDuplicate: '.course-action-expanded__duplicate',\n@@ -4314,6 +6698,18 @@\n       selector: BuilderTabCourse.selectors.elCourseActionExpanded,\n       class: this,\n       callBack: this.toggleExpandedAction.name\n+    }, {\n+      selector: BuilderTabCourse.selectors.elBtnCreateCourse,\n+      callBack: args => {\n+        const {\n+          target\n+        } = args;\n+        const elBtnCreateCourse = target.closest(BuilderTabCourse.selectors.elBtnCreateCourse);\n+        if (!elBtnCreateCourse) {\n+          return;\n+        }\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnCreateCourse, 1);\n+      }\n     }]);\n     document.addEventListener('click', e => {\n       if (!e.target.closest(BuilderTabCourse.selectors.elCourseActionExpanded)) {\n@@ -4327,48 +6723,72 @@\n     } = args;\n     const elCourseDuplicate = target.closest(BuilderTabCourse.selectors.elCourseDuplicate);\n     const elCourseItem = elCourseDuplicate.closest(BuilderTabCourse.selectors.elCourseItem);\n-    if (!elCourseItem) return;\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseDuplicate, 1);\n+    if (!elCourseItem) {\n+      return;\n+    }\n     const courseId = elCourseItem.dataset.courseId || '';\n-    const dataSend = {\n-      action: 'duplicate_course',\n-      args: {\n-        id_url: 'duplicate-course'\n+    if (!courseId) {\n+      return;\n+    }\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      title: elCourseDuplicate.dataset.title || 'Duplicate Course',\n+      text: elCourseDuplicate.dataset.content || 'Are you sure you want to duplicate this course?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n       },\n-      course_id: courseId\n-    };\n-    const callBack = {\n-      success: response => {\n-        const {\n-          status,\n-          message,\n-          data\n-        } = response;\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n-        if (data?.html) {\n-          const elCourse = elCourseDuplicate.closest('.course');\n-          elCourse.insertAdjacentHTML('afterend', data.html);\n-          const newCourse = elCourse.nextElementSibling;\n-          if (newCourse) {\n-            newCourse.scrollIntoView({\n-              behavior: 'smooth',\n-              block: 'nearest'\n-            });\n-            newCourse.classList.add('highlight-new-course');\n-            setTimeout(() => {\n-              newCourse.classList.remove('highlight-new-course');\n-            }, 1500);\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseDuplicate, 1);\n+        const dataSend = {\n+          action: 'duplicate_course',\n+          args: {\n+            id_url: 'duplicate-course'\n+          },\n+          course_id: courseId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message || 'Duplicated successfully!', status);\n+            if (data?.html) {\n+              const elCourse = elCourseDuplicate.closest('.course');\n+              const elCourseList = elCourse.closest('.courses-list') || elCourse.parentElement;\n+              if (elCourseList) {\n+                elCourseList.insertAdjacentHTML('afterbegin', data.html);\n+                const newCourse = elCourseList.firstElementChild;\n+                if (newCourse) {\n+                  newCourse.scrollIntoView({\n+                    behavior: 'smooth',\n+                    block: 'nearest'\n+                  });\n+                  newCourse.classList.add('highlight-new-course');\n+                  setTimeout(() => {\n+                    newCourse.classList.remove('highlight-new-course');\n+                  }, 1500);\n+                }\n+              }\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseDuplicate, 0);\n           }\n-        }\n-      },\n-      error: error => {\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error.message || error, 'error');\n-      },\n-      completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseDuplicate, 0);\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n       }\n-    };\n-    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    });\n   }\n   trashCourse(args) {\n     const {\n@@ -4376,37 +6796,55 @@\n     } = args;\n     const elCourseTrash = target.closest(BuilderTabCourse.selectors.elCourseTrash);\n     const elCourseItem = elCourseTrash.closest(BuilderTabCourse.selectors.elCourseItem);\n-    if (!elCourseItem) return;\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseTrash, 1);\n+    if (!elCourseItem) {\n+      return;\n+    }\n     const courseId = elCourseItem.dataset.courseId || '';\n-    const dataSend = {\n-      action: 'move_trash_course',\n-      args: {\n-        id_url: 'move-trash-course'\n-      },\n-      course_id: courseId\n-    };\n-    const callBack = {\n-      success: response => {\n-        const {\n-          status,\n-          message,\n-          data\n-        } = response;\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n-        if (data?.status) {\n-          const elCourse = elCourseTrash.closest('.course');\n-          this.updateStatusUI(elCourse, data.status);\n-        }\n-      },\n-      error: error => {\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error.message || error, 'error');\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+      title: elCourseTrash.dataset.title || 'Trash Course',\n+      text: elCourseTrash.dataset.content || 'Are you sure you want to move this course to trash?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n       },\n-      completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseTrash, 0);\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseTrash, 1);\n+        const dataSend = {\n+          action: 'move_trash_course',\n+          args: {\n+            id_url: 'move-trash-course'\n+          },\n+          course_id: courseId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(message, status);\n+            if (data?.status) {\n+              const elCourse = elCourseTrash.closest('.course');\n+              this.updateStatusUI(elCourse, data.status);\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_2__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseTrash, 0);\n+          }\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n       }\n-    };\n-    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    });\n   }\n   draftCourse(args) {\n     const {\n@@ -4414,7 +6852,37 @@\n     } = args;\n     const elCourseDraft = target.closest(BuilderTabCourse.selectors.elCourseDraft);\n     const elCourseItem = elCourseDraft.closest(BuilderTabCourse.selectors.elCourseItem);\n-    if (!elCourseItem) return;\n+    if (!elCourseItem) {\n+      return;\n+    }\n+\n+    \u002F\u002F Check if published to show confirm unpublish modal\n+    const statusEl = elCourseItem.querySelector(BuilderTabCourse.selectors.elCourseStatus);\n+    const isPublished = statusEl && statusEl.classList.contains('publish');\n+    if (isPublished) {\n+      const confirmMsg = elCourseDraft.dataset.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+      sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n+        title: 'Draft Course',\n+        text: confirmMsg,\n+        iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+        customClass: {\n+          icon: 'lp-cb-swal-icon-html'\n+        },\n+        showCloseButton: true,\n+        showCancelButton: true,\n+        cancelButtonText: lpData.i18n.cancel,\n+        confirmButtonText: lpData.i18n.yes,\n+        reverseButtons: true\n+      }).then(result => {\n+        if (result.isConfirmed) {\n+          this.draftCourseExecute(elCourseDraft, elCourseItem);\n+        }\n+      });\n+      return;\n+    }\n+    this.draftCourseExecute(elCourseDraft, elCourseItem);\n+  }\n+  draftCourseExecute(elCourseDraft, elCourseItem) {\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elCourseDraft, 1);\n     const courseId = elCourseItem.dataset.courseId || '';\n     const dataSend = {\n@@ -4453,15 +6921,20 @@\n     } = args;\n     const elCourseDelete = target.closest(BuilderTabCourse.selectors.elCourseDelete);\n     const elCourseItem = elCourseDelete.closest(BuilderTabCourse.selectors.elCourseItem);\n-    if (!elCourseItem) return;\n+    if (!elCourseItem) {\n+      return;\n+    }\n     const courseId = elCourseItem.dataset.courseId || '';\n     if (!courseId) {\n       return;\n     }\n     sweetalert2__WEBPACK_IMPORTED_MODULE_1___default().fire({\n-      title: elCourseDelete.dataset.title,\n-      text: elCourseDelete.dataset.content,\n-      icon: 'warning',\n+      title: elCourseDelete.dataset.title || 'Delete Course',\n+      text: elCourseDelete.dataset.content || 'Are you sure you want to permanently delete this course?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DELETE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n       showCloseButton: true,\n       showCancelButton: true,\n       cancelButtonText: lpData.i18n.cancel,\n@@ -4505,9 +6978,17 @@\n       target\n     } = args;\n     const elCourseActionExpanded = target.closest(BuilderTabCourse.selectors.elCourseActionExpanded);\n+    if (!elCourseActionExpanded) {\n+      return;\n+    }\n     const elCourseItem = elCourseActionExpanded.closest(BuilderTabCourse.selectors.elCourseItem);\n+    if (!elCourseItem) {\n+      return;\n+    }\n     const elExpandedItems = elCourseItem.querySelector(BuilderTabCourse.selectors.elCourseExpandedItems);\n-    if (!elExpandedItems) return;\n+    if (!elExpandedItems) {\n+      return;\n+    }\n \n     \u002F\u002F Close others\n     this.closeAllExpanded(elExpandedItems);\n@@ -4517,9 +6998,14 @@\n   closeAllExpanded(excludeElement = null) {\n     const allExpandedItems = document.querySelectorAll(`${BuilderTabCourse.selectors.elCourseExpandedItems}.active`);\n     allExpandedItems.forEach(item => {\n-      if (item === excludeElement) return;\n+      if (item === excludeElement) {\n+        return;\n+      }\n       item.classList.remove('active');\n       const courseItem = item.closest(BuilderTabCourse.selectors.elCourseItem);\n+      if (!courseItem) {\n+        return;\n+      }\n       const expandedBtn = courseItem.querySelector(BuilderTabCourse.selectors.elCourseActionExpanded);\n       if (expandedBtn) {\n         expandedBtn.classList.remove('active');\n@@ -4536,13 +7022,13 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fextra-info.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fextra-info.js\"\n \u002F*!****************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fextra-info.js ***!\n   \\****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -4699,13 +7185,213 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-dashboard.js\"\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-dashboard.js ***!\n+  \\********************************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   BuilderDashboard: () => (\u002F* binding *\u002F BuilderDashboard)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var chart_js_auto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! chart.js\u002Fauto *\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fauto\u002Fauto.js\");\n+\u002F**\n+ * Dashboard charts and interactions for Course Builder.\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\":\n+class BuilderDashboard {\n+  constructor() {\n+    this.charts = {};\n+    this.init();\n+  }\n+  init() {\n+    const dataEl = document.getElementById('lp-cb-dashboard-chart-data');\n+    if (!dataEl) {\n+      return;\n+    }\n+    try {\n+      this.chartData = JSON.parse(dataEl.textContent);\n+    } catch (e) {\n+      console.warn('Dashboard: Failed to parse chart data', e);\n+      return;\n+    }\n+    this.initSalesChart();\n+    this.initStudentsChart();\n+    this.bindFilterEvents();\n+  }\n+  createGradient(ctx, color) {\n+    const gradient = ctx.createLinearGradient(0, 0, 0, ctx.canvas.height);\n+    gradient.addColorStop(0, color + '40');\n+    gradient.addColorStop(1, color + '05');\n+    return gradient;\n+  }\n+  getChartConfig(labels, data, color, prefix = '', isInteger = false) {\n+    return {\n+      type: 'line',\n+      data: {\n+        labels,\n+        datasets: [{\n+          data,\n+          borderColor: color,\n+          borderWidth: 2.5,\n+          backgroundColor: context => {\n+            const {\n+              ctx\n+            } = context.chart;\n+            return this.createGradient(ctx, color);\n+          },\n+          fill: true,\n+          tension: 0.4,\n+          pointBackgroundColor: color,\n+          pointBorderColor: '#fff',\n+          pointBorderWidth: 2,\n+          pointRadius: 0,\n+          pointHoverRadius: 6,\n+          pointHoverBorderWidth: 2\n+        }]\n+      },\n+      options: {\n+        responsive: true,\n+        maintainAspectRatio: false,\n+        plugins: {\n+          legend: {\n+            display: false\n+          },\n+          tooltip: {\n+            backgroundColor: '#1e1e1e',\n+            titleColor: '#fff',\n+            bodyColor: '#fff',\n+            borderColor: 'rgba(255,255,255,0.1)',\n+            borderWidth: 1,\n+            cornerRadius: 8,\n+            padding: 12,\n+            displayColors: false,\n+            callbacks: {\n+              label: context => {\n+                const val = context.parsed.y || 0;\n+                return prefix + val.toLocaleString();\n+              }\n+            }\n+          }\n+        },\n+        scales: {\n+          x: {\n+            grid: {\n+              display: false\n+            },\n+            ticks: {\n+              color: '#9ca3af',\n+              font: {\n+                size: 11\n+              },\n+              maxRotation: 0\n+            },\n+            border: {\n+              display: false\n+            }\n+          },\n+          y: {\n+            grid: {\n+              color: 'rgba(0,0,0,0.04)',\n+              drawBorder: false\n+            },\n+            ticks: {\n+              stepSize: isInteger ? 1 : undefined,\n+              color: '#9ca3af',\n+              font: {\n+                size: 11\n+              },\n+              callback: value => prefix + value.toLocaleString()\n+            },\n+            border: {\n+              display: false\n+            },\n+            beginAtZero: true\n+          }\n+        },\n+        interaction: {\n+          intersect: false,\n+          mode: 'index'\n+        }\n+      }\n+    };\n+  }\n+  initSalesChart() {\n+    const canvas = document.getElementById('lp-cb-chart-sales');\n+    if (!canvas) {\n+      return;\n+    }\n+    const {\n+      labels = [],\n+      data = []\n+    } = this.chartData.sales || {};\n+    const config = this.getChartConfig(labels, data, '#10b981', '$');\n+    this.charts.sales = new chart_js_auto__WEBPACK_IMPORTED_MODULE_0__[\"default\"](canvas, config);\n+  }\n+  initStudentsChart() {\n+    const canvas = document.getElementById('lp-cb-chart-students');\n+    if (!canvas) {\n+      return;\n+    }\n+    const {\n+      labels = [],\n+      data = []\n+    } = this.chartData.students || {};\n+    const config = this.getChartConfig(labels, data, '#f59e0b', '', true);\n+    this.charts.students = new chart_js_auto__WEBPACK_IMPORTED_MODULE_0__[\"default\"](canvas, config);\n+  }\n+  bindFilterEvents() {\n+    const filters = document.querySelectorAll('.chart-card__filter');\n+    filters.forEach(select => {\n+      select.addEventListener('change', e => {\n+        const chartType = e.target.dataset.chart;\n+        const period = e.target.value;\n+        this.fetchChartData(chartType, period);\n+      });\n+    });\n+  }\n+  async fetchChartData(chartType, period) {\n+    const chart = this.charts[chartType];\n+    if (!chart) {\n+      return;\n+    }\n+    const formData = new FormData();\n+    formData.append('action', 'lp_cb_dashboard_chart_data');\n+    formData.append('chart_type', chartType);\n+    formData.append('period', period);\n+    formData.append('nonce', this.chartData.nonce);\n+    try {\n+      const response = await fetch(this.chartData.ajaxUrl, {\n+        method: 'POST',\n+        body: formData\n+      });\n+      const result = await response.json();\n+      if (result.success && result.data) {\n+        chart.data.labels = result.data.labels || [];\n+        chart.data.datasets[0].data = result.data.data || [];\n+        chart.update('none');\n+      }\n+    } catch (e) {\n+      console.warn('Dashboard: Failed to fetch chart data', e);\n+    }\n+  }\n+}\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\"\n \u002F*!*********************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js ***!\n   \\*********************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -4807,8 +7493,28 @@\n   handleFormChange(e) {\n     const target = e.target;\n \n+    \u002F\u002F Ignore curriculum changes\n+    if (target.closest('#lp-course-edit-curriculum')) {\n+      return;\n+    }\n+\n+    \u002F\u002F Ignore question settings form - it auto-saves via AJAX\n+    if (target.closest('.lp-form-setting-question')) {\n+      return;\n+    }\n+\n+    \u002F\u002F Ignore lesson settings form - it auto-saves via AJAX\n+    if (target.closest('.lp-form-setting-lesson')) {\n+      return;\n+    }\n+\n+    \u002F\u002F Ignore quiz questions list - question changes are tracked separately\n+    if (target.closest('.lp-quiz-questions-list') || target.closest('.lp-edit-quiz-wrap')) {\n+      return;\n+    }\n+\n     \u002F\u002F Check if target is within course builder forms\n-    if (target.closest('.cb-section__course-edit') || target.closest('.lp-cb-tab-content') || target.closest('.lp-form-setting-course')) {\n+    if (target.closest('.cb-section__course-edit') || target.closest('.lp-cb-tab-content') || target.closest('.lp-form-setting-course') || target.closest('.lp-form-setting-quiz') || target.closest('.cb-section__quiz-edit')) {\n       this.markAsChanged();\n     }\n   }\n@@ -4827,7 +7533,7 @@\n    * Update save button visual state\n    *\u002F\n   updateSaveButtonState() {\n-    const saveButtons = document.querySelectorAll('.cb-btn-update, .lp-cb-save-btn');\n+    const saveButtons = document.querySelectorAll('.cb-btn-update, .lp-cb-save-btn, .cb-btn-main-action');\n     saveButtons.forEach(btn => {\n       if (this.hasUnsavedChanges) {\n         btn.classList.add('has-changes');\n@@ -4845,8 +7551,9 @@\n     if (!tabLink) {\n       return;\n     }\n-\n-    \u002F\u002F Don't warn if clicking current active tab\n+    if (tabLink.hasAttribute('data-tab-section') || tabLink.getAttribute('href') === '#') {\n+      return;\n+    }\n     if (tabLink.classList.contains('is-active') || tabLink.closest('.is-active')) {\n       return;\n     }\n@@ -4906,13 +7613,13 @@\n };\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (BuilderFormState);\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js\"\n \u002F*!*************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js ***!\n   \\*************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -4925,36 +7632,277 @@\n \n class BuilderEditLesson {\n   constructor() {\n+    \u002F\u002F Events use document-level event delegation, so always register them\n+    \u002F\u002F The page context check happens in individual handlers via target.closest()\n     this.init();\n   }\n   static selectors = {\n+    \u002F\u002F Context selector - indicates we're on lesson edit page\n     elDataLesson: '.cb-section__lesson-edit',\n-    elBtnUpdateLesson: '.cb-btn-update__lesson',\n-    elBtnPublishLesson: '.cb-btn-publish__lesson',\n-    elBtnTrashLesson: '.cb-btn-trash__lesson',\n+    \u002F\u002F Shared header action buttons (generic selectors)\n+    elBtnMainAction: '.cb-btn-main-action',\n+    elBtnUpdate: '.cb-btn-update, .cb-btn-publish',\n+    elBtnDraft: '.cb-btn-darft, .cb-dropdown-item[data-status=\"draft\"]',\n+    elBtnTrash: '.cb-btn-trash',\n+    \u002F\u002F Status badge\n     elLessonStatus: '.lesson-status',\n+    \u002F\u002F Form fields\n     idTitle: 'title',\n     idDescEditor: 'lesson_description_editor',\n-    elFormSetting: '.lp-form-setting-lesson'\n+    elFormSetting: '.lp-form-setting-lesson',\n+    \u002F\u002F Permalink component\n+    elPermalinkDisplay: '.cb-permalink-display',\n+    elPermalinkEditor: '.cb-permalink-editor',\n+    elPermalinkEditBtn: '.cb-permalink-edit-btn',\n+    elPermalinkOkBtn: '.cb-permalink-ok-btn',\n+    elPermalinkCancelBtn: '.cb-permalink-cancel-btn',\n+    elPermalinkSlugInput: '.cb-permalink-slug-input',\n+    elPermalinkUrl: '.cb-permalink-url',\n+    elPermalinkBaseUrl: '#cb-permalink-base-url',\n+    elPermalinkRoot: '.cb-item-edit-permalink, .cb-course-edit-permalink',\n+    elPermalinkPlaceholder: '.cb-item-edit-permalink__placeholder',\n+    \u002F\u002F Tab handling selectors\n+    elCBHorizontalTabs: '.lp-cb-tabs__item',\n+    elCBTabPanels: '.lp-cb-tab-panel',\n+    \u002F\u002F Dropdown selectors\n+    elDropdownToggle: '.cb-btn-dropdown-toggle',\n+    elDropdownMenu: '.cb-dropdown-menu',\n+    elHeaderActionsDropdown: '.cb-header-actions-dropdown'\n   };\n   init() {\n+    this.initTabs();\n+    this.initHeaderActionsDropdown();\n     this.events();\n   }\n+\n+  \u002F**\n+   * Initialize header actions dropdown (toggle behavior)\n+   *\u002F\n+  initHeaderActionsDropdown() {\n+    \u002F\u002F Close dropdown when clicking outside\n+    document.addEventListener('click', e => {\n+      const dropdown = document.querySelector(BuilderEditLesson.selectors.elHeaderActionsDropdown);\n+      if (dropdown && !dropdown.contains(e.target)) {\n+        const menu = dropdown.querySelector(BuilderEditLesson.selectors.elDropdownMenu);\n+        const toggle = dropdown.querySelector(BuilderEditLesson.selectors.elDropdownToggle);\n+        if (menu) {\n+          menu.classList.remove('is-open');\n+        }\n+        if (toggle) {\n+          toggle.setAttribute('aria-expanded', 'false');\n+        }\n+      }\n+    });\n+  }\n+\n+  \u002F**\n+   * Handle dropdown toggle click\n+   *\u002F\n+  handleDropdownToggle(args) {\n+    const {\n+      target\n+    } = args;\n+    const toggleBtn = target.closest(BuilderEditLesson.selectors.elDropdownToggle);\n+    if (!toggleBtn) {\n+      return;\n+    }\n+    const dropdown = toggleBtn.closest(BuilderEditLesson.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) {\n+      return;\n+    }\n+    const menu = dropdown.querySelector(BuilderEditLesson.selectors.elDropdownMenu);\n+    if (menu) {\n+      menu.classList.toggle('is-open');\n+      const isOpen = menu.classList.contains('is-open');\n+      toggleBtn.setAttribute('aria-expanded', isOpen ? 'true' : 'false');\n+    }\n+  }\n+\n+  \u002F**\n+   * Initialize horizontal tabs for client-side tab switching\n+   *\u002F\n+  initTabs() {\n+    const tabs = document.querySelectorAll(BuilderEditLesson.selectors.elCBHorizontalTabs);\n+    if (tabs.length === 0) {\n+      return;\n+    }\n+\n+    \u002F\u002F Activate first tab by default if none is active\n+    const activeTab = document.querySelector(`${BuilderEditLesson.selectors.elCBHorizontalTabs}.is-active`);\n+    if (!activeTab && tabs.length > 0) {\n+      tabs[0].classList.add('is-active');\n+      const section = tabs[0].getAttribute('data-tab-section');\n+      if (section) {\n+        const panel = document.querySelector(`${BuilderEditLesson.selectors.elCBTabPanels}[data-section=\"${section}\"]`);\n+        if (panel) {\n+          panel.classList.remove('lp-hidden');\n+        }\n+      }\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle horizontal tab click for client-side tab switching\n+   *\u002F\n+  handleTabClick(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    const tabLink = target.closest(BuilderEditLesson.selectors.elCBHorizontalTabs);\n+    if (!tabLink) {\n+      return;\n+    }\n+    e.preventDefault();\n+    const section = tabLink.getAttribute('data-tab-section');\n+    if (!section) {\n+      return;\n+    }\n+\n+    \u002F\u002F Update active tab\n+    const allTabs = document.querySelectorAll(BuilderEditLesson.selectors.elCBHorizontalTabs);\n+    allTabs.forEach(tab => tab.classList.remove('is-active'));\n+    tabLink.classList.add('is-active');\n+\n+    \u002F\u002F Show\u002Fhide panels\n+    const allPanels = document.querySelectorAll(BuilderEditLesson.selectors.elCBTabPanels);\n+    allPanels.forEach(panel => {\n+      if (panel.getAttribute('data-section') === section) {\n+        panel.classList.remove('lp-hidden');\n+      } else {\n+        panel.classList.add('lp-hidden');\n+      }\n+    });\n+  }\n   events() {\n     if (BuilderEditLesson._loadedEvents) {\n       return;\n     }\n     BuilderEditLesson._loadedEvents = true;\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n-      selector: BuilderEditLesson.selectors.elBtnUpdateLesson,\n+      selector: BuilderEditLesson.selectors.elBtnMainAction,\n       class: this,\n       callBack: this.updateLesson.name\n     }, {\n-      selector: BuilderEditLesson.selectors.elBtnTrashLesson,\n+      selector: BuilderEditLesson.selectors.elBtnDraft,\n+      class: this,\n+      callBack: this.saveDraftLesson.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elBtnTrash,\n       class: this,\n       callBack: this.trashLesson.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elCBHorizontalTabs,\n+      class: this,\n+      callBack: this.handleTabClick.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elDropdownToggle,\n+      class: this,\n+      callBack: this.handleDropdownToggle.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elPermalinkEditBtn,\n+      class: this,\n+      callBack: this.handlePermalinkEdit.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elPermalinkOkBtn,\n+      class: this,\n+      callBack: this.handlePermalinkOk.name\n+    }, {\n+      selector: BuilderEditLesson.selectors.elPermalinkCancelBtn,\n+      class: this,\n+      callBack: this.handlePermalinkCancel.name\n     }]);\n   }\n+\n+  \u002F**\n+   * Validate title is not empty before update\n+   * @return {boolean} True if valid, false if invalid\n+   *\u002F\n+  validateTitleBeforeUpdate() {\n+    const titleInput = document.getElementById(BuilderEditLesson.selectors.idTitle);\n+    if (!titleInput) {\n+      return true;\n+    }\n+    const title = titleInput.value.trim();\n+    if (!title) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('Lesson title is required.', 'error');\n+      titleInput.focus();\n+      return false;\n+    }\n+    return true;\n+  }\n+\n+  \u002F**\n+   * Update action button text after status change\n+   * @param {string} newStatus - The new lesson status\n+   *\u002F\n+  updateActionButtons(newStatus) {\n+    const elBtnUpdate = document.querySelector(BuilderEditLesson.selectors.elBtnMainAction);\n+    if (!elBtnUpdate) {\n+      return;\n+    }\n+    const titleUpdate = elBtnUpdate.getAttribute('data-title-update') || 'Update';\n+    const titlePublish = elBtnUpdate.getAttribute('data-title-publish') || 'Publish';\n+    if (newStatus === 'publish') {\n+      elBtnUpdate.textContent = titleUpdate;\n+    } else {\n+      elBtnUpdate.textContent = titlePublish;\n+    }\n+  }\n+\n+  \u002F**\n+   * Check if we're in lesson edit context\n+   * @return {boolean}\n+   *\u002F\n+  isLessonContext() {\n+    return !!document.querySelector(BuilderEditLesson.selectors.elDataLesson);\n+  }\n+  slugify(str) {\n+    return (str || '').toString().normalize('NFD').replace(\u002F[\\u0300-\\u036f]\u002Fg, '').replace(\u002Fđ\u002Fg, 'd').replace(\u002FĐ\u002Fg, 'D').toLowerCase().replace(\u002F\\s+\u002Fg, '-').replace(\u002F[^\\w-]+\u002Fg, '').replace(\u002F--+\u002Fg, '-').replace(\u002F^-+\u002F, '').replace(\u002F-+$\u002F, '');\n+  }\n+  buildPermalinkDisplayUrl(baseUrl = '', slug = '', fallbackUrl = '') {\n+    const normalizedBaseUrl = typeof baseUrl === 'string' ? baseUrl : '';\n+    const normalizedSlug = typeof slug === 'string' ? slug.trim() : '';\n+    if (normalizedBaseUrl && normalizedSlug) {\n+      return `${normalizedBaseUrl}${normalizedSlug}`;\n+    }\n+    return typeof fallbackUrl === 'string' ? fallbackUrl : '';\n+  }\n+  getPermalinkRoot(target = null) {\n+    if (target?.closest) {\n+      const fromTarget = target.closest(BuilderEditLesson.selectors.elPermalinkRoot);\n+      if (fromTarget) {\n+        return fromTarget;\n+      }\n+    }\n+    return document.querySelector(`.cb-section__lesson-edit ${BuilderEditLesson.selectors.elPermalinkRoot}`);\n+  }\n+  showPermalinkUnavailable(permalinkRoot, message = '') {\n+    if (!permalinkRoot) {\n+      return;\n+    }\n+    const label = permalinkRoot.querySelector('.cb-item-edit-permalink__label') || permalinkRoot.querySelector('.cb-permalink-label');\n+    const display = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkDisplay);\n+    const editor = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkEditor);\n+    let placeholder = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkPlaceholder);\n+    if (!placeholder) {\n+      placeholder = document.createElement('span');\n+      placeholder.className = 'cb-item-edit-permalink__placeholder';\n+      if (label) {\n+        label.insertAdjacentElement('afterend', placeholder);\n+      } else {\n+        permalinkRoot.prepend(placeholder);\n+      }\n+    }\n+    placeholder.textContent = message || 'Permalink is only available if the item is already assigned to a course.';\n+    placeholder.classList.remove('lp-hidden');\n+    if (display) {\n+      display.classList.add('lp-hidden');\n+    }\n+    if (editor) {\n+      editor.classList.add('lp-hidden');\n+    }\n+  }\n   getLessonDataForUpdate() {\n     const data = {};\n     const wrapperEl = document.querySelector(BuilderEditLesson.selectors.elDataLesson);\n@@ -4969,6 +7917,10 @@\n         data.lesson_description = editor.getContent();\n       }\n     }\n+    const permalinkInput = document.querySelector(`input[name=\"lesson_permalink\"], #lesson_permalink, ${BuilderEditLesson.selectors.elPermalinkSlugInput}`);\n+    if (permalinkInput && permalinkInput.value) {\n+      data.lesson_permalink = permalinkInput.value;\n+    }\n     const elFormSetting = document.querySelector(BuilderEditLesson.selectors.elFormSetting);\n     if (elFormSetting) {\n       data.lesson_settings = true;\n@@ -5017,23 +7969,151 @@\n     }\n     return data;\n   }\n+  updatePermalinkUIAfterSave(data = {}) {\n+    const permalinkRoot = this.getPermalinkRoot();\n+    if (!permalinkRoot) {\n+      return;\n+    }\n+    const slugInput = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkSlugInput);\n+    const urlLink = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkUrl);\n+    const baseUrlInput = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkBaseUrl);\n+    const display = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkDisplay);\n+    const placeholder = permalinkRoot.querySelector(BuilderEditLesson.selectors.elPermalinkPlaceholder);\n+    const permalinkDisplayUrl = this.buildPermalinkDisplayUrl(baseUrlInput ? baseUrlInput.value : '', data?.lesson_slug, data?.lesson_permalink);\n+    if (slugInput && data?.lesson_slug) {\n+      slugInput.value = data.lesson_slug;\n+      slugInput.dataset.originalValue = data.lesson_slug;\n+    }\n+    const shouldShowUnavailable = data?.permalink_available === false || data?.status === 'draft' || data?.status === 'trash' || !data?.lesson_permalink;\n+    if (shouldShowUnavailable) {\n+      this.showPermalinkUnavailable(permalinkRoot, data?.permalink_notice);\n+      return;\n+    }\n+    if (placeholder) {\n+      placeholder.classList.add('lp-hidden');\n+    }\n+    if (display) {\n+      display.classList.remove('lp-hidden');\n+    }\n+    if (urlLink && data?.lesson_permalink) {\n+      urlLink.href = data.lesson_permalink;\n+      urlLink.textContent = permalinkDisplayUrl || data.lesson_permalink;\n+    } else if (urlLink && permalinkDisplayUrl) {\n+      urlLink.textContent = permalinkDisplayUrl;\n+    }\n+  }\n+  handlePermalinkEdit(args) {\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const trigger = target?.closest(BuilderEditLesson.selectors.elPermalinkEditBtn);\n+    const lessonRoot = trigger?.closest(BuilderEditLesson.selectors.elDataLesson) || document.querySelector(BuilderEditLesson.selectors.elDataLesson);\n+    if (!lessonRoot) {\n+      return;\n+    }\n+    const display = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkDisplay);\n+    const editor = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkEditor);\n+    const input = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) {\n+      return;\n+    }\n+    input.dataset.originalValue = input.value;\n+    display.classList.add('lp-hidden');\n+    editor.classList.remove('lp-hidden');\n+    input.focus();\n+    input.select();\n+  }\n+  handlePermalinkOk(args) {\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const trigger = target?.closest(BuilderEditLesson.selectors.elPermalinkOkBtn);\n+    const lessonRoot = trigger?.closest(BuilderEditLesson.selectors.elDataLesson) || document.querySelector(BuilderEditLesson.selectors.elDataLesson);\n+    if (!lessonRoot) {\n+      return;\n+    }\n+    const display = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkDisplay);\n+    const editor = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkEditor);\n+    const input = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkSlugInput);\n+    const urlLink = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkUrl);\n+    const baseUrlInput = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkBaseUrl);\n+    if (!display || !editor || !input || !urlLink) {\n+      return;\n+    }\n+    let newSlug = this.slugify(input.value.trim());\n+    if (!newSlug) {\n+      newSlug = input.dataset.originalValue || 'lesson';\n+    }\n+    input.value = newSlug;\n+    const baseUrl = baseUrlInput ? baseUrlInput.value : '';\n+    const newUrl = this.buildPermalinkDisplayUrl(baseUrl, newSlug, urlLink.textContent || '');\n+\n+    \u002F\u002F Keep href as the current saved link and only update display text.\n+    urlLink.textContent = newUrl;\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+  }\n+  handlePermalinkCancel(args) {\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const trigger = target?.closest(BuilderEditLesson.selectors.elPermalinkCancelBtn);\n+    const lessonRoot = trigger?.closest(BuilderEditLesson.selectors.elDataLesson) || document.querySelector(BuilderEditLesson.selectors.elDataLesson);\n+    if (!lessonRoot) {\n+      return;\n+    }\n+    const display = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkDisplay);\n+    const editor = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkEditor);\n+    const input = lessonRoot.querySelector(BuilderEditLesson.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) {\n+      return;\n+    }\n+    input.value = input.dataset.originalValue || '';\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+  }\n   updateLesson(args) {\n+    \u002F\u002F Context check: only handle if on lesson edit page\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n     const {\n       target\n     } = args;\n-    const elBtnUpdateLesson = target.closest(BuilderEditLesson.selectors.elBtnUpdateLesson);\n+    const elBtnUpdateLesson = target.closest(BuilderEditLesson.selectors.elBtnMainAction);\n     if (!elBtnUpdateLesson) {\n       return;\n     }\n+\n+    \u002F\u002F Validate title before update\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnUpdateLesson, 1);\n     const lessonData = this.getLessonDataForUpdate();\n+    const targetStatus = elBtnUpdateLesson.dataset.status || 'publish';\n     const dataSend = {\n       ...lessonData,\n       action: 'builder_update_lesson',\n       args: {\n         id_url: 'builder-update-lesson'\n       },\n-      lesson_status: 'publish'\n+      lesson_status: targetStatus\n     };\n     if (typeof lpLessonBuilder !== 'undefined' && lpLessonBuilder.nonce) {\n       dataSend.nonce = lpLessonBuilder.nonce;\n@@ -5046,19 +8126,33 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.button_title) {\n-          elBtnUpdateLesson.textContent = data.button_title;\n-        }\n-        if (data?.lesson_id_new) {\n-          const currentUrl = window.location.href;\n-          window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.lesson_id_new}\u002F`);\n-        }\n-        if (data?.status) {\n-          const elStatus = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n-          if (elStatus) {\n-            elStatus.className = 'lesson-status ' + data.status;\n-            elStatus.textContent = data.status;\n+        if (status === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons(targetStatus);\n+          if (data?.lesson_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.lesson_id_new}\u002F`);\n           }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n+            if (elStatus) {\n+              elStatus.className = 'lesson-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.lesson-item[data-lesson-id=\"${lessonData.lesson_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumLesson = curriculumItem.closest('.lesson');\n+                if (elCurriculumLesson) {\n+                  elCurriculumLesson.remove();\n+                }\n+              }\n+            }\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Reset form state to prevent \"leave site\" warning\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n         }\n       },\n       error: error => {\n@@ -5070,14 +8164,107 @@\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n+  saveDraftLesson(args) {\n+    \u002F\u002F Context check: only handle if on lesson edit page\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDraftLesson = target.closest(BuilderEditLesson.selectors.elBtnDraft);\n+    if (!elBtnDraftLesson) {\n+      return;\n+    }\n+\n+    \u002F\u002F Check if published to show confirm unpublish modal\n+    const statusEl = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n+    const isPublished = statusEl && statusEl.classList.contains('publish');\n+    if (isPublished) {\n+      const confirmMsg = elBtnDraftLesson.dataset.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+      if (!confirm(confirmMsg)) {\n+        return;\n+      }\n+    }\n+\n+    \u002F\u002F Validate title before saving draft\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnDraftLesson, 1);\n+    const lessonData = this.getLessonDataForUpdate();\n+    const dataSend = {\n+      ...lessonData,\n+      action: 'builder_update_lesson',\n+      args: {\n+        id_url: 'builder-update-lesson'\n+      },\n+      lesson_status: 'draft'\n+    };\n+    if (typeof lpLessonBuilder !== 'undefined' && lpLessonBuilder.nonce) {\n+      dataSend.nonce = lpLessonBuilder.nonce;\n+    }\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons('draft');\n+          if (data?.lesson_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.lesson_id_new}\u002F`);\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n+            if (elStatus) {\n+              elStatus.className = 'lesson-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.lesson-item[data-lesson-id=\"${lessonData.lesson_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumLesson = curriculumItem.closest('.lesson');\n+                if (elCurriculumLesson) {\n+                  elCurriculumLesson.remove();\n+                }\n+              }\n+            }\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Reset form state to prevent \"leave site\" warning\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnDraftLesson, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n   trashLesson(args) {\n+    \u002F\u002F Context check: only handle if on lesson edit page\n+    if (!this.isLessonContext()) {\n+      return;\n+    }\n     const {\n       target\n     } = args;\n-    const elBtnTrashLesson = target.closest(BuilderEditLesson.selectors.elBtnTrashLesson);\n+    const elBtnTrashLesson = target.closest(BuilderEditLesson.selectors.elBtnTrash);\n     if (!elBtnTrashLesson) {\n       return;\n     }\n+    if (!confirm('Are you sure you want to trash this lesson?')) {\n+      return;\n+    }\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnTrashLesson, 1);\n     const lessonData = this.getLessonDataForUpdate();\n     const dataSend = {\n@@ -5095,18 +8282,27 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.button_title) {\n-          const elBtnUpdateLesson = document.querySelector(BuilderEditLesson.selectors.elBtnUpdateLesson);\n-          if (elBtnUpdateLesson) {\n-            elBtnUpdateLesson.textContent = data.button_title;\n+        if (status === 'success') {\n+          if (data?.redirect_url) {\n+            window.location.href = data.redirect_url;\n           }\n-        }\n-        if (data?.status) {\n-          const elStatus = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n-          if (elStatus) {\n-            elStatus.className = 'lesson-status ' + data.status;\n-            elStatus.textContent = data.status;\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditLesson.selectors.elLessonStatus);\n+            if (elStatus) {\n+              elStatus.className = 'lesson-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.lesson-item[data-lesson-id=\"${lessonData.lesson_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumLesson = curriculumItem.closest('.lesson');\n+                if (elCurriculumLesson) {\n+                  elCurriculumLesson.remove();\n+                }\n+              }\n+            }\n           }\n+          this.updatePermalinkUIAfterSave(data);\n         }\n       },\n       error: error => {\n@@ -5120,13 +8316,13 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\"\n \u002F*!**********************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js ***!\n   \\**********************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -5417,17 +8613,47 @@\n    * Validate uploaded file\n    *\u002F\n   validateFile(target) {\n-    if (!target.value || !target.files?.length) return;\n+    if (!target.value || !target.files?.length) {\n+      this.resetUploadLabel(target);\n+      return;\n+    }\n     const file = target.files[0];\n     if (this.acceptFile.length > 0 && !this.acceptFile.includes(file.type)) {\n       alert('This file is not allowed! Please choose another file!');\n       target.value = '';\n+      this.resetUploadLabel(target);\n       return;\n     }\n     if (file.size > this.maxFileSize * 1024 * 1024) {\n       alert(`This file size is greater than ${this.maxFileSize}MB! Please choose another file!`);\n       target.value = '';\n+      this.resetUploadLabel(target);\n+      return;\n     }\n+    this.updateUploadLabel(target, file.name);\n+  }\n+\n+  \u002F**\n+   * Update upload label to show selected file name\n+   *\u002F\n+  updateUploadLabel(target, fileName) {\n+    if (!fileName) return;\n+    const uploadLabel = target.closest('.lp-material--upload-wrap')?.querySelector('label');\n+    if (!uploadLabel) return;\n+    uploadLabel.classList.add('has-selected-file');\n+    uploadLabel.setAttribute('data-file-name', fileName);\n+    uploadLabel.setAttribute('title', fileName);\n+  }\n+\n+  \u002F**\n+   * Reset upload label state\n+   *\u002F\n+  resetUploadLabel(target) {\n+    const uploadLabel = target?.closest('.lp-material--upload-wrap')?.querySelector('label');\n+    if (!uploadLabel) return;\n+    uploadLabel.classList.remove('has-selected-file');\n+    uploadLabel.removeAttribute('data-file-name');\n+    uploadLabel.removeAttribute('title');\n   }\n \n   \u002F**\n@@ -5542,7 +8768,10 @@\n         materials.forEach(ele => {\n           ele.querySelector('.lp-material--field-title').value = '';\n           const uploadField = ele.querySelector('.lp-material--field-upload');\n-          if (uploadField) uploadField.value = '';\n+          if (uploadField) {\n+            uploadField.value = '';\n+            this.resetUploadLabel(uploadField);\n+          }\n           const externalField = ele.querySelector('.lp-material--field-external-link');\n           if (externalField) externalField.value = '';\n         });\n@@ -5554,7 +8783,8 @@\n         data,\n         status\n       } = res;\n-      alert(message);\n+      \u002F\u002F console.log( message );\n+\n       if (status === 'success' && data?.length > 0) {\n         const {\n           thead,\n@@ -5726,7 +8956,7 @@\n       });\n       const res = await response.json();\n       if (res.status !== 200) {\n-        alert('Sort table fail.');\n+        console.error('Sort table fail.');\n       }\n     } catch (err) {\n       console.error('Update sort error:', err);\n@@ -5809,13 +9039,13 @@\n }\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (BuilderMaterial);\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js\"\n \u002F*!************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js ***!\n   \\************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -5826,6 +9056,8 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\n \n \n \n@@ -5838,10 +9070,12 @@\n     elLessonExpandedItems: '.lesson-action-expanded__items',\n     elLessonDuplicate: '.lesson-action-expanded__duplicate',\n     elLessonTrash: '.lesson-action-expanded__trash',\n+    elLessonRestore: '.lesson-action-expanded__restore',\n     elLessonPublish: '.lesson-action-expanded__publish',\n     elLessonDelete: '.lesson-action-expanded__delete',\n     elLessonActionExpanded: '.lesson-action-expanded',\n-    elLessonStatus: '.lesson-status'\n+    elLessonStatus: '.lesson-status',\n+    elLessonPreview: '.lesson__preview.lp-btn-set-preview-item'\n   };\n   init() {\n     this.events();\n@@ -5864,6 +9098,10 @@\n       class: this,\n       callBack: this.publishLesson.name\n     }, {\n+      selector: BuilderTabLesson.selectors.elLessonRestore,\n+      class: this,\n+      callBack: this.restoreLesson.name\n+    }, {\n       selector: BuilderTabLesson.selectors.elLessonDelete,\n       class: this,\n       callBack: this.deleteLesson.name\n@@ -5871,12 +9109,40 @@\n       selector: BuilderTabLesson.selectors.elLessonActionExpanded,\n       class: this,\n       callBack: this.toggleExpandedAction.name\n+    }, {\n+      selector: BuilderTabLesson.selectors.elLessonPreview,\n+      class: this,\n+      callBack: this.toggleLessonPreview.name\n     }]);\n     document.addEventListener('click', e => {\n       if (!e.target.closest(BuilderTabLesson.selectors.elLessonActionExpanded)) {\n         this.closeAllExpanded();\n       }\n     });\n+    document.addEventListener('lp-builder-popup-saved', e => {\n+      const {\n+        type,\n+        id,\n+        data\n+      } = e.detail;\n+      if (type !== 'lesson' || !data?.list_item_html) return;\n+      const elItem = document.querySelector(`.lesson-item[data-lesson-id=\"${id}\"]`);\n+      if (elItem) {\n+        this.replaceItemHtml(elItem.closest('.lesson'), data.list_item_html);\n+      }\n+    });\n+    document.addEventListener('lp-builder-popup-trashed', e => {\n+      const {\n+        type,\n+        id,\n+        data\n+      } = e.detail;\n+      if (type !== 'lesson' || !data?.html) return;\n+      const elItem = document.querySelector(`.lesson-item[data-lesson-id=\"${id}\"]`);\n+      if (elItem) {\n+        this.replaceItemHtml(elItem.closest('.lesson'), data.html);\n+      }\n+    });\n   }\n   duplicateLesson(args) {\n     const {\n@@ -5887,47 +9153,67 @@\n     if (!elLessonItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonDuplicate, 1);\n+    const elActionExpanded = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n     const lessonId = elLessonItem.dataset.lessonId || '';\n-    const dataSend = {\n-      action: 'duplicate_lesson',\n-      args: {\n-        id_url: 'duplicate-lesson'\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elLessonDuplicate.dataset.title || 'Duplicate Lesson',\n+      text: elLessonDuplicate.dataset.content || 'Are you sure you want to duplicate this lesson?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n       },\n-      lesson_id: lessonId\n-    };\n-    const callBack = {\n-      success: response => {\n-        const {\n-          status,\n-          message,\n-          data\n-        } = response;\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.html) {\n-          const elLesson = elLessonDuplicate.closest('.lesson');\n-          elLesson.insertAdjacentHTML('afterend', data.html);\n-          const newLesson = elLesson.nextElementSibling;\n-          if (newLesson) {\n-            newLesson.scrollIntoView({\n-              behavior: 'smooth',\n-              block: 'nearest'\n-            });\n-            newLesson.classList.add('highlight-new-lesson');\n-            setTimeout(() => {\n-              newLesson.classList.remove('highlight-new-lesson');\n-            }, 1500);\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'duplicate_lesson',\n+          args: {\n+            id_url: 'duplicate-lesson'\n+          },\n+          lesson_id: lessonId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+            if (data?.html) {\n+              const elLesson = elLessonDuplicate.closest('.lesson');\n+              const elLessonList = elLesson.closest('.lessons-list') || elLesson.parentElement;\n+              if (elLessonList) {\n+                elLessonList.insertAdjacentHTML('afterbegin', data.html);\n+                const newLesson = elLessonList.firstElementChild;\n+                if (newLesson) {\n+                  newLesson.scrollIntoView({\n+                    behavior: 'smooth',\n+                    block: 'nearest'\n+                  });\n+                  newLesson.classList.add('highlight-new-lesson');\n+                  setTimeout(() => {\n+                    newLesson.classList.remove('highlight-new-lesson');\n+                  }, 1500);\n+                }\n+              }\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n-        }\n-      },\n-      error: error => {\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n-      },\n-      completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonDuplicate, 0);\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n       }\n-    };\n-    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    });\n   }\n   trashLesson(args) {\n     const {\n@@ -5938,14 +9224,72 @@\n     if (!elLessonItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonTrash, 1);\n+    const elActionExpanded = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n+    const lessonId = elLessonItem.dataset.lessonId || '';\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elLessonTrash.dataset.title || 'Trash Lesson',\n+      text: elLessonTrash.dataset.content || 'Are you sure? Moving it to the trash will cause this item to be removed from the course.',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'move_trash_lesson',\n+          args: {\n+            id_url: 'move-trash-lesson'\n+          },\n+          lesson_id: lessonId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+            if (data?.html) {\n+              this.replaceItemHtml(elLessonTrash.closest('.lesson'), data.html);\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n+          }\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+      }\n+    });\n+  }\n+  publishLesson(args) {\n+    const {\n+      target\n+    } = args;\n+    const elLessonPublish = target.closest(BuilderTabLesson.selectors.elLessonPublish);\n+    const elLessonItem = elLessonPublish.closest(BuilderTabLesson.selectors.elLessonItem);\n+    if (!elLessonItem) {\n+      return;\n+    }\n+    const elActionExpanded = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const lessonId = elLessonItem.dataset.lessonId || '';\n     const dataSend = {\n       action: 'move_trash_lesson',\n       args: {\n         id_url: 'move-trash-lesson'\n       },\n-      lesson_id: lessonId\n+      lesson_id: lessonId,\n+      status: 'publish'\n     };\n     const callBack = {\n       success: response => {\n@@ -5955,30 +9299,30 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elLesson = elLessonTrash.closest('.lesson');\n-          this.updateStatusUI(elLesson, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elLessonPublish.closest('.lesson'), data.html);\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonTrash, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n-  publishLesson(args) {\n+  restoreLesson(args) {\n     const {\n       target\n     } = args;\n-    const elLessonPublish = target.closest(BuilderTabLesson.selectors.elLessonPublish);\n-    const elLessonItem = elLessonPublish.closest(BuilderTabLesson.selectors.elLessonItem);\n+    const elLessonRestore = target.closest(BuilderTabLesson.selectors.elLessonRestore);\n+    const elLessonItem = elLessonRestore.closest(BuilderTabLesson.selectors.elLessonItem);\n     if (!elLessonItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonPublish, 1);\n+    const elActionExpanded = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const lessonId = elLessonItem.dataset.lessonId || '';\n     const dataSend = {\n       action: 'move_trash_lesson',\n@@ -5986,7 +9330,7 @@\n         id_url: 'move-trash-lesson'\n       },\n       lesson_id: lessonId,\n-      status: 'publish'\n+      status: 'draft'\n     };\n     const callBack = {\n       success: response => {\n@@ -5996,16 +9340,15 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elLesson = elLessonPublish.closest('.lesson');\n-          this.updateStatusUI(elLesson, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elLessonRestore.closest('.lesson'), data.html);\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elLessonPublish, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -6019,14 +9362,18 @@\n     if (!elLessonItem) {\n       return;\n     }\n+    const elActionExpanded = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n     const lessonId = elLessonItem.dataset.lessonId || '';\n     if (!lessonId) {\n       return;\n     }\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n-      title: elLessonDelete.dataset.title,\n-      text: elLessonDelete.dataset.content,\n-      icon: 'warning',\n+      title: elLessonDelete.dataset.title || 'Delete Lesson',\n+      text: elLessonDelete.dataset.content || 'Are you sure you want to permanently delete this lesson?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DELETE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n       showCloseButton: true,\n       showCancelButton: true,\n       cancelButtonText: lpData.i18n.cancel,\n@@ -6034,6 +9381,7 @@\n       reverseButtons: true\n     }).then(result => {\n       if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n         const dataSend = {\n           action: 'move_trash_lesson',\n           args: {\n@@ -6049,16 +9397,21 @@\n               message\n             } = response;\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-            const elLesson = elLessonDelete.closest('.lesson');\n-            elLesson.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n-            elLesson.style.opacity = '0';\n-            elLesson.style.transform = 'translateX(160px)';\n-            setTimeout(() => {\n-              elLesson.remove();\n-            }, 400);\n+            if (status === 'success') {\n+              const elLesson = elLessonDelete.closest('.lesson');\n+              elLesson.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n+              elLesson.style.opacity = '0';\n+              elLesson.style.transform = 'translateX(160px)';\n+              setTimeout(() => {\n+                elLesson.remove();\n+              }, 400);\n+            }\n           },\n           error: error => {\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n         };\n         window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -6070,14 +9423,28 @@\n       target\n     } = args;\n     const elLessonActionExpanded = target.closest(BuilderTabLesson.selectors.elLessonActionExpanded);\n+    if (!elLessonActionExpanded) {\n+      return;\n+    }\n     const elLessonItem = elLessonActionExpanded.closest(BuilderTabLesson.selectors.elLessonItem);\n+    if (!elLessonItem) {\n+      return;\n+    }\n     const elExpandedItems = elLessonItem.querySelector(BuilderTabLesson.selectors.elLessonExpandedItems);\n     if (!elExpandedItems) {\n       return;\n     }\n     this.closeAllExpanded(elExpandedItems);\n-    elExpandedItems.classList.toggle('active');\n-    elLessonActionExpanded.classList.toggle('active');\n+    const willOpen = !elExpandedItems.classList.contains('active');\n+    if (willOpen) {\n+      elExpandedItems.classList.add('active');\n+      elLessonActionExpanded.classList.add('active');\n+      this.setExpandedDirection(elExpandedItems);\n+    } else {\n+      elExpandedItems.classList.remove('active');\n+      elExpandedItems.classList.remove('is-dropup');\n+      elLessonActionExpanded.classList.remove('active');\n+    }\n   }\n   closeAllExpanded(excludeElement = null) {\n     const allExpandedItems = document.querySelectorAll(`${BuilderTabLesson.selectors.elLessonExpandedItems}.active`);\n@@ -6086,33 +9453,116 @@\n         return;\n       }\n       item.classList.remove('active');\n+      item.classList.remove('is-dropup');\n       const lessonItem = item.closest(BuilderTabLesson.selectors.elLessonItem);\n+      if (!lessonItem) {\n+        return;\n+      }\n       const expandedBtn = lessonItem.querySelector(BuilderTabLesson.selectors.elLessonActionExpanded);\n       if (expandedBtn) {\n         expandedBtn.classList.remove('active');\n       }\n     });\n   }\n-  updateStatusUI(elLesson, status) {\n-    const elStatus = elLesson.querySelector(BuilderTabLesson.selectors.elLessonStatus);\n-    const elSpanStatus = elLesson.querySelector(`${BuilderTabLesson.selectors.elLessonStatus} span`);\n-    if (elSpanStatus && elStatus) {\n-      elStatus.className = 'lesson-status ' + status;\n-      elSpanStatus.textContent = status;\n-    } else if (elStatus) {\n-      elStatus.className = 'lesson-status ' + status;\n-      elStatus.textContent = status;\n+  setExpandedDirection(elExpandedItems) {\n+    if (!elExpandedItems) {\n+      return;\n+    }\n+    elExpandedItems.classList.remove('is-dropup');\n+    const elLesson = elExpandedItems.closest('.lesson');\n+    if (!elLesson) {\n+      return;\n+    }\n+    if (elLesson.matches(':last-child')) {\n+      elExpandedItems.classList.add('is-dropup');\n+    }\n+  }\n+\n+  \u002F* Toggle preview for a lesson in the lesson list *\u002F\n+  toggleLessonPreview(args) {\n+    const {\n+      target\n+    } = args;\n+    const elPreviewBtn = target.closest(BuilderTabLesson.selectors.elLessonPreview);\n+    if (!elPreviewBtn) {\n+      return;\n+    }\n+    if (elPreviewBtn.classList.contains('loading') || elPreviewBtn.classList.contains('lp-loading')) {\n+      return;\n+    }\n+    const elLessonItem = elPreviewBtn.closest(BuilderTabLesson.selectors.elLessonItem);\n+    if (!elLessonItem) {\n+      return;\n+    }\n+    const icon = elPreviewBtn.querySelector('a');\n+    if (!icon) {\n+      return;\n+    }\n+    const lessonId = elLessonItem.dataset.lessonId || elPreviewBtn.dataset.id || '';\n+    if (!lessonId) {\n+      return;\n+    }\n+\n+    \u002F\u002F Optimistic toggle\n+    icon.classList.toggle('lp-icon-eye');\n+    icon.classList.toggle('lp-icon-eye-slash');\n+    const enablePreview = icon.classList.contains('lp-icon-eye');\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elPreviewBtn, 1);\n+    elPreviewBtn.classList.add('lp-loading');\n+    const dataSend = {\n+      action: 'builder_update_lesson',\n+      args: {\n+        id_url: 'builder-update-lesson'\n+      },\n+      lesson_id: lessonId,\n+      lesson_settings: true,\n+      _lp_preview: enablePreview ? 'yes' : ''\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'error') {\n+          \u002F\u002F Revert on error\n+          icon.classList.toggle('lp-icon-eye');\n+          icon.classList.toggle('lp-icon-eye-slash');\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+        icon.classList.toggle('lp-icon-eye');\n+        icon.classList.toggle('lp-icon-eye-slash');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elPreviewBtn, 0);\n+        elPreviewBtn.classList.remove('lp-loading');\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  replaceItemHtml(elLesson, html) {\n+    if (!elLesson || !html) {\n+      return;\n+    }\n+    const tmp = document.createElement('div');\n+    tmp.innerHTML = html;\n+    const newEl = tmp.firstElementChild;\n+    if (newEl) {\n+      elLesson.replaceWith(newEl);\n     }\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-popup.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-popup.js\"\n \u002F*!****************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-popup.js ***!\n   \\****************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -6122,9 +9572,12 @@\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n-\u002F* harmony import *\u002F var _builder_quiz_builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\");\n-\u002F* harmony import *\u002F var _builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fbuilder-question\u002Fbuilder-edit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\");\n-\u002F* harmony import *\u002F var _builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fbuilder-lesson\u002Fbuilder-material.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\u002F* harmony import *\u002F var _builder_quiz_builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\");\n+\u002F* harmony import *\u002F var _builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! .\u002Fbuilder-question\u002Fbuilder-edit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\");\n+\u002F* harmony import *\u002F var _builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! .\u002Fbuilder-lesson\u002Fbuilder-material.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\");\n \u002F**\n  * Builder Popup Handler\n  * Handles AJAX popup loading for lesson, quiz, and question builders.\n@@ -6138,13 +9591,17 @@\n \n \n \n+\n+\n class BuilderPopup {\n   constructor() {\n     this.popupContainer = null;\n     this.currentType = null;\n     this.currentId = null;\n+    this.currentTemplate = '';\n     this.isNewItem = false;\n     this.savedData = null;\n+    this.openContext = this.getDefaultOpenContext();\n     this.builderEditQuiz = null;\n     this.builderEditQuestion = null;\n     this.builderMaterial = null;\n@@ -6160,105 +9617,82 @@\n     resizeBtn: '.lp-builder-popup__resize',\n     cancelBtn: '.lp-builder-popup__btn--cancel',\n     saveBtn: '.lp-builder-popup__btn--save',\n+    draftBtn: '.lp-builder-popup__btn--draft',\n     trashBtn: '.lp-builder-popup__btn--trash',\n     tabs: '.lp-builder-popup__tabs',\n     tab: '.lp-builder-popup__tab',\n     tabPane: '.lp-builder-popup__tab-pane',\n+    permalinkSlugInput: '.cb-permalink-slug-input',\n+    permalinkUrl: '.cb-permalink-url',\n+    permalinkBaseUrl: '#cb-permalink-base-url',\n+    permalinkDisplay: '.cb-permalink-display',\n+    permalinkEditor: '.cb-permalink-editor',\n+    permalinkRoot: '.cb-item-edit-permalink, .cb-course-edit-permalink',\n+    permalinkPlaceholder: '.cb-item-edit-permalink__placeholder',\n     \u002F\u002F Trigger buttons\n+    popupTrigger: '[data-popup-lesson], [data-popup-quiz], [data-popup-question], [data-add-new-lesson], [data-template][data-popup-type]',\n     triggerLesson: '[data-popup-lesson]',\n     triggerQuiz: '[data-popup-quiz]',\n     triggerQuestion: '[data-popup-question]',\n     \u002F\u002F Add new buttons\n-    addNewLesson: '[data-add-new-lesson]',\n-    addNewQuiz: '[data-add-new-quiz]',\n-    addNewQuestion: '[data-add-new-question]'\n+    addNewLesson: '[data-add-new-lesson]'\n   };\n   init() {\n-    this.createPopupContainer();\n-    this.events();\n-  }\n-  createPopupContainer() {\n-    if (!document.querySelector(BuilderPopup.selectors.popupContainer)) {\n-      const container = document.createElement('div');\n-      container.id = 'lp-builder-popup-container';\n-      document.body.appendChild(container);\n+    let popupContainer = document.querySelector(BuilderPopup.selectors.popupContainer);\n+    if (!popupContainer) {\n+      popupContainer = document.createElement('div');\n+      popupContainer.id = 'lp-builder-popup-container';\n+      document.body.appendChild(popupContainer);\n     }\n-    this.popupContainer = document.querySelector(BuilderPopup.selectors.popupContainer);\n+    this.popupContainer = popupContainer;\n+    this.events();\n   }\n   events() {\n     if (BuilderPopup._loadedEvents) {\n       return;\n     }\n     BuilderPopup._loadedEvents = true;\n-\n-    \u002F\u002F Open popup events\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n-      selector: BuilderPopup.selectors.triggerLesson,\n+      selector: BuilderPopup.selectors.popupTrigger,\n+      class: this,\n+      callBack: this.openPopup.name\n+    }, {\n+      selector: `${BuilderPopup.selectors.closeBtn}, ${BuilderPopup.selectors.cancelBtn}, ${BuilderPopup.selectors.popupOverlay}`,\n       class: this,\n-      callBack: 'openLessonPopup'\n+      callBack: this.closePopup.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n     }, {\n-      selector: BuilderPopup.selectors.triggerQuiz,\n+      selector: BuilderPopup.selectors.resizeBtn,\n       class: this,\n-      callBack: 'openQuizPopup'\n+      callBack: this.toggleFullscreen.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n     }, {\n-      selector: BuilderPopup.selectors.triggerQuestion,\n+      selector: BuilderPopup.selectors.tab,\n       class: this,\n-      callBack: 'openQuestionPopup'\n+      callBack: this.switchTab.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n     }, {\n-      selector: BuilderPopup.selectors.addNewLesson,\n+      selector: BuilderPopup.selectors.saveBtn,\n       class: this,\n-      callBack: 'addNewLesson'\n+      callBack: this.handleSave.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n     }, {\n-      selector: BuilderPopup.selectors.addNewQuiz,\n+      selector: BuilderPopup.selectors.draftBtn,\n       class: this,\n-      callBack: 'addNewQuiz'\n+      callBack: this.handleDraft.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n     }, {\n-      selector: BuilderPopup.selectors.addNewQuestion,\n+      selector: BuilderPopup.selectors.trashBtn,\n       class: this,\n-      callBack: 'addNewQuestion'\n+      callBack: this.handleTrash.name,\n+      conditionBeforeCallBack: () => this.isPopupOpen()\n+    }]);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('keydown', [{\n+      selector: 'body',\n+      class: this,\n+      callBack: this.closePopup.name,\n+      conditionBeforeCallBack: args => args.e.key === 'Escape' && this.isPopupOpen()\n     }]);\n-\n-    \u002F\u002F Close popup events\n-    document.addEventListener('click', e => {\n-      if (e.target.closest(BuilderPopup.selectors.closeBtn) || e.target.closest(BuilderPopup.selectors.cancelBtn) || e.target.matches(BuilderPopup.selectors.popupOverlay)) {\n-        this.closePopup();\n-      }\n-    });\n-\n-    \u002F\u002F Resize\u002Ffullscreen toggle event\n-    document.addEventListener('click', e => {\n-      const resizeBtn = e.target.closest(BuilderPopup.selectors.resizeBtn);\n-      if (resizeBtn && this.isPopupOpen()) {\n-        this.toggleFullscreen();\n-      }\n-    });\n-\n-    \u002F\u002F Tab switching\n-    document.addEventListener('click', e => {\n-      const tab = e.target.closest(BuilderPopup.selectors.tab);\n-      if (tab && this.isPopupOpen()) {\n-        this.switchTab(tab);\n-      }\n-    });\n-\n-    \u002F\u002F Save and trash button events\n-    document.addEventListener('click', e => {\n-      const saveBtn = e.target.closest(BuilderPopup.selectors.saveBtn);\n-      if (saveBtn && this.isPopupOpen()) {\n-        this.handleSave(saveBtn);\n-      }\n-      const trashBtn = e.target.closest(BuilderPopup.selectors.trashBtn);\n-      if (trashBtn && this.isPopupOpen()) {\n-        this.handleTrash(trashBtn);\n-      }\n-    });\n-\n-    \u002F\u002F Close on Escape key\n-    document.addEventListener('keydown', e => {\n-      if (e.key === 'Escape' && this.isPopupOpen()) {\n-        this.closePopup();\n-      }\n-    });\n   }\n \n   \u002F**\n@@ -6289,92 +9723,108 @@\n       }\n     }));\n   }\n-\n-  \u002F**\n-   * Add new item handlers\n-   *\u002F\n-  addNewLesson(args) {\n+  openPopup(args) {\n     const {\n       target\n     } = args;\n-    if (target.closest(BuilderPopup.selectors.addNewLesson)) {\n-      this.loadPopup('lesson', 0);\n+    const triggerEl = target.closest(BuilderPopup.selectors.popupTrigger);\n+    if (!triggerEl) {\n+      return;\n     }\n-  }\n-  addNewQuiz(args) {\n-    const {\n-      target\n-    } = args;\n-    if (target.closest(BuilderPopup.selectors.addNewQuiz)) {\n-      this.loadPopup('quiz', 0);\n+    let type = '';\n+    let id = 0;\n+    if (triggerEl.matches(BuilderPopup.selectors.addNewLesson)) {\n+      type = 'lesson';\n+    } else if (triggerEl.dataset.popupType) {\n+      type = triggerEl.dataset.popupType;\n+      id = parseInt(triggerEl.dataset.popupId) || 0;\n+    } else if (triggerEl.dataset.popupLesson !== undefined) {\n+      type = 'lesson';\n+      id = parseInt(triggerEl.dataset.popupLesson) || 0;\n+    } else if (triggerEl.dataset.popupQuiz !== undefined) {\n+      type = 'quiz';\n+      id = parseInt(triggerEl.dataset.popupQuiz) || 0;\n+    } else if (triggerEl.dataset.popupQuestion !== undefined) {\n+      type = 'question';\n+      id = parseInt(triggerEl.dataset.popupQuestion) || 0;\n     }\n-  }\n-  addNewQuestion(args) {\n-    const {\n-      target\n-    } = args;\n-    if (target.closest(BuilderPopup.selectors.addNewQuestion)) {\n-      this.loadPopup('question', 0);\n+    if (!type) {\n+      return;\n     }\n+    this.showPopup(triggerEl, type, id, this.resolveOpenContext(triggerEl));\n   }\n-\n-  \u002F**\n-   * Open popup handlers\n-   *\u002F\n-  openLessonPopup(args) {\n-    const {\n-      target\n-    } = args;\n-    const triggerEl = target.closest(BuilderPopup.selectors.triggerLesson);\n-    if (triggerEl) {\n-      const lessonId = parseInt(triggerEl.dataset.popupLesson) || 0;\n-      this.loadPopup('lesson', lessonId);\n-    }\n+  getDefaultOpenContext() {\n+    return {\n+      isCurriculum: false,\n+      courseId: 0\n+    };\n   }\n-  openQuizPopup(args) {\n-    const {\n-      target\n-    } = args;\n-    const triggerEl = target.closest(BuilderPopup.selectors.triggerQuiz);\n-    if (triggerEl) {\n-      const quizId = parseInt(triggerEl.dataset.popupQuiz) || 0;\n-      this.loadPopup('quiz', quizId);\n-    }\n+  resolveOpenContext(triggerEl) {\n+    const isCurriculumContainer = !!triggerEl?.closest('#lp-course-edit-curriculum') || !!triggerEl?.closest('.lp-edit-curriculum-wrap');\n+    const courseId = parseInt(triggerEl?.dataset?.courseId) || 0;\n+    const isCurriculum = isCurriculumContainer && courseId > 0;\n+    return {\n+      isCurriculum,\n+      courseId\n+    };\n   }\n-  openQuestionPopup(args) {\n-    const {\n-      target\n-    } = args;\n-    const triggerEl = target.closest(BuilderPopup.selectors.triggerQuestion);\n-    if (triggerEl) {\n-      const questionId = parseInt(triggerEl.dataset.popupQuestion) || 0;\n-      this.loadPopup('question', questionId);\n+  showPopup(triggerEl, type, id, openContext = null) {\n+    const templateId = triggerEl?.dataset?.template || '';\n+    const templateEl = document.querySelector(templateId);\n+    if (!templateId || !templateEl) {\n+      return;\n     }\n-  }\n-\n-  \u002F**\n-   * Load popup content via AJAX\n-   *\u002F\n-  loadPopup(type, id) {\n     this.currentType = type;\n     this.currentId = id;\n+    this.currentTemplate = templateId;\n     this.isNewItem = id === 0;\n-    this.ensurePopupContainer();\n-    this.showLoading();\n-    const methodMap = {\n-      lesson: 'render_lesson_popup',\n-      quiz: 'render_quiz_popup',\n-      question: 'render_question_popup'\n-    };\n-    const dataSend = {\n-      callback: {\n-        class: 'LearnPress\\\\TemplateHooks\\\\CourseBuilder\\\\BuilderPopupTemplate',\n-        method: methodMap[type]\n-      },\n-      args: {\n-        [`${type}_id`]: id\n-      }\n-    };\n+    this.openContext = openContext ? {\n+      ...openContext\n+    } : this.getDefaultOpenContext();\n+    if (!this.popupContainer) {\n+      return;\n+    }\n+    this.popupContainer.innerHTML = templateEl.innerHTML;\n+    this.popupContainer.classList.add('active');\n+    document.body.classList.add('lp-popup-open');\n+    const elLPTarget = this.popupContainer.querySelector('.lp-target');\n+    if (!elLPTarget || !window.lpAJAXG) {\n+      return;\n+    }\n+    const dataSend = window.lpAJAXG.getDataSetCurrent(elLPTarget);\n+    dataSend.args = dataSend.args || {};\n+    dataSend.args[`${type}_id`] = id;\n+    window.lpAJAXG.setDataSetCurrent(elLPTarget, dataSend);\n+    this.requestPopupContent(dataSend);\n+  }\n+  reloadCurrentPopup() {\n+    if (!this.currentTemplate || !this.currentType) {\n+      return;\n+    }\n+    const templateEl = document.querySelector(this.currentTemplate);\n+    if (!templateEl) {\n+      return;\n+    }\n+    if (!this.popupContainer) {\n+      return;\n+    }\n+    this.popupContainer.innerHTML = templateEl.innerHTML;\n+    this.popupContainer.classList.add('active');\n+    document.body.classList.add('lp-popup-open');\n+    const elLPTarget = this.popupContainer.querySelector('.lp-target');\n+    if (!elLPTarget || !window.lpAJAXG) {\n+      return;\n+    }\n+    const dataSend = window.lpAJAXG.getDataSetCurrent(elLPTarget);\n+    dataSend.args = dataSend.args || {};\n+    dataSend.args[`${this.currentType}_id`] = this.currentId;\n+    window.lpAJAXG.setDataSetCurrent(elLPTarget, dataSend);\n+    this.requestPopupContent(dataSend);\n+  }\n+  requestPopupContent(dataSend) {\n+    if (!this.popupContainer || !window.lpAJAXG) {\n+      return;\n+    }\n     const callBack = {\n       success: response => {\n         const {\n@@ -6382,15 +9832,80 @@\n           data\n         } = response;\n         if (status === 'success' && data?.content) {\n-          this.renderPopup(data.content);\n+          this.popupContainer.innerHTML = data.content;\n+          this.popupContainer.classList.add('active');\n+          document.body.classList.add('lp-popup-open');\n+          this.loadedTabAssets.clear();\n+          this.initializedTabs.clear(); \u002F\u002F Clear initialized tabs cache\n+          const ajaxElements = this.popupContainer.querySelectorAll('.lp-load-ajax-element.loaded');\n+          ajaxElements.forEach(el => el.classList.remove('loaded'));\n+          setTimeout(() => window.lpAJAXG.getElements(), 50);\n+          const popup = this.popupContainer.querySelector(BuilderPopup.selectors.popup);\n+          const activeTab = popup?.querySelector(`${BuilderPopup.selectors.tab}.active`);\n+          const activeTabName = activeTab?.dataset.tab || 'overview';\n+          const activePane = popup?.querySelector(`${BuilderPopup.selectors.tabPane}[data-tab=\"${activeTabName}\"]`);\n+          if (activePane) {\n+            this.loadTabAssets(activeTabName, activePane);\n+          }\n+          if (activeTabName === 'overview') {\n+            setTimeout(() => this.initTinyMCE(), 50);\n+          }\n+          if (this.currentType === 'quiz') {\n+            if (!this.builderEditQuiz) {\n+              this.builderEditQuiz = new _builder_quiz_builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_4__.BuilderEditQuiz();\n+            }\n+            if (activeTabName === 'questions') {\n+              const tabKey = `${this.currentType}-${activeTabName}`;\n+              setTimeout(() => {\n+                this.triggerAjaxLoadForTab(activePane);\n+                this.builderEditQuiz.reinit(this.popupContainer);\n+                this.initializedTabs.set(tabKey, true);\n+              }, 100);\n+            }\n+          } else if (this.currentType === 'question') {\n+            if (!this.builderEditQuestion) {\n+              this.builderEditQuestion = new _builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_5__.BuilderEditQuestion();\n+            }\n+            if (activeTabName === 'settings') {\n+              const tabKey = `${this.currentType}-${activeTabName}`;\n+              setTimeout(() => {\n+                this.triggerAjaxLoadForTab(activePane);\n+                this.builderEditQuestion.reinit(this.popupContainer);\n+                this.initializedTabs.set(tabKey, true);\n+              }, 100);\n+            }\n+          } else if (this.currentType === 'lesson') {\n+            if (!this.builderMaterial) {\n+              this.builderMaterial = new _builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_6__.BuilderMaterial();\n+            }\n+            if (activeTabName === 'settings') {\n+              const tabKey = `${this.currentType}-${activeTabName}`;\n+              setTimeout(() => {\n+                this.triggerAjaxLoadForTab(activePane);\n+                this.builderMaterial.reinit(this.popupContainer);\n+                this.initializedTabs.set(tabKey, true);\n+              }, 100);\n+            }\n+          }\n+          document.dispatchEvent(new CustomEvent('lp-builder-popup-opened', {\n+            detail: {\n+              type: this.currentType,\n+              id: this.currentId,\n+              isNew: this.isNewItem\n+            }\n+          }));\n         } else {\n           lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(response.message || 'Failed to load popup', 'error');\n-          this.hideLoading();\n+          this.popupContainer.innerHTML = '';\n+          this.popupContainer.classList.remove('active');\n+          document.body.classList.remove('lp-popup-open');\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || 'Failed to load popup', 'error');\n-        this.hideLoading();\n+        this.popupContainer.innerHTML = '';\n+        this.popupContainer.classList.remove('active');\n+        document.body.classList.remove('lp-popup-open');\n       },\n       completed: () => {\n         \u002F\u002F Loading hidden in success\u002Ferror\n@@ -6400,160 +9915,6 @@\n   }\n \n   \u002F**\n-   * Ensure popup container exists\n-   *\u002F\n-  ensurePopupContainer() {\n-    let container = document.querySelector(BuilderPopup.selectors.popupContainer);\n-    if (!container) {\n-      container = document.createElement('div');\n-      container.id = 'lp-builder-popup-container';\n-      document.body.appendChild(container);\n-    }\n-    this.popupContainer = container;\n-  }\n-\n-  \u002F**\n-   * Render popup HTML\n-   *\u002F\n-  renderPopup(html) {\n-    this.ensurePopupContainer();\n-    if (!this.popupContainer) {\n-      console.error('BuilderPopup: popupContainer is null');\n-      return;\n-    }\n-    this.popupContainer.innerHTML = html;\n-    this.popupContainer.classList.add('active');\n-    document.body.classList.add('lp-popup-open');\n-    this.loadedTabAssets.clear();\n-    this.initializedTabs.clear(); \u002F\u002F Clear initialized tabs cache\n-    this.resetAjaxElements();\n-    this.loadActiveTabAssets();\n-\n-    \u002F\u002F Initialize type-specific handlers\n-    this.initTypeSpecificHandlers();\n-    document.dispatchEvent(new CustomEvent('lp-builder-popup-opened', {\n-      detail: {\n-        type: this.currentType,\n-        id: this.currentId,\n-        isNew: this.isNewItem\n-      }\n-    }));\n-  }\n-\n-  \u002F**\n-   * Initialize type-specific handlers based on current popup type\n-   *\u002F\n-  initTypeSpecificHandlers() {\n-    const activeTab = this.popupContainer.querySelector(`${BuilderPopup.selectors.tab}.active`);\n-    const activeTabName = activeTab?.dataset.tab || 'overview';\n-\n-    \u002F\u002F Initialize TinyMCE for overview tab\n-    if (activeTabName === 'overview') {\n-      setTimeout(() => this.initTinyMCE(), 50);\n-    }\n-\n-    \u002F\u002F Type-specific initialization\n-    switch (this.currentType) {\n-      case 'quiz':\n-        this.initQuizHandlers(activeTabName);\n-        break;\n-      case 'question':\n-        this.initQuestionHandlers(activeTabName);\n-        break;\n-      case 'lesson':\n-        this.initLessonHandlers(activeTabName);\n-        break;\n-    }\n-  }\n-\n-  \u002F**\n-   * Initialize quiz-specific handlers\n-   *\u002F\n-  initQuizHandlers(activeTabName) {\n-    if (!this.builderEditQuiz) {\n-      this.builderEditQuiz = new _builder_quiz_builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_2__.BuilderEditQuiz();\n-    }\n-    if (activeTabName === 'questions') {\n-      const tabKey = `${this.currentType}-${activeTabName}`;\n-      setTimeout(() => {\n-        const questionsPane = this.popupContainer.querySelector(`${BuilderPopup.selectors.tabPane}[data-tab=\"questions\"]`);\n-        if (questionsPane) {\n-          this.triggerAjaxLoadForTab(questionsPane);\n-          this.builderEditQuiz.reinit(this.popupContainer);\n-        }\n-\n-        \u002F\u002F Only init once per popup instance\n-        if (!this.initializedTabs.has(tabKey)) {\n-          this.builderEditQuiz.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }\n-      }, 100);\n-    }\n-  }\n-\n-  \u002F**\n-   * Initialize question-specific handlers\n-   *\u002F\n-  initQuestionHandlers(activeTabName) {\n-    if (!this.builderEditQuestion) {\n-      this.builderEditQuestion = new _builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_3__.BuilderEditQuestion();\n-    }\n-    if (activeTabName === 'settings') {\n-      const tabKey = `${this.currentType}-${activeTabName}`;\n-      setTimeout(() => {\n-        const settingsPane = this.popupContainer.querySelector(`${BuilderPopup.selectors.tabPane}[data-tab=\"settings\"]`);\n-        if (settingsPane) {\n-          this.triggerAjaxLoadForTab(settingsPane);\n-        }\n-\n-        \u002F\u002F Only init once per popup instance\n-        if (!this.initializedTabs.has(tabKey)) {\n-          this.builderEditQuestion.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }\n-      }, 100);\n-    }\n-  }\n-\n-  \u002F**\n-   * Initialize lesson-specific handlers\n-   *\u002F\n-  initLessonHandlers(activeTabName) {\n-    if (!this.builderMaterial) {\n-      this.builderMaterial = new _builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_4__.BuilderMaterial();\n-    }\n-    if (activeTabName === 'settings') {\n-      const tabKey = `${this.currentType}-${activeTabName}`;\n-      setTimeout(() => {\n-        const settingsPane = this.popupContainer.querySelector(`${BuilderPopup.selectors.tabPane}[data-tab=\"settings\"]`);\n-        if (settingsPane) {\n-          this.triggerAjaxLoadForTab(settingsPane);\n-        }\n-\n-        \u002F\u002F Only init once per popup instance\n-        if (!this.initializedTabs.has(tabKey)) {\n-          this.builderMaterial.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }\n-      }, 100);\n-    }\n-  }\n-\n-  \u002F**\n-   * Reset AJAX elements to allow fresh loading\n-   *\u002F\n-  resetAjaxElements() {\n-    if (!this.popupContainer) {\n-      return;\n-    }\n-    const ajaxElements = this.popupContainer.querySelectorAll('.lp-load-ajax-element.loaded');\n-    ajaxElements.forEach(el => el.classList.remove('loaded'));\n-    if (window.lpAJAXG) {\n-      setTimeout(() => window.lpAJAXG.getElements(), 50);\n-    }\n-  }\n-\n-  \u002F**\n    * Close popup\n    *\u002F\n   closePopup() {\n@@ -6568,7 +9929,7 @@\n     this.initializedTabs.clear(); \u002F\u002F Clear initialized tabs cache\n \n     if (savedData && closedId) {\n-      this.updateListItemOnClose(closedType, closedId, savedData);\n+      this.updateListItem(closedType, closedId, savedData);\n     }\n     document.dispatchEvent(new CustomEvent('lp-builder-popup-closed', {\n       detail: {\n@@ -6579,46 +9940,134 @@\n     }));\n     this.currentType = null;\n     this.currentId = null;\n+    this.currentTemplate = '';\n     this.isNewItem = false;\n     this.savedData = null;\n+    this.openContext = this.getDefaultOpenContext();\n   }\n \n   \u002F**\n-   * Update list item when popup closes after save\n+   * Update list item in the background list\n    *\u002F\n-  updateListItemOnClose(type, id, savedData) {\n+  updateListItem(type, id, savedData) {\n     if (!type || !id || !savedData) {\n       return;\n     }\n     const {\n       formData,\n-      data\n+      data,\n+      wasNewItem\n     } = savedData;\n-    const listItem = this.findListItem(type, id);\n-    if (!listItem) {\n-      return;\n-    }\n+    let listItems = this.findListItems(type, id);\n \n-    \u002F\u002F Update title\n-    const newTitle = formData[`${type}_title`];\n-    if (newTitle) {\n-      this.updateElementText(listItem, ['.item-title', '.lp-item-title', `.lp-${type}-title`, '.curriculum-item-title', '.item-name', 'span.title', '.lp-question-title-input', '.section-item-title input', '.section-item-title span'], newTitle);\n-    }\n-\n-    \u002F\u002F Update status\n-    if (data?.status) {\n-      this.updateElementClass(listItem, [`.${type}-status`, '.item-status', '.post-status'], data.status);\n-    }\n+    \u002F\u002F New items created from popup need to be inserted into the list first.\n+    if ((!listItems || listItems.length === 0) && wasNewItem) {\n+      const newItem = this.insertNewListItem(type, id, data?.list_item_html);\n+      if (newItem) {\n+        listItems = [newItem];\n+      }\n+    }\n+    if (!listItems || listItems.length === 0) {\n+      return;\n+    }\n+    listItems.forEach(listItem => {\n+      let currentItem = listItem;\n+\n+      \u002F\u002F Replace the entire item HTML if returned from the server\n+      if (data?.section_item_html && currentItem.classList.contains('section-item')) {\n+        const template = document.createElement('template');\n+        template.innerHTML = data.section_item_html.trim();\n+        const newListItem = template.content.firstElementChild;\n+        if (newListItem) {\n+          currentItem.replaceWith(newListItem);\n+          currentItem = newListItem;\n+        }\n+      } else if (data?.list_item_html && !currentItem.classList.contains('section-item')) {\n+        const template = document.createElement('template');\n+        template.innerHTML = data.list_item_html.trim();\n+        const newListItem = template.content.firstElementChild;\n+        if (newListItem) {\n+          currentItem.replaceWith(newListItem);\n+          currentItem = newListItem;\n+        }\n+      } else {\n+        \u002F\u002F Fallback: manually update elements if HTML replacement isn't used\n+        \u002F\u002F Update title\n+        const newTitle = formData[`${type}_title`];\n+        if (newTitle) {\n+          this.updateElementText(currentItem, ['.item-title', '.lp-item-title', `.lp-${type}-title`, '.curriculum-item-title', '.item-name', 'span.title', '.lp-question-title-input', '.section-item-title input', '.section-item-title span', '.lp-item-title-input'], newTitle);\n+        }\n \n-    \u002F\u002F Type-specific updates\n-    const typeUpdaters = {\n-      lesson: () => this.updateLessonListItem(listItem, formData, data),\n-      quiz: () => this.updateQuizListItem(listItem, formData, data),\n-      question: () => this.updateQuestionListItem(listItem, formData, data)\n-    };\n-    if (typeUpdaters[type]) {\n-      typeUpdaters[type]();\n-    }\n+        \u002F\u002F Update status\n+        if (data?.status) {\n+          this.updateElementClass(currentItem, [`.${type}-status`, '.item-status', '.post-status'], data.status);\n+        }\n+        if (type === 'lesson') {\n+          const duration = formData._lp_duration || data?.duration;\n+          if (duration) {\n+            this.updateDuration(currentItem, duration);\n+          }\n+          const preview = formData._lp_preview || data?.preview;\n+          const isPreview = preview === 'yes' || preview === true || preview === '1';\n+          const previewEl = currentItem.querySelector('.lp-btn-set-preview-item a, .course-item-preview');\n+          if (previewEl) {\n+            if (isPreview) {\n+              previewEl.classList.remove('lp-icon-eye-slash');\n+              previewEl.classList.add('lp-icon-eye');\n+            } else {\n+              previewEl.classList.remove('lp-icon-eye');\n+              previewEl.classList.add('lp-icon-eye-slash');\n+            }\n+          }\n+          const checkbox = currentItem.querySelector('input[type=\"checkbox\"].preview-checkbox');\n+          if (checkbox) {\n+            checkbox.checked = isPreview;\n+          }\n+          currentItem.classList.toggle('is-preview', isPreview);\n+          currentItem.classList.toggle('preview-item', isPreview);\n+        } else if (type === 'quiz') {\n+          const duration = formData._lp_duration || data?.duration;\n+          if (duration) {\n+            this.updateDuration(currentItem, duration);\n+          }\n+          const questionCount = data?.question_count || data?.questions_count;\n+          if (questionCount !== null && questionCount !== undefined) {\n+            const questionCountEl = currentItem.querySelector('.question-count');\n+            if (questionCountEl) {\n+              questionCountEl.textContent = `${questionCount} ${questionCount === 1 ? 'Question' : 'Questions'}`;\n+            }\n+          }\n+          const passingGrade = formData._lp_passing_grade || data?.passing_grade;\n+          if (passingGrade) {\n+            const passingGradeEl = currentItem.querySelector('.passing-grade');\n+            if (passingGradeEl) {\n+              passingGradeEl.textContent = `${passingGrade}%`;\n+            }\n+          }\n+        } else if (type === 'question') {\n+          const questionType = formData._lp_type || data?.type;\n+          if (questionType) {\n+            const typeMap = {\n+              true_or_false: 'True or False',\n+              single_choice: 'Single Choice',\n+              multi_choice: 'Multi Choice',\n+              fill_in_blanks: 'Fill in Blanks'\n+            };\n+            this.updateElementText(currentItem, ['.question-type', '.item-type'], typeMap[questionType] || questionType);\n+            const typeClasses = ['true_or_false', 'single_choice', 'multi_choice', 'fill_in_blanks'];\n+            typeClasses.forEach(cls => currentItem.classList.remove(cls));\n+            currentItem.classList.add(questionType);\n+          }\n+          const mark = formData._lp_mark || data?.mark;\n+          if (mark) {\n+            const questionMarkEl = currentItem.querySelector('.question-mark');\n+            if (questionMarkEl) {\n+              questionMarkEl.textContent = mark;\n+            }\n+          }\n+        }\n+      }\n+    });\n     document.dispatchEvent(new CustomEvent('lp-builder-list-item-updated', {\n       detail: {\n         type,\n@@ -6630,17 +10079,116 @@\n   }\n \n   \u002F**\n-   * Find list item by type and ID\n+   * Find all instances of a list item by type and ID\n    *\u002F\n-  findListItem(type, id) {\n+  findListItems(type, id) {\n     const selectors = [`[data-${type}-id=\"${id}\"]`, `[data-id=\"${id}\"]`, `[data-popup-${type}=\"${id}\"]`, `[data-item-id=\"${id}\"]`, `.section-item[data-item-id=\"${id}\"]`, `.lp-${type}-item[data-id=\"${id}\"]`];\n+    const foundItems = new Set();\n     for (const selector of selectors) {\n-      const item = document.querySelector(selector);\n-      if (item) {\n-        return item;\n+      const items = document.querySelectorAll(selector);\n+      for (const item of items) {\n+        \u002F\u002F Ensure we don't select elements inside the popup itself\n+        if (!item.closest('#lp-builder-popup-container')) {\n+          \u002F\u002F Exclude elements that are merely trigger buttons but not the list item container itself\n+          \u002F\u002F If it's just a generic button to open a popup, it might not be the actual item container.\n+          \u002F\u002F However, some UI lists use the trigger button as the container. We rely on the DOM structure.\n+          \u002F\u002F We can assume `.section-item` and `.lp-lesson-item` and `.cb-list-item` are containers.\n+          if (item.classList.contains('section-item') || item.classList.contains(`lp-${type}-item`) || item.classList.contains('list-item') || item.classList.contains('cb-list-item') || item.tagName === 'LI') {\n+            foundItems.add(item);\n+          } else {\n+            \u002F\u002F If it's a wrapper, like a div in Content Bank\n+            if (item.closest('ul')) {\n+              foundItems.add(item);\n+            }\n+          }\n+        }\n       }\n     }\n-    return null;\n+    return Array.from(foundItems);\n+  }\n+\n+  \u002F**\n+   * Insert a newly created list item into the current tab list.\n+   *\u002F\n+  insertNewListItem(type, id, listItemHtml) {\n+    if (!listItemHtml) {\n+      return null;\n+    }\n+    const existingListItems = this.findListItems(type, id);\n+    if (existingListItems && existingListItems.length > 0) {\n+      return existingListItems[0];\n+    }\n+    const listContainer = this.findListContainer(type);\n+    if (!listContainer) {\n+      return null;\n+    }\n+    const template = document.createElement('template');\n+    template.innerHTML = listItemHtml.trim();\n+    const newListItem = template.content.firstElementChild;\n+    if (!newListItem) {\n+      return null;\n+    }\n+    listContainer.prepend(newListItem);\n+    const highlightClassByType = {\n+      lesson: 'highlight-new-lesson',\n+      quiz: 'highlight-new-quiz',\n+      question: 'highlight-new-question'\n+    };\n+    const highlightClass = highlightClassByType[type];\n+    if (highlightClass) {\n+      newListItem.classList.add(highlightClass);\n+      newListItem.scrollIntoView({\n+        behavior: 'smooth',\n+        block: 'nearest'\n+      });\n+      setTimeout(() => {\n+        newListItem.classList.remove(highlightClass);\n+      }, 1500);\n+    }\n+    const finalListItems = this.findListItems(type, id);\n+    return finalListItems && finalListItems.length > 0 ? finalListItems[0] : newListItem;\n+  }\n+\n+  \u002F**\n+   * Find list container for type; create one if tab currently shows empty message.\n+   *\u002F\n+  findListContainer(type) {\n+    const listSelectorByType = {\n+      lesson: '.cb-list-lesson',\n+      quiz: '.cb-list-quiz',\n+      question: '.cb-list-question'\n+    };\n+    const tabSelectorByType = {\n+      lesson: '.courses-builder__lesson-tab',\n+      quiz: '.courses-builder__quiz-tab',\n+      question: '.courses-builder__question-tab'\n+    };\n+    const listClassByType = {\n+      lesson: 'cb-list-lesson',\n+      quiz: 'cb-list-quiz',\n+      question: 'cb-list-question'\n+    };\n+    const listSelector = listSelectorByType[type] || `.cb-list-${type}, [data-builder-list=\"${type}\"]`;\n+    if (!listSelector) {\n+      return null;\n+    }\n+    const existingList = document.querySelector(listSelector);\n+    if (existingList) {\n+      return existingList;\n+    }\n+    const tabContainer = document.querySelector(tabSelectorByType[type] || `.courses-builder__${type}-tab, [data-builder-tab=\"${type}\"]`);\n+    const listClass = listClassByType[type] || `cb-list-${type}`;\n+    if (!tabContainer || !listClass) {\n+      return null;\n+    }\n+    const emptyMessage = tabContainer.querySelector('.learn-press-message');\n+    if (emptyMessage) {\n+      emptyMessage.remove();\n+    }\n+    const listContainer = document.createElement('ul');\n+    listContainer.className = listClass;\n+    tabContainer.appendChild(listContainer);\n+    return listContainer;\n   }\n \n   \u002F**\n@@ -6679,53 +10227,6 @@\n   }\n \n   \u002F**\n-   * Update lesson-specific data\n-   *\u002F\n-  updateLessonListItem(listItem, formData, data) {\n-    const duration = formData._lp_duration || data?.duration;\n-    if (duration) {\n-      this.updateDuration(listItem, duration);\n-    }\n-    const preview = formData._lp_preview || data?.preview;\n-    this.updateLessonPreview(listItem, preview);\n-  }\n-\n-  \u002F**\n-   * Update quiz-specific data\n-   *\u002F\n-  updateQuizListItem(listItem, formData, data) {\n-    const duration = formData._lp_duration || data?.duration;\n-    if (duration) {\n-      this.updateDuration(listItem, duration);\n-    }\n-    const questionCount = data?.question_count || data?.questions_count;\n-    if (questionCount !== null && questionCount !== undefined) {\n-      this.updateMeta(listItem, '.question-count', `${questionCount} ${questionCount === 1 ? 'Question' : 'Questions'}`);\n-    }\n-    const passingGrade = formData._lp_passing_grade || data?.passing_grade;\n-    if (passingGrade) {\n-      this.updateMeta(listItem, '.passing-grade', `${passingGrade}%`);\n-    }\n-  }\n-\n-  \u002F**\n-   * Update question-specific data\n-   *\u002F\n-  updateQuestionListItem(listItem, formData, data) {\n-    const questionType = formData._lp_type || data?.type;\n-    if (questionType) {\n-      this.updateElementText(listItem, ['.question-type', '.item-type'], this.formatQuestionType(questionType));\n-      const typeClasses = ['true_or_false', 'single_choice', 'multi_choice', 'fill_in_blanks'];\n-      typeClasses.forEach(cls => listItem.classList.remove(cls));\n-      listItem.classList.add(questionType);\n-    }\n-    const mark = formData._lp_mark || data?.mark;\n-    if (mark) {\n-      this.updateMeta(listItem, '.question-mark', mark);\n-    }\n-  }\n-\n-  \u002F**\n    * Update duration meta\n    *\u002F\n   updateDuration(listItem, duration) {\n@@ -6746,16 +10247,6 @@\n   }\n \n   \u002F**\n-   * Update meta element\n-   *\u002F\n-  updateMeta(listItem, selector, value) {\n-    const el = listItem.querySelector(selector);\n-    if (el) {\n-      el.textContent = value;\n-    }\n-  }\n-\n-  \u002F**\n    * Format duration value\n    *\u002F\n   formatDuration(duration) {\n@@ -6785,48 +10276,6 @@\n   }\n \n   \u002F**\n-   * Update lesson preview status\n-   *\u002F\n-  updateLessonPreview(listItem, preview) {\n-    const isPreview = preview === 'yes' || preview === true || preview === '1';\n-\n-    \u002F\u002F Update preview icon\n-    const previewEl = listItem.querySelector('.lp-btn-set-preview-item a, .course-item-preview');\n-    if (previewEl) {\n-      if (isPreview) {\n-        previewEl.classList.remove('lp-icon-eye-slash');\n-        previewEl.classList.add('lp-icon-eye');\n-      } else {\n-        previewEl.classList.remove('lp-icon-eye');\n-        previewEl.classList.add('lp-icon-eye-slash');\n-      }\n-    }\n-\n-    \u002F\u002F Update preview checkbox\n-    const checkbox = listItem.querySelector('input[type=\"checkbox\"].preview-checkbox');\n-    if (checkbox) {\n-      checkbox.checked = isPreview;\n-    }\n-\n-    \u002F\u002F Toggle preview class\n-    listItem.classList.toggle('is-preview', isPreview);\n-    listItem.classList.toggle('preview-item', isPreview);\n-  }\n-\n-  \u002F**\n-   * Format question type for display\n-   *\u002F\n-  formatQuestionType(type) {\n-    const typeMap = {\n-      true_or_false: 'True or False',\n-      single_choice: 'Single Choice',\n-      multi_choice: 'Multi Choice',\n-      fill_in_blanks: 'Fill in Blanks'\n-    };\n-    return typeMap[type] || type;\n-  }\n-\n-  \u002F**\n    * Check if popup is open\n    *\u002F\n   isPopupOpen() {\n@@ -6834,35 +10283,13 @@\n   }\n \n   \u002F**\n-   * Show loading state\n-   *\u002F\n-  showLoading() {\n-    this.popupContainer.innerHTML = `\n-\t\t\t\u003Cdiv class=\"lp-builder-popup-overlay\">\u003C\u002Fdiv>\n-\t\t\t\u003Cdiv class=\"lp-builder-popup lp-builder-popup--loading\">\n-\t\t\t\t\u003Cdiv class=\"lp-builder-popup__loader\">\n-\t\t\t\t\t\u003Cdiv class=\"lp-loading-circle\">\u003C\u002Fdiv>\n-\t\t\t\t\t\u003Cspan>Loading...\u003C\u002Fspan>\n-\t\t\t\t\u003C\u002Fdiv>\n-\t\t\t\u003C\u002Fdiv>\n-\t\t`;\n-    this.popupContainer.classList.add('active');\n-    document.body.classList.add('lp-popup-open');\n-  }\n-\n-  \u002F**\n-   * Hide loading state\n-   *\u002F\n-  hideLoading() {\n-    this.popupContainer.innerHTML = '';\n-    this.popupContainer.classList.remove('active');\n-    document.body.classList.remove('lp-popup-open');\n-  }\n-\n-  \u002F**\n    * Switch tab with dynamic asset loading\n    *\u002F\n-  switchTab(tabEl) {\n+  switchTab(args) {\n+    const tabEl = args?.target ? args.target.closest(BuilderPopup.selectors.tab) : args;\n+    if (!tabEl) {\n+      return;\n+    }\n     const tabName = tabEl.dataset.tab;\n     const popup = tabEl.closest(BuilderPopup.selectors.popup);\n     if (!popup || !tabName) {\n@@ -6888,9 +10315,37 @@\n     }\n     targetPane.classList.add('active');\n     this.loadTabAssets(tabName, targetPane);\n-\n-    \u002F\u002F Handle tab-specific initialization\n-    this.handleTabSwitch(tabName, targetPane);\n+    const tabKey = `${this.currentType}-${tabName}`;\n+    if (!this.initializedTabs.has(tabKey)) {\n+      if (tabName === 'overview') {\n+        setTimeout(() => this.initTinyMCE(), 100);\n+        this.initializedTabs.set(tabKey, true);\n+      } else if (tabName === 'questions' && this.currentType === 'quiz') {\n+        this.triggerAjaxLoadForTab(targetPane);\n+        if (this.builderEditQuiz) {\n+          setTimeout(() => {\n+            this.builderEditQuiz.reinit(this.popupContainer);\n+            this.initializedTabs.set(tabKey, true);\n+          }, 100);\n+        }\n+      } else if (tabName === 'settings' && this.currentType === 'question') {\n+        this.triggerAjaxLoadForTab(targetPane);\n+        if (this.builderEditQuestion) {\n+          setTimeout(() => {\n+            this.builderEditQuestion.reinit(this.popupContainer);\n+            this.initializedTabs.set(tabKey, true);\n+          }, 100);\n+        }\n+      } else if (tabName === 'settings' && this.currentType === 'lesson') {\n+        this.triggerAjaxLoadForTab(targetPane);\n+        if (this.builderMaterial) {\n+          setTimeout(() => {\n+            this.builderMaterial.reinit(this.popupContainer);\n+            this.initializedTabs.set(tabKey, true);\n+          }, 100);\n+        }\n+      }\n+    }\n     document.dispatchEvent(new CustomEvent('lp-builder-tab-switched', {\n       detail: {\n         tabName,\n@@ -6901,50 +10356,6 @@\n   }\n \n   \u002F**\n-   * Handle tab switch for specific types\n-   *\u002F\n-  handleTabSwitch(tabName, targetPane) {\n-    const tabKey = `${this.currentType}-${tabName}`;\n-\n-    \u002F\u002F Check if tab already initialized\n-    if (this.initializedTabs.has(tabKey)) {\n-      \u002F\u002F Already initialized, just show the tab - no need to reinit\n-      return;\n-    }\n-    if (tabName === 'overview') {\n-      setTimeout(() => this.initTinyMCE(), 100);\n-      this.initializedTabs.set(tabKey, true);\n-    }\n-\n-    \u002F\u002F Type-specific tab handling - only init if not already initialized\n-    if (tabName === 'questions' && this.currentType === 'quiz') {\n-      this.triggerAjaxLoadForTab(targetPane);\n-      if (this.builderEditQuiz) {\n-        setTimeout(() => {\n-          this.builderEditQuiz.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }, 100);\n-      }\n-    } else if (tabName === 'settings' && this.currentType === 'question') {\n-      this.triggerAjaxLoadForTab(targetPane);\n-      if (this.builderEditQuestion) {\n-        setTimeout(() => {\n-          this.builderEditQuestion.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }, 100);\n-      }\n-    } else if (tabName === 'settings' && this.currentType === 'lesson') {\n-      this.triggerAjaxLoadForTab(targetPane);\n-      if (this.builderMaterial) {\n-        setTimeout(() => {\n-          this.builderMaterial.reinit(this.popupContainer);\n-          this.initializedTabs.set(tabKey, true);\n-        }, 100);\n-      }\n-    }\n-  }\n-\n-  \u002F**\n    * Trigger AJAX loading for tab elements\n    *\u002F\n   triggerAjaxLoadForTab(tabPane) {\n@@ -6972,10 +10383,11 @@\n       wp.editor.initialize(editorId, {\n         tinymce: {\n           wpautop: true,\n+          content_style: \"body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif; font-size: 14px; line-height: 1.6; color: #1e1e1e; }\",\n           plugins: 'charmap colorpicker compat3x directionality fullscreen hr image lists media paste tabfocus textcolor wordpress wpautoresize wplink wptextpattern',\n           toolbar1: 'formatselect,bold,italic,underline,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,unlink,spellchecker,wp_adv',\n           toolbar2: 'strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help',\n-          wordpress_adv_hidden: false\n+          wordpress_adv_hidden: true\n         },\n         quicktags: {\n           buttons: 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close'\n@@ -6987,6 +10399,7 @@\n         selector: '#' + editorId,\n         height: 300,\n         menubar: false,\n+        content_style: \"body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif; font-size: 14px; line-height: 1.6; color: #1e1e1e; }\",\n         plugins: ['advlist autolink lists link image charmap print preview anchor', 'searchreplace visualblocks code fullscreen', 'insertdatetime media table paste code help wordcount'],\n         toolbar: 'undo redo | formatselect | bold italic backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | help'\n       });\n@@ -7046,14 +10459,49 @@\n     });\n     editorsToRemove.forEach(id => this.destroyTinyMCE(id));\n   }\n+  getStatusFromPublishPanel(fallbackStatus = 'publish') {\n+    if (!this.currentType || !this.popupContainer) {\n+      return fallbackStatus;\n+    }\n+    const statusSelect = this.popupContainer.querySelector(`#cb-${this.currentType}-publish-status`);\n+    if (!statusSelect) {\n+      return fallbackStatus;\n+    }\n+    const selectedStatus = statusSelect.value;\n+    if (selectedStatus === 'publish' || selectedStatus === 'draft') {\n+      return selectedStatus;\n+    }\n+    return fallbackStatus;\n+  }\n+  syncPublishPanelStatus(status) {\n+    if (!this.currentType || !this.popupContainer) {\n+      return;\n+    }\n+    const statusSelect = this.popupContainer.querySelector(`#cb-${this.currentType}-publish-status`);\n+    if (!statusSelect) {\n+      return;\n+    }\n+    statusSelect.value = status === 'publish' ? 'publish' : 'draft';\n+  }\n \n   \u002F**\n    * Handle save action\n    *\u002F\n-  handleSave(saveBtn) {\n+  handleSave(args) {\n+    const saveBtn = args?.target ? args.target.closest(BuilderPopup.selectors.saveBtn) : args;\n+    if (!saveBtn) {\n+      return;\n+    }\n     if (!this.currentType) {\n       return;\n     }\n+    const publishLabel = (saveBtn?.dataset?.titlePublish || '').toString().trim().toLowerCase();\n+    const currentLabel = (saveBtn?.textContent || '').toString().trim().toLowerCase();\n+    const forcePublish = !!publishLabel && currentLabel === publishLabel;\n+    const targetStatus = forcePublish ? 'publish' : this.getStatusFromPublishPanel('publish');\n+    if (forcePublish) {\n+      this.syncPublishPanelStatus('publish');\n+    }\n     this.syncAllTinyMCE();\n     const formData = this.getFormData();\n     const validation = this.validateFormData(formData);\n@@ -7074,8 +10522,8 @@\n       args: {\n         id_url: `builder-update-${this.currentType}`\n       },\n-      [`${this.currentType}_status`]: 'publish',\n-      return_html: wasNewItem ? 'yes' : 'no'\n+      [`${this.currentType}_status`]: targetStatus,\n+      return_html: 'yes'\n     };\n     const callBack = {\n       success: response => {\n@@ -7086,7 +10534,7 @@\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n         if (status === 'success') {\n-          this.handleSaveSuccess(saveBtn, data, formData, wasNewItem);\n+          this.handleSaveSuccess(data, formData, wasNewItem);\n         }\n       },\n       error: error => {\n@@ -7100,21 +10548,111 @@\n   }\n \n   \u002F**\n+   * Handle save as draft action\n+   *\u002F\n+  async handleDraft(args) {\n+    const draftBtn = args?.target ? args.target.closest(BuilderPopup.selectors.draftBtn) : args;\n+    if (!draftBtn) {\n+      return;\n+    }\n+    if (!this.currentType) {\n+      return;\n+    }\n+\n+    \u002F\u002F Check if published to show confirm unpublish modal\n+    const statusEl = this.popupContainer.querySelector(`.${this.currentType}-status`);\n+    const isPublished = statusEl && statusEl.classList.contains('publish');\n+    if (isPublished) {\n+      const confirmMsg = draftBtn.dataset.confirmUnpublish || 'Saving as draft will unpublish this item from the course.';\n+      const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+        title: 'Are you sure?',\n+        text: confirmMsg,\n+        iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+        customClass: {\n+          icon: 'lp-cb-swal-icon-html'\n+        },\n+        showCloseButton: true,\n+        showCancelButton: true,\n+        cancelButtonText: lpData.i18n.cancel,\n+        confirmButtonText: lpData.i18n.yes,\n+        reverseButtons: true\n+      });\n+      if (!result.isConfirmed) {\n+        return;\n+      }\n+    }\n+    this.syncAllTinyMCE();\n+    const formData = this.getFormData();\n+    const validation = this.validateFormData(formData);\n+    if (!validation.valid) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(validation.errors.join('. '), 'error');\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(draftBtn, 1);\n+    const actionMap = {\n+      lesson: 'builder_update_lesson',\n+      quiz: 'builder_update_quiz',\n+      question: 'builder_update_question'\n+    };\n+    const wasNewItem = this.isNewItem;\n+    const dataSend = {\n+      ...formData,\n+      action: actionMap[this.currentType] || `builder_update_${this.currentType}`,\n+      args: {\n+        id_url: `builder-update-${this.currentType}`\n+      },\n+      [`${this.currentType}_status`]: 'draft',\n+      return_html: 'yes'\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          this.handleSaveSuccess(data, formData, wasNewItem);\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || 'Save draft failed', 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(draftBtn, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n    * Handle save success\n    *\u002F\n-  handleSaveSuccess(saveBtn, data, formData, wasNewItem) {\n+  handleSaveSuccess(data, formData, wasNewItem) {\n     if (data?.button_title) {\n-      saveBtn.textContent = data.button_title;\n+      const primarySaveBtn = this.popupContainer.querySelector(BuilderPopup.selectors.saveBtn);\n+      if (primarySaveBtn) {\n+        primarySaveBtn.textContent = data.button_title;\n+      }\n     }\n \n     \u002F\u002F Update status\n     if (data?.status) {\n+      this.syncPublishPanelStatus(data.status);\n       const statusEl = this.popupContainer.querySelector(`.${this.currentType}-status`);\n       if (statusEl) {\n         statusEl.className = `${this.currentType}-status ${data.status}`;\n         statusEl.textContent = data.status;\n       }\n+      if (this.shouldRemoveFromCurriculum(data.status)) {\n+        this.removeItemFromCurriculum(this.currentId);\n+      }\n+      if (this.shouldRemoveQuestionFromAssignedQuiz(data.status)) {\n+        this.removeQuestionFromAssignedQuiz(this.currentId);\n+      }\n     }\n+    this.updatePermalinkUIAfterSave(data);\n \n     \u002F\u002F Handle new item\n     const newIdKey = `${this.currentType}_id_new`;\n@@ -7139,6 +10677,9 @@\n       wasNewItem\n     };\n \n+    \u002F\u002F Update the list item immediately\n+    this.updateListItem(this.currentType, this.currentId, this.savedData);\n+\n     \u002F\u002F Handle new item creation\n     if (wasNewItem && this.currentId) {\n       document.dispatchEvent(new CustomEvent('lp-builder-popup-saved', {\n@@ -7155,7 +10696,7 @@\n       \u002F\u002F Reload popup to show all tabs\n       setTimeout(() => {\n         this.destroyAllTinyMCE();\n-        this.loadPopup(this.currentType, this.currentId);\n+        this.reloadCurrentPopup();\n       }, 300);\n     } else {\n       document.dispatchEvent(new CustomEvent('lp-builder-popup-saved', {\n@@ -7173,11 +10714,29 @@\n   \u002F**\n    * Handle trash action\n    *\u002F\n-  handleTrash(trashBtn) {\n+  async handleTrash(args) {\n+    const trashBtn = args?.target ? args.target.closest(BuilderPopup.selectors.trashBtn) : args;\n+    if (!trashBtn) {\n+      return;\n+    }\n     if (!this.currentType || !this.currentId) {\n       return;\n     }\n-    if (!confirm(`Are you sure you want to move this ${this.currentType} to trash?`)) {\n+    const confirmMsg = trashBtn.dataset.confirmTrash || 'Moving it to the trash will cause this item to be removed from the course.';\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: 'Are you sure?',\n+      text: confirmMsg,\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n       return;\n     }\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(trashBtn, 1);\n@@ -7193,6 +10752,9 @@\n       },\n       [`${this.currentType}_id`]: this.currentId\n     };\n+    if (!!this.openContext?.isCurriculum && (parseInt(this.openContext?.courseId) || 0) > 0) {\n+      dataSend.course_id = parseInt(this.openContext.courseId) || 0;\n+    }\n     const callBack = {\n       success: response => {\n         const {\n@@ -7214,7 +10776,14 @@\n               statusEl.className = `${this.currentType}-status ${data.status}`;\n               statusEl.textContent = data.status;\n             }\n+            if (this.shouldRemoveFromCurriculum(data.status)) {\n+              this.removeItemFromCurriculum(this.currentId);\n+            }\n+            if (this.shouldRemoveQuestionFromAssignedQuiz(data.status)) {\n+              this.removeQuestionFromAssignedQuiz(this.currentId);\n+            }\n           }\n+          this.updatePermalinkUIAfterSave(data);\n           this.savedData = {\n             formData: this.getFormData(),\n             data,\n@@ -7238,6 +10807,74 @@\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n+  shouldRemoveFromCurriculum(status) {\n+    const normalizedStatus = (status || '').toString().toLowerCase();\n+    const removableStatuses = ['draft', 'trash'];\n+    return !!this.openContext?.isCurriculum && removableStatuses.includes(normalizedStatus) && (parseInt(this.currentId) || 0) > 0;\n+  }\n+  shouldRemoveQuestionFromAssignedQuiz(status) {\n+    const normalizedStatus = (status || '').toString().toLowerCase();\n+    return this.currentType === 'question' && ['draft', 'trash'].includes(normalizedStatus) && (parseInt(this.currentId) || 0) > 0;\n+  }\n+  removeItemFromCurriculum(itemId) {\n+    const parsedItemId = parseInt(itemId) || 0;\n+    if (parsedItemId \u003C= 0) {\n+      return;\n+    }\n+    const curriculumRoot = document.querySelector('#lp-course-edit-curriculum') || document.querySelector('.lp-edit-curriculum-wrap');\n+    if (!curriculumRoot) {\n+      return;\n+    }\n+    const items = curriculumRoot.querySelectorAll(`.section-item[data-item-id=\"${parsedItemId}\"]`);\n+    if (!items.length) {\n+      return;\n+    }\n+    const sectionsToUpdate = new Set();\n+    items.forEach(item => {\n+      const section = item.closest('.section');\n+      if (section) {\n+        sectionsToUpdate.add(section);\n+      }\n+      item.remove();\n+    });\n+    this.syncCurriculumCounters(curriculumRoot, sectionsToUpdate);\n+  }\n+  removeQuestionFromAssignedQuiz(questionId) {\n+    const parsedQuestionId = parseInt(questionId) || 0;\n+    if (parsedQuestionId \u003C= 0) {\n+      return;\n+    }\n+    const questionItems = document.querySelectorAll(`.lp-question-item[data-question-id=\"${parsedQuestionId}\"]`);\n+    questionItems.forEach(item => item.remove());\n+  }\n+  syncCurriculumCounters(curriculumRoot, sectionsToUpdate = new Set()) {\n+    if (!curriculumRoot) {\n+      return;\n+    }\n+    const allItems = curriculumRoot.querySelectorAll('.section-item:not(.clone)');\n+    const totalItemsCount = allItems.length;\n+    const totalItemsEl = curriculumRoot.querySelector('.total-items');\n+    if (totalItemsEl) {\n+      totalItemsEl.dataset.count = totalItemsCount;\n+      const totalItemsCountEl = totalItemsEl.querySelector('.count');\n+      if (totalItemsCountEl) {\n+        totalItemsCountEl.textContent = totalItemsCount;\n+      }\n+    }\n+    const sections = sectionsToUpdate.size > 0 ? Array.from(sectionsToUpdate) : Array.from(curriculumRoot.querySelectorAll('.section'));\n+    sections.forEach(section => {\n+      const sectionItemsCountEl = section.querySelector('.section-items-counts');\n+      if (!sectionItemsCountEl) {\n+        return;\n+      }\n+      const sectionItemsCount = section.querySelectorAll('.section-item:not(.clone)').length;\n+      sectionItemsCountEl.dataset.count = sectionItemsCount;\n+      const countEl = sectionItemsCountEl.querySelector('.count');\n+      if (countEl) {\n+        countEl.textContent = sectionItemsCount;\n+      }\n+    });\n+  }\n \n   \u002F**\n    * Validate form data\n@@ -7269,6 +10906,9 @@\n     }\n     const idKey = `${this.currentType}_id`;\n     data[idKey] = this.currentId || 0;\n+    if (!!this.openContext?.isCurriculum && (parseInt(this.openContext?.courseId) || 0) > 0) {\n+      data.course_id = parseInt(this.openContext.courseId) || 0;\n+    }\n \n     \u002F\u002F Get title\n     const titleInput = popup.querySelector('input[name$=\"_title\"], #title, #' + this.currentType + '_title');\n@@ -7295,8 +10935,84 @@\n       data[`${this.currentType}_settings`] = true;\n       this.collectFormData(formSettings, data);\n     }\n+\n+    \u002F\u002F Capture permalink slug in overview tab (quiz\u002Fquestion popup).\n+    const permalinkInput = popup.querySelector(`input[name=\"${this.currentType}_permalink\"], #${this.currentType}_permalink, ${BuilderPopup.selectors.permalinkSlugInput}`);\n+    if (permalinkInput && permalinkInput.value) {\n+      data[`${this.currentType}_permalink`] = permalinkInput.value;\n+    }\n     return data;\n   }\n+  updatePermalinkUIAfterSave(data = {}) {\n+    if (!this.currentType || !this.popupContainer) {\n+      return;\n+    }\n+    const popup = this.popupContainer.querySelector(BuilderPopup.selectors.popup);\n+    if (!popup) {\n+      return;\n+    }\n+    const slugInput = popup.querySelector(`input[name=\"${this.currentType}_permalink\"], #${this.currentType}_permalink, ${BuilderPopup.selectors.permalinkSlugInput}`);\n+    const permalinkRoot = popup.querySelector(BuilderPopup.selectors.permalinkRoot);\n+    const permalinkPlaceholder = permalinkRoot?.querySelector(BuilderPopup.selectors.permalinkPlaceholder);\n+    const responseSlug = data?.[`${this.currentType}_slug`];\n+    if (slugInput && responseSlug) {\n+      slugInput.value = responseSlug;\n+      slugInput.dataset.originalValue = responseSlug;\n+    }\n+    const responsePermalink = data?.[`${this.currentType}_permalink`];\n+    const isCourseItem = ['lesson', 'quiz'].includes(this.currentType);\n+    const shouldShowUnavailable = data?.permalink_available === false || isCourseItem && (data?.status === 'draft' || data?.status === 'trash' || !responsePermalink);\n+    if (shouldShowUnavailable) {\n+      if (!permalinkRoot) {\n+        return;\n+      }\n+      const permalinkDisplay = permalinkRoot.querySelector(BuilderPopup.selectors.permalinkDisplay);\n+      const label = permalinkRoot.querySelector('.cb-item-edit-permalink__label') || permalinkRoot.querySelector('.cb-permalink-label');\n+      const editor = permalinkRoot.querySelector(BuilderPopup.selectors.permalinkEditor);\n+      let placeholder = permalinkPlaceholder;\n+      if (!placeholder) {\n+        placeholder = document.createElement('span');\n+        placeholder.className = 'cb-item-edit-permalink__placeholder';\n+        if (label) {\n+          label.insertAdjacentElement('afterend', placeholder);\n+        } else {\n+          permalinkRoot.prepend(placeholder);\n+        }\n+      }\n+      placeholder.textContent = data?.permalink_notice || 'Permalink is only available if the item is already assigned to a course.';\n+      placeholder.classList.remove('lp-hidden');\n+      if (permalinkDisplay) {\n+        permalinkDisplay.classList.add('lp-hidden');\n+      }\n+      if (editor) {\n+        editor.classList.add('lp-hidden');\n+      }\n+      return;\n+    }\n+    const urlLink = popup.querySelector(BuilderPopup.selectors.permalinkUrl);\n+    const permalinkDisplay = permalinkRoot?.querySelector(BuilderPopup.selectors.permalinkDisplay);\n+    const baseUrlInput = popup.querySelector(BuilderPopup.selectors.permalinkBaseUrl);\n+    const normalizedBaseUrl = typeof baseUrlInput?.value === 'string' ? baseUrlInput.value : '';\n+    const normalizedSlug = typeof responseSlug === 'string' ? responseSlug.trim() : '';\n+    let permalinkDisplayUrl = '';\n+    if (normalizedBaseUrl && normalizedSlug) {\n+      permalinkDisplayUrl = `${normalizedBaseUrl}${normalizedSlug}`;\n+    } else if (typeof responsePermalink === 'string') {\n+      permalinkDisplayUrl = responsePermalink;\n+    }\n+    if (permalinkPlaceholder) {\n+      permalinkPlaceholder.classList.add('lp-hidden');\n+    }\n+    if (permalinkDisplay) {\n+      permalinkDisplay.classList.remove('lp-hidden');\n+    }\n+    if (urlLink && responsePermalink) {\n+      urlLink.href = responsePermalink;\n+      urlLink.textContent = permalinkDisplayUrl || responsePermalink;\n+    } else if (urlLink && permalinkDisplayUrl) {\n+      urlLink.textContent = permalinkDisplayUrl;\n+    }\n+  }\n \n   \u002F**\n    * Collect form data from form element\n@@ -7342,22 +11058,6 @@\n   }\n \n   \u002F**\n-   * Load active tab assets on initial render\n-   *\u002F\n-  loadActiveTabAssets() {\n-    const popup = this.popupContainer.querySelector(BuilderPopup.selectors.popup);\n-    if (!popup) {\n-      return;\n-    }\n-    const activeTab = popup.querySelector(`${BuilderPopup.selectors.tab}.active`);\n-    const activeTabName = activeTab?.dataset.tab || 'overview';\n-    const activePane = popup.querySelector(`${BuilderPopup.selectors.tabPane}[data-tab=\"${activeTabName}\"]`);\n-    if (activePane) {\n-      this.loadTabAssets(activeTabName, activePane);\n-    }\n-  }\n-\n-  \u002F**\n    * Load tab-specific assets (CSS\u002FJS)\n    *\u002F\n   loadTabAssets(tabName, tabPane) {\n@@ -7411,7 +11111,20 @@\n     if (!BuilderPopup._instance) {\n       BuilderPopup._instance = new BuilderPopup();\n     }\n-    BuilderPopup._instance.loadPopup(type, id);\n+    const selectors = {\n+      lesson: id ? `[data-popup-lesson=\"${id}\"]` : BuilderPopup.selectors.addNewLesson,\n+      quiz: id ? `[data-popup-quiz=\"${id}\"]` : '',\n+      question: id ? `[data-popup-question=\"${id}\"]` : ''\n+    };\n+    const triggerSelector = selectors[type] || (id ? `[data-popup-type=\"${type}\"][data-popup-id=\"${id}\"]` : `[data-popup-type=\"${type}\"][data-template]`);\n+    if (!triggerSelector) {\n+      return;\n+    }\n+    const triggerEl = document.querySelector(triggerSelector);\n+    if (!triggerEl) {\n+      return;\n+    }\n+    BuilderPopup._instance.showPopup(triggerEl, type, id, BuilderPopup._instance.resolveOpenContext(triggerEl));\n   }\n \n   \u002F**\n@@ -7430,13 +11143,13 @@\n });\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (BuilderPopup);\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\"\n \u002F*!*****************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js ***!\n   \\*****************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -7445,32 +11158,287 @@\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n-\u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Fedit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\");\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\u002F* harmony import *\u002F var _builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002Fbuilder-form-state.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\");\n+\n+\n+\n \n \n \n class BuilderEditQuestion {\n   constructor() {\n     this.editQuestion = null;\n+    \u002F\u002F Events use document-level event delegation, so always register them\n+    \u002F\u002F The page context check happens in individual handlers via target.closest()\n+    this.init();\n   }\n   static selectors = {\n     elDataQuestion: '.cb-section__question-edit',\n-    elBtnUpdateQuestion: '.cb-btn-update__question',\n-    elBtnTrashQuestion: '.cb-btn-trash__question',\n+    elBtnUpdateQuestion: '.cb-btn-update',\n+    elBtnDraftQuestion: '.cb-btn-draft',\n+    elBtnDuplicateQuestion: '.cb-btn-duplicate-question',\n+    elBtnTrashQuestion: '.cb-btn-trash',\n+    elBtnMainAction: '.cb-btn-main-action',\n     elQuestionStatus: '.question-status',\n     idTitle: 'title',\n     idDescEditor: 'question_description_editor',\n+    elPublishStatusSelect: '#cb-question-publish-status',\n     elFormSetting: '.lp-form-setting-question',\n+    \u002F\u002F Permalink component\n+    elPermalinkDisplay: '.cb-permalink-display',\n+    elPermalinkEditor: '.cb-permalink-editor',\n+    elPermalinkEditBtn: '.cb-permalink-edit-btn',\n+    elPermalinkOkBtn: '.cb-permalink-ok-btn',\n+    elPermalinkCancelBtn: '.cb-permalink-cancel-btn',\n+    elPermalinkSlugInput: '.cb-permalink-slug-input',\n+    elPermalinkUrl: '.cb-permalink-url',\n+    elPermalinkBaseUrl: '#cb-permalink-base-url',\n     \u002F\u002F Question edit selectors\n     elEditQuestionWrap: '.lp-edit-question-wrap',\n-    elQuestionEditMain: '.lp-question-edit-main'\n+    elQuestionEditMain: '.lp-question-edit-main',\n+    \u002F\u002F Tab handling selectors\n+    elCBHorizontalTabs: '.lp-cb-tabs__item',\n+    elCBTabPanels: '.lp-cb-tab-panel',\n+    \u002F\u002F Dropdown selectors\n+    elDropdownToggle: '.cb-btn-dropdown-toggle',\n+    elDropdownMenu: '.cb-dropdown-menu',\n+    elDropdownItem: '.cb-dropdown-item',\n+    elHeaderActionsDropdown: '.cb-header-actions-dropdown',\n+    elQuestionActionExpanded: '.course-action-expanded'\n   };\n   init() {\n     this.initQuestionAnswersSettings();\n+    this.initTabs();\n+    this.initHeaderActionsDropdown();\n+    this.syncHeaderActionWithPublishPanel();\n     this.events();\n   }\n \n   \u002F**\n+   * Initialize header actions dropdown (toggle behavior)\n+   *\u002F\n+  initHeaderActionsDropdown() {\n+    \u002F\u002F Close dropdown when clicking outside\n+    document.addEventListener('click', e => {\n+      const dropdown = document.querySelector(BuilderEditQuestion.selectors.elHeaderActionsDropdown);\n+      if (dropdown && !dropdown.contains(e.target)) {\n+        const menu = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownMenu);\n+        const toggle = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownToggle);\n+        if (menu) {\n+          menu.classList.remove('is-open');\n+        }\n+        if (toggle) {\n+          toggle.setAttribute('aria-expanded', 'false');\n+        }\n+      }\n+    });\n+  }\n+\n+  \u002F**\n+   * Handle dropdown toggle click\n+   *\u002F\n+  handleDropdownToggle(args) {\n+    if (this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const toggleBtn = target.closest(BuilderEditQuestion.selectors.elDropdownToggle);\n+    if (!toggleBtn) {\n+      return;\n+    }\n+    const dropdown = toggleBtn.closest(BuilderEditQuestion.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) {\n+      return;\n+    }\n+    const menu = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownMenu);\n+    if (menu) {\n+      menu.classList.toggle('is-open');\n+      const isOpen = menu.classList.contains('is-open');\n+      toggleBtn.setAttribute('aria-expanded', isOpen ? 'true' : 'false');\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle dropdown item click (Save Draft, Publish from dropdown menu)\n+   *\u002F\n+  handleDropdownItemClick(args) {\n+    \u002F\u002F Context check: only handle if on question edit page\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    if (this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const dropdownItem = target.closest(BuilderEditQuestion.selectors.elDropdownItem);\n+    if (!dropdownItem) {\n+      return;\n+    }\n+\n+    \u002F\u002F Skip if this is trash button - it has its own handler\n+    if (dropdownItem.classList.contains('cb-btn-trash') || dropdownItem.classList.contains('cb-btn-duplicate-question')) {\n+      return;\n+    }\n+    const status = dropdownItem.dataset.status;\n+    if (!status) {\n+      return;\n+    }\n+\n+    \u002F\u002F Close the dropdown menu\n+    const menu = dropdownItem.closest(BuilderEditQuestion.selectors.elDropdownMenu);\n+    if (menu) {\n+      menu.classList.remove('is-open');\n+    }\n+\n+    \u002F\u002F Save with the specified status\n+    this.saveQuestionWithStatus(dropdownItem, status);\n+  }\n+\n+  \u002F**\n+   * Save question with specified status (publish\u002Fdraft)\n+   * @param {HTMLElement} btnEl - The button element that was clicked\n+   * @param {string} status - The status to save (publish\u002Fdraft)\n+   *\u002F\n+  async saveQuestionWithStatus(btnEl, status) {\n+    const canContinue = await this.confirmUnpublishIfNeeded(status, btnEl);\n+    if (!canContinue) {\n+      return;\n+    }\n+\n+    \u002F\u002F Validate title before saving\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnEl, 1);\n+    const questionData = this.getQuestionDataForUpdate();\n+    const dataSend = {\n+      ...questionData,\n+      action: 'builder_update_question',\n+      args: {\n+        id_url: 'builder-update-question'\n+      },\n+      question_status: status\n+    };\n+    if (typeof lpQuestionBuilder !== 'undefined' && lpQuestionBuilder.nonce) {\n+      dataSend.nonce = lpQuestionBuilder.nonce;\n+    }\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status: respStatus,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, respStatus);\n+        if (respStatus === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons(data?.status || status);\n+          this.syncPublishPanelStatus(data?.status || status);\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.question_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.question_id_new}\u002F`);\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+            if (elStatus) {\n+              elStatus.className = 'question-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.question-item[data-question-id=\"${questionData.question_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuestion = curriculumItem.closest('.question');\n+                if (elCurriculumQuestion) {\n+                  elCurriculumQuestion.remove();\n+                }\n+              }\n+            }\n+          }\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnEl, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Initialize horizontal tabs for client-side tab switching\n+   *\u002F\n+  initTabs() {\n+    const tabs = document.querySelectorAll(BuilderEditQuestion.selectors.elCBHorizontalTabs);\n+    if (tabs.length === 0) {\n+      return;\n+    }\n+\n+    \u002F\u002F Activate first tab by default if none is active\n+    const activeTab = document.querySelector(`${BuilderEditQuestion.selectors.elCBHorizontalTabs}.is-active`);\n+    if (!activeTab && tabs.length > 0) {\n+      tabs[0].classList.add('is-active');\n+      const section = tabs[0].getAttribute('data-tab-section');\n+      if (section) {\n+        const panel = document.querySelector(`${BuilderEditQuestion.selectors.elCBTabPanels}[data-section=\"${section}\"]`);\n+        if (panel) {\n+          panel.classList.remove('lp-hidden');\n+        }\n+      }\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle horizontal tab click for client-side tab switching\n+   *\u002F\n+  handleTabClick(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    const tabLink = target.closest(BuilderEditQuestion.selectors.elCBHorizontalTabs);\n+    if (!tabLink) {\n+      return;\n+    }\n+    e.preventDefault();\n+    const section = tabLink.getAttribute('data-tab-section');\n+    if (!section) {\n+      return;\n+    }\n+\n+    \u002F\u002F Update active tab\n+    const allTabs = document.querySelectorAll(BuilderEditQuestion.selectors.elCBHorizontalTabs);\n+    allTabs.forEach(tab => tab.classList.remove('is-active'));\n+    tabLink.classList.add('is-active');\n+    const url = new URL(window.location.href);\n+    url.searchParams.set('tab', section);\n+    window.history.replaceState({}, '', url);\n+\n+    \u002F\u002F Show\u002Fhide panels\n+    const allPanels = document.querySelectorAll(BuilderEditQuestion.selectors.elCBTabPanels);\n+    allPanels.forEach(panel => {\n+      if (panel.getAttribute('data-section') === section) {\n+        panel.classList.remove('lp-hidden');\n+      } else {\n+        panel.classList.add('lp-hidden');\n+      }\n+    });\n+  }\n+\n+  \u002F**\n    * Initialize Question Answers Settings\n    * This will init EditQuestion class for the question answer management\n    *\u002F\n@@ -7478,7 +11446,7 @@\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady(BuilderEditQuestion.selectors.elQuestionEditMain, elQuestionEditMain => {\n       \u002F\u002F Initialize EditQuestion for question answer editing\n       if (!this.editQuestion) {\n-        this.editQuestion = new lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_2__.EditQuestion();\n+        this.editQuestion = new lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_3__.EditQuestion();\n         this.editQuestion.init();\n       }\n \n@@ -7503,7 +11471,7 @@\n    * Re-initialize for popup context\n    * This is called when popup is opened multiple times to ensure\n    * TinyMCE and other handlers are properly re-initialized\n-   * \n+   *\n    * @param {HTMLElement} container - The popup container element\n    *\u002F\n   reinit(container) {\n@@ -7534,7 +11502,7 @@\n     }\n \n     \u002F\u002F Create fresh EditQuestion instance\n-    this.editQuestion = new lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_2__.EditQuestion();\n+    this.editQuestion = new lpAssetsJsPath_admin_edit_question_js__WEBPACK_IMPORTED_MODULE_3__.EditQuestion();\n     this.editQuestion.init();\n \n     \u002F\u002F Re-init sortable and TinyMCE\n@@ -7553,15 +11521,149 @@\n     }\n     BuilderEditQuestion._loadedEvents = true;\n     lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n-      selector: BuilderEditQuestion.selectors.elBtnUpdateQuestion,\n+      selector: BuilderEditQuestion.selectors.elBtnMainAction,\n       class: this,\n       callBack: this.updateQuestion.name\n     }, {\n+      selector: BuilderEditQuestion.selectors.elBtnDraftQuestion,\n+      class: this,\n+      callBack: this.saveDraftQuestion.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elBtnDuplicateQuestion,\n+      class: this,\n+      callBack: this.duplicateQuestion.name\n+    }, {\n       selector: BuilderEditQuestion.selectors.elBtnTrashQuestion,\n       class: this,\n       callBack: this.trashQuestion.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elCBHorizontalTabs,\n+      class: this,\n+      callBack: this.handleTabClick.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elDropdownToggle,\n+      class: this,\n+      callBack: this.handleDropdownToggle.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elDropdownItem,\n+      class: this,\n+      callBack: this.handleDropdownItemClick.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elPermalinkEditBtn,\n+      class: this,\n+      callBack: this.handlePermalinkEdit.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elPermalinkOkBtn,\n+      class: this,\n+      callBack: this.handlePermalinkOk.name\n+    }, {\n+      selector: BuilderEditQuestion.selectors.elPermalinkCancelBtn,\n+      class: this,\n+      callBack: this.handlePermalinkCancel.name\n+    }]);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('change', [{\n+      selector: BuilderEditQuestion.selectors.elPublishStatusSelect,\n+      class: this,\n+      callBack: this.handlePublishStatusChange.name\n     }]);\n   }\n+  handlePublishStatusChange() {\n+    this.syncHeaderActionWithPublishPanel();\n+    (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n+  }\n+\n+  \u002F**\n+   * Validate title is not empty before update\n+   * @return {boolean} True if valid, false if invalid\n+   *\u002F\n+  validateTitleBeforeUpdate() {\n+    const titleInput = document.getElementById(BuilderEditQuestion.selectors.idTitle);\n+    if (!titleInput) {\n+      return true;\n+    }\n+    const title = titleInput.value.trim();\n+    if (!title) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('Question title is required.', 'error');\n+      titleInput.focus();\n+      return false;\n+    }\n+    return true;\n+  }\n+\n+  \u002F**\n+   * Update action buttons after status change, matching course edit logic.\n+   * Updates both main button and dropdown items based on new status.\n+   * @param {string} newStatus - The new question status\n+   *\u002F\n+  updateActionButtons(newStatus) {\n+    const dropdown = document.querySelector(BuilderEditQuestion.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) return;\n+    const mainBtn = dropdown.querySelector('.cb-btn-main-action');\n+    const dropdownMenu = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownMenu);\n+    if (!mainBtn) return;\n+    if (this.hasPublishDrivenSingleAction()) {\n+      this.syncHeaderActionWithPublishPanel();\n+      return;\n+    }\n+    if (!dropdownMenu) return;\n+\n+    \u002F\u002F Status configuration for button labels and classes\n+    const statusConfig = {\n+      publish: {\n+        mainLabel: mainBtn.dataset.titleUpdate || 'Update',\n+        mainClass: 'cb-btn-update',\n+        mainStatus: 'publish',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      draft: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        dropdownClass: 'cb-btn-publish',\n+        dropdownStatus: 'publish',\n+        dropdownIcon: 'dashicons-visibility'\n+      },\n+      pending: {\n+        mainLabel: 'Submit for Review',\n+        mainClass: 'cb-btn-pending',\n+        mainStatus: 'pending',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      }\n+    };\n+    const config = statusConfig[newStatus] || statusConfig.draft;\n+\n+    \u002F\u002F Update main button\n+    mainBtn.className = `${config.mainClass} cb-btn-primary cb-btn-main-action`;\n+    mainBtn.dataset.status = config.mainStatus;\n+    mainBtn.textContent = config.mainLabel;\n+\n+    \u002F\u002F Update dropdown item (first item, excluding trash)\n+    const dropdownItems = dropdownMenu.querySelectorAll('.cb-dropdown-item:not(.cb-btn-trash)');\n+    if (dropdownItems.length > 0) {\n+      const firstItem = dropdownItems[0];\n+      firstItem.className = `cb-dropdown-item ${config.dropdownClass}`;\n+      firstItem.dataset.status = config.dropdownStatus;\n+      firstItem.innerHTML = `\u003Cspan class=\"dashicons ${config.dropdownIcon}\">\u003C\u002Fspan>${config.dropdownLabel}`;\n+    }\n+\n+    \u002F\u002F Update dropdown data-current-status\n+    dropdown.dataset.currentStatus = newStatus;\n+  }\n+\n+  \u002F**\n+   * Check if we're in question edit context\n+   * @return {boolean}\n+   *\u002F\n+  isQuestionContext() {\n+    return !!document.querySelector(BuilderEditQuestion.selectors.elDataQuestion);\n+  }\n   getQuestionDataForUpdate() {\n     const data = {};\n     const wrapperEl = document.querySelector(BuilderEditQuestion.selectors.elDataQuestion);\n@@ -7576,6 +11678,10 @@\n         data.question_description = editor.getContent();\n       }\n     }\n+    const permalinkInput = document.querySelector(BuilderEditQuestion.selectors.elPermalinkSlugInput);\n+    if (permalinkInput && permalinkInput.value) {\n+      data.question_permalink = permalinkInput.value;\n+    }\n     const elFormSetting = document.querySelector(BuilderEditQuestion.selectors.elFormSetting);\n     if (elFormSetting) {\n       data.question_settings = true;\n@@ -7627,15 +11733,177 @@\n     }\n     return data;\n   }\n-  updateQuestion(args) {\n+  getStatusFromPublishPanel(fallbackStatus = 'publish') {\n+    const statusSelect = document.querySelector(BuilderEditQuestion.selectors.elPublishStatusSelect);\n+    if (!statusSelect) {\n+      return fallbackStatus;\n+    }\n+    const selectedStatus = statusSelect.value;\n+    if (selectedStatus === 'publish' || selectedStatus === 'draft') {\n+      return selectedStatus;\n+    }\n+    return fallbackStatus;\n+  }\n+  hasPublishDrivenSingleAction() {\n+    if (!document.querySelector(BuilderEditQuestion.selectors.elPublishStatusSelect)) {\n+      return false;\n+    }\n+    const wrapperEl = document.querySelector(BuilderEditQuestion.selectors.elDataQuestion);\n+    const questionId = wrapperEl ? parseInt(wrapperEl.dataset.questionId) || 0 : 0;\n+    return questionId > 0;\n+  }\n+  syncHeaderActionWithPublishPanel() {\n+    if (!this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const dropdown = document.querySelector(BuilderEditQuestion.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) {\n+      return;\n+    }\n+    const mainBtn = dropdown.querySelector('.cb-btn-main-action');\n+    if (!mainBtn) {\n+      return;\n+    }\n+    const toggleBtn = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownToggle);\n+    const dropdownMenu = dropdown.querySelector(BuilderEditQuestion.selectors.elDropdownMenu);\n+    const status = this.getStatusFromPublishPanel(mainBtn.dataset.status || 'publish');\n+    mainBtn.classList.remove('cb-btn-darft', 'cb-btn-publish', 'cb-btn-pending');\n+    mainBtn.classList.add('cb-btn-update', 'cb-btn-primary', 'cb-btn-main-action');\n+    mainBtn.textContent = mainBtn.dataset.titleUpdate || 'Update';\n+    mainBtn.dataset.status = status;\n+    dropdown.dataset.currentStatus = status;\n+    dropdown.classList.add('cb-header-actions-dropdown--single');\n+    if (toggleBtn) {\n+      toggleBtn.style.display = 'none';\n+    }\n+    if (dropdownMenu) {\n+      dropdownMenu.style.display = 'none';\n+    }\n+  }\n+  syncPublishPanelStatus(status) {\n+    const statusSelect = document.querySelector(BuilderEditQuestion.selectors.elPublishStatusSelect);\n+    if (!statusSelect) {\n+      return;\n+    }\n+    statusSelect.value = status === 'publish' ? 'publish' : 'draft';\n+    this.syncHeaderActionWithPublishPanel();\n+  }\n+  updatePermalinkUIAfterSave(data = {}) {\n+    const slugInput = document.querySelector(BuilderEditQuestion.selectors.elPermalinkSlugInput);\n+    const urlLink = document.querySelector(BuilderEditQuestion.selectors.elPermalinkUrl);\n+    const baseUrlInput = document.querySelector(BuilderEditQuestion.selectors.elPermalinkBaseUrl);\n+    const permalinkDisplayUrl = this.buildPermalinkDisplayUrl(baseUrlInput ? baseUrlInput.value : '', data?.question_slug, data?.question_permalink);\n+    if (slugInput && data?.question_slug) {\n+      slugInput.value = data.question_slug;\n+      slugInput.dataset.originalValue = data.question_slug;\n+    }\n+    if (urlLink && data?.question_permalink) {\n+      urlLink.href = data.question_permalink;\n+      urlLink.textContent = permalinkDisplayUrl || data.question_permalink;\n+    } else if (urlLink && permalinkDisplayUrl) {\n+      urlLink.textContent = permalinkDisplayUrl;\n+    }\n+  }\n+  slugify(str) {\n+    return (str || '').toString().normalize('NFD').replace(\u002F[\\u0300-\\u036f]\u002Fg, '').replace(\u002Fđ\u002Fg, 'd').replace(\u002FĐ\u002Fg, 'D').toLowerCase().replace(\u002F\\s+\u002Fg, '-').replace(\u002F[^\\w-]+\u002Fg, '').replace(\u002F--+\u002Fg, '-').replace(\u002F^-+\u002F, '').replace(\u002F-+$\u002F, '');\n+  }\n+  buildPermalinkDisplayUrl(baseUrl = '', slug = '', fallbackUrl = '') {\n+    const normalizedBaseUrl = typeof baseUrl === 'string' ? baseUrl : '';\n+    const normalizedSlug = typeof slug === 'string' ? slug.trim() : '';\n+    if (normalizedBaseUrl && normalizedSlug) {\n+      return `${normalizedBaseUrl}${normalizedSlug}`;\n+    }\n+    return typeof fallbackUrl === 'string' ? fallbackUrl : '';\n+  }\n+  handlePermalinkEdit(args) {\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditQuestion.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditQuestion.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditQuestion.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) return;\n+    input.dataset.originalValue = input.value;\n+    display.classList.add('lp-hidden');\n+    editor.classList.remove('lp-hidden');\n+    input.focus();\n+    input.select();\n+  }\n+  handlePermalinkOk(args) {\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditQuestion.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditQuestion.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditQuestion.selectors.elPermalinkSlugInput);\n+    const urlLink = document.querySelector(BuilderEditQuestion.selectors.elPermalinkUrl);\n+    const baseUrlInput = document.querySelector(BuilderEditQuestion.selectors.elPermalinkBaseUrl);\n+    if (!display || !editor || !input || !urlLink) return;\n+    let newSlug = this.slugify(input.value.trim());\n+    if (!newSlug) {\n+      newSlug = input.dataset.originalValue || 'question';\n+    }\n+    input.value = newSlug;\n+    const baseUrl = baseUrlInput ? baseUrlInput.value : '';\n+    const newUrl = this.buildPermalinkDisplayUrl(baseUrl, newSlug, urlLink.textContent || '');\n+\n+    \u002F\u002F Keep href as the current saved link and only update display text.\n+    urlLink.textContent = newUrl;\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+    if (newSlug !== input.dataset.originalValue) {\n+      (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n+    }\n+  }\n+  handlePermalinkCancel(args) {\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    const {\n+      e\n+    } = args;\n+    if (e) e.preventDefault();\n+    const display = document.querySelector(BuilderEditQuestion.selectors.elPermalinkDisplay);\n+    const editor = document.querySelector(BuilderEditQuestion.selectors.elPermalinkEditor);\n+    const input = document.querySelector(BuilderEditQuestion.selectors.elPermalinkSlugInput);\n+    if (!display || !editor || !input) return;\n+    input.value = input.dataset.originalValue || '';\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+  }\n+  async updateQuestion(args) {\n+    \u002F\u002F Context check: only handle if on question edit page\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n     const {\n       target\n     } = args;\n-    const elBtnUpdateQuestion = target.closest(BuilderEditQuestion.selectors.elBtnUpdateQuestion);\n-    if (!elBtnUpdateQuestion) {\n+    const elBtnMainAction = target.closest(BuilderEditQuestion.selectors.elBtnMainAction);\n+    if (!elBtnMainAction) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnUpdateQuestion, 1);\n+\n+    \u002F\u002F Validate title before update\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+\n+    \u002F\u002F Resolve status from Overview publish panel first, fallback to button data-status.\n+    const targetStatus = this.getStatusFromPublishPanel(elBtnMainAction.dataset.status || 'publish');\n+    const canContinue = await this.confirmUnpublishIfNeeded(targetStatus, elBtnMainAction);\n+    if (!canContinue) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnMainAction, 1);\n     const questionData = this.getQuestionDataForUpdate();\n     const dataSend = {\n       ...questionData,\n@@ -7643,7 +11911,7 @@\n       args: {\n         id_url: 'builder-update-question'\n       },\n-      question_status: 'publish'\n+      question_status: targetStatus\n     };\n     if (typeof lpQuestionBuilder !== 'undefined' && lpQuestionBuilder.nonce) {\n       dataSend.nonce = lpQuestionBuilder.nonce;\n@@ -7656,18 +11924,156 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.button_title) {\n-          elBtnUpdateQuestion.textContent = data.button_title;\n-        }\n-        if (data?.question_id_new) {\n-          const currentUrl = window.location.href;\n-          window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.question_id_new}\u002F`);\n+        if (status === 'success') {\n+          \u002F\u002F Update action button text with actual status from server\n+          this.updateActionButtons(data?.status || targetStatus);\n+          this.syncPublishPanelStatus(data?.status || targetStatus);\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.redirect_url) {\n+            window.location.href = data.redirect_url;\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+            if (elStatus) {\n+              elStatus.className = 'question-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.question-item[data-question-id=\"${questionData.question_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuestion = curriculumItem.closest('.question');\n+                if (elCurriculumQuestion) {\n+                  elCurriculumQuestion.remove();\n+                }\n+              }\n+            }\n+          }\n         }\n-        if (data?.status) {\n-          const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n-          if (elStatus) {\n-            elStatus.className = 'question-status ' + data.status;\n-            elStatus.textContent = data.status;\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnMainAction, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  async confirmUnpublishIfNeeded(targetStatus, triggerEl) {\n+    if (targetStatus !== 'draft') {\n+      return true;\n+    }\n+    const statusEl = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+    const isPublished = statusEl && statusEl.classList.contains('publish');\n+    if (!isPublished) {\n+      return true;\n+    }\n+    const confirmMsg = triggerEl?.dataset?.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: confirmMsg,\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    return !!result.isConfirmed;\n+  }\n+  async saveDraftQuestion(args) {\n+    \u002F\u002F Context check: only handle if on question edit page\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDraftQuestion = target.closest(BuilderEditQuestion.selectors.elBtnDraftQuestion);\n+    if (!elBtnDraftQuestion) {\n+      return;\n+    }\n+\n+    \u002F\u002F Check if published to show confirm unpublish modal\n+    const statusEl = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+    const isPublished = statusEl && statusEl.classList.contains('publish');\n+    if (isPublished) {\n+      const confirmMsg = elBtnDraftQuestion.dataset.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+      const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+        title: confirmMsg,\n+        iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+        customClass: {\n+          icon: 'lp-cb-swal-icon-html'\n+        },\n+        showCloseButton: true,\n+        showCancelButton: true,\n+        cancelButtonText: lpData.i18n.cancel,\n+        confirmButtonText: lpData.i18n.yes,\n+        reverseButtons: true\n+      });\n+      if (!result.isConfirmed) {\n+        return;\n+      }\n+    }\n+\n+    \u002F\u002F Validate title before saving draft\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+    const elActionExpanded = document.querySelector(BuilderEditQuestion.selectors.elQuestionActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+    const questionData = this.getQuestionDataForUpdate();\n+    const dataSend = {\n+      ...questionData,\n+      action: 'builder_update_question',\n+      args: {\n+        id_url: 'builder-update-question'\n+      },\n+      question_status: 'draft'\n+    };\n+    if (typeof lpQuestionBuilder !== 'undefined' && lpQuestionBuilder.nonce) {\n+      dataSend.nonce = lpQuestionBuilder.nonce;\n+    }\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons('draft');\n+          this.syncPublishPanelStatus(data?.status || 'draft');\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.question_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.question_id_new}\u002F`);\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+            if (elStatus) {\n+              elStatus.className = 'question-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.question-item[data-question-id=\"${questionData.question_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuestion = curriculumItem.closest('.question');\n+                if (elCurriculumQuestion) {\n+                  elCurriculumQuestion.remove();\n+                }\n+              }\n+            }\n           }\n         }\n       },\n@@ -7675,12 +12081,16 @@\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnUpdateQuestion, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n-  trashQuestion(args) {\n+  async trashQuestion(args) {\n+    \u002F\u002F Context check: only handle if on question edit page\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n     const {\n       target\n     } = args;\n@@ -7688,7 +12098,23 @@\n     if (!elBtnTrashQuestion) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnTrashQuestion, 1);\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: 'Are you sure you want to trash this question?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n+      return;\n+    }\n+    const elActionExpanded = document.querySelector(BuilderEditQuestion.selectors.elQuestionActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const questionData = this.getQuestionDataForUpdate();\n     const dataSend = {\n       action: 'move_trash_question',\n@@ -7705,17 +12131,25 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.button_title) {\n-          const elBtnUpdateQuestion = document.querySelector(BuilderEditQuestion.selectors.elBtnUpdateQuestion);\n-          if (elBtnUpdateQuestion) {\n-            elBtnUpdateQuestion.textContent = data.button_title;\n+        if (status === 'success') {\n+          if (data?.redirect_url) {\n+            window.location.href = data.redirect_url;\n           }\n-        }\n-        if (data?.status) {\n-          const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n-          if (elStatus) {\n-            elStatus.className = 'question-status ' + data.status;\n-            elStatus.textContent = data.status;\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderEditQuestion.selectors.elQuestionStatus);\n+            if (elStatus) {\n+              elStatus.className = 'question-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.question-item[data-question-id=\"${questionData.question_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuestion = curriculumItem.closest('.question');\n+                if (elCurriculumQuestion) {\n+                  elCurriculumQuestion.remove();\n+                }\n+              }\n+            }\n           }\n         }\n       },\n@@ -7723,20 +12157,83 @@\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnTrashQuestion, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  async duplicateQuestion(args) {\n+    \u002F\u002F Context check: only handle if on question edit page\n+    if (!this.isQuestionContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDuplicateQuestion = target.closest(BuilderEditQuestion.selectors.elBtnDuplicateQuestion);\n+    if (!elBtnDuplicateQuestion) {\n+      return;\n+    }\n+    const questionData = this.getQuestionDataForUpdate();\n+    const questionId = parseInt(questionData?.question_id, 10) || 0;\n+    if (!questionId) {\n+      return;\n+    }\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elBtnDuplicateQuestion.dataset.title || 'Are you sure?',\n+      text: elBtnDuplicateQuestion.dataset.content || 'Are you sure you want to duplicate this question?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n+      return;\n+    }\n+    const elActionExpanded = document.querySelector(BuilderEditQuestion.selectors.elQuestionActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+    const dataSend = {\n+      action: 'duplicate_question',\n+      args: {\n+        id_url: 'duplicate-question'\n+      },\n+      question_id: questionId\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+        if (status === 'success' && data?.redirect_url) {\n+          window.location.href = data.redirect_url;\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js\"\n \u002F*!****************************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js ***!\n   \\****************************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -7747,6 +12244,8 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\n \n \n \n@@ -7759,10 +12258,12 @@\n     elQuestionExpandedItems: '.question-action-expanded__items',\n     elQuestionDuplicate: '.question-action-expanded__duplicate',\n     elQuestionTrash: '.question-action-expanded__trash',\n+    elQuestionRestore: '.question-action-expanded__restore',\n     elQuestionPublish: '.question-action-expanded__publish',\n     elQuestionDelete: '.question-action-expanded__delete',\n     elQuestionActionExpanded: '.question-action-expanded',\n-    elQuestionStatus: '.question-status'\n+    elQuestionStatus: '.question-status',\n+    elBtnEditQuestion: '.btn-edit-question'\n   };\n   init() {\n     this.events();\n@@ -7785,6 +12286,10 @@\n       class: this,\n       callBack: this.publishQuestion.name\n     }, {\n+      selector: BuilderTabQuestion.selectors.elQuestionRestore,\n+      class: this,\n+      callBack: this.restoreQuestion.name\n+    }, {\n       selector: BuilderTabQuestion.selectors.elQuestionDelete,\n       class: this,\n       callBack: this.deleteQuestion.name\n@@ -7792,6 +12297,10 @@\n       selector: BuilderTabQuestion.selectors.elQuestionActionExpanded,\n       class: this,\n       callBack: this.toggleExpandedAction.name\n+    }, {\n+      selector: BuilderTabQuestion.selectors.elBtnEditQuestion,\n+      class: this,\n+      callBack: this.editQuestion.name\n     }]);\n     document.addEventListener('click', e => {\n       if (!e.target.closest(BuilderTabQuestion.selectors.elQuestionActionExpanded)) {\n@@ -7799,6 +12308,16 @@\n       }\n     });\n   }\n+  editQuestion(args) {\n+    const {\n+      target\n+    } = args;\n+    const elBtnEditQuestion = target.closest(BuilderTabQuestion.selectors.elBtnEditQuestion);\n+    if (!elBtnEditQuestion) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnEditQuestion, 1);\n+  }\n   duplicateQuestion(args) {\n     const {\n       target\n@@ -7808,47 +12327,52 @@\n     if (!elQuestionItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionDuplicate, 1);\n+    const elActionExpanded = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n     const questionId = elQuestionItem.dataset.questionId || '';\n-    const dataSend = {\n-      action: 'duplicate_question',\n-      args: {\n-        id_url: 'duplicate-question'\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elQuestionDuplicate.dataset.title || 'Duplicate Question',\n+      text: elQuestionDuplicate.dataset.content || 'Are you sure you want to duplicate this question?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n       },\n-      question_id: questionId\n-    };\n-    const callBack = {\n-      success: response => {\n-        const {\n-          status,\n-          message,\n-          data\n-        } = response;\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.html) {\n-          const elQuestion = elQuestionDuplicate.closest('.question');\n-          elQuestion.insertAdjacentHTML('afterend', data.html);\n-          const newQuestion = elQuestion.nextElementSibling;\n-          if (newQuestion) {\n-            newQuestion.scrollIntoView({\n-              behavior: 'smooth',\n-              block: 'nearest'\n-            });\n-            newQuestion.classList.add('highlight-new-question');\n-            setTimeout(() => {\n-              newQuestion.classList.remove('highlight-new-question');\n-            }, 1500);\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'duplicate_question',\n+          args: {\n+            id_url: 'duplicate-question'\n+          },\n+          question_id: questionId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+            if (status === 'success' && data?.redirect_url) {\n+              window.location.href = data.redirect_url;\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n-        }\n-      },\n-      error: error => {\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n-      },\n-      completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionDuplicate, 0);\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n       }\n-    };\n-    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    });\n   }\n   trashQuestion(args) {\n     const {\n@@ -7859,14 +12383,72 @@\n     if (!elQuestionItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionTrash, 1);\n+    const elActionExpanded = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n+    const questionId = elQuestionItem.dataset.questionId || '';\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elQuestionTrash.dataset.title || 'Trash Question',\n+      text: elQuestionTrash.dataset.content || 'Are you sure you want to move this question to trash?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'move_trash_question',\n+          args: {\n+            id_url: 'move-trash-question'\n+          },\n+          question_id: questionId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+            if (data?.html) {\n+              this.replaceItemHtml(elQuestionTrash.closest('.question'), data.html);\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n+          }\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+      }\n+    });\n+  }\n+  publishQuestion(args) {\n+    const {\n+      target\n+    } = args;\n+    const elQuestionPublish = target.closest(BuilderTabQuestion.selectors.elQuestionPublish);\n+    const elQuestionItem = elQuestionPublish.closest(BuilderTabQuestion.selectors.elQuestionItem);\n+    if (!elQuestionItem) {\n+      return;\n+    }\n+    const elActionExpanded = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const questionId = elQuestionItem.dataset.questionId || '';\n     const dataSend = {\n       action: 'move_trash_question',\n       args: {\n         id_url: 'move-trash-question'\n       },\n-      question_id: questionId\n+      question_id: questionId,\n+      status: 'publish'\n     };\n     const callBack = {\n       success: response => {\n@@ -7876,30 +12458,30 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elQuestion = elQuestionTrash.closest('.question');\n-          this.updateStatusUI(elQuestion, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elQuestionPublish.closest('.question'), data.html);\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionTrash, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n-  publishQuestion(args) {\n+  restoreQuestion(args) {\n     const {\n       target\n     } = args;\n-    const elQuestionPublish = target.closest(BuilderTabQuestion.selectors.elQuestionPublish);\n-    const elQuestionItem = elQuestionPublish.closest(BuilderTabQuestion.selectors.elQuestionItem);\n+    const elQuestionRestore = target.closest(BuilderTabQuestion.selectors.elQuestionRestore);\n+    const elQuestionItem = elQuestionRestore.closest(BuilderTabQuestion.selectors.elQuestionItem);\n     if (!elQuestionItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionPublish, 1);\n+    const elActionExpanded = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const questionId = elQuestionItem.dataset.questionId || '';\n     const dataSend = {\n       action: 'move_trash_question',\n@@ -7907,7 +12489,7 @@\n         id_url: 'move-trash-question'\n       },\n       question_id: questionId,\n-      status: 'publish'\n+      status: 'draft'\n     };\n     const callBack = {\n       success: response => {\n@@ -7917,16 +12499,15 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elQuestion = elQuestionPublish.closest('.question');\n-          this.updateStatusUI(elQuestion, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elQuestionRestore.closest('.question'), data.html);\n         }\n       },\n       error: error => {\n-        this.showToast(error.message || error, 'error');\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuestionPublish, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -7940,14 +12521,18 @@\n     if (!elQuestionItem) {\n       return;\n     }\n+    const elActionExpanded = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n     const questionId = elQuestionItem.dataset.questionId || '';\n     if (!questionId) {\n       return;\n     }\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n-      title: elQuestionDelete.dataset.title,\n-      text: elQuestionDelete.dataset.content,\n-      icon: 'warning',\n+      title: elQuestionDelete.dataset.title || 'Delete Question',\n+      text: elQuestionDelete.dataset.content || 'Are you sure you want to permanently delete this question?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DELETE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n       showCloseButton: true,\n       showCancelButton: true,\n       cancelButtonText: lpData.i18n.cancel,\n@@ -7955,6 +12540,7 @@\n       reverseButtons: true\n     }).then(result => {\n       if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n         const dataSend = {\n           action: 'move_trash_question',\n           args: {\n@@ -7970,16 +12556,21 @@\n               message\n             } = response;\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-            const elQuestion = elQuestionDelete.closest('.question');\n-            elQuestion.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n-            elQuestion.style.opacity = '0';\n-            elQuestion.style.transform = 'translateX(160px)';\n-            setTimeout(() => {\n-              elQuestion.remove();\n-            }, 400);\n+            if (status === 'success') {\n+              const elQuestion = elQuestionDelete.closest('.question');\n+              elQuestion.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n+              elQuestion.style.opacity = '0';\n+              elQuestion.style.transform = 'translateX(160px)';\n+              setTimeout(() => {\n+                elQuestion.remove();\n+              }, 400);\n+            }\n           },\n           error: error => {\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n         };\n         window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -7991,14 +12582,28 @@\n       target\n     } = args;\n     const elQuestionActionExpanded = target.closest(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n+    if (!elQuestionActionExpanded) {\n+      return;\n+    }\n     const elQuestionItem = elQuestionActionExpanded.closest(BuilderTabQuestion.selectors.elQuestionItem);\n+    if (!elQuestionItem) {\n+      return;\n+    }\n     const elExpandedItems = elQuestionItem.querySelector(BuilderTabQuestion.selectors.elQuestionExpandedItems);\n     if (!elExpandedItems) {\n       return;\n     }\n     this.closeAllExpanded(elExpandedItems);\n-    elExpandedItems.classList.toggle('active');\n-    elQuestionActionExpanded.classList.toggle('active');\n+    const willOpen = !elExpandedItems.classList.contains('active');\n+    if (willOpen) {\n+      elExpandedItems.classList.add('active');\n+      elQuestionActionExpanded.classList.add('active');\n+      this.setExpandedDirection(elExpandedItems);\n+    } else {\n+      elExpandedItems.classList.remove('active');\n+      elExpandedItems.classList.remove('is-dropup');\n+      elQuestionActionExpanded.classList.remove('active');\n+    }\n   }\n   closeAllExpanded(excludeElement = null) {\n     const allExpandedItems = document.querySelectorAll(`${BuilderTabQuestion.selectors.elQuestionExpandedItems}.active`);\n@@ -8007,33 +12612,50 @@\n         return;\n       }\n       item.classList.remove('active');\n+      item.classList.remove('is-dropup');\n       const questionItem = item.closest(BuilderTabQuestion.selectors.elQuestionItem);\n+      if (!questionItem) {\n+        return;\n+      }\n       const expandedBtn = questionItem.querySelector(BuilderTabQuestion.selectors.elQuestionActionExpanded);\n       if (expandedBtn) {\n         expandedBtn.classList.remove('active');\n       }\n     });\n   }\n-  updateStatusUI(elQuestion, status) {\n-    const elStatus = elQuestion.querySelector(BuilderTabQuestion.selectors.elQuestionStatus);\n-    const elSpanStatus = elQuestion.querySelector(`${BuilderTabQuestion.selectors.elQuestionStatus} span`);\n-    if (elSpanStatus && elStatus) {\n-      elStatus.className = 'question-status ' + status;\n-      elSpanStatus.textContent = status;\n-    } else if (elStatus) {\n-      elStatus.className = 'question-status ' + status;\n-      elStatus.textContent = status;\n+  setExpandedDirection(elExpandedItems) {\n+    if (!elExpandedItems) {\n+      return;\n+    }\n+    elExpandedItems.classList.remove('is-dropup');\n+    const elQuestion = elExpandedItems.closest('.question');\n+    if (!elQuestion) {\n+      return;\n+    }\n+    if (elQuestion.matches(':last-child')) {\n+      elExpandedItems.classList.add('is-dropup');\n+    }\n+  }\n+  replaceItemHtml(elQuestion, html) {\n+    if (!elQuestion || !html) {\n+      return;\n+    }\n+    const tmp = document.createElement('div');\n+    tmp.innerHTML = html;\n+    const newEl = tmp.firstElementChild;\n+    if (newEl) {\n+      elQuestion.replaceWith(newEl);\n     }\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\"\n \u002F*!*********************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js ***!\n   \\*********************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -8050,6 +12672,11 @@\n \u002F**\n  * Builder Edit Quiz Handler\n  *\n+ * Important separation note:\n+ * - This file is the Question-tab engine (question CRUD, sorting, TinyMCE, question bank).\n+ * - It is reused in multiple contexts (standalone quiz page and popup quiz editor).\n+ * - Keep this file focused on question-tab internals; page-level save\u002Fpublish flow belongs to BuilderStandaloneQuiz.\n+ *\n  * @since 4.3.0\n  * @version 1.0.0\n  *\u002F\n@@ -9255,13 +13882,1150 @@\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-standalone-quiz.js\"\n+\u002F*!***************************************************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-standalone-quiz.js ***!\n+  \\***************************************************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   BuilderStandaloneQuiz: () => (\u002F* binding *\u002F BuilderStandaloneQuiz)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n+\u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fbuilder-edit-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\");\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\u002F* harmony import *\u002F var _builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! ..\u002Fbuilder-form-state.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\");\n+\u002F**\n+ * Builder Standalone Quiz Handler\n+ * Handles standalone quiz edit page (not popup)\n+ *\n+ * Important separation note:\n+ * - This file handles standalone quiz page orchestration (header actions, publish\u002Fdraft\u002Ftrash, permalink, tabs).\n+ * - Question-tab internals are delegated to BuilderEditQuiz.\n+ * - Do not merge the two responsibilities into one file unless there is a strong architectural reason.\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+\n+\n+\n+\n+\n+\n+\n+class BuilderStandaloneQuiz {\n+  constructor() {\n+    \u002F\u002F BuilderEditQuiz instance for handling Question tab\n+    this.builderEditQuiz = null;\n+    \u002F\u002F Events use document-level event delegation, so always register them\n+    \u002F\u002F The page context check happens in individual handlers via target.closest()\n+    this.init();\n+  }\n+  static selectors = {\n+    \u002F\u002F Context selector - indicates we're on quiz edit page\n+    elDataQuiz: '.cb-section__quiz-edit',\n+    \u002F\u002F Shared header action buttons (generic selectors)\n+    elBtnMainAction: '.cb-btn-main-action',\n+    elBtnUpdate: '.cb-btn-update, .cb-btn-publish',\n+    elBtnDraft: '.cb-btn-darft, .cb-dropdown-item[data-status=\"draft\"]',\n+    elBtnDuplicate: '.cb-btn-duplicate-quiz',\n+    elBtnTrash: '.cb-btn-trash',\n+    \u002F\u002F Status badge\n+    elQuizStatus: '.quiz-status, .quizze-status',\n+    \u002F\u002F Form fields\n+    idTitle: 'title',\n+    idDescEditor: 'quiz_description_editor',\n+    elPublishStatusSelect: '#cb-quiz-publish-status',\n+    elFormSetting: '.lp-form-setting-quiz',\n+    \u002F\u002F Permalink component\n+    elPermalinkDisplay: '.cb-permalink-display',\n+    elPermalinkEditor: '.cb-permalink-editor',\n+    elPermalinkEditBtn: '.cb-permalink-edit-btn',\n+    elPermalinkOkBtn: '.cb-permalink-ok-btn',\n+    elPermalinkCancelBtn: '.cb-permalink-cancel-btn',\n+    elPermalinkSlugInput: '.cb-permalink-slug-input',\n+    elPermalinkUrl: '.cb-permalink-url',\n+    elPermalinkBaseUrl: '#cb-permalink-base-url',\n+    elPermalinkRoot: '.cb-item-edit-permalink, .cb-course-edit-permalink',\n+    elPermalinkPlaceholder: '.cb-item-edit-permalink__placeholder',\n+    \u002F\u002F Tab handling selectors\n+    elCBHorizontalTabs: '.lp-cb-tabs__item',\n+    elCBTabPanels: '.lp-cb-tab-panel',\n+    \u002F\u002F Dropdown selectors\n+    elDropdownToggle: '.cb-btn-dropdown-toggle',\n+    elDropdownMenu: '.cb-dropdown-menu',\n+    elDropdownItem: '.cb-dropdown-item',\n+    elHeaderActionsDropdown: '.cb-header-actions-dropdown',\n+    elQuizActionExpanded: '.course-action-expanded'\n+  };\n+  init() {\n+    this.initTabs();\n+    this.initHeaderActionsDropdown();\n+    this.initQuestionTabHandler();\n+    this.syncHeaderActionWithPublishPanel();\n+    this.events();\n+  }\n+\n+  \u002F**\n+   * Initialize Question tab handler\n+   * Listen for AJAX completed to initialize BuilderEditQuiz when Question tab content loads\n+   *\u002F\n+  initQuestionTabHandler() {\n+    \u002F\u002F Only run on quiz edit page context\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+\n+    \u002F\u002F Listen for WordPress lp-ajax-completed hook when AJAX content loads\n+    if (typeof wp !== 'undefined' && wp.hooks) {\n+      wp.hooks.addAction('lp-ajax-completed', 'lp-course-builder', (element, dataSend) => {\n+        \u002F\u002F Check if this is the quiz question tab content\n+        if (!dataSend?.callback?.method || dataSend.callback.method !== 'render_edit_quiz') {\n+          return;\n+        }\n+\n+        \u002F\u002F Initialize BuilderEditQuiz for the loaded content\n+        this.initBuilderEditQuiz(element);\n+      });\n+    }\n+  }\n+\n+  \u002F**\n+   * Initialize BuilderEditQuiz for question editing functionality\n+   * @param {HTMLElement} container - The container element where AJAX content was loaded\n+   *\u002F\n+  initBuilderEditQuiz(container = null) {\n+    if (!this.builderEditQuiz) {\n+      this.builderEditQuiz = new _builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_3__.BuilderEditQuiz();\n+    }\n+\n+    \u002F\u002F Reinitialize for the new content\n+    this.builderEditQuiz.reinit(container);\n+  }\n+\n+  \u002F**\n+   * Initialize header actions dropdown (toggle behavior)\n+   *\u002F\n+  initHeaderActionsDropdown() {\n+    \u002F\u002F Close dropdown when clicking outside\n+    document.addEventListener('click', e => {\n+      const dropdown = document.querySelector(BuilderStandaloneQuiz.selectors.elHeaderActionsDropdown);\n+      if (dropdown && !dropdown.contains(e.target)) {\n+        const menu = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownMenu);\n+        const toggle = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownToggle);\n+        if (menu) {\n+          menu.classList.remove('is-open');\n+        }\n+        if (toggle) {\n+          toggle.setAttribute('aria-expanded', 'false');\n+        }\n+      }\n+    });\n+  }\n+\n+  \u002F**\n+   * Handle dropdown toggle click\n+   *\u002F\n+  handleDropdownToggle(args) {\n+    if (this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const toggleBtn = target.closest(BuilderStandaloneQuiz.selectors.elDropdownToggle);\n+    if (!toggleBtn) {\n+      return;\n+    }\n+    const dropdown = toggleBtn.closest(BuilderStandaloneQuiz.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) {\n+      return;\n+    }\n+    const menu = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownMenu);\n+    if (menu) {\n+      menu.classList.toggle('is-open');\n+      const isOpen = menu.classList.contains('is-open');\n+      toggleBtn.setAttribute('aria-expanded', isOpen ? 'true' : 'false');\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle dropdown item click (Save Draft, Publish from dropdown menu)\n+   *\u002F\n+  handleDropdownItemClick(args) {\n+    \u002F\u002F Context check: only handle if on quiz edit page\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    if (this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const dropdownItem = target.closest(BuilderStandaloneQuiz.selectors.elDropdownItem);\n+    if (!dropdownItem) {\n+      return;\n+    }\n+\n+    \u002F\u002F Skip if this is trash button - it has its own handler\n+    if (dropdownItem.classList.contains('cb-btn-trash') || dropdownItem.classList.contains('cb-btn-duplicate-quiz')) {\n+      return;\n+    }\n+    const status = dropdownItem.dataset.status;\n+    if (!status) {\n+      return;\n+    }\n+\n+    \u002F\u002F Close the dropdown menu\n+    const menu = dropdownItem.closest(BuilderStandaloneQuiz.selectors.elDropdownMenu);\n+    if (menu) {\n+      menu.classList.remove('is-open');\n+    }\n+\n+    \u002F\u002F Save with the specified status\n+    this.saveQuizWithStatus(dropdownItem, status);\n+  }\n+\n+  \u002F**\n+   * Save quiz with specified status (publish\u002Fdraft)\n+   * @param {HTMLElement} btnEl - The button element that was clicked\n+   * @param {string} status - The status to save (publish\u002Fdraft)\n+   *\u002F\n+  async saveQuizWithStatus(btnEl, status) {\n+    const canContinue = await this.confirmUnpublishIfNeeded(status, btnEl);\n+    if (!canContinue) {\n+      return;\n+    }\n+\n+    \u002F\u002F Validate title before saving\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnEl, 1);\n+    const quizData = this.getQuizDataForUpdate();\n+    const dataSend = {\n+      ...quizData,\n+      action: 'builder_update_quiz',\n+      args: {\n+        id_url: 'builder-update-quiz'\n+      },\n+      quiz_status: status\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status: respStatus,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, respStatus);\n+        if (respStatus === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons(data?.status || status);\n+          this.syncPublishPanelStatus(data?.status || status);\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.quiz_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.quiz_id_new}\u002F`);\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+            if (elStatus) {\n+              elStatus.className = 'quizze-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(btnEl, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+\n+  \u002F**\n+   * Initialize horizontal tabs for client-side tab switching\n+   *\u002F\n+  initTabs() {\n+    const tabs = document.querySelectorAll(BuilderStandaloneQuiz.selectors.elCBHorizontalTabs);\n+    if (tabs.length === 0) {\n+      return;\n+    }\n+\n+    \u002F\u002F Activate first tab by default if none is active\n+    const activeTab = document.querySelector(`${BuilderStandaloneQuiz.selectors.elCBHorizontalTabs}.is-active`);\n+    if (!activeTab && tabs.length > 0) {\n+      tabs[0].classList.add('is-active');\n+      const section = tabs[0].getAttribute('data-tab-section');\n+      if (section) {\n+        const panel = document.querySelector(`${BuilderStandaloneQuiz.selectors.elCBTabPanels}[data-section=\"${section}\"]`);\n+        if (panel) {\n+          panel.classList.remove('lp-hidden');\n+        }\n+      }\n+    }\n+  }\n+\n+  \u002F**\n+   * Handle horizontal tab click for client-side tab switching\n+   *\u002F\n+  handleTabClick(args) {\n+    const {\n+      e,\n+      target\n+    } = args;\n+    const tabLink = target.closest(BuilderStandaloneQuiz.selectors.elCBHorizontalTabs);\n+    if (!tabLink) {\n+      return;\n+    }\n+    e.preventDefault();\n+    const section = tabLink.getAttribute('data-tab-section');\n+    if (!section) {\n+      return;\n+    }\n+\n+    \u002F\u002F Update active tab\n+    const allTabs = document.querySelectorAll(BuilderStandaloneQuiz.selectors.elCBHorizontalTabs);\n+    allTabs.forEach(tab => tab.classList.remove('is-active'));\n+    tabLink.classList.add('is-active');\n+    const url = new URL(window.location.href);\n+    url.searchParams.set('tab', section);\n+    window.history.replaceState({}, '', url);\n+\n+    \u002F\u002F Show\u002Fhide panels\n+    const allPanels = document.querySelectorAll(BuilderStandaloneQuiz.selectors.elCBTabPanels);\n+    allPanels.forEach(panel => {\n+      if (panel.getAttribute('data-section') === section) {\n+        panel.classList.remove('lp-hidden');\n+      } else {\n+        panel.classList.add('lp-hidden');\n+      }\n+    });\n+  }\n+  events() {\n+    if (BuilderStandaloneQuiz._loadedEvents) {\n+      return;\n+    }\n+    BuilderStandaloneQuiz._loadedEvents = true;\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{\n+      selector: BuilderStandaloneQuiz.selectors.elBtnMainAction,\n+      class: this,\n+      callBack: this.updateQuiz.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elBtnDuplicate,\n+      class: this,\n+      callBack: this.duplicateQuiz.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elBtnTrash,\n+      class: this,\n+      callBack: this.trashQuiz.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elCBHorizontalTabs,\n+      class: this,\n+      callBack: this.handleTabClick.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elDropdownToggle,\n+      class: this,\n+      callBack: this.handleDropdownToggle.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elDropdownItem,\n+      class: this,\n+      callBack: this.handleDropdownItemClick.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elPermalinkEditBtn,\n+      class: this,\n+      callBack: this.handlePermalinkEdit.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elPermalinkOkBtn,\n+      class: this,\n+      callBack: this.handlePermalinkOk.name\n+    }, {\n+      selector: BuilderStandaloneQuiz.selectors.elPermalinkCancelBtn,\n+      class: this,\n+      callBack: this.handlePermalinkCancel.name\n+    }]);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('change', [{\n+      selector: BuilderStandaloneQuiz.selectors.elPublishStatusSelect,\n+      class: this,\n+      callBack: this.handlePublishStatusChange.name\n+    }]);\n+  }\n+  handlePublishStatusChange() {\n+    this.syncHeaderActionWithPublishPanel();\n+    (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n+  }\n+\n+  \u002F**\n+   * Validate title is not empty before update\n+   * @return {boolean} True if valid, false if invalid\n+   *\u002F\n+  validateTitleBeforeUpdate() {\n+    const titleInput = document.getElementById(BuilderStandaloneQuiz.selectors.idTitle);\n+    if (!titleInput) {\n+      return true;\n+    }\n+    const title = titleInput.value.trim();\n+    if (!title) {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show('Quiz title is required.', 'error');\n+      titleInput.focus();\n+      return false;\n+    }\n+    return true;\n+  }\n+  getQuizDataForUpdate() {\n+    const data = {};\n+    const wrapperEl = document.querySelector(BuilderStandaloneQuiz.selectors.elDataQuiz);\n+    data.quiz_id = wrapperEl ? parseInt(wrapperEl.dataset.quizId) || 0 : 0;\n+    const titleInput = document.getElementById(BuilderStandaloneQuiz.selectors.idTitle);\n+    data.quiz_title = titleInput ? titleInput.value : '';\n+    const descEditor = document.getElementById(BuilderStandaloneQuiz.selectors.idDescEditor);\n+    data.quiz_description = descEditor ? descEditor.value : '';\n+    if (typeof tinymce !== 'undefined') {\n+      const editor = tinymce.get(BuilderStandaloneQuiz.selectors.idDescEditor);\n+      if (editor) {\n+        data.quiz_description = editor.getContent();\n+      }\n+    }\n+    const permalinkInput = document.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkSlugInput);\n+    if (permalinkInput && permalinkInput.value) {\n+      data.quiz_permalink = permalinkInput.value;\n+    }\n+    const elFormSetting = document.querySelector(BuilderStandaloneQuiz.selectors.elFormSetting);\n+    if (elFormSetting) {\n+      data.quiz_settings = true;\n+      const formElements = elFormSetting.querySelectorAll('input, select, textarea');\n+      formElements.forEach(element => {\n+        const name = element.name || element.id;\n+        if (!name) {\n+          return;\n+        }\n+        if (name === 'learnpress_meta_box_nonce' || name === '_wp_http_referer') {\n+          return;\n+        }\n+        if (element.type === 'checkbox') {\n+          const fieldName = name.replace('[]', '');\n+          if (!data.hasOwnProperty(fieldName)) {\n+            data[fieldName] = element.checked ? 'yes' : 'no';\n+          }\n+        } else if (element.type === 'radio') {\n+          if (element.checked) {\n+            const fieldName = name.replace('[]', '');\n+            data[fieldName] = element.value;\n+          }\n+        } else if (element.type === 'file') {\n+          const fieldName = name.replace('[]', '');\n+          if (element.files && element.files.length > 0) {\n+            data[fieldName] = element.files;\n+          }\n+        } else {\n+          const fieldName = name.replace('[]', '');\n+          if (name.endsWith('[]')) {\n+            if (!data.hasOwnProperty(fieldName)) {\n+              data[fieldName] = [];\n+            }\n+            if (Array.isArray(data[fieldName])) {\n+              data[fieldName].push(element.value);\n+            }\n+          } else {\n+            if (!data.hasOwnProperty(fieldName)) {\n+              data[fieldName] = element.value;\n+            }\n+          }\n+        }\n+      });\n+      Object.keys(data).forEach(key => {\n+        if (Array.isArray(data[key])) {\n+          data[key] = data[key].join(',');\n+        }\n+      });\n+    }\n+    return data;\n+  }\n+  getStatusFromPublishPanel(fallbackStatus = 'publish') {\n+    const statusSelect = document.querySelector(BuilderStandaloneQuiz.selectors.elPublishStatusSelect);\n+    if (!statusSelect) {\n+      return fallbackStatus;\n+    }\n+    const selectedStatus = statusSelect.value;\n+    if (selectedStatus === 'publish' || selectedStatus === 'draft') {\n+      return selectedStatus;\n+    }\n+    return fallbackStatus;\n+  }\n+  hasPublishDrivenSingleAction() {\n+    if (!document.querySelector(BuilderStandaloneQuiz.selectors.elPublishStatusSelect)) {\n+      return false;\n+    }\n+    const wrapperEl = document.querySelector(BuilderStandaloneQuiz.selectors.elDataQuiz);\n+    const quizId = wrapperEl ? parseInt(wrapperEl.dataset.quizId) || 0 : 0;\n+    return quizId > 0;\n+  }\n+  syncHeaderActionWithPublishPanel() {\n+    if (!this.hasPublishDrivenSingleAction()) {\n+      return;\n+    }\n+    const dropdown = document.querySelector(BuilderStandaloneQuiz.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) {\n+      return;\n+    }\n+    const mainBtn = dropdown.querySelector('.cb-btn-main-action');\n+    if (!mainBtn) {\n+      return;\n+    }\n+    const toggleBtn = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownToggle);\n+    const dropdownMenu = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownMenu);\n+    const status = this.getStatusFromPublishPanel(mainBtn.dataset.status || 'publish');\n+    mainBtn.classList.remove('cb-btn-darft', 'cb-btn-publish', 'cb-btn-pending');\n+    mainBtn.classList.add('cb-btn-update', 'cb-btn-primary', 'cb-btn-main-action');\n+    mainBtn.textContent = mainBtn.dataset.titleUpdate || 'Update';\n+    mainBtn.dataset.status = status;\n+    dropdown.dataset.currentStatus = status;\n+    dropdown.classList.add('cb-header-actions-dropdown--single');\n+    if (toggleBtn) {\n+      toggleBtn.style.display = 'none';\n+    }\n+    if (dropdownMenu) {\n+      dropdownMenu.style.display = 'none';\n+    }\n+  }\n+  syncPublishPanelStatus(status) {\n+    const statusSelect = document.querySelector(BuilderStandaloneQuiz.selectors.elPublishStatusSelect);\n+    if (!statusSelect) {\n+      return;\n+    }\n+    statusSelect.value = status === 'publish' ? 'publish' : 'draft';\n+    this.syncHeaderActionWithPublishPanel();\n+  }\n+  updatePermalinkUIAfterSave(data = {}) {\n+    const permalinkRoot = this.getPermalinkRoot();\n+    if (!permalinkRoot) {\n+      return;\n+    }\n+    const {\n+      slugInput,\n+      urlLink,\n+      baseUrlInput,\n+      display,\n+      placeholder\n+    } = this.getPermalinkElements(permalinkRoot);\n+    const permalinkDisplayUrl = this.buildPermalinkDisplayUrl(baseUrlInput ? baseUrlInput.value : '', data?.quiz_slug, data?.quiz_permalink);\n+    if (slugInput && data?.quiz_slug) {\n+      slugInput.value = data.quiz_slug;\n+      slugInput.dataset.originalValue = data.quiz_slug;\n+    }\n+    const shouldShowUnavailable = data?.permalink_available === false || data?.status === 'draft' || data?.status === 'trash' || !data?.quiz_permalink;\n+    if (shouldShowUnavailable) {\n+      this.showPermalinkUnavailable(permalinkRoot, data?.permalink_notice);\n+      return;\n+    }\n+    if (placeholder) {\n+      placeholder.classList.add('lp-hidden');\n+    }\n+    if (display) {\n+      display.classList.remove('lp-hidden');\n+    }\n+    if (urlLink && data?.quiz_permalink) {\n+      urlLink.href = data.quiz_permalink;\n+      urlLink.textContent = permalinkDisplayUrl || data.quiz_permalink;\n+    } else if (urlLink && permalinkDisplayUrl) {\n+      urlLink.textContent = permalinkDisplayUrl;\n+    }\n+  }\n+  slugify(str) {\n+    return (str || '').toString().normalize('NFD').replace(\u002F[\\u0300-\\u036f]\u002Fg, '').replace(\u002Fđ\u002Fg, 'd').replace(\u002FĐ\u002Fg, 'D').toLowerCase().replace(\u002F\\s+\u002Fg, '-').replace(\u002F[^\\w-]+\u002Fg, '').replace(\u002F--+\u002Fg, '-').replace(\u002F^-+\u002F, '').replace(\u002F-+$\u002F, '');\n+  }\n+  buildPermalinkDisplayUrl(baseUrl = '', slug = '', fallbackUrl = '') {\n+    const normalizedBaseUrl = typeof baseUrl === 'string' ? baseUrl : '';\n+    const normalizedSlug = typeof slug === 'string' ? slug.trim() : '';\n+    if (normalizedBaseUrl && normalizedSlug) {\n+      return `${normalizedBaseUrl}${normalizedSlug}`;\n+    }\n+    return typeof fallbackUrl === 'string' ? fallbackUrl : '';\n+  }\n+  getPermalinkRoot(target = null) {\n+    if (target?.closest) {\n+      const fromTarget = target.closest(BuilderStandaloneQuiz.selectors.elPermalinkRoot);\n+      if (fromTarget) {\n+        return fromTarget;\n+      }\n+    }\n+    return document.querySelector(`.cb-section__quiz-edit ${BuilderStandaloneQuiz.selectors.elPermalinkRoot}`);\n+  }\n+  getPermalinkElements(permalinkRoot) {\n+    if (!permalinkRoot) {\n+      return {};\n+    }\n+    return {\n+      display: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkDisplay),\n+      editor: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkEditor),\n+      placeholder: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkPlaceholder),\n+      input: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkSlugInput),\n+      slugInput: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkSlugInput),\n+      urlLink: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkUrl),\n+      baseUrlInput: permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkBaseUrl)\n+    };\n+  }\n+  showPermalinkUnavailable(permalinkRoot, message = '') {\n+    if (!permalinkRoot) {\n+      return;\n+    }\n+    const label = permalinkRoot.querySelector('.cb-item-edit-permalink__label') || permalinkRoot.querySelector('.cb-permalink-label');\n+    const {\n+      display,\n+      editor\n+    } = this.getPermalinkElements(permalinkRoot);\n+    let placeholder = permalinkRoot.querySelector(BuilderStandaloneQuiz.selectors.elPermalinkPlaceholder);\n+    if (!placeholder) {\n+      placeholder = document.createElement('span');\n+      placeholder.className = 'cb-item-edit-permalink__placeholder';\n+      if (label) {\n+        label.insertAdjacentElement('afterend', placeholder);\n+      } else {\n+        permalinkRoot.prepend(placeholder);\n+      }\n+    }\n+    placeholder.textContent = message || 'Permalink is only available if the item is already assigned to a course.';\n+    placeholder.classList.remove('lp-hidden');\n+    if (display) {\n+      display.classList.add('lp-hidden');\n+    }\n+    if (editor) {\n+      editor.classList.add('lp-hidden');\n+    }\n+  }\n+  handlePermalinkEdit(args) {\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const permalinkRoot = this.getPermalinkRoot(target);\n+    const {\n+      display,\n+      editor,\n+      input\n+    } = this.getPermalinkElements(permalinkRoot);\n+    if (!display || !editor || !input) return;\n+    input.dataset.originalValue = input.value;\n+    display.classList.add('lp-hidden');\n+    editor.classList.remove('lp-hidden');\n+    input.focus();\n+    input.select();\n+  }\n+  handlePermalinkOk(args) {\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const permalinkRoot = this.getPermalinkRoot(target);\n+    const {\n+      display,\n+      editor,\n+      input,\n+      urlLink,\n+      baseUrlInput\n+    } = this.getPermalinkElements(permalinkRoot);\n+    if (!display || !editor || !input || !urlLink) return;\n+    let newSlug = this.slugify(input.value.trim());\n+    if (!newSlug) {\n+      newSlug = input.dataset.originalValue || 'quiz';\n+    }\n+    input.value = newSlug;\n+    const baseUrl = baseUrlInput ? baseUrlInput.value : '';\n+    const newUrl = this.buildPermalinkDisplayUrl(baseUrl, newSlug, urlLink.textContent || '');\n+\n+    \u002F\u002F Keep href as the current saved link and only update display text.\n+    urlLink.textContent = newUrl;\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+    if (newSlug !== input.dataset.originalValue) {\n+      (0,_builder_form_state_js__WEBPACK_IMPORTED_MODULE_5__.getFormState)().markAsChanged();\n+    }\n+  }\n+  handlePermalinkCancel(args) {\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      e,\n+      target\n+    } = args;\n+    if (e) e.preventDefault();\n+    const permalinkRoot = this.getPermalinkRoot(target);\n+    const {\n+      display,\n+      editor,\n+      input\n+    } = this.getPermalinkElements(permalinkRoot);\n+    if (!display || !editor || !input) return;\n+    input.value = input.dataset.originalValue || '';\n+    editor.classList.add('lp-hidden');\n+    display.classList.remove('lp-hidden');\n+  }\n+\n+  \u002F**\n+   * Update action buttons after status change, matching course edit logic.\n+   * Updates both main button and dropdown items based on new status.\n+   * @param {string} newStatus - The new quiz status\n+   *\u002F\n+  updateActionButtons(newStatus) {\n+    const dropdown = document.querySelector(BuilderStandaloneQuiz.selectors.elHeaderActionsDropdown);\n+    if (!dropdown) return;\n+    const mainBtn = dropdown.querySelector('.cb-btn-main-action');\n+    const dropdownMenu = dropdown.querySelector(BuilderStandaloneQuiz.selectors.elDropdownMenu);\n+    if (!mainBtn) return;\n+    if (this.hasPublishDrivenSingleAction()) {\n+      this.syncHeaderActionWithPublishPanel();\n+      return;\n+    }\n+    if (!dropdownMenu) return;\n+\n+    \u002F\u002F Status configuration for button labels and classes\n+    const statusConfig = {\n+      publish: {\n+        mainLabel: mainBtn.dataset.titleUpdate || 'Update',\n+        mainClass: 'cb-btn-update',\n+        mainStatus: 'publish',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      draft: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        dropdownClass: 'cb-btn-publish',\n+        dropdownStatus: 'publish',\n+        dropdownIcon: 'dashicons-visibility'\n+      },\n+      pending: {\n+        mainLabel: 'Submit for Review',\n+        mainClass: 'cb-btn-pending',\n+        mainStatus: 'pending',\n+        dropdownLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        dropdownClass: 'cb-btn-darft',\n+        dropdownStatus: 'draft',\n+        dropdownIcon: 'dashicons-media-default'\n+      },\n+      trash: {\n+        mainLabel: mainBtn.dataset.titleDraft || 'Save Draft',\n+        mainClass: 'cb-btn-darft',\n+        mainStatus: 'draft',\n+        dropdownLabel: mainBtn.dataset.titlePublish || 'Publish',\n+        dropdownClass: 'cb-btn-publish',\n+        dropdownStatus: 'publish',\n+        dropdownIcon: 'dashicons-visibility'\n+      }\n+    };\n+    const config = statusConfig[newStatus] || statusConfig.draft;\n+\n+    \u002F\u002F Update main button\n+    mainBtn.className = `${config.mainClass} cb-btn-primary cb-btn-main-action`;\n+    mainBtn.dataset.status = config.mainStatus;\n+    mainBtn.textContent = config.mainLabel;\n+\n+    \u002F\u002F Update dropdown item (first item, excluding trash)\n+    const dropdownItems = dropdownMenu.querySelectorAll('.cb-dropdown-item:not(.cb-btn-trash)');\n+    if (dropdownItems.length > 0) {\n+      const firstItem = dropdownItems[0];\n+      firstItem.className = `cb-dropdown-item ${config.dropdownClass}`;\n+      firstItem.dataset.status = config.dropdownStatus;\n+      firstItem.innerHTML = `\u003Cspan class=\"dashicons ${config.dropdownIcon}\">\u003C\u002Fspan>${config.dropdownLabel}`;\n+    }\n+\n+    \u002F\u002F Update dropdown data-current-status\n+    dropdown.dataset.currentStatus = newStatus;\n+  }\n+\n+  \u002F**\n+   * Check if we're in quiz edit context\n+   * @return {boolean}\n+   *\u002F\n+  isQuizContext() {\n+    return !!document.querySelector(BuilderStandaloneQuiz.selectors.elDataQuiz);\n+  }\n+  async updateQuiz(args) {\n+    \u002F\u002F Context check: only handle if on quiz edit page\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnUpdateQuiz = target.closest(BuilderStandaloneQuiz.selectors.elBtnMainAction);\n+    if (!elBtnUpdateQuiz) {\n+      return;\n+    }\n+\n+    \u002F\u002F Validate title before update\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+\n+    \u002F\u002F Resolve status from Overview publish panel first, fallback to button data-status.\n+    const targetStatus = this.getStatusFromPublishPanel(elBtnUpdateQuiz.dataset.status || 'publish');\n+    const canContinue = await this.confirmUnpublishIfNeeded(targetStatus, elBtnUpdateQuiz);\n+    if (!canContinue) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnUpdateQuiz, 1);\n+    const quizData = this.getQuizDataForUpdate();\n+    const dataSend = {\n+      ...quizData,\n+      action: 'builder_update_quiz',\n+      args: {\n+        id_url: 'builder-update-quiz'\n+      },\n+      quiz_status: targetStatus\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          \u002F\u002F Update action buttons with actual status from server\n+          this.updateActionButtons(data?.status || targetStatus);\n+          this.syncPublishPanelStatus(data?.status || targetStatus);\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.redirect_url) {\n+            window.location.href = data.redirect_url;\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+            if (elStatus) {\n+              elStatus.className = 'quizze-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.quiz-item[data-quiz-id=\"${quizData.quiz_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuiz = curriculumItem.closest('.quiz');\n+                if (elCurriculumQuiz) {\n+                  elCurriculumQuiz.remove();\n+                }\n+              }\n+            }\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnUpdateQuiz, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  async confirmUnpublishIfNeeded(targetStatus, triggerEl) {\n+    if (targetStatus !== 'draft') {\n+      return true;\n+    }\n+    const statusEl = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+    const isPublished = statusEl && statusEl.className.includes('publish');\n+    if (!isPublished) {\n+      return true;\n+    }\n+    const confirmMsg = triggerEl?.dataset?.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: confirmMsg,\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    return !!result.isConfirmed;\n+  }\n+  async saveDraftQuiz(args) {\n+    \u002F\u002F Context check: only handle if on quiz edit page\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDraftQuiz = target.closest(BuilderStandaloneQuiz.selectors.elBtnDraft);\n+    if (!elBtnDraftQuiz) {\n+      return;\n+    }\n+\n+    \u002F\u002F Check if published to show confirm unpublish modal\n+    const statusEl = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+    \u002F\u002F Status might use quiz-status or quizze-status class based on element logic\n+    const isPublished = statusEl && statusEl.className.includes('publish');\n+    if (isPublished) {\n+      const confirmMsg = elBtnDraftQuiz.dataset.confirmUnpublish || 'Saving as draft will unpublish this item. Are you sure?';\n+      const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+        title: confirmMsg,\n+        iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+        customClass: {\n+          icon: 'lp-cb-swal-icon-html'\n+        },\n+        showCloseButton: true,\n+        showCancelButton: true,\n+        cancelButtonText: lpData.i18n.cancel,\n+        confirmButtonText: lpData.i18n.yes,\n+        reverseButtons: true\n+      });\n+      if (!result.isConfirmed) {\n+        return;\n+      }\n+    }\n+\n+    \u002F\u002F Validate title before saving draft\n+    if (!this.validateTitleBeforeUpdate()) {\n+      return;\n+    }\n+    const elQuizActionExpanded = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 1);\n+    const quizData = this.getQuizDataForUpdate();\n+    const dataSend = {\n+      ...quizData,\n+      action: 'builder_update_quiz',\n+      args: {\n+        id_url: 'builder-update-quiz'\n+      },\n+      quiz_status: 'draft'\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          \u002F\u002F Update action button text\n+          this.updateActionButtons('draft');\n+          this.syncPublishPanelStatus(data?.status || 'draft');\n+\n+          \u002F\u002F Reset form state before potential redirect.\n+          document.dispatchEvent(new CustomEvent('lp-course-builder-saved'));\n+          if (data?.quiz_id_new) {\n+            const currentUrl = window.location.href;\n+            window.location.href = currentUrl.replace(\u002Fpost-new\\\u002F?\u002F, `${data.quiz_id_new}\u002F`);\n+          }\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+            if (elStatus) {\n+              elStatus.className = 'quizze-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.quiz-item[data-quiz-id=\"${quizData.quiz_id}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuiz = curriculumItem.closest('.quiz');\n+                if (elCurriculumQuiz) {\n+                  elCurriculumQuiz.remove();\n+                }\n+              }\n+            }\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  async trashQuiz(args) {\n+    \u002F\u002F Context check: only handle if on quiz edit page\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnTrashQuiz = target.closest(BuilderStandaloneQuiz.selectors.elBtnTrash);\n+    if (!elBtnTrashQuiz) {\n+      return;\n+    }\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: 'Are you sure you want to trash this quiz?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n+      return;\n+    }\n+    const elQuizActionExpanded = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 1);\n+    const wrapperEl = document.querySelector(BuilderStandaloneQuiz.selectors.elDataQuiz);\n+    const quizId = wrapperEl ? parseInt(wrapperEl.dataset.quizId) || 0 : 0;\n+    const dataSend = {\n+      quiz_id: quizId,\n+      action: 'move_trash_quiz',\n+      args: {\n+        id_url: 'builder-trash-quiz'\n+      }\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+        if (status === 'success') {\n+          \u002F\u002F Update status badge and action buttons if trash was successful\n+          if (data?.status) {\n+            const elStatus = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizStatus);\n+            if (elStatus) {\n+              elStatus.className = 'quizze-status ' + data.status;\n+              elStatus.textContent = data.status;\n+            }\n+            if (data.status === 'trash' || data.status === 'draft') {\n+              const curriculumItem = document.querySelector(`.quiz-item[data-quiz-id=\"${quizId}\"]`);\n+              if (curriculumItem) {\n+                const elCurriculumQuiz = curriculumItem.closest('.quiz');\n+                if (elCurriculumQuiz) {\n+                  elCurriculumQuiz.remove();\n+                }\n+              }\n+            }\n+            \u002F\u002F Update action buttons to show correct state for trash status\n+            this.updateActionButtons(data.status);\n+          }\n+          this.updatePermalinkUIAfterSave(data);\n+\n+          \u002F\u002F Redirect if URL is provided, otherwise stay on page with updated UI\n+          if (data?.redirect_url) {\n+            window.location.href = data.redirect_url;\n+          }\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+  async duplicateQuiz(args) {\n+    \u002F\u002F Context check: only handle if on quiz edit page\n+    if (!this.isQuizContext()) {\n+      return;\n+    }\n+    const {\n+      target\n+    } = args;\n+    const elBtnDuplicateQuiz = target.closest(BuilderStandaloneQuiz.selectors.elBtnDuplicate);\n+    if (!elBtnDuplicateQuiz) {\n+      return;\n+    }\n+    const wrapperEl = document.querySelector(BuilderStandaloneQuiz.selectors.elDataQuiz);\n+    const quizId = wrapperEl ? parseInt(wrapperEl.dataset.quizId, 10) || 0 : 0;\n+    if (!quizId) {\n+      return;\n+    }\n+    const result = await sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elBtnDuplicateQuiz.dataset.title || 'Are you sure?',\n+      text: elBtnDuplicateQuiz.dataset.content || 'Are you sure you want to duplicate this quiz?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_4__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    });\n+    if (!result.isConfirmed) {\n+      return;\n+    }\n+    const elQuizActionExpanded = document.querySelector(BuilderStandaloneQuiz.selectors.elQuizActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 1);\n+    const dataSend = {\n+      quiz_id: quizId,\n+      action: 'duplicate_quiz',\n+      args: {\n+        id_url: 'duplicate-quiz'\n+      }\n+    };\n+    const callBack = {\n+      success: response => {\n+        const {\n+          status,\n+          message,\n+          data\n+        } = response;\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+        if (status === 'success' && data?.redirect_url) {\n+          window.location.href = data.redirect_url;\n+        }\n+      },\n+      error: error => {\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+      },\n+      completed: () => {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizActionExpanded, 0);\n+      }\n+    };\n+    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+  }\n+}\n+\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js\"\n \u002F*!********************************************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js ***!\n   \\********************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -9272,6 +15036,8 @@\n \u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! sweetalert2 *\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\");\n \u002F* harmony import *\u002F var sweetalert2__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_2__);\n+\u002F* harmony import *\u002F var _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fswal-icons.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\");\n+\n \n \n \n@@ -9284,10 +15050,12 @@\n     elQuizExpandedItems: '.quiz-action-expanded__items',\n     elQuizDuplicate: '.quiz-action-expanded__duplicate',\n     elQuizTrash: '.quiz-action-expanded__trash',\n+    elQuizRestore: '.quiz-action-expanded__restore',\n     elQuizPublish: '.quiz-action-expanded__publish',\n     elQuizDelete: '.quiz-action-expanded__delete',\n     elQuizActionExpanded: '.quiz-action-expanded',\n-    elQuizStatus: '.quiz-status'\n+    elQuizStatus: '.quiz-status',\n+    elBtnEditQuiz: '.btn-edit-quiz'\n   };\n   init() {\n     this.events();\n@@ -9310,6 +15078,10 @@\n       class: this,\n       callBack: this.publishQuiz.name\n     }, {\n+      selector: BuilderTabQuiz.selectors.elQuizRestore,\n+      class: this,\n+      callBack: this.restoreQuiz.name\n+    }, {\n       selector: BuilderTabQuiz.selectors.elQuizDelete,\n       class: this,\n       callBack: this.deleteQuiz.name\n@@ -9317,6 +15089,10 @@\n       selector: BuilderTabQuiz.selectors.elQuizActionExpanded,\n       class: this,\n       callBack: this.toggleExpandedAction.name\n+    }, {\n+      selector: BuilderTabQuiz.selectors.elBtnEditQuiz,\n+      class: this,\n+      callBack: this.editQuiz.name\n     }]);\n     document.addEventListener('click', e => {\n       if (!e.target.closest(BuilderTabQuiz.selectors.elQuizActionExpanded)) {\n@@ -9324,6 +15100,16 @@\n       }\n     });\n   }\n+  editQuiz(args) {\n+    const {\n+      target\n+    } = args;\n+    const elBtnEditQuiz = target.closest(BuilderTabQuiz.selectors.elBtnEditQuiz);\n+    if (!elBtnEditQuiz) {\n+      return;\n+    }\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elBtnEditQuiz, 1);\n+  }\n   duplicateQuiz(args) {\n     const {\n       target\n@@ -9333,47 +15119,52 @@\n     if (!elQuizItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizDuplicate, 1);\n+    const elActionExpanded = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n     const quizId = elQuizItem.dataset.quizId || '';\n-    const dataSend = {\n-      action: 'duplicate_quiz',\n-      args: {\n-        id_url: 'duplicate-quiz'\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elQuizDuplicate.dataset.title || 'Duplicate Quiz',\n+      text: elQuizDuplicate.dataset.content || 'Are you sure you want to duplicate this quiz?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DUPLICATE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n       },\n-      quiz_id: quizId\n-    };\n-    const callBack = {\n-      success: response => {\n-        const {\n-          status,\n-          message,\n-          data\n-        } = response;\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.html) {\n-          const elQuiz = elQuizDuplicate.closest('.quiz');\n-          elQuiz.insertAdjacentHTML('afterend', data.html);\n-          const newQuiz = elQuiz.nextElementSibling;\n-          if (newQuiz) {\n-            newQuiz.scrollIntoView({\n-              behavior: 'smooth',\n-              block: 'nearest'\n-            });\n-            newQuiz.classList.add('highlight-new-quiz');\n-            setTimeout(() => {\n-              newQuiz.classList.remove('highlight-new-quiz');\n-            }, 1500);\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'duplicate_quiz',\n+          args: {\n+            id_url: 'duplicate-quiz'\n+          },\n+          quiz_id: quizId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message || 'Duplicated successfully!', status);\n+            if (status === 'success' && data?.redirect_url) {\n+              window.location.href = data.redirect_url;\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n-        }\n-      },\n-      error: error => {\n-        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n-      },\n-      completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizDuplicate, 0);\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n       }\n-    };\n-    window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    });\n   }\n   trashQuiz(args) {\n     const {\n@@ -9384,14 +15175,72 @@\n     if (!elQuizItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizTrash, 1);\n+    const elActionExpanded = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n+    const quizId = elQuizItem.dataset.quizId || '';\n+    sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n+      title: elQuizTrash.dataset.title || 'Trash Quiz',\n+      text: elQuizTrash.dataset.content || 'Are you sure you want to move this quiz to trash?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_TRASH_DRAFT,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n+      showCloseButton: true,\n+      showCancelButton: true,\n+      cancelButtonText: lpData.i18n.cancel,\n+      confirmButtonText: lpData.i18n.yes,\n+      reverseButtons: true\n+    }).then(result => {\n+      if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n+        const dataSend = {\n+          action: 'move_trash_quiz',\n+          args: {\n+            id_url: 'move-trash-quiz'\n+          },\n+          quiz_id: quizId\n+        };\n+        const callBack = {\n+          success: response => {\n+            const {\n+              status,\n+              message,\n+              data\n+            } = response;\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n+            if (data?.html) {\n+              this.replaceItemHtml(elQuizTrash.closest('.quiz'), data.html);\n+            }\n+          },\n+          error: error => {\n+            lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n+          }\n+        };\n+        window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+      }\n+    });\n+  }\n+  publishQuiz(args) {\n+    const {\n+      target\n+    } = args;\n+    const elQuizPublish = target.closest(BuilderTabQuiz.selectors.elQuizPublish);\n+    const elQuizItem = elQuizPublish.closest(BuilderTabQuiz.selectors.elQuizItem);\n+    if (!elQuizItem) {\n+      return;\n+    }\n+    const elActionExpanded = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const quizId = elQuizItem.dataset.quizId || '';\n     const dataSend = {\n       action: 'move_trash_quiz',\n       args: {\n         id_url: 'move-trash-quiz'\n       },\n-      quiz_id: quizId\n+      quiz_id: quizId,\n+      status: 'publish'\n     };\n     const callBack = {\n       success: response => {\n@@ -9401,30 +15250,30 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elQuiz = elQuizTrash.closest('.quiz');\n-          this.updateStatusUI(elQuiz, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elQuizPublish.closest('.quiz'), data.html);\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizTrash, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n   }\n-  publishQuiz(args) {\n+  restoreQuiz(args) {\n     const {\n       target\n     } = args;\n-    const elQuizPublish = target.closest(BuilderTabQuiz.selectors.elQuizPublish);\n-    const elQuizItem = elQuizPublish.closest(BuilderTabQuiz.selectors.elQuizItem);\n+    const elQuizRestore = target.closest(BuilderTabQuiz.selectors.elQuizRestore);\n+    const elQuizItem = elQuizRestore.closest(BuilderTabQuiz.selectors.elQuizItem);\n     if (!elQuizItem) {\n       return;\n     }\n-    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizPublish, 1);\n+    const elActionExpanded = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n+    lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n     const quizId = elQuizItem.dataset.quizId || '';\n     const dataSend = {\n       action: 'move_trash_quiz',\n@@ -9432,7 +15281,7 @@\n         id_url: 'move-trash-quiz'\n       },\n       quiz_id: quizId,\n-      status: 'publish'\n+      status: 'draft'\n     };\n     const callBack = {\n       success: response => {\n@@ -9442,16 +15291,15 @@\n           data\n         } = response;\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-        if (data?.status) {\n-          const elQuiz = elQuizPublish.closest('.quiz');\n-          this.updateStatusUI(elQuiz, data.status);\n+        if (data?.html) {\n+          this.replaceItemHtml(elQuizRestore.closest('.quiz'), data.html);\n         }\n       },\n       error: error => {\n         lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n       },\n       completed: () => {\n-        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elQuizPublish, 0);\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n       }\n     };\n     window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -9465,14 +15313,18 @@\n     if (!elQuizItem) {\n       return;\n     }\n+    const elActionExpanded = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n     const quizId = elQuizItem.dataset.quizId || '';\n     if (!quizId) {\n       return;\n     }\n     sweetalert2__WEBPACK_IMPORTED_MODULE_2___default().fire({\n-      title: elQuizDelete.dataset.title,\n-      text: elQuizDelete.dataset.content,\n-      icon: 'warning',\n+      title: elQuizDelete.dataset.title || 'Delete Quiz',\n+      text: elQuizDelete.dataset.content || 'Are you sure you want to permanently delete this quiz?',\n+      iconHtml: _swal_icons_js__WEBPACK_IMPORTED_MODULE_3__.SWAL_ICON_DELETE,\n+      customClass: {\n+        icon: 'lp-cb-swal-icon-html'\n+      },\n       showCloseButton: true,\n       showCancelButton: true,\n       cancelButtonText: lpData.i18n.cancel,\n@@ -9480,6 +15332,7 @@\n       reverseButtons: true\n     }).then(result => {\n       if (result.isConfirmed) {\n+        lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 1);\n         const dataSend = {\n           action: 'move_trash_quiz',\n           args: {\n@@ -9495,16 +15348,21 @@\n               message\n             } = response;\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(message, status);\n-            const elQuiz = elQuizDelete.closest('.quiz');\n-            elQuiz.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n-            elQuiz.style.opacity = '0';\n-            elQuiz.style.transform = 'translateX(160px)';\n-            setTimeout(() => {\n-              elQuiz.remove();\n-            }, 400);\n+            if (status === 'success') {\n+              const elQuiz = elQuizDelete.closest('.quiz');\n+              elQuiz.style.transition = 'opacity 0.4s ease-out, transform 0.4s ease-out';\n+              elQuiz.style.opacity = '0';\n+              elQuiz.style.transform = 'translateX(160px)';\n+              setTimeout(() => {\n+                elQuiz.remove();\n+              }, 400);\n+            }\n           },\n           error: error => {\n             lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error.message || error, 'error');\n+          },\n+          completed: () => {\n+            lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elActionExpanded, 0);\n           }\n         };\n         window.lpAJAXG.fetchAJAX(dataSend, callBack);\n@@ -9516,14 +15374,28 @@\n       target\n     } = args;\n     const elQuizActionExpanded = target.closest(BuilderTabQuiz.selectors.elQuizActionExpanded);\n+    if (!elQuizActionExpanded) {\n+      return;\n+    }\n     const elQuizItem = elQuizActionExpanded.closest(BuilderTabQuiz.selectors.elQuizItem);\n+    if (!elQuizItem) {\n+      return;\n+    }\n     const elExpandedItems = elQuizItem.querySelector(BuilderTabQuiz.selectors.elQuizExpandedItems);\n     if (!elExpandedItems) {\n       return;\n     }\n     this.closeAllExpanded(elExpandedItems);\n-    elExpandedItems.classList.toggle('active');\n-    elQuizActionExpanded.classList.toggle('active');\n+    const willOpen = !elExpandedItems.classList.contains('active');\n+    if (willOpen) {\n+      elExpandedItems.classList.add('active');\n+      elQuizActionExpanded.classList.add('active');\n+      this.setExpandedDirection(elExpandedItems);\n+    } else {\n+      elExpandedItems.classList.remove('active');\n+      elExpandedItems.classList.remove('is-dropup');\n+      elQuizActionExpanded.classList.remove('active');\n+    }\n   }\n   closeAllExpanded(excludeElement = null) {\n     const allExpandedItems = document.querySelectorAll(`${BuilderTabQuiz.selectors.elQuizExpandedItems}.active`);\n@@ -9532,33 +15404,398 @@\n         return;\n       }\n       item.classList.remove('active');\n+      item.classList.remove('is-dropup');\n       const quizItem = item.closest(BuilderTabQuiz.selectors.elQuizItem);\n+      if (!quizItem) {\n+        return;\n+      }\n       const expandedBtn = quizItem.querySelector(BuilderTabQuiz.selectors.elQuizActionExpanded);\n       if (expandedBtn) {\n         expandedBtn.classList.remove('active');\n       }\n     });\n   }\n-  updateStatusUI(elQuiz, status) {\n-    const elStatus = elQuiz.querySelector(BuilderTabQuiz.selectors.elQuizStatus);\n-    const elSpanStatus = elQuiz.querySelector(`${BuilderTabQuiz.selectors.elQuizStatus} span`);\n-    if (elSpanStatus && elStatus) {\n-      elStatus.className = 'quiz-status ' + status;\n-      elSpanStatus.textContent = status;\n-    } else if (elStatus) {\n-      elStatus.className = 'quiz-status ' + status;\n-      elStatus.textContent = status;\n+  setExpandedDirection(elExpandedItems) {\n+    if (!elExpandedItems) {\n+      return;\n+    }\n+    elExpandedItems.classList.remove('is-dropup');\n+    const elQuiz = elExpandedItems.closest('.quiz');\n+    if (!elQuiz) {\n+      return;\n+    }\n+    if (elQuiz.matches(':last-child')) {\n+      elExpandedItems.classList.add('is-dropup');\n+    }\n+  }\n+  replaceItemHtml(elQuiz, html) {\n+    if (!elQuiz || !html) {\n+      return;\n+    }\n+    const tmp = document.createElement('div');\n+    tmp.innerHTML = html;\n+    const newEl = tmp.firstElementChild;\n+    if (newEl) {\n+      elQuiz.replaceWith(newEl);\n+    }\n+  }\n+}\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-settings.js\"\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-settings.js ***!\n+  \\*******************************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   BuilderSettings: () => (\u002F* binding *\u002F BuilderSettings)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n+\u002F**\n+ * Settings tab JS handler for Course Builder.\n+ *\n+ * @since 4.3.x\n+ * @version 1.2.0\n+ *\u002F\n+\n+class BuilderSettings {\n+  constructor() {\n+    this.form = null;\n+    this.debounceTimer = null;\n+    this.debounceDelay = 600;\n+    this.isSaving = false;\n+    this.isDirty = false;\n+    this.shouldRetryOnCompleted = false;\n+    this.lastSavedState = '';\n+    this.mediaUploader = null;\n+    this.init();\n+  }\n+  static selectors = {\n+    elForm: '#lp-cb-settings-form',\n+    elCheckbox: 'input[name=\"hide_instructor_access_admin_screen\"]',\n+    elBadge: '[data-setting-badge]',\n+    elHeaderLogoLink: '.lp-cb-top-header__logo a',\n+    elLogoSetting: '[data-cb-logo-setting]',\n+    elDefaultLogoTemplate: '#lp-cb-default-logo-template',\n+    elLogoPreviewDefault: '[data-cb-logo-preview-default]',\n+    elLogoPreviewImage: '[data-cb-logo-preview-image]',\n+    elLogoChooseBtn: '[data-cb-logo-choose]',\n+    elLogoRemoveBtn: '[data-cb-logo-remove]',\n+    elLogoIdInput: 'input[name=\"course_builder_logo_id\"]',\n+    elLogoRemoveInput: 'input[name=\"course_builder_logo_remove\"]'\n+  };\n+  init() {\n+    this.form = document.querySelector(BuilderSettings.selectors.elForm);\n+    if (!this.form) {\n+      return;\n+    }\n+    this.cacheElements();\n+    this.updateBadge(this.getCurrentValue());\n+    this.hydrateDefaultLogoPreview();\n+    this.setLogoVisibility(this.getLogoId() > 0);\n+    this.lastSavedState = this.getStateFingerprint();\n+    this.events();\n+  }\n+  cacheElements() {\n+    this.headerLogoLink = document.querySelector(BuilderSettings.selectors.elHeaderLogoLink);\n+    this.logoSetting = this.form?.querySelector(BuilderSettings.selectors.elLogoSetting);\n+    this.logoPreviewDefault = this.form?.querySelector(BuilderSettings.selectors.elLogoPreviewDefault);\n+    this.logoPreviewImage = this.form?.querySelector(BuilderSettings.selectors.elLogoPreviewImage);\n+    this.logoChooseBtn = this.form?.querySelector(BuilderSettings.selectors.elLogoChooseBtn);\n+    this.logoRemoveBtn = this.form?.querySelector(BuilderSettings.selectors.elLogoRemoveBtn);\n+    this.logoIdInput = this.form?.querySelector(BuilderSettings.selectors.elLogoIdInput);\n+    this.logoRemoveInput = this.form?.querySelector(BuilderSettings.selectors.elLogoRemoveInput);\n+    this.defaultLogoURL = this.logoSetting?.dataset?.cbDefaultLogoUrl || '';\n+  }\n+  events() {\n+    if (BuilderSettings._loadedEvents) {\n+      return;\n+    }\n+    BuilderSettings._loadedEvents = true;\n+    if (!this.form) {\n+      return;\n+    }\n+    this.form.addEventListener('change', e => {\n+      if (e.target.matches(BuilderSettings.selectors.elCheckbox)) {\n+        this.handleSettingChange();\n+      }\n+    });\n+    if (this.logoChooseBtn) {\n+      this.logoChooseBtn.addEventListener('click', e => {\n+        e.preventDefault();\n+        this.openLogoMediaUploader();\n+      });\n+    }\n+    if (this.logoRemoveBtn) {\n+      this.logoRemoveBtn.addEventListener('click', e => {\n+        e.preventDefault();\n+        this.removeLogo();\n+      });\n+    }\n+  }\n+  handleSettingChange() {\n+    this.isDirty = true;\n+    if (this.isSaving) {\n+      this.shouldRetryOnCompleted = true;\n+    }\n+    this.updateBadge(this.getCurrentValue());\n+    this.queueSave();\n+  }\n+  queueSave() {\n+    window.clearTimeout(this.debounceTimer);\n+    this.debounceTimer = window.setTimeout(() => {\n+      this.flushSave();\n+    }, this.debounceDelay);\n+  }\n+  flushSave() {\n+    if (!this.isDirty) {\n+      return;\n+    }\n+    const currentState = this.getStateFingerprint();\n+    if (currentState === this.lastSavedState) {\n+      this.isDirty = false;\n+      return;\n+    }\n+    if (this.isSaving) {\n+      return;\n+    }\n+    this.isSaving = true;\n+    this.shouldRetryOnCompleted = false;\n+    lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_0__.show('Updating settings...', 'info', {\n+      duration: 1800\n+    });\n+    window.lpAJAXG.fetchAJAX(this.getPayloadForSave(), {\n+      success: response => {\n+        if (response?.status !== 'success') {\n+          this.handleSaveError(response?.message || 'Could not save changes.');\n+          return;\n+        }\n+        this.applySaveResponse(response);\n+        this.isDirty = false;\n+        this.lastSavedState = this.getStateFingerprint();\n+        this.updateBadge(this.getCurrentValue());\n+        lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_0__.show(response?.message || 'Saved', 'success');\n+      },\n+      error: error => {\n+        this.handleSaveError(error?.message || error || 'An error occurred.');\n+      },\n+      completed: () => {\n+        this.isSaving = false;\n+        if (this.shouldRetryOnCompleted) {\n+          this.queueSave();\n+        }\n+      }\n+    });\n+  }\n+  getPayloadForSave() {\n+    return {\n+      action: 'save_global_settings',\n+      args: {\n+        id_url: 'save-global-settings'\n+      },\n+      hide_instructor_access_admin_screen: this.getCurrentValue(),\n+      course_builder_logo_id: this.getLogoId(),\n+      course_builder_logo_remove: this.getLogoRemoveValue()\n+    };\n+  }\n+  applySaveResponse(response) {\n+    var _data$course_builder_;\n+    const data = response?.data || {};\n+    const savedLogoID = parseInt((_data$course_builder_ = data.course_builder_logo_id) !== null && _data$course_builder_ !== void 0 ? _data$course_builder_ : this.getLogoId(), 10) || 0;\n+    const savedLogoSrc = data.course_builder_logo_url || '';\n+    if (this.logoIdInput) {\n+      this.logoIdInput.value = savedLogoID;\n+    }\n+    if (this.logoRemoveInput) {\n+      this.logoRemoveInput.value = 'no';\n+    }\n+    if (savedLogoID > 0 && savedLogoSrc) {\n+      this.setLogoImageSource(savedLogoSrc);\n+      this.setLogoVisibility(true);\n+    } else if (savedLogoID === 0) {\n+      this.clearLogoUI();\n+    }\n+    this.syncHeaderLogo(savedLogoID > 0 ? savedLogoSrc : '');\n+  }\n+  handleSaveError(message) {\n+    lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_0__.show(message, 'error');\n+  }\n+  getCurrentValue() {\n+    const checkbox = this.form?.querySelector(BuilderSettings.selectors.elCheckbox);\n+    return checkbox && checkbox.checked ? 'yes' : 'no';\n+  }\n+  updateBadge(value) {\n+    const badgeEl = this.form?.querySelector(BuilderSettings.selectors.elBadge);\n+    if (!badgeEl) {\n+      return;\n+    }\n+    const isEnabled = value === 'yes';\n+    badgeEl.dataset.state = isEnabled ? 'enabled' : 'disabled';\n+    badgeEl.textContent = isEnabled ? 'Enabled' : 'Disabled';\n+  }\n+  getStateFingerprint() {\n+    return JSON.stringify({\n+      hide_instructor_access_admin_screen: this.getCurrentValue(),\n+      course_builder_logo_id: this.getLogoId(),\n+      course_builder_logo_remove: this.getLogoRemoveValue()\n+    });\n+  }\n+  getLogoId() {\n+    return parseInt(this.logoIdInput?.value || '0', 10) || 0;\n+  }\n+  getLogoRemoveValue() {\n+    return this.logoRemoveInput?.value === 'yes' ? 'yes' : 'no';\n+  }\n+  openLogoMediaUploader() {\n+    if (typeof wp === 'undefined' || typeof wp.media === 'undefined') {\n+      lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_0__.show('Media library is unavailable.', 'error');\n+      return;\n+    }\n+    if (this.mediaUploader) {\n+      this.mediaUploader.open();\n+      return;\n+    }\n+    this.mediaUploader = wp.media({\n+      title: 'Select logo image',\n+      button: {\n+        text: 'Use this image'\n+      },\n+      multiple: false,\n+      library: {\n+        type: 'image'\n+      }\n+    });\n+    this.mediaUploader.on('select', () => {\n+      const attachment = this.mediaUploader.state().get('selection').first().toJSON();\n+      const imageURL = attachment?.sizes?.full?.url || attachment?.url || '';\n+      if (!imageURL) {\n+        return;\n+      }\n+      if (this.logoIdInput) {\n+        this.logoIdInput.value = attachment?.id || 0;\n+      }\n+      if (this.logoRemoveInput) {\n+        this.logoRemoveInput.value = 'no';\n+      }\n+      this.setLogoImageSource(imageURL);\n+      this.setLogoVisibility(true);\n+      this.handleSettingChange();\n+    });\n+    this.mediaUploader.open();\n+  }\n+  setLogoImageSource(source) {\n+    if (this.logoPreviewImage) {\n+      if (source) {\n+        this.logoPreviewImage.src = source;\n+      } else {\n+        this.logoPreviewImage.removeAttribute('src');\n+      }\n+    }\n+  }\n+  setLogoVisibility(visible) {\n+    if (this.logoPreviewImage) {\n+      this.logoPreviewImage.classList.toggle('is-hidden', !visible);\n+    }\n+    if (this.logoPreviewDefault) {\n+      this.logoPreviewDefault.classList.toggle('is-hidden', visible);\n+    }\n+    if (this.logoRemoveBtn) {\n+      this.logoRemoveBtn.classList.toggle('is-hidden', !visible);\n+    }\n+  }\n+  hydrateDefaultLogoPreview() {\n+    if (!this.logoPreviewDefault || this.logoPreviewDefault.children.length > 0) {\n+      return;\n+    }\n+    const defaultLogoTemplate = document.querySelector(BuilderSettings.selectors.elDefaultLogoTemplate);\n+    const defaultLogoSVG = defaultLogoTemplate?.content?.querySelector('svg') || defaultLogoTemplate?.querySelector('svg') || document.querySelector('.lp-cb-top-header__logo svg');\n+    if (!defaultLogoSVG && !this.defaultLogoURL) {\n+      return;\n+    }\n+    const svgPreviewImage = document.createElement('img');\n+    svgPreviewImage.classList.add('lp-cb-logo-setting__preview-default-image');\n+    svgPreviewImage.setAttribute('aria-hidden', 'true');\n+    svgPreviewImage.alt = 'Course Builder default logo';\n+    if (defaultLogoSVG) {\n+      svgPreviewImage.src = `data:image\u002Fsvg+xml;charset=UTF-8,${encodeURIComponent(defaultLogoSVG.outerHTML)}`;\n+    } else {\n+      svgPreviewImage.src = this.defaultLogoURL;\n+    }\n+    this.logoPreviewDefault.appendChild(svgPreviewImage);\n+  }\n+  removeLogo() {\n+    if (!this.logoIdInput) {\n+      return;\n+    }\n+    this.clearLogoUI();\n+    if (this.logoRemoveInput) {\n+      this.logoRemoveInput.value = 'yes';\n     }\n+    this.handleSettingChange();\n+  }\n+  clearLogoUI() {\n+    if (this.logoPreviewImage) {\n+      this.logoPreviewImage.src = '';\n+    }\n+    if (this.logoIdInput) {\n+      this.logoIdInput.value = 0;\n+    }\n+    this.setLogoVisibility(false);\n+  }\n+  syncHeaderLogo(source = '') {\n+    if (!this.headerLogoLink) {\n+      return;\n+    }\n+    const logoSource = source || this.defaultLogoURL;\n+    if (!logoSource) {\n+      return;\n+    }\n+    let logoImage = this.headerLogoLink.querySelector('.lp-cb-top-header__logo-image');\n+    if (!logoImage) {\n+      logoImage = document.createElement('img');\n+      logoImage.classList.add('lp-cb-top-header__logo-image');\n+      logoImage.alt = 'Course Builder';\n+      logoImage.loading = 'eager';\n+      logoImage.decoding = 'async';\n+      this.headerLogoLink.textContent = '';\n+      this.headerLogoLink.appendChild(logoImage);\n+    }\n+    logoImage.removeAttribute('srcset');\n+    logoImage.removeAttribute('sizes');\n+    logoImage.src = logoSource;\n   }\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js\"\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fswal-icons.js ***!\n+  \\*************************************************************\u002F\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\":\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   SWAL_ICON_DELETE: () => (\u002F* binding *\u002F SWAL_ICON_DELETE),\n+\u002F* harmony export *\u002F   SWAL_ICON_DUPLICATE: () => (\u002F* binding *\u002F SWAL_ICON_DUPLICATE),\n+\u002F* harmony export *\u002F   SWAL_ICON_TRASH_DRAFT: () => (\u002F* binding *\u002F SWAL_ICON_TRASH_DRAFT)\n+\u002F* harmony export *\u002F });\n+const SWAL_ICON_TRASH_DRAFT = `\u003Csvg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cg clip-path=\"url(#clip0_3318_1035)\">\u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M30.628 4C31.6888 4.00023 32.706 4.4218 33.456 5.172L42.828 14.544C43.5782 15.294 43.9998 16.3112 44 17.372V30.628C43.9998 31.6888 43.5782 32.706 42.828 33.456L33.456 42.828C32.706 43.5782 31.6888 43.9998 30.628 44H17.372C16.3112 43.9998 15.294 43.5782 14.544 42.828L5.172 33.456C4.4218 32.706 4.00023 31.6888 4 30.628V17.372C4.00023 16.3112 4.4218 15.294 5.172 14.544L14.544 5.172C15.294 4.4218 16.3112 4.00023 17.372 4H30.628ZM24 30C23.4696 30 22.9609 30.2107 22.5858 30.5858C22.2107 30.9609 22 31.4696 22 32C22 32.5304 22.2107 33.0391 22.5858 33.4142C22.9609 33.7893 23.4696 34 24 34C24.5304 34 25.0391 33.7893 25.4142 33.4142C25.7893 33.0391 26 32.5304 26 32C26 31.4696 25.7893 30.9609 25.4142 30.5858C25.0391 30.2107 24.5304 30 24 30ZM24 12C23.5101 12.0001 23.0373 12.1799 22.6713 12.5054C22.3052 12.8309 22.0713 13.2795 22.014 13.766L22 14V26C22.0006 26.5098 22.1958 27.0001 22.5457 27.3707C22.8956 27.7414 23.3739 27.9645 23.8828 27.9943C24.3917 28.0242 24.8928 27.8587 25.2837 27.5315C25.6746 27.2043 25.9258 26.7402 25.986 26.234L26 26V14C26 13.4696 25.7893 12.9609 25.4142 12.5858C25.0391 12.2107 24.5304 12 24 12Z\" fill=\"#F8A100\"\u002F>\u003C\u002Fg>\u003Cdefs>\u003CclipPath id=\"clip0_3318_1035\">\u003Crect width=\"48\" height=\"48\" fill=\"white\"\u002F>\u003C\u002FclipPath>\u003C\u002Fdefs>\u003C\u002Fsvg>`;\n+const SWAL_ICON_DUPLICATE = `\u003Csvg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cg clip-path=\"url(#clip0_3318_1040)\">\u003Cpath d=\"M24 4C35.046 4 44 12.954 44 24C44 35.046 35.046 44 24 44C12.954 44 4 35.046 4 24C4 12.954 12.954 4 24 4ZM23.98 20H22C21.4902 20.0006 20.9999 20.1958 20.6293 20.5457C20.2586 20.8956 20.0355 21.3739 20.0057 21.8828C19.9758 22.3917 20.1413 22.8928 20.4685 23.2837C20.7957 23.6746 21.2598 23.9258 21.766 23.986L22 24V33.98C22 35.02 22.788 35.88 23.8 35.988L24.02 36H25C25.4206 36 25.8305 35.8674 26.1715 35.621C26.5124 35.3747 26.767 35.0271 26.899 34.6277C27.031 34.2283 27.0337 33.7975 26.9068 33.3965C26.7799 32.9955 26.5298 32.6447 26.192 32.394L26 32.268V22.02C26 20.98 25.212 20.12 24.2 20.012L23.98 20ZM24 14C23.4696 14 22.9609 14.2107 22.5858 14.5858C22.2107 14.9609 22 15.4696 22 16C22 16.5304 22.2107 17.0391 22.5858 17.4142C22.9609 17.7893 23.4696 18 24 18C24.5304 18 25.0391 17.7893 25.4142 17.4142C25.7893 17.0391 26 16.5304 26 16C26 15.4696 25.7893 14.9609 25.4142 14.5858C25.0391 14.2107 24.5304 14 24 14Z\" fill=\"#2E91FA\"\u002F>\u003C\u002Fg>\u003Cdefs>\u003CclipPath id=\"clip0_3318_1040\">\u003Crect width=\"48\" height=\"48\" fill=\"white\"\u002F>\u003C\u002FclipPath>\u003C\u002Fdefs>\u003C\u002Fsvg>`;\n+const SWAL_ICON_DELETE = `\u003Csvg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\u003Cg clip-path=\"url(#clip0_5385_4939)\">\u003Cpath d=\"M26.5983 6.2959L43.8663 36.2039C44.1297 36.66 44.2683 37.1773 44.2683 37.7039C44.2683 38.2305 44.1297 38.7478 43.8664 39.2039C43.6031 39.6599 43.2244 40.0386 42.7683 40.3019C42.3123 40.5653 41.795 40.7039 41.2683 40.7039H6.73235C6.20574 40.7039 5.68842 40.5653 5.23237 40.3019C4.77633 40.0386 4.39762 39.6599 4.13433 39.2039C3.87103 38.7478 3.73242 38.2305 3.73242 37.7039C3.73243 37.1773 3.87104 36.66 4.13435 36.2039L21.4023 6.2959C22.5563 4.2959 25.4423 4.2959 26.5983 6.2959ZM24.0003 29.9999C23.4699 29.9999 22.9612 30.2106 22.5861 30.5857C22.2111 30.9608 22.0003 31.4695 22.0003 31.9999C22.0003 32.5303 22.2111 33.039 22.5861 33.4141C22.9612 33.7892 23.4699 33.9999 24.0003 33.9999C24.5308 33.9999 25.0395 33.7892 25.4146 33.4141C25.7896 33.039 26.0003 32.5303 26.0003 31.9999C26.0003 31.4695 25.7896 30.9608 25.4146 30.5857C25.0395 30.2106 24.5308 29.9999 24.0003 29.9999ZM24.0003 15.9999C23.5105 16 23.0377 16.1798 22.6716 16.5053C22.3055 16.8308 22.0717 17.2794 22.0143 17.7659L22.0003 17.9999V25.9999C22.0009 26.5097 22.1961 27 22.546 27.3706C22.896 27.7413 23.3743 27.9644 23.8831 27.9942C24.392 28.0241 24.8931 27.8586 25.284 27.5314C25.6749 27.2042 25.9261 26.7401 25.9863 26.2339L26.0003 25.9999V17.9999C26.0003 17.4695 25.7896 16.9608 25.4146 16.5857C25.0395 16.2106 24.5308 15.9999 24.0003 15.9999Z\" fill=\"#E31A1A\"\u002F>\u003C\u002Fg>\u003Cdefs>\u003CclipPath id=\"clip0_5385_4939\">\u003Crect width=\"48\" height=\"48\" fill=\"white\"\u002F>\u003C\u002FclipPath>\u003C\u002Fdefs>\u003C\u002Fsvg>`;\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\"\n \u002F*!*************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js ***!\n   \\*************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -9957,13 +16194,13 @@\n   };\n }\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\"\n \u002F*!*************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js ***!\n   \\*************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -10011,13 +16248,13 @@\n   toastify.showToast();\n };\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\":\n+\u002F***\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\"\n \u002F*!********************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js ***!\n   \\********************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -10339,13 +16576,13 @@\n   });\n };\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fcjs.js!.\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fcjs.js!.\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\"\n \u002F*!*****************************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fcjs.js!.\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css ***!\n   \\*****************************************************************************************\u002F\n-\u002F***\u002F ((module, __webpack_exports__, __webpack_require__) => {\n+(module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -10451,13 +16688,13 @@\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002Fapi.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002Fapi.js\"\n \u002F*!*****************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002Fapi.js ***!\n   \\*****************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -10546,13 +16783,13 @@\n   return list;\n };\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002FsourceMaps.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002FsourceMaps.js\"\n \u002F*!************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fcss-loader\u002Fdist\u002Fruntime\u002FsourceMaps.js ***!\n   \\************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -10572,13 +16809,13 @@\n   return [content].join(\"\\n\");\n };\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fsortablejs\u002Fmodular\u002Fsortable.esm.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fsortablejs\u002Fmodular\u002Fsortable.esm.js\"\n \u002F*!*********************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fsortablejs\u002Fmodular\u002Fsortable.esm.js ***!\n   \\*********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -10589,136 +16826,118 @@\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n \u002F**!\n- * Sortable 1.15.6\n+ * Sortable 1.15.7\n  * @author\tRubaXa   \u003Ctrash@rubaxa.org>\n  * @author\towenm    \u003Cowen23355@gmail.com>\n  * @license MIT\n  *\u002F\n-function ownKeys(object, enumerableOnly) {\n-  var keys = Object.keys(object);\n-  if (Object.getOwnPropertySymbols) {\n-    var symbols = Object.getOwnPropertySymbols(object);\n-    if (enumerableOnly) {\n-      symbols = symbols.filter(function (sym) {\n-        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n-      });\n-    }\n-    keys.push.apply(keys, symbols);\n-  }\n-  return keys;\n+function _arrayLikeToArray(r, a) {\n+  (null == a || a > r.length) && (a = r.length);\n+  for (var e = 0, n = Array(a); e \u003C a; e++) n[e] = r[e];\n+  return n;\n+}\n+function _arrayWithoutHoles(r) {\n+  if (Array.isArray(r)) return _arrayLikeToArray(r);\n+}\n+function _defineProperty(e, r, t) {\n+  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n+    value: t,\n+    enumerable: !0,\n+    configurable: !0,\n+    writable: !0\n+  }) : e[r] = t, e;\n }\n-function _objectSpread2(target) {\n-  for (var i = 1; i \u003C arguments.length; i++) {\n-    var source = arguments[i] != null ? arguments[i] : {};\n-    if (i % 2) {\n-      ownKeys(Object(source), true).forEach(function (key) {\n-        _defineProperty(target, key, source[key]);\n-      });\n-    } else if (Object.getOwnPropertyDescriptors) {\n-      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n-    } else {\n-      ownKeys(Object(source)).forEach(function (key) {\n-        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n-      });\n+function _extends() {\n+  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n+    for (var e = 1; e \u003C arguments.length; e++) {\n+      var t = arguments[e];\n+      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n     }\n-  }\n-  return target;\n+    return n;\n+  }, _extends.apply(null, arguments);\n }\n-function _typeof(obj) {\n-  \"@babel\u002Fhelpers - typeof\";\n-\n-  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n-    _typeof = function (obj) {\n-      return typeof obj;\n-    };\n-  } else {\n-    _typeof = function (obj) {\n-      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n-    };\n-  }\n-  return _typeof(obj);\n+function _iterableToArray(r) {\n+  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n }\n-function _defineProperty(obj, key, value) {\n-  if (key in obj) {\n-    Object.defineProperty(obj, key, {\n-      value: value,\n-      enumerable: true,\n-      configurable: true,\n-      writable: true\n-    });\n-  } else {\n-    obj[key] = value;\n+function _nonIterableSpread() {\n+  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n+}\n+function ownKeys(e, r) {\n+  var t = Object.keys(e);\n+  if (Object.getOwnPropertySymbols) {\n+    var o = Object.getOwnPropertySymbols(e);\n+    r && (o = o.filter(function (r) {\n+      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n+    })), t.push.apply(t, o);\n+  }\n+  return t;\n+}\n+function _objectSpread2(e) {\n+  for (var r = 1; r \u003C arguments.length; r++) {\n+    var t = null != arguments[r] ? arguments[r] : {};\n+    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n+      _defineProperty(e, r, t[r]);\n+    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n+      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n+    });\n+  }\n+  return e;\n+}\n+function _objectWithoutProperties(e, t) {\n+  if (null == e) return {};\n+  var o,\n+    r,\n+    i = _objectWithoutPropertiesLoose(e, t);\n+  if (Object.getOwnPropertySymbols) {\n+    var n = Object.getOwnPropertySymbols(e);\n+    for (r = 0; r \u003C n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n   }\n-  return obj;\n+  return i;\n }\n-function _extends() {\n-  _extends = Object.assign || function (target) {\n-    for (var i = 1; i \u003C arguments.length; i++) {\n-      var source = arguments[i];\n-      for (var key in source) {\n-        if (Object.prototype.hasOwnProperty.call(source, key)) {\n-          target[key] = source[key];\n-        }\n-      }\n-    }\n-    return target;\n-  };\n-  return _extends.apply(this, arguments);\n+function _objectWithoutPropertiesLoose(r, e) {\n+  if (null == r) return {};\n+  var t = {};\n+  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n+    if (-1 !== e.indexOf(n)) continue;\n+    t[n] = r[n];\n+  }\n+  return t;\n+}\n+function _toConsumableArray(r) {\n+  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n+}\n+function _toPrimitive(t, r) {\n+  if (\"object\" != typeof t || !t) return t;\n+  var e = t[Symbol.toPrimitive];\n+  if (void 0 !== e) {\n+    var i = e.call(t, r || \"default\");\n+    if (\"object\" != typeof i) return i;\n+    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n+  }\n+  return (\"string\" === r ? String : Number)(t);\n+}\n+function _toPropertyKey(t) {\n+  var i = _toPrimitive(t, \"string\");\n+  return \"symbol\" == typeof i ? i : i + \"\";\n }\n-function _objectWithoutPropertiesLoose(source, excluded) {\n-  if (source == null) return {};\n-  var target = {};\n-  var sourceKeys = Object.keys(source);\n-  var key, i;\n-  for (i = 0; i \u003C sourceKeys.length; i++) {\n-    key = sourceKeys[i];\n-    if (excluded.indexOf(key) >= 0) continue;\n-    target[key] = source[key];\n-  }\n-  return target;\n-}\n-function _objectWithoutProperties(source, excluded) {\n-  if (source == null) return {};\n-  var target = _objectWithoutPropertiesLoose(source, excluded);\n-  var key, i;\n-  if (Object.getOwnPropertySymbols) {\n-    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n-    for (i = 0; i \u003C sourceSymbolKeys.length; i++) {\n-      key = sourceSymbolKeys[i];\n-      if (excluded.indexOf(key) >= 0) continue;\n-      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n-      target[key] = source[key];\n-    }\n-  }\n-  return target;\n-}\n-function _toConsumableArray(arr) {\n-  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n-}\n-function _arrayWithoutHoles(arr) {\n-  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n-}\n-function _iterableToArray(iter) {\n-  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n-}\n-function _unsupportedIterableToArray(o, minLen) {\n-  if (!o) return;\n-  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n-  var n = Object.prototype.toString.call(o).slice(8, -1);\n-  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n-  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n-  if (n === \"Arguments\" || \u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(n)) return _arrayLikeToArray(o, minLen);\n-}\n-function _arrayLikeToArray(arr, len) {\n-  if (len == null || len > arr.length) len = arr.length;\n-  for (var i = 0, arr2 = new Array(len); i \u003C len; i++) arr2[i] = arr[i];\n-  return arr2;\n+function _typeof(o) {\n+  \"@babel\u002Fhelpers - typeof\";\n+\n+  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n+    return typeof o;\n+  } : function (o) {\n+    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n+  }, _typeof(o);\n }\n-function _nonIterableSpread() {\n-  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n+function _unsupportedIterableToArray(r, a) {\n+  if (r) {\n+    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n+    var t = {}.toString.call(r).slice(8, -1);\n+    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || \u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(t) ? _arrayLikeToArray(r, a) : void 0;\n+  }\n }\n \n-var version = \"1.15.6\";\n+var version = \"1.15.7\";\n \n function userAgent(pattern) {\n   if (typeof window !== 'undefined' && window.navigator) {\n@@ -10761,7 +16980,7 @@\n   return false;\n }\n function getParentOrHost(el) {\n-  return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n+  return el.host && el !== document && el.host.nodeType && el.host !== el ? el.host : el.parentNode;\n }\n function closest( \u002F**HTMLElement*\u002Fel, \u002F**String*\u002Fselector, \u002F**HTMLElement*\u002Fctx, includeCTX) {\n   if (el) {\n@@ -12645,8 +18864,11 @@\n   _nulling: function _nulling() {\n     pluginEvent('nulling', this);\n     rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n-    savedInputChecked.forEach(function (el) {\n-      el.checked = true;\n+    var el = this.el;\n+    savedInputChecked.forEach(function (checkEl) {\n+      if (el.contains(checkEl)) {\n+        checkEl.checked = true;\n+      }\n     });\n     savedInputChecked.length = lastDx = lastDy = 0;\n   },\n@@ -13968,13 +20190,13 @@\n \n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css\"\n \u002F*!***************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.css ***!\n   \\***************************************************\u002F\n-\u002F***\u002F ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -14023,13 +20245,13 @@\n        \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinjectStylesIntoStyleTag.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinjectStylesIntoStyleTag.js\"\n \u002F*!****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinjectStylesIntoStyleTag.js ***!\n   \\****************************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -14117,13 +20339,13 @@\n   };\n };\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertBySelector.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertBySelector.js\"\n \u002F*!********************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertBySelector.js ***!\n   \\********************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -14161,13 +20383,13 @@\n }\n module.exports = insertBySelector;\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertStyleElement.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertStyleElement.js\"\n \u002F*!**********************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FinsertStyleElement.js ***!\n   \\**********************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -14181,13 +20403,13 @@\n }\n module.exports = insertStyleElement;\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FsetAttributesWithoutAttributes.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FsetAttributesWithoutAttributes.js\"\n \u002F*!**********************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FsetAttributesWithoutAttributes.js ***!\n   \\**********************************************************************************\u002F\n-\u002F***\u002F ((module, __unused_webpack_exports, __webpack_require__) => {\n+(module, __unused_webpack_exports, __webpack_require__) {\n \n \"use strict\";\n \n@@ -14201,13 +20423,13 @@\n }\n module.exports = setAttributesWithoutAttributes;\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleDomAPI.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleDomAPI.js\"\n \u002F*!***************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleDomAPI.js ***!\n   \\***************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -14272,13 +20494,13 @@\n }\n module.exports = domAPI;\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleTagTransform.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleTagTransform.js\"\n \u002F*!*********************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fstyle-loader\u002Fdist\u002Fruntime\u002FstyleTagTransform.js ***!\n   \\*********************************************************************\u002F\n-\u002F***\u002F ((module) => {\n+(module) {\n \n \"use strict\";\n \n@@ -14296,16 +20518,16 @@\n }\n module.exports = styleTagTransform;\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js\"\n \u002F*!**********************************************************!*\\\n   !*** .\u002Fnode_modules\u002Fsweetalert2\u002Fdist\u002Fsweetalert2.all.js ***!\n   \\**********************************************************\u002F\n-\u002F***\u002F (function(module) {\n+(module) {\n \n \u002F*!\n-* sweetalert2 v11.22.5\n+* sweetalert2 v11.26.17\n * Released under the MIT License.\n *\u002F\n (function (global, factory) {\n@@ -14452,25 +20674,25 @@\n    * If `arg` is a function, call it (with no arguments or context) and return the result.\n    * Otherwise, just pass the value through\n    *\n-   * @param {Function | any} arg\n-   * @returns {any}\n+   * @param {(() => *) | *} arg\n+   * @returns {*}\n    *\u002F\n   const callIfFunction = arg => typeof arg === 'function' ? arg() : arg;\n \n   \u002F**\n-   * @param {any} arg\n+   * @param {*} arg\n    * @returns {boolean}\n    *\u002F\n   const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function';\n \n   \u002F**\n-   * @param {any} arg\n-   * @returns {Promise\u003Cany>}\n+   * @param {*} arg\n+   * @returns {Promise\u003C*>}\n    *\u002F\n   const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg);\n \n   \u002F**\n-   * @param {any} arg\n+   * @param {*} arg\n    * @returns {boolean}\n    *\u002F\n   const isPromise = arg => arg && Promise.resolve(arg) === arg;\n@@ -14848,14 +21070,14 @@\n   \u002F**\n    * @param {HTMLElement} elem\n    * @param {string} property\n-   * @param {*} value\n+   * @param {string | number | null | undefined} value\n    *\u002F\n   const applyNumericalStyle = (elem, property, value) => {\n-    if (value === `${parseInt(value)}`) {\n+    if (value === `${parseInt(`${value}`)}`) {\n       value = parseInt(value);\n     }\n-    if (value || parseInt(value) === 0) {\n-      elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : value);\n+    if (value || parseInt(`${value}`) === 0) {\n+      elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : (\u002F** @type {string} *\u002Fvalue));\n     } else {\n       elem.style.removeProperty(property);\n     }\n@@ -14914,7 +21136,7 @@\n \n   \u002F**\n    * @param {HTMLElement} elem\n-   * @param {any} condition\n+   * @param {boolean | string | null | undefined} condition\n    * @param {string} display\n    *\u002F\n   const toggle = (elem, condition, display = 'flex') => {\n@@ -14931,7 +21153,7 @@\n    * @param {HTMLElement | null} elem\n    * @returns {boolean}\n    *\u002F\n-  const isVisible$1 = elem => !!(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n+  const isVisible$1 = elem => Boolean(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length));\n \n   \u002F**\n    * @returns {boolean}\n@@ -14942,7 +21164,7 @@\n    * @param {HTMLElement} elem\n    * @returns {boolean}\n    *\u002F\n-  const isScrollable = elem => !!(elem.scrollHeight > elem.clientHeight);\n+  const isScrollable = elem => Boolean(elem.scrollHeight > elem.clientHeight);\n \n   \u002F**\n    * @param {HTMLElement} element\n@@ -14950,7 +21172,7 @@\n    * @returns {boolean}\n    *\u002F\n   const selfOrParentIsScrollable = (element, stopElement) => {\n-    let parent = element;\n+    let parent = \u002F** @type {HTMLElement | null} *\u002Felement;\n     while (parent && parent !== stopElement) {\n       if (isScrollable(parent)) {\n         return true;\n@@ -15057,50 +21279,81 @@\n       return false;\n     }\n     oldContainer.remove();\n-    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], swalClasses['has-column']]);\n+    removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'],\n+    \u002F\u002F @ts-ignore: 'has-column' is not defined in swalClasses but may be set dynamically\n+    swalClasses['has-column']]);\n     return true;\n   };\n   const resetValidationMessage$1 = () => {\n-    globalState.currentInstance.resetValidationMessage();\n+    if (globalState.currentInstance) {\n+      globalState.currentInstance.resetValidationMessage();\n+    }\n   };\n   const addInputChangeListeners = () => {\n     const popup = getPopup();\n+    if (!popup) {\n+      return;\n+    }\n     const input = getDirectChildByClass(popup, swalClasses.input);\n     const file = getDirectChildByClass(popup, swalClasses.file);\n-    \u002F** @type {HTMLInputElement} *\u002F\n+    \u002F** @type {HTMLInputElement | null} *\u002F\n     const range = popup.querySelector(`.${swalClasses.range} input`);\n-    \u002F** @type {HTMLOutputElement} *\u002F\n+    \u002F** @type {HTMLOutputElement | null} *\u002F\n     const rangeOutput = popup.querySelector(`.${swalClasses.range} output`);\n     const select = getDirectChildByClass(popup, swalClasses.select);\n-    \u002F** @type {HTMLInputElement} *\u002F\n+    \u002F** @type {HTMLInputElement | null} *\u002F\n     const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`);\n     const textarea = getDirectChildByClass(popup, swalClasses.textarea);\n-    input.oninput = resetValidationMessage$1;\n-    file.onchange = resetValidationMessage$1;\n-    select.onchange = resetValidationMessage$1;\n-    checkbox.onchange = resetValidationMessage$1;\n-    textarea.oninput = resetValidationMessage$1;\n-    range.oninput = () => {\n-      resetValidationMessage$1();\n-      rangeOutput.value = range.value;\n-    };\n-    range.onchange = () => {\n-      resetValidationMessage$1();\n-      rangeOutput.value = range.value;\n-    };\n+    if (input) {\n+      input.oninput = resetValidationMessage$1;\n+    }\n+    if (file) {\n+      file.onchange = resetValidationMessage$1;\n+    }\n+    if (select) {\n+      select.onchange = resetValidationMessage$1;\n+    }\n+    if (checkbox) {\n+      checkbox.onchange = resetValidationMessage$1;\n+    }\n+    if (textarea) {\n+      textarea.oninput = resetValidationMessage$1;\n+    }\n+    if (range && rangeOutput) {\n+      range.oninput = () => {\n+        resetValidationMessage$1();\n+        rangeOutput.value = range.value;\n+      };\n+      range.onchange = () => {\n+        resetValidationMessage$1();\n+        rangeOutput.value = range.value;\n+      };\n+    }\n   };\n \n   \u002F**\n    * @param {string | HTMLElement} target\n    * @returns {HTMLElement}\n    *\u002F\n-  const getTarget = target => typeof target === 'string' ? document.querySelector(target) : target;\n+  const getTarget = target => {\n+    if (typeof target === 'string') {\n+      const element = document.querySelector(target);\n+      if (!element) {\n+        throw new Error(`Target element \"${target}\" not found`);\n+      }\n+      return \u002F** @type {HTMLElement} *\u002Felement;\n+    }\n+    return target;\n+  };\n \n   \u002F**\n    * @param {SweetAlertOptions} params\n    *\u002F\n   const setupAccessibility = params => {\n     const popup = getPopup();\n+    if (!popup) {\n+      return;\n+    }\n     popup.setAttribute('role', params.toast ? 'alert' : 'dialog');\n     popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive');\n     if (!params.toast) {\n@@ -15114,11 +21367,12 @@\n   const setupRTL = targetElement => {\n     if (window.getComputedStyle(targetElement).direction === 'rtl') {\n       addClass(getContainer(), swalClasses.rtl);\n+      globalState.isRTL = true;\n     }\n   };\n \n   \u002F**\n-   * Add modal + backdrop + no-war message for Russians to DOM\n+   * Add modal + backdrop to DOM\n    *\n    * @param {SweetAlertOptions} params\n    *\u002F\n@@ -15136,7 +21390,7 @@\n     }\n     setInnerHtml(container, sweetHTML);\n     container.dataset['swal2Theme'] = params.theme;\n-    const targetElement = getTarget(params.target);\n+    const targetElement = getTarget(params.target || 'body');\n     targetElement.appendChild(container);\n     if (params.topLayer) {\n       container.setAttribute('popover', '');\n@@ -15169,12 +21423,12 @@\n   };\n \n   \u002F**\n-   * @param {any} param\n+   * @param {object} param\n    * @param {HTMLElement} target\n    *\u002F\n   const handleObject = (param, target) => {\n     \u002F\u002F JQuery element(s)\n-    if (param.jquery) {\n+    if ('jquery' in param) {\n       handleJqueryElem(target, param);\n     }\n \n@@ -15573,96 +21827,119 @@\n   const renderInputType = {};\n \n   \u002F**\n-   * @param {HTMLInputElement} input\n+   * @param {Input | HTMLElement} input\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLInputElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = \u002F** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} *\u002F\n   (input, params) => {\n-    checkAndSetInputValue(input, params.inputValue);\n-    setInputLabel(input, input, params);\n-    setInputPlaceholder(input, params);\n-    input.type = params.input;\n-    return input;\n+    const inputElement = \u002F** @type {HTMLInputElement} *\u002Finput;\n+    checkAndSetInputValue(inputElement, params.inputValue);\n+    setInputLabel(inputElement, inputElement, params);\n+    setInputPlaceholder(inputElement, params);\n+    inputElement.type = \u002F** @type {string} *\u002Fparams.input;\n+    return inputElement;\n   };\n \n   \u002F**\n-   * @param {HTMLInputElement} input\n+   * @param {Input | HTMLElement} input\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLInputElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.file = (input, params) => {\n-    setInputLabel(input, input, params);\n-    setInputPlaceholder(input, params);\n-    return input;\n+    const inputElement = \u002F** @type {HTMLInputElement} *\u002Finput;\n+    setInputLabel(inputElement, inputElement, params);\n+    setInputPlaceholder(inputElement, params);\n+    return inputElement;\n   };\n \n   \u002F**\n-   * @param {HTMLInputElement} range\n+   * @param {Input | HTMLElement} range\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLInputElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.range = (range, params) => {\n-    const rangeInput = range.querySelector('input');\n-    const rangeOutput = range.querySelector('output');\n-    checkAndSetInputValue(rangeInput, params.inputValue);\n-    rangeInput.type = params.input;\n-    checkAndSetInputValue(rangeOutput, params.inputValue);\n-    setInputLabel(rangeInput, range, params);\n-    return range;\n+    const rangeContainer = \u002F** @type {HTMLElement} *\u002Frange;\n+    const rangeInput = rangeContainer.querySelector('input');\n+    const rangeOutput = rangeContainer.querySelector('output');\n+    if (rangeInput) {\n+      checkAndSetInputValue(rangeInput, params.inputValue);\n+      rangeInput.type = \u002F** @type {string} *\u002Fparams.input;\n+      setInputLabel(rangeInput, \u002F** @type {Input} *\u002Frange, params);\n+    }\n+    if (rangeOutput) {\n+      checkAndSetInputValue(rangeOutput, params.inputValue);\n+    }\n+    return \u002F** @type {Input} *\u002Frange;\n   };\n \n   \u002F**\n-   * @param {HTMLSelectElement} select\n+   * @param {Input | HTMLElement} select\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLSelectElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.select = (select, params) => {\n-    select.textContent = '';\n+    const selectElement = \u002F** @type {HTMLSelectElement} *\u002Fselect;\n+    selectElement.textContent = '';\n     if (params.inputPlaceholder) {\n       const placeholder = document.createElement('option');\n       setInnerHtml(placeholder, params.inputPlaceholder);\n       placeholder.value = '';\n       placeholder.disabled = true;\n       placeholder.selected = true;\n-      select.appendChild(placeholder);\n+      selectElement.appendChild(placeholder);\n     }\n-    setInputLabel(select, select, params);\n-    return select;\n+    setInputLabel(selectElement, selectElement, params);\n+    return selectElement;\n   };\n \n   \u002F**\n-   * @param {HTMLInputElement} radio\n-   * @returns {HTMLInputElement}\n+   * @param {Input | HTMLElement} radio\n+   * @returns {Input}\n    *\u002F\n   renderInputType.radio = radio => {\n-    radio.textContent = '';\n-    return radio;\n+    const radioElement = \u002F** @type {HTMLElement} *\u002Fradio;\n+    radioElement.textContent = '';\n+    return \u002F** @type {Input} *\u002Fradio;\n   };\n \n   \u002F**\n-   * @param {HTMLLabelElement} checkboxContainer\n+   * @param {Input | HTMLElement} checkboxContainer\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLInputElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.checkbox = (checkboxContainer, params) => {\n-    const checkbox = getInput$1(getPopup(), 'checkbox');\n+    const popup = getPopup();\n+    if (!popup) {\n+      throw new Error('Popup not found');\n+    }\n+    const checkbox = getInput$1(popup, 'checkbox');\n+    if (!checkbox) {\n+      throw new Error('Checkbox input not found');\n+    }\n     checkbox.value = '1';\n     checkbox.checked = Boolean(params.inputValue);\n-    const label = checkboxContainer.querySelector('span');\n-    setInnerHtml(label, params.inputPlaceholder || params.inputLabel);\n+    const containerElement = \u002F** @type {HTMLElement} *\u002FcheckboxContainer;\n+    const label = containerElement.querySelector('span');\n+    if (label) {\n+      const placeholderOrLabel = params.inputPlaceholder || params.inputLabel;\n+      if (placeholderOrLabel) {\n+        setInnerHtml(label, placeholderOrLabel);\n+      }\n+    }\n     return checkbox;\n   };\n \n   \u002F**\n-   * @param {HTMLTextAreaElement} textarea\n+   * @param {Input | HTMLElement} textarea\n    * @param {SweetAlertOptions} params\n-   * @returns {HTMLTextAreaElement}\n+   * @returns {Input}\n    *\u002F\n   renderInputType.textarea = (textarea, params) => {\n-    checkAndSetInputValue(textarea, params.inputValue);\n-    setInputPlaceholder(textarea, params);\n-    setInputLabel(textarea, textarea, params);\n+    const textareaElement = \u002F** @type {HTMLTextAreaElement} *\u002Ftextarea;\n+    checkAndSetInputValue(textareaElement, params.inputValue);\n+    setInputPlaceholder(textareaElement, params);\n+    setInputLabel(textareaElement, textareaElement, params);\n \n     \u002F**\n      * @param {HTMLElement} el\n@@ -15674,26 +21951,33 @@\n     setTimeout(() => {\n       \u002F\u002F https:\u002F\u002Fgithub.com\u002Fsweetalert2\u002Fsweetalert2\u002Fissues\u002F1699\n       if ('MutationObserver' in window) {\n-        const initialPopupWidth = parseInt(window.getComputedStyle(getPopup()).width);\n+        const popup = getPopup();\n+        if (!popup) {\n+          return;\n+        }\n+        const initialPopupWidth = parseInt(window.getComputedStyle(popup).width);\n         const textareaResizeHandler = () => {\n           \u002F\u002F check if texarea is still in document (i.e. popup wasn't closed in the meantime)\n-          if (!document.body.contains(textarea)) {\n+          if (!document.body.contains(textareaElement)) {\n             return;\n           }\n-          const textareaWidth = textarea.offsetWidth + getMargin(textarea);\n-          if (textareaWidth > initialPopupWidth) {\n-            getPopup().style.width = `${textareaWidth}px`;\n-          } else {\n-            applyNumericalStyle(getPopup(), 'width', params.width);\n+          const textareaWidth = textareaElement.offsetWidth + getMargin(textareaElement);\n+          const popupElement = getPopup();\n+          if (popupElement) {\n+            if (textareaWidth > initialPopupWidth) {\n+              popupElement.style.width = `${textareaWidth}px`;\n+            } else {\n+              applyNumericalStyle(popupElement, 'width', params.width);\n+            }\n           }\n         };\n-        new MutationObserver(textareaResizeHandler).observe(textarea, {\n+        new MutationObserver(textareaResizeHandler).observe(textareaElement, {\n           attributes: true,\n           attributeFilter: ['style']\n         });\n       }\n     });\n-    return textarea;\n+    return textareaElement;\n   };\n \n   \u002F**\n@@ -15737,7 +22021,7 @@\n       return;\n     }\n     showWhenInnerHtmlPresent(footer);\n-    toggle(footer, params.footer, 'block');\n+    toggle(footer, Boolean(params.footer), 'block');\n     if (params.footer) {\n       parseHtmlToContainer(params.footer, footer);\n     }\n@@ -15957,7 +22241,11 @@\n    *\u002F\n   const down = event => {\n     const popup = getPopup();\n-    if (event.target === popup || getIcon().contains(\u002F** @type {HTMLElement} *\u002Fevent.target)) {\n+    if (!popup) {\n+      return;\n+    }\n+    const icon = getIcon();\n+    if (event.target === popup || icon && icon.contains(\u002F** @type {HTMLElement} *\u002Fevent.target)) {\n       dragging = true;\n       const clientXY = getClientXY(event);\n       mousedownX = clientXY.clientX;\n@@ -15973,12 +22261,17 @@\n    *\u002F\n   const move = event => {\n     const popup = getPopup();\n+    if (!popup) {\n+      return;\n+    }\n     if (dragging) {\n       let {\n         clientX,\n         clientY\n       } = getClientXY(event);\n-      popup.style.insetInlineStart = `${initialX + (clientX - mousedownX)}px`;\n+      const deltaX = clientX - mousedownX;\n+      \u002F\u002F In RTL mode, negate the horizontal delta since insetInlineStart refers to the right edge\n+      popup.style.insetInlineStart = `${initialX + (globalState.isRTL ? -deltaX : deltaX)}px`;\n       popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`;\n     }\n   };\n@@ -16154,7 +22447,7 @@\n       return;\n     }\n     showWhenInnerHtmlPresent(title);\n-    toggle(title, params.title || params.titleText, 'block');\n+    toggle(title, Boolean(params.title || params.titleText), 'block');\n     if (params.title) {\n       parseHtmlToContainer(params.title, title);\n     }\n@@ -16171,6 +22464,7 @@\n    * @param {SweetAlertOptions} params\n    *\u002F\n   const render = (instance, params) => {\n+    var _globalState$eventEmi;\n     renderPopup(instance, params);\n     renderContainer(instance, params);\n     renderProgressSteps(instance, params);\n@@ -16185,7 +22479,7 @@\n     if (typeof params.didRender === 'function' && popup) {\n       params.didRender(popup);\n     }\n-    globalState.eventEmitter.emit('didRender', popup);\n+    (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('didRender', popup);\n   };\n \n   \u002F*\n@@ -16219,8 +22513,6 @@\n     return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click();\n   };\n \n-  \u002F** @typedef {'cancel' | 'backdrop' | 'close' | 'esc' | 'timer'} DismissReason *\u002F\n-\n   \u002F** @type {Record\u003CDismissReason, DismissReason>} *\u002F\n   const DismissReason = Object.freeze({\n     cancel: 'cancel',\n@@ -16234,8 +22526,9 @@\n    * @param {GlobalState} globalState\n    *\u002F\n   const removeKeydownHandler = globalState => {\n-    if (globalState.keydownTarget && globalState.keydownHandlerAdded) {\n-      globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, {\n+    if (globalState.keydownTarget && globalState.keydownHandlerAdded && globalState.keydownHandler) {\n+      const handler = \u002F** @type {EventListenerOrEventListenerObject} *\u002F \u002F** @type {unknown} *\u002FglobalState.keydownHandler;\n+      globalState.keydownTarget.removeEventListener('keydown', handler, {\n         capture: globalState.keydownListenerCapture\n       });\n       globalState.keydownHandlerAdded = false;\n@@ -16245,18 +22538,24 @@\n   \u002F**\n    * @param {GlobalState} globalState\n    * @param {SweetAlertOptions} innerParams\n-   * @param {*} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const addKeydownHandler = (globalState, innerParams, dismissWith) => {\n     removeKeydownHandler(globalState);\n     if (!innerParams.toast) {\n-      globalState.keydownHandler = e => keydownHandler(innerParams, e, dismissWith);\n-      globalState.keydownTarget = innerParams.keydownListenerCapture ? window : getPopup();\n-      globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n-      globalState.keydownTarget.addEventListener('keydown', globalState.keydownHandler, {\n-        capture: globalState.keydownListenerCapture\n-      });\n-      globalState.keydownHandlerAdded = true;\n+      \u002F** @type {(this: HTMLElement, event: KeyboardEvent) => void} *\u002F\n+      const handler = e => keydownHandler(innerParams, e, dismissWith);\n+      globalState.keydownHandler = handler;\n+      const target = innerParams.keydownListenerCapture ? window : getPopup();\n+      if (target) {\n+        globalState.keydownTarget = target;\n+        globalState.keydownListenerCapture = innerParams.keydownListenerCapture;\n+        const eventHandler = \u002F** @type {EventListenerOrEventListenerObject} *\u002F \u002F** @type {unknown} *\u002Fhandler;\n+        globalState.keydownTarget.addEventListener('keydown', eventHandler, {\n+          capture: globalState.keydownListenerCapture\n+        });\n+        globalState.keydownHandlerAdded = true;\n+      }\n     }\n   };\n \n@@ -16296,7 +22595,7 @@\n   \u002F**\n    * @param {SweetAlertOptions} innerParams\n    * @param {KeyboardEvent} event\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const keydownHandler = (innerParams, event, dismissWith) => {\n     if (!innerParams) {\n@@ -16344,7 +22643,11 @@\n     if (!callIfFunction(innerParams.allowEnterKey)) {\n       return;\n     }\n-    const input = getInput$1(getPopup(), innerParams.input);\n+    const popup = getPopup();\n+    if (!popup || !innerParams.input) {\n+      return;\n+    }\n+    const input = getInput$1(popup, innerParams.input);\n     if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) {\n       if (['textarea', 'file'].includes(innerParams.input)) {\n         return; \u002F\u002F do not submit\n@@ -16419,7 +22722,7 @@\n   \u002F**\n    * @param {KeyboardEvent} event\n    * @param {SweetAlertOptions} innerParams\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const handleEsc = (event, innerParams, dismissWith) => {\n     event.preventDefault();\n@@ -16474,7 +22777,7 @@\n   };\n \n   \u002F\u002F @ts-ignore\n-  const isSafariOrIOS = typeof window !== 'undefined' && !!window.GestureEvent; \u002F\u002F true for Safari desktop + all iOS browsers https:\u002F\u002Fstackoverflow.com\u002Fa\u002F70585394\n+  const isSafariOrIOS = typeof window !== 'undefined' && Boolean(window.GestureEvent); \u002F\u002F true for Safari desktop + all iOS browsers https:\u002F\u002Fstackoverflow.com\u002Fa\u002F70585394\n \n   \u002F**\n    * Fix iOS scrolling\n@@ -16550,11 +22853,13 @@\n   \u002F**\n    * https:\u002F\u002Fgithub.com\u002Fsweetalert2\u002Fsweetalert2\u002Fissues\u002F1786\n    *\n-   * @param {*} event\n+   * @param {TouchEvent} event\n    * @returns {boolean}\n    *\u002F\n   const isStylus = event => {\n-    return event.touches && event.touches.length && event.touches[0].touchType === 'stylus';\n+    return Boolean(event.touches && event.touches.length &&\n+    \u002F\u002F @ts-ignore - touchType is not a standard property\n+    event.touches[0].touchType === 'stylus');\n   };\n \n   \u002F**\n@@ -16623,7 +22928,7 @@\n    * @param {SweetAlert} instance\n    * @param {HTMLElement} container\n    * @param {boolean} returnFocus\n-   * @param {Function} didClose\n+   * @param {(() => void) | undefined} didClose\n    *\u002F\n   function removePopupAndResetState(instance, container, returnFocus, didClose) {\n     if (isToast()) {\n@@ -16660,7 +22965,8 @@\n   \u002F**\n    * Instance method to close sweetAlert\n    *\n-   * @param {any} resolveValue\n+   * @param {SweetAlertResult | undefined} resolveValue\n+   * @this {SweetAlert}\n    *\u002F\n   function close(resolveValue) {\n     resolveValue = prepareResolveValue(resolveValue);\n@@ -16677,6 +22983,11 @@\n       swalPromiseResolve(resolveValue);\n     }\n   }\n+\n+  \u002F**\n+   * @param {SweetAlert} instance\n+   * @returns {boolean}\n+   *\u002F\n   const triggerClosePopup = instance => {\n     const popup = getPopup();\n     if (!popup) {\n@@ -16696,7 +23007,8 @@\n   };\n \n   \u002F**\n-   * @param {any} error\n+   * @param {Error | string} error\n+   * @this {SweetAlert}\n    *\u002F\n   function rejectPromise(error) {\n     const rejectPromise = privateMethods.swalPromiseReject.get(this);\n@@ -16712,6 +23024,7 @@\n    *\u002F\n   const handleAwaitingPromise = instance => {\n     if (instance.isAwaitingPromise) {\n+      \u002F\u002F @ts-ignore\n       delete instance.isAwaitingPromise;\n       \u002F\u002F The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335\n       if (!privateProps.innerParams.get(instance)) {\n@@ -16721,7 +23034,7 @@\n   };\n \n   \u002F**\n-   * @param {any} resolveValue\n+   * @param {SweetAlertResult | undefined} resolveValue\n    * @returns {SweetAlertResult}\n    *\u002F\n   const prepareResolveValue = resolveValue => {\n@@ -16754,11 +23067,11 @@\n       innerParams.willClose(popup);\n     }\n     (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup);\n-    if (animationIsSupported) {\n-      animatePopup(instance, popup, container, innerParams.returnFocus, innerParams.didClose);\n-    } else {\n+    if (animationIsSupported && container) {\n+      animatePopup(instance, popup, container, Boolean(innerParams.returnFocus), innerParams.didClose);\n+    } else if (container) {\n       \u002F\u002F Otherwise, remove immediately\n-      removePopupAndResetState(instance, container, innerParams.returnFocus, innerParams.didClose);\n+      removePopupAndResetState(instance, container, Boolean(innerParams.returnFocus), innerParams.didClose);\n     }\n   };\n \n@@ -16767,7 +23080,7 @@\n    * @param {HTMLElement} popup\n    * @param {HTMLElement} container\n    * @param {boolean} returnFocus\n-   * @param {Function} didClose\n+   * @param {(() => void) | undefined} didClose\n    *\u002F\n   const animatePopup = (instance, popup, container, returnFocus, didClose) => {\n     globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose);\n@@ -16789,7 +23102,7 @@\n \n   \u002F**\n    * @param {SweetAlert} instance\n-   * @param {Function} didClose\n+   * @param {(() => void) | undefined} didClose\n    *\u002F\n   const triggerDidCloseAndDispose = (instance, didClose) => {\n     setTimeout(() => {\n@@ -16917,7 +23230,7 @@\n       return;\n     }\n     \u002F**\n-     * @param {Record\u003Cstring, any>} inputOptions\n+     * @param {*} inputOptions\n      *\u002F\n     const processInputOptions = inputOptions => {\n       if (params.input === 'select') {\n@@ -17044,7 +23357,7 @@\n   \u002F**\n    * Converts `inputOptions` into an array of `[value, label]`s\n    *\n-   * @param {Record\u003Cstring, any>} inputOptions\n+   * @param {*} inputOptions\n    * @typedef {string[]} InputOptionFlattened\n    * @returns {InputOptionFlattened[]}\n    *\u002F\n@@ -17079,7 +23392,7 @@\n    * @returns {boolean}\n    *\u002F\n   const isSelected = (optionValue, inputValue) => {\n-    return !!inputValue && inputValue.toString() === optionValue.toString();\n+    return Boolean(inputValue) && inputValue !== null && inputValue !== undefined && inputValue.toString() === optionValue.toString();\n   };\n \n   \u002F**\n@@ -17110,7 +23423,7 @@\n \n   \u002F**\n    * @param {SweetAlert} instance\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const handleCancelButtonClick = (instance, dismissWith) => {\n     instance.disableButtons();\n@@ -17165,10 +23478,10 @@\n \n   \u002F**\n    * @param {SweetAlert} instance\n-   * @param {any} value\n+   * @param {*} value\n    *\u002F\n   const deny = (instance, value) => {\n-    const innerParams = privateProps.innerParams.get(instance || undefined);\n+    const innerParams = privateProps.innerParams.get(instance);\n     if (innerParams.showLoaderOnDeny) {\n       showLoading(getDenyButton());\n     }\n@@ -17180,14 +23493,14 @@\n           instance.hideLoading();\n           handleAwaitingPromise(instance);\n         } else {\n-          instance.close({\n+          instance.close(\u002F** @type SweetAlertResult *\u002F{\n             isDenied: true,\n             value: typeof preDenyValue === 'undefined' ? value : preDenyValue\n           });\n         }\n-      }).catch(error => rejectWith(instance || undefined, error));\n+      }).catch(error => rejectWith(instance, error));\n     } else {\n-      instance.close({\n+      instance.close(\u002F** @type SweetAlertResult *\u002F{\n         isDenied: true,\n         value\n       });\n@@ -17196,10 +23509,10 @@\n \n   \u002F**\n    * @param {SweetAlert} instance\n-   * @param {any} value\n+   * @param {*} value\n    *\u002F\n   const succeedWith = (instance, value) => {\n-    instance.close({\n+    instance.close(\u002F** @type SweetAlertResult *\u002F{\n       isConfirmed: true,\n       value\n     });\n@@ -17217,10 +23530,10 @@\n   \u002F**\n    *\n    * @param {SweetAlert} instance\n-   * @param {any} value\n+   * @param {*} value\n    *\u002F\n   const confirm = (instance, value) => {\n-    const innerParams = privateProps.innerParams.get(instance || undefined);\n+    const innerParams = privateProps.innerParams.get(instance);\n     if (innerParams.showLoaderOnConfirm) {\n       showLoading();\n     }\n@@ -17235,7 +23548,7 @@\n         } else {\n           succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue);\n         }\n-      }).catch(error => rejectWith(instance || undefined, error));\n+      }).catch(error => rejectWith(instance, error));\n     } else {\n       succeedWith(instance, value);\n     }\n@@ -17243,6 +23556,7 @@\n \n   \u002F**\n    * Hides loader and shows back the button which was hidden by .showLoading()\n+   * @this {SweetAlert}\n    *\u002F\n   function hideLoading() {\n     \u002F\u002F do nothing if popup is closed\n@@ -17266,10 +23580,15 @@\n     domCache.denyButton.disabled = false;\n     domCache.cancelButton.disabled = false;\n   }\n+\n+  \u002F**\n+   * @param {DomCache} domCache\n+   *\u002F\n   const showRelatedButton = domCache => {\n-    const buttonToReplace = domCache.popup.getElementsByClassName(domCache.loader.getAttribute('data-button-to-replace'));\n+    const dataButtonToReplace = domCache.loader.getAttribute('data-button-to-replace');\n+    const buttonToReplace = dataButtonToReplace ? domCache.popup.getElementsByClassName(dataButtonToReplace) : [];\n     if (buttonToReplace.length) {\n-      show(buttonToReplace[0], 'inline-block');\n+      show(\u002F** @type {HTMLElement} *\u002FbuttonToReplace[0], 'inline-block');\n     } else if (allButtonsAreHidden()) {\n       hide(domCache.actions);\n     }\n@@ -17279,6 +23598,7 @@\n    * Gets the input DOM node, this method works with input parameter.\n    *\n    * @returns {HTMLInputElement | null}\n+   * @this {SweetAlert}\n    *\u002F\n   function getInput() {\n     const innerParams = privateProps.innerParams.get(this);\n@@ -17564,7 +23884,7 @@\n     if (params.backdrop === false && params.allowOutsideClick) {\n       warn('\"allowOutsideClick\" parameter requires `backdrop` parameter to be set to `true`');\n     }\n-    if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) {\n+    if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'bootstrap-4', 'bootstrap-4-light', 'bootstrap-4-dark', 'bootstrap-5', 'bootstrap-5-light', 'bootstrap-5-dark', 'material-ui', 'material-ui-light', 'material-ui-dark', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) {\n       warn(`Invalid theme \"${params.theme}\"`);\n     }\n     for (const param in params) {\n@@ -17579,6 +23899,7 @@\n   \u002F**\n    * Updates popup parameters.\n    *\n+   * @this {any}\n    * @param {SweetAlertOptions} params\n    *\u002F\n   function update(params) {\n@@ -17592,7 +23913,9 @@\n     const validUpdatableParams = filterValidParams(params);\n     const updatedParams = Object.assign({}, innerParams, validUpdatableParams);\n     showWarningsForParams(updatedParams);\n-    container.dataset['swal2Theme'] = updatedParams.theme;\n+    if (container) {\n+      container.dataset['swal2Theme'] = updatedParams.theme;\n+    }\n     render(this, updatedParams);\n     privateProps.innerParams.set(this, updatedParams);\n     Object.defineProperties(this, {\n@@ -17609,10 +23932,12 @@\n    * @returns {SweetAlertOptions}\n    *\u002F\n   const filterValidParams = params => {\n+    \u002F** @type {Record\u003Cstring, any>} *\u002F\n     const validUpdatableParams = {};\n     Object.keys(params).forEach(param => {\n       if (isUpdatableParameter(param)) {\n-        validUpdatableParams[param] = params[param];\n+        const typedParams = \u002F** @type {Record\u003Cstring, any>} *\u002Fparams;\n+        validUpdatableParams[param] = typedParams[param];\n       } else {\n         warn(`Invalid parameter to update: ${param}`);\n       }\n@@ -17622,8 +23947,10 @@\n \n   \u002F**\n    * Dispose the current SweetAlert2 instance\n+   * @this {SweetAlert}\n    *\u002F\n   function _destroy() {\n+    var _globalState$eventEmi;\n     const domCache = privateProps.domCache.get(this);\n     const innerParams = privateProps.innerParams.get(this);\n     if (!innerParams) {\n@@ -17639,7 +23966,7 @@\n     if (typeof innerParams.didDestroy === 'function') {\n       innerParams.didDestroy();\n     }\n-    globalState.eventEmitter.emit('didDestroy');\n+    (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('didDestroy');\n     disposeSwal(this);\n   }\n \n@@ -17649,6 +23976,7 @@\n   const disposeSwal = instance => {\n     disposeWeakMaps(instance);\n     \u002F\u002F Unset this.params so GC will dispose it (#1569)\n+    \u002F\u002F @ts-ignore\n     delete instance.params;\n     \u002F\u002F Unset globalState props so GC will dispose globalState (#1569)\n     delete globalState.keydownHandler;\n@@ -17668,29 +23996,47 @@\n     } else {\n       unsetWeakMaps(privateMethods, instance);\n       unsetWeakMaps(privateProps, instance);\n+\n+      \u002F\u002F @ts-ignore\n       delete instance.isAwaitingPromise;\n       \u002F\u002F Unset instance methods\n+      \u002F\u002F @ts-ignore\n       delete instance.disableButtons;\n+      \u002F\u002F @ts-ignore\n       delete instance.enableButtons;\n+      \u002F\u002F @ts-ignore\n       delete instance.getInput;\n+      \u002F\u002F @ts-ignore\n       delete instance.disableInput;\n+      \u002F\u002F @ts-ignore\n       delete instance.enableInput;\n+      \u002F\u002F @ts-ignore\n       delete instance.hideLoading;\n+      \u002F\u002F @ts-ignore\n       delete instance.disableLoading;\n+      \u002F\u002F @ts-ignore\n       delete instance.showValidationMessage;\n+      \u002F\u002F @ts-ignore\n       delete instance.resetValidationMessage;\n+      \u002F\u002F @ts-ignore\n       delete instance.close;\n+      \u002F\u002F @ts-ignore\n       delete instance.closePopup;\n+      \u002F\u002F @ts-ignore\n       delete instance.closeModal;\n+      \u002F\u002F @ts-ignore\n       delete instance.closeToast;\n+      \u002F\u002F @ts-ignore\n       delete instance.rejectPromise;\n+      \u002F\u002F @ts-ignore\n       delete instance.update;\n+      \u002F\u002F @ts-ignore\n       delete instance._destroy;\n     }\n   };\n \n   \u002F**\n-   * @param {object} obj\n+   * @param {Record\u003Cstring, WeakMap\u003Cany, any>>} obj\n    * @param {SweetAlert} instance\n    *\u002F\n   const unsetWeakMaps = (obj, instance) => {\n@@ -17723,7 +24069,7 @@\n   \u002F**\n    * @param {SweetAlertOptions} innerParams\n    * @param {DomCache} domCache\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const handlePopupClick = (innerParams, domCache, dismissWith) => {\n     if (innerParams.toast) {\n@@ -17742,7 +24088,7 @@\n   \u002F**\n    * @param {SweetAlertOptions} innerParams\n    * @param {DomCache} domCache\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const handleToastClick = (innerParams, domCache, dismissWith) => {\n     \u002F\u002F Closing toast by internal click\n@@ -17759,7 +24105,7 @@\n    * @returns {boolean}\n    *\u002F\n   const isAnyButtonShown = innerParams => {\n-    return !!(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n+    return Boolean(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton);\n   };\n   let ignoreOutsideClick = false;\n \n@@ -17801,7 +24147,7 @@\n   \u002F**\n    * @param {SweetAlertOptions} innerParams\n    * @param {DomCache} domCache\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const handleModalClick = (innerParams, domCache, dismissWith) => {\n     domCache.container.onclick = e => {\n@@ -17815,9 +24161,24 @@\n     };\n   };\n \n+  \u002F**\n+   * @param {any} elem\n+   * @returns {boolean}\n+   *\u002F\n   const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;\n+\n+  \u002F**\n+   * @param {any} elem\n+   * @returns {boolean}\n+   *\u002F\n   const isElement = elem => elem instanceof Element || isJqueryElement(elem);\n+\n+  \u002F**\n+   * @param {any[]} args\n+   * @returns {SweetAlertOptions}\n+   *\u002F\n   const argsToParams = args => {\n+    \u002F** @type {Record\u003Cstring, any>} *\u002F\n     const params = {};\n     if (typeof args[0] === 'object' && !isElement(args[0])) {\n       Object.assign(params, args[0]);\n@@ -17837,6 +24198,7 @@\n   \u002F**\n    * Main method to create a new SweetAlert2 popup\n    *\n+   * @this {new (...args: any[]) => any}\n    * @param  {...SweetAlertOptions} args\n    * @returns {Promise\u003CSweetAlertResult>}\n    *\u002F\n@@ -17862,9 +24224,15 @@\n    *\n    * @param {SweetAlertOptions} mixinParams\n    * @returns {SweetAlert}\n+   * @this {typeof import('..\u002FSweetAlert.js').SweetAlert}\n    *\u002F\n   function mixin(mixinParams) {\n+    \u002F\u002F @ts-ignore: 'this' refers to the SweetAlert constructor\n     class MixinSwal extends this {\n+      \u002F**\n+       * @param {any} params\n+       * @param {any} priorityMixinParams\n+       *\u002F\n       _main(params, priorityMixinParams) {\n         return super._main(params, Object.assign({}, mixinParams, priorityMixinParams));\n       }\n@@ -17944,13 +24312,15 @@\n    * @returns {boolean}\n    *\u002F\n   const isTimerRunning = () => {\n-    return !!(globalState.timeout && globalState.timeout.isRunning());\n+    return Boolean(globalState.timeout && globalState.timeout.isRunning());\n   };\n \n   let bodyClickListenerAdded = false;\n+  \u002F** @type {Record\u003Cstring, any>} *\u002F\n   const clickHandlers = {};\n \n   \u002F**\n+   * @this {any}\n    * @param {string} attr\n    *\u002F\n   function bindClickHandler(attr = 'data-swal-template') {\n@@ -17960,10 +24330,14 @@\n       bodyClickListenerAdded = true;\n     }\n   }\n+\n+  \u002F**\n+   * @param {MouseEvent} event\n+   *\u002F\n   const bodyClickListener = event => {\n-    for (let el = event.target; el && el !== document; el = el.parentNode) {\n+    for (let el = \u002F** @type {any} *\u002Fevent.target; el && el !== document; el = el.parentNode) {\n       for (const attr in clickHandlers) {\n-        const template = el.getAttribute(attr);\n+        const template = el.getAttribute && el.getAttribute(attr);\n         if (template) {\n           clickHandlers[attr].fire({\n             template\n@@ -18012,10 +24386,11 @@\n      *\u002F\n     once(eventName, eventHandler) {\n       \u002F**\n-       * @param {Array} args\n+       * @param {...any} args\n        *\u002F\n       const onceFn = (...args) => {\n         this.removeListener(eventName, onceFn);\n+        \u002F\u002F @ts-ignore\n         eventHandler.apply(this, args);\n       };\n       this.on(eventName, onceFn);\n@@ -18023,7 +24398,7 @@\n \n     \u002F**\n      * @param {string} eventName\n-     * @param {Array} args\n+     * @param {...any} args\n      *\u002F\n     emit(eventName, ...args) {\n       this._getHandlersByEventName(eventName).forEach(\n@@ -18032,6 +24407,7 @@\n        *\u002F\n       eventHandler => {\n         try {\n+          \u002F\u002F @ts-ignore\n           eventHandler.apply(this, args);\n         } catch (error) {\n           console.error(error);\n@@ -18072,7 +24448,9 @@\n    * @param {EventHandler} eventHandler\n    *\u002F\n   const on = (eventName, eventHandler) => {\n-    globalState.eventEmitter.on(eventName, eventHandler);\n+    if (globalState.eventEmitter) {\n+      globalState.eventEmitter.on(eventName, eventHandler);\n+    }\n   };\n \n   \u002F**\n@@ -18080,7 +24458,9 @@\n    * @param {EventHandler} eventHandler\n    *\u002F\n   const once = (eventName, eventHandler) => {\n-    globalState.eventEmitter.once(eventName, eventHandler);\n+    if (globalState.eventEmitter) {\n+      globalState.eventEmitter.once(eventName, eventHandler);\n+    }\n   };\n \n   \u002F**\n@@ -18088,6 +24468,10 @@\n    * @param {EventHandler} [eventHandler]\n    *\u002F\n   const off = (eventName, eventHandler) => {\n+    if (!globalState.eventEmitter) {\n+      return;\n+    }\n+\n     \u002F\u002F Remove all handlers for all events\n     if (!eventName) {\n       globalState.eventEmitter.reset();\n@@ -18150,7 +24534,7 @@\n \n   class Timer {\n     \u002F**\n-     * @param {Function} callback\n+     * @param {() => void} callback\n      * @param {number} delay\n      *\u002F\n     constructor(callback, delay) {\n@@ -18239,10 +24623,10 @@\n \n   \u002F**\n    * @param {DocumentFragment} templateContent\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {Record\u003Cstring, string | boolean | number>}\n    *\u002F\n   const getSwalParams = templateContent => {\n-    \u002F** @type {Record\u003Cstring, any>} *\u002F\n+    \u002F** @type {Record\u003Cstring, string | boolean | number>} *\u002F\n     const result = {};\n     \u002F** @type {HTMLElement[]} *\u002F\n     const swalParams = Array.from(templateContent.querySelectorAll('swal-param'));\n@@ -18253,9 +24637,9 @@\n       if (!paramName || !value) {\n         return;\n       }\n-      if (typeof defaultParams[paramName] === 'boolean') {\n+      if (paramName in defaultParams && typeof defaultParams[(\u002F** @type {keyof typeof defaultParams} *\u002FparamName)] === 'boolean') {\n         result[paramName] = value !== 'false';\n-      } else if (typeof defaultParams[paramName] === 'object') {\n+      } else if (paramName in defaultParams && typeof defaultParams[(\u002F** @type {keyof typeof defaultParams} *\u002FparamName)] === 'object') {\n         result[paramName] = JSON.parse(value);\n       } else {\n         result[paramName] = value;\n@@ -18266,10 +24650,10 @@\n \n   \u002F**\n    * @param {DocumentFragment} templateContent\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {Record\u003Cstring, () => void>}\n    *\u002F\n   const getSwalFunctionParams = templateContent => {\n-    \u002F** @type {Record\u003Cstring, any>} *\u002F\n+    \u002F** @type {Record\u003Cstring, () => void>} *\u002F\n     const result = {};\n     \u002F** @type {HTMLElement[]} *\u002F\n     const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param'));\n@@ -18286,10 +24670,10 @@\n \n   \u002F**\n    * @param {DocumentFragment} templateContent\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {Record\u003Cstring, string | boolean>}\n    *\u002F\n   const getSwalButtons = templateContent => {\n-    \u002F** @type {Record\u003Cstring, any>} *\u002F\n+    \u002F** @type {Record\u003Cstring, string | boolean>} *\u002F\n     const result = {};\n     \u002F** @type {HTMLElement[]} *\u002F\n     const swalButtons = Array.from(templateContent.querySelectorAll('swal-button'));\n@@ -18302,10 +24686,16 @@\n       result[`${type}ButtonText`] = button.innerHTML;\n       result[`show${capitalizeFirstLetter(type)}Button`] = true;\n       if (button.hasAttribute('color')) {\n-        result[`${type}ButtonColor`] = button.getAttribute('color');\n+        const color = button.getAttribute('color');\n+        if (color !== null) {\n+          result[`${type}ButtonColor`] = color;\n+        }\n       }\n       if (button.hasAttribute('aria-label')) {\n-        result[`${type}ButtonAriaLabel`] = button.getAttribute('aria-label');\n+        const ariaLabel = button.getAttribute('aria-label');\n+        if (ariaLabel !== null) {\n+          result[`${type}ButtonAriaLabel`] = ariaLabel;\n+        }\n       }\n     });\n     return result;\n@@ -18339,7 +24729,7 @@\n \n   \u002F**\n    * @param {DocumentFragment} templateContent\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {object}\n    *\u002F\n   const getSwalIcon = templateContent => {\n     const result = {};\n@@ -18360,7 +24750,7 @@\n \n   \u002F**\n    * @param {DocumentFragment} templateContent\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {object}\n    *\u002F\n   const getSwalInput = templateContent => {\n     \u002F** @type {Record\u003Cstring, any>} *\u002F\n@@ -18400,10 +24790,10 @@\n   \u002F**\n    * @param {DocumentFragment} templateContent\n    * @param {string[]} paramNames\n-   * @returns {Record\u003Cstring, any>}\n+   * @returns {Record\u003Cstring, string>}\n    *\u002F\n   const getSwalStringParams = (templateContent, paramNames) => {\n-    \u002F** @type {Record\u003Cstring, any>} *\u002F\n+    \u002F** @type {Record\u003Cstring, string>} *\u002F\n     const result = {};\n     for (const i in paramNames) {\n       const paramName = paramNames[i];\n@@ -18450,12 +24840,16 @@\n    * @param {SweetAlertOptions} params\n    *\u002F\n   const openPopup = params => {\n+    var _globalState$eventEmi, _globalState$eventEmi2;\n     const container = getContainer();\n     const popup = getPopup();\n+    if (!container || !popup) {\n+      return;\n+    }\n     if (typeof params.willOpen === 'function') {\n       params.willOpen(popup);\n     }\n-    globalState.eventEmitter.emit('willOpen', popup);\n+    (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willOpen', popup);\n     const bodyStyles = window.getComputedStyle(document.body);\n     const initialBodyOverflow = bodyStyles.overflowY;\n     addClasses(container, popup, params);\n@@ -18465,31 +24859,38 @@\n       setScrollingVisibility(container, popup);\n     }, SHOW_CLASS_TIMEOUT);\n     if (isModal()) {\n-      fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow);\n+      \u002F\u002F Using ternary instead of ?? operator for Webpack 4 compatibility\n+      fixScrollContainer(container, params.scrollbarPadding !== undefined ? params.scrollbarPadding : false, initialBodyOverflow);\n       setAriaHidden();\n     }\n     if (!isToast() && !globalState.previousActiveElement) {\n       globalState.previousActiveElement = document.activeElement;\n     }\n     if (typeof params.didOpen === 'function') {\n-      setTimeout(() => params.didOpen(popup));\n+      const didOpen = params.didOpen;\n+      setTimeout(() => didOpen(popup));\n     }\n-    globalState.eventEmitter.emit('didOpen', popup);\n-    removeClass(container, swalClasses['no-transition']);\n+    (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didOpen', popup);\n   };\n \n   \u002F**\n-   * @param {AnimationEvent} event\n+   * @param {Event} event\n    *\u002F\n   const swalOpenAnimationFinished = event => {\n     const popup = getPopup();\n-    if (event.target !== popup) {\n+    if (!popup || event.target !== popup) {\n       return;\n     }\n     const container = getContainer();\n+    if (!container) {\n+      return;\n+    }\n     popup.removeEventListener('animationend', swalOpenAnimationFinished);\n     popup.removeEventListener('transitionend', swalOpenAnimationFinished);\n     container.style.overflowY = 'auto';\n+\n+    \u002F\u002F no-transition is added in init() in case one swal is opened right after another\n+    removeClass(container, swalClasses['no-transition']);\n   };\n \n   \u002F**\n@@ -18529,14 +24930,20 @@\n    * @param {SweetAlertOptions} params\n    *\u002F\n   const addClasses = (container, popup, params) => {\n-    addClass(container, params.showClass.backdrop);\n+    var _params$showClass;\n+    if ((_params$showClass = params.showClass) !== null && _params$showClass !== void 0 && _params$showClass.backdrop) {\n+      addClass(container, params.showClass.backdrop);\n+    }\n     if (params.animation) {\n       \u002F\u002F this workaround with opacity is needed for https:\u002F\u002Fgithub.com\u002Fsweetalert2\u002Fsweetalert2\u002Fissues\u002F2059\n       popup.style.setProperty('opacity', '0', 'important');\n       show(popup, 'grid');\n       setTimeout(() => {\n+        var _params$showClass2;\n         \u002F\u002F Animate popup right after showing it\n-        addClass(popup, params.showClass.popup);\n+        if ((_params$showClass2 = params.showClass) !== null && _params$showClass2 !== void 0 && _params$showClass2.popup) {\n+          addClass(popup, params.showClass.popup);\n+        }\n         \u002F\u002F and remove the opacity workaround\n         popup.style.removeProperty('opacity');\n       }, SHOW_CLASS_TIMEOUT); \u002F\u002F 10ms in order to fix #2062\n@@ -18622,14 +25029,18 @@\n   var _promise = \u002F*#__PURE__*\u002Fnew WeakMap();\n   class SweetAlert {\n     \u002F**\n-     * @param {...any} args\n+     * @param {...(SweetAlertOptions | string)} args\n      * @this {SweetAlert}\n      *\u002F\n     constructor(...args) {\n       \u002F**\n        * @type {Promise\u003CSweetAlertResult>}\n        *\u002F\n-      _classPrivateFieldInitSpec(this, _promise, void 0);\n+      _classPrivateFieldInitSpec(this, _promise, \u002F** @type {Promise\u003CSweetAlertResult>} *\u002FPromise.resolve({\n+        isConfirmed: false,\n+        isDenied: false,\n+        isDismissed: true\n+      }));\n       \u002F\u002F Prevent run in Node env\n       if (typeof window === 'undefined') {\n         return;\n@@ -18646,6 +25057,11 @@\n       this.isAwaitingPromise = false;\n       _classPrivateFieldSet2(_promise, this, this._main(currentInstance.params));\n     }\n+\n+    \u002F**\n+     * @param {any} userParams\n+     * @param {any} mixinParams\n+     *\u002F\n     _main(userParams, mixinParams = {}) {\n       showWarningsForParams(Object.assign({}, mixinParams, userParams));\n       if (globalState.currentInstance) {\n@@ -18683,9 +25099,16 @@\n     }\n \n     \u002F\u002F `catch` cannot be the name of a module export, so we define our thenable methods here instead\n+    \u002F**\n+     * @param {any} onFulfilled\n+     *\u002F\n     then(onFulfilled) {\n       return _classPrivateFieldGet2(_promise, this).then(onFulfilled);\n     }\n+\n+    \u002F**\n+     * @param {any} onFinally\n+     *\u002F\n     finally(onFinally) {\n       return _classPrivateFieldGet2(_promise, this).finally(onFinally);\n     }\n@@ -18695,7 +25118,7 @@\n    * @param {SweetAlert} instance\n    * @param {DomCache} domCache\n    * @param {SweetAlertOptions} innerParams\n-   * @returns {Promise}\n+   * @returns {Promise\u003CSweetAlertResult>}\n    *\u002F\n   const swalPromise = (instance, domCache, innerParams) => {\n     return new Promise((resolve, reject) => {\n@@ -18706,7 +25129,9 @@\n       const dismissWith = dismiss => {\n         instance.close({\n           isDismissed: true,\n-          dismiss\n+          dismiss,\n+          isConfirmed: false,\n+          isDenied: false\n         });\n       };\n       privateMethods.swalPromiseResolve.set(instance, resolve);\n@@ -18761,17 +25186,17 @@\n    * @returns {DomCache}\n    *\u002F\n   const populateDomCache = instance => {\n-    const domCache = {\n-      popup: getPopup(),\n-      container: getContainer(),\n-      actions: getActions(),\n-      confirmButton: getConfirmButton(),\n-      denyButton: getDenyButton(),\n-      cancelButton: getCancelButton(),\n-      loader: getLoader(),\n-      closeButton: getCloseButton(),\n-      validationMessage: getValidationMessage(),\n-      progressSteps: getProgressSteps()\n+    const domCache = \u002F** @type {DomCache} *\u002F{\n+      popup: (\u002F** @type {HTMLElement} *\u002FgetPopup()),\n+      container: (\u002F** @type {HTMLElement} *\u002FgetContainer()),\n+      actions: (\u002F** @type {HTMLElement} *\u002FgetActions()),\n+      confirmButton: (\u002F** @type {HTMLElement} *\u002FgetConfirmButton()),\n+      denyButton: (\u002F** @type {HTMLElement} *\u002FgetDenyButton()),\n+      cancelButton: (\u002F** @type {HTMLElement} *\u002FgetCancelButton()),\n+      loader: (\u002F** @type {HTMLElement} *\u002FgetLoader()),\n+      closeButton: (\u002F** @type {HTMLElement} *\u002FgetCloseButton()),\n+      validationMessage: (\u002F** @type {HTMLElement} *\u002FgetValidationMessage()),\n+      progressSteps: (\u002F** @type {HTMLElement} *\u002FgetProgressSteps())\n     };\n     privateProps.domCache.set(instance, domCache);\n     return domCache;\n@@ -18780,7 +25205,7 @@\n   \u002F**\n    * @param {GlobalState} globalState\n    * @param {SweetAlertOptions} innerParams\n-   * @param {Function} dismissWith\n+   * @param {(dismiss: DismissReason) => void} dismissWith\n    *\u002F\n   const setupTimer = (globalState, innerParams, dismissWith) => {\n     const timerProgressBar = getTimerProgressBar();\n@@ -18790,13 +25215,13 @@\n         dismissWith('timer');\n         delete globalState.timeout;\n       }, innerParams.timer);\n-      if (innerParams.timerProgressBar) {\n+      if (innerParams.timerProgressBar && timerProgressBar) {\n         show(timerProgressBar);\n         applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar');\n         setTimeout(() => {\n           if (globalState.timeout && globalState.timeout.running) {\n             \u002F\u002F timer can be already stopped or unset at this point\n-            animateTimerProgressBar(innerParams.timer);\n+            animateTimerProgressBar(\u002F** @type {number} *\u002FinnerParams.timer);\n           }\n         });\n       }\n@@ -18900,18 +25325,21 @@\n   \u002F\u002F Proxy to instance methods to constructor, for now, for backwards compatibility\n   Object.keys(instanceMethods).forEach(key => {\n     \u002F**\n-     * @param {...any} args\n-     * @returns {any | undefined}\n+     * @param {...(SweetAlertOptions | string | undefined)} args\n+     * @returns {SweetAlertResult | Promise\u003CSweetAlertResult> | undefined}\n      *\u002F\n+    \u002F\u002F @ts-ignore: Dynamic property assignment for backwards compatibility\n     SweetAlert[key] = function (...args) {\n+      \u002F\u002F @ts-ignore\n       if (currentInstance && currentInstance[key]) {\n+        \u002F\u002F @ts-ignore\n         return currentInstance[key](...args);\n       }\n-      return null;\n+      return undefined;\n     };\n   });\n   SweetAlert.DismissReason = DismissReason;\n-  SweetAlert.version = '11.22.5';\n+  SweetAlert.version = '11.26.17';\n \n   const Swal = SweetAlert;\n   \u002F\u002F @ts-ignore\n@@ -18921,15 +25349,15 @@\n \n }));\n if (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2}\n-\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.1s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px $swal2-outline-color;--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start     top            top-end\\\" \\\"center-start  center         center-end\\\" \\\"bottom-start  bottom-center  bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}\");\n+\"undefined\"!=typeof document&&function(e,t){var n=e.createElement(\"style\");if(e.getElementsByTagName(\"head\")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,\":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% \u002F 0.075), 0 1px 2px hsl(0deg 0% 0% \u002F 0.075), 1px 2px 4px hsl(0deg 0% 0% \u002F 0.075), 1px 3px 8px hsl(0deg 0% 0% \u002F 0.075), 2px 4px 16px hsl(0deg 0% 0% \u002F 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\\\"top-start     top            top-end\\\" \\\"center-start  center         center-end\\\" \\\"bottom-start  bottom-center  bottom-end\\\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1\u002F4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1\u002F4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\\\"!\\\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1\u002F4 !important;grid-row:1\u002F4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3\u002F3;grid-row:1\u002F99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1\u002F99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}\");\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js\"\n \u002F*!**************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftoastify-js\u002Fsrc\u002Ftoastify.js ***!\n   \\**************************************************\u002F\n-\u002F***\u002F (function(module) {\n+(module) {\n \n \u002F*!\n  * Toastify js 1.12.0\n@@ -19378,13 +25806,637 @@\n });\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002F@kurkle\u002Fcolor\u002Fdist\u002Fcolor.esm.js\"\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@kurkle\u002Fcolor\u002Fdist\u002Fcolor.esm.js ***!\n+  \\******************************************************\u002F\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   Color: () => (\u002F* binding *\u002F Color),\n+\u002F* harmony export *\u002F   b2n: () => (\u002F* binding *\u002F b2n),\n+\u002F* harmony export *\u002F   b2p: () => (\u002F* binding *\u002F b2p),\n+\u002F* harmony export *\u002F   \"default\": () => (\u002F* binding *\u002F index_esm),\n+\u002F* harmony export *\u002F   hexParse: () => (\u002F* binding *\u002F hexParse),\n+\u002F* harmony export *\u002F   hexString: () => (\u002F* binding *\u002F hexString),\n+\u002F* harmony export *\u002F   hsl2rgb: () => (\u002F* binding *\u002F hsl2rgb),\n+\u002F* harmony export *\u002F   hslString: () => (\u002F* binding *\u002F hslString),\n+\u002F* harmony export *\u002F   hsv2rgb: () => (\u002F* binding *\u002F hsv2rgb),\n+\u002F* harmony export *\u002F   hueParse: () => (\u002F* binding *\u002F hueParse),\n+\u002F* harmony export *\u002F   hwb2rgb: () => (\u002F* binding *\u002F hwb2rgb),\n+\u002F* harmony export *\u002F   lim: () => (\u002F* binding *\u002F lim),\n+\u002F* harmony export *\u002F   n2b: () => (\u002F* binding *\u002F n2b),\n+\u002F* harmony export *\u002F   n2p: () => (\u002F* binding *\u002F n2p),\n+\u002F* harmony export *\u002F   nameParse: () => (\u002F* binding *\u002F nameParse),\n+\u002F* harmony export *\u002F   p2b: () => (\u002F* binding *\u002F p2b),\n+\u002F* harmony export *\u002F   rgb2hsl: () => (\u002F* binding *\u002F rgb2hsl),\n+\u002F* harmony export *\u002F   rgbParse: () => (\u002F* binding *\u002F rgbParse),\n+\u002F* harmony export *\u002F   rgbString: () => (\u002F* binding *\u002F rgbString),\n+\u002F* harmony export *\u002F   rotate: () => (\u002F* binding *\u002F rotate),\n+\u002F* harmony export *\u002F   round: () => (\u002F* binding *\u002F round)\n+\u002F* harmony export *\u002F });\n+\u002F*!\n+ * @kurkle\u002Fcolor v0.3.4\n+ * https:\u002F\u002Fgithub.com\u002Fkurkle\u002Fcolor#readme\n+ * (c) 2024 Jukka Kurkela\n+ * Released under the MIT License\n+ *\u002F\n+function round(v) {\n+  return v + 0.5 | 0;\n+}\n+const lim = (v, l, h) => Math.max(Math.min(v, h), l);\n+function p2b(v) {\n+  return lim(round(v * 2.55), 0, 255);\n+}\n+function b2p(v) {\n+  return lim(round(v \u002F 2.55), 0, 100);\n+}\n+function n2b(v) {\n+  return lim(round(v * 255), 0, 255);\n+}\n+function b2n(v) {\n+  return lim(round(v \u002F 2.55) \u002F 100, 0, 1);\n+}\n+function n2p(v) {\n+  return lim(round(v * 100), 0, 100);\n+}\n+\n+const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\n+const hex = [...'0123456789ABCDEF'];\n+const h1 = b => hex[b & 0xF];\n+const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\n+const eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\n+const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n+function hexParse(str) {\n+  var len = str.length;\n+  var ret;\n+  if (str[0] === '#') {\n+    if (len === 4 || len === 5) {\n+      ret = {\n+        r: 255 & map$1[str[1]] * 17,\n+        g: 255 & map$1[str[2]] * 17,\n+        b: 255 & map$1[str[3]] * 17,\n+        a: len === 5 ? map$1[str[4]] * 17 : 255\n+      };\n+    } else if (len === 7 || len === 9) {\n+      ret = {\n+        r: map$1[str[1]] \u003C\u003C 4 | map$1[str[2]],\n+        g: map$1[str[3]] \u003C\u003C 4 | map$1[str[4]],\n+        b: map$1[str[5]] \u003C\u003C 4 | map$1[str[6]],\n+        a: len === 9 ? (map$1[str[7]] \u003C\u003C 4 | map$1[str[8]]) : 255\n+      };\n+    }\n+  }\n+  return ret;\n+}\n+const alpha = (a, f) => a \u003C 255 ? f(a) : '';\n+function hexString(v) {\n+  var f = isShort(v) ? h1 : h2;\n+  return v\n+    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n+    : undefined;\n+}\n+\n+const HUE_RE = \u002F^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;\n+function hsl2rgbn(h, s, l) {\n+  const a = s * Math.min(l, 1 - l);\n+  const f = (n, k = (n + h \u002F 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n+  return [f(0), f(8), f(4)];\n+}\n+function hsv2rgbn(h, s, v) {\n+  const f = (n, k = (n + h \u002F 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n+  return [f(5), f(3), f(1)];\n+}\n+function hwb2rgbn(h, w, b) {\n+  const rgb = hsl2rgbn(h, 1, 0.5);\n+  let i;\n+  if (w + b > 1) {\n+    i = 1 \u002F (w + b);\n+    w *= i;\n+    b *= i;\n+  }\n+  for (i = 0; i \u003C 3; i++) {\n+    rgb[i] *= 1 - w - b;\n+    rgb[i] += w;\n+  }\n+  return rgb;\n+}\n+function hueValue(r, g, b, d, max) {\n+  if (r === max) {\n+    return ((g - b) \u002F d) + (g \u003C b ? 6 : 0);\n+  }\n+  if (g === max) {\n+    return (b - r) \u002F d + 2;\n+  }\n+  return (r - g) \u002F d + 4;\n+}\n+function rgb2hsl(v) {\n+  const range = 255;\n+  const r = v.r \u002F range;\n+  const g = v.g \u002F range;\n+  const b = v.b \u002F range;\n+  const max = Math.max(r, g, b);\n+  const min = Math.min(r, g, b);\n+  const l = (max + min) \u002F 2;\n+  let h, s, d;\n+  if (max !== min) {\n+    d = max - min;\n+    s = l > 0.5 ? d \u002F (2 - max - min) : d \u002F (max + min);\n+    h = hueValue(r, g, b, d, max);\n+    h = h * 60 + 0.5;\n+  }\n+  return [h | 0, s || 0, l];\n+}\n+function calln(f, a, b, c) {\n+  return (\n+    Array.isArray(a)\n+      ? f(a[0], a[1], a[2])\n+      : f(a, b, c)\n+  ).map(n2b);\n+}\n+function hsl2rgb(h, s, l) {\n+  return calln(hsl2rgbn, h, s, l);\n+}\n+function hwb2rgb(h, w, b) {\n+  return calln(hwb2rgbn, h, w, b);\n+}\n+function hsv2rgb(h, s, v) {\n+  return calln(hsv2rgbn, h, s, v);\n+}\n+function hue(h) {\n+  return (h % 360 + 360) % 360;\n+}\n+function hueParse(str) {\n+  const m = HUE_RE.exec(str);\n+  let a = 255;\n+  let v;\n+  if (!m) {\n+    return;\n+  }\n+  if (m[5] !== v) {\n+    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n+  }\n+  const h = hue(+m[2]);\n+  const p1 = +m[3] \u002F 100;\n+  const p2 = +m[4] \u002F 100;\n+  if (m[1] === 'hwb') {\n+    v = hwb2rgb(h, p1, p2);\n+  } else if (m[1] === 'hsv') {\n+    v = hsv2rgb(h, p1, p2);\n+  } else {\n+    v = hsl2rgb(h, p1, p2);\n+  }\n+  return {\n+    r: v[0],\n+    g: v[1],\n+    b: v[2],\n+    a: a\n+  };\n+}\n+function rotate(v, deg) {\n+  var h = rgb2hsl(v);\n+  h[0] = hue(h[0] + deg);\n+  h = hsl2rgb(h);\n+  v.r = h[0];\n+  v.g = h[1];\n+  v.b = h[2];\n+}\n+function hslString(v) {\n+  if (!v) {\n+    return;\n+  }\n+  const a = rgb2hsl(v);\n+  const h = a[0];\n+  const s = n2p(a[1]);\n+  const l = n2p(a[2]);\n+  return v.a \u003C 255\n+    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n+    : `hsl(${h}, ${s}%, ${l}%)`;\n+}\n+\n+const map = {\n+\tx: 'dark',\n+\tZ: 'light',\n+\tY: 're',\n+\tX: 'blu',\n+\tW: 'gr',\n+\tV: 'medium',\n+\tU: 'slate',\n+\tA: 'ee',\n+\tT: 'ol',\n+\tS: 'or',\n+\tB: 'ra',\n+\tC: 'lateg',\n+\tD: 'ights',\n+\tR: 'in',\n+\tQ: 'turquois',\n+\tE: 'hi',\n+\tP: 'ro',\n+\tO: 'al',\n+\tN: 'le',\n+\tM: 'de',\n+\tL: 'yello',\n+\tF: 'en',\n+\tK: 'ch',\n+\tG: 'arks',\n+\tH: 'ea',\n+\tI: 'ightg',\n+\tJ: 'wh'\n+};\n+const names$1 = {\n+\tOiceXe: 'f0f8ff',\n+\tantiquewEte: 'faebd7',\n+\taqua: 'ffff',\n+\taquamarRe: '7fffd4',\n+\tazuY: 'f0ffff',\n+\tbeige: 'f5f5dc',\n+\tbisque: 'ffe4c4',\n+\tblack: '0',\n+\tblanKedOmond: 'ffebcd',\n+\tXe: 'ff',\n+\tXeviTet: '8a2be2',\n+\tbPwn: 'a52a2a',\n+\tburlywood: 'deb887',\n+\tcaMtXe: '5f9ea0',\n+\tKartYuse: '7fff00',\n+\tKocTate: 'd2691e',\n+\tcSO: 'ff7f50',\n+\tcSnflowerXe: '6495ed',\n+\tcSnsilk: 'fff8dc',\n+\tcrimson: 'dc143c',\n+\tcyan: 'ffff',\n+\txXe: '8b',\n+\txcyan: '8b8b',\n+\txgTMnPd: 'b8860b',\n+\txWay: 'a9a9a9',\n+\txgYF: '6400',\n+\txgYy: 'a9a9a9',\n+\txkhaki: 'bdb76b',\n+\txmagFta: '8b008b',\n+\txTivegYF: '556b2f',\n+\txSange: 'ff8c00',\n+\txScEd: '9932cc',\n+\txYd: '8b0000',\n+\txsOmon: 'e9967a',\n+\txsHgYF: '8fbc8f',\n+\txUXe: '483d8b',\n+\txUWay: '2f4f4f',\n+\txUgYy: '2f4f4f',\n+\txQe: 'ced1',\n+\txviTet: '9400d3',\n+\tdAppRk: 'ff1493',\n+\tdApskyXe: 'bfff',\n+\tdimWay: '696969',\n+\tdimgYy: '696969',\n+\tdodgerXe: '1e90ff',\n+\tfiYbrick: 'b22222',\n+\tflSOwEte: 'fffaf0',\n+\tfoYstWAn: '228b22',\n+\tfuKsia: 'ff00ff',\n+\tgaRsbSo: 'dcdcdc',\n+\tghostwEte: 'f8f8ff',\n+\tgTd: 'ffd700',\n+\tgTMnPd: 'daa520',\n+\tWay: '808080',\n+\tgYF: '8000',\n+\tgYFLw: 'adff2f',\n+\tgYy: '808080',\n+\thoneyMw: 'f0fff0',\n+\thotpRk: 'ff69b4',\n+\tRdianYd: 'cd5c5c',\n+\tRdigo: '4b0082',\n+\tivSy: 'fffff0',\n+\tkhaki: 'f0e68c',\n+\tlavFMr: 'e6e6fa',\n+\tlavFMrXsh: 'fff0f5',\n+\tlawngYF: '7cfc00',\n+\tNmoncEffon: 'fffacd',\n+\tZXe: 'add8e6',\n+\tZcSO: 'f08080',\n+\tZcyan: 'e0ffff',\n+\tZgTMnPdLw: 'fafad2',\n+\tZWay: 'd3d3d3',\n+\tZgYF: '90ee90',\n+\tZgYy: 'd3d3d3',\n+\tZpRk: 'ffb6c1',\n+\tZsOmon: 'ffa07a',\n+\tZsHgYF: '20b2aa',\n+\tZskyXe: '87cefa',\n+\tZUWay: '778899',\n+\tZUgYy: '778899',\n+\tZstAlXe: 'b0c4de',\n+\tZLw: 'ffffe0',\n+\tlime: 'ff00',\n+\tlimegYF: '32cd32',\n+\tlRF: 'faf0e6',\n+\tmagFta: 'ff00ff',\n+\tmaPon: '800000',\n+\tVaquamarRe: '66cdaa',\n+\tVXe: 'cd',\n+\tVScEd: 'ba55d3',\n+\tVpurpN: '9370db',\n+\tVsHgYF: '3cb371',\n+\tVUXe: '7b68ee',\n+\tVsprRggYF: 'fa9a',\n+\tVQe: '48d1cc',\n+\tVviTetYd: 'c71585',\n+\tmidnightXe: '191970',\n+\tmRtcYam: 'f5fffa',\n+\tmistyPse: 'ffe4e1',\n+\tmoccasR: 'ffe4b5',\n+\tnavajowEte: 'ffdead',\n+\tnavy: '80',\n+\tTdlace: 'fdf5e6',\n+\tTive: '808000',\n+\tTivedBb: '6b8e23',\n+\tSange: 'ffa500',\n+\tSangeYd: 'ff4500',\n+\tScEd: 'da70d6',\n+\tpOegTMnPd: 'eee8aa',\n+\tpOegYF: '98fb98',\n+\tpOeQe: 'afeeee',\n+\tpOeviTetYd: 'db7093',\n+\tpapayawEp: 'ffefd5',\n+\tpHKpuff: 'ffdab9',\n+\tperu: 'cd853f',\n+\tpRk: 'ffc0cb',\n+\tplum: 'dda0dd',\n+\tpowMrXe: 'b0e0e6',\n+\tpurpN: '800080',\n+\tYbeccapurpN: '663399',\n+\tYd: 'ff0000',\n+\tPsybrown: 'bc8f8f',\n+\tPyOXe: '4169e1',\n+\tsaddNbPwn: '8b4513',\n+\tsOmon: 'fa8072',\n+\tsandybPwn: 'f4a460',\n+\tsHgYF: '2e8b57',\n+\tsHshell: 'fff5ee',\n+\tsiFna: 'a0522d',\n+\tsilver: 'c0c0c0',\n+\tskyXe: '87ceeb',\n+\tUXe: '6a5acd',\n+\tUWay: '708090',\n+\tUgYy: '708090',\n+\tsnow: 'fffafa',\n+\tsprRggYF: 'ff7f',\n+\tstAlXe: '4682b4',\n+\ttan: 'd2b48c',\n+\tteO: '8080',\n+\ttEstN: 'd8bfd8',\n+\ttomato: 'ff6347',\n+\tQe: '40e0d0',\n+\tviTet: 'ee82ee',\n+\tJHt: 'f5deb3',\n+\twEte: 'ffffff',\n+\twEtesmoke: 'f5f5f5',\n+\tLw: 'ffff00',\n+\tLwgYF: '9acd32'\n+};\n+function unpack() {\n+  const unpacked = {};\n+  const keys = Object.keys(names$1);\n+  const tkeys = Object.keys(map);\n+  let i, j, k, ok, nk;\n+  for (i = 0; i \u003C keys.length; i++) {\n+    ok = nk = keys[i];\n+    for (j = 0; j \u003C tkeys.length; j++) {\n+      k = tkeys[j];\n+      nk = nk.replace(k, map[k]);\n+    }\n+    k = parseInt(names$1[ok], 16);\n+    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n+  }\n+  return unpacked;\n+}\n+\n+let names;\n+function nameParse(str) {\n+  if (!names) {\n+    names = unpack();\n+    names.transparent = [0, 0, 0, 0];\n+  }\n+  const a = names[str.toLowerCase()];\n+  return a && {\n+    r: a[0],\n+    g: a[1],\n+    b: a[2],\n+    a: a.length === 4 ? a[3] : 255\n+  };\n+}\n+\n+const RGB_RE = \u002F^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,\u002F]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;\n+function rgbParse(str) {\n+  const m = RGB_RE.exec(str);\n+  let a = 255;\n+  let r, g, b;\n+  if (!m) {\n+    return;\n+  }\n+  if (m[7] !== r) {\n+    const v = +m[7];\n+    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n+  }\n+  r = +m[1];\n+  g = +m[3];\n+  b = +m[5];\n+  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n+  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n+  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n+  return {\n+    r: r,\n+    g: g,\n+    b: b,\n+    a: a\n+  };\n+}\n+function rgbString(v) {\n+  return v && (\n+    v.a \u003C 255\n+      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n+      : `rgb(${v.r}, ${v.g}, ${v.b})`\n+  );\n+}\n+\n+const to = v => v \u003C= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 \u002F 2.4) * 1.055 - 0.055;\n+const from = v => v \u003C= 0.04045 ? v \u002F 12.92 : Math.pow((v + 0.055) \u002F 1.055, 2.4);\n+function interpolate(rgb1, rgb2, t) {\n+  const r = from(b2n(rgb1.r));\n+  const g = from(b2n(rgb1.g));\n+  const b = from(b2n(rgb1.b));\n+  return {\n+    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n+    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n+    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n+    a: rgb1.a + t * (rgb2.a - rgb1.a)\n+  };\n+}\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Fsifter.js\":\n+function modHSL(v, i, ratio) {\n+  if (v) {\n+    let tmp = rgb2hsl(v);\n+    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n+    tmp = hsl2rgb(tmp);\n+    v.r = tmp[0];\n+    v.g = tmp[1];\n+    v.b = tmp[2];\n+  }\n+}\n+function clone(v, proto) {\n+  return v ? Object.assign(proto || {}, v) : v;\n+}\n+function fromObject(input) {\n+  var v = {r: 0, g: 0, b: 0, a: 255};\n+  if (Array.isArray(input)) {\n+    if (input.length >= 3) {\n+      v = {r: input[0], g: input[1], b: input[2], a: 255};\n+      if (input.length > 3) {\n+        v.a = n2b(input[3]);\n+      }\n+    }\n+  } else {\n+    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n+    v.a = n2b(v.a);\n+  }\n+  return v;\n+}\n+function functionParse(str) {\n+  if (str.charAt(0) === 'r') {\n+    return rgbParse(str);\n+  }\n+  return hueParse(str);\n+}\n+class Color {\n+  constructor(input) {\n+    if (input instanceof Color) {\n+      return input;\n+    }\n+    const type = typeof input;\n+    let v;\n+    if (type === 'object') {\n+      v = fromObject(input);\n+    } else if (type === 'string') {\n+      v = hexParse(input) || nameParse(input) || functionParse(input);\n+    }\n+    this._rgb = v;\n+    this._valid = !!v;\n+  }\n+  get valid() {\n+    return this._valid;\n+  }\n+  get rgb() {\n+    var v = clone(this._rgb);\n+    if (v) {\n+      v.a = b2n(v.a);\n+    }\n+    return v;\n+  }\n+  set rgb(obj) {\n+    this._rgb = fromObject(obj);\n+  }\n+  rgbString() {\n+    return this._valid ? rgbString(this._rgb) : undefined;\n+  }\n+  hexString() {\n+    return this._valid ? hexString(this._rgb) : undefined;\n+  }\n+  hslString() {\n+    return this._valid ? hslString(this._rgb) : undefined;\n+  }\n+  mix(color, weight) {\n+    if (color) {\n+      const c1 = this.rgb;\n+      const c2 = color.rgb;\n+      let w2;\n+      const p = weight === w2 ? 0.5 : weight;\n+      const w = 2 * p - 1;\n+      const a = c1.a - c2.a;\n+      const w1 = ((w * a === -1 ? w : (w + a) \u002F (1 + w * a)) + 1) \u002F 2.0;\n+      w2 = 1 - w1;\n+      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n+      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n+      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n+      c1.a = p * c1.a + (1 - p) * c2.a;\n+      this.rgb = c1;\n+    }\n+    return this;\n+  }\n+  interpolate(color, t) {\n+    if (color) {\n+      this._rgb = interpolate(this._rgb, color._rgb, t);\n+    }\n+    return this;\n+  }\n+  clone() {\n+    return new Color(this.rgb);\n+  }\n+  alpha(a) {\n+    this._rgb.a = n2b(a);\n+    return this;\n+  }\n+  clearer(ratio) {\n+    const rgb = this._rgb;\n+    rgb.a *= 1 - ratio;\n+    return this;\n+  }\n+  greyscale() {\n+    const rgb = this._rgb;\n+    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n+    rgb.r = rgb.g = rgb.b = val;\n+    return this;\n+  }\n+  opaquer(ratio) {\n+    const rgb = this._rgb;\n+    rgb.a *= 1 + ratio;\n+    return this;\n+  }\n+  negate() {\n+    const v = this._rgb;\n+    v.r = 255 - v.r;\n+    v.g = 255 - v.g;\n+    v.b = 255 - v.b;\n+    return this;\n+  }\n+  lighten(ratio) {\n+    modHSL(this._rgb, 2, ratio);\n+    return this;\n+  }\n+  darken(ratio) {\n+    modHSL(this._rgb, 2, -ratio);\n+    return this;\n+  }\n+  saturate(ratio) {\n+    modHSL(this._rgb, 1, ratio);\n+    return this;\n+  }\n+  desaturate(ratio) {\n+    modHSL(this._rgb, 1, -ratio);\n+    return this;\n+  }\n+  rotate(deg) {\n+    rotate(this._rgb, deg);\n+    return this;\n+  }\n+}\n+\n+function index_esm(input) {\n+  return new Color(input);\n+}\n+\n+\n+\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Fsifter.js\"\n \u002F*!**********************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Fsifter.js ***!\n   \\**********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -19706,26 +26758,26 @@\n \n \u002F\u002F# sourceMappingURL=sifter.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Ftypes.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Ftypes.js\"\n \u002F*!*********************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Ftypes.js ***!\n   \\*********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n \n \u002F\u002F# sourceMappingURL=types.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Futils.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Futils.js\"\n \u002F*!*********************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Fsifter\u002Fdist\u002Fesm\u002Futils.js ***!\n   \\*********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -19832,13 +26884,13 @@\n };\n \u002F\u002F# sourceMappingURL=utils.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Findex.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Findex.js\"\n \u002F*!*******************************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Findex.js ***!\n   \\*******************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20236,13 +27288,13 @@\n \n \u002F\u002F# sourceMappingURL=index.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fregex.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fregex.js\"\n \u002F*!*******************************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fregex.js ***!\n   \\*******************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20322,13 +27374,13 @@\n };\n \u002F\u002F# sourceMappingURL=regex.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fstrings.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fstrings.js\"\n \u002F*!*********************************************************************!*\\\n   !*** .\u002Fnode_modules\u002F@orchidjs\u002Funicode-variants\u002Fdist\u002Fesm\u002Fstrings.js ***!\n   \\*********************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20357,13 +27409,14672 @@\n };\n \u002F\u002F# sourceMappingURL=strings.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fauto\u002Fauto.js\"\n+\u002F*!********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fchart.js\u002Fauto\u002Fauto.js ***!\n+  \\********************************************\u002F\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   Animation: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Animation),\n+\u002F* harmony export *\u002F   Animations: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Animations),\n+\u002F* harmony export *\u002F   ArcElement: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.ArcElement),\n+\u002F* harmony export *\u002F   BarController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.BarController),\n+\u002F* harmony export *\u002F   BarElement: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.BarElement),\n+\u002F* harmony export *\u002F   BasePlatform: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.BasePlatform),\n+\u002F* harmony export *\u002F   BasicPlatform: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.BasicPlatform),\n+\u002F* harmony export *\u002F   BubbleController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.BubbleController),\n+\u002F* harmony export *\u002F   CategoryScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.CategoryScale),\n+\u002F* harmony export *\u002F   Chart: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Chart),\n+\u002F* harmony export *\u002F   Colors: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Colors),\n+\u002F* harmony export *\u002F   DatasetController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.DatasetController),\n+\u002F* harmony export *\u002F   Decimation: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Decimation),\n+\u002F* harmony export *\u002F   DomPlatform: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.DomPlatform),\n+\u002F* harmony export *\u002F   DoughnutController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.DoughnutController),\n+\u002F* harmony export *\u002F   Element: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Element),\n+\u002F* harmony export *\u002F   Filler: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Filler),\n+\u002F* harmony export *\u002F   Interaction: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Interaction),\n+\u002F* harmony export *\u002F   Legend: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Legend),\n+\u002F* harmony export *\u002F   LineController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.LineController),\n+\u002F* harmony export *\u002F   LineElement: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.LineElement),\n+\u002F* harmony export *\u002F   LinearScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.LinearScale),\n+\u002F* harmony export *\u002F   LogarithmicScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.LogarithmicScale),\n+\u002F* harmony export *\u002F   PieController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.PieController),\n+\u002F* harmony export *\u002F   PointElement: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.PointElement),\n+\u002F* harmony export *\u002F   PolarAreaController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.PolarAreaController),\n+\u002F* harmony export *\u002F   RadarController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.RadarController),\n+\u002F* harmony export *\u002F   RadialLinearScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.RadialLinearScale),\n+\u002F* harmony export *\u002F   Scale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Scale),\n+\u002F* harmony export *\u002F   ScatterController: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.ScatterController),\n+\u002F* harmony export *\u002F   SubTitle: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.SubTitle),\n+\u002F* harmony export *\u002F   Ticks: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Ticks),\n+\u002F* harmony export *\u002F   TimeScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.TimeScale),\n+\u002F* harmony export *\u002F   TimeSeriesScale: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.TimeSeriesScale),\n+\u002F* harmony export *\u002F   Title: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Title),\n+\u002F* harmony export *\u002F   Tooltip: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Tooltip),\n+\u002F* harmony export *\u002F   _adapters: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__._adapters),\n+\u002F* harmony export *\u002F   _detectPlatform: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__._detectPlatform),\n+\u002F* harmony export *\u002F   animator: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.animator),\n+\u002F* harmony export *\u002F   controllers: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.controllers),\n+\u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n+\u002F* harmony export *\u002F   defaults: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.defaults),\n+\u002F* harmony export *\u002F   elements: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.elements),\n+\u002F* harmony export *\u002F   layouts: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.layouts),\n+\u002F* harmony export *\u002F   plugins: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.plugins),\n+\u002F* harmony export *\u002F   registerables: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.registerables),\n+\u002F* harmony export *\u002F   registry: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.registry),\n+\u002F* harmony export *\u002F   scales: () => (\u002F* reexport safe *\u002F _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.scales)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var _dist_chart_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Fdist\u002Fchart.js *\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchart.js\");\n+\n+\n+_dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Chart.register(..._dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.registerables);\n+\n+\n+\u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (_dist_chart_js__WEBPACK_IMPORTED_MODULE_0__.Chart);\n+\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchart.js\"\n+\u002F*!*********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchart.js ***!\n+  \\*********************************************\u002F\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fconstants.js\":\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   Animation: () => (\u002F* binding *\u002F Animation),\n+\u002F* harmony export *\u002F   Animations: () => (\u002F* binding *\u002F Animations),\n+\u002F* harmony export *\u002F   ArcElement: () => (\u002F* binding *\u002F ArcElement),\n+\u002F* harmony export *\u002F   BarController: () => (\u002F* binding *\u002F BarController),\n+\u002F* harmony export *\u002F   BarElement: () => (\u002F* binding *\u002F BarElement),\n+\u002F* harmony export *\u002F   BasePlatform: () => (\u002F* binding *\u002F BasePlatform),\n+\u002F* harmony export *\u002F   BasicPlatform: () => (\u002F* binding *\u002F BasicPlatform),\n+\u002F* harmony export *\u002F   BubbleController: () => (\u002F* binding *\u002F BubbleController),\n+\u002F* harmony export *\u002F   CategoryScale: () => (\u002F* binding *\u002F CategoryScale),\n+\u002F* harmony export *\u002F   Chart: () => (\u002F* binding *\u002F Chart),\n+\u002F* harmony export *\u002F   Colors: () => (\u002F* binding *\u002F plugin_colors),\n+\u002F* harmony export *\u002F   DatasetController: () => (\u002F* binding *\u002F DatasetController),\n+\u002F* harmony export *\u002F   Decimation: () => (\u002F* binding *\u002F plugin_decimation),\n+\u002F* harmony export *\u002F   DomPlatform: () => (\u002F* binding *\u002F DomPlatform),\n+\u002F* harmony export *\u002F   DoughnutController: () => (\u002F* binding *\u002F DoughnutController),\n+\u002F* harmony export *\u002F   Element: () => (\u002F* binding *\u002F Element),\n+\u002F* harmony export *\u002F   Filler: () => (\u002F* binding *\u002F index),\n+\u002F* harmony export *\u002F   Interaction: () => (\u002F* binding *\u002F Interaction),\n+\u002F* harmony export *\u002F   Legend: () => (\u002F* binding *\u002F plugin_legend),\n+\u002F* harmony export *\u002F   LineController: () => (\u002F* binding *\u002F LineController),\n+\u002F* harmony export *\u002F   LineElement: () => (\u002F* binding *\u002F LineElement),\n+\u002F* harmony export *\u002F   LinearScale: () => (\u002F* binding *\u002F LinearScale),\n+\u002F* harmony export *\u002F   LogarithmicScale: () => (\u002F* binding *\u002F LogarithmicScale),\n+\u002F* harmony export *\u002F   PieController: () => (\u002F* binding *\u002F PieController),\n+\u002F* harmony export *\u002F   PointElement: () => (\u002F* binding *\u002F PointElement),\n+\u002F* harmony export *\u002F   PolarAreaController: () => (\u002F* binding *\u002F PolarAreaController),\n+\u002F* harmony export *\u002F   RadarController: () => (\u002F* binding *\u002F RadarController),\n+\u002F* harmony export *\u002F   RadialLinearScale: () => (\u002F* binding *\u002F RadialLinearScale),\n+\u002F* harmony export *\u002F   Scale: () => (\u002F* binding *\u002F Scale),\n+\u002F* harmony export *\u002F   ScatterController: () => (\u002F* binding *\u002F ScatterController),\n+\u002F* harmony export *\u002F   SubTitle: () => (\u002F* binding *\u002F plugin_subtitle),\n+\u002F* harmony export *\u002F   Ticks: () => (\u002F* reexport safe *\u002F _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aM),\n+\u002F* harmony export *\u002F   TimeScale: () => (\u002F* binding *\u002F TimeScale),\n+\u002F* harmony export *\u002F   TimeSeriesScale: () => (\u002F* binding *\u002F TimeSeriesScale),\n+\u002F* harmony export *\u002F   Title: () => (\u002F* binding *\u002F plugin_title),\n+\u002F* harmony export *\u002F   Tooltip: () => (\u002F* binding *\u002F plugin_tooltip),\n+\u002F* harmony export *\u002F   _adapters: () => (\u002F* binding *\u002F adapters),\n+\u002F* harmony export *\u002F   _detectPlatform: () => (\u002F* binding *\u002F _detectPlatform),\n+\u002F* harmony export *\u002F   animator: () => (\u002F* binding *\u002F animator),\n+\u002F* harmony export *\u002F   controllers: () => (\u002F* binding *\u002F controllers),\n+\u002F* harmony export *\u002F   defaults: () => (\u002F* reexport safe *\u002F _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d),\n+\u002F* harmony export *\u002F   elements: () => (\u002F* binding *\u002F elements),\n+\u002F* harmony export *\u002F   layouts: () => (\u002F* binding *\u002F layouts),\n+\u002F* harmony export *\u002F   plugins: () => (\u002F* binding *\u002F plugins),\n+\u002F* harmony export *\u002F   registerables: () => (\u002F* binding *\u002F registerables),\n+\u002F* harmony export *\u002F   registry: () => (\u002F* binding *\u002F registry),\n+\u002F* harmony export *\u002F   scales: () => (\u002F* binding *\u002F scales)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Fchunks\u002Fhelpers.dataset.js *\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchunks\u002Fhelpers.dataset.js\");\n+\u002F*!\n+ * Chart.js v4.5.1\n+ * https:\u002F\u002Fwww.chartjs.org\n+ * (c) 2025 Chart.js Contributors\n+ * Released under the MIT License\n+ *\u002F\n+\n+\n+\n+class Animator {\n+    constructor(){\n+        this._request = null;\n+        this._charts = new Map();\n+        this._running = false;\n+        this._lastDate = undefined;\n+    }\n+ _notify(chart, anims, date, type) {\n+        const callbacks = anims.listeners[type];\n+        const numSteps = anims.duration;\n+        callbacks.forEach((fn)=>fn({\n+                chart,\n+                initial: anims.initial,\n+                numSteps,\n+                currentStep: Math.min(date - anims.start, numSteps)\n+            }));\n+    }\n+ _refresh() {\n+        if (this._request) {\n+            return;\n+        }\n+        this._running = true;\n+        this._request = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.r.call(window, ()=>{\n+            this._update();\n+            this._request = null;\n+            if (this._running) {\n+                this._refresh();\n+            }\n+        });\n+    }\n+ _update(date = Date.now()) {\n+        let remaining = 0;\n+        this._charts.forEach((anims, chart)=>{\n+            if (!anims.running || !anims.items.length) {\n+                return;\n+            }\n+            const items = anims.items;\n+            let i = items.length - 1;\n+            let draw = false;\n+            let item;\n+            for(; i >= 0; --i){\n+                item = items[i];\n+                if (item._active) {\n+                    if (item._total > anims.duration) {\n+                        anims.duration = item._total;\n+                    }\n+                    item.tick(date);\n+                    draw = true;\n+                } else {\n+                    items[i] = items[items.length - 1];\n+                    items.pop();\n+                }\n+            }\n+            if (draw) {\n+                chart.draw();\n+                this._notify(chart, anims, date, 'progress');\n+            }\n+            if (!items.length) {\n+                anims.running = false;\n+                this._notify(chart, anims, date, 'complete');\n+                anims.initial = false;\n+            }\n+            remaining += items.length;\n+        });\n+        this._lastDate = date;\n+        if (remaining === 0) {\n+            this._running = false;\n+        }\n+    }\n+ _getAnims(chart) {\n+        const charts = this._charts;\n+        let anims = charts.get(chart);\n+        if (!anims) {\n+            anims = {\n+                running: false,\n+                initial: true,\n+                items: [],\n+                listeners: {\n+                    complete: [],\n+                    progress: []\n+                }\n+            };\n+            charts.set(chart, anims);\n+        }\n+        return anims;\n+    }\n+ listen(chart, event, cb) {\n+        this._getAnims(chart).listeners[event].push(cb);\n+    }\n+ add(chart, items) {\n+        if (!items || !items.length) {\n+            return;\n+        }\n+        this._getAnims(chart).items.push(...items);\n+    }\n+ has(chart) {\n+        return this._getAnims(chart).items.length > 0;\n+    }\n+ start(chart) {\n+        const anims = this._charts.get(chart);\n+        if (!anims) {\n+            return;\n+        }\n+        anims.running = true;\n+        anims.start = Date.now();\n+        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n+        this._refresh();\n+    }\n+    running(chart) {\n+        if (!this._running) {\n+            return false;\n+        }\n+        const anims = this._charts.get(chart);\n+        if (!anims || !anims.running || !anims.items.length) {\n+            return false;\n+        }\n+        return true;\n+    }\n+ stop(chart) {\n+        const anims = this._charts.get(chart);\n+        if (!anims || !anims.items.length) {\n+            return;\n+        }\n+        const items = anims.items;\n+        let i = items.length - 1;\n+        for(; i >= 0; --i){\n+            items[i].cancel();\n+        }\n+        anims.items = [];\n+        this._notify(chart, anims, Date.now(), 'complete');\n+    }\n+ remove(chart) {\n+        return this._charts.delete(chart);\n+    }\n+}\n+var animator = \u002F* #__PURE__ *\u002F new Animator();\n+\n+const transparent = 'transparent';\n+const interpolators = {\n+    boolean (from, to, factor) {\n+        return factor > 0.5 ? to : from;\n+    },\n+ color (from, to, factor) {\n+        const c0 = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.c)(from || transparent);\n+        const c1 = c0.valid && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.c)(to || transparent);\n+        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n+    },\n+    number (from, to, factor) {\n+        return from + (to - from) * factor;\n+    }\n+};\n+class Animation {\n+    constructor(cfg, target, prop, to){\n+        const currentValue = target[prop];\n+        to = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a)([\n+            cfg.to,\n+            to,\n+            currentValue,\n+            cfg.from\n+        ]);\n+        const from = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a)([\n+            cfg.from,\n+            currentValue,\n+            to\n+        ]);\n+        this._active = true;\n+        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n+        this._easing = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.e[cfg.easing] || _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.e.linear;\n+        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n+        this._duration = this._total = Math.floor(cfg.duration);\n+        this._loop = !!cfg.loop;\n+        this._target = target;\n+        this._prop = prop;\n+        this._from = from;\n+        this._to = to;\n+        this._promises = undefined;\n+    }\n+    active() {\n+        return this._active;\n+    }\n+    update(cfg, to, date) {\n+        if (this._active) {\n+            this._notify(false);\n+            const currentValue = this._target[this._prop];\n+            const elapsed = date - this._start;\n+            const remain = this._duration - elapsed;\n+            this._start = date;\n+            this._duration = Math.floor(Math.max(remain, cfg.duration));\n+            this._total += elapsed;\n+            this._loop = !!cfg.loop;\n+            this._to = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a)([\n+                cfg.to,\n+                to,\n+                currentValue,\n+                cfg.from\n+            ]);\n+            this._from = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a)([\n+                cfg.from,\n+                currentValue,\n+                to\n+            ]);\n+        }\n+    }\n+    cancel() {\n+        if (this._active) {\n+            this.tick(Date.now());\n+            this._active = false;\n+            this._notify(false);\n+        }\n+    }\n+    tick(date) {\n+        const elapsed = date - this._start;\n+        const duration = this._duration;\n+        const prop = this._prop;\n+        const from = this._from;\n+        const loop = this._loop;\n+        const to = this._to;\n+        let factor;\n+        this._active = from !== to && (loop || elapsed \u003C duration);\n+        if (!this._active) {\n+            this._target[prop] = to;\n+            this._notify(true);\n+            return;\n+        }\n+        if (elapsed \u003C 0) {\n+            this._target[prop] = from;\n+            return;\n+        }\n+        factor = elapsed \u002F duration % 2;\n+        factor = loop && factor > 1 ? 2 - factor : factor;\n+        factor = this._easing(Math.min(1, Math.max(0, factor)));\n+        this._target[prop] = this._fn(from, to, factor);\n+    }\n+    wait() {\n+        const promises = this._promises || (this._promises = []);\n+        return new Promise((res, rej)=>{\n+            promises.push({\n+                res,\n+                rej\n+            });\n+        });\n+    }\n+    _notify(resolved) {\n+        const method = resolved ? 'res' : 'rej';\n+        const promises = this._promises || [];\n+        for(let i = 0; i \u003C promises.length; i++){\n+            promises[i][method]();\n+        }\n+    }\n+}\n+\n+class Animations {\n+    constructor(chart, config){\n+        this._chart = chart;\n+        this._properties = new Map();\n+        this.configure(config);\n+    }\n+    configure(config) {\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(config)) {\n+            return;\n+        }\n+        const animationOptions = Object.keys(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.animation);\n+        const animatedProps = this._properties;\n+        Object.getOwnPropertyNames(config).forEach((key)=>{\n+            const cfg = config[key];\n+            if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(cfg)) {\n+                return;\n+            }\n+            const resolved = {};\n+            for (const option of animationOptions){\n+                resolved[option] = cfg[option];\n+            }\n+            ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(cfg.properties) && cfg.properties || [\n+                key\n+            ]).forEach((prop)=>{\n+                if (prop === key || !animatedProps.has(prop)) {\n+                    animatedProps.set(prop, resolved);\n+                }\n+            });\n+        });\n+    }\n+ _animateOptions(target, values) {\n+        const newOptions = values.options;\n+        const options = resolveTargetOptions(target, newOptions);\n+        if (!options) {\n+            return [];\n+        }\n+        const animations = this._createAnimations(options, newOptions);\n+        if (newOptions.$shared) {\n+            awaitAll(target.options.$animations, newOptions).then(()=>{\n+                target.options = newOptions;\n+            }, ()=>{\n+            });\n+        }\n+        return animations;\n+    }\n+ _createAnimations(target, values) {\n+        const animatedProps = this._properties;\n+        const animations = [];\n+        const running = target.$animations || (target.$animations = {});\n+        const props = Object.keys(values);\n+        const date = Date.now();\n+        let i;\n+        for(i = props.length - 1; i >= 0; --i){\n+            const prop = props[i];\n+            if (prop.charAt(0) === '$') {\n+                continue;\n+            }\n+            if (prop === 'options') {\n+                animations.push(...this._animateOptions(target, values));\n+                continue;\n+            }\n+            const value = values[prop];\n+            let animation = running[prop];\n+            const cfg = animatedProps.get(prop);\n+            if (animation) {\n+                if (cfg && animation.active()) {\n+                    animation.update(cfg, value, date);\n+                    continue;\n+                } else {\n+                    animation.cancel();\n+                }\n+            }\n+            if (!cfg || !cfg.duration) {\n+                target[prop] = value;\n+                continue;\n+            }\n+            running[prop] = animation = new Animation(cfg, target, prop, value);\n+            animations.push(animation);\n+        }\n+        return animations;\n+    }\n+ update(target, values) {\n+        if (this._properties.size === 0) {\n+            Object.assign(target, values);\n+            return;\n+        }\n+        const animations = this._createAnimations(target, values);\n+        if (animations.length) {\n+            animator.add(this._chart, animations);\n+            return true;\n+        }\n+    }\n+}\n+function awaitAll(animations, properties) {\n+    const running = [];\n+    const keys = Object.keys(properties);\n+    for(let i = 0; i \u003C keys.length; i++){\n+        const anim = animations[keys[i]];\n+        if (anim && anim.active()) {\n+            running.push(anim.wait());\n+        }\n+    }\n+    return Promise.all(running);\n+}\n+function resolveTargetOptions(target, newOptions) {\n+    if (!newOptions) {\n+        return;\n+    }\n+    let options = target.options;\n+    if (!options) {\n+        target.options = newOptions;\n+        return;\n+    }\n+    if (options.$shared) {\n+        target.options = options = Object.assign({}, options, {\n+            $shared: false,\n+            $animations: {}\n+        });\n+    }\n+    return options;\n+}\n+\n+function scaleClip(scale, allowedOverflow) {\n+    const opts = scale && scale.options || {};\n+    const reverse = opts.reverse;\n+    const min = opts.min === undefined ? allowedOverflow : 0;\n+    const max = opts.max === undefined ? allowedOverflow : 0;\n+    return {\n+        start: reverse ? max : min,\n+        end: reverse ? min : max\n+    };\n+}\n+function defaultClip(xScale, yScale, allowedOverflow) {\n+    if (allowedOverflow === false) {\n+        return false;\n+    }\n+    const x = scaleClip(xScale, allowedOverflow);\n+    const y = scaleClip(yScale, allowedOverflow);\n+    return {\n+        top: y.end,\n+        right: x.end,\n+        bottom: y.start,\n+        left: x.start\n+    };\n+}\n+function toClip(value) {\n+    let t, r, b, l;\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(value)) {\n+        t = value.top;\n+        r = value.right;\n+        b = value.bottom;\n+        l = value.left;\n+    } else {\n+        t = r = b = l = value;\n+    }\n+    return {\n+        top: t,\n+        right: r,\n+        bottom: b,\n+        left: l,\n+        disabled: value === false\n+    };\n+}\n+function getSortedDatasetIndices(chart, filterVisible) {\n+    const keys = [];\n+    const metasets = chart._getSortedDatasetMetas(filterVisible);\n+    let i, ilen;\n+    for(i = 0, ilen = metasets.length; i \u003C ilen; ++i){\n+        keys.push(metasets[i].index);\n+    }\n+    return keys;\n+}\n+function applyStack(stack, value, dsIndex, options = {}) {\n+    const keys = stack.keys;\n+    const singleMode = options.mode === 'single';\n+    let i, ilen, datasetIndex, otherValue;\n+    if (value === null) {\n+        return;\n+    }\n+    let found = false;\n+    for(i = 0, ilen = keys.length; i \u003C ilen; ++i){\n+        datasetIndex = +keys[i];\n+        if (datasetIndex === dsIndex) {\n+            found = true;\n+            if (options.all) {\n+                continue;\n+            }\n+            break;\n+        }\n+        otherValue = stack.values[datasetIndex];\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(otherValue) && (singleMode || value === 0 || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(value) === (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(otherValue))) {\n+            value += otherValue;\n+        }\n+    }\n+    if (!found && !options.all) {\n+        return 0;\n+    }\n+    return value;\n+}\n+function convertObjectDataToArray(data, meta) {\n+    const { iScale , vScale  } = meta;\n+    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n+    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n+    const keys = Object.keys(data);\n+    const adata = new Array(keys.length);\n+    let i, ilen, key;\n+    for(i = 0, ilen = keys.length; i \u003C ilen; ++i){\n+        key = keys[i];\n+        adata[i] = {\n+            [iAxisKey]: key,\n+            [vAxisKey]: data[key]\n+        };\n+    }\n+    return adata;\n+}\n+function isStacked(scale, meta) {\n+    const stacked = scale && scale.options.stacked;\n+    return stacked || stacked === undefined && meta.stack !== undefined;\n+}\n+function getStackKey(indexScale, valueScale, meta) {\n+    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n+}\n+function getUserBounds(scale) {\n+    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n+    return {\n+        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n+        max: maxDefined ? max : Number.POSITIVE_INFINITY\n+    };\n+}\n+function getOrCreateStack(stacks, stackKey, indexValue) {\n+    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n+    return subStack[indexValue] || (subStack[indexValue] = {});\n+}\n+function getLastIndexInStack(stack, vScale, positive, type) {\n+    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n+        const value = stack[meta.index];\n+        if (positive && value > 0 || !positive && value \u003C 0) {\n+            return meta.index;\n+        }\n+    }\n+    return null;\n+}\n+function updateStacks(controller, parsed) {\n+    const { chart , _cachedMeta: meta  } = controller;\n+    const stacks = chart._stacks || (chart._stacks = {});\n+    const { iScale , vScale , index: datasetIndex  } = meta;\n+    const iAxis = iScale.axis;\n+    const vAxis = vScale.axis;\n+    const key = getStackKey(iScale, vScale, meta);\n+    const ilen = parsed.length;\n+    let stack;\n+    for(let i = 0; i \u003C ilen; ++i){\n+        const item = parsed[i];\n+        const { [iAxis]: index , [vAxis]: value  } = item;\n+        const itemStacks = item._stacks || (item._stacks = {});\n+        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n+        stack[datasetIndex] = value;\n+        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n+        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n+        const visualValues = stack._visualValues || (stack._visualValues = {});\n+        visualValues[datasetIndex] = value;\n+    }\n+}\n+function getFirstScaleId(chart, axis) {\n+    const scales = chart.scales;\n+    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n+}\n+function createDatasetContext(parent, index) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        active: false,\n+        dataset: undefined,\n+        datasetIndex: index,\n+        index,\n+        mode: 'default',\n+        type: 'dataset'\n+    });\n+}\n+function createDataContext(parent, index, element) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        active: false,\n+        dataIndex: index,\n+        parsed: undefined,\n+        raw: undefined,\n+        element,\n+        index,\n+        mode: 'default',\n+        type: 'data'\n+    });\n+}\n+function clearStacks(meta, items) {\n+    const datasetIndex = meta.controller.index;\n+    const axis = meta.vScale && meta.vScale.axis;\n+    if (!axis) {\n+        return;\n+    }\n+    items = items || meta._parsed;\n+    for (const parsed of items){\n+        const stacks = parsed._stacks;\n+        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n+            return;\n+        }\n+        delete stacks[axis][datasetIndex];\n+        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n+            delete stacks[axis]._visualValues[datasetIndex];\n+        }\n+    }\n+}\n+const isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\n+const cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\n+const createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n+        keys: getSortedDatasetIndices(chart, true),\n+        values: null\n+    };\n+class DatasetController {\n+ static defaults = {};\n+ static datasetElementType = null;\n+ static dataElementType = null;\n+ constructor(chart, datasetIndex){\n+        this.chart = chart;\n+        this._ctx = chart.ctx;\n+        this.index = datasetIndex;\n+        this._cachedDataOpts = {};\n+        this._cachedMeta = this.getMeta();\n+        this._type = this._cachedMeta.type;\n+        this.options = undefined;\n+         this._parsing = false;\n+        this._data = undefined;\n+        this._objectData = undefined;\n+        this._sharedOptions = undefined;\n+        this._drawStart = undefined;\n+        this._drawCount = undefined;\n+        this.enableOptionSharing = false;\n+        this.supportsDecimation = false;\n+        this.$context = undefined;\n+        this._syncList = [];\n+        this.datasetElementType = new.target.datasetElementType;\n+        this.dataElementType = new.target.dataElementType;\n+        this.initialize();\n+    }\n+    initialize() {\n+        const meta = this._cachedMeta;\n+        this.configure();\n+        this.linkScales();\n+        meta._stacked = isStacked(meta.vScale, meta);\n+        this.addElements();\n+        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n+            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n+        }\n+    }\n+    updateIndex(datasetIndex) {\n+        if (this.index !== datasetIndex) {\n+            clearStacks(this._cachedMeta);\n+        }\n+        this.index = datasetIndex;\n+    }\n+    linkScales() {\n+        const chart = this.chart;\n+        const meta = this._cachedMeta;\n+        const dataset = this.getDataset();\n+        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n+        const xid = meta.xAxisID = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n+        const yid = meta.yAxisID = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n+        const rid = meta.rAxisID = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n+        const indexAxis = meta.indexAxis;\n+        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n+        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n+        meta.xScale = this.getScaleForId(xid);\n+        meta.yScale = this.getScaleForId(yid);\n+        meta.rScale = this.getScaleForId(rid);\n+        meta.iScale = this.getScaleForId(iid);\n+        meta.vScale = this.getScaleForId(vid);\n+    }\n+    getDataset() {\n+        return this.chart.data.datasets[this.index];\n+    }\n+    getMeta() {\n+        return this.chart.getDatasetMeta(this.index);\n+    }\n+ getScaleForId(scaleID) {\n+        return this.chart.scales[scaleID];\n+    }\n+ _getOtherScale(scale) {\n+        const meta = this._cachedMeta;\n+        return scale === meta.iScale ? meta.vScale : meta.iScale;\n+    }\n+    reset() {\n+        this._update('reset');\n+    }\n+ _destroy() {\n+        const meta = this._cachedMeta;\n+        if (this._data) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.u)(this._data, this);\n+        }\n+        if (meta._stacked) {\n+            clearStacks(meta);\n+        }\n+    }\n+ _dataCheck() {\n+        const dataset = this.getDataset();\n+        const data = dataset.data || (dataset.data = []);\n+        const _data = this._data;\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(data)) {\n+            const meta = this._cachedMeta;\n+            this._data = convertObjectDataToArray(data, meta);\n+        } else if (_data !== data) {\n+            if (_data) {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.u)(_data, this);\n+                const meta = this._cachedMeta;\n+                clearStacks(meta);\n+                meta._parsed = [];\n+            }\n+            if (data && Object.isExtensible(data)) {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.l)(data, this);\n+            }\n+            this._syncList = [];\n+            this._data = data;\n+        }\n+    }\n+    addElements() {\n+        const meta = this._cachedMeta;\n+        this._dataCheck();\n+        if (this.datasetElementType) {\n+            meta.dataset = new this.datasetElementType();\n+        }\n+    }\n+    buildOrUpdateElements(resetNewElements) {\n+        const meta = this._cachedMeta;\n+        const dataset = this.getDataset();\n+        let stackChanged = false;\n+        this._dataCheck();\n+        const oldStacked = meta._stacked;\n+        meta._stacked = isStacked(meta.vScale, meta);\n+        if (meta.stack !== dataset.stack) {\n+            stackChanged = true;\n+            clearStacks(meta);\n+            meta.stack = dataset.stack;\n+        }\n+        this._resyncElements(resetNewElements);\n+        if (stackChanged || oldStacked !== meta._stacked) {\n+            updateStacks(this, meta._parsed);\n+            meta._stacked = isStacked(meta.vScale, meta);\n+        }\n+    }\n+ configure() {\n+        const config = this.chart.config;\n+        const scopeKeys = config.datasetScopeKeys(this._type);\n+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n+        this.options = config.createResolver(scopes, this.getContext());\n+        this._parsing = this.options.parsing;\n+        this._cachedDataOpts = {};\n+    }\n+ parse(start, count) {\n+        const { _cachedMeta: meta , _data: data  } = this;\n+        const { iScale , _stacked  } = meta;\n+        const iAxis = iScale.axis;\n+        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n+        let prev = start > 0 && meta._parsed[start - 1];\n+        let i, cur, parsed;\n+        if (this._parsing === false) {\n+            meta._parsed = data;\n+            meta._sorted = true;\n+            parsed = data;\n+        } else {\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(data[start])) {\n+                parsed = this.parseArrayData(meta, data, start, count);\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(data[start])) {\n+                parsed = this.parseObjectData(meta, data, start, count);\n+            } else {\n+                parsed = this.parsePrimitiveData(meta, data, start, count);\n+            }\n+            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] \u003C prev[iAxis];\n+            for(i = 0; i \u003C count; ++i){\n+                meta._parsed[i + start] = cur = parsed[i];\n+                if (sorted) {\n+                    if (isNotInOrderComparedToPrev()) {\n+                        sorted = false;\n+                    }\n+                    prev = cur;\n+                }\n+            }\n+            meta._sorted = sorted;\n+        }\n+        if (_stacked) {\n+            updateStacks(this, parsed);\n+        }\n+    }\n+ parsePrimitiveData(meta, data, start, count) {\n+        const { iScale , vScale  } = meta;\n+        const iAxis = iScale.axis;\n+        const vAxis = vScale.axis;\n+        const labels = iScale.getLabels();\n+        const singleScale = iScale === vScale;\n+        const parsed = new Array(count);\n+        let i, ilen, index;\n+        for(i = 0, ilen = count; i \u003C ilen; ++i){\n+            index = i + start;\n+            parsed[i] = {\n+                [iAxis]: singleScale || iScale.parse(labels[index], index),\n+                [vAxis]: vScale.parse(data[index], index)\n+            };\n+        }\n+        return parsed;\n+    }\n+ parseArrayData(meta, data, start, count) {\n+        const { xScale , yScale  } = meta;\n+        const parsed = new Array(count);\n+        let i, ilen, index, item;\n+        for(i = 0, ilen = count; i \u003C ilen; ++i){\n+            index = i + start;\n+            item = data[index];\n+            parsed[i] = {\n+                x: xScale.parse(item[0], index),\n+                y: yScale.parse(item[1], index)\n+            };\n+        }\n+        return parsed;\n+    }\n+ parseObjectData(meta, data, start, count) {\n+        const { xScale , yScale  } = meta;\n+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n+        const parsed = new Array(count);\n+        let i, ilen, index, item;\n+        for(i = 0, ilen = count; i \u003C ilen; ++i){\n+            index = i + start;\n+            item = data[index];\n+            parsed[i] = {\n+                x: xScale.parse((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(item, xAxisKey), index),\n+                y: yScale.parse((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(item, yAxisKey), index)\n+            };\n+        }\n+        return parsed;\n+    }\n+ getParsed(index) {\n+        return this._cachedMeta._parsed[index];\n+    }\n+ getDataElement(index) {\n+        return this._cachedMeta.data[index];\n+    }\n+ applyStack(scale, parsed, mode) {\n+        const chart = this.chart;\n+        const meta = this._cachedMeta;\n+        const value = parsed[scale.axis];\n+        const stack = {\n+            keys: getSortedDatasetIndices(chart, true),\n+            values: parsed._stacks[scale.axis]._visualValues\n+        };\n+        return applyStack(stack, value, meta.index, {\n+            mode\n+        });\n+    }\n+ updateRangeFromParsed(range, scale, parsed, stack) {\n+        const parsedValue = parsed[scale.axis];\n+        let value = parsedValue === null ? NaN : parsedValue;\n+        const values = stack && parsed._stacks[scale.axis];\n+        if (stack && values) {\n+            stack.values = values;\n+            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n+        }\n+        range.min = Math.min(range.min, value);\n+        range.max = Math.max(range.max, value);\n+    }\n+ getMinMax(scale, canStack) {\n+        const meta = this._cachedMeta;\n+        const _parsed = meta._parsed;\n+        const sorted = meta._sorted && scale === meta.iScale;\n+        const ilen = _parsed.length;\n+        const otherScale = this._getOtherScale(scale);\n+        const stack = createStack(canStack, meta, this.chart);\n+        const range = {\n+            min: Number.POSITIVE_INFINITY,\n+            max: Number.NEGATIVE_INFINITY\n+        };\n+        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n+        let i, parsed;\n+        function _skip() {\n+            parsed = _parsed[i];\n+            const otherValue = parsed[otherScale.axis];\n+            return !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(parsed[scale.axis]) || otherMin > otherValue || otherMax \u003C otherValue;\n+        }\n+        for(i = 0; i \u003C ilen; ++i){\n+            if (_skip()) {\n+                continue;\n+            }\n+            this.updateRangeFromParsed(range, scale, parsed, stack);\n+            if (sorted) {\n+                break;\n+            }\n+        }\n+        if (sorted) {\n+            for(i = ilen - 1; i >= 0; --i){\n+                if (_skip()) {\n+                    continue;\n+                }\n+                this.updateRangeFromParsed(range, scale, parsed, stack);\n+                break;\n+            }\n+        }\n+        return range;\n+    }\n+    getAllParsedValues(scale) {\n+        const parsed = this._cachedMeta._parsed;\n+        const values = [];\n+        let i, ilen, value;\n+        for(i = 0, ilen = parsed.length; i \u003C ilen; ++i){\n+            value = parsed[i][scale.axis];\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(value)) {\n+                values.push(value);\n+            }\n+        }\n+        return values;\n+    }\n+ getMaxOverflow() {\n+        return false;\n+    }\n+ getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const iScale = meta.iScale;\n+        const vScale = meta.vScale;\n+        const parsed = this.getParsed(index);\n+        return {\n+            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n+            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n+        };\n+    }\n+ _update(mode) {\n+        const meta = this._cachedMeta;\n+        this.update(mode || 'default');\n+        meta._clip = toClip((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n+    }\n+ update(mode) {}\n+    draw() {\n+        const ctx = this._ctx;\n+        const chart = this.chart;\n+        const meta = this._cachedMeta;\n+        const elements = meta.data || [];\n+        const area = chart.chartArea;\n+        const active = [];\n+        const start = this._drawStart || 0;\n+        const count = this._drawCount || elements.length - start;\n+        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n+        let i;\n+        if (meta.dataset) {\n+            meta.dataset.draw(ctx, area, start, count);\n+        }\n+        for(i = start; i \u003C start + count; ++i){\n+            const element = elements[i];\n+            if (element.hidden) {\n+                continue;\n+            }\n+            if (element.active && drawActiveElementsOnTop) {\n+                active.push(element);\n+            } else {\n+                element.draw(ctx, area);\n+            }\n+        }\n+        for(i = 0; i \u003C active.length; ++i){\n+            active[i].draw(ctx, area);\n+        }\n+    }\n+ getStyle(index, active) {\n+        const mode = active ? 'active' : 'default';\n+        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n+    }\n+ getContext(index, active, mode) {\n+        const dataset = this.getDataset();\n+        let context;\n+        if (index >= 0 && index \u003C this._cachedMeta.data.length) {\n+            const element = this._cachedMeta.data[index];\n+            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n+            context.parsed = this.getParsed(index);\n+            context.raw = dataset.data[index];\n+            context.index = context.dataIndex = index;\n+        } else {\n+            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n+            context.dataset = dataset;\n+            context.index = context.datasetIndex = this.index;\n+        }\n+        context.active = !!active;\n+        context.mode = mode;\n+        return context;\n+    }\n+ resolveDatasetElementOptions(mode) {\n+        return this._resolveElementOptions(this.datasetElementType.id, mode);\n+    }\n+ resolveDataElementOptions(index, mode) {\n+        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n+    }\n+ _resolveElementOptions(elementType, mode = 'default', index) {\n+        const active = mode === 'active';\n+        const cache = this._cachedDataOpts;\n+        const cacheKey = elementType + '-' + mode;\n+        const cached = cache[cacheKey];\n+        const sharing = this.enableOptionSharing && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.h)(index);\n+        if (cached) {\n+            return cloneIfNotShared(cached, sharing);\n+        }\n+        const config = this.chart.config;\n+        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n+        const prefixes = active ? [\n+            `${elementType}Hover`,\n+            'hover',\n+            elementType,\n+            ''\n+        ] : [\n+            elementType,\n+            ''\n+        ];\n+        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n+        const names = Object.keys(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.elements[elementType]);\n+        const context = ()=>this.getContext(index, active, mode);\n+        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n+        if (values.$shared) {\n+            values.$shared = sharing;\n+            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n+        }\n+        return values;\n+    }\n+ _resolveAnimations(index, transition, active) {\n+        const chart = this.chart;\n+        const cache = this._cachedDataOpts;\n+        const cacheKey = `animation-${transition}`;\n+        const cached = cache[cacheKey];\n+        if (cached) {\n+            return cached;\n+        }\n+        let options;\n+        if (chart.options.animation !== false) {\n+            const config = this.chart.config;\n+            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n+            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n+            options = config.createResolver(scopes, this.getContext(index, active, transition));\n+        }\n+        const animations = new Animations(chart, options && options.animations);\n+        if (options && options._cacheable) {\n+            cache[cacheKey] = Object.freeze(animations);\n+        }\n+        return animations;\n+    }\n+ getSharedOptions(options) {\n+        if (!options.$shared) {\n+            return;\n+        }\n+        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n+    }\n+ includeOptions(mode, sharedOptions) {\n+        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n+    }\n+ _getSharedOptions(start, mode) {\n+        const firstOpts = this.resolveDataElementOptions(start, mode);\n+        const previouslySharedOptions = this._sharedOptions;\n+        const sharedOptions = this.getSharedOptions(firstOpts);\n+        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n+        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n+        return {\n+            sharedOptions,\n+            includeOptions\n+        };\n+    }\n+ updateElement(element, index, properties, mode) {\n+        if (isDirectUpdateMode(mode)) {\n+            Object.assign(element, properties);\n+        } else {\n+            this._resolveAnimations(index, mode).update(element, properties);\n+        }\n+    }\n+ updateSharedOptions(sharedOptions, mode, newOptions) {\n+        if (sharedOptions && !isDirectUpdateMode(mode)) {\n+            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n+        }\n+    }\n+ _setStyle(element, index, mode, active) {\n+        element.active = active;\n+        const options = this.getStyle(index, active);\n+        this._resolveAnimations(index, mode, active).update(element, {\n+            options: !active && this.getSharedOptions(options) || options\n+        });\n+    }\n+    removeHoverStyle(element, datasetIndex, index) {\n+        this._setStyle(element, index, 'active', false);\n+    }\n+    setHoverStyle(element, datasetIndex, index) {\n+        this._setStyle(element, index, 'active', true);\n+    }\n+ _removeDatasetHoverStyle() {\n+        const element = this._cachedMeta.dataset;\n+        if (element) {\n+            this._setStyle(element, undefined, 'active', false);\n+        }\n+    }\n+ _setDatasetHoverStyle() {\n+        const element = this._cachedMeta.dataset;\n+        if (element) {\n+            this._setStyle(element, undefined, 'active', true);\n+        }\n+    }\n+ _resyncElements(resetNewElements) {\n+        const data = this._data;\n+        const elements = this._cachedMeta.data;\n+        for (const [method, arg1, arg2] of this._syncList){\n+            this[method](arg1, arg2);\n+        }\n+        this._syncList = [];\n+        const numMeta = elements.length;\n+        const numData = data.length;\n+        const count = Math.min(numData, numMeta);\n+        if (count) {\n+            this.parse(0, count);\n+        }\n+        if (numData > numMeta) {\n+            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n+        } else if (numData \u003C numMeta) {\n+            this._removeElements(numData, numMeta - numData);\n+        }\n+    }\n+ _insertElements(start, count, resetNewElements = true) {\n+        const meta = this._cachedMeta;\n+        const data = meta.data;\n+        const end = start + count;\n+        let i;\n+        const move = (arr)=>{\n+            arr.length += count;\n+            for(i = arr.length - 1; i >= end; i--){\n+                arr[i] = arr[i - count];\n+            }\n+        };\n+        move(data);\n+        for(i = start; i \u003C end; ++i){\n+            data[i] = new this.dataElementType();\n+        }\n+        if (this._parsing) {\n+            move(meta._parsed);\n+        }\n+        this.parse(start, count);\n+        if (resetNewElements) {\n+            this.updateElements(data, start, count, 'reset');\n+        }\n+    }\n+    updateElements(element, start, count, mode) {}\n+ _removeElements(start, count) {\n+        const meta = this._cachedMeta;\n+        if (this._parsing) {\n+            const removed = meta._parsed.splice(start, count);\n+            if (meta._stacked) {\n+                clearStacks(meta, removed);\n+            }\n+        }\n+        meta.data.splice(start, count);\n+    }\n+ _sync(args) {\n+        if (this._parsing) {\n+            this._syncList.push(args);\n+        } else {\n+            const [method, arg1, arg2] = args;\n+            this[method](arg1, arg2);\n+        }\n+        this.chart._dataChanges.push([\n+            this.index,\n+            ...args\n+        ]);\n+    }\n+    _onDataPush() {\n+        const count = arguments.length;\n+        this._sync([\n+            '_insertElements',\n+            this.getDataset().data.length - count,\n+            count\n+        ]);\n+    }\n+    _onDataPop() {\n+        this._sync([\n+            '_removeElements',\n+            this._cachedMeta.data.length - 1,\n+            1\n+        ]);\n+    }\n+    _onDataShift() {\n+        this._sync([\n+            '_removeElements',\n+            0,\n+            1\n+        ]);\n+    }\n+    _onDataSplice(start, count) {\n+        if (count) {\n+            this._sync([\n+                '_removeElements',\n+                start,\n+                count\n+            ]);\n+        }\n+        const newCount = arguments.length - 2;\n+        if (newCount) {\n+            this._sync([\n+                '_insertElements',\n+                start,\n+                newCount\n+            ]);\n+        }\n+    }\n+    _onDataUnshift() {\n+        this._sync([\n+            '_insertElements',\n+            0,\n+            arguments.length\n+        ]);\n+    }\n+}\n+\n+function getAllScaleValues(scale, type) {\n+    if (!scale._cache.$bar) {\n+        const visibleMetas = scale.getMatchingVisibleMetas(type);\n+        let values = [];\n+        for(let i = 0, ilen = visibleMetas.length; i \u003C ilen; i++){\n+            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n+        }\n+        scale._cache.$bar = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__._)(values.sort((a, b)=>a - b));\n+    }\n+    return scale._cache.$bar;\n+}\n+ function computeMinSampleSize(meta) {\n+    const scale = meta.iScale;\n+    const values = getAllScaleValues(scale, meta.type);\n+    let min = scale._length;\n+    let i, ilen, curr, prev;\n+    const updateMinAndPrev = ()=>{\n+        if (curr === 32767 || curr === -32768) {\n+            return;\n+        }\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.h)(prev)) {\n+            min = Math.min(min, Math.abs(curr - prev) || min);\n+        }\n+        prev = curr;\n+    };\n+    for(i = 0, ilen = values.length; i \u003C ilen; ++i){\n+        curr = scale.getPixelForValue(values[i]);\n+        updateMinAndPrev();\n+    }\n+    prev = undefined;\n+    for(i = 0, ilen = scale.ticks.length; i \u003C ilen; ++i){\n+        curr = scale.getPixelForTick(i);\n+        updateMinAndPrev();\n+    }\n+    return min;\n+}\n+ function computeFitCategoryTraits(index, ruler, options, stackCount) {\n+    const thickness = options.barThickness;\n+    let size, ratio;\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(thickness)) {\n+        size = ruler.min * options.categoryPercentage;\n+        ratio = options.barPercentage;\n+    } else {\n+        size = thickness * stackCount;\n+        ratio = 1;\n+    }\n+    return {\n+        chunk: size \u002F stackCount,\n+        ratio,\n+        start: ruler.pixels[index] - size \u002F 2\n+    };\n+}\n+ function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n+    const pixels = ruler.pixels;\n+    const curr = pixels[index];\n+    let prev = index > 0 ? pixels[index - 1] : null;\n+    let next = index \u003C pixels.length - 1 ? pixels[index + 1] : null;\n+    const percent = options.categoryPercentage;\n+    if (prev === null) {\n+        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n+    }\n+    if (next === null) {\n+        next = curr + curr - prev;\n+    }\n+    const start = curr - (curr - Math.min(prev, next)) \u002F 2 * percent;\n+    const size = Math.abs(next - prev) \u002F 2 * percent;\n+    return {\n+        chunk: size \u002F stackCount,\n+        ratio: options.barPercentage,\n+        start\n+    };\n+}\n+function parseFloatBar(entry, item, vScale, i) {\n+    const startValue = vScale.parse(entry[0], i);\n+    const endValue = vScale.parse(entry[1], i);\n+    const min = Math.min(startValue, endValue);\n+    const max = Math.max(startValue, endValue);\n+    let barStart = min;\n+    let barEnd = max;\n+    if (Math.abs(min) > Math.abs(max)) {\n+        barStart = max;\n+        barEnd = min;\n+    }\n+    item[vScale.axis] = barEnd;\n+    item._custom = {\n+        barStart,\n+        barEnd,\n+        start: startValue,\n+        end: endValue,\n+        min,\n+        max\n+    };\n+}\n+function parseValue(entry, item, vScale, i) {\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(entry)) {\n+        parseFloatBar(entry, item, vScale, i);\n+    } else {\n+        item[vScale.axis] = vScale.parse(entry, i);\n+    }\n+    return item;\n+}\n+function parseArrayOrPrimitive(meta, data, start, count) {\n+    const iScale = meta.iScale;\n+    const vScale = meta.vScale;\n+    const labels = iScale.getLabels();\n+    const singleScale = iScale === vScale;\n+    const parsed = [];\n+    let i, ilen, item, entry;\n+    for(i = start, ilen = start + count; i \u003C ilen; ++i){\n+        entry = data[i];\n+        item = {};\n+        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n+        parsed.push(parseValue(entry, item, vScale, i));\n+    }\n+    return parsed;\n+}\n+function isFloatBar(custom) {\n+    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n+}\n+function barSign(size, vScale, actualBase) {\n+    if (size !== 0) {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(size);\n+    }\n+    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n+}\n+function borderProps(properties) {\n+    let reverse, start, end, top, bottom;\n+    if (properties.horizontal) {\n+        reverse = properties.base > properties.x;\n+        start = 'left';\n+        end = 'right';\n+    } else {\n+        reverse = properties.base \u003C properties.y;\n+        start = 'bottom';\n+        end = 'top';\n+    }\n+    if (reverse) {\n+        top = 'end';\n+        bottom = 'start';\n+    } else {\n+        top = 'start';\n+        bottom = 'end';\n+    }\n+    return {\n+        start,\n+        end,\n+        reverse,\n+        top,\n+        bottom\n+    };\n+}\n+function setBorderSkipped(properties, options, stack, index) {\n+    let edge = options.borderSkipped;\n+    const res = {};\n+    if (!edge) {\n+        properties.borderSkipped = res;\n+        return;\n+    }\n+    if (edge === true) {\n+        properties.borderSkipped = {\n+            top: true,\n+            right: true,\n+            bottom: true,\n+            left: true\n+        };\n+        return;\n+    }\n+    const { start , end , reverse , top , bottom  } = borderProps(properties);\n+    if (edge === 'middle' && stack) {\n+        properties.enableBorderRadius = true;\n+        if ((stack._top || 0) === index) {\n+            edge = top;\n+        } else if ((stack._bottom || 0) === index) {\n+            edge = bottom;\n+        } else {\n+            res[parseEdge(bottom, start, end, reverse)] = true;\n+            edge = top;\n+        }\n+    }\n+    res[parseEdge(edge, start, end, reverse)] = true;\n+    properties.borderSkipped = res;\n+}\n+function parseEdge(edge, a, b, reverse) {\n+    if (reverse) {\n+        edge = swap(edge, a, b);\n+        edge = startEnd(edge, b, a);\n+    } else {\n+        edge = startEnd(edge, a, b);\n+    }\n+    return edge;\n+}\n+function swap(orig, v1, v2) {\n+    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n+}\n+function startEnd(v, start, end) {\n+    return v === 'start' ? start : v === 'end' ? end : v;\n+}\n+function setInflateAmount(properties, { inflateAmount  }, ratio) {\n+    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n+}\n+class BarController extends DatasetController {\n+    static id = 'bar';\n+ static defaults = {\n+        datasetElementType: false,\n+        dataElementType: 'bar',\n+        categoryPercentage: 0.8,\n+        barPercentage: 0.9,\n+        grouped: true,\n+        animations: {\n+            numbers: {\n+                type: 'number',\n+                properties: [\n+                    'x',\n+                    'y',\n+                    'base',\n+                    'width',\n+                    'height'\n+                ]\n+            }\n+        }\n+    };\n+ static overrides = {\n+        scales: {\n+            _index_: {\n+                type: 'category',\n+                offset: true,\n+                grid: {\n+                    offset: true\n+                }\n+            },\n+            _value_: {\n+                type: 'linear',\n+                beginAtZero: true\n+            }\n+        }\n+    };\n+ parsePrimitiveData(meta, data, start, count) {\n+        return parseArrayOrPrimitive(meta, data, start, count);\n+    }\n+ parseArrayData(meta, data, start, count) {\n+        return parseArrayOrPrimitive(meta, data, start, count);\n+    }\n+ parseObjectData(meta, data, start, count) {\n+        const { iScale , vScale  } = meta;\n+        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n+        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n+        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n+        const parsed = [];\n+        let i, ilen, item, obj;\n+        for(i = start, ilen = start + count; i \u003C ilen; ++i){\n+            obj = data[i];\n+            item = {};\n+            item[iScale.axis] = iScale.parse((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(obj, iAxisKey), i);\n+            parsed.push(parseValue((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(obj, vAxisKey), item, vScale, i));\n+        }\n+        return parsed;\n+    }\n+ updateRangeFromParsed(range, scale, parsed, stack) {\n+        super.updateRangeFromParsed(range, scale, parsed, stack);\n+        const custom = parsed._custom;\n+        if (custom && scale === this._cachedMeta.vScale) {\n+            range.min = Math.min(range.min, custom.min);\n+            range.max = Math.max(range.max, custom.max);\n+        }\n+    }\n+ getMaxOverflow() {\n+        return 0;\n+    }\n+ getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const { iScale , vScale  } = meta;\n+        const parsed = this.getParsed(index);\n+        const custom = parsed._custom;\n+        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n+        return {\n+            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n+            value\n+        };\n+    }\n+    initialize() {\n+        this.enableOptionSharing = true;\n+        super.initialize();\n+        const meta = this._cachedMeta;\n+        meta.stack = this.getDataset().stack;\n+    }\n+    update(mode) {\n+        const meta = this._cachedMeta;\n+        this.updateElements(meta.data, 0, meta.data.length, mode);\n+    }\n+    updateElements(bars, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const { index , _cachedMeta: { vScale  }  } = this;\n+        const base = vScale.getBasePixel();\n+        const horizontal = vScale.isHorizontal();\n+        const ruler = this._getRuler();\n+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n+        for(let i = start; i \u003C start + count; i++){\n+            const parsed = this.getParsed(i);\n+            const vpixels = reset || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vScale.axis]) ? {\n+                base,\n+                head: base\n+            } : this._calculateBarValuePixels(i);\n+            const ipixels = this._calculateBarIndexPixels(i, ruler);\n+            const stack = (parsed._stacks || {})[vScale.axis];\n+            const properties = {\n+                horizontal,\n+                base: vpixels.base,\n+                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n+                x: horizontal ? vpixels.head : ipixels.center,\n+                y: horizontal ? ipixels.center : vpixels.head,\n+                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n+                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n+            };\n+            if (includeOptions) {\n+                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n+            }\n+            const options = properties.options || bars[i].options;\n+            setBorderSkipped(properties, options, stack, index);\n+            setInflateAmount(properties, options, ruler.ratio);\n+            this.updateElement(bars[i], i, properties, mode);\n+        }\n+    }\n+ _getStacks(last, dataIndex) {\n+        const { iScale  } = this._cachedMeta;\n+        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n+        const stacked = iScale.options.stacked;\n+        const stacks = [];\n+        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n+        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n+        const skipNull = (meta)=>{\n+            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n+            const val = parsed && parsed[meta.vScale.axis];\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(val) || isNaN(val)) {\n+                return true;\n+            }\n+        };\n+        for (const meta of metasets){\n+            if (dataIndex !== undefined && skipNull(meta)) {\n+                continue;\n+            }\n+            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n+                stacks.push(meta.stack);\n+            }\n+            if (meta.index === last) {\n+                break;\n+            }\n+        }\n+        if (!stacks.length) {\n+            stacks.push(undefined);\n+        }\n+        return stacks;\n+    }\n+ _getStackCount(index) {\n+        return this._getStacks(undefined, index).length;\n+    }\n+    _getAxisCount() {\n+        return this._getAxis().length;\n+    }\n+    getFirstScaleIdForIndexAxis() {\n+        const scales = this.chart.scales;\n+        const indexScaleId = this.chart.options.indexAxis;\n+        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();\n+    }\n+    _getAxis() {\n+        const axis = {};\n+        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n+        for (const dataset of this.chart.data.datasets){\n+            axis[(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n+        }\n+        return Object.keys(axis);\n+    }\n+ _getStackIndex(datasetIndex, name, dataIndex) {\n+        const stacks = this._getStacks(datasetIndex, dataIndex);\n+        const index = name !== undefined ? stacks.indexOf(name) : -1;\n+        return index === -1 ? stacks.length - 1 : index;\n+    }\n+ _getRuler() {\n+        const opts = this.options;\n+        const meta = this._cachedMeta;\n+        const iScale = meta.iScale;\n+        const pixels = [];\n+        let i, ilen;\n+        for(i = 0, ilen = meta.data.length; i \u003C ilen; ++i){\n+            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n+        }\n+        const barThickness = opts.barThickness;\n+        const min = barThickness || computeMinSampleSize(meta);\n+        return {\n+            min,\n+            pixels,\n+            start: iScale._startPixel,\n+            end: iScale._endPixel,\n+            stackCount: this._getStackCount(),\n+            scale: iScale,\n+            grouped: opts.grouped,\n+            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n+        };\n+    }\n+ _calculateBarValuePixels(index) {\n+        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n+        const actualBase = baseValue || 0;\n+        const parsed = this.getParsed(index);\n+        const custom = parsed._custom;\n+        const floating = isFloatBar(custom);\n+        let value = parsed[vScale.axis];\n+        let start = 0;\n+        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n+        let head, size;\n+        if (length !== value) {\n+            start = length - value;\n+            length = value;\n+        }\n+        if (floating) {\n+            value = custom.barStart;\n+            length = custom.barEnd - custom.barStart;\n+            if (value !== 0 && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(value) !== (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(custom.barEnd)) {\n+                start = 0;\n+            }\n+            start += value;\n+        }\n+        const startValue = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(baseValue) && !floating ? baseValue : start;\n+        let base = vScale.getPixelForValue(startValue);\n+        if (this.chart.getDataVisibility(index)) {\n+            head = vScale.getPixelForValue(start + length);\n+        } else {\n+            head = base;\n+        }\n+        size = head - base;\n+        if (Math.abs(size) \u003C minBarLength) {\n+            size = barSign(size, vScale, actualBase) * minBarLength;\n+            if (value === actualBase) {\n+                base -= size \u002F 2;\n+            }\n+            const startPixel = vScale.getPixelForDecimal(0);\n+            const endPixel = vScale.getPixelForDecimal(1);\n+            const min = Math.min(startPixel, endPixel);\n+            const max = Math.max(startPixel, endPixel);\n+            base = Math.max(Math.min(base, max), min);\n+            head = base + size;\n+            if (_stacked && !floating) {\n+                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n+            }\n+        }\n+        if (base === vScale.getPixelForValue(actualBase)) {\n+            const halfGrid = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(size) * vScale.getLineWidthForValue(actualBase) \u002F 2;\n+            base += halfGrid;\n+            size -= halfGrid;\n+        }\n+        return {\n+            size,\n+            base,\n+            head,\n+            center: head + size \u002F 2\n+        };\n+    }\n+ _calculateBarIndexPixels(index, ruler) {\n+        const scale = ruler.scale;\n+        const options = this.options;\n+        const skipNull = options.skipNull;\n+        const maxBarThickness = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(options.maxBarThickness, Infinity);\n+        let center, size;\n+        const axisCount = this._getAxisCount();\n+        if (ruler.grouped) {\n+            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n+            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n+            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n+            const axisNumber = this._getAxis().indexOf((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(axisID, this.getFirstScaleIdForIndexAxis()));\n+            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n+            center = range.start + range.chunk * stackIndex + range.chunk \u002F 2;\n+            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n+        } else {\n+            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n+            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n+        }\n+        return {\n+            base: center - size \u002F 2,\n+            head: center + size \u002F 2,\n+            center,\n+            size\n+        };\n+    }\n+    draw() {\n+        const meta = this._cachedMeta;\n+        const vScale = meta.vScale;\n+        const rects = meta.data;\n+        const ilen = rects.length;\n+        let i = 0;\n+        for(; i \u003C ilen; ++i){\n+            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n+                rects[i].draw(this._ctx);\n+            }\n+        }\n+    }\n+}\n+\n+class BubbleController extends DatasetController {\n+    static id = 'bubble';\n+ static defaults = {\n+        datasetElementType: false,\n+        dataElementType: 'point',\n+        animations: {\n+            numbers: {\n+                type: 'number',\n+                properties: [\n+                    'x',\n+                    'y',\n+                    'borderWidth',\n+                    'radius'\n+                ]\n+            }\n+        }\n+    };\n+ static overrides = {\n+        scales: {\n+            x: {\n+                type: 'linear'\n+            },\n+            y: {\n+                type: 'linear'\n+            }\n+        }\n+    };\n+    initialize() {\n+        this.enableOptionSharing = true;\n+        super.initialize();\n+    }\n+ parsePrimitiveData(meta, data, start, count) {\n+        const parsed = super.parsePrimitiveData(meta, data, start, count);\n+        for(let i = 0; i \u003C parsed.length; i++){\n+            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n+        }\n+        return parsed;\n+    }\n+ parseArrayData(meta, data, start, count) {\n+        const parsed = super.parseArrayData(meta, data, start, count);\n+        for(let i = 0; i \u003C parsed.length; i++){\n+            const item = data[start + i];\n+            parsed[i]._custom = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(item[2], this.resolveDataElementOptions(i + start).radius);\n+        }\n+        return parsed;\n+    }\n+ parseObjectData(meta, data, start, count) {\n+        const parsed = super.parseObjectData(meta, data, start, count);\n+        for(let i = 0; i \u003C parsed.length; i++){\n+            const item = data[start + i];\n+            parsed[i]._custom = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n+        }\n+        return parsed;\n+    }\n+ getMaxOverflow() {\n+        const data = this._cachedMeta.data;\n+        let max = 0;\n+        for(let i = data.length - 1; i >= 0; --i){\n+            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) \u002F 2);\n+        }\n+        return max > 0 && max;\n+    }\n+ getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const labels = this.chart.data.labels || [];\n+        const { xScale , yScale  } = meta;\n+        const parsed = this.getParsed(index);\n+        const x = xScale.getLabelForValue(parsed.x);\n+        const y = yScale.getLabelForValue(parsed.y);\n+        const r = parsed._custom;\n+        return {\n+            label: labels[index] || '',\n+            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n+        };\n+    }\n+    update(mode) {\n+        const points = this._cachedMeta.data;\n+        this.updateElements(points, 0, points.length, mode);\n+    }\n+    updateElements(points, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const { iScale , vScale  } = this._cachedMeta;\n+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n+        const iAxis = iScale.axis;\n+        const vAxis = vScale.axis;\n+        for(let i = start; i \u003C start + count; i++){\n+            const point = points[i];\n+            const parsed = !reset && this.getParsed(i);\n+            const properties = {};\n+            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n+            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n+            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n+            if (includeOptions) {\n+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n+                if (reset) {\n+                    properties.options.radius = 0;\n+                }\n+            }\n+            this.updateElement(point, i, properties, mode);\n+        }\n+    }\n+ resolveDataElementOptions(index, mode) {\n+        const parsed = this.getParsed(index);\n+        let values = super.resolveDataElementOptions(index, mode);\n+        if (values.$shared) {\n+            values = Object.assign({}, values, {\n+                $shared: false\n+            });\n+        }\n+        const radius = values.radius;\n+        if (mode !== 'active') {\n+            values.radius = 0;\n+        }\n+        values.radius += (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(parsed && parsed._custom, radius);\n+        return values;\n+    }\n+}\n+\n+function getRatioAndOffset(rotation, circumference, cutout) {\n+    let ratioX = 1;\n+    let ratioY = 1;\n+    let offsetX = 0;\n+    let offsetY = 0;\n+    if (circumference \u003C _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T) {\n+        const startAngle = rotation;\n+        const endAngle = startAngle + circumference;\n+        const startX = Math.cos(startAngle);\n+        const startY = Math.sin(startAngle);\n+        const endX = Math.cos(endAngle);\n+        const endY = Math.sin(endAngle);\n+        const calcMax = (angle, a, b)=>(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n+        const calcMin = (angle, a, b)=>(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n+        const maxX = calcMax(0, startX, endX);\n+        const maxY = calcMax(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H, startY, endY);\n+        const minX = calcMin(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P, startX, endX);\n+        const minY = calcMin(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H, startY, endY);\n+        ratioX = (maxX - minX) \u002F 2;\n+        ratioY = (maxY - minY) \u002F 2;\n+        offsetX = -(maxX + minX) \u002F 2;\n+        offsetY = -(maxY + minY) \u002F 2;\n+    }\n+    return {\n+        ratioX,\n+        ratioY,\n+        offsetX,\n+        offsetY\n+    };\n+}\n+class DoughnutController extends DatasetController {\n+    static id = 'doughnut';\n+ static defaults = {\n+        datasetElementType: false,\n+        dataElementType: 'arc',\n+        animation: {\n+            animateRotate: true,\n+            animateScale: false\n+        },\n+        animations: {\n+            numbers: {\n+                type: 'number',\n+                properties: [\n+                    'circumference',\n+                    'endAngle',\n+                    'innerRadius',\n+                    'outerRadius',\n+                    'startAngle',\n+                    'x',\n+                    'y',\n+                    'offset',\n+                    'borderWidth',\n+                    'spacing'\n+                ]\n+            }\n+        },\n+        cutout: '50%',\n+        rotation: 0,\n+        circumference: 360,\n+        radius: '100%',\n+        spacing: 0,\n+        indexAxis: 'r'\n+    };\n+    static descriptors = {\n+        _scriptable: (name)=>name !== 'spacing',\n+        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n+    };\n+ static overrides = {\n+        aspectRatio: 1,\n+        plugins: {\n+            legend: {\n+                labels: {\n+                    generateLabels (chart) {\n+                        const data = chart.data;\n+                        const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n+                        if (data.labels.length && data.datasets.length) {\n+                            return data.labels.map((label, i)=>{\n+                                const meta = chart.getDatasetMeta(0);\n+                                const style = meta.controller.getStyle(i);\n+                                return {\n+                                    text: label,\n+                                    fillStyle: style.backgroundColor,\n+                                    fontColor: color,\n+                                    hidden: !chart.getDataVisibility(i),\n+                                    lineDash: style.borderDash,\n+                                    lineDashOffset: style.borderDashOffset,\n+                                    lineJoin: style.borderJoinStyle,\n+                                    lineWidth: style.borderWidth,\n+                                    strokeStyle: style.borderColor,\n+                                    textAlign: textAlign,\n+                                    pointStyle: pointStyle,\n+                                    borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n+                                    index: i\n+                                };\n+                            });\n+                        }\n+                        return [];\n+                    }\n+                },\n+                onClick (e, legendItem, legend) {\n+                    legend.chart.toggleDataVisibility(legendItem.index);\n+                    legend.chart.update();\n+                }\n+            }\n+        }\n+    };\n+    constructor(chart, datasetIndex){\n+        super(chart, datasetIndex);\n+        this.enableOptionSharing = true;\n+        this.innerRadius = undefined;\n+        this.outerRadius = undefined;\n+        this.offsetX = undefined;\n+        this.offsetY = undefined;\n+    }\n+    linkScales() {}\n+ parse(start, count) {\n+        const data = this.getDataset().data;\n+        const meta = this._cachedMeta;\n+        if (this._parsing === false) {\n+            meta._parsed = data;\n+        } else {\n+            let getter = (i)=>+data[i];\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(data[start])) {\n+                const { key ='value'  } = this._parsing;\n+                getter = (i)=>+(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(data[i], key);\n+            }\n+            let i, ilen;\n+            for(i = start, ilen = start + count; i \u003C ilen; ++i){\n+                meta._parsed[i] = getter(i);\n+            }\n+        }\n+    }\n+ _getRotation() {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.rotation - 90);\n+    }\n+ _getCircumference() {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.circumference);\n+    }\n+ _getRotationExtents() {\n+        let min = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T;\n+        let max = -_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T;\n+        for(let i = 0; i \u003C this.chart.data.datasets.length; ++i){\n+            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n+                const controller = this.chart.getDatasetMeta(i).controller;\n+                const rotation = controller._getRotation();\n+                const circumference = controller._getCircumference();\n+                min = Math.min(min, rotation);\n+                max = Math.max(max, rotation + circumference);\n+            }\n+        }\n+        return {\n+            rotation: min,\n+            circumference: max - min\n+        };\n+    }\n+ update(mode) {\n+        const chart = this.chart;\n+        const { chartArea  } = chart;\n+        const meta = this._cachedMeta;\n+        const arcs = meta.data;\n+        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n+        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) \u002F 2, 0);\n+        const cutout = Math.min((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.m)(this.options.cutout, maxSize), 1);\n+        const chartWeight = this._getRingWeight(this.index);\n+        const { circumference , rotation  } = this._getRotationExtents();\n+        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n+        const maxWidth = (chartArea.width - spacing) \u002F ratioX;\n+        const maxHeight = (chartArea.height - spacing) \u002F ratioY;\n+        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) \u002F 2, 0);\n+        const outerRadius = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.n)(this.options.radius, maxRadius);\n+        const innerRadius = Math.max(outerRadius * cutout, 0);\n+        const radiusLength = (outerRadius - innerRadius) \u002F this._getVisibleDatasetWeightTotal();\n+        this.offsetX = offsetX * outerRadius;\n+        this.offsetY = offsetY * outerRadius;\n+        meta.total = this.calculateTotal();\n+        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n+        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n+        this.updateElements(arcs, 0, arcs.length, mode);\n+    }\n+ _circumference(i, reset) {\n+        const opts = this.options;\n+        const meta = this._cachedMeta;\n+        const circumference = this._getCircumference();\n+        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n+            return 0;\n+        }\n+        return this.calculateCircumference(meta._parsed[i] * circumference \u002F _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T);\n+    }\n+    updateElements(arcs, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const chart = this.chart;\n+        const chartArea = chart.chartArea;\n+        const opts = chart.options;\n+        const animationOpts = opts.animation;\n+        const centerX = (chartArea.left + chartArea.right) \u002F 2;\n+        const centerY = (chartArea.top + chartArea.bottom) \u002F 2;\n+        const animateScale = reset && animationOpts.animateScale;\n+        const innerRadius = animateScale ? 0 : this.innerRadius;\n+        const outerRadius = animateScale ? 0 : this.outerRadius;\n+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n+        let startAngle = this._getRotation();\n+        let i;\n+        for(i = 0; i \u003C start; ++i){\n+            startAngle += this._circumference(i, reset);\n+        }\n+        for(i = start; i \u003C start + count; ++i){\n+            const circumference = this._circumference(i, reset);\n+            const arc = arcs[i];\n+            const properties = {\n+                x: centerX + this.offsetX,\n+                y: centerY + this.offsetY,\n+                startAngle,\n+                endAngle: startAngle + circumference,\n+                circumference,\n+                outerRadius,\n+                innerRadius\n+            };\n+            if (includeOptions) {\n+                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n+            }\n+            startAngle += circumference;\n+            this.updateElement(arc, i, properties, mode);\n+        }\n+    }\n+    calculateTotal() {\n+        const meta = this._cachedMeta;\n+        const metaData = meta.data;\n+        let total = 0;\n+        let i;\n+        for(i = 0; i \u003C metaData.length; i++){\n+            const value = meta._parsed[i];\n+            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n+                total += Math.abs(value);\n+            }\n+        }\n+        return total;\n+    }\n+    calculateCircumference(value) {\n+        const total = this._cachedMeta.total;\n+        if (total > 0 && !isNaN(value)) {\n+            return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T * (Math.abs(value) \u002F total);\n+        }\n+        return 0;\n+    }\n+    getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const chart = this.chart;\n+        const labels = chart.data.labels || [];\n+        const value = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.o)(meta._parsed[index], chart.options.locale);\n+        return {\n+            label: labels[index] || '',\n+            value\n+        };\n+    }\n+    getMaxBorderWidth(arcs) {\n+        let max = 0;\n+        const chart = this.chart;\n+        let i, ilen, meta, controller, options;\n+        if (!arcs) {\n+            for(i = 0, ilen = chart.data.datasets.length; i \u003C ilen; ++i){\n+                if (chart.isDatasetVisible(i)) {\n+                    meta = chart.getDatasetMeta(i);\n+                    arcs = meta.data;\n+                    controller = meta.controller;\n+                    break;\n+                }\n+            }\n+        }\n+        if (!arcs) {\n+            return 0;\n+        }\n+        for(i = 0, ilen = arcs.length; i \u003C ilen; ++i){\n+            options = controller.resolveDataElementOptions(i);\n+            if (options.borderAlign !== 'inner') {\n+                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n+            }\n+        }\n+        return max;\n+    }\n+    getMaxOffset(arcs) {\n+        let max = 0;\n+        for(let i = 0, ilen = arcs.length; i \u003C ilen; ++i){\n+            const options = this.resolveDataElementOptions(i);\n+            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n+        }\n+        return max;\n+    }\n+ _getRingWeightOffset(datasetIndex) {\n+        let ringWeightOffset = 0;\n+        for(let i = 0; i \u003C datasetIndex; ++i){\n+            if (this.chart.isDatasetVisible(i)) {\n+                ringWeightOffset += this._getRingWeight(i);\n+            }\n+        }\n+        return ringWeightOffset;\n+    }\n+ _getRingWeight(datasetIndex) {\n+        return Math.max((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n+    }\n+ _getVisibleDatasetWeightTotal() {\n+        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n+    }\n+}\n+\n+class LineController extends DatasetController {\n+    static id = 'line';\n+ static defaults = {\n+        datasetElementType: 'line',\n+        dataElementType: 'point',\n+        showLine: true,\n+        spanGaps: false\n+    };\n+ static overrides = {\n+        scales: {\n+            _index_: {\n+                type: 'category'\n+            },\n+            _value_: {\n+                type: 'linear'\n+            }\n+        }\n+    };\n+    initialize() {\n+        this.enableOptionSharing = true;\n+        this.supportsDecimation = true;\n+        super.initialize();\n+    }\n+    update(mode) {\n+        const meta = this._cachedMeta;\n+        const { dataset: line , data: points = [] , _dataset  } = meta;\n+        const animationsDisabled = this.chart._animationsDisabled;\n+        let { start , count  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.q)(meta, points, animationsDisabled);\n+        this._drawStart = start;\n+        this._drawCount = count;\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.w)(meta)) {\n+            start = 0;\n+            count = points.length;\n+        }\n+        line._chart = this.chart;\n+        line._datasetIndex = this.index;\n+        line._decimated = !!_dataset._decimated;\n+        line.points = points;\n+        const options = this.resolveDatasetElementOptions(mode);\n+        if (!this.options.showLine) {\n+            options.borderWidth = 0;\n+        }\n+        options.segment = this.options.segment;\n+        this.updateElement(line, undefined, {\n+            animated: !animationsDisabled,\n+            options\n+        }, mode);\n+        this.updateElements(points, start, count, mode);\n+    }\n+    updateElements(points, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n+        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n+        const iAxis = iScale.axis;\n+        const vAxis = vScale.axis;\n+        const { spanGaps , segment  } = this.options;\n+        const maxGapLength = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n+        const end = start + count;\n+        const pointsCount = points.length;\n+        let prevParsed = start > 0 && this.getParsed(start - 1);\n+        for(let i = 0; i \u003C pointsCount; ++i){\n+            const point = points[i];\n+            const properties = directUpdate ? point : {};\n+            if (i \u003C start || i >= end) {\n+                properties.skip = true;\n+                continue;\n+            }\n+            const parsed = this.getParsed(i);\n+            const nullData = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vAxis]);\n+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n+            if (segment) {\n+                properties.parsed = parsed;\n+                properties.raw = _dataset.data[i];\n+            }\n+            if (includeOptions) {\n+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n+            }\n+            if (!directUpdate) {\n+                this.updateElement(point, i, properties, mode);\n+            }\n+            prevParsed = parsed;\n+        }\n+    }\n+ getMaxOverflow() {\n+        const meta = this._cachedMeta;\n+        const dataset = meta.dataset;\n+        const border = dataset.options && dataset.options.borderWidth || 0;\n+        const data = meta.data || [];\n+        if (!data.length) {\n+            return border;\n+        }\n+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n+        return Math.max(border, firstPoint, lastPoint) \u002F 2;\n+    }\n+    draw() {\n+        const meta = this._cachedMeta;\n+        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n+        super.draw();\n+    }\n+}\n+\n+class PolarAreaController extends DatasetController {\n+    static id = 'polarArea';\n+ static defaults = {\n+        dataElementType: 'arc',\n+        animation: {\n+            animateRotate: true,\n+            animateScale: true\n+        },\n+        animations: {\n+            numbers: {\n+                type: 'number',\n+                properties: [\n+                    'x',\n+                    'y',\n+                    'startAngle',\n+                    'endAngle',\n+                    'innerRadius',\n+                    'outerRadius'\n+                ]\n+            }\n+        },\n+        indexAxis: 'r',\n+        startAngle: 0\n+    };\n+ static overrides = {\n+        aspectRatio: 1,\n+        plugins: {\n+            legend: {\n+                labels: {\n+                    generateLabels (chart) {\n+                        const data = chart.data;\n+                        if (data.labels.length && data.datasets.length) {\n+                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n+                            return data.labels.map((label, i)=>{\n+                                const meta = chart.getDatasetMeta(0);\n+                                const style = meta.controller.getStyle(i);\n+                                return {\n+                                    text: label,\n+                                    fillStyle: style.backgroundColor,\n+                                    strokeStyle: style.borderColor,\n+                                    fontColor: color,\n+                                    lineWidth: style.borderWidth,\n+                                    pointStyle: pointStyle,\n+                                    hidden: !chart.getDataVisibility(i),\n+                                    index: i\n+                                };\n+                            });\n+                        }\n+                        return [];\n+                    }\n+                },\n+                onClick (e, legendItem, legend) {\n+                    legend.chart.toggleDataVisibility(legendItem.index);\n+                    legend.chart.update();\n+                }\n+            }\n+        },\n+        scales: {\n+            r: {\n+                type: 'radialLinear',\n+                angleLines: {\n+                    display: false\n+                },\n+                beginAtZero: true,\n+                grid: {\n+                    circular: true\n+                },\n+                pointLabels: {\n+                    display: false\n+                },\n+                startAngle: 0\n+            }\n+        }\n+    };\n+    constructor(chart, datasetIndex){\n+        super(chart, datasetIndex);\n+        this.innerRadius = undefined;\n+        this.outerRadius = undefined;\n+    }\n+    getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const chart = this.chart;\n+        const labels = chart.data.labels || [];\n+        const value = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.o)(meta._parsed[index].r, chart.options.locale);\n+        return {\n+            label: labels[index] || '',\n+            value\n+        };\n+    }\n+    parseObjectData(meta, data, start, count) {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.y.bind(this)(meta, data, start, count);\n+    }\n+    update(mode) {\n+        const arcs = this._cachedMeta.data;\n+        this._updateRadius();\n+        this.updateElements(arcs, 0, arcs.length, mode);\n+    }\n+ getMinMax() {\n+        const meta = this._cachedMeta;\n+        const range = {\n+            min: Number.POSITIVE_INFINITY,\n+            max: Number.NEGATIVE_INFINITY\n+        };\n+        meta.data.forEach((element, index)=>{\n+            const parsed = this.getParsed(index).r;\n+            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n+                if (parsed \u003C range.min) {\n+                    range.min = parsed;\n+                }\n+                if (parsed > range.max) {\n+                    range.max = parsed;\n+                }\n+            }\n+        });\n+        return range;\n+    }\n+ _updateRadius() {\n+        const chart = this.chart;\n+        const chartArea = chart.chartArea;\n+        const opts = chart.options;\n+        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n+        const outerRadius = Math.max(minSize \u002F 2, 0);\n+        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius \u002F 100 * opts.cutoutPercentage : 1, 0);\n+        const radiusLength = (outerRadius - innerRadius) \u002F chart.getVisibleDatasetCount();\n+        this.outerRadius = outerRadius - radiusLength * this.index;\n+        this.innerRadius = this.outerRadius - radiusLength;\n+    }\n+    updateElements(arcs, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const chart = this.chart;\n+        const opts = chart.options;\n+        const animationOpts = opts.animation;\n+        const scale = this._cachedMeta.rScale;\n+        const centerX = scale.xCenter;\n+        const centerY = scale.yCenter;\n+        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P;\n+        let angle = datasetStartAngle;\n+        let i;\n+        const defaultAngle = 360 \u002F this.countVisibleElements();\n+        for(i = 0; i \u003C start; ++i){\n+            angle += this._computeAngle(i, mode, defaultAngle);\n+        }\n+        for(i = start; i \u003C start + count; i++){\n+            const arc = arcs[i];\n+            let startAngle = angle;\n+            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n+            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n+            angle = endAngle;\n+            if (reset) {\n+                if (animationOpts.animateScale) {\n+                    outerRadius = 0;\n+                }\n+                if (animationOpts.animateRotate) {\n+                    startAngle = endAngle = datasetStartAngle;\n+                }\n+            }\n+            const properties = {\n+                x: centerX,\n+                y: centerY,\n+                innerRadius: 0,\n+                outerRadius,\n+                startAngle,\n+                endAngle,\n+                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n+            };\n+            this.updateElement(arc, i, properties, mode);\n+        }\n+    }\n+    countVisibleElements() {\n+        const meta = this._cachedMeta;\n+        let count = 0;\n+        meta.data.forEach((element, index)=>{\n+            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n+                count++;\n+            }\n+        });\n+        return count;\n+    }\n+ _computeAngle(index, mode, defaultAngle) {\n+        return this.chart.getDataVisibility(index) ? (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n+    }\n+}\n+\n+class PieController extends DoughnutController {\n+    static id = 'pie';\n+ static defaults = {\n+        cutout: 0,\n+        rotation: 0,\n+        circumference: 360,\n+        radius: '100%'\n+    };\n+}\n+\n+class RadarController extends DatasetController {\n+    static id = 'radar';\n+ static defaults = {\n+        datasetElementType: 'line',\n+        dataElementType: 'point',\n+        indexAxis: 'r',\n+        showLine: true,\n+        elements: {\n+            line: {\n+                fill: 'start'\n+            }\n+        }\n+    };\n+ static overrides = {\n+        aspectRatio: 1,\n+        scales: {\n+            r: {\n+                type: 'radialLinear'\n+            }\n+        }\n+    };\n+ getLabelAndValue(index) {\n+        const vScale = this._cachedMeta.vScale;\n+        const parsed = this.getParsed(index);\n+        return {\n+            label: vScale.getLabels()[index],\n+            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n+        };\n+    }\n+    parseObjectData(meta, data, start, count) {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.y.bind(this)(meta, data, start, count);\n+    }\n+    update(mode) {\n+        const meta = this._cachedMeta;\n+        const line = meta.dataset;\n+        const points = meta.data || [];\n+        const labels = meta.iScale.getLabels();\n+        line.points = points;\n+        if (mode !== 'resize') {\n+            const options = this.resolveDatasetElementOptions(mode);\n+            if (!this.options.showLine) {\n+                options.borderWidth = 0;\n+            }\n+            const properties = {\n+                _loop: true,\n+                _fullLoop: labels.length === points.length,\n+                options\n+            };\n+            this.updateElement(line, undefined, properties, mode);\n+        }\n+        this.updateElements(points, 0, points.length, mode);\n+    }\n+    updateElements(points, start, count, mode) {\n+        const scale = this._cachedMeta.rScale;\n+        const reset = mode === 'reset';\n+        for(let i = start; i \u003C start + count; i++){\n+            const point = points[i];\n+            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n+            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n+            const x = reset ? scale.xCenter : pointPosition.x;\n+            const y = reset ? scale.yCenter : pointPosition.y;\n+            const properties = {\n+                x,\n+                y,\n+                angle: pointPosition.angle,\n+                skip: isNaN(x) || isNaN(y),\n+                options\n+            };\n+            this.updateElement(point, i, properties, mode);\n+        }\n+    }\n+}\n+\n+class ScatterController extends DatasetController {\n+    static id = 'scatter';\n+ static defaults = {\n+        datasetElementType: false,\n+        dataElementType: 'point',\n+        showLine: false,\n+        fill: false\n+    };\n+ static overrides = {\n+        interaction: {\n+            mode: 'point'\n+        },\n+        scales: {\n+            x: {\n+                type: 'linear'\n+            },\n+            y: {\n+                type: 'linear'\n+            }\n+        }\n+    };\n+ getLabelAndValue(index) {\n+        const meta = this._cachedMeta;\n+        const labels = this.chart.data.labels || [];\n+        const { xScale , yScale  } = meta;\n+        const parsed = this.getParsed(index);\n+        const x = xScale.getLabelForValue(parsed.x);\n+        const y = yScale.getLabelForValue(parsed.y);\n+        return {\n+            label: labels[index] || '',\n+            value: '(' + x + ', ' + y + ')'\n+        };\n+    }\n+    update(mode) {\n+        const meta = this._cachedMeta;\n+        const { data: points = []  } = meta;\n+        const animationsDisabled = this.chart._animationsDisabled;\n+        let { start , count  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.q)(meta, points, animationsDisabled);\n+        this._drawStart = start;\n+        this._drawCount = count;\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.w)(meta)) {\n+            start = 0;\n+            count = points.length;\n+        }\n+        if (this.options.showLine) {\n+            if (!this.datasetElementType) {\n+                this.addElements();\n+            }\n+            const { dataset: line , _dataset  } = meta;\n+            line._chart = this.chart;\n+            line._datasetIndex = this.index;\n+            line._decimated = !!_dataset._decimated;\n+            line.points = points;\n+            const options = this.resolveDatasetElementOptions(mode);\n+            options.segment = this.options.segment;\n+            this.updateElement(line, undefined, {\n+                animated: !animationsDisabled,\n+                options\n+            }, mode);\n+        } else if (this.datasetElementType) {\n+            delete meta.dataset;\n+            this.datasetElementType = false;\n+        }\n+        this.updateElements(points, start, count, mode);\n+    }\n+    addElements() {\n+        const { showLine  } = this.options;\n+        if (!this.datasetElementType && showLine) {\n+            this.datasetElementType = this.chart.registry.getElement('line');\n+        }\n+        super.addElements();\n+    }\n+    updateElements(points, start, count, mode) {\n+        const reset = mode === 'reset';\n+        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n+        const firstOpts = this.resolveDataElementOptions(start, mode);\n+        const sharedOptions = this.getSharedOptions(firstOpts);\n+        const includeOptions = this.includeOptions(mode, sharedOptions);\n+        const iAxis = iScale.axis;\n+        const vAxis = vScale.axis;\n+        const { spanGaps , segment  } = this.options;\n+        const maxGapLength = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n+        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n+        let prevParsed = start > 0 && this.getParsed(start - 1);\n+        for(let i = start; i \u003C start + count; ++i){\n+            const point = points[i];\n+            const parsed = this.getParsed(i);\n+            const properties = directUpdate ? point : {};\n+            const nullData = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vAxis]);\n+            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n+            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n+            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n+            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n+            if (segment) {\n+                properties.parsed = parsed;\n+                properties.raw = _dataset.data[i];\n+            }\n+            if (includeOptions) {\n+                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n+            }\n+            if (!directUpdate) {\n+                this.updateElement(point, i, properties, mode);\n+            }\n+            prevParsed = parsed;\n+        }\n+        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n+    }\n+ getMaxOverflow() {\n+        const meta = this._cachedMeta;\n+        const data = meta.data || [];\n+        if (!this.options.showLine) {\n+            let max = 0;\n+            for(let i = data.length - 1; i >= 0; --i){\n+                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) \u002F 2);\n+            }\n+            return max > 0 && max;\n+        }\n+        const dataset = meta.dataset;\n+        const border = dataset.options && dataset.options.borderWidth || 0;\n+        if (!data.length) {\n+            return border;\n+        }\n+        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n+        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n+        return Math.max(border, firstPoint, lastPoint) \u002F 2;\n+    }\n+}\n+\n+var controllers = \u002F*#__PURE__*\u002FObject.freeze({\n+__proto__: null,\n+BarController: BarController,\n+BubbleController: BubbleController,\n+DoughnutController: DoughnutController,\n+LineController: LineController,\n+PieController: PieController,\n+PolarAreaController: PolarAreaController,\n+RadarController: RadarController,\n+ScatterController: ScatterController\n+});\n+\n+\u002F**\n+ * @namespace Chart._adapters\n+ * @since 2.8.0\n+ * @private\n+ *\u002F function abstract() {\n+    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n+}\n+\u002F**\n+ * Date adapter (current used by the time scale)\n+ * @namespace Chart._adapters._date\n+ * @memberof Chart._adapters\n+ * @private\n+ *\u002F class DateAdapterBase {\n+    \u002F**\n+   * Override default date adapter methods.\n+   * Accepts type parameter to define options type.\n+   * @example\n+   * Chart._adapters._date.override\u003C{myAdapterOption: string}>({\n+   *   init() {\n+   *     console.log(this.options.myAdapterOption);\n+   *   }\n+   * })\n+   *\u002F static override(members) {\n+        Object.assign(DateAdapterBase.prototype, members);\n+    }\n+    options;\n+    constructor(options){\n+        this.options = options || {};\n+    }\n+    \u002F\u002F eslint-disable-next-line @typescript-eslint\u002Fno-empty-function\n+    init() {}\n+    formats() {\n+        return abstract();\n+    }\n+    parse() {\n+        return abstract();\n+    }\n+    format() {\n+        return abstract();\n+    }\n+    add() {\n+        return abstract();\n+    }\n+    diff() {\n+        return abstract();\n+    }\n+    startOf() {\n+        return abstract();\n+    }\n+    endOf() {\n+        return abstract();\n+    }\n+}\n+var adapters = {\n+    _date: DateAdapterBase\n+};\n+\n+function binarySearch(metaset, axis, value, intersect) {\n+    const { controller , data , _sorted  } = metaset;\n+    const iScale = controller._cachedMeta.iScale;\n+    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n+    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n+        const lookupMethod = iScale._reversePixels ? _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.A : _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.B;\n+        if (!intersect) {\n+            const result = lookupMethod(data, axis, value);\n+            if (spanGaps) {\n+                const { vScale  } = controller._cachedMeta;\n+                const { _parsed  } = metaset;\n+                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(point[vScale.axis]));\n+                result.lo -= Math.max(0, distanceToDefinedLo);\n+                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(point[vScale.axis]));\n+                result.hi += Math.max(0, distanceToDefinedHi);\n+            }\n+            return result;\n+        } else if (controller._sharedOptions) {\n+            const el = data[0];\n+            const range = typeof el.getRange === 'function' && el.getRange(axis);\n+            if (range) {\n+                const start = lookupMethod(data, axis, value - range);\n+                const end = lookupMethod(data, axis, value + range);\n+                return {\n+                    lo: start.lo,\n+                    hi: end.hi\n+                };\n+            }\n+        }\n+    }\n+    return {\n+        lo: 0,\n+        hi: data.length - 1\n+    };\n+}\n+ function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n+    const metasets = chart.getSortedVisibleDatasetMetas();\n+    const value = position[axis];\n+    for(let i = 0, ilen = metasets.length; i \u003C ilen; ++i){\n+        const { index , data  } = metasets[i];\n+        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n+        for(let j = lo; j \u003C= hi; ++j){\n+            const element = data[j];\n+            if (!element.skip) {\n+                handler(element, index, j);\n+            }\n+        }\n+    }\n+}\n+ function getDistanceMetricForAxis(axis) {\n+    const useX = axis.indexOf('x') !== -1;\n+    const useY = axis.indexOf('y') !== -1;\n+    return function(pt1, pt2) {\n+        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n+        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n+        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n+    };\n+}\n+ function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n+    const items = [];\n+    if (!includeInvisible && !chart.isPointInArea(position)) {\n+        return items;\n+    }\n+    const evaluationFunc = function(element, datasetIndex, index) {\n+        if (!includeInvisible && !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)(element, chart.chartArea, 0)) {\n+            return;\n+        }\n+        if (element.inRange(position.x, position.y, useFinalPosition)) {\n+            items.push({\n+                element,\n+                datasetIndex,\n+                index\n+            });\n+        }\n+    };\n+    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n+    return items;\n+}\n+ function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n+    let items = [];\n+    function evaluationFunc(element, datasetIndex, index) {\n+        const { startAngle , endAngle  } = element.getProps([\n+            'startAngle',\n+            'endAngle'\n+        ], useFinalPosition);\n+        const { angle  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.D)(element, {\n+            x: position.x,\n+            y: position.y\n+        });\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle)) {\n+            items.push({\n+                element,\n+                datasetIndex,\n+                index\n+            });\n+        }\n+    }\n+    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n+    return items;\n+}\n+ function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n+    let items = [];\n+    const distanceMetric = getDistanceMetricForAxis(axis);\n+    let minDistance = Number.POSITIVE_INFINITY;\n+    function evaluationFunc(element, datasetIndex, index) {\n+        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n+        if (intersect && !inRange) {\n+            return;\n+        }\n+        const center = element.getCenterPoint(useFinalPosition);\n+        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n+        if (!pointInArea && !inRange) {\n+            return;\n+        }\n+        const distance = distanceMetric(position, center);\n+        if (distance \u003C minDistance) {\n+            items = [\n+                {\n+                    element,\n+                    datasetIndex,\n+                    index\n+                }\n+            ];\n+            minDistance = distance;\n+        } else if (distance === minDistance) {\n+            items.push({\n+                element,\n+                datasetIndex,\n+                index\n+            });\n+        }\n+    }\n+    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n+    return items;\n+}\n+ function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n+    if (!includeInvisible && !chart.isPointInArea(position)) {\n+        return [];\n+    }\n+    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n+}\n+ function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n+    const items = [];\n+    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n+    let intersectsItem = false;\n+    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n+        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n+            items.push({\n+                element,\n+                datasetIndex,\n+                index\n+            });\n+            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n+        }\n+    });\n+    if (intersect && !intersectsItem) {\n+        return [];\n+    }\n+    return items;\n+}\n+ var Interaction = {\n+    evaluateInteractionItems,\n+    modes: {\n+ index (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            const axis = options.axis || 'x';\n+            const includeInvisible = options.includeInvisible || false;\n+            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n+            const elements = [];\n+            if (!items.length) {\n+                return [];\n+            }\n+            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n+                const index = items[0].index;\n+                const element = meta.data[index];\n+                if (element && !element.skip) {\n+                    elements.push({\n+                        element,\n+                        datasetIndex: meta.index,\n+                        index\n+                    });\n+                }\n+            });\n+            return elements;\n+        },\n+ dataset (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            const axis = options.axis || 'xy';\n+            const includeInvisible = options.includeInvisible || false;\n+            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n+            if (items.length > 0) {\n+                const datasetIndex = items[0].datasetIndex;\n+                const data = chart.getDatasetMeta(datasetIndex).data;\n+                items = [];\n+                for(let i = 0; i \u003C data.length; ++i){\n+                    items.push({\n+                        element: data[i],\n+                        datasetIndex,\n+                        index: i\n+                    });\n+                }\n+            }\n+            return items;\n+        },\n+ point (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            const axis = options.axis || 'xy';\n+            const includeInvisible = options.includeInvisible || false;\n+            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n+        },\n+ nearest (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            const axis = options.axis || 'xy';\n+            const includeInvisible = options.includeInvisible || false;\n+            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n+        },\n+ x (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n+        },\n+ y (chart, e, options, useFinalPosition) {\n+            const position = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(e, chart);\n+            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n+        }\n+    }\n+};\n+\n+const STATIC_POSITIONS = [\n+    'left',\n+    'top',\n+    'right',\n+    'bottom'\n+];\n+function filterByPosition(array, position) {\n+    return array.filter((v)=>v.pos === position);\n+}\n+function filterDynamicPositionByAxis(array, axis) {\n+    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n+}\n+function sortByWeight(array, reverse) {\n+    return array.sort((a, b)=>{\n+        const v0 = reverse ? b : a;\n+        const v1 = reverse ? a : b;\n+        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n+    });\n+}\n+function wrapBoxes(boxes) {\n+    const layoutBoxes = [];\n+    let i, ilen, box, pos, stack, stackWeight;\n+    for(i = 0, ilen = (boxes || []).length; i \u003C ilen; ++i){\n+        box = boxes[i];\n+        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n+        layoutBoxes.push({\n+            index: i,\n+            box,\n+            pos,\n+            horizontal: box.isHorizontal(),\n+            weight: box.weight,\n+            stack: stack && pos + stack,\n+            stackWeight\n+        });\n+    }\n+    return layoutBoxes;\n+}\n+function buildStacks(layouts) {\n+    const stacks = {};\n+    for (const wrap of layouts){\n+        const { stack , pos , stackWeight  } = wrap;\n+        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n+            continue;\n+        }\n+        const _stack = stacks[stack] || (stacks[stack] = {\n+            count: 0,\n+            placed: 0,\n+            weight: 0,\n+            size: 0\n+        });\n+        _stack.count++;\n+        _stack.weight += stackWeight;\n+    }\n+    return stacks;\n+}\n+ function setLayoutDims(layouts, params) {\n+    const stacks = buildStacks(layouts);\n+    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n+    let i, ilen, layout;\n+    for(i = 0, ilen = layouts.length; i \u003C ilen; ++i){\n+        layout = layouts[i];\n+        const { fullSize  } = layout.box;\n+        const stack = stacks[layout.stack];\n+        const factor = stack && layout.stackWeight \u002F stack.weight;\n+        if (layout.horizontal) {\n+            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n+            layout.height = hBoxMaxHeight;\n+        } else {\n+            layout.width = vBoxMaxWidth;\n+            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n+        }\n+    }\n+    return stacks;\n+}\n+function buildLayoutBoxes(boxes) {\n+    const layoutBoxes = wrapBoxes(boxes);\n+    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n+    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n+    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n+    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n+    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n+    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n+    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n+    return {\n+        fullSize,\n+        leftAndTop: left.concat(top),\n+        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n+        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n+        vertical: left.concat(right).concat(centerVertical),\n+        horizontal: top.concat(bottom).concat(centerHorizontal)\n+    };\n+}\n+function getCombinedMax(maxPadding, chartArea, a, b) {\n+    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n+}\n+function updateMaxPadding(maxPadding, boxPadding) {\n+    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n+    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n+    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n+    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n+}\n+function updateDims(chartArea, params, layout, stacks) {\n+    const { pos , box  } = layout;\n+    const maxPadding = chartArea.maxPadding;\n+    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(pos)) {\n+        if (layout.size) {\n+            chartArea[pos] -= layout.size;\n+        }\n+        const stack = stacks[layout.stack] || {\n+            size: 0,\n+            count: 1\n+        };\n+        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n+        layout.size = stack.size \u002F stack.count;\n+        chartArea[pos] += layout.size;\n+    }\n+    if (box.getPadding) {\n+        updateMaxPadding(maxPadding, box.getPadding());\n+    }\n+    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n+    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n+    const widthChanged = newWidth !== chartArea.w;\n+    const heightChanged = newHeight !== chartArea.h;\n+    chartArea.w = newWidth;\n+    chartArea.h = newHeight;\n+    return layout.horizontal ? {\n+        same: widthChanged,\n+        other: heightChanged\n+    } : {\n+        same: heightChanged,\n+        other: widthChanged\n+    };\n+}\n+function handleMaxPadding(chartArea) {\n+    const maxPadding = chartArea.maxPadding;\n+    function updatePos(pos) {\n+        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n+        chartArea[pos] += change;\n+        return change;\n+    }\n+    chartArea.y += updatePos('top');\n+    chartArea.x += updatePos('left');\n+    updatePos('right');\n+    updatePos('bottom');\n+}\n+function getMargins(horizontal, chartArea) {\n+    const maxPadding = chartArea.maxPadding;\n+    function marginForPositions(positions) {\n+        const margin = {\n+            left: 0,\n+            top: 0,\n+            right: 0,\n+            bottom: 0\n+        };\n+        positions.forEach((pos)=>{\n+            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n+        });\n+        return margin;\n+    }\n+    return horizontal ? marginForPositions([\n+        'left',\n+        'right'\n+    ]) : marginForPositions([\n+        'top',\n+        'bottom'\n+    ]);\n+}\n+function fitBoxes(boxes, chartArea, params, stacks) {\n+    const refitBoxes = [];\n+    let i, ilen, layout, box, refit, changed;\n+    for(i = 0, ilen = boxes.length, refit = 0; i \u003C ilen; ++i){\n+        layout = boxes[i];\n+        box = layout.box;\n+        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n+        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n+        refit |= same && refitBoxes.length;\n+        changed = changed || other;\n+        if (!box.fullSize) {\n+            refitBoxes.push(layout);\n+        }\n+    }\n+    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n+}\n+function setBoxDims(box, left, top, width, height) {\n+    box.top = top;\n+    box.left = left;\n+    box.right = left + width;\n+    box.bottom = top + height;\n+    box.width = width;\n+    box.height = height;\n+}\n+function placeBoxes(boxes, chartArea, params, stacks) {\n+    const userPadding = params.padding;\n+    let { x , y  } = chartArea;\n+    for (const layout of boxes){\n+        const box = layout.box;\n+        const stack = stacks[layout.stack] || {\n+            count: 1,\n+            placed: 0,\n+            weight: 1\n+        };\n+        const weight = layout.stackWeight \u002F stack.weight || 1;\n+        if (layout.horizontal) {\n+            const width = chartArea.w * weight;\n+            const height = stack.size || box.height;\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.h)(stack.start)) {\n+                y = stack.start;\n+            }\n+            if (box.fullSize) {\n+                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n+            } else {\n+                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n+            }\n+            stack.start = y;\n+            stack.placed += width;\n+            y = box.bottom;\n+        } else {\n+            const height = chartArea.h * weight;\n+            const width = stack.size || box.width;\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.h)(stack.start)) {\n+                x = stack.start;\n+            }\n+            if (box.fullSize) {\n+                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n+            } else {\n+                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n+            }\n+            stack.start = x;\n+            stack.placed += height;\n+            x = box.right;\n+        }\n+    }\n+    chartArea.x = x;\n+    chartArea.y = y;\n+}\n+var layouts = {\n+ addBox (chart, item) {\n+        if (!chart.boxes) {\n+            chart.boxes = [];\n+        }\n+        item.fullSize = item.fullSize || false;\n+        item.position = item.position || 'top';\n+        item.weight = item.weight || 0;\n+        item._layers = item._layers || function() {\n+            return [\n+                {\n+                    z: 0,\n+                    draw (chartArea) {\n+                        item.draw(chartArea);\n+                    }\n+                }\n+            ];\n+        };\n+        chart.boxes.push(item);\n+    },\n+ removeBox (chart, layoutItem) {\n+        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n+        if (index !== -1) {\n+            chart.boxes.splice(index, 1);\n+        }\n+    },\n+ configure (chart, item, options) {\n+        item.fullSize = options.fullSize;\n+        item.position = options.position;\n+        item.weight = options.weight;\n+    },\n+ update (chart, width, height, minPadding) {\n+        if (!chart) {\n+            return;\n+        }\n+        const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(chart.options.layout.padding);\n+        const availableWidth = Math.max(width - padding.width, 0);\n+        const availableHeight = Math.max(height - padding.height, 0);\n+        const boxes = buildLayoutBoxes(chart.boxes);\n+        const verticalBoxes = boxes.vertical;\n+        const horizontalBoxes = boxes.horizontal;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(chart.boxes, (box)=>{\n+            if (typeof box.beforeLayout === 'function') {\n+                box.beforeLayout();\n+            }\n+        });\n+        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n+        const params = Object.freeze({\n+            outerWidth: width,\n+            outerHeight: height,\n+            padding,\n+            availableWidth,\n+            availableHeight,\n+            vBoxMaxWidth: availableWidth \u002F 2 \u002F visibleVerticalBoxCount,\n+            hBoxMaxHeight: availableHeight \u002F 2\n+        });\n+        const maxPadding = Object.assign({}, padding);\n+        updateMaxPadding(maxPadding, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(minPadding));\n+        const chartArea = Object.assign({\n+            maxPadding,\n+            w: availableWidth,\n+            h: availableHeight,\n+            x: padding.left,\n+            y: padding.top\n+        }, padding);\n+        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n+        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n+        fitBoxes(verticalBoxes, chartArea, params, stacks);\n+        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n+            fitBoxes(verticalBoxes, chartArea, params, stacks);\n+        }\n+        handleMaxPadding(chartArea);\n+        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n+        chartArea.x += chartArea.w;\n+        chartArea.y += chartArea.h;\n+        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n+        chart.chartArea = {\n+            left: chartArea.left,\n+            top: chartArea.top,\n+            right: chartArea.left + chartArea.w,\n+            bottom: chartArea.top + chartArea.h,\n+            height: chartArea.h,\n+            width: chartArea.w\n+        };\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(boxes.chartArea, (layout)=>{\n+            const box = layout.box;\n+            Object.assign(box, chart.chartArea);\n+            box.update(chartArea.w, chartArea.h, {\n+                left: 0,\n+                top: 0,\n+                right: 0,\n+                bottom: 0\n+            });\n+        });\n+    }\n+};\n+\n+class BasePlatform {\n+ acquireContext(canvas, aspectRatio) {}\n+ releaseContext(context) {\n+        return false;\n+    }\n+ addEventListener(chart, type, listener) {}\n+ removeEventListener(chart, type, listener) {}\n+ getDevicePixelRatio() {\n+        return 1;\n+    }\n+ getMaximumSize(element, width, height, aspectRatio) {\n+        width = Math.max(0, width || element.width);\n+        height = height || element.height;\n+        return {\n+            width,\n+            height: Math.max(0, aspectRatio ? Math.floor(width \u002F aspectRatio) : height)\n+        };\n+    }\n+ isAttached(canvas) {\n+        return true;\n+    }\n+ updateConfig(config) {\n+    }\n+}\n+\n+class BasicPlatform extends BasePlatform {\n+    acquireContext(item) {\n+        return item && item.getContext && item.getContext('2d') || null;\n+    }\n+    updateConfig(config) {\n+        config.options.animation = false;\n+    }\n+}\n+\n+const EXPANDO_KEY = '$chartjs';\n+ const EVENT_TYPES = {\n+    touchstart: 'mousedown',\n+    touchmove: 'mousemove',\n+    touchend: 'mouseup',\n+    pointerenter: 'mouseenter',\n+    pointerdown: 'mousedown',\n+    pointermove: 'mousemove',\n+    pointerup: 'mouseup',\n+    pointerleave: 'mouseout',\n+    pointerout: 'mouseout'\n+};\n+const isNullOrEmpty = (value)=>value === null || value === '';\n+ function initCanvas(canvas, aspectRatio) {\n+    const style = canvas.style;\n+    const renderHeight = canvas.getAttribute('height');\n+    const renderWidth = canvas.getAttribute('width');\n+    canvas[EXPANDO_KEY] = {\n+        initial: {\n+            height: renderHeight,\n+            width: renderWidth,\n+            style: {\n+                display: style.display,\n+                height: style.height,\n+                width: style.width\n+            }\n+        }\n+    };\n+    style.display = style.display || 'block';\n+    style.boxSizing = style.boxSizing || 'border-box';\n+    if (isNullOrEmpty(renderWidth)) {\n+        const displayWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.J)(canvas, 'width');\n+        if (displayWidth !== undefined) {\n+            canvas.width = displayWidth;\n+        }\n+    }\n+    if (isNullOrEmpty(renderHeight)) {\n+        if (canvas.style.height === '') {\n+            canvas.height = canvas.width \u002F (aspectRatio || 2);\n+        } else {\n+            const displayHeight = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.J)(canvas, 'height');\n+            if (displayHeight !== undefined) {\n+                canvas.height = displayHeight;\n+            }\n+        }\n+    }\n+    return canvas;\n+}\n+const eventListenerOptions = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.K ? {\n+    passive: true\n+} : false;\n+function addListener(node, type, listener) {\n+    if (node) {\n+        node.addEventListener(type, listener, eventListenerOptions);\n+    }\n+}\n+function removeListener(chart, type, listener) {\n+    if (chart && chart.canvas) {\n+        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n+    }\n+}\n+function fromNativeEvent(event, chart) {\n+    const type = EVENT_TYPES[event.type] || event.type;\n+    const { x , y  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.z)(event, chart);\n+    return {\n+        type,\n+        chart,\n+        native: event,\n+        x: x !== undefined ? x : null,\n+        y: y !== undefined ? y : null\n+    };\n+}\n+function nodeListContains(nodeList, canvas) {\n+    for (const node of nodeList){\n+        if (node === canvas || node.contains(canvas)) {\n+            return true;\n+        }\n+    }\n+}\n+function createAttachObserver(chart, type, listener) {\n+    const canvas = chart.canvas;\n+    const observer = new MutationObserver((entries)=>{\n+        let trigger = false;\n+        for (const entry of entries){\n+            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n+            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n+        }\n+        if (trigger) {\n+            listener();\n+        }\n+    });\n+    observer.observe(document, {\n+        childList: true,\n+        subtree: true\n+    });\n+    return observer;\n+}\n+function createDetachObserver(chart, type, listener) {\n+    const canvas = chart.canvas;\n+    const observer = new MutationObserver((entries)=>{\n+        let trigger = false;\n+        for (const entry of entries){\n+            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n+            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n+        }\n+        if (trigger) {\n+            listener();\n+        }\n+    });\n+    observer.observe(document, {\n+        childList: true,\n+        subtree: true\n+    });\n+    return observer;\n+}\n+const drpListeningCharts = new Map();\n+let oldDevicePixelRatio = 0;\n+function onWindowResize() {\n+    const dpr = window.devicePixelRatio;\n+    if (dpr === oldDevicePixelRatio) {\n+        return;\n+    }\n+    oldDevicePixelRatio = dpr;\n+    drpListeningCharts.forEach((resize, chart)=>{\n+        if (chart.currentDevicePixelRatio !== dpr) {\n+            resize();\n+        }\n+    });\n+}\n+function listenDevicePixelRatioChanges(chart, resize) {\n+    if (!drpListeningCharts.size) {\n+        window.addEventListener('resize', onWindowResize);\n+    }\n+    drpListeningCharts.set(chart, resize);\n+}\n+function unlistenDevicePixelRatioChanges(chart) {\n+    drpListeningCharts.delete(chart);\n+    if (!drpListeningCharts.size) {\n+        window.removeEventListener('resize', onWindowResize);\n+    }\n+}\n+function createResizeObserver(chart, type, listener) {\n+    const canvas = chart.canvas;\n+    const container = canvas && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.I)(canvas);\n+    if (!container) {\n+        return;\n+    }\n+    const resize = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.L)((width, height)=>{\n+        const w = container.clientWidth;\n+        listener(width, height);\n+        if (w \u003C container.clientWidth) {\n+            listener();\n+        }\n+    }, window);\n+    const observer = new ResizeObserver((entries)=>{\n+        const entry = entries[0];\n+        const width = entry.contentRect.width;\n+        const height = entry.contentRect.height;\n+        if (width === 0 && height === 0) {\n+            return;\n+        }\n+        resize(width, height);\n+    });\n+    observer.observe(container);\n+    listenDevicePixelRatioChanges(chart, resize);\n+    return observer;\n+}\n+function releaseObserver(chart, type, observer) {\n+    if (observer) {\n+        observer.disconnect();\n+    }\n+    if (type === 'resize') {\n+        unlistenDevicePixelRatioChanges(chart);\n+    }\n+}\n+function createProxyAndListen(chart, type, listener) {\n+    const canvas = chart.canvas;\n+    const proxy = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.L)((event)=>{\n+        if (chart.ctx !== null) {\n+            listener(fromNativeEvent(event, chart));\n+        }\n+    }, chart);\n+    addListener(canvas, type, proxy);\n+    return proxy;\n+}\n+ class DomPlatform extends BasePlatform {\n+ acquireContext(canvas, aspectRatio) {\n+        const context = canvas && canvas.getContext && canvas.getContext('2d');\n+        if (context && context.canvas === canvas) {\n+            initCanvas(canvas, aspectRatio);\n+            return context;\n+        }\n+        return null;\n+    }\n+ releaseContext(context) {\n+        const canvas = context.canvas;\n+        if (!canvas[EXPANDO_KEY]) {\n+            return false;\n+        }\n+        const initial = canvas[EXPANDO_KEY].initial;\n+        [\n+            'height',\n+            'width'\n+        ].forEach((prop)=>{\n+            const value = initial[prop];\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {\n+                canvas.removeAttribute(prop);\n+            } else {\n+                canvas.setAttribute(prop, value);\n+            }\n+        });\n+        const style = initial.style || {};\n+        Object.keys(style).forEach((key)=>{\n+            canvas.style[key] = style[key];\n+        });\n+        canvas.width = canvas.width;\n+        delete canvas[EXPANDO_KEY];\n+        return true;\n+    }\n+ addEventListener(chart, type, listener) {\n+        this.removeEventListener(chart, type);\n+        const proxies = chart.$proxies || (chart.$proxies = {});\n+        const handlers = {\n+            attach: createAttachObserver,\n+            detach: createDetachObserver,\n+            resize: createResizeObserver\n+        };\n+        const handler = handlers[type] || createProxyAndListen;\n+        proxies[type] = handler(chart, type, listener);\n+    }\n+ removeEventListener(chart, type) {\n+        const proxies = chart.$proxies || (chart.$proxies = {});\n+        const proxy = proxies[type];\n+        if (!proxy) {\n+            return;\n+        }\n+        const handlers = {\n+            attach: releaseObserver,\n+            detach: releaseObserver,\n+            resize: releaseObserver\n+        };\n+        const handler = handlers[type] || removeListener;\n+        handler(chart, type, proxy);\n+        proxies[type] = undefined;\n+    }\n+    getDevicePixelRatio() {\n+        return window.devicePixelRatio;\n+    }\n+ getMaximumSize(canvas, width, height, aspectRatio) {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.G)(canvas, width, height, aspectRatio);\n+    }\n+ isAttached(canvas) {\n+        const container = canvas && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.I)(canvas);\n+        return !!(container && container.isConnected);\n+    }\n+}\n+\n+function _detectPlatform(canvas) {\n+    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.M)() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n+        return BasicPlatform;\n+    }\n+    return DomPlatform;\n+}\n+\n+class Element {\n+    static defaults = {};\n+    static defaultRoutes = undefined;\n+    x;\n+    y;\n+    active = false;\n+    options;\n+    $animations;\n+    tooltipPosition(useFinalPosition) {\n+        const { x , y  } = this.getProps([\n+            'x',\n+            'y'\n+        ], useFinalPosition);\n+        return {\n+            x,\n+            y\n+        };\n+    }\n+    hasValue() {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(this.x) && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(this.y);\n+    }\n+    getProps(props, final) {\n+        const anims = this.$animations;\n+        if (!final || !anims) {\n+            \u002F\u002F let's not create an object, if not needed\n+            return this;\n+        }\n+        const ret = {};\n+        props.forEach((prop)=>{\n+            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n+        });\n+        return ret;\n+    }\n+}\n+\n+function autoSkip(scale, ticks) {\n+    const tickOpts = scale.options.ticks;\n+    const determinedMaxTicks = determineMaxTicks(scale);\n+    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n+    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n+    const numMajorIndices = majorIndices.length;\n+    const first = majorIndices[0];\n+    const last = majorIndices[numMajorIndices - 1];\n+    const newTicks = [];\n+    if (numMajorIndices > ticksLimit) {\n+        skipMajors(ticks, newTicks, majorIndices, numMajorIndices \u002F ticksLimit);\n+        return newTicks;\n+    }\n+    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n+    if (numMajorIndices > 0) {\n+        let i, ilen;\n+        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) \u002F (numMajorIndices - 1)) : null;\n+        skip(ticks, newTicks, spacing, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n+        for(i = 0, ilen = numMajorIndices - 1; i \u003C ilen; i++){\n+            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n+        }\n+        skip(ticks, newTicks, spacing, last, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n+        return newTicks;\n+    }\n+    skip(ticks, newTicks, spacing);\n+    return newTicks;\n+}\n+function determineMaxTicks(scale) {\n+    const offset = scale.options.offset;\n+    const tickLength = scale._tickSize();\n+    const maxScale = scale._length \u002F tickLength + (offset ? 0 : 1);\n+    const maxChart = scale._maxLength \u002F tickLength;\n+    return Math.floor(Math.min(maxScale, maxChart));\n+}\n+ function calculateSpacing(majorIndices, ticks, ticksLimit) {\n+    const evenMajorSpacing = getEvenSpacing(majorIndices);\n+    const spacing = ticks.length \u002F ticksLimit;\n+    if (!evenMajorSpacing) {\n+        return Math.max(spacing, 1);\n+    }\n+    const factors = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.N)(evenMajorSpacing);\n+    for(let i = 0, ilen = factors.length - 1; i \u003C ilen; i++){\n+        const factor = factors[i];\n+        if (factor > spacing) {\n+            return factor;\n+        }\n+    }\n+    return Math.max(spacing, 1);\n+}\n+ function getMajorIndices(ticks) {\n+    const result = [];\n+    let i, ilen;\n+    for(i = 0, ilen = ticks.length; i \u003C ilen; i++){\n+        if (ticks[i].major) {\n+            result.push(i);\n+        }\n+    }\n+    return result;\n+}\n+ function skipMajors(ticks, newTicks, majorIndices, spacing) {\n+    let count = 0;\n+    let next = majorIndices[0];\n+    let i;\n+    spacing = Math.ceil(spacing);\n+    for(i = 0; i \u003C ticks.length; i++){\n+        if (i === next) {\n+            newTicks.push(ticks[i]);\n+            count++;\n+            next = majorIndices[count * spacing];\n+        }\n+    }\n+}\n+ function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n+    const start = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(majorStart, 0);\n+    const end = Math.min((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(majorEnd, ticks.length), ticks.length);\n+    let count = 0;\n+    let length, i, next;\n+    spacing = Math.ceil(spacing);\n+    if (majorEnd) {\n+        length = majorEnd - majorStart;\n+        spacing = length \u002F Math.floor(length \u002F spacing);\n+    }\n+    next = start;\n+    while(next \u003C 0){\n+        count++;\n+        next = Math.round(start + count * spacing);\n+    }\n+    for(i = Math.max(start, 0); i \u003C end; i++){\n+        if (i === next) {\n+            newTicks.push(ticks[i]);\n+            count++;\n+            next = Math.round(start + count * spacing);\n+        }\n+    }\n+}\n+ function getEvenSpacing(arr) {\n+    const len = arr.length;\n+    let i, diff;\n+    if (len \u003C 2) {\n+        return false;\n+    }\n+    for(diff = arr[0], i = 1; i \u003C len; ++i){\n+        if (arr[i] - arr[i - 1] !== diff) {\n+            return false;\n+        }\n+    }\n+    return diff;\n+}\n+\n+const reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n+const offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n+const getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n+ function sample(arr, numItems) {\n+    const result = [];\n+    const increment = arr.length \u002F numItems;\n+    const len = arr.length;\n+    let i = 0;\n+    for(; i \u003C len; i += increment){\n+        result.push(arr[Math.floor(i)]);\n+    }\n+    return result;\n+}\n+ function getPixelForGridLine(scale, index, offsetGridLines) {\n+    const length = scale.ticks.length;\n+    const validIndex = Math.min(index, length - 1);\n+    const start = scale._startPixel;\n+    const end = scale._endPixel;\n+    const epsilon = 1e-6;\n+    let lineValue = scale.getPixelForTick(validIndex);\n+    let offset;\n+    if (offsetGridLines) {\n+        if (length === 1) {\n+            offset = Math.max(lineValue - start, end - lineValue);\n+        } else if (index === 0) {\n+            offset = (scale.getPixelForTick(1) - lineValue) \u002F 2;\n+        } else {\n+            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) \u002F 2;\n+        }\n+        lineValue += validIndex \u003C index ? offset : -offset;\n+        if (lineValue \u003C start - epsilon || lineValue > end + epsilon) {\n+            return;\n+        }\n+    }\n+    return lineValue;\n+}\n+ function garbageCollect(caches, length) {\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(caches, (cache)=>{\n+        const gc = cache.gc;\n+        const gcLen = gc.length \u002F 2;\n+        let i;\n+        if (gcLen > length) {\n+            for(i = 0; i \u003C gcLen; ++i){\n+                delete cache.data[gc[i]];\n+            }\n+            gc.splice(0, gcLen);\n+        }\n+    });\n+}\n+ function getTickMarkLength(options) {\n+    return options.drawTicks ? options.tickLength : 0;\n+}\n+ function getTitleHeight(options, fallback) {\n+    if (!options.display) {\n+        return 0;\n+    }\n+    const font = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.font, fallback);\n+    const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(options.padding);\n+    const lines = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(options.text) ? options.text.length : 1;\n+    return lines * font.lineHeight + padding.height;\n+}\n+function createScaleContext(parent, scale) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        scale,\n+        type: 'scale'\n+    });\n+}\n+function createTickContext(parent, index, tick) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        tick,\n+        index,\n+        type: 'tick'\n+    });\n+}\n+function titleAlign(align, position, reverse) {\n+     let ret = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a1)(align);\n+    if (reverse && position !== 'right' || !reverse && position === 'right') {\n+        ret = reverseAlign(ret);\n+    }\n+    return ret;\n+}\n+function titleArgs(scale, offset, position, align) {\n+    const { top , left , bottom , right , chart  } = scale;\n+    const { chartArea , scales  } = chart;\n+    let rotation = 0;\n+    let maxWidth, titleX, titleY;\n+    const height = bottom - top;\n+    const width = right - left;\n+    if (scale.isHorizontal()) {\n+        titleX = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, left, right);\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+            const positionAxisID = Object.keys(position)[0];\n+            const value = position[positionAxisID];\n+            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n+        } else if (position === 'center') {\n+            titleY = (chartArea.bottom + chartArea.top) \u002F 2 + height - offset;\n+        } else {\n+            titleY = offsetFromEdge(scale, position, offset);\n+        }\n+        maxWidth = right - left;\n+    } else {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+            const positionAxisID = Object.keys(position)[0];\n+            const value = position[positionAxisID];\n+            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n+        } else if (position === 'center') {\n+            titleX = (chartArea.left + chartArea.right) \u002F 2 - width + offset;\n+        } else {\n+            titleX = offsetFromEdge(scale, position, offset);\n+        }\n+        titleY = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, bottom, top);\n+        rotation = position === 'left' ? -_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H : _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H;\n+    }\n+    return {\n+        titleX,\n+        titleY,\n+        maxWidth,\n+        rotation\n+    };\n+}\n+class Scale extends Element {\n+    constructor(cfg){\n+        super();\n+         this.id = cfg.id;\n+         this.type = cfg.type;\n+         this.options = undefined;\n+         this.ctx = cfg.ctx;\n+         this.chart = cfg.chart;\n+         this.top = undefined;\n+         this.bottom = undefined;\n+         this.left = undefined;\n+         this.right = undefined;\n+         this.width = undefined;\n+         this.height = undefined;\n+        this._margins = {\n+            left: 0,\n+            right: 0,\n+            top: 0,\n+            bottom: 0\n+        };\n+         this.maxWidth = undefined;\n+         this.maxHeight = undefined;\n+         this.paddingTop = undefined;\n+         this.paddingBottom = undefined;\n+         this.paddingLeft = undefined;\n+         this.paddingRight = undefined;\n+         this.axis = undefined;\n+         this.labelRotation = undefined;\n+        this.min = undefined;\n+        this.max = undefined;\n+        this._range = undefined;\n+         this.ticks = [];\n+         this._gridLineItems = null;\n+         this._labelItems = null;\n+         this._labelSizes = null;\n+        this._length = 0;\n+        this._maxLength = 0;\n+        this._longestTextCache = {};\n+         this._startPixel = undefined;\n+         this._endPixel = undefined;\n+        this._reversePixels = false;\n+        this._userMax = undefined;\n+        this._userMin = undefined;\n+        this._suggestedMax = undefined;\n+        this._suggestedMin = undefined;\n+        this._ticksLength = 0;\n+        this._borderValue = 0;\n+        this._cache = {};\n+        this._dataLimitsCached = false;\n+        this.$context = undefined;\n+    }\n+ init(options) {\n+        this.options = options.setContext(this.getContext());\n+        this.axis = options.axis;\n+        this._userMin = this.parse(options.min);\n+        this._userMax = this.parse(options.max);\n+        this._suggestedMin = this.parse(options.suggestedMin);\n+        this._suggestedMax = this.parse(options.suggestedMax);\n+    }\n+ parse(raw, index) {\n+        return raw;\n+    }\n+ getUserBounds() {\n+        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n+        _userMin = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_userMin, Number.POSITIVE_INFINITY);\n+        _userMax = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_userMax, Number.NEGATIVE_INFINITY);\n+        _suggestedMin = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_suggestedMin, Number.POSITIVE_INFINITY);\n+        _suggestedMax = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_suggestedMax, Number.NEGATIVE_INFINITY);\n+        return {\n+            min: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_userMin, _suggestedMin),\n+            max: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(_userMax, _suggestedMax),\n+            minDefined: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(_userMin),\n+            maxDefined: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(_userMax)\n+        };\n+    }\n+ getMinMax(canStack) {\n+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n+        let range;\n+        if (minDefined && maxDefined) {\n+            return {\n+                min,\n+                max\n+            };\n+        }\n+        const metas = this.getMatchingVisibleMetas();\n+        for(let i = 0, ilen = metas.length; i \u003C ilen; ++i){\n+            range = metas[i].controller.getMinMax(this, canStack);\n+            if (!minDefined) {\n+                min = Math.min(min, range.min);\n+            }\n+            if (!maxDefined) {\n+                max = Math.max(max, range.max);\n+            }\n+        }\n+        min = maxDefined && min > max ? max : min;\n+        max = minDefined && min > max ? min : max;\n+        return {\n+            min: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(min, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(max, min)),\n+            max: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(max, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(min, max))\n+        };\n+    }\n+ getPadding() {\n+        return {\n+            left: this.paddingLeft || 0,\n+            top: this.paddingTop || 0,\n+            right: this.paddingRight || 0,\n+            bottom: this.paddingBottom || 0\n+        };\n+    }\n+ getTicks() {\n+        return this.ticks;\n+    }\n+ getLabels() {\n+        const data = this.chart.data;\n+        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n+    }\n+ getLabelItems(chartArea = this.chart.chartArea) {\n+        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n+        return items;\n+    }\n+    beforeLayout() {\n+        this._cache = {};\n+        this._dataLimitsCached = false;\n+    }\n+    beforeUpdate() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.beforeUpdate, [\n+            this\n+        ]);\n+    }\n+ update(maxWidth, maxHeight, margins) {\n+        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n+        const sampleSize = tickOpts.sampleSize;\n+        this.beforeUpdate();\n+        this.maxWidth = maxWidth;\n+        this.maxHeight = maxHeight;\n+        this._margins = margins = Object.assign({\n+            left: 0,\n+            right: 0,\n+            top: 0,\n+            bottom: 0\n+        }, margins);\n+        this.ticks = null;\n+        this._labelSizes = null;\n+        this._gridLineItems = null;\n+        this._labelItems = null;\n+        this.beforeSetDimensions();\n+        this.setDimensions();\n+        this.afterSetDimensions();\n+        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n+        if (!this._dataLimitsCached) {\n+            this.beforeDataLimits();\n+            this.determineDataLimits();\n+            this.afterDataLimits();\n+            this._range = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.R)(this, grace, beginAtZero);\n+            this._dataLimitsCached = true;\n+        }\n+        this.beforeBuildTicks();\n+        this.ticks = this.buildTicks() || [];\n+        this.afterBuildTicks();\n+        const samplingEnabled = sampleSize \u003C this.ticks.length;\n+        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n+        this.configure();\n+        this.beforeCalculateLabelRotation();\n+        this.calculateLabelRotation();\n+        this.afterCalculateLabelRotation();\n+        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n+            this.ticks = autoSkip(this, this.ticks);\n+            this._labelSizes = null;\n+            this.afterAutoSkip();\n+        }\n+        if (samplingEnabled) {\n+            this._convertTicksToLabels(this.ticks);\n+        }\n+        this.beforeFit();\n+        this.fit();\n+        this.afterFit();\n+        this.afterUpdate();\n+    }\n+ configure() {\n+        let reversePixels = this.options.reverse;\n+        let startPixel, endPixel;\n+        if (this.isHorizontal()) {\n+            startPixel = this.left;\n+            endPixel = this.right;\n+        } else {\n+            startPixel = this.top;\n+            endPixel = this.bottom;\n+            reversePixels = !reversePixels;\n+        }\n+        this._startPixel = startPixel;\n+        this._endPixel = endPixel;\n+        this._reversePixels = reversePixels;\n+        this._length = endPixel - startPixel;\n+        this._alignToPixels = this.options.alignToPixels;\n+    }\n+    afterUpdate() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.afterUpdate, [\n+            this\n+        ]);\n+    }\n+    beforeSetDimensions() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.beforeSetDimensions, [\n+            this\n+        ]);\n+    }\n+    setDimensions() {\n+        if (this.isHorizontal()) {\n+            this.width = this.maxWidth;\n+            this.left = 0;\n+            this.right = this.width;\n+        } else {\n+            this.height = this.maxHeight;\n+            this.top = 0;\n+            this.bottom = this.height;\n+        }\n+        this.paddingLeft = 0;\n+        this.paddingTop = 0;\n+        this.paddingRight = 0;\n+        this.paddingBottom = 0;\n+    }\n+    afterSetDimensions() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.afterSetDimensions, [\n+            this\n+        ]);\n+    }\n+    _callHooks(name) {\n+        this.chart.notifyPlugins(name, this.getContext());\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options[name], [\n+            this\n+        ]);\n+    }\n+    beforeDataLimits() {\n+        this._callHooks('beforeDataLimits');\n+    }\n+    determineDataLimits() {}\n+    afterDataLimits() {\n+        this._callHooks('afterDataLimits');\n+    }\n+    beforeBuildTicks() {\n+        this._callHooks('beforeBuildTicks');\n+    }\n+ buildTicks() {\n+        return [];\n+    }\n+    afterBuildTicks() {\n+        this._callHooks('afterBuildTicks');\n+    }\n+    beforeTickToLabelConversion() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.beforeTickToLabelConversion, [\n+            this\n+        ]);\n+    }\n+ generateTickLabels(ticks) {\n+        const tickOpts = this.options.ticks;\n+        let i, ilen, tick;\n+        for(i = 0, ilen = ticks.length; i \u003C ilen; i++){\n+            tick = ticks[i];\n+            tick.label = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(tickOpts.callback, [\n+                tick.value,\n+                i,\n+                ticks\n+            ], this);\n+        }\n+    }\n+    afterTickToLabelConversion() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.afterTickToLabelConversion, [\n+            this\n+        ]);\n+    }\n+    beforeCalculateLabelRotation() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.beforeCalculateLabelRotation, [\n+            this\n+        ]);\n+    }\n+    calculateLabelRotation() {\n+        const options = this.options;\n+        const tickOpts = options.ticks;\n+        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n+        const minRotation = tickOpts.minRotation || 0;\n+        const maxRotation = tickOpts.maxRotation;\n+        let labelRotation = minRotation;\n+        let tickWidth, maxHeight, maxLabelDiagonal;\n+        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks \u003C= 1 || !this.isHorizontal()) {\n+            this.labelRotation = minRotation;\n+            return;\n+        }\n+        const labelSizes = this._getLabelSizes();\n+        const maxLabelWidth = labelSizes.widest.width;\n+        const maxLabelHeight = labelSizes.highest.height;\n+        const maxWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n+        tickWidth = options.offset ? this.maxWidth \u002F numTicks : maxWidth \u002F (numTicks - 1);\n+        if (maxLabelWidth + 6 > tickWidth) {\n+            tickWidth = maxWidth \u002F (numTicks - (options.offset ? 0.5 : 1));\n+            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n+            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n+            labelRotation = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.U)(Math.min(Math.asin((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)((labelSizes.highest.height + 6) \u002F tickWidth, -1, 1)), Math.asin((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(maxHeight \u002F maxLabelDiagonal, -1, 1)) - Math.asin((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(maxLabelHeight \u002F maxLabelDiagonal, -1, 1))));\n+            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n+        }\n+        this.labelRotation = labelRotation;\n+    }\n+    afterCalculateLabelRotation() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.afterCalculateLabelRotation, [\n+            this\n+        ]);\n+    }\n+    afterAutoSkip() {}\n+    beforeFit() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.beforeFit, [\n+            this\n+        ]);\n+    }\n+    fit() {\n+        const minSize = {\n+            width: 0,\n+            height: 0\n+        };\n+        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n+        const display = this._isVisible();\n+        const isHorizontal = this.isHorizontal();\n+        if (display) {\n+            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n+            if (isHorizontal) {\n+                minSize.width = this.maxWidth;\n+                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n+            } else {\n+                minSize.height = this.maxHeight;\n+                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n+            }\n+            if (tickOpts.display && this.ticks.length) {\n+                const { first , last , widest , highest  } = this._getLabelSizes();\n+                const tickPadding = tickOpts.padding * 2;\n+                const angleRadians = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);\n+                const cos = Math.cos(angleRadians);\n+                const sin = Math.sin(angleRadians);\n+                if (isHorizontal) {\n+                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n+                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n+                } else {\n+                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n+                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n+                }\n+                this._calculatePadding(first, last, sin, cos);\n+            }\n+        }\n+        this._handleMargins();\n+        if (isHorizontal) {\n+            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n+            this.height = minSize.height;\n+        } else {\n+            this.width = minSize.width;\n+            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n+        }\n+    }\n+    _calculatePadding(first, last, sin, cos) {\n+        const { ticks: { align , padding  } , position  } = this.options;\n+        const isRotated = this.labelRotation !== 0;\n+        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n+        if (this.isHorizontal()) {\n+            const offsetLeft = this.getPixelForTick(0) - this.left;\n+            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n+            let paddingLeft = 0;\n+            let paddingRight = 0;\n+            if (isRotated) {\n+                if (labelsBelowTicks) {\n+                    paddingLeft = cos * first.width;\n+                    paddingRight = sin * last.height;\n+                } else {\n+                    paddingLeft = sin * first.height;\n+                    paddingRight = cos * last.width;\n+                }\n+            } else if (align === 'start') {\n+                paddingRight = last.width;\n+            } else if (align === 'end') {\n+                paddingLeft = first.width;\n+            } else if (align !== 'inner') {\n+                paddingLeft = first.width \u002F 2;\n+                paddingRight = last.width \u002F 2;\n+            }\n+            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width \u002F (this.width - offsetLeft), 0);\n+            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width \u002F (this.width - offsetRight), 0);\n+        } else {\n+            let paddingTop = last.height \u002F 2;\n+            let paddingBottom = first.height \u002F 2;\n+            if (align === 'start') {\n+                paddingTop = 0;\n+                paddingBottom = first.height;\n+            } else if (align === 'end') {\n+                paddingTop = last.height;\n+                paddingBottom = 0;\n+            }\n+            this.paddingTop = paddingTop + padding;\n+            this.paddingBottom = paddingBottom + padding;\n+        }\n+    }\n+ _handleMargins() {\n+        if (this._margins) {\n+            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n+            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n+            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n+            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n+        }\n+    }\n+    afterFit() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.afterFit, [\n+            this\n+        ]);\n+    }\n+ isHorizontal() {\n+        const { axis , position  } = this.options;\n+        return position === 'top' || position === 'bottom' || axis === 'x';\n+    }\n+ isFullSize() {\n+        return this.options.fullSize;\n+    }\n+ _convertTicksToLabels(ticks) {\n+        this.beforeTickToLabelConversion();\n+        this.generateTickLabels(ticks);\n+        let i, ilen;\n+        for(i = 0, ilen = ticks.length; i \u003C ilen; i++){\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(ticks[i].label)) {\n+                ticks.splice(i, 1);\n+                ilen--;\n+                i--;\n+            }\n+        }\n+        this.afterTickToLabelConversion();\n+    }\n+ _getLabelSizes() {\n+        let labelSizes = this._labelSizes;\n+        if (!labelSizes) {\n+            const sampleSize = this.options.ticks.sampleSize;\n+            let ticks = this.ticks;\n+            if (sampleSize \u003C ticks.length) {\n+                ticks = sample(ticks, sampleSize);\n+            }\n+            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n+        }\n+        return labelSizes;\n+    }\n+ _computeLabelSizes(ticks, length, maxTicksLimit) {\n+        const { ctx , _longestTextCache: caches  } = this;\n+        const widths = [];\n+        const heights = [];\n+        const increment = Math.floor(length \u002F getTicksLimit(length, maxTicksLimit));\n+        let widestLabelSize = 0;\n+        let highestLabelSize = 0;\n+        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n+        for(i = 0; i \u003C length; i += increment){\n+            label = ticks[i].label;\n+            tickFont = this._resolveTickFontOptions(i);\n+            ctx.font = fontString = tickFont.string;\n+            cache = caches[fontString] = caches[fontString] || {\n+                data: {},\n+                gc: []\n+            };\n+            lineHeight = tickFont.lineHeight;\n+            width = height = 0;\n+            if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(label) && !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(label)) {\n+                width = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.V)(ctx, cache.data, cache.gc, width, label);\n+                height = lineHeight;\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(label)) {\n+                for(j = 0, jlen = label.length; j \u003C jlen; ++j){\n+                    nestedLabel =  label[j];\n+                    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(nestedLabel) && !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(nestedLabel)) {\n+                        width = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.V)(ctx, cache.data, cache.gc, width, nestedLabel);\n+                        height += lineHeight;\n+                    }\n+                }\n+            }\n+            widths.push(width);\n+            heights.push(height);\n+            widestLabelSize = Math.max(width, widestLabelSize);\n+            highestLabelSize = Math.max(height, highestLabelSize);\n+        }\n+        garbageCollect(caches, length);\n+        const widest = widths.indexOf(widestLabelSize);\n+        const highest = heights.indexOf(highestLabelSize);\n+        const valueAt = (idx)=>({\n+                width: widths[idx] || 0,\n+                height: heights[idx] || 0\n+            });\n+        return {\n+            first: valueAt(0),\n+            last: valueAt(length - 1),\n+            widest: valueAt(widest),\n+            highest: valueAt(highest),\n+            widths,\n+            heights\n+        };\n+    }\n+ getLabelForValue(value) {\n+        return value;\n+    }\n+ getPixelForValue(value, index) {\n+        return NaN;\n+    }\n+ getValueForPixel(pixel) {}\n+ getPixelForTick(index) {\n+        const ticks = this.ticks;\n+        if (index \u003C 0 || index > ticks.length - 1) {\n+            return null;\n+        }\n+        return this.getPixelForValue(ticks[index].value);\n+    }\n+ getPixelForDecimal(decimal) {\n+        if (this._reversePixels) {\n+            decimal = 1 - decimal;\n+        }\n+        const pixel = this._startPixel + decimal * this._length;\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.W)(this._alignToPixels ? (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(this.chart, pixel, 0) : pixel);\n+    }\n+ getDecimalForPixel(pixel) {\n+        const decimal = (pixel - this._startPixel) \u002F this._length;\n+        return this._reversePixels ? 1 - decimal : decimal;\n+    }\n+ getBasePixel() {\n+        return this.getPixelForValue(this.getBaseValue());\n+    }\n+ getBaseValue() {\n+        const { min , max  } = this;\n+        return min \u003C 0 && max \u003C 0 ? max : min > 0 && max > 0 ? min : 0;\n+    }\n+ getContext(index) {\n+        const ticks = this.ticks || [];\n+        if (index >= 0 && index \u003C ticks.length) {\n+            const tick = ticks[index];\n+            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n+        }\n+        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n+    }\n+ _tickSize() {\n+        const optionTicks = this.options.ticks;\n+        const rot = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);\n+        const cos = Math.abs(Math.cos(rot));\n+        const sin = Math.abs(Math.sin(rot));\n+        const labelSizes = this._getLabelSizes();\n+        const padding = optionTicks.autoSkipPadding || 0;\n+        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n+        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n+        return this.isHorizontal() ? h * cos > w * sin ? w \u002F cos : h \u002F sin : h * sin \u003C w * cos ? h \u002F cos : w \u002F sin;\n+    }\n+ _isVisible() {\n+        const display = this.options.display;\n+        if (display !== 'auto') {\n+            return !!display;\n+        }\n+        return this.getMatchingVisibleMetas().length > 0;\n+    }\n+ _computeGridLineItems(chartArea) {\n+        const axis = this.axis;\n+        const chart = this.chart;\n+        const options = this.options;\n+        const { grid , position , border  } = options;\n+        const offset = grid.offset;\n+        const isHorizontal = this.isHorizontal();\n+        const ticks = this.ticks;\n+        const ticksLength = ticks.length + (offset ? 1 : 0);\n+        const tl = getTickMarkLength(grid);\n+        const items = [];\n+        const borderOpts = border.setContext(this.getContext());\n+        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n+        const axisHalfWidth = axisWidth \u002F 2;\n+        const alignBorderValue = function(pixel) {\n+            return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, pixel, axisWidth);\n+        };\n+        let borderValue, i, lineValue, alignedLineValue;\n+        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n+        if (position === 'top') {\n+            borderValue = alignBorderValue(this.bottom);\n+            ty1 = this.bottom - tl;\n+            ty2 = borderValue - axisHalfWidth;\n+            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n+            y2 = chartArea.bottom;\n+        } else if (position === 'bottom') {\n+            borderValue = alignBorderValue(this.top);\n+            y1 = chartArea.top;\n+            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n+            ty1 = borderValue + axisHalfWidth;\n+            ty2 = this.top + tl;\n+        } else if (position === 'left') {\n+            borderValue = alignBorderValue(this.right);\n+            tx1 = this.right - tl;\n+            tx2 = borderValue - axisHalfWidth;\n+            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n+            x2 = chartArea.right;\n+        } else if (position === 'right') {\n+            borderValue = alignBorderValue(this.left);\n+            x1 = chartArea.left;\n+            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n+            tx1 = borderValue + axisHalfWidth;\n+            tx2 = this.left + tl;\n+        } else if (axis === 'x') {\n+            if (position === 'center') {\n+                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) \u002F 2 + 0.5);\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+                const positionAxisID = Object.keys(position)[0];\n+                const value = position[positionAxisID];\n+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n+            }\n+            y1 = chartArea.top;\n+            y2 = chartArea.bottom;\n+            ty1 = borderValue + axisHalfWidth;\n+            ty2 = ty1 + tl;\n+        } else if (axis === 'y') {\n+            if (position === 'center') {\n+                borderValue = alignBorderValue((chartArea.left + chartArea.right) \u002F 2);\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+                const positionAxisID = Object.keys(position)[0];\n+                const value = position[positionAxisID];\n+                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n+            }\n+            tx1 = borderValue - axisHalfWidth;\n+            tx2 = tx1 - tl;\n+            x1 = chartArea.left;\n+            x2 = chartArea.right;\n+        }\n+        const limit = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(options.ticks.maxTicksLimit, ticksLength);\n+        const step = Math.max(1, Math.ceil(ticksLength \u002F limit));\n+        for(i = 0; i \u003C ticksLength; i += step){\n+            const context = this.getContext(i);\n+            const optsAtIndex = grid.setContext(context);\n+            const optsAtIndexBorder = border.setContext(context);\n+            const lineWidth = optsAtIndex.lineWidth;\n+            const lineColor = optsAtIndex.color;\n+            const borderDash = optsAtIndexBorder.dash || [];\n+            const borderDashOffset = optsAtIndexBorder.dashOffset;\n+            const tickWidth = optsAtIndex.tickWidth;\n+            const tickColor = optsAtIndex.tickColor;\n+            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n+            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n+            lineValue = getPixelForGridLine(this, i, offset);\n+            if (lineValue === undefined) {\n+                continue;\n+            }\n+            alignedLineValue = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, lineValue, lineWidth);\n+            if (isHorizontal) {\n+                tx1 = tx2 = x1 = x2 = alignedLineValue;\n+            } else {\n+                ty1 = ty2 = y1 = y2 = alignedLineValue;\n+            }\n+            items.push({\n+                tx1,\n+                ty1,\n+                tx2,\n+                ty2,\n+                x1,\n+                y1,\n+                x2,\n+                y2,\n+                width: lineWidth,\n+                color: lineColor,\n+                borderDash,\n+                borderDashOffset,\n+                tickWidth,\n+                tickColor,\n+                tickBorderDash,\n+                tickBorderDashOffset\n+            });\n+        }\n+        this._ticksLength = ticksLength;\n+        this._borderValue = borderValue;\n+        return items;\n+    }\n+ _computeLabelItems(chartArea) {\n+        const axis = this.axis;\n+        const options = this.options;\n+        const { position , ticks: optionTicks  } = options;\n+        const isHorizontal = this.isHorizontal();\n+        const ticks = this.ticks;\n+        const { align , crossAlign , padding , mirror  } = optionTicks;\n+        const tl = getTickMarkLength(options.grid);\n+        const tickAndPadding = tl + padding;\n+        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n+        const rotation = -(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);\n+        const items = [];\n+        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n+        let textBaseline = 'middle';\n+        if (position === 'top') {\n+            y = this.bottom - hTickAndPadding;\n+            textAlign = this._getXAxisLabelAlignment();\n+        } else if (position === 'bottom') {\n+            y = this.top + hTickAndPadding;\n+            textAlign = this._getXAxisLabelAlignment();\n+        } else if (position === 'left') {\n+            const ret = this._getYAxisLabelAlignment(tl);\n+            textAlign = ret.textAlign;\n+            x = ret.x;\n+        } else if (position === 'right') {\n+            const ret = this._getYAxisLabelAlignment(tl);\n+            textAlign = ret.textAlign;\n+            x = ret.x;\n+        } else if (axis === 'x') {\n+            if (position === 'center') {\n+                y = (chartArea.top + chartArea.bottom) \u002F 2 + tickAndPadding;\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+                const positionAxisID = Object.keys(position)[0];\n+                const value = position[positionAxisID];\n+                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n+            }\n+            textAlign = this._getXAxisLabelAlignment();\n+        } else if (axis === 'y') {\n+            if (position === 'center') {\n+                x = (chartArea.left + chartArea.right) \u002F 2 - tickAndPadding;\n+            } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+                const positionAxisID = Object.keys(position)[0];\n+                const value = position[positionAxisID];\n+                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n+            }\n+            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n+        }\n+        if (axis === 'y') {\n+            if (align === 'start') {\n+                textBaseline = 'top';\n+            } else if (align === 'end') {\n+                textBaseline = 'bottom';\n+            }\n+        }\n+        const labelSizes = this._getLabelSizes();\n+        for(i = 0, ilen = ticks.length; i \u003C ilen; ++i){\n+            tick = ticks[i];\n+            label = tick.label;\n+            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n+            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n+            font = this._resolveTickFontOptions(i);\n+            lineHeight = font.lineHeight;\n+            lineCount = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(label) ? label.length : 1;\n+            const halfCount = lineCount \u002F 2;\n+            const color = optsAtIndex.color;\n+            const strokeColor = optsAtIndex.textStrokeColor;\n+            const strokeWidth = optsAtIndex.textStrokeWidth;\n+            let tickTextAlign = textAlign;\n+            if (isHorizontal) {\n+                x = pixel;\n+                if (textAlign === 'inner') {\n+                    if (i === ilen - 1) {\n+                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n+                    } else if (i === 0) {\n+                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n+                    } else {\n+                        tickTextAlign = 'center';\n+                    }\n+                }\n+                if (position === 'top') {\n+                    if (crossAlign === 'near' || rotation !== 0) {\n+                        textOffset = -lineCount * lineHeight + lineHeight \u002F 2;\n+                    } else if (crossAlign === 'center') {\n+                        textOffset = -labelSizes.highest.height \u002F 2 - halfCount * lineHeight + lineHeight;\n+                    } else {\n+                        textOffset = -labelSizes.highest.height + lineHeight \u002F 2;\n+                    }\n+                } else {\n+                    if (crossAlign === 'near' || rotation !== 0) {\n+                        textOffset = lineHeight \u002F 2;\n+                    } else if (crossAlign === 'center') {\n+                        textOffset = labelSizes.highest.height \u002F 2 - halfCount * lineHeight;\n+                    } else {\n+                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n+                    }\n+                }\n+                if (mirror) {\n+                    textOffset *= -1;\n+                }\n+                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n+                    x += lineHeight \u002F 2 * Math.sin(rotation);\n+                }\n+            } else {\n+                y = pixel;\n+                textOffset = (1 - lineCount) * lineHeight \u002F 2;\n+            }\n+            let backdrop;\n+            if (optsAtIndex.showLabelBackdrop) {\n+                const labelPadding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(optsAtIndex.backdropPadding);\n+                const height = labelSizes.heights[i];\n+                const width = labelSizes.widths[i];\n+                let top = textOffset - labelPadding.top;\n+                let left = 0 - labelPadding.left;\n+                switch(textBaseline){\n+                    case 'middle':\n+                        top -= height \u002F 2;\n+                        break;\n+                    case 'bottom':\n+                        top -= height;\n+                        break;\n+                }\n+                switch(textAlign){\n+                    case 'center':\n+                        left -= width \u002F 2;\n+                        break;\n+                    case 'right':\n+                        left -= width;\n+                        break;\n+                    case 'inner':\n+                        if (i === ilen - 1) {\n+                            left -= width;\n+                        } else if (i > 0) {\n+                            left -= width \u002F 2;\n+                        }\n+                        break;\n+                }\n+                backdrop = {\n+                    left,\n+                    top,\n+                    width: width + labelPadding.width,\n+                    height: height + labelPadding.height,\n+                    color: optsAtIndex.backdropColor\n+                };\n+            }\n+            items.push({\n+                label,\n+                font,\n+                textOffset,\n+                options: {\n+                    rotation,\n+                    color,\n+                    strokeColor,\n+                    strokeWidth,\n+                    textAlign: tickTextAlign,\n+                    textBaseline,\n+                    translation: [\n+                        x,\n+                        y\n+                    ],\n+                    backdrop\n+                }\n+            });\n+        }\n+        return items;\n+    }\n+    _getXAxisLabelAlignment() {\n+        const { position , ticks  } = this.options;\n+        const rotation = -(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);\n+        if (rotation) {\n+            return position === 'top' ? 'left' : 'right';\n+        }\n+        let align = 'center';\n+        if (ticks.align === 'start') {\n+            align = 'left';\n+        } else if (ticks.align === 'end') {\n+            align = 'right';\n+        } else if (ticks.align === 'inner') {\n+            align = 'inner';\n+        }\n+        return align;\n+    }\n+    _getYAxisLabelAlignment(tl) {\n+        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n+        const labelSizes = this._getLabelSizes();\n+        const tickAndPadding = tl + padding;\n+        const widest = labelSizes.widest.width;\n+        let textAlign;\n+        let x;\n+        if (position === 'left') {\n+            if (mirror) {\n+                x = this.right + padding;\n+                if (crossAlign === 'near') {\n+                    textAlign = 'left';\n+                } else if (crossAlign === 'center') {\n+                    textAlign = 'center';\n+                    x += widest \u002F 2;\n+                } else {\n+                    textAlign = 'right';\n+                    x += widest;\n+                }\n+            } else {\n+                x = this.right - tickAndPadding;\n+                if (crossAlign === 'near') {\n+                    textAlign = 'right';\n+                } else if (crossAlign === 'center') {\n+                    textAlign = 'center';\n+                    x -= widest \u002F 2;\n+                } else {\n+                    textAlign = 'left';\n+                    x = this.left;\n+                }\n+            }\n+        } else if (position === 'right') {\n+            if (mirror) {\n+                x = this.left + padding;\n+                if (crossAlign === 'near') {\n+                    textAlign = 'right';\n+                } else if (crossAlign === 'center') {\n+                    textAlign = 'center';\n+                    x -= widest \u002F 2;\n+                } else {\n+                    textAlign = 'left';\n+                    x -= widest;\n+                }\n+            } else {\n+                x = this.left + tickAndPadding;\n+                if (crossAlign === 'near') {\n+                    textAlign = 'left';\n+                } else if (crossAlign === 'center') {\n+                    textAlign = 'center';\n+                    x += widest \u002F 2;\n+                } else {\n+                    textAlign = 'right';\n+                    x = this.right;\n+                }\n+            }\n+        } else {\n+            textAlign = 'right';\n+        }\n+        return {\n+            textAlign,\n+            x\n+        };\n+    }\n+ _computeLabelArea() {\n+        if (this.options.ticks.mirror) {\n+            return;\n+        }\n+        const chart = this.chart;\n+        const position = this.options.position;\n+        if (position === 'left' || position === 'right') {\n+            return {\n+                top: 0,\n+                left: this.left,\n+                bottom: chart.height,\n+                right: this.right\n+            };\n+        }\n+        if (position === 'top' || position === 'bottom') {\n+            return {\n+                top: this.top,\n+                left: 0,\n+                bottom: this.bottom,\n+                right: chart.width\n+            };\n+        }\n+    }\n+ drawBackground() {\n+        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n+        if (backgroundColor) {\n+            ctx.save();\n+            ctx.fillStyle = backgroundColor;\n+            ctx.fillRect(left, top, width, height);\n+            ctx.restore();\n+        }\n+    }\n+    getLineWidthForValue(value) {\n+        const grid = this.options.grid;\n+        if (!this._isVisible() || !grid.display) {\n+            return 0;\n+        }\n+        const ticks = this.ticks;\n+        const index = ticks.findIndex((t)=>t.value === value);\n+        if (index >= 0) {\n+            const opts = grid.setContext(this.getContext(index));\n+            return opts.lineWidth;\n+        }\n+        return 0;\n+    }\n+ drawGrid(chartArea) {\n+        const grid = this.options.grid;\n+        const ctx = this.ctx;\n+        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n+        let i, ilen;\n+        const drawLine = (p1, p2, style)=>{\n+            if (!style.width || !style.color) {\n+                return;\n+            }\n+            ctx.save();\n+            ctx.lineWidth = style.width;\n+            ctx.strokeStyle = style.color;\n+            ctx.setLineDash(style.borderDash || []);\n+            ctx.lineDashOffset = style.borderDashOffset;\n+            ctx.beginPath();\n+            ctx.moveTo(p1.x, p1.y);\n+            ctx.lineTo(p2.x, p2.y);\n+            ctx.stroke();\n+            ctx.restore();\n+        };\n+        if (grid.display) {\n+            for(i = 0, ilen = items.length; i \u003C ilen; ++i){\n+                const item = items[i];\n+                if (grid.drawOnChartArea) {\n+                    drawLine({\n+                        x: item.x1,\n+                        y: item.y1\n+                    }, {\n+                        x: item.x2,\n+                        y: item.y2\n+                    }, item);\n+                }\n+                if (grid.drawTicks) {\n+                    drawLine({\n+                        x: item.tx1,\n+                        y: item.ty1\n+                    }, {\n+                        x: item.tx2,\n+                        y: item.ty2\n+                    }, {\n+                        color: item.tickColor,\n+                        width: item.tickWidth,\n+                        borderDash: item.tickBorderDash,\n+                        borderDashOffset: item.tickBorderDashOffset\n+                    });\n+                }\n+            }\n+        }\n+    }\n+ drawBorder() {\n+        const { chart , ctx , options: { border , grid  }  } = this;\n+        const borderOpts = border.setContext(this.getContext());\n+        const axisWidth = border.display ? borderOpts.width : 0;\n+        if (!axisWidth) {\n+            return;\n+        }\n+        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n+        const borderValue = this._borderValue;\n+        let x1, x2, y1, y2;\n+        if (this.isHorizontal()) {\n+            x1 = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, this.left, axisWidth) - axisWidth \u002F 2;\n+            x2 = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, this.right, lastLineWidth) + lastLineWidth \u002F 2;\n+            y1 = y2 = borderValue;\n+        } else {\n+            y1 = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, this.top, axisWidth) - axisWidth \u002F 2;\n+            y2 = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.X)(chart, this.bottom, lastLineWidth) + lastLineWidth \u002F 2;\n+            x1 = x2 = borderValue;\n+        }\n+        ctx.save();\n+        ctx.lineWidth = borderOpts.width;\n+        ctx.strokeStyle = borderOpts.color;\n+        ctx.beginPath();\n+        ctx.moveTo(x1, y1);\n+        ctx.lineTo(x2, y2);\n+        ctx.stroke();\n+        ctx.restore();\n+    }\n+ drawLabels(chartArea) {\n+        const optionTicks = this.options.ticks;\n+        if (!optionTicks.display) {\n+            return;\n+        }\n+        const ctx = this.ctx;\n+        const area = this._computeLabelArea();\n+        if (area) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Y)(ctx, area);\n+        }\n+        const items = this.getLabelItems(chartArea);\n+        for (const item of items){\n+            const renderTextOptions = item.options;\n+            const tickFont = item.font;\n+            const label = item.label;\n+            const y = item.textOffset;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, label, 0, y, tickFont, renderTextOptions);\n+        }\n+        if (area) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.$)(ctx);\n+        }\n+    }\n+ drawTitle() {\n+        const { ctx , options: { position , title , reverse  }  } = this;\n+        if (!title.display) {\n+            return;\n+        }\n+        const font = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(title.font);\n+        const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(title.padding);\n+        const align = title.align;\n+        let offset = font.lineHeight \u002F 2;\n+        if (position === 'bottom' || position === 'center' || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {\n+            offset += padding.bottom;\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(title.text)) {\n+                offset += font.lineHeight * (title.text.length - 1);\n+            }\n+        } else {\n+            offset += padding.top;\n+        }\n+        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, title.text, 0, 0, font, {\n+            color: title.color,\n+            maxWidth,\n+            rotation,\n+            textAlign: titleAlign(align, position, reverse),\n+            textBaseline: 'middle',\n+            translation: [\n+                titleX,\n+                titleY\n+            ]\n+        });\n+    }\n+    draw(chartArea) {\n+        if (!this._isVisible()) {\n+            return;\n+        }\n+        this.drawBackground();\n+        this.drawGrid(chartArea);\n+        this.drawBorder();\n+        this.drawTitle();\n+        this.drawLabels(chartArea);\n+    }\n+ _layers() {\n+        const opts = this.options;\n+        const tz = opts.ticks && opts.ticks.z || 0;\n+        const gz = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(opts.grid && opts.grid.z, -1);\n+        const bz = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(opts.border && opts.border.z, 0);\n+        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n+            return [\n+                {\n+                    z: tz,\n+                    draw: (chartArea)=>{\n+                        this.draw(chartArea);\n+                    }\n+                }\n+            ];\n+        }\n+        return [\n+            {\n+                z: gz,\n+                draw: (chartArea)=>{\n+                    this.drawBackground();\n+                    this.drawGrid(chartArea);\n+                    this.drawTitle();\n+                }\n+            },\n+            {\n+                z: bz,\n+                draw: ()=>{\n+                    this.drawBorder();\n+                }\n+            },\n+            {\n+                z: tz,\n+                draw: (chartArea)=>{\n+                    this.drawLabels(chartArea);\n+                }\n+            }\n+        ];\n+    }\n+ getMatchingVisibleMetas(type) {\n+        const metas = this.chart.getSortedVisibleDatasetMetas();\n+        const axisID = this.axis + 'AxisID';\n+        const result = [];\n+        let i, ilen;\n+        for(i = 0, ilen = metas.length; i \u003C ilen; ++i){\n+            const meta = metas[i];\n+            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n+                result.push(meta);\n+            }\n+        }\n+        return result;\n+    }\n+ _resolveTickFontOptions(index) {\n+        const opts = this.options.ticks.setContext(this.getContext(index));\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(opts.font);\n+    }\n+ _maxDigits() {\n+        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n+        return (this.isHorizontal() ? this.width : this.height) \u002F fontSize;\n+    }\n+}\n+\n+class TypedRegistry {\n+    constructor(type, scope, override){\n+        this.type = type;\n+        this.scope = scope;\n+        this.override = override;\n+        this.items = Object.create(null);\n+    }\n+    isForType(type) {\n+        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n+    }\n+ register(item) {\n+        const proto = Object.getPrototypeOf(item);\n+        let parentScope;\n+        if (isIChartComponent(proto)) {\n+            parentScope = this.register(proto);\n+        }\n+        const items = this.items;\n+        const id = item.id;\n+        const scope = this.scope + '.' + id;\n+        if (!id) {\n+            throw new Error('class does not have id: ' + item);\n+        }\n+        if (id in items) {\n+            return scope;\n+        }\n+        items[id] = item;\n+        registerDefaults(item, scope, parentScope);\n+        if (this.override) {\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.override(item.id, item.overrides);\n+        }\n+        return scope;\n+    }\n+ get(id) {\n+        return this.items[id];\n+    }\n+ unregister(item) {\n+        const items = this.items;\n+        const id = item.id;\n+        const scope = this.scope;\n+        if (id in items) {\n+            delete items[id];\n+        }\n+        if (scope && id in _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d[scope]) {\n+            delete _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d[scope][id];\n+            if (this.override) {\n+                delete _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3[id];\n+            }\n+        }\n+    }\n+}\n+function registerDefaults(item, scope, parentScope) {\n+    const itemDefaults = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a4)(Object.create(null), [\n+        parentScope ? _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.get(parentScope) : {},\n+        _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.get(scope),\n+        item.defaults\n+    ]);\n+    _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.set(scope, itemDefaults);\n+    if (item.defaultRoutes) {\n+        routeDefaults(scope, item.defaultRoutes);\n+    }\n+    if (item.descriptors) {\n+        _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.describe(scope, item.descriptors);\n+    }\n+}\n+function routeDefaults(scope, routes) {\n+    Object.keys(routes).forEach((property)=>{\n+        const propertyParts = property.split('.');\n+        const sourceName = propertyParts.pop();\n+        const sourceScope = [\n+            scope\n+        ].concat(propertyParts).join('.');\n+        const parts = routes[property].split('.');\n+        const targetName = parts.pop();\n+        const targetScope = parts.join('.');\n+        _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.route(sourceScope, sourceName, targetScope, targetName);\n+    });\n+}\n+function isIChartComponent(proto) {\n+    return 'id' in proto && 'defaults' in proto;\n+}\n+\n+class Registry {\n+    constructor(){\n+        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n+        this.elements = new TypedRegistry(Element, 'elements');\n+        this.plugins = new TypedRegistry(Object, 'plugins');\n+        this.scales = new TypedRegistry(Scale, 'scales');\n+        this._typedRegistries = [\n+            this.controllers,\n+            this.scales,\n+            this.elements\n+        ];\n+    }\n+ add(...args) {\n+        this._each('register', args);\n+    }\n+    remove(...args) {\n+        this._each('unregister', args);\n+    }\n+ addControllers(...args) {\n+        this._each('register', args, this.controllers);\n+    }\n+ addElements(...args) {\n+        this._each('register', args, this.elements);\n+    }\n+ addPlugins(...args) {\n+        this._each('register', args, this.plugins);\n+    }\n+ addScales(...args) {\n+        this._each('register', args, this.scales);\n+    }\n+ getController(id) {\n+        return this._get(id, this.controllers, 'controller');\n+    }\n+ getElement(id) {\n+        return this._get(id, this.elements, 'element');\n+    }\n+ getPlugin(id) {\n+        return this._get(id, this.plugins, 'plugin');\n+    }\n+ getScale(id) {\n+        return this._get(id, this.scales, 'scale');\n+    }\n+ removeControllers(...args) {\n+        this._each('unregister', args, this.controllers);\n+    }\n+ removeElements(...args) {\n+        this._each('unregister', args, this.elements);\n+    }\n+ removePlugins(...args) {\n+        this._each('unregister', args, this.plugins);\n+    }\n+ removeScales(...args) {\n+        this._each('unregister', args, this.scales);\n+    }\n+ _each(method, args, typedRegistry) {\n+        [\n+            ...args\n+        ].forEach((arg)=>{\n+            const reg = typedRegistry || this._getRegistryForType(arg);\n+            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n+                this._exec(method, reg, arg);\n+            } else {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(arg, (item)=>{\n+                    const itemReg = typedRegistry || this._getRegistryForType(item);\n+                    this._exec(method, itemReg, item);\n+                });\n+            }\n+        });\n+    }\n+ _exec(method, registry, component) {\n+        const camelMethod = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a5)(method);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(component['before' + camelMethod], [], component);\n+        registry[method](component);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(component['after' + camelMethod], [], component);\n+    }\n+ _getRegistryForType(type) {\n+        for(let i = 0; i \u003C this._typedRegistries.length; i++){\n+            const reg = this._typedRegistries[i];\n+            if (reg.isForType(type)) {\n+                return reg;\n+            }\n+        }\n+        return this.plugins;\n+    }\n+ _get(id, typedRegistry, type) {\n+        const item = typedRegistry.get(id);\n+        if (item === undefined) {\n+            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n+        }\n+        return item;\n+    }\n+}\n+var registry = \u002F* #__PURE__ *\u002F new Registry();\n+\n+class PluginService {\n+    constructor(){\n+        this._init = undefined;\n+    }\n+ notify(chart, hook, args, filter) {\n+        if (hook === 'beforeInit') {\n+            this._init = this._createDescriptors(chart, true);\n+            this._notify(this._init, chart, 'install');\n+        }\n+        if (this._init === undefined) {\n+            return;\n+        }\n+        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n+        const result = this._notify(descriptors, chart, hook, args);\n+        if (hook === 'afterDestroy') {\n+            this._notify(descriptors, chart, 'stop');\n+            this._notify(this._init, chart, 'uninstall');\n+            this._init = undefined;\n+        }\n+        return result;\n+    }\n+ _notify(descriptors, chart, hook, args) {\n+        args = args || {};\n+        for (const descriptor of descriptors){\n+            const plugin = descriptor.plugin;\n+            const method = plugin[hook];\n+            const params = [\n+                chart,\n+                args,\n+                descriptor.options\n+            ];\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(method, params, plugin) === false && args.cancelable) {\n+                return false;\n+            }\n+        }\n+        return true;\n+    }\n+    invalidate() {\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(this._cache)) {\n+            this._oldCache = this._cache;\n+            this._cache = undefined;\n+        }\n+    }\n+ _descriptors(chart) {\n+        if (this._cache) {\n+            return this._cache;\n+        }\n+        const descriptors = this._cache = this._createDescriptors(chart);\n+        this._notifyStateChanges(chart);\n+        return descriptors;\n+    }\n+    _createDescriptors(chart, all) {\n+        const config = chart && chart.config;\n+        const options = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(config.options && config.options.plugins, {});\n+        const plugins = allPlugins(config);\n+        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n+    }\n+ _notifyStateChanges(chart) {\n+        const previousDescriptors = this._oldCache || [];\n+        const descriptors = this._cache;\n+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n+        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n+        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n+    }\n+}\n+ function allPlugins(config) {\n+    const localIds = {};\n+    const plugins = [];\n+    const keys = Object.keys(registry.plugins.items);\n+    for(let i = 0; i \u003C keys.length; i++){\n+        plugins.push(registry.getPlugin(keys[i]));\n+    }\n+    const local = config.plugins || [];\n+    for(let i = 0; i \u003C local.length; i++){\n+        const plugin = local[i];\n+        if (plugins.indexOf(plugin) === -1) {\n+            plugins.push(plugin);\n+            localIds[plugin.id] = true;\n+        }\n+    }\n+    return {\n+        plugins,\n+        localIds\n+    };\n+}\n+function getOpts(options, all) {\n+    if (!all && options === false) {\n+        return null;\n+    }\n+    if (options === true) {\n+        return {};\n+    }\n+    return options;\n+}\n+function createDescriptors(chart, { plugins , localIds  }, options, all) {\n+    const result = [];\n+    const context = chart.getContext();\n+    for (const plugin of plugins){\n+        const id = plugin.id;\n+        const opts = getOpts(options[id], all);\n+        if (opts === null) {\n+            continue;\n+        }\n+        result.push({\n+            plugin,\n+            options: pluginOpts(chart.config, {\n+                plugin,\n+                local: localIds[id]\n+            }, opts, context)\n+        });\n+    }\n+    return result;\n+}\n+function pluginOpts(config, { plugin , local  }, opts, context) {\n+    const keys = config.pluginScopeKeys(plugin);\n+    const scopes = config.getOptionScopes(opts, keys);\n+    if (local && plugin.defaults) {\n+        scopes.push(plugin.defaults);\n+    }\n+    return config.createResolver(scopes, context, [\n+        ''\n+    ], {\n+        scriptable: false,\n+        indexable: false,\n+        allKeys: true\n+    });\n+}\n+\n+function getIndexAxis(type, options) {\n+    const datasetDefaults = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type] || {};\n+    const datasetOptions = (options.datasets || {})[type] || {};\n+    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n+}\n+function getAxisFromDefaultScaleID(id, indexAxis) {\n+    let axis = id;\n+    if (id === '_index_') {\n+        axis = indexAxis;\n+    } else if (id === '_value_') {\n+        axis = indexAxis === 'x' ? 'y' : 'x';\n+    }\n+    return axis;\n+}\n+function getDefaultScaleIDFromAxis(axis, indexAxis) {\n+    return axis === indexAxis ? '_index_' : '_value_';\n+}\n+function idMatchesAxis(id) {\n+    if (id === 'x' || id === 'y' || id === 'r') {\n+        return id;\n+    }\n+}\n+function axisFromPosition(position) {\n+    if (position === 'top' || position === 'bottom') {\n+        return 'x';\n+    }\n+    if (position === 'left' || position === 'right') {\n+        return 'y';\n+    }\n+}\n+function determineAxis(id, ...scaleOptions) {\n+    if (idMatchesAxis(id)) {\n+        return id;\n+    }\n+    for (const opts of scaleOptions){\n+        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n+        if (axis) {\n+            return axis;\n+        }\n+    }\n+    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n+}\n+function getAxisFromDataset(id, axis, dataset) {\n+    if (dataset[axis + 'AxisID'] === id) {\n+        return {\n+            axis\n+        };\n+    }\n+}\n+function retrieveAxisFromDatasets(id, config) {\n+    if (config.data && config.data.datasets) {\n+        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n+        if (boundDs.length) {\n+            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n+        }\n+    }\n+    return {};\n+}\n+function mergeScaleConfig(config, options) {\n+    const chartDefaults = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3[config.type] || {\n+        scales: {}\n+    };\n+    const configScales = options.scales || {};\n+    const chartIndexAxis = getIndexAxis(config.type, options);\n+    const scales = Object.create(null);\n+    Object.keys(configScales).forEach((id)=>{\n+        const scaleConf = configScales[id];\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(scaleConf)) {\n+            return console.error(`Invalid scale configuration for scale: ${id}`);\n+        }\n+        if (scaleConf._proxy) {\n+            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n+        }\n+        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.scales[scaleConf.type]);\n+        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n+        const defaultScaleOptions = chartDefaults.scales || {};\n+        scales[id] = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ab)(Object.create(null), [\n+            {\n+                axis\n+            },\n+            scaleConf,\n+            defaultScaleOptions[axis],\n+            defaultScaleOptions[defaultId]\n+        ]);\n+    });\n+    config.data.datasets.forEach((dataset)=>{\n+        const type = dataset.type || config.type;\n+        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n+        const datasetDefaults = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3[type] || {};\n+        const defaultScaleOptions = datasetDefaults.scales || {};\n+        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n+            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n+            const id = dataset[axis + 'AxisID'] || axis;\n+            scales[id] = scales[id] || Object.create(null);\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ab)(scales[id], [\n+                {\n+                    axis\n+                },\n+                configScales[id],\n+                defaultScaleOptions[defaultID]\n+            ]);\n+        });\n+    });\n+    Object.keys(scales).forEach((key)=>{\n+        const scale = scales[key];\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ab)(scale, [\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.scales[scale.type],\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.scale\n+        ]);\n+    });\n+    return scales;\n+}\n+function initOptions(config) {\n+    const options = config.options || (config.options = {});\n+    options.plugins = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(options.plugins, {});\n+    options.scales = mergeScaleConfig(config, options);\n+}\n+function initData(data) {\n+    data = data || {};\n+    data.datasets = data.datasets || [];\n+    data.labels = data.labels || [];\n+    return data;\n+}\n+function initConfig(config) {\n+    config = config || {};\n+    config.data = initData(config.data);\n+    initOptions(config);\n+    return config;\n+}\n+const keyCache = new Map();\n+const keysCached = new Set();\n+function cachedKeys(cacheKey, generate) {\n+    let keys = keyCache.get(cacheKey);\n+    if (!keys) {\n+        keys = generate();\n+        keyCache.set(cacheKey, keys);\n+        keysCached.add(keys);\n+    }\n+    return keys;\n+}\n+const addIfFound = (set, obj, key)=>{\n+    const opts = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.f)(obj, key);\n+    if (opts !== undefined) {\n+        set.add(opts);\n+    }\n+};\n+class Config {\n+    constructor(config){\n+        this._config = initConfig(config);\n+        this._scopeCache = new Map();\n+        this._resolverCache = new Map();\n+    }\n+    get platform() {\n+        return this._config.platform;\n+    }\n+    get type() {\n+        return this._config.type;\n+    }\n+    set type(type) {\n+        this._config.type = type;\n+    }\n+    get data() {\n+        return this._config.data;\n+    }\n+    set data(data) {\n+        this._config.data = initData(data);\n+    }\n+    get options() {\n+        return this._config.options;\n+    }\n+    set options(options) {\n+        this._config.options = options;\n+    }\n+    get plugins() {\n+        return this._config.plugins;\n+    }\n+    update() {\n+        const config = this._config;\n+        this.clearCache();\n+        initOptions(config);\n+    }\n+    clearCache() {\n+        this._scopeCache.clear();\n+        this._resolverCache.clear();\n+    }\n+ datasetScopeKeys(datasetType) {\n+        return cachedKeys(datasetType, ()=>[\n+                [\n+                    `datasets.${datasetType}`,\n+                    ''\n+                ]\n+            ]);\n+    }\n+ datasetAnimationScopeKeys(datasetType, transition) {\n+        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n+                [\n+                    `datasets.${datasetType}.transitions.${transition}`,\n+                    `transitions.${transition}`\n+                ],\n+                [\n+                    `datasets.${datasetType}`,\n+                    ''\n+                ]\n+            ]);\n+    }\n+ datasetElementScopeKeys(datasetType, elementType) {\n+        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n+                [\n+                    `datasets.${datasetType}.elements.${elementType}`,\n+                    `datasets.${datasetType}`,\n+                    `elements.${elementType}`,\n+                    ''\n+                ]\n+            ]);\n+    }\n+ pluginScopeKeys(plugin) {\n+        const id = plugin.id;\n+        const type = this.type;\n+        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n+                [\n+                    `plugins.${id}`,\n+                    ...plugin.additionalOptionScopes || []\n+                ]\n+            ]);\n+    }\n+ _cachedScopes(mainScope, resetCache) {\n+        const _scopeCache = this._scopeCache;\n+        let cache = _scopeCache.get(mainScope);\n+        if (!cache || resetCache) {\n+            cache = new Map();\n+            _scopeCache.set(mainScope, cache);\n+        }\n+        return cache;\n+    }\n+ getOptionScopes(mainScope, keyLists, resetCache) {\n+        const { options , type  } = this;\n+        const cache = this._cachedScopes(mainScope, resetCache);\n+        const cached = cache.get(keyLists);\n+        if (cached) {\n+            return cached;\n+        }\n+        const scopes = new Set();\n+        keyLists.forEach((keys)=>{\n+            if (mainScope) {\n+                scopes.add(mainScope);\n+                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n+            }\n+            keys.forEach((key)=>addIfFound(scopes, options, key));\n+            keys.forEach((key)=>addIfFound(scopes, _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3[type] || {}, key));\n+            keys.forEach((key)=>addIfFound(scopes, _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d, key));\n+            keys.forEach((key)=>addIfFound(scopes, _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a6, key));\n+        });\n+        const array = Array.from(scopes);\n+        if (array.length === 0) {\n+            array.push(Object.create(null));\n+        }\n+        if (keysCached.has(keyLists)) {\n+            cache.set(keyLists, array);\n+        }\n+        return array;\n+    }\n+ chartOptionScopes() {\n+        const { options , type  } = this;\n+        return [\n+            options,\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3[type] || {},\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type] || {},\n+            {\n+                type\n+            },\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d,\n+            _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a6\n+        ];\n+    }\n+ resolveNamedOptions(scopes, names, context, prefixes = [\n+        ''\n+    ]) {\n+        const result = {\n+            $shared: true\n+        };\n+        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n+        let options = resolver;\n+        if (needContext(resolver, names)) {\n+            result.$shared = false;\n+            context = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a7)(context) ? context() : context;\n+            const subResolver = this.createResolver(scopes, context, subPrefixes);\n+            options = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a8)(resolver, context, subResolver);\n+        }\n+        for (const prop of names){\n+            result[prop] = options[prop];\n+        }\n+        return result;\n+    }\n+ createResolver(scopes, context, prefixes = [\n+        ''\n+    ], descriptorDefaults) {\n+        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(context) ? (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a8)(resolver, context, undefined, descriptorDefaults) : resolver;\n+    }\n+}\n+function getResolver(resolverCache, scopes, prefixes) {\n+    let cache = resolverCache.get(scopes);\n+    if (!cache) {\n+        cache = new Map();\n+        resolverCache.set(scopes, cache);\n+    }\n+    const cacheKey = prefixes.join();\n+    let cached = cache.get(cacheKey);\n+    if (!cached) {\n+        const resolver = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a9)(scopes, prefixes);\n+        cached = {\n+            resolver,\n+            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n+        };\n+        cache.set(cacheKey, cached);\n+    }\n+    return cached;\n+}\n+const hasFunction = (value)=>(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(value) && Object.getOwnPropertyNames(value).some((key)=>(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a7)(value[key]));\n+function needContext(proxy, names) {\n+    const { isScriptable , isIndexable  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aa)(proxy);\n+    for (const prop of names){\n+        const scriptable = isScriptable(prop);\n+        const indexable = isIndexable(prop);\n+        const value = (indexable || scriptable) && proxy[prop];\n+        if (scriptable && ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a7)(value) || hasFunction(value)) || indexable && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(value)) {\n+            return true;\n+        }\n+    }\n+    return false;\n+}\n+\n+var version = \"4.5.1\";\n+\n+const KNOWN_POSITIONS = [\n+    'top',\n+    'bottom',\n+    'left',\n+    'right',\n+    'chartArea'\n+];\n+function positionIsHorizontal(position, axis) {\n+    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n+}\n+function compare2Level(l1, l2) {\n+    return function(a, b) {\n+        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n+    };\n+}\n+function onAnimationsComplete(context) {\n+    const chart = context.chart;\n+    const animationOptions = chart.options.animation;\n+    chart.notifyPlugins('afterRender');\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(animationOptions && animationOptions.onComplete, [\n+        context\n+    ], chart);\n+}\n+function onAnimationProgress(context) {\n+    const chart = context.chart;\n+    const animationOptions = chart.options.animation;\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(animationOptions && animationOptions.onProgress, [\n+        context\n+    ], chart);\n+}\n+ function getCanvas(item) {\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.M)() && typeof item === 'string') {\n+        item = document.getElementById(item);\n+    } else if (item && item.length) {\n+        item = item[0];\n+    }\n+    if (item && item.canvas) {\n+        item = item.canvas;\n+    }\n+    return item;\n+}\n+const instances = {};\n+const getChart = (key)=>{\n+    const canvas = getCanvas(key);\n+    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n+};\n+function moveNumericKeys(obj, start, move) {\n+    const keys = Object.keys(obj);\n+    for (const key of keys){\n+        const intKey = +key;\n+        if (intKey >= start) {\n+            const value = obj[key];\n+            delete obj[key];\n+            if (move > 0 || intKey > start) {\n+                obj[intKey + move] = value;\n+            }\n+        }\n+    }\n+}\n+ function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n+    if (!inChartArea || e.type === 'mouseout') {\n+        return null;\n+    }\n+    if (isClick) {\n+        return lastEvent;\n+    }\n+    return e;\n+}\n+class Chart {\n+    static defaults = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d;\n+    static instances = instances;\n+    static overrides = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a3;\n+    static registry = registry;\n+    static version = version;\n+    static getChart = getChart;\n+    static register(...items) {\n+        registry.add(...items);\n+        invalidatePlugins();\n+    }\n+    static unregister(...items) {\n+        registry.remove(...items);\n+        invalidatePlugins();\n+    }\n+    constructor(item, userConfig){\n+        const config = this.config = new Config(userConfig);\n+        const initialCanvas = getCanvas(item);\n+        const existingChart = getChart(initialCanvas);\n+        if (existingChart) {\n+            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n+        }\n+        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n+        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n+        this.platform.updateConfig(config);\n+        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n+        const canvas = context && context.canvas;\n+        const height = canvas && canvas.height;\n+        const width = canvas && canvas.width;\n+        this.id = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ac)();\n+        this.ctx = context;\n+        this.canvas = canvas;\n+        this.width = width;\n+        this.height = height;\n+        this._options = options;\n+        this._aspectRatio = this.aspectRatio;\n+        this._layers = [];\n+        this._metasets = [];\n+        this._stacks = undefined;\n+        this.boxes = [];\n+        this.currentDevicePixelRatio = undefined;\n+        this.chartArea = undefined;\n+        this._active = [];\n+        this._lastEvent = undefined;\n+        this._listeners = {};\n+         this._responsiveListeners = undefined;\n+        this._sortedMetasets = [];\n+        this.scales = {};\n+        this._plugins = new PluginService();\n+        this.$proxies = {};\n+        this._hiddenIndices = {};\n+        this.attached = false;\n+        this._animationsDisabled = undefined;\n+        this.$context = undefined;\n+        this._doResize = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ad)((mode)=>this.update(mode), options.resizeDelay || 0);\n+        this._dataChanges = [];\n+        instances[this.id] = this;\n+        if (!context || !canvas) {\n+            console.error(\"Failed to create chart: can't acquire context from the given item\");\n+            return;\n+        }\n+        animator.listen(this, 'complete', onAnimationsComplete);\n+        animator.listen(this, 'progress', onAnimationProgress);\n+        this._initialize();\n+        if (this.attached) {\n+            this.update();\n+        }\n+    }\n+    get aspectRatio() {\n+        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(aspectRatio)) {\n+            return aspectRatio;\n+        }\n+        if (maintainAspectRatio && _aspectRatio) {\n+            return _aspectRatio;\n+        }\n+        return height ? width \u002F height : null;\n+    }\n+    get data() {\n+        return this.config.data;\n+    }\n+    set data(data) {\n+        this.config.data = data;\n+    }\n+    get options() {\n+        return this._options;\n+    }\n+    set options(options) {\n+        this.config.options = options;\n+    }\n+    get registry() {\n+        return registry;\n+    }\n+ _initialize() {\n+        this.notifyPlugins('beforeInit');\n+        if (this.options.responsive) {\n+            this.resize();\n+        } else {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ae)(this, this.options.devicePixelRatio);\n+        }\n+        this.bindEvents();\n+        this.notifyPlugins('afterInit');\n+        return this;\n+    }\n+    clear() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.af)(this.canvas, this.ctx);\n+        return this;\n+    }\n+    stop() {\n+        animator.stop(this);\n+        return this;\n+    }\n+ resize(width, height) {\n+        if (!animator.running(this)) {\n+            this._resize(width, height);\n+        } else {\n+            this._resizeBeforeDraw = {\n+                width,\n+                height\n+            };\n+        }\n+    }\n+    _resize(width, height) {\n+        const options = this.options;\n+        const canvas = this.canvas;\n+        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n+        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n+        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n+        const mode = this.width ? 'resize' : 'attach';\n+        this.width = newSize.width;\n+        this.height = newSize.height;\n+        this._aspectRatio = this.aspectRatio;\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ae)(this, newRatio, true)) {\n+            return;\n+        }\n+        this.notifyPlugins('resize', {\n+            size: newSize\n+        });\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(options.onResize, [\n+            this,\n+            newSize\n+        ], this);\n+        if (this.attached) {\n+            if (this._doResize(mode)) {\n+                this.render();\n+            }\n+        }\n+    }\n+    ensureScalesHaveIDs() {\n+        const options = this.options;\n+        const scalesOptions = options.scales || {};\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(scalesOptions, (axisOptions, axisID)=>{\n+            axisOptions.id = axisID;\n+        });\n+    }\n+ buildOrUpdateScales() {\n+        const options = this.options;\n+        const scaleOpts = options.scales;\n+        const scales = this.scales;\n+        const updated = Object.keys(scales).reduce((obj, id)=>{\n+            obj[id] = false;\n+            return obj;\n+        }, {});\n+        let items = [];\n+        if (scaleOpts) {\n+            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n+                const scaleOptions = scaleOpts[id];\n+                const axis = determineAxis(id, scaleOptions);\n+                const isRadial = axis === 'r';\n+                const isHorizontal = axis === 'x';\n+                return {\n+                    options: scaleOptions,\n+                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n+                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n+                };\n+            }));\n+        }\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(items, (item)=>{\n+            const scaleOptions = item.options;\n+            const id = scaleOptions.id;\n+            const axis = determineAxis(id, scaleOptions);\n+            const scaleType = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(scaleOptions.type, item.dtype);\n+            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n+                scaleOptions.position = item.dposition;\n+            }\n+            updated[id] = true;\n+            let scale = null;\n+            if (id in scales && scales[id].type === scaleType) {\n+                scale = scales[id];\n+            } else {\n+                const scaleClass = registry.getScale(scaleType);\n+                scale = new scaleClass({\n+                    id,\n+                    type: scaleType,\n+                    ctx: this.ctx,\n+                    chart: this\n+                });\n+                scales[scale.id] = scale;\n+            }\n+            scale.init(scaleOptions, options);\n+        });\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(updated, (hasUpdated, id)=>{\n+            if (!hasUpdated) {\n+                delete scales[id];\n+            }\n+        });\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(scales, (scale)=>{\n+            layouts.configure(this, scale, scale.options);\n+            layouts.addBox(this, scale);\n+        });\n+    }\n+ _updateMetasets() {\n+        const metasets = this._metasets;\n+        const numData = this.data.datasets.length;\n+        const numMeta = metasets.length;\n+        metasets.sort((a, b)=>a.index - b.index);\n+        if (numMeta > numData) {\n+            for(let i = numData; i \u003C numMeta; ++i){\n+                this._destroyDatasetMeta(i);\n+            }\n+            metasets.splice(numData, numMeta - numData);\n+        }\n+        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n+    }\n+ _removeUnreferencedMetasets() {\n+        const { _metasets: metasets , data: { datasets  }  } = this;\n+        if (metasets.length > datasets.length) {\n+            delete this._stacks;\n+        }\n+        metasets.forEach((meta, index)=>{\n+            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n+                this._destroyDatasetMeta(index);\n+            }\n+        });\n+    }\n+    buildOrUpdateControllers() {\n+        const newControllers = [];\n+        const datasets = this.data.datasets;\n+        let i, ilen;\n+        this._removeUnreferencedMetasets();\n+        for(i = 0, ilen = datasets.length; i \u003C ilen; i++){\n+            const dataset = datasets[i];\n+            let meta = this.getDatasetMeta(i);\n+            const type = dataset.type || this.config.type;\n+            if (meta.type && meta.type !== type) {\n+                this._destroyDatasetMeta(i);\n+                meta = this.getDatasetMeta(i);\n+            }\n+            meta.type = type;\n+            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n+            meta.order = dataset.order || 0;\n+            meta.index = i;\n+            meta.label = '' + dataset.label;\n+            meta.visible = this.isDatasetVisible(i);\n+            if (meta.controller) {\n+                meta.controller.updateIndex(i);\n+                meta.controller.linkScales();\n+            } else {\n+                const ControllerClass = registry.getController(type);\n+                const { datasetElementType , dataElementType  } = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type];\n+                Object.assign(ControllerClass, {\n+                    dataElementType: registry.getElement(dataElementType),\n+                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n+                });\n+                meta.controller = new ControllerClass(this, i);\n+                newControllers.push(meta.controller);\n+            }\n+        }\n+        this._updateMetasets();\n+        return newControllers;\n+    }\n+ _resetElements() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.data.datasets, (dataset, datasetIndex)=>{\n+            this.getDatasetMeta(datasetIndex).controller.reset();\n+        }, this);\n+    }\n+ reset() {\n+        this._resetElements();\n+        this.notifyPlugins('reset');\n+    }\n+    update(mode) {\n+        const config = this.config;\n+        config.update();\n+        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n+        const animsDisabled = this._animationsDisabled = !options.animation;\n+        this._updateScales();\n+        this._checkEventBindings();\n+        this._updateHiddenIndices();\n+        this._plugins.invalidate();\n+        if (this.notifyPlugins('beforeUpdate', {\n+            mode,\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        const newControllers = this.buildOrUpdateControllers();\n+        this.notifyPlugins('beforeElementsUpdate');\n+        let minPadding = 0;\n+        for(let i = 0, ilen = this.data.datasets.length; i \u003C ilen; i++){\n+            const { controller  } = this.getDatasetMeta(i);\n+            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n+            controller.buildOrUpdateElements(reset);\n+            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n+        }\n+        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n+        this._updateLayout(minPadding);\n+        if (!animsDisabled) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(newControllers, (controller)=>{\n+                controller.reset();\n+            });\n+        }\n+        this._updateDatasets(mode);\n+        this.notifyPlugins('afterUpdate', {\n+            mode\n+        });\n+        this._layers.sort(compare2Level('z', '_idx'));\n+        const { _active , _lastEvent  } = this;\n+        if (_lastEvent) {\n+            this._eventHandler(_lastEvent, true);\n+        } else if (_active.length) {\n+            this._updateHoverStyles(_active, _active, true);\n+        }\n+        this.render();\n+    }\n+ _updateScales() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.scales, (scale)=>{\n+            layouts.removeBox(this, scale);\n+        });\n+        this.ensureScalesHaveIDs();\n+        this.buildOrUpdateScales();\n+    }\n+ _checkEventBindings() {\n+        const options = this.options;\n+        const existingEvents = new Set(Object.keys(this._listeners));\n+        const newEvents = new Set(options.events);\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ag)(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n+            this.unbindEvents();\n+            this.bindEvents();\n+        }\n+    }\n+ _updateHiddenIndices() {\n+        const { _hiddenIndices  } = this;\n+        const changes = this._getUniformDataChanges() || [];\n+        for (const { method , start , count  } of changes){\n+            const move = method === '_removeElements' ? -count : count;\n+            moveNumericKeys(_hiddenIndices, start, move);\n+        }\n+    }\n+ _getUniformDataChanges() {\n+        const _dataChanges = this._dataChanges;\n+        if (!_dataChanges || !_dataChanges.length) {\n+            return;\n+        }\n+        this._dataChanges = [];\n+        const datasetCount = this.data.datasets.length;\n+        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n+        const changeSet = makeSet(0);\n+        for(let i = 1; i \u003C datasetCount; i++){\n+            if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ag)(changeSet, makeSet(i))) {\n+                return;\n+            }\n+        }\n+        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n+                method: a[1],\n+                start: +a[2],\n+                count: +a[3]\n+            }));\n+    }\n+ _updateLayout(minPadding) {\n+        if (this.notifyPlugins('beforeLayout', {\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        layouts.update(this, this.width, this.height, minPadding);\n+        const area = this.chartArea;\n+        const noArea = area.width \u003C= 0 || area.height \u003C= 0;\n+        this._layers = [];\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.boxes, (box)=>{\n+            if (noArea && box.position === 'chartArea') {\n+                return;\n+            }\n+            if (box.configure) {\n+                box.configure();\n+            }\n+            this._layers.push(...box._layers());\n+        }, this);\n+        this._layers.forEach((item, index)=>{\n+            item._idx = index;\n+        });\n+        this.notifyPlugins('afterLayout');\n+    }\n+ _updateDatasets(mode) {\n+        if (this.notifyPlugins('beforeDatasetsUpdate', {\n+            mode,\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        for(let i = 0, ilen = this.data.datasets.length; i \u003C ilen; ++i){\n+            this.getDatasetMeta(i).controller.configure();\n+        }\n+        for(let i = 0, ilen = this.data.datasets.length; i \u003C ilen; ++i){\n+            this._updateDataset(i, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a7)(mode) ? mode({\n+                datasetIndex: i\n+            }) : mode);\n+        }\n+        this.notifyPlugins('afterDatasetsUpdate', {\n+            mode\n+        });\n+    }\n+ _updateDataset(index, mode) {\n+        const meta = this.getDatasetMeta(index);\n+        const args = {\n+            meta,\n+            index,\n+            mode,\n+            cancelable: true\n+        };\n+        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n+            return;\n+        }\n+        meta.controller._update(mode);\n+        args.cancelable = false;\n+        this.notifyPlugins('afterDatasetUpdate', args);\n+    }\n+    render() {\n+        if (this.notifyPlugins('beforeRender', {\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        if (animator.has(this)) {\n+            if (this.attached && !animator.running(this)) {\n+                animator.start(this);\n+            }\n+        } else {\n+            this.draw();\n+            onAnimationsComplete({\n+                chart: this\n+            });\n+        }\n+    }\n+    draw() {\n+        let i;\n+        if (this._resizeBeforeDraw) {\n+            const { width , height  } = this._resizeBeforeDraw;\n+            this._resizeBeforeDraw = null;\n+            this._resize(width, height);\n+        }\n+        this.clear();\n+        if (this.width \u003C= 0 || this.height \u003C= 0) {\n+            return;\n+        }\n+        if (this.notifyPlugins('beforeDraw', {\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        const layers = this._layers;\n+        for(i = 0; i \u003C layers.length && layers[i].z \u003C= 0; ++i){\n+            layers[i].draw(this.chartArea);\n+        }\n+        this._drawDatasets();\n+        for(; i \u003C layers.length; ++i){\n+            layers[i].draw(this.chartArea);\n+        }\n+        this.notifyPlugins('afterDraw');\n+    }\n+ _getSortedDatasetMetas(filterVisible) {\n+        const metasets = this._sortedMetasets;\n+        const result = [];\n+        let i, ilen;\n+        for(i = 0, ilen = metasets.length; i \u003C ilen; ++i){\n+            const meta = metasets[i];\n+            if (!filterVisible || meta.visible) {\n+                result.push(meta);\n+            }\n+        }\n+        return result;\n+    }\n+ getSortedVisibleDatasetMetas() {\n+        return this._getSortedDatasetMetas(true);\n+    }\n+ _drawDatasets() {\n+        if (this.notifyPlugins('beforeDatasetsDraw', {\n+            cancelable: true\n+        }) === false) {\n+            return;\n+        }\n+        const metasets = this.getSortedVisibleDatasetMetas();\n+        for(let i = metasets.length - 1; i >= 0; --i){\n+            this._drawDataset(metasets[i]);\n+        }\n+        this.notifyPlugins('afterDatasetsDraw');\n+    }\n+ _drawDataset(meta) {\n+        const ctx = this.ctx;\n+        const args = {\n+            meta,\n+            index: meta.index,\n+            cancelable: true\n+        };\n+        const clip = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ah)(this, meta);\n+        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n+            return;\n+        }\n+        if (clip) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Y)(ctx, clip);\n+        }\n+        meta.controller.draw();\n+        if (clip) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.$)(ctx);\n+        }\n+        args.cancelable = false;\n+        this.notifyPlugins('afterDatasetDraw', args);\n+    }\n+ isPointInArea(point) {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)(point, this.chartArea, this._minPadding);\n+    }\n+    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n+        const method = Interaction.modes[mode];\n+        if (typeof method === 'function') {\n+            return method(this, e, options, useFinalPosition);\n+        }\n+        return [];\n+    }\n+    getDatasetMeta(datasetIndex) {\n+        const dataset = this.data.datasets[datasetIndex];\n+        const metasets = this._metasets;\n+        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n+        if (!meta) {\n+            meta = {\n+                type: null,\n+                data: [],\n+                dataset: null,\n+                controller: null,\n+                hidden: null,\n+                xAxisID: null,\n+                yAxisID: null,\n+                order: dataset && dataset.order || 0,\n+                index: datasetIndex,\n+                _dataset: dataset,\n+                _parsed: [],\n+                _sorted: false\n+            };\n+            metasets.push(meta);\n+        }\n+        return meta;\n+    }\n+    getContext() {\n+        return this.$context || (this.$context = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(null, {\n+            chart: this,\n+            type: 'chart'\n+        }));\n+    }\n+    getVisibleDatasetCount() {\n+        return this.getSortedVisibleDatasetMetas().length;\n+    }\n+    isDatasetVisible(datasetIndex) {\n+        const dataset = this.data.datasets[datasetIndex];\n+        if (!dataset) {\n+            return false;\n+        }\n+        const meta = this.getDatasetMeta(datasetIndex);\n+        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n+    }\n+    setDatasetVisibility(datasetIndex, visible) {\n+        const meta = this.getDatasetMeta(datasetIndex);\n+        meta.hidden = !visible;\n+    }\n+    toggleDataVisibility(index) {\n+        this._hiddenIndices[index] = !this._hiddenIndices[index];\n+    }\n+    getDataVisibility(index) {\n+        return !this._hiddenIndices[index];\n+    }\n+ _updateVisibility(datasetIndex, dataIndex, visible) {\n+        const mode = visible ? 'show' : 'hide';\n+        const meta = this.getDatasetMeta(datasetIndex);\n+        const anims = meta.controller._resolveAnimations(undefined, mode);\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.h)(dataIndex)) {\n+            meta.data[dataIndex].hidden = !visible;\n+            this.update();\n+        } else {\n+            this.setDatasetVisibility(datasetIndex, visible);\n+            anims.update(meta, {\n+                visible\n+            });\n+            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n+        }\n+    }\n+    hide(datasetIndex, dataIndex) {\n+        this._updateVisibility(datasetIndex, dataIndex, false);\n+    }\n+    show(datasetIndex, dataIndex) {\n+        this._updateVisibility(datasetIndex, dataIndex, true);\n+    }\n+ _destroyDatasetMeta(datasetIndex) {\n+        const meta = this._metasets[datasetIndex];\n+        if (meta && meta.controller) {\n+            meta.controller._destroy();\n+        }\n+        delete this._metasets[datasetIndex];\n+    }\n+    _stop() {\n+        let i, ilen;\n+        this.stop();\n+        animator.remove(this);\n+        for(i = 0, ilen = this.data.datasets.length; i \u003C ilen; ++i){\n+            this._destroyDatasetMeta(i);\n+        }\n+    }\n+    destroy() {\n+        this.notifyPlugins('beforeDestroy');\n+        const { canvas , ctx  } = this;\n+        this._stop();\n+        this.config.clearCache();\n+        if (canvas) {\n+            this.unbindEvents();\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.af)(canvas, ctx);\n+            this.platform.releaseContext(ctx);\n+            this.canvas = null;\n+            this.ctx = null;\n+        }\n+        delete instances[this.id];\n+        this.notifyPlugins('afterDestroy');\n+    }\n+    toBase64Image(...args) {\n+        return this.canvas.toDataURL(...args);\n+    }\n+ bindEvents() {\n+        this.bindUserEvents();\n+        if (this.options.responsive) {\n+            this.bindResponsiveEvents();\n+        } else {\n+            this.attached = true;\n+        }\n+    }\n+ bindUserEvents() {\n+        const listeners = this._listeners;\n+        const platform = this.platform;\n+        const _add = (type, listener)=>{\n+            platform.addEventListener(this, type, listener);\n+            listeners[type] = listener;\n+        };\n+        const listener = (e, x, y)=>{\n+            e.offsetX = x;\n+            e.offsetY = y;\n+            this._eventHandler(e);\n+        };\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.options.events, (type)=>_add(type, listener));\n+    }\n+ bindResponsiveEvents() {\n+        if (!this._responsiveListeners) {\n+            this._responsiveListeners = {};\n+        }\n+        const listeners = this._responsiveListeners;\n+        const platform = this.platform;\n+        const _add = (type, listener)=>{\n+            platform.addEventListener(this, type, listener);\n+            listeners[type] = listener;\n+        };\n+        const _remove = (type, listener)=>{\n+            if (listeners[type]) {\n+                platform.removeEventListener(this, type, listener);\n+                delete listeners[type];\n+            }\n+        };\n+        const listener = (width, height)=>{\n+            if (this.canvas) {\n+                this.resize(width, height);\n+            }\n+        };\n+        let detached;\n+        const attached = ()=>{\n+            _remove('attach', attached);\n+            this.attached = true;\n+            this.resize();\n+            _add('resize', listener);\n+            _add('detach', detached);\n+        };\n+        detached = ()=>{\n+            this.attached = false;\n+            _remove('resize', listener);\n+            this._stop();\n+            this._resize(0, 0);\n+            _add('attach', attached);\n+        };\n+        if (platform.isAttached(this.canvas)) {\n+            attached();\n+        } else {\n+            detached();\n+        }\n+    }\n+ unbindEvents() {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this._listeners, (listener, type)=>{\n+            this.platform.removeEventListener(this, type, listener);\n+        });\n+        this._listeners = {};\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this._responsiveListeners, (listener, type)=>{\n+            this.platform.removeEventListener(this, type, listener);\n+        });\n+        this._responsiveListeners = undefined;\n+    }\n+    updateHoverStyle(items, mode, enabled) {\n+        const prefix = enabled ? 'set' : 'remove';\n+        let meta, item, i, ilen;\n+        if (mode === 'dataset') {\n+            meta = this.getDatasetMeta(items[0].datasetIndex);\n+            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n+        }\n+        for(i = 0, ilen = items.length; i \u003C ilen; ++i){\n+            item = items[i];\n+            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n+            if (controller) {\n+                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n+            }\n+        }\n+    }\n+ getActiveElements() {\n+        return this._active || [];\n+    }\n+ setActiveElements(activeElements) {\n+        const lastActive = this._active || [];\n+        const active = activeElements.map(({ datasetIndex , index  })=>{\n+            const meta = this.getDatasetMeta(datasetIndex);\n+            if (!meta) {\n+                throw new Error('No dataset found at index ' + datasetIndex);\n+            }\n+            return {\n+                datasetIndex,\n+                element: meta.data[index],\n+                index\n+            };\n+        });\n+        const changed = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive);\n+        if (changed) {\n+            this._active = active;\n+            this._lastEvent = null;\n+            this._updateHoverStyles(active, lastActive);\n+        }\n+    }\n+ notifyPlugins(hook, args, filter) {\n+        return this._plugins.notify(this, hook, args, filter);\n+    }\n+ isPluginEnabled(pluginId) {\n+        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n+    }\n+ _updateHoverStyles(active, lastActive, replay) {\n+        const hoverOptions = this.options.hover;\n+        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n+        const deactivated = diff(lastActive, active);\n+        const activated = replay ? active : diff(active, lastActive);\n+        if (deactivated.length) {\n+            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n+        }\n+        if (activated.length && hoverOptions.mode) {\n+            this.updateHoverStyle(activated, hoverOptions.mode, true);\n+        }\n+    }\n+ _eventHandler(e, replay) {\n+        const args = {\n+            event: e,\n+            replay,\n+            cancelable: true,\n+            inChartArea: this.isPointInArea(e)\n+        };\n+        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n+        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n+            return;\n+        }\n+        const changed = this._handleEvent(e, replay, args.inChartArea);\n+        args.cancelable = false;\n+        this.notifyPlugins('afterEvent', args, eventFilter);\n+        if (changed || args.changed) {\n+            this.render();\n+        }\n+        return this;\n+    }\n+ _handleEvent(e, replay, inChartArea) {\n+        const { _active: lastActive = [] , options  } = this;\n+        const useFinalPosition = replay;\n+        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n+        const isClick = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aj)(e);\n+        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n+        if (inChartArea) {\n+            this._lastEvent = null;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(options.onHover, [\n+                e,\n+                active,\n+                this\n+            ], this);\n+            if (isClick) {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(options.onClick, [\n+                    e,\n+                    active,\n+                    this\n+                ], this);\n+            }\n+        }\n+        const changed = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive);\n+        if (changed || replay) {\n+            this._active = active;\n+            this._updateHoverStyles(active, lastActive, replay);\n+        }\n+        this._lastEvent = lastEvent;\n+        return changed;\n+    }\n+ _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n+        if (e.type === 'mouseout') {\n+            return [];\n+        }\n+        if (!inChartArea) {\n+            return lastActive;\n+        }\n+        const hoverOptions = this.options.hover;\n+        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n+    }\n+}\n+function invalidatePlugins() {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(Chart.instances, (chart)=>chart._plugins.invalidate());\n+}\n+\n+function clipSelf(ctx, element, endAngle) {\n+    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;\n+    const { borderWidth , borderJoinStyle  } = options;\n+    const outerAngleClip = Math.min(borderWidth \u002F outerRadius, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(startAngle - endAngle));\n+    ctx.beginPath();\n+    ctx.arc(x, y, outerRadius - borderWidth \u002F 2, startAngle + outerAngleClip \u002F 2, endAngle - outerAngleClip \u002F 2);\n+    if (innerRadius > 0) {\n+        const innerAngleClip = Math.min(borderWidth \u002F innerRadius, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(startAngle - endAngle));\n+        ctx.arc(x, y, innerRadius + borderWidth \u002F 2, endAngle - innerAngleClip \u002F 2, startAngle + innerAngleClip \u002F 2, true);\n+    } else {\n+        const clipWidth = Math.min(borderWidth \u002F 2, outerRadius * (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(startAngle - endAngle));\n+        if (borderJoinStyle === 'round') {\n+            ctx.arc(x, y, clipWidth, endAngle - _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2, startAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2, true);\n+        } else if (borderJoinStyle === 'bevel') {\n+            const r = 2 * clipWidth * clipWidth;\n+            const endX = -r * Math.cos(endAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2) + x;\n+            const endY = -r * Math.sin(endAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2) + y;\n+            const startX = r * Math.cos(startAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2) + x;\n+            const startY = r * Math.sin(startAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F 2) + y;\n+            ctx.lineTo(endX, endY);\n+            ctx.lineTo(startX, startY);\n+        }\n+    }\n+    ctx.closePath();\n+    ctx.moveTo(0, 0);\n+    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n+    ctx.clip('evenodd');\n+}\n+function clipArc(ctx, element, endAngle) {\n+    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n+    let angleMargin = pixelMargin \u002F outerRadius;\n+    \u002F\u002F Draw an inner border by clipping the arc and drawing a double-width border\n+    \u002F\u002F Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n+    ctx.beginPath();\n+    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n+    if (innerRadius > pixelMargin) {\n+        angleMargin = pixelMargin \u002F innerRadius;\n+        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n+    } else {\n+        ctx.arc(x, y, pixelMargin, endAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H, startAngle - _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H);\n+    }\n+    ctx.closePath();\n+    ctx.clip();\n+}\n+function toRadiusCorners(value) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.am)(value, [\n+        'outerStart',\n+        'outerEnd',\n+        'innerStart',\n+        'innerEnd'\n+    ]);\n+}\n+\u002F**\n+ * Parse border radius from the provided options\n+ *\u002F function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n+    const o = toRadiusCorners(arc.options.borderRadius);\n+    const halfThickness = (outerRadius - innerRadius) \u002F 2;\n+    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius \u002F 2);\n+    \u002F\u002F Outer limits are complicated. We want to compute the available angular distance at\n+    \u002F\u002F a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n+    \u002F\u002F We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n+    \u002F\u002F\n+    \u002F\u002F If the borderRadius is large, that value can become negative.\n+    \u002F\u002F This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n+    \u002F\u002F we know that the thickness term will dominate and compute the limits at that point\n+    const computeOuterLimit = (val)=>{\n+        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta \u002F 2;\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(val, 0, Math.min(halfThickness, outerArcLimit));\n+    };\n+    return {\n+        outerStart: computeOuterLimit(o.outerStart),\n+        outerEnd: computeOuterLimit(o.outerEnd),\n+        innerStart: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(o.innerStart, 0, innerLimit),\n+        innerEnd: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(o.innerEnd, 0, innerLimit)\n+    };\n+}\n+\u002F**\n+ * Convert (r, 𝜃) to (x, y)\n+ *\u002F function rThetaToXY(r, theta, x, y) {\n+    return {\n+        x: x + r * Math.cos(theta),\n+        y: y + r * Math.sin(theta)\n+    };\n+}\n+\u002F**\n+ * Path the arc, respecting border radius by separating into left and right halves.\n+ *\n+ *   Start      End\n+ *\n+ *    1--->a--->2    Outer\n+ *   \u002F           \\\n+ *   8           3\n+ *   |           |\n+ *   |           |\n+ *   7           4\n+ *   \\           \u002F\n+ *    6\u003C---b\u003C---5    Inner\n+ *\u002F function pathArc(ctx, element, offset, spacing, end, circular) {\n+    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n+    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n+    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n+    let spacingOffset = 0;\n+    const alpha = end - start;\n+    if (spacing) {\n+        \u002F\u002F When spacing is present, it is the same for all items\n+        \u002F\u002F So we adjust the start and end angle of the arc such that\n+        \u002F\u002F the distance is the same as it would be without the spacing\n+        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n+        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n+        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) \u002F 2;\n+        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius \u002F (avNogSpacingRadius + spacing) : alpha;\n+        spacingOffset = (alpha - adjustedAngle) \u002F 2;\n+    }\n+    const beta = Math.max(0.001, alpha * outerRadius - offset \u002F _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P) \u002F outerRadius;\n+    const angleOffset = (alpha - beta) \u002F 2;\n+    const startAngle = start + angleOffset + spacingOffset;\n+    const endAngle = end - angleOffset - spacingOffset;\n+    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n+    const outerStartAdjustedRadius = outerRadius - outerStart;\n+    const outerEndAdjustedRadius = outerRadius - outerEnd;\n+    const outerStartAdjustedAngle = startAngle + outerStart \u002F outerStartAdjustedRadius;\n+    const outerEndAdjustedAngle = endAngle - outerEnd \u002F outerEndAdjustedRadius;\n+    const innerStartAdjustedRadius = innerRadius + innerStart;\n+    const innerEndAdjustedRadius = innerRadius + innerEnd;\n+    const innerStartAdjustedAngle = startAngle + innerStart \u002F innerStartAdjustedRadius;\n+    const innerEndAdjustedAngle = endAngle - innerEnd \u002F innerEndAdjustedRadius;\n+    ctx.beginPath();\n+    if (circular) {\n+        \u002F\u002F The first arc segments from point 1 to point a to point 2\n+        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) \u002F 2;\n+        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n+        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n+        \u002F\u002F The corner segment from point 2 to point 3\n+        if (outerEnd > 0) {\n+            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n+            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H);\n+        }\n+        \u002F\u002F The line from point 3 to point 4\n+        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n+        ctx.lineTo(p4.x, p4.y);\n+        \u002F\u002F The corner segment from point 4 to point 5\n+        if (innerEnd > 0) {\n+            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n+            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H, innerEndAdjustedAngle + Math.PI);\n+        }\n+        \u002F\u002F The inner arc from point 5 to point b to point 6\n+        const innerMidAdjustedAngle = (endAngle - innerEnd \u002F innerRadius + (startAngle + innerStart \u002F innerRadius)) \u002F 2;\n+        ctx.arc(x, y, innerRadius, endAngle - innerEnd \u002F innerRadius, innerMidAdjustedAngle, true);\n+        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart \u002F innerRadius, true);\n+        \u002F\u002F The corner segment from point 6 to point 7\n+        if (innerStart > 0) {\n+            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n+            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H);\n+        }\n+        \u002F\u002F The line from point 7 to point 8\n+        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n+        ctx.lineTo(p8.x, p8.y);\n+        \u002F\u002F The corner segment from point 8 to point 1\n+        if (outerStart > 0) {\n+            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n+            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H, outerStartAdjustedAngle);\n+        }\n+    } else {\n+        ctx.moveTo(x, y);\n+        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n+        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n+        ctx.lineTo(outerStartX, outerStartY);\n+        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n+        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n+        ctx.lineTo(outerEndX, outerEndY);\n+    }\n+    ctx.closePath();\n+}\n+function drawArc(ctx, element, offset, spacing, circular) {\n+    const { fullCircles , startAngle , circumference  } = element;\n+    let endAngle = element.endAngle;\n+    if (fullCircles) {\n+        pathArc(ctx, element, offset, spacing, endAngle, circular);\n+        for(let i = 0; i \u003C fullCircles; ++i){\n+            ctx.fill();\n+        }\n+        if (!isNaN(circumference)) {\n+            endAngle = startAngle + (circumference % _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T || _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T);\n+        }\n+    }\n+    pathArc(ctx, element, offset, spacing, endAngle, circular);\n+    ctx.fill();\n+    return endAngle;\n+}\n+function drawBorder(ctx, element, offset, spacing, circular) {\n+    const { fullCircles , startAngle , circumference , options  } = element;\n+    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;\n+    const inner = options.borderAlign === 'inner';\n+    if (!borderWidth) {\n+        return;\n+    }\n+    ctx.setLineDash(borderDash || []);\n+    ctx.lineDashOffset = borderDashOffset;\n+    if (inner) {\n+        ctx.lineWidth = borderWidth * 2;\n+        ctx.lineJoin = borderJoinStyle || 'round';\n+    } else {\n+        ctx.lineWidth = borderWidth;\n+        ctx.lineJoin = borderJoinStyle || 'bevel';\n+    }\n+    let endAngle = element.endAngle;\n+    if (fullCircles) {\n+        pathArc(ctx, element, offset, spacing, endAngle, circular);\n+        for(let i = 0; i \u003C fullCircles; ++i){\n+            ctx.stroke();\n+        }\n+        if (!isNaN(circumference)) {\n+            endAngle = startAngle + (circumference % _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T || _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T);\n+        }\n+    }\n+    if (inner) {\n+        clipArc(ctx, element, endAngle);\n+    }\n+    if (options.selfJoin && endAngle - startAngle >= _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P && borderRadius === 0 && borderJoinStyle !== 'miter') {\n+        clipSelf(ctx, element, endAngle);\n+    }\n+    if (!fullCircles) {\n+        pathArc(ctx, element, offset, spacing, endAngle, circular);\n+        ctx.stroke();\n+    }\n+}\n+class ArcElement extends Element {\n+    static id = 'arc';\n+    static defaults = {\n+        borderAlign: 'center',\n+        borderColor: '#fff',\n+        borderDash: [],\n+        borderDashOffset: 0,\n+        borderJoinStyle: undefined,\n+        borderRadius: 0,\n+        borderWidth: 2,\n+        offset: 0,\n+        spacing: 0,\n+        angle: undefined,\n+        circular: true,\n+        selfJoin: false\n+    };\n+    static defaultRoutes = {\n+        backgroundColor: 'backgroundColor'\n+    };\n+    static descriptors = {\n+        _scriptable: true,\n+        _indexable: (name)=>name !== 'borderDash'\n+    };\n+    circumference;\n+    endAngle;\n+    fullCircles;\n+    innerRadius;\n+    outerRadius;\n+    pixelMargin;\n+    startAngle;\n+    constructor(cfg){\n+        super();\n+        this.options = undefined;\n+        this.circumference = undefined;\n+        this.startAngle = undefined;\n+        this.endAngle = undefined;\n+        this.innerRadius = undefined;\n+        this.outerRadius = undefined;\n+        this.pixelMargin = 0;\n+        this.fullCircles = 0;\n+        if (cfg) {\n+            Object.assign(this, cfg);\n+        }\n+    }\n+    inRange(chartX, chartY, useFinalPosition) {\n+        const point = this.getProps([\n+            'x',\n+            'y'\n+        ], useFinalPosition);\n+        const { angle , distance  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.D)(point, {\n+            x: chartX,\n+            y: chartY\n+        });\n+        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n+            'startAngle',\n+            'endAngle',\n+            'innerRadius',\n+            'outerRadius',\n+            'circumference'\n+        ], useFinalPosition);\n+        const rAdjust = (this.options.spacing + this.options.borderWidth) \u002F 2;\n+        const _circumference = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(circumference, endAngle - startAngle);\n+        const nonZeroBetween = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle) && startAngle !== endAngle;\n+        const betweenAngles = _circumference >= _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T || nonZeroBetween;\n+        const withinRadius = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n+        return betweenAngles && withinRadius;\n+    }\n+    getCenterPoint(useFinalPosition) {\n+        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n+            'x',\n+            'y',\n+            'startAngle',\n+            'endAngle',\n+            'innerRadius',\n+            'outerRadius'\n+        ], useFinalPosition);\n+        const { offset , spacing  } = this.options;\n+        const halfAngle = (startAngle + endAngle) \u002F 2;\n+        const halfRadius = (innerRadius + outerRadius + spacing + offset) \u002F 2;\n+        return {\n+            x: x + Math.cos(halfAngle) * halfRadius,\n+            y: y + Math.sin(halfAngle) * halfRadius\n+        };\n+    }\n+    tooltipPosition(useFinalPosition) {\n+        return this.getCenterPoint(useFinalPosition);\n+    }\n+    draw(ctx) {\n+        const { options , circumference  } = this;\n+        const offset = (options.offset || 0) \u002F 4;\n+        const spacing = (options.spacing || 0) \u002F 2;\n+        const circular = options.circular;\n+        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n+        this.fullCircles = circumference > _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T ? Math.floor(circumference \u002F _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T) : 0;\n+        if (circumference === 0 || this.innerRadius \u003C 0 || this.outerRadius \u003C 0) {\n+            return;\n+        }\n+        ctx.save();\n+        const halfAngle = (this.startAngle + this.endAngle) \u002F 2;\n+        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n+        const fix = 1 - Math.sin(Math.min(_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P, circumference || 0));\n+        const radiusOffset = offset * fix;\n+        ctx.fillStyle = options.backgroundColor;\n+        ctx.strokeStyle = options.borderColor;\n+        drawArc(ctx, this, radiusOffset, spacing, circular);\n+        drawBorder(ctx, this, radiusOffset, spacing, circular);\n+        ctx.restore();\n+    }\n+}\n+\n+function setStyle(ctx, options, style = options) {\n+    ctx.lineCap = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderCapStyle, options.borderCapStyle);\n+    ctx.setLineDash((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderDash, options.borderDash));\n+    ctx.lineDashOffset = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderDashOffset, options.borderDashOffset);\n+    ctx.lineJoin = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderJoinStyle, options.borderJoinStyle);\n+    ctx.lineWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderWidth, options.borderWidth);\n+    ctx.strokeStyle = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderColor, options.borderColor);\n+}\n+function lineTo(ctx, previous, target) {\n+    ctx.lineTo(target.x, target.y);\n+}\n+ function getLineMethod(options) {\n+    if (options.stepped) {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.at;\n+    }\n+    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.au;\n+    }\n+    return lineTo;\n+}\n+function pathVars(points, segment, params = {}) {\n+    const count = points.length;\n+    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n+    const { start: segmentStart , end: segmentEnd  } = segment;\n+    const start = Math.max(paramsStart, segmentStart);\n+    const end = Math.min(paramsEnd, segmentEnd);\n+    const outside = paramsStart \u003C segmentStart && paramsEnd \u003C segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n+    return {\n+        count,\n+        start,\n+        loop: segment.loop,\n+        ilen: end \u003C start && !outside ? count + end - start : end - start\n+    };\n+}\n+ function pathSegment(ctx, line, segment, params) {\n+    const { points , options  } = line;\n+    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n+    const lineMethod = getLineMethod(options);\n+    let { move =true , reverse  } = params || {};\n+    let i, point, prev;\n+    for(i = 0; i \u003C= ilen; ++i){\n+        point = points[(start + (reverse ? ilen - i : i)) % count];\n+        if (point.skip) {\n+            continue;\n+        } else if (move) {\n+            ctx.moveTo(point.x, point.y);\n+            move = false;\n+        } else {\n+            lineMethod(ctx, prev, point, reverse, options.stepped);\n+        }\n+        prev = point;\n+    }\n+    if (loop) {\n+        point = points[(start + (reverse ? ilen : 0)) % count];\n+        lineMethod(ctx, prev, point, reverse, options.stepped);\n+    }\n+    return !!loop;\n+}\n+ function fastPathSegment(ctx, line, segment, params) {\n+    const points = line.points;\n+    const { count , start , ilen  } = pathVars(points, segment, params);\n+    const { move =true , reverse  } = params || {};\n+    let avgX = 0;\n+    let countX = 0;\n+    let i, point, prevX, minY, maxY, lastY;\n+    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n+    const drawX = ()=>{\n+        if (minY !== maxY) {\n+            ctx.lineTo(avgX, maxY);\n+            ctx.lineTo(avgX, minY);\n+            ctx.lineTo(avgX, lastY);\n+        }\n+    };\n+    if (move) {\n+        point = points[pointIndex(0)];\n+        ctx.moveTo(point.x, point.y);\n+    }\n+    for(i = 0; i \u003C= ilen; ++i){\n+        point = points[pointIndex(i)];\n+        if (point.skip) {\n+            continue;\n+        }\n+        const x = point.x;\n+        const y = point.y;\n+        const truncX = x | 0;\n+        if (truncX === prevX) {\n+            if (y \u003C minY) {\n+                minY = y;\n+            } else if (y > maxY) {\n+                maxY = y;\n+            }\n+            avgX = (countX * avgX + x) \u002F ++countX;\n+        } else {\n+            drawX();\n+            ctx.lineTo(x, y);\n+            prevX = truncX;\n+            countX = 0;\n+            minY = maxY = y;\n+        }\n+        lastY = y;\n+    }\n+    drawX();\n+}\n+ function _getSegmentMethod(line) {\n+    const opts = line.options;\n+    const borderDash = opts.borderDash && opts.borderDash.length;\n+    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n+    return useFastPath ? fastPathSegment : pathSegment;\n+}\n+ function _getInterpolationMethod(options) {\n+    if (options.stepped) {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aq;\n+    }\n+    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n+        return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ar;\n+    }\n+    return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.as;\n+}\n+function strokePathWithCache(ctx, line, start, count) {\n+    let path = line._path;\n+    if (!path) {\n+        path = line._path = new Path2D();\n+        if (line.path(path, start, count)) {\n+            path.closePath();\n+        }\n+    }\n+    setStyle(ctx, line.options);\n+    ctx.stroke(path);\n+}\n+function strokePathDirect(ctx, line, start, count) {\n+    const { segments , options  } = line;\n+    const segmentMethod = _getSegmentMethod(line);\n+    for (const segment of segments){\n+        setStyle(ctx, options, segment.style);\n+        ctx.beginPath();\n+        if (segmentMethod(ctx, line, segment, {\n+            start,\n+            end: start + count - 1\n+        })) {\n+            ctx.closePath();\n+        }\n+        ctx.stroke();\n+    }\n+}\n+const usePath2D = typeof Path2D === 'function';\n+function draw(ctx, line, start, count) {\n+    if (usePath2D && !line.options.segment) {\n+        strokePathWithCache(ctx, line, start, count);\n+    } else {\n+        strokePathDirect(ctx, line, start, count);\n+    }\n+}\n+class LineElement extends Element {\n+    static id = 'line';\n+ static defaults = {\n+        borderCapStyle: 'butt',\n+        borderDash: [],\n+        borderDashOffset: 0,\n+        borderJoinStyle: 'miter',\n+        borderWidth: 3,\n+        capBezierPoints: true,\n+        cubicInterpolationMode: 'default',\n+        fill: false,\n+        spanGaps: false,\n+        stepped: false,\n+        tension: 0\n+    };\n+ static defaultRoutes = {\n+        backgroundColor: 'backgroundColor',\n+        borderColor: 'borderColor'\n+    };\n+    static descriptors = {\n+        _scriptable: true,\n+        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n+    };\n+    constructor(cfg){\n+        super();\n+        this.animated = true;\n+        this.options = undefined;\n+        this._chart = undefined;\n+        this._loop = undefined;\n+        this._fullLoop = undefined;\n+        this._path = undefined;\n+        this._points = undefined;\n+        this._segments = undefined;\n+        this._decimated = false;\n+        this._pointsUpdated = false;\n+        this._datasetIndex = undefined;\n+        if (cfg) {\n+            Object.assign(this, cfg);\n+        }\n+    }\n+    updateControlPoints(chartArea, indexAxis) {\n+        const options = this.options;\n+        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n+            const loop = options.spanGaps ? this._loop : this._fullLoop;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.an)(this._points, options, chartArea, loop, indexAxis);\n+            this._pointsUpdated = true;\n+        }\n+    }\n+    set points(points) {\n+        this._points = points;\n+        delete this._segments;\n+        delete this._path;\n+        this._pointsUpdated = false;\n+    }\n+    get points() {\n+        return this._points;\n+    }\n+    get segments() {\n+        return this._segments || (this._segments = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ao)(this, this.options.segment));\n+    }\n+ first() {\n+        const segments = this.segments;\n+        const points = this.points;\n+        return segments.length && points[segments[0].start];\n+    }\n+ last() {\n+        const segments = this.segments;\n+        const points = this.points;\n+        const count = segments.length;\n+        return count && points[segments[count - 1].end];\n+    }\n+ interpolate(point, property) {\n+        const options = this.options;\n+        const value = point[property];\n+        const points = this.points;\n+        const segments = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ap)(this, {\n+            property,\n+            start: value,\n+            end: value\n+        });\n+        if (!segments.length) {\n+            return;\n+        }\n+        const result = [];\n+        const _interpolate = _getInterpolationMethod(options);\n+        let i, ilen;\n+        for(i = 0, ilen = segments.length; i \u003C ilen; ++i){\n+            const { start , end  } = segments[i];\n+            const p1 = points[start];\n+            const p2 = points[end];\n+            if (p1 === p2) {\n+                result.push(p1);\n+                continue;\n+            }\n+            const t = Math.abs((value - p1[property]) \u002F (p2[property] - p1[property]));\n+            const interpolated = _interpolate(p1, p2, t, options.stepped);\n+            interpolated[property] = point[property];\n+            result.push(interpolated);\n+        }\n+        return result.length === 1 ? result[0] : result;\n+    }\n+ pathSegment(ctx, segment, params) {\n+        const segmentMethod = _getSegmentMethod(this);\n+        return segmentMethod(ctx, this, segment, params);\n+    }\n+ path(ctx, start, count) {\n+        const segments = this.segments;\n+        const segmentMethod = _getSegmentMethod(this);\n+        let loop = this._loop;\n+        start = start || 0;\n+        count = count || this.points.length - start;\n+        for (const segment of segments){\n+            loop &= segmentMethod(ctx, this, segment, {\n+                start,\n+                end: start + count - 1\n+            });\n+        }\n+        return !!loop;\n+    }\n+ draw(ctx, chartArea, start, count) {\n+        const options = this.options || {};\n+        const points = this.points || [];\n+        if (points.length && options.borderWidth) {\n+            ctx.save();\n+            draw(ctx, this, start, count);\n+            ctx.restore();\n+        }\n+        if (this.animated) {\n+            this._pointsUpdated = false;\n+            this._path = undefined;\n+        }\n+    }\n+}\n+\n+function inRange$1(el, pos, axis, useFinalPosition) {\n+    const options = el.options;\n+    const { [axis]: value  } = el.getProps([\n+        axis\n+    ], useFinalPosition);\n+    return Math.abs(pos - value) \u003C options.radius + options.hitRadius;\n+}\n+class PointElement extends Element {\n+    static id = 'point';\n+    parsed;\n+    skip;\n+    stop;\n+    \u002F**\n+   * @type {any}\n+   *\u002F static defaults = {\n+        borderWidth: 1,\n+        hitRadius: 1,\n+        hoverBorderWidth: 1,\n+        hoverRadius: 4,\n+        pointStyle: 'circle',\n+        radius: 3,\n+        rotation: 0\n+    };\n+    \u002F**\n+   * @type {any}\n+   *\u002F static defaultRoutes = {\n+        backgroundColor: 'backgroundColor',\n+        borderColor: 'borderColor'\n+    };\n+    constructor(cfg){\n+        super();\n+        this.options = undefined;\n+        this.parsed = undefined;\n+        this.skip = undefined;\n+        this.stop = undefined;\n+        if (cfg) {\n+            Object.assign(this, cfg);\n+        }\n+    }\n+    inRange(mouseX, mouseY, useFinalPosition) {\n+        const options = this.options;\n+        const { x , y  } = this.getProps([\n+            'x',\n+            'y'\n+        ], useFinalPosition);\n+        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) \u003C Math.pow(options.hitRadius + options.radius, 2);\n+    }\n+    inXRange(mouseX, useFinalPosition) {\n+        return inRange$1(this, mouseX, 'x', useFinalPosition);\n+    }\n+    inYRange(mouseY, useFinalPosition) {\n+        return inRange$1(this, mouseY, 'y', useFinalPosition);\n+    }\n+    getCenterPoint(useFinalPosition) {\n+        const { x , y  } = this.getProps([\n+            'x',\n+            'y'\n+        ], useFinalPosition);\n+        return {\n+            x,\n+            y\n+        };\n+    }\n+    size(options) {\n+        options = options || this.options || {};\n+        let radius = options.radius || 0;\n+        radius = Math.max(radius, radius && options.hoverRadius || 0);\n+        const borderWidth = radius && options.borderWidth || 0;\n+        return (radius + borderWidth) * 2;\n+    }\n+    draw(ctx, area) {\n+        const options = this.options;\n+        if (this.skip || options.radius \u003C 0.1 || !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)(this, area, this.size(options) \u002F 2)) {\n+            return;\n+        }\n+        ctx.strokeStyle = options.borderColor;\n+        ctx.lineWidth = options.borderWidth;\n+        ctx.fillStyle = options.backgroundColor;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, options, this.x, this.y);\n+    }\n+    getRange() {\n+        const options = this.options || {};\n+        \u002F\u002F @ts-expect-error Fallbacks should never be hit in practice\n+        return options.radius + options.hitRadius;\n+    }\n+}\n+\n+function getBarBounds(bar, useFinalPosition) {\n+    const { x , y , base , width , height  } =  bar.getProps([\n+        'x',\n+        'y',\n+        'base',\n+        'width',\n+        'height'\n+    ], useFinalPosition);\n+    let left, right, top, bottom, half;\n+    if (bar.horizontal) {\n+        half = height \u002F 2;\n+        left = Math.min(x, base);\n+        right = Math.max(x, base);\n+        top = y - half;\n+        bottom = y + half;\n+    } else {\n+        half = width \u002F 2;\n+        left = x - half;\n+        right = x + half;\n+        top = Math.min(y, base);\n+        bottom = Math.max(y, base);\n+    }\n+    return {\n+        left,\n+        top,\n+        right,\n+        bottom\n+    };\n+}\n+function skipOrLimit(skip, value, min, max) {\n+    return skip ? 0 : (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(value, min, max);\n+}\n+function parseBorderWidth(bar, maxW, maxH) {\n+    const value = bar.options.borderWidth;\n+    const skip = bar.borderSkipped;\n+    const o = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ax)(value);\n+    return {\n+        t: skipOrLimit(skip.top, o.top, 0, maxH),\n+        r: skipOrLimit(skip.right, o.right, 0, maxW),\n+        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n+        l: skipOrLimit(skip.left, o.left, 0, maxW)\n+    };\n+}\n+function parseBorderRadius(bar, maxW, maxH) {\n+    const { enableBorderRadius  } = bar.getProps([\n+        'enableBorderRadius'\n+    ]);\n+    const value = bar.options.borderRadius;\n+    const o = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(value);\n+    const maxR = Math.min(maxW, maxH);\n+    const skip = bar.borderSkipped;\n+    const enableBorder = enableBorderRadius || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(value);\n+    return {\n+        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n+        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n+        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n+        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n+    };\n+}\n+function boundingRects(bar) {\n+    const bounds = getBarBounds(bar);\n+    const width = bounds.right - bounds.left;\n+    const height = bounds.bottom - bounds.top;\n+    const border = parseBorderWidth(bar, width \u002F 2, height \u002F 2);\n+    const radius = parseBorderRadius(bar, width \u002F 2, height \u002F 2);\n+    return {\n+        outer: {\n+            x: bounds.left,\n+            y: bounds.top,\n+            w: width,\n+            h: height,\n+            radius\n+        },\n+        inner: {\n+            x: bounds.left + border.l,\n+            y: bounds.top + border.t,\n+            w: width - border.l - border.r,\n+            h: height - border.t - border.b,\n+            radius: {\n+                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n+                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n+                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n+                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n+            }\n+        }\n+    };\n+}\n+function inRange(bar, x, y, useFinalPosition) {\n+    const skipX = x === null;\n+    const skipY = y === null;\n+    const skipBoth = skipX && skipY;\n+    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n+    return bounds && (skipX || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(x, bounds.left, bounds.right)) && (skipY || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(y, bounds.top, bounds.bottom));\n+}\n+function hasRadius(radius) {\n+    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n+}\n+ function addNormalRectPath(ctx, rect) {\n+    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n+}\n+function inflateRect(rect, amount, refRect = {}) {\n+    const x = rect.x !== refRect.x ? -amount : 0;\n+    const y = rect.y !== refRect.y ? -amount : 0;\n+    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n+    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n+    return {\n+        x: rect.x + x,\n+        y: rect.y + y,\n+        w: rect.w + w,\n+        h: rect.h + h,\n+        radius: rect.radius\n+    };\n+}\n+class BarElement extends Element {\n+    static id = 'bar';\n+ static defaults = {\n+        borderSkipped: 'start',\n+        borderWidth: 0,\n+        borderRadius: 0,\n+        inflateAmount: 'auto',\n+        pointStyle: undefined\n+    };\n+ static defaultRoutes = {\n+        backgroundColor: 'backgroundColor',\n+        borderColor: 'borderColor'\n+    };\n+    constructor(cfg){\n+        super();\n+        this.options = undefined;\n+        this.horizontal = undefined;\n+        this.base = undefined;\n+        this.width = undefined;\n+        this.height = undefined;\n+        this.inflateAmount = undefined;\n+        if (cfg) {\n+            Object.assign(this, cfg);\n+        }\n+    }\n+    draw(ctx) {\n+        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n+        const { inner , outer  } = boundingRects(this);\n+        const addRectPath = hasRadius(outer.radius) ? _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aw : addNormalRectPath;\n+        ctx.save();\n+        if (outer.w !== inner.w || outer.h !== inner.h) {\n+            ctx.beginPath();\n+            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n+            ctx.clip();\n+            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n+            ctx.fillStyle = borderColor;\n+            ctx.fill('evenodd');\n+        }\n+        ctx.beginPath();\n+        addRectPath(ctx, inflateRect(inner, inflateAmount));\n+        ctx.fillStyle = backgroundColor;\n+        ctx.fill();\n+        ctx.restore();\n+    }\n+    inRange(mouseX, mouseY, useFinalPosition) {\n+        return inRange(this, mouseX, mouseY, useFinalPosition);\n+    }\n+    inXRange(mouseX, useFinalPosition) {\n+        return inRange(this, mouseX, null, useFinalPosition);\n+    }\n+    inYRange(mouseY, useFinalPosition) {\n+        return inRange(this, null, mouseY, useFinalPosition);\n+    }\n+    getCenterPoint(useFinalPosition) {\n+        const { x , y , base , horizontal  } =  this.getProps([\n+            'x',\n+            'y',\n+            'base',\n+            'horizontal'\n+        ], useFinalPosition);\n+        return {\n+            x: horizontal ? (x + base) \u002F 2 : x,\n+            y: horizontal ? y : (y + base) \u002F 2\n+        };\n+    }\n+    getRange(axis) {\n+        return axis === 'x' ? this.width \u002F 2 : this.height \u002F 2;\n+    }\n+}\n+\n+var elements = \u002F*#__PURE__*\u002FObject.freeze({\n+__proto__: null,\n+ArcElement: ArcElement,\n+BarElement: BarElement,\n+LineElement: LineElement,\n+PointElement: PointElement\n+});\n+\n+const BORDER_COLORS = [\n+    'rgb(54, 162, 235)',\n+    'rgb(255, 99, 132)',\n+    'rgb(255, 159, 64)',\n+    'rgb(255, 205, 86)',\n+    'rgb(75, 192, 192)',\n+    'rgb(153, 102, 255)',\n+    'rgb(201, 203, 207)' \u002F\u002F grey\n+];\n+\u002F\u002F Border colors with 50% transparency\n+const BACKGROUND_COLORS = \u002F* #__PURE__ *\u002F BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n+function getBorderColor(i) {\n+    return BORDER_COLORS[i % BORDER_COLORS.length];\n+}\n+function getBackgroundColor(i) {\n+    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n+}\n+function colorizeDefaultDataset(dataset, i) {\n+    dataset.borderColor = getBorderColor(i);\n+    dataset.backgroundColor = getBackgroundColor(i);\n+    return ++i;\n+}\n+function colorizeDoughnutDataset(dataset, i) {\n+    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n+    return i;\n+}\n+function colorizePolarAreaDataset(dataset, i) {\n+    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n+    return i;\n+}\n+function getColorizer(chart) {\n+    let i = 0;\n+    return (dataset, datasetIndex)=>{\n+        const controller = chart.getDatasetMeta(datasetIndex).controller;\n+        if (controller instanceof DoughnutController) {\n+            i = colorizeDoughnutDataset(dataset, i);\n+        } else if (controller instanceof PolarAreaController) {\n+            i = colorizePolarAreaDataset(dataset, i);\n+        } else if (controller) {\n+            i = colorizeDefaultDataset(dataset, i);\n+        }\n+    };\n+}\n+function containsColorsDefinitions(descriptors) {\n+    let k;\n+    for(k in descriptors){\n+        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n+            return true;\n+        }\n+    }\n+    return false;\n+}\n+function containsColorsDefinition(descriptor) {\n+    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n+}\n+function containsDefaultColorsDefenitions() {\n+    return _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.borderColor !== 'rgba(0,0,0,0.1)' || _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.backgroundColor !== 'rgba(0,0,0,0.1)';\n+}\n+var plugin_colors = {\n+    id: 'colors',\n+    defaults: {\n+        enabled: true,\n+        forceOverride: false\n+    },\n+    beforeLayout (chart, _args, options) {\n+        if (!options.enabled) {\n+            return;\n+        }\n+        const { data: { datasets  } , options: chartOptions  } = chart.config;\n+        const { elements  } = chartOptions;\n+        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n+        if (!options.forceOverride && containsColorDefenition) {\n+            return;\n+        }\n+        const colorizer = getColorizer(chart);\n+        datasets.forEach(colorizer);\n+    }\n+};\n+\n+function lttbDecimation(data, start, count, availableWidth, options) {\n+ const samples = options.samples || availableWidth;\n+    if (samples >= count) {\n+        return data.slice(start, start + count);\n+    }\n+    const decimated = [];\n+    const bucketWidth = (count - 2) \u002F (samples - 2);\n+    let sampledIndex = 0;\n+    const endIndex = start + count - 1;\n+    let a = start;\n+    let i, maxAreaPoint, maxArea, area, nextA;\n+    decimated[sampledIndex++] = data[a];\n+    for(i = 0; i \u003C samples - 2; i++){\n+        let avgX = 0;\n+        let avgY = 0;\n+        let j;\n+        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n+        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n+        const avgRangeLength = avgRangeEnd - avgRangeStart;\n+        for(j = avgRangeStart; j \u003C avgRangeEnd; j++){\n+            avgX += data[j].x;\n+            avgY += data[j].y;\n+        }\n+        avgX \u002F= avgRangeLength;\n+        avgY \u002F= avgRangeLength;\n+        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n+        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n+        const { x: pointAx , y: pointAy  } = data[a];\n+        maxArea = area = -1;\n+        for(j = rangeOffs; j \u003C rangeTo; j++){\n+            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n+            if (area > maxArea) {\n+                maxArea = area;\n+                maxAreaPoint = data[j];\n+                nextA = j;\n+            }\n+        }\n+        decimated[sampledIndex++] = maxAreaPoint;\n+        a = nextA;\n+    }\n+    decimated[sampledIndex++] = data[endIndex];\n+    return decimated;\n+}\n+function minMaxDecimation(data, start, count, availableWidth) {\n+    let avgX = 0;\n+    let countX = 0;\n+    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n+    const decimated = [];\n+    const endIndex = start + count - 1;\n+    const xMin = data[start].x;\n+    const xMax = data[endIndex].x;\n+    const dx = xMax - xMin;\n+    for(i = start; i \u003C start + count; ++i){\n+        point = data[i];\n+        x = (point.x - xMin) \u002F dx * availableWidth;\n+        y = point.y;\n+        const truncX = x | 0;\n+        if (truncX === prevX) {\n+            if (y \u003C minY) {\n+                minY = y;\n+                minIndex = i;\n+            } else if (y > maxY) {\n+                maxY = y;\n+                maxIndex = i;\n+            }\n+            avgX = (countX * avgX + point.x) \u002F ++countX;\n+        } else {\n+            const lastIndex = i - 1;\n+            if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(minIndex) && !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(maxIndex)) {\n+                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n+                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n+                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n+                    decimated.push({\n+                        ...data[intermediateIndex1],\n+                        x: avgX\n+                    });\n+                }\n+                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n+                    decimated.push({\n+                        ...data[intermediateIndex2],\n+                        x: avgX\n+                    });\n+                }\n+            }\n+            if (i > 0 && lastIndex !== startIndex) {\n+                decimated.push(data[lastIndex]);\n+            }\n+            decimated.push(point);\n+            prevX = truncX;\n+            countX = 0;\n+            minY = maxY = y;\n+            minIndex = maxIndex = startIndex = i;\n+        }\n+    }\n+    return decimated;\n+}\n+function cleanDecimatedDataset(dataset) {\n+    if (dataset._decimated) {\n+        const data = dataset._data;\n+        delete dataset._decimated;\n+        delete dataset._data;\n+        Object.defineProperty(dataset, 'data', {\n+            configurable: true,\n+            enumerable: true,\n+            writable: true,\n+            value: data\n+        });\n+    }\n+}\n+function cleanDecimatedData(chart) {\n+    chart.data.datasets.forEach((dataset)=>{\n+        cleanDecimatedDataset(dataset);\n+    });\n+}\n+function getStartAndCountOfVisiblePointsSimplified(meta, points) {\n+    const pointCount = points.length;\n+    let start = 0;\n+    let count;\n+    const { iScale  } = meta;\n+    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n+    if (minDefined) {\n+        start = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.B)(points, iScale.axis, min).lo, 0, pointCount - 1);\n+    }\n+    if (maxDefined) {\n+        count = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.B)(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n+    } else {\n+        count = pointCount - start;\n+    }\n+    return {\n+        start,\n+        count\n+    };\n+}\n+var plugin_decimation = {\n+    id: 'decimation',\n+    defaults: {\n+        algorithm: 'min-max',\n+        enabled: false\n+    },\n+    beforeElementsUpdate: (chart, args, options)=>{\n+        if (!options.enabled) {\n+            cleanDecimatedData(chart);\n+            return;\n+        }\n+        const availableWidth = chart.width;\n+        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n+            const { _data , indexAxis  } = dataset;\n+            const meta = chart.getDatasetMeta(datasetIndex);\n+            const data = _data || dataset.data;\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a)([\n+                indexAxis,\n+                chart.options.indexAxis\n+            ]) === 'y') {\n+                return;\n+            }\n+            if (!meta.controller.supportsDecimation) {\n+                return;\n+            }\n+            const xAxis = chart.scales[meta.xAxisID];\n+            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n+                return;\n+            }\n+            if (chart.options.parsing) {\n+                return;\n+            }\n+            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n+            const threshold = options.threshold || 4 * availableWidth;\n+            if (count \u003C= threshold) {\n+                cleanDecimatedDataset(dataset);\n+                return;\n+            }\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(_data)) {\n+                dataset._data = data;\n+                delete dataset.data;\n+                Object.defineProperty(dataset, 'data', {\n+                    configurable: true,\n+                    enumerable: true,\n+                    get: function() {\n+                        return this._decimated;\n+                    },\n+                    set: function(d) {\n+                        this._data = d;\n+                    }\n+                });\n+            }\n+            let decimated;\n+            switch(options.algorithm){\n+                case 'lttb':\n+                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n+                    break;\n+                case 'min-max':\n+                    decimated = minMaxDecimation(data, start, count, availableWidth);\n+                    break;\n+                default:\n+                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n+            }\n+            dataset._decimated = decimated;\n+        });\n+    },\n+    destroy (chart) {\n+        cleanDecimatedData(chart);\n+    }\n+};\n+\n+function _segments(line, target, property) {\n+    const segments = line.segments;\n+    const points = line.points;\n+    const tpoints = target.points;\n+    const parts = [];\n+    for (const segment of segments){\n+        let { start , end  } = segment;\n+        end = _findSegmentEnd(start, end, points);\n+        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n+        if (!target.segments) {\n+            parts.push({\n+                source: segment,\n+                target: bounds,\n+                start: points[start],\n+                end: points[end]\n+            });\n+            continue;\n+        }\n+        const targetSegments = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ap)(target, bounds);\n+        for (const tgt of targetSegments){\n+            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n+            const fillSources = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.az)(segment, points, subBounds);\n+            for (const fillSource of fillSources){\n+                parts.push({\n+                    source: fillSource,\n+                    target: tgt,\n+                    start: {\n+                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n+                    },\n+                    end: {\n+                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n+                    }\n+                });\n+            }\n+        }\n+    }\n+    return parts;\n+}\n+function _getBounds(property, first, last, loop) {\n+    if (loop) {\n+        return;\n+    }\n+    let start = first[property];\n+    let end = last[property];\n+    if (property === 'angle') {\n+        start = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(start);\n+        end = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(end);\n+    }\n+    return {\n+        property,\n+        start,\n+        end\n+    };\n+}\n+function _pointsFromSegments(boundary, line) {\n+    const { x =null , y =null  } = boundary || {};\n+    const linePoints = line.points;\n+    const points = [];\n+    line.segments.forEach(({ start , end  })=>{\n+        end = _findSegmentEnd(start, end, linePoints);\n+        const first = linePoints[start];\n+        const last = linePoints[end];\n+        if (y !== null) {\n+            points.push({\n+                x: first.x,\n+                y\n+            });\n+            points.push({\n+                x: last.x,\n+                y\n+            });\n+        } else if (x !== null) {\n+            points.push({\n+                x,\n+                y: first.y\n+            });\n+            points.push({\n+                x,\n+                y: last.y\n+            });\n+        }\n+    });\n+    return points;\n+}\n+function _findSegmentEnd(start, end, points) {\n+    for(; end > start; end--){\n+        const point = points[end];\n+        if (!isNaN(point.x) && !isNaN(point.y)) {\n+            break;\n+        }\n+    }\n+    return end;\n+}\n+function _getEdge(a, b, prop, fn) {\n+    if (a && b) {\n+        return fn(a[prop], b[prop]);\n+    }\n+    return a ? a[prop] : b ? b[prop] : 0;\n+}\n+\n+function _createBoundaryLine(boundary, line) {\n+    let points = [];\n+    let _loop = false;\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(boundary)) {\n+        _loop = true;\n+        points = boundary;\n+    } else {\n+        points = _pointsFromSegments(boundary, line);\n+    }\n+    return points.length ? new LineElement({\n+        points,\n+        options: {\n+            tension: 0\n+        },\n+        _loop,\n+        _fullLoop: _loop\n+    }) : null;\n+}\n+function _shouldApplyFill(source) {\n+    return source && source.fill !== false;\n+}\n+\n+function _resolveTarget(sources, index, propagate) {\n+    const source = sources[index];\n+    let fill = source.fill;\n+    const visited = [\n+        index\n+    ];\n+    let target;\n+    if (!propagate) {\n+        return fill;\n+    }\n+    while(fill !== false && visited.indexOf(fill) === -1){\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(fill)) {\n+            return fill;\n+        }\n+        target = sources[fill];\n+        if (!target) {\n+            return false;\n+        }\n+        if (target.visible) {\n+            return fill;\n+        }\n+        visited.push(fill);\n+        fill = target.fill;\n+    }\n+    return false;\n+}\n+ function _decodeFill(line, index, count) {\n+     const fill = parseFillOption(line);\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {\n+        return isNaN(fill.value) ? false : fill;\n+    }\n+    let target = parseFloat(fill);\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(target) && Math.floor(target) === target) {\n+        return decodeTargetIndex(fill[0], index, target, count);\n+    }\n+    return [\n+        'origin',\n+        'start',\n+        'end',\n+        'stack',\n+        'shape'\n+    ].indexOf(fill) >= 0 && fill;\n+}\n+function decodeTargetIndex(firstCh, index, target, count) {\n+    if (firstCh === '-' || firstCh === '+') {\n+        target = index + target;\n+    }\n+    if (target === index || target \u003C 0 || target >= count) {\n+        return false;\n+    }\n+    return target;\n+}\n+ function _getTargetPixel(fill, scale) {\n+    let pixel = null;\n+    if (fill === 'start') {\n+        pixel = scale.bottom;\n+    } else if (fill === 'end') {\n+        pixel = scale.top;\n+    } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {\n+        pixel = scale.getPixelForValue(fill.value);\n+    } else if (scale.getBasePixel) {\n+        pixel = scale.getBasePixel();\n+    }\n+    return pixel;\n+}\n+ function _getTargetValue(fill, scale, startValue) {\n+    let value;\n+    if (fill === 'start') {\n+        value = startValue;\n+    } else if (fill === 'end') {\n+        value = scale.options.reverse ? scale.min : scale.max;\n+    } else if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {\n+        value = fill.value;\n+    } else {\n+        value = scale.getBaseValue();\n+    }\n+    return value;\n+}\n+ function parseFillOption(line) {\n+    const options = line.options;\n+    const fillOption = options.fill;\n+    let fill = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(fillOption && fillOption.target, fillOption);\n+    if (fill === undefined) {\n+        fill = !!options.backgroundColor;\n+    }\n+    if (fill === false || fill === null) {\n+        return false;\n+    }\n+    if (fill === true) {\n+        return 'origin';\n+    }\n+    return fill;\n+}\n+\n+function _buildStackLine(source) {\n+    const { scale , index , line  } = source;\n+    const points = [];\n+    const segments = line.segments;\n+    const sourcePoints = line.points;\n+    const linesBelow = getLinesBelow(scale, index);\n+    linesBelow.push(_createBoundaryLine({\n+        x: null,\n+        y: scale.bottom\n+    }, line));\n+    for(let i = 0; i \u003C segments.length; i++){\n+        const segment = segments[i];\n+        for(let j = segment.start; j \u003C= segment.end; j++){\n+            addPointsBelow(points, sourcePoints[j], linesBelow);\n+        }\n+    }\n+    return new LineElement({\n+        points,\n+        options: {}\n+    });\n+}\n+ function getLinesBelow(scale, index) {\n+    const below = [];\n+    const metas = scale.getMatchingVisibleMetas('line');\n+    for(let i = 0; i \u003C metas.length; i++){\n+        const meta = metas[i];\n+        if (meta.index === index) {\n+            break;\n+        }\n+        if (!meta.hidden) {\n+            below.unshift(meta.dataset);\n+        }\n+    }\n+    return below;\n+}\n+ function addPointsBelow(points, sourcePoint, linesBelow) {\n+    const postponed = [];\n+    for(let j = 0; j \u003C linesBelow.length; j++){\n+        const line = linesBelow[j];\n+        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n+        if (!point || first && last) {\n+            continue;\n+        }\n+        if (first) {\n+            postponed.unshift(point);\n+        } else {\n+            points.push(point);\n+            if (!last) {\n+                break;\n+            }\n+        }\n+    }\n+    points.push(...postponed);\n+}\n+ function findPoint(line, sourcePoint, property) {\n+    const point = line.interpolate(sourcePoint, property);\n+    if (!point) {\n+        return {};\n+    }\n+    const pointValue = point[property];\n+    const segments = line.segments;\n+    const linePoints = line.points;\n+    let first = false;\n+    let last = false;\n+    for(let i = 0; i \u003C segments.length; i++){\n+        const segment = segments[i];\n+        const firstValue = linePoints[segment.start][property];\n+        const lastValue = linePoints[segment.end][property];\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(pointValue, firstValue, lastValue)) {\n+            first = pointValue === firstValue;\n+            last = pointValue === lastValue;\n+            break;\n+        }\n+    }\n+    return {\n+        first,\n+        last,\n+        point\n+    };\n+}\n+\n+class simpleArc {\n+    constructor(opts){\n+        this.x = opts.x;\n+        this.y = opts.y;\n+        this.radius = opts.radius;\n+    }\n+    pathSegment(ctx, bounds, opts) {\n+        const { x , y , radius  } = this;\n+        bounds = bounds || {\n+            start: 0,\n+            end: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T\n+        };\n+        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n+        return !opts.bounds;\n+    }\n+    interpolate(point) {\n+        const { x , y , radius  } = this;\n+        const angle = point.angle;\n+        return {\n+            x: x + Math.cos(angle) * radius,\n+            y: y + Math.sin(angle) * radius,\n+            angle\n+        };\n+    }\n+}\n+\n+function _getTarget(source) {\n+    const { chart , fill , line  } = source;\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(fill)) {\n+        return getLineByIndex(chart, fill);\n+    }\n+    if (fill === 'stack') {\n+        return _buildStackLine(source);\n+    }\n+    if (fill === 'shape') {\n+        return true;\n+    }\n+    const boundary = computeBoundary(source);\n+    if (boundary instanceof simpleArc) {\n+        return boundary;\n+    }\n+    return _createBoundaryLine(boundary, line);\n+}\n+ function getLineByIndex(chart, index) {\n+    const meta = chart.getDatasetMeta(index);\n+    const visible = meta && chart.isDatasetVisible(index);\n+    return visible ? meta.dataset : null;\n+}\n+function computeBoundary(source) {\n+    const scale = source.scale || {};\n+    if (scale.getPointPositionForValue) {\n+        return computeCircularBoundary(source);\n+    }\n+    return computeLinearBoundary(source);\n+}\n+function computeLinearBoundary(source) {\n+    const { scale ={} , fill  } = source;\n+    const pixel = _getTargetPixel(fill, scale);\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(pixel)) {\n+        const horizontal = scale.isHorizontal();\n+        return {\n+            x: horizontal ? pixel : null,\n+            y: horizontal ? null : pixel\n+        };\n+    }\n+    return null;\n+}\n+function computeCircularBoundary(source) {\n+    const { scale , fill  } = source;\n+    const options = scale.options;\n+    const length = scale.getLabels().length;\n+    const start = options.reverse ? scale.max : scale.min;\n+    const value = _getTargetValue(fill, scale, start);\n+    const target = [];\n+    if (options.grid.circular) {\n+        const center = scale.getPointPositionForValue(0, start);\n+        return new simpleArc({\n+            x: center.x,\n+            y: center.y,\n+            radius: scale.getDistanceFromCenterForValue(value)\n+        });\n+    }\n+    for(let i = 0; i \u003C length; ++i){\n+        target.push(scale.getPointPositionForValue(i, value));\n+    }\n+    return target;\n+}\n+\n+function _drawfill(ctx, source, area) {\n+    const target = _getTarget(source);\n+    const { chart , index , line , scale , axis  } = source;\n+    const lineOpts = line.options;\n+    const fillOption = lineOpts.fill;\n+    const color = lineOpts.backgroundColor;\n+    const { above =color , below =color  } = fillOption || {};\n+    const meta = chart.getDatasetMeta(index);\n+    const clip = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ah)(chart, meta);\n+    if (target && line.points.length) {\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Y)(ctx, area);\n+        doFill(ctx, {\n+            line,\n+            target,\n+            above,\n+            below,\n+            area,\n+            scale,\n+            axis,\n+            clip\n+        });\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.$)(ctx);\n+    }\n+}\n+function doFill(ctx, cfg) {\n+    const { line , target , above , below , area , scale , clip  } = cfg;\n+    const property = line._loop ? 'angle' : cfg.axis;\n+    ctx.save();\n+    let fillColor = below;\n+    if (below !== above) {\n+        if (property === 'x') {\n+            clipVertical(ctx, target, area.top);\n+            fill(ctx, {\n+                line,\n+                target,\n+                color: above,\n+                scale,\n+                property,\n+                clip\n+            });\n+            ctx.restore();\n+            ctx.save();\n+            clipVertical(ctx, target, area.bottom);\n+        } else if (property === 'y') {\n+            clipHorizontal(ctx, target, area.left);\n+            fill(ctx, {\n+                line,\n+                target,\n+                color: below,\n+                scale,\n+                property,\n+                clip\n+            });\n+            ctx.restore();\n+            ctx.save();\n+            clipHorizontal(ctx, target, area.right);\n+            fillColor = above;\n+        }\n+    }\n+    fill(ctx, {\n+        line,\n+        target,\n+        color: fillColor,\n+        scale,\n+        property,\n+        clip\n+    });\n+    ctx.restore();\n+}\n+function clipVertical(ctx, target, clipY) {\n+    const { segments , points  } = target;\n+    let first = true;\n+    let lineLoop = false;\n+    ctx.beginPath();\n+    for (const segment of segments){\n+        const { start , end  } = segment;\n+        const firstPoint = points[start];\n+        const lastPoint = points[_findSegmentEnd(start, end, points)];\n+        if (first) {\n+            ctx.moveTo(firstPoint.x, firstPoint.y);\n+            first = false;\n+        } else {\n+            ctx.lineTo(firstPoint.x, clipY);\n+            ctx.lineTo(firstPoint.x, firstPoint.y);\n+        }\n+        lineLoop = !!target.pathSegment(ctx, segment, {\n+            move: lineLoop\n+        });\n+        if (lineLoop) {\n+            ctx.closePath();\n+        } else {\n+            ctx.lineTo(lastPoint.x, clipY);\n+        }\n+    }\n+    ctx.lineTo(target.first().x, clipY);\n+    ctx.closePath();\n+    ctx.clip();\n+}\n+function clipHorizontal(ctx, target, clipX) {\n+    const { segments , points  } = target;\n+    let first = true;\n+    let lineLoop = false;\n+    ctx.beginPath();\n+    for (const segment of segments){\n+        const { start , end  } = segment;\n+        const firstPoint = points[start];\n+        const lastPoint = points[_findSegmentEnd(start, end, points)];\n+        if (first) {\n+            ctx.moveTo(firstPoint.x, firstPoint.y);\n+            first = false;\n+        } else {\n+            ctx.lineTo(clipX, firstPoint.y);\n+            ctx.lineTo(firstPoint.x, firstPoint.y);\n+        }\n+        lineLoop = !!target.pathSegment(ctx, segment, {\n+            move: lineLoop\n+        });\n+        if (lineLoop) {\n+            ctx.closePath();\n+        } else {\n+            ctx.lineTo(clipX, lastPoint.y);\n+        }\n+    }\n+    ctx.lineTo(clipX, target.first().y);\n+    ctx.closePath();\n+    ctx.clip();\n+}\n+function fill(ctx, cfg) {\n+    const { line , target , property , color , scale , clip  } = cfg;\n+    const segments = _segments(line, target, property);\n+    for (const { source: src , target: tgt , start , end  } of segments){\n+        const { style: { backgroundColor =color  } = {}  } = src;\n+        const notShape = target !== true;\n+        ctx.save();\n+        ctx.fillStyle = backgroundColor;\n+        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n+        ctx.beginPath();\n+        const lineLoop = !!line.pathSegment(ctx, src);\n+        let loop;\n+        if (notShape) {\n+            if (lineLoop) {\n+                ctx.closePath();\n+            } else {\n+                interpolatedLineTo(ctx, target, end, property);\n+            }\n+            const targetLoop = !!target.pathSegment(ctx, tgt, {\n+                move: lineLoop,\n+                reverse: true\n+            });\n+            loop = lineLoop && targetLoop;\n+            if (!loop) {\n+                interpolatedLineTo(ctx, target, start, property);\n+            }\n+        }\n+        ctx.closePath();\n+        ctx.fill(loop ? 'evenodd' : 'nonzero');\n+        ctx.restore();\n+    }\n+}\n+function clipBounds(ctx, scale, clip, bounds) {\n+    const chartArea = scale.chart.chartArea;\n+    const { property , start , end  } = bounds || {};\n+    if (property === 'x' || property === 'y') {\n+        let left, top, right, bottom;\n+        if (property === 'x') {\n+            left = start;\n+            top = chartArea.top;\n+            right = end;\n+            bottom = chartArea.bottom;\n+        } else {\n+            left = chartArea.left;\n+            top = start;\n+            right = chartArea.right;\n+            bottom = end;\n+        }\n+        ctx.beginPath();\n+        if (clip) {\n+            left = Math.max(left, clip.left);\n+            right = Math.min(right, clip.right);\n+            top = Math.max(top, clip.top);\n+            bottom = Math.min(bottom, clip.bottom);\n+        }\n+        ctx.rect(left, top, right - left, bottom - top);\n+        ctx.clip();\n+    }\n+}\n+function interpolatedLineTo(ctx, target, point, property) {\n+    const interpolatedPoint = target.interpolate(point, property);\n+    if (interpolatedPoint) {\n+        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n+    }\n+}\n+\n+var index = {\n+    id: 'filler',\n+    afterDatasetsUpdate (chart, _args, options) {\n+        const count = (chart.data.datasets || []).length;\n+        const sources = [];\n+        let meta, i, line, source;\n+        for(i = 0; i \u003C count; ++i){\n+            meta = chart.getDatasetMeta(i);\n+            line = meta.dataset;\n+            source = null;\n+            if (line && line.options && line instanceof LineElement) {\n+                source = {\n+                    visible: chart.isDatasetVisible(i),\n+                    index: i,\n+                    fill: _decodeFill(line, i, count),\n+                    chart,\n+                    axis: meta.controller.options.indexAxis,\n+                    scale: meta.vScale,\n+                    line\n+                };\n+            }\n+            meta.$filler = source;\n+            sources.push(source);\n+        }\n+        for(i = 0; i \u003C count; ++i){\n+            source = sources[i];\n+            if (!source || source.fill === false) {\n+                continue;\n+            }\n+            source.fill = _resolveTarget(sources, i, options.propagate);\n+        }\n+    },\n+    beforeDraw (chart, _args, options) {\n+        const draw = options.drawTime === 'beforeDraw';\n+        const metasets = chart.getSortedVisibleDatasetMetas();\n+        const area = chart.chartArea;\n+        for(let i = metasets.length - 1; i >= 0; --i){\n+            const source = metasets[i].$filler;\n+            if (!source) {\n+                continue;\n+            }\n+            source.line.updateControlPoints(area, source.axis);\n+            if (draw && source.fill) {\n+                _drawfill(chart.ctx, source, area);\n+            }\n+        }\n+    },\n+    beforeDatasetsDraw (chart, _args, options) {\n+        if (options.drawTime !== 'beforeDatasetsDraw') {\n+            return;\n+        }\n+        const metasets = chart.getSortedVisibleDatasetMetas();\n+        for(let i = metasets.length - 1; i >= 0; --i){\n+            const source = metasets[i].$filler;\n+            if (_shouldApplyFill(source)) {\n+                _drawfill(chart.ctx, source, chart.chartArea);\n+            }\n+        }\n+    },\n+    beforeDatasetDraw (chart, args, options) {\n+        const source = args.meta.$filler;\n+        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n+            return;\n+        }\n+        _drawfill(chart.ctx, source, chart.chartArea);\n+    },\n+    defaults: {\n+        propagate: true,\n+        drawTime: 'beforeDatasetDraw'\n+    }\n+};\n+\n+const getBoxSize = (labelOpts, fontSize)=>{\n+    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n+    if (labelOpts.usePointStyle) {\n+        boxHeight = Math.min(boxHeight, fontSize);\n+        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n+    }\n+    return {\n+        boxWidth,\n+        boxHeight,\n+        itemHeight: Math.max(fontSize, boxHeight)\n+    };\n+};\n+const itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n+class Legend extends Element {\n+ constructor(config){\n+        super();\n+        this._added = false;\n+        this.legendHitBoxes = [];\n+ this._hoveredItem = null;\n+        this.doughnutMode = false;\n+        this.chart = config.chart;\n+        this.options = config.options;\n+        this.ctx = config.ctx;\n+        this.legendItems = undefined;\n+        this.columnSizes = undefined;\n+        this.lineWidths = undefined;\n+        this.maxHeight = undefined;\n+        this.maxWidth = undefined;\n+        this.top = undefined;\n+        this.bottom = undefined;\n+        this.left = undefined;\n+        this.right = undefined;\n+        this.height = undefined;\n+        this.width = undefined;\n+        this._margins = undefined;\n+        this.position = undefined;\n+        this.weight = undefined;\n+        this.fullSize = undefined;\n+    }\n+    update(maxWidth, maxHeight, margins) {\n+        this.maxWidth = maxWidth;\n+        this.maxHeight = maxHeight;\n+        this._margins = margins;\n+        this.setDimensions();\n+        this.buildLabels();\n+        this.fit();\n+    }\n+    setDimensions() {\n+        if (this.isHorizontal()) {\n+            this.width = this.maxWidth;\n+            this.left = this._margins.left;\n+            this.right = this.width;\n+        } else {\n+            this.height = this.maxHeight;\n+            this.top = this._margins.top;\n+            this.bottom = this.height;\n+        }\n+    }\n+    buildLabels() {\n+        const labelOpts = this.options.labels || {};\n+        let legendItems = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(labelOpts.generateLabels, [\n+            this.chart\n+        ], this) || [];\n+        if (labelOpts.filter) {\n+            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n+        }\n+        if (labelOpts.sort) {\n+            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n+        }\n+        if (this.options.reverse) {\n+            legendItems.reverse();\n+        }\n+        this.legendItems = legendItems;\n+    }\n+    fit() {\n+        const { options , ctx  } = this;\n+        if (!options.display) {\n+            this.width = this.height = 0;\n+            return;\n+        }\n+        const labelOpts = options.labels;\n+        const labelFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(labelOpts.font);\n+        const fontSize = labelFont.size;\n+        const titleHeight = this._computeTitleHeight();\n+        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n+        let width, height;\n+        ctx.font = labelFont.string;\n+        if (this.isHorizontal()) {\n+            width = this.maxWidth;\n+            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n+        } else {\n+            height = this.maxHeight;\n+            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n+        }\n+        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n+        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n+    }\n+ _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n+        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n+        const hitboxes = this.legendHitBoxes = [];\n+        const lineWidths = this.lineWidths = [\n+            0\n+        ];\n+        const lineHeight = itemHeight + padding;\n+        let totalHeight = titleHeight;\n+        ctx.textAlign = 'left';\n+        ctx.textBaseline = 'middle';\n+        let row = -1;\n+        let top = -lineHeight;\n+        this.legendItems.forEach((legendItem, i)=>{\n+            const itemWidth = boxWidth + fontSize \u002F 2 + ctx.measureText(legendItem.text).width;\n+            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n+                totalHeight += lineHeight;\n+                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n+                top += lineHeight;\n+                row++;\n+            }\n+            hitboxes[i] = {\n+                left: 0,\n+                top,\n+                row,\n+                width: itemWidth,\n+                height: itemHeight\n+            };\n+            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n+        });\n+        return totalHeight;\n+    }\n+    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n+        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n+        const hitboxes = this.legendHitBoxes = [];\n+        const columnSizes = this.columnSizes = [];\n+        const heightLimit = maxHeight - titleHeight;\n+        let totalWidth = padding;\n+        let currentColWidth = 0;\n+        let currentColHeight = 0;\n+        let left = 0;\n+        let col = 0;\n+        this.legendItems.forEach((legendItem, i)=>{\n+            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n+            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n+                totalWidth += currentColWidth + padding;\n+                columnSizes.push({\n+                    width: currentColWidth,\n+                    height: currentColHeight\n+                });\n+                left += currentColWidth + padding;\n+                col++;\n+                currentColWidth = currentColHeight = 0;\n+            }\n+            hitboxes[i] = {\n+                left,\n+                top: currentColHeight,\n+                col,\n+                width: itemWidth,\n+                height: itemHeight\n+            };\n+            currentColWidth = Math.max(currentColWidth, itemWidth);\n+            currentColHeight += itemHeight + padding;\n+        });\n+        totalWidth += currentColWidth;\n+        columnSizes.push({\n+            width: currentColWidth,\n+            height: currentColHeight\n+        });\n+        return totalWidth;\n+    }\n+    adjustHitBoxes() {\n+        if (!this.options.display) {\n+            return;\n+        }\n+        const titleHeight = this._computeTitleHeight();\n+        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n+        const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(rtl, this.left, this.width);\n+        if (this.isHorizontal()) {\n+            let row = 0;\n+            let left = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.left + padding, this.right - this.lineWidths[row]);\n+            for (const hitbox of hitboxes){\n+                if (row !== hitbox.row) {\n+                    row = hitbox.row;\n+                    left = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.left + padding, this.right - this.lineWidths[row]);\n+                }\n+                hitbox.top += this.top + titleHeight + padding;\n+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n+                left += hitbox.width + padding;\n+            }\n+        } else {\n+            let col = 0;\n+            let top = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n+            for (const hitbox of hitboxes){\n+                if (hitbox.col !== col) {\n+                    col = hitbox.col;\n+                    top = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n+                }\n+                hitbox.top = top;\n+                hitbox.left += this.left + padding;\n+                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n+                top += hitbox.height + padding;\n+            }\n+        }\n+    }\n+    isHorizontal() {\n+        return this.options.position === 'top' || this.options.position === 'bottom';\n+    }\n+    draw() {\n+        if (this.options.display) {\n+            const ctx = this.ctx;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Y)(ctx, this);\n+            this._draw();\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.$)(ctx);\n+        }\n+    }\n+ _draw() {\n+        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n+        const { align , labels: labelOpts  } = opts;\n+        const defaultColor = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.color;\n+        const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(opts.rtl, this.left, this.width);\n+        const labelFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(labelOpts.font);\n+        const { padding  } = labelOpts;\n+        const fontSize = labelFont.size;\n+        const halfFontSize = fontSize \u002F 2;\n+        let cursor;\n+        this.drawTitle();\n+        ctx.textAlign = rtlHelper.textAlign('left');\n+        ctx.textBaseline = 'middle';\n+        ctx.lineWidth = 0.5;\n+        ctx.font = labelFont.string;\n+        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n+        const drawLegendBox = function(x, y, legendItem) {\n+            if (isNaN(boxWidth) || boxWidth \u003C= 0 || isNaN(boxHeight) || boxHeight \u003C 0) {\n+                return;\n+            }\n+            ctx.save();\n+            const lineWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineWidth, 1);\n+            ctx.fillStyle = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.fillStyle, defaultColor);\n+            ctx.lineCap = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineCap, 'butt');\n+            ctx.lineDashOffset = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineDashOffset, 0);\n+            ctx.lineJoin = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineJoin, 'miter');\n+            ctx.lineWidth = lineWidth;\n+            ctx.strokeStyle = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.strokeStyle, defaultColor);\n+            ctx.setLineDash((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineDash, []));\n+            if (labelOpts.usePointStyle) {\n+                const drawOptions = {\n+                    radius: boxHeight * Math.SQRT2 \u002F 2,\n+                    pointStyle: legendItem.pointStyle,\n+                    rotation: legendItem.rotation,\n+                    borderWidth: lineWidth\n+                };\n+                const centerX = rtlHelper.xPlus(x, boxWidth \u002F 2);\n+                const centerY = y + halfFontSize;\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aE)(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n+            } else {\n+                const yBoxTop = y + Math.max((fontSize - boxHeight) \u002F 2, 0);\n+                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n+                const borderRadius = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(legendItem.borderRadius);\n+                ctx.beginPath();\n+                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n+                    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aw)(ctx, {\n+                        x: xBoxLeft,\n+                        y: yBoxTop,\n+                        w: boxWidth,\n+                        h: boxHeight,\n+                        radius: borderRadius\n+                    });\n+                } else {\n+                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n+                }\n+                ctx.fill();\n+                if (lineWidth !== 0) {\n+                    ctx.stroke();\n+                }\n+            }\n+            ctx.restore();\n+        };\n+        const fillText = function(x, y, legendItem) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, legendItem.text, x, y + itemHeight \u002F 2, labelFont, {\n+                strikethrough: legendItem.hidden,\n+                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n+            });\n+        };\n+        const isHorizontal = this.isHorizontal();\n+        const titleHeight = this._computeTitleHeight();\n+        if (isHorizontal) {\n+            cursor = {\n+                x: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.left + padding, this.right - lineWidths[0]),\n+                y: this.top + padding + titleHeight,\n+                line: 0\n+            };\n+        } else {\n+            cursor = {\n+                x: this.left + padding,\n+                y: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n+                line: 0\n+            };\n+        }\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aB)(this.ctx, opts.textDirection);\n+        const lineHeight = itemHeight + padding;\n+        this.legendItems.forEach((legendItem, i)=>{\n+            ctx.strokeStyle = legendItem.fontColor;\n+            ctx.fillStyle = legendItem.fontColor;\n+            const textWidth = ctx.measureText(legendItem.text).width;\n+            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n+            const width = boxWidth + halfFontSize + textWidth;\n+            let x = cursor.x;\n+            let y = cursor.y;\n+            rtlHelper.setWidth(this.width);\n+            if (isHorizontal) {\n+                if (i > 0 && x + width + padding > this.right) {\n+                    y = cursor.y += lineHeight;\n+                    cursor.line++;\n+                    x = cursor.x = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.left + padding, this.right - lineWidths[cursor.line]);\n+                }\n+            } else if (i > 0 && y + lineHeight > this.bottom) {\n+                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n+                cursor.line++;\n+                y = cursor.y = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n+            }\n+            const realX = rtlHelper.x(x);\n+            drawLegendBox(realX, y, legendItem);\n+            x = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aC)(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n+            fillText(rtlHelper.x(x), y, legendItem);\n+            if (isHorizontal) {\n+                cursor.x += width + padding;\n+            } else if (typeof legendItem.text !== 'string') {\n+                const fontLineHeight = labelFont.lineHeight;\n+                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n+            } else {\n+                cursor.y += lineHeight;\n+            }\n+        });\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aD)(this.ctx, opts.textDirection);\n+    }\n+ drawTitle() {\n+        const opts = this.options;\n+        const titleOpts = opts.title;\n+        const titleFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(titleOpts.font);\n+        const titlePadding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(titleOpts.padding);\n+        if (!titleOpts.display) {\n+            return;\n+        }\n+        const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(opts.rtl, this.left, this.width);\n+        const ctx = this.ctx;\n+        const position = titleOpts.position;\n+        const halfFontSize = titleFont.size \u002F 2;\n+        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n+        let y;\n+        let left = this.left;\n+        let maxWidth = this.width;\n+        if (this.isHorizontal()) {\n+            maxWidth = Math.max(...this.lineWidths);\n+            y = this.top + topPaddingPlusHalfFontSize;\n+            left = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(opts.align, left, this.right - maxWidth);\n+        } else {\n+            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n+            y = topPaddingPlusHalfFontSize + (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n+        }\n+        const x = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(position, left, left + maxWidth);\n+        ctx.textAlign = rtlHelper.textAlign((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a1)(position));\n+        ctx.textBaseline = 'middle';\n+        ctx.strokeStyle = titleOpts.color;\n+        ctx.fillStyle = titleOpts.color;\n+        ctx.font = titleFont.string;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, titleOpts.text, x, y, titleFont);\n+    }\n+ _computeTitleHeight() {\n+        const titleOpts = this.options.title;\n+        const titleFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(titleOpts.font);\n+        const titlePadding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(titleOpts.padding);\n+        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n+    }\n+ _getLegendItemAt(x, y) {\n+        let i, hitBox, lh;\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(x, this.left, this.right) && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(y, this.top, this.bottom)) {\n+            lh = this.legendHitBoxes;\n+            for(i = 0; i \u003C lh.length; ++i){\n+                hitBox = lh[i];\n+                if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(x, hitBox.left, hitBox.left + hitBox.width) && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ak)(y, hitBox.top, hitBox.top + hitBox.height)) {\n+                    return this.legendItems[i];\n+                }\n+            }\n+        }\n+        return null;\n+    }\n+ handleEvent(e) {\n+        const opts = this.options;\n+        if (!isListened(e.type, opts)) {\n+            return;\n+        }\n+        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n+        if (e.type === 'mousemove' || e.type === 'mouseout') {\n+            const previous = this._hoveredItem;\n+            const sameItem = itemsEqual(previous, hoveredItem);\n+            if (previous && !sameItem) {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(opts.onLeave, [\n+                    e,\n+                    previous,\n+                    this\n+                ], this);\n+            }\n+            this._hoveredItem = hoveredItem;\n+            if (hoveredItem && !sameItem) {\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(opts.onHover, [\n+                    e,\n+                    hoveredItem,\n+                    this\n+                ], this);\n+            }\n+        } else if (hoveredItem) {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(opts.onClick, [\n+                e,\n+                hoveredItem,\n+                this\n+            ], this);\n+        }\n+    }\n+}\n+function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n+    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n+    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n+    return {\n+        itemWidth,\n+        itemHeight\n+    };\n+}\n+function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n+    let legendItemText = legendItem.text;\n+    if (legendItemText && typeof legendItemText !== 'string') {\n+        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n+    }\n+    return boxWidth + labelFont.size \u002F 2 + ctx.measureText(legendItemText).width;\n+}\n+function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n+    let itemHeight = _itemHeight;\n+    if (typeof legendItem.text !== 'string') {\n+        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n+    }\n+    return itemHeight;\n+}\n+function calculateLegendItemHeight(legendItem, fontLineHeight) {\n+    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n+    return fontLineHeight * labelHeight;\n+}\n+function isListened(type, opts) {\n+    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n+        return true;\n+    }\n+    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n+        return true;\n+    }\n+    return false;\n+}\n+var plugin_legend = {\n+    id: 'legend',\n+ _element: Legend,\n+    start (chart, _args, options) {\n+        const legend = chart.legend = new Legend({\n+            ctx: chart.ctx,\n+            options,\n+            chart\n+        });\n+        layouts.configure(chart, legend, options);\n+        layouts.addBox(chart, legend);\n+    },\n+    stop (chart) {\n+        layouts.removeBox(chart, chart.legend);\n+        delete chart.legend;\n+    },\n+    beforeUpdate (chart, _args, options) {\n+        const legend = chart.legend;\n+        layouts.configure(chart, legend, options);\n+        legend.options = options;\n+    },\n+    afterUpdate (chart) {\n+        const legend = chart.legend;\n+        legend.buildLabels();\n+        legend.adjustHitBoxes();\n+    },\n+    afterEvent (chart, args) {\n+        if (!args.replay) {\n+            chart.legend.handleEvent(args.event);\n+        }\n+    },\n+    defaults: {\n+        display: true,\n+        position: 'top',\n+        align: 'center',\n+        fullSize: true,\n+        reverse: false,\n+        weight: 1000,\n+        onClick (e, legendItem, legend) {\n+            const index = legendItem.datasetIndex;\n+            const ci = legend.chart;\n+            if (ci.isDatasetVisible(index)) {\n+                ci.hide(index);\n+                legendItem.hidden = true;\n+            } else {\n+                ci.show(index);\n+                legendItem.hidden = false;\n+            }\n+        },\n+        onHover: null,\n+        onLeave: null,\n+        labels: {\n+            color: (ctx)=>ctx.chart.options.color,\n+            boxWidth: 40,\n+            padding: 10,\n+            generateLabels (chart) {\n+                const datasets = chart.data.datasets;\n+                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n+                return chart._getSortedDatasetMetas().map((meta)=>{\n+                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n+                    const borderWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(style.borderWidth);\n+                    return {\n+                        text: datasets[meta.index].label,\n+                        fillStyle: style.backgroundColor,\n+                        fontColor: color,\n+                        hidden: !meta.visible,\n+                        lineCap: style.borderCapStyle,\n+                        lineDash: style.borderDash,\n+                        lineDashOffset: style.borderDashOffset,\n+                        lineJoin: style.borderJoinStyle,\n+                        lineWidth: (borderWidth.width + borderWidth.height) \u002F 4,\n+                        strokeStyle: style.borderColor,\n+                        pointStyle: pointStyle || style.pointStyle,\n+                        rotation: style.rotation,\n+                        textAlign: textAlign || style.textAlign,\n+                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n+                        datasetIndex: meta.index\n+                    };\n+                }, this);\n+            }\n+        },\n+        title: {\n+            color: (ctx)=>ctx.chart.options.color,\n+            display: false,\n+            position: 'center',\n+            text: ''\n+        }\n+    },\n+    descriptors: {\n+        _scriptable: (name)=>!name.startsWith('on'),\n+        labels: {\n+            _scriptable: (name)=>![\n+                    'generateLabels',\n+                    'filter',\n+                    'sort'\n+                ].includes(name)\n+        }\n+    }\n+};\n+\n+class Title extends Element {\n+ constructor(config){\n+        super();\n+        this.chart = config.chart;\n+        this.options = config.options;\n+        this.ctx = config.ctx;\n+        this._padding = undefined;\n+        this.top = undefined;\n+        this.bottom = undefined;\n+        this.left = undefined;\n+        this.right = undefined;\n+        this.width = undefined;\n+        this.height = undefined;\n+        this.position = undefined;\n+        this.weight = undefined;\n+        this.fullSize = undefined;\n+    }\n+    update(maxWidth, maxHeight) {\n+        const opts = this.options;\n+        this.left = 0;\n+        this.top = 0;\n+        if (!opts.display) {\n+            this.width = this.height = this.right = this.bottom = 0;\n+            return;\n+        }\n+        this.width = this.right = maxWidth;\n+        this.height = this.bottom = maxHeight;\n+        const lineCount = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(opts.text) ? opts.text.length : 1;\n+        this._padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(opts.padding);\n+        const textSize = lineCount * (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(opts.font).lineHeight + this._padding.height;\n+        if (this.isHorizontal()) {\n+            this.height = textSize;\n+        } else {\n+            this.width = textSize;\n+        }\n+    }\n+    isHorizontal() {\n+        const pos = this.options.position;\n+        return pos === 'top' || pos === 'bottom';\n+    }\n+    _drawArgs(offset) {\n+        const { top , left , bottom , right , options  } = this;\n+        const align = options.align;\n+        let rotation = 0;\n+        let maxWidth, titleX, titleY;\n+        if (this.isHorizontal()) {\n+            titleX = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, left, right);\n+            titleY = top + offset;\n+            maxWidth = right - left;\n+        } else {\n+            if (options.position === 'left') {\n+                titleX = left + offset;\n+                titleY = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, bottom, top);\n+                rotation = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P * -0.5;\n+            } else {\n+                titleX = right - offset;\n+                titleY = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a2)(align, top, bottom);\n+                rotation = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P * 0.5;\n+            }\n+            maxWidth = bottom - top;\n+        }\n+        return {\n+            titleX,\n+            titleY,\n+            maxWidth,\n+            rotation\n+        };\n+    }\n+    draw() {\n+        const ctx = this.ctx;\n+        const opts = this.options;\n+        if (!opts.display) {\n+            return;\n+        }\n+        const fontOpts = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(opts.font);\n+        const lineHeight = fontOpts.lineHeight;\n+        const offset = lineHeight \u002F 2 + this._padding.top;\n+        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, opts.text, 0, 0, fontOpts, {\n+            color: opts.color,\n+            maxWidth,\n+            rotation,\n+            textAlign: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a1)(opts.align),\n+            textBaseline: 'middle',\n+            translation: [\n+                titleX,\n+                titleY\n+            ]\n+        });\n+    }\n+}\n+function createTitle(chart, titleOpts) {\n+    const title = new Title({\n+        ctx: chart.ctx,\n+        options: titleOpts,\n+        chart\n+    });\n+    layouts.configure(chart, title, titleOpts);\n+    layouts.addBox(chart, title);\n+    chart.titleBlock = title;\n+}\n+var plugin_title = {\n+    id: 'title',\n+ _element: Title,\n+    start (chart, _args, options) {\n+        createTitle(chart, options);\n+    },\n+    stop (chart) {\n+        const titleBlock = chart.titleBlock;\n+        layouts.removeBox(chart, titleBlock);\n+        delete chart.titleBlock;\n+    },\n+    beforeUpdate (chart, _args, options) {\n+        const title = chart.titleBlock;\n+        layouts.configure(chart, title, options);\n+        title.options = options;\n+    },\n+    defaults: {\n+        align: 'center',\n+        display: false,\n+        font: {\n+            weight: 'bold'\n+        },\n+        fullSize: true,\n+        padding: 10,\n+        position: 'top',\n+        text: '',\n+        weight: 2000\n+    },\n+    defaultRoutes: {\n+        color: 'color'\n+    },\n+    descriptors: {\n+        _scriptable: true,\n+        _indexable: false\n+    }\n+};\n+\n+const map = new WeakMap();\n+var plugin_subtitle = {\n+    id: 'subtitle',\n+    start (chart, _args, options) {\n+        const title = new Title({\n+            ctx: chart.ctx,\n+            options,\n+            chart\n+        });\n+        layouts.configure(chart, title, options);\n+        layouts.addBox(chart, title);\n+        map.set(chart, title);\n+    },\n+    stop (chart) {\n+        layouts.removeBox(chart, map.get(chart));\n+        map.delete(chart);\n+    },\n+    beforeUpdate (chart, _args, options) {\n+        const title = map.get(chart);\n+        layouts.configure(chart, title, options);\n+        title.options = options;\n+    },\n+    defaults: {\n+        align: 'center',\n+        display: false,\n+        font: {\n+            weight: 'normal'\n+        },\n+        fullSize: true,\n+        padding: 0,\n+        position: 'top',\n+        text: '',\n+        weight: 1500\n+    },\n+    defaultRoutes: {\n+        color: 'color'\n+    },\n+    descriptors: {\n+        _scriptable: true,\n+        _indexable: false\n+    }\n+};\n+\n+const positioners = {\n+ average (items) {\n+        if (!items.length) {\n+            return false;\n+        }\n+        let i, len;\n+        let xSet = new Set();\n+        let y = 0;\n+        let count = 0;\n+        for(i = 0, len = items.length; i \u003C len; ++i){\n+            const el = items[i].element;\n+            if (el && el.hasValue()) {\n+                const pos = el.tooltipPosition();\n+                xSet.add(pos.x);\n+                y += pos.y;\n+                ++count;\n+            }\n+        }\n+        if (count === 0 || xSet.size === 0) {\n+            return false;\n+        }\n+        const xAverage = [\n+            ...xSet\n+        ].reduce((a, b)=>a + b) \u002F xSet.size;\n+        return {\n+            x: xAverage,\n+            y: y \u002F count\n+        };\n+    },\n+ nearest (items, eventPosition) {\n+        if (!items.length) {\n+            return false;\n+        }\n+        let x = eventPosition.x;\n+        let y = eventPosition.y;\n+        let minDistance = Number.POSITIVE_INFINITY;\n+        let i, len, nearestElement;\n+        for(i = 0, len = items.length; i \u003C len; ++i){\n+            const el = items[i].element;\n+            if (el && el.hasValue()) {\n+                const center = el.getCenterPoint();\n+                const d = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aF)(eventPosition, center);\n+                if (d \u003C minDistance) {\n+                    minDistance = d;\n+                    nearestElement = el;\n+                }\n+            }\n+        }\n+        if (nearestElement) {\n+            const tp = nearestElement.tooltipPosition();\n+            x = tp.x;\n+            y = tp.y;\n+        }\n+        return {\n+            x,\n+            y\n+        };\n+    }\n+};\n+function pushOrConcat(base, toPush) {\n+    if (toPush) {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(toPush)) {\n+            Array.prototype.push.apply(base, toPush);\n+        } else {\n+            base.push(toPush);\n+        }\n+    }\n+    return base;\n+}\n+ function splitNewlines(str) {\n+    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n+        return str.split('\\n');\n+    }\n+    return str;\n+}\n+ function createTooltipItem(chart, item) {\n+    const { element , datasetIndex , index  } = item;\n+    const controller = chart.getDatasetMeta(datasetIndex).controller;\n+    const { label , value  } = controller.getLabelAndValue(index);\n+    return {\n+        chart,\n+        label,\n+        parsed: controller.getParsed(index),\n+        raw: chart.data.datasets[datasetIndex].data[index],\n+        formattedValue: value,\n+        dataset: controller.getDataset(),\n+        dataIndex: index,\n+        datasetIndex,\n+        element\n+    };\n+}\n+ function getTooltipSize(tooltip, options) {\n+    const ctx = tooltip.chart.ctx;\n+    const { body , footer , title  } = tooltip;\n+    const { boxWidth , boxHeight  } = options;\n+    const bodyFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.bodyFont);\n+    const titleFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.titleFont);\n+    const footerFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.footerFont);\n+    const titleLineCount = title.length;\n+    const footerLineCount = footer.length;\n+    const bodyLineItemCount = body.length;\n+    const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(options.padding);\n+    let height = padding.height;\n+    let width = 0;\n+    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n+    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n+    if (titleLineCount) {\n+        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n+    }\n+    if (combinedBodyLength) {\n+        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n+        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n+    }\n+    if (footerLineCount) {\n+        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n+    }\n+    let widthPadding = 0;\n+    const maxLineWidth = function(line) {\n+        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n+    };\n+    ctx.save();\n+    ctx.font = titleFont.string;\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(tooltip.title, maxLineWidth);\n+    ctx.font = bodyFont.string;\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n+    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(body, (bodyItem)=>{\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(bodyItem.before, maxLineWidth);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(bodyItem.lines, maxLineWidth);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(bodyItem.after, maxLineWidth);\n+    });\n+    widthPadding = 0;\n+    ctx.font = footerFont.string;\n+    (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(tooltip.footer, maxLineWidth);\n+    ctx.restore();\n+    width += padding.width;\n+    return {\n+        width,\n+        height\n+    };\n+}\n+function determineYAlign(chart, size) {\n+    const { y , height  } = size;\n+    if (y \u003C height \u002F 2) {\n+        return 'top';\n+    } else if (y > chart.height - height \u002F 2) {\n+        return 'bottom';\n+    }\n+    return 'center';\n+}\n+function doesNotFitWithAlign(xAlign, chart, options, size) {\n+    const { x , width  } = size;\n+    const caret = options.caretSize + options.caretPadding;\n+    if (xAlign === 'left' && x + width + caret > chart.width) {\n+        return true;\n+    }\n+    if (xAlign === 'right' && x - width - caret \u003C 0) {\n+        return true;\n+    }\n+}\n+function determineXAlign(chart, options, size, yAlign) {\n+    const { x , width  } = size;\n+    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n+    let xAlign = 'center';\n+    if (yAlign === 'center') {\n+        xAlign = x \u003C= (left + right) \u002F 2 ? 'left' : 'right';\n+    } else if (x \u003C= width \u002F 2) {\n+        xAlign = 'left';\n+    } else if (x >= chartWidth - width \u002F 2) {\n+        xAlign = 'right';\n+    }\n+    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n+        xAlign = 'center';\n+    }\n+    return xAlign;\n+}\n+ function determineAlignment(chart, options, size) {\n+    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n+    return {\n+        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n+        yAlign\n+    };\n+}\n+function alignX(size, xAlign) {\n+    let { x , width  } = size;\n+    if (xAlign === 'right') {\n+        x -= width;\n+    } else if (xAlign === 'center') {\n+        x -= width \u002F 2;\n+    }\n+    return x;\n+}\n+function alignY(size, yAlign, paddingAndSize) {\n+    let { y , height  } = size;\n+    if (yAlign === 'top') {\n+        y += paddingAndSize;\n+    } else if (yAlign === 'bottom') {\n+        y -= height + paddingAndSize;\n+    } else {\n+        y -= height \u002F 2;\n+    }\n+    return y;\n+}\n+ function getBackgroundPoint(options, size, alignment, chart) {\n+    const { caretSize , caretPadding , cornerRadius  } = options;\n+    const { xAlign , yAlign  } = alignment;\n+    const paddingAndSize = caretSize + caretPadding;\n+    const { topLeft , topRight , bottomLeft , bottomRight  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(cornerRadius);\n+    let x = alignX(size, xAlign);\n+    const y = alignY(size, yAlign, paddingAndSize);\n+    if (yAlign === 'center') {\n+        if (xAlign === 'left') {\n+            x += paddingAndSize;\n+        } else if (xAlign === 'right') {\n+            x -= paddingAndSize;\n+        }\n+    } else if (xAlign === 'left') {\n+        x -= Math.max(topLeft, bottomLeft) + caretSize;\n+    } else if (xAlign === 'right') {\n+        x += Math.max(topRight, bottomRight) + caretSize;\n+    }\n+    return {\n+        x: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(x, 0, chart.width - size.width),\n+        y: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(y, 0, chart.height - size.height)\n+    };\n+}\n+function getAlignedX(tooltip, align, options) {\n+    const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(options.padding);\n+    return align === 'center' ? tooltip.x + tooltip.width \u002F 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n+}\n+ function getBeforeAfterBodyLines(callback) {\n+    return pushOrConcat([], splitNewlines(callback));\n+}\n+function createTooltipContext(parent, tooltip, tooltipItems) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        tooltip,\n+        tooltipItems,\n+        type: 'tooltip'\n+    });\n+}\n+function overrideCallbacks(callbacks, context) {\n+    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n+    return override ? callbacks.override(override) : callbacks;\n+}\n+const defaultCallbacks = {\n+    beforeTitle: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    title (tooltipItems) {\n+        if (tooltipItems.length > 0) {\n+            const item = tooltipItems[0];\n+            const labels = item.chart.data.labels;\n+            const labelCount = labels ? labels.length : 0;\n+            if (this && this.options && this.options.mode === 'dataset') {\n+                return item.dataset.label || '';\n+            } else if (item.label) {\n+                return item.label;\n+            } else if (labelCount > 0 && item.dataIndex \u003C labelCount) {\n+                return labels[item.dataIndex];\n+            }\n+        }\n+        return '';\n+    },\n+    afterTitle: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    beforeBody: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    beforeLabel: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    label (tooltipItem) {\n+        if (this && this.options && this.options.mode === 'dataset') {\n+            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n+        }\n+        let label = tooltipItem.dataset.label || '';\n+        if (label) {\n+            label += ': ';\n+        }\n+        const value = tooltipItem.formattedValue;\n+        if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {\n+            label += value;\n+        }\n+        return label;\n+    },\n+    labelColor (tooltipItem) {\n+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n+        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n+        return {\n+            borderColor: options.borderColor,\n+            backgroundColor: options.backgroundColor,\n+            borderWidth: options.borderWidth,\n+            borderDash: options.borderDash,\n+            borderDashOffset: options.borderDashOffset,\n+            borderRadius: 0\n+        };\n+    },\n+    labelTextColor () {\n+        return this.options.bodyColor;\n+    },\n+    labelPointStyle (tooltipItem) {\n+        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n+        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n+        return {\n+            pointStyle: options.pointStyle,\n+            rotation: options.rotation\n+        };\n+    },\n+    afterLabel: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    afterBody: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    beforeFooter: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    footer: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG,\n+    afterFooter: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aG\n+};\n+ function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n+    const result = callbacks[name].call(ctx, arg);\n+    if (typeof result === 'undefined') {\n+        return defaultCallbacks[name].call(ctx, arg);\n+    }\n+    return result;\n+}\n+class Tooltip extends Element {\n+ static positioners = positioners;\n+    constructor(config){\n+        super();\n+        this.opacity = 0;\n+        this._active = [];\n+        this._eventPosition = undefined;\n+        this._size = undefined;\n+        this._cachedAnimations = undefined;\n+        this._tooltipItems = [];\n+        this.$animations = undefined;\n+        this.$context = undefined;\n+        this.chart = config.chart;\n+        this.options = config.options;\n+        this.dataPoints = undefined;\n+        this.title = undefined;\n+        this.beforeBody = undefined;\n+        this.body = undefined;\n+        this.afterBody = undefined;\n+        this.footer = undefined;\n+        this.xAlign = undefined;\n+        this.yAlign = undefined;\n+        this.x = undefined;\n+        this.y = undefined;\n+        this.height = undefined;\n+        this.width = undefined;\n+        this.caretX = undefined;\n+        this.caretY = undefined;\n+        this.labelColors = undefined;\n+        this.labelPointStyles = undefined;\n+        this.labelTextColors = undefined;\n+    }\n+    initialize(options) {\n+        this.options = options;\n+        this._cachedAnimations = undefined;\n+        this.$context = undefined;\n+    }\n+ _resolveAnimations() {\n+        const cached = this._cachedAnimations;\n+        if (cached) {\n+            return cached;\n+        }\n+        const chart = this.chart;\n+        const options = this.options.setContext(this.getContext());\n+        const opts = options.enabled && chart.options.animation && options.animations;\n+        const animations = new Animations(this.chart, opts);\n+        if (opts._cacheable) {\n+            this._cachedAnimations = Object.freeze(animations);\n+        }\n+        return animations;\n+    }\n+ getContext() {\n+        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n+    }\n+    getTitle(context, options) {\n+        const { callbacks  } = options;\n+        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n+        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n+        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n+        let lines = [];\n+        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n+        lines = pushOrConcat(lines, splitNewlines(title));\n+        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n+        return lines;\n+    }\n+    getBeforeBody(tooltipItems, options) {\n+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n+    }\n+    getBody(tooltipItems, options) {\n+        const { callbacks  } = options;\n+        const bodyItems = [];\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(tooltipItems, (context)=>{\n+            const bodyItem = {\n+                before: [],\n+                lines: [],\n+                after: []\n+            };\n+            const scoped = overrideCallbacks(callbacks, context);\n+            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n+            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n+            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n+            bodyItems.push(bodyItem);\n+        });\n+        return bodyItems;\n+    }\n+    getAfterBody(tooltipItems, options) {\n+        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n+    }\n+    getFooter(tooltipItems, options) {\n+        const { callbacks  } = options;\n+        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n+        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n+        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n+        let lines = [];\n+        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n+        lines = pushOrConcat(lines, splitNewlines(footer));\n+        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n+        return lines;\n+    }\n+ _createItems(options) {\n+        const active = this._active;\n+        const data = this.chart.data;\n+        const labelColors = [];\n+        const labelPointStyles = [];\n+        const labelTextColors = [];\n+        let tooltipItems = [];\n+        let i, len;\n+        for(i = 0, len = active.length; i \u003C len; ++i){\n+            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n+        }\n+        if (options.filter) {\n+            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n+        }\n+        if (options.itemSort) {\n+            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n+        }\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(tooltipItems, (context)=>{\n+            const scoped = overrideCallbacks(options.callbacks, context);\n+            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n+            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n+            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n+        });\n+        this.labelColors = labelColors;\n+        this.labelPointStyles = labelPointStyles;\n+        this.labelTextColors = labelTextColors;\n+        this.dataPoints = tooltipItems;\n+        return tooltipItems;\n+    }\n+    update(changed, replay) {\n+        const options = this.options.setContext(this.getContext());\n+        const active = this._active;\n+        let properties;\n+        let tooltipItems = [];\n+        if (!active.length) {\n+            if (this.opacity !== 0) {\n+                properties = {\n+                    opacity: 0\n+                };\n+            }\n+        } else {\n+            const position = positioners[options.position].call(this, active, this._eventPosition);\n+            tooltipItems = this._createItems(options);\n+            this.title = this.getTitle(tooltipItems, options);\n+            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n+            this.body = this.getBody(tooltipItems, options);\n+            this.afterBody = this.getAfterBody(tooltipItems, options);\n+            this.footer = this.getFooter(tooltipItems, options);\n+            const size = this._size = getTooltipSize(this, options);\n+            const positionAndSize = Object.assign({}, position, size);\n+            const alignment = determineAlignment(this.chart, options, positionAndSize);\n+            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n+            this.xAlign = alignment.xAlign;\n+            this.yAlign = alignment.yAlign;\n+            properties = {\n+                opacity: 1,\n+                x: backgroundPoint.x,\n+                y: backgroundPoint.y,\n+                width: size.width,\n+                height: size.height,\n+                caretX: position.x,\n+                caretY: position.y\n+            };\n+        }\n+        this._tooltipItems = tooltipItems;\n+        this.$context = undefined;\n+        if (properties) {\n+            this._resolveAnimations().update(this, properties);\n+        }\n+        if (changed && options.external) {\n+            options.external.call(this, {\n+                chart: this.chart,\n+                tooltip: this,\n+                replay\n+            });\n+        }\n+    }\n+    drawCaret(tooltipPoint, ctx, size, options) {\n+        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n+        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n+        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n+        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n+    }\n+    getCaretPosition(tooltipPoint, size, options) {\n+        const { xAlign , yAlign  } = this;\n+        const { caretSize , cornerRadius  } = options;\n+        const { topLeft , topRight , bottomLeft , bottomRight  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(cornerRadius);\n+        const { x: ptX , y: ptY  } = tooltipPoint;\n+        const { width , height  } = size;\n+        let x1, x2, x3, y1, y2, y3;\n+        if (yAlign === 'center') {\n+            y2 = ptY + height \u002F 2;\n+            if (xAlign === 'left') {\n+                x1 = ptX;\n+                x2 = x1 - caretSize;\n+                y1 = y2 + caretSize;\n+                y3 = y2 - caretSize;\n+            } else {\n+                x1 = ptX + width;\n+                x2 = x1 + caretSize;\n+                y1 = y2 - caretSize;\n+                y3 = y2 + caretSize;\n+            }\n+            x3 = x1;\n+        } else {\n+            if (xAlign === 'left') {\n+                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n+            } else if (xAlign === 'right') {\n+                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n+            } else {\n+                x2 = this.caretX;\n+            }\n+            if (yAlign === 'top') {\n+                y1 = ptY;\n+                y2 = y1 - caretSize;\n+                x1 = x2 - caretSize;\n+                x3 = x2 + caretSize;\n+            } else {\n+                y1 = ptY + height;\n+                y2 = y1 + caretSize;\n+                x1 = x2 + caretSize;\n+                x3 = x2 - caretSize;\n+            }\n+            y3 = y1;\n+        }\n+        return {\n+            x1,\n+            x2,\n+            x3,\n+            y1,\n+            y2,\n+            y3\n+        };\n+    }\n+    drawTitle(pt, ctx, options) {\n+        const title = this.title;\n+        const length = title.length;\n+        let titleFont, titleSpacing, i;\n+        if (length) {\n+            const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);\n+            pt.x = getAlignedX(this, options.titleAlign, options);\n+            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n+            ctx.textBaseline = 'middle';\n+            titleFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.titleFont);\n+            titleSpacing = options.titleSpacing;\n+            ctx.fillStyle = options.titleColor;\n+            ctx.font = titleFont.string;\n+            for(i = 0; i \u003C length; ++i){\n+                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight \u002F 2);\n+                pt.y += titleFont.lineHeight + titleSpacing;\n+                if (i + 1 === length) {\n+                    pt.y += options.titleMarginBottom - titleSpacing;\n+                }\n+            }\n+        }\n+    }\n+ _drawColorBox(ctx, pt, i, rtlHelper, options) {\n+        const labelColor = this.labelColors[i];\n+        const labelPointStyle = this.labelPointStyles[i];\n+        const { boxHeight , boxWidth  } = options;\n+        const bodyFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.bodyFont);\n+        const colorX = getAlignedX(this, 'left', options);\n+        const rtlColorX = rtlHelper.x(colorX);\n+        const yOffSet = boxHeight \u003C bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) \u002F 2 : 0;\n+        const colorY = pt.y + yOffSet;\n+        if (options.usePointStyle) {\n+            const drawOptions = {\n+                radius: Math.min(boxWidth, boxHeight) \u002F 2,\n+                pointStyle: labelPointStyle.pointStyle,\n+                rotation: labelPointStyle.rotation,\n+                borderWidth: 1\n+            };\n+            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth \u002F 2;\n+            const centerY = colorY + boxHeight \u002F 2;\n+            ctx.strokeStyle = options.multiKeyBackground;\n+            ctx.fillStyle = options.multiKeyBackground;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, drawOptions, centerX, centerY);\n+            ctx.strokeStyle = labelColor.borderColor;\n+            ctx.fillStyle = labelColor.backgroundColor;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, drawOptions, centerX, centerY);\n+        } else {\n+            ctx.lineWidth = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.i)(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n+            ctx.strokeStyle = labelColor.borderColor;\n+            ctx.setLineDash(labelColor.borderDash || []);\n+            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n+            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n+            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n+            const borderRadius = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(labelColor.borderRadius);\n+            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n+                ctx.beginPath();\n+                ctx.fillStyle = options.multiKeyBackground;\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aw)(ctx, {\n+                    x: outerX,\n+                    y: colorY,\n+                    w: boxWidth,\n+                    h: boxHeight,\n+                    radius: borderRadius\n+                });\n+                ctx.fill();\n+                ctx.stroke();\n+                ctx.fillStyle = labelColor.backgroundColor;\n+                ctx.beginPath();\n+                (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aw)(ctx, {\n+                    x: innerX,\n+                    y: colorY + 1,\n+                    w: boxWidth - 2,\n+                    h: boxHeight - 2,\n+                    radius: borderRadius\n+                });\n+                ctx.fill();\n+            } else {\n+                ctx.fillStyle = options.multiKeyBackground;\n+                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n+                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n+                ctx.fillStyle = labelColor.backgroundColor;\n+                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n+            }\n+        }\n+        ctx.fillStyle = this.labelTextColors[i];\n+    }\n+    drawBody(pt, ctx, options) {\n+        const { body  } = this;\n+        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n+        const bodyFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.bodyFont);\n+        let bodyLineHeight = bodyFont.lineHeight;\n+        let xLinePadding = 0;\n+        const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);\n+        const fillLineOfText = function(line) {\n+            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight \u002F 2);\n+            pt.y += bodyLineHeight + bodySpacing;\n+        };\n+        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n+        let bodyItem, textColor, lines, i, j, ilen, jlen;\n+        ctx.textAlign = bodyAlign;\n+        ctx.textBaseline = 'middle';\n+        ctx.font = bodyFont.string;\n+        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n+        ctx.fillStyle = options.bodyColor;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.beforeBody, fillLineOfText);\n+        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth \u002F 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n+        for(i = 0, ilen = body.length; i \u003C ilen; ++i){\n+            bodyItem = body[i];\n+            textColor = this.labelTextColors[i];\n+            ctx.fillStyle = textColor;\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(bodyItem.before, fillLineOfText);\n+            lines = bodyItem.lines;\n+            if (displayColors && lines.length) {\n+                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n+                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n+            }\n+            for(j = 0, jlen = lines.length; j \u003C jlen; ++j){\n+                fillLineOfText(lines[j]);\n+                bodyLineHeight = bodyFont.lineHeight;\n+            }\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(bodyItem.after, fillLineOfText);\n+        }\n+        xLinePadding = 0;\n+        bodyLineHeight = bodyFont.lineHeight;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.F)(this.afterBody, fillLineOfText);\n+        pt.y -= bodySpacing;\n+    }\n+    drawFooter(pt, ctx, options) {\n+        const footer = this.footer;\n+        const length = footer.length;\n+        let footerFont, i;\n+        if (length) {\n+            const rtlHelper = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);\n+            pt.x = getAlignedX(this, options.footerAlign, options);\n+            pt.y += options.footerMarginTop;\n+            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n+            ctx.textBaseline = 'middle';\n+            footerFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(options.footerFont);\n+            ctx.fillStyle = options.footerColor;\n+            ctx.font = footerFont.string;\n+            for(i = 0; i \u003C length; ++i){\n+                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight \u002F 2);\n+                pt.y += footerFont.lineHeight + options.footerSpacing;\n+            }\n+        }\n+    }\n+    drawBackground(pt, ctx, tooltipSize, options) {\n+        const { xAlign , yAlign  } = this;\n+        const { x , y  } = pt;\n+        const { width , height  } = tooltipSize;\n+        const { topLeft , topRight , bottomLeft , bottomRight  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(options.cornerRadius);\n+        ctx.fillStyle = options.backgroundColor;\n+        ctx.strokeStyle = options.borderColor;\n+        ctx.lineWidth = options.borderWidth;\n+        ctx.beginPath();\n+        ctx.moveTo(x + topLeft, y);\n+        if (yAlign === 'top') {\n+            this.drawCaret(pt, ctx, tooltipSize, options);\n+        }\n+        ctx.lineTo(x + width - topRight, y);\n+        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n+        if (yAlign === 'center' && xAlign === 'right') {\n+            this.drawCaret(pt, ctx, tooltipSize, options);\n+        }\n+        ctx.lineTo(x + width, y + height - bottomRight);\n+        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n+        if (yAlign === 'bottom') {\n+            this.drawCaret(pt, ctx, tooltipSize, options);\n+        }\n+        ctx.lineTo(x + bottomLeft, y + height);\n+        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n+        if (yAlign === 'center' && xAlign === 'left') {\n+            this.drawCaret(pt, ctx, tooltipSize, options);\n+        }\n+        ctx.lineTo(x, y + topLeft);\n+        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n+        ctx.closePath();\n+        ctx.fill();\n+        if (options.borderWidth > 0) {\n+            ctx.stroke();\n+        }\n+    }\n+ _updateAnimationTarget(options) {\n+        const chart = this.chart;\n+        const anims = this.$animations;\n+        const animX = anims && anims.x;\n+        const animY = anims && anims.y;\n+        if (animX || animY) {\n+            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n+            if (!position) {\n+                return;\n+            }\n+            const size = this._size = getTooltipSize(this, options);\n+            const positionAndSize = Object.assign({}, position, this._size);\n+            const alignment = determineAlignment(chart, options, positionAndSize);\n+            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n+            if (animX._to !== point.x || animY._to !== point.y) {\n+                this.xAlign = alignment.xAlign;\n+                this.yAlign = alignment.yAlign;\n+                this.width = size.width;\n+                this.height = size.height;\n+                this.caretX = position.x;\n+                this.caretY = position.y;\n+                this._resolveAnimations().update(this, point);\n+            }\n+        }\n+    }\n+ _willRender() {\n+        return !!this.opacity;\n+    }\n+    draw(ctx) {\n+        const options = this.options.setContext(this.getContext());\n+        let opacity = this.opacity;\n+        if (!opacity) {\n+            return;\n+        }\n+        this._updateAnimationTarget(options);\n+        const tooltipSize = {\n+            width: this.width,\n+            height: this.height\n+        };\n+        const pt = {\n+            x: this.x,\n+            y: this.y\n+        };\n+        opacity = Math.abs(opacity) \u003C 1e-3 ? 0 : opacity;\n+        const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(options.padding);\n+        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n+        if (options.enabled && hasTooltipContent) {\n+            ctx.save();\n+            ctx.globalAlpha = opacity;\n+            this.drawBackground(pt, ctx, tooltipSize, options);\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aB)(ctx, options.textDirection);\n+            pt.y += padding.top;\n+            this.drawTitle(pt, ctx, options);\n+            this.drawBody(pt, ctx, options);\n+            this.drawFooter(pt, ctx, options);\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aD)(ctx, options.textDirection);\n+            ctx.restore();\n+        }\n+    }\n+ getActiveElements() {\n+        return this._active || [];\n+    }\n+ setActiveElements(activeElements, eventPosition) {\n+        const lastActive = this._active;\n+        const active = activeElements.map(({ datasetIndex , index  })=>{\n+            const meta = this.chart.getDatasetMeta(datasetIndex);\n+            if (!meta) {\n+                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n+            }\n+            return {\n+                datasetIndex,\n+                element: meta.data[index],\n+                index\n+            };\n+        });\n+        const changed = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ai)(lastActive, active);\n+        const positionChanged = this._positionChanged(active, eventPosition);\n+        if (changed || positionChanged) {\n+            this._active = active;\n+            this._eventPosition = eventPosition;\n+            this._ignoreReplayEvents = true;\n+            this.update(true);\n+        }\n+    }\n+ handleEvent(e, replay, inChartArea = true) {\n+        if (replay && this._ignoreReplayEvents) {\n+            return false;\n+        }\n+        this._ignoreReplayEvents = false;\n+        const options = this.options;\n+        const lastActive = this._active || [];\n+        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n+        const positionChanged = this._positionChanged(active, e);\n+        const changed = replay || !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive) || positionChanged;\n+        if (changed) {\n+            this._active = active;\n+            if (options.enabled || options.external) {\n+                this._eventPosition = {\n+                    x: e.x,\n+                    y: e.y\n+                };\n+                this.update(true, replay);\n+            }\n+        }\n+        return changed;\n+    }\n+ _getActiveElements(e, lastActive, replay, inChartArea) {\n+        const options = this.options;\n+        if (e.type === 'mouseout') {\n+            return [];\n+        }\n+        if (!inChartArea) {\n+            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n+        }\n+        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n+        if (options.reverse) {\n+            active.reverse();\n+        }\n+        return active;\n+    }\n+ _positionChanged(active, e) {\n+        const { caretX , caretY , options  } = this;\n+        const position = positioners[options.position].call(this, active, e);\n+        return position !== false && (caretX !== position.x || caretY !== position.y);\n+    }\n+}\n+var plugin_tooltip = {\n+    id: 'tooltip',\n+    _element: Tooltip,\n+    positioners,\n+    afterInit (chart, _args, options) {\n+        if (options) {\n+            chart.tooltip = new Tooltip({\n+                chart,\n+                options\n+            });\n+        }\n+    },\n+    beforeUpdate (chart, _args, options) {\n+        if (chart.tooltip) {\n+            chart.tooltip.initialize(options);\n+        }\n+    },\n+    reset (chart, _args, options) {\n+        if (chart.tooltip) {\n+            chart.tooltip.initialize(options);\n+        }\n+    },\n+    afterDraw (chart) {\n+        const tooltip = chart.tooltip;\n+        if (tooltip && tooltip._willRender()) {\n+            const args = {\n+                tooltip\n+            };\n+            if (chart.notifyPlugins('beforeTooltipDraw', {\n+                ...args,\n+                cancelable: true\n+            }) === false) {\n+                return;\n+            }\n+            tooltip.draw(chart.ctx);\n+            chart.notifyPlugins('afterTooltipDraw', args);\n+        }\n+    },\n+    afterEvent (chart, args) {\n+        if (chart.tooltip) {\n+            const useFinalPosition = args.replay;\n+            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n+                args.changed = true;\n+            }\n+        }\n+    },\n+    defaults: {\n+        enabled: true,\n+        external: null,\n+        position: 'average',\n+        backgroundColor: 'rgba(0,0,0,0.8)',\n+        titleColor: '#fff',\n+        titleFont: {\n+            weight: 'bold'\n+        },\n+        titleSpacing: 2,\n+        titleMarginBottom: 6,\n+        titleAlign: 'left',\n+        bodyColor: '#fff',\n+        bodySpacing: 2,\n+        bodyFont: {},\n+        bodyAlign: 'left',\n+        footerColor: '#fff',\n+        footerSpacing: 2,\n+        footerMarginTop: 6,\n+        footerFont: {\n+            weight: 'bold'\n+        },\n+        footerAlign: 'left',\n+        padding: 6,\n+        caretPadding: 2,\n+        caretSize: 5,\n+        cornerRadius: 6,\n+        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n+        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n+        multiKeyBackground: '#fff',\n+        displayColors: true,\n+        boxPadding: 0,\n+        borderColor: 'rgba(0,0,0,0)',\n+        borderWidth: 0,\n+        animation: {\n+            duration: 400,\n+            easing: 'easeOutQuart'\n+        },\n+        animations: {\n+            numbers: {\n+                type: 'number',\n+                properties: [\n+                    'x',\n+                    'y',\n+                    'width',\n+                    'height',\n+                    'caretX',\n+                    'caretY'\n+                ]\n+            },\n+            opacity: {\n+                easing: 'linear',\n+                duration: 200\n+            }\n+        },\n+        callbacks: defaultCallbacks\n+    },\n+    defaultRoutes: {\n+        bodyFont: 'font',\n+        footerFont: 'font',\n+        titleFont: 'font'\n+    },\n+    descriptors: {\n+        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n+        _indexable: false,\n+        callbacks: {\n+            _scriptable: false,\n+            _indexable: false\n+        },\n+        animation: {\n+            _fallback: false\n+        },\n+        animations: {\n+            _fallback: 'animation'\n+        }\n+    },\n+    additionalOptionScopes: [\n+        'interaction'\n+    ]\n+};\n+\n+var plugins = \u002F*#__PURE__*\u002FObject.freeze({\n+__proto__: null,\n+Colors: plugin_colors,\n+Decimation: plugin_decimation,\n+Filler: index,\n+Legend: plugin_legend,\n+SubTitle: plugin_subtitle,\n+Title: plugin_title,\n+Tooltip: plugin_tooltip\n+});\n+\n+const addIfString = (labels, raw, index, addedLabels)=>{\n+    if (typeof raw === 'string') {\n+        index = labels.push(raw) - 1;\n+        addedLabels.unshift({\n+            index,\n+            label: raw\n+        });\n+    } else if (isNaN(raw)) {\n+        index = null;\n+    }\n+    return index;\n+};\n+function findOrAddLabel(labels, raw, index, addedLabels) {\n+    const first = labels.indexOf(raw);\n+    if (first === -1) {\n+        return addIfString(labels, raw, index, addedLabels);\n+    }\n+    const last = labels.lastIndexOf(raw);\n+    return first !== last ? index : first;\n+}\n+const validIndex = (index, max)=>index === null ? null : (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(Math.round(index), 0, max);\n+function _getLabelForValue(value) {\n+    const labels = this.getLabels();\n+    if (value >= 0 && value \u003C labels.length) {\n+        return labels[value];\n+    }\n+    return value;\n+}\n+class CategoryScale extends Scale {\n+    static id = 'category';\n+ static defaults = {\n+        ticks: {\n+            callback: _getLabelForValue\n+        }\n+    };\n+    constructor(cfg){\n+        super(cfg);\n+         this._startValue = undefined;\n+        this._valueRange = 0;\n+        this._addedLabels = [];\n+    }\n+    init(scaleOptions) {\n+        const added = this._addedLabels;\n+        if (added.length) {\n+            const labels = this.getLabels();\n+            for (const { index , label  } of added){\n+                if (labels[index] === label) {\n+                    labels.splice(index, 1);\n+                }\n+            }\n+            this._addedLabels = [];\n+        }\n+        super.init(scaleOptions);\n+    }\n+    parse(raw, index) {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(raw)) {\n+            return null;\n+        }\n+        const labels = this.getLabels();\n+        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(index, raw), this._addedLabels);\n+        return validIndex(index, labels.length - 1);\n+    }\n+    determineDataLimits() {\n+        const { minDefined , maxDefined  } = this.getUserBounds();\n+        let { min , max  } = this.getMinMax(true);\n+        if (this.options.bounds === 'ticks') {\n+            if (!minDefined) {\n+                min = 0;\n+            }\n+            if (!maxDefined) {\n+                max = this.getLabels().length - 1;\n+            }\n+        }\n+        this.min = min;\n+        this.max = max;\n+    }\n+    buildTicks() {\n+        const min = this.min;\n+        const max = this.max;\n+        const offset = this.options.offset;\n+        const ticks = [];\n+        let labels = this.getLabels();\n+        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n+        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n+        this._startValue = this.min - (offset ? 0.5 : 0);\n+        for(let value = min; value \u003C= max; value++){\n+            ticks.push({\n+                value\n+            });\n+        }\n+        return ticks;\n+    }\n+    getLabelForValue(value) {\n+        return _getLabelForValue.call(this, value);\n+    }\n+ configure() {\n+        super.configure();\n+        if (!this.isHorizontal()) {\n+            this._reversePixels = !this._reversePixels;\n+        }\n+    }\n+    getPixelForValue(value) {\n+        if (typeof value !== 'number') {\n+            value = this.parse(value);\n+        }\n+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) \u002F this._valueRange);\n+    }\n+    getPixelForTick(index) {\n+        const ticks = this.ticks;\n+        if (index \u003C 0 || index > ticks.length - 1) {\n+            return null;\n+        }\n+        return this.getPixelForValue(ticks[index].value);\n+    }\n+    getValueForPixel(pixel) {\n+        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n+    }\n+    getBasePixel() {\n+        return this.bottom;\n+    }\n+}\n+\n+function generateTicks$1(generationOptions, dataRange) {\n+    const ticks = [];\n+    const MIN_SPACING = 1e-14;\n+    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n+    const unit = step || 1;\n+    const maxSpaces = maxTicks - 1;\n+    const { min: rmin , max: rmax  } = dataRange;\n+    const minDefined = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(min);\n+    const maxDefined = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(max);\n+    const countDefined = !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(count);\n+    const minSpacing = (rmax - rmin) \u002F (maxDigits + 1);\n+    let spacing = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aI)((rmax - rmin) \u002F maxSpaces \u002F unit) * unit;\n+    let factor, niceMin, niceMax, numSpaces;\n+    if (spacing \u003C MIN_SPACING && !minDefined && !maxDefined) {\n+        return [\n+            {\n+                value: rmin\n+            },\n+            {\n+                value: rmax\n+            }\n+        ];\n+    }\n+    numSpaces = Math.ceil(rmax \u002F spacing) - Math.floor(rmin \u002F spacing);\n+    if (numSpaces > maxSpaces) {\n+        spacing = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aI)(numSpaces * spacing \u002F maxSpaces \u002F unit) * unit;\n+    }\n+    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(precision)) {\n+        factor = Math.pow(10, precision);\n+        spacing = Math.ceil(spacing * factor) \u002F factor;\n+    }\n+    if (bounds === 'ticks') {\n+        niceMin = Math.floor(rmin \u002F spacing) * spacing;\n+        niceMax = Math.ceil(rmax \u002F spacing) * spacing;\n+    } else {\n+        niceMin = rmin;\n+        niceMax = rmax;\n+    }\n+    if (minDefined && maxDefined && step && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aJ)((max - min) \u002F step, spacing \u002F 1000)) {\n+        numSpaces = Math.round(Math.min((max - min) \u002F spacing, maxTicks));\n+        spacing = (max - min) \u002F numSpaces;\n+        niceMin = min;\n+        niceMax = max;\n+    } else if (countDefined) {\n+        niceMin = minDefined ? min : niceMin;\n+        niceMax = maxDefined ? max : niceMax;\n+        numSpaces = count - 1;\n+        spacing = (niceMax - niceMin) \u002F numSpaces;\n+    } else {\n+        numSpaces = (niceMax - niceMin) \u002F spacing;\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aK)(numSpaces, Math.round(numSpaces), spacing \u002F 1000)) {\n+            numSpaces = Math.round(numSpaces);\n+        } else {\n+            numSpaces = Math.ceil(numSpaces);\n+        }\n+    }\n+    const decimalPlaces = Math.max((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aL)(spacing), (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aL)(niceMin));\n+    factor = Math.pow(10, (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(precision) ? decimalPlaces : precision);\n+    niceMin = Math.round(niceMin * factor) \u002F factor;\n+    niceMax = Math.round(niceMax * factor) \u002F factor;\n+    let j = 0;\n+    if (minDefined) {\n+        if (includeBounds && niceMin !== min) {\n+            ticks.push({\n+                value: min\n+            });\n+            if (niceMin \u003C min) {\n+                j++;\n+            }\n+            if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aK)(Math.round((niceMin + j * spacing) * factor) \u002F factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n+                j++;\n+            }\n+        } else if (niceMin \u003C min) {\n+            j++;\n+        }\n+    }\n+    for(; j \u003C numSpaces; ++j){\n+        const tickValue = Math.round((niceMin + j * spacing) * factor) \u002F factor;\n+        if (maxDefined && tickValue > max) {\n+            break;\n+        }\n+        ticks.push({\n+            value: tickValue\n+        });\n+    }\n+    if (maxDefined && includeBounds && niceMax !== max) {\n+        if (ticks.length && (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aK)(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n+            ticks[ticks.length - 1].value = max;\n+        } else {\n+            ticks.push({\n+                value: max\n+            });\n+        }\n+    } else if (!maxDefined || niceMax === max) {\n+        ticks.push({\n+            value: niceMax\n+        });\n+    }\n+    return ticks;\n+}\n+function relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n+    const rad = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(minRotation);\n+    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n+    const length = 0.75 * minSpacing * ('' + value).length;\n+    return Math.min(minSpacing \u002F ratio, length);\n+}\n+class LinearScaleBase extends Scale {\n+    constructor(cfg){\n+        super(cfg);\n+         this.start = undefined;\n+         this.end = undefined;\n+         this._startValue = undefined;\n+         this._endValue = undefined;\n+        this._valueRange = 0;\n+    }\n+    parse(raw, index) {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(raw)) {\n+            return null;\n+        }\n+        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n+            return null;\n+        }\n+        return +raw;\n+    }\n+    handleTickRangeOptions() {\n+        const { beginAtZero  } = this.options;\n+        const { minDefined , maxDefined  } = this.getUserBounds();\n+        let { min , max  } = this;\n+        const setMin = (v)=>min = minDefined ? min : v;\n+        const setMax = (v)=>max = maxDefined ? max : v;\n+        if (beginAtZero) {\n+            const minSign = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(min);\n+            const maxSign = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.s)(max);\n+            if (minSign \u003C 0 && maxSign \u003C 0) {\n+                setMax(0);\n+            } else if (minSign > 0 && maxSign > 0) {\n+                setMin(0);\n+            }\n+        }\n+        if (min === max) {\n+            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n+            setMax(max + offset);\n+            if (!beginAtZero) {\n+                setMin(min - offset);\n+            }\n+        }\n+        this.min = min;\n+        this.max = max;\n+    }\n+    getTickLimit() {\n+        const tickOpts = this.options.ticks;\n+        let { maxTicksLimit , stepSize  } = tickOpts;\n+        let maxTicks;\n+        if (stepSize) {\n+            maxTicks = Math.ceil(this.max \u002F stepSize) - Math.floor(this.min \u002F stepSize) + 1;\n+            if (maxTicks > 1000) {\n+                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n+                maxTicks = 1000;\n+            }\n+        } else {\n+            maxTicks = this.computeTickLimit();\n+            maxTicksLimit = maxTicksLimit || 11;\n+        }\n+        if (maxTicksLimit) {\n+            maxTicks = Math.min(maxTicksLimit, maxTicks);\n+        }\n+        return maxTicks;\n+    }\n+ computeTickLimit() {\n+        return Number.POSITIVE_INFINITY;\n+    }\n+    buildTicks() {\n+        const opts = this.options;\n+        const tickOpts = opts.ticks;\n+        let maxTicks = this.getTickLimit();\n+        maxTicks = Math.max(2, maxTicks);\n+        const numericGeneratorOptions = {\n+            maxTicks,\n+            bounds: opts.bounds,\n+            min: opts.min,\n+            max: opts.max,\n+            precision: tickOpts.precision,\n+            step: tickOpts.stepSize,\n+            count: tickOpts.count,\n+            maxDigits: this._maxDigits(),\n+            horizontal: this.isHorizontal(),\n+            minRotation: tickOpts.minRotation || 0,\n+            includeBounds: tickOpts.includeBounds !== false\n+        };\n+        const dataRange = this._range || this;\n+        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n+        if (opts.bounds === 'ticks') {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aH)(ticks, this, 'value');\n+        }\n+        if (opts.reverse) {\n+            ticks.reverse();\n+            this.start = this.max;\n+            this.end = this.min;\n+        } else {\n+            this.start = this.min;\n+            this.end = this.max;\n+        }\n+        return ticks;\n+    }\n+ configure() {\n+        const ticks = this.ticks;\n+        let start = this.min;\n+        let end = this.max;\n+        super.configure();\n+        if (this.options.offset && ticks.length) {\n+            const offset = (end - start) \u002F Math.max(ticks.length - 1, 1) \u002F 2;\n+            start -= offset;\n+            end += offset;\n+        }\n+        this._startValue = start;\n+        this._endValue = end;\n+        this._valueRange = end - start;\n+    }\n+    getLabelForValue(value) {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.o)(value, this.chart.options.locale, this.options.ticks.format);\n+    }\n+}\n+\n+class LinearScale extends LinearScaleBase {\n+    static id = 'linear';\n+ static defaults = {\n+        ticks: {\n+            callback: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aM.formatters.numeric\n+        }\n+    };\n+    determineDataLimits() {\n+        const { min , max  } = this.getMinMax(true);\n+        this.min = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(min) ? min : 0;\n+        this.max = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(max) ? max : 1;\n+        this.handleTickRangeOptions();\n+    }\n+ computeTickLimit() {\n+        const horizontal = this.isHorizontal();\n+        const length = horizontal ? this.width : this.height;\n+        const minRotation = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.ticks.minRotation);\n+        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n+        const tickFont = this._resolveTickFontOptions(0);\n+        return Math.ceil(length \u002F Math.min(40, tickFont.lineHeight \u002F ratio));\n+    }\n+    getPixelForValue(value) {\n+        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) \u002F this._valueRange);\n+    }\n+    getValueForPixel(pixel) {\n+        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n+    }\n+}\n+\n+const log10Floor = (v)=>Math.floor((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aN)(v));\n+const changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\n+function isMajor(tickVal) {\n+    const remain = tickVal \u002F Math.pow(10, log10Floor(tickVal));\n+    return remain === 1;\n+}\n+function steps(min, max, rangeExp) {\n+    const rangeStep = Math.pow(10, rangeExp);\n+    const start = Math.floor(min \u002F rangeStep);\n+    const end = Math.ceil(max \u002F rangeStep);\n+    return end - start;\n+}\n+function startExp(min, max) {\n+    const range = max - min;\n+    let rangeExp = log10Floor(range);\n+    while(steps(min, max, rangeExp) > 10){\n+        rangeExp++;\n+    }\n+    while(steps(min, max, rangeExp) \u003C 10){\n+        rangeExp--;\n+    }\n+    return Math.min(rangeExp, log10Floor(min));\n+}\n+ function generateTicks(generationOptions, { min , max  }) {\n+    min = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(generationOptions.min, min);\n+    const ticks = [];\n+    const minExp = log10Floor(min);\n+    let exp = startExp(min, max);\n+    let precision = exp \u003C 0 ? Math.pow(10, Math.abs(exp)) : 1;\n+    const stepSize = Math.pow(10, exp);\n+    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n+    const start = Math.round((min - base) * precision) \u002F precision;\n+    const offset = Math.floor((min - base) \u002F stepSize \u002F 10) * stepSize * 10;\n+    let significand = Math.floor((start - offset) \u002F Math.pow(10, exp));\n+    let value = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) \u002F precision);\n+    while(value \u003C max){\n+        ticks.push({\n+            value,\n+            major: isMajor(value),\n+            significand\n+        });\n+        if (significand >= 10) {\n+            significand = significand \u003C 15 ? 15 : 20;\n+        } else {\n+            significand++;\n+        }\n+        if (significand >= 20) {\n+            exp++;\n+            significand = 2;\n+            precision = exp >= 0 ? 1 : precision;\n+        }\n+        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) \u002F precision;\n+    }\n+    const lastTick = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.O)(generationOptions.max, value);\n+    ticks.push({\n+        value: lastTick,\n+        major: isMajor(lastTick),\n+        significand\n+    });\n+    return ticks;\n+}\n+class LogarithmicScale extends Scale {\n+    static id = 'logarithmic';\n+ static defaults = {\n+        ticks: {\n+            callback: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aM.formatters.logarithmic,\n+            major: {\n+                enabled: true\n+            }\n+        }\n+    };\n+    constructor(cfg){\n+        super(cfg);\n+         this.start = undefined;\n+         this.end = undefined;\n+         this._startValue = undefined;\n+        this._valueRange = 0;\n+    }\n+    parse(raw, index) {\n+        const value = LinearScaleBase.prototype.parse.apply(this, [\n+            raw,\n+            index\n+        ]);\n+        if (value === 0) {\n+            this._zero = true;\n+            return undefined;\n+        }\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(value) && value > 0 ? value : null;\n+    }\n+    determineDataLimits() {\n+        const { min , max  } = this.getMinMax(true);\n+        this.min = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(min) ? Math.max(0, min) : null;\n+        this.max = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(max) ? Math.max(0, max) : null;\n+        if (this.options.beginAtZero) {\n+            this._zero = true;\n+        }\n+        if (this._zero && this.min !== this._suggestedMin && !(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(this._userMin)) {\n+            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n+        }\n+        this.handleTickRangeOptions();\n+    }\n+    handleTickRangeOptions() {\n+        const { minDefined , maxDefined  } = this.getUserBounds();\n+        let min = this.min;\n+        let max = this.max;\n+        const setMin = (v)=>min = minDefined ? min : v;\n+        const setMax = (v)=>max = maxDefined ? max : v;\n+        if (min === max) {\n+            if (min \u003C= 0) {\n+                setMin(1);\n+                setMax(10);\n+            } else {\n+                setMin(changeExponent(min, -1));\n+                setMax(changeExponent(max, +1));\n+            }\n+        }\n+        if (min \u003C= 0) {\n+            setMin(changeExponent(max, -1));\n+        }\n+        if (max \u003C= 0) {\n+            setMax(changeExponent(min, +1));\n+        }\n+        this.min = min;\n+        this.max = max;\n+    }\n+    buildTicks() {\n+        const opts = this.options;\n+        const generationOptions = {\n+            min: this._userMin,\n+            max: this._userMax\n+        };\n+        const ticks = generateTicks(generationOptions, this);\n+        if (opts.bounds === 'ticks') {\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aH)(ticks, this, 'value');\n+        }\n+        if (opts.reverse) {\n+            ticks.reverse();\n+            this.start = this.max;\n+            this.end = this.min;\n+        } else {\n+            this.start = this.min;\n+            this.end = this.max;\n+        }\n+        return ticks;\n+    }\n+ getLabelForValue(value) {\n+        return value === undefined ? '0' : (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.o)(value, this.chart.options.locale, this.options.ticks.format);\n+    }\n+ configure() {\n+        const start = this.min;\n+        super.configure();\n+        this._startValue = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aN)(start);\n+        this._valueRange = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aN)(this.max) - (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aN)(start);\n+    }\n+    getPixelForValue(value) {\n+        if (value === undefined || value === 0) {\n+            value = this.min;\n+        }\n+        if (value === null || isNaN(value)) {\n+            return NaN;\n+        }\n+        return this.getPixelForDecimal(value === this.min ? 0 : ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aN)(value) - this._startValue) \u002F this._valueRange);\n+    }\n+    getValueForPixel(pixel) {\n+        const decimal = this.getDecimalForPixel(pixel);\n+        return Math.pow(10, this._startValue + decimal * this._valueRange);\n+    }\n+}\n+\n+function getTickBackdropHeight(opts) {\n+    const tickOpts = opts.ticks;\n+    if (tickOpts.display && opts.display) {\n+        const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(tickOpts.backdropPadding);\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(tickOpts.font && tickOpts.font.size, _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.d.font.size) + padding.height;\n+    }\n+    return 0;\n+}\n+function measureLabelSize(ctx, font, label) {\n+    label = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.b)(label) ? label : [\n+        label\n+    ];\n+    return {\n+        w: (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aO)(ctx, font.string, label),\n+        h: label.length * font.lineHeight\n+    };\n+}\n+function determineLimits(angle, pos, size, min, max) {\n+    if (angle === min || angle === max) {\n+        return {\n+            start: pos - size \u002F 2,\n+            end: pos + size \u002F 2\n+        };\n+    } else if (angle \u003C min || angle > max) {\n+        return {\n+            start: pos - size,\n+            end: pos\n+        };\n+    }\n+    return {\n+        start: pos,\n+        end: pos + size\n+    };\n+}\n+ function fitWithPointLabels(scale) {\n+    const orig = {\n+        l: scale.left + scale._padding.left,\n+        r: scale.right - scale._padding.right,\n+        t: scale.top + scale._padding.top,\n+        b: scale.bottom - scale._padding.bottom\n+    };\n+    const limits = Object.assign({}, orig);\n+    const labelSizes = [];\n+    const padding = [];\n+    const valueCount = scale._pointLabels.length;\n+    const pointLabelOpts = scale.options.pointLabels;\n+    const additionalAngle = pointLabelOpts.centerPointLabels ? _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F valueCount : 0;\n+    for(let i = 0; i \u003C valueCount; i++){\n+        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n+        padding[i] = opts.padding;\n+        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n+        const plFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(opts.font);\n+        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n+        labelSizes[i] = textSize;\n+        const angleRadians = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(scale.getIndexAngle(i) + additionalAngle);\n+        const angle = Math.round((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.U)(angleRadians));\n+        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n+        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n+        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n+    }\n+    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n+    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n+}\n+function updateLimits(limits, orig, angle, hLimits, vLimits) {\n+    const sin = Math.abs(Math.sin(angle));\n+    const cos = Math.abs(Math.cos(angle));\n+    let x = 0;\n+    let y = 0;\n+    if (hLimits.start \u003C orig.l) {\n+        x = (orig.l - hLimits.start) \u002F sin;\n+        limits.l = Math.min(limits.l, orig.l - x);\n+    } else if (hLimits.end > orig.r) {\n+        x = (hLimits.end - orig.r) \u002F sin;\n+        limits.r = Math.max(limits.r, orig.r + x);\n+    }\n+    if (vLimits.start \u003C orig.t) {\n+        y = (orig.t - vLimits.start) \u002F cos;\n+        limits.t = Math.min(limits.t, orig.t - y);\n+    } else if (vLimits.end > orig.b) {\n+        y = (vLimits.end - orig.b) \u002F cos;\n+        limits.b = Math.max(limits.b, orig.b + y);\n+    }\n+}\n+function createPointLabelItem(scale, index, itemOpts) {\n+    const outerDistance = scale.drawingArea;\n+    const { extra , additionalAngle , padding , size  } = itemOpts;\n+    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n+    const angle = Math.round((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.U)((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(pointLabelPosition.angle + _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H)));\n+    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n+    const textAlign = getTextAlignForAngle(angle);\n+    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n+    return {\n+        visible: true,\n+        x: pointLabelPosition.x,\n+        y,\n+        textAlign,\n+        left,\n+        top: y,\n+        right: left + size.w,\n+        bottom: y + size.h\n+    };\n+}\n+function isNotOverlapped(item, area) {\n+    if (!area) {\n+        return true;\n+    }\n+    const { left , top , right , bottom  } = item;\n+    const apexesInArea = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)({\n+        x: left,\n+        y: top\n+    }, area) || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)({\n+        x: left,\n+        y: bottom\n+    }, area) || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)({\n+        x: right,\n+        y: top\n+    }, area) || (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.C)({\n+        x: right,\n+        y: bottom\n+    }, area);\n+    return !apexesInArea;\n+}\n+function buildPointLabelItems(scale, labelSizes, padding) {\n+    const items = [];\n+    const valueCount = scale._pointLabels.length;\n+    const opts = scale.options;\n+    const { centerPointLabels , display  } = opts.pointLabels;\n+    const itemOpts = {\n+        extra: getTickBackdropHeight(opts) \u002F 2,\n+        additionalAngle: centerPointLabels ? _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.P \u002F valueCount : 0\n+    };\n+    let area;\n+    for(let i = 0; i \u003C valueCount; i++){\n+        itemOpts.padding = padding[i];\n+        itemOpts.size = labelSizes[i];\n+        const item = createPointLabelItem(scale, i, itemOpts);\n+        items.push(item);\n+        if (display === 'auto') {\n+            item.visible = isNotOverlapped(item, area);\n+            if (item.visible) {\n+                area = item;\n+            }\n+        }\n+    }\n+    return items;\n+}\n+function getTextAlignForAngle(angle) {\n+    if (angle === 0 || angle === 180) {\n+        return 'center';\n+    } else if (angle \u003C 180) {\n+        return 'left';\n+    }\n+    return 'right';\n+}\n+function leftForTextAlign(x, w, align) {\n+    if (align === 'right') {\n+        x -= w;\n+    } else if (align === 'center') {\n+        x -= w \u002F 2;\n+    }\n+    return x;\n+}\n+function yForAngle(y, h, angle) {\n+    if (angle === 90 || angle === 270) {\n+        y -= h \u002F 2;\n+    } else if (angle > 270 || angle \u003C 90) {\n+        y -= h;\n+    }\n+    return y;\n+}\n+function drawPointLabelBox(ctx, opts, item) {\n+    const { left , top , right , bottom  } = item;\n+    const { backdropColor  } = opts;\n+    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(backdropColor)) {\n+        const borderRadius = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ay)(opts.borderRadius);\n+        const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(opts.backdropPadding);\n+        ctx.fillStyle = backdropColor;\n+        const backdropLeft = left - padding.left;\n+        const backdropTop = top - padding.top;\n+        const backdropWidth = right - left + padding.width;\n+        const backdropHeight = bottom - top + padding.height;\n+        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n+            ctx.beginPath();\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aw)(ctx, {\n+                x: backdropLeft,\n+                y: backdropTop,\n+                w: backdropWidth,\n+                h: backdropHeight,\n+                radius: borderRadius\n+            });\n+            ctx.fill();\n+        } else {\n+            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n+        }\n+    }\n+}\n+function drawPointLabels(scale, labelCount) {\n+    const { ctx , options: { pointLabels  }  } = scale;\n+    for(let i = labelCount - 1; i >= 0; i--){\n+        const item = scale._pointLabelItems[i];\n+        if (!item.visible) {\n+            continue;\n+        }\n+        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n+        drawPointLabelBox(ctx, optsAtIndex, item);\n+        const plFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(optsAtIndex.font);\n+        const { x , y , textAlign  } = item;\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, scale._pointLabels[i], x, y + plFont.lineHeight \u002F 2, plFont, {\n+            color: optsAtIndex.color,\n+            textAlign: textAlign,\n+            textBaseline: 'middle'\n+        });\n+    }\n+}\n+function pathRadiusLine(scale, radius, circular, labelCount) {\n+    const { ctx  } = scale;\n+    if (circular) {\n+        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T);\n+    } else {\n+        let pointPosition = scale.getPointPosition(0, radius);\n+        ctx.moveTo(pointPosition.x, pointPosition.y);\n+        for(let i = 1; i \u003C labelCount; i++){\n+            pointPosition = scale.getPointPosition(i, radius);\n+            ctx.lineTo(pointPosition.x, pointPosition.y);\n+        }\n+    }\n+}\n+function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n+    const ctx = scale.ctx;\n+    const circular = gridLineOpts.circular;\n+    const { color , lineWidth  } = gridLineOpts;\n+    if (!circular && !labelCount || !color || !lineWidth || radius \u003C 0) {\n+        return;\n+    }\n+    ctx.save();\n+    ctx.strokeStyle = color;\n+    ctx.lineWidth = lineWidth;\n+    ctx.setLineDash(borderOpts.dash || []);\n+    ctx.lineDashOffset = borderOpts.dashOffset;\n+    ctx.beginPath();\n+    pathRadiusLine(scale, radius, circular, labelCount);\n+    ctx.closePath();\n+    ctx.stroke();\n+    ctx.restore();\n+}\n+function createPointLabelContext(parent, index, label) {\n+    return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.j)(parent, {\n+        label,\n+        index,\n+        type: 'pointLabel'\n+    });\n+}\n+class RadialLinearScale extends LinearScaleBase {\n+    static id = 'radialLinear';\n+ static defaults = {\n+        display: true,\n+        animate: true,\n+        position: 'chartArea',\n+        angleLines: {\n+            display: true,\n+            lineWidth: 1,\n+            borderDash: [],\n+            borderDashOffset: 0.0\n+        },\n+        grid: {\n+            circular: false\n+        },\n+        startAngle: 0,\n+        ticks: {\n+            showLabelBackdrop: true,\n+            callback: _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aM.formatters.numeric\n+        },\n+        pointLabels: {\n+            backdropColor: undefined,\n+            backdropPadding: 2,\n+            display: true,\n+            font: {\n+                size: 10\n+            },\n+            callback (label) {\n+                return label;\n+            },\n+            padding: 5,\n+            centerPointLabels: false\n+        }\n+    };\n+    static defaultRoutes = {\n+        'angleLines.color': 'borderColor',\n+        'pointLabels.color': 'color',\n+        'ticks.color': 'color'\n+    };\n+    static descriptors = {\n+        angleLines: {\n+            _fallback: 'grid'\n+        }\n+    };\n+    constructor(cfg){\n+        super(cfg);\n+         this.xCenter = undefined;\n+         this.yCenter = undefined;\n+         this.drawingArea = undefined;\n+         this._pointLabels = [];\n+        this._pointLabelItems = [];\n+    }\n+    setDimensions() {\n+        const padding = this._padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(getTickBackdropHeight(this.options) \u002F 2);\n+        const w = this.width = this.maxWidth - padding.width;\n+        const h = this.height = this.maxHeight - padding.height;\n+        this.xCenter = Math.floor(this.left + w \u002F 2 + padding.left);\n+        this.yCenter = Math.floor(this.top + h \u002F 2 + padding.top);\n+        this.drawingArea = Math.floor(Math.min(w, h) \u002F 2);\n+    }\n+    determineDataLimits() {\n+        const { min , max  } = this.getMinMax(false);\n+        this.min = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(min) && !isNaN(min) ? min : 0;\n+        this.max = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(max) && !isNaN(max) ? max : 0;\n+        this.handleTickRangeOptions();\n+    }\n+ computeTickLimit() {\n+        return Math.ceil(this.drawingArea \u002F getTickBackdropHeight(this.options));\n+    }\n+    generateTickLabels(ticks) {\n+        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n+        this._pointLabels = this.getLabels().map((value, index)=>{\n+            const label = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.pointLabels.callback, [\n+                value,\n+                index\n+            ], this);\n+            return label || label === 0 ? label : '';\n+        }).filter((v, i)=>this.chart.getDataVisibility(i));\n+    }\n+    fit() {\n+        const opts = this.options;\n+        if (opts.display && opts.pointLabels.display) {\n+            fitWithPointLabels(this);\n+        } else {\n+            this.setCenterPoint(0, 0, 0, 0);\n+        }\n+    }\n+    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n+        this.xCenter += Math.floor((leftMovement - rightMovement) \u002F 2);\n+        this.yCenter += Math.floor((topMovement - bottomMovement) \u002F 2);\n+        this.drawingArea -= Math.min(this.drawingArea \u002F 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n+    }\n+    getIndexAngle(index) {\n+        const angleMultiplier = _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.T \u002F (this._pointLabels.length || 1);\n+        const startAngle = this.options.startAngle || 0;\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.al)(index * angleMultiplier + (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(startAngle));\n+    }\n+    getDistanceFromCenterForValue(value) {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {\n+            return NaN;\n+        }\n+        const scalingFactor = this.drawingArea \u002F (this.max - this.min);\n+        if (this.options.reverse) {\n+            return (this.max - value) * scalingFactor;\n+        }\n+        return (value - this.min) * scalingFactor;\n+    }\n+    getValueForDistanceFromCenter(distance) {\n+        if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(distance)) {\n+            return NaN;\n+        }\n+        const scaledDistance = distance \u002F (this.drawingArea \u002F (this.max - this.min));\n+        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n+    }\n+    getPointLabelContext(index) {\n+        const pointLabels = this._pointLabels || [];\n+        if (index >= 0 && index \u003C pointLabels.length) {\n+            const pointLabel = pointLabels[index];\n+            return createPointLabelContext(this.getContext(), index, pointLabel);\n+        }\n+    }\n+    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n+        const angle = this.getIndexAngle(index) - _chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.H + additionalAngle;\n+        return {\n+            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n+            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n+            angle\n+        };\n+    }\n+    getPointPositionForValue(index, value) {\n+        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n+    }\n+    getBasePosition(index) {\n+        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n+    }\n+    getPointLabelPosition(index) {\n+        const { left , top , right , bottom  } = this._pointLabelItems[index];\n+        return {\n+            left,\n+            top,\n+            right,\n+            bottom\n+        };\n+    }\n+ drawBackground() {\n+        const { backgroundColor , grid: { circular  }  } = this.options;\n+        if (backgroundColor) {\n+            const ctx = this.ctx;\n+            ctx.save();\n+            ctx.beginPath();\n+            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n+            ctx.closePath();\n+            ctx.fillStyle = backgroundColor;\n+            ctx.fill();\n+            ctx.restore();\n+        }\n+    }\n+ drawGrid() {\n+        const ctx = this.ctx;\n+        const opts = this.options;\n+        const { angleLines , grid , border  } = opts;\n+        const labelCount = this._pointLabels.length;\n+        let i, offset, position;\n+        if (opts.pointLabels.display) {\n+            drawPointLabels(this, labelCount);\n+        }\n+        if (grid.display) {\n+            this.ticks.forEach((tick, index)=>{\n+                if (index !== 0 || index === 0 && this.min \u003C 0) {\n+                    offset = this.getDistanceFromCenterForValue(tick.value);\n+                    const context = this.getContext(index);\n+                    const optsAtIndex = grid.setContext(context);\n+                    const optsAtIndexBorder = border.setContext(context);\n+                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n+                }\n+            });\n+        }\n+        if (angleLines.display) {\n+            ctx.save();\n+            for(i = labelCount - 1; i >= 0; i--){\n+                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n+                const { color , lineWidth  } = optsAtIndex;\n+                if (!lineWidth || !color) {\n+                    continue;\n+                }\n+                ctx.lineWidth = lineWidth;\n+                ctx.strokeStyle = color;\n+                ctx.setLineDash(optsAtIndex.borderDash);\n+                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n+                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n+                position = this.getPointPosition(i, offset);\n+                ctx.beginPath();\n+                ctx.moveTo(this.xCenter, this.yCenter);\n+                ctx.lineTo(position.x, position.y);\n+                ctx.stroke();\n+            }\n+            ctx.restore();\n+        }\n+    }\n+ drawBorder() {}\n+ drawLabels() {\n+        const ctx = this.ctx;\n+        const opts = this.options;\n+        const tickOpts = opts.ticks;\n+        if (!tickOpts.display) {\n+            return;\n+        }\n+        const startAngle = this.getIndexAngle(0);\n+        let offset, width;\n+        ctx.save();\n+        ctx.translate(this.xCenter, this.yCenter);\n+        ctx.rotate(startAngle);\n+        ctx.textAlign = 'center';\n+        ctx.textBaseline = 'middle';\n+        this.ticks.forEach((tick, index)=>{\n+            if (index === 0 && this.min >= 0 && !opts.reverse) {\n+                return;\n+            }\n+            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n+            const tickFont = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.a0)(optsAtIndex.font);\n+            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n+            if (optsAtIndex.showLabelBackdrop) {\n+                ctx.font = tickFont.string;\n+                width = ctx.measureText(tick.label).width;\n+                ctx.fillStyle = optsAtIndex.backdropColor;\n+                const padding = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.E)(optsAtIndex.backdropPadding);\n+                ctx.fillRect(-width \u002F 2 - padding.left, -offset - tickFont.size \u002F 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n+            }\n+            (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Z)(ctx, tick.label, 0, -offset, tickFont, {\n+                color: optsAtIndex.color,\n+                strokeColor: optsAtIndex.textStrokeColor,\n+                strokeWidth: optsAtIndex.textStrokeWidth\n+            });\n+        });\n+        ctx.restore();\n+    }\n+ drawTitle() {}\n+}\n+\n+const INTERVALS = {\n+    millisecond: {\n+        common: true,\n+        size: 1,\n+        steps: 1000\n+    },\n+    second: {\n+        common: true,\n+        size: 1000,\n+        steps: 60\n+    },\n+    minute: {\n+        common: true,\n+        size: 60000,\n+        steps: 60\n+    },\n+    hour: {\n+        common: true,\n+        size: 3600000,\n+        steps: 24\n+    },\n+    day: {\n+        common: true,\n+        size: 86400000,\n+        steps: 30\n+    },\n+    week: {\n+        common: false,\n+        size: 604800000,\n+        steps: 4\n+    },\n+    month: {\n+        common: true,\n+        size: 2.628e9,\n+        steps: 12\n+    },\n+    quarter: {\n+        common: false,\n+        size: 7.884e9,\n+        steps: 4\n+    },\n+    year: {\n+        common: true,\n+        size: 3.154e10\n+    }\n+};\n+ const UNITS =  \u002F* #__PURE__ *\u002F Object.keys(INTERVALS);\n+ function sorter(a, b) {\n+    return a - b;\n+}\n+ function parse(scale, input) {\n+    if ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.k)(input)) {\n+        return null;\n+    }\n+    const adapter = scale._adapter;\n+    const { parser , round , isoWeekday  } = scale._parseOpts;\n+    let value = input;\n+    if (typeof parser === 'function') {\n+        value = parser(value);\n+    }\n+    if (!(0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(value)) {\n+        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n+    }\n+    if (value === null) {\n+        return null;\n+    }\n+    if (round) {\n+        value = round === 'week' && ((0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n+    }\n+    return +value;\n+}\n+ function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n+    const ilen = UNITS.length;\n+    for(let i = UNITS.indexOf(minUnit); i \u003C ilen - 1; ++i){\n+        const interval = INTERVALS[UNITS[i]];\n+        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n+        if (interval.common && Math.ceil((max - min) \u002F (factor * interval.size)) \u003C= capacity) {\n+            return UNITS[i];\n+        }\n+    }\n+    return UNITS[ilen - 1];\n+}\n+ function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n+    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n+        const unit = UNITS[i];\n+        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n+            return unit;\n+        }\n+    }\n+    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n+}\n+ function determineMajorUnit(unit) {\n+    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i \u003C ilen; ++i){\n+        if (INTERVALS[UNITS[i]].common) {\n+            return UNITS[i];\n+        }\n+    }\n+}\n+ function addTick(ticks, time, timestamps) {\n+    if (!timestamps) {\n+        ticks[time] = true;\n+    } else if (timestamps.length) {\n+        const { lo , hi  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aQ)(timestamps, time);\n+        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n+        ticks[timestamp] = true;\n+    }\n+}\n+ function setMajorTicks(scale, ticks, map, majorUnit) {\n+    const adapter = scale._adapter;\n+    const first = +adapter.startOf(ticks[0].value, majorUnit);\n+    const last = ticks[ticks.length - 1].value;\n+    let major, index;\n+    for(major = first; major \u003C= last; major = +adapter.add(major, 1, majorUnit)){\n+        index = map[major];\n+        if (index >= 0) {\n+            ticks[index].major = true;\n+        }\n+    }\n+    return ticks;\n+}\n+ function ticksFromTimestamps(scale, values, majorUnit) {\n+    const ticks = [];\n+     const map = {};\n+    const ilen = values.length;\n+    let i, value;\n+    for(i = 0; i \u003C ilen; ++i){\n+        value = values[i];\n+        map[value] = i;\n+        ticks.push({\n+            value,\n+            major: false\n+        });\n+    }\n+    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n+}\n+class TimeScale extends Scale {\n+    static id = 'time';\n+ static defaults = {\n+ bounds: 'data',\n+        adapters: {},\n+        time: {\n+            parser: false,\n+            unit: false,\n+            round: false,\n+            isoWeekday: false,\n+            minUnit: 'millisecond',\n+            displayFormats: {}\n+        },\n+        ticks: {\n+ source: 'auto',\n+            callback: false,\n+            major: {\n+                enabled: false\n+            }\n+        }\n+    };\n+ constructor(props){\n+        super(props);\n+         this._cache = {\n+            data: [],\n+            labels: [],\n+            all: []\n+        };\n+         this._unit = 'day';\n+         this._majorUnit = undefined;\n+        this._offsets = {};\n+        this._normalized = false;\n+        this._parseOpts = undefined;\n+    }\n+    init(scaleOpts, opts = {}) {\n+        const time = scaleOpts.time || (scaleOpts.time = {});\n+         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n+        adapter.init(opts);\n+        (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.ab)(time.displayFormats, adapter.formats());\n+        this._parseOpts = {\n+            parser: time.parser,\n+            round: time.round,\n+            isoWeekday: time.isoWeekday\n+        };\n+        super.init(scaleOpts);\n+        this._normalized = opts.normalized;\n+    }\n+ parse(raw, index) {\n+        if (raw === undefined) {\n+            return null;\n+        }\n+        return parse(this, raw);\n+    }\n+    beforeLayout() {\n+        super.beforeLayout();\n+        this._cache = {\n+            data: [],\n+            labels: [],\n+            all: []\n+        };\n+    }\n+    determineDataLimits() {\n+        const options = this.options;\n+        const adapter = this._adapter;\n+        const unit = options.time.unit || 'day';\n+        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n+ function _applyBounds(bounds) {\n+            if (!minDefined && !isNaN(bounds.min)) {\n+                min = Math.min(min, bounds.min);\n+            }\n+            if (!maxDefined && !isNaN(bounds.max)) {\n+                max = Math.max(max, bounds.max);\n+            }\n+        }\n+        if (!minDefined || !maxDefined) {\n+            _applyBounds(this._getLabelBounds());\n+            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n+                _applyBounds(this.getMinMax(false));\n+            }\n+        }\n+        min = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n+        max = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.g)(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n+        this.min = Math.min(min, max - 1);\n+        this.max = Math.max(min + 1, max);\n+    }\n+ _getLabelBounds() {\n+        const arr = this.getLabelTimestamps();\n+        let min = Number.POSITIVE_INFINITY;\n+        let max = Number.NEGATIVE_INFINITY;\n+        if (arr.length) {\n+            min = arr[0];\n+            max = arr[arr.length - 1];\n+        }\n+        return {\n+            min,\n+            max\n+        };\n+    }\n+ buildTicks() {\n+        const options = this.options;\n+        const timeOpts = options.time;\n+        const tickOpts = options.ticks;\n+        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n+        if (options.bounds === 'ticks' && timestamps.length) {\n+            this.min = this._userMin || timestamps[0];\n+            this.max = this._userMax || timestamps[timestamps.length - 1];\n+        }\n+        const min = this.min;\n+        const max = this.max;\n+        const ticks = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.aP)(timestamps, min, max);\n+        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n+        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n+        this.initOffsets(timestamps);\n+        if (options.reverse) {\n+            ticks.reverse();\n+        }\n+        return ticksFromTimestamps(this, ticks, this._majorUnit);\n+    }\n+    afterAutoSkip() {\n+        if (this.options.offsetAfterAutoskip) {\n+            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n+        }\n+    }\n+ initOffsets(timestamps = []) {\n+        let start = 0;\n+        let end = 0;\n+        let first, last;\n+        if (this.options.offset && timestamps.length) {\n+            first = this.getDecimalForValue(timestamps[0]);\n+            if (timestamps.length === 1) {\n+                start = 1 - first;\n+            } else {\n+                start = (this.getDecimalForValue(timestamps[1]) - first) \u002F 2;\n+            }\n+            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n+            if (timestamps.length === 1) {\n+                end = last;\n+            } else {\n+                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) \u002F 2;\n+            }\n+        }\n+        const limit = timestamps.length \u003C 3 ? 0.5 : 0.25;\n+        start = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(start, 0, limit);\n+        end = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.S)(end, 0, limit);\n+        this._offsets = {\n+            start,\n+            end,\n+            factor: 1 \u002F (start + 1 + end)\n+        };\n+    }\n+ _generate() {\n+        const adapter = this._adapter;\n+        const min = this.min;\n+        const max = this.max;\n+        const options = this.options;\n+        const timeOpts = options.time;\n+        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n+        const stepSize = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.v)(options.ticks.stepSize, 1);\n+        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n+        const hasWeekday = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.x)(weekday) || weekday === true;\n+        const ticks = {};\n+        let first = min;\n+        let time, count;\n+        if (hasWeekday) {\n+            first = +adapter.startOf(first, 'isoWeek', weekday);\n+        }\n+        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n+        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n+            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n+        }\n+        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n+        for(time = first, count = 0; time \u003C max; time = +adapter.add(time, stepSize, minor), count++){\n+            addTick(ticks, time, timestamps);\n+        }\n+        if (time === max || options.bounds === 'ticks' || count === 1) {\n+            addTick(ticks, time, timestamps);\n+        }\n+        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n+    }\n+ getLabelForValue(value) {\n+        const adapter = this._adapter;\n+        const timeOpts = this.options.time;\n+        if (timeOpts.tooltipFormat) {\n+            return adapter.format(value, timeOpts.tooltipFormat);\n+        }\n+        return adapter.format(value, timeOpts.displayFormats.datetime);\n+    }\n+ format(value, format) {\n+        const options = this.options;\n+        const formats = options.time.displayFormats;\n+        const unit = this._unit;\n+        const fmt = format || formats[unit];\n+        return this._adapter.format(value, fmt);\n+    }\n+ _tickFormatFunction(time, index, ticks, format) {\n+        const options = this.options;\n+        const formatter = options.ticks.callback;\n+        if (formatter) {\n+            return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.Q)(formatter, [\n+                time,\n+                index,\n+                ticks\n+            ], this);\n+        }\n+        const formats = options.time.displayFormats;\n+        const unit = this._unit;\n+        const majorUnit = this._majorUnit;\n+        const minorFormat = unit && formats[unit];\n+        const majorFormat = majorUnit && formats[majorUnit];\n+        const tick = ticks[index];\n+        const major = majorUnit && majorFormat && tick && tick.major;\n+        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n+    }\n+ generateTickLabels(ticks) {\n+        let i, ilen, tick;\n+        for(i = 0, ilen = ticks.length; i \u003C ilen; ++i){\n+            tick = ticks[i];\n+            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n+        }\n+    }\n+ getDecimalForValue(value) {\n+        return value === null ? NaN : (value - this.min) \u002F (this.max - this.min);\n+    }\n+ getPixelForValue(value) {\n+        const offsets = this._offsets;\n+        const pos = this.getDecimalForValue(value);\n+        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n+    }\n+ getValueForPixel(pixel) {\n+        const offsets = this._offsets;\n+        const pos = this.getDecimalForPixel(pixel) \u002F offsets.factor - offsets.end;\n+        return this.min + pos * (this.max - this.min);\n+    }\n+ _getLabelSize(label) {\n+        const ticksOpts = this.options.ticks;\n+        const tickLabelWidth = this.ctx.measureText(label).width;\n+        const angle = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.t)(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n+        const cosRotation = Math.cos(angle);\n+        const sinRotation = Math.sin(angle);\n+        const tickFontSize = this._resolveTickFontOptions(0).size;\n+        return {\n+            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n+            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n+        };\n+    }\n+ _getLabelCapacity(exampleTime) {\n+        const timeOpts = this.options.time;\n+        const displayFormats = timeOpts.displayFormats;\n+        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n+        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n+            exampleTime\n+        ], this._majorUnit), format);\n+        const size = this._getLabelSize(exampleLabel);\n+        const capacity = Math.floor(this.isHorizontal() ? this.width \u002F size.w : this.height \u002F size.h) - 1;\n+        return capacity > 0 ? capacity : 1;\n+    }\n+ getDataTimestamps() {\n+        let timestamps = this._cache.data || [];\n+        let i, ilen;\n+        if (timestamps.length) {\n+            return timestamps;\n+        }\n+        const metas = this.getMatchingVisibleMetas();\n+        if (this._normalized && metas.length) {\n+            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n+        }\n+        for(i = 0, ilen = metas.length; i \u003C ilen; ++i){\n+            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n+        }\n+        return this._cache.data = this.normalize(timestamps);\n+    }\n+ getLabelTimestamps() {\n+        const timestamps = this._cache.labels || [];\n+        let i, ilen;\n+        if (timestamps.length) {\n+            return timestamps;\n+        }\n+        const labels = this.getLabels();\n+        for(i = 0, ilen = labels.length; i \u003C ilen; ++i){\n+            timestamps.push(parse(this, labels[i]));\n+        }\n+        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n+    }\n+ normalize(values) {\n+        return (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__._)(values.sort(sorter));\n+    }\n+}\n+\n+function interpolate(table, val, reverse) {\n+    let lo = 0;\n+    let hi = table.length - 1;\n+    let prevSource, nextSource, prevTarget, nextTarget;\n+    if (reverse) {\n+        if (val >= table[lo].pos && val \u003C= table[hi].pos) {\n+            ({ lo , hi  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.B)(table, 'pos', val));\n+        }\n+        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n+        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n+    } else {\n+        if (val >= table[lo].time && val \u003C= table[hi].time) {\n+            ({ lo , hi  } = (0,_chunks_helpers_dataset_js__WEBPACK_IMPORTED_MODULE_0__.B)(table, 'time', val));\n+        }\n+        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n+        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n+    }\n+    const span = nextSource - prevSource;\n+    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) \u002F span : prevTarget;\n+}\n+class TimeSeriesScale extends TimeScale {\n+    static id = 'timeseries';\n+ static defaults = TimeScale.defaults;\n+ constructor(props){\n+        super(props);\n+         this._table = [];\n+         this._minPos = undefined;\n+         this._tableRange = undefined;\n+    }\n+ initOffsets() {\n+        const timestamps = this._getTimestampsForTable();\n+        const table = this._table = this.buildLookupTable(timestamps);\n+        this._minPos = interpolate(table, this.min);\n+        this._tableRange = interpolate(table, this.max) - this._minPos;\n+        super.initOffsets(timestamps);\n+    }\n+ buildLookupTable(timestamps) {\n+        const { min , max  } = this;\n+        const items = [];\n+        const table = [];\n+        let i, ilen, prev, curr, next;\n+        for(i = 0, ilen = timestamps.length; i \u003C ilen; ++i){\n+            curr = timestamps[i];\n+            if (curr >= min && curr \u003C= max) {\n+                items.push(curr);\n+            }\n+        }\n+        if (items.length \u003C 2) {\n+            return [\n+                {\n+                    time: min,\n+                    pos: 0\n+                },\n+                {\n+                    time: max,\n+                    pos: 1\n+                }\n+            ];\n+        }\n+        for(i = 0, ilen = items.length; i \u003C ilen; ++i){\n+            next = items[i + 1];\n+            prev = items[i - 1];\n+            curr = items[i];\n+            if (Math.round((next + prev) \u002F 2) !== curr) {\n+                table.push({\n+                    time: curr,\n+                    pos: i \u002F (ilen - 1)\n+                });\n+            }\n+        }\n+        return table;\n+    }\n+ _generate() {\n+        const min = this.min;\n+        const max = this.max;\n+        let timestamps = super.getDataTimestamps();\n+        if (!timestamps.includes(min) || !timestamps.length) {\n+            timestamps.splice(0, 0, min);\n+        }\n+        if (!timestamps.includes(max) || timestamps.length === 1) {\n+            timestamps.push(max);\n+        }\n+        return timestamps.sort((a, b)=>a - b);\n+    }\n+ _getTimestampsForTable() {\n+        let timestamps = this._cache.all || [];\n+        if (timestamps.length) {\n+            return timestamps;\n+        }\n+        const data = this.getDataTimestamps();\n+        const label = this.getLabelTimestamps();\n+        if (data.length && label.length) {\n+            timestamps = this.normalize(data.concat(label));\n+        } else {\n+            timestamps = data.length ? data : label;\n+        }\n+        timestamps = this._cache.all = timestamps;\n+        return timestamps;\n+    }\n+ getDecimalForValue(value) {\n+        return (interpolate(this._table, value) - this._minPos) \u002F this._tableRange;\n+    }\n+ getValueForPixel(pixel) {\n+        const offsets = this._offsets;\n+        const decimal = this.getDecimalForPixel(pixel) \u002F offsets.factor - offsets.end;\n+        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n+    }\n+}\n+\n+var scales = \u002F*#__PURE__*\u002FObject.freeze({\n+__proto__: null,\n+CategoryScale: CategoryScale,\n+LinearScale: LinearScale,\n+LogarithmicScale: LogarithmicScale,\n+RadialLinearScale: RadialLinearScale,\n+TimeScale: TimeScale,\n+TimeSeriesScale: TimeSeriesScale\n+});\n+\n+const registerables = [\n+    controllers,\n+    elements,\n+    plugins,\n+    scales\n+];\n+\n+\n+\u002F\u002F# sourceMappingURL=chart.js.map\n+\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchunks\u002Fhelpers.dataset.js\"\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fchart.js\u002Fdist\u002Fchunks\u002Fhelpers.dataset.js ***!\n+  \\**************************************************************\u002F\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n+\n+\"use strict\";\n+__webpack_require__.r(__webpack_exports__);\n+\u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   $: () => (\u002F* binding *\u002F unclipArea),\n+\u002F* harmony export *\u002F   A: () => (\u002F* binding *\u002F _rlookupByKey),\n+\u002F* harmony export *\u002F   B: () => (\u002F* binding *\u002F _lookupByKey),\n+\u002F* harmony export *\u002F   C: () => (\u002F* binding *\u002F _isPointInArea),\n+\u002F* harmony export *\u002F   D: () => (\u002F* binding *\u002F getAngleFromPoint),\n+\u002F* harmony export *\u002F   E: () => (\u002F* binding *\u002F toPadding),\n+\u002F* harmony export *\u002F   F: () => (\u002F* binding *\u002F each),\n+\u002F* harmony export *\u002F   G: () => (\u002F* binding *\u002F getMaximumSize),\n+\u002F* harmony export *\u002F   H: () => (\u002F* binding *\u002F HALF_PI),\n+\u002F* harmony export *\u002F   I: () => (\u002F* binding *\u002F _getParentNode),\n+\u002F* harmony export *\u002F   J: () => (\u002F* binding *\u002F readUsedSize),\n+\u002F* harmony export *\u002F   K: () => (\u002F* binding *\u002F supportsEventListenerOptions),\n+\u002F* harmony export *\u002F   L: () => (\u002F* binding *\u002F throttled),\n+\u002F* harmony export *\u002F   M: () => (\u002F* binding *\u002F _isDomSupported),\n+\u002F* harmony export *\u002F   N: () => (\u002F* binding *\u002F _factorize),\n+\u002F* harmony export *\u002F   O: () => (\u002F* binding *\u002F finiteOrDefault),\n+\u002F* harmony export *\u002F   P: () => (\u002F* binding *\u002F PI),\n+\u002F* harmony export *\u002F   Q: () => (\u002F* binding *\u002F callback),\n+\u002F* harmony export *\u002F   R: () => (\u002F* binding *\u002F _addGrace),\n+\u002F* harmony export *\u002F   S: () => (\u002F* binding *\u002F _limitValue),\n+\u002F* harmony export *\u002F   T: () => (\u002F* binding *\u002F TAU),\n+\u002F* harmony export *\u002F   U: () => (\u002F* binding *\u002F toDegrees),\n+\u002F* harmony export *\u002F   V: () => (\u002F* binding *\u002F _measureText),\n+\u002F* harmony export *\u002F   W: () => (\u002F* binding *\u002F _int16Range),\n+\u002F* harmony export *\u002F   X: () => (\u002F* binding *\u002F _alignPixel),\n+\u002F* harmony export *\u002F   Y: () => (\u002F* binding *\u002F clipArea),\n+\u002F* harmony export *\u002F   Z: () => (\u002F* binding *\u002F renderText),\n+\u002F* harmony export *\u002F   _: () => (\u002F* binding *\u002F _arrayUnique),\n+\u002F* harmony export *\u002F   a: () => (\u002F* binding *\u002F resolve),\n+\u002F* harmony export *\u002F   a$: () => (\u002F* binding *\u002F getStyle),\n+\u002F* harmony export *\u002F   a0: () => (\u002F* binding *\u002F toFont),\n+\u002F* harmony export *\u002F   a1: () => (\u002F* binding *\u002F _toLeftRightCenter),\n+\u002F* harmony export *\u002F   a2: () => (\u002F* binding *\u002F _alignStartEnd),\n+\u002F* harmony export *\u002F   a3: () => (\u002F* binding *\u002F overrides),\n+\u002F* harmony export *\u002F   a4: () => (\u002F* binding *\u002F merge),\n+\u002F* harmony export *\u002F   a5: () => (\u002F* binding *\u002F _capitalize),\n+\u002F* harmony export *\u002F   a6: () => (\u002F* binding *\u002F descriptors),\n+\u002F* harmony export *\u002F   a7: () => (\u002F* binding *\u002F isFunction),\n+\u002F* harmony export *\u002F   a8: () => (\u002F* binding *\u002F _attachContext),\n+\u002F* harmony export *\u002F   a9: () => (\u002F* binding *\u002F _createResolver),\n+\u002F* harmony export *\u002F   aA: () => (\u002F* binding *\u002F getRtlAdapter),\n+\u002F* harmony export *\u002F   aB: () => (\u002F* binding *\u002F overrideTextDirection),\n+\u002F* harmony export *\u002F   aC: () => (\u002F* binding *\u002F _textX),\n+\u002F* harmony export *\u002F   aD: () => (\u002F* binding *\u002F restoreTextDirection),\n+\u002F* harmony export *\u002F   aE: () => (\u002F* binding *\u002F drawPointLegend),\n+\u002F* harmony export *\u002F   aF: () => (\u002F* binding *\u002F distanceBetweenPoints),\n+\u002F* harmony export *\u002F   aG: () => (\u002F* binding *\u002F noop),\n+\u002F* harmony export *\u002F   aH: () => (\u002F* binding *\u002F _setMinAndMaxByKey),\n+\u002F* harmony export *\u002F   aI: () => (\u002F* binding *\u002F niceNum),\n+\u002F* harmony export *\u002F   aJ: () => (\u002F* binding *\u002F almostWhole),\n+\u002F* harmony export *\u002F   aK: () => (\u002F* binding *\u002F almostEquals),\n+\u002F* harmony export *\u002F   aL: () => (\u002F* binding *\u002F _decimalPlaces),\n+\u002F* harmony export *\u002F   aM: () => (\u002F* binding *\u002F Ticks),\n+\u002F* harmony export *\u002F   aN: () => (\u002F* binding *\u002F log10),\n+\u002F* harmony export *\u002F   aO: () => (\u002F* binding *\u002F _longestText),\n+\u002F* harmony export *\u002F   aP: () => (\u002F* binding *\u002F _filterBetween),\n+\u002F* harmony export *\u002F   aQ: () => (\u002F* binding *\u002F _lookup),\n+\u002F* harmony export *\u002F   aR: () => (\u002F* binding *\u002F isPatternOrGradient),\n+\u002F* harmony export *\u002F   aS: () => (\u002F* binding *\u002F getHoverColor),\n+\u002F* harmony export *\u002F   aT: () => (\u002F* binding *\u002F clone),\n+\u002F* harmony export *\u002F   aU: () => (\u002F* binding *\u002F _merger),\n+\u002F* harmony export *\u002F   aV: () => (\u002F* binding *\u002F _mergerIf),\n+\u002F* harmony export *\u002F   aW: () => (\u002F* binding *\u002F _deprecated),\n+\u002F* harmony export *\u002F   aX: () => (\u002F* binding *\u002F _splitKey),\n+\u002F* harmony export *\u002F   aY: () => (\u002F* binding *\u002F toFontString),\n+\u002F* harmony export *\u002F   aZ: () => (\u002F* binding *\u002F splineCurve),\n+\u002F* harmony export *\u002F   a_: () => (\u002F* binding *\u002F splineCurveMonotone),\n+\u002F* harmony export *\u002F   aa: () => (\u002F* binding *\u002F _descriptors),\n+\u002F* harmony export *\u002F   ab: () => (\u002F* binding *\u002F mergeIf),\n+\u002F* harmony export *\u002F   ac: () => (\u002F* binding *\u002F uid),\n+\u002F* harmony export *\u002F   ad: () => (\u002F* binding *\u002F debounce),\n+\u002F* harmony export *\u002F   ae: () => (\u002F* binding *\u002F retinaScale),\n+\u002F* harmony export *\u002F   af: () => (\u002F* binding *\u002F clearCanvas),\n+\u002F* harmony export *\u002F   ag: () => (\u002F* binding *\u002F setsEqual),\n+\u002F* harmony export *\u002F   ah: () => (\u002F* binding *\u002F getDatasetClipArea),\n+\u002F* harmony export *\u002F   ai: () => (\u002F* binding *\u002F _elementsEqual),\n+\u002F* harmony export *\u002F   aj: () => (\u002F* binding *\u002F _isClickEvent),\n+\u002F* harmony export *\u002F   ak: () => (\u002F* binding *\u002F _isBetween),\n+\u002F* harmony export *\u002F   al: () => (\u002F* binding *\u002F _normalizeAngle),\n+\u002F* harmony export *\u002F   am: () => (\u002F* binding *\u002F _readValueToProps),\n+\u002F* harmony export *\u002F   an: () => (\u002F* binding *\u002F _updateBezierControlPoints),\n+\u002F* harmony export *\u002F   ao: () => (\u002F* binding *\u002F _computeSegments),\n+\u002F* harmony export *\u002F   ap: () => (\u002F* binding *\u002F _boundSegments),\n+\u002F* harmony export *\u002F   aq: () => (\u002F* binding *\u002F _steppedInterpolation),\n+\u002F* harmony export *\u002F   ar: () => (\u002F* binding *\u002F _bezierInterpolation),\n+\u002F* harmony export *\u002F   as: () => (\u002F* binding *\u002F _pointInLine),\n+\u002F* harmony export *\u002F   at: () => (\u002F* binding *\u002F _steppedLineTo),\n+\u002F* harmony export *\u002F   au: () => (\u002F* binding *\u002F _bezierCurveTo),\n+\u002F* harmony export *\u002F   av: () => (\u002F* binding *\u002F drawPoint),\n+\u002F* harmony export *\u002F   aw: () => (\u002F* binding *\u002F addRoundedRectPath),\n+\u002F* harmony export *\u002F   ax: () => (\u002F* binding *\u002F toTRBL),\n+\u002F* harmony export *\u002F   ay: () => (\u002F* binding *\u002F toTRBLCorners),\n+\u002F* harmony export *\u002F   az: () => (\u002F* binding *\u002F _boundSegment),\n+\u002F* harmony export *\u002F   b: () => (\u002F* binding *\u002F isArray),\n+\u002F* harmony export *\u002F   b0: () => (\u002F* binding *\u002F fontString),\n+\u002F* harmony export *\u002F   b1: () => (\u002F* binding *\u002F toLineHeight),\n+\u002F* harmony export *\u002F   b2: () => (\u002F* binding *\u002F PITAU),\n+\u002F* harmony export *\u002F   b3: () => (\u002F* binding *\u002F INFINITY),\n+\u002F* harmony export *\u002F   b4: () => (\u002F* binding *\u002F RAD_PER_DEG),\n+\u002F* harmony export *\u002F   b5: () => (\u002F* binding *\u002F QUARTER_PI),\n+\u002F* harmony export *\u002F   b6: () => (\u002F* binding *\u002F TWO_THIRDS_PI),\n+\u002F* harmony export *\u002F   b7: () => (\u002F* binding *\u002F _angleDiff),\n+\u002F* harmony export *\u002F   c: () => (\u002F* binding *\u002F color),\n+\u002F* harmony export *\u002F   d: () => (\u002F* binding *\u002F defaults),\n+\u002F* harmony export *\u002F   e: () => (\u002F* binding *\u002F effects),\n+\u002F* harmony export *\u002F   f: () => (\u002F* binding *\u002F resolveObjectKey),\n+\u002F* harmony export *\u002F   g: () => (\u002F* binding *\u002F isNumberFinite),\n+\u002F* harmony export *\u002F   h: () => (\u002F* binding *\u002F defined),\n+\u002F* harmony export *\u002F   i: () => (\u002F* binding *\u002F isObject),\n+\u002F* harmony export *\u002F   j: () => (\u002F* binding *\u002F createContext),\n+\u002F* harmony export *\u002F   k: () => (\u002F* binding *\u002F isNullOrUndef),\n+\u002F* harmony export *\u002F   l: () => (\u002F* binding *\u002F listenArrayEvents),\n+\u002F* harmony export *\u002F   m: () => (\u002F* binding *\u002F toPercentage),\n+\u002F* harmony export *\u002F   n: () => (\u002F* binding *\u002F toDimension),\n+\u002F* harmony export *\u002F   o: () => (\u002F* binding *\u002F formatNumber),\n+\u002F* harmony export *\u002F   p: () => (\u002F* binding *\u002F _angleBetween),\n+\u002F* harmony export *\u002F   q: () => (\u002F* binding *\u002F _getStartAndCountOfVisiblePoints),\n+\u002F* harmony export *\u002F   r: () => (\u002F* binding *\u002F requestAnimFrame),\n+\u002F* harmony export *\u002F   s: () => (\u002F* binding *\u002F sign),\n+\u002F* harmony export *\u002F   t: () => (\u002F* binding *\u002F toRadians),\n+\u002F* harmony export *\u002F   u: () => (\u002F* binding *\u002F unlistenArrayEvents),\n+\u002F* harmony export *\u002F   v: () => (\u002F* binding *\u002F valueOrDefault),\n+\u002F* harmony export *\u002F   w: () => (\u002F* binding *\u002F _scaleRangesChanged),\n+\u002F* harmony export *\u002F   x: () => (\u002F* binding *\u002F isNumber),\n+\u002F* harmony export *\u002F   y: () => (\u002F* binding *\u002F _parseObjectDataRadialScale),\n+\u002F* harmony export *\u002F   z: () => (\u002F* binding *\u002F getRelativePosition)\n+\u002F* harmony export *\u002F });\n+\u002F* harmony import *\u002F var _kurkle_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! @kurkle\u002Fcolor *\u002F \".\u002Fnode_modules\u002F@kurkle\u002Fcolor\u002Fdist\u002Fcolor.esm.js\");\n+\u002F*!\n+ * Chart.js v4.5.1\n+ * https:\u002F\u002Fwww.chartjs.org\n+ * (c) 2025 Chart.js Contributors\n+ * Released under the MIT License\n+ *\u002F\n+\n+\n+\u002F**\n+ * @namespace Chart.helpers\n+ *\u002F \u002F**\n+ * An empty function that can be used, for example, for optional callback.\n+ *\u002F function noop() {\n+\u002F* noop *\u002F }\n+\u002F**\n+ * Returns a unique id, sequentially generated from a global variable.\n+ *\u002F const uid = (()=>{\n+    let id = 0;\n+    return ()=>id++;\n+})();\n+\u002F**\n+ * Returns true if `value` is neither null nor undefined, else returns false.\n+ * @param value - The value to test.\n+ * @since 2.7.0\n+ *\u002F function isNullOrUndef(value) {\n+    return value === null || value === undefined;\n+}\n+\u002F**\n+ * Returns true if `value` is an array (including typed arrays), else returns false.\n+ * @param value - The value to test.\n+ * @function\n+ *\u002F function isArray(value) {\n+    if (Array.isArray && Array.isArray(value)) {\n+        return true;\n+    }\n+    const type = Object.prototype.toString.call(value);\n+    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n+        return true;\n+    }\n+    return false;\n+}\n+\u002F**\n+ * Returns true if `value` is an object (excluding null), else returns false.\n+ * @param value - The value to test.\n+ * @since 2.7.0\n+ *\u002F function isObject(value) {\n+    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n+}\n+\u002F**\n+ * Returns true if `value` is a finite number, else returns false\n+ * @param value  - The value to test.\n+ *\u002F function isNumberFinite(value) {\n+    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n+}\n+\u002F**\n+ * Returns `value` if finite, else returns `defaultValue`.\n+ * @param value - The value to return if defined.\n+ * @param defaultValue - The value to return if `value` is not finite.\n+ *\u002F function finiteOrDefault(value, defaultValue) {\n+    return isNumberFinite(value) ? value : defaultValue;\n+}\n+\u002F**\n+ * Returns `value` if defined, else returns `defaultValue`.\n+ * @param value - The value to return if defined.\n+ * @param defaultValue - The value to return if `value` is undefined.\n+ *\u002F function valueOrDefault(value, defaultValue) {\n+    return typeof value === 'undefined' ? defaultValue : value;\n+}\n+const toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) \u002F 100 : +value \u002F dimension;\n+const toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) \u002F 100 * dimension : +value;\n+\u002F**\n+ * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n+ * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n+ * @param fn - The function to call.\n+ * @param args - The arguments with which `fn` should be called.\n+ * @param [thisArg] - The value of `this` provided for the call to `fn`.\n+ *\u002F function callback(fn, args, thisArg) {\n+    if (fn && typeof fn.call === 'function') {\n+        return fn.apply(thisArg, args);\n+    }\n+}\n+function each(loopable, fn, thisArg, reverse) {\n+    let i, len, keys;\n+    if (isArray(loopable)) {\n+        len = loopable.length;\n+        if (reverse) {\n+            for(i = len - 1; i >= 0; i--){\n+                fn.call(thisArg, loopable[i], i);\n+            }\n+        } else {\n+            for(i = 0; i \u003C len; i++){\n+                fn.call(thisArg, loopable[i], i);\n+            }\n+        }\n+    } else if (isObject(loopable)) {\n+        keys = Object.keys(loopable);\n+        len = keys.length;\n+        for(i = 0; i \u003C len; i++){\n+            fn.call(thisArg, loopable[keys[i]], keys[i]);\n+        }\n+    }\n+}\n+\u002F**\n+ * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n+ * @param a0 - The array to compare\n+ * @param a1 - The array to compare\n+ * @private\n+ *\u002F function _elementsEqual(a0, a1) {\n+    let i, ilen, v0, v1;\n+    if (!a0 || !a1 || a0.length !== a1.length) {\n+        return false;\n+    }\n+    for(i = 0, ilen = a0.length; i \u003C ilen; ++i){\n+        v0 = a0[i];\n+        v1 = a1[i];\n+        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n+            return false;\n+        }\n+    }\n+    return true;\n+}\n+\u002F**\n+ * Returns a deep copy of `source` without keeping references on objects and arrays.\n+ * @param source - The value to clone.\n+ *\u002F function clone(source) {\n+    if (isArray(source)) {\n+        return source.map(clone);\n+    }\n+    if (isObject(source)) {\n+        const target = Object.create(null);\n+        const keys = Object.keys(source);\n+        const klen = keys.length;\n+        let k = 0;\n+        for(; k \u003C klen; ++k){\n+            target[keys[k]] = clone(source[keys[k]]);\n+        }\n+        return target;\n+    }\n+    return source;\n+}\n+function isValidKey(key) {\n+    return [\n+        '__proto__',\n+        'prototype',\n+        'constructor'\n+    ].indexOf(key) === -1;\n+}\n+\u002F**\n+ * The default merger when Chart.helpers.merge is called without merger option.\n+ * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n+ * @private\n+ *\u002F function _merger(key, target, source, options) {\n+    if (!isValidKey(key)) {\n+        return;\n+    }\n+    const tval = target[key];\n+    const sval = source[key];\n+    if (isObject(tval) && isObject(sval)) {\n+        \u002F\u002F eslint-disable-next-line @typescript-eslint\u002Fno-use-before-define\n+        merge(tval, sval, options);\n+    } else {\n+        target[key] = clone(sval);\n+    }\n+}\n+function merge(target, source, options) {\n+    const sources = isArray(source) ? source : [\n+        source\n+    ];\n+    const ilen = sources.length;\n+    if (!isObject(target)) {\n+        return target;\n+    }\n+    options = options || {};\n+    const merger = options.merger || _merger;\n+    let current;\n+    for(let i = 0; i \u003C ilen; ++i){\n+        current = sources[i];\n+        if (!isObject(current)) {\n+            continue;\n+        }\n+        const keys = Object.keys(current);\n+        for(let k = 0, klen = keys.length; k \u003C klen; ++k){\n+            merger(keys[k], target, current, options);\n+        }\n+    }\n+    return target;\n+}\n+function mergeIf(target, source) {\n+    \u002F\u002F eslint-disable-next-line @typescript-eslint\u002Fno-use-before-define\n+    return merge(target, source, {\n+        merger: _mergerIf\n+    });\n+}\n+\u002F**\n+ * Merges source[key] in target[key] only if target[key] is undefined.\n+ * @private\n+ *\u002F function _mergerIf(key, target, source) {\n+    if (!isValidKey(key)) {\n+        return;\n+    }\n+    const tval = target[key];\n+    const sval = source[key];\n+    if (isObject(tval) && isObject(sval)) {\n+        mergeIf(tval, sval);\n+    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n+        target[key] = clone(sval);\n+    }\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _deprecated(scope, value, previous, current) {\n+    if (value !== undefined) {\n+        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n+    }\n+}\n+\u002F\u002F resolveObjectKey resolver cache\n+const keyResolvers = {\n+    \u002F\u002F Chart.helpers.core resolveObjectKey should resolve empty key to root object\n+    '': (v)=>v,\n+    \u002F\u002F default resolvers\n+    x: (o)=>o.x,\n+    y: (o)=>o.y\n+};\n+\u002F**\n+ * @private\n+ *\u002F function _splitKey(key) {\n+    const parts = key.split('.');\n+    const keys = [];\n+    let tmp = '';\n+    for (const part of parts){\n+        tmp += part;\n+        if (tmp.endsWith('\\\\')) {\n+            tmp = tmp.slice(0, -1) + '.';\n+        } else {\n+            keys.push(tmp);\n+            tmp = '';\n+        }\n+    }\n+    return keys;\n+}\n+function _getKeyResolver(key) {\n+    const keys = _splitKey(key);\n+    return (obj)=>{\n+        for (const k of keys){\n+            if (k === '') {\n+                break;\n+            }\n+            obj = obj && obj[k];\n+        }\n+        return obj;\n+    };\n+}\n+function resolveObjectKey(obj, key) {\n+    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n+    return resolver(obj);\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _capitalize(str) {\n+    return str.charAt(0).toUpperCase() + str.slice(1);\n+}\n+const defined = (value)=>typeof value !== 'undefined';\n+const isFunction = (value)=>typeof value === 'function';\n+\u002F\u002F Adapted from https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F31128855\u002Fcomparing-ecma6-sets-for-equality#31129384\n+const setsEqual = (a, b)=>{\n+    if (a.size !== b.size) {\n+        return false;\n+    }\n+    for (const item of a){\n+        if (!b.has(item)) {\n+            return false;\n+        }\n+    }\n+    return true;\n+};\n+\u002F**\n+ * @param e - The event\n+ * @private\n+ *\u002F function _isClickEvent(e) {\n+    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n+}\n+\n+\u002F**\n+ * @alias Chart.helpers.math\n+ * @namespace\n+ *\u002F const PI = Math.PI;\n+const TAU = 2 * PI;\n+const PITAU = TAU + PI;\n+const INFINITY = Number.POSITIVE_INFINITY;\n+const RAD_PER_DEG = PI \u002F 180;\n+const HALF_PI = PI \u002F 2;\n+const QUARTER_PI = PI \u002F 4;\n+const TWO_THIRDS_PI = PI * 2 \u002F 3;\n+const log10 = Math.log10;\n+const sign = Math.sign;\n+function almostEquals(x, y, epsilon) {\n+    return Math.abs(x - y) \u003C epsilon;\n+}\n+\u002F**\n+ * Implementation of the nice number algorithm used in determining where axis labels will go\n+ *\u002F function niceNum(range) {\n+    const roundedRange = Math.round(range);\n+    range = almostEquals(range, roundedRange, range \u002F 1000) ? roundedRange : range;\n+    const niceRange = Math.pow(10, Math.floor(log10(range)));\n+    const fraction = range \u002F niceRange;\n+    const niceFraction = fraction \u003C= 1 ? 1 : fraction \u003C= 2 ? 2 : fraction \u003C= 5 ? 5 : 10;\n+    return niceFraction * niceRange;\n+}\n+\u002F**\n+ * Returns an array of factors sorted from 1 to sqrt(value)\n+ * @private\n+ *\u002F function _factorize(value) {\n+    const result = [];\n+    const sqrt = Math.sqrt(value);\n+    let i;\n+    for(i = 1; i \u003C sqrt; i++){\n+        if (value % i === 0) {\n+            result.push(i);\n+            result.push(value \u002F i);\n+        }\n+    }\n+    if (sqrt === (sqrt | 0)) {\n+        result.push(sqrt);\n+    }\n+    result.sort((a, b)=>a - b).pop();\n+    return result;\n+}\n+\u002F**\n+ * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n+ *\u002F function isNonPrimitive(n) {\n+    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n+}\n+function isNumber(n) {\n+    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n+}\n+function almostWhole(x, epsilon) {\n+    const rounded = Math.round(x);\n+    return rounded - epsilon \u003C= x && rounded + epsilon >= x;\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _setMinAndMaxByKey(array, target, property) {\n+    let i, ilen, value;\n+    for(i = 0, ilen = array.length; i \u003C ilen; i++){\n+        value = array[i][property];\n+        if (!isNaN(value)) {\n+            target.min = Math.min(target.min, value);\n+            target.max = Math.max(target.max, value);\n+        }\n+    }\n+}\n+function toRadians(degrees) {\n+    return degrees * (PI \u002F 180);\n+}\n+function toDegrees(radians) {\n+    return radians * (180 \u002F PI);\n+}\n+\u002F**\n+ * Returns the number of decimal places\n+ * i.e. the number of digits after the decimal point, of the value of this Number.\n+ * @param x - A number.\n+ * @returns The number of decimal places.\n+ * @private\n+ *\u002F function _decimalPlaces(x) {\n+    if (!isNumberFinite(x)) {\n+        return;\n+    }\n+    let e = 1;\n+    let p = 0;\n+    while(Math.round(x * e) \u002F e !== x){\n+        e *= 10;\n+        p++;\n+    }\n+    return p;\n+}\n+\u002F\u002F Gets the angle from vertical upright to the point about a centre.\n+function getAngleFromPoint(centrePoint, anglePoint) {\n+    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n+    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n+    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n+    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n+    if (angle \u003C -0.5 * PI) {\n+        angle += TAU; \u002F\u002F make sure the returned angle is in the range of (-PI\u002F2, 3PI\u002F2]\n+    }\n+    return {\n+        angle,\n+        distance: radialDistanceFromCenter\n+    };\n+}\n+function distanceBetweenPoints(pt1, pt2) {\n+    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n+}\n+\u002F**\n+ * Shortest distance between angles, in either direction.\n+ * @private\n+ *\u002F function _angleDiff(a, b) {\n+    return (a - b + PITAU) % TAU - PI;\n+}\n+\u002F**\n+ * Normalize angle to be between 0 and 2*PI\n+ * @private\n+ *\u002F function _normalizeAngle(a) {\n+    return (a % TAU + TAU) % TAU;\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n+    const a = _normalizeAngle(angle);\n+    const s = _normalizeAngle(start);\n+    const e = _normalizeAngle(end);\n+    const angleToStart = _normalizeAngle(s - a);\n+    const angleToEnd = _normalizeAngle(e - a);\n+    const startToAngle = _normalizeAngle(a - s);\n+    const endToAngle = _normalizeAngle(a - e);\n+    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle \u003C endToAngle;\n+}\n+\u002F**\n+ * Limit `value` between `min` and `max`\n+ * @param value\n+ * @param min\n+ * @param max\n+ * @private\n+ *\u002F function _limitValue(value, min, max) {\n+    return Math.max(min, Math.min(max, value));\n+}\n+\u002F**\n+ * @param {number} value\n+ * @private\n+ *\u002F function _int16Range(value) {\n+    return _limitValue(value, -32768, 32767);\n+}\n+\u002F**\n+ * @param value\n+ * @param start\n+ * @param end\n+ * @param [epsilon]\n+ * @private\n+ *\u002F function _isBetween(value, start, end, epsilon = 1e-6) {\n+    return value >= Math.min(start, end) - epsilon && value \u003C= Math.max(start, end) + epsilon;\n+}\n+\n+function _lookup(table, value, cmp) {\n+    cmp = cmp || ((index)=>table[index] \u003C value);\n+    let hi = table.length - 1;\n+    let lo = 0;\n+    let mid;\n+    while(hi - lo > 1){\n+        mid = lo + hi >> 1;\n+        if (cmp(mid)) {\n+            lo = mid;\n+        } else {\n+            hi = mid;\n+        }\n+    }\n+    return {\n+        lo,\n+        hi\n+    };\n+}\n+\u002F**\n+ * Binary search\n+ * @param table - the table search. must be sorted!\n+ * @param key - property name for the value in each entry\n+ * @param value - value to find\n+ * @param last - lookup last index\n+ * @private\n+ *\u002F const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n+        const ti = table[index][key];\n+        return ti \u003C value || ti === value && table[index + 1][key] === value;\n+    } : (index)=>table[index][key] \u003C value);\n+\u002F**\n+ * Reverse binary search\n+ * @param table - the table search. must be sorted!\n+ * @param key - property name for the value in each entry\n+ * @param value - value to find\n+ * @private\n+ *\u002F const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n+\u002F**\n+ * Return subset of `values` between `min` and `max` inclusive.\n+ * Values are assumed to be in sorted order.\n+ * @param values - sorted array of values\n+ * @param min - min value\n+ * @param max - max value\n+ *\u002F function _filterBetween(values, min, max) {\n+    let start = 0;\n+    let end = values.length;\n+    while(start \u003C end && values[start] \u003C min){\n+        start++;\n+    }\n+    while(end > start && values[end - 1] > max){\n+        end--;\n+    }\n+    return start > 0 || end \u003C values.length ? values.slice(start, end) : values;\n+}\n+const arrayEvents = [\n+    'push',\n+    'pop',\n+    'shift',\n+    'splice',\n+    'unshift'\n+];\n+function listenArrayEvents(array, listener) {\n+    if (array._chartjs) {\n+        array._chartjs.listeners.push(listener);\n+        return;\n+    }\n+    Object.defineProperty(array, '_chartjs', {\n+        configurable: true,\n+        enumerable: false,\n+        value: {\n+            listeners: [\n+                listener\n+            ]\n+        }\n+    });\n+    arrayEvents.forEach((key)=>{\n+        const method = '_onData' + _capitalize(key);\n+        const base = array[key];\n+        Object.defineProperty(array, key, {\n+            configurable: true,\n+            enumerable: false,\n+            value (...args) {\n+                const res = base.apply(this, args);\n+                array._chartjs.listeners.forEach((object)=>{\n+                    if (typeof object[method] === 'function') {\n+                        object[method](...args);\n+                    }\n+                });\n+                return res;\n+            }\n+        });\n+    });\n+}\n+function unlistenArrayEvents(array, listener) {\n+    const stub = array._chartjs;\n+    if (!stub) {\n+        return;\n+    }\n+    const listeners = stub.listeners;\n+    const index = listeners.indexOf(listener);\n+    if (index !== -1) {\n+        listeners.splice(index, 1);\n+    }\n+    if (listeners.length > 0) {\n+        return;\n+    }\n+    arrayEvents.forEach((key)=>{\n+        delete array[key];\n+    });\n+    delete array._chartjs;\n+}\n+\u002F**\n+ * @param items\n+ *\u002F function _arrayUnique(items) {\n+    const set = new Set(items);\n+    if (set.size === items.length) {\n+        return items;\n+    }\n+    return Array.from(set);\n+}\n+\n+function fontString(pixelSize, fontStyle, fontFamily) {\n+    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n+}\n+\u002F**\n+* Request animation polyfill\n+*\u002F const requestAnimFrame = function() {\n+    if (typeof window === 'undefined') {\n+        return function(callback) {\n+            return callback();\n+        };\n+    }\n+    return window.requestAnimationFrame;\n+}();\n+\u002F**\n+ * Throttles calling `fn` once per animation frame\n+ * Latest arguments are used on the actual call\n+ *\u002F function throttled(fn, thisArg) {\n+    let argsToUse = [];\n+    let ticking = false;\n+    return function(...args) {\n+        \u002F\u002F Save the args for use later\n+        argsToUse = args;\n+        if (!ticking) {\n+            ticking = true;\n+            requestAnimFrame.call(window, ()=>{\n+                ticking = false;\n+                fn.apply(thisArg, argsToUse);\n+            });\n+        }\n+    };\n+}\n+\u002F**\n+ * Debounces calling `fn` for `delay` ms\n+ *\u002F function debounce(fn, delay) {\n+    let timeout;\n+    return function(...args) {\n+        if (delay) {\n+            clearTimeout(timeout);\n+            timeout = setTimeout(fn, delay, args);\n+        } else {\n+            fn.apply(this, args);\n+        }\n+        return delay;\n+    };\n+}\n+\u002F**\n+ * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n+ * @private\n+ *\u002F const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n+\u002F**\n+ * Returns `start`, `end` or `(start + end) \u002F 2` depending on `align`. Defaults to `center`\n+ * @private\n+ *\u002F const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) \u002F 2;\n+\u002F**\n+ * Returns `left`, `right` or `(left + right) \u002F 2` depending on `align`. Defaults to `left`\n+ * @private\n+ *\u002F const _textX = (align, left, right, rtl)=>{\n+    const check = rtl ? 'left' : 'right';\n+    return align === check ? right : align === 'center' ? (left + right) \u002F 2 : left;\n+};\n+\u002F**\n+ * Return start and count of visible points.\n+ * @private\n+ *\u002F function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n+    const pointCount = points.length;\n+    let start = 0;\n+    let count = pointCount;\n+    if (meta._sorted) {\n+        const { iScale , vScale , _parsed  } = meta;\n+        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n+        const axis = iScale.axis;\n+        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n+        if (minDefined) {\n+            start = Math.min(\u002F\u002F @ts-expect-error Need to type _parsed\n+            _lookupByKey(_parsed, axis, min).lo, \u002F\u002F @ts-expect-error Need to fix types on _lookupByKey\n+            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n+            if (spanGaps) {\n+                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n+                start -= Math.max(0, distanceToDefinedLo);\n+            }\n+            start = _limitValue(start, 0, pointCount - 1);\n+        }\n+        if (maxDefined) {\n+            let end = Math.max(\u002F\u002F @ts-expect-error Need to type _parsed\n+            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, \u002F\u002F @ts-expect-error Need to fix types on _lookupByKey\n+            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n+            if (spanGaps) {\n+                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n+                end += Math.max(0, distanceToDefinedHi);\n+            }\n+            count = _limitValue(end, start, pointCount) - start;\n+        } else {\n+            count = pointCount - start;\n+        }\n+    }\n+    return {\n+        start,\n+        count\n+    };\n+}\n+\u002F**\n+ * Checks if the scale ranges have changed.\n+ * @param {object} meta - dataset meta.\n+ * @returns {boolean}\n+ * @private\n+ *\u002F function _scaleRangesChanged(meta) {\n+    const { xScale , yScale , _scaleRanges  } = meta;\n+    const newRanges = {\n+        xmin: xScale.min,\n+        xmax: xScale.max,\n+        ymin: yScale.min,\n+        ymax: yScale.max\n+    };\n+    if (!_scaleRanges) {\n+        meta._scaleRanges = newRanges;\n+        return true;\n+    }\n+    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n+    Object.assign(_scaleRanges, newRanges);\n+    return changed;\n+}\n+\n+const atEdge = (t)=>t === 0 || t === 1;\n+const elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU \u002F p));\n+const elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU \u002F p) + 1;\n+\u002F**\n+ * Easing functions adapted from Robert Penner's easing equations.\n+ * @namespace Chart.helpers.easing.effects\n+ * @see http:\u002F\u002Fwww.robertpenner.com\u002Feasing\u002F\n+ *\u002F const effects = {\n+    linear: (t)=>t,\n+    easeInQuad: (t)=>t * t,\n+    easeOutQuad: (t)=>-t * (t - 2),\n+    easeInOutQuad: (t)=>(t \u002F= 0.5) \u003C 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n+    easeInCubic: (t)=>t * t * t,\n+    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n+    easeInOutCubic: (t)=>(t \u002F= 0.5) \u003C 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n+    easeInQuart: (t)=>t * t * t * t,\n+    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n+    easeInOutQuart: (t)=>(t \u002F= 0.5) \u003C 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n+    easeInQuint: (t)=>t * t * t * t * t,\n+    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n+    easeInOutQuint: (t)=>(t \u002F= 0.5) \u003C 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n+    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n+    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n+    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n+    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n+    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n+    easeInOutExpo: (t)=>atEdge(t) ? t : t \u003C 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n+    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n+    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n+    easeInOutCirc: (t)=>(t \u002F= 0.5) \u003C 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n+    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n+    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n+    easeInOutElastic (t) {\n+        const s = 0.1125;\n+        const p = 0.45;\n+        return atEdge(t) ? t : t \u003C 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n+    },\n+    easeInBack (t) {\n+        const s = 1.70158;\n+        return t * t * ((s + 1) * t - s);\n+    },\n+    easeOutBack (t) {\n+        const s = 1.70158;\n+        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n+    },\n+    easeInOutBack (t) {\n+        let s = 1.70158;\n+        if ((t \u002F= 0.5) \u003C 1) {\n+            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n+        }\n+        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n+    },\n+    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n+    easeOutBounce (t) {\n+        const m = 7.5625;\n+        const d = 2.75;\n+        if (t \u003C 1 \u002F d) {\n+            return m * t * t;\n+        }\n+        if (t \u003C 2 \u002F d) {\n+            return m * (t -= 1.5 \u002F d) * t + 0.75;\n+        }\n+        if (t \u003C 2.5 \u002F d) {\n+            return m * (t -= 2.25 \u002F d) * t + 0.9375;\n+        }\n+        return m * (t -= 2.625 \u002F d) * t + 0.984375;\n+    },\n+    easeInOutBounce: (t)=>t \u003C 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n+};\n+\n+function isPatternOrGradient(value) {\n+    if (value && typeof value === 'object') {\n+        const type = value.toString();\n+        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n+    }\n+    return false;\n+}\n+function color(value) {\n+    return isPatternOrGradient(value) ? value : new _kurkle_color__WEBPACK_IMPORTED_MODULE_0__.Color(value);\n+}\n+function getHoverColor(value) {\n+    return isPatternOrGradient(value) ? value : new _kurkle_color__WEBPACK_IMPORTED_MODULE_0__.Color(value).saturate(0.5).darken(0.1).hexString();\n+}\n+\n+const numbers = [\n+    'x',\n+    'y',\n+    'borderWidth',\n+    'radius',\n+    'tension'\n+];\n+const colors = [\n+    'color',\n+    'borderColor',\n+    'backgroundColor'\n+];\n+function applyAnimationsDefaults(defaults) {\n+    defaults.set('animation', {\n+        delay: undefined,\n+        duration: 1000,\n+        easing: 'easeOutQuart',\n+        fn: undefined,\n+        from: undefined,\n+        loop: undefined,\n+        to: undefined,\n+        type: undefined\n+    });\n+    defaults.describe('animation', {\n+        _fallback: false,\n+        _indexable: false,\n+        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n+    });\n+    defaults.set('animations', {\n+        colors: {\n+            type: 'color',\n+            properties: colors\n+        },\n+        numbers: {\n+            type: 'number',\n+            properties: numbers\n+        }\n+    });\n+    defaults.describe('animations', {\n+        _fallback: 'animation'\n+    });\n+    defaults.set('transitions', {\n+        active: {\n+            animation: {\n+                duration: 400\n+            }\n+        },\n+        resize: {\n+            animation: {\n+                duration: 0\n+            }\n+        },\n+        show: {\n+            animations: {\n+                colors: {\n+                    from: 'transparent'\n+                },\n+                visible: {\n+                    type: 'boolean',\n+                    duration: 0\n+                }\n+            }\n+        },\n+        hide: {\n+            animations: {\n+                colors: {\n+                    to: 'transparent'\n+                },\n+                visible: {\n+                    type: 'boolean',\n+                    easing: 'linear',\n+                    fn: (v)=>v | 0\n+                }\n+            }\n+        }\n+    });\n+}\n+\n+function applyLayoutsDefaults(defaults) {\n+    defaults.set('layout', {\n+        autoPadding: true,\n+        padding: {\n+            top: 0,\n+            right: 0,\n+            bottom: 0,\n+            left: 0\n+        }\n+    });\n+}\n+\n+const intlCache = new Map();\n+function getNumberFormat(locale, options) {\n+    options = options || {};\n+    const cacheKey = locale + JSON.stringify(options);\n+    let formatter = intlCache.get(cacheKey);\n+    if (!formatter) {\n+        formatter = new Intl.NumberFormat(locale, options);\n+        intlCache.set(cacheKey, formatter);\n+    }\n+    return formatter;\n+}\n+function formatNumber(num, locale, options) {\n+    return getNumberFormat(locale, options).format(num);\n+}\n+\n+const formatters = {\n+ values (value) {\n+        return isArray(value) ?  value : '' + value;\n+    },\n+ numeric (tickValue, index, ticks) {\n+        if (tickValue === 0) {\n+            return '0';\n+        }\n+        const locale = this.chart.options.locale;\n+        let notation;\n+        let delta = tickValue;\n+        if (ticks.length > 1) {\n+            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n+            if (maxTick \u003C 1e-4 || maxTick > 1e+15) {\n+                notation = 'scientific';\n+            }\n+            delta = calculateDelta(tickValue, ticks);\n+        }\n+        const logDelta = log10(Math.abs(delta));\n+        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n+        const options = {\n+            notation,\n+            minimumFractionDigits: numDecimal,\n+            maximumFractionDigits: numDecimal\n+        };\n+        Object.assign(options, this.options.ticks.format);\n+        return formatNumber(tickValue, locale, options);\n+    },\n+ logarithmic (tickValue, index, ticks) {\n+        if (tickValue === 0) {\n+            return '0';\n+        }\n+        const remain = ticks[index].significand || tickValue \u002F Math.pow(10, Math.floor(log10(tickValue)));\n+        if ([\n+            1,\n+            2,\n+            3,\n+            5,\n+            10,\n+            15\n+        ].includes(remain) || index > 0.8 * ticks.length) {\n+            return formatters.numeric.call(this, tickValue, index, ticks);\n+        }\n+        return '';\n+    }\n+};\n+function calculateDelta(tickValue, ticks) {\n+    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n+    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n+        delta = tickValue - Math.floor(tickValue);\n+    }\n+    return delta;\n+}\n+ var Ticks = {\n+    formatters\n+};\n+\n+function applyScaleDefaults(defaults) {\n+    defaults.set('scale', {\n+        display: true,\n+        offset: false,\n+        reverse: false,\n+        beginAtZero: false,\n+ bounds: 'ticks',\n+        clip: true,\n+ grace: 0,\n+        grid: {\n+            display: true,\n+            lineWidth: 1,\n+            drawOnChartArea: true,\n+            drawTicks: true,\n+            tickLength: 8,\n+            tickWidth: (_ctx, options)=>options.lineWidth,\n+            tickColor: (_ctx, options)=>options.color,\n+            offset: false\n+        },\n+        border: {\n+            display: true,\n+            dash: [],\n+            dashOffset: 0.0,\n+            width: 1\n+        },\n+        title: {\n+            display: false,\n+            text: '',\n+            padding: {\n+                top: 4,\n+                bottom: 4\n+            }\n+        },\n+        ticks: {\n+            minRotation: 0,\n+            maxRotation: 50,\n+            mirror: false,\n+            textStrokeWidth: 0,\n+            textStrokeColor: '',\n+            padding: 3,\n+            display: true,\n+            autoSkip: true,\n+            autoSkipPadding: 3,\n+            labelOffset: 0,\n+            callback: Ticks.formatters.values,\n+            minor: {},\n+            major: {},\n+            align: 'center',\n+            crossAlign: 'near',\n+            showLabelBackdrop: false,\n+            backdropColor: 'rgba(255, 255, 255, 0.75)',\n+            backdropPadding: 2\n+        }\n+    });\n+    defaults.route('scale.ticks', 'color', '', 'color');\n+    defaults.route('scale.grid', 'color', '', 'borderColor');\n+    defaults.route('scale.border', 'color', '', 'borderColor');\n+    defaults.route('scale.title', 'color', '', 'color');\n+    defaults.describe('scale', {\n+        _fallback: false,\n+        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n+        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n+    });\n+    defaults.describe('scales', {\n+        _fallback: 'scale'\n+    });\n+    defaults.describe('scale.ticks', {\n+        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n+        _indexable: (name)=>name !== 'backdropPadding'\n+    });\n+}\n+\n+const overrides = Object.create(null);\n+const descriptors = Object.create(null);\n+ function getScope$1(node, key) {\n+    if (!key) {\n+        return node;\n+    }\n+    const keys = key.split('.');\n+    for(let i = 0, n = keys.length; i \u003C n; ++i){\n+        const k = keys[i];\n+        node = node[k] || (node[k] = Object.create(null));\n+    }\n+    return node;\n+}\n+function set(root, scope, values) {\n+    if (typeof scope === 'string') {\n+        return merge(getScope$1(root, scope), values);\n+    }\n+    return merge(getScope$1(root, ''), scope);\n+}\n+ class Defaults {\n+    constructor(_descriptors, _appliers){\n+        this.animation = undefined;\n+        this.backgroundColor = 'rgba(0,0,0,0.1)';\n+        this.borderColor = 'rgba(0,0,0,0.1)';\n+        this.color = '#666';\n+        this.datasets = {};\n+        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n+        this.elements = {};\n+        this.events = [\n+            'mousemove',\n+            'mouseout',\n+            'click',\n+            'touchstart',\n+            'touchmove'\n+        ];\n+        this.font = {\n+            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n+            size: 12,\n+            style: 'normal',\n+            lineHeight: 1.2,\n+            weight: null\n+        };\n+        this.hover = {};\n+        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n+        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n+        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n+        this.indexAxis = 'x';\n+        this.interaction = {\n+            mode: 'nearest',\n+            intersect: true,\n+            includeInvisible: false\n+        };\n+        this.maintainAspectRatio = true;\n+        this.onHover = null;\n+        this.onClick = null;\n+        this.parsing = true;\n+        this.plugins = {};\n+        this.responsive = true;\n+        this.scale = undefined;\n+        this.scales = {};\n+        this.showLine = true;\n+        this.drawActiveElementsOnTop = true;\n+        this.describe(_descriptors);\n+        this.apply(_appliers);\n+    }\n+ set(scope, values) {\n+        return set(this, scope, values);\n+    }\n+ get(scope) {\n+        return getScope$1(this, scope);\n+    }\n+ describe(scope, values) {\n+        return set(descriptors, scope, values);\n+    }\n+    override(scope, values) {\n+        return set(overrides, scope, values);\n+    }\n+ route(scope, name, targetScope, targetName) {\n+        const scopeObject = getScope$1(this, scope);\n+        const targetScopeObject = getScope$1(this, targetScope);\n+        const privateName = '_' + name;\n+        Object.defineProperties(scopeObject, {\n+            [privateName]: {\n+                value: scopeObject[name],\n+                writable: true\n+            },\n+            [name]: {\n+                enumerable: true,\n+                get () {\n+                    const local = this[privateName];\n+                    const target = targetScopeObject[targetName];\n+                    if (isObject(local)) {\n+                        return Object.assign({}, target, local);\n+                    }\n+                    return valueOrDefault(local, target);\n+                },\n+                set (value) {\n+                    this[privateName] = value;\n+                }\n+            }\n+        });\n+    }\n+    apply(appliers) {\n+        appliers.forEach((apply)=>apply(this));\n+    }\n+}\n+var defaults = \u002F* #__PURE__ *\u002F new Defaults({\n+    _scriptable: (name)=>!name.startsWith('on'),\n+    _indexable: (name)=>name !== 'events',\n+    hover: {\n+        _fallback: 'interaction'\n+    },\n+    interaction: {\n+        _scriptable: false,\n+        _indexable: false\n+    }\n+}, [\n+    applyAnimationsDefaults,\n+    applyLayoutsDefaults,\n+    applyScaleDefaults\n+]);\n+\n+\u002F**\n+ * Converts the given font object into a CSS font string.\n+ * @param font - A font object.\n+ * @return The CSS font string. See https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002Ffont\n+ * @private\n+ *\u002F function toFontString(font) {\n+    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n+        return null;\n+    }\n+    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _measureText(ctx, data, gc, longest, string) {\n+    let textWidth = data[string];\n+    if (!textWidth) {\n+        textWidth = data[string] = ctx.measureText(string).width;\n+        gc.push(string);\n+    }\n+    if (textWidth > longest) {\n+        longest = textWidth;\n+    }\n+    return longest;\n+}\n+\u002F**\n+ * @private\n+ *\u002F \u002F\u002F eslint-disable-next-line complexity\n+function _longestText(ctx, font, arrayOfThings, cache) {\n+    cache = cache || {};\n+    let data = cache.data = cache.data || {};\n+    let gc = cache.garbageCollect = cache.garbageCollect || [];\n+    if (cache.font !== font) {\n+        data = cache.data = {};\n+        gc = cache.garbageCollect = [];\n+        cache.font = font;\n+    }\n+    ctx.save();\n+    ctx.font = font;\n+    let longest = 0;\n+    const ilen = arrayOfThings.length;\n+    let i, j, jlen, thing, nestedThing;\n+    for(i = 0; i \u003C ilen; i++){\n+        thing = arrayOfThings[i];\n+        \u002F\u002F Undefined strings and arrays should not be measured\n+        if (thing !== undefined && thing !== null && !isArray(thing)) {\n+            longest = _measureText(ctx, data, gc, longest, thing);\n+        } else if (isArray(thing)) {\n+            \u002F\u002F if it is an array lets measure each element\n+            \u002F\u002F to do maybe simplify this function a bit so we can do this more recursively?\n+            for(j = 0, jlen = thing.length; j \u003C jlen; j++){\n+                nestedThing = thing[j];\n+                \u002F\u002F Undefined strings and arrays should not be measured\n+                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n+                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n+                }\n+            }\n+        }\n+    }\n+    ctx.restore();\n+    const gcLen = gc.length \u002F 2;\n+    if (gcLen > arrayOfThings.length) {\n+        for(i = 0; i \u003C gcLen; i++){\n+            delete data[gc[i]];\n+        }\n+        gc.splice(0, gcLen);\n+    }\n+    return longest;\n+}\n+\u002F**\n+ * Returns the aligned pixel value to avoid anti-aliasing blur\n+ * @param chart - The chart instance.\n+ * @param pixel - A pixel value.\n+ * @param width - The width of the element.\n+ * @returns The aligned pixel value.\n+ * @private\n+ *\u002F function _alignPixel(chart, pixel, width) {\n+    const devicePixelRatio = chart.currentDevicePixelRatio;\n+    const halfWidth = width !== 0 ? Math.max(width \u002F 2, 0.5) : 0;\n+    return Math.round((pixel - halfWidth) * devicePixelRatio) \u002F devicePixelRatio + halfWidth;\n+}\n+\u002F**\n+ * Clears the entire canvas.\n+ *\u002F function clearCanvas(canvas, ctx) {\n+    if (!ctx && !canvas) {\n+        return;\n+    }\n+    ctx = ctx || canvas.getContext('2d');\n+    ctx.save();\n+    \u002F\u002F canvas.width and canvas.height do not consider the canvas transform,\n+    \u002F\u002F while clearRect does\n+    ctx.resetTransform();\n+    ctx.clearRect(0, 0, canvas.width, canvas.height);\n+    ctx.restore();\n+}\n+function drawPoint(ctx, options, x, y) {\n+    \u002F\u002F eslint-disable-next-line @typescript-eslint\u002Fno-use-before-define\n+    drawPointLegend(ctx, options, x, y, null);\n+}\n+\u002F\u002F eslint-disable-next-line complexity\n+function drawPointLegend(ctx, options, x, y, w) {\n+    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n+    const style = options.pointStyle;\n+    const rotation = options.rotation;\n+    const radius = options.radius;\n+    let rad = (rotation || 0) * RAD_PER_DEG;\n+    if (style && typeof style === 'object') {\n+        type = style.toString();\n+        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n+            ctx.save();\n+            ctx.translate(x, y);\n+            ctx.rotate(rad);\n+            ctx.drawImage(style, -style.width \u002F 2, -style.height \u002F 2, style.width, style.height);\n+            ctx.restore();\n+            return;\n+        }\n+    }\n+    if (isNaN(radius) || radius \u003C= 0) {\n+        return;\n+    }\n+    ctx.beginPath();\n+    switch(style){\n+        \u002F\u002F Default includes circle\n+        default:\n+            if (w) {\n+                ctx.ellipse(x, y, w \u002F 2, radius, 0, 0, TAU);\n+            } else {\n+                ctx.arc(x, y, radius, 0, TAU);\n+            }\n+            ctx.closePath();\n+            break;\n+        case 'triangle':\n+            width = w ? w \u002F 2 : radius;\n+            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n+            rad += TWO_THIRDS_PI;\n+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n+            rad += TWO_THIRDS_PI;\n+            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n+            ctx.closePath();\n+            break;\n+        case 'rectRounded':\n+            \u002F\u002F NOTE: the rounded rect implementation changed to use `arc` instead of\n+            \u002F\u002F `quadraticCurveTo` since it generates better results when rect is\n+            \u002F\u002F almost a circle. 0.516 (instead of 0.5) produces results with visually\n+            \u002F\u002F closer proportion to the previous impl and it is inscribed in the\n+            \u002F\u002F circle with `radius`. For more details, see the following PRs:\n+            \u002F\u002F https:\u002F\u002Fgithub.com\u002Fchartjs\u002FChart.js\u002Fissues\u002F5597\n+            \u002F\u002F https:\u002F\u002Fgithub.com\u002Fchartjs\u002FChart.js\u002Fissues\u002F5858\n+            cornerRadius = radius * 0.516;\n+            size = radius - cornerRadius;\n+            xOffset = Math.cos(rad + QUARTER_PI) * size;\n+            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w \u002F 2 - cornerRadius : size);\n+            yOffset = Math.sin(rad + QUARTER_PI) * size;\n+            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w \u002F 2 - cornerRadius : size);\n+            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n+            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n+            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n+            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n+            ctx.closePath();\n+            break;\n+        case 'rect':\n+            if (!rotation) {\n+                size = Math.SQRT1_2 * radius;\n+                width = w ? w \u002F 2 : size;\n+                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n+                break;\n+            }\n+            rad += QUARTER_PI;\n+        \u002F* falls through *\u002F case 'rectRot':\n+            xOffsetW = Math.cos(rad) * (w ? w \u002F 2 : radius);\n+            xOffset = Math.cos(rad) * radius;\n+            yOffset = Math.sin(rad) * radius;\n+            yOffsetW = Math.sin(rad) * (w ? w \u002F 2 : radius);\n+            ctx.moveTo(x - xOffsetW, y - yOffset);\n+            ctx.lineTo(x + yOffsetW, y - xOffset);\n+            ctx.lineTo(x + xOffsetW, y + yOffset);\n+            ctx.lineTo(x - yOffsetW, y + xOffset);\n+            ctx.closePath();\n+            break;\n+        case 'crossRot':\n+            rad += QUARTER_PI;\n+        \u002F* falls through *\u002F case 'cross':\n+            xOffsetW = Math.cos(rad) * (w ? w \u002F 2 : radius);\n+            xOffset = Math.cos(rad) * radius;\n+            yOffset = Math.sin(rad) * radius;\n+            yOffsetW = Math.sin(rad) * (w ? w \u002F 2 : radius);\n+            ctx.moveTo(x - xOffsetW, y - yOffset);\n+            ctx.lineTo(x + xOffsetW, y + yOffset);\n+            ctx.moveTo(x + yOffsetW, y - xOffset);\n+            ctx.lineTo(x - yOffsetW, y + xOffset);\n+            break;\n+        case 'star':\n+            xOffsetW = Math.cos(rad) * (w ? w \u002F 2 : radius);\n+            xOffset = Math.cos(rad) * radius;\n+            yOffset = Math.sin(rad) * radius;\n+            yOffsetW = Math.sin(rad) * (w ? w \u002F 2 : radius);\n+            ctx.moveTo(x - xOffsetW, y - yOffset);\n+            ctx.lineTo(x + xOffsetW, y + yOffset);\n+            ctx.moveTo(x + yOffsetW, y - xOffset);\n+            ctx.lineTo(x - yOffsetW, y + xOffset);\n+            rad += QUARTER_PI;\n+            xOffsetW = Math.cos(rad) * (w ? w \u002F 2 : radius);\n+            xOffset = Math.cos(rad) * radius;\n+            yOffset = Math.sin(rad) * radius;\n+            yOffsetW = Math.sin(rad) * (w ? w \u002F 2 : radius);\n+            ctx.moveTo(x - xOffsetW, y - yOffset);\n+            ctx.lineTo(x + xOffsetW, y + yOffset);\n+            ctx.moveTo(x + yOffsetW, y - xOffset);\n+            ctx.lineTo(x - yOffsetW, y + xOffset);\n+            break;\n+        case 'line':\n+            xOffset = w ? w \u002F 2 : Math.cos(rad) * radius;\n+            yOffset = Math.sin(rad) * radius;\n+            ctx.moveTo(x - xOffset, y - yOffset);\n+            ctx.lineTo(x + xOffset, y + yOffset);\n+            break;\n+        case 'dash':\n+            ctx.moveTo(x, y);\n+            ctx.lineTo(x + Math.cos(rad) * (w ? w \u002F 2 : radius), y + Math.sin(rad) * radius);\n+            break;\n+        case false:\n+            ctx.closePath();\n+            break;\n+    }\n+    ctx.fill();\n+    if (options.borderWidth > 0) {\n+        ctx.stroke();\n+    }\n+}\n+\u002F**\n+ * Returns true if the point is inside the rectangle\n+ * @param point - The point to test\n+ * @param area - The rectangle\n+ * @param margin - allowed margin\n+ * @private\n+ *\u002F function _isPointInArea(point, area, margin) {\n+    margin = margin || 0.5; \u002F\u002F margin - default is to match rounded decimals\n+    return !area || point && point.x > area.left - margin && point.x \u003C area.right + margin && point.y > area.top - margin && point.y \u003C area.bottom + margin;\n+}\n+function clipArea(ctx, area) {\n+    ctx.save();\n+    ctx.beginPath();\n+    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n+    ctx.clip();\n+}\n+function unclipArea(ctx) {\n+    ctx.restore();\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _steppedLineTo(ctx, previous, target, flip, mode) {\n+    if (!previous) {\n+        return ctx.lineTo(target.x, target.y);\n+    }\n+    if (mode === 'middle') {\n+        const midpoint = (previous.x + target.x) \u002F 2.0;\n+        ctx.lineTo(midpoint, previous.y);\n+        ctx.lineTo(midpoint, target.y);\n+    } else if (mode === 'after' !== !!flip) {\n+        ctx.lineTo(previous.x, target.y);\n+    } else {\n+        ctx.lineTo(target.x, previous.y);\n+    }\n+    ctx.lineTo(target.x, target.y);\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _bezierCurveTo(ctx, previous, target, flip) {\n+    if (!previous) {\n+        return ctx.lineTo(target.x, target.y);\n+    }\n+    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n+}\n+function setRenderOpts(ctx, opts) {\n+    if (opts.translation) {\n+        ctx.translate(opts.translation[0], opts.translation[1]);\n+    }\n+    if (!isNullOrUndef(opts.rotation)) {\n+        ctx.rotate(opts.rotation);\n+    }\n+    if (opts.color) {\n+        ctx.fillStyle = opts.color;\n+    }\n+    if (opts.textAlign) {\n+        ctx.textAlign = opts.textAlign;\n+    }\n+    if (opts.textBaseline) {\n+        ctx.textBaseline = opts.textBaseline;\n+    }\n+}\n+function decorateText(ctx, x, y, line, opts) {\n+    if (opts.strikethrough || opts.underline) {\n+        \u002F**\n+     * Now that IE11 support has been dropped, we can use more\n+     * of the TextMetrics object. The actual bounding boxes\n+     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n+     * can be safely used.\n+     * See https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FTextMetrics#Browser_compatibility\n+     *\u002F const metrics = ctx.measureText(line);\n+        const left = x - metrics.actualBoundingBoxLeft;\n+        const right = x + metrics.actualBoundingBoxRight;\n+        const top = y - metrics.actualBoundingBoxAscent;\n+        const bottom = y + metrics.actualBoundingBoxDescent;\n+        const yDecoration = opts.strikethrough ? (top + bottom) \u002F 2 : bottom;\n+        ctx.strokeStyle = ctx.fillStyle;\n+        ctx.beginPath();\n+        ctx.lineWidth = opts.decorationWidth || 2;\n+        ctx.moveTo(left, yDecoration);\n+        ctx.lineTo(right, yDecoration);\n+        ctx.stroke();\n+    }\n+}\n+function drawBackdrop(ctx, opts) {\n+    const oldColor = ctx.fillStyle;\n+    ctx.fillStyle = opts.color;\n+    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n+    ctx.fillStyle = oldColor;\n+}\n+\u002F**\n+ * Render text onto the canvas\n+ *\u002F function renderText(ctx, text, x, y, font, opts = {}) {\n+    const lines = isArray(text) ? text : [\n+        text\n+    ];\n+    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n+    let i, line;\n+    ctx.save();\n+    ctx.font = font.string;\n+    setRenderOpts(ctx, opts);\n+    for(i = 0; i \u003C lines.length; ++i){\n+        line = lines[i];\n+        if (opts.backdrop) {\n+            drawBackdrop(ctx, opts.backdrop);\n+        }\n+        if (stroke) {\n+            if (opts.strokeColor) {\n+                ctx.strokeStyle = opts.strokeColor;\n+            }\n+            if (!isNullOrUndef(opts.strokeWidth)) {\n+                ctx.lineWidth = opts.strokeWidth;\n+            }\n+            ctx.strokeText(line, x, y, opts.maxWidth);\n+        }\n+        ctx.fillText(line, x, y, opts.maxWidth);\n+        decorateText(ctx, x, y, line, opts);\n+        y += Number(font.lineHeight);\n+    }\n+    ctx.restore();\n+}\n+\u002F**\n+ * Add a path of a rectangle with rounded corners to the current sub-path\n+ * @param ctx - Context\n+ * @param rect - Bounding rect\n+ *\u002F function addRoundedRectPath(ctx, rect) {\n+    const { x , y , w , h , radius  } = rect;\n+    \u002F\u002F top left arc\n+    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n+    \u002F\u002F line from top left to bottom left\n+    ctx.lineTo(x, y + h - radius.bottomLeft);\n+    \u002F\u002F bottom left arc\n+    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n+    \u002F\u002F line from bottom left to bottom right\n+    ctx.lineTo(x + w - radius.bottomRight, y + h);\n+    \u002F\u002F bottom right arc\n+    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n+    \u002F\u002F line from bottom right to top right\n+    ctx.lineTo(x + w, y + radius.topRight);\n+    \u002F\u002F top right arc\n+    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n+    \u002F\u002F line from top right to top left\n+    ctx.lineTo(x + radius.topLeft, y);\n+}\n+\n+const LINE_HEIGHT = \u002F^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$\u002F;\n+const FONT_STYLE = \u002F^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$\u002F;\n+\u002F**\n+ * @alias Chart.helpers.options\n+ * @namespace\n+ *\u002F \u002F**\n+ * Converts the given line height `value` in pixels for a specific font `size`.\n+ * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n+ * @param size - The font size (in pixels) used to resolve relative `value`.\n+ * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n+ * @see https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002Fline-height\n+ * @since 2.7.0\n+ *\u002F function toLineHeight(value, size) {\n+    const matches = ('' + value).match(LINE_HEIGHT);\n+    if (!matches || matches[1] === 'normal') {\n+        return size * 1.2;\n+    }\n+    value = +matches[2];\n+    switch(matches[3]){\n+        case 'px':\n+            return value;\n+        case '%':\n+            value \u002F= 100;\n+            break;\n+    }\n+    return size * value;\n+}\n+const numberOrZero = (v)=>+v || 0;\n+function _readValueToProps(value, props) {\n+    const ret = {};\n+    const objProps = isObject(props);\n+    const keys = objProps ? Object.keys(props) : props;\n+    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n+    for (const prop of keys){\n+        ret[prop] = numberOrZero(read(prop));\n+    }\n+    return ret;\n+}\n+\u002F**\n+ * Converts the given value into a TRBL object.\n+ * @param value - If a number, set the value to all TRBL component,\n+ *  else, if an object, use defined properties and sets undefined ones to 0.\n+ *  x \u002F y are shorthands for same value for left\u002Fright and top\u002Fbottom.\n+ * @returns The padding values (top, right, bottom, left)\n+ * @since 3.0.0\n+ *\u002F function toTRBL(value) {\n+    return _readValueToProps(value, {\n+        top: 'y',\n+        right: 'x',\n+        bottom: 'y',\n+        left: 'x'\n+    });\n+}\n+\u002F**\n+ * Converts the given value into a TRBL corners object (similar with css border-radius).\n+ * @param value - If a number, set the value to all TRBL corner components,\n+ *  else, if an object, use defined properties and sets undefined ones to 0.\n+ * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n+ * @since 3.0.0\n+ *\u002F function toTRBLCorners(value) {\n+    return _readValueToProps(value, [\n+        'topLeft',\n+        'topRight',\n+        'bottomLeft',\n+        'bottomRight'\n+    ]);\n+}\n+\u002F**\n+ * Converts the given value into a padding object with pre-computed width\u002Fheight.\n+ * @param value - If a number, set the value to all TRBL component,\n+ *  else, if an object, use defined properties and sets undefined ones to 0.\n+ *  x \u002F y are shorthands for same value for left\u002Fright and top\u002Fbottom.\n+ * @returns The padding values (top, right, bottom, left, width, height)\n+ * @since 2.7.0\n+ *\u002F function toPadding(value) {\n+    const obj = toTRBL(value);\n+    obj.width = obj.left + obj.right;\n+    obj.height = obj.top + obj.bottom;\n+    return obj;\n+}\n+\u002F**\n+ * Parses font options and returns the font object.\n+ * @param options - A object that contains font options to be parsed.\n+ * @param fallback - A object that contains fallback font options.\n+ * @return The font object.\n+ * @private\n+ *\u002F function toFont(options, fallback) {\n+    options = options || {};\n+    fallback = fallback || defaults.font;\n+    let size = valueOrDefault(options.size, fallback.size);\n+    if (typeof size === 'string') {\n+        size = parseInt(size, 10);\n+    }\n+    let style = valueOrDefault(options.style, fallback.style);\n+    if (style && !('' + style).match(FONT_STYLE)) {\n+        console.warn('Invalid font style specified: \"' + style + '\"');\n+        style = undefined;\n+    }\n+    const font = {\n+        family: valueOrDefault(options.family, fallback.family),\n+        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n+        size,\n+        style,\n+        weight: valueOrDefault(options.weight, fallback.weight),\n+        string: ''\n+    };\n+    font.string = toFontString(font);\n+    return font;\n+}\n+\u002F**\n+ * Evaluates the given `inputs` sequentially and returns the first defined value.\n+ * @param inputs - An array of values, falling back to the last value.\n+ * @param context - If defined and the current value is a function, the value\n+ * is called with `context` as first argument and the result becomes the new input.\n+ * @param index - If defined and the current value is an array, the value\n+ * at `index` become the new input.\n+ * @param info - object to return information about resolution in\n+ * @param info.cacheable - Will be set to `false` if option is not cacheable.\n+ * @since 2.7.0\n+ *\u002F function resolve(inputs, context, index, info) {\n+    let cacheable = true;\n+    let i, ilen, value;\n+    for(i = 0, ilen = inputs.length; i \u003C ilen; ++i){\n+        value = inputs[i];\n+        if (value === undefined) {\n+            continue;\n+        }\n+        if (context !== undefined && typeof value === 'function') {\n+            value = value(context);\n+            cacheable = false;\n+        }\n+        if (index !== undefined && isArray(value)) {\n+            value = value[index % value.length];\n+            cacheable = false;\n+        }\n+        if (value !== undefined) {\n+            if (info && !cacheable) {\n+                info.cacheable = false;\n+            }\n+            return value;\n+        }\n+    }\n+}\n+\u002F**\n+ * @param minmax\n+ * @param grace\n+ * @param beginAtZero\n+ * @private\n+ *\u002F function _addGrace(minmax, grace, beginAtZero) {\n+    const { min , max  } = minmax;\n+    const change = toDimension(grace, (max - min) \u002F 2);\n+    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n+    return {\n+        min: keepZero(min, -Math.abs(change)),\n+        max: keepZero(max, change)\n+    };\n+}\n+function createContext(parentContext, context) {\n+    return Object.assign(Object.create(parentContext), context);\n+}\n+\n+\u002F**\n+ * Creates a Proxy for resolving raw values for options.\n+ * @param scopes - The option scopes to look for values, in resolution order\n+ * @param prefixes - The prefixes for values, in resolution order.\n+ * @param rootScopes - The root option scopes\n+ * @param fallback - Parent scopes fallback\n+ * @param getTarget - callback for getting the target for changed values\n+ * @returns Proxy\n+ * @private\n+ *\u002F function _createResolver(scopes, prefixes = [\n+    ''\n+], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n+    const finalRootScopes = rootScopes || scopes;\n+    if (typeof fallback === 'undefined') {\n+        fallback = _resolve('_fallback', scopes);\n+    }\n+    const cache = {\n+        [Symbol.toStringTag]: 'Object',\n+        _cacheable: true,\n+        _scopes: scopes,\n+        _rootScopes: finalRootScopes,\n+        _fallback: fallback,\n+        _getTarget: getTarget,\n+        override: (scope)=>_createResolver([\n+                scope,\n+                ...scopes\n+            ], prefixes, finalRootScopes, fallback)\n+    };\n+    return new Proxy(cache, {\n+        \u002F**\n+     * A trap for the delete operator.\n+     *\u002F deleteProperty (target, prop) {\n+            delete target[prop]; \u002F\u002F remove from cache\n+            delete target._keys; \u002F\u002F remove cached keys\n+            delete scopes[0][prop]; \u002F\u002F remove from top level scope\n+            return true;\n+        },\n+        \u002F**\n+     * A trap for getting property values.\n+     *\u002F get (target, prop) {\n+            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n+        },\n+        \u002F**\n+     * A trap for Object.getOwnPropertyDescriptor.\n+     * Also used by Object.hasOwnProperty.\n+     *\u002F getOwnPropertyDescriptor (target, prop) {\n+            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n+        },\n+        \u002F**\n+     * A trap for Object.getPrototypeOf.\n+     *\u002F getPrototypeOf () {\n+            return Reflect.getPrototypeOf(scopes[0]);\n+        },\n+        \u002F**\n+     * A trap for the in operator.\n+     *\u002F has (target, prop) {\n+            return getKeysFromAllScopes(target).includes(prop);\n+        },\n+        \u002F**\n+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n+     *\u002F ownKeys (target) {\n+            return getKeysFromAllScopes(target);\n+        },\n+        \u002F**\n+     * A trap for setting property values.\n+     *\u002F set (target, prop, value) {\n+            const storage = target._storage || (target._storage = getTarget());\n+            target[prop] = storage[prop] = value; \u002F\u002F set to top level scope + cache\n+            delete target._keys; \u002F\u002F remove cached keys\n+            return true;\n+        }\n+    });\n+}\n+\u002F**\n+ * Returns an Proxy for resolving option values with context.\n+ * @param proxy - The Proxy returned by `_createResolver`\n+ * @param context - Context object for scriptable\u002Findexable options\n+ * @param subProxy - The proxy provided for scriptable options\n+ * @param descriptorDefaults - Defaults for descriptors\n+ * @private\n+ *\u002F function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n+    const cache = {\n+        _cacheable: false,\n+        _proxy: proxy,\n+        _context: context,\n+        _subProxy: subProxy,\n+        _stack: new Set(),\n+        _descriptors: _descriptors(proxy, descriptorDefaults),\n+        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n+        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n+    };\n+    return new Proxy(cache, {\n+        \u002F**\n+     * A trap for the delete operator.\n+     *\u002F deleteProperty (target, prop) {\n+            delete target[prop]; \u002F\u002F remove from cache\n+            delete proxy[prop]; \u002F\u002F remove from proxy\n+            return true;\n+        },\n+        \u002F**\n+     * A trap for getting property values.\n+     *\u002F get (target, prop, receiver) {\n+            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n+        },\n+        \u002F**\n+     * A trap for Object.getOwnPropertyDescriptor.\n+     * Also used by Object.hasOwnProperty.\n+     *\u002F getOwnPropertyDescriptor (target, prop) {\n+            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n+                enumerable: true,\n+                configurable: true\n+            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n+        },\n+        \u002F**\n+     * A trap for Object.getPrototypeOf.\n+     *\u002F getPrototypeOf () {\n+            return Reflect.getPrototypeOf(proxy);\n+        },\n+        \u002F**\n+     * A trap for the in operator.\n+     *\u002F has (target, prop) {\n+            return Reflect.has(proxy, prop);\n+        },\n+        \u002F**\n+     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n+     *\u002F ownKeys () {\n+            return Reflect.ownKeys(proxy);\n+        },\n+        \u002F**\n+     * A trap for setting property values.\n+     *\u002F set (target, prop, value) {\n+            proxy[prop] = value; \u002F\u002F set to proxy\n+            delete target[prop]; \u002F\u002F remove from cache\n+            return true;\n+        }\n+    });\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _descriptors(proxy, defaults = {\n+    scriptable: true,\n+    indexable: true\n+}) {\n+    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n+    return {\n+        allKeys: _allKeys,\n+        scriptable: _scriptable,\n+        indexable: _indexable,\n+        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n+        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n+    };\n+}\n+const readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\n+const needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\n+function _cached(target, prop, resolve) {\n+    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n+        return target[prop];\n+    }\n+    const value = resolve();\n+    \u002F\u002F cache the resolved value\n+    target[prop] = value;\n+    return value;\n+}\n+function _resolveWithContext(target, prop, receiver) {\n+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n+    let value = _proxy[prop]; \u002F\u002F resolve from proxy\n+    \u002F\u002F resolve with context\n+    if (isFunction(value) && descriptors.isScriptable(prop)) {\n+        value = _resolveScriptable(prop, value, target, receiver);\n+    }\n+    if (isArray(value) && value.length) {\n+        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n+    }\n+    if (needsSubResolver(prop, value)) {\n+        \u002F\u002F if the resolved value is an object, create a sub resolver for it\n+        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n+    }\n+    return value;\n+}\n+function _resolveScriptable(prop, getValue, target, receiver) {\n+    const { _proxy , _context , _subProxy , _stack  } = target;\n+    if (_stack.has(prop)) {\n+        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n+    }\n+    _stack.add(prop);\n+    let value = getValue(_context, _subProxy || receiver);\n+    _stack.delete(prop);\n+    if (needsSubResolver(prop, value)) {\n+        \u002F\u002F When scriptable option returns an object, create a resolver on that.\n+        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n+    }\n+    return value;\n+}\n+function _resolveArray(prop, value, target, isIndexable) {\n+    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n+    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n+        return value[_context.index % value.length];\n+    } else if (isObject(value[0])) {\n+        \u002F\u002F Array of objects, return array or resolvers\n+        const arr = value;\n+        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n+        value = [];\n+        for (const item of arr){\n+            const resolver = createSubResolver(scopes, _proxy, prop, item);\n+            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n+        }\n+    }\n+    return value;\n+}\n+function resolveFallback(fallback, prop, value) {\n+    return isFunction(fallback) ? fallback(prop, value) : fallback;\n+}\n+const getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n+function addScopes(set, parentScopes, key, parentFallback, value) {\n+    for (const parent of parentScopes){\n+        const scope = getScope(key, parent);\n+        if (scope) {\n+            set.add(scope);\n+            const fallback = resolveFallback(scope._fallback, key, value);\n+            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n+                \u002F\u002F When we reach the descriptor that defines a new _fallback, return that.\n+                \u002F\u002F The fallback will resume to that new scope.\n+                return fallback;\n+            }\n+        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n+            \u002F\u002F Fallback to `false` results to `false`, when falling back to different key.\n+            \u002F\u002F For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n+            return null;\n+        }\n+    }\n+    return false;\n+}\n+function createSubResolver(parentScopes, resolver, prop, value) {\n+    const rootScopes = resolver._rootScopes;\n+    const fallback = resolveFallback(resolver._fallback, prop, value);\n+    const allScopes = [\n+        ...parentScopes,\n+        ...rootScopes\n+    ];\n+    const set = new Set();\n+    set.add(value);\n+    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n+    if (key === null) {\n+        return false;\n+    }\n+    if (typeof fallback !== 'undefined' && fallback !== prop) {\n+        key = addScopesFromKey(set, allScopes, fallback, key, value);\n+        if (key === null) {\n+            return false;\n+        }\n+    }\n+    return _createResolver(Array.from(set), [\n+        ''\n+    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n+}\n+function addScopesFromKey(set, allScopes, key, fallback, item) {\n+    while(key){\n+        key = addScopes(set, allScopes, key, fallback, item);\n+    }\n+    return key;\n+}\n+function subGetTarget(resolver, prop, value) {\n+    const parent = resolver._getTarget();\n+    if (!(prop in parent)) {\n+        parent[prop] = {};\n+    }\n+    const target = parent[prop];\n+    if (isArray(target) && isObject(value)) {\n+        \u002F\u002F For array of objects, the object is used to store updated values\n+        return value;\n+    }\n+    return target || {};\n+}\n+function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n+    let value;\n+    for (const prefix of prefixes){\n+        value = _resolve(readKey(prefix, prop), scopes);\n+        if (typeof value !== 'undefined') {\n+            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n+        }\n+    }\n+}\n+function _resolve(key, scopes) {\n+    for (const scope of scopes){\n+        if (!scope) {\n+            continue;\n+        }\n+        const value = scope[key];\n+        if (typeof value !== 'undefined') {\n+            return value;\n+        }\n+    }\n+}\n+function getKeysFromAllScopes(target) {\n+    let keys = target._keys;\n+    if (!keys) {\n+        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n+    }\n+    return keys;\n+}\n+function resolveKeysFromAllScopes(scopes) {\n+    const set = new Set();\n+    for (const scope of scopes){\n+        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n+            set.add(key);\n+        }\n+    }\n+    return Array.from(set);\n+}\n+function _parseObjectDataRadialScale(meta, data, start, count) {\n+    const { iScale  } = meta;\n+    const { key ='r'  } = this._parsing;\n+    const parsed = new Array(count);\n+    let i, ilen, index, item;\n+    for(i = 0, ilen = count; i \u003C ilen; ++i){\n+        index = i + start;\n+        item = data[index];\n+        parsed[i] = {\n+            r: iScale.parse(resolveObjectKey(item, key), index)\n+        };\n+    }\n+    return parsed;\n+}\n+\n+const EPSILON = Number.EPSILON || 1e-14;\n+const getPoint = (points, i)=>i \u003C points.length && !points[i].skip && points[i];\n+const getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\n+function splineCurve(firstPoint, middlePoint, afterPoint, t) {\n+    \u002F\u002F Props to Rob Spencer at scaled innovation for his post on splining between points\n+    \u002F\u002F http:\u002F\u002Fscaledinnovation.com\u002Fanalytics\u002Fsplines\u002FaboutSplines.html\n+    \u002F\u002F This function must also respect \"skipped\" points\n+    const previous = firstPoint.skip ? middlePoint : firstPoint;\n+    const current = middlePoint;\n+    const next = afterPoint.skip ? middlePoint : afterPoint;\n+    const d01 = distanceBetweenPoints(current, previous);\n+    const d12 = distanceBetweenPoints(next, current);\n+    let s01 = d01 \u002F (d01 + d12);\n+    let s12 = d12 \u002F (d01 + d12);\n+    \u002F\u002F If all points are the same, s01 & s02 will be inf\n+    s01 = isNaN(s01) ? 0 : s01;\n+    s12 = isNaN(s12) ? 0 : s12;\n+    const fa = t * s01; \u002F\u002F scaling factor for triangle Ta\n+    const fb = t * s12;\n+    return {\n+        previous: {\n+            x: current.x - fa * (next.x - previous.x),\n+            y: current.y - fa * (next.y - previous.y)\n+        },\n+        next: {\n+            x: current.x + fb * (next.x - previous.x),\n+            y: current.y + fb * (next.y - previous.y)\n+        }\n+    };\n+}\n+\u002F**\n+ * Adjust tangents to ensure monotonic properties\n+ *\u002F function monotoneAdjust(points, deltaK, mK) {\n+    const pointsLen = points.length;\n+    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n+    let pointAfter = getPoint(points, 0);\n+    for(let i = 0; i \u003C pointsLen - 1; ++i){\n+        pointCurrent = pointAfter;\n+        pointAfter = getPoint(points, i + 1);\n+        if (!pointCurrent || !pointAfter) {\n+            continue;\n+        }\n+        if (almostEquals(deltaK[i], 0, EPSILON)) {\n+            mK[i] = mK[i + 1] = 0;\n+            continue;\n+        }\n+        alphaK = mK[i] \u002F deltaK[i];\n+        betaK = mK[i + 1] \u002F deltaK[i];\n+        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n+        if (squaredMagnitude \u003C= 9) {\n+            continue;\n+        }\n+        tauK = 3 \u002F Math.sqrt(squaredMagnitude);\n+        mK[i] = alphaK * tauK * deltaK[i];\n+        mK[i + 1] = betaK * tauK * deltaK[i];\n+    }\n+}\n+function monotoneCompute(points, mK, indexAxis = 'x') {\n+    const valueAxis = getValueAxis(indexAxis);\n+    const pointsLen = points.length;\n+    let delta, pointBefore, pointCurrent;\n+    let pointAfter = getPoint(points, 0);\n+    for(let i = 0; i \u003C pointsLen; ++i){\n+        pointBefore = pointCurrent;\n+        pointCurrent = pointAfter;\n+        pointAfter = getPoint(points, i + 1);\n+        if (!pointCurrent) {\n+            continue;\n+        }\n+        const iPixel = pointCurrent[indexAxis];\n+        const vPixel = pointCurrent[valueAxis];\n+        if (pointBefore) {\n+            delta = (iPixel - pointBefore[indexAxis]) \u002F 3;\n+            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n+            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n+        }\n+        if (pointAfter) {\n+            delta = (pointAfter[indexAxis] - iPixel) \u002F 3;\n+            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n+            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n+        }\n+    }\n+}\n+\u002F**\n+ * This function calculates Bézier control points in a similar way than |splineCurve|,\n+ * but preserves monotonicity of the provided data and ensures no local extremums are added\n+ * between the dataset discrete points due to the interpolation.\n+ * See : https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMonotone_cubic_interpolation\n+ *\u002F function splineCurveMonotone(points, indexAxis = 'x') {\n+    const valueAxis = getValueAxis(indexAxis);\n+    const pointsLen = points.length;\n+    const deltaK = Array(pointsLen).fill(0);\n+    const mK = Array(pointsLen);\n+    \u002F\u002F Calculate slopes (deltaK) and initialize tangents (mK)\n+    let i, pointBefore, pointCurrent;\n+    let pointAfter = getPoint(points, 0);\n+    for(i = 0; i \u003C pointsLen; ++i){\n+        pointBefore = pointCurrent;\n+        pointCurrent = pointAfter;\n+        pointAfter = getPoint(points, i + 1);\n+        if (!pointCurrent) {\n+            continue;\n+        }\n+        if (pointAfter) {\n+            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n+            \u002F\u002F In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n+            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) \u002F slopeDelta : 0;\n+        }\n+        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) \u002F 2;\n+    }\n+    monotoneAdjust(points, deltaK, mK);\n+    monotoneCompute(points, mK, indexAxis);\n+}\n+function capControlPoint(pt, min, max) {\n+    return Math.max(Math.min(pt, max), min);\n+}\n+function capBezierPoints(points, area) {\n+    let i, ilen, point, inArea, inAreaPrev;\n+    let inAreaNext = _isPointInArea(points[0], area);\n+    for(i = 0, ilen = points.length; i \u003C ilen; ++i){\n+        inAreaPrev = inArea;\n+        inArea = inAreaNext;\n+        inAreaNext = i \u003C ilen - 1 && _isPointInArea(points[i + 1], area);\n+        if (!inArea) {\n+            continue;\n+        }\n+        point = points[i];\n+        if (inAreaPrev) {\n+            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n+            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n+        }\n+        if (inAreaNext) {\n+            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n+            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n+        }\n+    }\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n+    let i, ilen, point, controlPoints;\n+    \u002F\u002F Only consider points that are drawn in case the spanGaps option is used\n+    if (options.spanGaps) {\n+        points = points.filter((pt)=>!pt.skip);\n+    }\n+    if (options.cubicInterpolationMode === 'monotone') {\n+        splineCurveMonotone(points, indexAxis);\n+    } else {\n+        let prev = loop ? points[points.length - 1] : points[0];\n+        for(i = 0, ilen = points.length; i \u003C ilen; ++i){\n+            point = points[i];\n+            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n+            point.cp1x = controlPoints.previous.x;\n+            point.cp1y = controlPoints.previous.y;\n+            point.cp2x = controlPoints.next.x;\n+            point.cp2y = controlPoints.next.y;\n+            prev = point;\n+        }\n+    }\n+    if (options.capBezierPoints) {\n+        capBezierPoints(points, area);\n+    }\n+}\n+\n+\u002F**\n+ * @private\n+ *\u002F function _isDomSupported() {\n+    return typeof window !== 'undefined' && typeof document !== 'undefined';\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _getParentNode(domNode) {\n+    let parent = domNode.parentNode;\n+    if (parent && parent.toString() === '[object ShadowRoot]') {\n+        parent = parent.host;\n+    }\n+    return parent;\n+}\n+\u002F**\n+ * convert max-width\u002Fmax-height values that may be percentages into a number\n+ * @private\n+ *\u002F function parseMaxStyle(styleValue, node, parentProperty) {\n+    let valueInPixels;\n+    if (typeof styleValue === 'string') {\n+        valueInPixels = parseInt(styleValue, 10);\n+        if (styleValue.indexOf('%') !== -1) {\n+            \u002F\u002F percentage * size in dimension\n+            valueInPixels = valueInPixels \u002F 100 * node.parentNode[parentProperty];\n+        }\n+    } else {\n+        valueInPixels = styleValue;\n+    }\n+    return valueInPixels;\n+}\n+const getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\n+function getStyle(el, property) {\n+    return getComputedStyle(el).getPropertyValue(property);\n+}\n+const positions = [\n+    'top',\n+    'right',\n+    'bottom',\n+    'left'\n+];\n+function getPositionedStyle(styles, style, suffix) {\n+    const result = {};\n+    suffix = suffix ? '-' + suffix : '';\n+    for(let i = 0; i \u003C 4; i++){\n+        const pos = positions[i];\n+        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n+    }\n+    result.width = result.left + result.right;\n+    result.height = result.top + result.bottom;\n+    return result;\n+}\n+const useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n+\u002F**\n+ * @param e\n+ * @param canvas\n+ * @returns Canvas position\n+ *\u002F function getCanvasPosition(e, canvas) {\n+    const touches = e.touches;\n+    const source = touches && touches.length ? touches[0] : e;\n+    const { offsetX , offsetY  } = source;\n+    let box = false;\n+    let x, y;\n+    if (useOffsetPos(offsetX, offsetY, e.target)) {\n+        x = offsetX;\n+        y = offsetY;\n+    } else {\n+        const rect = canvas.getBoundingClientRect();\n+        x = source.clientX - rect.left;\n+        y = source.clientY - rect.top;\n+        box = true;\n+    }\n+    return {\n+        x,\n+        y,\n+        box\n+    };\n+}\n+\u002F**\n+ * Gets an event's x, y coordinates, relative to the chart area\n+ * @param event\n+ * @param chart\n+ * @returns x and y coordinates of the event\n+ *\u002F function getRelativePosition(event, chart) {\n+    if ('native' in event) {\n+        return event;\n+    }\n+    const { canvas , currentDevicePixelRatio  } = chart;\n+    const style = getComputedStyle(canvas);\n+    const borderBox = style.boxSizing === 'border-box';\n+    const paddings = getPositionedStyle(style, 'padding');\n+    const borders = getPositionedStyle(style, 'border', 'width');\n+    const { x , y , box  } = getCanvasPosition(event, canvas);\n+    const xOffset = paddings.left + (box && borders.left);\n+    const yOffset = paddings.top + (box && borders.top);\n+    let { width , height  } = chart;\n+    if (borderBox) {\n+        width -= paddings.width + borders.width;\n+        height -= paddings.height + borders.height;\n+    }\n+    return {\n+        x: Math.round((x - xOffset) \u002F width * canvas.width \u002F currentDevicePixelRatio),\n+        y: Math.round((y - yOffset) \u002F height * canvas.height \u002F currentDevicePixelRatio)\n+    };\n+}\n+function getContainerSize(canvas, width, height) {\n+    let maxWidth, maxHeight;\n+    if (width === undefined || height === undefined) {\n+        const container = canvas && _getParentNode(canvas);\n+        if (!container) {\n+            width = canvas.clientWidth;\n+            height = canvas.clientHeight;\n+        } else {\n+            const rect = container.getBoundingClientRect(); \u002F\u002F this is the border box of the container\n+            const containerStyle = getComputedStyle(container);\n+            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n+            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n+            width = rect.width - containerPadding.width - containerBorder.width;\n+            height = rect.height - containerPadding.height - containerBorder.height;\n+            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n+            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n+        }\n+    }\n+    return {\n+        width,\n+        height,\n+        maxWidth: maxWidth || INFINITY,\n+        maxHeight: maxHeight || INFINITY\n+    };\n+}\n+const round1 = (v)=>Math.round(v * 10) \u002F 10;\n+\u002F\u002F eslint-disable-next-line complexity\n+function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n+    const style = getComputedStyle(canvas);\n+    const margins = getPositionedStyle(style, 'margin');\n+    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n+    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n+    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n+    let { width , height  } = containerSize;\n+    if (style.boxSizing === 'content-box') {\n+        const borders = getPositionedStyle(style, 'border', 'width');\n+        const paddings = getPositionedStyle(style, 'padding');\n+        width -= paddings.width + borders.width;\n+        height -= paddings.height + borders.height;\n+    }\n+    width = Math.max(0, width - margins.width);\n+    height = Math.max(0, aspectRatio ? width \u002F aspectRatio : height - margins.height);\n+    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n+    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n+    if (width && !height) {\n+        \u002F\u002F https:\u002F\u002Fgithub.com\u002Fchartjs\u002FChart.js\u002Fissues\u002F4659\n+        \u002F\u002F If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n+        height = round1(width \u002F 2);\n+    }\n+    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n+    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n+        height = containerSize.height;\n+        width = round1(Math.floor(height * aspectRatio));\n+    }\n+    return {\n+        width,\n+        height\n+    };\n+}\n+\u002F**\n+ * @param chart\n+ * @param forceRatio\n+ * @param forceStyle\n+ * @returns True if the canvas context size or transformation has changed.\n+ *\u002F function retinaScale(chart, forceRatio, forceStyle) {\n+    const pixelRatio = forceRatio || 1;\n+    const deviceHeight = round1(chart.height * pixelRatio);\n+    const deviceWidth = round1(chart.width * pixelRatio);\n+    chart.height = round1(chart.height);\n+    chart.width = round1(chart.width);\n+    const canvas = chart.canvas;\n+    \u002F\u002F If no style has been set on the canvas, the render size is used as display size,\n+    \u002F\u002F making the chart visually bigger, so let's enforce it to the \"correct\" values.\n+    \u002F\u002F See https:\u002F\u002Fgithub.com\u002Fchartjs\u002FChart.js\u002Fissues\u002F3575\n+    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n+        canvas.style.height = `${chart.height}px`;\n+        canvas.style.width = `${chart.width}px`;\n+    }\n+    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n+        chart.currentDevicePixelRatio = pixelRatio;\n+        canvas.height = deviceHeight;\n+        canvas.width = deviceWidth;\n+        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n+        return true;\n+    }\n+    return false;\n+}\n+\u002F**\n+ * Detects support for options object argument in addEventListener.\n+ * https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FEventTarget\u002FaddEventListener#Safely_detecting_option_support\n+ * @private\n+ *\u002F const supportsEventListenerOptions = function() {\n+    let passiveSupported = false;\n+    try {\n+        const options = {\n+            get passive () {\n+                passiveSupported = true;\n+                return false;\n+            }\n+        };\n+        if (_isDomSupported()) {\n+            window.addEventListener('test', null, options);\n+            window.removeEventListener('test', null, options);\n+        }\n+    } catch (e) {\n+    \u002F\u002F continue regardless of error\n+    }\n+    return passiveSupported;\n+}();\n+\u002F**\n+ * The \"used\" size is the final value of a dimension property after all calculations have\n+ * been performed. This method uses the computed style of `element` but returns undefined\n+ * if the computed style is not expressed in pixels. That can happen in some cases where\n+ * `element` has a size relative to its parent and this last one is not yet displayed,\n+ * for example because of `display: none` on a parent node.\n+ * @see https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002Fused_value\n+ * @returns Size in pixels or undefined if unknown.\n+ *\u002F function readUsedSize(element, property) {\n+    const value = getStyle(element, property);\n+    const matches = value && value.match(\u002F^(\\d+)(\\.\\d+)?px$\u002F);\n+    return matches ? +matches[1] : undefined;\n+}\n+\n+\u002F**\n+ * @private\n+ *\u002F function _pointInLine(p1, p2, t, mode) {\n+    return {\n+        x: p1.x + t * (p2.x - p1.x),\n+        y: p1.y + t * (p2.y - p1.y)\n+    };\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _steppedInterpolation(p1, p2, t, mode) {\n+    return {\n+        x: p1.x + t * (p2.x - p1.x),\n+        y: mode === 'middle' ? t \u003C 0.5 ? p1.y : p2.y : mode === 'after' ? t \u003C 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n+    };\n+}\n+\u002F**\n+ * @private\n+ *\u002F function _bezierInterpolation(p1, p2, t, mode) {\n+    const cp1 = {\n+        x: p1.cp2x,\n+        y: p1.cp2y\n+    };\n+    const cp2 = {\n+        x: p2.cp1x,\n+        y: p2.cp1y\n+    };\n+    const a = _pointInLine(p1, cp1, t);\n+    const b = _pointInLine(cp1, cp2, t);\n+    const c = _pointInLine(cp2, p2, t);\n+    const d = _pointInLine(a, b, t);\n+    const e = _pointInLine(b, c, t);\n+    return _pointInLine(d, e, t);\n+}\n+\n+const getRightToLeftAdapter = function(rectX, width) {\n+    return {\n+        x (x) {\n+            return rectX + rectX + width - x;\n+        },\n+        setWidth (w) {\n+            width = w;\n+        },\n+        textAlign (align) {\n+            if (align === 'center') {\n+                return align;\n+            }\n+            return align === 'right' ? 'left' : 'right';\n+        },\n+        xPlus (x, value) {\n+            return x - value;\n+        },\n+        leftForLtr (x, itemWidth) {\n+            return x - itemWidth;\n+        }\n+    };\n+};\n+const getLeftToRightAdapter = function() {\n+    return {\n+        x (x) {\n+            return x;\n+        },\n+        setWidth (w) {},\n+        textAlign (align) {\n+            return align;\n+        },\n+        xPlus (x, value) {\n+            return x + value;\n+        },\n+        leftForLtr (x, _itemWidth) {\n+            return x;\n+        }\n+    };\n+};\n+function getRtlAdapter(rtl, rectX, width) {\n+    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n+}\n+function overrideTextDirection(ctx, direction) {\n+    let style, original;\n+    if (direction === 'ltr' || direction === 'rtl') {\n+        style = ctx.canvas.style;\n+        original = [\n+            style.getPropertyValue('direction'),\n+            style.getPropertyPriority('direction')\n+        ];\n+        style.setProperty('direction', direction, 'important');\n+        ctx.prevTextDirection = original;\n+    }\n+}\n+function restoreTextDirection(ctx, original) {\n+    if (original !== undefined) {\n+        delete ctx.prevTextDirection;\n+        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n+    }\n+}\n+\n+function propertyFn(property) {\n+    if (property === 'angle') {\n+        return {\n+            between: _angleBetween,\n+            compare: _angleDiff,\n+            normalize: _normalizeAngle\n+        };\n+    }\n+    return {\n+        between: _isBetween,\n+        compare: (a, b)=>a - b,\n+        normalize: (x)=>x\n+    };\n+}\n+function normalizeSegment({ start , end , count , loop , style  }) {\n+    return {\n+        start: start % count,\n+        end: end % count,\n+        loop: loop && (end - start + 1) % count === 0,\n+        style\n+    };\n+}\n+function getSegment(segment, points, bounds) {\n+    const { property , start: startBound , end: endBound  } = bounds;\n+    const { between , normalize  } = propertyFn(property);\n+    const count = points.length;\n+    let { start , end , loop  } = segment;\n+    let i, ilen;\n+    if (loop) {\n+        start += count;\n+        end += count;\n+        for(i = 0, ilen = count; i \u003C ilen; ++i){\n+            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n+                break;\n+            }\n+            start--;\n+            end--;\n+        }\n+        start %= count;\n+        end %= count;\n+    }\n+    if (end \u003C start) {\n+        end += count;\n+    }\n+    return {\n+        start,\n+        end,\n+        loop,\n+        style: segment.style\n+    };\n+}\n+ function _boundSegment(segment, points, bounds) {\n+    if (!bounds) {\n+        return [\n+            segment\n+        ];\n+    }\n+    const { property , start: startBound , end: endBound  } = bounds;\n+    const count = points.length;\n+    const { compare , between , normalize  } = propertyFn(property);\n+    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n+    const result = [];\n+    let inside = false;\n+    let subStart = null;\n+    let value, point, prevValue;\n+    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n+    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n+    const shouldStart = ()=>inside || startIsBefore();\n+    const shouldStop = ()=>!inside || endIsBefore();\n+    for(let i = start, prev = start; i \u003C= end; ++i){\n+        point = points[i % count];\n+        if (point.skip) {\n+            continue;\n+        }\n+        value = normalize(point[property]);\n+        if (value === prevValue) {\n+            continue;\n+        }\n+        inside = between(value, startBound, endBound);\n+        if (subStart === null && shouldStart()) {\n+            subStart = compare(value, startBound) === 0 ? i : prev;\n+        }\n+        if (subStart !== null && shouldStop()) {\n+            result.push(normalizeSegment({\n+                start: subStart,\n+                end: i,\n+                loop,\n+                count,\n+                style\n+            }));\n+            subStart = null;\n+        }\n+        prev = i;\n+        prevValue = value;\n+    }\n+    if (subStart !== null) {\n+        result.push(normalizeSegment({\n+            start: subStart,\n+            end,\n+            loop,\n+            count,\n+            style\n+        }));\n+    }\n+    return result;\n+}\n+ function _boundSegments(line, bounds) {\n+    const result = [];\n+    const segments = line.segments;\n+    for(let i = 0; i \u003C segments.length; i++){\n+        const sub = _boundSegment(segments[i], line.points, bounds);\n+        if (sub.length) {\n+            result.push(...sub);\n+        }\n+    }\n+    return result;\n+}\n+ function findStartAndEnd(points, count, loop, spanGaps) {\n+    let start = 0;\n+    let end = count - 1;\n+    if (loop && !spanGaps) {\n+        while(start \u003C count && !points[start].skip){\n+            start++;\n+        }\n+    }\n+    while(start \u003C count && points[start].skip){\n+        start++;\n+    }\n+    start %= count;\n+    if (loop) {\n+        end += start;\n+    }\n+    while(end > start && points[end % count].skip){\n+        end--;\n+    }\n+    end %= count;\n+    return {\n+        start,\n+        end\n+    };\n+}\n+ function solidSegments(points, start, max, loop) {\n+    const count = points.length;\n+    const result = [];\n+    let last = start;\n+    let prev = points[start];\n+    let end;\n+    for(end = start + 1; end \u003C= max; ++end){\n+        const cur = points[end % count];\n+        if (cur.skip || cur.stop) {\n+            if (!prev.skip) {\n+                loop = false;\n+                result.push({\n+                    start: start % count,\n+                    end: (end - 1) % count,\n+                    loop\n+                });\n+                start = last = cur.stop ? end : null;\n+            }\n+        } else {\n+            last = end;\n+            if (prev.skip) {\n+                start = end;\n+            }\n+        }\n+        prev = cur;\n+    }\n+    if (last !== null) {\n+        result.push({\n+            start: start % count,\n+            end: last % count,\n+            loop\n+        });\n+    }\n+    return result;\n+}\n+ function _computeSegments(line, segmentOptions) {\n+    const points = line.points;\n+    const spanGaps = line.options.spanGaps;\n+    const count = points.length;\n+    if (!count) {\n+        return [];\n+    }\n+    const loop = !!line._loop;\n+    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n+    if (spanGaps === true) {\n+        return splitByStyles(line, [\n+            {\n+                start,\n+                end,\n+                loop\n+            }\n+        ], points, segmentOptions);\n+    }\n+    const max = end \u003C start ? end + count : end;\n+    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n+    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n+}\n+ function splitByStyles(line, segments, points, segmentOptions) {\n+    if (!segmentOptions || !segmentOptions.setContext || !points) {\n+        return segments;\n+    }\n+    return doSplitByStyles(line, segments, points, segmentOptions);\n+}\n+ function doSplitByStyles(line, segments, points, segmentOptions) {\n+    const chartContext = line._chart.getContext();\n+    const baseStyle = readStyle(line.options);\n+    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n+    const count = points.length;\n+    const result = [];\n+    let prevStyle = baseStyle;\n+    let start = segments[0].start;\n+    let i = start;\n+    function addStyle(s, e, l, st) {\n+        const dir = spanGaps ? -1 : 1;\n+        if (s === e) {\n+            return;\n+        }\n+        s += count;\n+        while(points[s % count].skip){\n+            s -= dir;\n+        }\n+        while(points[e % count].skip){\n+            e += dir;\n+        }\n+        if (s % count !== e % count) {\n+            result.push({\n+                start: s % count,\n+                end: e % count,\n+                loop: l,\n+                style: st\n+            });\n+            prevStyle = st;\n+            start = e % count;\n+        }\n+    }\n+    for (const segment of segments){\n+        start = spanGaps ? start : segment.start;\n+        let prev = points[start % count];\n+        let style;\n+        for(i = start + 1; i \u003C= segment.end; i++){\n+            const pt = points[i % count];\n+            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n+                type: 'segment',\n+                p0: prev,\n+                p1: pt,\n+                p0DataIndex: (i - 1) % count,\n+                p1DataIndex: i % count,\n+                datasetIndex\n+            })));\n+            if (styleChanged(style, prevStyle)) {\n+                addStyle(start, i - 1, segment.loop, prevStyle);\n+            }\n+            prev = pt;\n+            prevStyle = style;\n+        }\n+        if (start \u003C i - 1) {\n+            addStyle(start, i - 1, segment.loop, prevStyle);\n+        }\n+    }\n+    return result;\n+}\n+function readStyle(options) {\n+    return {\n+        backgroundColor: options.backgroundColor,\n+        borderCapStyle: options.borderCapStyle,\n+        borderDash: options.borderDash,\n+        borderDashOffset: options.borderDashOffset,\n+        borderJoinStyle: options.borderJoinStyle,\n+        borderWidth: options.borderWidth,\n+        borderColor: options.borderColor\n+    };\n+}\n+function styleChanged(style, prevStyle) {\n+    if (!prevStyle) {\n+        return false;\n+    }\n+    const cache = [];\n+    const replacer = function(key, value) {\n+        if (!isPatternOrGradient(value)) {\n+            return value;\n+        }\n+        if (!cache.includes(value)) {\n+            cache.push(value);\n+        }\n+        return cache.indexOf(value);\n+    };\n+    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n+}\n+\n+function getSizeForArea(scale, chartArea, field) {\n+    return scale.options.clip ? scale[field] : chartArea[field];\n+}\n+function getDatasetArea(meta, chartArea) {\n+    const { xScale , yScale  } = meta;\n+    if (xScale && yScale) {\n+        return {\n+            left: getSizeForArea(xScale, chartArea, 'left'),\n+            right: getSizeForArea(xScale, chartArea, 'right'),\n+            top: getSizeForArea(yScale, chartArea, 'top'),\n+            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n+        };\n+    }\n+    return chartArea;\n+}\n+function getDatasetClipArea(chart, meta) {\n+    const clip = meta._clip;\n+    if (clip.disabled) {\n+        return false;\n+    }\n+    const area = getDatasetArea(meta, chart.chartArea);\n+    return {\n+        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n+        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n+        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n+        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n+    };\n+}\n+\n+\n+\u002F\u002F# sourceMappingURL=helpers.dataset.js.map\n+\n+\n+\u002F***\u002F },\n+\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fconstants.js\"\n \u002F*!*******************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fconstants.js ***!\n   \\*******************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20395,13 +42106,13 @@\n const KEY_SHORTCUT = IS_MAC ? 'metaKey' : 'ctrlKey'; \u002F\u002F ctrl key or apple key for ma\n \u002F\u002F# sourceMappingURL=constants.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fhighlight.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fhighlight.js\"\n \u002F*!***************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fhighlight.js ***!\n   \\***************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20475,13 +42186,13 @@\n };\n \u002F\u002F# sourceMappingURL=highlight.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroevent.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroevent.js\"\n \u002F*!****************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroevent.js ***!\n   \\****************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20550,13 +42261,13 @@\n ;\n \u002F\u002F# sourceMappingURL=microevent.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroplugin.js\"\n \u002F*!*****************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fcontrib\u002Fmicroplugin.js ***!\n   \\*****************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20673,13 +42384,13 @@\n }\n \u002F\u002F# sourceMappingURL=microplugin.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fdefaults.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fdefaults.js\"\n \u002F*!******************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fdefaults.js ***!\n   \\******************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20769,13 +42480,13 @@\n });\n \u002F\u002F# sourceMappingURL=defaults.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002FgetSettings.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002FgetSettings.js\"\n \u002F*!*********************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002FgetSettings.js ***!\n   \\*********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -20928,13 +42639,13 @@\n ;\n \u002F\u002F# sourceMappingURL=getSettings.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcaret_position\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcaret_position\u002Fplugin.js\"\n \u002F*!***************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcaret_position\u002Fplugin.js ***!\n   \\***************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21106,13 +42817,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fchange_listener\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fchange_listener\u002Fplugin.js\"\n \u002F*!****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fchange_listener\u002Fplugin.js ***!\n   \\****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21172,13 +42883,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcheckbox_options\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcheckbox_options\u002Fplugin.js\"\n \u002F*!*****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fcheckbox_options\u002Fplugin.js ***!\n   \\*****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21366,13 +43077,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fclear_button\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fclear_button\u002Fplugin.js\"\n \u002F*!*************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fclear_button\u002Fplugin.js ***!\n   \\*************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21454,13 +43165,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdrag_drop\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdrag_drop\u002Fplugin.js\"\n \u002F*!**********************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdrag_drop\u002Fplugin.js ***!\n   \\**********************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21689,13 +43400,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_header\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_header\u002Fplugin.js\"\n \u002F*!****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_header\u002Fplugin.js ***!\n   \\****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -21806,13 +43517,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_input\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_input\u002Fplugin.js\"\n \u002F*!***************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fdropdown_input\u002Fplugin.js ***!\n   \\***************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22035,13 +43746,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Finput_autogrow\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Finput_autogrow\u002Fplugin.js\"\n \u002F*!***************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Finput_autogrow\u002Fplugin.js ***!\n   \\***************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22124,13 +43835,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_active_items\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_active_items\u002Fplugin.js\"\n \u002F*!****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_active_items\u002Fplugin.js ***!\n   \\****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22165,13 +43876,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_backspace_delete\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_backspace_delete\u002Fplugin.js\"\n \u002F*!********************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fno_backspace_delete\u002Fplugin.js ***!\n   \\********************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22212,13 +43923,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Foptgroup_columns\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Foptgroup_columns\u002Fplugin.js\"\n \u002F*!*****************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Foptgroup_columns\u002Fplugin.js ***!\n   \\*****************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22313,13 +44024,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fremove_button\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fremove_button\u002Fplugin.js\"\n \u002F*!**************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fremove_button\u002Fplugin.js ***!\n   \\**************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22462,13 +44173,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Frestore_on_backspace\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Frestore_on_backspace\u002Fplugin.js\"\n \u002F*!*********************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Frestore_on_backspace\u002Fplugin.js ***!\n   \\*********************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22519,13 +44230,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fvirtual_scroll\u002Fplugin.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fvirtual_scroll\u002Fplugin.js\"\n \u002F*!***************************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fplugins\u002Fvirtual_scroll\u002Fplugin.js ***!\n   \\***************************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22806,13 +44517,13 @@\n \u002F\u002F# sourceMappingURL=plugin.js.map\n \n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js\"\n \u002F*!*****************************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.complete.js ***!\n   \\*****************************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -22866,13 +44577,13 @@\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (_tom_select_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n \u002F\u002F# sourceMappingURL=tom-select.complete.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.js\"\n \u002F*!********************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Ftom-select.js ***!\n   \\********************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -25158,13 +46869,13 @@\n ;\n \u002F\u002F# sourceMappingURL=tom-select.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Futils.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Futils.js\"\n \u002F*!***************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Futils.js ***!\n   \\***************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -25380,13 +47091,13 @@\n };\n \u002F\u002F# sourceMappingURL=utils.js.map\n \n-\u002F***\u002F }),\n+\u002F***\u002F },\n \n-\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fvanilla.js\":\n+\u002F***\u002F \".\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fvanilla.js\"\n \u002F*!*****************************************************!*\\\n   !*** .\u002Fnode_modules\u002Ftom-select\u002Fdist\u002Fesm\u002Fvanilla.js ***!\n   \\*****************************************************\u002F\n-\u002F***\u002F ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\n+(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n \n \"use strict\";\n __webpack_require__.r(__webpack_exports__);\n@@ -25581,7 +47292,7 @@\n };\n \u002F\u002F# sourceMappingURL=vanilla.js.map\n \n-\u002F***\u002F })\n+\u002F***\u002F }\n \n \u002F******\u002F \t});\n \u002F************************************************************************\u002F\n@@ -25603,6 +47314,12 @@\n \u002F******\u002F \t\t};\n \u002F******\u002F \t\n \u002F******\u002F \t\t\u002F\u002F Execute the module function\n+\u002F******\u002F \t\tif (!(moduleId in __webpack_modules__)) {\n+\u002F******\u002F \t\t\tdelete __webpack_module_cache__[moduleId];\n+\u002F******\u002F \t\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n+\u002F******\u002F \t\t\te.code = 'MODULE_NOT_FOUND';\n+\u002F******\u002F \t\t\tthrow e;\n+\u002F******\u002F \t\t}\n \u002F******\u002F \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n \u002F******\u002F \t\n \u002F******\u002F \t\t\u002F\u002F Return the exports of the module\n@@ -25657,30 +47374,37 @@\n \u002F******\u002F \t\n \u002F************************************************************************\u002F\n var __webpack_exports__ = {};\n-\u002F\u002F This entry need to be wrapped in an IIFE because it need to be in strict mode.\n+\u002F\u002F This entry needs to be wrapped in an IIFE because it needs to be in strict mode.\n (() => {\n \"use strict\";\n \u002F*!**************************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder.js ***!\n   \\**************************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n-\u002F* harmony import *\u002F var _course_builder_builder_course_builder_tab_course_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_course_builder_edit_course_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_tab_lesson_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_edit_lesson_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_quiz_builder_tab_quiz_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_quiz_builder_edit_quiz_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-edit-quiz.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_question_builder_tab_question_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_popup_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-popup.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-popup.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\");\n-\u002F* harmony import *\u002F var _course_builder_builder_form_state_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-form-state.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\");\n-\u002F* harmony import *\u002F var lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Finit-tom-select.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\");\n-\u002F* harmony import *\u002F var lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Futils-admin.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_course_builder_tab_course_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-tab-course.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_course_builder_edit_course_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-course\u002Fbuilder-edit-course.js\");\n+\u002F* harmony import *\u002F var _admin_courses_generate_with_ai_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\");\n+\u002F* harmony import *\u002F var _admin_generate_with_openai_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002Fadmin\u002Fgenerate-with-openai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_tab_lesson_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-tab-lesson.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_edit_lesson_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-edit-lesson.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_quiz_builder_tab_quiz_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-tab-quiz.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_quiz_builder_standalone_quiz_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-standalone-quiz.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-quiz\u002Fbuilder-standalone-quiz.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_question_builder_tab_question_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-tab-question.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-question\u002Fbuilder-edit-question.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_popup_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-popup.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-popup.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-lesson\u002Fbuilder-material.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_dashboard_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-dashboard.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-dashboard.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_settings_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-settings.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-settings.js\");\n+\u002F* harmony import *\u002F var _course_builder_builder_form_state_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(\u002F*! .\u002Fcourse-builder\u002Fbuilder-form-state.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js\");\n+\u002F* harmony import *\u002F var _admin_edit_course_edit_curriculum_edit_curriculum_ai_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(\u002F*! ..\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Finit-tom-select.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002Fadmin\u002Futils-admin.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\");\n+\u002F* harmony import *\u002F var lpAssetsJsPath_lpToastify__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(\u002F*! lpAssetsJsPath\u002FlpToastify *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\");\n \u002F**\n  * Course builder JS handler.\n  *\n- * @since 4.3.0\n+ * @since 4.3.6\n  * @version 1.0.0\n  *\u002F\n \n@@ -25697,33 +47421,222 @@\n \n \n \n+\n+\n+\n+\n+\n+\n+\n \u002F\u002F Initialize all builder components\n const initBuilderComponents = () => {\n   try {\n-    new _course_builder_builder_course_builder_tab_course_js__WEBPACK_IMPORTED_MODULE_0__.BuilderTabCourse();\n-    new _course_builder_builder_course_builder_edit_course_js__WEBPACK_IMPORTED_MODULE_1__.BuilderEditCourse();\n-    new _course_builder_builder_lesson_builder_tab_lesson_js__WEBPACK_IMPORTED_MODULE_2__.BuilderTabLesson();\n-    \u002F\u002F new BuilderEditLesson();\n-    new _course_builder_builder_quiz_builder_tab_quiz_js__WEBPACK_IMPORTED_MODULE_4__.BuilderTabQuiz();\n-    \u002F\u002F new BuilderEditQuiz();\n-    new _course_builder_builder_question_builder_tab_question_js__WEBPACK_IMPORTED_MODULE_6__.BuilderTabQuestion();\n-    \u002F\u002F new BuilderEditQuestion();\n-    new _course_builder_builder_popup_js__WEBPACK_IMPORTED_MODULE_8__.BuilderPopup();\n+    new _course_builder_builder_course_builder_tab_course_js__WEBPACK_IMPORTED_MODULE_1__.BuilderTabCourse();\n+    new _course_builder_builder_course_builder_edit_course_js__WEBPACK_IMPORTED_MODULE_2__.BuilderEditCourse();\n+    const hasCreateCourseAiButton = document.querySelector('.lp-btn-generate-course-with-ai, .lp-btn-warning-enable-ai');\n+    if (hasCreateCourseAiButton) {\n+      new _admin_courses_generate_with_ai_js__WEBPACK_IMPORTED_MODULE_3__.CreateCourseViaAI({\n+        autoInsertButton: false,\n+        isCourseBuilder: true,\n+        redirectDelayMs: 1200\n+      });\n+    }\n+    const hasEditCourseAiButton = document.querySelector('.cb-course-edit-ai-btn.lp-btn-generate-with-ai');\n+    if (hasEditCourseAiButton) {\n+      new _admin_generate_with_openai_js__WEBPACK_IMPORTED_MODULE_4__.GenerateWithOpenai({\n+        autoInsertButtons: false,\n+        isCourseBuilder: true\n+      });\n+    }\n+    new _course_builder_builder_lesson_builder_tab_lesson_js__WEBPACK_IMPORTED_MODULE_5__.BuilderTabLesson();\n+    new _course_builder_builder_lesson_builder_edit_lesson_js__WEBPACK_IMPORTED_MODULE_6__.BuilderEditLesson();\n+    new _course_builder_builder_quiz_builder_tab_quiz_js__WEBPACK_IMPORTED_MODULE_7__.BuilderTabQuiz();\n+    new _course_builder_builder_quiz_builder_standalone_quiz_js__WEBPACK_IMPORTED_MODULE_8__.BuilderStandaloneQuiz();\n+    new _course_builder_builder_question_builder_tab_question_js__WEBPACK_IMPORTED_MODULE_9__.BuilderTabQuestion();\n+    new _course_builder_builder_question_builder_edit_question_js__WEBPACK_IMPORTED_MODULE_10__.BuilderEditQuestion();\n+    new _course_builder_builder_popup_js__WEBPACK_IMPORTED_MODULE_11__.BuilderPopup();\n+    new _course_builder_builder_dashboard_js__WEBPACK_IMPORTED_MODULE_13__.BuilderDashboard();\n+    new _course_builder_builder_settings_js__WEBPACK_IMPORTED_MODULE_14__.BuilderSettings();\n+    new _admin_edit_course_edit_curriculum_edit_curriculum_ai_js__WEBPACK_IMPORTED_MODULE_16__.EditCurriculumAi({\n+      isCourseBuilder: true\n+    });\n \n     \u002F\u002F Initialize form state management for ClassPress-style UX\n-    (0,_course_builder_builder_form_state_js__WEBPACK_IMPORTED_MODULE_10__.getFormState)();\n+    (0,_course_builder_builder_form_state_js__WEBPACK_IMPORTED_MODULE_15__.getFormState)();\n+\n+    \u002F\u002F Initialize sidebar toggle\n+    initSidebarToggle();\n+    initHeaderMoreActions();\n   } catch (e) {\n     console.error('Error initializing builder components:', e);\n   }\n };\n \n+\u002F**\n+ * Initialize sidebar collapse\u002Fexpand toggle\n+ * Persists state in localStorage\n+ *\u002F\n+const initSidebarToggle = () => {\n+  const sidebar = document.getElementById('lp-course-builder-sidebar');\n+  const toggleBtn = document.querySelector('.lp-cb-sidebar__toggle');\n+  const wrapper = document.getElementById('lp-course-builder');\n+  const storageKey = 'lp_cb_sidebar_collapsed';\n+  if (!sidebar || !toggleBtn) {\n+    return;\n+  }\n+\n+  \u002F\u002F Restore saved state\n+  const isCollapsed = localStorage.getItem(storageKey) === 'true';\n+  if (isCollapsed) {\n+    sidebar.classList.add('is-collapsed');\n+    if (wrapper) {\n+      wrapper.classList.add('has-collapsed-sidebar');\n+    }\n+  }\n+\n+  \u002F\u002F Handle toggle click\n+  toggleBtn.addEventListener('click', () => {\n+    const willCollapse = !sidebar.classList.contains('is-collapsed');\n+    sidebar.classList.toggle('is-collapsed');\n+    if (wrapper) {\n+      wrapper.classList.toggle('has-collapsed-sidebar');\n+    }\n+\n+    \u002F\u002F Save state\n+    localStorage.setItem(storageKey, willCollapse ? 'true' : 'false');\n+  });\n+};\n+\n+\u002F**\n+ * Initialize \"More actions\" menu in edit header (duplicate\u002Ftrash).\n+ * Uses explicit open state to avoid focus-only behavior issues across browsers.\n+ *\u002F\n+const initHeaderMoreActions = () => {\n+  const wrapSelector = '.cb-header-action-expanded';\n+  const toggleSelector = '.course-action-expanded';\n+  const openClass = 'is-open';\n+  const closeAll = (exclude = null) => {\n+    document.querySelectorAll(`${wrapSelector}.${openClass}`).forEach(wrap => {\n+      if (exclude && wrap === exclude) {\n+        return;\n+      }\n+      wrap.classList.remove(openClass);\n+      const btn = wrap.querySelector(toggleSelector);\n+      if (btn) {\n+        btn.setAttribute('aria-expanded', 'false');\n+      }\n+    });\n+  };\n+  document.addEventListener('click', e => {\n+    const target = e.target;\n+    const toggleBtn = target.closest(toggleSelector);\n+    if (toggleBtn) {\n+      e.preventDefault();\n+      e.stopPropagation();\n+      const wrap = toggleBtn.closest(wrapSelector);\n+      if (!wrap) {\n+        return;\n+      }\n+      const willOpen = !wrap.classList.contains(openClass);\n+      closeAll(wrap);\n+      wrap.classList.toggle(openClass, willOpen);\n+      toggleBtn.setAttribute('aria-expanded', willOpen ? 'true' : 'false');\n+      return;\n+    }\n+    if (!target.closest(wrapSelector)) {\n+      closeAll();\n+    }\n+\n+    \u002F\u002F New expand item\n+    const elActionExpands = document.querySelectorAll('.lp-cb-item-action-expand');\n+    if (target.closest('.lp-cb-item-action-expand-toggle')) {\n+      const elParentAction = target.closest('.lp-cb-item-action-wrap');\n+      const elActionExpand = elParentAction.querySelector('.lp-cb-item-action-expand');\n+      elActionExpand.classList.toggle(lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpClassName.hidden);\n+\n+      \u002F\u002F Close all\n+      elActionExpands.forEach(elActionExpandCheck => {\n+        if (elActionExpandCheck !== elActionExpand) {\n+          elActionExpandCheck.classList.add(lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpClassName.hidden);\n+        }\n+      });\n+    }\n+    if (!target.closest('.lp-cb-item-action-expand-toggle')) {\n+      elActionExpands.forEach(elActionExpandCheck => {\n+        elActionExpandCheck.classList.add(lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpClassName.hidden);\n+      });\n+    }\n+    \u002F\u002F End new expand item\n+\n+    \u002F\u002F Item action\n+    if (target.closest('.lp-cb-item-action')) {\n+      const elAction = target.closest('.lp-cb-item-action');\n+      const elParentActionWrap = elAction.closest('.lp-cb-item-action-wrap');\n+      const elParentActionExpand = elParentActionWrap.querySelector('.lp-cb-item-action-expand-toggle');\n+      const dataSend = JSON.parse(elAction.dataset.send);\n+      lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elParentActionExpand, 1);\n+      const svg = elParentActionExpand.querySelector('svg');\n+      \u002F\u002FlpUtils.lpShowHideEl( svg, 0 );\n+\n+      \u002F\u002F Ajax to generate prompt\n+      const callBack = {\n+        success: response => {\n+          const {\n+            message,\n+            status,\n+            data\n+          } = response;\n+          lpAssetsJsPath_lpToastify__WEBPACK_IMPORTED_MODULE_19__.show(message, status);\n+          if (status === 'success') {\n+            if (data.redirect_url) {\n+              window.location.href = data.redirect_url;\n+            } else if (data.html) {\n+              const elParentLi = elAction.closest('li.course');\n+              elParentLi.outerHTML = data.html;\n+            } else if (dataSend.action_type === 'delete') {\n+              const elParentLi = elAction.closest('li.course');\n+              elParentLi.remove();\n+            }\n+          }\n+        },\n+        error: error => {\n+          lpAssetsJsPath_lpToastify__WEBPACK_IMPORTED_MODULE_19__.show(error, 'error');\n+        },\n+        completed: () => {\n+          lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(elParentActionExpand, 0);\n+        }\n+      };\n+      window.lpAJAXG.fetchAJAX(dataSend, callBack);\n+    }\n+    \u002F\u002F End item action\n+  });\n+  document.addEventListener('keydown', e => {\n+    if (e.key === 'Escape') {\n+      closeAll();\n+    }\n+  });\n+};\n+\n+\u002F\u002F Add loading state to search buttons on form submit (page reload)\n+document.addEventListener('submit', e => {\n+  const form = e.target.closest('.cb-search-form');\n+  if (!form) {\n+    return;\n+  }\n+  const searchBtn = form.querySelector('.cb-search-btn');\n+  if (searchBtn) {\n+    searchBtn.classList.add('loading');\n+    searchBtn.disabled = true;\n+  }\n+});\n+\n \u002F\u002F Initialize components\n initBuilderComponents();\n \n \u002F\u002F Events\n document.addEventListener('click', e => {\n   try {\n-    (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_11__.initElsTomSelect)();\n+    (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_17__.initElsTomSelect)();\n   } catch (e) {\n     console.warn('Error initializing TomSelect:', e);\n   }\n@@ -25731,7 +47644,7 @@\n document.addEventListener('DOMContentLoaded', () => {\n   \u002F\u002F Sure that the TomSelect is loaded if listener can't find elements.\n   try {\n-    (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_11__.initElsTomSelect)();\n+    (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_17__.initElsTomSelect)();\n   } catch (e) {\n     console.warn('Error initializing TomSelect on DOMContentLoaded:', e);\n   }\n@@ -25745,16 +47658,16 @@\n });\n \n \u002F\u002F Use lpOnElementReady safely\n-if (lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_12__.Utils?.lpOnElementReady) {\n-  lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_12__.Utils.lpOnElementReady('select.lp-tom-select', () => {\n+if (lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_18__.Utils?.lpOnElementReady) {\n+  lpAssetsJsPath_admin_utils_admin_js__WEBPACK_IMPORTED_MODULE_18__.Utils.lpOnElementReady('select.lp-tom-select', () => {\n     try {\n-      (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_11__.initElsTomSelect)();\n+      (0,lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_17__.initElsTomSelect)();\n     } catch (e) {\n       console.warn('Error initializing TomSelect:', e);\n     }\n   });\n }\n-window.lpFindTomSelect = lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_11__.initElsTomSelect;\n+window.lpFindTomSelect = lpAssetsJsPath_admin_init_tom_select_js__WEBPACK_IMPORTED_MODULE_17__.initElsTomSelect;\n \n \u002F**\n  * Initialize BuilderMaterial for Course Builder Settings tab Material\n@@ -25780,7 +47693,7 @@\n             \u002F\u002F Mark as initialized to prevent multiple instances\n             initializedContainers.add(materialContainer);\n             \u002F\u002F Initialize BuilderMaterial\n-            new _course_builder_builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_9__.BuilderMaterial(materialContainer);\n+            new _course_builder_builder_lesson_builder_material_js__WEBPACK_IMPORTED_MODULE_12__.BuilderMaterial(materialContainer);\n           }\n         } catch (e) {\n           console.error('Error initializing BuilderMaterial:', e);\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend: course-builder.min.js\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourse-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -75,14 +75,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -113,10 +113,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -134,12 +134,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -152,11 +152,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -177,12 +177,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -325,15 +325,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -75,14 +75,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -113,10 +113,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -134,12 +134,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -152,11 +152,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -177,12 +177,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -325,15 +325,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -514,10 +514,10 @@\n \u002F* harmony import *\u002F var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Fapi *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n \u002F* harmony import *\u002F var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! ..\u002Futils *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n \u002F* harmony import *\u002F var _utils_cookies__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! ..\u002Futils\u002Fcookies *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookies.js\");\n-\u002F**\r\n- * @deprecated 4.2.5.8\r\n- * But still support for theme has html old, override.\r\n- * Todo: if want remove file, need to check theme override file archive, can via remove hook override file.\r\n+\u002F**\n+ * @deprecated 4.2.5.8\n+ * But still support for theme has html old, override.\n+ * Todo: if want remove file, need to check theme override file archive, can via remove hook override file.\n  *\u002F\n \n \n@@ -827,54 +827,54 @@\n         }\n       };\n     },\n-    \u002F*callBackPaginationTypeNumber: ( elListCourse ) => {\r\n-    \tif ( ! elListCourse ) {\r\n-    \t\treturn;\r\n-    \t}\r\n-    \tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\r\n-    \t\t\treturn {\r\n-    \t\tbefore: () => {\r\n-    \t\t\tconst urlPush = lpAddQueryArgs( currentUrl, args );\r\n-    \t\t\twindow.history.pushState( '', '', urlPush );\r\n-    \t\t\t\u002F\u002F Save filter courses to Storage\r\n-    \t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\r\n-    \t\t\tif ( skeleton ) {\r\n-    \t\t\t\tskeleton.style.display = 'block';\r\n-    \t\t\t}\r\n-    \t\t},\r\n-    \t\tsuccess: ( res ) => {\r\n-    \t\t\t\u002F\u002F Remove all items before insert new items.\r\n-    \t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\r\n-    \t\t\telLis.forEach( ( elLi ) => {\r\n-    \t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\r\n-    \t\t\t\tif ( parent ) {\r\n-    \t\t\t\t\treturn;\r\n-    \t\t\t\t}\r\n-    \t\t\t\telLi.remove();\r\n-    \t\t\t} );\r\n-    \t\t\t\t\t\u002F\u002F Insert new items.\r\n-    \t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\r\n-    \t\t\t\t\t\u002F\u002F Check if Pagination exists will remove.\r\n-    \t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\r\n-    \t\t\tif ( elPagination ) {\r\n-    \t\t\t\telPagination.remove();\r\n-    \t\t\t}\r\n-    \t\t\t\t\t\u002F\u002F Insert Pagination.\r\n-    \t\t\tconst pagination = res.data.pagination || '';\r\n-    \t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\r\n-    \t\t},\r\n-    \t\terror: ( error ) => {\r\n-    \t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\r\n-    \t\t},\r\n-    \t\tcompleted: () => {\r\n-    \t\t\tif ( skeleton ) {\r\n-    \t\t\t\tskeleton.style.display = 'none';\r\n-    \t\t\t}\r\n-    \t\t\t\t\t\u002F\u002F Scroll to archive element\r\n-    \t\t\tconst optionScroll = { behavior: 'smooth' };\r\n-    \t\t\telListCourse.closest( '.lp-archive-courses' ).scrollIntoView( optionScroll );\r\n-    \t\t},\r\n-    \t};\r\n+    \u002F*callBackPaginationTypeNumber: ( elListCourse ) => {\n+    \tif ( ! elListCourse ) {\n+    \t\treturn;\n+    \t}\n+    \tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\n+    \t\treturn {\n+    \t\tbefore: () => {\n+    \t\t\tconst urlPush = lpAddQueryArgs( currentUrl, args );\n+    \t\t\twindow.history.pushState( '', '', urlPush );\n+    \t\t\t\u002F\u002F Save filter courses to Storage\n+    \t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\n+    \t\t\tif ( skeleton ) {\n+    \t\t\t\tskeleton.style.display = 'block';\n+    \t\t\t}\n+    \t\t},\n+    \t\tsuccess: ( res ) => {\n+    \t\t\t\u002F\u002F Remove all items before insert new items.\n+    \t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\n+    \t\t\telLis.forEach( ( elLi ) => {\n+    \t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\n+    \t\t\t\tif ( parent ) {\n+    \t\t\t\t\treturn;\n+    \t\t\t\t}\n+    \t\t\t\telLi.remove();\n+    \t\t\t} );\n+    \t\t\t\t\u002F\u002F Insert new items.\n+    \t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\n+    \t\t\t\t\u002F\u002F Check if Pagination exists will remove.\n+    \t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\n+    \t\t\tif ( elPagination ) {\n+    \t\t\t\telPagination.remove();\n+    \t\t\t}\n+    \t\t\t\t\u002F\u002F Insert Pagination.\n+    \t\t\tconst pagination = res.data.pagination || '';\n+    \t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\n+    \t\t},\n+    \t\terror: ( error ) => {\n+    \t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\n+    \t\t},\n+    \t\tcompleted: () => {\n+    \t\t\tif ( skeleton ) {\n+    \t\t\t\tskeleton.style.display = 'none';\n+    \t\t\t}\n+    \t\t\t\t\u002F\u002F Scroll to archive element\n+    \t\t\tconst optionScroll = { behavior: 'smooth' };\n+    \t\t\telListCourse.closest( '.lp-archive-courses' ).scrollIntoView( optionScroll );\n+    \t\t},\n+    \t};\n     },*\u002F\n     callBackPaginationTypeLoadMore: (elArchive, elListCourse) => {\n       \u002F\u002Fconsole.log( 'callBackPaginationTypeLoadMore' );\n@@ -895,8 +895,8 @@\n             btnLoadMore.setAttribute('disabled', 'disabled');\n           }\n \n-          \u002F*if ( skeleton ) {\r\n-          \tskeleton.style.display = 'block';\r\n+          \u002F*if ( skeleton ) {\n+          \tskeleton.style.display = 'block';\n           }*\u002F\n         },\n         success: res => {\n@@ -918,8 +918,8 @@\n             btnLoadMore.remove();\n           }\n \n-          \u002F*if ( skeleton ) {\r\n-          \tskeleton.style.display = 'none';\r\n+          \u002F*if ( skeleton ) {\n+          \tskeleton.style.display = 'none';\n           }*\u002F\n         }\n       };\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses-v2.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses-v2.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses-v2.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcourses-v2.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -75,14 +75,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -113,10 +113,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -134,12 +134,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -152,11 +152,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -177,12 +177,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -325,15 +325,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -449,11 +449,11 @@\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Fapi *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\");\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * Handle events for courses list.\r\n- *\r\n- * @since 4.2.5.8\r\n- * @version 1.0.1\r\n+\u002F**\n+ * Handle events for courses list.\n+ *\n+ * @since 4.2.5.8\n+ * @version 1.0.1\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcurriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcurriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcurriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcurriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -399,18 +399,18 @@\n   \\**********************************************\u002F\n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! ..\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * Handle curriculum\r\n- *\r\n- * @version 1.0.1\r\n- * @since 4.2.7.6\r\n+\u002F**\n+ * Handle curriculum\n+ *\n+ * @version 1.0.1\n+ * @since 4.2.7.6\n  *\u002F\n \n \n \n \u002F\u002F Events\n-\u002F**\r\n- * 1. Handle click section header\r\n+\u002F**\n+ * 1. Handle click section header\n  *\u002F\n document.addEventListener('click', e => {\n   const target = e.target;\n@@ -429,8 +429,8 @@\n   }\n });\n \n-\u002F**\r\n- * 1. Handle search title course\r\n+\u002F**\n+ * 1. Handle search title course\n  *\u002F\n document.addEventListener('keyup', e => {\n   const target = e.target;\n@@ -442,8 +442,8 @@\n   }\n });\n \n-\u002F**\r\n- * 1. Handle submit form search\r\n+\u002F**\n+ * 1. Handle submit form search\n  *\u002F\n document.addEventListener('submit', e => {\n   const target = e.target;\n@@ -535,16 +535,16 @@\n   return str.normalize('NFD').replace(\u002F[\\u0300-\\u036f]\u002Fg, '');\n };\n \n-\u002F**\r\n- * Search string on text\r\n- * Logic:\r\n- * User enter text: \"11 lesson\"\r\n- * JS will search string has word \"lesson\" and \"11\"\r\n- * Result: \"Lesson 11: Introduction\"\r\n- * Result: \"11 lesson: Introduction\"\r\n- *\r\n- * @param text\r\n- * @param searchTerm\r\n+\u002F**\n+ * Search string on text\n+ * Logic:\n+ * User enter text: \"11 lesson\"\n+ * JS will search string has word \"lesson\" and \"11\"\n+ * Result: \"Lesson 11: Introduction\"\n+ * Result: \"11 lesson: Introduction\"\n+ *\n+ * @param text\n+ * @param searchTerm\n  *\u002F\n const searchText = (text, searchTerm) => {\n   const normalizedText = normalizeVietnamese(text.toLowerCase());\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcustom.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcustom.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcustom.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fcustom.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -2,8 +2,8 @@\n \u002F*!***********************************************!*\\\n   !*** .\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fcustom.js ***!\n   \\***********************************************\u002F\n-\u002F**\r\n- * Custom functions for frontend quiz.\r\n+\u002F**\n+ * Custom functions for frontend quiz.\n  *\u002F\n \n const {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -51,21 +51,20 @@\n   }, 1);\n \n   \u002F\u002F For case multiple ul list instructors on a page.\n-  \u002F*document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-  \tconst elListInstructors = document.querySelectorAll( '.lp-list-instructors:not(.detected)' );\r\n-  \tif ( elListInstructors.length > 0 ) {\r\n-  \t\telListInstructors.forEach( function( el ) {\r\n-  \t\t\tconst elUlListInstructors = el.querySelector( '.ul-list-instructors' );\r\n-  \t\t\tquery = { paged: 1 };\r\n-  \t\t\tgetInstructors( query, true, function( res ) {\r\n-  \t\t\t\telUlListInstructors.innerHTML = res.data.content;\r\n-  \n-  \t\t\t\tif ( res.data.pagination !== undefined ) {\r\n-  \t\t\t\t\tel.insertAdjacentHTML( 'beforeend', res.data.pagination );\r\n-  \t\t\t\t}\r\n-  \t\t\t} );\r\n-  \t\t} );\r\n-  \t}\r\n+  \u002F*document.addEventListener( 'DOMContentLoaded', function( event ) {\n+  \tconst elListInstructors = document.querySelectorAll( '.lp-list-instructors:not(.detected)' );\n+  \tif ( elListInstructors.length > 0 ) {\n+  \t\telListInstructors.forEach( function( el ) {\n+  \t\t\tconst elUlListInstructors = el.querySelector( '.ul-list-instructors' );\n+  \t\t\tquery = { paged: 1 };\n+  \t\t\tgetInstructors( query, true, function( res ) {\n+  \t\t\t\telUlListInstructors.innerHTML = res.data.content;\n+  \t\t\t\t\tif ( res.data.pagination !== undefined ) {\n+  \t\t\t\t\tel.insertAdjacentHTML( 'beforeend', res.data.pagination );\n+  \t\t\t\t}\n+  \t\t\t} );\n+  \t\t} );\n+  \t}\n   } );*\u002F\n \n   pagination();\n@@ -145,10 +144,34 @@\n \n __webpack_require__.r(__webpack_exports__);\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n+\u002F* harmony export *\u002F   listenElementCreated: () => (\u002F* binding *\u002F listenElementCreated),\n+\u002F* harmony export *\u002F   listenElementViewed: () => (\u002F* binding *\u002F listenElementViewed),\n \u002F* harmony export *\u002F   lpAddQueryArgs: () => (\u002F* binding *\u002F lpAddQueryArgs),\n+\u002F* harmony export *\u002F   lpAjaxParseJsonOld: () => (\u002F* binding *\u002F lpAjaxParseJsonOld),\n+\u002F* harmony export *\u002F   lpClassName: () => (\u002F* binding *\u002F lpClassName),\n \u002F* harmony export *\u002F   lpFetchAPI: () => (\u002F* binding *\u002F lpFetchAPI),\n-\u002F* harmony export *\u002F   lpGetCurrentURLNoParam: () => (\u002F* binding *\u002F lpGetCurrentURLNoParam)\n+\u002F* harmony export *\u002F   lpGetCurrentURLNoParam: () => (\u002F* binding *\u002F lpGetCurrentURLNoParam),\n+\u002F* harmony export *\u002F   lpOnElementReady: () => (\u002F* binding *\u002F lpOnElementReady),\n+\u002F* harmony export *\u002F   lpSetLoadingEl: () => (\u002F* binding *\u002F lpSetLoadingEl),\n+\u002F* harmony export *\u002F   lpShowHideEl: () => (\u002F* binding *\u002F lpShowHideEl),\n+\u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.3\n+ *\u002F\n+const lpClassName = {\n+  hidden: 'lp-hidden',\n+  loading: 'loading',\n+  elCollapse: 'lp-collapse',\n+  elSectionToggle: '.lp-section-toggle',\n+  elTriggerToggle: '.lp-trigger-toggle'\n+};\n const lpFetchAPI = (url, data = {}, functions = {}) => {\n   if ('function' === typeof functions.before) {\n     functions.before();\n@@ -170,6 +193,12 @@\n     }\n   });\n };\n+\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n+ *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n   const hasParams = currentUrl.includes('?');\n@@ -186,6 +215,147 @@\n   return url;\n };\n \n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementViewed = (el, callback) => {\n+  const observerSeeItem = new IntersectionObserver(function (entries) {\n+    for (const entry of entries) {\n+      if (entry.isIntersecting) {\n+        callback(entry);\n+      }\n+    }\n+  });\n+  observerSeeItem.observe(el);\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementCreated = callback => {\n+  const observerCreateItem = new MutationObserver(function (mutations) {\n+    mutations.forEach(function (mutation) {\n+      if (mutation.addedNodes) {\n+        mutation.addedNodes.forEach(function (node) {\n+          if (node.nodeType === 1) {\n+            callback(node);\n+          }\n+        });\n+      }\n+    });\n+  });\n+  observerCreateItem.observe(document, {\n+    childList: true,\n+    subtree: true\n+  });\n+  \u002F\u002F End.\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n+ *\u002F\n+const lpOnElementReady = (selector, callback) => {\n+  const element = document.querySelector(selector);\n+  if (element) {\n+    callback(element);\n+    return;\n+  }\n+  const observer = new MutationObserver((mutations, obs) => {\n+    const element = document.querySelector(selector);\n+    if (element) {\n+      obs.disconnect();\n+      callback(element);\n+    }\n+  });\n+  observer.observe(document.documentElement, {\n+    childList: true,\n+    subtree: true\n+  });\n+};\n+\n+\u002F\u002F Parse JSON from string with content include LP_AJAX_START.\n+const lpAjaxParseJsonOld = data => {\n+  if (typeof data !== 'string') {\n+    return data;\n+  }\n+  const m = String.raw({\n+    raw: data\n+  }).match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);\n+  try {\n+    if (m) {\n+      data = JSON.parse(m[1].replace(\u002F(?:\\r\\n|\\r|\\n)\u002Fg, ''));\n+    } else {\n+      data = JSON.parse(data);\n+    }\n+  } catch (e) {\n+    data = {};\n+  }\n+  return data;\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpShowHideEl = (el, status = 0) => {\n+  if (!el) {\n+    return;\n+  }\n+  if (!status) {\n+    el.classList.add(lpClassName.hidden);\n+  } else {\n+    el.classList.remove(lpClassName.hidden);\n+  }\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpSetLoadingEl = (el, status) => {\n+  if (!el) {\n+    return;\n+  }\n+  if (!status) {\n+    el.classList.remove(lpClassName.loading);\n+  } else {\n+    el.classList.add(lpClassName.loading);\n+  }\n+};\n+\n+\u002F\u002F Toggle collapse section\n+const toggleCollapse = (e, target, elTriggerClassName = '', elsExclude = [], callback) => {\n+  if (!elTriggerClassName) {\n+    elTriggerClassName = lpClassName.elTriggerToggle;\n+  }\n+\n+  \u002F\u002F Exclude elements, which should not trigger the collapse toggle\n+  if (elsExclude && elsExclude.length > 0) {\n+    for (const elExclude of elsExclude) {\n+      if (target.closest(elExclude)) {\n+        return;\n+      }\n+    }\n+  }\n+  const elTrigger = target.closest(elTriggerClassName);\n+  if (!elTrigger) {\n+    return;\n+  }\n+  const elSectionToggle = elTrigger.closest(`${lpClassName.elSectionToggle}`);\n+  if (!elSectionToggle) {\n+    return;\n+  }\n+  elSectionToggle.classList.toggle(`${lpClassName.elCollapse}`);\n+  if ('function' === typeof callback) {\n+    callback(elSectionToggle);\n+  }\n+};\n+\n \n \u002F***\u002F }\n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Flp-configs.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Flp-configs.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Flp-configs.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Flp-configs.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -70,10 +70,10 @@\n   }\n };\n \n-\u002F**\r\n- * Question blocks.\r\n- *\r\n- * Allow to sort the blocks of question\r\n+\u002F**\n+ * Question blocks.\n+ *\n+ * Allow to sort the blocks of question\n  *\u002F\n const questionBlocks = function () {\n   return LP.Hook.applyFilters('question-blocks', ['title', 'content', 'answer-options', 'explanation', 'hint', 'buttons']);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fmodal.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fmodal.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fmodal.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fmodal.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -20,11 +20,11 @@\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__);\n \n-\u002F**\r\n- * Create Modal popup.\r\n- * Edit: Use React Hook.\r\n- *\r\n- * @author Nhamdv - ThimPress.\r\n+\u002F**\n+ * Create Modal popup.\n+ * Edit: Use React Hook.\n+ *\n+ * @author Nhamdv - ThimPress.\n  *\u002F\n \n \n@@ -159,8 +159,8 @@\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var refx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! refx *\u002F \".\u002Fnode_modules\u002Frefx\u002Frefx.js\");\n \u002F* harmony import *\u002F var refx__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(refx__WEBPACK_IMPORTED_MODULE_0__);\n-\u002F**\r\n- * External dependencies\r\n+\u002F**\n+ * External dependencies\n  *\u002F\n \n const effects = {\n@@ -175,12 +175,12 @@\n   }\n };\n \n-\u002F**\r\n- * Applies the custom middlewares used specifically in the editor module.\r\n- *\r\n- * @param {Object} store Store Object.\r\n- *\r\n- * @return {Object} Update Store Object.\r\n+\u002F**\n+ * Applies the custom middlewares used specifically in the editor module.\n+ *\n+ * @param {Object} store Store Object.\n+ *\n+ * @return {Object} Update Store Object.\n  *\u002F\n function applyMiddlewares(store) {\n   let enhancedDispatch = () => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -283,11 +283,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -693,8 +693,8 @@\n     hidden: 'lp-hidden'\n   };\n \n-  \u002F**\r\n-   * Get elements to use.\r\n+  \u002F**\n+   * Get elements to use.\n    *\u002F\n   const getElements = () => {\n     elBtnSave = formCoverImage.querySelector(`.${className.BtnSaveCoverImage}`);\n@@ -931,11 +931,11 @@\n \n \n \n-\u002F**\r\n- * JS Recover order\r\n- *\r\n- * @since 4.0.0\r\n- * @version 1.0.1\r\n+\u002F**\n+ * JS Recover order\n+ *\n+ * @since 4.0.0\n+ * @version 1.0.1\n  *\u002F\n const recoverOrder = () => {\n   const toastify = toastify_js__WEBPACK_IMPORTED_MODULE_1___default()({\n@@ -1012,11 +1012,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Handle click tab call API\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Handle click tab call API\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.0\n  *\u002F\n const profileQuizTab = () => {\n   const handleClickTab = (e, target) => {\n@@ -1157,14 +1157,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -1195,10 +1195,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -1216,12 +1216,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -1234,11 +1234,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -1259,12 +1259,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -1407,15 +1407,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquestion-types.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquestion-types.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquestion-types.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquestion-types.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -100,12 +100,12 @@\n     this.inputs[k] = el;\n   };\n \n-  \u002F**\r\n-   * Only show correct answer\r\n-   * status = completed\r\n-   * todo: check isset answered but if skip it will not show.\r\n-   *\r\n-   * @author Nhamdv\r\n+  \u002F**\n+   * Only show correct answer\n+   * status = completed\n+   * todo: check isset answered but if skip it will not show.\n+   *\n+   * @author Nhamdv\n    *\u002F\n   maybeShowCorrectAnswer = () => {\n     const {\n@@ -117,10 +117,10 @@\n     return status === 'completed' && showCorrectReview || isCheckedAnswer && !isReviewing;\n   };\n \n-  \u002F**\r\n-   * Disable answer option in review mode or user has checked the question.\r\n-   *\r\n-   * @param option Doc.\r\n+  \u002F**\n+   * Disable answer option in review mode or user has checked the question.\n+   *\n+   * @param option Doc.\n    *\u002F\n   maybeDisabledOption = option => {\n     const {\n@@ -131,9 +131,9 @@\n     return isCheckedAnswer || status !== 'started';\n   };\n \n-  \u002F**\r\n-   * Event callback for clicking on answer option to\r\n-   * store answered\r\n+  \u002F**\n+   * Event callback for clicking on answer option to\n+   * store answered\n    *\u002F\n   setAnswerChecked = () => event => {\n     const {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -24,8 +24,8 @@\n \n \n \n-\u002F**\r\n- * Displays list of all attempt from a quiz.\r\n+\u002F**\n+ * Displays list of all attempt from a quiz.\n  *\u002F\n const Attempts = () => {\n   const attempts = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_1__.select)('learnpress\u002Fquiz').getData('attempts') || [];\n@@ -46,12 +46,12 @@\n     className: \"quiz-attempts__result\"\n   }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Result', 'learnpress')))), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"tbody\", null, attempts.map((row, key) => {\n     \u002F\u002F Re-write value to attempts.timeSpend\n-    \u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-    \tconst timespendStart = window.localStorage.getItem( 'quiz_start_' + lpQuizSettings.id ),\r\n-    \t\ttimespendEnd = window.localStorage.getItem( 'quiz_end_' + lpQuizSettings.id );\r\n-    \tif ( timespendStart && timespendEnd ) {\r\n-    \t\trow.timeSpend = timeDifference( timespendStart, timespendEnd ).duration;\r\n-    \t}\r\n+    \u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+    \tconst timespendStart = window.localStorage.getItem( 'quiz_start_' + lpQuizSettings.id ),\n+    \t\ttimespendEnd = window.localStorage.getItem( 'quiz_end_' + lpQuizSettings.id );\n+    \tif ( timespendStart && timespendEnd ) {\n+    \t\trow.timeSpend = timeDifference( timespendStart, timespendEnd ).duration;\n+    \t}\n     }*\u002F\n     return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"tr\", {\n       key: `attempt-${key}`\n@@ -258,8 +258,8 @@\n \n \n class ButtonHint extends _wordpress_element__WEBPACK_IMPORTED_MODULE_1__.Component {\n-  \u002F**\r\n-   * Callback to show hint of question\r\n+  \u002F**\n+   * Callback to show hint of question\n    *\u002F\n   showHint = () => {\n     const {\n@@ -343,18 +343,18 @@\n     }\n \n     \u002F\u002F No require enroll\n-    \u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-    \t\u002F\u002F Reset data\r\n-    \twindow.localStorage.removeItem( 'quiz_start_' + lpQuizSettings.id );\r\n-    \twindow.localStorage.removeItem( 'quiz_userdata_' + lpQuizSettings.id );\r\n-    \twindow.localStorage.setItem( 'quiz_start_' + lpQuizSettings.id, Date.now() );\r\n-    \t\t\t\u002F\u002F Set retake to local.storage\r\n-    \tconst retakenNumber = window.localStorage.getItem( 'quiz_retake_' + lpQuizSettings.id );\r\n-    \tif ( retakenNumber >= 1 ) {\r\n-    \t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, parseInt( retakenNumber ) + 1 );\r\n-    \t} else {\r\n-    \t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, 1 );\r\n-    \t}\r\n+    \u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+    \t\u002F\u002F Reset data\n+    \twindow.localStorage.removeItem( 'quiz_start_' + lpQuizSettings.id );\n+    \twindow.localStorage.removeItem( 'quiz_userdata_' + lpQuizSettings.id );\n+    \twindow.localStorage.setItem( 'quiz_start_' + lpQuizSettings.id, Date.now() );\n+    \t\t\u002F\u002F Set retake to local.storage\n+    \tconst retakenNumber = window.localStorage.getItem( 'quiz_retake_' + lpQuizSettings.id );\n+    \tif ( retakenNumber >= 1 ) {\n+    \t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, parseInt( retakenNumber ) + 1 );\n+    \t} else {\n+    \t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, 1 );\n+    \t}\n     }*\u002F\n \n     startQuiz();\n@@ -564,10 +564,10 @@\n   }\n }\n \n-\u002F**\r\n- * Helper function to check a button should be show or not.\r\n- *\r\n- * Buttons [hint, check]\r\n+\u002F**\n+ * Helper function to check a button should be show or not.\n+ *\n+ * Buttons [hint, check]\n  *\u002F\n const MaybeShowButton = (0,_wordpress_compose__WEBPACK_IMPORTED_MODULE_3__.compose)((0,_wordpress_data__WEBPACK_IMPORTED_MODULE_2__.withSelect)(select => {\n   const {\n@@ -706,11 +706,11 @@\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_1___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_1__);\n \n-\u002F**\r\n- * Quiz Content.\r\n- * Edit: Use React hook.\r\n- *\r\n- * @author nhamdv - ThimPress\r\n+\u002F**\n+ * Quiz Content.\n+ * Edit: Use React hook.\n+ *\n+ * @author nhamdv - ThimPress\n  *\u002F\n \n const Content = () => {\n@@ -816,11 +816,11 @@\n \u002F* harmony import *\u002F var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);\n \u002F* harmony import *\u002F var _duration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\u002F*! ..\u002Fduration *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fduration\u002Findex.js\");\n \n-\u002F**\r\n- * Quiz Meta.\r\n- * Edit: Use React Hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n+\u002F**\n+ * Quiz Meta.\n+ * Edit: Use React Hook.\n+ *\n+ * @author Nhamdv - ThimPress\n  *\u002F\n \n \n@@ -1371,11 +1371,11 @@\n \u002F* harmony import *\u002F var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);\n \u002F* harmony import *\u002F var _single_curriculum_components_items_progress__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\u002F*! ..\u002F..\u002F..\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress *\u002F \".\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress.js\");\n \n-\u002F**\r\n- * Quizz Result.\r\n- * Edit: Use React hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n+\u002F**\n+ * Quizz Result.\n+ * Edit: Use React hook.\n+ *\n+ * @author Nhamdv - ThimPress\n  *\u002F\n \n \n@@ -1481,9 +1481,9 @@\n     }, results.result > 0 ? 1000 : 10)();\n   };\n \n-  \u002F**\r\n-   * Render HTML elements.\r\n-   *\r\n+  \u002F**\n+   * Render HTML elements.\n+   *\n    *\u002F\n \n   let percentResult = percentage;\n@@ -1659,9 +1659,9 @@\n     const pcTop = $qs.offset().top - 92;\n     let isFixed = false;\n \n-    \u002F**\r\n-     * Check when status bar is stopped in the top\r\n-     * to add new class into html\r\n+    \u002F**\n+     * Check when status bar is stopped in the top\n+     * to add new class into html\n      *\u002F\n     $sc.on('scroll', () => {\n       if ($sc.scrollTop() >= pcTop) {\n@@ -1683,8 +1683,8 @@\n     });\n   }, []);\n \n-  \u002F**\r\n-   * Submit question to record results.\r\n+  \u002F**\n+   * Submit question to record results.\n    *\u002F\n   const submit = () => {\n     const {\n@@ -1767,10 +1767,10 @@\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\u002F*! @wordpress\u002Fdata *\u002F \"@wordpress\u002Fdata\");\n \u002F* harmony import *\u002F var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);\n \n-\u002F**\r\n- * Edit: React hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n+\u002F**\n+ * Edit: React hook.\n+ *\n+ * @author Nhamdv - ThimPress\n  *\u002F\n \n \n@@ -2019,11 +2019,11 @@\n   camelCaseDashObjectKeys,\n   Hook\n } = LP;\n-\u002F**\r\n- * Set user data for app.\r\n- *\r\n- * @param key\r\n- * @param data\r\n+\u002F**\n+ * Set user data for app.\n+ *\n+ * @param key\n+ * @param data\n  *\u002F\n function setQuizData(key, data) {\n   if (typeof key === 'string') {\n@@ -2039,10 +2039,10 @@\n   };\n }\n \n-\u002F**\r\n- * Set question will display.\r\n- *\r\n- * @param questionId\r\n+\u002F**\n+ * Set question will display.\n+ *\n+ * @param questionId\n  *\u002F\n function setCurrentQuestion(questionId) {\n   return {\n@@ -2072,8 +2072,8 @@\n   };\n }\n \n-\u002F**\r\n- * Request to api for starting a quiz.\r\n+\u002F**\n+ * Request to api for starting a quiz.\n  *\u002F\n const startQuiz = function* () {\n   const {\n@@ -2232,17 +2232,17 @@\n   };\n }\n \n-\u002F**\r\n- * Handle when user change value on input fill in blanks.\r\n- *\r\n- * @param questionId\r\n- * @param idInput\r\n- * @param valueInput\r\n- * @param quizId\r\n- * @param courseId\r\n- * @param userId\r\n- * @since 4.2.5.9\r\n- * @version 1.0.0\r\n+\u002F**\n+ * Handle when user change value on input fill in blanks.\n+ *\n+ * @param questionId\n+ * @param idInput\n+ * @param valueInput\n+ * @param quizId\n+ * @param courseId\n+ * @param userId\n+ * @since 4.2.5.9\n+ * @version 1.0.0\n  *\u002F\n function updateUserQuestionFibAnswers(questionId, idInput, valueInput, quizId, courseId = 0, userId = 0) {\n   return {\n@@ -2391,13 +2391,13 @@\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var refx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! refx *\u002F \".\u002Fnode_modules\u002Frefx\u002Frefx.js\");\n \u002F* harmony import *\u002F var refx__WEBPACK_IMPORTED_MODULE_0___default = \u002F*#__PURE__*\u002F__webpack_require__.n(refx__WEBPACK_IMPORTED_MODULE_0__);\n-\u002F**\r\n- * External dependencies\r\n+\u002F**\n+ * External dependencies\n  *\u002F\n \n \n-\u002F**\r\n- * Internal dependencies\r\n+\u002F**\n+ * Internal dependencies\n  *\u002F\n \u002F\u002Fimport effects from '.\u002Feffects';\n \n@@ -2413,12 +2413,12 @@\n   }\n };\n \n-\u002F**\r\n- * Applies the custom middlewares used specifically in the editor module.\r\n- *\r\n- * @param {Object} store Store Object.\r\n- *\r\n- * @return {Object} Update Store Object.\r\n+\u002F**\n+ * Applies the custom middlewares used specifically in the editor module.\n+ *\n+ * @param {Object} store Store Object.\n+ *\n+ * @return {Object} Update Store Object.\n  *\u002F\n function applyMiddlewares(store) {\n   let enhancedDispatch = () => {\n@@ -2769,11 +2769,11 @@\n };\n \n \n-\u002F**\r\n- * Get current status of an item in course.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n+\u002F**\n+ * Get current status of an item in course.\n+ *\n+ * @param state\n+ * @param itemId\n  *\u002F\n function getItemStatus(state, itemId) {\n   const item = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select)('course-learner\u002Fuser').getItemById(itemId);\n@@ -2783,35 +2783,35 @@\n   return state[prop] || defaultValue;\n }\n \n-\u002F**\r\n- * Get quiz attempted.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n- * @return {Array}\r\n+\u002F**\n+ * Get quiz attempted.\n+ *\n+ * @param state\n+ * @param itemId\n+ * @return {Array}\n  *\u002F\n function getQuizAttempts(state, itemId) {\n   const item = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select)('course-learner\u002Fuser').getItemById(itemId);\n   return item ? get(item, 'userSettings.attempts') : [];\n }\n \n-\u002F**\r\n- * Get answers for a quiz user has did.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n- * @return {{}}\r\n+\u002F**\n+ * Get answers for a quiz user has did.\n+ *\n+ * @param state\n+ * @param itemId\n+ * @return {{}}\n  *\u002F\n function getQuizAnswered(state, itemId) {\n   const item = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select)('course-learner\u002Fuser').getItemById(itemId);\n   return item ? get(item, 'userSettings.answered', {}) : {};\n }\n \n-\u002F**\r\n- * Get all questions in quiz.\r\n- *\r\n- * @param state\r\n- * @return {*}\r\n+\u002F**\n+ * Get all questions in quiz.\n+ *\n+ * @param state\n+ * @return {*}\n  *\u002F\n function getQuestions(state) {\n   const {\n@@ -2821,12 +2821,12 @@\n   return questions ? Object.values(questions) : [];\n }\n \n-\u002F**\r\n- * Get property of store data.\r\n- *\r\n- * @param state - Store data\r\n- * @param prop - Optional. NULL will return all data.\r\n- * @return {*}\r\n+\u002F**\n+ * Get property of store data.\n+ *\n+ * @param state - Store data\n+ * @param prop - Optional. NULL will return all data.\n+ * @return {*}\n  *\u002F\n function getData(state, prop) {\n   const {\n@@ -2859,12 +2859,12 @@\n   return get(userQuiz, `answered.${id}.mark`) || undefined;\n }\n \n-\u002F**\r\n- * Get current question is doing.\r\n- *\r\n- * @param {Object} state\r\n- * @param {string} ret\r\n- * @return {*}\r\n+\u002F**\n+ * Get current question is doing.\n+ *\n+ * @param {Object} state\n+ * @param {string} ret\n+ * @return {*}\n  *\u002F\n function getCurrentQuestion(state, ret = '') {\n   const questionsPerPage = get(state, 'userQuiz.questionsPerPage') || 1;\n@@ -2875,11 +2875,11 @@\n   return ret === 'object' ? get(state, `userQuiz.questions[${currentPage - 1}]`) : get(state, `userQuiz.questionIds[${currentPage - 1}]`);\n }\n \n-\u002F**\r\n- * Return a question contains fully data with title, content, ...\r\n- *\r\n- * @param state\r\n- * @param theId\r\n+\u002F**\n+ * Return a question contains fully data with title, content, ...\n+ *\n+ * @param state\n+ * @param theId\n  *\u002F\n const getQuestion = function getQuestion(state, theId) {\n   const {\n@@ -2893,12 +2893,12 @@\n };\n \n \n-\u002F**\r\n- * If user has used 'Instant check' for a question.\r\n- *\r\n- * @param {Object} state - Global state for app.\r\n- * @param {number} id\r\n- * @return {boolean}\r\n+\u002F**\n+ * If user has used 'Instant check' for a question.\n+ *\n+ * @param {Object} state - Global state for app.\n+ * @param {number} id\n+ * @return {boolean}\n  *\u002F\n function isCheckedAnswer(state, id) {\n   const checkedQuestions = get(state, 'userQuiz.checkedQuestions') || [];\n@@ -2906,13 +2906,13 @@\n }\n function isCorrect(state, id) {}\n \n-\u002F**\r\n- * Get questions user has selected answers.\r\n- *\r\n- * @param {Object} state. Global app state\r\n- * @param state\r\n- * @param {number} questionId\r\n- * @return {{}}\r\n+\u002F**\n+ * Get questions user has selected answers.\n+ *\n+ * @param {Object} state. Global app state\n+ * @param state\n+ * @param {number} questionId\n+ * @return {{}}\n  *\u002F\n const getQuestionsSelectedAnswers = function (state, questionId) {\n   const data = get(state, 'userQuiz.answered');\n@@ -2935,12 +2935,12 @@\n };\n \n \n-\u002F**\r\n- * Get mark user earned.\r\n- * Just for questions user has used 'Instant check' button.\r\n- *\r\n- * @param state\r\n- * @return {number}\r\n+\u002F**\n+ * Get mark user earned.\n+ * Just for questions user has used 'Instant check' button.\n+ *\n+ * @param state\n+ * @return {number}\n  *\u002F\n function getUserMark(state) {\n   const userQuiz = state.userQuiz || {};\n@@ -3046,10 +3046,10 @@\n   \\********************************************************************************\u002F\n () {\n \n-\u002F**\r\n- * Compatible with Page Builder.\r\n- *\r\n- * @author nhamdv\r\n+\u002F**\n+ * Compatible with Page Builder.\n+ *\n+ * @author nhamdv\n  *\u002F\n \n LP.Hook.addAction('lp-compatible-builder', () => {\n@@ -3061,10 +3061,10 @@\n     });\n   }\n \n-  \u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\r\n-  \t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\r\n-  \t\tVcWaypoint.refreshAll();\r\n-  \t} );\r\n+  \u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\n+  \t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\n+  \t\tVcWaypoint.refreshAll();\n+  \t} );\n   }*\u002F\n });\n LP.Hook.addAction('lp-quiz-compatible-builder', () => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -162,8 +162,8 @@\n   \\******************************************************************\u002F\n () {\n \n-\u002F**\r\n- * Created by tu on 9\u002F19\u002F19.\r\n+\u002F**\n+ * Created by tu on 9\u002F19\u002F19.\n  *\u002F\n \n \u002F***\u002F },\n@@ -293,36 +293,33 @@\n   \u002F\u002F End editor by tungnx\n \n   \u002F\u002F Code for old curriculum\n-  \u002F*const $curriculum = $( '#learn-press-course-curriculum' );\r\n-  $curriculum.find( '.section-desc' ).each( ( i, el ) => {\r\n-  \tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\r\n-  \t\tb.toggleClass( 'c' );\r\n-  \t} );\r\n-  \tconst b = $( el ).siblings( '.section-title' ).append( a );\r\n+  \u002F*const $curriculum = $( '#learn-press-course-curriculum' );\n+  $curriculum.find( '.section-desc' ).each( ( i, el ) => {\n+  \tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\n+  \t\tb.toggleClass( 'c' );\n+  \t} );\n+  \tconst b = $( el ).siblings( '.section-title' ).append( a );\n   } );*\u002F\n \n   \u002F\u002F Code for old curriculum\n-  \u002F*$( '.section' ).each( function() {\r\n-  \tconst $section = $( this ),\r\n-  \t\t$toggle = $section.find( '.section-left' );\r\n-  \n-  \t$toggle.on( 'click', function() {\r\n-  \t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\r\n-  \t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\r\n-  \t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\r\n-  \t\tconst at = sections.findIndex( ( id ) => {\r\n-  \t\t\treturn id == sectionId;\r\n-  \t\t} );\r\n-  \n-  \t\tif ( isClose ) {\r\n-  \t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\r\n-  \t\t} else {\r\n-  \t\t\tsections.splice( at, 1 );\r\n-  \t\t}\r\n-  \n-  \t\tLP.Cookies.remove( 'closed-section-(.*)' );\r\n-  \t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\r\n-  \t} );\r\n+  \u002F*$( '.section' ).each( function() {\n+  \tconst $section = $( this ),\n+  \t\t$toggle = $section.find( '.section-left' );\n+  \t\t$toggle.on( 'click', function() {\n+  \t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\n+  \t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\n+  \t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\n+  \t\tconst at = sections.findIndex( ( id ) => {\n+  \t\t\treturn id == sectionId;\n+  \t\t} );\n+  \t\t\tif ( isClose ) {\n+  \t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\n+  \t\t} else {\n+  \t\t\tsections.splice( at, 1 );\n+  \t\t}\n+  \t\t\tLP.Cookies.remove( 'closed-section-(.*)' );\n+  \t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\n+  \t} );\n   } );*\u002F\n \n   document.addEventListener('click', e => {\n@@ -960,14 +957,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -998,10 +995,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -1019,12 +1016,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -1037,11 +1034,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -1062,12 +1059,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -1210,15 +1207,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fsingle-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -126,10 +126,10 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   commentForm: () => (\u002F* binding *\u002F commentForm)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Toogle form Comment for Lesson.\r\n- *\r\n- * @author Nhamdv.\r\n+\u002F**\n+ * Toogle form Comment for Lesson.\n+ *\n+ * @author Nhamdv.\n  *\u002F\n \n const commentForm = () => {\n@@ -181,10 +181,10 @@\n   \\********************************************************************************\u002F\n () {\n \n-\u002F**\r\n- * Compatible with Page Builder.\r\n- *\r\n- * @author nhamdv\r\n+\u002F**\n+ * Compatible with Page Builder.\n+ *\n+ * @author nhamdv\n  *\u002F\n \n LP.Hook.addAction('lp-compatible-builder', () => {\n@@ -196,10 +196,10 @@\n     });\n   }\n \n-  \u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\r\n-  \t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\r\n-  \t\tVcWaypoint.refreshAll();\r\n-  \t} );\r\n+  \u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\n+  \t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\n+  \t\tVcWaypoint.refreshAll();\n+  \t} );\n   }*\u002F\n });\n LP.Hook.addAction('lp-quiz-compatible-builder', () => {\n@@ -459,36 +459,33 @@\n   \u002F\u002F End editor by tungnx\n \n   \u002F\u002F Code for old curriculum\n-  \u002F*const $curriculum = $( '#learn-press-course-curriculum' );\r\n-  $curriculum.find( '.section-desc' ).each( ( i, el ) => {\r\n-  \tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\r\n-  \t\tb.toggleClass( 'c' );\r\n-  \t} );\r\n-  \tconst b = $( el ).siblings( '.section-title' ).append( a );\r\n+  \u002F*const $curriculum = $( '#learn-press-course-curriculum' );\n+  $curriculum.find( '.section-desc' ).each( ( i, el ) => {\n+  \tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\n+  \t\tb.toggleClass( 'c' );\n+  \t} );\n+  \tconst b = $( el ).siblings( '.section-title' ).append( a );\n   } );*\u002F\n \n   \u002F\u002F Code for old curriculum\n-  \u002F*$( '.section' ).each( function() {\r\n-  \tconst $section = $( this ),\r\n-  \t\t$toggle = $section.find( '.section-left' );\r\n-  \n-  \t$toggle.on( 'click', function() {\r\n-  \t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\r\n-  \t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\r\n-  \t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\r\n-  \t\tconst at = sections.findIndex( ( id ) => {\r\n-  \t\t\treturn id == sectionId;\r\n-  \t\t} );\r\n-  \n-  \t\tif ( isClose ) {\r\n-  \t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\r\n-  \t\t} else {\r\n-  \t\t\tsections.splice( at, 1 );\r\n-  \t\t}\r\n-  \n-  \t\tLP.Cookies.remove( 'closed-section-(.*)' );\r\n-  \t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\r\n-  \t} );\r\n+  \u002F*$( '.section' ).each( function() {\n+  \tconst $section = $( this ),\n+  \t\t$toggle = $section.find( '.section-left' );\n+  \t\t$toggle.on( 'click', function() {\n+  \t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\n+  \t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\n+  \t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\n+  \t\tconst at = sections.findIndex( ( id ) => {\n+  \t\t\treturn id == sectionId;\n+  \t\t} );\n+  \t\t\tif ( isClose ) {\n+  \t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\n+  \t\t} else {\n+  \t\t\tsections.splice( at, 1 );\n+  \t\t}\n+  \t\t\tLP.Cookies.remove( 'closed-section-(.*)' );\n+  \t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\n+  \t} );\n   } );*\u002F\n \n   document.addEventListener('click', e => {\n@@ -659,14 +656,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -697,10 +694,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -718,12 +715,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -736,11 +733,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -761,12 +758,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -909,15 +906,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -1090,11 +1087,11 @@\n \u002F* harmony default export *\u002F const __WEBPACK_DEFAULT_EXPORT__ = (_single_curriculum_index__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n \n \u002F\u002F Comment code use for old curriculum\n-\u002F*export const init = () => {\r\n-\twp.element.render(\r\n-\t\t\u003CSingleCurriculums \u002F>,\r\n-\t\tdocument.getElementById( 'learn-press-course-curriculum' )\r\n-\t);\r\n+\u002F*export const init = () => {\n+\twp.element.render(\n+\t\t\u003CSingleCurriculums \u002F>,\n+\t\tdocument.getElementById( 'learn-press-course-curriculum' )\n+\t);\n };*\u002F\n \n document.addEventListener('DOMContentLoaded', function (event) {\n@@ -1106,12 +1103,12 @@\n });\n \n \u002F\u002F Comment code use for old curriculum\n-\u002F*const detectedElCurriculum = setInterval( function() {\r\n-\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\r\n-\tif ( elementCurriculum ) {\r\n-\t\tcourseCurriculumSkeleton();\r\n-\t\tclearInterval( detectedElCurriculum );\r\n-\t}\r\n+\u002F*const detectedElCurriculum = setInterval( function() {\n+\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\n+\tif ( elementCurriculum ) {\n+\t\tcourseCurriculumSkeleton();\n+\t\tclearInterval( detectedElCurriculum );\n+\t}\n }, 1 );*\u002F\n })();\n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fwidgets.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fwidgets.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fwidgets.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Ffrontend\u002Fwidgets.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -12,11 +12,11 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n  *\u002F\n \n const lplistAPI = {};\n@@ -75,14 +75,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -113,10 +113,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -134,12 +134,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -152,11 +152,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -177,12 +177,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -325,15 +325,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -26,14 +26,14 @@\n \u002F* harmony export *\u002F   mergeDataWithDatForm: () => (\u002F* binding *\u002F mergeDataWithDatForm),\n \u002F* harmony export *\u002F   toggleCollapse: () => (\u002F* binding *\u002F toggleCollapse)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n  *\u002F\n const lpClassName = {\n   hidden: 'lp-hidden',\n@@ -64,10 +64,10 @@\n   });\n };\n \n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n  *\u002F\n const lpGetCurrentURLNoParam = () => {\n   let currentUrl = window.location.href;\n@@ -85,12 +85,12 @@\n   return url;\n };\n \n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementViewed = (el, callback) => {\n   const observerSeeItem = new IntersectionObserver(function (entries) {\n@@ -103,11 +103,11 @@\n   observerSeeItem.observe(el);\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n  *\u002F\n const listenElementCreated = callback => {\n   const observerCreateItem = new MutationObserver(function (mutations) {\n@@ -128,12 +128,12 @@\n   \u002F\u002F End.\n };\n \n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n  *\u002F\n const lpOnElementReady = (selector, callback) => {\n   const element = document.querySelector(selector);\n@@ -276,15 +276,15 @@\n   return dataHandle;\n };\n \n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n  *\u002F\n const eventHandlers = (eventName, eventHandlers) => {\n   document.addEventListener(eventName, e => {\n@@ -402,11 +402,11 @@\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n \u002F* harmony import *\u002F var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\u002F*! .\u002Futils.js *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\");\n-\u002F**\r\n- * Load all you need via AJAX\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.1.0\r\n+\u002F**\n+ * Load all you need via AJAX\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.1.0\n  *\u002F\n \n \n@@ -519,7 +519,9 @@\n               console.log(error);\n             },\n             completed: () => {\n-              wp.hooks.doAction('lp-ajax-completed', element, dataSend);\n+              if (typeof wp !== 'undefined' && wp.hooks) {\n+                wp.hooks.doAction('lp-ajax-completed', element, dataSend);\n+              }\n               window.lpAJAXG.getElements();\n               \u002F\u002Fconsole.log( 'completed' );\n               if (elLoadingFirst) {\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002FloadAJAX.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{\"use strict\";const e=\"lp-hidden\",t=(e,t={},n={})=>{\"function\"==typeof n.before&&n.before(),fetch(e,{method:\"GET\",...t}).then(e=>e.json()).then(e=>{\"function\"==typeof n.success&&n.success(e)}).catch(e=>{\"function\"==typeof n.error&&n.error(e)}).finally(()=>{\"function\"==typeof n.completed&&n.completed()})},n=(e,t)=>{const n=new URL(e);return Object.keys(t).forEach(e=>{n.searchParams.set(e,t[e])}),n};let s={};\"undefined\"!=typeof lpDataAdmin?s=lpDataAdmin:\"undefined\"!=typeof lpData&&(s=lpData);var o;window.lpAJAXG=(()=>{const o=\".lp-target\",a=(()=>{let e=window.location.href;return e.includes(\"?\")&&(e=e.split(\"?\")[0]),e})();return{autoLoadAPIs:()=>{console.log(\"autoLoadAPIs\")},fetchAPI:(e,o,a)=>{const r={headers:{}};0!==parseInt(s.user_id)&&(r.headers[\"X-WP-Nonce\"]=s.nonce),void 0!==o.args.method_request?r.method=o.args.method_request:r.method=\"POST\",\"POST\"===r.method?(r.body=JSON.stringify(o),r.headers[\"Content-Type\"]=\"application\u002Fjson\"):(o.args=JSON.stringify(o.args),o.callback=JSON.stringify(o.callback),e=n(e,o)),t(e,r,a)},fetchAJAX:(e,o)=>{let a=s.lpAjaxUrl;e.hasOwnProperty(\"args\")&&e.args.hasOwnProperty(\"id_url\")?a=n(a,{id_url:e.args.id_url}):e.hasOwnProperty(\"id_url\")&&(a=n(a,{id_url:e.id_url})),s.urlParams.hasOwnProperty(\"lang\")&&(a=n(a,{lang:s.urlParams.lang}));const r=new FormData,d=e.hasOwnProperty(\"action\")?e.action:\"load_content_via_ajax\";r.append(\"nonce\",s.nonce),r.append(\"lp-load-ajax\",d),r.append(\"data\",JSON.stringify(e));const l={method:\"POST\",headers:{},body:r};0!==parseInt(s.user_id)&&(l.headers[\"X-WP-Nonce\"]=s.nonce),t(a,l,o)},getElements:()=>{const e=document.querySelectorAll(\".lp-load-ajax-element:not(.loaded)\");e.length&&e.forEach(e=>{const t=e.querySelector(`${o}`);if(!t)return;const n={...JSON.parse(t.dataset.send)},s=e.querySelector(\".loading-first\"),a={success:e=>{const{status:n,message:s,data:o}=e;\"success\"===n?t.innerHTML=o.content:\"error\"===n&&(t.innerHTML=s)},error:e=>{console.log(e)},completed:()=>{wp.hooks.doAction(\"lp-ajax-completed\",e,n),window.lpAJAXG.getElements(),s&&s.remove()}};window.lpAJAXG.fetchAJAX(n,a),e.classList.add(\"loaded\")})},clickNumberPage:(e,t)=>{const r=t.closest(\".page-numbers:not(.disabled)\");if(!r)return;const d=r.closest(`${o}`);if(!d)return;e.preventDefault();const l={...JSON.parse(d.dataset.send)};if(l.args.hasOwnProperty(\"paged\")||(l.args.paged=1),r.classList.contains(\"prev\"))l.args.paged--;else if(r.classList.contains(\"next\"))l.args.paged++;else{const e=parseInt(r.textContent);if(isNaN(e)||e\u003C1)return;l.args.paged=e}if(d.dataset.send=JSON.stringify(l),l.args.hasOwnProperty(\"enableUpdateParamsUrl\")&&!l.args.enableUpdateParamsUrl||(s.urlParams.paged=l.args.paged,window.history.pushState({},\"\",n(a,s.urlParams))),window.lpAJAXG.showHideLoading(d,1),!l.args.hasOwnProperty(\"enableScrollToView\")||l.args.enableScrollToView){const e=d.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:e})}const c={success:e=>{const{status:t,message:n,data:s}=e;d.innerHTML=s.content||\"\"},error:e=>{console.log(e)},completed:()=>{window.lpAJAXG.showHideLoading(d,0)}};window.lpAJAXG.fetchAJAX(l,c)},getDataSetCurrent:e=>JSON.parse(e.dataset.send),setDataSetCurrent:(e,t)=>e.dataset.send=JSON.stringify(t),showHideLoading:(t,n)=>{const s=t.nextElementSibling?.querySelector(\".lp-loading-change\");s&&((t,n=0)=>{t&&(n?t.classList.remove(e):t.classList.add(e))})(s,n)}}})(),window.lpAJAXG.getElements(),document.addEventListener(\"click\",function(e){const t=e.target;window.lpAJAXG.clickNumberPage(e,t)}),o=e=>{e.classList.contains(\"lp-load-ajax-element\")&&window.lpAJAXG.getElements()},new MutationObserver(function(e){e.forEach(function(e){e.addedNodes&&e.addedNodes.forEach(function(e){1===e.nodeType&&o(e)})})}).observe(document,{childList:!0,subtree:!0}),((e,t)=>{const n=document.querySelector(e);if(n)return void t();const s=new MutationObserver((n,s)=>{const o=document.querySelector(e);o&&(s.disconnect(),t())});s.observe(document.documentElement,{childList:!0,subtree:!0})})(\".lp-load-ajax-element\",e=>{window.lpAJAXG.getElements()}),document.addEventListener(\"readystatechange\",e=>{window.lpAJAXG.getElements()}),document.addEventListener(\"DOMContentLoaded\",()=>{window.lpAJAXG.getElements()})})();\n\\ No newline at end of file\n+(()=>{\"use strict\";const e=\"lp-hidden\",t=(e,t={},n={})=>{\"function\"==typeof n.before&&n.before(),fetch(e,{method:\"GET\",...t}).then(e=>e.json()).then(e=>{\"function\"==typeof n.success&&n.success(e)}).catch(e=>{\"function\"==typeof n.error&&n.error(e)}).finally(()=>{\"function\"==typeof n.completed&&n.completed()})},n=(e,t)=>{const n=new URL(e);return Object.keys(t).forEach(e=>{n.searchParams.set(e,t[e])}),n};let o={};\"undefined\"!=typeof lpDataAdmin?o=lpDataAdmin:\"undefined\"!=typeof lpData&&(o=lpData);var s;window.lpAJAXG=(()=>{const s=\".lp-target\",a=(()=>{let e=window.location.href;return e.includes(\"?\")&&(e=e.split(\"?\")[0]),e})();return{autoLoadAPIs:()=>{console.log(\"autoLoadAPIs\")},fetchAPI:(e,s,a)=>{const r={headers:{}};0!==parseInt(o.user_id)&&(r.headers[\"X-WP-Nonce\"]=o.nonce),void 0!==s.args.method_request?r.method=s.args.method_request:r.method=\"POST\",\"POST\"===r.method?(r.body=JSON.stringify(s),r.headers[\"Content-Type\"]=\"application\u002Fjson\"):(s.args=JSON.stringify(s.args),s.callback=JSON.stringify(s.callback),e=n(e,s)),t(e,r,a)},fetchAJAX:(e,s)=>{let a=o.lpAjaxUrl;e.hasOwnProperty(\"args\")&&e.args.hasOwnProperty(\"id_url\")?a=n(a,{id_url:e.args.id_url}):e.hasOwnProperty(\"id_url\")&&(a=n(a,{id_url:e.id_url})),o.urlParams.hasOwnProperty(\"lang\")&&(a=n(a,{lang:o.urlParams.lang}));const r=new FormData,d=e.hasOwnProperty(\"action\")?e.action:\"load_content_via_ajax\";r.append(\"nonce\",o.nonce),r.append(\"lp-load-ajax\",d),r.append(\"data\",JSON.stringify(e));const l={method:\"POST\",headers:{},body:r};0!==parseInt(o.user_id)&&(l.headers[\"X-WP-Nonce\"]=o.nonce),t(a,l,s)},getElements:()=>{const e=document.querySelectorAll(\".lp-load-ajax-element:not(.loaded)\");e.length&&e.forEach(e=>{const t=e.querySelector(`${s}`);if(!t)return;const n={...JSON.parse(t.dataset.send)},o=e.querySelector(\".loading-first\"),a={success:e=>{const{status:n,message:o,data:s}=e;\"success\"===n?t.innerHTML=s.content:\"error\"===n&&(t.innerHTML=o)},error:e=>{console.log(e)},completed:()=>{\"undefined\"!=typeof wp&&wp.hooks&&wp.hooks.doAction(\"lp-ajax-completed\",e,n),window.lpAJAXG.getElements(),o&&o.remove()}};window.lpAJAXG.fetchAJAX(n,a),e.classList.add(\"loaded\")})},clickNumberPage:(e,t)=>{const r=t.closest(\".page-numbers:not(.disabled)\");if(!r)return;const d=r.closest(`${s}`);if(!d)return;e.preventDefault();const l={...JSON.parse(d.dataset.send)};if(l.args.hasOwnProperty(\"paged\")||(l.args.paged=1),r.classList.contains(\"prev\"))l.args.paged--;else if(r.classList.contains(\"next\"))l.args.paged++;else{const e=parseInt(r.textContent);if(isNaN(e)||e\u003C1)return;l.args.paged=e}if(d.dataset.send=JSON.stringify(l),l.args.hasOwnProperty(\"enableUpdateParamsUrl\")&&!l.args.enableUpdateParamsUrl||(o.urlParams.paged=l.args.paged,window.history.pushState({},\"\",n(a,o.urlParams))),window.lpAJAXG.showHideLoading(d,1),!l.args.hasOwnProperty(\"enableScrollToView\")||l.args.enableScrollToView){const e=d.getBoundingClientRect().top+window.scrollY-100;window.scrollTo({top:e})}const c={success:e=>{const{status:t,message:n,data:o}=e;d.innerHTML=o.content||\"\"},error:e=>{console.log(e)},completed:()=>{window.lpAJAXG.showHideLoading(d,0)}};window.lpAJAXG.fetchAJAX(l,c)},getDataSetCurrent:e=>JSON.parse(e.dataset.send),setDataSetCurrent:(e,t)=>e.dataset.send=JSON.stringify(t),showHideLoading:(t,n)=>{const o=t.nextElementSibling?.querySelector(\".lp-loading-change\");o&&((t,n=0)=>{t&&(n?t.classList.remove(e):t.classList.add(e))})(o,n)}}})(),window.lpAJAXG.getElements(),document.addEventListener(\"click\",function(e){const t=e.target;window.lpAJAXG.clickNumberPage(e,t)}),s=e=>{e.classList.contains(\"lp-load-ajax-element\")&&window.lpAJAXG.getElements()},new MutationObserver(function(e){e.forEach(function(e){e.addedNodes&&e.addedNodes.forEach(function(e){1===e.nodeType&&s(e)})})}).observe(document,{childList:!0,subtree:!0}),((e,t)=>{const n=document.querySelector(e);if(n)return void t();const o=new MutationObserver((n,o)=>{const s=document.querySelector(e);s&&(o.disconnect(),t())});o.observe(document.documentElement,{childList:!0,subtree:!0})})(\".lp-load-ajax-element\",e=>{window.lpAJAXG.getElements()}),document.addEventListener(\"readystatechange\",e=>{window.lpAJAXG.getElements()}),document.addEventListener(\"DOMContentLoaded\",()=>{window.lpAJAXG.getElements()})})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Futils.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Futils.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Futils.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Futils.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -77,12 +77,12 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Manage event callbacks.\r\n-Allow add\u002Fremove a callback function into custom event of an object.\r\n- *\r\n- * @class\r\n- * @param self\r\n+\u002F**\n+ * Manage event callbacks.\n+Allow add\u002Fremove a callback function into custom event of an object.\n+ *\n+ * @class\n+ * @param self\n  *\u002F\n const Event_Callback = function Event_Callback(self) {\n   const callbacks = {};\n@@ -177,6 +177,7 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (\u002F* export default binding *\u002F __WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n+Object.defineProperty(__WEBPACK_DEFAULT_EXPORT__, \"name\", { value: \"default\", configurable: true });\n \u002F* harmony default export *\u002F function __WEBPACK_DEFAULT_EXPORT__() {\n   window.LP = window.LP || {};\n   if (typeof arguments[0] === 'string') {\n@@ -200,13 +201,13 @@\n \u002F* harmony export *\u002F __webpack_require__.d(__webpack_exports__, {\n \u002F* harmony export *\u002F   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n \u002F* harmony export *\u002F });\n-\u002F**\r\n- * Auto prepend `LP` prefix for jQuery fn plugin name.\r\n- *\r\n- * Create : $.fn.LP( 'PLUGIN_NAME', func) \u003C=> $.fn.LP_PLUGIN_NAME\r\n- * Usage: $(selector).LP('PLUGIN_NAME') \u003C=> $(selector).LP_PLUGIN_NAME()\r\n- *\r\n- * @version 3.2.6\r\n+\u002F**\n+ * Auto prepend `LP` prefix for jQuery fn plugin name.\n+ *\n+ * Create : $.fn.LP( 'PLUGIN_NAME', func) \u003C=> $.fn.LP_PLUGIN_NAME\n+ * Usage: $(selector).LP('PLUGIN_NAME') \u003C=> $(selector).LP_PLUGIN_NAME()\n+ *\n+ * @version 3.2.6\n  *\u002F\n \n const $ = window.jQuery;\n@@ -1107,10 +1108,10 @@\n \u002F* harmony import *\u002F var _iframe_submit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(\u002F*! .\u002Fiframe-submit *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fiframe-submit.js\");\n \u002F* harmony import *\u002F var _show_password__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(\u002F*! .\u002Fshow-password *\u002F \".\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fshow-password.js\");\n \u002F* harmony import *\u002F var _show_password__WEBPACK_IMPORTED_MODULE_10___default = \u002F*#__PURE__*\u002F__webpack_require__.n(_show_password__WEBPACK_IMPORTED_MODULE_10__);\n-\u002F**\r\n- * Utility functions may use for both admin and frontend.\r\n- *\r\n- * @version 3.2.6\r\n+\u002F**\n+ * Utility functions may use for both admin and frontend.\n+ *\n+ * @version 3.2.6\n  *\u002F\n \n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Futils.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Futils.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fdist\u002Futils.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fdist\u002Futils.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-(()=>{var __webpack_modules__={4694(){\"use strict\";const $=window.jQuery||jQuery,serializeJSON=function serializeJSON(path){const isInput=$(this).is(\"input\")||$(this).is(\"select\")||$(this).is(\"textarea\");let unIndexed=isInput?$(this).serializeArray():$(this).find(\"input, select, textarea\").serializeArray(),indexed={},validate=\u002F(\\[([a-zA-Z0-9_-]+)?\\]?)\u002Fg,arrayKeys={},end=!1;if($.each(unIndexed,function(){const that=this,match=this.name.match(\u002F^([0-9a-zA-Z_-]+)\u002F);if(!match)return;let keys=this.name.match(validate),objPath=\"indexed['\"+match[0]+\"']\";keys?(\"object\"!=typeof indexed[match[0]]&&(indexed[match[0]]={}),$.each(keys,function(i,prop){prop=prop.replace(\u002F\\]|\\[\u002Fg,\"\");let rawPath=objPath.replace(\u002F'|\\[|\\]\u002Fg,\"\"),objExp=\"\",preObjPath=objPath;\"\"==prop?(null==arrayKeys[rawPath]?arrayKeys[rawPath]=0:arrayKeys[rawPath]++,objPath+=\"['\"+arrayKeys[rawPath]+\"']\"):(isNaN(prop)||(arrayKeys[rawPath]=prop),objPath+=\"['\"+prop+\"']\");try{i==keys.length-1?(objExp=objPath+\"=that.value;\",end=!0):(objExp=objPath+\"={}\",end=!1);const evalString=\"if( typeof \"+objPath+\" == 'undefined'){\"+objExp+\";}else{if(end){if(typeof \"+preObjPath+\"!='object'){\"+preObjPath+\"={};}\"+objExp+\"}}\";eval(evalString)}catch(e){console.log(\"Error:\"+e+\"\\n\"+objExp)}})):indexed[match[0]]=this.value}),path){path=\"['\"+path.replace(\".\",\"']['\")+\"']\";const c=\"try{indexed = indexed\"+path+\"}catch(ex){console.log(c, ex);}\";eval(c)}return indexed},LP_Tooltip=e=>(e=$.extend({},{offset:[0,0]},e||{}),$.each(void 0,function(){const t=$(this),n=t.data(\"content\");if(!n||void 0!==t.data(\"LP_Tooltip\"))return;let o=null;t.on(\"mouseenter\",function(s){o=$('\u003Cdiv class=\"learn-press-tooltip-bubble\"\u002F>').html(n).appendTo($(\"body\")).hide();const i=t.offset();if(Array.isArray(e.offset)){const t=e.offset[1],n=e.offset[0];$.isNumeric(n)&&(i.left+=n),$.isNumeric(t)&&(i.top+=t)}o.css({top:i.top,left:i.left}),o.fadeIn()}),t.on(\"mouseleave\",function(e){o&&o.remove()}),t.data(\"tooltip\",!0)})),hasEvent=function(e){const t=$(this).data(\"events\");if(void 0===t.LP)return!1;for(i=0;i\u003Ct.LP.length;i++)if(t.LP[i].namespace==e)return!0;return!1},dataToJSON=function(){const e={};return $.each(this[0].attributes,function(){const t=this.name.match(\u002F^data-(.*)\u002F);t&&(e[t[1]]=this.value)}),e},rows=function(){const e=$(this).height(),t=$(this).css(\"line-height\").replace(\"px\",\"\");return $(this).attr({height:e,\"line-height\":t}),Math.floor(e\u002FparseInt(t))},checkLines=function(e){return this.each(function(){const t=$(this).rows();e.call(this,t)})},findNext=function(e){const t=$(e),n=this.first(),o=t.index(n),s=t.eq(o+1);return!!s.length&&s},findPrev=function(e){const t=$(e),n=this.first(),o=t.index(n),s=t.eq(o-1);return!!s.length&&s},progress=function(e){return this.each(function(){const t=parseInt(e\u002F100*360),n=$(this);t\u003C180?n.find(\".progress-circle\").removeClass(\"gt-50\"):n.find(\".progress-circle\").addClass(\"gt-50\"),n.find(\".fill\").css({transform:\"rotate(\"+t+\"deg)\"})})};$.fn.serializeJSON=serializeJSON,$.fn.LP_Tooltip=LP_Tooltip,$.fn.hasEvent=hasEvent,$.fn.dataToJSON=dataToJSON,$.fn.rows=rows,$.fn.checkLines=checkLines,$.fn.findNext=findNext,$.fn.findPrev=findPrev,$.fn.progress=progress;var __WEBPACK_DEFAULT_EXPORT__={serializeJSON,LP_Tooltip,hasEvent,dataToJSON,rows,checkLines,findNext,findPrev,progress}},6011(){!function(e){function t(t,n){const o=e(t),s=o.attr(\"data-id\")||LP.uniqueId();n=e.extend({event:\"hover\",autoClose:!0,single:!0,closeInterval:1e3,arrowOffset:null,tipClass:\"\"},n,o.data()),o.attr(\"data-id\",s);let i=o.attr(\"data-content-tip\")||o.html(),a=e('\u003Cdiv class=\"learn-press-tip-floating\">'+i+\"\u003C\u002Fdiv>\"),r=null,c=0,l=!1,p=\"el\"===n.arrowOffset?o.outerWidth()\u002F2:8,d=e(\"#__\"+s);function u(){if(r)return void clearTimeout(r);n.single&&e(\".learn-press-tip\").not(o).LP(\"QuickTip\",\"close\"),a.appendTo(document.body);const t=o.offset();a.css({top:t.top-a.outerHeight()-8,left:t.left-a.outerWidth()\u002F2+p})}function h(){r&&clearTimeout(r),r=setTimeout(function(){a.detach(),r=null},c)}function f(){c=0,h(),c=n.closeInterval}return 0===d.length&&e(document.body).append(e(\"\u003Cdiv \u002F>\").attr(\"id\",\"__\"+s).html(i).css(\"display\",\"none\")),i=d.html(),a.addClass(n.tipClass),o.data(\"content-tip\",i),o.attr(\"data-content-tip\")&&(l=!0),c=n.closeInterval,!1===n.autoClose&&(a.append('\u003Ca class=\"close\">\u003C\u002Fa>'),a.on(\"click\",\".close\",function(){f()})),l||o.html(\"\"),\"click\"===n.event&&o.on(\"click\",function(e){e.stopPropagation(),u()}),e(document).on(\"learn-press\u002Fclose-all-quick-tip\",function(){f()}),o.hover(function(e){e.stopPropagation(),\"click\"!==n.event&&u()},function(e){e.stopPropagation(),n.autoClose&&h()}).addClass(\"ready\"),{close:f,open:function(){u()}}}e.fn.LP(\"QuickTip\",function(n){return e.each(this,function(){let o=e(this).data(\"quick-tip\");o||(o=new t(this,n),e(this).data(\"quick-tip\",o)),\"string\"==typeof n&&o[n]&&o[n].apply(o)})})}(jQuery)},3509(){const e=jQuery;e(function(){e('.form-field input[type=\"password\"]').wrap('\u003Cspan class=\"lp-password-input\">\u003C\u002Fspan>'),e(\".lp-password-input\").append('\u003Cspan class=\"lp-show-password-input\">\u003C\u002Fspan>'),e(\".lp-show-password-input\").on(\"click\",function(){e(this).toggleClass(\"display-password\"),e(this).hasClass(\"display-password\")?e(this).siblings(['input[type=\"password\"]']).prop(\"type\",\"text\"):e(this).siblings('input[type=\"text\"]').prop(\"type\",\"password\")})})}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";const e=window.jQuery;let t;void 0!==e&&(e.fn.LP=t=function(t,n){if(\"function\"==typeof n)e.fn[\"LP_\"+t]=n;else if(t){const n=[];if(arguments.length>1)for(let e=1;e\u003Carguments.length;e++)n.push(arguments[e]);return\"function\"==typeof e(this)[\"LP_\"+t]?e(this)[\"LP_\"+t].apply(this,n):this}return this});var n=__webpack_require__(6011),o=__webpack_require__.n(n);const s=window.jQuery,i={$block:null,$window:null,events:{},instances:[],instance:null,quickConfirm(e,t){const n=s(e);s(\"[learn-press-quick-confirm]\").each(function(){let e;(e=s(this).data(\"quick-confirm\"))&&(console.log(e),e.destroy())}),!n.attr(\"learn-press-quick-confirm\")&&n.attr(\"learn-press-quick-confirm\",\"true\").data(\"quick-confirm\",new function(e,t){var n=s(e),o=s('\u003Cspan class=\"learn-press-quick-confirm\">\u003C\u002Fspan>').insertAfter(n),i=s(e).position()||{left:0,top:0},a=null,r=null,c=3,l=function(){o.fadeOut(\"fast\",function(){s(this).remove(),o.parent().css(\"position\",\"\")}),n.removeAttr(\"learn-press-quick-confirm\").data(\"quick-confirm\",void 0),p()},p=function(){r&&clearInterval(r),a&&clearInterval(a)},d=function(){a=setInterval(function(){0==--c&&(l.call(o[0]),\"function\"==typeof t.onCancel&&t.onCancel(t.data),p()),o.find(\"span\").html(\" (\"+c+\")\")},1e3),r=setInterval(function(){n.is(\":visible\")&&\"hidden\"!=n.css(\"visibility\")||(p(),o.remove(),o.parent().css(\"position\",\"\"),\"function\"==typeof t.onCancel&&t.onCancel(t.data))},350)};t=s.extend({message:\"\",data:null,onOk:null,onCancel:null,offset:{top:0,left:0}},t||{}),o.html(t.message||n.attr(\"data-confirm-remove\")||\"Are you sure?\").append(\"\u003Cspan> (\"+c+\")\u003C\u002Fspan>\").css({}),o.click(function(){\"function\"==typeof t.onOk&&t.onOk(t.data),l()}).hover(function(){p()},function(){d()}),o.css({left:i.left+n.outerWidth()-o.outerWidth()+t.offset.left,top:i.top+n.outerHeight()+t.offset.top+5}).hide().fadeIn(\"fast\"),d(),this.destroy=function(){o.remove(),n.removeAttr(\"learn-press-quick-confirm\").data(\"quick-confirm\",void 0),p()}}(e,t))},show(e,t){s.proxy(function(){t=s.extend({title:\"\",buttons:\"\",events:!1,autohide:!1,message:e,data:!1,id:LP.uniqueId(),onHide:null},t||{}),this.instances.push(t),this.instance=t,s(document);const n=s(document.body);this.$block||(this.$block=s('\u003Cdiv id=\"learn-press-message-box-block\">\u003C\u002Fdiv>').appendTo(n)),this.$window||(this.$window=s('\u003Cdiv id=\"learn-press-message-box-window\">\u003Cdiv id=\"message-box-wrap\">\u003C\u002Fdiv> \u003C\u002Fdiv>').insertAfter(this.$block),this.$window.click(function(){})),this._createWindow(e,t.title,t.buttons),this.$block.show(),this.$window.show().attr(\"instance\",t.id),s(window).bind(\"resize.message-box\",s.proxy(this.update,this)).bind(\"scroll.message-box\",s.proxy(this.update,this)),this.update(!0),t.autohide&&setTimeout(function(){LP.MessageBox.hide(),\"function\"==typeof t.onHide&&t.onHide.call(LP.MessageBox,t)},t.autohide)},this)()},blockUI(e){e=(!1!==e?e||\"Wait a moment\":\"\")+'\u003Cdiv class=\"message-box-animation\">\u003C\u002Fdiv>',this.show(e)},hide(e,t){t?this._removeInstance(t.id):this.instance&&this._removeInstance(this.instance.id),0===this.instances.length?(this.$block&&this.$block.hide(),this.$window&&this.$window.hide(),s(window).unbind(\"resize.message-box\",this.update).unbind(\"scroll.message-box\",this.update)):this.instance&&this._createWindow(this.instance.message,this.instance.title,this.instance.buttons)},update(e){let t=this,n=this.$window.find(\"#message-box-wrap\"),o=n.data(\"timer\"),i=function(){LP.Hook.doAction(\"learn_press_message_box_before_resize\",t);let e=n.find(\".message-box-content\").css(\"height\",\"\").css(\"overflow\",\"hidden\"),o=(n.outerWidth(),n.outerHeight()),i=e.height(),a=s(window).height();n.offset().top,i>a-50?(e.css({height:a-25}),o=n.outerHeight()):e.css(\"height\",\"\").css(\"overflow\",\"\"),n.css({marginTop:(s(window).height()-o)\u002F2}),LP.Hook.doAction(\"learn_press_message_box_resize\",o,t)};e&&i(),o&&clearTimeout(o),o=setTimeout(i,250)},_removeInstance(e){for(let t=0;t\u003Cthis.instances.length;t++)if(this.instances[t].id===e){this.instances.splice(t,1);const e=this.instances.length;e?(this.instance=this.instances[e-1],this.$window.attr(\"instance\",this.instance.id)):(this.instance=!1,this.$window.removeAttr(\"instance\"));break}},_getInstance(e){for(let t=0;t\u003Cthis.instances.length;t++)if(this.instances[t].id===e)return this.instances[t]},_createWindow(e,t,n){const o=this.$window.find(\"#message-box-wrap\").html(\"\");if(t&&o.append('\u003Ch3 class=\"message-box-title\">'+t+\"\u003C\u002Fh3>\"),o.append(s('\u003Cdiv class=\"message-box-content\">\u003C\u002Fdiv>').html(e)),n){const e=s('\u003Cdiv class=\"message-box-buttons\">\u003C\u002Fdiv>');switch(n){case\"yesNo\":e.append(this._createButton(LP_Settings.localize.button_yes,\"yes\")),e.append(this._createButton(LP_Settings.localize.button_no,\"no\"));break;case\"okCancel\":e.append(this._createButton(LP_Settings.localize.button_ok,\"ok\")),e.append(this._createButton(LP_Settings.localize.button_cancel,\"cancel\"));break;default:e.append(this._createButton(LP_Settings.localize.button_ok,\"ok\"))}o.append(e)}},_createButton(e,t){const n=s('\u003Cbutton type=\"button\" class=\"button message-box-button message-box-button-'+t+'\">'+e+\"\u003C\u002Fbutton>\"),o=\"on\"+(t.substr(0,1).toUpperCase()+t.substr(1));return n.data(\"callback\",o).click(function(){const e=s(this).data(\"instance\"),t=e.events[s(this).data(\"callback\")];\"function\"===s.type(t)&&!1===t.apply(LP.MessageBox,[e])||LP.MessageBox.hide(null,e)}).data(\"instance\",this.instance),n}},a={hooks:{action:{},filter:{}},addAction(e,t,n,o){return this.addHook(\"action\",e,t,n,o),this},addFilter(e,t,n,o){return this.addHook(\"filter\",e,t,n,o),this},doAction(e){return this.doHook(\"action\",e,arguments)},applyFilters(e){return this.doHook(\"filter\",e,arguments)},removeAction(e,t){return this.removeHook(\"action\",e,t),this},removeFilter(e,t,n){return this.removeHook(\"filter\",e,t,n),this},addHook(e,t,n,o,s){void 0===this.hooks[e][t]&&(this.hooks[e][t]=[]);const i=this.hooks[e][t];return void 0===s&&(s=t+\"_\"+i.length),this.hooks[e][t].push({tag:s,callable:n,priority:o}),this},doHook(e,t,n){if(n=Array.prototype.slice.call(n,1),void 0!==this.hooks[e][t]){let o,s=this.hooks[e][t];s.sort(function(e,t){return e.priority-t.priority});for(let t=0;t\u003Cs.length;t++)o=s[t].callable,\"function\"!=typeof o&&(o=window[o]),\"action\"===e?n[t]=o.apply(null,n):n[0]=o.apply(null,n)}return\"filter\"===e?n[0]:n},removeHook(e,t,n,o){if(void 0!==this.hooks[e][t]){const s=this.hooks[e][t];for(let e=s.length-1;e>=0;e--)void 0!==o&&o!==s[e].tag||void 0!==n&&n!==s[e].priority||s.splice(e,1)}return this}},r=a,c={get:(e,t,n)=>{let o;if(n)o=wpCookies.get(e);else{let t=wpCookies.get(\"LP\");t&&(t=JSON.parse(t),o=e?t[e]:t)}return o||o===t||(o=t),o},set(e,t,n,o,s,i){if(arguments.length>2)wpCookies.set(e,t,n,o,s,i);else if(2==arguments.length){let n=wpCookies.get(\"LP\");n=n?JSON.parse(n):{},n[e]=t,wpCookies.set(\"LP\",JSON.stringify(n),\"\",\"\u002F\")}else wpCookies.set(\"LP\",JSON.stringify(e),\"\",\"\u002F\")},remove(e){const t=c.get(),n=new RegExp(e,\"g\"),o={},s=e.match(\u002F\\*\u002F);for(const i in t)s?i.match(n)||(o[i]=t[i]):e!=i&&(o[i]=t[i]);c.set(o)}},l=c,p={__key:\"LP\",set(e,t){const n=p.get(),{set:o}=lodash;o(n,e,t),localStorage.setItem(p.__key,JSON.stringify(n))},get(e,t){const n=JSON.parse(localStorage.getItem(p.__key)||\"{}\"),{get:o}=lodash,s=o(n,e);return e?void 0!==s?s:t:n},exists:e=>e in p.get(),remove(e){const t=p.get(),n=lodash.omit(t,e);p.__set(n)},__get:()=>localStorage.getItem(p.__key),__set(e){localStorage.setItem(p.__key,JSON.stringify(e||\"{}\"))}},d=p;__webpack_require__(4694);let u=1;const h=window.jQuery||jQuery;var f=__webpack_require__(3509),g=__webpack_require__.n(f);const m=jQuery;String.prototype.getQueryVar=function(e){e=e.replace(\u002F[\\[]\u002F,\"\\\\[\").replace(\u002F[\\]]\u002F,\"\\\\]\");const t=new RegExp(\"[\\\\?&]\"+e+\"=([^&#]*)\").exec(this);return null===t?\"\":decodeURIComponent(t[1].replace(\u002F\\+\u002Fg,\" \"))},String.prototype.addQueryVar=function(e,t){let n=this,o=n.split(\"#\");return n=o[0],e.match(\u002F\\[\u002F)?(n+=n.match(\u002F\\?\u002F)?\"&\":\"?\",n+=e+\"=\"+t):-1!=n.indexOf(\"&\"+e+\"=\")||-1!=n.indexOf(\"?\"+e+\"=\")?n=n.replace(new RegExp(e+\"=([^&#]*)\",\"g\"),e+\"=\"+t):(n+=n.match(\u002F\\?\u002F)?\"&\":\"?\",n+=e+\"=\"+t),n+(o[1]?\"#\"+o[1]:\"\")},String.prototype.removeQueryVar=function(e){let t=this;const n=t.split(\"#\");t=n[0],e=e.replace(\u002F[\\[]\u002F,\"\\\\[\").replace(\u002F[\\]]\u002F,\"\\\\]\");const o=new RegExp(\"[\\\\?&]\"+e+\"([[][^=]*)?=([^&#]*)\",\"g\");return t=t.replace(o,\"\"),t+(n[1]?\"#\"+n[1]:\"\")};const y={Hook:r,setUrl(e,t,n){e&&(history.pushState({},n,e),LP.Hook.doAction(\"learn_press_set_location_url\",e))},toggleGroupSection(e,t){const n=m(e);n.hasClass(\"hide-if-js\")&&n.hide().removeClass(\"hide-if-js\"),n.removeClass(\"hide-if-js\").slideToggle(function(){m(this).is(\":visible\")?m(t).addClass(\"toggle-on\").removeClass(\"toggle-off\"):m(t).addClass(\"toggle-off\").removeClass(\"toggle-on\")})},overflow(e,t){const n=m(e),o=n.css(\"overflow\");t?n.css(\"overflow\",t).data(\"overflow\",o):n.css(\"overflow\",n.data(\"overflow\"))},getUrl:()=>window.location.href,addQueryVar:(e,t,n)=>(void 0===n?window.location.href:n).addQueryVar(e,t),removeQueryVar:(e,t)=>(void 0===t?window.location.href:t).removeQueryVar(e),reload(e){e||(e=window.location.href),window.location.href=e},parseResponse(e,t){const n=e.match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);return n&&(e=n[1]),\"json\"===(t||\"json\")?this.parseJSON(e):e},parseJSON(e){if(\"string\"!=typeof e)return e;const t=String.raw({raw:e}).match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);try{e=t?JSON.parse(t[1].replace(\u002F(?:\\r\\n|\\r|\\n)\u002Fg,\"\")):JSON.parse(e)}catch(t){e={}}return e},ajax(e){const t=e.type||\"post\",n=e.dataType||\"json\",o=e.action?m.extend(e.data,{\"lp-ajax\":e.action}):e.data,s=e.beforeSend||function(){},i=e.url||window.location.href;m.ajax({data:o,url:i,type:t,dataType:\"html\",beforeSend:s.apply(null,e),success(t){const o=LP.parseResponse(t,n);\"function\"==typeof e.success&&e.success(o,t)},error(){\"function\"==typeof e.error&&e.error.apply(null,LP.funcArgs2Array())}})},doAjax(e){const t=e.type||\"post\",n=e.dataType||\"json\",o=(void 0===e.prefix||\"learnpress_\")+e.action,s=e.action?m.extend(e.data,{action:o}):e.data;m.ajax({data:s,url:e.url||window.location.href,type:t,dataType:\"html\",success(t){const o=LP.parseResponse(t,n);\"function\"==typeof e.success&&e.success(o,t)},error(){\"function\"==typeof e.error&&e.error.apply(null,LP.funcArgs2Array())}})},funcArgs2Array(e){const t=[];for(let n=0;n\u003Ce.length;n++)t.push(e[n]);return t},addFilter(e,t){const n=m(document),o=\"LP.\"+e;return n.on(o,t),LP.log(n.data(\"events\")),this},applyFilters(){const e=m(document),t=arguments[0],n=this.funcArgs2Array(arguments);return e.hasEvent(t)?(n[0]=\"LP.\"+t,e.triggerHandler.apply(e,n)):n[1]},addAction(e,t){return this.addFilter(e,t)},doAction(){const e=m(document),t=arguments[0],n=this.funcArgs2Array(arguments);e.hasEvent(t)&&(n[0]=\"LP.\"+t,e.trigger.apply(e,n))},toElement(e,t){if(0===m(e).length)return;t=m.extend({delay:300,duration:\"slow\",offset:50,container:null,callback:null,invisible:!1},t||{});let n=m(t.container),o=0;0===n.length&&(n=m(\"body, html\")),o=n.offset().top;const s=m(e).offset().top+n.scrollTop()-o-t.offset;t.invisible&&function(e){const t=n.scrollTop(),o=t+n.height(),s=m(e).offset().top-n.offset().top,i=s+m(e).height();return t\u003Cs&&o>i}(e)||n.fadeIn(10).delay(t.delay).animate({scrollTop:s},t.duration,t.callback)},uniqueId(e,t){let n;void 0===e&&(e=\"\");const o=function(e,t){return t\u003C(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?new Array(t-e.length+1).join(\"0\")+e:e};return this.php_js||(this.php_js={}),this.php_js.uniqidSeed||(this.php_js.uniqidSeed=Math.floor(123456789*Math.random())),this.php_js.uniqidSeed++,n=e,n+=o(parseInt((new Date).getTime()\u002F1e3,10),8),n+=o(this.php_js.uniqidSeed,5),t&&(n+=(10*Math.random()).toFixed(8).toString()),n},log(){for(let e=0,t=arguments.length;e\u003Ct;e++)console.log(arguments[e])},blockContent(){0===m(\"#learn-press-block-content\").length&&m(LP.template(\"learn-press-template-block-content\",{})).appendTo(m(\"body\")),LP.hideMainScrollbar().addClass(\"block-content\"),m(document).trigger(\"learn_press_block_content\")},unblockContent(){setTimeout(function(){LP.showMainScrollbar().removeClass(\"block-content\"),m(document).trigger(\"learn_press_unblock_content\")},350)},hideMainScrollbar(e){e||(e=\"html, body\");const t=m(e);return t.each(function(){const e=m(this),t=e.css(\"overflow\");e.css(\"overflow\",\"hidden\").attr(\"overflow\",t)}),t},showMainScrollbar(e){e||(e=\"html, body\");const t=m(e);return t.each(function(){const e=m(this),t=e.attr(\"overflow\");e.css(\"overflow\",t).removeAttr(\"overflow\")}),t},template:\"undefined\"!=typeof _?_.memoize(function(e,t){let n,o={evaluate:\u002F\u003C#([\\s\\S]+?)#>\u002Fg,interpolate:\u002F\\{\\{\\{([\\s\\S]+?)\\}\\}\\}\u002Fg,escape:\u002F\\{\\{([^\\}]+?)\\}\\}(?!\\})\u002Fg,variable:\"data\"};const s=function(t){return n=n||_.template(m(\"#\"+e).html(),null,o),n(t)};return t?s(t):s},function(e,t){return e+\"-\"+JSON.stringify(t)}):function(){return\"\"},alert(e,t){let n=\"\",o=\"\";\"string\"==typeof e?o=e:(void 0!==e.title&&(n=e.title),void 0!==e.message&&(o=e.message)),m.alerts.alert(o,n,function(e){LP._on_alert_hide(),t&&t(e)}),this._on_alert_show()},confirm(e,t){let n=\"\",o=\"\";\"string\"==typeof e?o=e:(void 0!==e.title&&(n=e.title),void 0!==e.message&&(o=e.message)),m.alerts.confirm(o,n,function(e){LP._on_alert_hide(),t&&t(e)}),this._on_alert_show()},_on_alert_show(){const e=m(\"#popup_container\");m('\u003Cspan id=\"popup_container_placeholder\" \u002F>').insertAfter(e).data(\"xxx\",e),e.stop().css(\"top\",\"-=50\").css(\"opacity\",\"0\").animate({top:\"+=50\",opacity:1},250)},_on_alert_hide(){const e=m(\"#popup_container_placeholder\"),t=e.data(\"xxx\");t&&t.replaceWith(e),t.appendTo(m(document.body)),t.stop().animate({top:\"+=50\",opacity:0},250,function(){m(this).remove()})},sendMessage(e,t,n,o){m.isPlainObject(e)&&(e=JSON.stringify(e)),n=n||\"*\",(t=t||window).postMessage(e,n,o)},receiveMessage(e,t){let n=e.origin||e.originalEvent.origin,o=e.data||e.originalEvent.data||\"\";(\"string\"==typeof o||o instanceof String)&&0===o.indexOf(\"{\")&&(o=LP.parseJSON(o)),LP.Hook.doAction(\"learn_press_receive_message\",o,n)},camelCaseDashObjectKeys(e,t=!0){const n=LP,o=function(e){return Array.isArray(e)};if((s=e)===Object(s)&&!o(s)&&\"function\"!=typeof s){const o={};return Object.keys(e).forEach(s=>{var i;o[i=s,i.replace(\u002F([-_][a-z])\u002Fgi,e=>e.toUpperCase().replace(\"-\",\"\").replace(\"_\",\"\"))]=t?n.camelCaseDashObjectKeys(e[s]):e[s]}),o}return o(e)?e.map(e=>n.camelCaseDashObjectKeys(e)):e;var s},IframeSubmit:function(e){const t=\"ajax-iframe-\"+u;let n=h('form[name=\"'+t+'\"]');n.length||(n=h(\"\u003Ciframe \u002F>\").appendTo(document.body).attr({name:t,src:\"#\"})),h(e).on(\"submit\",function(){const n=h(e).clone().appendTo(document.body);return n.attr(\"target\",t),n.find(\"#submit\").remove(),!1}),u++}};m(document).ready(function(){void 0!==m.alerts&&(m.alerts.overlayColor=\"#000\",m.alerts.overlayOpacity=.5,m.alerts.okButton=lpGlobalSettings.localize.button_ok,m.alerts.cancelButton=lpGlobalSettings.localize.button_cancel),m(\".learn-press-message.fixed\").each(function(){const e=m(this),t=e.data();!function(e,t){t.delayIn&&setTimeout(function(){e.show().hide().fadeIn()},t.delayIn),t.delayOut&&setTimeout(function(){e.fadeOut()},t.delayOut+(t.delayIn||0))}(e,t)}),setTimeout(function(){m(\".learn-press-nav-tabs li.active:not(.default) a\").trigger(\"click\")},300),function(){let e=null,t=function(){m(\".auto-check-lines\").checkLines(function(e){e>1?m(this).removeClass(\"single-lines\"):m(this).addClass(\"single-lines\"),m(this).attr(\"rows\",e)})};m(window).on(\"resize.check-lines\",function(){e?(e&&clearTimeout(e),e=setTimeout(t,300)):t()})}(),m(\".learn-press-tooltip, .lp-passing-conditional\").LP_Tooltip({offset:[24,24]}),m(\".learn-press-icon\").LP_Tooltip({offset:[30,30]}),m(\".learn-press-message[data-autoclose]\").each(function(){const e=m(this),t=parseInt(e.data(\"autoclose\"));t&&setTimeout(function(e){e.fadeOut()},t,e)}),m(document).on(\"click\",function(){m(document).trigger(\"learn-press\u002Fclose-all-quick-tip\")})}),function(){window.LP=window.LP||{},\"string\"==typeof arguments[0]?(LP[arguments[0]]=LP[arguments[0]]||{},LP[arguments[0]]=jQuery.extend(LP[arguments[0]],arguments[1])):LP=jQuery.extend(LP,arguments[0])}({Event_Callback:function(e){const t={};window.jQuery,this.on=function(n,o){let s=n.split(\".\"),i=\"\";return s.length>1&&(n=s[0],i=s[1]),t[n]||(t[n]=[[],{}]),i?(t[n][1][i]||(t[n][1][i]=[]),t[n][1][i].push(o)):t[n][0].push(o),e},this.off=function(n,o){let s=n.split(\".\"),i=\"\";if(s.length>1&&(n=s[0],i=s[1]),!t[n])return e;let a=-1;if(i){if(!t[n][1][i])return e;if(\"function\"==typeof o){if(a=t[n][1][i].indexOf(o),a\u003C0)return e;t[n][1][i].splice(a,1)}else t[n][1][i]=[]}else if(\"function\"==typeof o){if(a=t[n][0].indexOf(o),a\u003C0)return e;t[n][0].splice(a,1)}else t[n][0]=[];return e},this.callEvent=function(n,o){if(t[n]){if(t[n][0])for(var s=0;s\u003Ct[n][0].length;s++)\"function\"==typeof t[n][0][s]&&t[n][s][0].apply(e,o);if(t[n][1])for(var s in t[n][1])for(let i=0;i\u003Ct[n][1][s].length;i++)\"function\"==typeof t[n][1][s][i]&&t[n][1][s][i].apply(e,o)}}},MessageBox:i,Cookies:l,localStorage:d,...y}),o(),g()})()})();\n\\ No newline at end of file\n+(()=>{var __webpack_modules__={4694(){\"use strict\";const $=window.jQuery||jQuery,serializeJSON=function serializeJSON(path){const isInput=$(this).is(\"input\")||$(this).is(\"select\")||$(this).is(\"textarea\");let unIndexed=isInput?$(this).serializeArray():$(this).find(\"input, select, textarea\").serializeArray(),indexed={},validate=\u002F(\\[([a-zA-Z0-9_-]+)?\\]?)\u002Fg,arrayKeys={},end=!1;if($.each(unIndexed,function(){const that=this,match=this.name.match(\u002F^([0-9a-zA-Z_-]+)\u002F);if(!match)return;let keys=this.name.match(validate),objPath=\"indexed['\"+match[0]+\"']\";keys?(\"object\"!=typeof indexed[match[0]]&&(indexed[match[0]]={}),$.each(keys,function(i,prop){prop=prop.replace(\u002F\\]|\\[\u002Fg,\"\");let rawPath=objPath.replace(\u002F'|\\[|\\]\u002Fg,\"\"),objExp=\"\",preObjPath=objPath;\"\"==prop?(null==arrayKeys[rawPath]?arrayKeys[rawPath]=0:arrayKeys[rawPath]++,objPath+=\"['\"+arrayKeys[rawPath]+\"']\"):(isNaN(prop)||(arrayKeys[rawPath]=prop),objPath+=\"['\"+prop+\"']\");try{i==keys.length-1?(objExp=objPath+\"=that.value;\",end=!0):(objExp=objPath+\"={}\",end=!1);const evalString=\"if( typeof \"+objPath+\" == 'undefined'){\"+objExp+\";}else{if(end){if(typeof \"+preObjPath+\"!='object'){\"+preObjPath+\"={};}\"+objExp+\"}}\";eval(evalString)}catch(e){console.log(\"Error:\"+e+\"\\n\"+objExp)}})):indexed[match[0]]=this.value}),path){path=\"['\"+path.replace(\".\",\"']['\")+\"']\";const c=\"try{indexed = indexed\"+path+\"}catch(ex){console.log(c, ex);}\";eval(c)}return indexed},LP_Tooltip=e=>(e=$.extend({},{offset:[0,0]},e||{}),$.each(void 0,function(){const t=$(this),n=t.data(\"content\");if(!n||void 0!==t.data(\"LP_Tooltip\"))return;let o=null;t.on(\"mouseenter\",function(s){o=$('\u003Cdiv class=\"learn-press-tooltip-bubble\"\u002F>').html(n).appendTo($(\"body\")).hide();const i=t.offset();if(Array.isArray(e.offset)){const t=e.offset[1],n=e.offset[0];$.isNumeric(n)&&(i.left+=n),$.isNumeric(t)&&(i.top+=t)}o.css({top:i.top,left:i.left}),o.fadeIn()}),t.on(\"mouseleave\",function(e){o&&o.remove()}),t.data(\"tooltip\",!0)})),hasEvent=function(e){const t=$(this).data(\"events\");if(void 0===t.LP)return!1;for(i=0;i\u003Ct.LP.length;i++)if(t.LP[i].namespace==e)return!0;return!1},dataToJSON=function(){const e={};return $.each(this[0].attributes,function(){const t=this.name.match(\u002F^data-(.*)\u002F);t&&(e[t[1]]=this.value)}),e},rows=function(){const e=$(this).height(),t=$(this).css(\"line-height\").replace(\"px\",\"\");return $(this).attr({height:e,\"line-height\":t}),Math.floor(e\u002FparseInt(t))},checkLines=function(e){return this.each(function(){const t=$(this).rows();e.call(this,t)})},findNext=function(e){const t=$(e),n=this.first(),o=t.index(n),s=t.eq(o+1);return!!s.length&&s},findPrev=function(e){const t=$(e),n=this.first(),o=t.index(n),s=t.eq(o-1);return!!s.length&&s},progress=function(e){return this.each(function(){const t=parseInt(e\u002F100*360),n=$(this);t\u003C180?n.find(\".progress-circle\").removeClass(\"gt-50\"):n.find(\".progress-circle\").addClass(\"gt-50\"),n.find(\".fill\").css({transform:\"rotate(\"+t+\"deg)\"})})};$.fn.serializeJSON=serializeJSON,$.fn.LP_Tooltip=LP_Tooltip,$.fn.hasEvent=hasEvent,$.fn.dataToJSON=dataToJSON,$.fn.rows=rows,$.fn.checkLines=checkLines,$.fn.findNext=findNext,$.fn.findPrev=findPrev,$.fn.progress=progress;var __WEBPACK_DEFAULT_EXPORT__={serializeJSON,LP_Tooltip,hasEvent,dataToJSON,rows,checkLines,findNext,findPrev,progress}},6011(){!function(e){function t(t,n){const o=e(t),s=o.attr(\"data-id\")||LP.uniqueId();n=e.extend({event:\"hover\",autoClose:!0,single:!0,closeInterval:1e3,arrowOffset:null,tipClass:\"\"},n,o.data()),o.attr(\"data-id\",s);let i=o.attr(\"data-content-tip\")||o.html(),a=e('\u003Cdiv class=\"learn-press-tip-floating\">'+i+\"\u003C\u002Fdiv>\"),r=null,c=0,l=!1,p=\"el\"===n.arrowOffset?o.outerWidth()\u002F2:8,d=e(\"#__\"+s);function u(){if(r)return void clearTimeout(r);n.single&&e(\".learn-press-tip\").not(o).LP(\"QuickTip\",\"close\"),a.appendTo(document.body);const t=o.offset();a.css({top:t.top-a.outerHeight()-8,left:t.left-a.outerWidth()\u002F2+p})}function h(){r&&clearTimeout(r),r=setTimeout(function(){a.detach(),r=null},c)}function f(){c=0,h(),c=n.closeInterval}return 0===d.length&&e(document.body).append(e(\"\u003Cdiv \u002F>\").attr(\"id\",\"__\"+s).html(i).css(\"display\",\"none\")),i=d.html(),a.addClass(n.tipClass),o.data(\"content-tip\",i),o.attr(\"data-content-tip\")&&(l=!0),c=n.closeInterval,!1===n.autoClose&&(a.append('\u003Ca class=\"close\">\u003C\u002Fa>'),a.on(\"click\",\".close\",function(){f()})),l||o.html(\"\"),\"click\"===n.event&&o.on(\"click\",function(e){e.stopPropagation(),u()}),e(document).on(\"learn-press\u002Fclose-all-quick-tip\",function(){f()}),o.hover(function(e){e.stopPropagation(),\"click\"!==n.event&&u()},function(e){e.stopPropagation(),n.autoClose&&h()}).addClass(\"ready\"),{close:f,open:function(){u()}}}e.fn.LP(\"QuickTip\",function(n){return e.each(this,function(){let o=e(this).data(\"quick-tip\");o||(o=new t(this,n),e(this).data(\"quick-tip\",o)),\"string\"==typeof n&&o[n]&&o[n].apply(o)})})}(jQuery)},3509(){const e=jQuery;e(function(){e('.form-field input[type=\"password\"]').wrap('\u003Cspan class=\"lp-password-input\">\u003C\u002Fspan>'),e(\".lp-password-input\").append('\u003Cspan class=\"lp-show-password-input\">\u003C\u002Fspan>'),e(\".lp-show-password-input\").on(\"click\",function(){e(this).toggleClass(\"display-password\"),e(this).hasClass(\"display-password\")?e(this).siblings(['input[type=\"password\"]']).prop(\"type\",\"text\"):e(this).siblings('input[type=\"text\"]').prop(\"type\",\"password\")})})}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\"use strict\";function e(){window.LP=window.LP||{},\"string\"==typeof arguments[0]?(LP[arguments[0]]=LP[arguments[0]]||{},LP[arguments[0]]=jQuery.extend(LP[arguments[0]],arguments[1])):LP=jQuery.extend(LP,arguments[0])}Object.defineProperty(e,\"name\",{value:\"default\",configurable:!0});const t=window.jQuery;let n;void 0!==t&&(t.fn.LP=n=function(e,n){if(\"function\"==typeof n)t.fn[\"LP_\"+e]=n;else if(e){const n=[];if(arguments.length>1)for(let e=1;e\u003Carguments.length;e++)n.push(arguments[e]);return\"function\"==typeof t(this)[\"LP_\"+e]?t(this)[\"LP_\"+e].apply(this,n):this}return this});var o=__webpack_require__(6011),s=__webpack_require__.n(o);const i=window.jQuery,a={$block:null,$window:null,events:{},instances:[],instance:null,quickConfirm(e,t){const n=i(e);i(\"[learn-press-quick-confirm]\").each(function(){let e;(e=i(this).data(\"quick-confirm\"))&&(console.log(e),e.destroy())}),!n.attr(\"learn-press-quick-confirm\")&&n.attr(\"learn-press-quick-confirm\",\"true\").data(\"quick-confirm\",new function(e,t){var n=i(e),o=i('\u003Cspan class=\"learn-press-quick-confirm\">\u003C\u002Fspan>').insertAfter(n),s=i(e).position()||{left:0,top:0},a=null,r=null,c=3,l=function(){o.fadeOut(\"fast\",function(){i(this).remove(),o.parent().css(\"position\",\"\")}),n.removeAttr(\"learn-press-quick-confirm\").data(\"quick-confirm\",void 0),p()},p=function(){r&&clearInterval(r),a&&clearInterval(a)},d=function(){a=setInterval(function(){0==--c&&(l.call(o[0]),\"function\"==typeof t.onCancel&&t.onCancel(t.data),p()),o.find(\"span\").html(\" (\"+c+\")\")},1e3),r=setInterval(function(){n.is(\":visible\")&&\"hidden\"!=n.css(\"visibility\")||(p(),o.remove(),o.parent().css(\"position\",\"\"),\"function\"==typeof t.onCancel&&t.onCancel(t.data))},350)};t=i.extend({message:\"\",data:null,onOk:null,onCancel:null,offset:{top:0,left:0}},t||{}),o.html(t.message||n.attr(\"data-confirm-remove\")||\"Are you sure?\").append(\"\u003Cspan> (\"+c+\")\u003C\u002Fspan>\").css({}),o.click(function(){\"function\"==typeof t.onOk&&t.onOk(t.data),l()}).hover(function(){p()},function(){d()}),o.css({left:s.left+n.outerWidth()-o.outerWidth()+t.offset.left,top:s.top+n.outerHeight()+t.offset.top+5}).hide().fadeIn(\"fast\"),d(),this.destroy=function(){o.remove(),n.removeAttr(\"learn-press-quick-confirm\").data(\"quick-confirm\",void 0),p()}}(e,t))},show(e,t){i.proxy(function(){t=i.extend({title:\"\",buttons:\"\",events:!1,autohide:!1,message:e,data:!1,id:LP.uniqueId(),onHide:null},t||{}),this.instances.push(t),this.instance=t,i(document);const n=i(document.body);this.$block||(this.$block=i('\u003Cdiv id=\"learn-press-message-box-block\">\u003C\u002Fdiv>').appendTo(n)),this.$window||(this.$window=i('\u003Cdiv id=\"learn-press-message-box-window\">\u003Cdiv id=\"message-box-wrap\">\u003C\u002Fdiv> \u003C\u002Fdiv>').insertAfter(this.$block),this.$window.click(function(){})),this._createWindow(e,t.title,t.buttons),this.$block.show(),this.$window.show().attr(\"instance\",t.id),i(window).bind(\"resize.message-box\",i.proxy(this.update,this)).bind(\"scroll.message-box\",i.proxy(this.update,this)),this.update(!0),t.autohide&&setTimeout(function(){LP.MessageBox.hide(),\"function\"==typeof t.onHide&&t.onHide.call(LP.MessageBox,t)},t.autohide)},this)()},blockUI(e){e=(!1!==e?e||\"Wait a moment\":\"\")+'\u003Cdiv class=\"message-box-animation\">\u003C\u002Fdiv>',this.show(e)},hide(e,t){t?this._removeInstance(t.id):this.instance&&this._removeInstance(this.instance.id),0===this.instances.length?(this.$block&&this.$block.hide(),this.$window&&this.$window.hide(),i(window).unbind(\"resize.message-box\",this.update).unbind(\"scroll.message-box\",this.update)):this.instance&&this._createWindow(this.instance.message,this.instance.title,this.instance.buttons)},update(e){let t=this,n=this.$window.find(\"#message-box-wrap\"),o=n.data(\"timer\"),s=function(){LP.Hook.doAction(\"learn_press_message_box_before_resize\",t);let e=n.find(\".message-box-content\").css(\"height\",\"\").css(\"overflow\",\"hidden\"),o=(n.outerWidth(),n.outerHeight()),s=e.height(),a=i(window).height();n.offset().top,s>a-50?(e.css({height:a-25}),o=n.outerHeight()):e.css(\"height\",\"\").css(\"overflow\",\"\"),n.css({marginTop:(i(window).height()-o)\u002F2}),LP.Hook.doAction(\"learn_press_message_box_resize\",o,t)};e&&s(),o&&clearTimeout(o),o=setTimeout(s,250)},_removeInstance(e){for(let t=0;t\u003Cthis.instances.length;t++)if(this.instances[t].id===e){this.instances.splice(t,1);const e=this.instances.length;e?(this.instance=this.instances[e-1],this.$window.attr(\"instance\",this.instance.id)):(this.instance=!1,this.$window.removeAttr(\"instance\"));break}},_getInstance(e){for(let t=0;t\u003Cthis.instances.length;t++)if(this.instances[t].id===e)return this.instances[t]},_createWindow(e,t,n){const o=this.$window.find(\"#message-box-wrap\").html(\"\");if(t&&o.append('\u003Ch3 class=\"message-box-title\">'+t+\"\u003C\u002Fh3>\"),o.append(i('\u003Cdiv class=\"message-box-content\">\u003C\u002Fdiv>').html(e)),n){const e=i('\u003Cdiv class=\"message-box-buttons\">\u003C\u002Fdiv>');switch(n){case\"yesNo\":e.append(this._createButton(LP_Settings.localize.button_yes,\"yes\")),e.append(this._createButton(LP_Settings.localize.button_no,\"no\"));break;case\"okCancel\":e.append(this._createButton(LP_Settings.localize.button_ok,\"ok\")),e.append(this._createButton(LP_Settings.localize.button_cancel,\"cancel\"));break;default:e.append(this._createButton(LP_Settings.localize.button_ok,\"ok\"))}o.append(e)}},_createButton(e,t){const n=i('\u003Cbutton type=\"button\" class=\"button message-box-button message-box-button-'+t+'\">'+e+\"\u003C\u002Fbutton>\"),o=\"on\"+(t.substr(0,1).toUpperCase()+t.substr(1));return n.data(\"callback\",o).click(function(){const e=i(this).data(\"instance\"),t=e.events[i(this).data(\"callback\")];\"function\"===i.type(t)&&!1===t.apply(LP.MessageBox,[e])||LP.MessageBox.hide(null,e)}).data(\"instance\",this.instance),n}},r={hooks:{action:{},filter:{}},addAction(e,t,n,o){return this.addHook(\"action\",e,t,n,o),this},addFilter(e,t,n,o){return this.addHook(\"filter\",e,t,n,o),this},doAction(e){return this.doHook(\"action\",e,arguments)},applyFilters(e){return this.doHook(\"filter\",e,arguments)},removeAction(e,t){return this.removeHook(\"action\",e,t),this},removeFilter(e,t,n){return this.removeHook(\"filter\",e,t,n),this},addHook(e,t,n,o,s){void 0===this.hooks[e][t]&&(this.hooks[e][t]=[]);const i=this.hooks[e][t];return void 0===s&&(s=t+\"_\"+i.length),this.hooks[e][t].push({tag:s,callable:n,priority:o}),this},doHook(e,t,n){if(n=Array.prototype.slice.call(n,1),void 0!==this.hooks[e][t]){let o,s=this.hooks[e][t];s.sort(function(e,t){return e.priority-t.priority});for(let t=0;t\u003Cs.length;t++)o=s[t].callable,\"function\"!=typeof o&&(o=window[o]),\"action\"===e?n[t]=o.apply(null,n):n[0]=o.apply(null,n)}return\"filter\"===e?n[0]:n},removeHook(e,t,n,o){if(void 0!==this.hooks[e][t]){const s=this.hooks[e][t];for(let e=s.length-1;e>=0;e--)void 0!==o&&o!==s[e].tag||void 0!==n&&n!==s[e].priority||s.splice(e,1)}return this}},c=r,l={get:(e,t,n)=>{let o;if(n)o=wpCookies.get(e);else{let t=wpCookies.get(\"LP\");t&&(t=JSON.parse(t),o=e?t[e]:t)}return o||o===t||(o=t),o},set(e,t,n,o,s,i){if(arguments.length>2)wpCookies.set(e,t,n,o,s,i);else if(2==arguments.length){let n=wpCookies.get(\"LP\");n=n?JSON.parse(n):{},n[e]=t,wpCookies.set(\"LP\",JSON.stringify(n),\"\",\"\u002F\")}else wpCookies.set(\"LP\",JSON.stringify(e),\"\",\"\u002F\")},remove(e){const t=l.get(),n=new RegExp(e,\"g\"),o={},s=e.match(\u002F\\*\u002F);for(const i in t)s?i.match(n)||(o[i]=t[i]):e!=i&&(o[i]=t[i]);l.set(o)}},p=l,d={__key:\"LP\",set(e,t){const n=d.get(),{set:o}=lodash;o(n,e,t),localStorage.setItem(d.__key,JSON.stringify(n))},get(e,t){const n=JSON.parse(localStorage.getItem(d.__key)||\"{}\"),{get:o}=lodash,s=o(n,e);return e?void 0!==s?s:t:n},exists:e=>e in d.get(),remove(e){const t=d.get(),n=lodash.omit(t,e);d.__set(n)},__get:()=>localStorage.getItem(d.__key),__set(e){localStorage.setItem(d.__key,JSON.stringify(e||\"{}\"))}},u=d;__webpack_require__(4694);let h=1;const f=window.jQuery||jQuery;var g=__webpack_require__(3509),m=__webpack_require__.n(g);const y=jQuery;String.prototype.getQueryVar=function(e){e=e.replace(\u002F[\\[]\u002F,\"\\\\[\").replace(\u002F[\\]]\u002F,\"\\\\]\");const t=new RegExp(\"[\\\\?&]\"+e+\"=([^&#]*)\").exec(this);return null===t?\"\":decodeURIComponent(t[1].replace(\u002F\\+\u002Fg,\" \"))},String.prototype.addQueryVar=function(e,t){let n=this,o=n.split(\"#\");return n=o[0],e.match(\u002F\\[\u002F)?(n+=n.match(\u002F\\?\u002F)?\"&\":\"?\",n+=e+\"=\"+t):-1!=n.indexOf(\"&\"+e+\"=\")||-1!=n.indexOf(\"?\"+e+\"=\")?n=n.replace(new RegExp(e+\"=([^&#]*)\",\"g\"),e+\"=\"+t):(n+=n.match(\u002F\\?\u002F)?\"&\":\"?\",n+=e+\"=\"+t),n+(o[1]?\"#\"+o[1]:\"\")},String.prototype.removeQueryVar=function(e){let t=this;const n=t.split(\"#\");t=n[0],e=e.replace(\u002F[\\[]\u002F,\"\\\\[\").replace(\u002F[\\]]\u002F,\"\\\\]\");const o=new RegExp(\"[\\\\?&]\"+e+\"([[][^=]*)?=([^&#]*)\",\"g\");return t=t.replace(o,\"\"),t+(n[1]?\"#\"+n[1]:\"\")};const w={Hook:c,setUrl(e,t,n){e&&(history.pushState({},n,e),LP.Hook.doAction(\"learn_press_set_location_url\",e))},toggleGroupSection(e,t){const n=y(e);n.hasClass(\"hide-if-js\")&&n.hide().removeClass(\"hide-if-js\"),n.removeClass(\"hide-if-js\").slideToggle(function(){y(this).is(\":visible\")?y(t).addClass(\"toggle-on\").removeClass(\"toggle-off\"):y(t).addClass(\"toggle-off\").removeClass(\"toggle-on\")})},overflow(e,t){const n=y(e),o=n.css(\"overflow\");t?n.css(\"overflow\",t).data(\"overflow\",o):n.css(\"overflow\",n.data(\"overflow\"))},getUrl:()=>window.location.href,addQueryVar:(e,t,n)=>(void 0===n?window.location.href:n).addQueryVar(e,t),removeQueryVar:(e,t)=>(void 0===t?window.location.href:t).removeQueryVar(e),reload(e){e||(e=window.location.href),window.location.href=e},parseResponse(e,t){const n=e.match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);return n&&(e=n[1]),\"json\"===(t||\"json\")?this.parseJSON(e):e},parseJSON(e){if(\"string\"!=typeof e)return e;const t=String.raw({raw:e}).match(\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs);try{e=t?JSON.parse(t[1].replace(\u002F(?:\\r\\n|\\r|\\n)\u002Fg,\"\")):JSON.parse(e)}catch(t){e={}}return e},ajax(e){const t=e.type||\"post\",n=e.dataType||\"json\",o=e.action?y.extend(e.data,{\"lp-ajax\":e.action}):e.data,s=e.beforeSend||function(){},i=e.url||window.location.href;y.ajax({data:o,url:i,type:t,dataType:\"html\",beforeSend:s.apply(null,e),success(t){const o=LP.parseResponse(t,n);\"function\"==typeof e.success&&e.success(o,t)},error(){\"function\"==typeof e.error&&e.error.apply(null,LP.funcArgs2Array())}})},doAjax(e){const t=e.type||\"post\",n=e.dataType||\"json\",o=(void 0===e.prefix||\"learnpress_\")+e.action,s=e.action?y.extend(e.data,{action:o}):e.data;y.ajax({data:s,url:e.url||window.location.href,type:t,dataType:\"html\",success(t){const o=LP.parseResponse(t,n);\"function\"==typeof e.success&&e.success(o,t)},error(){\"function\"==typeof e.error&&e.error.apply(null,LP.funcArgs2Array())}})},funcArgs2Array(e){const t=[];for(let n=0;n\u003Ce.length;n++)t.push(e[n]);return t},addFilter(e,t){const n=y(document),o=\"LP.\"+e;return n.on(o,t),LP.log(n.data(\"events\")),this},applyFilters(){const e=y(document),t=arguments[0],n=this.funcArgs2Array(arguments);return e.hasEvent(t)?(n[0]=\"LP.\"+t,e.triggerHandler.apply(e,n)):n[1]},addAction(e,t){return this.addFilter(e,t)},doAction(){const e=y(document),t=arguments[0],n=this.funcArgs2Array(arguments);e.hasEvent(t)&&(n[0]=\"LP.\"+t,e.trigger.apply(e,n))},toElement(e,t){if(0===y(e).length)return;t=y.extend({delay:300,duration:\"slow\",offset:50,container:null,callback:null,invisible:!1},t||{});let n=y(t.container),o=0;0===n.length&&(n=y(\"body, html\")),o=n.offset().top;const s=y(e).offset().top+n.scrollTop()-o-t.offset;t.invisible&&function(e){const t=n.scrollTop(),o=t+n.height(),s=y(e).offset().top-n.offset().top,i=s+y(e).height();return t\u003Cs&&o>i}(e)||n.fadeIn(10).delay(t.delay).animate({scrollTop:s},t.duration,t.callback)},uniqueId(e,t){let n;void 0===e&&(e=\"\");const o=function(e,t){return t\u003C(e=parseInt(e,10).toString(16)).length?e.slice(e.length-t):t>e.length?new Array(t-e.length+1).join(\"0\")+e:e};return this.php_js||(this.php_js={}),this.php_js.uniqidSeed||(this.php_js.uniqidSeed=Math.floor(123456789*Math.random())),this.php_js.uniqidSeed++,n=e,n+=o(parseInt((new Date).getTime()\u002F1e3,10),8),n+=o(this.php_js.uniqidSeed,5),t&&(n+=(10*Math.random()).toFixed(8).toString()),n},log(){for(let e=0,t=arguments.length;e\u003Ct;e++)console.log(arguments[e])},blockContent(){0===y(\"#learn-press-block-content\").length&&y(LP.template(\"learn-press-template-block-content\",{})).appendTo(y(\"body\")),LP.hideMainScrollbar().addClass(\"block-content\"),y(document).trigger(\"learn_press_block_content\")},unblockContent(){setTimeout(function(){LP.showMainScrollbar().removeClass(\"block-content\"),y(document).trigger(\"learn_press_unblock_content\")},350)},hideMainScrollbar(e){e||(e=\"html, body\");const t=y(e);return t.each(function(){const e=y(this),t=e.css(\"overflow\");e.css(\"overflow\",\"hidden\").attr(\"overflow\",t)}),t},showMainScrollbar(e){e||(e=\"html, body\");const t=y(e);return t.each(function(){const e=y(this),t=e.attr(\"overflow\");e.css(\"overflow\",t).removeAttr(\"overflow\")}),t},template:\"undefined\"!=typeof _?_.memoize(function(e,t){let n,o={evaluate:\u002F\u003C#([\\s\\S]+?)#>\u002Fg,interpolate:\u002F\\{\\{\\{([\\s\\S]+?)\\}\\}\\}\u002Fg,escape:\u002F\\{\\{([^\\}]+?)\\}\\}(?!\\})\u002Fg,variable:\"data\"};const s=function(t){return n=n||_.template(y(\"#\"+e).html(),null,o),n(t)};return t?s(t):s},function(e,t){return e+\"-\"+JSON.stringify(t)}):function(){return\"\"},alert(e,t){let n=\"\",o=\"\";\"string\"==typeof e?o=e:(void 0!==e.title&&(n=e.title),void 0!==e.message&&(o=e.message)),y.alerts.alert(o,n,function(e){LP._on_alert_hide(),t&&t(e)}),this._on_alert_show()},confirm(e,t){let n=\"\",o=\"\";\"string\"==typeof e?o=e:(void 0!==e.title&&(n=e.title),void 0!==e.message&&(o=e.message)),y.alerts.confirm(o,n,function(e){LP._on_alert_hide(),t&&t(e)}),this._on_alert_show()},_on_alert_show(){const e=y(\"#popup_container\");y('\u003Cspan id=\"popup_container_placeholder\" \u002F>').insertAfter(e).data(\"xxx\",e),e.stop().css(\"top\",\"-=50\").css(\"opacity\",\"0\").animate({top:\"+=50\",opacity:1},250)},_on_alert_hide(){const e=y(\"#popup_container_placeholder\"),t=e.data(\"xxx\");t&&t.replaceWith(e),t.appendTo(y(document.body)),t.stop().animate({top:\"+=50\",opacity:0},250,function(){y(this).remove()})},sendMessage(e,t,n,o){y.isPlainObject(e)&&(e=JSON.stringify(e)),n=n||\"*\",(t=t||window).postMessage(e,n,o)},receiveMessage(e,t){let n=e.origin||e.originalEvent.origin,o=e.data||e.originalEvent.data||\"\";(\"string\"==typeof o||o instanceof String)&&0===o.indexOf(\"{\")&&(o=LP.parseJSON(o)),LP.Hook.doAction(\"learn_press_receive_message\",o,n)},camelCaseDashObjectKeys(e,t=!0){const n=LP,o=function(e){return Array.isArray(e)};if((s=e)===Object(s)&&!o(s)&&\"function\"!=typeof s){const o={};return Object.keys(e).forEach(s=>{var i;o[i=s,i.replace(\u002F([-_][a-z])\u002Fgi,e=>e.toUpperCase().replace(\"-\",\"\").replace(\"_\",\"\"))]=t?n.camelCaseDashObjectKeys(e[s]):e[s]}),o}return o(e)?e.map(e=>n.camelCaseDashObjectKeys(e)):e;var s},IframeSubmit:function(e){const t=\"ajax-iframe-\"+h;let n=f('form[name=\"'+t+'\"]');n.length||(n=f(\"\u003Ciframe \u002F>\").appendTo(document.body).attr({name:t,src:\"#\"})),f(e).on(\"submit\",function(){const n=f(e).clone().appendTo(document.body);return n.attr(\"target\",t),n.find(\"#submit\").remove(),!1}),h++}};y(document).ready(function(){void 0!==y.alerts&&(y.alerts.overlayColor=\"#000\",y.alerts.overlayOpacity=.5,y.alerts.okButton=lpGlobalSettings.localize.button_ok,y.alerts.cancelButton=lpGlobalSettings.localize.button_cancel),y(\".learn-press-message.fixed\").each(function(){const e=y(this),t=e.data();!function(e,t){t.delayIn&&setTimeout(function(){e.show().hide().fadeIn()},t.delayIn),t.delayOut&&setTimeout(function(){e.fadeOut()},t.delayOut+(t.delayIn||0))}(e,t)}),setTimeout(function(){y(\".learn-press-nav-tabs li.active:not(.default) a\").trigger(\"click\")},300),function(){let e=null,t=function(){y(\".auto-check-lines\").checkLines(function(e){e>1?y(this).removeClass(\"single-lines\"):y(this).addClass(\"single-lines\"),y(this).attr(\"rows\",e)})};y(window).on(\"resize.check-lines\",function(){e?(e&&clearTimeout(e),e=setTimeout(t,300)):t()})}(),y(\".learn-press-tooltip, .lp-passing-conditional\").LP_Tooltip({offset:[24,24]}),y(\".learn-press-icon\").LP_Tooltip({offset:[30,30]}),y(\".learn-press-message[data-autoclose]\").each(function(){const e=y(this),t=parseInt(e.data(\"autoclose\"));t&&setTimeout(function(e){e.fadeOut()},t,e)}),y(document).on(\"click\",function(){y(document).trigger(\"learn-press\u002Fclose-all-quick-tip\")})}),e({Event_Callback:function(e){const t={};window.jQuery,this.on=function(n,o){let s=n.split(\".\"),i=\"\";return s.length>1&&(n=s[0],i=s[1]),t[n]||(t[n]=[[],{}]),i?(t[n][1][i]||(t[n][1][i]=[]),t[n][1][i].push(o)):t[n][0].push(o),e},this.off=function(n,o){let s=n.split(\".\"),i=\"\";if(s.length>1&&(n=s[0],i=s[1]),!t[n])return e;let a=-1;if(i){if(!t[n][1][i])return e;if(\"function\"==typeof o){if(a=t[n][1][i].indexOf(o),a\u003C0)return e;t[n][1][i].splice(a,1)}else t[n][1][i]=[]}else if(\"function\"==typeof o){if(a=t[n][0].indexOf(o),a\u003C0)return e;t[n][0].splice(a,1)}else t[n][0]=[];return e},this.callEvent=function(n,o){if(t[n]){if(t[n][0])for(var s=0;s\u003Ct[n][0].length;s++)\"function\"==typeof t[n][0][s]&&t[n][s][0].apply(e,o);if(t[n][1])for(var s in t[n][1])for(let i=0;i\u003Ct[n][1][s].length;i++)\"function\"==typeof t[n][1][s][i]&&t[n][1][s][i].apply(e,o)}}},MessageBox:a,Cookies:p,localStorage:u,...w}),s(),m()})()})();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fadmin.plugins.all.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fadmin.plugins.all.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fadmin.plugins.all.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fadmin.plugins.all.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15156 +1,15156 @@\n-\u002F*!\r\n- * Vue.js v2.6.10\r\n- * (c) 2014-2019 Evan You\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vue = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var emptyObject = Object.freeze({});\r\n-\r\n-    \u002F\u002F These helpers produce better VM code in JS engines due to their\r\n-    \u002F\u002F explicitness and function inlining.\r\n-    function isUndef (v) {\r\n-        return v === undefined || v === null\r\n-    }\r\n-\r\n-    function isDef (v) {\r\n-        return v !== undefined && v !== null\r\n-    }\r\n-\r\n-    function isTrue (v) {\r\n-        return v === true\r\n-    }\r\n-\r\n-    function isFalse (v) {\r\n-        return v === false\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if value is primitive.\r\n-     *\u002F\r\n-    function isPrimitive (value) {\r\n-        return (\r\n-            typeof value === 'string' ||\r\n-            typeof value === 'number' ||\r\n-            \u002F\u002F $flow-disable-line\r\n-            typeof value === 'symbol' ||\r\n-            typeof value === 'boolean'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Quick object check - this is primarily used to tell\r\n-     * Objects from primitive values when we know the value\r\n-     * is a JSON-compliant type.\r\n-     *\u002F\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the raw type string of a value, e.g., [object Object].\r\n-     *\u002F\r\n-    var _toString = Object.prototype.toString;\r\n-\r\n-    function toRawType (value) {\r\n-        return _toString.call(value).slice(8, -1)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Strict object type check. Only returns true\r\n-     * for plain JavaScript objects.\r\n-     *\u002F\r\n-    function isPlainObject (obj) {\r\n-        return _toString.call(obj) === '[object Object]'\r\n-    }\r\n-\r\n-    function isRegExp (v) {\r\n-        return _toString.call(v) === '[object RegExp]'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if val is a valid array index.\r\n-     *\u002F\r\n-    function isValidArrayIndex (val) {\r\n-        var n = parseFloat(String(val));\r\n-        return n >= 0 && Math.floor(n) === n && isFinite(val)\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return (\r\n-            isDef(val) &&\r\n-            typeof val.then === 'function' &&\r\n-            typeof val.catch === 'function'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert a value to a string that is actually rendered.\r\n-     *\u002F\r\n-    function toString (val) {\r\n-        return val == null\r\n-            ? ''\r\n-            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\r\n-                ? JSON.stringify(val, null, 2)\r\n-                : String(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert an input value to a number for persistence.\r\n-     * If the conversion fails, return original string.\r\n-     *\u002F\r\n-    function toNumber (val) {\r\n-        var n = parseFloat(val);\r\n-        return isNaN(n) ? val : n\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Make a map and return a function for checking if a key\r\n-     * is in that map.\r\n-     *\u002F\r\n-    function makeMap (\r\n-        str,\r\n-        expectsLowerCase\r\n-    ) {\r\n-        var map = Object.create(null);\r\n-        var list = str.split(',');\r\n-        for (var i = 0; i \u003C list.length; i++) {\r\n-            map[list[i]] = true;\r\n-        }\r\n-        return expectsLowerCase\r\n-            ? function (val) { return map[val.toLowerCase()]; }\r\n-            : function (val) { return map[val]; }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if a tag is a built-in tag.\r\n-     *\u002F\r\n-    var isBuiltInTag = makeMap('slot,component', true);\r\n-\r\n-    \u002F**\r\n-     * Check if an attribute is a reserved attribute.\r\n-     *\u002F\r\n-    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\r\n-\r\n-    \u002F**\r\n-     * Remove an item from an array.\r\n-     *\u002F\r\n-    function remove (arr, item) {\r\n-        if (arr.length) {\r\n-            var index = arr.indexOf(item);\r\n-            if (index > -1) {\r\n-                return arr.splice(index, 1)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check whether an object has the property.\r\n-     *\u002F\r\n-    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n-    function hasOwn (obj, key) {\r\n-        return hasOwnProperty.call(obj, key)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Create a cached version of a pure function.\r\n-     *\u002F\r\n-    function cached (fn) {\r\n-        var cache = Object.create(null);\r\n-        return (function cachedFn (str) {\r\n-            var hit = cache[str];\r\n-            return hit || (cache[str] = fn(str))\r\n-        })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Camelize a hyphen-delimited string.\r\n-     *\u002F\r\n-    var camelizeRE = \u002F-(\\w)\u002Fg;\r\n-    var camelize = cached(function (str) {\r\n-        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Capitalize a string.\r\n-     *\u002F\r\n-    var capitalize = cached(function (str) {\r\n-        return str.charAt(0).toUpperCase() + str.slice(1)\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Hyphenate a camelCase string.\r\n-     *\u002F\r\n-    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\r\n-    var hyphenate = cached(function (str) {\r\n-        return str.replace(hyphenateRE, '-$1').toLowerCase()\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Simple bind polyfill for environments that do not support it,\r\n-     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\r\n-     * since native bind is now performant enough in most browsers.\r\n-     * But removing it would mean breaking code that was able to run in\r\n-     * PhantomJS 1.x, so this must be kept for backward compatibility.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function polyfillBind (fn, ctx) {\r\n-        function boundFn (a) {\r\n-            var l = arguments.length;\r\n-            return l\r\n-                ? l > 1\r\n-                    ? fn.apply(ctx, arguments)\r\n-                    : fn.call(ctx, a)\r\n-                : fn.call(ctx)\r\n-        }\r\n-\r\n-        boundFn._length = fn.length;\r\n-        return boundFn\r\n-    }\r\n-\r\n-    function nativeBind (fn, ctx) {\r\n-        return fn.bind(ctx)\r\n-    }\r\n-\r\n-    var bind = Function.prototype.bind\r\n-        ? nativeBind\r\n-        : polyfillBind;\r\n-\r\n-    \u002F**\r\n-     * Convert an Array-like object to a real Array.\r\n-     *\u002F\r\n-    function toArray (list, start) {\r\n-        start = start || 0;\r\n-        var i = list.length - start;\r\n-        var ret = new Array(i);\r\n-        while (i--) {\r\n-            ret[i] = list[i + start];\r\n-        }\r\n-        return ret\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Mix properties into target object.\r\n-     *\u002F\r\n-    function extend (to, _from) {\r\n-        for (var key in _from) {\r\n-            to[key] = _from[key];\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge an Array of Objects into a single Object.\r\n-     *\u002F\r\n-    function toObject (arr) {\r\n-        var res = {};\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (arr[i]) {\r\n-                extend(res, arr[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Perform no operation.\r\n-     * Stubbing args to make Flow happy without leaving useless transpiled code\r\n-     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\r\n-     *\u002F\r\n-    function noop (a, b, c) {}\r\n-\r\n-    \u002F**\r\n-     * Always return false.\r\n-     *\u002F\r\n-    var no = function (a, b, c) { return false; };\r\n-\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Return the same value.\r\n-     *\u002F\r\n-    var identity = function (_) { return _; };\r\n-\r\n-    \u002F**\r\n-     * Generate a string containing static keys from compiler modules.\r\n-     *\u002F\r\n-    function genStaticKeys (modules) {\r\n-        return modules.reduce(function (keys, m) {\r\n-            return keys.concat(m.staticKeys || [])\r\n-        }, []).join(',')\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if two values are loosely equal - that is,\r\n-     * if they are plain objects, do they have the same shape?\r\n-     *\u002F\r\n-    function looseEqual (a, b) {\r\n-        if (a === b) { return true }\r\n-        var isObjectA = isObject(a);\r\n-        var isObjectB = isObject(b);\r\n-        if (isObjectA && isObjectB) {\r\n-            try {\r\n-                var isArrayA = Array.isArray(a);\r\n-                var isArrayB = Array.isArray(b);\r\n-                if (isArrayA && isArrayB) {\r\n-                    return a.length === b.length && a.every(function (e, i) {\r\n-                            return looseEqual(e, b[i])\r\n-                        })\r\n-                } else if (a instanceof Date && b instanceof Date) {\r\n-                    return a.getTime() === b.getTime()\r\n-                } else if (!isArrayA && !isArrayB) {\r\n-                    var keysA = Object.keys(a);\r\n-                    var keysB = Object.keys(b);\r\n-                    return keysA.length === keysB.length && keysA.every(function (key) {\r\n-                            return looseEqual(a[key], b[key])\r\n-                        })\r\n-                } else {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    return false\r\n-                }\r\n-            } catch (e) {\r\n-              \u002F* istanbul ignore next *\u002F\r\n-                return false\r\n-            }\r\n-        } else if (!isObjectA && !isObjectB) {\r\n-            return String(a) === String(b)\r\n-        } else {\r\n-            return false\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return the first index at which a loosely equal value can be\r\n-     * found in the array (if value is a plain object, the array must\r\n-     * contain an object of the same shape), or -1 if it is not present.\r\n-     *\u002F\r\n-    function looseIndexOf (arr, val) {\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (looseEqual(arr[i], val)) { return i }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure a function is called only once.\r\n-     *\u002F\r\n-    function once (fn) {\r\n-        var called = false;\r\n-        return function () {\r\n-            if (!called) {\r\n-                called = true;\r\n-                fn.apply(this, arguments);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var SSR_ATTR = 'data-server-rendered';\r\n-\r\n-    var ASSET_TYPES = [\r\n-        'component',\r\n-        'directive',\r\n-        'filter'\r\n-    ];\r\n-\r\n-    var LIFECYCLE_HOOKS = [\r\n-        'beforeCreate',\r\n-        'created',\r\n-        'beforeMount',\r\n-        'mounted',\r\n-        'beforeUpdate',\r\n-        'updated',\r\n-        'beforeDestroy',\r\n-        'destroyed',\r\n-        'activated',\r\n-        'deactivated',\r\n-        'errorCaptured',\r\n-        'serverPrefetch'\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var config = ({\r\n-        \u002F**\r\n-         * Option merge strategies (used in core\u002Futil\u002Foptions)\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        optionMergeStrategies: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Whether to suppress warnings.\r\n-         *\u002F\r\n-        silent: false,\r\n-\r\n-        \u002F**\r\n-         * Show production mode tip message on boot?\r\n-         *\u002F\r\n-        productionTip: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to enable devtools\r\n-         *\u002F\r\n-        devtools: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to record perf\r\n-         *\u002F\r\n-        performance: false,\r\n-\r\n-        \u002F**\r\n-         * Error handler for watcher errors\r\n-         *\u002F\r\n-        errorHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Warn handler for watcher warns\r\n-         *\u002F\r\n-        warnHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Ignore certain custom elements\r\n-         *\u002F\r\n-        ignoredElements: [],\r\n-\r\n-        \u002F**\r\n-         * Custom user key aliases for v-on\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        keyCodes: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is reserved so that it cannot be registered as a\r\n-         * component. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedTag: no,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute is reserved so that it cannot be used as a component\r\n-         * prop. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedAttr: no,\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is an unknown element.\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        isUnknownElement: no,\r\n-\r\n-        \u002F**\r\n-         * Get the namespace of an element\r\n-         *\u002F\r\n-        getTagNamespace: noop,\r\n-\r\n-        \u002F**\r\n-         * Parse the real tag name for the specific platform.\r\n-         *\u002F\r\n-        parsePlatformTagName: identity,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute must be bound using property, e.g. value\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        mustUseProp: no,\r\n-\r\n-        \u002F**\r\n-         * Perform updates asynchronously. Intended to be used by Vue Test Utils\r\n-         * This will significantly reduce performance if set to false.\r\n-         *\u002F\r\n-        async: true,\r\n-\r\n-        \u002F**\r\n-         * Exposed for legacy reasons\r\n-         *\u002F\r\n-        _lifecycleHooks: LIFECYCLE_HOOKS\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * unicode letters used for parsing html tags, component names and property paths.\r\n-     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\r\n-     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\r\n-     *\u002F\r\n-    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\r\n-\r\n-    \u002F**\r\n-     * Check if a string starts with $ or _\r\n-     *\u002F\r\n-    function isReserved (str) {\r\n-        var c = (str + '').charCodeAt(0);\r\n-        return c === 0x24 || c === 0x5F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a property.\r\n-     *\u002F\r\n-    function def (obj, key, val, enumerable) {\r\n-        Object.defineProperty(obj, key, {\r\n-            value: val,\r\n-            enumerable: !!enumerable,\r\n-            writable: true,\r\n-            configurable: true\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse simple path.\r\n-     *\u002F\r\n-    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\r\n-    function parsePath (path) {\r\n-        if (bailRE.test(path)) {\r\n-            return\r\n-        }\r\n-        var segments = path.split('.');\r\n-        return function (obj) {\r\n-            for (var i = 0; i \u003C segments.length; i++) {\r\n-                if (!obj) { return }\r\n-                obj = obj[segments[i]];\r\n-            }\r\n-            return obj\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F can we use __proto__?\r\n-    var hasProto = '__proto__' in {};\r\n-\r\n-    \u002F\u002F Browser environment sniffing\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\r\n-    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\r\n-    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\r\n-    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\r\n-    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\r\n-    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\r\n-    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\r\n-    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\r\n-    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\r\n-    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\r\n-    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\r\n-\r\n-    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\r\n-    var nativeWatch = ({}).watch;\r\n-\r\n-    var supportsPassive = false;\r\n-    if (inBrowser) {\r\n-        try {\r\n-            var opts = {};\r\n-            Object.defineProperty(opts, 'passive', ({\r\n-                get: function get () {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    supportsPassive = true;\r\n-                }\r\n-            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\r\n-            window.addEventListener('test-passive', null, opts);\r\n-        } catch (e) {}\r\n-    }\r\n-\r\n-    \u002F\u002F this needs to be lazy-evaled because vue may be required before\r\n-    \u002F\u002F vue-server-renderer can set VUE_ENV\r\n-    var _isServer;\r\n-    var isServerRendering = function () {\r\n-        if (_isServer === undefined) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\r\n-                \u002F\u002F detect presence of vue-server-renderer and avoid\r\n-                \u002F\u002F Webpack shimming the process\r\n-                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\r\n-            } else {\r\n-                _isServer = false;\r\n-            }\r\n-        }\r\n-        return _isServer\r\n-    };\r\n-\r\n-    \u002F\u002F detect devtools\r\n-    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function isNative (Ctor) {\r\n-        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\r\n-    }\r\n-\r\n-    var hasSymbol =\r\n-        typeof Symbol !== 'undefined' && isNative(Symbol) &&\r\n-        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\r\n-\r\n-    var _Set;\r\n-  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\r\n-    if (typeof Set !== 'undefined' && isNative(Set)) {\r\n-        \u002F\u002F use native Set when available.\r\n-        _Set = Set;\r\n-    } else {\r\n-        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\r\n-        _Set = \u002F*@__PURE__*\u002F(function () {\r\n-            function Set () {\r\n-                this.set = Object.create(null);\r\n-            }\r\n-            Set.prototype.has = function has (key) {\r\n-                return this.set[key] === true\r\n-            };\r\n-            Set.prototype.add = function add (key) {\r\n-                this.set[key] = true;\r\n-            };\r\n-            Set.prototype.clear = function clear () {\r\n-                this.set = Object.create(null);\r\n-            };\r\n-\r\n-            return Set;\r\n-        }());\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn = noop;\r\n-    var tip = noop;\r\n-    var generateComponentTrace = (noop); \u002F\u002F work around flow check\r\n-    var formatComponentName = (noop);\r\n-\r\n-    {\r\n-        var hasConsole = typeof console !== 'undefined';\r\n-        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\r\n-        var classify = function (str) { return str\r\n-            .replace(classifyRE, function (c) { return c.toUpperCase(); })\r\n-            .replace(\u002F[-_]\u002Fg, ''); };\r\n-\r\n-        warn = function (msg, vm) {\r\n-            var trace = vm ? generateComponentTrace(vm) : '';\r\n-\r\n-            if (config.warnHandler) {\r\n-                config.warnHandler.call(null, msg, vm, trace);\r\n-            } else if (hasConsole && (!config.silent)) {\r\n-                console.error((\"[Vue warn]: \" + msg + trace));\r\n-            }\r\n-        };\r\n-\r\n-        tip = function (msg, vm) {\r\n-            if (hasConsole && (!config.silent)) {\r\n-                console.warn(\"[Vue tip]: \" + msg + (\r\n-                        vm ? generateComponentTrace(vm) : ''\r\n-                    ));\r\n-            }\r\n-        };\r\n-\r\n-        formatComponentName = function (vm, includeFile) {\r\n-            if (vm.$root === vm) {\r\n-                return '\u003CRoot>'\r\n-            }\r\n-            var options = typeof vm === 'function' && vm.cid != null\r\n-                ? vm.options\r\n-                : vm._isVue\r\n-                    ? vm.$options || vm.constructor.options\r\n-                    : vm;\r\n-            var name = options.name || options._componentTag;\r\n-            var file = options.__file;\r\n-            if (!name && file) {\r\n-                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\r\n-                name = match && match[1];\r\n-            }\r\n-\r\n-            return (\r\n-                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\r\n-                (file && includeFile !== false ? (\" at \" + file) : '')\r\n-            )\r\n-        };\r\n-\r\n-        var repeat = function (str, n) {\r\n-            var res = '';\r\n-            while (n) {\r\n-                if (n % 2 === 1) { res += str; }\r\n-                if (n > 1) { str += str; }\r\n-                n >>= 1;\r\n-            }\r\n-            return res\r\n-        };\r\n-\r\n-        generateComponentTrace = function (vm) {\r\n-            if (vm._isVue && vm.$parent) {\r\n-                var tree = [];\r\n-                var currentRecursiveSequence = 0;\r\n-                while (vm) {\r\n-                    if (tree.length > 0) {\r\n-                        var last = tree[tree.length - 1];\r\n-                        if (last.constructor === vm.constructor) {\r\n-                            currentRecursiveSequence++;\r\n-                            vm = vm.$parent;\r\n-                            continue\r\n-                        } else if (currentRecursiveSequence > 0) {\r\n-                            tree[tree.length - 1] = [last, currentRecursiveSequence];\r\n-                            currentRecursiveSequence = 0;\r\n-                        }\r\n-                    }\r\n-                    tree.push(vm);\r\n-                    vm = vm.$parent;\r\n-                }\r\n-                return '\\n\\nfound in\\n\\n' + tree\r\n-                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\r\n-                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\r\n-                            : formatComponentName(vm))); })\r\n-                        .join('\\n')\r\n-            } else {\r\n-                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid = 0;\r\n-\r\n-    \u002F**\r\n-     * A dep is an observable that can have multiple\r\n-     * directives subscribing to it.\r\n-     *\u002F\r\n-    var Dep = function Dep () {\r\n-        this.id = uid++;\r\n-        this.subs = [];\r\n-    };\r\n-\r\n-    Dep.prototype.addSub = function addSub (sub) {\r\n-        this.subs.push(sub);\r\n-    };\r\n-\r\n-    Dep.prototype.removeSub = function removeSub (sub) {\r\n-        remove(this.subs, sub);\r\n-    };\r\n-\r\n-    Dep.prototype.depend = function depend () {\r\n-        if (Dep.target) {\r\n-            Dep.target.addDep(this);\r\n-        }\r\n-    };\r\n-\r\n-    Dep.prototype.notify = function notify () {\r\n-        \u002F\u002F stabilize the subscriber list first\r\n-        var subs = this.subs.slice();\r\n-        if (!config.async) {\r\n-            \u002F\u002F subs aren't sorted in scheduler if not running async\r\n-            \u002F\u002F we need to sort them now to make sure they fire in correct\r\n-            \u002F\u002F order\r\n-            subs.sort(function (a, b) { return a.id - b.id; });\r\n-        }\r\n-        for (var i = 0, l = subs.length; i \u003C l; i++) {\r\n-            subs[i].update();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F The current target watcher being evaluated.\r\n-    \u002F\u002F This is globally unique because only one watcher\r\n-    \u002F\u002F can be evaluated at a time.\r\n-    Dep.target = null;\r\n-    var targetStack = [];\r\n-\r\n-    function pushTarget (target) {\r\n-        targetStack.push(target);\r\n-        Dep.target = target;\r\n-    }\r\n-\r\n-    function popTarget () {\r\n-        targetStack.pop();\r\n-        Dep.target = targetStack[targetStack.length - 1];\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var VNode = function VNode (\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        text,\r\n-        elm,\r\n-        context,\r\n-        componentOptions,\r\n-        asyncFactory\r\n-    ) {\r\n-        this.tag = tag;\r\n-        this.data = data;\r\n-        this.children = children;\r\n-        this.text = text;\r\n-        this.elm = elm;\r\n-        this.ns = undefined;\r\n-        this.context = context;\r\n-        this.fnContext = undefined;\r\n-        this.fnOptions = undefined;\r\n-        this.fnScopeId = undefined;\r\n-        this.key = data && data.key;\r\n-        this.componentOptions = componentOptions;\r\n-        this.componentInstance = undefined;\r\n-        this.parent = undefined;\r\n-        this.raw = false;\r\n-        this.isStatic = false;\r\n-        this.isRootInsert = true;\r\n-        this.isComment = false;\r\n-        this.isCloned = false;\r\n-        this.isOnce = false;\r\n-        this.asyncFactory = asyncFactory;\r\n-        this.asyncMeta = undefined;\r\n-        this.isAsyncPlaceholder = false;\r\n-    };\r\n-\r\n-    var prototypeAccessors = { child: { configurable: true } };\r\n-\r\n-    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    prototypeAccessors.child.get = function () {\r\n-        return this.componentInstance\r\n-    };\r\n-\r\n-    Object.defineProperties( VNode.prototype, prototypeAccessors );\r\n-\r\n-    var createEmptyVNode = function (text) {\r\n-        if ( text === void 0 ) text = '';\r\n-\r\n-        var node = new VNode();\r\n-        node.text = text;\r\n-        node.isComment = true;\r\n-        return node\r\n-    };\r\n-\r\n-    function createTextVNode (val) {\r\n-        return new VNode(undefined, undefined, undefined, String(val))\r\n-    }\r\n-\r\n-    \u002F\u002F optimized shallow clone\r\n-    \u002F\u002F used for static nodes and slot nodes because they may be reused across\r\n-    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\r\n-    \u002F\u002F on their elm reference.\r\n-    function cloneVNode (vnode) {\r\n-        var cloned = new VNode(\r\n-            vnode.tag,\r\n-            vnode.data,\r\n-            \u002F\u002F #7975\r\n-            \u002F\u002F clone children array to avoid mutating original in case of cloning\r\n-            \u002F\u002F a child.\r\n-            vnode.children && vnode.children.slice(),\r\n-            vnode.text,\r\n-            vnode.elm,\r\n-            vnode.context,\r\n-            vnode.componentOptions,\r\n-            vnode.asyncFactory\r\n-        );\r\n-        cloned.ns = vnode.ns;\r\n-        cloned.isStatic = vnode.isStatic;\r\n-        cloned.key = vnode.key;\r\n-        cloned.isComment = vnode.isComment;\r\n-        cloned.fnContext = vnode.fnContext;\r\n-        cloned.fnOptions = vnode.fnOptions;\r\n-        cloned.fnScopeId = vnode.fnScopeId;\r\n-        cloned.asyncMeta = vnode.asyncMeta;\r\n-        cloned.isCloned = true;\r\n-        return cloned\r\n-    }\r\n-\r\n-  \u002F*\r\n-   * not type checking this file because flow doesn't play well with\r\n-   * dynamically accessing methods on Array prototype\r\n-   *\u002F\r\n-\r\n-    var arrayProto = Array.prototype;\r\n-    var arrayMethods = Object.create(arrayProto);\r\n-\r\n-    var methodsToPatch = [\r\n-        'push',\r\n-        'pop',\r\n-        'shift',\r\n-        'unshift',\r\n-        'splice',\r\n-        'sort',\r\n-        'reverse'\r\n-    ];\r\n-\r\n-    \u002F**\r\n-     * Intercept mutating methods and emit events\r\n-     *\u002F\r\n-    methodsToPatch.forEach(function (method) {\r\n-        \u002F\u002F cache original method\r\n-        var original = arrayProto[method];\r\n-        def(arrayMethods, method, function mutator () {\r\n-            var args = [], len = arguments.length;\r\n-            while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-            var result = original.apply(this, args);\r\n-            var ob = this.__ob__;\r\n-            var inserted;\r\n-            switch (method) {\r\n-                case 'push':\r\n-                case 'unshift':\r\n-                    inserted = args;\r\n-                    break\r\n-                case 'splice':\r\n-                    inserted = args.slice(2);\r\n-                    break\r\n-            }\r\n-            if (inserted) { ob.observeArray(inserted); }\r\n-            \u002F\u002F notify change\r\n-            ob.dep.notify();\r\n-            return result\r\n-        });\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\r\n-\r\n-    \u002F**\r\n-     * In some cases we may want to disable observation inside a component's\r\n-     * update computation.\r\n-     *\u002F\r\n-    var shouldObserve = true;\r\n-\r\n-    function toggleObserving (value) {\r\n-        shouldObserve = value;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Observer class that is attached to each observed\r\n-     * object. Once attached, the observer converts the target\r\n-     * object's property keys into getter\u002Fsetters that\r\n-     * collect dependencies and dispatch updates.\r\n-     *\u002F\r\n-    var Observer = function Observer (value) {\r\n-        this.value = value;\r\n-        this.dep = new Dep();\r\n-        this.vmCount = 0;\r\n-        def(value, '__ob__', this);\r\n-        if (Array.isArray(value)) {\r\n-            if (hasProto) {\r\n-                protoAugment(value, arrayMethods);\r\n-            } else {\r\n-                copyAugment(value, arrayMethods, arrayKeys);\r\n-            }\r\n-            this.observeArray(value);\r\n-        } else {\r\n-            this.walk(value);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Walk through all properties and convert them into\r\n-     * getter\u002Fsetters. This method should only be called when\r\n-     * value type is Object.\r\n-     *\u002F\r\n-    Observer.prototype.walk = function walk (obj) {\r\n-        var keys = Object.keys(obj);\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            defineReactive$$1(obj, keys[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Observe a list of Array items.\r\n-     *\u002F\r\n-    Observer.prototype.observeArray = function observeArray (items) {\r\n-        for (var i = 0, l = items.length; i \u003C l; i++) {\r\n-            observe(items[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F helpers\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by intercepting\r\n-     * the prototype chain using __proto__\r\n-     *\u002F\r\n-    function protoAugment (target, src) {\r\n-      \u002F* eslint-disable no-proto *\u002F\r\n-        target.__proto__ = src;\r\n-      \u002F* eslint-enable no-proto *\u002F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by defining\r\n-     * hidden properties.\r\n-     *\u002F\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function copyAugment (target, src, keys) {\r\n-        for (var i = 0, l = keys.length; i \u003C l; i++) {\r\n-            var key = keys[i];\r\n-            def(target, key, src[key]);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Attempt to create an observer instance for a value,\r\n-     * returns the new observer if successfully observed,\r\n-     * or the existing observer if the value already has one.\r\n-     *\u002F\r\n-    function observe (value, asRootData) {\r\n-        if (!isObject(value) || value instanceof VNode) {\r\n-            return\r\n-        }\r\n-        var ob;\r\n-        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\r\n-            ob = value.__ob__;\r\n-        } else if (\r\n-            shouldObserve &&\r\n-            !isServerRendering() &&\r\n-            (Array.isArray(value) || isPlainObject(value)) &&\r\n-            Object.isExtensible(value) &&\r\n-            !value._isVue\r\n-        ) {\r\n-            ob = new Observer(value);\r\n-        }\r\n-        if (asRootData && ob) {\r\n-            ob.vmCount++;\r\n-        }\r\n-        return ob\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a reactive property on an Object.\r\n-     *\u002F\r\n-    function defineReactive$$1 (\r\n-        obj,\r\n-        key,\r\n-        val,\r\n-        customSetter,\r\n-        shallow\r\n-    ) {\r\n-        var dep = new Dep();\r\n-\r\n-        var property = Object.getOwnPropertyDescriptor(obj, key);\r\n-        if (property && property.configurable === false) {\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F cater for pre-defined getter\u002Fsetters\r\n-        var getter = property && property.get;\r\n-        var setter = property && property.set;\r\n-        if ((!getter || setter) && arguments.length === 2) {\r\n-            val = obj[key];\r\n-        }\r\n-\r\n-        var childOb = !shallow && observe(val);\r\n-        Object.defineProperty(obj, key, {\r\n-            enumerable: true,\r\n-            configurable: true,\r\n-            get: function reactiveGetter () {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-                if (Dep.target) {\r\n-                    dep.depend();\r\n-                    if (childOb) {\r\n-                        childOb.dep.depend();\r\n-                        if (Array.isArray(value)) {\r\n-                            dependArray(value);\r\n-                        }\r\n-                    }\r\n-                }\r\n-                return value\r\n-            },\r\n-            set: function reactiveSetter (newVal) {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-              \u002F* eslint-disable no-self-compare *\u002F\r\n-                if (newVal === value || (newVal !== newVal && value !== value)) {\r\n-                    return\r\n-                }\r\n-              \u002F* eslint-enable no-self-compare *\u002F\r\n-                if (customSetter) {\r\n-                    customSetter();\r\n-                }\r\n-                \u002F\u002F #7981: for accessor properties without setter\r\n-                if (getter && !setter) { return }\r\n-                if (setter) {\r\n-                    setter.call(obj, newVal);\r\n-                } else {\r\n-                    val = newVal;\r\n-                }\r\n-                childOb = !shallow && observe(newVal);\r\n-                dep.notify();\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Set a property on an object. Adds the new property and\r\n-     * triggers change notification if the property doesn't\r\n-     * already exist.\r\n-     *\u002F\r\n-    function set (target, key, val) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.length = Math.max(target.length, key);\r\n-            target.splice(key, 1, val);\r\n-            return val\r\n-        }\r\n-        if (key in target && !(key in Object.prototype)) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n-                'at runtime - declare it upfront in the data option.'\r\n-            );\r\n-            return val\r\n-        }\r\n-        if (!ob) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        defineReactive$$1(ob.value, key, val);\r\n-        ob.dep.notify();\r\n-        return val\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Delete a property and trigger change if necessary.\r\n-     *\u002F\r\n-    function del (target, key) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.splice(key, 1);\r\n-            return\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid deleting properties on a Vue instance or its root $data ' +\r\n-                '- just set it to null.'\r\n-            );\r\n-            return\r\n-        }\r\n-        if (!hasOwn(target, key)) {\r\n-            return\r\n-        }\r\n-        delete target[key];\r\n-        if (!ob) {\r\n-            return\r\n-        }\r\n-        ob.dep.notify();\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Collect dependencies on array elements when the array is touched, since\r\n-     * we cannot intercept array element access like property getters.\r\n-     *\u002F\r\n-    function dependArray (value) {\r\n-        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\r\n-            e = value[i];\r\n-            e && e.__ob__ && e.__ob__.dep.depend();\r\n-            if (Array.isArray(e)) {\r\n-                dependArray(e);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Option overwriting strategies are functions that handle\r\n-     * how to merge a parent option value and a child option\r\n-     * value into the final value.\r\n-     *\u002F\r\n-    var strats = config.optionMergeStrategies;\r\n-\r\n-    \u002F**\r\n-     * Options with restrictions\r\n-     *\u002F\r\n-    {\r\n-        strats.el = strats.propsData = function (parent, child, vm, key) {\r\n-            if (!vm) {\r\n-                warn(\r\n-                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\r\n-                    'creation with the `new` keyword.'\r\n-                );\r\n-            }\r\n-            return defaultStrat(parent, child)\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Helper that recursively merges two data objects together.\r\n-     *\u002F\r\n-    function mergeData (to, from) {\r\n-        if (!from) { return to }\r\n-        var key, toVal, fromVal;\r\n-\r\n-        var keys = hasSymbol\r\n-            ? Reflect.ownKeys(from)\r\n-            : Object.keys(from);\r\n-\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            key = keys[i];\r\n-            \u002F\u002F in case the object is already observed...\r\n-            if (key === '__ob__') { continue }\r\n-            toVal = to[key];\r\n-            fromVal = from[key];\r\n-            if (!hasOwn(to, key)) {\r\n-                set(to, key, fromVal);\r\n-            } else if (\r\n-                toVal !== fromVal &&\r\n-                isPlainObject(toVal) &&\r\n-                isPlainObject(fromVal)\r\n-            ) {\r\n-                mergeData(toVal, fromVal);\r\n-            }\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Data\r\n-     *\u002F\r\n-    function mergeDataOrFn (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            \u002F\u002F in a Vue.extend merge, both should be functions\r\n-            if (!childVal) {\r\n-                return parentVal\r\n-            }\r\n-            if (!parentVal) {\r\n-                return childVal\r\n-            }\r\n-            \u002F\u002F when parentVal & childVal are both present,\r\n-            \u002F\u002F we need to return a function that returns the\r\n-            \u002F\u002F merged result of both functions... no need to\r\n-            \u002F\u002F check if parentVal is a function here because\r\n-            \u002F\u002F it has to be a function to pass previous merges.\r\n-            return function mergedDataFn () {\r\n-                return mergeData(\r\n-                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\r\n-                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\r\n-                )\r\n-            }\r\n-        } else {\r\n-            return function mergedInstanceDataFn () {\r\n-                \u002F\u002F instance merge\r\n-                var instanceData = typeof childVal === 'function'\r\n-                    ? childVal.call(vm, vm)\r\n-                    : childVal;\r\n-                var defaultData = typeof parentVal === 'function'\r\n-                    ? parentVal.call(vm, vm)\r\n-                    : parentVal;\r\n-                if (instanceData) {\r\n-                    return mergeData(instanceData, defaultData)\r\n-                } else {\r\n-                    return defaultData\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    strats.data = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            if (childVal && typeof childVal !== 'function') {\r\n-                warn(\r\n-                    'The \"data\" option should be a function ' +\r\n-                    'that returns a per-instance value in component ' +\r\n-                    'definitions.',\r\n-                    vm\r\n-                );\r\n-\r\n-                return parentVal\r\n-            }\r\n-            return mergeDataOrFn(parentVal, childVal)\r\n-        }\r\n-\r\n-        return mergeDataOrFn(parentVal, childVal, vm)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Hooks and props are merged as arrays.\r\n-     *\u002F\r\n-    function mergeHook (\r\n-        parentVal,\r\n-        childVal\r\n-    ) {\r\n-        var res = childVal\r\n-            ? parentVal\r\n-                ? parentVal.concat(childVal)\r\n-                : Array.isArray(childVal)\r\n-                    ? childVal\r\n-                    : [childVal]\r\n-            : parentVal;\r\n-        return res\r\n-            ? dedupeHooks(res)\r\n-            : res\r\n-    }\r\n-\r\n-    function dedupeHooks (hooks) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C hooks.length; i++) {\r\n-            if (res.indexOf(hooks[i]) === -1) {\r\n-                res.push(hooks[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    LIFECYCLE_HOOKS.forEach(function (hook) {\r\n-        strats[hook] = mergeHook;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Assets\r\n-     *\r\n-     * When a vm is present (instance creation), we need to do\r\n-     * a three-way merge between constructor options, instance\r\n-     * options and parent options.\r\n-     *\u002F\r\n-    function mergeAssets (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        var res = Object.create(parentVal || null);\r\n-        if (childVal) {\r\n-            assertObjectType(key, childVal, vm);\r\n-            return extend(res, childVal)\r\n-        } else {\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    ASSET_TYPES.forEach(function (type) {\r\n-        strats[type + 's'] = mergeAssets;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Watchers.\r\n-     *\r\n-     * Watchers hashes should not overwrite one\r\n-     * another, so we merge them as arrays.\r\n-     *\u002F\r\n-    strats.watch = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        \u002F\u002F work around Firefox's Object.prototype.watch...\r\n-        if (parentVal === nativeWatch) { parentVal = undefined; }\r\n-        if (childVal === nativeWatch) { childVal = undefined; }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!childVal) { return Object.create(parentVal || null) }\r\n-        {\r\n-            assertObjectType(key, childVal, vm);\r\n-        }\r\n-        if (!parentVal) { return childVal }\r\n-        var ret = {};\r\n-        extend(ret, parentVal);\r\n-        for (var key$1 in childVal) {\r\n-            var parent = ret[key$1];\r\n-            var child = childVal[key$1];\r\n-            if (parent && !Array.isArray(parent)) {\r\n-                parent = [parent];\r\n-            }\r\n-            ret[key$1] = parent\r\n-                ? parent.concat(child)\r\n-                : Array.isArray(child) ? child : [child];\r\n-        }\r\n-        return ret\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Other object hashes.\r\n-     *\u002F\r\n-    strats.props =\r\n-        strats.methods =\r\n-            strats.inject =\r\n-                strats.computed = function (\r\n-                    parentVal,\r\n-                    childVal,\r\n-                    vm,\r\n-                    key\r\n-                ) {\r\n-                    if (childVal && \"development\" !== 'production') {\r\n-                        assertObjectType(key, childVal, vm);\r\n-                    }\r\n-                    if (!parentVal) { return childVal }\r\n-                    var ret = Object.create(null);\r\n-                    extend(ret, parentVal);\r\n-                    if (childVal) { extend(ret, childVal); }\r\n-                    return ret\r\n-                };\r\n-    strats.provide = mergeDataOrFn;\r\n-\r\n-    \u002F**\r\n-     * Default strategy.\r\n-     *\u002F\r\n-    var defaultStrat = function (parentVal, childVal) {\r\n-        return childVal === undefined\r\n-            ? parentVal\r\n-            : childVal\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Validate component names\r\n-     *\u002F\r\n-    function checkComponents (options) {\r\n-        for (var key in options.components) {\r\n-            validateComponentName(key);\r\n-        }\r\n-    }\r\n-\r\n-    function validateComponentName (name) {\r\n-        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\r\n-            warn(\r\n-                'Invalid component name: \"' + name + '\". Component names ' +\r\n-                'should conform to valid custom element name in html5 specification.'\r\n-            );\r\n-        }\r\n-        if (isBuiltInTag(name) || config.isReservedTag(name)) {\r\n-            warn(\r\n-                'Do not use built-in or reserved HTML elements as component ' +\r\n-                'id: ' + name\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure all props option syntax are normalized into the\r\n-     * Object-based format.\r\n-     *\u002F\r\n-    function normalizeProps (options, vm) {\r\n-        var props = options.props;\r\n-        if (!props) { return }\r\n-        var res = {};\r\n-        var i, val, name;\r\n-        if (Array.isArray(props)) {\r\n-            i = props.length;\r\n-            while (i--) {\r\n-                val = props[i];\r\n-                if (typeof val === 'string') {\r\n-                    name = camelize(val);\r\n-                    res[name] = { type: null };\r\n-                } else {\r\n-                    warn('props must be strings when using array syntax.');\r\n-                }\r\n-            }\r\n-        } else if (isPlainObject(props)) {\r\n-            for (var key in props) {\r\n-                val = props[key];\r\n-                name = camelize(key);\r\n-                res[name] = isPlainObject(val)\r\n-                    ? val\r\n-                    : { type: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(props)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-        options.props = res;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize all injections into Object-based format\r\n-     *\u002F\r\n-    function normalizeInject (options, vm) {\r\n-        var inject = options.inject;\r\n-        if (!inject) { return }\r\n-        var normalized = options.inject = {};\r\n-        if (Array.isArray(inject)) {\r\n-            for (var i = 0; i \u003C inject.length; i++) {\r\n-                normalized[inject[i]] = { from: inject[i] };\r\n-            }\r\n-        } else if (isPlainObject(inject)) {\r\n-            for (var key in inject) {\r\n-                var val = inject[key];\r\n-                normalized[key] = isPlainObject(val)\r\n-                    ? extend({ from: key }, val)\r\n-                    : { from: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(inject)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize raw function directives into object format.\r\n-     *\u002F\r\n-    function normalizeDirectives (options) {\r\n-        var dirs = options.directives;\r\n-        if (dirs) {\r\n-            for (var key in dirs) {\r\n-                var def$$1 = dirs[key];\r\n-                if (typeof def$$1 === 'function') {\r\n-                    dirs[key] = { bind: def$$1, update: def$$1 };\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function assertObjectType (name, value, vm) {\r\n-        if (!isPlainObject(value)) {\r\n-            warn(\r\n-                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\r\n-                \"but got \" + (toRawType(value)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge two option objects into a new one.\r\n-     * Core utility used in both instantiation and inheritance.\r\n-     *\u002F\r\n-    function mergeOptions (\r\n-        parent,\r\n-        child,\r\n-        vm\r\n-    ) {\r\n-        {\r\n-            checkComponents(child);\r\n-        }\r\n-\r\n-        if (typeof child === 'function') {\r\n-            child = child.options;\r\n-        }\r\n-\r\n-        normalizeProps(child, vm);\r\n-        normalizeInject(child, vm);\r\n-        normalizeDirectives(child);\r\n-\r\n-        \u002F\u002F Apply extends and mixins on the child options,\r\n-        \u002F\u002F but only if it is a raw options object that isn't\r\n-        \u002F\u002F the result of another mergeOptions call.\r\n-        \u002F\u002F Only merged options has the _base property.\r\n-        if (!child._base) {\r\n-            if (child.extends) {\r\n-                parent = mergeOptions(parent, child.extends, vm);\r\n-            }\r\n-            if (child.mixins) {\r\n-                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\r\n-                    parent = mergeOptions(parent, child.mixins[i], vm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var options = {};\r\n-        var key;\r\n-        for (key in parent) {\r\n-            mergeField(key);\r\n-        }\r\n-        for (key in child) {\r\n-            if (!hasOwn(parent, key)) {\r\n-                mergeField(key);\r\n-            }\r\n-        }\r\n-        function mergeField (key) {\r\n-            var strat = strats[key] || defaultStrat;\r\n-            options[key] = strat(parent[key], child[key], vm, key);\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Resolve an asset.\r\n-     * This function is used because child instances need access\r\n-     * to assets defined in its ancestor chain.\r\n-     *\u002F\r\n-    function resolveAsset (\r\n-        options,\r\n-        type,\r\n-        id,\r\n-        warnMissing\r\n-    ) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (typeof id !== 'string') {\r\n-            return\r\n-        }\r\n-        var assets = options[type];\r\n-        \u002F\u002F check local registration variations first\r\n-        if (hasOwn(assets, id)) { return assets[id] }\r\n-        var camelizedId = camelize(id);\r\n-        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\r\n-        var PascalCaseId = capitalize(camelizedId);\r\n-        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\r\n-        \u002F\u002F fallback to prototype chain\r\n-        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\r\n-        if (warnMissing && !res) {\r\n-            warn(\r\n-                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\r\n-                options\r\n-            );\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function validateProp (\r\n-        key,\r\n-        propOptions,\r\n-        propsData,\r\n-        vm\r\n-    ) {\r\n-        var prop = propOptions[key];\r\n-        var absent = !hasOwn(propsData, key);\r\n-        var value = propsData[key];\r\n-        \u002F\u002F boolean casting\r\n-        var booleanIndex = getTypeIndex(Boolean, prop.type);\r\n-        if (booleanIndex > -1) {\r\n-            if (absent && !hasOwn(prop, 'default')) {\r\n-                value = false;\r\n-            } else if (value === '' || value === hyphenate(key)) {\r\n-                \u002F\u002F only cast empty string \u002F same name to boolean if\r\n-                \u002F\u002F boolean has higher priority\r\n-                var stringIndex = getTypeIndex(String, prop.type);\r\n-                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\r\n-                    value = true;\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F check default value\r\n-        if (value === undefined) {\r\n-            value = getPropDefaultValue(vm, prop, key);\r\n-            \u002F\u002F since the default value is a fresh copy,\r\n-            \u002F\u002F make sure to observe it.\r\n-            var prevShouldObserve = shouldObserve;\r\n-            toggleObserving(true);\r\n-            observe(value);\r\n-            toggleObserving(prevShouldObserve);\r\n-        }\r\n-        {\r\n-            assertProp(prop, key, value, vm, absent);\r\n-        }\r\n-        return value\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the default value of a prop.\r\n-     *\u002F\r\n-    function getPropDefaultValue (vm, prop, key) {\r\n-        \u002F\u002F no default, return undefined\r\n-        if (!hasOwn(prop, 'default')) {\r\n-            return undefined\r\n-        }\r\n-        var def = prop.default;\r\n-        \u002F\u002F warn against non-factory defaults for Object & Array\r\n-        if (isObject(def)) {\r\n-            warn(\r\n-                'Invalid default value for prop \"' + key + '\": ' +\r\n-                'Props with type Object\u002FArray must use a factory function ' +\r\n-                'to return the default value.',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F the raw prop value was also undefined from previous render,\r\n-        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\r\n-        if (vm && vm.$options.propsData &&\r\n-            vm.$options.propsData[key] === undefined &&\r\n-            vm._props[key] !== undefined\r\n-        ) {\r\n-            return vm._props[key]\r\n-        }\r\n-        \u002F\u002F call factory function for non-Function types\r\n-        \u002F\u002F a value is Function if its prototype is function even across different execution context\r\n-        return typeof def === 'function' && getType(prop.type) !== 'Function'\r\n-            ? def.call(vm)\r\n-            : def\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Assert whether a prop is valid.\r\n-     *\u002F\r\n-    function assertProp (\r\n-        prop,\r\n-        name,\r\n-        value,\r\n-        vm,\r\n-        absent\r\n-    ) {\r\n-        if (prop.required && absent) {\r\n-            warn(\r\n-                'Missing required prop: \"' + name + '\"',\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        if (value == null && !prop.required) {\r\n-            return\r\n-        }\r\n-        var type = prop.type;\r\n-        var valid = !type || type === true;\r\n-        var expectedTypes = [];\r\n-        if (type) {\r\n-            if (!Array.isArray(type)) {\r\n-                type = [type];\r\n-            }\r\n-            for (var i = 0; i \u003C type.length && !valid; i++) {\r\n-                var assertedType = assertType(value, type[i]);\r\n-                expectedTypes.push(assertedType.expectedType || '');\r\n-                valid = assertedType.valid;\r\n-            }\r\n-        }\r\n-\r\n-        if (!valid) {\r\n-            warn(\r\n-                getInvalidTypeMessage(name, value, expectedTypes),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var validator = prop.validator;\r\n-        if (validator) {\r\n-            if (!validator(value)) {\r\n-                warn(\r\n-                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\r\n-\r\n-    function assertType (value, type) {\r\n-        var valid;\r\n-        var expectedType = getType(type);\r\n-        if (simpleCheckRE.test(expectedType)) {\r\n-            var t = typeof value;\r\n-            valid = t === expectedType.toLowerCase();\r\n-            \u002F\u002F for primitive wrapper objects\r\n-            if (!valid && t === 'object') {\r\n-                valid = value instanceof type;\r\n-            }\r\n-        } else if (expectedType === 'Object') {\r\n-            valid = isPlainObject(value);\r\n-        } else if (expectedType === 'Array') {\r\n-            valid = Array.isArray(value);\r\n-        } else {\r\n-            valid = value instanceof type;\r\n-        }\r\n-        return {\r\n-            valid: valid,\r\n-            expectedType: expectedType\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Use function string name to check built-in types,\r\n-     * because a simple equality check will fail when running\r\n-     * across different vms \u002F iframes.\r\n-     *\u002F\r\n-    function getType (fn) {\r\n-        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\r\n-        return match ? match[1] : ''\r\n-    }\r\n-\r\n-    function isSameType (a, b) {\r\n-        return getType(a) === getType(b)\r\n-    }\r\n-\r\n-    function getTypeIndex (type, expectedTypes) {\r\n-        if (!Array.isArray(expectedTypes)) {\r\n-            return isSameType(expectedTypes, type) ? 0 : -1\r\n-        }\r\n-        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\r\n-            if (isSameType(expectedTypes[i], type)) {\r\n-                return i\r\n-            }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    function getInvalidTypeMessage (name, value, expectedTypes) {\r\n-        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\r\n-            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\r\n-        var expectedType = expectedTypes[0];\r\n-        var receivedType = toRawType(value);\r\n-        var expectedValue = styleValue(value, expectedType);\r\n-        var receivedValue = styleValue(value, receivedType);\r\n-        \u002F\u002F check if we need to specify expected value\r\n-        if (expectedTypes.length === 1 &&\r\n-            isExplicable(expectedType) &&\r\n-            !isBoolean(expectedType, receivedType)) {\r\n-            message += \" with value \" + expectedValue;\r\n-        }\r\n-        message += \", got \" + receivedType + \" \";\r\n-        \u002F\u002F check if we need to specify received value\r\n-        if (isExplicable(receivedType)) {\r\n-            message += \"with value \" + receivedValue + \".\";\r\n-        }\r\n-        return message\r\n-    }\r\n-\r\n-    function styleValue (value, type) {\r\n-        if (type === 'String') {\r\n-            return (\"\\\"\" + value + \"\\\"\")\r\n-        } else if (type === 'Number') {\r\n-            return (\"\" + (Number(value)))\r\n-        } else {\r\n-            return (\"\" + value)\r\n-        }\r\n-    }\r\n-\r\n-    function isExplicable (value) {\r\n-        var explicitTypes = ['string', 'number', 'boolean'];\r\n-        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\r\n-    }\r\n-\r\n-    function isBoolean () {\r\n-        var args = [], len = arguments.length;\r\n-        while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function handleError (err, vm, info) {\r\n-        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\r\n-        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\r\n-        pushTarget();\r\n-        try {\r\n-            if (vm) {\r\n-                var cur = vm;\r\n-                while ((cur = cur.$parent)) {\r\n-                    var hooks = cur.$options.errorCaptured;\r\n-                    if (hooks) {\r\n-                        for (var i = 0; i \u003C hooks.length; i++) {\r\n-                            try {\r\n-                                var capture = hooks[i].call(cur, err, vm, info) === false;\r\n-                                if (capture) { return }\r\n-                            } catch (e) {\r\n-                                globalHandleError(e, cur, 'errorCaptured hook');\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            globalHandleError(err, vm, info);\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    function invokeWithErrorHandling (\r\n-        handler,\r\n-        context,\r\n-        args,\r\n-        vm,\r\n-        info\r\n-    ) {\r\n-        var res;\r\n-        try {\r\n-            res = args ? handler.apply(context, args) : handler.call(context);\r\n-            if (res && !res._isVue && isPromise(res) && !res._handled) {\r\n-                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\r\n-                \u002F\u002F issue #9511\r\n-                \u002F\u002F avoid catch triggering multiple times when nested calls\r\n-                res._handled = true;\r\n-            }\r\n-        } catch (e) {\r\n-            handleError(e, vm, info);\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function globalHandleError (err, vm, info) {\r\n-        if (config.errorHandler) {\r\n-            try {\r\n-                return config.errorHandler.call(null, err, vm, info)\r\n-            } catch (e) {\r\n-                \u002F\u002F if the user intentionally throws the original error in the handler,\r\n-                \u002F\u002F do not log it twice\r\n-                if (e !== err) {\r\n-                    logError(e, null, 'config.errorHandler');\r\n-                }\r\n-            }\r\n-        }\r\n-        logError(err, vm, info);\r\n-    }\r\n-\r\n-    function logError (err, vm, info) {\r\n-        {\r\n-            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\r\n-            console.error(err);\r\n-        } else {\r\n-            throw err\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUsingMicroTask = false;\r\n-\r\n-    var callbacks = [];\r\n-    var pending = false;\r\n-\r\n-    function flushCallbacks () {\r\n-        pending = false;\r\n-        var copies = callbacks.slice(0);\r\n-        callbacks.length = 0;\r\n-        for (var i = 0; i \u003C copies.length; i++) {\r\n-            copies[i]();\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F Here we have async deferring wrappers using microtasks.\r\n-    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\r\n-    \u002F\u002F However, it has subtle problems when state is changed right before repaint\r\n-    \u002F\u002F (e.g. #6813, out-in transitions).\r\n-    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\r\n-    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\r\n-    \u002F\u002F So we now use microtasks everywhere, again.\r\n-    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\r\n-    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\r\n-    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\r\n-    \u002F\u002F or even between bubbling of the same event (#6566).\r\n-    var timerFunc;\r\n-\r\n-    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\r\n-    \u002F\u002F via either native Promise.then or MutationObserver.\r\n-    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\r\n-    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\r\n-    \u002F\u002F completely stops working after triggering a few times... so, if native\r\n-    \u002F\u002F Promise is available, we will use it:\r\n-  \u002F* istanbul ignore next, $flow-disable-line *\u002F\r\n-    if (typeof Promise !== 'undefined' && isNative(Promise)) {\r\n-        var p = Promise.resolve();\r\n-        timerFunc = function () {\r\n-            p.then(flushCallbacks);\r\n-            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\r\n-            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\r\n-            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\r\n-            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\r\n-            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\r\n-            if (isIOS) { setTimeout(noop); }\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\r\n-            isNative(MutationObserver) ||\r\n-            \u002F\u002F PhantomJS and iOS 7.x\r\n-            MutationObserver.toString() === '[object MutationObserverConstructor]'\r\n-        )) {\r\n-        \u002F\u002F Use MutationObserver where native Promise is not available,\r\n-        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\r\n-        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\r\n-        var counter = 1;\r\n-        var observer = new MutationObserver(flushCallbacks);\r\n-        var textNode = document.createTextNode(String(counter));\r\n-        observer.observe(textNode, {\r\n-            characterData: true\r\n-        });\r\n-        timerFunc = function () {\r\n-            counter = (counter + 1) % 2;\r\n-            textNode.data = String(counter);\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\r\n-        \u002F\u002F Fallback to setImmediate.\r\n-        \u002F\u002F Techinically it leverages the (macro) task queue,\r\n-        \u002F\u002F but it is still a better choice than setTimeout.\r\n-        timerFunc = function () {\r\n-            setImmediate(flushCallbacks);\r\n-        };\r\n-    } else {\r\n-        \u002F\u002F Fallback to setTimeout.\r\n-        timerFunc = function () {\r\n-            setTimeout(flushCallbacks, 0);\r\n-        };\r\n-    }\r\n-\r\n-    function nextTick (cb, ctx) {\r\n-        var _resolve;\r\n-        callbacks.push(function () {\r\n-            if (cb) {\r\n-                try {\r\n-                    cb.call(ctx);\r\n-                } catch (e) {\r\n-                    handleError(e, ctx, 'nextTick');\r\n-                }\r\n-            } else if (_resolve) {\r\n-                _resolve(ctx);\r\n-            }\r\n-        });\r\n-        if (!pending) {\r\n-            pending = true;\r\n-            timerFunc();\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        if (!cb && typeof Promise !== 'undefined') {\r\n-            return new Promise(function (resolve) {\r\n-                _resolve = resolve;\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var mark;\r\n-    var measure;\r\n-\r\n-    {\r\n-        var perf = inBrowser && window.performance;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            perf &&\r\n-            perf.mark &&\r\n-            perf.measure &&\r\n-            perf.clearMarks &&\r\n-            perf.clearMeasures\r\n-        ) {\r\n-            mark = function (tag) { return perf.mark(tag); };\r\n-            measure = function (name, startTag, endTag) {\r\n-                perf.measure(name, startTag, endTag);\r\n-                perf.clearMarks(startTag);\r\n-                perf.clearMarks(endTag);\r\n-                \u002F\u002F perf.clearMeasures(name)\r\n-            };\r\n-        }\r\n-    }\r\n-\r\n-  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\r\n-\r\n-    var initProxy;\r\n-\r\n-    {\r\n-        var allowedGlobals = makeMap(\r\n-            'Infinity,undefined,NaN,isFinite,isNaN,' +\r\n-            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\r\n-            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\r\n-            'require' \u002F\u002F for Webpack\u002FBrowserify\r\n-        );\r\n-\r\n-        var warnNonPresent = function (target, key) {\r\n-            warn(\r\n-                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\r\n-                'referenced during render. Make sure that this property is reactive, ' +\r\n-                'either in the data option, or for class-based components, by ' +\r\n-                'initializing the property. ' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var warnReservedPrefix = function (target, key) {\r\n-            warn(\r\n-                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\r\n-                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\r\n-                'prevent conflicts with Vue internals' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var hasProxy =\r\n-            typeof Proxy !== 'undefined' && isNative(Proxy);\r\n-\r\n-        if (hasProxy) {\r\n-            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\r\n-            config.keyCodes = new Proxy(config.keyCodes, {\r\n-                set: function set (target, key, value) {\r\n-                    if (isBuiltInModifier(key)) {\r\n-                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\r\n-                        return false\r\n-                    } else {\r\n-                        target[key] = value;\r\n-                        return true\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        var hasHandler = {\r\n-            has: function has (target, key) {\r\n-                var has = key in target;\r\n-                var isAllowed = allowedGlobals(key) ||\r\n-                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\r\n-                if (!has && !isAllowed) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return has || !isAllowed\r\n-            }\r\n-        };\r\n-\r\n-        var getHandler = {\r\n-            get: function get (target, key) {\r\n-                if (typeof key === 'string' && !(key in target)) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return target[key]\r\n-            }\r\n-        };\r\n-\r\n-        initProxy = function initProxy (vm) {\r\n-            if (hasProxy) {\r\n-                \u002F\u002F determine which proxy handler to use\r\n-                var options = vm.$options;\r\n-                var handlers = options.render && options.render._withStripped\r\n-                    ? getHandler\r\n-                    : hasHandler;\r\n-                vm._renderProxy = new Proxy(vm, handlers);\r\n-            } else {\r\n-                vm._renderProxy = vm;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var seenObjects = new _Set();\r\n-\r\n-    \u002F**\r\n-     * Recursively traverse an object to evoke all converted\r\n-     * getters, so that every nested property inside the object\r\n-     * is collected as a \"deep\" dependency.\r\n-     *\u002F\r\n-    function traverse (val) {\r\n-        _traverse(val, seenObjects);\r\n-        seenObjects.clear();\r\n-    }\r\n-\r\n-    function _traverse (val, seen) {\r\n-        var i, keys;\r\n-        var isA = Array.isArray(val);\r\n-        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\r\n-            return\r\n-        }\r\n-        if (val.__ob__) {\r\n-            var depId = val.__ob__.dep.id;\r\n-            if (seen.has(depId)) {\r\n-                return\r\n-            }\r\n-            seen.add(depId);\r\n-        }\r\n-        if (isA) {\r\n-            i = val.length;\r\n-            while (i--) { _traverse(val[i], seen); }\r\n-        } else {\r\n-            keys = Object.keys(val);\r\n-            i = keys.length;\r\n-            while (i--) { _traverse(val[keys[i]], seen); }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var normalizeEvent = cached(function (name) {\r\n-        var passive = name.charAt(0) === '&';\r\n-        name = passive ? name.slice(1) : name;\r\n-        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\r\n-        name = once$$1 ? name.slice(1) : name;\r\n-        var capture = name.charAt(0) === '!';\r\n-        name = capture ? name.slice(1) : name;\r\n-        return {\r\n-            name: name,\r\n-            once: once$$1,\r\n-            capture: capture,\r\n-            passive: passive\r\n-        }\r\n-    });\r\n-\r\n-    function createFnInvoker (fns, vm) {\r\n-        function invoker () {\r\n-            var arguments$1 = arguments;\r\n-\r\n-            var fns = invoker.fns;\r\n-            if (Array.isArray(fns)) {\r\n-                var cloned = fns.slice();\r\n-                for (var i = 0; i \u003C cloned.length; i++) {\r\n-                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F return handler return value for single handlers\r\n-                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\r\n-            }\r\n-        }\r\n-        invoker.fns = fns;\r\n-        return invoker\r\n-    }\r\n-\r\n-    function updateListeners (\r\n-        on,\r\n-        oldOn,\r\n-        add,\r\n-        remove$$1,\r\n-        createOnceHandler,\r\n-        vm\r\n-    ) {\r\n-        var name, def$$1, cur, old, event;\r\n-        for (name in on) {\r\n-            def$$1 = cur = on[name];\r\n-            old = oldOn[name];\r\n-            event = normalizeEvent(name);\r\n-            if (isUndef(cur)) {\r\n-                warn(\r\n-                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\r\n-                    vm\r\n-                );\r\n-            } else if (isUndef(old)) {\r\n-                if (isUndef(cur.fns)) {\r\n-                    cur = on[name] = createFnInvoker(cur, vm);\r\n-                }\r\n-                if (isTrue(event.once)) {\r\n-                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\r\n-                }\r\n-                add(event.name, cur, event.capture, event.passive, event.params);\r\n-            } else if (cur !== old) {\r\n-                old.fns = cur;\r\n-                on[name] = old;\r\n-            }\r\n-        }\r\n-        for (name in oldOn) {\r\n-            if (isUndef(on[name])) {\r\n-                event = normalizeEvent(name);\r\n-                remove$$1(event.name, oldOn[name], event.capture);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function mergeVNodeHook (def, hookKey, hook) {\r\n-        if (def instanceof VNode) {\r\n-            def = def.data.hook || (def.data.hook = {});\r\n-        }\r\n-        var invoker;\r\n-        var oldHook = def[hookKey];\r\n-\r\n-        function wrappedHook () {\r\n-            hook.apply(this, arguments);\r\n-            \u002F\u002F important: remove merged hook to ensure it's called only once\r\n-            \u002F\u002F and prevent memory leak\r\n-            remove(invoker.fns, wrappedHook);\r\n-        }\r\n-\r\n-        if (isUndef(oldHook)) {\r\n-            \u002F\u002F no existing hook\r\n-            invoker = createFnInvoker([wrappedHook]);\r\n-        } else {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\r\n-                \u002F\u002F already a merged invoker\r\n-                invoker = oldHook;\r\n-                invoker.fns.push(wrappedHook);\r\n-            } else {\r\n-                \u002F\u002F existing plain hook\r\n-                invoker = createFnInvoker([oldHook, wrappedHook]);\r\n-            }\r\n-        }\r\n-\r\n-        invoker.merged = true;\r\n-        def[hookKey] = invoker;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function extractPropsFromVNodeData (\r\n-        data,\r\n-        Ctor,\r\n-        tag\r\n-    ) {\r\n-        \u002F\u002F we are only extracting raw values here.\r\n-        \u002F\u002F validation and default values are handled in the child\r\n-        \u002F\u002F component itself.\r\n-        var propOptions = Ctor.options.props;\r\n-        if (isUndef(propOptions)) {\r\n-            return\r\n-        }\r\n-        var res = {};\r\n-        var attrs = data.attrs;\r\n-        var props = data.props;\r\n-        if (isDef(attrs) || isDef(props)) {\r\n-            for (var key in propOptions) {\r\n-                var altKey = hyphenate(key);\r\n-                {\r\n-                    var keyInLowerCase = key.toLowerCase();\r\n-                    if (\r\n-                        key !== keyInLowerCase &&\r\n-                        attrs && hasOwn(attrs, keyInLowerCase)\r\n-                    ) {\r\n-                        tip(\r\n-                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\r\n-                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\r\n-                            \" \\\"\" + key + \"\\\". \" +\r\n-                            \"Note that HTML attributes are case-insensitive and camelCased \" +\r\n-                            \"props need to use their kebab-case equivalents when using in-DOM \" +\r\n-                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\r\n-                        );\r\n-                    }\r\n-                }\r\n-                checkProp(res, props, key, altKey, true) ||\r\n-                checkProp(res, attrs, key, altKey, false);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkProp (\r\n-        res,\r\n-        hash,\r\n-        key,\r\n-        altKey,\r\n-        preserve\r\n-    ) {\r\n-        if (isDef(hash)) {\r\n-            if (hasOwn(hash, key)) {\r\n-                res[key] = hash[key];\r\n-                if (!preserve) {\r\n-                    delete hash[key];\r\n-                }\r\n-                return true\r\n-            } else if (hasOwn(hash, altKey)) {\r\n-                res[key] = hash[altKey];\r\n-                if (!preserve) {\r\n-                    delete hash[altKey];\r\n-                }\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F The template compiler attempts to minimize the need for normalization by\r\n-    \u002F\u002F statically analyzing the template at compile time.\r\n-    \u002F\u002F\r\n-    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\r\n-    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\r\n-    \u002F\u002F two cases where extra normalization is needed:\r\n-\r\n-    \u002F\u002F 1. When the children contains components - because a functional component\r\n-    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\r\n-    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\r\n-    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\r\n-    \u002F\u002F because functional components already normalize their own children.\r\n-    function simpleNormalizeChildren (children) {\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            if (Array.isArray(children[i])) {\r\n-                return Array.prototype.concat.apply([], children)\r\n-            }\r\n-        }\r\n-        return children\r\n-    }\r\n-\r\n-    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\r\n-    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\r\n-    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\r\n-    \u002F\u002F is needed to cater to all possible types of children values.\r\n-    function normalizeChildren (children) {\r\n-        return isPrimitive(children)\r\n-            ? [createTextVNode(children)]\r\n-            : Array.isArray(children)\r\n-                ? normalizeArrayChildren(children)\r\n-                : undefined\r\n-    }\r\n-\r\n-    function isTextNode (node) {\r\n-        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\r\n-    }\r\n-\r\n-    function normalizeArrayChildren (children, nestedIndex) {\r\n-        var res = [];\r\n-        var i, c, lastIndex, last;\r\n-        for (i = 0; i \u003C children.length; i++) {\r\n-            c = children[i];\r\n-            if (isUndef(c) || typeof c === 'boolean') { continue }\r\n-            lastIndex = res.length - 1;\r\n-            last = res[lastIndex];\r\n-            \u002F\u002F  nested\r\n-            if (Array.isArray(c)) {\r\n-                if (c.length > 0) {\r\n-                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    if (isTextNode(c[0]) && isTextNode(last)) {\r\n-                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\r\n-                        c.shift();\r\n-                    }\r\n-                    res.push.apply(res, c);\r\n-                }\r\n-            } else if (isPrimitive(c)) {\r\n-                if (isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    \u002F\u002F this is necessary for SSR hydration because text nodes are\r\n-                    \u002F\u002F essentially merged when rendered to HTML strings\r\n-                    res[lastIndex] = createTextVNode(last.text + c);\r\n-                } else if (c !== '') {\r\n-                    \u002F\u002F convert primitive to vnode\r\n-                    res.push(createTextVNode(c));\r\n-                }\r\n-            } else {\r\n-                if (isTextNode(c) && isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    res[lastIndex] = createTextVNode(last.text + c.text);\r\n-                } else {\r\n-                    \u002F\u002F default key for nested array children (likely generated by v-for)\r\n-                    if (isTrue(children._isVList) &&\r\n-                        isDef(c.tag) &&\r\n-                        isUndef(c.key) &&\r\n-                        isDef(nestedIndex)) {\r\n-                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\r\n-                    }\r\n-                    res.push(c);\r\n-                }\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initProvide (vm) {\r\n-        var provide = vm.$options.provide;\r\n-        if (provide) {\r\n-            vm._provided = typeof provide === 'function'\r\n-                ? provide.call(vm)\r\n-                : provide;\r\n-        }\r\n-    }\r\n-\r\n-    function initInjections (vm) {\r\n-        var result = resolveInject(vm.$options.inject, vm);\r\n-        if (result) {\r\n-            toggleObserving(false);\r\n-            Object.keys(result).forEach(function (key) {\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                {\r\n-                    defineReactive$$1(vm, key, result[key], function () {\r\n-                        warn(\r\n-                            \"Avoid mutating an injected value directly since the changes will be \" +\r\n-                            \"overwritten whenever the provided component re-renders. \" +\r\n-                            \"injection being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    });\r\n-                }\r\n-            });\r\n-            toggleObserving(true);\r\n-        }\r\n-    }\r\n-\r\n-    function resolveInject (inject, vm) {\r\n-        if (inject) {\r\n-            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\r\n-            var result = Object.create(null);\r\n-            var keys = hasSymbol\r\n-                ? Reflect.ownKeys(inject)\r\n-                : Object.keys(inject);\r\n-\r\n-            for (var i = 0; i \u003C keys.length; i++) {\r\n-                var key = keys[i];\r\n-                \u002F\u002F #6574 in case the inject object is observed...\r\n-                if (key === '__ob__') { continue }\r\n-                var provideKey = inject[key].from;\r\n-                var source = vm;\r\n-                while (source) {\r\n-                    if (source._provided && hasOwn(source._provided, provideKey)) {\r\n-                        result[key] = source._provided[provideKey];\r\n-                        break\r\n-                    }\r\n-                    source = source.$parent;\r\n-                }\r\n-                if (!source) {\r\n-                    if ('default' in inject[key]) {\r\n-                        var provideDefault = inject[key].default;\r\n-                        result[key] = typeof provideDefault === 'function'\r\n-                            ? provideDefault.call(vm)\r\n-                            : provideDefault;\r\n-                    } else {\r\n-                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\r\n-                    }\r\n-                }\r\n-            }\r\n-            return result\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving raw children VNodes into a slot object.\r\n-     *\u002F\r\n-    function resolveSlots (\r\n-        children,\r\n-        context\r\n-    ) {\r\n-        if (!children || !children.length) {\r\n-            return {}\r\n-        }\r\n-        var slots = {};\r\n-        for (var i = 0, l = children.length; i \u003C l; i++) {\r\n-            var child = children[i];\r\n-            var data = child.data;\r\n-            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\r\n-            if (data && data.attrs && data.attrs.slot) {\r\n-                delete data.attrs.slot;\r\n-            }\r\n-            \u002F\u002F named slots should only be respected if the vnode was rendered in the\r\n-            \u002F\u002F same context.\r\n-            if ((child.context === context || child.fnContext === context) &&\r\n-                data && data.slot != null\r\n-            ) {\r\n-                var name = data.slot;\r\n-                var slot = (slots[name] || (slots[name] = []));\r\n-                if (child.tag === 'template') {\r\n-                    slot.push.apply(slot, child.children || []);\r\n-                } else {\r\n-                    slot.push(child);\r\n-                }\r\n-            } else {\r\n-                (slots.default || (slots.default = [])).push(child);\r\n-            }\r\n-        }\r\n-        \u002F\u002F ignore slots that contains only whitespace\r\n-        for (var name$1 in slots) {\r\n-            if (slots[name$1].every(isWhitespace)) {\r\n-                delete slots[name$1];\r\n-            }\r\n-        }\r\n-        return slots\r\n-    }\r\n-\r\n-    function isWhitespace (node) {\r\n-        return (node.isComment && !node.asyncFactory) || node.text === ' '\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function normalizeScopedSlots (\r\n-        slots,\r\n-        normalSlots,\r\n-        prevSlots\r\n-    ) {\r\n-        var res;\r\n-        var hasNormalSlots = Object.keys(normalSlots).length > 0;\r\n-        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\r\n-        var key = slots && slots.$key;\r\n-        if (!slots) {\r\n-            res = {};\r\n-        } else if (slots._normalized) {\r\n-            \u002F\u002F fast path 1: child component re-render only, parent did not change\r\n-            return slots._normalized\r\n-        } else if (\r\n-            isStable &&\r\n-            prevSlots &&\r\n-            prevSlots !== emptyObject &&\r\n-            key === prevSlots.$key &&\r\n-            !hasNormalSlots &&\r\n-            !prevSlots.$hasNormal\r\n-        ) {\r\n-            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\r\n-            \u002F\u002F only need to normalize once\r\n-            return prevSlots\r\n-        } else {\r\n-            res = {};\r\n-            for (var key$1 in slots) {\r\n-                if (slots[key$1] && key$1[0] !== '$') {\r\n-                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F expose normal slots on scopedSlots\r\n-        for (var key$2 in normalSlots) {\r\n-            if (!(key$2 in res)) {\r\n-                res[key$2] = proxyNormalSlot(normalSlots, key$2);\r\n-            }\r\n-        }\r\n-        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\r\n-        \u002F\u002F and when that is passed down this would cause an error\r\n-        if (slots && Object.isExtensible(slots)) {\r\n-            (slots)._normalized = res;\r\n-        }\r\n-        def(res, '$stable', isStable);\r\n-        def(res, '$key', key);\r\n-        def(res, '$hasNormal', hasNormalSlots);\r\n-        return res\r\n-    }\r\n-\r\n-    function normalizeScopedSlot(normalSlots, key, fn) {\r\n-        var normalized = function () {\r\n-            var res = arguments.length ? fn.apply(null, arguments) : fn({});\r\n-            res = res && typeof res === 'object' && !Array.isArray(res)\r\n-                ? [res] \u002F\u002F single vnode\r\n-                : normalizeChildren(res);\r\n-            return res && (\r\n-                res.length === 0 ||\r\n-                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\r\n-            ) ? undefined\r\n-                : res\r\n-        };\r\n-        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\r\n-        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\r\n-        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\r\n-        if (fn.proxy) {\r\n-            Object.defineProperty(normalSlots, key, {\r\n-                get: normalized,\r\n-                enumerable: true,\r\n-                configurable: true\r\n-            });\r\n-        }\r\n-        return normalized\r\n-    }\r\n-\r\n-    function proxyNormalSlot(slots, key) {\r\n-        return function () { return slots[key]; }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering v-for lists.\r\n-     *\u002F\r\n-    function renderList (\r\n-        val,\r\n-        render\r\n-    ) {\r\n-        var ret, i, l, keys, key;\r\n-        if (Array.isArray(val) || typeof val === 'string') {\r\n-            ret = new Array(val.length);\r\n-            for (i = 0, l = val.length; i \u003C l; i++) {\r\n-                ret[i] = render(val[i], i);\r\n-            }\r\n-        } else if (typeof val === 'number') {\r\n-            ret = new Array(val);\r\n-            for (i = 0; i \u003C val; i++) {\r\n-                ret[i] = render(i + 1, i);\r\n-            }\r\n-        } else if (isObject(val)) {\r\n-            if (hasSymbol && val[Symbol.iterator]) {\r\n-                ret = [];\r\n-                var iterator = val[Symbol.iterator]();\r\n-                var result = iterator.next();\r\n-                while (!result.done) {\r\n-                    ret.push(render(result.value, ret.length));\r\n-                    result = iterator.next();\r\n-                }\r\n-            } else {\r\n-                keys = Object.keys(val);\r\n-                ret = new Array(keys.length);\r\n-                for (i = 0, l = keys.length; i \u003C l; i++) {\r\n-                    key = keys[i];\r\n-                    ret[i] = render(val[key], key, i);\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isDef(ret)) {\r\n-            ret = [];\r\n-        }\r\n-        (ret)._isVList = true;\r\n-        return ret\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering \u003Cslot>\r\n-     *\u002F\r\n-    function renderSlot (\r\n-        name,\r\n-        fallback,\r\n-        props,\r\n-        bindObject\r\n-    ) {\r\n-        var scopedSlotFn = this.$scopedSlots[name];\r\n-        var nodes;\r\n-        if (scopedSlotFn) { \u002F\u002F scoped slot\r\n-            props = props || {};\r\n-            if (bindObject) {\r\n-                if (!isObject(bindObject)) {\r\n-                    warn(\r\n-                        'slot v-bind without argument expects an Object',\r\n-                        this\r\n-                    );\r\n-                }\r\n-                props = extend(extend({}, bindObject), props);\r\n-            }\r\n-            nodes = scopedSlotFn(props) || fallback;\r\n-        } else {\r\n-            nodes = this.$slots[name] || fallback;\r\n-        }\r\n-\r\n-        var target = props && props.slot;\r\n-        if (target) {\r\n-            return this.$createElement('template', { slot: target }, nodes)\r\n-        } else {\r\n-            return nodes\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving filters\r\n-     *\u002F\r\n-    function resolveFilter (id) {\r\n-        return resolveAsset(this.$options, 'filters', id, true) || identity\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isKeyNotMatch (expect, actual) {\r\n-        if (Array.isArray(expect)) {\r\n-            return expect.indexOf(actual) === -1\r\n-        } else {\r\n-            return expect !== actual\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for checking keyCodes from config.\r\n-     * exposed as Vue.prototype._k\r\n-     * passing in eventKeyName as last argument separately for backwards compat\r\n-     *\u002F\r\n-    function checkKeyCodes (\r\n-        eventKeyCode,\r\n-        key,\r\n-        builtInKeyCode,\r\n-        eventKeyName,\r\n-        builtInKeyName\r\n-    ) {\r\n-        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\r\n-        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\r\n-            return isKeyNotMatch(builtInKeyName, eventKeyName)\r\n-        } else if (mappedKeyCode) {\r\n-            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\r\n-        } else if (eventKeyName) {\r\n-            return hyphenate(eventKeyName) !== key\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\r\n-     *\u002F\r\n-    function bindObjectProps (\r\n-        data,\r\n-        tag,\r\n-        value,\r\n-        asProp,\r\n-        isSync\r\n-    ) {\r\n-        if (value) {\r\n-            if (!isObject(value)) {\r\n-                warn(\r\n-                    'v-bind without argument expects an Object or Array value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                if (Array.isArray(value)) {\r\n-                    value = toObject(value);\r\n-                }\r\n-                var hash;\r\n-                var loop = function ( key ) {\r\n-                    if (\r\n-                        key === 'class' ||\r\n-                        key === 'style' ||\r\n-                        isReservedAttribute(key)\r\n-                    ) {\r\n-                        hash = data;\r\n-                    } else {\r\n-                        var type = data.attrs && data.attrs.type;\r\n-                        hash = asProp || config.mustUseProp(tag, type, key)\r\n-                            ? data.domProps || (data.domProps = {})\r\n-                            : data.attrs || (data.attrs = {});\r\n-                    }\r\n-                    var camelizedKey = camelize(key);\r\n-                    var hyphenatedKey = hyphenate(key);\r\n-                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\r\n-                        hash[key] = value[key];\r\n-\r\n-                        if (isSync) {\r\n-                            var on = data.on || (data.on = {});\r\n-                            on[(\"update:\" + key)] = function ($event) {\r\n-                                value[key] = $event;\r\n-                            };\r\n-                        }\r\n-                    }\r\n-                };\r\n-\r\n-                for (var key in value) loop( key );\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering static trees.\r\n-     *\u002F\r\n-    function renderStatic (\r\n-        index,\r\n-        isInFor\r\n-    ) {\r\n-        var cached = this._staticTrees || (this._staticTrees = []);\r\n-        var tree = cached[index];\r\n-        \u002F\u002F if has already-rendered static tree and not inside v-for,\r\n-        \u002F\u002F we can reuse the same tree.\r\n-        if (tree && !isInFor) {\r\n-            return tree\r\n-        }\r\n-        \u002F\u002F otherwise, render a fresh tree.\r\n-        tree = cached[index] = this.$options.staticRenderFns[index].call(\r\n-            this._renderProxy,\r\n-            null,\r\n-            this \u002F\u002F for render fns generated for functional component templates\r\n-        );\r\n-        markStatic(tree, (\"__static__\" + index), false);\r\n-        return tree\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for v-once.\r\n-     * Effectively it means marking the node as static with a unique key.\r\n-     *\u002F\r\n-    function markOnce (\r\n-        tree,\r\n-        index,\r\n-        key\r\n-    ) {\r\n-        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\r\n-        return tree\r\n-    }\r\n-\r\n-    function markStatic (\r\n-        tree,\r\n-        key,\r\n-        isOnce\r\n-    ) {\r\n-        if (Array.isArray(tree)) {\r\n-            for (var i = 0; i \u003C tree.length; i++) {\r\n-                if (tree[i] && typeof tree[i] !== 'string') {\r\n-                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\r\n-                }\r\n-            }\r\n-        } else {\r\n-            markStaticNode(tree, key, isOnce);\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticNode (node, key, isOnce) {\r\n-        node.isStatic = true;\r\n-        node.key = key;\r\n-        node.isOnce = isOnce;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindObjectListeners (data, value) {\r\n-        if (value) {\r\n-            if (!isPlainObject(value)) {\r\n-                warn(\r\n-                    'v-on without argument expects an Object value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                var on = data.on = data.on ? extend({}, data.on) : {};\r\n-                for (var key in value) {\r\n-                    var existing = on[key];\r\n-                    var ours = value[key];\r\n-                    on[key] = existing ? [].concat(existing, ours) : ours;\r\n-                }\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveScopedSlots (\r\n-        fns, \u002F\u002F see flow\u002Fvnode\r\n-        res,\r\n-        \u002F\u002F the following are added in 2.6\r\n-        hasDynamicKeys,\r\n-        contentHashKey\r\n-    ) {\r\n-        res = res || { $stable: !hasDynamicKeys };\r\n-        for (var i = 0; i \u003C fns.length; i++) {\r\n-            var slot = fns[i];\r\n-            if (Array.isArray(slot)) {\r\n-                resolveScopedSlots(slot, res, hasDynamicKeys);\r\n-            } else if (slot) {\r\n-                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\r\n-                if (slot.proxy) {\r\n-                    slot.fn.proxy = true;\r\n-                }\r\n-                res[slot.key] = slot.fn;\r\n-            }\r\n-        }\r\n-        if (contentHashKey) {\r\n-            (res).$key = contentHashKey;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindDynamicKeys (baseObj, values) {\r\n-        for (var i = 0; i \u003C values.length; i += 2) {\r\n-            var key = values[i];\r\n-            if (typeof key === 'string' && key) {\r\n-                baseObj[values[i]] = values[i + 1];\r\n-            } else if (key !== '' && key !== null) {\r\n-                \u002F\u002F null is a speical value for explicitly removing a binding\r\n-                warn(\r\n-                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\r\n-                    this\r\n-                );\r\n-            }\r\n-        }\r\n-        return baseObj\r\n-    }\r\n-\r\n-    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\r\n-    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\r\n-    \u002F\u002F to string and cause the type check to miss.\r\n-    function prependModifier (value, symbol) {\r\n-        return typeof value === 'string' ? symbol + value : value\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function installRenderHelpers (target) {\r\n-        target._o = markOnce;\r\n-        target._n = toNumber;\r\n-        target._s = toString;\r\n-        target._l = renderList;\r\n-        target._t = renderSlot;\r\n-        target._q = looseEqual;\r\n-        target._i = looseIndexOf;\r\n-        target._m = renderStatic;\r\n-        target._f = resolveFilter;\r\n-        target._k = checkKeyCodes;\r\n-        target._b = bindObjectProps;\r\n-        target._v = createTextVNode;\r\n-        target._e = createEmptyVNode;\r\n-        target._u = resolveScopedSlots;\r\n-        target._g = bindObjectListeners;\r\n-        target._d = bindDynamicKeys;\r\n-        target._p = prependModifier;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function FunctionalRenderContext (\r\n-        data,\r\n-        props,\r\n-        children,\r\n-        parent,\r\n-        Ctor\r\n-    ) {\r\n-        var this$1 = this;\r\n-\r\n-        var options = Ctor.options;\r\n-        \u002F\u002F ensure the createElement function in functional components\r\n-        \u002F\u002F gets a unique context - this is necessary for correct named slot check\r\n-        var contextVm;\r\n-        if (hasOwn(parent, '_uid')) {\r\n-            contextVm = Object.create(parent);\r\n-            \u002F\u002F $flow-disable-line\r\n-            contextVm._original = parent;\r\n-        } else {\r\n-            \u002F\u002F the context vm passed in is a functional context as well.\r\n-            \u002F\u002F in this case we want to make sure we are able to get a hold to the\r\n-            \u002F\u002F real context instance.\r\n-            contextVm = parent;\r\n-            \u002F\u002F $flow-disable-line\r\n-            parent = parent._original;\r\n-        }\r\n-        var isCompiled = isTrue(options._compiled);\r\n-        var needNormalization = !isCompiled;\r\n-\r\n-        this.data = data;\r\n-        this.props = props;\r\n-        this.children = children;\r\n-        this.parent = parent;\r\n-        this.listeners = data.on || emptyObject;\r\n-        this.injections = resolveInject(options.inject, parent);\r\n-        this.slots = function () {\r\n-            if (!this$1.$slots) {\r\n-                normalizeScopedSlots(\r\n-                    data.scopedSlots,\r\n-                    this$1.$slots = resolveSlots(children, parent)\r\n-                );\r\n-            }\r\n-            return this$1.$slots\r\n-        };\r\n-\r\n-        Object.defineProperty(this, 'scopedSlots', ({\r\n-            enumerable: true,\r\n-            get: function get () {\r\n-                return normalizeScopedSlots(data.scopedSlots, this.slots())\r\n-            }\r\n-        }));\r\n-\r\n-        \u002F\u002F support for compiled functional template\r\n-        if (isCompiled) {\r\n-            \u002F\u002F exposing $options for renderStatic()\r\n-            this.$options = options;\r\n-            \u002F\u002F pre-resolve slots for renderSlot()\r\n-            this.$slots = this.slots();\r\n-            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\r\n-        }\r\n-\r\n-        if (options._scopeId) {\r\n-            this._c = function (a, b, c, d) {\r\n-                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\r\n-                if (vnode && !Array.isArray(vnode)) {\r\n-                    vnode.fnScopeId = options._scopeId;\r\n-                    vnode.fnContext = parent;\r\n-                }\r\n-                return vnode\r\n-            };\r\n-        } else {\r\n-            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\r\n-        }\r\n-    }\r\n-\r\n-    installRenderHelpers(FunctionalRenderContext.prototype);\r\n-\r\n-    function createFunctionalComponent (\r\n-        Ctor,\r\n-        propsData,\r\n-        data,\r\n-        contextVm,\r\n-        children\r\n-    ) {\r\n-        var options = Ctor.options;\r\n-        var props = {};\r\n-        var propOptions = options.props;\r\n-        if (isDef(propOptions)) {\r\n-            for (var key in propOptions) {\r\n-                props[key] = validateProp(key, propOptions, propsData || emptyObject);\r\n-            }\r\n-        } else {\r\n-            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\r\n-            if (isDef(data.props)) { mergeProps(props, data.props); }\r\n-        }\r\n-\r\n-        var renderContext = new FunctionalRenderContext(\r\n-            data,\r\n-            props,\r\n-            children,\r\n-            contextVm,\r\n-            Ctor\r\n-        );\r\n-\r\n-        var vnode = options.render.call(null, renderContext._c, renderContext);\r\n-\r\n-        if (vnode instanceof VNode) {\r\n-            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\r\n-        } else if (Array.isArray(vnode)) {\r\n-            var vnodes = normalizeChildren(vnode) || [];\r\n-            var res = new Array(vnodes.length);\r\n-            for (var i = 0; i \u003C vnodes.length; i++) {\r\n-                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\r\n-            }\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\r\n-        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\r\n-        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\r\n-        \u002F\u002F that should not be matched to match.\r\n-        var clone = cloneVNode(vnode);\r\n-        clone.fnContext = contextVm;\r\n-        clone.fnOptions = options;\r\n-        {\r\n-            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\r\n-        }\r\n-        if (data.slot) {\r\n-            (clone.data || (clone.data = {})).slot = data.slot;\r\n-        }\r\n-        return clone\r\n-    }\r\n-\r\n-    function mergeProps (to, from) {\r\n-        for (var key in from) {\r\n-            to[camelize(key)] = from[key];\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F inline hooks to be invoked on component VNodes during patch\r\n-    var componentVNodeHooks = {\r\n-        init: function init (vnode, hydrating) {\r\n-            if (\r\n-                vnode.componentInstance &&\r\n-                !vnode.componentInstance._isDestroyed &&\r\n-                vnode.data.keepAlive\r\n-            ) {\r\n-                \u002F\u002F kept-alive components, treat as a patch\r\n-                var mountedNode = vnode; \u002F\u002F work around flow\r\n-                componentVNodeHooks.prepatch(mountedNode, mountedNode);\r\n-            } else {\r\n-                var child = vnode.componentInstance = createComponentInstanceForVnode(\r\n-                    vnode,\r\n-                    activeInstance\r\n-                );\r\n-                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\r\n-            }\r\n-        },\r\n-\r\n-        prepatch: function prepatch (oldVnode, vnode) {\r\n-            var options = vnode.componentOptions;\r\n-            var child = vnode.componentInstance = oldVnode.componentInstance;\r\n-            updateChildComponent(\r\n-                child,\r\n-                options.propsData, \u002F\u002F updated props\r\n-                options.listeners, \u002F\u002F updated listeners\r\n-                vnode, \u002F\u002F new parent vnode\r\n-                options.children \u002F\u002F new children\r\n-            );\r\n-        },\r\n-\r\n-        insert: function insert (vnode) {\r\n-            var context = vnode.context;\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isMounted) {\r\n-                componentInstance._isMounted = true;\r\n-                callHook(componentInstance, 'mounted');\r\n-            }\r\n-            if (vnode.data.keepAlive) {\r\n-                if (context._isMounted) {\r\n-                    \u002F\u002F vue-router#1212\r\n-                    \u002F\u002F During updates, a kept-alive component's child components may\r\n-                    \u002F\u002F change, so directly walking the tree here may call activated hooks\r\n-                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\r\n-                    \u002F\u002F be processed after the whole patch process ended.\r\n-                    queueActivatedComponent(componentInstance);\r\n-                } else {\r\n-                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        destroy: function destroy (vnode) {\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isDestroyed) {\r\n-                if (!vnode.data.keepAlive) {\r\n-                    componentInstance.$destroy();\r\n-                } else {\r\n-                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var hooksToMerge = Object.keys(componentVNodeHooks);\r\n-\r\n-    function createComponent (\r\n-        Ctor,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        if (isUndef(Ctor)) {\r\n-            return\r\n-        }\r\n-\r\n-        var baseCtor = context.$options._base;\r\n-\r\n-        \u002F\u002F plain options object: turn it into a constructor\r\n-        if (isObject(Ctor)) {\r\n-            Ctor = baseCtor.extend(Ctor);\r\n-        }\r\n-\r\n-        \u002F\u002F if at this stage it's not a constructor or an async component factory,\r\n-        \u002F\u002F reject.\r\n-        if (typeof Ctor !== 'function') {\r\n-            {\r\n-                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F async component\r\n-        var asyncFactory;\r\n-        if (isUndef(Ctor.cid)) {\r\n-            asyncFactory = Ctor;\r\n-            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\r\n-            if (Ctor === undefined) {\r\n-                \u002F\u002F return a placeholder node for async component, which is rendered\r\n-                \u002F\u002F as a comment node but preserves all the raw information for the node.\r\n-                \u002F\u002F the information will be used for async server-rendering and hydration.\r\n-                return createAsyncPlaceholder(\r\n-                    asyncFactory,\r\n-                    data,\r\n-                    context,\r\n-                    children,\r\n-                    tag\r\n-                )\r\n-            }\r\n-        }\r\n-\r\n-        data = data || {};\r\n-\r\n-        \u002F\u002F resolve constructor options in case global mixins are applied after\r\n-        \u002F\u002F component constructor creation\r\n-        resolveConstructorOptions(Ctor);\r\n-\r\n-        \u002F\u002F transform component v-model data into props & events\r\n-        if (isDef(data.model)) {\r\n-            transformModel(Ctor.options, data);\r\n-        }\r\n-\r\n-        \u002F\u002F extract props\r\n-        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\r\n-\r\n-        \u002F\u002F functional component\r\n-        if (isTrue(Ctor.options.functional)) {\r\n-            return createFunctionalComponent(Ctor, propsData, data, context, children)\r\n-        }\r\n-\r\n-        \u002F\u002F extract listeners, since these needs to be treated as\r\n-        \u002F\u002F child component listeners instead of DOM listeners\r\n-        var listeners = data.on;\r\n-        \u002F\u002F replace with listeners with .native modifier\r\n-        \u002F\u002F so it gets processed during parent component patch.\r\n-        data.on = data.nativeOn;\r\n-\r\n-        if (isTrue(Ctor.options.abstract)) {\r\n-            \u002F\u002F abstract components do not keep anything\r\n-            \u002F\u002F other than props & listeners & slot\r\n-\r\n-            \u002F\u002F work around flow\r\n-            var slot = data.slot;\r\n-            data = {};\r\n-            if (slot) {\r\n-                data.slot = slot;\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F install component management hooks onto the placeholder node\r\n-        installComponentHooks(data);\r\n-\r\n-        \u002F\u002F return a placeholder vnode\r\n-        var name = Ctor.options.name || tag;\r\n-        var vnode = new VNode(\r\n-            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\r\n-            data, undefined, undefined, undefined, context,\r\n-            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\r\n-            asyncFactory\r\n-        );\r\n-\r\n-        return vnode\r\n-    }\r\n-\r\n-    function createComponentInstanceForVnode (\r\n-        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\r\n-        parent \u002F\u002F activeInstance in lifecycle state\r\n-    ) {\r\n-        var options = {\r\n-            _isComponent: true,\r\n-            _parentVnode: vnode,\r\n-            parent: parent\r\n-        };\r\n-        \u002F\u002F check inline-template render functions\r\n-        var inlineTemplate = vnode.data.inlineTemplate;\r\n-        if (isDef(inlineTemplate)) {\r\n-            options.render = inlineTemplate.render;\r\n-            options.staticRenderFns = inlineTemplate.staticRenderFns;\r\n-        }\r\n-        return new vnode.componentOptions.Ctor(options)\r\n-    }\r\n-\r\n-    function installComponentHooks (data) {\r\n-        var hooks = data.hook || (data.hook = {});\r\n-        for (var i = 0; i \u003C hooksToMerge.length; i++) {\r\n-            var key = hooksToMerge[i];\r\n-            var existing = hooks[key];\r\n-            var toMerge = componentVNodeHooks[key];\r\n-            if (existing !== toMerge && !(existing && existing._merged)) {\r\n-                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function mergeHook$1 (f1, f2) {\r\n-        var merged = function (a, b) {\r\n-            \u002F\u002F flow complains about extra args which is why we use any\r\n-            f1(a, b);\r\n-            f2(a, b);\r\n-        };\r\n-        merged._merged = true;\r\n-        return merged\r\n-    }\r\n-\r\n-    \u002F\u002F transform component v-model info (value and callback) into\r\n-    \u002F\u002F prop and event handler respectively.\r\n-    function transformModel (options, data) {\r\n-        var prop = (options.model && options.model.prop) || 'value';\r\n-        var event = (options.model && options.model.event) || 'input'\r\n-        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\r\n-        var on = data.on || (data.on = {});\r\n-        var existing = on[event];\r\n-        var callback = data.model.callback;\r\n-        if (isDef(existing)) {\r\n-            if (\r\n-                Array.isArray(existing)\r\n-                    ? existing.indexOf(callback) === -1\r\n-                    : existing !== callback\r\n-            ) {\r\n-                on[event] = [callback].concat(existing);\r\n-            }\r\n-        } else {\r\n-            on[event] = callback;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var SIMPLE_NORMALIZE = 1;\r\n-    var ALWAYS_NORMALIZE = 2;\r\n-\r\n-    \u002F\u002F wrapper function for providing a more flexible interface\r\n-    \u002F\u002F without getting yelled at by flow\r\n-    function createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType,\r\n-        alwaysNormalize\r\n-    ) {\r\n-        if (Array.isArray(data) || isPrimitive(data)) {\r\n-            normalizationType = children;\r\n-            children = data;\r\n-            data = undefined;\r\n-        }\r\n-        if (isTrue(alwaysNormalize)) {\r\n-            normalizationType = ALWAYS_NORMALIZE;\r\n-        }\r\n-        return _createElement(context, tag, data, children, normalizationType)\r\n-    }\r\n-\r\n-    function _createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType\r\n-    ) {\r\n-        if (isDef(data) && isDef((data).__ob__)) {\r\n-            warn(\r\n-                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\r\n-                'Always create fresh vnode data objects in each render!',\r\n-                context\r\n-            );\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F object syntax in v-bind\r\n-        if (isDef(data) && isDef(data.is)) {\r\n-            tag = data.is;\r\n-        }\r\n-        if (!tag) {\r\n-            \u002F\u002F in case of component :is set to falsy value\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F warn against non-primitive key\r\n-        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\r\n-        ) {\r\n-            {\r\n-                warn(\r\n-                    'Avoid using non-primitive value as key, ' +\r\n-                    'use string\u002Fnumber value instead.',\r\n-                    context\r\n-                );\r\n-            }\r\n-        }\r\n-        \u002F\u002F support single function children as default scoped slot\r\n-        if (Array.isArray(children) &&\r\n-            typeof children[0] === 'function'\r\n-        ) {\r\n-            data = data || {};\r\n-            data.scopedSlots = { default: children[0] };\r\n-            children.length = 0;\r\n-        }\r\n-        if (normalizationType === ALWAYS_NORMALIZE) {\r\n-            children = normalizeChildren(children);\r\n-        } else if (normalizationType === SIMPLE_NORMALIZE) {\r\n-            children = simpleNormalizeChildren(children);\r\n-        }\r\n-        var vnode, ns;\r\n-        if (typeof tag === 'string') {\r\n-            var Ctor;\r\n-            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\r\n-            if (config.isReservedTag(tag)) {\r\n-                \u002F\u002F platform built-in elements\r\n-                vnode = new VNode(\r\n-                    config.parsePlatformTagName(tag), data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\r\n-                \u002F\u002F component\r\n-                vnode = createComponent(Ctor, data, context, children, tag);\r\n-            } else {\r\n-                \u002F\u002F unknown or unlisted namespaced elements\r\n-                \u002F\u002F check at runtime because it may get assigned a namespace when its\r\n-                \u002F\u002F parent normalizes children\r\n-                vnode = new VNode(\r\n-                    tag, data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            }\r\n-        } else {\r\n-            \u002F\u002F direct component options \u002F constructor\r\n-            vnode = createComponent(tag, data, context, children);\r\n-        }\r\n-        if (Array.isArray(vnode)) {\r\n-            return vnode\r\n-        } else if (isDef(vnode)) {\r\n-            if (isDef(ns)) { applyNS(vnode, ns); }\r\n-            if (isDef(data)) { registerDeepBindings(data); }\r\n-            return vnode\r\n-        } else {\r\n-            return createEmptyVNode()\r\n-        }\r\n-    }\r\n-\r\n-    function applyNS (vnode, ns, force) {\r\n-        vnode.ns = ns;\r\n-        if (vnode.tag === 'foreignObject') {\r\n-            \u002F\u002F use default namespace inside foreignObject\r\n-            ns = undefined;\r\n-            force = true;\r\n-        }\r\n-        if (isDef(vnode.children)) {\r\n-            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\r\n-                var child = vnode.children[i];\r\n-                if (isDef(child.tag) && (\r\n-                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\r\n-                    applyNS(child, ns, force);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F ref #5318\r\n-    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\r\n-    \u002F\u002F :class are used on slot nodes\r\n-    function registerDeepBindings (data) {\r\n-        if (isObject(data.style)) {\r\n-            traverse(data.style);\r\n-        }\r\n-        if (isObject(data.class)) {\r\n-            traverse(data.class);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initRender (vm) {\r\n-        vm._vnode = null; \u002F\u002F the root of the child tree\r\n-        vm._staticTrees = null; \u002F\u002F v-once cached trees\r\n-        var options = vm.$options;\r\n-        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\r\n-        var renderContext = parentVnode && parentVnode.context;\r\n-        vm.$slots = resolveSlots(options._renderChildren, renderContext);\r\n-        vm.$scopedSlots = emptyObject;\r\n-        \u002F\u002F bind the createElement fn to this instance\r\n-        \u002F\u002F so that we get proper render context inside it.\r\n-        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\r\n-        \u002F\u002F internal version is used by render functions compiled from templates\r\n-        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\r\n-        \u002F\u002F normalization is always applied for the public version, used in\r\n-        \u002F\u002F user-written render functions.\r\n-        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\r\n-\r\n-        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\r\n-        \u002F\u002F they need to be reactive so that HOCs using them are always updated\r\n-        var parentData = parentVnode && parentVnode.data;\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        {\r\n-            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\r\n-            }, true);\r\n-            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\r\n-            }, true);\r\n-        }\r\n-    }\r\n-\r\n-    var currentRenderingInstance = null;\r\n-\r\n-    function renderMixin (Vue) {\r\n-        \u002F\u002F install runtime convenience helpers\r\n-        installRenderHelpers(Vue.prototype);\r\n-\r\n-        Vue.prototype.$nextTick = function (fn) {\r\n-            return nextTick(fn, this)\r\n-        };\r\n-\r\n-        Vue.prototype._render = function () {\r\n-            var vm = this;\r\n-            var ref = vm.$options;\r\n-            var render = ref.render;\r\n-            var _parentVnode = ref._parentVnode;\r\n-\r\n-            if (_parentVnode) {\r\n-                vm.$scopedSlots = normalizeScopedSlots(\r\n-                    _parentVnode.data.scopedSlots,\r\n-                    vm.$slots,\r\n-                    vm.$scopedSlots\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F set parent vnode. this allows render functions to have access\r\n-            \u002F\u002F to the data on the placeholder node.\r\n-            vm.$vnode = _parentVnode;\r\n-            \u002F\u002F render self\r\n-            var vnode;\r\n-            try {\r\n-                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\r\n-                \u002F\u002F separately from one another. Nested component's render fns are called\r\n-                \u002F\u002F when parent component is patched.\r\n-                currentRenderingInstance = vm;\r\n-                vnode = render.call(vm._renderProxy, vm.$createElement);\r\n-            } catch (e) {\r\n-                handleError(e, vm, \"render\");\r\n-                \u002F\u002F return error render result,\r\n-                \u002F\u002F or previous vnode to prevent render error causing blank component\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                if (vm.$options.renderError) {\r\n-                    try {\r\n-                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\r\n-                    } catch (e) {\r\n-                        handleError(e, vm, \"renderError\");\r\n-                        vnode = vm._vnode;\r\n-                    }\r\n-                } else {\r\n-                    vnode = vm._vnode;\r\n-                }\r\n-            } finally {\r\n-                currentRenderingInstance = null;\r\n-            }\r\n-            \u002F\u002F if the returned array contains only a single node, allow it\r\n-            if (Array.isArray(vnode) && vnode.length === 1) {\r\n-                vnode = vnode[0];\r\n-            }\r\n-            \u002F\u002F return empty vnode in case the render function errored out\r\n-            if (!(vnode instanceof VNode)) {\r\n-                if (Array.isArray(vnode)) {\r\n-                    warn(\r\n-                        'Multiple root nodes returned from render function. Render function ' +\r\n-                        'should return a single root node.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                vnode = createEmptyVNode();\r\n-            }\r\n-            \u002F\u002F set parent\r\n-            vnode.parent = _parentVnode;\r\n-            return vnode\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function ensureCtor (comp, base) {\r\n-        if (\r\n-            comp.__esModule ||\r\n-            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\r\n-        ) {\r\n-            comp = comp.default;\r\n-        }\r\n-        return isObject(comp)\r\n-            ? base.extend(comp)\r\n-            : comp\r\n-    }\r\n-\r\n-    function createAsyncPlaceholder (\r\n-        factory,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        var node = createEmptyVNode();\r\n-        node.asyncFactory = factory;\r\n-        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\r\n-        return node\r\n-    }\r\n-\r\n-    function resolveAsyncComponent (\r\n-        factory,\r\n-        baseCtor\r\n-    ) {\r\n-        if (isTrue(factory.error) && isDef(factory.errorComp)) {\r\n-            return factory.errorComp\r\n-        }\r\n-\r\n-        if (isDef(factory.resolved)) {\r\n-            return factory.resolved\r\n-        }\r\n-\r\n-        var owner = currentRenderingInstance;\r\n-        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\r\n-            \u002F\u002F already pending\r\n-            factory.owners.push(owner);\r\n-        }\r\n-\r\n-        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\r\n-            return factory.loadingComp\r\n-        }\r\n-\r\n-        if (owner && !isDef(factory.owners)) {\r\n-            var owners = factory.owners = [owner];\r\n-            var sync = true;\r\n-            var timerLoading = null;\r\n-            var timerTimeout = null\r\n-\r\n-            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\r\n-\r\n-            var forceRender = function (renderCompleted) {\r\n-                for (var i = 0, l = owners.length; i \u003C l; i++) {\r\n-                    (owners[i]).$forceUpdate();\r\n-                }\r\n-\r\n-                if (renderCompleted) {\r\n-                    owners.length = 0;\r\n-                    if (timerLoading !== null) {\r\n-                        clearTimeout(timerLoading);\r\n-                        timerLoading = null;\r\n-                    }\r\n-                    if (timerTimeout !== null) {\r\n-                        clearTimeout(timerTimeout);\r\n-                        timerTimeout = null;\r\n-                    }\r\n-                }\r\n-            };\r\n-\r\n-            var resolve = once(function (res) {\r\n-                \u002F\u002F cache resolved\r\n-                factory.resolved = ensureCtor(res, baseCtor);\r\n-                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\r\n-                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\r\n-                if (!sync) {\r\n-                    forceRender(true);\r\n-                } else {\r\n-                    owners.length = 0;\r\n-                }\r\n-            });\r\n-\r\n-            var reject = once(function (reason) {\r\n-                warn(\r\n-                    \"Failed to resolve async component: \" + (String(factory)) +\r\n-                    (reason ? (\"\\nReason: \" + reason) : '')\r\n-                );\r\n-                if (isDef(factory.errorComp)) {\r\n-                    factory.error = true;\r\n-                    forceRender(true);\r\n-                }\r\n-            });\r\n-\r\n-            var res = factory(resolve, reject);\r\n-\r\n-            if (isObject(res)) {\r\n-                if (isPromise(res)) {\r\n-                    \u002F\u002F () => Promise\r\n-                    if (isUndef(factory.resolved)) {\r\n-                        res.then(resolve, reject);\r\n-                    }\r\n-                } else if (isPromise(res.component)) {\r\n-                    res.component.then(resolve, reject);\r\n-\r\n-                    if (isDef(res.error)) {\r\n-                        factory.errorComp = ensureCtor(res.error, baseCtor);\r\n-                    }\r\n-\r\n-                    if (isDef(res.loading)) {\r\n-                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\r\n-                        if (res.delay === 0) {\r\n-                            factory.loading = true;\r\n-                        } else {\r\n-                            timerLoading = setTimeout(function () {\r\n-                                timerLoading = null;\r\n-                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\r\n-                                    factory.loading = true;\r\n-                                    forceRender(false);\r\n-                                }\r\n-                            }, res.delay || 200);\r\n-                        }\r\n-                    }\r\n-\r\n-                    if (isDef(res.timeout)) {\r\n-                        timerTimeout = setTimeout(function () {\r\n-                            timerTimeout = null;\r\n-                            if (isUndef(factory.resolved)) {\r\n-                                reject(\r\n-                                    \"timeout (\" + (res.timeout) + \"ms)\"\r\n-                                );\r\n-                            }\r\n-                        }, res.timeout);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            sync = false;\r\n-            \u002F\u002F return in case resolved synchronously\r\n-            return factory.loading\r\n-                ? factory.loadingComp\r\n-                : factory.resolved\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isAsyncPlaceholder (node) {\r\n-        return node.isComment && node.asyncFactory\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function getFirstComponentChild (children) {\r\n-        if (Array.isArray(children)) {\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var c = children[i];\r\n-                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\r\n-                    return c\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initEvents (vm) {\r\n-        vm._events = Object.create(null);\r\n-        vm._hasHookEvent = false;\r\n-        \u002F\u002F init parent attached events\r\n-        var listeners = vm.$options._parentListeners;\r\n-        if (listeners) {\r\n-            updateComponentListeners(vm, listeners);\r\n-        }\r\n-    }\r\n-\r\n-    var target;\r\n-\r\n-    function add (event, fn) {\r\n-        target.$on(event, fn);\r\n-    }\r\n-\r\n-    function remove$1 (event, fn) {\r\n-        target.$off(event, fn);\r\n-    }\r\n-\r\n-    function createOnceHandler (event, fn) {\r\n-        var _target = target;\r\n-        return function onceHandler () {\r\n-            var res = fn.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                _target.$off(event, onceHandler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function updateComponentListeners (\r\n-        vm,\r\n-        listeners,\r\n-        oldListeners\r\n-    ) {\r\n-        target = vm;\r\n-        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\r\n-        target = undefined;\r\n-    }\r\n-\r\n-    function eventsMixin (Vue) {\r\n-        var hookRE = \u002F^hook:\u002F;\r\n-        Vue.prototype.$on = function (event, fn) {\r\n-            var vm = this;\r\n-            if (Array.isArray(event)) {\r\n-                for (var i = 0, l = event.length; i \u003C l; i++) {\r\n-                    vm.$on(event[i], fn);\r\n-                }\r\n-            } else {\r\n-                (vm._events[event] || (vm._events[event] = [])).push(fn);\r\n-                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\r\n-                \u002F\u002F instead of a hash lookup\r\n-                if (hookRE.test(event)) {\r\n-                    vm._hasHookEvent = true;\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$once = function (event, fn) {\r\n-            var vm = this;\r\n-            function on () {\r\n-                vm.$off(event, on);\r\n-                fn.apply(vm, arguments);\r\n-            }\r\n-            on.fn = fn;\r\n-            vm.$on(event, on);\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$off = function (event, fn) {\r\n-            var vm = this;\r\n-            \u002F\u002F all\r\n-            if (!arguments.length) {\r\n-                vm._events = Object.create(null);\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F array of events\r\n-            if (Array.isArray(event)) {\r\n-                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\r\n-                    vm.$off(event[i$1], fn);\r\n-                }\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific event\r\n-            var cbs = vm._events[event];\r\n-            if (!cbs) {\r\n-                return vm\r\n-            }\r\n-            if (!fn) {\r\n-                vm._events[event] = null;\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific handler\r\n-            var cb;\r\n-            var i = cbs.length;\r\n-            while (i--) {\r\n-                cb = cbs[i];\r\n-                if (cb === fn || cb.fn === fn) {\r\n-                    cbs.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$emit = function (event) {\r\n-            var vm = this;\r\n-            {\r\n-                var lowerCaseEvent = event.toLowerCase();\r\n-                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\r\n-                    tip(\r\n-                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\r\n-                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\r\n-                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\r\n-                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\r\n-                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            var cbs = vm._events[event];\r\n-            if (cbs) {\r\n-                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\r\n-                var args = toArray(arguments, 1);\r\n-                var info = \"event handler for \\\"\" + event + \"\\\"\";\r\n-                for (var i = 0, l = cbs.length; i \u003C l; i++) {\r\n-                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var activeInstance = null;\r\n-    var isUpdatingChildComponent = false;\r\n-\r\n-    function setActiveInstance(vm) {\r\n-        var prevActiveInstance = activeInstance;\r\n-        activeInstance = vm;\r\n-        return function () {\r\n-            activeInstance = prevActiveInstance;\r\n-        }\r\n-    }\r\n-\r\n-    function initLifecycle (vm) {\r\n-        var options = vm.$options;\r\n-\r\n-        \u002F\u002F locate first non-abstract parent\r\n-        var parent = options.parent;\r\n-        if (parent && !options.abstract) {\r\n-            while (parent.$options.abstract && parent.$parent) {\r\n-                parent = parent.$parent;\r\n-            }\r\n-            parent.$children.push(vm);\r\n-        }\r\n-\r\n-        vm.$parent = parent;\r\n-        vm.$root = parent ? parent.$root : vm;\r\n-\r\n-        vm.$children = [];\r\n-        vm.$refs = {};\r\n-\r\n-        vm._watcher = null;\r\n-        vm._inactive = null;\r\n-        vm._directInactive = false;\r\n-        vm._isMounted = false;\r\n-        vm._isDestroyed = false;\r\n-        vm._isBeingDestroyed = false;\r\n-    }\r\n-\r\n-    function lifecycleMixin (Vue) {\r\n-        Vue.prototype._update = function (vnode, hydrating) {\r\n-            var vm = this;\r\n-            var prevEl = vm.$el;\r\n-            var prevVnode = vm._vnode;\r\n-            var restoreActiveInstance = setActiveInstance(vm);\r\n-            vm._vnode = vnode;\r\n-            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\r\n-            \u002F\u002F based on the rendering backend used.\r\n-            if (!prevVnode) {\r\n-                \u002F\u002F initial render\r\n-                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\r\n-            } else {\r\n-                \u002F\u002F updates\r\n-                vm.$el = vm.__patch__(prevVnode, vnode);\r\n-            }\r\n-            restoreActiveInstance();\r\n-            \u002F\u002F update __vue__ reference\r\n-            if (prevEl) {\r\n-                prevEl.__vue__ = null;\r\n-            }\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = vm;\r\n-            }\r\n-            \u002F\u002F if parent is an HOC, update its $el as well\r\n-            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\r\n-                vm.$parent.$el = vm.$el;\r\n-            }\r\n-            \u002F\u002F updated hook is called by the scheduler to ensure that children are\r\n-            \u002F\u002F updated in a parent's updated hook.\r\n-        };\r\n-\r\n-        Vue.prototype.$forceUpdate = function () {\r\n-            var vm = this;\r\n-            if (vm._watcher) {\r\n-                vm._watcher.update();\r\n-            }\r\n-        };\r\n-\r\n-        Vue.prototype.$destroy = function () {\r\n-            var vm = this;\r\n-            if (vm._isBeingDestroyed) {\r\n-                return\r\n-            }\r\n-            callHook(vm, 'beforeDestroy');\r\n-            vm._isBeingDestroyed = true;\r\n-            \u002F\u002F remove self from parent\r\n-            var parent = vm.$parent;\r\n-            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\r\n-                remove(parent.$children, vm);\r\n-            }\r\n-            \u002F\u002F teardown watchers\r\n-            if (vm._watcher) {\r\n-                vm._watcher.teardown();\r\n-            }\r\n-            var i = vm._watchers.length;\r\n-            while (i--) {\r\n-                vm._watchers[i].teardown();\r\n-            }\r\n-            \u002F\u002F remove reference from data ob\r\n-            \u002F\u002F frozen object may not have observer.\r\n-            if (vm._data.__ob__) {\r\n-                vm._data.__ob__.vmCount--;\r\n-            }\r\n-            \u002F\u002F call the last hook...\r\n-            vm._isDestroyed = true;\r\n-            \u002F\u002F invoke destroy hooks on current rendered tree\r\n-            vm.__patch__(vm._vnode, null);\r\n-            \u002F\u002F fire destroyed hook\r\n-            callHook(vm, 'destroyed');\r\n-            \u002F\u002F turn off all instance listeners.\r\n-            vm.$off();\r\n-            \u002F\u002F remove __vue__ reference\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = null;\r\n-            }\r\n-            \u002F\u002F release circular reference (#6759)\r\n-            if (vm.$vnode) {\r\n-                vm.$vnode.parent = null;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function mountComponent (\r\n-        vm,\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        vm.$el = el;\r\n-        if (!vm.$options.render) {\r\n-            vm.$options.render = createEmptyVNode;\r\n-            {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\r\n-                    vm.$options.el || el) {\r\n-                    warn(\r\n-                        'You are using the runtime-only build of Vue where the template ' +\r\n-                        'compiler is not available. Either pre-compile the templates into ' +\r\n-                        'render functions, or use the compiler-included build.',\r\n-                        vm\r\n-                    );\r\n-                } else {\r\n-                    warn(\r\n-                        'Failed to mount component: template or render function not defined.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-        }\r\n-        callHook(vm, 'beforeMount');\r\n-\r\n-        var updateComponent;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (config.performance && mark) {\r\n-            updateComponent = function () {\r\n-                var name = vm._name;\r\n-                var id = vm._uid;\r\n-                var startTag = \"vue-perf-start:\" + id;\r\n-                var endTag = \"vue-perf-end:\" + id;\r\n-\r\n-                mark(startTag);\r\n-                var vnode = vm._render();\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" render\"), startTag, endTag);\r\n-\r\n-                mark(startTag);\r\n-                vm._update(vnode, hydrating);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" patch\"), startTag, endTag);\r\n-            };\r\n-        } else {\r\n-            updateComponent = function () {\r\n-                vm._update(vm._render(), hydrating);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\r\n-        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\r\n-        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\r\n-        new Watcher(vm, updateComponent, noop, {\r\n-            before: function before () {\r\n-                if (vm._isMounted && !vm._isDestroyed) {\r\n-                    callHook(vm, 'beforeUpdate');\r\n-                }\r\n-            }\r\n-        }, true \u002F* isRenderWatcher *\u002F);\r\n-        hydrating = false;\r\n-\r\n-        \u002F\u002F manually mounted instance, call mounted on self\r\n-        \u002F\u002F mounted is called for render-created child components in its inserted hook\r\n-        if (vm.$vnode == null) {\r\n-            vm._isMounted = true;\r\n-            callHook(vm, 'mounted');\r\n-        }\r\n-        return vm\r\n-    }\r\n-\r\n-    function updateChildComponent (\r\n-        vm,\r\n-        propsData,\r\n-        listeners,\r\n-        parentVnode,\r\n-        renderChildren\r\n-    ) {\r\n-        {\r\n-            isUpdatingChildComponent = true;\r\n-        }\r\n-\r\n-        \u002F\u002F determine whether component has slot children\r\n-        \u002F\u002F we need to do this before overwriting $options._renderChildren.\r\n-\r\n-        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\r\n-        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\r\n-        \u002F\u002F \"$stable\" marker.\r\n-        var newScopedSlots = parentVnode.data.scopedSlots;\r\n-        var oldScopedSlots = vm.$scopedSlots;\r\n-        var hasDynamicScopedSlot = !!(\r\n-            (newScopedSlots && !newScopedSlots.$stable) ||\r\n-            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\r\n-            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\r\n-        );\r\n-\r\n-        \u002F\u002F Any static slot children from the parent may have changed during parent's\r\n-        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\r\n-        \u002F\u002F update is necessary to ensure correctness.\r\n-        var needsForceUpdate = !!(\r\n-            renderChildren ||               \u002F\u002F has new static slots\r\n-            vm.$options._renderChildren ||  \u002F\u002F has old static slots\r\n-            hasDynamicScopedSlot\r\n-        );\r\n-\r\n-        vm.$options._parentVnode = parentVnode;\r\n-        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\r\n-\r\n-        if (vm._vnode) { \u002F\u002F update child tree's parent\r\n-            vm._vnode.parent = parentVnode;\r\n-        }\r\n-        vm.$options._renderChildren = renderChildren;\r\n-\r\n-        \u002F\u002F update $attrs and $listeners hash\r\n-        \u002F\u002F these are also reactive so they may trigger child update if the child\r\n-        \u002F\u002F used them during render\r\n-        vm.$attrs = parentVnode.data.attrs || emptyObject;\r\n-        vm.$listeners = listeners || emptyObject;\r\n-\r\n-        \u002F\u002F update props\r\n-        if (propsData && vm.$options.props) {\r\n-            toggleObserving(false);\r\n-            var props = vm._props;\r\n-            var propKeys = vm.$options._propKeys || [];\r\n-            for (var i = 0; i \u003C propKeys.length; i++) {\r\n-                var key = propKeys[i];\r\n-                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\r\n-                props[key] = validateProp(key, propOptions, propsData, vm);\r\n-            }\r\n-            toggleObserving(true);\r\n-            \u002F\u002F keep a copy of raw propsData\r\n-            vm.$options.propsData = propsData;\r\n-        }\r\n-\r\n-        \u002F\u002F update listeners\r\n-        listeners = listeners || emptyObject;\r\n-        var oldListeners = vm.$options._parentListeners;\r\n-        vm.$options._parentListeners = listeners;\r\n-        updateComponentListeners(vm, listeners, oldListeners);\r\n-\r\n-        \u002F\u002F resolve slots + force update if has children\r\n-        if (needsForceUpdate) {\r\n-            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\r\n-            vm.$forceUpdate();\r\n-        }\r\n-\r\n-        {\r\n-            isUpdatingChildComponent = false;\r\n-        }\r\n-    }\r\n-\r\n-    function isInInactiveTree (vm) {\r\n-        while (vm && (vm = vm.$parent)) {\r\n-            if (vm._inactive) { return true }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function activateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = false;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        } else if (vm._directInactive) {\r\n-            return\r\n-        }\r\n-        if (vm._inactive || vm._inactive === null) {\r\n-            vm._inactive = false;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                activateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'activated');\r\n-        }\r\n-    }\r\n-\r\n-    function deactivateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = true;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        }\r\n-        if (!vm._inactive) {\r\n-            vm._inactive = true;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                deactivateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'deactivated');\r\n-        }\r\n-    }\r\n-\r\n-    function callHook (vm, hook) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\r\n-        pushTarget();\r\n-        var handlers = vm.$options[hook];\r\n-        var info = hook + \" hook\";\r\n-        if (handlers) {\r\n-            for (var i = 0, j = handlers.length; i \u003C j; i++) {\r\n-                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\r\n-            }\r\n-        }\r\n-        if (vm._hasHookEvent) {\r\n-            vm.$emit('hook:' + hook);\r\n-        }\r\n-        popTarget();\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var MAX_UPDATE_COUNT = 100;\r\n-\r\n-    var queue = [];\r\n-    var activatedChildren = [];\r\n-    var has = {};\r\n-    var circular = {};\r\n-    var waiting = false;\r\n-    var flushing = false;\r\n-    var index = 0;\r\n-\r\n-    \u002F**\r\n-     * Reset the scheduler's state.\r\n-     *\u002F\r\n-    function resetSchedulerState () {\r\n-        index = queue.length = activatedChildren.length = 0;\r\n-        has = {};\r\n-        {\r\n-            circular = {};\r\n-        }\r\n-        waiting = flushing = false;\r\n-    }\r\n-\r\n-    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\r\n-    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\r\n-    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\r\n-    \u002F\u002F every time the scheduler flushes and use that for all event listeners\r\n-    \u002F\u002F attached during that flush.\r\n-    var currentFlushTimestamp = 0;\r\n-\r\n-    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\r\n-    var getNow = Date.now;\r\n-\r\n-    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\r\n-    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\r\n-    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\r\n-    \u002F\u002F same timestamp type when saving the flush timestamp.\r\n-    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\r\n-    \u002F\u002F implementations (#9632)\r\n-    if (inBrowser && !isIE) {\r\n-        var performance = window.performance;\r\n-        if (\r\n-            performance &&\r\n-            typeof performance.now === 'function' &&\r\n-            getNow() > document.createEvent('Event').timeStamp\r\n-        ) {\r\n-            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\r\n-            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\r\n-            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\r\n-            \u002F\u002F well.\r\n-            getNow = function () { return performance.now(); };\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Flush both queues and run the watchers.\r\n-     *\u002F\r\n-    function flushSchedulerQueue () {\r\n-        currentFlushTimestamp = getNow();\r\n-        flushing = true;\r\n-        var watcher, id;\r\n-\r\n-        \u002F\u002F Sort queue before flush.\r\n-        \u002F\u002F This ensures that:\r\n-        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\r\n-        \u002F\u002F    created before the child)\r\n-        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\r\n-        \u002F\u002F    user watchers are created before the render watcher)\r\n-        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\r\n-        \u002F\u002F    its watchers can be skipped.\r\n-        queue.sort(function (a, b) { return a.id - b.id; });\r\n-\r\n-        \u002F\u002F do not cache length because more watchers might be pushed\r\n-        \u002F\u002F as we run existing watchers\r\n-        for (index = 0; index \u003C queue.length; index++) {\r\n-            watcher = queue[index];\r\n-            if (watcher.before) {\r\n-                watcher.before();\r\n-            }\r\n-            id = watcher.id;\r\n-            has[id] = null;\r\n-            watcher.run();\r\n-            \u002F\u002F in dev build, check and stop circular updates.\r\n-            if (has[id] != null) {\r\n-                circular[id] = (circular[id] || 0) + 1;\r\n-                if (circular[id] > MAX_UPDATE_COUNT) {\r\n-                    warn(\r\n-                        'You may have an infinite update loop ' + (\r\n-                            watcher.user\r\n-                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\r\n-                                : \"in a component render function.\"\r\n-                        ),\r\n-                        watcher.vm\r\n-                    );\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F keep copies of post queues before resetting state\r\n-        var activatedQueue = activatedChildren.slice();\r\n-        var updatedQueue = queue.slice();\r\n-\r\n-        resetSchedulerState();\r\n-\r\n-        \u002F\u002F call component updated and activated hooks\r\n-        callActivatedHooks(activatedQueue);\r\n-        callUpdatedHooks(updatedQueue);\r\n-\r\n-        \u002F\u002F devtool hook\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (devtools && config.devtools) {\r\n-            devtools.emit('flush');\r\n-        }\r\n-    }\r\n-\r\n-    function callUpdatedHooks (queue) {\r\n-        var i = queue.length;\r\n-        while (i--) {\r\n-            var watcher = queue[i];\r\n-            var vm = watcher.vm;\r\n-            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\r\n-                callHook(vm, 'updated');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Queue a kept-alive component that was activated during patch.\r\n-     * The queue will be processed after the entire tree has been patched.\r\n-     *\u002F\r\n-    function queueActivatedComponent (vm) {\r\n-        \u002F\u002F setting _inactive to false here so that a render function can\r\n-        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\r\n-        vm._inactive = false;\r\n-        activatedChildren.push(vm);\r\n-    }\r\n-\r\n-    function callActivatedHooks (queue) {\r\n-        for (var i = 0; i \u003C queue.length; i++) {\r\n-            queue[i]._inactive = true;\r\n-            activateChildComponent(queue[i], true \u002F* true *\u002F);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Push a watcher into the watcher queue.\r\n-     * Jobs with duplicate IDs will be skipped unless it's\r\n-     * pushed when the queue is being flushed.\r\n-     *\u002F\r\n-    function queueWatcher (watcher) {\r\n-        var id = watcher.id;\r\n-        if (has[id] == null) {\r\n-            has[id] = true;\r\n-            if (!flushing) {\r\n-                queue.push(watcher);\r\n-            } else {\r\n-                \u002F\u002F if already flushing, splice the watcher based on its id\r\n-                \u002F\u002F if already past its id, it will be run next immediately.\r\n-                var i = queue.length - 1;\r\n-                while (i > index && queue[i].id > watcher.id) {\r\n-                    i--;\r\n-                }\r\n-                queue.splice(i + 1, 0, watcher);\r\n-            }\r\n-            \u002F\u002F queue the flush\r\n-            if (!waiting) {\r\n-                waiting = true;\r\n-\r\n-                if (!config.async) {\r\n-                    flushSchedulerQueue();\r\n-                    return\r\n-                }\r\n-                nextTick(flushSchedulerQueue);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var uid$2 = 0;\r\n-\r\n-    \u002F**\r\n-     * A watcher parses an expression, collects dependencies,\r\n-     * and fires callback when the expression value changes.\r\n-     * This is used for both the $watch() api and directives.\r\n-     *\u002F\r\n-    var Watcher = function Watcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        cb,\r\n-        options,\r\n-        isRenderWatcher\r\n-    ) {\r\n-        this.vm = vm;\r\n-        if (isRenderWatcher) {\r\n-            vm._watcher = this;\r\n-        }\r\n-        vm._watchers.push(this);\r\n-        \u002F\u002F options\r\n-        if (options) {\r\n-            this.deep = !!options.deep;\r\n-            this.user = !!options.user;\r\n-            this.lazy = !!options.lazy;\r\n-            this.sync = !!options.sync;\r\n-            this.before = options.before;\r\n-        } else {\r\n-            this.deep = this.user = this.lazy = this.sync = false;\r\n-        }\r\n-        this.cb = cb;\r\n-        this.id = ++uid$2; \u002F\u002F uid for batching\r\n-        this.active = true;\r\n-        this.dirty = this.lazy; \u002F\u002F for lazy watchers\r\n-        this.deps = [];\r\n-        this.newDeps = [];\r\n-        this.depIds = new _Set();\r\n-        this.newDepIds = new _Set();\r\n-        this.expression = expOrFn.toString();\r\n-        \u002F\u002F parse expression for getter\r\n-        if (typeof expOrFn === 'function') {\r\n-            this.getter = expOrFn;\r\n-        } else {\r\n-            this.getter = parsePath(expOrFn);\r\n-            if (!this.getter) {\r\n-                this.getter = noop;\r\n-                warn(\r\n-                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\r\n-                    'Watcher only accepts simple dot-delimited paths. ' +\r\n-                    'For full control, use a function instead.',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-        this.value = this.lazy\r\n-            ? undefined\r\n-            : this.get();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the getter, and re-collect dependencies.\r\n-     *\u002F\r\n-    Watcher.prototype.get = function get () {\r\n-        pushTarget(this);\r\n-        var value;\r\n-        var vm = this.vm;\r\n-        try {\r\n-            value = this.getter.call(vm, vm);\r\n-        } catch (e) {\r\n-            if (this.user) {\r\n-                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-            } else {\r\n-                throw e\r\n-            }\r\n-        } finally {\r\n-            \u002F\u002F \"touch\" every property so they are all tracked as\r\n-            \u002F\u002F dependencies for deep watching\r\n-            if (this.deep) {\r\n-                traverse(value);\r\n-            }\r\n-            popTarget();\r\n-            this.cleanupDeps();\r\n-        }\r\n-        return value\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Add a dependency to this directive.\r\n-     *\u002F\r\n-    Watcher.prototype.addDep = function addDep (dep) {\r\n-        var id = dep.id;\r\n-        if (!this.newDepIds.has(id)) {\r\n-            this.newDepIds.add(id);\r\n-            this.newDeps.push(dep);\r\n-            if (!this.depIds.has(id)) {\r\n-                dep.addSub(this);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Clean up for dependency collection.\r\n-     *\u002F\r\n-    Watcher.prototype.cleanupDeps = function cleanupDeps () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            var dep = this.deps[i];\r\n-            if (!this.newDepIds.has(dep.id)) {\r\n-                dep.removeSub(this);\r\n-            }\r\n-        }\r\n-        var tmp = this.depIds;\r\n-        this.depIds = this.newDepIds;\r\n-        this.newDepIds = tmp;\r\n-        this.newDepIds.clear();\r\n-        tmp = this.deps;\r\n-        this.deps = this.newDeps;\r\n-        this.newDeps = tmp;\r\n-        this.newDeps.length = 0;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Subscriber interface.\r\n-     * Will be called when a dependency changes.\r\n-     *\u002F\r\n-    Watcher.prototype.update = function update () {\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (this.lazy) {\r\n-            this.dirty = true;\r\n-        } else if (this.sync) {\r\n-            this.run();\r\n-        } else {\r\n-            queueWatcher(this);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Scheduler job interface.\r\n-     * Will be called by the scheduler.\r\n-     *\u002F\r\n-    Watcher.prototype.run = function run () {\r\n-        if (this.active) {\r\n-            var value = this.get();\r\n-            if (\r\n-                value !== this.value ||\r\n-                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\r\n-                \u002F\u002F when the value is the same, because the value may\r\n-                \u002F\u002F have mutated.\r\n-                isObject(value) ||\r\n-                this.deep\r\n-            ) {\r\n-                \u002F\u002F set new value\r\n-                var oldValue = this.value;\r\n-                this.value = value;\r\n-                if (this.user) {\r\n-                    try {\r\n-                        this.cb.call(this.vm, value, oldValue);\r\n-                    } catch (e) {\r\n-                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-                    }\r\n-                } else {\r\n-                    this.cb.call(this.vm, value, oldValue);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the value of the watcher.\r\n-     * This only gets called for lazy watchers.\r\n-     *\u002F\r\n-    Watcher.prototype.evaluate = function evaluate () {\r\n-        this.value = this.get();\r\n-        this.dirty = false;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Depend on all deps collected by this watcher.\r\n-     *\u002F\r\n-    Watcher.prototype.depend = function depend () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            this.deps[i].depend();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Remove self from all dependencies' subscriber list.\r\n-     *\u002F\r\n-    Watcher.prototype.teardown = function teardown () {\r\n-        if (this.active) {\r\n-            \u002F\u002F remove self from vm's watcher list\r\n-            \u002F\u002F this is a somewhat expensive operation so we skip it\r\n-            \u002F\u002F if the vm is being destroyed.\r\n-            if (!this.vm._isBeingDestroyed) {\r\n-                remove(this.vm._watchers, this);\r\n-            }\r\n-            var i = this.deps.length;\r\n-            while (i--) {\r\n-                this.deps[i].removeSub(this);\r\n-            }\r\n-            this.active = false;\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var sharedPropertyDefinition = {\r\n-        enumerable: true,\r\n-        configurable: true,\r\n-        get: noop,\r\n-        set: noop\r\n-    };\r\n-\r\n-    function proxy (target, sourceKey, key) {\r\n-        sharedPropertyDefinition.get = function proxyGetter () {\r\n-            return this[sourceKey][key]\r\n-        };\r\n-        sharedPropertyDefinition.set = function proxySetter (val) {\r\n-            this[sourceKey][key] = val;\r\n-        };\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function initState (vm) {\r\n-        vm._watchers = [];\r\n-        var opts = vm.$options;\r\n-        if (opts.props) { initProps(vm, opts.props); }\r\n-        if (opts.methods) { initMethods(vm, opts.methods); }\r\n-        if (opts.data) {\r\n-            initData(vm);\r\n-        } else {\r\n-            observe(vm._data = {}, true \u002F* asRootData *\u002F);\r\n-        }\r\n-        if (opts.computed) { initComputed(vm, opts.computed); }\r\n-        if (opts.watch && opts.watch !== nativeWatch) {\r\n-            initWatch(vm, opts.watch);\r\n-        }\r\n-    }\r\n-\r\n-    function initProps (vm, propsOptions) {\r\n-        var propsData = vm.$options.propsData || {};\r\n-        var props = vm._props = {};\r\n-        \u002F\u002F cache prop keys so that future props updates can iterate using Array\r\n-        \u002F\u002F instead of dynamic object key enumeration.\r\n-        var keys = vm.$options._propKeys = [];\r\n-        var isRoot = !vm.$parent;\r\n-        \u002F\u002F root instance props should be converted\r\n-        if (!isRoot) {\r\n-            toggleObserving(false);\r\n-        }\r\n-        var loop = function ( key ) {\r\n-            keys.push(key);\r\n-            var value = validateProp(key, propsOptions, propsData, vm);\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                var hyphenatedKey = hyphenate(key);\r\n-                if (isReservedAttribute(hyphenatedKey) ||\r\n-                    config.isReservedAttr(hyphenatedKey)) {\r\n-                    warn(\r\n-                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                defineReactive$$1(props, key, value, function () {\r\n-                    if (!isRoot && !isUpdatingChildComponent) {\r\n-                        warn(\r\n-                            \"Avoid mutating a prop directly since the value will be \" +\r\n-                            \"overwritten whenever the parent component re-renders. \" +\r\n-                            \"Instead, use a data or computed property based on the prop's \" +\r\n-                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                });\r\n-            }\r\n-            \u002F\u002F static props are already proxied on the component's prototype\r\n-            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\r\n-            \u002F\u002F instantiation here.\r\n-            if (!(key in vm)) {\r\n-                proxy(vm, \"_props\", key);\r\n-            }\r\n-        };\r\n-\r\n-        for (var key in propsOptions) loop( key );\r\n-        toggleObserving(true);\r\n-    }\r\n-\r\n-    function initData (vm) {\r\n-        var data = vm.$options.data;\r\n-        data = vm._data = typeof data === 'function'\r\n-            ? getData(data, vm)\r\n-            : data || {};\r\n-        if (!isPlainObject(data)) {\r\n-            data = {};\r\n-            warn(\r\n-                'data functions should return an object:\\n' +\r\n-                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F proxy data on instance\r\n-        var keys = Object.keys(data);\r\n-        var props = vm.$options.props;\r\n-        var methods = vm.$options.methods;\r\n-        var i = keys.length;\r\n-        while (i--) {\r\n-            var key = keys[i];\r\n-            {\r\n-                if (methods && hasOwn(methods, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (props && hasOwn(props, key)) {\r\n-                warn(\r\n-                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\r\n-                    \"Use prop default value instead.\",\r\n-                    vm\r\n-                );\r\n-            } else if (!isReserved(key)) {\r\n-                proxy(vm, \"_data\", key);\r\n-            }\r\n-        }\r\n-        \u002F\u002F observe data\r\n-        observe(data, true \u002F* asRootData *\u002F);\r\n-    }\r\n-\r\n-    function getData (data, vm) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking data getters\r\n-        pushTarget();\r\n-        try {\r\n-            return data.call(vm, vm)\r\n-        } catch (e) {\r\n-            handleError(e, vm, \"data()\");\r\n-            return {}\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    var computedWatcherOptions = { lazy: true };\r\n-\r\n-    function initComputed (vm, computed) {\r\n-        \u002F\u002F $flow-disable-line\r\n-        var watchers = vm._computedWatchers = Object.create(null);\r\n-        \u002F\u002F computed properties are just getters during SSR\r\n-        var isSSR = isServerRendering();\r\n-\r\n-        for (var key in computed) {\r\n-            var userDef = computed[key];\r\n-            var getter = typeof userDef === 'function' ? userDef : userDef.get;\r\n-            if (getter == null) {\r\n-                warn(\r\n-                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\r\n-                    vm\r\n-                );\r\n-            }\r\n-\r\n-            if (!isSSR) {\r\n-                \u002F\u002F create internal watcher for the computed property.\r\n-                watchers[key] = new Watcher(\r\n-                    vm,\r\n-                    getter || noop,\r\n-                    noop,\r\n-                    computedWatcherOptions\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F component-defined computed properties are already defined on the\r\n-            \u002F\u002F component prototype. We only need to define computed properties defined\r\n-            \u002F\u002F at instantiation here.\r\n-            if (!(key in vm)) {\r\n-                defineComputed(vm, key, userDef);\r\n-            } else {\r\n-                if (key in vm.$data) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\r\n-                } else if (vm.$options.props && key in vm.$options.props) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function defineComputed (\r\n-        target,\r\n-        key,\r\n-        userDef\r\n-    ) {\r\n-        var shouldCache = !isServerRendering();\r\n-        if (typeof userDef === 'function') {\r\n-            sharedPropertyDefinition.get = shouldCache\r\n-                ? createComputedGetter(key)\r\n-                : createGetterInvoker(userDef);\r\n-            sharedPropertyDefinition.set = noop;\r\n-        } else {\r\n-            sharedPropertyDefinition.get = userDef.get\r\n-                ? shouldCache && userDef.cache !== false\r\n-                    ? createComputedGetter(key)\r\n-                    : createGetterInvoker(userDef.get)\r\n-                : noop;\r\n-            sharedPropertyDefinition.set = userDef.set || noop;\r\n-        }\r\n-        if (sharedPropertyDefinition.set === noop) {\r\n-            sharedPropertyDefinition.set = function () {\r\n-                warn(\r\n-                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\r\n-                    this\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function createComputedGetter (key) {\r\n-        return function computedGetter () {\r\n-            var watcher = this._computedWatchers && this._computedWatchers[key];\r\n-            if (watcher) {\r\n-                if (watcher.dirty) {\r\n-                    watcher.evaluate();\r\n-                }\r\n-                if (Dep.target) {\r\n-                    watcher.depend();\r\n-                }\r\n-                return watcher.value\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createGetterInvoker(fn) {\r\n-        return function computedGetter () {\r\n-            return fn.call(this, this)\r\n-        }\r\n-    }\r\n-\r\n-    function initMethods (vm, methods) {\r\n-        var props = vm.$options.props;\r\n-        for (var key in methods) {\r\n-            {\r\n-                if (typeof methods[key] !== 'function') {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\r\n-                        \"Did you reference the function correctly?\",\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if (props && hasOwn(props, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if ((key in vm) && isReserved(key)) {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\r\n-                        \"Avoid defining component methods that start with _ or $.\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\r\n-        }\r\n-    }\r\n-\r\n-    function initWatch (vm, watch) {\r\n-        for (var key in watch) {\r\n-            var handler = watch[key];\r\n-            if (Array.isArray(handler)) {\r\n-                for (var i = 0; i \u003C handler.length; i++) {\r\n-                    createWatcher(vm, key, handler[i]);\r\n-                }\r\n-            } else {\r\n-                createWatcher(vm, key, handler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createWatcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        handler,\r\n-        options\r\n-    ) {\r\n-        if (isPlainObject(handler)) {\r\n-            options = handler;\r\n-            handler = handler.handler;\r\n-        }\r\n-        if (typeof handler === 'string') {\r\n-            handler = vm[handler];\r\n-        }\r\n-        return vm.$watch(expOrFn, handler, options)\r\n-    }\r\n-\r\n-    function stateMixin (Vue) {\r\n-        \u002F\u002F flow somehow has problems with directly declared definition object\r\n-        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\r\n-        \u002F\u002F the object here.\r\n-        var dataDef = {};\r\n-        dataDef.get = function () { return this._data };\r\n-        var propsDef = {};\r\n-        propsDef.get = function () { return this._props };\r\n-        {\r\n-            dataDef.set = function () {\r\n-                warn(\r\n-                    'Avoid replacing instance root $data. ' +\r\n-                    'Use nested data properties instead.',\r\n-                    this\r\n-                );\r\n-            };\r\n-            propsDef.set = function () {\r\n-                warn(\"$props is readonly.\", this);\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue.prototype, '$data', dataDef);\r\n-        Object.defineProperty(Vue.prototype, '$props', propsDef);\r\n-\r\n-        Vue.prototype.$set = set;\r\n-        Vue.prototype.$delete = del;\r\n-\r\n-        Vue.prototype.$watch = function (\r\n-            expOrFn,\r\n-            cb,\r\n-            options\r\n-        ) {\r\n-            var vm = this;\r\n-            if (isPlainObject(cb)) {\r\n-                return createWatcher(vm, expOrFn, cb, options)\r\n-            }\r\n-            options = options || {};\r\n-            options.user = true;\r\n-            var watcher = new Watcher(vm, expOrFn, cb, options);\r\n-            if (options.immediate) {\r\n-                try {\r\n-                    cb.call(vm, watcher.value);\r\n-                } catch (error) {\r\n-                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\r\n-                }\r\n-            }\r\n-            return function unwatchFn () {\r\n-                watcher.teardown();\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid$3 = 0;\r\n-\r\n-    function initMixin (Vue) {\r\n-        Vue.prototype._init = function (options) {\r\n-            var vm = this;\r\n-            \u002F\u002F a uid\r\n-            vm._uid = uid$3++;\r\n-\r\n-            var startTag, endTag;\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                startTag = \"vue-perf-start:\" + (vm._uid);\r\n-                endTag = \"vue-perf-end:\" + (vm._uid);\r\n-                mark(startTag);\r\n-            }\r\n-\r\n-            \u002F\u002F a flag to avoid this being observed\r\n-            vm._isVue = true;\r\n-            \u002F\u002F merge options\r\n-            if (options && options._isComponent) {\r\n-                \u002F\u002F optimize internal component instantiation\r\n-                \u002F\u002F since dynamic options merging is pretty slow, and none of the\r\n-                \u002F\u002F internal component options needs special treatment.\r\n-                initInternalComponent(vm, options);\r\n-            } else {\r\n-                vm.$options = mergeOptions(\r\n-                    resolveConstructorOptions(vm.constructor),\r\n-                    options || {},\r\n-                    vm\r\n-                );\r\n-            }\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                initProxy(vm);\r\n-            }\r\n-            \u002F\u002F expose real self\r\n-            vm._self = vm;\r\n-            initLifecycle(vm);\r\n-            initEvents(vm);\r\n-            initRender(vm);\r\n-            callHook(vm, 'beforeCreate');\r\n-            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\r\n-            initState(vm);\r\n-            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\r\n-            callHook(vm, 'created');\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                vm._name = formatComponentName(vm, false);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\r\n-            }\r\n-\r\n-            if (vm.$options.el) {\r\n-                vm.$mount(vm.$options.el);\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function initInternalComponent (vm, options) {\r\n-        var opts = vm.$options = Object.create(vm.constructor.options);\r\n-        \u002F\u002F doing this because it's faster than dynamic enumeration.\r\n-        var parentVnode = options._parentVnode;\r\n-        opts.parent = options.parent;\r\n-        opts._parentVnode = parentVnode;\r\n-\r\n-        var vnodeComponentOptions = parentVnode.componentOptions;\r\n-        opts.propsData = vnodeComponentOptions.propsData;\r\n-        opts._parentListeners = vnodeComponentOptions.listeners;\r\n-        opts._renderChildren = vnodeComponentOptions.children;\r\n-        opts._componentTag = vnodeComponentOptions.tag;\r\n-\r\n-        if (options.render) {\r\n-            opts.render = options.render;\r\n-            opts.staticRenderFns = options.staticRenderFns;\r\n-        }\r\n-    }\r\n-\r\n-    function resolveConstructorOptions (Ctor) {\r\n-        var options = Ctor.options;\r\n-        if (Ctor.super) {\r\n-            var superOptions = resolveConstructorOptions(Ctor.super);\r\n-            var cachedSuperOptions = Ctor.superOptions;\r\n-            if (superOptions !== cachedSuperOptions) {\r\n-                \u002F\u002F super option changed,\r\n-                \u002F\u002F need to resolve new options.\r\n-                Ctor.superOptions = superOptions;\r\n-                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\r\n-                var modifiedOptions = resolveModifiedOptions(Ctor);\r\n-                \u002F\u002F update base extend options\r\n-                if (modifiedOptions) {\r\n-                    extend(Ctor.extendOptions, modifiedOptions);\r\n-                }\r\n-                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\r\n-                if (options.name) {\r\n-                    options.components[options.name] = Ctor;\r\n-                }\r\n-            }\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    function resolveModifiedOptions (Ctor) {\r\n-        var modified;\r\n-        var latest = Ctor.options;\r\n-        var sealed = Ctor.sealedOptions;\r\n-        for (var key in latest) {\r\n-            if (latest[key] !== sealed[key]) {\r\n-                if (!modified) { modified = {}; }\r\n-                modified[key] = latest[key];\r\n-            }\r\n-        }\r\n-        return modified\r\n-    }\r\n-\r\n-    function Vue (options) {\r\n-        if (!(this instanceof Vue)\r\n-        ) {\r\n-            warn('Vue is a constructor and should be called with the `new` keyword');\r\n-        }\r\n-        this._init(options);\r\n-    }\r\n-\r\n-    initMixin(Vue);\r\n-    stateMixin(Vue);\r\n-    eventsMixin(Vue);\r\n-    lifecycleMixin(Vue);\r\n-    renderMixin(Vue);\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initUse (Vue) {\r\n-        Vue.use = function (plugin) {\r\n-            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\r\n-            if (installedPlugins.indexOf(plugin) > -1) {\r\n-                return this\r\n-            }\r\n-\r\n-            \u002F\u002F additional parameters\r\n-            var args = toArray(arguments, 1);\r\n-            args.unshift(this);\r\n-            if (typeof plugin.install === 'function') {\r\n-                plugin.install.apply(plugin, args);\r\n-            } else if (typeof plugin === 'function') {\r\n-                plugin.apply(null, args);\r\n-            }\r\n-            installedPlugins.push(plugin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initMixin$1 (Vue) {\r\n-        Vue.mixin = function (mixin) {\r\n-            this.options = mergeOptions(this.options, mixin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initExtend (Vue) {\r\n-        \u002F**\r\n-         * Each instance constructor, including Vue, has a unique\r\n-         * cid. This enables us to create wrapped \"child\r\n-         * constructors\" for prototypal inheritance and cache them.\r\n-         *\u002F\r\n-        Vue.cid = 0;\r\n-        var cid = 1;\r\n-\r\n-        \u002F**\r\n-         * Class inheritance\r\n-         *\u002F\r\n-        Vue.extend = function (extendOptions) {\r\n-            extendOptions = extendOptions || {};\r\n-            var Super = this;\r\n-            var SuperId = Super.cid;\r\n-            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\r\n-            if (cachedCtors[SuperId]) {\r\n-                return cachedCtors[SuperId]\r\n-            }\r\n-\r\n-            var name = extendOptions.name || Super.options.name;\r\n-            if (name) {\r\n-                validateComponentName(name);\r\n-            }\r\n-\r\n-            var Sub = function VueComponent (options) {\r\n-                this._init(options);\r\n-            };\r\n-            Sub.prototype = Object.create(Super.prototype);\r\n-            Sub.prototype.constructor = Sub;\r\n-            Sub.cid = cid++;\r\n-            Sub.options = mergeOptions(\r\n-                Super.options,\r\n-                extendOptions\r\n-            );\r\n-            Sub['super'] = Super;\r\n-\r\n-            \u002F\u002F For props and computed properties, we define the proxy getters on\r\n-            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\r\n-            \u002F\u002F avoids Object.defineProperty calls for each instance created.\r\n-            if (Sub.options.props) {\r\n-                initProps$1(Sub);\r\n-            }\r\n-            if (Sub.options.computed) {\r\n-                initComputed$1(Sub);\r\n-            }\r\n-\r\n-            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\r\n-            Sub.extend = Super.extend;\r\n-            Sub.mixin = Super.mixin;\r\n-            Sub.use = Super.use;\r\n-\r\n-            \u002F\u002F create asset registers, so extended classes\r\n-            \u002F\u002F can have their private assets too.\r\n-            ASSET_TYPES.forEach(function (type) {\r\n-                Sub[type] = Super[type];\r\n-            });\r\n-            \u002F\u002F enable recursive self-lookup\r\n-            if (name) {\r\n-                Sub.options.components[name] = Sub;\r\n-            }\r\n-\r\n-            \u002F\u002F keep a reference to the super options at extension time.\r\n-            \u002F\u002F later at instantiation we can check if Super's options have\r\n-            \u002F\u002F been updated.\r\n-            Sub.superOptions = Super.options;\r\n-            Sub.extendOptions = extendOptions;\r\n-            Sub.sealedOptions = extend({}, Sub.options);\r\n-\r\n-            \u002F\u002F cache constructor\r\n-            cachedCtors[SuperId] = Sub;\r\n-            return Sub\r\n-        };\r\n-    }\r\n-\r\n-    function initProps$1 (Comp) {\r\n-        var props = Comp.options.props;\r\n-        for (var key in props) {\r\n-            proxy(Comp.prototype, \"_props\", key);\r\n-        }\r\n-    }\r\n-\r\n-    function initComputed$1 (Comp) {\r\n-        var computed = Comp.options.computed;\r\n-        for (var key in computed) {\r\n-            defineComputed(Comp.prototype, key, computed[key]);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initAssetRegisters (Vue) {\r\n-        \u002F**\r\n-         * Create asset registration methods.\r\n-         *\u002F\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue[type] = function (\r\n-                id,\r\n-                definition\r\n-            ) {\r\n-                if (!definition) {\r\n-                    return this.options[type + 's'][id]\r\n-                } else {\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (type === 'component') {\r\n-                        validateComponentName(id);\r\n-                    }\r\n-                    if (type === 'component' && isPlainObject(definition)) {\r\n-                        definition.name = definition.name || id;\r\n-                        definition = this.options._base.extend(definition);\r\n-                    }\r\n-                    if (type === 'directive' && typeof definition === 'function') {\r\n-                        definition = { bind: definition, update: definition };\r\n-                    }\r\n-                    this.options[type + 's'][id] = definition;\r\n-                    return definition\r\n-                }\r\n-            };\r\n-        });\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function getComponentName (opts) {\r\n-        return opts && (opts.Ctor.options.name || opts.tag)\r\n-    }\r\n-\r\n-    function matches (pattern, name) {\r\n-        if (Array.isArray(pattern)) {\r\n-            return pattern.indexOf(name) > -1\r\n-        } else if (typeof pattern === 'string') {\r\n-            return pattern.split(',').indexOf(name) > -1\r\n-        } else if (isRegExp(pattern)) {\r\n-            return pattern.test(name)\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return false\r\n-    }\r\n-\r\n-    function pruneCache (keepAliveInstance, filter) {\r\n-        var cache = keepAliveInstance.cache;\r\n-        var keys = keepAliveInstance.keys;\r\n-        var _vnode = keepAliveInstance._vnode;\r\n-        for (var key in cache) {\r\n-            var cachedNode = cache[key];\r\n-            if (cachedNode) {\r\n-                var name = getComponentName(cachedNode.componentOptions);\r\n-                if (name && !filter(name)) {\r\n-                    pruneCacheEntry(cache, key, keys, _vnode);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function pruneCacheEntry (\r\n-        cache,\r\n-        key,\r\n-        keys,\r\n-        current\r\n-    ) {\r\n-        var cached$$1 = cache[key];\r\n-        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\r\n-            cached$$1.componentInstance.$destroy();\r\n-        }\r\n-        cache[key] = null;\r\n-        remove(keys, key);\r\n-    }\r\n-\r\n-    var patternTypes = [String, RegExp, Array];\r\n-\r\n-    var KeepAlive = {\r\n-        name: 'keep-alive',\r\n-        abstract: true,\r\n-\r\n-        props: {\r\n-            include: patternTypes,\r\n-            exclude: patternTypes,\r\n-            max: [String, Number]\r\n-        },\r\n-\r\n-        created: function created () {\r\n-            this.cache = Object.create(null);\r\n-            this.keys = [];\r\n-        },\r\n-\r\n-        destroyed: function destroyed () {\r\n-            for (var key in this.cache) {\r\n-                pruneCacheEntry(this.cache, key, this.keys);\r\n-            }\r\n-        },\r\n-\r\n-        mounted: function mounted () {\r\n-            var this$1 = this;\r\n-\r\n-            this.$watch('include', function (val) {\r\n-                pruneCache(this$1, function (name) { return matches(val, name); });\r\n-            });\r\n-            this.$watch('exclude', function (val) {\r\n-                pruneCache(this$1, function (name) { return !matches(val, name); });\r\n-            });\r\n-        },\r\n-\r\n-        render: function render () {\r\n-            var slot = this.$slots.default;\r\n-            var vnode = getFirstComponentChild(slot);\r\n-            var componentOptions = vnode && vnode.componentOptions;\r\n-            if (componentOptions) {\r\n-                \u002F\u002F check pattern\r\n-                var name = getComponentName(componentOptions);\r\n-                var ref = this;\r\n-                var include = ref.include;\r\n-                var exclude = ref.exclude;\r\n-                if (\r\n-                    \u002F\u002F not included\r\n-                (include && (!name || !matches(include, name))) ||\r\n-                \u002F\u002F excluded\r\n-                (exclude && name && matches(exclude, name))\r\n-                ) {\r\n-                    return vnode\r\n-                }\r\n-\r\n-                var ref$1 = this;\r\n-                var cache = ref$1.cache;\r\n-                var keys = ref$1.keys;\r\n-                var key = vnode.key == null\r\n-                    \u002F\u002F same constructor may get registered as different local components\r\n-                    \u002F\u002F so cid alone is not enough (#3269)\r\n-                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\r\n-                    : vnode.key;\r\n-                if (cache[key]) {\r\n-                    vnode.componentInstance = cache[key].componentInstance;\r\n-                    \u002F\u002F make current key freshest\r\n-                    remove(keys, key);\r\n-                    keys.push(key);\r\n-                } else {\r\n-                    cache[key] = vnode;\r\n-                    keys.push(key);\r\n-                    \u002F\u002F prune oldest entry\r\n-                    if (this.max && keys.length > parseInt(this.max)) {\r\n-                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.data.keepAlive = true;\r\n-            }\r\n-            return vnode || (slot && slot[0])\r\n-        }\r\n-    };\r\n-\r\n-    var builtInComponents = {\r\n-        KeepAlive: KeepAlive\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initGlobalAPI (Vue) {\r\n-        \u002F\u002F config\r\n-        var configDef = {};\r\n-        configDef.get = function () { return config; };\r\n-        {\r\n-            configDef.set = function () {\r\n-                warn(\r\n-                    'Do not replace the Vue.config object, set individual fields instead.'\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue, 'config', configDef);\r\n-\r\n-        \u002F\u002F exposed util methods.\r\n-        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\r\n-        \u002F\u002F them unless you are aware of the risk.\r\n-        Vue.util = {\r\n-            warn: warn,\r\n-            extend: extend,\r\n-            mergeOptions: mergeOptions,\r\n-            defineReactive: defineReactive$$1\r\n-        };\r\n-\r\n-        Vue.set = set;\r\n-        Vue.delete = del;\r\n-        Vue.nextTick = nextTick;\r\n-\r\n-        \u002F\u002F 2.6 explicit observable API\r\n-        Vue.observable = function (obj) {\r\n-            observe(obj);\r\n-            return obj\r\n-        };\r\n-\r\n-        Vue.options = Object.create(null);\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue.options[type + 's'] = Object.create(null);\r\n-        });\r\n-\r\n-        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\r\n-        \u002F\u002F components with in Weex's multi-instance scenarios.\r\n-        Vue.options._base = Vue;\r\n-\r\n-        extend(Vue.options.components, builtInComponents);\r\n-\r\n-        initUse(Vue);\r\n-        initMixin$1(Vue);\r\n-        initExtend(Vue);\r\n-        initAssetRegisters(Vue);\r\n-    }\r\n-\r\n-    initGlobalAPI(Vue);\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$isServer', {\r\n-        get: isServerRendering\r\n-    });\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$ssrContext', {\r\n-        get: function get () {\r\n-          \u002F* istanbul ignore next *\u002F\r\n-            return this.$vnode && this.$vnode.ssrContext\r\n-        }\r\n-    });\r\n-\r\n-    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\r\n-    Object.defineProperty(Vue, 'FunctionalRenderContext', {\r\n-        value: FunctionalRenderContext\r\n-    });\r\n-\r\n-    Vue.version = '2.6.10';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F these are reserved for web because they are directly compiled away\r\n-    \u002F\u002F during template compilation\r\n-    var isReservedAttr = makeMap('style,class');\r\n-\r\n-    \u002F\u002F attributes that should be using props for binding\r\n-    var acceptValue = makeMap('input,textarea,option,select,progress');\r\n-    var mustUseProp = function (tag, type, attr) {\r\n-        return (\r\n-            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\r\n-            (attr === 'selected' && tag === 'option') ||\r\n-            (attr === 'checked' && tag === 'input') ||\r\n-            (attr === 'muted' && tag === 'video')\r\n-        )\r\n-    };\r\n-\r\n-    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\r\n-\r\n-    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\r\n-\r\n-    var convertEnumeratedValue = function (key, value) {\r\n-        return isFalsyAttrValue(value) || value === 'false'\r\n-            ? 'false'\r\n-            \u002F\u002F allow arbitrary string value for contenteditable\r\n-            : key === 'contenteditable' && isValidContentEditableValue(value)\r\n-                ? value\r\n-                : 'true'\r\n-    };\r\n-\r\n-    var isBooleanAttr = makeMap(\r\n-        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\r\n-        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\r\n-        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\r\n-        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\r\n-        'required,reversed,scoped,seamless,selected,sortable,translate,' +\r\n-        'truespeed,typemustmatch,visible'\r\n-    );\r\n-\r\n-    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\r\n-\r\n-    var isXlink = function (name) {\r\n-        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\r\n-    };\r\n-\r\n-    var getXlinkProp = function (name) {\r\n-        return isXlink(name) ? name.slice(6, name.length) : ''\r\n-    };\r\n-\r\n-    var isFalsyAttrValue = function (val) {\r\n-        return val == null || val === false\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function genClassForVnode (vnode) {\r\n-        var data = vnode.data;\r\n-        var parentNode = vnode;\r\n-        var childNode = vnode;\r\n-        while (isDef(childNode.componentInstance)) {\r\n-            childNode = childNode.componentInstance._vnode;\r\n-            if (childNode && childNode.data) {\r\n-                data = mergeClassData(childNode.data, data);\r\n-            }\r\n-        }\r\n-        while (isDef(parentNode = parentNode.parent)) {\r\n-            if (parentNode && parentNode.data) {\r\n-                data = mergeClassData(data, parentNode.data);\r\n-            }\r\n-        }\r\n-        return renderClass(data.staticClass, data.class)\r\n-    }\r\n-\r\n-    function mergeClassData (child, parent) {\r\n-        return {\r\n-            staticClass: concat(child.staticClass, parent.staticClass),\r\n-            class: isDef(child.class)\r\n-                ? [child.class, parent.class]\r\n-                : parent.class\r\n-        }\r\n-    }\r\n-\r\n-    function renderClass (\r\n-        staticClass,\r\n-        dynamicClass\r\n-    ) {\r\n-        if (isDef(staticClass) || isDef(dynamicClass)) {\r\n-            return concat(staticClass, stringifyClass(dynamicClass))\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function concat (a, b) {\r\n-        return a ? b ? (a + ' ' + b) : a : (b || '')\r\n-    }\r\n-\r\n-    function stringifyClass (value) {\r\n-        if (Array.isArray(value)) {\r\n-            return stringifyArray(value)\r\n-        }\r\n-        if (isObject(value)) {\r\n-            return stringifyObject(value)\r\n-        }\r\n-        if (typeof value === 'string') {\r\n-            return value\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function stringifyArray (value) {\r\n-        var res = '';\r\n-        var stringified;\r\n-        for (var i = 0, l = value.length; i \u003C l; i++) {\r\n-            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\r\n-                if (res) { res += ' '; }\r\n-                res += stringified;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function stringifyObject (value) {\r\n-        var res = '';\r\n-        for (var key in value) {\r\n-            if (value[key]) {\r\n-                if (res) { res += ' '; }\r\n-                res += key;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var namespaceMap = {\r\n-        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\r\n-        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\r\n-    };\r\n-\r\n-    var isHTMLTag = makeMap(\r\n-        'html,body,base,head,link,meta,style,title,' +\r\n-        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\r\n-        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\r\n-        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\r\n-        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\r\n-        'embed,object,param,source,canvas,script,noscript,del,ins,' +\r\n-        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\r\n-        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\r\n-        'output,progress,select,textarea,' +\r\n-        'details,dialog,menu,menuitem,summary,' +\r\n-        'content,element,shadow,template,blockquote,iframe,tfoot'\r\n-    );\r\n-\r\n-    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\r\n-    \u002F\u002F contain child elements.\r\n-    var isSVG = makeMap(\r\n-        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\r\n-        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\r\n-        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\r\n-        true\r\n-    );\r\n-\r\n-    var isPreTag = function (tag) { return tag === 'pre'; };\r\n-\r\n-    var isReservedTag = function (tag) {\r\n-        return isHTMLTag(tag) || isSVG(tag)\r\n-    };\r\n-\r\n-    function getTagNamespace (tag) {\r\n-        if (isSVG(tag)) {\r\n-            return 'svg'\r\n-        }\r\n-        \u002F\u002F basic support for MathML\r\n-        \u002F\u002F note it doesn't support other MathML elements being component roots\r\n-        if (tag === 'math') {\r\n-            return 'math'\r\n-        }\r\n-    }\r\n-\r\n-    var unknownElementCache = Object.create(null);\r\n-    function isUnknownElement (tag) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!inBrowser) {\r\n-            return true\r\n-        }\r\n-        if (isReservedTag(tag)) {\r\n-            return false\r\n-        }\r\n-        tag = tag.toLowerCase();\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (unknownElementCache[tag] != null) {\r\n-            return unknownElementCache[tag]\r\n-        }\r\n-        var el = document.createElement(tag);\r\n-        if (tag.indexOf('-') > -1) {\r\n-            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\r\n-            return (unknownElementCache[tag] = (\r\n-                el.constructor === window.HTMLUnknownElement ||\r\n-                el.constructor === window.HTMLElement\r\n-            ))\r\n-        } else {\r\n-            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\r\n-        }\r\n-    }\r\n-\r\n-    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Query an element selector if it's not an element already.\r\n-     *\u002F\r\n-    function query (el) {\r\n-        if (typeof el === 'string') {\r\n-            var selected = document.querySelector(el);\r\n-            if (!selected) {\r\n-                warn(\r\n-                    'Cannot find element: ' + el\r\n-                );\r\n-                return document.createElement('div')\r\n-            }\r\n-            return selected\r\n-        } else {\r\n-            return el\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createElement$1 (tagName, vnode) {\r\n-        var elm = document.createElement(tagName);\r\n-        if (tagName !== 'select') {\r\n-            return elm\r\n-        }\r\n-        \u002F\u002F false or null will remove the attribute but undefined will not\r\n-        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\r\n-            elm.setAttribute('multiple', 'multiple');\r\n-        }\r\n-        return elm\r\n-    }\r\n-\r\n-    function createElementNS (namespace, tagName) {\r\n-        return document.createElementNS(namespaceMap[namespace], tagName)\r\n-    }\r\n-\r\n-    function createTextNode (text) {\r\n-        return document.createTextNode(text)\r\n-    }\r\n-\r\n-    function createComment (text) {\r\n-        return document.createComment(text)\r\n-    }\r\n-\r\n-    function insertBefore (parentNode, newNode, referenceNode) {\r\n-        parentNode.insertBefore(newNode, referenceNode);\r\n-    }\r\n-\r\n-    function removeChild (node, child) {\r\n-        node.removeChild(child);\r\n-    }\r\n-\r\n-    function appendChild (node, child) {\r\n-        node.appendChild(child);\r\n-    }\r\n-\r\n-    function parentNode (node) {\r\n-        return node.parentNode\r\n-    }\r\n-\r\n-    function nextSibling (node) {\r\n-        return node.nextSibling\r\n-    }\r\n-\r\n-    function tagName (node) {\r\n-        return node.tagName\r\n-    }\r\n-\r\n-    function setTextContent (node, text) {\r\n-        node.textContent = text;\r\n-    }\r\n-\r\n-    function setStyleScope (node, scopeId) {\r\n-        node.setAttribute(scopeId, '');\r\n-    }\r\n-\r\n-    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\r\n-        createElement: createElement$1,\r\n-        createElementNS: createElementNS,\r\n-        createTextNode: createTextNode,\r\n-        createComment: createComment,\r\n-        insertBefore: insertBefore,\r\n-        removeChild: removeChild,\r\n-        appendChild: appendChild,\r\n-        parentNode: parentNode,\r\n-        nextSibling: nextSibling,\r\n-        tagName: tagName,\r\n-        setTextContent: setTextContent,\r\n-        setStyleScope: setStyleScope\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref = {\r\n-        create: function create (_, vnode) {\r\n-            registerRef(vnode);\r\n-        },\r\n-        update: function update (oldVnode, vnode) {\r\n-            if (oldVnode.data.ref !== vnode.data.ref) {\r\n-                registerRef(oldVnode, true);\r\n-                registerRef(vnode);\r\n-            }\r\n-        },\r\n-        destroy: function destroy (vnode) {\r\n-            registerRef(vnode, true);\r\n-        }\r\n-    };\r\n-\r\n-    function registerRef (vnode, isRemoval) {\r\n-        var key = vnode.data.ref;\r\n-        if (!isDef(key)) { return }\r\n-\r\n-        var vm = vnode.context;\r\n-        var ref = vnode.componentInstance || vnode.elm;\r\n-        var refs = vm.$refs;\r\n-        if (isRemoval) {\r\n-            if (Array.isArray(refs[key])) {\r\n-                remove(refs[key], ref);\r\n-            } else if (refs[key] === ref) {\r\n-                refs[key] = undefined;\r\n-            }\r\n-        } else {\r\n-            if (vnode.data.refInFor) {\r\n-                if (!Array.isArray(refs[key])) {\r\n-                    refs[key] = [ref];\r\n-                } else if (refs[key].indexOf(ref) \u003C 0) {\r\n-                    \u002F\u002F $flow-disable-line\r\n-                    refs[key].push(ref);\r\n-                }\r\n-            } else {\r\n-                refs[key] = ref;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Virtual DOM patching algorithm based on Snabbdom by\r\n-     * Simon Friis Vindum (@paldepind)\r\n-     * Licensed under the MIT License\r\n-     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\r\n-     *\r\n-     * modified by Evan You (@yyx990803)\r\n-     *\r\n-     * Not type-checking this because this file is perf-critical and the cost\r\n-     * of making flow understand it is not worth it.\r\n-     *\u002F\r\n-\r\n-    var emptyNode = new VNode('', {}, []);\r\n-\r\n-    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\r\n-\r\n-    function sameVnode (a, b) {\r\n-        return (\r\n-            a.key === b.key && (\r\n-                (\r\n-                    a.tag === b.tag &&\r\n-                    a.isComment === b.isComment &&\r\n-                    isDef(a.data) === isDef(b.data) &&\r\n-                    sameInputType(a, b)\r\n-                ) || (\r\n-                    isTrue(a.isAsyncPlaceholder) &&\r\n-                    a.asyncFactory === b.asyncFactory &&\r\n-                    isUndef(b.asyncFactory.error)\r\n-                )\r\n-            )\r\n-        )\r\n-    }\r\n-\r\n-    function sameInputType (a, b) {\r\n-        if (a.tag !== 'input') { return true }\r\n-        var i;\r\n-        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\r\n-        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\r\n-        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\r\n-    }\r\n-\r\n-    function createKeyToOldIdx (children, beginIdx, endIdx) {\r\n-        var i, key;\r\n-        var map = {};\r\n-        for (i = beginIdx; i \u003C= endIdx; ++i) {\r\n-            key = children[i].key;\r\n-            if (isDef(key)) { map[key] = i; }\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    function createPatchFunction (backend) {\r\n-        var i, j;\r\n-        var cbs = {};\r\n-\r\n-        var modules = backend.modules;\r\n-        var nodeOps = backend.nodeOps;\r\n-\r\n-        for (i = 0; i \u003C hooks.length; ++i) {\r\n-            cbs[hooks[i]] = [];\r\n-            for (j = 0; j \u003C modules.length; ++j) {\r\n-                if (isDef(modules[j][hooks[i]])) {\r\n-                    cbs[hooks[i]].push(modules[j][hooks[i]]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function emptyNodeAt (elm) {\r\n-            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\r\n-        }\r\n-\r\n-        function createRmCb (childElm, listeners) {\r\n-            function remove$$1 () {\r\n-                if (--remove$$1.listeners === 0) {\r\n-                    removeNode(childElm);\r\n-                }\r\n-            }\r\n-            remove$$1.listeners = listeners;\r\n-            return remove$$1\r\n-        }\r\n-\r\n-        function removeNode (el) {\r\n-            var parent = nodeOps.parentNode(el);\r\n-            \u002F\u002F element may have already been removed due to v-html \u002F v-text\r\n-            if (isDef(parent)) {\r\n-                nodeOps.removeChild(parent, el);\r\n-            }\r\n-        }\r\n-\r\n-        function isUnknownElement$$1 (vnode, inVPre) {\r\n-            return (\r\n-                !inVPre &&\r\n-                !vnode.ns &&\r\n-                !(\r\n-                    config.ignoredElements.length &&\r\n-                    config.ignoredElements.some(function (ignore) {\r\n-                        return isRegExp(ignore)\r\n-                            ? ignore.test(vnode.tag)\r\n-                            : ignore === vnode.tag\r\n-                    })\r\n-                ) &&\r\n-                config.isUnknownElement(vnode.tag)\r\n-            )\r\n-        }\r\n-\r\n-        var creatingElmInVPre = 0;\r\n-\r\n-        function createElm (\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            parentElm,\r\n-            refElm,\r\n-            nested,\r\n-            ownerArray,\r\n-            index\r\n-        ) {\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F This vnode was used in a previous render!\r\n-                \u002F\u002F now it's used as a new node, overwriting its elm would cause\r\n-                \u002F\u002F potential patch errors down the road when it's used as an insertion\r\n-                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\r\n-                \u002F\u002F associated DOM element for it.\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\r\n-            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\r\n-                return\r\n-            }\r\n-\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            var tag = vnode.tag;\r\n-            if (isDef(tag)) {\r\n-                {\r\n-                    if (data && data.pre) {\r\n-                        creatingElmInVPre++;\r\n-                    }\r\n-                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\r\n-                        warn(\r\n-                            'Unknown custom element: \u003C' + tag + '> - did you ' +\r\n-                            'register the component correctly? For recursive components, ' +\r\n-                            'make sure to provide the \"name\" option.',\r\n-                            vnode.context\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.elm = vnode.ns\r\n-                    ? nodeOps.createElementNS(vnode.ns, tag)\r\n-                    : nodeOps.createElement(tag, vnode);\r\n-                setScope(vnode);\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                {\r\n-                    createChildren(vnode, children, insertedVnodeQueue);\r\n-                    if (isDef(data)) {\r\n-                        invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                    }\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                }\r\n-\r\n-                if (data && data.pre) {\r\n-                    creatingElmInVPre--;\r\n-                }\r\n-            } else if (isTrue(vnode.isComment)) {\r\n-                vnode.elm = nodeOps.createComment(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            } else {\r\n-                vnode.elm = nodeOps.createTextNode(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            }\r\n-        }\r\n-\r\n-        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i = vnode.data;\r\n-            if (isDef(i)) {\r\n-                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\r\n-                if (isDef(i = i.hook) && isDef(i = i.init)) {\r\n-                    i(vnode, false \u002F* hydrating *\u002F);\r\n-                }\r\n-                \u002F\u002F after calling the init hook, if the vnode is a child component\r\n-                \u002F\u002F it should've created a child instance and mounted it. the child\r\n-                \u002F\u002F component also has set the placeholder vnode's elm.\r\n-                \u002F\u002F in that case we can just return the element and be done.\r\n-                if (isDef(vnode.componentInstance)) {\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                    if (isTrue(isReactivated)) {\r\n-                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\r\n-                    }\r\n-                    return true\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function initComponent (vnode, insertedVnodeQueue) {\r\n-            if (isDef(vnode.data.pendingInsert)) {\r\n-                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\r\n-                vnode.data.pendingInsert = null;\r\n-            }\r\n-            vnode.elm = vnode.componentInstance.$el;\r\n-            if (isPatchable(vnode)) {\r\n-                invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                setScope(vnode);\r\n-            } else {\r\n-                \u002F\u002F empty component root.\r\n-                \u002F\u002F skip all element-related modules except for ref (#3455)\r\n-                registerRef(vnode);\r\n-                \u002F\u002F make sure to invoke the insert hook\r\n-                insertedVnodeQueue.push(vnode);\r\n-            }\r\n-        }\r\n-\r\n-        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i;\r\n-            \u002F\u002F hack for #4339: a reactivated component with inner transition\r\n-            \u002F\u002F does not trigger because the inner node's created hooks are not called\r\n-            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\r\n-            \u002F\u002F there doesn't seem to be a better way to do it.\r\n-            var innerNode = vnode;\r\n-            while (innerNode.componentInstance) {\r\n-                innerNode = innerNode.componentInstance._vnode;\r\n-                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\r\n-                    for (i = 0; i \u003C cbs.activate.length; ++i) {\r\n-                        cbs.activate[i](emptyNode, innerNode);\r\n-                    }\r\n-                    insertedVnodeQueue.push(innerNode);\r\n-                    break\r\n-                }\r\n-            }\r\n-            \u002F\u002F unlike a newly created component,\r\n-            \u002F\u002F a reactivated keep-alive component doesn't insert itself\r\n-            insert(parentElm, vnode.elm, refElm);\r\n-        }\r\n-\r\n-        function insert (parent, elm, ref$$1) {\r\n-            if (isDef(parent)) {\r\n-                if (isDef(ref$$1)) {\r\n-                    if (nodeOps.parentNode(ref$$1) === parent) {\r\n-                        nodeOps.insertBefore(parent, elm, ref$$1);\r\n-                    }\r\n-                } else {\r\n-                    nodeOps.appendChild(parent, elm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function createChildren (vnode, children, insertedVnodeQueue) {\r\n-            if (Array.isArray(children)) {\r\n-                {\r\n-                    checkDuplicateKeys(children);\r\n-                }\r\n-                for (var i = 0; i \u003C children.length; ++i) {\r\n-                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\r\n-                }\r\n-            } else if (isPrimitive(vnode.text)) {\r\n-                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\r\n-            }\r\n-        }\r\n-\r\n-        function isPatchable (vnode) {\r\n-            while (vnode.componentInstance) {\r\n-                vnode = vnode.componentInstance._vnode;\r\n-            }\r\n-            return isDef(vnode.tag)\r\n-        }\r\n-\r\n-        function invokeCreateHooks (vnode, insertedVnodeQueue) {\r\n-            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                cbs.create[i$1](emptyNode, vnode);\r\n-            }\r\n-            i = vnode.data.hook; \u002F\u002F Reuse variable\r\n-            if (isDef(i)) {\r\n-                if (isDef(i.create)) { i.create(emptyNode, vnode); }\r\n-                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F set scope id attribute for scoped CSS.\r\n-        \u002F\u002F this is implemented as a special case to avoid the overhead\r\n-        \u002F\u002F of going through the normal attribute patching process.\r\n-        function setScope (vnode) {\r\n-            var i;\r\n-            if (isDef(i = vnode.fnScopeId)) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            } else {\r\n-                var ancestor = vnode;\r\n-                while (ancestor) {\r\n-                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\r\n-                        nodeOps.setStyleScope(vnode.elm, i);\r\n-                    }\r\n-                    ancestor = ancestor.parent;\r\n-                }\r\n-            }\r\n-            \u002F\u002F for slot content they should also get the scopeId from the host instance.\r\n-            if (isDef(i = activeInstance) &&\r\n-                i !== vnode.context &&\r\n-                i !== vnode.fnContext &&\r\n-                isDef(i = i.$options._scopeId)\r\n-            ) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            }\r\n-        }\r\n-\r\n-        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function invokeDestroyHook (vnode) {\r\n-            var i, j;\r\n-            var data = vnode.data;\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\r\n-                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\r\n-            }\r\n-            if (isDef(i = vnode.children)) {\r\n-                for (j = 0; j \u003C vnode.children.length; ++j) {\r\n-                    invokeDestroyHook(vnode.children[j]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                var ch = vnodes[startIdx];\r\n-                if (isDef(ch)) {\r\n-                    if (isDef(ch.tag)) {\r\n-                        removeAndInvokeRemoveHook(ch);\r\n-                        invokeDestroyHook(ch);\r\n-                    } else { \u002F\u002F Text node\r\n-                        removeNode(ch.elm);\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeAndInvokeRemoveHook (vnode, rm) {\r\n-            if (isDef(rm) || isDef(vnode.data)) {\r\n-                var i;\r\n-                var listeners = cbs.remove.length + 1;\r\n-                if (isDef(rm)) {\r\n-                    \u002F\u002F we have a recursively passed down rm callback\r\n-                    \u002F\u002F increase the listeners count\r\n-                    rm.listeners += listeners;\r\n-                } else {\r\n-                    \u002F\u002F directly removing\r\n-                    rm = createRmCb(vnode.elm, listeners);\r\n-                }\r\n-                \u002F\u002F recursively invoke hooks on child component root node\r\n-                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\r\n-                    removeAndInvokeRemoveHook(i, rm);\r\n-                }\r\n-                for (i = 0; i \u003C cbs.remove.length; ++i) {\r\n-                    cbs.remove[i](vnode, rm);\r\n-                }\r\n-                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\r\n-                    i(vnode, rm);\r\n-                } else {\r\n-                    rm();\r\n-                }\r\n-            } else {\r\n-                removeNode(vnode.elm);\r\n-            }\r\n-        }\r\n-\r\n-        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\r\n-            var oldStartIdx = 0;\r\n-            var newStartIdx = 0;\r\n-            var oldEndIdx = oldCh.length - 1;\r\n-            var oldStartVnode = oldCh[0];\r\n-            var oldEndVnode = oldCh[oldEndIdx];\r\n-            var newEndIdx = newCh.length - 1;\r\n-            var newStartVnode = newCh[0];\r\n-            var newEndVnode = newCh[newEndIdx];\r\n-            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\r\n-\r\n-            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\r\n-            \u002F\u002F to ensure removed elements stay in correct relative positions\r\n-            \u002F\u002F during leaving transitions\r\n-            var canMove = !removeOnly;\r\n-\r\n-            {\r\n-                checkDuplicateKeys(newCh);\r\n-            }\r\n-\r\n-            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\r\n-                if (isUndef(oldStartVnode)) {\r\n-                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\r\n-                } else if (isUndef(oldEndVnode)) {\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newStartVnode)) {\r\n-                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else if (sameVnode(oldEndVnode, newEndVnode)) {\r\n-                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\r\n-                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\r\n-                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else {\r\n-                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\r\n-                    idxInOld = isDef(newStartVnode.key)\r\n-                        ? oldKeyToIdx[newStartVnode.key]\r\n-                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\r\n-                    if (isUndef(idxInOld)) { \u002F\u002F New element\r\n-                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                    } else {\r\n-                        vnodeToMove = oldCh[idxInOld];\r\n-                        if (sameVnode(vnodeToMove, newStartVnode)) {\r\n-                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                            oldCh[idxInOld] = undefined;\r\n-                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\r\n-                        } else {\r\n-                            \u002F\u002F same key but different element. treat as new element\r\n-                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                        }\r\n-                    }\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                }\r\n-            }\r\n-            if (oldStartIdx > oldEndIdx) {\r\n-                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\r\n-                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\r\n-            } else if (newStartIdx > newEndIdx) {\r\n-                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function checkDuplicateKeys (children) {\r\n-            var seenKeys = {};\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var vnode = children[i];\r\n-                var key = vnode.key;\r\n-                if (isDef(key)) {\r\n-                    if (seenKeys[key]) {\r\n-                        warn(\r\n-                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\r\n-                            vnode.context\r\n-                        );\r\n-                    } else {\r\n-                        seenKeys[key] = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function findIdxInOld (node, oldCh, start, end) {\r\n-            for (var i = start; i \u003C end; i++) {\r\n-                var c = oldCh[i];\r\n-                if (isDef(c) && sameVnode(node, c)) { return i }\r\n-            }\r\n-        }\r\n-\r\n-        function patchVnode (\r\n-            oldVnode,\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            ownerArray,\r\n-            index,\r\n-            removeOnly\r\n-        ) {\r\n-            if (oldVnode === vnode) {\r\n-                return\r\n-            }\r\n-\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F clone reused vnode\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            var elm = vnode.elm = oldVnode.elm;\r\n-\r\n-            if (isTrue(oldVnode.isAsyncPlaceholder)) {\r\n-                if (isDef(vnode.asyncFactory.resolved)) {\r\n-                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\r\n-                } else {\r\n-                    vnode.isAsyncPlaceholder = true;\r\n-                }\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F reuse element for static trees.\r\n-            \u002F\u002F note we only do this if the vnode is cloned -\r\n-            \u002F\u002F if the new node is not cloned it means the render functions have been\r\n-            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\r\n-            if (isTrue(vnode.isStatic) &&\r\n-                isTrue(oldVnode.isStatic) &&\r\n-                vnode.key === oldVnode.key &&\r\n-                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\r\n-            ) {\r\n-                vnode.componentInstance = oldVnode.componentInstance;\r\n-                return\r\n-            }\r\n-\r\n-            var i;\r\n-            var data = vnode.data;\r\n-            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\r\n-                i(oldVnode, vnode);\r\n-            }\r\n-\r\n-            var oldCh = oldVnode.children;\r\n-            var ch = vnode.children;\r\n-            if (isDef(data) && isPatchable(vnode)) {\r\n-                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\r\n-                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\r\n-            }\r\n-            if (isUndef(vnode.text)) {\r\n-                if (isDef(oldCh) && isDef(ch)) {\r\n-                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\r\n-                } else if (isDef(ch)) {\r\n-                    {\r\n-                        checkDuplicateKeys(ch);\r\n-                    }\r\n-                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\r\n-                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\r\n-                } else if (isDef(oldCh)) {\r\n-                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\r\n-                } else if (isDef(oldVnode.text)) {\r\n-                    nodeOps.setTextContent(elm, '');\r\n-                }\r\n-            } else if (oldVnode.text !== vnode.text) {\r\n-                nodeOps.setTextContent(elm, vnode.text);\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        function invokeInsertHook (vnode, queue, initial) {\r\n-            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\r\n-            \u002F\u002F element is really inserted\r\n-            if (isTrue(initial) && isDef(vnode.parent)) {\r\n-                vnode.parent.data.pendingInsert = queue;\r\n-            } else {\r\n-                for (var i = 0; i \u003C queue.length; ++i) {\r\n-                    queue[i].data.hook.insert(queue[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var hydrationBailed = false;\r\n-        \u002F\u002F list of modules that can skip create hook during hydration because they\r\n-        \u002F\u002F are already rendered on the client or has no need for initialization\r\n-        \u002F\u002F Note: style is excluded because it relies on initial clone for future\r\n-        \u002F\u002F deep updates (#7063).\r\n-        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\r\n-\r\n-        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\r\n-        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\r\n-            var i;\r\n-            var tag = vnode.tag;\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            inVPre = inVPre || (data && data.pre);\r\n-            vnode.elm = elm;\r\n-\r\n-            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\r\n-                vnode.isAsyncPlaceholder = true;\r\n-                return true\r\n-            }\r\n-            \u002F\u002F assert node match\r\n-            {\r\n-                if (!assertNodeMatch(elm, vnode, inVPre)) {\r\n-                    return false\r\n-                }\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\r\n-                if (isDef(i = vnode.componentInstance)) {\r\n-                    \u002F\u002F child component. it should have hydrated its own tree.\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    return true\r\n-                }\r\n-            }\r\n-            if (isDef(tag)) {\r\n-                if (isDef(children)) {\r\n-                    \u002F\u002F empty element, allow client to pick up and populate children\r\n-                    if (!elm.hasChildNodes()) {\r\n-                        createChildren(vnode, children, insertedVnodeQueue);\r\n-                    } else {\r\n-                        \u002F\u002F v-html and domProps: innerHTML\r\n-                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\r\n-                            if (i !== elm.innerHTML) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('server innerHTML: ', i);\r\n-                                    console.warn('client innerHTML: ', elm.innerHTML);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        } else {\r\n-                            \u002F\u002F iterate and compare children lists\r\n-                            var childrenMatch = true;\r\n-                            var childNode = elm.firstChild;\r\n-                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\r\n-                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\r\n-                                    childrenMatch = false;\r\n-                                    break\r\n-                                }\r\n-                                childNode = childNode.nextSibling;\r\n-                            }\r\n-                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\r\n-                            \u002F\u002F longer than the virtual children list.\r\n-                            if (!childrenMatch || childNode) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-                if (isDef(data)) {\r\n-                    var fullInvoke = false;\r\n-                    for (var key in data) {\r\n-                        if (!isRenderedModule(key)) {\r\n-                            fullInvoke = true;\r\n-                            invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                            break\r\n-                        }\r\n-                    }\r\n-                    if (!fullInvoke && data['class']) {\r\n-                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\r\n-                        traverse(data['class']);\r\n-                    }\r\n-                }\r\n-            } else if (elm.data !== vnode.text) {\r\n-                elm.data = vnode.text;\r\n-            }\r\n-            return true\r\n-        }\r\n-\r\n-        function assertNodeMatch (node, vnode, inVPre) {\r\n-            if (isDef(vnode.tag)) {\r\n-                return vnode.tag.indexOf('vue-component') === 0 || (\r\n-                        !isUnknownElement$$1(vnode, inVPre) &&\r\n-                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\r\n-                    )\r\n-            } else {\r\n-                return node.nodeType === (vnode.isComment ? 8 : 3)\r\n-            }\r\n-        }\r\n-\r\n-        return function patch (oldVnode, vnode, hydrating, removeOnly) {\r\n-            if (isUndef(vnode)) {\r\n-                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\r\n-                return\r\n-            }\r\n-\r\n-            var isInitialPatch = false;\r\n-            var insertedVnodeQueue = [];\r\n-\r\n-            if (isUndef(oldVnode)) {\r\n-                \u002F\u002F empty mount (likely as component), create new root element\r\n-                isInitialPatch = true;\r\n-                createElm(vnode, insertedVnodeQueue);\r\n-            } else {\r\n-                var isRealElement = isDef(oldVnode.nodeType);\r\n-                if (!isRealElement && sameVnode(oldVnode, vnode)) {\r\n-                    \u002F\u002F patch existing root node\r\n-                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\r\n-                } else {\r\n-                    if (isRealElement) {\r\n-                        \u002F\u002F mounting to a real element\r\n-                        \u002F\u002F check if this is server-rendered content and if we can perform\r\n-                        \u002F\u002F a successful hydration.\r\n-                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\r\n-                            oldVnode.removeAttribute(SSR_ATTR);\r\n-                            hydrating = true;\r\n-                        }\r\n-                        if (isTrue(hydrating)) {\r\n-                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\r\n-                                invokeInsertHook(vnode, insertedVnodeQueue, true);\r\n-                                return oldVnode\r\n-                            } else {\r\n-                                warn(\r\n-                                    'The client-side rendered virtual DOM tree is not matching ' +\r\n-                                    'server-rendered content. This is likely caused by incorrect ' +\r\n-                                    'HTML markup, for example nesting block-level elements inside ' +\r\n-                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\r\n-                                    'full client-side render.'\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                        \u002F\u002F either not server-rendered, or hydration failed.\r\n-                        \u002F\u002F create an empty node and replace it\r\n-                        oldVnode = emptyNodeAt(oldVnode);\r\n-                    }\r\n-\r\n-                    \u002F\u002F replacing existing element\r\n-                    var oldElm = oldVnode.elm;\r\n-                    var parentElm = nodeOps.parentNode(oldElm);\r\n-\r\n-                    \u002F\u002F create new node\r\n-                    createElm(\r\n-                        vnode,\r\n-                        insertedVnodeQueue,\r\n-                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\r\n-                        \u002F\u002F leaving transition. Only happens when combining transition +\r\n-                        \u002F\u002F keep-alive + HOCs. (#4590)\r\n-                        oldElm._leaveCb ? null : parentElm,\r\n-                        nodeOps.nextSibling(oldElm)\r\n-                    );\r\n-\r\n-                    \u002F\u002F update parent placeholder node element, recursively\r\n-                    if (isDef(vnode.parent)) {\r\n-                        var ancestor = vnode.parent;\r\n-                        var patchable = isPatchable(vnode);\r\n-                        while (ancestor) {\r\n-                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\r\n-                                cbs.destroy[i](ancestor);\r\n-                            }\r\n-                            ancestor.elm = vnode.elm;\r\n-                            if (patchable) {\r\n-                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                                    cbs.create[i$1](emptyNode, ancestor);\r\n-                                }\r\n-                                \u002F\u002F #6513\r\n-                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\r\n-                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\r\n-                                var insert = ancestor.data.hook.insert;\r\n-                                if (insert.merged) {\r\n-                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\r\n-                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\r\n-                                        insert.fns[i$2]();\r\n-                                    }\r\n-                                }\r\n-                            } else {\r\n-                                registerRef(ancestor);\r\n-                            }\r\n-                            ancestor = ancestor.parent;\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F destroy old node\r\n-                    if (isDef(parentElm)) {\r\n-                        removeVnodes(parentElm, [oldVnode], 0, 0);\r\n-                    } else if (isDef(oldVnode.tag)) {\r\n-                        invokeDestroyHook(oldVnode);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\r\n-            return vnode.elm\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var directives = {\r\n-        create: updateDirectives,\r\n-        update: updateDirectives,\r\n-        destroy: function unbindDirectives (vnode) {\r\n-            updateDirectives(vnode, emptyNode);\r\n-        }\r\n-    };\r\n-\r\n-    function updateDirectives (oldVnode, vnode) {\r\n-        if (oldVnode.data.directives || vnode.data.directives) {\r\n-            _update(oldVnode, vnode);\r\n-        }\r\n-    }\r\n-\r\n-    function _update (oldVnode, vnode) {\r\n-        var isCreate = oldVnode === emptyNode;\r\n-        var isDestroy = vnode === emptyNode;\r\n-        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\r\n-        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\r\n-\r\n-        var dirsWithInsert = [];\r\n-        var dirsWithPostpatch = [];\r\n-\r\n-        var key, oldDir, dir;\r\n-        for (key in newDirs) {\r\n-            oldDir = oldDirs[key];\r\n-            dir = newDirs[key];\r\n-            if (!oldDir) {\r\n-                \u002F\u002F new directive, bind\r\n-                callHook$1(dir, 'bind', vnode, oldVnode);\r\n-                if (dir.def && dir.def.inserted) {\r\n-                    dirsWithInsert.push(dir);\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F existing directive, update\r\n-                dir.oldValue = oldDir.value;\r\n-                dir.oldArg = oldDir.arg;\r\n-                callHook$1(dir, 'update', vnode, oldVnode);\r\n-                if (dir.def && dir.def.componentUpdated) {\r\n-                    dirsWithPostpatch.push(dir);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithInsert.length) {\r\n-            var callInsert = function () {\r\n-                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\r\n-                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\r\n-                }\r\n-            };\r\n-            if (isCreate) {\r\n-                mergeVNodeHook(vnode, 'insert', callInsert);\r\n-            } else {\r\n-                callInsert();\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithPostpatch.length) {\r\n-            mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\r\n-                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (!isCreate) {\r\n-            for (key in oldDirs) {\r\n-                if (!newDirs[key]) {\r\n-                    \u002F\u002F no longer present, unbind\r\n-                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var emptyModifiers = Object.create(null);\r\n-\r\n-    function normalizeDirectives$1 (\r\n-        dirs,\r\n-        vm\r\n-    ) {\r\n-        var res = Object.create(null);\r\n-        if (!dirs) {\r\n-            \u002F\u002F $flow-disable-line\r\n-            return res\r\n-        }\r\n-        var i, dir;\r\n-        for (i = 0; i \u003C dirs.length; i++) {\r\n-            dir = dirs[i];\r\n-            if (!dir.modifiers) {\r\n-                \u002F\u002F $flow-disable-line\r\n-                dir.modifiers = emptyModifiers;\r\n-            }\r\n-            res[getRawDirName(dir)] = dir;\r\n-            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        return res\r\n-    }\r\n-\r\n-    function getRawDirName (dir) {\r\n-        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\r\n-    }\r\n-\r\n-    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\r\n-        var fn = dir.def && dir.def[hook];\r\n-        if (fn) {\r\n-            try {\r\n-                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\r\n-            } catch (e) {\r\n-                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var baseModules = [\r\n-        ref,\r\n-        directives\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateAttrs (oldVnode, vnode) {\r\n-        var opts = vnode.componentOptions;\r\n-        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\r\n-            return\r\n-        }\r\n-        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\r\n-            return\r\n-        }\r\n-        var key, cur, old;\r\n-        var elm = vnode.elm;\r\n-        var oldAttrs = oldVnode.data.attrs || {};\r\n-        var attrs = vnode.data.attrs || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(attrs.__ob__)) {\r\n-            attrs = vnode.data.attrs = extend({}, attrs);\r\n-        }\r\n-\r\n-        for (key in attrs) {\r\n-            cur = attrs[key];\r\n-            old = oldAttrs[key];\r\n-            if (old !== cur) {\r\n-                setAttr(elm, key, cur);\r\n-            }\r\n-        }\r\n-        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\r\n-        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\r\n-            setAttr(elm, 'value', attrs.value);\r\n-        }\r\n-        for (key in oldAttrs) {\r\n-            if (isUndef(attrs[key])) {\r\n-                if (isXlink(key)) {\r\n-                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-                } else if (!isEnumeratedAttr(key)) {\r\n-                    elm.removeAttribute(key);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function setAttr (el, key, value) {\r\n-        if (el.tagName.indexOf('-') > -1) {\r\n-            baseSetAttr(el, key, value);\r\n-        } else if (isBooleanAttr(key)) {\r\n-            \u002F\u002F set attribute for blank value\r\n-            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttribute(key);\r\n-            } else {\r\n-                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\r\n-                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\r\n-                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\r\n-                    ? 'true'\r\n-                    : key;\r\n-                el.setAttribute(key, value);\r\n-            }\r\n-        } else if (isEnumeratedAttr(key)) {\r\n-            el.setAttribute(key, convertEnumeratedValue(key, value));\r\n-        } else if (isXlink(key)) {\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-            } else {\r\n-                el.setAttributeNS(xlinkNS, key, value);\r\n-            }\r\n-        } else {\r\n-            baseSetAttr(el, key, value);\r\n-        }\r\n-    }\r\n-\r\n-    function baseSetAttr (el, key, value) {\r\n-        if (isFalsyAttrValue(value)) {\r\n-            el.removeAttribute(key);\r\n-        } else {\r\n-            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\r\n-            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\r\n-            \u002F\u002F immediately.\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (\r\n-                isIE && !isIE9 &&\r\n-                el.tagName === 'TEXTAREA' &&\r\n-                key === 'placeholder' && value !== '' && !el.__ieph\r\n-            ) {\r\n-                var blocker = function (e) {\r\n-                    e.stopImmediatePropagation();\r\n-                    el.removeEventListener('input', blocker);\r\n-                };\r\n-                el.addEventListener('input', blocker);\r\n-                \u002F\u002F $flow-disable-line\r\n-                el.__ieph = true; \u002F* IE placeholder patched *\u002F\r\n-            }\r\n-            el.setAttribute(key, value);\r\n-        }\r\n-    }\r\n-\r\n-    var attrs = {\r\n-        create: updateAttrs,\r\n-        update: updateAttrs\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateClass (oldVnode, vnode) {\r\n-        var el = vnode.elm;\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-        if (\r\n-            isUndef(data.staticClass) &&\r\n-            isUndef(data.class) && (\r\n-                isUndef(oldData) || (\r\n-                    isUndef(oldData.staticClass) &&\r\n-                    isUndef(oldData.class)\r\n-                )\r\n-            )\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cls = genClassForVnode(vnode);\r\n-\r\n-        \u002F\u002F handle transition classes\r\n-        var transitionClass = el._transitionClasses;\r\n-        if (isDef(transitionClass)) {\r\n-            cls = concat(cls, stringifyClass(transitionClass));\r\n-        }\r\n-\r\n-        \u002F\u002F set the class\r\n-        if (cls !== el._prevClass) {\r\n-            el.setAttribute('class', cls);\r\n-            el._prevClass = cls;\r\n-        }\r\n-    }\r\n-\r\n-    var klass = {\r\n-        create: updateClass,\r\n-        update: updateClass\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\r\n-\r\n-    function parseFilters (exp) {\r\n-        var inSingle = false;\r\n-        var inDouble = false;\r\n-        var inTemplateString = false;\r\n-        var inRegex = false;\r\n-        var curly = 0;\r\n-        var square = 0;\r\n-        var paren = 0;\r\n-        var lastFilterIndex = 0;\r\n-        var c, prev, i, expression, filters;\r\n-\r\n-        for (i = 0; i \u003C exp.length; i++) {\r\n-            prev = c;\r\n-            c = exp.charCodeAt(i);\r\n-            if (inSingle) {\r\n-                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\r\n-            } else if (inDouble) {\r\n-                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\r\n-            } else if (inTemplateString) {\r\n-                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\r\n-            } else if (inRegex) {\r\n-                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\r\n-            } else if (\r\n-                c === 0x7C && \u002F\u002F pipe\r\n-                exp.charCodeAt(i + 1) !== 0x7C &&\r\n-                exp.charCodeAt(i - 1) !== 0x7C &&\r\n-                !curly && !square && !paren\r\n-            ) {\r\n-                if (expression === undefined) {\r\n-                    \u002F\u002F first filter, end of expression\r\n-                    lastFilterIndex = i + 1;\r\n-                    expression = exp.slice(0, i).trim();\r\n-                } else {\r\n-                    pushFilter();\r\n-                }\r\n-            } else {\r\n-                switch (c) {\r\n-                    case 0x22: inDouble = true; break         \u002F\u002F \"\r\n-                    case 0x27: inSingle = true; break         \u002F\u002F '\r\n-                    case 0x60: inTemplateString = true; break \u002F\u002F `\r\n-                    case 0x28: paren++; break                 \u002F\u002F (\r\n-                    case 0x29: paren--; break                 \u002F\u002F )\r\n-                    case 0x5B: square++; break                \u002F\u002F [\r\n-                    case 0x5D: square--; break                \u002F\u002F ]\r\n-                    case 0x7B: curly++; break                 \u002F\u002F {\r\n-                    case 0x7D: curly--; break                 \u002F\u002F }\r\n-                }\r\n-                if (c === 0x2f) { \u002F\u002F \u002F\r\n-                    var j = i - 1;\r\n-                    var p = (void 0);\r\n-                    \u002F\u002F find first non-whitespace prev char\r\n-                    for (; j >= 0; j--) {\r\n-                        p = exp.charAt(j);\r\n-                        if (p !== ' ') { break }\r\n-                    }\r\n-                    if (!p || !validDivisionCharRE.test(p)) {\r\n-                        inRegex = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (expression === undefined) {\r\n-            expression = exp.slice(0, i).trim();\r\n-        } else if (lastFilterIndex !== 0) {\r\n-            pushFilter();\r\n-        }\r\n-\r\n-        function pushFilter () {\r\n-            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\r\n-            lastFilterIndex = i + 1;\r\n-        }\r\n-\r\n-        if (filters) {\r\n-            for (i = 0; i \u003C filters.length; i++) {\r\n-                expression = wrapFilter(expression, filters[i]);\r\n-            }\r\n-        }\r\n-\r\n-        return expression\r\n-    }\r\n-\r\n-    function wrapFilter (exp, filter) {\r\n-        var i = filter.indexOf('(');\r\n-        if (i \u003C 0) {\r\n-            \u002F\u002F _f: resolveFilter\r\n-            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\r\n-        } else {\r\n-            var name = filter.slice(0, i);\r\n-            var args = filter.slice(i + 1);\r\n-            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-    function baseWarn (msg, range) {\r\n-        console.error((\"[Vue compiler]: \" + msg));\r\n-    }\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    function pluckModuleFunction (\r\n-        modules,\r\n-        key\r\n-    ) {\r\n-        return modules\r\n-            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\r\n-            : []\r\n-    }\r\n-\r\n-    function addProp (el, name, value, range, dynamic) {\r\n-        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function addAttr (el, name, value, range, dynamic) {\r\n-        var attrs = dynamic\r\n-            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\r\n-            : (el.attrs || (el.attrs = []));\r\n-        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    \u002F\u002F add a raw attr (use this in preTransforms)\r\n-    function addRawAttr (el, name, value, range) {\r\n-        el.attrsMap[name] = value;\r\n-        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\r\n-    }\r\n-\r\n-    function addDirective (\r\n-        el,\r\n-        name,\r\n-        rawName,\r\n-        value,\r\n-        arg,\r\n-        isDynamicArg,\r\n-        modifiers,\r\n-        range\r\n-    ) {\r\n-        (el.directives || (el.directives = [])).push(rangeSetItem({\r\n-            name: name,\r\n-            rawName: rawName,\r\n-            value: value,\r\n-            arg: arg,\r\n-            isDynamicArg: isDynamicArg,\r\n-            modifiers: modifiers\r\n-        }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function prependModifierMarker (symbol, name, dynamic) {\r\n-        return dynamic\r\n-            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\r\n-            : symbol + name \u002F\u002F mark the event as captured\r\n-    }\r\n-\r\n-    function addHandler (\r\n-        el,\r\n-        name,\r\n-        value,\r\n-        modifiers,\r\n-        important,\r\n-        warn,\r\n-        range,\r\n-        dynamic\r\n-    ) {\r\n-        modifiers = modifiers || emptyObject;\r\n-        \u002F\u002F warn prevent and passive modifier\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            warn &&\r\n-            modifiers.prevent && modifiers.passive\r\n-        ) {\r\n-            warn(\r\n-                'passive and prevent can\\'t be used together. ' +\r\n-                'Passive handler can\\'t prevent default event.',\r\n-                range\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F normalize click.right and click.middle since they don't actually fire\r\n-        \u002F\u002F this is technically browser-specific, but at least for now browsers are\r\n-        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\r\n-        if (modifiers.right) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'contextmenu';\r\n-                delete modifiers.right;\r\n-            }\r\n-        } else if (modifiers.middle) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'mouseup';\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F check capture modifier\r\n-        if (modifiers.capture) {\r\n-            delete modifiers.capture;\r\n-            name = prependModifierMarker('!', name, dynamic);\r\n-        }\r\n-        if (modifiers.once) {\r\n-            delete modifiers.once;\r\n-            name = prependModifierMarker('~', name, dynamic);\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (modifiers.passive) {\r\n-            delete modifiers.passive;\r\n-            name = prependModifierMarker('&', name, dynamic);\r\n-        }\r\n-\r\n-        var events;\r\n-        if (modifiers.native) {\r\n-            delete modifiers.native;\r\n-            events = el.nativeEvents || (el.nativeEvents = {});\r\n-        } else {\r\n-            events = el.events || (el.events = {});\r\n-        }\r\n-\r\n-        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\r\n-        if (modifiers !== emptyObject) {\r\n-            newHandler.modifiers = modifiers;\r\n-        }\r\n-\r\n-        var handlers = events[name];\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (Array.isArray(handlers)) {\r\n-            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\r\n-        } else if (handlers) {\r\n-            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\r\n-        } else {\r\n-            events[name] = newHandler;\r\n-        }\r\n-\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function getRawBindingAttr (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        return el.rawAttrsMap[':' + name] ||\r\n-            el.rawAttrsMap['v-bind:' + name] ||\r\n-            el.rawAttrsMap[name]\r\n-    }\r\n-\r\n-    function getBindingAttr (\r\n-        el,\r\n-        name,\r\n-        getStatic\r\n-    ) {\r\n-        var dynamicValue =\r\n-            getAndRemoveAttr(el, ':' + name) ||\r\n-            getAndRemoveAttr(el, 'v-bind:' + name);\r\n-        if (dynamicValue != null) {\r\n-            return parseFilters(dynamicValue)\r\n-        } else if (getStatic !== false) {\r\n-            var staticValue = getAndRemoveAttr(el, name);\r\n-            if (staticValue != null) {\r\n-                return JSON.stringify(staticValue)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\r\n-    \u002F\u002F doesn't get processed by processAttrs.\r\n-    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\r\n-    \u002F\u002F needed during codegen.\r\n-    function getAndRemoveAttr (\r\n-        el,\r\n-        name,\r\n-        removeFromMap\r\n-    ) {\r\n-        var val;\r\n-        if ((val = el.attrsMap[name]) != null) {\r\n-            var list = el.attrsList;\r\n-            for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-                if (list[i].name === name) {\r\n-                    list.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-        if (removeFromMap) {\r\n-            delete el.attrsMap[name];\r\n-        }\r\n-        return val\r\n-    }\r\n-\r\n-    function getAndRemoveAttrByRegex (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        var list = el.attrsList;\r\n-        for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-            var attr = list[i];\r\n-            if (name.test(attr.name)) {\r\n-                list.splice(i, 1);\r\n-                return attr\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function rangeSetItem (\r\n-        item,\r\n-        range\r\n-    ) {\r\n-        if (range) {\r\n-            if (range.start != null) {\r\n-                item.start = range.start;\r\n-            }\r\n-            if (range.end != null) {\r\n-                item.end = range.end;\r\n-            }\r\n-        }\r\n-        return item\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Cross-platform code generation for component v-model\r\n-     *\u002F\r\n-    function genComponentModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var ref = modifiers || {};\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-\r\n-        var baseValueExpression = '$$v';\r\n-        var valueExpression = baseValueExpression;\r\n-        if (trim) {\r\n-            valueExpression =\r\n-                \"(typeof \" + baseValueExpression + \" === 'string'\" +\r\n-                \"? \" + baseValueExpression + \".trim()\" +\r\n-                \": \" + baseValueExpression + \")\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-        var assignment = genAssignmentCode(value, valueExpression);\r\n-\r\n-        el.model = {\r\n-            value: (\"(\" + value + \")\"),\r\n-            expression: JSON.stringify(value),\r\n-            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Cross-platform codegen helper for generating v-model value assignment code.\r\n-     *\u002F\r\n-    function genAssignmentCode (\r\n-        value,\r\n-        assignment\r\n-    ) {\r\n-        var res = parseModel(value);\r\n-        if (res.key === null) {\r\n-            return (value + \"=\" + assignment)\r\n-        } else {\r\n-            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse a v-model expression into a base path and a final key segment.\r\n-     * Handles both dot-path and possible square brackets.\r\n-     *\r\n-     * Possible cases:\r\n-     *\r\n-     * - test\r\n-     * - test[key]\r\n-     * - test[test1[key]]\r\n-     * - test[\"a\"][key]\r\n-     * - xxx.test[a[a].test1[key]]\r\n-     * - test.xxx.a[\"asa\"][test1[key]]\r\n-     *\r\n-     *\u002F\r\n-\r\n-    var len, str, chr, index$1, expressionPos, expressionEndPos;\r\n-\r\n-\r\n-\r\n-    function parseModel (val) {\r\n-        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\r\n-        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\r\n-        val = val.trim();\r\n-        len = val.length;\r\n-\r\n-        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\r\n-            index$1 = val.lastIndexOf('.');\r\n-            if (index$1 > -1) {\r\n-                return {\r\n-                    exp: val.slice(0, index$1),\r\n-                    key: '\"' + val.slice(index$1 + 1) + '\"'\r\n-                }\r\n-            } else {\r\n-                return {\r\n-                    exp: val,\r\n-                    key: null\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        str = val;\r\n-        index$1 = expressionPos = expressionEndPos = 0;\r\n-\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-            } else if (chr === 0x5B) {\r\n-                parseBracket(chr);\r\n-            }\r\n-        }\r\n-\r\n-        return {\r\n-            exp: val.slice(0, expressionPos),\r\n-            key: val.slice(expressionPos + 1, expressionEndPos)\r\n-        }\r\n-    }\r\n-\r\n-    function next () {\r\n-        return str.charCodeAt(++index$1)\r\n-    }\r\n-\r\n-    function eof () {\r\n-        return index$1 >= len\r\n-    }\r\n-\r\n-    function isStringStart (chr) {\r\n-        return chr === 0x22 || chr === 0x27\r\n-    }\r\n-\r\n-    function parseBracket (chr) {\r\n-        var inBracket = 1;\r\n-        expressionPos = index$1;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-                continue\r\n-            }\r\n-            if (chr === 0x5B) { inBracket++; }\r\n-            if (chr === 0x5D) { inBracket--; }\r\n-            if (inBracket === 0) {\r\n-                expressionEndPos = index$1;\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function parseString (chr) {\r\n-        var stringQuote = chr;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (chr === stringQuote) {\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn$1;\r\n-\r\n-    \u002F\u002F in some cases, the event used has to be determined at runtime\r\n-    \u002F\u002F so we used some reserved tokens during compile.\r\n-    var RANGE_TOKEN = '__r';\r\n-    var CHECKBOX_RADIO_TOKEN = '__c';\r\n-\r\n-    function model (\r\n-        el,\r\n-        dir,\r\n-        _warn\r\n-    ) {\r\n-        warn$1 = _warn;\r\n-        var value = dir.value;\r\n-        var modifiers = dir.modifiers;\r\n-        var tag = el.tag;\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        {\r\n-            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\r\n-            \u002F\u002F value will throw an error.\r\n-            if (tag === 'input' && type === 'file') {\r\n-                warn$1(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\r\n-                    \"File inputs are read only. Use a v-on:change listener instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        if (el.component) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else if (tag === 'select') {\r\n-            genSelect(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'checkbox') {\r\n-            genCheckboxModel(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'radio') {\r\n-            genRadioModel(el, value, modifiers);\r\n-        } else if (tag === 'input' || tag === 'textarea') {\r\n-            genDefaultModel(el, value, modifiers);\r\n-        } else if (!config.isReservedTag(tag)) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else {\r\n-            warn$1(\r\n-                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                \"v-model is not supported on this element type. \" +\r\n-                'If you are working with contenteditable, it\\'s recommended to ' +\r\n-                'wrap a library dedicated for that purpose inside a custom component.',\r\n-                el.rawAttrsMap['v-model']\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F ensure runtime directive metadata\r\n-        return true\r\n-    }\r\n-\r\n-    function genCheckboxModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\r\n-        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\r\n-        addProp(el, 'checked',\r\n-            \"Array.isArray(\" + value + \")\" +\r\n-            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\r\n-                trueValueBinding === 'true'\r\n-                    ? (\":(\" + value + \")\")\r\n-                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\r\n-            )\r\n-        );\r\n-        addHandler(el, 'change',\r\n-            \"var $$a=\" + value + \",\" +\r\n-            '$$el=$event.target,' +\r\n-            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\r\n-            'if(Array.isArray($$a)){' +\r\n-            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\r\n-            '$$i=_i($$a,$$v);' +\r\n-            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\r\n-            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\r\n-            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\r\n-            null, true\r\n-        );\r\n-    }\r\n-\r\n-    function genRadioModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\r\n-        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\r\n-        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\r\n-    }\r\n-\r\n-    function genSelect (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var selectedVal = \"Array.prototype.filter\" +\r\n-            \".call($event.target.options,function(o){return o.selected})\" +\r\n-            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\r\n-            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\r\n-\r\n-        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\r\n-        var code = \"var $$selectedVal = \" + selectedVal + \";\";\r\n-        code = code + \" \" + (genAssignmentCode(value, assignment));\r\n-        addHandler(el, 'change', code, null, true);\r\n-    }\r\n-\r\n-    function genDefaultModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        \u002F\u002F warn if v-bind:value conflicts with v-model\r\n-        \u002F\u002F except for inputs with v-bind:type\r\n-        {\r\n-            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\r\n-            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\r\n-            if (value$1 && !typeBinding) {\r\n-                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\r\n-                warn$1(\r\n-                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\r\n-                    'because the latter already expands to a value binding internally',\r\n-                    el.rawAttrsMap[binding]\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        var ref = modifiers || {};\r\n-        var lazy = ref.lazy;\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-        var needCompositionGuard = !lazy && type !== 'range';\r\n-        var event = lazy\r\n-            ? 'change'\r\n-            : type === 'range'\r\n-                ? RANGE_TOKEN\r\n-                : 'input';\r\n-\r\n-        var valueExpression = '$event.target.value';\r\n-        if (trim) {\r\n-            valueExpression = \"$event.target.value.trim()\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-\r\n-        var code = genAssignmentCode(value, valueExpression);\r\n-        if (needCompositionGuard) {\r\n-            code = \"if($event.target.composing)return;\" + code;\r\n-        }\r\n-\r\n-        addProp(el, 'value', (\"(\" + value + \")\"));\r\n-        addHandler(el, event, code, null, true);\r\n-        if (trim || number) {\r\n-            addHandler(el, 'blur', '$forceUpdate()');\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\r\n-    \u002F\u002F it's important to place the event as the first in the array because\r\n-    \u002F\u002F the whole point is ensuring the v-model callback gets called before\r\n-    \u002F\u002F user-attached handlers.\r\n-    function normalizeEvents (on) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[RANGE_TOKEN])) {\r\n-            \u002F\u002F IE input[type=range] only supports `change` event\r\n-            var event = isIE ? 'change' : 'input';\r\n-            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\r\n-            delete on[RANGE_TOKEN];\r\n-        }\r\n-        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\r\n-        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\r\n-            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\r\n-            delete on[CHECKBOX_RADIO_TOKEN];\r\n-        }\r\n-    }\r\n-\r\n-    var target$1;\r\n-\r\n-    function createOnceHandler$1 (event, handler, capture) {\r\n-        var _target = target$1; \u002F\u002F save current target element in closure\r\n-        return function onceHandler () {\r\n-            var res = handler.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                remove$2(event, onceHandler, capture, _target);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\r\n-    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\r\n-    \u002F\u002F safe to exclude.\r\n-    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\r\n-\r\n-    function add$1 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        passive\r\n-    ) {\r\n-        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\r\n-        \u002F\u002F attached to outer element during patch, and triggered again. This\r\n-        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\r\n-        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\r\n-        \u002F\u002F and the handler would only fire if the event passed to it was fired\r\n-        \u002F\u002F AFTER it was attached.\r\n-        if (useMicrotaskFix) {\r\n-            var attachedTimestamp = currentFlushTimestamp;\r\n-            var original = handler;\r\n-            handler = original._wrapper = function (e) {\r\n-                if (\r\n-                    \u002F\u002F no bubbling, should always fire.\r\n-                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\r\n-                \u002F\u002F certain weird environments...\r\n-                e.target === e.currentTarget ||\r\n-                \u002F\u002F event is fired after handler attachment\r\n-                e.timeStamp >= attachedTimestamp ||\r\n-                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\r\n-                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\r\n-                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\r\n-                e.timeStamp \u003C= 0 ||\r\n-                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\r\n-                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\r\n-                \u002F\u002F starting reference\r\n-                e.target.ownerDocument !== document\r\n-                ) {\r\n-                    return original.apply(this, arguments)\r\n-                }\r\n-            };\r\n-        }\r\n-        target$1.addEventListener(\r\n-            name,\r\n-            handler,\r\n-            supportsPassive\r\n-                ? { capture: capture, passive: passive }\r\n-                : capture\r\n-        );\r\n-    }\r\n-\r\n-    function remove$2 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        _target\r\n-    ) {\r\n-        (_target || target$1).removeEventListener(\r\n-            name,\r\n-            handler._wrapper || handler,\r\n-            capture\r\n-        );\r\n-    }\r\n-\r\n-    function updateDOMListeners (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\r\n-            return\r\n-        }\r\n-        var on = vnode.data.on || {};\r\n-        var oldOn = oldVnode.data.on || {};\r\n-        target$1 = vnode.elm;\r\n-        normalizeEvents(on);\r\n-        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\r\n-        target$1 = undefined;\r\n-    }\r\n-\r\n-    var events = {\r\n-        create: updateDOMListeners,\r\n-        update: updateDOMListeners\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var svgContainer;\r\n-\r\n-    function updateDOMProps (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\r\n-            return\r\n-        }\r\n-        var key, cur;\r\n-        var elm = vnode.elm;\r\n-        var oldProps = oldVnode.data.domProps || {};\r\n-        var props = vnode.data.domProps || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(props.__ob__)) {\r\n-            props = vnode.data.domProps = extend({}, props);\r\n-        }\r\n-\r\n-        for (key in oldProps) {\r\n-            if (!(key in props)) {\r\n-                elm[key] = '';\r\n-            }\r\n-        }\r\n-\r\n-        for (key in props) {\r\n-            cur = props[key];\r\n-            \u002F\u002F ignore children if the node has textContent or innerHTML,\r\n-            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\r\n-            \u002F\u002F on subsequent patches (#3360)\r\n-            if (key === 'textContent' || key === 'innerHTML') {\r\n-                if (vnode.children) { vnode.children.length = 0; }\r\n-                if (cur === oldProps[key]) { continue }\r\n-                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\r\n-                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\r\n-                if (elm.childNodes.length === 1) {\r\n-                    elm.removeChild(elm.childNodes[0]);\r\n-                }\r\n-            }\r\n-\r\n-            if (key === 'value' && elm.tagName !== 'PROGRESS') {\r\n-                \u002F\u002F store value as _value as well since\r\n-                \u002F\u002F non-string values will be stringified\r\n-                elm._value = cur;\r\n-                \u002F\u002F avoid resetting cursor position when value is the same\r\n-                var strCur = isUndef(cur) ? '' : String(cur);\r\n-                if (shouldUpdateValue(elm, strCur)) {\r\n-                    elm.value = strCur;\r\n-                }\r\n-            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\r\n-                \u002F\u002F IE doesn't support innerHTML for SVG elements\r\n-                svgContainer = svgContainer || document.createElement('div');\r\n-                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\r\n-                var svg = svgContainer.firstChild;\r\n-                while (elm.firstChild) {\r\n-                    elm.removeChild(elm.firstChild);\r\n-                }\r\n-                while (svg.firstChild) {\r\n-                    elm.appendChild(svg.firstChild);\r\n-                }\r\n-            } else if (\r\n-                \u002F\u002F skip the update if old and new VDOM state is the same.\r\n-            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\r\n-            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\r\n-            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\r\n-            cur !== oldProps[key]\r\n-            ) {\r\n-                \u002F\u002F some property updates can throw\r\n-                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\r\n-                try {\r\n-                    elm[key] = cur;\r\n-                } catch (e) {}\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\r\n-\r\n-\r\n-    function shouldUpdateValue (elm, checkVal) {\r\n-        return (!elm.composing && (\r\n-            elm.tagName === 'OPTION' ||\r\n-            isNotInFocusAndDirty(elm, checkVal) ||\r\n-            isDirtyWithModifiers(elm, checkVal)\r\n-        ))\r\n-    }\r\n-\r\n-    function isNotInFocusAndDirty (elm, checkVal) {\r\n-        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\r\n-        \u002F\u002F not equal to the updated value\r\n-        var notInFocus = true;\r\n-        \u002F\u002F #6157\r\n-        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\r\n-        try { notInFocus = document.activeElement !== elm; } catch (e) {}\r\n-        return notInFocus && elm.value !== checkVal\r\n-    }\r\n-\r\n-    function isDirtyWithModifiers (elm, newVal) {\r\n-        var value = elm.value;\r\n-        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\r\n-        if (isDef(modifiers)) {\r\n-            if (modifiers.number) {\r\n-                return toNumber(value) !== toNumber(newVal)\r\n-            }\r\n-            if (modifiers.trim) {\r\n-                return value.trim() !== newVal.trim()\r\n-            }\r\n-        }\r\n-        return value !== newVal\r\n-    }\r\n-\r\n-    var domProps = {\r\n-        create: updateDOMProps,\r\n-        update: updateDOMProps\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var parseStyleText = cached(function (cssText) {\r\n-        var res = {};\r\n-        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\r\n-        var propertyDelimiter = \u002F:(.+)\u002F;\r\n-        cssText.split(listDelimiter).forEach(function (item) {\r\n-            if (item) {\r\n-                var tmp = item.split(propertyDelimiter);\r\n-                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\r\n-            }\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F\u002F merge static and dynamic style data on the same vnode\r\n-    function normalizeStyleData (data) {\r\n-        var style = normalizeStyleBinding(data.style);\r\n-        \u002F\u002F static style is pre-processed into an object during compilation\r\n-        \u002F\u002F and is always a fresh object, so it's safe to merge into it\r\n-        return data.staticStyle\r\n-            ? extend(data.staticStyle, style)\r\n-            : style\r\n-    }\r\n-\r\n-    \u002F\u002F normalize possible array \u002F string values into Object\r\n-    function normalizeStyleBinding (bindingStyle) {\r\n-        if (Array.isArray(bindingStyle)) {\r\n-            return toObject(bindingStyle)\r\n-        }\r\n-        if (typeof bindingStyle === 'string') {\r\n-            return parseStyleText(bindingStyle)\r\n-        }\r\n-        return bindingStyle\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * parent component style should be after child's\r\n-     * so that parent component's style could override it\r\n-     *\u002F\r\n-    function getStyle (vnode, checkChild) {\r\n-        var res = {};\r\n-        var styleData;\r\n-\r\n-        if (checkChild) {\r\n-            var childNode = vnode;\r\n-            while (childNode.componentInstance) {\r\n-                childNode = childNode.componentInstance._vnode;\r\n-                if (\r\n-                    childNode && childNode.data &&\r\n-                    (styleData = normalizeStyleData(childNode.data))\r\n-                ) {\r\n-                    extend(res, styleData);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if ((styleData = normalizeStyleData(vnode.data))) {\r\n-            extend(res, styleData);\r\n-        }\r\n-\r\n-        var parentNode = vnode;\r\n-        while ((parentNode = parentNode.parent)) {\r\n-            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\r\n-                extend(res, styleData);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var cssVarRE = \u002F^--\u002F;\r\n-    var importantRE = \u002F\\s*!important$\u002F;\r\n-    var setProp = function (el, name, val) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (cssVarRE.test(name)) {\r\n-            el.style.setProperty(name, val);\r\n-        } else if (importantRE.test(val)) {\r\n-            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\r\n-        } else {\r\n-            var normalizedName = normalize(name);\r\n-            if (Array.isArray(val)) {\r\n-                \u002F\u002F Support values array created by autoprefixer, e.g.\r\n-                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\r\n-                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\r\n-                for (var i = 0, len = val.length; i \u003C len; i++) {\r\n-                    el.style[normalizedName] = val[i];\r\n-                }\r\n-            } else {\r\n-                el.style[normalizedName] = val;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var vendorNames = ['Webkit', 'Moz', 'ms'];\r\n-\r\n-    var emptyStyle;\r\n-    var normalize = cached(function (prop) {\r\n-        emptyStyle = emptyStyle || document.createElement('div').style;\r\n-        prop = camelize(prop);\r\n-        if (prop !== 'filter' && (prop in emptyStyle)) {\r\n-            return prop\r\n-        }\r\n-        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\r\n-        for (var i = 0; i \u003C vendorNames.length; i++) {\r\n-            var name = vendorNames[i] + capName;\r\n-            if (name in emptyStyle) {\r\n-                return name\r\n-            }\r\n-        }\r\n-    });\r\n-\r\n-    function updateStyle (oldVnode, vnode) {\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-\r\n-        if (isUndef(data.staticStyle) && isUndef(data.style) &&\r\n-            isUndef(oldData.staticStyle) && isUndef(oldData.style)\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cur, name;\r\n-        var el = vnode.elm;\r\n-        var oldStaticStyle = oldData.staticStyle;\r\n-        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\r\n-\r\n-        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\r\n-        var oldStyle = oldStaticStyle || oldStyleBinding;\r\n-\r\n-        var style = normalizeStyleBinding(vnode.data.style) || {};\r\n-\r\n-        \u002F\u002F store normalized style under a different key for next diff\r\n-        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\r\n-        \u002F\u002F to mutate it.\r\n-        vnode.data.normalizedStyle = isDef(style.__ob__)\r\n-            ? extend({}, style)\r\n-            : style;\r\n-\r\n-        var newStyle = getStyle(vnode, true);\r\n-\r\n-        for (name in oldStyle) {\r\n-            if (isUndef(newStyle[name])) {\r\n-                setProp(el, name, '');\r\n-            }\r\n-        }\r\n-        for (name in newStyle) {\r\n-            cur = newStyle[name];\r\n-            if (cur !== oldStyle[name]) {\r\n-                \u002F\u002F ie9 setting to null has no effect, must use empty string\r\n-                setProp(el, name, cur == null ? '' : cur);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var style = {\r\n-        create: updateStyle,\r\n-        update: updateStyle\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var whitespaceRE = \u002F\\s+\u002F;\r\n-\r\n-    \u002F**\r\n-     * Add class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function addClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\r\n-            } else {\r\n-                el.classList.add(cls);\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\r\n-                el.setAttribute('class', (cur + cls).trim());\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Remove class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function removeClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\r\n-            } else {\r\n-                el.classList.remove(cls);\r\n-            }\r\n-            if (!el.classList.length) {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            var tar = ' ' + cls + ' ';\r\n-            while (cur.indexOf(tar) >= 0) {\r\n-                cur = cur.replace(tar, ' ');\r\n-            }\r\n-            cur = cur.trim();\r\n-            if (cur) {\r\n-                el.setAttribute('class', cur);\r\n-            } else {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveTransition (def$$1) {\r\n-        if (!def$$1) {\r\n-            return\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (typeof def$$1 === 'object') {\r\n-            var res = {};\r\n-            if (def$$1.css !== false) {\r\n-                extend(res, autoCssTransition(def$$1.name || 'v'));\r\n-            }\r\n-            extend(res, def$$1);\r\n-            return res\r\n-        } else if (typeof def$$1 === 'string') {\r\n-            return autoCssTransition(def$$1)\r\n-        }\r\n-    }\r\n-\r\n-    var autoCssTransition = cached(function (name) {\r\n-        return {\r\n-            enterClass: (name + \"-enter\"),\r\n-            enterToClass: (name + \"-enter-to\"),\r\n-            enterActiveClass: (name + \"-enter-active\"),\r\n-            leaveClass: (name + \"-leave\"),\r\n-            leaveToClass: (name + \"-leave-to\"),\r\n-            leaveActiveClass: (name + \"-leave-active\")\r\n-        }\r\n-    });\r\n-\r\n-    var hasTransition = inBrowser && !isIE9;\r\n-    var TRANSITION = 'transition';\r\n-    var ANIMATION = 'animation';\r\n-\r\n-    \u002F\u002F Transition property\u002Fevent sniffing\r\n-    var transitionProp = 'transition';\r\n-    var transitionEndEvent = 'transitionend';\r\n-    var animationProp = 'animation';\r\n-    var animationEndEvent = 'animationend';\r\n-    if (hasTransition) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (window.ontransitionend === undefined &&\r\n-            window.onwebkittransitionend !== undefined\r\n-        ) {\r\n-            transitionProp = 'WebkitTransition';\r\n-            transitionEndEvent = 'webkitTransitionEnd';\r\n-        }\r\n-        if (window.onanimationend === undefined &&\r\n-            window.onwebkitanimationend !== undefined\r\n-        ) {\r\n-            animationProp = 'WebkitAnimation';\r\n-            animationEndEvent = 'webkitAnimationEnd';\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\r\n-    var raf = inBrowser\r\n-        ? window.requestAnimationFrame\r\n-            ? window.requestAnimationFrame.bind(window)\r\n-            : setTimeout\r\n-        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\r\n-\r\n-    function nextFrame (fn) {\r\n-        raf(function () {\r\n-            raf(fn);\r\n-        });\r\n-    }\r\n-\r\n-    function addTransitionClass (el, cls) {\r\n-        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\r\n-        if (transitionClasses.indexOf(cls) \u003C 0) {\r\n-            transitionClasses.push(cls);\r\n-            addClass(el, cls);\r\n-        }\r\n-    }\r\n-\r\n-    function removeTransitionClass (el, cls) {\r\n-        if (el._transitionClasses) {\r\n-            remove(el._transitionClasses, cls);\r\n-        }\r\n-        removeClass(el, cls);\r\n-    }\r\n-\r\n-    function whenTransitionEnds (\r\n-        el,\r\n-        expectedType,\r\n-        cb\r\n-    ) {\r\n-        var ref = getTransitionInfo(el, expectedType);\r\n-        var type = ref.type;\r\n-        var timeout = ref.timeout;\r\n-        var propCount = ref.propCount;\r\n-        if (!type) { return cb() }\r\n-        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\r\n-        var ended = 0;\r\n-        var end = function () {\r\n-            el.removeEventListener(event, onEnd);\r\n-            cb();\r\n-        };\r\n-        var onEnd = function (e) {\r\n-            if (e.target === el) {\r\n-                if (++ended >= propCount) {\r\n-                    end();\r\n-                }\r\n-            }\r\n-        };\r\n-        setTimeout(function () {\r\n-            if (ended \u003C propCount) {\r\n-                end();\r\n-            }\r\n-        }, timeout + 1);\r\n-        el.addEventListener(event, onEnd);\r\n-    }\r\n-\r\n-    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\r\n-\r\n-    function getTransitionInfo (el, expectedType) {\r\n-        var styles = window.getComputedStyle(el);\r\n-        \u002F\u002F JSDOM may return undefined for transition properties\r\n-        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\r\n-        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\r\n-        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n-        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\r\n-        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\r\n-        var animationTimeout = getTimeout(animationDelays, animationDurations);\r\n-\r\n-        var type;\r\n-        var timeout = 0;\r\n-        var propCount = 0;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (expectedType === TRANSITION) {\r\n-            if (transitionTimeout > 0) {\r\n-                type = TRANSITION;\r\n-                timeout = transitionTimeout;\r\n-                propCount = transitionDurations.length;\r\n-            }\r\n-        } else if (expectedType === ANIMATION) {\r\n-            if (animationTimeout > 0) {\r\n-                type = ANIMATION;\r\n-                timeout = animationTimeout;\r\n-                propCount = animationDurations.length;\r\n-            }\r\n-        } else {\r\n-            timeout = Math.max(transitionTimeout, animationTimeout);\r\n-            type = timeout > 0\r\n-                ? transitionTimeout > animationTimeout\r\n-                    ? TRANSITION\r\n-                    : ANIMATION\r\n-                : null;\r\n-            propCount = type\r\n-                ? type === TRANSITION\r\n-                    ? transitionDurations.length\r\n-                    : animationDurations.length\r\n-                : 0;\r\n-        }\r\n-        var hasTransform =\r\n-            type === TRANSITION &&\r\n-            transformRE.test(styles[transitionProp + 'Property']);\r\n-        return {\r\n-            type: type,\r\n-            timeout: timeout,\r\n-            propCount: propCount,\r\n-            hasTransform: hasTransform\r\n-        }\r\n-    }\r\n-\r\n-    function getTimeout (delays, durations) {\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        while (delays.length \u003C durations.length) {\r\n-            delays = delays.concat(delays);\r\n-        }\r\n-\r\n-        return Math.max.apply(null, durations.map(function (d, i) {\r\n-            return toMs(d) + toMs(delays[i])\r\n-        }))\r\n-    }\r\n-\r\n-    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n-    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\r\n-    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n-    \u002F\u002F as a floor function) causing unexpected behaviors\r\n-    function toMs (s) {\r\n-        return Number(s.slice(0, -1).replace(',', '.')) * 1000\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function enter (vnode, toggleDisplay) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call leave callback now\r\n-        if (isDef(el._leaveCb)) {\r\n-            el._leaveCb.cancelled = true;\r\n-            el._leaveCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data)) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._enterCb) || el.nodeType !== 1) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var enterClass = data.enterClass;\r\n-        var enterToClass = data.enterToClass;\r\n-        var enterActiveClass = data.enterActiveClass;\r\n-        var appearClass = data.appearClass;\r\n-        var appearToClass = data.appearToClass;\r\n-        var appearActiveClass = data.appearActiveClass;\r\n-        var beforeEnter = data.beforeEnter;\r\n-        var enter = data.enter;\r\n-        var afterEnter = data.afterEnter;\r\n-        var enterCancelled = data.enterCancelled;\r\n-        var beforeAppear = data.beforeAppear;\r\n-        var appear = data.appear;\r\n-        var afterAppear = data.afterAppear;\r\n-        var appearCancelled = data.appearCancelled;\r\n-        var duration = data.duration;\r\n-\r\n-        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\r\n-        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\r\n-        \u002F\u002F as the root node of a child component. In that case we need to check\r\n-        \u002F\u002F \u003Ctransition>'s parent for appear check.\r\n-        var context = activeInstance;\r\n-        var transitionNode = activeInstance.$vnode;\r\n-        while (transitionNode && transitionNode.parent) {\r\n-            context = transitionNode.context;\r\n-            transitionNode = transitionNode.parent;\r\n-        }\r\n-\r\n-        var isAppear = !context._isMounted || !vnode.isRootInsert;\r\n-\r\n-        if (isAppear && !appear && appear !== '') {\r\n-            return\r\n-        }\r\n-\r\n-        var startClass = isAppear && appearClass\r\n-            ? appearClass\r\n-            : enterClass;\r\n-        var activeClass = isAppear && appearActiveClass\r\n-            ? appearActiveClass\r\n-            : enterActiveClass;\r\n-        var toClass = isAppear && appearToClass\r\n-            ? appearToClass\r\n-            : enterToClass;\r\n-\r\n-        var beforeEnterHook = isAppear\r\n-            ? (beforeAppear || beforeEnter)\r\n-            : beforeEnter;\r\n-        var enterHook = isAppear\r\n-            ? (typeof appear === 'function' ? appear : enter)\r\n-            : enter;\r\n-        var afterEnterHook = isAppear\r\n-            ? (afterAppear || afterEnter)\r\n-            : afterEnter;\r\n-        var enterCancelledHook = isAppear\r\n-            ? (appearCancelled || enterCancelled)\r\n-            : enterCancelled;\r\n-\r\n-        var explicitEnterDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.enter\r\n-                : duration\r\n-        );\r\n-\r\n-        if (explicitEnterDuration != null) {\r\n-            checkDuration(explicitEnterDuration, 'enter', vnode);\r\n-        }\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(enterHook);\r\n-\r\n-        var cb = el._enterCb = once(function () {\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, toClass);\r\n-                removeTransitionClass(el, activeClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, startClass);\r\n-                }\r\n-                enterCancelledHook && enterCancelledHook(el);\r\n-            } else {\r\n-                afterEnterHook && afterEnterHook(el);\r\n-            }\r\n-            el._enterCb = null;\r\n-        });\r\n-\r\n-        if (!vnode.data.show) {\r\n-            \u002F\u002F remove pending leave element on enter by injecting an insert hook\r\n-            mergeVNodeHook(vnode, 'insert', function () {\r\n-                var parent = el.parentNode;\r\n-                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\r\n-                if (pendingNode &&\r\n-                    pendingNode.tag === vnode.tag &&\r\n-                    pendingNode.elm._leaveCb\r\n-                ) {\r\n-                    pendingNode.elm._leaveCb();\r\n-                }\r\n-                enterHook && enterHook(el, cb);\r\n-            });\r\n-        }\r\n-\r\n-        \u002F\u002F start enter transition\r\n-        beforeEnterHook && beforeEnterHook(el);\r\n-        if (expectsCSS) {\r\n-            addTransitionClass(el, startClass);\r\n-            addTransitionClass(el, activeClass);\r\n-            nextFrame(function () {\r\n-                removeTransitionClass(el, startClass);\r\n-                if (!cb.cancelled) {\r\n-                    addTransitionClass(el, toClass);\r\n-                    if (!userWantsControl) {\r\n-                        if (isValidDuration(explicitEnterDuration)) {\r\n-                            setTimeout(cb, explicitEnterDuration);\r\n-                        } else {\r\n-                            whenTransitionEnds(el, type, cb);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (vnode.data.show) {\r\n-            toggleDisplay && toggleDisplay();\r\n-            enterHook && enterHook(el, cb);\r\n-        }\r\n-\r\n-        if (!expectsCSS && !userWantsControl) {\r\n-            cb();\r\n-        }\r\n-    }\r\n-\r\n-    function leave (vnode, rm) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call enter callback now\r\n-        if (isDef(el._enterCb)) {\r\n-            el._enterCb.cancelled = true;\r\n-            el._enterCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data) || el.nodeType !== 1) {\r\n-            return rm()\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._leaveCb)) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var leaveClass = data.leaveClass;\r\n-        var leaveToClass = data.leaveToClass;\r\n-        var leaveActiveClass = data.leaveActiveClass;\r\n-        var beforeLeave = data.beforeLeave;\r\n-        var leave = data.leave;\r\n-        var afterLeave = data.afterLeave;\r\n-        var leaveCancelled = data.leaveCancelled;\r\n-        var delayLeave = data.delayLeave;\r\n-        var duration = data.duration;\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(leave);\r\n-\r\n-        var explicitLeaveDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.leave\r\n-                : duration\r\n-        );\r\n-\r\n-        if (isDef(explicitLeaveDuration)) {\r\n-            checkDuration(explicitLeaveDuration, 'leave', vnode);\r\n-        }\r\n-\r\n-        var cb = el._leaveCb = once(function () {\r\n-            if (el.parentNode && el.parentNode._pending) {\r\n-                el.parentNode._pending[vnode.key] = null;\r\n-            }\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, leaveToClass);\r\n-                removeTransitionClass(el, leaveActiveClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                }\r\n-                leaveCancelled && leaveCancelled(el);\r\n-            } else {\r\n-                rm();\r\n-                afterLeave && afterLeave(el);\r\n-            }\r\n-            el._leaveCb = null;\r\n-        });\r\n-\r\n-        if (delayLeave) {\r\n-            delayLeave(performLeave);\r\n-        } else {\r\n-            performLeave();\r\n-        }\r\n-\r\n-        function performLeave () {\r\n-            \u002F\u002F the delayed leave may have already been cancelled\r\n-            if (cb.cancelled) {\r\n-                return\r\n-            }\r\n-            \u002F\u002F record leaving element\r\n-            if (!vnode.data.show && el.parentNode) {\r\n-                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\r\n-            }\r\n-            beforeLeave && beforeLeave(el);\r\n-            if (expectsCSS) {\r\n-                addTransitionClass(el, leaveClass);\r\n-                addTransitionClass(el, leaveActiveClass);\r\n-                nextFrame(function () {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                    if (!cb.cancelled) {\r\n-                        addTransitionClass(el, leaveToClass);\r\n-                        if (!userWantsControl) {\r\n-                            if (isValidDuration(explicitLeaveDuration)) {\r\n-                                setTimeout(cb, explicitLeaveDuration);\r\n-                            } else {\r\n-                                whenTransitionEnds(el, type, cb);\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                });\r\n-            }\r\n-            leave && leave(el, cb);\r\n-            if (!expectsCSS && !userWantsControl) {\r\n-                cb();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F only used in dev mode\r\n-    function checkDuration (val, name, vnode) {\r\n-        if (typeof val !== 'number') {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\r\n-                \"got \" + (JSON.stringify(val)) + \".\",\r\n-                vnode.context\r\n-            );\r\n-        } else if (isNaN(val)) {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\r\n-                'the duration expression might be incorrect.',\r\n-                vnode.context\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function isValidDuration (val) {\r\n-        return typeof val === 'number' && !isNaN(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize a transition hook's argument length. The hook may be:\r\n-     * - a merged hook (invoker) with the original in .fns\r\n-     * - a wrapped component method (check ._length)\r\n-     * - a plain function (.length)\r\n-     *\u002F\r\n-    function getHookArgumentsLength (fn) {\r\n-        if (isUndef(fn)) {\r\n-            return false\r\n-        }\r\n-        var invokerFns = fn.fns;\r\n-        if (isDef(invokerFns)) {\r\n-            \u002F\u002F invoker\r\n-            return getHookArgumentsLength(\r\n-                Array.isArray(invokerFns)\r\n-                    ? invokerFns[0]\r\n-                    : invokerFns\r\n-            )\r\n-        } else {\r\n-            return (fn._length || fn.length) > 1\r\n-        }\r\n-    }\r\n-\r\n-    function _enter (_, vnode) {\r\n-        if (vnode.data.show !== true) {\r\n-            enter(vnode);\r\n-        }\r\n-    }\r\n-\r\n-    var transition = inBrowser ? {\r\n-        create: _enter,\r\n-        activate: _enter,\r\n-        remove: function remove$$1 (vnode, rm) {\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            if (vnode.data.show !== true) {\r\n-                leave(vnode, rm);\r\n-            } else {\r\n-                rm();\r\n-            }\r\n-        }\r\n-    } : {};\r\n-\r\n-    var platformModules = [\r\n-        attrs,\r\n-        klass,\r\n-        events,\r\n-        domProps,\r\n-        style,\r\n-        transition\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F the directive module should be applied last, after all\r\n-    \u002F\u002F built-in modules have been applied.\r\n-    var modules = platformModules.concat(baseModules);\r\n-\r\n-    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\r\n-\r\n-    \u002F**\r\n-     * Not type checking this file because flow doesn't like attaching\r\n-     * properties to Elements.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore if *\u002F\r\n-    if (isIE9) {\r\n-        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\r\n-        document.addEventListener('selectionchange', function () {\r\n-            var el = document.activeElement;\r\n-            if (el && el.vmodel) {\r\n-                trigger(el, 'input');\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    var directive = {\r\n-        inserted: function inserted (el, binding, vnode, oldVnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                \u002F\u002F #6903\r\n-                if (oldVnode.elm && !oldVnode.elm._vOptions) {\r\n-                    mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                        directive.componentUpdated(el, binding, vnode);\r\n-                    });\r\n-                } else {\r\n-                    setSelected(el, binding, vnode.context);\r\n-                }\r\n-                el._vOptions = [].map.call(el.options, getValue);\r\n-            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\r\n-                el._vModifiers = binding.modifiers;\r\n-                if (!binding.modifiers.lazy) {\r\n-                    el.addEventListener('compositionstart', onCompositionStart);\r\n-                    el.addEventListener('compositionend', onCompositionEnd);\r\n-                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\r\n-                    \u002F\u002F switching focus before confirming composition choice\r\n-                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\r\n-                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\r\n-                    el.addEventListener('change', onCompositionEnd);\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (isIE9) {\r\n-                        el.vmodel = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        componentUpdated: function componentUpdated (el, binding, vnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                setSelected(el, binding, vnode.context);\r\n-                \u002F\u002F in case the options rendered by v-for have changed,\r\n-                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\r\n-                \u002F\u002F detect such cases and filter out values that no longer has a matching\r\n-                \u002F\u002F option in the DOM.\r\n-                var prevOptions = el._vOptions;\r\n-                var curOptions = el._vOptions = [].map.call(el.options, getValue);\r\n-                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\r\n-                    \u002F\u002F trigger change event if\r\n-                    \u002F\u002F no matching option found for at least one value\r\n-                    var needReset = el.multiple\r\n-                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\r\n-                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\r\n-                    if (needReset) {\r\n-                        trigger(el, 'change');\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function setSelected (el, binding, vm) {\r\n-        actuallySetSelected(el, binding, vm);\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isIE || isEdge) {\r\n-            setTimeout(function () {\r\n-                actuallySetSelected(el, binding, vm);\r\n-            }, 0);\r\n-        }\r\n-    }\r\n-\r\n-    function actuallySetSelected (el, binding, vm) {\r\n-        var value = binding.value;\r\n-        var isMultiple = el.multiple;\r\n-        if (isMultiple && !Array.isArray(value)) {\r\n-            warn(\r\n-                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\r\n-                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var selected, option;\r\n-        for (var i = 0, l = el.options.length; i \u003C l; i++) {\r\n-            option = el.options[i];\r\n-            if (isMultiple) {\r\n-                selected = looseIndexOf(value, getValue(option)) > -1;\r\n-                if (option.selected !== selected) {\r\n-                    option.selected = selected;\r\n-                }\r\n-            } else {\r\n-                if (looseEqual(getValue(option), value)) {\r\n-                    if (el.selectedIndex !== i) {\r\n-                        el.selectedIndex = i;\r\n-                    }\r\n-                    return\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isMultiple) {\r\n-            el.selectedIndex = -1;\r\n-        }\r\n-    }\r\n-\r\n-    function hasNoMatchingOption (value, options) {\r\n-        return options.every(function (o) { return !looseEqual(o, value); })\r\n-    }\r\n-\r\n-    function getValue (option) {\r\n-        return '_value' in option\r\n-            ? option._value\r\n-            : option.value\r\n-    }\r\n-\r\n-    function onCompositionStart (e) {\r\n-        e.target.composing = true;\r\n-    }\r\n-\r\n-    function onCompositionEnd (e) {\r\n-        \u002F\u002F prevent triggering an input event for no reason\r\n-        if (!e.target.composing) { return }\r\n-        e.target.composing = false;\r\n-        trigger(e.target, 'input');\r\n-    }\r\n-\r\n-    function trigger (el, type) {\r\n-        var e = document.createEvent('HTMLEvents');\r\n-        e.initEvent(type, true, true);\r\n-        el.dispatchEvent(e);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F recursively search for possible transition defined inside the component root\r\n-    function locateNode (vnode) {\r\n-        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\r\n-            ? locateNode(vnode.componentInstance._vnode)\r\n-            : vnode\r\n-    }\r\n-\r\n-    var show = {\r\n-        bind: function bind (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            var originalDisplay = el.__vOriginalDisplay =\r\n-                el.style.display === 'none' ? '' : el.style.display;\r\n-            if (value && transition$$1) {\r\n-                vnode.data.show = true;\r\n-                enter(vnode, function () {\r\n-                    el.style.display = originalDisplay;\r\n-                });\r\n-            } else {\r\n-                el.style.display = value ? originalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        update: function update (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-            var oldValue = ref.oldValue;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!value === !oldValue) { return }\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            if (transition$$1) {\r\n-                vnode.data.show = true;\r\n-                if (value) {\r\n-                    enter(vnode, function () {\r\n-                        el.style.display = el.__vOriginalDisplay;\r\n-                    });\r\n-                } else {\r\n-                    leave(vnode, function () {\r\n-                        el.style.display = 'none';\r\n-                    });\r\n-                }\r\n-            } else {\r\n-                el.style.display = value ? el.__vOriginalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        unbind: function unbind (\r\n-            el,\r\n-            binding,\r\n-            vnode,\r\n-            oldVnode,\r\n-            isDestroy\r\n-        ) {\r\n-            if (!isDestroy) {\r\n-                el.style.display = el.__vOriginalDisplay;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var platformDirectives = {\r\n-        model: directive,\r\n-        show: show\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var transitionProps = {\r\n-        name: String,\r\n-        appear: Boolean,\r\n-        css: Boolean,\r\n-        mode: String,\r\n-        type: String,\r\n-        enterClass: String,\r\n-        leaveClass: String,\r\n-        enterToClass: String,\r\n-        leaveToClass: String,\r\n-        enterActiveClass: String,\r\n-        leaveActiveClass: String,\r\n-        appearClass: String,\r\n-        appearActiveClass: String,\r\n-        appearToClass: String,\r\n-        duration: [Number, String, Object]\r\n-    };\r\n-\r\n-    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\r\n-    \u002F\u002F we want to recursively retrieve the real component to be rendered\r\n-    function getRealChild (vnode) {\r\n-        var compOptions = vnode && vnode.componentOptions;\r\n-        if (compOptions && compOptions.Ctor.options.abstract) {\r\n-            return getRealChild(getFirstComponentChild(compOptions.children))\r\n-        } else {\r\n-            return vnode\r\n-        }\r\n-    }\r\n-\r\n-    function extractTransitionData (comp) {\r\n-        var data = {};\r\n-        var options = comp.$options;\r\n-        \u002F\u002F props\r\n-        for (var key in options.propsData) {\r\n-            data[key] = comp[key];\r\n-        }\r\n-        \u002F\u002F events.\r\n-        \u002F\u002F extract listeners and pass them directly to the transition methods\r\n-        var listeners = options._parentListeners;\r\n-        for (var key$1 in listeners) {\r\n-            data[camelize(key$1)] = listeners[key$1];\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function placeholder (h, rawChild) {\r\n-        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\r\n-            return h('keep-alive', {\r\n-                props: rawChild.componentOptions.propsData\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-    function hasParentTransition (vnode) {\r\n-        while ((vnode = vnode.parent)) {\r\n-            if (vnode.data.transition) {\r\n-                return true\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isSameChild (child, oldChild) {\r\n-        return oldChild.key === child.key && oldChild.tag === child.tag\r\n-    }\r\n-\r\n-    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\r\n-\r\n-    var isVShowDirective = function (d) { return d.name === 'show'; };\r\n-\r\n-    var Transition = {\r\n-        name: 'transition',\r\n-        props: transitionProps,\r\n-        abstract: true,\r\n-\r\n-        render: function render (h) {\r\n-            var this$1 = this;\r\n-\r\n-            var children = this.$slots.default;\r\n-            if (!children) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F filter out text nodes (possible whitespaces)\r\n-            children = children.filter(isNotTextNode);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!children.length) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F warn multiple elements\r\n-            if (children.length > 1) {\r\n-                warn(\r\n-                    '\u003Ctransition> can only be used on a single element. Use ' +\r\n-                    '\u003Ctransition-group> for lists.',\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var mode = this.mode;\r\n-\r\n-            \u002F\u002F warn invalid mode\r\n-            if (mode && mode !== 'in-out' && mode !== 'out-in'\r\n-            ) {\r\n-                warn(\r\n-                    'invalid \u003Ctransition> mode: ' + mode,\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var rawChild = children[0];\r\n-\r\n-            \u002F\u002F if this is a component root node and the component's\r\n-            \u002F\u002F parent container node also has transition, skip.\r\n-            if (hasParentTransition(this.$vnode)) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            \u002F\u002F apply transition data to child\r\n-            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\r\n-            var child = getRealChild(rawChild);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!child) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            if (this._leaving) {\r\n-                return placeholder(h, rawChild)\r\n-            }\r\n-\r\n-            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\r\n-            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\r\n-            \u002F\u002F during entering.\r\n-            var id = \"__transition-\" + (this._uid) + \"-\";\r\n-            child.key = child.key == null\r\n-                ? child.isComment\r\n-                    ? id + 'comment'\r\n-                    : id + child.tag\r\n-                : isPrimitive(child.key)\r\n-                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\r\n-                    : child.key;\r\n-\r\n-            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\r\n-            var oldRawChild = this._vnode;\r\n-            var oldChild = getRealChild(oldRawChild);\r\n-\r\n-            \u002F\u002F mark v-show\r\n-            \u002F\u002F so that the transition module can hand over the control to the directive\r\n-            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\r\n-                child.data.show = true;\r\n-            }\r\n-\r\n-            if (\r\n-                oldChild &&\r\n-                oldChild.data &&\r\n-                !isSameChild(child, oldChild) &&\r\n-                !isAsyncPlaceholder(oldChild) &&\r\n-                \u002F\u002F #6687 component root is a comment node\r\n-                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\r\n-            ) {\r\n-                \u002F\u002F replace old child transition data with fresh one\r\n-                \u002F\u002F important for dynamic transitions!\r\n-                var oldData = oldChild.data.transition = extend({}, data);\r\n-                \u002F\u002F handle transition mode\r\n-                if (mode === 'out-in') {\r\n-                    \u002F\u002F return placeholder node and queue update when leave finishes\r\n-                    this._leaving = true;\r\n-                    mergeVNodeHook(oldData, 'afterLeave', function () {\r\n-                        this$1._leaving = false;\r\n-                        this$1.$forceUpdate();\r\n-                    });\r\n-                    return placeholder(h, rawChild)\r\n-                } else if (mode === 'in-out') {\r\n-                    if (isAsyncPlaceholder(child)) {\r\n-                        return oldRawChild\r\n-                    }\r\n-                    var delayedLeave;\r\n-                    var performLeave = function () { delayedLeave(); };\r\n-                    mergeVNodeHook(data, 'afterEnter', performLeave);\r\n-                    mergeVNodeHook(data, 'enterCancelled', performLeave);\r\n-                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\r\n-                }\r\n-            }\r\n-\r\n-            return rawChild\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var props = extend({\r\n-        tag: String,\r\n-        moveClass: String\r\n-    }, transitionProps);\r\n-\r\n-    delete props.mode;\r\n-\r\n-    var TransitionGroup = {\r\n-        props: props,\r\n-\r\n-        beforeMount: function beforeMount () {\r\n-            var this$1 = this;\r\n-\r\n-            var update = this._update;\r\n-            this._update = function (vnode, hydrating) {\r\n-                var restoreActiveInstance = setActiveInstance(this$1);\r\n-                \u002F\u002F force removing pass\r\n-                this$1.__patch__(\r\n-                    this$1._vnode,\r\n-                    this$1.kept,\r\n-                    false, \u002F\u002F hydrating\r\n-                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\r\n-                );\r\n-                this$1._vnode = this$1.kept;\r\n-                restoreActiveInstance();\r\n-                update.call(this$1, vnode, hydrating);\r\n-            };\r\n-        },\r\n-\r\n-        render: function render (h) {\r\n-            var tag = this.tag || this.$vnode.data.tag || 'span';\r\n-            var map = Object.create(null);\r\n-            var prevChildren = this.prevChildren = this.children;\r\n-            var rawChildren = this.$slots.default || [];\r\n-            var children = this.children = [];\r\n-            var transitionData = extractTransitionData(this);\r\n-\r\n-            for (var i = 0; i \u003C rawChildren.length; i++) {\r\n-                var c = rawChildren[i];\r\n-                if (c.tag) {\r\n-                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\r\n-                        children.push(c);\r\n-                        map[c.key] = c\r\n-                        ;(c.data || (c.data = {})).transition = transitionData;\r\n-                    } else {\r\n-                        var opts = c.componentOptions;\r\n-                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\r\n-                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            if (prevChildren) {\r\n-                var kept = [];\r\n-                var removed = [];\r\n-                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\r\n-                    var c$1 = prevChildren[i$1];\r\n-                    c$1.data.transition = transitionData;\r\n-                    c$1.data.pos = c$1.elm.getBoundingClientRect();\r\n-                    if (map[c$1.key]) {\r\n-                        kept.push(c$1);\r\n-                    } else {\r\n-                        removed.push(c$1);\r\n-                    }\r\n-                }\r\n-                this.kept = h(tag, null, kept);\r\n-                this.removed = removed;\r\n-            }\r\n-\r\n-            return h(tag, null, children)\r\n-        },\r\n-\r\n-        updated: function updated () {\r\n-            var children = this.prevChildren;\r\n-            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\r\n-            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\r\n-            \u002F\u002F in each iteration - which helps prevent layout thrashing.\r\n-            children.forEach(callPendingCbs);\r\n-            children.forEach(recordPosition);\r\n-            children.forEach(applyTranslation);\r\n-\r\n-            \u002F\u002F force reflow to put everything in position\r\n-            \u002F\u002F assign to this to avoid being removed in tree-shaking\r\n-            \u002F\u002F $flow-disable-line\r\n-            this._reflow = document.body.offsetHeight;\r\n-\r\n-            children.forEach(function (c) {\r\n-                if (c.data.moved) {\r\n-                    var el = c.elm;\r\n-                    var s = el.style;\r\n-                    addTransitionClass(el, moveClass);\r\n-                    s.transform = s.WebkitTransform = s.transitionDuration = '';\r\n-                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\r\n-                        if (e && e.target !== el) {\r\n-                            return\r\n-                        }\r\n-                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\r\n-                            el.removeEventListener(transitionEndEvent, cb);\r\n-                            el._moveCb = null;\r\n-                            removeTransitionClass(el, moveClass);\r\n-                        }\r\n-                    });\r\n-                }\r\n-            });\r\n-        },\r\n-\r\n-        methods: {\r\n-            hasMove: function hasMove (el, moveClass) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (!hasTransition) {\r\n-                    return false\r\n-                }\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (this._hasMove) {\r\n-                    return this._hasMove\r\n-                }\r\n-                \u002F\u002F Detect whether an element with the move class applied has\r\n-                \u002F\u002F CSS transitions. Since the element may be inside an entering\r\n-                \u002F\u002F transition at this very moment, we make a clone of it and remove\r\n-                \u002F\u002F all other transition classes applied to ensure only the move class\r\n-                \u002F\u002F is applied.\r\n-                var clone = el.cloneNode();\r\n-                if (el._transitionClasses) {\r\n-                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\r\n-                }\r\n-                addClass(clone, moveClass);\r\n-                clone.style.display = 'none';\r\n-                this.$el.appendChild(clone);\r\n-                var info = getTransitionInfo(clone);\r\n-                this.$el.removeChild(clone);\r\n-                return (this._hasMove = info.hasTransform)\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function callPendingCbs (c) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._moveCb) {\r\n-            c.elm._moveCb();\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._enterCb) {\r\n-            c.elm._enterCb();\r\n-        }\r\n-    }\r\n-\r\n-    function recordPosition (c) {\r\n-        c.data.newPos = c.elm.getBoundingClientRect();\r\n-    }\r\n-\r\n-    function applyTranslation (c) {\r\n-        var oldPos = c.data.pos;\r\n-        var newPos = c.data.newPos;\r\n-        var dx = oldPos.left - newPos.left;\r\n-        var dy = oldPos.top - newPos.top;\r\n-        if (dx || dy) {\r\n-            c.data.moved = true;\r\n-            var s = c.elm.style;\r\n-            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\r\n-            s.transitionDuration = '0s';\r\n-        }\r\n-    }\r\n-\r\n-    var platformComponents = {\r\n-        Transition: Transition,\r\n-        TransitionGroup: TransitionGroup\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F install platform specific utils\r\n-    Vue.config.mustUseProp = mustUseProp;\r\n-    Vue.config.isReservedTag = isReservedTag;\r\n-    Vue.config.isReservedAttr = isReservedAttr;\r\n-    Vue.config.getTagNamespace = getTagNamespace;\r\n-    Vue.config.isUnknownElement = isUnknownElement;\r\n-\r\n-    \u002F\u002F install platform runtime directives & components\r\n-    extend(Vue.options.directives, platformDirectives);\r\n-    extend(Vue.options.components, platformComponents);\r\n-\r\n-    \u002F\u002F install platform patch function\r\n-    Vue.prototype.__patch__ = inBrowser ? patch : noop;\r\n-\r\n-    \u002F\u002F public mount method\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && inBrowser ? query(el) : undefined;\r\n-        return mountComponent(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F\u002F devtools global hook\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    if (inBrowser) {\r\n-        setTimeout(function () {\r\n-            if (config.devtools) {\r\n-                if (devtools) {\r\n-                    devtools.emit('init', Vue);\r\n-                } else {\r\n-                    console[console.info ? 'info' : 'log'](\r\n-                        'Download the Vue Devtools extension for a better development experience:\\n' +\r\n-                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (config.productionTip !== false &&\r\n-                typeof console !== 'undefined'\r\n-            ) {\r\n-                console[console.info ? 'info' : 'log'](\r\n-                    \"You are running Vue in development mode.\\n\" +\r\n-                    \"Make sure to turn on production mode when deploying for production.\\n\" +\r\n-                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\r\n-                );\r\n-            }\r\n-        }, 0);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\r\n-    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\r\n-\r\n-    var buildRegex = cached(function (delimiters) {\r\n-        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\r\n-        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\r\n-        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\r\n-    });\r\n-\r\n-\r\n-\r\n-    function parseText (\r\n-        text,\r\n-        delimiters\r\n-    ) {\r\n-        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\r\n-        if (!tagRE.test(text)) {\r\n-            return\r\n-        }\r\n-        var tokens = [];\r\n-        var rawTokens = [];\r\n-        var lastIndex = tagRE.lastIndex = 0;\r\n-        var match, index, tokenValue;\r\n-        while ((match = tagRE.exec(text))) {\r\n-            index = match.index;\r\n-            \u002F\u002F push text token\r\n-            if (index > lastIndex) {\r\n-                rawTokens.push(tokenValue = text.slice(lastIndex, index));\r\n-                tokens.push(JSON.stringify(tokenValue));\r\n-            }\r\n-            \u002F\u002F tag token\r\n-            var exp = parseFilters(match[1].trim());\r\n-            tokens.push((\"_s(\" + exp + \")\"));\r\n-            rawTokens.push({ '@binding': exp });\r\n-            lastIndex = index + match[0].length;\r\n-        }\r\n-        if (lastIndex \u003C text.length) {\r\n-            rawTokens.push(tokenValue = text.slice(lastIndex));\r\n-            tokens.push(JSON.stringify(tokenValue));\r\n-        }\r\n-        return {\r\n-            expression: tokens.join('+'),\r\n-            tokens: rawTokens\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticClass = getAndRemoveAttr(el, 'class');\r\n-        if (staticClass) {\r\n-            var res = parseText(staticClass, options.delimiters);\r\n-            if (res) {\r\n-                warn(\r\n-                    \"class=\\\"\" + staticClass + \"\\\": \" +\r\n-                    'Interpolation inside attributes has been removed. ' +\r\n-                    'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\r\n-                    el.rawAttrsMap['class']\r\n-                );\r\n-            }\r\n-        }\r\n-        if (staticClass) {\r\n-            el.staticClass = JSON.stringify(staticClass);\r\n-        }\r\n-        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\r\n-        if (classBinding) {\r\n-            el.classBinding = classBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData (el) {\r\n-        var data = '';\r\n-        if (el.staticClass) {\r\n-            data += \"staticClass:\" + (el.staticClass) + \",\";\r\n-        }\r\n-        if (el.classBinding) {\r\n-            data += \"class:\" + (el.classBinding) + \",\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var klass$1 = {\r\n-        staticKeys: ['staticClass'],\r\n-        transformNode: transformNode,\r\n-        genData: genData\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode$1 (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticStyle = getAndRemoveAttr(el, 'style');\r\n-        if (staticStyle) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                var res = parseText(staticStyle, options.delimiters);\r\n-                if (res) {\r\n-                    warn(\r\n-                        \"style=\\\"\" + staticStyle + \"\\\": \" +\r\n-                        'Interpolation inside attributes has been removed. ' +\r\n-                        'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\r\n-                        el.rawAttrsMap['style']\r\n-                    );\r\n-                }\r\n-            }\r\n-            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\r\n-        }\r\n-\r\n-        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\r\n-        if (styleBinding) {\r\n-            el.styleBinding = styleBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData$1 (el) {\r\n-        var data = '';\r\n-        if (el.staticStyle) {\r\n-            data += \"staticStyle:\" + (el.staticStyle) + \",\";\r\n-        }\r\n-        if (el.styleBinding) {\r\n-            data += \"style:(\" + (el.styleBinding) + \"),\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var style$1 = {\r\n-        staticKeys: ['staticStyle'],\r\n-        transformNode: transformNode$1,\r\n-        genData: genData$1\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var decoder;\r\n-\r\n-    var he = {\r\n-        decode: function decode (html) {\r\n-            decoder = decoder || document.createElement('div');\r\n-            decoder.innerHTML = html;\r\n-            return decoder.textContent\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUnaryTag = makeMap(\r\n-        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\r\n-        'link,meta,param,source,track,wbr'\r\n-    );\r\n-\r\n-    \u002F\u002F Elements that you can, intentionally, leave open\r\n-    \u002F\u002F (and which close themselves)\r\n-    var canBeLeftOpenTag = makeMap(\r\n-        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\r\n-    );\r\n-\r\n-    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\r\n-    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\r\n-    var isNonPhrasingTag = makeMap(\r\n-        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\r\n-        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\r\n-        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\r\n-        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\r\n-        'title,tr,track'\r\n-    );\r\n-\r\n-    \u002F**\r\n-     * Not type-checking this file because it's mostly vendor code.\r\n-     *\u002F\r\n-\r\n-        \u002F\u002F Regular Expressions for parsing tags and attributes\r\n-    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\r\n-    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\r\n-    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\r\n-    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\r\n-    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\r\n-    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\r\n-    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\r\n-    var comment = \u002F^\u003C!\\--\u002F;\r\n-    var conditionalComment = \u002F^\u003C!\\[\u002F;\r\n-\r\n-    \u002F\u002F Special Elements (can contain anything)\r\n-    var isPlainTextElement = makeMap('script,style,textarea', true);\r\n-    var reCache = {};\r\n-\r\n-    var decodingMap = {\r\n-        '&lt;': '\u003C',\r\n-        '&gt;': '>',\r\n-        '&quot;': '\"',\r\n-        '&amp;': '&',\r\n-        '&#10;': '\\n',\r\n-        '&#9;': '\\t',\r\n-        '&#39;': \"'\"\r\n-    };\r\n-    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\r\n-    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\r\n-\r\n-    \u002F\u002F #5992\r\n-    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\r\n-    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\r\n-\r\n-    function decodeAttr (value, shouldDecodeNewlines) {\r\n-        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\r\n-        return value.replace(re, function (match) { return decodingMap[match]; })\r\n-    }\r\n-\r\n-    function parseHTML (html, options) {\r\n-        var stack = [];\r\n-        var expectHTML = options.expectHTML;\r\n-        var isUnaryTag$$1 = options.isUnaryTag || no;\r\n-        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\r\n-        var index = 0;\r\n-        var last, lastTag;\r\n-        while (html) {\r\n-            last = html;\r\n-            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\r\n-            if (!lastTag || !isPlainTextElement(lastTag)) {\r\n-                var textEnd = html.indexOf('\u003C');\r\n-                if (textEnd === 0) {\r\n-                    \u002F\u002F Comment:\r\n-                    if (comment.test(html)) {\r\n-                        var commentEnd = html.indexOf('-->');\r\n-\r\n-                        if (commentEnd >= 0) {\r\n-                            if (options.shouldKeepComment) {\r\n-                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\r\n-                            }\r\n-                            advance(commentEnd + 3);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\r\n-                    if (conditionalComment.test(html)) {\r\n-                        var conditionalEnd = html.indexOf(']>');\r\n-\r\n-                        if (conditionalEnd >= 0) {\r\n-                            advance(conditionalEnd + 2);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F Doctype:\r\n-                    var doctypeMatch = html.match(doctype);\r\n-                    if (doctypeMatch) {\r\n-                        advance(doctypeMatch[0].length);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F End tag:\r\n-                    var endTagMatch = html.match(endTag);\r\n-                    if (endTagMatch) {\r\n-                        var curIndex = index;\r\n-                        advance(endTagMatch[0].length);\r\n-                        parseEndTag(endTagMatch[1], curIndex, index);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F Start tag:\r\n-                    var startTagMatch = parseStartTag();\r\n-                    if (startTagMatch) {\r\n-                        handleStartTag(startTagMatch);\r\n-                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\r\n-                            advance(1);\r\n-                        }\r\n-                        continue\r\n-                    }\r\n-                }\r\n-\r\n-                var text = (void 0), rest = (void 0), next = (void 0);\r\n-                if (textEnd >= 0) {\r\n-                    rest = html.slice(textEnd);\r\n-                    while (\r\n-                    !endTag.test(rest) &&\r\n-                    !startTagOpen.test(rest) &&\r\n-                    !comment.test(rest) &&\r\n-                    !conditionalComment.test(rest)\r\n-                        ) {\r\n-                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\r\n-                        next = rest.indexOf('\u003C', 1);\r\n-                        if (next \u003C 0) { break }\r\n-                        textEnd += next;\r\n-                        rest = html.slice(textEnd);\r\n-                    }\r\n-                    text = html.substring(0, textEnd);\r\n-                }\r\n-\r\n-                if (textEnd \u003C 0) {\r\n-                    text = html;\r\n-                }\r\n-\r\n-                if (text) {\r\n-                    advance(text.length);\r\n-                }\r\n-\r\n-                if (options.chars && text) {\r\n-                    options.chars(text, index - text.length, index);\r\n-                }\r\n-            } else {\r\n-                var endTagLength = 0;\r\n-                var stackedTag = lastTag.toLowerCase();\r\n-                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\r\n-                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\r\n-                    endTagLength = endTag.length;\r\n-                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\r\n-                        text = text\r\n-                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\r\n-                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\r\n-                    }\r\n-                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\r\n-                        text = text.slice(1);\r\n-                    }\r\n-                    if (options.chars) {\r\n-                        options.chars(text);\r\n-                    }\r\n-                    return ''\r\n-                });\r\n-                index += html.length - rest$1.length;\r\n-                html = rest$1;\r\n-                parseEndTag(stackedTag, index - endTagLength, index);\r\n-            }\r\n-\r\n-            if (html === last) {\r\n-                options.chars && options.chars(html);\r\n-                if (!stack.length && options.warn) {\r\n-                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F Clean up any remaining tags\r\n-        parseEndTag();\r\n-\r\n-        function advance (n) {\r\n-            index += n;\r\n-            html = html.substring(n);\r\n-        }\r\n-\r\n-        function parseStartTag () {\r\n-            var start = html.match(startTagOpen);\r\n-            if (start) {\r\n-                var match = {\r\n-                    tagName: start[1],\r\n-                    attrs: [],\r\n-                    start: index\r\n-                };\r\n-                advance(start[0].length);\r\n-                var end, attr;\r\n-                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\r\n-                    attr.start = index;\r\n-                    advance(attr[0].length);\r\n-                    attr.end = index;\r\n-                    match.attrs.push(attr);\r\n-                }\r\n-                if (end) {\r\n-                    match.unarySlash = end[1];\r\n-                    advance(end[0].length);\r\n-                    match.end = index;\r\n-                    return match\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function handleStartTag (match) {\r\n-            var tagName = match.tagName;\r\n-            var unarySlash = match.unarySlash;\r\n-\r\n-            if (expectHTML) {\r\n-                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\r\n-                    parseEndTag(lastTag);\r\n-                }\r\n-                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\r\n-                    parseEndTag(tagName);\r\n-                }\r\n-            }\r\n-\r\n-            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\r\n-\r\n-            var l = match.attrs.length;\r\n-            var attrs = new Array(l);\r\n-            for (var i = 0; i \u003C l; i++) {\r\n-                var args = match.attrs[i];\r\n-                var value = args[3] || args[4] || args[5] || '';\r\n-                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\r\n-                    ? options.shouldDecodeNewlinesForHref\r\n-                    : options.shouldDecodeNewlines;\r\n-                attrs[i] = {\r\n-                    name: args[1],\r\n-                    value: decodeAttr(value, shouldDecodeNewlines)\r\n-                };\r\n-                if (options.outputSourceRange) {\r\n-                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\r\n-                    attrs[i].end = args.end;\r\n-                }\r\n-            }\r\n-\r\n-            if (!unary) {\r\n-                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\r\n-                lastTag = tagName;\r\n-            }\r\n-\r\n-            if (options.start) {\r\n-                options.start(tagName, attrs, unary, match.start, match.end);\r\n-            }\r\n-        }\r\n-\r\n-        function parseEndTag (tagName, start, end) {\r\n-            var pos, lowerCasedTagName;\r\n-            if (start == null) { start = index; }\r\n-            if (end == null) { end = index; }\r\n-\r\n-            \u002F\u002F Find the closest opened tag of the same type\r\n-            if (tagName) {\r\n-                lowerCasedTagName = tagName.toLowerCase();\r\n-                for (pos = stack.length - 1; pos >= 0; pos--) {\r\n-                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\r\n-                        break\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F If no tag name is provided, clean shop\r\n-                pos = 0;\r\n-            }\r\n-\r\n-            if (pos >= 0) {\r\n-                \u002F\u002F Close all the open elements, up the stack\r\n-                for (var i = stack.length - 1; i >= pos; i--) {\r\n-                    if (i > pos || !tagName &&\r\n-                        options.warn\r\n-                    ) {\r\n-                        options.warn(\r\n-                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\r\n-                            { start: stack[i].start, end: stack[i].end }\r\n-                        );\r\n-                    }\r\n-                    if (options.end) {\r\n-                        options.end(stack[i].tag, start, end);\r\n-                    }\r\n-                }\r\n-\r\n-                \u002F\u002F Remove the open elements from the stack\r\n-                stack.length = pos;\r\n-                lastTag = pos && stack[pos - 1].tag;\r\n-            } else if (lowerCasedTagName === 'br') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], true, start, end);\r\n-                }\r\n-            } else if (lowerCasedTagName === 'p') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], false, start, end);\r\n-                }\r\n-                if (options.end) {\r\n-                    options.end(tagName, start, end);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var onRE = \u002F^@|^v-on:\u002F;\r\n-    var dirRE = \u002F^v-|^@|^:\u002F;\r\n-    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\r\n-    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\r\n-    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\r\n-    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\r\n-\r\n-    var argRE = \u002F:(.*)$\u002F;\r\n-    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\r\n-    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\r\n-\r\n-    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\r\n-\r\n-    var lineBreakRE = \u002F[\\r\\n]\u002F;\r\n-    var whitespaceRE$1 = \u002F\\s+\u002Fg;\r\n-\r\n-    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\r\n-\r\n-    var decodeHTMLCached = cached(he.decode);\r\n-\r\n-    var emptySlotScopeToken = \"_empty_\";\r\n-\r\n-    \u002F\u002F configurable state\r\n-    var warn$2;\r\n-    var delimiters;\r\n-    var transforms;\r\n-    var preTransforms;\r\n-    var postTransforms;\r\n-    var platformIsPreTag;\r\n-    var platformMustUseProp;\r\n-    var platformGetTagNamespace;\r\n-    var maybeComponent;\r\n-\r\n-    function createASTElement (\r\n-        tag,\r\n-        attrs,\r\n-        parent\r\n-    ) {\r\n-        return {\r\n-            type: 1,\r\n-            tag: tag,\r\n-            attrsList: attrs,\r\n-            attrsMap: makeAttrsMap(attrs),\r\n-            rawAttrsMap: {},\r\n-            parent: parent,\r\n-            children: []\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert HTML string to AST.\r\n-     *\u002F\r\n-    function parse (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        warn$2 = options.warn || baseWarn;\r\n-\r\n-        platformIsPreTag = options.isPreTag || no;\r\n-        platformMustUseProp = options.mustUseProp || no;\r\n-        platformGetTagNamespace = options.getTagNamespace || no;\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-\r\n-        transforms = pluckModuleFunction(options.modules, 'transformNode');\r\n-        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\r\n-        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\r\n-\r\n-        delimiters = options.delimiters;\r\n-\r\n-        var stack = [];\r\n-        var preserveWhitespace = options.preserveWhitespace !== false;\r\n-        var whitespaceOption = options.whitespace;\r\n-        var root;\r\n-        var currentParent;\r\n-        var inVPre = false;\r\n-        var inPre = false;\r\n-        var warned = false;\r\n-\r\n-        function warnOnce (msg, range) {\r\n-            if (!warned) {\r\n-                warned = true;\r\n-                warn$2(msg, range);\r\n-            }\r\n-        }\r\n-\r\n-        function closeElement (element) {\r\n-            trimEndingWhitespace(element);\r\n-            if (!inVPre && !element.processed) {\r\n-                element = processElement(element, options);\r\n-            }\r\n-            \u002F\u002F tree management\r\n-            if (!stack.length && element !== root) {\r\n-                \u002F\u002F allow root elements with v-if, v-else-if and v-else\r\n-                if (root.if && (element.elseif || element.else)) {\r\n-                    {\r\n-                        checkRootConstraints(element);\r\n-                    }\r\n-                    addIfCondition(root, {\r\n-                        exp: element.elseif,\r\n-                        block: element\r\n-                    });\r\n-                } else {\r\n-                    warnOnce(\r\n-                        \"Component template should contain exactly one root element. \" +\r\n-                        \"If you are using v-if on multiple elements, \" +\r\n-                        \"use v-else-if to chain them instead.\",\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (currentParent && !element.forbidden) {\r\n-                if (element.elseif || element.else) {\r\n-                    processIfConditions(element, currentParent);\r\n-                } else {\r\n-                    if (element.slotScope) {\r\n-                        \u002F\u002F scoped slot\r\n-                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\r\n-                        \u002F\u002F find it as the prev node.\r\n-                        var name = element.slotTarget || '\"default\"'\r\n-                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\r\n-                    }\r\n-                    currentParent.children.push(element);\r\n-                    element.parent = currentParent;\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F final children cleanup\r\n-            \u002F\u002F filter out scoped slots\r\n-            element.children = element.children.filter(function (c) { return !(c).slotScope; });\r\n-            \u002F\u002F remove trailing whitespace node again\r\n-            trimEndingWhitespace(element);\r\n-\r\n-            \u002F\u002F check pre state\r\n-            if (element.pre) {\r\n-                inVPre = false;\r\n-            }\r\n-            if (platformIsPreTag(element.tag)) {\r\n-                inPre = false;\r\n-            }\r\n-            \u002F\u002F apply post-transforms\r\n-            for (var i = 0; i \u003C postTransforms.length; i++) {\r\n-                postTransforms[i](element, options);\r\n-            }\r\n-        }\r\n-\r\n-        function trimEndingWhitespace (el) {\r\n-            \u002F\u002F remove trailing whitespace node\r\n-            if (!inPre) {\r\n-                var lastNode;\r\n-                while (\r\n-                (lastNode = el.children[el.children.length - 1]) &&\r\n-                lastNode.type === 3 &&\r\n-                lastNode.text === ' '\r\n-                    ) {\r\n-                    el.children.pop();\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function checkRootConstraints (el) {\r\n-            if (el.tag === 'slot' || el.tag === 'template') {\r\n-                warnOnce(\r\n-                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\r\n-                    'contain multiple nodes.',\r\n-                    { start: el.start }\r\n-                );\r\n-            }\r\n-            if (el.attrsMap.hasOwnProperty('v-for')) {\r\n-                warnOnce(\r\n-                    'Cannot use v-for on stateful component root element because ' +\r\n-                    'it renders multiple elements.',\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        parseHTML(template, {\r\n-            warn: warn$2,\r\n-            expectHTML: options.expectHTML,\r\n-            isUnaryTag: options.isUnaryTag,\r\n-            canBeLeftOpenTag: options.canBeLeftOpenTag,\r\n-            shouldDecodeNewlines: options.shouldDecodeNewlines,\r\n-            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\r\n-            shouldKeepComment: options.comments,\r\n-            outputSourceRange: options.outputSourceRange,\r\n-            start: function start (tag, attrs, unary, start$1, end) {\r\n-                \u002F\u002F check namespace.\r\n-                \u002F\u002F inherit parent ns if there is one\r\n-                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\r\n-\r\n-                \u002F\u002F handle IE svg bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE && ns === 'svg') {\r\n-                    attrs = guardIESVGBug(attrs);\r\n-                }\r\n-\r\n-                var element = createASTElement(tag, attrs, currentParent);\r\n-                if (ns) {\r\n-                    element.ns = ns;\r\n-                }\r\n-\r\n-                {\r\n-                    if (options.outputSourceRange) {\r\n-                        element.start = start$1;\r\n-                        element.end = end;\r\n-                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\r\n-                            cumulated[attr.name] = attr;\r\n-                            return cumulated\r\n-                        }, {});\r\n-                    }\r\n-                    attrs.forEach(function (attr) {\r\n-                        if (invalidAttributeRE.test(attr.name)) {\r\n-                            warn$2(\r\n-                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\r\n-                                \"spaces, quotes, \u003C, >, \u002F or =.\",\r\n-                                {\r\n-                                    start: attr.start + attr.name.indexOf(\"[\"),\r\n-                                    end: attr.start + attr.name.length\r\n-                                }\r\n-                            );\r\n-                        }\r\n-                    });\r\n-                }\r\n-\r\n-                if (isForbiddenTag(element) && !isServerRendering()) {\r\n-                    element.forbidden = true;\r\n-                    warn$2(\r\n-                        'Templates should only be responsible for mapping the state to the ' +\r\n-                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\r\n-                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-\r\n-                \u002F\u002F apply pre-transforms\r\n-                for (var i = 0; i \u003C preTransforms.length; i++) {\r\n-                    element = preTransforms[i](element, options) || element;\r\n-                }\r\n-\r\n-                if (!inVPre) {\r\n-                    processPre(element);\r\n-                    if (element.pre) {\r\n-                        inVPre = true;\r\n-                    }\r\n-                }\r\n-                if (platformIsPreTag(element.tag)) {\r\n-                    inPre = true;\r\n-                }\r\n-                if (inVPre) {\r\n-                    processRawAttrs(element);\r\n-                } else if (!element.processed) {\r\n-                    \u002F\u002F structural directives\r\n-                    processFor(element);\r\n-                    processIf(element);\r\n-                    processOnce(element);\r\n-                }\r\n-\r\n-                if (!root) {\r\n-                    root = element;\r\n-                    {\r\n-                        checkRootConstraints(root);\r\n-                    }\r\n-                }\r\n-\r\n-                if (!unary) {\r\n-                    currentParent = element;\r\n-                    stack.push(element);\r\n-                } else {\r\n-                    closeElement(element);\r\n-                }\r\n-            },\r\n-\r\n-            end: function end (tag, start, end$1) {\r\n-                var element = stack[stack.length - 1];\r\n-                \u002F\u002F pop stack\r\n-                stack.length -= 1;\r\n-                currentParent = stack[stack.length - 1];\r\n-                if (options.outputSourceRange) {\r\n-                    element.end = end$1;\r\n-                }\r\n-                closeElement(element);\r\n-            },\r\n-\r\n-            chars: function chars (text, start, end) {\r\n-                if (!currentParent) {\r\n-                    {\r\n-                        if (text === template) {\r\n-                            warnOnce(\r\n-                                'Component template requires a root element, rather than just text.',\r\n-                                { start: start }\r\n-                            );\r\n-                        } else if ((text = text.trim())) {\r\n-                            warnOnce(\r\n-                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\r\n-                                { start: start }\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    return\r\n-                }\r\n-                \u002F\u002F IE textarea placeholder bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE &&\r\n-                    currentParent.tag === 'textarea' &&\r\n-                    currentParent.attrsMap.placeholder === text\r\n-                ) {\r\n-                    return\r\n-                }\r\n-                var children = currentParent.children;\r\n-                if (inPre || text.trim()) {\r\n-                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\r\n-                } else if (!children.length) {\r\n-                    \u002F\u002F remove the whitespace-only node right after an opening tag\r\n-                    text = '';\r\n-                } else if (whitespaceOption) {\r\n-                    if (whitespaceOption === 'condense') {\r\n-                        \u002F\u002F in condense mode, remove the whitespace node if it contains\r\n-                        \u002F\u002F line break, otherwise condense to a single space\r\n-                        text = lineBreakRE.test(text) ? '' : ' ';\r\n-                    } else {\r\n-                        text = ' ';\r\n-                    }\r\n-                } else {\r\n-                    text = preserveWhitespace ? ' ' : '';\r\n-                }\r\n-                if (text) {\r\n-                    if (!inPre && whitespaceOption === 'condense') {\r\n-                        \u002F\u002F condense consecutive whitespaces into single space\r\n-                        text = text.replace(whitespaceRE$1, ' ');\r\n-                    }\r\n-                    var res;\r\n-                    var child;\r\n-                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\r\n-                        child = {\r\n-                            type: 2,\r\n-                            expression: res.expression,\r\n-                            tokens: res.tokens,\r\n-                            text: text\r\n-                        };\r\n-                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\r\n-                        child = {\r\n-                            type: 3,\r\n-                            text: text\r\n-                        };\r\n-                    }\r\n-                    if (child) {\r\n-                        if (options.outputSourceRange) {\r\n-                            child.start = start;\r\n-                            child.end = end;\r\n-                        }\r\n-                        children.push(child);\r\n-                    }\r\n-                }\r\n-            },\r\n-            comment: function comment (text, start, end) {\r\n-                \u002F\u002F adding anyting as a sibling to the root node is forbidden\r\n-                \u002F\u002F comments should still be allowed, but ignored\r\n-                if (currentParent) {\r\n-                    var child = {\r\n-                        type: 3,\r\n-                        text: text,\r\n-                        isComment: true\r\n-                    };\r\n-                    if (options.outputSourceRange) {\r\n-                        child.start = start;\r\n-                        child.end = end;\r\n-                    }\r\n-                    currentParent.children.push(child);\r\n-                }\r\n-            }\r\n-        });\r\n-        return root\r\n-    }\r\n-\r\n-    function processPre (el) {\r\n-        if (getAndRemoveAttr(el, 'v-pre') != null) {\r\n-            el.pre = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processRawAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var len = list.length;\r\n-        if (len) {\r\n-            var attrs = el.attrs = new Array(len);\r\n-            for (var i = 0; i \u003C len; i++) {\r\n-                attrs[i] = {\r\n-                    name: list[i].name,\r\n-                    value: JSON.stringify(list[i].value)\r\n-                };\r\n-                if (list[i].start != null) {\r\n-                    attrs[i].start = list[i].start;\r\n-                    attrs[i].end = list[i].end;\r\n-                }\r\n-            }\r\n-        } else if (!el.pre) {\r\n-            \u002F\u002F non root node in pre blocks with no attributes\r\n-            el.plain = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processElement (\r\n-        element,\r\n-        options\r\n-    ) {\r\n-        processKey(element);\r\n-\r\n-        \u002F\u002F determine whether this is a plain element after\r\n-        \u002F\u002F removing structural attributes\r\n-        element.plain = (\r\n-            !element.key &&\r\n-            !element.scopedSlots &&\r\n-            !element.attrsList.length\r\n-        );\r\n-\r\n-        processRef(element);\r\n-        processSlotContent(element);\r\n-        processSlotOutlet(element);\r\n-        processComponent(element);\r\n-        for (var i = 0; i \u003C transforms.length; i++) {\r\n-            element = transforms[i](element, options) || element;\r\n-        }\r\n-        processAttrs(element);\r\n-        return element\r\n-    }\r\n-\r\n-    function processKey (el) {\r\n-        var exp = getBindingAttr(el, 'key');\r\n-        if (exp) {\r\n-            {\r\n-                if (el.tag === 'template') {\r\n-                    warn$2(\r\n-                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\r\n-                        getRawBindingAttr(el, 'key')\r\n-                    );\r\n-                }\r\n-                if (el.for) {\r\n-                    var iterator = el.iterator2 || el.iterator1;\r\n-                    var parent = el.parent;\r\n-                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\r\n-                        warn$2(\r\n-                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\r\n-                            \"this is the same as not using keys.\",\r\n-                            getRawBindingAttr(el, 'key'),\r\n-                            true \u002F* tip *\u002F\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-            el.key = exp;\r\n-        }\r\n-    }\r\n-\r\n-    function processRef (el) {\r\n-        var ref = getBindingAttr(el, 'ref');\r\n-        if (ref) {\r\n-            el.ref = ref;\r\n-            el.refInFor = checkInFor(el);\r\n-        }\r\n-    }\r\n-\r\n-    function processFor (el) {\r\n-        var exp;\r\n-        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\r\n-            var res = parseFor(exp);\r\n-            if (res) {\r\n-                extend(el, res);\r\n-            } else {\r\n-                warn$2(\r\n-                    (\"Invalid v-for expression: \" + exp),\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-\r\n-    function parseFor (exp) {\r\n-        var inMatch = exp.match(forAliasRE);\r\n-        if (!inMatch) { return }\r\n-        var res = {};\r\n-        res.for = inMatch[2].trim();\r\n-        var alias = inMatch[1].trim().replace(stripParensRE, '');\r\n-        var iteratorMatch = alias.match(forIteratorRE);\r\n-        if (iteratorMatch) {\r\n-            res.alias = alias.replace(forIteratorRE, '').trim();\r\n-            res.iterator1 = iteratorMatch[1].trim();\r\n-            if (iteratorMatch[2]) {\r\n-                res.iterator2 = iteratorMatch[2].trim();\r\n-            }\r\n-        } else {\r\n-            res.alias = alias;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function processIf (el) {\r\n-        var exp = getAndRemoveAttr(el, 'v-if');\r\n-        if (exp) {\r\n-            el.if = exp;\r\n-            addIfCondition(el, {\r\n-                exp: exp,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            if (getAndRemoveAttr(el, 'v-else') != null) {\r\n-                el.else = true;\r\n-            }\r\n-            var elseif = getAndRemoveAttr(el, 'v-else-if');\r\n-            if (elseif) {\r\n-                el.elseif = elseif;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processIfConditions (el, parent) {\r\n-        var prev = findPrevElement(parent.children);\r\n-        if (prev && prev.if) {\r\n-            addIfCondition(prev, {\r\n-                exp: el.elseif,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            warn$2(\r\n-                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\r\n-                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\r\n-                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function findPrevElement (children) {\r\n-        var i = children.length;\r\n-        while (i--) {\r\n-            if (children[i].type === 1) {\r\n-                return children[i]\r\n-            } else {\r\n-                if (children[i].text !== ' ') {\r\n-                    warn$2(\r\n-                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\r\n-                        \"will be ignored.\",\r\n-                        children[i]\r\n-                    );\r\n-                }\r\n-                children.pop();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function addIfCondition (el, condition) {\r\n-        if (!el.ifConditions) {\r\n-            el.ifConditions = [];\r\n-        }\r\n-        el.ifConditions.push(condition);\r\n-    }\r\n-\r\n-    function processOnce (el) {\r\n-        var once$$1 = getAndRemoveAttr(el, 'v-once');\r\n-        if (once$$1 != null) {\r\n-            el.once = true;\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F handle content being passed to a component as slot,\r\n-    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\r\n-    function processSlotContent (el) {\r\n-        var slotScope;\r\n-        if (el.tag === 'template') {\r\n-            slotScope = getAndRemoveAttr(el, 'scope');\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (slotScope) {\r\n-                warn$2(\r\n-                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\r\n-                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\r\n-                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\r\n-                    \"denote scoped slots.\",\r\n-                    el.rawAttrsMap['scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\r\n-        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (el.attrsMap['v-for']) {\r\n-                warn$2(\r\n-                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\r\n-                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\r\n-                    \"scoped slot to make it clearer.\",\r\n-                    el.rawAttrsMap['slot-scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope;\r\n-        }\r\n-\r\n-        \u002F\u002F slot=\"xxx\"\r\n-        var slotTarget = getBindingAttr(el, 'slot');\r\n-        if (slotTarget) {\r\n-            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\r\n-            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\r\n-            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\r\n-            \u002F\u002F only for non-scoped slots.\r\n-            if (el.tag !== 'template' && !el.slotScope) {\r\n-                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F 2.6 v-slot syntax\r\n-        {\r\n-            if (el.tag === 'template') {\r\n-                \u002F\u002F v-slot on \u003Ctemplate>\r\n-                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding) {\r\n-                    {\r\n-                        if (el.slotTarget || el.slotScope) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.parent && !maybeComponent(el.parent)) {\r\n-                            warn$2(\r\n-                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\r\n-                                \"the receiving the component\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    var ref = getSlotName(slotBinding);\r\n-                    var name = ref.name;\r\n-                    var dynamic = ref.dynamic;\r\n-                    el.slotTarget = name;\r\n-                    el.slotTargetDynamic = dynamic;\r\n-                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F v-slot on component, denotes default slot\r\n-                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding$1) {\r\n-                    {\r\n-                        if (!maybeComponent(el)) {\r\n-                            warn$2(\r\n-                                \"v-slot can only be used on components or \u003Ctemplate>.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                        if (el.slotScope || el.slotTarget) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.scopedSlots) {\r\n-                            warn$2(\r\n-                                \"To avoid scope ambiguity, the default slot should also use \" +\r\n-                                \"\u003Ctemplate> syntax when there are other named slots.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    \u002F\u002F add the component's children to its default slot\r\n-                    var slots = el.scopedSlots || (el.scopedSlots = {});\r\n-                    var ref$1 = getSlotName(slotBinding$1);\r\n-                    var name$1 = ref$1.name;\r\n-                    var dynamic$1 = ref$1.dynamic;\r\n-                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\r\n-                    slotContainer.slotTarget = name$1;\r\n-                    slotContainer.slotTargetDynamic = dynamic$1;\r\n-                    slotContainer.children = el.children.filter(function (c) {\r\n-                        if (!c.slotScope) {\r\n-                            c.parent = slotContainer;\r\n-                            return true\r\n-                        }\r\n-                    });\r\n-                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\r\n-                    \u002F\u002F remove children as they are returned from scopedSlots now\r\n-                    el.children = [];\r\n-                    \u002F\u002F mark el non-plain so data gets generated\r\n-                    el.plain = false;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function getSlotName (binding) {\r\n-        var name = binding.name.replace(slotRE, '');\r\n-        if (!name) {\r\n-            if (binding.name[0] !== '#') {\r\n-                name = 'default';\r\n-            } else {\r\n-                warn$2(\r\n-                    \"v-slot shorthand syntax requires a slot name.\",\r\n-                    binding\r\n-                );\r\n-            }\r\n-        }\r\n-        return dynamicArgRE.test(name)\r\n-            \u002F\u002F dynamic [name]\r\n-            ? { name: name.slice(1, -1), dynamic: true }\r\n-            \u002F\u002F static name\r\n-            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\r\n-    }\r\n-\r\n-    \u002F\u002F handle \u003Cslot\u002F> outlets\r\n-    function processSlotOutlet (el) {\r\n-        if (el.tag === 'slot') {\r\n-            el.slotName = getBindingAttr(el, 'name');\r\n-            if (el.key) {\r\n-                warn$2(\r\n-                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\r\n-                    \"and can possibly expand into multiple elements. \" +\r\n-                    \"Use the key on a wrapping element instead.\",\r\n-                    getRawBindingAttr(el, 'key')\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processComponent (el) {\r\n-        var binding;\r\n-        if ((binding = getBindingAttr(el, 'is'))) {\r\n-            el.component = binding;\r\n-        }\r\n-        if (getAndRemoveAttr(el, 'inline-template') != null) {\r\n-            el.inlineTemplate = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\r\n-        for (i = 0, l = list.length; i \u003C l; i++) {\r\n-            name = rawName = list[i].name;\r\n-            value = list[i].value;\r\n-            if (dirRE.test(name)) {\r\n-                \u002F\u002F mark element as dynamic\r\n-                el.hasBindings = true;\r\n-                \u002F\u002F modifiers\r\n-                modifiers = parseModifiers(name.replace(dirRE, ''));\r\n-                \u002F\u002F support .foo shorthand syntax for the .prop modifier\r\n-                if (modifiers) {\r\n-                    name = name.replace(modifierRE, '');\r\n-                }\r\n-                if (bindRE.test(name)) { \u002F\u002F v-bind\r\n-                    name = name.replace(bindRE, '');\r\n-                    value = parseFilters(value);\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    if (\r\n-                        value.trim().length === 0\r\n-                    ) {\r\n-                        warn$2(\r\n-                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\r\n-                        );\r\n-                    }\r\n-                    if (modifiers) {\r\n-                        if (modifiers.prop && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                            if (name === 'innerHtml') { name = 'innerHTML'; }\r\n-                        }\r\n-                        if (modifiers.camel && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                        }\r\n-                        if (modifiers.sync) {\r\n-                            syncGen = genAssignmentCode(value, \"$event\");\r\n-                            if (!isDynamic) {\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"update:\" + (camelize(name))),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i]\r\n-                                );\r\n-                                if (hyphenate(name) !== camelize(name)) {\r\n-                                    addHandler(\r\n-                                        el,\r\n-                                        (\"update:\" + (hyphenate(name))),\r\n-                                        syncGen,\r\n-                                        null,\r\n-                                        false,\r\n-                                        warn$2,\r\n-                                        list[i]\r\n-                                    );\r\n-                                }\r\n-                            } else {\r\n-                                \u002F\u002F handler w\u002F dynamic event name\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"\\\"update:\\\"+(\" + name + \")\"),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i],\r\n-                                    true \u002F\u002F dynamic\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if ((modifiers && modifiers.prop) || (\r\n-                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\r\n-                        )) {\r\n-                        addProp(el, name, value, list[i], isDynamic);\r\n-                    } else {\r\n-                        addAttr(el, name, value, list[i], isDynamic);\r\n-                    }\r\n-                } else if (onRE.test(name)) { \u002F\u002F v-on\r\n-                    name = name.replace(onRE, '');\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\r\n-                } else { \u002F\u002F normal directives\r\n-                    name = name.replace(dirRE, '');\r\n-                    \u002F\u002F parse arg\r\n-                    var argMatch = name.match(argRE);\r\n-                    var arg = argMatch && argMatch[1];\r\n-                    isDynamic = false;\r\n-                    if (arg) {\r\n-                        name = name.slice(0, -(arg.length + 1));\r\n-                        if (dynamicArgRE.test(arg)) {\r\n-                            arg = arg.slice(1, -1);\r\n-                            isDynamic = true;\r\n-                        }\r\n-                    }\r\n-                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\r\n-                    if (name === 'model') {\r\n-                        checkForAliasModel(el, value);\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F literal attribute\r\n-                {\r\n-                    var res = parseText(value, delimiters);\r\n-                    if (res) {\r\n-                        warn$2(\r\n-                            name + \"=\\\"\" + value + \"\\\": \" +\r\n-                            'Interpolation inside attributes has been removed. ' +\r\n-                            'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\r\n-                            list[i]\r\n-                        );\r\n-                    }\r\n-                }\r\n-                addAttr(el, name, JSON.stringify(value), list[i]);\r\n-                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\r\n-                \u002F\u002F even immediately after element creation\r\n-                if (!el.component &&\r\n-                    name === 'muted' &&\r\n-                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\r\n-                    addProp(el, name, 'true', list[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkInFor (el) {\r\n-        var parent = el;\r\n-        while (parent) {\r\n-            if (parent.for !== undefined) {\r\n-                return true\r\n-            }\r\n-            parent = parent.parent;\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function parseModifiers (name) {\r\n-        var match = name.match(modifierRE);\r\n-        if (match) {\r\n-            var ret = {};\r\n-            match.forEach(function (m) { ret[m.slice(1)] = true; });\r\n-            return ret\r\n-        }\r\n-    }\r\n-\r\n-    function makeAttrsMap (attrs) {\r\n-        var map = {};\r\n-        for (var i = 0, l = attrs.length; i \u003C l; i++) {\r\n-            if (\r\n-                map[attrs[i].name] && !isIE && !isEdge\r\n-            ) {\r\n-                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\r\n-            }\r\n-            map[attrs[i].name] = attrs[i].value;\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\r\n-    function isTextTag (el) {\r\n-        return el.tag === 'script' || el.tag === 'style'\r\n-    }\r\n-\r\n-    function isForbiddenTag (el) {\r\n-        return (\r\n-            el.tag === 'style' ||\r\n-            (el.tag === 'script' && (\r\n-                !el.attrsMap.type ||\r\n-                el.attrsMap.type === 'text\u002Fjavascript'\r\n-            ))\r\n-        )\r\n-    }\r\n-\r\n-    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\r\n-    var ieNSPrefix = \u002F^NS\\d+:\u002F;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function guardIESVGBug (attrs) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C attrs.length; i++) {\r\n-            var attr = attrs[i];\r\n-            if (!ieNSBug.test(attr.name)) {\r\n-                attr.name = attr.name.replace(ieNSPrefix, '');\r\n-                res.push(attr);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkForAliasModel (el, value) {\r\n-        var _el = el;\r\n-        while (_el) {\r\n-            if (_el.for && _el.alias === value) {\r\n-                warn$2(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                    \"You are binding v-model directly to a v-for iteration alias. \" +\r\n-                    \"This will not be able to modify the v-for source array because \" +\r\n-                    \"writing to the alias is like modifying a function local variable. \" +\r\n-                    \"Consider using an array of objects and use v-model on an object property instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-            _el = _el.parent;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function preTransformNode (el, options) {\r\n-        if (el.tag === 'input') {\r\n-            var map = el.attrsMap;\r\n-            if (!map['v-model']) {\r\n-                return\r\n-            }\r\n-\r\n-            var typeBinding;\r\n-            if (map[':type'] || map['v-bind:type']) {\r\n-                typeBinding = getBindingAttr(el, 'type');\r\n-            }\r\n-            if (!map.type && !typeBinding && map['v-bind']) {\r\n-                typeBinding = \"(\" + (map['v-bind']) + \").type\";\r\n-            }\r\n-\r\n-            if (typeBinding) {\r\n-                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\r\n-                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\r\n-                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\r\n-                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\r\n-                \u002F\u002F 1. checkbox\r\n-                var branch0 = cloneASTElement(el);\r\n-                \u002F\u002F process for on the main node\r\n-                processFor(branch0);\r\n-                addRawAttr(branch0, 'type', 'checkbox');\r\n-                processElement(branch0, options);\r\n-                branch0.processed = true; \u002F\u002F prevent it from double-processed\r\n-                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\r\n-                addIfCondition(branch0, {\r\n-                    exp: branch0.if,\r\n-                    block: branch0\r\n-                });\r\n-                \u002F\u002F 2. add radio else-if condition\r\n-                var branch1 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch1, 'v-for', true);\r\n-                addRawAttr(branch1, 'type', 'radio');\r\n-                processElement(branch1, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\r\n-                    block: branch1\r\n-                });\r\n-                \u002F\u002F 3. other\r\n-                var branch2 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch2, 'v-for', true);\r\n-                addRawAttr(branch2, ':type', typeBinding);\r\n-                processElement(branch2, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: ifCondition,\r\n-                    block: branch2\r\n-                });\r\n-\r\n-                if (hasElse) {\r\n-                    branch0.else = true;\r\n-                } else if (elseIfCondition) {\r\n-                    branch0.elseif = elseIfCondition;\r\n-                }\r\n-\r\n-                return branch0\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function cloneASTElement (el) {\r\n-        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\r\n-    }\r\n-\r\n-    var model$1 = {\r\n-        preTransformNode: preTransformNode\r\n-    };\r\n-\r\n-    var modules$1 = [\r\n-        klass$1,\r\n-        style$1,\r\n-        model$1\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function text (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function html (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-    var directives$1 = {\r\n-        model: model,\r\n-        text: text,\r\n-        html: html\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseOptions = {\r\n-        expectHTML: true,\r\n-        modules: modules$1,\r\n-        directives: directives$1,\r\n-        isPreTag: isPreTag,\r\n-        isUnaryTag: isUnaryTag,\r\n-        mustUseProp: mustUseProp,\r\n-        canBeLeftOpenTag: canBeLeftOpenTag,\r\n-        isReservedTag: isReservedTag,\r\n-        getTagNamespace: getTagNamespace,\r\n-        staticKeys: genStaticKeys(modules$1)\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isStaticKey;\r\n-    var isPlatformReservedTag;\r\n-\r\n-    var genStaticKeysCached = cached(genStaticKeys$1);\r\n-\r\n-    \u002F**\r\n-     * Goal of the optimizer: walk the generated template AST tree\r\n-     * and detect sub-trees that are purely static, i.e. parts of\r\n-     * the DOM that never needs to change.\r\n-     *\r\n-     * Once we detect these sub-trees, we can:\r\n-     *\r\n-     * 1. Hoist them into constants, so that we no longer need to\r\n-     *    create fresh nodes for them on each re-render;\r\n-     * 2. Completely skip them in the patching process.\r\n-     *\u002F\r\n-    function optimize (root, options) {\r\n-        if (!root) { return }\r\n-        isStaticKey = genStaticKeysCached(options.staticKeys || '');\r\n-        isPlatformReservedTag = options.isReservedTag || no;\r\n-        \u002F\u002F first pass: mark all non-static nodes.\r\n-        markStatic$1(root);\r\n-        \u002F\u002F second pass: mark static roots.\r\n-        markStaticRoots(root, false);\r\n-    }\r\n-\r\n-    function genStaticKeys$1 (keys) {\r\n-        return makeMap(\r\n-            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\r\n-            (keys ? ',' + keys : '')\r\n-        )\r\n-    }\r\n-\r\n-    function markStatic$1 (node) {\r\n-        node.static = isStatic(node);\r\n-        if (node.type === 1) {\r\n-            \u002F\u002F do not make component slot content static. this avoids\r\n-            \u002F\u002F 1. components not able to mutate slot nodes\r\n-            \u002F\u002F 2. static slot content fails for hot-reloading\r\n-            if (\r\n-                !isPlatformReservedTag(node.tag) &&\r\n-                node.tag !== 'slot' &&\r\n-                node.attrsMap['inline-template'] == null\r\n-            ) {\r\n-                return\r\n-            }\r\n-            for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                var child = node.children[i];\r\n-                markStatic$1(child);\r\n-                if (!child.static) {\r\n-                    node.static = false;\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    var block = node.ifConditions[i$1].block;\r\n-                    markStatic$1(block);\r\n-                    if (!block.static) {\r\n-                        node.static = false;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticRoots (node, isInFor) {\r\n-        if (node.type === 1) {\r\n-            if (node.static || node.once) {\r\n-                node.staticInFor = isInFor;\r\n-            }\r\n-            \u002F\u002F For a node to qualify as a static root, it should have children that\r\n-            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\r\n-            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\r\n-            if (node.static && node.children.length && !(\r\n-                    node.children.length === 1 &&\r\n-                    node.children[0].type === 3\r\n-                )) {\r\n-                node.staticRoot = true;\r\n-                return\r\n-            } else {\r\n-                node.staticRoot = false;\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                    markStaticRoots(node.children[i], isInFor || !!node.for);\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isStatic (node) {\r\n-        if (node.type === 2) { \u002F\u002F expression\r\n-            return false\r\n-        }\r\n-        if (node.type === 3) { \u002F\u002F text\r\n-            return true\r\n-        }\r\n-        return !!(node.pre || (\r\n-            !node.hasBindings && \u002F\u002F no dynamic bindings\r\n-            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\r\n-            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\r\n-            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\r\n-            !isDirectChildOfTemplateFor(node) &&\r\n-            Object.keys(node).every(isStaticKey)\r\n-        ))\r\n-    }\r\n-\r\n-    function isDirectChildOfTemplateFor (node) {\r\n-        while (node.parent) {\r\n-            node = node.parent;\r\n-            if (node.tag !== 'template') {\r\n-                return false\r\n-            }\r\n-            if (node.for) {\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\r\n-    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\r\n-    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\r\n-\r\n-    \u002F\u002F KeyboardEvent.keyCode aliases\r\n-    var keyCodes = {\r\n-        esc: 27,\r\n-        tab: 9,\r\n-        enter: 13,\r\n-        space: 32,\r\n-        up: 38,\r\n-        left: 37,\r\n-        right: 39,\r\n-        down: 40,\r\n-        'delete': [8, 46]\r\n-    };\r\n-\r\n-    \u002F\u002F KeyboardEvent.key aliases\r\n-    var keyNames = {\r\n-        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\r\n-        esc: ['Esc', 'Escape'],\r\n-        tab: 'Tab',\r\n-        enter: 'Enter',\r\n-        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\r\n-        space: [' ', 'Spacebar'],\r\n-        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\r\n-        up: ['Up', 'ArrowUp'],\r\n-        left: ['Left', 'ArrowLeft'],\r\n-        right: ['Right', 'ArrowRight'],\r\n-        down: ['Down', 'ArrowDown'],\r\n-        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\r\n-        'delete': ['Backspace', 'Delete', 'Del']\r\n-    };\r\n-\r\n-    \u002F\u002F #4868: modifiers that prevent the execution of the listener\r\n-    \u002F\u002F need to explicitly return null so that we can determine whether to remove\r\n-    \u002F\u002F the listener for .once\r\n-    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\r\n-\r\n-    var modifierCode = {\r\n-        stop: '$event.stopPropagation();',\r\n-        prevent: '$event.preventDefault();',\r\n-        self: genGuard(\"$event.target !== $event.currentTarget\"),\r\n-        ctrl: genGuard(\"!$event.ctrlKey\"),\r\n-        shift: genGuard(\"!$event.shiftKey\"),\r\n-        alt: genGuard(\"!$event.altKey\"),\r\n-        meta: genGuard(\"!$event.metaKey\"),\r\n-        left: genGuard(\"'button' in $event && $event.button !== 0\"),\r\n-        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\r\n-        right: genGuard(\"'button' in $event && $event.button !== 2\")\r\n-    };\r\n-\r\n-    function genHandlers (\r\n-        events,\r\n-        isNative\r\n-    ) {\r\n-        var prefix = isNative ? 'nativeOn:' : 'on:';\r\n-        var staticHandlers = \"\";\r\n-        var dynamicHandlers = \"\";\r\n-        for (var name in events) {\r\n-            var handlerCode = genHandler(events[name]);\r\n-            if (events[name] && events[name].dynamic) {\r\n-                dynamicHandlers += name + \",\" + handlerCode + \",\";\r\n-            } else {\r\n-                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\r\n-            }\r\n-        }\r\n-        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\r\n-        if (dynamicHandlers) {\r\n-            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\r\n-        } else {\r\n-            return prefix + staticHandlers\r\n-        }\r\n-    }\r\n-\r\n-    function genHandler (handler) {\r\n-        if (!handler) {\r\n-            return 'function(){}'\r\n-        }\r\n-\r\n-        if (Array.isArray(handler)) {\r\n-            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\r\n-        }\r\n-\r\n-        var isMethodPath = simplePathRE.test(handler.value);\r\n-        var isFunctionExpression = fnExpRE.test(handler.value);\r\n-        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\r\n-\r\n-        if (!handler.modifiers) {\r\n-            if (isMethodPath || isFunctionExpression) {\r\n-                return handler.value\r\n-            }\r\n-            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\r\n-        } else {\r\n-            var code = '';\r\n-            var genModifierCode = '';\r\n-            var keys = [];\r\n-            for (var key in handler.modifiers) {\r\n-                if (modifierCode[key]) {\r\n-                    genModifierCode += modifierCode[key];\r\n-                    \u002F\u002F left\u002Fright\r\n-                    if (keyCodes[key]) {\r\n-                        keys.push(key);\r\n-                    }\r\n-                } else if (key === 'exact') {\r\n-                    var modifiers = (handler.modifiers);\r\n-                    genModifierCode += genGuard(\r\n-                        ['ctrl', 'shift', 'alt', 'meta']\r\n-                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\r\n-                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\r\n-                            .join('||')\r\n-                    );\r\n-                } else {\r\n-                    keys.push(key);\r\n-                }\r\n-            }\r\n-            if (keys.length) {\r\n-                code += genKeyFilter(keys);\r\n-            }\r\n-            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\r\n-            if (genModifierCode) {\r\n-                code += genModifierCode;\r\n-            }\r\n-            var handlerCode = isMethodPath\r\n-                ? (\"return \" + (handler.value) + \"($event)\")\r\n-                : isFunctionExpression\r\n-                    ? (\"return (\" + (handler.value) + \")($event)\")\r\n-                    : isFunctionInvocation\r\n-                        ? (\"return \" + (handler.value))\r\n-                        : handler.value;\r\n-            return (\"function($event){\" + code + handlerCode + \"}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genKeyFilter (keys) {\r\n-        return (\r\n-            \u002F\u002F make sure the key filters only apply to KeyboardEvents\r\n-            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\r\n-            \u002F\u002F key events that do not have keyCode property...\r\n-            \"if(!$event.type.indexOf('key')&&\" +\r\n-            (keys.map(genFilterCode).join('&&')) + \")return null;\"\r\n-        )\r\n-    }\r\n-\r\n-    function genFilterCode (key) {\r\n-        var keyVal = parseInt(key, 10);\r\n-        if (keyVal) {\r\n-            return (\"$event.keyCode!==\" + keyVal)\r\n-        }\r\n-        var keyCode = keyCodes[key];\r\n-        var keyName = keyNames[key];\r\n-        return (\r\n-            \"_k($event.keyCode,\" +\r\n-            (JSON.stringify(key)) + \",\" +\r\n-            (JSON.stringify(keyCode)) + \",\" +\r\n-            \"$event.key,\" +\r\n-            \"\" + (JSON.stringify(keyName)) +\r\n-            \")\"\r\n-        )\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function on (el, dir) {\r\n-        if (dir.modifiers) {\r\n-            warn(\"v-on without argument does not support modifiers.\");\r\n-        }\r\n-        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bind$1 (el, dir) {\r\n-        el.wrapData = function (code) {\r\n-            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseDirectives = {\r\n-        on: on,\r\n-        bind: bind$1,\r\n-        cloak: noop\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-\r\n-\r\n-    var CodegenState = function CodegenState (options) {\r\n-        this.options = options;\r\n-        this.warn = options.warn || baseWarn;\r\n-        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\r\n-        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\r\n-        this.directives = extend(extend({}, baseDirectives), options.directives);\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-        this.onceId = 0;\r\n-        this.staticRenderFns = [];\r\n-        this.pre = false;\r\n-    };\r\n-\r\n-\r\n-\r\n-    function generate (\r\n-        ast,\r\n-        options\r\n-    ) {\r\n-        var state = new CodegenState(options);\r\n-        var code = ast ? genElement(ast, state) : '_c(\"div\")';\r\n-        return {\r\n-            render: (\"with(this){return \" + code + \"}\"),\r\n-            staticRenderFns: state.staticRenderFns\r\n-        }\r\n-    }\r\n-\r\n-    function genElement (el, state) {\r\n-        if (el.parent) {\r\n-            el.pre = el.pre || el.parent.pre;\r\n-        }\r\n-\r\n-        if (el.staticRoot && !el.staticProcessed) {\r\n-            return genStatic(el, state)\r\n-        } else if (el.once && !el.onceProcessed) {\r\n-            return genOnce(el, state)\r\n-        } else if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state)\r\n-        } else if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\r\n-            return genChildren(el, state) || 'void 0'\r\n-        } else if (el.tag === 'slot') {\r\n-            return genSlot(el, state)\r\n-        } else {\r\n-            \u002F\u002F component or element\r\n-            var code;\r\n-            if (el.component) {\r\n-                code = genComponent(el.component, el, state);\r\n-            } else {\r\n-                var data;\r\n-                if (!el.plain || (el.pre && state.maybeComponent(el))) {\r\n-                    data = genData$2(el, state);\r\n-                }\r\n-\r\n-                var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\r\n-            }\r\n-            \u002F\u002F module transforms\r\n-            for (var i = 0; i \u003C state.transforms.length; i++) {\r\n-                code = state.transforms[i](el, code);\r\n-            }\r\n-            return code\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F hoist static sub-trees out\r\n-    function genStatic (el, state) {\r\n-        el.staticProcessed = true;\r\n-        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\r\n-        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\r\n-        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\r\n-        var originalPreState = state.pre;\r\n-        if (el.pre) {\r\n-            state.pre = el.pre;\r\n-        }\r\n-        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\r\n-        state.pre = originalPreState;\r\n-        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\r\n-    }\r\n-\r\n-    \u002F\u002F v-once\r\n-    function genOnce (el, state) {\r\n-        el.onceProcessed = true;\r\n-        if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.staticInFor) {\r\n-            var key = '';\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (parent.for) {\r\n-                    key = parent.key;\r\n-                    break\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-            if (!key) {\r\n-                state.warn(\r\n-                    \"v-once can only be used inside v-for that is keyed. \",\r\n-                    el.rawAttrsMap['v-once']\r\n-                );\r\n-                return genElement(el, state)\r\n-            }\r\n-            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\r\n-        } else {\r\n-            return genStatic(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genIf (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        el.ifProcessed = true; \u002F\u002F avoid recursion\r\n-        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\r\n-    }\r\n-\r\n-    function genIfConditions (\r\n-        conditions,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        if (!conditions.length) {\r\n-            return altEmpty || '_e()'\r\n-        }\r\n-\r\n-        var condition = conditions.shift();\r\n-        if (condition.exp) {\r\n-            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\r\n-        } else {\r\n-            return (\"\" + (genTernaryExp(condition.block)))\r\n-        }\r\n-\r\n-        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\r\n-        function genTernaryExp (el) {\r\n-            return altGen\r\n-                ? altGen(el, state)\r\n-                : el.once\r\n-                    ? genOnce(el, state)\r\n-                    : genElement(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genFor (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altHelper\r\n-    ) {\r\n-        var exp = el.for;\r\n-        var alias = el.alias;\r\n-        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\r\n-        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\r\n-\r\n-        if (state.maybeComponent(el) &&\r\n-            el.tag !== 'slot' &&\r\n-            el.tag !== 'template' &&\r\n-            !el.key\r\n-        ) {\r\n-            state.warn(\r\n-                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\r\n-                \"v-for should have explicit keys. \" +\r\n-                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\r\n-                el.rawAttrsMap['v-for'],\r\n-                true \u002F* tip *\u002F\r\n-            );\r\n-        }\r\n-\r\n-        el.forProcessed = true; \u002F\u002F avoid recursion\r\n-        return (altHelper || '_l') + \"((\" + exp + \"),\" +\r\n-            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\r\n-            \"return \" + ((altGen || genElement)(el, state)) +\r\n-            '})'\r\n-    }\r\n-\r\n-    function genData$2 (el, state) {\r\n-        var data = '{';\r\n-\r\n-        \u002F\u002F directives first.\r\n-        \u002F\u002F directives may mutate the el's other properties before they are generated.\r\n-        var dirs = genDirectives(el, state);\r\n-        if (dirs) { data += dirs + ','; }\r\n-\r\n-        \u002F\u002F key\r\n-        if (el.key) {\r\n-            data += \"key:\" + (el.key) + \",\";\r\n-        }\r\n-        \u002F\u002F ref\r\n-        if (el.ref) {\r\n-            data += \"ref:\" + (el.ref) + \",\";\r\n-        }\r\n-        if (el.refInFor) {\r\n-            data += \"refInFor:true,\";\r\n-        }\r\n-        \u002F\u002F pre\r\n-        if (el.pre) {\r\n-            data += \"pre:true,\";\r\n-        }\r\n-        \u002F\u002F record original tag name for components using \"is\" attribute\r\n-        if (el.component) {\r\n-            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\r\n-        }\r\n-        \u002F\u002F module data generation functions\r\n-        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\r\n-            data += state.dataGenFns[i](el);\r\n-        }\r\n-        \u002F\u002F attributes\r\n-        if (el.attrs) {\r\n-            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\r\n-        }\r\n-        \u002F\u002F DOM props\r\n-        if (el.props) {\r\n-            data += \"domProps:\" + (genProps(el.props)) + \",\";\r\n-        }\r\n-        \u002F\u002F event handlers\r\n-        if (el.events) {\r\n-            data += (genHandlers(el.events, false)) + \",\";\r\n-        }\r\n-        if (el.nativeEvents) {\r\n-            data += (genHandlers(el.nativeEvents, true)) + \",\";\r\n-        }\r\n-        \u002F\u002F slot target\r\n-        \u002F\u002F only for non-scoped slots\r\n-        if (el.slotTarget && !el.slotScope) {\r\n-            data += \"slot:\" + (el.slotTarget) + \",\";\r\n-        }\r\n-        \u002F\u002F scoped slots\r\n-        if (el.scopedSlots) {\r\n-            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\r\n-        }\r\n-        \u002F\u002F component v-model\r\n-        if (el.model) {\r\n-            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\r\n-        }\r\n-        \u002F\u002F inline-template\r\n-        if (el.inlineTemplate) {\r\n-            var inlineTemplate = genInlineTemplate(el, state);\r\n-            if (inlineTemplate) {\r\n-                data += inlineTemplate + \",\";\r\n-            }\r\n-        }\r\n-        data = data.replace(\u002F,$\u002F, '') + '}';\r\n-        \u002F\u002F v-bind dynamic argument wrap\r\n-        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\r\n-        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\r\n-        if (el.dynamicAttrs) {\r\n-            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\r\n-        }\r\n-        \u002F\u002F v-bind data wrap\r\n-        if (el.wrapData) {\r\n-            data = el.wrapData(data);\r\n-        }\r\n-        \u002F\u002F v-on data wrap\r\n-        if (el.wrapListeners) {\r\n-            data = el.wrapListeners(data);\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function genDirectives (el, state) {\r\n-        var dirs = el.directives;\r\n-        if (!dirs) { return }\r\n-        var res = 'directives:[';\r\n-        var hasRuntime = false;\r\n-        var i, l, dir, needRuntime;\r\n-        for (i = 0, l = dirs.length; i \u003C l; i++) {\r\n-            dir = dirs[i];\r\n-            needRuntime = true;\r\n-            var gen = state.directives[dir.name];\r\n-            if (gen) {\r\n-                \u002F\u002F compile-time directive that manipulates AST.\r\n-                \u002F\u002F returns true if it also needs a runtime counterpart.\r\n-                needRuntime = !!gen(el, dir, state.warn);\r\n-            }\r\n-            if (needRuntime) {\r\n-                hasRuntime = true;\r\n-                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\r\n-            }\r\n-        }\r\n-        if (hasRuntime) {\r\n-            return res.slice(0, -1) + ']'\r\n-        }\r\n-    }\r\n-\r\n-    function genInlineTemplate (el, state) {\r\n-        var ast = el.children[0];\r\n-        if (el.children.length !== 1 || ast.type !== 1) {\r\n-            state.warn(\r\n-                'Inline-template components must have exactly one child element.',\r\n-                { start: el.start }\r\n-            );\r\n-        }\r\n-        if (ast && ast.type === 1) {\r\n-            var inlineRenderFns = generate(ast, state.options);\r\n-            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genScopedSlots (\r\n-        el,\r\n-        slots,\r\n-        state\r\n-    ) {\r\n-        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\r\n-        \u002F\u002F components with only scoped slots to skip forced updates from parent.\r\n-        \u002F\u002F but in some cases we have to bail-out of this optimization\r\n-        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\r\n-        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\r\n-                var slot = slots[key];\r\n-                return (\r\n-                    slot.slotTargetDynamic ||\r\n-                    slot.if ||\r\n-                    slot.for ||\r\n-                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\r\n-                )\r\n-            });\r\n-\r\n-        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\r\n-        \u002F\u002F it's possible for the same component to be reused but with different\r\n-        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\r\n-        \u002F\u002F the generated code of all the slot contents.\r\n-        var needsKey = !!el.if;\r\n-\r\n-        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\r\n-        \u002F\u002F disconnected due to the intermediate scope variable)\r\n-        \u002F\u002F #9438, #9506\r\n-        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\r\n-        \u002F\u002F and skip force updating ones that do not actually use scope variables.\r\n-        if (!needsForceUpdate) {\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (\r\n-                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\r\n-                    parent.for\r\n-                ) {\r\n-                    needsForceUpdate = true;\r\n-                    break\r\n-                }\r\n-                if (parent.if) {\r\n-                    needsKey = true;\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-        }\r\n-\r\n-        var generatedSlots = Object.keys(slots)\r\n-            .map(function (key) { return genScopedSlot(slots[key], state); })\r\n-            .join(',');\r\n-\r\n-        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\r\n-    }\r\n-\r\n-    function hash(str) {\r\n-        var hash = 5381;\r\n-        var i = str.length;\r\n-        while(i) {\r\n-            hash = (hash * 33) ^ str.charCodeAt(--i);\r\n-        }\r\n-        return hash >>> 0\r\n-    }\r\n-\r\n-    function containsSlotChild (el) {\r\n-        if (el.type === 1) {\r\n-            if (el.tag === 'slot') {\r\n-                return true\r\n-            }\r\n-            return el.children.some(containsSlotChild)\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function genScopedSlot (\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var isLegacySyntax = el.attrsMap['slot-scope'];\r\n-        if (el.if && !el.ifProcessed && !isLegacySyntax) {\r\n-            return genIf(el, state, genScopedSlot, \"null\")\r\n-        }\r\n-        if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state, genScopedSlot)\r\n-        }\r\n-        var slotScope = el.slotScope === emptySlotScopeToken\r\n-            ? \"\"\r\n-            : String(el.slotScope);\r\n-        var fn = \"function(\" + slotScope + \"){\" +\r\n-            \"return \" + (el.tag === 'template'\r\n-                ? el.if && isLegacySyntax\r\n-                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\r\n-                    : genChildren(el, state) || 'undefined'\r\n-                : genElement(el, state)) + \"}\";\r\n-        \u002F\u002F reverse proxy v-slot without scope on this.$slots\r\n-        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\r\n-        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\r\n-    }\r\n-\r\n-    function genChildren (\r\n-        el,\r\n-        state,\r\n-        checkSkip,\r\n-        altGenElement,\r\n-        altGenNode\r\n-    ) {\r\n-        var children = el.children;\r\n-        if (children.length) {\r\n-            var el$1 = children[0];\r\n-            \u002F\u002F optimize single v-for\r\n-            if (children.length === 1 &&\r\n-                el$1.for &&\r\n-                el$1.tag !== 'template' &&\r\n-                el$1.tag !== 'slot'\r\n-            ) {\r\n-                var normalizationType = checkSkip\r\n-                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\r\n-                    : \"\";\r\n-                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\r\n-            }\r\n-            var normalizationType$1 = checkSkip\r\n-                ? getNormalizationType(children, state.maybeComponent)\r\n-                : 0;\r\n-            var gen = altGenNode || genNode;\r\n-            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F determine the normalization needed for the children array.\r\n-    \u002F\u002F 0: no normalization needed\r\n-    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\r\n-    \u002F\u002F 2: full normalization needed\r\n-    function getNormalizationType (\r\n-        children,\r\n-        maybeComponent\r\n-    ) {\r\n-        var res = 0;\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            var el = children[i];\r\n-            if (el.type !== 1) {\r\n-                continue\r\n-            }\r\n-            if (needsNormalization(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\r\n-                res = 2;\r\n-                break\r\n-            }\r\n-            if (maybeComponent(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\r\n-                res = 1;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function needsNormalization (el) {\r\n-        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\r\n-    }\r\n-\r\n-    function genNode (node, state) {\r\n-        if (node.type === 1) {\r\n-            return genElement(node, state)\r\n-        } else if (node.type === 3 && node.isComment) {\r\n-            return genComment(node)\r\n-        } else {\r\n-            return genText(node)\r\n-        }\r\n-    }\r\n-\r\n-    function genText (text) {\r\n-        return (\"_v(\" + (text.type === 2\r\n-            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\r\n-            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\r\n-    }\r\n-\r\n-    function genComment (comment) {\r\n-        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\r\n-    }\r\n-\r\n-    function genSlot (el, state) {\r\n-        var slotName = el.slotName || '\"default\"';\r\n-        var children = genChildren(el, state);\r\n-        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\r\n-        var attrs = el.attrs || el.dynamicAttrs\r\n-            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\r\n-                \u002F\u002F slot props are camelized\r\n-                name: camelize(attr.name),\r\n-                value: attr.value,\r\n-                dynamic: attr.dynamic\r\n-            }); }))\r\n-            : null;\r\n-        var bind$$1 = el.attrsMap['v-bind'];\r\n-        if ((attrs || bind$$1) && !children) {\r\n-            res += \",null\";\r\n-        }\r\n-        if (attrs) {\r\n-            res += \",\" + attrs;\r\n-        }\r\n-        if (bind$$1) {\r\n-            res += (attrs ? '' : ',null') + \",\" + bind$$1;\r\n-        }\r\n-        return res + ')'\r\n-    }\r\n-\r\n-    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\r\n-    function genComponent (\r\n-        componentName,\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\r\n-    }\r\n-\r\n-    function genProps (props) {\r\n-        var staticProps = \"\";\r\n-        var dynamicProps = \"\";\r\n-        for (var i = 0; i \u003C props.length; i++) {\r\n-            var prop = props[i];\r\n-            var value = transformSpecialNewlines(prop.value);\r\n-            if (prop.dynamic) {\r\n-                dynamicProps += (prop.name) + \",\" + value + \",\";\r\n-            } else {\r\n-                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\r\n-            }\r\n-        }\r\n-        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\r\n-        if (dynamicProps) {\r\n-            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\r\n-        } else {\r\n-            return staticProps\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #3895, #4268\r\n-    function transformSpecialNewlines (text) {\r\n-        return text\r\n-            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\r\n-            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F\u002F these keywords should not appear inside expressions, but operators like\r\n-    \u002F\u002F typeof, instanceof and in are allowed\r\n-    var prohibitedKeywordRE = new RegExp('\\\\b' + (\r\n-            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n-            'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n-            'extends,finally,continue,debugger,function,arguments'\r\n-        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\r\n-\r\n-    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\r\n-    var unaryOperatorsRE = new RegExp('\\\\b' + (\r\n-            'delete,typeof,void'\r\n-        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\r\n-\r\n-    \u002F\u002F strip strings in expressions\r\n-    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\r\n-\r\n-    \u002F\u002F detect problematic expressions in a template\r\n-    function detectErrors (ast, warn) {\r\n-        if (ast) {\r\n-            checkNode(ast, warn);\r\n-        }\r\n-    }\r\n-\r\n-    function checkNode (node, warn) {\r\n-        if (node.type === 1) {\r\n-            for (var name in node.attrsMap) {\r\n-                if (dirRE.test(name)) {\r\n-                    var value = node.attrsMap[name];\r\n-                    if (value) {\r\n-                        var range = node.rawAttrsMap[name];\r\n-                        if (name === 'v-for') {\r\n-                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else if (onRE.test(name)) {\r\n-                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else {\r\n-                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0; i \u003C node.children.length; i++) {\r\n-                    checkNode(node.children[i], warn);\r\n-                }\r\n-            }\r\n-        } else if (node.type === 2) {\r\n-            checkExpression(node.expression, node.text, warn, node);\r\n-        }\r\n-    }\r\n-\r\n-    function checkEvent (exp, text, warn, range) {\r\n-        var stipped = exp.replace(stripStringRE, '');\r\n-        var keywordMatch = stipped.match(unaryOperatorsRE);\r\n-        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\r\n-            warn(\r\n-                \"avoid using JavaScript unary operator as property name: \" +\r\n-                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\r\n-                range\r\n-            );\r\n-        }\r\n-        checkExpression(exp, text, warn, range);\r\n-    }\r\n-\r\n-    function checkFor (node, text, warn, range) {\r\n-        checkExpression(node.for || '', text, warn, range);\r\n-        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\r\n-        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\r\n-        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\r\n-    }\r\n-\r\n-    function checkIdentifier (\r\n-        ident,\r\n-        type,\r\n-        text,\r\n-        warn,\r\n-        range\r\n-    ) {\r\n-        if (typeof ident === 'string') {\r\n-            try {\r\n-                new Function((\"var \" + ident + \"=_\"));\r\n-            } catch (e) {\r\n-                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkExpression (exp, text, warn, range) {\r\n-        try {\r\n-            new Function((\"return \" + exp));\r\n-        } catch (e) {\r\n-            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\r\n-            if (keywordMatch) {\r\n-                warn(\r\n-                    \"avoid using JavaScript keyword as property name: \" +\r\n-                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\r\n-                    range\r\n-                );\r\n-            } else {\r\n-                warn(\r\n-                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\r\n-                    \"    \" + exp + \"\\n\\n\" +\r\n-                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\r\n-                    range\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var range = 2;\r\n-\r\n-    function generateCodeFrame (\r\n-        source,\r\n-        start,\r\n-        end\r\n-    ) {\r\n-        if ( start === void 0 ) start = 0;\r\n-        if ( end === void 0 ) end = source.length;\r\n-\r\n-        var lines = source.split(\u002F\\r?\\n\u002F);\r\n-        var count = 0;\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C lines.length; i++) {\r\n-            count += lines[i].length + 1;\r\n-            if (count >= start) {\r\n-                for (var j = i - range; j \u003C= i + range || end > count; j++) {\r\n-                    if (j \u003C 0 || j >= lines.length) { continue }\r\n-                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\r\n-                    var lineLength = lines[j].length;\r\n-                    if (j === i) {\r\n-                        \u002F\u002F push underline\r\n-                        var pad = start - (count - lineLength) + 1;\r\n-                        var length = end > count ? lineLength - pad : end - start;\r\n-                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\r\n-                    } else if (j > i) {\r\n-                        if (end > count) {\r\n-                            var length$1 = Math.min(end - count, lineLength);\r\n-                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\r\n-                        }\r\n-                        count += lineLength + 1;\r\n-                    }\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-        return res.join('\\n')\r\n-    }\r\n-\r\n-    function repeat$1 (str, n) {\r\n-        var result = '';\r\n-        if (n > 0) {\r\n-            while (true) { \u002F\u002F eslint-disable-line\r\n-                if (n & 1) { result += str; }\r\n-                n >>>= 1;\r\n-                if (n \u003C= 0) { break }\r\n-                str += str;\r\n-            }\r\n-        }\r\n-        return result\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function createFunction (code, errors) {\r\n-        try {\r\n-            return new Function(code)\r\n-        } catch (err) {\r\n-            errors.push({ err: err, code: code });\r\n-            return noop\r\n-        }\r\n-    }\r\n-\r\n-    function createCompileToFunctionFn (compile) {\r\n-        var cache = Object.create(null);\r\n-\r\n-        return function compileToFunctions (\r\n-            template,\r\n-            options,\r\n-            vm\r\n-        ) {\r\n-            options = extend({}, options);\r\n-            var warn$$1 = options.warn || warn;\r\n-            delete options.warn;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                \u002F\u002F detect possible CSP restriction\r\n-                try {\r\n-                    new Function('return 1');\r\n-                } catch (e) {\r\n-                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\r\n-                        warn$$1(\r\n-                            'It seems you are using the standalone build of Vue.js in an ' +\r\n-                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\r\n-                            'The template compiler cannot work in this environment. Consider ' +\r\n-                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\r\n-                            'templates into render functions.'\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F check cache\r\n-            var key = options.delimiters\r\n-                ? String(options.delimiters) + template\r\n-                : template;\r\n-            if (cache[key]) {\r\n-                return cache[key]\r\n-            }\r\n-\r\n-            \u002F\u002F compile\r\n-            var compiled = compile(template, options);\r\n-\r\n-            \u002F\u002F check compilation errors\u002Ftips\r\n-            {\r\n-                if (compiled.errors && compiled.errors.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.errors.forEach(function (e) {\r\n-                            warn$$1(\r\n-                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\r\n-                                generateCodeFrame(template, e.start, e.end),\r\n-                                vm\r\n-                            );\r\n-                        });\r\n-                    } else {\r\n-                        warn$$1(\r\n-                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\r\n-                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                }\r\n-                if (compiled.tips && compiled.tips.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\r\n-                    } else {\r\n-                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F turn code into functions\r\n-            var res = {};\r\n-            var fnGenErrors = [];\r\n-            res.render = createFunction(compiled.render, fnGenErrors);\r\n-            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\r\n-                return createFunction(code, fnGenErrors)\r\n-            });\r\n-\r\n-            \u002F\u002F check function generation errors.\r\n-            \u002F\u002F this should only happen if there is a bug in the compiler itself.\r\n-            \u002F\u002F mostly for codegen development use\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\r\n-                    warn$$1(\r\n-                        \"Failed to generate render function:\\n\\n\" +\r\n-                        fnGenErrors.map(function (ref) {\r\n-                            var err = ref.err;\r\n-                            var code = ref.code;\r\n-\r\n-                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\r\n-                        }).join('\\n'),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-\r\n-            return (cache[key] = res)\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createCompilerCreator (baseCompile) {\r\n-        return function createCompiler (baseOptions) {\r\n-            function compile (\r\n-                template,\r\n-                options\r\n-            ) {\r\n-                var finalOptions = Object.create(baseOptions);\r\n-                var errors = [];\r\n-                var tips = [];\r\n-\r\n-                var warn = function (msg, range, tip) {\r\n-                    (tip ? tips : errors).push(msg);\r\n-                };\r\n-\r\n-                if (options) {\r\n-                    if (options.outputSourceRange) {\r\n-                        \u002F\u002F $flow-disable-line\r\n-                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\r\n-\r\n-                        warn = function (msg, range, tip) {\r\n-                            var data = { msg: msg };\r\n-                            if (range) {\r\n-                                if (range.start != null) {\r\n-                                    data.start = range.start + leadingSpaceLength;\r\n-                                }\r\n-                                if (range.end != null) {\r\n-                                    data.end = range.end + leadingSpaceLength;\r\n-                                }\r\n-                            }\r\n-                            (tip ? tips : errors).push(data);\r\n-                        };\r\n-                    }\r\n-                    \u002F\u002F merge custom modules\r\n-                    if (options.modules) {\r\n-                        finalOptions.modules =\r\n-                            (baseOptions.modules || []).concat(options.modules);\r\n-                    }\r\n-                    \u002F\u002F merge custom directives\r\n-                    if (options.directives) {\r\n-                        finalOptions.directives = extend(\r\n-                            Object.create(baseOptions.directives || null),\r\n-                            options.directives\r\n-                        );\r\n-                    }\r\n-                    \u002F\u002F copy other options\r\n-                    for (var key in options) {\r\n-                        if (key !== 'modules' && key !== 'directives') {\r\n-                            finalOptions[key] = options[key];\r\n-                        }\r\n-                    }\r\n-                }\r\n-\r\n-                finalOptions.warn = warn;\r\n-\r\n-                var compiled = baseCompile(template.trim(), finalOptions);\r\n-                {\r\n-                    detectErrors(compiled.ast, warn);\r\n-                }\r\n-                compiled.errors = errors;\r\n-                compiled.tips = tips;\r\n-                return compiled\r\n-            }\r\n-\r\n-            return {\r\n-                compile: compile,\r\n-                compileToFunctions: createCompileToFunctionFn(compile)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\r\n-    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\r\n-    \u002F\u002F Here we just export a default compiler using the default parts.\r\n-    var createCompiler = createCompilerCreator(function baseCompile (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        var ast = parse(template.trim(), options);\r\n-        if (options.optimize !== false) {\r\n-            optimize(ast, options);\r\n-        }\r\n-        var code = generate(ast, options);\r\n-        return {\r\n-            ast: ast,\r\n-            render: code.render,\r\n-            staticRenderFns: code.staticRenderFns\r\n-        }\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref$1 = createCompiler(baseOptions);\r\n-    var compile = ref$1.compile;\r\n-    var compileToFunctions = ref$1.compileToFunctions;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F check whether current browser encodes a char inside attribute values\r\n-    var div;\r\n-    function getShouldDecode (href) {\r\n-        div = div || document.createElement('div');\r\n-        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\r\n-        return div.innerHTML.indexOf('&#10;') > 0\r\n-    }\r\n-\r\n-    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\r\n-    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\r\n-    \u002F\u002F #6828: chrome encodes content in a[href]\r\n-    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var idToTemplate = cached(function (id) {\r\n-        var el = query(id);\r\n-        return el && el.innerHTML\r\n-    });\r\n-\r\n-    var mount = Vue.prototype.$mount;\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && query(el);\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (el === document.body || el === document.documentElement) {\r\n-            warn(\r\n-                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\r\n-            );\r\n-            return this\r\n-        }\r\n-\r\n-        var options = this.$options;\r\n-        \u002F\u002F resolve template\u002Fel and convert to render function\r\n-        if (!options.render) {\r\n-            var template = options.template;\r\n-            if (template) {\r\n-                if (typeof template === 'string') {\r\n-                    if (template.charAt(0) === '#') {\r\n-                        template = idToTemplate(template);\r\n-                      \u002F* istanbul ignore if *\u002F\r\n-                        if (!template) {\r\n-                            warn(\r\n-                                (\"Template element not found or is empty: \" + (options.template)),\r\n-                                this\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                } else if (template.nodeType) {\r\n-                    template = template.innerHTML;\r\n-                } else {\r\n-                    {\r\n-                        warn('invalid template option:' + template, this);\r\n-                    }\r\n-                    return this\r\n-                }\r\n-            } else if (el) {\r\n-                template = getOuterHTML(el);\r\n-            }\r\n-            if (template) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile');\r\n-                }\r\n-\r\n-                var ref = compileToFunctions(template, {\r\n-                    outputSourceRange: \"development\" !== 'production',\r\n-                    shouldDecodeNewlines: shouldDecodeNewlines,\r\n-                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\r\n-                    delimiters: options.delimiters,\r\n-                    comments: options.comments\r\n-                }, this);\r\n-                var render = ref.render;\r\n-                var staticRenderFns = ref.staticRenderFns;\r\n-                options.render = render;\r\n-                options.staticRenderFns = staticRenderFns;\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile end');\r\n-                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\r\n-                }\r\n-            }\r\n-        }\r\n-        return mount.call(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Get outerHTML of elements, taking care\r\n-     * of SVG elements in IE as well.\r\n-     *\u002F\r\n-    function getOuterHTML (el) {\r\n-        if (el.outerHTML) {\r\n-            return el.outerHTML\r\n-        } else {\r\n-            var container = document.createElement('div');\r\n-            container.appendChild(el.cloneNode(true));\r\n-            return container.innerHTML\r\n-        }\r\n-    }\r\n-\r\n-    Vue.compile = compileToFunctions;\r\n-\r\n-    return Vue;\r\n-\r\n-}));\r\n-\u002F**\r\n- * vuex v3.1.0\r\n- * (c) 2019 Evan You\r\n- * @license MIT\r\n- *\u002F\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vuex = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-    function applyMixin (Vue) {\r\n-        var version = Number(Vue.version.split('.')[0]);\r\n-\r\n-        if (version >= 2) {\r\n-            Vue.mixin({ beforeCreate: vuexInit });\r\n-        } else {\r\n-            \u002F\u002F override init and inject vuex init procedure\r\n-            \u002F\u002F for 1.x backwards compatibility.\r\n-            var _init = Vue.prototype._init;\r\n-            Vue.prototype._init = function (options) {\r\n-                if ( options === void 0 ) options = {};\r\n-\r\n-                options.init = options.init\r\n-                    ? [vuexInit].concat(options.init)\r\n-                    : vuexInit;\r\n-                _init.call(this, options);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F**\r\n-         * Vuex init hook, injected into each instances init hooks list.\r\n-         *\u002F\r\n-\r\n-        function vuexInit () {\r\n-            var options = this.$options;\r\n-            \u002F\u002F store injection\r\n-            if (options.store) {\r\n-                this.$store = typeof options.store === 'function'\r\n-                    ? options.store()\r\n-                    : options.store;\r\n-            } else if (options.parent && options.parent.$store) {\r\n-                this.$store = options.parent.$store;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var devtoolHook =\r\n-        typeof window !== 'undefined' &&\r\n-        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-    function devtoolPlugin (store) {\r\n-        if (!devtoolHook) { return }\r\n-\r\n-        store._devtoolHook = devtoolHook;\r\n-\r\n-        devtoolHook.emit('vuex:init', store);\r\n-\r\n-        devtoolHook.on('vuex:travel-to-state', function (targetState) {\r\n-            store.replaceState(targetState);\r\n-        });\r\n-\r\n-        store.subscribe(function (mutation, state) {\r\n-            devtoolHook.emit('vuex:mutation', mutation, state);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the first item that pass the test\r\n-     * by second argument function\r\n-     *\r\n-     * @param {Array} list\r\n-     * @param {Function} f\r\n-     * @return {*}\r\n-     *\u002F\r\n-\r\n-    \u002F**\r\n-     * forEach for object\r\n-     *\u002F\r\n-    function forEachValue (obj, fn) {\r\n-        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\r\n-    }\r\n-\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return val && typeof val.then === 'function'\r\n-    }\r\n-\r\n-    function assert (condition, msg) {\r\n-        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\r\n-    }\r\n-\r\n-    \u002F\u002F Base data struct for store's module, package with some attribute and method\r\n-    var Module = function Module (rawModule, runtime) {\r\n-        this.runtime = runtime;\r\n-        \u002F\u002F Store some children item\r\n-        this._children = Object.create(null);\r\n-        \u002F\u002F Store the origin module object which passed by programmer\r\n-        this._rawModule = rawModule;\r\n-        var rawState = rawModule.state;\r\n-\r\n-        \u002F\u002F Store the origin module's state\r\n-        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\r\n-    };\r\n-\r\n-    var prototypeAccessors = { namespaced: { configurable: true } };\r\n-\r\n-    prototypeAccessors.namespaced.get = function () {\r\n-        return !!this._rawModule.namespaced\r\n-    };\r\n-\r\n-    Module.prototype.addChild = function addChild (key, module) {\r\n-        this._children[key] = module;\r\n-    };\r\n-\r\n-    Module.prototype.removeChild = function removeChild (key) {\r\n-        delete this._children[key];\r\n-    };\r\n-\r\n-    Module.prototype.getChild = function getChild (key) {\r\n-        return this._children[key]\r\n-    };\r\n-\r\n-    Module.prototype.update = function update (rawModule) {\r\n-        this._rawModule.namespaced = rawModule.namespaced;\r\n-        if (rawModule.actions) {\r\n-            this._rawModule.actions = rawModule.actions;\r\n-        }\r\n-        if (rawModule.mutations) {\r\n-            this._rawModule.mutations = rawModule.mutations;\r\n-        }\r\n-        if (rawModule.getters) {\r\n-            this._rawModule.getters = rawModule.getters;\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachChild = function forEachChild (fn) {\r\n-        forEachValue(this._children, fn);\r\n-    };\r\n-\r\n-    Module.prototype.forEachGetter = function forEachGetter (fn) {\r\n-        if (this._rawModule.getters) {\r\n-            forEachValue(this._rawModule.getters, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachAction = function forEachAction (fn) {\r\n-        if (this._rawModule.actions) {\r\n-            forEachValue(this._rawModule.actions, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachMutation = function forEachMutation (fn) {\r\n-        if (this._rawModule.mutations) {\r\n-            forEachValue(this._rawModule.mutations, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Object.defineProperties( Module.prototype, prototypeAccessors );\r\n-\r\n-    var ModuleCollection = function ModuleCollection (rawRootModule) {\r\n-        \u002F\u002F register root module (Vuex.Store options)\r\n-        this.register([], rawRootModule, false);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.get = function get (path) {\r\n-        return path.reduce(function (module, key) {\r\n-            return module.getChild(key)\r\n-        }, this.root)\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\r\n-        var module = this.root;\r\n-        return path.reduce(function (namespace, key) {\r\n-            module = module.getChild(key);\r\n-            return namespace + (module.namespaced ? key + '\u002F' : '')\r\n-        }, '')\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\r\n-        update([], this.root, rawRootModule);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\r\n-        var this$1 = this;\r\n-        if ( runtime === void 0 ) runtime = true;\r\n-\r\n-        {\r\n-            assertRawModule(path, rawModule);\r\n-        }\r\n-\r\n-        var newModule = new Module(rawModule, runtime);\r\n-        if (path.length === 0) {\r\n-            this.root = newModule;\r\n-        } else {\r\n-            var parent = this.get(path.slice(0, -1));\r\n-            parent.addChild(path[path.length - 1], newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F register nested modules\r\n-        if (rawModule.modules) {\r\n-            forEachValue(rawModule.modules, function (rawChildModule, key) {\r\n-                this$1.register(path.concat(key), rawChildModule, runtime);\r\n-            });\r\n-        }\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.unregister = function unregister (path) {\r\n-        var parent = this.get(path.slice(0, -1));\r\n-        var key = path[path.length - 1];\r\n-        if (!parent.getChild(key).runtime) { return }\r\n-\r\n-        parent.removeChild(key);\r\n-    };\r\n-\r\n-    function update (path, targetModule, newModule) {\r\n-        {\r\n-            assertRawModule(path, newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F update target module\r\n-        targetModule.update(newModule);\r\n-\r\n-        \u002F\u002F update nested modules\r\n-        if (newModule.modules) {\r\n-            for (var key in newModule.modules) {\r\n-                if (!targetModule.getChild(key)) {\r\n-                    {\r\n-                        console.warn(\r\n-                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\r\n-                            'manual reload is needed'\r\n-                        );\r\n-                    }\r\n-                    return\r\n-                }\r\n-                update(\r\n-                    path.concat(key),\r\n-                    targetModule.getChild(key),\r\n-                    newModule.modules[key]\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var functionAssert = {\r\n-        assert: function (value) { return typeof value === 'function'; },\r\n-        expected: 'function'\r\n-    };\r\n-\r\n-    var objectAssert = {\r\n-        assert: function (value) { return typeof value === 'function' ||\r\n-            (typeof value === 'object' && typeof value.handler === 'function'); },\r\n-        expected: 'function or object with \"handler\" function'\r\n-    };\r\n-\r\n-    var assertTypes = {\r\n-        getters: functionAssert,\r\n-        mutations: functionAssert,\r\n-        actions: objectAssert\r\n-    };\r\n-\r\n-    function assertRawModule (path, rawModule) {\r\n-        Object.keys(assertTypes).forEach(function (key) {\r\n-            if (!rawModule[key]) { return }\r\n-\r\n-            var assertOptions = assertTypes[key];\r\n-\r\n-            forEachValue(rawModule[key], function (value, type) {\r\n-                assert(\r\n-                    assertOptions.assert(value),\r\n-                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\r\n-                );\r\n-            });\r\n-        });\r\n-    }\r\n-\r\n-    function makeAssertionMessage (path, key, type, value, expected) {\r\n-        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\r\n-        if (path.length > 0) {\r\n-            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\r\n-        }\r\n-        buf += \" is \" + (JSON.stringify(value)) + \".\";\r\n-        return buf\r\n-    }\r\n-\r\n-    var Vue; \u002F\u002F bind on install\r\n-\r\n-    var Store = function Store (options) {\r\n-        var this$1 = this;\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\r\n-        \u002F\u002F To allow users to avoid auto-installation in some cases,\r\n-        \u002F\u002F this code should be placed here. See #731\r\n-        if (!Vue && typeof window !== 'undefined' && window.Vue) {\r\n-            install(window.Vue);\r\n-        }\r\n-\r\n-        {\r\n-            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\r\n-            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\r\n-            assert(this instanceof Store, \"store must be called with the new operator.\");\r\n-        }\r\n-\r\n-        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\r\n-        var strict = options.strict; if ( strict === void 0 ) strict = false;\r\n-\r\n-        \u002F\u002F store internal state\r\n-        this._committing = false;\r\n-        this._actions = Object.create(null);\r\n-        this._actionSubscribers = [];\r\n-        this._mutations = Object.create(null);\r\n-        this._wrappedGetters = Object.create(null);\r\n-        this._modules = new ModuleCollection(options);\r\n-        this._modulesNamespaceMap = Object.create(null);\r\n-        this._subscribers = [];\r\n-        this._watcherVM = new Vue();\r\n-\r\n-        \u002F\u002F bind commit and dispatch to self\r\n-        var store = this;\r\n-        var ref = this;\r\n-        var dispatch = ref.dispatch;\r\n-        var commit = ref.commit;\r\n-        this.dispatch = function boundDispatch (type, payload) {\r\n-            return dispatch.call(store, type, payload)\r\n-        };\r\n-        this.commit = function boundCommit (type, payload, options) {\r\n-            return commit.call(store, type, payload, options)\r\n-        };\r\n-\r\n-        \u002F\u002F strict mode\r\n-        this.strict = strict;\r\n-\r\n-        var state = this._modules.root.state;\r\n-\r\n-        \u002F\u002F init root module.\r\n-        \u002F\u002F this also recursively registers all sub-modules\r\n-        \u002F\u002F and collects all module getters inside this._wrappedGetters\r\n-        installModule(this, state, [], this._modules.root);\r\n-\r\n-        \u002F\u002F initialize the store vm, which is responsible for the reactivity\r\n-        \u002F\u002F (also registers _wrappedGetters as computed properties)\r\n-        resetStoreVM(this, state);\r\n-\r\n-        \u002F\u002F apply plugins\r\n-        plugins.forEach(function (plugin) { return plugin(this$1); });\r\n-\r\n-        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\r\n-        if (useDevtools) {\r\n-            devtoolPlugin(this);\r\n-        }\r\n-    };\r\n-\r\n-    var prototypeAccessors$1 = { state: { configurable: true } };\r\n-\r\n-    prototypeAccessors$1.state.get = function () {\r\n-        return this._vm._data.$$state\r\n-    };\r\n-\r\n-    prototypeAccessors$1.state.set = function (v) {\r\n-        {\r\n-            assert(false, \"use store.replaceState() to explicit replace store state.\");\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.commit = function commit (_type, _payload, _options) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style commit\r\n-        var ref = unifyObjectStyle(_type, _payload, _options);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-        var options = ref.options;\r\n-\r\n-        var mutation = { type: type, payload: payload };\r\n-        var entry = this._mutations[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown mutation type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        this._withCommit(function () {\r\n-            entry.forEach(function commitIterator (handler) {\r\n-                handler(payload);\r\n-            });\r\n-        });\r\n-        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\r\n-\r\n-        if (\r\n-            options && options.silent\r\n-        ) {\r\n-            console.warn(\r\n-                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\r\n-                'Use the filter functionality in the vue-devtools'\r\n-            );\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.dispatch = function dispatch (_type, _payload) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style dispatch\r\n-        var ref = unifyObjectStyle(_type, _payload);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-\r\n-        var action = { type: type, payload: payload };\r\n-        var entry = this._actions[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown action type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        try {\r\n-            this._actionSubscribers\r\n-                .filter(function (sub) { return sub.before; })\r\n-                .forEach(function (sub) { return sub.before(action, this$1.state); });\r\n-        } catch (e) {\r\n-            {\r\n-                console.warn(\"[vuex] error in before action subscribers: \");\r\n-                console.error(e);\r\n-            }\r\n-        }\r\n-\r\n-        var result = entry.length > 1\r\n-            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\r\n-            : entry[0](payload);\r\n-\r\n-        return result.then(function (res) {\r\n-            try {\r\n-                this$1._actionSubscribers\r\n-                    .filter(function (sub) { return sub.after; })\r\n-                    .forEach(function (sub) { return sub.after(action, this$1.state); });\r\n-            } catch (e) {\r\n-                {\r\n-                    console.warn(\"[vuex] error in after action subscribers: \");\r\n-                    console.error(e);\r\n-                }\r\n-            }\r\n-            return res\r\n-        })\r\n-    };\r\n-\r\n-    Store.prototype.subscribe = function subscribe (fn) {\r\n-        return genericSubscribe(fn, this._subscribers)\r\n-    };\r\n-\r\n-    Store.prototype.subscribeAction = function subscribeAction (fn) {\r\n-        var subs = typeof fn === 'function' ? { before: fn } : fn;\r\n-        return genericSubscribe(subs, this._actionSubscribers)\r\n-    };\r\n-\r\n-    Store.prototype.watch = function watch (getter, cb, options) {\r\n-        var this$1 = this;\r\n-\r\n-        {\r\n-            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\r\n-        }\r\n-        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\r\n-    };\r\n-\r\n-    Store.prototype.replaceState = function replaceState (state) {\r\n-        var this$1 = this;\r\n-\r\n-        this._withCommit(function () {\r\n-            this$1._vm._data.$$state = state;\r\n-        });\r\n-    };\r\n-\r\n-    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-            assert(path.length > 0, 'cannot register the root module by using registerModule.');\r\n-        }\r\n-\r\n-        this._modules.register(path, rawModule);\r\n-        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\r\n-        \u002F\u002F reset store to update getters...\r\n-        resetStoreVM(this, this.state);\r\n-    };\r\n-\r\n-    Store.prototype.unregisterModule = function unregisterModule (path) {\r\n-        var this$1 = this;\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-        }\r\n-\r\n-        this._modules.unregister(path);\r\n-        this._withCommit(function () {\r\n-            var parentState = getNestedState(this$1.state, path.slice(0, -1));\r\n-            Vue.delete(parentState, path[path.length - 1]);\r\n-        });\r\n-        resetStore(this);\r\n-    };\r\n-\r\n-    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\r\n-        this._modules.update(newOptions);\r\n-        resetStore(this, true);\r\n-    };\r\n-\r\n-    Store.prototype._withCommit = function _withCommit (fn) {\r\n-        var committing = this._committing;\r\n-        this._committing = true;\r\n-        fn();\r\n-        this._committing = committing;\r\n-    };\r\n-\r\n-    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\r\n-\r\n-    function genericSubscribe (fn, subs) {\r\n-        if (subs.indexOf(fn) \u003C 0) {\r\n-            subs.push(fn);\r\n-        }\r\n-        return function () {\r\n-            var i = subs.indexOf(fn);\r\n-            if (i > -1) {\r\n-                subs.splice(i, 1);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function resetStore (store, hot) {\r\n-        store._actions = Object.create(null);\r\n-        store._mutations = Object.create(null);\r\n-        store._wrappedGetters = Object.create(null);\r\n-        store._modulesNamespaceMap = Object.create(null);\r\n-        var state = store.state;\r\n-        \u002F\u002F init all modules\r\n-        installModule(store, state, [], store._modules.root, true);\r\n-        \u002F\u002F reset vm\r\n-        resetStoreVM(store, state, hot);\r\n-    }\r\n-\r\n-    function resetStoreVM (store, state, hot) {\r\n-        var oldVm = store._vm;\r\n-\r\n-        \u002F\u002F bind store public getters\r\n-        store.getters = {};\r\n-        var wrappedGetters = store._wrappedGetters;\r\n-        var computed = {};\r\n-        forEachValue(wrappedGetters, function (fn, key) {\r\n-            \u002F\u002F use computed to leverage its lazy-caching mechanism\r\n-            computed[key] = function () { return fn(store); };\r\n-            Object.defineProperty(store.getters, key, {\r\n-                get: function () { return store._vm[key]; },\r\n-                enumerable: true \u002F\u002F for local getters\r\n-            });\r\n-        });\r\n-\r\n-        \u002F\u002F use a Vue instance to store the state tree\r\n-        \u002F\u002F suppress warnings just in case the user has added\r\n-        \u002F\u002F some funky global mixins\r\n-        var silent = Vue.config.silent;\r\n-        Vue.config.silent = true;\r\n-        store._vm = new Vue({\r\n-            data: {\r\n-                $$state: state\r\n-            },\r\n-            computed: computed\r\n-        });\r\n-        Vue.config.silent = silent;\r\n-\r\n-        \u002F\u002F enable strict mode for new vm\r\n-        if (store.strict) {\r\n-            enableStrictMode(store);\r\n-        }\r\n-\r\n-        if (oldVm) {\r\n-            if (hot) {\r\n-                \u002F\u002F dispatch changes in all subscribed watchers\r\n-                \u002F\u002F to force getter re-evaluation for hot reloading.\r\n-                store._withCommit(function () {\r\n-                    oldVm._data.$$state = null;\r\n-                });\r\n-            }\r\n-            Vue.nextTick(function () { return oldVm.$destroy(); });\r\n-        }\r\n-    }\r\n-\r\n-    function installModule (store, rootState, path, module, hot) {\r\n-        var isRoot = !path.length;\r\n-        var namespace = store._modules.getNamespace(path);\r\n-\r\n-        \u002F\u002F register in namespace map\r\n-        if (module.namespaced) {\r\n-            store._modulesNamespaceMap[namespace] = module;\r\n-        }\r\n-\r\n-        \u002F\u002F set state\r\n-        if (!isRoot && !hot) {\r\n-            var parentState = getNestedState(rootState, path.slice(0, -1));\r\n-            var moduleName = path[path.length - 1];\r\n-            store._withCommit(function () {\r\n-                Vue.set(parentState, moduleName, module.state);\r\n-            });\r\n-        }\r\n-\r\n-        var local = module.context = makeLocalContext(store, namespace, path);\r\n-\r\n-        module.forEachMutation(function (mutation, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerMutation(store, namespacedType, mutation, local);\r\n-        });\r\n-\r\n-        module.forEachAction(function (action, key) {\r\n-            var type = action.root ? key : namespace + key;\r\n-            var handler = action.handler || action;\r\n-            registerAction(store, type, handler, local);\r\n-        });\r\n-\r\n-        module.forEachGetter(function (getter, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerGetter(store, namespacedType, getter, local);\r\n-        });\r\n-\r\n-        module.forEachChild(function (child, key) {\r\n-            installModule(store, rootState, path.concat(key), child, hot);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * make localized dispatch, commit, getters and state\r\n-     * if there is no namespace, just use root ones\r\n-     *\u002F\r\n-    function makeLocalContext (store, namespace, path) {\r\n-        var noNamespace = namespace === '';\r\n-\r\n-        var local = {\r\n-            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._actions[type]) {\r\n-                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                return store.dispatch(type, payload)\r\n-            },\r\n-\r\n-            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._mutations[type]) {\r\n-                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                store.commit(type, payload, options);\r\n-            }\r\n-        };\r\n-\r\n-        \u002F\u002F getters and state object must be gotten lazily\r\n-        \u002F\u002F because they will be changed by vm update\r\n-        Object.defineProperties(local, {\r\n-            getters: {\r\n-                get: noNamespace\r\n-                    ? function () { return store.getters; }\r\n-                    : function () { return makeLocalGetters(store, namespace); }\r\n-            },\r\n-            state: {\r\n-                get: function () { return getNestedState(store.state, path); }\r\n-            }\r\n-        });\r\n-\r\n-        return local\r\n-    }\r\n-\r\n-    function makeLocalGetters (store, namespace) {\r\n-        var gettersProxy = {};\r\n-\r\n-        var splitPos = namespace.length;\r\n-        Object.keys(store.getters).forEach(function (type) {\r\n-            \u002F\u002F skip if the target getter is not match this namespace\r\n-            if (type.slice(0, splitPos) !== namespace) { return }\r\n-\r\n-            \u002F\u002F extract local getter type\r\n-            var localType = type.slice(splitPos);\r\n-\r\n-            \u002F\u002F Add a port to the getters proxy.\r\n-            \u002F\u002F Define as getter property because\r\n-            \u002F\u002F we do not want to evaluate the getters in this time.\r\n-            Object.defineProperty(gettersProxy, localType, {\r\n-                get: function () { return store.getters[type]; },\r\n-                enumerable: true\r\n-            });\r\n-        });\r\n-\r\n-        return gettersProxy\r\n-    }\r\n-\r\n-    function registerMutation (store, type, handler, local) {\r\n-        var entry = store._mutations[type] || (store._mutations[type] = []);\r\n-        entry.push(function wrappedMutationHandler (payload) {\r\n-            handler.call(store, local.state, payload);\r\n-        });\r\n-    }\r\n-\r\n-    function registerAction (store, type, handler, local) {\r\n-        var entry = store._actions[type] || (store._actions[type] = []);\r\n-        entry.push(function wrappedActionHandler (payload, cb) {\r\n-            var res = handler.call(store, {\r\n-                dispatch: local.dispatch,\r\n-                commit: local.commit,\r\n-                getters: local.getters,\r\n-                state: local.state,\r\n-                rootGetters: store.getters,\r\n-                rootState: store.state\r\n-            }, payload, cb);\r\n-            if (!isPromise(res)) {\r\n-                res = Promise.resolve(res);\r\n-            }\r\n-            if (store._devtoolHook) {\r\n-                return res.catch(function (err) {\r\n-                    store._devtoolHook.emit('vuex:error', err);\r\n-                    throw err\r\n-                })\r\n-            } else {\r\n-                return res\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    function registerGetter (store, type, rawGetter, local) {\r\n-        if (store._wrappedGetters[type]) {\r\n-            {\r\n-                console.error((\"[vuex] duplicate getter key: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        store._wrappedGetters[type] = function wrappedGetter (store) {\r\n-            return rawGetter(\r\n-                local.state, \u002F\u002F local state\r\n-                local.getters, \u002F\u002F local getters\r\n-                store.state, \u002F\u002F root state\r\n-                store.getters \u002F\u002F root getters\r\n-            )\r\n-        };\r\n-    }\r\n-\r\n-    function enableStrictMode (store) {\r\n-        store._vm.$watch(function () { return this._data.$$state }, function () {\r\n-            {\r\n-                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\r\n-            }\r\n-        }, { deep: true, sync: true });\r\n-    }\r\n-\r\n-    function getNestedState (state, path) {\r\n-        return path.length\r\n-            ? path.reduce(function (state, key) { return state[key]; }, state)\r\n-            : state\r\n-    }\r\n-\r\n-    function unifyObjectStyle (type, payload, options) {\r\n-        if (isObject(type) && type.type) {\r\n-            options = payload;\r\n-            payload = type;\r\n-            type = type.type;\r\n-        }\r\n-\r\n-        {\r\n-            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\r\n-        }\r\n-\r\n-        return { type: type, payload: payload, options: options }\r\n-    }\r\n-\r\n-    function install (_Vue) {\r\n-        if (Vue && _Vue === Vue) {\r\n-            {\r\n-                console.error(\r\n-                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\r\n-                );\r\n-            }\r\n-            return\r\n-        }\r\n-        Vue = _Vue;\r\n-        applyMixin(Vue);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the state.\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\r\n-     * @param {Object}\r\n-     *\u002F\r\n-    var mapState = normalizeNamespace(function (namespace, states) {\r\n-        var res = {};\r\n-        normalizeMap(states).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedState () {\r\n-                var state = this.$store.state;\r\n-                var getters = this.$store.getters;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    state = module.context.state;\r\n-                    getters = module.context.getters;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.call(this, state, getters)\r\n-                    : state[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for committing the mutation\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapMutations = normalizeNamespace(function (namespace, mutations) {\r\n-        var res = {};\r\n-        normalizeMap(mutations).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedMutation () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F Get the commit method from store\r\n-                var commit = this.$store.commit;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    commit = module.context.commit;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [commit].concat(args))\r\n-                    : commit.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the getters\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} getters\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapGetters = normalizeNamespace(function (namespace, getters) {\r\n-        var res = {};\r\n-        normalizeMap(getters).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            \u002F\u002F The namespace has been mutated by normalizeNamespace\r\n-            val = namespace + val;\r\n-            res[key] = function mappedGetter () {\r\n-                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\r\n-                    return\r\n-                }\r\n-                if (!(val in this.$store.getters)) {\r\n-                    console.error((\"[vuex] unknown getter: \" + val));\r\n-                    return\r\n-                }\r\n-                return this.$store.getters[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for dispatch the action\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapActions = normalizeNamespace(function (namespace, actions) {\r\n-        var res = {};\r\n-        normalizeMap(actions).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedAction () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F get dispatch function from store\r\n-                var dispatch = this.$store.dispatch;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    dispatch = module.context.dispatch;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [dispatch].concat(args))\r\n-                    : dispatch.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var createNamespacedHelpers = function (namespace) { return ({\r\n-        mapState: mapState.bind(null, namespace),\r\n-        mapGetters: mapGetters.bind(null, namespace),\r\n-        mapMutations: mapMutations.bind(null, namespace),\r\n-        mapActions: mapActions.bind(null, namespace)\r\n-    }); };\r\n-\r\n-    \u002F**\r\n-     * Normalize the map\r\n-     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\r\n-     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\r\n-     * @param {Array|Object} map\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function normalizeMap (map) {\r\n-        return Array.isArray(map)\r\n-            ? map.map(function (key) { return ({ key: key, val: key }); })\r\n-            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\r\n-     * @param {Function} fn\r\n-     * @return {Function}\r\n-     *\u002F\r\n-    function normalizeNamespace (fn) {\r\n-        return function (namespace, map) {\r\n-            if (typeof namespace !== 'string') {\r\n-                map = namespace;\r\n-                namespace = '';\r\n-            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\r\n-                namespace += '\u002F';\r\n-            }\r\n-            return fn(namespace, map)\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Search a special module from store by namespace. if module not exist, print error message.\r\n-     * @param {Object} store\r\n-     * @param {String} helper\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function getModuleByNamespace (store, helper, namespace) {\r\n-        var module = store._modulesNamespaceMap[namespace];\r\n-        if (!module) {\r\n-            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\r\n-        }\r\n-        return module\r\n-    }\r\n-\r\n-    var index = {\r\n-        Store: Store,\r\n-        install: install,\r\n-        version: '3.1.0',\r\n-        mapState: mapState,\r\n-        mapMutations: mapMutations,\r\n-        mapGetters: mapGetters,\r\n-        mapActions: mapActions,\r\n-        createNamespacedHelpers: createNamespacedHelpers\r\n-    };\r\n-\r\n-    return index;\r\n-\r\n-}));\r\n-\u002F*!\r\n- * vue-resource v1.3.4\r\n- * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global.VueResource = factory());\r\n-}(this, (function () { 'use strict';\r\n-\r\n-    \u002F**\r\n-     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\r\n-     *\u002F\r\n-\r\n-    var RESOLVED = 0;\r\n-    var REJECTED = 1;\r\n-    var PENDING  = 2;\r\n-\r\n-    function Promise$1(executor) {\r\n-\r\n-        this.state = PENDING;\r\n-        this.value = undefined;\r\n-        this.deferred = [];\r\n-\r\n-        var promise = this;\r\n-\r\n-        try {\r\n-            executor(function (x) {\r\n-                promise.resolve(x);\r\n-            }, function (r) {\r\n-                promise.reject(r);\r\n-            });\r\n-        } catch (e) {\r\n-            promise.reject(e);\r\n-        }\r\n-    }\r\n-\r\n-    Promise$1.reject = function (r) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            reject(r);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.resolve = function (x) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            resolve(x);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.all = function all(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            var count = 0, result = [];\r\n-\r\n-            if (iterable.length === 0) {\r\n-                resolve(result);\r\n-            }\r\n-\r\n-            function resolver(i) {\r\n-                return function (x) {\r\n-                    result[i] = x;\r\n-                    count += 1;\r\n-\r\n-                    if (count === iterable.length) {\r\n-                        resolve(result);\r\n-                    }\r\n-                };\r\n-            }\r\n-\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.race = function race(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolve, reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    var p$1 = Promise$1.prototype;\r\n-\r\n-    p$1.resolve = function resolve(x) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (x === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            var called = false;\r\n-\r\n-            try {\r\n-                var then = x && x['then'];\r\n-\r\n-                if (x !== null && typeof x === 'object' && typeof then === 'function') {\r\n-                    then.call(x, function (x) {\r\n-                        if (!called) {\r\n-                            promise.resolve(x);\r\n-                        }\r\n-                        called = true;\r\n-\r\n-                    }, function (r) {\r\n-                        if (!called) {\r\n-                            promise.reject(r);\r\n-                        }\r\n-                        called = true;\r\n-                    });\r\n-                    return;\r\n-                }\r\n-            } catch (e) {\r\n-                if (!called) {\r\n-                    promise.reject(e);\r\n-                }\r\n-                return;\r\n-            }\r\n-\r\n-            promise.state = RESOLVED;\r\n-            promise.value = x;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.reject = function reject(reason) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (reason === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            promise.state = REJECTED;\r\n-            promise.value = reason;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.notify = function notify() {\r\n-        var promise = this;\r\n-\r\n-        nextTick(function () {\r\n-            if (promise.state !== PENDING) {\r\n-                while (promise.deferred.length) {\r\n-                    var deferred = promise.deferred.shift(),\r\n-                        onResolved = deferred[0],\r\n-                        onRejected = deferred[1],\r\n-                        resolve = deferred[2],\r\n-                        reject = deferred[3];\r\n-\r\n-                    try {\r\n-                        if (promise.state === RESOLVED) {\r\n-                            if (typeof onResolved === 'function') {\r\n-                                resolve(onResolved.call(undefined, promise.value));\r\n-                            } else {\r\n-                                resolve(promise.value);\r\n-                            }\r\n-                        } else if (promise.state === REJECTED) {\r\n-                            if (typeof onRejected === 'function') {\r\n-                                resolve(onRejected.call(undefined, promise.value));\r\n-                            } else {\r\n-                                reject(promise.value);\r\n-                            }\r\n-                        }\r\n-                    } catch (e) {\r\n-                        reject(e);\r\n-                    }\r\n-                }\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    p$1.then = function then(onResolved, onRejected) {\r\n-        var promise = this;\r\n-\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            promise.deferred.push([onResolved, onRejected, resolve, reject]);\r\n-            promise.notify();\r\n-        });\r\n-    };\r\n-\r\n-    p$1.catch = function (onRejected) {\r\n-        return this.then(undefined, onRejected);\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Promise adapter.\r\n-     *\u002F\r\n-\r\n-    if (typeof Promise === 'undefined') {\r\n-        window.Promise = Promise$1;\r\n-    }\r\n-\r\n-    function PromiseObj(executor, context) {\r\n-\r\n-        if (executor instanceof Promise) {\r\n-            this.promise = executor;\r\n-        } else {\r\n-            this.promise = new Promise(executor.bind(context));\r\n-        }\r\n-\r\n-        this.context = context;\r\n-    }\r\n-\r\n-    PromiseObj.all = function (iterable, context) {\r\n-        return new PromiseObj(Promise.all(iterable), context);\r\n-    };\r\n-\r\n-    PromiseObj.resolve = function (value, context) {\r\n-        return new PromiseObj(Promise.resolve(value), context);\r\n-    };\r\n-\r\n-    PromiseObj.reject = function (reason, context) {\r\n-        return new PromiseObj(Promise.reject(reason), context);\r\n-    };\r\n-\r\n-    PromiseObj.race = function (iterable, context) {\r\n-        return new PromiseObj(Promise.race(iterable), context);\r\n-    };\r\n-\r\n-    var p = PromiseObj.prototype;\r\n-\r\n-    p.bind = function (context) {\r\n-        this.context = context;\r\n-        return this;\r\n-    };\r\n-\r\n-    p.then = function (fulfilled, rejected) {\r\n-\r\n-        if (fulfilled && fulfilled.bind && this.context) {\r\n-            fulfilled = fulfilled.bind(this.context);\r\n-        }\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\r\n-    };\r\n-\r\n-    p.catch = function (rejected) {\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.catch(rejected), this.context);\r\n-    };\r\n-\r\n-    p.finally = function (callback) {\r\n-\r\n-        return this.then(function (value) {\r\n-                callback.call(this);\r\n-                return value;\r\n-            }, function (reason) {\r\n-                callback.call(this);\r\n-                return Promise.reject(reason);\r\n-            }\r\n-        );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Utility functions.\r\n-     *\u002F\r\n-\r\n-    var ref = {};\r\n-    var hasOwnProperty = ref.hasOwnProperty;\r\n-\r\n-    var ref$1 = [];\r\n-    var slice = ref$1.slice;\r\n-    var debug = false;\r\n-    var ntick;\r\n-\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-\r\n-    var Util = function (ref) {\r\n-        var config = ref.config;\r\n-        var nextTick = ref.nextTick;\r\n-\r\n-        ntick = nextTick;\r\n-        debug = config.debug || !config.silent;\r\n-    };\r\n-\r\n-    function warn(msg) {\r\n-        if (typeof console !== 'undefined' && debug) {\r\n-            console.warn('[VueResource warn]: ' + msg);\r\n-        }\r\n-    }\r\n-\r\n-    function error(msg) {\r\n-        if (typeof console !== 'undefined') {\r\n-            console.error(msg);\r\n-        }\r\n-    }\r\n-\r\n-    function nextTick(cb, ctx) {\r\n-        return ntick(cb, ctx);\r\n-    }\r\n-\r\n-    function trim(str) {\r\n-        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\r\n-    }\r\n-\r\n-    function trimEnd(str, chars) {\r\n-\r\n-        if (str && chars === undefined) {\r\n-            return str.replace(\u002F\\s+$\u002F, '');\r\n-        }\r\n-\r\n-        if (!str || !chars) {\r\n-            return str;\r\n-        }\r\n-\r\n-        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\r\n-    }\r\n-\r\n-    function toLower(str) {\r\n-        return str ? str.toLowerCase() : '';\r\n-    }\r\n-\r\n-    function toUpper(str) {\r\n-        return str ? str.toUpperCase() : '';\r\n-    }\r\n-\r\n-    var isArray = Array.isArray;\r\n-\r\n-    function isString(val) {\r\n-        return typeof val === 'string';\r\n-    }\r\n-\r\n-\r\n-\r\n-    function isFunction(val) {\r\n-        return typeof val === 'function';\r\n-    }\r\n-\r\n-    function isObject(obj) {\r\n-        return obj !== null && typeof obj === 'object';\r\n-    }\r\n-\r\n-    function isPlainObject(obj) {\r\n-        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\r\n-    }\r\n-\r\n-    function isBlob(obj) {\r\n-        return typeof Blob !== 'undefined' && obj instanceof Blob;\r\n-    }\r\n-\r\n-    function isFormData(obj) {\r\n-        return typeof FormData !== 'undefined' && obj instanceof FormData;\r\n-    }\r\n-\r\n-    function when(value, fulfilled, rejected) {\r\n-\r\n-        var promise = PromiseObj.resolve(value);\r\n-\r\n-        if (arguments.length \u003C 2) {\r\n-            return promise;\r\n-        }\r\n-\r\n-        return promise.then(fulfilled, rejected);\r\n-    }\r\n-\r\n-    function options(fn, obj, opts) {\r\n-\r\n-        opts = opts || {};\r\n-\r\n-        if (isFunction(opts)) {\r\n-            opts = opts.call(obj);\r\n-        }\r\n-\r\n-        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\r\n-    }\r\n-\r\n-    function each(obj, iterator) {\r\n-\r\n-        var i, key;\r\n-\r\n-        if (isArray(obj)) {\r\n-            for (i = 0; i \u003C obj.length; i++) {\r\n-                iterator.call(obj[i], obj[i], i);\r\n-            }\r\n-        } else if (isObject(obj)) {\r\n-            for (key in obj) {\r\n-                if (hasOwnProperty.call(obj, key)) {\r\n-                    iterator.call(obj[key], obj[key], key);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        return obj;\r\n-    }\r\n-\r\n-    var assign = Object.assign || _assign;\r\n-\r\n-    function merge(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source, true);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function defaults(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-\r\n-            for (var key in source) {\r\n-                if (target[key] === undefined) {\r\n-                    target[key] = source[key];\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _assign(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _merge(target, source, deep) {\r\n-        for (var key in source) {\r\n-            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\r\n-                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\r\n-                    target[key] = {};\r\n-                }\r\n-                if (isArray(source[key]) && !isArray(target[key])) {\r\n-                    target[key] = [];\r\n-                }\r\n-                _merge(target[key], source[key], deep);\r\n-            } else if (source[key] !== undefined) {\r\n-                target[key] = source[key];\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Root Prefix Transform.\r\n-     *\u002F\r\n-\r\n-    var root = function (options$$1, next) {\r\n-\r\n-        var url = next(options$$1);\r\n-\r\n-        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\r\n-            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Query Parameter Transform.\r\n-     *\u002F\r\n-\r\n-    var query = function (options$$1, next) {\r\n-\r\n-        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\r\n-\r\n-        each(options$$1.params, function (value, key) {\r\n-            if (urlParams.indexOf(key) === -1) {\r\n-                query[key] = value;\r\n-            }\r\n-        });\r\n-\r\n-        query = Url.params(query);\r\n-\r\n-        if (query) {\r\n-            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\r\n-     *\u002F\r\n-\r\n-    function expand(url, params, variables) {\r\n-\r\n-        var tmpl = parse(url), expanded = tmpl.expand(params);\r\n-\r\n-        if (variables) {\r\n-            variables.push.apply(variables, tmpl.vars);\r\n-        }\r\n-\r\n-        return expanded;\r\n-    }\r\n-\r\n-    function parse(template) {\r\n-\r\n-        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\r\n-\r\n-        return {\r\n-            vars: variables,\r\n-            expand: function expand(context) {\r\n-                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\r\n-                    if (expression) {\r\n-\r\n-                        var operator = null, values = [];\r\n-\r\n-                        if (operators.indexOf(expression.charAt(0)) !== -1) {\r\n-                            operator = expression.charAt(0);\r\n-                            expression = expression.substr(1);\r\n-                        }\r\n-\r\n-                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\r\n-                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\r\n-                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\r\n-                            variables.push(tmp[1]);\r\n-                        });\r\n-\r\n-                        if (operator && operator !== '+') {\r\n-\r\n-                            var separator = ',';\r\n-\r\n-                            if (operator === '?') {\r\n-                                separator = '&';\r\n-                            } else if (operator !== '#') {\r\n-                                separator = operator;\r\n-                            }\r\n-\r\n-                            return (values.length !== 0 ? operator : '') + values.join(separator);\r\n-                        } else {\r\n-                            return values.join(',');\r\n-                        }\r\n-\r\n-                    } else {\r\n-                        return encodeReserved(literal);\r\n-                    }\r\n-                });\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function getValues(context, operator, key, modifier) {\r\n-\r\n-        var value = context[key], result = [];\r\n-\r\n-        if (isDefined(value) && value !== '') {\r\n-            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n-                value = value.toString();\r\n-\r\n-                if (modifier && modifier !== '*') {\r\n-                    value = value.substring(0, parseInt(modifier, 10));\r\n-                }\r\n-\r\n-                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-            } else {\r\n-                if (modifier === '*') {\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                result.push(encodeValue(operator, value[k], k));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-                } else {\r\n-                    var tmp = [];\r\n-\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            tmp.push(encodeValue(operator, value));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                tmp.push(encodeURIComponent(k));\r\n-                                tmp.push(encodeValue(operator, value[k].toString()));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-\r\n-                    if (isKeyOperator(operator)) {\r\n-                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\r\n-                    } else if (tmp.length !== 0) {\r\n-                        result.push(tmp.join(','));\r\n-                    }\r\n-                }\r\n-            }\r\n-        } else {\r\n-            if (operator === ';') {\r\n-                result.push(encodeURIComponent(key));\r\n-            } else if (value === '' && (operator === '&' || operator === '?')) {\r\n-                result.push(encodeURIComponent(key) + '=');\r\n-            } else if (value === '') {\r\n-                result.push('');\r\n-            }\r\n-        }\r\n-\r\n-        return result;\r\n-    }\r\n-\r\n-    function isDefined(value) {\r\n-        return value !== undefined && value !== null;\r\n-    }\r\n-\r\n-    function isKeyOperator(operator) {\r\n-        return operator === ';' || operator === '&' || operator === '?';\r\n-    }\r\n-\r\n-    function encodeValue(operator, value, key) {\r\n-\r\n-        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\r\n-\r\n-        if (key) {\r\n-            return encodeURIComponent(key) + '=' + value;\r\n-        } else {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    function encodeReserved(str) {\r\n-        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\r\n-            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\r\n-                part = encodeURI(part);\r\n-            }\r\n-            return part;\r\n-        }).join('');\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * URL Template (RFC 6570) Transform.\r\n-     *\u002F\r\n-\r\n-    var template = function (options) {\r\n-\r\n-        var variables = [], url = expand(options.url, options.params, variables);\r\n-\r\n-        variables.forEach(function (key) {\r\n-            delete options.params[key];\r\n-        });\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for URL templating.\r\n-     *\u002F\r\n-\r\n-    function Url(url, params) {\r\n-\r\n-        var self = this || {}, options$$1 = url, transform;\r\n-\r\n-        if (isString(url)) {\r\n-            options$$1 = {url: url, params: params};\r\n-        }\r\n-\r\n-        options$$1 = merge({}, Url.options, self.$options, options$$1);\r\n-\r\n-        Url.transforms.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Url.transform[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                transform = factory(handler, transform, self.$vm);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return transform(options$$1);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Url options.\r\n-     *\u002F\r\n-\r\n-    Url.options = {\r\n-        url: '',\r\n-        root: null,\r\n-        params: {}\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Url transforms.\r\n-     *\u002F\r\n-\r\n-    Url.transform = {template: template, query: query, root: root};\r\n-    Url.transforms = ['template', 'query', 'root'];\r\n-\r\n-    \u002F**\r\n-     * Encodes a Url parameter string.\r\n-     *\r\n-     * @param {Object} obj\r\n-     *\u002F\r\n-\r\n-    Url.params = function (obj) {\r\n-\r\n-        var params = [], escape = encodeURIComponent;\r\n-\r\n-        params.add = function (key, value) {\r\n-\r\n-            if (isFunction(value)) {\r\n-                value = value();\r\n-            }\r\n-\r\n-            if (value === null) {\r\n-                value = '';\r\n-            }\r\n-\r\n-            this.push(escape(key) + '=' + escape(value));\r\n-        };\r\n-\r\n-        serialize(params, obj);\r\n-\r\n-        return params.join('&').replace(\u002F%20\u002Fg, '+');\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Parse a URL and return its components.\r\n-     *\r\n-     * @param {String} url\r\n-     *\u002F\r\n-\r\n-    Url.parse = function (url) {\r\n-\r\n-        var el = document.createElement('a');\r\n-\r\n-        if (document.documentMode) {\r\n-            el.href = url;\r\n-            url = el.href;\r\n-        }\r\n-\r\n-        el.href = url;\r\n-\r\n-        return {\r\n-            href: el.href,\r\n-            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\r\n-            port: el.port,\r\n-            host: el.host,\r\n-            hostname: el.hostname,\r\n-            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\r\n-            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\r\n-            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\r\n-        };\r\n-    };\r\n-\r\n-    function factory(handler, next, vm) {\r\n-        return function (options$$1) {\r\n-            return handler.call(vm, options$$1, next);\r\n-        };\r\n-    }\r\n-\r\n-    function serialize(params, obj, scope) {\r\n-\r\n-        var array = isArray(obj), plain = isPlainObject(obj), hash;\r\n-\r\n-        each(obj, function (value, key) {\r\n-\r\n-            hash = isObject(value) || isArray(value);\r\n-\r\n-            if (scope) {\r\n-                key = scope + '[' + (plain || hash ? key : '') + ']';\r\n-            }\r\n-\r\n-            if (!scope && array) {\r\n-                params.add(value.name, value.value);\r\n-            } else if (hash) {\r\n-                serialize(params, value, key);\r\n-            } else {\r\n-                params.add(key, value);\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * XDomain client (Internet Explorer).\r\n-     *\u002F\r\n-\r\n-    var xdrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xdr = new XDomainRequest(), handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load') {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                resolve(request.respondWith(xdr.responseText, {status: status}));\r\n-            };\r\n-\r\n-            request.abort = function () { return xdr.abort(); };\r\n-\r\n-            xdr.open(request.method, request.getUrl());\r\n-\r\n-            if (request.timeout) {\r\n-                xdr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            xdr.onload = handler;\r\n-            xdr.onabort = handler;\r\n-            xdr.onerror = handler;\r\n-            xdr.ontimeout = handler;\r\n-            xdr.onprogress = function () {};\r\n-            xdr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * CORS Interceptor.\r\n-     *\u002F\r\n-\r\n-    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\r\n-\r\n-    var cors = function (request, next) {\r\n-\r\n-        if (inBrowser) {\r\n-\r\n-            var orgUrl = Url.parse(location.href);\r\n-            var reqUrl = Url.parse(request.getUrl());\r\n-\r\n-            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\r\n-\r\n-                request.crossOrigin = true;\r\n-                request.emulateHTTP = false;\r\n-\r\n-                if (!SUPPORTS_CORS) {\r\n-                    request.client = xdrClient;\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Form data Interceptor.\r\n-     *\u002F\r\n-\r\n-    var form = function (request, next) {\r\n-\r\n-        if (isFormData(request.body)) {\r\n-\r\n-            request.headers.delete('Content-Type');\r\n-\r\n-        } else if (isObject(request.body) && request.emulateJSON) {\r\n-\r\n-            request.body = Url.params(request.body);\r\n-            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSON Interceptor.\r\n-     *\u002F\r\n-\r\n-    var json = function (request, next) {\r\n-\r\n-        var type = request.headers.get('Content-Type') || '';\r\n-\r\n-        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\r\n-            request.body = JSON.stringify(request.body);\r\n-        }\r\n-\r\n-        next(function (response) {\r\n-\r\n-            return response.bodyText ? when(response.text(), function (text) {\r\n-\r\n-                type = response.headers.get('Content-Type') || '';\r\n-\r\n-                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\r\n-\r\n-                    try {\r\n-                        response.body = JSON.parse(text);\r\n-                    } catch (e) {\r\n-                        response.body = null;\r\n-                    }\r\n-\r\n-                } else {\r\n-                    response.body = text;\r\n-                }\r\n-\r\n-                return response;\r\n-\r\n-            }) : response;\r\n-\r\n-        });\r\n-    };\r\n-\r\n-    function isJson(str) {\r\n-\r\n-        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\r\n-\r\n-        return start && end[start[0]].test(str);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * JSONP client (Browser).\r\n-     *\u002F\r\n-\r\n-    var jsonpClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\r\n-\r\n-            handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load' && body !== null) {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                if (status && window[callback]) {\r\n-                    delete window[callback];\r\n-                    document.body.removeChild(script);\r\n-                }\r\n-\r\n-                resolve(request.respondWith(body, {status: status}));\r\n-            };\r\n-\r\n-            window[callback] = function (result) {\r\n-                body = JSON.stringify(result);\r\n-            };\r\n-\r\n-            request.abort = function () {\r\n-                handler({type: 'abort'});\r\n-            };\r\n-\r\n-            request.params[name] = callback;\r\n-\r\n-            if (request.timeout) {\r\n-                setTimeout(request.abort, request.timeout);\r\n-            }\r\n-\r\n-            script = document.createElement('script');\r\n-            script.src = request.getUrl();\r\n-            script.type = 'text\u002Fjavascript';\r\n-            script.async = true;\r\n-            script.onload = handler;\r\n-            script.onerror = handler;\r\n-\r\n-            document.body.appendChild(script);\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSONP Interceptor.\r\n-     *\u002F\r\n-\r\n-    var jsonp = function (request, next) {\r\n-\r\n-        if (request.method == 'JSONP') {\r\n-            request.client = jsonpClient;\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Before Interceptor.\r\n-     *\u002F\r\n-\r\n-    var before = function (request, next) {\r\n-\r\n-        if (isFunction(request.before)) {\r\n-            request.before.call(this, request);\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * HTTP method override Interceptor.\r\n-     *\u002F\r\n-\r\n-    var method = function (request, next) {\r\n-\r\n-        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\r\n-            request.headers.set('X-HTTP-Method-Override', request.method);\r\n-            request.method = 'POST';\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Header Interceptor.\r\n-     *\u002F\r\n-\r\n-    var header = function (request, next) {\r\n-\r\n-        var headers = assign({}, Http.headers.common,\r\n-            !request.crossOrigin ? Http.headers.custom : {},\r\n-            Http.headers[toLower(request.method)]\r\n-        );\r\n-\r\n-        each(headers, function (value, name) {\r\n-            if (!request.headers.has(name)) {\r\n-                request.headers.set(name, value);\r\n-            }\r\n-        });\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * XMLHttp client (Browser).\r\n-     *\u002F\r\n-\r\n-    var xhrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xhr = new XMLHttpRequest(), handler = function (event) {\r\n-\r\n-                var response = request.respondWith(\r\n-                    'response' in xhr ? xhr.response : xhr.responseText, {\r\n-                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\r\n-                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\r\n-                    }\r\n-                );\r\n-\r\n-                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\r\n-                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\r\n-                });\r\n-\r\n-                resolve(response);\r\n-            };\r\n-\r\n-            request.abort = function () { return xhr.abort(); };\r\n-\r\n-            if (request.progress) {\r\n-                if (request.method === 'GET') {\r\n-                    xhr.addEventListener('progress', request.progress);\r\n-                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\r\n-                    xhr.upload.addEventListener('progress', request.progress);\r\n-                }\r\n-            }\r\n-\r\n-            xhr.open(request.method, request.getUrl(), true);\r\n-\r\n-            if (request.timeout) {\r\n-                xhr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            if (request.responseType && 'responseType' in xhr) {\r\n-                xhr.responseType = request.responseType;\r\n-            }\r\n-\r\n-            if (request.withCredentials || request.credentials) {\r\n-                xhr.withCredentials = true;\r\n-            }\r\n-\r\n-            if (!request.crossOrigin) {\r\n-                request.headers.set('X-Requested-With', 'XMLHttpRequest');\r\n-            }\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                xhr.setRequestHeader(name, value);\r\n-            });\r\n-\r\n-            xhr.onload = handler;\r\n-            xhr.onabort = handler;\r\n-            xhr.onerror = handler;\r\n-            xhr.ontimeout = handler;\r\n-            xhr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Http client (Node).\r\n-     *\u002F\r\n-\r\n-    var nodeClient = function (request) {\r\n-\r\n-        var client = require('got');\r\n-\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var url = request.getUrl();\r\n-            var body = request.getBody();\r\n-            var method = request.method;\r\n-            var headers = {}, handler;\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                headers[name] = value;\r\n-            });\r\n-\r\n-            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\r\n-\r\n-                var response = request.respondWith(resp.body, {\r\n-                        status: resp.statusCode,\r\n-                        statusText: trim(resp.statusMessage)\r\n-                    }\r\n-                );\r\n-\r\n-                each(resp.headers, function (value, name) {\r\n-                    response.headers.set(name, value);\r\n-                });\r\n-\r\n-                resolve(response);\r\n-\r\n-            }, function (error$$1) { return handler(error$$1.response); });\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Base client.\r\n-     *\u002F\r\n-\r\n-    var Client = function (context) {\r\n-\r\n-        var reqHandlers = [sendRequest], resHandlers = [], handler;\r\n-\r\n-        if (!isObject(context)) {\r\n-            context = null;\r\n-        }\r\n-\r\n-        function Client(request) {\r\n-            return new PromiseObj(function (resolve, reject) {\r\n-\r\n-                function exec() {\r\n-\r\n-                    handler = reqHandlers.pop();\r\n-\r\n-                    if (isFunction(handler)) {\r\n-                        handler.call(context, request, next);\r\n-                    } else {\r\n-                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\r\n-                        next();\r\n-                    }\r\n-                }\r\n-\r\n-                function next(response) {\r\n-\r\n-                    if (isFunction(response)) {\r\n-\r\n-                        resHandlers.unshift(response);\r\n-\r\n-                    } else if (isObject(response)) {\r\n-\r\n-                        resHandlers.forEach(function (handler) {\r\n-                            response = when(response, function (response) {\r\n-                                return handler.call(context, response) || response;\r\n-                            }, reject);\r\n-                        });\r\n-\r\n-                        when(response, resolve, reject);\r\n-\r\n-                        return;\r\n-                    }\r\n-\r\n-                    exec();\r\n-                }\r\n-\r\n-                exec();\r\n-\r\n-            }, context);\r\n-        }\r\n-\r\n-        Client.use = function (handler) {\r\n-            reqHandlers.push(handler);\r\n-        };\r\n-\r\n-        return Client;\r\n-    };\r\n-\r\n-    function sendRequest(request, resolve) {\r\n-\r\n-        var client = request.client || (inBrowser ? xhrClient : nodeClient);\r\n-\r\n-        resolve(client(request));\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Headers.\r\n-     *\u002F\r\n-\r\n-    var Headers = function Headers(headers) {\r\n-        var this$1 = this;\r\n-\r\n-\r\n-        this.map = {};\r\n-\r\n-        each(headers, function (value, name) { return this$1.append(name, value); });\r\n-    };\r\n-\r\n-    Headers.prototype.has = function has (name) {\r\n-        return getName(this.map, name) !== null;\r\n-    };\r\n-\r\n-    Headers.prototype.get = function get (name) {\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        return list ? list.join() : null;\r\n-    };\r\n-\r\n-    Headers.prototype.getAll = function getAll (name) {\r\n-        return this.map[getName(this.map, name)] || [];\r\n-    };\r\n-\r\n-    Headers.prototype.set = function set (name, value) {\r\n-        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\r\n-    };\r\n-\r\n-    Headers.prototype.append = function append (name, value){\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        if (list) {\r\n-            list.push(trim(value));\r\n-        } else {\r\n-            this.set(name, value);\r\n-        }\r\n-    };\r\n-\r\n-    Headers.prototype.delete = function delete$1 (name){\r\n-        delete this.map[getName(this.map, name)];\r\n-    };\r\n-\r\n-    Headers.prototype.deleteAll = function deleteAll (){\r\n-        this.map = {};\r\n-    };\r\n-\r\n-    Headers.prototype.forEach = function forEach (callback, thisArg) {\r\n-        var this$1 = this;\r\n-\r\n-        each(this.map, function (list, name) {\r\n-            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\r\n-        });\r\n-    };\r\n-\r\n-    function getName(map, name) {\r\n-        return Object.keys(map).reduce(function (prev, curr) {\r\n-            return toLower(name) === toLower(curr) ? curr : prev;\r\n-        }, null);\r\n-    }\r\n-\r\n-    function normalizeName(name) {\r\n-\r\n-        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\r\n-            throw new TypeError('Invalid character in header field name');\r\n-        }\r\n-\r\n-        return trim(name);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Response.\r\n-     *\u002F\r\n-\r\n-    var Response = function Response(body, ref) {\r\n-        var url = ref.url;\r\n-        var headers = ref.headers;\r\n-        var status = ref.status;\r\n-        var statusText = ref.statusText;\r\n-\r\n-\r\n-        this.url = url;\r\n-        this.ok = status >= 200 && status \u003C 300;\r\n-        this.status = status || 0;\r\n-        this.statusText = statusText || '';\r\n-        this.headers = new Headers(headers);\r\n-        this.body = body;\r\n-\r\n-        if (isString(body)) {\r\n-\r\n-            this.bodyText = body;\r\n-\r\n-        } else if (isBlob(body)) {\r\n-\r\n-            this.bodyBlob = body;\r\n-\r\n-            if (isBlobText(body)) {\r\n-                this.bodyText = blobText(body);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    Response.prototype.blob = function blob () {\r\n-        return when(this.bodyBlob);\r\n-    };\r\n-\r\n-    Response.prototype.text = function text () {\r\n-        return when(this.bodyText);\r\n-    };\r\n-\r\n-    Response.prototype.json = function json () {\r\n-        return when(this.text(), function (text) { return JSON.parse(text); });\r\n-    };\r\n-\r\n-    Object.defineProperty(Response.prototype, 'data', {\r\n-\r\n-        get: function get() {\r\n-            return this.body;\r\n-        },\r\n-\r\n-        set: function set(body) {\r\n-            this.body = body;\r\n-        }\r\n-\r\n-    });\r\n-\r\n-    function blobText(body) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var reader = new FileReader();\r\n-\r\n-            reader.readAsText(body);\r\n-            reader.onload = function () {\r\n-                resolve(reader.result);\r\n-            };\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    function isBlobText(body) {\r\n-        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Request.\r\n-     *\u002F\r\n-\r\n-    var Request = function Request(options$$1) {\r\n-\r\n-        this.body = null;\r\n-        this.params = {};\r\n-\r\n-        assign(this, options$$1, {\r\n-            method: toUpper(options$$1.method || 'GET')\r\n-        });\r\n-\r\n-        if (!(this.headers instanceof Headers)) {\r\n-            this.headers = new Headers(this.headers);\r\n-        }\r\n-    };\r\n-\r\n-    Request.prototype.getUrl = function getUrl (){\r\n-        return Url(this);\r\n-    };\r\n-\r\n-    Request.prototype.getBody = function getBody (){\r\n-        return this.body;\r\n-    };\r\n-\r\n-    Request.prototype.respondWith = function respondWith (body, options$$1) {\r\n-        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for sending network requests.\r\n-     *\u002F\r\n-\r\n-    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\r\n-    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\r\n-\r\n-    function Http(options$$1) {\r\n-\r\n-        var self = this || {}, client = Client(self.$vm);\r\n-\r\n-        defaults(options$$1 || {}, self.$options, Http.options);\r\n-\r\n-        Http.interceptors.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Http.interceptor[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                client.use(handler);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return client(new Request(options$$1)).then(function (response) {\r\n-\r\n-            return response.ok ? response : PromiseObj.reject(response);\r\n-\r\n-        }, function (response) {\r\n-\r\n-            if (response instanceof Error) {\r\n-                error(response);\r\n-            }\r\n-\r\n-            return PromiseObj.reject(response);\r\n-        });\r\n-    }\r\n-\r\n-    Http.options = {};\r\n-\r\n-    Http.headers = {\r\n-        put: JSON_CONTENT_TYPE,\r\n-        post: JSON_CONTENT_TYPE,\r\n-        patch: JSON_CONTENT_TYPE,\r\n-        delete: JSON_CONTENT_TYPE,\r\n-        common: COMMON_HEADERS,\r\n-        custom: {}\r\n-    };\r\n-\r\n-    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\r\n-    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\r\n-\r\n-    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    ['post', 'put', 'patch'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, body, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Service for interacting with RESTful services.\r\n-     *\u002F\r\n-\r\n-    function Resource(url, params, actions, options$$1) {\r\n-\r\n-        var self = this || {}, resource = {};\r\n-\r\n-        actions = assign({},\r\n-            Resource.actions,\r\n-            actions\r\n-        );\r\n-\r\n-        each(actions, function (action, name) {\r\n-\r\n-            action = merge({url: url, params: assign({}, params)}, options$$1, action);\r\n-\r\n-            resource[name] = function () {\r\n-                return (self.$http || Http)(opts(action, arguments));\r\n-            };\r\n-        });\r\n-\r\n-        return resource;\r\n-    }\r\n-\r\n-    function opts(action, args) {\r\n-\r\n-        var options$$1 = assign({}, action), params = {}, body;\r\n-\r\n-        switch (args.length) {\r\n-\r\n-            case 2:\r\n-\r\n-                params = args[0];\r\n-                body = args[1];\r\n-\r\n-                break;\r\n-\r\n-            case 1:\r\n-\r\n-                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\r\n-                    body = args[0];\r\n-                } else {\r\n-                    params = args[0];\r\n-                }\r\n-\r\n-                break;\r\n-\r\n-            case 0:\r\n-\r\n-                break;\r\n-\r\n-            default:\r\n-\r\n-                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\r\n-        }\r\n-\r\n-        options$$1.body = body;\r\n-        options$$1.params = assign({}, options$$1.params, params);\r\n-\r\n-        return options$$1;\r\n-    }\r\n-\r\n-    Resource.actions = {\r\n-\r\n-        get: {method: 'GET'},\r\n-        save: {method: 'POST'},\r\n-        query: {method: 'GET'},\r\n-        update: {method: 'PUT'},\r\n-        remove: {method: 'DELETE'},\r\n-        delete: {method: 'DELETE'}\r\n-\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Install plugin.\r\n-     *\u002F\r\n-\r\n-    function plugin(Vue) {\r\n-\r\n-        if (plugin.installed) {\r\n-            return;\r\n-        }\r\n-\r\n-        Util(Vue);\r\n-\r\n-        Vue.url = Url;\r\n-        Vue.http = Http;\r\n-        Vue.resource = Resource;\r\n-        Vue.Promise = PromiseObj;\r\n-\r\n-        Object.defineProperties(Vue.prototype, {\r\n-\r\n-            $url: {\r\n-                get: function get() {\r\n-                    return options(Vue.url, this, this.$options.url);\r\n-                }\r\n-            },\r\n-\r\n-            $http: {\r\n-                get: function get() {\r\n-                    return options(Vue.http, this, this.$options.http);\r\n-                }\r\n-            },\r\n-\r\n-            $resource: {\r\n-                get: function get() {\r\n-                    return Vue.resource.bind(this);\r\n-                }\r\n-            },\r\n-\r\n-            $promise: {\r\n-                get: function get() {\r\n-                    var this$1 = this;\r\n-\r\n-                    return function (executor) { return new Vue.Promise(executor, this$1); };\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    if (typeof window !== 'undefined' && window.Vue) {\r\n-        window.Vue.use(plugin);\r\n-    }\r\n-\r\n-    return plugin;\r\n-\r\n-})));\r\n-\r\n-'use strict';\r\n-var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n-\r\n-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\r\n-\r\n-(function () {\r\n-  \"use strict\";\r\n-\r\n-  if (!Array.from) {\r\n-    Array.from = function (object) {\r\n-      return [].slice.call(object);\r\n-    };\r\n-  }\r\n-\r\n-  function buildDraggable(Sortable) {\r\n-    function removeNode(node) {\r\n-      node.parentElement.removeChild(node);\r\n-    }\r\n-\r\n-    function insertNodeAt(fatherNode, node, position) {\r\n-      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\r\n-      fatherNode.insertBefore(node, refNode);\r\n-    }\r\n-\r\n-    function computeVmIndex(vnodes, element) {\r\n-      return vnodes.map(function (elt) {\r\n-        return elt.elm;\r\n-      }).indexOf(element);\r\n-    }\r\n-\r\n-    function _computeIndexes(slots, children, isTransition) {\r\n-      if (!slots) {\r\n-        return [];\r\n-      }\r\n-\r\n-      var elmFromNodes = slots.map(function (elt) {\r\n-        return elt.elm;\r\n-      });\r\n-      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\r\n-        return elmFromNodes.indexOf(elt);\r\n-      });\r\n-      return isTransition ? rawIndexes.filter(function (ind) {\r\n-        return ind !== -1;\r\n-      }) : rawIndexes;\r\n-    }\r\n-\r\n-    function emit(evtName, evtData) {\r\n-      var _this = this;\r\n-\r\n-      this.$nextTick(function () {\r\n-        return _this.$emit(evtName.toLowerCase(), evtData);\r\n-      });\r\n-    }\r\n-\r\n-    function delegateAndEmit(evtName) {\r\n-      var _this2 = this;\r\n-\r\n-      return function (evtData) {\r\n-        if (_this2.realList !== null) {\r\n-          _this2['onDrag' + evtName](evtData);\r\n-        }\r\n-        emit.call(_this2, evtName, evtData);\r\n-      };\r\n-    }\r\n-\r\n-    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\r\n-    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\r\n-    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\r\n-      return 'on' + evt;\r\n-    });\r\n-    var draggingElement = null;\r\n-\r\n-    var props = {\r\n-      options: Object,\r\n-      list: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      value: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      noTransitionOnDrag: {\r\n-        type: Boolean,\r\n-        default: false\r\n-      },\r\n-      clone: {\r\n-        type: Function,\r\n-        default: function _default(original) {\r\n-          return original;\r\n-        }\r\n-      },\r\n-      element: {\r\n-        type: String,\r\n-        default: 'div'\r\n-      },\r\n-      move: {\r\n-        type: Function,\r\n-        default: null\r\n-      }\r\n-    };\r\n-\r\n-    var draggableComponent = {\r\n-      name: 'draggable',\r\n-\r\n-      props: props,\r\n-\r\n-      data: function data() {\r\n-        return {\r\n-          transitionMode: false,\r\n-          componentMode: false\r\n-        };\r\n-      },\r\n-      render: function render(h) {\r\n-        var slots = this.$slots.default;\r\n-        if (slots && slots.length === 1) {\r\n-          var child = slots[0];\r\n-          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\r\n-            this.transitionMode = true;\r\n-          }\r\n-        }\r\n-        var children = slots;\r\n-        var footer = this.$slots.footer;\r\n-\r\n-        if (footer) {\r\n-          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\r\n-        }\r\n-        return h(this.element, null, children);\r\n-      },\r\n-      mounted: function mounted() {\r\n-        var _this3 = this;\r\n-\r\n-        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\r\n-        if (this.componentMode && this.transitionMode) {\r\n-          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\r\n-        }\r\n-        var optionsAdded = {};\r\n-        eventsListened.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\r\n-        });\r\n-\r\n-        eventsToEmit.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = emit.bind(_this3, elt);\r\n-        });\r\n-\r\n-        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\r\n-            return _this3.onDragMove(evt, originalEvent);\r\n-          } });\r\n-        !('draggable' in options) && (options.draggable = '>*');\r\n-        this._sortable = new Sortable(this.rootContainer, options);\r\n-        this.computeIndexes();\r\n-      },\r\n-      beforeDestroy: function beforeDestroy() {\r\n-        this._sortable.destroy();\r\n-      },\r\n-\r\n-\r\n-      computed: {\r\n-        rootContainer: function rootContainer() {\r\n-          return this.transitionMode ? this.$el.children[0] : this.$el;\r\n-        },\r\n-        isCloning: function isCloning() {\r\n-          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\r\n-        },\r\n-        realList: function realList() {\r\n-          return !!this.list ? this.list : this.value;\r\n-        }\r\n-      },\r\n-\r\n-      watch: {\r\n-        options: {\r\n-          handler: function handler(newOptionValue) {\r\n-            for (var property in newOptionValue) {\r\n-              if (readonlyProperties.indexOf(property) == -1) {\r\n-                this._sortable.option(property, newOptionValue[property]);\r\n-              }\r\n-            }\r\n-          },\r\n-\r\n-          deep: true\r\n-        },\r\n-\r\n-        realList: function realList() {\r\n-          this.computeIndexes();\r\n-        }\r\n-      },\r\n-\r\n-      methods: {\r\n-        getChildrenNodes: function getChildrenNodes() {\r\n-          if (this.componentMode) {\r\n-            return this.$children[0].$slots.default;\r\n-          }\r\n-          var rawNodes = this.$slots.default;\r\n-          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n-        },\r\n-        computeIndexes: function computeIndexes() {\r\n-          var _this4 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\r\n-          });\r\n-        },\r\n-        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\r\n-          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n-          if (index === -1) {\r\n-            \u002F\u002FEdge case during move callback: related element might be\r\n-            \u002F\u002Fan element different from collection\r\n-            return null;\r\n-          }\r\n-          var element = this.realList[index];\r\n-          return { index: index, element: element };\r\n-        },\r\n-        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\r\n-          var __vue__ = _ref.__vue__;\r\n-\r\n-          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\r\n-            return __vue__;\r\n-          }\r\n-          return __vue__.$parent;\r\n-        },\r\n-        emitChanges: function emitChanges(evt) {\r\n-          var _this5 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this5.$emit('change', evt);\r\n-          });\r\n-        },\r\n-        alterList: function alterList(onList) {\r\n-          if (!!this.list) {\r\n-            onList(this.list);\r\n-          } else {\r\n-            var newList = [].concat(_toConsumableArray(this.value));\r\n-            onList(newList);\r\n-            this.$emit('input', newList);\r\n-          }\r\n-        },\r\n-        spliceList: function spliceList() {\r\n-          var _arguments = arguments;\r\n-\r\n-          var spliceList = function spliceList(list) {\r\n-            return list.splice.apply(list, _arguments);\r\n-          };\r\n-          this.alterList(spliceList);\r\n-        },\r\n-        updatePosition: function updatePosition(oldIndex, newIndex) {\r\n-          var updatePosition = function updatePosition(list) {\r\n-            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n-          };\r\n-          this.alterList(updatePosition);\r\n-        },\r\n-        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\r\n-          var to = _ref2.to,\r\n-              related = _ref2.related;\r\n-\r\n-          var component = this.getUnderlyingPotencialDraggableComponent(to);\r\n-          if (!component) {\r\n-            return { component: component };\r\n-          }\r\n-          var list = component.realList;\r\n-          var context = { list: list, component: component };\r\n-          if (to !== related && list && component.getUnderlyingVm) {\r\n-            var destination = component.getUnderlyingVm(related);\r\n-            if (destination) {\r\n-              return _extends(destination, context);\r\n-            }\r\n-          }\r\n-\r\n-          return context;\r\n-        },\r\n-        getVmIndex: function getVmIndex(domIndex) {\r\n-          var indexes = this.visibleIndexes;\r\n-          var numberIndexes = indexes.length;\r\n-          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n-        },\r\n-        getComponent: function getComponent() {\r\n-          return this.$slots.default[0].componentInstance;\r\n-        },\r\n-        resetTransitionData: function resetTransitionData(index) {\r\n-          if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n-            return;\r\n-          }\r\n-          var nodes = this.getChildrenNodes();\r\n-          nodes[index].data = null;\r\n-          var transitionContainer = this.getComponent();\r\n-          transitionContainer.children = [];\r\n-          transitionContainer.kept = undefined;\r\n-        },\r\n-        onDragStart: function onDragStart(evt) {\r\n-          this.context = this.getUnderlyingVm(evt.item);\r\n-          evt.item._underlying_vm_ = this.clone(this.context.element);\r\n-          draggingElement = evt.item;\r\n-        },\r\n-        onDragAdd: function onDragAdd(evt) {\r\n-          var element = evt.item._underlying_vm_;\r\n-          if (element === undefined) {\r\n-            return;\r\n-          }\r\n-          removeNode(evt.item);\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.spliceList(newIndex, 0, element);\r\n-          this.computeIndexes();\r\n-          var added = { element: element, newIndex: newIndex };\r\n-          this.emitChanges({ added: added });\r\n-        },\r\n-        onDragRemove: function onDragRemove(evt) {\r\n-          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n-          if (this.isCloning) {\r\n-            removeNode(evt.clone);\r\n-            return;\r\n-          }\r\n-          var oldIndex = this.context.index;\r\n-          this.spliceList(oldIndex, 1);\r\n-          var removed = { element: this.context.element, oldIndex: oldIndex };\r\n-          this.resetTransitionData(oldIndex);\r\n-          this.emitChanges({ removed: removed });\r\n-        },\r\n-        onDragUpdate: function onDragUpdate(evt) {\r\n-          removeNode(evt.item);\r\n-          insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n-          var oldIndex = this.context.index;\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.updatePosition(oldIndex, newIndex);\r\n-          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\r\n-          this.emitChanges({ moved: moved });\r\n-        },\r\n-        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\r\n-          if (!relatedContext.element) {\r\n-            return 0;\r\n-          }\r\n-          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\r\n-            return el.style['display'] !== 'none';\r\n-          });\r\n-          var currentDOMIndex = domChildren.indexOf(evt.related);\r\n-          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n-          var draggedInList = domChildren.indexOf(draggingElement) != -1;\r\n-          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\r\n-        },\r\n-        onDragMove: function onDragMove(evt, originalEvent) {\r\n-          var onMove = this.move;\r\n-          if (!onMove || !this.realList) {\r\n-            return true;\r\n-          }\r\n-\r\n-          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n-          var draggedContext = this.context;\r\n-          var futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n-          _extends(draggedContext, { futureIndex: futureIndex });\r\n-          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\r\n-          return onMove(evt, originalEvent);\r\n-        },\r\n-        onDragEnd: function onDragEnd(evt) {\r\n-          this.computeIndexes();\r\n-          draggingElement = null;\r\n-        }\r\n-      }\r\n-    };\r\n-    return draggableComponent;\r\n-  }\r\n-\r\n-  if (typeof exports == \"object\") {\r\n-    \u002F\u002F var Sortable = require(\"sortablejs\");\r\n-    \u002F\u002F module.exports = buildDraggable(Sortable);\r\n-  } else if (typeof define == \"function\" && define.amd) {\r\n-    define(['sortablejs'], function (Sortable) {\r\n-      return buildDraggable(Sortable);\r\n-    });\r\n-  } else if (window && window.Vue && window.Sortable) {\r\n-    var draggable = buildDraggable(window.Sortable);\r\n-    Vue.component('draggable', draggable);\r\n-  }\r\n-})();\r\n-\u002F\u002F tipsy, facebook style tooltips for jquery\r\n-\u002F\u002F version 1.0.0a\r\n-\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\r\n-\u002F\u002F released under the MIT license\r\n-\r\n-(function($) {\r\n-\r\n-    function maybeCall(thing, ctx) {\r\n-        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\r\n-    };\r\n-\r\n-    function isElementInDOM(ele) {\r\n-        while (ele = ele.parentNode) {\r\n-            if (ele == document) return true;\r\n-        }\r\n-        return false;\r\n-    };\r\n-\r\n-    function Tipsy(element, options) {\r\n-        this.$element = $(element);\r\n-        this.options = options;\r\n-        this.enabled = true;\r\n-        this.fixTitle();\r\n-    };\r\n-\r\n-    Tipsy.prototype = {\r\n-        show: function() {\r\n-            var title = this.getTitle();\r\n-            if (title && this.enabled) {\r\n-                var $tip = this.tip();\r\n-\r\n-                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\r\n-                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\r\n-                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\r\n-\r\n-                var pos = $.extend({}, this.$element.offset(), {\r\n-                    width: this.$element[0].offsetWidth,\r\n-                    height: this.$element[0].offsetHeight\r\n-                });\r\n-\r\n-                var actualWidth = $tip[0].offsetWidth,\r\n-                    actualHeight = $tip[0].offsetHeight,\r\n-                    gravity = maybeCall(this.options.gravity, this.$element[0]);\r\n-\r\n-                var tp;\r\n-                switch (gravity.charAt(0)) {\r\n-                    case 'n':\r\n-                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 's':\r\n-                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 'e':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\r\n-                        break;\r\n-                    case 'w':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\r\n-                        break;\r\n-                }\r\n-\r\n-                if (gravity.length == 2) {\r\n-                    if (gravity.charAt(1) == 'w') {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - 15;\r\n-                    } else {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\r\n-                    }\r\n-                }\r\n-\r\n-                $tip.css(tp).addClass('tipsy-' + gravity);\r\n-                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\r\n-                if (this.options.className) {\r\n-                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\r\n-                }\r\n-\r\n-                if (this.options.fade) {\r\n-                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\r\n-                } else {\r\n-                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        hide: function() {\r\n-            if (this.options.fade) {\r\n-                this.tip().stop().fadeOut(function() { $(this).remove(); });\r\n-            } else {\r\n-                this.tip().remove();\r\n-            }\r\n-        },\r\n-\r\n-        fixTitle: function() {\r\n-            var $e = this.$element;\r\n-            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\r\n-                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\r\n-            }\r\n-        },\r\n-\r\n-        getTitle: function() {\r\n-            var title, $e = this.$element, o = this.options;\r\n-            this.fixTitle();\r\n-            var title, o = this.options;\r\n-            if (typeof o.title == 'string') {\r\n-                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\r\n-            } else if (typeof o.title == 'function') {\r\n-                title = o.title.call($e[0]);\r\n-            }\r\n-            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\r\n-            return title || o.fallback;\r\n-        },\r\n-\r\n-        tip: function() {\r\n-            if (!this.$tip) {\r\n-                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\r\n-                this.$tip.data('tipsy-pointee', this.$element[0]);\r\n-            }\r\n-            return this.$tip;\r\n-        },\r\n-\r\n-        validate: function() {\r\n-            if (!this.$element[0].parentNode) {\r\n-                this.hide();\r\n-                this.$element = null;\r\n-                this.options = null;\r\n-            }\r\n-        },\r\n-\r\n-        enable: function() { this.enabled = true; },\r\n-        disable: function() { this.enabled = false; },\r\n-        toggleEnabled: function() { this.enabled = !this.enabled; }\r\n-    };\r\n-\r\n-    $.fn.tipsy = function(options) {\r\n-\r\n-        if (options === true) {\r\n-            return this.data('tipsy');\r\n-        } else if (typeof options == 'string') {\r\n-            var tipsy = this.data('tipsy');\r\n-            if (tipsy) tipsy[options]();\r\n-            return this;\r\n-        }\r\n-\r\n-        options = $.extend({}, $.fn.tipsy.defaults, options);\r\n-\r\n-        function get(ele) {\r\n-            var tipsy = $.data(ele, 'tipsy');\r\n-            if (!tipsy) {\r\n-                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\r\n-                $.data(ele, 'tipsy', tipsy);\r\n-            }\r\n-            return tipsy;\r\n-        }\r\n-\r\n-        function enter() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'in';\r\n-            if (options.delayIn == 0) {\r\n-                tipsy.show();\r\n-            } else {\r\n-                tipsy.fixTitle();\r\n-                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\r\n-            }\r\n-        };\r\n-\r\n-        function leave() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'out';\r\n-            if (options.delayOut == 0) {\r\n-                tipsy.hide();\r\n-            } else {\r\n-                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\r\n-            }\r\n-        };\r\n-\r\n-        if (!options.live) this.each(function() { get(this); });\r\n-\r\n-        if (options.trigger != 'manual') {\r\n-            var binder   = options.live ? 'live' : 'bind',\r\n-                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\r\n-                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\r\n-            this[binder](eventIn, enter)[binder](eventOut, leave);\r\n-        }\r\n-\r\n-        return this;\r\n-\r\n-    };\r\n-\r\n-    $.fn.tipsy.defaults = {\r\n-        className: null,\r\n-        delayIn: 0,\r\n-        delayOut: 0,\r\n-        fade: false,\r\n-        fallback: '',\r\n-        gravity: 'n',\r\n-        html: false,\r\n-        live: false,\r\n-        offset: 0,\r\n-        opacity: 0.8,\r\n-        title: 'title',\r\n-        trigger: 'hover'\r\n-    };\r\n-\r\n-    $.fn.tipsy.revalidate = function() {\r\n-        $('.tipsy').each(function() {\r\n-            var pointee = $.data(this, 'tipsy-pointee');\r\n-            if (!pointee || !isElementInDOM(pointee)) {\r\n-                $(this).remove();\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Overwrite this method to provide options on a per-element basis.\r\n-    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\r\n-    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\r\n-    \u002F\u002F (remember - do not modify 'options' in place!)\r\n-    $.fn.tipsy.elementOptions = function(ele, options) {\r\n-        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoNS = function() {\r\n-        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoWE = function() {\r\n-        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * yields a closure of the supplied parameters, producing a function that takes\r\n-     * no arguments and is suitable for use as an autogravity function like so:\r\n-     *\r\n-     * @param margin (int) - distance from the viewable region edge that an\r\n-     *        element should be before setting its tooltip's gravity to be away\r\n-     *        from that edge.\r\n-     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\r\n-     *        if there are no viewable region edges effecting the tooltip's\r\n-     *        gravity. It will try to vary from this minimally, for example,\r\n-     *        if 'sw' is preferred and an element is near the right viewable\r\n-     *        region edge, but not the top edge, it will set the gravity for\r\n-     *        that element's tooltip to be 'se', preserving the southern\r\n-     *        component.\r\n-     *\u002F\r\n-    $.fn.tipsy.autoBounds = function(margin, prefer) {\r\n-        return function() {\r\n-            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\r\n-                boundTop = $(document).scrollTop() + margin,\r\n-                boundLeft = $(document).scrollLeft() + margin,\r\n-                $this = $(this);\r\n-\r\n-            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\r\n-            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\r\n-            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\r\n-            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\r\n-\r\n-            return dir.ns + (dir.ew ? dir.ew : '');\r\n-        }\r\n-    };\r\n-\r\n+\u002F*!\n+ * Vue.js v2.6.10\n+ * (c) 2014-2019 Evan You\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vue = factory());\n+}(this, function () { 'use strict';\n+\n+  \u002F*  *\u002F\n+\n+    var emptyObject = Object.freeze({});\n+\n+    \u002F\u002F These helpers produce better VM code in JS engines due to their\n+    \u002F\u002F explicitness and function inlining.\n+    function isUndef (v) {\n+        return v === undefined || v === null\n+    }\n+\n+    function isDef (v) {\n+        return v !== undefined && v !== null\n+    }\n+\n+    function isTrue (v) {\n+        return v === true\n+    }\n+\n+    function isFalse (v) {\n+        return v === false\n+    }\n+\n+    \u002F**\n+     * Check if value is primitive.\n+     *\u002F\n+    function isPrimitive (value) {\n+        return (\n+            typeof value === 'string' ||\n+            typeof value === 'number' ||\n+            \u002F\u002F $flow-disable-line\n+            typeof value === 'symbol' ||\n+            typeof value === 'boolean'\n+        )\n+    }\n+\n+    \u002F**\n+     * Quick object check - this is primarily used to tell\n+     * Objects from primitive values when we know the value\n+     * is a JSON-compliant type.\n+     *\u002F\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    \u002F**\n+     * Get the raw type string of a value, e.g., [object Object].\n+     *\u002F\n+    var _toString = Object.prototype.toString;\n+\n+    function toRawType (value) {\n+        return _toString.call(value).slice(8, -1)\n+    }\n+\n+    \u002F**\n+     * Strict object type check. Only returns true\n+     * for plain JavaScript objects.\n+     *\u002F\n+    function isPlainObject (obj) {\n+        return _toString.call(obj) === '[object Object]'\n+    }\n+\n+    function isRegExp (v) {\n+        return _toString.call(v) === '[object RegExp]'\n+    }\n+\n+    \u002F**\n+     * Check if val is a valid array index.\n+     *\u002F\n+    function isValidArrayIndex (val) {\n+        var n = parseFloat(String(val));\n+        return n >= 0 && Math.floor(n) === n && isFinite(val)\n+    }\n+\n+    function isPromise (val) {\n+        return (\n+            isDef(val) &&\n+            typeof val.then === 'function' &&\n+            typeof val.catch === 'function'\n+        )\n+    }\n+\n+    \u002F**\n+     * Convert a value to a string that is actually rendered.\n+     *\u002F\n+    function toString (val) {\n+        return val == null\n+            ? ''\n+            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n+                ? JSON.stringify(val, null, 2)\n+                : String(val)\n+    }\n+\n+    \u002F**\n+     * Convert an input value to a number for persistence.\n+     * If the conversion fails, return original string.\n+     *\u002F\n+    function toNumber (val) {\n+        var n = parseFloat(val);\n+        return isNaN(n) ? val : n\n+    }\n+\n+    \u002F**\n+     * Make a map and return a function for checking if a key\n+     * is in that map.\n+     *\u002F\n+    function makeMap (\n+        str,\n+        expectsLowerCase\n+    ) {\n+        var map = Object.create(null);\n+        var list = str.split(',');\n+        for (var i = 0; i \u003C list.length; i++) {\n+            map[list[i]] = true;\n+        }\n+        return expectsLowerCase\n+            ? function (val) { return map[val.toLowerCase()]; }\n+            : function (val) { return map[val]; }\n+    }\n+\n+    \u002F**\n+     * Check if a tag is a built-in tag.\n+     *\u002F\n+    var isBuiltInTag = makeMap('slot,component', true);\n+\n+    \u002F**\n+     * Check if an attribute is a reserved attribute.\n+     *\u002F\n+    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n+\n+    \u002F**\n+     * Remove an item from an array.\n+     *\u002F\n+    function remove (arr, item) {\n+        if (arr.length) {\n+            var index = arr.indexOf(item);\n+            if (index > -1) {\n+                return arr.splice(index, 1)\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Check whether an object has the property.\n+     *\u002F\n+    var hasOwnProperty = Object.prototype.hasOwnProperty;\n+    function hasOwn (obj, key) {\n+        return hasOwnProperty.call(obj, key)\n+    }\n+\n+    \u002F**\n+     * Create a cached version of a pure function.\n+     *\u002F\n+    function cached (fn) {\n+        var cache = Object.create(null);\n+        return (function cachedFn (str) {\n+            var hit = cache[str];\n+            return hit || (cache[str] = fn(str))\n+        })\n+    }\n+\n+    \u002F**\n+     * Camelize a hyphen-delimited string.\n+     *\u002F\n+    var camelizeRE = \u002F-(\\w)\u002Fg;\n+    var camelize = cached(function (str) {\n+        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n+    });\n+\n+    \u002F**\n+     * Capitalize a string.\n+     *\u002F\n+    var capitalize = cached(function (str) {\n+        return str.charAt(0).toUpperCase() + str.slice(1)\n+    });\n+\n+    \u002F**\n+     * Hyphenate a camelCase string.\n+     *\u002F\n+    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\n+    var hyphenate = cached(function (str) {\n+        return str.replace(hyphenateRE, '-$1').toLowerCase()\n+    });\n+\n+    \u002F**\n+     * Simple bind polyfill for environments that do not support it,\n+     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n+     * since native bind is now performant enough in most browsers.\n+     * But removing it would mean breaking code that was able to run in\n+     * PhantomJS 1.x, so this must be kept for backward compatibility.\n+     *\u002F\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function polyfillBind (fn, ctx) {\n+        function boundFn (a) {\n+            var l = arguments.length;\n+            return l\n+                ? l > 1\n+                    ? fn.apply(ctx, arguments)\n+                    : fn.call(ctx, a)\n+                : fn.call(ctx)\n+        }\n+\n+        boundFn._length = fn.length;\n+        return boundFn\n+    }\n+\n+    function nativeBind (fn, ctx) {\n+        return fn.bind(ctx)\n+    }\n+\n+    var bind = Function.prototype.bind\n+        ? nativeBind\n+        : polyfillBind;\n+\n+    \u002F**\n+     * Convert an Array-like object to a real Array.\n+     *\u002F\n+    function toArray (list, start) {\n+        start = start || 0;\n+        var i = list.length - start;\n+        var ret = new Array(i);\n+        while (i--) {\n+            ret[i] = list[i + start];\n+        }\n+        return ret\n+    }\n+\n+    \u002F**\n+     * Mix properties into target object.\n+     *\u002F\n+    function extend (to, _from) {\n+        for (var key in _from) {\n+            to[key] = _from[key];\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Merge an Array of Objects into a single Object.\n+     *\u002F\n+    function toObject (arr) {\n+        var res = {};\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (arr[i]) {\n+                extend(res, arr[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Perform no operation.\n+     * Stubbing args to make Flow happy without leaving useless transpiled code\n+     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\n+     *\u002F\n+    function noop (a, b, c) {}\n+\n+    \u002F**\n+     * Always return false.\n+     *\u002F\n+    var no = function (a, b, c) { return false; };\n+\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Return the same value.\n+     *\u002F\n+    var identity = function (_) { return _; };\n+\n+    \u002F**\n+     * Generate a string containing static keys from compiler modules.\n+     *\u002F\n+    function genStaticKeys (modules) {\n+        return modules.reduce(function (keys, m) {\n+            return keys.concat(m.staticKeys || [])\n+        }, []).join(',')\n+    }\n+\n+    \u002F**\n+     * Check if two values are loosely equal - that is,\n+     * if they are plain objects, do they have the same shape?\n+     *\u002F\n+    function looseEqual (a, b) {\n+        if (a === b) { return true }\n+        var isObjectA = isObject(a);\n+        var isObjectB = isObject(b);\n+        if (isObjectA && isObjectB) {\n+            try {\n+                var isArrayA = Array.isArray(a);\n+                var isArrayB = Array.isArray(b);\n+                if (isArrayA && isArrayB) {\n+                    return a.length === b.length && a.every(function (e, i) {\n+                            return looseEqual(e, b[i])\n+                        })\n+                } else if (a instanceof Date && b instanceof Date) {\n+                    return a.getTime() === b.getTime()\n+                } else if (!isArrayA && !isArrayB) {\n+                    var keysA = Object.keys(a);\n+                    var keysB = Object.keys(b);\n+                    return keysA.length === keysB.length && keysA.every(function (key) {\n+                            return looseEqual(a[key], b[key])\n+                        })\n+                } else {\n+                  \u002F* istanbul ignore next *\u002F\n+                    return false\n+                }\n+            } catch (e) {\n+              \u002F* istanbul ignore next *\u002F\n+                return false\n+            }\n+        } else if (!isObjectA && !isObjectB) {\n+            return String(a) === String(b)\n+        } else {\n+            return false\n+        }\n+    }\n+\n+    \u002F**\n+     * Return the first index at which a loosely equal value can be\n+     * found in the array (if value is a plain object, the array must\n+     * contain an object of the same shape), or -1 if it is not present.\n+     *\u002F\n+    function looseIndexOf (arr, val) {\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (looseEqual(arr[i], val)) { return i }\n+        }\n+        return -1\n+    }\n+\n+    \u002F**\n+     * Ensure a function is called only once.\n+     *\u002F\n+    function once (fn) {\n+        var called = false;\n+        return function () {\n+            if (!called) {\n+                called = true;\n+                fn.apply(this, arguments);\n+            }\n+        }\n+    }\n+\n+    var SSR_ATTR = 'data-server-rendered';\n+\n+    var ASSET_TYPES = [\n+        'component',\n+        'directive',\n+        'filter'\n+    ];\n+\n+    var LIFECYCLE_HOOKS = [\n+        'beforeCreate',\n+        'created',\n+        'beforeMount',\n+        'mounted',\n+        'beforeUpdate',\n+        'updated',\n+        'beforeDestroy',\n+        'destroyed',\n+        'activated',\n+        'deactivated',\n+        'errorCaptured',\n+        'serverPrefetch'\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var config = ({\n+        \u002F**\n+         * Option merge strategies (used in core\u002Futil\u002Foptions)\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        optionMergeStrategies: Object.create(null),\n+\n+        \u002F**\n+         * Whether to suppress warnings.\n+         *\u002F\n+        silent: false,\n+\n+        \u002F**\n+         * Show production mode tip message on boot?\n+         *\u002F\n+        productionTip: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to enable devtools\n+         *\u002F\n+        devtools: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to record perf\n+         *\u002F\n+        performance: false,\n+\n+        \u002F**\n+         * Error handler for watcher errors\n+         *\u002F\n+        errorHandler: null,\n+\n+        \u002F**\n+         * Warn handler for watcher warns\n+         *\u002F\n+        warnHandler: null,\n+\n+        \u002F**\n+         * Ignore certain custom elements\n+         *\u002F\n+        ignoredElements: [],\n+\n+        \u002F**\n+         * Custom user key aliases for v-on\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        keyCodes: Object.create(null),\n+\n+        \u002F**\n+         * Check if a tag is reserved so that it cannot be registered as a\n+         * component. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedTag: no,\n+\n+        \u002F**\n+         * Check if an attribute is reserved so that it cannot be used as a component\n+         * prop. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedAttr: no,\n+\n+        \u002F**\n+         * Check if a tag is an unknown element.\n+         * Platform-dependent.\n+         *\u002F\n+        isUnknownElement: no,\n+\n+        \u002F**\n+         * Get the namespace of an element\n+         *\u002F\n+        getTagNamespace: noop,\n+\n+        \u002F**\n+         * Parse the real tag name for the specific platform.\n+         *\u002F\n+        parsePlatformTagName: identity,\n+\n+        \u002F**\n+         * Check if an attribute must be bound using property, e.g. value\n+         * Platform-dependent.\n+         *\u002F\n+        mustUseProp: no,\n+\n+        \u002F**\n+         * Perform updates asynchronously. Intended to be used by Vue Test Utils\n+         * This will significantly reduce performance if set to false.\n+         *\u002F\n+        async: true,\n+\n+        \u002F**\n+         * Exposed for legacy reasons\n+         *\u002F\n+        _lifecycleHooks: LIFECYCLE_HOOKS\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * unicode letters used for parsing html tags, component names and property paths.\n+     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\n+     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n+     *\u002F\n+    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\n+\n+    \u002F**\n+     * Check if a string starts with $ or _\n+     *\u002F\n+    function isReserved (str) {\n+        var c = (str + '').charCodeAt(0);\n+        return c === 0x24 || c === 0x5F\n+    }\n+\n+    \u002F**\n+     * Define a property.\n+     *\u002F\n+    function def (obj, key, val, enumerable) {\n+        Object.defineProperty(obj, key, {\n+            value: val,\n+            enumerable: !!enumerable,\n+            writable: true,\n+            configurable: true\n+        });\n+    }\n+\n+    \u002F**\n+     * Parse simple path.\n+     *\u002F\n+    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\n+    function parsePath (path) {\n+        if (bailRE.test(path)) {\n+            return\n+        }\n+        var segments = path.split('.');\n+        return function (obj) {\n+            for (var i = 0; i \u003C segments.length; i++) {\n+                if (!obj) { return }\n+                obj = obj[segments[i]];\n+            }\n+            return obj\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F can we use __proto__?\n+    var hasProto = '__proto__' in {};\n+\n+    \u002F\u002F Browser environment sniffing\n+    var inBrowser = typeof window !== 'undefined';\n+    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\n+    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\n+    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n+    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\n+    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n+    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\n+    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\n+    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\n+    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\n+    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\n+    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\n+\n+    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\n+    var nativeWatch = ({}).watch;\n+\n+    var supportsPassive = false;\n+    if (inBrowser) {\n+        try {\n+            var opts = {};\n+            Object.defineProperty(opts, 'passive', ({\n+                get: function get () {\n+                  \u002F* istanbul ignore next *\u002F\n+                    supportsPassive = true;\n+                }\n+            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\n+            window.addEventListener('test-passive', null, opts);\n+        } catch (e) {}\n+    }\n+\n+    \u002F\u002F this needs to be lazy-evaled because vue may be required before\n+    \u002F\u002F vue-server-renderer can set VUE_ENV\n+    var _isServer;\n+    var isServerRendering = function () {\n+        if (_isServer === undefined) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n+                \u002F\u002F detect presence of vue-server-renderer and avoid\n+                \u002F\u002F Webpack shimming the process\n+                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n+            } else {\n+                _isServer = false;\n+            }\n+        }\n+        return _isServer\n+    };\n+\n+    \u002F\u002F detect devtools\n+    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function isNative (Ctor) {\n+        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\n+    }\n+\n+    var hasSymbol =\n+        typeof Symbol !== 'undefined' && isNative(Symbol) &&\n+        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n+\n+    var _Set;\n+  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\n+    if (typeof Set !== 'undefined' && isNative(Set)) {\n+        \u002F\u002F use native Set when available.\n+        _Set = Set;\n+    } else {\n+        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\n+        _Set = \u002F*@__PURE__*\u002F(function () {\n+            function Set () {\n+                this.set = Object.create(null);\n+            }\n+            Set.prototype.has = function has (key) {\n+                return this.set[key] === true\n+            };\n+            Set.prototype.add = function add (key) {\n+                this.set[key] = true;\n+            };\n+            Set.prototype.clear = function clear () {\n+                this.set = Object.create(null);\n+            };\n+\n+            return Set;\n+        }());\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn = noop;\n+    var tip = noop;\n+    var generateComponentTrace = (noop); \u002F\u002F work around flow check\n+    var formatComponentName = (noop);\n+\n+    {\n+        var hasConsole = typeof console !== 'undefined';\n+        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\n+        var classify = function (str) { return str\n+            .replace(classifyRE, function (c) { return c.toUpperCase(); })\n+            .replace(\u002F[-_]\u002Fg, ''); };\n+\n+        warn = function (msg, vm) {\n+            var trace = vm ? generateComponentTrace(vm) : '';\n+\n+            if (config.warnHandler) {\n+                config.warnHandler.call(null, msg, vm, trace);\n+            } else if (hasConsole && (!config.silent)) {\n+                console.error((\"[Vue warn]: \" + msg + trace));\n+            }\n+        };\n+\n+        tip = function (msg, vm) {\n+            if (hasConsole && (!config.silent)) {\n+                console.warn(\"[Vue tip]: \" + msg + (\n+                        vm ? generateComponentTrace(vm) : ''\n+                    ));\n+            }\n+        };\n+\n+        formatComponentName = function (vm, includeFile) {\n+            if (vm.$root === vm) {\n+                return '\u003CRoot>'\n+            }\n+            var options = typeof vm === 'function' && vm.cid != null\n+                ? vm.options\n+                : vm._isVue\n+                    ? vm.$options || vm.constructor.options\n+                    : vm;\n+            var name = options.name || options._componentTag;\n+            var file = options.__file;\n+            if (!name && file) {\n+                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\n+                name = match && match[1];\n+            }\n+\n+            return (\n+                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\n+                (file && includeFile !== false ? (\" at \" + file) : '')\n+            )\n+        };\n+\n+        var repeat = function (str, n) {\n+            var res = '';\n+            while (n) {\n+                if (n % 2 === 1) { res += str; }\n+                if (n > 1) { str += str; }\n+                n >>= 1;\n+            }\n+            return res\n+        };\n+\n+        generateComponentTrace = function (vm) {\n+            if (vm._isVue && vm.$parent) {\n+                var tree = [];\n+                var currentRecursiveSequence = 0;\n+                while (vm) {\n+                    if (tree.length > 0) {\n+                        var last = tree[tree.length - 1];\n+                        if (last.constructor === vm.constructor) {\n+                            currentRecursiveSequence++;\n+                            vm = vm.$parent;\n+                            continue\n+                        } else if (currentRecursiveSequence > 0) {\n+                            tree[tree.length - 1] = [last, currentRecursiveSequence];\n+                            currentRecursiveSequence = 0;\n+                        }\n+                    }\n+                    tree.push(vm);\n+                    vm = vm.$parent;\n+                }\n+                return '\\n\\nfound in\\n\\n' + tree\n+                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n+                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n+                            : formatComponentName(vm))); })\n+                        .join('\\n')\n+            } else {\n+                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid = 0;\n+\n+    \u002F**\n+     * A dep is an observable that can have multiple\n+     * directives subscribing to it.\n+     *\u002F\n+    var Dep = function Dep () {\n+        this.id = uid++;\n+        this.subs = [];\n+    };\n+\n+    Dep.prototype.addSub = function addSub (sub) {\n+        this.subs.push(sub);\n+    };\n+\n+    Dep.prototype.removeSub = function removeSub (sub) {\n+        remove(this.subs, sub);\n+    };\n+\n+    Dep.prototype.depend = function depend () {\n+        if (Dep.target) {\n+            Dep.target.addDep(this);\n+        }\n+    };\n+\n+    Dep.prototype.notify = function notify () {\n+        \u002F\u002F stabilize the subscriber list first\n+        var subs = this.subs.slice();\n+        if (!config.async) {\n+            \u002F\u002F subs aren't sorted in scheduler if not running async\n+            \u002F\u002F we need to sort them now to make sure they fire in correct\n+            \u002F\u002F order\n+            subs.sort(function (a, b) { return a.id - b.id; });\n+        }\n+        for (var i = 0, l = subs.length; i \u003C l; i++) {\n+            subs[i].update();\n+        }\n+    };\n+\n+    \u002F\u002F The current target watcher being evaluated.\n+    \u002F\u002F This is globally unique because only one watcher\n+    \u002F\u002F can be evaluated at a time.\n+    Dep.target = null;\n+    var targetStack = [];\n+\n+    function pushTarget (target) {\n+        targetStack.push(target);\n+        Dep.target = target;\n+    }\n+\n+    function popTarget () {\n+        targetStack.pop();\n+        Dep.target = targetStack[targetStack.length - 1];\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var VNode = function VNode (\n+        tag,\n+        data,\n+        children,\n+        text,\n+        elm,\n+        context,\n+        componentOptions,\n+        asyncFactory\n+    ) {\n+        this.tag = tag;\n+        this.data = data;\n+        this.children = children;\n+        this.text = text;\n+        this.elm = elm;\n+        this.ns = undefined;\n+        this.context = context;\n+        this.fnContext = undefined;\n+        this.fnOptions = undefined;\n+        this.fnScopeId = undefined;\n+        this.key = data && data.key;\n+        this.componentOptions = componentOptions;\n+        this.componentInstance = undefined;\n+        this.parent = undefined;\n+        this.raw = false;\n+        this.isStatic = false;\n+        this.isRootInsert = true;\n+        this.isComment = false;\n+        this.isCloned = false;\n+        this.isOnce = false;\n+        this.asyncFactory = asyncFactory;\n+        this.asyncMeta = undefined;\n+        this.isAsyncPlaceholder = false;\n+    };\n+\n+    var prototypeAccessors = { child: { configurable: true } };\n+\n+    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\n+  \u002F* istanbul ignore next *\u002F\n+    prototypeAccessors.child.get = function () {\n+        return this.componentInstance\n+    };\n+\n+    Object.defineProperties( VNode.prototype, prototypeAccessors );\n+\n+    var createEmptyVNode = function (text) {\n+        if ( text === void 0 ) text = '';\n+\n+        var node = new VNode();\n+        node.text = text;\n+        node.isComment = true;\n+        return node\n+    };\n+\n+    function createTextVNode (val) {\n+        return new VNode(undefined, undefined, undefined, String(val))\n+    }\n+\n+    \u002F\u002F optimized shallow clone\n+    \u002F\u002F used for static nodes and slot nodes because they may be reused across\n+    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\n+    \u002F\u002F on their elm reference.\n+    function cloneVNode (vnode) {\n+        var cloned = new VNode(\n+            vnode.tag,\n+            vnode.data,\n+            \u002F\u002F #7975\n+            \u002F\u002F clone children array to avoid mutating original in case of cloning\n+            \u002F\u002F a child.\n+            vnode.children && vnode.children.slice(),\n+            vnode.text,\n+            vnode.elm,\n+            vnode.context,\n+            vnode.componentOptions,\n+            vnode.asyncFactory\n+        );\n+        cloned.ns = vnode.ns;\n+        cloned.isStatic = vnode.isStatic;\n+        cloned.key = vnode.key;\n+        cloned.isComment = vnode.isComment;\n+        cloned.fnContext = vnode.fnContext;\n+        cloned.fnOptions = vnode.fnOptions;\n+        cloned.fnScopeId = vnode.fnScopeId;\n+        cloned.asyncMeta = vnode.asyncMeta;\n+        cloned.isCloned = true;\n+        return cloned\n+    }\n+\n+  \u002F*\n+   * not type checking this file because flow doesn't play well with\n+   * dynamically accessing methods on Array prototype\n+   *\u002F\n+\n+    var arrayProto = Array.prototype;\n+    var arrayMethods = Object.create(arrayProto);\n+\n+    var methodsToPatch = [\n+        'push',\n+        'pop',\n+        'shift',\n+        'unshift',\n+        'splice',\n+        'sort',\n+        'reverse'\n+    ];\n+\n+    \u002F**\n+     * Intercept mutating methods and emit events\n+     *\u002F\n+    methodsToPatch.forEach(function (method) {\n+        \u002F\u002F cache original method\n+        var original = arrayProto[method];\n+        def(arrayMethods, method, function mutator () {\n+            var args = [], len = arguments.length;\n+            while ( len-- ) args[ len ] = arguments[ len ];\n+\n+            var result = original.apply(this, args);\n+            var ob = this.__ob__;\n+            var inserted;\n+            switch (method) {\n+                case 'push':\n+                case 'unshift':\n+                    inserted = args;\n+                    break\n+                case 'splice':\n+                    inserted = args.slice(2);\n+                    break\n+            }\n+            if (inserted) { ob.observeArray(inserted); }\n+            \u002F\u002F notify change\n+            ob.dep.notify();\n+            return result\n+        });\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n+\n+    \u002F**\n+     * In some cases we may want to disable observation inside a component's\n+     * update computation.\n+     *\u002F\n+    var shouldObserve = true;\n+\n+    function toggleObserving (value) {\n+        shouldObserve = value;\n+    }\n+\n+    \u002F**\n+     * Observer class that is attached to each observed\n+     * object. Once attached, the observer converts the target\n+     * object's property keys into getter\u002Fsetters that\n+     * collect dependencies and dispatch updates.\n+     *\u002F\n+    var Observer = function Observer (value) {\n+        this.value = value;\n+        this.dep = new Dep();\n+        this.vmCount = 0;\n+        def(value, '__ob__', this);\n+        if (Array.isArray(value)) {\n+            if (hasProto) {\n+                protoAugment(value, arrayMethods);\n+            } else {\n+                copyAugment(value, arrayMethods, arrayKeys);\n+            }\n+            this.observeArray(value);\n+        } else {\n+            this.walk(value);\n+        }\n+    };\n+\n+    \u002F**\n+     * Walk through all properties and convert them into\n+     * getter\u002Fsetters. This method should only be called when\n+     * value type is Object.\n+     *\u002F\n+    Observer.prototype.walk = function walk (obj) {\n+        var keys = Object.keys(obj);\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            defineReactive$$1(obj, keys[i]);\n+        }\n+    };\n+\n+    \u002F**\n+     * Observe a list of Array items.\n+     *\u002F\n+    Observer.prototype.observeArray = function observeArray (items) {\n+        for (var i = 0, l = items.length; i \u003C l; i++) {\n+            observe(items[i]);\n+        }\n+    };\n+\n+    \u002F\u002F helpers\n+\n+    \u002F**\n+     * Augment a target Object or Array by intercepting\n+     * the prototype chain using __proto__\n+     *\u002F\n+    function protoAugment (target, src) {\n+      \u002F* eslint-disable no-proto *\u002F\n+        target.__proto__ = src;\n+      \u002F* eslint-enable no-proto *\u002F\n+    }\n+\n+    \u002F**\n+     * Augment a target Object or Array by defining\n+     * hidden properties.\n+     *\u002F\n+  \u002F* istanbul ignore next *\u002F\n+    function copyAugment (target, src, keys) {\n+        for (var i = 0, l = keys.length; i \u003C l; i++) {\n+            var key = keys[i];\n+            def(target, key, src[key]);\n+        }\n+    }\n+\n+    \u002F**\n+     * Attempt to create an observer instance for a value,\n+     * returns the new observer if successfully observed,\n+     * or the existing observer if the value already has one.\n+     *\u002F\n+    function observe (value, asRootData) {\n+        if (!isObject(value) || value instanceof VNode) {\n+            return\n+        }\n+        var ob;\n+        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n+            ob = value.__ob__;\n+        } else if (\n+            shouldObserve &&\n+            !isServerRendering() &&\n+            (Array.isArray(value) || isPlainObject(value)) &&\n+            Object.isExtensible(value) &&\n+            !value._isVue\n+        ) {\n+            ob = new Observer(value);\n+        }\n+        if (asRootData && ob) {\n+            ob.vmCount++;\n+        }\n+        return ob\n+    }\n+\n+    \u002F**\n+     * Define a reactive property on an Object.\n+     *\u002F\n+    function defineReactive$$1 (\n+        obj,\n+        key,\n+        val,\n+        customSetter,\n+        shallow\n+    ) {\n+        var dep = new Dep();\n+\n+        var property = Object.getOwnPropertyDescriptor(obj, key);\n+        if (property && property.configurable === false) {\n+            return\n+        }\n+\n+        \u002F\u002F cater for pre-defined getter\u002Fsetters\n+        var getter = property && property.get;\n+        var setter = property && property.set;\n+        if ((!getter || setter) && arguments.length === 2) {\n+            val = obj[key];\n+        }\n+\n+        var childOb = !shallow && observe(val);\n+        Object.defineProperty(obj, key, {\n+            enumerable: true,\n+            configurable: true,\n+            get: function reactiveGetter () {\n+                var value = getter ? getter.call(obj) : val;\n+                if (Dep.target) {\n+                    dep.depend();\n+                    if (childOb) {\n+                        childOb.dep.depend();\n+                        if (Array.isArray(value)) {\n+                            dependArray(value);\n+                        }\n+                    }\n+                }\n+                return value\n+            },\n+            set: function reactiveSetter (newVal) {\n+                var value = getter ? getter.call(obj) : val;\n+              \u002F* eslint-disable no-self-compare *\u002F\n+                if (newVal === value || (newVal !== newVal && value !== value)) {\n+                    return\n+                }\n+              \u002F* eslint-enable no-self-compare *\u002F\n+                if (customSetter) {\n+                    customSetter();\n+                }\n+                \u002F\u002F #7981: for accessor properties without setter\n+                if (getter && !setter) { return }\n+                if (setter) {\n+                    setter.call(obj, newVal);\n+                } else {\n+                    val = newVal;\n+                }\n+                childOb = !shallow && observe(newVal);\n+                dep.notify();\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * Set a property on an object. Adds the new property and\n+     * triggers change notification if the property doesn't\n+     * already exist.\n+     *\u002F\n+    function set (target, key, val) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.length = Math.max(target.length, key);\n+            target.splice(key, 1, val);\n+            return val\n+        }\n+        if (key in target && !(key in Object.prototype)) {\n+            target[key] = val;\n+            return val\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid adding reactive properties to a Vue instance or its root $data ' +\n+                'at runtime - declare it upfront in the data option.'\n+            );\n+            return val\n+        }\n+        if (!ob) {\n+            target[key] = val;\n+            return val\n+        }\n+        defineReactive$$1(ob.value, key, val);\n+        ob.dep.notify();\n+        return val\n+    }\n+\n+    \u002F**\n+     * Delete a property and trigger change if necessary.\n+     *\u002F\n+    function del (target, key) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.splice(key, 1);\n+            return\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid deleting properties on a Vue instance or its root $data ' +\n+                '- just set it to null.'\n+            );\n+            return\n+        }\n+        if (!hasOwn(target, key)) {\n+            return\n+        }\n+        delete target[key];\n+        if (!ob) {\n+            return\n+        }\n+        ob.dep.notify();\n+    }\n+\n+    \u002F**\n+     * Collect dependencies on array elements when the array is touched, since\n+     * we cannot intercept array element access like property getters.\n+     *\u002F\n+    function dependArray (value) {\n+        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\n+            e = value[i];\n+            e && e.__ob__ && e.__ob__.dep.depend();\n+            if (Array.isArray(e)) {\n+                dependArray(e);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Option overwriting strategies are functions that handle\n+     * how to merge a parent option value and a child option\n+     * value into the final value.\n+     *\u002F\n+    var strats = config.optionMergeStrategies;\n+\n+    \u002F**\n+     * Options with restrictions\n+     *\u002F\n+    {\n+        strats.el = strats.propsData = function (parent, child, vm, key) {\n+            if (!vm) {\n+                warn(\n+                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n+                    'creation with the `new` keyword.'\n+                );\n+            }\n+            return defaultStrat(parent, child)\n+        };\n+    }\n+\n+    \u002F**\n+     * Helper that recursively merges two data objects together.\n+     *\u002F\n+    function mergeData (to, from) {\n+        if (!from) { return to }\n+        var key, toVal, fromVal;\n+\n+        var keys = hasSymbol\n+            ? Reflect.ownKeys(from)\n+            : Object.keys(from);\n+\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            key = keys[i];\n+            \u002F\u002F in case the object is already observed...\n+            if (key === '__ob__') { continue }\n+            toVal = to[key];\n+            fromVal = from[key];\n+            if (!hasOwn(to, key)) {\n+                set(to, key, fromVal);\n+            } else if (\n+                toVal !== fromVal &&\n+                isPlainObject(toVal) &&\n+                isPlainObject(fromVal)\n+            ) {\n+                mergeData(toVal, fromVal);\n+            }\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Data\n+     *\u002F\n+    function mergeDataOrFn (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            \u002F\u002F in a Vue.extend merge, both should be functions\n+            if (!childVal) {\n+                return parentVal\n+            }\n+            if (!parentVal) {\n+                return childVal\n+            }\n+            \u002F\u002F when parentVal & childVal are both present,\n+            \u002F\u002F we need to return a function that returns the\n+            \u002F\u002F merged result of both functions... no need to\n+            \u002F\u002F check if parentVal is a function here because\n+            \u002F\u002F it has to be a function to pass previous merges.\n+            return function mergedDataFn () {\n+                return mergeData(\n+                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n+                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n+                )\n+            }\n+        } else {\n+            return function mergedInstanceDataFn () {\n+                \u002F\u002F instance merge\n+                var instanceData = typeof childVal === 'function'\n+                    ? childVal.call(vm, vm)\n+                    : childVal;\n+                var defaultData = typeof parentVal === 'function'\n+                    ? parentVal.call(vm, vm)\n+                    : parentVal;\n+                if (instanceData) {\n+                    return mergeData(instanceData, defaultData)\n+                } else {\n+                    return defaultData\n+                }\n+            }\n+        }\n+    }\n+\n+    strats.data = function (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            if (childVal && typeof childVal !== 'function') {\n+                warn(\n+                    'The \"data\" option should be a function ' +\n+                    'that returns a per-instance value in component ' +\n+                    'definitions.',\n+                    vm\n+                );\n+\n+                return parentVal\n+            }\n+            return mergeDataOrFn(parentVal, childVal)\n+        }\n+\n+        return mergeDataOrFn(parentVal, childVal, vm)\n+    };\n+\n+    \u002F**\n+     * Hooks and props are merged as arrays.\n+     *\u002F\n+    function mergeHook (\n+        parentVal,\n+        childVal\n+    ) {\n+        var res = childVal\n+            ? parentVal\n+                ? parentVal.concat(childVal)\n+                : Array.isArray(childVal)\n+                    ? childVal\n+                    : [childVal]\n+            : parentVal;\n+        return res\n+            ? dedupeHooks(res)\n+            : res\n+    }\n+\n+    function dedupeHooks (hooks) {\n+        var res = [];\n+        for (var i = 0; i \u003C hooks.length; i++) {\n+            if (res.indexOf(hooks[i]) === -1) {\n+                res.push(hooks[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+    LIFECYCLE_HOOKS.forEach(function (hook) {\n+        strats[hook] = mergeHook;\n+    });\n+\n+    \u002F**\n+     * Assets\n+     *\n+     * When a vm is present (instance creation), we need to do\n+     * a three-way merge between constructor options, instance\n+     * options and parent options.\n+     *\u002F\n+    function mergeAssets (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        var res = Object.create(parentVal || null);\n+        if (childVal) {\n+            assertObjectType(key, childVal, vm);\n+            return extend(res, childVal)\n+        } else {\n+            return res\n+        }\n+    }\n+\n+    ASSET_TYPES.forEach(function (type) {\n+        strats[type + 's'] = mergeAssets;\n+    });\n+\n+    \u002F**\n+     * Watchers.\n+     *\n+     * Watchers hashes should not overwrite one\n+     * another, so we merge them as arrays.\n+     *\u002F\n+    strats.watch = function (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        \u002F\u002F work around Firefox's Object.prototype.watch...\n+        if (parentVal === nativeWatch) { parentVal = undefined; }\n+        if (childVal === nativeWatch) { childVal = undefined; }\n+      \u002F* istanbul ignore if *\u002F\n+        if (!childVal) { return Object.create(parentVal || null) }\n+        {\n+            assertObjectType(key, childVal, vm);\n+        }\n+        if (!parentVal) { return childVal }\n+        var ret = {};\n+        extend(ret, parentVal);\n+        for (var key$1 in childVal) {\n+            var parent = ret[key$1];\n+            var child = childVal[key$1];\n+            if (parent && !Array.isArray(parent)) {\n+                parent = [parent];\n+            }\n+            ret[key$1] = parent\n+                ? parent.concat(child)\n+                : Array.isArray(child) ? child : [child];\n+        }\n+        return ret\n+    };\n+\n+    \u002F**\n+     * Other object hashes.\n+     *\u002F\n+    strats.props =\n+        strats.methods =\n+            strats.inject =\n+                strats.computed = function (\n+                    parentVal,\n+                    childVal,\n+                    vm,\n+                    key\n+                ) {\n+                    if (childVal && \"development\" !== 'production') {\n+                        assertObjectType(key, childVal, vm);\n+                    }\n+                    if (!parentVal) { return childVal }\n+                    var ret = Object.create(null);\n+                    extend(ret, parentVal);\n+                    if (childVal) { extend(ret, childVal); }\n+                    return ret\n+                };\n+    strats.provide = mergeDataOrFn;\n+\n+    \u002F**\n+     * Default strategy.\n+     *\u002F\n+    var defaultStrat = function (parentVal, childVal) {\n+        return childVal === undefined\n+            ? parentVal\n+            : childVal\n+    };\n+\n+    \u002F**\n+     * Validate component names\n+     *\u002F\n+    function checkComponents (options) {\n+        for (var key in options.components) {\n+            validateComponentName(key);\n+        }\n+    }\n+\n+    function validateComponentName (name) {\n+        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n+            warn(\n+                'Invalid component name: \"' + name + '\". Component names ' +\n+                'should conform to valid custom element name in html5 specification.'\n+            );\n+        }\n+        if (isBuiltInTag(name) || config.isReservedTag(name)) {\n+            warn(\n+                'Do not use built-in or reserved HTML elements as component ' +\n+                'id: ' + name\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Ensure all props option syntax are normalized into the\n+     * Object-based format.\n+     *\u002F\n+    function normalizeProps (options, vm) {\n+        var props = options.props;\n+        if (!props) { return }\n+        var res = {};\n+        var i, val, name;\n+        if (Array.isArray(props)) {\n+            i = props.length;\n+            while (i--) {\n+                val = props[i];\n+                if (typeof val === 'string') {\n+                    name = camelize(val);\n+                    res[name] = { type: null };\n+                } else {\n+                    warn('props must be strings when using array syntax.');\n+                }\n+            }\n+        } else if (isPlainObject(props)) {\n+            for (var key in props) {\n+                val = props[key];\n+                name = camelize(key);\n+                res[name] = isPlainObject(val)\n+                    ? val\n+                    : { type: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(props)) + \".\",\n+                vm\n+            );\n+        }\n+        options.props = res;\n+    }\n+\n+    \u002F**\n+     * Normalize all injections into Object-based format\n+     *\u002F\n+    function normalizeInject (options, vm) {\n+        var inject = options.inject;\n+        if (!inject) { return }\n+        var normalized = options.inject = {};\n+        if (Array.isArray(inject)) {\n+            for (var i = 0; i \u003C inject.length; i++) {\n+                normalized[inject[i]] = { from: inject[i] };\n+            }\n+        } else if (isPlainObject(inject)) {\n+            for (var key in inject) {\n+                var val = inject[key];\n+                normalized[key] = isPlainObject(val)\n+                    ? extend({ from: key }, val)\n+                    : { from: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(inject)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Normalize raw function directives into object format.\n+     *\u002F\n+    function normalizeDirectives (options) {\n+        var dirs = options.directives;\n+        if (dirs) {\n+            for (var key in dirs) {\n+                var def$$1 = dirs[key];\n+                if (typeof def$$1 === 'function') {\n+                    dirs[key] = { bind: def$$1, update: def$$1 };\n+                }\n+            }\n+        }\n+    }\n+\n+    function assertObjectType (name, value, vm) {\n+        if (!isPlainObject(value)) {\n+            warn(\n+                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n+                \"but got \" + (toRawType(value)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Merge two option objects into a new one.\n+     * Core utility used in both instantiation and inheritance.\n+     *\u002F\n+    function mergeOptions (\n+        parent,\n+        child,\n+        vm\n+    ) {\n+        {\n+            checkComponents(child);\n+        }\n+\n+        if (typeof child === 'function') {\n+            child = child.options;\n+        }\n+\n+        normalizeProps(child, vm);\n+        normalizeInject(child, vm);\n+        normalizeDirectives(child);\n+\n+        \u002F\u002F Apply extends and mixins on the child options,\n+        \u002F\u002F but only if it is a raw options object that isn't\n+        \u002F\u002F the result of another mergeOptions call.\n+        \u002F\u002F Only merged options has the _base property.\n+        if (!child._base) {\n+            if (child.extends) {\n+                parent = mergeOptions(parent, child.extends, vm);\n+            }\n+            if (child.mixins) {\n+                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\n+                    parent = mergeOptions(parent, child.mixins[i], vm);\n+                }\n+            }\n+        }\n+\n+        var options = {};\n+        var key;\n+        for (key in parent) {\n+            mergeField(key);\n+        }\n+        for (key in child) {\n+            if (!hasOwn(parent, key)) {\n+                mergeField(key);\n+            }\n+        }\n+        function mergeField (key) {\n+            var strat = strats[key] || defaultStrat;\n+            options[key] = strat(parent[key], child[key], vm, key);\n+        }\n+        return options\n+    }\n+\n+    \u002F**\n+     * Resolve an asset.\n+     * This function is used because child instances need access\n+     * to assets defined in its ancestor chain.\n+     *\u002F\n+    function resolveAsset (\n+        options,\n+        type,\n+        id,\n+        warnMissing\n+    ) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (typeof id !== 'string') {\n+            return\n+        }\n+        var assets = options[type];\n+        \u002F\u002F check local registration variations first\n+        if (hasOwn(assets, id)) { return assets[id] }\n+        var camelizedId = camelize(id);\n+        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n+        var PascalCaseId = capitalize(camelizedId);\n+        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n+        \u002F\u002F fallback to prototype chain\n+        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n+        if (warnMissing && !res) {\n+            warn(\n+                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n+                options\n+            );\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function validateProp (\n+        key,\n+        propOptions,\n+        propsData,\n+        vm\n+    ) {\n+        var prop = propOptions[key];\n+        var absent = !hasOwn(propsData, key);\n+        var value = propsData[key];\n+        \u002F\u002F boolean casting\n+        var booleanIndex = getTypeIndex(Boolean, prop.type);\n+        if (booleanIndex > -1) {\n+            if (absent && !hasOwn(prop, 'default')) {\n+                value = false;\n+            } else if (value === '' || value === hyphenate(key)) {\n+                \u002F\u002F only cast empty string \u002F same name to boolean if\n+                \u002F\u002F boolean has higher priority\n+                var stringIndex = getTypeIndex(String, prop.type);\n+                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\n+                    value = true;\n+                }\n+            }\n+        }\n+        \u002F\u002F check default value\n+        if (value === undefined) {\n+            value = getPropDefaultValue(vm, prop, key);\n+            \u002F\u002F since the default value is a fresh copy,\n+            \u002F\u002F make sure to observe it.\n+            var prevShouldObserve = shouldObserve;\n+            toggleObserving(true);\n+            observe(value);\n+            toggleObserving(prevShouldObserve);\n+        }\n+        {\n+            assertProp(prop, key, value, vm, absent);\n+        }\n+        return value\n+    }\n+\n+    \u002F**\n+     * Get the default value of a prop.\n+     *\u002F\n+    function getPropDefaultValue (vm, prop, key) {\n+        \u002F\u002F no default, return undefined\n+        if (!hasOwn(prop, 'default')) {\n+            return undefined\n+        }\n+        var def = prop.default;\n+        \u002F\u002F warn against non-factory defaults for Object & Array\n+        if (isObject(def)) {\n+            warn(\n+                'Invalid default value for prop \"' + key + '\": ' +\n+                'Props with type Object\u002FArray must use a factory function ' +\n+                'to return the default value.',\n+                vm\n+            );\n+        }\n+        \u002F\u002F the raw prop value was also undefined from previous render,\n+        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\n+        if (vm && vm.$options.propsData &&\n+            vm.$options.propsData[key] === undefined &&\n+            vm._props[key] !== undefined\n+        ) {\n+            return vm._props[key]\n+        }\n+        \u002F\u002F call factory function for non-Function types\n+        \u002F\u002F a value is Function if its prototype is function even across different execution context\n+        return typeof def === 'function' && getType(prop.type) !== 'Function'\n+            ? def.call(vm)\n+            : def\n+    }\n+\n+    \u002F**\n+     * Assert whether a prop is valid.\n+     *\u002F\n+    function assertProp (\n+        prop,\n+        name,\n+        value,\n+        vm,\n+        absent\n+    ) {\n+        if (prop.required && absent) {\n+            warn(\n+                'Missing required prop: \"' + name + '\"',\n+                vm\n+            );\n+            return\n+        }\n+        if (value == null && !prop.required) {\n+            return\n+        }\n+        var type = prop.type;\n+        var valid = !type || type === true;\n+        var expectedTypes = [];\n+        if (type) {\n+            if (!Array.isArray(type)) {\n+                type = [type];\n+            }\n+            for (var i = 0; i \u003C type.length && !valid; i++) {\n+                var assertedType = assertType(value, type[i]);\n+                expectedTypes.push(assertedType.expectedType || '');\n+                valid = assertedType.valid;\n+            }\n+        }\n+\n+        if (!valid) {\n+            warn(\n+                getInvalidTypeMessage(name, value, expectedTypes),\n+                vm\n+            );\n+            return\n+        }\n+        var validator = prop.validator;\n+        if (validator) {\n+            if (!validator(value)) {\n+                warn(\n+                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n+                    vm\n+                );\n+            }\n+        }\n+    }\n+\n+    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\n+\n+    function assertType (value, type) {\n+        var valid;\n+        var expectedType = getType(type);\n+        if (simpleCheckRE.test(expectedType)) {\n+            var t = typeof value;\n+            valid = t === expectedType.toLowerCase();\n+            \u002F\u002F for primitive wrapper objects\n+            if (!valid && t === 'object') {\n+                valid = value instanceof type;\n+            }\n+        } else if (expectedType === 'Object') {\n+            valid = isPlainObject(value);\n+        } else if (expectedType === 'Array') {\n+            valid = Array.isArray(value);\n+        } else {\n+            valid = value instanceof type;\n+        }\n+        return {\n+            valid: valid,\n+            expectedType: expectedType\n+        }\n+    }\n+\n+    \u002F**\n+     * Use function string name to check built-in types,\n+     * because a simple equality check will fail when running\n+     * across different vms \u002F iframes.\n+     *\u002F\n+    function getType (fn) {\n+        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\n+        return match ? match[1] : ''\n+    }\n+\n+    function isSameType (a, b) {\n+        return getType(a) === getType(b)\n+    }\n+\n+    function getTypeIndex (type, expectedTypes) {\n+        if (!Array.isArray(expectedTypes)) {\n+            return isSameType(expectedTypes, type) ? 0 : -1\n+        }\n+        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\n+            if (isSameType(expectedTypes[i], type)) {\n+                return i\n+            }\n+        }\n+        return -1\n+    }\n+\n+    function getInvalidTypeMessage (name, value, expectedTypes) {\n+        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n+            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n+        var expectedType = expectedTypes[0];\n+        var receivedType = toRawType(value);\n+        var expectedValue = styleValue(value, expectedType);\n+        var receivedValue = styleValue(value, receivedType);\n+        \u002F\u002F check if we need to specify expected value\n+        if (expectedTypes.length === 1 &&\n+            isExplicable(expectedType) &&\n+            !isBoolean(expectedType, receivedType)) {\n+            message += \" with value \" + expectedValue;\n+        }\n+        message += \", got \" + receivedType + \" \";\n+        \u002F\u002F check if we need to specify received value\n+        if (isExplicable(receivedType)) {\n+            message += \"with value \" + receivedValue + \".\";\n+        }\n+        return message\n+    }\n+\n+    function styleValue (value, type) {\n+        if (type === 'String') {\n+            return (\"\\\"\" + value + \"\\\"\")\n+        } else if (type === 'Number') {\n+            return (\"\" + (Number(value)))\n+        } else {\n+            return (\"\" + value)\n+        }\n+    }\n+\n+    function isExplicable (value) {\n+        var explicitTypes = ['string', 'number', 'boolean'];\n+        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n+    }\n+\n+    function isBoolean () {\n+        var args = [], len = arguments.length;\n+        while ( len-- ) args[ len ] = arguments[ len ];\n+\n+        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function handleError (err, vm, info) {\n+        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n+        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\n+        pushTarget();\n+        try {\n+            if (vm) {\n+                var cur = vm;\n+                while ((cur = cur.$parent)) {\n+                    var hooks = cur.$options.errorCaptured;\n+                    if (hooks) {\n+                        for (var i = 0; i \u003C hooks.length; i++) {\n+                            try {\n+                                var capture = hooks[i].call(cur, err, vm, info) === false;\n+                                if (capture) { return }\n+                            } catch (e) {\n+                                globalHandleError(e, cur, 'errorCaptured hook');\n+                            }\n+                        }\n+                    }\n+                }\n+            }\n+            globalHandleError(err, vm, info);\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    function invokeWithErrorHandling (\n+        handler,\n+        context,\n+        args,\n+        vm,\n+        info\n+    ) {\n+        var res;\n+        try {\n+            res = args ? handler.apply(context, args) : handler.call(context);\n+            if (res && !res._isVue && isPromise(res) && !res._handled) {\n+                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\n+                \u002F\u002F issue #9511\n+                \u002F\u002F avoid catch triggering multiple times when nested calls\n+                res._handled = true;\n+            }\n+        } catch (e) {\n+            handleError(e, vm, info);\n+        }\n+        return res\n+    }\n+\n+    function globalHandleError (err, vm, info) {\n+        if (config.errorHandler) {\n+            try {\n+                return config.errorHandler.call(null, err, vm, info)\n+            } catch (e) {\n+                \u002F\u002F if the user intentionally throws the original error in the handler,\n+                \u002F\u002F do not log it twice\n+                if (e !== err) {\n+                    logError(e, null, 'config.errorHandler');\n+                }\n+            }\n+        }\n+        logError(err, vm, info);\n+    }\n+\n+    function logError (err, vm, info) {\n+        {\n+            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n+            console.error(err);\n+        } else {\n+            throw err\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var isUsingMicroTask = false;\n+\n+    var callbacks = [];\n+    var pending = false;\n+\n+    function flushCallbacks () {\n+        pending = false;\n+        var copies = callbacks.slice(0);\n+        callbacks.length = 0;\n+        for (var i = 0; i \u003C copies.length; i++) {\n+            copies[i]();\n+        }\n+    }\n+\n+    \u002F\u002F Here we have async deferring wrappers using microtasks.\n+    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\n+    \u002F\u002F However, it has subtle problems when state is changed right before repaint\n+    \u002F\u002F (e.g. #6813, out-in transitions).\n+    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\n+    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n+    \u002F\u002F So we now use microtasks everywhere, again.\n+    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\n+    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\n+    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\n+    \u002F\u002F or even between bubbling of the same event (#6566).\n+    var timerFunc;\n+\n+    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\n+    \u002F\u002F via either native Promise.then or MutationObserver.\n+    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\n+    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n+    \u002F\u002F completely stops working after triggering a few times... so, if native\n+    \u002F\u002F Promise is available, we will use it:\n+  \u002F* istanbul ignore next, $flow-disable-line *\u002F\n+    if (typeof Promise !== 'undefined' && isNative(Promise)) {\n+        var p = Promise.resolve();\n+        timerFunc = function () {\n+            p.then(flushCallbacks);\n+            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\n+            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\n+            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\n+            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\n+            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\n+            if (isIOS) { setTimeout(noop); }\n+        };\n+        isUsingMicroTask = true;\n+    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\n+            isNative(MutationObserver) ||\n+            \u002F\u002F PhantomJS and iOS 7.x\n+            MutationObserver.toString() === '[object MutationObserverConstructor]'\n+        )) {\n+        \u002F\u002F Use MutationObserver where native Promise is not available,\n+        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\n+        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\n+        var counter = 1;\n+        var observer = new MutationObserver(flushCallbacks);\n+        var textNode = document.createTextNode(String(counter));\n+        observer.observe(textNode, {\n+            characterData: true\n+        });\n+        timerFunc = function () {\n+            counter = (counter + 1) % 2;\n+            textNode.data = String(counter);\n+        };\n+        isUsingMicroTask = true;\n+    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n+        \u002F\u002F Fallback to setImmediate.\n+        \u002F\u002F Techinically it leverages the (macro) task queue,\n+        \u002F\u002F but it is still a better choice than setTimeout.\n+        timerFunc = function () {\n+            setImmediate(flushCallbacks);\n+        };\n+    } else {\n+        \u002F\u002F Fallback to setTimeout.\n+        timerFunc = function () {\n+            setTimeout(flushCallbacks, 0);\n+        };\n+    }\n+\n+    function nextTick (cb, ctx) {\n+        var _resolve;\n+        callbacks.push(function () {\n+            if (cb) {\n+                try {\n+                    cb.call(ctx);\n+                } catch (e) {\n+                    handleError(e, ctx, 'nextTick');\n+                }\n+            } else if (_resolve) {\n+                _resolve(ctx);\n+            }\n+        });\n+        if (!pending) {\n+            pending = true;\n+            timerFunc();\n+        }\n+        \u002F\u002F $flow-disable-line\n+        if (!cb && typeof Promise !== 'undefined') {\n+            return new Promise(function (resolve) {\n+                _resolve = resolve;\n+            })\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var mark;\n+    var measure;\n+\n+    {\n+        var perf = inBrowser && window.performance;\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            perf &&\n+            perf.mark &&\n+            perf.measure &&\n+            perf.clearMarks &&\n+            perf.clearMeasures\n+        ) {\n+            mark = function (tag) { return perf.mark(tag); };\n+            measure = function (name, startTag, endTag) {\n+                perf.measure(name, startTag, endTag);\n+                perf.clearMarks(startTag);\n+                perf.clearMarks(endTag);\n+                \u002F\u002F perf.clearMeasures(name)\n+            };\n+        }\n+    }\n+\n+  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\n+\n+    var initProxy;\n+\n+    {\n+        var allowedGlobals = makeMap(\n+            'Infinity,undefined,NaN,isFinite,isNaN,' +\n+            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n+            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n+            'require' \u002F\u002F for Webpack\u002FBrowserify\n+        );\n+\n+        var warnNonPresent = function (target, key) {\n+            warn(\n+                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n+                'referenced during render. Make sure that this property is reactive, ' +\n+                'either in the data option, or for class-based components, by ' +\n+                'initializing the property. ' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\n+                target\n+            );\n+        };\n+\n+        var warnReservedPrefix = function (target, key) {\n+            warn(\n+                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n+                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n+                'prevent conflicts with Vue internals' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\n+                target\n+            );\n+        };\n+\n+        var hasProxy =\n+            typeof Proxy !== 'undefined' && isNative(Proxy);\n+\n+        if (hasProxy) {\n+            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n+            config.keyCodes = new Proxy(config.keyCodes, {\n+                set: function set (target, key, value) {\n+                    if (isBuiltInModifier(key)) {\n+                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n+                        return false\n+                    } else {\n+                        target[key] = value;\n+                        return true\n+                    }\n+                }\n+            });\n+        }\n+\n+        var hasHandler = {\n+            has: function has (target, key) {\n+                var has = key in target;\n+                var isAllowed = allowedGlobals(key) ||\n+                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n+                if (!has && !isAllowed) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return has || !isAllowed\n+            }\n+        };\n+\n+        var getHandler = {\n+            get: function get (target, key) {\n+                if (typeof key === 'string' && !(key in target)) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return target[key]\n+            }\n+        };\n+\n+        initProxy = function initProxy (vm) {\n+            if (hasProxy) {\n+                \u002F\u002F determine which proxy handler to use\n+                var options = vm.$options;\n+                var handlers = options.render && options.render._withStripped\n+                    ? getHandler\n+                    : hasHandler;\n+                vm._renderProxy = new Proxy(vm, handlers);\n+            } else {\n+                vm._renderProxy = vm;\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var seenObjects = new _Set();\n+\n+    \u002F**\n+     * Recursively traverse an object to evoke all converted\n+     * getters, so that every nested property inside the object\n+     * is collected as a \"deep\" dependency.\n+     *\u002F\n+    function traverse (val) {\n+        _traverse(val, seenObjects);\n+        seenObjects.clear();\n+    }\n+\n+    function _traverse (val, seen) {\n+        var i, keys;\n+        var isA = Array.isArray(val);\n+        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n+            return\n+        }\n+        if (val.__ob__) {\n+            var depId = val.__ob__.dep.id;\n+            if (seen.has(depId)) {\n+                return\n+            }\n+            seen.add(depId);\n+        }\n+        if (isA) {\n+            i = val.length;\n+            while (i--) { _traverse(val[i], seen); }\n+        } else {\n+            keys = Object.keys(val);\n+            i = keys.length;\n+            while (i--) { _traverse(val[keys[i]], seen); }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var normalizeEvent = cached(function (name) {\n+        var passive = name.charAt(0) === '&';\n+        name = passive ? name.slice(1) : name;\n+        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\n+        name = once$$1 ? name.slice(1) : name;\n+        var capture = name.charAt(0) === '!';\n+        name = capture ? name.slice(1) : name;\n+        return {\n+            name: name,\n+            once: once$$1,\n+            capture: capture,\n+            passive: passive\n+        }\n+    });\n+\n+    function createFnInvoker (fns, vm) {\n+        function invoker () {\n+            var arguments$1 = arguments;\n+\n+            var fns = invoker.fns;\n+            if (Array.isArray(fns)) {\n+                var cloned = fns.slice();\n+                for (var i = 0; i \u003C cloned.length; i++) {\n+                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n+                }\n+            } else {\n+                \u002F\u002F return handler return value for single handlers\n+                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n+            }\n+        }\n+        invoker.fns = fns;\n+        return invoker\n+    }\n+\n+    function updateListeners (\n+        on,\n+        oldOn,\n+        add,\n+        remove$$1,\n+        createOnceHandler,\n+        vm\n+    ) {\n+        var name, def$$1, cur, old, event;\n+        for (name in on) {\n+            def$$1 = cur = on[name];\n+            old = oldOn[name];\n+            event = normalizeEvent(name);\n+            if (isUndef(cur)) {\n+                warn(\n+                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n+                    vm\n+                );\n+            } else if (isUndef(old)) {\n+                if (isUndef(cur.fns)) {\n+                    cur = on[name] = createFnInvoker(cur, vm);\n+                }\n+                if (isTrue(event.once)) {\n+                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n+                }\n+                add(event.name, cur, event.capture, event.passive, event.params);\n+            } else if (cur !== old) {\n+                old.fns = cur;\n+                on[name] = old;\n+            }\n+        }\n+        for (name in oldOn) {\n+            if (isUndef(on[name])) {\n+                event = normalizeEvent(name);\n+                remove$$1(event.name, oldOn[name], event.capture);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function mergeVNodeHook (def, hookKey, hook) {\n+        if (def instanceof VNode) {\n+            def = def.data.hook || (def.data.hook = {});\n+        }\n+        var invoker;\n+        var oldHook = def[hookKey];\n+\n+        function wrappedHook () {\n+            hook.apply(this, arguments);\n+            \u002F\u002F important: remove merged hook to ensure it's called only once\n+            \u002F\u002F and prevent memory leak\n+            remove(invoker.fns, wrappedHook);\n+        }\n+\n+        if (isUndef(oldHook)) {\n+            \u002F\u002F no existing hook\n+            invoker = createFnInvoker([wrappedHook]);\n+        } else {\n+          \u002F* istanbul ignore if *\u002F\n+            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n+                \u002F\u002F already a merged invoker\n+                invoker = oldHook;\n+                invoker.fns.push(wrappedHook);\n+            } else {\n+                \u002F\u002F existing plain hook\n+                invoker = createFnInvoker([oldHook, wrappedHook]);\n+            }\n+        }\n+\n+        invoker.merged = true;\n+        def[hookKey] = invoker;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function extractPropsFromVNodeData (\n+        data,\n+        Ctor,\n+        tag\n+    ) {\n+        \u002F\u002F we are only extracting raw values here.\n+        \u002F\u002F validation and default values are handled in the child\n+        \u002F\u002F component itself.\n+        var propOptions = Ctor.options.props;\n+        if (isUndef(propOptions)) {\n+            return\n+        }\n+        var res = {};\n+        var attrs = data.attrs;\n+        var props = data.props;\n+        if (isDef(attrs) || isDef(props)) {\n+            for (var key in propOptions) {\n+                var altKey = hyphenate(key);\n+                {\n+                    var keyInLowerCase = key.toLowerCase();\n+                    if (\n+                        key !== keyInLowerCase &&\n+                        attrs && hasOwn(attrs, keyInLowerCase)\n+                    ) {\n+                        tip(\n+                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n+                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n+                            \" \\\"\" + key + \"\\\". \" +\n+                            \"Note that HTML attributes are case-insensitive and camelCased \" +\n+                            \"props need to use their kebab-case equivalents when using in-DOM \" +\n+                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n+                        );\n+                    }\n+                }\n+                checkProp(res, props, key, altKey, true) ||\n+                checkProp(res, attrs, key, altKey, false);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkProp (\n+        res,\n+        hash,\n+        key,\n+        altKey,\n+        preserve\n+    ) {\n+        if (isDef(hash)) {\n+            if (hasOwn(hash, key)) {\n+                res[key] = hash[key];\n+                if (!preserve) {\n+                    delete hash[key];\n+                }\n+                return true\n+            } else if (hasOwn(hash, altKey)) {\n+                res[key] = hash[altKey];\n+                if (!preserve) {\n+                    delete hash[altKey];\n+                }\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F The template compiler attempts to minimize the need for normalization by\n+    \u002F\u002F statically analyzing the template at compile time.\n+    \u002F\u002F\n+    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\n+    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\n+    \u002F\u002F two cases where extra normalization is needed:\n+\n+    \u002F\u002F 1. When the children contains components - because a functional component\n+    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\n+    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\n+    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n+    \u002F\u002F because functional components already normalize their own children.\n+    function simpleNormalizeChildren (children) {\n+        for (var i = 0; i \u003C children.length; i++) {\n+            if (Array.isArray(children[i])) {\n+                return Array.prototype.concat.apply([], children)\n+            }\n+        }\n+        return children\n+    }\n+\n+    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\n+    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\n+    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\n+    \u002F\u002F is needed to cater to all possible types of children values.\n+    function normalizeChildren (children) {\n+        return isPrimitive(children)\n+            ? [createTextVNode(children)]\n+            : Array.isArray(children)\n+                ? normalizeArrayChildren(children)\n+                : undefined\n+    }\n+\n+    function isTextNode (node) {\n+        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n+    }\n+\n+    function normalizeArrayChildren (children, nestedIndex) {\n+        var res = [];\n+        var i, c, lastIndex, last;\n+        for (i = 0; i \u003C children.length; i++) {\n+            c = children[i];\n+            if (isUndef(c) || typeof c === 'boolean') { continue }\n+            lastIndex = res.length - 1;\n+            last = res[lastIndex];\n+            \u002F\u002F  nested\n+            if (Array.isArray(c)) {\n+                if (c.length > 0) {\n+                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n+                    \u002F\u002F merge adjacent text nodes\n+                    if (isTextNode(c[0]) && isTextNode(last)) {\n+                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n+                        c.shift();\n+                    }\n+                    res.push.apply(res, c);\n+                }\n+            } else if (isPrimitive(c)) {\n+                if (isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    \u002F\u002F this is necessary for SSR hydration because text nodes are\n+                    \u002F\u002F essentially merged when rendered to HTML strings\n+                    res[lastIndex] = createTextVNode(last.text + c);\n+                } else if (c !== '') {\n+                    \u002F\u002F convert primitive to vnode\n+                    res.push(createTextVNode(c));\n+                }\n+            } else {\n+                if (isTextNode(c) && isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    res[lastIndex] = createTextVNode(last.text + c.text);\n+                } else {\n+                    \u002F\u002F default key for nested array children (likely generated by v-for)\n+                    if (isTrue(children._isVList) &&\n+                        isDef(c.tag) &&\n+                        isUndef(c.key) &&\n+                        isDef(nestedIndex)) {\n+                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n+                    }\n+                    res.push(c);\n+                }\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initProvide (vm) {\n+        var provide = vm.$options.provide;\n+        if (provide) {\n+            vm._provided = typeof provide === 'function'\n+                ? provide.call(vm)\n+                : provide;\n+        }\n+    }\n+\n+    function initInjections (vm) {\n+        var result = resolveInject(vm.$options.inject, vm);\n+        if (result) {\n+            toggleObserving(false);\n+            Object.keys(result).forEach(function (key) {\n+              \u002F* istanbul ignore else *\u002F\n+                {\n+                    defineReactive$$1(vm, key, result[key], function () {\n+                        warn(\n+                            \"Avoid mutating an injected value directly since the changes will be \" +\n+                            \"overwritten whenever the provided component re-renders. \" +\n+                            \"injection being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    });\n+                }\n+            });\n+            toggleObserving(true);\n+        }\n+    }\n+\n+    function resolveInject (inject, vm) {\n+        if (inject) {\n+            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\n+            var result = Object.create(null);\n+            var keys = hasSymbol\n+                ? Reflect.ownKeys(inject)\n+                : Object.keys(inject);\n+\n+            for (var i = 0; i \u003C keys.length; i++) {\n+                var key = keys[i];\n+                \u002F\u002F #6574 in case the inject object is observed...\n+                if (key === '__ob__') { continue }\n+                var provideKey = inject[key].from;\n+                var source = vm;\n+                while (source) {\n+                    if (source._provided && hasOwn(source._provided, provideKey)) {\n+                        result[key] = source._provided[provideKey];\n+                        break\n+                    }\n+                    source = source.$parent;\n+                }\n+                if (!source) {\n+                    if ('default' in inject[key]) {\n+                        var provideDefault = inject[key].default;\n+                        result[key] = typeof provideDefault === 'function'\n+                            ? provideDefault.call(vm)\n+                            : provideDefault;\n+                    } else {\n+                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n+                    }\n+                }\n+            }\n+            return result\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F**\n+     * Runtime helper for resolving raw children VNodes into a slot object.\n+     *\u002F\n+    function resolveSlots (\n+        children,\n+        context\n+    ) {\n+        if (!children || !children.length) {\n+            return {}\n+        }\n+        var slots = {};\n+        for (var i = 0, l = children.length; i \u003C l; i++) {\n+            var child = children[i];\n+            var data = child.data;\n+            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\n+            if (data && data.attrs && data.attrs.slot) {\n+                delete data.attrs.slot;\n+            }\n+            \u002F\u002F named slots should only be respected if the vnode was rendered in the\n+            \u002F\u002F same context.\n+            if ((child.context === context || child.fnContext === context) &&\n+                data && data.slot != null\n+            ) {\n+                var name = data.slot;\n+                var slot = (slots[name] || (slots[name] = []));\n+                if (child.tag === 'template') {\n+                    slot.push.apply(slot, child.children || []);\n+                } else {\n+                    slot.push(child);\n+                }\n+            } else {\n+                (slots.default || (slots.default = [])).push(child);\n+            }\n+        }\n+        \u002F\u002F ignore slots that contains only whitespace\n+        for (var name$1 in slots) {\n+            if (slots[name$1].every(isWhitespace)) {\n+                delete slots[name$1];\n+            }\n+        }\n+        return slots\n+    }\n+\n+    function isWhitespace (node) {\n+        return (node.isComment && !node.asyncFactory) || node.text === ' '\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function normalizeScopedSlots (\n+        slots,\n+        normalSlots,\n+        prevSlots\n+    ) {\n+        var res;\n+        var hasNormalSlots = Object.keys(normalSlots).length > 0;\n+        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n+        var key = slots && slots.$key;\n+        if (!slots) {\n+            res = {};\n+        } else if (slots._normalized) {\n+            \u002F\u002F fast path 1: child component re-render only, parent did not change\n+            return slots._normalized\n+        } else if (\n+            isStable &&\n+            prevSlots &&\n+            prevSlots !== emptyObject &&\n+            key === prevSlots.$key &&\n+            !hasNormalSlots &&\n+            !prevSlots.$hasNormal\n+        ) {\n+            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\n+            \u002F\u002F only need to normalize once\n+            return prevSlots\n+        } else {\n+            res = {};\n+            for (var key$1 in slots) {\n+                if (slots[key$1] && key$1[0] !== '$') {\n+                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n+                }\n+            }\n+        }\n+        \u002F\u002F expose normal slots on scopedSlots\n+        for (var key$2 in normalSlots) {\n+            if (!(key$2 in res)) {\n+                res[key$2] = proxyNormalSlot(normalSlots, key$2);\n+            }\n+        }\n+        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\n+        \u002F\u002F and when that is passed down this would cause an error\n+        if (slots && Object.isExtensible(slots)) {\n+            (slots)._normalized = res;\n+        }\n+        def(res, '$stable', isStable);\n+        def(res, '$key', key);\n+        def(res, '$hasNormal', hasNormalSlots);\n+        return res\n+    }\n+\n+    function normalizeScopedSlot(normalSlots, key, fn) {\n+        var normalized = function () {\n+            var res = arguments.length ? fn.apply(null, arguments) : fn({});\n+            res = res && typeof res === 'object' && !Array.isArray(res)\n+                ? [res] \u002F\u002F single vnode\n+                : normalizeChildren(res);\n+            return res && (\n+                res.length === 0 ||\n+                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\n+            ) ? undefined\n+                : res\n+        };\n+        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\n+        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\n+        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\n+        if (fn.proxy) {\n+            Object.defineProperty(normalSlots, key, {\n+                get: normalized,\n+                enumerable: true,\n+                configurable: true\n+            });\n+        }\n+        return normalized\n+    }\n+\n+    function proxyNormalSlot(slots, key) {\n+        return function () { return slots[key]; }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering v-for lists.\n+     *\u002F\n+    function renderList (\n+        val,\n+        render\n+    ) {\n+        var ret, i, l, keys, key;\n+        if (Array.isArray(val) || typeof val === 'string') {\n+            ret = new Array(val.length);\n+            for (i = 0, l = val.length; i \u003C l; i++) {\n+                ret[i] = render(val[i], i);\n+            }\n+        } else if (typeof val === 'number') {\n+            ret = new Array(val);\n+            for (i = 0; i \u003C val; i++) {\n+                ret[i] = render(i + 1, i);\n+            }\n+        } else if (isObject(val)) {\n+            if (hasSymbol && val[Symbol.iterator]) {\n+                ret = [];\n+                var iterator = val[Symbol.iterator]();\n+                var result = iterator.next();\n+                while (!result.done) {\n+                    ret.push(render(result.value, ret.length));\n+                    result = iterator.next();\n+                }\n+            } else {\n+                keys = Object.keys(val);\n+                ret = new Array(keys.length);\n+                for (i = 0, l = keys.length; i \u003C l; i++) {\n+                    key = keys[i];\n+                    ret[i] = render(val[key], key, i);\n+                }\n+            }\n+        }\n+        if (!isDef(ret)) {\n+            ret = [];\n+        }\n+        (ret)._isVList = true;\n+        return ret\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering \u003Cslot>\n+     *\u002F\n+    function renderSlot (\n+        name,\n+        fallback,\n+        props,\n+        bindObject\n+    ) {\n+        var scopedSlotFn = this.$scopedSlots[name];\n+        var nodes;\n+        if (scopedSlotFn) { \u002F\u002F scoped slot\n+            props = props || {};\n+            if (bindObject) {\n+                if (!isObject(bindObject)) {\n+                    warn(\n+                        'slot v-bind without argument expects an Object',\n+                        this\n+                    );\n+                }\n+                props = extend(extend({}, bindObject), props);\n+            }\n+            nodes = scopedSlotFn(props) || fallback;\n+        } else {\n+            nodes = this.$slots[name] || fallback;\n+        }\n+\n+        var target = props && props.slot;\n+        if (target) {\n+            return this.$createElement('template', { slot: target }, nodes)\n+        } else {\n+            return nodes\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for resolving filters\n+     *\u002F\n+    function resolveFilter (id) {\n+        return resolveAsset(this.$options, 'filters', id, true) || identity\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isKeyNotMatch (expect, actual) {\n+        if (Array.isArray(expect)) {\n+            return expect.indexOf(actual) === -1\n+        } else {\n+            return expect !== actual\n+        }\n+    }\n+\n+    \u002F**\n+     * Runtime helper for checking keyCodes from config.\n+     * exposed as Vue.prototype._k\n+     * passing in eventKeyName as last argument separately for backwards compat\n+     *\u002F\n+    function checkKeyCodes (\n+        eventKeyCode,\n+        key,\n+        builtInKeyCode,\n+        eventKeyName,\n+        builtInKeyName\n+    ) {\n+        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n+        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n+            return isKeyNotMatch(builtInKeyName, eventKeyName)\n+        } else if (mappedKeyCode) {\n+            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n+        } else if (eventKeyName) {\n+            return hyphenate(eventKeyName) !== key\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n+     *\u002F\n+    function bindObjectProps (\n+        data,\n+        tag,\n+        value,\n+        asProp,\n+        isSync\n+    ) {\n+        if (value) {\n+            if (!isObject(value)) {\n+                warn(\n+                    'v-bind without argument expects an Object or Array value',\n+                    this\n+                );\n+            } else {\n+                if (Array.isArray(value)) {\n+                    value = toObject(value);\n+                }\n+                var hash;\n+                var loop = function ( key ) {\n+                    if (\n+                        key === 'class' ||\n+                        key === 'style' ||\n+                        isReservedAttribute(key)\n+                    ) {\n+                        hash = data;\n+                    } else {\n+                        var type = data.attrs && data.attrs.type;\n+                        hash = asProp || config.mustUseProp(tag, type, key)\n+                            ? data.domProps || (data.domProps = {})\n+                            : data.attrs || (data.attrs = {});\n+                    }\n+                    var camelizedKey = camelize(key);\n+                    var hyphenatedKey = hyphenate(key);\n+                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n+                        hash[key] = value[key];\n+\n+                        if (isSync) {\n+                            var on = data.on || (data.on = {});\n+                            on[(\"update:\" + key)] = function ($event) {\n+                                value[key] = $event;\n+                            };\n+                        }\n+                    }\n+                };\n+\n+                for (var key in value) loop( key );\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering static trees.\n+     *\u002F\n+    function renderStatic (\n+        index,\n+        isInFor\n+    ) {\n+        var cached = this._staticTrees || (this._staticTrees = []);\n+        var tree = cached[index];\n+        \u002F\u002F if has already-rendered static tree and not inside v-for,\n+        \u002F\u002F we can reuse the same tree.\n+        if (tree && !isInFor) {\n+            return tree\n+        }\n+        \u002F\u002F otherwise, render a fresh tree.\n+        tree = cached[index] = this.$options.staticRenderFns[index].call(\n+            this._renderProxy,\n+            null,\n+            this \u002F\u002F for render fns generated for functional component templates\n+        );\n+        markStatic(tree, (\"__static__\" + index), false);\n+        return tree\n+    }\n+\n+    \u002F**\n+     * Runtime helper for v-once.\n+     * Effectively it means marking the node as static with a unique key.\n+     *\u002F\n+    function markOnce (\n+        tree,\n+        index,\n+        key\n+    ) {\n+        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n+        return tree\n+    }\n+\n+    function markStatic (\n+        tree,\n+        key,\n+        isOnce\n+    ) {\n+        if (Array.isArray(tree)) {\n+            for (var i = 0; i \u003C tree.length; i++) {\n+                if (tree[i] && typeof tree[i] !== 'string') {\n+                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n+                }\n+            }\n+        } else {\n+            markStaticNode(tree, key, isOnce);\n+        }\n+    }\n+\n+    function markStaticNode (node, key, isOnce) {\n+        node.isStatic = true;\n+        node.key = key;\n+        node.isOnce = isOnce;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindObjectListeners (data, value) {\n+        if (value) {\n+            if (!isPlainObject(value)) {\n+                warn(\n+                    'v-on without argument expects an Object value',\n+                    this\n+                );\n+            } else {\n+                var on = data.on = data.on ? extend({}, data.on) : {};\n+                for (var key in value) {\n+                    var existing = on[key];\n+                    var ours = value[key];\n+                    on[key] = existing ? [].concat(existing, ours) : ours;\n+                }\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveScopedSlots (\n+        fns, \u002F\u002F see flow\u002Fvnode\n+        res,\n+        \u002F\u002F the following are added in 2.6\n+        hasDynamicKeys,\n+        contentHashKey\n+    ) {\n+        res = res || { $stable: !hasDynamicKeys };\n+        for (var i = 0; i \u003C fns.length; i++) {\n+            var slot = fns[i];\n+            if (Array.isArray(slot)) {\n+                resolveScopedSlots(slot, res, hasDynamicKeys);\n+            } else if (slot) {\n+                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\n+                if (slot.proxy) {\n+                    slot.fn.proxy = true;\n+                }\n+                res[slot.key] = slot.fn;\n+            }\n+        }\n+        if (contentHashKey) {\n+            (res).$key = contentHashKey;\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindDynamicKeys (baseObj, values) {\n+        for (var i = 0; i \u003C values.length; i += 2) {\n+            var key = values[i];\n+            if (typeof key === 'string' && key) {\n+                baseObj[values[i]] = values[i + 1];\n+            } else if (key !== '' && key !== null) {\n+                \u002F\u002F null is a speical value for explicitly removing a binding\n+                warn(\n+                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n+                    this\n+                );\n+            }\n+        }\n+        return baseObj\n+    }\n+\n+    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\n+    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\n+    \u002F\u002F to string and cause the type check to miss.\n+    function prependModifier (value, symbol) {\n+        return typeof value === 'string' ? symbol + value : value\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function installRenderHelpers (target) {\n+        target._o = markOnce;\n+        target._n = toNumber;\n+        target._s = toString;\n+        target._l = renderList;\n+        target._t = renderSlot;\n+        target._q = looseEqual;\n+        target._i = looseIndexOf;\n+        target._m = renderStatic;\n+        target._f = resolveFilter;\n+        target._k = checkKeyCodes;\n+        target._b = bindObjectProps;\n+        target._v = createTextVNode;\n+        target._e = createEmptyVNode;\n+        target._u = resolveScopedSlots;\n+        target._g = bindObjectListeners;\n+        target._d = bindDynamicKeys;\n+        target._p = prependModifier;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function FunctionalRenderContext (\n+        data,\n+        props,\n+        children,\n+        parent,\n+        Ctor\n+    ) {\n+        var this$1 = this;\n+\n+        var options = Ctor.options;\n+        \u002F\u002F ensure the createElement function in functional components\n+        \u002F\u002F gets a unique context - this is necessary for correct named slot check\n+        var contextVm;\n+        if (hasOwn(parent, '_uid')) {\n+            contextVm = Object.create(parent);\n+            \u002F\u002F $flow-disable-line\n+            contextVm._original = parent;\n+        } else {\n+            \u002F\u002F the context vm passed in is a functional context as well.\n+            \u002F\u002F in this case we want to make sure we are able to get a hold to the\n+            \u002F\u002F real context instance.\n+            contextVm = parent;\n+            \u002F\u002F $flow-disable-line\n+            parent = parent._original;\n+        }\n+        var isCompiled = isTrue(options._compiled);\n+        var needNormalization = !isCompiled;\n+\n+        this.data = data;\n+        this.props = props;\n+        this.children = children;\n+        this.parent = parent;\n+        this.listeners = data.on || emptyObject;\n+        this.injections = resolveInject(options.inject, parent);\n+        this.slots = function () {\n+            if (!this$1.$slots) {\n+                normalizeScopedSlots(\n+                    data.scopedSlots,\n+                    this$1.$slots = resolveSlots(children, parent)\n+                );\n+            }\n+            return this$1.$slots\n+        };\n+\n+        Object.defineProperty(this, 'scopedSlots', ({\n+            enumerable: true,\n+            get: function get () {\n+                return normalizeScopedSlots(data.scopedSlots, this.slots())\n+            }\n+        }));\n+\n+        \u002F\u002F support for compiled functional template\n+        if (isCompiled) {\n+            \u002F\u002F exposing $options for renderStatic()\n+            this.$options = options;\n+            \u002F\u002F pre-resolve slots for renderSlot()\n+            this.$slots = this.slots();\n+            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n+        }\n+\n+        if (options._scopeId) {\n+            this._c = function (a, b, c, d) {\n+                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n+                if (vnode && !Array.isArray(vnode)) {\n+                    vnode.fnScopeId = options._scopeId;\n+                    vnode.fnContext = parent;\n+                }\n+                return vnode\n+            };\n+        } else {\n+            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n+        }\n+    }\n+\n+    installRenderHelpers(FunctionalRenderContext.prototype);\n+\n+    function createFunctionalComponent (\n+        Ctor,\n+        propsData,\n+        data,\n+        contextVm,\n+        children\n+    ) {\n+        var options = Ctor.options;\n+        var props = {};\n+        var propOptions = options.props;\n+        if (isDef(propOptions)) {\n+            for (var key in propOptions) {\n+                props[key] = validateProp(key, propOptions, propsData || emptyObject);\n+            }\n+        } else {\n+            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n+            if (isDef(data.props)) { mergeProps(props, data.props); }\n+        }\n+\n+        var renderContext = new FunctionalRenderContext(\n+            data,\n+            props,\n+            children,\n+            contextVm,\n+            Ctor\n+        );\n+\n+        var vnode = options.render.call(null, renderContext._c, renderContext);\n+\n+        if (vnode instanceof VNode) {\n+            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n+        } else if (Array.isArray(vnode)) {\n+            var vnodes = normalizeChildren(vnode) || [];\n+            var res = new Array(vnodes.length);\n+            for (var i = 0; i \u003C vnodes.length; i++) {\n+                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n+            }\n+            return res\n+        }\n+    }\n+\n+    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n+        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\n+        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\n+        \u002F\u002F that should not be matched to match.\n+        var clone = cloneVNode(vnode);\n+        clone.fnContext = contextVm;\n+        clone.fnOptions = options;\n+        {\n+            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n+        }\n+        if (data.slot) {\n+            (clone.data || (clone.data = {})).slot = data.slot;\n+        }\n+        return clone\n+    }\n+\n+    function mergeProps (to, from) {\n+        for (var key in from) {\n+            to[camelize(key)] = from[key];\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F inline hooks to be invoked on component VNodes during patch\n+    var componentVNodeHooks = {\n+        init: function init (vnode, hydrating) {\n+            if (\n+                vnode.componentInstance &&\n+                !vnode.componentInstance._isDestroyed &&\n+                vnode.data.keepAlive\n+            ) {\n+                \u002F\u002F kept-alive components, treat as a patch\n+                var mountedNode = vnode; \u002F\u002F work around flow\n+                componentVNodeHooks.prepatch(mountedNode, mountedNode);\n+            } else {\n+                var child = vnode.componentInstance = createComponentInstanceForVnode(\n+                    vnode,\n+                    activeInstance\n+                );\n+                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n+            }\n+        },\n+\n+        prepatch: function prepatch (oldVnode, vnode) {\n+            var options = vnode.componentOptions;\n+            var child = vnode.componentInstance = oldVnode.componentInstance;\n+            updateChildComponent(\n+                child,\n+                options.propsData, \u002F\u002F updated props\n+                options.listeners, \u002F\u002F updated listeners\n+                vnode, \u002F\u002F new parent vnode\n+                options.children \u002F\u002F new children\n+            );\n+        },\n+\n+        insert: function insert (vnode) {\n+            var context = vnode.context;\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isMounted) {\n+                componentInstance._isMounted = true;\n+                callHook(componentInstance, 'mounted');\n+            }\n+            if (vnode.data.keepAlive) {\n+                if (context._isMounted) {\n+                    \u002F\u002F vue-router#1212\n+                    \u002F\u002F During updates, a kept-alive component's child components may\n+                    \u002F\u002F change, so directly walking the tree here may call activated hooks\n+                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\n+                    \u002F\u002F be processed after the whole patch process ended.\n+                    queueActivatedComponent(componentInstance);\n+                } else {\n+                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        },\n+\n+        destroy: function destroy (vnode) {\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isDestroyed) {\n+                if (!vnode.data.keepAlive) {\n+                    componentInstance.$destroy();\n+                } else {\n+                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        }\n+    };\n+\n+    var hooksToMerge = Object.keys(componentVNodeHooks);\n+\n+    function createComponent (\n+        Ctor,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        if (isUndef(Ctor)) {\n+            return\n+        }\n+\n+        var baseCtor = context.$options._base;\n+\n+        \u002F\u002F plain options object: turn it into a constructor\n+        if (isObject(Ctor)) {\n+            Ctor = baseCtor.extend(Ctor);\n+        }\n+\n+        \u002F\u002F if at this stage it's not a constructor or an async component factory,\n+        \u002F\u002F reject.\n+        if (typeof Ctor !== 'function') {\n+            {\n+                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n+            }\n+            return\n+        }\n+\n+        \u002F\u002F async component\n+        var asyncFactory;\n+        if (isUndef(Ctor.cid)) {\n+            asyncFactory = Ctor;\n+            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n+            if (Ctor === undefined) {\n+                \u002F\u002F return a placeholder node for async component, which is rendered\n+                \u002F\u002F as a comment node but preserves all the raw information for the node.\n+                \u002F\u002F the information will be used for async server-rendering and hydration.\n+                return createAsyncPlaceholder(\n+                    asyncFactory,\n+                    data,\n+                    context,\n+                    children,\n+                    tag\n+                )\n+            }\n+        }\n+\n+        data = data || {};\n+\n+        \u002F\u002F resolve constructor options in case global mixins are applied after\n+        \u002F\u002F component constructor creation\n+        resolveConstructorOptions(Ctor);\n+\n+        \u002F\u002F transform component v-model data into props & events\n+        if (isDef(data.model)) {\n+            transformModel(Ctor.options, data);\n+        }\n+\n+        \u002F\u002F extract props\n+        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n+\n+        \u002F\u002F functional component\n+        if (isTrue(Ctor.options.functional)) {\n+            return createFunctionalComponent(Ctor, propsData, data, context, children)\n+        }\n+\n+        \u002F\u002F extract listeners, since these needs to be treated as\n+        \u002F\u002F child component listeners instead of DOM listeners\n+        var listeners = data.on;\n+        \u002F\u002F replace with listeners with .native modifier\n+        \u002F\u002F so it gets processed during parent component patch.\n+        data.on = data.nativeOn;\n+\n+        if (isTrue(Ctor.options.abstract)) {\n+            \u002F\u002F abstract components do not keep anything\n+            \u002F\u002F other than props & listeners & slot\n+\n+            \u002F\u002F work around flow\n+            var slot = data.slot;\n+            data = {};\n+            if (slot) {\n+                data.slot = slot;\n+            }\n+        }\n+\n+        \u002F\u002F install component management hooks onto the placeholder node\n+        installComponentHooks(data);\n+\n+        \u002F\u002F return a placeholder vnode\n+        var name = Ctor.options.name || tag;\n+        var vnode = new VNode(\n+            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n+            data, undefined, undefined, undefined, context,\n+            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n+            asyncFactory\n+        );\n+\n+        return vnode\n+    }\n+\n+    function createComponentInstanceForVnode (\n+        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\n+        parent \u002F\u002F activeInstance in lifecycle state\n+    ) {\n+        var options = {\n+            _isComponent: true,\n+            _parentVnode: vnode,\n+            parent: parent\n+        };\n+        \u002F\u002F check inline-template render functions\n+        var inlineTemplate = vnode.data.inlineTemplate;\n+        if (isDef(inlineTemplate)) {\n+            options.render = inlineTemplate.render;\n+            options.staticRenderFns = inlineTemplate.staticRenderFns;\n+        }\n+        return new vnode.componentOptions.Ctor(options)\n+    }\n+\n+    function installComponentHooks (data) {\n+        var hooks = data.hook || (data.hook = {});\n+        for (var i = 0; i \u003C hooksToMerge.length; i++) {\n+            var key = hooksToMerge[i];\n+            var existing = hooks[key];\n+            var toMerge = componentVNodeHooks[key];\n+            if (existing !== toMerge && !(existing && existing._merged)) {\n+                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n+            }\n+        }\n+    }\n+\n+    function mergeHook$1 (f1, f2) {\n+        var merged = function (a, b) {\n+            \u002F\u002F flow complains about extra args which is why we use any\n+            f1(a, b);\n+            f2(a, b);\n+        };\n+        merged._merged = true;\n+        return merged\n+    }\n+\n+    \u002F\u002F transform component v-model info (value and callback) into\n+    \u002F\u002F prop and event handler respectively.\n+    function transformModel (options, data) {\n+        var prop = (options.model && options.model.prop) || 'value';\n+        var event = (options.model && options.model.event) || 'input'\n+        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n+        var on = data.on || (data.on = {});\n+        var existing = on[event];\n+        var callback = data.model.callback;\n+        if (isDef(existing)) {\n+            if (\n+                Array.isArray(existing)\n+                    ? existing.indexOf(callback) === -1\n+                    : existing !== callback\n+            ) {\n+                on[event] = [callback].concat(existing);\n+            }\n+        } else {\n+            on[event] = callback;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var SIMPLE_NORMALIZE = 1;\n+    var ALWAYS_NORMALIZE = 2;\n+\n+    \u002F\u002F wrapper function for providing a more flexible interface\n+    \u002F\u002F without getting yelled at by flow\n+    function createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType,\n+        alwaysNormalize\n+    ) {\n+        if (Array.isArray(data) || isPrimitive(data)) {\n+            normalizationType = children;\n+            children = data;\n+            data = undefined;\n+        }\n+        if (isTrue(alwaysNormalize)) {\n+            normalizationType = ALWAYS_NORMALIZE;\n+        }\n+        return _createElement(context, tag, data, children, normalizationType)\n+    }\n+\n+    function _createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType\n+    ) {\n+        if (isDef(data) && isDef((data).__ob__)) {\n+            warn(\n+                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n+                'Always create fresh vnode data objects in each render!',\n+                context\n+            );\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F object syntax in v-bind\n+        if (isDef(data) && isDef(data.is)) {\n+            tag = data.is;\n+        }\n+        if (!tag) {\n+            \u002F\u002F in case of component :is set to falsy value\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F warn against non-primitive key\n+        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n+        ) {\n+            {\n+                warn(\n+                    'Avoid using non-primitive value as key, ' +\n+                    'use string\u002Fnumber value instead.',\n+                    context\n+                );\n+            }\n+        }\n+        \u002F\u002F support single function children as default scoped slot\n+        if (Array.isArray(children) &&\n+            typeof children[0] === 'function'\n+        ) {\n+            data = data || {};\n+            data.scopedSlots = { default: children[0] };\n+            children.length = 0;\n+        }\n+        if (normalizationType === ALWAYS_NORMALIZE) {\n+            children = normalizeChildren(children);\n+        } else if (normalizationType === SIMPLE_NORMALIZE) {\n+            children = simpleNormalizeChildren(children);\n+        }\n+        var vnode, ns;\n+        if (typeof tag === 'string') {\n+            var Ctor;\n+            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n+            if (config.isReservedTag(tag)) {\n+                \u002F\u002F platform built-in elements\n+                vnode = new VNode(\n+                    config.parsePlatformTagName(tag), data, children,\n+                    undefined, undefined, context\n+                );\n+            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n+                \u002F\u002F component\n+                vnode = createComponent(Ctor, data, context, children, tag);\n+            } else {\n+                \u002F\u002F unknown or unlisted namespaced elements\n+                \u002F\u002F check at runtime because it may get assigned a namespace when its\n+                \u002F\u002F parent normalizes children\n+                vnode = new VNode(\n+                    tag, data, children,\n+                    undefined, undefined, context\n+                );\n+            }\n+        } else {\n+            \u002F\u002F direct component options \u002F constructor\n+            vnode = createComponent(tag, data, context, children);\n+        }\n+        if (Array.isArray(vnode)) {\n+            return vnode\n+        } else if (isDef(vnode)) {\n+            if (isDef(ns)) { applyNS(vnode, ns); }\n+            if (isDef(data)) { registerDeepBindings(data); }\n+            return vnode\n+        } else {\n+            return createEmptyVNode()\n+        }\n+    }\n+\n+    function applyNS (vnode, ns, force) {\n+        vnode.ns = ns;\n+        if (vnode.tag === 'foreignObject') {\n+            \u002F\u002F use default namespace inside foreignObject\n+            ns = undefined;\n+            force = true;\n+        }\n+        if (isDef(vnode.children)) {\n+            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\n+                var child = vnode.children[i];\n+                if (isDef(child.tag) && (\n+                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n+                    applyNS(child, ns, force);\n+                }\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F ref #5318\n+    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\n+    \u002F\u002F :class are used on slot nodes\n+    function registerDeepBindings (data) {\n+        if (isObject(data.style)) {\n+            traverse(data.style);\n+        }\n+        if (isObject(data.class)) {\n+            traverse(data.class);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initRender (vm) {\n+        vm._vnode = null; \u002F\u002F the root of the child tree\n+        vm._staticTrees = null; \u002F\u002F v-once cached trees\n+        var options = vm.$options;\n+        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\n+        var renderContext = parentVnode && parentVnode.context;\n+        vm.$slots = resolveSlots(options._renderChildren, renderContext);\n+        vm.$scopedSlots = emptyObject;\n+        \u002F\u002F bind the createElement fn to this instance\n+        \u002F\u002F so that we get proper render context inside it.\n+        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\n+        \u002F\u002F internal version is used by render functions compiled from templates\n+        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n+        \u002F\u002F normalization is always applied for the public version, used in\n+        \u002F\u002F user-written render functions.\n+        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n+\n+        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\n+        \u002F\u002F they need to be reactive so that HOCs using them are always updated\n+        var parentData = parentVnode && parentVnode.data;\n+\n+      \u002F* istanbul ignore else *\u002F\n+        {\n+            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n+            }, true);\n+            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n+            }, true);\n+        }\n+    }\n+\n+    var currentRenderingInstance = null;\n+\n+    function renderMixin (Vue) {\n+        \u002F\u002F install runtime convenience helpers\n+        installRenderHelpers(Vue.prototype);\n+\n+        Vue.prototype.$nextTick = function (fn) {\n+            return nextTick(fn, this)\n+        };\n+\n+        Vue.prototype._render = function () {\n+            var vm = this;\n+            var ref = vm.$options;\n+            var render = ref.render;\n+            var _parentVnode = ref._parentVnode;\n+\n+            if (_parentVnode) {\n+                vm.$scopedSlots = normalizeScopedSlots(\n+                    _parentVnode.data.scopedSlots,\n+                    vm.$slots,\n+                    vm.$scopedSlots\n+                );\n+            }\n+\n+            \u002F\u002F set parent vnode. this allows render functions to have access\n+            \u002F\u002F to the data on the placeholder node.\n+            vm.$vnode = _parentVnode;\n+            \u002F\u002F render self\n+            var vnode;\n+            try {\n+                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\n+                \u002F\u002F separately from one another. Nested component's render fns are called\n+                \u002F\u002F when parent component is patched.\n+                currentRenderingInstance = vm;\n+                vnode = render.call(vm._renderProxy, vm.$createElement);\n+            } catch (e) {\n+                handleError(e, vm, \"render\");\n+                \u002F\u002F return error render result,\n+                \u002F\u002F or previous vnode to prevent render error causing blank component\n+              \u002F* istanbul ignore else *\u002F\n+                if (vm.$options.renderError) {\n+                    try {\n+                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n+                    } catch (e) {\n+                        handleError(e, vm, \"renderError\");\n+                        vnode = vm._vnode;\n+                    }\n+                } else {\n+                    vnode = vm._vnode;\n+                }\n+            } finally {\n+                currentRenderingInstance = null;\n+            }\n+            \u002F\u002F if the returned array contains only a single node, allow it\n+            if (Array.isArray(vnode) && vnode.length === 1) {\n+                vnode = vnode[0];\n+            }\n+            \u002F\u002F return empty vnode in case the render function errored out\n+            if (!(vnode instanceof VNode)) {\n+                if (Array.isArray(vnode)) {\n+                    warn(\n+                        'Multiple root nodes returned from render function. Render function ' +\n+                        'should return a single root node.',\n+                        vm\n+                    );\n+                }\n+                vnode = createEmptyVNode();\n+            }\n+            \u002F\u002F set parent\n+            vnode.parent = _parentVnode;\n+            return vnode\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function ensureCtor (comp, base) {\n+        if (\n+            comp.__esModule ||\n+            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n+        ) {\n+            comp = comp.default;\n+        }\n+        return isObject(comp)\n+            ? base.extend(comp)\n+            : comp\n+    }\n+\n+    function createAsyncPlaceholder (\n+        factory,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        var node = createEmptyVNode();\n+        node.asyncFactory = factory;\n+        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n+        return node\n+    }\n+\n+    function resolveAsyncComponent (\n+        factory,\n+        baseCtor\n+    ) {\n+        if (isTrue(factory.error) && isDef(factory.errorComp)) {\n+            return factory.errorComp\n+        }\n+\n+        if (isDef(factory.resolved)) {\n+            return factory.resolved\n+        }\n+\n+        var owner = currentRenderingInstance;\n+        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n+            \u002F\u002F already pending\n+            factory.owners.push(owner);\n+        }\n+\n+        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n+            return factory.loadingComp\n+        }\n+\n+        if (owner && !isDef(factory.owners)) {\n+            var owners = factory.owners = [owner];\n+            var sync = true;\n+            var timerLoading = null;\n+            var timerTimeout = null\n+\n+            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n+\n+            var forceRender = function (renderCompleted) {\n+                for (var i = 0, l = owners.length; i \u003C l; i++) {\n+                    (owners[i]).$forceUpdate();\n+                }\n+\n+                if (renderCompleted) {\n+                    owners.length = 0;\n+                    if (timerLoading !== null) {\n+                        clearTimeout(timerLoading);\n+                        timerLoading = null;\n+                    }\n+                    if (timerTimeout !== null) {\n+                        clearTimeout(timerTimeout);\n+                        timerTimeout = null;\n+                    }\n+                }\n+            };\n+\n+            var resolve = once(function (res) {\n+                \u002F\u002F cache resolved\n+                factory.resolved = ensureCtor(res, baseCtor);\n+                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\n+                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\n+                if (!sync) {\n+                    forceRender(true);\n+                } else {\n+                    owners.length = 0;\n+                }\n+            });\n+\n+            var reject = once(function (reason) {\n+                warn(\n+                    \"Failed to resolve async component: \" + (String(factory)) +\n+                    (reason ? (\"\\nReason: \" + reason) : '')\n+                );\n+                if (isDef(factory.errorComp)) {\n+                    factory.error = true;\n+                    forceRender(true);\n+                }\n+            });\n+\n+            var res = factory(resolve, reject);\n+\n+            if (isObject(res)) {\n+                if (isPromise(res)) {\n+                    \u002F\u002F () => Promise\n+                    if (isUndef(factory.resolved)) {\n+                        res.then(resolve, reject);\n+                    }\n+                } else if (isPromise(res.component)) {\n+                    res.component.then(resolve, reject);\n+\n+                    if (isDef(res.error)) {\n+                        factory.errorComp = ensureCtor(res.error, baseCtor);\n+                    }\n+\n+                    if (isDef(res.loading)) {\n+                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\n+                        if (res.delay === 0) {\n+                            factory.loading = true;\n+                        } else {\n+                            timerLoading = setTimeout(function () {\n+                                timerLoading = null;\n+                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\n+                                    factory.loading = true;\n+                                    forceRender(false);\n+                                }\n+                            }, res.delay || 200);\n+                        }\n+                    }\n+\n+                    if (isDef(res.timeout)) {\n+                        timerTimeout = setTimeout(function () {\n+                            timerTimeout = null;\n+                            if (isUndef(factory.resolved)) {\n+                                reject(\n+                                    \"timeout (\" + (res.timeout) + \"ms)\"\n+                                );\n+                            }\n+                        }, res.timeout);\n+                    }\n+                }\n+            }\n+\n+            sync = false;\n+            \u002F\u002F return in case resolved synchronously\n+            return factory.loading\n+                ? factory.loadingComp\n+                : factory.resolved\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isAsyncPlaceholder (node) {\n+        return node.isComment && node.asyncFactory\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function getFirstComponentChild (children) {\n+        if (Array.isArray(children)) {\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var c = children[i];\n+                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n+                    return c\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    function initEvents (vm) {\n+        vm._events = Object.create(null);\n+        vm._hasHookEvent = false;\n+        \u002F\u002F init parent attached events\n+        var listeners = vm.$options._parentListeners;\n+        if (listeners) {\n+            updateComponentListeners(vm, listeners);\n+        }\n+    }\n+\n+    var target;\n+\n+    function add (event, fn) {\n+        target.$on(event, fn);\n+    }\n+\n+    function remove$1 (event, fn) {\n+        target.$off(event, fn);\n+    }\n+\n+    function createOnceHandler (event, fn) {\n+        var _target = target;\n+        return function onceHandler () {\n+            var res = fn.apply(null, arguments);\n+            if (res !== null) {\n+                _target.$off(event, onceHandler);\n+            }\n+        }\n+    }\n+\n+    function updateComponentListeners (\n+        vm,\n+        listeners,\n+        oldListeners\n+    ) {\n+        target = vm;\n+        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n+        target = undefined;\n+    }\n+\n+    function eventsMixin (Vue) {\n+        var hookRE = \u002F^hook:\u002F;\n+        Vue.prototype.$on = function (event, fn) {\n+            var vm = this;\n+            if (Array.isArray(event)) {\n+                for (var i = 0, l = event.length; i \u003C l; i++) {\n+                    vm.$on(event[i], fn);\n+                }\n+            } else {\n+                (vm._events[event] || (vm._events[event] = [])).push(fn);\n+                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\n+                \u002F\u002F instead of a hash lookup\n+                if (hookRE.test(event)) {\n+                    vm._hasHookEvent = true;\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$once = function (event, fn) {\n+            var vm = this;\n+            function on () {\n+                vm.$off(event, on);\n+                fn.apply(vm, arguments);\n+            }\n+            on.fn = fn;\n+            vm.$on(event, on);\n+            return vm\n+        };\n+\n+        Vue.prototype.$off = function (event, fn) {\n+            var vm = this;\n+            \u002F\u002F all\n+            if (!arguments.length) {\n+                vm._events = Object.create(null);\n+                return vm\n+            }\n+            \u002F\u002F array of events\n+            if (Array.isArray(event)) {\n+                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\n+                    vm.$off(event[i$1], fn);\n+                }\n+                return vm\n+            }\n+            \u002F\u002F specific event\n+            var cbs = vm._events[event];\n+            if (!cbs) {\n+                return vm\n+            }\n+            if (!fn) {\n+                vm._events[event] = null;\n+                return vm\n+            }\n+            \u002F\u002F specific handler\n+            var cb;\n+            var i = cbs.length;\n+            while (i--) {\n+                cb = cbs[i];\n+                if (cb === fn || cb.fn === fn) {\n+                    cbs.splice(i, 1);\n+                    break\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$emit = function (event) {\n+            var vm = this;\n+            {\n+                var lowerCaseEvent = event.toLowerCase();\n+                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n+                    tip(\n+                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n+                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n+                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\n+                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\n+                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n+                    );\n+                }\n+            }\n+            var cbs = vm._events[event];\n+            if (cbs) {\n+                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n+                var args = toArray(arguments, 1);\n+                var info = \"event handler for \\\"\" + event + \"\\\"\";\n+                for (var i = 0, l = cbs.length; i \u003C l; i++) {\n+                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n+                }\n+            }\n+            return vm\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var activeInstance = null;\n+    var isUpdatingChildComponent = false;\n+\n+    function setActiveInstance(vm) {\n+        var prevActiveInstance = activeInstance;\n+        activeInstance = vm;\n+        return function () {\n+            activeInstance = prevActiveInstance;\n+        }\n+    }\n+\n+    function initLifecycle (vm) {\n+        var options = vm.$options;\n+\n+        \u002F\u002F locate first non-abstract parent\n+        var parent = options.parent;\n+        if (parent && !options.abstract) {\n+            while (parent.$options.abstract && parent.$parent) {\n+                parent = parent.$parent;\n+            }\n+            parent.$children.push(vm);\n+        }\n+\n+        vm.$parent = parent;\n+        vm.$root = parent ? parent.$root : vm;\n+\n+        vm.$children = [];\n+        vm.$refs = {};\n+\n+        vm._watcher = null;\n+        vm._inactive = null;\n+        vm._directInactive = false;\n+        vm._isMounted = false;\n+        vm._isDestroyed = false;\n+        vm._isBeingDestroyed = false;\n+    }\n+\n+    function lifecycleMixin (Vue) {\n+        Vue.prototype._update = function (vnode, hydrating) {\n+            var vm = this;\n+            var prevEl = vm.$el;\n+            var prevVnode = vm._vnode;\n+            var restoreActiveInstance = setActiveInstance(vm);\n+            vm._vnode = vnode;\n+            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\n+            \u002F\u002F based on the rendering backend used.\n+            if (!prevVnode) {\n+                \u002F\u002F initial render\n+                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\n+            } else {\n+                \u002F\u002F updates\n+                vm.$el = vm.__patch__(prevVnode, vnode);\n+            }\n+            restoreActiveInstance();\n+            \u002F\u002F update __vue__ reference\n+            if (prevEl) {\n+                prevEl.__vue__ = null;\n+            }\n+            if (vm.$el) {\n+                vm.$el.__vue__ = vm;\n+            }\n+            \u002F\u002F if parent is an HOC, update its $el as well\n+            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n+                vm.$parent.$el = vm.$el;\n+            }\n+            \u002F\u002F updated hook is called by the scheduler to ensure that children are\n+            \u002F\u002F updated in a parent's updated hook.\n+        };\n+\n+        Vue.prototype.$forceUpdate = function () {\n+            var vm = this;\n+            if (vm._watcher) {\n+                vm._watcher.update();\n+            }\n+        };\n+\n+        Vue.prototype.$destroy = function () {\n+            var vm = this;\n+            if (vm._isBeingDestroyed) {\n+                return\n+            }\n+            callHook(vm, 'beforeDestroy');\n+            vm._isBeingDestroyed = true;\n+            \u002F\u002F remove self from parent\n+            var parent = vm.$parent;\n+            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n+                remove(parent.$children, vm);\n+            }\n+            \u002F\u002F teardown watchers\n+            if (vm._watcher) {\n+                vm._watcher.teardown();\n+            }\n+            var i = vm._watchers.length;\n+            while (i--) {\n+                vm._watchers[i].teardown();\n+            }\n+            \u002F\u002F remove reference from data ob\n+            \u002F\u002F frozen object may not have observer.\n+            if (vm._data.__ob__) {\n+                vm._data.__ob__.vmCount--;\n+            }\n+            \u002F\u002F call the last hook...\n+            vm._isDestroyed = true;\n+            \u002F\u002F invoke destroy hooks on current rendered tree\n+            vm.__patch__(vm._vnode, null);\n+            \u002F\u002F fire destroyed hook\n+            callHook(vm, 'destroyed');\n+            \u002F\u002F turn off all instance listeners.\n+            vm.$off();\n+            \u002F\u002F remove __vue__ reference\n+            if (vm.$el) {\n+                vm.$el.__vue__ = null;\n+            }\n+            \u002F\u002F release circular reference (#6759)\n+            if (vm.$vnode) {\n+                vm.$vnode.parent = null;\n+            }\n+        };\n+    }\n+\n+    function mountComponent (\n+        vm,\n+        el,\n+        hydrating\n+    ) {\n+        vm.$el = el;\n+        if (!vm.$options.render) {\n+            vm.$options.render = createEmptyVNode;\n+            {\n+              \u002F* istanbul ignore if *\u002F\n+                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n+                    vm.$options.el || el) {\n+                    warn(\n+                        'You are using the runtime-only build of Vue where the template ' +\n+                        'compiler is not available. Either pre-compile the templates into ' +\n+                        'render functions, or use the compiler-included build.',\n+                        vm\n+                    );\n+                } else {\n+                    warn(\n+                        'Failed to mount component: template or render function not defined.',\n+                        vm\n+                    );\n+                }\n+            }\n+        }\n+        callHook(vm, 'beforeMount');\n+\n+        var updateComponent;\n+      \u002F* istanbul ignore if *\u002F\n+        if (config.performance && mark) {\n+            updateComponent = function () {\n+                var name = vm._name;\n+                var id = vm._uid;\n+                var startTag = \"vue-perf-start:\" + id;\n+                var endTag = \"vue-perf-end:\" + id;\n+\n+                mark(startTag);\n+                var vnode = vm._render();\n+                mark(endTag);\n+                measure((\"vue \" + name + \" render\"), startTag, endTag);\n+\n+                mark(startTag);\n+                vm._update(vnode, hydrating);\n+                mark(endTag);\n+                measure((\"vue \" + name + \" patch\"), startTag, endTag);\n+            };\n+        } else {\n+            updateComponent = function () {\n+                vm._update(vm._render(), hydrating);\n+            };\n+        }\n+\n+        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\n+        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\n+        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\n+        new Watcher(vm, updateComponent, noop, {\n+            before: function before () {\n+                if (vm._isMounted && !vm._isDestroyed) {\n+                    callHook(vm, 'beforeUpdate');\n+                }\n+            }\n+        }, true \u002F* isRenderWatcher *\u002F);\n+        hydrating = false;\n+\n+        \u002F\u002F manually mounted instance, call mounted on self\n+        \u002F\u002F mounted is called for render-created child components in its inserted hook\n+        if (vm.$vnode == null) {\n+            vm._isMounted = true;\n+            callHook(vm, 'mounted');\n+        }\n+        return vm\n+    }\n+\n+    function updateChildComponent (\n+        vm,\n+        propsData,\n+        listeners,\n+        parentVnode,\n+        renderChildren\n+    ) {\n+        {\n+            isUpdatingChildComponent = true;\n+        }\n+\n+        \u002F\u002F determine whether component has slot children\n+        \u002F\u002F we need to do this before overwriting $options._renderChildren.\n+\n+        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\n+        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\n+        \u002F\u002F \"$stable\" marker.\n+        var newScopedSlots = parentVnode.data.scopedSlots;\n+        var oldScopedSlots = vm.$scopedSlots;\n+        var hasDynamicScopedSlot = !!(\n+            (newScopedSlots && !newScopedSlots.$stable) ||\n+            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n+            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n+        );\n+\n+        \u002F\u002F Any static slot children from the parent may have changed during parent's\n+        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\n+        \u002F\u002F update is necessary to ensure correctness.\n+        var needsForceUpdate = !!(\n+            renderChildren ||               \u002F\u002F has new static slots\n+            vm.$options._renderChildren ||  \u002F\u002F has old static slots\n+            hasDynamicScopedSlot\n+        );\n+\n+        vm.$options._parentVnode = parentVnode;\n+        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\n+\n+        if (vm._vnode) { \u002F\u002F update child tree's parent\n+            vm._vnode.parent = parentVnode;\n+        }\n+        vm.$options._renderChildren = renderChildren;\n+\n+        \u002F\u002F update $attrs and $listeners hash\n+        \u002F\u002F these are also reactive so they may trigger child update if the child\n+        \u002F\u002F used them during render\n+        vm.$attrs = parentVnode.data.attrs || emptyObject;\n+        vm.$listeners = listeners || emptyObject;\n+\n+        \u002F\u002F update props\n+        if (propsData && vm.$options.props) {\n+            toggleObserving(false);\n+            var props = vm._props;\n+            var propKeys = vm.$options._propKeys || [];\n+            for (var i = 0; i \u003C propKeys.length; i++) {\n+                var key = propKeys[i];\n+                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\n+                props[key] = validateProp(key, propOptions, propsData, vm);\n+            }\n+            toggleObserving(true);\n+            \u002F\u002F keep a copy of raw propsData\n+            vm.$options.propsData = propsData;\n+        }\n+\n+        \u002F\u002F update listeners\n+        listeners = listeners || emptyObject;\n+        var oldListeners = vm.$options._parentListeners;\n+        vm.$options._parentListeners = listeners;\n+        updateComponentListeners(vm, listeners, oldListeners);\n+\n+        \u002F\u002F resolve slots + force update if has children\n+        if (needsForceUpdate) {\n+            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n+            vm.$forceUpdate();\n+        }\n+\n+        {\n+            isUpdatingChildComponent = false;\n+        }\n+    }\n+\n+    function isInInactiveTree (vm) {\n+        while (vm && (vm = vm.$parent)) {\n+            if (vm._inactive) { return true }\n+        }\n+        return false\n+    }\n+\n+    function activateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = false;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        } else if (vm._directInactive) {\n+            return\n+        }\n+        if (vm._inactive || vm._inactive === null) {\n+            vm._inactive = false;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                activateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'activated');\n+        }\n+    }\n+\n+    function deactivateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = true;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        }\n+        if (!vm._inactive) {\n+            vm._inactive = true;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                deactivateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'deactivated');\n+        }\n+    }\n+\n+    function callHook (vm, hook) {\n+        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\n+        pushTarget();\n+        var handlers = vm.$options[hook];\n+        var info = hook + \" hook\";\n+        if (handlers) {\n+            for (var i = 0, j = handlers.length; i \u003C j; i++) {\n+                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n+            }\n+        }\n+        if (vm._hasHookEvent) {\n+            vm.$emit('hook:' + hook);\n+        }\n+        popTarget();\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var MAX_UPDATE_COUNT = 100;\n+\n+    var queue = [];\n+    var activatedChildren = [];\n+    var has = {};\n+    var circular = {};\n+    var waiting = false;\n+    var flushing = false;\n+    var index = 0;\n+\n+    \u002F**\n+     * Reset the scheduler's state.\n+     *\u002F\n+    function resetSchedulerState () {\n+        index = queue.length = activatedChildren.length = 0;\n+        has = {};\n+        {\n+            circular = {};\n+        }\n+        waiting = flushing = false;\n+    }\n+\n+    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\n+    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\n+    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\n+    \u002F\u002F every time the scheduler flushes and use that for all event listeners\n+    \u002F\u002F attached during that flush.\n+    var currentFlushTimestamp = 0;\n+\n+    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\n+    var getNow = Date.now;\n+\n+    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\n+    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\n+    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\n+    \u002F\u002F same timestamp type when saving the flush timestamp.\n+    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\n+    \u002F\u002F implementations (#9632)\n+    if (inBrowser && !isIE) {\n+        var performance = window.performance;\n+        if (\n+            performance &&\n+            typeof performance.now === 'function' &&\n+            getNow() > document.createEvent('Event').timeStamp\n+        ) {\n+            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\n+            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\n+            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\n+            \u002F\u002F well.\n+            getNow = function () { return performance.now(); };\n+        }\n+    }\n+\n+    \u002F**\n+     * Flush both queues and run the watchers.\n+     *\u002F\n+    function flushSchedulerQueue () {\n+        currentFlushTimestamp = getNow();\n+        flushing = true;\n+        var watcher, id;\n+\n+        \u002F\u002F Sort queue before flush.\n+        \u002F\u002F This ensures that:\n+        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\n+        \u002F\u002F    created before the child)\n+        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\n+        \u002F\u002F    user watchers are created before the render watcher)\n+        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\n+        \u002F\u002F    its watchers can be skipped.\n+        queue.sort(function (a, b) { return a.id - b.id; });\n+\n+        \u002F\u002F do not cache length because more watchers might be pushed\n+        \u002F\u002F as we run existing watchers\n+        for (index = 0; index \u003C queue.length; index++) {\n+            watcher = queue[index];\n+            if (watcher.before) {\n+                watcher.before();\n+            }\n+            id = watcher.id;\n+            has[id] = null;\n+            watcher.run();\n+            \u002F\u002F in dev build, check and stop circular updates.\n+            if (has[id] != null) {\n+                circular[id] = (circular[id] || 0) + 1;\n+                if (circular[id] > MAX_UPDATE_COUNT) {\n+                    warn(\n+                        'You may have an infinite update loop ' + (\n+                            watcher.user\n+                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n+                                : \"in a component render function.\"\n+                        ),\n+                        watcher.vm\n+                    );\n+                    break\n+                }\n+            }\n+        }\n+\n+        \u002F\u002F keep copies of post queues before resetting state\n+        var activatedQueue = activatedChildren.slice();\n+        var updatedQueue = queue.slice();\n+\n+        resetSchedulerState();\n+\n+        \u002F\u002F call component updated and activated hooks\n+        callActivatedHooks(activatedQueue);\n+        callUpdatedHooks(updatedQueue);\n+\n+        \u002F\u002F devtool hook\n+      \u002F* istanbul ignore if *\u002F\n+        if (devtools && config.devtools) {\n+            devtools.emit('flush');\n+        }\n+    }\n+\n+    function callUpdatedHooks (queue) {\n+        var i = queue.length;\n+        while (i--) {\n+            var watcher = queue[i];\n+            var vm = watcher.vm;\n+            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n+                callHook(vm, 'updated');\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Queue a kept-alive component that was activated during patch.\n+     * The queue will be processed after the entire tree has been patched.\n+     *\u002F\n+    function queueActivatedComponent (vm) {\n+        \u002F\u002F setting _inactive to false here so that a render function can\n+        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\n+        vm._inactive = false;\n+        activatedChildren.push(vm);\n+    }\n+\n+    function callActivatedHooks (queue) {\n+        for (var i = 0; i \u003C queue.length; i++) {\n+            queue[i]._inactive = true;\n+            activateChildComponent(queue[i], true \u002F* true *\u002F);\n+        }\n+    }\n+\n+    \u002F**\n+     * Push a watcher into the watcher queue.\n+     * Jobs with duplicate IDs will be skipped unless it's\n+     * pushed when the queue is being flushed.\n+     *\u002F\n+    function queueWatcher (watcher) {\n+        var id = watcher.id;\n+        if (has[id] == null) {\n+            has[id] = true;\n+            if (!flushing) {\n+                queue.push(watcher);\n+            } else {\n+                \u002F\u002F if already flushing, splice the watcher based on its id\n+                \u002F\u002F if already past its id, it will be run next immediately.\n+                var i = queue.length - 1;\n+                while (i > index && queue[i].id > watcher.id) {\n+                    i--;\n+                }\n+                queue.splice(i + 1, 0, watcher);\n+            }\n+            \u002F\u002F queue the flush\n+            if (!waiting) {\n+                waiting = true;\n+\n+                if (!config.async) {\n+                    flushSchedulerQueue();\n+                    return\n+                }\n+                nextTick(flushSchedulerQueue);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var uid$2 = 0;\n+\n+    \u002F**\n+     * A watcher parses an expression, collects dependencies,\n+     * and fires callback when the expression value changes.\n+     * This is used for both the $watch() api and directives.\n+     *\u002F\n+    var Watcher = function Watcher (\n+        vm,\n+        expOrFn,\n+        cb,\n+        options,\n+        isRenderWatcher\n+    ) {\n+        this.vm = vm;\n+        if (isRenderWatcher) {\n+            vm._watcher = this;\n+        }\n+        vm._watchers.push(this);\n+        \u002F\u002F options\n+        if (options) {\n+            this.deep = !!options.deep;\n+            this.user = !!options.user;\n+            this.lazy = !!options.lazy;\n+            this.sync = !!options.sync;\n+            this.before = options.before;\n+        } else {\n+            this.deep = this.user = this.lazy = this.sync = false;\n+        }\n+        this.cb = cb;\n+        this.id = ++uid$2; \u002F\u002F uid for batching\n+        this.active = true;\n+        this.dirty = this.lazy; \u002F\u002F for lazy watchers\n+        this.deps = [];\n+        this.newDeps = [];\n+        this.depIds = new _Set();\n+        this.newDepIds = new _Set();\n+        this.expression = expOrFn.toString();\n+        \u002F\u002F parse expression for getter\n+        if (typeof expOrFn === 'function') {\n+            this.getter = expOrFn;\n+        } else {\n+            this.getter = parsePath(expOrFn);\n+            if (!this.getter) {\n+                this.getter = noop;\n+                warn(\n+                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n+                    'Watcher only accepts simple dot-delimited paths. ' +\n+                    'For full control, use a function instead.',\n+                    vm\n+                );\n+            }\n+        }\n+        this.value = this.lazy\n+            ? undefined\n+            : this.get();\n+    };\n+\n+    \u002F**\n+     * Evaluate the getter, and re-collect dependencies.\n+     *\u002F\n+    Watcher.prototype.get = function get () {\n+        pushTarget(this);\n+        var value;\n+        var vm = this.vm;\n+        try {\n+            value = this.getter.call(vm, vm);\n+        } catch (e) {\n+            if (this.user) {\n+                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+            } else {\n+                throw e\n+            }\n+        } finally {\n+            \u002F\u002F \"touch\" every property so they are all tracked as\n+            \u002F\u002F dependencies for deep watching\n+            if (this.deep) {\n+                traverse(value);\n+            }\n+            popTarget();\n+            this.cleanupDeps();\n+        }\n+        return value\n+    };\n+\n+    \u002F**\n+     * Add a dependency to this directive.\n+     *\u002F\n+    Watcher.prototype.addDep = function addDep (dep) {\n+        var id = dep.id;\n+        if (!this.newDepIds.has(id)) {\n+            this.newDepIds.add(id);\n+            this.newDeps.push(dep);\n+            if (!this.depIds.has(id)) {\n+                dep.addSub(this);\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Clean up for dependency collection.\n+     *\u002F\n+    Watcher.prototype.cleanupDeps = function cleanupDeps () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            var dep = this.deps[i];\n+            if (!this.newDepIds.has(dep.id)) {\n+                dep.removeSub(this);\n+            }\n+        }\n+        var tmp = this.depIds;\n+        this.depIds = this.newDepIds;\n+        this.newDepIds = tmp;\n+        this.newDepIds.clear();\n+        tmp = this.deps;\n+        this.deps = this.newDeps;\n+        this.newDeps = tmp;\n+        this.newDeps.length = 0;\n+    };\n+\n+    \u002F**\n+     * Subscriber interface.\n+     * Will be called when a dependency changes.\n+     *\u002F\n+    Watcher.prototype.update = function update () {\n+      \u002F* istanbul ignore else *\u002F\n+        if (this.lazy) {\n+            this.dirty = true;\n+        } else if (this.sync) {\n+            this.run();\n+        } else {\n+            queueWatcher(this);\n+        }\n+    };\n+\n+    \u002F**\n+     * Scheduler job interface.\n+     * Will be called by the scheduler.\n+     *\u002F\n+    Watcher.prototype.run = function run () {\n+        if (this.active) {\n+            var value = this.get();\n+            if (\n+                value !== this.value ||\n+                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\n+                \u002F\u002F when the value is the same, because the value may\n+                \u002F\u002F have mutated.\n+                isObject(value) ||\n+                this.deep\n+            ) {\n+                \u002F\u002F set new value\n+                var oldValue = this.value;\n+                this.value = value;\n+                if (this.user) {\n+                    try {\n+                        this.cb.call(this.vm, value, oldValue);\n+                    } catch (e) {\n+                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+                    }\n+                } else {\n+                    this.cb.call(this.vm, value, oldValue);\n+                }\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Evaluate the value of the watcher.\n+     * This only gets called for lazy watchers.\n+     *\u002F\n+    Watcher.prototype.evaluate = function evaluate () {\n+        this.value = this.get();\n+        this.dirty = false;\n+    };\n+\n+    \u002F**\n+     * Depend on all deps collected by this watcher.\n+     *\u002F\n+    Watcher.prototype.depend = function depend () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            this.deps[i].depend();\n+        }\n+    };\n+\n+    \u002F**\n+     * Remove self from all dependencies' subscriber list.\n+     *\u002F\n+    Watcher.prototype.teardown = function teardown () {\n+        if (this.active) {\n+            \u002F\u002F remove self from vm's watcher list\n+            \u002F\u002F this is a somewhat expensive operation so we skip it\n+            \u002F\u002F if the vm is being destroyed.\n+            if (!this.vm._isBeingDestroyed) {\n+                remove(this.vm._watchers, this);\n+            }\n+            var i = this.deps.length;\n+            while (i--) {\n+                this.deps[i].removeSub(this);\n+            }\n+            this.active = false;\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var sharedPropertyDefinition = {\n+        enumerable: true,\n+        configurable: true,\n+        get: noop,\n+        set: noop\n+    };\n+\n+    function proxy (target, sourceKey, key) {\n+        sharedPropertyDefinition.get = function proxyGetter () {\n+            return this[sourceKey][key]\n+        };\n+        sharedPropertyDefinition.set = function proxySetter (val) {\n+            this[sourceKey][key] = val;\n+        };\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function initState (vm) {\n+        vm._watchers = [];\n+        var opts = vm.$options;\n+        if (opts.props) { initProps(vm, opts.props); }\n+        if (opts.methods) { initMethods(vm, opts.methods); }\n+        if (opts.data) {\n+            initData(vm);\n+        } else {\n+            observe(vm._data = {}, true \u002F* asRootData *\u002F);\n+        }\n+        if (opts.computed) { initComputed(vm, opts.computed); }\n+        if (opts.watch && opts.watch !== nativeWatch) {\n+            initWatch(vm, opts.watch);\n+        }\n+    }\n+\n+    function initProps (vm, propsOptions) {\n+        var propsData = vm.$options.propsData || {};\n+        var props = vm._props = {};\n+        \u002F\u002F cache prop keys so that future props updates can iterate using Array\n+        \u002F\u002F instead of dynamic object key enumeration.\n+        var keys = vm.$options._propKeys = [];\n+        var isRoot = !vm.$parent;\n+        \u002F\u002F root instance props should be converted\n+        if (!isRoot) {\n+            toggleObserving(false);\n+        }\n+        var loop = function ( key ) {\n+            keys.push(key);\n+            var value = validateProp(key, propsOptions, propsData, vm);\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                var hyphenatedKey = hyphenate(key);\n+                if (isReservedAttribute(hyphenatedKey) ||\n+                    config.isReservedAttr(hyphenatedKey)) {\n+                    warn(\n+                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n+                        vm\n+                    );\n+                }\n+                defineReactive$$1(props, key, value, function () {\n+                    if (!isRoot && !isUpdatingChildComponent) {\n+                        warn(\n+                            \"Avoid mutating a prop directly since the value will be \" +\n+                            \"overwritten whenever the parent component re-renders. \" +\n+                            \"Instead, use a data or computed property based on the prop's \" +\n+                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    }\n+                });\n+            }\n+            \u002F\u002F static props are already proxied on the component's prototype\n+            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\n+            \u002F\u002F instantiation here.\n+            if (!(key in vm)) {\n+                proxy(vm, \"_props\", key);\n+            }\n+        };\n+\n+        for (var key in propsOptions) loop( key );\n+        toggleObserving(true);\n+    }\n+\n+    function initData (vm) {\n+        var data = vm.$options.data;\n+        data = vm._data = typeof data === 'function'\n+            ? getData(data, vm)\n+            : data || {};\n+        if (!isPlainObject(data)) {\n+            data = {};\n+            warn(\n+                'data functions should return an object:\\n' +\n+                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\n+                vm\n+            );\n+        }\n+        \u002F\u002F proxy data on instance\n+        var keys = Object.keys(data);\n+        var props = vm.$options.props;\n+        var methods = vm.$options.methods;\n+        var i = keys.length;\n+        while (i--) {\n+            var key = keys[i];\n+            {\n+                if (methods && hasOwn(methods, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n+                        vm\n+                    );\n+                }\n+            }\n+            if (props && hasOwn(props, key)) {\n+                warn(\n+                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n+                    \"Use prop default value instead.\",\n+                    vm\n+                );\n+            } else if (!isReserved(key)) {\n+                proxy(vm, \"_data\", key);\n+            }\n+        }\n+        \u002F\u002F observe data\n+        observe(data, true \u002F* asRootData *\u002F);\n+    }\n+\n+    function getData (data, vm) {\n+        \u002F\u002F #7573 disable dep collection when invoking data getters\n+        pushTarget();\n+        try {\n+            return data.call(vm, vm)\n+        } catch (e) {\n+            handleError(e, vm, \"data()\");\n+            return {}\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    var computedWatcherOptions = { lazy: true };\n+\n+    function initComputed (vm, computed) {\n+        \u002F\u002F $flow-disable-line\n+        var watchers = vm._computedWatchers = Object.create(null);\n+        \u002F\u002F computed properties are just getters during SSR\n+        var isSSR = isServerRendering();\n+\n+        for (var key in computed) {\n+            var userDef = computed[key];\n+            var getter = typeof userDef === 'function' ? userDef : userDef.get;\n+            if (getter == null) {\n+                warn(\n+                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n+                    vm\n+                );\n+            }\n+\n+            if (!isSSR) {\n+                \u002F\u002F create internal watcher for the computed property.\n+                watchers[key] = new Watcher(\n+                    vm,\n+                    getter || noop,\n+                    noop,\n+                    computedWatcherOptions\n+                );\n+            }\n+\n+            \u002F\u002F component-defined computed properties are already defined on the\n+            \u002F\u002F component prototype. We only need to define computed properties defined\n+            \u002F\u002F at instantiation here.\n+            if (!(key in vm)) {\n+                defineComputed(vm, key, userDef);\n+            } else {\n+                if (key in vm.$data) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n+                } else if (vm.$options.props && key in vm.$options.props) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n+                }\n+            }\n+        }\n+    }\n+\n+    function defineComputed (\n+        target,\n+        key,\n+        userDef\n+    ) {\n+        var shouldCache = !isServerRendering();\n+        if (typeof userDef === 'function') {\n+            sharedPropertyDefinition.get = shouldCache\n+                ? createComputedGetter(key)\n+                : createGetterInvoker(userDef);\n+            sharedPropertyDefinition.set = noop;\n+        } else {\n+            sharedPropertyDefinition.get = userDef.get\n+                ? shouldCache && userDef.cache !== false\n+                    ? createComputedGetter(key)\n+                    : createGetterInvoker(userDef.get)\n+                : noop;\n+            sharedPropertyDefinition.set = userDef.set || noop;\n+        }\n+        if (sharedPropertyDefinition.set === noop) {\n+            sharedPropertyDefinition.set = function () {\n+                warn(\n+                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n+                    this\n+                );\n+            };\n+        }\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function createComputedGetter (key) {\n+        return function computedGetter () {\n+            var watcher = this._computedWatchers && this._computedWatchers[key];\n+            if (watcher) {\n+                if (watcher.dirty) {\n+                    watcher.evaluate();\n+                }\n+                if (Dep.target) {\n+                    watcher.depend();\n+                }\n+                return watcher.value\n+            }\n+        }\n+    }\n+\n+    function createGetterInvoker(fn) {\n+        return function computedGetter () {\n+            return fn.call(this, this)\n+        }\n+    }\n+\n+    function initMethods (vm, methods) {\n+        var props = vm.$options.props;\n+        for (var key in methods) {\n+            {\n+                if (typeof methods[key] !== 'function') {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n+                        \"Did you reference the function correctly?\",\n+                        vm\n+                    );\n+                }\n+                if (props && hasOwn(props, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n+                        vm\n+                    );\n+                }\n+                if ((key in vm) && isReserved(key)) {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n+                        \"Avoid defining component methods that start with _ or $.\"\n+                    );\n+                }\n+            }\n+            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n+        }\n+    }\n+\n+    function initWatch (vm, watch) {\n+        for (var key in watch) {\n+            var handler = watch[key];\n+            if (Array.isArray(handler)) {\n+                for (var i = 0; i \u003C handler.length; i++) {\n+                    createWatcher(vm, key, handler[i]);\n+                }\n+            } else {\n+                createWatcher(vm, key, handler);\n+            }\n+        }\n+    }\n+\n+    function createWatcher (\n+        vm,\n+        expOrFn,\n+        handler,\n+        options\n+    ) {\n+        if (isPlainObject(handler)) {\n+            options = handler;\n+            handler = handler.handler;\n+        }\n+        if (typeof handler === 'string') {\n+            handler = vm[handler];\n+        }\n+        return vm.$watch(expOrFn, handler, options)\n+    }\n+\n+    function stateMixin (Vue) {\n+        \u002F\u002F flow somehow has problems with directly declared definition object\n+        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\n+        \u002F\u002F the object here.\n+        var dataDef = {};\n+        dataDef.get = function () { return this._data };\n+        var propsDef = {};\n+        propsDef.get = function () { return this._props };\n+        {\n+            dataDef.set = function () {\n+                warn(\n+                    'Avoid replacing instance root $data. ' +\n+                    'Use nested data properties instead.',\n+                    this\n+                );\n+            };\n+            propsDef.set = function () {\n+                warn(\"$props is readonly.\", this);\n+            };\n+        }\n+        Object.defineProperty(Vue.prototype, '$data', dataDef);\n+        Object.defineProperty(Vue.prototype, '$props', propsDef);\n+\n+        Vue.prototype.$set = set;\n+        Vue.prototype.$delete = del;\n+\n+        Vue.prototype.$watch = function (\n+            expOrFn,\n+            cb,\n+            options\n+        ) {\n+            var vm = this;\n+            if (isPlainObject(cb)) {\n+                return createWatcher(vm, expOrFn, cb, options)\n+            }\n+            options = options || {};\n+            options.user = true;\n+            var watcher = new Watcher(vm, expOrFn, cb, options);\n+            if (options.immediate) {\n+                try {\n+                    cb.call(vm, watcher.value);\n+                } catch (error) {\n+                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n+                }\n+            }\n+            return function unwatchFn () {\n+                watcher.teardown();\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid$3 = 0;\n+\n+    function initMixin (Vue) {\n+        Vue.prototype._init = function (options) {\n+            var vm = this;\n+            \u002F\u002F a uid\n+            vm._uid = uid$3++;\n+\n+            var startTag, endTag;\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                startTag = \"vue-perf-start:\" + (vm._uid);\n+                endTag = \"vue-perf-end:\" + (vm._uid);\n+                mark(startTag);\n+            }\n+\n+            \u002F\u002F a flag to avoid this being observed\n+            vm._isVue = true;\n+            \u002F\u002F merge options\n+            if (options && options._isComponent) {\n+                \u002F\u002F optimize internal component instantiation\n+                \u002F\u002F since dynamic options merging is pretty slow, and none of the\n+                \u002F\u002F internal component options needs special treatment.\n+                initInternalComponent(vm, options);\n+            } else {\n+                vm.$options = mergeOptions(\n+                    resolveConstructorOptions(vm.constructor),\n+                    options || {},\n+                    vm\n+                );\n+            }\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                initProxy(vm);\n+            }\n+            \u002F\u002F expose real self\n+            vm._self = vm;\n+            initLifecycle(vm);\n+            initEvents(vm);\n+            initRender(vm);\n+            callHook(vm, 'beforeCreate');\n+            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\n+            initState(vm);\n+            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\n+            callHook(vm, 'created');\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                vm._name = formatComponentName(vm, false);\n+                mark(endTag);\n+                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n+            }\n+\n+            if (vm.$options.el) {\n+                vm.$mount(vm.$options.el);\n+            }\n+        };\n+    }\n+\n+    function initInternalComponent (vm, options) {\n+        var opts = vm.$options = Object.create(vm.constructor.options);\n+        \u002F\u002F doing this because it's faster than dynamic enumeration.\n+        var parentVnode = options._parentVnode;\n+        opts.parent = options.parent;\n+        opts._parentVnode = parentVnode;\n+\n+        var vnodeComponentOptions = parentVnode.componentOptions;\n+        opts.propsData = vnodeComponentOptions.propsData;\n+        opts._parentListeners = vnodeComponentOptions.listeners;\n+        opts._renderChildren = vnodeComponentOptions.children;\n+        opts._componentTag = vnodeComponentOptions.tag;\n+\n+        if (options.render) {\n+            opts.render = options.render;\n+            opts.staticRenderFns = options.staticRenderFns;\n+        }\n+    }\n+\n+    function resolveConstructorOptions (Ctor) {\n+        var options = Ctor.options;\n+        if (Ctor.super) {\n+            var superOptions = resolveConstructorOptions(Ctor.super);\n+            var cachedSuperOptions = Ctor.superOptions;\n+            if (superOptions !== cachedSuperOptions) {\n+                \u002F\u002F super option changed,\n+                \u002F\u002F need to resolve new options.\n+                Ctor.superOptions = superOptions;\n+                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\n+                var modifiedOptions = resolveModifiedOptions(Ctor);\n+                \u002F\u002F update base extend options\n+                if (modifiedOptions) {\n+                    extend(Ctor.extendOptions, modifiedOptions);\n+                }\n+                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n+                if (options.name) {\n+                    options.components[options.name] = Ctor;\n+                }\n+            }\n+        }\n+        return options\n+    }\n+\n+    function resolveModifiedOptions (Ctor) {\n+        var modified;\n+        var latest = Ctor.options;\n+        var sealed = Ctor.sealedOptions;\n+        for (var key in latest) {\n+            if (latest[key] !== sealed[key]) {\n+                if (!modified) { modified = {}; }\n+                modified[key] = latest[key];\n+            }\n+        }\n+        return modified\n+    }\n+\n+    function Vue (options) {\n+        if (!(this instanceof Vue)\n+        ) {\n+            warn('Vue is a constructor and should be called with the `new` keyword');\n+        }\n+        this._init(options);\n+    }\n+\n+    initMixin(Vue);\n+    stateMixin(Vue);\n+    eventsMixin(Vue);\n+    lifecycleMixin(Vue);\n+    renderMixin(Vue);\n+\n+  \u002F*  *\u002F\n+\n+    function initUse (Vue) {\n+        Vue.use = function (plugin) {\n+            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n+            if (installedPlugins.indexOf(plugin) > -1) {\n+                return this\n+            }\n+\n+            \u002F\u002F additional parameters\n+            var args = toArray(arguments, 1);\n+            args.unshift(this);\n+            if (typeof plugin.install === 'function') {\n+                plugin.install.apply(plugin, args);\n+            } else if (typeof plugin === 'function') {\n+                plugin.apply(null, args);\n+            }\n+            installedPlugins.push(plugin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initMixin$1 (Vue) {\n+        Vue.mixin = function (mixin) {\n+            this.options = mergeOptions(this.options, mixin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initExtend (Vue) {\n+        \u002F**\n+         * Each instance constructor, including Vue, has a unique\n+         * cid. This enables us to create wrapped \"child\n+         * constructors\" for prototypal inheritance and cache them.\n+         *\u002F\n+        Vue.cid = 0;\n+        var cid = 1;\n+\n+        \u002F**\n+         * Class inheritance\n+         *\u002F\n+        Vue.extend = function (extendOptions) {\n+            extendOptions = extendOptions || {};\n+            var Super = this;\n+            var SuperId = Super.cid;\n+            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n+            if (cachedCtors[SuperId]) {\n+                return cachedCtors[SuperId]\n+            }\n+\n+            var name = extendOptions.name || Super.options.name;\n+            if (name) {\n+                validateComponentName(name);\n+            }\n+\n+            var Sub = function VueComponent (options) {\n+                this._init(options);\n+            };\n+            Sub.prototype = Object.create(Super.prototype);\n+            Sub.prototype.constructor = Sub;\n+            Sub.cid = cid++;\n+            Sub.options = mergeOptions(\n+                Super.options,\n+                extendOptions\n+            );\n+            Sub['super'] = Super;\n+\n+            \u002F\u002F For props and computed properties, we define the proxy getters on\n+            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\n+            \u002F\u002F avoids Object.defineProperty calls for each instance created.\n+            if (Sub.options.props) {\n+                initProps$1(Sub);\n+            }\n+            if (Sub.options.computed) {\n+                initComputed$1(Sub);\n+            }\n+\n+            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\n+            Sub.extend = Super.extend;\n+            Sub.mixin = Super.mixin;\n+            Sub.use = Super.use;\n+\n+            \u002F\u002F create asset registers, so extended classes\n+            \u002F\u002F can have their private assets too.\n+            ASSET_TYPES.forEach(function (type) {\n+                Sub[type] = Super[type];\n+            });\n+            \u002F\u002F enable recursive self-lookup\n+            if (name) {\n+                Sub.options.components[name] = Sub;\n+            }\n+\n+            \u002F\u002F keep a reference to the super options at extension time.\n+            \u002F\u002F later at instantiation we can check if Super's options have\n+            \u002F\u002F been updated.\n+            Sub.superOptions = Super.options;\n+            Sub.extendOptions = extendOptions;\n+            Sub.sealedOptions = extend({}, Sub.options);\n+\n+            \u002F\u002F cache constructor\n+            cachedCtors[SuperId] = Sub;\n+            return Sub\n+        };\n+    }\n+\n+    function initProps$1 (Comp) {\n+        var props = Comp.options.props;\n+        for (var key in props) {\n+            proxy(Comp.prototype, \"_props\", key);\n+        }\n+    }\n+\n+    function initComputed$1 (Comp) {\n+        var computed = Comp.options.computed;\n+        for (var key in computed) {\n+            defineComputed(Comp.prototype, key, computed[key]);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initAssetRegisters (Vue) {\n+        \u002F**\n+         * Create asset registration methods.\n+         *\u002F\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue[type] = function (\n+                id,\n+                definition\n+            ) {\n+                if (!definition) {\n+                    return this.options[type + 's'][id]\n+                } else {\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (type === 'component') {\n+                        validateComponentName(id);\n+                    }\n+                    if (type === 'component' && isPlainObject(definition)) {\n+                        definition.name = definition.name || id;\n+                        definition = this.options._base.extend(definition);\n+                    }\n+                    if (type === 'directive' && typeof definition === 'function') {\n+                        definition = { bind: definition, update: definition };\n+                    }\n+                    this.options[type + 's'][id] = definition;\n+                    return definition\n+                }\n+            };\n+        });\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function getComponentName (opts) {\n+        return opts && (opts.Ctor.options.name || opts.tag)\n+    }\n+\n+    function matches (pattern, name) {\n+        if (Array.isArray(pattern)) {\n+            return pattern.indexOf(name) > -1\n+        } else if (typeof pattern === 'string') {\n+            return pattern.split(',').indexOf(name) > -1\n+        } else if (isRegExp(pattern)) {\n+            return pattern.test(name)\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return false\n+    }\n+\n+    function pruneCache (keepAliveInstance, filter) {\n+        var cache = keepAliveInstance.cache;\n+        var keys = keepAliveInstance.keys;\n+        var _vnode = keepAliveInstance._vnode;\n+        for (var key in cache) {\n+            var cachedNode = cache[key];\n+            if (cachedNode) {\n+                var name = getComponentName(cachedNode.componentOptions);\n+                if (name && !filter(name)) {\n+                    pruneCacheEntry(cache, key, keys, _vnode);\n+                }\n+            }\n+        }\n+    }\n+\n+    function pruneCacheEntry (\n+        cache,\n+        key,\n+        keys,\n+        current\n+    ) {\n+        var cached$$1 = cache[key];\n+        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n+            cached$$1.componentInstance.$destroy();\n+        }\n+        cache[key] = null;\n+        remove(keys, key);\n+    }\n+\n+    var patternTypes = [String, RegExp, Array];\n+\n+    var KeepAlive = {\n+        name: 'keep-alive',\n+        abstract: true,\n+\n+        props: {\n+            include: patternTypes,\n+            exclude: patternTypes,\n+            max: [String, Number]\n+        },\n+\n+        created: function created () {\n+            this.cache = Object.create(null);\n+            this.keys = [];\n+        },\n+\n+        destroyed: function destroyed () {\n+            for (var key in this.cache) {\n+                pruneCacheEntry(this.cache, key, this.keys);\n+            }\n+        },\n+\n+        mounted: function mounted () {\n+            var this$1 = this;\n+\n+            this.$watch('include', function (val) {\n+                pruneCache(this$1, function (name) { return matches(val, name); });\n+            });\n+            this.$watch('exclude', function (val) {\n+                pruneCache(this$1, function (name) { return !matches(val, name); });\n+            });\n+        },\n+\n+        render: function render () {\n+            var slot = this.$slots.default;\n+            var vnode = getFirstComponentChild(slot);\n+            var componentOptions = vnode && vnode.componentOptions;\n+            if (componentOptions) {\n+                \u002F\u002F check pattern\n+                var name = getComponentName(componentOptions);\n+                var ref = this;\n+                var include = ref.include;\n+                var exclude = ref.exclude;\n+                if (\n+                    \u002F\u002F not included\n+                (include && (!name || !matches(include, name))) ||\n+                \u002F\u002F excluded\n+                (exclude && name && matches(exclude, name))\n+                ) {\n+                    return vnode\n+                }\n+\n+                var ref$1 = this;\n+                var cache = ref$1.cache;\n+                var keys = ref$1.keys;\n+                var key = vnode.key == null\n+                    \u002F\u002F same constructor may get registered as different local components\n+                    \u002F\u002F so cid alone is not enough (#3269)\n+                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n+                    : vnode.key;\n+                if (cache[key]) {\n+                    vnode.componentInstance = cache[key].componentInstance;\n+                    \u002F\u002F make current key freshest\n+                    remove(keys, key);\n+                    keys.push(key);\n+                } else {\n+                    cache[key] = vnode;\n+                    keys.push(key);\n+                    \u002F\u002F prune oldest entry\n+                    if (this.max && keys.length > parseInt(this.max)) {\n+                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\n+                    }\n+                }\n+\n+                vnode.data.keepAlive = true;\n+            }\n+            return vnode || (slot && slot[0])\n+        }\n+    };\n+\n+    var builtInComponents = {\n+        KeepAlive: KeepAlive\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function initGlobalAPI (Vue) {\n+        \u002F\u002F config\n+        var configDef = {};\n+        configDef.get = function () { return config; };\n+        {\n+            configDef.set = function () {\n+                warn(\n+                    'Do not replace the Vue.config object, set individual fields instead.'\n+                );\n+            };\n+        }\n+        Object.defineProperty(Vue, 'config', configDef);\n+\n+        \u002F\u002F exposed util methods.\n+        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\n+        \u002F\u002F them unless you are aware of the risk.\n+        Vue.util = {\n+            warn: warn,\n+            extend: extend,\n+            mergeOptions: mergeOptions,\n+            defineReactive: defineReactive$$1\n+        };\n+\n+        Vue.set = set;\n+        Vue.delete = del;\n+        Vue.nextTick = nextTick;\n+\n+        \u002F\u002F 2.6 explicit observable API\n+        Vue.observable = function (obj) {\n+            observe(obj);\n+            return obj\n+        };\n+\n+        Vue.options = Object.create(null);\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue.options[type + 's'] = Object.create(null);\n+        });\n+\n+        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\n+        \u002F\u002F components with in Weex's multi-instance scenarios.\n+        Vue.options._base = Vue;\n+\n+        extend(Vue.options.components, builtInComponents);\n+\n+        initUse(Vue);\n+        initMixin$1(Vue);\n+        initExtend(Vue);\n+        initAssetRegisters(Vue);\n+    }\n+\n+    initGlobalAPI(Vue);\n+\n+    Object.defineProperty(Vue.prototype, '$isServer', {\n+        get: isServerRendering\n+    });\n+\n+    Object.defineProperty(Vue.prototype, '$ssrContext', {\n+        get: function get () {\n+          \u002F* istanbul ignore next *\u002F\n+            return this.$vnode && this.$vnode.ssrContext\n+        }\n+    });\n+\n+    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\n+    Object.defineProperty(Vue, 'FunctionalRenderContext', {\n+        value: FunctionalRenderContext\n+    });\n+\n+    Vue.version = '2.6.10';\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F these are reserved for web because they are directly compiled away\n+    \u002F\u002F during template compilation\n+    var isReservedAttr = makeMap('style,class');\n+\n+    \u002F\u002F attributes that should be using props for binding\n+    var acceptValue = makeMap('input,textarea,option,select,progress');\n+    var mustUseProp = function (tag, type, attr) {\n+        return (\n+            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n+            (attr === 'selected' && tag === 'option') ||\n+            (attr === 'checked' && tag === 'input') ||\n+            (attr === 'muted' && tag === 'video')\n+        )\n+    };\n+\n+    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n+\n+    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n+\n+    var convertEnumeratedValue = function (key, value) {\n+        return isFalsyAttrValue(value) || value === 'false'\n+            ? 'false'\n+            \u002F\u002F allow arbitrary string value for contenteditable\n+            : key === 'contenteditable' && isValidContentEditableValue(value)\n+                ? value\n+                : 'true'\n+    };\n+\n+    var isBooleanAttr = makeMap(\n+        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n+        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n+        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n+        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n+        'required,reversed,scoped,seamless,selected,sortable,translate,' +\n+        'truespeed,typemustmatch,visible'\n+    );\n+\n+    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\n+\n+    var isXlink = function (name) {\n+        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n+    };\n+\n+    var getXlinkProp = function (name) {\n+        return isXlink(name) ? name.slice(6, name.length) : ''\n+    };\n+\n+    var isFalsyAttrValue = function (val) {\n+        return val == null || val === false\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function genClassForVnode (vnode) {\n+        var data = vnode.data;\n+        var parentNode = vnode;\n+        var childNode = vnode;\n+        while (isDef(childNode.componentInstance)) {\n+            childNode = childNode.componentInstance._vnode;\n+            if (childNode && childNode.data) {\n+                data = mergeClassData(childNode.data, data);\n+            }\n+        }\n+        while (isDef(parentNode = parentNode.parent)) {\n+            if (parentNode && parentNode.data) {\n+                data = mergeClassData(data, parentNode.data);\n+            }\n+        }\n+        return renderClass(data.staticClass, data.class)\n+    }\n+\n+    function mergeClassData (child, parent) {\n+        return {\n+            staticClass: concat(child.staticClass, parent.staticClass),\n+            class: isDef(child.class)\n+                ? [child.class, parent.class]\n+                : parent.class\n+        }\n+    }\n+\n+    function renderClass (\n+        staticClass,\n+        dynamicClass\n+    ) {\n+        if (isDef(staticClass) || isDef(dynamicClass)) {\n+            return concat(staticClass, stringifyClass(dynamicClass))\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function concat (a, b) {\n+        return a ? b ? (a + ' ' + b) : a : (b || '')\n+    }\n+\n+    function stringifyClass (value) {\n+        if (Array.isArray(value)) {\n+            return stringifyArray(value)\n+        }\n+        if (isObject(value)) {\n+            return stringifyObject(value)\n+        }\n+        if (typeof value === 'string') {\n+            return value\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function stringifyArray (value) {\n+        var res = '';\n+        var stringified;\n+        for (var i = 0, l = value.length; i \u003C l; i++) {\n+            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n+                if (res) { res += ' '; }\n+                res += stringified;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function stringifyObject (value) {\n+        var res = '';\n+        for (var key in value) {\n+            if (value[key]) {\n+                if (res) { res += ' '; }\n+                res += key;\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var namespaceMap = {\n+        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\n+        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\n+    };\n+\n+    var isHTMLTag = makeMap(\n+        'html,body,base,head,link,meta,style,title,' +\n+        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n+        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n+        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n+        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n+        'embed,object,param,source,canvas,script,noscript,del,ins,' +\n+        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n+        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n+        'output,progress,select,textarea,' +\n+        'details,dialog,menu,menuitem,summary,' +\n+        'content,element,shadow,template,blockquote,iframe,tfoot'\n+    );\n+\n+    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\n+    \u002F\u002F contain child elements.\n+    var isSVG = makeMap(\n+        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n+        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n+        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n+        true\n+    );\n+\n+    var isPreTag = function (tag) { return tag === 'pre'; };\n+\n+    var isReservedTag = function (tag) {\n+        return isHTMLTag(tag) || isSVG(tag)\n+    };\n+\n+    function getTagNamespace (tag) {\n+        if (isSVG(tag)) {\n+            return 'svg'\n+        }\n+        \u002F\u002F basic support for MathML\n+        \u002F\u002F note it doesn't support other MathML elements being component roots\n+        if (tag === 'math') {\n+            return 'math'\n+        }\n+    }\n+\n+    var unknownElementCache = Object.create(null);\n+    function isUnknownElement (tag) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!inBrowser) {\n+            return true\n+        }\n+        if (isReservedTag(tag)) {\n+            return false\n+        }\n+        tag = tag.toLowerCase();\n+      \u002F* istanbul ignore if *\u002F\n+        if (unknownElementCache[tag] != null) {\n+            return unknownElementCache[tag]\n+        }\n+        var el = document.createElement(tag);\n+        if (tag.indexOf('-') > -1) {\n+            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\n+            return (unknownElementCache[tag] = (\n+                el.constructor === window.HTMLUnknownElement ||\n+                el.constructor === window.HTMLElement\n+            ))\n+        } else {\n+            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\n+        }\n+    }\n+\n+    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Query an element selector if it's not an element already.\n+     *\u002F\n+    function query (el) {\n+        if (typeof el === 'string') {\n+            var selected = document.querySelector(el);\n+            if (!selected) {\n+                warn(\n+                    'Cannot find element: ' + el\n+                );\n+                return document.createElement('div')\n+            }\n+            return selected\n+        } else {\n+            return el\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createElement$1 (tagName, vnode) {\n+        var elm = document.createElement(tagName);\n+        if (tagName !== 'select') {\n+            return elm\n+        }\n+        \u002F\u002F false or null will remove the attribute but undefined will not\n+        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n+            elm.setAttribute('multiple', 'multiple');\n+        }\n+        return elm\n+    }\n+\n+    function createElementNS (namespace, tagName) {\n+        return document.createElementNS(namespaceMap[namespace], tagName)\n+    }\n+\n+    function createTextNode (text) {\n+        return document.createTextNode(text)\n+    }\n+\n+    function createComment (text) {\n+        return document.createComment(text)\n+    }\n+\n+    function insertBefore (parentNode, newNode, referenceNode) {\n+        parentNode.insertBefore(newNode, referenceNode);\n+    }\n+\n+    function removeChild (node, child) {\n+        node.removeChild(child);\n+    }\n+\n+    function appendChild (node, child) {\n+        node.appendChild(child);\n+    }\n+\n+    function parentNode (node) {\n+        return node.parentNode\n+    }\n+\n+    function nextSibling (node) {\n+        return node.nextSibling\n+    }\n+\n+    function tagName (node) {\n+        return node.tagName\n+    }\n+\n+    function setTextContent (node, text) {\n+        node.textContent = text;\n+    }\n+\n+    function setStyleScope (node, scopeId) {\n+        node.setAttribute(scopeId, '');\n+    }\n+\n+    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\n+        createElement: createElement$1,\n+        createElementNS: createElementNS,\n+        createTextNode: createTextNode,\n+        createComment: createComment,\n+        insertBefore: insertBefore,\n+        removeChild: removeChild,\n+        appendChild: appendChild,\n+        parentNode: parentNode,\n+        nextSibling: nextSibling,\n+        tagName: tagName,\n+        setTextContent: setTextContent,\n+        setStyleScope: setStyleScope\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref = {\n+        create: function create (_, vnode) {\n+            registerRef(vnode);\n+        },\n+        update: function update (oldVnode, vnode) {\n+            if (oldVnode.data.ref !== vnode.data.ref) {\n+                registerRef(oldVnode, true);\n+                registerRef(vnode);\n+            }\n+        },\n+        destroy: function destroy (vnode) {\n+            registerRef(vnode, true);\n+        }\n+    };\n+\n+    function registerRef (vnode, isRemoval) {\n+        var key = vnode.data.ref;\n+        if (!isDef(key)) { return }\n+\n+        var vm = vnode.context;\n+        var ref = vnode.componentInstance || vnode.elm;\n+        var refs = vm.$refs;\n+        if (isRemoval) {\n+            if (Array.isArray(refs[key])) {\n+                remove(refs[key], ref);\n+            } else if (refs[key] === ref) {\n+                refs[key] = undefined;\n+            }\n+        } else {\n+            if (vnode.data.refInFor) {\n+                if (!Array.isArray(refs[key])) {\n+                    refs[key] = [ref];\n+                } else if (refs[key].indexOf(ref) \u003C 0) {\n+                    \u002F\u002F $flow-disable-line\n+                    refs[key].push(ref);\n+                }\n+            } else {\n+                refs[key] = ref;\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Virtual DOM patching algorithm based on Snabbdom by\n+     * Simon Friis Vindum (@paldepind)\n+     * Licensed under the MIT License\n+     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\n+     *\n+     * modified by Evan You (@yyx990803)\n+     *\n+     * Not type-checking this because this file is perf-critical and the cost\n+     * of making flow understand it is not worth it.\n+     *\u002F\n+\n+    var emptyNode = new VNode('', {}, []);\n+\n+    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n+\n+    function sameVnode (a, b) {\n+        return (\n+            a.key === b.key && (\n+                (\n+                    a.tag === b.tag &&\n+                    a.isComment === b.isComment &&\n+                    isDef(a.data) === isDef(b.data) &&\n+                    sameInputType(a, b)\n+                ) || (\n+                    isTrue(a.isAsyncPlaceholder) &&\n+                    a.asyncFactory === b.asyncFactory &&\n+                    isUndef(b.asyncFactory.error)\n+                )\n+            )\n+        )\n+    }\n+\n+    function sameInputType (a, b) {\n+        if (a.tag !== 'input') { return true }\n+        var i;\n+        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n+        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n+        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n+    }\n+\n+    function createKeyToOldIdx (children, beginIdx, endIdx) {\n+        var i, key;\n+        var map = {};\n+        for (i = beginIdx; i \u003C= endIdx; ++i) {\n+            key = children[i].key;\n+            if (isDef(key)) { map[key] = i; }\n+        }\n+        return map\n+    }\n+\n+    function createPatchFunction (backend) {\n+        var i, j;\n+        var cbs = {};\n+\n+        var modules = backend.modules;\n+        var nodeOps = backend.nodeOps;\n+\n+        for (i = 0; i \u003C hooks.length; ++i) {\n+            cbs[hooks[i]] = [];\n+            for (j = 0; j \u003C modules.length; ++j) {\n+                if (isDef(modules[j][hooks[i]])) {\n+                    cbs[hooks[i]].push(modules[j][hooks[i]]);\n+                }\n+            }\n+        }\n+\n+        function emptyNodeAt (elm) {\n+            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n+        }\n+\n+        function createRmCb (childElm, listeners) {\n+            function remove$$1 () {\n+                if (--remove$$1.listeners === 0) {\n+                    removeNode(childElm);\n+                }\n+            }\n+            remove$$1.listeners = listeners;\n+            return remove$$1\n+        }\n+\n+        function removeNode (el) {\n+            var parent = nodeOps.parentNode(el);\n+            \u002F\u002F element may have already been removed due to v-html \u002F v-text\n+            if (isDef(parent)) {\n+                nodeOps.removeChild(parent, el);\n+            }\n+        }\n+\n+        function isUnknownElement$$1 (vnode, inVPre) {\n+            return (\n+                !inVPre &&\n+                !vnode.ns &&\n+                !(\n+                    config.ignoredElements.length &&\n+                    config.ignoredElements.some(function (ignore) {\n+                        return isRegExp(ignore)\n+                            ? ignore.test(vnode.tag)\n+                            : ignore === vnode.tag\n+                    })\n+                ) &&\n+                config.isUnknownElement(vnode.tag)\n+            )\n+        }\n+\n+        var creatingElmInVPre = 0;\n+\n+        function createElm (\n+            vnode,\n+            insertedVnodeQueue,\n+            parentElm,\n+            refElm,\n+            nested,\n+            ownerArray,\n+            index\n+        ) {\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F This vnode was used in a previous render!\n+                \u002F\u002F now it's used as a new node, overwriting its elm would cause\n+                \u002F\u002F potential patch errors down the road when it's used as an insertion\n+                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\n+                \u002F\u002F associated DOM element for it.\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\n+            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n+                return\n+            }\n+\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            var tag = vnode.tag;\n+            if (isDef(tag)) {\n+                {\n+                    if (data && data.pre) {\n+                        creatingElmInVPre++;\n+                    }\n+                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n+                        warn(\n+                            'Unknown custom element: \u003C' + tag + '> - did you ' +\n+                            'register the component correctly? For recursive components, ' +\n+                            'make sure to provide the \"name\" option.',\n+                            vnode.context\n+                        );\n+                    }\n+                }\n+\n+                vnode.elm = vnode.ns\n+                    ? nodeOps.createElementNS(vnode.ns, tag)\n+                    : nodeOps.createElement(tag, vnode);\n+                setScope(vnode);\n+\n+              \u002F* istanbul ignore if *\u002F\n+                {\n+                    createChildren(vnode, children, insertedVnodeQueue);\n+                    if (isDef(data)) {\n+                        invokeCreateHooks(vnode, insertedVnodeQueue);\n+                    }\n+                    insert(parentElm, vnode.elm, refElm);\n+                }\n+\n+                if (data && data.pre) {\n+                    creatingElmInVPre--;\n+                }\n+            } else if (isTrue(vnode.isComment)) {\n+                vnode.elm = nodeOps.createComment(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            } else {\n+                vnode.elm = nodeOps.createTextNode(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            }\n+        }\n+\n+        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i = vnode.data;\n+            if (isDef(i)) {\n+                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n+                if (isDef(i = i.hook) && isDef(i = i.init)) {\n+                    i(vnode, false \u002F* hydrating *\u002F);\n+                }\n+                \u002F\u002F after calling the init hook, if the vnode is a child component\n+                \u002F\u002F it should've created a child instance and mounted it. the child\n+                \u002F\u002F component also has set the placeholder vnode's elm.\n+                \u002F\u002F in that case we can just return the element and be done.\n+                if (isDef(vnode.componentInstance)) {\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    insert(parentElm, vnode.elm, refElm);\n+                    if (isTrue(isReactivated)) {\n+                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n+                    }\n+                    return true\n+                }\n+            }\n+        }\n+\n+        function initComponent (vnode, insertedVnodeQueue) {\n+            if (isDef(vnode.data.pendingInsert)) {\n+                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n+                vnode.data.pendingInsert = null;\n+            }\n+            vnode.elm = vnode.componentInstance.$el;\n+            if (isPatchable(vnode)) {\n+                invokeCreateHooks(vnode, insertedVnodeQueue);\n+                setScope(vnode);\n+            } else {\n+                \u002F\u002F empty component root.\n+                \u002F\u002F skip all element-related modules except for ref (#3455)\n+                registerRef(vnode);\n+                \u002F\u002F make sure to invoke the insert hook\n+                insertedVnodeQueue.push(vnode);\n+            }\n+        }\n+\n+        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i;\n+            \u002F\u002F hack for #4339: a reactivated component with inner transition\n+            \u002F\u002F does not trigger because the inner node's created hooks are not called\n+            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\n+            \u002F\u002F there doesn't seem to be a better way to do it.\n+            var innerNode = vnode;\n+            while (innerNode.componentInstance) {\n+                innerNode = innerNode.componentInstance._vnode;\n+                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n+                    for (i = 0; i \u003C cbs.activate.length; ++i) {\n+                        cbs.activate[i](emptyNode, innerNode);\n+                    }\n+                    insertedVnodeQueue.push(innerNode);\n+                    break\n+                }\n+            }\n+            \u002F\u002F unlike a newly created component,\n+            \u002F\u002F a reactivated keep-alive component doesn't insert itself\n+            insert(parentElm, vnode.elm, refElm);\n+        }\n+\n+        function insert (parent, elm, ref$$1) {\n+            if (isDef(parent)) {\n+                if (isDef(ref$$1)) {\n+                    if (nodeOps.parentNode(ref$$1) === parent) {\n+                        nodeOps.insertBefore(parent, elm, ref$$1);\n+                    }\n+                } else {\n+                    nodeOps.appendChild(parent, elm);\n+                }\n+            }\n+        }\n+\n+        function createChildren (vnode, children, insertedVnodeQueue) {\n+            if (Array.isArray(children)) {\n+                {\n+                    checkDuplicateKeys(children);\n+                }\n+                for (var i = 0; i \u003C children.length; ++i) {\n+                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n+                }\n+            } else if (isPrimitive(vnode.text)) {\n+                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n+            }\n+        }\n+\n+        function isPatchable (vnode) {\n+            while (vnode.componentInstance) {\n+                vnode = vnode.componentInstance._vnode;\n+            }\n+            return isDef(vnode.tag)\n+        }\n+\n+        function invokeCreateHooks (vnode, insertedVnodeQueue) {\n+            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                cbs.create[i$1](emptyNode, vnode);\n+            }\n+            i = vnode.data.hook; \u002F\u002F Reuse variable\n+            if (isDef(i)) {\n+                if (isDef(i.create)) { i.create(emptyNode, vnode); }\n+                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n+            }\n+        }\n+\n+        \u002F\u002F set scope id attribute for scoped CSS.\n+        \u002F\u002F this is implemented as a special case to avoid the overhead\n+        \u002F\u002F of going through the normal attribute patching process.\n+        function setScope (vnode) {\n+            var i;\n+            if (isDef(i = vnode.fnScopeId)) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            } else {\n+                var ancestor = vnode;\n+                while (ancestor) {\n+                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n+                        nodeOps.setStyleScope(vnode.elm, i);\n+                    }\n+                    ancestor = ancestor.parent;\n+                }\n+            }\n+            \u002F\u002F for slot content they should also get the scopeId from the host instance.\n+            if (isDef(i = activeInstance) &&\n+                i !== vnode.context &&\n+                i !== vnode.fnContext &&\n+                isDef(i = i.$options._scopeId)\n+            ) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            }\n+        }\n+\n+        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n+            }\n+        }\n+\n+        function invokeDestroyHook (vnode) {\n+            var i, j;\n+            var data = vnode.data;\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n+                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n+            }\n+            if (isDef(i = vnode.children)) {\n+                for (j = 0; j \u003C vnode.children.length; ++j) {\n+                    invokeDestroyHook(vnode.children[j]);\n+                }\n+            }\n+        }\n+\n+        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                var ch = vnodes[startIdx];\n+                if (isDef(ch)) {\n+                    if (isDef(ch.tag)) {\n+                        removeAndInvokeRemoveHook(ch);\n+                        invokeDestroyHook(ch);\n+                    } else { \u002F\u002F Text node\n+                        removeNode(ch.elm);\n+                    }\n+                }\n+            }\n+        }\n+\n+        function removeAndInvokeRemoveHook (vnode, rm) {\n+            if (isDef(rm) || isDef(vnode.data)) {\n+                var i;\n+                var listeners = cbs.remove.length + 1;\n+                if (isDef(rm)) {\n+                    \u002F\u002F we have a recursively passed down rm callback\n+                    \u002F\u002F increase the listeners count\n+                    rm.listeners += listeners;\n+                } else {\n+                    \u002F\u002F directly removing\n+                    rm = createRmCb(vnode.elm, listeners);\n+                }\n+                \u002F\u002F recursively invoke hooks on child component root node\n+                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n+                    removeAndInvokeRemoveHook(i, rm);\n+                }\n+                for (i = 0; i \u003C cbs.remove.length; ++i) {\n+                    cbs.remove[i](vnode, rm);\n+                }\n+                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n+                    i(vnode, rm);\n+                } else {\n+                    rm();\n+                }\n+            } else {\n+                removeNode(vnode.elm);\n+            }\n+        }\n+\n+        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n+            var oldStartIdx = 0;\n+            var newStartIdx = 0;\n+            var oldEndIdx = oldCh.length - 1;\n+            var oldStartVnode = oldCh[0];\n+            var oldEndVnode = oldCh[oldEndIdx];\n+            var newEndIdx = newCh.length - 1;\n+            var newStartVnode = newCh[0];\n+            var newEndVnode = newCh[newEndIdx];\n+            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n+\n+            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\n+            \u002F\u002F to ensure removed elements stay in correct relative positions\n+            \u002F\u002F during leaving transitions\n+            var canMove = !removeOnly;\n+\n+            {\n+                checkDuplicateKeys(newCh);\n+            }\n+\n+            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\n+                if (isUndef(oldStartVnode)) {\n+                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\n+                } else if (isUndef(oldEndVnode)) {\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                } else if (sameVnode(oldStartVnode, newStartVnode)) {\n+                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else if (sameVnode(oldEndVnode, newEndVnode)) {\n+                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\n+                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\n+                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else {\n+                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n+                    idxInOld = isDef(newStartVnode.key)\n+                        ? oldKeyToIdx[newStartVnode.key]\n+                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n+                    if (isUndef(idxInOld)) { \u002F\u002F New element\n+                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                    } else {\n+                        vnodeToMove = oldCh[idxInOld];\n+                        if (sameVnode(vnodeToMove, newStartVnode)) {\n+                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                            oldCh[idxInOld] = undefined;\n+                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n+                        } else {\n+                            \u002F\u002F same key but different element. treat as new element\n+                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                        }\n+                    }\n+                    newStartVnode = newCh[++newStartIdx];\n+                }\n+            }\n+            if (oldStartIdx > oldEndIdx) {\n+                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n+                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n+            } else if (newStartIdx > newEndIdx) {\n+                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n+            }\n+        }\n+\n+        function checkDuplicateKeys (children) {\n+            var seenKeys = {};\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var vnode = children[i];\n+                var key = vnode.key;\n+                if (isDef(key)) {\n+                    if (seenKeys[key]) {\n+                        warn(\n+                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n+                            vnode.context\n+                        );\n+                    } else {\n+                        seenKeys[key] = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        function findIdxInOld (node, oldCh, start, end) {\n+            for (var i = start; i \u003C end; i++) {\n+                var c = oldCh[i];\n+                if (isDef(c) && sameVnode(node, c)) { return i }\n+            }\n+        }\n+\n+        function patchVnode (\n+            oldVnode,\n+            vnode,\n+            insertedVnodeQueue,\n+            ownerArray,\n+            index,\n+            removeOnly\n+        ) {\n+            if (oldVnode === vnode) {\n+                return\n+            }\n+\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F clone reused vnode\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            var elm = vnode.elm = oldVnode.elm;\n+\n+            if (isTrue(oldVnode.isAsyncPlaceholder)) {\n+                if (isDef(vnode.asyncFactory.resolved)) {\n+                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n+                } else {\n+                    vnode.isAsyncPlaceholder = true;\n+                }\n+                return\n+            }\n+\n+            \u002F\u002F reuse element for static trees.\n+            \u002F\u002F note we only do this if the vnode is cloned -\n+            \u002F\u002F if the new node is not cloned it means the render functions have been\n+            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\n+            if (isTrue(vnode.isStatic) &&\n+                isTrue(oldVnode.isStatic) &&\n+                vnode.key === oldVnode.key &&\n+                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n+            ) {\n+                vnode.componentInstance = oldVnode.componentInstance;\n+                return\n+            }\n+\n+            var i;\n+            var data = vnode.data;\n+            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n+                i(oldVnode, vnode);\n+            }\n+\n+            var oldCh = oldVnode.children;\n+            var ch = vnode.children;\n+            if (isDef(data) && isPatchable(vnode)) {\n+                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n+                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n+            }\n+            if (isUndef(vnode.text)) {\n+                if (isDef(oldCh) && isDef(ch)) {\n+                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n+                } else if (isDef(ch)) {\n+                    {\n+                        checkDuplicateKeys(ch);\n+                    }\n+                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n+                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n+                } else if (isDef(oldCh)) {\n+                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n+                } else if (isDef(oldVnode.text)) {\n+                    nodeOps.setTextContent(elm, '');\n+                }\n+            } else if (oldVnode.text !== vnode.text) {\n+                nodeOps.setTextContent(elm, vnode.text);\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n+            }\n+        }\n+\n+        function invokeInsertHook (vnode, queue, initial) {\n+            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\n+            \u002F\u002F element is really inserted\n+            if (isTrue(initial) && isDef(vnode.parent)) {\n+                vnode.parent.data.pendingInsert = queue;\n+            } else {\n+                for (var i = 0; i \u003C queue.length; ++i) {\n+                    queue[i].data.hook.insert(queue[i]);\n+                }\n+            }\n+        }\n+\n+        var hydrationBailed = false;\n+        \u002F\u002F list of modules that can skip create hook during hydration because they\n+        \u002F\u002F are already rendered on the client or has no need for initialization\n+        \u002F\u002F Note: style is excluded because it relies on initial clone for future\n+        \u002F\u002F deep updates (#7063).\n+        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n+\n+        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\n+        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n+            var i;\n+            var tag = vnode.tag;\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            inVPre = inVPre || (data && data.pre);\n+            vnode.elm = elm;\n+\n+            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n+                vnode.isAsyncPlaceholder = true;\n+                return true\n+            }\n+            \u002F\u002F assert node match\n+            {\n+                if (!assertNodeMatch(elm, vnode, inVPre)) {\n+                    return false\n+                }\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\n+                if (isDef(i = vnode.componentInstance)) {\n+                    \u002F\u002F child component. it should have hydrated its own tree.\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    return true\n+                }\n+            }\n+            if (isDef(tag)) {\n+                if (isDef(children)) {\n+                    \u002F\u002F empty element, allow client to pick up and populate children\n+                    if (!elm.hasChildNodes()) {\n+                        createChildren(vnode, children, insertedVnodeQueue);\n+                    } else {\n+                        \u002F\u002F v-html and domProps: innerHTML\n+                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n+                            if (i !== elm.innerHTML) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('server innerHTML: ', i);\n+                                    console.warn('client innerHTML: ', elm.innerHTML);\n+                                }\n+                                return false\n+                            }\n+                        } else {\n+                            \u002F\u002F iterate and compare children lists\n+                            var childrenMatch = true;\n+                            var childNode = elm.firstChild;\n+                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\n+                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n+                                    childrenMatch = false;\n+                                    break\n+                                }\n+                                childNode = childNode.nextSibling;\n+                            }\n+                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\n+                            \u002F\u002F longer than the virtual children list.\n+                            if (!childrenMatch || childNode) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n+                                }\n+                                return false\n+                            }\n+                        }\n+                    }\n+                }\n+                if (isDef(data)) {\n+                    var fullInvoke = false;\n+                    for (var key in data) {\n+                        if (!isRenderedModule(key)) {\n+                            fullInvoke = true;\n+                            invokeCreateHooks(vnode, insertedVnodeQueue);\n+                            break\n+                        }\n+                    }\n+                    if (!fullInvoke && data['class']) {\n+                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\n+                        traverse(data['class']);\n+                    }\n+                }\n+            } else if (elm.data !== vnode.text) {\n+                elm.data = vnode.text;\n+            }\n+            return true\n+        }\n+\n+        function assertNodeMatch (node, vnode, inVPre) {\n+            if (isDef(vnode.tag)) {\n+                return vnode.tag.indexOf('vue-component') === 0 || (\n+                        !isUnknownElement$$1(vnode, inVPre) &&\n+                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n+                    )\n+            } else {\n+                return node.nodeType === (vnode.isComment ? 8 : 3)\n+            }\n+        }\n+\n+        return function patch (oldVnode, vnode, hydrating, removeOnly) {\n+            if (isUndef(vnode)) {\n+                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n+                return\n+            }\n+\n+            var isInitialPatch = false;\n+            var insertedVnodeQueue = [];\n+\n+            if (isUndef(oldVnode)) {\n+                \u002F\u002F empty mount (likely as component), create new root element\n+                isInitialPatch = true;\n+                createElm(vnode, insertedVnodeQueue);\n+            } else {\n+                var isRealElement = isDef(oldVnode.nodeType);\n+                if (!isRealElement && sameVnode(oldVnode, vnode)) {\n+                    \u002F\u002F patch existing root node\n+                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n+                } else {\n+                    if (isRealElement) {\n+                        \u002F\u002F mounting to a real element\n+                        \u002F\u002F check if this is server-rendered content and if we can perform\n+                        \u002F\u002F a successful hydration.\n+                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n+                            oldVnode.removeAttribute(SSR_ATTR);\n+                            hydrating = true;\n+                        }\n+                        if (isTrue(hydrating)) {\n+                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n+                                invokeInsertHook(vnode, insertedVnodeQueue, true);\n+                                return oldVnode\n+                            } else {\n+                                warn(\n+                                    'The client-side rendered virtual DOM tree is not matching ' +\n+                                    'server-rendered content. This is likely caused by incorrect ' +\n+                                    'HTML markup, for example nesting block-level elements inside ' +\n+                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\n+                                    'full client-side render.'\n+                                );\n+                            }\n+                        }\n+                        \u002F\u002F either not server-rendered, or hydration failed.\n+                        \u002F\u002F create an empty node and replace it\n+                        oldVnode = emptyNodeAt(oldVnode);\n+                    }\n+\n+                    \u002F\u002F replacing existing element\n+                    var oldElm = oldVnode.elm;\n+                    var parentElm = nodeOps.parentNode(oldElm);\n+\n+                    \u002F\u002F create new node\n+                    createElm(\n+                        vnode,\n+                        insertedVnodeQueue,\n+                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\n+                        \u002F\u002F leaving transition. Only happens when combining transition +\n+                        \u002F\u002F keep-alive + HOCs. (#4590)\n+                        oldElm._leaveCb ? null : parentElm,\n+                        nodeOps.nextSibling(oldElm)\n+                    );\n+\n+                    \u002F\u002F update parent placeholder node element, recursively\n+                    if (isDef(vnode.parent)) {\n+                        var ancestor = vnode.parent;\n+                        var patchable = isPatchable(vnode);\n+                        while (ancestor) {\n+                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\n+                                cbs.destroy[i](ancestor);\n+                            }\n+                            ancestor.elm = vnode.elm;\n+                            if (patchable) {\n+                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                                    cbs.create[i$1](emptyNode, ancestor);\n+                                }\n+                                \u002F\u002F #6513\n+                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\n+                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\n+                                var insert = ancestor.data.hook.insert;\n+                                if (insert.merged) {\n+                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\n+                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\n+                                        insert.fns[i$2]();\n+                                    }\n+                                }\n+                            } else {\n+                                registerRef(ancestor);\n+                            }\n+                            ancestor = ancestor.parent;\n+                        }\n+                    }\n+\n+                    \u002F\u002F destroy old node\n+                    if (isDef(parentElm)) {\n+                        removeVnodes(parentElm, [oldVnode], 0, 0);\n+                    } else if (isDef(oldVnode.tag)) {\n+                        invokeDestroyHook(oldVnode);\n+                    }\n+                }\n+            }\n+\n+            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n+            return vnode.elm\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var directives = {\n+        create: updateDirectives,\n+        update: updateDirectives,\n+        destroy: function unbindDirectives (vnode) {\n+            updateDirectives(vnode, emptyNode);\n+        }\n+    };\n+\n+    function updateDirectives (oldVnode, vnode) {\n+        if (oldVnode.data.directives || vnode.data.directives) {\n+            _update(oldVnode, vnode);\n+        }\n+    }\n+\n+    function _update (oldVnode, vnode) {\n+        var isCreate = oldVnode === emptyNode;\n+        var isDestroy = vnode === emptyNode;\n+        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n+        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n+\n+        var dirsWithInsert = [];\n+        var dirsWithPostpatch = [];\n+\n+        var key, oldDir, dir;\n+        for (key in newDirs) {\n+            oldDir = oldDirs[key];\n+            dir = newDirs[key];\n+            if (!oldDir) {\n+                \u002F\u002F new directive, bind\n+                callHook$1(dir, 'bind', vnode, oldVnode);\n+                if (dir.def && dir.def.inserted) {\n+                    dirsWithInsert.push(dir);\n+                }\n+            } else {\n+                \u002F\u002F existing directive, update\n+                dir.oldValue = oldDir.value;\n+                dir.oldArg = oldDir.arg;\n+                callHook$1(dir, 'update', vnode, oldVnode);\n+                if (dir.def && dir.def.componentUpdated) {\n+                    dirsWithPostpatch.push(dir);\n+                }\n+            }\n+        }\n+\n+        if (dirsWithInsert.length) {\n+            var callInsert = function () {\n+                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\n+                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n+                }\n+            };\n+            if (isCreate) {\n+                mergeVNodeHook(vnode, 'insert', callInsert);\n+            } else {\n+                callInsert();\n+            }\n+        }\n+\n+        if (dirsWithPostpatch.length) {\n+            mergeVNodeHook(vnode, 'postpatch', function () {\n+                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\n+                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n+                }\n+            });\n+        }\n+\n+        if (!isCreate) {\n+            for (key in oldDirs) {\n+                if (!newDirs[key]) {\n+                    \u002F\u002F no longer present, unbind\n+                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n+                }\n+            }\n+        }\n+    }\n+\n+    var emptyModifiers = Object.create(null);\n+\n+    function normalizeDirectives$1 (\n+        dirs,\n+        vm\n+    ) {\n+        var res = Object.create(null);\n+        if (!dirs) {\n+            \u002F\u002F $flow-disable-line\n+            return res\n+        }\n+        var i, dir;\n+        for (i = 0; i \u003C dirs.length; i++) {\n+            dir = dirs[i];\n+            if (!dir.modifiers) {\n+                \u002F\u002F $flow-disable-line\n+                dir.modifiers = emptyModifiers;\n+            }\n+            res[getRawDirName(dir)] = dir;\n+            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n+        }\n+        \u002F\u002F $flow-disable-line\n+        return res\n+    }\n+\n+    function getRawDirName (dir) {\n+        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n+    }\n+\n+    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n+        var fn = dir.def && dir.def[hook];\n+        if (fn) {\n+            try {\n+                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n+            } catch (e) {\n+                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n+            }\n+        }\n+    }\n+\n+    var baseModules = [\n+        ref,\n+        directives\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function updateAttrs (oldVnode, vnode) {\n+        var opts = vnode.componentOptions;\n+        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n+            return\n+        }\n+        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n+            return\n+        }\n+        var key, cur, old;\n+        var elm = vnode.elm;\n+        var oldAttrs = oldVnode.data.attrs || {};\n+        var attrs = vnode.data.attrs || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(attrs.__ob__)) {\n+            attrs = vnode.data.attrs = extend({}, attrs);\n+        }\n+\n+        for (key in attrs) {\n+            cur = attrs[key];\n+            old = oldAttrs[key];\n+            if (old !== cur) {\n+                setAttr(elm, key, cur);\n+            }\n+        }\n+        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\n+        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\n+      \u002F* istanbul ignore if *\u002F\n+        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n+            setAttr(elm, 'value', attrs.value);\n+        }\n+        for (key in oldAttrs) {\n+            if (isUndef(attrs[key])) {\n+                if (isXlink(key)) {\n+                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+                } else if (!isEnumeratedAttr(key)) {\n+                    elm.removeAttribute(key);\n+                }\n+            }\n+        }\n+    }\n+\n+    function setAttr (el, key, value) {\n+        if (el.tagName.indexOf('-') > -1) {\n+            baseSetAttr(el, key, value);\n+        } else if (isBooleanAttr(key)) {\n+            \u002F\u002F set attribute for blank value\n+            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttribute(key);\n+            } else {\n+                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\n+                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\n+                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n+                    ? 'true'\n+                    : key;\n+                el.setAttribute(key, value);\n+            }\n+        } else if (isEnumeratedAttr(key)) {\n+            el.setAttribute(key, convertEnumeratedValue(key, value));\n+        } else if (isXlink(key)) {\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+            } else {\n+                el.setAttributeNS(xlinkNS, key, value);\n+            }\n+        } else {\n+            baseSetAttr(el, key, value);\n+        }\n+    }\n+\n+    function baseSetAttr (el, key, value) {\n+        if (isFalsyAttrValue(value)) {\n+            el.removeAttribute(key);\n+        } else {\n+            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\n+            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\n+            \u002F\u002F immediately.\n+          \u002F* istanbul ignore if *\u002F\n+            if (\n+                isIE && !isIE9 &&\n+                el.tagName === 'TEXTAREA' &&\n+                key === 'placeholder' && value !== '' && !el.__ieph\n+            ) {\n+                var blocker = function (e) {\n+                    e.stopImmediatePropagation();\n+                    el.removeEventListener('input', blocker);\n+                };\n+                el.addEventListener('input', blocker);\n+                \u002F\u002F $flow-disable-line\n+                el.__ieph = true; \u002F* IE placeholder patched *\u002F\n+            }\n+            el.setAttribute(key, value);\n+        }\n+    }\n+\n+    var attrs = {\n+        create: updateAttrs,\n+        update: updateAttrs\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function updateClass (oldVnode, vnode) {\n+        var el = vnode.elm;\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+        if (\n+            isUndef(data.staticClass) &&\n+            isUndef(data.class) && (\n+                isUndef(oldData) || (\n+                    isUndef(oldData.staticClass) &&\n+                    isUndef(oldData.class)\n+                )\n+            )\n+        ) {\n+            return\n+        }\n+\n+        var cls = genClassForVnode(vnode);\n+\n+        \u002F\u002F handle transition classes\n+        var transitionClass = el._transitionClasses;\n+        if (isDef(transitionClass)) {\n+            cls = concat(cls, stringifyClass(transitionClass));\n+        }\n+\n+        \u002F\u002F set the class\n+        if (cls !== el._prevClass) {\n+            el.setAttribute('class', cls);\n+            el._prevClass = cls;\n+        }\n+    }\n+\n+    var klass = {\n+        create: updateClass,\n+        update: updateClass\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\n+\n+    function parseFilters (exp) {\n+        var inSingle = false;\n+        var inDouble = false;\n+        var inTemplateString = false;\n+        var inRegex = false;\n+        var curly = 0;\n+        var square = 0;\n+        var paren = 0;\n+        var lastFilterIndex = 0;\n+        var c, prev, i, expression, filters;\n+\n+        for (i = 0; i \u003C exp.length; i++) {\n+            prev = c;\n+            c = exp.charCodeAt(i);\n+            if (inSingle) {\n+                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n+            } else if (inDouble) {\n+                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n+            } else if (inTemplateString) {\n+                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n+            } else if (inRegex) {\n+                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n+            } else if (\n+                c === 0x7C && \u002F\u002F pipe\n+                exp.charCodeAt(i + 1) !== 0x7C &&\n+                exp.charCodeAt(i - 1) !== 0x7C &&\n+                !curly && !square && !paren\n+            ) {\n+                if (expression === undefined) {\n+                    \u002F\u002F first filter, end of expression\n+                    lastFilterIndex = i + 1;\n+                    expression = exp.slice(0, i).trim();\n+                } else {\n+                    pushFilter();\n+                }\n+            } else {\n+                switch (c) {\n+                    case 0x22: inDouble = true; break         \u002F\u002F \"\n+                    case 0x27: inSingle = true; break         \u002F\u002F '\n+                    case 0x60: inTemplateString = true; break \u002F\u002F `\n+                    case 0x28: paren++; break                 \u002F\u002F (\n+                    case 0x29: paren--; break                 \u002F\u002F )\n+                    case 0x5B: square++; break                \u002F\u002F [\n+                    case 0x5D: square--; break                \u002F\u002F ]\n+                    case 0x7B: curly++; break                 \u002F\u002F {\n+                    case 0x7D: curly--; break                 \u002F\u002F }\n+                }\n+                if (c === 0x2f) { \u002F\u002F \u002F\n+                    var j = i - 1;\n+                    var p = (void 0);\n+                    \u002F\u002F find first non-whitespace prev char\n+                    for (; j >= 0; j--) {\n+                        p = exp.charAt(j);\n+                        if (p !== ' ') { break }\n+                    }\n+                    if (!p || !validDivisionCharRE.test(p)) {\n+                        inRegex = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        if (expression === undefined) {\n+            expression = exp.slice(0, i).trim();\n+        } else if (lastFilterIndex !== 0) {\n+            pushFilter();\n+        }\n+\n+        function pushFilter () {\n+            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n+            lastFilterIndex = i + 1;\n+        }\n+\n+        if (filters) {\n+            for (i = 0; i \u003C filters.length; i++) {\n+                expression = wrapFilter(expression, filters[i]);\n+            }\n+        }\n+\n+        return expression\n+    }\n+\n+    function wrapFilter (exp, filter) {\n+        var i = filter.indexOf('(');\n+        if (i \u003C 0) {\n+            \u002F\u002F _f: resolveFilter\n+            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n+        } else {\n+            var name = filter.slice(0, i);\n+            var args = filter.slice(i + 1);\n+            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+    function baseWarn (msg, range) {\n+        console.error((\"[Vue compiler]: \" + msg));\n+    }\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    function pluckModuleFunction (\n+        modules,\n+        key\n+    ) {\n+        return modules\n+            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n+            : []\n+    }\n+\n+    function addProp (el, name, value, range, dynamic) {\n+        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    function addAttr (el, name, value, range, dynamic) {\n+        var attrs = dynamic\n+            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n+            : (el.attrs || (el.attrs = []));\n+        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    \u002F\u002F add a raw attr (use this in preTransforms)\n+    function addRawAttr (el, name, value, range) {\n+        el.attrsMap[name] = value;\n+        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n+    }\n+\n+    function addDirective (\n+        el,\n+        name,\n+        rawName,\n+        value,\n+        arg,\n+        isDynamicArg,\n+        modifiers,\n+        range\n+    ) {\n+        (el.directives || (el.directives = [])).push(rangeSetItem({\n+            name: name,\n+            rawName: rawName,\n+            value: value,\n+            arg: arg,\n+            isDynamicArg: isDynamicArg,\n+            modifiers: modifiers\n+        }, range));\n+        el.plain = false;\n+    }\n+\n+    function prependModifierMarker (symbol, name, dynamic) {\n+        return dynamic\n+            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n+            : symbol + name \u002F\u002F mark the event as captured\n+    }\n+\n+    function addHandler (\n+        el,\n+        name,\n+        value,\n+        modifiers,\n+        important,\n+        warn,\n+        range,\n+        dynamic\n+    ) {\n+        modifiers = modifiers || emptyObject;\n+        \u002F\u002F warn prevent and passive modifier\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            warn &&\n+            modifiers.prevent && modifiers.passive\n+        ) {\n+            warn(\n+                'passive and prevent can\\'t be used together. ' +\n+                'Passive handler can\\'t prevent default event.',\n+                range\n+            );\n+        }\n+\n+        \u002F\u002F normalize click.right and click.middle since they don't actually fire\n+        \u002F\u002F this is technically browser-specific, but at least for now browsers are\n+        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\n+        if (modifiers.right) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'contextmenu';\n+                delete modifiers.right;\n+            }\n+        } else if (modifiers.middle) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'mouseup';\n+            }\n+        }\n+\n+        \u002F\u002F check capture modifier\n+        if (modifiers.capture) {\n+            delete modifiers.capture;\n+            name = prependModifierMarker('!', name, dynamic);\n+        }\n+        if (modifiers.once) {\n+            delete modifiers.once;\n+            name = prependModifierMarker('~', name, dynamic);\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (modifiers.passive) {\n+            delete modifiers.passive;\n+            name = prependModifierMarker('&', name, dynamic);\n+        }\n+\n+        var events;\n+        if (modifiers.native) {\n+            delete modifiers.native;\n+            events = el.nativeEvents || (el.nativeEvents = {});\n+        } else {\n+            events = el.events || (el.events = {});\n+        }\n+\n+        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n+        if (modifiers !== emptyObject) {\n+            newHandler.modifiers = modifiers;\n+        }\n+\n+        var handlers = events[name];\n+      \u002F* istanbul ignore if *\u002F\n+        if (Array.isArray(handlers)) {\n+            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n+        } else if (handlers) {\n+            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n+        } else {\n+            events[name] = newHandler;\n+        }\n+\n+        el.plain = false;\n+    }\n+\n+    function getRawBindingAttr (\n+        el,\n+        name\n+    ) {\n+        return el.rawAttrsMap[':' + name] ||\n+            el.rawAttrsMap['v-bind:' + name] ||\n+            el.rawAttrsMap[name]\n+    }\n+\n+    function getBindingAttr (\n+        el,\n+        name,\n+        getStatic\n+    ) {\n+        var dynamicValue =\n+            getAndRemoveAttr(el, ':' + name) ||\n+            getAndRemoveAttr(el, 'v-bind:' + name);\n+        if (dynamicValue != null) {\n+            return parseFilters(dynamicValue)\n+        } else if (getStatic !== false) {\n+            var staticValue = getAndRemoveAttr(el, name);\n+            if (staticValue != null) {\n+                return JSON.stringify(staticValue)\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\n+    \u002F\u002F doesn't get processed by processAttrs.\n+    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\n+    \u002F\u002F needed during codegen.\n+    function getAndRemoveAttr (\n+        el,\n+        name,\n+        removeFromMap\n+    ) {\n+        var val;\n+        if ((val = el.attrsMap[name]) != null) {\n+            var list = el.attrsList;\n+            for (var i = 0, l = list.length; i \u003C l; i++) {\n+                if (list[i].name === name) {\n+                    list.splice(i, 1);\n+                    break\n+                }\n+            }\n+        }\n+        if (removeFromMap) {\n+            delete el.attrsMap[name];\n+        }\n+        return val\n+    }\n+\n+    function getAndRemoveAttrByRegex (\n+        el,\n+        name\n+    ) {\n+        var list = el.attrsList;\n+        for (var i = 0, l = list.length; i \u003C l; i++) {\n+            var attr = list[i];\n+            if (name.test(attr.name)) {\n+                list.splice(i, 1);\n+                return attr\n+            }\n+        }\n+    }\n+\n+    function rangeSetItem (\n+        item,\n+        range\n+    ) {\n+        if (range) {\n+            if (range.start != null) {\n+                item.start = range.start;\n+            }\n+            if (range.end != null) {\n+                item.end = range.end;\n+            }\n+        }\n+        return item\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Cross-platform code generation for component v-model\n+     *\u002F\n+    function genComponentModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var ref = modifiers || {};\n+        var number = ref.number;\n+        var trim = ref.trim;\n+\n+        var baseValueExpression = '$$v';\n+        var valueExpression = baseValueExpression;\n+        if (trim) {\n+            valueExpression =\n+                \"(typeof \" + baseValueExpression + \" === 'string'\" +\n+                \"? \" + baseValueExpression + \".trim()\" +\n+                \": \" + baseValueExpression + \")\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+        var assignment = genAssignmentCode(value, valueExpression);\n+\n+        el.model = {\n+            value: (\"(\" + value + \")\"),\n+            expression: JSON.stringify(value),\n+            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n+        };\n+    }\n+\n+    \u002F**\n+     * Cross-platform codegen helper for generating v-model value assignment code.\n+     *\u002F\n+    function genAssignmentCode (\n+        value,\n+        assignment\n+    ) {\n+        var res = parseModel(value);\n+        if (res.key === null) {\n+            return (value + \"=\" + assignment)\n+        } else {\n+            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n+        }\n+    }\n+\n+    \u002F**\n+     * Parse a v-model expression into a base path and a final key segment.\n+     * Handles both dot-path and possible square brackets.\n+     *\n+     * Possible cases:\n+     *\n+     * - test\n+     * - test[key]\n+     * - test[test1[key]]\n+     * - test[\"a\"][key]\n+     * - xxx.test[a[a].test1[key]]\n+     * - test.xxx.a[\"asa\"][test1[key]]\n+     *\n+     *\u002F\n+\n+    var len, str, chr, index$1, expressionPos, expressionEndPos;\n+\n+\n+\n+    function parseModel (val) {\n+        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\n+        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\n+        val = val.trim();\n+        len = val.length;\n+\n+        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\n+            index$1 = val.lastIndexOf('.');\n+            if (index$1 > -1) {\n+                return {\n+                    exp: val.slice(0, index$1),\n+                    key: '\"' + val.slice(index$1 + 1) + '\"'\n+                }\n+            } else {\n+                return {\n+                    exp: val,\n+                    key: null\n+                }\n+            }\n+        }\n+\n+        str = val;\n+        index$1 = expressionPos = expressionEndPos = 0;\n+\n+        while (!eof()) {\n+            chr = next();\n+          \u002F* istanbul ignore if *\u002F\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+            } else if (chr === 0x5B) {\n+                parseBracket(chr);\n+            }\n+        }\n+\n+        return {\n+            exp: val.slice(0, expressionPos),\n+            key: val.slice(expressionPos + 1, expressionEndPos)\n+        }\n+    }\n+\n+    function next () {\n+        return str.charCodeAt(++index$1)\n+    }\n+\n+    function eof () {\n+        return index$1 >= len\n+    }\n+\n+    function isStringStart (chr) {\n+        return chr === 0x22 || chr === 0x27\n+    }\n+\n+    function parseBracket (chr) {\n+        var inBracket = 1;\n+        expressionPos = index$1;\n+        while (!eof()) {\n+            chr = next();\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+                continue\n+            }\n+            if (chr === 0x5B) { inBracket++; }\n+            if (chr === 0x5D) { inBracket--; }\n+            if (inBracket === 0) {\n+                expressionEndPos = index$1;\n+                break\n+            }\n+        }\n+    }\n+\n+    function parseString (chr) {\n+        var stringQuote = chr;\n+        while (!eof()) {\n+            chr = next();\n+            if (chr === stringQuote) {\n+                break\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn$1;\n+\n+    \u002F\u002F in some cases, the event used has to be determined at runtime\n+    \u002F\u002F so we used some reserved tokens during compile.\n+    var RANGE_TOKEN = '__r';\n+    var CHECKBOX_RADIO_TOKEN = '__c';\n+\n+    function model (\n+        el,\n+        dir,\n+        _warn\n+    ) {\n+        warn$1 = _warn;\n+        var value = dir.value;\n+        var modifiers = dir.modifiers;\n+        var tag = el.tag;\n+        var type = el.attrsMap.type;\n+\n+        {\n+            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\n+            \u002F\u002F value will throw an error.\n+            if (tag === 'input' && type === 'file') {\n+                warn$1(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n+                    \"File inputs are read only. Use a v-on:change listener instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+        }\n+\n+        if (el.component) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else if (tag === 'select') {\n+            genSelect(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'checkbox') {\n+            genCheckboxModel(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'radio') {\n+            genRadioModel(el, value, modifiers);\n+        } else if (tag === 'input' || tag === 'textarea') {\n+            genDefaultModel(el, value, modifiers);\n+        } else if (!config.isReservedTag(tag)) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else {\n+            warn$1(\n+                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                \"v-model is not supported on this element type. \" +\n+                'If you are working with contenteditable, it\\'s recommended to ' +\n+                'wrap a library dedicated for that purpose inside a custom component.',\n+                el.rawAttrsMap['v-model']\n+            );\n+        }\n+\n+        \u002F\u002F ensure runtime directive metadata\n+        return true\n+    }\n+\n+    function genCheckboxModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n+        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n+        addProp(el, 'checked',\n+            \"Array.isArray(\" + value + \")\" +\n+            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n+                trueValueBinding === 'true'\n+                    ? (\":(\" + value + \")\")\n+                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n+            )\n+        );\n+        addHandler(el, 'change',\n+            \"var $$a=\" + value + \",\" +\n+            '$$el=$event.target,' +\n+            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n+            'if(Array.isArray($$a)){' +\n+            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n+            '$$i=_i($$a,$$v);' +\n+            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n+            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n+            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n+            null, true\n+        );\n+    }\n+\n+    function genRadioModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n+        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n+        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n+    }\n+\n+    function genSelect (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var selectedVal = \"Array.prototype.filter\" +\n+            \".call($event.target.options,function(o){return o.selected})\" +\n+            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n+            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n+\n+        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n+        var code = \"var $$selectedVal = \" + selectedVal + \";\";\n+        code = code + \" \" + (genAssignmentCode(value, assignment));\n+        addHandler(el, 'change', code, null, true);\n+    }\n+\n+    function genDefaultModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var type = el.attrsMap.type;\n+\n+        \u002F\u002F warn if v-bind:value conflicts with v-model\n+        \u002F\u002F except for inputs with v-bind:type\n+        {\n+            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n+            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n+            if (value$1 && !typeBinding) {\n+                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n+                warn$1(\n+                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n+                    'because the latter already expands to a value binding internally',\n+                    el.rawAttrsMap[binding]\n+                );\n+            }\n+        }\n+\n+        var ref = modifiers || {};\n+        var lazy = ref.lazy;\n+        var number = ref.number;\n+        var trim = ref.trim;\n+        var needCompositionGuard = !lazy && type !== 'range';\n+        var event = lazy\n+            ? 'change'\n+            : type === 'range'\n+                ? RANGE_TOKEN\n+                : 'input';\n+\n+        var valueExpression = '$event.target.value';\n+        if (trim) {\n+            valueExpression = \"$event.target.value.trim()\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+\n+        var code = genAssignmentCode(value, valueExpression);\n+        if (needCompositionGuard) {\n+            code = \"if($event.target.composing)return;\" + code;\n+        }\n+\n+        addProp(el, 'value', (\"(\" + value + \")\"));\n+        addHandler(el, event, code, null, true);\n+        if (trim || number) {\n+            addHandler(el, 'blur', '$forceUpdate()');\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\n+    \u002F\u002F it's important to place the event as the first in the array because\n+    \u002F\u002F the whole point is ensuring the v-model callback gets called before\n+    \u002F\u002F user-attached handlers.\n+    function normalizeEvents (on) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[RANGE_TOKEN])) {\n+            \u002F\u002F IE input[type=range] only supports `change` event\n+            var event = isIE ? 'change' : 'input';\n+            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n+            delete on[RANGE_TOKEN];\n+        }\n+        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\n+        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n+            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n+            delete on[CHECKBOX_RADIO_TOKEN];\n+        }\n+    }\n+\n+    var target$1;\n+\n+    function createOnceHandler$1 (event, handler, capture) {\n+        var _target = target$1; \u002F\u002F save current target element in closure\n+        return function onceHandler () {\n+            var res = handler.apply(null, arguments);\n+            if (res !== null) {\n+                remove$2(event, onceHandler, capture, _target);\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n+    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\n+    \u002F\u002F safe to exclude.\n+    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\n+\n+    function add$1 (\n+        name,\n+        handler,\n+        capture,\n+        passive\n+    ) {\n+        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\n+        \u002F\u002F attached to outer element during patch, and triggered again. This\n+        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\n+        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\n+        \u002F\u002F and the handler would only fire if the event passed to it was fired\n+        \u002F\u002F AFTER it was attached.\n+        if (useMicrotaskFix) {\n+            var attachedTimestamp = currentFlushTimestamp;\n+            var original = handler;\n+            handler = original._wrapper = function (e) {\n+                if (\n+                    \u002F\u002F no bubbling, should always fire.\n+                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\n+                \u002F\u002F certain weird environments...\n+                e.target === e.currentTarget ||\n+                \u002F\u002F event is fired after handler attachment\n+                e.timeStamp >= attachedTimestamp ||\n+                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\n+                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n+                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\n+                e.timeStamp \u003C= 0 ||\n+                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\n+                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\n+                \u002F\u002F starting reference\n+                e.target.ownerDocument !== document\n+                ) {\n+                    return original.apply(this, arguments)\n+                }\n+            };\n+        }\n+        target$1.addEventListener(\n+            name,\n+            handler,\n+            supportsPassive\n+                ? { capture: capture, passive: passive }\n+                : capture\n+        );\n+    }\n+\n+    function remove$2 (\n+        name,\n+        handler,\n+        capture,\n+        _target\n+    ) {\n+        (_target || target$1).removeEventListener(\n+            name,\n+            handler._wrapper || handler,\n+            capture\n+        );\n+    }\n+\n+    function updateDOMListeners (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n+            return\n+        }\n+        var on = vnode.data.on || {};\n+        var oldOn = oldVnode.data.on || {};\n+        target$1 = vnode.elm;\n+        normalizeEvents(on);\n+        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n+        target$1 = undefined;\n+    }\n+\n+    var events = {\n+        create: updateDOMListeners,\n+        update: updateDOMListeners\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var svgContainer;\n+\n+    function updateDOMProps (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n+            return\n+        }\n+        var key, cur;\n+        var elm = vnode.elm;\n+        var oldProps = oldVnode.data.domProps || {};\n+        var props = vnode.data.domProps || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(props.__ob__)) {\n+            props = vnode.data.domProps = extend({}, props);\n+        }\n+\n+        for (key in oldProps) {\n+            if (!(key in props)) {\n+                elm[key] = '';\n+            }\n+        }\n+\n+        for (key in props) {\n+            cur = props[key];\n+            \u002F\u002F ignore children if the node has textContent or innerHTML,\n+            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\n+            \u002F\u002F on subsequent patches (#3360)\n+            if (key === 'textContent' || key === 'innerHTML') {\n+                if (vnode.children) { vnode.children.length = 0; }\n+                if (cur === oldProps[key]) { continue }\n+                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\n+                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\n+                if (elm.childNodes.length === 1) {\n+                    elm.removeChild(elm.childNodes[0]);\n+                }\n+            }\n+\n+            if (key === 'value' && elm.tagName !== 'PROGRESS') {\n+                \u002F\u002F store value as _value as well since\n+                \u002F\u002F non-string values will be stringified\n+                elm._value = cur;\n+                \u002F\u002F avoid resetting cursor position when value is the same\n+                var strCur = isUndef(cur) ? '' : String(cur);\n+                if (shouldUpdateValue(elm, strCur)) {\n+                    elm.value = strCur;\n+                }\n+            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n+                \u002F\u002F IE doesn't support innerHTML for SVG elements\n+                svgContainer = svgContainer || document.createElement('div');\n+                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\n+                var svg = svgContainer.firstChild;\n+                while (elm.firstChild) {\n+                    elm.removeChild(elm.firstChild);\n+                }\n+                while (svg.firstChild) {\n+                    elm.appendChild(svg.firstChild);\n+                }\n+            } else if (\n+                \u002F\u002F skip the update if old and new VDOM state is the same.\n+            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\n+            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\n+            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\n+            cur !== oldProps[key]\n+            ) {\n+                \u002F\u002F some property updates can throw\n+                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\n+                try {\n+                    elm[key] = cur;\n+                } catch (e) {}\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\n+\n+\n+    function shouldUpdateValue (elm, checkVal) {\n+        return (!elm.composing && (\n+            elm.tagName === 'OPTION' ||\n+            isNotInFocusAndDirty(elm, checkVal) ||\n+            isDirtyWithModifiers(elm, checkVal)\n+        ))\n+    }\n+\n+    function isNotInFocusAndDirty (elm, checkVal) {\n+        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\n+        \u002F\u002F not equal to the updated value\n+        var notInFocus = true;\n+        \u002F\u002F #6157\n+        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\n+        try { notInFocus = document.activeElement !== elm; } catch (e) {}\n+        return notInFocus && elm.value !== checkVal\n+    }\n+\n+    function isDirtyWithModifiers (elm, newVal) {\n+        var value = elm.value;\n+        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\n+        if (isDef(modifiers)) {\n+            if (modifiers.number) {\n+                return toNumber(value) !== toNumber(newVal)\n+            }\n+            if (modifiers.trim) {\n+                return value.trim() !== newVal.trim()\n+            }\n+        }\n+        return value !== newVal\n+    }\n+\n+    var domProps = {\n+        create: updateDOMProps,\n+        update: updateDOMProps\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var parseStyleText = cached(function (cssText) {\n+        var res = {};\n+        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\n+        var propertyDelimiter = \u002F:(.+)\u002F;\n+        cssText.split(listDelimiter).forEach(function (item) {\n+            if (item) {\n+                var tmp = item.split(propertyDelimiter);\n+                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n+            }\n+        });\n+        return res\n+    });\n+\n+    \u002F\u002F merge static and dynamic style data on the same vnode\n+    function normalizeStyleData (data) {\n+        var style = normalizeStyleBinding(data.style);\n+        \u002F\u002F static style is pre-processed into an object during compilation\n+        \u002F\u002F and is always a fresh object, so it's safe to merge into it\n+        return data.staticStyle\n+            ? extend(data.staticStyle, style)\n+            : style\n+    }\n+\n+    \u002F\u002F normalize possible array \u002F string values into Object\n+    function normalizeStyleBinding (bindingStyle) {\n+        if (Array.isArray(bindingStyle)) {\n+            return toObject(bindingStyle)\n+        }\n+        if (typeof bindingStyle === 'string') {\n+            return parseStyleText(bindingStyle)\n+        }\n+        return bindingStyle\n+    }\n+\n+    \u002F**\n+     * parent component style should be after child's\n+     * so that parent component's style could override it\n+     *\u002F\n+    function getStyle (vnode, checkChild) {\n+        var res = {};\n+        var styleData;\n+\n+        if (checkChild) {\n+            var childNode = vnode;\n+            while (childNode.componentInstance) {\n+                childNode = childNode.componentInstance._vnode;\n+                if (\n+                    childNode && childNode.data &&\n+                    (styleData = normalizeStyleData(childNode.data))\n+                ) {\n+                    extend(res, styleData);\n+                }\n+            }\n+        }\n+\n+        if ((styleData = normalizeStyleData(vnode.data))) {\n+            extend(res, styleData);\n+        }\n+\n+        var parentNode = vnode;\n+        while ((parentNode = parentNode.parent)) {\n+            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n+                extend(res, styleData);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var cssVarRE = \u002F^--\u002F;\n+    var importantRE = \u002F\\s*!important$\u002F;\n+    var setProp = function (el, name, val) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (cssVarRE.test(name)) {\n+            el.style.setProperty(name, val);\n+        } else if (importantRE.test(val)) {\n+            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n+        } else {\n+            var normalizedName = normalize(name);\n+            if (Array.isArray(val)) {\n+                \u002F\u002F Support values array created by autoprefixer, e.g.\n+                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n+                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\n+                for (var i = 0, len = val.length; i \u003C len; i++) {\n+                    el.style[normalizedName] = val[i];\n+                }\n+            } else {\n+                el.style[normalizedName] = val;\n+            }\n+        }\n+    };\n+\n+    var vendorNames = ['Webkit', 'Moz', 'ms'];\n+\n+    var emptyStyle;\n+    var normalize = cached(function (prop) {\n+        emptyStyle = emptyStyle || document.createElement('div').style;\n+        prop = camelize(prop);\n+        if (prop !== 'filter' && (prop in emptyStyle)) {\n+            return prop\n+        }\n+        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n+        for (var i = 0; i \u003C vendorNames.length; i++) {\n+            var name = vendorNames[i] + capName;\n+            if (name in emptyStyle) {\n+                return name\n+            }\n+        }\n+    });\n+\n+    function updateStyle (oldVnode, vnode) {\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+\n+        if (isUndef(data.staticStyle) && isUndef(data.style) &&\n+            isUndef(oldData.staticStyle) && isUndef(oldData.style)\n+        ) {\n+            return\n+        }\n+\n+        var cur, name;\n+        var el = vnode.elm;\n+        var oldStaticStyle = oldData.staticStyle;\n+        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n+\n+        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\n+        var oldStyle = oldStaticStyle || oldStyleBinding;\n+\n+        var style = normalizeStyleBinding(vnode.data.style) || {};\n+\n+        \u002F\u002F store normalized style under a different key for next diff\n+        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\n+        \u002F\u002F to mutate it.\n+        vnode.data.normalizedStyle = isDef(style.__ob__)\n+            ? extend({}, style)\n+            : style;\n+\n+        var newStyle = getStyle(vnode, true);\n+\n+        for (name in oldStyle) {\n+            if (isUndef(newStyle[name])) {\n+                setProp(el, name, '');\n+            }\n+        }\n+        for (name in newStyle) {\n+            cur = newStyle[name];\n+            if (cur !== oldStyle[name]) {\n+                \u002F\u002F ie9 setting to null has no effect, must use empty string\n+                setProp(el, name, cur == null ? '' : cur);\n+            }\n+        }\n+    }\n+\n+    var style = {\n+        create: updateStyle,\n+        update: updateStyle\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var whitespaceRE = \u002F\\s+\u002F;\n+\n+    \u002F**\n+     * Add class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function addClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n+            } else {\n+                el.classList.add(cls);\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\n+                el.setAttribute('class', (cur + cls).trim());\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Remove class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function removeClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n+            } else {\n+                el.classList.remove(cls);\n+            }\n+            if (!el.classList.length) {\n+                el.removeAttribute('class');\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            var tar = ' ' + cls + ' ';\n+            while (cur.indexOf(tar) >= 0) {\n+                cur = cur.replace(tar, ' ');\n+            }\n+            cur = cur.trim();\n+            if (cur) {\n+                el.setAttribute('class', cur);\n+            } else {\n+                el.removeAttribute('class');\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveTransition (def$$1) {\n+        if (!def$$1) {\n+            return\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if (typeof def$$1 === 'object') {\n+            var res = {};\n+            if (def$$1.css !== false) {\n+                extend(res, autoCssTransition(def$$1.name || 'v'));\n+            }\n+            extend(res, def$$1);\n+            return res\n+        } else if (typeof def$$1 === 'string') {\n+            return autoCssTransition(def$$1)\n+        }\n+    }\n+\n+    var autoCssTransition = cached(function (name) {\n+        return {\n+            enterClass: (name + \"-enter\"),\n+            enterToClass: (name + \"-enter-to\"),\n+            enterActiveClass: (name + \"-enter-active\"),\n+            leaveClass: (name + \"-leave\"),\n+            leaveToClass: (name + \"-leave-to\"),\n+            leaveActiveClass: (name + \"-leave-active\")\n+        }\n+    });\n+\n+    var hasTransition = inBrowser && !isIE9;\n+    var TRANSITION = 'transition';\n+    var ANIMATION = 'animation';\n+\n+    \u002F\u002F Transition property\u002Fevent sniffing\n+    var transitionProp = 'transition';\n+    var transitionEndEvent = 'transitionend';\n+    var animationProp = 'animation';\n+    var animationEndEvent = 'animationend';\n+    if (hasTransition) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (window.ontransitionend === undefined &&\n+            window.onwebkittransitionend !== undefined\n+        ) {\n+            transitionProp = 'WebkitTransition';\n+            transitionEndEvent = 'webkitTransitionEnd';\n+        }\n+        if (window.onanimationend === undefined &&\n+            window.onwebkitanimationend !== undefined\n+        ) {\n+            animationProp = 'WebkitAnimation';\n+            animationEndEvent = 'webkitAnimationEnd';\n+        }\n+    }\n+\n+    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\n+    var raf = inBrowser\n+        ? window.requestAnimationFrame\n+            ? window.requestAnimationFrame.bind(window)\n+            : setTimeout\n+        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\n+\n+    function nextFrame (fn) {\n+        raf(function () {\n+            raf(fn);\n+        });\n+    }\n+\n+    function addTransitionClass (el, cls) {\n+        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n+        if (transitionClasses.indexOf(cls) \u003C 0) {\n+            transitionClasses.push(cls);\n+            addClass(el, cls);\n+        }\n+    }\n+\n+    function removeTransitionClass (el, cls) {\n+        if (el._transitionClasses) {\n+            remove(el._transitionClasses, cls);\n+        }\n+        removeClass(el, cls);\n+    }\n+\n+    function whenTransitionEnds (\n+        el,\n+        expectedType,\n+        cb\n+    ) {\n+        var ref = getTransitionInfo(el, expectedType);\n+        var type = ref.type;\n+        var timeout = ref.timeout;\n+        var propCount = ref.propCount;\n+        if (!type) { return cb() }\n+        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n+        var ended = 0;\n+        var end = function () {\n+            el.removeEventListener(event, onEnd);\n+            cb();\n+        };\n+        var onEnd = function (e) {\n+            if (e.target === el) {\n+                if (++ended >= propCount) {\n+                    end();\n+                }\n+            }\n+        };\n+        setTimeout(function () {\n+            if (ended \u003C propCount) {\n+                end();\n+            }\n+        }, timeout + 1);\n+        el.addEventListener(event, onEnd);\n+    }\n+\n+    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\n+\n+    function getTransitionInfo (el, expectedType) {\n+        var styles = window.getComputedStyle(el);\n+        \u002F\u002F JSDOM may return undefined for transition properties\n+        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n+        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n+        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n+        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n+        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n+        var animationTimeout = getTimeout(animationDelays, animationDurations);\n+\n+        var type;\n+        var timeout = 0;\n+        var propCount = 0;\n+      \u002F* istanbul ignore if *\u002F\n+        if (expectedType === TRANSITION) {\n+            if (transitionTimeout > 0) {\n+                type = TRANSITION;\n+                timeout = transitionTimeout;\n+                propCount = transitionDurations.length;\n+            }\n+        } else if (expectedType === ANIMATION) {\n+            if (animationTimeout > 0) {\n+                type = ANIMATION;\n+                timeout = animationTimeout;\n+                propCount = animationDurations.length;\n+            }\n+        } else {\n+            timeout = Math.max(transitionTimeout, animationTimeout);\n+            type = timeout > 0\n+                ? transitionTimeout > animationTimeout\n+                    ? TRANSITION\n+                    : ANIMATION\n+                : null;\n+            propCount = type\n+                ? type === TRANSITION\n+                    ? transitionDurations.length\n+                    : animationDurations.length\n+                : 0;\n+        }\n+        var hasTransform =\n+            type === TRANSITION &&\n+            transformRE.test(styles[transitionProp + 'Property']);\n+        return {\n+            type: type,\n+            timeout: timeout,\n+            propCount: propCount,\n+            hasTransform: hasTransform\n+        }\n+    }\n+\n+    function getTimeout (delays, durations) {\n+      \u002F* istanbul ignore next *\u002F\n+        while (delays.length \u003C durations.length) {\n+            delays = delays.concat(delays);\n+        }\n+\n+        return Math.max.apply(null, durations.map(function (d, i) {\n+            return toMs(d) + toMs(delays[i])\n+        }))\n+    }\n+\n+    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n+    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\n+    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n+    \u002F\u002F as a floor function) causing unexpected behaviors\n+    function toMs (s) {\n+        return Number(s.slice(0, -1).replace(',', '.')) * 1000\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function enter (vnode, toggleDisplay) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call leave callback now\n+        if (isDef(el._leaveCb)) {\n+            el._leaveCb.cancelled = true;\n+            el._leaveCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data)) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._enterCb) || el.nodeType !== 1) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var enterClass = data.enterClass;\n+        var enterToClass = data.enterToClass;\n+        var enterActiveClass = data.enterActiveClass;\n+        var appearClass = data.appearClass;\n+        var appearToClass = data.appearToClass;\n+        var appearActiveClass = data.appearActiveClass;\n+        var beforeEnter = data.beforeEnter;\n+        var enter = data.enter;\n+        var afterEnter = data.afterEnter;\n+        var enterCancelled = data.enterCancelled;\n+        var beforeAppear = data.beforeAppear;\n+        var appear = data.appear;\n+        var afterAppear = data.afterAppear;\n+        var appearCancelled = data.appearCancelled;\n+        var duration = data.duration;\n+\n+        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\n+        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\n+        \u002F\u002F as the root node of a child component. In that case we need to check\n+        \u002F\u002F \u003Ctransition>'s parent for appear check.\n+        var context = activeInstance;\n+        var transitionNode = activeInstance.$vnode;\n+        while (transitionNode && transitionNode.parent) {\n+            context = transitionNode.context;\n+            transitionNode = transitionNode.parent;\n+        }\n+\n+        var isAppear = !context._isMounted || !vnode.isRootInsert;\n+\n+        if (isAppear && !appear && appear !== '') {\n+            return\n+        }\n+\n+        var startClass = isAppear && appearClass\n+            ? appearClass\n+            : enterClass;\n+        var activeClass = isAppear && appearActiveClass\n+            ? appearActiveClass\n+            : enterActiveClass;\n+        var toClass = isAppear && appearToClass\n+            ? appearToClass\n+            : enterToClass;\n+\n+        var beforeEnterHook = isAppear\n+            ? (beforeAppear || beforeEnter)\n+            : beforeEnter;\n+        var enterHook = isAppear\n+            ? (typeof appear === 'function' ? appear : enter)\n+            : enter;\n+        var afterEnterHook = isAppear\n+            ? (afterAppear || afterEnter)\n+            : afterEnter;\n+        var enterCancelledHook = isAppear\n+            ? (appearCancelled || enterCancelled)\n+            : enterCancelled;\n+\n+        var explicitEnterDuration = toNumber(\n+            isObject(duration)\n+                ? duration.enter\n+                : duration\n+        );\n+\n+        if (explicitEnterDuration != null) {\n+            checkDuration(explicitEnterDuration, 'enter', vnode);\n+        }\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(enterHook);\n+\n+        var cb = el._enterCb = once(function () {\n+            if (expectsCSS) {\n+                removeTransitionClass(el, toClass);\n+                removeTransitionClass(el, activeClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, startClass);\n+                }\n+                enterCancelledHook && enterCancelledHook(el);\n+            } else {\n+                afterEnterHook && afterEnterHook(el);\n+            }\n+            el._enterCb = null;\n+        });\n+\n+        if (!vnode.data.show) {\n+            \u002F\u002F remove pending leave element on enter by injecting an insert hook\n+            mergeVNodeHook(vnode, 'insert', function () {\n+                var parent = el.parentNode;\n+                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n+                if (pendingNode &&\n+                    pendingNode.tag === vnode.tag &&\n+                    pendingNode.elm._leaveCb\n+                ) {\n+                    pendingNode.elm._leaveCb();\n+                }\n+                enterHook && enterHook(el, cb);\n+            });\n+        }\n+\n+        \u002F\u002F start enter transition\n+        beforeEnterHook && beforeEnterHook(el);\n+        if (expectsCSS) {\n+            addTransitionClass(el, startClass);\n+            addTransitionClass(el, activeClass);\n+            nextFrame(function () {\n+                removeTransitionClass(el, startClass);\n+                if (!cb.cancelled) {\n+                    addTransitionClass(el, toClass);\n+                    if (!userWantsControl) {\n+                        if (isValidDuration(explicitEnterDuration)) {\n+                            setTimeout(cb, explicitEnterDuration);\n+                        } else {\n+                            whenTransitionEnds(el, type, cb);\n+                        }\n+                    }\n+                }\n+            });\n+        }\n+\n+        if (vnode.data.show) {\n+            toggleDisplay && toggleDisplay();\n+            enterHook && enterHook(el, cb);\n+        }\n+\n+        if (!expectsCSS && !userWantsControl) {\n+            cb();\n+        }\n+    }\n+\n+    function leave (vnode, rm) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call enter callback now\n+        if (isDef(el._enterCb)) {\n+            el._enterCb.cancelled = true;\n+            el._enterCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data) || el.nodeType !== 1) {\n+            return rm()\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._leaveCb)) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var leaveClass = data.leaveClass;\n+        var leaveToClass = data.leaveToClass;\n+        var leaveActiveClass = data.leaveActiveClass;\n+        var beforeLeave = data.beforeLeave;\n+        var leave = data.leave;\n+        var afterLeave = data.afterLeave;\n+        var leaveCancelled = data.leaveCancelled;\n+        var delayLeave = data.delayLeave;\n+        var duration = data.duration;\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(leave);\n+\n+        var explicitLeaveDuration = toNumber(\n+            isObject(duration)\n+                ? duration.leave\n+                : duration\n+        );\n+\n+        if (isDef(explicitLeaveDuration)) {\n+            checkDuration(explicitLeaveDuration, 'leave', vnode);\n+        }\n+\n+        var cb = el._leaveCb = once(function () {\n+            if (el.parentNode && el.parentNode._pending) {\n+                el.parentNode._pending[vnode.key] = null;\n+            }\n+            if (expectsCSS) {\n+                removeTransitionClass(el, leaveToClass);\n+                removeTransitionClass(el, leaveActiveClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, leaveClass);\n+                }\n+                leaveCancelled && leaveCancelled(el);\n+            } else {\n+                rm();\n+                afterLeave && afterLeave(el);\n+            }\n+            el._leaveCb = null;\n+        });\n+\n+        if (delayLeave) {\n+            delayLeave(performLeave);\n+        } else {\n+            performLeave();\n+        }\n+\n+        function performLeave () {\n+            \u002F\u002F the delayed leave may have already been cancelled\n+            if (cb.cancelled) {\n+                return\n+            }\n+            \u002F\u002F record leaving element\n+            if (!vnode.data.show && el.parentNode) {\n+                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n+            }\n+            beforeLeave && beforeLeave(el);\n+            if (expectsCSS) {\n+                addTransitionClass(el, leaveClass);\n+                addTransitionClass(el, leaveActiveClass);\n+                nextFrame(function () {\n+                    removeTransitionClass(el, leaveClass);\n+                    if (!cb.cancelled) {\n+                        addTransitionClass(el, leaveToClass);\n+                        if (!userWantsControl) {\n+                            if (isValidDuration(explicitLeaveDuration)) {\n+                                setTimeout(cb, explicitLeaveDuration);\n+                            } else {\n+                                whenTransitionEnds(el, type, cb);\n+                            }\n+                        }\n+                    }\n+                });\n+            }\n+            leave && leave(el, cb);\n+            if (!expectsCSS && !userWantsControl) {\n+                cb();\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F only used in dev mode\n+    function checkDuration (val, name, vnode) {\n+        if (typeof val !== 'number') {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\n+                \"got \" + (JSON.stringify(val)) + \".\",\n+                vnode.context\n+            );\n+        } else if (isNaN(val)) {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\n+                'the duration expression might be incorrect.',\n+                vnode.context\n+            );\n+        }\n+    }\n+\n+    function isValidDuration (val) {\n+        return typeof val === 'number' && !isNaN(val)\n+    }\n+\n+    \u002F**\n+     * Normalize a transition hook's argument length. The hook may be:\n+     * - a merged hook (invoker) with the original in .fns\n+     * - a wrapped component method (check ._length)\n+     * - a plain function (.length)\n+     *\u002F\n+    function getHookArgumentsLength (fn) {\n+        if (isUndef(fn)) {\n+            return false\n+        }\n+        var invokerFns = fn.fns;\n+        if (isDef(invokerFns)) {\n+            \u002F\u002F invoker\n+            return getHookArgumentsLength(\n+                Array.isArray(invokerFns)\n+                    ? invokerFns[0]\n+                    : invokerFns\n+            )\n+        } else {\n+            return (fn._length || fn.length) > 1\n+        }\n+    }\n+\n+    function _enter (_, vnode) {\n+        if (vnode.data.show !== true) {\n+            enter(vnode);\n+        }\n+    }\n+\n+    var transition = inBrowser ? {\n+        create: _enter,\n+        activate: _enter,\n+        remove: function remove$$1 (vnode, rm) {\n+          \u002F* istanbul ignore else *\u002F\n+            if (vnode.data.show !== true) {\n+                leave(vnode, rm);\n+            } else {\n+                rm();\n+            }\n+        }\n+    } : {};\n+\n+    var platformModules = [\n+        attrs,\n+        klass,\n+        events,\n+        domProps,\n+        style,\n+        transition\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F the directive module should be applied last, after all\n+    \u002F\u002F built-in modules have been applied.\n+    var modules = platformModules.concat(baseModules);\n+\n+    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n+\n+    \u002F**\n+     * Not type checking this file because flow doesn't like attaching\n+     * properties to Elements.\n+     *\u002F\n+\n+  \u002F* istanbul ignore if *\u002F\n+    if (isIE9) {\n+        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\n+        document.addEventListener('selectionchange', function () {\n+            var el = document.activeElement;\n+            if (el && el.vmodel) {\n+                trigger(el, 'input');\n+            }\n+        });\n+    }\n+\n+    var directive = {\n+        inserted: function inserted (el, binding, vnode, oldVnode) {\n+            if (vnode.tag === 'select') {\n+                \u002F\u002F #6903\n+                if (oldVnode.elm && !oldVnode.elm._vOptions) {\n+                    mergeVNodeHook(vnode, 'postpatch', function () {\n+                        directive.componentUpdated(el, binding, vnode);\n+                    });\n+                } else {\n+                    setSelected(el, binding, vnode.context);\n+                }\n+                el._vOptions = [].map.call(el.options, getValue);\n+            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n+                el._vModifiers = binding.modifiers;\n+                if (!binding.modifiers.lazy) {\n+                    el.addEventListener('compositionstart', onCompositionStart);\n+                    el.addEventListener('compositionend', onCompositionEnd);\n+                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\n+                    \u002F\u002F switching focus before confirming composition choice\n+                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\n+                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\n+                    el.addEventListener('change', onCompositionEnd);\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (isIE9) {\n+                        el.vmodel = true;\n+                    }\n+                }\n+            }\n+        },\n+\n+        componentUpdated: function componentUpdated (el, binding, vnode) {\n+            if (vnode.tag === 'select') {\n+                setSelected(el, binding, vnode.context);\n+                \u002F\u002F in case the options rendered by v-for have changed,\n+                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\n+                \u002F\u002F detect such cases and filter out values that no longer has a matching\n+                \u002F\u002F option in the DOM.\n+                var prevOptions = el._vOptions;\n+                var curOptions = el._vOptions = [].map.call(el.options, getValue);\n+                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n+                    \u002F\u002F trigger change event if\n+                    \u002F\u002F no matching option found for at least one value\n+                    var needReset = el.multiple\n+                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n+                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n+                    if (needReset) {\n+                        trigger(el, 'change');\n+                    }\n+                }\n+            }\n+        }\n+    };\n+\n+    function setSelected (el, binding, vm) {\n+        actuallySetSelected(el, binding, vm);\n+      \u002F* istanbul ignore if *\u002F\n+        if (isIE || isEdge) {\n+            setTimeout(function () {\n+                actuallySetSelected(el, binding, vm);\n+            }, 0);\n+        }\n+    }\n+\n+    function actuallySetSelected (el, binding, vm) {\n+        var value = binding.value;\n+        var isMultiple = el.multiple;\n+        if (isMultiple && !Array.isArray(value)) {\n+            warn(\n+                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n+                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n+                vm\n+            );\n+            return\n+        }\n+        var selected, option;\n+        for (var i = 0, l = el.options.length; i \u003C l; i++) {\n+            option = el.options[i];\n+            if (isMultiple) {\n+                selected = looseIndexOf(value, getValue(option)) > -1;\n+                if (option.selected !== selected) {\n+                    option.selected = selected;\n+                }\n+            } else {\n+                if (looseEqual(getValue(option), value)) {\n+                    if (el.selectedIndex !== i) {\n+                        el.selectedIndex = i;\n+                    }\n+                    return\n+                }\n+            }\n+        }\n+        if (!isMultiple) {\n+            el.selectedIndex = -1;\n+        }\n+    }\n+\n+    function hasNoMatchingOption (value, options) {\n+        return options.every(function (o) { return !looseEqual(o, value); })\n+    }\n+\n+    function getValue (option) {\n+        return '_value' in option\n+            ? option._value\n+            : option.value\n+    }\n+\n+    function onCompositionStart (e) {\n+        e.target.composing = true;\n+    }\n+\n+    function onCompositionEnd (e) {\n+        \u002F\u002F prevent triggering an input event for no reason\n+        if (!e.target.composing) { return }\n+        e.target.composing = false;\n+        trigger(e.target, 'input');\n+    }\n+\n+    function trigger (el, type) {\n+        var e = document.createEvent('HTMLEvents');\n+        e.initEvent(type, true, true);\n+        el.dispatchEvent(e);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F recursively search for possible transition defined inside the component root\n+    function locateNode (vnode) {\n+        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n+            ? locateNode(vnode.componentInstance._vnode)\n+            : vnode\n+    }\n+\n+    var show = {\n+        bind: function bind (el, ref, vnode) {\n+            var value = ref.value;\n+\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            var originalDisplay = el.__vOriginalDisplay =\n+                el.style.display === 'none' ? '' : el.style.display;\n+            if (value && transition$$1) {\n+                vnode.data.show = true;\n+                enter(vnode, function () {\n+                    el.style.display = originalDisplay;\n+                });\n+            } else {\n+                el.style.display = value ? originalDisplay : 'none';\n+            }\n+        },\n+\n+        update: function update (el, ref, vnode) {\n+            var value = ref.value;\n+            var oldValue = ref.oldValue;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (!value === !oldValue) { return }\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            if (transition$$1) {\n+                vnode.data.show = true;\n+                if (value) {\n+                    enter(vnode, function () {\n+                        el.style.display = el.__vOriginalDisplay;\n+                    });\n+                } else {\n+                    leave(vnode, function () {\n+                        el.style.display = 'none';\n+                    });\n+                }\n+            } else {\n+                el.style.display = value ? el.__vOriginalDisplay : 'none';\n+            }\n+        },\n+\n+        unbind: function unbind (\n+            el,\n+            binding,\n+            vnode,\n+            oldVnode,\n+            isDestroy\n+        ) {\n+            if (!isDestroy) {\n+                el.style.display = el.__vOriginalDisplay;\n+            }\n+        }\n+    };\n+\n+    var platformDirectives = {\n+        model: directive,\n+        show: show\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var transitionProps = {\n+        name: String,\n+        appear: Boolean,\n+        css: Boolean,\n+        mode: String,\n+        type: String,\n+        enterClass: String,\n+        leaveClass: String,\n+        enterToClass: String,\n+        leaveToClass: String,\n+        enterActiveClass: String,\n+        leaveActiveClass: String,\n+        appearClass: String,\n+        appearActiveClass: String,\n+        appearToClass: String,\n+        duration: [Number, String, Object]\n+    };\n+\n+    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\n+    \u002F\u002F we want to recursively retrieve the real component to be rendered\n+    function getRealChild (vnode) {\n+        var compOptions = vnode && vnode.componentOptions;\n+        if (compOptions && compOptions.Ctor.options.abstract) {\n+            return getRealChild(getFirstComponentChild(compOptions.children))\n+        } else {\n+            return vnode\n+        }\n+    }\n+\n+    function extractTransitionData (comp) {\n+        var data = {};\n+        var options = comp.$options;\n+        \u002F\u002F props\n+        for (var key in options.propsData) {\n+            data[key] = comp[key];\n+        }\n+        \u002F\u002F events.\n+        \u002F\u002F extract listeners and pass them directly to the transition methods\n+        var listeners = options._parentListeners;\n+        for (var key$1 in listeners) {\n+            data[camelize(key$1)] = listeners[key$1];\n+        }\n+        return data\n+    }\n+\n+    function placeholder (h, rawChild) {\n+        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\n+            return h('keep-alive', {\n+                props: rawChild.componentOptions.propsData\n+            })\n+        }\n+    }\n+\n+    function hasParentTransition (vnode) {\n+        while ((vnode = vnode.parent)) {\n+            if (vnode.data.transition) {\n+                return true\n+            }\n+        }\n+    }\n+\n+    function isSameChild (child, oldChild) {\n+        return oldChild.key === child.key && oldChild.tag === child.tag\n+    }\n+\n+    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n+\n+    var isVShowDirective = function (d) { return d.name === 'show'; };\n+\n+    var Transition = {\n+        name: 'transition',\n+        props: transitionProps,\n+        abstract: true,\n+\n+        render: function render (h) {\n+            var this$1 = this;\n+\n+            var children = this.$slots.default;\n+            if (!children) {\n+                return\n+            }\n+\n+            \u002F\u002F filter out text nodes (possible whitespaces)\n+            children = children.filter(isNotTextNode);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!children.length) {\n+                return\n+            }\n+\n+            \u002F\u002F warn multiple elements\n+            if (children.length > 1) {\n+                warn(\n+                    '\u003Ctransition> can only be used on a single element. Use ' +\n+                    '\u003Ctransition-group> for lists.',\n+                    this.$parent\n+                );\n+            }\n+\n+            var mode = this.mode;\n+\n+            \u002F\u002F warn invalid mode\n+            if (mode && mode !== 'in-out' && mode !== 'out-in'\n+            ) {\n+                warn(\n+                    'invalid \u003Ctransition> mode: ' + mode,\n+                    this.$parent\n+                );\n+            }\n+\n+            var rawChild = children[0];\n+\n+            \u002F\u002F if this is a component root node and the component's\n+            \u002F\u002F parent container node also has transition, skip.\n+            if (hasParentTransition(this.$vnode)) {\n+                return rawChild\n+            }\n+\n+            \u002F\u002F apply transition data to child\n+            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\n+            var child = getRealChild(rawChild);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!child) {\n+                return rawChild\n+            }\n+\n+            if (this._leaving) {\n+                return placeholder(h, rawChild)\n+            }\n+\n+            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\n+            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\n+            \u002F\u002F during entering.\n+            var id = \"__transition-\" + (this._uid) + \"-\";\n+            child.key = child.key == null\n+                ? child.isComment\n+                    ? id + 'comment'\n+                    : id + child.tag\n+                : isPrimitive(child.key)\n+                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n+                    : child.key;\n+\n+            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n+            var oldRawChild = this._vnode;\n+            var oldChild = getRealChild(oldRawChild);\n+\n+            \u002F\u002F mark v-show\n+            \u002F\u002F so that the transition module can hand over the control to the directive\n+            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n+                child.data.show = true;\n+            }\n+\n+            if (\n+                oldChild &&\n+                oldChild.data &&\n+                !isSameChild(child, oldChild) &&\n+                !isAsyncPlaceholder(oldChild) &&\n+                \u002F\u002F #6687 component root is a comment node\n+                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n+            ) {\n+                \u002F\u002F replace old child transition data with fresh one\n+                \u002F\u002F important for dynamic transitions!\n+                var oldData = oldChild.data.transition = extend({}, data);\n+                \u002F\u002F handle transition mode\n+                if (mode === 'out-in') {\n+                    \u002F\u002F return placeholder node and queue update when leave finishes\n+                    this._leaving = true;\n+                    mergeVNodeHook(oldData, 'afterLeave', function () {\n+                        this$1._leaving = false;\n+                        this$1.$forceUpdate();\n+                    });\n+                    return placeholder(h, rawChild)\n+                } else if (mode === 'in-out') {\n+                    if (isAsyncPlaceholder(child)) {\n+                        return oldRawChild\n+                    }\n+                    var delayedLeave;\n+                    var performLeave = function () { delayedLeave(); };\n+                    mergeVNodeHook(data, 'afterEnter', performLeave);\n+                    mergeVNodeHook(data, 'enterCancelled', performLeave);\n+                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n+                }\n+            }\n+\n+            return rawChild\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var props = extend({\n+        tag: String,\n+        moveClass: String\n+    }, transitionProps);\n+\n+    delete props.mode;\n+\n+    var TransitionGroup = {\n+        props: props,\n+\n+        beforeMount: function beforeMount () {\n+            var this$1 = this;\n+\n+            var update = this._update;\n+            this._update = function (vnode, hydrating) {\n+                var restoreActiveInstance = setActiveInstance(this$1);\n+                \u002F\u002F force removing pass\n+                this$1.__patch__(\n+                    this$1._vnode,\n+                    this$1.kept,\n+                    false, \u002F\u002F hydrating\n+                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\n+                );\n+                this$1._vnode = this$1.kept;\n+                restoreActiveInstance();\n+                update.call(this$1, vnode, hydrating);\n+            };\n+        },\n+\n+        render: function render (h) {\n+            var tag = this.tag || this.$vnode.data.tag || 'span';\n+            var map = Object.create(null);\n+            var prevChildren = this.prevChildren = this.children;\n+            var rawChildren = this.$slots.default || [];\n+            var children = this.children = [];\n+            var transitionData = extractTransitionData(this);\n+\n+            for (var i = 0; i \u003C rawChildren.length; i++) {\n+                var c = rawChildren[i];\n+                if (c.tag) {\n+                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n+                        children.push(c);\n+                        map[c.key] = c\n+                        ;(c.data || (c.data = {})).transition = transitionData;\n+                    } else {\n+                        var opts = c.componentOptions;\n+                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n+                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\n+                    }\n+                }\n+            }\n+\n+            if (prevChildren) {\n+                var kept = [];\n+                var removed = [];\n+                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\n+                    var c$1 = prevChildren[i$1];\n+                    c$1.data.transition = transitionData;\n+                    c$1.data.pos = c$1.elm.getBoundingClientRect();\n+                    if (map[c$1.key]) {\n+                        kept.push(c$1);\n+                    } else {\n+                        removed.push(c$1);\n+                    }\n+                }\n+                this.kept = h(tag, null, kept);\n+                this.removed = removed;\n+            }\n+\n+            return h(tag, null, children)\n+        },\n+\n+        updated: function updated () {\n+            var children = this.prevChildren;\n+            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n+            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n+                return\n+            }\n+\n+            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\n+            \u002F\u002F in each iteration - which helps prevent layout thrashing.\n+            children.forEach(callPendingCbs);\n+            children.forEach(recordPosition);\n+            children.forEach(applyTranslation);\n+\n+            \u002F\u002F force reflow to put everything in position\n+            \u002F\u002F assign to this to avoid being removed in tree-shaking\n+            \u002F\u002F $flow-disable-line\n+            this._reflow = document.body.offsetHeight;\n+\n+            children.forEach(function (c) {\n+                if (c.data.moved) {\n+                    var el = c.elm;\n+                    var s = el.style;\n+                    addTransitionClass(el, moveClass);\n+                    s.transform = s.WebkitTransform = s.transitionDuration = '';\n+                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n+                        if (e && e.target !== el) {\n+                            return\n+                        }\n+                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\n+                            el.removeEventListener(transitionEndEvent, cb);\n+                            el._moveCb = null;\n+                            removeTransitionClass(el, moveClass);\n+                        }\n+                    });\n+                }\n+            });\n+        },\n+\n+        methods: {\n+            hasMove: function hasMove (el, moveClass) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (!hasTransition) {\n+                    return false\n+                }\n+              \u002F* istanbul ignore if *\u002F\n+                if (this._hasMove) {\n+                    return this._hasMove\n+                }\n+                \u002F\u002F Detect whether an element with the move class applied has\n+                \u002F\u002F CSS transitions. Since the element may be inside an entering\n+                \u002F\u002F transition at this very moment, we make a clone of it and remove\n+                \u002F\u002F all other transition classes applied to ensure only the move class\n+                \u002F\u002F is applied.\n+                var clone = el.cloneNode();\n+                if (el._transitionClasses) {\n+                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n+                }\n+                addClass(clone, moveClass);\n+                clone.style.display = 'none';\n+                this.$el.appendChild(clone);\n+                var info = getTransitionInfo(clone);\n+                this.$el.removeChild(clone);\n+                return (this._hasMove = info.hasTransform)\n+            }\n+        }\n+    };\n+\n+    function callPendingCbs (c) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._moveCb) {\n+            c.elm._moveCb();\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._enterCb) {\n+            c.elm._enterCb();\n+        }\n+    }\n+\n+    function recordPosition (c) {\n+        c.data.newPos = c.elm.getBoundingClientRect();\n+    }\n+\n+    function applyTranslation (c) {\n+        var oldPos = c.data.pos;\n+        var newPos = c.data.newPos;\n+        var dx = oldPos.left - newPos.left;\n+        var dy = oldPos.top - newPos.top;\n+        if (dx || dy) {\n+            c.data.moved = true;\n+            var s = c.elm.style;\n+            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n+            s.transitionDuration = '0s';\n+        }\n+    }\n+\n+    var platformComponents = {\n+        Transition: Transition,\n+        TransitionGroup: TransitionGroup\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F install platform specific utils\n+    Vue.config.mustUseProp = mustUseProp;\n+    Vue.config.isReservedTag = isReservedTag;\n+    Vue.config.isReservedAttr = isReservedAttr;\n+    Vue.config.getTagNamespace = getTagNamespace;\n+    Vue.config.isUnknownElement = isUnknownElement;\n+\n+    \u002F\u002F install platform runtime directives & components\n+    extend(Vue.options.directives, platformDirectives);\n+    extend(Vue.options.components, platformComponents);\n+\n+    \u002F\u002F install platform patch function\n+    Vue.prototype.__patch__ = inBrowser ? patch : noop;\n+\n+    \u002F\u002F public mount method\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && inBrowser ? query(el) : undefined;\n+        return mountComponent(this, el, hydrating)\n+    };\n+\n+    \u002F\u002F devtools global hook\n+  \u002F* istanbul ignore next *\u002F\n+    if (inBrowser) {\n+        setTimeout(function () {\n+            if (config.devtools) {\n+                if (devtools) {\n+                    devtools.emit('init', Vue);\n+                } else {\n+                    console[console.info ? 'info' : 'log'](\n+                        'Download the Vue Devtools extension for a better development experience:\\n' +\n+                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\n+                    );\n+                }\n+            }\n+            if (config.productionTip !== false &&\n+                typeof console !== 'undefined'\n+            ) {\n+                console[console.info ? 'info' : 'log'](\n+                    \"You are running Vue in development mode.\\n\" +\n+                    \"Make sure to turn on production mode when deploying for production.\\n\" +\n+                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\n+                );\n+            }\n+        }, 0);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\n+    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\n+\n+    var buildRegex = cached(function (delimiters) {\n+        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n+        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n+        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n+    });\n+\n+\n+\n+    function parseText (\n+        text,\n+        delimiters\n+    ) {\n+        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n+        if (!tagRE.test(text)) {\n+            return\n+        }\n+        var tokens = [];\n+        var rawTokens = [];\n+        var lastIndex = tagRE.lastIndex = 0;\n+        var match, index, tokenValue;\n+        while ((match = tagRE.exec(text))) {\n+            index = match.index;\n+            \u002F\u002F push text token\n+            if (index > lastIndex) {\n+                rawTokens.push(tokenValue = text.slice(lastIndex, index));\n+                tokens.push(JSON.stringify(tokenValue));\n+            }\n+            \u002F\u002F tag token\n+            var exp = parseFilters(match[1].trim());\n+            tokens.push((\"_s(\" + exp + \")\"));\n+            rawTokens.push({ '@binding': exp });\n+            lastIndex = index + match[0].length;\n+        }\n+        if (lastIndex \u003C text.length) {\n+            rawTokens.push(tokenValue = text.slice(lastIndex));\n+            tokens.push(JSON.stringify(tokenValue));\n+        }\n+        return {\n+            expression: tokens.join('+'),\n+            tokens: rawTokens\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticClass = getAndRemoveAttr(el, 'class');\n+        if (staticClass) {\n+            var res = parseText(staticClass, options.delimiters);\n+            if (res) {\n+                warn(\n+                    \"class=\\\"\" + staticClass + \"\\\": \" +\n+                    'Interpolation inside attributes has been removed. ' +\n+                    'Use v-bind or the colon shorthand instead. For example, ' +\n+                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\n+                    el.rawAttrsMap['class']\n+                );\n+            }\n+        }\n+        if (staticClass) {\n+            el.staticClass = JSON.stringify(staticClass);\n+        }\n+        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\n+        if (classBinding) {\n+            el.classBinding = classBinding;\n+        }\n+    }\n+\n+    function genData (el) {\n+        var data = '';\n+        if (el.staticClass) {\n+            data += \"staticClass:\" + (el.staticClass) + \",\";\n+        }\n+        if (el.classBinding) {\n+            data += \"class:\" + (el.classBinding) + \",\";\n+        }\n+        return data\n+    }\n+\n+    var klass$1 = {\n+        staticKeys: ['staticClass'],\n+        transformNode: transformNode,\n+        genData: genData\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode$1 (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticStyle = getAndRemoveAttr(el, 'style');\n+        if (staticStyle) {\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                var res = parseText(staticStyle, options.delimiters);\n+                if (res) {\n+                    warn(\n+                        \"style=\\\"\" + staticStyle + \"\\\": \" +\n+                        'Interpolation inside attributes has been removed. ' +\n+                        'Use v-bind or the colon shorthand instead. For example, ' +\n+                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\n+                        el.rawAttrsMap['style']\n+                    );\n+                }\n+            }\n+            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n+        }\n+\n+        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\n+        if (styleBinding) {\n+            el.styleBinding = styleBinding;\n+        }\n+    }\n+\n+    function genData$1 (el) {\n+        var data = '';\n+        if (el.staticStyle) {\n+            data += \"staticStyle:\" + (el.staticStyle) + \",\";\n+        }\n+        if (el.styleBinding) {\n+            data += \"style:(\" + (el.styleBinding) + \"),\";\n+        }\n+        return data\n+    }\n+\n+    var style$1 = {\n+        staticKeys: ['staticStyle'],\n+        transformNode: transformNode$1,\n+        genData: genData$1\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var decoder;\n+\n+    var he = {\n+        decode: function decode (html) {\n+            decoder = decoder || document.createElement('div');\n+            decoder.innerHTML = html;\n+            return decoder.textContent\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isUnaryTag = makeMap(\n+        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n+        'link,meta,param,source,track,wbr'\n+    );\n+\n+    \u002F\u002F Elements that you can, intentionally, leave open\n+    \u002F\u002F (and which close themselves)\n+    var canBeLeftOpenTag = makeMap(\n+        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n+    );\n+\n+    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\n+    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\n+    var isNonPhrasingTag = makeMap(\n+        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n+        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n+        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n+        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n+        'title,tr,track'\n+    );\n+\n+    \u002F**\n+     * Not type-checking this file because it's mostly vendor code.\n+     *\u002F\n+\n+        \u002F\u002F Regular Expressions for parsing tags and attributes\n+    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\n+    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\n+    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\n+    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\n+    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\n+    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\n+    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\n+    var comment = \u002F^\u003C!\\--\u002F;\n+    var conditionalComment = \u002F^\u003C!\\[\u002F;\n+\n+    \u002F\u002F Special Elements (can contain anything)\n+    var isPlainTextElement = makeMap('script,style,textarea', true);\n+    var reCache = {};\n+\n+    var decodingMap = {\n+        '&lt;': '\u003C',\n+        '&gt;': '>',\n+        '&quot;': '\"',\n+        '&amp;': '&',\n+        '&#10;': '\\n',\n+        '&#9;': '\\t',\n+        '&#39;': \"'\"\n+    };\n+    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\n+    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\n+\n+    \u002F\u002F #5992\n+    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\n+    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n+\n+    function decodeAttr (value, shouldDecodeNewlines) {\n+        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n+        return value.replace(re, function (match) { return decodingMap[match]; })\n+    }\n+\n+    function parseHTML (html, options) {\n+        var stack = [];\n+        var expectHTML = options.expectHTML;\n+        var isUnaryTag$$1 = options.isUnaryTag || no;\n+        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n+        var index = 0;\n+        var last, lastTag;\n+        while (html) {\n+            last = html;\n+            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\n+            if (!lastTag || !isPlainTextElement(lastTag)) {\n+                var textEnd = html.indexOf('\u003C');\n+                if (textEnd === 0) {\n+                    \u002F\u002F Comment:\n+                    if (comment.test(html)) {\n+                        var commentEnd = html.indexOf('-->');\n+\n+                        if (commentEnd >= 0) {\n+                            if (options.shouldKeepComment) {\n+                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n+                            }\n+                            advance(commentEnd + 3);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\n+                    if (conditionalComment.test(html)) {\n+                        var conditionalEnd = html.indexOf(']>');\n+\n+                        if (conditionalEnd >= 0) {\n+                            advance(conditionalEnd + 2);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F Doctype:\n+                    var doctypeMatch = html.match(doctype);\n+                    if (doctypeMatch) {\n+                        advance(doctypeMatch[0].length);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F End tag:\n+                    var endTagMatch = html.match(endTag);\n+                    if (endTagMatch) {\n+                        var curIndex = index;\n+                        advance(endTagMatch[0].length);\n+                        parseEndTag(endTagMatch[1], curIndex, index);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F Start tag:\n+                    var startTagMatch = parseStartTag();\n+                    if (startTagMatch) {\n+                        handleStartTag(startTagMatch);\n+                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n+                            advance(1);\n+                        }\n+                        continue\n+                    }\n+                }\n+\n+                var text = (void 0), rest = (void 0), next = (void 0);\n+                if (textEnd >= 0) {\n+                    rest = html.slice(textEnd);\n+                    while (\n+                    !endTag.test(rest) &&\n+                    !startTagOpen.test(rest) &&\n+                    !comment.test(rest) &&\n+                    !conditionalComment.test(rest)\n+                        ) {\n+                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\n+                        next = rest.indexOf('\u003C', 1);\n+                        if (next \u003C 0) { break }\n+                        textEnd += next;\n+                        rest = html.slice(textEnd);\n+                    }\n+                    text = html.substring(0, textEnd);\n+                }\n+\n+                if (textEnd \u003C 0) {\n+                    text = html;\n+                }\n+\n+                if (text) {\n+                    advance(text.length);\n+                }\n+\n+                if (options.chars && text) {\n+                    options.chars(text, index - text.length, index);\n+                }\n+            } else {\n+                var endTagLength = 0;\n+                var stackedTag = lastTag.toLowerCase();\n+                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\n+                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n+                    endTagLength = endTag.length;\n+                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n+                        text = text\n+                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\n+                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\n+                    }\n+                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\n+                        text = text.slice(1);\n+                    }\n+                    if (options.chars) {\n+                        options.chars(text);\n+                    }\n+                    return ''\n+                });\n+                index += html.length - rest$1.length;\n+                html = rest$1;\n+                parseEndTag(stackedTag, index - endTagLength, index);\n+            }\n+\n+            if (html === last) {\n+                options.chars && options.chars(html);\n+                if (!stack.length && options.warn) {\n+                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n+                }\n+                break\n+            }\n+        }\n+\n+        \u002F\u002F Clean up any remaining tags\n+        parseEndTag();\n+\n+        function advance (n) {\n+            index += n;\n+            html = html.substring(n);\n+        }\n+\n+        function parseStartTag () {\n+            var start = html.match(startTagOpen);\n+            if (start) {\n+                var match = {\n+                    tagName: start[1],\n+                    attrs: [],\n+                    start: index\n+                };\n+                advance(start[0].length);\n+                var end, attr;\n+                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n+                    attr.start = index;\n+                    advance(attr[0].length);\n+                    attr.end = index;\n+                    match.attrs.push(attr);\n+                }\n+                if (end) {\n+                    match.unarySlash = end[1];\n+                    advance(end[0].length);\n+                    match.end = index;\n+                    return match\n+                }\n+            }\n+        }\n+\n+        function handleStartTag (match) {\n+            var tagName = match.tagName;\n+            var unarySlash = match.unarySlash;\n+\n+            if (expectHTML) {\n+                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n+                    parseEndTag(lastTag);\n+                }\n+                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n+                    parseEndTag(tagName);\n+                }\n+            }\n+\n+            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n+\n+            var l = match.attrs.length;\n+            var attrs = new Array(l);\n+            for (var i = 0; i \u003C l; i++) {\n+                var args = match.attrs[i];\n+                var value = args[3] || args[4] || args[5] || '';\n+                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n+                    ? options.shouldDecodeNewlinesForHref\n+                    : options.shouldDecodeNewlines;\n+                attrs[i] = {\n+                    name: args[1],\n+                    value: decodeAttr(value, shouldDecodeNewlines)\n+                };\n+                if (options.outputSourceRange) {\n+                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\n+                    attrs[i].end = args.end;\n+                }\n+            }\n+\n+            if (!unary) {\n+                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n+                lastTag = tagName;\n+            }\n+\n+            if (options.start) {\n+                options.start(tagName, attrs, unary, match.start, match.end);\n+            }\n+        }\n+\n+        function parseEndTag (tagName, start, end) {\n+            var pos, lowerCasedTagName;\n+            if (start == null) { start = index; }\n+            if (end == null) { end = index; }\n+\n+            \u002F\u002F Find the closest opened tag of the same type\n+            if (tagName) {\n+                lowerCasedTagName = tagName.toLowerCase();\n+                for (pos = stack.length - 1; pos >= 0; pos--) {\n+                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n+                        break\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F If no tag name is provided, clean shop\n+                pos = 0;\n+            }\n+\n+            if (pos >= 0) {\n+                \u002F\u002F Close all the open elements, up the stack\n+                for (var i = stack.length - 1; i >= pos; i--) {\n+                    if (i > pos || !tagName &&\n+                        options.warn\n+                    ) {\n+                        options.warn(\n+                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\n+                            { start: stack[i].start, end: stack[i].end }\n+                        );\n+                    }\n+                    if (options.end) {\n+                        options.end(stack[i].tag, start, end);\n+                    }\n+                }\n+\n+                \u002F\u002F Remove the open elements from the stack\n+                stack.length = pos;\n+                lastTag = pos && stack[pos - 1].tag;\n+            } else if (lowerCasedTagName === 'br') {\n+                if (options.start) {\n+                    options.start(tagName, [], true, start, end);\n+                }\n+            } else if (lowerCasedTagName === 'p') {\n+                if (options.start) {\n+                    options.start(tagName, [], false, start, end);\n+                }\n+                if (options.end) {\n+                    options.end(tagName, start, end);\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var onRE = \u002F^@|^v-on:\u002F;\n+    var dirRE = \u002F^v-|^@|^:\u002F;\n+    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\n+    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\n+    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\n+    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\n+\n+    var argRE = \u002F:(.*)$\u002F;\n+    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\n+    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\n+\n+    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\n+\n+    var lineBreakRE = \u002F[\\r\\n]\u002F;\n+    var whitespaceRE$1 = \u002F\\s+\u002Fg;\n+\n+    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\n+\n+    var decodeHTMLCached = cached(he.decode);\n+\n+    var emptySlotScopeToken = \"_empty_\";\n+\n+    \u002F\u002F configurable state\n+    var warn$2;\n+    var delimiters;\n+    var transforms;\n+    var preTransforms;\n+    var postTransforms;\n+    var platformIsPreTag;\n+    var platformMustUseProp;\n+    var platformGetTagNamespace;\n+    var maybeComponent;\n+\n+    function createASTElement (\n+        tag,\n+        attrs,\n+        parent\n+    ) {\n+        return {\n+            type: 1,\n+            tag: tag,\n+            attrsList: attrs,\n+            attrsMap: makeAttrsMap(attrs),\n+            rawAttrsMap: {},\n+            parent: parent,\n+            children: []\n+        }\n+    }\n+\n+    \u002F**\n+     * Convert HTML string to AST.\n+     *\u002F\n+    function parse (\n+        template,\n+        options\n+    ) {\n+        warn$2 = options.warn || baseWarn;\n+\n+        platformIsPreTag = options.isPreTag || no;\n+        platformMustUseProp = options.mustUseProp || no;\n+        platformGetTagNamespace = options.getTagNamespace || no;\n+        var isReservedTag = options.isReservedTag || no;\n+        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+\n+        transforms = pluckModuleFunction(options.modules, 'transformNode');\n+        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n+        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n+\n+        delimiters = options.delimiters;\n+\n+        var stack = [];\n+        var preserveWhitespace = options.preserveWhitespace !== false;\n+        var whitespaceOption = options.whitespace;\n+        var root;\n+        var currentParent;\n+        var inVPre = false;\n+        var inPre = false;\n+        var warned = false;\n+\n+        function warnOnce (msg, range) {\n+            if (!warned) {\n+                warned = true;\n+                warn$2(msg, range);\n+            }\n+        }\n+\n+        function closeElement (element) {\n+            trimEndingWhitespace(element);\n+            if (!inVPre && !element.processed) {\n+                element = processElement(element, options);\n+            }\n+            \u002F\u002F tree management\n+            if (!stack.length && element !== root) {\n+                \u002F\u002F allow root elements with v-if, v-else-if and v-else\n+                if (root.if && (element.elseif || element.else)) {\n+                    {\n+                        checkRootConstraints(element);\n+                    }\n+                    addIfCondition(root, {\n+                        exp: element.elseif,\n+                        block: element\n+                    });\n+                } else {\n+                    warnOnce(\n+                        \"Component template should contain exactly one root element. \" +\n+                        \"If you are using v-if on multiple elements, \" +\n+                        \"use v-else-if to chain them instead.\",\n+                        { start: element.start }\n+                    );\n+                }\n+            }\n+            if (currentParent && !element.forbidden) {\n+                if (element.elseif || element.else) {\n+                    processIfConditions(element, currentParent);\n+                } else {\n+                    if (element.slotScope) {\n+                        \u002F\u002F scoped slot\n+                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\n+                        \u002F\u002F find it as the prev node.\n+                        var name = element.slotTarget || '\"default\"'\n+                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n+                    }\n+                    currentParent.children.push(element);\n+                    element.parent = currentParent;\n+                }\n+            }\n+\n+            \u002F\u002F final children cleanup\n+            \u002F\u002F filter out scoped slots\n+            element.children = element.children.filter(function (c) { return !(c).slotScope; });\n+            \u002F\u002F remove trailing whitespace node again\n+            trimEndingWhitespace(element);\n+\n+            \u002F\u002F check pre state\n+            if (element.pre) {\n+                inVPre = false;\n+            }\n+            if (platformIsPreTag(element.tag)) {\n+                inPre = false;\n+            }\n+            \u002F\u002F apply post-transforms\n+            for (var i = 0; i \u003C postTransforms.length; i++) {\n+                postTransforms[i](element, options);\n+            }\n+        }\n+\n+        function trimEndingWhitespace (el) {\n+            \u002F\u002F remove trailing whitespace node\n+            if (!inPre) {\n+                var lastNode;\n+                while (\n+                (lastNode = el.children[el.children.length - 1]) &&\n+                lastNode.type === 3 &&\n+                lastNode.text === ' '\n+                    ) {\n+                    el.children.pop();\n+                }\n+            }\n+        }\n+\n+        function checkRootConstraints (el) {\n+            if (el.tag === 'slot' || el.tag === 'template') {\n+                warnOnce(\n+                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\n+                    'contain multiple nodes.',\n+                    { start: el.start }\n+                );\n+            }\n+            if (el.attrsMap.hasOwnProperty('v-for')) {\n+                warnOnce(\n+                    'Cannot use v-for on stateful component root element because ' +\n+                    'it renders multiple elements.',\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+\n+        parseHTML(template, {\n+            warn: warn$2,\n+            expectHTML: options.expectHTML,\n+            isUnaryTag: options.isUnaryTag,\n+            canBeLeftOpenTag: options.canBeLeftOpenTag,\n+            shouldDecodeNewlines: options.shouldDecodeNewlines,\n+            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n+            shouldKeepComment: options.comments,\n+            outputSourceRange: options.outputSourceRange,\n+            start: function start (tag, attrs, unary, start$1, end) {\n+                \u002F\u002F check namespace.\n+                \u002F\u002F inherit parent ns if there is one\n+                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n+\n+                \u002F\u002F handle IE svg bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE && ns === 'svg') {\n+                    attrs = guardIESVGBug(attrs);\n+                }\n+\n+                var element = createASTElement(tag, attrs, currentParent);\n+                if (ns) {\n+                    element.ns = ns;\n+                }\n+\n+                {\n+                    if (options.outputSourceRange) {\n+                        element.start = start$1;\n+                        element.end = end;\n+                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n+                            cumulated[attr.name] = attr;\n+                            return cumulated\n+                        }, {});\n+                    }\n+                    attrs.forEach(function (attr) {\n+                        if (invalidAttributeRE.test(attr.name)) {\n+                            warn$2(\n+                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\n+                                \"spaces, quotes, \u003C, >, \u002F or =.\",\n+                                {\n+                                    start: attr.start + attr.name.indexOf(\"[\"),\n+                                    end: attr.start + attr.name.length\n+                                }\n+                            );\n+                        }\n+                    });\n+                }\n+\n+                if (isForbiddenTag(element) && !isServerRendering()) {\n+                    element.forbidden = true;\n+                    warn$2(\n+                        'Templates should only be responsible for mapping the state to the ' +\n+                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n+                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\n+                        { start: element.start }\n+                    );\n+                }\n+\n+                \u002F\u002F apply pre-transforms\n+                for (var i = 0; i \u003C preTransforms.length; i++) {\n+                    element = preTransforms[i](element, options) || element;\n+                }\n+\n+                if (!inVPre) {\n+                    processPre(element);\n+                    if (element.pre) {\n+                        inVPre = true;\n+                    }\n+                }\n+                if (platformIsPreTag(element.tag)) {\n+                    inPre = true;\n+                }\n+                if (inVPre) {\n+                    processRawAttrs(element);\n+                } else if (!element.processed) {\n+                    \u002F\u002F structural directives\n+                    processFor(element);\n+                    processIf(element);\n+                    processOnce(element);\n+                }\n+\n+                if (!root) {\n+                    root = element;\n+                    {\n+                        checkRootConstraints(root);\n+                    }\n+                }\n+\n+                if (!unary) {\n+                    currentParent = element;\n+                    stack.push(element);\n+                } else {\n+                    closeElement(element);\n+                }\n+            },\n+\n+            end: function end (tag, start, end$1) {\n+                var element = stack[stack.length - 1];\n+                \u002F\u002F pop stack\n+                stack.length -= 1;\n+                currentParent = stack[stack.length - 1];\n+                if (options.outputSourceRange) {\n+                    element.end = end$1;\n+                }\n+                closeElement(element);\n+            },\n+\n+            chars: function chars (text, start, end) {\n+                if (!currentParent) {\n+                    {\n+                        if (text === template) {\n+                            warnOnce(\n+                                'Component template requires a root element, rather than just text.',\n+                                { start: start }\n+                            );\n+                        } else if ((text = text.trim())) {\n+                            warnOnce(\n+                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n+                                { start: start }\n+                            );\n+                        }\n+                    }\n+                    return\n+                }\n+                \u002F\u002F IE textarea placeholder bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE &&\n+                    currentParent.tag === 'textarea' &&\n+                    currentParent.attrsMap.placeholder === text\n+                ) {\n+                    return\n+                }\n+                var children = currentParent.children;\n+                if (inPre || text.trim()) {\n+                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n+                } else if (!children.length) {\n+                    \u002F\u002F remove the whitespace-only node right after an opening tag\n+                    text = '';\n+                } else if (whitespaceOption) {\n+                    if (whitespaceOption === 'condense') {\n+                        \u002F\u002F in condense mode, remove the whitespace node if it contains\n+                        \u002F\u002F line break, otherwise condense to a single space\n+                        text = lineBreakRE.test(text) ? '' : ' ';\n+                    } else {\n+                        text = ' ';\n+                    }\n+                } else {\n+                    text = preserveWhitespace ? ' ' : '';\n+                }\n+                if (text) {\n+                    if (!inPre && whitespaceOption === 'condense') {\n+                        \u002F\u002F condense consecutive whitespaces into single space\n+                        text = text.replace(whitespaceRE$1, ' ');\n+                    }\n+                    var res;\n+                    var child;\n+                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n+                        child = {\n+                            type: 2,\n+                            expression: res.expression,\n+                            tokens: res.tokens,\n+                            text: text\n+                        };\n+                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n+                        child = {\n+                            type: 3,\n+                            text: text\n+                        };\n+                    }\n+                    if (child) {\n+                        if (options.outputSourceRange) {\n+                            child.start = start;\n+                            child.end = end;\n+                        }\n+                        children.push(child);\n+                    }\n+                }\n+            },\n+            comment: function comment (text, start, end) {\n+                \u002F\u002F adding anyting as a sibling to the root node is forbidden\n+                \u002F\u002F comments should still be allowed, but ignored\n+                if (currentParent) {\n+                    var child = {\n+                        type: 3,\n+                        text: text,\n+                        isComment: true\n+                    };\n+                    if (options.outputSourceRange) {\n+                        child.start = start;\n+                        child.end = end;\n+                    }\n+                    currentParent.children.push(child);\n+                }\n+            }\n+        });\n+        return root\n+    }\n+\n+    function processPre (el) {\n+        if (getAndRemoveAttr(el, 'v-pre') != null) {\n+            el.pre = true;\n+        }\n+    }\n+\n+    function processRawAttrs (el) {\n+        var list = el.attrsList;\n+        var len = list.length;\n+        if (len) {\n+            var attrs = el.attrs = new Array(len);\n+            for (var i = 0; i \u003C len; i++) {\n+                attrs[i] = {\n+                    name: list[i].name,\n+                    value: JSON.stringify(list[i].value)\n+                };\n+                if (list[i].start != null) {\n+                    attrs[i].start = list[i].start;\n+                    attrs[i].end = list[i].end;\n+                }\n+            }\n+        } else if (!el.pre) {\n+            \u002F\u002F non root node in pre blocks with no attributes\n+            el.plain = true;\n+        }\n+    }\n+\n+    function processElement (\n+        element,\n+        options\n+    ) {\n+        processKey(element);\n+\n+        \u002F\u002F determine whether this is a plain element after\n+        \u002F\u002F removing structural attributes\n+        element.plain = (\n+            !element.key &&\n+            !element.scopedSlots &&\n+            !element.attrsList.length\n+        );\n+\n+        processRef(element);\n+        processSlotContent(element);\n+        processSlotOutlet(element);\n+        processComponent(element);\n+        for (var i = 0; i \u003C transforms.length; i++) {\n+            element = transforms[i](element, options) || element;\n+        }\n+        processAttrs(element);\n+        return element\n+    }\n+\n+    function processKey (el) {\n+        var exp = getBindingAttr(el, 'key');\n+        if (exp) {\n+            {\n+                if (el.tag === 'template') {\n+                    warn$2(\n+                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\n+                        getRawBindingAttr(el, 'key')\n+                    );\n+                }\n+                if (el.for) {\n+                    var iterator = el.iterator2 || el.iterator1;\n+                    var parent = el.parent;\n+                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n+                        warn$2(\n+                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\n+                            \"this is the same as not using keys.\",\n+                            getRawBindingAttr(el, 'key'),\n+                            true \u002F* tip *\u002F\n+                        );\n+                    }\n+                }\n+            }\n+            el.key = exp;\n+        }\n+    }\n+\n+    function processRef (el) {\n+        var ref = getBindingAttr(el, 'ref');\n+        if (ref) {\n+            el.ref = ref;\n+            el.refInFor = checkInFor(el);\n+        }\n+    }\n+\n+    function processFor (el) {\n+        var exp;\n+        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n+            var res = parseFor(exp);\n+            if (res) {\n+                extend(el, res);\n+            } else {\n+                warn$2(\n+                    (\"Invalid v-for expression: \" + exp),\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+    }\n+\n+\n+\n+    function parseFor (exp) {\n+        var inMatch = exp.match(forAliasRE);\n+        if (!inMatch) { return }\n+        var res = {};\n+        res.for = inMatch[2].trim();\n+        var alias = inMatch[1].trim().replace(stripParensRE, '');\n+        var iteratorMatch = alias.match(forIteratorRE);\n+        if (iteratorMatch) {\n+            res.alias = alias.replace(forIteratorRE, '').trim();\n+            res.iterator1 = iteratorMatch[1].trim();\n+            if (iteratorMatch[2]) {\n+                res.iterator2 = iteratorMatch[2].trim();\n+            }\n+        } else {\n+            res.alias = alias;\n+        }\n+        return res\n+    }\n+\n+    function processIf (el) {\n+        var exp = getAndRemoveAttr(el, 'v-if');\n+        if (exp) {\n+            el.if = exp;\n+            addIfCondition(el, {\n+                exp: exp,\n+                block: el\n+            });\n+        } else {\n+            if (getAndRemoveAttr(el, 'v-else') != null) {\n+                el.else = true;\n+            }\n+            var elseif = getAndRemoveAttr(el, 'v-else-if');\n+            if (elseif) {\n+                el.elseif = elseif;\n+            }\n+        }\n+    }\n+\n+    function processIfConditions (el, parent) {\n+        var prev = findPrevElement(parent.children);\n+        if (prev && prev.if) {\n+            addIfCondition(prev, {\n+                exp: el.elseif,\n+                block: el\n+            });\n+        } else {\n+            warn$2(\n+                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n+                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\n+                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n+            );\n+        }\n+    }\n+\n+    function findPrevElement (children) {\n+        var i = children.length;\n+        while (i--) {\n+            if (children[i].type === 1) {\n+                return children[i]\n+            } else {\n+                if (children[i].text !== ' ') {\n+                    warn$2(\n+                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n+                        \"will be ignored.\",\n+                        children[i]\n+                    );\n+                }\n+                children.pop();\n+            }\n+        }\n+    }\n+\n+    function addIfCondition (el, condition) {\n+        if (!el.ifConditions) {\n+            el.ifConditions = [];\n+        }\n+        el.ifConditions.push(condition);\n+    }\n+\n+    function processOnce (el) {\n+        var once$$1 = getAndRemoveAttr(el, 'v-once');\n+        if (once$$1 != null) {\n+            el.once = true;\n+        }\n+    }\n+\n+    \u002F\u002F handle content being passed to a component as slot,\n+    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\n+    function processSlotContent (el) {\n+        var slotScope;\n+        if (el.tag === 'template') {\n+            slotScope = getAndRemoveAttr(el, 'scope');\n+          \u002F* istanbul ignore if *\u002F\n+            if (slotScope) {\n+                warn$2(\n+                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n+                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n+                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\n+                    \"denote scoped slots.\",\n+                    el.rawAttrsMap['scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n+        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (el.attrsMap['v-for']) {\n+                warn$2(\n+                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\n+                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\n+                    \"scoped slot to make it clearer.\",\n+                    el.rawAttrsMap['slot-scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope;\n+        }\n+\n+        \u002F\u002F slot=\"xxx\"\n+        var slotTarget = getBindingAttr(el, 'slot');\n+        if (slotTarget) {\n+            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n+            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n+            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\n+            \u002F\u002F only for non-scoped slots.\n+            if (el.tag !== 'template' && !el.slotScope) {\n+                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n+            }\n+        }\n+\n+        \u002F\u002F 2.6 v-slot syntax\n+        {\n+            if (el.tag === 'template') {\n+                \u002F\u002F v-slot on \u003Ctemplate>\n+                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding) {\n+                    {\n+                        if (el.slotTarget || el.slotScope) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.parent && !maybeComponent(el.parent)) {\n+                            warn$2(\n+                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\n+                                \"the receiving the component\",\n+                                el\n+                            );\n+                        }\n+                    }\n+                    var ref = getSlotName(slotBinding);\n+                    var name = ref.name;\n+                    var dynamic = ref.dynamic;\n+                    el.slotTarget = name;\n+                    el.slotTargetDynamic = dynamic;\n+                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\n+                }\n+            } else {\n+                \u002F\u002F v-slot on component, denotes default slot\n+                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding$1) {\n+                    {\n+                        if (!maybeComponent(el)) {\n+                            warn$2(\n+                                \"v-slot can only be used on components or \u003Ctemplate>.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                        if (el.slotScope || el.slotTarget) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.scopedSlots) {\n+                            warn$2(\n+                                \"To avoid scope ambiguity, the default slot should also use \" +\n+                                \"\u003Ctemplate> syntax when there are other named slots.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                    }\n+                    \u002F\u002F add the component's children to its default slot\n+                    var slots = el.scopedSlots || (el.scopedSlots = {});\n+                    var ref$1 = getSlotName(slotBinding$1);\n+                    var name$1 = ref$1.name;\n+                    var dynamic$1 = ref$1.dynamic;\n+                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\n+                    slotContainer.slotTarget = name$1;\n+                    slotContainer.slotTargetDynamic = dynamic$1;\n+                    slotContainer.children = el.children.filter(function (c) {\n+                        if (!c.slotScope) {\n+                            c.parent = slotContainer;\n+                            return true\n+                        }\n+                    });\n+                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n+                    \u002F\u002F remove children as they are returned from scopedSlots now\n+                    el.children = [];\n+                    \u002F\u002F mark el non-plain so data gets generated\n+                    el.plain = false;\n+                }\n+            }\n+        }\n+    }\n+\n+    function getSlotName (binding) {\n+        var name = binding.name.replace(slotRE, '');\n+        if (!name) {\n+            if (binding.name[0] !== '#') {\n+                name = 'default';\n+            } else {\n+                warn$2(\n+                    \"v-slot shorthand syntax requires a slot name.\",\n+                    binding\n+                );\n+            }\n+        }\n+        return dynamicArgRE.test(name)\n+            \u002F\u002F dynamic [name]\n+            ? { name: name.slice(1, -1), dynamic: true }\n+            \u002F\u002F static name\n+            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n+    }\n+\n+    \u002F\u002F handle \u003Cslot\u002F> outlets\n+    function processSlotOutlet (el) {\n+        if (el.tag === 'slot') {\n+            el.slotName = getBindingAttr(el, 'name');\n+            if (el.key) {\n+                warn$2(\n+                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\n+                    \"and can possibly expand into multiple elements. \" +\n+                    \"Use the key on a wrapping element instead.\",\n+                    getRawBindingAttr(el, 'key')\n+                );\n+            }\n+        }\n+    }\n+\n+    function processComponent (el) {\n+        var binding;\n+        if ((binding = getBindingAttr(el, 'is'))) {\n+            el.component = binding;\n+        }\n+        if (getAndRemoveAttr(el, 'inline-template') != null) {\n+            el.inlineTemplate = true;\n+        }\n+    }\n+\n+    function processAttrs (el) {\n+        var list = el.attrsList;\n+        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n+        for (i = 0, l = list.length; i \u003C l; i++) {\n+            name = rawName = list[i].name;\n+            value = list[i].value;\n+            if (dirRE.test(name)) {\n+                \u002F\u002F mark element as dynamic\n+                el.hasBindings = true;\n+                \u002F\u002F modifiers\n+                modifiers = parseModifiers(name.replace(dirRE, ''));\n+                \u002F\u002F support .foo shorthand syntax for the .prop modifier\n+                if (modifiers) {\n+                    name = name.replace(modifierRE, '');\n+                }\n+                if (bindRE.test(name)) { \u002F\u002F v-bind\n+                    name = name.replace(bindRE, '');\n+                    value = parseFilters(value);\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    if (\n+                        value.trim().length === 0\n+                    ) {\n+                        warn$2(\n+                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n+                        );\n+                    }\n+                    if (modifiers) {\n+                        if (modifiers.prop && !isDynamic) {\n+                            name = camelize(name);\n+                            if (name === 'innerHtml') { name = 'innerHTML'; }\n+                        }\n+                        if (modifiers.camel && !isDynamic) {\n+                            name = camelize(name);\n+                        }\n+                        if (modifiers.sync) {\n+                            syncGen = genAssignmentCode(value, \"$event\");\n+                            if (!isDynamic) {\n+                                addHandler(\n+                                    el,\n+                                    (\"update:\" + (camelize(name))),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i]\n+                                );\n+                                if (hyphenate(name) !== camelize(name)) {\n+                                    addHandler(\n+                                        el,\n+                                        (\"update:\" + (hyphenate(name))),\n+                                        syncGen,\n+                                        null,\n+                                        false,\n+                                        warn$2,\n+                                        list[i]\n+                                    );\n+                                }\n+                            } else {\n+                                \u002F\u002F handler w\u002F dynamic event name\n+                                addHandler(\n+                                    el,\n+                                    (\"\\\"update:\\\"+(\" + name + \")\"),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i],\n+                                    true \u002F\u002F dynamic\n+                                );\n+                            }\n+                        }\n+                    }\n+                    if ((modifiers && modifiers.prop) || (\n+                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n+                        )) {\n+                        addProp(el, name, value, list[i], isDynamic);\n+                    } else {\n+                        addAttr(el, name, value, list[i], isDynamic);\n+                    }\n+                } else if (onRE.test(name)) { \u002F\u002F v-on\n+                    name = name.replace(onRE, '');\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n+                } else { \u002F\u002F normal directives\n+                    name = name.replace(dirRE, '');\n+                    \u002F\u002F parse arg\n+                    var argMatch = name.match(argRE);\n+                    var arg = argMatch && argMatch[1];\n+                    isDynamic = false;\n+                    if (arg) {\n+                        name = name.slice(0, -(arg.length + 1));\n+                        if (dynamicArgRE.test(arg)) {\n+                            arg = arg.slice(1, -1);\n+                            isDynamic = true;\n+                        }\n+                    }\n+                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n+                    if (name === 'model') {\n+                        checkForAliasModel(el, value);\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F literal attribute\n+                {\n+                    var res = parseText(value, delimiters);\n+                    if (res) {\n+                        warn$2(\n+                            name + \"=\\\"\" + value + \"\\\": \" +\n+                            'Interpolation inside attributes has been removed. ' +\n+                            'Use v-bind or the colon shorthand instead. For example, ' +\n+                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\n+                            list[i]\n+                        );\n+                    }\n+                }\n+                addAttr(el, name, JSON.stringify(value), list[i]);\n+                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\n+                \u002F\u002F even immediately after element creation\n+                if (!el.component &&\n+                    name === 'muted' &&\n+                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n+                    addProp(el, name, 'true', list[i]);\n+                }\n+            }\n+        }\n+    }\n+\n+    function checkInFor (el) {\n+        var parent = el;\n+        while (parent) {\n+            if (parent.for !== undefined) {\n+                return true\n+            }\n+            parent = parent.parent;\n+        }\n+        return false\n+    }\n+\n+    function parseModifiers (name) {\n+        var match = name.match(modifierRE);\n+        if (match) {\n+            var ret = {};\n+            match.forEach(function (m) { ret[m.slice(1)] = true; });\n+            return ret\n+        }\n+    }\n+\n+    function makeAttrsMap (attrs) {\n+        var map = {};\n+        for (var i = 0, l = attrs.length; i \u003C l; i++) {\n+            if (\n+                map[attrs[i].name] && !isIE && !isEdge\n+            ) {\n+                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n+            }\n+            map[attrs[i].name] = attrs[i].value;\n+        }\n+        return map\n+    }\n+\n+    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\n+    function isTextTag (el) {\n+        return el.tag === 'script' || el.tag === 'style'\n+    }\n+\n+    function isForbiddenTag (el) {\n+        return (\n+            el.tag === 'style' ||\n+            (el.tag === 'script' && (\n+                !el.attrsMap.type ||\n+                el.attrsMap.type === 'text\u002Fjavascript'\n+            ))\n+        )\n+    }\n+\n+    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\n+    var ieNSPrefix = \u002F^NS\\d+:\u002F;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function guardIESVGBug (attrs) {\n+        var res = [];\n+        for (var i = 0; i \u003C attrs.length; i++) {\n+            var attr = attrs[i];\n+            if (!ieNSBug.test(attr.name)) {\n+                attr.name = attr.name.replace(ieNSPrefix, '');\n+                res.push(attr);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkForAliasModel (el, value) {\n+        var _el = el;\n+        while (_el) {\n+            if (_el.for && _el.alias === value) {\n+                warn$2(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                    \"You are binding v-model directly to a v-for iteration alias. \" +\n+                    \"This will not be able to modify the v-for source array because \" +\n+                    \"writing to the alias is like modifying a function local variable. \" +\n+                    \"Consider using an array of objects and use v-model on an object property instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+            _el = _el.parent;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function preTransformNode (el, options) {\n+        if (el.tag === 'input') {\n+            var map = el.attrsMap;\n+            if (!map['v-model']) {\n+                return\n+            }\n+\n+            var typeBinding;\n+            if (map[':type'] || map['v-bind:type']) {\n+                typeBinding = getBindingAttr(el, 'type');\n+            }\n+            if (!map.type && !typeBinding && map['v-bind']) {\n+                typeBinding = \"(\" + (map['v-bind']) + \").type\";\n+            }\n+\n+            if (typeBinding) {\n+                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n+                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n+                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n+                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n+                \u002F\u002F 1. checkbox\n+                var branch0 = cloneASTElement(el);\n+                \u002F\u002F process for on the main node\n+                processFor(branch0);\n+                addRawAttr(branch0, 'type', 'checkbox');\n+                processElement(branch0, options);\n+                branch0.processed = true; \u002F\u002F prevent it from double-processed\n+                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n+                addIfCondition(branch0, {\n+                    exp: branch0.if,\n+                    block: branch0\n+                });\n+                \u002F\u002F 2. add radio else-if condition\n+                var branch1 = cloneASTElement(el);\n+                getAndRemoveAttr(branch1, 'v-for', true);\n+                addRawAttr(branch1, 'type', 'radio');\n+                processElement(branch1, options);\n+                addIfCondition(branch0, {\n+                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n+                    block: branch1\n+                });\n+                \u002F\u002F 3. other\n+                var branch2 = cloneASTElement(el);\n+                getAndRemoveAttr(branch2, 'v-for', true);\n+                addRawAttr(branch2, ':type', typeBinding);\n+                processElement(branch2, options);\n+                addIfCondition(branch0, {\n+                    exp: ifCondition,\n+                    block: branch2\n+                });\n+\n+                if (hasElse) {\n+                    branch0.else = true;\n+                } else if (elseIfCondition) {\n+                    branch0.elseif = elseIfCondition;\n+                }\n+\n+                return branch0\n+            }\n+        }\n+    }\n+\n+    function cloneASTElement (el) {\n+        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n+    }\n+\n+    var model$1 = {\n+        preTransformNode: preTransformNode\n+    };\n+\n+    var modules$1 = [\n+        klass$1,\n+        style$1,\n+        model$1\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function text (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function html (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+    var directives$1 = {\n+        model: model,\n+        text: text,\n+        html: html\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var baseOptions = {\n+        expectHTML: true,\n+        modules: modules$1,\n+        directives: directives$1,\n+        isPreTag: isPreTag,\n+        isUnaryTag: isUnaryTag,\n+        mustUseProp: mustUseProp,\n+        canBeLeftOpenTag: canBeLeftOpenTag,\n+        isReservedTag: isReservedTag,\n+        getTagNamespace: getTagNamespace,\n+        staticKeys: genStaticKeys(modules$1)\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isStaticKey;\n+    var isPlatformReservedTag;\n+\n+    var genStaticKeysCached = cached(genStaticKeys$1);\n+\n+    \u002F**\n+     * Goal of the optimizer: walk the generated template AST tree\n+     * and detect sub-trees that are purely static, i.e. parts of\n+     * the DOM that never needs to change.\n+     *\n+     * Once we detect these sub-trees, we can:\n+     *\n+     * 1. Hoist them into constants, so that we no longer need to\n+     *    create fresh nodes for them on each re-render;\n+     * 2. Completely skip them in the patching process.\n+     *\u002F\n+    function optimize (root, options) {\n+        if (!root) { return }\n+        isStaticKey = genStaticKeysCached(options.staticKeys || '');\n+        isPlatformReservedTag = options.isReservedTag || no;\n+        \u002F\u002F first pass: mark all non-static nodes.\n+        markStatic$1(root);\n+        \u002F\u002F second pass: mark static roots.\n+        markStaticRoots(root, false);\n+    }\n+\n+    function genStaticKeys$1 (keys) {\n+        return makeMap(\n+            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n+            (keys ? ',' + keys : '')\n+        )\n+    }\n+\n+    function markStatic$1 (node) {\n+        node.static = isStatic(node);\n+        if (node.type === 1) {\n+            \u002F\u002F do not make component slot content static. this avoids\n+            \u002F\u002F 1. components not able to mutate slot nodes\n+            \u002F\u002F 2. static slot content fails for hot-reloading\n+            if (\n+                !isPlatformReservedTag(node.tag) &&\n+                node.tag !== 'slot' &&\n+                node.attrsMap['inline-template'] == null\n+            ) {\n+                return\n+            }\n+            for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                var child = node.children[i];\n+                markStatic$1(child);\n+                if (!child.static) {\n+                    node.static = false;\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    var block = node.ifConditions[i$1].block;\n+                    markStatic$1(block);\n+                    if (!block.static) {\n+                        node.static = false;\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    function markStaticRoots (node, isInFor) {\n+        if (node.type === 1) {\n+            if (node.static || node.once) {\n+                node.staticInFor = isInFor;\n+            }\n+            \u002F\u002F For a node to qualify as a static root, it should have children that\n+            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\n+            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\n+            if (node.static && node.children.length && !(\n+                    node.children.length === 1 &&\n+                    node.children[0].type === 3\n+                )) {\n+                node.staticRoot = true;\n+                return\n+            } else {\n+                node.staticRoot = false;\n+            }\n+            if (node.children) {\n+                for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                    markStaticRoots(node.children[i], isInFor || !!node.for);\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\n+                }\n+            }\n+        }\n+    }\n+\n+    function isStatic (node) {\n+        if (node.type === 2) { \u002F\u002F expression\n+            return false\n+        }\n+        if (node.type === 3) { \u002F\u002F text\n+            return true\n+        }\n+        return !!(node.pre || (\n+            !node.hasBindings && \u002F\u002F no dynamic bindings\n+            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\n+            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\n+            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\n+            !isDirectChildOfTemplateFor(node) &&\n+            Object.keys(node).every(isStaticKey)\n+        ))\n+    }\n+\n+    function isDirectChildOfTemplateFor (node) {\n+        while (node.parent) {\n+            node = node.parent;\n+            if (node.tag !== 'template') {\n+                return false\n+            }\n+            if (node.for) {\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\n+    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\n+    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\n+\n+    \u002F\u002F KeyboardEvent.keyCode aliases\n+    var keyCodes = {\n+        esc: 27,\n+        tab: 9,\n+        enter: 13,\n+        space: 32,\n+        up: 38,\n+        left: 37,\n+        right: 39,\n+        down: 40,\n+        'delete': [8, 46]\n+    };\n+\n+    \u002F\u002F KeyboardEvent.key aliases\n+    var keyNames = {\n+        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\n+        esc: ['Esc', 'Escape'],\n+        tab: 'Tab',\n+        enter: 'Enter',\n+        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\n+        space: [' ', 'Spacebar'],\n+        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n+        up: ['Up', 'ArrowUp'],\n+        left: ['Left', 'ArrowLeft'],\n+        right: ['Right', 'ArrowRight'],\n+        down: ['Down', 'ArrowDown'],\n+        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\n+        'delete': ['Backspace', 'Delete', 'Del']\n+    };\n+\n+    \u002F\u002F #4868: modifiers that prevent the execution of the listener\n+    \u002F\u002F need to explicitly return null so that we can determine whether to remove\n+    \u002F\u002F the listener for .once\n+    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n+\n+    var modifierCode = {\n+        stop: '$event.stopPropagation();',\n+        prevent: '$event.preventDefault();',\n+        self: genGuard(\"$event.target !== $event.currentTarget\"),\n+        ctrl: genGuard(\"!$event.ctrlKey\"),\n+        shift: genGuard(\"!$event.shiftKey\"),\n+        alt: genGuard(\"!$event.altKey\"),\n+        meta: genGuard(\"!$event.metaKey\"),\n+        left: genGuard(\"'button' in $event && $event.button !== 0\"),\n+        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n+        right: genGuard(\"'button' in $event && $event.button !== 2\")\n+    };\n+\n+    function genHandlers (\n+        events,\n+        isNative\n+    ) {\n+        var prefix = isNative ? 'nativeOn:' : 'on:';\n+        var staticHandlers = \"\";\n+        var dynamicHandlers = \"\";\n+        for (var name in events) {\n+            var handlerCode = genHandler(events[name]);\n+            if (events[name] && events[name].dynamic) {\n+                dynamicHandlers += name + \",\" + handlerCode + \",\";\n+            } else {\n+                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n+            }\n+        }\n+        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n+        if (dynamicHandlers) {\n+            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n+        } else {\n+            return prefix + staticHandlers\n+        }\n+    }\n+\n+    function genHandler (handler) {\n+        if (!handler) {\n+            return 'function(){}'\n+        }\n+\n+        if (Array.isArray(handler)) {\n+            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n+        }\n+\n+        var isMethodPath = simplePathRE.test(handler.value);\n+        var isFunctionExpression = fnExpRE.test(handler.value);\n+        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n+\n+        if (!handler.modifiers) {\n+            if (isMethodPath || isFunctionExpression) {\n+                return handler.value\n+            }\n+            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\n+        } else {\n+            var code = '';\n+            var genModifierCode = '';\n+            var keys = [];\n+            for (var key in handler.modifiers) {\n+                if (modifierCode[key]) {\n+                    genModifierCode += modifierCode[key];\n+                    \u002F\u002F left\u002Fright\n+                    if (keyCodes[key]) {\n+                        keys.push(key);\n+                    }\n+                } else if (key === 'exact') {\n+                    var modifiers = (handler.modifiers);\n+                    genModifierCode += genGuard(\n+                        ['ctrl', 'shift', 'alt', 'meta']\n+                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n+                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n+                            .join('||')\n+                    );\n+                } else {\n+                    keys.push(key);\n+                }\n+            }\n+            if (keys.length) {\n+                code += genKeyFilter(keys);\n+            }\n+            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\n+            if (genModifierCode) {\n+                code += genModifierCode;\n+            }\n+            var handlerCode = isMethodPath\n+                ? (\"return \" + (handler.value) + \"($event)\")\n+                : isFunctionExpression\n+                    ? (\"return (\" + (handler.value) + \")($event)\")\n+                    : isFunctionInvocation\n+                        ? (\"return \" + (handler.value))\n+                        : handler.value;\n+            return (\"function($event){\" + code + handlerCode + \"}\")\n+        }\n+    }\n+\n+    function genKeyFilter (keys) {\n+        return (\n+            \u002F\u002F make sure the key filters only apply to KeyboardEvents\n+            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n+            \u002F\u002F key events that do not have keyCode property...\n+            \"if(!$event.type.indexOf('key')&&\" +\n+            (keys.map(genFilterCode).join('&&')) + \")return null;\"\n+        )\n+    }\n+\n+    function genFilterCode (key) {\n+        var keyVal = parseInt(key, 10);\n+        if (keyVal) {\n+            return (\"$event.keyCode!==\" + keyVal)\n+        }\n+        var keyCode = keyCodes[key];\n+        var keyName = keyNames[key];\n+        return (\n+            \"_k($event.keyCode,\" +\n+            (JSON.stringify(key)) + \",\" +\n+            (JSON.stringify(keyCode)) + \",\" +\n+            \"$event.key,\" +\n+            \"\" + (JSON.stringify(keyName)) +\n+            \")\"\n+        )\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function on (el, dir) {\n+        if (dir.modifiers) {\n+            warn(\"v-on without argument does not support modifiers.\");\n+        }\n+        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bind$1 (el, dir) {\n+        el.wrapData = function (code) {\n+            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var baseDirectives = {\n+        on: on,\n+        bind: bind$1,\n+        cloak: noop\n+    };\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+\n+\n+    var CodegenState = function CodegenState (options) {\n+        this.options = options;\n+        this.warn = options.warn || baseWarn;\n+        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n+        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n+        this.directives = extend(extend({}, baseDirectives), options.directives);\n+        var isReservedTag = options.isReservedTag || no;\n+        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+        this.onceId = 0;\n+        this.staticRenderFns = [];\n+        this.pre = false;\n+    };\n+\n+\n+\n+    function generate (\n+        ast,\n+        options\n+    ) {\n+        var state = new CodegenState(options);\n+        var code = ast ? genElement(ast, state) : '_c(\"div\")';\n+        return {\n+            render: (\"with(this){return \" + code + \"}\"),\n+            staticRenderFns: state.staticRenderFns\n+        }\n+    }\n+\n+    function genElement (el, state) {\n+        if (el.parent) {\n+            el.pre = el.pre || el.parent.pre;\n+        }\n+\n+        if (el.staticRoot && !el.staticProcessed) {\n+            return genStatic(el, state)\n+        } else if (el.once && !el.onceProcessed) {\n+            return genOnce(el, state)\n+        } else if (el.for && !el.forProcessed) {\n+            return genFor(el, state)\n+        } else if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n+            return genChildren(el, state) || 'void 0'\n+        } else if (el.tag === 'slot') {\n+            return genSlot(el, state)\n+        } else {\n+            \u002F\u002F component or element\n+            var code;\n+            if (el.component) {\n+                code = genComponent(el.component, el, state);\n+            } else {\n+                var data;\n+                if (!el.plain || (el.pre && state.maybeComponent(el))) {\n+                    data = genData$2(el, state);\n+                }\n+\n+                var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n+            }\n+            \u002F\u002F module transforms\n+            for (var i = 0; i \u003C state.transforms.length; i++) {\n+                code = state.transforms[i](el, code);\n+            }\n+            return code\n+        }\n+    }\n+\n+    \u002F\u002F hoist static sub-trees out\n+    function genStatic (el, state) {\n+        el.staticProcessed = true;\n+        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\n+        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\n+        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\n+        var originalPreState = state.pre;\n+        if (el.pre) {\n+            state.pre = el.pre;\n+        }\n+        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n+        state.pre = originalPreState;\n+        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n+    }\n+\n+    \u002F\u002F v-once\n+    function genOnce (el, state) {\n+        el.onceProcessed = true;\n+        if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.staticInFor) {\n+            var key = '';\n+            var parent = el.parent;\n+            while (parent) {\n+                if (parent.for) {\n+                    key = parent.key;\n+                    break\n+                }\n+                parent = parent.parent;\n+            }\n+            if (!key) {\n+                state.warn(\n+                    \"v-once can only be used inside v-for that is keyed. \",\n+                    el.rawAttrsMap['v-once']\n+                );\n+                return genElement(el, state)\n+            }\n+            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n+        } else {\n+            return genStatic(el, state)\n+        }\n+    }\n+\n+    function genIf (\n+        el,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        el.ifProcessed = true; \u002F\u002F avoid recursion\n+        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n+    }\n+\n+    function genIfConditions (\n+        conditions,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        if (!conditions.length) {\n+            return altEmpty || '_e()'\n+        }\n+\n+        var condition = conditions.shift();\n+        if (condition.exp) {\n+            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n+        } else {\n+            return (\"\" + (genTernaryExp(condition.block)))\n+        }\n+\n+        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\n+        function genTernaryExp (el) {\n+            return altGen\n+                ? altGen(el, state)\n+                : el.once\n+                    ? genOnce(el, state)\n+                    : genElement(el, state)\n+        }\n+    }\n+\n+    function genFor (\n+        el,\n+        state,\n+        altGen,\n+        altHelper\n+    ) {\n+        var exp = el.for;\n+        var alias = el.alias;\n+        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n+        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n+\n+        if (state.maybeComponent(el) &&\n+            el.tag !== 'slot' &&\n+            el.tag !== 'template' &&\n+            !el.key\n+        ) {\n+            state.warn(\n+                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n+                \"v-for should have explicit keys. \" +\n+                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\n+                el.rawAttrsMap['v-for'],\n+                true \u002F* tip *\u002F\n+            );\n+        }\n+\n+        el.forProcessed = true; \u002F\u002F avoid recursion\n+        return (altHelper || '_l') + \"((\" + exp + \"),\" +\n+            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n+            \"return \" + ((altGen || genElement)(el, state)) +\n+            '})'\n+    }\n+\n+    function genData$2 (el, state) {\n+        var data = '{';\n+\n+        \u002F\u002F directives first.\n+        \u002F\u002F directives may mutate the el's other properties before they are generated.\n+        var dirs = genDirectives(el, state);\n+        if (dirs) { data += dirs + ','; }\n+\n+        \u002F\u002F key\n+        if (el.key) {\n+            data += \"key:\" + (el.key) + \",\";\n+        }\n+        \u002F\u002F ref\n+        if (el.ref) {\n+            data += \"ref:\" + (el.ref) + \",\";\n+        }\n+        if (el.refInFor) {\n+            data += \"refInFor:true,\";\n+        }\n+        \u002F\u002F pre\n+        if (el.pre) {\n+            data += \"pre:true,\";\n+        }\n+        \u002F\u002F record original tag name for components using \"is\" attribute\n+        if (el.component) {\n+            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n+        }\n+        \u002F\u002F module data generation functions\n+        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\n+            data += state.dataGenFns[i](el);\n+        }\n+        \u002F\u002F attributes\n+        if (el.attrs) {\n+            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n+        }\n+        \u002F\u002F DOM props\n+        if (el.props) {\n+            data += \"domProps:\" + (genProps(el.props)) + \",\";\n+        }\n+        \u002F\u002F event handlers\n+        if (el.events) {\n+            data += (genHandlers(el.events, false)) + \",\";\n+        }\n+        if (el.nativeEvents) {\n+            data += (genHandlers(el.nativeEvents, true)) + \",\";\n+        }\n+        \u002F\u002F slot target\n+        \u002F\u002F only for non-scoped slots\n+        if (el.slotTarget && !el.slotScope) {\n+            data += \"slot:\" + (el.slotTarget) + \",\";\n+        }\n+        \u002F\u002F scoped slots\n+        if (el.scopedSlots) {\n+            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n+        }\n+        \u002F\u002F component v-model\n+        if (el.model) {\n+            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n+        }\n+        \u002F\u002F inline-template\n+        if (el.inlineTemplate) {\n+            var inlineTemplate = genInlineTemplate(el, state);\n+            if (inlineTemplate) {\n+                data += inlineTemplate + \",\";\n+            }\n+        }\n+        data = data.replace(\u002F,$\u002F, '') + '}';\n+        \u002F\u002F v-bind dynamic argument wrap\n+        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\n+        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\n+        if (el.dynamicAttrs) {\n+            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n+        }\n+        \u002F\u002F v-bind data wrap\n+        if (el.wrapData) {\n+            data = el.wrapData(data);\n+        }\n+        \u002F\u002F v-on data wrap\n+        if (el.wrapListeners) {\n+            data = el.wrapListeners(data);\n+        }\n+        return data\n+    }\n+\n+    function genDirectives (el, state) {\n+        var dirs = el.directives;\n+        if (!dirs) { return }\n+        var res = 'directives:[';\n+        var hasRuntime = false;\n+        var i, l, dir, needRuntime;\n+        for (i = 0, l = dirs.length; i \u003C l; i++) {\n+            dir = dirs[i];\n+            needRuntime = true;\n+            var gen = state.directives[dir.name];\n+            if (gen) {\n+                \u002F\u002F compile-time directive that manipulates AST.\n+                \u002F\u002F returns true if it also needs a runtime counterpart.\n+                needRuntime = !!gen(el, dir, state.warn);\n+            }\n+            if (needRuntime) {\n+                hasRuntime = true;\n+                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n+            }\n+        }\n+        if (hasRuntime) {\n+            return res.slice(0, -1) + ']'\n+        }\n+    }\n+\n+    function genInlineTemplate (el, state) {\n+        var ast = el.children[0];\n+        if (el.children.length !== 1 || ast.type !== 1) {\n+            state.warn(\n+                'Inline-template components must have exactly one child element.',\n+                { start: el.start }\n+            );\n+        }\n+        if (ast && ast.type === 1) {\n+            var inlineRenderFns = generate(ast, state.options);\n+            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n+        }\n+    }\n+\n+    function genScopedSlots (\n+        el,\n+        slots,\n+        state\n+    ) {\n+        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\n+        \u002F\u002F components with only scoped slots to skip forced updates from parent.\n+        \u002F\u002F but in some cases we have to bail-out of this optimization\n+        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\n+        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n+                var slot = slots[key];\n+                return (\n+                    slot.slotTargetDynamic ||\n+                    slot.if ||\n+                    slot.for ||\n+                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\n+                )\n+            });\n+\n+        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\n+        \u002F\u002F it's possible for the same component to be reused but with different\n+        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\n+        \u002F\u002F the generated code of all the slot contents.\n+        var needsKey = !!el.if;\n+\n+        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\n+        \u002F\u002F disconnected due to the intermediate scope variable)\n+        \u002F\u002F #9438, #9506\n+        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\n+        \u002F\u002F and skip force updating ones that do not actually use scope variables.\n+        if (!needsForceUpdate) {\n+            var parent = el.parent;\n+            while (parent) {\n+                if (\n+                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n+                    parent.for\n+                ) {\n+                    needsForceUpdate = true;\n+                    break\n+                }\n+                if (parent.if) {\n+                    needsKey = true;\n+                }\n+                parent = parent.parent;\n+            }\n+        }\n+\n+        var generatedSlots = Object.keys(slots)\n+            .map(function (key) { return genScopedSlot(slots[key], state); })\n+            .join(',');\n+\n+        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n+    }\n+\n+    function hash(str) {\n+        var hash = 5381;\n+        var i = str.length;\n+        while(i) {\n+            hash = (hash * 33) ^ str.charCodeAt(--i);\n+        }\n+        return hash >>> 0\n+    }\n+\n+    function containsSlotChild (el) {\n+        if (el.type === 1) {\n+            if (el.tag === 'slot') {\n+                return true\n+            }\n+            return el.children.some(containsSlotChild)\n+        }\n+        return false\n+    }\n+\n+    function genScopedSlot (\n+        el,\n+        state\n+    ) {\n+        var isLegacySyntax = el.attrsMap['slot-scope'];\n+        if (el.if && !el.ifProcessed && !isLegacySyntax) {\n+            return genIf(el, state, genScopedSlot, \"null\")\n+        }\n+        if (el.for && !el.forProcessed) {\n+            return genFor(el, state, genScopedSlot)\n+        }\n+        var slotScope = el.slotScope === emptySlotScopeToken\n+            ? \"\"\n+            : String(el.slotScope);\n+        var fn = \"function(\" + slotScope + \"){\" +\n+            \"return \" + (el.tag === 'template'\n+                ? el.if && isLegacySyntax\n+                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n+                    : genChildren(el, state) || 'undefined'\n+                : genElement(el, state)) + \"}\";\n+        \u002F\u002F reverse proxy v-slot without scope on this.$slots\n+        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n+        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n+    }\n+\n+    function genChildren (\n+        el,\n+        state,\n+        checkSkip,\n+        altGenElement,\n+        altGenNode\n+    ) {\n+        var children = el.children;\n+        if (children.length) {\n+            var el$1 = children[0];\n+            \u002F\u002F optimize single v-for\n+            if (children.length === 1 &&\n+                el$1.for &&\n+                el$1.tag !== 'template' &&\n+                el$1.tag !== 'slot'\n+            ) {\n+                var normalizationType = checkSkip\n+                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n+                    : \"\";\n+                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n+            }\n+            var normalizationType$1 = checkSkip\n+                ? getNormalizationType(children, state.maybeComponent)\n+                : 0;\n+            var gen = altGenNode || genNode;\n+            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n+        }\n+    }\n+\n+    \u002F\u002F determine the normalization needed for the children array.\n+    \u002F\u002F 0: no normalization needed\n+    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\n+    \u002F\u002F 2: full normalization needed\n+    function getNormalizationType (\n+        children,\n+        maybeComponent\n+    ) {\n+        var res = 0;\n+        for (var i = 0; i \u003C children.length; i++) {\n+            var el = children[i];\n+            if (el.type !== 1) {\n+                continue\n+            }\n+            if (needsNormalization(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n+                res = 2;\n+                break\n+            }\n+            if (maybeComponent(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n+                res = 1;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function needsNormalization (el) {\n+        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n+    }\n+\n+    function genNode (node, state) {\n+        if (node.type === 1) {\n+            return genElement(node, state)\n+        } else if (node.type === 3 && node.isComment) {\n+            return genComment(node)\n+        } else {\n+            return genText(node)\n+        }\n+    }\n+\n+    function genText (text) {\n+        return (\"_v(\" + (text.type === 2\n+            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\n+            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n+    }\n+\n+    function genComment (comment) {\n+        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n+    }\n+\n+    function genSlot (el, state) {\n+        var slotName = el.slotName || '\"default\"';\n+        var children = genChildren(el, state);\n+        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n+        var attrs = el.attrs || el.dynamicAttrs\n+            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n+                \u002F\u002F slot props are camelized\n+                name: camelize(attr.name),\n+                value: attr.value,\n+                dynamic: attr.dynamic\n+            }); }))\n+            : null;\n+        var bind$$1 = el.attrsMap['v-bind'];\n+        if ((attrs || bind$$1) && !children) {\n+            res += \",null\";\n+        }\n+        if (attrs) {\n+            res += \",\" + attrs;\n+        }\n+        if (bind$$1) {\n+            res += (attrs ? '' : ',null') + \",\" + bind$$1;\n+        }\n+        return res + ')'\n+    }\n+\n+    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\n+    function genComponent (\n+        componentName,\n+        el,\n+        state\n+    ) {\n+        var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n+    }\n+\n+    function genProps (props) {\n+        var staticProps = \"\";\n+        var dynamicProps = \"\";\n+        for (var i = 0; i \u003C props.length; i++) {\n+            var prop = props[i];\n+            var value = transformSpecialNewlines(prop.value);\n+            if (prop.dynamic) {\n+                dynamicProps += (prop.name) + \",\" + value + \",\";\n+            } else {\n+                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n+            }\n+        }\n+        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n+        if (dynamicProps) {\n+            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n+        } else {\n+            return staticProps\n+        }\n+    }\n+\n+    \u002F\u002F #3895, #4268\n+    function transformSpecialNewlines (text) {\n+        return text\n+            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\n+            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F\u002F these keywords should not appear inside expressions, but operators like\n+    \u002F\u002F typeof, instanceof and in are allowed\n+    var prohibitedKeywordRE = new RegExp('\\\\b' + (\n+            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n+            'super,throw,while,yield,delete,export,import,return,switch,default,' +\n+            'extends,finally,continue,debugger,function,arguments'\n+        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\n+\n+    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\n+    var unaryOperatorsRE = new RegExp('\\\\b' + (\n+            'delete,typeof,void'\n+        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n+\n+    \u002F\u002F strip strings in expressions\n+    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\n+\n+    \u002F\u002F detect problematic expressions in a template\n+    function detectErrors (ast, warn) {\n+        if (ast) {\n+            checkNode(ast, warn);\n+        }\n+    }\n+\n+    function checkNode (node, warn) {\n+        if (node.type === 1) {\n+            for (var name in node.attrsMap) {\n+                if (dirRE.test(name)) {\n+                    var value = node.attrsMap[name];\n+                    if (value) {\n+                        var range = node.rawAttrsMap[name];\n+                        if (name === 'v-for') {\n+                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else if (onRE.test(name)) {\n+                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else {\n+                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        }\n+                    }\n+                }\n+            }\n+            if (node.children) {\n+                for (var i = 0; i \u003C node.children.length; i++) {\n+                    checkNode(node.children[i], warn);\n+                }\n+            }\n+        } else if (node.type === 2) {\n+            checkExpression(node.expression, node.text, warn, node);\n+        }\n+    }\n+\n+    function checkEvent (exp, text, warn, range) {\n+        var stipped = exp.replace(stripStringRE, '');\n+        var keywordMatch = stipped.match(unaryOperatorsRE);\n+        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n+            warn(\n+                \"avoid using JavaScript unary operator as property name: \" +\n+                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n+                range\n+            );\n+        }\n+        checkExpression(exp, text, warn, range);\n+    }\n+\n+    function checkFor (node, text, warn, range) {\n+        checkExpression(node.for || '', text, warn, range);\n+        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n+        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n+        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n+    }\n+\n+    function checkIdentifier (\n+        ident,\n+        type,\n+        text,\n+        warn,\n+        range\n+    ) {\n+        if (typeof ident === 'string') {\n+            try {\n+                new Function((\"var \" + ident + \"=_\"));\n+            } catch (e) {\n+                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n+            }\n+        }\n+    }\n+\n+    function checkExpression (exp, text, warn, range) {\n+        try {\n+            new Function((\"return \" + exp));\n+        } catch (e) {\n+            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n+            if (keywordMatch) {\n+                warn(\n+                    \"avoid using JavaScript keyword as property name: \" +\n+                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n+                    range\n+                );\n+            } else {\n+                warn(\n+                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n+                    \"    \" + exp + \"\\n\\n\" +\n+                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\n+                    range\n+                );\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var range = 2;\n+\n+    function generateCodeFrame (\n+        source,\n+        start,\n+        end\n+    ) {\n+        if ( start === void 0 ) start = 0;\n+        if ( end === void 0 ) end = source.length;\n+\n+        var lines = source.split(\u002F\\r?\\n\u002F);\n+        var count = 0;\n+        var res = [];\n+        for (var i = 0; i \u003C lines.length; i++) {\n+            count += lines[i].length + 1;\n+            if (count >= start) {\n+                for (var j = i - range; j \u003C= i + range || end > count; j++) {\n+                    if (j \u003C 0 || j >= lines.length) { continue }\n+                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n+                    var lineLength = lines[j].length;\n+                    if (j === i) {\n+                        \u002F\u002F push underline\n+                        var pad = start - (count - lineLength) + 1;\n+                        var length = end > count ? lineLength - pad : end - start;\n+                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n+                    } else if (j > i) {\n+                        if (end > count) {\n+                            var length$1 = Math.min(end - count, lineLength);\n+                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n+                        }\n+                        count += lineLength + 1;\n+                    }\n+                }\n+                break\n+            }\n+        }\n+        return res.join('\\n')\n+    }\n+\n+    function repeat$1 (str, n) {\n+        var result = '';\n+        if (n > 0) {\n+            while (true) { \u002F\u002F eslint-disable-line\n+                if (n & 1) { result += str; }\n+                n >>>= 1;\n+                if (n \u003C= 0) { break }\n+                str += str;\n+            }\n+        }\n+        return result\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function createFunction (code, errors) {\n+        try {\n+            return new Function(code)\n+        } catch (err) {\n+            errors.push({ err: err, code: code });\n+            return noop\n+        }\n+    }\n+\n+    function createCompileToFunctionFn (compile) {\n+        var cache = Object.create(null);\n+\n+        return function compileToFunctions (\n+            template,\n+            options,\n+            vm\n+        ) {\n+            options = extend({}, options);\n+            var warn$$1 = options.warn || warn;\n+            delete options.warn;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                \u002F\u002F detect possible CSP restriction\n+                try {\n+                    new Function('return 1');\n+                } catch (e) {\n+                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\n+                        warn$$1(\n+                            'It seems you are using the standalone build of Vue.js in an ' +\n+                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n+                            'The template compiler cannot work in this environment. Consider ' +\n+                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n+                            'templates into render functions.'\n+                        );\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F check cache\n+            var key = options.delimiters\n+                ? String(options.delimiters) + template\n+                : template;\n+            if (cache[key]) {\n+                return cache[key]\n+            }\n+\n+            \u002F\u002F compile\n+            var compiled = compile(template, options);\n+\n+            \u002F\u002F check compilation errors\u002Ftips\n+            {\n+                if (compiled.errors && compiled.errors.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.errors.forEach(function (e) {\n+                            warn$$1(\n+                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n+                                generateCodeFrame(template, e.start, e.end),\n+                                vm\n+                            );\n+                        });\n+                    } else {\n+                        warn$$1(\n+                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n+                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n+                            vm\n+                        );\n+                    }\n+                }\n+                if (compiled.tips && compiled.tips.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n+                    } else {\n+                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F turn code into functions\n+            var res = {};\n+            var fnGenErrors = [];\n+            res.render = createFunction(compiled.render, fnGenErrors);\n+            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n+                return createFunction(code, fnGenErrors)\n+            });\n+\n+            \u002F\u002F check function generation errors.\n+            \u002F\u002F this should only happen if there is a bug in the compiler itself.\n+            \u002F\u002F mostly for codegen development use\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n+                    warn$$1(\n+                        \"Failed to generate render function:\\n\\n\" +\n+                        fnGenErrors.map(function (ref) {\n+                            var err = ref.err;\n+                            var code = ref.code;\n+\n+                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n+                        }).join('\\n'),\n+                        vm\n+                    );\n+                }\n+            }\n+\n+            return (cache[key] = res)\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createCompilerCreator (baseCompile) {\n+        return function createCompiler (baseOptions) {\n+            function compile (\n+                template,\n+                options\n+            ) {\n+                var finalOptions = Object.create(baseOptions);\n+                var errors = [];\n+                var tips = [];\n+\n+                var warn = function (msg, range, tip) {\n+                    (tip ? tips : errors).push(msg);\n+                };\n+\n+                if (options) {\n+                    if (options.outputSourceRange) {\n+                        \u002F\u002F $flow-disable-line\n+                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\n+\n+                        warn = function (msg, range, tip) {\n+                            var data = { msg: msg };\n+                            if (range) {\n+                                if (range.start != null) {\n+                                    data.start = range.start + leadingSpaceLength;\n+                                }\n+                                if (range.end != null) {\n+                                    data.end = range.end + leadingSpaceLength;\n+                                }\n+                            }\n+                            (tip ? tips : errors).push(data);\n+                        };\n+                    }\n+                    \u002F\u002F merge custom modules\n+                    if (options.modules) {\n+                        finalOptions.modules =\n+                            (baseOptions.modules || []).concat(options.modules);\n+                    }\n+                    \u002F\u002F merge custom directives\n+                    if (options.directives) {\n+                        finalOptions.directives = extend(\n+                            Object.create(baseOptions.directives || null),\n+                            options.directives\n+                        );\n+                    }\n+                    \u002F\u002F copy other options\n+                    for (var key in options) {\n+                        if (key !== 'modules' && key !== 'directives') {\n+                            finalOptions[key] = options[key];\n+                        }\n+                    }\n+                }\n+\n+                finalOptions.warn = warn;\n+\n+                var compiled = baseCompile(template.trim(), finalOptions);\n+                {\n+                    detectErrors(compiled.ast, warn);\n+                }\n+                compiled.errors = errors;\n+                compiled.tips = tips;\n+                return compiled\n+            }\n+\n+            return {\n+                compile: compile,\n+                compileToFunctions: createCompileToFunctionFn(compile)\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\n+    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\n+    \u002F\u002F Here we just export a default compiler using the default parts.\n+    var createCompiler = createCompilerCreator(function baseCompile (\n+        template,\n+        options\n+    ) {\n+        var ast = parse(template.trim(), options);\n+        if (options.optimize !== false) {\n+            optimize(ast, options);\n+        }\n+        var code = generate(ast, options);\n+        return {\n+            ast: ast,\n+            render: code.render,\n+            staticRenderFns: code.staticRenderFns\n+        }\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref$1 = createCompiler(baseOptions);\n+    var compile = ref$1.compile;\n+    var compileToFunctions = ref$1.compileToFunctions;\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F check whether current browser encodes a char inside attribute values\n+    var div;\n+    function getShouldDecode (href) {\n+        div = div || document.createElement('div');\n+        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\n+        return div.innerHTML.indexOf('&#10;') > 0\n+    }\n+\n+    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\n+    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n+    \u002F\u002F #6828: chrome encodes content in a[href]\n+    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n+\n+  \u002F*  *\u002F\n+\n+    var idToTemplate = cached(function (id) {\n+        var el = query(id);\n+        return el && el.innerHTML\n+    });\n+\n+    var mount = Vue.prototype.$mount;\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && query(el);\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (el === document.body || el === document.documentElement) {\n+            warn(\n+                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\n+            );\n+            return this\n+        }\n+\n+        var options = this.$options;\n+        \u002F\u002F resolve template\u002Fel and convert to render function\n+        if (!options.render) {\n+            var template = options.template;\n+            if (template) {\n+                if (typeof template === 'string') {\n+                    if (template.charAt(0) === '#') {\n+                        template = idToTemplate(template);\n+                      \u002F* istanbul ignore if *\u002F\n+                        if (!template) {\n+                            warn(\n+                                (\"Template element not found or is empty: \" + (options.template)),\n+                                this\n+                            );\n+                        }\n+                    }\n+                } else if (template.nodeType) {\n+                    template = template.innerHTML;\n+                } else {\n+                    {\n+                        warn('invalid template option:' + template, this);\n+                    }\n+                    return this\n+                }\n+            } else if (el) {\n+                template = getOuterHTML(el);\n+            }\n+            if (template) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile');\n+                }\n+\n+                var ref = compileToFunctions(template, {\n+                    outputSourceRange: \"development\" !== 'production',\n+                    shouldDecodeNewlines: shouldDecodeNewlines,\n+                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n+                    delimiters: options.delimiters,\n+                    comments: options.comments\n+                }, this);\n+                var render = ref.render;\n+                var staticRenderFns = ref.staticRenderFns;\n+                options.render = render;\n+                options.staticRenderFns = staticRenderFns;\n+\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile end');\n+                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n+                }\n+            }\n+        }\n+        return mount.call(this, el, hydrating)\n+    };\n+\n+    \u002F**\n+     * Get outerHTML of elements, taking care\n+     * of SVG elements in IE as well.\n+     *\u002F\n+    function getOuterHTML (el) {\n+        if (el.outerHTML) {\n+            return el.outerHTML\n+        } else {\n+            var container = document.createElement('div');\n+            container.appendChild(el.cloneNode(true));\n+            return container.innerHTML\n+        }\n+    }\n+\n+    Vue.compile = compileToFunctions;\n+\n+    return Vue;\n+\n+}));\n+\u002F**\n+ * vuex v3.1.0\n+ * (c) 2019 Evan You\n+ * @license MIT\n+ *\u002F\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vuex = factory());\n+}(this, function () { 'use strict';\n+\n+    function applyMixin (Vue) {\n+        var version = Number(Vue.version.split('.')[0]);\n+\n+        if (version >= 2) {\n+            Vue.mixin({ beforeCreate: vuexInit });\n+        } else {\n+            \u002F\u002F override init and inject vuex init procedure\n+            \u002F\u002F for 1.x backwards compatibility.\n+            var _init = Vue.prototype._init;\n+            Vue.prototype._init = function (options) {\n+                if ( options === void 0 ) options = {};\n+\n+                options.init = options.init\n+                    ? [vuexInit].concat(options.init)\n+                    : vuexInit;\n+                _init.call(this, options);\n+            };\n+        }\n+\n+        \u002F**\n+         * Vuex init hook, injected into each instances init hooks list.\n+         *\u002F\n+\n+        function vuexInit () {\n+            var options = this.$options;\n+            \u002F\u002F store injection\n+            if (options.store) {\n+                this.$store = typeof options.store === 'function'\n+                    ? options.store()\n+                    : options.store;\n+            } else if (options.parent && options.parent.$store) {\n+                this.$store = options.parent.$store;\n+            }\n+        }\n+    }\n+\n+    var devtoolHook =\n+        typeof window !== 'undefined' &&\n+        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+    function devtoolPlugin (store) {\n+        if (!devtoolHook) { return }\n+\n+        store._devtoolHook = devtoolHook;\n+\n+        devtoolHook.emit('vuex:init', store);\n+\n+        devtoolHook.on('vuex:travel-to-state', function (targetState) {\n+            store.replaceState(targetState);\n+        });\n+\n+        store.subscribe(function (mutation, state) {\n+            devtoolHook.emit('vuex:mutation', mutation, state);\n+        });\n+    }\n+\n+    \u002F**\n+     * Get the first item that pass the test\n+     * by second argument function\n+     *\n+     * @param {Array} list\n+     * @param {Function} f\n+     * @return {*}\n+     *\u002F\n+\n+    \u002F**\n+     * forEach for object\n+     *\u002F\n+    function forEachValue (obj, fn) {\n+        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n+    }\n+\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    function isPromise (val) {\n+        return val && typeof val.then === 'function'\n+    }\n+\n+    function assert (condition, msg) {\n+        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n+    }\n+\n+    \u002F\u002F Base data struct for store's module, package with some attribute and method\n+    var Module = function Module (rawModule, runtime) {\n+        this.runtime = runtime;\n+        \u002F\u002F Store some children item\n+        this._children = Object.create(null);\n+        \u002F\u002F Store the origin module object which passed by programmer\n+        this._rawModule = rawModule;\n+        var rawState = rawModule.state;\n+\n+        \u002F\u002F Store the origin module's state\n+        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n+    };\n+\n+    var prototypeAccessors = { namespaced: { configurable: true } };\n+\n+    prototypeAccessors.namespaced.get = function () {\n+        return !!this._rawModule.namespaced\n+    };\n+\n+    Module.prototype.addChild = function addChild (key, module) {\n+        this._children[key] = module;\n+    };\n+\n+    Module.prototype.removeChild = function removeChild (key) {\n+        delete this._children[key];\n+    };\n+\n+    Module.prototype.getChild = function getChild (key) {\n+        return this._children[key]\n+    };\n+\n+    Module.prototype.update = function update (rawModule) {\n+        this._rawModule.namespaced = rawModule.namespaced;\n+        if (rawModule.actions) {\n+            this._rawModule.actions = rawModule.actions;\n+        }\n+        if (rawModule.mutations) {\n+            this._rawModule.mutations = rawModule.mutations;\n+        }\n+        if (rawModule.getters) {\n+            this._rawModule.getters = rawModule.getters;\n+        }\n+    };\n+\n+    Module.prototype.forEachChild = function forEachChild (fn) {\n+        forEachValue(this._children, fn);\n+    };\n+\n+    Module.prototype.forEachGetter = function forEachGetter (fn) {\n+        if (this._rawModule.getters) {\n+            forEachValue(this._rawModule.getters, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachAction = function forEachAction (fn) {\n+        if (this._rawModule.actions) {\n+            forEachValue(this._rawModule.actions, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachMutation = function forEachMutation (fn) {\n+        if (this._rawModule.mutations) {\n+            forEachValue(this._rawModule.mutations, fn);\n+        }\n+    };\n+\n+    Object.defineProperties( Module.prototype, prototypeAccessors );\n+\n+    var ModuleCollection = function ModuleCollection (rawRootModule) {\n+        \u002F\u002F register root module (Vuex.Store options)\n+        this.register([], rawRootModule, false);\n+    };\n+\n+    ModuleCollection.prototype.get = function get (path) {\n+        return path.reduce(function (module, key) {\n+            return module.getChild(key)\n+        }, this.root)\n+    };\n+\n+    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\n+        var module = this.root;\n+        return path.reduce(function (namespace, key) {\n+            module = module.getChild(key);\n+            return namespace + (module.namespaced ? key + '\u002F' : '')\n+        }, '')\n+    };\n+\n+    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\n+        update([], this.root, rawRootModule);\n+    };\n+\n+    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n+        var this$1 = this;\n+        if ( runtime === void 0 ) runtime = true;\n+\n+        {\n+            assertRawModule(path, rawModule);\n+        }\n+\n+        var newModule = new Module(rawModule, runtime);\n+        if (path.length === 0) {\n+            this.root = newModule;\n+        } else {\n+            var parent = this.get(path.slice(0, -1));\n+            parent.addChild(path[path.length - 1], newModule);\n+        }\n+\n+        \u002F\u002F register nested modules\n+        if (rawModule.modules) {\n+            forEachValue(rawModule.modules, function (rawChildModule, key) {\n+                this$1.register(path.concat(key), rawChildModule, runtime);\n+            });\n+        }\n+    };\n+\n+    ModuleCollection.prototype.unregister = function unregister (path) {\n+        var parent = this.get(path.slice(0, -1));\n+        var key = path[path.length - 1];\n+        if (!parent.getChild(key).runtime) { return }\n+\n+        parent.removeChild(key);\n+    };\n+\n+    function update (path, targetModule, newModule) {\n+        {\n+            assertRawModule(path, newModule);\n+        }\n+\n+        \u002F\u002F update target module\n+        targetModule.update(newModule);\n+\n+        \u002F\u002F update nested modules\n+        if (newModule.modules) {\n+            for (var key in newModule.modules) {\n+                if (!targetModule.getChild(key)) {\n+                    {\n+                        console.warn(\n+                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n+                            'manual reload is needed'\n+                        );\n+                    }\n+                    return\n+                }\n+                update(\n+                    path.concat(key),\n+                    targetModule.getChild(key),\n+                    newModule.modules[key]\n+                );\n+            }\n+        }\n+    }\n+\n+    var functionAssert = {\n+        assert: function (value) { return typeof value === 'function'; },\n+        expected: 'function'\n+    };\n+\n+    var objectAssert = {\n+        assert: function (value) { return typeof value === 'function' ||\n+            (typeof value === 'object' && typeof value.handler === 'function'); },\n+        expected: 'function or object with \"handler\" function'\n+    };\n+\n+    var assertTypes = {\n+        getters: functionAssert,\n+        mutations: functionAssert,\n+        actions: objectAssert\n+    };\n+\n+    function assertRawModule (path, rawModule) {\n+        Object.keys(assertTypes).forEach(function (key) {\n+            if (!rawModule[key]) { return }\n+\n+            var assertOptions = assertTypes[key];\n+\n+            forEachValue(rawModule[key], function (value, type) {\n+                assert(\n+                    assertOptions.assert(value),\n+                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\n+                );\n+            });\n+        });\n+    }\n+\n+    function makeAssertionMessage (path, key, type, value, expected) {\n+        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n+        if (path.length > 0) {\n+            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n+        }\n+        buf += \" is \" + (JSON.stringify(value)) + \".\";\n+        return buf\n+    }\n+\n+    var Vue; \u002F\u002F bind on install\n+\n+    var Store = function Store (options) {\n+        var this$1 = this;\n+        if ( options === void 0 ) options = {};\n+\n+        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\n+        \u002F\u002F To allow users to avoid auto-installation in some cases,\n+        \u002F\u002F this code should be placed here. See #731\n+        if (!Vue && typeof window !== 'undefined' && window.Vue) {\n+            install(window.Vue);\n+        }\n+\n+        {\n+            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n+            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n+            assert(this instanceof Store, \"store must be called with the new operator.\");\n+        }\n+\n+        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n+        var strict = options.strict; if ( strict === void 0 ) strict = false;\n+\n+        \u002F\u002F store internal state\n+        this._committing = false;\n+        this._actions = Object.create(null);\n+        this._actionSubscribers = [];\n+        this._mutations = Object.create(null);\n+        this._wrappedGetters = Object.create(null);\n+        this._modules = new ModuleCollection(options);\n+        this._modulesNamespaceMap = Object.create(null);\n+        this._subscribers = [];\n+        this._watcherVM = new Vue();\n+\n+        \u002F\u002F bind commit and dispatch to self\n+        var store = this;\n+        var ref = this;\n+        var dispatch = ref.dispatch;\n+        var commit = ref.commit;\n+        this.dispatch = function boundDispatch (type, payload) {\n+            return dispatch.call(store, type, payload)\n+        };\n+        this.commit = function boundCommit (type, payload, options) {\n+            return commit.call(store, type, payload, options)\n+        };\n+\n+        \u002F\u002F strict mode\n+        this.strict = strict;\n+\n+        var state = this._modules.root.state;\n+\n+        \u002F\u002F init root module.\n+        \u002F\u002F this also recursively registers all sub-modules\n+        \u002F\u002F and collects all module getters inside this._wrappedGetters\n+        installModule(this, state, [], this._modules.root);\n+\n+        \u002F\u002F initialize the store vm, which is responsible for the reactivity\n+        \u002F\u002F (also registers _wrappedGetters as computed properties)\n+        resetStoreVM(this, state);\n+\n+        \u002F\u002F apply plugins\n+        plugins.forEach(function (plugin) { return plugin(this$1); });\n+\n+        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n+        if (useDevtools) {\n+            devtoolPlugin(this);\n+        }\n+    };\n+\n+    var prototypeAccessors$1 = { state: { configurable: true } };\n+\n+    prototypeAccessors$1.state.get = function () {\n+        return this._vm._data.$$state\n+    };\n+\n+    prototypeAccessors$1.state.set = function (v) {\n+        {\n+            assert(false, \"use store.replaceState() to explicit replace store state.\");\n+        }\n+    };\n+\n+    Store.prototype.commit = function commit (_type, _payload, _options) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style commit\n+        var ref = unifyObjectStyle(_type, _payload, _options);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+        var options = ref.options;\n+\n+        var mutation = { type: type, payload: payload };\n+        var entry = this._mutations[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown mutation type: \" + type));\n+            }\n+            return\n+        }\n+        this._withCommit(function () {\n+            entry.forEach(function commitIterator (handler) {\n+                handler(payload);\n+            });\n+        });\n+        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n+\n+        if (\n+            options && options.silent\n+        ) {\n+            console.warn(\n+                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n+                'Use the filter functionality in the vue-devtools'\n+            );\n+        }\n+    };\n+\n+    Store.prototype.dispatch = function dispatch (_type, _payload) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style dispatch\n+        var ref = unifyObjectStyle(_type, _payload);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+\n+        var action = { type: type, payload: payload };\n+        var entry = this._actions[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown action type: \" + type));\n+            }\n+            return\n+        }\n+\n+        try {\n+            this._actionSubscribers\n+                .filter(function (sub) { return sub.before; })\n+                .forEach(function (sub) { return sub.before(action, this$1.state); });\n+        } catch (e) {\n+            {\n+                console.warn(\"[vuex] error in before action subscribers: \");\n+                console.error(e);\n+            }\n+        }\n+\n+        var result = entry.length > 1\n+            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n+            : entry[0](payload);\n+\n+        return result.then(function (res) {\n+            try {\n+                this$1._actionSubscribers\n+                    .filter(function (sub) { return sub.after; })\n+                    .forEach(function (sub) { return sub.after(action, this$1.state); });\n+            } catch (e) {\n+                {\n+                    console.warn(\"[vuex] error in after action subscribers: \");\n+                    console.error(e);\n+                }\n+            }\n+            return res\n+        })\n+    };\n+\n+    Store.prototype.subscribe = function subscribe (fn) {\n+        return genericSubscribe(fn, this._subscribers)\n+    };\n+\n+    Store.prototype.subscribeAction = function subscribeAction (fn) {\n+        var subs = typeof fn === 'function' ? { before: fn } : fn;\n+        return genericSubscribe(subs, this._actionSubscribers)\n+    };\n+\n+    Store.prototype.watch = function watch (getter, cb, options) {\n+        var this$1 = this;\n+\n+        {\n+            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n+        }\n+        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n+    };\n+\n+    Store.prototype.replaceState = function replaceState (state) {\n+        var this$1 = this;\n+\n+        this._withCommit(function () {\n+            this$1._vm._data.$$state = state;\n+        });\n+    };\n+\n+    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\n+        if ( options === void 0 ) options = {};\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+            assert(path.length > 0, 'cannot register the root module by using registerModule.');\n+        }\n+\n+        this._modules.register(path, rawModule);\n+        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n+        \u002F\u002F reset store to update getters...\n+        resetStoreVM(this, this.state);\n+    };\n+\n+    Store.prototype.unregisterModule = function unregisterModule (path) {\n+        var this$1 = this;\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+        }\n+\n+        this._modules.unregister(path);\n+        this._withCommit(function () {\n+            var parentState = getNestedState(this$1.state, path.slice(0, -1));\n+            Vue.delete(parentState, path[path.length - 1]);\n+        });\n+        resetStore(this);\n+    };\n+\n+    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\n+        this._modules.update(newOptions);\n+        resetStore(this, true);\n+    };\n+\n+    Store.prototype._withCommit = function _withCommit (fn) {\n+        var committing = this._committing;\n+        this._committing = true;\n+        fn();\n+        this._committing = committing;\n+    };\n+\n+    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\n+\n+    function genericSubscribe (fn, subs) {\n+        if (subs.indexOf(fn) \u003C 0) {\n+            subs.push(fn);\n+        }\n+        return function () {\n+            var i = subs.indexOf(fn);\n+            if (i > -1) {\n+                subs.splice(i, 1);\n+            }\n+        }\n+    }\n+\n+    function resetStore (store, hot) {\n+        store._actions = Object.create(null);\n+        store._mutations = Object.create(null);\n+        store._wrappedGetters = Object.create(null);\n+        store._modulesNamespaceMap = Object.create(null);\n+        var state = store.state;\n+        \u002F\u002F init all modules\n+        installModule(store, state, [], store._modules.root, true);\n+        \u002F\u002F reset vm\n+        resetStoreVM(store, state, hot);\n+    }\n+\n+    function resetStoreVM (store, state, hot) {\n+        var oldVm = store._vm;\n+\n+        \u002F\u002F bind store public getters\n+        store.getters = {};\n+        var wrappedGetters = store._wrappedGetters;\n+        var computed = {};\n+        forEachValue(wrappedGetters, function (fn, key) {\n+            \u002F\u002F use computed to leverage its lazy-caching mechanism\n+            computed[key] = function () { return fn(store); };\n+            Object.defineProperty(store.getters, key, {\n+                get: function () { return store._vm[key]; },\n+                enumerable: true \u002F\u002F for local getters\n+            });\n+        });\n+\n+        \u002F\u002F use a Vue instance to store the state tree\n+        \u002F\u002F suppress warnings just in case the user has added\n+        \u002F\u002F some funky global mixins\n+        var silent = Vue.config.silent;\n+        Vue.config.silent = true;\n+        store._vm = new Vue({\n+            data: {\n+                $$state: state\n+            },\n+            computed: computed\n+        });\n+        Vue.config.silent = silent;\n+\n+        \u002F\u002F enable strict mode for new vm\n+        if (store.strict) {\n+            enableStrictMode(store);\n+        }\n+\n+        if (oldVm) {\n+            if (hot) {\n+                \u002F\u002F dispatch changes in all subscribed watchers\n+                \u002F\u002F to force getter re-evaluation for hot reloading.\n+                store._withCommit(function () {\n+                    oldVm._data.$$state = null;\n+                });\n+            }\n+            Vue.nextTick(function () { return oldVm.$destroy(); });\n+        }\n+    }\n+\n+    function installModule (store, rootState, path, module, hot) {\n+        var isRoot = !path.length;\n+        var namespace = store._modules.getNamespace(path);\n+\n+        \u002F\u002F register in namespace map\n+        if (module.namespaced) {\n+            store._modulesNamespaceMap[namespace] = module;\n+        }\n+\n+        \u002F\u002F set state\n+        if (!isRoot && !hot) {\n+            var parentState = getNestedState(rootState, path.slice(0, -1));\n+            var moduleName = path[path.length - 1];\n+            store._withCommit(function () {\n+                Vue.set(parentState, moduleName, module.state);\n+            });\n+        }\n+\n+        var local = module.context = makeLocalContext(store, namespace, path);\n+\n+        module.forEachMutation(function (mutation, key) {\n+            var namespacedType = namespace + key;\n+            registerMutation(store, namespacedType, mutation, local);\n+        });\n+\n+        module.forEachAction(function (action, key) {\n+            var type = action.root ? key : namespace + key;\n+            var handler = action.handler || action;\n+            registerAction(store, type, handler, local);\n+        });\n+\n+        module.forEachGetter(function (getter, key) {\n+            var namespacedType = namespace + key;\n+            registerGetter(store, namespacedType, getter, local);\n+        });\n+\n+        module.forEachChild(function (child, key) {\n+            installModule(store, rootState, path.concat(key), child, hot);\n+        });\n+    }\n+\n+    \u002F**\n+     * make localized dispatch, commit, getters and state\n+     * if there is no namespace, just use root ones\n+     *\u002F\n+    function makeLocalContext (store, namespace, path) {\n+        var noNamespace = namespace === '';\n+\n+        var local = {\n+            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._actions[type]) {\n+                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                return store.dispatch(type, payload)\n+            },\n+\n+            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._mutations[type]) {\n+                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                store.commit(type, payload, options);\n+            }\n+        };\n+\n+        \u002F\u002F getters and state object must be gotten lazily\n+        \u002F\u002F because they will be changed by vm update\n+        Object.defineProperties(local, {\n+            getters: {\n+                get: noNamespace\n+                    ? function () { return store.getters; }\n+                    : function () { return makeLocalGetters(store, namespace); }\n+            },\n+            state: {\n+                get: function () { return getNestedState(store.state, path); }\n+            }\n+        });\n+\n+        return local\n+    }\n+\n+    function makeLocalGetters (store, namespace) {\n+        var gettersProxy = {};\n+\n+        var splitPos = namespace.length;\n+        Object.keys(store.getters).forEach(function (type) {\n+            \u002F\u002F skip if the target getter is not match this namespace\n+            if (type.slice(0, splitPos) !== namespace) { return }\n+\n+            \u002F\u002F extract local getter type\n+            var localType = type.slice(splitPos);\n+\n+            \u002F\u002F Add a port to the getters proxy.\n+            \u002F\u002F Define as getter property because\n+            \u002F\u002F we do not want to evaluate the getters in this time.\n+            Object.defineProperty(gettersProxy, localType, {\n+                get: function () { return store.getters[type]; },\n+                enumerable: true\n+            });\n+        });\n+\n+        return gettersProxy\n+    }\n+\n+    function registerMutation (store, type, handler, local) {\n+        var entry = store._mutations[type] || (store._mutations[type] = []);\n+        entry.push(function wrappedMutationHandler (payload) {\n+            handler.call(store, local.state, payload);\n+        });\n+    }\n+\n+    function registerAction (store, type, handler, local) {\n+        var entry = store._actions[type] || (store._actions[type] = []);\n+        entry.push(function wrappedActionHandler (payload, cb) {\n+            var res = handler.call(store, {\n+                dispatch: local.dispatch,\n+                commit: local.commit,\n+                getters: local.getters,\n+                state: local.state,\n+                rootGetters: store.getters,\n+                rootState: store.state\n+            }, payload, cb);\n+            if (!isPromise(res)) {\n+                res = Promise.resolve(res);\n+            }\n+            if (store._devtoolHook) {\n+                return res.catch(function (err) {\n+                    store._devtoolHook.emit('vuex:error', err);\n+                    throw err\n+                })\n+            } else {\n+                return res\n+            }\n+        });\n+    }\n+\n+    function registerGetter (store, type, rawGetter, local) {\n+        if (store._wrappedGetters[type]) {\n+            {\n+                console.error((\"[vuex] duplicate getter key: \" + type));\n+            }\n+            return\n+        }\n+        store._wrappedGetters[type] = function wrappedGetter (store) {\n+            return rawGetter(\n+                local.state, \u002F\u002F local state\n+                local.getters, \u002F\u002F local getters\n+                store.state, \u002F\u002F root state\n+                store.getters \u002F\u002F root getters\n+            )\n+        };\n+    }\n+\n+    function enableStrictMode (store) {\n+        store._vm.$watch(function () { return this._data.$$state }, function () {\n+            {\n+                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n+            }\n+        }, { deep: true, sync: true });\n+    }\n+\n+    function getNestedState (state, path) {\n+        return path.length\n+            ? path.reduce(function (state, key) { return state[key]; }, state)\n+            : state\n+    }\n+\n+    function unifyObjectStyle (type, payload, options) {\n+        if (isObject(type) && type.type) {\n+            options = payload;\n+            payload = type;\n+            type = type.type;\n+        }\n+\n+        {\n+            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n+        }\n+\n+        return { type: type, payload: payload, options: options }\n+    }\n+\n+    function install (_Vue) {\n+        if (Vue && _Vue === Vue) {\n+            {\n+                console.error(\n+                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n+                );\n+            }\n+            return\n+        }\n+        Vue = _Vue;\n+        applyMixin(Vue);\n+    }\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the state.\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n+     * @param {Object}\n+     *\u002F\n+    var mapState = normalizeNamespace(function (namespace, states) {\n+        var res = {};\n+        normalizeMap(states).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedState () {\n+                var state = this.$store.state;\n+                var getters = this.$store.getters;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    state = module.context.state;\n+                    getters = module.context.getters;\n+                }\n+                return typeof val === 'function'\n+                    ? val.call(this, state, getters)\n+                    : state[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for committing the mutation\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapMutations = normalizeNamespace(function (namespace, mutations) {\n+        var res = {};\n+        normalizeMap(mutations).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedMutation () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F Get the commit method from store\n+                var commit = this.$store.commit;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    commit = module.context.commit;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [commit].concat(args))\n+                    : commit.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the getters\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} getters\n+     * @return {Object}\n+     *\u002F\n+    var mapGetters = normalizeNamespace(function (namespace, getters) {\n+        var res = {};\n+        normalizeMap(getters).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            \u002F\u002F The namespace has been mutated by normalizeNamespace\n+            val = namespace + val;\n+            res[key] = function mappedGetter () {\n+                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n+                    return\n+                }\n+                if (!(val in this.$store.getters)) {\n+                    console.error((\"[vuex] unknown getter: \" + val));\n+                    return\n+                }\n+                return this.$store.getters[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for dispatch the action\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapActions = normalizeNamespace(function (namespace, actions) {\n+        var res = {};\n+        normalizeMap(actions).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedAction () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F get dispatch function from store\n+                var dispatch = this.$store.dispatch;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    dispatch = module.context.dispatch;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [dispatch].concat(args))\n+                    : dispatch.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    var createNamespacedHelpers = function (namespace) { return ({\n+        mapState: mapState.bind(null, namespace),\n+        mapGetters: mapGetters.bind(null, namespace),\n+        mapMutations: mapMutations.bind(null, namespace),\n+        mapActions: mapActions.bind(null, namespace)\n+    }); };\n+\n+    \u002F**\n+     * Normalize the map\n+     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n+     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n+     * @param {Array|Object} map\n+     * @return {Object}\n+     *\u002F\n+    function normalizeMap (map) {\n+        return Array.isArray(map)\n+            ? map.map(function (key) { return ({ key: key, val: key }); })\n+            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n+    }\n+\n+    \u002F**\n+     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n+     * @param {Function} fn\n+     * @return {Function}\n+     *\u002F\n+    function normalizeNamespace (fn) {\n+        return function (namespace, map) {\n+            if (typeof namespace !== 'string') {\n+                map = namespace;\n+                namespace = '';\n+            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\n+                namespace += '\u002F';\n+            }\n+            return fn(namespace, map)\n+        }\n+    }\n+\n+    \u002F**\n+     * Search a special module from store by namespace. if module not exist, print error message.\n+     * @param {Object} store\n+     * @param {String} helper\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    function getModuleByNamespace (store, helper, namespace) {\n+        var module = store._modulesNamespaceMap[namespace];\n+        if (!module) {\n+            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n+        }\n+        return module\n+    }\n+\n+    var index = {\n+        Store: Store,\n+        install: install,\n+        version: '3.1.0',\n+        mapState: mapState,\n+        mapMutations: mapMutations,\n+        mapGetters: mapGetters,\n+        mapActions: mapActions,\n+        createNamespacedHelpers: createNamespacedHelpers\n+    };\n+\n+    return index;\n+\n+}));\n+\u002F*!\n+ * vue-resource v1.3.4\n+ * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global.VueResource = factory());\n+}(this, (function () { 'use strict';\n+\n+    \u002F**\n+     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\n+     *\u002F\n+\n+    var RESOLVED = 0;\n+    var REJECTED = 1;\n+    var PENDING  = 2;\n+\n+    function Promise$1(executor) {\n+\n+        this.state = PENDING;\n+        this.value = undefined;\n+        this.deferred = [];\n+\n+        var promise = this;\n+\n+        try {\n+            executor(function (x) {\n+                promise.resolve(x);\n+            }, function (r) {\n+                promise.reject(r);\n+            });\n+        } catch (e) {\n+            promise.reject(e);\n+        }\n+    }\n+\n+    Promise$1.reject = function (r) {\n+        return new Promise$1(function (resolve, reject) {\n+            reject(r);\n+        });\n+    };\n+\n+    Promise$1.resolve = function (x) {\n+        return new Promise$1(function (resolve, reject) {\n+            resolve(x);\n+        });\n+    };\n+\n+    Promise$1.all = function all(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            var count = 0, result = [];\n+\n+            if (iterable.length === 0) {\n+                resolve(result);\n+            }\n+\n+            function resolver(i) {\n+                return function (x) {\n+                    result[i] = x;\n+                    count += 1;\n+\n+                    if (count === iterable.length) {\n+                        resolve(result);\n+                    }\n+                };\n+            }\n+\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\n+            }\n+        });\n+    };\n+\n+    Promise$1.race = function race(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolve, reject);\n+            }\n+        });\n+    };\n+\n+    var p$1 = Promise$1.prototype;\n+\n+    p$1.resolve = function resolve(x) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (x === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            var called = false;\n+\n+            try {\n+                var then = x && x['then'];\n+\n+                if (x !== null && typeof x === 'object' && typeof then === 'function') {\n+                    then.call(x, function (x) {\n+                        if (!called) {\n+                            promise.resolve(x);\n+                        }\n+                        called = true;\n+\n+                    }, function (r) {\n+                        if (!called) {\n+                            promise.reject(r);\n+                        }\n+                        called = true;\n+                    });\n+                    return;\n+                }\n+            } catch (e) {\n+                if (!called) {\n+                    promise.reject(e);\n+                }\n+                return;\n+            }\n+\n+            promise.state = RESOLVED;\n+            promise.value = x;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.reject = function reject(reason) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (reason === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            promise.state = REJECTED;\n+            promise.value = reason;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.notify = function notify() {\n+        var promise = this;\n+\n+        nextTick(function () {\n+            if (promise.state !== PENDING) {\n+                while (promise.deferred.length) {\n+                    var deferred = promise.deferred.shift(),\n+                        onResolved = deferred[0],\n+                        onRejected = deferred[1],\n+                        resolve = deferred[2],\n+                        reject = deferred[3];\n+\n+                    try {\n+                        if (promise.state === RESOLVED) {\n+                            if (typeof onResolved === 'function') {\n+                                resolve(onResolved.call(undefined, promise.value));\n+                            } else {\n+                                resolve(promise.value);\n+                            }\n+                        } else if (promise.state === REJECTED) {\n+                            if (typeof onRejected === 'function') {\n+                                resolve(onRejected.call(undefined, promise.value));\n+                            } else {\n+                                reject(promise.value);\n+                            }\n+                        }\n+                    } catch (e) {\n+                        reject(e);\n+                    }\n+                }\n+            }\n+        });\n+    };\n+\n+    p$1.then = function then(onResolved, onRejected) {\n+        var promise = this;\n+\n+        return new Promise$1(function (resolve, reject) {\n+            promise.deferred.push([onResolved, onRejected, resolve, reject]);\n+            promise.notify();\n+        });\n+    };\n+\n+    p$1.catch = function (onRejected) {\n+        return this.then(undefined, onRejected);\n+    };\n+\n+    \u002F**\n+     * Promise adapter.\n+     *\u002F\n+\n+    if (typeof Promise === 'undefined') {\n+        window.Promise = Promise$1;\n+    }\n+\n+    function PromiseObj(executor, context) {\n+\n+        if (executor instanceof Promise) {\n+            this.promise = executor;\n+        } else {\n+            this.promise = new Promise(executor.bind(context));\n+        }\n+\n+        this.context = context;\n+    }\n+\n+    PromiseObj.all = function (iterable, context) {\n+        return new PromiseObj(Promise.all(iterable), context);\n+    };\n+\n+    PromiseObj.resolve = function (value, context) {\n+        return new PromiseObj(Promise.resolve(value), context);\n+    };\n+\n+    PromiseObj.reject = function (reason, context) {\n+        return new PromiseObj(Promise.reject(reason), context);\n+    };\n+\n+    PromiseObj.race = function (iterable, context) {\n+        return new PromiseObj(Promise.race(iterable), context);\n+    };\n+\n+    var p = PromiseObj.prototype;\n+\n+    p.bind = function (context) {\n+        this.context = context;\n+        return this;\n+    };\n+\n+    p.then = function (fulfilled, rejected) {\n+\n+        if (fulfilled && fulfilled.bind && this.context) {\n+            fulfilled = fulfilled.bind(this.context);\n+        }\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\n+    };\n+\n+    p.catch = function (rejected) {\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.catch(rejected), this.context);\n+    };\n+\n+    p.finally = function (callback) {\n+\n+        return this.then(function (value) {\n+                callback.call(this);\n+                return value;\n+            }, function (reason) {\n+                callback.call(this);\n+                return Promise.reject(reason);\n+            }\n+        );\n+    };\n+\n+    \u002F**\n+     * Utility functions.\n+     *\u002F\n+\n+    var ref = {};\n+    var hasOwnProperty = ref.hasOwnProperty;\n+\n+    var ref$1 = [];\n+    var slice = ref$1.slice;\n+    var debug = false;\n+    var ntick;\n+\n+    var inBrowser = typeof window !== 'undefined';\n+\n+    var Util = function (ref) {\n+        var config = ref.config;\n+        var nextTick = ref.nextTick;\n+\n+        ntick = nextTick;\n+        debug = config.debug || !config.silent;\n+    };\n+\n+    function warn(msg) {\n+        if (typeof console !== 'undefined' && debug) {\n+            console.warn('[VueResource warn]: ' + msg);\n+        }\n+    }\n+\n+    function error(msg) {\n+        if (typeof console !== 'undefined') {\n+            console.error(msg);\n+        }\n+    }\n+\n+    function nextTick(cb, ctx) {\n+        return ntick(cb, ctx);\n+    }\n+\n+    function trim(str) {\n+        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\n+    }\n+\n+    function trimEnd(str, chars) {\n+\n+        if (str && chars === undefined) {\n+            return str.replace(\u002F\\s+$\u002F, '');\n+        }\n+\n+        if (!str || !chars) {\n+            return str;\n+        }\n+\n+        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\n+    }\n+\n+    function toLower(str) {\n+        return str ? str.toLowerCase() : '';\n+    }\n+\n+    function toUpper(str) {\n+        return str ? str.toUpperCase() : '';\n+    }\n+\n+    var isArray = Array.isArray;\n+\n+    function isString(val) {\n+        return typeof val === 'string';\n+    }\n+\n+\n+\n+    function isFunction(val) {\n+        return typeof val === 'function';\n+    }\n+\n+    function isObject(obj) {\n+        return obj !== null && typeof obj === 'object';\n+    }\n+\n+    function isPlainObject(obj) {\n+        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n+    }\n+\n+    function isBlob(obj) {\n+        return typeof Blob !== 'undefined' && obj instanceof Blob;\n+    }\n+\n+    function isFormData(obj) {\n+        return typeof FormData !== 'undefined' && obj instanceof FormData;\n+    }\n+\n+    function when(value, fulfilled, rejected) {\n+\n+        var promise = PromiseObj.resolve(value);\n+\n+        if (arguments.length \u003C 2) {\n+            return promise;\n+        }\n+\n+        return promise.then(fulfilled, rejected);\n+    }\n+\n+    function options(fn, obj, opts) {\n+\n+        opts = opts || {};\n+\n+        if (isFunction(opts)) {\n+            opts = opts.call(obj);\n+        }\n+\n+        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\n+    }\n+\n+    function each(obj, iterator) {\n+\n+        var i, key;\n+\n+        if (isArray(obj)) {\n+            for (i = 0; i \u003C obj.length; i++) {\n+                iterator.call(obj[i], obj[i], i);\n+            }\n+        } else if (isObject(obj)) {\n+            for (key in obj) {\n+                if (hasOwnProperty.call(obj, key)) {\n+                    iterator.call(obj[key], obj[key], key);\n+                }\n+            }\n+        }\n+\n+        return obj;\n+    }\n+\n+    var assign = Object.assign || _assign;\n+\n+    function merge(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source, true);\n+        });\n+\n+        return target;\n+    }\n+\n+    function defaults(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+\n+            for (var key in source) {\n+                if (target[key] === undefined) {\n+                    target[key] = source[key];\n+                }\n+            }\n+\n+        });\n+\n+        return target;\n+    }\n+\n+    function _assign(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source);\n+        });\n+\n+        return target;\n+    }\n+\n+    function _merge(target, source, deep) {\n+        for (var key in source) {\n+            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n+                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n+                    target[key] = {};\n+                }\n+                if (isArray(source[key]) && !isArray(target[key])) {\n+                    target[key] = [];\n+                }\n+                _merge(target[key], source[key], deep);\n+            } else if (source[key] !== undefined) {\n+                target[key] = source[key];\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Root Prefix Transform.\n+     *\u002F\n+\n+    var root = function (options$$1, next) {\n+\n+        var url = next(options$$1);\n+\n+        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\n+            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Query Parameter Transform.\n+     *\u002F\n+\n+    var query = function (options$$1, next) {\n+\n+        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\n+\n+        each(options$$1.params, function (value, key) {\n+            if (urlParams.indexOf(key) === -1) {\n+                query[key] = value;\n+            }\n+        });\n+\n+        query = Url.params(query);\n+\n+        if (query) {\n+            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\n+     *\u002F\n+\n+    function expand(url, params, variables) {\n+\n+        var tmpl = parse(url), expanded = tmpl.expand(params);\n+\n+        if (variables) {\n+            variables.push.apply(variables, tmpl.vars);\n+        }\n+\n+        return expanded;\n+    }\n+\n+    function parse(template) {\n+\n+        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\n+\n+        return {\n+            vars: variables,\n+            expand: function expand(context) {\n+                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\n+                    if (expression) {\n+\n+                        var operator = null, values = [];\n+\n+                        if (operators.indexOf(expression.charAt(0)) !== -1) {\n+                            operator = expression.charAt(0);\n+                            expression = expression.substr(1);\n+                        }\n+\n+                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\n+                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\n+                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n+                            variables.push(tmp[1]);\n+                        });\n+\n+                        if (operator && operator !== '+') {\n+\n+                            var separator = ',';\n+\n+                            if (operator === '?') {\n+                                separator = '&';\n+                            } else if (operator !== '#') {\n+                                separator = operator;\n+                            }\n+\n+                            return (values.length !== 0 ? operator : '') + values.join(separator);\n+                        } else {\n+                            return values.join(',');\n+                        }\n+\n+                    } else {\n+                        return encodeReserved(literal);\n+                    }\n+                });\n+            }\n+        };\n+    }\n+\n+    function getValues(context, operator, key, modifier) {\n+\n+        var value = context[key], result = [];\n+\n+        if (isDefined(value) && value !== '') {\n+            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n+                value = value.toString();\n+\n+                if (modifier && modifier !== '*') {\n+                    value = value.substring(0, parseInt(modifier, 10));\n+                }\n+\n+                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+            } else {\n+                if (modifier === '*') {\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                result.push(encodeValue(operator, value[k], k));\n+                            }\n+                        });\n+                    }\n+                } else {\n+                    var tmp = [];\n+\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            tmp.push(encodeValue(operator, value));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                tmp.push(encodeURIComponent(k));\n+                                tmp.push(encodeValue(operator, value[k].toString()));\n+                            }\n+                        });\n+                    }\n+\n+                    if (isKeyOperator(operator)) {\n+                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\n+                    } else if (tmp.length !== 0) {\n+                        result.push(tmp.join(','));\n+                    }\n+                }\n+            }\n+        } else {\n+            if (operator === ';') {\n+                result.push(encodeURIComponent(key));\n+            } else if (value === '' && (operator === '&' || operator === '?')) {\n+                result.push(encodeURIComponent(key) + '=');\n+            } else if (value === '') {\n+                result.push('');\n+            }\n+        }\n+\n+        return result;\n+    }\n+\n+    function isDefined(value) {\n+        return value !== undefined && value !== null;\n+    }\n+\n+    function isKeyOperator(operator) {\n+        return operator === ';' || operator === '&' || operator === '?';\n+    }\n+\n+    function encodeValue(operator, value, key) {\n+\n+        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\n+\n+        if (key) {\n+            return encodeURIComponent(key) + '=' + value;\n+        } else {\n+            return value;\n+        }\n+    }\n+\n+    function encodeReserved(str) {\n+        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\n+            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\n+                part = encodeURI(part);\n+            }\n+            return part;\n+        }).join('');\n+    }\n+\n+    \u002F**\n+     * URL Template (RFC 6570) Transform.\n+     *\u002F\n+\n+    var template = function (options) {\n+\n+        var variables = [], url = expand(options.url, options.params, variables);\n+\n+        variables.forEach(function (key) {\n+            delete options.params[key];\n+        });\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Service for URL templating.\n+     *\u002F\n+\n+    function Url(url, params) {\n+\n+        var self = this || {}, options$$1 = url, transform;\n+\n+        if (isString(url)) {\n+            options$$1 = {url: url, params: params};\n+        }\n+\n+        options$$1 = merge({}, Url.options, self.$options, options$$1);\n+\n+        Url.transforms.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Url.transform[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                transform = factory(handler, transform, self.$vm);\n+            }\n+\n+        });\n+\n+        return transform(options$$1);\n+    }\n+\n+    \u002F**\n+     * Url options.\n+     *\u002F\n+\n+    Url.options = {\n+        url: '',\n+        root: null,\n+        params: {}\n+    };\n+\n+    \u002F**\n+     * Url transforms.\n+     *\u002F\n+\n+    Url.transform = {template: template, query: query, root: root};\n+    Url.transforms = ['template', 'query', 'root'];\n+\n+    \u002F**\n+     * Encodes a Url parameter string.\n+     *\n+     * @param {Object} obj\n+     *\u002F\n+\n+    Url.params = function (obj) {\n+\n+        var params = [], escape = encodeURIComponent;\n+\n+        params.add = function (key, value) {\n+\n+            if (isFunction(value)) {\n+                value = value();\n+            }\n+\n+            if (value === null) {\n+                value = '';\n+            }\n+\n+            this.push(escape(key) + '=' + escape(value));\n+        };\n+\n+        serialize(params, obj);\n+\n+        return params.join('&').replace(\u002F%20\u002Fg, '+');\n+    };\n+\n+    \u002F**\n+     * Parse a URL and return its components.\n+     *\n+     * @param {String} url\n+     *\u002F\n+\n+    Url.parse = function (url) {\n+\n+        var el = document.createElement('a');\n+\n+        if (document.documentMode) {\n+            el.href = url;\n+            url = el.href;\n+        }\n+\n+        el.href = url;\n+\n+        return {\n+            href: el.href,\n+            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\n+            port: el.port,\n+            host: el.host,\n+            hostname: el.hostname,\n+            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\n+            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\n+            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\n+        };\n+    };\n+\n+    function factory(handler, next, vm) {\n+        return function (options$$1) {\n+            return handler.call(vm, options$$1, next);\n+        };\n+    }\n+\n+    function serialize(params, obj, scope) {\n+\n+        var array = isArray(obj), plain = isPlainObject(obj), hash;\n+\n+        each(obj, function (value, key) {\n+\n+            hash = isObject(value) || isArray(value);\n+\n+            if (scope) {\n+                key = scope + '[' + (plain || hash ? key : '') + ']';\n+            }\n+\n+            if (!scope && array) {\n+                params.add(value.name, value.value);\n+            } else if (hash) {\n+                serialize(params, value, key);\n+            } else {\n+                params.add(key, value);\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * XDomain client (Internet Explorer).\n+     *\u002F\n+\n+    var xdrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xdr = new XDomainRequest(), handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load') {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                resolve(request.respondWith(xdr.responseText, {status: status}));\n+            };\n+\n+            request.abort = function () { return xdr.abort(); };\n+\n+            xdr.open(request.method, request.getUrl());\n+\n+            if (request.timeout) {\n+                xdr.timeout = request.timeout;\n+            }\n+\n+            xdr.onload = handler;\n+            xdr.onabort = handler;\n+            xdr.onerror = handler;\n+            xdr.ontimeout = handler;\n+            xdr.onprogress = function () {};\n+            xdr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * CORS Interceptor.\n+     *\u002F\n+\n+    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\n+\n+    var cors = function (request, next) {\n+\n+        if (inBrowser) {\n+\n+            var orgUrl = Url.parse(location.href);\n+            var reqUrl = Url.parse(request.getUrl());\n+\n+            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\n+\n+                request.crossOrigin = true;\n+                request.emulateHTTP = false;\n+\n+                if (!SUPPORTS_CORS) {\n+                    request.client = xdrClient;\n+                }\n+            }\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Form data Interceptor.\n+     *\u002F\n+\n+    var form = function (request, next) {\n+\n+        if (isFormData(request.body)) {\n+\n+            request.headers.delete('Content-Type');\n+\n+        } else if (isObject(request.body) && request.emulateJSON) {\n+\n+            request.body = Url.params(request.body);\n+            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * JSON Interceptor.\n+     *\u002F\n+\n+    var json = function (request, next) {\n+\n+        var type = request.headers.get('Content-Type') || '';\n+\n+        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\n+            request.body = JSON.stringify(request.body);\n+        }\n+\n+        next(function (response) {\n+\n+            return response.bodyText ? when(response.text(), function (text) {\n+\n+                type = response.headers.get('Content-Type') || '';\n+\n+                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\n+\n+                    try {\n+                        response.body = JSON.parse(text);\n+                    } catch (e) {\n+                        response.body = null;\n+                    }\n+\n+                } else {\n+                    response.body = text;\n+                }\n+\n+                return response;\n+\n+            }) : response;\n+\n+        });\n+    };\n+\n+    function isJson(str) {\n+\n+        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\n+\n+        return start && end[start[0]].test(str);\n+    }\n+\n+    \u002F**\n+     * JSONP client (Browser).\n+     *\u002F\n+\n+    var jsonpClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\n+\n+            handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load' && body !== null) {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                if (status && window[callback]) {\n+                    delete window[callback];\n+                    document.body.removeChild(script);\n+                }\n+\n+                resolve(request.respondWith(body, {status: status}));\n+            };\n+\n+            window[callback] = function (result) {\n+                body = JSON.stringify(result);\n+            };\n+\n+            request.abort = function () {\n+                handler({type: 'abort'});\n+            };\n+\n+            request.params[name] = callback;\n+\n+            if (request.timeout) {\n+                setTimeout(request.abort, request.timeout);\n+            }\n+\n+            script = document.createElement('script');\n+            script.src = request.getUrl();\n+            script.type = 'text\u002Fjavascript';\n+            script.async = true;\n+            script.onload = handler;\n+            script.onerror = handler;\n+\n+            document.body.appendChild(script);\n+        });\n+    };\n+\n+    \u002F**\n+     * JSONP Interceptor.\n+     *\u002F\n+\n+    var jsonp = function (request, next) {\n+\n+        if (request.method == 'JSONP') {\n+            request.client = jsonpClient;\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Before Interceptor.\n+     *\u002F\n+\n+    var before = function (request, next) {\n+\n+        if (isFunction(request.before)) {\n+            request.before.call(this, request);\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * HTTP method override Interceptor.\n+     *\u002F\n+\n+    var method = function (request, next) {\n+\n+        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\n+            request.headers.set('X-HTTP-Method-Override', request.method);\n+            request.method = 'POST';\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Header Interceptor.\n+     *\u002F\n+\n+    var header = function (request, next) {\n+\n+        var headers = assign({}, Http.headers.common,\n+            !request.crossOrigin ? Http.headers.custom : {},\n+            Http.headers[toLower(request.method)]\n+        );\n+\n+        each(headers, function (value, name) {\n+            if (!request.headers.has(name)) {\n+                request.headers.set(name, value);\n+            }\n+        });\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * XMLHttp client (Browser).\n+     *\u002F\n+\n+    var xhrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xhr = new XMLHttpRequest(), handler = function (event) {\n+\n+                var response = request.respondWith(\n+                    'response' in xhr ? xhr.response : xhr.responseText, {\n+                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\n+                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\n+                    }\n+                );\n+\n+                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\n+                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\n+                });\n+\n+                resolve(response);\n+            };\n+\n+            request.abort = function () { return xhr.abort(); };\n+\n+            if (request.progress) {\n+                if (request.method === 'GET') {\n+                    xhr.addEventListener('progress', request.progress);\n+                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\n+                    xhr.upload.addEventListener('progress', request.progress);\n+                }\n+            }\n+\n+            xhr.open(request.method, request.getUrl(), true);\n+\n+            if (request.timeout) {\n+                xhr.timeout = request.timeout;\n+            }\n+\n+            if (request.responseType && 'responseType' in xhr) {\n+                xhr.responseType = request.responseType;\n+            }\n+\n+            if (request.withCredentials || request.credentials) {\n+                xhr.withCredentials = true;\n+            }\n+\n+            if (!request.crossOrigin) {\n+                request.headers.set('X-Requested-With', 'XMLHttpRequest');\n+            }\n+\n+            request.headers.forEach(function (value, name) {\n+                xhr.setRequestHeader(name, value);\n+            });\n+\n+            xhr.onload = handler;\n+            xhr.onabort = handler;\n+            xhr.onerror = handler;\n+            xhr.ontimeout = handler;\n+            xhr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * Http client (Node).\n+     *\u002F\n+\n+    var nodeClient = function (request) {\n+\n+        var client = require('got');\n+\n+        return new PromiseObj(function (resolve) {\n+\n+            var url = request.getUrl();\n+            var body = request.getBody();\n+            var method = request.method;\n+            var headers = {}, handler;\n+\n+            request.headers.forEach(function (value, name) {\n+                headers[name] = value;\n+            });\n+\n+            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\n+\n+                var response = request.respondWith(resp.body, {\n+                        status: resp.statusCode,\n+                        statusText: trim(resp.statusMessage)\n+                    }\n+                );\n+\n+                each(resp.headers, function (value, name) {\n+                    response.headers.set(name, value);\n+                });\n+\n+                resolve(response);\n+\n+            }, function (error$$1) { return handler(error$$1.response); });\n+        });\n+    };\n+\n+    \u002F**\n+     * Base client.\n+     *\u002F\n+\n+    var Client = function (context) {\n+\n+        var reqHandlers = [sendRequest], resHandlers = [], handler;\n+\n+        if (!isObject(context)) {\n+            context = null;\n+        }\n+\n+        function Client(request) {\n+            return new PromiseObj(function (resolve, reject) {\n+\n+                function exec() {\n+\n+                    handler = reqHandlers.pop();\n+\n+                    if (isFunction(handler)) {\n+                        handler.call(context, request, next);\n+                    } else {\n+                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\n+                        next();\n+                    }\n+                }\n+\n+                function next(response) {\n+\n+                    if (isFunction(response)) {\n+\n+                        resHandlers.unshift(response);\n+\n+                    } else if (isObject(response)) {\n+\n+                        resHandlers.forEach(function (handler) {\n+                            response = when(response, function (response) {\n+                                return handler.call(context, response) || response;\n+                            }, reject);\n+                        });\n+\n+                        when(response, resolve, reject);\n+\n+                        return;\n+                    }\n+\n+                    exec();\n+                }\n+\n+                exec();\n+\n+            }, context);\n+        }\n+\n+        Client.use = function (handler) {\n+            reqHandlers.push(handler);\n+        };\n+\n+        return Client;\n+    };\n+\n+    function sendRequest(request, resolve) {\n+\n+        var client = request.client || (inBrowser ? xhrClient : nodeClient);\n+\n+        resolve(client(request));\n+    }\n+\n+    \u002F**\n+     * HTTP Headers.\n+     *\u002F\n+\n+    var Headers = function Headers(headers) {\n+        var this$1 = this;\n+\n+\n+        this.map = {};\n+\n+        each(headers, function (value, name) { return this$1.append(name, value); });\n+    };\n+\n+    Headers.prototype.has = function has (name) {\n+        return getName(this.map, name) !== null;\n+    };\n+\n+    Headers.prototype.get = function get (name) {\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        return list ? list.join() : null;\n+    };\n+\n+    Headers.prototype.getAll = function getAll (name) {\n+        return this.map[getName(this.map, name)] || [];\n+    };\n+\n+    Headers.prototype.set = function set (name, value) {\n+        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\n+    };\n+\n+    Headers.prototype.append = function append (name, value){\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        if (list) {\n+            list.push(trim(value));\n+        } else {\n+            this.set(name, value);\n+        }\n+    };\n+\n+    Headers.prototype.delete = function delete$1 (name){\n+        delete this.map[getName(this.map, name)];\n+    };\n+\n+    Headers.prototype.deleteAll = function deleteAll (){\n+        this.map = {};\n+    };\n+\n+    Headers.prototype.forEach = function forEach (callback, thisArg) {\n+        var this$1 = this;\n+\n+        each(this.map, function (list, name) {\n+            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\n+        });\n+    };\n+\n+    function getName(map, name) {\n+        return Object.keys(map).reduce(function (prev, curr) {\n+            return toLower(name) === toLower(curr) ? curr : prev;\n+        }, null);\n+    }\n+\n+    function normalizeName(name) {\n+\n+        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\n+            throw new TypeError('Invalid character in header field name');\n+        }\n+\n+        return trim(name);\n+    }\n+\n+    \u002F**\n+     * HTTP Response.\n+     *\u002F\n+\n+    var Response = function Response(body, ref) {\n+        var url = ref.url;\n+        var headers = ref.headers;\n+        var status = ref.status;\n+        var statusText = ref.statusText;\n+\n+\n+        this.url = url;\n+        this.ok = status >= 200 && status \u003C 300;\n+        this.status = status || 0;\n+        this.statusText = statusText || '';\n+        this.headers = new Headers(headers);\n+        this.body = body;\n+\n+        if (isString(body)) {\n+\n+            this.bodyText = body;\n+\n+        } else if (isBlob(body)) {\n+\n+            this.bodyBlob = body;\n+\n+            if (isBlobText(body)) {\n+                this.bodyText = blobText(body);\n+            }\n+        }\n+    };\n+\n+    Response.prototype.blob = function blob () {\n+        return when(this.bodyBlob);\n+    };\n+\n+    Response.prototype.text = function text () {\n+        return when(this.bodyText);\n+    };\n+\n+    Response.prototype.json = function json () {\n+        return when(this.text(), function (text) { return JSON.parse(text); });\n+    };\n+\n+    Object.defineProperty(Response.prototype, 'data', {\n+\n+        get: function get() {\n+            return this.body;\n+        },\n+\n+        set: function set(body) {\n+            this.body = body;\n+        }\n+\n+    });\n+\n+    function blobText(body) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var reader = new FileReader();\n+\n+            reader.readAsText(body);\n+            reader.onload = function () {\n+                resolve(reader.result);\n+            };\n+\n+        });\n+    }\n+\n+    function isBlobText(body) {\n+        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n+    }\n+\n+    \u002F**\n+     * HTTP Request.\n+     *\u002F\n+\n+    var Request = function Request(options$$1) {\n+\n+        this.body = null;\n+        this.params = {};\n+\n+        assign(this, options$$1, {\n+            method: toUpper(options$$1.method || 'GET')\n+        });\n+\n+        if (!(this.headers instanceof Headers)) {\n+            this.headers = new Headers(this.headers);\n+        }\n+    };\n+\n+    Request.prototype.getUrl = function getUrl (){\n+        return Url(this);\n+    };\n+\n+    Request.prototype.getBody = function getBody (){\n+        return this.body;\n+    };\n+\n+    Request.prototype.respondWith = function respondWith (body, options$$1) {\n+        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n+    };\n+\n+    \u002F**\n+     * Service for sending network requests.\n+     *\u002F\n+\n+    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\n+    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\n+\n+    function Http(options$$1) {\n+\n+        var self = this || {}, client = Client(self.$vm);\n+\n+        defaults(options$$1 || {}, self.$options, Http.options);\n+\n+        Http.interceptors.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Http.interceptor[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                client.use(handler);\n+            }\n+\n+        });\n+\n+        return client(new Request(options$$1)).then(function (response) {\n+\n+            return response.ok ? response : PromiseObj.reject(response);\n+\n+        }, function (response) {\n+\n+            if (response instanceof Error) {\n+                error(response);\n+            }\n+\n+            return PromiseObj.reject(response);\n+        });\n+    }\n+\n+    Http.options = {};\n+\n+    Http.headers = {\n+        put: JSON_CONTENT_TYPE,\n+        post: JSON_CONTENT_TYPE,\n+        patch: JSON_CONTENT_TYPE,\n+        delete: JSON_CONTENT_TYPE,\n+        common: COMMON_HEADERS,\n+        custom: {}\n+    };\n+\n+    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\n+    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n+\n+    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n+        };\n+\n+    });\n+\n+    ['post', 'put', 'patch'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, body, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n+        };\n+\n+    });\n+\n+    \u002F**\n+     * Service for interacting with RESTful services.\n+     *\u002F\n+\n+    function Resource(url, params, actions, options$$1) {\n+\n+        var self = this || {}, resource = {};\n+\n+        actions = assign({},\n+            Resource.actions,\n+            actions\n+        );\n+\n+        each(actions, function (action, name) {\n+\n+            action = merge({url: url, params: assign({}, params)}, options$$1, action);\n+\n+            resource[name] = function () {\n+                return (self.$http || Http)(opts(action, arguments));\n+            };\n+        });\n+\n+        return resource;\n+    }\n+\n+    function opts(action, args) {\n+\n+        var options$$1 = assign({}, action), params = {}, body;\n+\n+        switch (args.length) {\n+\n+            case 2:\n+\n+                params = args[0];\n+                body = args[1];\n+\n+                break;\n+\n+            case 1:\n+\n+                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\n+                    body = args[0];\n+                } else {\n+                    params = args[0];\n+                }\n+\n+                break;\n+\n+            case 0:\n+\n+                break;\n+\n+            default:\n+\n+                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n+        }\n+\n+        options$$1.body = body;\n+        options$$1.params = assign({}, options$$1.params, params);\n+\n+        return options$$1;\n+    }\n+\n+    Resource.actions = {\n+\n+        get: {method: 'GET'},\n+        save: {method: 'POST'},\n+        query: {method: 'GET'},\n+        update: {method: 'PUT'},\n+        remove: {method: 'DELETE'},\n+        delete: {method: 'DELETE'}\n+\n+    };\n+\n+    \u002F**\n+     * Install plugin.\n+     *\u002F\n+\n+    function plugin(Vue) {\n+\n+        if (plugin.installed) {\n+            return;\n+        }\n+\n+        Util(Vue);\n+\n+        Vue.url = Url;\n+        Vue.http = Http;\n+        Vue.resource = Resource;\n+        Vue.Promise = PromiseObj;\n+\n+        Object.defineProperties(Vue.prototype, {\n+\n+            $url: {\n+                get: function get() {\n+                    return options(Vue.url, this, this.$options.url);\n+                }\n+            },\n+\n+            $http: {\n+                get: function get() {\n+                    return options(Vue.http, this, this.$options.http);\n+                }\n+            },\n+\n+            $resource: {\n+                get: function get() {\n+                    return Vue.resource.bind(this);\n+                }\n+            },\n+\n+            $promise: {\n+                get: function get() {\n+                    var this$1 = this;\n+\n+                    return function (executor) { return new Vue.Promise(executor, this$1); };\n+                }\n+            }\n+\n+        });\n+    }\n+\n+    if (typeof window !== 'undefined' && window.Vue) {\n+        window.Vue.use(plugin);\n+    }\n+\n+    return plugin;\n+\n+})));\n+\n+'use strict';\n+var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n+\n+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n+\n+(function () {\n+  \"use strict\";\n+\n+  if (!Array.from) {\n+    Array.from = function (object) {\n+      return [].slice.call(object);\n+    };\n+  }\n+\n+  function buildDraggable(Sortable) {\n+    function removeNode(node) {\n+      node.parentElement.removeChild(node);\n+    }\n+\n+    function insertNodeAt(fatherNode, node, position) {\n+      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n+      fatherNode.insertBefore(node, refNode);\n+    }\n+\n+    function computeVmIndex(vnodes, element) {\n+      return vnodes.map(function (elt) {\n+        return elt.elm;\n+      }).indexOf(element);\n+    }\n+\n+    function _computeIndexes(slots, children, isTransition) {\n+      if (!slots) {\n+        return [];\n+      }\n+\n+      var elmFromNodes = slots.map(function (elt) {\n+        return elt.elm;\n+      });\n+      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\n+        return elmFromNodes.indexOf(elt);\n+      });\n+      return isTransition ? rawIndexes.filter(function (ind) {\n+        return ind !== -1;\n+      }) : rawIndexes;\n+    }\n+\n+    function emit(evtName, evtData) {\n+      var _this = this;\n+\n+      this.$nextTick(function () {\n+        return _this.$emit(evtName.toLowerCase(), evtData);\n+      });\n+    }\n+\n+    function delegateAndEmit(evtName) {\n+      var _this2 = this;\n+\n+      return function (evtData) {\n+        if (_this2.realList !== null) {\n+          _this2['onDrag' + evtName](evtData);\n+        }\n+        emit.call(_this2, evtName, evtData);\n+      };\n+    }\n+\n+    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\n+    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\n+    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\n+      return 'on' + evt;\n+    });\n+    var draggingElement = null;\n+\n+    var props = {\n+      options: Object,\n+      list: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      value: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      noTransitionOnDrag: {\n+        type: Boolean,\n+        default: false\n+      },\n+      clone: {\n+        type: Function,\n+        default: function _default(original) {\n+          return original;\n+        }\n+      },\n+      element: {\n+        type: String,\n+        default: 'div'\n+      },\n+      move: {\n+        type: Function,\n+        default: null\n+      }\n+    };\n+\n+    var draggableComponent = {\n+      name: 'draggable',\n+\n+      props: props,\n+\n+      data: function data() {\n+        return {\n+          transitionMode: false,\n+          componentMode: false\n+        };\n+      },\n+      render: function render(h) {\n+        var slots = this.$slots.default;\n+        if (slots && slots.length === 1) {\n+          var child = slots[0];\n+          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\n+            this.transitionMode = true;\n+          }\n+        }\n+        var children = slots;\n+        var footer = this.$slots.footer;\n+\n+        if (footer) {\n+          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\n+        }\n+        return h(this.element, null, children);\n+      },\n+      mounted: function mounted() {\n+        var _this3 = this;\n+\n+        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\n+        if (this.componentMode && this.transitionMode) {\n+          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\n+        }\n+        var optionsAdded = {};\n+        eventsListened.forEach(function (elt) {\n+          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\n+        });\n+\n+        eventsToEmit.forEach(function (elt) {\n+          optionsAdded['on' + elt] = emit.bind(_this3, elt);\n+        });\n+\n+        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\n+            return _this3.onDragMove(evt, originalEvent);\n+          } });\n+        !('draggable' in options) && (options.draggable = '>*');\n+        this._sortable = new Sortable(this.rootContainer, options);\n+        this.computeIndexes();\n+      },\n+      beforeDestroy: function beforeDestroy() {\n+        this._sortable.destroy();\n+      },\n+\n+\n+      computed: {\n+        rootContainer: function rootContainer() {\n+          return this.transitionMode ? this.$el.children[0] : this.$el;\n+        },\n+        isCloning: function isCloning() {\n+          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\n+        },\n+        realList: function realList() {\n+          return !!this.list ? this.list : this.value;\n+        }\n+      },\n+\n+      watch: {\n+        options: {\n+          handler: function handler(newOptionValue) {\n+            for (var property in newOptionValue) {\n+              if (readonlyProperties.indexOf(property) == -1) {\n+                this._sortable.option(property, newOptionValue[property]);\n+              }\n+            }\n+          },\n+\n+          deep: true\n+        },\n+\n+        realList: function realList() {\n+          this.computeIndexes();\n+        }\n+      },\n+\n+      methods: {\n+        getChildrenNodes: function getChildrenNodes() {\n+          if (this.componentMode) {\n+            return this.$children[0].$slots.default;\n+          }\n+          var rawNodes = this.$slots.default;\n+          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n+        },\n+        computeIndexes: function computeIndexes() {\n+          var _this4 = this;\n+\n+          this.$nextTick(function () {\n+            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\n+          });\n+        },\n+        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n+          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n+          if (index === -1) {\n+            \u002F\u002FEdge case during move callback: related element might be\n+            \u002F\u002Fan element different from collection\n+            return null;\n+          }\n+          var element = this.realList[index];\n+          return { index: index, element: element };\n+        },\n+        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n+          var __vue__ = _ref.__vue__;\n+\n+          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\n+            return __vue__;\n+          }\n+          return __vue__.$parent;\n+        },\n+        emitChanges: function emitChanges(evt) {\n+          var _this5 = this;\n+\n+          this.$nextTick(function () {\n+            _this5.$emit('change', evt);\n+          });\n+        },\n+        alterList: function alterList(onList) {\n+          if (!!this.list) {\n+            onList(this.list);\n+          } else {\n+            var newList = [].concat(_toConsumableArray(this.value));\n+            onList(newList);\n+            this.$emit('input', newList);\n+          }\n+        },\n+        spliceList: function spliceList() {\n+          var _arguments = arguments;\n+\n+          var spliceList = function spliceList(list) {\n+            return list.splice.apply(list, _arguments);\n+          };\n+          this.alterList(spliceList);\n+        },\n+        updatePosition: function updatePosition(oldIndex, newIndex) {\n+          var updatePosition = function updatePosition(list) {\n+            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n+          };\n+          this.alterList(updatePosition);\n+        },\n+        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n+          var to = _ref2.to,\n+              related = _ref2.related;\n+\n+          var component = this.getUnderlyingPotencialDraggableComponent(to);\n+          if (!component) {\n+            return { component: component };\n+          }\n+          var list = component.realList;\n+          var context = { list: list, component: component };\n+          if (to !== related && list && component.getUnderlyingVm) {\n+            var destination = component.getUnderlyingVm(related);\n+            if (destination) {\n+              return _extends(destination, context);\n+            }\n+          }\n+\n+          return context;\n+        },\n+        getVmIndex: function getVmIndex(domIndex) {\n+          var indexes = this.visibleIndexes;\n+          var numberIndexes = indexes.length;\n+          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n+        },\n+        getComponent: function getComponent() {\n+          return this.$slots.default[0].componentInstance;\n+        },\n+        resetTransitionData: function resetTransitionData(index) {\n+          if (!this.noTransitionOnDrag || !this.transitionMode) {\n+            return;\n+          }\n+          var nodes = this.getChildrenNodes();\n+          nodes[index].data = null;\n+          var transitionContainer = this.getComponent();\n+          transitionContainer.children = [];\n+          transitionContainer.kept = undefined;\n+        },\n+        onDragStart: function onDragStart(evt) {\n+          this.context = this.getUnderlyingVm(evt.item);\n+          evt.item._underlying_vm_ = this.clone(this.context.element);\n+          draggingElement = evt.item;\n+        },\n+        onDragAdd: function onDragAdd(evt) {\n+          var element = evt.item._underlying_vm_;\n+          if (element === undefined) {\n+            return;\n+          }\n+          removeNode(evt.item);\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.spliceList(newIndex, 0, element);\n+          this.computeIndexes();\n+          var added = { element: element, newIndex: newIndex };\n+          this.emitChanges({ added: added });\n+        },\n+        onDragRemove: function onDragRemove(evt) {\n+          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\n+          if (this.isCloning) {\n+            removeNode(evt.clone);\n+            return;\n+          }\n+          var oldIndex = this.context.index;\n+          this.spliceList(oldIndex, 1);\n+          var removed = { element: this.context.element, oldIndex: oldIndex };\n+          this.resetTransitionData(oldIndex);\n+          this.emitChanges({ removed: removed });\n+        },\n+        onDragUpdate: function onDragUpdate(evt) {\n+          removeNode(evt.item);\n+          insertNodeAt(evt.from, evt.item, evt.oldIndex);\n+          var oldIndex = this.context.index;\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.updatePosition(oldIndex, newIndex);\n+          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\n+          this.emitChanges({ moved: moved });\n+        },\n+        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n+          if (!relatedContext.element) {\n+            return 0;\n+          }\n+          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\n+            return el.style['display'] !== 'none';\n+          });\n+          var currentDOMIndex = domChildren.indexOf(evt.related);\n+          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n+          var draggedInList = domChildren.indexOf(draggingElement) != -1;\n+          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n+        },\n+        onDragMove: function onDragMove(evt, originalEvent) {\n+          var onMove = this.move;\n+          if (!onMove || !this.realList) {\n+            return true;\n+          }\n+\n+          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n+          var draggedContext = this.context;\n+          var futureIndex = this.computeFutureIndex(relatedContext, evt);\n+          _extends(draggedContext, { futureIndex: futureIndex });\n+          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\n+          return onMove(evt, originalEvent);\n+        },\n+        onDragEnd: function onDragEnd(evt) {\n+          this.computeIndexes();\n+          draggingElement = null;\n+        }\n+      }\n+    };\n+    return draggableComponent;\n+  }\n+\n+  if (typeof exports == \"object\") {\n+    \u002F\u002F var Sortable = require(\"sortablejs\");\n+    \u002F\u002F module.exports = buildDraggable(Sortable);\n+  } else if (typeof define == \"function\" && define.amd) {\n+    define(['sortablejs'], function (Sortable) {\n+      return buildDraggable(Sortable);\n+    });\n+  } else if (window && window.Vue && window.Sortable) {\n+    var draggable = buildDraggable(window.Sortable);\n+    Vue.component('draggable', draggable);\n+  }\n+})();\n+\u002F\u002F tipsy, facebook style tooltips for jquery\n+\u002F\u002F version 1.0.0a\n+\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\n+\u002F\u002F released under the MIT license\n+\n+(function($) {\n+\n+    function maybeCall(thing, ctx) {\n+        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\n+    };\n+\n+    function isElementInDOM(ele) {\n+        while (ele = ele.parentNode) {\n+            if (ele == document) return true;\n+        }\n+        return false;\n+    };\n+\n+    function Tipsy(element, options) {\n+        this.$element = $(element);\n+        this.options = options;\n+        this.enabled = true;\n+        this.fixTitle();\n+    };\n+\n+    Tipsy.prototype = {\n+        show: function() {\n+            var title = this.getTitle();\n+            if (title && this.enabled) {\n+                var $tip = this.tip();\n+\n+                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\n+                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\n+                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\n+\n+                var pos = $.extend({}, this.$element.offset(), {\n+                    width: this.$element[0].offsetWidth,\n+                    height: this.$element[0].offsetHeight\n+                });\n+\n+                var actualWidth = $tip[0].offsetWidth,\n+                    actualHeight = $tip[0].offsetHeight,\n+                    gravity = maybeCall(this.options.gravity, this.$element[0]);\n+\n+                var tp;\n+                switch (gravity.charAt(0)) {\n+                    case 'n':\n+                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 's':\n+                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 'e':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\n+                        break;\n+                    case 'w':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\n+                        break;\n+                }\n+\n+                if (gravity.length == 2) {\n+                    if (gravity.charAt(1) == 'w') {\n+                        tp.left = pos.left + pos.width \u002F 2 - 15;\n+                    } else {\n+                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\n+                    }\n+                }\n+\n+                $tip.css(tp).addClass('tipsy-' + gravity);\n+                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\n+                if (this.options.className) {\n+                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\n+                }\n+\n+                if (this.options.fade) {\n+                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\n+                } else {\n+                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\n+                }\n+            }\n+        },\n+\n+        hide: function() {\n+            if (this.options.fade) {\n+                this.tip().stop().fadeOut(function() { $(this).remove(); });\n+            } else {\n+                this.tip().remove();\n+            }\n+        },\n+\n+        fixTitle: function() {\n+            var $e = this.$element;\n+            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\n+                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\n+            }\n+        },\n+\n+        getTitle: function() {\n+            var title, $e = this.$element, o = this.options;\n+            this.fixTitle();\n+            var title, o = this.options;\n+            if (typeof o.title == 'string') {\n+                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\n+            } else if (typeof o.title == 'function') {\n+                title = o.title.call($e[0]);\n+            }\n+            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\n+            return title || o.fallback;\n+        },\n+\n+        tip: function() {\n+            if (!this.$tip) {\n+                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\n+                this.$tip.data('tipsy-pointee', this.$element[0]);\n+            }\n+            return this.$tip;\n+        },\n+\n+        validate: function() {\n+            if (!this.$element[0].parentNode) {\n+                this.hide();\n+                this.$element = null;\n+                this.options = null;\n+            }\n+        },\n+\n+        enable: function() { this.enabled = true; },\n+        disable: function() { this.enabled = false; },\n+        toggleEnabled: function() { this.enabled = !this.enabled; }\n+    };\n+\n+    $.fn.tipsy = function(options) {\n+\n+        if (options === true) {\n+            return this.data('tipsy');\n+        } else if (typeof options == 'string') {\n+            var tipsy = this.data('tipsy');\n+            if (tipsy) tipsy[options]();\n+            return this;\n+        }\n+\n+        options = $.extend({}, $.fn.tipsy.defaults, options);\n+\n+        function get(ele) {\n+            var tipsy = $.data(ele, 'tipsy');\n+            if (!tipsy) {\n+                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n+                $.data(ele, 'tipsy', tipsy);\n+            }\n+            return tipsy;\n+        }\n+\n+        function enter() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'in';\n+            if (options.delayIn == 0) {\n+                tipsy.show();\n+            } else {\n+                tipsy.fixTitle();\n+                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\n+            }\n+        };\n+\n+        function leave() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'out';\n+            if (options.delayOut == 0) {\n+                tipsy.hide();\n+            } else {\n+                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\n+            }\n+        };\n+\n+        if (!options.live) this.each(function() { get(this); });\n+\n+        if (options.trigger != 'manual') {\n+            var binder   = options.live ? 'live' : 'bind',\n+                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\n+                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\n+            this[binder](eventIn, enter)[binder](eventOut, leave);\n+        }\n+\n+        return this;\n+\n+    };\n+\n+    $.fn.tipsy.defaults = {\n+        className: null,\n+        delayIn: 0,\n+        delayOut: 0,\n+        fade: false,\n+        fallback: '',\n+        gravity: 'n',\n+        html: false,\n+        live: false,\n+        offset: 0,\n+        opacity: 0.8,\n+        title: 'title',\n+        trigger: 'hover'\n+    };\n+\n+    $.fn.tipsy.revalidate = function() {\n+        $('.tipsy').each(function() {\n+            var pointee = $.data(this, 'tipsy-pointee');\n+            if (!pointee || !isElementInDOM(pointee)) {\n+                $(this).remove();\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Overwrite this method to provide options on a per-element basis.\n+    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\n+    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n+    \u002F\u002F (remember - do not modify 'options' in place!)\n+    $.fn.tipsy.elementOptions = function(ele, options) {\n+        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n+    };\n+\n+    $.fn.tipsy.autoNS = function() {\n+        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\n+    };\n+\n+    $.fn.tipsy.autoWE = function() {\n+        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\n+    };\n+\n+    \u002F**\n+     * yields a closure of the supplied parameters, producing a function that takes\n+     * no arguments and is suitable for use as an autogravity function like so:\n+     *\n+     * @param margin (int) - distance from the viewable region edge that an\n+     *        element should be before setting its tooltip's gravity to be away\n+     *        from that edge.\n+     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n+     *        if there are no viewable region edges effecting the tooltip's\n+     *        gravity. It will try to vary from this minimally, for example,\n+     *        if 'sw' is preferred and an element is near the right viewable\n+     *        region edge, but not the top edge, it will set the gravity for\n+     *        that element's tooltip to be 'se', preserving the southern\n+     *        component.\n+     *\u002F\n+    $.fn.tipsy.autoBounds = function(margin, prefer) {\n+        return function() {\n+            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\n+                boundTop = $(document).scrollTop() + margin,\n+                boundLeft = $(document).scrollLeft() + margin,\n+                $this = $(this);\n+\n+            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\n+            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\n+            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\n+            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\n+\n+            return dir.ns + (dir.ew ? dir.ew : '');\n+        }\n+    };\n+\n })(jQuery);\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fchart.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fchart.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fchart.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fchart.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F*!\r\n- * Chart.js v3.8.0\r\n- * https:\u002F\u002Fwww.chartjs.org\r\n- * (c) 2022 Chart.js Contributors\r\n- * Released under the MIT License\r\n- *\u002F\r\n-!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){\"use strict\";const t=\"undefined\"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>\"start\"===t?\"left\":\"end\"===t?\"right\":\"center\",n=(t,e,i)=>\"start\"===t?e:\"end\"===t?i:(e+i)\u002F2,o=(t,e,i,s)=>t===(s?\"left\":\"right\")?i:\"center\"===t?(e+i)\u002F2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,\"progress\")),n.length||(i.running=!1,this._notify(s,i,t,\"complete\"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}};\r\n-\u002F*!\r\n- * @kurkle\u002Fcolor v0.2.1\r\n- * https:\u002F\u002Fgithub.com\u002Fkurkle\u002Fcolor#readme\r\n- * (c) 2022 Jukka Kurkela\r\n- * Released under the MIT License\r\n- *\u002Ffunction r(t){return t+.5|0}const l=(t,e,i)=>Math.max(Math.min(t,i),e);function h(t){return l(r(2.55*t),0,255)}function c(t){return l(r(255*t),0,255)}function d(t){return l(r(t\u002F2.55)\u002F100,0,1)}function u(t){return l(r(100*t),0,100)}const f={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},g=[...\"0123456789ABCDEF\"],p=t=>g[15&t],m=t=>g[(240&t)>>4]+g[15&t],b=t=>(240&t)>>4==(15&t);function x(t){var e=(t=>b(t.r)&&b(t.g)&&b(t.b)&&b(t.a))(t)?p:m;return t?\"#\"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t\u003C255?e(t):\"\")(t.a,e):void 0}const _=\u002F^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;function y(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t\u002F30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function v(t,e,i){const s=(s,n=(s+t\u002F60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function w(t,e,i){const s=y(t,1,.5);let n;for(e+i>1&&(n=1\u002F(e+i),e*=n,i*=n),n=0;n\u003C3;n++)s[n]*=1-e-i,s[n]+=e;return s}function M(t){const e=t.r\u002F255,i=t.g\u002F255,s=t.b\u002F255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)\u002F2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h\u002F(2-n-o):h\u002F(n+o),r=function(t,e,i,s,n){return t===n?(e-i)\u002Fs+(e\u003Ci?6:0):e===n?(i-t)\u002Fs+2:(t-e)\u002Fs+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function k(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(c)}function S(t,e,i){return k(y,t,e,i)}function P(t){return(t%360+360)%360}function D(t){const e=_.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?h(+e[5]):c(+e[5]));const n=P(+e[2]),o=+e[3]\u002F100,a=+e[4]\u002F100;return i=\"hwb\"===e[1]?function(t,e,i){return k(w,t,e,i)}(n,o,a):\"hsv\"===e[1]?function(t,e,i){return k(v,t,e,i)}(n,o,a):S(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const C={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},O={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};let A;function T(t){A||(A=function(){const t={},e=Object.keys(O),i=Object.keys(C);let s,n,o,a,r;for(s=0;s\u003Ce.length;s++){for(a=r=e[s],n=0;n\u003Ci.length;n++)o=i[n],r=r.replace(o,C[o]);o=parseInt(O[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),A.transparent=[0,0,0,0]);const e=A[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const L=\u002F^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,\u002F]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;const R=t=>t\u003C=.0031308?12.92*t:1.055*Math.pow(t,1\u002F2.4)-.055,E=t=>t\u003C=.04045?t\u002F12.92:Math.pow((t+.055)\u002F1.055,2.4);function I(t,e,i){if(t){let s=M(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=S(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function z(t,e){return t?Object.assign(e||{},t):t}function F(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=c(t[3]))):(e=z(t,{r:0,g:0,b:0,a:1})).a=c(e.a),e}function B(t){return\"r\"===t.charAt(0)?function(t){const e=L.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?h(t):l(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?h(i):l(i,0,255)),s=255&(e[4]?h(s):l(s,0,255)),n=255&(e[6]?h(n):l(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):D(t)}class V{constructor(t){if(t instanceof V)return t;const e=typeof t;let i;var s,n,o;\"object\"===e?i=F(t):\"string\"===e&&(o=(s=t).length,\"#\"===s[0]&&(4===o||5===o?n={r:255&17*f[s[1]],g:255&17*f[s[2]],b:255&17*f[s[3]],a:5===o?17*f[s[4]]:255}:7!==o&&9!==o||(n={r:f[s[1]]\u003C\u003C4|f[s[2]],g:f[s[3]]\u003C\u003C4|f[s[4]],b:f[s[5]]\u003C\u003C4|f[s[6]],a:9===o?f[s[7]]\u003C\u003C4|f[s[8]]:255})),i=n||T(t)||B(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=z(this._rgb);return t&&(t.a=d(t.a)),t}set rgb(t){this._rgb=F(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a\u003C255?`rgba(${t.r}, ${t.g}, ${t.b}, ${d(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?x(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=M(t),i=e[0],s=u(e[1]),n=u(e[2]);return t.a\u003C255?`hsla(${i}, ${s}%, ${n}%, ${d(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)\u002F(1+a*r))+1)\u002F2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=E(d(t.r)),n=E(d(t.g)),o=E(d(t.b));return{r:c(R(s+i*(E(d(e.r))-s))),g:c(R(n+i*(E(d(e.g))-n))),b:c(R(o+i*(E(d(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new V(this.rgb)}alpha(t){return this._rgb.a=c(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=r(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return I(this._rgb,2,t),this}darken(t){return I(this._rgb,2,-t),this}saturate(t){return I(this._rgb,1,t),this}desaturate(t){return I(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=M(t);i[0]=P(i[0]+e),i=S(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function N(t){return new V(t)}function W(t){if(t&&\"object\"==typeof t){const e=t.toString();return\"[object CanvasPattern]\"===e||\"[object CanvasGradient]\"===e}return!1}function H(t){return W(t)?t:N(t)}function j(t){return W(t)?t:N(t).saturate(.5).darken(.1).hexString()}function $(){}const Y=function(){let t=0;return function(){return t++}}();function U(t){return null==t}function X(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return\"[object\"===e.slice(0,7)&&\"Array]\"===e.slice(-6)}function q(t){return null!==t&&\"[object Object]\"===Object.prototype.toString.call(t)}const K=t=>(\"number\"==typeof t||t instanceof Number)&&isFinite(+t);function G(t,e){return K(t)?t:e}function Z(t,e){return void 0===t?e:t}const J=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100:t\u002Fe,Q=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100*e:+t;function tt(t,e,i){if(t&&\"function\"==typeof t.call)return t.apply(i,e)}function et(t,e,i,s){let n,o,a;if(X(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;n\u003Co;n++)e.call(i,t[n],n);else if(q(t))for(a=Object.keys(t),o=a.length,n=0;n\u003Co;n++)e.call(i,t[a[n]],a[n])}function it(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i\u003Cs;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function st(t){if(X(t))return t.map(st);if(q(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n\u003Cs;++n)e[i[n]]=st(t[i[n]]);return e}return t}function nt(t){return-1===[\"__proto__\",\"prototype\",\"constructor\"].indexOf(t)}function ot(t,e,i,s){if(!nt(t))return;const n=e[t],o=i[t];q(n)&&q(o)?at(n,o,s):e[t]=st(o)}function at(t,e,i){const s=X(e)?e:[e],n=s.length;if(!q(t))return t;const o=(i=i||{}).merger||ot;for(let a=0;a\u003Cn;++a){if(!q(e=s[a]))continue;const n=Object.keys(e);for(let s=0,a=n.length;s\u003Ca;++s)o(n[s],t,e,i)}return t}function rt(t,e){return at(t,e,{merger:lt})}function lt(t,e,i){if(!nt(t))return;const s=e[t],n=i[t];q(s)&&q(n)?rt(s,n):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=st(n))}function ht(t,e){const i=t.indexOf(\".\",e);return-1===i?t.length:i}function ct(t,e){if(\"\"===e)return t;let i=0,s=ht(e,i);for(;t&&s>i;)t=t[e.slice(i,s)],i=s+1,s=ht(e,i);return t}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ut=t=>void 0!==t,ft=t=>\"function\"==typeof t,gt=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function pt(t){return\"mouseup\"===t.type||\"click\"===t.type||\"contextmenu\"===t.type}const mt=Object.create(null),bt=Object.create(null);function xt(t,e){if(!e)return t;const i=e.split(\".\");for(let e=0,s=i.length;e\u003Cs;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function _t(t,e,i){return\"string\"==typeof e?at(xt(t,e),i):at(xt(t,\"\"),e)}var yt=new class{constructor(t){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>j(e.backgroundColor),this.hoverBorderColor=(t,e)=>j(e.borderColor),this.hoverColor=(t,e)=>j(e.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return _t(this,t,e)}get(t){return xt(this,t)}describe(t,e){return _t(bt,t,e)}override(t,e){return _t(mt,t,e)}route(t,e,i,s){const n=xt(this,t),o=xt(this,i),a=\"_\"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return q(t)?Object.assign({},e,t):Z(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith(\"on\"),_indexable:t=>\"events\"!==t,hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}});function vt(t,e,i){i=i||(i=>t[i]\u003Ce);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const wt=(t,e,i)=>vt(t,i,(s=>t[s][e]\u003Ci)),Mt=(t,e,i)=>vt(t,i,(s=>t[s][e]>=i));function kt(t,e,i){let s=0,n=t.length;for(;s\u003Cn&&t[s]\u003Ce;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n\u003Ct.length?t.slice(s,n):t}const St=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function Pt(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),St.forEach((e=>{const i=\"_onData\"+dt(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{\"function\"==typeof t[i]&&t[i](...e)})),n}})})))}function Dt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(St.forEach((e=>{delete t[e]})),delete t._chartjs)}function Ct(t){const e=new Set;let i,s;for(i=0,s=t.length;i\u003Cs;++i)e.add(t[i]);return e.size===s?t:Array.from(e)}const Ot=Math.PI,At=2*Ot,Tt=At+Ot,Lt=Number.POSITIVE_INFINITY,Rt=Ot\u002F180,Et=Ot\u002F2,It=Ot\u002F4,zt=2*Ot\u002F3,Ft=Math.log10,Bt=Math.sign;function Vt(t){const e=Math.round(t);t=Ht(t,e,t\u002F1e3)?e:t;const i=Math.pow(10,Math.floor(Ft(t))),s=t\u002Fi;return(s\u003C=1?1:s\u003C=2?2:s\u003C=5?5:10)*i}function Nt(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s\u003Ci;s++)t%s==0&&(e.push(s),e.push(t\u002Fs));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function Wt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Ht(t,e,i){return Math.abs(t-e)\u003Ci}function jt(t,e){const i=Math.round(t);return i-e\u003C=t&&i+e>=t}function $t(t,e,i){let s,n,o;for(s=0,n=t.length;s\u003Cn;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function Yt(t){return t*(Ot\u002F180)}function Ut(t){return t*(180\u002FOt)}function Xt(t){if(!K(t))return;let e=1,i=0;for(;Math.round(t*e)\u002Fe!==t;)e*=10,i++;return i}function qt(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o\u003C-.5*Ot&&(o+=At),{angle:o,distance:n}}function Kt(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function Gt(t,e){return(t-e+Tt)%At-Ot}function Zt(t){return(t%At+At)%At}function Jt(t,e,i,s){const n=Zt(t),o=Zt(e),a=Zt(i),r=Zt(o-n),l=Zt(a-n),h=Zt(n-o),c=Zt(n-a);return n===o||n===a||s&&o===a||r>l&&h\u003Cc}function Qt(t,e,i){return Math.max(e,Math.min(i,t))}function te(t){return Qt(t,-32768,32767)}function ee(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t\u003C=Math.max(e,i)+s}function ie(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document}function se(t){let e=t.parentNode;return e&&\"[object ShadowRoot]\"===e.toString()&&(e=e.host),e}function ne(t,e,i){let s;return\"string\"==typeof t?(s=parseInt(t,10),-1!==t.indexOf(\"%\")&&(s=s\u002F100*e.parentNode[i])):s=t,s}const oe=t=>window.getComputedStyle(t,null);function ae(t,e){return oe(t).getPropertyValue(e)}const re=[\"top\",\"right\",\"bottom\",\"left\"];function le(t,e,i){const s={};i=i?\"-\"+i:\"\";for(let n=0;n\u003C4;n++){const o=re[n];s[o]=parseFloat(t[e+\"-\"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function he(t,e){if(\"native\"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=oe(i),o=\"border-box\"===n.boxSizing,a=le(n,\"padding\"),r=le(n,\"border\",\"width\"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)\u002Ff*i.width\u002Fs),y:Math.round((h-u)\u002Fg*i.height\u002Fs)}}const ce=t=>Math.round(10*t)\u002F10;function de(t,e,i,s){const n=oe(t),o=le(n,\"margin\"),a=ne(n.maxWidth,t,\"clientWidth\")||Lt,r=ne(n.maxHeight,t,\"clientHeight\")||Lt,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=se(t);if(o){const t=o.getBoundingClientRect(),a=oe(o),r=le(a,\"border\",\"width\"),l=le(a,\"padding\");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=ne(a.maxWidth,o,\"clientWidth\"),n=ne(a.maxHeight,o,\"clientHeight\")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||Lt,maxHeight:n||Lt}}(t,e,i);let{width:h,height:c}=l;if(\"content-box\"===n.boxSizing){const t=le(n,\"border\",\"width\"),e=le(n,\"padding\");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h\u002Fs):c-o.height),h=ce(Math.min(h,a,l.maxWidth)),c=ce(Math.min(c,r,l.maxHeight)),h&&!c&&(c=ce(h\u002F2)),{width:h,height:c}}function ue(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n\u002Fs,t.width=o\u002Fs;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const fe=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(t){}return t}();function ge(t,e){const i=ae(t,e),s=i&&i.match(\u002F^(\\d+)(\\.\\d+)?px$\u002F);return s?+s[1]:void 0}function pe(t){return!t||U(t.size)||U(t.family)?null:(t.style?t.style+\" \":\"\")+(t.weight?t.weight+\" \":\"\")+t.size+\"px \"+t.family}function me(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function be(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;l\u003Cr;l++)if(d=i[l],null!=d&&!0!==X(d))a=me(t,n,o,a,d);else if(X(d))for(h=0,c=d.length;h\u003Cc;h++)u=d[h],null==u||X(u)||(a=me(t,n,o,a,u));t.restore();const f=o.length\u002F2;if(f>i.length){for(l=0;l\u003Cf;l++)delete n[o[l]];o.splice(0,f)}return a}function xe(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i\u002F2,.5):0;return Math.round((e-n)*s)\u002Fs+n}function _e(t,e){(e=e||t.getContext(\"2d\")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function ye(t,e,i,s){let n,o,a,r,l;const h=e.pointStyle,c=e.rotation,d=e.radius;let u=(c||0)*Rt;if(h&&\"object\"==typeof h&&(n=h.toString(),\"[object HTMLImageElement]\"===n||\"[object HTMLCanvasElement]\"===n))return t.save(),t.translate(i,s),t.rotate(u),t.drawImage(h,-h.width\u002F2,-h.height\u002F2,h.width,h.height),void t.restore();if(!(isNaN(d)||d\u003C=0)){switch(t.beginPath(),h){default:t.arc(i,s,d,0,At),t.closePath();break;case\"triangle\":t.moveTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=zt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=zt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),t.closePath();break;case\"rectRounded\":l=.516*d,r=d-l,o=Math.cos(u+It)*r,a=Math.sin(u+It)*r,t.arc(i-o,s-a,l,u-Ot,u-Et),t.arc(i+a,s-o,l,u-Et,u),t.arc(i+o,s+a,l,u,u+Et),t.arc(i-a,s+o,l,u+Et,u+Ot),t.closePath();break;case\"rect\":if(!c){r=Math.SQRT1_2*d,t.rect(i-r,s-r,2*r,2*r);break}u+=It;case\"rectRot\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+a,s-o),t.lineTo(i+o,s+a),t.lineTo(i-a,s+o),t.closePath();break;case\"crossRot\":u+=It;case\"cross\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case\"star\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o),u+=It,o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case\"line\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a);break;case\"dash\":t.moveTo(i,s),t.lineTo(i+Math.cos(u)*d,s+Math.sin(u)*d)}t.fill(),e.borderWidth>0&&t.stroke()}}function ve(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x\u003Ce.right+i&&t.y>e.top-i&&t.y\u003Ce.bottom+i}function we(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function Me(t){t.restore()}function ke(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if(\"middle\"===n){const s=(e.x+i.x)\u002F2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else\"after\"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function Se(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function Pe(t,e,i,s,n,o={}){const a=X(e)?e:[e],r=o.strokeWidth>0&&\"\"!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);U(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;l\u003Ca.length;++l)h=a[l],r&&(o.strokeColor&&(t.strokeStyle=o.strokeColor),U(o.strokeWidth)||(t.lineWidth=o.strokeWidth),t.strokeText(h,i,s,o.maxWidth)),t.fillText(h,i,s,o.maxWidth),De(t,i,s,h,o),s+=n.lineHeight;t.restore()}function De(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)\u002F2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function Ce(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,-Et,Ot,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,Ot,Et,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,Et,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-Et,!0),t.lineTo(i+a.topLeft,s)}function Oe(t,e=[\"\"],i=t,s,n=(()=>t[0])){ut(s)||(s=Ne(\"_fallback\",t));const o={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>Oe([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Ee(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Ne(Le(o,t),i),ut(n))return Re(t,n)?Be(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>We(t).includes(e),ownKeys:t=>We(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Ae(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Te(t,s),setContext:e=>Ae(t,e,i,s),override:n=>Ae(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ee(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];ft(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error(\"Recursion detected: \"+Array.from(r).join(\"->\")+\"->\"+t);r.add(t),e=e(o,a||s),r.delete(t),Re(t,e)&&(e=Be(n._scopes,n,t,e));return e}(e,r,t,i));X(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(ut(o.index)&&s(t))e=e[o.index%e.length];else if(q(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=Be(s,n,t,l);e.push(Ae(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Re(e,r)&&(r=Ae(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Te(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:ft(i)?i:()=>i,isIndexable:ft(s)?s:()=>s}}const Le=(t,e)=>t?t+dt(e):e,Re=(t,e)=>q(e)&&\"adapters\"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Ee(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ie(t,e,i){return ft(t)?t(e,i):t}const ze=(t,e)=>!0===t?e:\"string\"==typeof t?ct(e,t):void 0;function Fe(t,e,i,s,n){for(const o of e){const e=ze(i,o);if(e){t.add(e);const o=Ie(e._fallback,i,n);if(ut(o)&&o!==i&&o!==s)return o}else if(!1===e&&ut(s)&&i!==s)return null}return!1}function Be(t,e,i,s){const n=e._rootScopes,o=Ie(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=Ve(r,a,i,o||i,s);return null!==l&&((!ut(o)||o===i||(l=Ve(r,a,o,l,s),null!==l))&&Oe(Array.from(r),[\"\"],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(X(n)&&q(i))return i;return n}(e,i,s))))}function Ve(t,e,i,s,n){for(;i;)i=Fe(t,e,i,s,n);return i}function Ne(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ut(e))return e}}function We(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith(\"_\"))))e.add(t);return Array.from(e)}(t._scopes)),e}function He(t,e,i,s){const{iScale:n}=t,{key:o=\"r\"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;r\u003Cl;++r)h=r+i,c=e[h],a[r]={r:n.parse(ct(c,o),h)};return a}const je=Number.EPSILON||1e-14,$e=(t,e)=>e\u003Ct.length&&!t[e].skip&&t[e],Ye=t=>\"x\"===t?\"y\":\"x\";function Ue(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Kt(o,n),l=Kt(a,o);let h=r\u002F(r+l),c=l\u002F(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Xe(t,e=\"x\"){const i=Ye(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=$e(t,0);for(a=0;a\u003Cs;++a)if(r=l,l=h,h=$e(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])\u002Ft:0}o[a]=r?h?Bt(n[a-1])!==Bt(n[a])?0:(n[a-1]+n[a])\u002F2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=$e(t,0);for(let c=0;c\u003Cs-1;++c)l=h,h=$e(t,c+1),l&&h&&(Ht(e[c],0,je)?i[c]=i[c+1]=0:(n=i[c]\u002Fe[c],o=i[c+1]\u002Fe[c],r=Math.pow(n,2)+Math.pow(o,2),r\u003C=9||(a=3\u002FMath.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i=\"x\"){const s=Ye(i),n=t.length;let o,a,r,l=$e(t,0);for(let h=0;h\u003Cn;++h){if(a=r,r=l,l=$e(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])\u002F3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)\u002F3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function qe(t,e,i){return Math.max(Math.min(t,i),e)}function Ke(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),\"monotone\"===e.cubicInterpolationMode)Xe(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o\u003Ca;++o)r=t[o],l=Ue(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=ve(t[0],e);for(i=0,s=t.length;i\u003Cs;++i)a=o,o=r,r=i\u003Cs-1&&ve(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=qe(n.cp1x,e.left,e.right),n.cp1y=qe(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=qe(n.cp2x,e.left,e.right),n.cp2y=qe(n.cp2y,e.top,e.bottom)))}(t,i)}const Ge=t=>0===t||1===t,Ze=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*At\u002Fi),Je=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*At\u002Fi)+1,Qe={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t\u002F=.5)\u003C1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t\u002F=.5)\u003C1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*Et),easeOutSine:t=>Math.sin(t*Et),easeInOutSine:t=>-.5*(Math.cos(Ot*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Ge(t)?t:t\u003C.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t\u002F=.5)\u003C1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Ge(t)?t:Ze(t,.075,.3),easeOutElastic:t=>Ge(t)?t:Je(t,.075,.3),easeInOutElastic(t){const e=.1125;return Ge(t)?t:t\u003C.5?.5*Ze(2*t,e,.45):.5+.5*Je(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t\u002F=.5)\u003C1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Qe.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t\u003C1\u002Fi?e*t*t:t\u003C2\u002Fi?e*(t-=1.5\u002Fi)*t+.75:t\u003C2.5\u002Fi?e*(t-=2.25\u002Fi)*t+.9375:e*(t-=2.625\u002Fi)*t+.984375},easeInOutBounce:t=>t\u003C.5?.5*Qe.easeInBounce(2*t):.5*Qe.easeOutBounce(2*t-1)+.5};function ti(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function ei(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:\"middle\"===s?i\u003C.5?t.y:e.y:\"after\"===s?i\u003C1?t.y:e.y:i>0?e.y:t.y}}function ii(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ti(t,n,i),r=ti(n,o,i),l=ti(o,e,i),h=ti(a,r,i),c=ti(r,l,i);return ti(h,c,i)}const si=new Map;function ni(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=si.get(i);return s||(s=new Intl.NumberFormat(t,e),si.set(i,s)),s}(e,i).format(t)}const oi=new RegExp(\u002F^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$\u002F),ai=new RegExp(\u002F^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$\u002F);function ri(t,e){const i=(\"\"+t).match(oi);if(!i||\"normal\"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case\"px\":return t;case\"%\":t\u002F=100}return e*t}function li(t,e){const i={},s=q(e),n=s?Object.keys(e):e,o=q(t)?s?i=>Z(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function hi(t){return li(t,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function ci(t){return li(t,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function di(t){const e=hi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function ui(t,e){t=t||{},e=e||yt.font;let i=Z(t.size,e.size);\"string\"==typeof i&&(i=parseInt(i,10));let s=Z(t.style,e.style);s&&!(\"\"+s).match(ai)&&(console.warn('Invalid font style specified: \"'+s+'\"'),s=\"\");const n={family:Z(t.family,e.family),lineHeight:ri(Z(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:Z(t.weight,e.weight),string:\"\"};return n.string=pe(n),n}function fi(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;n\u003Co;++n)if(a=t[n],void 0!==a&&(void 0!==e&&\"function\"==typeof a&&(a=a(e),r=!1),void 0!==i&&X(a)&&(a=a[i%a.length],r=!1),void 0!==a))return s&&!r&&(s.cacheable=!1),a}function gi(t,e,i){const{min:s,max:n}=t,o=Q(e,(n-s)\u002F2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function pi(t,e){return Object.assign(Object.create(t),e)}function mi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>\"center\"===t?t:\"right\"===t?\"left\":\"right\",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function bi(t,e){let i,s;\"ltr\"!==e&&\"rtl\"!==e||(i=t.canvas.style,s=[i.getPropertyValue(\"direction\"),i.getPropertyPriority(\"direction\")],i.setProperty(\"direction\",e,\"important\"),t.prevTextDirection=s)}function xi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty(\"direction\",e[0],e[1]))}function _i(t){return\"angle\"===t?{between:Jt,compare:Gt,normalize:Zt}:{between:ee,compare:(t,e)=>t-e,normalize:t=>t}}function yi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function vi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=_i(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=_i(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h\u003Cc&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u\u003Cd&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,b,x=!1,_=null;const y=()=>x||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t\u003C=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(yi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(yi({start:_,end:d,loop:u,count:a,style:f})),g}function wi(t,e){const i=[],s=t.segments;for(let n=0;n\u003Cs.length;n++){const o=vi(s[n],t.points,e);o.length&&i.push(...o)}return i}function Mi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n\u003Ce&&!t[n].skip;)n++;for(;n\u003Ce&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return ki(t,[{start:a,end:r,loop:o}],i,e);return ki(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a\u003C=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r\u003Ca?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function ki(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=Si(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u\u003C=t.end;u++){const r=i[u%l];e=Si(s.setContext(pi(n,{type:\"segment\",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),Pi(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d\u003Cu-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function Si(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Pi(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Di=Object.freeze({__proto__:null,easingEffects:Qe,isPatternOrGradient:W,color:H,getHoverColor:j,noop:$,uid:Y,isNullOrUndef:U,isArray:X,isObject:q,isFinite:K,finiteOrDefault:G,valueOrDefault:Z,toPercentage:J,toDimension:Q,callback:tt,each:et,_elementsEqual:it,clone:st,_merger:ot,merge:at,mergeIf:rt,_mergerIf:lt,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': \"'+i+'\" is deprecated. Please use \"'+s+'\" instead')},resolveObjectKey:ct,_capitalize:dt,defined:ut,isFunction:ft,setsEqual:gt,_isClickEvent:pt,toFontString:pe,_measureText:me,_longestText:be,_alignPixel:xe,clearCanvas:_e,drawPoint:ye,_isPointInArea:ve,clipArea:we,unclipArea:Me,_steppedLineTo:ke,_bezierCurveTo:Se,renderText:Pe,addRoundedRectPath:Ce,_lookup:vt,_lookupByKey:wt,_rlookupByKey:Mt,_filterBetween:kt,listenArrayEvents:Pt,unlistenArrayEvents:Dt,_arrayUnique:Ct,_createResolver:Oe,_attachContext:Ae,_descriptors:Te,_parseObjectDataRadialScale:He,splineCurve:Ue,splineCurveMonotone:Xe,_updateBezierControlPoints:Ke,_isDomSupported:ie,_getParentNode:se,getStyle:ae,getRelativePosition:he,getMaximumSize:de,retinaScale:ue,supportsEventListenerOptions:fe,readUsedSize:ge,fontString:function(t,e,i){return e+\" \"+t+\"px \"+i},requestAnimFrame:t,throttled:e,debounce:i,_toLeftRightCenter:s,_alignStartEnd:n,_textX:o,_pointInLine:ti,_steppedInterpolation:ei,_bezierInterpolation:ii,formatNumber:ni,toLineHeight:ri,_readValueToProps:li,toTRBL:hi,toTRBLCorners:ci,toPadding:di,toFont:ui,resolve:fi,_addGrace:gi,createContext:pi,PI:Ot,TAU:At,PITAU:Tt,INFINITY:Lt,RAD_PER_DEG:Rt,HALF_PI:Et,QUARTER_PI:It,TWO_THIRDS_PI:zt,log10:Ft,sign:Bt,niceNum:Vt,_factorize:Nt,isNumber:Wt,almostEquals:Ht,almostWhole:jt,_setMinAndMaxByKey:$t,toRadians:Yt,toDegrees:Ut,_decimalPlaces:Xt,getAngleFromPoint:qt,distanceBetweenPoints:Kt,_angleDiff:Gt,_normalizeAngle:Zt,_angleBetween:Jt,_limitValue:Qt,_int16Range:te,_isBetween:ee,getRtlAdapter:mi,overrideTextDirection:bi,restoreTextDirection:xi,_boundSegment:vi,_boundSegments:wi,_computeSegments:Mi});function Ci(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&\"r\"!==e&&a&&o.length){const t=r._reversePixels?Mt:wt;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n=\"function\"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Oi(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t\u003Ci;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=Ci(o[t],e,a,n);for(let t=l;t\u003C=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Ai(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;return Oi(t,i,e,(function(i,a,r){(n||ve(i,t.chartArea,0))&&i.inRange(e.x,e.y,s)&&o.push({element:i,datasetIndex:a,index:r})}),!0),o}function Ti(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.indexOf(\"x\"),i=-1!==t.indexOf(\"y\");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let l=Number.POSITIVE_INFINITY;return Oi(t,i,e,(function(i,h,c){const d=i.inRange(e.x,e.y,n);if(s&&!d)return;const u=i.getCenterPoint(n);if(!(!!o||t.isPointInArea(u))&&!d)return;const f=r(e,u);f\u003Cl?(a=[{element:i,datasetIndex:h,index:c}],l=f):f===l&&a.push({element:i,datasetIndex:h,index:c})})),a}function Li(t,e,i,s,n,o){return o||t.isPointInArea(e)?\"r\"!==i||s?Ti(t,e,i,s,n,o):function(t,e,i,s){let n=[];return Oi(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps([\"startAngle\",\"endAngle\"],s),{angle:l}=qt(t,{x:e.x,y:e.y});Jt(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function Ri(t,e,i,s,n){const o=[],a=\"x\"===i?\"inXRange\":\"inYRange\";let r=!1;return Oi(t,i,e,((t,s,l)=>{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Ei={evaluateInteractionItems:Oi,modes:{index(t,e,i,s){const n=he(e,t),o=i.axis||\"x\",a=i.includeInvisible||!1,r=i.intersect?Ai(t,n,o,s,a):Li(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=he(e,t),o=i.axis||\"xy\",a=i.includeInvisible||!1;let r=i.intersect?Ai(t,n,o,s,a):Li(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;t\u003Ci.length;++t)r.push({element:i[t],datasetIndex:e,index:t})}return r},point:(t,e,i,s)=>Ai(t,he(e,t),i.axis||\"xy\",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=he(e,t),o=i.axis||\"xy\",a=i.includeInvisible||!1;return Li(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Ri(t,he(e,t),\"x\",i.intersect,s),y:(t,e,i,s)=>Ri(t,he(e,t),\"y\",i.intersect,s)}};const Ii=[\"left\",\"top\",\"right\",\"bottom\"];function zi(t,e){return t.filter((t=>t.pos===e))}function Fi(t,e){return t.filter((t=>-1===Ii.indexOf(t.pos)&&t.box.axis===e))}function Bi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Vi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ii.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o\u003Ca;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight\u002Fl.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function Ni(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function Wi(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Hi(t,e,i,s){const{pos:n,box:o}=i,a=t.maxPadding;if(!q(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?o.height:o.width),i.size=e.size\u002Fe.count,t[n]+=i.size}o.getPadding&&Wi(a,o.getPadding());const r=Math.max(0,e.outerWidth-Ni(a,t,\"left\",\"right\")),l=Math.max(0,e.outerHeight-Ni(a,t,\"top\",\"bottom\")),h=r!==t.w,c=l!==t.h;return t.w=r,t.h=l,i.horizontal?{same:h,other:c}:{same:c,other:h}}function ji(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function $i(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o\u003Ca;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,ji(r.horizontal,e));const{same:a,other:d}=Hi(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&$i(n,e,i,s)||c}function Yi(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function Ui(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight\u002Fl.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;ut(l.start)&&(a=l.start),t.fullSize?Yi(t,n.left,a,i.outerWidth-n.right-n.left,o):Yi(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;ut(l.start)&&(o=l.start),t.fullSize?Yi(t,o,n.top,a,i.outerHeight-n.bottom-n.top):Yi(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}yt.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});var Xi={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||\"top\",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=di(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i\u003Cs;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=Bi(e.filter((t=>t.box.fullSize)),!0),s=Bi(zi(e,\"left\"),!0),n=Bi(zi(e,\"right\")),o=Bi(zi(e,\"top\"),!0),a=Bi(zi(e,\"bottom\")),r=Fi(e,\"x\"),l=Fi(e,\"y\");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:zi(e,\"chartArea\"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;et(t.boxes,(t=>{\"function\"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o\u002F2\u002Fc,hBoxMaxHeight:a\u002F2}),u=Object.assign({},n);Wi(u,di(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Vi(l.concat(h),d);$i(r.fullSize,f,d,g),$i(l,f,d,g),$i(h,f,d,g)&&$i(l,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i(\"top\"),t.x+=i(\"left\"),i(\"right\"),i(\"bottom\")}(f),Ui(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Ui(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},et(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class qi{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e\u002Fs):i)}}isAttached(t){return!0}updateConfig(t){}}class Ki extends qi{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}updateConfig(t){t.options.animation=!1}}const Gi={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},Zi=t=>null===t||\"\"===t;const Ji=!!fe&&{passive:!0};function Qi(t,e,i){t.canvas.removeEventListener(e,i,Ji)}function ts(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function es(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ts(i.addedNodes,s),e=e&&!ts(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function is(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ts(i.removedNodes,s),e=e&&!ts(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const ss=new Map;let ns=0;function os(){const t=window.devicePixelRatio;t!==ns&&(ns=t,ss.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function as(t,i,s){const n=t.canvas,o=n&&se(n);if(!o)return;const a=e(((t,e)=>{const i=o.clientWidth;s(t,e),i\u003Co.clientWidth&&s()}),window),r=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){ss.size||window.addEventListener(\"resize\",os),ss.set(t,e)}(t,a),r}function rs(t,e,i){i&&i.disconnect(),\"resize\"===e&&function(t){ss.delete(t),ss.size||window.removeEventListener(\"resize\",os)}(t)}function ls(t,i,s){const n=t.canvas,o=e((e=>{null!==t.ctx&&s(function(t,e){const i=Gi[t.type]||t.type,{x:s,y:n}=he(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Ji)}(n,i,o),o}class hs extends qi{acquireContext(t,e){const i=t&&t.getContext&&t.getContext(\"2d\");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute(\"height\"),n=t.getAttribute(\"width\");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||\"block\",i.boxSizing=i.boxSizing||\"border-box\",Zi(n)){const e=ge(t,\"width\");void 0!==e&&(t.width=e)}if(Zi(s))if(\"\"===t.style.height)t.height=t.width\u002F(e||2);else{const e=ge(t,\"height\");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;[\"height\",\"width\"].forEach((t=>{const s=i[t];U(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:es,detach:is,resize:as}[e]||ls;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:rs,detach:rs,resize:rs}[e]||Qi)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return de(t,e,i,s)}isAttached(t){const e=se(t);return!(!e||!e.isConnected)}}function cs(t){return!ie()||\"undefined\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Ki:hs}var ds=Object.freeze({__proto__:null,_detectPlatform:cs,BasePlatform:qi,BasicPlatform:Ki,DomPlatform:hs});const us=\"transparent\",fs={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=H(t||us),n=s.valid&&H(e||us);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class gs{constructor(t,e,i,s){const n=e[i];s=fi([t.to,s,n,t.from]);const o=fi([t.from,n,s]);this._active=!0,this._fn=t.fn||fs[t.type||typeof o],this._easing=Qe[t.easing]||Qe.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=fi([t.to,e,s,t.from]),this._from=fi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e\u003Ci),!this._active)return this._target[s]=a,void this._notify(!0);e\u003C0?this._target[s]=n:(r=e\u002Fi%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?\"res\":\"rej\",i=this._promises||[];for(let t=0;t\u003Ci.length;t++)i[t][e]()}}yt.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const ps=Object.keys(yt.animation);yt.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>\"onProgress\"!==t&&\"onComplete\"!==t&&\"fn\"!==t}),yt.set(\"animations\",{colors:{type:\"color\",properties:[\"color\",\"borderColor\",\"backgroundColor\"]},numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"]}}),yt.describe(\"animations\",{_fallback:\"animation\"}),yt.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>0|t}}}});class ms{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!q(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!q(s))return;const n={};for(const t of ps)n[t]=s[t];(X(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e\u003Cs.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if(\"$\"===l.charAt(0))continue;if(\"options\"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new gs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function bs(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function xs(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n\u003Co;++n)i.push(s[n].index);return i}function _s(t,e,i,s={}){const n=t.keys,o=\"single\"===s.mode;let a,r,l,h;if(null!==e){for(a=0,r=n.length;a\u003Cr;++a){if(l=+n[a],l===i){if(s.all)continue;break}h=t.values[l],K(h)&&(o||0===e||Bt(e)===Bt(h))&&(e+=h)}return e}}function ys(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function vs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function ws(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e\u003C0)return n.index}return null}function Ms(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t\u003Cd;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=vs(n,c,o),u[r]=d,u._top=ws(u,a,!0,s.type),u._bottom=ws(u,a,!1,s.type)}}function ks(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ss(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const Ps=t=>\"reset\"===t||\"none\"===t,Ds=(t,e)=>e?t:Object.assign({},t);class Cs{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ys(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ss(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>\"x\"===t?e:\"r\"===t?s:i,n=e.xAxisID=Z(i.xAxisID,ks(t,\"x\")),o=e.yAxisID=Z(i.yAxisID,ks(t,\"y\")),a=e.rAxisID=Z(i.rAxisID,ks(t,\"r\")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){const t=this._cachedMeta;this._data&&Dt(this._data,this),t._stacked&&Ss(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(q(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s\u003Cn;++s)o=e[s],i[s]={x:o,y:t[o]};return i}(e);else if(i!==e){if(i){Dt(i,this);const t=this._cachedMeta;Ss(t),t._parsed=[]}e&&Object.isExtensible(e)&&Pt(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=ys(e.vScale,e),e.stack!==i.stack&&(s=!0,Ss(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Ms(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,l,h,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=X(s[t])?this.parseArrayData(i,s,t,e):q(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]\u003Cd[a];for(r=0;r\u003Ce;++r)i._parsed[r+t]=l=h[r],c&&(n()&&(c=!1),d=l);i._sorted=c}o&&Ms(this,h)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d\u003Cu;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r\u003Cl;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h\u003Cc;++h)d=h+i,u=e[d],l[h]={x:n.parse(ct(u,a),d),y:o.parse(ct(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return _s({keys:xs(s,!0),values:e._stacks[t.axis]},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=_s(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,o=s.length,a=this._getOtherScale(t),r=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:xs(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!K(u[t.axis])||h>e||c\u003Ce}for(d=0;d\u003Co&&(f()||(this.updateRangeFromParsed(l,t,u,r),!n));++d);if(n)for(d=o-1;d>=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s\u003Cn;++s)o=e[s][t.axis],K(o)&&i.push(o);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?\"\"+i.getLabelForValue(n[i.axis]):\"\",value:s?\"\"+s.getLabelForValue(n[s.axis]):\"\"}}_update(t){const e=this._cachedMeta;this.update(t||\"default\"),e._clip=function(t){let e,i,s,n;return q(t)?(e=t.top,i=t.right,s=t.bottom,n=t.left):e=i=s=n=t,{top:e,right:i,bottom:s,left:n,disabled:!1===t}}(Z(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=bs(t,i),n=bs(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h\u003Ca+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h\u003Co.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?\"active\":\"default\";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t\u003Cthis._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return pi(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:\"default\",type:\"data\"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return pi(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:\"default\",type:\"dataset\"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",i){const s=\"active\"===e,n=this._cachedDataOpts,o=t+\"-\"+e,a=n[o],r=this.enableOptionSharing&&ut(i);if(a)return Ds(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,\"hover\",t,\"\"]:[t,\"\"],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(yt.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ds(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new ms(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ps(t)||this.chart._animationsDisabled}updateElement(t,e,i,s){Ps(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ps(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n\u003Cs&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a\u003Co;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,\"reset\")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Ss(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync([\"_insertElements\",this.getDataset().data.length-t,t])}_onDataPop(){this._sync([\"_removeElements\",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync([\"_removeElements\",0,1])}_onDataSplice(t,e){e&&this._sync([\"_removeElements\",t,e]);const i=arguments.length-2;i&&this._sync([\"_insertElements\",t,i])}_onDataUnshift(){this._sync([\"_insertElements\",0,arguments.length])}}Cs.defaults={},Cs.prototype.datasetElementType=null,Cs.prototype.dataElementType=null;class Os{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}hasValue(){return Wt(this.x)&&Wt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Os.defaults={},Os.defaultRoutes=void 0;const As={values:t=>X(t)?t:\"\"+t,numeric(t,e,i){if(0===t)return\"0\";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e\u003C1e-4||e>1e15)&&(n=\"scientific\"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Ft(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ni(t,s,l)},logarithmic(t,e,i){if(0===t)return\"0\";const s=t\u002FMath.pow(10,Math.floor(Ft(t)));return 1===s||2===s||5===s?As.numeric.call(this,t,e,i):\"\"}};var Ts={formatters:As};function Ls(t,e){const i=t.options.ticks,s=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length\u002Fi+(e?0:1),n=t._maxLength\u002Fi;return Math.floor(Math.min(s,n))}(t),n=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i\u003Cs;i++)t[i].major&&e.push(i);return e}(e):[],o=n.length,a=n[0],r=n[o-1],l=[];if(o>s)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n\u003Ct.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,l,n,o\u002Fs),l;const h=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e\u003C2)return!1;for(s=t[0],i=1;i\u003Ce;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length\u002Fi;if(!s)return Math.max(n,1);const o=Nt(s);for(let t=0,e=o.length-1;t\u003Ce;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(n,e,s);if(o>0){let t,i;const s=o>1?Math.round((r-a)\u002F(o-1)):null;for(Rs(e,l,h,U(s)?0:a-s,a),t=0,i=o-1;t\u003Ci;t++)Rs(e,l,h,n[t],n[t+1]);return Rs(e,l,h,r,U(s)?e.length:r+s),l}return Rs(e,l,h),l}function Rs(t,e,i,s,n){const o=Z(s,0),a=Math.min(Z(n,t.length),t.length);let r,l,h,c=0;for(i=Math.ceil(i),n&&(r=n-s,i=r\u002FMath.floor(r\u002Fi)),h=o;h\u003C0;)c++,h=Math.round(o+c*i);for(l=Math.max(o,0);l\u003Ca;l++)l===h&&(e.push(t[l]),c++,h=Math.round(o+c*i))}yt.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Ts.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),yt.route(\"scale.ticks\",\"color\",\"\",\"color\"),yt.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),yt.route(\"scale.grid\",\"borderColor\",\"\",\"borderColor\"),yt.route(\"scale.title\",\"color\",\"\",\"color\"),yt.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&\"callback\"!==t&&\"parser\"!==t,_indexable:t=>\"borderDash\"!==t&&\"tickBorderDash\"!==t}),yt.describe(\"scales\",{_fallback:\"scale\"}),yt.describe(\"scale.ticks\",{_scriptable:t=>\"backdropPadding\"!==t&&\"callback\"!==t,_indexable:t=>\"backdropPadding\"!==t});const Es=(t,e,i)=>\"top\"===e||\"left\"===e?t[e]+i:t[e]-i;function Is(t,e){const i=[],s=t.length\u002Fe,n=t.length;let o=0;for(;o\u003Cn;o+=s)i.push(t[Math.floor(o)]);return i}function zs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)\u002F2:(h-t.getPixelForTick(n-1))\u002F2,h+=n\u003Ce?l:-l,h\u003Co-r||h>a+r)))return h}function Fs(t){return t.drawTicks?t.tickLength:0}function Bs(t,e){if(!t.display)return 0;const i=ui(t.font,e),s=di(t.padding);return(X(t.text)?t.text.length:1)*i.lineHeight+s.height}function Vs(t,e,i){let n=s(t);return(i&&\"right\"!==e||!i&&\"right\"===e)&&(n=(t=>\"left\"===t?\"right\":\"right\"===t?\"left\":t)(n)),n}class Ns extends Os{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=G(t,Number.POSITIVE_INFINITY),e=G(e,Number.NEGATIVE_INFINITY),i=G(i,Number.POSITIVE_INFINITY),s=G(s,Number.NEGATIVE_INFINITY),{min:G(t,i),max:G(e,s),minDefined:K(t),maxDefined:K(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;r\u003Cl;++r)e=a[r].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:G(i,G(s,i)),max:G(s,G(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){tt(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=gi(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a\u003Cthis.ticks.length;this._convertTicksToLabels(r?Is(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||\"auto\"===o.source)&&(this.ticks=Ls(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){tt(this.options.afterUpdate,[this])}beforeSetDimensions(){tt(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){tt(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),tt(this.options[t],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){tt(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i\u003Cs;i++)n=t[i],n.label=tt(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){tt(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){tt(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=this.ticks.length,s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i\u003C=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Qt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth\u002Fi:u\u002F(i-1),c+6>o&&(o=u\u002F(i-(t.offset?.5:1)),a=this.maxHeight-Fs(t.grid)-e.padding-Bs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Ut(Math.min(Math.asin(Qt((h.highest.height+6)\u002Fo,-1,1)),Math.asin(Qt(a\u002Fr,-1,1))-Math.asin(Qt(d\u002Fr,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){tt(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){tt(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Bs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Fs(n)+o):(t.height=this.maxHeight,t.width=Fs(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=Yt(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l=\"top\"!==a&&\"x\"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):\"start\"===n?d=e.width:\"end\"===n?c=t.width:\"inner\"!==n&&(c=t.width\u002F2,d=e.width\u002F2),this.paddingLeft=Math.max((c-a+o)*this.width\u002F(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width\u002F(this.width-h),0)}else{let i=e.height\u002F2,s=t.height\u002F2;\"start\"===n?(i=0,s=t.height):\"end\"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){tt(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return\"top\"===e||\"bottom\"===e||\"x\"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e\u003Ci;e++)U(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e\u003Ci.length&&(i=Is(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length)}return t}_computeLabelSizes(t,e){const{ctx:i,_longestTextCache:s}=this,n=[],o=[];let a,r,l,h,c,d,u,f,g,p,m,b=0,x=0;for(a=0;a\u003Ce;++a){if(h=t[a].label,c=this._resolveTickFontOptions(a),i.font=d=c.string,u=s[d]=s[d]||{data:{},gc:[]},f=c.lineHeight,g=p=0,U(h)||X(h)){if(X(h))for(r=0,l=h.length;r\u003Cl;++r)m=h[r],U(m)||X(m)||(g=me(i,u.data,u.gc,g,m),p+=f)}else g=me(i,u.data,u.gc,g,h),p=f;n.push(g),o.push(p),b=Math.max(g,b),x=Math.max(p,x)}!function(t,e){et(t,(t=>{const i=t.gc,s=i.length\u002F2;let n;if(s>e){for(n=0;n\u003Cs;++n)delete t.data[i[n]];i.splice(0,s)}}))}(s,e);const _=n.indexOf(b),y=o.indexOf(x),v=t=>({width:n[t]||0,height:o[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return te(this._alignToPixels?xe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)\u002Fthis._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t\u003C0&&e\u003C0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t\u003Ce.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return pi(t,{tick:i,index:e,type:\"tick\"})}(this.getContext(),t,i))}return this.$context||(this.$context=pi(this.chart.getContext(),{scale:this,type:\"scale\"}))}_tickSize(){const t=this.options.ticks,e=Yt(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a\u002Fi:r\u002Fs:r*s\u003Ca*i?r\u002Fi:a\u002Fs}_isVisible(){const t=this.options.display;return\"auto\"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,r=this.isHorizontal(),l=this.ticks.length+(a?1:0),h=Fs(n),c=[],d=n.setContext(this.getContext()),u=d.drawBorder?d.borderWidth:0,f=u\u002F2,g=function(t){return xe(i,t,u)};let p,m,b,x,_,y,v,w,M,k,S,P;if(\"top\"===o)p=g(this.bottom),y=this.bottom-h,w=p-f,k=g(t.top)+f,P=t.bottom;else if(\"bottom\"===o)p=g(this.top),k=t.top,P=g(t.bottom)-f,y=p+f,w=this.top+h;else if(\"left\"===o)p=g(this.right),_=this.right-h,v=p-f,M=g(t.left)+f,S=t.right;else if(\"right\"===o)p=g(this.left),M=t.left,S=g(t.right)-f,_=p+f,v=this.left+h;else if(\"x\"===e){if(\"center\"===o)p=g((t.top+t.bottom)\u002F2+.5);else if(q(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}k=t.top,P=t.bottom,y=p+f,w=y+h}else if(\"y\"===e){if(\"center\"===o)p=g((t.left+t.right)\u002F2);else if(q(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}_=p-f,v=_-h,M=t.left,S=t.right}const D=Z(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l\u002FD));for(m=0;m\u003Cl;m+=C){const t=n.setContext(this.getContext(m)),e=t.lineWidth,s=t.color,o=n.borderDash||[],l=t.borderDashOffset,h=t.tickWidth,d=t.tickColor,u=t.tickBorderDash||[],f=t.tickBorderDashOffset;b=zs(this,m,a),void 0!==b&&(x=xe(i,b,e),r?_=v=M=S=x:y=w=k=P=x,c.push({tx1:_,ty1:y,tx2:v,ty2:w,x1:M,y1:k,x2:S,y2:P,width:e,color:s,borderDash:o,borderDashOffset:l,tickWidth:h,tickColor:d,tickBorderDash:u,tickBorderDashOffset:f}))}return this._ticksLength=l,this._borderValue=p,c}_computeLabelItems(t){const e=this.axis,i=this.options,{position:s,ticks:n}=i,o=this.isHorizontal(),a=this.ticks,{align:r,crossAlign:l,padding:h,mirror:c}=n,d=Fs(i.grid),u=d+h,f=c?-h:u,g=-Yt(this.labelRotation),p=[];let m,b,x,_,y,v,w,M,k,S,P,D,C=\"middle\";if(\"top\"===s)v=this.bottom-f,w=this._getXAxisLabelAlignment();else if(\"bottom\"===s)v=this.top+f,w=this._getXAxisLabelAlignment();else if(\"left\"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if(\"right\"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if(\"x\"===e){if(\"center\"===s)v=(t.top+t.bottom)\u002F2+u;else if(q(s)){const t=Object.keys(s)[0],e=s[t];v=this.chart.scales[t].getPixelForValue(e)+u}w=this._getXAxisLabelAlignment()}else if(\"y\"===e){if(\"center\"===s)y=(t.left+t.right)\u002F2-u;else if(q(s)){const t=Object.keys(s)[0],e=s[t];y=this.chart.scales[t].getPixelForValue(e)}w=this._getYAxisLabelAlignment(d).textAlign}\"y\"===e&&(\"start\"===r?C=\"top\":\"end\"===r&&(C=\"bottom\"));const O=this._getLabelSizes();for(m=0,b=a.length;m\u003Cb;++m){x=a[m],_=x.label;const t=n.setContext(this.getContext(m));M=this.getPixelForTick(m)+n.labelOffset,k=this._resolveTickFontOptions(m),S=k.lineHeight,P=X(_)?_.length:1;const e=P\u002F2,i=t.color,r=t.textStrokeColor,h=t.textStrokeWidth;let d,u=w;if(o?(y=M,\"inner\"===w&&(u=m===b-1?this.options.reverse?\"left\":\"right\":0===m?this.options.reverse?\"right\":\"left\":\"center\"),D=\"top\"===s?\"near\"===l||0!==g?-P*S+S\u002F2:\"center\"===l?-O.highest.height\u002F2-e*S+S:-O.highest.height+S\u002F2:\"near\"===l||0!==g?S\u002F2:\"center\"===l?O.highest.height\u002F2-e*S:O.highest.height-P*S,c&&(D*=-1)):(v=M,D=(1-P)*S\u002F2),t.showLabelBackdrop){const e=di(t.backdropPadding),i=O.heights[m],s=O.widths[m];let n=v+D-e.top,o=y-e.left;switch(C){case\"middle\":n-=i\u002F2;break;case\"bottom\":n-=i}switch(w){case\"center\":o-=s\u002F2;break;case\"right\":o-=s}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}p.push({rotation:g,label:_,font:k,color:i,strokeColor:r,strokeWidth:h,textOffset:D,textAlign:u,textBaseline:C,translation:[y,v],backdrop:d})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-Yt(this.labelRotation))return\"top\"===t?\"left\":\"right\";let i=\"center\";return\"start\"===e.align?i=\"left\":\"end\"===e.align?i=\"right\":\"inner\"===e.align&&(i=\"inner\"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return\"left\"===e?s?(l=this.right+n,\"near\"===i?r=\"left\":\"center\"===i?(r=\"center\",l+=a\u002F2):(r=\"right\",l+=a)):(l=this.right-o,\"near\"===i?r=\"right\":\"center\"===i?(r=\"center\",l-=a\u002F2):(r=\"left\",l=this.left)):\"right\"===e?s?(l=this.left+n,\"near\"===i?r=\"right\":\"center\"===i?(r=\"center\",l-=a\u002F2):(r=\"left\",l-=a)):(l=this.left+o,\"near\"===i?r=\"left\":\"center\"===i?(r=\"center\",l+=a\u002F2):(r=\"right\",l=this.right)):r=\"right\",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return\"left\"===e||\"right\"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:\"top\"===e||\"bottom\"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n\u003Co;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{grid:i}}=this,s=i.setContext(this.getContext()),n=i.drawBorder?s.borderWidth:0;if(!n)return;const o=i.setContext(this.getContext(0)).lineWidth,a=this._borderValue;let r,l,h,c;this.isHorizontal()?(r=xe(t,this.left,n)-n\u002F2,l=xe(t,this.right,o)+o\u002F2,h=c=a):(h=xe(t,this.top,n)-n\u002F2,c=xe(t,this.bottom,o)+o\u002F2,r=l=a),e.save(),e.lineWidth=s.borderWidth,e.strokeStyle=s.borderColor,e.beginPath(),e.moveTo(r,h),e.lineTo(l,c),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&we(e,i);const s=this._labelItems||(this._labelItems=this._computeLabelItems(t));let n,o;for(n=0,o=s.length;n\u003Co;++n){const t=s[n],i=t.font,o=t.label;t.backdrop&&(e.fillStyle=t.backdrop.color,e.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),Pe(e,o,0,t.textOffset,i,t)}i&&Me(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;if(!i.display)return;const o=ui(i.font),a=di(i.padding),r=i.align;let l=o.lineHeight\u002F2;\"bottom\"===e||\"center\"===e||q(e)?(l+=a.bottom,X(i.text)&&(l+=o.lineHeight*(i.text.length-1))):l+=a.top;const{titleX:h,titleY:c,maxWidth:d,rotation:u}=function(t,e,i,s){const{top:o,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-o,b=l-a;if(t.isHorizontal()){if(f=n(s,a,l),q(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g=\"center\"===i?(c.bottom+c.top)\u002F2+m-e:Es(t,i,e);u=l-a}else{if(q(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-b+e}else f=\"center\"===i?(c.left+c.right)\u002F2-b+e:Es(t,i,e);g=n(s,r,o),p=\"left\"===i?-Et:Et}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,l,e,r);Pe(t,i.text,0,0,o,{color:i.color,maxWidth:d,rotation:u,textAlign:Vs(r,e,s),textBaseline:\"middle\",translation:[h,c]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=Z(t.grid&&t.grid.z,-1);return this._isVisible()&&this.draw===Ns.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+\"AxisID\",s=[];let n,o;for(n=0,o=e.length;n\u003Co;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return ui(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)\u002Ft}}class Ws{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return\"id\"in t&&\"defaults\"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+\".\"+n;if(!n)throw new Error(\"class does not have id: \"+t);return n in s||(s[n]=t,function(t,e,i){const s=at(Object.create(null),[i?yt.get(i):{},yt.get(e),t.defaults]);yt.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split(\".\"),n=s.pop(),o=[t].concat(s).join(\".\"),a=e[i].split(\".\"),r=a.pop(),l=a.join(\".\");yt.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&yt.describe(e,t.descriptors)}(t,o,i),this.override&&yt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in yt[s]&&(delete yt[s][i],this.override&&delete mt[i])}}var Hs=new class{constructor(){this.controllers=new Ws(Cs,\"datasets\",!0),this.elements=new Ws(Os,\"elements\"),this.plugins=new Ws(Object,\"plugins\"),this.scales=new Ws(Ns,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):et(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=dt(t);tt(i[\"before\"+s],[],i),e[t](i),tt(i[\"after\"+s],[],i)}_getRegistryForType(t){for(let e=0;e\u003Cthis._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('\"'+t+'\" is not a registered '+i+\".\");return s}};class js{constructor(){this._init=[]}notify(t,e,i,s){\"beforeInit\"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,\"install\"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return\"afterDestroy\"===e&&(this._notify(n,t,\"stop\"),this._notify(this._init,t,\"uninstall\")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===tt(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){U(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=Z(i.options&&i.options.plugins,{}),n=function(t){const e=[],i=Object.keys(Hs.plugins.items);for(let t=0;t\u003Ci.length;t++)e.push(Hs.getPlugin(i[t]));const s=t.plugins||[];for(let t=0;t\u003Cs.length;t++){const i=s[t];-1===e.indexOf(i)&&e.push(i)}return e}(i);return!1!==s||e?function(t,e,i,s){const n=[],o=t.getContext();for(let a=0;a\u003Ce.length;a++){const r=e[a],l=$s(i[r.id],s);null!==l&&n.push({plugin:r,options:Ys(t.config,r,l,o)})}return n}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,\"stop\"),this._notify(s(i,e),t,\"start\")}}function $s(t,e){return e||!1!==t?!0===t?{}:t:null}function Ys(t,e,i,s){const n=t.pluginScopeKeys(e),o=t.getOptionScopes(i,n);return t.createResolver(o,s,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function Us(t,e){const i=yt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||\"x\"}function Xs(t,e){return\"x\"===t||\"y\"===t?t:e.axis||(\"top\"===(i=e.position)||\"bottom\"===i?\"x\":\"left\"===i||\"right\"===i?\"y\":void 0)||t.charAt(0).toLowerCase();var i}function qs(t){const e=t.options||(t.options={});e.plugins=Z(e.plugins,{}),e.scales=function(t,e){const i=mt[t.type]||{scales:{}},s=e.scales||{},n=Us(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!q(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=Xs(t,e),l=function(t,e){return t===e?\"_index_\":\"_value_\"}(r,n),h=i.scales||{};o[r]=o[r]||t,a[t]=rt(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||Us(n,e),l=(mt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return\"_index_\"===t?i=e:\"_value_\"===t&&(i=\"x\"===e?\"y\":\"x\"),i}(t,r),n=i[e+\"AxisID\"]||o[e]||e;a[n]=a[n]||Object.create(null),rt(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];rt(e,[yt.scales[e.type],yt.scale])})),a}(t,e)}function Ks(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Gs=new Map,Zs=new Set;function Js(t,e){let i=Gs.get(t);return i||(i=e(),Gs.set(t,i),Zs.add(i)),i}const Qs=(t,e,i)=>{const s=ct(e,i);void 0!==s&&t.add(s)};class tn{constructor(t){this._config=function(t){return(t=t||{}).data=Ks(t.data),qs(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Ks(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),qs(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Js(t,(()=>[[`datasets.${t}`,\"\"]]))}datasetAnimationScopeKeys(t,e){return Js(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,\"\"]]))}datasetElementScopeKeys(t,e){return Js(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,\"\"]]))}pluginScopeKeys(t){const e=t.id;return Js(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Qs(r,t,e)))),e.forEach((t=>Qs(r,s,t))),e.forEach((t=>Qs(r,mt[n]||{},t))),e.forEach((t=>Qs(r,yt,t))),e.forEach((t=>Qs(r,bt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Zs.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,mt[e]||{},yt.datasets[e]||{},{type:e},yt,bt]}resolveNamedOptions(t,e,i,s=[\"\"]){const n={$shared:!0},{resolver:o,subPrefixes:a}=en(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=Te(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(ft(a)||sn(a))||o&&X(a))return!0}return!1}(o,e)){n.$shared=!1;r=Ae(o,i=ft(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[\"\"],s){const{resolver:n}=en(this._resolverCache,t,i);return q(e)?Ae(n,e,void 0,s):n}}function en(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Oe(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes(\"hover\")))},s.set(n,o)}return o}const sn=t=>q(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||ft(t[i])),!1);const nn=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function on(t,e){return\"top\"===t||\"bottom\"===t||-1===nn.indexOf(t)&&\"x\"===e}function an(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function rn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins(\"afterRender\"),tt(i&&i.onComplete,[t],e)}function ln(t){const e=t.chart,i=e.options.animation;tt(i&&i.onProgress,[t],e)}function hn(t){return ie()&&\"string\"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const cn={},dn=t=>{const e=hn(t);return Object.values(cn).filter((t=>t.canvas===e)).pop()};function un(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class fn{constructor(t,e){const s=this.config=new tn(e),n=hn(t),o=dn(n);if(o)throw new Error(\"Canvas is already in use. Chart with ID '\"+o.id+\"' must be destroyed before the canvas can be reused.\");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||cs(n)),this.platform.updateConfig(s);const l=this.platform.acquireContext(n,r.aspectRatio),h=l&&l.canvas,c=h&&h.height,d=h&&h.width;this.id=Y(),this.ctx=l,this.canvas=h,this.width=d,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new js,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],cn[this.id]=this,l&&h?(a.listen(this,\"complete\",rn),a.listen(this,\"progress\",ln),this._initialize(),this.attached&&this.update()):console.error(\"Failed to create chart: can't acquire context from the given item\")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return U(t)?e&&n?n:s?i\u002Fs:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins(\"beforeInit\"),this.options.responsive?this.resize():ue(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(\"afterInit\"),this}clear(){return _e(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?\"resize\":\"attach\";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ue(this,a,!0)&&(this.notifyPlugins(\"resize\",{size:o}),tt(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){et(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Xs(t,i),n=\"r\"===s,o=\"x\"===s;return{options:i,dposition:n?\"chartArea\":o?\"bottom\":\"left\",dtype:n?\"radialLinear\":o?\"category\":\"linear\"}})))),et(n,(e=>{const n=e.options,o=n.id,a=Xs(o,n),r=Z(n.type,e.dtype);void 0!==n.position&&on(n.position,a)===on(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;if(o in i&&i[o].type===r)l=i[o];else{l=new(Hs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l}l.init(n,t)})),et(s,((t,e)=>{t||delete i[e]})),et(i,(t=>{Xi.configure(this,t,t.options),Xi.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t\u003Ci;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(an(\"order\",\"index\"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i\u003Cs;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||Us(o,this.options),n.order=s.order||0,n.index=i,n.label=\"\"+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=Hs.getController(o),{datasetElementType:s,dataElementType:a}=yt.datasets[o];Object.assign(e.prototype,{dataElementType:Hs.getElement(a),datasetElementType:s&&Hs.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){et(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins(\"beforeElementsUpdate\");let o=0;for(let t=0,e=this.data.datasets.length;t\u003Ce;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||et(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins(\"afterUpdate\",{mode:t}),this._layers.sort(an(\"z\",\"_idx\"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){et(this.scales,(t=>{Xi.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);gt(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){un(t,s,\"_removeElements\"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+\",\"+t.splice(1).join(\",\")))),s=i(0);for(let t=1;t\u003Ce;t++)if(!gt(s,i(t)))return;return Array.from(s).map((t=>t.split(\",\"))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins(\"beforeLayout\",{cancelable:!0}))return;Xi.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width\u003C=0||e.height\u003C=0;this._layers=[],et(this.boxes,(t=>{i&&\"chartArea\"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins(\"afterLayout\")}_updateDatasets(t){if(!1!==this.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t\u003Ce;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e\u003Ci;++e)this._updateDataset(e,ft(t)?t({datasetIndex:e}):t);this.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins(\"beforeDatasetUpdate\",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins(\"afterDatasetUpdate\",s))}render(){!1!==this.notifyPlugins(\"beforeRender\",{cancelable:!0})&&(a.has(this)?this.attached&&!a.running(this)&&a.start(this):(this.draw(),rn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resize(t,e),this._resizeBeforeDraw=null}if(this.clear(),this.width\u003C=0||this.height\u003C=0)return;if(!1===this.notifyPlugins(\"beforeDraw\",{cancelable:!0}))return;const e=this._layers;for(t=0;t\u003Ce.length&&e[t].z\u003C=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t\u003Ce.length;++t)e[t].draw(this.chartArea);this.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s\u003Cn;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins(\"beforeDatasetDraw\",o)&&(s&&we(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&Me(e),o.cancelable=!1,this.notifyPlugins(\"afterDatasetDraw\",o))}isPointInArea(t){return ve(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Ei.modes[e];return\"function\"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=pi(null,{chart:this,type:\"chart\"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return\"boolean\"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?\"show\":\"hide\",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);ut(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),a.remove(this),t=0,e=this.data.datasets.length;t\u003Ce;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins(\"beforeDestroy\");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),_e(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),this.notifyPlugins(\"destroy\"),delete cn[this.id],this.notifyPlugins(\"afterDestroy\")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};et(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s(\"attach\",a),this.attached=!0,this.resize(),i(\"resize\",n),i(\"detach\",o)};o=()=>{this.attached=!1,s(\"resize\",n),this._stop(),this._resize(0,0),i(\"attach\",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){et(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},et(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?\"set\":\"remove\";let n,o,a,r;for(\"dataset\"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller[\"_\"+s+\"DatasetHoverStyle\"]()),a=0,r=t.length;a\u003Cr;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+\"HoverStyle\"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error(\"No dataset found at index \"+t);return{datasetIndex:t,element:i.data[e],index:e}}));!it(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins(\"beforeEvent\",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins(\"afterEvent\",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=pt(t),l=function(t,e,i,s){return i&&\"mouseout\"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,tt(n.onHover,[t,a,this],this),r&&tt(n.onClick,[t,a,this],this));const h=!it(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if(\"mouseout\"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const gn=()=>et(fn.instances,(t=>t._plugins.invalidate())),pn=!0;function mn(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}Object.defineProperties(fn,{defaults:{enumerable:pn,value:yt},instances:{enumerable:pn,value:cn},overrides:{enumerable:pn,value:mt},registry:{enumerable:pn,value:Hs},version:{enumerable:pn,value:\"3.8.0\"},getChart:{enumerable:pn,value:dn},register:{enumerable:pn,value:(...t)=>{Hs.add(...t),gn()}},unregister:{enumerable:pn,value:(...t)=>{Hs.remove(...t),gn()}}});class bn{constructor(t){this.options=t||{}}formats(){return mn()}parse(t,e){return mn()}format(t,e){return mn()}add(t,e,i){return mn()}diff(t,e,i){return mn()}startOf(t,e,i){return mn()}endOf(t,e){return mn()}}bn.override=function(t){Object.assign(bn.prototype,t)};var xn={_date:bn};function _n(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e\u003Cn;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=Ct(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(ut(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s\u003Cn;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s\u003Cn;++s)o=e.getPixelForTick(s),l();return r}function yn(t,e,i,s){return X(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function vn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h\u003Cc;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(yn(u,d,o,h));return l}function wn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function Mn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i=\"left\",s=\"right\"):(e=t.base\u003Ct.y,i=\"bottom\",s=\"top\"),e?(n=\"end\",o=\"start\"):(n=\"start\",o=\"end\"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);\"middle\"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[kn(c,a,r,l)]=!0,n=h)),o[kn(n,a,r,l)]=!0,t.borderSkipped=o}function kn(t,e,i,s){var n,o,a;return s?(a=i,t=Sn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Sn(t,e,i),t}function Sn(t,e,i){return\"start\"===t?e:\"end\"===t?i:t}function Pn(t,{inflateAmount:e},i){t.inflateAmount=\"auto\"===e?1===i?.33:0:e}class Dn extends Cs{parsePrimitiveData(t,e,i,s){return vn(t,e,i,s)}parseArrayData(t,e,i,s){return vn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=\"x\"===n.axis?a:r,h=\"x\"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d\u003Cu;++d)g=e[d],f={},f[n.axis]=n.parse(ct(g,l),d),c.push(yn(ct(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=wn(o)?\"[\"+o.start+\", \"+o.end+\"]\":\"\"+s.getLabelForValue(n[s.axis]);return{label:\"\"+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{index:o,_cachedMeta:{vScale:a}}=this,r=a.getBasePixel(),l=a.isHorizontal(),h=this._getRuler(),c=this.resolveDataElementOptions(e,s),d=this.getSharedOptions(c),u=this.includeOptions(s,d);this.updateSharedOptions(d,s,c);for(let c=e;c\u003Ce+i;c++){const e=this.getParsed(c),i=n||U(e[a.axis])?{base:r,head:r}:this._calculateBarValuePixels(c),f=this._calculateBarIndexPixels(c,h),g=(e._stacks||{})[a.axis],p={horizontal:l,base:i.base,enableBorderRadius:!g||wn(e._custom)||o===g._top||o===g._bottom,x:l?i.head:f.center,y:l?f.center:i.head,height:l?f.size:Math.abs(i.size),width:l?Math.abs(i.size):f.size};u&&(p.options=d||this.resolveDataElementOptions(c,t[c].active?\"active\":s));const m=p.options||t[c].options;Mn(p,m,g,o),Pn(p,m,h.ratio),this.updateElement(t[c],c,p,s)}}_getStacks(t,e){const i=this._cachedMeta.iScale,s=i.getMatchingVisibleMetas(this._type),n=i.options.stacked,o=s.length,a=[];let r,l;for(r=0;r\u003Co;++r)if(l=s[r],l.controller.options.grouped){if(void 0!==e){const t=l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];if(U(t)||isNaN(t))continue}if((!1===n||-1===a.indexOf(l.stack)||void 0===n&&void 0===l.stack)&&a.push(l.stack),l.index===t)break}return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n\u003Co;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||_n(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i},options:{base:s,minBarLength:n}}=this,o=s||0,a=this.getParsed(t),r=a._custom,l=wn(r);let h,c,d=a[e.axis],u=0,f=i?this.applyStack(e,a,i):d;f!==d&&(u=f-d,f=d),l&&(d=r.barStart,f=r.barEnd-r.barStart,0!==d&&Bt(d)!==Bt(r.barEnd)&&(u=0),u+=d);const g=U(s)||l?u:s;let p=e.getPixelForValue(g);if(h=this.chart.getDataVisibility(t)?e.getPixelForValue(u+f):p,c=h-p,Math.abs(c)\u003Cn){c=function(t,e,i){return 0!==t?Bt(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(c,e,o)*n,d===o&&(p-=c\u002F2);const t=e.getPixelForDecimal(0),i=e.getPixelForDecimal(1),s=Math.min(t,i),a=Math.max(t,i);p=Math.max(Math.min(p,a),s),h=p+c}if(p===e.getPixelForValue(o)){const t=Bt(c)*e.getLineWidthForValue(o)\u002F2;p+=t,c-=t}return{size:c,base:p,head:h,center:h+c\u002F2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=Z(s.maxBarThickness,1\u002F0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l=\"flex\"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t\u003Cn.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))\u002F2*l;return{chunk:Math.abs(r-a)\u002F2*l\u002Fs,ratio:i.barPercentage,start:h}}(t,e,s,i):function(t,e,i,s){const n=i.barThickness;let o,a;return U(n)?(o=e.min*i.categoryPercentage,a=i.barPercentage):(o=n*s,a=1),{chunk:o\u002Fs,ratio:a,start:e.pixels[t]-o\u002F2}}(t,e,s,i),h=this._getStackIndex(this.index,this._cachedMeta.stack,n?t:void 0);a=l.start+l.chunk*h+l.chunk\u002F2,r=Math.min(o,l.chunk*l.ratio)}else a=i.getPixelForValue(this.getParsed(t)[i.axis],t),r=Math.min(o,e.min*e.ratio);return{base:a-r\u002F2,head:a+r\u002F2,center:a,size:r}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n\u003Cs;++n)null!==this.getParsed(n)[e.axis]&&i[n].draw(this._ctx)}}Dn.id=\"bar\",Dn.defaults={datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}},Dn.overrides={scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}};class Cn extends Cs{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t\u003Cn.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t\u003Cn.length;t++){const s=e[i+t];n[t]._custom=Z(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t\u003Cn.length;t++){const s=e[i+t];n[t]._custom=Z(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))\u002F2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:\"(\"+o+\", \"+a+(r?\", \"+r:\"\")+\")\"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{iScale:o,vScale:a}=this._cachedMeta,r=this.resolveDataElementOptions(e,s),l=this.getSharedOptions(r),h=this.includeOptions(s,l),c=o.axis,d=a.axis;for(let r=e;r\u003Ce+i;r++){const e=t[r],i=!n&&this.getParsed(r),l={},u=l[c]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[c]),f=l[d]=n?a.getBasePixel():a.getPixelForValue(i[d]);l.skip=isNaN(u)||isNaN(f),h&&(l.options=this.resolveDataElementOptions(r,e.active?\"active\":s),n&&(l.options.radius=0)),this.updateElement(e,r,l,s)}this.updateSharedOptions(l,s,r)}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return\"active\"!==e&&(s.radius=0),s.radius+=Z(i&&i._custom,n),s}}Cn.id=\"bubble\",Cn.defaults={datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}},Cn.overrides={scales:{x:{type:\"linear\"},y:{type:\"linear\"}},plugins:{tooltip:{callbacks:{title:()=>\"\"}}}};class On extends Cs{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(q(i[t])){const{key:t=\"value\"}=this._parsing;a=e=>+ct(i[e],t)}for(n=t,o=t+e;n\u003Co;++n)s._parsed[n]=a(n)}}_getRotation(){return Yt(this.options.rotation-90)}_getCircumference(){return Yt(this.options.circumference)}_getRotationExtents(){let t=At,e=-At;for(let i=0;i\u003Cthis.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)\u002F2,0),r=Math.min(J(this.options.cutout,a),1),l=this._getRingWeight(this.index),{circumference:h,rotation:c}=this._getRotationExtents(),{ratioX:d,ratioY:u,offsetX:f,offsetY:g}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e\u003CAt){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>Jt(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Jt(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(Et,c,u),b=g(Ot,h,d),x=g(Ot+Et,c,u);s=(p-b)\u002F2,n=(m-x)\u002F2,o=-(p+b)\u002F2,a=-(m+x)\u002F2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(c,h,r),p=(i.width-o)\u002Fd,m=(i.height-o)\u002Fu,b=Math.max(Math.min(p,m)\u002F2,0),x=Q(this.options.radius,b),_=(x-Math.max(x*r,0))\u002Fthis._getVisibleDatasetWeightTotal();this.offsetX=f*x,this.offsetY=g*x,s.total=this.calculateTotal(),this.outerRadius=x-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n\u002FAt)}updateElements(t,e,i,s){const n=\"reset\"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)\u002F2,h=(a.top+a.bottom)\u002F2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,f=this.resolveDataElementOptions(e,s),g=this.getSharedOptions(f),p=this.includeOptions(s,g);let m,b=this._getRotation();for(m=0;m\u003Ce;++m)b+=this._circumference(m,n);for(m=e;m\u003Ce+i;++m){const e=this._circumference(m,n),i=t[m],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:b,endAngle:b+e,circumference:e,outerRadius:u,innerRadius:d};p&&(o.options=g||this.resolveDataElementOptions(m,i.active?\"active\":s)),b+=e,this.updateElement(i,m,o,s)}this.updateSharedOptions(g,s,f)}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i\u003Ce.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?At*(Math.abs(t)\u002Fe):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ni(e._parsed[t],i.options.locale);return{label:s[t]||\"\",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s\u003Cn;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s\u003Cn;++s)r=a.resolveDataElementOptions(s),\"inner\"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i\u003Cs;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i\u003Ct;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(Z(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}On.id=\"doughnut\",On.defaults={datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\",\"spacing\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",spacing:0,indexAxis:\"r\"},On.descriptors={_scriptable:t=>\"spacing\"!==t,_indexable:t=>\"spacing\"!==t},On.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label(t){let e=t.label;const i=\": \"+t.formattedValue;return X(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class An extends Cs{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=function(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Qt(Math.min(wt(r,a.axis,h).lo,i?s:wt(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?Qt(Math.max(wt(r,a.axis,c).hi+1,i?0:wt(e,l,a.getPixelForValue(c)).hi+1),n,s)-n:s-n}return{start:n,count:o}}(e,s,o);this._drawStart=a,this._drawCount=r,function(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{iScale:o,vScale:a,_stacked:r,_dataset:l}=this._cachedMeta,h=this.resolveDataElementOptions(e,s),c=this.getSharedOptions(h),d=this.includeOptions(s,c),u=o.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=Wt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||n||\"none\"===s;let x=e>0&&this.getParsed(e-1);for(let h=e;h\u003Ce+i;++h){const e=t[h],i=this.getParsed(h),g=b?e:{},_=U(i[f]),y=g[u]=o.getPixelForValue(i[u],h),v=g[f]=n||_?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,i,r):i[f],h);g.skip=isNaN(y)||isNaN(v)||_,g.stop=h>0&&Math.abs(i[u]-x[u])>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?\"active\":s)),b||this.updateElement(e,h,g,s),x=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)\u002F2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}An.id=\"line\",An.defaults={datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1},An.overrides={scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}};class Tn extends Cs{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ni(e._parsed[t].r,i.options.locale);return{label:s[t]||\"\",value:n}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(s\u003Ce.min&&(e.min=s),s>e.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s\u002F2,0),o=(n-Math.max(i.cutoutPercentage?n\u002F100*i.cutoutPercentage:1,0))\u002Ft.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n=\"reset\"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*Ot;let d,u=c;const f=360\u002Fthis.countVisibleElements();for(d=0;d\u003Ce;++d)u+=this._computeAngle(d,s,f);for(d=e;d\u003Ce+i;d++){const e=t[d];let i=u,g=u+this._computeAngle(d,s,f),p=o.getDataVisibility(d)?r.getDistanceFromCenterForValue(this.getParsed(d).r):0;u=g,n&&(a.animateScale&&(p=0),a.animateRotate&&(i=g=c));const m={x:l,y:h,innerRadius:0,outerRadius:p,startAngle:i,endAngle:g,options:this.resolveDataElementOptions(d,e.active?\"active\":s)};this.updateElement(e,d,m,s)}}countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data.forEach(((t,i)=>{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?Yt(this.resolveDataElementOptions(t,e).angle||i):0}}Tn.id=\"polarArea\",Tn.defaults={dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0},Tn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label:t=>t.chart.data.labels[t.dataIndex]+\": \"+t.formattedValue}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class Ln extends On{}Ln.id=\"pie\",Ln.defaults={cutout:0,rotation:0,circumference:360,radius:\"100%\"};class Rn extends Cs{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,\"resize\"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o=\"reset\"===s;for(let a=e;a\u003Ce+i;a++){const e=t[a],i=this.resolveDataElementOptions(a,e.active?\"active\":s),r=n.getPointPositionForValue(a,this.getParsed(a).r),l=o?n.xCenter:r.x,h=o?n.yCenter:r.y,c={x:l,y:h,angle:r.angle,skip:isNaN(l)||isNaN(h),options:i};this.updateElement(e,a,c,s)}}}Rn.id=\"radar\",Rn.defaults={datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}},Rn.overrides={aspectRatio:1,scales:{r:{type:\"radialLinear\"}}};class En extends An{}En.id=\"scatter\",En.defaults={showLine:!1,fill:!1},En.overrides={interaction:{mode:\"point\"},plugins:{tooltip:{callbacks:{title:()=>\"\",label:t=>\"(\"+t.label+\", \"+t.formattedValue+\")\"}}},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};var In=Object.freeze({__proto__:null,BarController:Dn,BubbleController:Cn,DoughnutController:On,LineController:An,PolarAreaController:Tn,PieController:Ln,RadarController:Rn,ScatterController:En});function zn(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n\u002Fr;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n\u002Fl,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+Et,s-Et),t.closePath(),t.clip()}function Fn(t,e,i,s){const n=li(t.options.borderRadius,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"]);const o=(i-e)\u002F2,a=Math.min(o,s*e\u002F2),r=t=>{const e=(i-Math.min(o,t))*s\u002F2;return Qt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Qt(n.innerStart,0,a),innerEnd:Qt(n.innerEnd,0,a)}}function Bn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Vn(t,e,i,s,n){const{x:o,y:a,startAngle:r,pixelMargin:l,innerRadius:h}=e,c=Math.max(e.outerRadius+s+i-l,0),d=h>0?h+s+i+l:0;let u=0;const f=n-r;if(s){const t=((h>0?h-s:0)+(c>0?c-s:0))\u002F2;u=(f-(0!==t?f*t\u002F(t+s):f))\u002F2}const g=(f-Math.max(.001,f*c-i\u002FOt)\u002Fc)\u002F2,p=r+g+u,m=n-g-u,{outerStart:b,outerEnd:x,innerStart:_,innerEnd:y}=Fn(e,d,c,m-p),v=c-b,w=c-x,M=p+b\u002Fv,k=m-x\u002Fw,S=d+_,P=d+y,D=p+_\u002FS,C=m-y\u002FP;if(t.beginPath(),t.arc(o,a,c,M,k),x>0){const e=Bn(w,k,o,a);t.arc(e.x,e.y,x,k,m+Et)}const O=Bn(P,m,o,a);if(t.lineTo(O.x,O.y),y>0){const e=Bn(P,C,o,a);t.arc(e.x,e.y,y,m+Et,C+Math.PI)}if(t.arc(o,a,d,m-y\u002Fd,p+_\u002Fd,!0),_>0){const e=Bn(S,D,o,a);t.arc(e.x,e.y,_,D+Math.PI,p-Et)}const A=Bn(v,p,o,a);if(t.lineTo(A.x,A.y),b>0){const e=Bn(v,M,o,a);t.arc(e.x,e.y,b,p-Et,M)}t.closePath()}function Nn(t,e,i,s,n){const{options:o}=e,{borderWidth:a,borderJoinStyle:r}=o,l=\"inner\"===o.borderAlign;a&&(l?(t.lineWidth=2*a,t.lineJoin=r||\"round\"):(t.lineWidth=a,t.lineJoin=r||\"bevel\"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&zn(t,e,o+At),t.beginPath(),t.arc(s,n,h,o+At,o,!0),c=0;c\u003Cr;++c)t.stroke();for(t.beginPath(),t.arc(s,n,l,o,o+At),c=0;c\u003Cr;++c)t.stroke()}(t,e,l),l&&zn(t,e,n),Vn(t,e,i,s,n),t.stroke())}class Wn extends Os{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps([\"x\",\"y\"],i),{angle:n,distance:o}=qt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:h,circumference:c}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],i),d=this.options.spacing\u002F2,u=Z(c,r-a)>=At||Jt(n,a,r),f=ee(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],t),{offset:r,spacing:l}=this.options,h=(s+n)\u002F2,c=(o+a+l+r)\u002F2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)\u002F2,n=(e.spacing||0)\u002F2;if(this.pixelMargin=\"inner\"===e.borderAlign?.33:0,this.fullCircles=i>At?Math.floor(i\u002FAt):0,0===i||this.innerRadius\u003C0||this.outerRadius\u003C0)return;t.save();let o=0;if(s){o=s\u002F2;const e=(this.startAngle+this.endAngle)\u002F2;t.translate(Math.cos(e)*o,Math.sin(e)*o),this.circumference>=Ot&&(o=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=function(t,e,i,s){const{fullCircles:n,startAngle:o,circumference:a}=e;let r=e.endAngle;if(n){Vn(t,e,i,s,o+At);for(let e=0;e\u003Cn;++e)t.fill();isNaN(a)||(r=o+a%At,a%At==0&&(r+=At))}return Vn(t,e,i,s,r),t.fill(),r}(t,this,o,n);Nn(t,this,o,n,a),t.restore()}}function Hn(t,e,i=e){t.lineCap=Z(i.borderCapStyle,e.borderCapStyle),t.setLineDash(Z(i.borderDash,e.borderDash)),t.lineDashOffset=Z(i.borderDashOffset,e.borderDashOffset),t.lineJoin=Z(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=Z(i.borderWidth,e.borderWidth),t.strokeStyle=Z(i.borderColor,e.borderColor)}function jn(t,e,i){t.lineTo(i.x,i.y)}function $n(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n\u003Ca&&o\u003Ca||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h\u003Cl&&!c?s+h-l:h-l}}function Yn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=$n(n,i,s),c=function(t){return t.stepped?ke:t.tension||\"monotone\"===t.cubicInterpolationMode?Se:jn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d\u003C=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function Un(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=$n(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,b=0;const x=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c\u003C=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i\u003Cf?f=i:i>g&&(g=i),m=(b*m+e)\u002F++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Xn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||\"monotone\"===e.cubicInterpolationMode||e.stepped||i)?Un:Yn}Wn.id=\"arc\",Wn.defaults={borderAlign:\"center\",borderColor:\"#fff\",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},Wn.defaultRoutes={backgroundColor:\"backgroundColor\"};const qn=\"function\"==typeof Path2D;function Kn(t,e,i,s){qn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Hn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Xn(e);for(const r of n)Hn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Gn extends Os{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||\"monotone\"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ke(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Mi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=wi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?ei:t.tension||\"monotone\"===t.cubicInterpolationMode?ii:ti}(i);let l,h;for(l=0,h=o.length;l\u003Ch;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])\u002F(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return Xn(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=Xn(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),Kn(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function Zn(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)\u003Cn.radius+n.hitRadius}Gn.id=\"line\",Gn.defaults={borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0},Gn.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"},Gn.descriptors={_scriptable:!0,_indexable:t=>\"borderDash\"!==t&&\"fill\"!==t};class Jn extends Os{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps([\"x\",\"y\"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)\u003CMath.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return Zn(this,t,\"x\",e)}inYRange(t,e){return Zn(this,t,\"y\",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius\u003C.1||!ve(this,e,this.size(i)\u002F2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,ye(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function Qn(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],e);let r,l,h,c,d;return t.horizontal?(d=a\u002F2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o\u002F2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function to(t,e,i,s){return t?0:Qt(e,i,s)}function eo(t){const e=Qn(t),i=e.right-e.left,s=e.bottom-e.top,n=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=hi(s);return{t:to(n.top,o.top,0,i),r:to(n.right,o.right,0,e),b:to(n.bottom,o.bottom,0,i),l:to(n.left,o.left,0,e)}}(t,i\u002F2,s\u002F2),o=function(t,e,i){const{enableBorderRadius:s}=t.getProps([\"enableBorderRadius\"]),n=t.options.borderRadius,o=ci(n),a=Math.min(e,i),r=t.borderSkipped,l=s||q(n);return{topLeft:to(!l||r.top||r.left,o.topLeft,0,a),topRight:to(!l||r.top||r.right,o.topRight,0,a),bottomLeft:to(!l||r.bottom||r.left,o.bottomLeft,0,a),bottomRight:to(!l||r.bottom||r.right,o.bottomRight,0,a)}}(t,i\u002F2,s\u002F2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:o},inner:{x:e.left+n.l,y:e.top+n.t,w:i-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function io(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&Qn(t,s);return a&&(n||ee(e,a.left,a.right))&&(o||ee(i,a.top,a.bottom))}function so(t,e){t.rect(e.x,e.y,e.w,e.h)}function no(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}Jn.id=\"point\",Jn.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0},Jn.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};class oo extends Os{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=eo(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?Ce:so;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,no(o,e,n)),t.clip(),a(t,no(n,-e,o)),t.fillStyle=i,t.fill(\"evenodd\")),t.beginPath(),a(t,no(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return io(this,t,e,i)}inXRange(t,e){return io(this,t,null,e)}inYRange(t,e){return io(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:n?(e+s)\u002F2:e,y:n?i:(i+s)\u002F2}}getRange(t){return\"x\"===t?this.width\u002F2:this.height\u002F2}}oo.id=\"bar\",oo.defaults={borderSkipped:\"start\",borderWidth:0,borderRadius:0,inflateAmount:\"auto\",pointStyle:void 0},oo.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};var ao=Object.freeze({__proto__:null,ArcElement:Wn,LineElement:Gn,PointElement:Jn,BarElement:oo});function ro(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,\"data\",{value:e})}}function lo(t){t.data.datasets.forEach((t=>{ro(t)}))}var ho={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void lo(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if(\"y\"===fi([a,t.options.indexAxis]))return;if(!r.controller.supportsDecimation)return;const h=t.scales[r.xAxisID];if(\"linear\"!==h.type&&\"time\"!==h.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Qt(wt(e,o.axis,a).lo,0,i-1)),s=h?Qt(wt(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(d\u003C=(i.threshold||4*s))return void ro(e);let u;switch(U(o)&&(e._data=l,delete e.data,Object.defineProperty(e,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case\"lttb\":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)\u002F(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c\u003Co-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,b=m-h;for(s=h;s\u003Cm;s++)n+=t[s].x,o+=t[s].y;n\u002F=b,o\u002F=b;const x=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=x;s\u003C_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,c,d,s,i);break;case\"min-max\":u=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],b=e+i-1,x=t[e].x,_=t[b].x-x;for(n=e;n\u003Ce+i;++n){o=t[n],a=(o.x-x)\u002F_*s,r=o.y;const e=0|a;if(e===l)r\u003Cu?(u=r,h=n):r>f&&(f=r,c=n),g=(p*g+o.x)\u002F++p;else{const i=n-1;if(!U(h)&&!U(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){lo(t)}};function co(t,e,i,s){if(s)return;let n=e[t],o=i[t];return\"angle\"===t&&(n=Zt(n),o=Zt(o)),{property:t,start:n,end:o}}function uo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function fo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function go(t,e){let i=[],s=!1;return X(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=uo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Gn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function po(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!K(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function mo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=Z(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return\"origin\";return s}(t);if(q(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return K(n)&&Math.floor(n)===n?function(t,e,i,s){\"-\"!==t&&\"+\"!==t||(i=e+i);if(i===e||i\u003C0||i>=s)return!1;return i}(s[0],e,n,i):[\"origin\",\"start\",\"end\",\"stack\",\"shape\"].indexOf(s)>=0&&s}function bo(t,e,i){const s=[];for(let n=0;n\u003Ci.length;n++){const o=i[n],{first:a,last:r,point:l}=xo(o,e,\"x\");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function xo(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t\u003Co.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(ee(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}class _o{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:At},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function yo(t){const{chart:e,fill:i,line:s}=t;if(K(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if(\"stack\"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas(\"line\");for(let t=0;t\u003Cs.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(go({x:null,y:e.bottom},s));for(let t=0;t\u003Co.length;t++){const e=o[t];for(let t=e.start;t\u003C=e.end;t++)bo(n,a[t],r)}return new Gn({points:n,options:{}})}(t);if(\"shape\"===i)return!0;const n=function(t){if((t.scale||{}).getPointPositionForValue)return function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,o=s.reverse?e.max:e.min,a=function(t,e,i){let s;return s=\"start\"===t?i:\"end\"===t?e.options.reverse?e.min:e.max:q(t)?t.value:e.getBaseValue(),s}(i,e,o),r=[];if(s.grid.circular){const t=e.getPointPositionForValue(0,o);return new _o({x:t.x,y:t.y,radius:e.getDistanceFromCenterForValue(a)})}for(let t=0;t\u003Cn;++t)r.push(e.getPointPositionForValue(t,a));return r}(t);return function(t){const{scale:e={},fill:i}=t,s=function(t,e){let i=null;return\"start\"===t?i=e.bottom:\"end\"===t?i=e.top:q(t)?i=e.getPixelForValue(t.value):e.getBasePixel&&(i=e.getBasePixel()),i}(i,e);if(K(s)){const t=e.isHorizontal();return{x:t?s:null,y:t?null:s}}return null}(t)}(t);return n instanceof _o?n:go(n,s)}function vo(t,e,i){const s=yo(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(we(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?\"angle\":e.axis;t.save(),\"x\"===l&&o!==n&&(wo(t,s,a.top),Mo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),wo(t,s,a.bottom));Mo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),Me(t))}function wo(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[uo(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function Mo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=uo(s,r,n);const l=co(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=wi(e,l);for(const e of h){const s=co(i,o[e.start],o[e.end],e.loop),r=vi(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:fo(l,s,\"start\",Math.max)},end:{[i]:fo(l,s,\"end\",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,ko(t,a,d&&co(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():So(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||So(t,s,h,n)}t.closePath(),t.fill(f?\"evenodd\":\"nonzero\"),t.restore()}}function ko(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};\"x\"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function So(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}var Po={id:\"filler\",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a\u003Cs;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof Gn&&(l={visible:t.isDatasetVisible(a),index:a,fill:mo(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a\u003Cs;++a)l=n[a],l&&!1!==l.fill&&(l.fill=po(n,a,i.propagate))},beforeDraw(t,e,i){const s=\"beforeDraw\"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&vo(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if(\"beforeDatasetsDraw\"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;i&&vo(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;s&&!1!==s.fill&&\"beforeDatasetDraw\"===i.drawTime&&vo(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}};const Do=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Co extends Os{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=tt(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=ui(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Do(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign=\"left\",n.textBaseline=\"middle\";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e\u002F2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e\u002F2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,a=mi(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=n(i,this.left+s,this.right-this.lineWidths[o]);for(const l of e)o!==l.row&&(o=l.row,r=n(i,this.left+s,this.right-this.lineWidths[o])),l.top+=this.top+t+s,l.left=a.leftForLtr(a.x(r),l.width),r+=l.width+s}else{let o=0,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height);for(const l of e)l.col!==o&&(o=l.col,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height)),l.top=r,l.left+=this.left+s,l.left=a.leftForLtr(a.x(l.left),l.width),r+=l.height+s}}isHorizontal(){return\"top\"===this.options.position||\"bottom\"===this.options.position}draw(){if(this.options.display){const t=this.ctx;we(t,this),this._draw(),Me(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:a,labels:r}=t,l=yt.color,h=mi(t.rtl,this.left,this.width),c=ui(r.font),{color:d,padding:u}=r,f=c.size,g=f\u002F2;let p;this.drawTitle(),s.textAlign=h.textAlign(\"left\"),s.textBaseline=\"middle\",s.lineWidth=.5,s.font=c.string;const{boxWidth:m,boxHeight:b,itemHeight:x}=Do(r,f),_=this.isHorizontal(),y=this._computeTitleHeight();p=_?{x:n(a,this.left+u,this.right-i[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:n(a,this.top+y+u,this.bottom-e[0].height),line:0},bi(this.ctx,t.textDirection);const v=x+u;this.legendItems.forEach(((w,M)=>{s.strokeStyle=w.fontColor||d,s.fillStyle=w.fontColor||d;const k=s.measureText(w.text).width,S=h.textAlign(w.textAlign||(w.textAlign=r.textAlign)),P=m+g+k;let D=p.x,C=p.y;h.setWidth(this.width),_?M>0&&D+P+u>this.right&&(C=p.y+=v,p.line++,D=p.x=n(a,this.left+u,this.right-i[p.line])):M>0&&C+v>this.bottom&&(D=p.x=D+e[p.line].width+u,p.line++,C=p.y=n(a,this.top+y+u,this.bottom-e[p.line].height));!function(t,e,i){if(isNaN(m)||m\u003C=0||isNaN(b)||b\u003C0)return;s.save();const n=Z(i.lineWidth,1);if(s.fillStyle=Z(i.fillStyle,l),s.lineCap=Z(i.lineCap,\"butt\"),s.lineDashOffset=Z(i.lineDashOffset,0),s.lineJoin=Z(i.lineJoin,\"miter\"),s.lineWidth=n,s.strokeStyle=Z(i.strokeStyle,l),s.setLineDash(Z(i.lineDash,[])),r.usePointStyle){const o={radius:m*Math.SQRT2\u002F2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},a=h.xPlus(t,m\u002F2);ye(s,o,a,e+g)}else{const o=e+Math.max((f-b)\u002F2,0),a=h.leftForLtr(t,m),r=ci(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?Ce(s,{x:a,y:o,w:m,h:b,radius:r}):s.rect(a,o,m,b),s.fill(),0!==n&&s.stroke()}s.restore()}(h.x(D),C,w),D=o(S,D+m+g,_?D+P:this.right,t.rtl),function(t,e,i){Pe(s,i.text,t,e+x\u002F2,c,{strikethrough:i.hidden,textAlign:h.textAlign(i.textAlign)})}(h.x(D),C,w),_?p.x+=P+u:p.y+=v})),xi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=ui(e.font),o=di(e.padding);if(!e.display)return;const a=mi(t.rtl,this.left,this.width),r=this.ctx,l=e.position,h=i.size\u002F2,c=o.top+h;let d,u=this.left,f=this.width;if(this.isHorizontal())f=Math.max(...this.lineWidths),d=this.top+c,u=n(t.align,u,this.right-f);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);d=c+n(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const g=n(l,u,u+f);r.textAlign=a.textAlign(s(l)),r.textBaseline=\"middle\",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,Pe(r,e.text,g,d,i)}_computeTitleHeight(){const t=this.options.title,e=ui(t.font),i=di(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(ee(t,this.left,this.right)&&ee(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i\u003Cn.length;++i)if(s=n[i],ee(t,s.left,s.left+s.width)&&ee(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if((\"mousemove\"===t||\"mouseout\"===t)&&(e.onHover||e.onLeave))return!0;if(e.onClick&&(\"click\"===t||\"mouseup\"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if(\"mousemove\"===t.type||\"mouseout\"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&tt(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&tt(e.onHover,[t,i,this],this)}else i&&tt(e.onClick,[t,i,this],this);var s,n}}var Oo={id:\"legend\",_element:Co,start(t,e,i){const s=t.legend=new Co({ctx:t.ctx,options:i,chart:t});Xi.configure(t,s,i),Xi.addBox(t,s)},stop(t){Xi.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;Xi.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=di(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)\u002F4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:t=>!t.startsWith(\"on\"),labels:{_scriptable:t=>![\"generateLabels\",\"filter\",\"sort\"].includes(t)}}};class Ao extends Os{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=X(i.text)?i.text.length:1;this._padding=di(i.padding);const n=s*ui(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return\"top\"===t||\"bottom\"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:o,options:a}=this,r=a.align;let l,h,c,d=0;return this.isHorizontal()?(h=n(r,i,o),c=e+t,l=o-i):(\"left\"===a.position?(h=i+t,c=n(r,s,e),d=-.5*Ot):(h=o-t,c=n(r,e,s),d=.5*Ot),l=s-e),{titleX:h,titleY:c,maxWidth:l,rotation:d}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=ui(e.font),n=i.lineHeight\u002F2+this._padding.top,{titleX:o,titleY:a,maxWidth:r,rotation:l}=this._drawArgs(n);Pe(t,e.text,0,0,i,{color:e.color,maxWidth:r,rotation:l,textAlign:s(e.align),textBaseline:\"middle\",translation:[o,a]})}}var To={id:\"title\",_element:Ao,start(t,e,i){!function(t,e){const i=new Ao({ctx:t.ctx,options:e,chart:t});Xi.configure(t,i,e),Xi.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Xi.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;Xi.configure(t,s,i),s.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const Lo=new WeakMap;var Ro={id:\"subtitle\",start(t,e,i){const s=new Ao({ctx:t.ctx,options:i,chart:t});Xi.configure(t,s,i),Xi.addBox(t,s),Lo.set(t,s)},stop(t){Xi.removeBox(t,Lo.get(t)),Lo.delete(t)},beforeUpdate(t,e,i){const s=Lo.get(t);Xi.configure(t,s,i),s.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"normal\"},fullSize:!0,padding:0,position:\"top\",text:\"\",weight:1500},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const Eo={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e\u003Ci;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s+=t.x,n+=t.y,++o}}return{x:s\u002Fo,y:n\u002Fo}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i\u003Cs;++i){const s=t[i].element;if(s&&s.hasValue()){const t=Kt(e,s.getCenterPoint());t\u003Cr&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function Io(t,e){return e&&(X(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function zo(t){return(\"string\"==typeof t||t instanceof String)&&t.indexOf(\"\\n\")>-1?t.split(\"\\n\"):t}function Fo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Bo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=ui(e.bodyFont),h=ui(e.titleFont),c=ui(e.footerFont),d=o.length,u=n.length,f=s.length,g=di(e.padding);let p=g.height,m=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-f)*l.lineHeight+(b-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let x=0;const _=function(t){m=Math.max(m,i.measureText(t).width+x)};return i.save(),i.font=h.string,et(t.title,_),i.font=l.string,et(t.beforeBody.concat(t.afterBody),_),x=e.displayColors?a+2+e.boxPadding:0,et(s,(t=>{et(t.before,_),et(t.lines,_),et(t.after,_)})),x=0,i.font=c.string,et(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Vo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h=\"center\";return\"center\"===s?h=n\u003C=(r+l)\u002F2?\"left\":\"right\":n\u003C=o\u002F2?h=\"left\":n>=a-o\u002F2&&(h=\"right\"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return\"left\"===t&&n+o+a>e.width||\"right\"===t&&n-o-a\u003C0||void 0}(h,t,e,i)&&(h=\"center\"),h}function No(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i\u003Cs\u002F2?\"top\":i>t.height-s\u002F2?\"bottom\":\"center\"}(t,i);return{xAlign:i.xAlign||e.xAlign||Vo(t,e,i,s),yAlign:s}}function Wo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=ci(a);let g=function(t,e){let{x:i,width:s}=t;return\"right\"===e?i-=s:\"center\"===e&&(i-=s\u002F2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return\"top\"===e?s+=i:s-=\"bottom\"===e?n+i:n\u002F2,s}(e,l,h);return\"center\"===l?\"left\"===r?g+=h:\"right\"===r&&(g-=h):\"left\"===r?g-=Math.max(c,u)+n:\"right\"===r&&(g+=Math.max(d,f)+n),{x:Qt(g,0,s.width-e.width),y:Qt(p,0,s.height-e.height)}}function Ho(t,e,i){const s=di(i.padding);return\"center\"===e?t.x+t.width\u002F2:\"right\"===e?t.x+t.width-s.right:t.x+s.left}function jo(t){return Io([],zo(t))}function $o(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class Yo extends Os{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new ms(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,pi(t,{tooltip:e,tooltipItems:i,type:\"tooltip\"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=Io(a,zo(s)),a=Io(a,zo(n)),a=Io(a,zo(o)),a}getBeforeBody(t,e){return jo(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return et(t,(t=>{const e={before:[],lines:[],after:[]},n=$o(i,t);Io(e.before,zo(n.beforeLabel.call(this,t))),Io(e.lines,n.label.call(this,t)),Io(e.after,zo(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return jo(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=Io(a,zo(s)),a=Io(a,zo(n)),a=Io(a,zo(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a\u003Cr;++a)l.push(Fo(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),et(l,(e=>{const i=$o(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Eo[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Bo(this,i),a=Object.assign({},t,e),r=No(this.chart,i,a),l=Wo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=ci(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return\"center\"===n?(_=u+g\u002F2,\"left\"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m=\"left\"===s?d+Math.max(r,h)+o:\"right\"===s?d+f-Math.max(l,c)-o:this.caretX,\"top\"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=mi(i.rtl,this.x,this.width);for(t.x=Ho(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline=\"middle\",o=ui(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r\u003Cn;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight\u002F2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,n){const o=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:r,boxWidth:l,boxPadding:h}=n,c=ui(n.bodyFont),d=Ho(this,\"left\",n),u=s.x(d),f=r\u003Cc.lineHeight?(c.lineHeight-r)\u002F2:0,g=e.y+f;if(n.usePointStyle){const e={radius:Math.min(l,r)\u002F2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},i=s.leftForLtr(u,l)+l\u002F2,h=g+r\u002F2;t.strokeStyle=n.multiKeyBackground,t.fillStyle=n.multiKeyBackground,ye(t,e,i,h),t.strokeStyle=o.borderColor,t.fillStyle=o.backgroundColor,ye(t,e,i,h)}else{t.lineWidth=o.borderWidth||1,t.strokeStyle=o.borderColor,t.setLineDash(o.borderDash||[]),t.lineDashOffset=o.borderDashOffset||0;const e=s.leftForLtr(u,l-h),i=s.leftForLtr(s.xPlus(u,1),l-h-2),a=ci(o.borderRadius);Object.values(a).some((t=>0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,Ce(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),Ce(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=ui(i.bodyFont);let d=c.lineHeight,u=0;const f=mi(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d\u002F2),t.y+=d+n},p=f.textAlign(o);let m,b,x,_,y,v,w;for(e.textAlign=o,e.textBaseline=\"middle\",e.font=c.string,t.x=Ho(this,p,i),e.fillStyle=i.bodyColor,et(this.beforeBody,g),u=a&&\"right\"!==p?\"center\"===o?l\u002F2+h:l+2+h:0,_=0,v=s.length;_\u003Cv;++_){for(m=s[_],b=this.labelTextColors[_],e.fillStyle=b,et(m.before,g),x=m.lines,a&&x.length&&(this._drawColorBox(e,t,_,f,i),d=Math.max(c.lineHeight,r)),y=0,w=x.length;y\u003Cw;++y)g(x[y]),d=c.lineHeight;et(m.after,g)}u=0,d=c.lineHeight,et(this.afterBody,g),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=mi(i.rtl,this.x,this.width);for(t.x=Ho(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline=\"middle\",o=ui(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a\u003Cn;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight\u002F2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=ci(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),\"top\"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),\"center\"===o&&\"right\"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),\"bottom\"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),\"center\"===o&&\"left\"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Eo[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Bo(this,t),a=Object.assign({},i,this._size),r=No(e,t,a),l=Wo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)\u003C.001?0:i;const o=di(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),bi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),xi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error(\"Cannot find a dataset at index \"+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!it(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!it(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if(\"mouseout\"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Eo[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}Yo.positioners=Eo;var Uo={id:\"tooltip\",_element:Yo,positioners:Eo,afterInit(t,e,i){i&&(t.tooltip=new Yo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins(\"beforeTooltipDraw\",i))return;e.draw(t.ctx),t.notifyPlugins(\"afterTooltipDraw\",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,boxPadding:0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:{beforeTitle:$,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&\"dataset\"===this.options.mode)return e.dataset.label||\"\";if(e.label)return e.label;if(s>0&&e.dataIndex\u003Cs)return i[e.dataIndex]}return\"\"},afterTitle:$,beforeBody:$,beforeLabel:$,label(t){if(this&&this.options&&\"dataset\"===this.options.mode)return t.label+\": \"+t.formattedValue||t.formattedValue;let e=t.dataset.label||\"\";e&&(e+=\": \");const i=t.formattedValue;return U(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:$,afterBody:$,beforeFooter:$,footer:$,afterFooter:$}},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:t=>\"filter\"!==t&&\"itemSort\"!==t&&\"external\"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},Xo=Object.freeze({__proto__:null,Decimation:ho,Filler:Po,Legend:Oo,SubTitle:Ro,Title:To,Tooltip:Uo});function qo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>(\"string\"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class Ko extends Ns{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(U(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Qt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:qo(i,t,Z(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);\"ticks\"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i\u003C=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&t\u003Ce.length?e[t]:t}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return\"number\"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Go(t,e,{horizontal:i,minRotation:s}){const n=Yt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(\"\"+t).length;return Math.min(e\u002Fo,a)}Ko.id=\"category\",Ko.defaults={ticks:{callback:Ko.prototype.getLabelForValue}};class Zo extends Ns{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return U(t)||(\"number\"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=Bt(s),e=Bt(n);t\u003C0&&e\u003C0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s\u003C=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max\u002Fs)-Math.floor(this.min\u002Fs)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!U(o),b=!U(a),x=!U(l),_=(p-g)\u002F(c+1);let y,v,w,M,k=Vt((p-g)\u002Ff\u002Fu)*u;if(k\u003C1e-14&&!m&&!b)return[{value:g},{value:p}];M=Math.ceil(p\u002Fk)-Math.floor(g\u002Fk),M>f&&(k=Vt(M*k\u002Ff\u002Fu)*u),U(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)\u002Fy),\"ticks\"===s?(v=Math.floor(g\u002Fk)*k,w=Math.ceil(p\u002Fk)*k):(v=g,w=p),m&&b&&n&&jt((a-o)\u002Fn,k\u002F1e3)?(M=Math.round(Math.min((a-o)\u002Fk,h)),k=(a-o)\u002FM,v=o,w=a):x?(v=m?o:v,w=b?a:w,M=l-1,k=(w-v)\u002FM):(M=(w-v)\u002Fk,M=Ht(M,Math.round(M),k\u002F1e3)?Math.round(M):Math.ceil(M));const S=Math.max(Xt(k),Xt(v));y=Math.pow(10,U(r)?S:r),v=Math.round(v*y)\u002Fy,w=Math.round(w*y)\u002Fy;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),v\u003Co&&P++,Ht(Math.round((v+P*k)*y)\u002Fy,o,Go(o,_,t))&&P++):v\u003Co&&P++);P\u003CM;++P)i.push({value:Math.round((v+P*k)*y)\u002Fy});return b&&d&&w!==a?i.length&&Ht(i[i.length-1].value,a,Go(a,_,t))?i[i.length-1].value=a:i.push({value:a}):b&&w!==a||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return\"ticks\"===t.bounds&&$t(s,this,\"value\"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)\u002FMath.max(t.length-1,1)\u002F2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ni(t,this.chart.options.locale,this.options.ticks.format)}}class Jo extends Zo{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?t:0,this.max=K(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=Yt(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e\u002FMath.min(40,n.lineHeight\u002Fs))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function Qo(t){return 1===t\u002FMath.pow(10,Math.floor(Ft(t)))}Jo.id=\"linear\",Jo.defaults={ticks:{callback:Ts.formatters.numeric}};class ta extends Ns{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Zo.prototype.parse.apply(this,[t,e]);if(0!==i)return K(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?Math.max(0,t):null,this.max=K(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(Ft(t))+e);i===s&&(i\u003C=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i\u003C=0&&n(a(s,-1)),s\u003C=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(Ft(e.max)),s=Math.ceil(e.max\u002FMath.pow(10,i)),n=[];let o=G(t.min,Math.pow(10,Math.floor(Ft(e.min)))),a=Math.floor(Ft(o)),r=Math.floor(o\u002FMath.pow(10,a)),l=a\u003C0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Qo(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)\u002Fl}while(a\u003Ci||a===i&&r\u003Cs);const h=G(t.max,o);return n.push({value:h,major:Qo(o)}),n}({min:this._userMin,max:this._userMax},this);return\"ticks\"===t.bounds&&$t(e,this,\"value\"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?\"0\":ni(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=Ft(t),this._valueRange=Ft(this.max)-Ft(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Ft(t)-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function ea(t){const e=t.ticks;if(e.display&&t.display){const t=di(e.backdropPadding);return Z(e.font&&e.font.size,yt.font.size)+t.height}return 0}function ia(t,e,i,s,n){return t===s||t===n?{start:e-i\u002F2,end:e+i\u002F2}:t\u003Cs||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function sa(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?Ot\u002Fo:0;for(let d=0;d\u003Co;d++){const o=a.setContext(t.getPointLabelContext(d));n[d]=o.padding;const u=t.getPointPosition(d,t.drawingArea+n[d],r),f=ui(o.font),g=(l=t.ctx,h=f,c=X(c=t._pointLabels[d])?c:[c],{w:be(l,h.string,c),h:c.length*h.lineHeight});s[d]=g;const p=Zt(t.getIndexAngle(d)+r),m=Math.round(Ut(p));na(i,e,p,ia(m,u.x,g.w,0,180),ia(m,u.y,g.h,90,270))}var l,h,c;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,a=ea(o)\u002F2,r=t.drawingArea,l=o.pointLabels.centerPointLabels?Ot\u002Fn:0;for(let o=0;o\u003Cn;o++){const n=t.getPointPosition(o,r+a+i[o],l),h=Math.round(Ut(Zt(n.angle+Et))),c=e[o],d=ra(n.y,c.h,h),u=oa(h),f=aa(n.x,c.w,u);s.push({x:n.x,y:d,textAlign:u,left:f,top:d,right:f+c.w,bottom:d+c.h})}return s}(t,s,n)}function na(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start\u003Ce.l?(r=(e.l-s.start)\u002Fo,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)\u002Fo,t.r=Math.max(t.r,e.r+r)),n.start\u003Ce.t?(l=(e.t-n.start)\u002Fa,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)\u002Fa,t.b=Math.max(t.b,e.b+l))}function oa(t){return 0===t||180===t?\"center\":t\u003C180?\"left\":\"right\"}function aa(t,e,i){return\"right\"===i?t-=e:\"center\"===i&&(t-=e\u002F2),t}function ra(t,e,i){return 90===i||270===i?t-=e\u002F2:(i>270||i\u003C90)&&(t-=e),t}function la(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,At);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o\u003Cs;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}ta.id=\"logarithmic\",ta.defaults={ticks:{callback:Ts.formatters.logarithmic,major:{enabled:!0}}};class ha extends Zo{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=di(ea(this.options)\u002F2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e\u002F2+t.left),this.yCenter=Math.floor(this.top+i\u002F2+t.top),this.drawingArea=Math.floor(Math.min(e,i)\u002F2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=K(t)&&!isNaN(t)?t:0,this.max=K(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea\u002Fea(this.options))}generateTickLabels(t){Zo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=tt(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:\"\"})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?sa(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)\u002F2),this.yCenter+=Math.floor((i-s)\u002F2),this.drawingArea-=Math.min(this.drawingArea\u002F2,Math.max(t,e,i,s))}getIndexAngle(t){return Zt(t*(At\u002F(this._pointLabels.length||1))+Yt(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(U(t))return NaN;const e=this.drawingArea\u002F(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(U(t))return NaN;const e=t\u002F(this.drawingArea\u002F(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t\u003Ce.length){const i=e[t];return function(t,e,i){return pi(t,{label:i,index:e,type:\"pointLabel\"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-Et+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),la(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s}=e,n=this._pointLabels.length;let o,a,r;if(e.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:s}}=t;for(let n=e-1;n>=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=ui(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!U(f)){const t=ci(e.borderRadius),s=di(e.backdropPadding);i.fillStyle=f;const n=h-s.left,o=c-s.top,a=d-h+s.width,r=u-c+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),Ce(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}Pe(i,t._pointLabels[n],a,r+o.lineHeight\u002F2,o,{color:e.color,textAlign:l,textBaseline:\"middle\"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){a=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i\u003C0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),la(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),a,n)}})),i.display){for(t.save(),o=n-1;o>=0;o--){const s=i.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:l}=s;l&&n&&(t.lineWidth=l,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),r=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign=\"center\",t.textBaseline=\"middle\",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=ui(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=di(r.backdropPadding);t.fillRect(-o\u002F2-e.left,-n-l.size\u002F2-e.top,o+e.width,l.size+e.height)}Pe(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}ha.id=\"radialLinear\",ha.defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Ts.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},ha.defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"},ha.descriptors={angleLines:{_fallback:\"grid\"}};const ca={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},da=Object.keys(ca);function ua(t,e){return t-e}function fa(t,e){if(U(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return\"function\"==typeof s&&(a=s(a)),K(a)||(a=\"string\"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a=\"week\"!==n||!Wt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,\"isoWeek\",o)),+a)}function ga(t,e,i,s){const n=da.length;for(let o=da.indexOf(t);o\u003Cn-1;++o){const t=ca[da[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)\u002F(n*t.size))\u003C=s)return da[o]}return da[n-1]}function pa(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=vt(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function ma(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a\u003Co;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r\u003C=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class ba extends Ns{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new xn._date(t.adapters.date);rt(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:fa(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||\"day\";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),\"ticks\"===t.bounds&&\"labels\"===t.ticks.source||r(this.getMinMax(!1))),s=K(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=K(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s=\"labels\"===i.source?this.getLabelTimestamps():this._generate();\"ticks\"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=kt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?ga(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=da.length-1;o>=da.indexOf(i);o--){const i=da[o];if(ca[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return da[i?da.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&\"year\"!==this._unit?function(t){for(let e=da.indexOf(t)+1,i=da.length;e\u003Ci;++e)if(ca[da[e]].common)return da[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),ma(this,o,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map((t=>+t.value)))}initOffsets(t){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)\u002F2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))\u002F2);const o=t.length\u003C3?.5:.25;s=Qt(s,0,o),n=Qt(n,0,o),this._offsets={start:s,end:n,factor:1\u002F(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||ga(n.minUnit,e,i,this._getLabelCapacity(e)),a=Z(n.stepSize,1),r=\"week\"===o&&n.isoWeekday,l=Wt(r)||!0===r,h={};let c,d,u=e;if(l&&(u=+t.startOf(u,\"isoWeek\",r)),u=+t.startOf(u,l?\"day\":o),t.diff(i,e,o)>1e5*a)throw new Error(e+\" and \"+i+\" are too far apart with stepSize of \"+a+\" \"+o);const f=\"data\"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;c\u003Ci;c=+t.add(c,a,o),d++)pa(h,c,f);return c!==i&&\"ticks\"!==s.bounds&&1!==d||pa(h,c,f),Object.keys(h).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,u=this._adapter.format(t,s||(d?h:l)),f=n.ticks.callback;return f?tt(f,[u,e,i],this):u}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e\u003Ci;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)\u002F(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)\u002Fe.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=Yt(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,ma(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width\u002Fo.w:this.height\u002Fo.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t\u003Ce;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e\u003Ci;++e)t.push(fa(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return Ct(t.sort(ua))}}function xa(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e\u003C=t[l].pos&&({lo:r,hi:l}=wt(t,\"pos\",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e\u003C=t[l].time&&({lo:r,hi:l}=wt(t,\"time\",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)\u002Fh:o}ba.id=\"time\",ba.defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",major:{enabled:!1}}};class _a extends ba{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xa(e,this.min),this._tableRange=xa(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o\u003Ca;++o)l=t[o],l>=e&&l\u003C=i&&s.push(l);if(s.length\u003C2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o\u003Ca;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)\u002F2)!==l&&n.push({time:l,pos:o\u002F(a-1)});return n}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(xa(this._table,t)-this._minPos)\u002Fthis._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)\u002Fe.factor-e.end;return xa(this._table,i*this._tableRange+this._minPos,!0)}}_a.id=\"timeseries\",_a.defaults=ba.defaults;var ya=Object.freeze({__proto__:null,CategoryScale:Ko,LinearScale:Jo,LogarithmicScale:ta,RadialLinearScale:ha,TimeScale:ba,TimeSeriesScale:_a});return fn.register(In,ya,ao,Xo),fn.helpers={...Di},fn._adapters=xn,fn.Animation=gs,fn.Animations=ms,fn.animator=a,fn.controllers=Hs.controllers.items,fn.DatasetController=Cs,fn.Element=Os,fn.elements=ao,fn.Interaction=Ei,fn.layouts=Xi,fn.platforms=ds,fn.Scale=Ns,fn.Ticks=Ts,Object.assign(fn,In,ya,ao,Xo,ds),fn.Chart=fn,\"undefined\"!=typeof window&&(window.Chart=fn),fn}));\r\n+\u002F*!\n+ * Chart.js v3.8.0\n+ * https:\u002F\u002Fwww.chartjs.org\n+ * (c) 2022 Chart.js Contributors\n+ * Released under the MIT License\n+ *\u002F\n+!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){\"use strict\";const t=\"undefined\"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>\"start\"===t?\"left\":\"end\"===t?\"right\":\"center\",n=(t,e,i)=>\"start\"===t?e:\"end\"===t?i:(e+i)\u002F2,o=(t,e,i,s)=>t===(s?\"left\":\"right\")?i:\"center\"===t?(e+i)\u002F2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,\"progress\")),n.length||(i.running=!1,this._notify(s,i,t,\"complete\"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}};\n+\u002F*!\n+ * @kurkle\u002Fcolor v0.2.1\n+ * https:\u002F\u002Fgithub.com\u002Fkurkle\u002Fcolor#readme\n+ * (c) 2022 Jukka Kurkela\n+ * Released under the MIT License\n+ *\u002Ffunction r(t){return t+.5|0}const l=(t,e,i)=>Math.max(Math.min(t,i),e);function h(t){return l(r(2.55*t),0,255)}function c(t){return l(r(255*t),0,255)}function d(t){return l(r(t\u002F2.55)\u002F100,0,1)}function u(t){return l(r(100*t),0,100)}const f={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},g=[...\"0123456789ABCDEF\"],p=t=>g[15&t],m=t=>g[(240&t)>>4]+g[15&t],b=t=>(240&t)>>4==(15&t);function x(t){var e=(t=>b(t.r)&&b(t.g)&&b(t.b)&&b(t.a))(t)?p:m;return t?\"#\"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t\u003C255?e(t):\"\")(t.a,e):void 0}const _=\u002F^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;function y(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t\u002F30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function v(t,e,i){const s=(s,n=(s+t\u002F60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function w(t,e,i){const s=y(t,1,.5);let n;for(e+i>1&&(n=1\u002F(e+i),e*=n,i*=n),n=0;n\u003C3;n++)s[n]*=1-e-i,s[n]+=e;return s}function M(t){const e=t.r\u002F255,i=t.g\u002F255,s=t.b\u002F255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)\u002F2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h\u002F(2-n-o):h\u002F(n+o),r=function(t,e,i,s,n){return t===n?(e-i)\u002Fs+(e\u003Ci?6:0):e===n?(i-t)\u002Fs+2:(t-e)\u002Fs+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function k(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(c)}function S(t,e,i){return k(y,t,e,i)}function P(t){return(t%360+360)%360}function D(t){const e=_.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?h(+e[5]):c(+e[5]));const n=P(+e[2]),o=+e[3]\u002F100,a=+e[4]\u002F100;return i=\"hwb\"===e[1]?function(t,e,i){return k(w,t,e,i)}(n,o,a):\"hsv\"===e[1]?function(t,e,i){return k(v,t,e,i)}(n,o,a):S(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const C={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},O={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};let A;function T(t){A||(A=function(){const t={},e=Object.keys(O),i=Object.keys(C);let s,n,o,a,r;for(s=0;s\u003Ce.length;s++){for(a=r=e[s],n=0;n\u003Ci.length;n++)o=i[n],r=r.replace(o,C[o]);o=parseInt(O[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),A.transparent=[0,0,0,0]);const e=A[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const L=\u002F^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,\u002F]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;const R=t=>t\u003C=.0031308?12.92*t:1.055*Math.pow(t,1\u002F2.4)-.055,E=t=>t\u003C=.04045?t\u002F12.92:Math.pow((t+.055)\u002F1.055,2.4);function I(t,e,i){if(t){let s=M(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=S(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function z(t,e){return t?Object.assign(e||{},t):t}function F(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=c(t[3]))):(e=z(t,{r:0,g:0,b:0,a:1})).a=c(e.a),e}function B(t){return\"r\"===t.charAt(0)?function(t){const e=L.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?h(t):l(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?h(i):l(i,0,255)),s=255&(e[4]?h(s):l(s,0,255)),n=255&(e[6]?h(n):l(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):D(t)}class V{constructor(t){if(t instanceof V)return t;const e=typeof t;let i;var s,n,o;\"object\"===e?i=F(t):\"string\"===e&&(o=(s=t).length,\"#\"===s[0]&&(4===o||5===o?n={r:255&17*f[s[1]],g:255&17*f[s[2]],b:255&17*f[s[3]],a:5===o?17*f[s[4]]:255}:7!==o&&9!==o||(n={r:f[s[1]]\u003C\u003C4|f[s[2]],g:f[s[3]]\u003C\u003C4|f[s[4]],b:f[s[5]]\u003C\u003C4|f[s[6]],a:9===o?f[s[7]]\u003C\u003C4|f[s[8]]:255})),i=n||T(t)||B(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=z(this._rgb);return t&&(t.a=d(t.a)),t}set rgb(t){this._rgb=F(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a\u003C255?`rgba(${t.r}, ${t.g}, ${t.b}, ${d(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?x(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=M(t),i=e[0],s=u(e[1]),n=u(e[2]);return t.a\u003C255?`hsla(${i}, ${s}%, ${n}%, ${d(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)\u002F(1+a*r))+1)\u002F2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=E(d(t.r)),n=E(d(t.g)),o=E(d(t.b));return{r:c(R(s+i*(E(d(e.r))-s))),g:c(R(n+i*(E(d(e.g))-n))),b:c(R(o+i*(E(d(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new V(this.rgb)}alpha(t){return this._rgb.a=c(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=r(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return I(this._rgb,2,t),this}darken(t){return I(this._rgb,2,-t),this}saturate(t){return I(this._rgb,1,t),this}desaturate(t){return I(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=M(t);i[0]=P(i[0]+e),i=S(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function N(t){return new V(t)}function W(t){if(t&&\"object\"==typeof t){const e=t.toString();return\"[object CanvasPattern]\"===e||\"[object CanvasGradient]\"===e}return!1}function H(t){return W(t)?t:N(t)}function j(t){return W(t)?t:N(t).saturate(.5).darken(.1).hexString()}function $(){}const Y=function(){let t=0;return function(){return t++}}();function U(t){return null==t}function X(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return\"[object\"===e.slice(0,7)&&\"Array]\"===e.slice(-6)}function q(t){return null!==t&&\"[object Object]\"===Object.prototype.toString.call(t)}const K=t=>(\"number\"==typeof t||t instanceof Number)&&isFinite(+t);function G(t,e){return K(t)?t:e}function Z(t,e){return void 0===t?e:t}const J=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100:t\u002Fe,Q=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100*e:+t;function tt(t,e,i){if(t&&\"function\"==typeof t.call)return t.apply(i,e)}function et(t,e,i,s){let n,o,a;if(X(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;n\u003Co;n++)e.call(i,t[n],n);else if(q(t))for(a=Object.keys(t),o=a.length,n=0;n\u003Co;n++)e.call(i,t[a[n]],a[n])}function it(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i\u003Cs;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function st(t){if(X(t))return t.map(st);if(q(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n\u003Cs;++n)e[i[n]]=st(t[i[n]]);return e}return t}function nt(t){return-1===[\"__proto__\",\"prototype\",\"constructor\"].indexOf(t)}function ot(t,e,i,s){if(!nt(t))return;const n=e[t],o=i[t];q(n)&&q(o)?at(n,o,s):e[t]=st(o)}function at(t,e,i){const s=X(e)?e:[e],n=s.length;if(!q(t))return t;const o=(i=i||{}).merger||ot;for(let a=0;a\u003Cn;++a){if(!q(e=s[a]))continue;const n=Object.keys(e);for(let s=0,a=n.length;s\u003Ca;++s)o(n[s],t,e,i)}return t}function rt(t,e){return at(t,e,{merger:lt})}function lt(t,e,i){if(!nt(t))return;const s=e[t],n=i[t];q(s)&&q(n)?rt(s,n):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=st(n))}function ht(t,e){const i=t.indexOf(\".\",e);return-1===i?t.length:i}function ct(t,e){if(\"\"===e)return t;let i=0,s=ht(e,i);for(;t&&s>i;)t=t[e.slice(i,s)],i=s+1,s=ht(e,i);return t}function dt(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ut=t=>void 0!==t,ft=t=>\"function\"==typeof t,gt=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function pt(t){return\"mouseup\"===t.type||\"click\"===t.type||\"contextmenu\"===t.type}const mt=Object.create(null),bt=Object.create(null);function xt(t,e){if(!e)return t;const i=e.split(\".\");for(let e=0,s=i.length;e\u003Cs;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function _t(t,e,i){return\"string\"==typeof e?at(xt(t,e),i):at(xt(t,\"\"),e)}var yt=new class{constructor(t){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>j(e.backgroundColor),this.hoverBorderColor=(t,e)=>j(e.borderColor),this.hoverColor=(t,e)=>j(e.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return _t(this,t,e)}get(t){return xt(this,t)}describe(t,e){return _t(bt,t,e)}override(t,e){return _t(mt,t,e)}route(t,e,i,s){const n=xt(this,t),o=xt(this,i),a=\"_\"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return q(t)?Object.assign({},e,t):Z(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith(\"on\"),_indexable:t=>\"events\"!==t,hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}});function vt(t,e,i){i=i||(i=>t[i]\u003Ce);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const wt=(t,e,i)=>vt(t,i,(s=>t[s][e]\u003Ci)),Mt=(t,e,i)=>vt(t,i,(s=>t[s][e]>=i));function kt(t,e,i){let s=0,n=t.length;for(;s\u003Cn&&t[s]\u003Ce;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n\u003Ct.length?t.slice(s,n):t}const St=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function Pt(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),St.forEach((e=>{const i=\"_onData\"+dt(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{\"function\"==typeof t[i]&&t[i](...e)})),n}})})))}function Dt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(St.forEach((e=>{delete t[e]})),delete t._chartjs)}function Ct(t){const e=new Set;let i,s;for(i=0,s=t.length;i\u003Cs;++i)e.add(t[i]);return e.size===s?t:Array.from(e)}const Ot=Math.PI,At=2*Ot,Tt=At+Ot,Lt=Number.POSITIVE_INFINITY,Rt=Ot\u002F180,Et=Ot\u002F2,It=Ot\u002F4,zt=2*Ot\u002F3,Ft=Math.log10,Bt=Math.sign;function Vt(t){const e=Math.round(t);t=Ht(t,e,t\u002F1e3)?e:t;const i=Math.pow(10,Math.floor(Ft(t))),s=t\u002Fi;return(s\u003C=1?1:s\u003C=2?2:s\u003C=5?5:10)*i}function Nt(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s\u003Ci;s++)t%s==0&&(e.push(s),e.push(t\u002Fs));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function Wt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Ht(t,e,i){return Math.abs(t-e)\u003Ci}function jt(t,e){const i=Math.round(t);return i-e\u003C=t&&i+e>=t}function $t(t,e,i){let s,n,o;for(s=0,n=t.length;s\u003Cn;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function Yt(t){return t*(Ot\u002F180)}function Ut(t){return t*(180\u002FOt)}function Xt(t){if(!K(t))return;let e=1,i=0;for(;Math.round(t*e)\u002Fe!==t;)e*=10,i++;return i}function qt(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o\u003C-.5*Ot&&(o+=At),{angle:o,distance:n}}function Kt(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function Gt(t,e){return(t-e+Tt)%At-Ot}function Zt(t){return(t%At+At)%At}function Jt(t,e,i,s){const n=Zt(t),o=Zt(e),a=Zt(i),r=Zt(o-n),l=Zt(a-n),h=Zt(n-o),c=Zt(n-a);return n===o||n===a||s&&o===a||r>l&&h\u003Cc}function Qt(t,e,i){return Math.max(e,Math.min(i,t))}function te(t){return Qt(t,-32768,32767)}function ee(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t\u003C=Math.max(e,i)+s}function ie(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document}function se(t){let e=t.parentNode;return e&&\"[object ShadowRoot]\"===e.toString()&&(e=e.host),e}function ne(t,e,i){let s;return\"string\"==typeof t?(s=parseInt(t,10),-1!==t.indexOf(\"%\")&&(s=s\u002F100*e.parentNode[i])):s=t,s}const oe=t=>window.getComputedStyle(t,null);function ae(t,e){return oe(t).getPropertyValue(e)}const re=[\"top\",\"right\",\"bottom\",\"left\"];function le(t,e,i){const s={};i=i?\"-\"+i:\"\";for(let n=0;n\u003C4;n++){const o=re[n];s[o]=parseFloat(t[e+\"-\"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function he(t,e){if(\"native\"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=oe(i),o=\"border-box\"===n.boxSizing,a=le(n,\"padding\"),r=le(n,\"border\",\"width\"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)\u002Ff*i.width\u002Fs),y:Math.round((h-u)\u002Fg*i.height\u002Fs)}}const ce=t=>Math.round(10*t)\u002F10;function de(t,e,i,s){const n=oe(t),o=le(n,\"margin\"),a=ne(n.maxWidth,t,\"clientWidth\")||Lt,r=ne(n.maxHeight,t,\"clientHeight\")||Lt,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=se(t);if(o){const t=o.getBoundingClientRect(),a=oe(o),r=le(a,\"border\",\"width\"),l=le(a,\"padding\");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=ne(a.maxWidth,o,\"clientWidth\"),n=ne(a.maxHeight,o,\"clientHeight\")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||Lt,maxHeight:n||Lt}}(t,e,i);let{width:h,height:c}=l;if(\"content-box\"===n.boxSizing){const t=le(n,\"border\",\"width\"),e=le(n,\"padding\");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h\u002Fs):c-o.height),h=ce(Math.min(h,a,l.maxWidth)),c=ce(Math.min(c,r,l.maxHeight)),h&&!c&&(c=ce(h\u002F2)),{width:h,height:c}}function ue(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n\u002Fs,t.width=o\u002Fs;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const fe=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(t){}return t}();function ge(t,e){const i=ae(t,e),s=i&&i.match(\u002F^(\\d+)(\\.\\d+)?px$\u002F);return s?+s[1]:void 0}function pe(t){return!t||U(t.size)||U(t.family)?null:(t.style?t.style+\" \":\"\")+(t.weight?t.weight+\" \":\"\")+t.size+\"px \"+t.family}function me(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function be(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;l\u003Cr;l++)if(d=i[l],null!=d&&!0!==X(d))a=me(t,n,o,a,d);else if(X(d))for(h=0,c=d.length;h\u003Cc;h++)u=d[h],null==u||X(u)||(a=me(t,n,o,a,u));t.restore();const f=o.length\u002F2;if(f>i.length){for(l=0;l\u003Cf;l++)delete n[o[l]];o.splice(0,f)}return a}function xe(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i\u002F2,.5):0;return Math.round((e-n)*s)\u002Fs+n}function _e(t,e){(e=e||t.getContext(\"2d\")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function ye(t,e,i,s){let n,o,a,r,l;const h=e.pointStyle,c=e.rotation,d=e.radius;let u=(c||0)*Rt;if(h&&\"object\"==typeof h&&(n=h.toString(),\"[object HTMLImageElement]\"===n||\"[object HTMLCanvasElement]\"===n))return t.save(),t.translate(i,s),t.rotate(u),t.drawImage(h,-h.width\u002F2,-h.height\u002F2,h.width,h.height),void t.restore();if(!(isNaN(d)||d\u003C=0)){switch(t.beginPath(),h){default:t.arc(i,s,d,0,At),t.closePath();break;case\"triangle\":t.moveTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=zt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),u+=zt,t.lineTo(i+Math.sin(u)*d,s-Math.cos(u)*d),t.closePath();break;case\"rectRounded\":l=.516*d,r=d-l,o=Math.cos(u+It)*r,a=Math.sin(u+It)*r,t.arc(i-o,s-a,l,u-Ot,u-Et),t.arc(i+a,s-o,l,u-Et,u),t.arc(i+o,s+a,l,u,u+Et),t.arc(i-a,s+o,l,u+Et,u+Ot),t.closePath();break;case\"rect\":if(!c){r=Math.SQRT1_2*d,t.rect(i-r,s-r,2*r,2*r);break}u+=It;case\"rectRot\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+a,s-o),t.lineTo(i+o,s+a),t.lineTo(i-a,s+o),t.closePath();break;case\"crossRot\":u+=It;case\"cross\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case\"star\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o),u+=It,o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a),t.moveTo(i+a,s-o),t.lineTo(i-a,s+o);break;case\"line\":o=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-o,s-a),t.lineTo(i+o,s+a);break;case\"dash\":t.moveTo(i,s),t.lineTo(i+Math.cos(u)*d,s+Math.sin(u)*d)}t.fill(),e.borderWidth>0&&t.stroke()}}function ve(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x\u003Ce.right+i&&t.y>e.top-i&&t.y\u003Ce.bottom+i}function we(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function Me(t){t.restore()}function ke(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if(\"middle\"===n){const s=(e.x+i.x)\u002F2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else\"after\"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function Se(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function Pe(t,e,i,s,n,o={}){const a=X(e)?e:[e],r=o.strokeWidth>0&&\"\"!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);U(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;l\u003Ca.length;++l)h=a[l],r&&(o.strokeColor&&(t.strokeStyle=o.strokeColor),U(o.strokeWidth)||(t.lineWidth=o.strokeWidth),t.strokeText(h,i,s,o.maxWidth)),t.fillText(h,i,s,o.maxWidth),De(t,i,s,h,o),s+=n.lineHeight;t.restore()}function De(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)\u002F2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function Ce(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,-Et,Ot,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,Ot,Et,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,Et,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-Et,!0),t.lineTo(i+a.topLeft,s)}function Oe(t,e=[\"\"],i=t,s,n=(()=>t[0])){ut(s)||(s=Ne(\"_fallback\",t));const o={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>Oe([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Ee(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=Ne(Le(o,t),i),ut(n))return Re(t,n)?Be(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>We(t).includes(e),ownKeys:t=>We(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Ae(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Te(t,s),setContext:e=>Ae(t,e,i,s),override:n=>Ae(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ee(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];ft(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error(\"Recursion detected: \"+Array.from(r).join(\"->\")+\"->\"+t);r.add(t),e=e(o,a||s),r.delete(t),Re(t,e)&&(e=Be(n._scopes,n,t,e));return e}(e,r,t,i));X(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(ut(o.index)&&s(t))e=e[o.index%e.length];else if(q(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=Be(s,n,t,l);e.push(Ae(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Re(e,r)&&(r=Ae(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Te(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:ft(i)?i:()=>i,isIndexable:ft(s)?s:()=>s}}const Le=(t,e)=>t?t+dt(e):e,Re=(t,e)=>q(e)&&\"adapters\"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Ee(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Ie(t,e,i){return ft(t)?t(e,i):t}const ze=(t,e)=>!0===t?e:\"string\"==typeof t?ct(e,t):void 0;function Fe(t,e,i,s,n){for(const o of e){const e=ze(i,o);if(e){t.add(e);const o=Ie(e._fallback,i,n);if(ut(o)&&o!==i&&o!==s)return o}else if(!1===e&&ut(s)&&i!==s)return null}return!1}function Be(t,e,i,s){const n=e._rootScopes,o=Ie(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=Ve(r,a,i,o||i,s);return null!==l&&((!ut(o)||o===i||(l=Ve(r,a,o,l,s),null!==l))&&Oe(Array.from(r),[\"\"],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(X(n)&&q(i))return i;return n}(e,i,s))))}function Ve(t,e,i,s,n){for(;i;)i=Fe(t,e,i,s,n);return i}function Ne(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ut(e))return e}}function We(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith(\"_\"))))e.add(t);return Array.from(e)}(t._scopes)),e}function He(t,e,i,s){const{iScale:n}=t,{key:o=\"r\"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;r\u003Cl;++r)h=r+i,c=e[h],a[r]={r:n.parse(ct(c,o),h)};return a}const je=Number.EPSILON||1e-14,$e=(t,e)=>e\u003Ct.length&&!t[e].skip&&t[e],Ye=t=>\"x\"===t?\"y\":\"x\";function Ue(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Kt(o,n),l=Kt(a,o);let h=r\u002F(r+l),c=l\u002F(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Xe(t,e=\"x\"){const i=Ye(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=$e(t,0);for(a=0;a\u003Cs;++a)if(r=l,l=h,h=$e(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])\u002Ft:0}o[a]=r?h?Bt(n[a-1])!==Bt(n[a])?0:(n[a-1]+n[a])\u002F2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=$e(t,0);for(let c=0;c\u003Cs-1;++c)l=h,h=$e(t,c+1),l&&h&&(Ht(e[c],0,je)?i[c]=i[c+1]=0:(n=i[c]\u002Fe[c],o=i[c+1]\u002Fe[c],r=Math.pow(n,2)+Math.pow(o,2),r\u003C=9||(a=3\u002FMath.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i=\"x\"){const s=Ye(i),n=t.length;let o,a,r,l=$e(t,0);for(let h=0;h\u003Cn;++h){if(a=r,r=l,l=$e(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])\u002F3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)\u002F3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function qe(t,e,i){return Math.max(Math.min(t,i),e)}function Ke(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),\"monotone\"===e.cubicInterpolationMode)Xe(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o\u003Ca;++o)r=t[o],l=Ue(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=ve(t[0],e);for(i=0,s=t.length;i\u003Cs;++i)a=o,o=r,r=i\u003Cs-1&&ve(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=qe(n.cp1x,e.left,e.right),n.cp1y=qe(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=qe(n.cp2x,e.left,e.right),n.cp2y=qe(n.cp2y,e.top,e.bottom)))}(t,i)}const Ge=t=>0===t||1===t,Ze=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*At\u002Fi),Je=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*At\u002Fi)+1,Qe={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t\u002F=.5)\u003C1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t\u002F=.5)\u003C1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*Et),easeOutSine:t=>Math.sin(t*Et),easeInOutSine:t=>-.5*(Math.cos(Ot*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Ge(t)?t:t\u003C.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t\u002F=.5)\u003C1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Ge(t)?t:Ze(t,.075,.3),easeOutElastic:t=>Ge(t)?t:Je(t,.075,.3),easeInOutElastic(t){const e=.1125;return Ge(t)?t:t\u003C.5?.5*Ze(2*t,e,.45):.5+.5*Je(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t\u002F=.5)\u003C1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Qe.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t\u003C1\u002Fi?e*t*t:t\u003C2\u002Fi?e*(t-=1.5\u002Fi)*t+.75:t\u003C2.5\u002Fi?e*(t-=2.25\u002Fi)*t+.9375:e*(t-=2.625\u002Fi)*t+.984375},easeInOutBounce:t=>t\u003C.5?.5*Qe.easeInBounce(2*t):.5*Qe.easeOutBounce(2*t-1)+.5};function ti(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function ei(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:\"middle\"===s?i\u003C.5?t.y:e.y:\"after\"===s?i\u003C1?t.y:e.y:i>0?e.y:t.y}}function ii(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ti(t,n,i),r=ti(n,o,i),l=ti(o,e,i),h=ti(a,r,i),c=ti(r,l,i);return ti(h,c,i)}const si=new Map;function ni(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=si.get(i);return s||(s=new Intl.NumberFormat(t,e),si.set(i,s)),s}(e,i).format(t)}const oi=new RegExp(\u002F^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$\u002F),ai=new RegExp(\u002F^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$\u002F);function ri(t,e){const i=(\"\"+t).match(oi);if(!i||\"normal\"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case\"px\":return t;case\"%\":t\u002F=100}return e*t}function li(t,e){const i={},s=q(e),n=s?Object.keys(e):e,o=q(t)?s?i=>Z(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function hi(t){return li(t,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function ci(t){return li(t,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function di(t){const e=hi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function ui(t,e){t=t||{},e=e||yt.font;let i=Z(t.size,e.size);\"string\"==typeof i&&(i=parseInt(i,10));let s=Z(t.style,e.style);s&&!(\"\"+s).match(ai)&&(console.warn('Invalid font style specified: \"'+s+'\"'),s=\"\");const n={family:Z(t.family,e.family),lineHeight:ri(Z(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:Z(t.weight,e.weight),string:\"\"};return n.string=pe(n),n}function fi(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;n\u003Co;++n)if(a=t[n],void 0!==a&&(void 0!==e&&\"function\"==typeof a&&(a=a(e),r=!1),void 0!==i&&X(a)&&(a=a[i%a.length],r=!1),void 0!==a))return s&&!r&&(s.cacheable=!1),a}function gi(t,e,i){const{min:s,max:n}=t,o=Q(e,(n-s)\u002F2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function pi(t,e){return Object.assign(Object.create(t),e)}function mi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>\"center\"===t?t:\"right\"===t?\"left\":\"right\",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function bi(t,e){let i,s;\"ltr\"!==e&&\"rtl\"!==e||(i=t.canvas.style,s=[i.getPropertyValue(\"direction\"),i.getPropertyPriority(\"direction\")],i.setProperty(\"direction\",e,\"important\"),t.prevTextDirection=s)}function xi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty(\"direction\",e[0],e[1]))}function _i(t){return\"angle\"===t?{between:Jt,compare:Gt,normalize:Zt}:{between:ee,compare:(t,e)=>t-e,normalize:t=>t}}function yi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function vi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=_i(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=_i(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h\u003Cc&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u\u003Cd&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,b,x=!1,_=null;const y=()=>x||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t\u003C=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(yi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(yi({start:_,end:d,loop:u,count:a,style:f})),g}function wi(t,e){const i=[],s=t.segments;for(let n=0;n\u003Cs.length;n++){const o=vi(s[n],t.points,e);o.length&&i.push(...o)}return i}function Mi(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n\u003Ce&&!t[n].skip;)n++;for(;n\u003Ce&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return ki(t,[{start:a,end:r,loop:o}],i,e);return ki(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a\u003C=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r\u003Ca?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function ki(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=Si(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u\u003C=t.end;u++){const r=i[u%l];e=Si(s.setContext(pi(n,{type:\"segment\",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),Pi(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d\u003Cu-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function Si(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Pi(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Di=Object.freeze({__proto__:null,easingEffects:Qe,isPatternOrGradient:W,color:H,getHoverColor:j,noop:$,uid:Y,isNullOrUndef:U,isArray:X,isObject:q,isFinite:K,finiteOrDefault:G,valueOrDefault:Z,toPercentage:J,toDimension:Q,callback:tt,each:et,_elementsEqual:it,clone:st,_merger:ot,merge:at,mergeIf:rt,_mergerIf:lt,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': \"'+i+'\" is deprecated. Please use \"'+s+'\" instead')},resolveObjectKey:ct,_capitalize:dt,defined:ut,isFunction:ft,setsEqual:gt,_isClickEvent:pt,toFontString:pe,_measureText:me,_longestText:be,_alignPixel:xe,clearCanvas:_e,drawPoint:ye,_isPointInArea:ve,clipArea:we,unclipArea:Me,_steppedLineTo:ke,_bezierCurveTo:Se,renderText:Pe,addRoundedRectPath:Ce,_lookup:vt,_lookupByKey:wt,_rlookupByKey:Mt,_filterBetween:kt,listenArrayEvents:Pt,unlistenArrayEvents:Dt,_arrayUnique:Ct,_createResolver:Oe,_attachContext:Ae,_descriptors:Te,_parseObjectDataRadialScale:He,splineCurve:Ue,splineCurveMonotone:Xe,_updateBezierControlPoints:Ke,_isDomSupported:ie,_getParentNode:se,getStyle:ae,getRelativePosition:he,getMaximumSize:de,retinaScale:ue,supportsEventListenerOptions:fe,readUsedSize:ge,fontString:function(t,e,i){return e+\" \"+t+\"px \"+i},requestAnimFrame:t,throttled:e,debounce:i,_toLeftRightCenter:s,_alignStartEnd:n,_textX:o,_pointInLine:ti,_steppedInterpolation:ei,_bezierInterpolation:ii,formatNumber:ni,toLineHeight:ri,_readValueToProps:li,toTRBL:hi,toTRBLCorners:ci,toPadding:di,toFont:ui,resolve:fi,_addGrace:gi,createContext:pi,PI:Ot,TAU:At,PITAU:Tt,INFINITY:Lt,RAD_PER_DEG:Rt,HALF_PI:Et,QUARTER_PI:It,TWO_THIRDS_PI:zt,log10:Ft,sign:Bt,niceNum:Vt,_factorize:Nt,isNumber:Wt,almostEquals:Ht,almostWhole:jt,_setMinAndMaxByKey:$t,toRadians:Yt,toDegrees:Ut,_decimalPlaces:Xt,getAngleFromPoint:qt,distanceBetweenPoints:Kt,_angleDiff:Gt,_normalizeAngle:Zt,_angleBetween:Jt,_limitValue:Qt,_int16Range:te,_isBetween:ee,getRtlAdapter:mi,overrideTextDirection:bi,restoreTextDirection:xi,_boundSegment:vi,_boundSegments:wi,_computeSegments:Mi});function Ci(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&\"r\"!==e&&a&&o.length){const t=r._reversePixels?Mt:wt;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n=\"function\"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Oi(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t\u003Ci;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=Ci(o[t],e,a,n);for(let t=l;t\u003C=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Ai(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;return Oi(t,i,e,(function(i,a,r){(n||ve(i,t.chartArea,0))&&i.inRange(e.x,e.y,s)&&o.push({element:i,datasetIndex:a,index:r})}),!0),o}function Ti(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.indexOf(\"x\"),i=-1!==t.indexOf(\"y\");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let l=Number.POSITIVE_INFINITY;return Oi(t,i,e,(function(i,h,c){const d=i.inRange(e.x,e.y,n);if(s&&!d)return;const u=i.getCenterPoint(n);if(!(!!o||t.isPointInArea(u))&&!d)return;const f=r(e,u);f\u003Cl?(a=[{element:i,datasetIndex:h,index:c}],l=f):f===l&&a.push({element:i,datasetIndex:h,index:c})})),a}function Li(t,e,i,s,n,o){return o||t.isPointInArea(e)?\"r\"!==i||s?Ti(t,e,i,s,n,o):function(t,e,i,s){let n=[];return Oi(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps([\"startAngle\",\"endAngle\"],s),{angle:l}=qt(t,{x:e.x,y:e.y});Jt(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function Ri(t,e,i,s,n){const o=[],a=\"x\"===i?\"inXRange\":\"inYRange\";let r=!1;return Oi(t,i,e,((t,s,l)=>{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Ei={evaluateInteractionItems:Oi,modes:{index(t,e,i,s){const n=he(e,t),o=i.axis||\"x\",a=i.includeInvisible||!1,r=i.intersect?Ai(t,n,o,s,a):Li(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=he(e,t),o=i.axis||\"xy\",a=i.includeInvisible||!1;let r=i.intersect?Ai(t,n,o,s,a):Li(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;t\u003Ci.length;++t)r.push({element:i[t],datasetIndex:e,index:t})}return r},point:(t,e,i,s)=>Ai(t,he(e,t),i.axis||\"xy\",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=he(e,t),o=i.axis||\"xy\",a=i.includeInvisible||!1;return Li(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Ri(t,he(e,t),\"x\",i.intersect,s),y:(t,e,i,s)=>Ri(t,he(e,t),\"y\",i.intersect,s)}};const Ii=[\"left\",\"top\",\"right\",\"bottom\"];function zi(t,e){return t.filter((t=>t.pos===e))}function Fi(t,e){return t.filter((t=>-1===Ii.indexOf(t.pos)&&t.box.axis===e))}function Bi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Vi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ii.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o\u003Ca;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight\u002Fl.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function Ni(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function Wi(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Hi(t,e,i,s){const{pos:n,box:o}=i,a=t.maxPadding;if(!q(n)){i.size&&(t[n]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?o.height:o.width),i.size=e.size\u002Fe.count,t[n]+=i.size}o.getPadding&&Wi(a,o.getPadding());const r=Math.max(0,e.outerWidth-Ni(a,t,\"left\",\"right\")),l=Math.max(0,e.outerHeight-Ni(a,t,\"top\",\"bottom\")),h=r!==t.w,c=l!==t.h;return t.w=r,t.h=l,i.horizontal?{same:h,other:c}:{same:c,other:h}}function ji(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function $i(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o\u003Ca;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,ji(r.horizontal,e));const{same:a,other:d}=Hi(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&$i(n,e,i,s)||c}function Yi(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function Ui(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight\u002Fl.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;ut(l.start)&&(a=l.start),t.fullSize?Yi(t,n.left,a,i.outerWidth-n.right-n.left,o):Yi(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;ut(l.start)&&(o=l.start),t.fullSize?Yi(t,o,n.top,a,i.outerHeight-n.bottom-n.top):Yi(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}yt.set(\"layout\",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});var Xi={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||\"top\",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=di(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i\u003Cs;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=Bi(e.filter((t=>t.box.fullSize)),!0),s=Bi(zi(e,\"left\"),!0),n=Bi(zi(e,\"right\")),o=Bi(zi(e,\"top\"),!0),a=Bi(zi(e,\"bottom\")),r=Fi(e,\"x\"),l=Fi(e,\"y\");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:zi(e,\"chartArea\"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;et(t.boxes,(t=>{\"function\"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o\u002F2\u002Fc,hBoxMaxHeight:a\u002F2}),u=Object.assign({},n);Wi(u,di(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Vi(l.concat(h),d);$i(r.fullSize,f,d,g),$i(l,f,d,g),$i(h,f,d,g)&&$i(l,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i(\"top\"),t.x+=i(\"left\"),i(\"right\"),i(\"bottom\")}(f),Ui(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,Ui(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},et(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class qi{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e\u002Fs):i)}}isAttached(t){return!0}updateConfig(t){}}class Ki extends qi{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}updateConfig(t){t.options.animation=!1}}const Gi={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},Zi=t=>null===t||\"\"===t;const Ji=!!fe&&{passive:!0};function Qi(t,e,i){t.canvas.removeEventListener(e,i,Ji)}function ts(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function es(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ts(i.addedNodes,s),e=e&&!ts(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function is(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ts(i.removedNodes,s),e=e&&!ts(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const ss=new Map;let ns=0;function os(){const t=window.devicePixelRatio;t!==ns&&(ns=t,ss.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function as(t,i,s){const n=t.canvas,o=n&&se(n);if(!o)return;const a=e(((t,e)=>{const i=o.clientWidth;s(t,e),i\u003Co.clientWidth&&s()}),window),r=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){ss.size||window.addEventListener(\"resize\",os),ss.set(t,e)}(t,a),r}function rs(t,e,i){i&&i.disconnect(),\"resize\"===e&&function(t){ss.delete(t),ss.size||window.removeEventListener(\"resize\",os)}(t)}function ls(t,i,s){const n=t.canvas,o=e((e=>{null!==t.ctx&&s(function(t,e){const i=Gi[t.type]||t.type,{x:s,y:n}=he(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Ji)}(n,i,o),o}class hs extends qi{acquireContext(t,e){const i=t&&t.getContext&&t.getContext(\"2d\");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute(\"height\"),n=t.getAttribute(\"width\");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||\"block\",i.boxSizing=i.boxSizing||\"border-box\",Zi(n)){const e=ge(t,\"width\");void 0!==e&&(t.width=e)}if(Zi(s))if(\"\"===t.style.height)t.height=t.width\u002F(e||2);else{const e=ge(t,\"height\");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;[\"height\",\"width\"].forEach((t=>{const s=i[t];U(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:es,detach:is,resize:as}[e]||ls;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:rs,detach:rs,resize:rs}[e]||Qi)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return de(t,e,i,s)}isAttached(t){const e=se(t);return!(!e||!e.isConnected)}}function cs(t){return!ie()||\"undefined\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Ki:hs}var ds=Object.freeze({__proto__:null,_detectPlatform:cs,BasePlatform:qi,BasicPlatform:Ki,DomPlatform:hs});const us=\"transparent\",fs={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=H(t||us),n=s.valid&&H(e||us);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class gs{constructor(t,e,i,s){const n=e[i];s=fi([t.to,s,n,t.from]);const o=fi([t.from,n,s]);this._active=!0,this._fn=t.fn||fs[t.type||typeof o],this._easing=Qe[t.easing]||Qe.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=fi([t.to,e,s,t.from]),this._from=fi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e\u003Ci),!this._active)return this._target[s]=a,void this._notify(!0);e\u003C0?this._target[s]=n:(r=e\u002Fi%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?\"res\":\"rej\",i=this._promises||[];for(let t=0;t\u003Ci.length;t++)i[t][e]()}}yt.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const ps=Object.keys(yt.animation);yt.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>\"onProgress\"!==t&&\"onComplete\"!==t&&\"fn\"!==t}),yt.set(\"animations\",{colors:{type:\"color\",properties:[\"color\",\"borderColor\",\"backgroundColor\"]},numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"]}}),yt.describe(\"animations\",{_fallback:\"animation\"}),yt.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>0|t}}}});class ms{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!q(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!q(s))return;const n={};for(const t of ps)n[t]=s[t];(X(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e\u003Cs.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if(\"$\"===l.charAt(0))continue;if(\"options\"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new gs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function bs(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function xs(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n\u003Co;++n)i.push(s[n].index);return i}function _s(t,e,i,s={}){const n=t.keys,o=\"single\"===s.mode;let a,r,l,h;if(null!==e){for(a=0,r=n.length;a\u003Cr;++a){if(l=+n[a],l===i){if(s.all)continue;break}h=t.values[l],K(h)&&(o||0===e||Bt(e)===Bt(h))&&(e+=h)}return e}}function ys(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function vs(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function ws(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e\u003C0)return n.index}return null}function Ms(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t\u003Cd;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=vs(n,c,o),u[r]=d,u._top=ws(u,a,!0,s.type),u._bottom=ws(u,a,!1,s.type)}}function ks(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ss(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const Ps=t=>\"reset\"===t||\"none\"===t,Ds=(t,e)=>e?t:Object.assign({},t);class Cs{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ys(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ss(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>\"x\"===t?e:\"r\"===t?s:i,n=e.xAxisID=Z(i.xAxisID,ks(t,\"x\")),o=e.yAxisID=Z(i.yAxisID,ks(t,\"y\")),a=e.rAxisID=Z(i.rAxisID,ks(t,\"r\")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){const t=this._cachedMeta;this._data&&Dt(this._data,this),t._stacked&&Ss(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(q(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s\u003Cn;++s)o=e[s],i[s]={x:o,y:t[o]};return i}(e);else if(i!==e){if(i){Dt(i,this);const t=this._cachedMeta;Ss(t),t._parsed=[]}e&&Object.isExtensible(e)&&Pt(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=ys(e.vScale,e),e.stack!==i.stack&&(s=!0,Ss(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Ms(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,l,h,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=X(s[t])?this.parseArrayData(i,s,t,e):q(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]\u003Cd[a];for(r=0;r\u003Ce;++r)i._parsed[r+t]=l=h[r],c&&(n()&&(c=!1),d=l);i._sorted=c}o&&Ms(this,h)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d\u003Cu;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r\u003Cl;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h\u003Cc;++h)d=h+i,u=e[d],l[h]={x:n.parse(ct(u,a),d),y:o.parse(ct(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return _s({keys:xs(s,!0),values:e._stacks[t.axis]},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=_s(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,o=s.length,a=this._getOtherScale(t),r=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:xs(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!K(u[t.axis])||h>e||c\u003Ce}for(d=0;d\u003Co&&(f()||(this.updateRangeFromParsed(l,t,u,r),!n));++d);if(n)for(d=o-1;d>=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s\u003Cn;++s)o=e[s][t.axis],K(o)&&i.push(o);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?\"\"+i.getLabelForValue(n[i.axis]):\"\",value:s?\"\"+s.getLabelForValue(n[s.axis]):\"\"}}_update(t){const e=this._cachedMeta;this.update(t||\"default\"),e._clip=function(t){let e,i,s,n;return q(t)?(e=t.top,i=t.right,s=t.bottom,n=t.left):e=i=s=n=t,{top:e,right:i,bottom:s,left:n,disabled:!1===t}}(Z(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=bs(t,i),n=bs(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h\u003Ca+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h\u003Co.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?\"active\":\"default\";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t\u003Cthis._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return pi(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:\"default\",type:\"data\"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return pi(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:\"default\",type:\"dataset\"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",i){const s=\"active\"===e,n=this._cachedDataOpts,o=t+\"-\"+e,a=n[o],r=this.enableOptionSharing&&ut(i);if(a)return Ds(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,\"hover\",t,\"\"]:[t,\"\"],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(yt.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ds(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new ms(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ps(t)||this.chart._animationsDisabled}updateElement(t,e,i,s){Ps(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ps(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n\u003Cs&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a\u003Co;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,\"reset\")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Ss(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync([\"_insertElements\",this.getDataset().data.length-t,t])}_onDataPop(){this._sync([\"_removeElements\",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync([\"_removeElements\",0,1])}_onDataSplice(t,e){e&&this._sync([\"_removeElements\",t,e]);const i=arguments.length-2;i&&this._sync([\"_insertElements\",t,i])}_onDataUnshift(){this._sync([\"_insertElements\",0,arguments.length])}}Cs.defaults={},Cs.prototype.datasetElementType=null,Cs.prototype.dataElementType=null;class Os{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}hasValue(){return Wt(this.x)&&Wt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Os.defaults={},Os.defaultRoutes=void 0;const As={values:t=>X(t)?t:\"\"+t,numeric(t,e,i){if(0===t)return\"0\";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e\u003C1e-4||e>1e15)&&(n=\"scientific\"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Ft(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ni(t,s,l)},logarithmic(t,e,i){if(0===t)return\"0\";const s=t\u002FMath.pow(10,Math.floor(Ft(t)));return 1===s||2===s||5===s?As.numeric.call(this,t,e,i):\"\"}};var Ts={formatters:As};function Ls(t,e){const i=t.options.ticks,s=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length\u002Fi+(e?0:1),n=t._maxLength\u002Fi;return Math.floor(Math.min(s,n))}(t),n=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i\u003Cs;i++)t[i].major&&e.push(i);return e}(e):[],o=n.length,a=n[0],r=n[o-1],l=[];if(o>s)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n\u003Ct.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,l,n,o\u002Fs),l;const h=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e\u003C2)return!1;for(s=t[0],i=1;i\u003Ce;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length\u002Fi;if(!s)return Math.max(n,1);const o=Nt(s);for(let t=0,e=o.length-1;t\u003Ce;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(n,e,s);if(o>0){let t,i;const s=o>1?Math.round((r-a)\u002F(o-1)):null;for(Rs(e,l,h,U(s)?0:a-s,a),t=0,i=o-1;t\u003Ci;t++)Rs(e,l,h,n[t],n[t+1]);return Rs(e,l,h,r,U(s)?e.length:r+s),l}return Rs(e,l,h),l}function Rs(t,e,i,s,n){const o=Z(s,0),a=Math.min(Z(n,t.length),t.length);let r,l,h,c=0;for(i=Math.ceil(i),n&&(r=n-s,i=r\u002FMath.floor(r\u002Fi)),h=o;h\u003C0;)c++,h=Math.round(o+c*i);for(l=Math.max(o,0);l\u003Ca;l++)l===h&&(e.push(t[l]),c++,h=Math.round(o+c*i))}yt.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Ts.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),yt.route(\"scale.ticks\",\"color\",\"\",\"color\"),yt.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),yt.route(\"scale.grid\",\"borderColor\",\"\",\"borderColor\"),yt.route(\"scale.title\",\"color\",\"\",\"color\"),yt.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&\"callback\"!==t&&\"parser\"!==t,_indexable:t=>\"borderDash\"!==t&&\"tickBorderDash\"!==t}),yt.describe(\"scales\",{_fallback:\"scale\"}),yt.describe(\"scale.ticks\",{_scriptable:t=>\"backdropPadding\"!==t&&\"callback\"!==t,_indexable:t=>\"backdropPadding\"!==t});const Es=(t,e,i)=>\"top\"===e||\"left\"===e?t[e]+i:t[e]-i;function Is(t,e){const i=[],s=t.length\u002Fe,n=t.length;let o=0;for(;o\u003Cn;o+=s)i.push(t[Math.floor(o)]);return i}function zs(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)\u002F2:(h-t.getPixelForTick(n-1))\u002F2,h+=n\u003Ce?l:-l,h\u003Co-r||h>a+r)))return h}function Fs(t){return t.drawTicks?t.tickLength:0}function Bs(t,e){if(!t.display)return 0;const i=ui(t.font,e),s=di(t.padding);return(X(t.text)?t.text.length:1)*i.lineHeight+s.height}function Vs(t,e,i){let n=s(t);return(i&&\"right\"!==e||!i&&\"right\"===e)&&(n=(t=>\"left\"===t?\"right\":\"right\"===t?\"left\":t)(n)),n}class Ns extends Os{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=G(t,Number.POSITIVE_INFINITY),e=G(e,Number.NEGATIVE_INFINITY),i=G(i,Number.POSITIVE_INFINITY),s=G(s,Number.NEGATIVE_INFINITY),{min:G(t,i),max:G(e,s),minDefined:K(t),maxDefined:K(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;r\u003Cl;++r)e=a[r].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:G(i,G(s,i)),max:G(s,G(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){tt(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=gi(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a\u003Cthis.ticks.length;this._convertTicksToLabels(r?Is(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||\"auto\"===o.source)&&(this.ticks=Ls(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){tt(this.options.afterUpdate,[this])}beforeSetDimensions(){tt(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){tt(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),tt(this.options[t],[this])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){tt(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i\u003Cs;i++)n=t[i],n.label=tt(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){tt(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){tt(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=this.ticks.length,s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i\u003C=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Qt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth\u002Fi:u\u002F(i-1),c+6>o&&(o=u\u002F(i-(t.offset?.5:1)),a=this.maxHeight-Fs(t.grid)-e.padding-Bs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Ut(Math.min(Math.asin(Qt((h.highest.height+6)\u002Fo,-1,1)),Math.asin(Qt(a\u002Fr,-1,1))-Math.asin(Qt(d\u002Fr,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){tt(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){tt(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Bs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Fs(n)+o):(t.height=this.maxHeight,t.width=Fs(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=Yt(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l=\"top\"!==a&&\"x\"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):\"start\"===n?d=e.width:\"end\"===n?c=t.width:\"inner\"!==n&&(c=t.width\u002F2,d=e.width\u002F2),this.paddingLeft=Math.max((c-a+o)*this.width\u002F(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width\u002F(this.width-h),0)}else{let i=e.height\u002F2,s=t.height\u002F2;\"start\"===n?(i=0,s=t.height):\"end\"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){tt(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return\"top\"===e||\"bottom\"===e||\"x\"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e\u003Ci;e++)U(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e\u003Ci.length&&(i=Is(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length)}return t}_computeLabelSizes(t,e){const{ctx:i,_longestTextCache:s}=this,n=[],o=[];let a,r,l,h,c,d,u,f,g,p,m,b=0,x=0;for(a=0;a\u003Ce;++a){if(h=t[a].label,c=this._resolveTickFontOptions(a),i.font=d=c.string,u=s[d]=s[d]||{data:{},gc:[]},f=c.lineHeight,g=p=0,U(h)||X(h)){if(X(h))for(r=0,l=h.length;r\u003Cl;++r)m=h[r],U(m)||X(m)||(g=me(i,u.data,u.gc,g,m),p+=f)}else g=me(i,u.data,u.gc,g,h),p=f;n.push(g),o.push(p),b=Math.max(g,b),x=Math.max(p,x)}!function(t,e){et(t,(t=>{const i=t.gc,s=i.length\u002F2;let n;if(s>e){for(n=0;n\u003Cs;++n)delete t.data[i[n]];i.splice(0,s)}}))}(s,e);const _=n.indexOf(b),y=o.indexOf(x),v=t=>({width:n[t]||0,height:o[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return te(this._alignToPixels?xe(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)\u002Fthis._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t\u003C0&&e\u003C0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t\u003Ce.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return pi(t,{tick:i,index:e,type:\"tick\"})}(this.getContext(),t,i))}return this.$context||(this.$context=pi(this.chart.getContext(),{scale:this,type:\"scale\"}))}_tickSize(){const t=this.options.ticks,e=Yt(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a\u002Fi:r\u002Fs:r*s\u003Ca*i?r\u002Fi:a\u002Fs}_isVisible(){const t=this.options.display;return\"auto\"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,r=this.isHorizontal(),l=this.ticks.length+(a?1:0),h=Fs(n),c=[],d=n.setContext(this.getContext()),u=d.drawBorder?d.borderWidth:0,f=u\u002F2,g=function(t){return xe(i,t,u)};let p,m,b,x,_,y,v,w,M,k,S,P;if(\"top\"===o)p=g(this.bottom),y=this.bottom-h,w=p-f,k=g(t.top)+f,P=t.bottom;else if(\"bottom\"===o)p=g(this.top),k=t.top,P=g(t.bottom)-f,y=p+f,w=this.top+h;else if(\"left\"===o)p=g(this.right),_=this.right-h,v=p-f,M=g(t.left)+f,S=t.right;else if(\"right\"===o)p=g(this.left),M=t.left,S=g(t.right)-f,_=p+f,v=this.left+h;else if(\"x\"===e){if(\"center\"===o)p=g((t.top+t.bottom)\u002F2+.5);else if(q(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}k=t.top,P=t.bottom,y=p+f,w=y+h}else if(\"y\"===e){if(\"center\"===o)p=g((t.left+t.right)\u002F2);else if(q(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}_=p-f,v=_-h,M=t.left,S=t.right}const D=Z(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l\u002FD));for(m=0;m\u003Cl;m+=C){const t=n.setContext(this.getContext(m)),e=t.lineWidth,s=t.color,o=n.borderDash||[],l=t.borderDashOffset,h=t.tickWidth,d=t.tickColor,u=t.tickBorderDash||[],f=t.tickBorderDashOffset;b=zs(this,m,a),void 0!==b&&(x=xe(i,b,e),r?_=v=M=S=x:y=w=k=P=x,c.push({tx1:_,ty1:y,tx2:v,ty2:w,x1:M,y1:k,x2:S,y2:P,width:e,color:s,borderDash:o,borderDashOffset:l,tickWidth:h,tickColor:d,tickBorderDash:u,tickBorderDashOffset:f}))}return this._ticksLength=l,this._borderValue=p,c}_computeLabelItems(t){const e=this.axis,i=this.options,{position:s,ticks:n}=i,o=this.isHorizontal(),a=this.ticks,{align:r,crossAlign:l,padding:h,mirror:c}=n,d=Fs(i.grid),u=d+h,f=c?-h:u,g=-Yt(this.labelRotation),p=[];let m,b,x,_,y,v,w,M,k,S,P,D,C=\"middle\";if(\"top\"===s)v=this.bottom-f,w=this._getXAxisLabelAlignment();else if(\"bottom\"===s)v=this.top+f,w=this._getXAxisLabelAlignment();else if(\"left\"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if(\"right\"===s){const t=this._getYAxisLabelAlignment(d);w=t.textAlign,y=t.x}else if(\"x\"===e){if(\"center\"===s)v=(t.top+t.bottom)\u002F2+u;else if(q(s)){const t=Object.keys(s)[0],e=s[t];v=this.chart.scales[t].getPixelForValue(e)+u}w=this._getXAxisLabelAlignment()}else if(\"y\"===e){if(\"center\"===s)y=(t.left+t.right)\u002F2-u;else if(q(s)){const t=Object.keys(s)[0],e=s[t];y=this.chart.scales[t].getPixelForValue(e)}w=this._getYAxisLabelAlignment(d).textAlign}\"y\"===e&&(\"start\"===r?C=\"top\":\"end\"===r&&(C=\"bottom\"));const O=this._getLabelSizes();for(m=0,b=a.length;m\u003Cb;++m){x=a[m],_=x.label;const t=n.setContext(this.getContext(m));M=this.getPixelForTick(m)+n.labelOffset,k=this._resolveTickFontOptions(m),S=k.lineHeight,P=X(_)?_.length:1;const e=P\u002F2,i=t.color,r=t.textStrokeColor,h=t.textStrokeWidth;let d,u=w;if(o?(y=M,\"inner\"===w&&(u=m===b-1?this.options.reverse?\"left\":\"right\":0===m?this.options.reverse?\"right\":\"left\":\"center\"),D=\"top\"===s?\"near\"===l||0!==g?-P*S+S\u002F2:\"center\"===l?-O.highest.height\u002F2-e*S+S:-O.highest.height+S\u002F2:\"near\"===l||0!==g?S\u002F2:\"center\"===l?O.highest.height\u002F2-e*S:O.highest.height-P*S,c&&(D*=-1)):(v=M,D=(1-P)*S\u002F2),t.showLabelBackdrop){const e=di(t.backdropPadding),i=O.heights[m],s=O.widths[m];let n=v+D-e.top,o=y-e.left;switch(C){case\"middle\":n-=i\u002F2;break;case\"bottom\":n-=i}switch(w){case\"center\":o-=s\u002F2;break;case\"right\":o-=s}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}p.push({rotation:g,label:_,font:k,color:i,strokeColor:r,strokeWidth:h,textOffset:D,textAlign:u,textBaseline:C,translation:[y,v],backdrop:d})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-Yt(this.labelRotation))return\"top\"===t?\"left\":\"right\";let i=\"center\";return\"start\"===e.align?i=\"left\":\"end\"===e.align?i=\"right\":\"inner\"===e.align&&(i=\"inner\"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return\"left\"===e?s?(l=this.right+n,\"near\"===i?r=\"left\":\"center\"===i?(r=\"center\",l+=a\u002F2):(r=\"right\",l+=a)):(l=this.right-o,\"near\"===i?r=\"right\":\"center\"===i?(r=\"center\",l-=a\u002F2):(r=\"left\",l=this.left)):\"right\"===e?s?(l=this.left+n,\"near\"===i?r=\"right\":\"center\"===i?(r=\"center\",l-=a\u002F2):(r=\"left\",l-=a)):(l=this.left+o,\"near\"===i?r=\"left\":\"center\"===i?(r=\"center\",l+=a\u002F2):(r=\"right\",l=this.right)):r=\"right\",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return\"left\"===e||\"right\"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:\"top\"===e||\"bottom\"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n\u003Co;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{grid:i}}=this,s=i.setContext(this.getContext()),n=i.drawBorder?s.borderWidth:0;if(!n)return;const o=i.setContext(this.getContext(0)).lineWidth,a=this._borderValue;let r,l,h,c;this.isHorizontal()?(r=xe(t,this.left,n)-n\u002F2,l=xe(t,this.right,o)+o\u002F2,h=c=a):(h=xe(t,this.top,n)-n\u002F2,c=xe(t,this.bottom,o)+o\u002F2,r=l=a),e.save(),e.lineWidth=s.borderWidth,e.strokeStyle=s.borderColor,e.beginPath(),e.moveTo(r,h),e.lineTo(l,c),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&we(e,i);const s=this._labelItems||(this._labelItems=this._computeLabelItems(t));let n,o;for(n=0,o=s.length;n\u003Co;++n){const t=s[n],i=t.font,o=t.label;t.backdrop&&(e.fillStyle=t.backdrop.color,e.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),Pe(e,o,0,t.textOffset,i,t)}i&&Me(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:s}}=this;if(!i.display)return;const o=ui(i.font),a=di(i.padding),r=i.align;let l=o.lineHeight\u002F2;\"bottom\"===e||\"center\"===e||q(e)?(l+=a.bottom,X(i.text)&&(l+=o.lineHeight*(i.text.length-1))):l+=a.top;const{titleX:h,titleY:c,maxWidth:d,rotation:u}=function(t,e,i,s){const{top:o,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-o,b=l-a;if(t.isHorizontal()){if(f=n(s,a,l),q(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g=\"center\"===i?(c.bottom+c.top)\u002F2+m-e:Es(t,i,e);u=l-a}else{if(q(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-b+e}else f=\"center\"===i?(c.left+c.right)\u002F2-b+e:Es(t,i,e);g=n(s,r,o),p=\"left\"===i?-Et:Et}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,l,e,r);Pe(t,i.text,0,0,o,{color:i.color,maxWidth:d,rotation:u,textAlign:Vs(r,e,s),textBaseline:\"middle\",translation:[h,c]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=Z(t.grid&&t.grid.z,-1);return this._isVisible()&&this.draw===Ns.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+\"AxisID\",s=[];let n,o;for(n=0,o=e.length;n\u003Co;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return ui(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)\u002Ft}}class Ws{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return\"id\"in t&&\"defaults\"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+\".\"+n;if(!n)throw new Error(\"class does not have id: \"+t);return n in s||(s[n]=t,function(t,e,i){const s=at(Object.create(null),[i?yt.get(i):{},yt.get(e),t.defaults]);yt.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split(\".\"),n=s.pop(),o=[t].concat(s).join(\".\"),a=e[i].split(\".\"),r=a.pop(),l=a.join(\".\");yt.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&yt.describe(e,t.descriptors)}(t,o,i),this.override&&yt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in yt[s]&&(delete yt[s][i],this.override&&delete mt[i])}}var Hs=new class{constructor(){this.controllers=new Ws(Cs,\"datasets\",!0),this.elements=new Ws(Os,\"elements\"),this.plugins=new Ws(Object,\"plugins\"),this.scales=new Ws(Ns,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):et(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=dt(t);tt(i[\"before\"+s],[],i),e[t](i),tt(i[\"after\"+s],[],i)}_getRegistryForType(t){for(let e=0;e\u003Cthis._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('\"'+t+'\" is not a registered '+i+\".\");return s}};class js{constructor(){this._init=[]}notify(t,e,i,s){\"beforeInit\"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,\"install\"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return\"afterDestroy\"===e&&(this._notify(n,t,\"stop\"),this._notify(this._init,t,\"uninstall\")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===tt(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){U(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=Z(i.options&&i.options.plugins,{}),n=function(t){const e=[],i=Object.keys(Hs.plugins.items);for(let t=0;t\u003Ci.length;t++)e.push(Hs.getPlugin(i[t]));const s=t.plugins||[];for(let t=0;t\u003Cs.length;t++){const i=s[t];-1===e.indexOf(i)&&e.push(i)}return e}(i);return!1!==s||e?function(t,e,i,s){const n=[],o=t.getContext();for(let a=0;a\u003Ce.length;a++){const r=e[a],l=$s(i[r.id],s);null!==l&&n.push({plugin:r,options:Ys(t.config,r,l,o)})}return n}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,\"stop\"),this._notify(s(i,e),t,\"start\")}}function $s(t,e){return e||!1!==t?!0===t?{}:t:null}function Ys(t,e,i,s){const n=t.pluginScopeKeys(e),o=t.getOptionScopes(i,n);return t.createResolver(o,s,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function Us(t,e){const i=yt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||\"x\"}function Xs(t,e){return\"x\"===t||\"y\"===t?t:e.axis||(\"top\"===(i=e.position)||\"bottom\"===i?\"x\":\"left\"===i||\"right\"===i?\"y\":void 0)||t.charAt(0).toLowerCase();var i}function qs(t){const e=t.options||(t.options={});e.plugins=Z(e.plugins,{}),e.scales=function(t,e){const i=mt[t.type]||{scales:{}},s=e.scales||{},n=Us(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!q(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=Xs(t,e),l=function(t,e){return t===e?\"_index_\":\"_value_\"}(r,n),h=i.scales||{};o[r]=o[r]||t,a[t]=rt(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||Us(n,e),l=(mt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return\"_index_\"===t?i=e:\"_value_\"===t&&(i=\"x\"===e?\"y\":\"x\"),i}(t,r),n=i[e+\"AxisID\"]||o[e]||e;a[n]=a[n]||Object.create(null),rt(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];rt(e,[yt.scales[e.type],yt.scale])})),a}(t,e)}function Ks(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Gs=new Map,Zs=new Set;function Js(t,e){let i=Gs.get(t);return i||(i=e(),Gs.set(t,i),Zs.add(i)),i}const Qs=(t,e,i)=>{const s=ct(e,i);void 0!==s&&t.add(s)};class tn{constructor(t){this._config=function(t){return(t=t||{}).data=Ks(t.data),qs(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Ks(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),qs(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Js(t,(()=>[[`datasets.${t}`,\"\"]]))}datasetAnimationScopeKeys(t,e){return Js(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,\"\"]]))}datasetElementScopeKeys(t,e){return Js(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,\"\"]]))}pluginScopeKeys(t){const e=t.id;return Js(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Qs(r,t,e)))),e.forEach((t=>Qs(r,s,t))),e.forEach((t=>Qs(r,mt[n]||{},t))),e.forEach((t=>Qs(r,yt,t))),e.forEach((t=>Qs(r,bt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Zs.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,mt[e]||{},yt.datasets[e]||{},{type:e},yt,bt]}resolveNamedOptions(t,e,i,s=[\"\"]){const n={$shared:!0},{resolver:o,subPrefixes:a}=en(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=Te(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(ft(a)||sn(a))||o&&X(a))return!0}return!1}(o,e)){n.$shared=!1;r=Ae(o,i=ft(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[\"\"],s){const{resolver:n}=en(this._resolverCache,t,i);return q(e)?Ae(n,e,void 0,s):n}}function en(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Oe(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes(\"hover\")))},s.set(n,o)}return o}const sn=t=>q(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||ft(t[i])),!1);const nn=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function on(t,e){return\"top\"===t||\"bottom\"===t||-1===nn.indexOf(t)&&\"x\"===e}function an(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function rn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins(\"afterRender\"),tt(i&&i.onComplete,[t],e)}function ln(t){const e=t.chart,i=e.options.animation;tt(i&&i.onProgress,[t],e)}function hn(t){return ie()&&\"string\"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const cn={},dn=t=>{const e=hn(t);return Object.values(cn).filter((t=>t.canvas===e)).pop()};function un(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class fn{constructor(t,e){const s=this.config=new tn(e),n=hn(t),o=dn(n);if(o)throw new Error(\"Canvas is already in use. Chart with ID '\"+o.id+\"' must be destroyed before the canvas can be reused.\");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||cs(n)),this.platform.updateConfig(s);const l=this.platform.acquireContext(n,r.aspectRatio),h=l&&l.canvas,c=h&&h.height,d=h&&h.width;this.id=Y(),this.ctx=l,this.canvas=h,this.width=d,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new js,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],cn[this.id]=this,l&&h?(a.listen(this,\"complete\",rn),a.listen(this,\"progress\",ln),this._initialize(),this.attached&&this.update()):console.error(\"Failed to create chart: can't acquire context from the given item\")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return U(t)?e&&n?n:s?i\u002Fs:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins(\"beforeInit\"),this.options.responsive?this.resize():ue(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(\"afterInit\"),this}clear(){return _e(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?\"resize\":\"attach\";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ue(this,a,!0)&&(this.notifyPlugins(\"resize\",{size:o}),tt(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){et(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Xs(t,i),n=\"r\"===s,o=\"x\"===s;return{options:i,dposition:n?\"chartArea\":o?\"bottom\":\"left\",dtype:n?\"radialLinear\":o?\"category\":\"linear\"}})))),et(n,(e=>{const n=e.options,o=n.id,a=Xs(o,n),r=Z(n.type,e.dtype);void 0!==n.position&&on(n.position,a)===on(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;if(o in i&&i[o].type===r)l=i[o];else{l=new(Hs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l}l.init(n,t)})),et(s,((t,e)=>{t||delete i[e]})),et(i,(t=>{Xi.configure(this,t,t.options),Xi.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t\u003Ci;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(an(\"order\",\"index\"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i\u003Cs;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||Us(o,this.options),n.order=s.order||0,n.index=i,n.label=\"\"+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=Hs.getController(o),{datasetElementType:s,dataElementType:a}=yt.datasets[o];Object.assign(e.prototype,{dataElementType:Hs.getElement(a),datasetElementType:s&&Hs.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){et(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins(\"beforeElementsUpdate\");let o=0;for(let t=0,e=this.data.datasets.length;t\u003Ce;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||et(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins(\"afterUpdate\",{mode:t}),this._layers.sort(an(\"z\",\"_idx\"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){et(this.scales,(t=>{Xi.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);gt(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){un(t,s,\"_removeElements\"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+\",\"+t.splice(1).join(\",\")))),s=i(0);for(let t=1;t\u003Ce;t++)if(!gt(s,i(t)))return;return Array.from(s).map((t=>t.split(\",\"))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins(\"beforeLayout\",{cancelable:!0}))return;Xi.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width\u003C=0||e.height\u003C=0;this._layers=[],et(this.boxes,(t=>{i&&\"chartArea\"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins(\"afterLayout\")}_updateDatasets(t){if(!1!==this.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t\u003Ce;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e\u003Ci;++e)this._updateDataset(e,ft(t)?t({datasetIndex:e}):t);this.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins(\"beforeDatasetUpdate\",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins(\"afterDatasetUpdate\",s))}render(){!1!==this.notifyPlugins(\"beforeRender\",{cancelable:!0})&&(a.has(this)?this.attached&&!a.running(this)&&a.start(this):(this.draw(),rn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resize(t,e),this._resizeBeforeDraw=null}if(this.clear(),this.width\u003C=0||this.height\u003C=0)return;if(!1===this.notifyPlugins(\"beforeDraw\",{cancelable:!0}))return;const e=this._layers;for(t=0;t\u003Ce.length&&e[t].z\u003C=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t\u003Ce.length;++t)e[t].draw(this.chartArea);this.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s\u003Cn;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins(\"beforeDatasetDraw\",o)&&(s&&we(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&Me(e),o.cancelable=!1,this.notifyPlugins(\"afterDatasetDraw\",o))}isPointInArea(t){return ve(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Ei.modes[e];return\"function\"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=pi(null,{chart:this,type:\"chart\"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return\"boolean\"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?\"show\":\"hide\",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);ut(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),a.remove(this),t=0,e=this.data.datasets.length;t\u003Ce;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins(\"beforeDestroy\");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),_e(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),this.notifyPlugins(\"destroy\"),delete cn[this.id],this.notifyPlugins(\"afterDestroy\")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};et(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s(\"attach\",a),this.attached=!0,this.resize(),i(\"resize\",n),i(\"detach\",o)};o=()=>{this.attached=!1,s(\"resize\",n),this._stop(),this._resize(0,0),i(\"attach\",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){et(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},et(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?\"set\":\"remove\";let n,o,a,r;for(\"dataset\"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller[\"_\"+s+\"DatasetHoverStyle\"]()),a=0,r=t.length;a\u003Cr;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+\"HoverStyle\"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error(\"No dataset found at index \"+t);return{datasetIndex:t,element:i.data[e],index:e}}));!it(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins(\"beforeEvent\",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins(\"afterEvent\",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=pt(t),l=function(t,e,i,s){return i&&\"mouseout\"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,tt(n.onHover,[t,a,this],this),r&&tt(n.onClick,[t,a,this],this));const h=!it(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if(\"mouseout\"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const gn=()=>et(fn.instances,(t=>t._plugins.invalidate())),pn=!0;function mn(){throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\")}Object.defineProperties(fn,{defaults:{enumerable:pn,value:yt},instances:{enumerable:pn,value:cn},overrides:{enumerable:pn,value:mt},registry:{enumerable:pn,value:Hs},version:{enumerable:pn,value:\"3.8.0\"},getChart:{enumerable:pn,value:dn},register:{enumerable:pn,value:(...t)=>{Hs.add(...t),gn()}},unregister:{enumerable:pn,value:(...t)=>{Hs.remove(...t),gn()}}});class bn{constructor(t){this.options=t||{}}formats(){return mn()}parse(t,e){return mn()}format(t,e){return mn()}add(t,e,i){return mn()}diff(t,e,i){return mn()}startOf(t,e,i){return mn()}endOf(t,e){return mn()}}bn.override=function(t){Object.assign(bn.prototype,t)};var xn={_date:bn};function _n(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e\u003Cn;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=Ct(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(ut(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s\u003Cn;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s\u003Cn;++s)o=e.getPixelForTick(s),l();return r}function yn(t,e,i,s){return X(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function vn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h\u003Cc;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(yn(u,d,o,h));return l}function wn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function Mn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i=\"left\",s=\"right\"):(e=t.base\u003Ct.y,i=\"bottom\",s=\"top\"),e?(n=\"end\",o=\"start\"):(n=\"start\",o=\"end\"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);\"middle\"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[kn(c,a,r,l)]=!0,n=h)),o[kn(n,a,r,l)]=!0,t.borderSkipped=o}function kn(t,e,i,s){var n,o,a;return s?(a=i,t=Sn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Sn(t,e,i),t}function Sn(t,e,i){return\"start\"===t?e:\"end\"===t?i:t}function Pn(t,{inflateAmount:e},i){t.inflateAmount=\"auto\"===e?1===i?.33:0:e}class Dn extends Cs{parsePrimitiveData(t,e,i,s){return vn(t,e,i,s)}parseArrayData(t,e,i,s){return vn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=\"x\"===n.axis?a:r,h=\"x\"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d\u003Cu;++d)g=e[d],f={},f[n.axis]=n.parse(ct(g,l),d),c.push(yn(ct(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=wn(o)?\"[\"+o.start+\", \"+o.end+\"]\":\"\"+s.getLabelForValue(n[s.axis]);return{label:\"\"+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{index:o,_cachedMeta:{vScale:a}}=this,r=a.getBasePixel(),l=a.isHorizontal(),h=this._getRuler(),c=this.resolveDataElementOptions(e,s),d=this.getSharedOptions(c),u=this.includeOptions(s,d);this.updateSharedOptions(d,s,c);for(let c=e;c\u003Ce+i;c++){const e=this.getParsed(c),i=n||U(e[a.axis])?{base:r,head:r}:this._calculateBarValuePixels(c),f=this._calculateBarIndexPixels(c,h),g=(e._stacks||{})[a.axis],p={horizontal:l,base:i.base,enableBorderRadius:!g||wn(e._custom)||o===g._top||o===g._bottom,x:l?i.head:f.center,y:l?f.center:i.head,height:l?f.size:Math.abs(i.size),width:l?Math.abs(i.size):f.size};u&&(p.options=d||this.resolveDataElementOptions(c,t[c].active?\"active\":s));const m=p.options||t[c].options;Mn(p,m,g,o),Pn(p,m,h.ratio),this.updateElement(t[c],c,p,s)}}_getStacks(t,e){const i=this._cachedMeta.iScale,s=i.getMatchingVisibleMetas(this._type),n=i.options.stacked,o=s.length,a=[];let r,l;for(r=0;r\u003Co;++r)if(l=s[r],l.controller.options.grouped){if(void 0!==e){const t=l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];if(U(t)||isNaN(t))continue}if((!1===n||-1===a.indexOf(l.stack)||void 0===n&&void 0===l.stack)&&a.push(l.stack),l.index===t)break}return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n\u003Co;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||_n(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:i},options:{base:s,minBarLength:n}}=this,o=s||0,a=this.getParsed(t),r=a._custom,l=wn(r);let h,c,d=a[e.axis],u=0,f=i?this.applyStack(e,a,i):d;f!==d&&(u=f-d,f=d),l&&(d=r.barStart,f=r.barEnd-r.barStart,0!==d&&Bt(d)!==Bt(r.barEnd)&&(u=0),u+=d);const g=U(s)||l?u:s;let p=e.getPixelForValue(g);if(h=this.chart.getDataVisibility(t)?e.getPixelForValue(u+f):p,c=h-p,Math.abs(c)\u003Cn){c=function(t,e,i){return 0!==t?Bt(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(c,e,o)*n,d===o&&(p-=c\u002F2);const t=e.getPixelForDecimal(0),i=e.getPixelForDecimal(1),s=Math.min(t,i),a=Math.max(t,i);p=Math.max(Math.min(p,a),s),h=p+c}if(p===e.getPixelForValue(o)){const t=Bt(c)*e.getLineWidthForValue(o)\u002F2;p+=t,c-=t}return{size:c,base:p,head:h,center:h+c\u002F2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=Z(s.maxBarThickness,1\u002F0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l=\"flex\"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t\u003Cn.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))\u002F2*l;return{chunk:Math.abs(r-a)\u002F2*l\u002Fs,ratio:i.barPercentage,start:h}}(t,e,s,i):function(t,e,i,s){const n=i.barThickness;let o,a;return U(n)?(o=e.min*i.categoryPercentage,a=i.barPercentage):(o=n*s,a=1),{chunk:o\u002Fs,ratio:a,start:e.pixels[t]-o\u002F2}}(t,e,s,i),h=this._getStackIndex(this.index,this._cachedMeta.stack,n?t:void 0);a=l.start+l.chunk*h+l.chunk\u002F2,r=Math.min(o,l.chunk*l.ratio)}else a=i.getPixelForValue(this.getParsed(t)[i.axis],t),r=Math.min(o,e.min*e.ratio);return{base:a-r\u002F2,head:a+r\u002F2,center:a,size:r}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n\u003Cs;++n)null!==this.getParsed(n)[e.axis]&&i[n].draw(this._ctx)}}Dn.id=\"bar\",Dn.defaults={datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}},Dn.overrides={scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}};class Cn extends Cs{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t\u003Cn.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t\u003Cn.length;t++){const s=e[i+t];n[t]._custom=Z(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t\u003Cn.length;t++){const s=e[i+t];n[t]._custom=Z(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))\u002F2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:\"(\"+o+\", \"+a+(r?\", \"+r:\"\")+\")\"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{iScale:o,vScale:a}=this._cachedMeta,r=this.resolveDataElementOptions(e,s),l=this.getSharedOptions(r),h=this.includeOptions(s,l),c=o.axis,d=a.axis;for(let r=e;r\u003Ce+i;r++){const e=t[r],i=!n&&this.getParsed(r),l={},u=l[c]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[c]),f=l[d]=n?a.getBasePixel():a.getPixelForValue(i[d]);l.skip=isNaN(u)||isNaN(f),h&&(l.options=this.resolveDataElementOptions(r,e.active?\"active\":s),n&&(l.options.radius=0)),this.updateElement(e,r,l,s)}this.updateSharedOptions(l,s,r)}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return\"active\"!==e&&(s.radius=0),s.radius+=Z(i&&i._custom,n),s}}Cn.id=\"bubble\",Cn.defaults={datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}},Cn.overrides={scales:{x:{type:\"linear\"},y:{type:\"linear\"}},plugins:{tooltip:{callbacks:{title:()=>\"\"}}}};class On extends Cs{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(q(i[t])){const{key:t=\"value\"}=this._parsing;a=e=>+ct(i[e],t)}for(n=t,o=t+e;n\u003Co;++n)s._parsed[n]=a(n)}}_getRotation(){return Yt(this.options.rotation-90)}_getCircumference(){return Yt(this.options.circumference)}_getRotationExtents(){let t=At,e=-At;for(let i=0;i\u003Cthis.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)\u002F2,0),r=Math.min(J(this.options.cutout,a),1),l=this._getRingWeight(this.index),{circumference:h,rotation:c}=this._getRotationExtents(),{ratioX:d,ratioY:u,offsetX:f,offsetY:g}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e\u003CAt){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>Jt(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Jt(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(Et,c,u),b=g(Ot,h,d),x=g(Ot+Et,c,u);s=(p-b)\u002F2,n=(m-x)\u002F2,o=-(p+b)\u002F2,a=-(m+x)\u002F2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(c,h,r),p=(i.width-o)\u002Fd,m=(i.height-o)\u002Fu,b=Math.max(Math.min(p,m)\u002F2,0),x=Q(this.options.radius,b),_=(x-Math.max(x*r,0))\u002Fthis._getVisibleDatasetWeightTotal();this.offsetX=f*x,this.offsetY=g*x,s.total=this.calculateTotal(),this.outerRadius=x-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n\u002FAt)}updateElements(t,e,i,s){const n=\"reset\"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)\u002F2,h=(a.top+a.bottom)\u002F2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,f=this.resolveDataElementOptions(e,s),g=this.getSharedOptions(f),p=this.includeOptions(s,g);let m,b=this._getRotation();for(m=0;m\u003Ce;++m)b+=this._circumference(m,n);for(m=e;m\u003Ce+i;++m){const e=this._circumference(m,n),i=t[m],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:b,endAngle:b+e,circumference:e,outerRadius:u,innerRadius:d};p&&(o.options=g||this.resolveDataElementOptions(m,i.active?\"active\":s)),b+=e,this.updateElement(i,m,o,s)}this.updateSharedOptions(g,s,f)}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i\u003Ce.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?At*(Math.abs(t)\u002Fe):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ni(e._parsed[t],i.options.locale);return{label:s[t]||\"\",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s\u003Cn;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s\u003Cn;++s)r=a.resolveDataElementOptions(s),\"inner\"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i\u003Cs;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i\u003Ct;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(Z(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}On.id=\"doughnut\",On.defaults={datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\",\"spacing\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",spacing:0,indexAxis:\"r\"},On.descriptors={_scriptable:t=>\"spacing\"!==t,_indexable:t=>\"spacing\"!==t},On.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label(t){let e=t.label;const i=\": \"+t.formattedValue;return X(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class An extends Cs{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=function(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Qt(Math.min(wt(r,a.axis,h).lo,i?s:wt(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?Qt(Math.max(wt(r,a.axis,c).hi+1,i?0:wt(e,l,a.getPixelForValue(c)).hi+1),n,s)-n:s-n}return{start:n,count:o}}(e,s,o);this._drawStart=a,this._drawCount=r,function(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n=\"reset\"===s,{iScale:o,vScale:a,_stacked:r,_dataset:l}=this._cachedMeta,h=this.resolveDataElementOptions(e,s),c=this.getSharedOptions(h),d=this.includeOptions(s,c),u=o.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=Wt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||n||\"none\"===s;let x=e>0&&this.getParsed(e-1);for(let h=e;h\u003Ce+i;++h){const e=t[h],i=this.getParsed(h),g=b?e:{},_=U(i[f]),y=g[u]=o.getPixelForValue(i[u],h),v=g[f]=n||_?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,i,r):i[f],h);g.skip=isNaN(y)||isNaN(v)||_,g.stop=h>0&&Math.abs(i[u]-x[u])>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?\"active\":s)),b||this.updateElement(e,h,g,s),x=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)\u002F2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}An.id=\"line\",An.defaults={datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1},An.overrides={scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}};class Tn extends Cs{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ni(e._parsed[t].r,i.options.locale);return{label:s[t]||\"\",value:n}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(s\u003Ce.min&&(e.min=s),s>e.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s\u002F2,0),o=(n-Math.max(i.cutoutPercentage?n\u002F100*i.cutoutPercentage:1,0))\u002Ft.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n=\"reset\"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*Ot;let d,u=c;const f=360\u002Fthis.countVisibleElements();for(d=0;d\u003Ce;++d)u+=this._computeAngle(d,s,f);for(d=e;d\u003Ce+i;d++){const e=t[d];let i=u,g=u+this._computeAngle(d,s,f),p=o.getDataVisibility(d)?r.getDistanceFromCenterForValue(this.getParsed(d).r):0;u=g,n&&(a.animateScale&&(p=0),a.animateRotate&&(i=g=c));const m={x:l,y:h,innerRadius:0,outerRadius:p,startAngle:i,endAngle:g,options:this.resolveDataElementOptions(d,e.active?\"active\":s)};this.updateElement(e,d,m,s)}}countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data.forEach(((t,i)=>{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?Yt(this.resolveDataElementOptions(t,e).angle||i):0}}Tn.id=\"polarArea\",Tn.defaults={dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0},Tn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label:t=>t.chart.data.labels[t.dataIndex]+\": \"+t.formattedValue}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class Ln extends On{}Ln.id=\"pie\",Ln.defaults={cutout:0,rotation:0,circumference:360,radius:\"100%\"};class Rn extends Cs{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return He.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,\"resize\"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o=\"reset\"===s;for(let a=e;a\u003Ce+i;a++){const e=t[a],i=this.resolveDataElementOptions(a,e.active?\"active\":s),r=n.getPointPositionForValue(a,this.getParsed(a).r),l=o?n.xCenter:r.x,h=o?n.yCenter:r.y,c={x:l,y:h,angle:r.angle,skip:isNaN(l)||isNaN(h),options:i};this.updateElement(e,a,c,s)}}}Rn.id=\"radar\",Rn.defaults={datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}},Rn.overrides={aspectRatio:1,scales:{r:{type:\"radialLinear\"}}};class En extends An{}En.id=\"scatter\",En.defaults={showLine:!1,fill:!1},En.overrides={interaction:{mode:\"point\"},plugins:{tooltip:{callbacks:{title:()=>\"\",label:t=>\"(\"+t.label+\", \"+t.formattedValue+\")\"}}},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};var In=Object.freeze({__proto__:null,BarController:Dn,BubbleController:Cn,DoughnutController:On,LineController:An,PolarAreaController:Tn,PieController:Ln,RadarController:Rn,ScatterController:En});function zn(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n\u002Fr;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n\u002Fl,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+Et,s-Et),t.closePath(),t.clip()}function Fn(t,e,i,s){const n=li(t.options.borderRadius,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"]);const o=(i-e)\u002F2,a=Math.min(o,s*e\u002F2),r=t=>{const e=(i-Math.min(o,t))*s\u002F2;return Qt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Qt(n.innerStart,0,a),innerEnd:Qt(n.innerEnd,0,a)}}function Bn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Vn(t,e,i,s,n){const{x:o,y:a,startAngle:r,pixelMargin:l,innerRadius:h}=e,c=Math.max(e.outerRadius+s+i-l,0),d=h>0?h+s+i+l:0;let u=0;const f=n-r;if(s){const t=((h>0?h-s:0)+(c>0?c-s:0))\u002F2;u=(f-(0!==t?f*t\u002F(t+s):f))\u002F2}const g=(f-Math.max(.001,f*c-i\u002FOt)\u002Fc)\u002F2,p=r+g+u,m=n-g-u,{outerStart:b,outerEnd:x,innerStart:_,innerEnd:y}=Fn(e,d,c,m-p),v=c-b,w=c-x,M=p+b\u002Fv,k=m-x\u002Fw,S=d+_,P=d+y,D=p+_\u002FS,C=m-y\u002FP;if(t.beginPath(),t.arc(o,a,c,M,k),x>0){const e=Bn(w,k,o,a);t.arc(e.x,e.y,x,k,m+Et)}const O=Bn(P,m,o,a);if(t.lineTo(O.x,O.y),y>0){const e=Bn(P,C,o,a);t.arc(e.x,e.y,y,m+Et,C+Math.PI)}if(t.arc(o,a,d,m-y\u002Fd,p+_\u002Fd,!0),_>0){const e=Bn(S,D,o,a);t.arc(e.x,e.y,_,D+Math.PI,p-Et)}const A=Bn(v,p,o,a);if(t.lineTo(A.x,A.y),b>0){const e=Bn(v,M,o,a);t.arc(e.x,e.y,b,p-Et,M)}t.closePath()}function Nn(t,e,i,s,n){const{options:o}=e,{borderWidth:a,borderJoinStyle:r}=o,l=\"inner\"===o.borderAlign;a&&(l?(t.lineWidth=2*a,t.lineJoin=r||\"round\"):(t.lineWidth=a,t.lineJoin=r||\"bevel\"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&zn(t,e,o+At),t.beginPath(),t.arc(s,n,h,o+At,o,!0),c=0;c\u003Cr;++c)t.stroke();for(t.beginPath(),t.arc(s,n,l,o,o+At),c=0;c\u003Cr;++c)t.stroke()}(t,e,l),l&&zn(t,e,n),Vn(t,e,i,s,n),t.stroke())}class Wn extends Os{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps([\"x\",\"y\"],i),{angle:n,distance:o}=qt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:h,circumference:c}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],i),d=this.options.spacing\u002F2,u=Z(c,r-a)>=At||Jt(n,a,r),f=ee(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],t),{offset:r,spacing:l}=this.options,h=(s+n)\u002F2,c=(o+a+l+r)\u002F2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)\u002F2,n=(e.spacing||0)\u002F2;if(this.pixelMargin=\"inner\"===e.borderAlign?.33:0,this.fullCircles=i>At?Math.floor(i\u002FAt):0,0===i||this.innerRadius\u003C0||this.outerRadius\u003C0)return;t.save();let o=0;if(s){o=s\u002F2;const e=(this.startAngle+this.endAngle)\u002F2;t.translate(Math.cos(e)*o,Math.sin(e)*o),this.circumference>=Ot&&(o=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=function(t,e,i,s){const{fullCircles:n,startAngle:o,circumference:a}=e;let r=e.endAngle;if(n){Vn(t,e,i,s,o+At);for(let e=0;e\u003Cn;++e)t.fill();isNaN(a)||(r=o+a%At,a%At==0&&(r+=At))}return Vn(t,e,i,s,r),t.fill(),r}(t,this,o,n);Nn(t,this,o,n,a),t.restore()}}function Hn(t,e,i=e){t.lineCap=Z(i.borderCapStyle,e.borderCapStyle),t.setLineDash(Z(i.borderDash,e.borderDash)),t.lineDashOffset=Z(i.borderDashOffset,e.borderDashOffset),t.lineJoin=Z(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=Z(i.borderWidth,e.borderWidth),t.strokeStyle=Z(i.borderColor,e.borderColor)}function jn(t,e,i){t.lineTo(i.x,i.y)}function $n(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n\u003Ca&&o\u003Ca||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h\u003Cl&&!c?s+h-l:h-l}}function Yn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=$n(n,i,s),c=function(t){return t.stepped?ke:t.tension||\"monotone\"===t.cubicInterpolationMode?Se:jn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d\u003C=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function Un(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=$n(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,b=0;const x=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c\u003C=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i\u003Cf?f=i:i>g&&(g=i),m=(b*m+e)\u002F++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Xn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||\"monotone\"===e.cubicInterpolationMode||e.stepped||i)?Un:Yn}Wn.id=\"arc\",Wn.defaults={borderAlign:\"center\",borderColor:\"#fff\",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},Wn.defaultRoutes={backgroundColor:\"backgroundColor\"};const qn=\"function\"==typeof Path2D;function Kn(t,e,i,s){qn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Hn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Xn(e);for(const r of n)Hn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Gn extends Os{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||\"monotone\"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ke(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Mi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=wi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?ei:t.tension||\"monotone\"===t.cubicInterpolationMode?ii:ti}(i);let l,h;for(l=0,h=o.length;l\u003Ch;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])\u002F(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return Xn(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=Xn(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),Kn(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function Zn(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)\u003Cn.radius+n.hitRadius}Gn.id=\"line\",Gn.defaults={borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0},Gn.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"},Gn.descriptors={_scriptable:!0,_indexable:t=>\"borderDash\"!==t&&\"fill\"!==t};class Jn extends Os{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps([\"x\",\"y\"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)\u003CMath.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return Zn(this,t,\"x\",e)}inYRange(t,e){return Zn(this,t,\"y\",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius\u003C.1||!ve(this,e,this.size(i)\u002F2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,ye(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function Qn(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],e);let r,l,h,c,d;return t.horizontal?(d=a\u002F2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o\u002F2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function to(t,e,i,s){return t?0:Qt(e,i,s)}function eo(t){const e=Qn(t),i=e.right-e.left,s=e.bottom-e.top,n=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=hi(s);return{t:to(n.top,o.top,0,i),r:to(n.right,o.right,0,e),b:to(n.bottom,o.bottom,0,i),l:to(n.left,o.left,0,e)}}(t,i\u002F2,s\u002F2),o=function(t,e,i){const{enableBorderRadius:s}=t.getProps([\"enableBorderRadius\"]),n=t.options.borderRadius,o=ci(n),a=Math.min(e,i),r=t.borderSkipped,l=s||q(n);return{topLeft:to(!l||r.top||r.left,o.topLeft,0,a),topRight:to(!l||r.top||r.right,o.topRight,0,a),bottomLeft:to(!l||r.bottom||r.left,o.bottomLeft,0,a),bottomRight:to(!l||r.bottom||r.right,o.bottomRight,0,a)}}(t,i\u002F2,s\u002F2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:o},inner:{x:e.left+n.l,y:e.top+n.t,w:i-n.l-n.r,h:s-n.t-n.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(n.t,n.l)),topRight:Math.max(0,o.topRight-Math.max(n.t,n.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(n.b,n.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(n.b,n.r))}}}}function io(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&Qn(t,s);return a&&(n||ee(e,a.left,a.right))&&(o||ee(i,a.top,a.bottom))}function so(t,e){t.rect(e.x,e.y,e.w,e.h)}function no(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}Jn.id=\"point\",Jn.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0},Jn.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};class oo extends Os{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=eo(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?Ce:so;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,no(o,e,n)),t.clip(),a(t,no(n,-e,o)),t.fillStyle=i,t.fill(\"evenodd\")),t.beginPath(),a(t,no(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return io(this,t,e,i)}inXRange(t,e){return io(this,t,null,e)}inYRange(t,e){return io(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:n?(e+s)\u002F2:e,y:n?i:(i+s)\u002F2}}getRange(t){return\"x\"===t?this.width\u002F2:this.height\u002F2}}oo.id=\"bar\",oo.defaults={borderSkipped:\"start\",borderWidth:0,borderRadius:0,inflateAmount:\"auto\",pointStyle:void 0},oo.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};var ao=Object.freeze({__proto__:null,ArcElement:Wn,LineElement:Gn,PointElement:Jn,BarElement:oo});function ro(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,\"data\",{value:e})}}function lo(t){t.data.datasets.forEach((t=>{ro(t)}))}var ho={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void lo(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if(\"y\"===fi([a,t.options.indexAxis]))return;if(!r.controller.supportsDecimation)return;const h=t.scales[r.xAxisID];if(\"linear\"!==h.type&&\"time\"!==h.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Qt(wt(e,o.axis,a).lo,0,i-1)),s=h?Qt(wt(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(d\u003C=(i.threshold||4*s))return void ro(e);let u;switch(U(o)&&(e._data=l,delete e.data,Object.defineProperty(e,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case\"lttb\":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)\u002F(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c\u003Co-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,b=m-h;for(s=h;s\u003Cm;s++)n+=t[s].x,o+=t[s].y;n\u002F=b,o\u002F=b;const x=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=x;s\u003C_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,c,d,s,i);break;case\"min-max\":u=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],b=e+i-1,x=t[e].x,_=t[b].x-x;for(n=e;n\u003Ce+i;++n){o=t[n],a=(o.x-x)\u002F_*s,r=o.y;const e=0|a;if(e===l)r\u003Cu?(u=r,h=n):r>f&&(f=r,c=n),g=(p*g+o.x)\u002F++p;else{const i=n-1;if(!U(h)&&!U(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){lo(t)}};function co(t,e,i,s){if(s)return;let n=e[t],o=i[t];return\"angle\"===t&&(n=Zt(n),o=Zt(o)),{property:t,start:n,end:o}}function uo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function fo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function go(t,e){let i=[],s=!1;return X(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=uo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new Gn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function po(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!K(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function mo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=Z(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return\"origin\";return s}(t);if(q(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return K(n)&&Math.floor(n)===n?function(t,e,i,s){\"-\"!==t&&\"+\"!==t||(i=e+i);if(i===e||i\u003C0||i>=s)return!1;return i}(s[0],e,n,i):[\"origin\",\"start\",\"end\",\"stack\",\"shape\"].indexOf(s)>=0&&s}function bo(t,e,i){const s=[];for(let n=0;n\u003Ci.length;n++){const o=i[n],{first:a,last:r,point:l}=xo(o,e,\"x\");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function xo(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t\u003Co.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(ee(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}class _o{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:At},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function yo(t){const{chart:e,fill:i,line:s}=t;if(K(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if(\"stack\"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas(\"line\");for(let t=0;t\u003Cs.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(go({x:null,y:e.bottom},s));for(let t=0;t\u003Co.length;t++){const e=o[t];for(let t=e.start;t\u003C=e.end;t++)bo(n,a[t],r)}return new Gn({points:n,options:{}})}(t);if(\"shape\"===i)return!0;const n=function(t){if((t.scale||{}).getPointPositionForValue)return function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,o=s.reverse?e.max:e.min,a=function(t,e,i){let s;return s=\"start\"===t?i:\"end\"===t?e.options.reverse?e.min:e.max:q(t)?t.value:e.getBaseValue(),s}(i,e,o),r=[];if(s.grid.circular){const t=e.getPointPositionForValue(0,o);return new _o({x:t.x,y:t.y,radius:e.getDistanceFromCenterForValue(a)})}for(let t=0;t\u003Cn;++t)r.push(e.getPointPositionForValue(t,a));return r}(t);return function(t){const{scale:e={},fill:i}=t,s=function(t,e){let i=null;return\"start\"===t?i=e.bottom:\"end\"===t?i=e.top:q(t)?i=e.getPixelForValue(t.value):e.getBasePixel&&(i=e.getBasePixel()),i}(i,e);if(K(s)){const t=e.isHorizontal();return{x:t?s:null,y:t?null:s}}return null}(t)}(t);return n instanceof _o?n:go(n,s)}function vo(t,e,i){const s=yo(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(we(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?\"angle\":e.axis;t.save(),\"x\"===l&&o!==n&&(wo(t,s,a.top),Mo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),wo(t,s,a.bottom));Mo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),Me(t))}function wo(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[uo(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function Mo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=uo(s,r,n);const l=co(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=wi(e,l);for(const e of h){const s=co(i,o[e.start],o[e.end],e.loop),r=vi(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:fo(l,s,\"start\",Math.max)},end:{[i]:fo(l,s,\"end\",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,ko(t,a,d&&co(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():So(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||So(t,s,h,n)}t.closePath(),t.fill(f?\"evenodd\":\"nonzero\"),t.restore()}}function ko(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};\"x\"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function So(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}var Po={id:\"filler\",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a\u003Cs;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof Gn&&(l={visible:t.isDatasetVisible(a),index:a,fill:mo(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a\u003Cs;++a)l=n[a],l&&!1!==l.fill&&(l.fill=po(n,a,i.propagate))},beforeDraw(t,e,i){const s=\"beforeDraw\"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&vo(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if(\"beforeDatasetsDraw\"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;i&&vo(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;s&&!1!==s.fill&&\"beforeDatasetDraw\"===i.drawTime&&vo(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}};const Do=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Co extends Os{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=tt(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=ui(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Do(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign=\"left\",n.textBaseline=\"middle\";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e\u002F2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e\u002F2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,a=mi(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=n(i,this.left+s,this.right-this.lineWidths[o]);for(const l of e)o!==l.row&&(o=l.row,r=n(i,this.left+s,this.right-this.lineWidths[o])),l.top+=this.top+t+s,l.left=a.leftForLtr(a.x(r),l.width),r+=l.width+s}else{let o=0,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height);for(const l of e)l.col!==o&&(o=l.col,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height)),l.top=r,l.left+=this.left+s,l.left=a.leftForLtr(a.x(l.left),l.width),r+=l.height+s}}isHorizontal(){return\"top\"===this.options.position||\"bottom\"===this.options.position}draw(){if(this.options.display){const t=this.ctx;we(t,this),this._draw(),Me(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:a,labels:r}=t,l=yt.color,h=mi(t.rtl,this.left,this.width),c=ui(r.font),{color:d,padding:u}=r,f=c.size,g=f\u002F2;let p;this.drawTitle(),s.textAlign=h.textAlign(\"left\"),s.textBaseline=\"middle\",s.lineWidth=.5,s.font=c.string;const{boxWidth:m,boxHeight:b,itemHeight:x}=Do(r,f),_=this.isHorizontal(),y=this._computeTitleHeight();p=_?{x:n(a,this.left+u,this.right-i[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:n(a,this.top+y+u,this.bottom-e[0].height),line:0},bi(this.ctx,t.textDirection);const v=x+u;this.legendItems.forEach(((w,M)=>{s.strokeStyle=w.fontColor||d,s.fillStyle=w.fontColor||d;const k=s.measureText(w.text).width,S=h.textAlign(w.textAlign||(w.textAlign=r.textAlign)),P=m+g+k;let D=p.x,C=p.y;h.setWidth(this.width),_?M>0&&D+P+u>this.right&&(C=p.y+=v,p.line++,D=p.x=n(a,this.left+u,this.right-i[p.line])):M>0&&C+v>this.bottom&&(D=p.x=D+e[p.line].width+u,p.line++,C=p.y=n(a,this.top+y+u,this.bottom-e[p.line].height));!function(t,e,i){if(isNaN(m)||m\u003C=0||isNaN(b)||b\u003C0)return;s.save();const n=Z(i.lineWidth,1);if(s.fillStyle=Z(i.fillStyle,l),s.lineCap=Z(i.lineCap,\"butt\"),s.lineDashOffset=Z(i.lineDashOffset,0),s.lineJoin=Z(i.lineJoin,\"miter\"),s.lineWidth=n,s.strokeStyle=Z(i.strokeStyle,l),s.setLineDash(Z(i.lineDash,[])),r.usePointStyle){const o={radius:m*Math.SQRT2\u002F2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},a=h.xPlus(t,m\u002F2);ye(s,o,a,e+g)}else{const o=e+Math.max((f-b)\u002F2,0),a=h.leftForLtr(t,m),r=ci(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?Ce(s,{x:a,y:o,w:m,h:b,radius:r}):s.rect(a,o,m,b),s.fill(),0!==n&&s.stroke()}s.restore()}(h.x(D),C,w),D=o(S,D+m+g,_?D+P:this.right,t.rtl),function(t,e,i){Pe(s,i.text,t,e+x\u002F2,c,{strikethrough:i.hidden,textAlign:h.textAlign(i.textAlign)})}(h.x(D),C,w),_?p.x+=P+u:p.y+=v})),xi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=ui(e.font),o=di(e.padding);if(!e.display)return;const a=mi(t.rtl,this.left,this.width),r=this.ctx,l=e.position,h=i.size\u002F2,c=o.top+h;let d,u=this.left,f=this.width;if(this.isHorizontal())f=Math.max(...this.lineWidths),d=this.top+c,u=n(t.align,u,this.right-f);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);d=c+n(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const g=n(l,u,u+f);r.textAlign=a.textAlign(s(l)),r.textBaseline=\"middle\",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,Pe(r,e.text,g,d,i)}_computeTitleHeight(){const t=this.options.title,e=ui(t.font),i=di(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(ee(t,this.left,this.right)&&ee(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i\u003Cn.length;++i)if(s=n[i],ee(t,s.left,s.left+s.width)&&ee(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if((\"mousemove\"===t||\"mouseout\"===t)&&(e.onHover||e.onLeave))return!0;if(e.onClick&&(\"click\"===t||\"mouseup\"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if(\"mousemove\"===t.type||\"mouseout\"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&tt(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&tt(e.onHover,[t,i,this],this)}else i&&tt(e.onClick,[t,i,this],this);var s,n}}var Oo={id:\"legend\",_element:Co,start(t,e,i){const s=t.legend=new Co({ctx:t.ctx,options:i,chart:t});Xi.configure(t,s,i),Xi.addBox(t,s)},stop(t){Xi.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;Xi.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=di(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)\u002F4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:t=>!t.startsWith(\"on\"),labels:{_scriptable:t=>![\"generateLabels\",\"filter\",\"sort\"].includes(t)}}};class Ao extends Os{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=X(i.text)?i.text.length:1;this._padding=di(i.padding);const n=s*ui(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return\"top\"===t||\"bottom\"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:o,options:a}=this,r=a.align;let l,h,c,d=0;return this.isHorizontal()?(h=n(r,i,o),c=e+t,l=o-i):(\"left\"===a.position?(h=i+t,c=n(r,s,e),d=-.5*Ot):(h=o-t,c=n(r,e,s),d=.5*Ot),l=s-e),{titleX:h,titleY:c,maxWidth:l,rotation:d}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=ui(e.font),n=i.lineHeight\u002F2+this._padding.top,{titleX:o,titleY:a,maxWidth:r,rotation:l}=this._drawArgs(n);Pe(t,e.text,0,0,i,{color:e.color,maxWidth:r,rotation:l,textAlign:s(e.align),textBaseline:\"middle\",translation:[o,a]})}}var To={id:\"title\",_element:Ao,start(t,e,i){!function(t,e){const i=new Ao({ctx:t.ctx,options:e,chart:t});Xi.configure(t,i,e),Xi.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Xi.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;Xi.configure(t,s,i),s.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const Lo=new WeakMap;var Ro={id:\"subtitle\",start(t,e,i){const s=new Ao({ctx:t.ctx,options:i,chart:t});Xi.configure(t,s,i),Xi.addBox(t,s),Lo.set(t,s)},stop(t){Xi.removeBox(t,Lo.get(t)),Lo.delete(t)},beforeUpdate(t,e,i){const s=Lo.get(t);Xi.configure(t,s,i),s.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"normal\"},fullSize:!0,padding:0,position:\"top\",text:\"\",weight:1500},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const Eo={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e\u003Ci;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s+=t.x,n+=t.y,++o}}return{x:s\u002Fo,y:n\u002Fo}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i\u003Cs;++i){const s=t[i].element;if(s&&s.hasValue()){const t=Kt(e,s.getCenterPoint());t\u003Cr&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function Io(t,e){return e&&(X(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function zo(t){return(\"string\"==typeof t||t instanceof String)&&t.indexOf(\"\\n\")>-1?t.split(\"\\n\"):t}function Fo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Bo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=ui(e.bodyFont),h=ui(e.titleFont),c=ui(e.footerFont),d=o.length,u=n.length,f=s.length,g=di(e.padding);let p=g.height,m=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-f)*l.lineHeight+(b-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let x=0;const _=function(t){m=Math.max(m,i.measureText(t).width+x)};return i.save(),i.font=h.string,et(t.title,_),i.font=l.string,et(t.beforeBody.concat(t.afterBody),_),x=e.displayColors?a+2+e.boxPadding:0,et(s,(t=>{et(t.before,_),et(t.lines,_),et(t.after,_)})),x=0,i.font=c.string,et(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Vo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h=\"center\";return\"center\"===s?h=n\u003C=(r+l)\u002F2?\"left\":\"right\":n\u003C=o\u002F2?h=\"left\":n>=a-o\u002F2&&(h=\"right\"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return\"left\"===t&&n+o+a>e.width||\"right\"===t&&n-o-a\u003C0||void 0}(h,t,e,i)&&(h=\"center\"),h}function No(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i\u003Cs\u002F2?\"top\":i>t.height-s\u002F2?\"bottom\":\"center\"}(t,i);return{xAlign:i.xAlign||e.xAlign||Vo(t,e,i,s),yAlign:s}}function Wo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=ci(a);let g=function(t,e){let{x:i,width:s}=t;return\"right\"===e?i-=s:\"center\"===e&&(i-=s\u002F2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return\"top\"===e?s+=i:s-=\"bottom\"===e?n+i:n\u002F2,s}(e,l,h);return\"center\"===l?\"left\"===r?g+=h:\"right\"===r&&(g-=h):\"left\"===r?g-=Math.max(c,u)+n:\"right\"===r&&(g+=Math.max(d,f)+n),{x:Qt(g,0,s.width-e.width),y:Qt(p,0,s.height-e.height)}}function Ho(t,e,i){const s=di(i.padding);return\"center\"===e?t.x+t.width\u002F2:\"right\"===e?t.x+t.width-s.right:t.x+s.left}function jo(t){return Io([],zo(t))}function $o(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class Yo extends Os{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new ms(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,pi(t,{tooltip:e,tooltipItems:i,type:\"tooltip\"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=Io(a,zo(s)),a=Io(a,zo(n)),a=Io(a,zo(o)),a}getBeforeBody(t,e){return jo(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return et(t,(t=>{const e={before:[],lines:[],after:[]},n=$o(i,t);Io(e.before,zo(n.beforeLabel.call(this,t))),Io(e.lines,n.label.call(this,t)),Io(e.after,zo(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return jo(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=Io(a,zo(s)),a=Io(a,zo(n)),a=Io(a,zo(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a\u003Cr;++a)l.push(Fo(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),et(l,(e=>{const i=$o(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Eo[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Bo(this,i),a=Object.assign({},t,e),r=No(this.chart,i,a),l=Wo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=ci(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return\"center\"===n?(_=u+g\u002F2,\"left\"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m=\"left\"===s?d+Math.max(r,h)+o:\"right\"===s?d+f-Math.max(l,c)-o:this.caretX,\"top\"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=mi(i.rtl,this.x,this.width);for(t.x=Ho(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline=\"middle\",o=ui(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r\u003Cn;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight\u002F2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,n){const o=this.labelColors[i],a=this.labelPointStyles[i],{boxHeight:r,boxWidth:l,boxPadding:h}=n,c=ui(n.bodyFont),d=Ho(this,\"left\",n),u=s.x(d),f=r\u003Cc.lineHeight?(c.lineHeight-r)\u002F2:0,g=e.y+f;if(n.usePointStyle){const e={radius:Math.min(l,r)\u002F2,pointStyle:a.pointStyle,rotation:a.rotation,borderWidth:1},i=s.leftForLtr(u,l)+l\u002F2,h=g+r\u002F2;t.strokeStyle=n.multiKeyBackground,t.fillStyle=n.multiKeyBackground,ye(t,e,i,h),t.strokeStyle=o.borderColor,t.fillStyle=o.backgroundColor,ye(t,e,i,h)}else{t.lineWidth=o.borderWidth||1,t.strokeStyle=o.borderColor,t.setLineDash(o.borderDash||[]),t.lineDashOffset=o.borderDashOffset||0;const e=s.leftForLtr(u,l-h),i=s.leftForLtr(s.xPlus(u,1),l-h-2),a=ci(o.borderRadius);Object.values(a).some((t=>0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,Ce(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),Ce(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=ui(i.bodyFont);let d=c.lineHeight,u=0;const f=mi(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d\u002F2),t.y+=d+n},p=f.textAlign(o);let m,b,x,_,y,v,w;for(e.textAlign=o,e.textBaseline=\"middle\",e.font=c.string,t.x=Ho(this,p,i),e.fillStyle=i.bodyColor,et(this.beforeBody,g),u=a&&\"right\"!==p?\"center\"===o?l\u002F2+h:l+2+h:0,_=0,v=s.length;_\u003Cv;++_){for(m=s[_],b=this.labelTextColors[_],e.fillStyle=b,et(m.before,g),x=m.lines,a&&x.length&&(this._drawColorBox(e,t,_,f,i),d=Math.max(c.lineHeight,r)),y=0,w=x.length;y\u003Cw;++y)g(x[y]),d=c.lineHeight;et(m.after,g)}u=0,d=c.lineHeight,et(this.afterBody,g),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=mi(i.rtl,this.x,this.width);for(t.x=Ho(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline=\"middle\",o=ui(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a\u003Cn;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight\u002F2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=ci(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),\"top\"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),\"center\"===o&&\"right\"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),\"bottom\"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),\"center\"===o&&\"left\"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Eo[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Bo(this,t),a=Object.assign({},i,this._size),r=No(e,t,a),l=Wo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)\u003C.001?0:i;const o=di(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),bi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),xi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error(\"Cannot find a dataset at index \"+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!it(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!it(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if(\"mouseout\"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Eo[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}Yo.positioners=Eo;var Uo={id:\"tooltip\",_element:Yo,positioners:Eo,afterInit(t,e,i){i&&(t.tooltip=new Yo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins(\"beforeTooltipDraw\",i))return;e.draw(t.ctx),t.notifyPlugins(\"afterTooltipDraw\",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,boxPadding:0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:{beforeTitle:$,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&\"dataset\"===this.options.mode)return e.dataset.label||\"\";if(e.label)return e.label;if(s>0&&e.dataIndex\u003Cs)return i[e.dataIndex]}return\"\"},afterTitle:$,beforeBody:$,beforeLabel:$,label(t){if(this&&this.options&&\"dataset\"===this.options.mode)return t.label+\": \"+t.formattedValue||t.formattedValue;let e=t.dataset.label||\"\";e&&(e+=\": \");const i=t.formattedValue;return U(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:$,afterBody:$,beforeFooter:$,footer:$,afterFooter:$}},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:t=>\"filter\"!==t&&\"itemSort\"!==t&&\"external\"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},Xo=Object.freeze({__proto__:null,Decimation:ho,Filler:Po,Legend:Oo,SubTitle:Ro,Title:To,Tooltip:Uo});function qo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>(\"string\"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class Ko extends Ns{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(U(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Qt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:qo(i,t,Z(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);\"ticks\"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i\u003C=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&t\u003Ce.length?e[t]:t}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return\"number\"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Go(t,e,{horizontal:i,minRotation:s}){const n=Yt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(\"\"+t).length;return Math.min(e\u002Fo,a)}Ko.id=\"category\",Ko.defaults={ticks:{callback:Ko.prototype.getLabelForValue}};class Zo extends Ns{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return U(t)||(\"number\"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=Bt(s),e=Bt(n);t\u003C0&&e\u003C0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s\u003C=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max\u002Fs)-Math.floor(this.min\u002Fs)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!U(o),b=!U(a),x=!U(l),_=(p-g)\u002F(c+1);let y,v,w,M,k=Vt((p-g)\u002Ff\u002Fu)*u;if(k\u003C1e-14&&!m&&!b)return[{value:g},{value:p}];M=Math.ceil(p\u002Fk)-Math.floor(g\u002Fk),M>f&&(k=Vt(M*k\u002Ff\u002Fu)*u),U(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)\u002Fy),\"ticks\"===s?(v=Math.floor(g\u002Fk)*k,w=Math.ceil(p\u002Fk)*k):(v=g,w=p),m&&b&&n&&jt((a-o)\u002Fn,k\u002F1e3)?(M=Math.round(Math.min((a-o)\u002Fk,h)),k=(a-o)\u002FM,v=o,w=a):x?(v=m?o:v,w=b?a:w,M=l-1,k=(w-v)\u002FM):(M=(w-v)\u002Fk,M=Ht(M,Math.round(M),k\u002F1e3)?Math.round(M):Math.ceil(M));const S=Math.max(Xt(k),Xt(v));y=Math.pow(10,U(r)?S:r),v=Math.round(v*y)\u002Fy,w=Math.round(w*y)\u002Fy;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),v\u003Co&&P++,Ht(Math.round((v+P*k)*y)\u002Fy,o,Go(o,_,t))&&P++):v\u003Co&&P++);P\u003CM;++P)i.push({value:Math.round((v+P*k)*y)\u002Fy});return b&&d&&w!==a?i.length&&Ht(i[i.length-1].value,a,Go(a,_,t))?i[i.length-1].value=a:i.push({value:a}):b&&w!==a||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return\"ticks\"===t.bounds&&$t(s,this,\"value\"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)\u002FMath.max(t.length-1,1)\u002F2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ni(t,this.chart.options.locale,this.options.ticks.format)}}class Jo extends Zo{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?t:0,this.max=K(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=Yt(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e\u002FMath.min(40,n.lineHeight\u002Fs))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function Qo(t){return 1===t\u002FMath.pow(10,Math.floor(Ft(t)))}Jo.id=\"linear\",Jo.defaults={ticks:{callback:Ts.formatters.numeric}};class ta extends Ns{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Zo.prototype.parse.apply(this,[t,e]);if(0!==i)return K(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=K(t)?Math.max(0,t):null,this.max=K(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(Ft(t))+e);i===s&&(i\u003C=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i\u003C=0&&n(a(s,-1)),s\u003C=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(Ft(e.max)),s=Math.ceil(e.max\u002FMath.pow(10,i)),n=[];let o=G(t.min,Math.pow(10,Math.floor(Ft(e.min)))),a=Math.floor(Ft(o)),r=Math.floor(o\u002FMath.pow(10,a)),l=a\u003C0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Qo(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)\u002Fl}while(a\u003Ci||a===i&&r\u003Cs);const h=G(t.max,o);return n.push({value:h,major:Qo(o)}),n}({min:this._userMin,max:this._userMax},this);return\"ticks\"===t.bounds&&$t(e,this,\"value\"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?\"0\":ni(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=Ft(t),this._valueRange=Ft(this.max)-Ft(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Ft(t)-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function ea(t){const e=t.ticks;if(e.display&&t.display){const t=di(e.backdropPadding);return Z(e.font&&e.font.size,yt.font.size)+t.height}return 0}function ia(t,e,i,s,n){return t===s||t===n?{start:e-i\u002F2,end:e+i\u002F2}:t\u003Cs||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function sa(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?Ot\u002Fo:0;for(let d=0;d\u003Co;d++){const o=a.setContext(t.getPointLabelContext(d));n[d]=o.padding;const u=t.getPointPosition(d,t.drawingArea+n[d],r),f=ui(o.font),g=(l=t.ctx,h=f,c=X(c=t._pointLabels[d])?c:[c],{w:be(l,h.string,c),h:c.length*h.lineHeight});s[d]=g;const p=Zt(t.getIndexAngle(d)+r),m=Math.round(Ut(p));na(i,e,p,ia(m,u.x,g.w,0,180),ia(m,u.y,g.h,90,270))}var l,h,c;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,a=ea(o)\u002F2,r=t.drawingArea,l=o.pointLabels.centerPointLabels?Ot\u002Fn:0;for(let o=0;o\u003Cn;o++){const n=t.getPointPosition(o,r+a+i[o],l),h=Math.round(Ut(Zt(n.angle+Et))),c=e[o],d=ra(n.y,c.h,h),u=oa(h),f=aa(n.x,c.w,u);s.push({x:n.x,y:d,textAlign:u,left:f,top:d,right:f+c.w,bottom:d+c.h})}return s}(t,s,n)}function na(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start\u003Ce.l?(r=(e.l-s.start)\u002Fo,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)\u002Fo,t.r=Math.max(t.r,e.r+r)),n.start\u003Ce.t?(l=(e.t-n.start)\u002Fa,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)\u002Fa,t.b=Math.max(t.b,e.b+l))}function oa(t){return 0===t||180===t?\"center\":t\u003C180?\"left\":\"right\"}function aa(t,e,i){return\"right\"===i?t-=e:\"center\"===i&&(t-=e\u002F2),t}function ra(t,e,i){return 90===i||270===i?t-=e\u002F2:(i>270||i\u003C90)&&(t-=e),t}function la(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,At);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o\u003Cs;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}ta.id=\"logarithmic\",ta.defaults={ticks:{callback:Ts.formatters.logarithmic,major:{enabled:!0}}};class ha extends Zo{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=di(ea(this.options)\u002F2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e\u002F2+t.left),this.yCenter=Math.floor(this.top+i\u002F2+t.top),this.drawingArea=Math.floor(Math.min(e,i)\u002F2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=K(t)&&!isNaN(t)?t:0,this.max=K(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea\u002Fea(this.options))}generateTickLabels(t){Zo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=tt(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:\"\"})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?sa(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)\u002F2),this.yCenter+=Math.floor((i-s)\u002F2),this.drawingArea-=Math.min(this.drawingArea\u002F2,Math.max(t,e,i,s))}getIndexAngle(t){return Zt(t*(At\u002F(this._pointLabels.length||1))+Yt(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(U(t))return NaN;const e=this.drawingArea\u002F(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(U(t))return NaN;const e=t\u002F(this.drawingArea\u002F(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t\u003Ce.length){const i=e[t];return function(t,e,i){return pi(t,{label:i,index:e,type:\"pointLabel\"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-Et+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),la(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:i,grid:s}=e,n=this._pointLabels.length;let o,a,r;if(e.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:s}}=t;for(let n=e-1;n>=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=ui(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!U(f)){const t=ci(e.borderRadius),s=di(e.backdropPadding);i.fillStyle=f;const n=h-s.left,o=c-s.top,a=d-h+s.width,r=u-c+s.height;Object.values(t).some((t=>0!==t))?(i.beginPath(),Ce(i,{x:n,y:o,w:a,h:r,radius:t}),i.fill()):i.fillRect(n,o,a,r)}Pe(i,t._pointLabels[n],a,r+o.lineHeight\u002F2,o,{color:e.color,textAlign:l,textBaseline:\"middle\"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){a=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i\u003C0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),la(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),a,n)}})),i.display){for(t.save(),o=n-1;o>=0;o--){const s=i.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:l}=s;l&&n&&(t.lineWidth=l,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),r=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign=\"center\",t.textBaseline=\"middle\",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=ui(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=di(r.backdropPadding);t.fillRect(-o\u002F2-e.left,-n-l.size\u002F2-e.top,o+e.width,l.size+e.height)}Pe(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}ha.id=\"radialLinear\",ha.defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Ts.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},ha.defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"},ha.descriptors={angleLines:{_fallback:\"grid\"}};const ca={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},da=Object.keys(ca);function ua(t,e){return t-e}function fa(t,e){if(U(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return\"function\"==typeof s&&(a=s(a)),K(a)||(a=\"string\"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a=\"week\"!==n||!Wt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,\"isoWeek\",o)),+a)}function ga(t,e,i,s){const n=da.length;for(let o=da.indexOf(t);o\u003Cn-1;++o){const t=ca[da[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)\u002F(n*t.size))\u003C=s)return da[o]}return da[n-1]}function pa(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=vt(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function ma(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a\u003Co;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r\u003C=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class ba extends Ns{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new xn._date(t.adapters.date);rt(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:fa(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||\"day\";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),\"ticks\"===t.bounds&&\"labels\"===t.ticks.source||r(this.getMinMax(!1))),s=K(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=K(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s=\"labels\"===i.source?this.getLabelTimestamps():this._generate();\"ticks\"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=kt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?ga(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=da.length-1;o>=da.indexOf(i);o--){const i=da[o];if(ca[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return da[i?da.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&\"year\"!==this._unit?function(t){for(let e=da.indexOf(t)+1,i=da.length;e\u003Ci;++e)if(ca[da[e]].common)return da[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),ma(this,o,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map((t=>+t.value)))}initOffsets(t){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)\u002F2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))\u002F2);const o=t.length\u003C3?.5:.25;s=Qt(s,0,o),n=Qt(n,0,o),this._offsets={start:s,end:n,factor:1\u002F(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||ga(n.minUnit,e,i,this._getLabelCapacity(e)),a=Z(n.stepSize,1),r=\"week\"===o&&n.isoWeekday,l=Wt(r)||!0===r,h={};let c,d,u=e;if(l&&(u=+t.startOf(u,\"isoWeek\",r)),u=+t.startOf(u,l?\"day\":o),t.diff(i,e,o)>1e5*a)throw new Error(e+\" and \"+i+\" are too far apart with stepSize of \"+a+\" \"+o);const f=\"data\"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;c\u003Ci;c=+t.add(c,a,o),d++)pa(h,c,f);return c!==i&&\"ticks\"!==s.bounds&&1!==d||pa(h,c,f),Object.keys(h).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,u=this._adapter.format(t,s||(d?h:l)),f=n.ticks.callback;return f?tt(f,[u,e,i],this):u}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e\u003Ci;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)\u002F(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)\u002Fe.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=Yt(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,ma(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width\u002Fo.w:this.height\u002Fo.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t\u003Ce;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e\u003Ci;++e)t.push(fa(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return Ct(t.sort(ua))}}function xa(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e\u003C=t[l].pos&&({lo:r,hi:l}=wt(t,\"pos\",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e\u003C=t[l].time&&({lo:r,hi:l}=wt(t,\"time\",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)\u002Fh:o}ba.id=\"time\",ba.defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",major:{enabled:!1}}};class _a extends ba{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xa(e,this.min),this._tableRange=xa(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o\u003Ca;++o)l=t[o],l>=e&&l\u003C=i&&s.push(l);if(s.length\u003C2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o\u003Ca;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)\u002F2)!==l&&n.push({time:l,pos:o\u002F(a-1)});return n}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(xa(this._table,t)-this._minPos)\u002Fthis._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)\u002Fe.factor-e.end;return xa(this._table,i*this._tableRange+this._minPos,!0)}}_a.id=\"timeseries\",_a.defaults=ba.defaults;var ya=Object.freeze({__proto__:null,CategoryScale:Ko,LinearScale:Jo,LogarithmicScale:ta,RadialLinearScale:ha,TimeScale:ba,TimeSeriesScale:_a});return fn.register(In,ya,ao,Xo),fn.helpers={...Di},fn._adapters=xn,fn.Animation=gs,fn.Animations=ms,fn.animator=a,fn.controllers=Hs.controllers.items,fn.DatasetController=Cs,fn.Element=Os,fn.elements=ao,fn.Interaction=Ei,fn.layouts=Xi,fn.platforms=ds,fn.Scale=Ns,fn.Ticks=Ts,Object.assign(fn,In,ya,ao,Xo,ds),fn.Chart=fn,\"undefined\"!=typeof window&&(window.Chart=fn),fn}));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-appear.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-appear.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-appear.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-appear.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,102 +1,102 @@\n-\u002F*\r\n- * jQuery appear plugin\r\n- *\r\n- * Copyright (c) 2012 Andrey Sidorov\r\n- * licensed under MIT license.\r\n- *\r\n- * https:\u002F\u002Fgithub.com\u002Fmorr\u002Fjquery.appear\u002F\r\n- *\r\n- * Version: 0.3.3\r\n- *\u002F\r\n-(function ($) {\r\n-\tvar selectors = [];\r\n-\r\n-\tvar check_binded = false;\r\n-\tvar check_lock = false;\r\n-\tvar defaults = {\r\n-\t\tinterval     : 250,\r\n-\t\tforce_process: false\r\n-\t}\r\n-\tvar $window = $(window);\r\n-\r\n-\tvar $prior_appeared;\r\n-\r\n-\tfunction process() {\r\n-\t\tcheck_lock = false;\r\n-\t\tfor (var index = 0; index \u003C selectors.length; index++) {\r\n-\t\t\tvar $appeared = $(selectors[index]).filter(function () {\r\n-\t\t\t\treturn $(this).is(':appeared');\r\n-\t\t\t});\r\n-\r\n-\t\t\t$appeared.trigger('appear', [$appeared]);\r\n-\r\n-\t\t\tif ($prior_appeared) {\r\n-\t\t\t\tvar $disappeared = $prior_appeared.not($appeared);\r\n-\t\t\t\t$disappeared.trigger('disappear', [$disappeared]);\r\n-\t\t\t}\r\n-\t\t\t$prior_appeared = $appeared;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F \"appeared\" custom filter\r\n-\t$.expr[':']['appeared'] = function (element) {\r\n-\t\tvar $element = $(element);\r\n-\t\tif (!$element.is(':visible')) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tvar window_left = $window.scrollLeft();\r\n-\t\tvar window_top = $window.scrollTop();\r\n-\t\tvar offset = $element.offset();\r\n-\t\tvar left = offset.left;\r\n-\t\tvar top = offset.top;\r\n-\r\n-\t\tif (top + $element.height() >= window_top &&\r\n-\t\t\ttop - ($element.data('appear-top-offset') || 0) \u003C= window_top + $window.height() &&\r\n-\t\t\tleft + $element.width() >= window_left &&\r\n-\t\t\tleft - ($element.data('appear-left-offset') || 0) \u003C= window_left + $window.width()) {\r\n-\t\t\treturn true;\r\n-\t\t} else {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$.fn.extend({\r\n-\t\t\u002F\u002F watching for element's appearance in browser viewport\r\n-\t\tappear: function (options) {\r\n-\t\t\tvar opts = $.extend({}, defaults, options || {});\r\n-\t\t\tvar selector = this.selector || this;\r\n-\t\t\tif (!check_binded) {\r\n-\t\t\t\tvar on_check = function () {\r\n-\t\t\t\t\tif (check_lock) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tcheck_lock = true;\r\n-\r\n-\t\t\t\t\tsetTimeout(process, opts.interval);\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\t$(window).scroll(on_check).resize(on_check);\r\n-\t\t\t\tcheck_binded = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (opts.force_process) {\r\n-\t\t\t\tsetTimeout(process, opts.interval);\r\n-\t\t\t}\r\n-\t\t\tselectors.push(selector);\r\n-\t\t\treturn $(selector);\r\n-\t\t}\r\n-\t});\r\n-\r\n-\t$.extend({\r\n-\t\t\u002F\u002F force elements's appearance check\r\n-\t\tforce_appear: function () {\r\n-\t\t\tif (check_binded) {\r\n-\t\t\t\tprocess();\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t\t;\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t});\r\n-})(jQuery);\r\n+\u002F*\n+ * jQuery appear plugin\n+ *\n+ * Copyright (c) 2012 Andrey Sidorov\n+ * licensed under MIT license.\n+ *\n+ * https:\u002F\u002Fgithub.com\u002Fmorr\u002Fjquery.appear\u002F\n+ *\n+ * Version: 0.3.3\n+ *\u002F\n+(function ($) {\n+\tvar selectors = [];\n+\n+\tvar check_binded = false;\n+\tvar check_lock = false;\n+\tvar defaults = {\n+\t\tinterval     : 250,\n+\t\tforce_process: false\n+\t}\n+\tvar $window = $(window);\n+\n+\tvar $prior_appeared;\n+\n+\tfunction process() {\n+\t\tcheck_lock = false;\n+\t\tfor (var index = 0; index \u003C selectors.length; index++) {\n+\t\t\tvar $appeared = $(selectors[index]).filter(function () {\n+\t\t\t\treturn $(this).is(':appeared');\n+\t\t\t});\n+\n+\t\t\t$appeared.trigger('appear', [$appeared]);\n+\n+\t\t\tif ($prior_appeared) {\n+\t\t\t\tvar $disappeared = $prior_appeared.not($appeared);\n+\t\t\t\t$disappeared.trigger('disappear', [$disappeared]);\n+\t\t\t}\n+\t\t\t$prior_appeared = $appeared;\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F \"appeared\" custom filter\n+\t$.expr[':']['appeared'] = function (element) {\n+\t\tvar $element = $(element);\n+\t\tif (!$element.is(':visible')) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tvar window_left = $window.scrollLeft();\n+\t\tvar window_top = $window.scrollTop();\n+\t\tvar offset = $element.offset();\n+\t\tvar left = offset.left;\n+\t\tvar top = offset.top;\n+\n+\t\tif (top + $element.height() >= window_top &&\n+\t\t\ttop - ($element.data('appear-top-offset') || 0) \u003C= window_top + $window.height() &&\n+\t\t\tleft + $element.width() >= window_left &&\n+\t\t\tleft - ($element.data('appear-left-offset') || 0) \u003C= window_left + $window.width()) {\n+\t\t\treturn true;\n+\t\t} else {\n+\t\t\treturn false;\n+\t\t}\n+\t}\n+\n+\t$.fn.extend({\n+\t\t\u002F\u002F watching for element's appearance in browser viewport\n+\t\tappear: function (options) {\n+\t\t\tvar opts = $.extend({}, defaults, options || {});\n+\t\t\tvar selector = this.selector || this;\n+\t\t\tif (!check_binded) {\n+\t\t\t\tvar on_check = function () {\n+\t\t\t\t\tif (check_lock) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\t\t\t\t\tcheck_lock = true;\n+\n+\t\t\t\t\tsetTimeout(process, opts.interval);\n+\t\t\t\t};\n+\n+\t\t\t\t$(window).scroll(on_check).resize(on_check);\n+\t\t\t\tcheck_binded = true;\n+\t\t\t}\n+\n+\t\t\tif (opts.force_process) {\n+\t\t\t\tsetTimeout(process, opts.interval);\n+\t\t\t}\n+\t\t\tselectors.push(selector);\n+\t\t\treturn $(selector);\n+\t\t}\n+\t});\n+\n+\t$.extend({\n+\t\t\u002F\u002F force elements's appearance check\n+\t\tforce_appear: function () {\n+\t\t\tif (check_binded) {\n+\t\t\t\tprocess();\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t\t;\n+\t\t\treturn false;\n+\t\t}\n+\t});\n+})(jQuery);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,210 +1,210 @@\n-\u002F*!\r\n- * jQuery.scrollTo\r\n- * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\r\n- * Licensed under MIT\r\n- * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\r\n- * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\r\n- * @author Ariel Flesler\r\n- * @version 2.1.2\r\n- *\u002F\r\n-;(function(factory) {\r\n-    'use strict';\r\n-    if (typeof define === 'function' && define.amd) {\r\n-        \u002F\u002F AMD\r\n-        define(['jquery'], factory);\r\n-    } else if (typeof module !== 'undefined' && module.exports) {\r\n-        \u002F\u002F CommonJS\r\n-        module.exports = factory(require('jquery'));\r\n-    } else {\r\n-        \u002F\u002F Global\r\n-        factory(jQuery);\r\n-    }\r\n-})(function($) {\r\n-    'use strict';\r\n-\r\n-    var $scrollTo = $.scrollTo = function(target, duration, settings) {\r\n-        return $(window).scrollTo(target, duration, settings);\r\n-    };\r\n-\r\n-    $scrollTo.defaults = {\r\n-        axis:'xy',\r\n-        duration: 0,\r\n-        limit:true\r\n-    };\r\n-\r\n-    function isWin(elem) {\r\n-        return !elem.nodeName ||\r\n-            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\r\n-    }\r\n-\r\n-    $.fn.scrollTo = function(target, duration, settings) {\r\n-        if (typeof duration === 'object') {\r\n-            settings = duration;\r\n-            duration = 0;\r\n-        }\r\n-        if (typeof settings === 'function') {\r\n-            settings = { onAfter:settings };\r\n-        }\r\n-        if (target === 'max') {\r\n-            target = 9e9;\r\n-        }\r\n-\r\n-        settings = $.extend({}, $scrollTo.defaults, settings);\r\n-        \u002F\u002F Speed is still recognized for backwards compatibility\r\n-        duration = duration || settings.duration;\r\n-        \u002F\u002F Make sure the settings are given right\r\n-        var queue = settings.queue && settings.axis.length > 1;\r\n-        if (queue) {\r\n-            \u002F\u002F Let's keep the overall duration\r\n-            duration \u002F= 2;\r\n-        }\r\n-        settings.offset = both(settings.offset);\r\n-        settings.over = both(settings.over);\r\n-\r\n-        return this.each(function() {\r\n-            \u002F\u002F Null target yields nothing, just like jQuery does\r\n-            if (target === null) return;\r\n-\r\n-            var win = isWin(this),\r\n-                elem = win ? this.contentWindow || window : this,\r\n-                $elem = $(elem),\r\n-                targ = target,\r\n-                attr = {},\r\n-                toff;\r\n-\r\n-            switch (typeof targ) {\r\n-                \u002F\u002F A number will pass the regex\r\n-                case 'number':\r\n-                case 'string':\r\n-                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\r\n-                        targ = both(targ);\r\n-                        \u002F\u002F We are done\r\n-                        break;\r\n-                    }\r\n-                    \u002F\u002F Relative\u002FAbsolute selector\r\n-                    targ = win ? $(targ) : $(targ, elem);\r\n-                \u002F* falls through *\u002F\r\n-                case 'object':\r\n-                    if (targ.length === 0) return;\r\n-                    \u002F\u002F DOMElement \u002F jQuery\r\n-                    if (targ.is || targ.style) {\r\n-                        \u002F\u002F Get the real position of the target\r\n-                        toff = (targ = $(targ)).offset();\r\n-                    }\r\n-            }\r\n-\r\n-            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\r\n-\r\n-            $.each(settings.axis.split(''), function(i, axis) {\r\n-                var Pos\t= axis === 'x' ? 'Left' : 'Top',\r\n-                    pos = Pos.toLowerCase(),\r\n-                    key = 'scroll' + Pos,\r\n-                    prev = $elem[key](),\r\n-                    max = $scrollTo.max(elem, axis);\r\n-\r\n-                if (toff) {\u002F\u002F jQuery \u002F DOMElement\r\n-                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\r\n-\r\n-                    \u002F\u002F If it's a dom element, reduce the margin\r\n-                    if (settings.margin) {\r\n-                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\r\n-                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\r\n-                    }\r\n-\r\n-                    attr[key] += offset[pos] || 0;\r\n-\r\n-                    if (settings.over[pos]) {\r\n-                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\r\n-                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\r\n-                    }\r\n-                } else {\r\n-                    var val = targ[pos];\r\n-                    \u002F\u002F Handle percentage values\r\n-                    attr[key] = val.slice && val.slice(-1) === '%' ?\r\n-                        parseFloat(val) \u002F 100 * max\r\n-                        : val;\r\n-                }\r\n-\r\n-                \u002F\u002F Number or 'number'\r\n-                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\r\n-                    \u002F\u002F Check the limits\r\n-                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\r\n-                }\r\n-\r\n-                \u002F\u002F Don't waste time animating, if there's no need.\r\n-                if (!i && settings.axis.length > 1) {\r\n-                    if (prev === attr[key]) {\r\n-                        \u002F\u002F No animation needed\r\n-                        attr = {};\r\n-                    } else if (queue) {\r\n-                        \u002F\u002F Intermediate animation\r\n-                        animate(settings.onAfterFirst);\r\n-                        \u002F\u002F Don't animate this axis again in the next iteration.\r\n-                        attr = {};\r\n-                    }\r\n-                }\r\n-            });\r\n-\r\n-            animate(settings.onAfter);\r\n-\r\n-            function animate(callback) {\r\n-                var opts = $.extend({}, settings, {\r\n-                    \u002F\u002F The queue setting conflicts with animate()\r\n-                    \u002F\u002F Force it to always be true\r\n-                    queue: true,\r\n-                    duration: duration,\r\n-                    complete: callback && function() {\r\n-                        callback.call(elem, targ, settings);\r\n-                    }\r\n-                });\r\n-                $elem.animate(attr, opts);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Max scrolling position, works on quirks mode\r\n-    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\r\n-    $scrollTo.max = function(elem, axis) {\r\n-        var Dim = axis === 'x' ? 'Width' : 'Height',\r\n-            scroll = 'scroll'+Dim;\r\n-\r\n-        if (!isWin(elem))\r\n-            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\r\n-\r\n-        var size = 'client' + Dim,\r\n-            doc = elem.ownerDocument || elem.document,\r\n-            html = doc.documentElement,\r\n-            body = doc.body;\r\n-\r\n-        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\r\n-    };\r\n-\r\n-    function both(val) {\r\n-        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\r\n-    }\r\n-\r\n-    \u002F\u002F Add special hooks so that window scroll properties can be animated\r\n-    $.Tween.propHooks.scrollLeft =\r\n-        $.Tween.propHooks.scrollTop = {\r\n-            get: function(t) {\r\n-                return $(t.elem)[t.prop]();\r\n-            },\r\n-            set: function(t) {\r\n-                var curr = this.get(t);\r\n-                \u002F\u002F If interrupt is true and user scrolled, stop animating\r\n-                if (t.options.interrupt && t._last && t._last !== curr) {\r\n-                    return $(t.elem).stop();\r\n-                }\r\n-                var next = Math.round(t.now);\r\n-                \u002F\u002F Don't waste CPU\r\n-                \u002F\u002F Browsers don't render floating point scroll\r\n-                if (curr !== next) {\r\n-                    $(t.elem)[t.prop](next);\r\n-                    t._last = this.get(t);\r\n-                }\r\n-            }\r\n-        };\r\n-\r\n-    \u002F\u002F AMD requirement\r\n-    return $scrollTo;\r\n+\u002F*!\n+ * jQuery.scrollTo\n+ * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\n+ * Licensed under MIT\n+ * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\n+ * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\n+ * @author Ariel Flesler\n+ * @version 2.1.2\n+ *\u002F\n+;(function(factory) {\n+    'use strict';\n+    if (typeof define === 'function' && define.amd) {\n+        \u002F\u002F AMD\n+        define(['jquery'], factory);\n+    } else if (typeof module !== 'undefined' && module.exports) {\n+        \u002F\u002F CommonJS\n+        module.exports = factory(require('jquery'));\n+    } else {\n+        \u002F\u002F Global\n+        factory(jQuery);\n+    }\n+})(function($) {\n+    'use strict';\n+\n+    var $scrollTo = $.scrollTo = function(target, duration, settings) {\n+        return $(window).scrollTo(target, duration, settings);\n+    };\n+\n+    $scrollTo.defaults = {\n+        axis:'xy',\n+        duration: 0,\n+        limit:true\n+    };\n+\n+    function isWin(elem) {\n+        return !elem.nodeName ||\n+            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\n+    }\n+\n+    $.fn.scrollTo = function(target, duration, settings) {\n+        if (typeof duration === 'object') {\n+            settings = duration;\n+            duration = 0;\n+        }\n+        if (typeof settings === 'function') {\n+            settings = { onAfter:settings };\n+        }\n+        if (target === 'max') {\n+            target = 9e9;\n+        }\n+\n+        settings = $.extend({}, $scrollTo.defaults, settings);\n+        \u002F\u002F Speed is still recognized for backwards compatibility\n+        duration = duration || settings.duration;\n+        \u002F\u002F Make sure the settings are given right\n+        var queue = settings.queue && settings.axis.length > 1;\n+        if (queue) {\n+            \u002F\u002F Let's keep the overall duration\n+            duration \u002F= 2;\n+        }\n+        settings.offset = both(settings.offset);\n+        settings.over = both(settings.over);\n+\n+        return this.each(function() {\n+            \u002F\u002F Null target yields nothing, just like jQuery does\n+            if (target === null) return;\n+\n+            var win = isWin(this),\n+                elem = win ? this.contentWindow || window : this,\n+                $elem = $(elem),\n+                targ = target,\n+                attr = {},\n+                toff;\n+\n+            switch (typeof targ) {\n+                \u002F\u002F A number will pass the regex\n+                case 'number':\n+                case 'string':\n+                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\n+                        targ = both(targ);\n+                        \u002F\u002F We are done\n+                        break;\n+                    }\n+                    \u002F\u002F Relative\u002FAbsolute selector\n+                    targ = win ? $(targ) : $(targ, elem);\n+                \u002F* falls through *\u002F\n+                case 'object':\n+                    if (targ.length === 0) return;\n+                    \u002F\u002F DOMElement \u002F jQuery\n+                    if (targ.is || targ.style) {\n+                        \u002F\u002F Get the real position of the target\n+                        toff = (targ = $(targ)).offset();\n+                    }\n+            }\n+\n+            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\n+\n+            $.each(settings.axis.split(''), function(i, axis) {\n+                var Pos\t= axis === 'x' ? 'Left' : 'Top',\n+                    pos = Pos.toLowerCase(),\n+                    key = 'scroll' + Pos,\n+                    prev = $elem[key](),\n+                    max = $scrollTo.max(elem, axis);\n+\n+                if (toff) {\u002F\u002F jQuery \u002F DOMElement\n+                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\n+\n+                    \u002F\u002F If it's a dom element, reduce the margin\n+                    if (settings.margin) {\n+                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\n+                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\n+                    }\n+\n+                    attr[key] += offset[pos] || 0;\n+\n+                    if (settings.over[pos]) {\n+                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\n+                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\n+                    }\n+                } else {\n+                    var val = targ[pos];\n+                    \u002F\u002F Handle percentage values\n+                    attr[key] = val.slice && val.slice(-1) === '%' ?\n+                        parseFloat(val) \u002F 100 * max\n+                        : val;\n+                }\n+\n+                \u002F\u002F Number or 'number'\n+                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\n+                    \u002F\u002F Check the limits\n+                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\n+                }\n+\n+                \u002F\u002F Don't waste time animating, if there's no need.\n+                if (!i && settings.axis.length > 1) {\n+                    if (prev === attr[key]) {\n+                        \u002F\u002F No animation needed\n+                        attr = {};\n+                    } else if (queue) {\n+                        \u002F\u002F Intermediate animation\n+                        animate(settings.onAfterFirst);\n+                        \u002F\u002F Don't animate this axis again in the next iteration.\n+                        attr = {};\n+                    }\n+                }\n+            });\n+\n+            animate(settings.onAfter);\n+\n+            function animate(callback) {\n+                var opts = $.extend({}, settings, {\n+                    \u002F\u002F The queue setting conflicts with animate()\n+                    \u002F\u002F Force it to always be true\n+                    queue: true,\n+                    duration: duration,\n+                    complete: callback && function() {\n+                        callback.call(elem, targ, settings);\n+                    }\n+                });\n+                $elem.animate(attr, opts);\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Max scrolling position, works on quirks mode\n+    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\n+    $scrollTo.max = function(elem, axis) {\n+        var Dim = axis === 'x' ? 'Width' : 'Height',\n+            scroll = 'scroll'+Dim;\n+\n+        if (!isWin(elem))\n+            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\n+\n+        var size = 'client' + Dim,\n+            doc = elem.ownerDocument || elem.document,\n+            html = doc.documentElement,\n+            body = doc.body;\n+\n+        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\n+    };\n+\n+    function both(val) {\n+        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\n+    }\n+\n+    \u002F\u002F Add special hooks so that window scroll properties can be animated\n+    $.Tween.propHooks.scrollLeft =\n+        $.Tween.propHooks.scrollTop = {\n+            get: function(t) {\n+                return $(t.elem)[t.prop]();\n+            },\n+            set: function(t) {\n+                var curr = this.get(t);\n+                \u002F\u002F If interrupt is true and user scrolled, stop animating\n+                if (t.options.interrupt && t._last && t._last !== curr) {\n+                    return $(t.elem).stop();\n+                }\n+                var next = Math.round(t.now);\n+                \u002F\u002F Don't waste CPU\n+                \u002F\u002F Browsers don't render floating point scroll\n+                if (curr !== next) {\n+                    $(t.elem)[t.prop](next);\n+                    t._last = this.get(t);\n+                }\n+            }\n+        };\n+\n+    \u002F\u002F AMD requirement\n+    return $scrollTo;\n });\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,84 +1,84 @@\n-(function (e) {\r\n-\te.backward_timer = function (t) {\r\n-\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\r\n-\t\t}, on_tick      : function (e) {\r\n-\t\t}}, r = this;\r\n-\t\tr.seconds_left = 0;\r\n-\t\tr.target = e(t);\r\n-\t\tr.timeout = undefined;\r\n-\t\tr.settings = {};\r\n-\t\tr.methods = {init     : function (t) {\r\n-\t\t\tr.settings = e.extend({}, n, t);\r\n-\t\t\tif (r.settings.value_setter == undefined) {\r\n-\t\t\t\tif (r.target.is(\"input\")) {\r\n-\t\t\t\t\tr.settings.value_setter = \"val\"\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tr.settings.value_setter = \"text\"\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tr.methods.reset()\r\n-\t\t}, start              : function () {\r\n-\t\t\tif (r.timeout == undefined) {\r\n-\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\r\n-\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\r\n-\t\t\t}\r\n-\t\t}, cancel             : function () {\r\n-\t\t\tif (r.timeout != undefined) {\r\n-\t\t\t\tclearTimeout(r.timeout);\r\n-\t\t\t\tr.timeout = undefined\r\n-\t\t\t}\r\n-\t\t}, reset              : function () {\r\n-\t\t\tr.seconds_left = r.settings.seconds;\r\n-\t\t\tr.methods._render_seconds()\r\n-\t\t}, _on_tick           : function (e) {\r\n-\t\t\tif (e != 0) {\r\n-\t\t\t\tr.settings.on_tick(r)\r\n-\t\t\t}\r\n-\t\t\tr.methods._render_seconds();\r\n-\t\t\tif (r.seconds_left > 0) {\r\n-\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\r\n-\t\t\t\t\tvar t = r.seconds_left\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tvar t = r.settings.step\r\n-\t\t\t\t}\r\n-\t\t\t\tr.seconds_left -= t;\r\n-\t\t\t\tvar n = t * 1e3;\r\n-\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\r\n-\t\t\t} else {\r\n-\t\t\t\tr.timeout = undefined;\r\n-\t\t\t\tr.settings.on_exhausted(r)\r\n-\t\t\t}\r\n-\t\t}, _render_seconds    : function () {\r\n-\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\r\n-\t\t\tif (t.indexOf(\"d%\") !== -1) {\r\n-\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\r\n-\t\t\t} else {\r\n-\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\r\n-\t\t\t}\r\n-\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\r\n-\t\t\tr.target[r.settings.value_setter](t)\r\n-\t\t}, _seconds_to_dhms   : function (e) {\r\n-\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\r\n-\t\t\treturn{d: t, h: n, m: r, s: i}\r\n-\t\t}, _check_leading_zero: function (e) {\r\n-\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\r\n-\t\t}}\r\n-\t};\r\n-\te.fn.backward_timer = function (t) {\r\n-\t\tvar n = arguments;\r\n-\t\treturn this.each(function () {\r\n-\t\t\tvar r = e(this).data(\"backward_timer\");\r\n-\t\t\tif (r == undefined) {\r\n-\t\t\t\tr = new e.backward_timer(this);\r\n-\t\t\t\te(this).data(\"backward_timer\", r)\r\n-\t\t\t}\r\n-\t\t\tif (r.methods[t]) {\r\n-\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\r\n-\t\t\t} else if (typeof t === \"object\" || !t) {\r\n-\t\t\t\treturn r.methods.init.apply(this, n)\r\n-\t\t\t} else {\r\n-\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\r\n-\t\t\t}\r\n-\t\t})\r\n-\t}\r\n-})(jQuery);\r\n+(function (e) {\n+\te.backward_timer = function (t) {\n+\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\n+\t\t}, on_tick      : function (e) {\n+\t\t}}, r = this;\n+\t\tr.seconds_left = 0;\n+\t\tr.target = e(t);\n+\t\tr.timeout = undefined;\n+\t\tr.settings = {};\n+\t\tr.methods = {init     : function (t) {\n+\t\t\tr.settings = e.extend({}, n, t);\n+\t\t\tif (r.settings.value_setter == undefined) {\n+\t\t\t\tif (r.target.is(\"input\")) {\n+\t\t\t\t\tr.settings.value_setter = \"val\"\n+\t\t\t\t} else {\n+\t\t\t\t\tr.settings.value_setter = \"text\"\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tr.methods.reset()\n+\t\t}, start              : function () {\n+\t\t\tif (r.timeout == undefined) {\n+\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\n+\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\n+\t\t\t}\n+\t\t}, cancel             : function () {\n+\t\t\tif (r.timeout != undefined) {\n+\t\t\t\tclearTimeout(r.timeout);\n+\t\t\t\tr.timeout = undefined\n+\t\t\t}\n+\t\t}, reset              : function () {\n+\t\t\tr.seconds_left = r.settings.seconds;\n+\t\t\tr.methods._render_seconds()\n+\t\t}, _on_tick           : function (e) {\n+\t\t\tif (e != 0) {\n+\t\t\t\tr.settings.on_tick(r)\n+\t\t\t}\n+\t\t\tr.methods._render_seconds();\n+\t\t\tif (r.seconds_left > 0) {\n+\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\n+\t\t\t\t\tvar t = r.seconds_left\n+\t\t\t\t} else {\n+\t\t\t\t\tvar t = r.settings.step\n+\t\t\t\t}\n+\t\t\t\tr.seconds_left -= t;\n+\t\t\t\tvar n = t * 1e3;\n+\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\n+\t\t\t} else {\n+\t\t\t\tr.timeout = undefined;\n+\t\t\t\tr.settings.on_exhausted(r)\n+\t\t\t}\n+\t\t}, _render_seconds    : function () {\n+\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\n+\t\t\tif (t.indexOf(\"d%\") !== -1) {\n+\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\n+\t\t\t} else {\n+\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\n+\t\t\t}\n+\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\n+\t\t\tr.target[r.settings.value_setter](t)\n+\t\t}, _seconds_to_dhms   : function (e) {\n+\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\n+\t\t\treturn{d: t, h: n, m: r, s: i}\n+\t\t}, _check_leading_zero: function (e) {\n+\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\n+\t\t}}\n+\t};\n+\te.fn.backward_timer = function (t) {\n+\t\tvar n = arguments;\n+\t\treturn this.each(function () {\n+\t\t\tvar r = e(this).data(\"backward_timer\");\n+\t\t\tif (r == undefined) {\n+\t\t\t\tr = new e.backward_timer(this);\n+\t\t\t\te(this).data(\"backward_timer\", r)\n+\t\t\t}\n+\t\t\tif (r.methods[t]) {\n+\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\n+\t\t\t} else if (typeof t === \"object\" || !t) {\n+\t\t\t\treturn r.methods.init.apply(this, n)\n+\t\t\t} else {\n+\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\n+\t\t\t}\n+\t\t})\n+\t}\n+})(jQuery);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.tipsy.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.tipsy.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.tipsy.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.tipsy.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,258 +1,258 @@\n-\u002F\u002F tipsy, facebook style tooltips for jquery\r\n-\u002F\u002F version 1.0.0a\r\n-\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\r\n-\u002F\u002F released under the MIT license\r\n-\r\n-(function($) {\r\n-\r\n-    function maybeCall(thing, ctx) {\r\n-        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\r\n-    };\r\n-\r\n-    function isElementInDOM(ele) {\r\n-        while (ele = ele.parentNode) {\r\n-            if (ele == document) return true;\r\n-        }\r\n-        return false;\r\n-    };\r\n-\r\n-    function Tipsy(element, options) {\r\n-        this.$element = $(element);\r\n-        this.options = options;\r\n-        this.enabled = true;\r\n-        this.fixTitle();\r\n-    };\r\n-\r\n-    Tipsy.prototype = {\r\n-        show: function() {\r\n-            var title = this.getTitle();\r\n-            if (title && this.enabled) {\r\n-                var $tip = this.tip();\r\n-\r\n-                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\r\n-                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\r\n-                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\r\n-\r\n-                var pos = $.extend({}, this.$element.offset(), {\r\n-                    width: this.$element[0].offsetWidth,\r\n-                    height: this.$element[0].offsetHeight\r\n-                });\r\n-\r\n-                var actualWidth = $tip[0].offsetWidth,\r\n-                    actualHeight = $tip[0].offsetHeight,\r\n-                    gravity = maybeCall(this.options.gravity, this.$element[0]);\r\n-\r\n-                var tp;\r\n-                switch (gravity.charAt(0)) {\r\n-                    case 'n':\r\n-                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 's':\r\n-                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 'e':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\r\n-                        break;\r\n-                    case 'w':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\r\n-                        break;\r\n-                }\r\n-\r\n-                if (gravity.length == 2) {\r\n-                    if (gravity.charAt(1) == 'w') {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - 15;\r\n-                    } else {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\r\n-                    }\r\n-                }\r\n-\r\n-                $tip.css(tp).addClass('tipsy-' + gravity);\r\n-                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\r\n-                if (this.options.className) {\r\n-                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\r\n-                }\r\n-\r\n-                if (this.options.fade) {\r\n-                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\r\n-                } else {\r\n-                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        hide: function() {\r\n-            if (this.options.fade) {\r\n-                this.tip().stop().fadeOut(function() { $(this).remove(); });\r\n-            } else {\r\n-                this.tip().remove();\r\n-            }\r\n-        },\r\n-\r\n-        fixTitle: function() {\r\n-            var $e = this.$element;\r\n-            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\r\n-                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\r\n-            }\r\n-        },\r\n-\r\n-        getTitle: function() {\r\n-            var title, $e = this.$element, o = this.options;\r\n-            this.fixTitle();\r\n-            var title, o = this.options;\r\n-            if (typeof o.title == 'string') {\r\n-                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\r\n-            } else if (typeof o.title == 'function') {\r\n-                title = o.title.call($e[0]);\r\n-            }\r\n-            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\r\n-            return title || o.fallback;\r\n-        },\r\n-\r\n-        tip: function() {\r\n-            if (!this.$tip) {\r\n-                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\r\n-                this.$tip.data('tipsy-pointee', this.$element[0]);\r\n-            }\r\n-            return this.$tip;\r\n-        },\r\n-\r\n-        validate: function() {\r\n-            if (!this.$element[0].parentNode) {\r\n-                this.hide();\r\n-                this.$element = null;\r\n-                this.options = null;\r\n-            }\r\n-        },\r\n-\r\n-        enable: function() { this.enabled = true; },\r\n-        disable: function() { this.enabled = false; },\r\n-        toggleEnabled: function() { this.enabled = !this.enabled; }\r\n-    };\r\n-\r\n-    $.fn.tipsy = function(options) {\r\n-\r\n-        if (options === true) {\r\n-            return this.data('tipsy');\r\n-        } else if (typeof options == 'string') {\r\n-            var tipsy = this.data('tipsy');\r\n-            if (tipsy) tipsy[options]();\r\n-            return this;\r\n-        }\r\n-\r\n-        options = $.extend({}, $.fn.tipsy.defaults, options);\r\n-\r\n-        function get(ele) {\r\n-            var tipsy = $.data(ele, 'tipsy');\r\n-            if (!tipsy) {\r\n-                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\r\n-                $.data(ele, 'tipsy', tipsy);\r\n-            }\r\n-            return tipsy;\r\n-        }\r\n-\r\n-        function enter() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'in';\r\n-            if (options.delayIn == 0) {\r\n-                tipsy.show();\r\n-            } else {\r\n-                tipsy.fixTitle();\r\n-                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\r\n-            }\r\n-        };\r\n-\r\n-        function leave() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'out';\r\n-            if (options.delayOut == 0) {\r\n-                tipsy.hide();\r\n-            } else {\r\n-                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\r\n-            }\r\n-        };\r\n-\r\n-        if (!options.live) this.each(function() { get(this); });\r\n-\r\n-        if (options.trigger != 'manual') {\r\n-            var binder   = options.live ? 'live' : 'bind',\r\n-                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\r\n-                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\r\n-            this[binder](eventIn, enter)[binder](eventOut, leave);\r\n-        }\r\n-\r\n-        return this;\r\n-\r\n-    };\r\n-\r\n-    $.fn.tipsy.defaults = {\r\n-        className: null,\r\n-        delayIn: 0,\r\n-        delayOut: 0,\r\n-        fade: false,\r\n-        fallback: '',\r\n-        gravity: 'n',\r\n-        html: false,\r\n-        live: false,\r\n-        offset: 0,\r\n-        opacity: 0.8,\r\n-        title: 'title',\r\n-        trigger: 'hover'\r\n-    };\r\n-\r\n-    $.fn.tipsy.revalidate = function() {\r\n-        $('.tipsy').each(function() {\r\n-            var pointee = $.data(this, 'tipsy-pointee');\r\n-            if (!pointee || !isElementInDOM(pointee)) {\r\n-                $(this).remove();\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Overwrite this method to provide options on a per-element basis.\r\n-    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\r\n-    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\r\n-    \u002F\u002F (remember - do not modify 'options' in place!)\r\n-    $.fn.tipsy.elementOptions = function(ele, options) {\r\n-        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoNS = function() {\r\n-        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoWE = function() {\r\n-        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * yields a closure of the supplied parameters, producing a function that takes\r\n-     * no arguments and is suitable for use as an autogravity function like so:\r\n-     *\r\n-     * @param margin (int) - distance from the viewable region edge that an\r\n-     *        element should be before setting its tooltip's gravity to be away\r\n-     *        from that edge.\r\n-     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\r\n-     *        if there are no viewable region edges effecting the tooltip's\r\n-     *        gravity. It will try to vary from this minimally, for example,\r\n-     *        if 'sw' is preferred and an element is near the right viewable\r\n-     *        region edge, but not the top edge, it will set the gravity for\r\n-     *        that element's tooltip to be 'se', preserving the southern\r\n-     *        component.\r\n-     *\u002F\r\n-    $.fn.tipsy.autoBounds = function(margin, prefer) {\r\n-        return function() {\r\n-            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\r\n-                boundTop = $(document).scrollTop() + margin,\r\n-                boundLeft = $(document).scrollLeft() + margin,\r\n-                $this = $(this);\r\n-\r\n-            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\r\n-            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\r\n-            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\r\n-            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\r\n-\r\n-            return dir.ns + (dir.ew ? dir.ew : '');\r\n-        }\r\n-    };\r\n-\r\n+\u002F\u002F tipsy, facebook style tooltips for jquery\n+\u002F\u002F version 1.0.0a\n+\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\n+\u002F\u002F released under the MIT license\n+\n+(function($) {\n+\n+    function maybeCall(thing, ctx) {\n+        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\n+    };\n+\n+    function isElementInDOM(ele) {\n+        while (ele = ele.parentNode) {\n+            if (ele == document) return true;\n+        }\n+        return false;\n+    };\n+\n+    function Tipsy(element, options) {\n+        this.$element = $(element);\n+        this.options = options;\n+        this.enabled = true;\n+        this.fixTitle();\n+    };\n+\n+    Tipsy.prototype = {\n+        show: function() {\n+            var title = this.getTitle();\n+            if (title && this.enabled) {\n+                var $tip = this.tip();\n+\n+                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\n+                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\n+                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\n+\n+                var pos = $.extend({}, this.$element.offset(), {\n+                    width: this.$element[0].offsetWidth,\n+                    height: this.$element[0].offsetHeight\n+                });\n+\n+                var actualWidth = $tip[0].offsetWidth,\n+                    actualHeight = $tip[0].offsetHeight,\n+                    gravity = maybeCall(this.options.gravity, this.$element[0]);\n+\n+                var tp;\n+                switch (gravity.charAt(0)) {\n+                    case 'n':\n+                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 's':\n+                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 'e':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\n+                        break;\n+                    case 'w':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\n+                        break;\n+                }\n+\n+                if (gravity.length == 2) {\n+                    if (gravity.charAt(1) == 'w') {\n+                        tp.left = pos.left + pos.width \u002F 2 - 15;\n+                    } else {\n+                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\n+                    }\n+                }\n+\n+                $tip.css(tp).addClass('tipsy-' + gravity);\n+                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\n+                if (this.options.className) {\n+                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\n+                }\n+\n+                if (this.options.fade) {\n+                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\n+                } else {\n+                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\n+                }\n+            }\n+        },\n+\n+        hide: function() {\n+            if (this.options.fade) {\n+                this.tip().stop().fadeOut(function() { $(this).remove(); });\n+            } else {\n+                this.tip().remove();\n+            }\n+        },\n+\n+        fixTitle: function() {\n+            var $e = this.$element;\n+            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\n+                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\n+            }\n+        },\n+\n+        getTitle: function() {\n+            var title, $e = this.$element, o = this.options;\n+            this.fixTitle();\n+            var title, o = this.options;\n+            if (typeof o.title == 'string') {\n+                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\n+            } else if (typeof o.title == 'function') {\n+                title = o.title.call($e[0]);\n+            }\n+            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\n+            return title || o.fallback;\n+        },\n+\n+        tip: function() {\n+            if (!this.$tip) {\n+                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\n+                this.$tip.data('tipsy-pointee', this.$element[0]);\n+            }\n+            return this.$tip;\n+        },\n+\n+        validate: function() {\n+            if (!this.$element[0].parentNode) {\n+                this.hide();\n+                this.$element = null;\n+                this.options = null;\n+            }\n+        },\n+\n+        enable: function() { this.enabled = true; },\n+        disable: function() { this.enabled = false; },\n+        toggleEnabled: function() { this.enabled = !this.enabled; }\n+    };\n+\n+    $.fn.tipsy = function(options) {\n+\n+        if (options === true) {\n+            return this.data('tipsy');\n+        } else if (typeof options == 'string') {\n+            var tipsy = this.data('tipsy');\n+            if (tipsy) tipsy[options]();\n+            return this;\n+        }\n+\n+        options = $.extend({}, $.fn.tipsy.defaults, options);\n+\n+        function get(ele) {\n+            var tipsy = $.data(ele, 'tipsy');\n+            if (!tipsy) {\n+                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n+                $.data(ele, 'tipsy', tipsy);\n+            }\n+            return tipsy;\n+        }\n+\n+        function enter() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'in';\n+            if (options.delayIn == 0) {\n+                tipsy.show();\n+            } else {\n+                tipsy.fixTitle();\n+                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\n+            }\n+        };\n+\n+        function leave() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'out';\n+            if (options.delayOut == 0) {\n+                tipsy.hide();\n+            } else {\n+                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\n+            }\n+        };\n+\n+        if (!options.live) this.each(function() { get(this); });\n+\n+        if (options.trigger != 'manual') {\n+            var binder   = options.live ? 'live' : 'bind',\n+                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\n+                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\n+            this[binder](eventIn, enter)[binder](eventOut, leave);\n+        }\n+\n+        return this;\n+\n+    };\n+\n+    $.fn.tipsy.defaults = {\n+        className: null,\n+        delayIn: 0,\n+        delayOut: 0,\n+        fade: false,\n+        fallback: '',\n+        gravity: 'n',\n+        html: false,\n+        live: false,\n+        offset: 0,\n+        opacity: 0.8,\n+        title: 'title',\n+        trigger: 'hover'\n+    };\n+\n+    $.fn.tipsy.revalidate = function() {\n+        $('.tipsy').each(function() {\n+            var pointee = $.data(this, 'tipsy-pointee');\n+            if (!pointee || !isElementInDOM(pointee)) {\n+                $(this).remove();\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Overwrite this method to provide options on a per-element basis.\n+    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\n+    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n+    \u002F\u002F (remember - do not modify 'options' in place!)\n+    $.fn.tipsy.elementOptions = function(ele, options) {\n+        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n+    };\n+\n+    $.fn.tipsy.autoNS = function() {\n+        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\n+    };\n+\n+    $.fn.tipsy.autoWE = function() {\n+        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\n+    };\n+\n+    \u002F**\n+     * yields a closure of the supplied parameters, producing a function that takes\n+     * no arguments and is suitable for use as an autogravity function like so:\n+     *\n+     * @param margin (int) - distance from the viewable region edge that an\n+     *        element should be before setting its tooltip's gravity to be away\n+     *        from that edge.\n+     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n+     *        if there are no viewable region edges effecting the tooltip's\n+     *        gravity. It will try to vary from this minimally, for example,\n+     *        if 'sw' is preferred and an element is near the right viewable\n+     *        region edge, but not the top edge, it will set the gravity for\n+     *        that element's tooltip to be 'se', preserving the southern\n+     *        component.\n+     *\u002F\n+    $.fn.tipsy.autoBounds = function(margin, prefer) {\n+        return function() {\n+            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\n+                boundTop = $(document).scrollTop() + margin,\n+                boundLeft = $(document).scrollLeft() + margin,\n+                $this = $(this);\n+\n+            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\n+            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\n+            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\n+            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\n+\n+            return dir.ns + (dir.ew ? dir.ew : '');\n+        }\n+    };\n+\n })(jQuery);\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2291 +1,2291 @@\n-\u002F*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20\r\n-* http:\u002F\u002Ftrentrichardson.com\u002Fexamples\u002Ftimepicker\r\n-* Copyright (c) 2016 Trent Richardson; Licensed MIT *\u002F\r\n-(function (factory) {\r\n-\tif (typeof define === 'function' && define.amd) {\r\n-\t\tdefine(['jquery', 'jquery-ui'], factory);\r\n-\t} else {\r\n-\t\tfactory(jQuery);\r\n-\t}\r\n-}(function ($) {\r\n-\r\n-\t\u002F*\r\n-\t* Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\r\n-\t*\u002F\r\n-\t$.ui.timepicker = $.ui.timepicker || {};\r\n-\tif ($.ui.timepicker.version) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F*\r\n-\t* Extend jQueryUI, get it started with our version number\r\n-\t*\u002F\r\n-\t$.extend($.ui, {\r\n-\t\ttimepicker: {\r\n-\t\t\tversion: \"1.6.3\"\r\n-\t\t}\r\n-\t});\r\n-\r\n-\t\u002F*\r\n-\t* Timepicker manager.\r\n-\t* Use the singleton instance of this class, $.timepicker, to interact with the time picker.\r\n-\t* Settings for (groups of) time pickers are maintained in an instance object,\r\n-\t* allowing multiple different settings on the same page.\r\n-\t*\u002F\r\n-\tvar Timepicker = function () {\r\n-\t\tthis.regional = []; \u002F\u002F Available regional settings, indexed by language code\r\n-\t\tthis.regional[''] = { \u002F\u002F Default regional settings\r\n-\t\t\tcurrentText: 'Now',\r\n-\t\t\tcloseText: 'Done',\r\n-\t\t\tamNames: ['AM', 'A'],\r\n-\t\t\tpmNames: ['PM', 'P'],\r\n-\t\t\ttimeFormat: 'HH:mm',\r\n-\t\t\ttimeSuffix: '',\r\n-\t\t\ttimeOnlyTitle: 'Choose Time',\r\n-\t\t\ttimeText: 'Time',\r\n-\t\t\thourText: 'Hour',\r\n-\t\t\tminuteText: 'Minute',\r\n-\t\t\tsecondText: 'Second',\r\n-\t\t\tmillisecText: 'Millisecond',\r\n-\t\t\tmicrosecText: 'Microsecond',\r\n-\t\t\ttimezoneText: 'Time Zone',\r\n-\t\t\tisRTL: false\r\n-\t\t};\r\n-\t\tthis._defaults = { \u002F\u002F Global defaults for all the datetime picker instances\r\n-\t\t\tshowButtonPanel: true,\r\n-\t\t\ttimeOnly: false,\r\n-\t\t\ttimeOnlyShowDate: false,\r\n-\t\t\tshowHour: null,\r\n-\t\t\tshowMinute: null,\r\n-\t\t\tshowSecond: null,\r\n-\t\t\tshowMillisec: null,\r\n-\t\t\tshowMicrosec: null,\r\n-\t\t\tshowTimezone: null,\r\n-\t\t\tshowTime: true,\r\n-\t\t\tstepHour: 1,\r\n-\t\t\tstepMinute: 1,\r\n-\t\t\tstepSecond: 1,\r\n-\t\t\tstepMillisec: 1,\r\n-\t\t\tstepMicrosec: 1,\r\n-\t\t\thour: 0,\r\n-\t\t\tminute: 0,\r\n-\t\t\tsecond: 0,\r\n-\t\t\tmillisec: 0,\r\n-\t\t\tmicrosec: 0,\r\n-\t\t\ttimezone: null,\r\n-\t\t\thourMin: 0,\r\n-\t\t\tminuteMin: 0,\r\n-\t\t\tsecondMin: 0,\r\n-\t\t\tmillisecMin: 0,\r\n-\t\t\tmicrosecMin: 0,\r\n-\t\t\thourMax: 23,\r\n-\t\t\tminuteMax: 59,\r\n-\t\t\tsecondMax: 59,\r\n-\t\t\tmillisecMax: 999,\r\n-\t\t\tmicrosecMax: 999,\r\n-\t\t\tminDateTime: null,\r\n-\t\t\tmaxDateTime: null,\r\n-\t\t\tmaxTime: null,\r\n-\t\t\tminTime: null,\r\n-\t\t\tonSelect: null,\r\n-\t\t\thourGrid: 0,\r\n-\t\t\tminuteGrid: 0,\r\n-\t\t\tsecondGrid: 0,\r\n-\t\t\tmillisecGrid: 0,\r\n-\t\t\tmicrosecGrid: 0,\r\n-\t\t\talwaysSetTime: true,\r\n-\t\t\tseparator: ' ',\r\n-\t\t\taltFieldTimeOnly: true,\r\n-\t\t\taltTimeFormat: null,\r\n-\t\t\taltSeparator: null,\r\n-\t\t\taltTimeSuffix: null,\r\n-\t\t\taltRedirectFocus: true,\r\n-\t\t\tpickerTimeFormat: null,\r\n-\t\t\tpickerTimeSuffix: null,\r\n-\t\t\tshowTimepicker: true,\r\n-\t\t\ttimezoneList: null,\r\n-\t\t\taddSliderAccess: false,\r\n-\t\t\tsliderAccessArgs: null,\r\n-\t\t\tcontrolType: 'slider',\r\n-\t\t\toneLine: false,\r\n-\t\t\tdefaultValue: null,\r\n-\t\t\tparse: 'strict',\r\n-\t\t\tafterInject: null\r\n-\t\t};\r\n-\t\t$.extend(this._defaults, this.regional['']);\r\n-\t};\r\n-\r\n-\t$.extend(Timepicker.prototype, {\r\n-\t\t$input: null,\r\n-\t\t$altInput: null,\r\n-\t\t$timeObj: null,\r\n-\t\tinst: null,\r\n-\t\thour_slider: null,\r\n-\t\tminute_slider: null,\r\n-\t\tsecond_slider: null,\r\n-\t\tmillisec_slider: null,\r\n-\t\tmicrosec_slider: null,\r\n-\t\ttimezone_select: null,\r\n-\t\tmaxTime: null,\r\n-\t\tminTime: null,\r\n-\t\thour: 0,\r\n-\t\tminute: 0,\r\n-\t\tsecond: 0,\r\n-\t\tmillisec: 0,\r\n-\t\tmicrosec: 0,\r\n-\t\ttimezone: null,\r\n-\t\thourMinOriginal: null,\r\n-\t\tminuteMinOriginal: null,\r\n-\t\tsecondMinOriginal: null,\r\n-\t\tmillisecMinOriginal: null,\r\n-\t\tmicrosecMinOriginal: null,\r\n-\t\thourMaxOriginal: null,\r\n-\t\tminuteMaxOriginal: null,\r\n-\t\tsecondMaxOriginal: null,\r\n-\t\tmillisecMaxOriginal: null,\r\n-\t\tmicrosecMaxOriginal: null,\r\n-\t\tampm: '',\r\n-\t\tformattedDate: '',\r\n-\t\tformattedTime: '',\r\n-\t\tformattedDateTime: '',\r\n-\t\ttimezoneList: null,\r\n-\t\tunits: ['hour', 'minute', 'second', 'millisec', 'microsec'],\r\n-\t\tsupport: {},\r\n-\t\tcontrol: null,\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Override the default settings for all instances of the time picker.\r\n-\t\t* @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\r\n-\t\t* @return {Object} the manager object\r\n-\t\t*\u002F\r\n-\t\tsetDefaults: function (settings) {\r\n-\t\t\textendRemove(this._defaults, settings || {});\r\n-\t\t\treturn this;\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Create a new Timepicker instance\r\n-\t\t*\u002F\r\n-\t\t_newInst: function ($input, opts) {\r\n-\t\t\tvar tp_inst = new Timepicker(),\r\n-\t\t\t\tinlineSettings = {},\r\n-\t\t\t\tfns = {},\r\n-\t\t\t\toverrides, i;\r\n-\r\n-\t\t\tfor (var attrName in this._defaults) {\r\n-\t\t\t\tif (this._defaults.hasOwnProperty(attrName)) {\r\n-\t\t\t\t\tvar attrValue = $input.attr('time:' + attrName);\r\n-\t\t\t\t\tif (attrValue) {\r\n-\t\t\t\t\t\ttry {\r\n-\t\t\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\r\n-\t\t\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t\t\tinlineSettings[attrName] = attrValue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\toverrides = {\r\n-\t\t\t\tbeforeShow: function (input, dp_inst) {\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\r\n-\t\t\t\t\t\treturn tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tonChangeMonthYear: function (year, month, dp_inst) {\r\n-\t\t\t\t\t\u002F\u002F Update the time as well : this prevents the time from disappearing from the $input field.\r\n-\t\t\t\t\t\u002F\u002F tp_inst._updateDateTime(dp_inst);\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\r\n-\t\t\t\t\t\ttp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tonClose: function (dateText, dp_inst) {\r\n-\t\t\t\t\tif (tp_inst.timeDefined === true && $input.val() !== '') {\r\n-\t\t\t\t\t\ttp_inst._updateDateTime(dp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onClose)) {\r\n-\t\t\t\t\t\ttp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t};\r\n-\t\t\tfor (i in overrides) {\r\n-\t\t\t\tif (overrides.hasOwnProperty(i)) {\r\n-\t\t\t\t\tfns[i] = opts[i] || this._defaults[i] || null;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\ttp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\r\n-\t\t\t\tevnts: fns,\r\n-\t\t\t\ttimepicker: tp_inst \u002F\u002F add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\r\n-\t\t\t});\r\n-\t\t\ttp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\r\n-\t\t\t\treturn val.toUpperCase();\r\n-\t\t\t});\r\n-\t\t\ttp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\r\n-\t\t\t\treturn val.toUpperCase();\r\n-\t\t\t});\r\n-\r\n-\t\t\t\u002F\u002F detect which units are supported\r\n-\t\t\ttp_inst.support = detectSupport(\r\n-\t\t\t\t\ttp_inst._defaults.timeFormat +\r\n-\t\t\t\t\t(tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\r\n-\t\t\t\t\t(tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\r\n-\r\n-\t\t\t\u002F\u002F controlType is string - key to our this._controls\r\n-\t\t\tif (typeof(tp_inst._defaults.controlType) === 'string') {\r\n-\t\t\t\tif (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\r\n-\t\t\t\t\ttp_inst._defaults.controlType = 'select';\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F controlType is an object and must implement create, options, value methods\r\n-\t\t\telse {\r\n-\t\t\t\ttp_inst.control = tp_inst._defaults.controlType;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F prep the timezone options\r\n-\t\t\tvar timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\r\n-\t\t\t\t\t0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\r\n-\t\t\tif (tp_inst._defaults.timezoneList !== null) {\r\n-\t\t\t\ttimezoneList = tp_inst._defaults.timezoneList;\r\n-\t\t\t}\r\n-\t\t\tvar tzl = timezoneList.length, tzi = 0, tzv = null;\r\n-\t\t\tif (tzl > 0 && typeof timezoneList[0] !== 'object') {\r\n-\t\t\t\tfor (; tzi \u003C tzl; tzi++) {\r\n-\t\t\t\t\ttzv = timezoneList[tzi];\r\n-\t\t\t\t\ttimezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\ttp_inst._defaults.timezoneList = timezoneList;\r\n-\r\n-\t\t\t\u002F\u002F set the default units\r\n-\t\t\ttp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\r\n-\t\t\t\t\t\t\t((new Date()).getTimezoneOffset() * -1);\r\n-\t\t\ttp_inst.hour = tp_inst._defaults.hour \u003C tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\r\n-\t\t\ttp_inst.minute = tp_inst._defaults.minute \u003C tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\r\n-\t\t\ttp_inst.second = tp_inst._defaults.second \u003C tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\r\n-\t\t\ttp_inst.millisec = tp_inst._defaults.millisec \u003C tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\r\n-\t\t\ttp_inst.microsec = tp_inst._defaults.microsec \u003C tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\r\n-\t\t\ttp_inst.ampm = '';\r\n-\t\t\ttp_inst.$input = $input;\r\n-\r\n-\t\t\tif (tp_inst._defaults.altField) {\r\n-\t\t\t\ttp_inst.$altInput = $(tp_inst._defaults.altField);\r\n-\t\t\t\tif (tp_inst._defaults.altRedirectFocus === true) {\r\n-\t\t\t\t\ttp_inst.$altInput.css({\r\n-\t\t\t\t\t\tcursor: 'pointer'\r\n-\t\t\t\t\t}).focus(function () {\r\n-\t\t\t\t\t\t$input.trigger(\"focus\");\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\r\n-\t\t\t\ttp_inst._defaults.minDate = new Date();\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\r\n-\t\t\t\ttp_inst._defaults.maxDate = new Date();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F datepicker needs minDate\u002FmaxDate, timepicker needs minDateTime\u002FmaxDateTime..\r\n-\t\t\tif (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\r\n-\t\t\t}\r\n-\t\t\ttp_inst.$input.bind('focus', function () {\r\n-\t\t\t\ttp_inst._onFocus();\r\n-\t\t\t});\r\n-\r\n-\t\t\treturn tp_inst;\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* add our sliders to the calendar\r\n-\t\t*\u002F\r\n-\t\t_addTimePicker: function (dp_inst) {\r\n-\t\t\tvar currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\r\n-\r\n-\t\t\tthis.timeDefined = this._parseTime(currDT);\r\n-\t\t\tthis._limitMinMaxDateTime(dp_inst, false);\r\n-\t\t\tthis._injectTimePicker();\r\n-\t\t\tthis._afterInject();\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* parse the time string from input value or _setTime\r\n-\t\t*\u002F\r\n-\t\t_parseTime: function (timeString, withDate) {\r\n-\t\t\tif (!this.inst) {\r\n-\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (withDate || !this._defaults.timeOnly) {\r\n-\t\t\t\tvar dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tvar parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\r\n-\t\t\t\t\tif (!parseRes.timeObj) {\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$.extend(this, parseRes.timeObj);\r\n-\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t$.timepicker.log(\"Error parsing the date\u002Ftime string: \" + err +\r\n-\t\t\t\t\t\t\t\t\t\"\\ndate\u002Ftime string = \" + timeString +\r\n-\t\t\t\t\t\t\t\t\t\"\\ntimeFormat = \" + this._defaults.timeFormat +\r\n-\t\t\t\t\t\t\t\t\t\"\\ndateFormat = \" + dp_dateFormat);\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t\treturn true;\r\n-\t\t\t} else {\r\n-\t\t\t\tvar timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\r\n-\t\t\t\tif (!timeObj) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t\t$.extend(this, timeObj);\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Handle callback option after injecting timepicker\r\n-\t\t*\u002F\r\n-\t\t_afterInject: function() {\r\n-\t\t\tvar o = this.inst.settings;\r\n-\t\t\tif ($.isFunction(o.afterInject)) {\r\n-\t\t\t\to.afterInject.call(this);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* generate and inject html for timepicker into ui datepicker\r\n-\t\t*\u002F\r\n-\t\t_injectTimePicker: function () {\r\n-\t\t\tvar $dp = this.inst.dpDiv,\r\n-\t\t\t\to = this.inst.settings,\r\n-\t\t\t\ttp_inst = this,\r\n-\t\t\t\tlitem = '',\r\n-\t\t\t\tuitem = '',\r\n-\t\t\t\tshow = null,\r\n-\t\t\t\tmax = {},\r\n-\t\t\t\tgridSize = {},\r\n-\t\t\t\tsize = null,\r\n-\t\t\t\ti = 0,\r\n-\t\t\t\tl = 0;\r\n-\r\n-\t\t\t\u002F\u002F Prevent displaying twice\r\n-\t\t\tif ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\r\n-\t\t\t\tvar noDisplay = ' ui_tpicker_unit_hide',\r\n-\t\t\t\t\thtml = '\u003Cdiv class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\">\u003Cdl>' + '\u003Cdt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '\u003C\u002Fdt>' +\r\n-\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\">\u003Cinput class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '\u002F>\u003C\u002Fdd>';\r\n-\r\n-\t\t\t\t\u002F\u002F Create the markup\r\n-\t\t\t\tfor (i = 0, l = this.units.length; i \u003C l; i++) {\r\n-\t\t\t\t\tlitem = this.units[i];\r\n-\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\r\n-\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\r\n-\r\n-\t\t\t\t\t\u002F\u002F Added by Peter Medeiros:\r\n-\t\t\t\t\t\u002F\u002F - Figure out what the hour\u002Fminute\u002Fsecond max should be based on the step values.\r\n-\t\t\t\t\t\u002F\u002F - Example: if stepMinute is 15, then minMax is 45.\r\n-\t\t\t\t\tmax[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\r\n-\t\t\t\t\tgridSize[litem] = 0;\r\n-\r\n-\t\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '\u003C\u002Fdt>' +\r\n-\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\">\u003Cdiv class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\">\u003C\u002Fdiv>';\r\n-\r\n-\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\r\n-\t\t\t\t\t\thtml += '\u003Cdiv style=\"padding-left: 1px\">\u003Ctable class=\"ui-tpicker-grid-label\">\u003Ctr>';\r\n-\r\n-\t\t\t\t\t\tif (litem === 'hour') {\r\n-\t\t\t\t\t\t\tfor (var h = o[litem + 'Min']; h \u003C= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\r\n-\t\t\t\t\t\t\t\tgridSize[litem]++;\r\n-\t\t\t\t\t\t\t\tvar tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\r\n-\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + tmph + '\u003C\u002Ftd>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telse {\r\n-\t\t\t\t\t\t\tfor (var m = o[litem + 'Min']; m \u003C= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\r\n-\t\t\t\t\t\t\t\tgridSize[litem]++;\r\n-\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + ((m \u003C 10) ? '0' : '') + m + '\u003C\u002Ftd>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\thtml += '\u003C\u002Ftr>\u003C\u002Ftable>\u003C\u002Fdiv>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\thtml += '\u003C\u002Fdd>';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Timezone\r\n-\t\t\t\tvar showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\r\n-\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '\u003C\u002Fdt>';\r\n-\t\t\t\thtml += '\u003Cdd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\">\u003C\u002Fdd>';\r\n-\r\n-\t\t\t\t\u002F\u002F Create the elements from string\r\n-\t\t\t\thtml += '\u003C\u002Fdl>\u003C\u002Fdiv>';\r\n-\t\t\t\tvar $tp = $(html);\r\n-\r\n-\t\t\t\t\u002F\u002F if we only want time picker...\r\n-\t\t\t\tif (o.timeOnly === true) {\r\n-\t\t\t\t\t$tp.prepend('\u003Cdiv class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '\u003Cdiv class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '\u003C\u002Fdiv>' + '\u003C\u002Fdiv>');\r\n-\t\t\t\t\t$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F add sliders, adjust grids, add events\r\n-\t\t\t\tfor (i = 0, l = tp_inst.units.length; i \u003C l; i++) {\r\n-\t\t\t\t\tlitem = tp_inst.units[i];\r\n-\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\r\n-\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\r\n-\r\n-\t\t\t\t\t\u002F\u002F add the slider\r\n-\t\t\t\t\ttp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\r\n-\r\n-\t\t\t\t\t\u002F\u002F adjust the grid and add click event\r\n-\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\r\n-\t\t\t\t\t\tsize = 100 * gridSize[litem] * o[litem + 'Grid'] \u002F (max[litem] - o[litem + 'Min']);\r\n-\t\t\t\t\t\t$tp.find('.ui_tpicker_' + litem + ' table').css({\r\n-\t\t\t\t\t\t\twidth: size + \"%\",\r\n-\t\t\t\t\t\t\tmarginLeft: o.isRTL ? '0' : ((size \u002F (-2 * gridSize[litem])) + \"%\"),\r\n-\t\t\t\t\t\t\tmarginRight: o.isRTL ? ((size \u002F (-2 * gridSize[litem])) + \"%\") : '0',\r\n-\t\t\t\t\t\t\tborderCollapse: 'collapse'\r\n-\t\t\t\t\t\t}).find(\"td\").click(function (e) {\r\n-\t\t\t\t\t\t\t\tvar $t = $(this),\r\n-\t\t\t\t\t\t\t\t\th = $t.html(),\r\n-\t\t\t\t\t\t\t\t\tn = parseInt(h.replace(\u002F[^0-9]\u002Fg), 10),\r\n-\t\t\t\t\t\t\t\t\tap = h.replace(\u002F[^apm]\u002Fig),\r\n-\t\t\t\t\t\t\t\t\tf = $t.data('for'); \u002F\u002F loses scope, so we use data-for\r\n-\r\n-\t\t\t\t\t\t\t\tif (f === 'hour') {\r\n-\t\t\t\t\t\t\t\t\tif (ap.indexOf('p') !== -1 && n \u003C 12) {\r\n-\t\t\t\t\t\t\t\t\t\tn += 12;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\telse {\r\n-\t\t\t\t\t\t\t\t\t\tif (ap.indexOf('a') !== -1 && n === 12) {\r\n-\t\t\t\t\t\t\t\t\t\t\tn = 0;\r\n-\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\r\n-\r\n-\t\t\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\t\t}).css({\r\n-\t\t\t\t\t\t\t\tcursor: 'pointer',\r\n-\t\t\t\t\t\t\t\twidth: (100 \u002F gridSize[litem]) + '%',\r\n-\t\t\t\t\t\t\t\ttextAlign: 'center',\r\n-\t\t\t\t\t\t\t\toverflow: 'hidden'\r\n-\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t} \u002F\u002F end if grid > 0\r\n-\t\t\t\t} \u002F\u002F end for loop\r\n-\r\n-\t\t\t\t\u002F\u002F Add timezone options\r\n-\t\t\t\tthis.timezone_select = $tp.find('.ui_tpicker_timezone').append('\u003Cselect>\u003C\u002Fselect>').find(\"select\");\r\n-\t\t\t\t$.fn.append.apply(this.timezone_select,\r\n-\t\t\t\t$.map(o.timezoneList, function (val, idx) {\r\n-\t\t\t\t\treturn $(\"\u003Coption \u002F>\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\r\n-\t\t\t\t}));\r\n-\t\t\t\tif (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\r\n-\t\t\t\t\tvar local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\r\n-\t\t\t\t\tif (local_timezone === this.timezone) {\r\n-\t\t\t\t\t\tselectLocalTimezone(tp_inst);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.timezone_select.val(this.timezone);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\r\n-\t\t\t\t\t\tthis.timezone_select.val(o.timezone);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tselectLocalTimezone(tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tthis.timezone_select.change(function () {\r\n-\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\ttp_inst._afterInject();\r\n-\t\t\t\t});\r\n-\t\t\t\t\u002F\u002F End timezone options\r\n-\r\n-\t\t\t\t\u002F\u002F inject timepicker into datepicker\r\n-\t\t\t\tvar $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\r\n-\t\t\t\tif ($buttonPanel.length) {\r\n-\t\t\t\t\t$buttonPanel.before($tp);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$dp.append($tp);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis.$timeObj = $tp.find('.ui_tpicker_time_input');\r\n-\t\t\t\tthis.$timeObj.change(function () {\r\n-\t\t\t\t\tvar timeFormat = tp_inst.inst.settings.timeFormat;\r\n-\t\t\t\t\tvar parsedTime = $.datepicker.parseTime(timeFormat, this.value);\r\n-\t\t\t\t\tvar update = new Date();\r\n-\t\t\t\t\tif (parsedTime) {\r\n-\t\t\t\t\t\tupdate.setHours(parsedTime.hour);\r\n-\t\t\t\t\t\tupdate.setMinutes(parsedTime.minute);\r\n-\t\t\t\t\t\tupdate.setSeconds(parsedTime.second);\r\n-\t\t\t\t\t\t$.datepicker._setTime(tp_inst.inst, update);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.value = tp_inst.formattedTime;\r\n-\t\t\t\t\t\tthis.blur();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t});\r\n-\r\n-\t\t\t\tif (this.inst !== null) {\r\n-\t\t\t\t\tvar timeDefined = this.timeDefined;\r\n-\t\t\t\t\tthis._onTimeChange();\r\n-\t\t\t\t\tthis.timeDefined = timeDefined;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F slideAccess integration: http:\u002F\u002Ftrentrichardson.com\u002F2011\u002F11\u002F11\u002Fjquery-ui-sliders-and-touch-accessibility\u002F\r\n-\t\t\t\tif (this._defaults.addSliderAccess) {\r\n-\t\t\t\t\tvar sliderAccessArgs = this._defaults.sliderAccessArgs,\r\n-\t\t\t\t\t\trtl = this._defaults.isRTL;\r\n-\t\t\t\t\tsliderAccessArgs.isRTL = rtl;\r\n-\r\n-\t\t\t\t\tsetTimeout(function () { \u002F\u002F fix for inline mode\r\n-\t\t\t\t\t\tif ($tp.find('.ui-slider-access').length === 0) {\r\n-\t\t\t\t\t\t\t$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\r\n-\r\n-\t\t\t\t\t\t\t\u002F\u002F fix any grids since sliders are shorter\r\n-\t\t\t\t\t\t\tvar sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\r\n-\t\t\t\t\t\t\tif (sliderAccessWidth) {\r\n-\t\t\t\t\t\t\t\t$tp.find('table:visible').each(function () {\r\n-\t\t\t\t\t\t\t\t\tvar $g = $(this),\r\n-\t\t\t\t\t\t\t\t\t\toldWidth = $g.outerWidth(),\r\n-\t\t\t\t\t\t\t\t\t\toldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\r\n-\t\t\t\t\t\t\t\t\t\tnewWidth = oldWidth - sliderAccessWidth,\r\n-\t\t\t\t\t\t\t\t\t\tnewMarginLeft = ((oldMarginLeft * newWidth) \u002F oldWidth) + '%',\r\n-\t\t\t\t\t\t\t\t\t\tcss = { width: newWidth, marginRight: 0, marginLeft: 0 };\r\n-\t\t\t\t\t\t\t\t\tcss[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\r\n-\t\t\t\t\t\t\t\t\t$g.css(css);\r\n-\t\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}, 10);\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F end slideAccess integration\r\n-\r\n-\t\t\t\ttp_inst._limitMinMaxDateTime(this.inst, true);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* This function tries to limit the ability to go outside the\r\n-\t\t* min\u002Fmax date range\r\n-\t\t*\u002F\r\n-\t\t_limitMinMaxDateTime: function (dp_inst, adjustSliders) {\r\n-\t\t\tvar o = this._defaults,\r\n-\t\t\t\tdp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\r\n-\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-\t\t\t\treturn;\r\n-\t\t\t} \u002F\u002F No time so nothing to check here\r\n-\r\n-\t\t\tif ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\r\n-\t\t\t\tvar minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\r\n-\t\t\t\t\tminDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\r\n-\r\n-\t\t\t\tif (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\r\n-\t\t\t\t\tthis.hourMinOriginal = o.hourMin;\r\n-\t\t\t\t\tthis.minuteMinOriginal = o.minuteMin;\r\n-\t\t\t\t\tthis.secondMinOriginal = o.secondMin;\r\n-\t\t\t\t\tthis.millisecMinOriginal = o.millisecMin;\r\n-\t\t\t\t\tthis.microsecMinOriginal = o.microsecMin;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\r\n-\t\t\t\t\tthis._defaults.hourMin = minDateTime.getHours();\r\n-\t\t\t\t\tif (this.hour \u003C= this._defaults.hourMin) {\r\n-\t\t\t\t\t\tthis.hour = this._defaults.hourMin;\r\n-\t\t\t\t\t\tthis._defaults.minuteMin = minDateTime.getMinutes();\r\n-\t\t\t\t\t\tif (this.minute \u003C= this._defaults.minuteMin) {\r\n-\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMin;\r\n-\t\t\t\t\t\t\tthis._defaults.secondMin = minDateTime.getSeconds();\r\n-\t\t\t\t\t\t\tif (this.second \u003C= this._defaults.secondMin) {\r\n-\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMin;\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMin = minDateTime.getMilliseconds();\r\n-\t\t\t\t\t\t\t\tif (this.millisec \u003C= this._defaults.millisecMin) {\r\n-\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMin;\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = minDateTime.getMicroseconds();\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tif (this.microsec \u003C this._defaults.microsecMin) {\r\n-\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMin;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis._defaults.hourMin = this.hourMinOriginal;\r\n-\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\r\n-\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\r\n-\t\t\t\tvar maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\r\n-\t\t\t\t\tmaxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\r\n-\r\n-\t\t\t\tif (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\r\n-\t\t\t\t\tthis.hourMaxOriginal = o.hourMax;\r\n-\t\t\t\t\tthis.minuteMaxOriginal = o.minuteMax;\r\n-\t\t\t\t\tthis.secondMaxOriginal = o.secondMax;\r\n-\t\t\t\t\tthis.millisecMaxOriginal = o.millisecMax;\r\n-\t\t\t\t\tthis.microsecMaxOriginal = o.microsecMax;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\r\n-\t\t\t\t\tthis._defaults.hourMax = maxDateTime.getHours();\r\n-\t\t\t\t\tif (this.hour >= this._defaults.hourMax) {\r\n-\t\t\t\t\t\tthis.hour = this._defaults.hourMax;\r\n-\t\t\t\t\t\tthis._defaults.minuteMax = maxDateTime.getMinutes();\r\n-\t\t\t\t\t\tif (this.minute >= this._defaults.minuteMax) {\r\n-\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMax;\r\n-\t\t\t\t\t\t\tthis._defaults.secondMax = maxDateTime.getSeconds();\r\n-\t\t\t\t\t\t\tif (this.second >= this._defaults.secondMax) {\r\n-\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMax;\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMax = maxDateTime.getMilliseconds();\r\n-\t\t\t\t\t\t\t\tif (this.millisec >= this._defaults.millisecMax) {\r\n-\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMax;\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = maxDateTime.getMicroseconds();\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tif (this.microsec > this._defaults.microsecMax) {\r\n-\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMax;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis._defaults.hourMax = this.hourMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (dp_inst.settings.minTime!==null) {\r\n-\t\t\t\tvar tempMinTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.minTime);\r\n-\t\t\t\tif (this.hour\u003CtempMinTime.getHours()) {\r\n-\t\t\t\t\tthis.hour=this._defaults.hourMin=tempMinTime.getHours();\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t} else if (this.hour===tempMinTime.getHours() && this.minute\u003CtempMinTime.getMinutes()) {\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (this._defaults.hourMin\u003CtempMinTime.getHours()) {\r\n-\t\t\t\t\t\tthis._defaults.hourMin=tempMinTime.getHours();\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t\t} else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin\u003CtempMinTime.getMinutes()) {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=0;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (dp_inst.settings.maxTime!==null) {\r\n-\t\t\t\tvar tempMaxTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.maxTime);\r\n-\t\t\t\tif (this.hour>tempMaxTime.getHours()) {\r\n-\t\t\t\t\tthis.hour=this._defaults.hourMax=tempMaxTime.getHours();\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t} else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (this._defaults.hourMax>tempMaxTime.getHours()) {\r\n-\t\t\t\t\t\tthis._defaults.hourMax=tempMaxTime.getHours();\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t\t} else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=59;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (adjustSliders !== undefined && adjustSliders === true) {\r\n-\t\t\t\tvar hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\r\n-\t\t\t\t\tminMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\r\n-\t\t\t\t\tsecMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\r\n-\t\t\t\t\tmillisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\r\n-\t\t\t\t\tmicrosecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\r\n-\r\n-\t\t\t\tif (this.hour_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\r\n-\t\t\t\t\tthis.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.minute_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\r\n-\t\t\t\t\tthis.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.second_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\r\n-\t\t\t\t\tthis.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.millisec_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\r\n-\t\t\t\t\tthis.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.microsec_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\r\n-\t\t\t\t\tthis.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* when a slider moves, set the internal time...\r\n-\t\t* on time change is also called when the time is updated in the text field\r\n-\t\t*\u002F\r\n-\t\t_onTimeChange: function () {\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-                                return;\r\n-\t\t\t}\r\n-\t\t\tvar hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\r\n-\t\t\t\tminute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\r\n-\t\t\t\tsecond = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\r\n-\t\t\t\tmillisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\r\n-\t\t\t\tmicrosec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\r\n-\t\t\t\ttimezone = (this.timezone_select) ? this.timezone_select.val() : false,\r\n-\t\t\t\to = this._defaults,\r\n-\t\t\t\tpickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\r\n-\t\t\t\tpickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\r\n-\r\n-\t\t\tif (typeof(hour) === 'object') {\r\n-\t\t\t\thour = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(minute) === 'object') {\r\n-\t\t\t\tminute = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(second) === 'object') {\r\n-\t\t\t\tsecond = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(millisec) === 'object') {\r\n-\t\t\t\tmillisec = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(microsec) === 'object') {\r\n-\t\t\t\tmicrosec = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(timezone) === 'object') {\r\n-\t\t\t\ttimezone = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (hour !== false) {\r\n-\t\t\t\thour = parseInt(hour, 10);\r\n-\t\t\t}\r\n-\t\t\tif (minute !== false) {\r\n-\t\t\t\tminute = parseInt(minute, 10);\r\n-\t\t\t}\r\n-\t\t\tif (second !== false) {\r\n-\t\t\t\tsecond = parseInt(second, 10);\r\n-\t\t\t}\r\n-\t\t\tif (millisec !== false) {\r\n-\t\t\t\tmillisec = parseInt(millisec, 10);\r\n-\t\t\t}\r\n-\t\t\tif (microsec !== false) {\r\n-\t\t\t\tmicrosec = parseInt(microsec, 10);\r\n-\t\t\t}\r\n-\t\t\tif (timezone !== false) {\r\n-\t\t\t\ttimezone = timezone.toString();\r\n-\t\t\t}\r\n-\r\n-\t\t\tvar ampm = o[hour \u003C 12 ? 'amNames' : 'pmNames'][0];\r\n-\r\n-\t\t\t\u002F\u002F If the update was done in the input field, the input field should not be updated.\r\n-\t\t\t\u002F\u002F If the update was done using the sliders, update the input field.\r\n-\t\t\tvar hasChanged = (\r\n-\t\t\t\t\t\thour !== parseInt(this.hour,10) || \u002F\u002F sliders should all be numeric\r\n-\t\t\t\t\t\tminute !== parseInt(this.minute,10) ||\r\n-\t\t\t\t\t\tsecond !== parseInt(this.second,10) ||\r\n-\t\t\t\t\t\tmillisec !== parseInt(this.millisec,10) ||\r\n-\t\t\t\t\t\tmicrosec !== parseInt(this.microsec,10) ||\r\n-\t\t\t\t\t\t(this.ampm.length > 0 && (hour \u003C 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\r\n-\t\t\t\t\t\t(this.timezone !== null && timezone !== this.timezone.toString()) \u002F\u002F could be numeric or \"EST\" format, so use toString()\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\tif (hasChanged) {\r\n-\r\n-\t\t\t\tif (hour !== false) {\r\n-\t\t\t\t\tthis.hour = hour;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (minute !== false) {\r\n-\t\t\t\t\tthis.minute = minute;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (second !== false) {\r\n-\t\t\t\t\tthis.second = second;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (millisec !== false) {\r\n-\t\t\t\t\tthis.millisec = millisec;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (microsec !== false) {\r\n-\t\t\t\t\tthis.microsec = microsec;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (timezone !== false) {\r\n-\t\t\t\t\tthis.timezone = timezone;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (!this.inst) {\r\n-\t\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis._limitMinMaxDateTime(this.inst, true);\r\n-\t\t\t}\r\n-\t\t\tif (this.support.ampm) {\r\n-\t\t\t\tthis.ampm = ampm;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Updates the time within the timepicker\r\n-\t\t\tthis.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\r\n-\t\t\tif (this.$timeObj) {\r\n-\t\t\t\tif (pickerTimeFormat === o.timeFormat) {\r\n-\t\t\t\t\tthis.$timeObj.val(this.formattedTime + pickerTimeSuffix);\r\n-\t\t\t\t}\r\n-\t\t\t\telse {\r\n-\t\t\t\t\tthis.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.$timeObj[0].setSelectionRange) {\r\n-\t\t\t\t\tvar sPos = this.$timeObj[0].selectionStart;\r\n-\t\t\t\t\tvar ePos = this.$timeObj[0].selectionEnd;\r\n-\t\t\t\t\tthis.$timeObj[0].setSelectionRange(sPos, ePos);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.timeDefined = true;\r\n-\t\t\tif (hasChanged) {\r\n-\t\t\t\tthis._updateDateTime();\r\n-\t\t\t\t\u002F\u002Fthis.$input.focus(); \u002F\u002F may automatically open the picker on setDate\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* call custom onSelect.\r\n-\t\t* bind to sliders slidestop, and grid click.\r\n-\t\t*\u002F\r\n-\t\t_onSelectHandler: function () {\r\n-\t\t\tvar onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\r\n-\t\t\tvar inputEl = this.$input ? this.$input[0] : null;\r\n-\t\t\tif (onSelect && inputEl) {\r\n-\t\t\t\tonSelect.apply(inputEl, [this.formattedDateTime, this]);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* update our input with the new date time..\r\n-\t\t*\u002F\r\n-\t\t_updateDateTime: function (dp_inst) {\r\n-\t\t\tdp_inst = this.inst || dp_inst;\r\n-\t\t\tvar dtTmp = (dp_inst.currentYear > 0?\r\n-\t\t\t\t\t\t\tnew Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\r\n-\t\t\t\t\t\t\tnew Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\r\n-\t\t\t\tdt = $.datepicker._daylightSavingAdjust(dtTmp),\r\n-\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\r\n-\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\r\n-\t\t\t\tdateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\r\n-\t\t\t\tformatCfg = $.datepicker._getFormatConfig(dp_inst),\r\n-\t\t\t\ttimeAvailable = dt !== null && this.timeDefined;\r\n-\t\t\tthis.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\r\n-\t\t\tvar formattedDateTime = this.formattedDate;\r\n-\r\n-\t\t\t\u002F\u002F if a slider was changed but datepicker doesn't have a value yet, set it\r\n-\t\t\tif (dp_inst.lastVal === \"\") {\r\n-                dp_inst.currentYear = dp_inst.selectedYear;\r\n-                dp_inst.currentMonth = dp_inst.selectedMonth;\r\n-                dp_inst.currentDay = dp_inst.selectedDay;\r\n-            }\r\n-\r\n-\t\t\t\u002F*\r\n-\t\t\t* remove following lines to force every changes in date picker to change the input value\r\n-\t\t\t* Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\r\n-\t\t\t* If the user manually empty the value in the input field, the date picker will never change selected value.\r\n-\t\t\t*\u002F\r\n-\t\t\t\u002F\u002Fif (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\r\n-\t\t\t\u002F\u002F\treturn;\r\n-\t\t\t\u002F\u002F}\r\n-\r\n-\t\t\tif (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\r\n-\t\t\t\tformattedDateTime = this.formattedTime;\r\n-\t\t\t} else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\r\n-\t\t\t\tformattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.formattedDateTime = formattedDateTime;\r\n-\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-\t\t\t\tthis.$input.val(this.formattedDate);\r\n-\t\t\t} else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\r\n-\t\t\t\tthis.$altInput.val(this.formattedTime);\r\n-\t\t\t\tthis.$input.val(this.formattedDate);\r\n-\t\t\t} else if (this.$altInput) {\r\n-\t\t\t\tthis.$input.val(formattedDateTime);\r\n-\t\t\t\tvar altFormattedDateTime = '',\r\n-\t\t\t\t\taltSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\r\n-\t\t\t\t\taltTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\r\n-\r\n-\t\t\t\tif (!this._defaults.timeOnly) {\r\n-\t\t\t\t\tif (this._defaults.altFormat) {\r\n-\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse {\r\n-\t\t\t\t\t\taltFormattedDateTime = this.formattedDate;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif (altFormattedDateTime) {\r\n-\t\t\t\t\t\taltFormattedDateTime += altSeparator;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (this._defaults.altTimeFormat !== null) {\r\n-\t\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\r\n-\t\t\t\t}\r\n-\t\t\t\telse {\r\n-\t\t\t\t\taltFormattedDateTime += this.formattedTime + altTimeSuffix;\r\n-\t\t\t\t}\r\n-\t\t\t\tthis.$altInput.val(altFormattedDateTime);\r\n-\t\t\t} else {\r\n-\t\t\t\tthis.$input.val(formattedDateTime);\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.$input.trigger(\"change\");\r\n-\t\t},\r\n-\r\n-\t\t_onFocus: function () {\r\n-\t\t\tif (!this.$input.val() && this._defaults.defaultValue) {\r\n-\t\t\t\tthis.$input.val(this._defaults.defaultValue);\r\n-\t\t\t\tvar inst = $.datepicker._getInst(this.$input.get(0)),\r\n-\t\t\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\t\t\t\tif (tp_inst) {\r\n-\t\t\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\r\n-\t\t\t\t\t\ttry {\r\n-\t\t\t\t\t\t\t$.datepicker._updateDatepicker(inst);\r\n-\t\t\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t\t\t$.timepicker.log(err);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Small abstraction to control types\r\n-\t\t* We can add more, just be sure to follow the pattern: create, options, value\r\n-\t\t*\u002F\r\n-\t\t_controls: {\r\n-\t\t\t\u002F\u002F slider methods\r\n-\t\t\tslider: {\r\n-\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\r\n-\t\t\t\t\tvar rtl = tp_inst._defaults.isRTL; \u002F\u002F if rtl go -60->0 instead of 0->60\r\n-\t\t\t\t\treturn obj.prop('slide', null).slider({\r\n-\t\t\t\t\t\torientation: \"horizontal\",\r\n-\t\t\t\t\t\tvalue: rtl ? val * -1 : val,\r\n-\t\t\t\t\t\tmin: rtl ? max * -1 : min,\r\n-\t\t\t\t\t\tmax: rtl ? min * -1 : max,\r\n-\t\t\t\t\t\tstep: step,\r\n-\t\t\t\t\t\tslide: function (event, ui) {\r\n-\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\r\n-\t\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tstop: function (event, ui) {\r\n-\t\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\r\n-\t\t\t\t\tif (tp_inst._defaults.isRTL) {\r\n-\t\t\t\t\t\tif (typeof(opts) === 'string') {\r\n-\t\t\t\t\t\t\tif (opts === 'min' || opts === 'max') {\r\n-\t\t\t\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\t\t\t\treturn obj.slider(opts, val * -1);\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\treturn Math.abs(obj.slider(opts));\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tvar min = opts.min,\r\n-\t\t\t\t\t\t\tmax = opts.max;\r\n-\t\t\t\t\t\topts.min = opts.max = null;\r\n-\t\t\t\t\t\tif (min !== undefined) {\r\n-\t\t\t\t\t\t\topts.max = min * -1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tif (max !== undefined) {\r\n-\t\t\t\t\t\t\topts.min = max * -1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif (typeof(opts) === 'string' && val !== undefined) {\r\n-\t\t\t\t\t\treturn obj.slider(opts, val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t},\r\n-\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\r\n-\t\t\t\t\tif (tp_inst._defaults.isRTL) {\r\n-\t\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\t\treturn obj.slider('value', val * -1);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\treturn Math.abs(obj.slider('value'));\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\treturn obj.slider('value', val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn obj.slider('value');\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\t\u002F\u002F select methods\r\n-\t\t\tselect: {\r\n-\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\r\n-\t\t\t\t\tvar sel = '\u003Cselect class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\r\n-\t\t\t\t\t\tformat = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\r\n-\r\n-\t\t\t\t\tfor (var i = min; i \u003C= max; i += step) {\r\n-\t\t\t\t\t\tsel += '\u003Coption value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\r\n-\t\t\t\t\t\tif (unit === 'hour') {\r\n-\t\t\t\t\t\t\tsel += $.datepicker.formatTime($.trim(format.replace(\u002F[^ht ]\u002Fig, '')), {hour: i}, tp_inst._defaults);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telse if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\r\n-\t\t\t\t\t\telse {sel += '0' + i.toString(); }\r\n-\t\t\t\t\t\tsel += '\u003C\u002Foption>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tsel += '\u003C\u002Fselect>';\r\n-\r\n-\t\t\t\t\tobj.children('select').remove();\r\n-\r\n-\t\t\t\t\t$(sel).appendTo(obj).change(function (e) {\r\n-\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\ttp_inst._afterInject();\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\treturn obj;\r\n-\t\t\t\t},\r\n-\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\r\n-\t\t\t\t\tvar o = {},\r\n-\t\t\t\t\t\t$t = obj.children('select');\r\n-\t\t\t\t\tif (typeof(opts) === 'string') {\r\n-\t\t\t\t\t\tif (val === undefined) {\r\n-\t\t\t\t\t\t\treturn $t.data(opts);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\to[opts] = val;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse { o = opts; }\r\n-\t\t\t\t\treturn tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\r\n-\t\t\t\t},\r\n-\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\r\n-\t\t\t\t\tvar $t = obj.children('select');\r\n-\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\treturn $t.val(val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn $t.val();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} \u002F\u002F end _controls\r\n-\r\n-\t});\r\n-\r\n-\t$.fn.extend({\r\n-\t\t\u002F*\r\n-\t\t* shorthand just to use timepicker.\r\n-\t\t*\u002F\r\n-\t\ttimepicker: function (o) {\r\n-\t\t\to = o || {};\r\n-\t\t\tvar tmp_args = Array.prototype.slice.call(arguments);\r\n-\r\n-\t\t\tif (typeof o === 'object') {\r\n-\t\t\t\ttmp_args[0] = $.extend(o, {\r\n-\t\t\t\t\ttimeOnly: true\r\n-\t\t\t\t});\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $(this).each(function () {\r\n-\t\t\t\t$.fn.datetimepicker.apply($(this), tmp_args);\r\n-\t\t\t});\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* extend timepicker to datepicker\r\n-\t\t*\u002F\r\n-\t\tdatetimepicker: function (o) {\r\n-\t\t\to = o || {};\r\n-\t\t\tvar tmp_args = arguments;\r\n-\r\n-\t\t\tif (typeof(o) === 'string') {\r\n-\t\t\t\tif (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\r\n-\t\t\t\t\treturn $.fn.datepicker.apply($(this[0]), tmp_args);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn this.each(function () {\r\n-\t\t\t\t\t\tvar $t = $(this);\r\n-\t\t\t\t\t\t$t.datepicker.apply($t, tmp_args);\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn this.each(function () {\r\n-\t\t\t\t\tvar $t = $(this);\r\n-\t\t\t\t\t$t.datepicker($.timepicker._newInst($t, o)._defaults);\r\n-\t\t\t\t});\r\n-\t\t\t}\r\n-\t\t}\r\n-\t});\r\n-\r\n-\t\u002F*\r\n-\t* Public Utility to parse date and time\r\n-\t*\u002F\r\n-\t$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\r\n-\t\tvar parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\r\n-\t\tif (parseRes.timeObj) {\r\n-\t\t\tvar t = parseRes.timeObj;\r\n-\t\t\tparseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\r\n-\t\t\tparseRes.date.setMicroseconds(t.microsec);\r\n-\t\t}\r\n-\r\n-\t\treturn parseRes.date;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Public utility to parse time\r\n-\t*\u002F\r\n-\t$.datepicker.parseTime = function (timeFormat, timeString, options) {\r\n-\t\tvar o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\r\n-\t\t\tiso8601 = (timeFormat.replace(\u002F\\'.*?\\'\u002Fg, '').indexOf('Z') !== -1);\r\n-\r\n-\t\t\u002F\u002F Strict parse requires the timeString to match the timeFormat exactly\r\n-\t\tvar strictParse = function (f, s, o) {\r\n-\r\n-\t\t\t\u002F\u002F pattern for standard and localized AM\u002FPM markers\r\n-\t\t\tvar getPatternAmpm = function (amNames, pmNames) {\r\n-\t\t\t\tvar markers = [];\r\n-\t\t\t\tif (amNames) {\r\n-\t\t\t\t\t$.merge(markers, amNames);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (pmNames) {\r\n-\t\t\t\t\t$.merge(markers, pmNames);\r\n-\t\t\t\t}\r\n-\t\t\t\tmarkers = $.map(markers, function (val) {\r\n-\t\t\t\t\treturn val.replace(\u002F[.*+?|()\\[\\]{}\\\\]\u002Fg, '\\\\$&');\r\n-\t\t\t\t});\r\n-\t\t\t\treturn '(' + markers.join('|') + ')?';\r\n-\t\t\t};\r\n-\r\n-\t\t\t\u002F\u002F figure out position of time elements.. cause js cant do named captures\r\n-\t\t\tvar getFormatPositions = function (timeFormat) {\r\n-\t\t\t\tvar finds = timeFormat.toLowerCase().match(\u002F(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')\u002Fg),\r\n-\t\t\t\t\torders = {\r\n-\t\t\t\t\t\th: -1,\r\n-\t\t\t\t\t\tm: -1,\r\n-\t\t\t\t\t\ts: -1,\r\n-\t\t\t\t\t\tl: -1,\r\n-\t\t\t\t\t\tc: -1,\r\n-\t\t\t\t\t\tt: -1,\r\n-\t\t\t\t\t\tz: -1\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\tif (finds) {\r\n-\t\t\t\t\tfor (var i = 0; i \u003C finds.length; i++) {\r\n-\t\t\t\t\t\tif (orders[finds[i].toString().charAt(0)] === -1) {\r\n-\t\t\t\t\t\t\torders[finds[i].toString().charAt(0)] = i + 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\treturn orders;\r\n-\t\t\t};\r\n-\r\n-\t\t\tvar regstr = '^' + f.toString()\r\n-\t\t\t\t\t.replace(\u002F([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\r\n-\t\t\t\t\t\t\tvar ml = match.length;\r\n-\t\t\t\t\t\t\tswitch (match.charAt(0).toLowerCase()) {\r\n-\t\t\t\t\t\t\tcase 'h':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 'm':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 's':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 'l':\r\n-\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\r\n-\t\t\t\t\t\t\tcase 'c':\r\n-\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\r\n-\t\t\t\t\t\t\tcase 'z':\r\n-\t\t\t\t\t\t\t\treturn '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\r\n-\t\t\t\t\t\t\tcase 't':\r\n-\t\t\t\t\t\t\t\treturn getPatternAmpm(o.amNames, o.pmNames);\r\n-\t\t\t\t\t\t\tdefault:    \u002F\u002F literal escaped in quotes\r\n-\t\t\t\t\t\t\t\treturn '(' + match.replace(\u002F\\'\u002Fg, \"\").replace(\u002F(\\.|\\$|\\^|\\\\|\\\u002F|\\(|\\)|\\[|\\]|\\?|\\+|\\*)\u002Fg, function (m) { return \"\\\\\" + m; }) + ')?';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t})\r\n-\t\t\t\t\t.replace(\u002F\\s\u002Fg, '\\\\s?') +\r\n-\t\t\t\t\to.timeSuffix + '$',\r\n-\t\t\t\torder = getFormatPositions(f),\r\n-\t\t\t\tampm = '',\r\n-\t\t\t\ttreg;\r\n-\r\n-\t\t\ttreg = s.match(new RegExp(regstr, 'i'));\r\n-\r\n-\t\t\tvar resTime = {\r\n-\t\t\t\thour: 0,\r\n-\t\t\t\tminute: 0,\r\n-\t\t\t\tsecond: 0,\r\n-\t\t\t\tmillisec: 0,\r\n-\t\t\t\tmicrosec: 0\r\n-\t\t\t};\r\n-\r\n-\t\t\tif (treg) {\r\n-\t\t\t\tif (order.t !== -1) {\r\n-\t\t\t\t\tif (treg[order.t] === undefined || treg[order.t].length === 0) {\r\n-\t\t\t\t\t\tampm = '';\r\n-\t\t\t\t\t\tresTime.ampm = '';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\r\n-\t\t\t\t\t\tresTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (order.h !== -1) {\r\n-\t\t\t\t\tif (ampm === 'AM' && treg[order.h] === '12') {\r\n-\t\t\t\t\t\tresTime.hour = 0; \u002F\u002F 12am = 0 hour\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif (ampm === 'PM' && treg[order.h] !== '12') {\r\n-\t\t\t\t\t\t\tresTime.hour = parseInt(treg[order.h], 10) + 12; \u002F\u002F 12pm = 12 hour, any other pm = hour + 12\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tresTime.hour = Number(treg[order.h]);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (order.m !== -1) {\r\n-\t\t\t\t\tresTime.minute = Number(treg[order.m]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.s !== -1) {\r\n-\t\t\t\t\tresTime.second = Number(treg[order.s]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.l !== -1) {\r\n-\t\t\t\t\tresTime.millisec = Number(treg[order.l]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.c !== -1) {\r\n-\t\t\t\t\tresTime.microsec = Number(treg[order.c]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.z !== -1 && treg[order.z] !== undefined) {\r\n-\t\t\t\t\tresTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\r\n-\t\t\t\t}\r\n-\r\n-\r\n-\t\t\t\treturn resTime;\r\n-\t\t\t}\r\n-\t\t\treturn false;\r\n-\t\t};\u002F\u002F end strictParse\r\n-\r\n-\t\t\u002F\u002F First try JS Date, if that fails, use strictParse\r\n-\t\tvar looseParse = function (f, s, o) {\r\n-\t\t\ttry {\r\n-\t\t\t\tvar d = new Date('2012-01-01 ' + s);\r\n-\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\td = new Date('2012-01-01T' + s);\r\n-\t\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\t\td = new Date('01\u002F01\u002F2012 ' + s);\r\n-\t\t\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\t\t\tthrow \"Unable to parse time with native Date: \" + s;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\thour: d.getHours(),\r\n-\t\t\t\t\tminute: d.getMinutes(),\r\n-\t\t\t\t\tsecond: d.getSeconds(),\r\n-\t\t\t\t\tmillisec: d.getMilliseconds(),\r\n-\t\t\t\t\tmicrosec: d.getMicroseconds(),\r\n-\t\t\t\t\ttimezone: d.getTimezoneOffset() * -1\r\n-\t\t\t\t};\r\n-\t\t\t}\r\n-\t\t\tcatch (err) {\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\treturn strictParse(f, s, o);\r\n-\t\t\t\t}\r\n-\t\t\t\tcatch (err2) {\r\n-\t\t\t\t\t$.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\treturn false;\r\n-\t\t}; \u002F\u002F end looseParse\r\n-\r\n-\t\tif (typeof o.parse === \"function\") {\r\n-\t\t\treturn o.parse(timeFormat, timeString, o);\r\n-\t\t}\r\n-\t\tif (o.parse === 'loose') {\r\n-\t\t\treturn looseParse(timeFormat, timeString, o);\r\n-\t\t}\r\n-\t\treturn strictParse(timeFormat, timeString, o);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Public utility to format the time\r\n-\t * @param {string} format format of the time\r\n-\t * @param {Object} time Object not a Date for timezones\r\n-\t * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\r\n-\t * @returns {string} the formatted time\r\n-\t *\u002F\r\n-\t$.datepicker.formatTime = function (format, time, options) {\r\n-\t\toptions = options || {};\r\n-\t\toptions = $.extend({}, $.timepicker._defaults, options);\r\n-\t\ttime = $.extend({\r\n-\t\t\thour: 0,\r\n-\t\t\tminute: 0,\r\n-\t\t\tsecond: 0,\r\n-\t\t\tmillisec: 0,\r\n-\t\t\tmicrosec: 0,\r\n-\t\t\ttimezone: null\r\n-\t\t}, time);\r\n-\r\n-\t\tvar tmptime = format,\r\n-\t\t\tampmName = options.amNames[0],\r\n-\t\t\thour = parseInt(time.hour, 10);\r\n-\r\n-\t\tif (hour > 11) {\r\n-\t\t\tampmName = options.pmNames[0];\r\n-\t\t}\r\n-\r\n-\t\ttmptime = tmptime.replace(\u002F(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\r\n-\t\t\tswitch (match) {\r\n-\t\t\tcase 'HH':\r\n-\t\t\t\treturn ('0' + hour).slice(-2);\r\n-\t\t\tcase 'H':\r\n-\t\t\t\treturn hour;\r\n-\t\t\tcase 'hh':\r\n-\t\t\t\treturn ('0' + convert24to12(hour)).slice(-2);\r\n-\t\t\tcase 'h':\r\n-\t\t\t\treturn convert24to12(hour);\r\n-\t\t\tcase 'mm':\r\n-\t\t\t\treturn ('0' + time.minute).slice(-2);\r\n-\t\t\tcase 'm':\r\n-\t\t\t\treturn time.minute;\r\n-\t\t\tcase 'ss':\r\n-\t\t\t\treturn ('0' + time.second).slice(-2);\r\n-\t\t\tcase 's':\r\n-\t\t\t\treturn time.second;\r\n-\t\t\tcase 'l':\r\n-\t\t\t\treturn ('00' + time.millisec).slice(-3);\r\n-\t\t\tcase 'c':\r\n-\t\t\t\treturn ('00' + time.microsec).slice(-3);\r\n-\t\t\tcase 'z':\r\n-\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\r\n-\t\t\tcase 'Z':\r\n-\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\r\n-\t\t\tcase 'T':\r\n-\t\t\t\treturn ampmName.charAt(0).toUpperCase();\r\n-\t\t\tcase 'TT':\r\n-\t\t\t\treturn ampmName.toUpperCase();\r\n-\t\t\tcase 't':\r\n-\t\t\t\treturn ampmName.charAt(0).toLowerCase();\r\n-\t\t\tcase 'tt':\r\n-\t\t\t\treturn ampmName.toLowerCase();\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn match.replace(\u002F'\u002Fg, \"\");\r\n-\t\t\t}\r\n-\t\t});\r\n-\r\n-\t\treturn tmptime;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* the bad hack :\u002F override datepicker so it doesn't close on select\r\n-\t\u002F\u002F inspired: http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F1252512\u002Fjquery-datepicker-prevent-closing-picker-when-clicking-a-date\u002F1762378#1762378\r\n-\t*\u002F\r\n-\t$.datepicker._base_selectDate = $.datepicker._selectDate;\r\n-\t$.datepicker._selectDate = function (id, dateStr) {\r\n-\t\tvar inst = this._getInst($(id)[0]),\r\n-\t\t\ttp_inst = this._get(inst, 'timepicker'),\r\n-\t\t\twas_inline;\r\n-\r\n-\t\tif (tp_inst && inst.settings.showTimepicker) {\r\n-\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\r\n-\t\t\twas_inline = inst.inline;\r\n-\t\t\tinst.inline = inst.stay_open = true;\r\n-\t\t\t\u002F\u002FThis way the onSelect handler called from calendarpicker get the full dateTime\r\n-\t\t\tthis._base_selectDate(id, dateStr);\r\n-\t\t\tinst.inline = was_inline;\r\n-\t\t\tinst.stay_open = false;\r\n-\t\t\tthis._notifyChange(inst);\r\n-\t\t\tthis._updateDatepicker(inst);\r\n-\t\t} else {\r\n-\t\t\tthis._base_selectDate(id, dateStr);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* second bad hack :\u002F override datepicker so it triggers an event when changing the input field\r\n-\t* and does not redraw the datepicker on every selectDate event\r\n-\t*\u002F\r\n-\t$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\r\n-\t$.datepicker._updateDatepicker = function (inst) {\r\n-\r\n-\t\t\u002F\u002F don't popup the datepicker if there is another instance already opened\r\n-\t\tvar input = inst.input[0];\r\n-\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\r\n-\r\n-\t\t\tthis._base_updateDatepicker(inst);\r\n-\r\n-\t\t\t\u002F\u002F Reload the time control when changing something in the input text field.\r\n-\t\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t\tif (tp_inst) {\r\n-\t\t\t\ttp_inst._addTimePicker(inst);\r\n-\t\t\t}\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* third bad hack :\u002F override datepicker so it allows spaces and colon in the input field\r\n-\t*\u002F\r\n-\t$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\r\n-\t$.datepicker._doKeyPress = function (event) {\r\n-\t\tvar inst = $.datepicker._getInst(event.target),\r\n-\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tif ($.datepicker._get(inst, 'constrainInput')) {\r\n-\t\t\t\tvar ampm = tp_inst.support.ampm,\r\n-\t\t\t\t\ttz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\r\n-\t\t\t\t\tdateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\r\n-\t\t\t\t\tdatetimeChars = tp_inst._defaults.timeFormat.toString()\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002F[hms]\u002Fg, '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTT\u002Fg, ampm ? 'APM' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTt\u002Fg, ampm ? 'AaPpMm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FtT\u002Fg, ampm ? 'AaPpMm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FT\u002Fg, ampm ? 'AP' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ftt\u002Fg, ampm ? 'apm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ft\u002Fg, ampm ? 'ap' : '') +\r\n-\t\t\t\t\t\t\t\t\t\t\t\" \" + tp_inst._defaults.separator +\r\n-\t\t\t\t\t\t\t\t\t\t\ttp_inst._defaults.timeSuffix +\r\n-\t\t\t\t\t\t\t\t\t\t\t(tz ? tp_inst._defaults.timezoneList.join('') : '') +\r\n-\t\t\t\t\t\t\t\t\t\t\t(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\r\n-\t\t\t\t\t\t\t\t\t\t\tdateChars,\r\n-\t\t\t\t\tchr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\r\n-\t\t\t\treturn event.ctrlKey || (chr \u003C ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $.datepicker._base_doKeyPress(event);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Fourth bad hack :\u002F override _updateAlternate function used in inline mode to init altField\r\n-\t* Update any alternate field to synchronise with the main field.\r\n-\t*\u002F\r\n-\t$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\r\n-\t$.datepicker._updateAlternate = function (inst) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar altField = tp_inst._defaults.altField;\r\n-\t\t\tif (altField) { \u002F\u002F update alternate field too\r\n-\t\t\t\tvar altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\r\n-\t\t\t\t\tdate = this._getDate(inst),\r\n-\t\t\t\t\tformatCfg = $.datepicker._getFormatConfig(inst),\r\n-\t\t\t\t\taltFormattedDateTime = '',\r\n-\t\t\t\t\taltSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\r\n-\t\t\t\t\taltTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\r\n-\t\t\t\t\taltTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\r\n-\r\n-\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\r\n-\t\t\t\tif (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\r\n-\t\t\t\t\tif (tp_inst._defaults.altFormat) {\r\n-\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse {\r\n-\t\t\t\t\t\taltFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t$(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\telse {\r\n-\t\t\t$.datepicker._base_updateAlternate(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Override key up event to sync manual input changes.\r\n-\t*\u002F\r\n-\t$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\r\n-\t$.datepicker._doKeyUp = function (event) {\r\n-\t\tvar inst = $.datepicker._getInst(event.target),\r\n-\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\t$.datepicker._updateDatepicker(inst);\r\n-\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t$.timepicker.log(err);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $.datepicker._base_doKeyUp(event);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override \"Today\" button to also grab the time and set it to input field.\r\n-\t*\u002F\r\n-\t$.datepicker._base_gotoToday = $.datepicker._gotoToday;\r\n-\t$.datepicker._gotoToday = function (id) {\r\n-\t\tvar inst = this._getInst($(id)[0]);\r\n-\t\tthis._base_gotoToday(id);\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (!tp_inst) {\r\n-\t\t  return;\r\n-\t\t}\r\n-\r\n-\t\tvar tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\r\n-\t\tvar now = new Date();\r\n-\t\tnow.setMinutes(now.getMinutes() + now.getTimezoneOffset() + parseInt(tzoffset, 10));\r\n-\t\tthis._setTime(inst, now);\r\n-\t\tthis._setDate(inst, now);\r\n-\t\ttp_inst._onSelectHandler();\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Disable & enable the Time in the datetimepicker\r\n-\t*\u002F\r\n-\t$.datepicker._disableTimepickerDatepicker = function (target) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\r\n-\t\tif (tp_inst) {\r\n-\t\t\tinst.settings.showTimepicker = false;\r\n-\t\t\ttp_inst._defaults.showTimepicker = false;\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t$.datepicker._enableTimepickerDatepicker = function (target) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\r\n-\t\tif (tp_inst) {\r\n-\t\t\tinst.settings.showTimepicker = true;\r\n-\t\t\ttp_inst._defaults.showTimepicker = true;\r\n-\t\t\ttp_inst._addTimePicker(inst); \u002F\u002F Could be disabled on page load\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create our own set time function\r\n-\t*\u002F\r\n-\t$.datepicker._setTime = function (inst, date) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar defaults = tp_inst._defaults;\r\n-\r\n-\t\t\t\u002F\u002F calling _setTime with no date sets time to defaults\r\n-\t\t\ttp_inst.hour = date ? date.getHours() : defaults.hour;\r\n-\t\t\ttp_inst.minute = date ? date.getMinutes() : defaults.minute;\r\n-\t\t\ttp_inst.second = date ? date.getSeconds() : defaults.second;\r\n-\t\t\ttp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\r\n-\t\t\ttp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\r\n-\r\n-\t\t\t\u002F\u002Fcheck if within min\u002Fmax times..\r\n-\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\r\n-\r\n-\t\t\ttp_inst._onTimeChange();\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create new public method to set only time, callable as $().datepicker('setTime', date)\r\n-\t*\u002F\r\n-\t$.datepicker._setTimeDatepicker = function (target, date, withDate) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tthis._setDateFromField(inst);\r\n-\t\t\tvar tp_date;\r\n-\t\t\tif (date) {\r\n-\t\t\t\tif (typeof date === \"string\") {\r\n-\t\t\t\t\ttp_inst._parseTime(date, withDate);\r\n-\t\t\t\t\ttp_date = new Date();\r\n-\t\t\t\t\ttp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\r\n-\t\t\t\t\ttp_date.setMicroseconds(tp_inst.microsec);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\ttp_date = new Date(date.getTime());\r\n-\t\t\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\r\n-\t\t\t\t}\r\n-\t\t\t\tif (tp_date.toString() === 'Invalid Date') {\r\n-\t\t\t\t\ttp_date = undefined;\r\n-\t\t\t\t}\r\n-\t\t\t\tthis._setTime(inst, tp_date);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override setDate() to allow setting time too within Date object\r\n-\t*\u002F\r\n-\t$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\r\n-\t$.datepicker._setDateDatepicker = function (target, _date) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tvar date = _date;\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif (typeof(_date) === 'string') {\r\n-\t\t\tdate = new Date(_date);\r\n-\t\t\tif (!date.getTime()) {\r\n-\t\t\t\tthis._base_setDateDatepicker.apply(this, arguments);\r\n-\t\t\t\tdate = $(target).datepicker('getDate');\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tvar tp_date;\r\n-\t\tif (date instanceof Date) {\r\n-\t\t\ttp_date = new Date(date.getTime());\r\n-\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\r\n-\t\t} else {\r\n-\t\t\ttp_date = date;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\r\n-\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\r\n-\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\r\n-\t\t\u002F\u002F If a timezone is different in tp, keep the timezone as is\r\n-\t\tif (tp_inst && tp_date) {\r\n-\t\t\t\u002F\u002F look out for DST if tz wasn't specified\r\n-\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\r\n-\t\t\t\ttp_inst.timezone = tp_date.getTimezoneOffset() * -1;\r\n-\t\t\t}\r\n-\t\t\tdate = $.timepicker.timezoneAdjust(date, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()), tp_inst.timezone);\r\n-\t\t\ttp_date = $.timepicker.timezoneAdjust(tp_date, $.timepicker.timezoneOffsetString(-tp_date.getTimezoneOffset()), tp_inst.timezone);\r\n-\t\t}\r\n-\r\n-\t\tthis._updateDatepicker(inst);\r\n-\t\tthis._base_setDateDatepicker.apply(this, arguments);\r\n-\t\tthis._setTimeDatepicker(target, tp_date, true);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override getDate() to allow getting time too within Date object\r\n-\t*\u002F\r\n-\t$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\r\n-\t$.datepicker._getDateDatepicker = function (target, noDefault) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\t\u002F\u002F if it hasn't yet been defined, grab from field\r\n-\t\t\tif (inst.lastVal === undefined) {\r\n-\t\t\t\tthis._setDateFromField(inst, noDefault);\r\n-\t\t\t}\r\n-\r\n-\t\t\tvar date = this._getDate(inst);\r\n-\r\n-\t\t\tvar currDT = null;\r\n-\r\n-\t\t\tif (tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) {\r\n-\t\t\t\tcurrDT = tp_inst.$input.val() + ' ' + tp_inst.$altInput.val();\r\n-\t\t\t}\r\n-\t\t\telse if (tp_inst.$input.get(0).tagName !== 'INPUT' && tp_inst.$altInput) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * in case the datetimepicker has been applied to a non-input tag for inline UI,\r\n-\t\t\t\t * and the user has not configured the plugin to display only time in altInput,\r\n-\t\t\t\t * pick current date time from the altInput (and hope for the best, for now, until \"ER1\" is applied)\r\n-\t\t\t\t *\r\n-\t\t\t\t * @todo ER1. Since altInput can have a totally difference format, convert it to standard format by reading input format from \"altFormat\" and \"altTimeFormat\" option values\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tcurrDT = tp_inst.$altInput.val();\r\n-\t\t\t}\r\n-\t\t\telse {\r\n-\t\t\t\tcurrDT = tp_inst.$input.val();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\r\n-\t\t\t\tdate.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\r\n-\t\t\t\tdate.setMicroseconds(tp_inst.microsec);\r\n-\r\n-\t\t\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\r\n-\t\t\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\r\n-\t\t\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\r\n-\t\t\t\tif (tp_inst.timezone != null) {\r\n-\t\t\t\t\t\u002F\u002F look out for DST if tz wasn't specified\r\n-\t\t\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\r\n-\t\t\t\t\t\ttp_inst.timezone = date.getTimezoneOffset() * -1;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdate = $.timepicker.timezoneAdjust(date, tp_inst.timezone, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()));\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\treturn date;\r\n-\t\t}\r\n-\t\treturn this._base_getDateDatepicker(target, noDefault);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\r\n-\t* An option in datapicker to ignore extra format characters would be nicer.\r\n-\t*\u002F\r\n-\t$.datepicker._base_parseDate = $.datepicker.parseDate;\r\n-\t$.datepicker.parseDate = function (format, value, settings) {\r\n-\t\tvar date;\r\n-\t\ttry {\r\n-\t\t\tdate = this._base_parseDate(format, value, settings);\r\n-\t\t} catch (err) {\r\n-\t\t\t\u002F\u002F Hack!  The error message ends with a colon, a space, and\r\n-\t\t\t\u002F\u002F the \"extra\" characters.  We rely on that instead of\r\n-\t\t\t\u002F\u002F attempting to perfectly reproduce the parsing algorithm.\r\n-\t\t\tif (err.indexOf(\":\") >= 0) {\r\n-\t\t\t\tdate = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\r\n-\t\t\t\t$.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow err;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn date;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override formatDate to set date with time to the input\r\n-\t*\u002F\r\n-\t$.datepicker._base_formatDate = $.datepicker._formatDate;\r\n-\t$.datepicker._formatDate = function (inst, day, month, year) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t\treturn tp_inst.$input.val();\r\n-\t\t}\r\n-\t\treturn this._base_formatDate(inst);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\r\n-\t*\u002F\r\n-\t$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\r\n-\t$.datepicker._optionDatepicker = function (target, name, value) {\r\n-\t\tvar inst = this._getInst(target),\r\n-\t\t\tname_clone;\r\n-\t\tif (!inst) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar min = null,\r\n-\t\t\t\tmax = null,\r\n-\t\t\t\tonselect = null,\r\n-\t\t\t\toverrides = tp_inst._defaults.evnts,\r\n-\t\t\t\tfns = {},\r\n-\t\t\t\tprop,\r\n-\t\t\t\tret,\r\n-\t\t\t\toldVal,\r\n-\t\t\t\t$target;\r\n-\t\t\tif (typeof name === 'string') { \u002F\u002F if min\u002Fmax was set with the string\r\n-\t\t\t\tif (name === 'minDate' || name === 'minDateTime') {\r\n-\t\t\t\t\tmin = value;\r\n-\t\t\t\t} else if (name === 'maxDate' || name === 'maxDateTime') {\r\n-\t\t\t\t\tmax = value;\r\n-\t\t\t\t} else if (name === 'onSelect') {\r\n-\t\t\t\t\tonselect = value;\r\n-\t\t\t\t} else if (overrides.hasOwnProperty(name)) {\r\n-\t\t\t\t\tif (typeof (value) === 'undefined') {\r\n-\t\t\t\t\t\treturn overrides[name];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tfns[name] = value;\r\n-\t\t\t\t\tname_clone = {}; \u002F\u002Fempty results in exiting function after overrides updated\r\n-\t\t\t\t}\r\n-\t\t\t} else if (typeof name === 'object') { \u002F\u002Fif min\u002Fmax was set with the JSON\r\n-\t\t\t\tif (name.minDate) {\r\n-\t\t\t\t\tmin = name.minDate;\r\n-\t\t\t\t} else if (name.minDateTime) {\r\n-\t\t\t\t\tmin = name.minDateTime;\r\n-\t\t\t\t} else if (name.maxDate) {\r\n-\t\t\t\t\tmax = name.maxDate;\r\n-\t\t\t\t} else if (name.maxDateTime) {\r\n-\t\t\t\t\tmax = name.maxDateTime;\r\n-\t\t\t\t}\r\n-\t\t\t\tfor (prop in overrides) {\r\n-\t\t\t\t\tif (overrides.hasOwnProperty(prop) && name[prop]) {\r\n-\t\t\t\t\t\tfns[prop] = name[prop];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tfor (prop in fns) {\r\n-\t\t\t\tif (fns.hasOwnProperty(prop)) {\r\n-\t\t\t\t\toverrides[prop] = fns[prop];\r\n-\t\t\t\t\tif (!name_clone) { name_clone = $.extend({}, name); }\r\n-\t\t\t\t\tdelete name_clone[prop];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tif (name_clone && isEmptyObject(name_clone)) { return; }\r\n-\t\t\tif (min) { \u002F\u002Fif min was set\r\n-\t\t\t\tif (min === 0) {\r\n-\t\t\t\t\tmin = new Date();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tmin = new Date(min);\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst._defaults.minDate = min;\r\n-\t\t\t\ttp_inst._defaults.minDateTime = min;\r\n-\t\t\t} else if (max) { \u002F\u002Fif max was set\r\n-\t\t\t\tif (max === 0) {\r\n-\t\t\t\t\tmax = new Date();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tmax = new Date(max);\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst._defaults.maxDate = max;\r\n-\t\t\t\ttp_inst._defaults.maxDateTime = max;\r\n-\t\t\t} else if (onselect) {\r\n-\t\t\t\ttp_inst._defaults.onSelect = onselect;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Datepicker will override our date when we call _base_optionDatepicker when\r\n-\t\t\t\u002F\u002F calling minDate\u002FmaxDate, so we will first grab the value, call\r\n-\t\t\t\u002F\u002F _base_optionDatepicker, then set our value back.\r\n-\t\t\tif(min || max){\r\n-\t\t\t\t$target = $(target);\r\n-\t\t\t\toldVal = $target.datetimepicker('getDate');\r\n-\t\t\t\tret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\r\n-\t\t\t\t$target.datetimepicker('setDate', oldVal);\r\n-\t\t\t\treturn ret;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif (value === undefined) {\r\n-\t\t\treturn this._base_optionDatepicker.call($.datepicker, target, name);\r\n-\t\t}\r\n-\t\treturn this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\r\n-\t* it will return false for all objects\r\n-\t*\u002F\r\n-\tvar isEmptyObject = function (obj) {\r\n-\t\tvar prop;\r\n-\t\tfor (prop in obj) {\r\n-\t\t\tif (obj.hasOwnProperty(prop)) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn true;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* jQuery extend now ignores nulls!\r\n-\t*\u002F\r\n-\tvar extendRemove = function (target, props) {\r\n-\t\t$.extend(target, props);\r\n-\t\tfor (var name in props) {\r\n-\t\t\tif (props[name] === null || props[name] === undefined) {\r\n-\t\t\t\ttarget[name] = props[name];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn target;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Determine by the time format which units are supported\r\n-\t* Returns an object of booleans for each unit\r\n-\t*\u002F\r\n-\tvar detectSupport = function (timeFormat) {\r\n-\t\tvar tf = timeFormat.replace(\u002F'.*?'\u002Fg, '').toLowerCase(), \u002F\u002F removes literals\r\n-\t\t\tisIn = function (f, t) { \u002F\u002F does the format contain the token?\r\n-\t\t\t\t\treturn f.indexOf(t) !== -1 ? true : false;\r\n-\t\t\t\t};\r\n-\t\treturn {\r\n-\t\t\t\thour: isIn(tf, 'h'),\r\n-\t\t\t\tminute: isIn(tf, 'm'),\r\n-\t\t\t\tsecond: isIn(tf, 's'),\r\n-\t\t\t\tmillisec: isIn(tf, 'l'),\r\n-\t\t\t\tmicrosec: isIn(tf, 'c'),\r\n-\t\t\t\ttimezone: isIn(tf, 'z'),\r\n-\t\t\t\tampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\r\n-\t\t\t\tiso8601: isIn(timeFormat, 'Z')\r\n-\t\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Converts 24 hour format into 12 hour\r\n-\t* Returns 12 hour without leading 0\r\n-\t*\u002F\r\n-\tvar convert24to12 = function (hour) {\r\n-\t\thour %= 12;\r\n-\r\n-\t\tif (hour === 0) {\r\n-\t\t\thour = 12;\r\n-\t\t}\r\n-\r\n-\t\treturn String(hour);\r\n-\t};\r\n-\r\n-\tvar computeEffectiveSetting = function (settings, property) {\r\n-\t\treturn settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Splits datetime string into date and time substrings.\r\n-\t* Throws exception when date can't be parsed\r\n-\t* Returns {dateString: dateString, timeString: timeString}\r\n-\t*\u002F\r\n-\tvar splitDateTime = function (dateTimeString, timeSettings) {\r\n-\t\t\u002F\u002F The idea is to get the number separator occurrences in datetime and the time format requested (since time has\r\n-\t\t\u002F\u002F fewer unknowns, mostly numbers and am\u002Fpm). We will use the time pattern to split.\r\n-\t\tvar separator = computeEffectiveSetting(timeSettings, 'separator'),\r\n-\t\t\tformat = computeEffectiveSetting(timeSettings, 'timeFormat'),\r\n-\t\t\ttimeParts = format.split(separator), \u002F\u002F how many occurrences of separator may be in our format?\r\n-\t\t\ttimePartsLen = timeParts.length,\r\n-\t\t\tallParts = dateTimeString.split(separator),\r\n-\t\t\tallPartsLen = allParts.length;\r\n-\r\n-\t\tif (allPartsLen > 1) {\r\n-\t\t\treturn {\r\n-\t\t\t\tdateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\r\n-\t\t\t\ttimeString: allParts.splice(0, timePartsLen).join(separator)\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\treturn {\r\n-\t\t\tdateString: dateTimeString,\r\n-\t\t\ttimeString: ''\r\n-\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Internal function to parse datetime interval\r\n-\t* Returns: {date: Date, timeObj: Object}, where\r\n-\t*   date - parsed date without time (type Date)\r\n-\t*   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\r\n-\t*\u002F\r\n-\tvar parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\r\n-\t\tvar date,\r\n-\t\t\tparts,\r\n-\t\t\tparsedTime;\r\n-\r\n-\t\tparts = splitDateTime(dateTimeString, timeSettings);\r\n-\t\tdate = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\r\n-\r\n-\t\tif (parts.timeString === '') {\r\n-\t\t\treturn {\r\n-\t\t\t\tdate: date\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tparsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\r\n-\r\n-\t\tif (!parsedTime) {\r\n-\t\t\tthrow 'Wrong time format';\r\n-\t\t}\r\n-\r\n-\t\treturn {\r\n-\t\t\tdate: date,\r\n-\t\t\ttimeObj: parsedTime\r\n-\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Internal function to set timezone_select to the local timezone\r\n-\t*\u002F\r\n-\tvar selectLocalTimezone = function (tp_inst, date) {\r\n-\t\tif (tp_inst && tp_inst.timezone_select) {\r\n-\t\t\tvar now = date || new Date();\r\n-\t\t\ttp_inst.timezone_select.val(-now.getTimezoneOffset());\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create a Singleton Instance\r\n-\t*\u002F\r\n-\t$.timepicker = new Timepicker();\r\n-\r\n-\t\u002F**\r\n-\t * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\r\n-\t * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\r\n-\t * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\r\n-\t * @return {string}\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\r\n-\t\tif (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes \u003C -720) {\r\n-\t\t\treturn tzMinutes;\r\n-\t\t}\r\n-\r\n-\t\tvar off = tzMinutes,\r\n-\t\t\tminutes = off % 60,\r\n-\t\t\thours = (off - minutes) \u002F 60,\r\n-\t\t\tiso = iso8601 ? ':' : '',\r\n-\t\t\ttz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\r\n-\r\n-\t\tif (tz === '+00:00') {\r\n-\t\t\treturn 'Z';\r\n-\t\t}\r\n-\t\treturn tz;\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Get the number in minutes that represents a timezone string\r\n-\t * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\r\n-\t * @return {number} the offset minutes or the original string if it doesn't match expectations\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneOffsetNumber = function (tzString) {\r\n-\t\tvar normalized = tzString.toString().replace(':', ''); \u002F\u002F excuse any iso8601, end up with \"+1245\"\r\n-\r\n-\t\tif (normalized.toUpperCase() === 'Z') { \u002F\u002F if iso8601 with Z, its 0 minute offset\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\tif (!\u002F^(\\-|\\+)\\d{4}$\u002F.test(normalized)) { \u002F\u002F possibly a user defined tz, so just give it back\r\n-\t\t\treturn parseInt(tzString, 10);\r\n-\t\t}\r\n-\r\n-\t\treturn ((normalized.substr(0, 1) === '-' ? -1 : 1) * \u002F\u002F plus or minus\r\n-\t\t\t\t\t((parseInt(normalized.substr(1, 2), 10) * 60) + \u002F\u002F hours (converted to minutes)\r\n-\t\t\t\t\tparseInt(normalized.substr(3, 2), 10))); \u002F\u002F minutes\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\r\n-\t * @param  {Date} date\r\n-\t * @param  {string} fromTimezone formatted like \"+0500\", \"-1245\"\r\n-\t * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\r\n-\t * @return {Date}\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneAdjust = function (date, fromTimezone, toTimezone) {\r\n-\t\tvar fromTz = $.timepicker.timezoneOffsetNumber(fromTimezone);\r\n-\t\tvar toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\r\n-\t\tif (!isNaN(toTz)) {\r\n-\t\t\tdate.setMinutes(date.getMinutes() + (-fromTz) - (-toTz));\r\n-\t\t}\r\n-\t\treturn date;\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * n.b. The input value must be correctly formatted (reformatting is not supported)\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the timepicker() call\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.timeRange = function (startTime, endTime, options) {\r\n-\t\treturn $.timepicker.handleRange('timepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @param  {string} method Can be used to specify the type of picker to be added\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.datetimeRange = function (startTime, endTime, options) {\r\n-\t\t$.timepicker.handleRange('datetimepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.dateRange = function (startTime, endTime, options) {\r\n-\t\t$.timepicker.handleRange('datepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `method` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {string} method Can be used to specify the type of picker to be added\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.handleRange = function (method, startTime, endTime, options) {\r\n-\t\toptions = $.extend({}, {\r\n-\t\t\tminInterval: 0, \u002F\u002F min allowed interval in milliseconds\r\n-\t\t\tmaxInterval: 0, \u002F\u002F max allowed interval in milliseconds\r\n-\t\t\tstart: {},      \u002F\u002F options for start picker\r\n-\t\t\tend: {}         \u002F\u002F options for end picker\r\n-\t\t}, options);\r\n-\r\n-\t\t\u002F\u002F for the mean time this fixes an issue with calling getDate with timepicker()\r\n-\t\tvar timeOnly = false;\r\n-\t\tif(method === 'timepicker'){\r\n-\t\t\ttimeOnly = true;\r\n-\t\t\tmethod = 'datetimepicker';\r\n-\t\t}\r\n-\r\n-\t\tfunction checkDates(changed, other) {\r\n-\t\t\tvar startdt = startTime[method]('getDate'),\r\n-\t\t\t\tenddt = endTime[method]('getDate'),\r\n-\t\t\t\tchangeddt = changed[method]('getDate');\r\n-\r\n-\t\t\tif (startdt !== null) {\r\n-\t\t\t\tvar minDate = new Date(startdt.getTime()),\r\n-\t\t\t\t\tmaxDate = new Date(startdt.getTime());\r\n-\r\n-\t\t\t\tminDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\r\n-\t\t\t\tmaxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\r\n-\r\n-\t\t\t\tif (options.minInterval > 0 && minDate > enddt) { \u002F\u002F minInterval check\r\n-\t\t\t\t\tendTime[method]('setDate', minDate);\r\n-\t\t\t\t}\r\n-\t\t\t\telse if (options.maxInterval > 0 && maxDate \u003C enddt) { \u002F\u002F max interval check\r\n-\t\t\t\t\tendTime[method]('setDate', maxDate);\r\n-\t\t\t\t}\r\n-\t\t\t\telse if (startdt > enddt) {\r\n-\t\t\t\t\tother[method]('setDate', changeddt);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tfunction selected(changed, other, option) {\r\n-\t\t\tif (!changed.val()) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tvar date = changed[method].call(changed, 'getDate');\r\n-\t\t\tif (date !== null && options.minInterval > 0) {\r\n-\t\t\t\tif (option === 'minDate') {\r\n-\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() + options.minInterval);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (option === 'maxDate') {\r\n-\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() - options.minInterval);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (date.getTime) {\r\n-\t\t\t\tother[method].call(other, 'option', option, date);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$.fn[method].call(startTime, $.extend({\r\n-\t\t\ttimeOnly: timeOnly,\r\n-\t\t\tonClose: function (dateText, inst) {\r\n-\t\t\t\tcheckDates($(this), endTime);\r\n-\t\t\t},\r\n-\t\t\tonSelect: function (selectedDateTime) {\r\n-\t\t\t\tselected($(this), endTime, 'minDate');\r\n-\t\t\t}\r\n-\t\t}, options, options.start));\r\n-\t\t$.fn[method].call(endTime, $.extend({\r\n-\t\t\ttimeOnly: timeOnly,\r\n-\t\t\tonClose: function (dateText, inst) {\r\n-\t\t\t\tcheckDates($(this), startTime);\r\n-\t\t\t},\r\n-\t\t\tonSelect: function (selectedDateTime) {\r\n-\t\t\t\tselected($(this), startTime, 'maxDate');\r\n-\t\t\t}\r\n-\t\t}, options, options.end));\r\n-\r\n-\t\tcheckDates(startTime, endTime);\r\n-\r\n-\t\tselected(startTime, endTime, 'minDate');\r\n-\t\tselected(endTime, startTime, 'maxDate');\r\n-\r\n-\t\treturn $([startTime.get(0), endTime.get(0)]);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Log error or data to the console during error or debugging\r\n-\t * @param  {Object} err pass any type object to log to the console during error or debugging\r\n-\t * @return {void}\r\n-\t *\u002F\r\n-\t$.timepicker.log = function () {\r\n-\t\t\u002F\u002F Older IE (9, maybe 10) throw error on accessing `window.console.log.apply`, so check first.\r\n-\t\tif (window.console && window.console.log && window.console.log.apply) {\r\n-\t\t\twindow.console.log.apply(window.console, Array.prototype.slice.call(arguments));\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t * Add util object to allow access to private methods for testability.\r\n-\t *\u002F\r\n-\t$.timepicker._util = {\r\n-\t\t_extendRemove: extendRemove,\r\n-\t\t_isEmptyObject: isEmptyObject,\r\n-\t\t_convert24to12: convert24to12,\r\n-\t\t_detectSupport: detectSupport,\r\n-\t\t_selectLocalTimezone: selectLocalTimezone,\r\n-\t\t_computeEffectiveSetting: computeEffectiveSetting,\r\n-\t\t_splitDateTime: splitDateTime,\r\n-\t\t_parseDateTimeInternal: parseDateTimeInternal\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Microsecond support\r\n-\t*\u002F\r\n-\tif (!Date.prototype.getMicroseconds) {\r\n-\t\tDate.prototype.microseconds = 0;\r\n-\t\tDate.prototype.getMicroseconds = function () { return this.microseconds; };\r\n-\t\tDate.prototype.setMicroseconds = function (m) {\r\n-\t\t\tthis.setMilliseconds(this.getMilliseconds() + Math.floor(m \u002F 1000));\r\n-\t\t\tthis.microseconds = m % 1000;\r\n-\t\t\treturn this;\r\n-\t\t};\r\n-\t}\r\n-\r\n-\t\u002F*\r\n-\t* Keep up with the version\r\n-\t*\u002F\r\n-\t$.timepicker.version = \"1.6.3\";\r\n-\r\n-}));\r\n+\u002F*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20\n+* http:\u002F\u002Ftrentrichardson.com\u002Fexamples\u002Ftimepicker\n+* Copyright (c) 2016 Trent Richardson; Licensed MIT *\u002F\n+(function (factory) {\n+\tif (typeof define === 'function' && define.amd) {\n+\t\tdefine(['jquery', 'jquery-ui'], factory);\n+\t} else {\n+\t\tfactory(jQuery);\n+\t}\n+}(function ($) {\n+\n+\t\u002F*\n+\t* Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\n+\t*\u002F\n+\t$.ui.timepicker = $.ui.timepicker || {};\n+\tif ($.ui.timepicker.version) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F*\n+\t* Extend jQueryUI, get it started with our version number\n+\t*\u002F\n+\t$.extend($.ui, {\n+\t\ttimepicker: {\n+\t\t\tversion: \"1.6.3\"\n+\t\t}\n+\t});\n+\n+\t\u002F*\n+\t* Timepicker manager.\n+\t* Use the singleton instance of this class, $.timepicker, to interact with the time picker.\n+\t* Settings for (groups of) time pickers are maintained in an instance object,\n+\t* allowing multiple different settings on the same page.\n+\t*\u002F\n+\tvar Timepicker = function () {\n+\t\tthis.regional = []; \u002F\u002F Available regional settings, indexed by language code\n+\t\tthis.regional[''] = { \u002F\u002F Default regional settings\n+\t\t\tcurrentText: 'Now',\n+\t\t\tcloseText: 'Done',\n+\t\t\tamNames: ['AM', 'A'],\n+\t\t\tpmNames: ['PM', 'P'],\n+\t\t\ttimeFormat: 'HH:mm',\n+\t\t\ttimeSuffix: '',\n+\t\t\ttimeOnlyTitle: 'Choose Time',\n+\t\t\ttimeText: 'Time',\n+\t\t\thourText: 'Hour',\n+\t\t\tminuteText: 'Minute',\n+\t\t\tsecondText: 'Second',\n+\t\t\tmillisecText: 'Millisecond',\n+\t\t\tmicrosecText: 'Microsecond',\n+\t\t\ttimezoneText: 'Time Zone',\n+\t\t\tisRTL: false\n+\t\t};\n+\t\tthis._defaults = { \u002F\u002F Global defaults for all the datetime picker instances\n+\t\t\tshowButtonPanel: true,\n+\t\t\ttimeOnly: false,\n+\t\t\ttimeOnlyShowDate: false,\n+\t\t\tshowHour: null,\n+\t\t\tshowMinute: null,\n+\t\t\tshowSecond: null,\n+\t\t\tshowMillisec: null,\n+\t\t\tshowMicrosec: null,\n+\t\t\tshowTimezone: null,\n+\t\t\tshowTime: true,\n+\t\t\tstepHour: 1,\n+\t\t\tstepMinute: 1,\n+\t\t\tstepSecond: 1,\n+\t\t\tstepMillisec: 1,\n+\t\t\tstepMicrosec: 1,\n+\t\t\thour: 0,\n+\t\t\tminute: 0,\n+\t\t\tsecond: 0,\n+\t\t\tmillisec: 0,\n+\t\t\tmicrosec: 0,\n+\t\t\ttimezone: null,\n+\t\t\thourMin: 0,\n+\t\t\tminuteMin: 0,\n+\t\t\tsecondMin: 0,\n+\t\t\tmillisecMin: 0,\n+\t\t\tmicrosecMin: 0,\n+\t\t\thourMax: 23,\n+\t\t\tminuteMax: 59,\n+\t\t\tsecondMax: 59,\n+\t\t\tmillisecMax: 999,\n+\t\t\tmicrosecMax: 999,\n+\t\t\tminDateTime: null,\n+\t\t\tmaxDateTime: null,\n+\t\t\tmaxTime: null,\n+\t\t\tminTime: null,\n+\t\t\tonSelect: null,\n+\t\t\thourGrid: 0,\n+\t\t\tminuteGrid: 0,\n+\t\t\tsecondGrid: 0,\n+\t\t\tmillisecGrid: 0,\n+\t\t\tmicrosecGrid: 0,\n+\t\t\talwaysSetTime: true,\n+\t\t\tseparator: ' ',\n+\t\t\taltFieldTimeOnly: true,\n+\t\t\taltTimeFormat: null,\n+\t\t\taltSeparator: null,\n+\t\t\taltTimeSuffix: null,\n+\t\t\taltRedirectFocus: true,\n+\t\t\tpickerTimeFormat: null,\n+\t\t\tpickerTimeSuffix: null,\n+\t\t\tshowTimepicker: true,\n+\t\t\ttimezoneList: null,\n+\t\t\taddSliderAccess: false,\n+\t\t\tsliderAccessArgs: null,\n+\t\t\tcontrolType: 'slider',\n+\t\t\toneLine: false,\n+\t\t\tdefaultValue: null,\n+\t\t\tparse: 'strict',\n+\t\t\tafterInject: null\n+\t\t};\n+\t\t$.extend(this._defaults, this.regional['']);\n+\t};\n+\n+\t$.extend(Timepicker.prototype, {\n+\t\t$input: null,\n+\t\t$altInput: null,\n+\t\t$timeObj: null,\n+\t\tinst: null,\n+\t\thour_slider: null,\n+\t\tminute_slider: null,\n+\t\tsecond_slider: null,\n+\t\tmillisec_slider: null,\n+\t\tmicrosec_slider: null,\n+\t\ttimezone_select: null,\n+\t\tmaxTime: null,\n+\t\tminTime: null,\n+\t\thour: 0,\n+\t\tminute: 0,\n+\t\tsecond: 0,\n+\t\tmillisec: 0,\n+\t\tmicrosec: 0,\n+\t\ttimezone: null,\n+\t\thourMinOriginal: null,\n+\t\tminuteMinOriginal: null,\n+\t\tsecondMinOriginal: null,\n+\t\tmillisecMinOriginal: null,\n+\t\tmicrosecMinOriginal: null,\n+\t\thourMaxOriginal: null,\n+\t\tminuteMaxOriginal: null,\n+\t\tsecondMaxOriginal: null,\n+\t\tmillisecMaxOriginal: null,\n+\t\tmicrosecMaxOriginal: null,\n+\t\tampm: '',\n+\t\tformattedDate: '',\n+\t\tformattedTime: '',\n+\t\tformattedDateTime: '',\n+\t\ttimezoneList: null,\n+\t\tunits: ['hour', 'minute', 'second', 'millisec', 'microsec'],\n+\t\tsupport: {},\n+\t\tcontrol: null,\n+\n+\t\t\u002F*\n+\t\t* Override the default settings for all instances of the time picker.\n+\t\t* @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\n+\t\t* @return {Object} the manager object\n+\t\t*\u002F\n+\t\tsetDefaults: function (settings) {\n+\t\t\textendRemove(this._defaults, settings || {});\n+\t\t\treturn this;\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Create a new Timepicker instance\n+\t\t*\u002F\n+\t\t_newInst: function ($input, opts) {\n+\t\t\tvar tp_inst = new Timepicker(),\n+\t\t\t\tinlineSettings = {},\n+\t\t\t\tfns = {},\n+\t\t\t\toverrides, i;\n+\n+\t\t\tfor (var attrName in this._defaults) {\n+\t\t\t\tif (this._defaults.hasOwnProperty(attrName)) {\n+\t\t\t\t\tvar attrValue = $input.attr('time:' + attrName);\n+\t\t\t\t\tif (attrValue) {\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\n+\t\t\t\t\t\t} catch (err) {\n+\t\t\t\t\t\t\tinlineSettings[attrName] = attrValue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\toverrides = {\n+\t\t\t\tbeforeShow: function (input, dp_inst) {\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\n+\t\t\t\t\t\treturn tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tonChangeMonthYear: function (year, month, dp_inst) {\n+\t\t\t\t\t\u002F\u002F Update the time as well : this prevents the time from disappearing from the $input field.\n+\t\t\t\t\t\u002F\u002F tp_inst._updateDateTime(dp_inst);\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\n+\t\t\t\t\t\ttp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tonClose: function (dateText, dp_inst) {\n+\t\t\t\t\tif (tp_inst.timeDefined === true && $input.val() !== '') {\n+\t\t\t\t\t\ttp_inst._updateDateTime(dp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onClose)) {\n+\t\t\t\t\t\ttp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t};\n+\t\t\tfor (i in overrides) {\n+\t\t\t\tif (overrides.hasOwnProperty(i)) {\n+\t\t\t\t\tfns[i] = opts[i] || this._defaults[i] || null;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\ttp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\n+\t\t\t\tevnts: fns,\n+\t\t\t\ttimepicker: tp_inst \u002F\u002F add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\n+\t\t\t});\n+\t\t\ttp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\n+\t\t\t\treturn val.toUpperCase();\n+\t\t\t});\n+\t\t\ttp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\n+\t\t\t\treturn val.toUpperCase();\n+\t\t\t});\n+\n+\t\t\t\u002F\u002F detect which units are supported\n+\t\t\ttp_inst.support = detectSupport(\n+\t\t\t\t\ttp_inst._defaults.timeFormat +\n+\t\t\t\t\t(tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\n+\t\t\t\t\t(tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\n+\n+\t\t\t\u002F\u002F controlType is string - key to our this._controls\n+\t\t\tif (typeof(tp_inst._defaults.controlType) === 'string') {\n+\t\t\t\tif (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\n+\t\t\t\t\ttp_inst._defaults.controlType = 'select';\n+\t\t\t\t}\n+\t\t\t\ttp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\n+\t\t\t}\n+\t\t\t\u002F\u002F controlType is an object and must implement create, options, value methods\n+\t\t\telse {\n+\t\t\t\ttp_inst.control = tp_inst._defaults.controlType;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F prep the timezone options\n+\t\t\tvar timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\n+\t\t\t\t\t0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\n+\t\t\tif (tp_inst._defaults.timezoneList !== null) {\n+\t\t\t\ttimezoneList = tp_inst._defaults.timezoneList;\n+\t\t\t}\n+\t\t\tvar tzl = timezoneList.length, tzi = 0, tzv = null;\n+\t\t\tif (tzl > 0 && typeof timezoneList[0] !== 'object') {\n+\t\t\t\tfor (; tzi \u003C tzl; tzi++) {\n+\t\t\t\t\ttzv = timezoneList[tzi];\n+\t\t\t\t\ttimezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\ttp_inst._defaults.timezoneList = timezoneList;\n+\n+\t\t\t\u002F\u002F set the default units\n+\t\t\ttp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\n+\t\t\t\t\t\t\t((new Date()).getTimezoneOffset() * -1);\n+\t\t\ttp_inst.hour = tp_inst._defaults.hour \u003C tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\n+\t\t\ttp_inst.minute = tp_inst._defaults.minute \u003C tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\n+\t\t\ttp_inst.second = tp_inst._defaults.second \u003C tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\n+\t\t\ttp_inst.millisec = tp_inst._defaults.millisec \u003C tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\n+\t\t\ttp_inst.microsec = tp_inst._defaults.microsec \u003C tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\n+\t\t\ttp_inst.ampm = '';\n+\t\t\ttp_inst.$input = $input;\n+\n+\t\t\tif (tp_inst._defaults.altField) {\n+\t\t\t\ttp_inst.$altInput = $(tp_inst._defaults.altField);\n+\t\t\t\tif (tp_inst._defaults.altRedirectFocus === true) {\n+\t\t\t\t\ttp_inst.$altInput.css({\n+\t\t\t\t\t\tcursor: 'pointer'\n+\t\t\t\t\t}).focus(function () {\n+\t\t\t\t\t\t$input.trigger(\"focus\");\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\n+\t\t\t\ttp_inst._defaults.minDate = new Date();\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\n+\t\t\t\ttp_inst._defaults.maxDate = new Date();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F datepicker needs minDate\u002FmaxDate, timepicker needs minDateTime\u002FmaxDateTime..\n+\t\t\tif (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\n+\t\t\t\ttp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\n+\t\t\t\ttp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\n+\t\t\t\ttp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\n+\t\t\t\ttp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\n+\t\t\t}\n+\t\t\ttp_inst.$input.bind('focus', function () {\n+\t\t\t\ttp_inst._onFocus();\n+\t\t\t});\n+\n+\t\t\treturn tp_inst;\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* add our sliders to the calendar\n+\t\t*\u002F\n+\t\t_addTimePicker: function (dp_inst) {\n+\t\t\tvar currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\n+\n+\t\t\tthis.timeDefined = this._parseTime(currDT);\n+\t\t\tthis._limitMinMaxDateTime(dp_inst, false);\n+\t\t\tthis._injectTimePicker();\n+\t\t\tthis._afterInject();\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* parse the time string from input value or _setTime\n+\t\t*\u002F\n+\t\t_parseTime: function (timeString, withDate) {\n+\t\t\tif (!this.inst) {\n+\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\n+\t\t\t}\n+\n+\t\t\tif (withDate || !this._defaults.timeOnly) {\n+\t\t\t\tvar dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\n+\t\t\t\ttry {\n+\t\t\t\t\tvar parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\n+\t\t\t\t\tif (!parseRes.timeObj) {\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t}\n+\t\t\t\t\t$.extend(this, parseRes.timeObj);\n+\t\t\t\t} catch (err) {\n+\t\t\t\t\t$.timepicker.log(\"Error parsing the date\u002Ftime string: \" + err +\n+\t\t\t\t\t\t\t\t\t\"\\ndate\u002Ftime string = \" + timeString +\n+\t\t\t\t\t\t\t\t\t\"\\ntimeFormat = \" + this._defaults.timeFormat +\n+\t\t\t\t\t\t\t\t\t\"\\ndateFormat = \" + dp_dateFormat);\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t\treturn true;\n+\t\t\t} else {\n+\t\t\t\tvar timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\n+\t\t\t\tif (!timeObj) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t\t$.extend(this, timeObj);\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Handle callback option after injecting timepicker\n+\t\t*\u002F\n+\t\t_afterInject: function() {\n+\t\t\tvar o = this.inst.settings;\n+\t\t\tif ($.isFunction(o.afterInject)) {\n+\t\t\t\to.afterInject.call(this);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* generate and inject html for timepicker into ui datepicker\n+\t\t*\u002F\n+\t\t_injectTimePicker: function () {\n+\t\t\tvar $dp = this.inst.dpDiv,\n+\t\t\t\to = this.inst.settings,\n+\t\t\t\ttp_inst = this,\n+\t\t\t\tlitem = '',\n+\t\t\t\tuitem = '',\n+\t\t\t\tshow = null,\n+\t\t\t\tmax = {},\n+\t\t\t\tgridSize = {},\n+\t\t\t\tsize = null,\n+\t\t\t\ti = 0,\n+\t\t\t\tl = 0;\n+\n+\t\t\t\u002F\u002F Prevent displaying twice\n+\t\t\tif ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\n+\t\t\t\tvar noDisplay = ' ui_tpicker_unit_hide',\n+\t\t\t\t\thtml = '\u003Cdiv class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\">\u003Cdl>' + '\u003Cdt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '\u003C\u002Fdt>' +\n+\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\">\u003Cinput class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '\u002F>\u003C\u002Fdd>';\n+\n+\t\t\t\t\u002F\u002F Create the markup\n+\t\t\t\tfor (i = 0, l = this.units.length; i \u003C l; i++) {\n+\t\t\t\t\tlitem = this.units[i];\n+\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n+\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n+\n+\t\t\t\t\t\u002F\u002F Added by Peter Medeiros:\n+\t\t\t\t\t\u002F\u002F - Figure out what the hour\u002Fminute\u002Fsecond max should be based on the step values.\n+\t\t\t\t\t\u002F\u002F - Example: if stepMinute is 15, then minMax is 45.\n+\t\t\t\t\tmax[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\n+\t\t\t\t\tgridSize[litem] = 0;\n+\n+\t\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '\u003C\u002Fdt>' +\n+\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\">\u003Cdiv class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\">\u003C\u002Fdiv>';\n+\n+\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\n+\t\t\t\t\t\thtml += '\u003Cdiv style=\"padding-left: 1px\">\u003Ctable class=\"ui-tpicker-grid-label\">\u003Ctr>';\n+\n+\t\t\t\t\t\tif (litem === 'hour') {\n+\t\t\t\t\t\t\tfor (var h = o[litem + 'Min']; h \u003C= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\n+\t\t\t\t\t\t\t\tgridSize[litem]++;\n+\t\t\t\t\t\t\t\tvar tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\n+\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + tmph + '\u003C\u002Ftd>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telse {\n+\t\t\t\t\t\t\tfor (var m = o[litem + 'Min']; m \u003C= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\n+\t\t\t\t\t\t\t\tgridSize[litem]++;\n+\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + ((m \u003C 10) ? '0' : '') + m + '\u003C\u002Ftd>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\thtml += '\u003C\u002Ftr>\u003C\u002Ftable>\u003C\u002Fdiv>';\n+\t\t\t\t\t}\n+\t\t\t\t\thtml += '\u003C\u002Fdd>';\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Timezone\n+\t\t\t\tvar showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\n+\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '\u003C\u002Fdt>';\n+\t\t\t\thtml += '\u003Cdd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\">\u003C\u002Fdd>';\n+\n+\t\t\t\t\u002F\u002F Create the elements from string\n+\t\t\t\thtml += '\u003C\u002Fdl>\u003C\u002Fdiv>';\n+\t\t\t\tvar $tp = $(html);\n+\n+\t\t\t\t\u002F\u002F if we only want time picker...\n+\t\t\t\tif (o.timeOnly === true) {\n+\t\t\t\t\t$tp.prepend('\u003Cdiv class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '\u003Cdiv class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '\u003C\u002Fdiv>' + '\u003C\u002Fdiv>');\n+\t\t\t\t\t$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F add sliders, adjust grids, add events\n+\t\t\t\tfor (i = 0, l = tp_inst.units.length; i \u003C l; i++) {\n+\t\t\t\t\tlitem = tp_inst.units[i];\n+\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n+\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n+\n+\t\t\t\t\t\u002F\u002F add the slider\n+\t\t\t\t\ttp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\n+\n+\t\t\t\t\t\u002F\u002F adjust the grid and add click event\n+\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\n+\t\t\t\t\t\tsize = 100 * gridSize[litem] * o[litem + 'Grid'] \u002F (max[litem] - o[litem + 'Min']);\n+\t\t\t\t\t\t$tp.find('.ui_tpicker_' + litem + ' table').css({\n+\t\t\t\t\t\t\twidth: size + \"%\",\n+\t\t\t\t\t\t\tmarginLeft: o.isRTL ? '0' : ((size \u002F (-2 * gridSize[litem])) + \"%\"),\n+\t\t\t\t\t\t\tmarginRight: o.isRTL ? ((size \u002F (-2 * gridSize[litem])) + \"%\") : '0',\n+\t\t\t\t\t\t\tborderCollapse: 'collapse'\n+\t\t\t\t\t\t}).find(\"td\").click(function (e) {\n+\t\t\t\t\t\t\t\tvar $t = $(this),\n+\t\t\t\t\t\t\t\t\th = $t.html(),\n+\t\t\t\t\t\t\t\t\tn = parseInt(h.replace(\u002F[^0-9]\u002Fg), 10),\n+\t\t\t\t\t\t\t\t\tap = h.replace(\u002F[^apm]\u002Fig),\n+\t\t\t\t\t\t\t\t\tf = $t.data('for'); \u002F\u002F loses scope, so we use data-for\n+\n+\t\t\t\t\t\t\t\tif (f === 'hour') {\n+\t\t\t\t\t\t\t\t\tif (ap.indexOf('p') !== -1 && n \u003C 12) {\n+\t\t\t\t\t\t\t\t\t\tn += 12;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\telse {\n+\t\t\t\t\t\t\t\t\t\tif (ap.indexOf('a') !== -1 && n === 12) {\n+\t\t\t\t\t\t\t\t\t\t\tn = 0;\n+\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\n+\n+\t\t\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\t\t}).css({\n+\t\t\t\t\t\t\t\tcursor: 'pointer',\n+\t\t\t\t\t\t\t\twidth: (100 \u002F gridSize[litem]) + '%',\n+\t\t\t\t\t\t\t\ttextAlign: 'center',\n+\t\t\t\t\t\t\t\toverflow: 'hidden'\n+\t\t\t\t\t\t\t});\n+\t\t\t\t\t} \u002F\u002F end if grid > 0\n+\t\t\t\t} \u002F\u002F end for loop\n+\n+\t\t\t\t\u002F\u002F Add timezone options\n+\t\t\t\tthis.timezone_select = $tp.find('.ui_tpicker_timezone').append('\u003Cselect>\u003C\u002Fselect>').find(\"select\");\n+\t\t\t\t$.fn.append.apply(this.timezone_select,\n+\t\t\t\t$.map(o.timezoneList, function (val, idx) {\n+\t\t\t\t\treturn $(\"\u003Coption \u002F>\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\n+\t\t\t\t}));\n+\t\t\t\tif (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\n+\t\t\t\t\tvar local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\n+\t\t\t\t\tif (local_timezone === this.timezone) {\n+\t\t\t\t\t\tselectLocalTimezone(tp_inst);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.timezone_select.val(this.timezone);\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tif (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\n+\t\t\t\t\t\tthis.timezone_select.val(o.timezone);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tselectLocalTimezone(tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tthis.timezone_select.change(function () {\n+\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\ttp_inst._afterInject();\n+\t\t\t\t});\n+\t\t\t\t\u002F\u002F End timezone options\n+\n+\t\t\t\t\u002F\u002F inject timepicker into datepicker\n+\t\t\t\tvar $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\n+\t\t\t\tif ($buttonPanel.length) {\n+\t\t\t\t\t$buttonPanel.before($tp);\n+\t\t\t\t} else {\n+\t\t\t\t\t$dp.append($tp);\n+\t\t\t\t}\n+\n+\t\t\t\tthis.$timeObj = $tp.find('.ui_tpicker_time_input');\n+\t\t\t\tthis.$timeObj.change(function () {\n+\t\t\t\t\tvar timeFormat = tp_inst.inst.settings.timeFormat;\n+\t\t\t\t\tvar parsedTime = $.datepicker.parseTime(timeFormat, this.value);\n+\t\t\t\t\tvar update = new Date();\n+\t\t\t\t\tif (parsedTime) {\n+\t\t\t\t\t\tupdate.setHours(parsedTime.hour);\n+\t\t\t\t\t\tupdate.setMinutes(parsedTime.minute);\n+\t\t\t\t\t\tupdate.setSeconds(parsedTime.second);\n+\t\t\t\t\t\t$.datepicker._setTime(tp_inst.inst, update);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.value = tp_inst.formattedTime;\n+\t\t\t\t\t\tthis.blur();\n+\t\t\t\t\t}\n+\t\t\t\t});\n+\n+\t\t\t\tif (this.inst !== null) {\n+\t\t\t\t\tvar timeDefined = this.timeDefined;\n+\t\t\t\t\tthis._onTimeChange();\n+\t\t\t\t\tthis.timeDefined = timeDefined;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F slideAccess integration: http:\u002F\u002Ftrentrichardson.com\u002F2011\u002F11\u002F11\u002Fjquery-ui-sliders-and-touch-accessibility\u002F\n+\t\t\t\tif (this._defaults.addSliderAccess) {\n+\t\t\t\t\tvar sliderAccessArgs = this._defaults.sliderAccessArgs,\n+\t\t\t\t\t\trtl = this._defaults.isRTL;\n+\t\t\t\t\tsliderAccessArgs.isRTL = rtl;\n+\n+\t\t\t\t\tsetTimeout(function () { \u002F\u002F fix for inline mode\n+\t\t\t\t\t\tif ($tp.find('.ui-slider-access').length === 0) {\n+\t\t\t\t\t\t\t$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\n+\n+\t\t\t\t\t\t\t\u002F\u002F fix any grids since sliders are shorter\n+\t\t\t\t\t\t\tvar sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\n+\t\t\t\t\t\t\tif (sliderAccessWidth) {\n+\t\t\t\t\t\t\t\t$tp.find('table:visible').each(function () {\n+\t\t\t\t\t\t\t\t\tvar $g = $(this),\n+\t\t\t\t\t\t\t\t\t\toldWidth = $g.outerWidth(),\n+\t\t\t\t\t\t\t\t\t\toldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\n+\t\t\t\t\t\t\t\t\t\tnewWidth = oldWidth - sliderAccessWidth,\n+\t\t\t\t\t\t\t\t\t\tnewMarginLeft = ((oldMarginLeft * newWidth) \u002F oldWidth) + '%',\n+\t\t\t\t\t\t\t\t\t\tcss = { width: newWidth, marginRight: 0, marginLeft: 0 };\n+\t\t\t\t\t\t\t\t\tcss[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\n+\t\t\t\t\t\t\t\t\t$g.css(css);\n+\t\t\t\t\t\t\t\t});\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}, 10);\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F end slideAccess integration\n+\n+\t\t\t\ttp_inst._limitMinMaxDateTime(this.inst, true);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* This function tries to limit the ability to go outside the\n+\t\t* min\u002Fmax date range\n+\t\t*\u002F\n+\t\t_limitMinMaxDateTime: function (dp_inst, adjustSliders) {\n+\t\t\tvar o = this._defaults,\n+\t\t\t\tdp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\n+\n+\t\t\tif (!this._defaults.showTimepicker) {\n+\t\t\t\treturn;\n+\t\t\t} \u002F\u002F No time so nothing to check here\n+\n+\t\t\tif ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\n+\t\t\t\tvar minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\n+\t\t\t\t\tminDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\n+\n+\t\t\t\tif (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\n+\t\t\t\t\tthis.hourMinOriginal = o.hourMin;\n+\t\t\t\t\tthis.minuteMinOriginal = o.minuteMin;\n+\t\t\t\t\tthis.secondMinOriginal = o.secondMin;\n+\t\t\t\t\tthis.millisecMinOriginal = o.millisecMin;\n+\t\t\t\t\tthis.microsecMinOriginal = o.microsecMin;\n+\t\t\t\t}\n+\n+\t\t\t\tif (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\n+\t\t\t\t\tthis._defaults.hourMin = minDateTime.getHours();\n+\t\t\t\t\tif (this.hour \u003C= this._defaults.hourMin) {\n+\t\t\t\t\t\tthis.hour = this._defaults.hourMin;\n+\t\t\t\t\t\tthis._defaults.minuteMin = minDateTime.getMinutes();\n+\t\t\t\t\t\tif (this.minute \u003C= this._defaults.minuteMin) {\n+\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMin;\n+\t\t\t\t\t\t\tthis._defaults.secondMin = minDateTime.getSeconds();\n+\t\t\t\t\t\t\tif (this.second \u003C= this._defaults.secondMin) {\n+\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMin;\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMin = minDateTime.getMilliseconds();\n+\t\t\t\t\t\t\t\tif (this.millisec \u003C= this._defaults.millisecMin) {\n+\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMin;\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = minDateTime.getMicroseconds();\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tif (this.microsec \u003C this._defaults.microsecMin) {\n+\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMin;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n+\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthis._defaults.hourMin = this.hourMinOriginal;\n+\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n+\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\n+\t\t\t\tvar maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\n+\t\t\t\t\tmaxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\n+\n+\t\t\t\tif (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\n+\t\t\t\t\tthis.hourMaxOriginal = o.hourMax;\n+\t\t\t\t\tthis.minuteMaxOriginal = o.minuteMax;\n+\t\t\t\t\tthis.secondMaxOriginal = o.secondMax;\n+\t\t\t\t\tthis.millisecMaxOriginal = o.millisecMax;\n+\t\t\t\t\tthis.microsecMaxOriginal = o.microsecMax;\n+\t\t\t\t}\n+\n+\t\t\t\tif (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\n+\t\t\t\t\tthis._defaults.hourMax = maxDateTime.getHours();\n+\t\t\t\t\tif (this.hour >= this._defaults.hourMax) {\n+\t\t\t\t\t\tthis.hour = this._defaults.hourMax;\n+\t\t\t\t\t\tthis._defaults.minuteMax = maxDateTime.getMinutes();\n+\t\t\t\t\t\tif (this.minute >= this._defaults.minuteMax) {\n+\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMax;\n+\t\t\t\t\t\t\tthis._defaults.secondMax = maxDateTime.getSeconds();\n+\t\t\t\t\t\t\tif (this.second >= this._defaults.secondMax) {\n+\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMax;\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMax = maxDateTime.getMilliseconds();\n+\t\t\t\t\t\t\t\tif (this.millisec >= this._defaults.millisecMax) {\n+\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMax;\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = maxDateTime.getMicroseconds();\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tif (this.microsec > this._defaults.microsecMax) {\n+\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMax;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthis._defaults.hourMax = this.hourMaxOriginal;\n+\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n+\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (dp_inst.settings.minTime!==null) {\n+\t\t\t\tvar tempMinTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.minTime);\n+\t\t\t\tif (this.hour\u003CtempMinTime.getHours()) {\n+\t\t\t\t\tthis.hour=this._defaults.hourMin=tempMinTime.getHours();\n+\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t} else if (this.hour===tempMinTime.getHours() && this.minute\u003CtempMinTime.getMinutes()) {\n+\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t} else {\n+\t\t\t\t\tif (this._defaults.hourMin\u003CtempMinTime.getHours()) {\n+\t\t\t\t\t\tthis._defaults.hourMin=tempMinTime.getHours();\n+\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t\t} else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin\u003CtempMinTime.getMinutes()) {\n+\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMin=0;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (dp_inst.settings.maxTime!==null) {\n+\t\t\t\tvar tempMaxTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.maxTime);\n+\t\t\t\tif (this.hour>tempMaxTime.getHours()) {\n+\t\t\t\t\tthis.hour=this._defaults.hourMax=tempMaxTime.getHours();\n+\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t} else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\n+\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t} else {\n+\t\t\t\t\tif (this._defaults.hourMax>tempMaxTime.getHours()) {\n+\t\t\t\t\t\tthis._defaults.hourMax=tempMaxTime.getHours();\n+\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t\t} else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\n+\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMax=59;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (adjustSliders !== undefined && adjustSliders === true) {\n+\t\t\t\tvar hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\n+\t\t\t\t\tminMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\n+\t\t\t\t\tsecMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\n+\t\t\t\t\tmillisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\n+\t\t\t\t\tmicrosecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\n+\n+\t\t\t\tif (this.hour_slider) {\n+\t\t\t\t\tthis.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\n+\t\t\t\t\tthis.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\n+\t\t\t\t}\n+\t\t\t\tif (this.minute_slider) {\n+\t\t\t\t\tthis.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\n+\t\t\t\t\tthis.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\n+\t\t\t\t}\n+\t\t\t\tif (this.second_slider) {\n+\t\t\t\t\tthis.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\n+\t\t\t\t\tthis.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\n+\t\t\t\t}\n+\t\t\t\tif (this.millisec_slider) {\n+\t\t\t\t\tthis.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\n+\t\t\t\t\tthis.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\n+\t\t\t\t}\n+\t\t\t\tif (this.microsec_slider) {\n+\t\t\t\t\tthis.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\n+\t\t\t\t\tthis.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* when a slider moves, set the internal time...\n+\t\t* on time change is also called when the time is updated in the text field\n+\t\t*\u002F\n+\t\t_onTimeChange: function () {\n+\t\t\tif (!this._defaults.showTimepicker) {\n+                                return;\n+\t\t\t}\n+\t\t\tvar hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\n+\t\t\t\tminute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\n+\t\t\t\tsecond = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\n+\t\t\t\tmillisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\n+\t\t\t\tmicrosec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\n+\t\t\t\ttimezone = (this.timezone_select) ? this.timezone_select.val() : false,\n+\t\t\t\to = this._defaults,\n+\t\t\t\tpickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\n+\t\t\t\tpickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\n+\n+\t\t\tif (typeof(hour) === 'object') {\n+\t\t\t\thour = false;\n+\t\t\t}\n+\t\t\tif (typeof(minute) === 'object') {\n+\t\t\t\tminute = false;\n+\t\t\t}\n+\t\t\tif (typeof(second) === 'object') {\n+\t\t\t\tsecond = false;\n+\t\t\t}\n+\t\t\tif (typeof(millisec) === 'object') {\n+\t\t\t\tmillisec = false;\n+\t\t\t}\n+\t\t\tif (typeof(microsec) === 'object') {\n+\t\t\t\tmicrosec = false;\n+\t\t\t}\n+\t\t\tif (typeof(timezone) === 'object') {\n+\t\t\t\ttimezone = false;\n+\t\t\t}\n+\n+\t\t\tif (hour !== false) {\n+\t\t\t\thour = parseInt(hour, 10);\n+\t\t\t}\n+\t\t\tif (minute !== false) {\n+\t\t\t\tminute = parseInt(minute, 10);\n+\t\t\t}\n+\t\t\tif (second !== false) {\n+\t\t\t\tsecond = parseInt(second, 10);\n+\t\t\t}\n+\t\t\tif (millisec !== false) {\n+\t\t\t\tmillisec = parseInt(millisec, 10);\n+\t\t\t}\n+\t\t\tif (microsec !== false) {\n+\t\t\t\tmicrosec = parseInt(microsec, 10);\n+\t\t\t}\n+\t\t\tif (timezone !== false) {\n+\t\t\t\ttimezone = timezone.toString();\n+\t\t\t}\n+\n+\t\t\tvar ampm = o[hour \u003C 12 ? 'amNames' : 'pmNames'][0];\n+\n+\t\t\t\u002F\u002F If the update was done in the input field, the input field should not be updated.\n+\t\t\t\u002F\u002F If the update was done using the sliders, update the input field.\n+\t\t\tvar hasChanged = (\n+\t\t\t\t\t\thour !== parseInt(this.hour,10) || \u002F\u002F sliders should all be numeric\n+\t\t\t\t\t\tminute !== parseInt(this.minute,10) ||\n+\t\t\t\t\t\tsecond !== parseInt(this.second,10) ||\n+\t\t\t\t\t\tmillisec !== parseInt(this.millisec,10) ||\n+\t\t\t\t\t\tmicrosec !== parseInt(this.microsec,10) ||\n+\t\t\t\t\t\t(this.ampm.length > 0 && (hour \u003C 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\n+\t\t\t\t\t\t(this.timezone !== null && timezone !== this.timezone.toString()) \u002F\u002F could be numeric or \"EST\" format, so use toString()\n+\t\t\t\t\t);\n+\n+\t\t\tif (hasChanged) {\n+\n+\t\t\t\tif (hour !== false) {\n+\t\t\t\t\tthis.hour = hour;\n+\t\t\t\t}\n+\t\t\t\tif (minute !== false) {\n+\t\t\t\t\tthis.minute = minute;\n+\t\t\t\t}\n+\t\t\t\tif (second !== false) {\n+\t\t\t\t\tthis.second = second;\n+\t\t\t\t}\n+\t\t\t\tif (millisec !== false) {\n+\t\t\t\t\tthis.millisec = millisec;\n+\t\t\t\t}\n+\t\t\t\tif (microsec !== false) {\n+\t\t\t\t\tthis.microsec = microsec;\n+\t\t\t\t}\n+\t\t\t\tif (timezone !== false) {\n+\t\t\t\t\tthis.timezone = timezone;\n+\t\t\t\t}\n+\n+\t\t\t\tif (!this.inst) {\n+\t\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\n+\t\t\t\t}\n+\n+\t\t\t\tthis._limitMinMaxDateTime(this.inst, true);\n+\t\t\t}\n+\t\t\tif (this.support.ampm) {\n+\t\t\t\tthis.ampm = ampm;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Updates the time within the timepicker\n+\t\t\tthis.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\n+\t\t\tif (this.$timeObj) {\n+\t\t\t\tif (pickerTimeFormat === o.timeFormat) {\n+\t\t\t\t\tthis.$timeObj.val(this.formattedTime + pickerTimeSuffix);\n+\t\t\t\t}\n+\t\t\t\telse {\n+\t\t\t\t\tthis.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\n+\t\t\t\t}\n+\t\t\t\tif (this.$timeObj[0].setSelectionRange) {\n+\t\t\t\t\tvar sPos = this.$timeObj[0].selectionStart;\n+\t\t\t\t\tvar ePos = this.$timeObj[0].selectionEnd;\n+\t\t\t\t\tthis.$timeObj[0].setSelectionRange(sPos, ePos);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tthis.timeDefined = true;\n+\t\t\tif (hasChanged) {\n+\t\t\t\tthis._updateDateTime();\n+\t\t\t\t\u002F\u002Fthis.$input.focus(); \u002F\u002F may automatically open the picker on setDate\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* call custom onSelect.\n+\t\t* bind to sliders slidestop, and grid click.\n+\t\t*\u002F\n+\t\t_onSelectHandler: function () {\n+\t\t\tvar onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\n+\t\t\tvar inputEl = this.$input ? this.$input[0] : null;\n+\t\t\tif (onSelect && inputEl) {\n+\t\t\t\tonSelect.apply(inputEl, [this.formattedDateTime, this]);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* update our input with the new date time..\n+\t\t*\u002F\n+\t\t_updateDateTime: function (dp_inst) {\n+\t\t\tdp_inst = this.inst || dp_inst;\n+\t\t\tvar dtTmp = (dp_inst.currentYear > 0?\n+\t\t\t\t\t\t\tnew Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\n+\t\t\t\t\t\t\tnew Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n+\t\t\t\tdt = $.datepicker._daylightSavingAdjust(dtTmp),\n+\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n+\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\n+\t\t\t\tdateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\n+\t\t\t\tformatCfg = $.datepicker._getFormatConfig(dp_inst),\n+\t\t\t\ttimeAvailable = dt !== null && this.timeDefined;\n+\t\t\tthis.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\n+\t\t\tvar formattedDateTime = this.formattedDate;\n+\n+\t\t\t\u002F\u002F if a slider was changed but datepicker doesn't have a value yet, set it\n+\t\t\tif (dp_inst.lastVal === \"\") {\n+                dp_inst.currentYear = dp_inst.selectedYear;\n+                dp_inst.currentMonth = dp_inst.selectedMonth;\n+                dp_inst.currentDay = dp_inst.selectedDay;\n+            }\n+\n+\t\t\t\u002F*\n+\t\t\t* remove following lines to force every changes in date picker to change the input value\n+\t\t\t* Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\n+\t\t\t* If the user manually empty the value in the input field, the date picker will never change selected value.\n+\t\t\t*\u002F\n+\t\t\t\u002F\u002Fif (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\n+\t\t\t\u002F\u002F\treturn;\n+\t\t\t\u002F\u002F}\n+\n+\t\t\tif (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\n+\t\t\t\tformattedDateTime = this.formattedTime;\n+\t\t\t} else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\n+\t\t\t\tformattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\n+\t\t\t}\n+\n+\t\t\tthis.formattedDateTime = formattedDateTime;\n+\n+\t\t\tif (!this._defaults.showTimepicker) {\n+\t\t\t\tthis.$input.val(this.formattedDate);\n+\t\t\t} else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\n+\t\t\t\tthis.$altInput.val(this.formattedTime);\n+\t\t\t\tthis.$input.val(this.formattedDate);\n+\t\t\t} else if (this.$altInput) {\n+\t\t\t\tthis.$input.val(formattedDateTime);\n+\t\t\t\tvar altFormattedDateTime = '',\n+\t\t\t\t\taltSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\n+\t\t\t\t\taltTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\n+\n+\t\t\t\tif (!this._defaults.timeOnly) {\n+\t\t\t\t\tif (this._defaults.altFormat) {\n+\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\n+\t\t\t\t\t}\n+\t\t\t\t\telse {\n+\t\t\t\t\t\taltFormattedDateTime = this.formattedDate;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (altFormattedDateTime) {\n+\t\t\t\t\t\taltFormattedDateTime += altSeparator;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (this._defaults.altTimeFormat !== null) {\n+\t\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\n+\t\t\t\t}\n+\t\t\t\telse {\n+\t\t\t\t\taltFormattedDateTime += this.formattedTime + altTimeSuffix;\n+\t\t\t\t}\n+\t\t\t\tthis.$altInput.val(altFormattedDateTime);\n+\t\t\t} else {\n+\t\t\t\tthis.$input.val(formattedDateTime);\n+\t\t\t}\n+\n+\t\t\tthis.$input.trigger(\"change\");\n+\t\t},\n+\n+\t\t_onFocus: function () {\n+\t\t\tif (!this.$input.val() && this._defaults.defaultValue) {\n+\t\t\t\tthis.$input.val(this._defaults.defaultValue);\n+\t\t\t\tvar inst = $.datepicker._getInst(this.$input.get(0)),\n+\t\t\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\t\t\t\tif (tp_inst) {\n+\t\t\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n+\t\t\t\t\t\t} catch (err) {\n+\t\t\t\t\t\t\t$.timepicker.log(err);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Small abstraction to control types\n+\t\t* We can add more, just be sure to follow the pattern: create, options, value\n+\t\t*\u002F\n+\t\t_controls: {\n+\t\t\t\u002F\u002F slider methods\n+\t\t\tslider: {\n+\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\n+\t\t\t\t\tvar rtl = tp_inst._defaults.isRTL; \u002F\u002F if rtl go -60->0 instead of 0->60\n+\t\t\t\t\treturn obj.prop('slide', null).slider({\n+\t\t\t\t\t\torientation: \"horizontal\",\n+\t\t\t\t\t\tvalue: rtl ? val * -1 : val,\n+\t\t\t\t\t\tmin: rtl ? max * -1 : min,\n+\t\t\t\t\t\tmax: rtl ? min * -1 : max,\n+\t\t\t\t\t\tstep: step,\n+\t\t\t\t\t\tslide: function (event, ui) {\n+\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\n+\t\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tstop: function (event, ui) {\n+\t\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\n+\t\t\t\t\tif (tp_inst._defaults.isRTL) {\n+\t\t\t\t\t\tif (typeof(opts) === 'string') {\n+\t\t\t\t\t\t\tif (opts === 'min' || opts === 'max') {\n+\t\t\t\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\t\t\t\treturn obj.slider(opts, val * -1);\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\treturn Math.abs(obj.slider(opts));\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tvar min = opts.min,\n+\t\t\t\t\t\t\tmax = opts.max;\n+\t\t\t\t\t\topts.min = opts.max = null;\n+\t\t\t\t\t\tif (min !== undefined) {\n+\t\t\t\t\t\t\topts.max = min * -1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tif (max !== undefined) {\n+\t\t\t\t\t\t\topts.min = max * -1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t\t}\n+\t\t\t\t\tif (typeof(opts) === 'string' && val !== undefined) {\n+\t\t\t\t\t\treturn obj.slider(opts, val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t},\n+\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\n+\t\t\t\t\tif (tp_inst._defaults.isRTL) {\n+\t\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\t\treturn obj.slider('value', val * -1);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\treturn Math.abs(obj.slider('value'));\n+\t\t\t\t\t}\n+\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\treturn obj.slider('value', val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn obj.slider('value');\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\t\u002F\u002F select methods\n+\t\t\tselect: {\n+\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\n+\t\t\t\t\tvar sel = '\u003Cselect class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\n+\t\t\t\t\t\tformat = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\n+\n+\t\t\t\t\tfor (var i = min; i \u003C= max; i += step) {\n+\t\t\t\t\t\tsel += '\u003Coption value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\n+\t\t\t\t\t\tif (unit === 'hour') {\n+\t\t\t\t\t\t\tsel += $.datepicker.formatTime($.trim(format.replace(\u002F[^ht ]\u002Fig, '')), {hour: i}, tp_inst._defaults);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telse if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\n+\t\t\t\t\t\telse {sel += '0' + i.toString(); }\n+\t\t\t\t\t\tsel += '\u003C\u002Foption>';\n+\t\t\t\t\t}\n+\t\t\t\t\tsel += '\u003C\u002Fselect>';\n+\n+\t\t\t\t\tobj.children('select').remove();\n+\n+\t\t\t\t\t$(sel).appendTo(obj).change(function (e) {\n+\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\ttp_inst._afterInject();\n+\t\t\t\t\t});\n+\n+\t\t\t\t\treturn obj;\n+\t\t\t\t},\n+\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\n+\t\t\t\t\tvar o = {},\n+\t\t\t\t\t\t$t = obj.children('select');\n+\t\t\t\t\tif (typeof(opts) === 'string') {\n+\t\t\t\t\t\tif (val === undefined) {\n+\t\t\t\t\t\t\treturn $t.data(opts);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\to[opts] = val;\n+\t\t\t\t\t}\n+\t\t\t\t\telse { o = opts; }\n+\t\t\t\t\treturn tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\n+\t\t\t\t},\n+\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\n+\t\t\t\t\tvar $t = obj.children('select');\n+\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\treturn $t.val(val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn $t.val();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} \u002F\u002F end _controls\n+\n+\t});\n+\n+\t$.fn.extend({\n+\t\t\u002F*\n+\t\t* shorthand just to use timepicker.\n+\t\t*\u002F\n+\t\ttimepicker: function (o) {\n+\t\t\to = o || {};\n+\t\t\tvar tmp_args = Array.prototype.slice.call(arguments);\n+\n+\t\t\tif (typeof o === 'object') {\n+\t\t\t\ttmp_args[0] = $.extend(o, {\n+\t\t\t\t\ttimeOnly: true\n+\t\t\t\t});\n+\t\t\t}\n+\n+\t\t\treturn $(this).each(function () {\n+\t\t\t\t$.fn.datetimepicker.apply($(this), tmp_args);\n+\t\t\t});\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* extend timepicker to datepicker\n+\t\t*\u002F\n+\t\tdatetimepicker: function (o) {\n+\t\t\to = o || {};\n+\t\t\tvar tmp_args = arguments;\n+\n+\t\t\tif (typeof(o) === 'string') {\n+\t\t\t\tif (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\n+\t\t\t\t\treturn $.fn.datepicker.apply($(this[0]), tmp_args);\n+\t\t\t\t} else {\n+\t\t\t\t\treturn this.each(function () {\n+\t\t\t\t\t\tvar $t = $(this);\n+\t\t\t\t\t\t$t.datepicker.apply($t, tmp_args);\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn this.each(function () {\n+\t\t\t\t\tvar $t = $(this);\n+\t\t\t\t\t$t.datepicker($.timepicker._newInst($t, o)._defaults);\n+\t\t\t\t});\n+\t\t\t}\n+\t\t}\n+\t});\n+\n+\t\u002F*\n+\t* Public Utility to parse date and time\n+\t*\u002F\n+\t$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n+\t\tvar parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\n+\t\tif (parseRes.timeObj) {\n+\t\t\tvar t = parseRes.timeObj;\n+\t\t\tparseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\n+\t\t\tparseRes.date.setMicroseconds(t.microsec);\n+\t\t}\n+\n+\t\treturn parseRes.date;\n+\t};\n+\n+\t\u002F*\n+\t* Public utility to parse time\n+\t*\u002F\n+\t$.datepicker.parseTime = function (timeFormat, timeString, options) {\n+\t\tvar o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\n+\t\t\tiso8601 = (timeFormat.replace(\u002F\\'.*?\\'\u002Fg, '').indexOf('Z') !== -1);\n+\n+\t\t\u002F\u002F Strict parse requires the timeString to match the timeFormat exactly\n+\t\tvar strictParse = function (f, s, o) {\n+\n+\t\t\t\u002F\u002F pattern for standard and localized AM\u002FPM markers\n+\t\t\tvar getPatternAmpm = function (amNames, pmNames) {\n+\t\t\t\tvar markers = [];\n+\t\t\t\tif (amNames) {\n+\t\t\t\t\t$.merge(markers, amNames);\n+\t\t\t\t}\n+\t\t\t\tif (pmNames) {\n+\t\t\t\t\t$.merge(markers, pmNames);\n+\t\t\t\t}\n+\t\t\t\tmarkers = $.map(markers, function (val) {\n+\t\t\t\t\treturn val.replace(\u002F[.*+?|()\\[\\]{}\\\\]\u002Fg, '\\\\$&');\n+\t\t\t\t});\n+\t\t\t\treturn '(' + markers.join('|') + ')?';\n+\t\t\t};\n+\n+\t\t\t\u002F\u002F figure out position of time elements.. cause js cant do named captures\n+\t\t\tvar getFormatPositions = function (timeFormat) {\n+\t\t\t\tvar finds = timeFormat.toLowerCase().match(\u002F(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')\u002Fg),\n+\t\t\t\t\torders = {\n+\t\t\t\t\t\th: -1,\n+\t\t\t\t\t\tm: -1,\n+\t\t\t\t\t\ts: -1,\n+\t\t\t\t\t\tl: -1,\n+\t\t\t\t\t\tc: -1,\n+\t\t\t\t\t\tt: -1,\n+\t\t\t\t\t\tz: -1\n+\t\t\t\t\t};\n+\n+\t\t\t\tif (finds) {\n+\t\t\t\t\tfor (var i = 0; i \u003C finds.length; i++) {\n+\t\t\t\t\t\tif (orders[finds[i].toString().charAt(0)] === -1) {\n+\t\t\t\t\t\t\torders[finds[i].toString().charAt(0)] = i + 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\treturn orders;\n+\t\t\t};\n+\n+\t\t\tvar regstr = '^' + f.toString()\n+\t\t\t\t\t.replace(\u002F([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\n+\t\t\t\t\t\t\tvar ml = match.length;\n+\t\t\t\t\t\t\tswitch (match.charAt(0).toLowerCase()) {\n+\t\t\t\t\t\t\tcase 'h':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 'm':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 's':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 'l':\n+\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\n+\t\t\t\t\t\t\tcase 'c':\n+\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\n+\t\t\t\t\t\t\tcase 'z':\n+\t\t\t\t\t\t\t\treturn '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\n+\t\t\t\t\t\t\tcase 't':\n+\t\t\t\t\t\t\t\treturn getPatternAmpm(o.amNames, o.pmNames);\n+\t\t\t\t\t\t\tdefault:    \u002F\u002F literal escaped in quotes\n+\t\t\t\t\t\t\t\treturn '(' + match.replace(\u002F\\'\u002Fg, \"\").replace(\u002F(\\.|\\$|\\^|\\\\|\\\u002F|\\(|\\)|\\[|\\]|\\?|\\+|\\*)\u002Fg, function (m) { return \"\\\\\" + m; }) + ')?';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t})\n+\t\t\t\t\t.replace(\u002F\\s\u002Fg, '\\\\s?') +\n+\t\t\t\t\to.timeSuffix + '$',\n+\t\t\t\torder = getFormatPositions(f),\n+\t\t\t\tampm = '',\n+\t\t\t\ttreg;\n+\n+\t\t\ttreg = s.match(new RegExp(regstr, 'i'));\n+\n+\t\t\tvar resTime = {\n+\t\t\t\thour: 0,\n+\t\t\t\tminute: 0,\n+\t\t\t\tsecond: 0,\n+\t\t\t\tmillisec: 0,\n+\t\t\t\tmicrosec: 0\n+\t\t\t};\n+\n+\t\t\tif (treg) {\n+\t\t\t\tif (order.t !== -1) {\n+\t\t\t\t\tif (treg[order.t] === undefined || treg[order.t].length === 0) {\n+\t\t\t\t\t\tampm = '';\n+\t\t\t\t\t\tresTime.ampm = '';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\n+\t\t\t\t\t\tresTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (order.h !== -1) {\n+\t\t\t\t\tif (ampm === 'AM' && treg[order.h] === '12') {\n+\t\t\t\t\t\tresTime.hour = 0; \u002F\u002F 12am = 0 hour\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif (ampm === 'PM' && treg[order.h] !== '12') {\n+\t\t\t\t\t\t\tresTime.hour = parseInt(treg[order.h], 10) + 12; \u002F\u002F 12pm = 12 hour, any other pm = hour + 12\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tresTime.hour = Number(treg[order.h]);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (order.m !== -1) {\n+\t\t\t\t\tresTime.minute = Number(treg[order.m]);\n+\t\t\t\t}\n+\t\t\t\tif (order.s !== -1) {\n+\t\t\t\t\tresTime.second = Number(treg[order.s]);\n+\t\t\t\t}\n+\t\t\t\tif (order.l !== -1) {\n+\t\t\t\t\tresTime.millisec = Number(treg[order.l]);\n+\t\t\t\t}\n+\t\t\t\tif (order.c !== -1) {\n+\t\t\t\t\tresTime.microsec = Number(treg[order.c]);\n+\t\t\t\t}\n+\t\t\t\tif (order.z !== -1 && treg[order.z] !== undefined) {\n+\t\t\t\t\tresTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\n+\t\t\t\t}\n+\n+\n+\t\t\t\treturn resTime;\n+\t\t\t}\n+\t\t\treturn false;\n+\t\t};\u002F\u002F end strictParse\n+\n+\t\t\u002F\u002F First try JS Date, if that fails, use strictParse\n+\t\tvar looseParse = function (f, s, o) {\n+\t\t\ttry {\n+\t\t\t\tvar d = new Date('2012-01-01 ' + s);\n+\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\td = new Date('2012-01-01T' + s);\n+\t\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\t\td = new Date('01\u002F01\u002F2012 ' + s);\n+\t\t\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\t\t\tthrow \"Unable to parse time with native Date: \" + s;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn {\n+\t\t\t\t\thour: d.getHours(),\n+\t\t\t\t\tminute: d.getMinutes(),\n+\t\t\t\t\tsecond: d.getSeconds(),\n+\t\t\t\t\tmillisec: d.getMilliseconds(),\n+\t\t\t\t\tmicrosec: d.getMicroseconds(),\n+\t\t\t\t\ttimezone: d.getTimezoneOffset() * -1\n+\t\t\t\t};\n+\t\t\t}\n+\t\t\tcatch (err) {\n+\t\t\t\ttry {\n+\t\t\t\t\treturn strictParse(f, s, o);\n+\t\t\t\t}\n+\t\t\t\tcatch (err2) {\n+\t\t\t\t\t$.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn false;\n+\t\t}; \u002F\u002F end looseParse\n+\n+\t\tif (typeof o.parse === \"function\") {\n+\t\t\treturn o.parse(timeFormat, timeString, o);\n+\t\t}\n+\t\tif (o.parse === 'loose') {\n+\t\t\treturn looseParse(timeFormat, timeString, o);\n+\t\t}\n+\t\treturn strictParse(timeFormat, timeString, o);\n+\t};\n+\n+\t\u002F**\n+\t * Public utility to format the time\n+\t * @param {string} format format of the time\n+\t * @param {Object} time Object not a Date for timezones\n+\t * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\n+\t * @returns {string} the formatted time\n+\t *\u002F\n+\t$.datepicker.formatTime = function (format, time, options) {\n+\t\toptions = options || {};\n+\t\toptions = $.extend({}, $.timepicker._defaults, options);\n+\t\ttime = $.extend({\n+\t\t\thour: 0,\n+\t\t\tminute: 0,\n+\t\t\tsecond: 0,\n+\t\t\tmillisec: 0,\n+\t\t\tmicrosec: 0,\n+\t\t\ttimezone: null\n+\t\t}, time);\n+\n+\t\tvar tmptime = format,\n+\t\t\tampmName = options.amNames[0],\n+\t\t\thour = parseInt(time.hour, 10);\n+\n+\t\tif (hour > 11) {\n+\t\t\tampmName = options.pmNames[0];\n+\t\t}\n+\n+\t\ttmptime = tmptime.replace(\u002F(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\n+\t\t\tswitch (match) {\n+\t\t\tcase 'HH':\n+\t\t\t\treturn ('0' + hour).slice(-2);\n+\t\t\tcase 'H':\n+\t\t\t\treturn hour;\n+\t\t\tcase 'hh':\n+\t\t\t\treturn ('0' + convert24to12(hour)).slice(-2);\n+\t\t\tcase 'h':\n+\t\t\t\treturn convert24to12(hour);\n+\t\t\tcase 'mm':\n+\t\t\t\treturn ('0' + time.minute).slice(-2);\n+\t\t\tcase 'm':\n+\t\t\t\treturn time.minute;\n+\t\t\tcase 'ss':\n+\t\t\t\treturn ('0' + time.second).slice(-2);\n+\t\t\tcase 's':\n+\t\t\t\treturn time.second;\n+\t\t\tcase 'l':\n+\t\t\t\treturn ('00' + time.millisec).slice(-3);\n+\t\t\tcase 'c':\n+\t\t\t\treturn ('00' + time.microsec).slice(-3);\n+\t\t\tcase 'z':\n+\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\n+\t\t\tcase 'Z':\n+\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\n+\t\t\tcase 'T':\n+\t\t\t\treturn ampmName.charAt(0).toUpperCase();\n+\t\t\tcase 'TT':\n+\t\t\t\treturn ampmName.toUpperCase();\n+\t\t\tcase 't':\n+\t\t\t\treturn ampmName.charAt(0).toLowerCase();\n+\t\t\tcase 'tt':\n+\t\t\t\treturn ampmName.toLowerCase();\n+\t\t\tdefault:\n+\t\t\t\treturn match.replace(\u002F'\u002Fg, \"\");\n+\t\t\t}\n+\t\t});\n+\n+\t\treturn tmptime;\n+\t};\n+\n+\t\u002F*\n+\t* the bad hack :\u002F override datepicker so it doesn't close on select\n+\t\u002F\u002F inspired: http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F1252512\u002Fjquery-datepicker-prevent-closing-picker-when-clicking-a-date\u002F1762378#1762378\n+\t*\u002F\n+\t$.datepicker._base_selectDate = $.datepicker._selectDate;\n+\t$.datepicker._selectDate = function (id, dateStr) {\n+\t\tvar inst = this._getInst($(id)[0]),\n+\t\t\ttp_inst = this._get(inst, 'timepicker'),\n+\t\t\twas_inline;\n+\n+\t\tif (tp_inst && inst.settings.showTimepicker) {\n+\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\n+\t\t\twas_inline = inst.inline;\n+\t\t\tinst.inline = inst.stay_open = true;\n+\t\t\t\u002F\u002FThis way the onSelect handler called from calendarpicker get the full dateTime\n+\t\t\tthis._base_selectDate(id, dateStr);\n+\t\t\tinst.inline = was_inline;\n+\t\t\tinst.stay_open = false;\n+\t\t\tthis._notifyChange(inst);\n+\t\t\tthis._updateDatepicker(inst);\n+\t\t} else {\n+\t\t\tthis._base_selectDate(id, dateStr);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* second bad hack :\u002F override datepicker so it triggers an event when changing the input field\n+\t* and does not redraw the datepicker on every selectDate event\n+\t*\u002F\n+\t$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\n+\t$.datepicker._updateDatepicker = function (inst) {\n+\n+\t\t\u002F\u002F don't popup the datepicker if there is another instance already opened\n+\t\tvar input = inst.input[0];\n+\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\n+\n+\t\t\tthis._base_updateDatepicker(inst);\n+\n+\t\t\t\u002F\u002F Reload the time control when changing something in the input text field.\n+\t\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t\tif (tp_inst) {\n+\t\t\t\ttp_inst._addTimePicker(inst);\n+\t\t\t}\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* third bad hack :\u002F override datepicker so it allows spaces and colon in the input field\n+\t*\u002F\n+\t$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\n+\t$.datepicker._doKeyPress = function (event) {\n+\t\tvar inst = $.datepicker._getInst(event.target),\n+\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tif ($.datepicker._get(inst, 'constrainInput')) {\n+\t\t\t\tvar ampm = tp_inst.support.ampm,\n+\t\t\t\t\ttz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\n+\t\t\t\t\tdateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\n+\t\t\t\t\tdatetimeChars = tp_inst._defaults.timeFormat.toString()\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002F[hms]\u002Fg, '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTT\u002Fg, ampm ? 'APM' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTt\u002Fg, ampm ? 'AaPpMm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FtT\u002Fg, ampm ? 'AaPpMm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FT\u002Fg, ampm ? 'AP' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ftt\u002Fg, ampm ? 'apm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ft\u002Fg, ampm ? 'ap' : '') +\n+\t\t\t\t\t\t\t\t\t\t\t\" \" + tp_inst._defaults.separator +\n+\t\t\t\t\t\t\t\t\t\t\ttp_inst._defaults.timeSuffix +\n+\t\t\t\t\t\t\t\t\t\t\t(tz ? tp_inst._defaults.timezoneList.join('') : '') +\n+\t\t\t\t\t\t\t\t\t\t\t(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\n+\t\t\t\t\t\t\t\t\t\t\tdateChars,\n+\t\t\t\t\tchr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\n+\t\t\t\treturn event.ctrlKey || (chr \u003C ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $.datepicker._base_doKeyPress(event);\n+\t};\n+\n+\t\u002F*\n+\t* Fourth bad hack :\u002F override _updateAlternate function used in inline mode to init altField\n+\t* Update any alternate field to synchronise with the main field.\n+\t*\u002F\n+\t$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\n+\t$.datepicker._updateAlternate = function (inst) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar altField = tp_inst._defaults.altField;\n+\t\t\tif (altField) { \u002F\u002F update alternate field too\n+\t\t\t\tvar altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\n+\t\t\t\t\tdate = this._getDate(inst),\n+\t\t\t\t\tformatCfg = $.datepicker._getFormatConfig(inst),\n+\t\t\t\t\taltFormattedDateTime = '',\n+\t\t\t\t\taltSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\n+\t\t\t\t\taltTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\n+\t\t\t\t\taltTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\n+\n+\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\n+\t\t\t\tif (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\n+\t\t\t\t\tif (tp_inst._defaults.altFormat) {\n+\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\n+\t\t\t\t\t}\n+\t\t\t\t\telse {\n+\t\t\t\t\t\taltFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\n+\t\t\t}\n+\t\t}\n+\t\telse {\n+\t\t\t$.datepicker._base_updateAlternate(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Override key up event to sync manual input changes.\n+\t*\u002F\n+\t$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\n+\t$.datepicker._doKeyUp = function (event) {\n+\t\tvar inst = $.datepicker._getInst(event.target),\n+\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n+\t\t\t\ttry {\n+\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n+\t\t\t\t} catch (err) {\n+\t\t\t\t\t$.timepicker.log(err);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $.datepicker._base_doKeyUp(event);\n+\t};\n+\n+\t\u002F*\n+\t* override \"Today\" button to also grab the time and set it to input field.\n+\t*\u002F\n+\t$.datepicker._base_gotoToday = $.datepicker._gotoToday;\n+\t$.datepicker._gotoToday = function (id) {\n+\t\tvar inst = this._getInst($(id)[0]);\n+\t\tthis._base_gotoToday(id);\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (!tp_inst) {\n+\t\t  return;\n+\t\t}\n+\n+\t\tvar tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\n+\t\tvar now = new Date();\n+\t\tnow.setMinutes(now.getMinutes() + now.getTimezoneOffset() + parseInt(tzoffset, 10));\n+\t\tthis._setTime(inst, now);\n+\t\tthis._setDate(inst, now);\n+\t\ttp_inst._onSelectHandler();\n+\t};\n+\n+\t\u002F*\n+\t* Disable & enable the Time in the datetimepicker\n+\t*\u002F\n+\t$.datepicker._disableTimepickerDatepicker = function (target) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\n+\t\tif (tp_inst) {\n+\t\t\tinst.settings.showTimepicker = false;\n+\t\t\ttp_inst._defaults.showTimepicker = false;\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t$.datepicker._enableTimepickerDatepicker = function (target) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\n+\t\tif (tp_inst) {\n+\t\t\tinst.settings.showTimepicker = true;\n+\t\t\ttp_inst._defaults.showTimepicker = true;\n+\t\t\ttp_inst._addTimePicker(inst); \u002F\u002F Could be disabled on page load\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create our own set time function\n+\t*\u002F\n+\t$.datepicker._setTime = function (inst, date) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar defaults = tp_inst._defaults;\n+\n+\t\t\t\u002F\u002F calling _setTime with no date sets time to defaults\n+\t\t\ttp_inst.hour = date ? date.getHours() : defaults.hour;\n+\t\t\ttp_inst.minute = date ? date.getMinutes() : defaults.minute;\n+\t\t\ttp_inst.second = date ? date.getSeconds() : defaults.second;\n+\t\t\ttp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\n+\t\t\ttp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\n+\n+\t\t\t\u002F\u002Fcheck if within min\u002Fmax times..\n+\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\n+\n+\t\t\ttp_inst._onTimeChange();\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create new public method to set only time, callable as $().datepicker('setTime', date)\n+\t*\u002F\n+\t$.datepicker._setTimeDatepicker = function (target, date, withDate) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tthis._setDateFromField(inst);\n+\t\t\tvar tp_date;\n+\t\t\tif (date) {\n+\t\t\t\tif (typeof date === \"string\") {\n+\t\t\t\t\ttp_inst._parseTime(date, withDate);\n+\t\t\t\t\ttp_date = new Date();\n+\t\t\t\t\ttp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n+\t\t\t\t\ttp_date.setMicroseconds(tp_inst.microsec);\n+\t\t\t\t} else {\n+\t\t\t\t\ttp_date = new Date(date.getTime());\n+\t\t\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\n+\t\t\t\t}\n+\t\t\t\tif (tp_date.toString() === 'Invalid Date') {\n+\t\t\t\t\ttp_date = undefined;\n+\t\t\t\t}\n+\t\t\t\tthis._setTime(inst, tp_date);\n+\t\t\t}\n+\t\t}\n+\n+\t};\n+\n+\t\u002F*\n+\t* override setDate() to allow setting time too within Date object\n+\t*\u002F\n+\t$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\n+\t$.datepicker._setDateDatepicker = function (target, _date) {\n+\t\tvar inst = this._getInst(target);\n+\t\tvar date = _date;\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (typeof(_date) === 'string') {\n+\t\t\tdate = new Date(_date);\n+\t\t\tif (!date.getTime()) {\n+\t\t\t\tthis._base_setDateDatepicker.apply(this, arguments);\n+\t\t\t\tdate = $(target).datepicker('getDate');\n+\t\t\t}\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tvar tp_date;\n+\t\tif (date instanceof Date) {\n+\t\t\ttp_date = new Date(date.getTime());\n+\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\n+\t\t} else {\n+\t\t\ttp_date = date;\n+\t\t}\n+\n+\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\n+\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\n+\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\n+\t\t\u002F\u002F If a timezone is different in tp, keep the timezone as is\n+\t\tif (tp_inst && tp_date) {\n+\t\t\t\u002F\u002F look out for DST if tz wasn't specified\n+\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n+\t\t\t\ttp_inst.timezone = tp_date.getTimezoneOffset() * -1;\n+\t\t\t}\n+\t\t\tdate = $.timepicker.timezoneAdjust(date, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()), tp_inst.timezone);\n+\t\t\ttp_date = $.timepicker.timezoneAdjust(tp_date, $.timepicker.timezoneOffsetString(-tp_date.getTimezoneOffset()), tp_inst.timezone);\n+\t\t}\n+\n+\t\tthis._updateDatepicker(inst);\n+\t\tthis._base_setDateDatepicker.apply(this, arguments);\n+\t\tthis._setTimeDatepicker(target, tp_date, true);\n+\t};\n+\n+\t\u002F*\n+\t* override getDate() to allow getting time too within Date object\n+\t*\u002F\n+\t$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\n+\t$.datepicker._getDateDatepicker = function (target, noDefault) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\t\u002F\u002F if it hasn't yet been defined, grab from field\n+\t\t\tif (inst.lastVal === undefined) {\n+\t\t\t\tthis._setDateFromField(inst, noDefault);\n+\t\t\t}\n+\n+\t\t\tvar date = this._getDate(inst);\n+\n+\t\t\tvar currDT = null;\n+\n+\t\t\tif (tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) {\n+\t\t\t\tcurrDT = tp_inst.$input.val() + ' ' + tp_inst.$altInput.val();\n+\t\t\t}\n+\t\t\telse if (tp_inst.$input.get(0).tagName !== 'INPUT' && tp_inst.$altInput) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * in case the datetimepicker has been applied to a non-input tag for inline UI,\n+\t\t\t\t * and the user has not configured the plugin to display only time in altInput,\n+\t\t\t\t * pick current date time from the altInput (and hope for the best, for now, until \"ER1\" is applied)\n+\t\t\t\t *\n+\t\t\t\t * @todo ER1. Since altInput can have a totally difference format, convert it to standard format by reading input format from \"altFormat\" and \"altTimeFormat\" option values\n+\t\t\t\t *\u002F\n+\t\t\t\tcurrDT = tp_inst.$altInput.val();\n+\t\t\t}\n+\t\t\telse {\n+\t\t\t\tcurrDT = tp_inst.$input.val();\n+\t\t\t}\n+\n+\t\t\tif (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\n+\t\t\t\tdate.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n+\t\t\t\tdate.setMicroseconds(tp_inst.microsec);\n+\n+\t\t\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\n+\t\t\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\n+\t\t\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\n+\t\t\t\tif (tp_inst.timezone != null) {\n+\t\t\t\t\t\u002F\u002F look out for DST if tz wasn't specified\n+\t\t\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n+\t\t\t\t\t\ttp_inst.timezone = date.getTimezoneOffset() * -1;\n+\t\t\t\t\t}\n+\t\t\t\t\tdate = $.timepicker.timezoneAdjust(date, tp_inst.timezone, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()));\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn date;\n+\t\t}\n+\t\treturn this._base_getDateDatepicker(target, noDefault);\n+\t};\n+\n+\t\u002F*\n+\t* override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\n+\t* An option in datapicker to ignore extra format characters would be nicer.\n+\t*\u002F\n+\t$.datepicker._base_parseDate = $.datepicker.parseDate;\n+\t$.datepicker.parseDate = function (format, value, settings) {\n+\t\tvar date;\n+\t\ttry {\n+\t\t\tdate = this._base_parseDate(format, value, settings);\n+\t\t} catch (err) {\n+\t\t\t\u002F\u002F Hack!  The error message ends with a colon, a space, and\n+\t\t\t\u002F\u002F the \"extra\" characters.  We rely on that instead of\n+\t\t\t\u002F\u002F attempting to perfectly reproduce the parsing algorithm.\n+\t\t\tif (err.indexOf(\":\") >= 0) {\n+\t\t\t\tdate = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\n+\t\t\t\t$.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\n+\t\t\t} else {\n+\t\t\t\tthrow err;\n+\t\t\t}\n+\t\t}\n+\t\treturn date;\n+\t};\n+\n+\t\u002F*\n+\t* override formatDate to set date with time to the input\n+\t*\u002F\n+\t$.datepicker._base_formatDate = $.datepicker._formatDate;\n+\t$.datepicker._formatDate = function (inst, day, month, year) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t\treturn tp_inst.$input.val();\n+\t\t}\n+\t\treturn this._base_formatDate(inst);\n+\t};\n+\n+\t\u002F*\n+\t* override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\n+\t*\u002F\n+\t$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\n+\t$.datepicker._optionDatepicker = function (target, name, value) {\n+\t\tvar inst = this._getInst(target),\n+\t\t\tname_clone;\n+\t\tif (!inst) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar min = null,\n+\t\t\t\tmax = null,\n+\t\t\t\tonselect = null,\n+\t\t\t\toverrides = tp_inst._defaults.evnts,\n+\t\t\t\tfns = {},\n+\t\t\t\tprop,\n+\t\t\t\tret,\n+\t\t\t\toldVal,\n+\t\t\t\t$target;\n+\t\t\tif (typeof name === 'string') { \u002F\u002F if min\u002Fmax was set with the string\n+\t\t\t\tif (name === 'minDate' || name === 'minDateTime') {\n+\t\t\t\t\tmin = value;\n+\t\t\t\t} else if (name === 'maxDate' || name === 'maxDateTime') {\n+\t\t\t\t\tmax = value;\n+\t\t\t\t} else if (name === 'onSelect') {\n+\t\t\t\t\tonselect = value;\n+\t\t\t\t} else if (overrides.hasOwnProperty(name)) {\n+\t\t\t\t\tif (typeof (value) === 'undefined') {\n+\t\t\t\t\t\treturn overrides[name];\n+\t\t\t\t\t}\n+\t\t\t\t\tfns[name] = value;\n+\t\t\t\t\tname_clone = {}; \u002F\u002Fempty results in exiting function after overrides updated\n+\t\t\t\t}\n+\t\t\t} else if (typeof name === 'object') { \u002F\u002Fif min\u002Fmax was set with the JSON\n+\t\t\t\tif (name.minDate) {\n+\t\t\t\t\tmin = name.minDate;\n+\t\t\t\t} else if (name.minDateTime) {\n+\t\t\t\t\tmin = name.minDateTime;\n+\t\t\t\t} else if (name.maxDate) {\n+\t\t\t\t\tmax = name.maxDate;\n+\t\t\t\t} else if (name.maxDateTime) {\n+\t\t\t\t\tmax = name.maxDateTime;\n+\t\t\t\t}\n+\t\t\t\tfor (prop in overrides) {\n+\t\t\t\t\tif (overrides.hasOwnProperty(prop) && name[prop]) {\n+\t\t\t\t\t\tfns[prop] = name[prop];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tfor (prop in fns) {\n+\t\t\t\tif (fns.hasOwnProperty(prop)) {\n+\t\t\t\t\toverrides[prop] = fns[prop];\n+\t\t\t\t\tif (!name_clone) { name_clone = $.extend({}, name); }\n+\t\t\t\t\tdelete name_clone[prop];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tif (name_clone && isEmptyObject(name_clone)) { return; }\n+\t\t\tif (min) { \u002F\u002Fif min was set\n+\t\t\t\tif (min === 0) {\n+\t\t\t\t\tmin = new Date();\n+\t\t\t\t} else {\n+\t\t\t\t\tmin = new Date(min);\n+\t\t\t\t}\n+\t\t\t\ttp_inst._defaults.minDate = min;\n+\t\t\t\ttp_inst._defaults.minDateTime = min;\n+\t\t\t} else if (max) { \u002F\u002Fif max was set\n+\t\t\t\tif (max === 0) {\n+\t\t\t\t\tmax = new Date();\n+\t\t\t\t} else {\n+\t\t\t\t\tmax = new Date(max);\n+\t\t\t\t}\n+\t\t\t\ttp_inst._defaults.maxDate = max;\n+\t\t\t\ttp_inst._defaults.maxDateTime = max;\n+\t\t\t} else if (onselect) {\n+\t\t\t\ttp_inst._defaults.onSelect = onselect;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Datepicker will override our date when we call _base_optionDatepicker when\n+\t\t\t\u002F\u002F calling minDate\u002FmaxDate, so we will first grab the value, call\n+\t\t\t\u002F\u002F _base_optionDatepicker, then set our value back.\n+\t\t\tif(min || max){\n+\t\t\t\t$target = $(target);\n+\t\t\t\toldVal = $target.datetimepicker('getDate');\n+\t\t\t\tret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n+\t\t\t\t$target.datetimepicker('setDate', oldVal);\n+\t\t\t\treturn ret;\n+\t\t\t}\n+\t\t}\n+\t\tif (value === undefined) {\n+\t\t\treturn this._base_optionDatepicker.call($.datepicker, target, name);\n+\t\t}\n+\t\treturn this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n+\t};\n+\n+\t\u002F*\n+\t* jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\n+\t* it will return false for all objects\n+\t*\u002F\n+\tvar isEmptyObject = function (obj) {\n+\t\tvar prop;\n+\t\tfor (prop in obj) {\n+\t\t\tif (obj.hasOwnProperty(prop)) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\t\treturn true;\n+\t};\n+\n+\t\u002F*\n+\t* jQuery extend now ignores nulls!\n+\t*\u002F\n+\tvar extendRemove = function (target, props) {\n+\t\t$.extend(target, props);\n+\t\tfor (var name in props) {\n+\t\t\tif (props[name] === null || props[name] === undefined) {\n+\t\t\t\ttarget[name] = props[name];\n+\t\t\t}\n+\t\t}\n+\t\treturn target;\n+\t};\n+\n+\t\u002F*\n+\t* Determine by the time format which units are supported\n+\t* Returns an object of booleans for each unit\n+\t*\u002F\n+\tvar detectSupport = function (timeFormat) {\n+\t\tvar tf = timeFormat.replace(\u002F'.*?'\u002Fg, '').toLowerCase(), \u002F\u002F removes literals\n+\t\t\tisIn = function (f, t) { \u002F\u002F does the format contain the token?\n+\t\t\t\t\treturn f.indexOf(t) !== -1 ? true : false;\n+\t\t\t\t};\n+\t\treturn {\n+\t\t\t\thour: isIn(tf, 'h'),\n+\t\t\t\tminute: isIn(tf, 'm'),\n+\t\t\t\tsecond: isIn(tf, 's'),\n+\t\t\t\tmillisec: isIn(tf, 'l'),\n+\t\t\t\tmicrosec: isIn(tf, 'c'),\n+\t\t\t\ttimezone: isIn(tf, 'z'),\n+\t\t\t\tampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\n+\t\t\t\tiso8601: isIn(timeFormat, 'Z')\n+\t\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Converts 24 hour format into 12 hour\n+\t* Returns 12 hour without leading 0\n+\t*\u002F\n+\tvar convert24to12 = function (hour) {\n+\t\thour %= 12;\n+\n+\t\tif (hour === 0) {\n+\t\t\thour = 12;\n+\t\t}\n+\n+\t\treturn String(hour);\n+\t};\n+\n+\tvar computeEffectiveSetting = function (settings, property) {\n+\t\treturn settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\n+\t};\n+\n+\t\u002F*\n+\t* Splits datetime string into date and time substrings.\n+\t* Throws exception when date can't be parsed\n+\t* Returns {dateString: dateString, timeString: timeString}\n+\t*\u002F\n+\tvar splitDateTime = function (dateTimeString, timeSettings) {\n+\t\t\u002F\u002F The idea is to get the number separator occurrences in datetime and the time format requested (since time has\n+\t\t\u002F\u002F fewer unknowns, mostly numbers and am\u002Fpm). We will use the time pattern to split.\n+\t\tvar separator = computeEffectiveSetting(timeSettings, 'separator'),\n+\t\t\tformat = computeEffectiveSetting(timeSettings, 'timeFormat'),\n+\t\t\ttimeParts = format.split(separator), \u002F\u002F how many occurrences of separator may be in our format?\n+\t\t\ttimePartsLen = timeParts.length,\n+\t\t\tallParts = dateTimeString.split(separator),\n+\t\t\tallPartsLen = allParts.length;\n+\n+\t\tif (allPartsLen > 1) {\n+\t\t\treturn {\n+\t\t\t\tdateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\n+\t\t\t\ttimeString: allParts.splice(0, timePartsLen).join(separator)\n+\t\t\t};\n+\t\t}\n+\n+\t\treturn {\n+\t\t\tdateString: dateTimeString,\n+\t\t\ttimeString: ''\n+\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Internal function to parse datetime interval\n+\t* Returns: {date: Date, timeObj: Object}, where\n+\t*   date - parsed date without time (type Date)\n+\t*   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\n+\t*\u002F\n+\tvar parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n+\t\tvar date,\n+\t\t\tparts,\n+\t\t\tparsedTime;\n+\n+\t\tparts = splitDateTime(dateTimeString, timeSettings);\n+\t\tdate = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\n+\n+\t\tif (parts.timeString === '') {\n+\t\t\treturn {\n+\t\t\t\tdate: date\n+\t\t\t};\n+\t\t}\n+\n+\t\tparsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\n+\n+\t\tif (!parsedTime) {\n+\t\t\tthrow 'Wrong time format';\n+\t\t}\n+\n+\t\treturn {\n+\t\t\tdate: date,\n+\t\t\ttimeObj: parsedTime\n+\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Internal function to set timezone_select to the local timezone\n+\t*\u002F\n+\tvar selectLocalTimezone = function (tp_inst, date) {\n+\t\tif (tp_inst && tp_inst.timezone_select) {\n+\t\t\tvar now = date || new Date();\n+\t\t\ttp_inst.timezone_select.val(-now.getTimezoneOffset());\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create a Singleton Instance\n+\t*\u002F\n+\t$.timepicker = new Timepicker();\n+\n+\t\u002F**\n+\t * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\n+\t * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\n+\t * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\n+\t * @return {string}\n+\t *\u002F\n+\t$.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\n+\t\tif (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes \u003C -720) {\n+\t\t\treturn tzMinutes;\n+\t\t}\n+\n+\t\tvar off = tzMinutes,\n+\t\t\tminutes = off % 60,\n+\t\t\thours = (off - minutes) \u002F 60,\n+\t\t\tiso = iso8601 ? ':' : '',\n+\t\t\ttz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\n+\n+\t\tif (tz === '+00:00') {\n+\t\t\treturn 'Z';\n+\t\t}\n+\t\treturn tz;\n+\t};\n+\n+\t\u002F**\n+\t * Get the number in minutes that represents a timezone string\n+\t * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\n+\t * @return {number} the offset minutes or the original string if it doesn't match expectations\n+\t *\u002F\n+\t$.timepicker.timezoneOffsetNumber = function (tzString) {\n+\t\tvar normalized = tzString.toString().replace(':', ''); \u002F\u002F excuse any iso8601, end up with \"+1245\"\n+\n+\t\tif (normalized.toUpperCase() === 'Z') { \u002F\u002F if iso8601 with Z, its 0 minute offset\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\tif (!\u002F^(\\-|\\+)\\d{4}$\u002F.test(normalized)) { \u002F\u002F possibly a user defined tz, so just give it back\n+\t\t\treturn parseInt(tzString, 10);\n+\t\t}\n+\n+\t\treturn ((normalized.substr(0, 1) === '-' ? -1 : 1) * \u002F\u002F plus or minus\n+\t\t\t\t\t((parseInt(normalized.substr(1, 2), 10) * 60) + \u002F\u002F hours (converted to minutes)\n+\t\t\t\t\tparseInt(normalized.substr(3, 2), 10))); \u002F\u002F minutes\n+\t};\n+\n+\t\u002F**\n+\t * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\n+\t * @param  {Date} date\n+\t * @param  {string} fromTimezone formatted like \"+0500\", \"-1245\"\n+\t * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\n+\t * @return {Date}\n+\t *\u002F\n+\t$.timepicker.timezoneAdjust = function (date, fromTimezone, toTimezone) {\n+\t\tvar fromTz = $.timepicker.timezoneOffsetNumber(fromTimezone);\n+\t\tvar toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\n+\t\tif (!isNaN(toTz)) {\n+\t\t\tdate.setMinutes(date.getMinutes() + (-fromTz) - (-toTz));\n+\t\t}\n+\t\treturn date;\n+\t};\n+\n+\t\u002F**\n+\t * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * n.b. The input value must be correctly formatted (reformatting is not supported)\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the timepicker() call\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.timeRange = function (startTime, endTime, options) {\n+\t\treturn $.timepicker.handleRange('timepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @param  {string} method Can be used to specify the type of picker to be added\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.datetimeRange = function (startTime, endTime, options) {\n+\t\t$.timepicker.handleRange('datetimepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.dateRange = function (startTime, endTime, options) {\n+\t\t$.timepicker.handleRange('datepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `method` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {string} method Can be used to specify the type of picker to be added\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.handleRange = function (method, startTime, endTime, options) {\n+\t\toptions = $.extend({}, {\n+\t\t\tminInterval: 0, \u002F\u002F min allowed interval in milliseconds\n+\t\t\tmaxInterval: 0, \u002F\u002F max allowed interval in milliseconds\n+\t\t\tstart: {},      \u002F\u002F options for start picker\n+\t\t\tend: {}         \u002F\u002F options for end picker\n+\t\t}, options);\n+\n+\t\t\u002F\u002F for the mean time this fixes an issue with calling getDate with timepicker()\n+\t\tvar timeOnly = false;\n+\t\tif(method === 'timepicker'){\n+\t\t\ttimeOnly = true;\n+\t\t\tmethod = 'datetimepicker';\n+\t\t}\n+\n+\t\tfunction checkDates(changed, other) {\n+\t\t\tvar startdt = startTime[method]('getDate'),\n+\t\t\t\tenddt = endTime[method]('getDate'),\n+\t\t\t\tchangeddt = changed[method]('getDate');\n+\n+\t\t\tif (startdt !== null) {\n+\t\t\t\tvar minDate = new Date(startdt.getTime()),\n+\t\t\t\t\tmaxDate = new Date(startdt.getTime());\n+\n+\t\t\t\tminDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\n+\t\t\t\tmaxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\n+\n+\t\t\t\tif (options.minInterval > 0 && minDate > enddt) { \u002F\u002F minInterval check\n+\t\t\t\t\tendTime[method]('setDate', minDate);\n+\t\t\t\t}\n+\t\t\t\telse if (options.maxInterval > 0 && maxDate \u003C enddt) { \u002F\u002F max interval check\n+\t\t\t\t\tendTime[method]('setDate', maxDate);\n+\t\t\t\t}\n+\t\t\t\telse if (startdt > enddt) {\n+\t\t\t\t\tother[method]('setDate', changeddt);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tfunction selected(changed, other, option) {\n+\t\t\tif (!changed.val()) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tvar date = changed[method].call(changed, 'getDate');\n+\t\t\tif (date !== null && options.minInterval > 0) {\n+\t\t\t\tif (option === 'minDate') {\n+\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() + options.minInterval);\n+\t\t\t\t}\n+\t\t\t\tif (option === 'maxDate') {\n+\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() - options.minInterval);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (date.getTime) {\n+\t\t\t\tother[method].call(other, 'option', option, date);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$.fn[method].call(startTime, $.extend({\n+\t\t\ttimeOnly: timeOnly,\n+\t\t\tonClose: function (dateText, inst) {\n+\t\t\t\tcheckDates($(this), endTime);\n+\t\t\t},\n+\t\t\tonSelect: function (selectedDateTime) {\n+\t\t\t\tselected($(this), endTime, 'minDate');\n+\t\t\t}\n+\t\t}, options, options.start));\n+\t\t$.fn[method].call(endTime, $.extend({\n+\t\t\ttimeOnly: timeOnly,\n+\t\t\tonClose: function (dateText, inst) {\n+\t\t\t\tcheckDates($(this), startTime);\n+\t\t\t},\n+\t\t\tonSelect: function (selectedDateTime) {\n+\t\t\t\tselected($(this), startTime, 'maxDate');\n+\t\t\t}\n+\t\t}, options, options.end));\n+\n+\t\tcheckDates(startTime, endTime);\n+\n+\t\tselected(startTime, endTime, 'minDate');\n+\t\tselected(endTime, startTime, 'maxDate');\n+\n+\t\treturn $([startTime.get(0), endTime.get(0)]);\n+\t};\n+\n+\t\u002F**\n+\t * Log error or data to the console during error or debugging\n+\t * @param  {Object} err pass any type object to log to the console during error or debugging\n+\t * @return {void}\n+\t *\u002F\n+\t$.timepicker.log = function () {\n+\t\t\u002F\u002F Older IE (9, maybe 10) throw error on accessing `window.console.log.apply`, so check first.\n+\t\tif (window.console && window.console.log && window.console.log.apply) {\n+\t\t\twindow.console.log.apply(window.console, Array.prototype.slice.call(arguments));\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t * Add util object to allow access to private methods for testability.\n+\t *\u002F\n+\t$.timepicker._util = {\n+\t\t_extendRemove: extendRemove,\n+\t\t_isEmptyObject: isEmptyObject,\n+\t\t_convert24to12: convert24to12,\n+\t\t_detectSupport: detectSupport,\n+\t\t_selectLocalTimezone: selectLocalTimezone,\n+\t\t_computeEffectiveSetting: computeEffectiveSetting,\n+\t\t_splitDateTime: splitDateTime,\n+\t\t_parseDateTimeInternal: parseDateTimeInternal\n+\t};\n+\n+\t\u002F*\n+\t* Microsecond support\n+\t*\u002F\n+\tif (!Date.prototype.getMicroseconds) {\n+\t\tDate.prototype.microseconds = 0;\n+\t\tDate.prototype.getMicroseconds = function () { return this.microseconds; };\n+\t\tDate.prototype.setMicroseconds = function (m) {\n+\t\t\tthis.setMilliseconds(this.getMilliseconds() + Math.floor(m \u002F 1000));\n+\t\t\tthis.microseconds = m % 1000;\n+\t\t\treturn this;\n+\t\t};\n+\t}\n+\n+\t\u002F*\n+\t* Keep up with the version\n+\t*\u002F\n+\t$.timepicker.version = \"1.6.3\";\n+\n+}));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fselect2.full.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fselect2.full.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fselect2.full.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fjquery\u002Fselect2.full.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2 +1,2 @@\n-\u002F*! Select2 4.0.13 | https:\u002F\u002Fgithub.com\u002Fselect2\u002Fselect2\u002Fblob\u002Fmaster\u002FLICENSE.md *\u002F\r\n+\u002F*! Select2 4.0.13 | https:\u002F\u002Fgithub.com\u002Fselect2\u002Fselect2\u002Fblob\u002Fmaster\u002FLICENSE.md *\u002F\n !function(n){\"function\"==typeof define&&define.amd?define([\"jquery\"],n):\"object\"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split(\"\u002F\"),f=y.map,g=f&&f[\"*\"]||{};if(e){for(s=(e=e.split(\"\u002F\")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,\"\")),\".\"===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u\u003Ce.length;u++)if(\".\"===(p=e[u]))e.splice(u,1),u-=1;else if(\"..\"===p){if(0===u||1===u&&\"..\"===e[2]||\"..\"===e[u-1])continue;0\u003Cu&&(e.splice(u-1,2),u-=2)}e=e.join(\"\u002F\")}if((h||g)&&f){for(u=(n=e.split(\"\u002F\")).length;0\u003Cu;u-=1){if(i=n.slice(0,u).join(\"\u002F\"),h)for(d=h.length;0\u003Cd;d-=1)if(r=(r=f[h.slice(0,d).join(\"\u002F\")])&&r[i]){o=r,a=u;break}if(o)break;!l&&g&&g[i]&&(l=g[i],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join(\"\u002F\"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!b(m,e)&&!b(_,e))throw new Error(\"No \"+e);return m[e]}function u(e){var t,n=e?e.indexOf(\"!\"):-1;return-1\u003Cn&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?u(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},r=Object.prototype.hasOwnProperty,a=[].slice,w=\u002F\\.js$\u002F,f=function(e,t){var n,i=u(e),r=i[0],o=t[1];return e=i[1],r&&(n=D(r=c(r,o))),r?e=n&&n.normalize?n.normalize(e,function(t){return function(e){return c(e,t)}}(o)):c(e,o):(r=(i=u(e=c(e,o)))[0],e=i[1],r&&(n=D(r))),{f:r?r+\"!\"+e:e,n:e,pr:r,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:\"\",exports:m[e],config:function(e){return function(){return y&&y.config&&y.config[e]||{}}}(e)}}},o=function(e,t,n,i){var r,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(i=i||e),\"undefined\"==p||\"function\"==p){for(t=!t.length&&n.length?[\"require\",\"exports\",\"module\"]:t,l=0;l\u003Ct.length;l+=1)if(\"require\"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if(\"exports\"===o)d[l]=g.exports(e),u=!0;else if(\"module\"===o)r=d[l]=g.module(e);else if(b(m,o)||b(v,o)||b(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+\" missing \"+o);a.p.load(a.n,A(i,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(r&&r.exports!==h&&r.exports!==m[e]?m[e]=r.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,i,r){if(\"string\"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},\"function\"==typeof n&&(n=i,i=r),i?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(i=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),b(m,e)||b(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=i),e.define(\"almond\",function(){}),e.define(\"jquery\",[],function(){var e=d||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e}),e.define(\"select2\u002Futils\",[\"jquery\"],function(o){var r={};function u(e){var t=e.prototype,n=[];for(var i in t){\"function\"==typeof t[i]&&\"constructor\"!==i&&n.push(i)}return n}r.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},r.Decorate=function(i,r){var e=u(r),t=u(i);function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.length,n=i.prototype.constructor;0\u003Ct&&(e.call(arguments,i.prototype.constructor),n=r.prototype.constructor),n.apply(this,arguments)}r.displayName=i.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n\u003Ct.length;n++){var s=t[n];o.prototype[s]=i.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=r.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l\u003Ce.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,i=e.length;n\u003Ci;n++)e[n].apply(this,t)},r.Observable=e,r.generateChars=function(e){for(var t=\"\",n=0;n\u003Ce;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},r.bind=function(e,t){return function(){e.apply(t,arguments)}},r._convertData=function(e){for(var t in e){var n=t.split(\"-\"),i=e;if(1!==n.length){for(var r=0;r\u003Cn.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},r.hasScroll=function(e,t){var n=o(t),i=t.style.overflowX,r=t.style.overflowY;return(i!==r||\"hidden\"!==r&&\"visible\"!==r)&&(\"scroll\"===i||\"scroll\"===r||(n.innerHeight()\u003Ct.scrollHeight||n.innerWidth()\u003Ct.scrollWidth))},r.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"\u003C\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"\u002F\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(\u002F[&\u003C>\"'\\\u002F\\\\]\u002Fg,function(e){return t[e]})},r.appendMany=function(e,t){if(\"1.7\"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null==t&&(e.id?(t=e.id,e.setAttribute(\"data-select2-id\",t)):(e.setAttribute(\"data-select2-id\",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute(\"data-select2-id\")},r}),e.define(\"select2\u002Fresults\",[\"jquery\",\".\u002Futils\"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('\u003Cul class=\"select2-results__options\" role=\"listbox\">\u003C\u002Ful>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=h('\u003Cli role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\">\u003C\u002Fli>'),i=this.options.get(\"translations\").get(e.message);n.append(t(i(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n\u003Ce.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},i.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},i.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},i.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option[aria-selected]\"),t=e.filter(\"[aria-selected=true]\");0\u003Ct.length?t.first().trigger(\"mouseenter\"):e.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},i.prototype.setClasses=function(){var t=this;this.data.current(function(e){var i=h.map(e,function(e){return e.id.toString()});t.$results.find(\".select2-results__option[aria-selected]\").each(function(){var e=h(this),t=f.GetData(this,\"data\"),n=\"\"+t.id;null!=t.element&&t.element.selected||null==t.element&&-1\u003Ch.inArray(n,i)?e.attr(\"aria-selected\",\"true\"):e.attr(\"aria-selected\",\"false\")})})},i.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},n=this.option(t);n.className+=\" loading-results\",this.$results.prepend(n)},i.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},i.prototype.option=function(e){var t=document.createElement(\"li\");t.className=\"select2-results__option\";var n={role:\"option\",\"aria-selected\":\"false\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var r in(null!=e.element&&i.call(e.element,\":disabled\")||null==e.element&&e.disabled)&&(delete n[\"aria-selected\"],n[\"aria-disabled\"]=\"true\"),null==e.id&&delete n[\"aria-selected\"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role=\"group\",n[\"aria-label\"]=e.text,delete n[\"aria-selected\"]),n){var o=n[r];t.setAttribute(r,o)}if(e.children){var s=h(t),a=document.createElement(\"strong\");a.className=\"select2-results__group\";h(a);this.template(e,a);for(var l=[],c=0;c\u003Ce.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h(\"\u003Cul>\u003C\u002Ful>\",{class:\"select2-results__options select2-results__options--nested\"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,\"data\",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on(\"results:append\",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on(\"query\",function(e){l.hideMessages(),l.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"open\",function(){l.$results.attr(\"aria-expanded\",\"true\"),l.$results.attr(\"aria-hidden\",\"false\"),l.setClasses(),l.ensureHighlightVisible()}),t.on(\"close\",function(){l.$results.attr(\"aria-expanded\",\"false\"),l.$results.attr(\"aria-hidden\",\"true\"),l.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],\"data\");\"true\"==e.attr(\"aria-selected\")?l.trigger(\"close\",{}):l.trigger(\"select\",{data:t})}}),t.on(\"results:previous\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e);if(!(n\u003C=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger(\"mouseenter\");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o\u003C0&&l.$results.scrollTop(a)}}),t.on(\"results:next\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger(\"mouseenter\");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):r\u003Co&&l.$results.scrollTop(s)}}),t.on(\"results:focus\",function(e){e.element.addClass(\"select2-results__option--highlighted\")}),t.on(\"results:message\",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on(\"mousewheel\",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,i=0\u003Ce.deltaY&&t-e.deltaY\u003C=0,r=e.deltaY\u003C0&&n\u003C=l.$results.height();i?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):r&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",function(e){var t=h(this),n=f.GetData(this,\"data\");\"true\"!==t.attr(\"aria-selected\")?l.trigger(\"select\",{originalEvent:e,data:n}):l.options.get(\"multiple\")?l.trigger(\"unselect\",{originalEvent:e,data:n}):l.trigger(\"close\",{})}),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",function(e){var t=f.GetData(this,\"data\");l.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),l.trigger(\"results:focus\",{data:t,element:h(this)})})},i.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},i.prototype.destroy=function(){this.$results.remove()},i.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find(\"[aria-selected]\").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t\u003C=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o\u003C0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),i=this.options.get(\"escapeMarkup\"),r=n(e,t);null==r?t.style.display=\"none\":\"string\"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define(\"select2\u002Fkeys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define(\"select2\u002Fselection\u002Fbase\",[\"jquery\",\"..\u002Futils\",\"..\u002Fkeys\"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('\u003Cspan class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\">\u003C\u002Fspan>');return this._tabindex=0,null!=i.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=i.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===r.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",i),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&i.GetData(this,\"element\").select2(\"close\")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},o.prototype.position=function(e,t){t.find(\".selection\").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o}),e.define(\"select2\u002Fselection\u002Fsingle\",[\"jquery\",\".\u002Fbase\",\"..\u002Futils\",\"..\u002Fkeys\"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass(\"select2-selection--single\"),e.html('\u003Cspan class=\"select2-selection__rendered\">\u003C\u002Fspan>\u003Cspan class=\"select2-selection__arrow\" role=\"presentation\">\u003Cb role=\"presentation\">\u003C\u002Fb>\u003C\u002Fspan>'),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",i).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",i),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return e(\"\u003Cspan>\u003C\u002Fspan>\")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(\".select2-selection__rendered\"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr(\"title\",r):n.removeAttr(\"title\")}else this.clear()},r}),e.define(\"select2\u002Fselection\u002Fmultiple\",[\"jquery\",\".\u002Fbase\",\"..\u002Futils\"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass(\"select2-selection--multiple\"),e.html('\u003Cul class=\"select2-selection__rendered\">\u003C\u002Ful>'),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",function(e){i.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],\"data\");i.trigger(\"unselect\",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},n.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},n.prototype.selectionContainer=function(){return r('\u003Cli class=\"select2-selection__choice\">\u003Cspan class=\"select2-selection__choice__remove\" role=\"presentation\">&times;\u003C\u002Fspan>\u003C\u002Fli>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n],r=this.selectionContainer(),o=this.display(i,r);r.append(o);var s=i.title||i.text;s&&r.attr(\"title\",s),l.StoreData(r[0],\"data\",i),t.push(r)}var a=this.$selection.find(\".select2-selection__rendered\");l.appendMany(a,t)}},n}),e.define(\"select2\u002Fselection\u002Fplaceholder\",[\"..\u002Futils\"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1\u003Ct.length||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(i)},t}),e.define(\"select2\u002Fselection\u002FallowClear\",[\"jquery\",\"..\u002Fkeys\",\"..\u002Futils\"],function(r,i,a){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(e){i._handleClear(e)}),t.on(\"keypress\",function(e){i._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(\".select2-selection__clear\");if(0!==n.length){t.stopPropagation();var i=a.GetData(n[0],\"data\"),r=this.$element.val();this.$element.val(this.placeholder.id);var o={data:i};if(this.trigger(\"clear\",o),o.prevented)this.$element.val(r);else{for(var s=0;s\u003Ci.length;s++)if(o={data:i[s]},this.trigger(\"unselect\",o),o.prevented)return void this.$element.val(r);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=i.DELETE&&t.which!=i.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0\u003Cthis.$selection.find(\".select2-selection__placeholder\").length||0===t.length)){var n=this.options.get(\"translations\").get(\"removeAllItems\"),i=r('\u003Cspan class=\"select2-selection__clear\" title=\"'+n()+'\">&times;\u003C\u002Fspan>');a.StoreData(i[0],\"data\",t),this.$selection.find(\".select2-selection__rendered\").prepend(i)}},e}),e.define(\"select2\u002Fselection\u002Fsearch\",[\"jquery\",\"..\u002Futils\",\"..\u002Fkeys\"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('\u003Cli class=\"select2-search select2-search--inline\">\u003Cinput class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" \u002F>\u003C\u002Fli>');this.$searchContainer=t,this.$search=t.find(\"input\");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),t.on(\"open\",function(){i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\")}),t.on(\"close\",function(){i.$search.val(\"\"),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.trigger(\"focus\")}),t.on(\"enable\",function(){i.$search.prop(\"disabled\",!1),i._transferTabIndex()}),t.on(\"disable\",function(){i.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){i.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){i.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){i._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){if(e.stopPropagation(),i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&\"\"===i.$search.val()){var t=i.$searchContainer.prev(\".select2-selection__choice\");if(0\u003Ct.length){var n=a.GetData(t[0],\"data\");i.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){i.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o\u003C=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){s?i.$selection.off(\"input.search input.searchcheck\"):i.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){if(s&&\"input\"===e.type)i.$selection.off(\"input.search input.searchcheck\");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&i.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"\";\"\"!==this.$search.attr(\"placeholder\")?e=this.$selection.find(\".select2-selection__rendered\").width():e=.75*(this.$search.val().length+1)+\"em\";this.$search.css(\"width\",e)},e}),e.define(\"select2\u002Fselection\u002FeventRelay\",[\"jquery\"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var i=this,r=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],o=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){if(-1!==s.inArray(e,r)){t=t||{};var n=s.Event(\"select2:\"+e,{params:t});i.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define(\"select2\u002Ftranslation\",[\"jquery\",\"require\"],function(t,n){function i(e){this.dict=e||{}}return i.prototype.all=function(){return this.dict},i.prototype.get=function(e){return this.dict[e]},i.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},i._cache={},i.loadPath=function(e){if(!(e in i._cache)){var t=n(e);i._cache[e]=t}return new i(i._cache[e])},i}),e.define(\"select2\u002Fdiacritics\",[],function(){return{\"Ⓐ\":\"A\",\"Ａ\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"Ｂ\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"Ｃ\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"Ｄ\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"Ǳ\":\"DZ\",\"Ǆ\":\"DZ\",\"ǲ\":\"Dz\",\"ǅ\":\"Dz\",\"Ⓔ\":\"E\",\"Ｅ\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"Ｆ\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"Ｇ\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"Ｈ\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"Ｉ\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"Ｊ\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"Ｋ\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"Ｌ\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"Ǉ\":\"LJ\",\"ǈ\":\"Lj\",\"Ⓜ\":\"M\",\"Ｍ\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"Ｎ\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"Ǌ\":\"NJ\",\"ǋ\":\"Nj\",\"Ⓞ\":\"O\",\"Ｏ\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"Ｐ\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"Ｑ\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"Ｒ\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"Ｓ\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"Ｔ\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"Ｕ\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"Ｖ\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"Ｗ\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"Ｘ\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"Ｙ\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"Ｚ\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"ａ\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"ｂ\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"ｃ\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"ｄ\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"ǳ\":\"dz\",\"ǆ\":\"dz\",\"ⓔ\":\"e\",\"ｅ\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"ｆ\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"ｇ\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"ｈ\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"ｉ\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"ｊ\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"ｋ\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"ｌ\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"ǉ\":\"lj\",\"ⓜ\":\"m\",\"ｍ\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"ｎ\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ŉ\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"ǌ\":\"nj\",\"ⓞ\":\"o\",\"ｏ\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"ｐ\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"ｑ\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"ｒ\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"ｓ\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"ｔ\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"ｕ\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"ｖ\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"ｗ\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"ｘ\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"ｙ\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"ｚ\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"’\":\"'\"}}),e.define(\"select2\u002Fdata\u002Fbase\",[\"..\u002Futils\"],function(i){function n(e,t){n.__super__.constructor.call(this)}return i.Extend(n,i.Observable),n.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},n.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+\"-result-\";return n+=i.generateChars(4),null!=t.id?n+=\"-\"+t.id.toString():n+=\"-\"+i.generateChars(4),n},n}),e.define(\"select2\u002Fdata\u002Fselect\",[\".\u002Fbase\",\"..\u002Futils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],i=this;this.$element.find(\":selected\").each(function(){var e=l(this),t=i.item(e);n.push(t)}),e(n)},n.prototype.select=function(r){var o=this;if(r.selected=!0,l(r.element).is(\"option\"))return r.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current(function(e){var t=[];(r=[r]).push.apply(r,e);for(var n=0;n\u003Cr.length;n++){var i=r[n].id;-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")});else{var e=r.id;this.$element.val(e),this.$element.trigger(\"input\").trigger(\"change\")}},n.prototype.unselect=function(r){var o=this;if(this.$element.prop(\"multiple\")){if(r.selected=!1,l(r.element).is(\"option\"))return r.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(e){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n].id;i!==r.id&&-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on(\"select\",function(e){n.select(e.data)}),e.on(\"unselect\",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find(\"*\").each(function(){a.RemoveData(this)})},n.prototype.query=function(i,e){var r=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is(\"option\")||e.is(\"optgroup\")){var t=o.item(e),n=o.matches(i,t);null!==n&&r.push(n)}}),e({results:r})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement(\"optgroup\")).label=e.text:void 0!==(t=document.createElement(\"option\")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),i=this._normalizeItem(e);return i.element=t,a.StoreData(t,\"data\",i),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],\"data\")))return t;if(e.is(\"option\"))t={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(e.is(\"optgroup\")){t={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var n=e.children(\"option\"),i=[],r=0;r\u003Cn.length;r++){var o=l(n[r]),s=this.item(o);i.push(s)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],\"data\",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},n}),e.define(\"select2\u002Fdata\u002Farray\",[\".\u002Fselect\",\"..\u002Futils\",\"jquery\"],function(e,f,g){function i(e,t){this._dataToConvert=t.get(\"data\")||[],i.__super__.constructor.call(this,e,t)}return f.Extend(i,e),i.prototype.bind=function(e,t){i.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},i.prototype.select=function(n){var e=this.$element.find(\"option\").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),i.__super__.select.call(this,n)},i.prototype.convertToOptions=function(e){var t=this,n=this.$element.find(\"option\"),i=n.map(function(){return t.item(g(this)).id}).get(),r=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s\u003Ce.length;s++){var a=this._normalizeItem(e[s]);if(0\u003C=g.inArray(a.id,i)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}r.push(p)}}return r},i}),e.define(\"select2\u002Fdata\u002Fajax\",[\".\u002Farray\",\"..\u002Futils\",\"jquery\"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var i=o.ajax(e);return i.then(t),i.fail(n),i}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,i){var r=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:\"GET\"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n);r.options.get(\"debug\")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),i(t)},function(){\"status\"in e&&(0===e.status||\"0\"===e.status)||r.trigger(\"results:message\",{message:\"errorLoading\"})});r._request=e}\"function\"==typeof t.url&&(t.url=t.url.call(this.$element,n)),\"function\"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define(\"select2\u002Fdata\u002Ftags\",[\"jquery\"],function(u){function e(e,t,n){var i=n.get(\"tags\"),r=n.get(\"createTag\");void 0!==r&&(this.createTag=r);var o=n.get(\"insertTag\");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(i))for(var s=0;s\u003Ci.length;s++){var a=i[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var i=t.results,r=0;r\u003Ci.length;r++){var o=i[r],s=null!=o.children&&!e({results:o.children},!0);if((o.text||\"\").toUpperCase()===(c.term||\"\").toUpperCase()||s)return!n&&(t.data=i,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr(\"data-select2-tag\",!0),d.addOptions([l]),d.insertTag(i,a)}t.results=i,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return\"\"===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||u(this).remove()})},e}),e.define(\"select2\u002Fdata\u002Ftokenizer\",[\"jquery\"],function(d){function e(e,t,n){var i=n.get(\"tokenizer\");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||\"\";var r=this.tokenizer(t,this.options,function(e){var t=i._normalizeItem(e);if(!i.$element.find(\"option\").filter(function(){return d(this).val()===t.id}).length){var n=i.option(t);n.attr(\"data-select2-tag\",!0),i._removeOldTags(),i.addOptions([n])}!function(e){i.trigger(\"select\",{data:e})}(t)});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger(\"focus\")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,i){for(var r=n.get(\"tokenSeparators\")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s\u003Co.length;){var l=o[s];if(-1!==d.inArray(l,r)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(i(u),o=o.substr(s+1)||\"\",s=0):s++}else s++}return{term:o}},e}),e.define(\"select2\u002Fdata\u002FminimumInputLength\",[],function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length\u003Cthis.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2\u002Fdata\u002FmaximumInputLength\",[],function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",0\u003Cthis.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2\u002Fdata\u002FmaximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0\u003Ci.maximumSelectionLength&&t>=i.maximumSelectionLength?i.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define(\"select2\u002Fdropdown\",[\"jquery\",\".\u002Futils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('\u003Cspan class=\"select2-dropdown\">\u003Cspan class=\"select2-results\">\u003C\u002Fspan>\u003C\u002Fspan>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define(\"select2\u002Fdropdown\u002Fsearch\",[\"jquery\",\"..\u002Futils\"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('\u003Cspan class=\"select2-search select2-search--dropdown\">\u003Cinput class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" \u002F>\u003C\u002Fspan>');return this.$searchContainer=n,this.$search=n.find(\"input\"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){o(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){i.handleSearch(e)}),t.on(\"open\",function(){i.$search.attr(\"tabindex\",0),i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\"),window.setTimeout(function(){i.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){i.$search.attr(\"tabindex\",-1),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.val(\"\"),i.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||i.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass(\"select2-search--hide\"):i.$searchContainer.addClass(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define(\"select2\u002Fdropdown\u002FhidePlaceholder\",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0\u003C=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define(\"select2\u002Fdropdown\u002FinfiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"query\",function(e){i.lastParams=e,i.loading=!0}),t.on(\"query:append\",function(e){i.lastParams=e,i.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)\u003C=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('\u003Cli class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\">\u003C\u002Fli>'),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),e.define(\"select2\u002Fdropdown\u002FattachBody\",[\"jquery\",\"..\u002Futils\"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"open\",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on(\"close\",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t.removeClass(\"select2\"),t.addClass(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(\"\u003Cspan>\u003C\u002Fspan>\"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i=\"scroll.select2.\"+t.id,r=\"resize.select2.\"+t.id,o=\"orientationchange.select2.\"+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,\"select2-scroll-position\",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,\"select2-scroll-position\");f(this).scrollTop(t.y)}),f(window).on(i+\" \"+r+\" \"+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+\" \"+i+\" \"+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass(\"select2-dropdown--above\"),n=this.$dropdown.hasClass(\"select2-dropdown--below\"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a\u003Cr.top-s,u=l>r.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;\"static\"===p.css(\"position\")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i=\"below\"),u||!c||t?!c&&u&&t&&(i=\"below\"):i=\"above\",(\"above\"==i||t&&\"below\"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+i),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define(\"select2\u002Fdropdown\u002FminimumResultsForSearch\",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch\u003C0&&(this.minimumResultsForSearch=1\u002F0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i\u003Ct.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)\u003Cthis.minimumResultsForSearch)&&e.call(this,t)},e}),e.define(\"select2\u002Fdropdown\u002FselectOnClose\",[\"..\u002Futils\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"close\",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if(\"select\"===n._type||\"unselect\"===n._type)return}var i=this.getHighlightedResults();if(!(i.length\u003C1)){var r=o.GetData(i[0],\"data\");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger(\"select\",{data:r})}},e}),e.define(\"select2\u002Fdropdown\u002FcloseOnSelect\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(e){i._selectTriggered(e)}),t.on(\"unselect\",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e}),e.define(\"select2\u002Fi18n\u002Fen\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return 1!=t&&(n+=\"s\"),n},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define(\"select2\u002Fdefaults\",[\"jquery\",\"require\",\".\u002Fresults\",\".\u002Fselection\u002Fsingle\",\".\u002Fselection\u002Fmultiple\",\".\u002Fselection\u002Fplaceholder\",\".\u002Fselection\u002FallowClear\",\".\u002Fselection\u002Fsearch\",\".\u002Fselection\u002FeventRelay\",\".\u002Futils\",\".\u002Ftranslation\",\".\u002Fdiacritics\",\".\u002Fdata\u002Fselect\",\".\u002Fdata\u002Farray\",\".\u002Fdata\u002Fajax\",\".\u002Fdata\u002Ftags\",\".\u002Fdata\u002Ftokenizer\",\".\u002Fdata\u002FminimumInputLength\",\".\u002Fdata\u002FmaximumInputLength\",\".\u002Fdata\u002FmaximumSelectionLength\",\".\u002Fdropdown\",\".\u002Fdropdown\u002Fsearch\",\".\u002Fdropdown\u002FhidePlaceholder\",\".\u002Fdropdown\u002FinfiniteScroll\",\".\u002Fdropdown\u002FattachBody\",\".\u002Fdropdown\u002FminimumResultsForSearch\",\".\u002Fdropdown\u002FselectOnClose\",\".\u002Fdropdown\u002FcloseOnSelect\",\".\u002Fi18n\u002Fen\"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,w,$,b,A,x,D,S,C,E,O,T,q,j,L,I,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=$:null!=e.data?e.dataAdapter=w:e.dataAdapter=_,0\u003Ce.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0\u003Ce.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0\u003Ce.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,b)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+\"compat\u002Fquery\");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+\"compat\u002FinitSelection\");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,L))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=C;else{var i=y.Decorate(C,E);e.dropdownAdapter=i}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,I)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var r=u(e.amdBase+\"compat\u002FdropdownCss\");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,r)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+\"compat\u002FcontainerCss\");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push(\"en\");for(var s=[],a=0;a\u003Ce.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(\u002F[^\\u0000-\\u007E]\u002Fg,function(e){return t[e]||e})}this.defaults={amdBase:\".\u002F\",amdLanguageBase:\".\u002Fi18n\u002F\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(\"\"===c.trim(t.term))return n;if(n.children&&0\u003Cn.children.length){for(var i=c.extend(!0,{},n),r=n.children.length-1;0\u003C=r;r--)null==e(t,n.children[r])&&i.children.splice(r,1);return 0\u003Ci.children.length?i:e(t,i)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1\u003Co.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},n.prototype.applyFromElement=function(e,t){var n=e.language,i=this.defaults.language,r=t.prop(\"lang\"),o=t.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(r),this._resolveLanguage(n),this._resolveLanguage(i),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],i=0;i\u003Ct.length;i++)if(n.push(t[i]),\"string\"==typeof t[i]&&0\u003Ct[i].indexOf(\"-\")){var r=t[i].split(\"-\")[0];n.push(r)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,i=0;i\u003Ce.length;i++){var r=new s,o=e[i];if(\"string\"==typeof o)try{r=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,r=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+o+'\" could not be automatically loaded. A fallback will be used instead.')}}else r=c.isPlainObject(o)?new s(o):o;n.extend(r)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var i=y._convertData(n);c.extend(!0,this.defaults,i)},new n}),e.define(\"select2\u002Foptions\",[\"require\",\"jquery\",\".\u002Fdefaults\",\".\u002Futils\"],function(i,d,r,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=r.applyFromElement(this.options,t)),this.options=r.apply(this.options),t&&t.is(\"input\")){var n=i(this.get(\"amdBase\")+\"compat\u002FinputData\");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),p.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],\"data\",p.GetData(e[0],\"select2Tags\")),p.StoreData(e[0],\"tags\",!0)),p.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",p.GetData(e[0],\"ajaxUrl\")),p.StoreData(e[0],\"ajax-Url\",p.GetData(e[0],\"ajaxUrl\")));var n={};function i(e,t){return t.toUpperCase()}for(var r=0;r\u003Ce[0].attributes.length;r++){var o=e[0].attributes[r].name,s=\"data-\";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(\u002F-([a-z])\u002Fg,i)]=l}}d.fn.jquery&&\"1.\"==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1\u003Cd.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define(\"select2\u002Fcore\",[\"jquery\",\".\u002Foptions\",\".\u002Futils\",\".\u002Fkeys\"],function(o,c,u,i){var d=function(e,t){null!=u.GetData(e[0],\"select2\")&&u.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr(\"tabindex\")||0;u.StoreData(e[0],\"old-tabindex\",n),e.attr(\"tabindex\",\"-1\");var i=this.options.get(\"dataAdapter\");this.dataAdapter=new i(e,this.options);var r=this.render();this._placeContainer(r);var o=this.options.get(\"selectionAdapter\");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,r);var s=this.options.get(\"dropdownAdapter\");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,r);var a=this.options.get(\"resultsAdapter\");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger(\"selection:update\",{data:e})}),e.addClass(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),u.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+u.generateChars(2):u.generateChars(4)).replace(\u002F(:|\\.|\\[|\\]|,)\u002Fg,\"\")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},d.prototype._resolveWidth=function(e,t){var n=\u002F^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))\u002Fi;if(\"resolve\"==t){var i=this._resolveWidth(e,\"style\");return null!=i?i:this._resolveWidth(e,\"element\")}if(\"element\"==t){var r=e.outerWidth(!1);return r\u003C=0?\"auto\":r+\"px\"}if(\"style\"!=t)return\"computedstyle\"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr(\"style\");if(\"string\"!=typeof o)return null;for(var s=o.split(\";\"),a=0,l=s.length;a\u003Cl;a+=1){var c=s[a].replace(\u002F\\s\u002Fg,\"\").match(n);if(null!==c&&1\u003C=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",function(){t.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})}),this.$element.on(\"focus.select2\",function(e){t.trigger(\"focus\",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",t._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",t._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,i=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){n.toggleDropdown()}),this.selection.on(\"focus\",function(e){n.focus(e)}),this.selection.on(\"*\",function(e,t){-1===o.inArray(e,i)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on(\"open\",function(){n.$container.addClass(\"select2-container--open\")}),this.on(\"close\",function(){n.$container.removeClass(\"select2-container--open\")}),this.on(\"enable\",function(){n.$container.removeClass(\"select2-container--disabled\")}),this.on(\"disable\",function(){n.$container.addClass(\"select2-container--disabled\")}),this.on(\"blur\",function(){n.$container.removeClass(\"select2-container--focus\")}),this.on(\"query\",function(t){n.isOpen()||n.trigger(\"open\",{}),this.dataAdapter.query(t,function(e){n.trigger(\"results:all\",{data:e,query:t})})}),this.on(\"query:append\",function(t){this.dataAdapter.query(t,function(e){n.trigger(\"results:append\",{data:e,query:t})})}),this.on(\"keypress\",function(e){var t=e.which;n.isOpen()?t===i.ESC||t===i.TAB||t===i.UP&&e.altKey?(n.close(e),e.preventDefault()):t===i.ENTER?(n.trigger(\"results:select\",{}),e.preventDefault()):t===i.SPACE&&e.ctrlKey?(n.trigger(\"results:toggle\",{}),e.preventDefault()):t===i.UP?(n.trigger(\"results:previous\",{}),e.preventDefault()):t===i.DOWN&&(n.trigger(\"results:next\",{}),e.preventDefault()):(t===i.ENTER||t===i.SPACE||t===i.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,i=this;if(!e||!e.target||\"OPTION\"===e.target.nodeName||\"OPTGROUP\"===e.target.nodeName){if(t)if(t.addedNodes&&0\u003Ct.addedNodes.length)for(var r=0;r\u003Ct.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&0\u003Ct.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(i._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),i=this;n&&this.dataAdapter.current(function(e){i.trigger(\"selection:update\",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,i={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in i){var r=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,r,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get(\"disabled\")},d.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},d.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},d.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop(\"disabled\",t)},d.prototype.data=function(){this.options.get(\"debug\")&&0\u003Carguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger(\"input\").trigger(\"change\")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",u.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),u.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('\u003Cspan class=\"select2 select2-container\">\u003Cspan class=\"selection\">\u003C\u002Fspan>\u003Cspan class=\"dropdown-wrapper\" aria-hidden=\"true\">\u003C\u002Fspan>\u003C\u002Fspan>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),u.StoreData(e[0],\"element\",this.$element),e},d}),e.define(\"select2\u002Fcompat\u002Futils\",[\"jquery\"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr(\"class\")))&&s((i=\"\"+i).split(\u002F\\s+\u002F)).each(function(){0===this.indexOf(\"select2-\")&&o.push(this)}),(i=s.trim(t.attr(\"class\")))&&s((i=\"\"+i).split(\u002F\\s+\u002F)).each(function(){0!==this.indexOf(\"select2-\")&&null!=(r=n(this))&&o.push(r)}),e.attr(\"class\",o.join(\" \"))}}}),e.define(\"select2\u002Fcompat\u002FcontainerCss\",[\"jquery\",\".\u002Futils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"containerCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptContainerCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"containerCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2\u002Fcompat\u002FdropdownCss\",[\"jquery\",\".\u002Futils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"dropdownCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptDropdownCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"dropdownCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2\u002Fcompat\u002FinitSelection\",[\"jquery\"],function(i){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2\"),this.initSelection=n.get(\"initSelection\"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define(\"select2\u002Fcompat\u002FinputData\",[\"jquery\",\"..\u002Futils\"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get(\"valueSeparator\")||\",\",\"hidden\"===t.prop(\"type\")&&n.get(\"debug\")&&console&&console.warn&&console.warn(\"Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `\u003Cselect>` element instead.\"),e.call(this,t,n)}return e.prototype.current=function(e,t){function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.selected=!0,n.push(e)):e.selected=!1,e.children&&n.push.apply(n,i(e.children,t)),n}for(var n=[],r=0;r\u003Cthis._currentData.length;r++){var o=this._currentData[r];n.push.apply(n,i(o,this.$element.val().split(this._valueSeparator)))}t(n)},e.prototype.select=function(e,t){if(this.options.get(\"multiple\")){var n=this.$element.val();n+=this._valueSeparator+t.id,this.$element.val(n),this.$element.trigger(\"input\").trigger(\"change\")}else this.current(function(e){s.map(e,function(e){e.selected=!1})}),this.$element.val(t.id),this.$element.trigger(\"input\").trigger(\"change\")},e.prototype.unselect=function(e,r){var o=this;r.selected=!1,this.current(function(e){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n];r.id!=i.id&&t.push(i.id)}o.$element.val(t.join(o._valueSeparator)),o.$element.trigger(\"input\").trigger(\"change\")})},e.prototype.query=function(e,t,n){for(var i=[],r=0;r\u003Cthis._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},e.prototype.addOptions=function(e,t){var n=s.map(t,function(e){return i.GetData(e[0],\"data\")});this._currentData.push.apply(this._currentData,n)},e}),e.define(\"select2\u002Fcompat\u002Fmatcher\",[\"jquery\"],function(s){return function(o){return function(e,t){var n=s.extend(!0,{},t);if(null==e.term||\"\"===s.trim(e.term))return n;if(t.children){for(var i=t.children.length-1;0\u003C=i;i--){var r=t.children[i];o(e.term,r.text,r)||n.children.splice(i,1)}if(0\u003Cn.children.length)return n}return o(e.term,t.text,t)?n:null}}}),e.define(\"select2\u002Fcompat\u002Fquery\",[],function(){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2.\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get(\"query\").call(null,t)},e}),e.define(\"select2\u002Fdropdown\u002FattachContainer\",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(\".dropdown-wrapper\").append(t),t.addClass(\"select2-dropdown--below\"),n.addClass(\"select2-container--below\")},e}),e.define(\"select2\u002Fdropdown\u002FstopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),e.define(\"select2\u002Fselection\u002FstopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),l=function(p){var h,f,e=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],t=\"onwheel\"in document||9\u003C=document.documentMode?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],g=Array.prototype.slice;if(p.event.fixHooks)for(var n=e.length;n;)p.event.fixHooks[e[--n]]=p.event.mouseHooks;var m=p.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],i,!1);else this.onmousewheel=i;p.data(this,\"mousewheel-line-height\",m.getLineHeight(this)),p.data(this,\"mousewheel-page-height\",m.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],i,!1);else this.onmousewheel=null;p.removeData(this,\"mousewheel-line-height\"),p.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(e){var t=p(e),n=t[\"offsetParent\"in p.fn?\"offsetParent\":\"parent\"]();return n.length||(n=p(\"body\")),parseInt(n.css(\"fontSize\"),10)||parseInt(t.css(\"fontSize\"),10)||16},getPageHeight:function(e){return p(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,a=0,l=0;if((e=p.event.fix(n)).type=\"mousewheel\",\"detail\"in n&&(s=-1*n.detail),\"wheelDelta\"in n&&(s=n.wheelDelta),\"wheelDeltaY\"in n&&(s=n.wheelDeltaY),\"wheelDeltaX\"in n&&(o=-1*n.wheelDeltaX),\"axis\"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*s,s=0),r=0===s?o:s,\"deltaY\"in n&&(r=s=-1*n.deltaY),\"deltaX\"in n&&(o=n.deltaX,0===s&&(r=-1*o)),0!==s||0!==o){if(1===n.deltaMode){var c=p.data(this,\"mousewheel-line-height\");r*=c,s*=c,o*=c}else if(2===n.deltaMode){var u=p.data(this,\"mousewheel-page-height\");r*=u,s*=u,o*=u}if(t=Math.max(Math.abs(s),Math.abs(o)),(!f||t\u003Cf)&&y(n,f=t)&&(f\u002F=40),y(n,t)&&(r\u002F=40,o\u002F=40,s\u002F=40),r=Math[1\u003C=r?\"floor\":\"ceil\"](r\u002Ff),o=Math[1\u003C=o?\"floor\":\"ceil\"](o\u002Ff),s=Math[1\u003C=s?\"floor\":\"ceil\"](s\u002Ff),m.settings.normalizeOffset&&this.getBoundingClientRect){var d=this.getBoundingClientRect();a=e.clientX-d.left,l=e.clientY-d.top}return e.deltaX=o,e.deltaY=s,e.deltaFactor=f,e.offsetX=a,e.offsetY=l,e.deltaMode=0,i.unshift(e,r,o,s),h&&clearTimeout(h),h=setTimeout(v,200),(p.event.dispatch||p.event.handle).apply(this,i)}}function v(){f=null}function y(e,t){return m.settings.adjustOldDeltas&&\"mousewheel\"===e.type&&t%120==0}p.fn.extend({mousewheel:function(e){return e?this.bind(\"mousewheel\",e):this.trigger(\"mousewheel\")},unmousewheel:function(e){return this.unbind(\"mousewheel\",e)}})},\"function\"==typeof e.define&&e.define.amd?e.define(\"jquery-mousewheel\",[\"jquery\"],l):\"object\"==typeof exports?module.exports=l:l(d),e.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\".\u002Fselect2\u002Fcore\",\".\u002Fselect2\u002Fdefaults\",\".\u002Fselect2\u002Futils\"],function(r,e,o,t,s){if(null==r.fn.select2){var a=[\"open\",\"close\",\"destroy\"];r.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new o(r(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,i)}),-1\u003Cr.inArray(t,a)?this:n}}return null==r.fn.select2.defaults&&(r.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require(\"jquery.select2\");return d.fn.select2.amd=e,t});\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fplugins.all.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fplugins.all.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fplugins.all.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fplugins.all.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,359 +1,359 @@\n-if (!Object.prototype.watchChange) {\r\n-    var isFunction = function (fn) {\r\n-        return fn && {}.toString.call(fn) === '[object Function]';\r\n-    };\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'watchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop, handler) {\r\n-                var obj = this;\r\n-\r\n-                function x(prop, handler) {\r\n-                    var oldval = obj[prop],\r\n-                        newval = oldval,\r\n-                        getter = function () {\r\n-                            return newval;\r\n-                        },\r\n-                        setter = function (val) {\r\n-                            return newval = handler.call(obj, prop, oldval, val);\r\n-                        };\r\n-\r\n-                    if (delete obj[prop]) {\r\n-                        Object.defineProperty(\r\n-                            obj,\r\n-                            prop,\r\n-                            {\r\n-                                get: getter,\r\n-                                set: setter,\r\n-                                enumerable: true,\r\n-                                configurable: true\r\n-                            }\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                if (isFunction(prop)) {\r\n-                    for (var k in this) {\r\n-                        new x(k, prop);\r\n-                    }\r\n-                } else {\r\n-                    new x(prop, handler)\r\n-                }\r\n-            }\r\n-        });\r\n-}\r\n-\r\n-if (!Object.prototype.unwatchChange) {\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'unwatchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop) {\r\n-                var val = this[prop];\r\n-                delete this[prop];\r\n-                this[prop] = val;\r\n-            }\r\n-        }\r\n-    );\r\n-}\r\n-\u002F*!\r\n- * jQuery.scrollTo\r\n- * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\r\n- * Licensed under MIT\r\n- * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\r\n- * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\r\n- * @author Ariel Flesler\r\n- * @version 2.1.2\r\n- *\u002F\r\n-;(function(factory) {\r\n-    'use strict';\r\n-    if (typeof define === 'function' && define.amd) {\r\n-        \u002F\u002F AMD\r\n-        define(['jquery'], factory);\r\n-    } else if (typeof module !== 'undefined' && module.exports) {\r\n-        \u002F\u002F CommonJS\r\n-        module.exports = factory(require('jquery'));\r\n-    } else {\r\n-        \u002F\u002F Global\r\n-        factory(jQuery);\r\n-    }\r\n-})(function($) {\r\n-    'use strict';\r\n-\r\n-    var $scrollTo = $.scrollTo = function(target, duration, settings) {\r\n-        return $(window).scrollTo(target, duration, settings);\r\n-    };\r\n-\r\n-    $scrollTo.defaults = {\r\n-        axis:'xy',\r\n-        duration: 0,\r\n-        limit:true\r\n-    };\r\n-\r\n-    function isWin(elem) {\r\n-        return !elem.nodeName ||\r\n-            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\r\n-    }\r\n-\r\n-    $.fn.scrollTo = function(target, duration, settings) {\r\n-        if (typeof duration === 'object') {\r\n-            settings = duration;\r\n-            duration = 0;\r\n-        }\r\n-        if (typeof settings === 'function') {\r\n-            settings = { onAfter:settings };\r\n-        }\r\n-        if (target === 'max') {\r\n-            target = 9e9;\r\n-        }\r\n-\r\n-        settings = $.extend({}, $scrollTo.defaults, settings);\r\n-        \u002F\u002F Speed is still recognized for backwards compatibility\r\n-        duration = duration || settings.duration;\r\n-        \u002F\u002F Make sure the settings are given right\r\n-        var queue = settings.queue && settings.axis.length > 1;\r\n-        if (queue) {\r\n-            \u002F\u002F Let's keep the overall duration\r\n-            duration \u002F= 2;\r\n-        }\r\n-        settings.offset = both(settings.offset);\r\n-        settings.over = both(settings.over);\r\n-\r\n-        return this.each(function() {\r\n-            \u002F\u002F Null target yields nothing, just like jQuery does\r\n-            if (target === null) return;\r\n-\r\n-            var win = isWin(this),\r\n-                elem = win ? this.contentWindow || window : this,\r\n-                $elem = $(elem),\r\n-                targ = target,\r\n-                attr = {},\r\n-                toff;\r\n-\r\n-            switch (typeof targ) {\r\n-                \u002F\u002F A number will pass the regex\r\n-                case 'number':\r\n-                case 'string':\r\n-                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\r\n-                        targ = both(targ);\r\n-                        \u002F\u002F We are done\r\n-                        break;\r\n-                    }\r\n-                    \u002F\u002F Relative\u002FAbsolute selector\r\n-                    targ = win ? $(targ) : $(targ, elem);\r\n-                \u002F* falls through *\u002F\r\n-                case 'object':\r\n-                    if (targ.length === 0) return;\r\n-                    \u002F\u002F DOMElement \u002F jQuery\r\n-                    if (targ.is || targ.style) {\r\n-                        \u002F\u002F Get the real position of the target\r\n-                        toff = (targ = $(targ)).offset();\r\n-                    }\r\n-            }\r\n-\r\n-            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\r\n-\r\n-            $.each(settings.axis.split(''), function(i, axis) {\r\n-                var Pos\t= axis === 'x' ? 'Left' : 'Top',\r\n-                    pos = Pos.toLowerCase(),\r\n-                    key = 'scroll' + Pos,\r\n-                    prev = $elem[key](),\r\n-                    max = $scrollTo.max(elem, axis);\r\n-\r\n-                if (toff) {\u002F\u002F jQuery \u002F DOMElement\r\n-                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\r\n-\r\n-                    \u002F\u002F If it's a dom element, reduce the margin\r\n-                    if (settings.margin) {\r\n-                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\r\n-                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\r\n-                    }\r\n-\r\n-                    attr[key] += offset[pos] || 0;\r\n-\r\n-                    if (settings.over[pos]) {\r\n-                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\r\n-                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\r\n-                    }\r\n-                } else {\r\n-                    var val = targ[pos];\r\n-                    \u002F\u002F Handle percentage values\r\n-                    attr[key] = val.slice && val.slice(-1) === '%' ?\r\n-                        parseFloat(val) \u002F 100 * max\r\n-                        : val;\r\n-                }\r\n-\r\n-                \u002F\u002F Number or 'number'\r\n-                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\r\n-                    \u002F\u002F Check the limits\r\n-                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\r\n-                }\r\n-\r\n-                \u002F\u002F Don't waste time animating, if there's no need.\r\n-                if (!i && settings.axis.length > 1) {\r\n-                    if (prev === attr[key]) {\r\n-                        \u002F\u002F No animation needed\r\n-                        attr = {};\r\n-                    } else if (queue) {\r\n-                        \u002F\u002F Intermediate animation\r\n-                        animate(settings.onAfterFirst);\r\n-                        \u002F\u002F Don't animate this axis again in the next iteration.\r\n-                        attr = {};\r\n-                    }\r\n-                }\r\n-            });\r\n-\r\n-            animate(settings.onAfter);\r\n-\r\n-            function animate(callback) {\r\n-                var opts = $.extend({}, settings, {\r\n-                    \u002F\u002F The queue setting conflicts with animate()\r\n-                    \u002F\u002F Force it to always be true\r\n-                    queue: true,\r\n-                    duration: duration,\r\n-                    complete: callback && function() {\r\n-                        callback.call(elem, targ, settings);\r\n-                    }\r\n-                });\r\n-                $elem.animate(attr, opts);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Max scrolling position, works on quirks mode\r\n-    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\r\n-    $scrollTo.max = function(elem, axis) {\r\n-        var Dim = axis === 'x' ? 'Width' : 'Height',\r\n-            scroll = 'scroll'+Dim;\r\n-\r\n-        if (!isWin(elem))\r\n-            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\r\n-\r\n-        var size = 'client' + Dim,\r\n-            doc = elem.ownerDocument || elem.document,\r\n-            html = doc.documentElement,\r\n-            body = doc.body;\r\n-\r\n-        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\r\n-    };\r\n-\r\n-    function both(val) {\r\n-        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\r\n-    }\r\n-\r\n-    \u002F\u002F Add special hooks so that window scroll properties can be animated\r\n-    $.Tween.propHooks.scrollLeft =\r\n-        $.Tween.propHooks.scrollTop = {\r\n-            get: function(t) {\r\n-                return $(t.elem)[t.prop]();\r\n-            },\r\n-            set: function(t) {\r\n-                var curr = this.get(t);\r\n-                \u002F\u002F If interrupt is true and user scrolled, stop animating\r\n-                if (t.options.interrupt && t._last && t._last !== curr) {\r\n-                    return $(t.elem).stop();\r\n-                }\r\n-                var next = Math.round(t.now);\r\n-                \u002F\u002F Don't waste CPU\r\n-                \u002F\u002F Browsers don't render floating point scroll\r\n-                if (curr !== next) {\r\n-                    $(t.elem)[t.prop](next);\r\n-                    t._last = this.get(t);\r\n-                }\r\n-            }\r\n-        };\r\n-\r\n-    \u002F\u002F AMD requirement\r\n-    return $scrollTo;\r\n-});\r\n-(function (e) {\r\n-\te.backward_timer = function (t) {\r\n-\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\r\n-\t\t}, on_tick      : function (e) {\r\n-\t\t}}, r = this;\r\n-\t\tr.seconds_left = 0;\r\n-\t\tr.target = e(t);\r\n-\t\tr.timeout = undefined;\r\n-\t\tr.settings = {};\r\n-\t\tr.methods = {init     : function (t) {\r\n-\t\t\tr.settings = e.extend({}, n, t);\r\n-\t\t\tif (r.settings.value_setter == undefined) {\r\n-\t\t\t\tif (r.target.is(\"input\")) {\r\n-\t\t\t\t\tr.settings.value_setter = \"val\"\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tr.settings.value_setter = \"text\"\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tr.methods.reset()\r\n-\t\t}, start              : function () {\r\n-\t\t\tif (r.timeout == undefined) {\r\n-\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\r\n-\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\r\n-\t\t\t}\r\n-\t\t}, cancel             : function () {\r\n-\t\t\tif (r.timeout != undefined) {\r\n-\t\t\t\tclearTimeout(r.timeout);\r\n-\t\t\t\tr.timeout = undefined\r\n-\t\t\t}\r\n-\t\t}, reset              : function () {\r\n-\t\t\tr.seconds_left = r.settings.seconds;\r\n-\t\t\tr.methods._render_seconds()\r\n-\t\t}, _on_tick           : function (e) {\r\n-\t\t\tif (e != 0) {\r\n-\t\t\t\tr.settings.on_tick(r)\r\n-\t\t\t}\r\n-\t\t\tr.methods._render_seconds();\r\n-\t\t\tif (r.seconds_left > 0) {\r\n-\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\r\n-\t\t\t\t\tvar t = r.seconds_left\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tvar t = r.settings.step\r\n-\t\t\t\t}\r\n-\t\t\t\tr.seconds_left -= t;\r\n-\t\t\t\tvar n = t * 1e3;\r\n-\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\r\n-\t\t\t} else {\r\n-\t\t\t\tr.timeout = undefined;\r\n-\t\t\t\tr.settings.on_exhausted(r)\r\n-\t\t\t}\r\n-\t\t}, _render_seconds    : function () {\r\n-\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\r\n-\t\t\tif (t.indexOf(\"d%\") !== -1) {\r\n-\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\r\n-\t\t\t} else {\r\n-\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\r\n-\t\t\t}\r\n-\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\r\n-\t\t\tr.target[r.settings.value_setter](t)\r\n-\t\t}, _seconds_to_dhms   : function (e) {\r\n-\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\r\n-\t\t\treturn{d: t, h: n, m: r, s: i}\r\n-\t\t}, _check_leading_zero: function (e) {\r\n-\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\r\n-\t\t}}\r\n-\t};\r\n-\te.fn.backward_timer = function (t) {\r\n-\t\tvar n = arguments;\r\n-\t\treturn this.each(function () {\r\n-\t\t\tvar r = e(this).data(\"backward_timer\");\r\n-\t\t\tif (r == undefined) {\r\n-\t\t\t\tr = new e.backward_timer(this);\r\n-\t\t\t\te(this).data(\"backward_timer\", r)\r\n-\t\t\t}\r\n-\t\t\tif (r.methods[t]) {\r\n-\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\r\n-\t\t\t} else if (typeof t === \"object\" || !t) {\r\n-\t\t\t\treturn r.methods.init.apply(this, n)\r\n-\t\t\t} else {\r\n-\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\r\n-\t\t\t}\r\n-\t\t})\r\n-\t}\r\n-})(jQuery);\r\n+if (!Object.prototype.watchChange) {\n+    var isFunction = function (fn) {\n+        return fn && {}.toString.call(fn) === '[object Function]';\n+    };\n+    Object.defineProperty(\n+        Object.prototype,\n+        'watchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop, handler) {\n+                var obj = this;\n+\n+                function x(prop, handler) {\n+                    var oldval = obj[prop],\n+                        newval = oldval,\n+                        getter = function () {\n+                            return newval;\n+                        },\n+                        setter = function (val) {\n+                            return newval = handler.call(obj, prop, oldval, val);\n+                        };\n+\n+                    if (delete obj[prop]) {\n+                        Object.defineProperty(\n+                            obj,\n+                            prop,\n+                            {\n+                                get: getter,\n+                                set: setter,\n+                                enumerable: true,\n+                                configurable: true\n+                            }\n+                        );\n+                    }\n+                }\n+\n+                if (isFunction(prop)) {\n+                    for (var k in this) {\n+                        new x(k, prop);\n+                    }\n+                } else {\n+                    new x(prop, handler)\n+                }\n+            }\n+        });\n+}\n+\n+if (!Object.prototype.unwatchChange) {\n+    Object.defineProperty(\n+        Object.prototype,\n+        'unwatchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop) {\n+                var val = this[prop];\n+                delete this[prop];\n+                this[prop] = val;\n+            }\n+        }\n+    );\n+}\n+\u002F*!\n+ * jQuery.scrollTo\n+ * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\n+ * Licensed under MIT\n+ * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\n+ * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\n+ * @author Ariel Flesler\n+ * @version 2.1.2\n+ *\u002F\n+;(function(factory) {\n+    'use strict';\n+    if (typeof define === 'function' && define.amd) {\n+        \u002F\u002F AMD\n+        define(['jquery'], factory);\n+    } else if (typeof module !== 'undefined' && module.exports) {\n+        \u002F\u002F CommonJS\n+        module.exports = factory(require('jquery'));\n+    } else {\n+        \u002F\u002F Global\n+        factory(jQuery);\n+    }\n+})(function($) {\n+    'use strict';\n+\n+    var $scrollTo = $.scrollTo = function(target, duration, settings) {\n+        return $(window).scrollTo(target, duration, settings);\n+    };\n+\n+    $scrollTo.defaults = {\n+        axis:'xy',\n+        duration: 0,\n+        limit:true\n+    };\n+\n+    function isWin(elem) {\n+        return !elem.nodeName ||\n+            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\n+    }\n+\n+    $.fn.scrollTo = function(target, duration, settings) {\n+        if (typeof duration === 'object') {\n+            settings = duration;\n+            duration = 0;\n+        }\n+        if (typeof settings === 'function') {\n+            settings = { onAfter:settings };\n+        }\n+        if (target === 'max') {\n+            target = 9e9;\n+        }\n+\n+        settings = $.extend({}, $scrollTo.defaults, settings);\n+        \u002F\u002F Speed is still recognized for backwards compatibility\n+        duration = duration || settings.duration;\n+        \u002F\u002F Make sure the settings are given right\n+        var queue = settings.queue && settings.axis.length > 1;\n+        if (queue) {\n+            \u002F\u002F Let's keep the overall duration\n+            duration \u002F= 2;\n+        }\n+        settings.offset = both(settings.offset);\n+        settings.over = both(settings.over);\n+\n+        return this.each(function() {\n+            \u002F\u002F Null target yields nothing, just like jQuery does\n+            if (target === null) return;\n+\n+            var win = isWin(this),\n+                elem = win ? this.contentWindow || window : this,\n+                $elem = $(elem),\n+                targ = target,\n+                attr = {},\n+                toff;\n+\n+            switch (typeof targ) {\n+                \u002F\u002F A number will pass the regex\n+                case 'number':\n+                case 'string':\n+                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\n+                        targ = both(targ);\n+                        \u002F\u002F We are done\n+                        break;\n+                    }\n+                    \u002F\u002F Relative\u002FAbsolute selector\n+                    targ = win ? $(targ) : $(targ, elem);\n+                \u002F* falls through *\u002F\n+                case 'object':\n+                    if (targ.length === 0) return;\n+                    \u002F\u002F DOMElement \u002F jQuery\n+                    if (targ.is || targ.style) {\n+                        \u002F\u002F Get the real position of the target\n+                        toff = (targ = $(targ)).offset();\n+                    }\n+            }\n+\n+            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\n+\n+            $.each(settings.axis.split(''), function(i, axis) {\n+                var Pos\t= axis === 'x' ? 'Left' : 'Top',\n+                    pos = Pos.toLowerCase(),\n+                    key = 'scroll' + Pos,\n+                    prev = $elem[key](),\n+                    max = $scrollTo.max(elem, axis);\n+\n+                if (toff) {\u002F\u002F jQuery \u002F DOMElement\n+                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\n+\n+                    \u002F\u002F If it's a dom element, reduce the margin\n+                    if (settings.margin) {\n+                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\n+                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\n+                    }\n+\n+                    attr[key] += offset[pos] || 0;\n+\n+                    if (settings.over[pos]) {\n+                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\n+                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\n+                    }\n+                } else {\n+                    var val = targ[pos];\n+                    \u002F\u002F Handle percentage values\n+                    attr[key] = val.slice && val.slice(-1) === '%' ?\n+                        parseFloat(val) \u002F 100 * max\n+                        : val;\n+                }\n+\n+                \u002F\u002F Number or 'number'\n+                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\n+                    \u002F\u002F Check the limits\n+                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\n+                }\n+\n+                \u002F\u002F Don't waste time animating, if there's no need.\n+                if (!i && settings.axis.length > 1) {\n+                    if (prev === attr[key]) {\n+                        \u002F\u002F No animation needed\n+                        attr = {};\n+                    } else if (queue) {\n+                        \u002F\u002F Intermediate animation\n+                        animate(settings.onAfterFirst);\n+                        \u002F\u002F Don't animate this axis again in the next iteration.\n+                        attr = {};\n+                    }\n+                }\n+            });\n+\n+            animate(settings.onAfter);\n+\n+            function animate(callback) {\n+                var opts = $.extend({}, settings, {\n+                    \u002F\u002F The queue setting conflicts with animate()\n+                    \u002F\u002F Force it to always be true\n+                    queue: true,\n+                    duration: duration,\n+                    complete: callback && function() {\n+                        callback.call(elem, targ, settings);\n+                    }\n+                });\n+                $elem.animate(attr, opts);\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Max scrolling position, works on quirks mode\n+    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\n+    $scrollTo.max = function(elem, axis) {\n+        var Dim = axis === 'x' ? 'Width' : 'Height',\n+            scroll = 'scroll'+Dim;\n+\n+        if (!isWin(elem))\n+            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\n+\n+        var size = 'client' + Dim,\n+            doc = elem.ownerDocument || elem.document,\n+            html = doc.documentElement,\n+            body = doc.body;\n+\n+        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\n+    };\n+\n+    function both(val) {\n+        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\n+    }\n+\n+    \u002F\u002F Add special hooks so that window scroll properties can be animated\n+    $.Tween.propHooks.scrollLeft =\n+        $.Tween.propHooks.scrollTop = {\n+            get: function(t) {\n+                return $(t.elem)[t.prop]();\n+            },\n+            set: function(t) {\n+                var curr = this.get(t);\n+                \u002F\u002F If interrupt is true and user scrolled, stop animating\n+                if (t.options.interrupt && t._last && t._last !== curr) {\n+                    return $(t.elem).stop();\n+                }\n+                var next = Math.round(t.now);\n+                \u002F\u002F Don't waste CPU\n+                \u002F\u002F Browsers don't render floating point scroll\n+                if (curr !== next) {\n+                    $(t.elem)[t.prop](next);\n+                    t._last = this.get(t);\n+                }\n+            }\n+        };\n+\n+    \u002F\u002F AMD requirement\n+    return $scrollTo;\n+});\n+(function (e) {\n+\te.backward_timer = function (t) {\n+\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\n+\t\t}, on_tick      : function (e) {\n+\t\t}}, r = this;\n+\t\tr.seconds_left = 0;\n+\t\tr.target = e(t);\n+\t\tr.timeout = undefined;\n+\t\tr.settings = {};\n+\t\tr.methods = {init     : function (t) {\n+\t\t\tr.settings = e.extend({}, n, t);\n+\t\t\tif (r.settings.value_setter == undefined) {\n+\t\t\t\tif (r.target.is(\"input\")) {\n+\t\t\t\t\tr.settings.value_setter = \"val\"\n+\t\t\t\t} else {\n+\t\t\t\t\tr.settings.value_setter = \"text\"\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tr.methods.reset()\n+\t\t}, start              : function () {\n+\t\t\tif (r.timeout == undefined) {\n+\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\n+\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\n+\t\t\t}\n+\t\t}, cancel             : function () {\n+\t\t\tif (r.timeout != undefined) {\n+\t\t\t\tclearTimeout(r.timeout);\n+\t\t\t\tr.timeout = undefined\n+\t\t\t}\n+\t\t}, reset              : function () {\n+\t\t\tr.seconds_left = r.settings.seconds;\n+\t\t\tr.methods._render_seconds()\n+\t\t}, _on_tick           : function (e) {\n+\t\t\tif (e != 0) {\n+\t\t\t\tr.settings.on_tick(r)\n+\t\t\t}\n+\t\t\tr.methods._render_seconds();\n+\t\t\tif (r.seconds_left > 0) {\n+\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\n+\t\t\t\t\tvar t = r.seconds_left\n+\t\t\t\t} else {\n+\t\t\t\t\tvar t = r.settings.step\n+\t\t\t\t}\n+\t\t\t\tr.seconds_left -= t;\n+\t\t\t\tvar n = t * 1e3;\n+\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\n+\t\t\t} else {\n+\t\t\t\tr.timeout = undefined;\n+\t\t\t\tr.settings.on_exhausted(r)\n+\t\t\t}\n+\t\t}, _render_seconds    : function () {\n+\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\n+\t\t\tif (t.indexOf(\"d%\") !== -1) {\n+\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\n+\t\t\t} else {\n+\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\n+\t\t\t}\n+\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\n+\t\t\tr.target[r.settings.value_setter](t)\n+\t\t}, _seconds_to_dhms   : function (e) {\n+\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\n+\t\t\treturn{d: t, h: n, m: r, s: i}\n+\t\t}, _check_leading_zero: function (e) {\n+\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\n+\t\t}}\n+\t};\n+\te.fn.backward_timer = function (t) {\n+\t\tvar n = arguments;\n+\t\treturn this.each(function () {\n+\t\t\tvar r = e(this).data(\"backward_timer\");\n+\t\t\tif (r == undefined) {\n+\t\t\t\tr = new e.backward_timer(this);\n+\t\t\t\te(this).data(\"backward_timer\", r)\n+\t\t\t}\n+\t\t\tif (r.methods[t]) {\n+\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\n+\t\t\t} else if (typeof t === \"object\" || !t) {\n+\t\t\t\treturn r.methods.init.apply(this, n)\n+\t\t\t} else {\n+\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\n+\t\t\t}\n+\t\t})\n+\t}\n+})(jQuery);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,373 +1,373 @@\n-'use strict';\r\n-var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n-\r\n-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\r\n-\r\n-(function () {\r\n-  \"use strict\";\r\n-\r\n-  if (!Array.from) {\r\n-    Array.from = function (object) {\r\n-      return [].slice.call(object);\r\n-    };\r\n-  }\r\n-\r\n-  function buildDraggable(Sortable) {\r\n-    function removeNode(node) {\r\n-      node.parentElement.removeChild(node);\r\n-    }\r\n-\r\n-    function insertNodeAt(fatherNode, node, position) {\r\n-      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\r\n-      fatherNode.insertBefore(node, refNode);\r\n-    }\r\n-\r\n-    function computeVmIndex(vnodes, element) {\r\n-      return vnodes.map(function (elt) {\r\n-        return elt.elm;\r\n-      }).indexOf(element);\r\n-    }\r\n-\r\n-    function _computeIndexes(slots, children, isTransition) {\r\n-      if (!slots) {\r\n-        return [];\r\n-      }\r\n-\r\n-      var elmFromNodes = slots.map(function (elt) {\r\n-        return elt.elm;\r\n-      });\r\n-      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\r\n-        return elmFromNodes.indexOf(elt);\r\n-      });\r\n-      return isTransition ? rawIndexes.filter(function (ind) {\r\n-        return ind !== -1;\r\n-      }) : rawIndexes;\r\n-    }\r\n-\r\n-    function emit(evtName, evtData) {\r\n-      var _this = this;\r\n-\r\n-      this.$nextTick(function () {\r\n-        return _this.$emit(evtName.toLowerCase(), evtData);\r\n-      });\r\n-    }\r\n-\r\n-    function delegateAndEmit(evtName) {\r\n-      var _this2 = this;\r\n-\r\n-      return function (evtData) {\r\n-        if (_this2.realList !== null) {\r\n-          _this2['onDrag' + evtName](evtData);\r\n-        }\r\n-        emit.call(_this2, evtName, evtData);\r\n-      };\r\n-    }\r\n-\r\n-    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\r\n-    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\r\n-    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\r\n-      return 'on' + evt;\r\n-    });\r\n-    var draggingElement = null;\r\n-\r\n-    var props = {\r\n-      options: Object,\r\n-      list: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      value: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      noTransitionOnDrag: {\r\n-        type: Boolean,\r\n-        default: false\r\n-      },\r\n-      clone: {\r\n-        type: Function,\r\n-        default: function _default(original) {\r\n-          return original;\r\n-        }\r\n-      },\r\n-      element: {\r\n-        type: String,\r\n-        default: 'div'\r\n-      },\r\n-      move: {\r\n-        type: Function,\r\n-        default: null\r\n-      }\r\n-    };\r\n-\r\n-    var draggableComponent = {\r\n-      name: 'draggable',\r\n-\r\n-      props: props,\r\n-\r\n-      data: function data() {\r\n-        return {\r\n-          transitionMode: false,\r\n-          componentMode: false\r\n-        };\r\n-      },\r\n-      render: function render(h) {\r\n-        var slots = this.$slots.default;\r\n-        if (slots && slots.length === 1) {\r\n-          var child = slots[0];\r\n-          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\r\n-            this.transitionMode = true;\r\n-          }\r\n-        }\r\n-        var children = slots;\r\n-        var footer = this.$slots.footer;\r\n-\r\n-        if (footer) {\r\n-          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\r\n-        }\r\n-        return h(this.element, null, children);\r\n-      },\r\n-      mounted: function mounted() {\r\n-        var _this3 = this;\r\n-\r\n-        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\r\n-        if (this.componentMode && this.transitionMode) {\r\n-          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\r\n-        }\r\n-        var optionsAdded = {};\r\n-        eventsListened.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\r\n-        });\r\n-\r\n-        eventsToEmit.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = emit.bind(_this3, elt);\r\n-        });\r\n-\r\n-        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\r\n-            return _this3.onDragMove(evt, originalEvent);\r\n-          } });\r\n-        !('draggable' in options) && (options.draggable = '>*');\r\n-        this._sortable = new Sortable(this.rootContainer, options);\r\n-        this.computeIndexes();\r\n-      },\r\n-      beforeDestroy: function beforeDestroy() {\r\n-        this._sortable.destroy();\r\n-      },\r\n-\r\n-\r\n-      computed: {\r\n-        rootContainer: function rootContainer() {\r\n-          return this.transitionMode ? this.$el.children[0] : this.$el;\r\n-        },\r\n-        isCloning: function isCloning() {\r\n-          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\r\n-        },\r\n-        realList: function realList() {\r\n-          return !!this.list ? this.list : this.value;\r\n-        }\r\n-      },\r\n-\r\n-      watch: {\r\n-        options: {\r\n-          handler: function handler(newOptionValue) {\r\n-            for (var property in newOptionValue) {\r\n-              if (readonlyProperties.indexOf(property) == -1) {\r\n-                this._sortable.option(property, newOptionValue[property]);\r\n-              }\r\n-            }\r\n-          },\r\n-\r\n-          deep: true\r\n-        },\r\n-\r\n-        realList: function realList() {\r\n-          this.computeIndexes();\r\n-        }\r\n-      },\r\n-\r\n-      methods: {\r\n-        getChildrenNodes: function getChildrenNodes() {\r\n-          if (this.componentMode) {\r\n-            return this.$children[0].$slots.default;\r\n-          }\r\n-          var rawNodes = this.$slots.default;\r\n-          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n-        },\r\n-        computeIndexes: function computeIndexes() {\r\n-          var _this4 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\r\n-          });\r\n-        },\r\n-        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\r\n-          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n-          if (index === -1) {\r\n-            \u002F\u002FEdge case during move callback: related element might be\r\n-            \u002F\u002Fan element different from collection\r\n-            return null;\r\n-          }\r\n-          var element = this.realList[index];\r\n-          return { index: index, element: element };\r\n-        },\r\n-        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\r\n-          var __vue__ = _ref.__vue__;\r\n-\r\n-          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\r\n-            return __vue__;\r\n-          }\r\n-          return __vue__.$parent;\r\n-        },\r\n-        emitChanges: function emitChanges(evt) {\r\n-          var _this5 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this5.$emit('change', evt);\r\n-          });\r\n-        },\r\n-        alterList: function alterList(onList) {\r\n-          if (!!this.list) {\r\n-            onList(this.list);\r\n-          } else {\r\n-            var newList = [].concat(_toConsumableArray(this.value));\r\n-            onList(newList);\r\n-            this.$emit('input', newList);\r\n-          }\r\n-        },\r\n-        spliceList: function spliceList() {\r\n-          var _arguments = arguments;\r\n-\r\n-          var spliceList = function spliceList(list) {\r\n-            return list.splice.apply(list, _arguments);\r\n-          };\r\n-          this.alterList(spliceList);\r\n-        },\r\n-        updatePosition: function updatePosition(oldIndex, newIndex) {\r\n-          var updatePosition = function updatePosition(list) {\r\n-            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n-          };\r\n-          this.alterList(updatePosition);\r\n-        },\r\n-        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\r\n-          var to = _ref2.to,\r\n-              related = _ref2.related;\r\n-\r\n-          var component = this.getUnderlyingPotencialDraggableComponent(to);\r\n-          if (!component) {\r\n-            return { component: component };\r\n-          }\r\n-          var list = component.realList;\r\n-          var context = { list: list, component: component };\r\n-          if (to !== related && list && component.getUnderlyingVm) {\r\n-            var destination = component.getUnderlyingVm(related);\r\n-            if (destination) {\r\n-              return _extends(destination, context);\r\n-            }\r\n-          }\r\n-\r\n-          return context;\r\n-        },\r\n-        getVmIndex: function getVmIndex(domIndex) {\r\n-          var indexes = this.visibleIndexes;\r\n-          var numberIndexes = indexes.length;\r\n-          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n-        },\r\n-        getComponent: function getComponent() {\r\n-          return this.$slots.default[0].componentInstance;\r\n-        },\r\n-        resetTransitionData: function resetTransitionData(index) {\r\n-          if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n-            return;\r\n-          }\r\n-          var nodes = this.getChildrenNodes();\r\n-          nodes[index].data = null;\r\n-          var transitionContainer = this.getComponent();\r\n-          transitionContainer.children = [];\r\n-          transitionContainer.kept = undefined;\r\n-        },\r\n-        onDragStart: function onDragStart(evt) {\r\n-          this.context = this.getUnderlyingVm(evt.item);\r\n-          evt.item._underlying_vm_ = this.clone(this.context.element);\r\n-          draggingElement = evt.item;\r\n-        },\r\n-        onDragAdd: function onDragAdd(evt) {\r\n-          var element = evt.item._underlying_vm_;\r\n-          if (element === undefined) {\r\n-            return;\r\n-          }\r\n-          removeNode(evt.item);\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.spliceList(newIndex, 0, element);\r\n-          this.computeIndexes();\r\n-          var added = { element: element, newIndex: newIndex };\r\n-          this.emitChanges({ added: added });\r\n-        },\r\n-        onDragRemove: function onDragRemove(evt) {\r\n-          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n-          if (this.isCloning) {\r\n-            removeNode(evt.clone);\r\n-            return;\r\n-          }\r\n-          var oldIndex = this.context.index;\r\n-          this.spliceList(oldIndex, 1);\r\n-          var removed = { element: this.context.element, oldIndex: oldIndex };\r\n-          this.resetTransitionData(oldIndex);\r\n-          this.emitChanges({ removed: removed });\r\n-        },\r\n-        onDragUpdate: function onDragUpdate(evt) {\r\n-          removeNode(evt.item);\r\n-          insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n-          var oldIndex = this.context.index;\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.updatePosition(oldIndex, newIndex);\r\n-          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\r\n-          this.emitChanges({ moved: moved });\r\n-        },\r\n-        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\r\n-          if (!relatedContext.element) {\r\n-            return 0;\r\n-          }\r\n-          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\r\n-            return el.style['display'] !== 'none';\r\n-          });\r\n-          var currentDOMIndex = domChildren.indexOf(evt.related);\r\n-          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n-          var draggedInList = domChildren.indexOf(draggingElement) != -1;\r\n-          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\r\n-        },\r\n-        onDragMove: function onDragMove(evt, originalEvent) {\r\n-          var onMove = this.move;\r\n-          if (!onMove || !this.realList) {\r\n-            return true;\r\n-          }\r\n-\r\n-          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n-          var draggedContext = this.context;\r\n-          var futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n-          _extends(draggedContext, { futureIndex: futureIndex });\r\n-          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\r\n-          return onMove(evt, originalEvent);\r\n-        },\r\n-        onDragEnd: function onDragEnd(evt) {\r\n-          this.computeIndexes();\r\n-          draggingElement = null;\r\n-        }\r\n-      }\r\n-    };\r\n-    return draggableComponent;\r\n-  }\r\n-\r\n-  if (typeof exports == \"object\") {\r\n-    \u002F\u002F var Sortable = require(\"sortablejs\");\r\n-    \u002F\u002F module.exports = buildDraggable(Sortable);\r\n-  } else if (typeof define == \"function\" && define.amd) {\r\n-    define(['sortablejs'], function (Sortable) {\r\n-      return buildDraggable(Sortable);\r\n-    });\r\n-  } else if (window && window.Vue && window.Sortable) {\r\n-    var draggable = buildDraggable(window.Sortable);\r\n-    Vue.component('draggable', draggable);\r\n-  }\r\n+'use strict';\n+var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n+\n+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n+\n+(function () {\n+  \"use strict\";\n+\n+  if (!Array.from) {\n+    Array.from = function (object) {\n+      return [].slice.call(object);\n+    };\n+  }\n+\n+  function buildDraggable(Sortable) {\n+    function removeNode(node) {\n+      node.parentElement.removeChild(node);\n+    }\n+\n+    function insertNodeAt(fatherNode, node, position) {\n+      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n+      fatherNode.insertBefore(node, refNode);\n+    }\n+\n+    function computeVmIndex(vnodes, element) {\n+      return vnodes.map(function (elt) {\n+        return elt.elm;\n+      }).indexOf(element);\n+    }\n+\n+    function _computeIndexes(slots, children, isTransition) {\n+      if (!slots) {\n+        return [];\n+      }\n+\n+      var elmFromNodes = slots.map(function (elt) {\n+        return elt.elm;\n+      });\n+      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\n+        return elmFromNodes.indexOf(elt);\n+      });\n+      return isTransition ? rawIndexes.filter(function (ind) {\n+        return ind !== -1;\n+      }) : rawIndexes;\n+    }\n+\n+    function emit(evtName, evtData) {\n+      var _this = this;\n+\n+      this.$nextTick(function () {\n+        return _this.$emit(evtName.toLowerCase(), evtData);\n+      });\n+    }\n+\n+    function delegateAndEmit(evtName) {\n+      var _this2 = this;\n+\n+      return function (evtData) {\n+        if (_this2.realList !== null) {\n+          _this2['onDrag' + evtName](evtData);\n+        }\n+        emit.call(_this2, evtName, evtData);\n+      };\n+    }\n+\n+    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\n+    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\n+    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\n+      return 'on' + evt;\n+    });\n+    var draggingElement = null;\n+\n+    var props = {\n+      options: Object,\n+      list: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      value: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      noTransitionOnDrag: {\n+        type: Boolean,\n+        default: false\n+      },\n+      clone: {\n+        type: Function,\n+        default: function _default(original) {\n+          return original;\n+        }\n+      },\n+      element: {\n+        type: String,\n+        default: 'div'\n+      },\n+      move: {\n+        type: Function,\n+        default: null\n+      }\n+    };\n+\n+    var draggableComponent = {\n+      name: 'draggable',\n+\n+      props: props,\n+\n+      data: function data() {\n+        return {\n+          transitionMode: false,\n+          componentMode: false\n+        };\n+      },\n+      render: function render(h) {\n+        var slots = this.$slots.default;\n+        if (slots && slots.length === 1) {\n+          var child = slots[0];\n+          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\n+            this.transitionMode = true;\n+          }\n+        }\n+        var children = slots;\n+        var footer = this.$slots.footer;\n+\n+        if (footer) {\n+          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\n+        }\n+        return h(this.element, null, children);\n+      },\n+      mounted: function mounted() {\n+        var _this3 = this;\n+\n+        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\n+        if (this.componentMode && this.transitionMode) {\n+          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\n+        }\n+        var optionsAdded = {};\n+        eventsListened.forEach(function (elt) {\n+          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\n+        });\n+\n+        eventsToEmit.forEach(function (elt) {\n+          optionsAdded['on' + elt] = emit.bind(_this3, elt);\n+        });\n+\n+        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\n+            return _this3.onDragMove(evt, originalEvent);\n+          } });\n+        !('draggable' in options) && (options.draggable = '>*');\n+        this._sortable = new Sortable(this.rootContainer, options);\n+        this.computeIndexes();\n+      },\n+      beforeDestroy: function beforeDestroy() {\n+        this._sortable.destroy();\n+      },\n+\n+\n+      computed: {\n+        rootContainer: function rootContainer() {\n+          return this.transitionMode ? this.$el.children[0] : this.$el;\n+        },\n+        isCloning: function isCloning() {\n+          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\n+        },\n+        realList: function realList() {\n+          return !!this.list ? this.list : this.value;\n+        }\n+      },\n+\n+      watch: {\n+        options: {\n+          handler: function handler(newOptionValue) {\n+            for (var property in newOptionValue) {\n+              if (readonlyProperties.indexOf(property) == -1) {\n+                this._sortable.option(property, newOptionValue[property]);\n+              }\n+            }\n+          },\n+\n+          deep: true\n+        },\n+\n+        realList: function realList() {\n+          this.computeIndexes();\n+        }\n+      },\n+\n+      methods: {\n+        getChildrenNodes: function getChildrenNodes() {\n+          if (this.componentMode) {\n+            return this.$children[0].$slots.default;\n+          }\n+          var rawNodes = this.$slots.default;\n+          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n+        },\n+        computeIndexes: function computeIndexes() {\n+          var _this4 = this;\n+\n+          this.$nextTick(function () {\n+            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\n+          });\n+        },\n+        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n+          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n+          if (index === -1) {\n+            \u002F\u002FEdge case during move callback: related element might be\n+            \u002F\u002Fan element different from collection\n+            return null;\n+          }\n+          var element = this.realList[index];\n+          return { index: index, element: element };\n+        },\n+        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n+          var __vue__ = _ref.__vue__;\n+\n+          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\n+            return __vue__;\n+          }\n+          return __vue__.$parent;\n+        },\n+        emitChanges: function emitChanges(evt) {\n+          var _this5 = this;\n+\n+          this.$nextTick(function () {\n+            _this5.$emit('change', evt);\n+          });\n+        },\n+        alterList: function alterList(onList) {\n+          if (!!this.list) {\n+            onList(this.list);\n+          } else {\n+            var newList = [].concat(_toConsumableArray(this.value));\n+            onList(newList);\n+            this.$emit('input', newList);\n+          }\n+        },\n+        spliceList: function spliceList() {\n+          var _arguments = arguments;\n+\n+          var spliceList = function spliceList(list) {\n+            return list.splice.apply(list, _arguments);\n+          };\n+          this.alterList(spliceList);\n+        },\n+        updatePosition: function updatePosition(oldIndex, newIndex) {\n+          var updatePosition = function updatePosition(list) {\n+            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n+          };\n+          this.alterList(updatePosition);\n+        },\n+        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n+          var to = _ref2.to,\n+              related = _ref2.related;\n+\n+          var component = this.getUnderlyingPotencialDraggableComponent(to);\n+          if (!component) {\n+            return { component: component };\n+          }\n+          var list = component.realList;\n+          var context = { list: list, component: component };\n+          if (to !== related && list && component.getUnderlyingVm) {\n+            var destination = component.getUnderlyingVm(related);\n+            if (destination) {\n+              return _extends(destination, context);\n+            }\n+          }\n+\n+          return context;\n+        },\n+        getVmIndex: function getVmIndex(domIndex) {\n+          var indexes = this.visibleIndexes;\n+          var numberIndexes = indexes.length;\n+          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n+        },\n+        getComponent: function getComponent() {\n+          return this.$slots.default[0].componentInstance;\n+        },\n+        resetTransitionData: function resetTransitionData(index) {\n+          if (!this.noTransitionOnDrag || !this.transitionMode) {\n+            return;\n+          }\n+          var nodes = this.getChildrenNodes();\n+          nodes[index].data = null;\n+          var transitionContainer = this.getComponent();\n+          transitionContainer.children = [];\n+          transitionContainer.kept = undefined;\n+        },\n+        onDragStart: function onDragStart(evt) {\n+          this.context = this.getUnderlyingVm(evt.item);\n+          evt.item._underlying_vm_ = this.clone(this.context.element);\n+          draggingElement = evt.item;\n+        },\n+        onDragAdd: function onDragAdd(evt) {\n+          var element = evt.item._underlying_vm_;\n+          if (element === undefined) {\n+            return;\n+          }\n+          removeNode(evt.item);\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.spliceList(newIndex, 0, element);\n+          this.computeIndexes();\n+          var added = { element: element, newIndex: newIndex };\n+          this.emitChanges({ added: added });\n+        },\n+        onDragRemove: function onDragRemove(evt) {\n+          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\n+          if (this.isCloning) {\n+            removeNode(evt.clone);\n+            return;\n+          }\n+          var oldIndex = this.context.index;\n+          this.spliceList(oldIndex, 1);\n+          var removed = { element: this.context.element, oldIndex: oldIndex };\n+          this.resetTransitionData(oldIndex);\n+          this.emitChanges({ removed: removed });\n+        },\n+        onDragUpdate: function onDragUpdate(evt) {\n+          removeNode(evt.item);\n+          insertNodeAt(evt.from, evt.item, evt.oldIndex);\n+          var oldIndex = this.context.index;\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.updatePosition(oldIndex, newIndex);\n+          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\n+          this.emitChanges({ moved: moved });\n+        },\n+        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n+          if (!relatedContext.element) {\n+            return 0;\n+          }\n+          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\n+            return el.style['display'] !== 'none';\n+          });\n+          var currentDOMIndex = domChildren.indexOf(evt.related);\n+          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n+          var draggedInList = domChildren.indexOf(draggingElement) != -1;\n+          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n+        },\n+        onDragMove: function onDragMove(evt, originalEvent) {\n+          var onMove = this.move;\n+          if (!onMove || !this.realList) {\n+            return true;\n+          }\n+\n+          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n+          var draggedContext = this.context;\n+          var futureIndex = this.computeFutureIndex(relatedContext, evt);\n+          _extends(draggedContext, { futureIndex: futureIndex });\n+          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\n+          return onMove(evt, originalEvent);\n+        },\n+        onDragEnd: function onDragEnd(evt) {\n+          this.computeIndexes();\n+          draggingElement = null;\n+        }\n+      }\n+    };\n+    return draggableComponent;\n+  }\n+\n+  if (typeof exports == \"object\") {\n+    \u002F\u002F var Sortable = require(\"sortablejs\");\n+    \u002F\u002F module.exports = buildDraggable(Sortable);\n+  } else if (typeof define == \"function\" && define.amd) {\n+    define(['sortablejs'], function (Sortable) {\n+      return buildDraggable(Sortable);\n+    });\n+  } else if (window && window.Vue && window.Sortable) {\n+    var draggable = buildDraggable(window.Sortable);\n+    Vue.component('draggable', draggable);\n+  }\n })();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11945 +1,11945 @@\n-\u002F*!\r\n- * Vue.js v2.6.10\r\n- * (c) 2014-2019 Evan You\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vue = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var emptyObject = Object.freeze({});\r\n-\r\n-    \u002F\u002F These helpers produce better VM code in JS engines due to their\r\n-    \u002F\u002F explicitness and function inlining.\r\n-    function isUndef (v) {\r\n-        return v === undefined || v === null\r\n-    }\r\n-\r\n-    function isDef (v) {\r\n-        return v !== undefined && v !== null\r\n-    }\r\n-\r\n-    function isTrue (v) {\r\n-        return v === true\r\n-    }\r\n-\r\n-    function isFalse (v) {\r\n-        return v === false\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if value is primitive.\r\n-     *\u002F\r\n-    function isPrimitive (value) {\r\n-        return (\r\n-            typeof value === 'string' ||\r\n-            typeof value === 'number' ||\r\n-            \u002F\u002F $flow-disable-line\r\n-            typeof value === 'symbol' ||\r\n-            typeof value === 'boolean'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Quick object check - this is primarily used to tell\r\n-     * Objects from primitive values when we know the value\r\n-     * is a JSON-compliant type.\r\n-     *\u002F\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the raw type string of a value, e.g., [object Object].\r\n-     *\u002F\r\n-    var _toString = Object.prototype.toString;\r\n-\r\n-    function toRawType (value) {\r\n-        return _toString.call(value).slice(8, -1)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Strict object type check. Only returns true\r\n-     * for plain JavaScript objects.\r\n-     *\u002F\r\n-    function isPlainObject (obj) {\r\n-        return _toString.call(obj) === '[object Object]'\r\n-    }\r\n-\r\n-    function isRegExp (v) {\r\n-        return _toString.call(v) === '[object RegExp]'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if val is a valid array index.\r\n-     *\u002F\r\n-    function isValidArrayIndex (val) {\r\n-        var n = parseFloat(String(val));\r\n-        return n >= 0 && Math.floor(n) === n && isFinite(val)\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return (\r\n-            isDef(val) &&\r\n-            typeof val.then === 'function' &&\r\n-            typeof val.catch === 'function'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert a value to a string that is actually rendered.\r\n-     *\u002F\r\n-    function toString (val) {\r\n-        return val == null\r\n-            ? ''\r\n-            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\r\n-                ? JSON.stringify(val, null, 2)\r\n-                : String(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert an input value to a number for persistence.\r\n-     * If the conversion fails, return original string.\r\n-     *\u002F\r\n-    function toNumber (val) {\r\n-        var n = parseFloat(val);\r\n-        return isNaN(n) ? val : n\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Make a map and return a function for checking if a key\r\n-     * is in that map.\r\n-     *\u002F\r\n-    function makeMap (\r\n-        str,\r\n-        expectsLowerCase\r\n-    ) {\r\n-        var map = Object.create(null);\r\n-        var list = str.split(',');\r\n-        for (var i = 0; i \u003C list.length; i++) {\r\n-            map[list[i]] = true;\r\n-        }\r\n-        return expectsLowerCase\r\n-            ? function (val) { return map[val.toLowerCase()]; }\r\n-            : function (val) { return map[val]; }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if a tag is a built-in tag.\r\n-     *\u002F\r\n-    var isBuiltInTag = makeMap('slot,component', true);\r\n-\r\n-    \u002F**\r\n-     * Check if an attribute is a reserved attribute.\r\n-     *\u002F\r\n-    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\r\n-\r\n-    \u002F**\r\n-     * Remove an item from an array.\r\n-     *\u002F\r\n-    function remove (arr, item) {\r\n-        if (arr.length) {\r\n-            var index = arr.indexOf(item);\r\n-            if (index > -1) {\r\n-                return arr.splice(index, 1)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check whether an object has the property.\r\n-     *\u002F\r\n-    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n-    function hasOwn (obj, key) {\r\n-        return hasOwnProperty.call(obj, key)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Create a cached version of a pure function.\r\n-     *\u002F\r\n-    function cached (fn) {\r\n-        var cache = Object.create(null);\r\n-        return (function cachedFn (str) {\r\n-            var hit = cache[str];\r\n-            return hit || (cache[str] = fn(str))\r\n-        })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Camelize a hyphen-delimited string.\r\n-     *\u002F\r\n-    var camelizeRE = \u002F-(\\w)\u002Fg;\r\n-    var camelize = cached(function (str) {\r\n-        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Capitalize a string.\r\n-     *\u002F\r\n-    var capitalize = cached(function (str) {\r\n-        return str.charAt(0).toUpperCase() + str.slice(1)\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Hyphenate a camelCase string.\r\n-     *\u002F\r\n-    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\r\n-    var hyphenate = cached(function (str) {\r\n-        return str.replace(hyphenateRE, '-$1').toLowerCase()\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Simple bind polyfill for environments that do not support it,\r\n-     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\r\n-     * since native bind is now performant enough in most browsers.\r\n-     * But removing it would mean breaking code that was able to run in\r\n-     * PhantomJS 1.x, so this must be kept for backward compatibility.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function polyfillBind (fn, ctx) {\r\n-        function boundFn (a) {\r\n-            var l = arguments.length;\r\n-            return l\r\n-                ? l > 1\r\n-                    ? fn.apply(ctx, arguments)\r\n-                    : fn.call(ctx, a)\r\n-                : fn.call(ctx)\r\n-        }\r\n-\r\n-        boundFn._length = fn.length;\r\n-        return boundFn\r\n-    }\r\n-\r\n-    function nativeBind (fn, ctx) {\r\n-        return fn.bind(ctx)\r\n-    }\r\n-\r\n-    var bind = Function.prototype.bind\r\n-        ? nativeBind\r\n-        : polyfillBind;\r\n-\r\n-    \u002F**\r\n-     * Convert an Array-like object to a real Array.\r\n-     *\u002F\r\n-    function toArray (list, start) {\r\n-        start = start || 0;\r\n-        var i = list.length - start;\r\n-        var ret = new Array(i);\r\n-        while (i--) {\r\n-            ret[i] = list[i + start];\r\n-        }\r\n-        return ret\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Mix properties into target object.\r\n-     *\u002F\r\n-    function extend (to, _from) {\r\n-        for (var key in _from) {\r\n-            to[key] = _from[key];\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge an Array of Objects into a single Object.\r\n-     *\u002F\r\n-    function toObject (arr) {\r\n-        var res = {};\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (arr[i]) {\r\n-                extend(res, arr[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Perform no operation.\r\n-     * Stubbing args to make Flow happy without leaving useless transpiled code\r\n-     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\r\n-     *\u002F\r\n-    function noop (a, b, c) {}\r\n-\r\n-    \u002F**\r\n-     * Always return false.\r\n-     *\u002F\r\n-    var no = function (a, b, c) { return false; };\r\n-\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Return the same value.\r\n-     *\u002F\r\n-    var identity = function (_) { return _; };\r\n-\r\n-    \u002F**\r\n-     * Generate a string containing static keys from compiler modules.\r\n-     *\u002F\r\n-    function genStaticKeys (modules) {\r\n-        return modules.reduce(function (keys, m) {\r\n-            return keys.concat(m.staticKeys || [])\r\n-        }, []).join(',')\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if two values are loosely equal - that is,\r\n-     * if they are plain objects, do they have the same shape?\r\n-     *\u002F\r\n-    function looseEqual (a, b) {\r\n-        if (a === b) { return true }\r\n-        var isObjectA = isObject(a);\r\n-        var isObjectB = isObject(b);\r\n-        if (isObjectA && isObjectB) {\r\n-            try {\r\n-                var isArrayA = Array.isArray(a);\r\n-                var isArrayB = Array.isArray(b);\r\n-                if (isArrayA && isArrayB) {\r\n-                    return a.length === b.length && a.every(function (e, i) {\r\n-                            return looseEqual(e, b[i])\r\n-                        })\r\n-                } else if (a instanceof Date && b instanceof Date) {\r\n-                    return a.getTime() === b.getTime()\r\n-                } else if (!isArrayA && !isArrayB) {\r\n-                    var keysA = Object.keys(a);\r\n-                    var keysB = Object.keys(b);\r\n-                    return keysA.length === keysB.length && keysA.every(function (key) {\r\n-                            return looseEqual(a[key], b[key])\r\n-                        })\r\n-                } else {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    return false\r\n-                }\r\n-            } catch (e) {\r\n-              \u002F* istanbul ignore next *\u002F\r\n-                return false\r\n-            }\r\n-        } else if (!isObjectA && !isObjectB) {\r\n-            return String(a) === String(b)\r\n-        } else {\r\n-            return false\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return the first index at which a loosely equal value can be\r\n-     * found in the array (if value is a plain object, the array must\r\n-     * contain an object of the same shape), or -1 if it is not present.\r\n-     *\u002F\r\n-    function looseIndexOf (arr, val) {\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (looseEqual(arr[i], val)) { return i }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure a function is called only once.\r\n-     *\u002F\r\n-    function once (fn) {\r\n-        var called = false;\r\n-        return function () {\r\n-            if (!called) {\r\n-                called = true;\r\n-                fn.apply(this, arguments);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var SSR_ATTR = 'data-server-rendered';\r\n-\r\n-    var ASSET_TYPES = [\r\n-        'component',\r\n-        'directive',\r\n-        'filter'\r\n-    ];\r\n-\r\n-    var LIFECYCLE_HOOKS = [\r\n-        'beforeCreate',\r\n-        'created',\r\n-        'beforeMount',\r\n-        'mounted',\r\n-        'beforeUpdate',\r\n-        'updated',\r\n-        'beforeDestroy',\r\n-        'destroyed',\r\n-        'activated',\r\n-        'deactivated',\r\n-        'errorCaptured',\r\n-        'serverPrefetch'\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var config = ({\r\n-        \u002F**\r\n-         * Option merge strategies (used in core\u002Futil\u002Foptions)\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        optionMergeStrategies: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Whether to suppress warnings.\r\n-         *\u002F\r\n-        silent: false,\r\n-\r\n-        \u002F**\r\n-         * Show production mode tip message on boot?\r\n-         *\u002F\r\n-        productionTip: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to enable devtools\r\n-         *\u002F\r\n-        devtools: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to record perf\r\n-         *\u002F\r\n-        performance: false,\r\n-\r\n-        \u002F**\r\n-         * Error handler for watcher errors\r\n-         *\u002F\r\n-        errorHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Warn handler for watcher warns\r\n-         *\u002F\r\n-        warnHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Ignore certain custom elements\r\n-         *\u002F\r\n-        ignoredElements: [],\r\n-\r\n-        \u002F**\r\n-         * Custom user key aliases for v-on\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        keyCodes: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is reserved so that it cannot be registered as a\r\n-         * component. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedTag: no,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute is reserved so that it cannot be used as a component\r\n-         * prop. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedAttr: no,\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is an unknown element.\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        isUnknownElement: no,\r\n-\r\n-        \u002F**\r\n-         * Get the namespace of an element\r\n-         *\u002F\r\n-        getTagNamespace: noop,\r\n-\r\n-        \u002F**\r\n-         * Parse the real tag name for the specific platform.\r\n-         *\u002F\r\n-        parsePlatformTagName: identity,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute must be bound using property, e.g. value\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        mustUseProp: no,\r\n-\r\n-        \u002F**\r\n-         * Perform updates asynchronously. Intended to be used by Vue Test Utils\r\n-         * This will significantly reduce performance if set to false.\r\n-         *\u002F\r\n-        async: true,\r\n-\r\n-        \u002F**\r\n-         * Exposed for legacy reasons\r\n-         *\u002F\r\n-        _lifecycleHooks: LIFECYCLE_HOOKS\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * unicode letters used for parsing html tags, component names and property paths.\r\n-     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\r\n-     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\r\n-     *\u002F\r\n-    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\r\n-\r\n-    \u002F**\r\n-     * Check if a string starts with $ or _\r\n-     *\u002F\r\n-    function isReserved (str) {\r\n-        var c = (str + '').charCodeAt(0);\r\n-        return c === 0x24 || c === 0x5F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a property.\r\n-     *\u002F\r\n-    function def (obj, key, val, enumerable) {\r\n-        Object.defineProperty(obj, key, {\r\n-            value: val,\r\n-            enumerable: !!enumerable,\r\n-            writable: true,\r\n-            configurable: true\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse simple path.\r\n-     *\u002F\r\n-    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\r\n-    function parsePath (path) {\r\n-        if (bailRE.test(path)) {\r\n-            return\r\n-        }\r\n-        var segments = path.split('.');\r\n-        return function (obj) {\r\n-            for (var i = 0; i \u003C segments.length; i++) {\r\n-                if (!obj) { return }\r\n-                obj = obj[segments[i]];\r\n-            }\r\n-            return obj\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F can we use __proto__?\r\n-    var hasProto = '__proto__' in {};\r\n-\r\n-    \u002F\u002F Browser environment sniffing\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\r\n-    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\r\n-    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\r\n-    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\r\n-    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\r\n-    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\r\n-    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\r\n-    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\r\n-    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\r\n-    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\r\n-    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\r\n-\r\n-    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\r\n-    var nativeWatch = ({}).watch;\r\n-\r\n-    var supportsPassive = false;\r\n-    if (inBrowser) {\r\n-        try {\r\n-            var opts = {};\r\n-            Object.defineProperty(opts, 'passive', ({\r\n-                get: function get () {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    supportsPassive = true;\r\n-                }\r\n-            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\r\n-            window.addEventListener('test-passive', null, opts);\r\n-        } catch (e) {}\r\n-    }\r\n-\r\n-    \u002F\u002F this needs to be lazy-evaled because vue may be required before\r\n-    \u002F\u002F vue-server-renderer can set VUE_ENV\r\n-    var _isServer;\r\n-    var isServerRendering = function () {\r\n-        if (_isServer === undefined) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\r\n-                \u002F\u002F detect presence of vue-server-renderer and avoid\r\n-                \u002F\u002F Webpack shimming the process\r\n-                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\r\n-            } else {\r\n-                _isServer = false;\r\n-            }\r\n-        }\r\n-        return _isServer\r\n-    };\r\n-\r\n-    \u002F\u002F detect devtools\r\n-    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function isNative (Ctor) {\r\n-        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\r\n-    }\r\n-\r\n-    var hasSymbol =\r\n-        typeof Symbol !== 'undefined' && isNative(Symbol) &&\r\n-        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\r\n-\r\n-    var _Set;\r\n-  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\r\n-    if (typeof Set !== 'undefined' && isNative(Set)) {\r\n-        \u002F\u002F use native Set when available.\r\n-        _Set = Set;\r\n-    } else {\r\n-        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\r\n-        _Set = \u002F*@__PURE__*\u002F(function () {\r\n-            function Set () {\r\n-                this.set = Object.create(null);\r\n-            }\r\n-            Set.prototype.has = function has (key) {\r\n-                return this.set[key] === true\r\n-            };\r\n-            Set.prototype.add = function add (key) {\r\n-                this.set[key] = true;\r\n-            };\r\n-            Set.prototype.clear = function clear () {\r\n-                this.set = Object.create(null);\r\n-            };\r\n-\r\n-            return Set;\r\n-        }());\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn = noop;\r\n-    var tip = noop;\r\n-    var generateComponentTrace = (noop); \u002F\u002F work around flow check\r\n-    var formatComponentName = (noop);\r\n-\r\n-    {\r\n-        var hasConsole = typeof console !== 'undefined';\r\n-        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\r\n-        var classify = function (str) { return str\r\n-            .replace(classifyRE, function (c) { return c.toUpperCase(); })\r\n-            .replace(\u002F[-_]\u002Fg, ''); };\r\n-\r\n-        warn = function (msg, vm) {\r\n-            var trace = vm ? generateComponentTrace(vm) : '';\r\n-\r\n-            if (config.warnHandler) {\r\n-                config.warnHandler.call(null, msg, vm, trace);\r\n-            } else if (hasConsole && (!config.silent)) {\r\n-                console.error((\"[Vue warn]: \" + msg + trace));\r\n-            }\r\n-        };\r\n-\r\n-        tip = function (msg, vm) {\r\n-            if (hasConsole && (!config.silent)) {\r\n-                console.warn(\"[Vue tip]: \" + msg + (\r\n-                        vm ? generateComponentTrace(vm) : ''\r\n-                    ));\r\n-            }\r\n-        };\r\n-\r\n-        formatComponentName = function (vm, includeFile) {\r\n-            if (vm.$root === vm) {\r\n-                return '\u003CRoot>'\r\n-            }\r\n-            var options = typeof vm === 'function' && vm.cid != null\r\n-                ? vm.options\r\n-                : vm._isVue\r\n-                    ? vm.$options || vm.constructor.options\r\n-                    : vm;\r\n-            var name = options.name || options._componentTag;\r\n-            var file = options.__file;\r\n-            if (!name && file) {\r\n-                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\r\n-                name = match && match[1];\r\n-            }\r\n-\r\n-            return (\r\n-                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\r\n-                (file && includeFile !== false ? (\" at \" + file) : '')\r\n-            )\r\n-        };\r\n-\r\n-        var repeat = function (str, n) {\r\n-            var res = '';\r\n-            while (n) {\r\n-                if (n % 2 === 1) { res += str; }\r\n-                if (n > 1) { str += str; }\r\n-                n >>= 1;\r\n-            }\r\n-            return res\r\n-        };\r\n-\r\n-        generateComponentTrace = function (vm) {\r\n-            if (vm._isVue && vm.$parent) {\r\n-                var tree = [];\r\n-                var currentRecursiveSequence = 0;\r\n-                while (vm) {\r\n-                    if (tree.length > 0) {\r\n-                        var last = tree[tree.length - 1];\r\n-                        if (last.constructor === vm.constructor) {\r\n-                            currentRecursiveSequence++;\r\n-                            vm = vm.$parent;\r\n-                            continue\r\n-                        } else if (currentRecursiveSequence > 0) {\r\n-                            tree[tree.length - 1] = [last, currentRecursiveSequence];\r\n-                            currentRecursiveSequence = 0;\r\n-                        }\r\n-                    }\r\n-                    tree.push(vm);\r\n-                    vm = vm.$parent;\r\n-                }\r\n-                return '\\n\\nfound in\\n\\n' + tree\r\n-                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\r\n-                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\r\n-                            : formatComponentName(vm))); })\r\n-                        .join('\\n')\r\n-            } else {\r\n-                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid = 0;\r\n-\r\n-    \u002F**\r\n-     * A dep is an observable that can have multiple\r\n-     * directives subscribing to it.\r\n-     *\u002F\r\n-    var Dep = function Dep () {\r\n-        this.id = uid++;\r\n-        this.subs = [];\r\n-    };\r\n-\r\n-    Dep.prototype.addSub = function addSub (sub) {\r\n-        this.subs.push(sub);\r\n-    };\r\n-\r\n-    Dep.prototype.removeSub = function removeSub (sub) {\r\n-        remove(this.subs, sub);\r\n-    };\r\n-\r\n-    Dep.prototype.depend = function depend () {\r\n-        if (Dep.target) {\r\n-            Dep.target.addDep(this);\r\n-        }\r\n-    };\r\n-\r\n-    Dep.prototype.notify = function notify () {\r\n-        \u002F\u002F stabilize the subscriber list first\r\n-        var subs = this.subs.slice();\r\n-        if (!config.async) {\r\n-            \u002F\u002F subs aren't sorted in scheduler if not running async\r\n-            \u002F\u002F we need to sort them now to make sure they fire in correct\r\n-            \u002F\u002F order\r\n-            subs.sort(function (a, b) { return a.id - b.id; });\r\n-        }\r\n-        for (var i = 0, l = subs.length; i \u003C l; i++) {\r\n-            subs[i].update();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F The current target watcher being evaluated.\r\n-    \u002F\u002F This is globally unique because only one watcher\r\n-    \u002F\u002F can be evaluated at a time.\r\n-    Dep.target = null;\r\n-    var targetStack = [];\r\n-\r\n-    function pushTarget (target) {\r\n-        targetStack.push(target);\r\n-        Dep.target = target;\r\n-    }\r\n-\r\n-    function popTarget () {\r\n-        targetStack.pop();\r\n-        Dep.target = targetStack[targetStack.length - 1];\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var VNode = function VNode (\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        text,\r\n-        elm,\r\n-        context,\r\n-        componentOptions,\r\n-        asyncFactory\r\n-    ) {\r\n-        this.tag = tag;\r\n-        this.data = data;\r\n-        this.children = children;\r\n-        this.text = text;\r\n-        this.elm = elm;\r\n-        this.ns = undefined;\r\n-        this.context = context;\r\n-        this.fnContext = undefined;\r\n-        this.fnOptions = undefined;\r\n-        this.fnScopeId = undefined;\r\n-        this.key = data && data.key;\r\n-        this.componentOptions = componentOptions;\r\n-        this.componentInstance = undefined;\r\n-        this.parent = undefined;\r\n-        this.raw = false;\r\n-        this.isStatic = false;\r\n-        this.isRootInsert = true;\r\n-        this.isComment = false;\r\n-        this.isCloned = false;\r\n-        this.isOnce = false;\r\n-        this.asyncFactory = asyncFactory;\r\n-        this.asyncMeta = undefined;\r\n-        this.isAsyncPlaceholder = false;\r\n-    };\r\n-\r\n-    var prototypeAccessors = { child: { configurable: true } };\r\n-\r\n-    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    prototypeAccessors.child.get = function () {\r\n-        return this.componentInstance\r\n-    };\r\n-\r\n-    Object.defineProperties( VNode.prototype, prototypeAccessors );\r\n-\r\n-    var createEmptyVNode = function (text) {\r\n-        if ( text === void 0 ) text = '';\r\n-\r\n-        var node = new VNode();\r\n-        node.text = text;\r\n-        node.isComment = true;\r\n-        return node\r\n-    };\r\n-\r\n-    function createTextVNode (val) {\r\n-        return new VNode(undefined, undefined, undefined, String(val))\r\n-    }\r\n-\r\n-    \u002F\u002F optimized shallow clone\r\n-    \u002F\u002F used for static nodes and slot nodes because they may be reused across\r\n-    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\r\n-    \u002F\u002F on their elm reference.\r\n-    function cloneVNode (vnode) {\r\n-        var cloned = new VNode(\r\n-            vnode.tag,\r\n-            vnode.data,\r\n-            \u002F\u002F #7975\r\n-            \u002F\u002F clone children array to avoid mutating original in case of cloning\r\n-            \u002F\u002F a child.\r\n-            vnode.children && vnode.children.slice(),\r\n-            vnode.text,\r\n-            vnode.elm,\r\n-            vnode.context,\r\n-            vnode.componentOptions,\r\n-            vnode.asyncFactory\r\n-        );\r\n-        cloned.ns = vnode.ns;\r\n-        cloned.isStatic = vnode.isStatic;\r\n-        cloned.key = vnode.key;\r\n-        cloned.isComment = vnode.isComment;\r\n-        cloned.fnContext = vnode.fnContext;\r\n-        cloned.fnOptions = vnode.fnOptions;\r\n-        cloned.fnScopeId = vnode.fnScopeId;\r\n-        cloned.asyncMeta = vnode.asyncMeta;\r\n-        cloned.isCloned = true;\r\n-        return cloned\r\n-    }\r\n-\r\n-  \u002F*\r\n-   * not type checking this file because flow doesn't play well with\r\n-   * dynamically accessing methods on Array prototype\r\n-   *\u002F\r\n-\r\n-    var arrayProto = Array.prototype;\r\n-    var arrayMethods = Object.create(arrayProto);\r\n-\r\n-    var methodsToPatch = [\r\n-        'push',\r\n-        'pop',\r\n-        'shift',\r\n-        'unshift',\r\n-        'splice',\r\n-        'sort',\r\n-        'reverse'\r\n-    ];\r\n-\r\n-    \u002F**\r\n-     * Intercept mutating methods and emit events\r\n-     *\u002F\r\n-    methodsToPatch.forEach(function (method) {\r\n-        \u002F\u002F cache original method\r\n-        var original = arrayProto[method];\r\n-        def(arrayMethods, method, function mutator () {\r\n-            var args = [], len = arguments.length;\r\n-            while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-            var result = original.apply(this, args);\r\n-            var ob = this.__ob__;\r\n-            var inserted;\r\n-            switch (method) {\r\n-                case 'push':\r\n-                case 'unshift':\r\n-                    inserted = args;\r\n-                    break\r\n-                case 'splice':\r\n-                    inserted = args.slice(2);\r\n-                    break\r\n-            }\r\n-            if (inserted) { ob.observeArray(inserted); }\r\n-            \u002F\u002F notify change\r\n-            ob.dep.notify();\r\n-            return result\r\n-        });\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\r\n-\r\n-    \u002F**\r\n-     * In some cases we may want to disable observation inside a component's\r\n-     * update computation.\r\n-     *\u002F\r\n-    var shouldObserve = true;\r\n-\r\n-    function toggleObserving (value) {\r\n-        shouldObserve = value;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Observer class that is attached to each observed\r\n-     * object. Once attached, the observer converts the target\r\n-     * object's property keys into getter\u002Fsetters that\r\n-     * collect dependencies and dispatch updates.\r\n-     *\u002F\r\n-    var Observer = function Observer (value) {\r\n-        this.value = value;\r\n-        this.dep = new Dep();\r\n-        this.vmCount = 0;\r\n-        def(value, '__ob__', this);\r\n-        if (Array.isArray(value)) {\r\n-            if (hasProto) {\r\n-                protoAugment(value, arrayMethods);\r\n-            } else {\r\n-                copyAugment(value, arrayMethods, arrayKeys);\r\n-            }\r\n-            this.observeArray(value);\r\n-        } else {\r\n-            this.walk(value);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Walk through all properties and convert them into\r\n-     * getter\u002Fsetters. This method should only be called when\r\n-     * value type is Object.\r\n-     *\u002F\r\n-    Observer.prototype.walk = function walk (obj) {\r\n-        var keys = Object.keys(obj);\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            defineReactive$$1(obj, keys[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Observe a list of Array items.\r\n-     *\u002F\r\n-    Observer.prototype.observeArray = function observeArray (items) {\r\n-        for (var i = 0, l = items.length; i \u003C l; i++) {\r\n-            observe(items[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F helpers\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by intercepting\r\n-     * the prototype chain using __proto__\r\n-     *\u002F\r\n-    function protoAugment (target, src) {\r\n-      \u002F* eslint-disable no-proto *\u002F\r\n-        target.__proto__ = src;\r\n-      \u002F* eslint-enable no-proto *\u002F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by defining\r\n-     * hidden properties.\r\n-     *\u002F\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function copyAugment (target, src, keys) {\r\n-        for (var i = 0, l = keys.length; i \u003C l; i++) {\r\n-            var key = keys[i];\r\n-            def(target, key, src[key]);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Attempt to create an observer instance for a value,\r\n-     * returns the new observer if successfully observed,\r\n-     * or the existing observer if the value already has one.\r\n-     *\u002F\r\n-    function observe (value, asRootData) {\r\n-        if (!isObject(value) || value instanceof VNode) {\r\n-            return\r\n-        }\r\n-        var ob;\r\n-        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\r\n-            ob = value.__ob__;\r\n-        } else if (\r\n-            shouldObserve &&\r\n-            !isServerRendering() &&\r\n-            (Array.isArray(value) || isPlainObject(value)) &&\r\n-            Object.isExtensible(value) &&\r\n-            !value._isVue\r\n-        ) {\r\n-            ob = new Observer(value);\r\n-        }\r\n-        if (asRootData && ob) {\r\n-            ob.vmCount++;\r\n-        }\r\n-        return ob\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a reactive property on an Object.\r\n-     *\u002F\r\n-    function defineReactive$$1 (\r\n-        obj,\r\n-        key,\r\n-        val,\r\n-        customSetter,\r\n-        shallow\r\n-    ) {\r\n-        var dep = new Dep();\r\n-\r\n-        var property = Object.getOwnPropertyDescriptor(obj, key);\r\n-        if (property && property.configurable === false) {\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F cater for pre-defined getter\u002Fsetters\r\n-        var getter = property && property.get;\r\n-        var setter = property && property.set;\r\n-        if ((!getter || setter) && arguments.length === 2) {\r\n-            val = obj[key];\r\n-        }\r\n-\r\n-        var childOb = !shallow && observe(val);\r\n-        Object.defineProperty(obj, key, {\r\n-            enumerable: true,\r\n-            configurable: true,\r\n-            get: function reactiveGetter () {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-                if (Dep.target) {\r\n-                    dep.depend();\r\n-                    if (childOb) {\r\n-                        childOb.dep.depend();\r\n-                        if (Array.isArray(value)) {\r\n-                            dependArray(value);\r\n-                        }\r\n-                    }\r\n-                }\r\n-                return value\r\n-            },\r\n-            set: function reactiveSetter (newVal) {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-              \u002F* eslint-disable no-self-compare *\u002F\r\n-                if (newVal === value || (newVal !== newVal && value !== value)) {\r\n-                    return\r\n-                }\r\n-              \u002F* eslint-enable no-self-compare *\u002F\r\n-                if (customSetter) {\r\n-                    customSetter();\r\n-                }\r\n-                \u002F\u002F #7981: for accessor properties without setter\r\n-                if (getter && !setter) { return }\r\n-                if (setter) {\r\n-                    setter.call(obj, newVal);\r\n-                } else {\r\n-                    val = newVal;\r\n-                }\r\n-                childOb = !shallow && observe(newVal);\r\n-                dep.notify();\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Set a property on an object. Adds the new property and\r\n-     * triggers change notification if the property doesn't\r\n-     * already exist.\r\n-     *\u002F\r\n-    function set (target, key, val) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.length = Math.max(target.length, key);\r\n-            target.splice(key, 1, val);\r\n-            return val\r\n-        }\r\n-        if (key in target && !(key in Object.prototype)) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n-                'at runtime - declare it upfront in the data option.'\r\n-            );\r\n-            return val\r\n-        }\r\n-        if (!ob) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        defineReactive$$1(ob.value, key, val);\r\n-        ob.dep.notify();\r\n-        return val\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Delete a property and trigger change if necessary.\r\n-     *\u002F\r\n-    function del (target, key) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.splice(key, 1);\r\n-            return\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid deleting properties on a Vue instance or its root $data ' +\r\n-                '- just set it to null.'\r\n-            );\r\n-            return\r\n-        }\r\n-        if (!hasOwn(target, key)) {\r\n-            return\r\n-        }\r\n-        delete target[key];\r\n-        if (!ob) {\r\n-            return\r\n-        }\r\n-        ob.dep.notify();\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Collect dependencies on array elements when the array is touched, since\r\n-     * we cannot intercept array element access like property getters.\r\n-     *\u002F\r\n-    function dependArray (value) {\r\n-        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\r\n-            e = value[i];\r\n-            e && e.__ob__ && e.__ob__.dep.depend();\r\n-            if (Array.isArray(e)) {\r\n-                dependArray(e);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Option overwriting strategies are functions that handle\r\n-     * how to merge a parent option value and a child option\r\n-     * value into the final value.\r\n-     *\u002F\r\n-    var strats = config.optionMergeStrategies;\r\n-\r\n-    \u002F**\r\n-     * Options with restrictions\r\n-     *\u002F\r\n-    {\r\n-        strats.el = strats.propsData = function (parent, child, vm, key) {\r\n-            if (!vm) {\r\n-                warn(\r\n-                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\r\n-                    'creation with the `new` keyword.'\r\n-                );\r\n-            }\r\n-            return defaultStrat(parent, child)\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Helper that recursively merges two data objects together.\r\n-     *\u002F\r\n-    function mergeData (to, from) {\r\n-        if (!from) { return to }\r\n-        var key, toVal, fromVal;\r\n-\r\n-        var keys = hasSymbol\r\n-            ? Reflect.ownKeys(from)\r\n-            : Object.keys(from);\r\n-\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            key = keys[i];\r\n-            \u002F\u002F in case the object is already observed...\r\n-            if (key === '__ob__') { continue }\r\n-            toVal = to[key];\r\n-            fromVal = from[key];\r\n-            if (!hasOwn(to, key)) {\r\n-                set(to, key, fromVal);\r\n-            } else if (\r\n-                toVal !== fromVal &&\r\n-                isPlainObject(toVal) &&\r\n-                isPlainObject(fromVal)\r\n-            ) {\r\n-                mergeData(toVal, fromVal);\r\n-            }\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Data\r\n-     *\u002F\r\n-    function mergeDataOrFn (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            \u002F\u002F in a Vue.extend merge, both should be functions\r\n-            if (!childVal) {\r\n-                return parentVal\r\n-            }\r\n-            if (!parentVal) {\r\n-                return childVal\r\n-            }\r\n-            \u002F\u002F when parentVal & childVal are both present,\r\n-            \u002F\u002F we need to return a function that returns the\r\n-            \u002F\u002F merged result of both functions... no need to\r\n-            \u002F\u002F check if parentVal is a function here because\r\n-            \u002F\u002F it has to be a function to pass previous merges.\r\n-            return function mergedDataFn () {\r\n-                return mergeData(\r\n-                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\r\n-                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\r\n-                )\r\n-            }\r\n-        } else {\r\n-            return function mergedInstanceDataFn () {\r\n-                \u002F\u002F instance merge\r\n-                var instanceData = typeof childVal === 'function'\r\n-                    ? childVal.call(vm, vm)\r\n-                    : childVal;\r\n-                var defaultData = typeof parentVal === 'function'\r\n-                    ? parentVal.call(vm, vm)\r\n-                    : parentVal;\r\n-                if (instanceData) {\r\n-                    return mergeData(instanceData, defaultData)\r\n-                } else {\r\n-                    return defaultData\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    strats.data = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            if (childVal && typeof childVal !== 'function') {\r\n-                warn(\r\n-                    'The \"data\" option should be a function ' +\r\n-                    'that returns a per-instance value in component ' +\r\n-                    'definitions.',\r\n-                    vm\r\n-                );\r\n-\r\n-                return parentVal\r\n-            }\r\n-            return mergeDataOrFn(parentVal, childVal)\r\n-        }\r\n-\r\n-        return mergeDataOrFn(parentVal, childVal, vm)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Hooks and props are merged as arrays.\r\n-     *\u002F\r\n-    function mergeHook (\r\n-        parentVal,\r\n-        childVal\r\n-    ) {\r\n-        var res = childVal\r\n-            ? parentVal\r\n-                ? parentVal.concat(childVal)\r\n-                : Array.isArray(childVal)\r\n-                    ? childVal\r\n-                    : [childVal]\r\n-            : parentVal;\r\n-        return res\r\n-            ? dedupeHooks(res)\r\n-            : res\r\n-    }\r\n-\r\n-    function dedupeHooks (hooks) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C hooks.length; i++) {\r\n-            if (res.indexOf(hooks[i]) === -1) {\r\n-                res.push(hooks[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    LIFECYCLE_HOOKS.forEach(function (hook) {\r\n-        strats[hook] = mergeHook;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Assets\r\n-     *\r\n-     * When a vm is present (instance creation), we need to do\r\n-     * a three-way merge between constructor options, instance\r\n-     * options and parent options.\r\n-     *\u002F\r\n-    function mergeAssets (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        var res = Object.create(parentVal || null);\r\n-        if (childVal) {\r\n-            assertObjectType(key, childVal, vm);\r\n-            return extend(res, childVal)\r\n-        } else {\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    ASSET_TYPES.forEach(function (type) {\r\n-        strats[type + 's'] = mergeAssets;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Watchers.\r\n-     *\r\n-     * Watchers hashes should not overwrite one\r\n-     * another, so we merge them as arrays.\r\n-     *\u002F\r\n-    strats.watch = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        \u002F\u002F work around Firefox's Object.prototype.watch...\r\n-        if (parentVal === nativeWatch) { parentVal = undefined; }\r\n-        if (childVal === nativeWatch) { childVal = undefined; }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!childVal) { return Object.create(parentVal || null) }\r\n-        {\r\n-            assertObjectType(key, childVal, vm);\r\n-        }\r\n-        if (!parentVal) { return childVal }\r\n-        var ret = {};\r\n-        extend(ret, parentVal);\r\n-        for (var key$1 in childVal) {\r\n-            var parent = ret[key$1];\r\n-            var child = childVal[key$1];\r\n-            if (parent && !Array.isArray(parent)) {\r\n-                parent = [parent];\r\n-            }\r\n-            ret[key$1] = parent\r\n-                ? parent.concat(child)\r\n-                : Array.isArray(child) ? child : [child];\r\n-        }\r\n-        return ret\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Other object hashes.\r\n-     *\u002F\r\n-    strats.props =\r\n-        strats.methods =\r\n-            strats.inject =\r\n-                strats.computed = function (\r\n-                    parentVal,\r\n-                    childVal,\r\n-                    vm,\r\n-                    key\r\n-                ) {\r\n-                    if (childVal && \"development\" !== 'production') {\r\n-                        assertObjectType(key, childVal, vm);\r\n-                    }\r\n-                    if (!parentVal) { return childVal }\r\n-                    var ret = Object.create(null);\r\n-                    extend(ret, parentVal);\r\n-                    if (childVal) { extend(ret, childVal); }\r\n-                    return ret\r\n-                };\r\n-    strats.provide = mergeDataOrFn;\r\n-\r\n-    \u002F**\r\n-     * Default strategy.\r\n-     *\u002F\r\n-    var defaultStrat = function (parentVal, childVal) {\r\n-        return childVal === undefined\r\n-            ? parentVal\r\n-            : childVal\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Validate component names\r\n-     *\u002F\r\n-    function checkComponents (options) {\r\n-        for (var key in options.components) {\r\n-            validateComponentName(key);\r\n-        }\r\n-    }\r\n-\r\n-    function validateComponentName (name) {\r\n-        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\r\n-            warn(\r\n-                'Invalid component name: \"' + name + '\". Component names ' +\r\n-                'should conform to valid custom element name in html5 specification.'\r\n-            );\r\n-        }\r\n-        if (isBuiltInTag(name) || config.isReservedTag(name)) {\r\n-            warn(\r\n-                'Do not use built-in or reserved HTML elements as component ' +\r\n-                'id: ' + name\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure all props option syntax are normalized into the\r\n-     * Object-based format.\r\n-     *\u002F\r\n-    function normalizeProps (options, vm) {\r\n-        var props = options.props;\r\n-        if (!props) { return }\r\n-        var res = {};\r\n-        var i, val, name;\r\n-        if (Array.isArray(props)) {\r\n-            i = props.length;\r\n-            while (i--) {\r\n-                val = props[i];\r\n-                if (typeof val === 'string') {\r\n-                    name = camelize(val);\r\n-                    res[name] = { type: null };\r\n-                } else {\r\n-                    warn('props must be strings when using array syntax.');\r\n-                }\r\n-            }\r\n-        } else if (isPlainObject(props)) {\r\n-            for (var key in props) {\r\n-                val = props[key];\r\n-                name = camelize(key);\r\n-                res[name] = isPlainObject(val)\r\n-                    ? val\r\n-                    : { type: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(props)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-        options.props = res;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize all injections into Object-based format\r\n-     *\u002F\r\n-    function normalizeInject (options, vm) {\r\n-        var inject = options.inject;\r\n-        if (!inject) { return }\r\n-        var normalized = options.inject = {};\r\n-        if (Array.isArray(inject)) {\r\n-            for (var i = 0; i \u003C inject.length; i++) {\r\n-                normalized[inject[i]] = { from: inject[i] };\r\n-            }\r\n-        } else if (isPlainObject(inject)) {\r\n-            for (var key in inject) {\r\n-                var val = inject[key];\r\n-                normalized[key] = isPlainObject(val)\r\n-                    ? extend({ from: key }, val)\r\n-                    : { from: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(inject)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize raw function directives into object format.\r\n-     *\u002F\r\n-    function normalizeDirectives (options) {\r\n-        var dirs = options.directives;\r\n-        if (dirs) {\r\n-            for (var key in dirs) {\r\n-                var def$$1 = dirs[key];\r\n-                if (typeof def$$1 === 'function') {\r\n-                    dirs[key] = { bind: def$$1, update: def$$1 };\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function assertObjectType (name, value, vm) {\r\n-        if (!isPlainObject(value)) {\r\n-            warn(\r\n-                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\r\n-                \"but got \" + (toRawType(value)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge two option objects into a new one.\r\n-     * Core utility used in both instantiation and inheritance.\r\n-     *\u002F\r\n-    function mergeOptions (\r\n-        parent,\r\n-        child,\r\n-        vm\r\n-    ) {\r\n-        {\r\n-            checkComponents(child);\r\n-        }\r\n-\r\n-        if (typeof child === 'function') {\r\n-            child = child.options;\r\n-        }\r\n-\r\n-        normalizeProps(child, vm);\r\n-        normalizeInject(child, vm);\r\n-        normalizeDirectives(child);\r\n-\r\n-        \u002F\u002F Apply extends and mixins on the child options,\r\n-        \u002F\u002F but only if it is a raw options object that isn't\r\n-        \u002F\u002F the result of another mergeOptions call.\r\n-        \u002F\u002F Only merged options has the _base property.\r\n-        if (!child._base) {\r\n-            if (child.extends) {\r\n-                parent = mergeOptions(parent, child.extends, vm);\r\n-            }\r\n-            if (child.mixins) {\r\n-                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\r\n-                    parent = mergeOptions(parent, child.mixins[i], vm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var options = {};\r\n-        var key;\r\n-        for (key in parent) {\r\n-            mergeField(key);\r\n-        }\r\n-        for (key in child) {\r\n-            if (!hasOwn(parent, key)) {\r\n-                mergeField(key);\r\n-            }\r\n-        }\r\n-        function mergeField (key) {\r\n-            var strat = strats[key] || defaultStrat;\r\n-            options[key] = strat(parent[key], child[key], vm, key);\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Resolve an asset.\r\n-     * This function is used because child instances need access\r\n-     * to assets defined in its ancestor chain.\r\n-     *\u002F\r\n-    function resolveAsset (\r\n-        options,\r\n-        type,\r\n-        id,\r\n-        warnMissing\r\n-    ) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (typeof id !== 'string') {\r\n-            return\r\n-        }\r\n-        var assets = options[type];\r\n-        \u002F\u002F check local registration variations first\r\n-        if (hasOwn(assets, id)) { return assets[id] }\r\n-        var camelizedId = camelize(id);\r\n-        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\r\n-        var PascalCaseId = capitalize(camelizedId);\r\n-        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\r\n-        \u002F\u002F fallback to prototype chain\r\n-        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\r\n-        if (warnMissing && !res) {\r\n-            warn(\r\n-                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\r\n-                options\r\n-            );\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function validateProp (\r\n-        key,\r\n-        propOptions,\r\n-        propsData,\r\n-        vm\r\n-    ) {\r\n-        var prop = propOptions[key];\r\n-        var absent = !hasOwn(propsData, key);\r\n-        var value = propsData[key];\r\n-        \u002F\u002F boolean casting\r\n-        var booleanIndex = getTypeIndex(Boolean, prop.type);\r\n-        if (booleanIndex > -1) {\r\n-            if (absent && !hasOwn(prop, 'default')) {\r\n-                value = false;\r\n-            } else if (value === '' || value === hyphenate(key)) {\r\n-                \u002F\u002F only cast empty string \u002F same name to boolean if\r\n-                \u002F\u002F boolean has higher priority\r\n-                var stringIndex = getTypeIndex(String, prop.type);\r\n-                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\r\n-                    value = true;\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F check default value\r\n-        if (value === undefined) {\r\n-            value = getPropDefaultValue(vm, prop, key);\r\n-            \u002F\u002F since the default value is a fresh copy,\r\n-            \u002F\u002F make sure to observe it.\r\n-            var prevShouldObserve = shouldObserve;\r\n-            toggleObserving(true);\r\n-            observe(value);\r\n-            toggleObserving(prevShouldObserve);\r\n-        }\r\n-        {\r\n-            assertProp(prop, key, value, vm, absent);\r\n-        }\r\n-        return value\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the default value of a prop.\r\n-     *\u002F\r\n-    function getPropDefaultValue (vm, prop, key) {\r\n-        \u002F\u002F no default, return undefined\r\n-        if (!hasOwn(prop, 'default')) {\r\n-            return undefined\r\n-        }\r\n-        var def = prop.default;\r\n-        \u002F\u002F warn against non-factory defaults for Object & Array\r\n-        if (isObject(def)) {\r\n-            warn(\r\n-                'Invalid default value for prop \"' + key + '\": ' +\r\n-                'Props with type Object\u002FArray must use a factory function ' +\r\n-                'to return the default value.',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F the raw prop value was also undefined from previous render,\r\n-        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\r\n-        if (vm && vm.$options.propsData &&\r\n-            vm.$options.propsData[key] === undefined &&\r\n-            vm._props[key] !== undefined\r\n-        ) {\r\n-            return vm._props[key]\r\n-        }\r\n-        \u002F\u002F call factory function for non-Function types\r\n-        \u002F\u002F a value is Function if its prototype is function even across different execution context\r\n-        return typeof def === 'function' && getType(prop.type) !== 'Function'\r\n-            ? def.call(vm)\r\n-            : def\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Assert whether a prop is valid.\r\n-     *\u002F\r\n-    function assertProp (\r\n-        prop,\r\n-        name,\r\n-        value,\r\n-        vm,\r\n-        absent\r\n-    ) {\r\n-        if (prop.required && absent) {\r\n-            warn(\r\n-                'Missing required prop: \"' + name + '\"',\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        if (value == null && !prop.required) {\r\n-            return\r\n-        }\r\n-        var type = prop.type;\r\n-        var valid = !type || type === true;\r\n-        var expectedTypes = [];\r\n-        if (type) {\r\n-            if (!Array.isArray(type)) {\r\n-                type = [type];\r\n-            }\r\n-            for (var i = 0; i \u003C type.length && !valid; i++) {\r\n-                var assertedType = assertType(value, type[i]);\r\n-                expectedTypes.push(assertedType.expectedType || '');\r\n-                valid = assertedType.valid;\r\n-            }\r\n-        }\r\n-\r\n-        if (!valid) {\r\n-            warn(\r\n-                getInvalidTypeMessage(name, value, expectedTypes),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var validator = prop.validator;\r\n-        if (validator) {\r\n-            if (!validator(value)) {\r\n-                warn(\r\n-                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\r\n-\r\n-    function assertType (value, type) {\r\n-        var valid;\r\n-        var expectedType = getType(type);\r\n-        if (simpleCheckRE.test(expectedType)) {\r\n-            var t = typeof value;\r\n-            valid = t === expectedType.toLowerCase();\r\n-            \u002F\u002F for primitive wrapper objects\r\n-            if (!valid && t === 'object') {\r\n-                valid = value instanceof type;\r\n-            }\r\n-        } else if (expectedType === 'Object') {\r\n-            valid = isPlainObject(value);\r\n-        } else if (expectedType === 'Array') {\r\n-            valid = Array.isArray(value);\r\n-        } else {\r\n-            valid = value instanceof type;\r\n-        }\r\n-        return {\r\n-            valid: valid,\r\n-            expectedType: expectedType\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Use function string name to check built-in types,\r\n-     * because a simple equality check will fail when running\r\n-     * across different vms \u002F iframes.\r\n-     *\u002F\r\n-    function getType (fn) {\r\n-        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\r\n-        return match ? match[1] : ''\r\n-    }\r\n-\r\n-    function isSameType (a, b) {\r\n-        return getType(a) === getType(b)\r\n-    }\r\n-\r\n-    function getTypeIndex (type, expectedTypes) {\r\n-        if (!Array.isArray(expectedTypes)) {\r\n-            return isSameType(expectedTypes, type) ? 0 : -1\r\n-        }\r\n-        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\r\n-            if (isSameType(expectedTypes[i], type)) {\r\n-                return i\r\n-            }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    function getInvalidTypeMessage (name, value, expectedTypes) {\r\n-        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\r\n-            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\r\n-        var expectedType = expectedTypes[0];\r\n-        var receivedType = toRawType(value);\r\n-        var expectedValue = styleValue(value, expectedType);\r\n-        var receivedValue = styleValue(value, receivedType);\r\n-        \u002F\u002F check if we need to specify expected value\r\n-        if (expectedTypes.length === 1 &&\r\n-            isExplicable(expectedType) &&\r\n-            !isBoolean(expectedType, receivedType)) {\r\n-            message += \" with value \" + expectedValue;\r\n-        }\r\n-        message += \", got \" + receivedType + \" \";\r\n-        \u002F\u002F check if we need to specify received value\r\n-        if (isExplicable(receivedType)) {\r\n-            message += \"with value \" + receivedValue + \".\";\r\n-        }\r\n-        return message\r\n-    }\r\n-\r\n-    function styleValue (value, type) {\r\n-        if (type === 'String') {\r\n-            return (\"\\\"\" + value + \"\\\"\")\r\n-        } else if (type === 'Number') {\r\n-            return (\"\" + (Number(value)))\r\n-        } else {\r\n-            return (\"\" + value)\r\n-        }\r\n-    }\r\n-\r\n-    function isExplicable (value) {\r\n-        var explicitTypes = ['string', 'number', 'boolean'];\r\n-        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\r\n-    }\r\n-\r\n-    function isBoolean () {\r\n-        var args = [], len = arguments.length;\r\n-        while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function handleError (err, vm, info) {\r\n-        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\r\n-        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\r\n-        pushTarget();\r\n-        try {\r\n-            if (vm) {\r\n-                var cur = vm;\r\n-                while ((cur = cur.$parent)) {\r\n-                    var hooks = cur.$options.errorCaptured;\r\n-                    if (hooks) {\r\n-                        for (var i = 0; i \u003C hooks.length; i++) {\r\n-                            try {\r\n-                                var capture = hooks[i].call(cur, err, vm, info) === false;\r\n-                                if (capture) { return }\r\n-                            } catch (e) {\r\n-                                globalHandleError(e, cur, 'errorCaptured hook');\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            globalHandleError(err, vm, info);\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    function invokeWithErrorHandling (\r\n-        handler,\r\n-        context,\r\n-        args,\r\n-        vm,\r\n-        info\r\n-    ) {\r\n-        var res;\r\n-        try {\r\n-            res = args ? handler.apply(context, args) : handler.call(context);\r\n-            if (res && !res._isVue && isPromise(res) && !res._handled) {\r\n-                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\r\n-                \u002F\u002F issue #9511\r\n-                \u002F\u002F avoid catch triggering multiple times when nested calls\r\n-                res._handled = true;\r\n-            }\r\n-        } catch (e) {\r\n-            handleError(e, vm, info);\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function globalHandleError (err, vm, info) {\r\n-        if (config.errorHandler) {\r\n-            try {\r\n-                return config.errorHandler.call(null, err, vm, info)\r\n-            } catch (e) {\r\n-                \u002F\u002F if the user intentionally throws the original error in the handler,\r\n-                \u002F\u002F do not log it twice\r\n-                if (e !== err) {\r\n-                    logError(e, null, 'config.errorHandler');\r\n-                }\r\n-            }\r\n-        }\r\n-        logError(err, vm, info);\r\n-    }\r\n-\r\n-    function logError (err, vm, info) {\r\n-        {\r\n-            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\r\n-            console.error(err);\r\n-        } else {\r\n-            throw err\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUsingMicroTask = false;\r\n-\r\n-    var callbacks = [];\r\n-    var pending = false;\r\n-\r\n-    function flushCallbacks () {\r\n-        pending = false;\r\n-        var copies = callbacks.slice(0);\r\n-        callbacks.length = 0;\r\n-        for (var i = 0; i \u003C copies.length; i++) {\r\n-            copies[i]();\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F Here we have async deferring wrappers using microtasks.\r\n-    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\r\n-    \u002F\u002F However, it has subtle problems when state is changed right before repaint\r\n-    \u002F\u002F (e.g. #6813, out-in transitions).\r\n-    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\r\n-    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\r\n-    \u002F\u002F So we now use microtasks everywhere, again.\r\n-    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\r\n-    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\r\n-    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\r\n-    \u002F\u002F or even between bubbling of the same event (#6566).\r\n-    var timerFunc;\r\n-\r\n-    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\r\n-    \u002F\u002F via either native Promise.then or MutationObserver.\r\n-    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\r\n-    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\r\n-    \u002F\u002F completely stops working after triggering a few times... so, if native\r\n-    \u002F\u002F Promise is available, we will use it:\r\n-  \u002F* istanbul ignore next, $flow-disable-line *\u002F\r\n-    if (typeof Promise !== 'undefined' && isNative(Promise)) {\r\n-        var p = Promise.resolve();\r\n-        timerFunc = function () {\r\n-            p.then(flushCallbacks);\r\n-            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\r\n-            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\r\n-            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\r\n-            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\r\n-            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\r\n-            if (isIOS) { setTimeout(noop); }\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\r\n-            isNative(MutationObserver) ||\r\n-            \u002F\u002F PhantomJS and iOS 7.x\r\n-            MutationObserver.toString() === '[object MutationObserverConstructor]'\r\n-        )) {\r\n-        \u002F\u002F Use MutationObserver where native Promise is not available,\r\n-        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\r\n-        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\r\n-        var counter = 1;\r\n-        var observer = new MutationObserver(flushCallbacks);\r\n-        var textNode = document.createTextNode(String(counter));\r\n-        observer.observe(textNode, {\r\n-            characterData: true\r\n-        });\r\n-        timerFunc = function () {\r\n-            counter = (counter + 1) % 2;\r\n-            textNode.data = String(counter);\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\r\n-        \u002F\u002F Fallback to setImmediate.\r\n-        \u002F\u002F Techinically it leverages the (macro) task queue,\r\n-        \u002F\u002F but it is still a better choice than setTimeout.\r\n-        timerFunc = function () {\r\n-            setImmediate(flushCallbacks);\r\n-        };\r\n-    } else {\r\n-        \u002F\u002F Fallback to setTimeout.\r\n-        timerFunc = function () {\r\n-            setTimeout(flushCallbacks, 0);\r\n-        };\r\n-    }\r\n-\r\n-    function nextTick (cb, ctx) {\r\n-        var _resolve;\r\n-        callbacks.push(function () {\r\n-            if (cb) {\r\n-                try {\r\n-                    cb.call(ctx);\r\n-                } catch (e) {\r\n-                    handleError(e, ctx, 'nextTick');\r\n-                }\r\n-            } else if (_resolve) {\r\n-                _resolve(ctx);\r\n-            }\r\n-        });\r\n-        if (!pending) {\r\n-            pending = true;\r\n-            timerFunc();\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        if (!cb && typeof Promise !== 'undefined') {\r\n-            return new Promise(function (resolve) {\r\n-                _resolve = resolve;\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var mark;\r\n-    var measure;\r\n-\r\n-    {\r\n-        var perf = inBrowser && window.performance;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            perf &&\r\n-            perf.mark &&\r\n-            perf.measure &&\r\n-            perf.clearMarks &&\r\n-            perf.clearMeasures\r\n-        ) {\r\n-            mark = function (tag) { return perf.mark(tag); };\r\n-            measure = function (name, startTag, endTag) {\r\n-                perf.measure(name, startTag, endTag);\r\n-                perf.clearMarks(startTag);\r\n-                perf.clearMarks(endTag);\r\n-                \u002F\u002F perf.clearMeasures(name)\r\n-            };\r\n-        }\r\n-    }\r\n-\r\n-  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\r\n-\r\n-    var initProxy;\r\n-\r\n-    {\r\n-        var allowedGlobals = makeMap(\r\n-            'Infinity,undefined,NaN,isFinite,isNaN,' +\r\n-            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\r\n-            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\r\n-            'require' \u002F\u002F for Webpack\u002FBrowserify\r\n-        );\r\n-\r\n-        var warnNonPresent = function (target, key) {\r\n-            warn(\r\n-                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\r\n-                'referenced during render. Make sure that this property is reactive, ' +\r\n-                'either in the data option, or for class-based components, by ' +\r\n-                'initializing the property. ' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var warnReservedPrefix = function (target, key) {\r\n-            warn(\r\n-                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\r\n-                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\r\n-                'prevent conflicts with Vue internals' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var hasProxy =\r\n-            typeof Proxy !== 'undefined' && isNative(Proxy);\r\n-\r\n-        if (hasProxy) {\r\n-            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\r\n-            config.keyCodes = new Proxy(config.keyCodes, {\r\n-                set: function set (target, key, value) {\r\n-                    if (isBuiltInModifier(key)) {\r\n-                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\r\n-                        return false\r\n-                    } else {\r\n-                        target[key] = value;\r\n-                        return true\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        var hasHandler = {\r\n-            has: function has (target, key) {\r\n-                var has = key in target;\r\n-                var isAllowed = allowedGlobals(key) ||\r\n-                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\r\n-                if (!has && !isAllowed) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return has || !isAllowed\r\n-            }\r\n-        };\r\n-\r\n-        var getHandler = {\r\n-            get: function get (target, key) {\r\n-                if (typeof key === 'string' && !(key in target)) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return target[key]\r\n-            }\r\n-        };\r\n-\r\n-        initProxy = function initProxy (vm) {\r\n-            if (hasProxy) {\r\n-                \u002F\u002F determine which proxy handler to use\r\n-                var options = vm.$options;\r\n-                var handlers = options.render && options.render._withStripped\r\n-                    ? getHandler\r\n-                    : hasHandler;\r\n-                vm._renderProxy = new Proxy(vm, handlers);\r\n-            } else {\r\n-                vm._renderProxy = vm;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var seenObjects = new _Set();\r\n-\r\n-    \u002F**\r\n-     * Recursively traverse an object to evoke all converted\r\n-     * getters, so that every nested property inside the object\r\n-     * is collected as a \"deep\" dependency.\r\n-     *\u002F\r\n-    function traverse (val) {\r\n-        _traverse(val, seenObjects);\r\n-        seenObjects.clear();\r\n-    }\r\n-\r\n-    function _traverse (val, seen) {\r\n-        var i, keys;\r\n-        var isA = Array.isArray(val);\r\n-        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\r\n-            return\r\n-        }\r\n-        if (val.__ob__) {\r\n-            var depId = val.__ob__.dep.id;\r\n-            if (seen.has(depId)) {\r\n-                return\r\n-            }\r\n-            seen.add(depId);\r\n-        }\r\n-        if (isA) {\r\n-            i = val.length;\r\n-            while (i--) { _traverse(val[i], seen); }\r\n-        } else {\r\n-            keys = Object.keys(val);\r\n-            i = keys.length;\r\n-            while (i--) { _traverse(val[keys[i]], seen); }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var normalizeEvent = cached(function (name) {\r\n-        var passive = name.charAt(0) === '&';\r\n-        name = passive ? name.slice(1) : name;\r\n-        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\r\n-        name = once$$1 ? name.slice(1) : name;\r\n-        var capture = name.charAt(0) === '!';\r\n-        name = capture ? name.slice(1) : name;\r\n-        return {\r\n-            name: name,\r\n-            once: once$$1,\r\n-            capture: capture,\r\n-            passive: passive\r\n-        }\r\n-    });\r\n-\r\n-    function createFnInvoker (fns, vm) {\r\n-        function invoker () {\r\n-            var arguments$1 = arguments;\r\n-\r\n-            var fns = invoker.fns;\r\n-            if (Array.isArray(fns)) {\r\n-                var cloned = fns.slice();\r\n-                for (var i = 0; i \u003C cloned.length; i++) {\r\n-                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F return handler return value for single handlers\r\n-                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\r\n-            }\r\n-        }\r\n-        invoker.fns = fns;\r\n-        return invoker\r\n-    }\r\n-\r\n-    function updateListeners (\r\n-        on,\r\n-        oldOn,\r\n-        add,\r\n-        remove$$1,\r\n-        createOnceHandler,\r\n-        vm\r\n-    ) {\r\n-        var name, def$$1, cur, old, event;\r\n-        for (name in on) {\r\n-            def$$1 = cur = on[name];\r\n-            old = oldOn[name];\r\n-            event = normalizeEvent(name);\r\n-            if (isUndef(cur)) {\r\n-                warn(\r\n-                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\r\n-                    vm\r\n-                );\r\n-            } else if (isUndef(old)) {\r\n-                if (isUndef(cur.fns)) {\r\n-                    cur = on[name] = createFnInvoker(cur, vm);\r\n-                }\r\n-                if (isTrue(event.once)) {\r\n-                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\r\n-                }\r\n-                add(event.name, cur, event.capture, event.passive, event.params);\r\n-            } else if (cur !== old) {\r\n-                old.fns = cur;\r\n-                on[name] = old;\r\n-            }\r\n-        }\r\n-        for (name in oldOn) {\r\n-            if (isUndef(on[name])) {\r\n-                event = normalizeEvent(name);\r\n-                remove$$1(event.name, oldOn[name], event.capture);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function mergeVNodeHook (def, hookKey, hook) {\r\n-        if (def instanceof VNode) {\r\n-            def = def.data.hook || (def.data.hook = {});\r\n-        }\r\n-        var invoker;\r\n-        var oldHook = def[hookKey];\r\n-\r\n-        function wrappedHook () {\r\n-            hook.apply(this, arguments);\r\n-            \u002F\u002F important: remove merged hook to ensure it's called only once\r\n-            \u002F\u002F and prevent memory leak\r\n-            remove(invoker.fns, wrappedHook);\r\n-        }\r\n-\r\n-        if (isUndef(oldHook)) {\r\n-            \u002F\u002F no existing hook\r\n-            invoker = createFnInvoker([wrappedHook]);\r\n-        } else {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\r\n-                \u002F\u002F already a merged invoker\r\n-                invoker = oldHook;\r\n-                invoker.fns.push(wrappedHook);\r\n-            } else {\r\n-                \u002F\u002F existing plain hook\r\n-                invoker = createFnInvoker([oldHook, wrappedHook]);\r\n-            }\r\n-        }\r\n-\r\n-        invoker.merged = true;\r\n-        def[hookKey] = invoker;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function extractPropsFromVNodeData (\r\n-        data,\r\n-        Ctor,\r\n-        tag\r\n-    ) {\r\n-        \u002F\u002F we are only extracting raw values here.\r\n-        \u002F\u002F validation and default values are handled in the child\r\n-        \u002F\u002F component itself.\r\n-        var propOptions = Ctor.options.props;\r\n-        if (isUndef(propOptions)) {\r\n-            return\r\n-        }\r\n-        var res = {};\r\n-        var attrs = data.attrs;\r\n-        var props = data.props;\r\n-        if (isDef(attrs) || isDef(props)) {\r\n-            for (var key in propOptions) {\r\n-                var altKey = hyphenate(key);\r\n-                {\r\n-                    var keyInLowerCase = key.toLowerCase();\r\n-                    if (\r\n-                        key !== keyInLowerCase &&\r\n-                        attrs && hasOwn(attrs, keyInLowerCase)\r\n-                    ) {\r\n-                        tip(\r\n-                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\r\n-                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\r\n-                            \" \\\"\" + key + \"\\\". \" +\r\n-                            \"Note that HTML attributes are case-insensitive and camelCased \" +\r\n-                            \"props need to use their kebab-case equivalents when using in-DOM \" +\r\n-                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\r\n-                        );\r\n-                    }\r\n-                }\r\n-                checkProp(res, props, key, altKey, true) ||\r\n-                checkProp(res, attrs, key, altKey, false);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkProp (\r\n-        res,\r\n-        hash,\r\n-        key,\r\n-        altKey,\r\n-        preserve\r\n-    ) {\r\n-        if (isDef(hash)) {\r\n-            if (hasOwn(hash, key)) {\r\n-                res[key] = hash[key];\r\n-                if (!preserve) {\r\n-                    delete hash[key];\r\n-                }\r\n-                return true\r\n-            } else if (hasOwn(hash, altKey)) {\r\n-                res[key] = hash[altKey];\r\n-                if (!preserve) {\r\n-                    delete hash[altKey];\r\n-                }\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F The template compiler attempts to minimize the need for normalization by\r\n-    \u002F\u002F statically analyzing the template at compile time.\r\n-    \u002F\u002F\r\n-    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\r\n-    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\r\n-    \u002F\u002F two cases where extra normalization is needed:\r\n-\r\n-    \u002F\u002F 1. When the children contains components - because a functional component\r\n-    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\r\n-    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\r\n-    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\r\n-    \u002F\u002F because functional components already normalize their own children.\r\n-    function simpleNormalizeChildren (children) {\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            if (Array.isArray(children[i])) {\r\n-                return Array.prototype.concat.apply([], children)\r\n-            }\r\n-        }\r\n-        return children\r\n-    }\r\n-\r\n-    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\r\n-    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\r\n-    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\r\n-    \u002F\u002F is needed to cater to all possible types of children values.\r\n-    function normalizeChildren (children) {\r\n-        return isPrimitive(children)\r\n-            ? [createTextVNode(children)]\r\n-            : Array.isArray(children)\r\n-                ? normalizeArrayChildren(children)\r\n-                : undefined\r\n-    }\r\n-\r\n-    function isTextNode (node) {\r\n-        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\r\n-    }\r\n-\r\n-    function normalizeArrayChildren (children, nestedIndex) {\r\n-        var res = [];\r\n-        var i, c, lastIndex, last;\r\n-        for (i = 0; i \u003C children.length; i++) {\r\n-            c = children[i];\r\n-            if (isUndef(c) || typeof c === 'boolean') { continue }\r\n-            lastIndex = res.length - 1;\r\n-            last = res[lastIndex];\r\n-            \u002F\u002F  nested\r\n-            if (Array.isArray(c)) {\r\n-                if (c.length > 0) {\r\n-                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    if (isTextNode(c[0]) && isTextNode(last)) {\r\n-                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\r\n-                        c.shift();\r\n-                    }\r\n-                    res.push.apply(res, c);\r\n-                }\r\n-            } else if (isPrimitive(c)) {\r\n-                if (isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    \u002F\u002F this is necessary for SSR hydration because text nodes are\r\n-                    \u002F\u002F essentially merged when rendered to HTML strings\r\n-                    res[lastIndex] = createTextVNode(last.text + c);\r\n-                } else if (c !== '') {\r\n-                    \u002F\u002F convert primitive to vnode\r\n-                    res.push(createTextVNode(c));\r\n-                }\r\n-            } else {\r\n-                if (isTextNode(c) && isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    res[lastIndex] = createTextVNode(last.text + c.text);\r\n-                } else {\r\n-                    \u002F\u002F default key for nested array children (likely generated by v-for)\r\n-                    if (isTrue(children._isVList) &&\r\n-                        isDef(c.tag) &&\r\n-                        isUndef(c.key) &&\r\n-                        isDef(nestedIndex)) {\r\n-                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\r\n-                    }\r\n-                    res.push(c);\r\n-                }\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initProvide (vm) {\r\n-        var provide = vm.$options.provide;\r\n-        if (provide) {\r\n-            vm._provided = typeof provide === 'function'\r\n-                ? provide.call(vm)\r\n-                : provide;\r\n-        }\r\n-    }\r\n-\r\n-    function initInjections (vm) {\r\n-        var result = resolveInject(vm.$options.inject, vm);\r\n-        if (result) {\r\n-            toggleObserving(false);\r\n-            Object.keys(result).forEach(function (key) {\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                {\r\n-                    defineReactive$$1(vm, key, result[key], function () {\r\n-                        warn(\r\n-                            \"Avoid mutating an injected value directly since the changes will be \" +\r\n-                            \"overwritten whenever the provided component re-renders. \" +\r\n-                            \"injection being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    });\r\n-                }\r\n-            });\r\n-            toggleObserving(true);\r\n-        }\r\n-    }\r\n-\r\n-    function resolveInject (inject, vm) {\r\n-        if (inject) {\r\n-            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\r\n-            var result = Object.create(null);\r\n-            var keys = hasSymbol\r\n-                ? Reflect.ownKeys(inject)\r\n-                : Object.keys(inject);\r\n-\r\n-            for (var i = 0; i \u003C keys.length; i++) {\r\n-                var key = keys[i];\r\n-                \u002F\u002F #6574 in case the inject object is observed...\r\n-                if (key === '__ob__') { continue }\r\n-                var provideKey = inject[key].from;\r\n-                var source = vm;\r\n-                while (source) {\r\n-                    if (source._provided && hasOwn(source._provided, provideKey)) {\r\n-                        result[key] = source._provided[provideKey];\r\n-                        break\r\n-                    }\r\n-                    source = source.$parent;\r\n-                }\r\n-                if (!source) {\r\n-                    if ('default' in inject[key]) {\r\n-                        var provideDefault = inject[key].default;\r\n-                        result[key] = typeof provideDefault === 'function'\r\n-                            ? provideDefault.call(vm)\r\n-                            : provideDefault;\r\n-                    } else {\r\n-                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\r\n-                    }\r\n-                }\r\n-            }\r\n-            return result\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving raw children VNodes into a slot object.\r\n-     *\u002F\r\n-    function resolveSlots (\r\n-        children,\r\n-        context\r\n-    ) {\r\n-        if (!children || !children.length) {\r\n-            return {}\r\n-        }\r\n-        var slots = {};\r\n-        for (var i = 0, l = children.length; i \u003C l; i++) {\r\n-            var child = children[i];\r\n-            var data = child.data;\r\n-            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\r\n-            if (data && data.attrs && data.attrs.slot) {\r\n-                delete data.attrs.slot;\r\n-            }\r\n-            \u002F\u002F named slots should only be respected if the vnode was rendered in the\r\n-            \u002F\u002F same context.\r\n-            if ((child.context === context || child.fnContext === context) &&\r\n-                data && data.slot != null\r\n-            ) {\r\n-                var name = data.slot;\r\n-                var slot = (slots[name] || (slots[name] = []));\r\n-                if (child.tag === 'template') {\r\n-                    slot.push.apply(slot, child.children || []);\r\n-                } else {\r\n-                    slot.push(child);\r\n-                }\r\n-            } else {\r\n-                (slots.default || (slots.default = [])).push(child);\r\n-            }\r\n-        }\r\n-        \u002F\u002F ignore slots that contains only whitespace\r\n-        for (var name$1 in slots) {\r\n-            if (slots[name$1].every(isWhitespace)) {\r\n-                delete slots[name$1];\r\n-            }\r\n-        }\r\n-        return slots\r\n-    }\r\n-\r\n-    function isWhitespace (node) {\r\n-        return (node.isComment && !node.asyncFactory) || node.text === ' '\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function normalizeScopedSlots (\r\n-        slots,\r\n-        normalSlots,\r\n-        prevSlots\r\n-    ) {\r\n-        var res;\r\n-        var hasNormalSlots = Object.keys(normalSlots).length > 0;\r\n-        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\r\n-        var key = slots && slots.$key;\r\n-        if (!slots) {\r\n-            res = {};\r\n-        } else if (slots._normalized) {\r\n-            \u002F\u002F fast path 1: child component re-render only, parent did not change\r\n-            return slots._normalized\r\n-        } else if (\r\n-            isStable &&\r\n-            prevSlots &&\r\n-            prevSlots !== emptyObject &&\r\n-            key === prevSlots.$key &&\r\n-            !hasNormalSlots &&\r\n-            !prevSlots.$hasNormal\r\n-        ) {\r\n-            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\r\n-            \u002F\u002F only need to normalize once\r\n-            return prevSlots\r\n-        } else {\r\n-            res = {};\r\n-            for (var key$1 in slots) {\r\n-                if (slots[key$1] && key$1[0] !== '$') {\r\n-                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F expose normal slots on scopedSlots\r\n-        for (var key$2 in normalSlots) {\r\n-            if (!(key$2 in res)) {\r\n-                res[key$2] = proxyNormalSlot(normalSlots, key$2);\r\n-            }\r\n-        }\r\n-        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\r\n-        \u002F\u002F and when that is passed down this would cause an error\r\n-        if (slots && Object.isExtensible(slots)) {\r\n-            (slots)._normalized = res;\r\n-        }\r\n-        def(res, '$stable', isStable);\r\n-        def(res, '$key', key);\r\n-        def(res, '$hasNormal', hasNormalSlots);\r\n-        return res\r\n-    }\r\n-\r\n-    function normalizeScopedSlot(normalSlots, key, fn) {\r\n-        var normalized = function () {\r\n-            var res = arguments.length ? fn.apply(null, arguments) : fn({});\r\n-            res = res && typeof res === 'object' && !Array.isArray(res)\r\n-                ? [res] \u002F\u002F single vnode\r\n-                : normalizeChildren(res);\r\n-            return res && (\r\n-                res.length === 0 ||\r\n-                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\r\n-            ) ? undefined\r\n-                : res\r\n-        };\r\n-        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\r\n-        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\r\n-        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\r\n-        if (fn.proxy) {\r\n-            Object.defineProperty(normalSlots, key, {\r\n-                get: normalized,\r\n-                enumerable: true,\r\n-                configurable: true\r\n-            });\r\n-        }\r\n-        return normalized\r\n-    }\r\n-\r\n-    function proxyNormalSlot(slots, key) {\r\n-        return function () { return slots[key]; }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering v-for lists.\r\n-     *\u002F\r\n-    function renderList (\r\n-        val,\r\n-        render\r\n-    ) {\r\n-        var ret, i, l, keys, key;\r\n-        if (Array.isArray(val) || typeof val === 'string') {\r\n-            ret = new Array(val.length);\r\n-            for (i = 0, l = val.length; i \u003C l; i++) {\r\n-                ret[i] = render(val[i], i);\r\n-            }\r\n-        } else if (typeof val === 'number') {\r\n-            ret = new Array(val);\r\n-            for (i = 0; i \u003C val; i++) {\r\n-                ret[i] = render(i + 1, i);\r\n-            }\r\n-        } else if (isObject(val)) {\r\n-            if (hasSymbol && val[Symbol.iterator]) {\r\n-                ret = [];\r\n-                var iterator = val[Symbol.iterator]();\r\n-                var result = iterator.next();\r\n-                while (!result.done) {\r\n-                    ret.push(render(result.value, ret.length));\r\n-                    result = iterator.next();\r\n-                }\r\n-            } else {\r\n-                keys = Object.keys(val);\r\n-                ret = new Array(keys.length);\r\n-                for (i = 0, l = keys.length; i \u003C l; i++) {\r\n-                    key = keys[i];\r\n-                    ret[i] = render(val[key], key, i);\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isDef(ret)) {\r\n-            ret = [];\r\n-        }\r\n-        (ret)._isVList = true;\r\n-        return ret\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering \u003Cslot>\r\n-     *\u002F\r\n-    function renderSlot (\r\n-        name,\r\n-        fallback,\r\n-        props,\r\n-        bindObject\r\n-    ) {\r\n-        var scopedSlotFn = this.$scopedSlots[name];\r\n-        var nodes;\r\n-        if (scopedSlotFn) { \u002F\u002F scoped slot\r\n-            props = props || {};\r\n-            if (bindObject) {\r\n-                if (!isObject(bindObject)) {\r\n-                    warn(\r\n-                        'slot v-bind without argument expects an Object',\r\n-                        this\r\n-                    );\r\n-                }\r\n-                props = extend(extend({}, bindObject), props);\r\n-            }\r\n-            nodes = scopedSlotFn(props) || fallback;\r\n-        } else {\r\n-            nodes = this.$slots[name] || fallback;\r\n-        }\r\n-\r\n-        var target = props && props.slot;\r\n-        if (target) {\r\n-            return this.$createElement('template', { slot: target }, nodes)\r\n-        } else {\r\n-            return nodes\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving filters\r\n-     *\u002F\r\n-    function resolveFilter (id) {\r\n-        return resolveAsset(this.$options, 'filters', id, true) || identity\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isKeyNotMatch (expect, actual) {\r\n-        if (Array.isArray(expect)) {\r\n-            return expect.indexOf(actual) === -1\r\n-        } else {\r\n-            return expect !== actual\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for checking keyCodes from config.\r\n-     * exposed as Vue.prototype._k\r\n-     * passing in eventKeyName as last argument separately for backwards compat\r\n-     *\u002F\r\n-    function checkKeyCodes (\r\n-        eventKeyCode,\r\n-        key,\r\n-        builtInKeyCode,\r\n-        eventKeyName,\r\n-        builtInKeyName\r\n-    ) {\r\n-        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\r\n-        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\r\n-            return isKeyNotMatch(builtInKeyName, eventKeyName)\r\n-        } else if (mappedKeyCode) {\r\n-            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\r\n-        } else if (eventKeyName) {\r\n-            return hyphenate(eventKeyName) !== key\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\r\n-     *\u002F\r\n-    function bindObjectProps (\r\n-        data,\r\n-        tag,\r\n-        value,\r\n-        asProp,\r\n-        isSync\r\n-    ) {\r\n-        if (value) {\r\n-            if (!isObject(value)) {\r\n-                warn(\r\n-                    'v-bind without argument expects an Object or Array value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                if (Array.isArray(value)) {\r\n-                    value = toObject(value);\r\n-                }\r\n-                var hash;\r\n-                var loop = function ( key ) {\r\n-                    if (\r\n-                        key === 'class' ||\r\n-                        key === 'style' ||\r\n-                        isReservedAttribute(key)\r\n-                    ) {\r\n-                        hash = data;\r\n-                    } else {\r\n-                        var type = data.attrs && data.attrs.type;\r\n-                        hash = asProp || config.mustUseProp(tag, type, key)\r\n-                            ? data.domProps || (data.domProps = {})\r\n-                            : data.attrs || (data.attrs = {});\r\n-                    }\r\n-                    var camelizedKey = camelize(key);\r\n-                    var hyphenatedKey = hyphenate(key);\r\n-                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\r\n-                        hash[key] = value[key];\r\n-\r\n-                        if (isSync) {\r\n-                            var on = data.on || (data.on = {});\r\n-                            on[(\"update:\" + key)] = function ($event) {\r\n-                                value[key] = $event;\r\n-                            };\r\n-                        }\r\n-                    }\r\n-                };\r\n-\r\n-                for (var key in value) loop( key );\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering static trees.\r\n-     *\u002F\r\n-    function renderStatic (\r\n-        index,\r\n-        isInFor\r\n-    ) {\r\n-        var cached = this._staticTrees || (this._staticTrees = []);\r\n-        var tree = cached[index];\r\n-        \u002F\u002F if has already-rendered static tree and not inside v-for,\r\n-        \u002F\u002F we can reuse the same tree.\r\n-        if (tree && !isInFor) {\r\n-            return tree\r\n-        }\r\n-        \u002F\u002F otherwise, render a fresh tree.\r\n-        tree = cached[index] = this.$options.staticRenderFns[index].call(\r\n-            this._renderProxy,\r\n-            null,\r\n-            this \u002F\u002F for render fns generated for functional component templates\r\n-        );\r\n-        markStatic(tree, (\"__static__\" + index), false);\r\n-        return tree\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for v-once.\r\n-     * Effectively it means marking the node as static with a unique key.\r\n-     *\u002F\r\n-    function markOnce (\r\n-        tree,\r\n-        index,\r\n-        key\r\n-    ) {\r\n-        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\r\n-        return tree\r\n-    }\r\n-\r\n-    function markStatic (\r\n-        tree,\r\n-        key,\r\n-        isOnce\r\n-    ) {\r\n-        if (Array.isArray(tree)) {\r\n-            for (var i = 0; i \u003C tree.length; i++) {\r\n-                if (tree[i] && typeof tree[i] !== 'string') {\r\n-                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\r\n-                }\r\n-            }\r\n-        } else {\r\n-            markStaticNode(tree, key, isOnce);\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticNode (node, key, isOnce) {\r\n-        node.isStatic = true;\r\n-        node.key = key;\r\n-        node.isOnce = isOnce;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindObjectListeners (data, value) {\r\n-        if (value) {\r\n-            if (!isPlainObject(value)) {\r\n-                warn(\r\n-                    'v-on without argument expects an Object value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                var on = data.on = data.on ? extend({}, data.on) : {};\r\n-                for (var key in value) {\r\n-                    var existing = on[key];\r\n-                    var ours = value[key];\r\n-                    on[key] = existing ? [].concat(existing, ours) : ours;\r\n-                }\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveScopedSlots (\r\n-        fns, \u002F\u002F see flow\u002Fvnode\r\n-        res,\r\n-        \u002F\u002F the following are added in 2.6\r\n-        hasDynamicKeys,\r\n-        contentHashKey\r\n-    ) {\r\n-        res = res || { $stable: !hasDynamicKeys };\r\n-        for (var i = 0; i \u003C fns.length; i++) {\r\n-            var slot = fns[i];\r\n-            if (Array.isArray(slot)) {\r\n-                resolveScopedSlots(slot, res, hasDynamicKeys);\r\n-            } else if (slot) {\r\n-                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\r\n-                if (slot.proxy) {\r\n-                    slot.fn.proxy = true;\r\n-                }\r\n-                res[slot.key] = slot.fn;\r\n-            }\r\n-        }\r\n-        if (contentHashKey) {\r\n-            (res).$key = contentHashKey;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindDynamicKeys (baseObj, values) {\r\n-        for (var i = 0; i \u003C values.length; i += 2) {\r\n-            var key = values[i];\r\n-            if (typeof key === 'string' && key) {\r\n-                baseObj[values[i]] = values[i + 1];\r\n-            } else if (key !== '' && key !== null) {\r\n-                \u002F\u002F null is a speical value for explicitly removing a binding\r\n-                warn(\r\n-                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\r\n-                    this\r\n-                );\r\n-            }\r\n-        }\r\n-        return baseObj\r\n-    }\r\n-\r\n-    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\r\n-    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\r\n-    \u002F\u002F to string and cause the type check to miss.\r\n-    function prependModifier (value, symbol) {\r\n-        return typeof value === 'string' ? symbol + value : value\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function installRenderHelpers (target) {\r\n-        target._o = markOnce;\r\n-        target._n = toNumber;\r\n-        target._s = toString;\r\n-        target._l = renderList;\r\n-        target._t = renderSlot;\r\n-        target._q = looseEqual;\r\n-        target._i = looseIndexOf;\r\n-        target._m = renderStatic;\r\n-        target._f = resolveFilter;\r\n-        target._k = checkKeyCodes;\r\n-        target._b = bindObjectProps;\r\n-        target._v = createTextVNode;\r\n-        target._e = createEmptyVNode;\r\n-        target._u = resolveScopedSlots;\r\n-        target._g = bindObjectListeners;\r\n-        target._d = bindDynamicKeys;\r\n-        target._p = prependModifier;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function FunctionalRenderContext (\r\n-        data,\r\n-        props,\r\n-        children,\r\n-        parent,\r\n-        Ctor\r\n-    ) {\r\n-        var this$1 = this;\r\n-\r\n-        var options = Ctor.options;\r\n-        \u002F\u002F ensure the createElement function in functional components\r\n-        \u002F\u002F gets a unique context - this is necessary for correct named slot check\r\n-        var contextVm;\r\n-        if (hasOwn(parent, '_uid')) {\r\n-            contextVm = Object.create(parent);\r\n-            \u002F\u002F $flow-disable-line\r\n-            contextVm._original = parent;\r\n-        } else {\r\n-            \u002F\u002F the context vm passed in is a functional context as well.\r\n-            \u002F\u002F in this case we want to make sure we are able to get a hold to the\r\n-            \u002F\u002F real context instance.\r\n-            contextVm = parent;\r\n-            \u002F\u002F $flow-disable-line\r\n-            parent = parent._original;\r\n-        }\r\n-        var isCompiled = isTrue(options._compiled);\r\n-        var needNormalization = !isCompiled;\r\n-\r\n-        this.data = data;\r\n-        this.props = props;\r\n-        this.children = children;\r\n-        this.parent = parent;\r\n-        this.listeners = data.on || emptyObject;\r\n-        this.injections = resolveInject(options.inject, parent);\r\n-        this.slots = function () {\r\n-            if (!this$1.$slots) {\r\n-                normalizeScopedSlots(\r\n-                    data.scopedSlots,\r\n-                    this$1.$slots = resolveSlots(children, parent)\r\n-                );\r\n-            }\r\n-            return this$1.$slots\r\n-        };\r\n-\r\n-        Object.defineProperty(this, 'scopedSlots', ({\r\n-            enumerable: true,\r\n-            get: function get () {\r\n-                return normalizeScopedSlots(data.scopedSlots, this.slots())\r\n-            }\r\n-        }));\r\n-\r\n-        \u002F\u002F support for compiled functional template\r\n-        if (isCompiled) {\r\n-            \u002F\u002F exposing $options for renderStatic()\r\n-            this.$options = options;\r\n-            \u002F\u002F pre-resolve slots for renderSlot()\r\n-            this.$slots = this.slots();\r\n-            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\r\n-        }\r\n-\r\n-        if (options._scopeId) {\r\n-            this._c = function (a, b, c, d) {\r\n-                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\r\n-                if (vnode && !Array.isArray(vnode)) {\r\n-                    vnode.fnScopeId = options._scopeId;\r\n-                    vnode.fnContext = parent;\r\n-                }\r\n-                return vnode\r\n-            };\r\n-        } else {\r\n-            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\r\n-        }\r\n-    }\r\n-\r\n-    installRenderHelpers(FunctionalRenderContext.prototype);\r\n-\r\n-    function createFunctionalComponent (\r\n-        Ctor,\r\n-        propsData,\r\n-        data,\r\n-        contextVm,\r\n-        children\r\n-    ) {\r\n-        var options = Ctor.options;\r\n-        var props = {};\r\n-        var propOptions = options.props;\r\n-        if (isDef(propOptions)) {\r\n-            for (var key in propOptions) {\r\n-                props[key] = validateProp(key, propOptions, propsData || emptyObject);\r\n-            }\r\n-        } else {\r\n-            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\r\n-            if (isDef(data.props)) { mergeProps(props, data.props); }\r\n-        }\r\n-\r\n-        var renderContext = new FunctionalRenderContext(\r\n-            data,\r\n-            props,\r\n-            children,\r\n-            contextVm,\r\n-            Ctor\r\n-        );\r\n-\r\n-        var vnode = options.render.call(null, renderContext._c, renderContext);\r\n-\r\n-        if (vnode instanceof VNode) {\r\n-            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\r\n-        } else if (Array.isArray(vnode)) {\r\n-            var vnodes = normalizeChildren(vnode) || [];\r\n-            var res = new Array(vnodes.length);\r\n-            for (var i = 0; i \u003C vnodes.length; i++) {\r\n-                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\r\n-            }\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\r\n-        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\r\n-        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\r\n-        \u002F\u002F that should not be matched to match.\r\n-        var clone = cloneVNode(vnode);\r\n-        clone.fnContext = contextVm;\r\n-        clone.fnOptions = options;\r\n-        {\r\n-            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\r\n-        }\r\n-        if (data.slot) {\r\n-            (clone.data || (clone.data = {})).slot = data.slot;\r\n-        }\r\n-        return clone\r\n-    }\r\n-\r\n-    function mergeProps (to, from) {\r\n-        for (var key in from) {\r\n-            to[camelize(key)] = from[key];\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F inline hooks to be invoked on component VNodes during patch\r\n-    var componentVNodeHooks = {\r\n-        init: function init (vnode, hydrating) {\r\n-            if (\r\n-                vnode.componentInstance &&\r\n-                !vnode.componentInstance._isDestroyed &&\r\n-                vnode.data.keepAlive\r\n-            ) {\r\n-                \u002F\u002F kept-alive components, treat as a patch\r\n-                var mountedNode = vnode; \u002F\u002F work around flow\r\n-                componentVNodeHooks.prepatch(mountedNode, mountedNode);\r\n-            } else {\r\n-                var child = vnode.componentInstance = createComponentInstanceForVnode(\r\n-                    vnode,\r\n-                    activeInstance\r\n-                );\r\n-                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\r\n-            }\r\n-        },\r\n-\r\n-        prepatch: function prepatch (oldVnode, vnode) {\r\n-            var options = vnode.componentOptions;\r\n-            var child = vnode.componentInstance = oldVnode.componentInstance;\r\n-            updateChildComponent(\r\n-                child,\r\n-                options.propsData, \u002F\u002F updated props\r\n-                options.listeners, \u002F\u002F updated listeners\r\n-                vnode, \u002F\u002F new parent vnode\r\n-                options.children \u002F\u002F new children\r\n-            );\r\n-        },\r\n-\r\n-        insert: function insert (vnode) {\r\n-            var context = vnode.context;\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isMounted) {\r\n-                componentInstance._isMounted = true;\r\n-                callHook(componentInstance, 'mounted');\r\n-            }\r\n-            if (vnode.data.keepAlive) {\r\n-                if (context._isMounted) {\r\n-                    \u002F\u002F vue-router#1212\r\n-                    \u002F\u002F During updates, a kept-alive component's child components may\r\n-                    \u002F\u002F change, so directly walking the tree here may call activated hooks\r\n-                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\r\n-                    \u002F\u002F be processed after the whole patch process ended.\r\n-                    queueActivatedComponent(componentInstance);\r\n-                } else {\r\n-                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        destroy: function destroy (vnode) {\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isDestroyed) {\r\n-                if (!vnode.data.keepAlive) {\r\n-                    componentInstance.$destroy();\r\n-                } else {\r\n-                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var hooksToMerge = Object.keys(componentVNodeHooks);\r\n-\r\n-    function createComponent (\r\n-        Ctor,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        if (isUndef(Ctor)) {\r\n-            return\r\n-        }\r\n-\r\n-        var baseCtor = context.$options._base;\r\n-\r\n-        \u002F\u002F plain options object: turn it into a constructor\r\n-        if (isObject(Ctor)) {\r\n-            Ctor = baseCtor.extend(Ctor);\r\n-        }\r\n-\r\n-        \u002F\u002F if at this stage it's not a constructor or an async component factory,\r\n-        \u002F\u002F reject.\r\n-        if (typeof Ctor !== 'function') {\r\n-            {\r\n-                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F async component\r\n-        var asyncFactory;\r\n-        if (isUndef(Ctor.cid)) {\r\n-            asyncFactory = Ctor;\r\n-            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\r\n-            if (Ctor === undefined) {\r\n-                \u002F\u002F return a placeholder node for async component, which is rendered\r\n-                \u002F\u002F as a comment node but preserves all the raw information for the node.\r\n-                \u002F\u002F the information will be used for async server-rendering and hydration.\r\n-                return createAsyncPlaceholder(\r\n-                    asyncFactory,\r\n-                    data,\r\n-                    context,\r\n-                    children,\r\n-                    tag\r\n-                )\r\n-            }\r\n-        }\r\n-\r\n-        data = data || {};\r\n-\r\n-        \u002F\u002F resolve constructor options in case global mixins are applied after\r\n-        \u002F\u002F component constructor creation\r\n-        resolveConstructorOptions(Ctor);\r\n-\r\n-        \u002F\u002F transform component v-model data into props & events\r\n-        if (isDef(data.model)) {\r\n-            transformModel(Ctor.options, data);\r\n-        }\r\n-\r\n-        \u002F\u002F extract props\r\n-        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\r\n-\r\n-        \u002F\u002F functional component\r\n-        if (isTrue(Ctor.options.functional)) {\r\n-            return createFunctionalComponent(Ctor, propsData, data, context, children)\r\n-        }\r\n-\r\n-        \u002F\u002F extract listeners, since these needs to be treated as\r\n-        \u002F\u002F child component listeners instead of DOM listeners\r\n-        var listeners = data.on;\r\n-        \u002F\u002F replace with listeners with .native modifier\r\n-        \u002F\u002F so it gets processed during parent component patch.\r\n-        data.on = data.nativeOn;\r\n-\r\n-        if (isTrue(Ctor.options.abstract)) {\r\n-            \u002F\u002F abstract components do not keep anything\r\n-            \u002F\u002F other than props & listeners & slot\r\n-\r\n-            \u002F\u002F work around flow\r\n-            var slot = data.slot;\r\n-            data = {};\r\n-            if (slot) {\r\n-                data.slot = slot;\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F install component management hooks onto the placeholder node\r\n-        installComponentHooks(data);\r\n-\r\n-        \u002F\u002F return a placeholder vnode\r\n-        var name = Ctor.options.name || tag;\r\n-        var vnode = new VNode(\r\n-            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\r\n-            data, undefined, undefined, undefined, context,\r\n-            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\r\n-            asyncFactory\r\n-        );\r\n-\r\n-        return vnode\r\n-    }\r\n-\r\n-    function createComponentInstanceForVnode (\r\n-        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\r\n-        parent \u002F\u002F activeInstance in lifecycle state\r\n-    ) {\r\n-        var options = {\r\n-            _isComponent: true,\r\n-            _parentVnode: vnode,\r\n-            parent: parent\r\n-        };\r\n-        \u002F\u002F check inline-template render functions\r\n-        var inlineTemplate = vnode.data.inlineTemplate;\r\n-        if (isDef(inlineTemplate)) {\r\n-            options.render = inlineTemplate.render;\r\n-            options.staticRenderFns = inlineTemplate.staticRenderFns;\r\n-        }\r\n-        return new vnode.componentOptions.Ctor(options)\r\n-    }\r\n-\r\n-    function installComponentHooks (data) {\r\n-        var hooks = data.hook || (data.hook = {});\r\n-        for (var i = 0; i \u003C hooksToMerge.length; i++) {\r\n-            var key = hooksToMerge[i];\r\n-            var existing = hooks[key];\r\n-            var toMerge = componentVNodeHooks[key];\r\n-            if (existing !== toMerge && !(existing && existing._merged)) {\r\n-                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function mergeHook$1 (f1, f2) {\r\n-        var merged = function (a, b) {\r\n-            \u002F\u002F flow complains about extra args which is why we use any\r\n-            f1(a, b);\r\n-            f2(a, b);\r\n-        };\r\n-        merged._merged = true;\r\n-        return merged\r\n-    }\r\n-\r\n-    \u002F\u002F transform component v-model info (value and callback) into\r\n-    \u002F\u002F prop and event handler respectively.\r\n-    function transformModel (options, data) {\r\n-        var prop = (options.model && options.model.prop) || 'value';\r\n-        var event = (options.model && options.model.event) || 'input'\r\n-        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\r\n-        var on = data.on || (data.on = {});\r\n-        var existing = on[event];\r\n-        var callback = data.model.callback;\r\n-        if (isDef(existing)) {\r\n-            if (\r\n-                Array.isArray(existing)\r\n-                    ? existing.indexOf(callback) === -1\r\n-                    : existing !== callback\r\n-            ) {\r\n-                on[event] = [callback].concat(existing);\r\n-            }\r\n-        } else {\r\n-            on[event] = callback;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var SIMPLE_NORMALIZE = 1;\r\n-    var ALWAYS_NORMALIZE = 2;\r\n-\r\n-    \u002F\u002F wrapper function for providing a more flexible interface\r\n-    \u002F\u002F without getting yelled at by flow\r\n-    function createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType,\r\n-        alwaysNormalize\r\n-    ) {\r\n-        if (Array.isArray(data) || isPrimitive(data)) {\r\n-            normalizationType = children;\r\n-            children = data;\r\n-            data = undefined;\r\n-        }\r\n-        if (isTrue(alwaysNormalize)) {\r\n-            normalizationType = ALWAYS_NORMALIZE;\r\n-        }\r\n-        return _createElement(context, tag, data, children, normalizationType)\r\n-    }\r\n-\r\n-    function _createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType\r\n-    ) {\r\n-        if (isDef(data) && isDef((data).__ob__)) {\r\n-            warn(\r\n-                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\r\n-                'Always create fresh vnode data objects in each render!',\r\n-                context\r\n-            );\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F object syntax in v-bind\r\n-        if (isDef(data) && isDef(data.is)) {\r\n-            tag = data.is;\r\n-        }\r\n-        if (!tag) {\r\n-            \u002F\u002F in case of component :is set to falsy value\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F warn against non-primitive key\r\n-        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\r\n-        ) {\r\n-            {\r\n-                warn(\r\n-                    'Avoid using non-primitive value as key, ' +\r\n-                    'use string\u002Fnumber value instead.',\r\n-                    context\r\n-                );\r\n-            }\r\n-        }\r\n-        \u002F\u002F support single function children as default scoped slot\r\n-        if (Array.isArray(children) &&\r\n-            typeof children[0] === 'function'\r\n-        ) {\r\n-            data = data || {};\r\n-            data.scopedSlots = { default: children[0] };\r\n-            children.length = 0;\r\n-        }\r\n-        if (normalizationType === ALWAYS_NORMALIZE) {\r\n-            children = normalizeChildren(children);\r\n-        } else if (normalizationType === SIMPLE_NORMALIZE) {\r\n-            children = simpleNormalizeChildren(children);\r\n-        }\r\n-        var vnode, ns;\r\n-        if (typeof tag === 'string') {\r\n-            var Ctor;\r\n-            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\r\n-            if (config.isReservedTag(tag)) {\r\n-                \u002F\u002F platform built-in elements\r\n-                vnode = new VNode(\r\n-                    config.parsePlatformTagName(tag), data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\r\n-                \u002F\u002F component\r\n-                vnode = createComponent(Ctor, data, context, children, tag);\r\n-            } else {\r\n-                \u002F\u002F unknown or unlisted namespaced elements\r\n-                \u002F\u002F check at runtime because it may get assigned a namespace when its\r\n-                \u002F\u002F parent normalizes children\r\n-                vnode = new VNode(\r\n-                    tag, data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            }\r\n-        } else {\r\n-            \u002F\u002F direct component options \u002F constructor\r\n-            vnode = createComponent(tag, data, context, children);\r\n-        }\r\n-        if (Array.isArray(vnode)) {\r\n-            return vnode\r\n-        } else if (isDef(vnode)) {\r\n-            if (isDef(ns)) { applyNS(vnode, ns); }\r\n-            if (isDef(data)) { registerDeepBindings(data); }\r\n-            return vnode\r\n-        } else {\r\n-            return createEmptyVNode()\r\n-        }\r\n-    }\r\n-\r\n-    function applyNS (vnode, ns, force) {\r\n-        vnode.ns = ns;\r\n-        if (vnode.tag === 'foreignObject') {\r\n-            \u002F\u002F use default namespace inside foreignObject\r\n-            ns = undefined;\r\n-            force = true;\r\n-        }\r\n-        if (isDef(vnode.children)) {\r\n-            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\r\n-                var child = vnode.children[i];\r\n-                if (isDef(child.tag) && (\r\n-                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\r\n-                    applyNS(child, ns, force);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F ref #5318\r\n-    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\r\n-    \u002F\u002F :class are used on slot nodes\r\n-    function registerDeepBindings (data) {\r\n-        if (isObject(data.style)) {\r\n-            traverse(data.style);\r\n-        }\r\n-        if (isObject(data.class)) {\r\n-            traverse(data.class);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initRender (vm) {\r\n-        vm._vnode = null; \u002F\u002F the root of the child tree\r\n-        vm._staticTrees = null; \u002F\u002F v-once cached trees\r\n-        var options = vm.$options;\r\n-        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\r\n-        var renderContext = parentVnode && parentVnode.context;\r\n-        vm.$slots = resolveSlots(options._renderChildren, renderContext);\r\n-        vm.$scopedSlots = emptyObject;\r\n-        \u002F\u002F bind the createElement fn to this instance\r\n-        \u002F\u002F so that we get proper render context inside it.\r\n-        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\r\n-        \u002F\u002F internal version is used by render functions compiled from templates\r\n-        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\r\n-        \u002F\u002F normalization is always applied for the public version, used in\r\n-        \u002F\u002F user-written render functions.\r\n-        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\r\n-\r\n-        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\r\n-        \u002F\u002F they need to be reactive so that HOCs using them are always updated\r\n-        var parentData = parentVnode && parentVnode.data;\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        {\r\n-            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\r\n-            }, true);\r\n-            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\r\n-            }, true);\r\n-        }\r\n-    }\r\n-\r\n-    var currentRenderingInstance = null;\r\n-\r\n-    function renderMixin (Vue) {\r\n-        \u002F\u002F install runtime convenience helpers\r\n-        installRenderHelpers(Vue.prototype);\r\n-\r\n-        Vue.prototype.$nextTick = function (fn) {\r\n-            return nextTick(fn, this)\r\n-        };\r\n-\r\n-        Vue.prototype._render = function () {\r\n-            var vm = this;\r\n-            var ref = vm.$options;\r\n-            var render = ref.render;\r\n-            var _parentVnode = ref._parentVnode;\r\n-\r\n-            if (_parentVnode) {\r\n-                vm.$scopedSlots = normalizeScopedSlots(\r\n-                    _parentVnode.data.scopedSlots,\r\n-                    vm.$slots,\r\n-                    vm.$scopedSlots\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F set parent vnode. this allows render functions to have access\r\n-            \u002F\u002F to the data on the placeholder node.\r\n-            vm.$vnode = _parentVnode;\r\n-            \u002F\u002F render self\r\n-            var vnode;\r\n-            try {\r\n-                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\r\n-                \u002F\u002F separately from one another. Nested component's render fns are called\r\n-                \u002F\u002F when parent component is patched.\r\n-                currentRenderingInstance = vm;\r\n-                vnode = render.call(vm._renderProxy, vm.$createElement);\r\n-            } catch (e) {\r\n-                handleError(e, vm, \"render\");\r\n-                \u002F\u002F return error render result,\r\n-                \u002F\u002F or previous vnode to prevent render error causing blank component\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                if (vm.$options.renderError) {\r\n-                    try {\r\n-                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\r\n-                    } catch (e) {\r\n-                        handleError(e, vm, \"renderError\");\r\n-                        vnode = vm._vnode;\r\n-                    }\r\n-                } else {\r\n-                    vnode = vm._vnode;\r\n-                }\r\n-            } finally {\r\n-                currentRenderingInstance = null;\r\n-            }\r\n-            \u002F\u002F if the returned array contains only a single node, allow it\r\n-            if (Array.isArray(vnode) && vnode.length === 1) {\r\n-                vnode = vnode[0];\r\n-            }\r\n-            \u002F\u002F return empty vnode in case the render function errored out\r\n-            if (!(vnode instanceof VNode)) {\r\n-                if (Array.isArray(vnode)) {\r\n-                    warn(\r\n-                        'Multiple root nodes returned from render function. Render function ' +\r\n-                        'should return a single root node.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                vnode = createEmptyVNode();\r\n-            }\r\n-            \u002F\u002F set parent\r\n-            vnode.parent = _parentVnode;\r\n-            return vnode\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function ensureCtor (comp, base) {\r\n-        if (\r\n-            comp.__esModule ||\r\n-            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\r\n-        ) {\r\n-            comp = comp.default;\r\n-        }\r\n-        return isObject(comp)\r\n-            ? base.extend(comp)\r\n-            : comp\r\n-    }\r\n-\r\n-    function createAsyncPlaceholder (\r\n-        factory,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        var node = createEmptyVNode();\r\n-        node.asyncFactory = factory;\r\n-        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\r\n-        return node\r\n-    }\r\n-\r\n-    function resolveAsyncComponent (\r\n-        factory,\r\n-        baseCtor\r\n-    ) {\r\n-        if (isTrue(factory.error) && isDef(factory.errorComp)) {\r\n-            return factory.errorComp\r\n-        }\r\n-\r\n-        if (isDef(factory.resolved)) {\r\n-            return factory.resolved\r\n-        }\r\n-\r\n-        var owner = currentRenderingInstance;\r\n-        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\r\n-            \u002F\u002F already pending\r\n-            factory.owners.push(owner);\r\n-        }\r\n-\r\n-        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\r\n-            return factory.loadingComp\r\n-        }\r\n-\r\n-        if (owner && !isDef(factory.owners)) {\r\n-            var owners = factory.owners = [owner];\r\n-            var sync = true;\r\n-            var timerLoading = null;\r\n-            var timerTimeout = null\r\n-\r\n-            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\r\n-\r\n-            var forceRender = function (renderCompleted) {\r\n-                for (var i = 0, l = owners.length; i \u003C l; i++) {\r\n-                    (owners[i]).$forceUpdate();\r\n-                }\r\n-\r\n-                if (renderCompleted) {\r\n-                    owners.length = 0;\r\n-                    if (timerLoading !== null) {\r\n-                        clearTimeout(timerLoading);\r\n-                        timerLoading = null;\r\n-                    }\r\n-                    if (timerTimeout !== null) {\r\n-                        clearTimeout(timerTimeout);\r\n-                        timerTimeout = null;\r\n-                    }\r\n-                }\r\n-            };\r\n-\r\n-            var resolve = once(function (res) {\r\n-                \u002F\u002F cache resolved\r\n-                factory.resolved = ensureCtor(res, baseCtor);\r\n-                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\r\n-                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\r\n-                if (!sync) {\r\n-                    forceRender(true);\r\n-                } else {\r\n-                    owners.length = 0;\r\n-                }\r\n-            });\r\n-\r\n-            var reject = once(function (reason) {\r\n-                warn(\r\n-                    \"Failed to resolve async component: \" + (String(factory)) +\r\n-                    (reason ? (\"\\nReason: \" + reason) : '')\r\n-                );\r\n-                if (isDef(factory.errorComp)) {\r\n-                    factory.error = true;\r\n-                    forceRender(true);\r\n-                }\r\n-            });\r\n-\r\n-            var res = factory(resolve, reject);\r\n-\r\n-            if (isObject(res)) {\r\n-                if (isPromise(res)) {\r\n-                    \u002F\u002F () => Promise\r\n-                    if (isUndef(factory.resolved)) {\r\n-                        res.then(resolve, reject);\r\n-                    }\r\n-                } else if (isPromise(res.component)) {\r\n-                    res.component.then(resolve, reject);\r\n-\r\n-                    if (isDef(res.error)) {\r\n-                        factory.errorComp = ensureCtor(res.error, baseCtor);\r\n-                    }\r\n-\r\n-                    if (isDef(res.loading)) {\r\n-                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\r\n-                        if (res.delay === 0) {\r\n-                            factory.loading = true;\r\n-                        } else {\r\n-                            timerLoading = setTimeout(function () {\r\n-                                timerLoading = null;\r\n-                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\r\n-                                    factory.loading = true;\r\n-                                    forceRender(false);\r\n-                                }\r\n-                            }, res.delay || 200);\r\n-                        }\r\n-                    }\r\n-\r\n-                    if (isDef(res.timeout)) {\r\n-                        timerTimeout = setTimeout(function () {\r\n-                            timerTimeout = null;\r\n-                            if (isUndef(factory.resolved)) {\r\n-                                reject(\r\n-                                    \"timeout (\" + (res.timeout) + \"ms)\"\r\n-                                );\r\n-                            }\r\n-                        }, res.timeout);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            sync = false;\r\n-            \u002F\u002F return in case resolved synchronously\r\n-            return factory.loading\r\n-                ? factory.loadingComp\r\n-                : factory.resolved\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isAsyncPlaceholder (node) {\r\n-        return node.isComment && node.asyncFactory\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function getFirstComponentChild (children) {\r\n-        if (Array.isArray(children)) {\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var c = children[i];\r\n-                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\r\n-                    return c\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initEvents (vm) {\r\n-        vm._events = Object.create(null);\r\n-        vm._hasHookEvent = false;\r\n-        \u002F\u002F init parent attached events\r\n-        var listeners = vm.$options._parentListeners;\r\n-        if (listeners) {\r\n-            updateComponentListeners(vm, listeners);\r\n-        }\r\n-    }\r\n-\r\n-    var target;\r\n-\r\n-    function add (event, fn) {\r\n-        target.$on(event, fn);\r\n-    }\r\n-\r\n-    function remove$1 (event, fn) {\r\n-        target.$off(event, fn);\r\n-    }\r\n-\r\n-    function createOnceHandler (event, fn) {\r\n-        var _target = target;\r\n-        return function onceHandler () {\r\n-            var res = fn.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                _target.$off(event, onceHandler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function updateComponentListeners (\r\n-        vm,\r\n-        listeners,\r\n-        oldListeners\r\n-    ) {\r\n-        target = vm;\r\n-        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\r\n-        target = undefined;\r\n-    }\r\n-\r\n-    function eventsMixin (Vue) {\r\n-        var hookRE = \u002F^hook:\u002F;\r\n-        Vue.prototype.$on = function (event, fn) {\r\n-            var vm = this;\r\n-            if (Array.isArray(event)) {\r\n-                for (var i = 0, l = event.length; i \u003C l; i++) {\r\n-                    vm.$on(event[i], fn);\r\n-                }\r\n-            } else {\r\n-                (vm._events[event] || (vm._events[event] = [])).push(fn);\r\n-                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\r\n-                \u002F\u002F instead of a hash lookup\r\n-                if (hookRE.test(event)) {\r\n-                    vm._hasHookEvent = true;\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$once = function (event, fn) {\r\n-            var vm = this;\r\n-            function on () {\r\n-                vm.$off(event, on);\r\n-                fn.apply(vm, arguments);\r\n-            }\r\n-            on.fn = fn;\r\n-            vm.$on(event, on);\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$off = function (event, fn) {\r\n-            var vm = this;\r\n-            \u002F\u002F all\r\n-            if (!arguments.length) {\r\n-                vm._events = Object.create(null);\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F array of events\r\n-            if (Array.isArray(event)) {\r\n-                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\r\n-                    vm.$off(event[i$1], fn);\r\n-                }\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific event\r\n-            var cbs = vm._events[event];\r\n-            if (!cbs) {\r\n-                return vm\r\n-            }\r\n-            if (!fn) {\r\n-                vm._events[event] = null;\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific handler\r\n-            var cb;\r\n-            var i = cbs.length;\r\n-            while (i--) {\r\n-                cb = cbs[i];\r\n-                if (cb === fn || cb.fn === fn) {\r\n-                    cbs.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$emit = function (event) {\r\n-            var vm = this;\r\n-            {\r\n-                var lowerCaseEvent = event.toLowerCase();\r\n-                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\r\n-                    tip(\r\n-                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\r\n-                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\r\n-                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\r\n-                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\r\n-                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            var cbs = vm._events[event];\r\n-            if (cbs) {\r\n-                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\r\n-                var args = toArray(arguments, 1);\r\n-                var info = \"event handler for \\\"\" + event + \"\\\"\";\r\n-                for (var i = 0, l = cbs.length; i \u003C l; i++) {\r\n-                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var activeInstance = null;\r\n-    var isUpdatingChildComponent = false;\r\n-\r\n-    function setActiveInstance(vm) {\r\n-        var prevActiveInstance = activeInstance;\r\n-        activeInstance = vm;\r\n-        return function () {\r\n-            activeInstance = prevActiveInstance;\r\n-        }\r\n-    }\r\n-\r\n-    function initLifecycle (vm) {\r\n-        var options = vm.$options;\r\n-\r\n-        \u002F\u002F locate first non-abstract parent\r\n-        var parent = options.parent;\r\n-        if (parent && !options.abstract) {\r\n-            while (parent.$options.abstract && parent.$parent) {\r\n-                parent = parent.$parent;\r\n-            }\r\n-            parent.$children.push(vm);\r\n-        }\r\n-\r\n-        vm.$parent = parent;\r\n-        vm.$root = parent ? parent.$root : vm;\r\n-\r\n-        vm.$children = [];\r\n-        vm.$refs = {};\r\n-\r\n-        vm._watcher = null;\r\n-        vm._inactive = null;\r\n-        vm._directInactive = false;\r\n-        vm._isMounted = false;\r\n-        vm._isDestroyed = false;\r\n-        vm._isBeingDestroyed = false;\r\n-    }\r\n-\r\n-    function lifecycleMixin (Vue) {\r\n-        Vue.prototype._update = function (vnode, hydrating) {\r\n-            var vm = this;\r\n-            var prevEl = vm.$el;\r\n-            var prevVnode = vm._vnode;\r\n-            var restoreActiveInstance = setActiveInstance(vm);\r\n-            vm._vnode = vnode;\r\n-            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\r\n-            \u002F\u002F based on the rendering backend used.\r\n-            if (!prevVnode) {\r\n-                \u002F\u002F initial render\r\n-                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\r\n-            } else {\r\n-                \u002F\u002F updates\r\n-                vm.$el = vm.__patch__(prevVnode, vnode);\r\n-            }\r\n-            restoreActiveInstance();\r\n-            \u002F\u002F update __vue__ reference\r\n-            if (prevEl) {\r\n-                prevEl.__vue__ = null;\r\n-            }\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = vm;\r\n-            }\r\n-            \u002F\u002F if parent is an HOC, update its $el as well\r\n-            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\r\n-                vm.$parent.$el = vm.$el;\r\n-            }\r\n-            \u002F\u002F updated hook is called by the scheduler to ensure that children are\r\n-            \u002F\u002F updated in a parent's updated hook.\r\n-        };\r\n-\r\n-        Vue.prototype.$forceUpdate = function () {\r\n-            var vm = this;\r\n-            if (vm._watcher) {\r\n-                vm._watcher.update();\r\n-            }\r\n-        };\r\n-\r\n-        Vue.prototype.$destroy = function () {\r\n-            var vm = this;\r\n-            if (vm._isBeingDestroyed) {\r\n-                return\r\n-            }\r\n-            callHook(vm, 'beforeDestroy');\r\n-            vm._isBeingDestroyed = true;\r\n-            \u002F\u002F remove self from parent\r\n-            var parent = vm.$parent;\r\n-            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\r\n-                remove(parent.$children, vm);\r\n-            }\r\n-            \u002F\u002F teardown watchers\r\n-            if (vm._watcher) {\r\n-                vm._watcher.teardown();\r\n-            }\r\n-            var i = vm._watchers.length;\r\n-            while (i--) {\r\n-                vm._watchers[i].teardown();\r\n-            }\r\n-            \u002F\u002F remove reference from data ob\r\n-            \u002F\u002F frozen object may not have observer.\r\n-            if (vm._data.__ob__) {\r\n-                vm._data.__ob__.vmCount--;\r\n-            }\r\n-            \u002F\u002F call the last hook...\r\n-            vm._isDestroyed = true;\r\n-            \u002F\u002F invoke destroy hooks on current rendered tree\r\n-            vm.__patch__(vm._vnode, null);\r\n-            \u002F\u002F fire destroyed hook\r\n-            callHook(vm, 'destroyed');\r\n-            \u002F\u002F turn off all instance listeners.\r\n-            vm.$off();\r\n-            \u002F\u002F remove __vue__ reference\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = null;\r\n-            }\r\n-            \u002F\u002F release circular reference (#6759)\r\n-            if (vm.$vnode) {\r\n-                vm.$vnode.parent = null;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function mountComponent (\r\n-        vm,\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        vm.$el = el;\r\n-        if (!vm.$options.render) {\r\n-            vm.$options.render = createEmptyVNode;\r\n-            {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\r\n-                    vm.$options.el || el) {\r\n-                    warn(\r\n-                        'You are using the runtime-only build of Vue where the template ' +\r\n-                        'compiler is not available. Either pre-compile the templates into ' +\r\n-                        'render functions, or use the compiler-included build.',\r\n-                        vm\r\n-                    );\r\n-                } else {\r\n-                    warn(\r\n-                        'Failed to mount component: template or render function not defined.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-        }\r\n-        callHook(vm, 'beforeMount');\r\n-\r\n-        var updateComponent;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (config.performance && mark) {\r\n-            updateComponent = function () {\r\n-                var name = vm._name;\r\n-                var id = vm._uid;\r\n-                var startTag = \"vue-perf-start:\" + id;\r\n-                var endTag = \"vue-perf-end:\" + id;\r\n-\r\n-                mark(startTag);\r\n-                var vnode = vm._render();\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" render\"), startTag, endTag);\r\n-\r\n-                mark(startTag);\r\n-                vm._update(vnode, hydrating);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" patch\"), startTag, endTag);\r\n-            };\r\n-        } else {\r\n-            updateComponent = function () {\r\n-                vm._update(vm._render(), hydrating);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\r\n-        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\r\n-        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\r\n-        new Watcher(vm, updateComponent, noop, {\r\n-            before: function before () {\r\n-                if (vm._isMounted && !vm._isDestroyed) {\r\n-                    callHook(vm, 'beforeUpdate');\r\n-                }\r\n-            }\r\n-        }, true \u002F* isRenderWatcher *\u002F);\r\n-        hydrating = false;\r\n-\r\n-        \u002F\u002F manually mounted instance, call mounted on self\r\n-        \u002F\u002F mounted is called for render-created child components in its inserted hook\r\n-        if (vm.$vnode == null) {\r\n-            vm._isMounted = true;\r\n-            callHook(vm, 'mounted');\r\n-        }\r\n-        return vm\r\n-    }\r\n-\r\n-    function updateChildComponent (\r\n-        vm,\r\n-        propsData,\r\n-        listeners,\r\n-        parentVnode,\r\n-        renderChildren\r\n-    ) {\r\n-        {\r\n-            isUpdatingChildComponent = true;\r\n-        }\r\n-\r\n-        \u002F\u002F determine whether component has slot children\r\n-        \u002F\u002F we need to do this before overwriting $options._renderChildren.\r\n-\r\n-        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\r\n-        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\r\n-        \u002F\u002F \"$stable\" marker.\r\n-        var newScopedSlots = parentVnode.data.scopedSlots;\r\n-        var oldScopedSlots = vm.$scopedSlots;\r\n-        var hasDynamicScopedSlot = !!(\r\n-            (newScopedSlots && !newScopedSlots.$stable) ||\r\n-            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\r\n-            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\r\n-        );\r\n-\r\n-        \u002F\u002F Any static slot children from the parent may have changed during parent's\r\n-        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\r\n-        \u002F\u002F update is necessary to ensure correctness.\r\n-        var needsForceUpdate = !!(\r\n-            renderChildren ||               \u002F\u002F has new static slots\r\n-            vm.$options._renderChildren ||  \u002F\u002F has old static slots\r\n-            hasDynamicScopedSlot\r\n-        );\r\n-\r\n-        vm.$options._parentVnode = parentVnode;\r\n-        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\r\n-\r\n-        if (vm._vnode) { \u002F\u002F update child tree's parent\r\n-            vm._vnode.parent = parentVnode;\r\n-        }\r\n-        vm.$options._renderChildren = renderChildren;\r\n-\r\n-        \u002F\u002F update $attrs and $listeners hash\r\n-        \u002F\u002F these are also reactive so they may trigger child update if the child\r\n-        \u002F\u002F used them during render\r\n-        vm.$attrs = parentVnode.data.attrs || emptyObject;\r\n-        vm.$listeners = listeners || emptyObject;\r\n-\r\n-        \u002F\u002F update props\r\n-        if (propsData && vm.$options.props) {\r\n-            toggleObserving(false);\r\n-            var props = vm._props;\r\n-            var propKeys = vm.$options._propKeys || [];\r\n-            for (var i = 0; i \u003C propKeys.length; i++) {\r\n-                var key = propKeys[i];\r\n-                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\r\n-                props[key] = validateProp(key, propOptions, propsData, vm);\r\n-            }\r\n-            toggleObserving(true);\r\n-            \u002F\u002F keep a copy of raw propsData\r\n-            vm.$options.propsData = propsData;\r\n-        }\r\n-\r\n-        \u002F\u002F update listeners\r\n-        listeners = listeners || emptyObject;\r\n-        var oldListeners = vm.$options._parentListeners;\r\n-        vm.$options._parentListeners = listeners;\r\n-        updateComponentListeners(vm, listeners, oldListeners);\r\n-\r\n-        \u002F\u002F resolve slots + force update if has children\r\n-        if (needsForceUpdate) {\r\n-            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\r\n-            vm.$forceUpdate();\r\n-        }\r\n-\r\n-        {\r\n-            isUpdatingChildComponent = false;\r\n-        }\r\n-    }\r\n-\r\n-    function isInInactiveTree (vm) {\r\n-        while (vm && (vm = vm.$parent)) {\r\n-            if (vm._inactive) { return true }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function activateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = false;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        } else if (vm._directInactive) {\r\n-            return\r\n-        }\r\n-        if (vm._inactive || vm._inactive === null) {\r\n-            vm._inactive = false;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                activateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'activated');\r\n-        }\r\n-    }\r\n-\r\n-    function deactivateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = true;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        }\r\n-        if (!vm._inactive) {\r\n-            vm._inactive = true;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                deactivateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'deactivated');\r\n-        }\r\n-    }\r\n-\r\n-    function callHook (vm, hook) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\r\n-        pushTarget();\r\n-        var handlers = vm.$options[hook];\r\n-        var info = hook + \" hook\";\r\n-        if (handlers) {\r\n-            for (var i = 0, j = handlers.length; i \u003C j; i++) {\r\n-                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\r\n-            }\r\n-        }\r\n-        if (vm._hasHookEvent) {\r\n-            vm.$emit('hook:' + hook);\r\n-        }\r\n-        popTarget();\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var MAX_UPDATE_COUNT = 100;\r\n-\r\n-    var queue = [];\r\n-    var activatedChildren = [];\r\n-    var has = {};\r\n-    var circular = {};\r\n-    var waiting = false;\r\n-    var flushing = false;\r\n-    var index = 0;\r\n-\r\n-    \u002F**\r\n-     * Reset the scheduler's state.\r\n-     *\u002F\r\n-    function resetSchedulerState () {\r\n-        index = queue.length = activatedChildren.length = 0;\r\n-        has = {};\r\n-        {\r\n-            circular = {};\r\n-        }\r\n-        waiting = flushing = false;\r\n-    }\r\n-\r\n-    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\r\n-    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\r\n-    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\r\n-    \u002F\u002F every time the scheduler flushes and use that for all event listeners\r\n-    \u002F\u002F attached during that flush.\r\n-    var currentFlushTimestamp = 0;\r\n-\r\n-    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\r\n-    var getNow = Date.now;\r\n-\r\n-    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\r\n-    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\r\n-    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\r\n-    \u002F\u002F same timestamp type when saving the flush timestamp.\r\n-    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\r\n-    \u002F\u002F implementations (#9632)\r\n-    if (inBrowser && !isIE) {\r\n-        var performance = window.performance;\r\n-        if (\r\n-            performance &&\r\n-            typeof performance.now === 'function' &&\r\n-            getNow() > document.createEvent('Event').timeStamp\r\n-        ) {\r\n-            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\r\n-            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\r\n-            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\r\n-            \u002F\u002F well.\r\n-            getNow = function () { return performance.now(); };\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Flush both queues and run the watchers.\r\n-     *\u002F\r\n-    function flushSchedulerQueue () {\r\n-        currentFlushTimestamp = getNow();\r\n-        flushing = true;\r\n-        var watcher, id;\r\n-\r\n-        \u002F\u002F Sort queue before flush.\r\n-        \u002F\u002F This ensures that:\r\n-        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\r\n-        \u002F\u002F    created before the child)\r\n-        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\r\n-        \u002F\u002F    user watchers are created before the render watcher)\r\n-        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\r\n-        \u002F\u002F    its watchers can be skipped.\r\n-        queue.sort(function (a, b) { return a.id - b.id; });\r\n-\r\n-        \u002F\u002F do not cache length because more watchers might be pushed\r\n-        \u002F\u002F as we run existing watchers\r\n-        for (index = 0; index \u003C queue.length; index++) {\r\n-            watcher = queue[index];\r\n-            if (watcher.before) {\r\n-                watcher.before();\r\n-            }\r\n-            id = watcher.id;\r\n-            has[id] = null;\r\n-            watcher.run();\r\n-            \u002F\u002F in dev build, check and stop circular updates.\r\n-            if (has[id] != null) {\r\n-                circular[id] = (circular[id] || 0) + 1;\r\n-                if (circular[id] > MAX_UPDATE_COUNT) {\r\n-                    warn(\r\n-                        'You may have an infinite update loop ' + (\r\n-                            watcher.user\r\n-                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\r\n-                                : \"in a component render function.\"\r\n-                        ),\r\n-                        watcher.vm\r\n-                    );\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F keep copies of post queues before resetting state\r\n-        var activatedQueue = activatedChildren.slice();\r\n-        var updatedQueue = queue.slice();\r\n-\r\n-        resetSchedulerState();\r\n-\r\n-        \u002F\u002F call component updated and activated hooks\r\n-        callActivatedHooks(activatedQueue);\r\n-        callUpdatedHooks(updatedQueue);\r\n-\r\n-        \u002F\u002F devtool hook\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (devtools && config.devtools) {\r\n-            devtools.emit('flush');\r\n-        }\r\n-    }\r\n-\r\n-    function callUpdatedHooks (queue) {\r\n-        var i = queue.length;\r\n-        while (i--) {\r\n-            var watcher = queue[i];\r\n-            var vm = watcher.vm;\r\n-            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\r\n-                callHook(vm, 'updated');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Queue a kept-alive component that was activated during patch.\r\n-     * The queue will be processed after the entire tree has been patched.\r\n-     *\u002F\r\n-    function queueActivatedComponent (vm) {\r\n-        \u002F\u002F setting _inactive to false here so that a render function can\r\n-        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\r\n-        vm._inactive = false;\r\n-        activatedChildren.push(vm);\r\n-    }\r\n-\r\n-    function callActivatedHooks (queue) {\r\n-        for (var i = 0; i \u003C queue.length; i++) {\r\n-            queue[i]._inactive = true;\r\n-            activateChildComponent(queue[i], true \u002F* true *\u002F);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Push a watcher into the watcher queue.\r\n-     * Jobs with duplicate IDs will be skipped unless it's\r\n-     * pushed when the queue is being flushed.\r\n-     *\u002F\r\n-    function queueWatcher (watcher) {\r\n-        var id = watcher.id;\r\n-        if (has[id] == null) {\r\n-            has[id] = true;\r\n-            if (!flushing) {\r\n-                queue.push(watcher);\r\n-            } else {\r\n-                \u002F\u002F if already flushing, splice the watcher based on its id\r\n-                \u002F\u002F if already past its id, it will be run next immediately.\r\n-                var i = queue.length - 1;\r\n-                while (i > index && queue[i].id > watcher.id) {\r\n-                    i--;\r\n-                }\r\n-                queue.splice(i + 1, 0, watcher);\r\n-            }\r\n-            \u002F\u002F queue the flush\r\n-            if (!waiting) {\r\n-                waiting = true;\r\n-\r\n-                if (!config.async) {\r\n-                    flushSchedulerQueue();\r\n-                    return\r\n-                }\r\n-                nextTick(flushSchedulerQueue);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var uid$2 = 0;\r\n-\r\n-    \u002F**\r\n-     * A watcher parses an expression, collects dependencies,\r\n-     * and fires callback when the expression value changes.\r\n-     * This is used for both the $watch() api and directives.\r\n-     *\u002F\r\n-    var Watcher = function Watcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        cb,\r\n-        options,\r\n-        isRenderWatcher\r\n-    ) {\r\n-        this.vm = vm;\r\n-        if (isRenderWatcher) {\r\n-            vm._watcher = this;\r\n-        }\r\n-        vm._watchers.push(this);\r\n-        \u002F\u002F options\r\n-        if (options) {\r\n-            this.deep = !!options.deep;\r\n-            this.user = !!options.user;\r\n-            this.lazy = !!options.lazy;\r\n-            this.sync = !!options.sync;\r\n-            this.before = options.before;\r\n-        } else {\r\n-            this.deep = this.user = this.lazy = this.sync = false;\r\n-        }\r\n-        this.cb = cb;\r\n-        this.id = ++uid$2; \u002F\u002F uid for batching\r\n-        this.active = true;\r\n-        this.dirty = this.lazy; \u002F\u002F for lazy watchers\r\n-        this.deps = [];\r\n-        this.newDeps = [];\r\n-        this.depIds = new _Set();\r\n-        this.newDepIds = new _Set();\r\n-        this.expression = expOrFn.toString();\r\n-        \u002F\u002F parse expression for getter\r\n-        if (typeof expOrFn === 'function') {\r\n-            this.getter = expOrFn;\r\n-        } else {\r\n-            this.getter = parsePath(expOrFn);\r\n-            if (!this.getter) {\r\n-                this.getter = noop;\r\n-                warn(\r\n-                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\r\n-                    'Watcher only accepts simple dot-delimited paths. ' +\r\n-                    'For full control, use a function instead.',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-        this.value = this.lazy\r\n-            ? undefined\r\n-            : this.get();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the getter, and re-collect dependencies.\r\n-     *\u002F\r\n-    Watcher.prototype.get = function get () {\r\n-        pushTarget(this);\r\n-        var value;\r\n-        var vm = this.vm;\r\n-        try {\r\n-            value = this.getter.call(vm, vm);\r\n-        } catch (e) {\r\n-            if (this.user) {\r\n-                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-            } else {\r\n-                throw e\r\n-            }\r\n-        } finally {\r\n-            \u002F\u002F \"touch\" every property so they are all tracked as\r\n-            \u002F\u002F dependencies for deep watching\r\n-            if (this.deep) {\r\n-                traverse(value);\r\n-            }\r\n-            popTarget();\r\n-            this.cleanupDeps();\r\n-        }\r\n-        return value\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Add a dependency to this directive.\r\n-     *\u002F\r\n-    Watcher.prototype.addDep = function addDep (dep) {\r\n-        var id = dep.id;\r\n-        if (!this.newDepIds.has(id)) {\r\n-            this.newDepIds.add(id);\r\n-            this.newDeps.push(dep);\r\n-            if (!this.depIds.has(id)) {\r\n-                dep.addSub(this);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Clean up for dependency collection.\r\n-     *\u002F\r\n-    Watcher.prototype.cleanupDeps = function cleanupDeps () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            var dep = this.deps[i];\r\n-            if (!this.newDepIds.has(dep.id)) {\r\n-                dep.removeSub(this);\r\n-            }\r\n-        }\r\n-        var tmp = this.depIds;\r\n-        this.depIds = this.newDepIds;\r\n-        this.newDepIds = tmp;\r\n-        this.newDepIds.clear();\r\n-        tmp = this.deps;\r\n-        this.deps = this.newDeps;\r\n-        this.newDeps = tmp;\r\n-        this.newDeps.length = 0;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Subscriber interface.\r\n-     * Will be called when a dependency changes.\r\n-     *\u002F\r\n-    Watcher.prototype.update = function update () {\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (this.lazy) {\r\n-            this.dirty = true;\r\n-        } else if (this.sync) {\r\n-            this.run();\r\n-        } else {\r\n-            queueWatcher(this);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Scheduler job interface.\r\n-     * Will be called by the scheduler.\r\n-     *\u002F\r\n-    Watcher.prototype.run = function run () {\r\n-        if (this.active) {\r\n-            var value = this.get();\r\n-            if (\r\n-                value !== this.value ||\r\n-                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\r\n-                \u002F\u002F when the value is the same, because the value may\r\n-                \u002F\u002F have mutated.\r\n-                isObject(value) ||\r\n-                this.deep\r\n-            ) {\r\n-                \u002F\u002F set new value\r\n-                var oldValue = this.value;\r\n-                this.value = value;\r\n-                if (this.user) {\r\n-                    try {\r\n-                        this.cb.call(this.vm, value, oldValue);\r\n-                    } catch (e) {\r\n-                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-                    }\r\n-                } else {\r\n-                    this.cb.call(this.vm, value, oldValue);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the value of the watcher.\r\n-     * This only gets called for lazy watchers.\r\n-     *\u002F\r\n-    Watcher.prototype.evaluate = function evaluate () {\r\n-        this.value = this.get();\r\n-        this.dirty = false;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Depend on all deps collected by this watcher.\r\n-     *\u002F\r\n-    Watcher.prototype.depend = function depend () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            this.deps[i].depend();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Remove self from all dependencies' subscriber list.\r\n-     *\u002F\r\n-    Watcher.prototype.teardown = function teardown () {\r\n-        if (this.active) {\r\n-            \u002F\u002F remove self from vm's watcher list\r\n-            \u002F\u002F this is a somewhat expensive operation so we skip it\r\n-            \u002F\u002F if the vm is being destroyed.\r\n-            if (!this.vm._isBeingDestroyed) {\r\n-                remove(this.vm._watchers, this);\r\n-            }\r\n-            var i = this.deps.length;\r\n-            while (i--) {\r\n-                this.deps[i].removeSub(this);\r\n-            }\r\n-            this.active = false;\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var sharedPropertyDefinition = {\r\n-        enumerable: true,\r\n-        configurable: true,\r\n-        get: noop,\r\n-        set: noop\r\n-    };\r\n-\r\n-    function proxy (target, sourceKey, key) {\r\n-        sharedPropertyDefinition.get = function proxyGetter () {\r\n-            return this[sourceKey][key]\r\n-        };\r\n-        sharedPropertyDefinition.set = function proxySetter (val) {\r\n-            this[sourceKey][key] = val;\r\n-        };\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function initState (vm) {\r\n-        vm._watchers = [];\r\n-        var opts = vm.$options;\r\n-        if (opts.props) { initProps(vm, opts.props); }\r\n-        if (opts.methods) { initMethods(vm, opts.methods); }\r\n-        if (opts.data) {\r\n-            initData(vm);\r\n-        } else {\r\n-            observe(vm._data = {}, true \u002F* asRootData *\u002F);\r\n-        }\r\n-        if (opts.computed) { initComputed(vm, opts.computed); }\r\n-        if (opts.watch && opts.watch !== nativeWatch) {\r\n-            initWatch(vm, opts.watch);\r\n-        }\r\n-    }\r\n-\r\n-    function initProps (vm, propsOptions) {\r\n-        var propsData = vm.$options.propsData || {};\r\n-        var props = vm._props = {};\r\n-        \u002F\u002F cache prop keys so that future props updates can iterate using Array\r\n-        \u002F\u002F instead of dynamic object key enumeration.\r\n-        var keys = vm.$options._propKeys = [];\r\n-        var isRoot = !vm.$parent;\r\n-        \u002F\u002F root instance props should be converted\r\n-        if (!isRoot) {\r\n-            toggleObserving(false);\r\n-        }\r\n-        var loop = function ( key ) {\r\n-            keys.push(key);\r\n-            var value = validateProp(key, propsOptions, propsData, vm);\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                var hyphenatedKey = hyphenate(key);\r\n-                if (isReservedAttribute(hyphenatedKey) ||\r\n-                    config.isReservedAttr(hyphenatedKey)) {\r\n-                    warn(\r\n-                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                defineReactive$$1(props, key, value, function () {\r\n-                    if (!isRoot && !isUpdatingChildComponent) {\r\n-                        warn(\r\n-                            \"Avoid mutating a prop directly since the value will be \" +\r\n-                            \"overwritten whenever the parent component re-renders. \" +\r\n-                            \"Instead, use a data or computed property based on the prop's \" +\r\n-                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                });\r\n-            }\r\n-            \u002F\u002F static props are already proxied on the component's prototype\r\n-            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\r\n-            \u002F\u002F instantiation here.\r\n-            if (!(key in vm)) {\r\n-                proxy(vm, \"_props\", key);\r\n-            }\r\n-        };\r\n-\r\n-        for (var key in propsOptions) loop( key );\r\n-        toggleObserving(true);\r\n-    }\r\n-\r\n-    function initData (vm) {\r\n-        var data = vm.$options.data;\r\n-        data = vm._data = typeof data === 'function'\r\n-            ? getData(data, vm)\r\n-            : data || {};\r\n-        if (!isPlainObject(data)) {\r\n-            data = {};\r\n-            warn(\r\n-                'data functions should return an object:\\n' +\r\n-                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F proxy data on instance\r\n-        var keys = Object.keys(data);\r\n-        var props = vm.$options.props;\r\n-        var methods = vm.$options.methods;\r\n-        var i = keys.length;\r\n-        while (i--) {\r\n-            var key = keys[i];\r\n-            {\r\n-                if (methods && hasOwn(methods, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (props && hasOwn(props, key)) {\r\n-                warn(\r\n-                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\r\n-                    \"Use prop default value instead.\",\r\n-                    vm\r\n-                );\r\n-            } else if (!isReserved(key)) {\r\n-                proxy(vm, \"_data\", key);\r\n-            }\r\n-        }\r\n-        \u002F\u002F observe data\r\n-        observe(data, true \u002F* asRootData *\u002F);\r\n-    }\r\n-\r\n-    function getData (data, vm) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking data getters\r\n-        pushTarget();\r\n-        try {\r\n-            return data.call(vm, vm)\r\n-        } catch (e) {\r\n-            handleError(e, vm, \"data()\");\r\n-            return {}\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    var computedWatcherOptions = { lazy: true };\r\n-\r\n-    function initComputed (vm, computed) {\r\n-        \u002F\u002F $flow-disable-line\r\n-        var watchers = vm._computedWatchers = Object.create(null);\r\n-        \u002F\u002F computed properties are just getters during SSR\r\n-        var isSSR = isServerRendering();\r\n-\r\n-        for (var key in computed) {\r\n-            var userDef = computed[key];\r\n-            var getter = typeof userDef === 'function' ? userDef : userDef.get;\r\n-            if (getter == null) {\r\n-                warn(\r\n-                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\r\n-                    vm\r\n-                );\r\n-            }\r\n-\r\n-            if (!isSSR) {\r\n-                \u002F\u002F create internal watcher for the computed property.\r\n-                watchers[key] = new Watcher(\r\n-                    vm,\r\n-                    getter || noop,\r\n-                    noop,\r\n-                    computedWatcherOptions\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F component-defined computed properties are already defined on the\r\n-            \u002F\u002F component prototype. We only need to define computed properties defined\r\n-            \u002F\u002F at instantiation here.\r\n-            if (!(key in vm)) {\r\n-                defineComputed(vm, key, userDef);\r\n-            } else {\r\n-                if (key in vm.$data) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\r\n-                } else if (vm.$options.props && key in vm.$options.props) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function defineComputed (\r\n-        target,\r\n-        key,\r\n-        userDef\r\n-    ) {\r\n-        var shouldCache = !isServerRendering();\r\n-        if (typeof userDef === 'function') {\r\n-            sharedPropertyDefinition.get = shouldCache\r\n-                ? createComputedGetter(key)\r\n-                : createGetterInvoker(userDef);\r\n-            sharedPropertyDefinition.set = noop;\r\n-        } else {\r\n-            sharedPropertyDefinition.get = userDef.get\r\n-                ? shouldCache && userDef.cache !== false\r\n-                    ? createComputedGetter(key)\r\n-                    : createGetterInvoker(userDef.get)\r\n-                : noop;\r\n-            sharedPropertyDefinition.set = userDef.set || noop;\r\n-        }\r\n-        if (sharedPropertyDefinition.set === noop) {\r\n-            sharedPropertyDefinition.set = function () {\r\n-                warn(\r\n-                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\r\n-                    this\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function createComputedGetter (key) {\r\n-        return function computedGetter () {\r\n-            var watcher = this._computedWatchers && this._computedWatchers[key];\r\n-            if (watcher) {\r\n-                if (watcher.dirty) {\r\n-                    watcher.evaluate();\r\n-                }\r\n-                if (Dep.target) {\r\n-                    watcher.depend();\r\n-                }\r\n-                return watcher.value\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createGetterInvoker(fn) {\r\n-        return function computedGetter () {\r\n-            return fn.call(this, this)\r\n-        }\r\n-    }\r\n-\r\n-    function initMethods (vm, methods) {\r\n-        var props = vm.$options.props;\r\n-        for (var key in methods) {\r\n-            {\r\n-                if (typeof methods[key] !== 'function') {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\r\n-                        \"Did you reference the function correctly?\",\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if (props && hasOwn(props, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if ((key in vm) && isReserved(key)) {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\r\n-                        \"Avoid defining component methods that start with _ or $.\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\r\n-        }\r\n-    }\r\n-\r\n-    function initWatch (vm, watch) {\r\n-        for (var key in watch) {\r\n-            var handler = watch[key];\r\n-            if (Array.isArray(handler)) {\r\n-                for (var i = 0; i \u003C handler.length; i++) {\r\n-                    createWatcher(vm, key, handler[i]);\r\n-                }\r\n-            } else {\r\n-                createWatcher(vm, key, handler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createWatcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        handler,\r\n-        options\r\n-    ) {\r\n-        if (isPlainObject(handler)) {\r\n-            options = handler;\r\n-            handler = handler.handler;\r\n-        }\r\n-        if (typeof handler === 'string') {\r\n-            handler = vm[handler];\r\n-        }\r\n-        return vm.$watch(expOrFn, handler, options)\r\n-    }\r\n-\r\n-    function stateMixin (Vue) {\r\n-        \u002F\u002F flow somehow has problems with directly declared definition object\r\n-        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\r\n-        \u002F\u002F the object here.\r\n-        var dataDef = {};\r\n-        dataDef.get = function () { return this._data };\r\n-        var propsDef = {};\r\n-        propsDef.get = function () { return this._props };\r\n-        {\r\n-            dataDef.set = function () {\r\n-                warn(\r\n-                    'Avoid replacing instance root $data. ' +\r\n-                    'Use nested data properties instead.',\r\n-                    this\r\n-                );\r\n-            };\r\n-            propsDef.set = function () {\r\n-                warn(\"$props is readonly.\", this);\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue.prototype, '$data', dataDef);\r\n-        Object.defineProperty(Vue.prototype, '$props', propsDef);\r\n-\r\n-        Vue.prototype.$set = set;\r\n-        Vue.prototype.$delete = del;\r\n-\r\n-        Vue.prototype.$watch = function (\r\n-            expOrFn,\r\n-            cb,\r\n-            options\r\n-        ) {\r\n-            var vm = this;\r\n-            if (isPlainObject(cb)) {\r\n-                return createWatcher(vm, expOrFn, cb, options)\r\n-            }\r\n-            options = options || {};\r\n-            options.user = true;\r\n-            var watcher = new Watcher(vm, expOrFn, cb, options);\r\n-            if (options.immediate) {\r\n-                try {\r\n-                    cb.call(vm, watcher.value);\r\n-                } catch (error) {\r\n-                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\r\n-                }\r\n-            }\r\n-            return function unwatchFn () {\r\n-                watcher.teardown();\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid$3 = 0;\r\n-\r\n-    function initMixin (Vue) {\r\n-        Vue.prototype._init = function (options) {\r\n-            var vm = this;\r\n-            \u002F\u002F a uid\r\n-            vm._uid = uid$3++;\r\n-\r\n-            var startTag, endTag;\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                startTag = \"vue-perf-start:\" + (vm._uid);\r\n-                endTag = \"vue-perf-end:\" + (vm._uid);\r\n-                mark(startTag);\r\n-            }\r\n-\r\n-            \u002F\u002F a flag to avoid this being observed\r\n-            vm._isVue = true;\r\n-            \u002F\u002F merge options\r\n-            if (options && options._isComponent) {\r\n-                \u002F\u002F optimize internal component instantiation\r\n-                \u002F\u002F since dynamic options merging is pretty slow, and none of the\r\n-                \u002F\u002F internal component options needs special treatment.\r\n-                initInternalComponent(vm, options);\r\n-            } else {\r\n-                vm.$options = mergeOptions(\r\n-                    resolveConstructorOptions(vm.constructor),\r\n-                    options || {},\r\n-                    vm\r\n-                );\r\n-            }\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                initProxy(vm);\r\n-            }\r\n-            \u002F\u002F expose real self\r\n-            vm._self = vm;\r\n-            initLifecycle(vm);\r\n-            initEvents(vm);\r\n-            initRender(vm);\r\n-            callHook(vm, 'beforeCreate');\r\n-            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\r\n-            initState(vm);\r\n-            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\r\n-            callHook(vm, 'created');\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                vm._name = formatComponentName(vm, false);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\r\n-            }\r\n-\r\n-            if (vm.$options.el) {\r\n-                vm.$mount(vm.$options.el);\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function initInternalComponent (vm, options) {\r\n-        var opts = vm.$options = Object.create(vm.constructor.options);\r\n-        \u002F\u002F doing this because it's faster than dynamic enumeration.\r\n-        var parentVnode = options._parentVnode;\r\n-        opts.parent = options.parent;\r\n-        opts._parentVnode = parentVnode;\r\n-\r\n-        var vnodeComponentOptions = parentVnode.componentOptions;\r\n-        opts.propsData = vnodeComponentOptions.propsData;\r\n-        opts._parentListeners = vnodeComponentOptions.listeners;\r\n-        opts._renderChildren = vnodeComponentOptions.children;\r\n-        opts._componentTag = vnodeComponentOptions.tag;\r\n-\r\n-        if (options.render) {\r\n-            opts.render = options.render;\r\n-            opts.staticRenderFns = options.staticRenderFns;\r\n-        }\r\n-    }\r\n-\r\n-    function resolveConstructorOptions (Ctor) {\r\n-        var options = Ctor.options;\r\n-        if (Ctor.super) {\r\n-            var superOptions = resolveConstructorOptions(Ctor.super);\r\n-            var cachedSuperOptions = Ctor.superOptions;\r\n-            if (superOptions !== cachedSuperOptions) {\r\n-                \u002F\u002F super option changed,\r\n-                \u002F\u002F need to resolve new options.\r\n-                Ctor.superOptions = superOptions;\r\n-                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\r\n-                var modifiedOptions = resolveModifiedOptions(Ctor);\r\n-                \u002F\u002F update base extend options\r\n-                if (modifiedOptions) {\r\n-                    extend(Ctor.extendOptions, modifiedOptions);\r\n-                }\r\n-                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\r\n-                if (options.name) {\r\n-                    options.components[options.name] = Ctor;\r\n-                }\r\n-            }\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    function resolveModifiedOptions (Ctor) {\r\n-        var modified;\r\n-        var latest = Ctor.options;\r\n-        var sealed = Ctor.sealedOptions;\r\n-        for (var key in latest) {\r\n-            if (latest[key] !== sealed[key]) {\r\n-                if (!modified) { modified = {}; }\r\n-                modified[key] = latest[key];\r\n-            }\r\n-        }\r\n-        return modified\r\n-    }\r\n-\r\n-    function Vue (options) {\r\n-        if (!(this instanceof Vue)\r\n-        ) {\r\n-            warn('Vue is a constructor and should be called with the `new` keyword');\r\n-        }\r\n-        this._init(options);\r\n-    }\r\n-\r\n-    initMixin(Vue);\r\n-    stateMixin(Vue);\r\n-    eventsMixin(Vue);\r\n-    lifecycleMixin(Vue);\r\n-    renderMixin(Vue);\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initUse (Vue) {\r\n-        Vue.use = function (plugin) {\r\n-            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\r\n-            if (installedPlugins.indexOf(plugin) > -1) {\r\n-                return this\r\n-            }\r\n-\r\n-            \u002F\u002F additional parameters\r\n-            var args = toArray(arguments, 1);\r\n-            args.unshift(this);\r\n-            if (typeof plugin.install === 'function') {\r\n-                plugin.install.apply(plugin, args);\r\n-            } else if (typeof plugin === 'function') {\r\n-                plugin.apply(null, args);\r\n-            }\r\n-            installedPlugins.push(plugin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initMixin$1 (Vue) {\r\n-        Vue.mixin = function (mixin) {\r\n-            this.options = mergeOptions(this.options, mixin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initExtend (Vue) {\r\n-        \u002F**\r\n-         * Each instance constructor, including Vue, has a unique\r\n-         * cid. This enables us to create wrapped \"child\r\n-         * constructors\" for prototypal inheritance and cache them.\r\n-         *\u002F\r\n-        Vue.cid = 0;\r\n-        var cid = 1;\r\n-\r\n-        \u002F**\r\n-         * Class inheritance\r\n-         *\u002F\r\n-        Vue.extend = function (extendOptions) {\r\n-            extendOptions = extendOptions || {};\r\n-            var Super = this;\r\n-            var SuperId = Super.cid;\r\n-            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\r\n-            if (cachedCtors[SuperId]) {\r\n-                return cachedCtors[SuperId]\r\n-            }\r\n-\r\n-            var name = extendOptions.name || Super.options.name;\r\n-            if (name) {\r\n-                validateComponentName(name);\r\n-            }\r\n-\r\n-            var Sub = function VueComponent (options) {\r\n-                this._init(options);\r\n-            };\r\n-            Sub.prototype = Object.create(Super.prototype);\r\n-            Sub.prototype.constructor = Sub;\r\n-            Sub.cid = cid++;\r\n-            Sub.options = mergeOptions(\r\n-                Super.options,\r\n-                extendOptions\r\n-            );\r\n-            Sub['super'] = Super;\r\n-\r\n-            \u002F\u002F For props and computed properties, we define the proxy getters on\r\n-            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\r\n-            \u002F\u002F avoids Object.defineProperty calls for each instance created.\r\n-            if (Sub.options.props) {\r\n-                initProps$1(Sub);\r\n-            }\r\n-            if (Sub.options.computed) {\r\n-                initComputed$1(Sub);\r\n-            }\r\n-\r\n-            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\r\n-            Sub.extend = Super.extend;\r\n-            Sub.mixin = Super.mixin;\r\n-            Sub.use = Super.use;\r\n-\r\n-            \u002F\u002F create asset registers, so extended classes\r\n-            \u002F\u002F can have their private assets too.\r\n-            ASSET_TYPES.forEach(function (type) {\r\n-                Sub[type] = Super[type];\r\n-            });\r\n-            \u002F\u002F enable recursive self-lookup\r\n-            if (name) {\r\n-                Sub.options.components[name] = Sub;\r\n-            }\r\n-\r\n-            \u002F\u002F keep a reference to the super options at extension time.\r\n-            \u002F\u002F later at instantiation we can check if Super's options have\r\n-            \u002F\u002F been updated.\r\n-            Sub.superOptions = Super.options;\r\n-            Sub.extendOptions = extendOptions;\r\n-            Sub.sealedOptions = extend({}, Sub.options);\r\n-\r\n-            \u002F\u002F cache constructor\r\n-            cachedCtors[SuperId] = Sub;\r\n-            return Sub\r\n-        };\r\n-    }\r\n-\r\n-    function initProps$1 (Comp) {\r\n-        var props = Comp.options.props;\r\n-        for (var key in props) {\r\n-            proxy(Comp.prototype, \"_props\", key);\r\n-        }\r\n-    }\r\n-\r\n-    function initComputed$1 (Comp) {\r\n-        var computed = Comp.options.computed;\r\n-        for (var key in computed) {\r\n-            defineComputed(Comp.prototype, key, computed[key]);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initAssetRegisters (Vue) {\r\n-        \u002F**\r\n-         * Create asset registration methods.\r\n-         *\u002F\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue[type] = function (\r\n-                id,\r\n-                definition\r\n-            ) {\r\n-                if (!definition) {\r\n-                    return this.options[type + 's'][id]\r\n-                } else {\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (type === 'component') {\r\n-                        validateComponentName(id);\r\n-                    }\r\n-                    if (type === 'component' && isPlainObject(definition)) {\r\n-                        definition.name = definition.name || id;\r\n-                        definition = this.options._base.extend(definition);\r\n-                    }\r\n-                    if (type === 'directive' && typeof definition === 'function') {\r\n-                        definition = { bind: definition, update: definition };\r\n-                    }\r\n-                    this.options[type + 's'][id] = definition;\r\n-                    return definition\r\n-                }\r\n-            };\r\n-        });\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function getComponentName (opts) {\r\n-        return opts && (opts.Ctor.options.name || opts.tag)\r\n-    }\r\n-\r\n-    function matches (pattern, name) {\r\n-        if (Array.isArray(pattern)) {\r\n-            return pattern.indexOf(name) > -1\r\n-        } else if (typeof pattern === 'string') {\r\n-            return pattern.split(',').indexOf(name) > -1\r\n-        } else if (isRegExp(pattern)) {\r\n-            return pattern.test(name)\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return false\r\n-    }\r\n-\r\n-    function pruneCache (keepAliveInstance, filter) {\r\n-        var cache = keepAliveInstance.cache;\r\n-        var keys = keepAliveInstance.keys;\r\n-        var _vnode = keepAliveInstance._vnode;\r\n-        for (var key in cache) {\r\n-            var cachedNode = cache[key];\r\n-            if (cachedNode) {\r\n-                var name = getComponentName(cachedNode.componentOptions);\r\n-                if (name && !filter(name)) {\r\n-                    pruneCacheEntry(cache, key, keys, _vnode);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function pruneCacheEntry (\r\n-        cache,\r\n-        key,\r\n-        keys,\r\n-        current\r\n-    ) {\r\n-        var cached$$1 = cache[key];\r\n-        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\r\n-            cached$$1.componentInstance.$destroy();\r\n-        }\r\n-        cache[key] = null;\r\n-        remove(keys, key);\r\n-    }\r\n-\r\n-    var patternTypes = [String, RegExp, Array];\r\n-\r\n-    var KeepAlive = {\r\n-        name: 'keep-alive',\r\n-        abstract: true,\r\n-\r\n-        props: {\r\n-            include: patternTypes,\r\n-            exclude: patternTypes,\r\n-            max: [String, Number]\r\n-        },\r\n-\r\n-        created: function created () {\r\n-            this.cache = Object.create(null);\r\n-            this.keys = [];\r\n-        },\r\n-\r\n-        destroyed: function destroyed () {\r\n-            for (var key in this.cache) {\r\n-                pruneCacheEntry(this.cache, key, this.keys);\r\n-            }\r\n-        },\r\n-\r\n-        mounted: function mounted () {\r\n-            var this$1 = this;\r\n-\r\n-            this.$watch('include', function (val) {\r\n-                pruneCache(this$1, function (name) { return matches(val, name); });\r\n-            });\r\n-            this.$watch('exclude', function (val) {\r\n-                pruneCache(this$1, function (name) { return !matches(val, name); });\r\n-            });\r\n-        },\r\n-\r\n-        render: function render () {\r\n-            var slot = this.$slots.default;\r\n-            var vnode = getFirstComponentChild(slot);\r\n-            var componentOptions = vnode && vnode.componentOptions;\r\n-            if (componentOptions) {\r\n-                \u002F\u002F check pattern\r\n-                var name = getComponentName(componentOptions);\r\n-                var ref = this;\r\n-                var include = ref.include;\r\n-                var exclude = ref.exclude;\r\n-                if (\r\n-                    \u002F\u002F not included\r\n-                (include && (!name || !matches(include, name))) ||\r\n-                \u002F\u002F excluded\r\n-                (exclude && name && matches(exclude, name))\r\n-                ) {\r\n-                    return vnode\r\n-                }\r\n-\r\n-                var ref$1 = this;\r\n-                var cache = ref$1.cache;\r\n-                var keys = ref$1.keys;\r\n-                var key = vnode.key == null\r\n-                    \u002F\u002F same constructor may get registered as different local components\r\n-                    \u002F\u002F so cid alone is not enough (#3269)\r\n-                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\r\n-                    : vnode.key;\r\n-                if (cache[key]) {\r\n-                    vnode.componentInstance = cache[key].componentInstance;\r\n-                    \u002F\u002F make current key freshest\r\n-                    remove(keys, key);\r\n-                    keys.push(key);\r\n-                } else {\r\n-                    cache[key] = vnode;\r\n-                    keys.push(key);\r\n-                    \u002F\u002F prune oldest entry\r\n-                    if (this.max && keys.length > parseInt(this.max)) {\r\n-                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.data.keepAlive = true;\r\n-            }\r\n-            return vnode || (slot && slot[0])\r\n-        }\r\n-    };\r\n-\r\n-    var builtInComponents = {\r\n-        KeepAlive: KeepAlive\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initGlobalAPI (Vue) {\r\n-        \u002F\u002F config\r\n-        var configDef = {};\r\n-        configDef.get = function () { return config; };\r\n-        {\r\n-            configDef.set = function () {\r\n-                warn(\r\n-                    'Do not replace the Vue.config object, set individual fields instead.'\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue, 'config', configDef);\r\n-\r\n-        \u002F\u002F exposed util methods.\r\n-        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\r\n-        \u002F\u002F them unless you are aware of the risk.\r\n-        Vue.util = {\r\n-            warn: warn,\r\n-            extend: extend,\r\n-            mergeOptions: mergeOptions,\r\n-            defineReactive: defineReactive$$1\r\n-        };\r\n-\r\n-        Vue.set = set;\r\n-        Vue.delete = del;\r\n-        Vue.nextTick = nextTick;\r\n-\r\n-        \u002F\u002F 2.6 explicit observable API\r\n-        Vue.observable = function (obj) {\r\n-            observe(obj);\r\n-            return obj\r\n-        };\r\n-\r\n-        Vue.options = Object.create(null);\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue.options[type + 's'] = Object.create(null);\r\n-        });\r\n-\r\n-        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\r\n-        \u002F\u002F components with in Weex's multi-instance scenarios.\r\n-        Vue.options._base = Vue;\r\n-\r\n-        extend(Vue.options.components, builtInComponents);\r\n-\r\n-        initUse(Vue);\r\n-        initMixin$1(Vue);\r\n-        initExtend(Vue);\r\n-        initAssetRegisters(Vue);\r\n-    }\r\n-\r\n-    initGlobalAPI(Vue);\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$isServer', {\r\n-        get: isServerRendering\r\n-    });\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$ssrContext', {\r\n-        get: function get () {\r\n-          \u002F* istanbul ignore next *\u002F\r\n-            return this.$vnode && this.$vnode.ssrContext\r\n-        }\r\n-    });\r\n-\r\n-    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\r\n-    Object.defineProperty(Vue, 'FunctionalRenderContext', {\r\n-        value: FunctionalRenderContext\r\n-    });\r\n-\r\n-    Vue.version = '2.6.10';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F these are reserved for web because they are directly compiled away\r\n-    \u002F\u002F during template compilation\r\n-    var isReservedAttr = makeMap('style,class');\r\n-\r\n-    \u002F\u002F attributes that should be using props for binding\r\n-    var acceptValue = makeMap('input,textarea,option,select,progress');\r\n-    var mustUseProp = function (tag, type, attr) {\r\n-        return (\r\n-            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\r\n-            (attr === 'selected' && tag === 'option') ||\r\n-            (attr === 'checked' && tag === 'input') ||\r\n-            (attr === 'muted' && tag === 'video')\r\n-        )\r\n-    };\r\n-\r\n-    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\r\n-\r\n-    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\r\n-\r\n-    var convertEnumeratedValue = function (key, value) {\r\n-        return isFalsyAttrValue(value) || value === 'false'\r\n-            ? 'false'\r\n-            \u002F\u002F allow arbitrary string value for contenteditable\r\n-            : key === 'contenteditable' && isValidContentEditableValue(value)\r\n-                ? value\r\n-                : 'true'\r\n-    };\r\n-\r\n-    var isBooleanAttr = makeMap(\r\n-        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\r\n-        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\r\n-        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\r\n-        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\r\n-        'required,reversed,scoped,seamless,selected,sortable,translate,' +\r\n-        'truespeed,typemustmatch,visible'\r\n-    );\r\n-\r\n-    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\r\n-\r\n-    var isXlink = function (name) {\r\n-        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\r\n-    };\r\n-\r\n-    var getXlinkProp = function (name) {\r\n-        return isXlink(name) ? name.slice(6, name.length) : ''\r\n-    };\r\n-\r\n-    var isFalsyAttrValue = function (val) {\r\n-        return val == null || val === false\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function genClassForVnode (vnode) {\r\n-        var data = vnode.data;\r\n-        var parentNode = vnode;\r\n-        var childNode = vnode;\r\n-        while (isDef(childNode.componentInstance)) {\r\n-            childNode = childNode.componentInstance._vnode;\r\n-            if (childNode && childNode.data) {\r\n-                data = mergeClassData(childNode.data, data);\r\n-            }\r\n-        }\r\n-        while (isDef(parentNode = parentNode.parent)) {\r\n-            if (parentNode && parentNode.data) {\r\n-                data = mergeClassData(data, parentNode.data);\r\n-            }\r\n-        }\r\n-        return renderClass(data.staticClass, data.class)\r\n-    }\r\n-\r\n-    function mergeClassData (child, parent) {\r\n-        return {\r\n-            staticClass: concat(child.staticClass, parent.staticClass),\r\n-            class: isDef(child.class)\r\n-                ? [child.class, parent.class]\r\n-                : parent.class\r\n-        }\r\n-    }\r\n-\r\n-    function renderClass (\r\n-        staticClass,\r\n-        dynamicClass\r\n-    ) {\r\n-        if (isDef(staticClass) || isDef(dynamicClass)) {\r\n-            return concat(staticClass, stringifyClass(dynamicClass))\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function concat (a, b) {\r\n-        return a ? b ? (a + ' ' + b) : a : (b || '')\r\n-    }\r\n-\r\n-    function stringifyClass (value) {\r\n-        if (Array.isArray(value)) {\r\n-            return stringifyArray(value)\r\n-        }\r\n-        if (isObject(value)) {\r\n-            return stringifyObject(value)\r\n-        }\r\n-        if (typeof value === 'string') {\r\n-            return value\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function stringifyArray (value) {\r\n-        var res = '';\r\n-        var stringified;\r\n-        for (var i = 0, l = value.length; i \u003C l; i++) {\r\n-            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\r\n-                if (res) { res += ' '; }\r\n-                res += stringified;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function stringifyObject (value) {\r\n-        var res = '';\r\n-        for (var key in value) {\r\n-            if (value[key]) {\r\n-                if (res) { res += ' '; }\r\n-                res += key;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var namespaceMap = {\r\n-        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\r\n-        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\r\n-    };\r\n-\r\n-    var isHTMLTag = makeMap(\r\n-        'html,body,base,head,link,meta,style,title,' +\r\n-        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\r\n-        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\r\n-        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\r\n-        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\r\n-        'embed,object,param,source,canvas,script,noscript,del,ins,' +\r\n-        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\r\n-        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\r\n-        'output,progress,select,textarea,' +\r\n-        'details,dialog,menu,menuitem,summary,' +\r\n-        'content,element,shadow,template,blockquote,iframe,tfoot'\r\n-    );\r\n-\r\n-    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\r\n-    \u002F\u002F contain child elements.\r\n-    var isSVG = makeMap(\r\n-        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\r\n-        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\r\n-        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\r\n-        true\r\n-    );\r\n-\r\n-    var isPreTag = function (tag) { return tag === 'pre'; };\r\n-\r\n-    var isReservedTag = function (tag) {\r\n-        return isHTMLTag(tag) || isSVG(tag)\r\n-    };\r\n-\r\n-    function getTagNamespace (tag) {\r\n-        if (isSVG(tag)) {\r\n-            return 'svg'\r\n-        }\r\n-        \u002F\u002F basic support for MathML\r\n-        \u002F\u002F note it doesn't support other MathML elements being component roots\r\n-        if (tag === 'math') {\r\n-            return 'math'\r\n-        }\r\n-    }\r\n-\r\n-    var unknownElementCache = Object.create(null);\r\n-    function isUnknownElement (tag) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!inBrowser) {\r\n-            return true\r\n-        }\r\n-        if (isReservedTag(tag)) {\r\n-            return false\r\n-        }\r\n-        tag = tag.toLowerCase();\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (unknownElementCache[tag] != null) {\r\n-            return unknownElementCache[tag]\r\n-        }\r\n-        var el = document.createElement(tag);\r\n-        if (tag.indexOf('-') > -1) {\r\n-            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\r\n-            return (unknownElementCache[tag] = (\r\n-                el.constructor === window.HTMLUnknownElement ||\r\n-                el.constructor === window.HTMLElement\r\n-            ))\r\n-        } else {\r\n-            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\r\n-        }\r\n-    }\r\n-\r\n-    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Query an element selector if it's not an element already.\r\n-     *\u002F\r\n-    function query (el) {\r\n-        if (typeof el === 'string') {\r\n-            var selected = document.querySelector(el);\r\n-            if (!selected) {\r\n-                warn(\r\n-                    'Cannot find element: ' + el\r\n-                );\r\n-                return document.createElement('div')\r\n-            }\r\n-            return selected\r\n-        } else {\r\n-            return el\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createElement$1 (tagName, vnode) {\r\n-        var elm = document.createElement(tagName);\r\n-        if (tagName !== 'select') {\r\n-            return elm\r\n-        }\r\n-        \u002F\u002F false or null will remove the attribute but undefined will not\r\n-        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\r\n-            elm.setAttribute('multiple', 'multiple');\r\n-        }\r\n-        return elm\r\n-    }\r\n-\r\n-    function createElementNS (namespace, tagName) {\r\n-        return document.createElementNS(namespaceMap[namespace], tagName)\r\n-    }\r\n-\r\n-    function createTextNode (text) {\r\n-        return document.createTextNode(text)\r\n-    }\r\n-\r\n-    function createComment (text) {\r\n-        return document.createComment(text)\r\n-    }\r\n-\r\n-    function insertBefore (parentNode, newNode, referenceNode) {\r\n-        parentNode.insertBefore(newNode, referenceNode);\r\n-    }\r\n-\r\n-    function removeChild (node, child) {\r\n-        node.removeChild(child);\r\n-    }\r\n-\r\n-    function appendChild (node, child) {\r\n-        node.appendChild(child);\r\n-    }\r\n-\r\n-    function parentNode (node) {\r\n-        return node.parentNode\r\n-    }\r\n-\r\n-    function nextSibling (node) {\r\n-        return node.nextSibling\r\n-    }\r\n-\r\n-    function tagName (node) {\r\n-        return node.tagName\r\n-    }\r\n-\r\n-    function setTextContent (node, text) {\r\n-        node.textContent = text;\r\n-    }\r\n-\r\n-    function setStyleScope (node, scopeId) {\r\n-        node.setAttribute(scopeId, '');\r\n-    }\r\n-\r\n-    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\r\n-        createElement: createElement$1,\r\n-        createElementNS: createElementNS,\r\n-        createTextNode: createTextNode,\r\n-        createComment: createComment,\r\n-        insertBefore: insertBefore,\r\n-        removeChild: removeChild,\r\n-        appendChild: appendChild,\r\n-        parentNode: parentNode,\r\n-        nextSibling: nextSibling,\r\n-        tagName: tagName,\r\n-        setTextContent: setTextContent,\r\n-        setStyleScope: setStyleScope\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref = {\r\n-        create: function create (_, vnode) {\r\n-            registerRef(vnode);\r\n-        },\r\n-        update: function update (oldVnode, vnode) {\r\n-            if (oldVnode.data.ref !== vnode.data.ref) {\r\n-                registerRef(oldVnode, true);\r\n-                registerRef(vnode);\r\n-            }\r\n-        },\r\n-        destroy: function destroy (vnode) {\r\n-            registerRef(vnode, true);\r\n-        }\r\n-    };\r\n-\r\n-    function registerRef (vnode, isRemoval) {\r\n-        var key = vnode.data.ref;\r\n-        if (!isDef(key)) { return }\r\n-\r\n-        var vm = vnode.context;\r\n-        var ref = vnode.componentInstance || vnode.elm;\r\n-        var refs = vm.$refs;\r\n-        if (isRemoval) {\r\n-            if (Array.isArray(refs[key])) {\r\n-                remove(refs[key], ref);\r\n-            } else if (refs[key] === ref) {\r\n-                refs[key] = undefined;\r\n-            }\r\n-        } else {\r\n-            if (vnode.data.refInFor) {\r\n-                if (!Array.isArray(refs[key])) {\r\n-                    refs[key] = [ref];\r\n-                } else if (refs[key].indexOf(ref) \u003C 0) {\r\n-                    \u002F\u002F $flow-disable-line\r\n-                    refs[key].push(ref);\r\n-                }\r\n-            } else {\r\n-                refs[key] = ref;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Virtual DOM patching algorithm based on Snabbdom by\r\n-     * Simon Friis Vindum (@paldepind)\r\n-     * Licensed under the MIT License\r\n-     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\r\n-     *\r\n-     * modified by Evan You (@yyx990803)\r\n-     *\r\n-     * Not type-checking this because this file is perf-critical and the cost\r\n-     * of making flow understand it is not worth it.\r\n-     *\u002F\r\n-\r\n-    var emptyNode = new VNode('', {}, []);\r\n-\r\n-    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\r\n-\r\n-    function sameVnode (a, b) {\r\n-        return (\r\n-            a.key === b.key && (\r\n-                (\r\n-                    a.tag === b.tag &&\r\n-                    a.isComment === b.isComment &&\r\n-                    isDef(a.data) === isDef(b.data) &&\r\n-                    sameInputType(a, b)\r\n-                ) || (\r\n-                    isTrue(a.isAsyncPlaceholder) &&\r\n-                    a.asyncFactory === b.asyncFactory &&\r\n-                    isUndef(b.asyncFactory.error)\r\n-                )\r\n-            )\r\n-        )\r\n-    }\r\n-\r\n-    function sameInputType (a, b) {\r\n-        if (a.tag !== 'input') { return true }\r\n-        var i;\r\n-        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\r\n-        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\r\n-        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\r\n-    }\r\n-\r\n-    function createKeyToOldIdx (children, beginIdx, endIdx) {\r\n-        var i, key;\r\n-        var map = {};\r\n-        for (i = beginIdx; i \u003C= endIdx; ++i) {\r\n-            key = children[i].key;\r\n-            if (isDef(key)) { map[key] = i; }\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    function createPatchFunction (backend) {\r\n-        var i, j;\r\n-        var cbs = {};\r\n-\r\n-        var modules = backend.modules;\r\n-        var nodeOps = backend.nodeOps;\r\n-\r\n-        for (i = 0; i \u003C hooks.length; ++i) {\r\n-            cbs[hooks[i]] = [];\r\n-            for (j = 0; j \u003C modules.length; ++j) {\r\n-                if (isDef(modules[j][hooks[i]])) {\r\n-                    cbs[hooks[i]].push(modules[j][hooks[i]]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function emptyNodeAt (elm) {\r\n-            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\r\n-        }\r\n-\r\n-        function createRmCb (childElm, listeners) {\r\n-            function remove$$1 () {\r\n-                if (--remove$$1.listeners === 0) {\r\n-                    removeNode(childElm);\r\n-                }\r\n-            }\r\n-            remove$$1.listeners = listeners;\r\n-            return remove$$1\r\n-        }\r\n-\r\n-        function removeNode (el) {\r\n-            var parent = nodeOps.parentNode(el);\r\n-            \u002F\u002F element may have already been removed due to v-html \u002F v-text\r\n-            if (isDef(parent)) {\r\n-                nodeOps.removeChild(parent, el);\r\n-            }\r\n-        }\r\n-\r\n-        function isUnknownElement$$1 (vnode, inVPre) {\r\n-            return (\r\n-                !inVPre &&\r\n-                !vnode.ns &&\r\n-                !(\r\n-                    config.ignoredElements.length &&\r\n-                    config.ignoredElements.some(function (ignore) {\r\n-                        return isRegExp(ignore)\r\n-                            ? ignore.test(vnode.tag)\r\n-                            : ignore === vnode.tag\r\n-                    })\r\n-                ) &&\r\n-                config.isUnknownElement(vnode.tag)\r\n-            )\r\n-        }\r\n-\r\n-        var creatingElmInVPre = 0;\r\n-\r\n-        function createElm (\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            parentElm,\r\n-            refElm,\r\n-            nested,\r\n-            ownerArray,\r\n-            index\r\n-        ) {\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F This vnode was used in a previous render!\r\n-                \u002F\u002F now it's used as a new node, overwriting its elm would cause\r\n-                \u002F\u002F potential patch errors down the road when it's used as an insertion\r\n-                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\r\n-                \u002F\u002F associated DOM element for it.\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\r\n-            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\r\n-                return\r\n-            }\r\n-\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            var tag = vnode.tag;\r\n-            if (isDef(tag)) {\r\n-                {\r\n-                    if (data && data.pre) {\r\n-                        creatingElmInVPre++;\r\n-                    }\r\n-                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\r\n-                        warn(\r\n-                            'Unknown custom element: \u003C' + tag + '> - did you ' +\r\n-                            'register the component correctly? For recursive components, ' +\r\n-                            'make sure to provide the \"name\" option.',\r\n-                            vnode.context\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.elm = vnode.ns\r\n-                    ? nodeOps.createElementNS(vnode.ns, tag)\r\n-                    : nodeOps.createElement(tag, vnode);\r\n-                setScope(vnode);\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                {\r\n-                    createChildren(vnode, children, insertedVnodeQueue);\r\n-                    if (isDef(data)) {\r\n-                        invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                    }\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                }\r\n-\r\n-                if (data && data.pre) {\r\n-                    creatingElmInVPre--;\r\n-                }\r\n-            } else if (isTrue(vnode.isComment)) {\r\n-                vnode.elm = nodeOps.createComment(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            } else {\r\n-                vnode.elm = nodeOps.createTextNode(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            }\r\n-        }\r\n-\r\n-        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i = vnode.data;\r\n-            if (isDef(i)) {\r\n-                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\r\n-                if (isDef(i = i.hook) && isDef(i = i.init)) {\r\n-                    i(vnode, false \u002F* hydrating *\u002F);\r\n-                }\r\n-                \u002F\u002F after calling the init hook, if the vnode is a child component\r\n-                \u002F\u002F it should've created a child instance and mounted it. the child\r\n-                \u002F\u002F component also has set the placeholder vnode's elm.\r\n-                \u002F\u002F in that case we can just return the element and be done.\r\n-                if (isDef(vnode.componentInstance)) {\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                    if (isTrue(isReactivated)) {\r\n-                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\r\n-                    }\r\n-                    return true\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function initComponent (vnode, insertedVnodeQueue) {\r\n-            if (isDef(vnode.data.pendingInsert)) {\r\n-                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\r\n-                vnode.data.pendingInsert = null;\r\n-            }\r\n-            vnode.elm = vnode.componentInstance.$el;\r\n-            if (isPatchable(vnode)) {\r\n-                invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                setScope(vnode);\r\n-            } else {\r\n-                \u002F\u002F empty component root.\r\n-                \u002F\u002F skip all element-related modules except for ref (#3455)\r\n-                registerRef(vnode);\r\n-                \u002F\u002F make sure to invoke the insert hook\r\n-                insertedVnodeQueue.push(vnode);\r\n-            }\r\n-        }\r\n-\r\n-        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i;\r\n-            \u002F\u002F hack for #4339: a reactivated component with inner transition\r\n-            \u002F\u002F does not trigger because the inner node's created hooks are not called\r\n-            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\r\n-            \u002F\u002F there doesn't seem to be a better way to do it.\r\n-            var innerNode = vnode;\r\n-            while (innerNode.componentInstance) {\r\n-                innerNode = innerNode.componentInstance._vnode;\r\n-                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\r\n-                    for (i = 0; i \u003C cbs.activate.length; ++i) {\r\n-                        cbs.activate[i](emptyNode, innerNode);\r\n-                    }\r\n-                    insertedVnodeQueue.push(innerNode);\r\n-                    break\r\n-                }\r\n-            }\r\n-            \u002F\u002F unlike a newly created component,\r\n-            \u002F\u002F a reactivated keep-alive component doesn't insert itself\r\n-            insert(parentElm, vnode.elm, refElm);\r\n-        }\r\n-\r\n-        function insert (parent, elm, ref$$1) {\r\n-            if (isDef(parent)) {\r\n-                if (isDef(ref$$1)) {\r\n-                    if (nodeOps.parentNode(ref$$1) === parent) {\r\n-                        nodeOps.insertBefore(parent, elm, ref$$1);\r\n-                    }\r\n-                } else {\r\n-                    nodeOps.appendChild(parent, elm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function createChildren (vnode, children, insertedVnodeQueue) {\r\n-            if (Array.isArray(children)) {\r\n-                {\r\n-                    checkDuplicateKeys(children);\r\n-                }\r\n-                for (var i = 0; i \u003C children.length; ++i) {\r\n-                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\r\n-                }\r\n-            } else if (isPrimitive(vnode.text)) {\r\n-                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\r\n-            }\r\n-        }\r\n-\r\n-        function isPatchable (vnode) {\r\n-            while (vnode.componentInstance) {\r\n-                vnode = vnode.componentInstance._vnode;\r\n-            }\r\n-            return isDef(vnode.tag)\r\n-        }\r\n-\r\n-        function invokeCreateHooks (vnode, insertedVnodeQueue) {\r\n-            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                cbs.create[i$1](emptyNode, vnode);\r\n-            }\r\n-            i = vnode.data.hook; \u002F\u002F Reuse variable\r\n-            if (isDef(i)) {\r\n-                if (isDef(i.create)) { i.create(emptyNode, vnode); }\r\n-                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F set scope id attribute for scoped CSS.\r\n-        \u002F\u002F this is implemented as a special case to avoid the overhead\r\n-        \u002F\u002F of going through the normal attribute patching process.\r\n-        function setScope (vnode) {\r\n-            var i;\r\n-            if (isDef(i = vnode.fnScopeId)) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            } else {\r\n-                var ancestor = vnode;\r\n-                while (ancestor) {\r\n-                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\r\n-                        nodeOps.setStyleScope(vnode.elm, i);\r\n-                    }\r\n-                    ancestor = ancestor.parent;\r\n-                }\r\n-            }\r\n-            \u002F\u002F for slot content they should also get the scopeId from the host instance.\r\n-            if (isDef(i = activeInstance) &&\r\n-                i !== vnode.context &&\r\n-                i !== vnode.fnContext &&\r\n-                isDef(i = i.$options._scopeId)\r\n-            ) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            }\r\n-        }\r\n-\r\n-        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function invokeDestroyHook (vnode) {\r\n-            var i, j;\r\n-            var data = vnode.data;\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\r\n-                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\r\n-            }\r\n-            if (isDef(i = vnode.children)) {\r\n-                for (j = 0; j \u003C vnode.children.length; ++j) {\r\n-                    invokeDestroyHook(vnode.children[j]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                var ch = vnodes[startIdx];\r\n-                if (isDef(ch)) {\r\n-                    if (isDef(ch.tag)) {\r\n-                        removeAndInvokeRemoveHook(ch);\r\n-                        invokeDestroyHook(ch);\r\n-                    } else { \u002F\u002F Text node\r\n-                        removeNode(ch.elm);\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeAndInvokeRemoveHook (vnode, rm) {\r\n-            if (isDef(rm) || isDef(vnode.data)) {\r\n-                var i;\r\n-                var listeners = cbs.remove.length + 1;\r\n-                if (isDef(rm)) {\r\n-                    \u002F\u002F we have a recursively passed down rm callback\r\n-                    \u002F\u002F increase the listeners count\r\n-                    rm.listeners += listeners;\r\n-                } else {\r\n-                    \u002F\u002F directly removing\r\n-                    rm = createRmCb(vnode.elm, listeners);\r\n-                }\r\n-                \u002F\u002F recursively invoke hooks on child component root node\r\n-                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\r\n-                    removeAndInvokeRemoveHook(i, rm);\r\n-                }\r\n-                for (i = 0; i \u003C cbs.remove.length; ++i) {\r\n-                    cbs.remove[i](vnode, rm);\r\n-                }\r\n-                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\r\n-                    i(vnode, rm);\r\n-                } else {\r\n-                    rm();\r\n-                }\r\n-            } else {\r\n-                removeNode(vnode.elm);\r\n-            }\r\n-        }\r\n-\r\n-        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\r\n-            var oldStartIdx = 0;\r\n-            var newStartIdx = 0;\r\n-            var oldEndIdx = oldCh.length - 1;\r\n-            var oldStartVnode = oldCh[0];\r\n-            var oldEndVnode = oldCh[oldEndIdx];\r\n-            var newEndIdx = newCh.length - 1;\r\n-            var newStartVnode = newCh[0];\r\n-            var newEndVnode = newCh[newEndIdx];\r\n-            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\r\n-\r\n-            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\r\n-            \u002F\u002F to ensure removed elements stay in correct relative positions\r\n-            \u002F\u002F during leaving transitions\r\n-            var canMove = !removeOnly;\r\n-\r\n-            {\r\n-                checkDuplicateKeys(newCh);\r\n-            }\r\n-\r\n-            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\r\n-                if (isUndef(oldStartVnode)) {\r\n-                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\r\n-                } else if (isUndef(oldEndVnode)) {\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newStartVnode)) {\r\n-                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else if (sameVnode(oldEndVnode, newEndVnode)) {\r\n-                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\r\n-                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\r\n-                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else {\r\n-                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\r\n-                    idxInOld = isDef(newStartVnode.key)\r\n-                        ? oldKeyToIdx[newStartVnode.key]\r\n-                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\r\n-                    if (isUndef(idxInOld)) { \u002F\u002F New element\r\n-                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                    } else {\r\n-                        vnodeToMove = oldCh[idxInOld];\r\n-                        if (sameVnode(vnodeToMove, newStartVnode)) {\r\n-                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                            oldCh[idxInOld] = undefined;\r\n-                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\r\n-                        } else {\r\n-                            \u002F\u002F same key but different element. treat as new element\r\n-                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                        }\r\n-                    }\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                }\r\n-            }\r\n-            if (oldStartIdx > oldEndIdx) {\r\n-                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\r\n-                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\r\n-            } else if (newStartIdx > newEndIdx) {\r\n-                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function checkDuplicateKeys (children) {\r\n-            var seenKeys = {};\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var vnode = children[i];\r\n-                var key = vnode.key;\r\n-                if (isDef(key)) {\r\n-                    if (seenKeys[key]) {\r\n-                        warn(\r\n-                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\r\n-                            vnode.context\r\n-                        );\r\n-                    } else {\r\n-                        seenKeys[key] = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function findIdxInOld (node, oldCh, start, end) {\r\n-            for (var i = start; i \u003C end; i++) {\r\n-                var c = oldCh[i];\r\n-                if (isDef(c) && sameVnode(node, c)) { return i }\r\n-            }\r\n-        }\r\n-\r\n-        function patchVnode (\r\n-            oldVnode,\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            ownerArray,\r\n-            index,\r\n-            removeOnly\r\n-        ) {\r\n-            if (oldVnode === vnode) {\r\n-                return\r\n-            }\r\n-\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F clone reused vnode\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            var elm = vnode.elm = oldVnode.elm;\r\n-\r\n-            if (isTrue(oldVnode.isAsyncPlaceholder)) {\r\n-                if (isDef(vnode.asyncFactory.resolved)) {\r\n-                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\r\n-                } else {\r\n-                    vnode.isAsyncPlaceholder = true;\r\n-                }\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F reuse element for static trees.\r\n-            \u002F\u002F note we only do this if the vnode is cloned -\r\n-            \u002F\u002F if the new node is not cloned it means the render functions have been\r\n-            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\r\n-            if (isTrue(vnode.isStatic) &&\r\n-                isTrue(oldVnode.isStatic) &&\r\n-                vnode.key === oldVnode.key &&\r\n-                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\r\n-            ) {\r\n-                vnode.componentInstance = oldVnode.componentInstance;\r\n-                return\r\n-            }\r\n-\r\n-            var i;\r\n-            var data = vnode.data;\r\n-            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\r\n-                i(oldVnode, vnode);\r\n-            }\r\n-\r\n-            var oldCh = oldVnode.children;\r\n-            var ch = vnode.children;\r\n-            if (isDef(data) && isPatchable(vnode)) {\r\n-                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\r\n-                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\r\n-            }\r\n-            if (isUndef(vnode.text)) {\r\n-                if (isDef(oldCh) && isDef(ch)) {\r\n-                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\r\n-                } else if (isDef(ch)) {\r\n-                    {\r\n-                        checkDuplicateKeys(ch);\r\n-                    }\r\n-                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\r\n-                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\r\n-                } else if (isDef(oldCh)) {\r\n-                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\r\n-                } else if (isDef(oldVnode.text)) {\r\n-                    nodeOps.setTextContent(elm, '');\r\n-                }\r\n-            } else if (oldVnode.text !== vnode.text) {\r\n-                nodeOps.setTextContent(elm, vnode.text);\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        function invokeInsertHook (vnode, queue, initial) {\r\n-            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\r\n-            \u002F\u002F element is really inserted\r\n-            if (isTrue(initial) && isDef(vnode.parent)) {\r\n-                vnode.parent.data.pendingInsert = queue;\r\n-            } else {\r\n-                for (var i = 0; i \u003C queue.length; ++i) {\r\n-                    queue[i].data.hook.insert(queue[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var hydrationBailed = false;\r\n-        \u002F\u002F list of modules that can skip create hook during hydration because they\r\n-        \u002F\u002F are already rendered on the client or has no need for initialization\r\n-        \u002F\u002F Note: style is excluded because it relies on initial clone for future\r\n-        \u002F\u002F deep updates (#7063).\r\n-        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\r\n-\r\n-        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\r\n-        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\r\n-            var i;\r\n-            var tag = vnode.tag;\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            inVPre = inVPre || (data && data.pre);\r\n-            vnode.elm = elm;\r\n-\r\n-            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\r\n-                vnode.isAsyncPlaceholder = true;\r\n-                return true\r\n-            }\r\n-            \u002F\u002F assert node match\r\n-            {\r\n-                if (!assertNodeMatch(elm, vnode, inVPre)) {\r\n-                    return false\r\n-                }\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\r\n-                if (isDef(i = vnode.componentInstance)) {\r\n-                    \u002F\u002F child component. it should have hydrated its own tree.\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    return true\r\n-                }\r\n-            }\r\n-            if (isDef(tag)) {\r\n-                if (isDef(children)) {\r\n-                    \u002F\u002F empty element, allow client to pick up and populate children\r\n-                    if (!elm.hasChildNodes()) {\r\n-                        createChildren(vnode, children, insertedVnodeQueue);\r\n-                    } else {\r\n-                        \u002F\u002F v-html and domProps: innerHTML\r\n-                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\r\n-                            if (i !== elm.innerHTML) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('server innerHTML: ', i);\r\n-                                    console.warn('client innerHTML: ', elm.innerHTML);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        } else {\r\n-                            \u002F\u002F iterate and compare children lists\r\n-                            var childrenMatch = true;\r\n-                            var childNode = elm.firstChild;\r\n-                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\r\n-                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\r\n-                                    childrenMatch = false;\r\n-                                    break\r\n-                                }\r\n-                                childNode = childNode.nextSibling;\r\n-                            }\r\n-                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\r\n-                            \u002F\u002F longer than the virtual children list.\r\n-                            if (!childrenMatch || childNode) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-                if (isDef(data)) {\r\n-                    var fullInvoke = false;\r\n-                    for (var key in data) {\r\n-                        if (!isRenderedModule(key)) {\r\n-                            fullInvoke = true;\r\n-                            invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                            break\r\n-                        }\r\n-                    }\r\n-                    if (!fullInvoke && data['class']) {\r\n-                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\r\n-                        traverse(data['class']);\r\n-                    }\r\n-                }\r\n-            } else if (elm.data !== vnode.text) {\r\n-                elm.data = vnode.text;\r\n-            }\r\n-            return true\r\n-        }\r\n-\r\n-        function assertNodeMatch (node, vnode, inVPre) {\r\n-            if (isDef(vnode.tag)) {\r\n-                return vnode.tag.indexOf('vue-component') === 0 || (\r\n-                        !isUnknownElement$$1(vnode, inVPre) &&\r\n-                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\r\n-                    )\r\n-            } else {\r\n-                return node.nodeType === (vnode.isComment ? 8 : 3)\r\n-            }\r\n-        }\r\n-\r\n-        return function patch (oldVnode, vnode, hydrating, removeOnly) {\r\n-            if (isUndef(vnode)) {\r\n-                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\r\n-                return\r\n-            }\r\n-\r\n-            var isInitialPatch = false;\r\n-            var insertedVnodeQueue = [];\r\n-\r\n-            if (isUndef(oldVnode)) {\r\n-                \u002F\u002F empty mount (likely as component), create new root element\r\n-                isInitialPatch = true;\r\n-                createElm(vnode, insertedVnodeQueue);\r\n-            } else {\r\n-                var isRealElement = isDef(oldVnode.nodeType);\r\n-                if (!isRealElement && sameVnode(oldVnode, vnode)) {\r\n-                    \u002F\u002F patch existing root node\r\n-                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\r\n-                } else {\r\n-                    if (isRealElement) {\r\n-                        \u002F\u002F mounting to a real element\r\n-                        \u002F\u002F check if this is server-rendered content and if we can perform\r\n-                        \u002F\u002F a successful hydration.\r\n-                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\r\n-                            oldVnode.removeAttribute(SSR_ATTR);\r\n-                            hydrating = true;\r\n-                        }\r\n-                        if (isTrue(hydrating)) {\r\n-                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\r\n-                                invokeInsertHook(vnode, insertedVnodeQueue, true);\r\n-                                return oldVnode\r\n-                            } else {\r\n-                                warn(\r\n-                                    'The client-side rendered virtual DOM tree is not matching ' +\r\n-                                    'server-rendered content. This is likely caused by incorrect ' +\r\n-                                    'HTML markup, for example nesting block-level elements inside ' +\r\n-                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\r\n-                                    'full client-side render.'\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                        \u002F\u002F either not server-rendered, or hydration failed.\r\n-                        \u002F\u002F create an empty node and replace it\r\n-                        oldVnode = emptyNodeAt(oldVnode);\r\n-                    }\r\n-\r\n-                    \u002F\u002F replacing existing element\r\n-                    var oldElm = oldVnode.elm;\r\n-                    var parentElm = nodeOps.parentNode(oldElm);\r\n-\r\n-                    \u002F\u002F create new node\r\n-                    createElm(\r\n-                        vnode,\r\n-                        insertedVnodeQueue,\r\n-                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\r\n-                        \u002F\u002F leaving transition. Only happens when combining transition +\r\n-                        \u002F\u002F keep-alive + HOCs. (#4590)\r\n-                        oldElm._leaveCb ? null : parentElm,\r\n-                        nodeOps.nextSibling(oldElm)\r\n-                    );\r\n-\r\n-                    \u002F\u002F update parent placeholder node element, recursively\r\n-                    if (isDef(vnode.parent)) {\r\n-                        var ancestor = vnode.parent;\r\n-                        var patchable = isPatchable(vnode);\r\n-                        while (ancestor) {\r\n-                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\r\n-                                cbs.destroy[i](ancestor);\r\n-                            }\r\n-                            ancestor.elm = vnode.elm;\r\n-                            if (patchable) {\r\n-                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                                    cbs.create[i$1](emptyNode, ancestor);\r\n-                                }\r\n-                                \u002F\u002F #6513\r\n-                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\r\n-                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\r\n-                                var insert = ancestor.data.hook.insert;\r\n-                                if (insert.merged) {\r\n-                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\r\n-                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\r\n-                                        insert.fns[i$2]();\r\n-                                    }\r\n-                                }\r\n-                            } else {\r\n-                                registerRef(ancestor);\r\n-                            }\r\n-                            ancestor = ancestor.parent;\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F destroy old node\r\n-                    if (isDef(parentElm)) {\r\n-                        removeVnodes(parentElm, [oldVnode], 0, 0);\r\n-                    } else if (isDef(oldVnode.tag)) {\r\n-                        invokeDestroyHook(oldVnode);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\r\n-            return vnode.elm\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var directives = {\r\n-        create: updateDirectives,\r\n-        update: updateDirectives,\r\n-        destroy: function unbindDirectives (vnode) {\r\n-            updateDirectives(vnode, emptyNode);\r\n-        }\r\n-    };\r\n-\r\n-    function updateDirectives (oldVnode, vnode) {\r\n-        if (oldVnode.data.directives || vnode.data.directives) {\r\n-            _update(oldVnode, vnode);\r\n-        }\r\n-    }\r\n-\r\n-    function _update (oldVnode, vnode) {\r\n-        var isCreate = oldVnode === emptyNode;\r\n-        var isDestroy = vnode === emptyNode;\r\n-        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\r\n-        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\r\n-\r\n-        var dirsWithInsert = [];\r\n-        var dirsWithPostpatch = [];\r\n-\r\n-        var key, oldDir, dir;\r\n-        for (key in newDirs) {\r\n-            oldDir = oldDirs[key];\r\n-            dir = newDirs[key];\r\n-            if (!oldDir) {\r\n-                \u002F\u002F new directive, bind\r\n-                callHook$1(dir, 'bind', vnode, oldVnode);\r\n-                if (dir.def && dir.def.inserted) {\r\n-                    dirsWithInsert.push(dir);\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F existing directive, update\r\n-                dir.oldValue = oldDir.value;\r\n-                dir.oldArg = oldDir.arg;\r\n-                callHook$1(dir, 'update', vnode, oldVnode);\r\n-                if (dir.def && dir.def.componentUpdated) {\r\n-                    dirsWithPostpatch.push(dir);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithInsert.length) {\r\n-            var callInsert = function () {\r\n-                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\r\n-                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\r\n-                }\r\n-            };\r\n-            if (isCreate) {\r\n-                mergeVNodeHook(vnode, 'insert', callInsert);\r\n-            } else {\r\n-                callInsert();\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithPostpatch.length) {\r\n-            mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\r\n-                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (!isCreate) {\r\n-            for (key in oldDirs) {\r\n-                if (!newDirs[key]) {\r\n-                    \u002F\u002F no longer present, unbind\r\n-                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var emptyModifiers = Object.create(null);\r\n-\r\n-    function normalizeDirectives$1 (\r\n-        dirs,\r\n-        vm\r\n-    ) {\r\n-        var res = Object.create(null);\r\n-        if (!dirs) {\r\n-            \u002F\u002F $flow-disable-line\r\n-            return res\r\n-        }\r\n-        var i, dir;\r\n-        for (i = 0; i \u003C dirs.length; i++) {\r\n-            dir = dirs[i];\r\n-            if (!dir.modifiers) {\r\n-                \u002F\u002F $flow-disable-line\r\n-                dir.modifiers = emptyModifiers;\r\n-            }\r\n-            res[getRawDirName(dir)] = dir;\r\n-            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        return res\r\n-    }\r\n-\r\n-    function getRawDirName (dir) {\r\n-        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\r\n-    }\r\n-\r\n-    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\r\n-        var fn = dir.def && dir.def[hook];\r\n-        if (fn) {\r\n-            try {\r\n-                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\r\n-            } catch (e) {\r\n-                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var baseModules = [\r\n-        ref,\r\n-        directives\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateAttrs (oldVnode, vnode) {\r\n-        var opts = vnode.componentOptions;\r\n-        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\r\n-            return\r\n-        }\r\n-        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\r\n-            return\r\n-        }\r\n-        var key, cur, old;\r\n-        var elm = vnode.elm;\r\n-        var oldAttrs = oldVnode.data.attrs || {};\r\n-        var attrs = vnode.data.attrs || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(attrs.__ob__)) {\r\n-            attrs = vnode.data.attrs = extend({}, attrs);\r\n-        }\r\n-\r\n-        for (key in attrs) {\r\n-            cur = attrs[key];\r\n-            old = oldAttrs[key];\r\n-            if (old !== cur) {\r\n-                setAttr(elm, key, cur);\r\n-            }\r\n-        }\r\n-        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\r\n-        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\r\n-            setAttr(elm, 'value', attrs.value);\r\n-        }\r\n-        for (key in oldAttrs) {\r\n-            if (isUndef(attrs[key])) {\r\n-                if (isXlink(key)) {\r\n-                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-                } else if (!isEnumeratedAttr(key)) {\r\n-                    elm.removeAttribute(key);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function setAttr (el, key, value) {\r\n-        if (el.tagName.indexOf('-') > -1) {\r\n-            baseSetAttr(el, key, value);\r\n-        } else if (isBooleanAttr(key)) {\r\n-            \u002F\u002F set attribute for blank value\r\n-            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttribute(key);\r\n-            } else {\r\n-                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\r\n-                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\r\n-                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\r\n-                    ? 'true'\r\n-                    : key;\r\n-                el.setAttribute(key, value);\r\n-            }\r\n-        } else if (isEnumeratedAttr(key)) {\r\n-            el.setAttribute(key, convertEnumeratedValue(key, value));\r\n-        } else if (isXlink(key)) {\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-            } else {\r\n-                el.setAttributeNS(xlinkNS, key, value);\r\n-            }\r\n-        } else {\r\n-            baseSetAttr(el, key, value);\r\n-        }\r\n-    }\r\n-\r\n-    function baseSetAttr (el, key, value) {\r\n-        if (isFalsyAttrValue(value)) {\r\n-            el.removeAttribute(key);\r\n-        } else {\r\n-            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\r\n-            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\r\n-            \u002F\u002F immediately.\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (\r\n-                isIE && !isIE9 &&\r\n-                el.tagName === 'TEXTAREA' &&\r\n-                key === 'placeholder' && value !== '' && !el.__ieph\r\n-            ) {\r\n-                var blocker = function (e) {\r\n-                    e.stopImmediatePropagation();\r\n-                    el.removeEventListener('input', blocker);\r\n-                };\r\n-                el.addEventListener('input', blocker);\r\n-                \u002F\u002F $flow-disable-line\r\n-                el.__ieph = true; \u002F* IE placeholder patched *\u002F\r\n-            }\r\n-            el.setAttribute(key, value);\r\n-        }\r\n-    }\r\n-\r\n-    var attrs = {\r\n-        create: updateAttrs,\r\n-        update: updateAttrs\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateClass (oldVnode, vnode) {\r\n-        var el = vnode.elm;\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-        if (\r\n-            isUndef(data.staticClass) &&\r\n-            isUndef(data.class) && (\r\n-                isUndef(oldData) || (\r\n-                    isUndef(oldData.staticClass) &&\r\n-                    isUndef(oldData.class)\r\n-                )\r\n-            )\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cls = genClassForVnode(vnode);\r\n-\r\n-        \u002F\u002F handle transition classes\r\n-        var transitionClass = el._transitionClasses;\r\n-        if (isDef(transitionClass)) {\r\n-            cls = concat(cls, stringifyClass(transitionClass));\r\n-        }\r\n-\r\n-        \u002F\u002F set the class\r\n-        if (cls !== el._prevClass) {\r\n-            el.setAttribute('class', cls);\r\n-            el._prevClass = cls;\r\n-        }\r\n-    }\r\n-\r\n-    var klass = {\r\n-        create: updateClass,\r\n-        update: updateClass\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\r\n-\r\n-    function parseFilters (exp) {\r\n-        var inSingle = false;\r\n-        var inDouble = false;\r\n-        var inTemplateString = false;\r\n-        var inRegex = false;\r\n-        var curly = 0;\r\n-        var square = 0;\r\n-        var paren = 0;\r\n-        var lastFilterIndex = 0;\r\n-        var c, prev, i, expression, filters;\r\n-\r\n-        for (i = 0; i \u003C exp.length; i++) {\r\n-            prev = c;\r\n-            c = exp.charCodeAt(i);\r\n-            if (inSingle) {\r\n-                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\r\n-            } else if (inDouble) {\r\n-                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\r\n-            } else if (inTemplateString) {\r\n-                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\r\n-            } else if (inRegex) {\r\n-                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\r\n-            } else if (\r\n-                c === 0x7C && \u002F\u002F pipe\r\n-                exp.charCodeAt(i + 1) !== 0x7C &&\r\n-                exp.charCodeAt(i - 1) !== 0x7C &&\r\n-                !curly && !square && !paren\r\n-            ) {\r\n-                if (expression === undefined) {\r\n-                    \u002F\u002F first filter, end of expression\r\n-                    lastFilterIndex = i + 1;\r\n-                    expression = exp.slice(0, i).trim();\r\n-                } else {\r\n-                    pushFilter();\r\n-                }\r\n-            } else {\r\n-                switch (c) {\r\n-                    case 0x22: inDouble = true; break         \u002F\u002F \"\r\n-                    case 0x27: inSingle = true; break         \u002F\u002F '\r\n-                    case 0x60: inTemplateString = true; break \u002F\u002F `\r\n-                    case 0x28: paren++; break                 \u002F\u002F (\r\n-                    case 0x29: paren--; break                 \u002F\u002F )\r\n-                    case 0x5B: square++; break                \u002F\u002F [\r\n-                    case 0x5D: square--; break                \u002F\u002F ]\r\n-                    case 0x7B: curly++; break                 \u002F\u002F {\r\n-                    case 0x7D: curly--; break                 \u002F\u002F }\r\n-                }\r\n-                if (c === 0x2f) { \u002F\u002F \u002F\r\n-                    var j = i - 1;\r\n-                    var p = (void 0);\r\n-                    \u002F\u002F find first non-whitespace prev char\r\n-                    for (; j >= 0; j--) {\r\n-                        p = exp.charAt(j);\r\n-                        if (p !== ' ') { break }\r\n-                    }\r\n-                    if (!p || !validDivisionCharRE.test(p)) {\r\n-                        inRegex = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (expression === undefined) {\r\n-            expression = exp.slice(0, i).trim();\r\n-        } else if (lastFilterIndex !== 0) {\r\n-            pushFilter();\r\n-        }\r\n-\r\n-        function pushFilter () {\r\n-            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\r\n-            lastFilterIndex = i + 1;\r\n-        }\r\n-\r\n-        if (filters) {\r\n-            for (i = 0; i \u003C filters.length; i++) {\r\n-                expression = wrapFilter(expression, filters[i]);\r\n-            }\r\n-        }\r\n-\r\n-        return expression\r\n-    }\r\n-\r\n-    function wrapFilter (exp, filter) {\r\n-        var i = filter.indexOf('(');\r\n-        if (i \u003C 0) {\r\n-            \u002F\u002F _f: resolveFilter\r\n-            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\r\n-        } else {\r\n-            var name = filter.slice(0, i);\r\n-            var args = filter.slice(i + 1);\r\n-            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-    function baseWarn (msg, range) {\r\n-        console.error((\"[Vue compiler]: \" + msg));\r\n-    }\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    function pluckModuleFunction (\r\n-        modules,\r\n-        key\r\n-    ) {\r\n-        return modules\r\n-            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\r\n-            : []\r\n-    }\r\n-\r\n-    function addProp (el, name, value, range, dynamic) {\r\n-        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function addAttr (el, name, value, range, dynamic) {\r\n-        var attrs = dynamic\r\n-            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\r\n-            : (el.attrs || (el.attrs = []));\r\n-        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    \u002F\u002F add a raw attr (use this in preTransforms)\r\n-    function addRawAttr (el, name, value, range) {\r\n-        el.attrsMap[name] = value;\r\n-        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\r\n-    }\r\n-\r\n-    function addDirective (\r\n-        el,\r\n-        name,\r\n-        rawName,\r\n-        value,\r\n-        arg,\r\n-        isDynamicArg,\r\n-        modifiers,\r\n-        range\r\n-    ) {\r\n-        (el.directives || (el.directives = [])).push(rangeSetItem({\r\n-            name: name,\r\n-            rawName: rawName,\r\n-            value: value,\r\n-            arg: arg,\r\n-            isDynamicArg: isDynamicArg,\r\n-            modifiers: modifiers\r\n-        }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function prependModifierMarker (symbol, name, dynamic) {\r\n-        return dynamic\r\n-            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\r\n-            : symbol + name \u002F\u002F mark the event as captured\r\n-    }\r\n-\r\n-    function addHandler (\r\n-        el,\r\n-        name,\r\n-        value,\r\n-        modifiers,\r\n-        important,\r\n-        warn,\r\n-        range,\r\n-        dynamic\r\n-    ) {\r\n-        modifiers = modifiers || emptyObject;\r\n-        \u002F\u002F warn prevent and passive modifier\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            warn &&\r\n-            modifiers.prevent && modifiers.passive\r\n-        ) {\r\n-            warn(\r\n-                'passive and prevent can\\'t be used together. ' +\r\n-                'Passive handler can\\'t prevent default event.',\r\n-                range\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F normalize click.right and click.middle since they don't actually fire\r\n-        \u002F\u002F this is technically browser-specific, but at least for now browsers are\r\n-        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\r\n-        if (modifiers.right) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'contextmenu';\r\n-                delete modifiers.right;\r\n-            }\r\n-        } else if (modifiers.middle) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'mouseup';\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F check capture modifier\r\n-        if (modifiers.capture) {\r\n-            delete modifiers.capture;\r\n-            name = prependModifierMarker('!', name, dynamic);\r\n-        }\r\n-        if (modifiers.once) {\r\n-            delete modifiers.once;\r\n-            name = prependModifierMarker('~', name, dynamic);\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (modifiers.passive) {\r\n-            delete modifiers.passive;\r\n-            name = prependModifierMarker('&', name, dynamic);\r\n-        }\r\n-\r\n-        var events;\r\n-        if (modifiers.native) {\r\n-            delete modifiers.native;\r\n-            events = el.nativeEvents || (el.nativeEvents = {});\r\n-        } else {\r\n-            events = el.events || (el.events = {});\r\n-        }\r\n-\r\n-        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\r\n-        if (modifiers !== emptyObject) {\r\n-            newHandler.modifiers = modifiers;\r\n-        }\r\n-\r\n-        var handlers = events[name];\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (Array.isArray(handlers)) {\r\n-            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\r\n-        } else if (handlers) {\r\n-            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\r\n-        } else {\r\n-            events[name] = newHandler;\r\n-        }\r\n-\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function getRawBindingAttr (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        return el.rawAttrsMap[':' + name] ||\r\n-            el.rawAttrsMap['v-bind:' + name] ||\r\n-            el.rawAttrsMap[name]\r\n-    }\r\n-\r\n-    function getBindingAttr (\r\n-        el,\r\n-        name,\r\n-        getStatic\r\n-    ) {\r\n-        var dynamicValue =\r\n-            getAndRemoveAttr(el, ':' + name) ||\r\n-            getAndRemoveAttr(el, 'v-bind:' + name);\r\n-        if (dynamicValue != null) {\r\n-            return parseFilters(dynamicValue)\r\n-        } else if (getStatic !== false) {\r\n-            var staticValue = getAndRemoveAttr(el, name);\r\n-            if (staticValue != null) {\r\n-                return JSON.stringify(staticValue)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\r\n-    \u002F\u002F doesn't get processed by processAttrs.\r\n-    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\r\n-    \u002F\u002F needed during codegen.\r\n-    function getAndRemoveAttr (\r\n-        el,\r\n-        name,\r\n-        removeFromMap\r\n-    ) {\r\n-        var val;\r\n-        if ((val = el.attrsMap[name]) != null) {\r\n-            var list = el.attrsList;\r\n-            for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-                if (list[i].name === name) {\r\n-                    list.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-        if (removeFromMap) {\r\n-            delete el.attrsMap[name];\r\n-        }\r\n-        return val\r\n-    }\r\n-\r\n-    function getAndRemoveAttrByRegex (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        var list = el.attrsList;\r\n-        for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-            var attr = list[i];\r\n-            if (name.test(attr.name)) {\r\n-                list.splice(i, 1);\r\n-                return attr\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function rangeSetItem (\r\n-        item,\r\n-        range\r\n-    ) {\r\n-        if (range) {\r\n-            if (range.start != null) {\r\n-                item.start = range.start;\r\n-            }\r\n-            if (range.end != null) {\r\n-                item.end = range.end;\r\n-            }\r\n-        }\r\n-        return item\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Cross-platform code generation for component v-model\r\n-     *\u002F\r\n-    function genComponentModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var ref = modifiers || {};\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-\r\n-        var baseValueExpression = '$$v';\r\n-        var valueExpression = baseValueExpression;\r\n-        if (trim) {\r\n-            valueExpression =\r\n-                \"(typeof \" + baseValueExpression + \" === 'string'\" +\r\n-                \"? \" + baseValueExpression + \".trim()\" +\r\n-                \": \" + baseValueExpression + \")\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-        var assignment = genAssignmentCode(value, valueExpression);\r\n-\r\n-        el.model = {\r\n-            value: (\"(\" + value + \")\"),\r\n-            expression: JSON.stringify(value),\r\n-            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Cross-platform codegen helper for generating v-model value assignment code.\r\n-     *\u002F\r\n-    function genAssignmentCode (\r\n-        value,\r\n-        assignment\r\n-    ) {\r\n-        var res = parseModel(value);\r\n-        if (res.key === null) {\r\n-            return (value + \"=\" + assignment)\r\n-        } else {\r\n-            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse a v-model expression into a base path and a final key segment.\r\n-     * Handles both dot-path and possible square brackets.\r\n-     *\r\n-     * Possible cases:\r\n-     *\r\n-     * - test\r\n-     * - test[key]\r\n-     * - test[test1[key]]\r\n-     * - test[\"a\"][key]\r\n-     * - xxx.test[a[a].test1[key]]\r\n-     * - test.xxx.a[\"asa\"][test1[key]]\r\n-     *\r\n-     *\u002F\r\n-\r\n-    var len, str, chr, index$1, expressionPos, expressionEndPos;\r\n-\r\n-\r\n-\r\n-    function parseModel (val) {\r\n-        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\r\n-        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\r\n-        val = val.trim();\r\n-        len = val.length;\r\n-\r\n-        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\r\n-            index$1 = val.lastIndexOf('.');\r\n-            if (index$1 > -1) {\r\n-                return {\r\n-                    exp: val.slice(0, index$1),\r\n-                    key: '\"' + val.slice(index$1 + 1) + '\"'\r\n-                }\r\n-            } else {\r\n-                return {\r\n-                    exp: val,\r\n-                    key: null\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        str = val;\r\n-        index$1 = expressionPos = expressionEndPos = 0;\r\n-\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-            } else if (chr === 0x5B) {\r\n-                parseBracket(chr);\r\n-            }\r\n-        }\r\n-\r\n-        return {\r\n-            exp: val.slice(0, expressionPos),\r\n-            key: val.slice(expressionPos + 1, expressionEndPos)\r\n-        }\r\n-    }\r\n-\r\n-    function next () {\r\n-        return str.charCodeAt(++index$1)\r\n-    }\r\n-\r\n-    function eof () {\r\n-        return index$1 >= len\r\n-    }\r\n-\r\n-    function isStringStart (chr) {\r\n-        return chr === 0x22 || chr === 0x27\r\n-    }\r\n-\r\n-    function parseBracket (chr) {\r\n-        var inBracket = 1;\r\n-        expressionPos = index$1;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-                continue\r\n-            }\r\n-            if (chr === 0x5B) { inBracket++; }\r\n-            if (chr === 0x5D) { inBracket--; }\r\n-            if (inBracket === 0) {\r\n-                expressionEndPos = index$1;\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function parseString (chr) {\r\n-        var stringQuote = chr;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (chr === stringQuote) {\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn$1;\r\n-\r\n-    \u002F\u002F in some cases, the event used has to be determined at runtime\r\n-    \u002F\u002F so we used some reserved tokens during compile.\r\n-    var RANGE_TOKEN = '__r';\r\n-    var CHECKBOX_RADIO_TOKEN = '__c';\r\n-\r\n-    function model (\r\n-        el,\r\n-        dir,\r\n-        _warn\r\n-    ) {\r\n-        warn$1 = _warn;\r\n-        var value = dir.value;\r\n-        var modifiers = dir.modifiers;\r\n-        var tag = el.tag;\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        {\r\n-            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\r\n-            \u002F\u002F value will throw an error.\r\n-            if (tag === 'input' && type === 'file') {\r\n-                warn$1(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\r\n-                    \"File inputs are read only. Use a v-on:change listener instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        if (el.component) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else if (tag === 'select') {\r\n-            genSelect(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'checkbox') {\r\n-            genCheckboxModel(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'radio') {\r\n-            genRadioModel(el, value, modifiers);\r\n-        } else if (tag === 'input' || tag === 'textarea') {\r\n-            genDefaultModel(el, value, modifiers);\r\n-        } else if (!config.isReservedTag(tag)) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else {\r\n-            warn$1(\r\n-                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                \"v-model is not supported on this element type. \" +\r\n-                'If you are working with contenteditable, it\\'s recommended to ' +\r\n-                'wrap a library dedicated for that purpose inside a custom component.',\r\n-                el.rawAttrsMap['v-model']\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F ensure runtime directive metadata\r\n-        return true\r\n-    }\r\n-\r\n-    function genCheckboxModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\r\n-        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\r\n-        addProp(el, 'checked',\r\n-            \"Array.isArray(\" + value + \")\" +\r\n-            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\r\n-                trueValueBinding === 'true'\r\n-                    ? (\":(\" + value + \")\")\r\n-                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\r\n-            )\r\n-        );\r\n-        addHandler(el, 'change',\r\n-            \"var $$a=\" + value + \",\" +\r\n-            '$$el=$event.target,' +\r\n-            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\r\n-            'if(Array.isArray($$a)){' +\r\n-            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\r\n-            '$$i=_i($$a,$$v);' +\r\n-            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\r\n-            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\r\n-            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\r\n-            null, true\r\n-        );\r\n-    }\r\n-\r\n-    function genRadioModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\r\n-        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\r\n-        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\r\n-    }\r\n-\r\n-    function genSelect (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var selectedVal = \"Array.prototype.filter\" +\r\n-            \".call($event.target.options,function(o){return o.selected})\" +\r\n-            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\r\n-            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\r\n-\r\n-        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\r\n-        var code = \"var $$selectedVal = \" + selectedVal + \";\";\r\n-        code = code + \" \" + (genAssignmentCode(value, assignment));\r\n-        addHandler(el, 'change', code, null, true);\r\n-    }\r\n-\r\n-    function genDefaultModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        \u002F\u002F warn if v-bind:value conflicts with v-model\r\n-        \u002F\u002F except for inputs with v-bind:type\r\n-        {\r\n-            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\r\n-            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\r\n-            if (value$1 && !typeBinding) {\r\n-                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\r\n-                warn$1(\r\n-                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\r\n-                    'because the latter already expands to a value binding internally',\r\n-                    el.rawAttrsMap[binding]\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        var ref = modifiers || {};\r\n-        var lazy = ref.lazy;\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-        var needCompositionGuard = !lazy && type !== 'range';\r\n-        var event = lazy\r\n-            ? 'change'\r\n-            : type === 'range'\r\n-                ? RANGE_TOKEN\r\n-                : 'input';\r\n-\r\n-        var valueExpression = '$event.target.value';\r\n-        if (trim) {\r\n-            valueExpression = \"$event.target.value.trim()\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-\r\n-        var code = genAssignmentCode(value, valueExpression);\r\n-        if (needCompositionGuard) {\r\n-            code = \"if($event.target.composing)return;\" + code;\r\n-        }\r\n-\r\n-        addProp(el, 'value', (\"(\" + value + \")\"));\r\n-        addHandler(el, event, code, null, true);\r\n-        if (trim || number) {\r\n-            addHandler(el, 'blur', '$forceUpdate()');\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\r\n-    \u002F\u002F it's important to place the event as the first in the array because\r\n-    \u002F\u002F the whole point is ensuring the v-model callback gets called before\r\n-    \u002F\u002F user-attached handlers.\r\n-    function normalizeEvents (on) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[RANGE_TOKEN])) {\r\n-            \u002F\u002F IE input[type=range] only supports `change` event\r\n-            var event = isIE ? 'change' : 'input';\r\n-            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\r\n-            delete on[RANGE_TOKEN];\r\n-        }\r\n-        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\r\n-        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\r\n-            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\r\n-            delete on[CHECKBOX_RADIO_TOKEN];\r\n-        }\r\n-    }\r\n-\r\n-    var target$1;\r\n-\r\n-    function createOnceHandler$1 (event, handler, capture) {\r\n-        var _target = target$1; \u002F\u002F save current target element in closure\r\n-        return function onceHandler () {\r\n-            var res = handler.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                remove$2(event, onceHandler, capture, _target);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\r\n-    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\r\n-    \u002F\u002F safe to exclude.\r\n-    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\r\n-\r\n-    function add$1 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        passive\r\n-    ) {\r\n-        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\r\n-        \u002F\u002F attached to outer element during patch, and triggered again. This\r\n-        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\r\n-        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\r\n-        \u002F\u002F and the handler would only fire if the event passed to it was fired\r\n-        \u002F\u002F AFTER it was attached.\r\n-        if (useMicrotaskFix) {\r\n-            var attachedTimestamp = currentFlushTimestamp;\r\n-            var original = handler;\r\n-            handler = original._wrapper = function (e) {\r\n-                if (\r\n-                    \u002F\u002F no bubbling, should always fire.\r\n-                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\r\n-                \u002F\u002F certain weird environments...\r\n-                e.target === e.currentTarget ||\r\n-                \u002F\u002F event is fired after handler attachment\r\n-                e.timeStamp >= attachedTimestamp ||\r\n-                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\r\n-                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\r\n-                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\r\n-                e.timeStamp \u003C= 0 ||\r\n-                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\r\n-                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\r\n-                \u002F\u002F starting reference\r\n-                e.target.ownerDocument !== document\r\n-                ) {\r\n-                    return original.apply(this, arguments)\r\n-                }\r\n-            };\r\n-        }\r\n-        target$1.addEventListener(\r\n-            name,\r\n-            handler,\r\n-            supportsPassive\r\n-                ? { capture: capture, passive: passive }\r\n-                : capture\r\n-        );\r\n-    }\r\n-\r\n-    function remove$2 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        _target\r\n-    ) {\r\n-        (_target || target$1).removeEventListener(\r\n-            name,\r\n-            handler._wrapper || handler,\r\n-            capture\r\n-        );\r\n-    }\r\n-\r\n-    function updateDOMListeners (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\r\n-            return\r\n-        }\r\n-        var on = vnode.data.on || {};\r\n-        var oldOn = oldVnode.data.on || {};\r\n-        target$1 = vnode.elm;\r\n-        normalizeEvents(on);\r\n-        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\r\n-        target$1 = undefined;\r\n-    }\r\n-\r\n-    var events = {\r\n-        create: updateDOMListeners,\r\n-        update: updateDOMListeners\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var svgContainer;\r\n-\r\n-    function updateDOMProps (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\r\n-            return\r\n-        }\r\n-        var key, cur;\r\n-        var elm = vnode.elm;\r\n-        var oldProps = oldVnode.data.domProps || {};\r\n-        var props = vnode.data.domProps || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(props.__ob__)) {\r\n-            props = vnode.data.domProps = extend({}, props);\r\n-        }\r\n-\r\n-        for (key in oldProps) {\r\n-            if (!(key in props)) {\r\n-                elm[key] = '';\r\n-            }\r\n-        }\r\n-\r\n-        for (key in props) {\r\n-            cur = props[key];\r\n-            \u002F\u002F ignore children if the node has textContent or innerHTML,\r\n-            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\r\n-            \u002F\u002F on subsequent patches (#3360)\r\n-            if (key === 'textContent' || key === 'innerHTML') {\r\n-                if (vnode.children) { vnode.children.length = 0; }\r\n-                if (cur === oldProps[key]) { continue }\r\n-                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\r\n-                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\r\n-                if (elm.childNodes.length === 1) {\r\n-                    elm.removeChild(elm.childNodes[0]);\r\n-                }\r\n-            }\r\n-\r\n-            if (key === 'value' && elm.tagName !== 'PROGRESS') {\r\n-                \u002F\u002F store value as _value as well since\r\n-                \u002F\u002F non-string values will be stringified\r\n-                elm._value = cur;\r\n-                \u002F\u002F avoid resetting cursor position when value is the same\r\n-                var strCur = isUndef(cur) ? '' : String(cur);\r\n-                if (shouldUpdateValue(elm, strCur)) {\r\n-                    elm.value = strCur;\r\n-                }\r\n-            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\r\n-                \u002F\u002F IE doesn't support innerHTML for SVG elements\r\n-                svgContainer = svgContainer || document.createElement('div');\r\n-                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\r\n-                var svg = svgContainer.firstChild;\r\n-                while (elm.firstChild) {\r\n-                    elm.removeChild(elm.firstChild);\r\n-                }\r\n-                while (svg.firstChild) {\r\n-                    elm.appendChild(svg.firstChild);\r\n-                }\r\n-            } else if (\r\n-                \u002F\u002F skip the update if old and new VDOM state is the same.\r\n-            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\r\n-            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\r\n-            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\r\n-            cur !== oldProps[key]\r\n-            ) {\r\n-                \u002F\u002F some property updates can throw\r\n-                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\r\n-                try {\r\n-                    elm[key] = cur;\r\n-                } catch (e) {}\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\r\n-\r\n-\r\n-    function shouldUpdateValue (elm, checkVal) {\r\n-        return (!elm.composing && (\r\n-            elm.tagName === 'OPTION' ||\r\n-            isNotInFocusAndDirty(elm, checkVal) ||\r\n-            isDirtyWithModifiers(elm, checkVal)\r\n-        ))\r\n-    }\r\n-\r\n-    function isNotInFocusAndDirty (elm, checkVal) {\r\n-        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\r\n-        \u002F\u002F not equal to the updated value\r\n-        var notInFocus = true;\r\n-        \u002F\u002F #6157\r\n-        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\r\n-        try { notInFocus = document.activeElement !== elm; } catch (e) {}\r\n-        return notInFocus && elm.value !== checkVal\r\n-    }\r\n-\r\n-    function isDirtyWithModifiers (elm, newVal) {\r\n-        var value = elm.value;\r\n-        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\r\n-        if (isDef(modifiers)) {\r\n-            if (modifiers.number) {\r\n-                return toNumber(value) !== toNumber(newVal)\r\n-            }\r\n-            if (modifiers.trim) {\r\n-                return value.trim() !== newVal.trim()\r\n-            }\r\n-        }\r\n-        return value !== newVal\r\n-    }\r\n-\r\n-    var domProps = {\r\n-        create: updateDOMProps,\r\n-        update: updateDOMProps\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var parseStyleText = cached(function (cssText) {\r\n-        var res = {};\r\n-        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\r\n-        var propertyDelimiter = \u002F:(.+)\u002F;\r\n-        cssText.split(listDelimiter).forEach(function (item) {\r\n-            if (item) {\r\n-                var tmp = item.split(propertyDelimiter);\r\n-                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\r\n-            }\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F\u002F merge static and dynamic style data on the same vnode\r\n-    function normalizeStyleData (data) {\r\n-        var style = normalizeStyleBinding(data.style);\r\n-        \u002F\u002F static style is pre-processed into an object during compilation\r\n-        \u002F\u002F and is always a fresh object, so it's safe to merge into it\r\n-        return data.staticStyle\r\n-            ? extend(data.staticStyle, style)\r\n-            : style\r\n-    }\r\n-\r\n-    \u002F\u002F normalize possible array \u002F string values into Object\r\n-    function normalizeStyleBinding (bindingStyle) {\r\n-        if (Array.isArray(bindingStyle)) {\r\n-            return toObject(bindingStyle)\r\n-        }\r\n-        if (typeof bindingStyle === 'string') {\r\n-            return parseStyleText(bindingStyle)\r\n-        }\r\n-        return bindingStyle\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * parent component style should be after child's\r\n-     * so that parent component's style could override it\r\n-     *\u002F\r\n-    function getStyle (vnode, checkChild) {\r\n-        var res = {};\r\n-        var styleData;\r\n-\r\n-        if (checkChild) {\r\n-            var childNode = vnode;\r\n-            while (childNode.componentInstance) {\r\n-                childNode = childNode.componentInstance._vnode;\r\n-                if (\r\n-                    childNode && childNode.data &&\r\n-                    (styleData = normalizeStyleData(childNode.data))\r\n-                ) {\r\n-                    extend(res, styleData);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if ((styleData = normalizeStyleData(vnode.data))) {\r\n-            extend(res, styleData);\r\n-        }\r\n-\r\n-        var parentNode = vnode;\r\n-        while ((parentNode = parentNode.parent)) {\r\n-            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\r\n-                extend(res, styleData);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var cssVarRE = \u002F^--\u002F;\r\n-    var importantRE = \u002F\\s*!important$\u002F;\r\n-    var setProp = function (el, name, val) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (cssVarRE.test(name)) {\r\n-            el.style.setProperty(name, val);\r\n-        } else if (importantRE.test(val)) {\r\n-            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\r\n-        } else {\r\n-            var normalizedName = normalize(name);\r\n-            if (Array.isArray(val)) {\r\n-                \u002F\u002F Support values array created by autoprefixer, e.g.\r\n-                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\r\n-                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\r\n-                for (var i = 0, len = val.length; i \u003C len; i++) {\r\n-                    el.style[normalizedName] = val[i];\r\n-                }\r\n-            } else {\r\n-                el.style[normalizedName] = val;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var vendorNames = ['Webkit', 'Moz', 'ms'];\r\n-\r\n-    var emptyStyle;\r\n-    var normalize = cached(function (prop) {\r\n-        emptyStyle = emptyStyle || document.createElement('div').style;\r\n-        prop = camelize(prop);\r\n-        if (prop !== 'filter' && (prop in emptyStyle)) {\r\n-            return prop\r\n-        }\r\n-        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\r\n-        for (var i = 0; i \u003C vendorNames.length; i++) {\r\n-            var name = vendorNames[i] + capName;\r\n-            if (name in emptyStyle) {\r\n-                return name\r\n-            }\r\n-        }\r\n-    });\r\n-\r\n-    function updateStyle (oldVnode, vnode) {\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-\r\n-        if (isUndef(data.staticStyle) && isUndef(data.style) &&\r\n-            isUndef(oldData.staticStyle) && isUndef(oldData.style)\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cur, name;\r\n-        var el = vnode.elm;\r\n-        var oldStaticStyle = oldData.staticStyle;\r\n-        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\r\n-\r\n-        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\r\n-        var oldStyle = oldStaticStyle || oldStyleBinding;\r\n-\r\n-        var style = normalizeStyleBinding(vnode.data.style) || {};\r\n-\r\n-        \u002F\u002F store normalized style under a different key for next diff\r\n-        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\r\n-        \u002F\u002F to mutate it.\r\n-        vnode.data.normalizedStyle = isDef(style.__ob__)\r\n-            ? extend({}, style)\r\n-            : style;\r\n-\r\n-        var newStyle = getStyle(vnode, true);\r\n-\r\n-        for (name in oldStyle) {\r\n-            if (isUndef(newStyle[name])) {\r\n-                setProp(el, name, '');\r\n-            }\r\n-        }\r\n-        for (name in newStyle) {\r\n-            cur = newStyle[name];\r\n-            if (cur !== oldStyle[name]) {\r\n-                \u002F\u002F ie9 setting to null has no effect, must use empty string\r\n-                setProp(el, name, cur == null ? '' : cur);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var style = {\r\n-        create: updateStyle,\r\n-        update: updateStyle\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var whitespaceRE = \u002F\\s+\u002F;\r\n-\r\n-    \u002F**\r\n-     * Add class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function addClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\r\n-            } else {\r\n-                el.classList.add(cls);\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\r\n-                el.setAttribute('class', (cur + cls).trim());\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Remove class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function removeClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\r\n-            } else {\r\n-                el.classList.remove(cls);\r\n-            }\r\n-            if (!el.classList.length) {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            var tar = ' ' + cls + ' ';\r\n-            while (cur.indexOf(tar) >= 0) {\r\n-                cur = cur.replace(tar, ' ');\r\n-            }\r\n-            cur = cur.trim();\r\n-            if (cur) {\r\n-                el.setAttribute('class', cur);\r\n-            } else {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveTransition (def$$1) {\r\n-        if (!def$$1) {\r\n-            return\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (typeof def$$1 === 'object') {\r\n-            var res = {};\r\n-            if (def$$1.css !== false) {\r\n-                extend(res, autoCssTransition(def$$1.name || 'v'));\r\n-            }\r\n-            extend(res, def$$1);\r\n-            return res\r\n-        } else if (typeof def$$1 === 'string') {\r\n-            return autoCssTransition(def$$1)\r\n-        }\r\n-    }\r\n-\r\n-    var autoCssTransition = cached(function (name) {\r\n-        return {\r\n-            enterClass: (name + \"-enter\"),\r\n-            enterToClass: (name + \"-enter-to\"),\r\n-            enterActiveClass: (name + \"-enter-active\"),\r\n-            leaveClass: (name + \"-leave\"),\r\n-            leaveToClass: (name + \"-leave-to\"),\r\n-            leaveActiveClass: (name + \"-leave-active\")\r\n-        }\r\n-    });\r\n-\r\n-    var hasTransition = inBrowser && !isIE9;\r\n-    var TRANSITION = 'transition';\r\n-    var ANIMATION = 'animation';\r\n-\r\n-    \u002F\u002F Transition property\u002Fevent sniffing\r\n-    var transitionProp = 'transition';\r\n-    var transitionEndEvent = 'transitionend';\r\n-    var animationProp = 'animation';\r\n-    var animationEndEvent = 'animationend';\r\n-    if (hasTransition) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (window.ontransitionend === undefined &&\r\n-            window.onwebkittransitionend !== undefined\r\n-        ) {\r\n-            transitionProp = 'WebkitTransition';\r\n-            transitionEndEvent = 'webkitTransitionEnd';\r\n-        }\r\n-        if (window.onanimationend === undefined &&\r\n-            window.onwebkitanimationend !== undefined\r\n-        ) {\r\n-            animationProp = 'WebkitAnimation';\r\n-            animationEndEvent = 'webkitAnimationEnd';\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\r\n-    var raf = inBrowser\r\n-        ? window.requestAnimationFrame\r\n-            ? window.requestAnimationFrame.bind(window)\r\n-            : setTimeout\r\n-        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\r\n-\r\n-    function nextFrame (fn) {\r\n-        raf(function () {\r\n-            raf(fn);\r\n-        });\r\n-    }\r\n-\r\n-    function addTransitionClass (el, cls) {\r\n-        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\r\n-        if (transitionClasses.indexOf(cls) \u003C 0) {\r\n-            transitionClasses.push(cls);\r\n-            addClass(el, cls);\r\n-        }\r\n-    }\r\n-\r\n-    function removeTransitionClass (el, cls) {\r\n-        if (el._transitionClasses) {\r\n-            remove(el._transitionClasses, cls);\r\n-        }\r\n-        removeClass(el, cls);\r\n-    }\r\n-\r\n-    function whenTransitionEnds (\r\n-        el,\r\n-        expectedType,\r\n-        cb\r\n-    ) {\r\n-        var ref = getTransitionInfo(el, expectedType);\r\n-        var type = ref.type;\r\n-        var timeout = ref.timeout;\r\n-        var propCount = ref.propCount;\r\n-        if (!type) { return cb() }\r\n-        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\r\n-        var ended = 0;\r\n-        var end = function () {\r\n-            el.removeEventListener(event, onEnd);\r\n-            cb();\r\n-        };\r\n-        var onEnd = function (e) {\r\n-            if (e.target === el) {\r\n-                if (++ended >= propCount) {\r\n-                    end();\r\n-                }\r\n-            }\r\n-        };\r\n-        setTimeout(function () {\r\n-            if (ended \u003C propCount) {\r\n-                end();\r\n-            }\r\n-        }, timeout + 1);\r\n-        el.addEventListener(event, onEnd);\r\n-    }\r\n-\r\n-    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\r\n-\r\n-    function getTransitionInfo (el, expectedType) {\r\n-        var styles = window.getComputedStyle(el);\r\n-        \u002F\u002F JSDOM may return undefined for transition properties\r\n-        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\r\n-        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\r\n-        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n-        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\r\n-        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\r\n-        var animationTimeout = getTimeout(animationDelays, animationDurations);\r\n-\r\n-        var type;\r\n-        var timeout = 0;\r\n-        var propCount = 0;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (expectedType === TRANSITION) {\r\n-            if (transitionTimeout > 0) {\r\n-                type = TRANSITION;\r\n-                timeout = transitionTimeout;\r\n-                propCount = transitionDurations.length;\r\n-            }\r\n-        } else if (expectedType === ANIMATION) {\r\n-            if (animationTimeout > 0) {\r\n-                type = ANIMATION;\r\n-                timeout = animationTimeout;\r\n-                propCount = animationDurations.length;\r\n-            }\r\n-        } else {\r\n-            timeout = Math.max(transitionTimeout, animationTimeout);\r\n-            type = timeout > 0\r\n-                ? transitionTimeout > animationTimeout\r\n-                    ? TRANSITION\r\n-                    : ANIMATION\r\n-                : null;\r\n-            propCount = type\r\n-                ? type === TRANSITION\r\n-                    ? transitionDurations.length\r\n-                    : animationDurations.length\r\n-                : 0;\r\n-        }\r\n-        var hasTransform =\r\n-            type === TRANSITION &&\r\n-            transformRE.test(styles[transitionProp + 'Property']);\r\n-        return {\r\n-            type: type,\r\n-            timeout: timeout,\r\n-            propCount: propCount,\r\n-            hasTransform: hasTransform\r\n-        }\r\n-    }\r\n-\r\n-    function getTimeout (delays, durations) {\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        while (delays.length \u003C durations.length) {\r\n-            delays = delays.concat(delays);\r\n-        }\r\n-\r\n-        return Math.max.apply(null, durations.map(function (d, i) {\r\n-            return toMs(d) + toMs(delays[i])\r\n-        }))\r\n-    }\r\n-\r\n-    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n-    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\r\n-    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n-    \u002F\u002F as a floor function) causing unexpected behaviors\r\n-    function toMs (s) {\r\n-        return Number(s.slice(0, -1).replace(',', '.')) * 1000\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function enter (vnode, toggleDisplay) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call leave callback now\r\n-        if (isDef(el._leaveCb)) {\r\n-            el._leaveCb.cancelled = true;\r\n-            el._leaveCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data)) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._enterCb) || el.nodeType !== 1) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var enterClass = data.enterClass;\r\n-        var enterToClass = data.enterToClass;\r\n-        var enterActiveClass = data.enterActiveClass;\r\n-        var appearClass = data.appearClass;\r\n-        var appearToClass = data.appearToClass;\r\n-        var appearActiveClass = data.appearActiveClass;\r\n-        var beforeEnter = data.beforeEnter;\r\n-        var enter = data.enter;\r\n-        var afterEnter = data.afterEnter;\r\n-        var enterCancelled = data.enterCancelled;\r\n-        var beforeAppear = data.beforeAppear;\r\n-        var appear = data.appear;\r\n-        var afterAppear = data.afterAppear;\r\n-        var appearCancelled = data.appearCancelled;\r\n-        var duration = data.duration;\r\n-\r\n-        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\r\n-        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\r\n-        \u002F\u002F as the root node of a child component. In that case we need to check\r\n-        \u002F\u002F \u003Ctransition>'s parent for appear check.\r\n-        var context = activeInstance;\r\n-        var transitionNode = activeInstance.$vnode;\r\n-        while (transitionNode && transitionNode.parent) {\r\n-            context = transitionNode.context;\r\n-            transitionNode = transitionNode.parent;\r\n-        }\r\n-\r\n-        var isAppear = !context._isMounted || !vnode.isRootInsert;\r\n-\r\n-        if (isAppear && !appear && appear !== '') {\r\n-            return\r\n-        }\r\n-\r\n-        var startClass = isAppear && appearClass\r\n-            ? appearClass\r\n-            : enterClass;\r\n-        var activeClass = isAppear && appearActiveClass\r\n-            ? appearActiveClass\r\n-            : enterActiveClass;\r\n-        var toClass = isAppear && appearToClass\r\n-            ? appearToClass\r\n-            : enterToClass;\r\n-\r\n-        var beforeEnterHook = isAppear\r\n-            ? (beforeAppear || beforeEnter)\r\n-            : beforeEnter;\r\n-        var enterHook = isAppear\r\n-            ? (typeof appear === 'function' ? appear : enter)\r\n-            : enter;\r\n-        var afterEnterHook = isAppear\r\n-            ? (afterAppear || afterEnter)\r\n-            : afterEnter;\r\n-        var enterCancelledHook = isAppear\r\n-            ? (appearCancelled || enterCancelled)\r\n-            : enterCancelled;\r\n-\r\n-        var explicitEnterDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.enter\r\n-                : duration\r\n-        );\r\n-\r\n-        if (explicitEnterDuration != null) {\r\n-            checkDuration(explicitEnterDuration, 'enter', vnode);\r\n-        }\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(enterHook);\r\n-\r\n-        var cb = el._enterCb = once(function () {\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, toClass);\r\n-                removeTransitionClass(el, activeClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, startClass);\r\n-                }\r\n-                enterCancelledHook && enterCancelledHook(el);\r\n-            } else {\r\n-                afterEnterHook && afterEnterHook(el);\r\n-            }\r\n-            el._enterCb = null;\r\n-        });\r\n-\r\n-        if (!vnode.data.show) {\r\n-            \u002F\u002F remove pending leave element on enter by injecting an insert hook\r\n-            mergeVNodeHook(vnode, 'insert', function () {\r\n-                var parent = el.parentNode;\r\n-                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\r\n-                if (pendingNode &&\r\n-                    pendingNode.tag === vnode.tag &&\r\n-                    pendingNode.elm._leaveCb\r\n-                ) {\r\n-                    pendingNode.elm._leaveCb();\r\n-                }\r\n-                enterHook && enterHook(el, cb);\r\n-            });\r\n-        }\r\n-\r\n-        \u002F\u002F start enter transition\r\n-        beforeEnterHook && beforeEnterHook(el);\r\n-        if (expectsCSS) {\r\n-            addTransitionClass(el, startClass);\r\n-            addTransitionClass(el, activeClass);\r\n-            nextFrame(function () {\r\n-                removeTransitionClass(el, startClass);\r\n-                if (!cb.cancelled) {\r\n-                    addTransitionClass(el, toClass);\r\n-                    if (!userWantsControl) {\r\n-                        if (isValidDuration(explicitEnterDuration)) {\r\n-                            setTimeout(cb, explicitEnterDuration);\r\n-                        } else {\r\n-                            whenTransitionEnds(el, type, cb);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (vnode.data.show) {\r\n-            toggleDisplay && toggleDisplay();\r\n-            enterHook && enterHook(el, cb);\r\n-        }\r\n-\r\n-        if (!expectsCSS && !userWantsControl) {\r\n-            cb();\r\n-        }\r\n-    }\r\n-\r\n-    function leave (vnode, rm) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call enter callback now\r\n-        if (isDef(el._enterCb)) {\r\n-            el._enterCb.cancelled = true;\r\n-            el._enterCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data) || el.nodeType !== 1) {\r\n-            return rm()\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._leaveCb)) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var leaveClass = data.leaveClass;\r\n-        var leaveToClass = data.leaveToClass;\r\n-        var leaveActiveClass = data.leaveActiveClass;\r\n-        var beforeLeave = data.beforeLeave;\r\n-        var leave = data.leave;\r\n-        var afterLeave = data.afterLeave;\r\n-        var leaveCancelled = data.leaveCancelled;\r\n-        var delayLeave = data.delayLeave;\r\n-        var duration = data.duration;\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(leave);\r\n-\r\n-        var explicitLeaveDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.leave\r\n-                : duration\r\n-        );\r\n-\r\n-        if (isDef(explicitLeaveDuration)) {\r\n-            checkDuration(explicitLeaveDuration, 'leave', vnode);\r\n-        }\r\n-\r\n-        var cb = el._leaveCb = once(function () {\r\n-            if (el.parentNode && el.parentNode._pending) {\r\n-                el.parentNode._pending[vnode.key] = null;\r\n-            }\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, leaveToClass);\r\n-                removeTransitionClass(el, leaveActiveClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                }\r\n-                leaveCancelled && leaveCancelled(el);\r\n-            } else {\r\n-                rm();\r\n-                afterLeave && afterLeave(el);\r\n-            }\r\n-            el._leaveCb = null;\r\n-        });\r\n-\r\n-        if (delayLeave) {\r\n-            delayLeave(performLeave);\r\n-        } else {\r\n-            performLeave();\r\n-        }\r\n-\r\n-        function performLeave () {\r\n-            \u002F\u002F the delayed leave may have already been cancelled\r\n-            if (cb.cancelled) {\r\n-                return\r\n-            }\r\n-            \u002F\u002F record leaving element\r\n-            if (!vnode.data.show && el.parentNode) {\r\n-                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\r\n-            }\r\n-            beforeLeave && beforeLeave(el);\r\n-            if (expectsCSS) {\r\n-                addTransitionClass(el, leaveClass);\r\n-                addTransitionClass(el, leaveActiveClass);\r\n-                nextFrame(function () {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                    if (!cb.cancelled) {\r\n-                        addTransitionClass(el, leaveToClass);\r\n-                        if (!userWantsControl) {\r\n-                            if (isValidDuration(explicitLeaveDuration)) {\r\n-                                setTimeout(cb, explicitLeaveDuration);\r\n-                            } else {\r\n-                                whenTransitionEnds(el, type, cb);\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                });\r\n-            }\r\n-            leave && leave(el, cb);\r\n-            if (!expectsCSS && !userWantsControl) {\r\n-                cb();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F only used in dev mode\r\n-    function checkDuration (val, name, vnode) {\r\n-        if (typeof val !== 'number') {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\r\n-                \"got \" + (JSON.stringify(val)) + \".\",\r\n-                vnode.context\r\n-            );\r\n-        } else if (isNaN(val)) {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\r\n-                'the duration expression might be incorrect.',\r\n-                vnode.context\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function isValidDuration (val) {\r\n-        return typeof val === 'number' && !isNaN(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize a transition hook's argument length. The hook may be:\r\n-     * - a merged hook (invoker) with the original in .fns\r\n-     * - a wrapped component method (check ._length)\r\n-     * - a plain function (.length)\r\n-     *\u002F\r\n-    function getHookArgumentsLength (fn) {\r\n-        if (isUndef(fn)) {\r\n-            return false\r\n-        }\r\n-        var invokerFns = fn.fns;\r\n-        if (isDef(invokerFns)) {\r\n-            \u002F\u002F invoker\r\n-            return getHookArgumentsLength(\r\n-                Array.isArray(invokerFns)\r\n-                    ? invokerFns[0]\r\n-                    : invokerFns\r\n-            )\r\n-        } else {\r\n-            return (fn._length || fn.length) > 1\r\n-        }\r\n-    }\r\n-\r\n-    function _enter (_, vnode) {\r\n-        if (vnode.data.show !== true) {\r\n-            enter(vnode);\r\n-        }\r\n-    }\r\n-\r\n-    var transition = inBrowser ? {\r\n-        create: _enter,\r\n-        activate: _enter,\r\n-        remove: function remove$$1 (vnode, rm) {\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            if (vnode.data.show !== true) {\r\n-                leave(vnode, rm);\r\n-            } else {\r\n-                rm();\r\n-            }\r\n-        }\r\n-    } : {};\r\n-\r\n-    var platformModules = [\r\n-        attrs,\r\n-        klass,\r\n-        events,\r\n-        domProps,\r\n-        style,\r\n-        transition\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F the directive module should be applied last, after all\r\n-    \u002F\u002F built-in modules have been applied.\r\n-    var modules = platformModules.concat(baseModules);\r\n-\r\n-    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\r\n-\r\n-    \u002F**\r\n-     * Not type checking this file because flow doesn't like attaching\r\n-     * properties to Elements.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore if *\u002F\r\n-    if (isIE9) {\r\n-        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\r\n-        document.addEventListener('selectionchange', function () {\r\n-            var el = document.activeElement;\r\n-            if (el && el.vmodel) {\r\n-                trigger(el, 'input');\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    var directive = {\r\n-        inserted: function inserted (el, binding, vnode, oldVnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                \u002F\u002F #6903\r\n-                if (oldVnode.elm && !oldVnode.elm._vOptions) {\r\n-                    mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                        directive.componentUpdated(el, binding, vnode);\r\n-                    });\r\n-                } else {\r\n-                    setSelected(el, binding, vnode.context);\r\n-                }\r\n-                el._vOptions = [].map.call(el.options, getValue);\r\n-            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\r\n-                el._vModifiers = binding.modifiers;\r\n-                if (!binding.modifiers.lazy) {\r\n-                    el.addEventListener('compositionstart', onCompositionStart);\r\n-                    el.addEventListener('compositionend', onCompositionEnd);\r\n-                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\r\n-                    \u002F\u002F switching focus before confirming composition choice\r\n-                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\r\n-                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\r\n-                    el.addEventListener('change', onCompositionEnd);\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (isIE9) {\r\n-                        el.vmodel = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        componentUpdated: function componentUpdated (el, binding, vnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                setSelected(el, binding, vnode.context);\r\n-                \u002F\u002F in case the options rendered by v-for have changed,\r\n-                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\r\n-                \u002F\u002F detect such cases and filter out values that no longer has a matching\r\n-                \u002F\u002F option in the DOM.\r\n-                var prevOptions = el._vOptions;\r\n-                var curOptions = el._vOptions = [].map.call(el.options, getValue);\r\n-                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\r\n-                    \u002F\u002F trigger change event if\r\n-                    \u002F\u002F no matching option found for at least one value\r\n-                    var needReset = el.multiple\r\n-                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\r\n-                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\r\n-                    if (needReset) {\r\n-                        trigger(el, 'change');\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function setSelected (el, binding, vm) {\r\n-        actuallySetSelected(el, binding, vm);\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isIE || isEdge) {\r\n-            setTimeout(function () {\r\n-                actuallySetSelected(el, binding, vm);\r\n-            }, 0);\r\n-        }\r\n-    }\r\n-\r\n-    function actuallySetSelected (el, binding, vm) {\r\n-        var value = binding.value;\r\n-        var isMultiple = el.multiple;\r\n-        if (isMultiple && !Array.isArray(value)) {\r\n-            warn(\r\n-                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\r\n-                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var selected, option;\r\n-        for (var i = 0, l = el.options.length; i \u003C l; i++) {\r\n-            option = el.options[i];\r\n-            if (isMultiple) {\r\n-                selected = looseIndexOf(value, getValue(option)) > -1;\r\n-                if (option.selected !== selected) {\r\n-                    option.selected = selected;\r\n-                }\r\n-            } else {\r\n-                if (looseEqual(getValue(option), value)) {\r\n-                    if (el.selectedIndex !== i) {\r\n-                        el.selectedIndex = i;\r\n-                    }\r\n-                    return\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isMultiple) {\r\n-            el.selectedIndex = -1;\r\n-        }\r\n-    }\r\n-\r\n-    function hasNoMatchingOption (value, options) {\r\n-        return options.every(function (o) { return !looseEqual(o, value); })\r\n-    }\r\n-\r\n-    function getValue (option) {\r\n-        return '_value' in option\r\n-            ? option._value\r\n-            : option.value\r\n-    }\r\n-\r\n-    function onCompositionStart (e) {\r\n-        e.target.composing = true;\r\n-    }\r\n-\r\n-    function onCompositionEnd (e) {\r\n-        \u002F\u002F prevent triggering an input event for no reason\r\n-        if (!e.target.composing) { return }\r\n-        e.target.composing = false;\r\n-        trigger(e.target, 'input');\r\n-    }\r\n-\r\n-    function trigger (el, type) {\r\n-        var e = document.createEvent('HTMLEvents');\r\n-        e.initEvent(type, true, true);\r\n-        el.dispatchEvent(e);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F recursively search for possible transition defined inside the component root\r\n-    function locateNode (vnode) {\r\n-        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\r\n-            ? locateNode(vnode.componentInstance._vnode)\r\n-            : vnode\r\n-    }\r\n-\r\n-    var show = {\r\n-        bind: function bind (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            var originalDisplay = el.__vOriginalDisplay =\r\n-                el.style.display === 'none' ? '' : el.style.display;\r\n-            if (value && transition$$1) {\r\n-                vnode.data.show = true;\r\n-                enter(vnode, function () {\r\n-                    el.style.display = originalDisplay;\r\n-                });\r\n-            } else {\r\n-                el.style.display = value ? originalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        update: function update (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-            var oldValue = ref.oldValue;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!value === !oldValue) { return }\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            if (transition$$1) {\r\n-                vnode.data.show = true;\r\n-                if (value) {\r\n-                    enter(vnode, function () {\r\n-                        el.style.display = el.__vOriginalDisplay;\r\n-                    });\r\n-                } else {\r\n-                    leave(vnode, function () {\r\n-                        el.style.display = 'none';\r\n-                    });\r\n-                }\r\n-            } else {\r\n-                el.style.display = value ? el.__vOriginalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        unbind: function unbind (\r\n-            el,\r\n-            binding,\r\n-            vnode,\r\n-            oldVnode,\r\n-            isDestroy\r\n-        ) {\r\n-            if (!isDestroy) {\r\n-                el.style.display = el.__vOriginalDisplay;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var platformDirectives = {\r\n-        model: directive,\r\n-        show: show\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var transitionProps = {\r\n-        name: String,\r\n-        appear: Boolean,\r\n-        css: Boolean,\r\n-        mode: String,\r\n-        type: String,\r\n-        enterClass: String,\r\n-        leaveClass: String,\r\n-        enterToClass: String,\r\n-        leaveToClass: String,\r\n-        enterActiveClass: String,\r\n-        leaveActiveClass: String,\r\n-        appearClass: String,\r\n-        appearActiveClass: String,\r\n-        appearToClass: String,\r\n-        duration: [Number, String, Object]\r\n-    };\r\n-\r\n-    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\r\n-    \u002F\u002F we want to recursively retrieve the real component to be rendered\r\n-    function getRealChild (vnode) {\r\n-        var compOptions = vnode && vnode.componentOptions;\r\n-        if (compOptions && compOptions.Ctor.options.abstract) {\r\n-            return getRealChild(getFirstComponentChild(compOptions.children))\r\n-        } else {\r\n-            return vnode\r\n-        }\r\n-    }\r\n-\r\n-    function extractTransitionData (comp) {\r\n-        var data = {};\r\n-        var options = comp.$options;\r\n-        \u002F\u002F props\r\n-        for (var key in options.propsData) {\r\n-            data[key] = comp[key];\r\n-        }\r\n-        \u002F\u002F events.\r\n-        \u002F\u002F extract listeners and pass them directly to the transition methods\r\n-        var listeners = options._parentListeners;\r\n-        for (var key$1 in listeners) {\r\n-            data[camelize(key$1)] = listeners[key$1];\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function placeholder (h, rawChild) {\r\n-        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\r\n-            return h('keep-alive', {\r\n-                props: rawChild.componentOptions.propsData\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-    function hasParentTransition (vnode) {\r\n-        while ((vnode = vnode.parent)) {\r\n-            if (vnode.data.transition) {\r\n-                return true\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isSameChild (child, oldChild) {\r\n-        return oldChild.key === child.key && oldChild.tag === child.tag\r\n-    }\r\n-\r\n-    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\r\n-\r\n-    var isVShowDirective = function (d) { return d.name === 'show'; };\r\n-\r\n-    var Transition = {\r\n-        name: 'transition',\r\n-        props: transitionProps,\r\n-        abstract: true,\r\n-\r\n-        render: function render (h) {\r\n-            var this$1 = this;\r\n-\r\n-            var children = this.$slots.default;\r\n-            if (!children) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F filter out text nodes (possible whitespaces)\r\n-            children = children.filter(isNotTextNode);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!children.length) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F warn multiple elements\r\n-            if (children.length > 1) {\r\n-                warn(\r\n-                    '\u003Ctransition> can only be used on a single element. Use ' +\r\n-                    '\u003Ctransition-group> for lists.',\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var mode = this.mode;\r\n-\r\n-            \u002F\u002F warn invalid mode\r\n-            if (mode && mode !== 'in-out' && mode !== 'out-in'\r\n-            ) {\r\n-                warn(\r\n-                    'invalid \u003Ctransition> mode: ' + mode,\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var rawChild = children[0];\r\n-\r\n-            \u002F\u002F if this is a component root node and the component's\r\n-            \u002F\u002F parent container node also has transition, skip.\r\n-            if (hasParentTransition(this.$vnode)) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            \u002F\u002F apply transition data to child\r\n-            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\r\n-            var child = getRealChild(rawChild);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!child) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            if (this._leaving) {\r\n-                return placeholder(h, rawChild)\r\n-            }\r\n-\r\n-            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\r\n-            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\r\n-            \u002F\u002F during entering.\r\n-            var id = \"__transition-\" + (this._uid) + \"-\";\r\n-            child.key = child.key == null\r\n-                ? child.isComment\r\n-                    ? id + 'comment'\r\n-                    : id + child.tag\r\n-                : isPrimitive(child.key)\r\n-                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\r\n-                    : child.key;\r\n-\r\n-            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\r\n-            var oldRawChild = this._vnode;\r\n-            var oldChild = getRealChild(oldRawChild);\r\n-\r\n-            \u002F\u002F mark v-show\r\n-            \u002F\u002F so that the transition module can hand over the control to the directive\r\n-            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\r\n-                child.data.show = true;\r\n-            }\r\n-\r\n-            if (\r\n-                oldChild &&\r\n-                oldChild.data &&\r\n-                !isSameChild(child, oldChild) &&\r\n-                !isAsyncPlaceholder(oldChild) &&\r\n-                \u002F\u002F #6687 component root is a comment node\r\n-                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\r\n-            ) {\r\n-                \u002F\u002F replace old child transition data with fresh one\r\n-                \u002F\u002F important for dynamic transitions!\r\n-                var oldData = oldChild.data.transition = extend({}, data);\r\n-                \u002F\u002F handle transition mode\r\n-                if (mode === 'out-in') {\r\n-                    \u002F\u002F return placeholder node and queue update when leave finishes\r\n-                    this._leaving = true;\r\n-                    mergeVNodeHook(oldData, 'afterLeave', function () {\r\n-                        this$1._leaving = false;\r\n-                        this$1.$forceUpdate();\r\n-                    });\r\n-                    return placeholder(h, rawChild)\r\n-                } else if (mode === 'in-out') {\r\n-                    if (isAsyncPlaceholder(child)) {\r\n-                        return oldRawChild\r\n-                    }\r\n-                    var delayedLeave;\r\n-                    var performLeave = function () { delayedLeave(); };\r\n-                    mergeVNodeHook(data, 'afterEnter', performLeave);\r\n-                    mergeVNodeHook(data, 'enterCancelled', performLeave);\r\n-                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\r\n-                }\r\n-            }\r\n-\r\n-            return rawChild\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var props = extend({\r\n-        tag: String,\r\n-        moveClass: String\r\n-    }, transitionProps);\r\n-\r\n-    delete props.mode;\r\n-\r\n-    var TransitionGroup = {\r\n-        props: props,\r\n-\r\n-        beforeMount: function beforeMount () {\r\n-            var this$1 = this;\r\n-\r\n-            var update = this._update;\r\n-            this._update = function (vnode, hydrating) {\r\n-                var restoreActiveInstance = setActiveInstance(this$1);\r\n-                \u002F\u002F force removing pass\r\n-                this$1.__patch__(\r\n-                    this$1._vnode,\r\n-                    this$1.kept,\r\n-                    false, \u002F\u002F hydrating\r\n-                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\r\n-                );\r\n-                this$1._vnode = this$1.kept;\r\n-                restoreActiveInstance();\r\n-                update.call(this$1, vnode, hydrating);\r\n-            };\r\n-        },\r\n-\r\n-        render: function render (h) {\r\n-            var tag = this.tag || this.$vnode.data.tag || 'span';\r\n-            var map = Object.create(null);\r\n-            var prevChildren = this.prevChildren = this.children;\r\n-            var rawChildren = this.$slots.default || [];\r\n-            var children = this.children = [];\r\n-            var transitionData = extractTransitionData(this);\r\n-\r\n-            for (var i = 0; i \u003C rawChildren.length; i++) {\r\n-                var c = rawChildren[i];\r\n-                if (c.tag) {\r\n-                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\r\n-                        children.push(c);\r\n-                        map[c.key] = c\r\n-                        ;(c.data || (c.data = {})).transition = transitionData;\r\n-                    } else {\r\n-                        var opts = c.componentOptions;\r\n-                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\r\n-                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            if (prevChildren) {\r\n-                var kept = [];\r\n-                var removed = [];\r\n-                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\r\n-                    var c$1 = prevChildren[i$1];\r\n-                    c$1.data.transition = transitionData;\r\n-                    c$1.data.pos = c$1.elm.getBoundingClientRect();\r\n-                    if (map[c$1.key]) {\r\n-                        kept.push(c$1);\r\n-                    } else {\r\n-                        removed.push(c$1);\r\n-                    }\r\n-                }\r\n-                this.kept = h(tag, null, kept);\r\n-                this.removed = removed;\r\n-            }\r\n-\r\n-            return h(tag, null, children)\r\n-        },\r\n-\r\n-        updated: function updated () {\r\n-            var children = this.prevChildren;\r\n-            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\r\n-            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\r\n-            \u002F\u002F in each iteration - which helps prevent layout thrashing.\r\n-            children.forEach(callPendingCbs);\r\n-            children.forEach(recordPosition);\r\n-            children.forEach(applyTranslation);\r\n-\r\n-            \u002F\u002F force reflow to put everything in position\r\n-            \u002F\u002F assign to this to avoid being removed in tree-shaking\r\n-            \u002F\u002F $flow-disable-line\r\n-            this._reflow = document.body.offsetHeight;\r\n-\r\n-            children.forEach(function (c) {\r\n-                if (c.data.moved) {\r\n-                    var el = c.elm;\r\n-                    var s = el.style;\r\n-                    addTransitionClass(el, moveClass);\r\n-                    s.transform = s.WebkitTransform = s.transitionDuration = '';\r\n-                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\r\n-                        if (e && e.target !== el) {\r\n-                            return\r\n-                        }\r\n-                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\r\n-                            el.removeEventListener(transitionEndEvent, cb);\r\n-                            el._moveCb = null;\r\n-                            removeTransitionClass(el, moveClass);\r\n-                        }\r\n-                    });\r\n-                }\r\n-            });\r\n-        },\r\n-\r\n-        methods: {\r\n-            hasMove: function hasMove (el, moveClass) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (!hasTransition) {\r\n-                    return false\r\n-                }\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (this._hasMove) {\r\n-                    return this._hasMove\r\n-                }\r\n-                \u002F\u002F Detect whether an element with the move class applied has\r\n-                \u002F\u002F CSS transitions. Since the element may be inside an entering\r\n-                \u002F\u002F transition at this very moment, we make a clone of it and remove\r\n-                \u002F\u002F all other transition classes applied to ensure only the move class\r\n-                \u002F\u002F is applied.\r\n-                var clone = el.cloneNode();\r\n-                if (el._transitionClasses) {\r\n-                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\r\n-                }\r\n-                addClass(clone, moveClass);\r\n-                clone.style.display = 'none';\r\n-                this.$el.appendChild(clone);\r\n-                var info = getTransitionInfo(clone);\r\n-                this.$el.removeChild(clone);\r\n-                return (this._hasMove = info.hasTransform)\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function callPendingCbs (c) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._moveCb) {\r\n-            c.elm._moveCb();\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._enterCb) {\r\n-            c.elm._enterCb();\r\n-        }\r\n-    }\r\n-\r\n-    function recordPosition (c) {\r\n-        c.data.newPos = c.elm.getBoundingClientRect();\r\n-    }\r\n-\r\n-    function applyTranslation (c) {\r\n-        var oldPos = c.data.pos;\r\n-        var newPos = c.data.newPos;\r\n-        var dx = oldPos.left - newPos.left;\r\n-        var dy = oldPos.top - newPos.top;\r\n-        if (dx || dy) {\r\n-            c.data.moved = true;\r\n-            var s = c.elm.style;\r\n-            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\r\n-            s.transitionDuration = '0s';\r\n-        }\r\n-    }\r\n-\r\n-    var platformComponents = {\r\n-        Transition: Transition,\r\n-        TransitionGroup: TransitionGroup\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F install platform specific utils\r\n-    Vue.config.mustUseProp = mustUseProp;\r\n-    Vue.config.isReservedTag = isReservedTag;\r\n-    Vue.config.isReservedAttr = isReservedAttr;\r\n-    Vue.config.getTagNamespace = getTagNamespace;\r\n-    Vue.config.isUnknownElement = isUnknownElement;\r\n-\r\n-    \u002F\u002F install platform runtime directives & components\r\n-    extend(Vue.options.directives, platformDirectives);\r\n-    extend(Vue.options.components, platformComponents);\r\n-\r\n-    \u002F\u002F install platform patch function\r\n-    Vue.prototype.__patch__ = inBrowser ? patch : noop;\r\n-\r\n-    \u002F\u002F public mount method\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && inBrowser ? query(el) : undefined;\r\n-        return mountComponent(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F\u002F devtools global hook\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    if (inBrowser) {\r\n-        setTimeout(function () {\r\n-            if (config.devtools) {\r\n-                if (devtools) {\r\n-                    devtools.emit('init', Vue);\r\n-                } else {\r\n-                    console[console.info ? 'info' : 'log'](\r\n-                        'Download the Vue Devtools extension for a better development experience:\\n' +\r\n-                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (config.productionTip !== false &&\r\n-                typeof console !== 'undefined'\r\n-            ) {\r\n-                console[console.info ? 'info' : 'log'](\r\n-                    \"You are running Vue in development mode.\\n\" +\r\n-                    \"Make sure to turn on production mode when deploying for production.\\n\" +\r\n-                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\r\n-                );\r\n-            }\r\n-        }, 0);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\r\n-    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\r\n-\r\n-    var buildRegex = cached(function (delimiters) {\r\n-        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\r\n-        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\r\n-        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\r\n-    });\r\n-\r\n-\r\n-\r\n-    function parseText (\r\n-        text,\r\n-        delimiters\r\n-    ) {\r\n-        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\r\n-        if (!tagRE.test(text)) {\r\n-            return\r\n-        }\r\n-        var tokens = [];\r\n-        var rawTokens = [];\r\n-        var lastIndex = tagRE.lastIndex = 0;\r\n-        var match, index, tokenValue;\r\n-        while ((match = tagRE.exec(text))) {\r\n-            index = match.index;\r\n-            \u002F\u002F push text token\r\n-            if (index > lastIndex) {\r\n-                rawTokens.push(tokenValue = text.slice(lastIndex, index));\r\n-                tokens.push(JSON.stringify(tokenValue));\r\n-            }\r\n-            \u002F\u002F tag token\r\n-            var exp = parseFilters(match[1].trim());\r\n-            tokens.push((\"_s(\" + exp + \")\"));\r\n-            rawTokens.push({ '@binding': exp });\r\n-            lastIndex = index + match[0].length;\r\n-        }\r\n-        if (lastIndex \u003C text.length) {\r\n-            rawTokens.push(tokenValue = text.slice(lastIndex));\r\n-            tokens.push(JSON.stringify(tokenValue));\r\n-        }\r\n-        return {\r\n-            expression: tokens.join('+'),\r\n-            tokens: rawTokens\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticClass = getAndRemoveAttr(el, 'class');\r\n-        if (staticClass) {\r\n-            var res = parseText(staticClass, options.delimiters);\r\n-            if (res) {\r\n-                warn(\r\n-                    \"class=\\\"\" + staticClass + \"\\\": \" +\r\n-                    'Interpolation inside attributes has been removed. ' +\r\n-                    'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\r\n-                    el.rawAttrsMap['class']\r\n-                );\r\n-            }\r\n-        }\r\n-        if (staticClass) {\r\n-            el.staticClass = JSON.stringify(staticClass);\r\n-        }\r\n-        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\r\n-        if (classBinding) {\r\n-            el.classBinding = classBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData (el) {\r\n-        var data = '';\r\n-        if (el.staticClass) {\r\n-            data += \"staticClass:\" + (el.staticClass) + \",\";\r\n-        }\r\n-        if (el.classBinding) {\r\n-            data += \"class:\" + (el.classBinding) + \",\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var klass$1 = {\r\n-        staticKeys: ['staticClass'],\r\n-        transformNode: transformNode,\r\n-        genData: genData\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode$1 (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticStyle = getAndRemoveAttr(el, 'style');\r\n-        if (staticStyle) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                var res = parseText(staticStyle, options.delimiters);\r\n-                if (res) {\r\n-                    warn(\r\n-                        \"style=\\\"\" + staticStyle + \"\\\": \" +\r\n-                        'Interpolation inside attributes has been removed. ' +\r\n-                        'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\r\n-                        el.rawAttrsMap['style']\r\n-                    );\r\n-                }\r\n-            }\r\n-            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\r\n-        }\r\n-\r\n-        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\r\n-        if (styleBinding) {\r\n-            el.styleBinding = styleBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData$1 (el) {\r\n-        var data = '';\r\n-        if (el.staticStyle) {\r\n-            data += \"staticStyle:\" + (el.staticStyle) + \",\";\r\n-        }\r\n-        if (el.styleBinding) {\r\n-            data += \"style:(\" + (el.styleBinding) + \"),\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var style$1 = {\r\n-        staticKeys: ['staticStyle'],\r\n-        transformNode: transformNode$1,\r\n-        genData: genData$1\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var decoder;\r\n-\r\n-    var he = {\r\n-        decode: function decode (html) {\r\n-            decoder = decoder || document.createElement('div');\r\n-            decoder.innerHTML = html;\r\n-            return decoder.textContent\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUnaryTag = makeMap(\r\n-        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\r\n-        'link,meta,param,source,track,wbr'\r\n-    );\r\n-\r\n-    \u002F\u002F Elements that you can, intentionally, leave open\r\n-    \u002F\u002F (and which close themselves)\r\n-    var canBeLeftOpenTag = makeMap(\r\n-        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\r\n-    );\r\n-\r\n-    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\r\n-    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\r\n-    var isNonPhrasingTag = makeMap(\r\n-        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\r\n-        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\r\n-        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\r\n-        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\r\n-        'title,tr,track'\r\n-    );\r\n-\r\n-    \u002F**\r\n-     * Not type-checking this file because it's mostly vendor code.\r\n-     *\u002F\r\n-\r\n-        \u002F\u002F Regular Expressions for parsing tags and attributes\r\n-    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\r\n-    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\r\n-    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\r\n-    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\r\n-    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\r\n-    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\r\n-    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\r\n-    var comment = \u002F^\u003C!\\--\u002F;\r\n-    var conditionalComment = \u002F^\u003C!\\[\u002F;\r\n-\r\n-    \u002F\u002F Special Elements (can contain anything)\r\n-    var isPlainTextElement = makeMap('script,style,textarea', true);\r\n-    var reCache = {};\r\n-\r\n-    var decodingMap = {\r\n-        '&lt;': '\u003C',\r\n-        '&gt;': '>',\r\n-        '&quot;': '\"',\r\n-        '&amp;': '&',\r\n-        '&#10;': '\\n',\r\n-        '&#9;': '\\t',\r\n-        '&#39;': \"'\"\r\n-    };\r\n-    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\r\n-    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\r\n-\r\n-    \u002F\u002F #5992\r\n-    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\r\n-    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\r\n-\r\n-    function decodeAttr (value, shouldDecodeNewlines) {\r\n-        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\r\n-        return value.replace(re, function (match) { return decodingMap[match]; })\r\n-    }\r\n-\r\n-    function parseHTML (html, options) {\r\n-        var stack = [];\r\n-        var expectHTML = options.expectHTML;\r\n-        var isUnaryTag$$1 = options.isUnaryTag || no;\r\n-        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\r\n-        var index = 0;\r\n-        var last, lastTag;\r\n-        while (html) {\r\n-            last = html;\r\n-            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\r\n-            if (!lastTag || !isPlainTextElement(lastTag)) {\r\n-                var textEnd = html.indexOf('\u003C');\r\n-                if (textEnd === 0) {\r\n-                    \u002F\u002F Comment:\r\n-                    if (comment.test(html)) {\r\n-                        var commentEnd = html.indexOf('-->');\r\n-\r\n-                        if (commentEnd >= 0) {\r\n-                            if (options.shouldKeepComment) {\r\n-                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\r\n-                            }\r\n-                            advance(commentEnd + 3);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\r\n-                    if (conditionalComment.test(html)) {\r\n-                        var conditionalEnd = html.indexOf(']>');\r\n-\r\n-                        if (conditionalEnd >= 0) {\r\n-                            advance(conditionalEnd + 2);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F Doctype:\r\n-                    var doctypeMatch = html.match(doctype);\r\n-                    if (doctypeMatch) {\r\n-                        advance(doctypeMatch[0].length);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F End tag:\r\n-                    var endTagMatch = html.match(endTag);\r\n-                    if (endTagMatch) {\r\n-                        var curIndex = index;\r\n-                        advance(endTagMatch[0].length);\r\n-                        parseEndTag(endTagMatch[1], curIndex, index);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F Start tag:\r\n-                    var startTagMatch = parseStartTag();\r\n-                    if (startTagMatch) {\r\n-                        handleStartTag(startTagMatch);\r\n-                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\r\n-                            advance(1);\r\n-                        }\r\n-                        continue\r\n-                    }\r\n-                }\r\n-\r\n-                var text = (void 0), rest = (void 0), next = (void 0);\r\n-                if (textEnd >= 0) {\r\n-                    rest = html.slice(textEnd);\r\n-                    while (\r\n-                    !endTag.test(rest) &&\r\n-                    !startTagOpen.test(rest) &&\r\n-                    !comment.test(rest) &&\r\n-                    !conditionalComment.test(rest)\r\n-                        ) {\r\n-                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\r\n-                        next = rest.indexOf('\u003C', 1);\r\n-                        if (next \u003C 0) { break }\r\n-                        textEnd += next;\r\n-                        rest = html.slice(textEnd);\r\n-                    }\r\n-                    text = html.substring(0, textEnd);\r\n-                }\r\n-\r\n-                if (textEnd \u003C 0) {\r\n-                    text = html;\r\n-                }\r\n-\r\n-                if (text) {\r\n-                    advance(text.length);\r\n-                }\r\n-\r\n-                if (options.chars && text) {\r\n-                    options.chars(text, index - text.length, index);\r\n-                }\r\n-            } else {\r\n-                var endTagLength = 0;\r\n-                var stackedTag = lastTag.toLowerCase();\r\n-                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\r\n-                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\r\n-                    endTagLength = endTag.length;\r\n-                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\r\n-                        text = text\r\n-                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\r\n-                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\r\n-                    }\r\n-                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\r\n-                        text = text.slice(1);\r\n-                    }\r\n-                    if (options.chars) {\r\n-                        options.chars(text);\r\n-                    }\r\n-                    return ''\r\n-                });\r\n-                index += html.length - rest$1.length;\r\n-                html = rest$1;\r\n-                parseEndTag(stackedTag, index - endTagLength, index);\r\n-            }\r\n-\r\n-            if (html === last) {\r\n-                options.chars && options.chars(html);\r\n-                if (!stack.length && options.warn) {\r\n-                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F Clean up any remaining tags\r\n-        parseEndTag();\r\n-\r\n-        function advance (n) {\r\n-            index += n;\r\n-            html = html.substring(n);\r\n-        }\r\n-\r\n-        function parseStartTag () {\r\n-            var start = html.match(startTagOpen);\r\n-            if (start) {\r\n-                var match = {\r\n-                    tagName: start[1],\r\n-                    attrs: [],\r\n-                    start: index\r\n-                };\r\n-                advance(start[0].length);\r\n-                var end, attr;\r\n-                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\r\n-                    attr.start = index;\r\n-                    advance(attr[0].length);\r\n-                    attr.end = index;\r\n-                    match.attrs.push(attr);\r\n-                }\r\n-                if (end) {\r\n-                    match.unarySlash = end[1];\r\n-                    advance(end[0].length);\r\n-                    match.end = index;\r\n-                    return match\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function handleStartTag (match) {\r\n-            var tagName = match.tagName;\r\n-            var unarySlash = match.unarySlash;\r\n-\r\n-            if (expectHTML) {\r\n-                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\r\n-                    parseEndTag(lastTag);\r\n-                }\r\n-                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\r\n-                    parseEndTag(tagName);\r\n-                }\r\n-            }\r\n-\r\n-            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\r\n-\r\n-            var l = match.attrs.length;\r\n-            var attrs = new Array(l);\r\n-            for (var i = 0; i \u003C l; i++) {\r\n-                var args = match.attrs[i];\r\n-                var value = args[3] || args[4] || args[5] || '';\r\n-                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\r\n-                    ? options.shouldDecodeNewlinesForHref\r\n-                    : options.shouldDecodeNewlines;\r\n-                attrs[i] = {\r\n-                    name: args[1],\r\n-                    value: decodeAttr(value, shouldDecodeNewlines)\r\n-                };\r\n-                if (options.outputSourceRange) {\r\n-                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\r\n-                    attrs[i].end = args.end;\r\n-                }\r\n-            }\r\n-\r\n-            if (!unary) {\r\n-                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\r\n-                lastTag = tagName;\r\n-            }\r\n-\r\n-            if (options.start) {\r\n-                options.start(tagName, attrs, unary, match.start, match.end);\r\n-            }\r\n-        }\r\n-\r\n-        function parseEndTag (tagName, start, end) {\r\n-            var pos, lowerCasedTagName;\r\n-            if (start == null) { start = index; }\r\n-            if (end == null) { end = index; }\r\n-\r\n-            \u002F\u002F Find the closest opened tag of the same type\r\n-            if (tagName) {\r\n-                lowerCasedTagName = tagName.toLowerCase();\r\n-                for (pos = stack.length - 1; pos >= 0; pos--) {\r\n-                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\r\n-                        break\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F If no tag name is provided, clean shop\r\n-                pos = 0;\r\n-            }\r\n-\r\n-            if (pos >= 0) {\r\n-                \u002F\u002F Close all the open elements, up the stack\r\n-                for (var i = stack.length - 1; i >= pos; i--) {\r\n-                    if (i > pos || !tagName &&\r\n-                        options.warn\r\n-                    ) {\r\n-                        options.warn(\r\n-                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\r\n-                            { start: stack[i].start, end: stack[i].end }\r\n-                        );\r\n-                    }\r\n-                    if (options.end) {\r\n-                        options.end(stack[i].tag, start, end);\r\n-                    }\r\n-                }\r\n-\r\n-                \u002F\u002F Remove the open elements from the stack\r\n-                stack.length = pos;\r\n-                lastTag = pos && stack[pos - 1].tag;\r\n-            } else if (lowerCasedTagName === 'br') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], true, start, end);\r\n-                }\r\n-            } else if (lowerCasedTagName === 'p') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], false, start, end);\r\n-                }\r\n-                if (options.end) {\r\n-                    options.end(tagName, start, end);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var onRE = \u002F^@|^v-on:\u002F;\r\n-    var dirRE = \u002F^v-|^@|^:\u002F;\r\n-    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\r\n-    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\r\n-    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\r\n-    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\r\n-\r\n-    var argRE = \u002F:(.*)$\u002F;\r\n-    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\r\n-    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\r\n-\r\n-    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\r\n-\r\n-    var lineBreakRE = \u002F[\\r\\n]\u002F;\r\n-    var whitespaceRE$1 = \u002F\\s+\u002Fg;\r\n-\r\n-    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\r\n-\r\n-    var decodeHTMLCached = cached(he.decode);\r\n-\r\n-    var emptySlotScopeToken = \"_empty_\";\r\n-\r\n-    \u002F\u002F configurable state\r\n-    var warn$2;\r\n-    var delimiters;\r\n-    var transforms;\r\n-    var preTransforms;\r\n-    var postTransforms;\r\n-    var platformIsPreTag;\r\n-    var platformMustUseProp;\r\n-    var platformGetTagNamespace;\r\n-    var maybeComponent;\r\n-\r\n-    function createASTElement (\r\n-        tag,\r\n-        attrs,\r\n-        parent\r\n-    ) {\r\n-        return {\r\n-            type: 1,\r\n-            tag: tag,\r\n-            attrsList: attrs,\r\n-            attrsMap: makeAttrsMap(attrs),\r\n-            rawAttrsMap: {},\r\n-            parent: parent,\r\n-            children: []\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert HTML string to AST.\r\n-     *\u002F\r\n-    function parse (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        warn$2 = options.warn || baseWarn;\r\n-\r\n-        platformIsPreTag = options.isPreTag || no;\r\n-        platformMustUseProp = options.mustUseProp || no;\r\n-        platformGetTagNamespace = options.getTagNamespace || no;\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-\r\n-        transforms = pluckModuleFunction(options.modules, 'transformNode');\r\n-        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\r\n-        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\r\n-\r\n-        delimiters = options.delimiters;\r\n-\r\n-        var stack = [];\r\n-        var preserveWhitespace = options.preserveWhitespace !== false;\r\n-        var whitespaceOption = options.whitespace;\r\n-        var root;\r\n-        var currentParent;\r\n-        var inVPre = false;\r\n-        var inPre = false;\r\n-        var warned = false;\r\n-\r\n-        function warnOnce (msg, range) {\r\n-            if (!warned) {\r\n-                warned = true;\r\n-                warn$2(msg, range);\r\n-            }\r\n-        }\r\n-\r\n-        function closeElement (element) {\r\n-            trimEndingWhitespace(element);\r\n-            if (!inVPre && !element.processed) {\r\n-                element = processElement(element, options);\r\n-            }\r\n-            \u002F\u002F tree management\r\n-            if (!stack.length && element !== root) {\r\n-                \u002F\u002F allow root elements with v-if, v-else-if and v-else\r\n-                if (root.if && (element.elseif || element.else)) {\r\n-                    {\r\n-                        checkRootConstraints(element);\r\n-                    }\r\n-                    addIfCondition(root, {\r\n-                        exp: element.elseif,\r\n-                        block: element\r\n-                    });\r\n-                } else {\r\n-                    warnOnce(\r\n-                        \"Component template should contain exactly one root element. \" +\r\n-                        \"If you are using v-if on multiple elements, \" +\r\n-                        \"use v-else-if to chain them instead.\",\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (currentParent && !element.forbidden) {\r\n-                if (element.elseif || element.else) {\r\n-                    processIfConditions(element, currentParent);\r\n-                } else {\r\n-                    if (element.slotScope) {\r\n-                        \u002F\u002F scoped slot\r\n-                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\r\n-                        \u002F\u002F find it as the prev node.\r\n-                        var name = element.slotTarget || '\"default\"'\r\n-                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\r\n-                    }\r\n-                    currentParent.children.push(element);\r\n-                    element.parent = currentParent;\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F final children cleanup\r\n-            \u002F\u002F filter out scoped slots\r\n-            element.children = element.children.filter(function (c) { return !(c).slotScope; });\r\n-            \u002F\u002F remove trailing whitespace node again\r\n-            trimEndingWhitespace(element);\r\n-\r\n-            \u002F\u002F check pre state\r\n-            if (element.pre) {\r\n-                inVPre = false;\r\n-            }\r\n-            if (platformIsPreTag(element.tag)) {\r\n-                inPre = false;\r\n-            }\r\n-            \u002F\u002F apply post-transforms\r\n-            for (var i = 0; i \u003C postTransforms.length; i++) {\r\n-                postTransforms[i](element, options);\r\n-            }\r\n-        }\r\n-\r\n-        function trimEndingWhitespace (el) {\r\n-            \u002F\u002F remove trailing whitespace node\r\n-            if (!inPre) {\r\n-                var lastNode;\r\n-                while (\r\n-                (lastNode = el.children[el.children.length - 1]) &&\r\n-                lastNode.type === 3 &&\r\n-                lastNode.text === ' '\r\n-                    ) {\r\n-                    el.children.pop();\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function checkRootConstraints (el) {\r\n-            if (el.tag === 'slot' || el.tag === 'template') {\r\n-                warnOnce(\r\n-                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\r\n-                    'contain multiple nodes.',\r\n-                    { start: el.start }\r\n-                );\r\n-            }\r\n-            if (el.attrsMap.hasOwnProperty('v-for')) {\r\n-                warnOnce(\r\n-                    'Cannot use v-for on stateful component root element because ' +\r\n-                    'it renders multiple elements.',\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        parseHTML(template, {\r\n-            warn: warn$2,\r\n-            expectHTML: options.expectHTML,\r\n-            isUnaryTag: options.isUnaryTag,\r\n-            canBeLeftOpenTag: options.canBeLeftOpenTag,\r\n-            shouldDecodeNewlines: options.shouldDecodeNewlines,\r\n-            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\r\n-            shouldKeepComment: options.comments,\r\n-            outputSourceRange: options.outputSourceRange,\r\n-            start: function start (tag, attrs, unary, start$1, end) {\r\n-                \u002F\u002F check namespace.\r\n-                \u002F\u002F inherit parent ns if there is one\r\n-                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\r\n-\r\n-                \u002F\u002F handle IE svg bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE && ns === 'svg') {\r\n-                    attrs = guardIESVGBug(attrs);\r\n-                }\r\n-\r\n-                var element = createASTElement(tag, attrs, currentParent);\r\n-                if (ns) {\r\n-                    element.ns = ns;\r\n-                }\r\n-\r\n-                {\r\n-                    if (options.outputSourceRange) {\r\n-                        element.start = start$1;\r\n-                        element.end = end;\r\n-                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\r\n-                            cumulated[attr.name] = attr;\r\n-                            return cumulated\r\n-                        }, {});\r\n-                    }\r\n-                    attrs.forEach(function (attr) {\r\n-                        if (invalidAttributeRE.test(attr.name)) {\r\n-                            warn$2(\r\n-                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\r\n-                                \"spaces, quotes, \u003C, >, \u002F or =.\",\r\n-                                {\r\n-                                    start: attr.start + attr.name.indexOf(\"[\"),\r\n-                                    end: attr.start + attr.name.length\r\n-                                }\r\n-                            );\r\n-                        }\r\n-                    });\r\n-                }\r\n-\r\n-                if (isForbiddenTag(element) && !isServerRendering()) {\r\n-                    element.forbidden = true;\r\n-                    warn$2(\r\n-                        'Templates should only be responsible for mapping the state to the ' +\r\n-                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\r\n-                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-\r\n-                \u002F\u002F apply pre-transforms\r\n-                for (var i = 0; i \u003C preTransforms.length; i++) {\r\n-                    element = preTransforms[i](element, options) || element;\r\n-                }\r\n-\r\n-                if (!inVPre) {\r\n-                    processPre(element);\r\n-                    if (element.pre) {\r\n-                        inVPre = true;\r\n-                    }\r\n-                }\r\n-                if (platformIsPreTag(element.tag)) {\r\n-                    inPre = true;\r\n-                }\r\n-                if (inVPre) {\r\n-                    processRawAttrs(element);\r\n-                } else if (!element.processed) {\r\n-                    \u002F\u002F structural directives\r\n-                    processFor(element);\r\n-                    processIf(element);\r\n-                    processOnce(element);\r\n-                }\r\n-\r\n-                if (!root) {\r\n-                    root = element;\r\n-                    {\r\n-                        checkRootConstraints(root);\r\n-                    }\r\n-                }\r\n-\r\n-                if (!unary) {\r\n-                    currentParent = element;\r\n-                    stack.push(element);\r\n-                } else {\r\n-                    closeElement(element);\r\n-                }\r\n-            },\r\n-\r\n-            end: function end (tag, start, end$1) {\r\n-                var element = stack[stack.length - 1];\r\n-                \u002F\u002F pop stack\r\n-                stack.length -= 1;\r\n-                currentParent = stack[stack.length - 1];\r\n-                if (options.outputSourceRange) {\r\n-                    element.end = end$1;\r\n-                }\r\n-                closeElement(element);\r\n-            },\r\n-\r\n-            chars: function chars (text, start, end) {\r\n-                if (!currentParent) {\r\n-                    {\r\n-                        if (text === template) {\r\n-                            warnOnce(\r\n-                                'Component template requires a root element, rather than just text.',\r\n-                                { start: start }\r\n-                            );\r\n-                        } else if ((text = text.trim())) {\r\n-                            warnOnce(\r\n-                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\r\n-                                { start: start }\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    return\r\n-                }\r\n-                \u002F\u002F IE textarea placeholder bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE &&\r\n-                    currentParent.tag === 'textarea' &&\r\n-                    currentParent.attrsMap.placeholder === text\r\n-                ) {\r\n-                    return\r\n-                }\r\n-                var children = currentParent.children;\r\n-                if (inPre || text.trim()) {\r\n-                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\r\n-                } else if (!children.length) {\r\n-                    \u002F\u002F remove the whitespace-only node right after an opening tag\r\n-                    text = '';\r\n-                } else if (whitespaceOption) {\r\n-                    if (whitespaceOption === 'condense') {\r\n-                        \u002F\u002F in condense mode, remove the whitespace node if it contains\r\n-                        \u002F\u002F line break, otherwise condense to a single space\r\n-                        text = lineBreakRE.test(text) ? '' : ' ';\r\n-                    } else {\r\n-                        text = ' ';\r\n-                    }\r\n-                } else {\r\n-                    text = preserveWhitespace ? ' ' : '';\r\n-                }\r\n-                if (text) {\r\n-                    if (!inPre && whitespaceOption === 'condense') {\r\n-                        \u002F\u002F condense consecutive whitespaces into single space\r\n-                        text = text.replace(whitespaceRE$1, ' ');\r\n-                    }\r\n-                    var res;\r\n-                    var child;\r\n-                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\r\n-                        child = {\r\n-                            type: 2,\r\n-                            expression: res.expression,\r\n-                            tokens: res.tokens,\r\n-                            text: text\r\n-                        };\r\n-                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\r\n-                        child = {\r\n-                            type: 3,\r\n-                            text: text\r\n-                        };\r\n-                    }\r\n-                    if (child) {\r\n-                        if (options.outputSourceRange) {\r\n-                            child.start = start;\r\n-                            child.end = end;\r\n-                        }\r\n-                        children.push(child);\r\n-                    }\r\n-                }\r\n-            },\r\n-            comment: function comment (text, start, end) {\r\n-                \u002F\u002F adding anyting as a sibling to the root node is forbidden\r\n-                \u002F\u002F comments should still be allowed, but ignored\r\n-                if (currentParent) {\r\n-                    var child = {\r\n-                        type: 3,\r\n-                        text: text,\r\n-                        isComment: true\r\n-                    };\r\n-                    if (options.outputSourceRange) {\r\n-                        child.start = start;\r\n-                        child.end = end;\r\n-                    }\r\n-                    currentParent.children.push(child);\r\n-                }\r\n-            }\r\n-        });\r\n-        return root\r\n-    }\r\n-\r\n-    function processPre (el) {\r\n-        if (getAndRemoveAttr(el, 'v-pre') != null) {\r\n-            el.pre = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processRawAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var len = list.length;\r\n-        if (len) {\r\n-            var attrs = el.attrs = new Array(len);\r\n-            for (var i = 0; i \u003C len; i++) {\r\n-                attrs[i] = {\r\n-                    name: list[i].name,\r\n-                    value: JSON.stringify(list[i].value)\r\n-                };\r\n-                if (list[i].start != null) {\r\n-                    attrs[i].start = list[i].start;\r\n-                    attrs[i].end = list[i].end;\r\n-                }\r\n-            }\r\n-        } else if (!el.pre) {\r\n-            \u002F\u002F non root node in pre blocks with no attributes\r\n-            el.plain = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processElement (\r\n-        element,\r\n-        options\r\n-    ) {\r\n-        processKey(element);\r\n-\r\n-        \u002F\u002F determine whether this is a plain element after\r\n-        \u002F\u002F removing structural attributes\r\n-        element.plain = (\r\n-            !element.key &&\r\n-            !element.scopedSlots &&\r\n-            !element.attrsList.length\r\n-        );\r\n-\r\n-        processRef(element);\r\n-        processSlotContent(element);\r\n-        processSlotOutlet(element);\r\n-        processComponent(element);\r\n-        for (var i = 0; i \u003C transforms.length; i++) {\r\n-            element = transforms[i](element, options) || element;\r\n-        }\r\n-        processAttrs(element);\r\n-        return element\r\n-    }\r\n-\r\n-    function processKey (el) {\r\n-        var exp = getBindingAttr(el, 'key');\r\n-        if (exp) {\r\n-            {\r\n-                if (el.tag === 'template') {\r\n-                    warn$2(\r\n-                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\r\n-                        getRawBindingAttr(el, 'key')\r\n-                    );\r\n-                }\r\n-                if (el.for) {\r\n-                    var iterator = el.iterator2 || el.iterator1;\r\n-                    var parent = el.parent;\r\n-                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\r\n-                        warn$2(\r\n-                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\r\n-                            \"this is the same as not using keys.\",\r\n-                            getRawBindingAttr(el, 'key'),\r\n-                            true \u002F* tip *\u002F\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-            el.key = exp;\r\n-        }\r\n-    }\r\n-\r\n-    function processRef (el) {\r\n-        var ref = getBindingAttr(el, 'ref');\r\n-        if (ref) {\r\n-            el.ref = ref;\r\n-            el.refInFor = checkInFor(el);\r\n-        }\r\n-    }\r\n-\r\n-    function processFor (el) {\r\n-        var exp;\r\n-        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\r\n-            var res = parseFor(exp);\r\n-            if (res) {\r\n-                extend(el, res);\r\n-            } else {\r\n-                warn$2(\r\n-                    (\"Invalid v-for expression: \" + exp),\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-\r\n-    function parseFor (exp) {\r\n-        var inMatch = exp.match(forAliasRE);\r\n-        if (!inMatch) { return }\r\n-        var res = {};\r\n-        res.for = inMatch[2].trim();\r\n-        var alias = inMatch[1].trim().replace(stripParensRE, '');\r\n-        var iteratorMatch = alias.match(forIteratorRE);\r\n-        if (iteratorMatch) {\r\n-            res.alias = alias.replace(forIteratorRE, '').trim();\r\n-            res.iterator1 = iteratorMatch[1].trim();\r\n-            if (iteratorMatch[2]) {\r\n-                res.iterator2 = iteratorMatch[2].trim();\r\n-            }\r\n-        } else {\r\n-            res.alias = alias;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function processIf (el) {\r\n-        var exp = getAndRemoveAttr(el, 'v-if');\r\n-        if (exp) {\r\n-            el.if = exp;\r\n-            addIfCondition(el, {\r\n-                exp: exp,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            if (getAndRemoveAttr(el, 'v-else') != null) {\r\n-                el.else = true;\r\n-            }\r\n-            var elseif = getAndRemoveAttr(el, 'v-else-if');\r\n-            if (elseif) {\r\n-                el.elseif = elseif;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processIfConditions (el, parent) {\r\n-        var prev = findPrevElement(parent.children);\r\n-        if (prev && prev.if) {\r\n-            addIfCondition(prev, {\r\n-                exp: el.elseif,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            warn$2(\r\n-                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\r\n-                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\r\n-                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function findPrevElement (children) {\r\n-        var i = children.length;\r\n-        while (i--) {\r\n-            if (children[i].type === 1) {\r\n-                return children[i]\r\n-            } else {\r\n-                if (children[i].text !== ' ') {\r\n-                    warn$2(\r\n-                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\r\n-                        \"will be ignored.\",\r\n-                        children[i]\r\n-                    );\r\n-                }\r\n-                children.pop();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function addIfCondition (el, condition) {\r\n-        if (!el.ifConditions) {\r\n-            el.ifConditions = [];\r\n-        }\r\n-        el.ifConditions.push(condition);\r\n-    }\r\n-\r\n-    function processOnce (el) {\r\n-        var once$$1 = getAndRemoveAttr(el, 'v-once');\r\n-        if (once$$1 != null) {\r\n-            el.once = true;\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F handle content being passed to a component as slot,\r\n-    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\r\n-    function processSlotContent (el) {\r\n-        var slotScope;\r\n-        if (el.tag === 'template') {\r\n-            slotScope = getAndRemoveAttr(el, 'scope');\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (slotScope) {\r\n-                warn$2(\r\n-                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\r\n-                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\r\n-                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\r\n-                    \"denote scoped slots.\",\r\n-                    el.rawAttrsMap['scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\r\n-        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (el.attrsMap['v-for']) {\r\n-                warn$2(\r\n-                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\r\n-                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\r\n-                    \"scoped slot to make it clearer.\",\r\n-                    el.rawAttrsMap['slot-scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope;\r\n-        }\r\n-\r\n-        \u002F\u002F slot=\"xxx\"\r\n-        var slotTarget = getBindingAttr(el, 'slot');\r\n-        if (slotTarget) {\r\n-            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\r\n-            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\r\n-            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\r\n-            \u002F\u002F only for non-scoped slots.\r\n-            if (el.tag !== 'template' && !el.slotScope) {\r\n-                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F 2.6 v-slot syntax\r\n-        {\r\n-            if (el.tag === 'template') {\r\n-                \u002F\u002F v-slot on \u003Ctemplate>\r\n-                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding) {\r\n-                    {\r\n-                        if (el.slotTarget || el.slotScope) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.parent && !maybeComponent(el.parent)) {\r\n-                            warn$2(\r\n-                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\r\n-                                \"the receiving the component\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    var ref = getSlotName(slotBinding);\r\n-                    var name = ref.name;\r\n-                    var dynamic = ref.dynamic;\r\n-                    el.slotTarget = name;\r\n-                    el.slotTargetDynamic = dynamic;\r\n-                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F v-slot on component, denotes default slot\r\n-                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding$1) {\r\n-                    {\r\n-                        if (!maybeComponent(el)) {\r\n-                            warn$2(\r\n-                                \"v-slot can only be used on components or \u003Ctemplate>.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                        if (el.slotScope || el.slotTarget) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.scopedSlots) {\r\n-                            warn$2(\r\n-                                \"To avoid scope ambiguity, the default slot should also use \" +\r\n-                                \"\u003Ctemplate> syntax when there are other named slots.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    \u002F\u002F add the component's children to its default slot\r\n-                    var slots = el.scopedSlots || (el.scopedSlots = {});\r\n-                    var ref$1 = getSlotName(slotBinding$1);\r\n-                    var name$1 = ref$1.name;\r\n-                    var dynamic$1 = ref$1.dynamic;\r\n-                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\r\n-                    slotContainer.slotTarget = name$1;\r\n-                    slotContainer.slotTargetDynamic = dynamic$1;\r\n-                    slotContainer.children = el.children.filter(function (c) {\r\n-                        if (!c.slotScope) {\r\n-                            c.parent = slotContainer;\r\n-                            return true\r\n-                        }\r\n-                    });\r\n-                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\r\n-                    \u002F\u002F remove children as they are returned from scopedSlots now\r\n-                    el.children = [];\r\n-                    \u002F\u002F mark el non-plain so data gets generated\r\n-                    el.plain = false;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function getSlotName (binding) {\r\n-        var name = binding.name.replace(slotRE, '');\r\n-        if (!name) {\r\n-            if (binding.name[0] !== '#') {\r\n-                name = 'default';\r\n-            } else {\r\n-                warn$2(\r\n-                    \"v-slot shorthand syntax requires a slot name.\",\r\n-                    binding\r\n-                );\r\n-            }\r\n-        }\r\n-        return dynamicArgRE.test(name)\r\n-            \u002F\u002F dynamic [name]\r\n-            ? { name: name.slice(1, -1), dynamic: true }\r\n-            \u002F\u002F static name\r\n-            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\r\n-    }\r\n-\r\n-    \u002F\u002F handle \u003Cslot\u002F> outlets\r\n-    function processSlotOutlet (el) {\r\n-        if (el.tag === 'slot') {\r\n-            el.slotName = getBindingAttr(el, 'name');\r\n-            if (el.key) {\r\n-                warn$2(\r\n-                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\r\n-                    \"and can possibly expand into multiple elements. \" +\r\n-                    \"Use the key on a wrapping element instead.\",\r\n-                    getRawBindingAttr(el, 'key')\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processComponent (el) {\r\n-        var binding;\r\n-        if ((binding = getBindingAttr(el, 'is'))) {\r\n-            el.component = binding;\r\n-        }\r\n-        if (getAndRemoveAttr(el, 'inline-template') != null) {\r\n-            el.inlineTemplate = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\r\n-        for (i = 0, l = list.length; i \u003C l; i++) {\r\n-            name = rawName = list[i].name;\r\n-            value = list[i].value;\r\n-            if (dirRE.test(name)) {\r\n-                \u002F\u002F mark element as dynamic\r\n-                el.hasBindings = true;\r\n-                \u002F\u002F modifiers\r\n-                modifiers = parseModifiers(name.replace(dirRE, ''));\r\n-                \u002F\u002F support .foo shorthand syntax for the .prop modifier\r\n-                if (modifiers) {\r\n-                    name = name.replace(modifierRE, '');\r\n-                }\r\n-                if (bindRE.test(name)) { \u002F\u002F v-bind\r\n-                    name = name.replace(bindRE, '');\r\n-                    value = parseFilters(value);\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    if (\r\n-                        value.trim().length === 0\r\n-                    ) {\r\n-                        warn$2(\r\n-                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\r\n-                        );\r\n-                    }\r\n-                    if (modifiers) {\r\n-                        if (modifiers.prop && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                            if (name === 'innerHtml') { name = 'innerHTML'; }\r\n-                        }\r\n-                        if (modifiers.camel && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                        }\r\n-                        if (modifiers.sync) {\r\n-                            syncGen = genAssignmentCode(value, \"$event\");\r\n-                            if (!isDynamic) {\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"update:\" + (camelize(name))),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i]\r\n-                                );\r\n-                                if (hyphenate(name) !== camelize(name)) {\r\n-                                    addHandler(\r\n-                                        el,\r\n-                                        (\"update:\" + (hyphenate(name))),\r\n-                                        syncGen,\r\n-                                        null,\r\n-                                        false,\r\n-                                        warn$2,\r\n-                                        list[i]\r\n-                                    );\r\n-                                }\r\n-                            } else {\r\n-                                \u002F\u002F handler w\u002F dynamic event name\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"\\\"update:\\\"+(\" + name + \")\"),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i],\r\n-                                    true \u002F\u002F dynamic\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if ((modifiers && modifiers.prop) || (\r\n-                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\r\n-                        )) {\r\n-                        addProp(el, name, value, list[i], isDynamic);\r\n-                    } else {\r\n-                        addAttr(el, name, value, list[i], isDynamic);\r\n-                    }\r\n-                } else if (onRE.test(name)) { \u002F\u002F v-on\r\n-                    name = name.replace(onRE, '');\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\r\n-                } else { \u002F\u002F normal directives\r\n-                    name = name.replace(dirRE, '');\r\n-                    \u002F\u002F parse arg\r\n-                    var argMatch = name.match(argRE);\r\n-                    var arg = argMatch && argMatch[1];\r\n-                    isDynamic = false;\r\n-                    if (arg) {\r\n-                        name = name.slice(0, -(arg.length + 1));\r\n-                        if (dynamicArgRE.test(arg)) {\r\n-                            arg = arg.slice(1, -1);\r\n-                            isDynamic = true;\r\n-                        }\r\n-                    }\r\n-                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\r\n-                    if (name === 'model') {\r\n-                        checkForAliasModel(el, value);\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F literal attribute\r\n-                {\r\n-                    var res = parseText(value, delimiters);\r\n-                    if (res) {\r\n-                        warn$2(\r\n-                            name + \"=\\\"\" + value + \"\\\": \" +\r\n-                            'Interpolation inside attributes has been removed. ' +\r\n-                            'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\r\n-                            list[i]\r\n-                        );\r\n-                    }\r\n-                }\r\n-                addAttr(el, name, JSON.stringify(value), list[i]);\r\n-                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\r\n-                \u002F\u002F even immediately after element creation\r\n-                if (!el.component &&\r\n-                    name === 'muted' &&\r\n-                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\r\n-                    addProp(el, name, 'true', list[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkInFor (el) {\r\n-        var parent = el;\r\n-        while (parent) {\r\n-            if (parent.for !== undefined) {\r\n-                return true\r\n-            }\r\n-            parent = parent.parent;\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function parseModifiers (name) {\r\n-        var match = name.match(modifierRE);\r\n-        if (match) {\r\n-            var ret = {};\r\n-            match.forEach(function (m) { ret[m.slice(1)] = true; });\r\n-            return ret\r\n-        }\r\n-    }\r\n-\r\n-    function makeAttrsMap (attrs) {\r\n-        var map = {};\r\n-        for (var i = 0, l = attrs.length; i \u003C l; i++) {\r\n-            if (\r\n-                map[attrs[i].name] && !isIE && !isEdge\r\n-            ) {\r\n-                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\r\n-            }\r\n-            map[attrs[i].name] = attrs[i].value;\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\r\n-    function isTextTag (el) {\r\n-        return el.tag === 'script' || el.tag === 'style'\r\n-    }\r\n-\r\n-    function isForbiddenTag (el) {\r\n-        return (\r\n-            el.tag === 'style' ||\r\n-            (el.tag === 'script' && (\r\n-                !el.attrsMap.type ||\r\n-                el.attrsMap.type === 'text\u002Fjavascript'\r\n-            ))\r\n-        )\r\n-    }\r\n-\r\n-    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\r\n-    var ieNSPrefix = \u002F^NS\\d+:\u002F;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function guardIESVGBug (attrs) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C attrs.length; i++) {\r\n-            var attr = attrs[i];\r\n-            if (!ieNSBug.test(attr.name)) {\r\n-                attr.name = attr.name.replace(ieNSPrefix, '');\r\n-                res.push(attr);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkForAliasModel (el, value) {\r\n-        var _el = el;\r\n-        while (_el) {\r\n-            if (_el.for && _el.alias === value) {\r\n-                warn$2(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                    \"You are binding v-model directly to a v-for iteration alias. \" +\r\n-                    \"This will not be able to modify the v-for source array because \" +\r\n-                    \"writing to the alias is like modifying a function local variable. \" +\r\n-                    \"Consider using an array of objects and use v-model on an object property instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-            _el = _el.parent;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function preTransformNode (el, options) {\r\n-        if (el.tag === 'input') {\r\n-            var map = el.attrsMap;\r\n-            if (!map['v-model']) {\r\n-                return\r\n-            }\r\n-\r\n-            var typeBinding;\r\n-            if (map[':type'] || map['v-bind:type']) {\r\n-                typeBinding = getBindingAttr(el, 'type');\r\n-            }\r\n-            if (!map.type && !typeBinding && map['v-bind']) {\r\n-                typeBinding = \"(\" + (map['v-bind']) + \").type\";\r\n-            }\r\n-\r\n-            if (typeBinding) {\r\n-                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\r\n-                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\r\n-                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\r\n-                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\r\n-                \u002F\u002F 1. checkbox\r\n-                var branch0 = cloneASTElement(el);\r\n-                \u002F\u002F process for on the main node\r\n-                processFor(branch0);\r\n-                addRawAttr(branch0, 'type', 'checkbox');\r\n-                processElement(branch0, options);\r\n-                branch0.processed = true; \u002F\u002F prevent it from double-processed\r\n-                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\r\n-                addIfCondition(branch0, {\r\n-                    exp: branch0.if,\r\n-                    block: branch0\r\n-                });\r\n-                \u002F\u002F 2. add radio else-if condition\r\n-                var branch1 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch1, 'v-for', true);\r\n-                addRawAttr(branch1, 'type', 'radio');\r\n-                processElement(branch1, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\r\n-                    block: branch1\r\n-                });\r\n-                \u002F\u002F 3. other\r\n-                var branch2 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch2, 'v-for', true);\r\n-                addRawAttr(branch2, ':type', typeBinding);\r\n-                processElement(branch2, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: ifCondition,\r\n-                    block: branch2\r\n-                });\r\n-\r\n-                if (hasElse) {\r\n-                    branch0.else = true;\r\n-                } else if (elseIfCondition) {\r\n-                    branch0.elseif = elseIfCondition;\r\n-                }\r\n-\r\n-                return branch0\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function cloneASTElement (el) {\r\n-        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\r\n-    }\r\n-\r\n-    var model$1 = {\r\n-        preTransformNode: preTransformNode\r\n-    };\r\n-\r\n-    var modules$1 = [\r\n-        klass$1,\r\n-        style$1,\r\n-        model$1\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function text (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function html (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-    var directives$1 = {\r\n-        model: model,\r\n-        text: text,\r\n-        html: html\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseOptions = {\r\n-        expectHTML: true,\r\n-        modules: modules$1,\r\n-        directives: directives$1,\r\n-        isPreTag: isPreTag,\r\n-        isUnaryTag: isUnaryTag,\r\n-        mustUseProp: mustUseProp,\r\n-        canBeLeftOpenTag: canBeLeftOpenTag,\r\n-        isReservedTag: isReservedTag,\r\n-        getTagNamespace: getTagNamespace,\r\n-        staticKeys: genStaticKeys(modules$1)\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isStaticKey;\r\n-    var isPlatformReservedTag;\r\n-\r\n-    var genStaticKeysCached = cached(genStaticKeys$1);\r\n-\r\n-    \u002F**\r\n-     * Goal of the optimizer: walk the generated template AST tree\r\n-     * and detect sub-trees that are purely static, i.e. parts of\r\n-     * the DOM that never needs to change.\r\n-     *\r\n-     * Once we detect these sub-trees, we can:\r\n-     *\r\n-     * 1. Hoist them into constants, so that we no longer need to\r\n-     *    create fresh nodes for them on each re-render;\r\n-     * 2. Completely skip them in the patching process.\r\n-     *\u002F\r\n-    function optimize (root, options) {\r\n-        if (!root) { return }\r\n-        isStaticKey = genStaticKeysCached(options.staticKeys || '');\r\n-        isPlatformReservedTag = options.isReservedTag || no;\r\n-        \u002F\u002F first pass: mark all non-static nodes.\r\n-        markStatic$1(root);\r\n-        \u002F\u002F second pass: mark static roots.\r\n-        markStaticRoots(root, false);\r\n-    }\r\n-\r\n-    function genStaticKeys$1 (keys) {\r\n-        return makeMap(\r\n-            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\r\n-            (keys ? ',' + keys : '')\r\n-        )\r\n-    }\r\n-\r\n-    function markStatic$1 (node) {\r\n-        node.static = isStatic(node);\r\n-        if (node.type === 1) {\r\n-            \u002F\u002F do not make component slot content static. this avoids\r\n-            \u002F\u002F 1. components not able to mutate slot nodes\r\n-            \u002F\u002F 2. static slot content fails for hot-reloading\r\n-            if (\r\n-                !isPlatformReservedTag(node.tag) &&\r\n-                node.tag !== 'slot' &&\r\n-                node.attrsMap['inline-template'] == null\r\n-            ) {\r\n-                return\r\n-            }\r\n-            for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                var child = node.children[i];\r\n-                markStatic$1(child);\r\n-                if (!child.static) {\r\n-                    node.static = false;\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    var block = node.ifConditions[i$1].block;\r\n-                    markStatic$1(block);\r\n-                    if (!block.static) {\r\n-                        node.static = false;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticRoots (node, isInFor) {\r\n-        if (node.type === 1) {\r\n-            if (node.static || node.once) {\r\n-                node.staticInFor = isInFor;\r\n-            }\r\n-            \u002F\u002F For a node to qualify as a static root, it should have children that\r\n-            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\r\n-            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\r\n-            if (node.static && node.children.length && !(\r\n-                    node.children.length === 1 &&\r\n-                    node.children[0].type === 3\r\n-                )) {\r\n-                node.staticRoot = true;\r\n-                return\r\n-            } else {\r\n-                node.staticRoot = false;\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                    markStaticRoots(node.children[i], isInFor || !!node.for);\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isStatic (node) {\r\n-        if (node.type === 2) { \u002F\u002F expression\r\n-            return false\r\n-        }\r\n-        if (node.type === 3) { \u002F\u002F text\r\n-            return true\r\n-        }\r\n-        return !!(node.pre || (\r\n-            !node.hasBindings && \u002F\u002F no dynamic bindings\r\n-            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\r\n-            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\r\n-            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\r\n-            !isDirectChildOfTemplateFor(node) &&\r\n-            Object.keys(node).every(isStaticKey)\r\n-        ))\r\n-    }\r\n-\r\n-    function isDirectChildOfTemplateFor (node) {\r\n-        while (node.parent) {\r\n-            node = node.parent;\r\n-            if (node.tag !== 'template') {\r\n-                return false\r\n-            }\r\n-            if (node.for) {\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\r\n-    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\r\n-    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\r\n-\r\n-    \u002F\u002F KeyboardEvent.keyCode aliases\r\n-    var keyCodes = {\r\n-        esc: 27,\r\n-        tab: 9,\r\n-        enter: 13,\r\n-        space: 32,\r\n-        up: 38,\r\n-        left: 37,\r\n-        right: 39,\r\n-        down: 40,\r\n-        'delete': [8, 46]\r\n-    };\r\n-\r\n-    \u002F\u002F KeyboardEvent.key aliases\r\n-    var keyNames = {\r\n-        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\r\n-        esc: ['Esc', 'Escape'],\r\n-        tab: 'Tab',\r\n-        enter: 'Enter',\r\n-        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\r\n-        space: [' ', 'Spacebar'],\r\n-        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\r\n-        up: ['Up', 'ArrowUp'],\r\n-        left: ['Left', 'ArrowLeft'],\r\n-        right: ['Right', 'ArrowRight'],\r\n-        down: ['Down', 'ArrowDown'],\r\n-        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\r\n-        'delete': ['Backspace', 'Delete', 'Del']\r\n-    };\r\n-\r\n-    \u002F\u002F #4868: modifiers that prevent the execution of the listener\r\n-    \u002F\u002F need to explicitly return null so that we can determine whether to remove\r\n-    \u002F\u002F the listener for .once\r\n-    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\r\n-\r\n-    var modifierCode = {\r\n-        stop: '$event.stopPropagation();',\r\n-        prevent: '$event.preventDefault();',\r\n-        self: genGuard(\"$event.target !== $event.currentTarget\"),\r\n-        ctrl: genGuard(\"!$event.ctrlKey\"),\r\n-        shift: genGuard(\"!$event.shiftKey\"),\r\n-        alt: genGuard(\"!$event.altKey\"),\r\n-        meta: genGuard(\"!$event.metaKey\"),\r\n-        left: genGuard(\"'button' in $event && $event.button !== 0\"),\r\n-        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\r\n-        right: genGuard(\"'button' in $event && $event.button !== 2\")\r\n-    };\r\n-\r\n-    function genHandlers (\r\n-        events,\r\n-        isNative\r\n-    ) {\r\n-        var prefix = isNative ? 'nativeOn:' : 'on:';\r\n-        var staticHandlers = \"\";\r\n-        var dynamicHandlers = \"\";\r\n-        for (var name in events) {\r\n-            var handlerCode = genHandler(events[name]);\r\n-            if (events[name] && events[name].dynamic) {\r\n-                dynamicHandlers += name + \",\" + handlerCode + \",\";\r\n-            } else {\r\n-                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\r\n-            }\r\n-        }\r\n-        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\r\n-        if (dynamicHandlers) {\r\n-            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\r\n-        } else {\r\n-            return prefix + staticHandlers\r\n-        }\r\n-    }\r\n-\r\n-    function genHandler (handler) {\r\n-        if (!handler) {\r\n-            return 'function(){}'\r\n-        }\r\n-\r\n-        if (Array.isArray(handler)) {\r\n-            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\r\n-        }\r\n-\r\n-        var isMethodPath = simplePathRE.test(handler.value);\r\n-        var isFunctionExpression = fnExpRE.test(handler.value);\r\n-        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\r\n-\r\n-        if (!handler.modifiers) {\r\n-            if (isMethodPath || isFunctionExpression) {\r\n-                return handler.value\r\n-            }\r\n-            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\r\n-        } else {\r\n-            var code = '';\r\n-            var genModifierCode = '';\r\n-            var keys = [];\r\n-            for (var key in handler.modifiers) {\r\n-                if (modifierCode[key]) {\r\n-                    genModifierCode += modifierCode[key];\r\n-                    \u002F\u002F left\u002Fright\r\n-                    if (keyCodes[key]) {\r\n-                        keys.push(key);\r\n-                    }\r\n-                } else if (key === 'exact') {\r\n-                    var modifiers = (handler.modifiers);\r\n-                    genModifierCode += genGuard(\r\n-                        ['ctrl', 'shift', 'alt', 'meta']\r\n-                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\r\n-                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\r\n-                            .join('||')\r\n-                    );\r\n-                } else {\r\n-                    keys.push(key);\r\n-                }\r\n-            }\r\n-            if (keys.length) {\r\n-                code += genKeyFilter(keys);\r\n-            }\r\n-            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\r\n-            if (genModifierCode) {\r\n-                code += genModifierCode;\r\n-            }\r\n-            var handlerCode = isMethodPath\r\n-                ? (\"return \" + (handler.value) + \"($event)\")\r\n-                : isFunctionExpression\r\n-                    ? (\"return (\" + (handler.value) + \")($event)\")\r\n-                    : isFunctionInvocation\r\n-                        ? (\"return \" + (handler.value))\r\n-                        : handler.value;\r\n-            return (\"function($event){\" + code + handlerCode + \"}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genKeyFilter (keys) {\r\n-        return (\r\n-            \u002F\u002F make sure the key filters only apply to KeyboardEvents\r\n-            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\r\n-            \u002F\u002F key events that do not have keyCode property...\r\n-            \"if(!$event.type.indexOf('key')&&\" +\r\n-            (keys.map(genFilterCode).join('&&')) + \")return null;\"\r\n-        )\r\n-    }\r\n-\r\n-    function genFilterCode (key) {\r\n-        var keyVal = parseInt(key, 10);\r\n-        if (keyVal) {\r\n-            return (\"$event.keyCode!==\" + keyVal)\r\n-        }\r\n-        var keyCode = keyCodes[key];\r\n-        var keyName = keyNames[key];\r\n-        return (\r\n-            \"_k($event.keyCode,\" +\r\n-            (JSON.stringify(key)) + \",\" +\r\n-            (JSON.stringify(keyCode)) + \",\" +\r\n-            \"$event.key,\" +\r\n-            \"\" + (JSON.stringify(keyName)) +\r\n-            \")\"\r\n-        )\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function on (el, dir) {\r\n-        if (dir.modifiers) {\r\n-            warn(\"v-on without argument does not support modifiers.\");\r\n-        }\r\n-        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bind$1 (el, dir) {\r\n-        el.wrapData = function (code) {\r\n-            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseDirectives = {\r\n-        on: on,\r\n-        bind: bind$1,\r\n-        cloak: noop\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-\r\n-\r\n-    var CodegenState = function CodegenState (options) {\r\n-        this.options = options;\r\n-        this.warn = options.warn || baseWarn;\r\n-        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\r\n-        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\r\n-        this.directives = extend(extend({}, baseDirectives), options.directives);\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-        this.onceId = 0;\r\n-        this.staticRenderFns = [];\r\n-        this.pre = false;\r\n-    };\r\n-\r\n-\r\n-\r\n-    function generate (\r\n-        ast,\r\n-        options\r\n-    ) {\r\n-        var state = new CodegenState(options);\r\n-        var code = ast ? genElement(ast, state) : '_c(\"div\")';\r\n-        return {\r\n-            render: (\"with(this){return \" + code + \"}\"),\r\n-            staticRenderFns: state.staticRenderFns\r\n-        }\r\n-    }\r\n-\r\n-    function genElement (el, state) {\r\n-        if (el.parent) {\r\n-            el.pre = el.pre || el.parent.pre;\r\n-        }\r\n-\r\n-        if (el.staticRoot && !el.staticProcessed) {\r\n-            return genStatic(el, state)\r\n-        } else if (el.once && !el.onceProcessed) {\r\n-            return genOnce(el, state)\r\n-        } else if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state)\r\n-        } else if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\r\n-            return genChildren(el, state) || 'void 0'\r\n-        } else if (el.tag === 'slot') {\r\n-            return genSlot(el, state)\r\n-        } else {\r\n-            \u002F\u002F component or element\r\n-            var code;\r\n-            if (el.component) {\r\n-                code = genComponent(el.component, el, state);\r\n-            } else {\r\n-                var data;\r\n-                if (!el.plain || (el.pre && state.maybeComponent(el))) {\r\n-                    data = genData$2(el, state);\r\n-                }\r\n-\r\n-                var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\r\n-            }\r\n-            \u002F\u002F module transforms\r\n-            for (var i = 0; i \u003C state.transforms.length; i++) {\r\n-                code = state.transforms[i](el, code);\r\n-            }\r\n-            return code\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F hoist static sub-trees out\r\n-    function genStatic (el, state) {\r\n-        el.staticProcessed = true;\r\n-        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\r\n-        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\r\n-        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\r\n-        var originalPreState = state.pre;\r\n-        if (el.pre) {\r\n-            state.pre = el.pre;\r\n-        }\r\n-        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\r\n-        state.pre = originalPreState;\r\n-        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\r\n-    }\r\n-\r\n-    \u002F\u002F v-once\r\n-    function genOnce (el, state) {\r\n-        el.onceProcessed = true;\r\n-        if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.staticInFor) {\r\n-            var key = '';\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (parent.for) {\r\n-                    key = parent.key;\r\n-                    break\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-            if (!key) {\r\n-                state.warn(\r\n-                    \"v-once can only be used inside v-for that is keyed. \",\r\n-                    el.rawAttrsMap['v-once']\r\n-                );\r\n-                return genElement(el, state)\r\n-            }\r\n-            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\r\n-        } else {\r\n-            return genStatic(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genIf (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        el.ifProcessed = true; \u002F\u002F avoid recursion\r\n-        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\r\n-    }\r\n-\r\n-    function genIfConditions (\r\n-        conditions,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        if (!conditions.length) {\r\n-            return altEmpty || '_e()'\r\n-        }\r\n-\r\n-        var condition = conditions.shift();\r\n-        if (condition.exp) {\r\n-            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\r\n-        } else {\r\n-            return (\"\" + (genTernaryExp(condition.block)))\r\n-        }\r\n-\r\n-        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\r\n-        function genTernaryExp (el) {\r\n-            return altGen\r\n-                ? altGen(el, state)\r\n-                : el.once\r\n-                    ? genOnce(el, state)\r\n-                    : genElement(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genFor (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altHelper\r\n-    ) {\r\n-        var exp = el.for;\r\n-        var alias = el.alias;\r\n-        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\r\n-        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\r\n-\r\n-        if (state.maybeComponent(el) &&\r\n-            el.tag !== 'slot' &&\r\n-            el.tag !== 'template' &&\r\n-            !el.key\r\n-        ) {\r\n-            state.warn(\r\n-                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\r\n-                \"v-for should have explicit keys. \" +\r\n-                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\r\n-                el.rawAttrsMap['v-for'],\r\n-                true \u002F* tip *\u002F\r\n-            );\r\n-        }\r\n-\r\n-        el.forProcessed = true; \u002F\u002F avoid recursion\r\n-        return (altHelper || '_l') + \"((\" + exp + \"),\" +\r\n-            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\r\n-            \"return \" + ((altGen || genElement)(el, state)) +\r\n-            '})'\r\n-    }\r\n-\r\n-    function genData$2 (el, state) {\r\n-        var data = '{';\r\n-\r\n-        \u002F\u002F directives first.\r\n-        \u002F\u002F directives may mutate the el's other properties before they are generated.\r\n-        var dirs = genDirectives(el, state);\r\n-        if (dirs) { data += dirs + ','; }\r\n-\r\n-        \u002F\u002F key\r\n-        if (el.key) {\r\n-            data += \"key:\" + (el.key) + \",\";\r\n-        }\r\n-        \u002F\u002F ref\r\n-        if (el.ref) {\r\n-            data += \"ref:\" + (el.ref) + \",\";\r\n-        }\r\n-        if (el.refInFor) {\r\n-            data += \"refInFor:true,\";\r\n-        }\r\n-        \u002F\u002F pre\r\n-        if (el.pre) {\r\n-            data += \"pre:true,\";\r\n-        }\r\n-        \u002F\u002F record original tag name for components using \"is\" attribute\r\n-        if (el.component) {\r\n-            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\r\n-        }\r\n-        \u002F\u002F module data generation functions\r\n-        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\r\n-            data += state.dataGenFns[i](el);\r\n-        }\r\n-        \u002F\u002F attributes\r\n-        if (el.attrs) {\r\n-            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\r\n-        }\r\n-        \u002F\u002F DOM props\r\n-        if (el.props) {\r\n-            data += \"domProps:\" + (genProps(el.props)) + \",\";\r\n-        }\r\n-        \u002F\u002F event handlers\r\n-        if (el.events) {\r\n-            data += (genHandlers(el.events, false)) + \",\";\r\n-        }\r\n-        if (el.nativeEvents) {\r\n-            data += (genHandlers(el.nativeEvents, true)) + \",\";\r\n-        }\r\n-        \u002F\u002F slot target\r\n-        \u002F\u002F only for non-scoped slots\r\n-        if (el.slotTarget && !el.slotScope) {\r\n-            data += \"slot:\" + (el.slotTarget) + \",\";\r\n-        }\r\n-        \u002F\u002F scoped slots\r\n-        if (el.scopedSlots) {\r\n-            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\r\n-        }\r\n-        \u002F\u002F component v-model\r\n-        if (el.model) {\r\n-            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\r\n-        }\r\n-        \u002F\u002F inline-template\r\n-        if (el.inlineTemplate) {\r\n-            var inlineTemplate = genInlineTemplate(el, state);\r\n-            if (inlineTemplate) {\r\n-                data += inlineTemplate + \",\";\r\n-            }\r\n-        }\r\n-        data = data.replace(\u002F,$\u002F, '') + '}';\r\n-        \u002F\u002F v-bind dynamic argument wrap\r\n-        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\r\n-        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\r\n-        if (el.dynamicAttrs) {\r\n-            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\r\n-        }\r\n-        \u002F\u002F v-bind data wrap\r\n-        if (el.wrapData) {\r\n-            data = el.wrapData(data);\r\n-        }\r\n-        \u002F\u002F v-on data wrap\r\n-        if (el.wrapListeners) {\r\n-            data = el.wrapListeners(data);\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function genDirectives (el, state) {\r\n-        var dirs = el.directives;\r\n-        if (!dirs) { return }\r\n-        var res = 'directives:[';\r\n-        var hasRuntime = false;\r\n-        var i, l, dir, needRuntime;\r\n-        for (i = 0, l = dirs.length; i \u003C l; i++) {\r\n-            dir = dirs[i];\r\n-            needRuntime = true;\r\n-            var gen = state.directives[dir.name];\r\n-            if (gen) {\r\n-                \u002F\u002F compile-time directive that manipulates AST.\r\n-                \u002F\u002F returns true if it also needs a runtime counterpart.\r\n-                needRuntime = !!gen(el, dir, state.warn);\r\n-            }\r\n-            if (needRuntime) {\r\n-                hasRuntime = true;\r\n-                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\r\n-            }\r\n-        }\r\n-        if (hasRuntime) {\r\n-            return res.slice(0, -1) + ']'\r\n-        }\r\n-    }\r\n-\r\n-    function genInlineTemplate (el, state) {\r\n-        var ast = el.children[0];\r\n-        if (el.children.length !== 1 || ast.type !== 1) {\r\n-            state.warn(\r\n-                'Inline-template components must have exactly one child element.',\r\n-                { start: el.start }\r\n-            );\r\n-        }\r\n-        if (ast && ast.type === 1) {\r\n-            var inlineRenderFns = generate(ast, state.options);\r\n-            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genScopedSlots (\r\n-        el,\r\n-        slots,\r\n-        state\r\n-    ) {\r\n-        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\r\n-        \u002F\u002F components with only scoped slots to skip forced updates from parent.\r\n-        \u002F\u002F but in some cases we have to bail-out of this optimization\r\n-        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\r\n-        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\r\n-                var slot = slots[key];\r\n-                return (\r\n-                    slot.slotTargetDynamic ||\r\n-                    slot.if ||\r\n-                    slot.for ||\r\n-                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\r\n-                )\r\n-            });\r\n-\r\n-        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\r\n-        \u002F\u002F it's possible for the same component to be reused but with different\r\n-        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\r\n-        \u002F\u002F the generated code of all the slot contents.\r\n-        var needsKey = !!el.if;\r\n-\r\n-        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\r\n-        \u002F\u002F disconnected due to the intermediate scope variable)\r\n-        \u002F\u002F #9438, #9506\r\n-        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\r\n-        \u002F\u002F and skip force updating ones that do not actually use scope variables.\r\n-        if (!needsForceUpdate) {\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (\r\n-                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\r\n-                    parent.for\r\n-                ) {\r\n-                    needsForceUpdate = true;\r\n-                    break\r\n-                }\r\n-                if (parent.if) {\r\n-                    needsKey = true;\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-        }\r\n-\r\n-        var generatedSlots = Object.keys(slots)\r\n-            .map(function (key) { return genScopedSlot(slots[key], state); })\r\n-            .join(',');\r\n-\r\n-        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\r\n-    }\r\n-\r\n-    function hash(str) {\r\n-        var hash = 5381;\r\n-        var i = str.length;\r\n-        while(i) {\r\n-            hash = (hash * 33) ^ str.charCodeAt(--i);\r\n-        }\r\n-        return hash >>> 0\r\n-    }\r\n-\r\n-    function containsSlotChild (el) {\r\n-        if (el.type === 1) {\r\n-            if (el.tag === 'slot') {\r\n-                return true\r\n-            }\r\n-            return el.children.some(containsSlotChild)\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function genScopedSlot (\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var isLegacySyntax = el.attrsMap['slot-scope'];\r\n-        if (el.if && !el.ifProcessed && !isLegacySyntax) {\r\n-            return genIf(el, state, genScopedSlot, \"null\")\r\n-        }\r\n-        if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state, genScopedSlot)\r\n-        }\r\n-        var slotScope = el.slotScope === emptySlotScopeToken\r\n-            ? \"\"\r\n-            : String(el.slotScope);\r\n-        var fn = \"function(\" + slotScope + \"){\" +\r\n-            \"return \" + (el.tag === 'template'\r\n-                ? el.if && isLegacySyntax\r\n-                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\r\n-                    : genChildren(el, state) || 'undefined'\r\n-                : genElement(el, state)) + \"}\";\r\n-        \u002F\u002F reverse proxy v-slot without scope on this.$slots\r\n-        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\r\n-        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\r\n-    }\r\n-\r\n-    function genChildren (\r\n-        el,\r\n-        state,\r\n-        checkSkip,\r\n-        altGenElement,\r\n-        altGenNode\r\n-    ) {\r\n-        var children = el.children;\r\n-        if (children.length) {\r\n-            var el$1 = children[0];\r\n-            \u002F\u002F optimize single v-for\r\n-            if (children.length === 1 &&\r\n-                el$1.for &&\r\n-                el$1.tag !== 'template' &&\r\n-                el$1.tag !== 'slot'\r\n-            ) {\r\n-                var normalizationType = checkSkip\r\n-                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\r\n-                    : \"\";\r\n-                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\r\n-            }\r\n-            var normalizationType$1 = checkSkip\r\n-                ? getNormalizationType(children, state.maybeComponent)\r\n-                : 0;\r\n-            var gen = altGenNode || genNode;\r\n-            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F determine the normalization needed for the children array.\r\n-    \u002F\u002F 0: no normalization needed\r\n-    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\r\n-    \u002F\u002F 2: full normalization needed\r\n-    function getNormalizationType (\r\n-        children,\r\n-        maybeComponent\r\n-    ) {\r\n-        var res = 0;\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            var el = children[i];\r\n-            if (el.type !== 1) {\r\n-                continue\r\n-            }\r\n-            if (needsNormalization(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\r\n-                res = 2;\r\n-                break\r\n-            }\r\n-            if (maybeComponent(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\r\n-                res = 1;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function needsNormalization (el) {\r\n-        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\r\n-    }\r\n-\r\n-    function genNode (node, state) {\r\n-        if (node.type === 1) {\r\n-            return genElement(node, state)\r\n-        } else if (node.type === 3 && node.isComment) {\r\n-            return genComment(node)\r\n-        } else {\r\n-            return genText(node)\r\n-        }\r\n-    }\r\n-\r\n-    function genText (text) {\r\n-        return (\"_v(\" + (text.type === 2\r\n-            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\r\n-            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\r\n-    }\r\n-\r\n-    function genComment (comment) {\r\n-        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\r\n-    }\r\n-\r\n-    function genSlot (el, state) {\r\n-        var slotName = el.slotName || '\"default\"';\r\n-        var children = genChildren(el, state);\r\n-        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\r\n-        var attrs = el.attrs || el.dynamicAttrs\r\n-            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\r\n-                \u002F\u002F slot props are camelized\r\n-                name: camelize(attr.name),\r\n-                value: attr.value,\r\n-                dynamic: attr.dynamic\r\n-            }); }))\r\n-            : null;\r\n-        var bind$$1 = el.attrsMap['v-bind'];\r\n-        if ((attrs || bind$$1) && !children) {\r\n-            res += \",null\";\r\n-        }\r\n-        if (attrs) {\r\n-            res += \",\" + attrs;\r\n-        }\r\n-        if (bind$$1) {\r\n-            res += (attrs ? '' : ',null') + \",\" + bind$$1;\r\n-        }\r\n-        return res + ')'\r\n-    }\r\n-\r\n-    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\r\n-    function genComponent (\r\n-        componentName,\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\r\n-    }\r\n-\r\n-    function genProps (props) {\r\n-        var staticProps = \"\";\r\n-        var dynamicProps = \"\";\r\n-        for (var i = 0; i \u003C props.length; i++) {\r\n-            var prop = props[i];\r\n-            var value = transformSpecialNewlines(prop.value);\r\n-            if (prop.dynamic) {\r\n-                dynamicProps += (prop.name) + \",\" + value + \",\";\r\n-            } else {\r\n-                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\r\n-            }\r\n-        }\r\n-        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\r\n-        if (dynamicProps) {\r\n-            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\r\n-        } else {\r\n-            return staticProps\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #3895, #4268\r\n-    function transformSpecialNewlines (text) {\r\n-        return text\r\n-            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\r\n-            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F\u002F these keywords should not appear inside expressions, but operators like\r\n-    \u002F\u002F typeof, instanceof and in are allowed\r\n-    var prohibitedKeywordRE = new RegExp('\\\\b' + (\r\n-            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n-            'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n-            'extends,finally,continue,debugger,function,arguments'\r\n-        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\r\n-\r\n-    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\r\n-    var unaryOperatorsRE = new RegExp('\\\\b' + (\r\n-            'delete,typeof,void'\r\n-        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\r\n-\r\n-    \u002F\u002F strip strings in expressions\r\n-    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\r\n-\r\n-    \u002F\u002F detect problematic expressions in a template\r\n-    function detectErrors (ast, warn) {\r\n-        if (ast) {\r\n-            checkNode(ast, warn);\r\n-        }\r\n-    }\r\n-\r\n-    function checkNode (node, warn) {\r\n-        if (node.type === 1) {\r\n-            for (var name in node.attrsMap) {\r\n-                if (dirRE.test(name)) {\r\n-                    var value = node.attrsMap[name];\r\n-                    if (value) {\r\n-                        var range = node.rawAttrsMap[name];\r\n-                        if (name === 'v-for') {\r\n-                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else if (onRE.test(name)) {\r\n-                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else {\r\n-                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0; i \u003C node.children.length; i++) {\r\n-                    checkNode(node.children[i], warn);\r\n-                }\r\n-            }\r\n-        } else if (node.type === 2) {\r\n-            checkExpression(node.expression, node.text, warn, node);\r\n-        }\r\n-    }\r\n-\r\n-    function checkEvent (exp, text, warn, range) {\r\n-        var stipped = exp.replace(stripStringRE, '');\r\n-        var keywordMatch = stipped.match(unaryOperatorsRE);\r\n-        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\r\n-            warn(\r\n-                \"avoid using JavaScript unary operator as property name: \" +\r\n-                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\r\n-                range\r\n-            );\r\n-        }\r\n-        checkExpression(exp, text, warn, range);\r\n-    }\r\n-\r\n-    function checkFor (node, text, warn, range) {\r\n-        checkExpression(node.for || '', text, warn, range);\r\n-        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\r\n-        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\r\n-        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\r\n-    }\r\n-\r\n-    function checkIdentifier (\r\n-        ident,\r\n-        type,\r\n-        text,\r\n-        warn,\r\n-        range\r\n-    ) {\r\n-        if (typeof ident === 'string') {\r\n-            try {\r\n-                new Function((\"var \" + ident + \"=_\"));\r\n-            } catch (e) {\r\n-                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkExpression (exp, text, warn, range) {\r\n-        try {\r\n-            new Function((\"return \" + exp));\r\n-        } catch (e) {\r\n-            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\r\n-            if (keywordMatch) {\r\n-                warn(\r\n-                    \"avoid using JavaScript keyword as property name: \" +\r\n-                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\r\n-                    range\r\n-                );\r\n-            } else {\r\n-                warn(\r\n-                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\r\n-                    \"    \" + exp + \"\\n\\n\" +\r\n-                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\r\n-                    range\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var range = 2;\r\n-\r\n-    function generateCodeFrame (\r\n-        source,\r\n-        start,\r\n-        end\r\n-    ) {\r\n-        if ( start === void 0 ) start = 0;\r\n-        if ( end === void 0 ) end = source.length;\r\n-\r\n-        var lines = source.split(\u002F\\r?\\n\u002F);\r\n-        var count = 0;\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C lines.length; i++) {\r\n-            count += lines[i].length + 1;\r\n-            if (count >= start) {\r\n-                for (var j = i - range; j \u003C= i + range || end > count; j++) {\r\n-                    if (j \u003C 0 || j >= lines.length) { continue }\r\n-                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\r\n-                    var lineLength = lines[j].length;\r\n-                    if (j === i) {\r\n-                        \u002F\u002F push underline\r\n-                        var pad = start - (count - lineLength) + 1;\r\n-                        var length = end > count ? lineLength - pad : end - start;\r\n-                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\r\n-                    } else if (j > i) {\r\n-                        if (end > count) {\r\n-                            var length$1 = Math.min(end - count, lineLength);\r\n-                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\r\n-                        }\r\n-                        count += lineLength + 1;\r\n-                    }\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-        return res.join('\\n')\r\n-    }\r\n-\r\n-    function repeat$1 (str, n) {\r\n-        var result = '';\r\n-        if (n > 0) {\r\n-            while (true) { \u002F\u002F eslint-disable-line\r\n-                if (n & 1) { result += str; }\r\n-                n >>>= 1;\r\n-                if (n \u003C= 0) { break }\r\n-                str += str;\r\n-            }\r\n-        }\r\n-        return result\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function createFunction (code, errors) {\r\n-        try {\r\n-            return new Function(code)\r\n-        } catch (err) {\r\n-            errors.push({ err: err, code: code });\r\n-            return noop\r\n-        }\r\n-    }\r\n-\r\n-    function createCompileToFunctionFn (compile) {\r\n-        var cache = Object.create(null);\r\n-\r\n-        return function compileToFunctions (\r\n-            template,\r\n-            options,\r\n-            vm\r\n-        ) {\r\n-            options = extend({}, options);\r\n-            var warn$$1 = options.warn || warn;\r\n-            delete options.warn;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                \u002F\u002F detect possible CSP restriction\r\n-                try {\r\n-                    new Function('return 1');\r\n-                } catch (e) {\r\n-                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\r\n-                        warn$$1(\r\n-                            'It seems you are using the standalone build of Vue.js in an ' +\r\n-                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\r\n-                            'The template compiler cannot work in this environment. Consider ' +\r\n-                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\r\n-                            'templates into render functions.'\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F check cache\r\n-            var key = options.delimiters\r\n-                ? String(options.delimiters) + template\r\n-                : template;\r\n-            if (cache[key]) {\r\n-                return cache[key]\r\n-            }\r\n-\r\n-            \u002F\u002F compile\r\n-            var compiled = compile(template, options);\r\n-\r\n-            \u002F\u002F check compilation errors\u002Ftips\r\n-            {\r\n-                if (compiled.errors && compiled.errors.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.errors.forEach(function (e) {\r\n-                            warn$$1(\r\n-                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\r\n-                                generateCodeFrame(template, e.start, e.end),\r\n-                                vm\r\n-                            );\r\n-                        });\r\n-                    } else {\r\n-                        warn$$1(\r\n-                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\r\n-                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                }\r\n-                if (compiled.tips && compiled.tips.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\r\n-                    } else {\r\n-                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F turn code into functions\r\n-            var res = {};\r\n-            var fnGenErrors = [];\r\n-            res.render = createFunction(compiled.render, fnGenErrors);\r\n-            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\r\n-                return createFunction(code, fnGenErrors)\r\n-            });\r\n-\r\n-            \u002F\u002F check function generation errors.\r\n-            \u002F\u002F this should only happen if there is a bug in the compiler itself.\r\n-            \u002F\u002F mostly for codegen development use\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\r\n-                    warn$$1(\r\n-                        \"Failed to generate render function:\\n\\n\" +\r\n-                        fnGenErrors.map(function (ref) {\r\n-                            var err = ref.err;\r\n-                            var code = ref.code;\r\n-\r\n-                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\r\n-                        }).join('\\n'),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-\r\n-            return (cache[key] = res)\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createCompilerCreator (baseCompile) {\r\n-        return function createCompiler (baseOptions) {\r\n-            function compile (\r\n-                template,\r\n-                options\r\n-            ) {\r\n-                var finalOptions = Object.create(baseOptions);\r\n-                var errors = [];\r\n-                var tips = [];\r\n-\r\n-                var warn = function (msg, range, tip) {\r\n-                    (tip ? tips : errors).push(msg);\r\n-                };\r\n-\r\n-                if (options) {\r\n-                    if (options.outputSourceRange) {\r\n-                        \u002F\u002F $flow-disable-line\r\n-                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\r\n-\r\n-                        warn = function (msg, range, tip) {\r\n-                            var data = { msg: msg };\r\n-                            if (range) {\r\n-                                if (range.start != null) {\r\n-                                    data.start = range.start + leadingSpaceLength;\r\n-                                }\r\n-                                if (range.end != null) {\r\n-                                    data.end = range.end + leadingSpaceLength;\r\n-                                }\r\n-                            }\r\n-                            (tip ? tips : errors).push(data);\r\n-                        };\r\n-                    }\r\n-                    \u002F\u002F merge custom modules\r\n-                    if (options.modules) {\r\n-                        finalOptions.modules =\r\n-                            (baseOptions.modules || []).concat(options.modules);\r\n-                    }\r\n-                    \u002F\u002F merge custom directives\r\n-                    if (options.directives) {\r\n-                        finalOptions.directives = extend(\r\n-                            Object.create(baseOptions.directives || null),\r\n-                            options.directives\r\n-                        );\r\n-                    }\r\n-                    \u002F\u002F copy other options\r\n-                    for (var key in options) {\r\n-                        if (key !== 'modules' && key !== 'directives') {\r\n-                            finalOptions[key] = options[key];\r\n-                        }\r\n-                    }\r\n-                }\r\n-\r\n-                finalOptions.warn = warn;\r\n-\r\n-                var compiled = baseCompile(template.trim(), finalOptions);\r\n-                {\r\n-                    detectErrors(compiled.ast, warn);\r\n-                }\r\n-                compiled.errors = errors;\r\n-                compiled.tips = tips;\r\n-                return compiled\r\n-            }\r\n-\r\n-            return {\r\n-                compile: compile,\r\n-                compileToFunctions: createCompileToFunctionFn(compile)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\r\n-    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\r\n-    \u002F\u002F Here we just export a default compiler using the default parts.\r\n-    var createCompiler = createCompilerCreator(function baseCompile (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        var ast = parse(template.trim(), options);\r\n-        if (options.optimize !== false) {\r\n-            optimize(ast, options);\r\n-        }\r\n-        var code = generate(ast, options);\r\n-        return {\r\n-            ast: ast,\r\n-            render: code.render,\r\n-            staticRenderFns: code.staticRenderFns\r\n-        }\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref$1 = createCompiler(baseOptions);\r\n-    var compile = ref$1.compile;\r\n-    var compileToFunctions = ref$1.compileToFunctions;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F check whether current browser encodes a char inside attribute values\r\n-    var div;\r\n-    function getShouldDecode (href) {\r\n-        div = div || document.createElement('div');\r\n-        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\r\n-        return div.innerHTML.indexOf('&#10;') > 0\r\n-    }\r\n-\r\n-    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\r\n-    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\r\n-    \u002F\u002F #6828: chrome encodes content in a[href]\r\n-    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var idToTemplate = cached(function (id) {\r\n-        var el = query(id);\r\n-        return el && el.innerHTML\r\n-    });\r\n-\r\n-    var mount = Vue.prototype.$mount;\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && query(el);\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (el === document.body || el === document.documentElement) {\r\n-            warn(\r\n-                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\r\n-            );\r\n-            return this\r\n-        }\r\n-\r\n-        var options = this.$options;\r\n-        \u002F\u002F resolve template\u002Fel and convert to render function\r\n-        if (!options.render) {\r\n-            var template = options.template;\r\n-            if (template) {\r\n-                if (typeof template === 'string') {\r\n-                    if (template.charAt(0) === '#') {\r\n-                        template = idToTemplate(template);\r\n-                      \u002F* istanbul ignore if *\u002F\r\n-                        if (!template) {\r\n-                            warn(\r\n-                                (\"Template element not found or is empty: \" + (options.template)),\r\n-                                this\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                } else if (template.nodeType) {\r\n-                    template = template.innerHTML;\r\n-                } else {\r\n-                    {\r\n-                        warn('invalid template option:' + template, this);\r\n-                    }\r\n-                    return this\r\n-                }\r\n-            } else if (el) {\r\n-                template = getOuterHTML(el);\r\n-            }\r\n-            if (template) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile');\r\n-                }\r\n-\r\n-                var ref = compileToFunctions(template, {\r\n-                    outputSourceRange: \"development\" !== 'production',\r\n-                    shouldDecodeNewlines: shouldDecodeNewlines,\r\n-                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\r\n-                    delimiters: options.delimiters,\r\n-                    comments: options.comments\r\n-                }, this);\r\n-                var render = ref.render;\r\n-                var staticRenderFns = ref.staticRenderFns;\r\n-                options.render = render;\r\n-                options.staticRenderFns = staticRenderFns;\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile end');\r\n-                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\r\n-                }\r\n-            }\r\n-        }\r\n-        return mount.call(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Get outerHTML of elements, taking care\r\n-     * of SVG elements in IE as well.\r\n-     *\u002F\r\n-    function getOuterHTML (el) {\r\n-        if (el.outerHTML) {\r\n-            return el.outerHTML\r\n-        } else {\r\n-            var container = document.createElement('div');\r\n-            container.appendChild(el.cloneNode(true));\r\n-            return container.innerHTML\r\n-        }\r\n-    }\r\n-\r\n-    Vue.compile = compileToFunctions;\r\n-\r\n-    return Vue;\r\n-\r\n+\u002F*!\n+ * Vue.js v2.6.10\n+ * (c) 2014-2019 Evan You\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vue = factory());\n+}(this, function () { 'use strict';\n+\n+  \u002F*  *\u002F\n+\n+    var emptyObject = Object.freeze({});\n+\n+    \u002F\u002F These helpers produce better VM code in JS engines due to their\n+    \u002F\u002F explicitness and function inlining.\n+    function isUndef (v) {\n+        return v === undefined || v === null\n+    }\n+\n+    function isDef (v) {\n+        return v !== undefined && v !== null\n+    }\n+\n+    function isTrue (v) {\n+        return v === true\n+    }\n+\n+    function isFalse (v) {\n+        return v === false\n+    }\n+\n+    \u002F**\n+     * Check if value is primitive.\n+     *\u002F\n+    function isPrimitive (value) {\n+        return (\n+            typeof value === 'string' ||\n+            typeof value === 'number' ||\n+            \u002F\u002F $flow-disable-line\n+            typeof value === 'symbol' ||\n+            typeof value === 'boolean'\n+        )\n+    }\n+\n+    \u002F**\n+     * Quick object check - this is primarily used to tell\n+     * Objects from primitive values when we know the value\n+     * is a JSON-compliant type.\n+     *\u002F\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    \u002F**\n+     * Get the raw type string of a value, e.g., [object Object].\n+     *\u002F\n+    var _toString = Object.prototype.toString;\n+\n+    function toRawType (value) {\n+        return _toString.call(value).slice(8, -1)\n+    }\n+\n+    \u002F**\n+     * Strict object type check. Only returns true\n+     * for plain JavaScript objects.\n+     *\u002F\n+    function isPlainObject (obj) {\n+        return _toString.call(obj) === '[object Object]'\n+    }\n+\n+    function isRegExp (v) {\n+        return _toString.call(v) === '[object RegExp]'\n+    }\n+\n+    \u002F**\n+     * Check if val is a valid array index.\n+     *\u002F\n+    function isValidArrayIndex (val) {\n+        var n = parseFloat(String(val));\n+        return n >= 0 && Math.floor(n) === n && isFinite(val)\n+    }\n+\n+    function isPromise (val) {\n+        return (\n+            isDef(val) &&\n+            typeof val.then === 'function' &&\n+            typeof val.catch === 'function'\n+        )\n+    }\n+\n+    \u002F**\n+     * Convert a value to a string that is actually rendered.\n+     *\u002F\n+    function toString (val) {\n+        return val == null\n+            ? ''\n+            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n+                ? JSON.stringify(val, null, 2)\n+                : String(val)\n+    }\n+\n+    \u002F**\n+     * Convert an input value to a number for persistence.\n+     * If the conversion fails, return original string.\n+     *\u002F\n+    function toNumber (val) {\n+        var n = parseFloat(val);\n+        return isNaN(n) ? val : n\n+    }\n+\n+    \u002F**\n+     * Make a map and return a function for checking if a key\n+     * is in that map.\n+     *\u002F\n+    function makeMap (\n+        str,\n+        expectsLowerCase\n+    ) {\n+        var map = Object.create(null);\n+        var list = str.split(',');\n+        for (var i = 0; i \u003C list.length; i++) {\n+            map[list[i]] = true;\n+        }\n+        return expectsLowerCase\n+            ? function (val) { return map[val.toLowerCase()]; }\n+            : function (val) { return map[val]; }\n+    }\n+\n+    \u002F**\n+     * Check if a tag is a built-in tag.\n+     *\u002F\n+    var isBuiltInTag = makeMap('slot,component', true);\n+\n+    \u002F**\n+     * Check if an attribute is a reserved attribute.\n+     *\u002F\n+    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n+\n+    \u002F**\n+     * Remove an item from an array.\n+     *\u002F\n+    function remove (arr, item) {\n+        if (arr.length) {\n+            var index = arr.indexOf(item);\n+            if (index > -1) {\n+                return arr.splice(index, 1)\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Check whether an object has the property.\n+     *\u002F\n+    var hasOwnProperty = Object.prototype.hasOwnProperty;\n+    function hasOwn (obj, key) {\n+        return hasOwnProperty.call(obj, key)\n+    }\n+\n+    \u002F**\n+     * Create a cached version of a pure function.\n+     *\u002F\n+    function cached (fn) {\n+        var cache = Object.create(null);\n+        return (function cachedFn (str) {\n+            var hit = cache[str];\n+            return hit || (cache[str] = fn(str))\n+        })\n+    }\n+\n+    \u002F**\n+     * Camelize a hyphen-delimited string.\n+     *\u002F\n+    var camelizeRE = \u002F-(\\w)\u002Fg;\n+    var camelize = cached(function (str) {\n+        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n+    });\n+\n+    \u002F**\n+     * Capitalize a string.\n+     *\u002F\n+    var capitalize = cached(function (str) {\n+        return str.charAt(0).toUpperCase() + str.slice(1)\n+    });\n+\n+    \u002F**\n+     * Hyphenate a camelCase string.\n+     *\u002F\n+    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\n+    var hyphenate = cached(function (str) {\n+        return str.replace(hyphenateRE, '-$1').toLowerCase()\n+    });\n+\n+    \u002F**\n+     * Simple bind polyfill for environments that do not support it,\n+     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n+     * since native bind is now performant enough in most browsers.\n+     * But removing it would mean breaking code that was able to run in\n+     * PhantomJS 1.x, so this must be kept for backward compatibility.\n+     *\u002F\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function polyfillBind (fn, ctx) {\n+        function boundFn (a) {\n+            var l = arguments.length;\n+            return l\n+                ? l > 1\n+                    ? fn.apply(ctx, arguments)\n+                    : fn.call(ctx, a)\n+                : fn.call(ctx)\n+        }\n+\n+        boundFn._length = fn.length;\n+        return boundFn\n+    }\n+\n+    function nativeBind (fn, ctx) {\n+        return fn.bind(ctx)\n+    }\n+\n+    var bind = Function.prototype.bind\n+        ? nativeBind\n+        : polyfillBind;\n+\n+    \u002F**\n+     * Convert an Array-like object to a real Array.\n+     *\u002F\n+    function toArray (list, start) {\n+        start = start || 0;\n+        var i = list.length - start;\n+        var ret = new Array(i);\n+        while (i--) {\n+            ret[i] = list[i + start];\n+        }\n+        return ret\n+    }\n+\n+    \u002F**\n+     * Mix properties into target object.\n+     *\u002F\n+    function extend (to, _from) {\n+        for (var key in _from) {\n+            to[key] = _from[key];\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Merge an Array of Objects into a single Object.\n+     *\u002F\n+    function toObject (arr) {\n+        var res = {};\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (arr[i]) {\n+                extend(res, arr[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Perform no operation.\n+     * Stubbing args to make Flow happy without leaving useless transpiled code\n+     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\n+     *\u002F\n+    function noop (a, b, c) {}\n+\n+    \u002F**\n+     * Always return false.\n+     *\u002F\n+    var no = function (a, b, c) { return false; };\n+\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Return the same value.\n+     *\u002F\n+    var identity = function (_) { return _; };\n+\n+    \u002F**\n+     * Generate a string containing static keys from compiler modules.\n+     *\u002F\n+    function genStaticKeys (modules) {\n+        return modules.reduce(function (keys, m) {\n+            return keys.concat(m.staticKeys || [])\n+        }, []).join(',')\n+    }\n+\n+    \u002F**\n+     * Check if two values are loosely equal - that is,\n+     * if they are plain objects, do they have the same shape?\n+     *\u002F\n+    function looseEqual (a, b) {\n+        if (a === b) { return true }\n+        var isObjectA = isObject(a);\n+        var isObjectB = isObject(b);\n+        if (isObjectA && isObjectB) {\n+            try {\n+                var isArrayA = Array.isArray(a);\n+                var isArrayB = Array.isArray(b);\n+                if (isArrayA && isArrayB) {\n+                    return a.length === b.length && a.every(function (e, i) {\n+                            return looseEqual(e, b[i])\n+                        })\n+                } else if (a instanceof Date && b instanceof Date) {\n+                    return a.getTime() === b.getTime()\n+                } else if (!isArrayA && !isArrayB) {\n+                    var keysA = Object.keys(a);\n+                    var keysB = Object.keys(b);\n+                    return keysA.length === keysB.length && keysA.every(function (key) {\n+                            return looseEqual(a[key], b[key])\n+                        })\n+                } else {\n+                  \u002F* istanbul ignore next *\u002F\n+                    return false\n+                }\n+            } catch (e) {\n+              \u002F* istanbul ignore next *\u002F\n+                return false\n+            }\n+        } else if (!isObjectA && !isObjectB) {\n+            return String(a) === String(b)\n+        } else {\n+            return false\n+        }\n+    }\n+\n+    \u002F**\n+     * Return the first index at which a loosely equal value can be\n+     * found in the array (if value is a plain object, the array must\n+     * contain an object of the same shape), or -1 if it is not present.\n+     *\u002F\n+    function looseIndexOf (arr, val) {\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (looseEqual(arr[i], val)) { return i }\n+        }\n+        return -1\n+    }\n+\n+    \u002F**\n+     * Ensure a function is called only once.\n+     *\u002F\n+    function once (fn) {\n+        var called = false;\n+        return function () {\n+            if (!called) {\n+                called = true;\n+                fn.apply(this, arguments);\n+            }\n+        }\n+    }\n+\n+    var SSR_ATTR = 'data-server-rendered';\n+\n+    var ASSET_TYPES = [\n+        'component',\n+        'directive',\n+        'filter'\n+    ];\n+\n+    var LIFECYCLE_HOOKS = [\n+        'beforeCreate',\n+        'created',\n+        'beforeMount',\n+        'mounted',\n+        'beforeUpdate',\n+        'updated',\n+        'beforeDestroy',\n+        'destroyed',\n+        'activated',\n+        'deactivated',\n+        'errorCaptured',\n+        'serverPrefetch'\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var config = ({\n+        \u002F**\n+         * Option merge strategies (used in core\u002Futil\u002Foptions)\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        optionMergeStrategies: Object.create(null),\n+\n+        \u002F**\n+         * Whether to suppress warnings.\n+         *\u002F\n+        silent: false,\n+\n+        \u002F**\n+         * Show production mode tip message on boot?\n+         *\u002F\n+        productionTip: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to enable devtools\n+         *\u002F\n+        devtools: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to record perf\n+         *\u002F\n+        performance: false,\n+\n+        \u002F**\n+         * Error handler for watcher errors\n+         *\u002F\n+        errorHandler: null,\n+\n+        \u002F**\n+         * Warn handler for watcher warns\n+         *\u002F\n+        warnHandler: null,\n+\n+        \u002F**\n+         * Ignore certain custom elements\n+         *\u002F\n+        ignoredElements: [],\n+\n+        \u002F**\n+         * Custom user key aliases for v-on\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        keyCodes: Object.create(null),\n+\n+        \u002F**\n+         * Check if a tag is reserved so that it cannot be registered as a\n+         * component. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedTag: no,\n+\n+        \u002F**\n+         * Check if an attribute is reserved so that it cannot be used as a component\n+         * prop. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedAttr: no,\n+\n+        \u002F**\n+         * Check if a tag is an unknown element.\n+         * Platform-dependent.\n+         *\u002F\n+        isUnknownElement: no,\n+\n+        \u002F**\n+         * Get the namespace of an element\n+         *\u002F\n+        getTagNamespace: noop,\n+\n+        \u002F**\n+         * Parse the real tag name for the specific platform.\n+         *\u002F\n+        parsePlatformTagName: identity,\n+\n+        \u002F**\n+         * Check if an attribute must be bound using property, e.g. value\n+         * Platform-dependent.\n+         *\u002F\n+        mustUseProp: no,\n+\n+        \u002F**\n+         * Perform updates asynchronously. Intended to be used by Vue Test Utils\n+         * This will significantly reduce performance if set to false.\n+         *\u002F\n+        async: true,\n+\n+        \u002F**\n+         * Exposed for legacy reasons\n+         *\u002F\n+        _lifecycleHooks: LIFECYCLE_HOOKS\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * unicode letters used for parsing html tags, component names and property paths.\n+     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\n+     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n+     *\u002F\n+    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\n+\n+    \u002F**\n+     * Check if a string starts with $ or _\n+     *\u002F\n+    function isReserved (str) {\n+        var c = (str + '').charCodeAt(0);\n+        return c === 0x24 || c === 0x5F\n+    }\n+\n+    \u002F**\n+     * Define a property.\n+     *\u002F\n+    function def (obj, key, val, enumerable) {\n+        Object.defineProperty(obj, key, {\n+            value: val,\n+            enumerable: !!enumerable,\n+            writable: true,\n+            configurable: true\n+        });\n+    }\n+\n+    \u002F**\n+     * Parse simple path.\n+     *\u002F\n+    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\n+    function parsePath (path) {\n+        if (bailRE.test(path)) {\n+            return\n+        }\n+        var segments = path.split('.');\n+        return function (obj) {\n+            for (var i = 0; i \u003C segments.length; i++) {\n+                if (!obj) { return }\n+                obj = obj[segments[i]];\n+            }\n+            return obj\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F can we use __proto__?\n+    var hasProto = '__proto__' in {};\n+\n+    \u002F\u002F Browser environment sniffing\n+    var inBrowser = typeof window !== 'undefined';\n+    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\n+    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\n+    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n+    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\n+    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n+    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\n+    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\n+    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\n+    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\n+    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\n+    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\n+\n+    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\n+    var nativeWatch = ({}).watch;\n+\n+    var supportsPassive = false;\n+    if (inBrowser) {\n+        try {\n+            var opts = {};\n+            Object.defineProperty(opts, 'passive', ({\n+                get: function get () {\n+                  \u002F* istanbul ignore next *\u002F\n+                    supportsPassive = true;\n+                }\n+            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\n+            window.addEventListener('test-passive', null, opts);\n+        } catch (e) {}\n+    }\n+\n+    \u002F\u002F this needs to be lazy-evaled because vue may be required before\n+    \u002F\u002F vue-server-renderer can set VUE_ENV\n+    var _isServer;\n+    var isServerRendering = function () {\n+        if (_isServer === undefined) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n+                \u002F\u002F detect presence of vue-server-renderer and avoid\n+                \u002F\u002F Webpack shimming the process\n+                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n+            } else {\n+                _isServer = false;\n+            }\n+        }\n+        return _isServer\n+    };\n+\n+    \u002F\u002F detect devtools\n+    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function isNative (Ctor) {\n+        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\n+    }\n+\n+    var hasSymbol =\n+        typeof Symbol !== 'undefined' && isNative(Symbol) &&\n+        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n+\n+    var _Set;\n+  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\n+    if (typeof Set !== 'undefined' && isNative(Set)) {\n+        \u002F\u002F use native Set when available.\n+        _Set = Set;\n+    } else {\n+        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\n+        _Set = \u002F*@__PURE__*\u002F(function () {\n+            function Set () {\n+                this.set = Object.create(null);\n+            }\n+            Set.prototype.has = function has (key) {\n+                return this.set[key] === true\n+            };\n+            Set.prototype.add = function add (key) {\n+                this.set[key] = true;\n+            };\n+            Set.prototype.clear = function clear () {\n+                this.set = Object.create(null);\n+            };\n+\n+            return Set;\n+        }());\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn = noop;\n+    var tip = noop;\n+    var generateComponentTrace = (noop); \u002F\u002F work around flow check\n+    var formatComponentName = (noop);\n+\n+    {\n+        var hasConsole = typeof console !== 'undefined';\n+        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\n+        var classify = function (str) { return str\n+            .replace(classifyRE, function (c) { return c.toUpperCase(); })\n+            .replace(\u002F[-_]\u002Fg, ''); };\n+\n+        warn = function (msg, vm) {\n+            var trace = vm ? generateComponentTrace(vm) : '';\n+\n+            if (config.warnHandler) {\n+                config.warnHandler.call(null, msg, vm, trace);\n+            } else if (hasConsole && (!config.silent)) {\n+                console.error((\"[Vue warn]: \" + msg + trace));\n+            }\n+        };\n+\n+        tip = function (msg, vm) {\n+            if (hasConsole && (!config.silent)) {\n+                console.warn(\"[Vue tip]: \" + msg + (\n+                        vm ? generateComponentTrace(vm) : ''\n+                    ));\n+            }\n+        };\n+\n+        formatComponentName = function (vm, includeFile) {\n+            if (vm.$root === vm) {\n+                return '\u003CRoot>'\n+            }\n+            var options = typeof vm === 'function' && vm.cid != null\n+                ? vm.options\n+                : vm._isVue\n+                    ? vm.$options || vm.constructor.options\n+                    : vm;\n+            var name = options.name || options._componentTag;\n+            var file = options.__file;\n+            if (!name && file) {\n+                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\n+                name = match && match[1];\n+            }\n+\n+            return (\n+                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\n+                (file && includeFile !== false ? (\" at \" + file) : '')\n+            )\n+        };\n+\n+        var repeat = function (str, n) {\n+            var res = '';\n+            while (n) {\n+                if (n % 2 === 1) { res += str; }\n+                if (n > 1) { str += str; }\n+                n >>= 1;\n+            }\n+            return res\n+        };\n+\n+        generateComponentTrace = function (vm) {\n+            if (vm._isVue && vm.$parent) {\n+                var tree = [];\n+                var currentRecursiveSequence = 0;\n+                while (vm) {\n+                    if (tree.length > 0) {\n+                        var last = tree[tree.length - 1];\n+                        if (last.constructor === vm.constructor) {\n+                            currentRecursiveSequence++;\n+                            vm = vm.$parent;\n+                            continue\n+                        } else if (currentRecursiveSequence > 0) {\n+                            tree[tree.length - 1] = [last, currentRecursiveSequence];\n+                            currentRecursiveSequence = 0;\n+                        }\n+                    }\n+                    tree.push(vm);\n+                    vm = vm.$parent;\n+                }\n+                return '\\n\\nfound in\\n\\n' + tree\n+                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n+                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n+                            : formatComponentName(vm))); })\n+                        .join('\\n')\n+            } else {\n+                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid = 0;\n+\n+    \u002F**\n+     * A dep is an observable that can have multiple\n+     * directives subscribing to it.\n+     *\u002F\n+    var Dep = function Dep () {\n+        this.id = uid++;\n+        this.subs = [];\n+    };\n+\n+    Dep.prototype.addSub = function addSub (sub) {\n+        this.subs.push(sub);\n+    };\n+\n+    Dep.prototype.removeSub = function removeSub (sub) {\n+        remove(this.subs, sub);\n+    };\n+\n+    Dep.prototype.depend = function depend () {\n+        if (Dep.target) {\n+            Dep.target.addDep(this);\n+        }\n+    };\n+\n+    Dep.prototype.notify = function notify () {\n+        \u002F\u002F stabilize the subscriber list first\n+        var subs = this.subs.slice();\n+        if (!config.async) {\n+            \u002F\u002F subs aren't sorted in scheduler if not running async\n+            \u002F\u002F we need to sort them now to make sure they fire in correct\n+            \u002F\u002F order\n+            subs.sort(function (a, b) { return a.id - b.id; });\n+        }\n+        for (var i = 0, l = subs.length; i \u003C l; i++) {\n+            subs[i].update();\n+        }\n+    };\n+\n+    \u002F\u002F The current target watcher being evaluated.\n+    \u002F\u002F This is globally unique because only one watcher\n+    \u002F\u002F can be evaluated at a time.\n+    Dep.target = null;\n+    var targetStack = [];\n+\n+    function pushTarget (target) {\n+        targetStack.push(target);\n+        Dep.target = target;\n+    }\n+\n+    function popTarget () {\n+        targetStack.pop();\n+        Dep.target = targetStack[targetStack.length - 1];\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var VNode = function VNode (\n+        tag,\n+        data,\n+        children,\n+        text,\n+        elm,\n+        context,\n+        componentOptions,\n+        asyncFactory\n+    ) {\n+        this.tag = tag;\n+        this.data = data;\n+        this.children = children;\n+        this.text = text;\n+        this.elm = elm;\n+        this.ns = undefined;\n+        this.context = context;\n+        this.fnContext = undefined;\n+        this.fnOptions = undefined;\n+        this.fnScopeId = undefined;\n+        this.key = data && data.key;\n+        this.componentOptions = componentOptions;\n+        this.componentInstance = undefined;\n+        this.parent = undefined;\n+        this.raw = false;\n+        this.isStatic = false;\n+        this.isRootInsert = true;\n+        this.isComment = false;\n+        this.isCloned = false;\n+        this.isOnce = false;\n+        this.asyncFactory = asyncFactory;\n+        this.asyncMeta = undefined;\n+        this.isAsyncPlaceholder = false;\n+    };\n+\n+    var prototypeAccessors = { child: { configurable: true } };\n+\n+    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\n+  \u002F* istanbul ignore next *\u002F\n+    prototypeAccessors.child.get = function () {\n+        return this.componentInstance\n+    };\n+\n+    Object.defineProperties( VNode.prototype, prototypeAccessors );\n+\n+    var createEmptyVNode = function (text) {\n+        if ( text === void 0 ) text = '';\n+\n+        var node = new VNode();\n+        node.text = text;\n+        node.isComment = true;\n+        return node\n+    };\n+\n+    function createTextVNode (val) {\n+        return new VNode(undefined, undefined, undefined, String(val))\n+    }\n+\n+    \u002F\u002F optimized shallow clone\n+    \u002F\u002F used for static nodes and slot nodes because they may be reused across\n+    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\n+    \u002F\u002F on their elm reference.\n+    function cloneVNode (vnode) {\n+        var cloned = new VNode(\n+            vnode.tag,\n+            vnode.data,\n+            \u002F\u002F #7975\n+            \u002F\u002F clone children array to avoid mutating original in case of cloning\n+            \u002F\u002F a child.\n+            vnode.children && vnode.children.slice(),\n+            vnode.text,\n+            vnode.elm,\n+            vnode.context,\n+            vnode.componentOptions,\n+            vnode.asyncFactory\n+        );\n+        cloned.ns = vnode.ns;\n+        cloned.isStatic = vnode.isStatic;\n+        cloned.key = vnode.key;\n+        cloned.isComment = vnode.isComment;\n+        cloned.fnContext = vnode.fnContext;\n+        cloned.fnOptions = vnode.fnOptions;\n+        cloned.fnScopeId = vnode.fnScopeId;\n+        cloned.asyncMeta = vnode.asyncMeta;\n+        cloned.isCloned = true;\n+        return cloned\n+    }\n+\n+  \u002F*\n+   * not type checking this file because flow doesn't play well with\n+   * dynamically accessing methods on Array prototype\n+   *\u002F\n+\n+    var arrayProto = Array.prototype;\n+    var arrayMethods = Object.create(arrayProto);\n+\n+    var methodsToPatch = [\n+        'push',\n+        'pop',\n+        'shift',\n+        'unshift',\n+        'splice',\n+        'sort',\n+        'reverse'\n+    ];\n+\n+    \u002F**\n+     * Intercept mutating methods and emit events\n+     *\u002F\n+    methodsToPatch.forEach(function (method) {\n+        \u002F\u002F cache original method\n+        var original = arrayProto[method];\n+        def(arrayMethods, method, function mutator () {\n+            var args = [], len = arguments.length;\n+            while ( len-- ) args[ len ] = arguments[ len ];\n+\n+            var result = original.apply(this, args);\n+            var ob = this.__ob__;\n+            var inserted;\n+            switch (method) {\n+                case 'push':\n+                case 'unshift':\n+                    inserted = args;\n+                    break\n+                case 'splice':\n+                    inserted = args.slice(2);\n+                    break\n+            }\n+            if (inserted) { ob.observeArray(inserted); }\n+            \u002F\u002F notify change\n+            ob.dep.notify();\n+            return result\n+        });\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n+\n+    \u002F**\n+     * In some cases we may want to disable observation inside a component's\n+     * update computation.\n+     *\u002F\n+    var shouldObserve = true;\n+\n+    function toggleObserving (value) {\n+        shouldObserve = value;\n+    }\n+\n+    \u002F**\n+     * Observer class that is attached to each observed\n+     * object. Once attached, the observer converts the target\n+     * object's property keys into getter\u002Fsetters that\n+     * collect dependencies and dispatch updates.\n+     *\u002F\n+    var Observer = function Observer (value) {\n+        this.value = value;\n+        this.dep = new Dep();\n+        this.vmCount = 0;\n+        def(value, '__ob__', this);\n+        if (Array.isArray(value)) {\n+            if (hasProto) {\n+                protoAugment(value, arrayMethods);\n+            } else {\n+                copyAugment(value, arrayMethods, arrayKeys);\n+            }\n+            this.observeArray(value);\n+        } else {\n+            this.walk(value);\n+        }\n+    };\n+\n+    \u002F**\n+     * Walk through all properties and convert them into\n+     * getter\u002Fsetters. This method should only be called when\n+     * value type is Object.\n+     *\u002F\n+    Observer.prototype.walk = function walk (obj) {\n+        var keys = Object.keys(obj);\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            defineReactive$$1(obj, keys[i]);\n+        }\n+    };\n+\n+    \u002F**\n+     * Observe a list of Array items.\n+     *\u002F\n+    Observer.prototype.observeArray = function observeArray (items) {\n+        for (var i = 0, l = items.length; i \u003C l; i++) {\n+            observe(items[i]);\n+        }\n+    };\n+\n+    \u002F\u002F helpers\n+\n+    \u002F**\n+     * Augment a target Object or Array by intercepting\n+     * the prototype chain using __proto__\n+     *\u002F\n+    function protoAugment (target, src) {\n+      \u002F* eslint-disable no-proto *\u002F\n+        target.__proto__ = src;\n+      \u002F* eslint-enable no-proto *\u002F\n+    }\n+\n+    \u002F**\n+     * Augment a target Object or Array by defining\n+     * hidden properties.\n+     *\u002F\n+  \u002F* istanbul ignore next *\u002F\n+    function copyAugment (target, src, keys) {\n+        for (var i = 0, l = keys.length; i \u003C l; i++) {\n+            var key = keys[i];\n+            def(target, key, src[key]);\n+        }\n+    }\n+\n+    \u002F**\n+     * Attempt to create an observer instance for a value,\n+     * returns the new observer if successfully observed,\n+     * or the existing observer if the value already has one.\n+     *\u002F\n+    function observe (value, asRootData) {\n+        if (!isObject(value) || value instanceof VNode) {\n+            return\n+        }\n+        var ob;\n+        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n+            ob = value.__ob__;\n+        } else if (\n+            shouldObserve &&\n+            !isServerRendering() &&\n+            (Array.isArray(value) || isPlainObject(value)) &&\n+            Object.isExtensible(value) &&\n+            !value._isVue\n+        ) {\n+            ob = new Observer(value);\n+        }\n+        if (asRootData && ob) {\n+            ob.vmCount++;\n+        }\n+        return ob\n+    }\n+\n+    \u002F**\n+     * Define a reactive property on an Object.\n+     *\u002F\n+    function defineReactive$$1 (\n+        obj,\n+        key,\n+        val,\n+        customSetter,\n+        shallow\n+    ) {\n+        var dep = new Dep();\n+\n+        var property = Object.getOwnPropertyDescriptor(obj, key);\n+        if (property && property.configurable === false) {\n+            return\n+        }\n+\n+        \u002F\u002F cater for pre-defined getter\u002Fsetters\n+        var getter = property && property.get;\n+        var setter = property && property.set;\n+        if ((!getter || setter) && arguments.length === 2) {\n+            val = obj[key];\n+        }\n+\n+        var childOb = !shallow && observe(val);\n+        Object.defineProperty(obj, key, {\n+            enumerable: true,\n+            configurable: true,\n+            get: function reactiveGetter () {\n+                var value = getter ? getter.call(obj) : val;\n+                if (Dep.target) {\n+                    dep.depend();\n+                    if (childOb) {\n+                        childOb.dep.depend();\n+                        if (Array.isArray(value)) {\n+                            dependArray(value);\n+                        }\n+                    }\n+                }\n+                return value\n+            },\n+            set: function reactiveSetter (newVal) {\n+                var value = getter ? getter.call(obj) : val;\n+              \u002F* eslint-disable no-self-compare *\u002F\n+                if (newVal === value || (newVal !== newVal && value !== value)) {\n+                    return\n+                }\n+              \u002F* eslint-enable no-self-compare *\u002F\n+                if (customSetter) {\n+                    customSetter();\n+                }\n+                \u002F\u002F #7981: for accessor properties without setter\n+                if (getter && !setter) { return }\n+                if (setter) {\n+                    setter.call(obj, newVal);\n+                } else {\n+                    val = newVal;\n+                }\n+                childOb = !shallow && observe(newVal);\n+                dep.notify();\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * Set a property on an object. Adds the new property and\n+     * triggers change notification if the property doesn't\n+     * already exist.\n+     *\u002F\n+    function set (target, key, val) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.length = Math.max(target.length, key);\n+            target.splice(key, 1, val);\n+            return val\n+        }\n+        if (key in target && !(key in Object.prototype)) {\n+            target[key] = val;\n+            return val\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid adding reactive properties to a Vue instance or its root $data ' +\n+                'at runtime - declare it upfront in the data option.'\n+            );\n+            return val\n+        }\n+        if (!ob) {\n+            target[key] = val;\n+            return val\n+        }\n+        defineReactive$$1(ob.value, key, val);\n+        ob.dep.notify();\n+        return val\n+    }\n+\n+    \u002F**\n+     * Delete a property and trigger change if necessary.\n+     *\u002F\n+    function del (target, key) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.splice(key, 1);\n+            return\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid deleting properties on a Vue instance or its root $data ' +\n+                '- just set it to null.'\n+            );\n+            return\n+        }\n+        if (!hasOwn(target, key)) {\n+            return\n+        }\n+        delete target[key];\n+        if (!ob) {\n+            return\n+        }\n+        ob.dep.notify();\n+    }\n+\n+    \u002F**\n+     * Collect dependencies on array elements when the array is touched, since\n+     * we cannot intercept array element access like property getters.\n+     *\u002F\n+    function dependArray (value) {\n+        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\n+            e = value[i];\n+            e && e.__ob__ && e.__ob__.dep.depend();\n+            if (Array.isArray(e)) {\n+                dependArray(e);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Option overwriting strategies are functions that handle\n+     * how to merge a parent option value and a child option\n+     * value into the final value.\n+     *\u002F\n+    var strats = config.optionMergeStrategies;\n+\n+    \u002F**\n+     * Options with restrictions\n+     *\u002F\n+    {\n+        strats.el = strats.propsData = function (parent, child, vm, key) {\n+            if (!vm) {\n+                warn(\n+                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n+                    'creation with the `new` keyword.'\n+                );\n+            }\n+            return defaultStrat(parent, child)\n+        };\n+    }\n+\n+    \u002F**\n+     * Helper that recursively merges two data objects together.\n+     *\u002F\n+    function mergeData (to, from) {\n+        if (!from) { return to }\n+        var key, toVal, fromVal;\n+\n+        var keys = hasSymbol\n+            ? Reflect.ownKeys(from)\n+            : Object.keys(from);\n+\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            key = keys[i];\n+            \u002F\u002F in case the object is already observed...\n+            if (key === '__ob__') { continue }\n+            toVal = to[key];\n+            fromVal = from[key];\n+            if (!hasOwn(to, key)) {\n+                set(to, key, fromVal);\n+            } else if (\n+                toVal !== fromVal &&\n+                isPlainObject(toVal) &&\n+                isPlainObject(fromVal)\n+            ) {\n+                mergeData(toVal, fromVal);\n+            }\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Data\n+     *\u002F\n+    function mergeDataOrFn (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            \u002F\u002F in a Vue.extend merge, both should be functions\n+            if (!childVal) {\n+                return parentVal\n+            }\n+            if (!parentVal) {\n+                return childVal\n+            }\n+            \u002F\u002F when parentVal & childVal are both present,\n+            \u002F\u002F we need to return a function that returns the\n+            \u002F\u002F merged result of both functions... no need to\n+            \u002F\u002F check if parentVal is a function here because\n+            \u002F\u002F it has to be a function to pass previous merges.\n+            return function mergedDataFn () {\n+                return mergeData(\n+                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n+                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n+                )\n+            }\n+        } else {\n+            return function mergedInstanceDataFn () {\n+                \u002F\u002F instance merge\n+                var instanceData = typeof childVal === 'function'\n+                    ? childVal.call(vm, vm)\n+                    : childVal;\n+                var defaultData = typeof parentVal === 'function'\n+                    ? parentVal.call(vm, vm)\n+                    : parentVal;\n+                if (instanceData) {\n+                    return mergeData(instanceData, defaultData)\n+                } else {\n+                    return defaultData\n+                }\n+            }\n+        }\n+    }\n+\n+    strats.data = function (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            if (childVal && typeof childVal !== 'function') {\n+                warn(\n+                    'The \"data\" option should be a function ' +\n+                    'that returns a per-instance value in component ' +\n+                    'definitions.',\n+                    vm\n+                );\n+\n+                return parentVal\n+            }\n+            return mergeDataOrFn(parentVal, childVal)\n+        }\n+\n+        return mergeDataOrFn(parentVal, childVal, vm)\n+    };\n+\n+    \u002F**\n+     * Hooks and props are merged as arrays.\n+     *\u002F\n+    function mergeHook (\n+        parentVal,\n+        childVal\n+    ) {\n+        var res = childVal\n+            ? parentVal\n+                ? parentVal.concat(childVal)\n+                : Array.isArray(childVal)\n+                    ? childVal\n+                    : [childVal]\n+            : parentVal;\n+        return res\n+            ? dedupeHooks(res)\n+            : res\n+    }\n+\n+    function dedupeHooks (hooks) {\n+        var res = [];\n+        for (var i = 0; i \u003C hooks.length; i++) {\n+            if (res.indexOf(hooks[i]) === -1) {\n+                res.push(hooks[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+    LIFECYCLE_HOOKS.forEach(function (hook) {\n+        strats[hook] = mergeHook;\n+    });\n+\n+    \u002F**\n+     * Assets\n+     *\n+     * When a vm is present (instance creation), we need to do\n+     * a three-way merge between constructor options, instance\n+     * options and parent options.\n+     *\u002F\n+    function mergeAssets (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        var res = Object.create(parentVal || null);\n+        if (childVal) {\n+            assertObjectType(key, childVal, vm);\n+            return extend(res, childVal)\n+        } else {\n+            return res\n+        }\n+    }\n+\n+    ASSET_TYPES.forEach(function (type) {\n+        strats[type + 's'] = mergeAssets;\n+    });\n+\n+    \u002F**\n+     * Watchers.\n+     *\n+     * Watchers hashes should not overwrite one\n+     * another, so we merge them as arrays.\n+     *\u002F\n+    strats.watch = function (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        \u002F\u002F work around Firefox's Object.prototype.watch...\n+        if (parentVal === nativeWatch) { parentVal = undefined; }\n+        if (childVal === nativeWatch) { childVal = undefined; }\n+      \u002F* istanbul ignore if *\u002F\n+        if (!childVal) { return Object.create(parentVal || null) }\n+        {\n+            assertObjectType(key, childVal, vm);\n+        }\n+        if (!parentVal) { return childVal }\n+        var ret = {};\n+        extend(ret, parentVal);\n+        for (var key$1 in childVal) {\n+            var parent = ret[key$1];\n+            var child = childVal[key$1];\n+            if (parent && !Array.isArray(parent)) {\n+                parent = [parent];\n+            }\n+            ret[key$1] = parent\n+                ? parent.concat(child)\n+                : Array.isArray(child) ? child : [child];\n+        }\n+        return ret\n+    };\n+\n+    \u002F**\n+     * Other object hashes.\n+     *\u002F\n+    strats.props =\n+        strats.methods =\n+            strats.inject =\n+                strats.computed = function (\n+                    parentVal,\n+                    childVal,\n+                    vm,\n+                    key\n+                ) {\n+                    if (childVal && \"development\" !== 'production') {\n+                        assertObjectType(key, childVal, vm);\n+                    }\n+                    if (!parentVal) { return childVal }\n+                    var ret = Object.create(null);\n+                    extend(ret, parentVal);\n+                    if (childVal) { extend(ret, childVal); }\n+                    return ret\n+                };\n+    strats.provide = mergeDataOrFn;\n+\n+    \u002F**\n+     * Default strategy.\n+     *\u002F\n+    var defaultStrat = function (parentVal, childVal) {\n+        return childVal === undefined\n+            ? parentVal\n+            : childVal\n+    };\n+\n+    \u002F**\n+     * Validate component names\n+     *\u002F\n+    function checkComponents (options) {\n+        for (var key in options.components) {\n+            validateComponentName(key);\n+        }\n+    }\n+\n+    function validateComponentName (name) {\n+        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n+            warn(\n+                'Invalid component name: \"' + name + '\". Component names ' +\n+                'should conform to valid custom element name in html5 specification.'\n+            );\n+        }\n+        if (isBuiltInTag(name) || config.isReservedTag(name)) {\n+            warn(\n+                'Do not use built-in or reserved HTML elements as component ' +\n+                'id: ' + name\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Ensure all props option syntax are normalized into the\n+     * Object-based format.\n+     *\u002F\n+    function normalizeProps (options, vm) {\n+        var props = options.props;\n+        if (!props) { return }\n+        var res = {};\n+        var i, val, name;\n+        if (Array.isArray(props)) {\n+            i = props.length;\n+            while (i--) {\n+                val = props[i];\n+                if (typeof val === 'string') {\n+                    name = camelize(val);\n+                    res[name] = { type: null };\n+                } else {\n+                    warn('props must be strings when using array syntax.');\n+                }\n+            }\n+        } else if (isPlainObject(props)) {\n+            for (var key in props) {\n+                val = props[key];\n+                name = camelize(key);\n+                res[name] = isPlainObject(val)\n+                    ? val\n+                    : { type: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(props)) + \".\",\n+                vm\n+            );\n+        }\n+        options.props = res;\n+    }\n+\n+    \u002F**\n+     * Normalize all injections into Object-based format\n+     *\u002F\n+    function normalizeInject (options, vm) {\n+        var inject = options.inject;\n+        if (!inject) { return }\n+        var normalized = options.inject = {};\n+        if (Array.isArray(inject)) {\n+            for (var i = 0; i \u003C inject.length; i++) {\n+                normalized[inject[i]] = { from: inject[i] };\n+            }\n+        } else if (isPlainObject(inject)) {\n+            for (var key in inject) {\n+                var val = inject[key];\n+                normalized[key] = isPlainObject(val)\n+                    ? extend({ from: key }, val)\n+                    : { from: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(inject)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Normalize raw function directives into object format.\n+     *\u002F\n+    function normalizeDirectives (options) {\n+        var dirs = options.directives;\n+        if (dirs) {\n+            for (var key in dirs) {\n+                var def$$1 = dirs[key];\n+                if (typeof def$$1 === 'function') {\n+                    dirs[key] = { bind: def$$1, update: def$$1 };\n+                }\n+            }\n+        }\n+    }\n+\n+    function assertObjectType (name, value, vm) {\n+        if (!isPlainObject(value)) {\n+            warn(\n+                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n+                \"but got \" + (toRawType(value)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Merge two option objects into a new one.\n+     * Core utility used in both instantiation and inheritance.\n+     *\u002F\n+    function mergeOptions (\n+        parent,\n+        child,\n+        vm\n+    ) {\n+        {\n+            checkComponents(child);\n+        }\n+\n+        if (typeof child === 'function') {\n+            child = child.options;\n+        }\n+\n+        normalizeProps(child, vm);\n+        normalizeInject(child, vm);\n+        normalizeDirectives(child);\n+\n+        \u002F\u002F Apply extends and mixins on the child options,\n+        \u002F\u002F but only if it is a raw options object that isn't\n+        \u002F\u002F the result of another mergeOptions call.\n+        \u002F\u002F Only merged options has the _base property.\n+        if (!child._base) {\n+            if (child.extends) {\n+                parent = mergeOptions(parent, child.extends, vm);\n+            }\n+            if (child.mixins) {\n+                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\n+                    parent = mergeOptions(parent, child.mixins[i], vm);\n+                }\n+            }\n+        }\n+\n+        var options = {};\n+        var key;\n+        for (key in parent) {\n+            mergeField(key);\n+        }\n+        for (key in child) {\n+            if (!hasOwn(parent, key)) {\n+                mergeField(key);\n+            }\n+        }\n+        function mergeField (key) {\n+            var strat = strats[key] || defaultStrat;\n+            options[key] = strat(parent[key], child[key], vm, key);\n+        }\n+        return options\n+    }\n+\n+    \u002F**\n+     * Resolve an asset.\n+     * This function is used because child instances need access\n+     * to assets defined in its ancestor chain.\n+     *\u002F\n+    function resolveAsset (\n+        options,\n+        type,\n+        id,\n+        warnMissing\n+    ) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (typeof id !== 'string') {\n+            return\n+        }\n+        var assets = options[type];\n+        \u002F\u002F check local registration variations first\n+        if (hasOwn(assets, id)) { return assets[id] }\n+        var camelizedId = camelize(id);\n+        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n+        var PascalCaseId = capitalize(camelizedId);\n+        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n+        \u002F\u002F fallback to prototype chain\n+        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n+        if (warnMissing && !res) {\n+            warn(\n+                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n+                options\n+            );\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function validateProp (\n+        key,\n+        propOptions,\n+        propsData,\n+        vm\n+    ) {\n+        var prop = propOptions[key];\n+        var absent = !hasOwn(propsData, key);\n+        var value = propsData[key];\n+        \u002F\u002F boolean casting\n+        var booleanIndex = getTypeIndex(Boolean, prop.type);\n+        if (booleanIndex > -1) {\n+            if (absent && !hasOwn(prop, 'default')) {\n+                value = false;\n+            } else if (value === '' || value === hyphenate(key)) {\n+                \u002F\u002F only cast empty string \u002F same name to boolean if\n+                \u002F\u002F boolean has higher priority\n+                var stringIndex = getTypeIndex(String, prop.type);\n+                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\n+                    value = true;\n+                }\n+            }\n+        }\n+        \u002F\u002F check default value\n+        if (value === undefined) {\n+            value = getPropDefaultValue(vm, prop, key);\n+            \u002F\u002F since the default value is a fresh copy,\n+            \u002F\u002F make sure to observe it.\n+            var prevShouldObserve = shouldObserve;\n+            toggleObserving(true);\n+            observe(value);\n+            toggleObserving(prevShouldObserve);\n+        }\n+        {\n+            assertProp(prop, key, value, vm, absent);\n+        }\n+        return value\n+    }\n+\n+    \u002F**\n+     * Get the default value of a prop.\n+     *\u002F\n+    function getPropDefaultValue (vm, prop, key) {\n+        \u002F\u002F no default, return undefined\n+        if (!hasOwn(prop, 'default')) {\n+            return undefined\n+        }\n+        var def = prop.default;\n+        \u002F\u002F warn against non-factory defaults for Object & Array\n+        if (isObject(def)) {\n+            warn(\n+                'Invalid default value for prop \"' + key + '\": ' +\n+                'Props with type Object\u002FArray must use a factory function ' +\n+                'to return the default value.',\n+                vm\n+            );\n+        }\n+        \u002F\u002F the raw prop value was also undefined from previous render,\n+        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\n+        if (vm && vm.$options.propsData &&\n+            vm.$options.propsData[key] === undefined &&\n+            vm._props[key] !== undefined\n+        ) {\n+            return vm._props[key]\n+        }\n+        \u002F\u002F call factory function for non-Function types\n+        \u002F\u002F a value is Function if its prototype is function even across different execution context\n+        return typeof def === 'function' && getType(prop.type) !== 'Function'\n+            ? def.call(vm)\n+            : def\n+    }\n+\n+    \u002F**\n+     * Assert whether a prop is valid.\n+     *\u002F\n+    function assertProp (\n+        prop,\n+        name,\n+        value,\n+        vm,\n+        absent\n+    ) {\n+        if (prop.required && absent) {\n+            warn(\n+                'Missing required prop: \"' + name + '\"',\n+                vm\n+            );\n+            return\n+        }\n+        if (value == null && !prop.required) {\n+            return\n+        }\n+        var type = prop.type;\n+        var valid = !type || type === true;\n+        var expectedTypes = [];\n+        if (type) {\n+            if (!Array.isArray(type)) {\n+                type = [type];\n+            }\n+            for (var i = 0; i \u003C type.length && !valid; i++) {\n+                var assertedType = assertType(value, type[i]);\n+                expectedTypes.push(assertedType.expectedType || '');\n+                valid = assertedType.valid;\n+            }\n+        }\n+\n+        if (!valid) {\n+            warn(\n+                getInvalidTypeMessage(name, value, expectedTypes),\n+                vm\n+            );\n+            return\n+        }\n+        var validator = prop.validator;\n+        if (validator) {\n+            if (!validator(value)) {\n+                warn(\n+                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n+                    vm\n+                );\n+            }\n+        }\n+    }\n+\n+    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\n+\n+    function assertType (value, type) {\n+        var valid;\n+        var expectedType = getType(type);\n+        if (simpleCheckRE.test(expectedType)) {\n+            var t = typeof value;\n+            valid = t === expectedType.toLowerCase();\n+            \u002F\u002F for primitive wrapper objects\n+            if (!valid && t === 'object') {\n+                valid = value instanceof type;\n+            }\n+        } else if (expectedType === 'Object') {\n+            valid = isPlainObject(value);\n+        } else if (expectedType === 'Array') {\n+            valid = Array.isArray(value);\n+        } else {\n+            valid = value instanceof type;\n+        }\n+        return {\n+            valid: valid,\n+            expectedType: expectedType\n+        }\n+    }\n+\n+    \u002F**\n+     * Use function string name to check built-in types,\n+     * because a simple equality check will fail when running\n+     * across different vms \u002F iframes.\n+     *\u002F\n+    function getType (fn) {\n+        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\n+        return match ? match[1] : ''\n+    }\n+\n+    function isSameType (a, b) {\n+        return getType(a) === getType(b)\n+    }\n+\n+    function getTypeIndex (type, expectedTypes) {\n+        if (!Array.isArray(expectedTypes)) {\n+            return isSameType(expectedTypes, type) ? 0 : -1\n+        }\n+        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\n+            if (isSameType(expectedTypes[i], type)) {\n+                return i\n+            }\n+        }\n+        return -1\n+    }\n+\n+    function getInvalidTypeMessage (name, value, expectedTypes) {\n+        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n+            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n+        var expectedType = expectedTypes[0];\n+        var receivedType = toRawType(value);\n+        var expectedValue = styleValue(value, expectedType);\n+        var receivedValue = styleValue(value, receivedType);\n+        \u002F\u002F check if we need to specify expected value\n+        if (expectedTypes.length === 1 &&\n+            isExplicable(expectedType) &&\n+            !isBoolean(expectedType, receivedType)) {\n+            message += \" with value \" + expectedValue;\n+        }\n+        message += \", got \" + receivedType + \" \";\n+        \u002F\u002F check if we need to specify received value\n+        if (isExplicable(receivedType)) {\n+            message += \"with value \" + receivedValue + \".\";\n+        }\n+        return message\n+    }\n+\n+    function styleValue (value, type) {\n+        if (type === 'String') {\n+            return (\"\\\"\" + value + \"\\\"\")\n+        } else if (type === 'Number') {\n+            return (\"\" + (Number(value)))\n+        } else {\n+            return (\"\" + value)\n+        }\n+    }\n+\n+    function isExplicable (value) {\n+        var explicitTypes = ['string', 'number', 'boolean'];\n+        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n+    }\n+\n+    function isBoolean () {\n+        var args = [], len = arguments.length;\n+        while ( len-- ) args[ len ] = arguments[ len ];\n+\n+        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function handleError (err, vm, info) {\n+        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n+        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\n+        pushTarget();\n+        try {\n+            if (vm) {\n+                var cur = vm;\n+                while ((cur = cur.$parent)) {\n+                    var hooks = cur.$options.errorCaptured;\n+                    if (hooks) {\n+                        for (var i = 0; i \u003C hooks.length; i++) {\n+                            try {\n+                                var capture = hooks[i].call(cur, err, vm, info) === false;\n+                                if (capture) { return }\n+                            } catch (e) {\n+                                globalHandleError(e, cur, 'errorCaptured hook');\n+                            }\n+                        }\n+                    }\n+                }\n+            }\n+            globalHandleError(err, vm, info);\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    function invokeWithErrorHandling (\n+        handler,\n+        context,\n+        args,\n+        vm,\n+        info\n+    ) {\n+        var res;\n+        try {\n+            res = args ? handler.apply(context, args) : handler.call(context);\n+            if (res && !res._isVue && isPromise(res) && !res._handled) {\n+                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\n+                \u002F\u002F issue #9511\n+                \u002F\u002F avoid catch triggering multiple times when nested calls\n+                res._handled = true;\n+            }\n+        } catch (e) {\n+            handleError(e, vm, info);\n+        }\n+        return res\n+    }\n+\n+    function globalHandleError (err, vm, info) {\n+        if (config.errorHandler) {\n+            try {\n+                return config.errorHandler.call(null, err, vm, info)\n+            } catch (e) {\n+                \u002F\u002F if the user intentionally throws the original error in the handler,\n+                \u002F\u002F do not log it twice\n+                if (e !== err) {\n+                    logError(e, null, 'config.errorHandler');\n+                }\n+            }\n+        }\n+        logError(err, vm, info);\n+    }\n+\n+    function logError (err, vm, info) {\n+        {\n+            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n+            console.error(err);\n+        } else {\n+            throw err\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var isUsingMicroTask = false;\n+\n+    var callbacks = [];\n+    var pending = false;\n+\n+    function flushCallbacks () {\n+        pending = false;\n+        var copies = callbacks.slice(0);\n+        callbacks.length = 0;\n+        for (var i = 0; i \u003C copies.length; i++) {\n+            copies[i]();\n+        }\n+    }\n+\n+    \u002F\u002F Here we have async deferring wrappers using microtasks.\n+    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\n+    \u002F\u002F However, it has subtle problems when state is changed right before repaint\n+    \u002F\u002F (e.g. #6813, out-in transitions).\n+    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\n+    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n+    \u002F\u002F So we now use microtasks everywhere, again.\n+    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\n+    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\n+    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\n+    \u002F\u002F or even between bubbling of the same event (#6566).\n+    var timerFunc;\n+\n+    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\n+    \u002F\u002F via either native Promise.then or MutationObserver.\n+    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\n+    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n+    \u002F\u002F completely stops working after triggering a few times... so, if native\n+    \u002F\u002F Promise is available, we will use it:\n+  \u002F* istanbul ignore next, $flow-disable-line *\u002F\n+    if (typeof Promise !== 'undefined' && isNative(Promise)) {\n+        var p = Promise.resolve();\n+        timerFunc = function () {\n+            p.then(flushCallbacks);\n+            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\n+            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\n+            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\n+            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\n+            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\n+            if (isIOS) { setTimeout(noop); }\n+        };\n+        isUsingMicroTask = true;\n+    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\n+            isNative(MutationObserver) ||\n+            \u002F\u002F PhantomJS and iOS 7.x\n+            MutationObserver.toString() === '[object MutationObserverConstructor]'\n+        )) {\n+        \u002F\u002F Use MutationObserver where native Promise is not available,\n+        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\n+        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\n+        var counter = 1;\n+        var observer = new MutationObserver(flushCallbacks);\n+        var textNode = document.createTextNode(String(counter));\n+        observer.observe(textNode, {\n+            characterData: true\n+        });\n+        timerFunc = function () {\n+            counter = (counter + 1) % 2;\n+            textNode.data = String(counter);\n+        };\n+        isUsingMicroTask = true;\n+    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n+        \u002F\u002F Fallback to setImmediate.\n+        \u002F\u002F Techinically it leverages the (macro) task queue,\n+        \u002F\u002F but it is still a better choice than setTimeout.\n+        timerFunc = function () {\n+            setImmediate(flushCallbacks);\n+        };\n+    } else {\n+        \u002F\u002F Fallback to setTimeout.\n+        timerFunc = function () {\n+            setTimeout(flushCallbacks, 0);\n+        };\n+    }\n+\n+    function nextTick (cb, ctx) {\n+        var _resolve;\n+        callbacks.push(function () {\n+            if (cb) {\n+                try {\n+                    cb.call(ctx);\n+                } catch (e) {\n+                    handleError(e, ctx, 'nextTick');\n+                }\n+            } else if (_resolve) {\n+                _resolve(ctx);\n+            }\n+        });\n+        if (!pending) {\n+            pending = true;\n+            timerFunc();\n+        }\n+        \u002F\u002F $flow-disable-line\n+        if (!cb && typeof Promise !== 'undefined') {\n+            return new Promise(function (resolve) {\n+                _resolve = resolve;\n+            })\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var mark;\n+    var measure;\n+\n+    {\n+        var perf = inBrowser && window.performance;\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            perf &&\n+            perf.mark &&\n+            perf.measure &&\n+            perf.clearMarks &&\n+            perf.clearMeasures\n+        ) {\n+            mark = function (tag) { return perf.mark(tag); };\n+            measure = function (name, startTag, endTag) {\n+                perf.measure(name, startTag, endTag);\n+                perf.clearMarks(startTag);\n+                perf.clearMarks(endTag);\n+                \u002F\u002F perf.clearMeasures(name)\n+            };\n+        }\n+    }\n+\n+  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\n+\n+    var initProxy;\n+\n+    {\n+        var allowedGlobals = makeMap(\n+            'Infinity,undefined,NaN,isFinite,isNaN,' +\n+            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n+            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n+            'require' \u002F\u002F for Webpack\u002FBrowserify\n+        );\n+\n+        var warnNonPresent = function (target, key) {\n+            warn(\n+                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n+                'referenced during render. Make sure that this property is reactive, ' +\n+                'either in the data option, or for class-based components, by ' +\n+                'initializing the property. ' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\n+                target\n+            );\n+        };\n+\n+        var warnReservedPrefix = function (target, key) {\n+            warn(\n+                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n+                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n+                'prevent conflicts with Vue internals' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\n+                target\n+            );\n+        };\n+\n+        var hasProxy =\n+            typeof Proxy !== 'undefined' && isNative(Proxy);\n+\n+        if (hasProxy) {\n+            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n+            config.keyCodes = new Proxy(config.keyCodes, {\n+                set: function set (target, key, value) {\n+                    if (isBuiltInModifier(key)) {\n+                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n+                        return false\n+                    } else {\n+                        target[key] = value;\n+                        return true\n+                    }\n+                }\n+            });\n+        }\n+\n+        var hasHandler = {\n+            has: function has (target, key) {\n+                var has = key in target;\n+                var isAllowed = allowedGlobals(key) ||\n+                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n+                if (!has && !isAllowed) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return has || !isAllowed\n+            }\n+        };\n+\n+        var getHandler = {\n+            get: function get (target, key) {\n+                if (typeof key === 'string' && !(key in target)) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return target[key]\n+            }\n+        };\n+\n+        initProxy = function initProxy (vm) {\n+            if (hasProxy) {\n+                \u002F\u002F determine which proxy handler to use\n+                var options = vm.$options;\n+                var handlers = options.render && options.render._withStripped\n+                    ? getHandler\n+                    : hasHandler;\n+                vm._renderProxy = new Proxy(vm, handlers);\n+            } else {\n+                vm._renderProxy = vm;\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var seenObjects = new _Set();\n+\n+    \u002F**\n+     * Recursively traverse an object to evoke all converted\n+     * getters, so that every nested property inside the object\n+     * is collected as a \"deep\" dependency.\n+     *\u002F\n+    function traverse (val) {\n+        _traverse(val, seenObjects);\n+        seenObjects.clear();\n+    }\n+\n+    function _traverse (val, seen) {\n+        var i, keys;\n+        var isA = Array.isArray(val);\n+        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n+            return\n+        }\n+        if (val.__ob__) {\n+            var depId = val.__ob__.dep.id;\n+            if (seen.has(depId)) {\n+                return\n+            }\n+            seen.add(depId);\n+        }\n+        if (isA) {\n+            i = val.length;\n+            while (i--) { _traverse(val[i], seen); }\n+        } else {\n+            keys = Object.keys(val);\n+            i = keys.length;\n+            while (i--) { _traverse(val[keys[i]], seen); }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var normalizeEvent = cached(function (name) {\n+        var passive = name.charAt(0) === '&';\n+        name = passive ? name.slice(1) : name;\n+        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\n+        name = once$$1 ? name.slice(1) : name;\n+        var capture = name.charAt(0) === '!';\n+        name = capture ? name.slice(1) : name;\n+        return {\n+            name: name,\n+            once: once$$1,\n+            capture: capture,\n+            passive: passive\n+        }\n+    });\n+\n+    function createFnInvoker (fns, vm) {\n+        function invoker () {\n+            var arguments$1 = arguments;\n+\n+            var fns = invoker.fns;\n+            if (Array.isArray(fns)) {\n+                var cloned = fns.slice();\n+                for (var i = 0; i \u003C cloned.length; i++) {\n+                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n+                }\n+            } else {\n+                \u002F\u002F return handler return value for single handlers\n+                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n+            }\n+        }\n+        invoker.fns = fns;\n+        return invoker\n+    }\n+\n+    function updateListeners (\n+        on,\n+        oldOn,\n+        add,\n+        remove$$1,\n+        createOnceHandler,\n+        vm\n+    ) {\n+        var name, def$$1, cur, old, event;\n+        for (name in on) {\n+            def$$1 = cur = on[name];\n+            old = oldOn[name];\n+            event = normalizeEvent(name);\n+            if (isUndef(cur)) {\n+                warn(\n+                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n+                    vm\n+                );\n+            } else if (isUndef(old)) {\n+                if (isUndef(cur.fns)) {\n+                    cur = on[name] = createFnInvoker(cur, vm);\n+                }\n+                if (isTrue(event.once)) {\n+                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n+                }\n+                add(event.name, cur, event.capture, event.passive, event.params);\n+            } else if (cur !== old) {\n+                old.fns = cur;\n+                on[name] = old;\n+            }\n+        }\n+        for (name in oldOn) {\n+            if (isUndef(on[name])) {\n+                event = normalizeEvent(name);\n+                remove$$1(event.name, oldOn[name], event.capture);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function mergeVNodeHook (def, hookKey, hook) {\n+        if (def instanceof VNode) {\n+            def = def.data.hook || (def.data.hook = {});\n+        }\n+        var invoker;\n+        var oldHook = def[hookKey];\n+\n+        function wrappedHook () {\n+            hook.apply(this, arguments);\n+            \u002F\u002F important: remove merged hook to ensure it's called only once\n+            \u002F\u002F and prevent memory leak\n+            remove(invoker.fns, wrappedHook);\n+        }\n+\n+        if (isUndef(oldHook)) {\n+            \u002F\u002F no existing hook\n+            invoker = createFnInvoker([wrappedHook]);\n+        } else {\n+          \u002F* istanbul ignore if *\u002F\n+            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n+                \u002F\u002F already a merged invoker\n+                invoker = oldHook;\n+                invoker.fns.push(wrappedHook);\n+            } else {\n+                \u002F\u002F existing plain hook\n+                invoker = createFnInvoker([oldHook, wrappedHook]);\n+            }\n+        }\n+\n+        invoker.merged = true;\n+        def[hookKey] = invoker;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function extractPropsFromVNodeData (\n+        data,\n+        Ctor,\n+        tag\n+    ) {\n+        \u002F\u002F we are only extracting raw values here.\n+        \u002F\u002F validation and default values are handled in the child\n+        \u002F\u002F component itself.\n+        var propOptions = Ctor.options.props;\n+        if (isUndef(propOptions)) {\n+            return\n+        }\n+        var res = {};\n+        var attrs = data.attrs;\n+        var props = data.props;\n+        if (isDef(attrs) || isDef(props)) {\n+            for (var key in propOptions) {\n+                var altKey = hyphenate(key);\n+                {\n+                    var keyInLowerCase = key.toLowerCase();\n+                    if (\n+                        key !== keyInLowerCase &&\n+                        attrs && hasOwn(attrs, keyInLowerCase)\n+                    ) {\n+                        tip(\n+                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n+                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n+                            \" \\\"\" + key + \"\\\". \" +\n+                            \"Note that HTML attributes are case-insensitive and camelCased \" +\n+                            \"props need to use their kebab-case equivalents when using in-DOM \" +\n+                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n+                        );\n+                    }\n+                }\n+                checkProp(res, props, key, altKey, true) ||\n+                checkProp(res, attrs, key, altKey, false);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkProp (\n+        res,\n+        hash,\n+        key,\n+        altKey,\n+        preserve\n+    ) {\n+        if (isDef(hash)) {\n+            if (hasOwn(hash, key)) {\n+                res[key] = hash[key];\n+                if (!preserve) {\n+                    delete hash[key];\n+                }\n+                return true\n+            } else if (hasOwn(hash, altKey)) {\n+                res[key] = hash[altKey];\n+                if (!preserve) {\n+                    delete hash[altKey];\n+                }\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F The template compiler attempts to minimize the need for normalization by\n+    \u002F\u002F statically analyzing the template at compile time.\n+    \u002F\u002F\n+    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\n+    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\n+    \u002F\u002F two cases where extra normalization is needed:\n+\n+    \u002F\u002F 1. When the children contains components - because a functional component\n+    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\n+    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\n+    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n+    \u002F\u002F because functional components already normalize their own children.\n+    function simpleNormalizeChildren (children) {\n+        for (var i = 0; i \u003C children.length; i++) {\n+            if (Array.isArray(children[i])) {\n+                return Array.prototype.concat.apply([], children)\n+            }\n+        }\n+        return children\n+    }\n+\n+    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\n+    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\n+    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\n+    \u002F\u002F is needed to cater to all possible types of children values.\n+    function normalizeChildren (children) {\n+        return isPrimitive(children)\n+            ? [createTextVNode(children)]\n+            : Array.isArray(children)\n+                ? normalizeArrayChildren(children)\n+                : undefined\n+    }\n+\n+    function isTextNode (node) {\n+        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n+    }\n+\n+    function normalizeArrayChildren (children, nestedIndex) {\n+        var res = [];\n+        var i, c, lastIndex, last;\n+        for (i = 0; i \u003C children.length; i++) {\n+            c = children[i];\n+            if (isUndef(c) || typeof c === 'boolean') { continue }\n+            lastIndex = res.length - 1;\n+            last = res[lastIndex];\n+            \u002F\u002F  nested\n+            if (Array.isArray(c)) {\n+                if (c.length > 0) {\n+                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n+                    \u002F\u002F merge adjacent text nodes\n+                    if (isTextNode(c[0]) && isTextNode(last)) {\n+                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n+                        c.shift();\n+                    }\n+                    res.push.apply(res, c);\n+                }\n+            } else if (isPrimitive(c)) {\n+                if (isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    \u002F\u002F this is necessary for SSR hydration because text nodes are\n+                    \u002F\u002F essentially merged when rendered to HTML strings\n+                    res[lastIndex] = createTextVNode(last.text + c);\n+                } else if (c !== '') {\n+                    \u002F\u002F convert primitive to vnode\n+                    res.push(createTextVNode(c));\n+                }\n+            } else {\n+                if (isTextNode(c) && isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    res[lastIndex] = createTextVNode(last.text + c.text);\n+                } else {\n+                    \u002F\u002F default key for nested array children (likely generated by v-for)\n+                    if (isTrue(children._isVList) &&\n+                        isDef(c.tag) &&\n+                        isUndef(c.key) &&\n+                        isDef(nestedIndex)) {\n+                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n+                    }\n+                    res.push(c);\n+                }\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initProvide (vm) {\n+        var provide = vm.$options.provide;\n+        if (provide) {\n+            vm._provided = typeof provide === 'function'\n+                ? provide.call(vm)\n+                : provide;\n+        }\n+    }\n+\n+    function initInjections (vm) {\n+        var result = resolveInject(vm.$options.inject, vm);\n+        if (result) {\n+            toggleObserving(false);\n+            Object.keys(result).forEach(function (key) {\n+              \u002F* istanbul ignore else *\u002F\n+                {\n+                    defineReactive$$1(vm, key, result[key], function () {\n+                        warn(\n+                            \"Avoid mutating an injected value directly since the changes will be \" +\n+                            \"overwritten whenever the provided component re-renders. \" +\n+                            \"injection being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    });\n+                }\n+            });\n+            toggleObserving(true);\n+        }\n+    }\n+\n+    function resolveInject (inject, vm) {\n+        if (inject) {\n+            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\n+            var result = Object.create(null);\n+            var keys = hasSymbol\n+                ? Reflect.ownKeys(inject)\n+                : Object.keys(inject);\n+\n+            for (var i = 0; i \u003C keys.length; i++) {\n+                var key = keys[i];\n+                \u002F\u002F #6574 in case the inject object is observed...\n+                if (key === '__ob__') { continue }\n+                var provideKey = inject[key].from;\n+                var source = vm;\n+                while (source) {\n+                    if (source._provided && hasOwn(source._provided, provideKey)) {\n+                        result[key] = source._provided[provideKey];\n+                        break\n+                    }\n+                    source = source.$parent;\n+                }\n+                if (!source) {\n+                    if ('default' in inject[key]) {\n+                        var provideDefault = inject[key].default;\n+                        result[key] = typeof provideDefault === 'function'\n+                            ? provideDefault.call(vm)\n+                            : provideDefault;\n+                    } else {\n+                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n+                    }\n+                }\n+            }\n+            return result\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F**\n+     * Runtime helper for resolving raw children VNodes into a slot object.\n+     *\u002F\n+    function resolveSlots (\n+        children,\n+        context\n+    ) {\n+        if (!children || !children.length) {\n+            return {}\n+        }\n+        var slots = {};\n+        for (var i = 0, l = children.length; i \u003C l; i++) {\n+            var child = children[i];\n+            var data = child.data;\n+            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\n+            if (data && data.attrs && data.attrs.slot) {\n+                delete data.attrs.slot;\n+            }\n+            \u002F\u002F named slots should only be respected if the vnode was rendered in the\n+            \u002F\u002F same context.\n+            if ((child.context === context || child.fnContext === context) &&\n+                data && data.slot != null\n+            ) {\n+                var name = data.slot;\n+                var slot = (slots[name] || (slots[name] = []));\n+                if (child.tag === 'template') {\n+                    slot.push.apply(slot, child.children || []);\n+                } else {\n+                    slot.push(child);\n+                }\n+            } else {\n+                (slots.default || (slots.default = [])).push(child);\n+            }\n+        }\n+        \u002F\u002F ignore slots that contains only whitespace\n+        for (var name$1 in slots) {\n+            if (slots[name$1].every(isWhitespace)) {\n+                delete slots[name$1];\n+            }\n+        }\n+        return slots\n+    }\n+\n+    function isWhitespace (node) {\n+        return (node.isComment && !node.asyncFactory) || node.text === ' '\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function normalizeScopedSlots (\n+        slots,\n+        normalSlots,\n+        prevSlots\n+    ) {\n+        var res;\n+        var hasNormalSlots = Object.keys(normalSlots).length > 0;\n+        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n+        var key = slots && slots.$key;\n+        if (!slots) {\n+            res = {};\n+        } else if (slots._normalized) {\n+            \u002F\u002F fast path 1: child component re-render only, parent did not change\n+            return slots._normalized\n+        } else if (\n+            isStable &&\n+            prevSlots &&\n+            prevSlots !== emptyObject &&\n+            key === prevSlots.$key &&\n+            !hasNormalSlots &&\n+            !prevSlots.$hasNormal\n+        ) {\n+            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\n+            \u002F\u002F only need to normalize once\n+            return prevSlots\n+        } else {\n+            res = {};\n+            for (var key$1 in slots) {\n+                if (slots[key$1] && key$1[0] !== '$') {\n+                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n+                }\n+            }\n+        }\n+        \u002F\u002F expose normal slots on scopedSlots\n+        for (var key$2 in normalSlots) {\n+            if (!(key$2 in res)) {\n+                res[key$2] = proxyNormalSlot(normalSlots, key$2);\n+            }\n+        }\n+        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\n+        \u002F\u002F and when that is passed down this would cause an error\n+        if (slots && Object.isExtensible(slots)) {\n+            (slots)._normalized = res;\n+        }\n+        def(res, '$stable', isStable);\n+        def(res, '$key', key);\n+        def(res, '$hasNormal', hasNormalSlots);\n+        return res\n+    }\n+\n+    function normalizeScopedSlot(normalSlots, key, fn) {\n+        var normalized = function () {\n+            var res = arguments.length ? fn.apply(null, arguments) : fn({});\n+            res = res && typeof res === 'object' && !Array.isArray(res)\n+                ? [res] \u002F\u002F single vnode\n+                : normalizeChildren(res);\n+            return res && (\n+                res.length === 0 ||\n+                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\n+            ) ? undefined\n+                : res\n+        };\n+        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\n+        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\n+        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\n+        if (fn.proxy) {\n+            Object.defineProperty(normalSlots, key, {\n+                get: normalized,\n+                enumerable: true,\n+                configurable: true\n+            });\n+        }\n+        return normalized\n+    }\n+\n+    function proxyNormalSlot(slots, key) {\n+        return function () { return slots[key]; }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering v-for lists.\n+     *\u002F\n+    function renderList (\n+        val,\n+        render\n+    ) {\n+        var ret, i, l, keys, key;\n+        if (Array.isArray(val) || typeof val === 'string') {\n+            ret = new Array(val.length);\n+            for (i = 0, l = val.length; i \u003C l; i++) {\n+                ret[i] = render(val[i], i);\n+            }\n+        } else if (typeof val === 'number') {\n+            ret = new Array(val);\n+            for (i = 0; i \u003C val; i++) {\n+                ret[i] = render(i + 1, i);\n+            }\n+        } else if (isObject(val)) {\n+            if (hasSymbol && val[Symbol.iterator]) {\n+                ret = [];\n+                var iterator = val[Symbol.iterator]();\n+                var result = iterator.next();\n+                while (!result.done) {\n+                    ret.push(render(result.value, ret.length));\n+                    result = iterator.next();\n+                }\n+            } else {\n+                keys = Object.keys(val);\n+                ret = new Array(keys.length);\n+                for (i = 0, l = keys.length; i \u003C l; i++) {\n+                    key = keys[i];\n+                    ret[i] = render(val[key], key, i);\n+                }\n+            }\n+        }\n+        if (!isDef(ret)) {\n+            ret = [];\n+        }\n+        (ret)._isVList = true;\n+        return ret\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering \u003Cslot>\n+     *\u002F\n+    function renderSlot (\n+        name,\n+        fallback,\n+        props,\n+        bindObject\n+    ) {\n+        var scopedSlotFn = this.$scopedSlots[name];\n+        var nodes;\n+        if (scopedSlotFn) { \u002F\u002F scoped slot\n+            props = props || {};\n+            if (bindObject) {\n+                if (!isObject(bindObject)) {\n+                    warn(\n+                        'slot v-bind without argument expects an Object',\n+                        this\n+                    );\n+                }\n+                props = extend(extend({}, bindObject), props);\n+            }\n+            nodes = scopedSlotFn(props) || fallback;\n+        } else {\n+            nodes = this.$slots[name] || fallback;\n+        }\n+\n+        var target = props && props.slot;\n+        if (target) {\n+            return this.$createElement('template', { slot: target }, nodes)\n+        } else {\n+            return nodes\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for resolving filters\n+     *\u002F\n+    function resolveFilter (id) {\n+        return resolveAsset(this.$options, 'filters', id, true) || identity\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isKeyNotMatch (expect, actual) {\n+        if (Array.isArray(expect)) {\n+            return expect.indexOf(actual) === -1\n+        } else {\n+            return expect !== actual\n+        }\n+    }\n+\n+    \u002F**\n+     * Runtime helper for checking keyCodes from config.\n+     * exposed as Vue.prototype._k\n+     * passing in eventKeyName as last argument separately for backwards compat\n+     *\u002F\n+    function checkKeyCodes (\n+        eventKeyCode,\n+        key,\n+        builtInKeyCode,\n+        eventKeyName,\n+        builtInKeyName\n+    ) {\n+        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n+        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n+            return isKeyNotMatch(builtInKeyName, eventKeyName)\n+        } else if (mappedKeyCode) {\n+            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n+        } else if (eventKeyName) {\n+            return hyphenate(eventKeyName) !== key\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n+     *\u002F\n+    function bindObjectProps (\n+        data,\n+        tag,\n+        value,\n+        asProp,\n+        isSync\n+    ) {\n+        if (value) {\n+            if (!isObject(value)) {\n+                warn(\n+                    'v-bind without argument expects an Object or Array value',\n+                    this\n+                );\n+            } else {\n+                if (Array.isArray(value)) {\n+                    value = toObject(value);\n+                }\n+                var hash;\n+                var loop = function ( key ) {\n+                    if (\n+                        key === 'class' ||\n+                        key === 'style' ||\n+                        isReservedAttribute(key)\n+                    ) {\n+                        hash = data;\n+                    } else {\n+                        var type = data.attrs && data.attrs.type;\n+                        hash = asProp || config.mustUseProp(tag, type, key)\n+                            ? data.domProps || (data.domProps = {})\n+                            : data.attrs || (data.attrs = {});\n+                    }\n+                    var camelizedKey = camelize(key);\n+                    var hyphenatedKey = hyphenate(key);\n+                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n+                        hash[key] = value[key];\n+\n+                        if (isSync) {\n+                            var on = data.on || (data.on = {});\n+                            on[(\"update:\" + key)] = function ($event) {\n+                                value[key] = $event;\n+                            };\n+                        }\n+                    }\n+                };\n+\n+                for (var key in value) loop( key );\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering static trees.\n+     *\u002F\n+    function renderStatic (\n+        index,\n+        isInFor\n+    ) {\n+        var cached = this._staticTrees || (this._staticTrees = []);\n+        var tree = cached[index];\n+        \u002F\u002F if has already-rendered static tree and not inside v-for,\n+        \u002F\u002F we can reuse the same tree.\n+        if (tree && !isInFor) {\n+            return tree\n+        }\n+        \u002F\u002F otherwise, render a fresh tree.\n+        tree = cached[index] = this.$options.staticRenderFns[index].call(\n+            this._renderProxy,\n+            null,\n+            this \u002F\u002F for render fns generated for functional component templates\n+        );\n+        markStatic(tree, (\"__static__\" + index), false);\n+        return tree\n+    }\n+\n+    \u002F**\n+     * Runtime helper for v-once.\n+     * Effectively it means marking the node as static with a unique key.\n+     *\u002F\n+    function markOnce (\n+        tree,\n+        index,\n+        key\n+    ) {\n+        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n+        return tree\n+    }\n+\n+    function markStatic (\n+        tree,\n+        key,\n+        isOnce\n+    ) {\n+        if (Array.isArray(tree)) {\n+            for (var i = 0; i \u003C tree.length; i++) {\n+                if (tree[i] && typeof tree[i] !== 'string') {\n+                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n+                }\n+            }\n+        } else {\n+            markStaticNode(tree, key, isOnce);\n+        }\n+    }\n+\n+    function markStaticNode (node, key, isOnce) {\n+        node.isStatic = true;\n+        node.key = key;\n+        node.isOnce = isOnce;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindObjectListeners (data, value) {\n+        if (value) {\n+            if (!isPlainObject(value)) {\n+                warn(\n+                    'v-on without argument expects an Object value',\n+                    this\n+                );\n+            } else {\n+                var on = data.on = data.on ? extend({}, data.on) : {};\n+                for (var key in value) {\n+                    var existing = on[key];\n+                    var ours = value[key];\n+                    on[key] = existing ? [].concat(existing, ours) : ours;\n+                }\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveScopedSlots (\n+        fns, \u002F\u002F see flow\u002Fvnode\n+        res,\n+        \u002F\u002F the following are added in 2.6\n+        hasDynamicKeys,\n+        contentHashKey\n+    ) {\n+        res = res || { $stable: !hasDynamicKeys };\n+        for (var i = 0; i \u003C fns.length; i++) {\n+            var slot = fns[i];\n+            if (Array.isArray(slot)) {\n+                resolveScopedSlots(slot, res, hasDynamicKeys);\n+            } else if (slot) {\n+                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\n+                if (slot.proxy) {\n+                    slot.fn.proxy = true;\n+                }\n+                res[slot.key] = slot.fn;\n+            }\n+        }\n+        if (contentHashKey) {\n+            (res).$key = contentHashKey;\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindDynamicKeys (baseObj, values) {\n+        for (var i = 0; i \u003C values.length; i += 2) {\n+            var key = values[i];\n+            if (typeof key === 'string' && key) {\n+                baseObj[values[i]] = values[i + 1];\n+            } else if (key !== '' && key !== null) {\n+                \u002F\u002F null is a speical value for explicitly removing a binding\n+                warn(\n+                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n+                    this\n+                );\n+            }\n+        }\n+        return baseObj\n+    }\n+\n+    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\n+    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\n+    \u002F\u002F to string and cause the type check to miss.\n+    function prependModifier (value, symbol) {\n+        return typeof value === 'string' ? symbol + value : value\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function installRenderHelpers (target) {\n+        target._o = markOnce;\n+        target._n = toNumber;\n+        target._s = toString;\n+        target._l = renderList;\n+        target._t = renderSlot;\n+        target._q = looseEqual;\n+        target._i = looseIndexOf;\n+        target._m = renderStatic;\n+        target._f = resolveFilter;\n+        target._k = checkKeyCodes;\n+        target._b = bindObjectProps;\n+        target._v = createTextVNode;\n+        target._e = createEmptyVNode;\n+        target._u = resolveScopedSlots;\n+        target._g = bindObjectListeners;\n+        target._d = bindDynamicKeys;\n+        target._p = prependModifier;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function FunctionalRenderContext (\n+        data,\n+        props,\n+        children,\n+        parent,\n+        Ctor\n+    ) {\n+        var this$1 = this;\n+\n+        var options = Ctor.options;\n+        \u002F\u002F ensure the createElement function in functional components\n+        \u002F\u002F gets a unique context - this is necessary for correct named slot check\n+        var contextVm;\n+        if (hasOwn(parent, '_uid')) {\n+            contextVm = Object.create(parent);\n+            \u002F\u002F $flow-disable-line\n+            contextVm._original = parent;\n+        } else {\n+            \u002F\u002F the context vm passed in is a functional context as well.\n+            \u002F\u002F in this case we want to make sure we are able to get a hold to the\n+            \u002F\u002F real context instance.\n+            contextVm = parent;\n+            \u002F\u002F $flow-disable-line\n+            parent = parent._original;\n+        }\n+        var isCompiled = isTrue(options._compiled);\n+        var needNormalization = !isCompiled;\n+\n+        this.data = data;\n+        this.props = props;\n+        this.children = children;\n+        this.parent = parent;\n+        this.listeners = data.on || emptyObject;\n+        this.injections = resolveInject(options.inject, parent);\n+        this.slots = function () {\n+            if (!this$1.$slots) {\n+                normalizeScopedSlots(\n+                    data.scopedSlots,\n+                    this$1.$slots = resolveSlots(children, parent)\n+                );\n+            }\n+            return this$1.$slots\n+        };\n+\n+        Object.defineProperty(this, 'scopedSlots', ({\n+            enumerable: true,\n+            get: function get () {\n+                return normalizeScopedSlots(data.scopedSlots, this.slots())\n+            }\n+        }));\n+\n+        \u002F\u002F support for compiled functional template\n+        if (isCompiled) {\n+            \u002F\u002F exposing $options for renderStatic()\n+            this.$options = options;\n+            \u002F\u002F pre-resolve slots for renderSlot()\n+            this.$slots = this.slots();\n+            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n+        }\n+\n+        if (options._scopeId) {\n+            this._c = function (a, b, c, d) {\n+                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n+                if (vnode && !Array.isArray(vnode)) {\n+                    vnode.fnScopeId = options._scopeId;\n+                    vnode.fnContext = parent;\n+                }\n+                return vnode\n+            };\n+        } else {\n+            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n+        }\n+    }\n+\n+    installRenderHelpers(FunctionalRenderContext.prototype);\n+\n+    function createFunctionalComponent (\n+        Ctor,\n+        propsData,\n+        data,\n+        contextVm,\n+        children\n+    ) {\n+        var options = Ctor.options;\n+        var props = {};\n+        var propOptions = options.props;\n+        if (isDef(propOptions)) {\n+            for (var key in propOptions) {\n+                props[key] = validateProp(key, propOptions, propsData || emptyObject);\n+            }\n+        } else {\n+            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n+            if (isDef(data.props)) { mergeProps(props, data.props); }\n+        }\n+\n+        var renderContext = new FunctionalRenderContext(\n+            data,\n+            props,\n+            children,\n+            contextVm,\n+            Ctor\n+        );\n+\n+        var vnode = options.render.call(null, renderContext._c, renderContext);\n+\n+        if (vnode instanceof VNode) {\n+            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n+        } else if (Array.isArray(vnode)) {\n+            var vnodes = normalizeChildren(vnode) || [];\n+            var res = new Array(vnodes.length);\n+            for (var i = 0; i \u003C vnodes.length; i++) {\n+                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n+            }\n+            return res\n+        }\n+    }\n+\n+    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n+        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\n+        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\n+        \u002F\u002F that should not be matched to match.\n+        var clone = cloneVNode(vnode);\n+        clone.fnContext = contextVm;\n+        clone.fnOptions = options;\n+        {\n+            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n+        }\n+        if (data.slot) {\n+            (clone.data || (clone.data = {})).slot = data.slot;\n+        }\n+        return clone\n+    }\n+\n+    function mergeProps (to, from) {\n+        for (var key in from) {\n+            to[camelize(key)] = from[key];\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F inline hooks to be invoked on component VNodes during patch\n+    var componentVNodeHooks = {\n+        init: function init (vnode, hydrating) {\n+            if (\n+                vnode.componentInstance &&\n+                !vnode.componentInstance._isDestroyed &&\n+                vnode.data.keepAlive\n+            ) {\n+                \u002F\u002F kept-alive components, treat as a patch\n+                var mountedNode = vnode; \u002F\u002F work around flow\n+                componentVNodeHooks.prepatch(mountedNode, mountedNode);\n+            } else {\n+                var child = vnode.componentInstance = createComponentInstanceForVnode(\n+                    vnode,\n+                    activeInstance\n+                );\n+                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n+            }\n+        },\n+\n+        prepatch: function prepatch (oldVnode, vnode) {\n+            var options = vnode.componentOptions;\n+            var child = vnode.componentInstance = oldVnode.componentInstance;\n+            updateChildComponent(\n+                child,\n+                options.propsData, \u002F\u002F updated props\n+                options.listeners, \u002F\u002F updated listeners\n+                vnode, \u002F\u002F new parent vnode\n+                options.children \u002F\u002F new children\n+            );\n+        },\n+\n+        insert: function insert (vnode) {\n+            var context = vnode.context;\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isMounted) {\n+                componentInstance._isMounted = true;\n+                callHook(componentInstance, 'mounted');\n+            }\n+            if (vnode.data.keepAlive) {\n+                if (context._isMounted) {\n+                    \u002F\u002F vue-router#1212\n+                    \u002F\u002F During updates, a kept-alive component's child components may\n+                    \u002F\u002F change, so directly walking the tree here may call activated hooks\n+                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\n+                    \u002F\u002F be processed after the whole patch process ended.\n+                    queueActivatedComponent(componentInstance);\n+                } else {\n+                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        },\n+\n+        destroy: function destroy (vnode) {\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isDestroyed) {\n+                if (!vnode.data.keepAlive) {\n+                    componentInstance.$destroy();\n+                } else {\n+                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        }\n+    };\n+\n+    var hooksToMerge = Object.keys(componentVNodeHooks);\n+\n+    function createComponent (\n+        Ctor,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        if (isUndef(Ctor)) {\n+            return\n+        }\n+\n+        var baseCtor = context.$options._base;\n+\n+        \u002F\u002F plain options object: turn it into a constructor\n+        if (isObject(Ctor)) {\n+            Ctor = baseCtor.extend(Ctor);\n+        }\n+\n+        \u002F\u002F if at this stage it's not a constructor or an async component factory,\n+        \u002F\u002F reject.\n+        if (typeof Ctor !== 'function') {\n+            {\n+                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n+            }\n+            return\n+        }\n+\n+        \u002F\u002F async component\n+        var asyncFactory;\n+        if (isUndef(Ctor.cid)) {\n+            asyncFactory = Ctor;\n+            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n+            if (Ctor === undefined) {\n+                \u002F\u002F return a placeholder node for async component, which is rendered\n+                \u002F\u002F as a comment node but preserves all the raw information for the node.\n+                \u002F\u002F the information will be used for async server-rendering and hydration.\n+                return createAsyncPlaceholder(\n+                    asyncFactory,\n+                    data,\n+                    context,\n+                    children,\n+                    tag\n+                )\n+            }\n+        }\n+\n+        data = data || {};\n+\n+        \u002F\u002F resolve constructor options in case global mixins are applied after\n+        \u002F\u002F component constructor creation\n+        resolveConstructorOptions(Ctor);\n+\n+        \u002F\u002F transform component v-model data into props & events\n+        if (isDef(data.model)) {\n+            transformModel(Ctor.options, data);\n+        }\n+\n+        \u002F\u002F extract props\n+        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n+\n+        \u002F\u002F functional component\n+        if (isTrue(Ctor.options.functional)) {\n+            return createFunctionalComponent(Ctor, propsData, data, context, children)\n+        }\n+\n+        \u002F\u002F extract listeners, since these needs to be treated as\n+        \u002F\u002F child component listeners instead of DOM listeners\n+        var listeners = data.on;\n+        \u002F\u002F replace with listeners with .native modifier\n+        \u002F\u002F so it gets processed during parent component patch.\n+        data.on = data.nativeOn;\n+\n+        if (isTrue(Ctor.options.abstract)) {\n+            \u002F\u002F abstract components do not keep anything\n+            \u002F\u002F other than props & listeners & slot\n+\n+            \u002F\u002F work around flow\n+            var slot = data.slot;\n+            data = {};\n+            if (slot) {\n+                data.slot = slot;\n+            }\n+        }\n+\n+        \u002F\u002F install component management hooks onto the placeholder node\n+        installComponentHooks(data);\n+\n+        \u002F\u002F return a placeholder vnode\n+        var name = Ctor.options.name || tag;\n+        var vnode = new VNode(\n+            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n+            data, undefined, undefined, undefined, context,\n+            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n+            asyncFactory\n+        );\n+\n+        return vnode\n+    }\n+\n+    function createComponentInstanceForVnode (\n+        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\n+        parent \u002F\u002F activeInstance in lifecycle state\n+    ) {\n+        var options = {\n+            _isComponent: true,\n+            _parentVnode: vnode,\n+            parent: parent\n+        };\n+        \u002F\u002F check inline-template render functions\n+        var inlineTemplate = vnode.data.inlineTemplate;\n+        if (isDef(inlineTemplate)) {\n+            options.render = inlineTemplate.render;\n+            options.staticRenderFns = inlineTemplate.staticRenderFns;\n+        }\n+        return new vnode.componentOptions.Ctor(options)\n+    }\n+\n+    function installComponentHooks (data) {\n+        var hooks = data.hook || (data.hook = {});\n+        for (var i = 0; i \u003C hooksToMerge.length; i++) {\n+            var key = hooksToMerge[i];\n+            var existing = hooks[key];\n+            var toMerge = componentVNodeHooks[key];\n+            if (existing !== toMerge && !(existing && existing._merged)) {\n+                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n+            }\n+        }\n+    }\n+\n+    function mergeHook$1 (f1, f2) {\n+        var merged = function (a, b) {\n+            \u002F\u002F flow complains about extra args which is why we use any\n+            f1(a, b);\n+            f2(a, b);\n+        };\n+        merged._merged = true;\n+        return merged\n+    }\n+\n+    \u002F\u002F transform component v-model info (value and callback) into\n+    \u002F\u002F prop and event handler respectively.\n+    function transformModel (options, data) {\n+        var prop = (options.model && options.model.prop) || 'value';\n+        var event = (options.model && options.model.event) || 'input'\n+        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n+        var on = data.on || (data.on = {});\n+        var existing = on[event];\n+        var callback = data.model.callback;\n+        if (isDef(existing)) {\n+            if (\n+                Array.isArray(existing)\n+                    ? existing.indexOf(callback) === -1\n+                    : existing !== callback\n+            ) {\n+                on[event] = [callback].concat(existing);\n+            }\n+        } else {\n+            on[event] = callback;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var SIMPLE_NORMALIZE = 1;\n+    var ALWAYS_NORMALIZE = 2;\n+\n+    \u002F\u002F wrapper function for providing a more flexible interface\n+    \u002F\u002F without getting yelled at by flow\n+    function createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType,\n+        alwaysNormalize\n+    ) {\n+        if (Array.isArray(data) || isPrimitive(data)) {\n+            normalizationType = children;\n+            children = data;\n+            data = undefined;\n+        }\n+        if (isTrue(alwaysNormalize)) {\n+            normalizationType = ALWAYS_NORMALIZE;\n+        }\n+        return _createElement(context, tag, data, children, normalizationType)\n+    }\n+\n+    function _createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType\n+    ) {\n+        if (isDef(data) && isDef((data).__ob__)) {\n+            warn(\n+                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n+                'Always create fresh vnode data objects in each render!',\n+                context\n+            );\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F object syntax in v-bind\n+        if (isDef(data) && isDef(data.is)) {\n+            tag = data.is;\n+        }\n+        if (!tag) {\n+            \u002F\u002F in case of component :is set to falsy value\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F warn against non-primitive key\n+        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n+        ) {\n+            {\n+                warn(\n+                    'Avoid using non-primitive value as key, ' +\n+                    'use string\u002Fnumber value instead.',\n+                    context\n+                );\n+            }\n+        }\n+        \u002F\u002F support single function children as default scoped slot\n+        if (Array.isArray(children) &&\n+            typeof children[0] === 'function'\n+        ) {\n+            data = data || {};\n+            data.scopedSlots = { default: children[0] };\n+            children.length = 0;\n+        }\n+        if (normalizationType === ALWAYS_NORMALIZE) {\n+            children = normalizeChildren(children);\n+        } else if (normalizationType === SIMPLE_NORMALIZE) {\n+            children = simpleNormalizeChildren(children);\n+        }\n+        var vnode, ns;\n+        if (typeof tag === 'string') {\n+            var Ctor;\n+            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n+            if (config.isReservedTag(tag)) {\n+                \u002F\u002F platform built-in elements\n+                vnode = new VNode(\n+                    config.parsePlatformTagName(tag), data, children,\n+                    undefined, undefined, context\n+                );\n+            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n+                \u002F\u002F component\n+                vnode = createComponent(Ctor, data, context, children, tag);\n+            } else {\n+                \u002F\u002F unknown or unlisted namespaced elements\n+                \u002F\u002F check at runtime because it may get assigned a namespace when its\n+                \u002F\u002F parent normalizes children\n+                vnode = new VNode(\n+                    tag, data, children,\n+                    undefined, undefined, context\n+                );\n+            }\n+        } else {\n+            \u002F\u002F direct component options \u002F constructor\n+            vnode = createComponent(tag, data, context, children);\n+        }\n+        if (Array.isArray(vnode)) {\n+            return vnode\n+        } else if (isDef(vnode)) {\n+            if (isDef(ns)) { applyNS(vnode, ns); }\n+            if (isDef(data)) { registerDeepBindings(data); }\n+            return vnode\n+        } else {\n+            return createEmptyVNode()\n+        }\n+    }\n+\n+    function applyNS (vnode, ns, force) {\n+        vnode.ns = ns;\n+        if (vnode.tag === 'foreignObject') {\n+            \u002F\u002F use default namespace inside foreignObject\n+            ns = undefined;\n+            force = true;\n+        }\n+        if (isDef(vnode.children)) {\n+            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\n+                var child = vnode.children[i];\n+                if (isDef(child.tag) && (\n+                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n+                    applyNS(child, ns, force);\n+                }\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F ref #5318\n+    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\n+    \u002F\u002F :class are used on slot nodes\n+    function registerDeepBindings (data) {\n+        if (isObject(data.style)) {\n+            traverse(data.style);\n+        }\n+        if (isObject(data.class)) {\n+            traverse(data.class);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initRender (vm) {\n+        vm._vnode = null; \u002F\u002F the root of the child tree\n+        vm._staticTrees = null; \u002F\u002F v-once cached trees\n+        var options = vm.$options;\n+        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\n+        var renderContext = parentVnode && parentVnode.context;\n+        vm.$slots = resolveSlots(options._renderChildren, renderContext);\n+        vm.$scopedSlots = emptyObject;\n+        \u002F\u002F bind the createElement fn to this instance\n+        \u002F\u002F so that we get proper render context inside it.\n+        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\n+        \u002F\u002F internal version is used by render functions compiled from templates\n+        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n+        \u002F\u002F normalization is always applied for the public version, used in\n+        \u002F\u002F user-written render functions.\n+        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n+\n+        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\n+        \u002F\u002F they need to be reactive so that HOCs using them are always updated\n+        var parentData = parentVnode && parentVnode.data;\n+\n+      \u002F* istanbul ignore else *\u002F\n+        {\n+            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n+            }, true);\n+            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n+            }, true);\n+        }\n+    }\n+\n+    var currentRenderingInstance = null;\n+\n+    function renderMixin (Vue) {\n+        \u002F\u002F install runtime convenience helpers\n+        installRenderHelpers(Vue.prototype);\n+\n+        Vue.prototype.$nextTick = function (fn) {\n+            return nextTick(fn, this)\n+        };\n+\n+        Vue.prototype._render = function () {\n+            var vm = this;\n+            var ref = vm.$options;\n+            var render = ref.render;\n+            var _parentVnode = ref._parentVnode;\n+\n+            if (_parentVnode) {\n+                vm.$scopedSlots = normalizeScopedSlots(\n+                    _parentVnode.data.scopedSlots,\n+                    vm.$slots,\n+                    vm.$scopedSlots\n+                );\n+            }\n+\n+            \u002F\u002F set parent vnode. this allows render functions to have access\n+            \u002F\u002F to the data on the placeholder node.\n+            vm.$vnode = _parentVnode;\n+            \u002F\u002F render self\n+            var vnode;\n+            try {\n+                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\n+                \u002F\u002F separately from one another. Nested component's render fns are called\n+                \u002F\u002F when parent component is patched.\n+                currentRenderingInstance = vm;\n+                vnode = render.call(vm._renderProxy, vm.$createElement);\n+            } catch (e) {\n+                handleError(e, vm, \"render\");\n+                \u002F\u002F return error render result,\n+                \u002F\u002F or previous vnode to prevent render error causing blank component\n+              \u002F* istanbul ignore else *\u002F\n+                if (vm.$options.renderError) {\n+                    try {\n+                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n+                    } catch (e) {\n+                        handleError(e, vm, \"renderError\");\n+                        vnode = vm._vnode;\n+                    }\n+                } else {\n+                    vnode = vm._vnode;\n+                }\n+            } finally {\n+                currentRenderingInstance = null;\n+            }\n+            \u002F\u002F if the returned array contains only a single node, allow it\n+            if (Array.isArray(vnode) && vnode.length === 1) {\n+                vnode = vnode[0];\n+            }\n+            \u002F\u002F return empty vnode in case the render function errored out\n+            if (!(vnode instanceof VNode)) {\n+                if (Array.isArray(vnode)) {\n+                    warn(\n+                        'Multiple root nodes returned from render function. Render function ' +\n+                        'should return a single root node.',\n+                        vm\n+                    );\n+                }\n+                vnode = createEmptyVNode();\n+            }\n+            \u002F\u002F set parent\n+            vnode.parent = _parentVnode;\n+            return vnode\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function ensureCtor (comp, base) {\n+        if (\n+            comp.__esModule ||\n+            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n+        ) {\n+            comp = comp.default;\n+        }\n+        return isObject(comp)\n+            ? base.extend(comp)\n+            : comp\n+    }\n+\n+    function createAsyncPlaceholder (\n+        factory,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        var node = createEmptyVNode();\n+        node.asyncFactory = factory;\n+        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n+        return node\n+    }\n+\n+    function resolveAsyncComponent (\n+        factory,\n+        baseCtor\n+    ) {\n+        if (isTrue(factory.error) && isDef(factory.errorComp)) {\n+            return factory.errorComp\n+        }\n+\n+        if (isDef(factory.resolved)) {\n+            return factory.resolved\n+        }\n+\n+        var owner = currentRenderingInstance;\n+        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n+            \u002F\u002F already pending\n+            factory.owners.push(owner);\n+        }\n+\n+        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n+            return factory.loadingComp\n+        }\n+\n+        if (owner && !isDef(factory.owners)) {\n+            var owners = factory.owners = [owner];\n+            var sync = true;\n+            var timerLoading = null;\n+            var timerTimeout = null\n+\n+            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n+\n+            var forceRender = function (renderCompleted) {\n+                for (var i = 0, l = owners.length; i \u003C l; i++) {\n+                    (owners[i]).$forceUpdate();\n+                }\n+\n+                if (renderCompleted) {\n+                    owners.length = 0;\n+                    if (timerLoading !== null) {\n+                        clearTimeout(timerLoading);\n+                        timerLoading = null;\n+                    }\n+                    if (timerTimeout !== null) {\n+                        clearTimeout(timerTimeout);\n+                        timerTimeout = null;\n+                    }\n+                }\n+            };\n+\n+            var resolve = once(function (res) {\n+                \u002F\u002F cache resolved\n+                factory.resolved = ensureCtor(res, baseCtor);\n+                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\n+                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\n+                if (!sync) {\n+                    forceRender(true);\n+                } else {\n+                    owners.length = 0;\n+                }\n+            });\n+\n+            var reject = once(function (reason) {\n+                warn(\n+                    \"Failed to resolve async component: \" + (String(factory)) +\n+                    (reason ? (\"\\nReason: \" + reason) : '')\n+                );\n+                if (isDef(factory.errorComp)) {\n+                    factory.error = true;\n+                    forceRender(true);\n+                }\n+            });\n+\n+            var res = factory(resolve, reject);\n+\n+            if (isObject(res)) {\n+                if (isPromise(res)) {\n+                    \u002F\u002F () => Promise\n+                    if (isUndef(factory.resolved)) {\n+                        res.then(resolve, reject);\n+                    }\n+                } else if (isPromise(res.component)) {\n+                    res.component.then(resolve, reject);\n+\n+                    if (isDef(res.error)) {\n+                        factory.errorComp = ensureCtor(res.error, baseCtor);\n+                    }\n+\n+                    if (isDef(res.loading)) {\n+                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\n+                        if (res.delay === 0) {\n+                            factory.loading = true;\n+                        } else {\n+                            timerLoading = setTimeout(function () {\n+                                timerLoading = null;\n+                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\n+                                    factory.loading = true;\n+                                    forceRender(false);\n+                                }\n+                            }, res.delay || 200);\n+                        }\n+                    }\n+\n+                    if (isDef(res.timeout)) {\n+                        timerTimeout = setTimeout(function () {\n+                            timerTimeout = null;\n+                            if (isUndef(factory.resolved)) {\n+                                reject(\n+                                    \"timeout (\" + (res.timeout) + \"ms)\"\n+                                );\n+                            }\n+                        }, res.timeout);\n+                    }\n+                }\n+            }\n+\n+            sync = false;\n+            \u002F\u002F return in case resolved synchronously\n+            return factory.loading\n+                ? factory.loadingComp\n+                : factory.resolved\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isAsyncPlaceholder (node) {\n+        return node.isComment && node.asyncFactory\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function getFirstComponentChild (children) {\n+        if (Array.isArray(children)) {\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var c = children[i];\n+                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n+                    return c\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    function initEvents (vm) {\n+        vm._events = Object.create(null);\n+        vm._hasHookEvent = false;\n+        \u002F\u002F init parent attached events\n+        var listeners = vm.$options._parentListeners;\n+        if (listeners) {\n+            updateComponentListeners(vm, listeners);\n+        }\n+    }\n+\n+    var target;\n+\n+    function add (event, fn) {\n+        target.$on(event, fn);\n+    }\n+\n+    function remove$1 (event, fn) {\n+        target.$off(event, fn);\n+    }\n+\n+    function createOnceHandler (event, fn) {\n+        var _target = target;\n+        return function onceHandler () {\n+            var res = fn.apply(null, arguments);\n+            if (res !== null) {\n+                _target.$off(event, onceHandler);\n+            }\n+        }\n+    }\n+\n+    function updateComponentListeners (\n+        vm,\n+        listeners,\n+        oldListeners\n+    ) {\n+        target = vm;\n+        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n+        target = undefined;\n+    }\n+\n+    function eventsMixin (Vue) {\n+        var hookRE = \u002F^hook:\u002F;\n+        Vue.prototype.$on = function (event, fn) {\n+            var vm = this;\n+            if (Array.isArray(event)) {\n+                for (var i = 0, l = event.length; i \u003C l; i++) {\n+                    vm.$on(event[i], fn);\n+                }\n+            } else {\n+                (vm._events[event] || (vm._events[event] = [])).push(fn);\n+                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\n+                \u002F\u002F instead of a hash lookup\n+                if (hookRE.test(event)) {\n+                    vm._hasHookEvent = true;\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$once = function (event, fn) {\n+            var vm = this;\n+            function on () {\n+                vm.$off(event, on);\n+                fn.apply(vm, arguments);\n+            }\n+            on.fn = fn;\n+            vm.$on(event, on);\n+            return vm\n+        };\n+\n+        Vue.prototype.$off = function (event, fn) {\n+            var vm = this;\n+            \u002F\u002F all\n+            if (!arguments.length) {\n+                vm._events = Object.create(null);\n+                return vm\n+            }\n+            \u002F\u002F array of events\n+            if (Array.isArray(event)) {\n+                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\n+                    vm.$off(event[i$1], fn);\n+                }\n+                return vm\n+            }\n+            \u002F\u002F specific event\n+            var cbs = vm._events[event];\n+            if (!cbs) {\n+                return vm\n+            }\n+            if (!fn) {\n+                vm._events[event] = null;\n+                return vm\n+            }\n+            \u002F\u002F specific handler\n+            var cb;\n+            var i = cbs.length;\n+            while (i--) {\n+                cb = cbs[i];\n+                if (cb === fn || cb.fn === fn) {\n+                    cbs.splice(i, 1);\n+                    break\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$emit = function (event) {\n+            var vm = this;\n+            {\n+                var lowerCaseEvent = event.toLowerCase();\n+                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n+                    tip(\n+                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n+                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n+                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\n+                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\n+                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n+                    );\n+                }\n+            }\n+            var cbs = vm._events[event];\n+            if (cbs) {\n+                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n+                var args = toArray(arguments, 1);\n+                var info = \"event handler for \\\"\" + event + \"\\\"\";\n+                for (var i = 0, l = cbs.length; i \u003C l; i++) {\n+                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n+                }\n+            }\n+            return vm\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var activeInstance = null;\n+    var isUpdatingChildComponent = false;\n+\n+    function setActiveInstance(vm) {\n+        var prevActiveInstance = activeInstance;\n+        activeInstance = vm;\n+        return function () {\n+            activeInstance = prevActiveInstance;\n+        }\n+    }\n+\n+    function initLifecycle (vm) {\n+        var options = vm.$options;\n+\n+        \u002F\u002F locate first non-abstract parent\n+        var parent = options.parent;\n+        if (parent && !options.abstract) {\n+            while (parent.$options.abstract && parent.$parent) {\n+                parent = parent.$parent;\n+            }\n+            parent.$children.push(vm);\n+        }\n+\n+        vm.$parent = parent;\n+        vm.$root = parent ? parent.$root : vm;\n+\n+        vm.$children = [];\n+        vm.$refs = {};\n+\n+        vm._watcher = null;\n+        vm._inactive = null;\n+        vm._directInactive = false;\n+        vm._isMounted = false;\n+        vm._isDestroyed = false;\n+        vm._isBeingDestroyed = false;\n+    }\n+\n+    function lifecycleMixin (Vue) {\n+        Vue.prototype._update = function (vnode, hydrating) {\n+            var vm = this;\n+            var prevEl = vm.$el;\n+            var prevVnode = vm._vnode;\n+            var restoreActiveInstance = setActiveInstance(vm);\n+            vm._vnode = vnode;\n+            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\n+            \u002F\u002F based on the rendering backend used.\n+            if (!prevVnode) {\n+                \u002F\u002F initial render\n+                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\n+            } else {\n+                \u002F\u002F updates\n+                vm.$el = vm.__patch__(prevVnode, vnode);\n+            }\n+            restoreActiveInstance();\n+            \u002F\u002F update __vue__ reference\n+            if (prevEl) {\n+                prevEl.__vue__ = null;\n+            }\n+            if (vm.$el) {\n+                vm.$el.__vue__ = vm;\n+            }\n+            \u002F\u002F if parent is an HOC, update its $el as well\n+            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n+                vm.$parent.$el = vm.$el;\n+            }\n+            \u002F\u002F updated hook is called by the scheduler to ensure that children are\n+            \u002F\u002F updated in a parent's updated hook.\n+        };\n+\n+        Vue.prototype.$forceUpdate = function () {\n+            var vm = this;\n+            if (vm._watcher) {\n+                vm._watcher.update();\n+            }\n+        };\n+\n+        Vue.prototype.$destroy = function () {\n+            var vm = this;\n+            if (vm._isBeingDestroyed) {\n+                return\n+            }\n+            callHook(vm, 'beforeDestroy');\n+            vm._isBeingDestroyed = true;\n+            \u002F\u002F remove self from parent\n+            var parent = vm.$parent;\n+            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n+                remove(parent.$children, vm);\n+            }\n+            \u002F\u002F teardown watchers\n+            if (vm._watcher) {\n+                vm._watcher.teardown();\n+            }\n+            var i = vm._watchers.length;\n+            while (i--) {\n+                vm._watchers[i].teardown();\n+            }\n+            \u002F\u002F remove reference from data ob\n+            \u002F\u002F frozen object may not have observer.\n+            if (vm._data.__ob__) {\n+                vm._data.__ob__.vmCount--;\n+            }\n+            \u002F\u002F call the last hook...\n+            vm._isDestroyed = true;\n+            \u002F\u002F invoke destroy hooks on current rendered tree\n+            vm.__patch__(vm._vnode, null);\n+            \u002F\u002F fire destroyed hook\n+            callHook(vm, 'destroyed');\n+            \u002F\u002F turn off all instance listeners.\n+            vm.$off();\n+            \u002F\u002F remove __vue__ reference\n+            if (vm.$el) {\n+                vm.$el.__vue__ = null;\n+            }\n+            \u002F\u002F release circular reference (#6759)\n+            if (vm.$vnode) {\n+                vm.$vnode.parent = null;\n+            }\n+        };\n+    }\n+\n+    function mountComponent (\n+        vm,\n+        el,\n+        hydrating\n+    ) {\n+        vm.$el = el;\n+        if (!vm.$options.render) {\n+            vm.$options.render = createEmptyVNode;\n+            {\n+              \u002F* istanbul ignore if *\u002F\n+                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n+                    vm.$options.el || el) {\n+                    warn(\n+                        'You are using the runtime-only build of Vue where the template ' +\n+                        'compiler is not available. Either pre-compile the templates into ' +\n+                        'render functions, or use the compiler-included build.',\n+                        vm\n+                    );\n+                } else {\n+                    warn(\n+                        'Failed to mount component: template or render function not defined.',\n+                        vm\n+                    );\n+                }\n+            }\n+        }\n+        callHook(vm, 'beforeMount');\n+\n+        var updateComponent;\n+      \u002F* istanbul ignore if *\u002F\n+        if (config.performance && mark) {\n+            updateComponent = function () {\n+                var name = vm._name;\n+                var id = vm._uid;\n+                var startTag = \"vue-perf-start:\" + id;\n+                var endTag = \"vue-perf-end:\" + id;\n+\n+                mark(startTag);\n+                var vnode = vm._render();\n+                mark(endTag);\n+                measure((\"vue \" + name + \" render\"), startTag, endTag);\n+\n+                mark(startTag);\n+                vm._update(vnode, hydrating);\n+                mark(endTag);\n+                measure((\"vue \" + name + \" patch\"), startTag, endTag);\n+            };\n+        } else {\n+            updateComponent = function () {\n+                vm._update(vm._render(), hydrating);\n+            };\n+        }\n+\n+        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\n+        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\n+        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\n+        new Watcher(vm, updateComponent, noop, {\n+            before: function before () {\n+                if (vm._isMounted && !vm._isDestroyed) {\n+                    callHook(vm, 'beforeUpdate');\n+                }\n+            }\n+        }, true \u002F* isRenderWatcher *\u002F);\n+        hydrating = false;\n+\n+        \u002F\u002F manually mounted instance, call mounted on self\n+        \u002F\u002F mounted is called for render-created child components in its inserted hook\n+        if (vm.$vnode == null) {\n+            vm._isMounted = true;\n+            callHook(vm, 'mounted');\n+        }\n+        return vm\n+    }\n+\n+    function updateChildComponent (\n+        vm,\n+        propsData,\n+        listeners,\n+        parentVnode,\n+        renderChildren\n+    ) {\n+        {\n+            isUpdatingChildComponent = true;\n+        }\n+\n+        \u002F\u002F determine whether component has slot children\n+        \u002F\u002F we need to do this before overwriting $options._renderChildren.\n+\n+        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\n+        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\n+        \u002F\u002F \"$stable\" marker.\n+        var newScopedSlots = parentVnode.data.scopedSlots;\n+        var oldScopedSlots = vm.$scopedSlots;\n+        var hasDynamicScopedSlot = !!(\n+            (newScopedSlots && !newScopedSlots.$stable) ||\n+            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n+            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n+        );\n+\n+        \u002F\u002F Any static slot children from the parent may have changed during parent's\n+        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\n+        \u002F\u002F update is necessary to ensure correctness.\n+        var needsForceUpdate = !!(\n+            renderChildren ||               \u002F\u002F has new static slots\n+            vm.$options._renderChildren ||  \u002F\u002F has old static slots\n+            hasDynamicScopedSlot\n+        );\n+\n+        vm.$options._parentVnode = parentVnode;\n+        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\n+\n+        if (vm._vnode) { \u002F\u002F update child tree's parent\n+            vm._vnode.parent = parentVnode;\n+        }\n+        vm.$options._renderChildren = renderChildren;\n+\n+        \u002F\u002F update $attrs and $listeners hash\n+        \u002F\u002F these are also reactive so they may trigger child update if the child\n+        \u002F\u002F used them during render\n+        vm.$attrs = parentVnode.data.attrs || emptyObject;\n+        vm.$listeners = listeners || emptyObject;\n+\n+        \u002F\u002F update props\n+        if (propsData && vm.$options.props) {\n+            toggleObserving(false);\n+            var props = vm._props;\n+            var propKeys = vm.$options._propKeys || [];\n+            for (var i = 0; i \u003C propKeys.length; i++) {\n+                var key = propKeys[i];\n+                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\n+                props[key] = validateProp(key, propOptions, propsData, vm);\n+            }\n+            toggleObserving(true);\n+            \u002F\u002F keep a copy of raw propsData\n+            vm.$options.propsData = propsData;\n+        }\n+\n+        \u002F\u002F update listeners\n+        listeners = listeners || emptyObject;\n+        var oldListeners = vm.$options._parentListeners;\n+        vm.$options._parentListeners = listeners;\n+        updateComponentListeners(vm, listeners, oldListeners);\n+\n+        \u002F\u002F resolve slots + force update if has children\n+        if (needsForceUpdate) {\n+            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n+            vm.$forceUpdate();\n+        }\n+\n+        {\n+            isUpdatingChildComponent = false;\n+        }\n+    }\n+\n+    function isInInactiveTree (vm) {\n+        while (vm && (vm = vm.$parent)) {\n+            if (vm._inactive) { return true }\n+        }\n+        return false\n+    }\n+\n+    function activateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = false;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        } else if (vm._directInactive) {\n+            return\n+        }\n+        if (vm._inactive || vm._inactive === null) {\n+            vm._inactive = false;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                activateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'activated');\n+        }\n+    }\n+\n+    function deactivateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = true;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        }\n+        if (!vm._inactive) {\n+            vm._inactive = true;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                deactivateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'deactivated');\n+        }\n+    }\n+\n+    function callHook (vm, hook) {\n+        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\n+        pushTarget();\n+        var handlers = vm.$options[hook];\n+        var info = hook + \" hook\";\n+        if (handlers) {\n+            for (var i = 0, j = handlers.length; i \u003C j; i++) {\n+                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n+            }\n+        }\n+        if (vm._hasHookEvent) {\n+            vm.$emit('hook:' + hook);\n+        }\n+        popTarget();\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var MAX_UPDATE_COUNT = 100;\n+\n+    var queue = [];\n+    var activatedChildren = [];\n+    var has = {};\n+    var circular = {};\n+    var waiting = false;\n+    var flushing = false;\n+    var index = 0;\n+\n+    \u002F**\n+     * Reset the scheduler's state.\n+     *\u002F\n+    function resetSchedulerState () {\n+        index = queue.length = activatedChildren.length = 0;\n+        has = {};\n+        {\n+            circular = {};\n+        }\n+        waiting = flushing = false;\n+    }\n+\n+    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\n+    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\n+    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\n+    \u002F\u002F every time the scheduler flushes and use that for all event listeners\n+    \u002F\u002F attached during that flush.\n+    var currentFlushTimestamp = 0;\n+\n+    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\n+    var getNow = Date.now;\n+\n+    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\n+    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\n+    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\n+    \u002F\u002F same timestamp type when saving the flush timestamp.\n+    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\n+    \u002F\u002F implementations (#9632)\n+    if (inBrowser && !isIE) {\n+        var performance = window.performance;\n+        if (\n+            performance &&\n+            typeof performance.now === 'function' &&\n+            getNow() > document.createEvent('Event').timeStamp\n+        ) {\n+            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\n+            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\n+            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\n+            \u002F\u002F well.\n+            getNow = function () { return performance.now(); };\n+        }\n+    }\n+\n+    \u002F**\n+     * Flush both queues and run the watchers.\n+     *\u002F\n+    function flushSchedulerQueue () {\n+        currentFlushTimestamp = getNow();\n+        flushing = true;\n+        var watcher, id;\n+\n+        \u002F\u002F Sort queue before flush.\n+        \u002F\u002F This ensures that:\n+        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\n+        \u002F\u002F    created before the child)\n+        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\n+        \u002F\u002F    user watchers are created before the render watcher)\n+        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\n+        \u002F\u002F    its watchers can be skipped.\n+        queue.sort(function (a, b) { return a.id - b.id; });\n+\n+        \u002F\u002F do not cache length because more watchers might be pushed\n+        \u002F\u002F as we run existing watchers\n+        for (index = 0; index \u003C queue.length; index++) {\n+            watcher = queue[index];\n+            if (watcher.before) {\n+                watcher.before();\n+            }\n+            id = watcher.id;\n+            has[id] = null;\n+            watcher.run();\n+            \u002F\u002F in dev build, check and stop circular updates.\n+            if (has[id] != null) {\n+                circular[id] = (circular[id] || 0) + 1;\n+                if (circular[id] > MAX_UPDATE_COUNT) {\n+                    warn(\n+                        'You may have an infinite update loop ' + (\n+                            watcher.user\n+                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n+                                : \"in a component render function.\"\n+                        ),\n+                        watcher.vm\n+                    );\n+                    break\n+                }\n+            }\n+        }\n+\n+        \u002F\u002F keep copies of post queues before resetting state\n+        var activatedQueue = activatedChildren.slice();\n+        var updatedQueue = queue.slice();\n+\n+        resetSchedulerState();\n+\n+        \u002F\u002F call component updated and activated hooks\n+        callActivatedHooks(activatedQueue);\n+        callUpdatedHooks(updatedQueue);\n+\n+        \u002F\u002F devtool hook\n+      \u002F* istanbul ignore if *\u002F\n+        if (devtools && config.devtools) {\n+            devtools.emit('flush');\n+        }\n+    }\n+\n+    function callUpdatedHooks (queue) {\n+        var i = queue.length;\n+        while (i--) {\n+            var watcher = queue[i];\n+            var vm = watcher.vm;\n+            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n+                callHook(vm, 'updated');\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Queue a kept-alive component that was activated during patch.\n+     * The queue will be processed after the entire tree has been patched.\n+     *\u002F\n+    function queueActivatedComponent (vm) {\n+        \u002F\u002F setting _inactive to false here so that a render function can\n+        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\n+        vm._inactive = false;\n+        activatedChildren.push(vm);\n+    }\n+\n+    function callActivatedHooks (queue) {\n+        for (var i = 0; i \u003C queue.length; i++) {\n+            queue[i]._inactive = true;\n+            activateChildComponent(queue[i], true \u002F* true *\u002F);\n+        }\n+    }\n+\n+    \u002F**\n+     * Push a watcher into the watcher queue.\n+     * Jobs with duplicate IDs will be skipped unless it's\n+     * pushed when the queue is being flushed.\n+     *\u002F\n+    function queueWatcher (watcher) {\n+        var id = watcher.id;\n+        if (has[id] == null) {\n+            has[id] = true;\n+            if (!flushing) {\n+                queue.push(watcher);\n+            } else {\n+                \u002F\u002F if already flushing, splice the watcher based on its id\n+                \u002F\u002F if already past its id, it will be run next immediately.\n+                var i = queue.length - 1;\n+                while (i > index && queue[i].id > watcher.id) {\n+                    i--;\n+                }\n+                queue.splice(i + 1, 0, watcher);\n+            }\n+            \u002F\u002F queue the flush\n+            if (!waiting) {\n+                waiting = true;\n+\n+                if (!config.async) {\n+                    flushSchedulerQueue();\n+                    return\n+                }\n+                nextTick(flushSchedulerQueue);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var uid$2 = 0;\n+\n+    \u002F**\n+     * A watcher parses an expression, collects dependencies,\n+     * and fires callback when the expression value changes.\n+     * This is used for both the $watch() api and directives.\n+     *\u002F\n+    var Watcher = function Watcher (\n+        vm,\n+        expOrFn,\n+        cb,\n+        options,\n+        isRenderWatcher\n+    ) {\n+        this.vm = vm;\n+        if (isRenderWatcher) {\n+            vm._watcher = this;\n+        }\n+        vm._watchers.push(this);\n+        \u002F\u002F options\n+        if (options) {\n+            this.deep = !!options.deep;\n+            this.user = !!options.user;\n+            this.lazy = !!options.lazy;\n+            this.sync = !!options.sync;\n+            this.before = options.before;\n+        } else {\n+            this.deep = this.user = this.lazy = this.sync = false;\n+        }\n+        this.cb = cb;\n+        this.id = ++uid$2; \u002F\u002F uid for batching\n+        this.active = true;\n+        this.dirty = this.lazy; \u002F\u002F for lazy watchers\n+        this.deps = [];\n+        this.newDeps = [];\n+        this.depIds = new _Set();\n+        this.newDepIds = new _Set();\n+        this.expression = expOrFn.toString();\n+        \u002F\u002F parse expression for getter\n+        if (typeof expOrFn === 'function') {\n+            this.getter = expOrFn;\n+        } else {\n+            this.getter = parsePath(expOrFn);\n+            if (!this.getter) {\n+                this.getter = noop;\n+                warn(\n+                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n+                    'Watcher only accepts simple dot-delimited paths. ' +\n+                    'For full control, use a function instead.',\n+                    vm\n+                );\n+            }\n+        }\n+        this.value = this.lazy\n+            ? undefined\n+            : this.get();\n+    };\n+\n+    \u002F**\n+     * Evaluate the getter, and re-collect dependencies.\n+     *\u002F\n+    Watcher.prototype.get = function get () {\n+        pushTarget(this);\n+        var value;\n+        var vm = this.vm;\n+        try {\n+            value = this.getter.call(vm, vm);\n+        } catch (e) {\n+            if (this.user) {\n+                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+            } else {\n+                throw e\n+            }\n+        } finally {\n+            \u002F\u002F \"touch\" every property so they are all tracked as\n+            \u002F\u002F dependencies for deep watching\n+            if (this.deep) {\n+                traverse(value);\n+            }\n+            popTarget();\n+            this.cleanupDeps();\n+        }\n+        return value\n+    };\n+\n+    \u002F**\n+     * Add a dependency to this directive.\n+     *\u002F\n+    Watcher.prototype.addDep = function addDep (dep) {\n+        var id = dep.id;\n+        if (!this.newDepIds.has(id)) {\n+            this.newDepIds.add(id);\n+            this.newDeps.push(dep);\n+            if (!this.depIds.has(id)) {\n+                dep.addSub(this);\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Clean up for dependency collection.\n+     *\u002F\n+    Watcher.prototype.cleanupDeps = function cleanupDeps () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            var dep = this.deps[i];\n+            if (!this.newDepIds.has(dep.id)) {\n+                dep.removeSub(this);\n+            }\n+        }\n+        var tmp = this.depIds;\n+        this.depIds = this.newDepIds;\n+        this.newDepIds = tmp;\n+        this.newDepIds.clear();\n+        tmp = this.deps;\n+        this.deps = this.newDeps;\n+        this.newDeps = tmp;\n+        this.newDeps.length = 0;\n+    };\n+\n+    \u002F**\n+     * Subscriber interface.\n+     * Will be called when a dependency changes.\n+     *\u002F\n+    Watcher.prototype.update = function update () {\n+      \u002F* istanbul ignore else *\u002F\n+        if (this.lazy) {\n+            this.dirty = true;\n+        } else if (this.sync) {\n+            this.run();\n+        } else {\n+            queueWatcher(this);\n+        }\n+    };\n+\n+    \u002F**\n+     * Scheduler job interface.\n+     * Will be called by the scheduler.\n+     *\u002F\n+    Watcher.prototype.run = function run () {\n+        if (this.active) {\n+            var value = this.get();\n+            if (\n+                value !== this.value ||\n+                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\n+                \u002F\u002F when the value is the same, because the value may\n+                \u002F\u002F have mutated.\n+                isObject(value) ||\n+                this.deep\n+            ) {\n+                \u002F\u002F set new value\n+                var oldValue = this.value;\n+                this.value = value;\n+                if (this.user) {\n+                    try {\n+                        this.cb.call(this.vm, value, oldValue);\n+                    } catch (e) {\n+                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+                    }\n+                } else {\n+                    this.cb.call(this.vm, value, oldValue);\n+                }\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Evaluate the value of the watcher.\n+     * This only gets called for lazy watchers.\n+     *\u002F\n+    Watcher.prototype.evaluate = function evaluate () {\n+        this.value = this.get();\n+        this.dirty = false;\n+    };\n+\n+    \u002F**\n+     * Depend on all deps collected by this watcher.\n+     *\u002F\n+    Watcher.prototype.depend = function depend () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            this.deps[i].depend();\n+        }\n+    };\n+\n+    \u002F**\n+     * Remove self from all dependencies' subscriber list.\n+     *\u002F\n+    Watcher.prototype.teardown = function teardown () {\n+        if (this.active) {\n+            \u002F\u002F remove self from vm's watcher list\n+            \u002F\u002F this is a somewhat expensive operation so we skip it\n+            \u002F\u002F if the vm is being destroyed.\n+            if (!this.vm._isBeingDestroyed) {\n+                remove(this.vm._watchers, this);\n+            }\n+            var i = this.deps.length;\n+            while (i--) {\n+                this.deps[i].removeSub(this);\n+            }\n+            this.active = false;\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var sharedPropertyDefinition = {\n+        enumerable: true,\n+        configurable: true,\n+        get: noop,\n+        set: noop\n+    };\n+\n+    function proxy (target, sourceKey, key) {\n+        sharedPropertyDefinition.get = function proxyGetter () {\n+            return this[sourceKey][key]\n+        };\n+        sharedPropertyDefinition.set = function proxySetter (val) {\n+            this[sourceKey][key] = val;\n+        };\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function initState (vm) {\n+        vm._watchers = [];\n+        var opts = vm.$options;\n+        if (opts.props) { initProps(vm, opts.props); }\n+        if (opts.methods) { initMethods(vm, opts.methods); }\n+        if (opts.data) {\n+            initData(vm);\n+        } else {\n+            observe(vm._data = {}, true \u002F* asRootData *\u002F);\n+        }\n+        if (opts.computed) { initComputed(vm, opts.computed); }\n+        if (opts.watch && opts.watch !== nativeWatch) {\n+            initWatch(vm, opts.watch);\n+        }\n+    }\n+\n+    function initProps (vm, propsOptions) {\n+        var propsData = vm.$options.propsData || {};\n+        var props = vm._props = {};\n+        \u002F\u002F cache prop keys so that future props updates can iterate using Array\n+        \u002F\u002F instead of dynamic object key enumeration.\n+        var keys = vm.$options._propKeys = [];\n+        var isRoot = !vm.$parent;\n+        \u002F\u002F root instance props should be converted\n+        if (!isRoot) {\n+            toggleObserving(false);\n+        }\n+        var loop = function ( key ) {\n+            keys.push(key);\n+            var value = validateProp(key, propsOptions, propsData, vm);\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                var hyphenatedKey = hyphenate(key);\n+                if (isReservedAttribute(hyphenatedKey) ||\n+                    config.isReservedAttr(hyphenatedKey)) {\n+                    warn(\n+                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n+                        vm\n+                    );\n+                }\n+                defineReactive$$1(props, key, value, function () {\n+                    if (!isRoot && !isUpdatingChildComponent) {\n+                        warn(\n+                            \"Avoid mutating a prop directly since the value will be \" +\n+                            \"overwritten whenever the parent component re-renders. \" +\n+                            \"Instead, use a data or computed property based on the prop's \" +\n+                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    }\n+                });\n+            }\n+            \u002F\u002F static props are already proxied on the component's prototype\n+            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\n+            \u002F\u002F instantiation here.\n+            if (!(key in vm)) {\n+                proxy(vm, \"_props\", key);\n+            }\n+        };\n+\n+        for (var key in propsOptions) loop( key );\n+        toggleObserving(true);\n+    }\n+\n+    function initData (vm) {\n+        var data = vm.$options.data;\n+        data = vm._data = typeof data === 'function'\n+            ? getData(data, vm)\n+            : data || {};\n+        if (!isPlainObject(data)) {\n+            data = {};\n+            warn(\n+                'data functions should return an object:\\n' +\n+                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\n+                vm\n+            );\n+        }\n+        \u002F\u002F proxy data on instance\n+        var keys = Object.keys(data);\n+        var props = vm.$options.props;\n+        var methods = vm.$options.methods;\n+        var i = keys.length;\n+        while (i--) {\n+            var key = keys[i];\n+            {\n+                if (methods && hasOwn(methods, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n+                        vm\n+                    );\n+                }\n+            }\n+            if (props && hasOwn(props, key)) {\n+                warn(\n+                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n+                    \"Use prop default value instead.\",\n+                    vm\n+                );\n+            } else if (!isReserved(key)) {\n+                proxy(vm, \"_data\", key);\n+            }\n+        }\n+        \u002F\u002F observe data\n+        observe(data, true \u002F* asRootData *\u002F);\n+    }\n+\n+    function getData (data, vm) {\n+        \u002F\u002F #7573 disable dep collection when invoking data getters\n+        pushTarget();\n+        try {\n+            return data.call(vm, vm)\n+        } catch (e) {\n+            handleError(e, vm, \"data()\");\n+            return {}\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    var computedWatcherOptions = { lazy: true };\n+\n+    function initComputed (vm, computed) {\n+        \u002F\u002F $flow-disable-line\n+        var watchers = vm._computedWatchers = Object.create(null);\n+        \u002F\u002F computed properties are just getters during SSR\n+        var isSSR = isServerRendering();\n+\n+        for (var key in computed) {\n+            var userDef = computed[key];\n+            var getter = typeof userDef === 'function' ? userDef : userDef.get;\n+            if (getter == null) {\n+                warn(\n+                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n+                    vm\n+                );\n+            }\n+\n+            if (!isSSR) {\n+                \u002F\u002F create internal watcher for the computed property.\n+                watchers[key] = new Watcher(\n+                    vm,\n+                    getter || noop,\n+                    noop,\n+                    computedWatcherOptions\n+                );\n+            }\n+\n+            \u002F\u002F component-defined computed properties are already defined on the\n+            \u002F\u002F component prototype. We only need to define computed properties defined\n+            \u002F\u002F at instantiation here.\n+            if (!(key in vm)) {\n+                defineComputed(vm, key, userDef);\n+            } else {\n+                if (key in vm.$data) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n+                } else if (vm.$options.props && key in vm.$options.props) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n+                }\n+            }\n+        }\n+    }\n+\n+    function defineComputed (\n+        target,\n+        key,\n+        userDef\n+    ) {\n+        var shouldCache = !isServerRendering();\n+        if (typeof userDef === 'function') {\n+            sharedPropertyDefinition.get = shouldCache\n+                ? createComputedGetter(key)\n+                : createGetterInvoker(userDef);\n+            sharedPropertyDefinition.set = noop;\n+        } else {\n+            sharedPropertyDefinition.get = userDef.get\n+                ? shouldCache && userDef.cache !== false\n+                    ? createComputedGetter(key)\n+                    : createGetterInvoker(userDef.get)\n+                : noop;\n+            sharedPropertyDefinition.set = userDef.set || noop;\n+        }\n+        if (sharedPropertyDefinition.set === noop) {\n+            sharedPropertyDefinition.set = function () {\n+                warn(\n+                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n+                    this\n+                );\n+            };\n+        }\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function createComputedGetter (key) {\n+        return function computedGetter () {\n+            var watcher = this._computedWatchers && this._computedWatchers[key];\n+            if (watcher) {\n+                if (watcher.dirty) {\n+                    watcher.evaluate();\n+                }\n+                if (Dep.target) {\n+                    watcher.depend();\n+                }\n+                return watcher.value\n+            }\n+        }\n+    }\n+\n+    function createGetterInvoker(fn) {\n+        return function computedGetter () {\n+            return fn.call(this, this)\n+        }\n+    }\n+\n+    function initMethods (vm, methods) {\n+        var props = vm.$options.props;\n+        for (var key in methods) {\n+            {\n+                if (typeof methods[key] !== 'function') {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n+                        \"Did you reference the function correctly?\",\n+                        vm\n+                    );\n+                }\n+                if (props && hasOwn(props, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n+                        vm\n+                    );\n+                }\n+                if ((key in vm) && isReserved(key)) {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n+                        \"Avoid defining component methods that start with _ or $.\"\n+                    );\n+                }\n+            }\n+            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n+        }\n+    }\n+\n+    function initWatch (vm, watch) {\n+        for (var key in watch) {\n+            var handler = watch[key];\n+            if (Array.isArray(handler)) {\n+                for (var i = 0; i \u003C handler.length; i++) {\n+                    createWatcher(vm, key, handler[i]);\n+                }\n+            } else {\n+                createWatcher(vm, key, handler);\n+            }\n+        }\n+    }\n+\n+    function createWatcher (\n+        vm,\n+        expOrFn,\n+        handler,\n+        options\n+    ) {\n+        if (isPlainObject(handler)) {\n+            options = handler;\n+            handler = handler.handler;\n+        }\n+        if (typeof handler === 'string') {\n+            handler = vm[handler];\n+        }\n+        return vm.$watch(expOrFn, handler, options)\n+    }\n+\n+    function stateMixin (Vue) {\n+        \u002F\u002F flow somehow has problems with directly declared definition object\n+        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\n+        \u002F\u002F the object here.\n+        var dataDef = {};\n+        dataDef.get = function () { return this._data };\n+        var propsDef = {};\n+        propsDef.get = function () { return this._props };\n+        {\n+            dataDef.set = function () {\n+                warn(\n+                    'Avoid replacing instance root $data. ' +\n+                    'Use nested data properties instead.',\n+                    this\n+                );\n+            };\n+            propsDef.set = function () {\n+                warn(\"$props is readonly.\", this);\n+            };\n+        }\n+        Object.defineProperty(Vue.prototype, '$data', dataDef);\n+        Object.defineProperty(Vue.prototype, '$props', propsDef);\n+\n+        Vue.prototype.$set = set;\n+        Vue.prototype.$delete = del;\n+\n+        Vue.prototype.$watch = function (\n+            expOrFn,\n+            cb,\n+            options\n+        ) {\n+            var vm = this;\n+            if (isPlainObject(cb)) {\n+                return createWatcher(vm, expOrFn, cb, options)\n+            }\n+            options = options || {};\n+            options.user = true;\n+            var watcher = new Watcher(vm, expOrFn, cb, options);\n+            if (options.immediate) {\n+                try {\n+                    cb.call(vm, watcher.value);\n+                } catch (error) {\n+                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n+                }\n+            }\n+            return function unwatchFn () {\n+                watcher.teardown();\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid$3 = 0;\n+\n+    function initMixin (Vue) {\n+        Vue.prototype._init = function (options) {\n+            var vm = this;\n+            \u002F\u002F a uid\n+            vm._uid = uid$3++;\n+\n+            var startTag, endTag;\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                startTag = \"vue-perf-start:\" + (vm._uid);\n+                endTag = \"vue-perf-end:\" + (vm._uid);\n+                mark(startTag);\n+            }\n+\n+            \u002F\u002F a flag to avoid this being observed\n+            vm._isVue = true;\n+            \u002F\u002F merge options\n+            if (options && options._isComponent) {\n+                \u002F\u002F optimize internal component instantiation\n+                \u002F\u002F since dynamic options merging is pretty slow, and none of the\n+                \u002F\u002F internal component options needs special treatment.\n+                initInternalComponent(vm, options);\n+            } else {\n+                vm.$options = mergeOptions(\n+                    resolveConstructorOptions(vm.constructor),\n+                    options || {},\n+                    vm\n+                );\n+            }\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                initProxy(vm);\n+            }\n+            \u002F\u002F expose real self\n+            vm._self = vm;\n+            initLifecycle(vm);\n+            initEvents(vm);\n+            initRender(vm);\n+            callHook(vm, 'beforeCreate');\n+            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\n+            initState(vm);\n+            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\n+            callHook(vm, 'created');\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                vm._name = formatComponentName(vm, false);\n+                mark(endTag);\n+                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n+            }\n+\n+            if (vm.$options.el) {\n+                vm.$mount(vm.$options.el);\n+            }\n+        };\n+    }\n+\n+    function initInternalComponent (vm, options) {\n+        var opts = vm.$options = Object.create(vm.constructor.options);\n+        \u002F\u002F doing this because it's faster than dynamic enumeration.\n+        var parentVnode = options._parentVnode;\n+        opts.parent = options.parent;\n+        opts._parentVnode = parentVnode;\n+\n+        var vnodeComponentOptions = parentVnode.componentOptions;\n+        opts.propsData = vnodeComponentOptions.propsData;\n+        opts._parentListeners = vnodeComponentOptions.listeners;\n+        opts._renderChildren = vnodeComponentOptions.children;\n+        opts._componentTag = vnodeComponentOptions.tag;\n+\n+        if (options.render) {\n+            opts.render = options.render;\n+            opts.staticRenderFns = options.staticRenderFns;\n+        }\n+    }\n+\n+    function resolveConstructorOptions (Ctor) {\n+        var options = Ctor.options;\n+        if (Ctor.super) {\n+            var superOptions = resolveConstructorOptions(Ctor.super);\n+            var cachedSuperOptions = Ctor.superOptions;\n+            if (superOptions !== cachedSuperOptions) {\n+                \u002F\u002F super option changed,\n+                \u002F\u002F need to resolve new options.\n+                Ctor.superOptions = superOptions;\n+                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\n+                var modifiedOptions = resolveModifiedOptions(Ctor);\n+                \u002F\u002F update base extend options\n+                if (modifiedOptions) {\n+                    extend(Ctor.extendOptions, modifiedOptions);\n+                }\n+                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n+                if (options.name) {\n+                    options.components[options.name] = Ctor;\n+                }\n+            }\n+        }\n+        return options\n+    }\n+\n+    function resolveModifiedOptions (Ctor) {\n+        var modified;\n+        var latest = Ctor.options;\n+        var sealed = Ctor.sealedOptions;\n+        for (var key in latest) {\n+            if (latest[key] !== sealed[key]) {\n+                if (!modified) { modified = {}; }\n+                modified[key] = latest[key];\n+            }\n+        }\n+        return modified\n+    }\n+\n+    function Vue (options) {\n+        if (!(this instanceof Vue)\n+        ) {\n+            warn('Vue is a constructor and should be called with the `new` keyword');\n+        }\n+        this._init(options);\n+    }\n+\n+    initMixin(Vue);\n+    stateMixin(Vue);\n+    eventsMixin(Vue);\n+    lifecycleMixin(Vue);\n+    renderMixin(Vue);\n+\n+  \u002F*  *\u002F\n+\n+    function initUse (Vue) {\n+        Vue.use = function (plugin) {\n+            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n+            if (installedPlugins.indexOf(plugin) > -1) {\n+                return this\n+            }\n+\n+            \u002F\u002F additional parameters\n+            var args = toArray(arguments, 1);\n+            args.unshift(this);\n+            if (typeof plugin.install === 'function') {\n+                plugin.install.apply(plugin, args);\n+            } else if (typeof plugin === 'function') {\n+                plugin.apply(null, args);\n+            }\n+            installedPlugins.push(plugin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initMixin$1 (Vue) {\n+        Vue.mixin = function (mixin) {\n+            this.options = mergeOptions(this.options, mixin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initExtend (Vue) {\n+        \u002F**\n+         * Each instance constructor, including Vue, has a unique\n+         * cid. This enables us to create wrapped \"child\n+         * constructors\" for prototypal inheritance and cache them.\n+         *\u002F\n+        Vue.cid = 0;\n+        var cid = 1;\n+\n+        \u002F**\n+         * Class inheritance\n+         *\u002F\n+        Vue.extend = function (extendOptions) {\n+            extendOptions = extendOptions || {};\n+            var Super = this;\n+            var SuperId = Super.cid;\n+            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n+            if (cachedCtors[SuperId]) {\n+                return cachedCtors[SuperId]\n+            }\n+\n+            var name = extendOptions.name || Super.options.name;\n+            if (name) {\n+                validateComponentName(name);\n+            }\n+\n+            var Sub = function VueComponent (options) {\n+                this._init(options);\n+            };\n+            Sub.prototype = Object.create(Super.prototype);\n+            Sub.prototype.constructor = Sub;\n+            Sub.cid = cid++;\n+            Sub.options = mergeOptions(\n+                Super.options,\n+                extendOptions\n+            );\n+            Sub['super'] = Super;\n+\n+            \u002F\u002F For props and computed properties, we define the proxy getters on\n+            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\n+            \u002F\u002F avoids Object.defineProperty calls for each instance created.\n+            if (Sub.options.props) {\n+                initProps$1(Sub);\n+            }\n+            if (Sub.options.computed) {\n+                initComputed$1(Sub);\n+            }\n+\n+            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\n+            Sub.extend = Super.extend;\n+            Sub.mixin = Super.mixin;\n+            Sub.use = Super.use;\n+\n+            \u002F\u002F create asset registers, so extended classes\n+            \u002F\u002F can have their private assets too.\n+            ASSET_TYPES.forEach(function (type) {\n+                Sub[type] = Super[type];\n+            });\n+            \u002F\u002F enable recursive self-lookup\n+            if (name) {\n+                Sub.options.components[name] = Sub;\n+            }\n+\n+            \u002F\u002F keep a reference to the super options at extension time.\n+            \u002F\u002F later at instantiation we can check if Super's options have\n+            \u002F\u002F been updated.\n+            Sub.superOptions = Super.options;\n+            Sub.extendOptions = extendOptions;\n+            Sub.sealedOptions = extend({}, Sub.options);\n+\n+            \u002F\u002F cache constructor\n+            cachedCtors[SuperId] = Sub;\n+            return Sub\n+        };\n+    }\n+\n+    function initProps$1 (Comp) {\n+        var props = Comp.options.props;\n+        for (var key in props) {\n+            proxy(Comp.prototype, \"_props\", key);\n+        }\n+    }\n+\n+    function initComputed$1 (Comp) {\n+        var computed = Comp.options.computed;\n+        for (var key in computed) {\n+            defineComputed(Comp.prototype, key, computed[key]);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initAssetRegisters (Vue) {\n+        \u002F**\n+         * Create asset registration methods.\n+         *\u002F\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue[type] = function (\n+                id,\n+                definition\n+            ) {\n+                if (!definition) {\n+                    return this.options[type + 's'][id]\n+                } else {\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (type === 'component') {\n+                        validateComponentName(id);\n+                    }\n+                    if (type === 'component' && isPlainObject(definition)) {\n+                        definition.name = definition.name || id;\n+                        definition = this.options._base.extend(definition);\n+                    }\n+                    if (type === 'directive' && typeof definition === 'function') {\n+                        definition = { bind: definition, update: definition };\n+                    }\n+                    this.options[type + 's'][id] = definition;\n+                    return definition\n+                }\n+            };\n+        });\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function getComponentName (opts) {\n+        return opts && (opts.Ctor.options.name || opts.tag)\n+    }\n+\n+    function matches (pattern, name) {\n+        if (Array.isArray(pattern)) {\n+            return pattern.indexOf(name) > -1\n+        } else if (typeof pattern === 'string') {\n+            return pattern.split(',').indexOf(name) > -1\n+        } else if (isRegExp(pattern)) {\n+            return pattern.test(name)\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return false\n+    }\n+\n+    function pruneCache (keepAliveInstance, filter) {\n+        var cache = keepAliveInstance.cache;\n+        var keys = keepAliveInstance.keys;\n+        var _vnode = keepAliveInstance._vnode;\n+        for (var key in cache) {\n+            var cachedNode = cache[key];\n+            if (cachedNode) {\n+                var name = getComponentName(cachedNode.componentOptions);\n+                if (name && !filter(name)) {\n+                    pruneCacheEntry(cache, key, keys, _vnode);\n+                }\n+            }\n+        }\n+    }\n+\n+    function pruneCacheEntry (\n+        cache,\n+        key,\n+        keys,\n+        current\n+    ) {\n+        var cached$$1 = cache[key];\n+        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n+            cached$$1.componentInstance.$destroy();\n+        }\n+        cache[key] = null;\n+        remove(keys, key);\n+    }\n+\n+    var patternTypes = [String, RegExp, Array];\n+\n+    var KeepAlive = {\n+        name: 'keep-alive',\n+        abstract: true,\n+\n+        props: {\n+            include: patternTypes,\n+            exclude: patternTypes,\n+            max: [String, Number]\n+        },\n+\n+        created: function created () {\n+            this.cache = Object.create(null);\n+            this.keys = [];\n+        },\n+\n+        destroyed: function destroyed () {\n+            for (var key in this.cache) {\n+                pruneCacheEntry(this.cache, key, this.keys);\n+            }\n+        },\n+\n+        mounted: function mounted () {\n+            var this$1 = this;\n+\n+            this.$watch('include', function (val) {\n+                pruneCache(this$1, function (name) { return matches(val, name); });\n+            });\n+            this.$watch('exclude', function (val) {\n+                pruneCache(this$1, function (name) { return !matches(val, name); });\n+            });\n+        },\n+\n+        render: function render () {\n+            var slot = this.$slots.default;\n+            var vnode = getFirstComponentChild(slot);\n+            var componentOptions = vnode && vnode.componentOptions;\n+            if (componentOptions) {\n+                \u002F\u002F check pattern\n+                var name = getComponentName(componentOptions);\n+                var ref = this;\n+                var include = ref.include;\n+                var exclude = ref.exclude;\n+                if (\n+                    \u002F\u002F not included\n+                (include && (!name || !matches(include, name))) ||\n+                \u002F\u002F excluded\n+                (exclude && name && matches(exclude, name))\n+                ) {\n+                    return vnode\n+                }\n+\n+                var ref$1 = this;\n+                var cache = ref$1.cache;\n+                var keys = ref$1.keys;\n+                var key = vnode.key == null\n+                    \u002F\u002F same constructor may get registered as different local components\n+                    \u002F\u002F so cid alone is not enough (#3269)\n+                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n+                    : vnode.key;\n+                if (cache[key]) {\n+                    vnode.componentInstance = cache[key].componentInstance;\n+                    \u002F\u002F make current key freshest\n+                    remove(keys, key);\n+                    keys.push(key);\n+                } else {\n+                    cache[key] = vnode;\n+                    keys.push(key);\n+                    \u002F\u002F prune oldest entry\n+                    if (this.max && keys.length > parseInt(this.max)) {\n+                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\n+                    }\n+                }\n+\n+                vnode.data.keepAlive = true;\n+            }\n+            return vnode || (slot && slot[0])\n+        }\n+    };\n+\n+    var builtInComponents = {\n+        KeepAlive: KeepAlive\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function initGlobalAPI (Vue) {\n+        \u002F\u002F config\n+        var configDef = {};\n+        configDef.get = function () { return config; };\n+        {\n+            configDef.set = function () {\n+                warn(\n+                    'Do not replace the Vue.config object, set individual fields instead.'\n+                );\n+            };\n+        }\n+        Object.defineProperty(Vue, 'config', configDef);\n+\n+        \u002F\u002F exposed util methods.\n+        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\n+        \u002F\u002F them unless you are aware of the risk.\n+        Vue.util = {\n+            warn: warn,\n+            extend: extend,\n+            mergeOptions: mergeOptions,\n+            defineReactive: defineReactive$$1\n+        };\n+\n+        Vue.set = set;\n+        Vue.delete = del;\n+        Vue.nextTick = nextTick;\n+\n+        \u002F\u002F 2.6 explicit observable API\n+        Vue.observable = function (obj) {\n+            observe(obj);\n+            return obj\n+        };\n+\n+        Vue.options = Object.create(null);\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue.options[type + 's'] = Object.create(null);\n+        });\n+\n+        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\n+        \u002F\u002F components with in Weex's multi-instance scenarios.\n+        Vue.options._base = Vue;\n+\n+        extend(Vue.options.components, builtInComponents);\n+\n+        initUse(Vue);\n+        initMixin$1(Vue);\n+        initExtend(Vue);\n+        initAssetRegisters(Vue);\n+    }\n+\n+    initGlobalAPI(Vue);\n+\n+    Object.defineProperty(Vue.prototype, '$isServer', {\n+        get: isServerRendering\n+    });\n+\n+    Object.defineProperty(Vue.prototype, '$ssrContext', {\n+        get: function get () {\n+          \u002F* istanbul ignore next *\u002F\n+            return this.$vnode && this.$vnode.ssrContext\n+        }\n+    });\n+\n+    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\n+    Object.defineProperty(Vue, 'FunctionalRenderContext', {\n+        value: FunctionalRenderContext\n+    });\n+\n+    Vue.version = '2.6.10';\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F these are reserved for web because they are directly compiled away\n+    \u002F\u002F during template compilation\n+    var isReservedAttr = makeMap('style,class');\n+\n+    \u002F\u002F attributes that should be using props for binding\n+    var acceptValue = makeMap('input,textarea,option,select,progress');\n+    var mustUseProp = function (tag, type, attr) {\n+        return (\n+            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n+            (attr === 'selected' && tag === 'option') ||\n+            (attr === 'checked' && tag === 'input') ||\n+            (attr === 'muted' && tag === 'video')\n+        )\n+    };\n+\n+    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n+\n+    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n+\n+    var convertEnumeratedValue = function (key, value) {\n+        return isFalsyAttrValue(value) || value === 'false'\n+            ? 'false'\n+            \u002F\u002F allow arbitrary string value for contenteditable\n+            : key === 'contenteditable' && isValidContentEditableValue(value)\n+                ? value\n+                : 'true'\n+    };\n+\n+    var isBooleanAttr = makeMap(\n+        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n+        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n+        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n+        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n+        'required,reversed,scoped,seamless,selected,sortable,translate,' +\n+        'truespeed,typemustmatch,visible'\n+    );\n+\n+    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\n+\n+    var isXlink = function (name) {\n+        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n+    };\n+\n+    var getXlinkProp = function (name) {\n+        return isXlink(name) ? name.slice(6, name.length) : ''\n+    };\n+\n+    var isFalsyAttrValue = function (val) {\n+        return val == null || val === false\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function genClassForVnode (vnode) {\n+        var data = vnode.data;\n+        var parentNode = vnode;\n+        var childNode = vnode;\n+        while (isDef(childNode.componentInstance)) {\n+            childNode = childNode.componentInstance._vnode;\n+            if (childNode && childNode.data) {\n+                data = mergeClassData(childNode.data, data);\n+            }\n+        }\n+        while (isDef(parentNode = parentNode.parent)) {\n+            if (parentNode && parentNode.data) {\n+                data = mergeClassData(data, parentNode.data);\n+            }\n+        }\n+        return renderClass(data.staticClass, data.class)\n+    }\n+\n+    function mergeClassData (child, parent) {\n+        return {\n+            staticClass: concat(child.staticClass, parent.staticClass),\n+            class: isDef(child.class)\n+                ? [child.class, parent.class]\n+                : parent.class\n+        }\n+    }\n+\n+    function renderClass (\n+        staticClass,\n+        dynamicClass\n+    ) {\n+        if (isDef(staticClass) || isDef(dynamicClass)) {\n+            return concat(staticClass, stringifyClass(dynamicClass))\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function concat (a, b) {\n+        return a ? b ? (a + ' ' + b) : a : (b || '')\n+    }\n+\n+    function stringifyClass (value) {\n+        if (Array.isArray(value)) {\n+            return stringifyArray(value)\n+        }\n+        if (isObject(value)) {\n+            return stringifyObject(value)\n+        }\n+        if (typeof value === 'string') {\n+            return value\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function stringifyArray (value) {\n+        var res = '';\n+        var stringified;\n+        for (var i = 0, l = value.length; i \u003C l; i++) {\n+            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n+                if (res) { res += ' '; }\n+                res += stringified;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function stringifyObject (value) {\n+        var res = '';\n+        for (var key in value) {\n+            if (value[key]) {\n+                if (res) { res += ' '; }\n+                res += key;\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var namespaceMap = {\n+        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\n+        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\n+    };\n+\n+    var isHTMLTag = makeMap(\n+        'html,body,base,head,link,meta,style,title,' +\n+        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n+        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n+        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n+        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n+        'embed,object,param,source,canvas,script,noscript,del,ins,' +\n+        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n+        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n+        'output,progress,select,textarea,' +\n+        'details,dialog,menu,menuitem,summary,' +\n+        'content,element,shadow,template,blockquote,iframe,tfoot'\n+    );\n+\n+    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\n+    \u002F\u002F contain child elements.\n+    var isSVG = makeMap(\n+        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n+        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n+        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n+        true\n+    );\n+\n+    var isPreTag = function (tag) { return tag === 'pre'; };\n+\n+    var isReservedTag = function (tag) {\n+        return isHTMLTag(tag) || isSVG(tag)\n+    };\n+\n+    function getTagNamespace (tag) {\n+        if (isSVG(tag)) {\n+            return 'svg'\n+        }\n+        \u002F\u002F basic support for MathML\n+        \u002F\u002F note it doesn't support other MathML elements being component roots\n+        if (tag === 'math') {\n+            return 'math'\n+        }\n+    }\n+\n+    var unknownElementCache = Object.create(null);\n+    function isUnknownElement (tag) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!inBrowser) {\n+            return true\n+        }\n+        if (isReservedTag(tag)) {\n+            return false\n+        }\n+        tag = tag.toLowerCase();\n+      \u002F* istanbul ignore if *\u002F\n+        if (unknownElementCache[tag] != null) {\n+            return unknownElementCache[tag]\n+        }\n+        var el = document.createElement(tag);\n+        if (tag.indexOf('-') > -1) {\n+            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\n+            return (unknownElementCache[tag] = (\n+                el.constructor === window.HTMLUnknownElement ||\n+                el.constructor === window.HTMLElement\n+            ))\n+        } else {\n+            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\n+        }\n+    }\n+\n+    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Query an element selector if it's not an element already.\n+     *\u002F\n+    function query (el) {\n+        if (typeof el === 'string') {\n+            var selected = document.querySelector(el);\n+            if (!selected) {\n+                warn(\n+                    'Cannot find element: ' + el\n+                );\n+                return document.createElement('div')\n+            }\n+            return selected\n+        } else {\n+            return el\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createElement$1 (tagName, vnode) {\n+        var elm = document.createElement(tagName);\n+        if (tagName !== 'select') {\n+            return elm\n+        }\n+        \u002F\u002F false or null will remove the attribute but undefined will not\n+        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n+            elm.setAttribute('multiple', 'multiple');\n+        }\n+        return elm\n+    }\n+\n+    function createElementNS (namespace, tagName) {\n+        return document.createElementNS(namespaceMap[namespace], tagName)\n+    }\n+\n+    function createTextNode (text) {\n+        return document.createTextNode(text)\n+    }\n+\n+    function createComment (text) {\n+        return document.createComment(text)\n+    }\n+\n+    function insertBefore (parentNode, newNode, referenceNode) {\n+        parentNode.insertBefore(newNode, referenceNode);\n+    }\n+\n+    function removeChild (node, child) {\n+        node.removeChild(child);\n+    }\n+\n+    function appendChild (node, child) {\n+        node.appendChild(child);\n+    }\n+\n+    function parentNode (node) {\n+        return node.parentNode\n+    }\n+\n+    function nextSibling (node) {\n+        return node.nextSibling\n+    }\n+\n+    function tagName (node) {\n+        return node.tagName\n+    }\n+\n+    function setTextContent (node, text) {\n+        node.textContent = text;\n+    }\n+\n+    function setStyleScope (node, scopeId) {\n+        node.setAttribute(scopeId, '');\n+    }\n+\n+    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\n+        createElement: createElement$1,\n+        createElementNS: createElementNS,\n+        createTextNode: createTextNode,\n+        createComment: createComment,\n+        insertBefore: insertBefore,\n+        removeChild: removeChild,\n+        appendChild: appendChild,\n+        parentNode: parentNode,\n+        nextSibling: nextSibling,\n+        tagName: tagName,\n+        setTextContent: setTextContent,\n+        setStyleScope: setStyleScope\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref = {\n+        create: function create (_, vnode) {\n+            registerRef(vnode);\n+        },\n+        update: function update (oldVnode, vnode) {\n+            if (oldVnode.data.ref !== vnode.data.ref) {\n+                registerRef(oldVnode, true);\n+                registerRef(vnode);\n+            }\n+        },\n+        destroy: function destroy (vnode) {\n+            registerRef(vnode, true);\n+        }\n+    };\n+\n+    function registerRef (vnode, isRemoval) {\n+        var key = vnode.data.ref;\n+        if (!isDef(key)) { return }\n+\n+        var vm = vnode.context;\n+        var ref = vnode.componentInstance || vnode.elm;\n+        var refs = vm.$refs;\n+        if (isRemoval) {\n+            if (Array.isArray(refs[key])) {\n+                remove(refs[key], ref);\n+            } else if (refs[key] === ref) {\n+                refs[key] = undefined;\n+            }\n+        } else {\n+            if (vnode.data.refInFor) {\n+                if (!Array.isArray(refs[key])) {\n+                    refs[key] = [ref];\n+                } else if (refs[key].indexOf(ref) \u003C 0) {\n+                    \u002F\u002F $flow-disable-line\n+                    refs[key].push(ref);\n+                }\n+            } else {\n+                refs[key] = ref;\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Virtual DOM patching algorithm based on Snabbdom by\n+     * Simon Friis Vindum (@paldepind)\n+     * Licensed under the MIT License\n+     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\n+     *\n+     * modified by Evan You (@yyx990803)\n+     *\n+     * Not type-checking this because this file is perf-critical and the cost\n+     * of making flow understand it is not worth it.\n+     *\u002F\n+\n+    var emptyNode = new VNode('', {}, []);\n+\n+    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n+\n+    function sameVnode (a, b) {\n+        return (\n+            a.key === b.key && (\n+                (\n+                    a.tag === b.tag &&\n+                    a.isComment === b.isComment &&\n+                    isDef(a.data) === isDef(b.data) &&\n+                    sameInputType(a, b)\n+                ) || (\n+                    isTrue(a.isAsyncPlaceholder) &&\n+                    a.asyncFactory === b.asyncFactory &&\n+                    isUndef(b.asyncFactory.error)\n+                )\n+            )\n+        )\n+    }\n+\n+    function sameInputType (a, b) {\n+        if (a.tag !== 'input') { return true }\n+        var i;\n+        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n+        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n+        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n+    }\n+\n+    function createKeyToOldIdx (children, beginIdx, endIdx) {\n+        var i, key;\n+        var map = {};\n+        for (i = beginIdx; i \u003C= endIdx; ++i) {\n+            key = children[i].key;\n+            if (isDef(key)) { map[key] = i; }\n+        }\n+        return map\n+    }\n+\n+    function createPatchFunction (backend) {\n+        var i, j;\n+        var cbs = {};\n+\n+        var modules = backend.modules;\n+        var nodeOps = backend.nodeOps;\n+\n+        for (i = 0; i \u003C hooks.length; ++i) {\n+            cbs[hooks[i]] = [];\n+            for (j = 0; j \u003C modules.length; ++j) {\n+                if (isDef(modules[j][hooks[i]])) {\n+                    cbs[hooks[i]].push(modules[j][hooks[i]]);\n+                }\n+            }\n+        }\n+\n+        function emptyNodeAt (elm) {\n+            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n+        }\n+\n+        function createRmCb (childElm, listeners) {\n+            function remove$$1 () {\n+                if (--remove$$1.listeners === 0) {\n+                    removeNode(childElm);\n+                }\n+            }\n+            remove$$1.listeners = listeners;\n+            return remove$$1\n+        }\n+\n+        function removeNode (el) {\n+            var parent = nodeOps.parentNode(el);\n+            \u002F\u002F element may have already been removed due to v-html \u002F v-text\n+            if (isDef(parent)) {\n+                nodeOps.removeChild(parent, el);\n+            }\n+        }\n+\n+        function isUnknownElement$$1 (vnode, inVPre) {\n+            return (\n+                !inVPre &&\n+                !vnode.ns &&\n+                !(\n+                    config.ignoredElements.length &&\n+                    config.ignoredElements.some(function (ignore) {\n+                        return isRegExp(ignore)\n+                            ? ignore.test(vnode.tag)\n+                            : ignore === vnode.tag\n+                    })\n+                ) &&\n+                config.isUnknownElement(vnode.tag)\n+            )\n+        }\n+\n+        var creatingElmInVPre = 0;\n+\n+        function createElm (\n+            vnode,\n+            insertedVnodeQueue,\n+            parentElm,\n+            refElm,\n+            nested,\n+            ownerArray,\n+            index\n+        ) {\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F This vnode was used in a previous render!\n+                \u002F\u002F now it's used as a new node, overwriting its elm would cause\n+                \u002F\u002F potential patch errors down the road when it's used as an insertion\n+                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\n+                \u002F\u002F associated DOM element for it.\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\n+            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n+                return\n+            }\n+\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            var tag = vnode.tag;\n+            if (isDef(tag)) {\n+                {\n+                    if (data && data.pre) {\n+                        creatingElmInVPre++;\n+                    }\n+                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n+                        warn(\n+                            'Unknown custom element: \u003C' + tag + '> - did you ' +\n+                            'register the component correctly? For recursive components, ' +\n+                            'make sure to provide the \"name\" option.',\n+                            vnode.context\n+                        );\n+                    }\n+                }\n+\n+                vnode.elm = vnode.ns\n+                    ? nodeOps.createElementNS(vnode.ns, tag)\n+                    : nodeOps.createElement(tag, vnode);\n+                setScope(vnode);\n+\n+              \u002F* istanbul ignore if *\u002F\n+                {\n+                    createChildren(vnode, children, insertedVnodeQueue);\n+                    if (isDef(data)) {\n+                        invokeCreateHooks(vnode, insertedVnodeQueue);\n+                    }\n+                    insert(parentElm, vnode.elm, refElm);\n+                }\n+\n+                if (data && data.pre) {\n+                    creatingElmInVPre--;\n+                }\n+            } else if (isTrue(vnode.isComment)) {\n+                vnode.elm = nodeOps.createComment(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            } else {\n+                vnode.elm = nodeOps.createTextNode(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            }\n+        }\n+\n+        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i = vnode.data;\n+            if (isDef(i)) {\n+                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n+                if (isDef(i = i.hook) && isDef(i = i.init)) {\n+                    i(vnode, false \u002F* hydrating *\u002F);\n+                }\n+                \u002F\u002F after calling the init hook, if the vnode is a child component\n+                \u002F\u002F it should've created a child instance and mounted it. the child\n+                \u002F\u002F component also has set the placeholder vnode's elm.\n+                \u002F\u002F in that case we can just return the element and be done.\n+                if (isDef(vnode.componentInstance)) {\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    insert(parentElm, vnode.elm, refElm);\n+                    if (isTrue(isReactivated)) {\n+                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n+                    }\n+                    return true\n+                }\n+            }\n+        }\n+\n+        function initComponent (vnode, insertedVnodeQueue) {\n+            if (isDef(vnode.data.pendingInsert)) {\n+                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n+                vnode.data.pendingInsert = null;\n+            }\n+            vnode.elm = vnode.componentInstance.$el;\n+            if (isPatchable(vnode)) {\n+                invokeCreateHooks(vnode, insertedVnodeQueue);\n+                setScope(vnode);\n+            } else {\n+                \u002F\u002F empty component root.\n+                \u002F\u002F skip all element-related modules except for ref (#3455)\n+                registerRef(vnode);\n+                \u002F\u002F make sure to invoke the insert hook\n+                insertedVnodeQueue.push(vnode);\n+            }\n+        }\n+\n+        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i;\n+            \u002F\u002F hack for #4339: a reactivated component with inner transition\n+            \u002F\u002F does not trigger because the inner node's created hooks are not called\n+            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\n+            \u002F\u002F there doesn't seem to be a better way to do it.\n+            var innerNode = vnode;\n+            while (innerNode.componentInstance) {\n+                innerNode = innerNode.componentInstance._vnode;\n+                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n+                    for (i = 0; i \u003C cbs.activate.length; ++i) {\n+                        cbs.activate[i](emptyNode, innerNode);\n+                    }\n+                    insertedVnodeQueue.push(innerNode);\n+                    break\n+                }\n+            }\n+            \u002F\u002F unlike a newly created component,\n+            \u002F\u002F a reactivated keep-alive component doesn't insert itself\n+            insert(parentElm, vnode.elm, refElm);\n+        }\n+\n+        function insert (parent, elm, ref$$1) {\n+            if (isDef(parent)) {\n+                if (isDef(ref$$1)) {\n+                    if (nodeOps.parentNode(ref$$1) === parent) {\n+                        nodeOps.insertBefore(parent, elm, ref$$1);\n+                    }\n+                } else {\n+                    nodeOps.appendChild(parent, elm);\n+                }\n+            }\n+        }\n+\n+        function createChildren (vnode, children, insertedVnodeQueue) {\n+            if (Array.isArray(children)) {\n+                {\n+                    checkDuplicateKeys(children);\n+                }\n+                for (var i = 0; i \u003C children.length; ++i) {\n+                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n+                }\n+            } else if (isPrimitive(vnode.text)) {\n+                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n+            }\n+        }\n+\n+        function isPatchable (vnode) {\n+            while (vnode.componentInstance) {\n+                vnode = vnode.componentInstance._vnode;\n+            }\n+            return isDef(vnode.tag)\n+        }\n+\n+        function invokeCreateHooks (vnode, insertedVnodeQueue) {\n+            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                cbs.create[i$1](emptyNode, vnode);\n+            }\n+            i = vnode.data.hook; \u002F\u002F Reuse variable\n+            if (isDef(i)) {\n+                if (isDef(i.create)) { i.create(emptyNode, vnode); }\n+                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n+            }\n+        }\n+\n+        \u002F\u002F set scope id attribute for scoped CSS.\n+        \u002F\u002F this is implemented as a special case to avoid the overhead\n+        \u002F\u002F of going through the normal attribute patching process.\n+        function setScope (vnode) {\n+            var i;\n+            if (isDef(i = vnode.fnScopeId)) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            } else {\n+                var ancestor = vnode;\n+                while (ancestor) {\n+                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n+                        nodeOps.setStyleScope(vnode.elm, i);\n+                    }\n+                    ancestor = ancestor.parent;\n+                }\n+            }\n+            \u002F\u002F for slot content they should also get the scopeId from the host instance.\n+            if (isDef(i = activeInstance) &&\n+                i !== vnode.context &&\n+                i !== vnode.fnContext &&\n+                isDef(i = i.$options._scopeId)\n+            ) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            }\n+        }\n+\n+        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n+            }\n+        }\n+\n+        function invokeDestroyHook (vnode) {\n+            var i, j;\n+            var data = vnode.data;\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n+                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n+            }\n+            if (isDef(i = vnode.children)) {\n+                for (j = 0; j \u003C vnode.children.length; ++j) {\n+                    invokeDestroyHook(vnode.children[j]);\n+                }\n+            }\n+        }\n+\n+        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                var ch = vnodes[startIdx];\n+                if (isDef(ch)) {\n+                    if (isDef(ch.tag)) {\n+                        removeAndInvokeRemoveHook(ch);\n+                        invokeDestroyHook(ch);\n+                    } else { \u002F\u002F Text node\n+                        removeNode(ch.elm);\n+                    }\n+                }\n+            }\n+        }\n+\n+        function removeAndInvokeRemoveHook (vnode, rm) {\n+            if (isDef(rm) || isDef(vnode.data)) {\n+                var i;\n+                var listeners = cbs.remove.length + 1;\n+                if (isDef(rm)) {\n+                    \u002F\u002F we have a recursively passed down rm callback\n+                    \u002F\u002F increase the listeners count\n+                    rm.listeners += listeners;\n+                } else {\n+                    \u002F\u002F directly removing\n+                    rm = createRmCb(vnode.elm, listeners);\n+                }\n+                \u002F\u002F recursively invoke hooks on child component root node\n+                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n+                    removeAndInvokeRemoveHook(i, rm);\n+                }\n+                for (i = 0; i \u003C cbs.remove.length; ++i) {\n+                    cbs.remove[i](vnode, rm);\n+                }\n+                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n+                    i(vnode, rm);\n+                } else {\n+                    rm();\n+                }\n+            } else {\n+                removeNode(vnode.elm);\n+            }\n+        }\n+\n+        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n+            var oldStartIdx = 0;\n+            var newStartIdx = 0;\n+            var oldEndIdx = oldCh.length - 1;\n+            var oldStartVnode = oldCh[0];\n+            var oldEndVnode = oldCh[oldEndIdx];\n+            var newEndIdx = newCh.length - 1;\n+            var newStartVnode = newCh[0];\n+            var newEndVnode = newCh[newEndIdx];\n+            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n+\n+            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\n+            \u002F\u002F to ensure removed elements stay in correct relative positions\n+            \u002F\u002F during leaving transitions\n+            var canMove = !removeOnly;\n+\n+            {\n+                checkDuplicateKeys(newCh);\n+            }\n+\n+            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\n+                if (isUndef(oldStartVnode)) {\n+                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\n+                } else if (isUndef(oldEndVnode)) {\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                } else if (sameVnode(oldStartVnode, newStartVnode)) {\n+                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else if (sameVnode(oldEndVnode, newEndVnode)) {\n+                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\n+                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\n+                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else {\n+                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n+                    idxInOld = isDef(newStartVnode.key)\n+                        ? oldKeyToIdx[newStartVnode.key]\n+                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n+                    if (isUndef(idxInOld)) { \u002F\u002F New element\n+                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                    } else {\n+                        vnodeToMove = oldCh[idxInOld];\n+                        if (sameVnode(vnodeToMove, newStartVnode)) {\n+                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                            oldCh[idxInOld] = undefined;\n+                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n+                        } else {\n+                            \u002F\u002F same key but different element. treat as new element\n+                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                        }\n+                    }\n+                    newStartVnode = newCh[++newStartIdx];\n+                }\n+            }\n+            if (oldStartIdx > oldEndIdx) {\n+                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n+                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n+            } else if (newStartIdx > newEndIdx) {\n+                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n+            }\n+        }\n+\n+        function checkDuplicateKeys (children) {\n+            var seenKeys = {};\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var vnode = children[i];\n+                var key = vnode.key;\n+                if (isDef(key)) {\n+                    if (seenKeys[key]) {\n+                        warn(\n+                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n+                            vnode.context\n+                        );\n+                    } else {\n+                        seenKeys[key] = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        function findIdxInOld (node, oldCh, start, end) {\n+            for (var i = start; i \u003C end; i++) {\n+                var c = oldCh[i];\n+                if (isDef(c) && sameVnode(node, c)) { return i }\n+            }\n+        }\n+\n+        function patchVnode (\n+            oldVnode,\n+            vnode,\n+            insertedVnodeQueue,\n+            ownerArray,\n+            index,\n+            removeOnly\n+        ) {\n+            if (oldVnode === vnode) {\n+                return\n+            }\n+\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F clone reused vnode\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            var elm = vnode.elm = oldVnode.elm;\n+\n+            if (isTrue(oldVnode.isAsyncPlaceholder)) {\n+                if (isDef(vnode.asyncFactory.resolved)) {\n+                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n+                } else {\n+                    vnode.isAsyncPlaceholder = true;\n+                }\n+                return\n+            }\n+\n+            \u002F\u002F reuse element for static trees.\n+            \u002F\u002F note we only do this if the vnode is cloned -\n+            \u002F\u002F if the new node is not cloned it means the render functions have been\n+            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\n+            if (isTrue(vnode.isStatic) &&\n+                isTrue(oldVnode.isStatic) &&\n+                vnode.key === oldVnode.key &&\n+                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n+            ) {\n+                vnode.componentInstance = oldVnode.componentInstance;\n+                return\n+            }\n+\n+            var i;\n+            var data = vnode.data;\n+            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n+                i(oldVnode, vnode);\n+            }\n+\n+            var oldCh = oldVnode.children;\n+            var ch = vnode.children;\n+            if (isDef(data) && isPatchable(vnode)) {\n+                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n+                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n+            }\n+            if (isUndef(vnode.text)) {\n+                if (isDef(oldCh) && isDef(ch)) {\n+                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n+                } else if (isDef(ch)) {\n+                    {\n+                        checkDuplicateKeys(ch);\n+                    }\n+                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n+                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n+                } else if (isDef(oldCh)) {\n+                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n+                } else if (isDef(oldVnode.text)) {\n+                    nodeOps.setTextContent(elm, '');\n+                }\n+            } else if (oldVnode.text !== vnode.text) {\n+                nodeOps.setTextContent(elm, vnode.text);\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n+            }\n+        }\n+\n+        function invokeInsertHook (vnode, queue, initial) {\n+            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\n+            \u002F\u002F element is really inserted\n+            if (isTrue(initial) && isDef(vnode.parent)) {\n+                vnode.parent.data.pendingInsert = queue;\n+            } else {\n+                for (var i = 0; i \u003C queue.length; ++i) {\n+                    queue[i].data.hook.insert(queue[i]);\n+                }\n+            }\n+        }\n+\n+        var hydrationBailed = false;\n+        \u002F\u002F list of modules that can skip create hook during hydration because they\n+        \u002F\u002F are already rendered on the client or has no need for initialization\n+        \u002F\u002F Note: style is excluded because it relies on initial clone for future\n+        \u002F\u002F deep updates (#7063).\n+        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n+\n+        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\n+        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n+            var i;\n+            var tag = vnode.tag;\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            inVPre = inVPre || (data && data.pre);\n+            vnode.elm = elm;\n+\n+            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n+                vnode.isAsyncPlaceholder = true;\n+                return true\n+            }\n+            \u002F\u002F assert node match\n+            {\n+                if (!assertNodeMatch(elm, vnode, inVPre)) {\n+                    return false\n+                }\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\n+                if (isDef(i = vnode.componentInstance)) {\n+                    \u002F\u002F child component. it should have hydrated its own tree.\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    return true\n+                }\n+            }\n+            if (isDef(tag)) {\n+                if (isDef(children)) {\n+                    \u002F\u002F empty element, allow client to pick up and populate children\n+                    if (!elm.hasChildNodes()) {\n+                        createChildren(vnode, children, insertedVnodeQueue);\n+                    } else {\n+                        \u002F\u002F v-html and domProps: innerHTML\n+                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n+                            if (i !== elm.innerHTML) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('server innerHTML: ', i);\n+                                    console.warn('client innerHTML: ', elm.innerHTML);\n+                                }\n+                                return false\n+                            }\n+                        } else {\n+                            \u002F\u002F iterate and compare children lists\n+                            var childrenMatch = true;\n+                            var childNode = elm.firstChild;\n+                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\n+                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n+                                    childrenMatch = false;\n+                                    break\n+                                }\n+                                childNode = childNode.nextSibling;\n+                            }\n+                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\n+                            \u002F\u002F longer than the virtual children list.\n+                            if (!childrenMatch || childNode) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n+                                }\n+                                return false\n+                            }\n+                        }\n+                    }\n+                }\n+                if (isDef(data)) {\n+                    var fullInvoke = false;\n+                    for (var key in data) {\n+                        if (!isRenderedModule(key)) {\n+                            fullInvoke = true;\n+                            invokeCreateHooks(vnode, insertedVnodeQueue);\n+                            break\n+                        }\n+                    }\n+                    if (!fullInvoke && data['class']) {\n+                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\n+                        traverse(data['class']);\n+                    }\n+                }\n+            } else if (elm.data !== vnode.text) {\n+                elm.data = vnode.text;\n+            }\n+            return true\n+        }\n+\n+        function assertNodeMatch (node, vnode, inVPre) {\n+            if (isDef(vnode.tag)) {\n+                return vnode.tag.indexOf('vue-component') === 0 || (\n+                        !isUnknownElement$$1(vnode, inVPre) &&\n+                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n+                    )\n+            } else {\n+                return node.nodeType === (vnode.isComment ? 8 : 3)\n+            }\n+        }\n+\n+        return function patch (oldVnode, vnode, hydrating, removeOnly) {\n+            if (isUndef(vnode)) {\n+                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n+                return\n+            }\n+\n+            var isInitialPatch = false;\n+            var insertedVnodeQueue = [];\n+\n+            if (isUndef(oldVnode)) {\n+                \u002F\u002F empty mount (likely as component), create new root element\n+                isInitialPatch = true;\n+                createElm(vnode, insertedVnodeQueue);\n+            } else {\n+                var isRealElement = isDef(oldVnode.nodeType);\n+                if (!isRealElement && sameVnode(oldVnode, vnode)) {\n+                    \u002F\u002F patch existing root node\n+                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n+                } else {\n+                    if (isRealElement) {\n+                        \u002F\u002F mounting to a real element\n+                        \u002F\u002F check if this is server-rendered content and if we can perform\n+                        \u002F\u002F a successful hydration.\n+                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n+                            oldVnode.removeAttribute(SSR_ATTR);\n+                            hydrating = true;\n+                        }\n+                        if (isTrue(hydrating)) {\n+                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n+                                invokeInsertHook(vnode, insertedVnodeQueue, true);\n+                                return oldVnode\n+                            } else {\n+                                warn(\n+                                    'The client-side rendered virtual DOM tree is not matching ' +\n+                                    'server-rendered content. This is likely caused by incorrect ' +\n+                                    'HTML markup, for example nesting block-level elements inside ' +\n+                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\n+                                    'full client-side render.'\n+                                );\n+                            }\n+                        }\n+                        \u002F\u002F either not server-rendered, or hydration failed.\n+                        \u002F\u002F create an empty node and replace it\n+                        oldVnode = emptyNodeAt(oldVnode);\n+                    }\n+\n+                    \u002F\u002F replacing existing element\n+                    var oldElm = oldVnode.elm;\n+                    var parentElm = nodeOps.parentNode(oldElm);\n+\n+                    \u002F\u002F create new node\n+                    createElm(\n+                        vnode,\n+                        insertedVnodeQueue,\n+                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\n+                        \u002F\u002F leaving transition. Only happens when combining transition +\n+                        \u002F\u002F keep-alive + HOCs. (#4590)\n+                        oldElm._leaveCb ? null : parentElm,\n+                        nodeOps.nextSibling(oldElm)\n+                    );\n+\n+                    \u002F\u002F update parent placeholder node element, recursively\n+                    if (isDef(vnode.parent)) {\n+                        var ancestor = vnode.parent;\n+                        var patchable = isPatchable(vnode);\n+                        while (ancestor) {\n+                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\n+                                cbs.destroy[i](ancestor);\n+                            }\n+                            ancestor.elm = vnode.elm;\n+                            if (patchable) {\n+                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                                    cbs.create[i$1](emptyNode, ancestor);\n+                                }\n+                                \u002F\u002F #6513\n+                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\n+                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\n+                                var insert = ancestor.data.hook.insert;\n+                                if (insert.merged) {\n+                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\n+                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\n+                                        insert.fns[i$2]();\n+                                    }\n+                                }\n+                            } else {\n+                                registerRef(ancestor);\n+                            }\n+                            ancestor = ancestor.parent;\n+                        }\n+                    }\n+\n+                    \u002F\u002F destroy old node\n+                    if (isDef(parentElm)) {\n+                        removeVnodes(parentElm, [oldVnode], 0, 0);\n+                    } else if (isDef(oldVnode.tag)) {\n+                        invokeDestroyHook(oldVnode);\n+                    }\n+                }\n+            }\n+\n+            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n+            return vnode.elm\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var directives = {\n+        create: updateDirectives,\n+        update: updateDirectives,\n+        destroy: function unbindDirectives (vnode) {\n+            updateDirectives(vnode, emptyNode);\n+        }\n+    };\n+\n+    function updateDirectives (oldVnode, vnode) {\n+        if (oldVnode.data.directives || vnode.data.directives) {\n+            _update(oldVnode, vnode);\n+        }\n+    }\n+\n+    function _update (oldVnode, vnode) {\n+        var isCreate = oldVnode === emptyNode;\n+        var isDestroy = vnode === emptyNode;\n+        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n+        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n+\n+        var dirsWithInsert = [];\n+        var dirsWithPostpatch = [];\n+\n+        var key, oldDir, dir;\n+        for (key in newDirs) {\n+            oldDir = oldDirs[key];\n+            dir = newDirs[key];\n+            if (!oldDir) {\n+                \u002F\u002F new directive, bind\n+                callHook$1(dir, 'bind', vnode, oldVnode);\n+                if (dir.def && dir.def.inserted) {\n+                    dirsWithInsert.push(dir);\n+                }\n+            } else {\n+                \u002F\u002F existing directive, update\n+                dir.oldValue = oldDir.value;\n+                dir.oldArg = oldDir.arg;\n+                callHook$1(dir, 'update', vnode, oldVnode);\n+                if (dir.def && dir.def.componentUpdated) {\n+                    dirsWithPostpatch.push(dir);\n+                }\n+            }\n+        }\n+\n+        if (dirsWithInsert.length) {\n+            var callInsert = function () {\n+                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\n+                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n+                }\n+            };\n+            if (isCreate) {\n+                mergeVNodeHook(vnode, 'insert', callInsert);\n+            } else {\n+                callInsert();\n+            }\n+        }\n+\n+        if (dirsWithPostpatch.length) {\n+            mergeVNodeHook(vnode, 'postpatch', function () {\n+                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\n+                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n+                }\n+            });\n+        }\n+\n+        if (!isCreate) {\n+            for (key in oldDirs) {\n+                if (!newDirs[key]) {\n+                    \u002F\u002F no longer present, unbind\n+                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n+                }\n+            }\n+        }\n+    }\n+\n+    var emptyModifiers = Object.create(null);\n+\n+    function normalizeDirectives$1 (\n+        dirs,\n+        vm\n+    ) {\n+        var res = Object.create(null);\n+        if (!dirs) {\n+            \u002F\u002F $flow-disable-line\n+            return res\n+        }\n+        var i, dir;\n+        for (i = 0; i \u003C dirs.length; i++) {\n+            dir = dirs[i];\n+            if (!dir.modifiers) {\n+                \u002F\u002F $flow-disable-line\n+                dir.modifiers = emptyModifiers;\n+            }\n+            res[getRawDirName(dir)] = dir;\n+            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n+        }\n+        \u002F\u002F $flow-disable-line\n+        return res\n+    }\n+\n+    function getRawDirName (dir) {\n+        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n+    }\n+\n+    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n+        var fn = dir.def && dir.def[hook];\n+        if (fn) {\n+            try {\n+                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n+            } catch (e) {\n+                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n+            }\n+        }\n+    }\n+\n+    var baseModules = [\n+        ref,\n+        directives\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function updateAttrs (oldVnode, vnode) {\n+        var opts = vnode.componentOptions;\n+        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n+            return\n+        }\n+        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n+            return\n+        }\n+        var key, cur, old;\n+        var elm = vnode.elm;\n+        var oldAttrs = oldVnode.data.attrs || {};\n+        var attrs = vnode.data.attrs || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(attrs.__ob__)) {\n+            attrs = vnode.data.attrs = extend({}, attrs);\n+        }\n+\n+        for (key in attrs) {\n+            cur = attrs[key];\n+            old = oldAttrs[key];\n+            if (old !== cur) {\n+                setAttr(elm, key, cur);\n+            }\n+        }\n+        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\n+        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\n+      \u002F* istanbul ignore if *\u002F\n+        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n+            setAttr(elm, 'value', attrs.value);\n+        }\n+        for (key in oldAttrs) {\n+            if (isUndef(attrs[key])) {\n+                if (isXlink(key)) {\n+                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+                } else if (!isEnumeratedAttr(key)) {\n+                    elm.removeAttribute(key);\n+                }\n+            }\n+        }\n+    }\n+\n+    function setAttr (el, key, value) {\n+        if (el.tagName.indexOf('-') > -1) {\n+            baseSetAttr(el, key, value);\n+        } else if (isBooleanAttr(key)) {\n+            \u002F\u002F set attribute for blank value\n+            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttribute(key);\n+            } else {\n+                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\n+                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\n+                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n+                    ? 'true'\n+                    : key;\n+                el.setAttribute(key, value);\n+            }\n+        } else if (isEnumeratedAttr(key)) {\n+            el.setAttribute(key, convertEnumeratedValue(key, value));\n+        } else if (isXlink(key)) {\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+            } else {\n+                el.setAttributeNS(xlinkNS, key, value);\n+            }\n+        } else {\n+            baseSetAttr(el, key, value);\n+        }\n+    }\n+\n+    function baseSetAttr (el, key, value) {\n+        if (isFalsyAttrValue(value)) {\n+            el.removeAttribute(key);\n+        } else {\n+            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\n+            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\n+            \u002F\u002F immediately.\n+          \u002F* istanbul ignore if *\u002F\n+            if (\n+                isIE && !isIE9 &&\n+                el.tagName === 'TEXTAREA' &&\n+                key === 'placeholder' && value !== '' && !el.__ieph\n+            ) {\n+                var blocker = function (e) {\n+                    e.stopImmediatePropagation();\n+                    el.removeEventListener('input', blocker);\n+                };\n+                el.addEventListener('input', blocker);\n+                \u002F\u002F $flow-disable-line\n+                el.__ieph = true; \u002F* IE placeholder patched *\u002F\n+            }\n+            el.setAttribute(key, value);\n+        }\n+    }\n+\n+    var attrs = {\n+        create: updateAttrs,\n+        update: updateAttrs\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function updateClass (oldVnode, vnode) {\n+        var el = vnode.elm;\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+        if (\n+            isUndef(data.staticClass) &&\n+            isUndef(data.class) && (\n+                isUndef(oldData) || (\n+                    isUndef(oldData.staticClass) &&\n+                    isUndef(oldData.class)\n+                )\n+            )\n+        ) {\n+            return\n+        }\n+\n+        var cls = genClassForVnode(vnode);\n+\n+        \u002F\u002F handle transition classes\n+        var transitionClass = el._transitionClasses;\n+        if (isDef(transitionClass)) {\n+            cls = concat(cls, stringifyClass(transitionClass));\n+        }\n+\n+        \u002F\u002F set the class\n+        if (cls !== el._prevClass) {\n+            el.setAttribute('class', cls);\n+            el._prevClass = cls;\n+        }\n+    }\n+\n+    var klass = {\n+        create: updateClass,\n+        update: updateClass\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\n+\n+    function parseFilters (exp) {\n+        var inSingle = false;\n+        var inDouble = false;\n+        var inTemplateString = false;\n+        var inRegex = false;\n+        var curly = 0;\n+        var square = 0;\n+        var paren = 0;\n+        var lastFilterIndex = 0;\n+        var c, prev, i, expression, filters;\n+\n+        for (i = 0; i \u003C exp.length; i++) {\n+            prev = c;\n+            c = exp.charCodeAt(i);\n+            if (inSingle) {\n+                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n+            } else if (inDouble) {\n+                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n+            } else if (inTemplateString) {\n+                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n+            } else if (inRegex) {\n+                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n+            } else if (\n+                c === 0x7C && \u002F\u002F pipe\n+                exp.charCodeAt(i + 1) !== 0x7C &&\n+                exp.charCodeAt(i - 1) !== 0x7C &&\n+                !curly && !square && !paren\n+            ) {\n+                if (expression === undefined) {\n+                    \u002F\u002F first filter, end of expression\n+                    lastFilterIndex = i + 1;\n+                    expression = exp.slice(0, i).trim();\n+                } else {\n+                    pushFilter();\n+                }\n+            } else {\n+                switch (c) {\n+                    case 0x22: inDouble = true; break         \u002F\u002F \"\n+                    case 0x27: inSingle = true; break         \u002F\u002F '\n+                    case 0x60: inTemplateString = true; break \u002F\u002F `\n+                    case 0x28: paren++; break                 \u002F\u002F (\n+                    case 0x29: paren--; break                 \u002F\u002F )\n+                    case 0x5B: square++; break                \u002F\u002F [\n+                    case 0x5D: square--; break                \u002F\u002F ]\n+                    case 0x7B: curly++; break                 \u002F\u002F {\n+                    case 0x7D: curly--; break                 \u002F\u002F }\n+                }\n+                if (c === 0x2f) { \u002F\u002F \u002F\n+                    var j = i - 1;\n+                    var p = (void 0);\n+                    \u002F\u002F find first non-whitespace prev char\n+                    for (; j >= 0; j--) {\n+                        p = exp.charAt(j);\n+                        if (p !== ' ') { break }\n+                    }\n+                    if (!p || !validDivisionCharRE.test(p)) {\n+                        inRegex = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        if (expression === undefined) {\n+            expression = exp.slice(0, i).trim();\n+        } else if (lastFilterIndex !== 0) {\n+            pushFilter();\n+        }\n+\n+        function pushFilter () {\n+            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n+            lastFilterIndex = i + 1;\n+        }\n+\n+        if (filters) {\n+            for (i = 0; i \u003C filters.length; i++) {\n+                expression = wrapFilter(expression, filters[i]);\n+            }\n+        }\n+\n+        return expression\n+    }\n+\n+    function wrapFilter (exp, filter) {\n+        var i = filter.indexOf('(');\n+        if (i \u003C 0) {\n+            \u002F\u002F _f: resolveFilter\n+            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n+        } else {\n+            var name = filter.slice(0, i);\n+            var args = filter.slice(i + 1);\n+            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+    function baseWarn (msg, range) {\n+        console.error((\"[Vue compiler]: \" + msg));\n+    }\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    function pluckModuleFunction (\n+        modules,\n+        key\n+    ) {\n+        return modules\n+            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n+            : []\n+    }\n+\n+    function addProp (el, name, value, range, dynamic) {\n+        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    function addAttr (el, name, value, range, dynamic) {\n+        var attrs = dynamic\n+            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n+            : (el.attrs || (el.attrs = []));\n+        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    \u002F\u002F add a raw attr (use this in preTransforms)\n+    function addRawAttr (el, name, value, range) {\n+        el.attrsMap[name] = value;\n+        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n+    }\n+\n+    function addDirective (\n+        el,\n+        name,\n+        rawName,\n+        value,\n+        arg,\n+        isDynamicArg,\n+        modifiers,\n+        range\n+    ) {\n+        (el.directives || (el.directives = [])).push(rangeSetItem({\n+            name: name,\n+            rawName: rawName,\n+            value: value,\n+            arg: arg,\n+            isDynamicArg: isDynamicArg,\n+            modifiers: modifiers\n+        }, range));\n+        el.plain = false;\n+    }\n+\n+    function prependModifierMarker (symbol, name, dynamic) {\n+        return dynamic\n+            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n+            : symbol + name \u002F\u002F mark the event as captured\n+    }\n+\n+    function addHandler (\n+        el,\n+        name,\n+        value,\n+        modifiers,\n+        important,\n+        warn,\n+        range,\n+        dynamic\n+    ) {\n+        modifiers = modifiers || emptyObject;\n+        \u002F\u002F warn prevent and passive modifier\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            warn &&\n+            modifiers.prevent && modifiers.passive\n+        ) {\n+            warn(\n+                'passive and prevent can\\'t be used together. ' +\n+                'Passive handler can\\'t prevent default event.',\n+                range\n+            );\n+        }\n+\n+        \u002F\u002F normalize click.right and click.middle since they don't actually fire\n+        \u002F\u002F this is technically browser-specific, but at least for now browsers are\n+        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\n+        if (modifiers.right) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'contextmenu';\n+                delete modifiers.right;\n+            }\n+        } else if (modifiers.middle) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'mouseup';\n+            }\n+        }\n+\n+        \u002F\u002F check capture modifier\n+        if (modifiers.capture) {\n+            delete modifiers.capture;\n+            name = prependModifierMarker('!', name, dynamic);\n+        }\n+        if (modifiers.once) {\n+            delete modifiers.once;\n+            name = prependModifierMarker('~', name, dynamic);\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (modifiers.passive) {\n+            delete modifiers.passive;\n+            name = prependModifierMarker('&', name, dynamic);\n+        }\n+\n+        var events;\n+        if (modifiers.native) {\n+            delete modifiers.native;\n+            events = el.nativeEvents || (el.nativeEvents = {});\n+        } else {\n+            events = el.events || (el.events = {});\n+        }\n+\n+        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n+        if (modifiers !== emptyObject) {\n+            newHandler.modifiers = modifiers;\n+        }\n+\n+        var handlers = events[name];\n+      \u002F* istanbul ignore if *\u002F\n+        if (Array.isArray(handlers)) {\n+            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n+        } else if (handlers) {\n+            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n+        } else {\n+            events[name] = newHandler;\n+        }\n+\n+        el.plain = false;\n+    }\n+\n+    function getRawBindingAttr (\n+        el,\n+        name\n+    ) {\n+        return el.rawAttrsMap[':' + name] ||\n+            el.rawAttrsMap['v-bind:' + name] ||\n+            el.rawAttrsMap[name]\n+    }\n+\n+    function getBindingAttr (\n+        el,\n+        name,\n+        getStatic\n+    ) {\n+        var dynamicValue =\n+            getAndRemoveAttr(el, ':' + name) ||\n+            getAndRemoveAttr(el, 'v-bind:' + name);\n+        if (dynamicValue != null) {\n+            return parseFilters(dynamicValue)\n+        } else if (getStatic !== false) {\n+            var staticValue = getAndRemoveAttr(el, name);\n+            if (staticValue != null) {\n+                return JSON.stringify(staticValue)\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\n+    \u002F\u002F doesn't get processed by processAttrs.\n+    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\n+    \u002F\u002F needed during codegen.\n+    function getAndRemoveAttr (\n+        el,\n+        name,\n+        removeFromMap\n+    ) {\n+        var val;\n+        if ((val = el.attrsMap[name]) != null) {\n+            var list = el.attrsList;\n+            for (var i = 0, l = list.length; i \u003C l; i++) {\n+                if (list[i].name === name) {\n+                    list.splice(i, 1);\n+                    break\n+                }\n+            }\n+        }\n+        if (removeFromMap) {\n+            delete el.attrsMap[name];\n+        }\n+        return val\n+    }\n+\n+    function getAndRemoveAttrByRegex (\n+        el,\n+        name\n+    ) {\n+        var list = el.attrsList;\n+        for (var i = 0, l = list.length; i \u003C l; i++) {\n+            var attr = list[i];\n+            if (name.test(attr.name)) {\n+                list.splice(i, 1);\n+                return attr\n+            }\n+        }\n+    }\n+\n+    function rangeSetItem (\n+        item,\n+        range\n+    ) {\n+        if (range) {\n+            if (range.start != null) {\n+                item.start = range.start;\n+            }\n+            if (range.end != null) {\n+                item.end = range.end;\n+            }\n+        }\n+        return item\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Cross-platform code generation for component v-model\n+     *\u002F\n+    function genComponentModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var ref = modifiers || {};\n+        var number = ref.number;\n+        var trim = ref.trim;\n+\n+        var baseValueExpression = '$$v';\n+        var valueExpression = baseValueExpression;\n+        if (trim) {\n+            valueExpression =\n+                \"(typeof \" + baseValueExpression + \" === 'string'\" +\n+                \"? \" + baseValueExpression + \".trim()\" +\n+                \": \" + baseValueExpression + \")\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+        var assignment = genAssignmentCode(value, valueExpression);\n+\n+        el.model = {\n+            value: (\"(\" + value + \")\"),\n+            expression: JSON.stringify(value),\n+            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n+        };\n+    }\n+\n+    \u002F**\n+     * Cross-platform codegen helper for generating v-model value assignment code.\n+     *\u002F\n+    function genAssignmentCode (\n+        value,\n+        assignment\n+    ) {\n+        var res = parseModel(value);\n+        if (res.key === null) {\n+            return (value + \"=\" + assignment)\n+        } else {\n+            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n+        }\n+    }\n+\n+    \u002F**\n+     * Parse a v-model expression into a base path and a final key segment.\n+     * Handles both dot-path and possible square brackets.\n+     *\n+     * Possible cases:\n+     *\n+     * - test\n+     * - test[key]\n+     * - test[test1[key]]\n+     * - test[\"a\"][key]\n+     * - xxx.test[a[a].test1[key]]\n+     * - test.xxx.a[\"asa\"][test1[key]]\n+     *\n+     *\u002F\n+\n+    var len, str, chr, index$1, expressionPos, expressionEndPos;\n+\n+\n+\n+    function parseModel (val) {\n+        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\n+        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\n+        val = val.trim();\n+        len = val.length;\n+\n+        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\n+            index$1 = val.lastIndexOf('.');\n+            if (index$1 > -1) {\n+                return {\n+                    exp: val.slice(0, index$1),\n+                    key: '\"' + val.slice(index$1 + 1) + '\"'\n+                }\n+            } else {\n+                return {\n+                    exp: val,\n+                    key: null\n+                }\n+            }\n+        }\n+\n+        str = val;\n+        index$1 = expressionPos = expressionEndPos = 0;\n+\n+        while (!eof()) {\n+            chr = next();\n+          \u002F* istanbul ignore if *\u002F\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+            } else if (chr === 0x5B) {\n+                parseBracket(chr);\n+            }\n+        }\n+\n+        return {\n+            exp: val.slice(0, expressionPos),\n+            key: val.slice(expressionPos + 1, expressionEndPos)\n+        }\n+    }\n+\n+    function next () {\n+        return str.charCodeAt(++index$1)\n+    }\n+\n+    function eof () {\n+        return index$1 >= len\n+    }\n+\n+    function isStringStart (chr) {\n+        return chr === 0x22 || chr === 0x27\n+    }\n+\n+    function parseBracket (chr) {\n+        var inBracket = 1;\n+        expressionPos = index$1;\n+        while (!eof()) {\n+            chr = next();\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+                continue\n+            }\n+            if (chr === 0x5B) { inBracket++; }\n+            if (chr === 0x5D) { inBracket--; }\n+            if (inBracket === 0) {\n+                expressionEndPos = index$1;\n+                break\n+            }\n+        }\n+    }\n+\n+    function parseString (chr) {\n+        var stringQuote = chr;\n+        while (!eof()) {\n+            chr = next();\n+            if (chr === stringQuote) {\n+                break\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn$1;\n+\n+    \u002F\u002F in some cases, the event used has to be determined at runtime\n+    \u002F\u002F so we used some reserved tokens during compile.\n+    var RANGE_TOKEN = '__r';\n+    var CHECKBOX_RADIO_TOKEN = '__c';\n+\n+    function model (\n+        el,\n+        dir,\n+        _warn\n+    ) {\n+        warn$1 = _warn;\n+        var value = dir.value;\n+        var modifiers = dir.modifiers;\n+        var tag = el.tag;\n+        var type = el.attrsMap.type;\n+\n+        {\n+            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\n+            \u002F\u002F value will throw an error.\n+            if (tag === 'input' && type === 'file') {\n+                warn$1(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n+                    \"File inputs are read only. Use a v-on:change listener instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+        }\n+\n+        if (el.component) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else if (tag === 'select') {\n+            genSelect(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'checkbox') {\n+            genCheckboxModel(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'radio') {\n+            genRadioModel(el, value, modifiers);\n+        } else if (tag === 'input' || tag === 'textarea') {\n+            genDefaultModel(el, value, modifiers);\n+        } else if (!config.isReservedTag(tag)) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else {\n+            warn$1(\n+                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                \"v-model is not supported on this element type. \" +\n+                'If you are working with contenteditable, it\\'s recommended to ' +\n+                'wrap a library dedicated for that purpose inside a custom component.',\n+                el.rawAttrsMap['v-model']\n+            );\n+        }\n+\n+        \u002F\u002F ensure runtime directive metadata\n+        return true\n+    }\n+\n+    function genCheckboxModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n+        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n+        addProp(el, 'checked',\n+            \"Array.isArray(\" + value + \")\" +\n+            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n+                trueValueBinding === 'true'\n+                    ? (\":(\" + value + \")\")\n+                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n+            )\n+        );\n+        addHandler(el, 'change',\n+            \"var $$a=\" + value + \",\" +\n+            '$$el=$event.target,' +\n+            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n+            'if(Array.isArray($$a)){' +\n+            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n+            '$$i=_i($$a,$$v);' +\n+            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n+            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n+            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n+            null, true\n+        );\n+    }\n+\n+    function genRadioModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n+        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n+        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n+    }\n+\n+    function genSelect (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var selectedVal = \"Array.prototype.filter\" +\n+            \".call($event.target.options,function(o){return o.selected})\" +\n+            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n+            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n+\n+        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n+        var code = \"var $$selectedVal = \" + selectedVal + \";\";\n+        code = code + \" \" + (genAssignmentCode(value, assignment));\n+        addHandler(el, 'change', code, null, true);\n+    }\n+\n+    function genDefaultModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var type = el.attrsMap.type;\n+\n+        \u002F\u002F warn if v-bind:value conflicts with v-model\n+        \u002F\u002F except for inputs with v-bind:type\n+        {\n+            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n+            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n+            if (value$1 && !typeBinding) {\n+                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n+                warn$1(\n+                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n+                    'because the latter already expands to a value binding internally',\n+                    el.rawAttrsMap[binding]\n+                );\n+            }\n+        }\n+\n+        var ref = modifiers || {};\n+        var lazy = ref.lazy;\n+        var number = ref.number;\n+        var trim = ref.trim;\n+        var needCompositionGuard = !lazy && type !== 'range';\n+        var event = lazy\n+            ? 'change'\n+            : type === 'range'\n+                ? RANGE_TOKEN\n+                : 'input';\n+\n+        var valueExpression = '$event.target.value';\n+        if (trim) {\n+            valueExpression = \"$event.target.value.trim()\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+\n+        var code = genAssignmentCode(value, valueExpression);\n+        if (needCompositionGuard) {\n+            code = \"if($event.target.composing)return;\" + code;\n+        }\n+\n+        addProp(el, 'value', (\"(\" + value + \")\"));\n+        addHandler(el, event, code, null, true);\n+        if (trim || number) {\n+            addHandler(el, 'blur', '$forceUpdate()');\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\n+    \u002F\u002F it's important to place the event as the first in the array because\n+    \u002F\u002F the whole point is ensuring the v-model callback gets called before\n+    \u002F\u002F user-attached handlers.\n+    function normalizeEvents (on) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[RANGE_TOKEN])) {\n+            \u002F\u002F IE input[type=range] only supports `change` event\n+            var event = isIE ? 'change' : 'input';\n+            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n+            delete on[RANGE_TOKEN];\n+        }\n+        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\n+        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n+            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n+            delete on[CHECKBOX_RADIO_TOKEN];\n+        }\n+    }\n+\n+    var target$1;\n+\n+    function createOnceHandler$1 (event, handler, capture) {\n+        var _target = target$1; \u002F\u002F save current target element in closure\n+        return function onceHandler () {\n+            var res = handler.apply(null, arguments);\n+            if (res !== null) {\n+                remove$2(event, onceHandler, capture, _target);\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n+    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\n+    \u002F\u002F safe to exclude.\n+    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\n+\n+    function add$1 (\n+        name,\n+        handler,\n+        capture,\n+        passive\n+    ) {\n+        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\n+        \u002F\u002F attached to outer element during patch, and triggered again. This\n+        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\n+        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\n+        \u002F\u002F and the handler would only fire if the event passed to it was fired\n+        \u002F\u002F AFTER it was attached.\n+        if (useMicrotaskFix) {\n+            var attachedTimestamp = currentFlushTimestamp;\n+            var original = handler;\n+            handler = original._wrapper = function (e) {\n+                if (\n+                    \u002F\u002F no bubbling, should always fire.\n+                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\n+                \u002F\u002F certain weird environments...\n+                e.target === e.currentTarget ||\n+                \u002F\u002F event is fired after handler attachment\n+                e.timeStamp >= attachedTimestamp ||\n+                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\n+                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n+                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\n+                e.timeStamp \u003C= 0 ||\n+                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\n+                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\n+                \u002F\u002F starting reference\n+                e.target.ownerDocument !== document\n+                ) {\n+                    return original.apply(this, arguments)\n+                }\n+            };\n+        }\n+        target$1.addEventListener(\n+            name,\n+            handler,\n+            supportsPassive\n+                ? { capture: capture, passive: passive }\n+                : capture\n+        );\n+    }\n+\n+    function remove$2 (\n+        name,\n+        handler,\n+        capture,\n+        _target\n+    ) {\n+        (_target || target$1).removeEventListener(\n+            name,\n+            handler._wrapper || handler,\n+            capture\n+        );\n+    }\n+\n+    function updateDOMListeners (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n+            return\n+        }\n+        var on = vnode.data.on || {};\n+        var oldOn = oldVnode.data.on || {};\n+        target$1 = vnode.elm;\n+        normalizeEvents(on);\n+        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n+        target$1 = undefined;\n+    }\n+\n+    var events = {\n+        create: updateDOMListeners,\n+        update: updateDOMListeners\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var svgContainer;\n+\n+    function updateDOMProps (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n+            return\n+        }\n+        var key, cur;\n+        var elm = vnode.elm;\n+        var oldProps = oldVnode.data.domProps || {};\n+        var props = vnode.data.domProps || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(props.__ob__)) {\n+            props = vnode.data.domProps = extend({}, props);\n+        }\n+\n+        for (key in oldProps) {\n+            if (!(key in props)) {\n+                elm[key] = '';\n+            }\n+        }\n+\n+        for (key in props) {\n+            cur = props[key];\n+            \u002F\u002F ignore children if the node has textContent or innerHTML,\n+            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\n+            \u002F\u002F on subsequent patches (#3360)\n+            if (key === 'textContent' || key === 'innerHTML') {\n+                if (vnode.children) { vnode.children.length = 0; }\n+                if (cur === oldProps[key]) { continue }\n+                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\n+                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\n+                if (elm.childNodes.length === 1) {\n+                    elm.removeChild(elm.childNodes[0]);\n+                }\n+            }\n+\n+            if (key === 'value' && elm.tagName !== 'PROGRESS') {\n+                \u002F\u002F store value as _value as well since\n+                \u002F\u002F non-string values will be stringified\n+                elm._value = cur;\n+                \u002F\u002F avoid resetting cursor position when value is the same\n+                var strCur = isUndef(cur) ? '' : String(cur);\n+                if (shouldUpdateValue(elm, strCur)) {\n+                    elm.value = strCur;\n+                }\n+            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n+                \u002F\u002F IE doesn't support innerHTML for SVG elements\n+                svgContainer = svgContainer || document.createElement('div');\n+                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\n+                var svg = svgContainer.firstChild;\n+                while (elm.firstChild) {\n+                    elm.removeChild(elm.firstChild);\n+                }\n+                while (svg.firstChild) {\n+                    elm.appendChild(svg.firstChild);\n+                }\n+            } else if (\n+                \u002F\u002F skip the update if old and new VDOM state is the same.\n+            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\n+            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\n+            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\n+            cur !== oldProps[key]\n+            ) {\n+                \u002F\u002F some property updates can throw\n+                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\n+                try {\n+                    elm[key] = cur;\n+                } catch (e) {}\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\n+\n+\n+    function shouldUpdateValue (elm, checkVal) {\n+        return (!elm.composing && (\n+            elm.tagName === 'OPTION' ||\n+            isNotInFocusAndDirty(elm, checkVal) ||\n+            isDirtyWithModifiers(elm, checkVal)\n+        ))\n+    }\n+\n+    function isNotInFocusAndDirty (elm, checkVal) {\n+        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\n+        \u002F\u002F not equal to the updated value\n+        var notInFocus = true;\n+        \u002F\u002F #6157\n+        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\n+        try { notInFocus = document.activeElement !== elm; } catch (e) {}\n+        return notInFocus && elm.value !== checkVal\n+    }\n+\n+    function isDirtyWithModifiers (elm, newVal) {\n+        var value = elm.value;\n+        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\n+        if (isDef(modifiers)) {\n+            if (modifiers.number) {\n+                return toNumber(value) !== toNumber(newVal)\n+            }\n+            if (modifiers.trim) {\n+                return value.trim() !== newVal.trim()\n+            }\n+        }\n+        return value !== newVal\n+    }\n+\n+    var domProps = {\n+        create: updateDOMProps,\n+        update: updateDOMProps\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var parseStyleText = cached(function (cssText) {\n+        var res = {};\n+        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\n+        var propertyDelimiter = \u002F:(.+)\u002F;\n+        cssText.split(listDelimiter).forEach(function (item) {\n+            if (item) {\n+                var tmp = item.split(propertyDelimiter);\n+                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n+            }\n+        });\n+        return res\n+    });\n+\n+    \u002F\u002F merge static and dynamic style data on the same vnode\n+    function normalizeStyleData (data) {\n+        var style = normalizeStyleBinding(data.style);\n+        \u002F\u002F static style is pre-processed into an object during compilation\n+        \u002F\u002F and is always a fresh object, so it's safe to merge into it\n+        return data.staticStyle\n+            ? extend(data.staticStyle, style)\n+            : style\n+    }\n+\n+    \u002F\u002F normalize possible array \u002F string values into Object\n+    function normalizeStyleBinding (bindingStyle) {\n+        if (Array.isArray(bindingStyle)) {\n+            return toObject(bindingStyle)\n+        }\n+        if (typeof bindingStyle === 'string') {\n+            return parseStyleText(bindingStyle)\n+        }\n+        return bindingStyle\n+    }\n+\n+    \u002F**\n+     * parent component style should be after child's\n+     * so that parent component's style could override it\n+     *\u002F\n+    function getStyle (vnode, checkChild) {\n+        var res = {};\n+        var styleData;\n+\n+        if (checkChild) {\n+            var childNode = vnode;\n+            while (childNode.componentInstance) {\n+                childNode = childNode.componentInstance._vnode;\n+                if (\n+                    childNode && childNode.data &&\n+                    (styleData = normalizeStyleData(childNode.data))\n+                ) {\n+                    extend(res, styleData);\n+                }\n+            }\n+        }\n+\n+        if ((styleData = normalizeStyleData(vnode.data))) {\n+            extend(res, styleData);\n+        }\n+\n+        var parentNode = vnode;\n+        while ((parentNode = parentNode.parent)) {\n+            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n+                extend(res, styleData);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var cssVarRE = \u002F^--\u002F;\n+    var importantRE = \u002F\\s*!important$\u002F;\n+    var setProp = function (el, name, val) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (cssVarRE.test(name)) {\n+            el.style.setProperty(name, val);\n+        } else if (importantRE.test(val)) {\n+            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n+        } else {\n+            var normalizedName = normalize(name);\n+            if (Array.isArray(val)) {\n+                \u002F\u002F Support values array created by autoprefixer, e.g.\n+                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n+                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\n+                for (var i = 0, len = val.length; i \u003C len; i++) {\n+                    el.style[normalizedName] = val[i];\n+                }\n+            } else {\n+                el.style[normalizedName] = val;\n+            }\n+        }\n+    };\n+\n+    var vendorNames = ['Webkit', 'Moz', 'ms'];\n+\n+    var emptyStyle;\n+    var normalize = cached(function (prop) {\n+        emptyStyle = emptyStyle || document.createElement('div').style;\n+        prop = camelize(prop);\n+        if (prop !== 'filter' && (prop in emptyStyle)) {\n+            return prop\n+        }\n+        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n+        for (var i = 0; i \u003C vendorNames.length; i++) {\n+            var name = vendorNames[i] + capName;\n+            if (name in emptyStyle) {\n+                return name\n+            }\n+        }\n+    });\n+\n+    function updateStyle (oldVnode, vnode) {\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+\n+        if (isUndef(data.staticStyle) && isUndef(data.style) &&\n+            isUndef(oldData.staticStyle) && isUndef(oldData.style)\n+        ) {\n+            return\n+        }\n+\n+        var cur, name;\n+        var el = vnode.elm;\n+        var oldStaticStyle = oldData.staticStyle;\n+        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n+\n+        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\n+        var oldStyle = oldStaticStyle || oldStyleBinding;\n+\n+        var style = normalizeStyleBinding(vnode.data.style) || {};\n+\n+        \u002F\u002F store normalized style under a different key for next diff\n+        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\n+        \u002F\u002F to mutate it.\n+        vnode.data.normalizedStyle = isDef(style.__ob__)\n+            ? extend({}, style)\n+            : style;\n+\n+        var newStyle = getStyle(vnode, true);\n+\n+        for (name in oldStyle) {\n+            if (isUndef(newStyle[name])) {\n+                setProp(el, name, '');\n+            }\n+        }\n+        for (name in newStyle) {\n+            cur = newStyle[name];\n+            if (cur !== oldStyle[name]) {\n+                \u002F\u002F ie9 setting to null has no effect, must use empty string\n+                setProp(el, name, cur == null ? '' : cur);\n+            }\n+        }\n+    }\n+\n+    var style = {\n+        create: updateStyle,\n+        update: updateStyle\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var whitespaceRE = \u002F\\s+\u002F;\n+\n+    \u002F**\n+     * Add class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function addClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n+            } else {\n+                el.classList.add(cls);\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\n+                el.setAttribute('class', (cur + cls).trim());\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Remove class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function removeClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n+            } else {\n+                el.classList.remove(cls);\n+            }\n+            if (!el.classList.length) {\n+                el.removeAttribute('class');\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            var tar = ' ' + cls + ' ';\n+            while (cur.indexOf(tar) >= 0) {\n+                cur = cur.replace(tar, ' ');\n+            }\n+            cur = cur.trim();\n+            if (cur) {\n+                el.setAttribute('class', cur);\n+            } else {\n+                el.removeAttribute('class');\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveTransition (def$$1) {\n+        if (!def$$1) {\n+            return\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if (typeof def$$1 === 'object') {\n+            var res = {};\n+            if (def$$1.css !== false) {\n+                extend(res, autoCssTransition(def$$1.name || 'v'));\n+            }\n+            extend(res, def$$1);\n+            return res\n+        } else if (typeof def$$1 === 'string') {\n+            return autoCssTransition(def$$1)\n+        }\n+    }\n+\n+    var autoCssTransition = cached(function (name) {\n+        return {\n+            enterClass: (name + \"-enter\"),\n+            enterToClass: (name + \"-enter-to\"),\n+            enterActiveClass: (name + \"-enter-active\"),\n+            leaveClass: (name + \"-leave\"),\n+            leaveToClass: (name + \"-leave-to\"),\n+            leaveActiveClass: (name + \"-leave-active\")\n+        }\n+    });\n+\n+    var hasTransition = inBrowser && !isIE9;\n+    var TRANSITION = 'transition';\n+    var ANIMATION = 'animation';\n+\n+    \u002F\u002F Transition property\u002Fevent sniffing\n+    var transitionProp = 'transition';\n+    var transitionEndEvent = 'transitionend';\n+    var animationProp = 'animation';\n+    var animationEndEvent = 'animationend';\n+    if (hasTransition) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (window.ontransitionend === undefined &&\n+            window.onwebkittransitionend !== undefined\n+        ) {\n+            transitionProp = 'WebkitTransition';\n+            transitionEndEvent = 'webkitTransitionEnd';\n+        }\n+        if (window.onanimationend === undefined &&\n+            window.onwebkitanimationend !== undefined\n+        ) {\n+            animationProp = 'WebkitAnimation';\n+            animationEndEvent = 'webkitAnimationEnd';\n+        }\n+    }\n+\n+    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\n+    var raf = inBrowser\n+        ? window.requestAnimationFrame\n+            ? window.requestAnimationFrame.bind(window)\n+            : setTimeout\n+        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\n+\n+    function nextFrame (fn) {\n+        raf(function () {\n+            raf(fn);\n+        });\n+    }\n+\n+    function addTransitionClass (el, cls) {\n+        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n+        if (transitionClasses.indexOf(cls) \u003C 0) {\n+            transitionClasses.push(cls);\n+            addClass(el, cls);\n+        }\n+    }\n+\n+    function removeTransitionClass (el, cls) {\n+        if (el._transitionClasses) {\n+            remove(el._transitionClasses, cls);\n+        }\n+        removeClass(el, cls);\n+    }\n+\n+    function whenTransitionEnds (\n+        el,\n+        expectedType,\n+        cb\n+    ) {\n+        var ref = getTransitionInfo(el, expectedType);\n+        var type = ref.type;\n+        var timeout = ref.timeout;\n+        var propCount = ref.propCount;\n+        if (!type) { return cb() }\n+        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n+        var ended = 0;\n+        var end = function () {\n+            el.removeEventListener(event, onEnd);\n+            cb();\n+        };\n+        var onEnd = function (e) {\n+            if (e.target === el) {\n+                if (++ended >= propCount) {\n+                    end();\n+                }\n+            }\n+        };\n+        setTimeout(function () {\n+            if (ended \u003C propCount) {\n+                end();\n+            }\n+        }, timeout + 1);\n+        el.addEventListener(event, onEnd);\n+    }\n+\n+    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\n+\n+    function getTransitionInfo (el, expectedType) {\n+        var styles = window.getComputedStyle(el);\n+        \u002F\u002F JSDOM may return undefined for transition properties\n+        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n+        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n+        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n+        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n+        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n+        var animationTimeout = getTimeout(animationDelays, animationDurations);\n+\n+        var type;\n+        var timeout = 0;\n+        var propCount = 0;\n+      \u002F* istanbul ignore if *\u002F\n+        if (expectedType === TRANSITION) {\n+            if (transitionTimeout > 0) {\n+                type = TRANSITION;\n+                timeout = transitionTimeout;\n+                propCount = transitionDurations.length;\n+            }\n+        } else if (expectedType === ANIMATION) {\n+            if (animationTimeout > 0) {\n+                type = ANIMATION;\n+                timeout = animationTimeout;\n+                propCount = animationDurations.length;\n+            }\n+        } else {\n+            timeout = Math.max(transitionTimeout, animationTimeout);\n+            type = timeout > 0\n+                ? transitionTimeout > animationTimeout\n+                    ? TRANSITION\n+                    : ANIMATION\n+                : null;\n+            propCount = type\n+                ? type === TRANSITION\n+                    ? transitionDurations.length\n+                    : animationDurations.length\n+                : 0;\n+        }\n+        var hasTransform =\n+            type === TRANSITION &&\n+            transformRE.test(styles[transitionProp + 'Property']);\n+        return {\n+            type: type,\n+            timeout: timeout,\n+            propCount: propCount,\n+            hasTransform: hasTransform\n+        }\n+    }\n+\n+    function getTimeout (delays, durations) {\n+      \u002F* istanbul ignore next *\u002F\n+        while (delays.length \u003C durations.length) {\n+            delays = delays.concat(delays);\n+        }\n+\n+        return Math.max.apply(null, durations.map(function (d, i) {\n+            return toMs(d) + toMs(delays[i])\n+        }))\n+    }\n+\n+    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n+    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\n+    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n+    \u002F\u002F as a floor function) causing unexpected behaviors\n+    function toMs (s) {\n+        return Number(s.slice(0, -1).replace(',', '.')) * 1000\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function enter (vnode, toggleDisplay) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call leave callback now\n+        if (isDef(el._leaveCb)) {\n+            el._leaveCb.cancelled = true;\n+            el._leaveCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data)) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._enterCb) || el.nodeType !== 1) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var enterClass = data.enterClass;\n+        var enterToClass = data.enterToClass;\n+        var enterActiveClass = data.enterActiveClass;\n+        var appearClass = data.appearClass;\n+        var appearToClass = data.appearToClass;\n+        var appearActiveClass = data.appearActiveClass;\n+        var beforeEnter = data.beforeEnter;\n+        var enter = data.enter;\n+        var afterEnter = data.afterEnter;\n+        var enterCancelled = data.enterCancelled;\n+        var beforeAppear = data.beforeAppear;\n+        var appear = data.appear;\n+        var afterAppear = data.afterAppear;\n+        var appearCancelled = data.appearCancelled;\n+        var duration = data.duration;\n+\n+        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\n+        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\n+        \u002F\u002F as the root node of a child component. In that case we need to check\n+        \u002F\u002F \u003Ctransition>'s parent for appear check.\n+        var context = activeInstance;\n+        var transitionNode = activeInstance.$vnode;\n+        while (transitionNode && transitionNode.parent) {\n+            context = transitionNode.context;\n+            transitionNode = transitionNode.parent;\n+        }\n+\n+        var isAppear = !context._isMounted || !vnode.isRootInsert;\n+\n+        if (isAppear && !appear && appear !== '') {\n+            return\n+        }\n+\n+        var startClass = isAppear && appearClass\n+            ? appearClass\n+            : enterClass;\n+        var activeClass = isAppear && appearActiveClass\n+            ? appearActiveClass\n+            : enterActiveClass;\n+        var toClass = isAppear && appearToClass\n+            ? appearToClass\n+            : enterToClass;\n+\n+        var beforeEnterHook = isAppear\n+            ? (beforeAppear || beforeEnter)\n+            : beforeEnter;\n+        var enterHook = isAppear\n+            ? (typeof appear === 'function' ? appear : enter)\n+            : enter;\n+        var afterEnterHook = isAppear\n+            ? (afterAppear || afterEnter)\n+            : afterEnter;\n+        var enterCancelledHook = isAppear\n+            ? (appearCancelled || enterCancelled)\n+            : enterCancelled;\n+\n+        var explicitEnterDuration = toNumber(\n+            isObject(duration)\n+                ? duration.enter\n+                : duration\n+        );\n+\n+        if (explicitEnterDuration != null) {\n+            checkDuration(explicitEnterDuration, 'enter', vnode);\n+        }\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(enterHook);\n+\n+        var cb = el._enterCb = once(function () {\n+            if (expectsCSS) {\n+                removeTransitionClass(el, toClass);\n+                removeTransitionClass(el, activeClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, startClass);\n+                }\n+                enterCancelledHook && enterCancelledHook(el);\n+            } else {\n+                afterEnterHook && afterEnterHook(el);\n+            }\n+            el._enterCb = null;\n+        });\n+\n+        if (!vnode.data.show) {\n+            \u002F\u002F remove pending leave element on enter by injecting an insert hook\n+            mergeVNodeHook(vnode, 'insert', function () {\n+                var parent = el.parentNode;\n+                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n+                if (pendingNode &&\n+                    pendingNode.tag === vnode.tag &&\n+                    pendingNode.elm._leaveCb\n+                ) {\n+                    pendingNode.elm._leaveCb();\n+                }\n+                enterHook && enterHook(el, cb);\n+            });\n+        }\n+\n+        \u002F\u002F start enter transition\n+        beforeEnterHook && beforeEnterHook(el);\n+        if (expectsCSS) {\n+            addTransitionClass(el, startClass);\n+            addTransitionClass(el, activeClass);\n+            nextFrame(function () {\n+                removeTransitionClass(el, startClass);\n+                if (!cb.cancelled) {\n+                    addTransitionClass(el, toClass);\n+                    if (!userWantsControl) {\n+                        if (isValidDuration(explicitEnterDuration)) {\n+                            setTimeout(cb, explicitEnterDuration);\n+                        } else {\n+                            whenTransitionEnds(el, type, cb);\n+                        }\n+                    }\n+                }\n+            });\n+        }\n+\n+        if (vnode.data.show) {\n+            toggleDisplay && toggleDisplay();\n+            enterHook && enterHook(el, cb);\n+        }\n+\n+        if (!expectsCSS && !userWantsControl) {\n+            cb();\n+        }\n+    }\n+\n+    function leave (vnode, rm) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call enter callback now\n+        if (isDef(el._enterCb)) {\n+            el._enterCb.cancelled = true;\n+            el._enterCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data) || el.nodeType !== 1) {\n+            return rm()\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._leaveCb)) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var leaveClass = data.leaveClass;\n+        var leaveToClass = data.leaveToClass;\n+        var leaveActiveClass = data.leaveActiveClass;\n+        var beforeLeave = data.beforeLeave;\n+        var leave = data.leave;\n+        var afterLeave = data.afterLeave;\n+        var leaveCancelled = data.leaveCancelled;\n+        var delayLeave = data.delayLeave;\n+        var duration = data.duration;\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(leave);\n+\n+        var explicitLeaveDuration = toNumber(\n+            isObject(duration)\n+                ? duration.leave\n+                : duration\n+        );\n+\n+        if (isDef(explicitLeaveDuration)) {\n+            checkDuration(explicitLeaveDuration, 'leave', vnode);\n+        }\n+\n+        var cb = el._leaveCb = once(function () {\n+            if (el.parentNode && el.parentNode._pending) {\n+                el.parentNode._pending[vnode.key] = null;\n+            }\n+            if (expectsCSS) {\n+                removeTransitionClass(el, leaveToClass);\n+                removeTransitionClass(el, leaveActiveClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, leaveClass);\n+                }\n+                leaveCancelled && leaveCancelled(el);\n+            } else {\n+                rm();\n+                afterLeave && afterLeave(el);\n+            }\n+            el._leaveCb = null;\n+        });\n+\n+        if (delayLeave) {\n+            delayLeave(performLeave);\n+        } else {\n+            performLeave();\n+        }\n+\n+        function performLeave () {\n+            \u002F\u002F the delayed leave may have already been cancelled\n+            if (cb.cancelled) {\n+                return\n+            }\n+            \u002F\u002F record leaving element\n+            if (!vnode.data.show && el.parentNode) {\n+                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n+            }\n+            beforeLeave && beforeLeave(el);\n+            if (expectsCSS) {\n+                addTransitionClass(el, leaveClass);\n+                addTransitionClass(el, leaveActiveClass);\n+                nextFrame(function () {\n+                    removeTransitionClass(el, leaveClass);\n+                    if (!cb.cancelled) {\n+                        addTransitionClass(el, leaveToClass);\n+                        if (!userWantsControl) {\n+                            if (isValidDuration(explicitLeaveDuration)) {\n+                                setTimeout(cb, explicitLeaveDuration);\n+                            } else {\n+                                whenTransitionEnds(el, type, cb);\n+                            }\n+                        }\n+                    }\n+                });\n+            }\n+            leave && leave(el, cb);\n+            if (!expectsCSS && !userWantsControl) {\n+                cb();\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F only used in dev mode\n+    function checkDuration (val, name, vnode) {\n+        if (typeof val !== 'number') {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\n+                \"got \" + (JSON.stringify(val)) + \".\",\n+                vnode.context\n+            );\n+        } else if (isNaN(val)) {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\n+                'the duration expression might be incorrect.',\n+                vnode.context\n+            );\n+        }\n+    }\n+\n+    function isValidDuration (val) {\n+        return typeof val === 'number' && !isNaN(val)\n+    }\n+\n+    \u002F**\n+     * Normalize a transition hook's argument length. The hook may be:\n+     * - a merged hook (invoker) with the original in .fns\n+     * - a wrapped component method (check ._length)\n+     * - a plain function (.length)\n+     *\u002F\n+    function getHookArgumentsLength (fn) {\n+        if (isUndef(fn)) {\n+            return false\n+        }\n+        var invokerFns = fn.fns;\n+        if (isDef(invokerFns)) {\n+            \u002F\u002F invoker\n+            return getHookArgumentsLength(\n+                Array.isArray(invokerFns)\n+                    ? invokerFns[0]\n+                    : invokerFns\n+            )\n+        } else {\n+            return (fn._length || fn.length) > 1\n+        }\n+    }\n+\n+    function _enter (_, vnode) {\n+        if (vnode.data.show !== true) {\n+            enter(vnode);\n+        }\n+    }\n+\n+    var transition = inBrowser ? {\n+        create: _enter,\n+        activate: _enter,\n+        remove: function remove$$1 (vnode, rm) {\n+          \u002F* istanbul ignore else *\u002F\n+            if (vnode.data.show !== true) {\n+                leave(vnode, rm);\n+            } else {\n+                rm();\n+            }\n+        }\n+    } : {};\n+\n+    var platformModules = [\n+        attrs,\n+        klass,\n+        events,\n+        domProps,\n+        style,\n+        transition\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F the directive module should be applied last, after all\n+    \u002F\u002F built-in modules have been applied.\n+    var modules = platformModules.concat(baseModules);\n+\n+    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n+\n+    \u002F**\n+     * Not type checking this file because flow doesn't like attaching\n+     * properties to Elements.\n+     *\u002F\n+\n+  \u002F* istanbul ignore if *\u002F\n+    if (isIE9) {\n+        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\n+        document.addEventListener('selectionchange', function () {\n+            var el = document.activeElement;\n+            if (el && el.vmodel) {\n+                trigger(el, 'input');\n+            }\n+        });\n+    }\n+\n+    var directive = {\n+        inserted: function inserted (el, binding, vnode, oldVnode) {\n+            if (vnode.tag === 'select') {\n+                \u002F\u002F #6903\n+                if (oldVnode.elm && !oldVnode.elm._vOptions) {\n+                    mergeVNodeHook(vnode, 'postpatch', function () {\n+                        directive.componentUpdated(el, binding, vnode);\n+                    });\n+                } else {\n+                    setSelected(el, binding, vnode.context);\n+                }\n+                el._vOptions = [].map.call(el.options, getValue);\n+            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n+                el._vModifiers = binding.modifiers;\n+                if (!binding.modifiers.lazy) {\n+                    el.addEventListener('compositionstart', onCompositionStart);\n+                    el.addEventListener('compositionend', onCompositionEnd);\n+                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\n+                    \u002F\u002F switching focus before confirming composition choice\n+                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\n+                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\n+                    el.addEventListener('change', onCompositionEnd);\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (isIE9) {\n+                        el.vmodel = true;\n+                    }\n+                }\n+            }\n+        },\n+\n+        componentUpdated: function componentUpdated (el, binding, vnode) {\n+            if (vnode.tag === 'select') {\n+                setSelected(el, binding, vnode.context);\n+                \u002F\u002F in case the options rendered by v-for have changed,\n+                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\n+                \u002F\u002F detect such cases and filter out values that no longer has a matching\n+                \u002F\u002F option in the DOM.\n+                var prevOptions = el._vOptions;\n+                var curOptions = el._vOptions = [].map.call(el.options, getValue);\n+                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n+                    \u002F\u002F trigger change event if\n+                    \u002F\u002F no matching option found for at least one value\n+                    var needReset = el.multiple\n+                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n+                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n+                    if (needReset) {\n+                        trigger(el, 'change');\n+                    }\n+                }\n+            }\n+        }\n+    };\n+\n+    function setSelected (el, binding, vm) {\n+        actuallySetSelected(el, binding, vm);\n+      \u002F* istanbul ignore if *\u002F\n+        if (isIE || isEdge) {\n+            setTimeout(function () {\n+                actuallySetSelected(el, binding, vm);\n+            }, 0);\n+        }\n+    }\n+\n+    function actuallySetSelected (el, binding, vm) {\n+        var value = binding.value;\n+        var isMultiple = el.multiple;\n+        if (isMultiple && !Array.isArray(value)) {\n+            warn(\n+                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n+                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n+                vm\n+            );\n+            return\n+        }\n+        var selected, option;\n+        for (var i = 0, l = el.options.length; i \u003C l; i++) {\n+            option = el.options[i];\n+            if (isMultiple) {\n+                selected = looseIndexOf(value, getValue(option)) > -1;\n+                if (option.selected !== selected) {\n+                    option.selected = selected;\n+                }\n+            } else {\n+                if (looseEqual(getValue(option), value)) {\n+                    if (el.selectedIndex !== i) {\n+                        el.selectedIndex = i;\n+                    }\n+                    return\n+                }\n+            }\n+        }\n+        if (!isMultiple) {\n+            el.selectedIndex = -1;\n+        }\n+    }\n+\n+    function hasNoMatchingOption (value, options) {\n+        return options.every(function (o) { return !looseEqual(o, value); })\n+    }\n+\n+    function getValue (option) {\n+        return '_value' in option\n+            ? option._value\n+            : option.value\n+    }\n+\n+    function onCompositionStart (e) {\n+        e.target.composing = true;\n+    }\n+\n+    function onCompositionEnd (e) {\n+        \u002F\u002F prevent triggering an input event for no reason\n+        if (!e.target.composing) { return }\n+        e.target.composing = false;\n+        trigger(e.target, 'input');\n+    }\n+\n+    function trigger (el, type) {\n+        var e = document.createEvent('HTMLEvents');\n+        e.initEvent(type, true, true);\n+        el.dispatchEvent(e);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F recursively search for possible transition defined inside the component root\n+    function locateNode (vnode) {\n+        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n+            ? locateNode(vnode.componentInstance._vnode)\n+            : vnode\n+    }\n+\n+    var show = {\n+        bind: function bind (el, ref, vnode) {\n+            var value = ref.value;\n+\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            var originalDisplay = el.__vOriginalDisplay =\n+                el.style.display === 'none' ? '' : el.style.display;\n+            if (value && transition$$1) {\n+                vnode.data.show = true;\n+                enter(vnode, function () {\n+                    el.style.display = originalDisplay;\n+                });\n+            } else {\n+                el.style.display = value ? originalDisplay : 'none';\n+            }\n+        },\n+\n+        update: function update (el, ref, vnode) {\n+            var value = ref.value;\n+            var oldValue = ref.oldValue;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (!value === !oldValue) { return }\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            if (transition$$1) {\n+                vnode.data.show = true;\n+                if (value) {\n+                    enter(vnode, function () {\n+                        el.style.display = el.__vOriginalDisplay;\n+                    });\n+                } else {\n+                    leave(vnode, function () {\n+                        el.style.display = 'none';\n+                    });\n+                }\n+            } else {\n+                el.style.display = value ? el.__vOriginalDisplay : 'none';\n+            }\n+        },\n+\n+        unbind: function unbind (\n+            el,\n+            binding,\n+            vnode,\n+            oldVnode,\n+            isDestroy\n+        ) {\n+            if (!isDestroy) {\n+                el.style.display = el.__vOriginalDisplay;\n+            }\n+        }\n+    };\n+\n+    var platformDirectives = {\n+        model: directive,\n+        show: show\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var transitionProps = {\n+        name: String,\n+        appear: Boolean,\n+        css: Boolean,\n+        mode: String,\n+        type: String,\n+        enterClass: String,\n+        leaveClass: String,\n+        enterToClass: String,\n+        leaveToClass: String,\n+        enterActiveClass: String,\n+        leaveActiveClass: String,\n+        appearClass: String,\n+        appearActiveClass: String,\n+        appearToClass: String,\n+        duration: [Number, String, Object]\n+    };\n+\n+    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\n+    \u002F\u002F we want to recursively retrieve the real component to be rendered\n+    function getRealChild (vnode) {\n+        var compOptions = vnode && vnode.componentOptions;\n+        if (compOptions && compOptions.Ctor.options.abstract) {\n+            return getRealChild(getFirstComponentChild(compOptions.children))\n+        } else {\n+            return vnode\n+        }\n+    }\n+\n+    function extractTransitionData (comp) {\n+        var data = {};\n+        var options = comp.$options;\n+        \u002F\u002F props\n+        for (var key in options.propsData) {\n+            data[key] = comp[key];\n+        }\n+        \u002F\u002F events.\n+        \u002F\u002F extract listeners and pass them directly to the transition methods\n+        var listeners = options._parentListeners;\n+        for (var key$1 in listeners) {\n+            data[camelize(key$1)] = listeners[key$1];\n+        }\n+        return data\n+    }\n+\n+    function placeholder (h, rawChild) {\n+        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\n+            return h('keep-alive', {\n+                props: rawChild.componentOptions.propsData\n+            })\n+        }\n+    }\n+\n+    function hasParentTransition (vnode) {\n+        while ((vnode = vnode.parent)) {\n+            if (vnode.data.transition) {\n+                return true\n+            }\n+        }\n+    }\n+\n+    function isSameChild (child, oldChild) {\n+        return oldChild.key === child.key && oldChild.tag === child.tag\n+    }\n+\n+    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n+\n+    var isVShowDirective = function (d) { return d.name === 'show'; };\n+\n+    var Transition = {\n+        name: 'transition',\n+        props: transitionProps,\n+        abstract: true,\n+\n+        render: function render (h) {\n+            var this$1 = this;\n+\n+            var children = this.$slots.default;\n+            if (!children) {\n+                return\n+            }\n+\n+            \u002F\u002F filter out text nodes (possible whitespaces)\n+            children = children.filter(isNotTextNode);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!children.length) {\n+                return\n+            }\n+\n+            \u002F\u002F warn multiple elements\n+            if (children.length > 1) {\n+                warn(\n+                    '\u003Ctransition> can only be used on a single element. Use ' +\n+                    '\u003Ctransition-group> for lists.',\n+                    this.$parent\n+                );\n+            }\n+\n+            var mode = this.mode;\n+\n+            \u002F\u002F warn invalid mode\n+            if (mode && mode !== 'in-out' && mode !== 'out-in'\n+            ) {\n+                warn(\n+                    'invalid \u003Ctransition> mode: ' + mode,\n+                    this.$parent\n+                );\n+            }\n+\n+            var rawChild = children[0];\n+\n+            \u002F\u002F if this is a component root node and the component's\n+            \u002F\u002F parent container node also has transition, skip.\n+            if (hasParentTransition(this.$vnode)) {\n+                return rawChild\n+            }\n+\n+            \u002F\u002F apply transition data to child\n+            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\n+            var child = getRealChild(rawChild);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!child) {\n+                return rawChild\n+            }\n+\n+            if (this._leaving) {\n+                return placeholder(h, rawChild)\n+            }\n+\n+            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\n+            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\n+            \u002F\u002F during entering.\n+            var id = \"__transition-\" + (this._uid) + \"-\";\n+            child.key = child.key == null\n+                ? child.isComment\n+                    ? id + 'comment'\n+                    : id + child.tag\n+                : isPrimitive(child.key)\n+                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n+                    : child.key;\n+\n+            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n+            var oldRawChild = this._vnode;\n+            var oldChild = getRealChild(oldRawChild);\n+\n+            \u002F\u002F mark v-show\n+            \u002F\u002F so that the transition module can hand over the control to the directive\n+            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n+                child.data.show = true;\n+            }\n+\n+            if (\n+                oldChild &&\n+                oldChild.data &&\n+                !isSameChild(child, oldChild) &&\n+                !isAsyncPlaceholder(oldChild) &&\n+                \u002F\u002F #6687 component root is a comment node\n+                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n+            ) {\n+                \u002F\u002F replace old child transition data with fresh one\n+                \u002F\u002F important for dynamic transitions!\n+                var oldData = oldChild.data.transition = extend({}, data);\n+                \u002F\u002F handle transition mode\n+                if (mode === 'out-in') {\n+                    \u002F\u002F return placeholder node and queue update when leave finishes\n+                    this._leaving = true;\n+                    mergeVNodeHook(oldData, 'afterLeave', function () {\n+                        this$1._leaving = false;\n+                        this$1.$forceUpdate();\n+                    });\n+                    return placeholder(h, rawChild)\n+                } else if (mode === 'in-out') {\n+                    if (isAsyncPlaceholder(child)) {\n+                        return oldRawChild\n+                    }\n+                    var delayedLeave;\n+                    var performLeave = function () { delayedLeave(); };\n+                    mergeVNodeHook(data, 'afterEnter', performLeave);\n+                    mergeVNodeHook(data, 'enterCancelled', performLeave);\n+                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n+                }\n+            }\n+\n+            return rawChild\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var props = extend({\n+        tag: String,\n+        moveClass: String\n+    }, transitionProps);\n+\n+    delete props.mode;\n+\n+    var TransitionGroup = {\n+        props: props,\n+\n+        beforeMount: function beforeMount () {\n+            var this$1 = this;\n+\n+            var update = this._update;\n+            this._update = function (vnode, hydrating) {\n+                var restoreActiveInstance = setActiveInstance(this$1);\n+                \u002F\u002F force removing pass\n+                this$1.__patch__(\n+                    this$1._vnode,\n+                    this$1.kept,\n+                    false, \u002F\u002F hydrating\n+                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\n+                );\n+                this$1._vnode = this$1.kept;\n+                restoreActiveInstance();\n+                update.call(this$1, vnode, hydrating);\n+            };\n+        },\n+\n+        render: function render (h) {\n+            var tag = this.tag || this.$vnode.data.tag || 'span';\n+            var map = Object.create(null);\n+            var prevChildren = this.prevChildren = this.children;\n+            var rawChildren = this.$slots.default || [];\n+            var children = this.children = [];\n+            var transitionData = extractTransitionData(this);\n+\n+            for (var i = 0; i \u003C rawChildren.length; i++) {\n+                var c = rawChildren[i];\n+                if (c.tag) {\n+                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n+                        children.push(c);\n+                        map[c.key] = c\n+                        ;(c.data || (c.data = {})).transition = transitionData;\n+                    } else {\n+                        var opts = c.componentOptions;\n+                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n+                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\n+                    }\n+                }\n+            }\n+\n+            if (prevChildren) {\n+                var kept = [];\n+                var removed = [];\n+                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\n+                    var c$1 = prevChildren[i$1];\n+                    c$1.data.transition = transitionData;\n+                    c$1.data.pos = c$1.elm.getBoundingClientRect();\n+                    if (map[c$1.key]) {\n+                        kept.push(c$1);\n+                    } else {\n+                        removed.push(c$1);\n+                    }\n+                }\n+                this.kept = h(tag, null, kept);\n+                this.removed = removed;\n+            }\n+\n+            return h(tag, null, children)\n+        },\n+\n+        updated: function updated () {\n+            var children = this.prevChildren;\n+            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n+            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n+                return\n+            }\n+\n+            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\n+            \u002F\u002F in each iteration - which helps prevent layout thrashing.\n+            children.forEach(callPendingCbs);\n+            children.forEach(recordPosition);\n+            children.forEach(applyTranslation);\n+\n+            \u002F\u002F force reflow to put everything in position\n+            \u002F\u002F assign to this to avoid being removed in tree-shaking\n+            \u002F\u002F $flow-disable-line\n+            this._reflow = document.body.offsetHeight;\n+\n+            children.forEach(function (c) {\n+                if (c.data.moved) {\n+                    var el = c.elm;\n+                    var s = el.style;\n+                    addTransitionClass(el, moveClass);\n+                    s.transform = s.WebkitTransform = s.transitionDuration = '';\n+                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n+                        if (e && e.target !== el) {\n+                            return\n+                        }\n+                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\n+                            el.removeEventListener(transitionEndEvent, cb);\n+                            el._moveCb = null;\n+                            removeTransitionClass(el, moveClass);\n+                        }\n+                    });\n+                }\n+            });\n+        },\n+\n+        methods: {\n+            hasMove: function hasMove (el, moveClass) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (!hasTransition) {\n+                    return false\n+                }\n+              \u002F* istanbul ignore if *\u002F\n+                if (this._hasMove) {\n+                    return this._hasMove\n+                }\n+                \u002F\u002F Detect whether an element with the move class applied has\n+                \u002F\u002F CSS transitions. Since the element may be inside an entering\n+                \u002F\u002F transition at this very moment, we make a clone of it and remove\n+                \u002F\u002F all other transition classes applied to ensure only the move class\n+                \u002F\u002F is applied.\n+                var clone = el.cloneNode();\n+                if (el._transitionClasses) {\n+                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n+                }\n+                addClass(clone, moveClass);\n+                clone.style.display = 'none';\n+                this.$el.appendChild(clone);\n+                var info = getTransitionInfo(clone);\n+                this.$el.removeChild(clone);\n+                return (this._hasMove = info.hasTransform)\n+            }\n+        }\n+    };\n+\n+    function callPendingCbs (c) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._moveCb) {\n+            c.elm._moveCb();\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._enterCb) {\n+            c.elm._enterCb();\n+        }\n+    }\n+\n+    function recordPosition (c) {\n+        c.data.newPos = c.elm.getBoundingClientRect();\n+    }\n+\n+    function applyTranslation (c) {\n+        var oldPos = c.data.pos;\n+        var newPos = c.data.newPos;\n+        var dx = oldPos.left - newPos.left;\n+        var dy = oldPos.top - newPos.top;\n+        if (dx || dy) {\n+            c.data.moved = true;\n+            var s = c.elm.style;\n+            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n+            s.transitionDuration = '0s';\n+        }\n+    }\n+\n+    var platformComponents = {\n+        Transition: Transition,\n+        TransitionGroup: TransitionGroup\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F install platform specific utils\n+    Vue.config.mustUseProp = mustUseProp;\n+    Vue.config.isReservedTag = isReservedTag;\n+    Vue.config.isReservedAttr = isReservedAttr;\n+    Vue.config.getTagNamespace = getTagNamespace;\n+    Vue.config.isUnknownElement = isUnknownElement;\n+\n+    \u002F\u002F install platform runtime directives & components\n+    extend(Vue.options.directives, platformDirectives);\n+    extend(Vue.options.components, platformComponents);\n+\n+    \u002F\u002F install platform patch function\n+    Vue.prototype.__patch__ = inBrowser ? patch : noop;\n+\n+    \u002F\u002F public mount method\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && inBrowser ? query(el) : undefined;\n+        return mountComponent(this, el, hydrating)\n+    };\n+\n+    \u002F\u002F devtools global hook\n+  \u002F* istanbul ignore next *\u002F\n+    if (inBrowser) {\n+        setTimeout(function () {\n+            if (config.devtools) {\n+                if (devtools) {\n+                    devtools.emit('init', Vue);\n+                } else {\n+                    console[console.info ? 'info' : 'log'](\n+                        'Download the Vue Devtools extension for a better development experience:\\n' +\n+                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\n+                    );\n+                }\n+            }\n+            if (config.productionTip !== false &&\n+                typeof console !== 'undefined'\n+            ) {\n+                console[console.info ? 'info' : 'log'](\n+                    \"You are running Vue in development mode.\\n\" +\n+                    \"Make sure to turn on production mode when deploying for production.\\n\" +\n+                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\n+                );\n+            }\n+        }, 0);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\n+    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\n+\n+    var buildRegex = cached(function (delimiters) {\n+        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n+        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n+        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n+    });\n+\n+\n+\n+    function parseText (\n+        text,\n+        delimiters\n+    ) {\n+        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n+        if (!tagRE.test(text)) {\n+            return\n+        }\n+        var tokens = [];\n+        var rawTokens = [];\n+        var lastIndex = tagRE.lastIndex = 0;\n+        var match, index, tokenValue;\n+        while ((match = tagRE.exec(text))) {\n+            index = match.index;\n+            \u002F\u002F push text token\n+            if (index > lastIndex) {\n+                rawTokens.push(tokenValue = text.slice(lastIndex, index));\n+                tokens.push(JSON.stringify(tokenValue));\n+            }\n+            \u002F\u002F tag token\n+            var exp = parseFilters(match[1].trim());\n+            tokens.push((\"_s(\" + exp + \")\"));\n+            rawTokens.push({ '@binding': exp });\n+            lastIndex = index + match[0].length;\n+        }\n+        if (lastIndex \u003C text.length) {\n+            rawTokens.push(tokenValue = text.slice(lastIndex));\n+            tokens.push(JSON.stringify(tokenValue));\n+        }\n+        return {\n+            expression: tokens.join('+'),\n+            tokens: rawTokens\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticClass = getAndRemoveAttr(el, 'class');\n+        if (staticClass) {\n+            var res = parseText(staticClass, options.delimiters);\n+            if (res) {\n+                warn(\n+                    \"class=\\\"\" + staticClass + \"\\\": \" +\n+                    'Interpolation inside attributes has been removed. ' +\n+                    'Use v-bind or the colon shorthand instead. For example, ' +\n+                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\n+                    el.rawAttrsMap['class']\n+                );\n+            }\n+        }\n+        if (staticClass) {\n+            el.staticClass = JSON.stringify(staticClass);\n+        }\n+        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\n+        if (classBinding) {\n+            el.classBinding = classBinding;\n+        }\n+    }\n+\n+    function genData (el) {\n+        var data = '';\n+        if (el.staticClass) {\n+            data += \"staticClass:\" + (el.staticClass) + \",\";\n+        }\n+        if (el.classBinding) {\n+            data += \"class:\" + (el.classBinding) + \",\";\n+        }\n+        return data\n+    }\n+\n+    var klass$1 = {\n+        staticKeys: ['staticClass'],\n+        transformNode: transformNode,\n+        genData: genData\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode$1 (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticStyle = getAndRemoveAttr(el, 'style');\n+        if (staticStyle) {\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                var res = parseText(staticStyle, options.delimiters);\n+                if (res) {\n+                    warn(\n+                        \"style=\\\"\" + staticStyle + \"\\\": \" +\n+                        'Interpolation inside attributes has been removed. ' +\n+                        'Use v-bind or the colon shorthand instead. For example, ' +\n+                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\n+                        el.rawAttrsMap['style']\n+                    );\n+                }\n+            }\n+            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n+        }\n+\n+        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\n+        if (styleBinding) {\n+            el.styleBinding = styleBinding;\n+        }\n+    }\n+\n+    function genData$1 (el) {\n+        var data = '';\n+        if (el.staticStyle) {\n+            data += \"staticStyle:\" + (el.staticStyle) + \",\";\n+        }\n+        if (el.styleBinding) {\n+            data += \"style:(\" + (el.styleBinding) + \"),\";\n+        }\n+        return data\n+    }\n+\n+    var style$1 = {\n+        staticKeys: ['staticStyle'],\n+        transformNode: transformNode$1,\n+        genData: genData$1\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var decoder;\n+\n+    var he = {\n+        decode: function decode (html) {\n+            decoder = decoder || document.createElement('div');\n+            decoder.innerHTML = html;\n+            return decoder.textContent\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isUnaryTag = makeMap(\n+        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n+        'link,meta,param,source,track,wbr'\n+    );\n+\n+    \u002F\u002F Elements that you can, intentionally, leave open\n+    \u002F\u002F (and which close themselves)\n+    var canBeLeftOpenTag = makeMap(\n+        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n+    );\n+\n+    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\n+    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\n+    var isNonPhrasingTag = makeMap(\n+        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n+        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n+        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n+        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n+        'title,tr,track'\n+    );\n+\n+    \u002F**\n+     * Not type-checking this file because it's mostly vendor code.\n+     *\u002F\n+\n+        \u002F\u002F Regular Expressions for parsing tags and attributes\n+    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\n+    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\n+    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\n+    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\n+    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\n+    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\n+    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\n+    var comment = \u002F^\u003C!\\--\u002F;\n+    var conditionalComment = \u002F^\u003C!\\[\u002F;\n+\n+    \u002F\u002F Special Elements (can contain anything)\n+    var isPlainTextElement = makeMap('script,style,textarea', true);\n+    var reCache = {};\n+\n+    var decodingMap = {\n+        '&lt;': '\u003C',\n+        '&gt;': '>',\n+        '&quot;': '\"',\n+        '&amp;': '&',\n+        '&#10;': '\\n',\n+        '&#9;': '\\t',\n+        '&#39;': \"'\"\n+    };\n+    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\n+    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\n+\n+    \u002F\u002F #5992\n+    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\n+    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n+\n+    function decodeAttr (value, shouldDecodeNewlines) {\n+        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n+        return value.replace(re, function (match) { return decodingMap[match]; })\n+    }\n+\n+    function parseHTML (html, options) {\n+        var stack = [];\n+        var expectHTML = options.expectHTML;\n+        var isUnaryTag$$1 = options.isUnaryTag || no;\n+        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n+        var index = 0;\n+        var last, lastTag;\n+        while (html) {\n+            last = html;\n+            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\n+            if (!lastTag || !isPlainTextElement(lastTag)) {\n+                var textEnd = html.indexOf('\u003C');\n+                if (textEnd === 0) {\n+                    \u002F\u002F Comment:\n+                    if (comment.test(html)) {\n+                        var commentEnd = html.indexOf('-->');\n+\n+                        if (commentEnd >= 0) {\n+                            if (options.shouldKeepComment) {\n+                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n+                            }\n+                            advance(commentEnd + 3);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\n+                    if (conditionalComment.test(html)) {\n+                        var conditionalEnd = html.indexOf(']>');\n+\n+                        if (conditionalEnd >= 0) {\n+                            advance(conditionalEnd + 2);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F Doctype:\n+                    var doctypeMatch = html.match(doctype);\n+                    if (doctypeMatch) {\n+                        advance(doctypeMatch[0].length);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F End tag:\n+                    var endTagMatch = html.match(endTag);\n+                    if (endTagMatch) {\n+                        var curIndex = index;\n+                        advance(endTagMatch[0].length);\n+                        parseEndTag(endTagMatch[1], curIndex, index);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F Start tag:\n+                    var startTagMatch = parseStartTag();\n+                    if (startTagMatch) {\n+                        handleStartTag(startTagMatch);\n+                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n+                            advance(1);\n+                        }\n+                        continue\n+                    }\n+                }\n+\n+                var text = (void 0), rest = (void 0), next = (void 0);\n+                if (textEnd >= 0) {\n+                    rest = html.slice(textEnd);\n+                    while (\n+                    !endTag.test(rest) &&\n+                    !startTagOpen.test(rest) &&\n+                    !comment.test(rest) &&\n+                    !conditionalComment.test(rest)\n+                        ) {\n+                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\n+                        next = rest.indexOf('\u003C', 1);\n+                        if (next \u003C 0) { break }\n+                        textEnd += next;\n+                        rest = html.slice(textEnd);\n+                    }\n+                    text = html.substring(0, textEnd);\n+                }\n+\n+                if (textEnd \u003C 0) {\n+                    text = html;\n+                }\n+\n+                if (text) {\n+                    advance(text.length);\n+                }\n+\n+                if (options.chars && text) {\n+                    options.chars(text, index - text.length, index);\n+                }\n+            } else {\n+                var endTagLength = 0;\n+                var stackedTag = lastTag.toLowerCase();\n+                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\n+                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n+                    endTagLength = endTag.length;\n+                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n+                        text = text\n+                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\n+                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\n+                    }\n+                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\n+                        text = text.slice(1);\n+                    }\n+                    if (options.chars) {\n+                        options.chars(text);\n+                    }\n+                    return ''\n+                });\n+                index += html.length - rest$1.length;\n+                html = rest$1;\n+                parseEndTag(stackedTag, index - endTagLength, index);\n+            }\n+\n+            if (html === last) {\n+                options.chars && options.chars(html);\n+                if (!stack.length && options.warn) {\n+                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n+                }\n+                break\n+            }\n+        }\n+\n+        \u002F\u002F Clean up any remaining tags\n+        parseEndTag();\n+\n+        function advance (n) {\n+            index += n;\n+            html = html.substring(n);\n+        }\n+\n+        function parseStartTag () {\n+            var start = html.match(startTagOpen);\n+            if (start) {\n+                var match = {\n+                    tagName: start[1],\n+                    attrs: [],\n+                    start: index\n+                };\n+                advance(start[0].length);\n+                var end, attr;\n+                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n+                    attr.start = index;\n+                    advance(attr[0].length);\n+                    attr.end = index;\n+                    match.attrs.push(attr);\n+                }\n+                if (end) {\n+                    match.unarySlash = end[1];\n+                    advance(end[0].length);\n+                    match.end = index;\n+                    return match\n+                }\n+            }\n+        }\n+\n+        function handleStartTag (match) {\n+            var tagName = match.tagName;\n+            var unarySlash = match.unarySlash;\n+\n+            if (expectHTML) {\n+                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n+                    parseEndTag(lastTag);\n+                }\n+                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n+                    parseEndTag(tagName);\n+                }\n+            }\n+\n+            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n+\n+            var l = match.attrs.length;\n+            var attrs = new Array(l);\n+            for (var i = 0; i \u003C l; i++) {\n+                var args = match.attrs[i];\n+                var value = args[3] || args[4] || args[5] || '';\n+                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n+                    ? options.shouldDecodeNewlinesForHref\n+                    : options.shouldDecodeNewlines;\n+                attrs[i] = {\n+                    name: args[1],\n+                    value: decodeAttr(value, shouldDecodeNewlines)\n+                };\n+                if (options.outputSourceRange) {\n+                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\n+                    attrs[i].end = args.end;\n+                }\n+            }\n+\n+            if (!unary) {\n+                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n+                lastTag = tagName;\n+            }\n+\n+            if (options.start) {\n+                options.start(tagName, attrs, unary, match.start, match.end);\n+            }\n+        }\n+\n+        function parseEndTag (tagName, start, end) {\n+            var pos, lowerCasedTagName;\n+            if (start == null) { start = index; }\n+            if (end == null) { end = index; }\n+\n+            \u002F\u002F Find the closest opened tag of the same type\n+            if (tagName) {\n+                lowerCasedTagName = tagName.toLowerCase();\n+                for (pos = stack.length - 1; pos >= 0; pos--) {\n+                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n+                        break\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F If no tag name is provided, clean shop\n+                pos = 0;\n+            }\n+\n+            if (pos >= 0) {\n+                \u002F\u002F Close all the open elements, up the stack\n+                for (var i = stack.length - 1; i >= pos; i--) {\n+                    if (i > pos || !tagName &&\n+                        options.warn\n+                    ) {\n+                        options.warn(\n+                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\n+                            { start: stack[i].start, end: stack[i].end }\n+                        );\n+                    }\n+                    if (options.end) {\n+                        options.end(stack[i].tag, start, end);\n+                    }\n+                }\n+\n+                \u002F\u002F Remove the open elements from the stack\n+                stack.length = pos;\n+                lastTag = pos && stack[pos - 1].tag;\n+            } else if (lowerCasedTagName === 'br') {\n+                if (options.start) {\n+                    options.start(tagName, [], true, start, end);\n+                }\n+            } else if (lowerCasedTagName === 'p') {\n+                if (options.start) {\n+                    options.start(tagName, [], false, start, end);\n+                }\n+                if (options.end) {\n+                    options.end(tagName, start, end);\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var onRE = \u002F^@|^v-on:\u002F;\n+    var dirRE = \u002F^v-|^@|^:\u002F;\n+    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\n+    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\n+    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\n+    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\n+\n+    var argRE = \u002F:(.*)$\u002F;\n+    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\n+    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\n+\n+    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\n+\n+    var lineBreakRE = \u002F[\\r\\n]\u002F;\n+    var whitespaceRE$1 = \u002F\\s+\u002Fg;\n+\n+    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\n+\n+    var decodeHTMLCached = cached(he.decode);\n+\n+    var emptySlotScopeToken = \"_empty_\";\n+\n+    \u002F\u002F configurable state\n+    var warn$2;\n+    var delimiters;\n+    var transforms;\n+    var preTransforms;\n+    var postTransforms;\n+    var platformIsPreTag;\n+    var platformMustUseProp;\n+    var platformGetTagNamespace;\n+    var maybeComponent;\n+\n+    function createASTElement (\n+        tag,\n+        attrs,\n+        parent\n+    ) {\n+        return {\n+            type: 1,\n+            tag: tag,\n+            attrsList: attrs,\n+            attrsMap: makeAttrsMap(attrs),\n+            rawAttrsMap: {},\n+            parent: parent,\n+            children: []\n+        }\n+    }\n+\n+    \u002F**\n+     * Convert HTML string to AST.\n+     *\u002F\n+    function parse (\n+        template,\n+        options\n+    ) {\n+        warn$2 = options.warn || baseWarn;\n+\n+        platformIsPreTag = options.isPreTag || no;\n+        platformMustUseProp = options.mustUseProp || no;\n+        platformGetTagNamespace = options.getTagNamespace || no;\n+        var isReservedTag = options.isReservedTag || no;\n+        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+\n+        transforms = pluckModuleFunction(options.modules, 'transformNode');\n+        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n+        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n+\n+        delimiters = options.delimiters;\n+\n+        var stack = [];\n+        var preserveWhitespace = options.preserveWhitespace !== false;\n+        var whitespaceOption = options.whitespace;\n+        var root;\n+        var currentParent;\n+        var inVPre = false;\n+        var inPre = false;\n+        var warned = false;\n+\n+        function warnOnce (msg, range) {\n+            if (!warned) {\n+                warned = true;\n+                warn$2(msg, range);\n+            }\n+        }\n+\n+        function closeElement (element) {\n+            trimEndingWhitespace(element);\n+            if (!inVPre && !element.processed) {\n+                element = processElement(element, options);\n+            }\n+            \u002F\u002F tree management\n+            if (!stack.length && element !== root) {\n+                \u002F\u002F allow root elements with v-if, v-else-if and v-else\n+                if (root.if && (element.elseif || element.else)) {\n+                    {\n+                        checkRootConstraints(element);\n+                    }\n+                    addIfCondition(root, {\n+                        exp: element.elseif,\n+                        block: element\n+                    });\n+                } else {\n+                    warnOnce(\n+                        \"Component template should contain exactly one root element. \" +\n+                        \"If you are using v-if on multiple elements, \" +\n+                        \"use v-else-if to chain them instead.\",\n+                        { start: element.start }\n+                    );\n+                }\n+            }\n+            if (currentParent && !element.forbidden) {\n+                if (element.elseif || element.else) {\n+                    processIfConditions(element, currentParent);\n+                } else {\n+                    if (element.slotScope) {\n+                        \u002F\u002F scoped slot\n+                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\n+                        \u002F\u002F find it as the prev node.\n+                        var name = element.slotTarget || '\"default\"'\n+                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n+                    }\n+                    currentParent.children.push(element);\n+                    element.parent = currentParent;\n+                }\n+            }\n+\n+            \u002F\u002F final children cleanup\n+            \u002F\u002F filter out scoped slots\n+            element.children = element.children.filter(function (c) { return !(c).slotScope; });\n+            \u002F\u002F remove trailing whitespace node again\n+            trimEndingWhitespace(element);\n+\n+            \u002F\u002F check pre state\n+            if (element.pre) {\n+                inVPre = false;\n+            }\n+            if (platformIsPreTag(element.tag)) {\n+                inPre = false;\n+            }\n+            \u002F\u002F apply post-transforms\n+            for (var i = 0; i \u003C postTransforms.length; i++) {\n+                postTransforms[i](element, options);\n+            }\n+        }\n+\n+        function trimEndingWhitespace (el) {\n+            \u002F\u002F remove trailing whitespace node\n+            if (!inPre) {\n+                var lastNode;\n+                while (\n+                (lastNode = el.children[el.children.length - 1]) &&\n+                lastNode.type === 3 &&\n+                lastNode.text === ' '\n+                    ) {\n+                    el.children.pop();\n+                }\n+            }\n+        }\n+\n+        function checkRootConstraints (el) {\n+            if (el.tag === 'slot' || el.tag === 'template') {\n+                warnOnce(\n+                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\n+                    'contain multiple nodes.',\n+                    { start: el.start }\n+                );\n+            }\n+            if (el.attrsMap.hasOwnProperty('v-for')) {\n+                warnOnce(\n+                    'Cannot use v-for on stateful component root element because ' +\n+                    'it renders multiple elements.',\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+\n+        parseHTML(template, {\n+            warn: warn$2,\n+            expectHTML: options.expectHTML,\n+            isUnaryTag: options.isUnaryTag,\n+            canBeLeftOpenTag: options.canBeLeftOpenTag,\n+            shouldDecodeNewlines: options.shouldDecodeNewlines,\n+            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n+            shouldKeepComment: options.comments,\n+            outputSourceRange: options.outputSourceRange,\n+            start: function start (tag, attrs, unary, start$1, end) {\n+                \u002F\u002F check namespace.\n+                \u002F\u002F inherit parent ns if there is one\n+                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n+\n+                \u002F\u002F handle IE svg bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE && ns === 'svg') {\n+                    attrs = guardIESVGBug(attrs);\n+                }\n+\n+                var element = createASTElement(tag, attrs, currentParent);\n+                if (ns) {\n+                    element.ns = ns;\n+                }\n+\n+                {\n+                    if (options.outputSourceRange) {\n+                        element.start = start$1;\n+                        element.end = end;\n+                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n+                            cumulated[attr.name] = attr;\n+                            return cumulated\n+                        }, {});\n+                    }\n+                    attrs.forEach(function (attr) {\n+                        if (invalidAttributeRE.test(attr.name)) {\n+                            warn$2(\n+                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\n+                                \"spaces, quotes, \u003C, >, \u002F or =.\",\n+                                {\n+                                    start: attr.start + attr.name.indexOf(\"[\"),\n+                                    end: attr.start + attr.name.length\n+                                }\n+                            );\n+                        }\n+                    });\n+                }\n+\n+                if (isForbiddenTag(element) && !isServerRendering()) {\n+                    element.forbidden = true;\n+                    warn$2(\n+                        'Templates should only be responsible for mapping the state to the ' +\n+                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n+                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\n+                        { start: element.start }\n+                    );\n+                }\n+\n+                \u002F\u002F apply pre-transforms\n+                for (var i = 0; i \u003C preTransforms.length; i++) {\n+                    element = preTransforms[i](element, options) || element;\n+                }\n+\n+                if (!inVPre) {\n+                    processPre(element);\n+                    if (element.pre) {\n+                        inVPre = true;\n+                    }\n+                }\n+                if (platformIsPreTag(element.tag)) {\n+                    inPre = true;\n+                }\n+                if (inVPre) {\n+                    processRawAttrs(element);\n+                } else if (!element.processed) {\n+                    \u002F\u002F structural directives\n+                    processFor(element);\n+                    processIf(element);\n+                    processOnce(element);\n+                }\n+\n+                if (!root) {\n+                    root = element;\n+                    {\n+                        checkRootConstraints(root);\n+                    }\n+                }\n+\n+                if (!unary) {\n+                    currentParent = element;\n+                    stack.push(element);\n+                } else {\n+                    closeElement(element);\n+                }\n+            },\n+\n+            end: function end (tag, start, end$1) {\n+                var element = stack[stack.length - 1];\n+                \u002F\u002F pop stack\n+                stack.length -= 1;\n+                currentParent = stack[stack.length - 1];\n+                if (options.outputSourceRange) {\n+                    element.end = end$1;\n+                }\n+                closeElement(element);\n+            },\n+\n+            chars: function chars (text, start, end) {\n+                if (!currentParent) {\n+                    {\n+                        if (text === template) {\n+                            warnOnce(\n+                                'Component template requires a root element, rather than just text.',\n+                                { start: start }\n+                            );\n+                        } else if ((text = text.trim())) {\n+                            warnOnce(\n+                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n+                                { start: start }\n+                            );\n+                        }\n+                    }\n+                    return\n+                }\n+                \u002F\u002F IE textarea placeholder bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE &&\n+                    currentParent.tag === 'textarea' &&\n+                    currentParent.attrsMap.placeholder === text\n+                ) {\n+                    return\n+                }\n+                var children = currentParent.children;\n+                if (inPre || text.trim()) {\n+                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n+                } else if (!children.length) {\n+                    \u002F\u002F remove the whitespace-only node right after an opening tag\n+                    text = '';\n+                } else if (whitespaceOption) {\n+                    if (whitespaceOption === 'condense') {\n+                        \u002F\u002F in condense mode, remove the whitespace node if it contains\n+                        \u002F\u002F line break, otherwise condense to a single space\n+                        text = lineBreakRE.test(text) ? '' : ' ';\n+                    } else {\n+                        text = ' ';\n+                    }\n+                } else {\n+                    text = preserveWhitespace ? ' ' : '';\n+                }\n+                if (text) {\n+                    if (!inPre && whitespaceOption === 'condense') {\n+                        \u002F\u002F condense consecutive whitespaces into single space\n+                        text = text.replace(whitespaceRE$1, ' ');\n+                    }\n+                    var res;\n+                    var child;\n+                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n+                        child = {\n+                            type: 2,\n+                            expression: res.expression,\n+                            tokens: res.tokens,\n+                            text: text\n+                        };\n+                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n+                        child = {\n+                            type: 3,\n+                            text: text\n+                        };\n+                    }\n+                    if (child) {\n+                        if (options.outputSourceRange) {\n+                            child.start = start;\n+                            child.end = end;\n+                        }\n+                        children.push(child);\n+                    }\n+                }\n+            },\n+            comment: function comment (text, start, end) {\n+                \u002F\u002F adding anyting as a sibling to the root node is forbidden\n+                \u002F\u002F comments should still be allowed, but ignored\n+                if (currentParent) {\n+                    var child = {\n+                        type: 3,\n+                        text: text,\n+                        isComment: true\n+                    };\n+                    if (options.outputSourceRange) {\n+                        child.start = start;\n+                        child.end = end;\n+                    }\n+                    currentParent.children.push(child);\n+                }\n+            }\n+        });\n+        return root\n+    }\n+\n+    function processPre (el) {\n+        if (getAndRemoveAttr(el, 'v-pre') != null) {\n+            el.pre = true;\n+        }\n+    }\n+\n+    function processRawAttrs (el) {\n+        var list = el.attrsList;\n+        var len = list.length;\n+        if (len) {\n+            var attrs = el.attrs = new Array(len);\n+            for (var i = 0; i \u003C len; i++) {\n+                attrs[i] = {\n+                    name: list[i].name,\n+                    value: JSON.stringify(list[i].value)\n+                };\n+                if (list[i].start != null) {\n+                    attrs[i].start = list[i].start;\n+                    attrs[i].end = list[i].end;\n+                }\n+            }\n+        } else if (!el.pre) {\n+            \u002F\u002F non root node in pre blocks with no attributes\n+            el.plain = true;\n+        }\n+    }\n+\n+    function processElement (\n+        element,\n+        options\n+    ) {\n+        processKey(element);\n+\n+        \u002F\u002F determine whether this is a plain element after\n+        \u002F\u002F removing structural attributes\n+        element.plain = (\n+            !element.key &&\n+            !element.scopedSlots &&\n+            !element.attrsList.length\n+        );\n+\n+        processRef(element);\n+        processSlotContent(element);\n+        processSlotOutlet(element);\n+        processComponent(element);\n+        for (var i = 0; i \u003C transforms.length; i++) {\n+            element = transforms[i](element, options) || element;\n+        }\n+        processAttrs(element);\n+        return element\n+    }\n+\n+    function processKey (el) {\n+        var exp = getBindingAttr(el, 'key');\n+        if (exp) {\n+            {\n+                if (el.tag === 'template') {\n+                    warn$2(\n+                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\n+                        getRawBindingAttr(el, 'key')\n+                    );\n+                }\n+                if (el.for) {\n+                    var iterator = el.iterator2 || el.iterator1;\n+                    var parent = el.parent;\n+                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n+                        warn$2(\n+                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\n+                            \"this is the same as not using keys.\",\n+                            getRawBindingAttr(el, 'key'),\n+                            true \u002F* tip *\u002F\n+                        );\n+                    }\n+                }\n+            }\n+            el.key = exp;\n+        }\n+    }\n+\n+    function processRef (el) {\n+        var ref = getBindingAttr(el, 'ref');\n+        if (ref) {\n+            el.ref = ref;\n+            el.refInFor = checkInFor(el);\n+        }\n+    }\n+\n+    function processFor (el) {\n+        var exp;\n+        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n+            var res = parseFor(exp);\n+            if (res) {\n+                extend(el, res);\n+            } else {\n+                warn$2(\n+                    (\"Invalid v-for expression: \" + exp),\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+    }\n+\n+\n+\n+    function parseFor (exp) {\n+        var inMatch = exp.match(forAliasRE);\n+        if (!inMatch) { return }\n+        var res = {};\n+        res.for = inMatch[2].trim();\n+        var alias = inMatch[1].trim().replace(stripParensRE, '');\n+        var iteratorMatch = alias.match(forIteratorRE);\n+        if (iteratorMatch) {\n+            res.alias = alias.replace(forIteratorRE, '').trim();\n+            res.iterator1 = iteratorMatch[1].trim();\n+            if (iteratorMatch[2]) {\n+                res.iterator2 = iteratorMatch[2].trim();\n+            }\n+        } else {\n+            res.alias = alias;\n+        }\n+        return res\n+    }\n+\n+    function processIf (el) {\n+        var exp = getAndRemoveAttr(el, 'v-if');\n+        if (exp) {\n+            el.if = exp;\n+            addIfCondition(el, {\n+                exp: exp,\n+                block: el\n+            });\n+        } else {\n+            if (getAndRemoveAttr(el, 'v-else') != null) {\n+                el.else = true;\n+            }\n+            var elseif = getAndRemoveAttr(el, 'v-else-if');\n+            if (elseif) {\n+                el.elseif = elseif;\n+            }\n+        }\n+    }\n+\n+    function processIfConditions (el, parent) {\n+        var prev = findPrevElement(parent.children);\n+        if (prev && prev.if) {\n+            addIfCondition(prev, {\n+                exp: el.elseif,\n+                block: el\n+            });\n+        } else {\n+            warn$2(\n+                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n+                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\n+                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n+            );\n+        }\n+    }\n+\n+    function findPrevElement (children) {\n+        var i = children.length;\n+        while (i--) {\n+            if (children[i].type === 1) {\n+                return children[i]\n+            } else {\n+                if (children[i].text !== ' ') {\n+                    warn$2(\n+                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n+                        \"will be ignored.\",\n+                        children[i]\n+                    );\n+                }\n+                children.pop();\n+            }\n+        }\n+    }\n+\n+    function addIfCondition (el, condition) {\n+        if (!el.ifConditions) {\n+            el.ifConditions = [];\n+        }\n+        el.ifConditions.push(condition);\n+    }\n+\n+    function processOnce (el) {\n+        var once$$1 = getAndRemoveAttr(el, 'v-once');\n+        if (once$$1 != null) {\n+            el.once = true;\n+        }\n+    }\n+\n+    \u002F\u002F handle content being passed to a component as slot,\n+    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\n+    function processSlotContent (el) {\n+        var slotScope;\n+        if (el.tag === 'template') {\n+            slotScope = getAndRemoveAttr(el, 'scope');\n+          \u002F* istanbul ignore if *\u002F\n+            if (slotScope) {\n+                warn$2(\n+                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n+                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n+                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\n+                    \"denote scoped slots.\",\n+                    el.rawAttrsMap['scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n+        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (el.attrsMap['v-for']) {\n+                warn$2(\n+                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\n+                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\n+                    \"scoped slot to make it clearer.\",\n+                    el.rawAttrsMap['slot-scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope;\n+        }\n+\n+        \u002F\u002F slot=\"xxx\"\n+        var slotTarget = getBindingAttr(el, 'slot');\n+        if (slotTarget) {\n+            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n+            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n+            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\n+            \u002F\u002F only for non-scoped slots.\n+            if (el.tag !== 'template' && !el.slotScope) {\n+                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n+            }\n+        }\n+\n+        \u002F\u002F 2.6 v-slot syntax\n+        {\n+            if (el.tag === 'template') {\n+                \u002F\u002F v-slot on \u003Ctemplate>\n+                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding) {\n+                    {\n+                        if (el.slotTarget || el.slotScope) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.parent && !maybeComponent(el.parent)) {\n+                            warn$2(\n+                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\n+                                \"the receiving the component\",\n+                                el\n+                            );\n+                        }\n+                    }\n+                    var ref = getSlotName(slotBinding);\n+                    var name = ref.name;\n+                    var dynamic = ref.dynamic;\n+                    el.slotTarget = name;\n+                    el.slotTargetDynamic = dynamic;\n+                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\n+                }\n+            } else {\n+                \u002F\u002F v-slot on component, denotes default slot\n+                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding$1) {\n+                    {\n+                        if (!maybeComponent(el)) {\n+                            warn$2(\n+                                \"v-slot can only be used on components or \u003Ctemplate>.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                        if (el.slotScope || el.slotTarget) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.scopedSlots) {\n+                            warn$2(\n+                                \"To avoid scope ambiguity, the default slot should also use \" +\n+                                \"\u003Ctemplate> syntax when there are other named slots.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                    }\n+                    \u002F\u002F add the component's children to its default slot\n+                    var slots = el.scopedSlots || (el.scopedSlots = {});\n+                    var ref$1 = getSlotName(slotBinding$1);\n+                    var name$1 = ref$1.name;\n+                    var dynamic$1 = ref$1.dynamic;\n+                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\n+                    slotContainer.slotTarget = name$1;\n+                    slotContainer.slotTargetDynamic = dynamic$1;\n+                    slotContainer.children = el.children.filter(function (c) {\n+                        if (!c.slotScope) {\n+                            c.parent = slotContainer;\n+                            return true\n+                        }\n+                    });\n+                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n+                    \u002F\u002F remove children as they are returned from scopedSlots now\n+                    el.children = [];\n+                    \u002F\u002F mark el non-plain so data gets generated\n+                    el.plain = false;\n+                }\n+            }\n+        }\n+    }\n+\n+    function getSlotName (binding) {\n+        var name = binding.name.replace(slotRE, '');\n+        if (!name) {\n+            if (binding.name[0] !== '#') {\n+                name = 'default';\n+            } else {\n+                warn$2(\n+                    \"v-slot shorthand syntax requires a slot name.\",\n+                    binding\n+                );\n+            }\n+        }\n+        return dynamicArgRE.test(name)\n+            \u002F\u002F dynamic [name]\n+            ? { name: name.slice(1, -1), dynamic: true }\n+            \u002F\u002F static name\n+            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n+    }\n+\n+    \u002F\u002F handle \u003Cslot\u002F> outlets\n+    function processSlotOutlet (el) {\n+        if (el.tag === 'slot') {\n+            el.slotName = getBindingAttr(el, 'name');\n+            if (el.key) {\n+                warn$2(\n+                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\n+                    \"and can possibly expand into multiple elements. \" +\n+                    \"Use the key on a wrapping element instead.\",\n+                    getRawBindingAttr(el, 'key')\n+                );\n+            }\n+        }\n+    }\n+\n+    function processComponent (el) {\n+        var binding;\n+        if ((binding = getBindingAttr(el, 'is'))) {\n+            el.component = binding;\n+        }\n+        if (getAndRemoveAttr(el, 'inline-template') != null) {\n+            el.inlineTemplate = true;\n+        }\n+    }\n+\n+    function processAttrs (el) {\n+        var list = el.attrsList;\n+        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n+        for (i = 0, l = list.length; i \u003C l; i++) {\n+            name = rawName = list[i].name;\n+            value = list[i].value;\n+            if (dirRE.test(name)) {\n+                \u002F\u002F mark element as dynamic\n+                el.hasBindings = true;\n+                \u002F\u002F modifiers\n+                modifiers = parseModifiers(name.replace(dirRE, ''));\n+                \u002F\u002F support .foo shorthand syntax for the .prop modifier\n+                if (modifiers) {\n+                    name = name.replace(modifierRE, '');\n+                }\n+                if (bindRE.test(name)) { \u002F\u002F v-bind\n+                    name = name.replace(bindRE, '');\n+                    value = parseFilters(value);\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    if (\n+                        value.trim().length === 0\n+                    ) {\n+                        warn$2(\n+                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n+                        );\n+                    }\n+                    if (modifiers) {\n+                        if (modifiers.prop && !isDynamic) {\n+                            name = camelize(name);\n+                            if (name === 'innerHtml') { name = 'innerHTML'; }\n+                        }\n+                        if (modifiers.camel && !isDynamic) {\n+                            name = camelize(name);\n+                        }\n+                        if (modifiers.sync) {\n+                            syncGen = genAssignmentCode(value, \"$event\");\n+                            if (!isDynamic) {\n+                                addHandler(\n+                                    el,\n+                                    (\"update:\" + (camelize(name))),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i]\n+                                );\n+                                if (hyphenate(name) !== camelize(name)) {\n+                                    addHandler(\n+                                        el,\n+                                        (\"update:\" + (hyphenate(name))),\n+                                        syncGen,\n+                                        null,\n+                                        false,\n+                                        warn$2,\n+                                        list[i]\n+                                    );\n+                                }\n+                            } else {\n+                                \u002F\u002F handler w\u002F dynamic event name\n+                                addHandler(\n+                                    el,\n+                                    (\"\\\"update:\\\"+(\" + name + \")\"),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i],\n+                                    true \u002F\u002F dynamic\n+                                );\n+                            }\n+                        }\n+                    }\n+                    if ((modifiers && modifiers.prop) || (\n+                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n+                        )) {\n+                        addProp(el, name, value, list[i], isDynamic);\n+                    } else {\n+                        addAttr(el, name, value, list[i], isDynamic);\n+                    }\n+                } else if (onRE.test(name)) { \u002F\u002F v-on\n+                    name = name.replace(onRE, '');\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n+                } else { \u002F\u002F normal directives\n+                    name = name.replace(dirRE, '');\n+                    \u002F\u002F parse arg\n+                    var argMatch = name.match(argRE);\n+                    var arg = argMatch && argMatch[1];\n+                    isDynamic = false;\n+                    if (arg) {\n+                        name = name.slice(0, -(arg.length + 1));\n+                        if (dynamicArgRE.test(arg)) {\n+                            arg = arg.slice(1, -1);\n+                            isDynamic = true;\n+                        }\n+                    }\n+                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n+                    if (name === 'model') {\n+                        checkForAliasModel(el, value);\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F literal attribute\n+                {\n+                    var res = parseText(value, delimiters);\n+                    if (res) {\n+                        warn$2(\n+                            name + \"=\\\"\" + value + \"\\\": \" +\n+                            'Interpolation inside attributes has been removed. ' +\n+                            'Use v-bind or the colon shorthand instead. For example, ' +\n+                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\n+                            list[i]\n+                        );\n+                    }\n+                }\n+                addAttr(el, name, JSON.stringify(value), list[i]);\n+                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\n+                \u002F\u002F even immediately after element creation\n+                if (!el.component &&\n+                    name === 'muted' &&\n+                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n+                    addProp(el, name, 'true', list[i]);\n+                }\n+            }\n+        }\n+    }\n+\n+    function checkInFor (el) {\n+        var parent = el;\n+        while (parent) {\n+            if (parent.for !== undefined) {\n+                return true\n+            }\n+            parent = parent.parent;\n+        }\n+        return false\n+    }\n+\n+    function parseModifiers (name) {\n+        var match = name.match(modifierRE);\n+        if (match) {\n+            var ret = {};\n+            match.forEach(function (m) { ret[m.slice(1)] = true; });\n+            return ret\n+        }\n+    }\n+\n+    function makeAttrsMap (attrs) {\n+        var map = {};\n+        for (var i = 0, l = attrs.length; i \u003C l; i++) {\n+            if (\n+                map[attrs[i].name] && !isIE && !isEdge\n+            ) {\n+                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n+            }\n+            map[attrs[i].name] = attrs[i].value;\n+        }\n+        return map\n+    }\n+\n+    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\n+    function isTextTag (el) {\n+        return el.tag === 'script' || el.tag === 'style'\n+    }\n+\n+    function isForbiddenTag (el) {\n+        return (\n+            el.tag === 'style' ||\n+            (el.tag === 'script' && (\n+                !el.attrsMap.type ||\n+                el.attrsMap.type === 'text\u002Fjavascript'\n+            ))\n+        )\n+    }\n+\n+    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\n+    var ieNSPrefix = \u002F^NS\\d+:\u002F;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function guardIESVGBug (attrs) {\n+        var res = [];\n+        for (var i = 0; i \u003C attrs.length; i++) {\n+            var attr = attrs[i];\n+            if (!ieNSBug.test(attr.name)) {\n+                attr.name = attr.name.replace(ieNSPrefix, '');\n+                res.push(attr);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkForAliasModel (el, value) {\n+        var _el = el;\n+        while (_el) {\n+            if (_el.for && _el.alias === value) {\n+                warn$2(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                    \"You are binding v-model directly to a v-for iteration alias. \" +\n+                    \"This will not be able to modify the v-for source array because \" +\n+                    \"writing to the alias is like modifying a function local variable. \" +\n+                    \"Consider using an array of objects and use v-model on an object property instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+            _el = _el.parent;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function preTransformNode (el, options) {\n+        if (el.tag === 'input') {\n+            var map = el.attrsMap;\n+            if (!map['v-model']) {\n+                return\n+            }\n+\n+            var typeBinding;\n+            if (map[':type'] || map['v-bind:type']) {\n+                typeBinding = getBindingAttr(el, 'type');\n+            }\n+            if (!map.type && !typeBinding && map['v-bind']) {\n+                typeBinding = \"(\" + (map['v-bind']) + \").type\";\n+            }\n+\n+            if (typeBinding) {\n+                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n+                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n+                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n+                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n+                \u002F\u002F 1. checkbox\n+                var branch0 = cloneASTElement(el);\n+                \u002F\u002F process for on the main node\n+                processFor(branch0);\n+                addRawAttr(branch0, 'type', 'checkbox');\n+                processElement(branch0, options);\n+                branch0.processed = true; \u002F\u002F prevent it from double-processed\n+                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n+                addIfCondition(branch0, {\n+                    exp: branch0.if,\n+                    block: branch0\n+                });\n+                \u002F\u002F 2. add radio else-if condition\n+                var branch1 = cloneASTElement(el);\n+                getAndRemoveAttr(branch1, 'v-for', true);\n+                addRawAttr(branch1, 'type', 'radio');\n+                processElement(branch1, options);\n+                addIfCondition(branch0, {\n+                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n+                    block: branch1\n+                });\n+                \u002F\u002F 3. other\n+                var branch2 = cloneASTElement(el);\n+                getAndRemoveAttr(branch2, 'v-for', true);\n+                addRawAttr(branch2, ':type', typeBinding);\n+                processElement(branch2, options);\n+                addIfCondition(branch0, {\n+                    exp: ifCondition,\n+                    block: branch2\n+                });\n+\n+                if (hasElse) {\n+                    branch0.else = true;\n+                } else if (elseIfCondition) {\n+                    branch0.elseif = elseIfCondition;\n+                }\n+\n+                return branch0\n+            }\n+        }\n+    }\n+\n+    function cloneASTElement (el) {\n+        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n+    }\n+\n+    var model$1 = {\n+        preTransformNode: preTransformNode\n+    };\n+\n+    var modules$1 = [\n+        klass$1,\n+        style$1,\n+        model$1\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function text (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function html (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+    var directives$1 = {\n+        model: model,\n+        text: text,\n+        html: html\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var baseOptions = {\n+        expectHTML: true,\n+        modules: modules$1,\n+        directives: directives$1,\n+        isPreTag: isPreTag,\n+        isUnaryTag: isUnaryTag,\n+        mustUseProp: mustUseProp,\n+        canBeLeftOpenTag: canBeLeftOpenTag,\n+        isReservedTag: isReservedTag,\n+        getTagNamespace: getTagNamespace,\n+        staticKeys: genStaticKeys(modules$1)\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isStaticKey;\n+    var isPlatformReservedTag;\n+\n+    var genStaticKeysCached = cached(genStaticKeys$1);\n+\n+    \u002F**\n+     * Goal of the optimizer: walk the generated template AST tree\n+     * and detect sub-trees that are purely static, i.e. parts of\n+     * the DOM that never needs to change.\n+     *\n+     * Once we detect these sub-trees, we can:\n+     *\n+     * 1. Hoist them into constants, so that we no longer need to\n+     *    create fresh nodes for them on each re-render;\n+     * 2. Completely skip them in the patching process.\n+     *\u002F\n+    function optimize (root, options) {\n+        if (!root) { return }\n+        isStaticKey = genStaticKeysCached(options.staticKeys || '');\n+        isPlatformReservedTag = options.isReservedTag || no;\n+        \u002F\u002F first pass: mark all non-static nodes.\n+        markStatic$1(root);\n+        \u002F\u002F second pass: mark static roots.\n+        markStaticRoots(root, false);\n+    }\n+\n+    function genStaticKeys$1 (keys) {\n+        return makeMap(\n+            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n+            (keys ? ',' + keys : '')\n+        )\n+    }\n+\n+    function markStatic$1 (node) {\n+        node.static = isStatic(node);\n+        if (node.type === 1) {\n+            \u002F\u002F do not make component slot content static. this avoids\n+            \u002F\u002F 1. components not able to mutate slot nodes\n+            \u002F\u002F 2. static slot content fails for hot-reloading\n+            if (\n+                !isPlatformReservedTag(node.tag) &&\n+                node.tag !== 'slot' &&\n+                node.attrsMap['inline-template'] == null\n+            ) {\n+                return\n+            }\n+            for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                var child = node.children[i];\n+                markStatic$1(child);\n+                if (!child.static) {\n+                    node.static = false;\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    var block = node.ifConditions[i$1].block;\n+                    markStatic$1(block);\n+                    if (!block.static) {\n+                        node.static = false;\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    function markStaticRoots (node, isInFor) {\n+        if (node.type === 1) {\n+            if (node.static || node.once) {\n+                node.staticInFor = isInFor;\n+            }\n+            \u002F\u002F For a node to qualify as a static root, it should have children that\n+            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\n+            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\n+            if (node.static && node.children.length && !(\n+                    node.children.length === 1 &&\n+                    node.children[0].type === 3\n+                )) {\n+                node.staticRoot = true;\n+                return\n+            } else {\n+                node.staticRoot = false;\n+            }\n+            if (node.children) {\n+                for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                    markStaticRoots(node.children[i], isInFor || !!node.for);\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\n+                }\n+            }\n+        }\n+    }\n+\n+    function isStatic (node) {\n+        if (node.type === 2) { \u002F\u002F expression\n+            return false\n+        }\n+        if (node.type === 3) { \u002F\u002F text\n+            return true\n+        }\n+        return !!(node.pre || (\n+            !node.hasBindings && \u002F\u002F no dynamic bindings\n+            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\n+            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\n+            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\n+            !isDirectChildOfTemplateFor(node) &&\n+            Object.keys(node).every(isStaticKey)\n+        ))\n+    }\n+\n+    function isDirectChildOfTemplateFor (node) {\n+        while (node.parent) {\n+            node = node.parent;\n+            if (node.tag !== 'template') {\n+                return false\n+            }\n+            if (node.for) {\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\n+    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\n+    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\n+\n+    \u002F\u002F KeyboardEvent.keyCode aliases\n+    var keyCodes = {\n+        esc: 27,\n+        tab: 9,\n+        enter: 13,\n+        space: 32,\n+        up: 38,\n+        left: 37,\n+        right: 39,\n+        down: 40,\n+        'delete': [8, 46]\n+    };\n+\n+    \u002F\u002F KeyboardEvent.key aliases\n+    var keyNames = {\n+        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\n+        esc: ['Esc', 'Escape'],\n+        tab: 'Tab',\n+        enter: 'Enter',\n+        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\n+        space: [' ', 'Spacebar'],\n+        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n+        up: ['Up', 'ArrowUp'],\n+        left: ['Left', 'ArrowLeft'],\n+        right: ['Right', 'ArrowRight'],\n+        down: ['Down', 'ArrowDown'],\n+        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\n+        'delete': ['Backspace', 'Delete', 'Del']\n+    };\n+\n+    \u002F\u002F #4868: modifiers that prevent the execution of the listener\n+    \u002F\u002F need to explicitly return null so that we can determine whether to remove\n+    \u002F\u002F the listener for .once\n+    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n+\n+    var modifierCode = {\n+        stop: '$event.stopPropagation();',\n+        prevent: '$event.preventDefault();',\n+        self: genGuard(\"$event.target !== $event.currentTarget\"),\n+        ctrl: genGuard(\"!$event.ctrlKey\"),\n+        shift: genGuard(\"!$event.shiftKey\"),\n+        alt: genGuard(\"!$event.altKey\"),\n+        meta: genGuard(\"!$event.metaKey\"),\n+        left: genGuard(\"'button' in $event && $event.button !== 0\"),\n+        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n+        right: genGuard(\"'button' in $event && $event.button !== 2\")\n+    };\n+\n+    function genHandlers (\n+        events,\n+        isNative\n+    ) {\n+        var prefix = isNative ? 'nativeOn:' : 'on:';\n+        var staticHandlers = \"\";\n+        var dynamicHandlers = \"\";\n+        for (var name in events) {\n+            var handlerCode = genHandler(events[name]);\n+            if (events[name] && events[name].dynamic) {\n+                dynamicHandlers += name + \",\" + handlerCode + \",\";\n+            } else {\n+                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n+            }\n+        }\n+        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n+        if (dynamicHandlers) {\n+            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n+        } else {\n+            return prefix + staticHandlers\n+        }\n+    }\n+\n+    function genHandler (handler) {\n+        if (!handler) {\n+            return 'function(){}'\n+        }\n+\n+        if (Array.isArray(handler)) {\n+            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n+        }\n+\n+        var isMethodPath = simplePathRE.test(handler.value);\n+        var isFunctionExpression = fnExpRE.test(handler.value);\n+        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n+\n+        if (!handler.modifiers) {\n+            if (isMethodPath || isFunctionExpression) {\n+                return handler.value\n+            }\n+            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\n+        } else {\n+            var code = '';\n+            var genModifierCode = '';\n+            var keys = [];\n+            for (var key in handler.modifiers) {\n+                if (modifierCode[key]) {\n+                    genModifierCode += modifierCode[key];\n+                    \u002F\u002F left\u002Fright\n+                    if (keyCodes[key]) {\n+                        keys.push(key);\n+                    }\n+                } else if (key === 'exact') {\n+                    var modifiers = (handler.modifiers);\n+                    genModifierCode += genGuard(\n+                        ['ctrl', 'shift', 'alt', 'meta']\n+                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n+                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n+                            .join('||')\n+                    );\n+                } else {\n+                    keys.push(key);\n+                }\n+            }\n+            if (keys.length) {\n+                code += genKeyFilter(keys);\n+            }\n+            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\n+            if (genModifierCode) {\n+                code += genModifierCode;\n+            }\n+            var handlerCode = isMethodPath\n+                ? (\"return \" + (handler.value) + \"($event)\")\n+                : isFunctionExpression\n+                    ? (\"return (\" + (handler.value) + \")($event)\")\n+                    : isFunctionInvocation\n+                        ? (\"return \" + (handler.value))\n+                        : handler.value;\n+            return (\"function($event){\" + code + handlerCode + \"}\")\n+        }\n+    }\n+\n+    function genKeyFilter (keys) {\n+        return (\n+            \u002F\u002F make sure the key filters only apply to KeyboardEvents\n+            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n+            \u002F\u002F key events that do not have keyCode property...\n+            \"if(!$event.type.indexOf('key')&&\" +\n+            (keys.map(genFilterCode).join('&&')) + \")return null;\"\n+        )\n+    }\n+\n+    function genFilterCode (key) {\n+        var keyVal = parseInt(key, 10);\n+        if (keyVal) {\n+            return (\"$event.keyCode!==\" + keyVal)\n+        }\n+        var keyCode = keyCodes[key];\n+        var keyName = keyNames[key];\n+        return (\n+            \"_k($event.keyCode,\" +\n+            (JSON.stringify(key)) + \",\" +\n+            (JSON.stringify(keyCode)) + \",\" +\n+            \"$event.key,\" +\n+            \"\" + (JSON.stringify(keyName)) +\n+            \")\"\n+        )\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function on (el, dir) {\n+        if (dir.modifiers) {\n+            warn(\"v-on without argument does not support modifiers.\");\n+        }\n+        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bind$1 (el, dir) {\n+        el.wrapData = function (code) {\n+            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var baseDirectives = {\n+        on: on,\n+        bind: bind$1,\n+        cloak: noop\n+    };\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+\n+\n+    var CodegenState = function CodegenState (options) {\n+        this.options = options;\n+        this.warn = options.warn || baseWarn;\n+        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n+        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n+        this.directives = extend(extend({}, baseDirectives), options.directives);\n+        var isReservedTag = options.isReservedTag || no;\n+        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+        this.onceId = 0;\n+        this.staticRenderFns = [];\n+        this.pre = false;\n+    };\n+\n+\n+\n+    function generate (\n+        ast,\n+        options\n+    ) {\n+        var state = new CodegenState(options);\n+        var code = ast ? genElement(ast, state) : '_c(\"div\")';\n+        return {\n+            render: (\"with(this){return \" + code + \"}\"),\n+            staticRenderFns: state.staticRenderFns\n+        }\n+    }\n+\n+    function genElement (el, state) {\n+        if (el.parent) {\n+            el.pre = el.pre || el.parent.pre;\n+        }\n+\n+        if (el.staticRoot && !el.staticProcessed) {\n+            return genStatic(el, state)\n+        } else if (el.once && !el.onceProcessed) {\n+            return genOnce(el, state)\n+        } else if (el.for && !el.forProcessed) {\n+            return genFor(el, state)\n+        } else if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n+            return genChildren(el, state) || 'void 0'\n+        } else if (el.tag === 'slot') {\n+            return genSlot(el, state)\n+        } else {\n+            \u002F\u002F component or element\n+            var code;\n+            if (el.component) {\n+                code = genComponent(el.component, el, state);\n+            } else {\n+                var data;\n+                if (!el.plain || (el.pre && state.maybeComponent(el))) {\n+                    data = genData$2(el, state);\n+                }\n+\n+                var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n+            }\n+            \u002F\u002F module transforms\n+            for (var i = 0; i \u003C state.transforms.length; i++) {\n+                code = state.transforms[i](el, code);\n+            }\n+            return code\n+        }\n+    }\n+\n+    \u002F\u002F hoist static sub-trees out\n+    function genStatic (el, state) {\n+        el.staticProcessed = true;\n+        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\n+        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\n+        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\n+        var originalPreState = state.pre;\n+        if (el.pre) {\n+            state.pre = el.pre;\n+        }\n+        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n+        state.pre = originalPreState;\n+        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n+    }\n+\n+    \u002F\u002F v-once\n+    function genOnce (el, state) {\n+        el.onceProcessed = true;\n+        if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.staticInFor) {\n+            var key = '';\n+            var parent = el.parent;\n+            while (parent) {\n+                if (parent.for) {\n+                    key = parent.key;\n+                    break\n+                }\n+                parent = parent.parent;\n+            }\n+            if (!key) {\n+                state.warn(\n+                    \"v-once can only be used inside v-for that is keyed. \",\n+                    el.rawAttrsMap['v-once']\n+                );\n+                return genElement(el, state)\n+            }\n+            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n+        } else {\n+            return genStatic(el, state)\n+        }\n+    }\n+\n+    function genIf (\n+        el,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        el.ifProcessed = true; \u002F\u002F avoid recursion\n+        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n+    }\n+\n+    function genIfConditions (\n+        conditions,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        if (!conditions.length) {\n+            return altEmpty || '_e()'\n+        }\n+\n+        var condition = conditions.shift();\n+        if (condition.exp) {\n+            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n+        } else {\n+            return (\"\" + (genTernaryExp(condition.block)))\n+        }\n+\n+        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\n+        function genTernaryExp (el) {\n+            return altGen\n+                ? altGen(el, state)\n+                : el.once\n+                    ? genOnce(el, state)\n+                    : genElement(el, state)\n+        }\n+    }\n+\n+    function genFor (\n+        el,\n+        state,\n+        altGen,\n+        altHelper\n+    ) {\n+        var exp = el.for;\n+        var alias = el.alias;\n+        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n+        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n+\n+        if (state.maybeComponent(el) &&\n+            el.tag !== 'slot' &&\n+            el.tag !== 'template' &&\n+            !el.key\n+        ) {\n+            state.warn(\n+                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n+                \"v-for should have explicit keys. \" +\n+                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\n+                el.rawAttrsMap['v-for'],\n+                true \u002F* tip *\u002F\n+            );\n+        }\n+\n+        el.forProcessed = true; \u002F\u002F avoid recursion\n+        return (altHelper || '_l') + \"((\" + exp + \"),\" +\n+            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n+            \"return \" + ((altGen || genElement)(el, state)) +\n+            '})'\n+    }\n+\n+    function genData$2 (el, state) {\n+        var data = '{';\n+\n+        \u002F\u002F directives first.\n+        \u002F\u002F directives may mutate the el's other properties before they are generated.\n+        var dirs = genDirectives(el, state);\n+        if (dirs) { data += dirs + ','; }\n+\n+        \u002F\u002F key\n+        if (el.key) {\n+            data += \"key:\" + (el.key) + \",\";\n+        }\n+        \u002F\u002F ref\n+        if (el.ref) {\n+            data += \"ref:\" + (el.ref) + \",\";\n+        }\n+        if (el.refInFor) {\n+            data += \"refInFor:true,\";\n+        }\n+        \u002F\u002F pre\n+        if (el.pre) {\n+            data += \"pre:true,\";\n+        }\n+        \u002F\u002F record original tag name for components using \"is\" attribute\n+        if (el.component) {\n+            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n+        }\n+        \u002F\u002F module data generation functions\n+        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\n+            data += state.dataGenFns[i](el);\n+        }\n+        \u002F\u002F attributes\n+        if (el.attrs) {\n+            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n+        }\n+        \u002F\u002F DOM props\n+        if (el.props) {\n+            data += \"domProps:\" + (genProps(el.props)) + \",\";\n+        }\n+        \u002F\u002F event handlers\n+        if (el.events) {\n+            data += (genHandlers(el.events, false)) + \",\";\n+        }\n+        if (el.nativeEvents) {\n+            data += (genHandlers(el.nativeEvents, true)) + \",\";\n+        }\n+        \u002F\u002F slot target\n+        \u002F\u002F only for non-scoped slots\n+        if (el.slotTarget && !el.slotScope) {\n+            data += \"slot:\" + (el.slotTarget) + \",\";\n+        }\n+        \u002F\u002F scoped slots\n+        if (el.scopedSlots) {\n+            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n+        }\n+        \u002F\u002F component v-model\n+        if (el.model) {\n+            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n+        }\n+        \u002F\u002F inline-template\n+        if (el.inlineTemplate) {\n+            var inlineTemplate = genInlineTemplate(el, state);\n+            if (inlineTemplate) {\n+                data += inlineTemplate + \",\";\n+            }\n+        }\n+        data = data.replace(\u002F,$\u002F, '') + '}';\n+        \u002F\u002F v-bind dynamic argument wrap\n+        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\n+        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\n+        if (el.dynamicAttrs) {\n+            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n+        }\n+        \u002F\u002F v-bind data wrap\n+        if (el.wrapData) {\n+            data = el.wrapData(data);\n+        }\n+        \u002F\u002F v-on data wrap\n+        if (el.wrapListeners) {\n+            data = el.wrapListeners(data);\n+        }\n+        return data\n+    }\n+\n+    function genDirectives (el, state) {\n+        var dirs = el.directives;\n+        if (!dirs) { return }\n+        var res = 'directives:[';\n+        var hasRuntime = false;\n+        var i, l, dir, needRuntime;\n+        for (i = 0, l = dirs.length; i \u003C l; i++) {\n+            dir = dirs[i];\n+            needRuntime = true;\n+            var gen = state.directives[dir.name];\n+            if (gen) {\n+                \u002F\u002F compile-time directive that manipulates AST.\n+                \u002F\u002F returns true if it also needs a runtime counterpart.\n+                needRuntime = !!gen(el, dir, state.warn);\n+            }\n+            if (needRuntime) {\n+                hasRuntime = true;\n+                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n+            }\n+        }\n+        if (hasRuntime) {\n+            return res.slice(0, -1) + ']'\n+        }\n+    }\n+\n+    function genInlineTemplate (el, state) {\n+        var ast = el.children[0];\n+        if (el.children.length !== 1 || ast.type !== 1) {\n+            state.warn(\n+                'Inline-template components must have exactly one child element.',\n+                { start: el.start }\n+            );\n+        }\n+        if (ast && ast.type === 1) {\n+            var inlineRenderFns = generate(ast, state.options);\n+            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n+        }\n+    }\n+\n+    function genScopedSlots (\n+        el,\n+        slots,\n+        state\n+    ) {\n+        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\n+        \u002F\u002F components with only scoped slots to skip forced updates from parent.\n+        \u002F\u002F but in some cases we have to bail-out of this optimization\n+        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\n+        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n+                var slot = slots[key];\n+                return (\n+                    slot.slotTargetDynamic ||\n+                    slot.if ||\n+                    slot.for ||\n+                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\n+                )\n+            });\n+\n+        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\n+        \u002F\u002F it's possible for the same component to be reused but with different\n+        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\n+        \u002F\u002F the generated code of all the slot contents.\n+        var needsKey = !!el.if;\n+\n+        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\n+        \u002F\u002F disconnected due to the intermediate scope variable)\n+        \u002F\u002F #9438, #9506\n+        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\n+        \u002F\u002F and skip force updating ones that do not actually use scope variables.\n+        if (!needsForceUpdate) {\n+            var parent = el.parent;\n+            while (parent) {\n+                if (\n+                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n+                    parent.for\n+                ) {\n+                    needsForceUpdate = true;\n+                    break\n+                }\n+                if (parent.if) {\n+                    needsKey = true;\n+                }\n+                parent = parent.parent;\n+            }\n+        }\n+\n+        var generatedSlots = Object.keys(slots)\n+            .map(function (key) { return genScopedSlot(slots[key], state); })\n+            .join(',');\n+\n+        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n+    }\n+\n+    function hash(str) {\n+        var hash = 5381;\n+        var i = str.length;\n+        while(i) {\n+            hash = (hash * 33) ^ str.charCodeAt(--i);\n+        }\n+        return hash >>> 0\n+    }\n+\n+    function containsSlotChild (el) {\n+        if (el.type === 1) {\n+            if (el.tag === 'slot') {\n+                return true\n+            }\n+            return el.children.some(containsSlotChild)\n+        }\n+        return false\n+    }\n+\n+    function genScopedSlot (\n+        el,\n+        state\n+    ) {\n+        var isLegacySyntax = el.attrsMap['slot-scope'];\n+        if (el.if && !el.ifProcessed && !isLegacySyntax) {\n+            return genIf(el, state, genScopedSlot, \"null\")\n+        }\n+        if (el.for && !el.forProcessed) {\n+            return genFor(el, state, genScopedSlot)\n+        }\n+        var slotScope = el.slotScope === emptySlotScopeToken\n+            ? \"\"\n+            : String(el.slotScope);\n+        var fn = \"function(\" + slotScope + \"){\" +\n+            \"return \" + (el.tag === 'template'\n+                ? el.if && isLegacySyntax\n+                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n+                    : genChildren(el, state) || 'undefined'\n+                : genElement(el, state)) + \"}\";\n+        \u002F\u002F reverse proxy v-slot without scope on this.$slots\n+        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n+        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n+    }\n+\n+    function genChildren (\n+        el,\n+        state,\n+        checkSkip,\n+        altGenElement,\n+        altGenNode\n+    ) {\n+        var children = el.children;\n+        if (children.length) {\n+            var el$1 = children[0];\n+            \u002F\u002F optimize single v-for\n+            if (children.length === 1 &&\n+                el$1.for &&\n+                el$1.tag !== 'template' &&\n+                el$1.tag !== 'slot'\n+            ) {\n+                var normalizationType = checkSkip\n+                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n+                    : \"\";\n+                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n+            }\n+            var normalizationType$1 = checkSkip\n+                ? getNormalizationType(children, state.maybeComponent)\n+                : 0;\n+            var gen = altGenNode || genNode;\n+            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n+        }\n+    }\n+\n+    \u002F\u002F determine the normalization needed for the children array.\n+    \u002F\u002F 0: no normalization needed\n+    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\n+    \u002F\u002F 2: full normalization needed\n+    function getNormalizationType (\n+        children,\n+        maybeComponent\n+    ) {\n+        var res = 0;\n+        for (var i = 0; i \u003C children.length; i++) {\n+            var el = children[i];\n+            if (el.type !== 1) {\n+                continue\n+            }\n+            if (needsNormalization(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n+                res = 2;\n+                break\n+            }\n+            if (maybeComponent(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n+                res = 1;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function needsNormalization (el) {\n+        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n+    }\n+\n+    function genNode (node, state) {\n+        if (node.type === 1) {\n+            return genElement(node, state)\n+        } else if (node.type === 3 && node.isComment) {\n+            return genComment(node)\n+        } else {\n+            return genText(node)\n+        }\n+    }\n+\n+    function genText (text) {\n+        return (\"_v(\" + (text.type === 2\n+            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\n+            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n+    }\n+\n+    function genComment (comment) {\n+        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n+    }\n+\n+    function genSlot (el, state) {\n+        var slotName = el.slotName || '\"default\"';\n+        var children = genChildren(el, state);\n+        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n+        var attrs = el.attrs || el.dynamicAttrs\n+            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n+                \u002F\u002F slot props are camelized\n+                name: camelize(attr.name),\n+                value: attr.value,\n+                dynamic: attr.dynamic\n+            }); }))\n+            : null;\n+        var bind$$1 = el.attrsMap['v-bind'];\n+        if ((attrs || bind$$1) && !children) {\n+            res += \",null\";\n+        }\n+        if (attrs) {\n+            res += \",\" + attrs;\n+        }\n+        if (bind$$1) {\n+            res += (attrs ? '' : ',null') + \",\" + bind$$1;\n+        }\n+        return res + ')'\n+    }\n+\n+    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\n+    function genComponent (\n+        componentName,\n+        el,\n+        state\n+    ) {\n+        var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n+    }\n+\n+    function genProps (props) {\n+        var staticProps = \"\";\n+        var dynamicProps = \"\";\n+        for (var i = 0; i \u003C props.length; i++) {\n+            var prop = props[i];\n+            var value = transformSpecialNewlines(prop.value);\n+            if (prop.dynamic) {\n+                dynamicProps += (prop.name) + \",\" + value + \",\";\n+            } else {\n+                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n+            }\n+        }\n+        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n+        if (dynamicProps) {\n+            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n+        } else {\n+            return staticProps\n+        }\n+    }\n+\n+    \u002F\u002F #3895, #4268\n+    function transformSpecialNewlines (text) {\n+        return text\n+            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\n+            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F\u002F these keywords should not appear inside expressions, but operators like\n+    \u002F\u002F typeof, instanceof and in are allowed\n+    var prohibitedKeywordRE = new RegExp('\\\\b' + (\n+            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n+            'super,throw,while,yield,delete,export,import,return,switch,default,' +\n+            'extends,finally,continue,debugger,function,arguments'\n+        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\n+\n+    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\n+    var unaryOperatorsRE = new RegExp('\\\\b' + (\n+            'delete,typeof,void'\n+        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n+\n+    \u002F\u002F strip strings in expressions\n+    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\n+\n+    \u002F\u002F detect problematic expressions in a template\n+    function detectErrors (ast, warn) {\n+        if (ast) {\n+            checkNode(ast, warn);\n+        }\n+    }\n+\n+    function checkNode (node, warn) {\n+        if (node.type === 1) {\n+            for (var name in node.attrsMap) {\n+                if (dirRE.test(name)) {\n+                    var value = node.attrsMap[name];\n+                    if (value) {\n+                        var range = node.rawAttrsMap[name];\n+                        if (name === 'v-for') {\n+                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else if (onRE.test(name)) {\n+                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else {\n+                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        }\n+                    }\n+                }\n+            }\n+            if (node.children) {\n+                for (var i = 0; i \u003C node.children.length; i++) {\n+                    checkNode(node.children[i], warn);\n+                }\n+            }\n+        } else if (node.type === 2) {\n+            checkExpression(node.expression, node.text, warn, node);\n+        }\n+    }\n+\n+    function checkEvent (exp, text, warn, range) {\n+        var stipped = exp.replace(stripStringRE, '');\n+        var keywordMatch = stipped.match(unaryOperatorsRE);\n+        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n+            warn(\n+                \"avoid using JavaScript unary operator as property name: \" +\n+                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n+                range\n+            );\n+        }\n+        checkExpression(exp, text, warn, range);\n+    }\n+\n+    function checkFor (node, text, warn, range) {\n+        checkExpression(node.for || '', text, warn, range);\n+        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n+        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n+        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n+    }\n+\n+    function checkIdentifier (\n+        ident,\n+        type,\n+        text,\n+        warn,\n+        range\n+    ) {\n+        if (typeof ident === 'string') {\n+            try {\n+                new Function((\"var \" + ident + \"=_\"));\n+            } catch (e) {\n+                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n+            }\n+        }\n+    }\n+\n+    function checkExpression (exp, text, warn, range) {\n+        try {\n+            new Function((\"return \" + exp));\n+        } catch (e) {\n+            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n+            if (keywordMatch) {\n+                warn(\n+                    \"avoid using JavaScript keyword as property name: \" +\n+                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n+                    range\n+                );\n+            } else {\n+                warn(\n+                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n+                    \"    \" + exp + \"\\n\\n\" +\n+                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\n+                    range\n+                );\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var range = 2;\n+\n+    function generateCodeFrame (\n+        source,\n+        start,\n+        end\n+    ) {\n+        if ( start === void 0 ) start = 0;\n+        if ( end === void 0 ) end = source.length;\n+\n+        var lines = source.split(\u002F\\r?\\n\u002F);\n+        var count = 0;\n+        var res = [];\n+        for (var i = 0; i \u003C lines.length; i++) {\n+            count += lines[i].length + 1;\n+            if (count >= start) {\n+                for (var j = i - range; j \u003C= i + range || end > count; j++) {\n+                    if (j \u003C 0 || j >= lines.length) { continue }\n+                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n+                    var lineLength = lines[j].length;\n+                    if (j === i) {\n+                        \u002F\u002F push underline\n+                        var pad = start - (count - lineLength) + 1;\n+                        var length = end > count ? lineLength - pad : end - start;\n+                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n+                    } else if (j > i) {\n+                        if (end > count) {\n+                            var length$1 = Math.min(end - count, lineLength);\n+                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n+                        }\n+                        count += lineLength + 1;\n+                    }\n+                }\n+                break\n+            }\n+        }\n+        return res.join('\\n')\n+    }\n+\n+    function repeat$1 (str, n) {\n+        var result = '';\n+        if (n > 0) {\n+            while (true) { \u002F\u002F eslint-disable-line\n+                if (n & 1) { result += str; }\n+                n >>>= 1;\n+                if (n \u003C= 0) { break }\n+                str += str;\n+            }\n+        }\n+        return result\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function createFunction (code, errors) {\n+        try {\n+            return new Function(code)\n+        } catch (err) {\n+            errors.push({ err: err, code: code });\n+            return noop\n+        }\n+    }\n+\n+    function createCompileToFunctionFn (compile) {\n+        var cache = Object.create(null);\n+\n+        return function compileToFunctions (\n+            template,\n+            options,\n+            vm\n+        ) {\n+            options = extend({}, options);\n+            var warn$$1 = options.warn || warn;\n+            delete options.warn;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                \u002F\u002F detect possible CSP restriction\n+                try {\n+                    new Function('return 1');\n+                } catch (e) {\n+                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\n+                        warn$$1(\n+                            'It seems you are using the standalone build of Vue.js in an ' +\n+                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n+                            'The template compiler cannot work in this environment. Consider ' +\n+                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n+                            'templates into render functions.'\n+                        );\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F check cache\n+            var key = options.delimiters\n+                ? String(options.delimiters) + template\n+                : template;\n+            if (cache[key]) {\n+                return cache[key]\n+            }\n+\n+            \u002F\u002F compile\n+            var compiled = compile(template, options);\n+\n+            \u002F\u002F check compilation errors\u002Ftips\n+            {\n+                if (compiled.errors && compiled.errors.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.errors.forEach(function (e) {\n+                            warn$$1(\n+                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n+                                generateCodeFrame(template, e.start, e.end),\n+                                vm\n+                            );\n+                        });\n+                    } else {\n+                        warn$$1(\n+                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n+                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n+                            vm\n+                        );\n+                    }\n+                }\n+                if (compiled.tips && compiled.tips.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n+                    } else {\n+                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F turn code into functions\n+            var res = {};\n+            var fnGenErrors = [];\n+            res.render = createFunction(compiled.render, fnGenErrors);\n+            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n+                return createFunction(code, fnGenErrors)\n+            });\n+\n+            \u002F\u002F check function generation errors.\n+            \u002F\u002F this should only happen if there is a bug in the compiler itself.\n+            \u002F\u002F mostly for codegen development use\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n+                    warn$$1(\n+                        \"Failed to generate render function:\\n\\n\" +\n+                        fnGenErrors.map(function (ref) {\n+                            var err = ref.err;\n+                            var code = ref.code;\n+\n+                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n+                        }).join('\\n'),\n+                        vm\n+                    );\n+                }\n+            }\n+\n+            return (cache[key] = res)\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createCompilerCreator (baseCompile) {\n+        return function createCompiler (baseOptions) {\n+            function compile (\n+                template,\n+                options\n+            ) {\n+                var finalOptions = Object.create(baseOptions);\n+                var errors = [];\n+                var tips = [];\n+\n+                var warn = function (msg, range, tip) {\n+                    (tip ? tips : errors).push(msg);\n+                };\n+\n+                if (options) {\n+                    if (options.outputSourceRange) {\n+                        \u002F\u002F $flow-disable-line\n+                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\n+\n+                        warn = function (msg, range, tip) {\n+                            var data = { msg: msg };\n+                            if (range) {\n+                                if (range.start != null) {\n+                                    data.start = range.start + leadingSpaceLength;\n+                                }\n+                                if (range.end != null) {\n+                                    data.end = range.end + leadingSpaceLength;\n+                                }\n+                            }\n+                            (tip ? tips : errors).push(data);\n+                        };\n+                    }\n+                    \u002F\u002F merge custom modules\n+                    if (options.modules) {\n+                        finalOptions.modules =\n+                            (baseOptions.modules || []).concat(options.modules);\n+                    }\n+                    \u002F\u002F merge custom directives\n+                    if (options.directives) {\n+                        finalOptions.directives = extend(\n+                            Object.create(baseOptions.directives || null),\n+                            options.directives\n+                        );\n+                    }\n+                    \u002F\u002F copy other options\n+                    for (var key in options) {\n+                        if (key !== 'modules' && key !== 'directives') {\n+                            finalOptions[key] = options[key];\n+                        }\n+                    }\n+                }\n+\n+                finalOptions.warn = warn;\n+\n+                var compiled = baseCompile(template.trim(), finalOptions);\n+                {\n+                    detectErrors(compiled.ast, warn);\n+                }\n+                compiled.errors = errors;\n+                compiled.tips = tips;\n+                return compiled\n+            }\n+\n+            return {\n+                compile: compile,\n+                compileToFunctions: createCompileToFunctionFn(compile)\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\n+    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\n+    \u002F\u002F Here we just export a default compiler using the default parts.\n+    var createCompiler = createCompilerCreator(function baseCompile (\n+        template,\n+        options\n+    ) {\n+        var ast = parse(template.trim(), options);\n+        if (options.optimize !== false) {\n+            optimize(ast, options);\n+        }\n+        var code = generate(ast, options);\n+        return {\n+            ast: ast,\n+            render: code.render,\n+            staticRenderFns: code.staticRenderFns\n+        }\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref$1 = createCompiler(baseOptions);\n+    var compile = ref$1.compile;\n+    var compileToFunctions = ref$1.compileToFunctions;\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F check whether current browser encodes a char inside attribute values\n+    var div;\n+    function getShouldDecode (href) {\n+        div = div || document.createElement('div');\n+        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\n+        return div.innerHTML.indexOf('&#10;') > 0\n+    }\n+\n+    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\n+    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n+    \u002F\u002F #6828: chrome encodes content in a[href]\n+    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n+\n+  \u002F*  *\u002F\n+\n+    var idToTemplate = cached(function (id) {\n+        var el = query(id);\n+        return el && el.innerHTML\n+    });\n+\n+    var mount = Vue.prototype.$mount;\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && query(el);\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (el === document.body || el === document.documentElement) {\n+            warn(\n+                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\n+            );\n+            return this\n+        }\n+\n+        var options = this.$options;\n+        \u002F\u002F resolve template\u002Fel and convert to render function\n+        if (!options.render) {\n+            var template = options.template;\n+            if (template) {\n+                if (typeof template === 'string') {\n+                    if (template.charAt(0) === '#') {\n+                        template = idToTemplate(template);\n+                      \u002F* istanbul ignore if *\u002F\n+                        if (!template) {\n+                            warn(\n+                                (\"Template element not found or is empty: \" + (options.template)),\n+                                this\n+                            );\n+                        }\n+                    }\n+                } else if (template.nodeType) {\n+                    template = template.innerHTML;\n+                } else {\n+                    {\n+                        warn('invalid template option:' + template, this);\n+                    }\n+                    return this\n+                }\n+            } else if (el) {\n+                template = getOuterHTML(el);\n+            }\n+            if (template) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile');\n+                }\n+\n+                var ref = compileToFunctions(template, {\n+                    outputSourceRange: \"development\" !== 'production',\n+                    shouldDecodeNewlines: shouldDecodeNewlines,\n+                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n+                    delimiters: options.delimiters,\n+                    comments: options.comments\n+                }, this);\n+                var render = ref.render;\n+                var staticRenderFns = ref.staticRenderFns;\n+                options.render = render;\n+                options.staticRenderFns = staticRenderFns;\n+\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile end');\n+                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n+                }\n+            }\n+        }\n+        return mount.call(this, el, hydrating)\n+    };\n+\n+    \u002F**\n+     * Get outerHTML of elements, taking care\n+     * of SVG elements in IE as well.\n+     *\u002F\n+    function getOuterHTML (el) {\n+        if (el.outerHTML) {\n+            return el.outerHTML\n+        } else {\n+            var container = document.createElement('div');\n+            container.appendChild(el.cloneNode(true));\n+            return container.innerHTML\n+        }\n+    }\n+\n+    Vue.compile = compileToFunctions;\n+\n+    return Vue;\n+\n }));\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14524 +1,14524 @@\n-\u002F*!\r\n- * Vue.js v2.6.10\r\n- * (c) 2014-2019 Evan You\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vue = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var emptyObject = Object.freeze({});\r\n-\r\n-    \u002F\u002F These helpers produce better VM code in JS engines due to their\r\n-    \u002F\u002F explicitness and function inlining.\r\n-    function isUndef (v) {\r\n-        return v === undefined || v === null\r\n-    }\r\n-\r\n-    function isDef (v) {\r\n-        return v !== undefined && v !== null\r\n-    }\r\n-\r\n-    function isTrue (v) {\r\n-        return v === true\r\n-    }\r\n-\r\n-    function isFalse (v) {\r\n-        return v === false\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if value is primitive.\r\n-     *\u002F\r\n-    function isPrimitive (value) {\r\n-        return (\r\n-            typeof value === 'string' ||\r\n-            typeof value === 'number' ||\r\n-            \u002F\u002F $flow-disable-line\r\n-            typeof value === 'symbol' ||\r\n-            typeof value === 'boolean'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Quick object check - this is primarily used to tell\r\n-     * Objects from primitive values when we know the value\r\n-     * is a JSON-compliant type.\r\n-     *\u002F\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the raw type string of a value, e.g., [object Object].\r\n-     *\u002F\r\n-    var _toString = Object.prototype.toString;\r\n-\r\n-    function toRawType (value) {\r\n-        return _toString.call(value).slice(8, -1)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Strict object type check. Only returns true\r\n-     * for plain JavaScript objects.\r\n-     *\u002F\r\n-    function isPlainObject (obj) {\r\n-        return _toString.call(obj) === '[object Object]'\r\n-    }\r\n-\r\n-    function isRegExp (v) {\r\n-        return _toString.call(v) === '[object RegExp]'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if val is a valid array index.\r\n-     *\u002F\r\n-    function isValidArrayIndex (val) {\r\n-        var n = parseFloat(String(val));\r\n-        return n >= 0 && Math.floor(n) === n && isFinite(val)\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return (\r\n-            isDef(val) &&\r\n-            typeof val.then === 'function' &&\r\n-            typeof val.catch === 'function'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert a value to a string that is actually rendered.\r\n-     *\u002F\r\n-    function toString (val) {\r\n-        return val == null\r\n-            ? ''\r\n-            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\r\n-                ? JSON.stringify(val, null, 2)\r\n-                : String(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert an input value to a number for persistence.\r\n-     * If the conversion fails, return original string.\r\n-     *\u002F\r\n-    function toNumber (val) {\r\n-        var n = parseFloat(val);\r\n-        return isNaN(n) ? val : n\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Make a map and return a function for checking if a key\r\n-     * is in that map.\r\n-     *\u002F\r\n-    function makeMap (\r\n-        str,\r\n-        expectsLowerCase\r\n-    ) {\r\n-        var map = Object.create(null);\r\n-        var list = str.split(',');\r\n-        for (var i = 0; i \u003C list.length; i++) {\r\n-            map[list[i]] = true;\r\n-        }\r\n-        return expectsLowerCase\r\n-            ? function (val) { return map[val.toLowerCase()]; }\r\n-            : function (val) { return map[val]; }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if a tag is a built-in tag.\r\n-     *\u002F\r\n-    var isBuiltInTag = makeMap('slot,component', true);\r\n-\r\n-    \u002F**\r\n-     * Check if an attribute is a reserved attribute.\r\n-     *\u002F\r\n-    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\r\n-\r\n-    \u002F**\r\n-     * Remove an item from an array.\r\n-     *\u002F\r\n-    function remove (arr, item) {\r\n-        if (arr.length) {\r\n-            var index = arr.indexOf(item);\r\n-            if (index > -1) {\r\n-                return arr.splice(index, 1)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check whether an object has the property.\r\n-     *\u002F\r\n-    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n-    function hasOwn (obj, key) {\r\n-        return hasOwnProperty.call(obj, key)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Create a cached version of a pure function.\r\n-     *\u002F\r\n-    function cached (fn) {\r\n-        var cache = Object.create(null);\r\n-        return (function cachedFn (str) {\r\n-            var hit = cache[str];\r\n-            return hit || (cache[str] = fn(str))\r\n-        })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Camelize a hyphen-delimited string.\r\n-     *\u002F\r\n-    var camelizeRE = \u002F-(\\w)\u002Fg;\r\n-    var camelize = cached(function (str) {\r\n-        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Capitalize a string.\r\n-     *\u002F\r\n-    var capitalize = cached(function (str) {\r\n-        return str.charAt(0).toUpperCase() + str.slice(1)\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Hyphenate a camelCase string.\r\n-     *\u002F\r\n-    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\r\n-    var hyphenate = cached(function (str) {\r\n-        return str.replace(hyphenateRE, '-$1').toLowerCase()\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Simple bind polyfill for environments that do not support it,\r\n-     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\r\n-     * since native bind is now performant enough in most browsers.\r\n-     * But removing it would mean breaking code that was able to run in\r\n-     * PhantomJS 1.x, so this must be kept for backward compatibility.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function polyfillBind (fn, ctx) {\r\n-        function boundFn (a) {\r\n-            var l = arguments.length;\r\n-            return l\r\n-                ? l > 1\r\n-                    ? fn.apply(ctx, arguments)\r\n-                    : fn.call(ctx, a)\r\n-                : fn.call(ctx)\r\n-        }\r\n-\r\n-        boundFn._length = fn.length;\r\n-        return boundFn\r\n-    }\r\n-\r\n-    function nativeBind (fn, ctx) {\r\n-        return fn.bind(ctx)\r\n-    }\r\n-\r\n-    var bind = Function.prototype.bind\r\n-        ? nativeBind\r\n-        : polyfillBind;\r\n-\r\n-    \u002F**\r\n-     * Convert an Array-like object to a real Array.\r\n-     *\u002F\r\n-    function toArray (list, start) {\r\n-        start = start || 0;\r\n-        var i = list.length - start;\r\n-        var ret = new Array(i);\r\n-        while (i--) {\r\n-            ret[i] = list[i + start];\r\n-        }\r\n-        return ret\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Mix properties into target object.\r\n-     *\u002F\r\n-    function extend (to, _from) {\r\n-        for (var key in _from) {\r\n-            to[key] = _from[key];\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge an Array of Objects into a single Object.\r\n-     *\u002F\r\n-    function toObject (arr) {\r\n-        var res = {};\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (arr[i]) {\r\n-                extend(res, arr[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Perform no operation.\r\n-     * Stubbing args to make Flow happy without leaving useless transpiled code\r\n-     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\r\n-     *\u002F\r\n-    function noop (a, b, c) {}\r\n-\r\n-    \u002F**\r\n-     * Always return false.\r\n-     *\u002F\r\n-    var no = function (a, b, c) { return false; };\r\n-\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Return the same value.\r\n-     *\u002F\r\n-    var identity = function (_) { return _; };\r\n-\r\n-    \u002F**\r\n-     * Generate a string containing static keys from compiler modules.\r\n-     *\u002F\r\n-    function genStaticKeys (modules) {\r\n-        return modules.reduce(function (keys, m) {\r\n-            return keys.concat(m.staticKeys || [])\r\n-        }, []).join(',')\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if two values are loosely equal - that is,\r\n-     * if they are plain objects, do they have the same shape?\r\n-     *\u002F\r\n-    function looseEqual (a, b) {\r\n-        if (a === b) { return true }\r\n-        var isObjectA = isObject(a);\r\n-        var isObjectB = isObject(b);\r\n-        if (isObjectA && isObjectB) {\r\n-            try {\r\n-                var isArrayA = Array.isArray(a);\r\n-                var isArrayB = Array.isArray(b);\r\n-                if (isArrayA && isArrayB) {\r\n-                    return a.length === b.length && a.every(function (e, i) {\r\n-                            return looseEqual(e, b[i])\r\n-                        })\r\n-                } else if (a instanceof Date && b instanceof Date) {\r\n-                    return a.getTime() === b.getTime()\r\n-                } else if (!isArrayA && !isArrayB) {\r\n-                    var keysA = Object.keys(a);\r\n-                    var keysB = Object.keys(b);\r\n-                    return keysA.length === keysB.length && keysA.every(function (key) {\r\n-                            return looseEqual(a[key], b[key])\r\n-                        })\r\n-                } else {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    return false\r\n-                }\r\n-            } catch (e) {\r\n-              \u002F* istanbul ignore next *\u002F\r\n-                return false\r\n-            }\r\n-        } else if (!isObjectA && !isObjectB) {\r\n-            return String(a) === String(b)\r\n-        } else {\r\n-            return false\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return the first index at which a loosely equal value can be\r\n-     * found in the array (if value is a plain object, the array must\r\n-     * contain an object of the same shape), or -1 if it is not present.\r\n-     *\u002F\r\n-    function looseIndexOf (arr, val) {\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (looseEqual(arr[i], val)) { return i }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure a function is called only once.\r\n-     *\u002F\r\n-    function once (fn) {\r\n-        var called = false;\r\n-        return function () {\r\n-            if (!called) {\r\n-                called = true;\r\n-                fn.apply(this, arguments);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var SSR_ATTR = 'data-server-rendered';\r\n-\r\n-    var ASSET_TYPES = [\r\n-        'component',\r\n-        'directive',\r\n-        'filter'\r\n-    ];\r\n-\r\n-    var LIFECYCLE_HOOKS = [\r\n-        'beforeCreate',\r\n-        'created',\r\n-        'beforeMount',\r\n-        'mounted',\r\n-        'beforeUpdate',\r\n-        'updated',\r\n-        'beforeDestroy',\r\n-        'destroyed',\r\n-        'activated',\r\n-        'deactivated',\r\n-        'errorCaptured',\r\n-        'serverPrefetch'\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var config = ({\r\n-        \u002F**\r\n-         * Option merge strategies (used in core\u002Futil\u002Foptions)\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        optionMergeStrategies: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Whether to suppress warnings.\r\n-         *\u002F\r\n-        silent: false,\r\n-\r\n-        \u002F**\r\n-         * Show production mode tip message on boot?\r\n-         *\u002F\r\n-        productionTip: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to enable devtools\r\n-         *\u002F\r\n-        devtools: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to record perf\r\n-         *\u002F\r\n-        performance: false,\r\n-\r\n-        \u002F**\r\n-         * Error handler for watcher errors\r\n-         *\u002F\r\n-        errorHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Warn handler for watcher warns\r\n-         *\u002F\r\n-        warnHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Ignore certain custom elements\r\n-         *\u002F\r\n-        ignoredElements: [],\r\n-\r\n-        \u002F**\r\n-         * Custom user key aliases for v-on\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        keyCodes: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is reserved so that it cannot be registered as a\r\n-         * component. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedTag: no,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute is reserved so that it cannot be used as a component\r\n-         * prop. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedAttr: no,\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is an unknown element.\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        isUnknownElement: no,\r\n-\r\n-        \u002F**\r\n-         * Get the namespace of an element\r\n-         *\u002F\r\n-        getTagNamespace: noop,\r\n-\r\n-        \u002F**\r\n-         * Parse the real tag name for the specific platform.\r\n-         *\u002F\r\n-        parsePlatformTagName: identity,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute must be bound using property, e.g. value\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        mustUseProp: no,\r\n-\r\n-        \u002F**\r\n-         * Perform updates asynchronously. Intended to be used by Vue Test Utils\r\n-         * This will significantly reduce performance if set to false.\r\n-         *\u002F\r\n-        async: true,\r\n-\r\n-        \u002F**\r\n-         * Exposed for legacy reasons\r\n-         *\u002F\r\n-        _lifecycleHooks: LIFECYCLE_HOOKS\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * unicode letters used for parsing html tags, component names and property paths.\r\n-     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\r\n-     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\r\n-     *\u002F\r\n-    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\r\n-\r\n-    \u002F**\r\n-     * Check if a string starts with $ or _\r\n-     *\u002F\r\n-    function isReserved (str) {\r\n-        var c = (str + '').charCodeAt(0);\r\n-        return c === 0x24 || c === 0x5F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a property.\r\n-     *\u002F\r\n-    function def (obj, key, val, enumerable) {\r\n-        Object.defineProperty(obj, key, {\r\n-            value: val,\r\n-            enumerable: !!enumerable,\r\n-            writable: true,\r\n-            configurable: true\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse simple path.\r\n-     *\u002F\r\n-    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\r\n-    function parsePath (path) {\r\n-        if (bailRE.test(path)) {\r\n-            return\r\n-        }\r\n-        var segments = path.split('.');\r\n-        return function (obj) {\r\n-            for (var i = 0; i \u003C segments.length; i++) {\r\n-                if (!obj) { return }\r\n-                obj = obj[segments[i]];\r\n-            }\r\n-            return obj\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F can we use __proto__?\r\n-    var hasProto = '__proto__' in {};\r\n-\r\n-    \u002F\u002F Browser environment sniffing\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\r\n-    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\r\n-    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\r\n-    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\r\n-    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\r\n-    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\r\n-    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\r\n-    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\r\n-    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\r\n-    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\r\n-    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\r\n-\r\n-    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\r\n-    var nativeWatch = ({}).watch;\r\n-\r\n-    var supportsPassive = false;\r\n-    if (inBrowser) {\r\n-        try {\r\n-            var opts = {};\r\n-            Object.defineProperty(opts, 'passive', ({\r\n-                get: function get () {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    supportsPassive = true;\r\n-                }\r\n-            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\r\n-            window.addEventListener('test-passive', null, opts);\r\n-        } catch (e) {}\r\n-    }\r\n-\r\n-    \u002F\u002F this needs to be lazy-evaled because vue may be required before\r\n-    \u002F\u002F vue-server-renderer can set VUE_ENV\r\n-    var _isServer;\r\n-    var isServerRendering = function () {\r\n-        if (_isServer === undefined) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\r\n-                \u002F\u002F detect presence of vue-server-renderer and avoid\r\n-                \u002F\u002F Webpack shimming the process\r\n-                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\r\n-            } else {\r\n-                _isServer = false;\r\n-            }\r\n-        }\r\n-        return _isServer\r\n-    };\r\n-\r\n-    \u002F\u002F detect devtools\r\n-    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function isNative (Ctor) {\r\n-        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\r\n-    }\r\n-\r\n-    var hasSymbol =\r\n-        typeof Symbol !== 'undefined' && isNative(Symbol) &&\r\n-        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\r\n-\r\n-    var _Set;\r\n-  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\r\n-    if (typeof Set !== 'undefined' && isNative(Set)) {\r\n-        \u002F\u002F use native Set when available.\r\n-        _Set = Set;\r\n-    } else {\r\n-        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\r\n-        _Set = \u002F*@__PURE__*\u002F(function () {\r\n-            function Set () {\r\n-                this.set = Object.create(null);\r\n-            }\r\n-            Set.prototype.has = function has (key) {\r\n-                return this.set[key] === true\r\n-            };\r\n-            Set.prototype.add = function add (key) {\r\n-                this.set[key] = true;\r\n-            };\r\n-            Set.prototype.clear = function clear () {\r\n-                this.set = Object.create(null);\r\n-            };\r\n-\r\n-            return Set;\r\n-        }());\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn = noop;\r\n-    var tip = noop;\r\n-    var generateComponentTrace = (noop); \u002F\u002F work around flow check\r\n-    var formatComponentName = (noop);\r\n-\r\n-    {\r\n-        var hasConsole = typeof console !== 'undefined';\r\n-        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\r\n-        var classify = function (str) { return str\r\n-            .replace(classifyRE, function (c) { return c.toUpperCase(); })\r\n-            .replace(\u002F[-_]\u002Fg, ''); };\r\n-\r\n-        warn = function (msg, vm) {\r\n-            var trace = vm ? generateComponentTrace(vm) : '';\r\n-\r\n-            if (config.warnHandler) {\r\n-                config.warnHandler.call(null, msg, vm, trace);\r\n-            } else if (hasConsole && (!config.silent)) {\r\n-                console.error((\"[Vue warn]: \" + msg + trace));\r\n-            }\r\n-        };\r\n-\r\n-        tip = function (msg, vm) {\r\n-            if (hasConsole && (!config.silent)) {\r\n-                console.warn(\"[Vue tip]: \" + msg + (\r\n-                        vm ? generateComponentTrace(vm) : ''\r\n-                    ));\r\n-            }\r\n-        };\r\n-\r\n-        formatComponentName = function (vm, includeFile) {\r\n-            if (vm.$root === vm) {\r\n-                return '\u003CRoot>'\r\n-            }\r\n-            var options = typeof vm === 'function' && vm.cid != null\r\n-                ? vm.options\r\n-                : vm._isVue\r\n-                    ? vm.$options || vm.constructor.options\r\n-                    : vm;\r\n-            var name = options.name || options._componentTag;\r\n-            var file = options.__file;\r\n-            if (!name && file) {\r\n-                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\r\n-                name = match && match[1];\r\n-            }\r\n-\r\n-            return (\r\n-                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\r\n-                (file && includeFile !== false ? (\" at \" + file) : '')\r\n-            )\r\n-        };\r\n-\r\n-        var repeat = function (str, n) {\r\n-            var res = '';\r\n-            while (n) {\r\n-                if (n % 2 === 1) { res += str; }\r\n-                if (n > 1) { str += str; }\r\n-                n >>= 1;\r\n-            }\r\n-            return res\r\n-        };\r\n-\r\n-        generateComponentTrace = function (vm) {\r\n-            if (vm._isVue && vm.$parent) {\r\n-                var tree = [];\r\n-                var currentRecursiveSequence = 0;\r\n-                while (vm) {\r\n-                    if (tree.length > 0) {\r\n-                        var last = tree[tree.length - 1];\r\n-                        if (last.constructor === vm.constructor) {\r\n-                            currentRecursiveSequence++;\r\n-                            vm = vm.$parent;\r\n-                            continue\r\n-                        } else if (currentRecursiveSequence > 0) {\r\n-                            tree[tree.length - 1] = [last, currentRecursiveSequence];\r\n-                            currentRecursiveSequence = 0;\r\n-                        }\r\n-                    }\r\n-                    tree.push(vm);\r\n-                    vm = vm.$parent;\r\n-                }\r\n-                return '\\n\\nfound in\\n\\n' + tree\r\n-                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\r\n-                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\r\n-                            : formatComponentName(vm))); })\r\n-                        .join('\\n')\r\n-            } else {\r\n-                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid = 0;\r\n-\r\n-    \u002F**\r\n-     * A dep is an observable that can have multiple\r\n-     * directives subscribing to it.\r\n-     *\u002F\r\n-    var Dep = function Dep () {\r\n-        this.id = uid++;\r\n-        this.subs = [];\r\n-    };\r\n-\r\n-    Dep.prototype.addSub = function addSub (sub) {\r\n-        this.subs.push(sub);\r\n-    };\r\n-\r\n-    Dep.prototype.removeSub = function removeSub (sub) {\r\n-        remove(this.subs, sub);\r\n-    };\r\n-\r\n-    Dep.prototype.depend = function depend () {\r\n-        if (Dep.target) {\r\n-            Dep.target.addDep(this);\r\n-        }\r\n-    };\r\n-\r\n-    Dep.prototype.notify = function notify () {\r\n-        \u002F\u002F stabilize the subscriber list first\r\n-        var subs = this.subs.slice();\r\n-        if (!config.async) {\r\n-            \u002F\u002F subs aren't sorted in scheduler if not running async\r\n-            \u002F\u002F we need to sort them now to make sure they fire in correct\r\n-            \u002F\u002F order\r\n-            subs.sort(function (a, b) { return a.id - b.id; });\r\n-        }\r\n-        for (var i = 0, l = subs.length; i \u003C l; i++) {\r\n-            subs[i].update();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F The current target watcher being evaluated.\r\n-    \u002F\u002F This is globally unique because only one watcher\r\n-    \u002F\u002F can be evaluated at a time.\r\n-    Dep.target = null;\r\n-    var targetStack = [];\r\n-\r\n-    function pushTarget (target) {\r\n-        targetStack.push(target);\r\n-        Dep.target = target;\r\n-    }\r\n-\r\n-    function popTarget () {\r\n-        targetStack.pop();\r\n-        Dep.target = targetStack[targetStack.length - 1];\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var VNode = function VNode (\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        text,\r\n-        elm,\r\n-        context,\r\n-        componentOptions,\r\n-        asyncFactory\r\n-    ) {\r\n-        this.tag = tag;\r\n-        this.data = data;\r\n-        this.children = children;\r\n-        this.text = text;\r\n-        this.elm = elm;\r\n-        this.ns = undefined;\r\n-        this.context = context;\r\n-        this.fnContext = undefined;\r\n-        this.fnOptions = undefined;\r\n-        this.fnScopeId = undefined;\r\n-        this.key = data && data.key;\r\n-        this.componentOptions = componentOptions;\r\n-        this.componentInstance = undefined;\r\n-        this.parent = undefined;\r\n-        this.raw = false;\r\n-        this.isStatic = false;\r\n-        this.isRootInsert = true;\r\n-        this.isComment = false;\r\n-        this.isCloned = false;\r\n-        this.isOnce = false;\r\n-        this.asyncFactory = asyncFactory;\r\n-        this.asyncMeta = undefined;\r\n-        this.isAsyncPlaceholder = false;\r\n-    };\r\n-\r\n-    var prototypeAccessors = { child: { configurable: true } };\r\n-\r\n-    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    prototypeAccessors.child.get = function () {\r\n-        return this.componentInstance\r\n-    };\r\n-\r\n-    Object.defineProperties( VNode.prototype, prototypeAccessors );\r\n-\r\n-    var createEmptyVNode = function (text) {\r\n-        if ( text === void 0 ) text = '';\r\n-\r\n-        var node = new VNode();\r\n-        node.text = text;\r\n-        node.isComment = true;\r\n-        return node\r\n-    };\r\n-\r\n-    function createTextVNode (val) {\r\n-        return new VNode(undefined, undefined, undefined, String(val))\r\n-    }\r\n-\r\n-    \u002F\u002F optimized shallow clone\r\n-    \u002F\u002F used for static nodes and slot nodes because they may be reused across\r\n-    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\r\n-    \u002F\u002F on their elm reference.\r\n-    function cloneVNode (vnode) {\r\n-        var cloned = new VNode(\r\n-            vnode.tag,\r\n-            vnode.data,\r\n-            \u002F\u002F #7975\r\n-            \u002F\u002F clone children array to avoid mutating original in case of cloning\r\n-            \u002F\u002F a child.\r\n-            vnode.children && vnode.children.slice(),\r\n-            vnode.text,\r\n-            vnode.elm,\r\n-            vnode.context,\r\n-            vnode.componentOptions,\r\n-            vnode.asyncFactory\r\n-        );\r\n-        cloned.ns = vnode.ns;\r\n-        cloned.isStatic = vnode.isStatic;\r\n-        cloned.key = vnode.key;\r\n-        cloned.isComment = vnode.isComment;\r\n-        cloned.fnContext = vnode.fnContext;\r\n-        cloned.fnOptions = vnode.fnOptions;\r\n-        cloned.fnScopeId = vnode.fnScopeId;\r\n-        cloned.asyncMeta = vnode.asyncMeta;\r\n-        cloned.isCloned = true;\r\n-        return cloned\r\n-    }\r\n-\r\n-  \u002F*\r\n-   * not type checking this file because flow doesn't play well with\r\n-   * dynamically accessing methods on Array prototype\r\n-   *\u002F\r\n-\r\n-    var arrayProto = Array.prototype;\r\n-    var arrayMethods = Object.create(arrayProto);\r\n-\r\n-    var methodsToPatch = [\r\n-        'push',\r\n-        'pop',\r\n-        'shift',\r\n-        'unshift',\r\n-        'splice',\r\n-        'sort',\r\n-        'reverse'\r\n-    ];\r\n-\r\n-    \u002F**\r\n-     * Intercept mutating methods and emit events\r\n-     *\u002F\r\n-    methodsToPatch.forEach(function (method) {\r\n-        \u002F\u002F cache original method\r\n-        var original = arrayProto[method];\r\n-        def(arrayMethods, method, function mutator () {\r\n-            var args = [], len = arguments.length;\r\n-            while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-            var result = original.apply(this, args);\r\n-            var ob = this.__ob__;\r\n-            var inserted;\r\n-            switch (method) {\r\n-                case 'push':\r\n-                case 'unshift':\r\n-                    inserted = args;\r\n-                    break\r\n-                case 'splice':\r\n-                    inserted = args.slice(2);\r\n-                    break\r\n-            }\r\n-            if (inserted) { ob.observeArray(inserted); }\r\n-            \u002F\u002F notify change\r\n-            ob.dep.notify();\r\n-            return result\r\n-        });\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\r\n-\r\n-    \u002F**\r\n-     * In some cases we may want to disable observation inside a component's\r\n-     * update computation.\r\n-     *\u002F\r\n-    var shouldObserve = true;\r\n-\r\n-    function toggleObserving (value) {\r\n-        shouldObserve = value;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Observer class that is attached to each observed\r\n-     * object. Once attached, the observer converts the target\r\n-     * object's property keys into getter\u002Fsetters that\r\n-     * collect dependencies and dispatch updates.\r\n-     *\u002F\r\n-    var Observer = function Observer (value) {\r\n-        this.value = value;\r\n-        this.dep = new Dep();\r\n-        this.vmCount = 0;\r\n-        def(value, '__ob__', this);\r\n-        if (Array.isArray(value)) {\r\n-            if (hasProto) {\r\n-                protoAugment(value, arrayMethods);\r\n-            } else {\r\n-                copyAugment(value, arrayMethods, arrayKeys);\r\n-            }\r\n-            this.observeArray(value);\r\n-        } else {\r\n-            this.walk(value);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Walk through all properties and convert them into\r\n-     * getter\u002Fsetters. This method should only be called when\r\n-     * value type is Object.\r\n-     *\u002F\r\n-    Observer.prototype.walk = function walk (obj) {\r\n-        var keys = Object.keys(obj);\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            defineReactive$$1(obj, keys[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Observe a list of Array items.\r\n-     *\u002F\r\n-    Observer.prototype.observeArray = function observeArray (items) {\r\n-        for (var i = 0, l = items.length; i \u003C l; i++) {\r\n-            observe(items[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F helpers\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by intercepting\r\n-     * the prototype chain using __proto__\r\n-     *\u002F\r\n-    function protoAugment (target, src) {\r\n-      \u002F* eslint-disable no-proto *\u002F\r\n-        target.__proto__ = src;\r\n-      \u002F* eslint-enable no-proto *\u002F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by defining\r\n-     * hidden properties.\r\n-     *\u002F\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function copyAugment (target, src, keys) {\r\n-        for (var i = 0, l = keys.length; i \u003C l; i++) {\r\n-            var key = keys[i];\r\n-            def(target, key, src[key]);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Attempt to create an observer instance for a value,\r\n-     * returns the new observer if successfully observed,\r\n-     * or the existing observer if the value already has one.\r\n-     *\u002F\r\n-    function observe (value, asRootData) {\r\n-        if (!isObject(value) || value instanceof VNode) {\r\n-            return\r\n-        }\r\n-        var ob;\r\n-        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\r\n-            ob = value.__ob__;\r\n-        } else if (\r\n-            shouldObserve &&\r\n-            !isServerRendering() &&\r\n-            (Array.isArray(value) || isPlainObject(value)) &&\r\n-            Object.isExtensible(value) &&\r\n-            !value._isVue\r\n-        ) {\r\n-            ob = new Observer(value);\r\n-        }\r\n-        if (asRootData && ob) {\r\n-            ob.vmCount++;\r\n-        }\r\n-        return ob\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a reactive property on an Object.\r\n-     *\u002F\r\n-    function defineReactive$$1 (\r\n-        obj,\r\n-        key,\r\n-        val,\r\n-        customSetter,\r\n-        shallow\r\n-    ) {\r\n-        var dep = new Dep();\r\n-\r\n-        var property = Object.getOwnPropertyDescriptor(obj, key);\r\n-        if (property && property.configurable === false) {\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F cater for pre-defined getter\u002Fsetters\r\n-        var getter = property && property.get;\r\n-        var setter = property && property.set;\r\n-        if ((!getter || setter) && arguments.length === 2) {\r\n-            val = obj[key];\r\n-        }\r\n-\r\n-        var childOb = !shallow && observe(val);\r\n-        Object.defineProperty(obj, key, {\r\n-            enumerable: true,\r\n-            configurable: true,\r\n-            get: function reactiveGetter () {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-                if (Dep.target) {\r\n-                    dep.depend();\r\n-                    if (childOb) {\r\n-                        childOb.dep.depend();\r\n-                        if (Array.isArray(value)) {\r\n-                            dependArray(value);\r\n-                        }\r\n-                    }\r\n-                }\r\n-                return value\r\n-            },\r\n-            set: function reactiveSetter (newVal) {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-              \u002F* eslint-disable no-self-compare *\u002F\r\n-                if (newVal === value || (newVal !== newVal && value !== value)) {\r\n-                    return\r\n-                }\r\n-              \u002F* eslint-enable no-self-compare *\u002F\r\n-                if (customSetter) {\r\n-                    customSetter();\r\n-                }\r\n-                \u002F\u002F #7981: for accessor properties without setter\r\n-                if (getter && !setter) { return }\r\n-                if (setter) {\r\n-                    setter.call(obj, newVal);\r\n-                } else {\r\n-                    val = newVal;\r\n-                }\r\n-                childOb = !shallow && observe(newVal);\r\n-                dep.notify();\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Set a property on an object. Adds the new property and\r\n-     * triggers change notification if the property doesn't\r\n-     * already exist.\r\n-     *\u002F\r\n-    function set (target, key, val) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.length = Math.max(target.length, key);\r\n-            target.splice(key, 1, val);\r\n-            return val\r\n-        }\r\n-        if (key in target && !(key in Object.prototype)) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n-                'at runtime - declare it upfront in the data option.'\r\n-            );\r\n-            return val\r\n-        }\r\n-        if (!ob) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        defineReactive$$1(ob.value, key, val);\r\n-        ob.dep.notify();\r\n-        return val\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Delete a property and trigger change if necessary.\r\n-     *\u002F\r\n-    function del (target, key) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.splice(key, 1);\r\n-            return\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid deleting properties on a Vue instance or its root $data ' +\r\n-                '- just set it to null.'\r\n-            );\r\n-            return\r\n-        }\r\n-        if (!hasOwn(target, key)) {\r\n-            return\r\n-        }\r\n-        delete target[key];\r\n-        if (!ob) {\r\n-            return\r\n-        }\r\n-        ob.dep.notify();\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Collect dependencies on array elements when the array is touched, since\r\n-     * we cannot intercept array element access like property getters.\r\n-     *\u002F\r\n-    function dependArray (value) {\r\n-        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\r\n-            e = value[i];\r\n-            e && e.__ob__ && e.__ob__.dep.depend();\r\n-            if (Array.isArray(e)) {\r\n-                dependArray(e);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Option overwriting strategies are functions that handle\r\n-     * how to merge a parent option value and a child option\r\n-     * value into the final value.\r\n-     *\u002F\r\n-    var strats = config.optionMergeStrategies;\r\n-\r\n-    \u002F**\r\n-     * Options with restrictions\r\n-     *\u002F\r\n-    {\r\n-        strats.el = strats.propsData = function (parent, child, vm, key) {\r\n-            if (!vm) {\r\n-                warn(\r\n-                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\r\n-                    'creation with the `new` keyword.'\r\n-                );\r\n-            }\r\n-            return defaultStrat(parent, child)\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Helper that recursively merges two data objects together.\r\n-     *\u002F\r\n-    function mergeData (to, from) {\r\n-        if (!from) { return to }\r\n-        var key, toVal, fromVal;\r\n-\r\n-        var keys = hasSymbol\r\n-            ? Reflect.ownKeys(from)\r\n-            : Object.keys(from);\r\n-\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            key = keys[i];\r\n-            \u002F\u002F in case the object is already observed...\r\n-            if (key === '__ob__') { continue }\r\n-            toVal = to[key];\r\n-            fromVal = from[key];\r\n-            if (!hasOwn(to, key)) {\r\n-                set(to, key, fromVal);\r\n-            } else if (\r\n-                toVal !== fromVal &&\r\n-                isPlainObject(toVal) &&\r\n-                isPlainObject(fromVal)\r\n-            ) {\r\n-                mergeData(toVal, fromVal);\r\n-            }\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Data\r\n-     *\u002F\r\n-    function mergeDataOrFn (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            \u002F\u002F in a Vue.extend merge, both should be functions\r\n-            if (!childVal) {\r\n-                return parentVal\r\n-            }\r\n-            if (!parentVal) {\r\n-                return childVal\r\n-            }\r\n-            \u002F\u002F when parentVal & childVal are both present,\r\n-            \u002F\u002F we need to return a function that returns the\r\n-            \u002F\u002F merged result of both functions... no need to\r\n-            \u002F\u002F check if parentVal is a function here because\r\n-            \u002F\u002F it has to be a function to pass previous merges.\r\n-            return function mergedDataFn () {\r\n-                return mergeData(\r\n-                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\r\n-                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\r\n-                )\r\n-            }\r\n-        } else {\r\n-            return function mergedInstanceDataFn () {\r\n-                \u002F\u002F instance merge\r\n-                var instanceData = typeof childVal === 'function'\r\n-                    ? childVal.call(vm, vm)\r\n-                    : childVal;\r\n-                var defaultData = typeof parentVal === 'function'\r\n-                    ? parentVal.call(vm, vm)\r\n-                    : parentVal;\r\n-                if (instanceData) {\r\n-                    return mergeData(instanceData, defaultData)\r\n-                } else {\r\n-                    return defaultData\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    strats.data = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            if (childVal && typeof childVal !== 'function') {\r\n-                warn(\r\n-                    'The \"data\" option should be a function ' +\r\n-                    'that returns a per-instance value in component ' +\r\n-                    'definitions.',\r\n-                    vm\r\n-                );\r\n-\r\n-                return parentVal\r\n-            }\r\n-            return mergeDataOrFn(parentVal, childVal)\r\n-        }\r\n-\r\n-        return mergeDataOrFn(parentVal, childVal, vm)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Hooks and props are merged as arrays.\r\n-     *\u002F\r\n-    function mergeHook (\r\n-        parentVal,\r\n-        childVal\r\n-    ) {\r\n-        var res = childVal\r\n-            ? parentVal\r\n-                ? parentVal.concat(childVal)\r\n-                : Array.isArray(childVal)\r\n-                    ? childVal\r\n-                    : [childVal]\r\n-            : parentVal;\r\n-        return res\r\n-            ? dedupeHooks(res)\r\n-            : res\r\n-    }\r\n-\r\n-    function dedupeHooks (hooks) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C hooks.length; i++) {\r\n-            if (res.indexOf(hooks[i]) === -1) {\r\n-                res.push(hooks[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    LIFECYCLE_HOOKS.forEach(function (hook) {\r\n-        strats[hook] = mergeHook;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Assets\r\n-     *\r\n-     * When a vm is present (instance creation), we need to do\r\n-     * a three-way merge between constructor options, instance\r\n-     * options and parent options.\r\n-     *\u002F\r\n-    function mergeAssets (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        var res = Object.create(parentVal || null);\r\n-        if (childVal) {\r\n-            assertObjectType(key, childVal, vm);\r\n-            return extend(res, childVal)\r\n-        } else {\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    ASSET_TYPES.forEach(function (type) {\r\n-        strats[type + 's'] = mergeAssets;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Watchers.\r\n-     *\r\n-     * Watchers hashes should not overwrite one\r\n-     * another, so we merge them as arrays.\r\n-     *\u002F\r\n-    strats.watch = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        \u002F\u002F work around Firefox's Object.prototype.watch...\r\n-        if (parentVal === nativeWatch) { parentVal = undefined; }\r\n-        if (childVal === nativeWatch) { childVal = undefined; }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!childVal) { return Object.create(parentVal || null) }\r\n-        {\r\n-            assertObjectType(key, childVal, vm);\r\n-        }\r\n-        if (!parentVal) { return childVal }\r\n-        var ret = {};\r\n-        extend(ret, parentVal);\r\n-        for (var key$1 in childVal) {\r\n-            var parent = ret[key$1];\r\n-            var child = childVal[key$1];\r\n-            if (parent && !Array.isArray(parent)) {\r\n-                parent = [parent];\r\n-            }\r\n-            ret[key$1] = parent\r\n-                ? parent.concat(child)\r\n-                : Array.isArray(child) ? child : [child];\r\n-        }\r\n-        return ret\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Other object hashes.\r\n-     *\u002F\r\n-    strats.props =\r\n-        strats.methods =\r\n-            strats.inject =\r\n-                strats.computed = function (\r\n-                    parentVal,\r\n-                    childVal,\r\n-                    vm,\r\n-                    key\r\n-                ) {\r\n-                    if (childVal && \"development\" !== 'production') {\r\n-                        assertObjectType(key, childVal, vm);\r\n-                    }\r\n-                    if (!parentVal) { return childVal }\r\n-                    var ret = Object.create(null);\r\n-                    extend(ret, parentVal);\r\n-                    if (childVal) { extend(ret, childVal); }\r\n-                    return ret\r\n-                };\r\n-    strats.provide = mergeDataOrFn;\r\n-\r\n-    \u002F**\r\n-     * Default strategy.\r\n-     *\u002F\r\n-    var defaultStrat = function (parentVal, childVal) {\r\n-        return childVal === undefined\r\n-            ? parentVal\r\n-            : childVal\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Validate component names\r\n-     *\u002F\r\n-    function checkComponents (options) {\r\n-        for (var key in options.components) {\r\n-            validateComponentName(key);\r\n-        }\r\n-    }\r\n-\r\n-    function validateComponentName (name) {\r\n-        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\r\n-            warn(\r\n-                'Invalid component name: \"' + name + '\". Component names ' +\r\n-                'should conform to valid custom element name in html5 specification.'\r\n-            );\r\n-        }\r\n-        if (isBuiltInTag(name) || config.isReservedTag(name)) {\r\n-            warn(\r\n-                'Do not use built-in or reserved HTML elements as component ' +\r\n-                'id: ' + name\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure all props option syntax are normalized into the\r\n-     * Object-based format.\r\n-     *\u002F\r\n-    function normalizeProps (options, vm) {\r\n-        var props = options.props;\r\n-        if (!props) { return }\r\n-        var res = {};\r\n-        var i, val, name;\r\n-        if (Array.isArray(props)) {\r\n-            i = props.length;\r\n-            while (i--) {\r\n-                val = props[i];\r\n-                if (typeof val === 'string') {\r\n-                    name = camelize(val);\r\n-                    res[name] = { type: null };\r\n-                } else {\r\n-                    warn('props must be strings when using array syntax.');\r\n-                }\r\n-            }\r\n-        } else if (isPlainObject(props)) {\r\n-            for (var key in props) {\r\n-                val = props[key];\r\n-                name = camelize(key);\r\n-                res[name] = isPlainObject(val)\r\n-                    ? val\r\n-                    : { type: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(props)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-        options.props = res;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize all injections into Object-based format\r\n-     *\u002F\r\n-    function normalizeInject (options, vm) {\r\n-        var inject = options.inject;\r\n-        if (!inject) { return }\r\n-        var normalized = options.inject = {};\r\n-        if (Array.isArray(inject)) {\r\n-            for (var i = 0; i \u003C inject.length; i++) {\r\n-                normalized[inject[i]] = { from: inject[i] };\r\n-            }\r\n-        } else if (isPlainObject(inject)) {\r\n-            for (var key in inject) {\r\n-                var val = inject[key];\r\n-                normalized[key] = isPlainObject(val)\r\n-                    ? extend({ from: key }, val)\r\n-                    : { from: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(inject)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize raw function directives into object format.\r\n-     *\u002F\r\n-    function normalizeDirectives (options) {\r\n-        var dirs = options.directives;\r\n-        if (dirs) {\r\n-            for (var key in dirs) {\r\n-                var def$$1 = dirs[key];\r\n-                if (typeof def$$1 === 'function') {\r\n-                    dirs[key] = { bind: def$$1, update: def$$1 };\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function assertObjectType (name, value, vm) {\r\n-        if (!isPlainObject(value)) {\r\n-            warn(\r\n-                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\r\n-                \"but got \" + (toRawType(value)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge two option objects into a new one.\r\n-     * Core utility used in both instantiation and inheritance.\r\n-     *\u002F\r\n-    function mergeOptions (\r\n-        parent,\r\n-        child,\r\n-        vm\r\n-    ) {\r\n-        {\r\n-            checkComponents(child);\r\n-        }\r\n-\r\n-        if (typeof child === 'function') {\r\n-            child = child.options;\r\n-        }\r\n-\r\n-        normalizeProps(child, vm);\r\n-        normalizeInject(child, vm);\r\n-        normalizeDirectives(child);\r\n-\r\n-        \u002F\u002F Apply extends and mixins on the child options,\r\n-        \u002F\u002F but only if it is a raw options object that isn't\r\n-        \u002F\u002F the result of another mergeOptions call.\r\n-        \u002F\u002F Only merged options has the _base property.\r\n-        if (!child._base) {\r\n-            if (child.extends) {\r\n-                parent = mergeOptions(parent, child.extends, vm);\r\n-            }\r\n-            if (child.mixins) {\r\n-                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\r\n-                    parent = mergeOptions(parent, child.mixins[i], vm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var options = {};\r\n-        var key;\r\n-        for (key in parent) {\r\n-            mergeField(key);\r\n-        }\r\n-        for (key in child) {\r\n-            if (!hasOwn(parent, key)) {\r\n-                mergeField(key);\r\n-            }\r\n-        }\r\n-        function mergeField (key) {\r\n-            var strat = strats[key] || defaultStrat;\r\n-            options[key] = strat(parent[key], child[key], vm, key);\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Resolve an asset.\r\n-     * This function is used because child instances need access\r\n-     * to assets defined in its ancestor chain.\r\n-     *\u002F\r\n-    function resolveAsset (\r\n-        options,\r\n-        type,\r\n-        id,\r\n-        warnMissing\r\n-    ) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (typeof id !== 'string') {\r\n-            return\r\n-        }\r\n-        var assets = options[type];\r\n-        \u002F\u002F check local registration variations first\r\n-        if (hasOwn(assets, id)) { return assets[id] }\r\n-        var camelizedId = camelize(id);\r\n-        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\r\n-        var PascalCaseId = capitalize(camelizedId);\r\n-        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\r\n-        \u002F\u002F fallback to prototype chain\r\n-        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\r\n-        if (warnMissing && !res) {\r\n-            warn(\r\n-                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\r\n-                options\r\n-            );\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function validateProp (\r\n-        key,\r\n-        propOptions,\r\n-        propsData,\r\n-        vm\r\n-    ) {\r\n-        var prop = propOptions[key];\r\n-        var absent = !hasOwn(propsData, key);\r\n-        var value = propsData[key];\r\n-        \u002F\u002F boolean casting\r\n-        var booleanIndex = getTypeIndex(Boolean, prop.type);\r\n-        if (booleanIndex > -1) {\r\n-            if (absent && !hasOwn(prop, 'default')) {\r\n-                value = false;\r\n-            } else if (value === '' || value === hyphenate(key)) {\r\n-                \u002F\u002F only cast empty string \u002F same name to boolean if\r\n-                \u002F\u002F boolean has higher priority\r\n-                var stringIndex = getTypeIndex(String, prop.type);\r\n-                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\r\n-                    value = true;\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F check default value\r\n-        if (value === undefined) {\r\n-            value = getPropDefaultValue(vm, prop, key);\r\n-            \u002F\u002F since the default value is a fresh copy,\r\n-            \u002F\u002F make sure to observe it.\r\n-            var prevShouldObserve = shouldObserve;\r\n-            toggleObserving(true);\r\n-            observe(value);\r\n-            toggleObserving(prevShouldObserve);\r\n-        }\r\n-        {\r\n-            assertProp(prop, key, value, vm, absent);\r\n-        }\r\n-        return value\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the default value of a prop.\r\n-     *\u002F\r\n-    function getPropDefaultValue (vm, prop, key) {\r\n-        \u002F\u002F no default, return undefined\r\n-        if (!hasOwn(prop, 'default')) {\r\n-            return undefined\r\n-        }\r\n-        var def = prop.default;\r\n-        \u002F\u002F warn against non-factory defaults for Object & Array\r\n-        if (isObject(def)) {\r\n-            warn(\r\n-                'Invalid default value for prop \"' + key + '\": ' +\r\n-                'Props with type Object\u002FArray must use a factory function ' +\r\n-                'to return the default value.',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F the raw prop value was also undefined from previous render,\r\n-        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\r\n-        if (vm && vm.$options.propsData &&\r\n-            vm.$options.propsData[key] === undefined &&\r\n-            vm._props[key] !== undefined\r\n-        ) {\r\n-            return vm._props[key]\r\n-        }\r\n-        \u002F\u002F call factory function for non-Function types\r\n-        \u002F\u002F a value is Function if its prototype is function even across different execution context\r\n-        return typeof def === 'function' && getType(prop.type) !== 'Function'\r\n-            ? def.call(vm)\r\n-            : def\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Assert whether a prop is valid.\r\n-     *\u002F\r\n-    function assertProp (\r\n-        prop,\r\n-        name,\r\n-        value,\r\n-        vm,\r\n-        absent\r\n-    ) {\r\n-        if (prop.required && absent) {\r\n-            warn(\r\n-                'Missing required prop: \"' + name + '\"',\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        if (value == null && !prop.required) {\r\n-            return\r\n-        }\r\n-        var type = prop.type;\r\n-        var valid = !type || type === true;\r\n-        var expectedTypes = [];\r\n-        if (type) {\r\n-            if (!Array.isArray(type)) {\r\n-                type = [type];\r\n-            }\r\n-            for (var i = 0; i \u003C type.length && !valid; i++) {\r\n-                var assertedType = assertType(value, type[i]);\r\n-                expectedTypes.push(assertedType.expectedType || '');\r\n-                valid = assertedType.valid;\r\n-            }\r\n-        }\r\n-\r\n-        if (!valid) {\r\n-            warn(\r\n-                getInvalidTypeMessage(name, value, expectedTypes),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var validator = prop.validator;\r\n-        if (validator) {\r\n-            if (!validator(value)) {\r\n-                warn(\r\n-                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\r\n-\r\n-    function assertType (value, type) {\r\n-        var valid;\r\n-        var expectedType = getType(type);\r\n-        if (simpleCheckRE.test(expectedType)) {\r\n-            var t = typeof value;\r\n-            valid = t === expectedType.toLowerCase();\r\n-            \u002F\u002F for primitive wrapper objects\r\n-            if (!valid && t === 'object') {\r\n-                valid = value instanceof type;\r\n-            }\r\n-        } else if (expectedType === 'Object') {\r\n-            valid = isPlainObject(value);\r\n-        } else if (expectedType === 'Array') {\r\n-            valid = Array.isArray(value);\r\n-        } else {\r\n-            valid = value instanceof type;\r\n-        }\r\n-        return {\r\n-            valid: valid,\r\n-            expectedType: expectedType\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Use function string name to check built-in types,\r\n-     * because a simple equality check will fail when running\r\n-     * across different vms \u002F iframes.\r\n-     *\u002F\r\n-    function getType (fn) {\r\n-        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\r\n-        return match ? match[1] : ''\r\n-    }\r\n-\r\n-    function isSameType (a, b) {\r\n-        return getType(a) === getType(b)\r\n-    }\r\n-\r\n-    function getTypeIndex (type, expectedTypes) {\r\n-        if (!Array.isArray(expectedTypes)) {\r\n-            return isSameType(expectedTypes, type) ? 0 : -1\r\n-        }\r\n-        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\r\n-            if (isSameType(expectedTypes[i], type)) {\r\n-                return i\r\n-            }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    function getInvalidTypeMessage (name, value, expectedTypes) {\r\n-        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\r\n-            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\r\n-        var expectedType = expectedTypes[0];\r\n-        var receivedType = toRawType(value);\r\n-        var expectedValue = styleValue(value, expectedType);\r\n-        var receivedValue = styleValue(value, receivedType);\r\n-        \u002F\u002F check if we need to specify expected value\r\n-        if (expectedTypes.length === 1 &&\r\n-            isExplicable(expectedType) &&\r\n-            !isBoolean(expectedType, receivedType)) {\r\n-            message += \" with value \" + expectedValue;\r\n-        }\r\n-        message += \", got \" + receivedType + \" \";\r\n-        \u002F\u002F check if we need to specify received value\r\n-        if (isExplicable(receivedType)) {\r\n-            message += \"with value \" + receivedValue + \".\";\r\n-        }\r\n-        return message\r\n-    }\r\n-\r\n-    function styleValue (value, type) {\r\n-        if (type === 'String') {\r\n-            return (\"\\\"\" + value + \"\\\"\")\r\n-        } else if (type === 'Number') {\r\n-            return (\"\" + (Number(value)))\r\n-        } else {\r\n-            return (\"\" + value)\r\n-        }\r\n-    }\r\n-\r\n-    function isExplicable (value) {\r\n-        var explicitTypes = ['string', 'number', 'boolean'];\r\n-        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\r\n-    }\r\n-\r\n-    function isBoolean () {\r\n-        var args = [], len = arguments.length;\r\n-        while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function handleError (err, vm, info) {\r\n-        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\r\n-        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\r\n-        pushTarget();\r\n-        try {\r\n-            if (vm) {\r\n-                var cur = vm;\r\n-                while ((cur = cur.$parent)) {\r\n-                    var hooks = cur.$options.errorCaptured;\r\n-                    if (hooks) {\r\n-                        for (var i = 0; i \u003C hooks.length; i++) {\r\n-                            try {\r\n-                                var capture = hooks[i].call(cur, err, vm, info) === false;\r\n-                                if (capture) { return }\r\n-                            } catch (e) {\r\n-                                globalHandleError(e, cur, 'errorCaptured hook');\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            globalHandleError(err, vm, info);\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    function invokeWithErrorHandling (\r\n-        handler,\r\n-        context,\r\n-        args,\r\n-        vm,\r\n-        info\r\n-    ) {\r\n-        var res;\r\n-        try {\r\n-            res = args ? handler.apply(context, args) : handler.call(context);\r\n-            if (res && !res._isVue && isPromise(res) && !res._handled) {\r\n-                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\r\n-                \u002F\u002F issue #9511\r\n-                \u002F\u002F avoid catch triggering multiple times when nested calls\r\n-                res._handled = true;\r\n-            }\r\n-        } catch (e) {\r\n-            handleError(e, vm, info);\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function globalHandleError (err, vm, info) {\r\n-        if (config.errorHandler) {\r\n-            try {\r\n-                return config.errorHandler.call(null, err, vm, info)\r\n-            } catch (e) {\r\n-                \u002F\u002F if the user intentionally throws the original error in the handler,\r\n-                \u002F\u002F do not log it twice\r\n-                if (e !== err) {\r\n-                    logError(e, null, 'config.errorHandler');\r\n-                }\r\n-            }\r\n-        }\r\n-        logError(err, vm, info);\r\n-    }\r\n-\r\n-    function logError (err, vm, info) {\r\n-        {\r\n-            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\r\n-            console.error(err);\r\n-        } else {\r\n-            throw err\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUsingMicroTask = false;\r\n-\r\n-    var callbacks = [];\r\n-    var pending = false;\r\n-\r\n-    function flushCallbacks () {\r\n-        pending = false;\r\n-        var copies = callbacks.slice(0);\r\n-        callbacks.length = 0;\r\n-        for (var i = 0; i \u003C copies.length; i++) {\r\n-            copies[i]();\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F Here we have async deferring wrappers using microtasks.\r\n-    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\r\n-    \u002F\u002F However, it has subtle problems when state is changed right before repaint\r\n-    \u002F\u002F (e.g. #6813, out-in transitions).\r\n-    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\r\n-    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\r\n-    \u002F\u002F So we now use microtasks everywhere, again.\r\n-    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\r\n-    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\r\n-    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\r\n-    \u002F\u002F or even between bubbling of the same event (#6566).\r\n-    var timerFunc;\r\n-\r\n-    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\r\n-    \u002F\u002F via either native Promise.then or MutationObserver.\r\n-    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\r\n-    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\r\n-    \u002F\u002F completely stops working after triggering a few times... so, if native\r\n-    \u002F\u002F Promise is available, we will use it:\r\n-  \u002F* istanbul ignore next, $flow-disable-line *\u002F\r\n-    if (typeof Promise !== 'undefined' && isNative(Promise)) {\r\n-        var p = Promise.resolve();\r\n-        timerFunc = function () {\r\n-            p.then(flushCallbacks);\r\n-            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\r\n-            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\r\n-            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\r\n-            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\r\n-            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\r\n-            if (isIOS) { setTimeout(noop); }\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\r\n-            isNative(MutationObserver) ||\r\n-            \u002F\u002F PhantomJS and iOS 7.x\r\n-            MutationObserver.toString() === '[object MutationObserverConstructor]'\r\n-        )) {\r\n-        \u002F\u002F Use MutationObserver where native Promise is not available,\r\n-        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\r\n-        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\r\n-        var counter = 1;\r\n-        var observer = new MutationObserver(flushCallbacks);\r\n-        var textNode = document.createTextNode(String(counter));\r\n-        observer.observe(textNode, {\r\n-            characterData: true\r\n-        });\r\n-        timerFunc = function () {\r\n-            counter = (counter + 1) % 2;\r\n-            textNode.data = String(counter);\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\r\n-        \u002F\u002F Fallback to setImmediate.\r\n-        \u002F\u002F Techinically it leverages the (macro) task queue,\r\n-        \u002F\u002F but it is still a better choice than setTimeout.\r\n-        timerFunc = function () {\r\n-            setImmediate(flushCallbacks);\r\n-        };\r\n-    } else {\r\n-        \u002F\u002F Fallback to setTimeout.\r\n-        timerFunc = function () {\r\n-            setTimeout(flushCallbacks, 0);\r\n-        };\r\n-    }\r\n-\r\n-    function nextTick (cb, ctx) {\r\n-        var _resolve;\r\n-        callbacks.push(function () {\r\n-            if (cb) {\r\n-                try {\r\n-                    cb.call(ctx);\r\n-                } catch (e) {\r\n-                    handleError(e, ctx, 'nextTick');\r\n-                }\r\n-            } else if (_resolve) {\r\n-                _resolve(ctx);\r\n-            }\r\n-        });\r\n-        if (!pending) {\r\n-            pending = true;\r\n-            timerFunc();\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        if (!cb && typeof Promise !== 'undefined') {\r\n-            return new Promise(function (resolve) {\r\n-                _resolve = resolve;\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var mark;\r\n-    var measure;\r\n-\r\n-    {\r\n-        var perf = inBrowser && window.performance;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            perf &&\r\n-            perf.mark &&\r\n-            perf.measure &&\r\n-            perf.clearMarks &&\r\n-            perf.clearMeasures\r\n-        ) {\r\n-            mark = function (tag) { return perf.mark(tag); };\r\n-            measure = function (name, startTag, endTag) {\r\n-                perf.measure(name, startTag, endTag);\r\n-                perf.clearMarks(startTag);\r\n-                perf.clearMarks(endTag);\r\n-                \u002F\u002F perf.clearMeasures(name)\r\n-            };\r\n-        }\r\n-    }\r\n-\r\n-  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\r\n-\r\n-    var initProxy;\r\n-\r\n-    {\r\n-        var allowedGlobals = makeMap(\r\n-            'Infinity,undefined,NaN,isFinite,isNaN,' +\r\n-            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\r\n-            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\r\n-            'require' \u002F\u002F for Webpack\u002FBrowserify\r\n-        );\r\n-\r\n-        var warnNonPresent = function (target, key) {\r\n-            warn(\r\n-                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\r\n-                'referenced during render. Make sure that this property is reactive, ' +\r\n-                'either in the data option, or for class-based components, by ' +\r\n-                'initializing the property. ' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var warnReservedPrefix = function (target, key) {\r\n-            warn(\r\n-                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\r\n-                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\r\n-                'prevent conflicts with Vue internals' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var hasProxy =\r\n-            typeof Proxy !== 'undefined' && isNative(Proxy);\r\n-\r\n-        if (hasProxy) {\r\n-            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\r\n-            config.keyCodes = new Proxy(config.keyCodes, {\r\n-                set: function set (target, key, value) {\r\n-                    if (isBuiltInModifier(key)) {\r\n-                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\r\n-                        return false\r\n-                    } else {\r\n-                        target[key] = value;\r\n-                        return true\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        var hasHandler = {\r\n-            has: function has (target, key) {\r\n-                var has = key in target;\r\n-                var isAllowed = allowedGlobals(key) ||\r\n-                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\r\n-                if (!has && !isAllowed) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return has || !isAllowed\r\n-            }\r\n-        };\r\n-\r\n-        var getHandler = {\r\n-            get: function get (target, key) {\r\n-                if (typeof key === 'string' && !(key in target)) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return target[key]\r\n-            }\r\n-        };\r\n-\r\n-        initProxy = function initProxy (vm) {\r\n-            if (hasProxy) {\r\n-                \u002F\u002F determine which proxy handler to use\r\n-                var options = vm.$options;\r\n-                var handlers = options.render && options.render._withStripped\r\n-                    ? getHandler\r\n-                    : hasHandler;\r\n-                vm._renderProxy = new Proxy(vm, handlers);\r\n-            } else {\r\n-                vm._renderProxy = vm;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var seenObjects = new _Set();\r\n-\r\n-    \u002F**\r\n-     * Recursively traverse an object to evoke all converted\r\n-     * getters, so that every nested property inside the object\r\n-     * is collected as a \"deep\" dependency.\r\n-     *\u002F\r\n-    function traverse (val) {\r\n-        _traverse(val, seenObjects);\r\n-        seenObjects.clear();\r\n-    }\r\n-\r\n-    function _traverse (val, seen) {\r\n-        var i, keys;\r\n-        var isA = Array.isArray(val);\r\n-        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\r\n-            return\r\n-        }\r\n-        if (val.__ob__) {\r\n-            var depId = val.__ob__.dep.id;\r\n-            if (seen.has(depId)) {\r\n-                return\r\n-            }\r\n-            seen.add(depId);\r\n-        }\r\n-        if (isA) {\r\n-            i = val.length;\r\n-            while (i--) { _traverse(val[i], seen); }\r\n-        } else {\r\n-            keys = Object.keys(val);\r\n-            i = keys.length;\r\n-            while (i--) { _traverse(val[keys[i]], seen); }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var normalizeEvent = cached(function (name) {\r\n-        var passive = name.charAt(0) === '&';\r\n-        name = passive ? name.slice(1) : name;\r\n-        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\r\n-        name = once$$1 ? name.slice(1) : name;\r\n-        var capture = name.charAt(0) === '!';\r\n-        name = capture ? name.slice(1) : name;\r\n-        return {\r\n-            name: name,\r\n-            once: once$$1,\r\n-            capture: capture,\r\n-            passive: passive\r\n-        }\r\n-    });\r\n-\r\n-    function createFnInvoker (fns, vm) {\r\n-        function invoker () {\r\n-            var arguments$1 = arguments;\r\n-\r\n-            var fns = invoker.fns;\r\n-            if (Array.isArray(fns)) {\r\n-                var cloned = fns.slice();\r\n-                for (var i = 0; i \u003C cloned.length; i++) {\r\n-                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F return handler return value for single handlers\r\n-                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\r\n-            }\r\n-        }\r\n-        invoker.fns = fns;\r\n-        return invoker\r\n-    }\r\n-\r\n-    function updateListeners (\r\n-        on,\r\n-        oldOn,\r\n-        add,\r\n-        remove$$1,\r\n-        createOnceHandler,\r\n-        vm\r\n-    ) {\r\n-        var name, def$$1, cur, old, event;\r\n-        for (name in on) {\r\n-            def$$1 = cur = on[name];\r\n-            old = oldOn[name];\r\n-            event = normalizeEvent(name);\r\n-            if (isUndef(cur)) {\r\n-                warn(\r\n-                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\r\n-                    vm\r\n-                );\r\n-            } else if (isUndef(old)) {\r\n-                if (isUndef(cur.fns)) {\r\n-                    cur = on[name] = createFnInvoker(cur, vm);\r\n-                }\r\n-                if (isTrue(event.once)) {\r\n-                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\r\n-                }\r\n-                add(event.name, cur, event.capture, event.passive, event.params);\r\n-            } else if (cur !== old) {\r\n-                old.fns = cur;\r\n-                on[name] = old;\r\n-            }\r\n-        }\r\n-        for (name in oldOn) {\r\n-            if (isUndef(on[name])) {\r\n-                event = normalizeEvent(name);\r\n-                remove$$1(event.name, oldOn[name], event.capture);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function mergeVNodeHook (def, hookKey, hook) {\r\n-        if (def instanceof VNode) {\r\n-            def = def.data.hook || (def.data.hook = {});\r\n-        }\r\n-        var invoker;\r\n-        var oldHook = def[hookKey];\r\n-\r\n-        function wrappedHook () {\r\n-            hook.apply(this, arguments);\r\n-            \u002F\u002F important: remove merged hook to ensure it's called only once\r\n-            \u002F\u002F and prevent memory leak\r\n-            remove(invoker.fns, wrappedHook);\r\n-        }\r\n-\r\n-        if (isUndef(oldHook)) {\r\n-            \u002F\u002F no existing hook\r\n-            invoker = createFnInvoker([wrappedHook]);\r\n-        } else {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\r\n-                \u002F\u002F already a merged invoker\r\n-                invoker = oldHook;\r\n-                invoker.fns.push(wrappedHook);\r\n-            } else {\r\n-                \u002F\u002F existing plain hook\r\n-                invoker = createFnInvoker([oldHook, wrappedHook]);\r\n-            }\r\n-        }\r\n-\r\n-        invoker.merged = true;\r\n-        def[hookKey] = invoker;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function extractPropsFromVNodeData (\r\n-        data,\r\n-        Ctor,\r\n-        tag\r\n-    ) {\r\n-        \u002F\u002F we are only extracting raw values here.\r\n-        \u002F\u002F validation and default values are handled in the child\r\n-        \u002F\u002F component itself.\r\n-        var propOptions = Ctor.options.props;\r\n-        if (isUndef(propOptions)) {\r\n-            return\r\n-        }\r\n-        var res = {};\r\n-        var attrs = data.attrs;\r\n-        var props = data.props;\r\n-        if (isDef(attrs) || isDef(props)) {\r\n-            for (var key in propOptions) {\r\n-                var altKey = hyphenate(key);\r\n-                {\r\n-                    var keyInLowerCase = key.toLowerCase();\r\n-                    if (\r\n-                        key !== keyInLowerCase &&\r\n-                        attrs && hasOwn(attrs, keyInLowerCase)\r\n-                    ) {\r\n-                        tip(\r\n-                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\r\n-                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\r\n-                            \" \\\"\" + key + \"\\\". \" +\r\n-                            \"Note that HTML attributes are case-insensitive and camelCased \" +\r\n-                            \"props need to use their kebab-case equivalents when using in-DOM \" +\r\n-                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\r\n-                        );\r\n-                    }\r\n-                }\r\n-                checkProp(res, props, key, altKey, true) ||\r\n-                checkProp(res, attrs, key, altKey, false);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkProp (\r\n-        res,\r\n-        hash,\r\n-        key,\r\n-        altKey,\r\n-        preserve\r\n-    ) {\r\n-        if (isDef(hash)) {\r\n-            if (hasOwn(hash, key)) {\r\n-                res[key] = hash[key];\r\n-                if (!preserve) {\r\n-                    delete hash[key];\r\n-                }\r\n-                return true\r\n-            } else if (hasOwn(hash, altKey)) {\r\n-                res[key] = hash[altKey];\r\n-                if (!preserve) {\r\n-                    delete hash[altKey];\r\n-                }\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F The template compiler attempts to minimize the need for normalization by\r\n-    \u002F\u002F statically analyzing the template at compile time.\r\n-    \u002F\u002F\r\n-    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\r\n-    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\r\n-    \u002F\u002F two cases where extra normalization is needed:\r\n-\r\n-    \u002F\u002F 1. When the children contains components - because a functional component\r\n-    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\r\n-    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\r\n-    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\r\n-    \u002F\u002F because functional components already normalize their own children.\r\n-    function simpleNormalizeChildren (children) {\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            if (Array.isArray(children[i])) {\r\n-                return Array.prototype.concat.apply([], children)\r\n-            }\r\n-        }\r\n-        return children\r\n-    }\r\n-\r\n-    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\r\n-    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\r\n-    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\r\n-    \u002F\u002F is needed to cater to all possible types of children values.\r\n-    function normalizeChildren (children) {\r\n-        return isPrimitive(children)\r\n-            ? [createTextVNode(children)]\r\n-            : Array.isArray(children)\r\n-                ? normalizeArrayChildren(children)\r\n-                : undefined\r\n-    }\r\n-\r\n-    function isTextNode (node) {\r\n-        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\r\n-    }\r\n-\r\n-    function normalizeArrayChildren (children, nestedIndex) {\r\n-        var res = [];\r\n-        var i, c, lastIndex, last;\r\n-        for (i = 0; i \u003C children.length; i++) {\r\n-            c = children[i];\r\n-            if (isUndef(c) || typeof c === 'boolean') { continue }\r\n-            lastIndex = res.length - 1;\r\n-            last = res[lastIndex];\r\n-            \u002F\u002F  nested\r\n-            if (Array.isArray(c)) {\r\n-                if (c.length > 0) {\r\n-                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    if (isTextNode(c[0]) && isTextNode(last)) {\r\n-                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\r\n-                        c.shift();\r\n-                    }\r\n-                    res.push.apply(res, c);\r\n-                }\r\n-            } else if (isPrimitive(c)) {\r\n-                if (isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    \u002F\u002F this is necessary for SSR hydration because text nodes are\r\n-                    \u002F\u002F essentially merged when rendered to HTML strings\r\n-                    res[lastIndex] = createTextVNode(last.text + c);\r\n-                } else if (c !== '') {\r\n-                    \u002F\u002F convert primitive to vnode\r\n-                    res.push(createTextVNode(c));\r\n-                }\r\n-            } else {\r\n-                if (isTextNode(c) && isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    res[lastIndex] = createTextVNode(last.text + c.text);\r\n-                } else {\r\n-                    \u002F\u002F default key for nested array children (likely generated by v-for)\r\n-                    if (isTrue(children._isVList) &&\r\n-                        isDef(c.tag) &&\r\n-                        isUndef(c.key) &&\r\n-                        isDef(nestedIndex)) {\r\n-                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\r\n-                    }\r\n-                    res.push(c);\r\n-                }\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initProvide (vm) {\r\n-        var provide = vm.$options.provide;\r\n-        if (provide) {\r\n-            vm._provided = typeof provide === 'function'\r\n-                ? provide.call(vm)\r\n-                : provide;\r\n-        }\r\n-    }\r\n-\r\n-    function initInjections (vm) {\r\n-        var result = resolveInject(vm.$options.inject, vm);\r\n-        if (result) {\r\n-            toggleObserving(false);\r\n-            Object.keys(result).forEach(function (key) {\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                {\r\n-                    defineReactive$$1(vm, key, result[key], function () {\r\n-                        warn(\r\n-                            \"Avoid mutating an injected value directly since the changes will be \" +\r\n-                            \"overwritten whenever the provided component re-renders. \" +\r\n-                            \"injection being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    });\r\n-                }\r\n-            });\r\n-            toggleObserving(true);\r\n-        }\r\n-    }\r\n-\r\n-    function resolveInject (inject, vm) {\r\n-        if (inject) {\r\n-            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\r\n-            var result = Object.create(null);\r\n-            var keys = hasSymbol\r\n-                ? Reflect.ownKeys(inject)\r\n-                : Object.keys(inject);\r\n-\r\n-            for (var i = 0; i \u003C keys.length; i++) {\r\n-                var key = keys[i];\r\n-                \u002F\u002F #6574 in case the inject object is observed...\r\n-                if (key === '__ob__') { continue }\r\n-                var provideKey = inject[key].from;\r\n-                var source = vm;\r\n-                while (source) {\r\n-                    if (source._provided && hasOwn(source._provided, provideKey)) {\r\n-                        result[key] = source._provided[provideKey];\r\n-                        break\r\n-                    }\r\n-                    source = source.$parent;\r\n-                }\r\n-                if (!source) {\r\n-                    if ('default' in inject[key]) {\r\n-                        var provideDefault = inject[key].default;\r\n-                        result[key] = typeof provideDefault === 'function'\r\n-                            ? provideDefault.call(vm)\r\n-                            : provideDefault;\r\n-                    } else {\r\n-                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\r\n-                    }\r\n-                }\r\n-            }\r\n-            return result\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving raw children VNodes into a slot object.\r\n-     *\u002F\r\n-    function resolveSlots (\r\n-        children,\r\n-        context\r\n-    ) {\r\n-        if (!children || !children.length) {\r\n-            return {}\r\n-        }\r\n-        var slots = {};\r\n-        for (var i = 0, l = children.length; i \u003C l; i++) {\r\n-            var child = children[i];\r\n-            var data = child.data;\r\n-            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\r\n-            if (data && data.attrs && data.attrs.slot) {\r\n-                delete data.attrs.slot;\r\n-            }\r\n-            \u002F\u002F named slots should only be respected if the vnode was rendered in the\r\n-            \u002F\u002F same context.\r\n-            if ((child.context === context || child.fnContext === context) &&\r\n-                data && data.slot != null\r\n-            ) {\r\n-                var name = data.slot;\r\n-                var slot = (slots[name] || (slots[name] = []));\r\n-                if (child.tag === 'template') {\r\n-                    slot.push.apply(slot, child.children || []);\r\n-                } else {\r\n-                    slot.push(child);\r\n-                }\r\n-            } else {\r\n-                (slots.default || (slots.default = [])).push(child);\r\n-            }\r\n-        }\r\n-        \u002F\u002F ignore slots that contains only whitespace\r\n-        for (var name$1 in slots) {\r\n-            if (slots[name$1].every(isWhitespace)) {\r\n-                delete slots[name$1];\r\n-            }\r\n-        }\r\n-        return slots\r\n-    }\r\n-\r\n-    function isWhitespace (node) {\r\n-        return (node.isComment && !node.asyncFactory) || node.text === ' '\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function normalizeScopedSlots (\r\n-        slots,\r\n-        normalSlots,\r\n-        prevSlots\r\n-    ) {\r\n-        var res;\r\n-        var hasNormalSlots = Object.keys(normalSlots).length > 0;\r\n-        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\r\n-        var key = slots && slots.$key;\r\n-        if (!slots) {\r\n-            res = {};\r\n-        } else if (slots._normalized) {\r\n-            \u002F\u002F fast path 1: child component re-render only, parent did not change\r\n-            return slots._normalized\r\n-        } else if (\r\n-            isStable &&\r\n-            prevSlots &&\r\n-            prevSlots !== emptyObject &&\r\n-            key === prevSlots.$key &&\r\n-            !hasNormalSlots &&\r\n-            !prevSlots.$hasNormal\r\n-        ) {\r\n-            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\r\n-            \u002F\u002F only need to normalize once\r\n-            return prevSlots\r\n-        } else {\r\n-            res = {};\r\n-            for (var key$1 in slots) {\r\n-                if (slots[key$1] && key$1[0] !== '$') {\r\n-                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F expose normal slots on scopedSlots\r\n-        for (var key$2 in normalSlots) {\r\n-            if (!(key$2 in res)) {\r\n-                res[key$2] = proxyNormalSlot(normalSlots, key$2);\r\n-            }\r\n-        }\r\n-        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\r\n-        \u002F\u002F and when that is passed down this would cause an error\r\n-        if (slots && Object.isExtensible(slots)) {\r\n-            (slots)._normalized = res;\r\n-        }\r\n-        def(res, '$stable', isStable);\r\n-        def(res, '$key', key);\r\n-        def(res, '$hasNormal', hasNormalSlots);\r\n-        return res\r\n-    }\r\n-\r\n-    function normalizeScopedSlot(normalSlots, key, fn) {\r\n-        var normalized = function () {\r\n-            var res = arguments.length ? fn.apply(null, arguments) : fn({});\r\n-            res = res && typeof res === 'object' && !Array.isArray(res)\r\n-                ? [res] \u002F\u002F single vnode\r\n-                : normalizeChildren(res);\r\n-            return res && (\r\n-                res.length === 0 ||\r\n-                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\r\n-            ) ? undefined\r\n-                : res\r\n-        };\r\n-        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\r\n-        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\r\n-        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\r\n-        if (fn.proxy) {\r\n-            Object.defineProperty(normalSlots, key, {\r\n-                get: normalized,\r\n-                enumerable: true,\r\n-                configurable: true\r\n-            });\r\n-        }\r\n-        return normalized\r\n-    }\r\n-\r\n-    function proxyNormalSlot(slots, key) {\r\n-        return function () { return slots[key]; }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering v-for lists.\r\n-     *\u002F\r\n-    function renderList (\r\n-        val,\r\n-        render\r\n-    ) {\r\n-        var ret, i, l, keys, key;\r\n-        if (Array.isArray(val) || typeof val === 'string') {\r\n-            ret = new Array(val.length);\r\n-            for (i = 0, l = val.length; i \u003C l; i++) {\r\n-                ret[i] = render(val[i], i);\r\n-            }\r\n-        } else if (typeof val === 'number') {\r\n-            ret = new Array(val);\r\n-            for (i = 0; i \u003C val; i++) {\r\n-                ret[i] = render(i + 1, i);\r\n-            }\r\n-        } else if (isObject(val)) {\r\n-            if (hasSymbol && val[Symbol.iterator]) {\r\n-                ret = [];\r\n-                var iterator = val[Symbol.iterator]();\r\n-                var result = iterator.next();\r\n-                while (!result.done) {\r\n-                    ret.push(render(result.value, ret.length));\r\n-                    result = iterator.next();\r\n-                }\r\n-            } else {\r\n-                keys = Object.keys(val);\r\n-                ret = new Array(keys.length);\r\n-                for (i = 0, l = keys.length; i \u003C l; i++) {\r\n-                    key = keys[i];\r\n-                    ret[i] = render(val[key], key, i);\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isDef(ret)) {\r\n-            ret = [];\r\n-        }\r\n-        (ret)._isVList = true;\r\n-        return ret\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering \u003Cslot>\r\n-     *\u002F\r\n-    function renderSlot (\r\n-        name,\r\n-        fallback,\r\n-        props,\r\n-        bindObject\r\n-    ) {\r\n-        var scopedSlotFn = this.$scopedSlots[name];\r\n-        var nodes;\r\n-        if (scopedSlotFn) { \u002F\u002F scoped slot\r\n-            props = props || {};\r\n-            if (bindObject) {\r\n-                if (!isObject(bindObject)) {\r\n-                    warn(\r\n-                        'slot v-bind without argument expects an Object',\r\n-                        this\r\n-                    );\r\n-                }\r\n-                props = extend(extend({}, bindObject), props);\r\n-            }\r\n-            nodes = scopedSlotFn(props) || fallback;\r\n-        } else {\r\n-            nodes = this.$slots[name] || fallback;\r\n-        }\r\n-\r\n-        var target = props && props.slot;\r\n-        if (target) {\r\n-            return this.$createElement('template', { slot: target }, nodes)\r\n-        } else {\r\n-            return nodes\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving filters\r\n-     *\u002F\r\n-    function resolveFilter (id) {\r\n-        return resolveAsset(this.$options, 'filters', id, true) || identity\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isKeyNotMatch (expect, actual) {\r\n-        if (Array.isArray(expect)) {\r\n-            return expect.indexOf(actual) === -1\r\n-        } else {\r\n-            return expect !== actual\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for checking keyCodes from config.\r\n-     * exposed as Vue.prototype._k\r\n-     * passing in eventKeyName as last argument separately for backwards compat\r\n-     *\u002F\r\n-    function checkKeyCodes (\r\n-        eventKeyCode,\r\n-        key,\r\n-        builtInKeyCode,\r\n-        eventKeyName,\r\n-        builtInKeyName\r\n-    ) {\r\n-        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\r\n-        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\r\n-            return isKeyNotMatch(builtInKeyName, eventKeyName)\r\n-        } else if (mappedKeyCode) {\r\n-            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\r\n-        } else if (eventKeyName) {\r\n-            return hyphenate(eventKeyName) !== key\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\r\n-     *\u002F\r\n-    function bindObjectProps (\r\n-        data,\r\n-        tag,\r\n-        value,\r\n-        asProp,\r\n-        isSync\r\n-    ) {\r\n-        if (value) {\r\n-            if (!isObject(value)) {\r\n-                warn(\r\n-                    'v-bind without argument expects an Object or Array value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                if (Array.isArray(value)) {\r\n-                    value = toObject(value);\r\n-                }\r\n-                var hash;\r\n-                var loop = function ( key ) {\r\n-                    if (\r\n-                        key === 'class' ||\r\n-                        key === 'style' ||\r\n-                        isReservedAttribute(key)\r\n-                    ) {\r\n-                        hash = data;\r\n-                    } else {\r\n-                        var type = data.attrs && data.attrs.type;\r\n-                        hash = asProp || config.mustUseProp(tag, type, key)\r\n-                            ? data.domProps || (data.domProps = {})\r\n-                            : data.attrs || (data.attrs = {});\r\n-                    }\r\n-                    var camelizedKey = camelize(key);\r\n-                    var hyphenatedKey = hyphenate(key);\r\n-                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\r\n-                        hash[key] = value[key];\r\n-\r\n-                        if (isSync) {\r\n-                            var on = data.on || (data.on = {});\r\n-                            on[(\"update:\" + key)] = function ($event) {\r\n-                                value[key] = $event;\r\n-                            };\r\n-                        }\r\n-                    }\r\n-                };\r\n-\r\n-                for (var key in value) loop( key );\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering static trees.\r\n-     *\u002F\r\n-    function renderStatic (\r\n-        index,\r\n-        isInFor\r\n-    ) {\r\n-        var cached = this._staticTrees || (this._staticTrees = []);\r\n-        var tree = cached[index];\r\n-        \u002F\u002F if has already-rendered static tree and not inside v-for,\r\n-        \u002F\u002F we can reuse the same tree.\r\n-        if (tree && !isInFor) {\r\n-            return tree\r\n-        }\r\n-        \u002F\u002F otherwise, render a fresh tree.\r\n-        tree = cached[index] = this.$options.staticRenderFns[index].call(\r\n-            this._renderProxy,\r\n-            null,\r\n-            this \u002F\u002F for render fns generated for functional component templates\r\n-        );\r\n-        markStatic(tree, (\"__static__\" + index), false);\r\n-        return tree\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for v-once.\r\n-     * Effectively it means marking the node as static with a unique key.\r\n-     *\u002F\r\n-    function markOnce (\r\n-        tree,\r\n-        index,\r\n-        key\r\n-    ) {\r\n-        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\r\n-        return tree\r\n-    }\r\n-\r\n-    function markStatic (\r\n-        tree,\r\n-        key,\r\n-        isOnce\r\n-    ) {\r\n-        if (Array.isArray(tree)) {\r\n-            for (var i = 0; i \u003C tree.length; i++) {\r\n-                if (tree[i] && typeof tree[i] !== 'string') {\r\n-                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\r\n-                }\r\n-            }\r\n-        } else {\r\n-            markStaticNode(tree, key, isOnce);\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticNode (node, key, isOnce) {\r\n-        node.isStatic = true;\r\n-        node.key = key;\r\n-        node.isOnce = isOnce;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindObjectListeners (data, value) {\r\n-        if (value) {\r\n-            if (!isPlainObject(value)) {\r\n-                warn(\r\n-                    'v-on without argument expects an Object value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                var on = data.on = data.on ? extend({}, data.on) : {};\r\n-                for (var key in value) {\r\n-                    var existing = on[key];\r\n-                    var ours = value[key];\r\n-                    on[key] = existing ? [].concat(existing, ours) : ours;\r\n-                }\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveScopedSlots (\r\n-        fns, \u002F\u002F see flow\u002Fvnode\r\n-        res,\r\n-        \u002F\u002F the following are added in 2.6\r\n-        hasDynamicKeys,\r\n-        contentHashKey\r\n-    ) {\r\n-        res = res || { $stable: !hasDynamicKeys };\r\n-        for (var i = 0; i \u003C fns.length; i++) {\r\n-            var slot = fns[i];\r\n-            if (Array.isArray(slot)) {\r\n-                resolveScopedSlots(slot, res, hasDynamicKeys);\r\n-            } else if (slot) {\r\n-                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\r\n-                if (slot.proxy) {\r\n-                    slot.fn.proxy = true;\r\n-                }\r\n-                res[slot.key] = slot.fn;\r\n-            }\r\n-        }\r\n-        if (contentHashKey) {\r\n-            (res).$key = contentHashKey;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindDynamicKeys (baseObj, values) {\r\n-        for (var i = 0; i \u003C values.length; i += 2) {\r\n-            var key = values[i];\r\n-            if (typeof key === 'string' && key) {\r\n-                baseObj[values[i]] = values[i + 1];\r\n-            } else if (key !== '' && key !== null) {\r\n-                \u002F\u002F null is a speical value for explicitly removing a binding\r\n-                warn(\r\n-                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\r\n-                    this\r\n-                );\r\n-            }\r\n-        }\r\n-        return baseObj\r\n-    }\r\n-\r\n-    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\r\n-    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\r\n-    \u002F\u002F to string and cause the type check to miss.\r\n-    function prependModifier (value, symbol) {\r\n-        return typeof value === 'string' ? symbol + value : value\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function installRenderHelpers (target) {\r\n-        target._o = markOnce;\r\n-        target._n = toNumber;\r\n-        target._s = toString;\r\n-        target._l = renderList;\r\n-        target._t = renderSlot;\r\n-        target._q = looseEqual;\r\n-        target._i = looseIndexOf;\r\n-        target._m = renderStatic;\r\n-        target._f = resolveFilter;\r\n-        target._k = checkKeyCodes;\r\n-        target._b = bindObjectProps;\r\n-        target._v = createTextVNode;\r\n-        target._e = createEmptyVNode;\r\n-        target._u = resolveScopedSlots;\r\n-        target._g = bindObjectListeners;\r\n-        target._d = bindDynamicKeys;\r\n-        target._p = prependModifier;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function FunctionalRenderContext (\r\n-        data,\r\n-        props,\r\n-        children,\r\n-        parent,\r\n-        Ctor\r\n-    ) {\r\n-        var this$1 = this;\r\n-\r\n-        var options = Ctor.options;\r\n-        \u002F\u002F ensure the createElement function in functional components\r\n-        \u002F\u002F gets a unique context - this is necessary for correct named slot check\r\n-        var contextVm;\r\n-        if (hasOwn(parent, '_uid')) {\r\n-            contextVm = Object.create(parent);\r\n-            \u002F\u002F $flow-disable-line\r\n-            contextVm._original = parent;\r\n-        } else {\r\n-            \u002F\u002F the context vm passed in is a functional context as well.\r\n-            \u002F\u002F in this case we want to make sure we are able to get a hold to the\r\n-            \u002F\u002F real context instance.\r\n-            contextVm = parent;\r\n-            \u002F\u002F $flow-disable-line\r\n-            parent = parent._original;\r\n-        }\r\n-        var isCompiled = isTrue(options._compiled);\r\n-        var needNormalization = !isCompiled;\r\n-\r\n-        this.data = data;\r\n-        this.props = props;\r\n-        this.children = children;\r\n-        this.parent = parent;\r\n-        this.listeners = data.on || emptyObject;\r\n-        this.injections = resolveInject(options.inject, parent);\r\n-        this.slots = function () {\r\n-            if (!this$1.$slots) {\r\n-                normalizeScopedSlots(\r\n-                    data.scopedSlots,\r\n-                    this$1.$slots = resolveSlots(children, parent)\r\n-                );\r\n-            }\r\n-            return this$1.$slots\r\n-        };\r\n-\r\n-        Object.defineProperty(this, 'scopedSlots', ({\r\n-            enumerable: true,\r\n-            get: function get () {\r\n-                return normalizeScopedSlots(data.scopedSlots, this.slots())\r\n-            }\r\n-        }));\r\n-\r\n-        \u002F\u002F support for compiled functional template\r\n-        if (isCompiled) {\r\n-            \u002F\u002F exposing $options for renderStatic()\r\n-            this.$options = options;\r\n-            \u002F\u002F pre-resolve slots for renderSlot()\r\n-            this.$slots = this.slots();\r\n-            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\r\n-        }\r\n-\r\n-        if (options._scopeId) {\r\n-            this._c = function (a, b, c, d) {\r\n-                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\r\n-                if (vnode && !Array.isArray(vnode)) {\r\n-                    vnode.fnScopeId = options._scopeId;\r\n-                    vnode.fnContext = parent;\r\n-                }\r\n-                return vnode\r\n-            };\r\n-        } else {\r\n-            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\r\n-        }\r\n-    }\r\n-\r\n-    installRenderHelpers(FunctionalRenderContext.prototype);\r\n-\r\n-    function createFunctionalComponent (\r\n-        Ctor,\r\n-        propsData,\r\n-        data,\r\n-        contextVm,\r\n-        children\r\n-    ) {\r\n-        var options = Ctor.options;\r\n-        var props = {};\r\n-        var propOptions = options.props;\r\n-        if (isDef(propOptions)) {\r\n-            for (var key in propOptions) {\r\n-                props[key] = validateProp(key, propOptions, propsData || emptyObject);\r\n-            }\r\n-        } else {\r\n-            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\r\n-            if (isDef(data.props)) { mergeProps(props, data.props); }\r\n-        }\r\n-\r\n-        var renderContext = new FunctionalRenderContext(\r\n-            data,\r\n-            props,\r\n-            children,\r\n-            contextVm,\r\n-            Ctor\r\n-        );\r\n-\r\n-        var vnode = options.render.call(null, renderContext._c, renderContext);\r\n-\r\n-        if (vnode instanceof VNode) {\r\n-            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\r\n-        } else if (Array.isArray(vnode)) {\r\n-            var vnodes = normalizeChildren(vnode) || [];\r\n-            var res = new Array(vnodes.length);\r\n-            for (var i = 0; i \u003C vnodes.length; i++) {\r\n-                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\r\n-            }\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\r\n-        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\r\n-        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\r\n-        \u002F\u002F that should not be matched to match.\r\n-        var clone = cloneVNode(vnode);\r\n-        clone.fnContext = contextVm;\r\n-        clone.fnOptions = options;\r\n-        {\r\n-            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\r\n-        }\r\n-        if (data.slot) {\r\n-            (clone.data || (clone.data = {})).slot = data.slot;\r\n-        }\r\n-        return clone\r\n-    }\r\n-\r\n-    function mergeProps (to, from) {\r\n-        for (var key in from) {\r\n-            to[camelize(key)] = from[key];\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F inline hooks to be invoked on component VNodes during patch\r\n-    var componentVNodeHooks = {\r\n-        init: function init (vnode, hydrating) {\r\n-            if (\r\n-                vnode.componentInstance &&\r\n-                !vnode.componentInstance._isDestroyed &&\r\n-                vnode.data.keepAlive\r\n-            ) {\r\n-                \u002F\u002F kept-alive components, treat as a patch\r\n-                var mountedNode = vnode; \u002F\u002F work around flow\r\n-                componentVNodeHooks.prepatch(mountedNode, mountedNode);\r\n-            } else {\r\n-                var child = vnode.componentInstance = createComponentInstanceForVnode(\r\n-                    vnode,\r\n-                    activeInstance\r\n-                );\r\n-                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\r\n-            }\r\n-        },\r\n-\r\n-        prepatch: function prepatch (oldVnode, vnode) {\r\n-            var options = vnode.componentOptions;\r\n-            var child = vnode.componentInstance = oldVnode.componentInstance;\r\n-            updateChildComponent(\r\n-                child,\r\n-                options.propsData, \u002F\u002F updated props\r\n-                options.listeners, \u002F\u002F updated listeners\r\n-                vnode, \u002F\u002F new parent vnode\r\n-                options.children \u002F\u002F new children\r\n-            );\r\n-        },\r\n-\r\n-        insert: function insert (vnode) {\r\n-            var context = vnode.context;\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isMounted) {\r\n-                componentInstance._isMounted = true;\r\n-                callHook(componentInstance, 'mounted');\r\n-            }\r\n-            if (vnode.data.keepAlive) {\r\n-                if (context._isMounted) {\r\n-                    \u002F\u002F vue-router#1212\r\n-                    \u002F\u002F During updates, a kept-alive component's child components may\r\n-                    \u002F\u002F change, so directly walking the tree here may call activated hooks\r\n-                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\r\n-                    \u002F\u002F be processed after the whole patch process ended.\r\n-                    queueActivatedComponent(componentInstance);\r\n-                } else {\r\n-                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        destroy: function destroy (vnode) {\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isDestroyed) {\r\n-                if (!vnode.data.keepAlive) {\r\n-                    componentInstance.$destroy();\r\n-                } else {\r\n-                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var hooksToMerge = Object.keys(componentVNodeHooks);\r\n-\r\n-    function createComponent (\r\n-        Ctor,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        if (isUndef(Ctor)) {\r\n-            return\r\n-        }\r\n-\r\n-        var baseCtor = context.$options._base;\r\n-\r\n-        \u002F\u002F plain options object: turn it into a constructor\r\n-        if (isObject(Ctor)) {\r\n-            Ctor = baseCtor.extend(Ctor);\r\n-        }\r\n-\r\n-        \u002F\u002F if at this stage it's not a constructor or an async component factory,\r\n-        \u002F\u002F reject.\r\n-        if (typeof Ctor !== 'function') {\r\n-            {\r\n-                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F async component\r\n-        var asyncFactory;\r\n-        if (isUndef(Ctor.cid)) {\r\n-            asyncFactory = Ctor;\r\n-            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\r\n-            if (Ctor === undefined) {\r\n-                \u002F\u002F return a placeholder node for async component, which is rendered\r\n-                \u002F\u002F as a comment node but preserves all the raw information for the node.\r\n-                \u002F\u002F the information will be used for async server-rendering and hydration.\r\n-                return createAsyncPlaceholder(\r\n-                    asyncFactory,\r\n-                    data,\r\n-                    context,\r\n-                    children,\r\n-                    tag\r\n-                )\r\n-            }\r\n-        }\r\n-\r\n-        data = data || {};\r\n-\r\n-        \u002F\u002F resolve constructor options in case global mixins are applied after\r\n-        \u002F\u002F component constructor creation\r\n-        resolveConstructorOptions(Ctor);\r\n-\r\n-        \u002F\u002F transform component v-model data into props & events\r\n-        if (isDef(data.model)) {\r\n-            transformModel(Ctor.options, data);\r\n-        }\r\n-\r\n-        \u002F\u002F extract props\r\n-        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\r\n-\r\n-        \u002F\u002F functional component\r\n-        if (isTrue(Ctor.options.functional)) {\r\n-            return createFunctionalComponent(Ctor, propsData, data, context, children)\r\n-        }\r\n-\r\n-        \u002F\u002F extract listeners, since these needs to be treated as\r\n-        \u002F\u002F child component listeners instead of DOM listeners\r\n-        var listeners = data.on;\r\n-        \u002F\u002F replace with listeners with .native modifier\r\n-        \u002F\u002F so it gets processed during parent component patch.\r\n-        data.on = data.nativeOn;\r\n-\r\n-        if (isTrue(Ctor.options.abstract)) {\r\n-            \u002F\u002F abstract components do not keep anything\r\n-            \u002F\u002F other than props & listeners & slot\r\n-\r\n-            \u002F\u002F work around flow\r\n-            var slot = data.slot;\r\n-            data = {};\r\n-            if (slot) {\r\n-                data.slot = slot;\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F install component management hooks onto the placeholder node\r\n-        installComponentHooks(data);\r\n-\r\n-        \u002F\u002F return a placeholder vnode\r\n-        var name = Ctor.options.name || tag;\r\n-        var vnode = new VNode(\r\n-            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\r\n-            data, undefined, undefined, undefined, context,\r\n-            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\r\n-            asyncFactory\r\n-        );\r\n-\r\n-        return vnode\r\n-    }\r\n-\r\n-    function createComponentInstanceForVnode (\r\n-        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\r\n-        parent \u002F\u002F activeInstance in lifecycle state\r\n-    ) {\r\n-        var options = {\r\n-            _isComponent: true,\r\n-            _parentVnode: vnode,\r\n-            parent: parent\r\n-        };\r\n-        \u002F\u002F check inline-template render functions\r\n-        var inlineTemplate = vnode.data.inlineTemplate;\r\n-        if (isDef(inlineTemplate)) {\r\n-            options.render = inlineTemplate.render;\r\n-            options.staticRenderFns = inlineTemplate.staticRenderFns;\r\n-        }\r\n-        return new vnode.componentOptions.Ctor(options)\r\n-    }\r\n-\r\n-    function installComponentHooks (data) {\r\n-        var hooks = data.hook || (data.hook = {});\r\n-        for (var i = 0; i \u003C hooksToMerge.length; i++) {\r\n-            var key = hooksToMerge[i];\r\n-            var existing = hooks[key];\r\n-            var toMerge = componentVNodeHooks[key];\r\n-            if (existing !== toMerge && !(existing && existing._merged)) {\r\n-                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function mergeHook$1 (f1, f2) {\r\n-        var merged = function (a, b) {\r\n-            \u002F\u002F flow complains about extra args which is why we use any\r\n-            f1(a, b);\r\n-            f2(a, b);\r\n-        };\r\n-        merged._merged = true;\r\n-        return merged\r\n-    }\r\n-\r\n-    \u002F\u002F transform component v-model info (value and callback) into\r\n-    \u002F\u002F prop and event handler respectively.\r\n-    function transformModel (options, data) {\r\n-        var prop = (options.model && options.model.prop) || 'value';\r\n-        var event = (options.model && options.model.event) || 'input'\r\n-        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\r\n-        var on = data.on || (data.on = {});\r\n-        var existing = on[event];\r\n-        var callback = data.model.callback;\r\n-        if (isDef(existing)) {\r\n-            if (\r\n-                Array.isArray(existing)\r\n-                    ? existing.indexOf(callback) === -1\r\n-                    : existing !== callback\r\n-            ) {\r\n-                on[event] = [callback].concat(existing);\r\n-            }\r\n-        } else {\r\n-            on[event] = callback;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var SIMPLE_NORMALIZE = 1;\r\n-    var ALWAYS_NORMALIZE = 2;\r\n-\r\n-    \u002F\u002F wrapper function for providing a more flexible interface\r\n-    \u002F\u002F without getting yelled at by flow\r\n-    function createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType,\r\n-        alwaysNormalize\r\n-    ) {\r\n-        if (Array.isArray(data) || isPrimitive(data)) {\r\n-            normalizationType = children;\r\n-            children = data;\r\n-            data = undefined;\r\n-        }\r\n-        if (isTrue(alwaysNormalize)) {\r\n-            normalizationType = ALWAYS_NORMALIZE;\r\n-        }\r\n-        return _createElement(context, tag, data, children, normalizationType)\r\n-    }\r\n-\r\n-    function _createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType\r\n-    ) {\r\n-        if (isDef(data) && isDef((data).__ob__)) {\r\n-            warn(\r\n-                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\r\n-                'Always create fresh vnode data objects in each render!',\r\n-                context\r\n-            );\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F object syntax in v-bind\r\n-        if (isDef(data) && isDef(data.is)) {\r\n-            tag = data.is;\r\n-        }\r\n-        if (!tag) {\r\n-            \u002F\u002F in case of component :is set to falsy value\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F warn against non-primitive key\r\n-        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\r\n-        ) {\r\n-            {\r\n-                warn(\r\n-                    'Avoid using non-primitive value as key, ' +\r\n-                    'use string\u002Fnumber value instead.',\r\n-                    context\r\n-                );\r\n-            }\r\n-        }\r\n-        \u002F\u002F support single function children as default scoped slot\r\n-        if (Array.isArray(children) &&\r\n-            typeof children[0] === 'function'\r\n-        ) {\r\n-            data = data || {};\r\n-            data.scopedSlots = { default: children[0] };\r\n-            children.length = 0;\r\n-        }\r\n-        if (normalizationType === ALWAYS_NORMALIZE) {\r\n-            children = normalizeChildren(children);\r\n-        } else if (normalizationType === SIMPLE_NORMALIZE) {\r\n-            children = simpleNormalizeChildren(children);\r\n-        }\r\n-        var vnode, ns;\r\n-        if (typeof tag === 'string') {\r\n-            var Ctor;\r\n-            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\r\n-            if (config.isReservedTag(tag)) {\r\n-                \u002F\u002F platform built-in elements\r\n-                vnode = new VNode(\r\n-                    config.parsePlatformTagName(tag), data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\r\n-                \u002F\u002F component\r\n-                vnode = createComponent(Ctor, data, context, children, tag);\r\n-            } else {\r\n-                \u002F\u002F unknown or unlisted namespaced elements\r\n-                \u002F\u002F check at runtime because it may get assigned a namespace when its\r\n-                \u002F\u002F parent normalizes children\r\n-                vnode = new VNode(\r\n-                    tag, data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            }\r\n-        } else {\r\n-            \u002F\u002F direct component options \u002F constructor\r\n-            vnode = createComponent(tag, data, context, children);\r\n-        }\r\n-        if (Array.isArray(vnode)) {\r\n-            return vnode\r\n-        } else if (isDef(vnode)) {\r\n-            if (isDef(ns)) { applyNS(vnode, ns); }\r\n-            if (isDef(data)) { registerDeepBindings(data); }\r\n-            return vnode\r\n-        } else {\r\n-            return createEmptyVNode()\r\n-        }\r\n-    }\r\n-\r\n-    function applyNS (vnode, ns, force) {\r\n-        vnode.ns = ns;\r\n-        if (vnode.tag === 'foreignObject') {\r\n-            \u002F\u002F use default namespace inside foreignObject\r\n-            ns = undefined;\r\n-            force = true;\r\n-        }\r\n-        if (isDef(vnode.children)) {\r\n-            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\r\n-                var child = vnode.children[i];\r\n-                if (isDef(child.tag) && (\r\n-                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\r\n-                    applyNS(child, ns, force);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F ref #5318\r\n-    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\r\n-    \u002F\u002F :class are used on slot nodes\r\n-    function registerDeepBindings (data) {\r\n-        if (isObject(data.style)) {\r\n-            traverse(data.style);\r\n-        }\r\n-        if (isObject(data.class)) {\r\n-            traverse(data.class);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initRender (vm) {\r\n-        vm._vnode = null; \u002F\u002F the root of the child tree\r\n-        vm._staticTrees = null; \u002F\u002F v-once cached trees\r\n-        var options = vm.$options;\r\n-        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\r\n-        var renderContext = parentVnode && parentVnode.context;\r\n-        vm.$slots = resolveSlots(options._renderChildren, renderContext);\r\n-        vm.$scopedSlots = emptyObject;\r\n-        \u002F\u002F bind the createElement fn to this instance\r\n-        \u002F\u002F so that we get proper render context inside it.\r\n-        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\r\n-        \u002F\u002F internal version is used by render functions compiled from templates\r\n-        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\r\n-        \u002F\u002F normalization is always applied for the public version, used in\r\n-        \u002F\u002F user-written render functions.\r\n-        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\r\n-\r\n-        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\r\n-        \u002F\u002F they need to be reactive so that HOCs using them are always updated\r\n-        var parentData = parentVnode && parentVnode.data;\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        {\r\n-            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\r\n-            }, true);\r\n-            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\r\n-            }, true);\r\n-        }\r\n-    }\r\n-\r\n-    var currentRenderingInstance = null;\r\n-\r\n-    function renderMixin (Vue) {\r\n-        \u002F\u002F install runtime convenience helpers\r\n-        installRenderHelpers(Vue.prototype);\r\n-\r\n-        Vue.prototype.$nextTick = function (fn) {\r\n-            return nextTick(fn, this)\r\n-        };\r\n-\r\n-        Vue.prototype._render = function () {\r\n-            var vm = this;\r\n-            var ref = vm.$options;\r\n-            var render = ref.render;\r\n-            var _parentVnode = ref._parentVnode;\r\n-\r\n-            if (_parentVnode) {\r\n-                vm.$scopedSlots = normalizeScopedSlots(\r\n-                    _parentVnode.data.scopedSlots,\r\n-                    vm.$slots,\r\n-                    vm.$scopedSlots\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F set parent vnode. this allows render functions to have access\r\n-            \u002F\u002F to the data on the placeholder node.\r\n-            vm.$vnode = _parentVnode;\r\n-            \u002F\u002F render self\r\n-            var vnode;\r\n-            try {\r\n-                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\r\n-                \u002F\u002F separately from one another. Nested component's render fns are called\r\n-                \u002F\u002F when parent component is patched.\r\n-                currentRenderingInstance = vm;\r\n-                vnode = render.call(vm._renderProxy, vm.$createElement);\r\n-            } catch (e) {\r\n-                handleError(e, vm, \"render\");\r\n-                \u002F\u002F return error render result,\r\n-                \u002F\u002F or previous vnode to prevent render error causing blank component\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                if (vm.$options.renderError) {\r\n-                    try {\r\n-                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\r\n-                    } catch (e) {\r\n-                        handleError(e, vm, \"renderError\");\r\n-                        vnode = vm._vnode;\r\n-                    }\r\n-                } else {\r\n-                    vnode = vm._vnode;\r\n-                }\r\n-            } finally {\r\n-                currentRenderingInstance = null;\r\n-            }\r\n-            \u002F\u002F if the returned array contains only a single node, allow it\r\n-            if (Array.isArray(vnode) && vnode.length === 1) {\r\n-                vnode = vnode[0];\r\n-            }\r\n-            \u002F\u002F return empty vnode in case the render function errored out\r\n-            if (!(vnode instanceof VNode)) {\r\n-                if (Array.isArray(vnode)) {\r\n-                    warn(\r\n-                        'Multiple root nodes returned from render function. Render function ' +\r\n-                        'should return a single root node.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                vnode = createEmptyVNode();\r\n-            }\r\n-            \u002F\u002F set parent\r\n-            vnode.parent = _parentVnode;\r\n-            return vnode\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function ensureCtor (comp, base) {\r\n-        if (\r\n-            comp.__esModule ||\r\n-            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\r\n-        ) {\r\n-            comp = comp.default;\r\n-        }\r\n-        return isObject(comp)\r\n-            ? base.extend(comp)\r\n-            : comp\r\n-    }\r\n-\r\n-    function createAsyncPlaceholder (\r\n-        factory,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        var node = createEmptyVNode();\r\n-        node.asyncFactory = factory;\r\n-        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\r\n-        return node\r\n-    }\r\n-\r\n-    function resolveAsyncComponent (\r\n-        factory,\r\n-        baseCtor\r\n-    ) {\r\n-        if (isTrue(factory.error) && isDef(factory.errorComp)) {\r\n-            return factory.errorComp\r\n-        }\r\n-\r\n-        if (isDef(factory.resolved)) {\r\n-            return factory.resolved\r\n-        }\r\n-\r\n-        var owner = currentRenderingInstance;\r\n-        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\r\n-            \u002F\u002F already pending\r\n-            factory.owners.push(owner);\r\n-        }\r\n-\r\n-        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\r\n-            return factory.loadingComp\r\n-        }\r\n-\r\n-        if (owner && !isDef(factory.owners)) {\r\n-            var owners = factory.owners = [owner];\r\n-            var sync = true;\r\n-            var timerLoading = null;\r\n-            var timerTimeout = null\r\n-\r\n-            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\r\n-\r\n-            var forceRender = function (renderCompleted) {\r\n-                for (var i = 0, l = owners.length; i \u003C l; i++) {\r\n-                    (owners[i]).$forceUpdate();\r\n-                }\r\n-\r\n-                if (renderCompleted) {\r\n-                    owners.length = 0;\r\n-                    if (timerLoading !== null) {\r\n-                        clearTimeout(timerLoading);\r\n-                        timerLoading = null;\r\n-                    }\r\n-                    if (timerTimeout !== null) {\r\n-                        clearTimeout(timerTimeout);\r\n-                        timerTimeout = null;\r\n-                    }\r\n-                }\r\n-            };\r\n-\r\n-            var resolve = once(function (res) {\r\n-                \u002F\u002F cache resolved\r\n-                factory.resolved = ensureCtor(res, baseCtor);\r\n-                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\r\n-                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\r\n-                if (!sync) {\r\n-                    forceRender(true);\r\n-                } else {\r\n-                    owners.length = 0;\r\n-                }\r\n-            });\r\n-\r\n-            var reject = once(function (reason) {\r\n-                warn(\r\n-                    \"Failed to resolve async component: \" + (String(factory)) +\r\n-                    (reason ? (\"\\nReason: \" + reason) : '')\r\n-                );\r\n-                if (isDef(factory.errorComp)) {\r\n-                    factory.error = true;\r\n-                    forceRender(true);\r\n-                }\r\n-            });\r\n-\r\n-            var res = factory(resolve, reject);\r\n-\r\n-            if (isObject(res)) {\r\n-                if (isPromise(res)) {\r\n-                    \u002F\u002F () => Promise\r\n-                    if (isUndef(factory.resolved)) {\r\n-                        res.then(resolve, reject);\r\n-                    }\r\n-                } else if (isPromise(res.component)) {\r\n-                    res.component.then(resolve, reject);\r\n-\r\n-                    if (isDef(res.error)) {\r\n-                        factory.errorComp = ensureCtor(res.error, baseCtor);\r\n-                    }\r\n-\r\n-                    if (isDef(res.loading)) {\r\n-                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\r\n-                        if (res.delay === 0) {\r\n-                            factory.loading = true;\r\n-                        } else {\r\n-                            timerLoading = setTimeout(function () {\r\n-                                timerLoading = null;\r\n-                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\r\n-                                    factory.loading = true;\r\n-                                    forceRender(false);\r\n-                                }\r\n-                            }, res.delay || 200);\r\n-                        }\r\n-                    }\r\n-\r\n-                    if (isDef(res.timeout)) {\r\n-                        timerTimeout = setTimeout(function () {\r\n-                            timerTimeout = null;\r\n-                            if (isUndef(factory.resolved)) {\r\n-                                reject(\r\n-                                    \"timeout (\" + (res.timeout) + \"ms)\"\r\n-                                );\r\n-                            }\r\n-                        }, res.timeout);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            sync = false;\r\n-            \u002F\u002F return in case resolved synchronously\r\n-            return factory.loading\r\n-                ? factory.loadingComp\r\n-                : factory.resolved\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isAsyncPlaceholder (node) {\r\n-        return node.isComment && node.asyncFactory\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function getFirstComponentChild (children) {\r\n-        if (Array.isArray(children)) {\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var c = children[i];\r\n-                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\r\n-                    return c\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initEvents (vm) {\r\n-        vm._events = Object.create(null);\r\n-        vm._hasHookEvent = false;\r\n-        \u002F\u002F init parent attached events\r\n-        var listeners = vm.$options._parentListeners;\r\n-        if (listeners) {\r\n-            updateComponentListeners(vm, listeners);\r\n-        }\r\n-    }\r\n-\r\n-    var target;\r\n-\r\n-    function add (event, fn) {\r\n-        target.$on(event, fn);\r\n-    }\r\n-\r\n-    function remove$1 (event, fn) {\r\n-        target.$off(event, fn);\r\n-    }\r\n-\r\n-    function createOnceHandler (event, fn) {\r\n-        var _target = target;\r\n-        return function onceHandler () {\r\n-            var res = fn.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                _target.$off(event, onceHandler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function updateComponentListeners (\r\n-        vm,\r\n-        listeners,\r\n-        oldListeners\r\n-    ) {\r\n-        target = vm;\r\n-        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\r\n-        target = undefined;\r\n-    }\r\n-\r\n-    function eventsMixin (Vue) {\r\n-        var hookRE = \u002F^hook:\u002F;\r\n-        Vue.prototype.$on = function (event, fn) {\r\n-            var vm = this;\r\n-            if (Array.isArray(event)) {\r\n-                for (var i = 0, l = event.length; i \u003C l; i++) {\r\n-                    vm.$on(event[i], fn);\r\n-                }\r\n-            } else {\r\n-                (vm._events[event] || (vm._events[event] = [])).push(fn);\r\n-                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\r\n-                \u002F\u002F instead of a hash lookup\r\n-                if (hookRE.test(event)) {\r\n-                    vm._hasHookEvent = true;\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$once = function (event, fn) {\r\n-            var vm = this;\r\n-            function on () {\r\n-                vm.$off(event, on);\r\n-                fn.apply(vm, arguments);\r\n-            }\r\n-            on.fn = fn;\r\n-            vm.$on(event, on);\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$off = function (event, fn) {\r\n-            var vm = this;\r\n-            \u002F\u002F all\r\n-            if (!arguments.length) {\r\n-                vm._events = Object.create(null);\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F array of events\r\n-            if (Array.isArray(event)) {\r\n-                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\r\n-                    vm.$off(event[i$1], fn);\r\n-                }\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific event\r\n-            var cbs = vm._events[event];\r\n-            if (!cbs) {\r\n-                return vm\r\n-            }\r\n-            if (!fn) {\r\n-                vm._events[event] = null;\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific handler\r\n-            var cb;\r\n-            var i = cbs.length;\r\n-            while (i--) {\r\n-                cb = cbs[i];\r\n-                if (cb === fn || cb.fn === fn) {\r\n-                    cbs.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$emit = function (event) {\r\n-            var vm = this;\r\n-            {\r\n-                var lowerCaseEvent = event.toLowerCase();\r\n-                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\r\n-                    tip(\r\n-                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\r\n-                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\r\n-                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\r\n-                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\r\n-                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            var cbs = vm._events[event];\r\n-            if (cbs) {\r\n-                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\r\n-                var args = toArray(arguments, 1);\r\n-                var info = \"event handler for \\\"\" + event + \"\\\"\";\r\n-                for (var i = 0, l = cbs.length; i \u003C l; i++) {\r\n-                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var activeInstance = null;\r\n-    var isUpdatingChildComponent = false;\r\n-\r\n-    function setActiveInstance(vm) {\r\n-        var prevActiveInstance = activeInstance;\r\n-        activeInstance = vm;\r\n-        return function () {\r\n-            activeInstance = prevActiveInstance;\r\n-        }\r\n-    }\r\n-\r\n-    function initLifecycle (vm) {\r\n-        var options = vm.$options;\r\n-\r\n-        \u002F\u002F locate first non-abstract parent\r\n-        var parent = options.parent;\r\n-        if (parent && !options.abstract) {\r\n-            while (parent.$options.abstract && parent.$parent) {\r\n-                parent = parent.$parent;\r\n-            }\r\n-            parent.$children.push(vm);\r\n-        }\r\n-\r\n-        vm.$parent = parent;\r\n-        vm.$root = parent ? parent.$root : vm;\r\n-\r\n-        vm.$children = [];\r\n-        vm.$refs = {};\r\n-\r\n-        vm._watcher = null;\r\n-        vm._inactive = null;\r\n-        vm._directInactive = false;\r\n-        vm._isMounted = false;\r\n-        vm._isDestroyed = false;\r\n-        vm._isBeingDestroyed = false;\r\n-    }\r\n-\r\n-    function lifecycleMixin (Vue) {\r\n-        Vue.prototype._update = function (vnode, hydrating) {\r\n-            var vm = this;\r\n-            var prevEl = vm.$el;\r\n-            var prevVnode = vm._vnode;\r\n-            var restoreActiveInstance = setActiveInstance(vm);\r\n-            vm._vnode = vnode;\r\n-            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\r\n-            \u002F\u002F based on the rendering backend used.\r\n-            if (!prevVnode) {\r\n-                \u002F\u002F initial render\r\n-                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\r\n-            } else {\r\n-                \u002F\u002F updates\r\n-                vm.$el = vm.__patch__(prevVnode, vnode);\r\n-            }\r\n-            restoreActiveInstance();\r\n-            \u002F\u002F update __vue__ reference\r\n-            if (prevEl) {\r\n-                prevEl.__vue__ = null;\r\n-            }\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = vm;\r\n-            }\r\n-            \u002F\u002F if parent is an HOC, update its $el as well\r\n-            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\r\n-                vm.$parent.$el = vm.$el;\r\n-            }\r\n-            \u002F\u002F updated hook is called by the scheduler to ensure that children are\r\n-            \u002F\u002F updated in a parent's updated hook.\r\n-        };\r\n-\r\n-        Vue.prototype.$forceUpdate = function () {\r\n-            var vm = this;\r\n-            if (vm._watcher) {\r\n-                vm._watcher.update();\r\n-            }\r\n-        };\r\n-\r\n-        Vue.prototype.$destroy = function () {\r\n-            var vm = this;\r\n-            if (vm._isBeingDestroyed) {\r\n-                return\r\n-            }\r\n-            callHook(vm, 'beforeDestroy');\r\n-            vm._isBeingDestroyed = true;\r\n-            \u002F\u002F remove self from parent\r\n-            var parent = vm.$parent;\r\n-            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\r\n-                remove(parent.$children, vm);\r\n-            }\r\n-            \u002F\u002F teardown watchers\r\n-            if (vm._watcher) {\r\n-                vm._watcher.teardown();\r\n-            }\r\n-            var i = vm._watchers.length;\r\n-            while (i--) {\r\n-                vm._watchers[i].teardown();\r\n-            }\r\n-            \u002F\u002F remove reference from data ob\r\n-            \u002F\u002F frozen object may not have observer.\r\n-            if (vm._data.__ob__) {\r\n-                vm._data.__ob__.vmCount--;\r\n-            }\r\n-            \u002F\u002F call the last hook...\r\n-            vm._isDestroyed = true;\r\n-            \u002F\u002F invoke destroy hooks on current rendered tree\r\n-            vm.__patch__(vm._vnode, null);\r\n-            \u002F\u002F fire destroyed hook\r\n-            callHook(vm, 'destroyed');\r\n-            \u002F\u002F turn off all instance listeners.\r\n-            vm.$off();\r\n-            \u002F\u002F remove __vue__ reference\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = null;\r\n-            }\r\n-            \u002F\u002F release circular reference (#6759)\r\n-            if (vm.$vnode) {\r\n-                vm.$vnode.parent = null;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function mountComponent (\r\n-        vm,\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        vm.$el = el;\r\n-        if (!vm.$options.render) {\r\n-            vm.$options.render = createEmptyVNode;\r\n-            {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\r\n-                    vm.$options.el || el) {\r\n-                    warn(\r\n-                        'You are using the runtime-only build of Vue where the template ' +\r\n-                        'compiler is not available. Either pre-compile the templates into ' +\r\n-                        'render functions, or use the compiler-included build.',\r\n-                        vm\r\n-                    );\r\n-                } else {\r\n-                    warn(\r\n-                        'Failed to mount component: template or render function not defined.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-        }\r\n-        callHook(vm, 'beforeMount');\r\n-\r\n-        var updateComponent;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (config.performance && mark) {\r\n-            updateComponent = function () {\r\n-                var name = vm._name;\r\n-                var id = vm._uid;\r\n-                var startTag = \"vue-perf-start:\" + id;\r\n-                var endTag = \"vue-perf-end:\" + id;\r\n-\r\n-                mark(startTag);\r\n-                var vnode = vm._render();\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" render\"), startTag, endTag);\r\n-\r\n-                mark(startTag);\r\n-                vm._update(vnode, hydrating);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" patch\"), startTag, endTag);\r\n-            };\r\n-        } else {\r\n-            updateComponent = function () {\r\n-                vm._update(vm._render(), hydrating);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\r\n-        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\r\n-        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\r\n-        new Watcher(vm, updateComponent, noop, {\r\n-            before: function before () {\r\n-                if (vm._isMounted && !vm._isDestroyed) {\r\n-                    callHook(vm, 'beforeUpdate');\r\n-                }\r\n-            }\r\n-        }, true \u002F* isRenderWatcher *\u002F);\r\n-        hydrating = false;\r\n-\r\n-        \u002F\u002F manually mounted instance, call mounted on self\r\n-        \u002F\u002F mounted is called for render-created child components in its inserted hook\r\n-        if (vm.$vnode == null) {\r\n-            vm._isMounted = true;\r\n-            callHook(vm, 'mounted');\r\n-        }\r\n-        return vm\r\n-    }\r\n-\r\n-    function updateChildComponent (\r\n-        vm,\r\n-        propsData,\r\n-        listeners,\r\n-        parentVnode,\r\n-        renderChildren\r\n-    ) {\r\n-        {\r\n-            isUpdatingChildComponent = true;\r\n-        }\r\n-\r\n-        \u002F\u002F determine whether component has slot children\r\n-        \u002F\u002F we need to do this before overwriting $options._renderChildren.\r\n-\r\n-        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\r\n-        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\r\n-        \u002F\u002F \"$stable\" marker.\r\n-        var newScopedSlots = parentVnode.data.scopedSlots;\r\n-        var oldScopedSlots = vm.$scopedSlots;\r\n-        var hasDynamicScopedSlot = !!(\r\n-            (newScopedSlots && !newScopedSlots.$stable) ||\r\n-            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\r\n-            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\r\n-        );\r\n-\r\n-        \u002F\u002F Any static slot children from the parent may have changed during parent's\r\n-        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\r\n-        \u002F\u002F update is necessary to ensure correctness.\r\n-        var needsForceUpdate = !!(\r\n-            renderChildren ||               \u002F\u002F has new static slots\r\n-            vm.$options._renderChildren ||  \u002F\u002F has old static slots\r\n-            hasDynamicScopedSlot\r\n-        );\r\n-\r\n-        vm.$options._parentVnode = parentVnode;\r\n-        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\r\n-\r\n-        if (vm._vnode) { \u002F\u002F update child tree's parent\r\n-            vm._vnode.parent = parentVnode;\r\n-        }\r\n-        vm.$options._renderChildren = renderChildren;\r\n-\r\n-        \u002F\u002F update $attrs and $listeners hash\r\n-        \u002F\u002F these are also reactive so they may trigger child update if the child\r\n-        \u002F\u002F used them during render\r\n-        vm.$attrs = parentVnode.data.attrs || emptyObject;\r\n-        vm.$listeners = listeners || emptyObject;\r\n-\r\n-        \u002F\u002F update props\r\n-        if (propsData && vm.$options.props) {\r\n-            toggleObserving(false);\r\n-            var props = vm._props;\r\n-            var propKeys = vm.$options._propKeys || [];\r\n-            for (var i = 0; i \u003C propKeys.length; i++) {\r\n-                var key = propKeys[i];\r\n-                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\r\n-                props[key] = validateProp(key, propOptions, propsData, vm);\r\n-            }\r\n-            toggleObserving(true);\r\n-            \u002F\u002F keep a copy of raw propsData\r\n-            vm.$options.propsData = propsData;\r\n-        }\r\n-\r\n-        \u002F\u002F update listeners\r\n-        listeners = listeners || emptyObject;\r\n-        var oldListeners = vm.$options._parentListeners;\r\n-        vm.$options._parentListeners = listeners;\r\n-        updateComponentListeners(vm, listeners, oldListeners);\r\n-\r\n-        \u002F\u002F resolve slots + force update if has children\r\n-        if (needsForceUpdate) {\r\n-            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\r\n-            vm.$forceUpdate();\r\n-        }\r\n-\r\n-        {\r\n-            isUpdatingChildComponent = false;\r\n-        }\r\n-    }\r\n-\r\n-    function isInInactiveTree (vm) {\r\n-        while (vm && (vm = vm.$parent)) {\r\n-            if (vm._inactive) { return true }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function activateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = false;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        } else if (vm._directInactive) {\r\n-            return\r\n-        }\r\n-        if (vm._inactive || vm._inactive === null) {\r\n-            vm._inactive = false;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                activateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'activated');\r\n-        }\r\n-    }\r\n-\r\n-    function deactivateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = true;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        }\r\n-        if (!vm._inactive) {\r\n-            vm._inactive = true;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                deactivateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'deactivated');\r\n-        }\r\n-    }\r\n-\r\n-    function callHook (vm, hook) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\r\n-        pushTarget();\r\n-        var handlers = vm.$options[hook];\r\n-        var info = hook + \" hook\";\r\n-        if (handlers) {\r\n-            for (var i = 0, j = handlers.length; i \u003C j; i++) {\r\n-                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\r\n-            }\r\n-        }\r\n-        if (vm._hasHookEvent) {\r\n-            vm.$emit('hook:' + hook);\r\n-        }\r\n-        popTarget();\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var MAX_UPDATE_COUNT = 100;\r\n-\r\n-    var queue = [];\r\n-    var activatedChildren = [];\r\n-    var has = {};\r\n-    var circular = {};\r\n-    var waiting = false;\r\n-    var flushing = false;\r\n-    var index = 0;\r\n-\r\n-    \u002F**\r\n-     * Reset the scheduler's state.\r\n-     *\u002F\r\n-    function resetSchedulerState () {\r\n-        index = queue.length = activatedChildren.length = 0;\r\n-        has = {};\r\n-        {\r\n-            circular = {};\r\n-        }\r\n-        waiting = flushing = false;\r\n-    }\r\n-\r\n-    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\r\n-    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\r\n-    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\r\n-    \u002F\u002F every time the scheduler flushes and use that for all event listeners\r\n-    \u002F\u002F attached during that flush.\r\n-    var currentFlushTimestamp = 0;\r\n-\r\n-    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\r\n-    var getNow = Date.now;\r\n-\r\n-    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\r\n-    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\r\n-    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\r\n-    \u002F\u002F same timestamp type when saving the flush timestamp.\r\n-    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\r\n-    \u002F\u002F implementations (#9632)\r\n-    if (inBrowser && !isIE) {\r\n-        var performance = window.performance;\r\n-        if (\r\n-            performance &&\r\n-            typeof performance.now === 'function' &&\r\n-            getNow() > document.createEvent('Event').timeStamp\r\n-        ) {\r\n-            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\r\n-            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\r\n-            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\r\n-            \u002F\u002F well.\r\n-            getNow = function () { return performance.now(); };\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Flush both queues and run the watchers.\r\n-     *\u002F\r\n-    function flushSchedulerQueue () {\r\n-        currentFlushTimestamp = getNow();\r\n-        flushing = true;\r\n-        var watcher, id;\r\n-\r\n-        \u002F\u002F Sort queue before flush.\r\n-        \u002F\u002F This ensures that:\r\n-        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\r\n-        \u002F\u002F    created before the child)\r\n-        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\r\n-        \u002F\u002F    user watchers are created before the render watcher)\r\n-        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\r\n-        \u002F\u002F    its watchers can be skipped.\r\n-        queue.sort(function (a, b) { return a.id - b.id; });\r\n-\r\n-        \u002F\u002F do not cache length because more watchers might be pushed\r\n-        \u002F\u002F as we run existing watchers\r\n-        for (index = 0; index \u003C queue.length; index++) {\r\n-            watcher = queue[index];\r\n-            if (watcher.before) {\r\n-                watcher.before();\r\n-            }\r\n-            id = watcher.id;\r\n-            has[id] = null;\r\n-            watcher.run();\r\n-            \u002F\u002F in dev build, check and stop circular updates.\r\n-            if (has[id] != null) {\r\n-                circular[id] = (circular[id] || 0) + 1;\r\n-                if (circular[id] > MAX_UPDATE_COUNT) {\r\n-                    warn(\r\n-                        'You may have an infinite update loop ' + (\r\n-                            watcher.user\r\n-                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\r\n-                                : \"in a component render function.\"\r\n-                        ),\r\n-                        watcher.vm\r\n-                    );\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F keep copies of post queues before resetting state\r\n-        var activatedQueue = activatedChildren.slice();\r\n-        var updatedQueue = queue.slice();\r\n-\r\n-        resetSchedulerState();\r\n-\r\n-        \u002F\u002F call component updated and activated hooks\r\n-        callActivatedHooks(activatedQueue);\r\n-        callUpdatedHooks(updatedQueue);\r\n-\r\n-        \u002F\u002F devtool hook\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (devtools && config.devtools) {\r\n-            devtools.emit('flush');\r\n-        }\r\n-    }\r\n-\r\n-    function callUpdatedHooks (queue) {\r\n-        var i = queue.length;\r\n-        while (i--) {\r\n-            var watcher = queue[i];\r\n-            var vm = watcher.vm;\r\n-            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\r\n-                callHook(vm, 'updated');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Queue a kept-alive component that was activated during patch.\r\n-     * The queue will be processed after the entire tree has been patched.\r\n-     *\u002F\r\n-    function queueActivatedComponent (vm) {\r\n-        \u002F\u002F setting _inactive to false here so that a render function can\r\n-        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\r\n-        vm._inactive = false;\r\n-        activatedChildren.push(vm);\r\n-    }\r\n-\r\n-    function callActivatedHooks (queue) {\r\n-        for (var i = 0; i \u003C queue.length; i++) {\r\n-            queue[i]._inactive = true;\r\n-            activateChildComponent(queue[i], true \u002F* true *\u002F);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Push a watcher into the watcher queue.\r\n-     * Jobs with duplicate IDs will be skipped unless it's\r\n-     * pushed when the queue is being flushed.\r\n-     *\u002F\r\n-    function queueWatcher (watcher) {\r\n-        var id = watcher.id;\r\n-        if (has[id] == null) {\r\n-            has[id] = true;\r\n-            if (!flushing) {\r\n-                queue.push(watcher);\r\n-            } else {\r\n-                \u002F\u002F if already flushing, splice the watcher based on its id\r\n-                \u002F\u002F if already past its id, it will be run next immediately.\r\n-                var i = queue.length - 1;\r\n-                while (i > index && queue[i].id > watcher.id) {\r\n-                    i--;\r\n-                }\r\n-                queue.splice(i + 1, 0, watcher);\r\n-            }\r\n-            \u002F\u002F queue the flush\r\n-            if (!waiting) {\r\n-                waiting = true;\r\n-\r\n-                if (!config.async) {\r\n-                    flushSchedulerQueue();\r\n-                    return\r\n-                }\r\n-                nextTick(flushSchedulerQueue);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var uid$2 = 0;\r\n-\r\n-    \u002F**\r\n-     * A watcher parses an expression, collects dependencies,\r\n-     * and fires callback when the expression value changes.\r\n-     * This is used for both the $watch() api and directives.\r\n-     *\u002F\r\n-    var Watcher = function Watcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        cb,\r\n-        options,\r\n-        isRenderWatcher\r\n-    ) {\r\n-        this.vm = vm;\r\n-        if (isRenderWatcher) {\r\n-            vm._watcher = this;\r\n-        }\r\n-        vm._watchers.push(this);\r\n-        \u002F\u002F options\r\n-        if (options) {\r\n-            this.deep = !!options.deep;\r\n-            this.user = !!options.user;\r\n-            this.lazy = !!options.lazy;\r\n-            this.sync = !!options.sync;\r\n-            this.before = options.before;\r\n-        } else {\r\n-            this.deep = this.user = this.lazy = this.sync = false;\r\n-        }\r\n-        this.cb = cb;\r\n-        this.id = ++uid$2; \u002F\u002F uid for batching\r\n-        this.active = true;\r\n-        this.dirty = this.lazy; \u002F\u002F for lazy watchers\r\n-        this.deps = [];\r\n-        this.newDeps = [];\r\n-        this.depIds = new _Set();\r\n-        this.newDepIds = new _Set();\r\n-        this.expression = expOrFn.toString();\r\n-        \u002F\u002F parse expression for getter\r\n-        if (typeof expOrFn === 'function') {\r\n-            this.getter = expOrFn;\r\n-        } else {\r\n-            this.getter = parsePath(expOrFn);\r\n-            if (!this.getter) {\r\n-                this.getter = noop;\r\n-                warn(\r\n-                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\r\n-                    'Watcher only accepts simple dot-delimited paths. ' +\r\n-                    'For full control, use a function instead.',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-        this.value = this.lazy\r\n-            ? undefined\r\n-            : this.get();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the getter, and re-collect dependencies.\r\n-     *\u002F\r\n-    Watcher.prototype.get = function get () {\r\n-        pushTarget(this);\r\n-        var value;\r\n-        var vm = this.vm;\r\n-        try {\r\n-            value = this.getter.call(vm, vm);\r\n-        } catch (e) {\r\n-            if (this.user) {\r\n-                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-            } else {\r\n-                throw e\r\n-            }\r\n-        } finally {\r\n-            \u002F\u002F \"touch\" every property so they are all tracked as\r\n-            \u002F\u002F dependencies for deep watching\r\n-            if (this.deep) {\r\n-                traverse(value);\r\n-            }\r\n-            popTarget();\r\n-            this.cleanupDeps();\r\n-        }\r\n-        return value\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Add a dependency to this directive.\r\n-     *\u002F\r\n-    Watcher.prototype.addDep = function addDep (dep) {\r\n-        var id = dep.id;\r\n-        if (!this.newDepIds.has(id)) {\r\n-            this.newDepIds.add(id);\r\n-            this.newDeps.push(dep);\r\n-            if (!this.depIds.has(id)) {\r\n-                dep.addSub(this);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Clean up for dependency collection.\r\n-     *\u002F\r\n-    Watcher.prototype.cleanupDeps = function cleanupDeps () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            var dep = this.deps[i];\r\n-            if (!this.newDepIds.has(dep.id)) {\r\n-                dep.removeSub(this);\r\n-            }\r\n-        }\r\n-        var tmp = this.depIds;\r\n-        this.depIds = this.newDepIds;\r\n-        this.newDepIds = tmp;\r\n-        this.newDepIds.clear();\r\n-        tmp = this.deps;\r\n-        this.deps = this.newDeps;\r\n-        this.newDeps = tmp;\r\n-        this.newDeps.length = 0;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Subscriber interface.\r\n-     * Will be called when a dependency changes.\r\n-     *\u002F\r\n-    Watcher.prototype.update = function update () {\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (this.lazy) {\r\n-            this.dirty = true;\r\n-        } else if (this.sync) {\r\n-            this.run();\r\n-        } else {\r\n-            queueWatcher(this);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Scheduler job interface.\r\n-     * Will be called by the scheduler.\r\n-     *\u002F\r\n-    Watcher.prototype.run = function run () {\r\n-        if (this.active) {\r\n-            var value = this.get();\r\n-            if (\r\n-                value !== this.value ||\r\n-                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\r\n-                \u002F\u002F when the value is the same, because the value may\r\n-                \u002F\u002F have mutated.\r\n-                isObject(value) ||\r\n-                this.deep\r\n-            ) {\r\n-                \u002F\u002F set new value\r\n-                var oldValue = this.value;\r\n-                this.value = value;\r\n-                if (this.user) {\r\n-                    try {\r\n-                        this.cb.call(this.vm, value, oldValue);\r\n-                    } catch (e) {\r\n-                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-                    }\r\n-                } else {\r\n-                    this.cb.call(this.vm, value, oldValue);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the value of the watcher.\r\n-     * This only gets called for lazy watchers.\r\n-     *\u002F\r\n-    Watcher.prototype.evaluate = function evaluate () {\r\n-        this.value = this.get();\r\n-        this.dirty = false;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Depend on all deps collected by this watcher.\r\n-     *\u002F\r\n-    Watcher.prototype.depend = function depend () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            this.deps[i].depend();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Remove self from all dependencies' subscriber list.\r\n-     *\u002F\r\n-    Watcher.prototype.teardown = function teardown () {\r\n-        if (this.active) {\r\n-            \u002F\u002F remove self from vm's watcher list\r\n-            \u002F\u002F this is a somewhat expensive operation so we skip it\r\n-            \u002F\u002F if the vm is being destroyed.\r\n-            if (!this.vm._isBeingDestroyed) {\r\n-                remove(this.vm._watchers, this);\r\n-            }\r\n-            var i = this.deps.length;\r\n-            while (i--) {\r\n-                this.deps[i].removeSub(this);\r\n-            }\r\n-            this.active = false;\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var sharedPropertyDefinition = {\r\n-        enumerable: true,\r\n-        configurable: true,\r\n-        get: noop,\r\n-        set: noop\r\n-    };\r\n-\r\n-    function proxy (target, sourceKey, key) {\r\n-        sharedPropertyDefinition.get = function proxyGetter () {\r\n-            return this[sourceKey][key]\r\n-        };\r\n-        sharedPropertyDefinition.set = function proxySetter (val) {\r\n-            this[sourceKey][key] = val;\r\n-        };\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function initState (vm) {\r\n-        vm._watchers = [];\r\n-        var opts = vm.$options;\r\n-        if (opts.props) { initProps(vm, opts.props); }\r\n-        if (opts.methods) { initMethods(vm, opts.methods); }\r\n-        if (opts.data) {\r\n-            initData(vm);\r\n-        } else {\r\n-            observe(vm._data = {}, true \u002F* asRootData *\u002F);\r\n-        }\r\n-        if (opts.computed) { initComputed(vm, opts.computed); }\r\n-        if (opts.watch && opts.watch !== nativeWatch) {\r\n-            initWatch(vm, opts.watch);\r\n-        }\r\n-    }\r\n-\r\n-    function initProps (vm, propsOptions) {\r\n-        var propsData = vm.$options.propsData || {};\r\n-        var props = vm._props = {};\r\n-        \u002F\u002F cache prop keys so that future props updates can iterate using Array\r\n-        \u002F\u002F instead of dynamic object key enumeration.\r\n-        var keys = vm.$options._propKeys = [];\r\n-        var isRoot = !vm.$parent;\r\n-        \u002F\u002F root instance props should be converted\r\n-        if (!isRoot) {\r\n-            toggleObserving(false);\r\n-        }\r\n-        var loop = function ( key ) {\r\n-            keys.push(key);\r\n-            var value = validateProp(key, propsOptions, propsData, vm);\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                var hyphenatedKey = hyphenate(key);\r\n-                if (isReservedAttribute(hyphenatedKey) ||\r\n-                    config.isReservedAttr(hyphenatedKey)) {\r\n-                    warn(\r\n-                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                defineReactive$$1(props, key, value, function () {\r\n-                    if (!isRoot && !isUpdatingChildComponent) {\r\n-                        warn(\r\n-                            \"Avoid mutating a prop directly since the value will be \" +\r\n-                            \"overwritten whenever the parent component re-renders. \" +\r\n-                            \"Instead, use a data or computed property based on the prop's \" +\r\n-                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                });\r\n-            }\r\n-            \u002F\u002F static props are already proxied on the component's prototype\r\n-            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\r\n-            \u002F\u002F instantiation here.\r\n-            if (!(key in vm)) {\r\n-                proxy(vm, \"_props\", key);\r\n-            }\r\n-        };\r\n-\r\n-        for (var key in propsOptions) loop( key );\r\n-        toggleObserving(true);\r\n-    }\r\n-\r\n-    function initData (vm) {\r\n-        var data = vm.$options.data;\r\n-        data = vm._data = typeof data === 'function'\r\n-            ? getData(data, vm)\r\n-            : data || {};\r\n-        if (!isPlainObject(data)) {\r\n-            data = {};\r\n-            warn(\r\n-                'data functions should return an object:\\n' +\r\n-                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F proxy data on instance\r\n-        var keys = Object.keys(data);\r\n-        var props = vm.$options.props;\r\n-        var methods = vm.$options.methods;\r\n-        var i = keys.length;\r\n-        while (i--) {\r\n-            var key = keys[i];\r\n-            {\r\n-                if (methods && hasOwn(methods, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (props && hasOwn(props, key)) {\r\n-                warn(\r\n-                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\r\n-                    \"Use prop default value instead.\",\r\n-                    vm\r\n-                );\r\n-            } else if (!isReserved(key)) {\r\n-                proxy(vm, \"_data\", key);\r\n-            }\r\n-        }\r\n-        \u002F\u002F observe data\r\n-        observe(data, true \u002F* asRootData *\u002F);\r\n-    }\r\n-\r\n-    function getData (data, vm) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking data getters\r\n-        pushTarget();\r\n-        try {\r\n-            return data.call(vm, vm)\r\n-        } catch (e) {\r\n-            handleError(e, vm, \"data()\");\r\n-            return {}\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    var computedWatcherOptions = { lazy: true };\r\n-\r\n-    function initComputed (vm, computed) {\r\n-        \u002F\u002F $flow-disable-line\r\n-        var watchers = vm._computedWatchers = Object.create(null);\r\n-        \u002F\u002F computed properties are just getters during SSR\r\n-        var isSSR = isServerRendering();\r\n-\r\n-        for (var key in computed) {\r\n-            var userDef = computed[key];\r\n-            var getter = typeof userDef === 'function' ? userDef : userDef.get;\r\n-            if (getter == null) {\r\n-                warn(\r\n-                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\r\n-                    vm\r\n-                );\r\n-            }\r\n-\r\n-            if (!isSSR) {\r\n-                \u002F\u002F create internal watcher for the computed property.\r\n-                watchers[key] = new Watcher(\r\n-                    vm,\r\n-                    getter || noop,\r\n-                    noop,\r\n-                    computedWatcherOptions\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F component-defined computed properties are already defined on the\r\n-            \u002F\u002F component prototype. We only need to define computed properties defined\r\n-            \u002F\u002F at instantiation here.\r\n-            if (!(key in vm)) {\r\n-                defineComputed(vm, key, userDef);\r\n-            } else {\r\n-                if (key in vm.$data) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\r\n-                } else if (vm.$options.props && key in vm.$options.props) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function defineComputed (\r\n-        target,\r\n-        key,\r\n-        userDef\r\n-    ) {\r\n-        var shouldCache = !isServerRendering();\r\n-        if (typeof userDef === 'function') {\r\n-            sharedPropertyDefinition.get = shouldCache\r\n-                ? createComputedGetter(key)\r\n-                : createGetterInvoker(userDef);\r\n-            sharedPropertyDefinition.set = noop;\r\n-        } else {\r\n-            sharedPropertyDefinition.get = userDef.get\r\n-                ? shouldCache && userDef.cache !== false\r\n-                    ? createComputedGetter(key)\r\n-                    : createGetterInvoker(userDef.get)\r\n-                : noop;\r\n-            sharedPropertyDefinition.set = userDef.set || noop;\r\n-        }\r\n-        if (sharedPropertyDefinition.set === noop) {\r\n-            sharedPropertyDefinition.set = function () {\r\n-                warn(\r\n-                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\r\n-                    this\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function createComputedGetter (key) {\r\n-        return function computedGetter () {\r\n-            var watcher = this._computedWatchers && this._computedWatchers[key];\r\n-            if (watcher) {\r\n-                if (watcher.dirty) {\r\n-                    watcher.evaluate();\r\n-                }\r\n-                if (Dep.target) {\r\n-                    watcher.depend();\r\n-                }\r\n-                return watcher.value\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createGetterInvoker(fn) {\r\n-        return function computedGetter () {\r\n-            return fn.call(this, this)\r\n-        }\r\n-    }\r\n-\r\n-    function initMethods (vm, methods) {\r\n-        var props = vm.$options.props;\r\n-        for (var key in methods) {\r\n-            {\r\n-                if (typeof methods[key] !== 'function') {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\r\n-                        \"Did you reference the function correctly?\",\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if (props && hasOwn(props, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if ((key in vm) && isReserved(key)) {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\r\n-                        \"Avoid defining component methods that start with _ or $.\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\r\n-        }\r\n-    }\r\n-\r\n-    function initWatch (vm, watch) {\r\n-        for (var key in watch) {\r\n-            var handler = watch[key];\r\n-            if (Array.isArray(handler)) {\r\n-                for (var i = 0; i \u003C handler.length; i++) {\r\n-                    createWatcher(vm, key, handler[i]);\r\n-                }\r\n-            } else {\r\n-                createWatcher(vm, key, handler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createWatcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        handler,\r\n-        options\r\n-    ) {\r\n-        if (isPlainObject(handler)) {\r\n-            options = handler;\r\n-            handler = handler.handler;\r\n-        }\r\n-        if (typeof handler === 'string') {\r\n-            handler = vm[handler];\r\n-        }\r\n-        return vm.$watch(expOrFn, handler, options)\r\n-    }\r\n-\r\n-    function stateMixin (Vue) {\r\n-        \u002F\u002F flow somehow has problems with directly declared definition object\r\n-        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\r\n-        \u002F\u002F the object here.\r\n-        var dataDef = {};\r\n-        dataDef.get = function () { return this._data };\r\n-        var propsDef = {};\r\n-        propsDef.get = function () { return this._props };\r\n-        {\r\n-            dataDef.set = function () {\r\n-                warn(\r\n-                    'Avoid replacing instance root $data. ' +\r\n-                    'Use nested data properties instead.',\r\n-                    this\r\n-                );\r\n-            };\r\n-            propsDef.set = function () {\r\n-                warn(\"$props is readonly.\", this);\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue.prototype, '$data', dataDef);\r\n-        Object.defineProperty(Vue.prototype, '$props', propsDef);\r\n-\r\n-        Vue.prototype.$set = set;\r\n-        Vue.prototype.$delete = del;\r\n-\r\n-        Vue.prototype.$watch = function (\r\n-            expOrFn,\r\n-            cb,\r\n-            options\r\n-        ) {\r\n-            var vm = this;\r\n-            if (isPlainObject(cb)) {\r\n-                return createWatcher(vm, expOrFn, cb, options)\r\n-            }\r\n-            options = options || {};\r\n-            options.user = true;\r\n-            var watcher = new Watcher(vm, expOrFn, cb, options);\r\n-            if (options.immediate) {\r\n-                try {\r\n-                    cb.call(vm, watcher.value);\r\n-                } catch (error) {\r\n-                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\r\n-                }\r\n-            }\r\n-            return function unwatchFn () {\r\n-                watcher.teardown();\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid$3 = 0;\r\n-\r\n-    function initMixin (Vue) {\r\n-        Vue.prototype._init = function (options) {\r\n-            var vm = this;\r\n-            \u002F\u002F a uid\r\n-            vm._uid = uid$3++;\r\n-\r\n-            var startTag, endTag;\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                startTag = \"vue-perf-start:\" + (vm._uid);\r\n-                endTag = \"vue-perf-end:\" + (vm._uid);\r\n-                mark(startTag);\r\n-            }\r\n-\r\n-            \u002F\u002F a flag to avoid this being observed\r\n-            vm._isVue = true;\r\n-            \u002F\u002F merge options\r\n-            if (options && options._isComponent) {\r\n-                \u002F\u002F optimize internal component instantiation\r\n-                \u002F\u002F since dynamic options merging is pretty slow, and none of the\r\n-                \u002F\u002F internal component options needs special treatment.\r\n-                initInternalComponent(vm, options);\r\n-            } else {\r\n-                vm.$options = mergeOptions(\r\n-                    resolveConstructorOptions(vm.constructor),\r\n-                    options || {},\r\n-                    vm\r\n-                );\r\n-            }\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                initProxy(vm);\r\n-            }\r\n-            \u002F\u002F expose real self\r\n-            vm._self = vm;\r\n-            initLifecycle(vm);\r\n-            initEvents(vm);\r\n-            initRender(vm);\r\n-            callHook(vm, 'beforeCreate');\r\n-            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\r\n-            initState(vm);\r\n-            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\r\n-            callHook(vm, 'created');\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                vm._name = formatComponentName(vm, false);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\r\n-            }\r\n-\r\n-            if (vm.$options.el) {\r\n-                vm.$mount(vm.$options.el);\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function initInternalComponent (vm, options) {\r\n-        var opts = vm.$options = Object.create(vm.constructor.options);\r\n-        \u002F\u002F doing this because it's faster than dynamic enumeration.\r\n-        var parentVnode = options._parentVnode;\r\n-        opts.parent = options.parent;\r\n-        opts._parentVnode = parentVnode;\r\n-\r\n-        var vnodeComponentOptions = parentVnode.componentOptions;\r\n-        opts.propsData = vnodeComponentOptions.propsData;\r\n-        opts._parentListeners = vnodeComponentOptions.listeners;\r\n-        opts._renderChildren = vnodeComponentOptions.children;\r\n-        opts._componentTag = vnodeComponentOptions.tag;\r\n-\r\n-        if (options.render) {\r\n-            opts.render = options.render;\r\n-            opts.staticRenderFns = options.staticRenderFns;\r\n-        }\r\n-    }\r\n-\r\n-    function resolveConstructorOptions (Ctor) {\r\n-        var options = Ctor.options;\r\n-        if (Ctor.super) {\r\n-            var superOptions = resolveConstructorOptions(Ctor.super);\r\n-            var cachedSuperOptions = Ctor.superOptions;\r\n-            if (superOptions !== cachedSuperOptions) {\r\n-                \u002F\u002F super option changed,\r\n-                \u002F\u002F need to resolve new options.\r\n-                Ctor.superOptions = superOptions;\r\n-                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\r\n-                var modifiedOptions = resolveModifiedOptions(Ctor);\r\n-                \u002F\u002F update base extend options\r\n-                if (modifiedOptions) {\r\n-                    extend(Ctor.extendOptions, modifiedOptions);\r\n-                }\r\n-                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\r\n-                if (options.name) {\r\n-                    options.components[options.name] = Ctor;\r\n-                }\r\n-            }\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    function resolveModifiedOptions (Ctor) {\r\n-        var modified;\r\n-        var latest = Ctor.options;\r\n-        var sealed = Ctor.sealedOptions;\r\n-        for (var key in latest) {\r\n-            if (latest[key] !== sealed[key]) {\r\n-                if (!modified) { modified = {}; }\r\n-                modified[key] = latest[key];\r\n-            }\r\n-        }\r\n-        return modified\r\n-    }\r\n-\r\n-    function Vue (options) {\r\n-        if (!(this instanceof Vue)\r\n-        ) {\r\n-            warn('Vue is a constructor and should be called with the `new` keyword');\r\n-        }\r\n-        this._init(options);\r\n-    }\r\n-\r\n-    initMixin(Vue);\r\n-    stateMixin(Vue);\r\n-    eventsMixin(Vue);\r\n-    lifecycleMixin(Vue);\r\n-    renderMixin(Vue);\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initUse (Vue) {\r\n-        Vue.use = function (plugin) {\r\n-            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\r\n-            if (installedPlugins.indexOf(plugin) > -1) {\r\n-                return this\r\n-            }\r\n-\r\n-            \u002F\u002F additional parameters\r\n-            var args = toArray(arguments, 1);\r\n-            args.unshift(this);\r\n-            if (typeof plugin.install === 'function') {\r\n-                plugin.install.apply(plugin, args);\r\n-            } else if (typeof plugin === 'function') {\r\n-                plugin.apply(null, args);\r\n-            }\r\n-            installedPlugins.push(plugin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initMixin$1 (Vue) {\r\n-        Vue.mixin = function (mixin) {\r\n-            this.options = mergeOptions(this.options, mixin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initExtend (Vue) {\r\n-        \u002F**\r\n-         * Each instance constructor, including Vue, has a unique\r\n-         * cid. This enables us to create wrapped \"child\r\n-         * constructors\" for prototypal inheritance and cache them.\r\n-         *\u002F\r\n-        Vue.cid = 0;\r\n-        var cid = 1;\r\n-\r\n-        \u002F**\r\n-         * Class inheritance\r\n-         *\u002F\r\n-        Vue.extend = function (extendOptions) {\r\n-            extendOptions = extendOptions || {};\r\n-            var Super = this;\r\n-            var SuperId = Super.cid;\r\n-            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\r\n-            if (cachedCtors[SuperId]) {\r\n-                return cachedCtors[SuperId]\r\n-            }\r\n-\r\n-            var name = extendOptions.name || Super.options.name;\r\n-            if (name) {\r\n-                validateComponentName(name);\r\n-            }\r\n-\r\n-            var Sub = function VueComponent (options) {\r\n-                this._init(options);\r\n-            };\r\n-            Sub.prototype = Object.create(Super.prototype);\r\n-            Sub.prototype.constructor = Sub;\r\n-            Sub.cid = cid++;\r\n-            Sub.options = mergeOptions(\r\n-                Super.options,\r\n-                extendOptions\r\n-            );\r\n-            Sub['super'] = Super;\r\n-\r\n-            \u002F\u002F For props and computed properties, we define the proxy getters on\r\n-            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\r\n-            \u002F\u002F avoids Object.defineProperty calls for each instance created.\r\n-            if (Sub.options.props) {\r\n-                initProps$1(Sub);\r\n-            }\r\n-            if (Sub.options.computed) {\r\n-                initComputed$1(Sub);\r\n-            }\r\n-\r\n-            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\r\n-            Sub.extend = Super.extend;\r\n-            Sub.mixin = Super.mixin;\r\n-            Sub.use = Super.use;\r\n-\r\n-            \u002F\u002F create asset registers, so extended classes\r\n-            \u002F\u002F can have their private assets too.\r\n-            ASSET_TYPES.forEach(function (type) {\r\n-                Sub[type] = Super[type];\r\n-            });\r\n-            \u002F\u002F enable recursive self-lookup\r\n-            if (name) {\r\n-                Sub.options.components[name] = Sub;\r\n-            }\r\n-\r\n-            \u002F\u002F keep a reference to the super options at extension time.\r\n-            \u002F\u002F later at instantiation we can check if Super's options have\r\n-            \u002F\u002F been updated.\r\n-            Sub.superOptions = Super.options;\r\n-            Sub.extendOptions = extendOptions;\r\n-            Sub.sealedOptions = extend({}, Sub.options);\r\n-\r\n-            \u002F\u002F cache constructor\r\n-            cachedCtors[SuperId] = Sub;\r\n-            return Sub\r\n-        };\r\n-    }\r\n-\r\n-    function initProps$1 (Comp) {\r\n-        var props = Comp.options.props;\r\n-        for (var key in props) {\r\n-            proxy(Comp.prototype, \"_props\", key);\r\n-        }\r\n-    }\r\n-\r\n-    function initComputed$1 (Comp) {\r\n-        var computed = Comp.options.computed;\r\n-        for (var key in computed) {\r\n-            defineComputed(Comp.prototype, key, computed[key]);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initAssetRegisters (Vue) {\r\n-        \u002F**\r\n-         * Create asset registration methods.\r\n-         *\u002F\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue[type] = function (\r\n-                id,\r\n-                definition\r\n-            ) {\r\n-                if (!definition) {\r\n-                    return this.options[type + 's'][id]\r\n-                } else {\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (type === 'component') {\r\n-                        validateComponentName(id);\r\n-                    }\r\n-                    if (type === 'component' && isPlainObject(definition)) {\r\n-                        definition.name = definition.name || id;\r\n-                        definition = this.options._base.extend(definition);\r\n-                    }\r\n-                    if (type === 'directive' && typeof definition === 'function') {\r\n-                        definition = { bind: definition, update: definition };\r\n-                    }\r\n-                    this.options[type + 's'][id] = definition;\r\n-                    return definition\r\n-                }\r\n-            };\r\n-        });\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function getComponentName (opts) {\r\n-        return opts && (opts.Ctor.options.name || opts.tag)\r\n-    }\r\n-\r\n-    function matches (pattern, name) {\r\n-        if (Array.isArray(pattern)) {\r\n-            return pattern.indexOf(name) > -1\r\n-        } else if (typeof pattern === 'string') {\r\n-            return pattern.split(',').indexOf(name) > -1\r\n-        } else if (isRegExp(pattern)) {\r\n-            return pattern.test(name)\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return false\r\n-    }\r\n-\r\n-    function pruneCache (keepAliveInstance, filter) {\r\n-        var cache = keepAliveInstance.cache;\r\n-        var keys = keepAliveInstance.keys;\r\n-        var _vnode = keepAliveInstance._vnode;\r\n-        for (var key in cache) {\r\n-            var cachedNode = cache[key];\r\n-            if (cachedNode) {\r\n-                var name = getComponentName(cachedNode.componentOptions);\r\n-                if (name && !filter(name)) {\r\n-                    pruneCacheEntry(cache, key, keys, _vnode);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function pruneCacheEntry (\r\n-        cache,\r\n-        key,\r\n-        keys,\r\n-        current\r\n-    ) {\r\n-        var cached$$1 = cache[key];\r\n-        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\r\n-            cached$$1.componentInstance.$destroy();\r\n-        }\r\n-        cache[key] = null;\r\n-        remove(keys, key);\r\n-    }\r\n-\r\n-    var patternTypes = [String, RegExp, Array];\r\n-\r\n-    var KeepAlive = {\r\n-        name: 'keep-alive',\r\n-        abstract: true,\r\n-\r\n-        props: {\r\n-            include: patternTypes,\r\n-            exclude: patternTypes,\r\n-            max: [String, Number]\r\n-        },\r\n-\r\n-        created: function created () {\r\n-            this.cache = Object.create(null);\r\n-            this.keys = [];\r\n-        },\r\n-\r\n-        destroyed: function destroyed () {\r\n-            for (var key in this.cache) {\r\n-                pruneCacheEntry(this.cache, key, this.keys);\r\n-            }\r\n-        },\r\n-\r\n-        mounted: function mounted () {\r\n-            var this$1 = this;\r\n-\r\n-            this.$watch('include', function (val) {\r\n-                pruneCache(this$1, function (name) { return matches(val, name); });\r\n-            });\r\n-            this.$watch('exclude', function (val) {\r\n-                pruneCache(this$1, function (name) { return !matches(val, name); });\r\n-            });\r\n-        },\r\n-\r\n-        render: function render () {\r\n-            var slot = this.$slots.default;\r\n-            var vnode = getFirstComponentChild(slot);\r\n-            var componentOptions = vnode && vnode.componentOptions;\r\n-            if (componentOptions) {\r\n-                \u002F\u002F check pattern\r\n-                var name = getComponentName(componentOptions);\r\n-                var ref = this;\r\n-                var include = ref.include;\r\n-                var exclude = ref.exclude;\r\n-                if (\r\n-                    \u002F\u002F not included\r\n-                (include && (!name || !matches(include, name))) ||\r\n-                \u002F\u002F excluded\r\n-                (exclude && name && matches(exclude, name))\r\n-                ) {\r\n-                    return vnode\r\n-                }\r\n-\r\n-                var ref$1 = this;\r\n-                var cache = ref$1.cache;\r\n-                var keys = ref$1.keys;\r\n-                var key = vnode.key == null\r\n-                    \u002F\u002F same constructor may get registered as different local components\r\n-                    \u002F\u002F so cid alone is not enough (#3269)\r\n-                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\r\n-                    : vnode.key;\r\n-                if (cache[key]) {\r\n-                    vnode.componentInstance = cache[key].componentInstance;\r\n-                    \u002F\u002F make current key freshest\r\n-                    remove(keys, key);\r\n-                    keys.push(key);\r\n-                } else {\r\n-                    cache[key] = vnode;\r\n-                    keys.push(key);\r\n-                    \u002F\u002F prune oldest entry\r\n-                    if (this.max && keys.length > parseInt(this.max)) {\r\n-                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.data.keepAlive = true;\r\n-            }\r\n-            return vnode || (slot && slot[0])\r\n-        }\r\n-    };\r\n-\r\n-    var builtInComponents = {\r\n-        KeepAlive: KeepAlive\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initGlobalAPI (Vue) {\r\n-        \u002F\u002F config\r\n-        var configDef = {};\r\n-        configDef.get = function () { return config; };\r\n-        {\r\n-            configDef.set = function () {\r\n-                warn(\r\n-                    'Do not replace the Vue.config object, set individual fields instead.'\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue, 'config', configDef);\r\n-\r\n-        \u002F\u002F exposed util methods.\r\n-        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\r\n-        \u002F\u002F them unless you are aware of the risk.\r\n-        Vue.util = {\r\n-            warn: warn,\r\n-            extend: extend,\r\n-            mergeOptions: mergeOptions,\r\n-            defineReactive: defineReactive$$1\r\n-        };\r\n-\r\n-        Vue.set = set;\r\n-        Vue.delete = del;\r\n-        Vue.nextTick = nextTick;\r\n-\r\n-        \u002F\u002F 2.6 explicit observable API\r\n-        Vue.observable = function (obj) {\r\n-            observe(obj);\r\n-            return obj\r\n-        };\r\n-\r\n-        Vue.options = Object.create(null);\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue.options[type + 's'] = Object.create(null);\r\n-        });\r\n-\r\n-        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\r\n-        \u002F\u002F components with in Weex's multi-instance scenarios.\r\n-        Vue.options._base = Vue;\r\n-\r\n-        extend(Vue.options.components, builtInComponents);\r\n-\r\n-        initUse(Vue);\r\n-        initMixin$1(Vue);\r\n-        initExtend(Vue);\r\n-        initAssetRegisters(Vue);\r\n-    }\r\n-\r\n-    initGlobalAPI(Vue);\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$isServer', {\r\n-        get: isServerRendering\r\n-    });\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$ssrContext', {\r\n-        get: function get () {\r\n-          \u002F* istanbul ignore next *\u002F\r\n-            return this.$vnode && this.$vnode.ssrContext\r\n-        }\r\n-    });\r\n-\r\n-    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\r\n-    Object.defineProperty(Vue, 'FunctionalRenderContext', {\r\n-        value: FunctionalRenderContext\r\n-    });\r\n-\r\n-    Vue.version = '2.6.10';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F these are reserved for web because they are directly compiled away\r\n-    \u002F\u002F during template compilation\r\n-    var isReservedAttr = makeMap('style,class');\r\n-\r\n-    \u002F\u002F attributes that should be using props for binding\r\n-    var acceptValue = makeMap('input,textarea,option,select,progress');\r\n-    var mustUseProp = function (tag, type, attr) {\r\n-        return (\r\n-            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\r\n-            (attr === 'selected' && tag === 'option') ||\r\n-            (attr === 'checked' && tag === 'input') ||\r\n-            (attr === 'muted' && tag === 'video')\r\n-        )\r\n-    };\r\n-\r\n-    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\r\n-\r\n-    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\r\n-\r\n-    var convertEnumeratedValue = function (key, value) {\r\n-        return isFalsyAttrValue(value) || value === 'false'\r\n-            ? 'false'\r\n-            \u002F\u002F allow arbitrary string value for contenteditable\r\n-            : key === 'contenteditable' && isValidContentEditableValue(value)\r\n-                ? value\r\n-                : 'true'\r\n-    };\r\n-\r\n-    var isBooleanAttr = makeMap(\r\n-        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\r\n-        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\r\n-        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\r\n-        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\r\n-        'required,reversed,scoped,seamless,selected,sortable,translate,' +\r\n-        'truespeed,typemustmatch,visible'\r\n-    );\r\n-\r\n-    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\r\n-\r\n-    var isXlink = function (name) {\r\n-        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\r\n-    };\r\n-\r\n-    var getXlinkProp = function (name) {\r\n-        return isXlink(name) ? name.slice(6, name.length) : ''\r\n-    };\r\n-\r\n-    var isFalsyAttrValue = function (val) {\r\n-        return val == null || val === false\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function genClassForVnode (vnode) {\r\n-        var data = vnode.data;\r\n-        var parentNode = vnode;\r\n-        var childNode = vnode;\r\n-        while (isDef(childNode.componentInstance)) {\r\n-            childNode = childNode.componentInstance._vnode;\r\n-            if (childNode && childNode.data) {\r\n-                data = mergeClassData(childNode.data, data);\r\n-            }\r\n-        }\r\n-        while (isDef(parentNode = parentNode.parent)) {\r\n-            if (parentNode && parentNode.data) {\r\n-                data = mergeClassData(data, parentNode.data);\r\n-            }\r\n-        }\r\n-        return renderClass(data.staticClass, data.class)\r\n-    }\r\n-\r\n-    function mergeClassData (child, parent) {\r\n-        return {\r\n-            staticClass: concat(child.staticClass, parent.staticClass),\r\n-            class: isDef(child.class)\r\n-                ? [child.class, parent.class]\r\n-                : parent.class\r\n-        }\r\n-    }\r\n-\r\n-    function renderClass (\r\n-        staticClass,\r\n-        dynamicClass\r\n-    ) {\r\n-        if (isDef(staticClass) || isDef(dynamicClass)) {\r\n-            return concat(staticClass, stringifyClass(dynamicClass))\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function concat (a, b) {\r\n-        return a ? b ? (a + ' ' + b) : a : (b || '')\r\n-    }\r\n-\r\n-    function stringifyClass (value) {\r\n-        if (Array.isArray(value)) {\r\n-            return stringifyArray(value)\r\n-        }\r\n-        if (isObject(value)) {\r\n-            return stringifyObject(value)\r\n-        }\r\n-        if (typeof value === 'string') {\r\n-            return value\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function stringifyArray (value) {\r\n-        var res = '';\r\n-        var stringified;\r\n-        for (var i = 0, l = value.length; i \u003C l; i++) {\r\n-            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\r\n-                if (res) { res += ' '; }\r\n-                res += stringified;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function stringifyObject (value) {\r\n-        var res = '';\r\n-        for (var key in value) {\r\n-            if (value[key]) {\r\n-                if (res) { res += ' '; }\r\n-                res += key;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var namespaceMap = {\r\n-        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\r\n-        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\r\n-    };\r\n-\r\n-    var isHTMLTag = makeMap(\r\n-        'html,body,base,head,link,meta,style,title,' +\r\n-        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\r\n-        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\r\n-        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\r\n-        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\r\n-        'embed,object,param,source,canvas,script,noscript,del,ins,' +\r\n-        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\r\n-        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\r\n-        'output,progress,select,textarea,' +\r\n-        'details,dialog,menu,menuitem,summary,' +\r\n-        'content,element,shadow,template,blockquote,iframe,tfoot'\r\n-    );\r\n-\r\n-    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\r\n-    \u002F\u002F contain child elements.\r\n-    var isSVG = makeMap(\r\n-        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\r\n-        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\r\n-        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\r\n-        true\r\n-    );\r\n-\r\n-    var isPreTag = function (tag) { return tag === 'pre'; };\r\n-\r\n-    var isReservedTag = function (tag) {\r\n-        return isHTMLTag(tag) || isSVG(tag)\r\n-    };\r\n-\r\n-    function getTagNamespace (tag) {\r\n-        if (isSVG(tag)) {\r\n-            return 'svg'\r\n-        }\r\n-        \u002F\u002F basic support for MathML\r\n-        \u002F\u002F note it doesn't support other MathML elements being component roots\r\n-        if (tag === 'math') {\r\n-            return 'math'\r\n-        }\r\n-    }\r\n-\r\n-    var unknownElementCache = Object.create(null);\r\n-    function isUnknownElement (tag) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!inBrowser) {\r\n-            return true\r\n-        }\r\n-        if (isReservedTag(tag)) {\r\n-            return false\r\n-        }\r\n-        tag = tag.toLowerCase();\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (unknownElementCache[tag] != null) {\r\n-            return unknownElementCache[tag]\r\n-        }\r\n-        var el = document.createElement(tag);\r\n-        if (tag.indexOf('-') > -1) {\r\n-            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\r\n-            return (unknownElementCache[tag] = (\r\n-                el.constructor === window.HTMLUnknownElement ||\r\n-                el.constructor === window.HTMLElement\r\n-            ))\r\n-        } else {\r\n-            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\r\n-        }\r\n-    }\r\n-\r\n-    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Query an element selector if it's not an element already.\r\n-     *\u002F\r\n-    function query (el) {\r\n-        if (typeof el === 'string') {\r\n-            var selected = document.querySelector(el);\r\n-            if (!selected) {\r\n-                warn(\r\n-                    'Cannot find element: ' + el\r\n-                );\r\n-                return document.createElement('div')\r\n-            }\r\n-            return selected\r\n-        } else {\r\n-            return el\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createElement$1 (tagName, vnode) {\r\n-        var elm = document.createElement(tagName);\r\n-        if (tagName !== 'select') {\r\n-            return elm\r\n-        }\r\n-        \u002F\u002F false or null will remove the attribute but undefined will not\r\n-        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\r\n-            elm.setAttribute('multiple', 'multiple');\r\n-        }\r\n-        return elm\r\n-    }\r\n-\r\n-    function createElementNS (namespace, tagName) {\r\n-        return document.createElementNS(namespaceMap[namespace], tagName)\r\n-    }\r\n-\r\n-    function createTextNode (text) {\r\n-        return document.createTextNode(text)\r\n-    }\r\n-\r\n-    function createComment (text) {\r\n-        return document.createComment(text)\r\n-    }\r\n-\r\n-    function insertBefore (parentNode, newNode, referenceNode) {\r\n-        parentNode.insertBefore(newNode, referenceNode);\r\n-    }\r\n-\r\n-    function removeChild (node, child) {\r\n-        node.removeChild(child);\r\n-    }\r\n-\r\n-    function appendChild (node, child) {\r\n-        node.appendChild(child);\r\n-    }\r\n-\r\n-    function parentNode (node) {\r\n-        return node.parentNode\r\n-    }\r\n-\r\n-    function nextSibling (node) {\r\n-        return node.nextSibling\r\n-    }\r\n-\r\n-    function tagName (node) {\r\n-        return node.tagName\r\n-    }\r\n-\r\n-    function setTextContent (node, text) {\r\n-        node.textContent = text;\r\n-    }\r\n-\r\n-    function setStyleScope (node, scopeId) {\r\n-        node.setAttribute(scopeId, '');\r\n-    }\r\n-\r\n-    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\r\n-        createElement: createElement$1,\r\n-        createElementNS: createElementNS,\r\n-        createTextNode: createTextNode,\r\n-        createComment: createComment,\r\n-        insertBefore: insertBefore,\r\n-        removeChild: removeChild,\r\n-        appendChild: appendChild,\r\n-        parentNode: parentNode,\r\n-        nextSibling: nextSibling,\r\n-        tagName: tagName,\r\n-        setTextContent: setTextContent,\r\n-        setStyleScope: setStyleScope\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref = {\r\n-        create: function create (_, vnode) {\r\n-            registerRef(vnode);\r\n-        },\r\n-        update: function update (oldVnode, vnode) {\r\n-            if (oldVnode.data.ref !== vnode.data.ref) {\r\n-                registerRef(oldVnode, true);\r\n-                registerRef(vnode);\r\n-            }\r\n-        },\r\n-        destroy: function destroy (vnode) {\r\n-            registerRef(vnode, true);\r\n-        }\r\n-    };\r\n-\r\n-    function registerRef (vnode, isRemoval) {\r\n-        var key = vnode.data.ref;\r\n-        if (!isDef(key)) { return }\r\n-\r\n-        var vm = vnode.context;\r\n-        var ref = vnode.componentInstance || vnode.elm;\r\n-        var refs = vm.$refs;\r\n-        if (isRemoval) {\r\n-            if (Array.isArray(refs[key])) {\r\n-                remove(refs[key], ref);\r\n-            } else if (refs[key] === ref) {\r\n-                refs[key] = undefined;\r\n-            }\r\n-        } else {\r\n-            if (vnode.data.refInFor) {\r\n-                if (!Array.isArray(refs[key])) {\r\n-                    refs[key] = [ref];\r\n-                } else if (refs[key].indexOf(ref) \u003C 0) {\r\n-                    \u002F\u002F $flow-disable-line\r\n-                    refs[key].push(ref);\r\n-                }\r\n-            } else {\r\n-                refs[key] = ref;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Virtual DOM patching algorithm based on Snabbdom by\r\n-     * Simon Friis Vindum (@paldepind)\r\n-     * Licensed under the MIT License\r\n-     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\r\n-     *\r\n-     * modified by Evan You (@yyx990803)\r\n-     *\r\n-     * Not type-checking this because this file is perf-critical and the cost\r\n-     * of making flow understand it is not worth it.\r\n-     *\u002F\r\n-\r\n-    var emptyNode = new VNode('', {}, []);\r\n-\r\n-    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\r\n-\r\n-    function sameVnode (a, b) {\r\n-        return (\r\n-            a.key === b.key && (\r\n-                (\r\n-                    a.tag === b.tag &&\r\n-                    a.isComment === b.isComment &&\r\n-                    isDef(a.data) === isDef(b.data) &&\r\n-                    sameInputType(a, b)\r\n-                ) || (\r\n-                    isTrue(a.isAsyncPlaceholder) &&\r\n-                    a.asyncFactory === b.asyncFactory &&\r\n-                    isUndef(b.asyncFactory.error)\r\n-                )\r\n-            )\r\n-        )\r\n-    }\r\n-\r\n-    function sameInputType (a, b) {\r\n-        if (a.tag !== 'input') { return true }\r\n-        var i;\r\n-        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\r\n-        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\r\n-        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\r\n-    }\r\n-\r\n-    function createKeyToOldIdx (children, beginIdx, endIdx) {\r\n-        var i, key;\r\n-        var map = {};\r\n-        for (i = beginIdx; i \u003C= endIdx; ++i) {\r\n-            key = children[i].key;\r\n-            if (isDef(key)) { map[key] = i; }\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    function createPatchFunction (backend) {\r\n-        var i, j;\r\n-        var cbs = {};\r\n-\r\n-        var modules = backend.modules;\r\n-        var nodeOps = backend.nodeOps;\r\n-\r\n-        for (i = 0; i \u003C hooks.length; ++i) {\r\n-            cbs[hooks[i]] = [];\r\n-            for (j = 0; j \u003C modules.length; ++j) {\r\n-                if (isDef(modules[j][hooks[i]])) {\r\n-                    cbs[hooks[i]].push(modules[j][hooks[i]]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function emptyNodeAt (elm) {\r\n-            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\r\n-        }\r\n-\r\n-        function createRmCb (childElm, listeners) {\r\n-            function remove$$1 () {\r\n-                if (--remove$$1.listeners === 0) {\r\n-                    removeNode(childElm);\r\n-                }\r\n-            }\r\n-            remove$$1.listeners = listeners;\r\n-            return remove$$1\r\n-        }\r\n-\r\n-        function removeNode (el) {\r\n-            var parent = nodeOps.parentNode(el);\r\n-            \u002F\u002F element may have already been removed due to v-html \u002F v-text\r\n-            if (isDef(parent)) {\r\n-                nodeOps.removeChild(parent, el);\r\n-            }\r\n-        }\r\n-\r\n-        function isUnknownElement$$1 (vnode, inVPre) {\r\n-            return (\r\n-                !inVPre &&\r\n-                !vnode.ns &&\r\n-                !(\r\n-                    config.ignoredElements.length &&\r\n-                    config.ignoredElements.some(function (ignore) {\r\n-                        return isRegExp(ignore)\r\n-                            ? ignore.test(vnode.tag)\r\n-                            : ignore === vnode.tag\r\n-                    })\r\n-                ) &&\r\n-                config.isUnknownElement(vnode.tag)\r\n-            )\r\n-        }\r\n-\r\n-        var creatingElmInVPre = 0;\r\n-\r\n-        function createElm (\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            parentElm,\r\n-            refElm,\r\n-            nested,\r\n-            ownerArray,\r\n-            index\r\n-        ) {\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F This vnode was used in a previous render!\r\n-                \u002F\u002F now it's used as a new node, overwriting its elm would cause\r\n-                \u002F\u002F potential patch errors down the road when it's used as an insertion\r\n-                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\r\n-                \u002F\u002F associated DOM element for it.\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\r\n-            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\r\n-                return\r\n-            }\r\n-\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            var tag = vnode.tag;\r\n-            if (isDef(tag)) {\r\n-                {\r\n-                    if (data && data.pre) {\r\n-                        creatingElmInVPre++;\r\n-                    }\r\n-                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\r\n-                        warn(\r\n-                            'Unknown custom element: \u003C' + tag + '> - did you ' +\r\n-                            'register the component correctly? For recursive components, ' +\r\n-                            'make sure to provide the \"name\" option.',\r\n-                            vnode.context\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.elm = vnode.ns\r\n-                    ? nodeOps.createElementNS(vnode.ns, tag)\r\n-                    : nodeOps.createElement(tag, vnode);\r\n-                setScope(vnode);\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                {\r\n-                    createChildren(vnode, children, insertedVnodeQueue);\r\n-                    if (isDef(data)) {\r\n-                        invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                    }\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                }\r\n-\r\n-                if (data && data.pre) {\r\n-                    creatingElmInVPre--;\r\n-                }\r\n-            } else if (isTrue(vnode.isComment)) {\r\n-                vnode.elm = nodeOps.createComment(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            } else {\r\n-                vnode.elm = nodeOps.createTextNode(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            }\r\n-        }\r\n-\r\n-        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i = vnode.data;\r\n-            if (isDef(i)) {\r\n-                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\r\n-                if (isDef(i = i.hook) && isDef(i = i.init)) {\r\n-                    i(vnode, false \u002F* hydrating *\u002F);\r\n-                }\r\n-                \u002F\u002F after calling the init hook, if the vnode is a child component\r\n-                \u002F\u002F it should've created a child instance and mounted it. the child\r\n-                \u002F\u002F component also has set the placeholder vnode's elm.\r\n-                \u002F\u002F in that case we can just return the element and be done.\r\n-                if (isDef(vnode.componentInstance)) {\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                    if (isTrue(isReactivated)) {\r\n-                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\r\n-                    }\r\n-                    return true\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function initComponent (vnode, insertedVnodeQueue) {\r\n-            if (isDef(vnode.data.pendingInsert)) {\r\n-                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\r\n-                vnode.data.pendingInsert = null;\r\n-            }\r\n-            vnode.elm = vnode.componentInstance.$el;\r\n-            if (isPatchable(vnode)) {\r\n-                invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                setScope(vnode);\r\n-            } else {\r\n-                \u002F\u002F empty component root.\r\n-                \u002F\u002F skip all element-related modules except for ref (#3455)\r\n-                registerRef(vnode);\r\n-                \u002F\u002F make sure to invoke the insert hook\r\n-                insertedVnodeQueue.push(vnode);\r\n-            }\r\n-        }\r\n-\r\n-        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i;\r\n-            \u002F\u002F hack for #4339: a reactivated component with inner transition\r\n-            \u002F\u002F does not trigger because the inner node's created hooks are not called\r\n-            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\r\n-            \u002F\u002F there doesn't seem to be a better way to do it.\r\n-            var innerNode = vnode;\r\n-            while (innerNode.componentInstance) {\r\n-                innerNode = innerNode.componentInstance._vnode;\r\n-                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\r\n-                    for (i = 0; i \u003C cbs.activate.length; ++i) {\r\n-                        cbs.activate[i](emptyNode, innerNode);\r\n-                    }\r\n-                    insertedVnodeQueue.push(innerNode);\r\n-                    break\r\n-                }\r\n-            }\r\n-            \u002F\u002F unlike a newly created component,\r\n-            \u002F\u002F a reactivated keep-alive component doesn't insert itself\r\n-            insert(parentElm, vnode.elm, refElm);\r\n-        }\r\n-\r\n-        function insert (parent, elm, ref$$1) {\r\n-            if (isDef(parent)) {\r\n-                if (isDef(ref$$1)) {\r\n-                    if (nodeOps.parentNode(ref$$1) === parent) {\r\n-                        nodeOps.insertBefore(parent, elm, ref$$1);\r\n-                    }\r\n-                } else {\r\n-                    nodeOps.appendChild(parent, elm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function createChildren (vnode, children, insertedVnodeQueue) {\r\n-            if (Array.isArray(children)) {\r\n-                {\r\n-                    checkDuplicateKeys(children);\r\n-                }\r\n-                for (var i = 0; i \u003C children.length; ++i) {\r\n-                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\r\n-                }\r\n-            } else if (isPrimitive(vnode.text)) {\r\n-                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\r\n-            }\r\n-        }\r\n-\r\n-        function isPatchable (vnode) {\r\n-            while (vnode.componentInstance) {\r\n-                vnode = vnode.componentInstance._vnode;\r\n-            }\r\n-            return isDef(vnode.tag)\r\n-        }\r\n-\r\n-        function invokeCreateHooks (vnode, insertedVnodeQueue) {\r\n-            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                cbs.create[i$1](emptyNode, vnode);\r\n-            }\r\n-            i = vnode.data.hook; \u002F\u002F Reuse variable\r\n-            if (isDef(i)) {\r\n-                if (isDef(i.create)) { i.create(emptyNode, vnode); }\r\n-                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F set scope id attribute for scoped CSS.\r\n-        \u002F\u002F this is implemented as a special case to avoid the overhead\r\n-        \u002F\u002F of going through the normal attribute patching process.\r\n-        function setScope (vnode) {\r\n-            var i;\r\n-            if (isDef(i = vnode.fnScopeId)) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            } else {\r\n-                var ancestor = vnode;\r\n-                while (ancestor) {\r\n-                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\r\n-                        nodeOps.setStyleScope(vnode.elm, i);\r\n-                    }\r\n-                    ancestor = ancestor.parent;\r\n-                }\r\n-            }\r\n-            \u002F\u002F for slot content they should also get the scopeId from the host instance.\r\n-            if (isDef(i = activeInstance) &&\r\n-                i !== vnode.context &&\r\n-                i !== vnode.fnContext &&\r\n-                isDef(i = i.$options._scopeId)\r\n-            ) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            }\r\n-        }\r\n-\r\n-        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function invokeDestroyHook (vnode) {\r\n-            var i, j;\r\n-            var data = vnode.data;\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\r\n-                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\r\n-            }\r\n-            if (isDef(i = vnode.children)) {\r\n-                for (j = 0; j \u003C vnode.children.length; ++j) {\r\n-                    invokeDestroyHook(vnode.children[j]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                var ch = vnodes[startIdx];\r\n-                if (isDef(ch)) {\r\n-                    if (isDef(ch.tag)) {\r\n-                        removeAndInvokeRemoveHook(ch);\r\n-                        invokeDestroyHook(ch);\r\n-                    } else { \u002F\u002F Text node\r\n-                        removeNode(ch.elm);\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeAndInvokeRemoveHook (vnode, rm) {\r\n-            if (isDef(rm) || isDef(vnode.data)) {\r\n-                var i;\r\n-                var listeners = cbs.remove.length + 1;\r\n-                if (isDef(rm)) {\r\n-                    \u002F\u002F we have a recursively passed down rm callback\r\n-                    \u002F\u002F increase the listeners count\r\n-                    rm.listeners += listeners;\r\n-                } else {\r\n-                    \u002F\u002F directly removing\r\n-                    rm = createRmCb(vnode.elm, listeners);\r\n-                }\r\n-                \u002F\u002F recursively invoke hooks on child component root node\r\n-                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\r\n-                    removeAndInvokeRemoveHook(i, rm);\r\n-                }\r\n-                for (i = 0; i \u003C cbs.remove.length; ++i) {\r\n-                    cbs.remove[i](vnode, rm);\r\n-                }\r\n-                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\r\n-                    i(vnode, rm);\r\n-                } else {\r\n-                    rm();\r\n-                }\r\n-            } else {\r\n-                removeNode(vnode.elm);\r\n-            }\r\n-        }\r\n-\r\n-        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\r\n-            var oldStartIdx = 0;\r\n-            var newStartIdx = 0;\r\n-            var oldEndIdx = oldCh.length - 1;\r\n-            var oldStartVnode = oldCh[0];\r\n-            var oldEndVnode = oldCh[oldEndIdx];\r\n-            var newEndIdx = newCh.length - 1;\r\n-            var newStartVnode = newCh[0];\r\n-            var newEndVnode = newCh[newEndIdx];\r\n-            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\r\n-\r\n-            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\r\n-            \u002F\u002F to ensure removed elements stay in correct relative positions\r\n-            \u002F\u002F during leaving transitions\r\n-            var canMove = !removeOnly;\r\n-\r\n-            {\r\n-                checkDuplicateKeys(newCh);\r\n-            }\r\n-\r\n-            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\r\n-                if (isUndef(oldStartVnode)) {\r\n-                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\r\n-                } else if (isUndef(oldEndVnode)) {\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newStartVnode)) {\r\n-                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else if (sameVnode(oldEndVnode, newEndVnode)) {\r\n-                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\r\n-                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\r\n-                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else {\r\n-                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\r\n-                    idxInOld = isDef(newStartVnode.key)\r\n-                        ? oldKeyToIdx[newStartVnode.key]\r\n-                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\r\n-                    if (isUndef(idxInOld)) { \u002F\u002F New element\r\n-                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                    } else {\r\n-                        vnodeToMove = oldCh[idxInOld];\r\n-                        if (sameVnode(vnodeToMove, newStartVnode)) {\r\n-                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                            oldCh[idxInOld] = undefined;\r\n-                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\r\n-                        } else {\r\n-                            \u002F\u002F same key but different element. treat as new element\r\n-                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                        }\r\n-                    }\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                }\r\n-            }\r\n-            if (oldStartIdx > oldEndIdx) {\r\n-                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\r\n-                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\r\n-            } else if (newStartIdx > newEndIdx) {\r\n-                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function checkDuplicateKeys (children) {\r\n-            var seenKeys = {};\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var vnode = children[i];\r\n-                var key = vnode.key;\r\n-                if (isDef(key)) {\r\n-                    if (seenKeys[key]) {\r\n-                        warn(\r\n-                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\r\n-                            vnode.context\r\n-                        );\r\n-                    } else {\r\n-                        seenKeys[key] = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function findIdxInOld (node, oldCh, start, end) {\r\n-            for (var i = start; i \u003C end; i++) {\r\n-                var c = oldCh[i];\r\n-                if (isDef(c) && sameVnode(node, c)) { return i }\r\n-            }\r\n-        }\r\n-\r\n-        function patchVnode (\r\n-            oldVnode,\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            ownerArray,\r\n-            index,\r\n-            removeOnly\r\n-        ) {\r\n-            if (oldVnode === vnode) {\r\n-                return\r\n-            }\r\n-\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F clone reused vnode\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            var elm = vnode.elm = oldVnode.elm;\r\n-\r\n-            if (isTrue(oldVnode.isAsyncPlaceholder)) {\r\n-                if (isDef(vnode.asyncFactory.resolved)) {\r\n-                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\r\n-                } else {\r\n-                    vnode.isAsyncPlaceholder = true;\r\n-                }\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F reuse element for static trees.\r\n-            \u002F\u002F note we only do this if the vnode is cloned -\r\n-            \u002F\u002F if the new node is not cloned it means the render functions have been\r\n-            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\r\n-            if (isTrue(vnode.isStatic) &&\r\n-                isTrue(oldVnode.isStatic) &&\r\n-                vnode.key === oldVnode.key &&\r\n-                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\r\n-            ) {\r\n-                vnode.componentInstance = oldVnode.componentInstance;\r\n-                return\r\n-            }\r\n-\r\n-            var i;\r\n-            var data = vnode.data;\r\n-            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\r\n-                i(oldVnode, vnode);\r\n-            }\r\n-\r\n-            var oldCh = oldVnode.children;\r\n-            var ch = vnode.children;\r\n-            if (isDef(data) && isPatchable(vnode)) {\r\n-                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\r\n-                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\r\n-            }\r\n-            if (isUndef(vnode.text)) {\r\n-                if (isDef(oldCh) && isDef(ch)) {\r\n-                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\r\n-                } else if (isDef(ch)) {\r\n-                    {\r\n-                        checkDuplicateKeys(ch);\r\n-                    }\r\n-                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\r\n-                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\r\n-                } else if (isDef(oldCh)) {\r\n-                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\r\n-                } else if (isDef(oldVnode.text)) {\r\n-                    nodeOps.setTextContent(elm, '');\r\n-                }\r\n-            } else if (oldVnode.text !== vnode.text) {\r\n-                nodeOps.setTextContent(elm, vnode.text);\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        function invokeInsertHook (vnode, queue, initial) {\r\n-            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\r\n-            \u002F\u002F element is really inserted\r\n-            if (isTrue(initial) && isDef(vnode.parent)) {\r\n-                vnode.parent.data.pendingInsert = queue;\r\n-            } else {\r\n-                for (var i = 0; i \u003C queue.length; ++i) {\r\n-                    queue[i].data.hook.insert(queue[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var hydrationBailed = false;\r\n-        \u002F\u002F list of modules that can skip create hook during hydration because they\r\n-        \u002F\u002F are already rendered on the client or has no need for initialization\r\n-        \u002F\u002F Note: style is excluded because it relies on initial clone for future\r\n-        \u002F\u002F deep updates (#7063).\r\n-        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\r\n-\r\n-        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\r\n-        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\r\n-            var i;\r\n-            var tag = vnode.tag;\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            inVPre = inVPre || (data && data.pre);\r\n-            vnode.elm = elm;\r\n-\r\n-            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\r\n-                vnode.isAsyncPlaceholder = true;\r\n-                return true\r\n-            }\r\n-            \u002F\u002F assert node match\r\n-            {\r\n-                if (!assertNodeMatch(elm, vnode, inVPre)) {\r\n-                    return false\r\n-                }\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\r\n-                if (isDef(i = vnode.componentInstance)) {\r\n-                    \u002F\u002F child component. it should have hydrated its own tree.\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    return true\r\n-                }\r\n-            }\r\n-            if (isDef(tag)) {\r\n-                if (isDef(children)) {\r\n-                    \u002F\u002F empty element, allow client to pick up and populate children\r\n-                    if (!elm.hasChildNodes()) {\r\n-                        createChildren(vnode, children, insertedVnodeQueue);\r\n-                    } else {\r\n-                        \u002F\u002F v-html and domProps: innerHTML\r\n-                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\r\n-                            if (i !== elm.innerHTML) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('server innerHTML: ', i);\r\n-                                    console.warn('client innerHTML: ', elm.innerHTML);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        } else {\r\n-                            \u002F\u002F iterate and compare children lists\r\n-                            var childrenMatch = true;\r\n-                            var childNode = elm.firstChild;\r\n-                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\r\n-                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\r\n-                                    childrenMatch = false;\r\n-                                    break\r\n-                                }\r\n-                                childNode = childNode.nextSibling;\r\n-                            }\r\n-                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\r\n-                            \u002F\u002F longer than the virtual children list.\r\n-                            if (!childrenMatch || childNode) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-                if (isDef(data)) {\r\n-                    var fullInvoke = false;\r\n-                    for (var key in data) {\r\n-                        if (!isRenderedModule(key)) {\r\n-                            fullInvoke = true;\r\n-                            invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                            break\r\n-                        }\r\n-                    }\r\n-                    if (!fullInvoke && data['class']) {\r\n-                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\r\n-                        traverse(data['class']);\r\n-                    }\r\n-                }\r\n-            } else if (elm.data !== vnode.text) {\r\n-                elm.data = vnode.text;\r\n-            }\r\n-            return true\r\n-        }\r\n-\r\n-        function assertNodeMatch (node, vnode, inVPre) {\r\n-            if (isDef(vnode.tag)) {\r\n-                return vnode.tag.indexOf('vue-component') === 0 || (\r\n-                        !isUnknownElement$$1(vnode, inVPre) &&\r\n-                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\r\n-                    )\r\n-            } else {\r\n-                return node.nodeType === (vnode.isComment ? 8 : 3)\r\n-            }\r\n-        }\r\n-\r\n-        return function patch (oldVnode, vnode, hydrating, removeOnly) {\r\n-            if (isUndef(vnode)) {\r\n-                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\r\n-                return\r\n-            }\r\n-\r\n-            var isInitialPatch = false;\r\n-            var insertedVnodeQueue = [];\r\n-\r\n-            if (isUndef(oldVnode)) {\r\n-                \u002F\u002F empty mount (likely as component), create new root element\r\n-                isInitialPatch = true;\r\n-                createElm(vnode, insertedVnodeQueue);\r\n-            } else {\r\n-                var isRealElement = isDef(oldVnode.nodeType);\r\n-                if (!isRealElement && sameVnode(oldVnode, vnode)) {\r\n-                    \u002F\u002F patch existing root node\r\n-                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\r\n-                } else {\r\n-                    if (isRealElement) {\r\n-                        \u002F\u002F mounting to a real element\r\n-                        \u002F\u002F check if this is server-rendered content and if we can perform\r\n-                        \u002F\u002F a successful hydration.\r\n-                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\r\n-                            oldVnode.removeAttribute(SSR_ATTR);\r\n-                            hydrating = true;\r\n-                        }\r\n-                        if (isTrue(hydrating)) {\r\n-                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\r\n-                                invokeInsertHook(vnode, insertedVnodeQueue, true);\r\n-                                return oldVnode\r\n-                            } else {\r\n-                                warn(\r\n-                                    'The client-side rendered virtual DOM tree is not matching ' +\r\n-                                    'server-rendered content. This is likely caused by incorrect ' +\r\n-                                    'HTML markup, for example nesting block-level elements inside ' +\r\n-                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\r\n-                                    'full client-side render.'\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                        \u002F\u002F either not server-rendered, or hydration failed.\r\n-                        \u002F\u002F create an empty node and replace it\r\n-                        oldVnode = emptyNodeAt(oldVnode);\r\n-                    }\r\n-\r\n-                    \u002F\u002F replacing existing element\r\n-                    var oldElm = oldVnode.elm;\r\n-                    var parentElm = nodeOps.parentNode(oldElm);\r\n-\r\n-                    \u002F\u002F create new node\r\n-                    createElm(\r\n-                        vnode,\r\n-                        insertedVnodeQueue,\r\n-                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\r\n-                        \u002F\u002F leaving transition. Only happens when combining transition +\r\n-                        \u002F\u002F keep-alive + HOCs. (#4590)\r\n-                        oldElm._leaveCb ? null : parentElm,\r\n-                        nodeOps.nextSibling(oldElm)\r\n-                    );\r\n-\r\n-                    \u002F\u002F update parent placeholder node element, recursively\r\n-                    if (isDef(vnode.parent)) {\r\n-                        var ancestor = vnode.parent;\r\n-                        var patchable = isPatchable(vnode);\r\n-                        while (ancestor) {\r\n-                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\r\n-                                cbs.destroy[i](ancestor);\r\n-                            }\r\n-                            ancestor.elm = vnode.elm;\r\n-                            if (patchable) {\r\n-                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                                    cbs.create[i$1](emptyNode, ancestor);\r\n-                                }\r\n-                                \u002F\u002F #6513\r\n-                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\r\n-                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\r\n-                                var insert = ancestor.data.hook.insert;\r\n-                                if (insert.merged) {\r\n-                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\r\n-                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\r\n-                                        insert.fns[i$2]();\r\n-                                    }\r\n-                                }\r\n-                            } else {\r\n-                                registerRef(ancestor);\r\n-                            }\r\n-                            ancestor = ancestor.parent;\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F destroy old node\r\n-                    if (isDef(parentElm)) {\r\n-                        removeVnodes(parentElm, [oldVnode], 0, 0);\r\n-                    } else if (isDef(oldVnode.tag)) {\r\n-                        invokeDestroyHook(oldVnode);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\r\n-            return vnode.elm\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var directives = {\r\n-        create: updateDirectives,\r\n-        update: updateDirectives,\r\n-        destroy: function unbindDirectives (vnode) {\r\n-            updateDirectives(vnode, emptyNode);\r\n-        }\r\n-    };\r\n-\r\n-    function updateDirectives (oldVnode, vnode) {\r\n-        if (oldVnode.data.directives || vnode.data.directives) {\r\n-            _update(oldVnode, vnode);\r\n-        }\r\n-    }\r\n-\r\n-    function _update (oldVnode, vnode) {\r\n-        var isCreate = oldVnode === emptyNode;\r\n-        var isDestroy = vnode === emptyNode;\r\n-        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\r\n-        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\r\n-\r\n-        var dirsWithInsert = [];\r\n-        var dirsWithPostpatch = [];\r\n-\r\n-        var key, oldDir, dir;\r\n-        for (key in newDirs) {\r\n-            oldDir = oldDirs[key];\r\n-            dir = newDirs[key];\r\n-            if (!oldDir) {\r\n-                \u002F\u002F new directive, bind\r\n-                callHook$1(dir, 'bind', vnode, oldVnode);\r\n-                if (dir.def && dir.def.inserted) {\r\n-                    dirsWithInsert.push(dir);\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F existing directive, update\r\n-                dir.oldValue = oldDir.value;\r\n-                dir.oldArg = oldDir.arg;\r\n-                callHook$1(dir, 'update', vnode, oldVnode);\r\n-                if (dir.def && dir.def.componentUpdated) {\r\n-                    dirsWithPostpatch.push(dir);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithInsert.length) {\r\n-            var callInsert = function () {\r\n-                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\r\n-                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\r\n-                }\r\n-            };\r\n-            if (isCreate) {\r\n-                mergeVNodeHook(vnode, 'insert', callInsert);\r\n-            } else {\r\n-                callInsert();\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithPostpatch.length) {\r\n-            mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\r\n-                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (!isCreate) {\r\n-            for (key in oldDirs) {\r\n-                if (!newDirs[key]) {\r\n-                    \u002F\u002F no longer present, unbind\r\n-                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var emptyModifiers = Object.create(null);\r\n-\r\n-    function normalizeDirectives$1 (\r\n-        dirs,\r\n-        vm\r\n-    ) {\r\n-        var res = Object.create(null);\r\n-        if (!dirs) {\r\n-            \u002F\u002F $flow-disable-line\r\n-            return res\r\n-        }\r\n-        var i, dir;\r\n-        for (i = 0; i \u003C dirs.length; i++) {\r\n-            dir = dirs[i];\r\n-            if (!dir.modifiers) {\r\n-                \u002F\u002F $flow-disable-line\r\n-                dir.modifiers = emptyModifiers;\r\n-            }\r\n-            res[getRawDirName(dir)] = dir;\r\n-            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        return res\r\n-    }\r\n-\r\n-    function getRawDirName (dir) {\r\n-        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\r\n-    }\r\n-\r\n-    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\r\n-        var fn = dir.def && dir.def[hook];\r\n-        if (fn) {\r\n-            try {\r\n-                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\r\n-            } catch (e) {\r\n-                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var baseModules = [\r\n-        ref,\r\n-        directives\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateAttrs (oldVnode, vnode) {\r\n-        var opts = vnode.componentOptions;\r\n-        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\r\n-            return\r\n-        }\r\n-        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\r\n-            return\r\n-        }\r\n-        var key, cur, old;\r\n-        var elm = vnode.elm;\r\n-        var oldAttrs = oldVnode.data.attrs || {};\r\n-        var attrs = vnode.data.attrs || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(attrs.__ob__)) {\r\n-            attrs = vnode.data.attrs = extend({}, attrs);\r\n-        }\r\n-\r\n-        for (key in attrs) {\r\n-            cur = attrs[key];\r\n-            old = oldAttrs[key];\r\n-            if (old !== cur) {\r\n-                setAttr(elm, key, cur);\r\n-            }\r\n-        }\r\n-        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\r\n-        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\r\n-            setAttr(elm, 'value', attrs.value);\r\n-        }\r\n-        for (key in oldAttrs) {\r\n-            if (isUndef(attrs[key])) {\r\n-                if (isXlink(key)) {\r\n-                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-                } else if (!isEnumeratedAttr(key)) {\r\n-                    elm.removeAttribute(key);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function setAttr (el, key, value) {\r\n-        if (el.tagName.indexOf('-') > -1) {\r\n-            baseSetAttr(el, key, value);\r\n-        } else if (isBooleanAttr(key)) {\r\n-            \u002F\u002F set attribute for blank value\r\n-            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttribute(key);\r\n-            } else {\r\n-                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\r\n-                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\r\n-                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\r\n-                    ? 'true'\r\n-                    : key;\r\n-                el.setAttribute(key, value);\r\n-            }\r\n-        } else if (isEnumeratedAttr(key)) {\r\n-            el.setAttribute(key, convertEnumeratedValue(key, value));\r\n-        } else if (isXlink(key)) {\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-            } else {\r\n-                el.setAttributeNS(xlinkNS, key, value);\r\n-            }\r\n-        } else {\r\n-            baseSetAttr(el, key, value);\r\n-        }\r\n-    }\r\n-\r\n-    function baseSetAttr (el, key, value) {\r\n-        if (isFalsyAttrValue(value)) {\r\n-            el.removeAttribute(key);\r\n-        } else {\r\n-            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\r\n-            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\r\n-            \u002F\u002F immediately.\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (\r\n-                isIE && !isIE9 &&\r\n-                el.tagName === 'TEXTAREA' &&\r\n-                key === 'placeholder' && value !== '' && !el.__ieph\r\n-            ) {\r\n-                var blocker = function (e) {\r\n-                    e.stopImmediatePropagation();\r\n-                    el.removeEventListener('input', blocker);\r\n-                };\r\n-                el.addEventListener('input', blocker);\r\n-                \u002F\u002F $flow-disable-line\r\n-                el.__ieph = true; \u002F* IE placeholder patched *\u002F\r\n-            }\r\n-            el.setAttribute(key, value);\r\n-        }\r\n-    }\r\n-\r\n-    var attrs = {\r\n-        create: updateAttrs,\r\n-        update: updateAttrs\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateClass (oldVnode, vnode) {\r\n-        var el = vnode.elm;\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-        if (\r\n-            isUndef(data.staticClass) &&\r\n-            isUndef(data.class) && (\r\n-                isUndef(oldData) || (\r\n-                    isUndef(oldData.staticClass) &&\r\n-                    isUndef(oldData.class)\r\n-                )\r\n-            )\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cls = genClassForVnode(vnode);\r\n-\r\n-        \u002F\u002F handle transition classes\r\n-        var transitionClass = el._transitionClasses;\r\n-        if (isDef(transitionClass)) {\r\n-            cls = concat(cls, stringifyClass(transitionClass));\r\n-        }\r\n-\r\n-        \u002F\u002F set the class\r\n-        if (cls !== el._prevClass) {\r\n-            el.setAttribute('class', cls);\r\n-            el._prevClass = cls;\r\n-        }\r\n-    }\r\n-\r\n-    var klass = {\r\n-        create: updateClass,\r\n-        update: updateClass\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\r\n-\r\n-    function parseFilters (exp) {\r\n-        var inSingle = false;\r\n-        var inDouble = false;\r\n-        var inTemplateString = false;\r\n-        var inRegex = false;\r\n-        var curly = 0;\r\n-        var square = 0;\r\n-        var paren = 0;\r\n-        var lastFilterIndex = 0;\r\n-        var c, prev, i, expression, filters;\r\n-\r\n-        for (i = 0; i \u003C exp.length; i++) {\r\n-            prev = c;\r\n-            c = exp.charCodeAt(i);\r\n-            if (inSingle) {\r\n-                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\r\n-            } else if (inDouble) {\r\n-                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\r\n-            } else if (inTemplateString) {\r\n-                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\r\n-            } else if (inRegex) {\r\n-                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\r\n-            } else if (\r\n-                c === 0x7C && \u002F\u002F pipe\r\n-                exp.charCodeAt(i + 1) !== 0x7C &&\r\n-                exp.charCodeAt(i - 1) !== 0x7C &&\r\n-                !curly && !square && !paren\r\n-            ) {\r\n-                if (expression === undefined) {\r\n-                    \u002F\u002F first filter, end of expression\r\n-                    lastFilterIndex = i + 1;\r\n-                    expression = exp.slice(0, i).trim();\r\n-                } else {\r\n-                    pushFilter();\r\n-                }\r\n-            } else {\r\n-                switch (c) {\r\n-                    case 0x22: inDouble = true; break         \u002F\u002F \"\r\n-                    case 0x27: inSingle = true; break         \u002F\u002F '\r\n-                    case 0x60: inTemplateString = true; break \u002F\u002F `\r\n-                    case 0x28: paren++; break                 \u002F\u002F (\r\n-                    case 0x29: paren--; break                 \u002F\u002F )\r\n-                    case 0x5B: square++; break                \u002F\u002F [\r\n-                    case 0x5D: square--; break                \u002F\u002F ]\r\n-                    case 0x7B: curly++; break                 \u002F\u002F {\r\n-                    case 0x7D: curly--; break                 \u002F\u002F }\r\n-                }\r\n-                if (c === 0x2f) { \u002F\u002F \u002F\r\n-                    var j = i - 1;\r\n-                    var p = (void 0);\r\n-                    \u002F\u002F find first non-whitespace prev char\r\n-                    for (; j >= 0; j--) {\r\n-                        p = exp.charAt(j);\r\n-                        if (p !== ' ') { break }\r\n-                    }\r\n-                    if (!p || !validDivisionCharRE.test(p)) {\r\n-                        inRegex = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (expression === undefined) {\r\n-            expression = exp.slice(0, i).trim();\r\n-        } else if (lastFilterIndex !== 0) {\r\n-            pushFilter();\r\n-        }\r\n-\r\n-        function pushFilter () {\r\n-            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\r\n-            lastFilterIndex = i + 1;\r\n-        }\r\n-\r\n-        if (filters) {\r\n-            for (i = 0; i \u003C filters.length; i++) {\r\n-                expression = wrapFilter(expression, filters[i]);\r\n-            }\r\n-        }\r\n-\r\n-        return expression\r\n-    }\r\n-\r\n-    function wrapFilter (exp, filter) {\r\n-        var i = filter.indexOf('(');\r\n-        if (i \u003C 0) {\r\n-            \u002F\u002F _f: resolveFilter\r\n-            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\r\n-        } else {\r\n-            var name = filter.slice(0, i);\r\n-            var args = filter.slice(i + 1);\r\n-            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-    function baseWarn (msg, range) {\r\n-        console.error((\"[Vue compiler]: \" + msg));\r\n-    }\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    function pluckModuleFunction (\r\n-        modules,\r\n-        key\r\n-    ) {\r\n-        return modules\r\n-            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\r\n-            : []\r\n-    }\r\n-\r\n-    function addProp (el, name, value, range, dynamic) {\r\n-        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function addAttr (el, name, value, range, dynamic) {\r\n-        var attrs = dynamic\r\n-            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\r\n-            : (el.attrs || (el.attrs = []));\r\n-        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    \u002F\u002F add a raw attr (use this in preTransforms)\r\n-    function addRawAttr (el, name, value, range) {\r\n-        el.attrsMap[name] = value;\r\n-        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\r\n-    }\r\n-\r\n-    function addDirective (\r\n-        el,\r\n-        name,\r\n-        rawName,\r\n-        value,\r\n-        arg,\r\n-        isDynamicArg,\r\n-        modifiers,\r\n-        range\r\n-    ) {\r\n-        (el.directives || (el.directives = [])).push(rangeSetItem({\r\n-            name: name,\r\n-            rawName: rawName,\r\n-            value: value,\r\n-            arg: arg,\r\n-            isDynamicArg: isDynamicArg,\r\n-            modifiers: modifiers\r\n-        }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function prependModifierMarker (symbol, name, dynamic) {\r\n-        return dynamic\r\n-            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\r\n-            : symbol + name \u002F\u002F mark the event as captured\r\n-    }\r\n-\r\n-    function addHandler (\r\n-        el,\r\n-        name,\r\n-        value,\r\n-        modifiers,\r\n-        important,\r\n-        warn,\r\n-        range,\r\n-        dynamic\r\n-    ) {\r\n-        modifiers = modifiers || emptyObject;\r\n-        \u002F\u002F warn prevent and passive modifier\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            warn &&\r\n-            modifiers.prevent && modifiers.passive\r\n-        ) {\r\n-            warn(\r\n-                'passive and prevent can\\'t be used together. ' +\r\n-                'Passive handler can\\'t prevent default event.',\r\n-                range\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F normalize click.right and click.middle since they don't actually fire\r\n-        \u002F\u002F this is technically browser-specific, but at least for now browsers are\r\n-        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\r\n-        if (modifiers.right) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'contextmenu';\r\n-                delete modifiers.right;\r\n-            }\r\n-        } else if (modifiers.middle) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'mouseup';\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F check capture modifier\r\n-        if (modifiers.capture) {\r\n-            delete modifiers.capture;\r\n-            name = prependModifierMarker('!', name, dynamic);\r\n-        }\r\n-        if (modifiers.once) {\r\n-            delete modifiers.once;\r\n-            name = prependModifierMarker('~', name, dynamic);\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (modifiers.passive) {\r\n-            delete modifiers.passive;\r\n-            name = prependModifierMarker('&', name, dynamic);\r\n-        }\r\n-\r\n-        var events;\r\n-        if (modifiers.native) {\r\n-            delete modifiers.native;\r\n-            events = el.nativeEvents || (el.nativeEvents = {});\r\n-        } else {\r\n-            events = el.events || (el.events = {});\r\n-        }\r\n-\r\n-        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\r\n-        if (modifiers !== emptyObject) {\r\n-            newHandler.modifiers = modifiers;\r\n-        }\r\n-\r\n-        var handlers = events[name];\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (Array.isArray(handlers)) {\r\n-            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\r\n-        } else if (handlers) {\r\n-            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\r\n-        } else {\r\n-            events[name] = newHandler;\r\n-        }\r\n-\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function getRawBindingAttr (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        return el.rawAttrsMap[':' + name] ||\r\n-            el.rawAttrsMap['v-bind:' + name] ||\r\n-            el.rawAttrsMap[name]\r\n-    }\r\n-\r\n-    function getBindingAttr (\r\n-        el,\r\n-        name,\r\n-        getStatic\r\n-    ) {\r\n-        var dynamicValue =\r\n-            getAndRemoveAttr(el, ':' + name) ||\r\n-            getAndRemoveAttr(el, 'v-bind:' + name);\r\n-        if (dynamicValue != null) {\r\n-            return parseFilters(dynamicValue)\r\n-        } else if (getStatic !== false) {\r\n-            var staticValue = getAndRemoveAttr(el, name);\r\n-            if (staticValue != null) {\r\n-                return JSON.stringify(staticValue)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\r\n-    \u002F\u002F doesn't get processed by processAttrs.\r\n-    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\r\n-    \u002F\u002F needed during codegen.\r\n-    function getAndRemoveAttr (\r\n-        el,\r\n-        name,\r\n-        removeFromMap\r\n-    ) {\r\n-        var val;\r\n-        if ((val = el.attrsMap[name]) != null) {\r\n-            var list = el.attrsList;\r\n-            for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-                if (list[i].name === name) {\r\n-                    list.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-        if (removeFromMap) {\r\n-            delete el.attrsMap[name];\r\n-        }\r\n-        return val\r\n-    }\r\n-\r\n-    function getAndRemoveAttrByRegex (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        var list = el.attrsList;\r\n-        for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-            var attr = list[i];\r\n-            if (name.test(attr.name)) {\r\n-                list.splice(i, 1);\r\n-                return attr\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function rangeSetItem (\r\n-        item,\r\n-        range\r\n-    ) {\r\n-        if (range) {\r\n-            if (range.start != null) {\r\n-                item.start = range.start;\r\n-            }\r\n-            if (range.end != null) {\r\n-                item.end = range.end;\r\n-            }\r\n-        }\r\n-        return item\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Cross-platform code generation for component v-model\r\n-     *\u002F\r\n-    function genComponentModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var ref = modifiers || {};\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-\r\n-        var baseValueExpression = '$$v';\r\n-        var valueExpression = baseValueExpression;\r\n-        if (trim) {\r\n-            valueExpression =\r\n-                \"(typeof \" + baseValueExpression + \" === 'string'\" +\r\n-                \"? \" + baseValueExpression + \".trim()\" +\r\n-                \": \" + baseValueExpression + \")\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-        var assignment = genAssignmentCode(value, valueExpression);\r\n-\r\n-        el.model = {\r\n-            value: (\"(\" + value + \")\"),\r\n-            expression: JSON.stringify(value),\r\n-            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Cross-platform codegen helper for generating v-model value assignment code.\r\n-     *\u002F\r\n-    function genAssignmentCode (\r\n-        value,\r\n-        assignment\r\n-    ) {\r\n-        var res = parseModel(value);\r\n-        if (res.key === null) {\r\n-            return (value + \"=\" + assignment)\r\n-        } else {\r\n-            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse a v-model expression into a base path and a final key segment.\r\n-     * Handles both dot-path and possible square brackets.\r\n-     *\r\n-     * Possible cases:\r\n-     *\r\n-     * - test\r\n-     * - test[key]\r\n-     * - test[test1[key]]\r\n-     * - test[\"a\"][key]\r\n-     * - xxx.test[a[a].test1[key]]\r\n-     * - test.xxx.a[\"asa\"][test1[key]]\r\n-     *\r\n-     *\u002F\r\n-\r\n-    var len, str, chr, index$1, expressionPos, expressionEndPos;\r\n-\r\n-\r\n-\r\n-    function parseModel (val) {\r\n-        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\r\n-        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\r\n-        val = val.trim();\r\n-        len = val.length;\r\n-\r\n-        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\r\n-            index$1 = val.lastIndexOf('.');\r\n-            if (index$1 > -1) {\r\n-                return {\r\n-                    exp: val.slice(0, index$1),\r\n-                    key: '\"' + val.slice(index$1 + 1) + '\"'\r\n-                }\r\n-            } else {\r\n-                return {\r\n-                    exp: val,\r\n-                    key: null\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        str = val;\r\n-        index$1 = expressionPos = expressionEndPos = 0;\r\n-\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-            } else if (chr === 0x5B) {\r\n-                parseBracket(chr);\r\n-            }\r\n-        }\r\n-\r\n-        return {\r\n-            exp: val.slice(0, expressionPos),\r\n-            key: val.slice(expressionPos + 1, expressionEndPos)\r\n-        }\r\n-    }\r\n-\r\n-    function next () {\r\n-        return str.charCodeAt(++index$1)\r\n-    }\r\n-\r\n-    function eof () {\r\n-        return index$1 >= len\r\n-    }\r\n-\r\n-    function isStringStart (chr) {\r\n-        return chr === 0x22 || chr === 0x27\r\n-    }\r\n-\r\n-    function parseBracket (chr) {\r\n-        var inBracket = 1;\r\n-        expressionPos = index$1;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-                continue\r\n-            }\r\n-            if (chr === 0x5B) { inBracket++; }\r\n-            if (chr === 0x5D) { inBracket--; }\r\n-            if (inBracket === 0) {\r\n-                expressionEndPos = index$1;\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function parseString (chr) {\r\n-        var stringQuote = chr;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (chr === stringQuote) {\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn$1;\r\n-\r\n-    \u002F\u002F in some cases, the event used has to be determined at runtime\r\n-    \u002F\u002F so we used some reserved tokens during compile.\r\n-    var RANGE_TOKEN = '__r';\r\n-    var CHECKBOX_RADIO_TOKEN = '__c';\r\n-\r\n-    function model (\r\n-        el,\r\n-        dir,\r\n-        _warn\r\n-    ) {\r\n-        warn$1 = _warn;\r\n-        var value = dir.value;\r\n-        var modifiers = dir.modifiers;\r\n-        var tag = el.tag;\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        {\r\n-            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\r\n-            \u002F\u002F value will throw an error.\r\n-            if (tag === 'input' && type === 'file') {\r\n-                warn$1(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\r\n-                    \"File inputs are read only. Use a v-on:change listener instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        if (el.component) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else if (tag === 'select') {\r\n-            genSelect(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'checkbox') {\r\n-            genCheckboxModel(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'radio') {\r\n-            genRadioModel(el, value, modifiers);\r\n-        } else if (tag === 'input' || tag === 'textarea') {\r\n-            genDefaultModel(el, value, modifiers);\r\n-        } else if (!config.isReservedTag(tag)) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else {\r\n-            warn$1(\r\n-                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                \"v-model is not supported on this element type. \" +\r\n-                'If you are working with contenteditable, it\\'s recommended to ' +\r\n-                'wrap a library dedicated for that purpose inside a custom component.',\r\n-                el.rawAttrsMap['v-model']\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F ensure runtime directive metadata\r\n-        return true\r\n-    }\r\n-\r\n-    function genCheckboxModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\r\n-        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\r\n-        addProp(el, 'checked',\r\n-            \"Array.isArray(\" + value + \")\" +\r\n-            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\r\n-                trueValueBinding === 'true'\r\n-                    ? (\":(\" + value + \")\")\r\n-                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\r\n-            )\r\n-        );\r\n-        addHandler(el, 'change',\r\n-            \"var $$a=\" + value + \",\" +\r\n-            '$$el=$event.target,' +\r\n-            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\r\n-            'if(Array.isArray($$a)){' +\r\n-            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\r\n-            '$$i=_i($$a,$$v);' +\r\n-            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\r\n-            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\r\n-            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\r\n-            null, true\r\n-        );\r\n-    }\r\n-\r\n-    function genRadioModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\r\n-        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\r\n-        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\r\n-    }\r\n-\r\n-    function genSelect (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var selectedVal = \"Array.prototype.filter\" +\r\n-            \".call($event.target.options,function(o){return o.selected})\" +\r\n-            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\r\n-            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\r\n-\r\n-        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\r\n-        var code = \"var $$selectedVal = \" + selectedVal + \";\";\r\n-        code = code + \" \" + (genAssignmentCode(value, assignment));\r\n-        addHandler(el, 'change', code, null, true);\r\n-    }\r\n-\r\n-    function genDefaultModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        \u002F\u002F warn if v-bind:value conflicts with v-model\r\n-        \u002F\u002F except for inputs with v-bind:type\r\n-        {\r\n-            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\r\n-            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\r\n-            if (value$1 && !typeBinding) {\r\n-                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\r\n-                warn$1(\r\n-                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\r\n-                    'because the latter already expands to a value binding internally',\r\n-                    el.rawAttrsMap[binding]\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        var ref = modifiers || {};\r\n-        var lazy = ref.lazy;\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-        var needCompositionGuard = !lazy && type !== 'range';\r\n-        var event = lazy\r\n-            ? 'change'\r\n-            : type === 'range'\r\n-                ? RANGE_TOKEN\r\n-                : 'input';\r\n-\r\n-        var valueExpression = '$event.target.value';\r\n-        if (trim) {\r\n-            valueExpression = \"$event.target.value.trim()\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-\r\n-        var code = genAssignmentCode(value, valueExpression);\r\n-        if (needCompositionGuard) {\r\n-            code = \"if($event.target.composing)return;\" + code;\r\n-        }\r\n-\r\n-        addProp(el, 'value', (\"(\" + value + \")\"));\r\n-        addHandler(el, event, code, null, true);\r\n-        if (trim || number) {\r\n-            addHandler(el, 'blur', '$forceUpdate()');\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\r\n-    \u002F\u002F it's important to place the event as the first in the array because\r\n-    \u002F\u002F the whole point is ensuring the v-model callback gets called before\r\n-    \u002F\u002F user-attached handlers.\r\n-    function normalizeEvents (on) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[RANGE_TOKEN])) {\r\n-            \u002F\u002F IE input[type=range] only supports `change` event\r\n-            var event = isIE ? 'change' : 'input';\r\n-            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\r\n-            delete on[RANGE_TOKEN];\r\n-        }\r\n-        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\r\n-        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\r\n-            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\r\n-            delete on[CHECKBOX_RADIO_TOKEN];\r\n-        }\r\n-    }\r\n-\r\n-    var target$1;\r\n-\r\n-    function createOnceHandler$1 (event, handler, capture) {\r\n-        var _target = target$1; \u002F\u002F save current target element in closure\r\n-        return function onceHandler () {\r\n-            var res = handler.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                remove$2(event, onceHandler, capture, _target);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\r\n-    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\r\n-    \u002F\u002F safe to exclude.\r\n-    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\r\n-\r\n-    function add$1 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        passive\r\n-    ) {\r\n-        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\r\n-        \u002F\u002F attached to outer element during patch, and triggered again. This\r\n-        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\r\n-        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\r\n-        \u002F\u002F and the handler would only fire if the event passed to it was fired\r\n-        \u002F\u002F AFTER it was attached.\r\n-        if (useMicrotaskFix) {\r\n-            var attachedTimestamp = currentFlushTimestamp;\r\n-            var original = handler;\r\n-            handler = original._wrapper = function (e) {\r\n-                if (\r\n-                    \u002F\u002F no bubbling, should always fire.\r\n-                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\r\n-                \u002F\u002F certain weird environments...\r\n-                e.target === e.currentTarget ||\r\n-                \u002F\u002F event is fired after handler attachment\r\n-                e.timeStamp >= attachedTimestamp ||\r\n-                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\r\n-                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\r\n-                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\r\n-                e.timeStamp \u003C= 0 ||\r\n-                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\r\n-                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\r\n-                \u002F\u002F starting reference\r\n-                e.target.ownerDocument !== document\r\n-                ) {\r\n-                    return original.apply(this, arguments)\r\n-                }\r\n-            };\r\n-        }\r\n-        target$1.addEventListener(\r\n-            name,\r\n-            handler,\r\n-            supportsPassive\r\n-                ? { capture: capture, passive: passive }\r\n-                : capture\r\n-        );\r\n-    }\r\n-\r\n-    function remove$2 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        _target\r\n-    ) {\r\n-        (_target || target$1).removeEventListener(\r\n-            name,\r\n-            handler._wrapper || handler,\r\n-            capture\r\n-        );\r\n-    }\r\n-\r\n-    function updateDOMListeners (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\r\n-            return\r\n-        }\r\n-        var on = vnode.data.on || {};\r\n-        var oldOn = oldVnode.data.on || {};\r\n-        target$1 = vnode.elm;\r\n-        normalizeEvents(on);\r\n-        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\r\n-        target$1 = undefined;\r\n-    }\r\n-\r\n-    var events = {\r\n-        create: updateDOMListeners,\r\n-        update: updateDOMListeners\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var svgContainer;\r\n-\r\n-    function updateDOMProps (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\r\n-            return\r\n-        }\r\n-        var key, cur;\r\n-        var elm = vnode.elm;\r\n-        var oldProps = oldVnode.data.domProps || {};\r\n-        var props = vnode.data.domProps || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(props.__ob__)) {\r\n-            props = vnode.data.domProps = extend({}, props);\r\n-        }\r\n-\r\n-        for (key in oldProps) {\r\n-            if (!(key in props)) {\r\n-                elm[key] = '';\r\n-            }\r\n-        }\r\n-\r\n-        for (key in props) {\r\n-            cur = props[key];\r\n-            \u002F\u002F ignore children if the node has textContent or innerHTML,\r\n-            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\r\n-            \u002F\u002F on subsequent patches (#3360)\r\n-            if (key === 'textContent' || key === 'innerHTML') {\r\n-                if (vnode.children) { vnode.children.length = 0; }\r\n-                if (cur === oldProps[key]) { continue }\r\n-                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\r\n-                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\r\n-                if (elm.childNodes.length === 1) {\r\n-                    elm.removeChild(elm.childNodes[0]);\r\n-                }\r\n-            }\r\n-\r\n-            if (key === 'value' && elm.tagName !== 'PROGRESS') {\r\n-                \u002F\u002F store value as _value as well since\r\n-                \u002F\u002F non-string values will be stringified\r\n-                elm._value = cur;\r\n-                \u002F\u002F avoid resetting cursor position when value is the same\r\n-                var strCur = isUndef(cur) ? '' : String(cur);\r\n-                if (shouldUpdateValue(elm, strCur)) {\r\n-                    elm.value = strCur;\r\n-                }\r\n-            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\r\n-                \u002F\u002F IE doesn't support innerHTML for SVG elements\r\n-                svgContainer = svgContainer || document.createElement('div');\r\n-                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\r\n-                var svg = svgContainer.firstChild;\r\n-                while (elm.firstChild) {\r\n-                    elm.removeChild(elm.firstChild);\r\n-                }\r\n-                while (svg.firstChild) {\r\n-                    elm.appendChild(svg.firstChild);\r\n-                }\r\n-            } else if (\r\n-                \u002F\u002F skip the update if old and new VDOM state is the same.\r\n-            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\r\n-            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\r\n-            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\r\n-            cur !== oldProps[key]\r\n-            ) {\r\n-                \u002F\u002F some property updates can throw\r\n-                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\r\n-                try {\r\n-                    elm[key] = cur;\r\n-                } catch (e) {}\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\r\n-\r\n-\r\n-    function shouldUpdateValue (elm, checkVal) {\r\n-        return (!elm.composing && (\r\n-            elm.tagName === 'OPTION' ||\r\n-            isNotInFocusAndDirty(elm, checkVal) ||\r\n-            isDirtyWithModifiers(elm, checkVal)\r\n-        ))\r\n-    }\r\n-\r\n-    function isNotInFocusAndDirty (elm, checkVal) {\r\n-        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\r\n-        \u002F\u002F not equal to the updated value\r\n-        var notInFocus = true;\r\n-        \u002F\u002F #6157\r\n-        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\r\n-        try { notInFocus = document.activeElement !== elm; } catch (e) {}\r\n-        return notInFocus && elm.value !== checkVal\r\n-    }\r\n-\r\n-    function isDirtyWithModifiers (elm, newVal) {\r\n-        var value = elm.value;\r\n-        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\r\n-        if (isDef(modifiers)) {\r\n-            if (modifiers.number) {\r\n-                return toNumber(value) !== toNumber(newVal)\r\n-            }\r\n-            if (modifiers.trim) {\r\n-                return value.trim() !== newVal.trim()\r\n-            }\r\n-        }\r\n-        return value !== newVal\r\n-    }\r\n-\r\n-    var domProps = {\r\n-        create: updateDOMProps,\r\n-        update: updateDOMProps\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var parseStyleText = cached(function (cssText) {\r\n-        var res = {};\r\n-        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\r\n-        var propertyDelimiter = \u002F:(.+)\u002F;\r\n-        cssText.split(listDelimiter).forEach(function (item) {\r\n-            if (item) {\r\n-                var tmp = item.split(propertyDelimiter);\r\n-                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\r\n-            }\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F\u002F merge static and dynamic style data on the same vnode\r\n-    function normalizeStyleData (data) {\r\n-        var style = normalizeStyleBinding(data.style);\r\n-        \u002F\u002F static style is pre-processed into an object during compilation\r\n-        \u002F\u002F and is always a fresh object, so it's safe to merge into it\r\n-        return data.staticStyle\r\n-            ? extend(data.staticStyle, style)\r\n-            : style\r\n-    }\r\n-\r\n-    \u002F\u002F normalize possible array \u002F string values into Object\r\n-    function normalizeStyleBinding (bindingStyle) {\r\n-        if (Array.isArray(bindingStyle)) {\r\n-            return toObject(bindingStyle)\r\n-        }\r\n-        if (typeof bindingStyle === 'string') {\r\n-            return parseStyleText(bindingStyle)\r\n-        }\r\n-        return bindingStyle\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * parent component style should be after child's\r\n-     * so that parent component's style could override it\r\n-     *\u002F\r\n-    function getStyle (vnode, checkChild) {\r\n-        var res = {};\r\n-        var styleData;\r\n-\r\n-        if (checkChild) {\r\n-            var childNode = vnode;\r\n-            while (childNode.componentInstance) {\r\n-                childNode = childNode.componentInstance._vnode;\r\n-                if (\r\n-                    childNode && childNode.data &&\r\n-                    (styleData = normalizeStyleData(childNode.data))\r\n-                ) {\r\n-                    extend(res, styleData);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if ((styleData = normalizeStyleData(vnode.data))) {\r\n-            extend(res, styleData);\r\n-        }\r\n-\r\n-        var parentNode = vnode;\r\n-        while ((parentNode = parentNode.parent)) {\r\n-            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\r\n-                extend(res, styleData);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var cssVarRE = \u002F^--\u002F;\r\n-    var importantRE = \u002F\\s*!important$\u002F;\r\n-    var setProp = function (el, name, val) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (cssVarRE.test(name)) {\r\n-            el.style.setProperty(name, val);\r\n-        } else if (importantRE.test(val)) {\r\n-            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\r\n-        } else {\r\n-            var normalizedName = normalize(name);\r\n-            if (Array.isArray(val)) {\r\n-                \u002F\u002F Support values array created by autoprefixer, e.g.\r\n-                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\r\n-                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\r\n-                for (var i = 0, len = val.length; i \u003C len; i++) {\r\n-                    el.style[normalizedName] = val[i];\r\n-                }\r\n-            } else {\r\n-                el.style[normalizedName] = val;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var vendorNames = ['Webkit', 'Moz', 'ms'];\r\n-\r\n-    var emptyStyle;\r\n-    var normalize = cached(function (prop) {\r\n-        emptyStyle = emptyStyle || document.createElement('div').style;\r\n-        prop = camelize(prop);\r\n-        if (prop !== 'filter' && (prop in emptyStyle)) {\r\n-            return prop\r\n-        }\r\n-        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\r\n-        for (var i = 0; i \u003C vendorNames.length; i++) {\r\n-            var name = vendorNames[i] + capName;\r\n-            if (name in emptyStyle) {\r\n-                return name\r\n-            }\r\n-        }\r\n-    });\r\n-\r\n-    function updateStyle (oldVnode, vnode) {\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-\r\n-        if (isUndef(data.staticStyle) && isUndef(data.style) &&\r\n-            isUndef(oldData.staticStyle) && isUndef(oldData.style)\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cur, name;\r\n-        var el = vnode.elm;\r\n-        var oldStaticStyle = oldData.staticStyle;\r\n-        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\r\n-\r\n-        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\r\n-        var oldStyle = oldStaticStyle || oldStyleBinding;\r\n-\r\n-        var style = normalizeStyleBinding(vnode.data.style) || {};\r\n-\r\n-        \u002F\u002F store normalized style under a different key for next diff\r\n-        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\r\n-        \u002F\u002F to mutate it.\r\n-        vnode.data.normalizedStyle = isDef(style.__ob__)\r\n-            ? extend({}, style)\r\n-            : style;\r\n-\r\n-        var newStyle = getStyle(vnode, true);\r\n-\r\n-        for (name in oldStyle) {\r\n-            if (isUndef(newStyle[name])) {\r\n-                setProp(el, name, '');\r\n-            }\r\n-        }\r\n-        for (name in newStyle) {\r\n-            cur = newStyle[name];\r\n-            if (cur !== oldStyle[name]) {\r\n-                \u002F\u002F ie9 setting to null has no effect, must use empty string\r\n-                setProp(el, name, cur == null ? '' : cur);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var style = {\r\n-        create: updateStyle,\r\n-        update: updateStyle\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var whitespaceRE = \u002F\\s+\u002F;\r\n-\r\n-    \u002F**\r\n-     * Add class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function addClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\r\n-            } else {\r\n-                el.classList.add(cls);\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\r\n-                el.setAttribute('class', (cur + cls).trim());\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Remove class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function removeClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\r\n-            } else {\r\n-                el.classList.remove(cls);\r\n-            }\r\n-            if (!el.classList.length) {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            var tar = ' ' + cls + ' ';\r\n-            while (cur.indexOf(tar) >= 0) {\r\n-                cur = cur.replace(tar, ' ');\r\n-            }\r\n-            cur = cur.trim();\r\n-            if (cur) {\r\n-                el.setAttribute('class', cur);\r\n-            } else {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveTransition (def$$1) {\r\n-        if (!def$$1) {\r\n-            return\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (typeof def$$1 === 'object') {\r\n-            var res = {};\r\n-            if (def$$1.css !== false) {\r\n-                extend(res, autoCssTransition(def$$1.name || 'v'));\r\n-            }\r\n-            extend(res, def$$1);\r\n-            return res\r\n-        } else if (typeof def$$1 === 'string') {\r\n-            return autoCssTransition(def$$1)\r\n-        }\r\n-    }\r\n-\r\n-    var autoCssTransition = cached(function (name) {\r\n-        return {\r\n-            enterClass: (name + \"-enter\"),\r\n-            enterToClass: (name + \"-enter-to\"),\r\n-            enterActiveClass: (name + \"-enter-active\"),\r\n-            leaveClass: (name + \"-leave\"),\r\n-            leaveToClass: (name + \"-leave-to\"),\r\n-            leaveActiveClass: (name + \"-leave-active\")\r\n-        }\r\n-    });\r\n-\r\n-    var hasTransition = inBrowser && !isIE9;\r\n-    var TRANSITION = 'transition';\r\n-    var ANIMATION = 'animation';\r\n-\r\n-    \u002F\u002F Transition property\u002Fevent sniffing\r\n-    var transitionProp = 'transition';\r\n-    var transitionEndEvent = 'transitionend';\r\n-    var animationProp = 'animation';\r\n-    var animationEndEvent = 'animationend';\r\n-    if (hasTransition) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (window.ontransitionend === undefined &&\r\n-            window.onwebkittransitionend !== undefined\r\n-        ) {\r\n-            transitionProp = 'WebkitTransition';\r\n-            transitionEndEvent = 'webkitTransitionEnd';\r\n-        }\r\n-        if (window.onanimationend === undefined &&\r\n-            window.onwebkitanimationend !== undefined\r\n-        ) {\r\n-            animationProp = 'WebkitAnimation';\r\n-            animationEndEvent = 'webkitAnimationEnd';\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\r\n-    var raf = inBrowser\r\n-        ? window.requestAnimationFrame\r\n-            ? window.requestAnimationFrame.bind(window)\r\n-            : setTimeout\r\n-        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\r\n-\r\n-    function nextFrame (fn) {\r\n-        raf(function () {\r\n-            raf(fn);\r\n-        });\r\n-    }\r\n-\r\n-    function addTransitionClass (el, cls) {\r\n-        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\r\n-        if (transitionClasses.indexOf(cls) \u003C 0) {\r\n-            transitionClasses.push(cls);\r\n-            addClass(el, cls);\r\n-        }\r\n-    }\r\n-\r\n-    function removeTransitionClass (el, cls) {\r\n-        if (el._transitionClasses) {\r\n-            remove(el._transitionClasses, cls);\r\n-        }\r\n-        removeClass(el, cls);\r\n-    }\r\n-\r\n-    function whenTransitionEnds (\r\n-        el,\r\n-        expectedType,\r\n-        cb\r\n-    ) {\r\n-        var ref = getTransitionInfo(el, expectedType);\r\n-        var type = ref.type;\r\n-        var timeout = ref.timeout;\r\n-        var propCount = ref.propCount;\r\n-        if (!type) { return cb() }\r\n-        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\r\n-        var ended = 0;\r\n-        var end = function () {\r\n-            el.removeEventListener(event, onEnd);\r\n-            cb();\r\n-        };\r\n-        var onEnd = function (e) {\r\n-            if (e.target === el) {\r\n-                if (++ended >= propCount) {\r\n-                    end();\r\n-                }\r\n-            }\r\n-        };\r\n-        setTimeout(function () {\r\n-            if (ended \u003C propCount) {\r\n-                end();\r\n-            }\r\n-        }, timeout + 1);\r\n-        el.addEventListener(event, onEnd);\r\n-    }\r\n-\r\n-    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\r\n-\r\n-    function getTransitionInfo (el, expectedType) {\r\n-        var styles = window.getComputedStyle(el);\r\n-        \u002F\u002F JSDOM may return undefined for transition properties\r\n-        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\r\n-        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\r\n-        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n-        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\r\n-        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\r\n-        var animationTimeout = getTimeout(animationDelays, animationDurations);\r\n-\r\n-        var type;\r\n-        var timeout = 0;\r\n-        var propCount = 0;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (expectedType === TRANSITION) {\r\n-            if (transitionTimeout > 0) {\r\n-                type = TRANSITION;\r\n-                timeout = transitionTimeout;\r\n-                propCount = transitionDurations.length;\r\n-            }\r\n-        } else if (expectedType === ANIMATION) {\r\n-            if (animationTimeout > 0) {\r\n-                type = ANIMATION;\r\n-                timeout = animationTimeout;\r\n-                propCount = animationDurations.length;\r\n-            }\r\n-        } else {\r\n-            timeout = Math.max(transitionTimeout, animationTimeout);\r\n-            type = timeout > 0\r\n-                ? transitionTimeout > animationTimeout\r\n-                    ? TRANSITION\r\n-                    : ANIMATION\r\n-                : null;\r\n-            propCount = type\r\n-                ? type === TRANSITION\r\n-                    ? transitionDurations.length\r\n-                    : animationDurations.length\r\n-                : 0;\r\n-        }\r\n-        var hasTransform =\r\n-            type === TRANSITION &&\r\n-            transformRE.test(styles[transitionProp + 'Property']);\r\n-        return {\r\n-            type: type,\r\n-            timeout: timeout,\r\n-            propCount: propCount,\r\n-            hasTransform: hasTransform\r\n-        }\r\n-    }\r\n-\r\n-    function getTimeout (delays, durations) {\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        while (delays.length \u003C durations.length) {\r\n-            delays = delays.concat(delays);\r\n-        }\r\n-\r\n-        return Math.max.apply(null, durations.map(function (d, i) {\r\n-            return toMs(d) + toMs(delays[i])\r\n-        }))\r\n-    }\r\n-\r\n-    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n-    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\r\n-    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n-    \u002F\u002F as a floor function) causing unexpected behaviors\r\n-    function toMs (s) {\r\n-        return Number(s.slice(0, -1).replace(',', '.')) * 1000\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function enter (vnode, toggleDisplay) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call leave callback now\r\n-        if (isDef(el._leaveCb)) {\r\n-            el._leaveCb.cancelled = true;\r\n-            el._leaveCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data)) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._enterCb) || el.nodeType !== 1) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var enterClass = data.enterClass;\r\n-        var enterToClass = data.enterToClass;\r\n-        var enterActiveClass = data.enterActiveClass;\r\n-        var appearClass = data.appearClass;\r\n-        var appearToClass = data.appearToClass;\r\n-        var appearActiveClass = data.appearActiveClass;\r\n-        var beforeEnter = data.beforeEnter;\r\n-        var enter = data.enter;\r\n-        var afterEnter = data.afterEnter;\r\n-        var enterCancelled = data.enterCancelled;\r\n-        var beforeAppear = data.beforeAppear;\r\n-        var appear = data.appear;\r\n-        var afterAppear = data.afterAppear;\r\n-        var appearCancelled = data.appearCancelled;\r\n-        var duration = data.duration;\r\n-\r\n-        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\r\n-        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\r\n-        \u002F\u002F as the root node of a child component. In that case we need to check\r\n-        \u002F\u002F \u003Ctransition>'s parent for appear check.\r\n-        var context = activeInstance;\r\n-        var transitionNode = activeInstance.$vnode;\r\n-        while (transitionNode && transitionNode.parent) {\r\n-            context = transitionNode.context;\r\n-            transitionNode = transitionNode.parent;\r\n-        }\r\n-\r\n-        var isAppear = !context._isMounted || !vnode.isRootInsert;\r\n-\r\n-        if (isAppear && !appear && appear !== '') {\r\n-            return\r\n-        }\r\n-\r\n-        var startClass = isAppear && appearClass\r\n-            ? appearClass\r\n-            : enterClass;\r\n-        var activeClass = isAppear && appearActiveClass\r\n-            ? appearActiveClass\r\n-            : enterActiveClass;\r\n-        var toClass = isAppear && appearToClass\r\n-            ? appearToClass\r\n-            : enterToClass;\r\n-\r\n-        var beforeEnterHook = isAppear\r\n-            ? (beforeAppear || beforeEnter)\r\n-            : beforeEnter;\r\n-        var enterHook = isAppear\r\n-            ? (typeof appear === 'function' ? appear : enter)\r\n-            : enter;\r\n-        var afterEnterHook = isAppear\r\n-            ? (afterAppear || afterEnter)\r\n-            : afterEnter;\r\n-        var enterCancelledHook = isAppear\r\n-            ? (appearCancelled || enterCancelled)\r\n-            : enterCancelled;\r\n-\r\n-        var explicitEnterDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.enter\r\n-                : duration\r\n-        );\r\n-\r\n-        if (explicitEnterDuration != null) {\r\n-            checkDuration(explicitEnterDuration, 'enter', vnode);\r\n-        }\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(enterHook);\r\n-\r\n-        var cb = el._enterCb = once(function () {\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, toClass);\r\n-                removeTransitionClass(el, activeClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, startClass);\r\n-                }\r\n-                enterCancelledHook && enterCancelledHook(el);\r\n-            } else {\r\n-                afterEnterHook && afterEnterHook(el);\r\n-            }\r\n-            el._enterCb = null;\r\n-        });\r\n-\r\n-        if (!vnode.data.show) {\r\n-            \u002F\u002F remove pending leave element on enter by injecting an insert hook\r\n-            mergeVNodeHook(vnode, 'insert', function () {\r\n-                var parent = el.parentNode;\r\n-                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\r\n-                if (pendingNode &&\r\n-                    pendingNode.tag === vnode.tag &&\r\n-                    pendingNode.elm._leaveCb\r\n-                ) {\r\n-                    pendingNode.elm._leaveCb();\r\n-                }\r\n-                enterHook && enterHook(el, cb);\r\n-            });\r\n-        }\r\n-\r\n-        \u002F\u002F start enter transition\r\n-        beforeEnterHook && beforeEnterHook(el);\r\n-        if (expectsCSS) {\r\n-            addTransitionClass(el, startClass);\r\n-            addTransitionClass(el, activeClass);\r\n-            nextFrame(function () {\r\n-                removeTransitionClass(el, startClass);\r\n-                if (!cb.cancelled) {\r\n-                    addTransitionClass(el, toClass);\r\n-                    if (!userWantsControl) {\r\n-                        if (isValidDuration(explicitEnterDuration)) {\r\n-                            setTimeout(cb, explicitEnterDuration);\r\n-                        } else {\r\n-                            whenTransitionEnds(el, type, cb);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (vnode.data.show) {\r\n-            toggleDisplay && toggleDisplay();\r\n-            enterHook && enterHook(el, cb);\r\n-        }\r\n-\r\n-        if (!expectsCSS && !userWantsControl) {\r\n-            cb();\r\n-        }\r\n-    }\r\n-\r\n-    function leave (vnode, rm) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call enter callback now\r\n-        if (isDef(el._enterCb)) {\r\n-            el._enterCb.cancelled = true;\r\n-            el._enterCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data) || el.nodeType !== 1) {\r\n-            return rm()\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._leaveCb)) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var leaveClass = data.leaveClass;\r\n-        var leaveToClass = data.leaveToClass;\r\n-        var leaveActiveClass = data.leaveActiveClass;\r\n-        var beforeLeave = data.beforeLeave;\r\n-        var leave = data.leave;\r\n-        var afterLeave = data.afterLeave;\r\n-        var leaveCancelled = data.leaveCancelled;\r\n-        var delayLeave = data.delayLeave;\r\n-        var duration = data.duration;\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(leave);\r\n-\r\n-        var explicitLeaveDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.leave\r\n-                : duration\r\n-        );\r\n-\r\n-        if (isDef(explicitLeaveDuration)) {\r\n-            checkDuration(explicitLeaveDuration, 'leave', vnode);\r\n-        }\r\n-\r\n-        var cb = el._leaveCb = once(function () {\r\n-            if (el.parentNode && el.parentNode._pending) {\r\n-                el.parentNode._pending[vnode.key] = null;\r\n-            }\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, leaveToClass);\r\n-                removeTransitionClass(el, leaveActiveClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                }\r\n-                leaveCancelled && leaveCancelled(el);\r\n-            } else {\r\n-                rm();\r\n-                afterLeave && afterLeave(el);\r\n-            }\r\n-            el._leaveCb = null;\r\n-        });\r\n-\r\n-        if (delayLeave) {\r\n-            delayLeave(performLeave);\r\n-        } else {\r\n-            performLeave();\r\n-        }\r\n-\r\n-        function performLeave () {\r\n-            \u002F\u002F the delayed leave may have already been cancelled\r\n-            if (cb.cancelled) {\r\n-                return\r\n-            }\r\n-            \u002F\u002F record leaving element\r\n-            if (!vnode.data.show && el.parentNode) {\r\n-                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\r\n-            }\r\n-            beforeLeave && beforeLeave(el);\r\n-            if (expectsCSS) {\r\n-                addTransitionClass(el, leaveClass);\r\n-                addTransitionClass(el, leaveActiveClass);\r\n-                nextFrame(function () {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                    if (!cb.cancelled) {\r\n-                        addTransitionClass(el, leaveToClass);\r\n-                        if (!userWantsControl) {\r\n-                            if (isValidDuration(explicitLeaveDuration)) {\r\n-                                setTimeout(cb, explicitLeaveDuration);\r\n-                            } else {\r\n-                                whenTransitionEnds(el, type, cb);\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                });\r\n-            }\r\n-            leave && leave(el, cb);\r\n-            if (!expectsCSS && !userWantsControl) {\r\n-                cb();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F only used in dev mode\r\n-    function checkDuration (val, name, vnode) {\r\n-        if (typeof val !== 'number') {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\r\n-                \"got \" + (JSON.stringify(val)) + \".\",\r\n-                vnode.context\r\n-            );\r\n-        } else if (isNaN(val)) {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\r\n-                'the duration expression might be incorrect.',\r\n-                vnode.context\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function isValidDuration (val) {\r\n-        return typeof val === 'number' && !isNaN(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize a transition hook's argument length. The hook may be:\r\n-     * - a merged hook (invoker) with the original in .fns\r\n-     * - a wrapped component method (check ._length)\r\n-     * - a plain function (.length)\r\n-     *\u002F\r\n-    function getHookArgumentsLength (fn) {\r\n-        if (isUndef(fn)) {\r\n-            return false\r\n-        }\r\n-        var invokerFns = fn.fns;\r\n-        if (isDef(invokerFns)) {\r\n-            \u002F\u002F invoker\r\n-            return getHookArgumentsLength(\r\n-                Array.isArray(invokerFns)\r\n-                    ? invokerFns[0]\r\n-                    : invokerFns\r\n-            )\r\n-        } else {\r\n-            return (fn._length || fn.length) > 1\r\n-        }\r\n-    }\r\n-\r\n-    function _enter (_, vnode) {\r\n-        if (vnode.data.show !== true) {\r\n-            enter(vnode);\r\n-        }\r\n-    }\r\n-\r\n-    var transition = inBrowser ? {\r\n-        create: _enter,\r\n-        activate: _enter,\r\n-        remove: function remove$$1 (vnode, rm) {\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            if (vnode.data.show !== true) {\r\n-                leave(vnode, rm);\r\n-            } else {\r\n-                rm();\r\n-            }\r\n-        }\r\n-    } : {};\r\n-\r\n-    var platformModules = [\r\n-        attrs,\r\n-        klass,\r\n-        events,\r\n-        domProps,\r\n-        style,\r\n-        transition\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F the directive module should be applied last, after all\r\n-    \u002F\u002F built-in modules have been applied.\r\n-    var modules = platformModules.concat(baseModules);\r\n-\r\n-    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\r\n-\r\n-    \u002F**\r\n-     * Not type checking this file because flow doesn't like attaching\r\n-     * properties to Elements.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore if *\u002F\r\n-    if (isIE9) {\r\n-        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\r\n-        document.addEventListener('selectionchange', function () {\r\n-            var el = document.activeElement;\r\n-            if (el && el.vmodel) {\r\n-                trigger(el, 'input');\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    var directive = {\r\n-        inserted: function inserted (el, binding, vnode, oldVnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                \u002F\u002F #6903\r\n-                if (oldVnode.elm && !oldVnode.elm._vOptions) {\r\n-                    mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                        directive.componentUpdated(el, binding, vnode);\r\n-                    });\r\n-                } else {\r\n-                    setSelected(el, binding, vnode.context);\r\n-                }\r\n-                el._vOptions = [].map.call(el.options, getValue);\r\n-            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\r\n-                el._vModifiers = binding.modifiers;\r\n-                if (!binding.modifiers.lazy) {\r\n-                    el.addEventListener('compositionstart', onCompositionStart);\r\n-                    el.addEventListener('compositionend', onCompositionEnd);\r\n-                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\r\n-                    \u002F\u002F switching focus before confirming composition choice\r\n-                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\r\n-                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\r\n-                    el.addEventListener('change', onCompositionEnd);\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (isIE9) {\r\n-                        el.vmodel = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        componentUpdated: function componentUpdated (el, binding, vnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                setSelected(el, binding, vnode.context);\r\n-                \u002F\u002F in case the options rendered by v-for have changed,\r\n-                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\r\n-                \u002F\u002F detect such cases and filter out values that no longer has a matching\r\n-                \u002F\u002F option in the DOM.\r\n-                var prevOptions = el._vOptions;\r\n-                var curOptions = el._vOptions = [].map.call(el.options, getValue);\r\n-                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\r\n-                    \u002F\u002F trigger change event if\r\n-                    \u002F\u002F no matching option found for at least one value\r\n-                    var needReset = el.multiple\r\n-                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\r\n-                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\r\n-                    if (needReset) {\r\n-                        trigger(el, 'change');\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function setSelected (el, binding, vm) {\r\n-        actuallySetSelected(el, binding, vm);\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isIE || isEdge) {\r\n-            setTimeout(function () {\r\n-                actuallySetSelected(el, binding, vm);\r\n-            }, 0);\r\n-        }\r\n-    }\r\n-\r\n-    function actuallySetSelected (el, binding, vm) {\r\n-        var value = binding.value;\r\n-        var isMultiple = el.multiple;\r\n-        if (isMultiple && !Array.isArray(value)) {\r\n-            warn(\r\n-                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\r\n-                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var selected, option;\r\n-        for (var i = 0, l = el.options.length; i \u003C l; i++) {\r\n-            option = el.options[i];\r\n-            if (isMultiple) {\r\n-                selected = looseIndexOf(value, getValue(option)) > -1;\r\n-                if (option.selected !== selected) {\r\n-                    option.selected = selected;\r\n-                }\r\n-            } else {\r\n-                if (looseEqual(getValue(option), value)) {\r\n-                    if (el.selectedIndex !== i) {\r\n-                        el.selectedIndex = i;\r\n-                    }\r\n-                    return\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isMultiple) {\r\n-            el.selectedIndex = -1;\r\n-        }\r\n-    }\r\n-\r\n-    function hasNoMatchingOption (value, options) {\r\n-        return options.every(function (o) { return !looseEqual(o, value); })\r\n-    }\r\n-\r\n-    function getValue (option) {\r\n-        return '_value' in option\r\n-            ? option._value\r\n-            : option.value\r\n-    }\r\n-\r\n-    function onCompositionStart (e) {\r\n-        e.target.composing = true;\r\n-    }\r\n-\r\n-    function onCompositionEnd (e) {\r\n-        \u002F\u002F prevent triggering an input event for no reason\r\n-        if (!e.target.composing) { return }\r\n-        e.target.composing = false;\r\n-        trigger(e.target, 'input');\r\n-    }\r\n-\r\n-    function trigger (el, type) {\r\n-        var e = document.createEvent('HTMLEvents');\r\n-        e.initEvent(type, true, true);\r\n-        el.dispatchEvent(e);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F recursively search for possible transition defined inside the component root\r\n-    function locateNode (vnode) {\r\n-        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\r\n-            ? locateNode(vnode.componentInstance._vnode)\r\n-            : vnode\r\n-    }\r\n-\r\n-    var show = {\r\n-        bind: function bind (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            var originalDisplay = el.__vOriginalDisplay =\r\n-                el.style.display === 'none' ? '' : el.style.display;\r\n-            if (value && transition$$1) {\r\n-                vnode.data.show = true;\r\n-                enter(vnode, function () {\r\n-                    el.style.display = originalDisplay;\r\n-                });\r\n-            } else {\r\n-                el.style.display = value ? originalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        update: function update (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-            var oldValue = ref.oldValue;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!value === !oldValue) { return }\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            if (transition$$1) {\r\n-                vnode.data.show = true;\r\n-                if (value) {\r\n-                    enter(vnode, function () {\r\n-                        el.style.display = el.__vOriginalDisplay;\r\n-                    });\r\n-                } else {\r\n-                    leave(vnode, function () {\r\n-                        el.style.display = 'none';\r\n-                    });\r\n-                }\r\n-            } else {\r\n-                el.style.display = value ? el.__vOriginalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        unbind: function unbind (\r\n-            el,\r\n-            binding,\r\n-            vnode,\r\n-            oldVnode,\r\n-            isDestroy\r\n-        ) {\r\n-            if (!isDestroy) {\r\n-                el.style.display = el.__vOriginalDisplay;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var platformDirectives = {\r\n-        model: directive,\r\n-        show: show\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var transitionProps = {\r\n-        name: String,\r\n-        appear: Boolean,\r\n-        css: Boolean,\r\n-        mode: String,\r\n-        type: String,\r\n-        enterClass: String,\r\n-        leaveClass: String,\r\n-        enterToClass: String,\r\n-        leaveToClass: String,\r\n-        enterActiveClass: String,\r\n-        leaveActiveClass: String,\r\n-        appearClass: String,\r\n-        appearActiveClass: String,\r\n-        appearToClass: String,\r\n-        duration: [Number, String, Object]\r\n-    };\r\n-\r\n-    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\r\n-    \u002F\u002F we want to recursively retrieve the real component to be rendered\r\n-    function getRealChild (vnode) {\r\n-        var compOptions = vnode && vnode.componentOptions;\r\n-        if (compOptions && compOptions.Ctor.options.abstract) {\r\n-            return getRealChild(getFirstComponentChild(compOptions.children))\r\n-        } else {\r\n-            return vnode\r\n-        }\r\n-    }\r\n-\r\n-    function extractTransitionData (comp) {\r\n-        var data = {};\r\n-        var options = comp.$options;\r\n-        \u002F\u002F props\r\n-        for (var key in options.propsData) {\r\n-            data[key] = comp[key];\r\n-        }\r\n-        \u002F\u002F events.\r\n-        \u002F\u002F extract listeners and pass them directly to the transition methods\r\n-        var listeners = options._parentListeners;\r\n-        for (var key$1 in listeners) {\r\n-            data[camelize(key$1)] = listeners[key$1];\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function placeholder (h, rawChild) {\r\n-        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\r\n-            return h('keep-alive', {\r\n-                props: rawChild.componentOptions.propsData\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-    function hasParentTransition (vnode) {\r\n-        while ((vnode = vnode.parent)) {\r\n-            if (vnode.data.transition) {\r\n-                return true\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isSameChild (child, oldChild) {\r\n-        return oldChild.key === child.key && oldChild.tag === child.tag\r\n-    }\r\n-\r\n-    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\r\n-\r\n-    var isVShowDirective = function (d) { return d.name === 'show'; };\r\n-\r\n-    var Transition = {\r\n-        name: 'transition',\r\n-        props: transitionProps,\r\n-        abstract: true,\r\n-\r\n-        render: function render (h) {\r\n-            var this$1 = this;\r\n-\r\n-            var children = this.$slots.default;\r\n-            if (!children) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F filter out text nodes (possible whitespaces)\r\n-            children = children.filter(isNotTextNode);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!children.length) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F warn multiple elements\r\n-            if (children.length > 1) {\r\n-                warn(\r\n-                    '\u003Ctransition> can only be used on a single element. Use ' +\r\n-                    '\u003Ctransition-group> for lists.',\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var mode = this.mode;\r\n-\r\n-            \u002F\u002F warn invalid mode\r\n-            if (mode && mode !== 'in-out' && mode !== 'out-in'\r\n-            ) {\r\n-                warn(\r\n-                    'invalid \u003Ctransition> mode: ' + mode,\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var rawChild = children[0];\r\n-\r\n-            \u002F\u002F if this is a component root node and the component's\r\n-            \u002F\u002F parent container node also has transition, skip.\r\n-            if (hasParentTransition(this.$vnode)) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            \u002F\u002F apply transition data to child\r\n-            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\r\n-            var child = getRealChild(rawChild);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!child) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            if (this._leaving) {\r\n-                return placeholder(h, rawChild)\r\n-            }\r\n-\r\n-            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\r\n-            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\r\n-            \u002F\u002F during entering.\r\n-            var id = \"__transition-\" + (this._uid) + \"-\";\r\n-            child.key = child.key == null\r\n-                ? child.isComment\r\n-                    ? id + 'comment'\r\n-                    : id + child.tag\r\n-                : isPrimitive(child.key)\r\n-                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\r\n-                    : child.key;\r\n-\r\n-            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\r\n-            var oldRawChild = this._vnode;\r\n-            var oldChild = getRealChild(oldRawChild);\r\n-\r\n-            \u002F\u002F mark v-show\r\n-            \u002F\u002F so that the transition module can hand over the control to the directive\r\n-            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\r\n-                child.data.show = true;\r\n-            }\r\n-\r\n-            if (\r\n-                oldChild &&\r\n-                oldChild.data &&\r\n-                !isSameChild(child, oldChild) &&\r\n-                !isAsyncPlaceholder(oldChild) &&\r\n-                \u002F\u002F #6687 component root is a comment node\r\n-                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\r\n-            ) {\r\n-                \u002F\u002F replace old child transition data with fresh one\r\n-                \u002F\u002F important for dynamic transitions!\r\n-                var oldData = oldChild.data.transition = extend({}, data);\r\n-                \u002F\u002F handle transition mode\r\n-                if (mode === 'out-in') {\r\n-                    \u002F\u002F return placeholder node and queue update when leave finishes\r\n-                    this._leaving = true;\r\n-                    mergeVNodeHook(oldData, 'afterLeave', function () {\r\n-                        this$1._leaving = false;\r\n-                        this$1.$forceUpdate();\r\n-                    });\r\n-                    return placeholder(h, rawChild)\r\n-                } else if (mode === 'in-out') {\r\n-                    if (isAsyncPlaceholder(child)) {\r\n-                        return oldRawChild\r\n-                    }\r\n-                    var delayedLeave;\r\n-                    var performLeave = function () { delayedLeave(); };\r\n-                    mergeVNodeHook(data, 'afterEnter', performLeave);\r\n-                    mergeVNodeHook(data, 'enterCancelled', performLeave);\r\n-                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\r\n-                }\r\n-            }\r\n-\r\n-            return rawChild\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var props = extend({\r\n-        tag: String,\r\n-        moveClass: String\r\n-    }, transitionProps);\r\n-\r\n-    delete props.mode;\r\n-\r\n-    var TransitionGroup = {\r\n-        props: props,\r\n-\r\n-        beforeMount: function beforeMount () {\r\n-            var this$1 = this;\r\n-\r\n-            var update = this._update;\r\n-            this._update = function (vnode, hydrating) {\r\n-                var restoreActiveInstance = setActiveInstance(this$1);\r\n-                \u002F\u002F force removing pass\r\n-                this$1.__patch__(\r\n-                    this$1._vnode,\r\n-                    this$1.kept,\r\n-                    false, \u002F\u002F hydrating\r\n-                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\r\n-                );\r\n-                this$1._vnode = this$1.kept;\r\n-                restoreActiveInstance();\r\n-                update.call(this$1, vnode, hydrating);\r\n-            };\r\n-        },\r\n-\r\n-        render: function render (h) {\r\n-            var tag = this.tag || this.$vnode.data.tag || 'span';\r\n-            var map = Object.create(null);\r\n-            var prevChildren = this.prevChildren = this.children;\r\n-            var rawChildren = this.$slots.default || [];\r\n-            var children = this.children = [];\r\n-            var transitionData = extractTransitionData(this);\r\n-\r\n-            for (var i = 0; i \u003C rawChildren.length; i++) {\r\n-                var c = rawChildren[i];\r\n-                if (c.tag) {\r\n-                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\r\n-                        children.push(c);\r\n-                        map[c.key] = c\r\n-                        ;(c.data || (c.data = {})).transition = transitionData;\r\n-                    } else {\r\n-                        var opts = c.componentOptions;\r\n-                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\r\n-                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            if (prevChildren) {\r\n-                var kept = [];\r\n-                var removed = [];\r\n-                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\r\n-                    var c$1 = prevChildren[i$1];\r\n-                    c$1.data.transition = transitionData;\r\n-                    c$1.data.pos = c$1.elm.getBoundingClientRect();\r\n-                    if (map[c$1.key]) {\r\n-                        kept.push(c$1);\r\n-                    } else {\r\n-                        removed.push(c$1);\r\n-                    }\r\n-                }\r\n-                this.kept = h(tag, null, kept);\r\n-                this.removed = removed;\r\n-            }\r\n-\r\n-            return h(tag, null, children)\r\n-        },\r\n-\r\n-        updated: function updated () {\r\n-            var children = this.prevChildren;\r\n-            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\r\n-            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\r\n-            \u002F\u002F in each iteration - which helps prevent layout thrashing.\r\n-            children.forEach(callPendingCbs);\r\n-            children.forEach(recordPosition);\r\n-            children.forEach(applyTranslation);\r\n-\r\n-            \u002F\u002F force reflow to put everything in position\r\n-            \u002F\u002F assign to this to avoid being removed in tree-shaking\r\n-            \u002F\u002F $flow-disable-line\r\n-            this._reflow = document.body.offsetHeight;\r\n-\r\n-            children.forEach(function (c) {\r\n-                if (c.data.moved) {\r\n-                    var el = c.elm;\r\n-                    var s = el.style;\r\n-                    addTransitionClass(el, moveClass);\r\n-                    s.transform = s.WebkitTransform = s.transitionDuration = '';\r\n-                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\r\n-                        if (e && e.target !== el) {\r\n-                            return\r\n-                        }\r\n-                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\r\n-                            el.removeEventListener(transitionEndEvent, cb);\r\n-                            el._moveCb = null;\r\n-                            removeTransitionClass(el, moveClass);\r\n-                        }\r\n-                    });\r\n-                }\r\n-            });\r\n-        },\r\n-\r\n-        methods: {\r\n-            hasMove: function hasMove (el, moveClass) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (!hasTransition) {\r\n-                    return false\r\n-                }\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (this._hasMove) {\r\n-                    return this._hasMove\r\n-                }\r\n-                \u002F\u002F Detect whether an element with the move class applied has\r\n-                \u002F\u002F CSS transitions. Since the element may be inside an entering\r\n-                \u002F\u002F transition at this very moment, we make a clone of it and remove\r\n-                \u002F\u002F all other transition classes applied to ensure only the move class\r\n-                \u002F\u002F is applied.\r\n-                var clone = el.cloneNode();\r\n-                if (el._transitionClasses) {\r\n-                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\r\n-                }\r\n-                addClass(clone, moveClass);\r\n-                clone.style.display = 'none';\r\n-                this.$el.appendChild(clone);\r\n-                var info = getTransitionInfo(clone);\r\n-                this.$el.removeChild(clone);\r\n-                return (this._hasMove = info.hasTransform)\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function callPendingCbs (c) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._moveCb) {\r\n-            c.elm._moveCb();\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._enterCb) {\r\n-            c.elm._enterCb();\r\n-        }\r\n-    }\r\n-\r\n-    function recordPosition (c) {\r\n-        c.data.newPos = c.elm.getBoundingClientRect();\r\n-    }\r\n-\r\n-    function applyTranslation (c) {\r\n-        var oldPos = c.data.pos;\r\n-        var newPos = c.data.newPos;\r\n-        var dx = oldPos.left - newPos.left;\r\n-        var dy = oldPos.top - newPos.top;\r\n-        if (dx || dy) {\r\n-            c.data.moved = true;\r\n-            var s = c.elm.style;\r\n-            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\r\n-            s.transitionDuration = '0s';\r\n-        }\r\n-    }\r\n-\r\n-    var platformComponents = {\r\n-        Transition: Transition,\r\n-        TransitionGroup: TransitionGroup\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F install platform specific utils\r\n-    Vue.config.mustUseProp = mustUseProp;\r\n-    Vue.config.isReservedTag = isReservedTag;\r\n-    Vue.config.isReservedAttr = isReservedAttr;\r\n-    Vue.config.getTagNamespace = getTagNamespace;\r\n-    Vue.config.isUnknownElement = isUnknownElement;\r\n-\r\n-    \u002F\u002F install platform runtime directives & components\r\n-    extend(Vue.options.directives, platformDirectives);\r\n-    extend(Vue.options.components, platformComponents);\r\n-\r\n-    \u002F\u002F install platform patch function\r\n-    Vue.prototype.__patch__ = inBrowser ? patch : noop;\r\n-\r\n-    \u002F\u002F public mount method\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && inBrowser ? query(el) : undefined;\r\n-        return mountComponent(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F\u002F devtools global hook\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    if (inBrowser) {\r\n-        setTimeout(function () {\r\n-            if (config.devtools) {\r\n-                if (devtools) {\r\n-                    devtools.emit('init', Vue);\r\n-                } else {\r\n-                    console[console.info ? 'info' : 'log'](\r\n-                        'Download the Vue Devtools extension for a better development experience:\\n' +\r\n-                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (config.productionTip !== false &&\r\n-                typeof console !== 'undefined'\r\n-            ) {\r\n-                console[console.info ? 'info' : 'log'](\r\n-                    \"You are running Vue in development mode.\\n\" +\r\n-                    \"Make sure to turn on production mode when deploying for production.\\n\" +\r\n-                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\r\n-                );\r\n-            }\r\n-        }, 0);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\r\n-    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\r\n-\r\n-    var buildRegex = cached(function (delimiters) {\r\n-        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\r\n-        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\r\n-        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\r\n-    });\r\n-\r\n-\r\n-\r\n-    function parseText (\r\n-        text,\r\n-        delimiters\r\n-    ) {\r\n-        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\r\n-        if (!tagRE.test(text)) {\r\n-            return\r\n-        }\r\n-        var tokens = [];\r\n-        var rawTokens = [];\r\n-        var lastIndex = tagRE.lastIndex = 0;\r\n-        var match, index, tokenValue;\r\n-        while ((match = tagRE.exec(text))) {\r\n-            index = match.index;\r\n-            \u002F\u002F push text token\r\n-            if (index > lastIndex) {\r\n-                rawTokens.push(tokenValue = text.slice(lastIndex, index));\r\n-                tokens.push(JSON.stringify(tokenValue));\r\n-            }\r\n-            \u002F\u002F tag token\r\n-            var exp = parseFilters(match[1].trim());\r\n-            tokens.push((\"_s(\" + exp + \")\"));\r\n-            rawTokens.push({ '@binding': exp });\r\n-            lastIndex = index + match[0].length;\r\n-        }\r\n-        if (lastIndex \u003C text.length) {\r\n-            rawTokens.push(tokenValue = text.slice(lastIndex));\r\n-            tokens.push(JSON.stringify(tokenValue));\r\n-        }\r\n-        return {\r\n-            expression: tokens.join('+'),\r\n-            tokens: rawTokens\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticClass = getAndRemoveAttr(el, 'class');\r\n-        if (staticClass) {\r\n-            var res = parseText(staticClass, options.delimiters);\r\n-            if (res) {\r\n-                warn(\r\n-                    \"class=\\\"\" + staticClass + \"\\\": \" +\r\n-                    'Interpolation inside attributes has been removed. ' +\r\n-                    'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\r\n-                    el.rawAttrsMap['class']\r\n-                );\r\n-            }\r\n-        }\r\n-        if (staticClass) {\r\n-            el.staticClass = JSON.stringify(staticClass);\r\n-        }\r\n-        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\r\n-        if (classBinding) {\r\n-            el.classBinding = classBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData (el) {\r\n-        var data = '';\r\n-        if (el.staticClass) {\r\n-            data += \"staticClass:\" + (el.staticClass) + \",\";\r\n-        }\r\n-        if (el.classBinding) {\r\n-            data += \"class:\" + (el.classBinding) + \",\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var klass$1 = {\r\n-        staticKeys: ['staticClass'],\r\n-        transformNode: transformNode,\r\n-        genData: genData\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode$1 (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticStyle = getAndRemoveAttr(el, 'style');\r\n-        if (staticStyle) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                var res = parseText(staticStyle, options.delimiters);\r\n-                if (res) {\r\n-                    warn(\r\n-                        \"style=\\\"\" + staticStyle + \"\\\": \" +\r\n-                        'Interpolation inside attributes has been removed. ' +\r\n-                        'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\r\n-                        el.rawAttrsMap['style']\r\n-                    );\r\n-                }\r\n-            }\r\n-            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\r\n-        }\r\n-\r\n-        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\r\n-        if (styleBinding) {\r\n-            el.styleBinding = styleBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData$1 (el) {\r\n-        var data = '';\r\n-        if (el.staticStyle) {\r\n-            data += \"staticStyle:\" + (el.staticStyle) + \",\";\r\n-        }\r\n-        if (el.styleBinding) {\r\n-            data += \"style:(\" + (el.styleBinding) + \"),\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var style$1 = {\r\n-        staticKeys: ['staticStyle'],\r\n-        transformNode: transformNode$1,\r\n-        genData: genData$1\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var decoder;\r\n-\r\n-    var he = {\r\n-        decode: function decode (html) {\r\n-            decoder = decoder || document.createElement('div');\r\n-            decoder.innerHTML = html;\r\n-            return decoder.textContent\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUnaryTag = makeMap(\r\n-        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\r\n-        'link,meta,param,source,track,wbr'\r\n-    );\r\n-\r\n-    \u002F\u002F Elements that you can, intentionally, leave open\r\n-    \u002F\u002F (and which close themselves)\r\n-    var canBeLeftOpenTag = makeMap(\r\n-        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\r\n-    );\r\n-\r\n-    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\r\n-    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\r\n-    var isNonPhrasingTag = makeMap(\r\n-        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\r\n-        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\r\n-        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\r\n-        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\r\n-        'title,tr,track'\r\n-    );\r\n-\r\n-    \u002F**\r\n-     * Not type-checking this file because it's mostly vendor code.\r\n-     *\u002F\r\n-\r\n-        \u002F\u002F Regular Expressions for parsing tags and attributes\r\n-    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\r\n-    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\r\n-    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\r\n-    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\r\n-    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\r\n-    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\r\n-    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\r\n-    var comment = \u002F^\u003C!\\--\u002F;\r\n-    var conditionalComment = \u002F^\u003C!\\[\u002F;\r\n-\r\n-    \u002F\u002F Special Elements (can contain anything)\r\n-    var isPlainTextElement = makeMap('script,style,textarea', true);\r\n-    var reCache = {};\r\n-\r\n-    var decodingMap = {\r\n-        '&lt;': '\u003C',\r\n-        '&gt;': '>',\r\n-        '&quot;': '\"',\r\n-        '&amp;': '&',\r\n-        '&#10;': '\\n',\r\n-        '&#9;': '\\t',\r\n-        '&#39;': \"'\"\r\n-    };\r\n-    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\r\n-    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\r\n-\r\n-    \u002F\u002F #5992\r\n-    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\r\n-    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\r\n-\r\n-    function decodeAttr (value, shouldDecodeNewlines) {\r\n-        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\r\n-        return value.replace(re, function (match) { return decodingMap[match]; })\r\n-    }\r\n-\r\n-    function parseHTML (html, options) {\r\n-        var stack = [];\r\n-        var expectHTML = options.expectHTML;\r\n-        var isUnaryTag$$1 = options.isUnaryTag || no;\r\n-        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\r\n-        var index = 0;\r\n-        var last, lastTag;\r\n-        while (html) {\r\n-            last = html;\r\n-            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\r\n-            if (!lastTag || !isPlainTextElement(lastTag)) {\r\n-                var textEnd = html.indexOf('\u003C');\r\n-                if (textEnd === 0) {\r\n-                    \u002F\u002F Comment:\r\n-                    if (comment.test(html)) {\r\n-                        var commentEnd = html.indexOf('-->');\r\n-\r\n-                        if (commentEnd >= 0) {\r\n-                            if (options.shouldKeepComment) {\r\n-                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\r\n-                            }\r\n-                            advance(commentEnd + 3);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\r\n-                    if (conditionalComment.test(html)) {\r\n-                        var conditionalEnd = html.indexOf(']>');\r\n-\r\n-                        if (conditionalEnd >= 0) {\r\n-                            advance(conditionalEnd + 2);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F Doctype:\r\n-                    var doctypeMatch = html.match(doctype);\r\n-                    if (doctypeMatch) {\r\n-                        advance(doctypeMatch[0].length);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F End tag:\r\n-                    var endTagMatch = html.match(endTag);\r\n-                    if (endTagMatch) {\r\n-                        var curIndex = index;\r\n-                        advance(endTagMatch[0].length);\r\n-                        parseEndTag(endTagMatch[1], curIndex, index);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F Start tag:\r\n-                    var startTagMatch = parseStartTag();\r\n-                    if (startTagMatch) {\r\n-                        handleStartTag(startTagMatch);\r\n-                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\r\n-                            advance(1);\r\n-                        }\r\n-                        continue\r\n-                    }\r\n-                }\r\n-\r\n-                var text = (void 0), rest = (void 0), next = (void 0);\r\n-                if (textEnd >= 0) {\r\n-                    rest = html.slice(textEnd);\r\n-                    while (\r\n-                    !endTag.test(rest) &&\r\n-                    !startTagOpen.test(rest) &&\r\n-                    !comment.test(rest) &&\r\n-                    !conditionalComment.test(rest)\r\n-                        ) {\r\n-                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\r\n-                        next = rest.indexOf('\u003C', 1);\r\n-                        if (next \u003C 0) { break }\r\n-                        textEnd += next;\r\n-                        rest = html.slice(textEnd);\r\n-                    }\r\n-                    text = html.substring(0, textEnd);\r\n-                }\r\n-\r\n-                if (textEnd \u003C 0) {\r\n-                    text = html;\r\n-                }\r\n-\r\n-                if (text) {\r\n-                    advance(text.length);\r\n-                }\r\n-\r\n-                if (options.chars && text) {\r\n-                    options.chars(text, index - text.length, index);\r\n-                }\r\n-            } else {\r\n-                var endTagLength = 0;\r\n-                var stackedTag = lastTag.toLowerCase();\r\n-                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\r\n-                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\r\n-                    endTagLength = endTag.length;\r\n-                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\r\n-                        text = text\r\n-                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\r\n-                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\r\n-                    }\r\n-                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\r\n-                        text = text.slice(1);\r\n-                    }\r\n-                    if (options.chars) {\r\n-                        options.chars(text);\r\n-                    }\r\n-                    return ''\r\n-                });\r\n-                index += html.length - rest$1.length;\r\n-                html = rest$1;\r\n-                parseEndTag(stackedTag, index - endTagLength, index);\r\n-            }\r\n-\r\n-            if (html === last) {\r\n-                options.chars && options.chars(html);\r\n-                if (!stack.length && options.warn) {\r\n-                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F Clean up any remaining tags\r\n-        parseEndTag();\r\n-\r\n-        function advance (n) {\r\n-            index += n;\r\n-            html = html.substring(n);\r\n-        }\r\n-\r\n-        function parseStartTag () {\r\n-            var start = html.match(startTagOpen);\r\n-            if (start) {\r\n-                var match = {\r\n-                    tagName: start[1],\r\n-                    attrs: [],\r\n-                    start: index\r\n-                };\r\n-                advance(start[0].length);\r\n-                var end, attr;\r\n-                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\r\n-                    attr.start = index;\r\n-                    advance(attr[0].length);\r\n-                    attr.end = index;\r\n-                    match.attrs.push(attr);\r\n-                }\r\n-                if (end) {\r\n-                    match.unarySlash = end[1];\r\n-                    advance(end[0].length);\r\n-                    match.end = index;\r\n-                    return match\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function handleStartTag (match) {\r\n-            var tagName = match.tagName;\r\n-            var unarySlash = match.unarySlash;\r\n-\r\n-            if (expectHTML) {\r\n-                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\r\n-                    parseEndTag(lastTag);\r\n-                }\r\n-                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\r\n-                    parseEndTag(tagName);\r\n-                }\r\n-            }\r\n-\r\n-            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\r\n-\r\n-            var l = match.attrs.length;\r\n-            var attrs = new Array(l);\r\n-            for (var i = 0; i \u003C l; i++) {\r\n-                var args = match.attrs[i];\r\n-                var value = args[3] || args[4] || args[5] || '';\r\n-                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\r\n-                    ? options.shouldDecodeNewlinesForHref\r\n-                    : options.shouldDecodeNewlines;\r\n-                attrs[i] = {\r\n-                    name: args[1],\r\n-                    value: decodeAttr(value, shouldDecodeNewlines)\r\n-                };\r\n-                if (options.outputSourceRange) {\r\n-                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\r\n-                    attrs[i].end = args.end;\r\n-                }\r\n-            }\r\n-\r\n-            if (!unary) {\r\n-                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\r\n-                lastTag = tagName;\r\n-            }\r\n-\r\n-            if (options.start) {\r\n-                options.start(tagName, attrs, unary, match.start, match.end);\r\n-            }\r\n-        }\r\n-\r\n-        function parseEndTag (tagName, start, end) {\r\n-            var pos, lowerCasedTagName;\r\n-            if (start == null) { start = index; }\r\n-            if (end == null) { end = index; }\r\n-\r\n-            \u002F\u002F Find the closest opened tag of the same type\r\n-            if (tagName) {\r\n-                lowerCasedTagName = tagName.toLowerCase();\r\n-                for (pos = stack.length - 1; pos >= 0; pos--) {\r\n-                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\r\n-                        break\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F If no tag name is provided, clean shop\r\n-                pos = 0;\r\n-            }\r\n-\r\n-            if (pos >= 0) {\r\n-                \u002F\u002F Close all the open elements, up the stack\r\n-                for (var i = stack.length - 1; i >= pos; i--) {\r\n-                    if (i > pos || !tagName &&\r\n-                        options.warn\r\n-                    ) {\r\n-                        options.warn(\r\n-                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\r\n-                            { start: stack[i].start, end: stack[i].end }\r\n-                        );\r\n-                    }\r\n-                    if (options.end) {\r\n-                        options.end(stack[i].tag, start, end);\r\n-                    }\r\n-                }\r\n-\r\n-                \u002F\u002F Remove the open elements from the stack\r\n-                stack.length = pos;\r\n-                lastTag = pos && stack[pos - 1].tag;\r\n-            } else if (lowerCasedTagName === 'br') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], true, start, end);\r\n-                }\r\n-            } else if (lowerCasedTagName === 'p') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], false, start, end);\r\n-                }\r\n-                if (options.end) {\r\n-                    options.end(tagName, start, end);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var onRE = \u002F^@|^v-on:\u002F;\r\n-    var dirRE = \u002F^v-|^@|^:\u002F;\r\n-    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\r\n-    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\r\n-    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\r\n-    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\r\n-\r\n-    var argRE = \u002F:(.*)$\u002F;\r\n-    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\r\n-    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\r\n-\r\n-    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\r\n-\r\n-    var lineBreakRE = \u002F[\\r\\n]\u002F;\r\n-    var whitespaceRE$1 = \u002F\\s+\u002Fg;\r\n-\r\n-    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\r\n-\r\n-    var decodeHTMLCached = cached(he.decode);\r\n-\r\n-    var emptySlotScopeToken = \"_empty_\";\r\n-\r\n-    \u002F\u002F configurable state\r\n-    var warn$2;\r\n-    var delimiters;\r\n-    var transforms;\r\n-    var preTransforms;\r\n-    var postTransforms;\r\n-    var platformIsPreTag;\r\n-    var platformMustUseProp;\r\n-    var platformGetTagNamespace;\r\n-    var maybeComponent;\r\n-\r\n-    function createASTElement (\r\n-        tag,\r\n-        attrs,\r\n-        parent\r\n-    ) {\r\n-        return {\r\n-            type: 1,\r\n-            tag: tag,\r\n-            attrsList: attrs,\r\n-            attrsMap: makeAttrsMap(attrs),\r\n-            rawAttrsMap: {},\r\n-            parent: parent,\r\n-            children: []\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert HTML string to AST.\r\n-     *\u002F\r\n-    function parse (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        warn$2 = options.warn || baseWarn;\r\n-\r\n-        platformIsPreTag = options.isPreTag || no;\r\n-        platformMustUseProp = options.mustUseProp || no;\r\n-        platformGetTagNamespace = options.getTagNamespace || no;\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-\r\n-        transforms = pluckModuleFunction(options.modules, 'transformNode');\r\n-        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\r\n-        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\r\n-\r\n-        delimiters = options.delimiters;\r\n-\r\n-        var stack = [];\r\n-        var preserveWhitespace = options.preserveWhitespace !== false;\r\n-        var whitespaceOption = options.whitespace;\r\n-        var root;\r\n-        var currentParent;\r\n-        var inVPre = false;\r\n-        var inPre = false;\r\n-        var warned = false;\r\n-\r\n-        function warnOnce (msg, range) {\r\n-            if (!warned) {\r\n-                warned = true;\r\n-                warn$2(msg, range);\r\n-            }\r\n-        }\r\n-\r\n-        function closeElement (element) {\r\n-            trimEndingWhitespace(element);\r\n-            if (!inVPre && !element.processed) {\r\n-                element = processElement(element, options);\r\n-            }\r\n-            \u002F\u002F tree management\r\n-            if (!stack.length && element !== root) {\r\n-                \u002F\u002F allow root elements with v-if, v-else-if and v-else\r\n-                if (root.if && (element.elseif || element.else)) {\r\n-                    {\r\n-                        checkRootConstraints(element);\r\n-                    }\r\n-                    addIfCondition(root, {\r\n-                        exp: element.elseif,\r\n-                        block: element\r\n-                    });\r\n-                } else {\r\n-                    warnOnce(\r\n-                        \"Component template should contain exactly one root element. \" +\r\n-                        \"If you are using v-if on multiple elements, \" +\r\n-                        \"use v-else-if to chain them instead.\",\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (currentParent && !element.forbidden) {\r\n-                if (element.elseif || element.else) {\r\n-                    processIfConditions(element, currentParent);\r\n-                } else {\r\n-                    if (element.slotScope) {\r\n-                        \u002F\u002F scoped slot\r\n-                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\r\n-                        \u002F\u002F find it as the prev node.\r\n-                        var name = element.slotTarget || '\"default\"'\r\n-                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\r\n-                    }\r\n-                    currentParent.children.push(element);\r\n-                    element.parent = currentParent;\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F final children cleanup\r\n-            \u002F\u002F filter out scoped slots\r\n-            element.children = element.children.filter(function (c) { return !(c).slotScope; });\r\n-            \u002F\u002F remove trailing whitespace node again\r\n-            trimEndingWhitespace(element);\r\n-\r\n-            \u002F\u002F check pre state\r\n-            if (element.pre) {\r\n-                inVPre = false;\r\n-            }\r\n-            if (platformIsPreTag(element.tag)) {\r\n-                inPre = false;\r\n-            }\r\n-            \u002F\u002F apply post-transforms\r\n-            for (var i = 0; i \u003C postTransforms.length; i++) {\r\n-                postTransforms[i](element, options);\r\n-            }\r\n-        }\r\n-\r\n-        function trimEndingWhitespace (el) {\r\n-            \u002F\u002F remove trailing whitespace node\r\n-            if (!inPre) {\r\n-                var lastNode;\r\n-                while (\r\n-                (lastNode = el.children[el.children.length - 1]) &&\r\n-                lastNode.type === 3 &&\r\n-                lastNode.text === ' '\r\n-                    ) {\r\n-                    el.children.pop();\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function checkRootConstraints (el) {\r\n-            if (el.tag === 'slot' || el.tag === 'template') {\r\n-                warnOnce(\r\n-                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\r\n-                    'contain multiple nodes.',\r\n-                    { start: el.start }\r\n-                );\r\n-            }\r\n-            if (el.attrsMap.hasOwnProperty('v-for')) {\r\n-                warnOnce(\r\n-                    'Cannot use v-for on stateful component root element because ' +\r\n-                    'it renders multiple elements.',\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        parseHTML(template, {\r\n-            warn: warn$2,\r\n-            expectHTML: options.expectHTML,\r\n-            isUnaryTag: options.isUnaryTag,\r\n-            canBeLeftOpenTag: options.canBeLeftOpenTag,\r\n-            shouldDecodeNewlines: options.shouldDecodeNewlines,\r\n-            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\r\n-            shouldKeepComment: options.comments,\r\n-            outputSourceRange: options.outputSourceRange,\r\n-            start: function start (tag, attrs, unary, start$1, end) {\r\n-                \u002F\u002F check namespace.\r\n-                \u002F\u002F inherit parent ns if there is one\r\n-                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\r\n-\r\n-                \u002F\u002F handle IE svg bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE && ns === 'svg') {\r\n-                    attrs = guardIESVGBug(attrs);\r\n-                }\r\n-\r\n-                var element = createASTElement(tag, attrs, currentParent);\r\n-                if (ns) {\r\n-                    element.ns = ns;\r\n-                }\r\n-\r\n-                {\r\n-                    if (options.outputSourceRange) {\r\n-                        element.start = start$1;\r\n-                        element.end = end;\r\n-                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\r\n-                            cumulated[attr.name] = attr;\r\n-                            return cumulated\r\n-                        }, {});\r\n-                    }\r\n-                    attrs.forEach(function (attr) {\r\n-                        if (invalidAttributeRE.test(attr.name)) {\r\n-                            warn$2(\r\n-                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\r\n-                                \"spaces, quotes, \u003C, >, \u002F or =.\",\r\n-                                {\r\n-                                    start: attr.start + attr.name.indexOf(\"[\"),\r\n-                                    end: attr.start + attr.name.length\r\n-                                }\r\n-                            );\r\n-                        }\r\n-                    });\r\n-                }\r\n-\r\n-                if (isForbiddenTag(element) && !isServerRendering()) {\r\n-                    element.forbidden = true;\r\n-                    warn$2(\r\n-                        'Templates should only be responsible for mapping the state to the ' +\r\n-                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\r\n-                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-\r\n-                \u002F\u002F apply pre-transforms\r\n-                for (var i = 0; i \u003C preTransforms.length; i++) {\r\n-                    element = preTransforms[i](element, options) || element;\r\n-                }\r\n-\r\n-                if (!inVPre) {\r\n-                    processPre(element);\r\n-                    if (element.pre) {\r\n-                        inVPre = true;\r\n-                    }\r\n-                }\r\n-                if (platformIsPreTag(element.tag)) {\r\n-                    inPre = true;\r\n-                }\r\n-                if (inVPre) {\r\n-                    processRawAttrs(element);\r\n-                } else if (!element.processed) {\r\n-                    \u002F\u002F structural directives\r\n-                    processFor(element);\r\n-                    processIf(element);\r\n-                    processOnce(element);\r\n-                }\r\n-\r\n-                if (!root) {\r\n-                    root = element;\r\n-                    {\r\n-                        checkRootConstraints(root);\r\n-                    }\r\n-                }\r\n-\r\n-                if (!unary) {\r\n-                    currentParent = element;\r\n-                    stack.push(element);\r\n-                } else {\r\n-                    closeElement(element);\r\n-                }\r\n-            },\r\n-\r\n-            end: function end (tag, start, end$1) {\r\n-                var element = stack[stack.length - 1];\r\n-                \u002F\u002F pop stack\r\n-                stack.length -= 1;\r\n-                currentParent = stack[stack.length - 1];\r\n-                if (options.outputSourceRange) {\r\n-                    element.end = end$1;\r\n-                }\r\n-                closeElement(element);\r\n-            },\r\n-\r\n-            chars: function chars (text, start, end) {\r\n-                if (!currentParent) {\r\n-                    {\r\n-                        if (text === template) {\r\n-                            warnOnce(\r\n-                                'Component template requires a root element, rather than just text.',\r\n-                                { start: start }\r\n-                            );\r\n-                        } else if ((text = text.trim())) {\r\n-                            warnOnce(\r\n-                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\r\n-                                { start: start }\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    return\r\n-                }\r\n-                \u002F\u002F IE textarea placeholder bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE &&\r\n-                    currentParent.tag === 'textarea' &&\r\n-                    currentParent.attrsMap.placeholder === text\r\n-                ) {\r\n-                    return\r\n-                }\r\n-                var children = currentParent.children;\r\n-                if (inPre || text.trim()) {\r\n-                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\r\n-                } else if (!children.length) {\r\n-                    \u002F\u002F remove the whitespace-only node right after an opening tag\r\n-                    text = '';\r\n-                } else if (whitespaceOption) {\r\n-                    if (whitespaceOption === 'condense') {\r\n-                        \u002F\u002F in condense mode, remove the whitespace node if it contains\r\n-                        \u002F\u002F line break, otherwise condense to a single space\r\n-                        text = lineBreakRE.test(text) ? '' : ' ';\r\n-                    } else {\r\n-                        text = ' ';\r\n-                    }\r\n-                } else {\r\n-                    text = preserveWhitespace ? ' ' : '';\r\n-                }\r\n-                if (text) {\r\n-                    if (!inPre && whitespaceOption === 'condense') {\r\n-                        \u002F\u002F condense consecutive whitespaces into single space\r\n-                        text = text.replace(whitespaceRE$1, ' ');\r\n-                    }\r\n-                    var res;\r\n-                    var child;\r\n-                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\r\n-                        child = {\r\n-                            type: 2,\r\n-                            expression: res.expression,\r\n-                            tokens: res.tokens,\r\n-                            text: text\r\n-                        };\r\n-                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\r\n-                        child = {\r\n-                            type: 3,\r\n-                            text: text\r\n-                        };\r\n-                    }\r\n-                    if (child) {\r\n-                        if (options.outputSourceRange) {\r\n-                            child.start = start;\r\n-                            child.end = end;\r\n-                        }\r\n-                        children.push(child);\r\n-                    }\r\n-                }\r\n-            },\r\n-            comment: function comment (text, start, end) {\r\n-                \u002F\u002F adding anyting as a sibling to the root node is forbidden\r\n-                \u002F\u002F comments should still be allowed, but ignored\r\n-                if (currentParent) {\r\n-                    var child = {\r\n-                        type: 3,\r\n-                        text: text,\r\n-                        isComment: true\r\n-                    };\r\n-                    if (options.outputSourceRange) {\r\n-                        child.start = start;\r\n-                        child.end = end;\r\n-                    }\r\n-                    currentParent.children.push(child);\r\n-                }\r\n-            }\r\n-        });\r\n-        return root\r\n-    }\r\n-\r\n-    function processPre (el) {\r\n-        if (getAndRemoveAttr(el, 'v-pre') != null) {\r\n-            el.pre = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processRawAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var len = list.length;\r\n-        if (len) {\r\n-            var attrs = el.attrs = new Array(len);\r\n-            for (var i = 0; i \u003C len; i++) {\r\n-                attrs[i] = {\r\n-                    name: list[i].name,\r\n-                    value: JSON.stringify(list[i].value)\r\n-                };\r\n-                if (list[i].start != null) {\r\n-                    attrs[i].start = list[i].start;\r\n-                    attrs[i].end = list[i].end;\r\n-                }\r\n-            }\r\n-        } else if (!el.pre) {\r\n-            \u002F\u002F non root node in pre blocks with no attributes\r\n-            el.plain = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processElement (\r\n-        element,\r\n-        options\r\n-    ) {\r\n-        processKey(element);\r\n-\r\n-        \u002F\u002F determine whether this is a plain element after\r\n-        \u002F\u002F removing structural attributes\r\n-        element.plain = (\r\n-            !element.key &&\r\n-            !element.scopedSlots &&\r\n-            !element.attrsList.length\r\n-        );\r\n-\r\n-        processRef(element);\r\n-        processSlotContent(element);\r\n-        processSlotOutlet(element);\r\n-        processComponent(element);\r\n-        for (var i = 0; i \u003C transforms.length; i++) {\r\n-            element = transforms[i](element, options) || element;\r\n-        }\r\n-        processAttrs(element);\r\n-        return element\r\n-    }\r\n-\r\n-    function processKey (el) {\r\n-        var exp = getBindingAttr(el, 'key');\r\n-        if (exp) {\r\n-            {\r\n-                if (el.tag === 'template') {\r\n-                    warn$2(\r\n-                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\r\n-                        getRawBindingAttr(el, 'key')\r\n-                    );\r\n-                }\r\n-                if (el.for) {\r\n-                    var iterator = el.iterator2 || el.iterator1;\r\n-                    var parent = el.parent;\r\n-                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\r\n-                        warn$2(\r\n-                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\r\n-                            \"this is the same as not using keys.\",\r\n-                            getRawBindingAttr(el, 'key'),\r\n-                            true \u002F* tip *\u002F\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-            el.key = exp;\r\n-        }\r\n-    }\r\n-\r\n-    function processRef (el) {\r\n-        var ref = getBindingAttr(el, 'ref');\r\n-        if (ref) {\r\n-            el.ref = ref;\r\n-            el.refInFor = checkInFor(el);\r\n-        }\r\n-    }\r\n-\r\n-    function processFor (el) {\r\n-        var exp;\r\n-        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\r\n-            var res = parseFor(exp);\r\n-            if (res) {\r\n-                extend(el, res);\r\n-            } else {\r\n-                warn$2(\r\n-                    (\"Invalid v-for expression: \" + exp),\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-\r\n-    function parseFor (exp) {\r\n-        var inMatch = exp.match(forAliasRE);\r\n-        if (!inMatch) { return }\r\n-        var res = {};\r\n-        res.for = inMatch[2].trim();\r\n-        var alias = inMatch[1].trim().replace(stripParensRE, '');\r\n-        var iteratorMatch = alias.match(forIteratorRE);\r\n-        if (iteratorMatch) {\r\n-            res.alias = alias.replace(forIteratorRE, '').trim();\r\n-            res.iterator1 = iteratorMatch[1].trim();\r\n-            if (iteratorMatch[2]) {\r\n-                res.iterator2 = iteratorMatch[2].trim();\r\n-            }\r\n-        } else {\r\n-            res.alias = alias;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function processIf (el) {\r\n-        var exp = getAndRemoveAttr(el, 'v-if');\r\n-        if (exp) {\r\n-            el.if = exp;\r\n-            addIfCondition(el, {\r\n-                exp: exp,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            if (getAndRemoveAttr(el, 'v-else') != null) {\r\n-                el.else = true;\r\n-            }\r\n-            var elseif = getAndRemoveAttr(el, 'v-else-if');\r\n-            if (elseif) {\r\n-                el.elseif = elseif;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processIfConditions (el, parent) {\r\n-        var prev = findPrevElement(parent.children);\r\n-        if (prev && prev.if) {\r\n-            addIfCondition(prev, {\r\n-                exp: el.elseif,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            warn$2(\r\n-                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\r\n-                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\r\n-                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function findPrevElement (children) {\r\n-        var i = children.length;\r\n-        while (i--) {\r\n-            if (children[i].type === 1) {\r\n-                return children[i]\r\n-            } else {\r\n-                if (children[i].text !== ' ') {\r\n-                    warn$2(\r\n-                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\r\n-                        \"will be ignored.\",\r\n-                        children[i]\r\n-                    );\r\n-                }\r\n-                children.pop();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function addIfCondition (el, condition) {\r\n-        if (!el.ifConditions) {\r\n-            el.ifConditions = [];\r\n-        }\r\n-        el.ifConditions.push(condition);\r\n-    }\r\n-\r\n-    function processOnce (el) {\r\n-        var once$$1 = getAndRemoveAttr(el, 'v-once');\r\n-        if (once$$1 != null) {\r\n-            el.once = true;\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F handle content being passed to a component as slot,\r\n-    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\r\n-    function processSlotContent (el) {\r\n-        var slotScope;\r\n-        if (el.tag === 'template') {\r\n-            slotScope = getAndRemoveAttr(el, 'scope');\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (slotScope) {\r\n-                warn$2(\r\n-                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\r\n-                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\r\n-                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\r\n-                    \"denote scoped slots.\",\r\n-                    el.rawAttrsMap['scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\r\n-        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (el.attrsMap['v-for']) {\r\n-                warn$2(\r\n-                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\r\n-                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\r\n-                    \"scoped slot to make it clearer.\",\r\n-                    el.rawAttrsMap['slot-scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope;\r\n-        }\r\n-\r\n-        \u002F\u002F slot=\"xxx\"\r\n-        var slotTarget = getBindingAttr(el, 'slot');\r\n-        if (slotTarget) {\r\n-            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\r\n-            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\r\n-            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\r\n-            \u002F\u002F only for non-scoped slots.\r\n-            if (el.tag !== 'template' && !el.slotScope) {\r\n-                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F 2.6 v-slot syntax\r\n-        {\r\n-            if (el.tag === 'template') {\r\n-                \u002F\u002F v-slot on \u003Ctemplate>\r\n-                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding) {\r\n-                    {\r\n-                        if (el.slotTarget || el.slotScope) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.parent && !maybeComponent(el.parent)) {\r\n-                            warn$2(\r\n-                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\r\n-                                \"the receiving the component\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    var ref = getSlotName(slotBinding);\r\n-                    var name = ref.name;\r\n-                    var dynamic = ref.dynamic;\r\n-                    el.slotTarget = name;\r\n-                    el.slotTargetDynamic = dynamic;\r\n-                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F v-slot on component, denotes default slot\r\n-                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding$1) {\r\n-                    {\r\n-                        if (!maybeComponent(el)) {\r\n-                            warn$2(\r\n-                                \"v-slot can only be used on components or \u003Ctemplate>.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                        if (el.slotScope || el.slotTarget) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.scopedSlots) {\r\n-                            warn$2(\r\n-                                \"To avoid scope ambiguity, the default slot should also use \" +\r\n-                                \"\u003Ctemplate> syntax when there are other named slots.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    \u002F\u002F add the component's children to its default slot\r\n-                    var slots = el.scopedSlots || (el.scopedSlots = {});\r\n-                    var ref$1 = getSlotName(slotBinding$1);\r\n-                    var name$1 = ref$1.name;\r\n-                    var dynamic$1 = ref$1.dynamic;\r\n-                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\r\n-                    slotContainer.slotTarget = name$1;\r\n-                    slotContainer.slotTargetDynamic = dynamic$1;\r\n-                    slotContainer.children = el.children.filter(function (c) {\r\n-                        if (!c.slotScope) {\r\n-                            c.parent = slotContainer;\r\n-                            return true\r\n-                        }\r\n-                    });\r\n-                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\r\n-                    \u002F\u002F remove children as they are returned from scopedSlots now\r\n-                    el.children = [];\r\n-                    \u002F\u002F mark el non-plain so data gets generated\r\n-                    el.plain = false;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function getSlotName (binding) {\r\n-        var name = binding.name.replace(slotRE, '');\r\n-        if (!name) {\r\n-            if (binding.name[0] !== '#') {\r\n-                name = 'default';\r\n-            } else {\r\n-                warn$2(\r\n-                    \"v-slot shorthand syntax requires a slot name.\",\r\n-                    binding\r\n-                );\r\n-            }\r\n-        }\r\n-        return dynamicArgRE.test(name)\r\n-            \u002F\u002F dynamic [name]\r\n-            ? { name: name.slice(1, -1), dynamic: true }\r\n-            \u002F\u002F static name\r\n-            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\r\n-    }\r\n-\r\n-    \u002F\u002F handle \u003Cslot\u002F> outlets\r\n-    function processSlotOutlet (el) {\r\n-        if (el.tag === 'slot') {\r\n-            el.slotName = getBindingAttr(el, 'name');\r\n-            if (el.key) {\r\n-                warn$2(\r\n-                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\r\n-                    \"and can possibly expand into multiple elements. \" +\r\n-                    \"Use the key on a wrapping element instead.\",\r\n-                    getRawBindingAttr(el, 'key')\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processComponent (el) {\r\n-        var binding;\r\n-        if ((binding = getBindingAttr(el, 'is'))) {\r\n-            el.component = binding;\r\n-        }\r\n-        if (getAndRemoveAttr(el, 'inline-template') != null) {\r\n-            el.inlineTemplate = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\r\n-        for (i = 0, l = list.length; i \u003C l; i++) {\r\n-            name = rawName = list[i].name;\r\n-            value = list[i].value;\r\n-            if (dirRE.test(name)) {\r\n-                \u002F\u002F mark element as dynamic\r\n-                el.hasBindings = true;\r\n-                \u002F\u002F modifiers\r\n-                modifiers = parseModifiers(name.replace(dirRE, ''));\r\n-                \u002F\u002F support .foo shorthand syntax for the .prop modifier\r\n-                if (modifiers) {\r\n-                    name = name.replace(modifierRE, '');\r\n-                }\r\n-                if (bindRE.test(name)) { \u002F\u002F v-bind\r\n-                    name = name.replace(bindRE, '');\r\n-                    value = parseFilters(value);\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    if (\r\n-                        value.trim().length === 0\r\n-                    ) {\r\n-                        warn$2(\r\n-                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\r\n-                        );\r\n-                    }\r\n-                    if (modifiers) {\r\n-                        if (modifiers.prop && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                            if (name === 'innerHtml') { name = 'innerHTML'; }\r\n-                        }\r\n-                        if (modifiers.camel && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                        }\r\n-                        if (modifiers.sync) {\r\n-                            syncGen = genAssignmentCode(value, \"$event\");\r\n-                            if (!isDynamic) {\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"update:\" + (camelize(name))),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i]\r\n-                                );\r\n-                                if (hyphenate(name) !== camelize(name)) {\r\n-                                    addHandler(\r\n-                                        el,\r\n-                                        (\"update:\" + (hyphenate(name))),\r\n-                                        syncGen,\r\n-                                        null,\r\n-                                        false,\r\n-                                        warn$2,\r\n-                                        list[i]\r\n-                                    );\r\n-                                }\r\n-                            } else {\r\n-                                \u002F\u002F handler w\u002F dynamic event name\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"\\\"update:\\\"+(\" + name + \")\"),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i],\r\n-                                    true \u002F\u002F dynamic\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if ((modifiers && modifiers.prop) || (\r\n-                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\r\n-                        )) {\r\n-                        addProp(el, name, value, list[i], isDynamic);\r\n-                    } else {\r\n-                        addAttr(el, name, value, list[i], isDynamic);\r\n-                    }\r\n-                } else if (onRE.test(name)) { \u002F\u002F v-on\r\n-                    name = name.replace(onRE, '');\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\r\n-                } else { \u002F\u002F normal directives\r\n-                    name = name.replace(dirRE, '');\r\n-                    \u002F\u002F parse arg\r\n-                    var argMatch = name.match(argRE);\r\n-                    var arg = argMatch && argMatch[1];\r\n-                    isDynamic = false;\r\n-                    if (arg) {\r\n-                        name = name.slice(0, -(arg.length + 1));\r\n-                        if (dynamicArgRE.test(arg)) {\r\n-                            arg = arg.slice(1, -1);\r\n-                            isDynamic = true;\r\n-                        }\r\n-                    }\r\n-                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\r\n-                    if (name === 'model') {\r\n-                        checkForAliasModel(el, value);\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F literal attribute\r\n-                {\r\n-                    var res = parseText(value, delimiters);\r\n-                    if (res) {\r\n-                        warn$2(\r\n-                            name + \"=\\\"\" + value + \"\\\": \" +\r\n-                            'Interpolation inside attributes has been removed. ' +\r\n-                            'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\r\n-                            list[i]\r\n-                        );\r\n-                    }\r\n-                }\r\n-                addAttr(el, name, JSON.stringify(value), list[i]);\r\n-                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\r\n-                \u002F\u002F even immediately after element creation\r\n-                if (!el.component &&\r\n-                    name === 'muted' &&\r\n-                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\r\n-                    addProp(el, name, 'true', list[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkInFor (el) {\r\n-        var parent = el;\r\n-        while (parent) {\r\n-            if (parent.for !== undefined) {\r\n-                return true\r\n-            }\r\n-            parent = parent.parent;\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function parseModifiers (name) {\r\n-        var match = name.match(modifierRE);\r\n-        if (match) {\r\n-            var ret = {};\r\n-            match.forEach(function (m) { ret[m.slice(1)] = true; });\r\n-            return ret\r\n-        }\r\n-    }\r\n-\r\n-    function makeAttrsMap (attrs) {\r\n-        var map = {};\r\n-        for (var i = 0, l = attrs.length; i \u003C l; i++) {\r\n-            if (\r\n-                map[attrs[i].name] && !isIE && !isEdge\r\n-            ) {\r\n-                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\r\n-            }\r\n-            map[attrs[i].name] = attrs[i].value;\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\r\n-    function isTextTag (el) {\r\n-        return el.tag === 'script' || el.tag === 'style'\r\n-    }\r\n-\r\n-    function isForbiddenTag (el) {\r\n-        return (\r\n-            el.tag === 'style' ||\r\n-            (el.tag === 'script' && (\r\n-                !el.attrsMap.type ||\r\n-                el.attrsMap.type === 'text\u002Fjavascript'\r\n-            ))\r\n-        )\r\n-    }\r\n-\r\n-    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\r\n-    var ieNSPrefix = \u002F^NS\\d+:\u002F;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function guardIESVGBug (attrs) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C attrs.length; i++) {\r\n-            var attr = attrs[i];\r\n-            if (!ieNSBug.test(attr.name)) {\r\n-                attr.name = attr.name.replace(ieNSPrefix, '');\r\n-                res.push(attr);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkForAliasModel (el, value) {\r\n-        var _el = el;\r\n-        while (_el) {\r\n-            if (_el.for && _el.alias === value) {\r\n-                warn$2(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                    \"You are binding v-model directly to a v-for iteration alias. \" +\r\n-                    \"This will not be able to modify the v-for source array because \" +\r\n-                    \"writing to the alias is like modifying a function local variable. \" +\r\n-                    \"Consider using an array of objects and use v-model on an object property instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-            _el = _el.parent;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function preTransformNode (el, options) {\r\n-        if (el.tag === 'input') {\r\n-            var map = el.attrsMap;\r\n-            if (!map['v-model']) {\r\n-                return\r\n-            }\r\n-\r\n-            var typeBinding;\r\n-            if (map[':type'] || map['v-bind:type']) {\r\n-                typeBinding = getBindingAttr(el, 'type');\r\n-            }\r\n-            if (!map.type && !typeBinding && map['v-bind']) {\r\n-                typeBinding = \"(\" + (map['v-bind']) + \").type\";\r\n-            }\r\n-\r\n-            if (typeBinding) {\r\n-                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\r\n-                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\r\n-                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\r\n-                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\r\n-                \u002F\u002F 1. checkbox\r\n-                var branch0 = cloneASTElement(el);\r\n-                \u002F\u002F process for on the main node\r\n-                processFor(branch0);\r\n-                addRawAttr(branch0, 'type', 'checkbox');\r\n-                processElement(branch0, options);\r\n-                branch0.processed = true; \u002F\u002F prevent it from double-processed\r\n-                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\r\n-                addIfCondition(branch0, {\r\n-                    exp: branch0.if,\r\n-                    block: branch0\r\n-                });\r\n-                \u002F\u002F 2. add radio else-if condition\r\n-                var branch1 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch1, 'v-for', true);\r\n-                addRawAttr(branch1, 'type', 'radio');\r\n-                processElement(branch1, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\r\n-                    block: branch1\r\n-                });\r\n-                \u002F\u002F 3. other\r\n-                var branch2 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch2, 'v-for', true);\r\n-                addRawAttr(branch2, ':type', typeBinding);\r\n-                processElement(branch2, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: ifCondition,\r\n-                    block: branch2\r\n-                });\r\n-\r\n-                if (hasElse) {\r\n-                    branch0.else = true;\r\n-                } else if (elseIfCondition) {\r\n-                    branch0.elseif = elseIfCondition;\r\n-                }\r\n-\r\n-                return branch0\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function cloneASTElement (el) {\r\n-        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\r\n-    }\r\n-\r\n-    var model$1 = {\r\n-        preTransformNode: preTransformNode\r\n-    };\r\n-\r\n-    var modules$1 = [\r\n-        klass$1,\r\n-        style$1,\r\n-        model$1\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function text (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function html (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-    var directives$1 = {\r\n-        model: model,\r\n-        text: text,\r\n-        html: html\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseOptions = {\r\n-        expectHTML: true,\r\n-        modules: modules$1,\r\n-        directives: directives$1,\r\n-        isPreTag: isPreTag,\r\n-        isUnaryTag: isUnaryTag,\r\n-        mustUseProp: mustUseProp,\r\n-        canBeLeftOpenTag: canBeLeftOpenTag,\r\n-        isReservedTag: isReservedTag,\r\n-        getTagNamespace: getTagNamespace,\r\n-        staticKeys: genStaticKeys(modules$1)\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isStaticKey;\r\n-    var isPlatformReservedTag;\r\n-\r\n-    var genStaticKeysCached = cached(genStaticKeys$1);\r\n-\r\n-    \u002F**\r\n-     * Goal of the optimizer: walk the generated template AST tree\r\n-     * and detect sub-trees that are purely static, i.e. parts of\r\n-     * the DOM that never needs to change.\r\n-     *\r\n-     * Once we detect these sub-trees, we can:\r\n-     *\r\n-     * 1. Hoist them into constants, so that we no longer need to\r\n-     *    create fresh nodes for them on each re-render;\r\n-     * 2. Completely skip them in the patching process.\r\n-     *\u002F\r\n-    function optimize (root, options) {\r\n-        if (!root) { return }\r\n-        isStaticKey = genStaticKeysCached(options.staticKeys || '');\r\n-        isPlatformReservedTag = options.isReservedTag || no;\r\n-        \u002F\u002F first pass: mark all non-static nodes.\r\n-        markStatic$1(root);\r\n-        \u002F\u002F second pass: mark static roots.\r\n-        markStaticRoots(root, false);\r\n-    }\r\n-\r\n-    function genStaticKeys$1 (keys) {\r\n-        return makeMap(\r\n-            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\r\n-            (keys ? ',' + keys : '')\r\n-        )\r\n-    }\r\n-\r\n-    function markStatic$1 (node) {\r\n-        node.static = isStatic(node);\r\n-        if (node.type === 1) {\r\n-            \u002F\u002F do not make component slot content static. this avoids\r\n-            \u002F\u002F 1. components not able to mutate slot nodes\r\n-            \u002F\u002F 2. static slot content fails for hot-reloading\r\n-            if (\r\n-                !isPlatformReservedTag(node.tag) &&\r\n-                node.tag !== 'slot' &&\r\n-                node.attrsMap['inline-template'] == null\r\n-            ) {\r\n-                return\r\n-            }\r\n-            for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                var child = node.children[i];\r\n-                markStatic$1(child);\r\n-                if (!child.static) {\r\n-                    node.static = false;\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    var block = node.ifConditions[i$1].block;\r\n-                    markStatic$1(block);\r\n-                    if (!block.static) {\r\n-                        node.static = false;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticRoots (node, isInFor) {\r\n-        if (node.type === 1) {\r\n-            if (node.static || node.once) {\r\n-                node.staticInFor = isInFor;\r\n-            }\r\n-            \u002F\u002F For a node to qualify as a static root, it should have children that\r\n-            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\r\n-            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\r\n-            if (node.static && node.children.length && !(\r\n-                    node.children.length === 1 &&\r\n-                    node.children[0].type === 3\r\n-                )) {\r\n-                node.staticRoot = true;\r\n-                return\r\n-            } else {\r\n-                node.staticRoot = false;\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                    markStaticRoots(node.children[i], isInFor || !!node.for);\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isStatic (node) {\r\n-        if (node.type === 2) { \u002F\u002F expression\r\n-            return false\r\n-        }\r\n-        if (node.type === 3) { \u002F\u002F text\r\n-            return true\r\n-        }\r\n-        return !!(node.pre || (\r\n-            !node.hasBindings && \u002F\u002F no dynamic bindings\r\n-            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\r\n-            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\r\n-            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\r\n-            !isDirectChildOfTemplateFor(node) &&\r\n-            Object.keys(node).every(isStaticKey)\r\n-        ))\r\n-    }\r\n-\r\n-    function isDirectChildOfTemplateFor (node) {\r\n-        while (node.parent) {\r\n-            node = node.parent;\r\n-            if (node.tag !== 'template') {\r\n-                return false\r\n-            }\r\n-            if (node.for) {\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\r\n-    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\r\n-    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\r\n-\r\n-    \u002F\u002F KeyboardEvent.keyCode aliases\r\n-    var keyCodes = {\r\n-        esc: 27,\r\n-        tab: 9,\r\n-        enter: 13,\r\n-        space: 32,\r\n-        up: 38,\r\n-        left: 37,\r\n-        right: 39,\r\n-        down: 40,\r\n-        'delete': [8, 46]\r\n-    };\r\n-\r\n-    \u002F\u002F KeyboardEvent.key aliases\r\n-    var keyNames = {\r\n-        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\r\n-        esc: ['Esc', 'Escape'],\r\n-        tab: 'Tab',\r\n-        enter: 'Enter',\r\n-        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\r\n-        space: [' ', 'Spacebar'],\r\n-        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\r\n-        up: ['Up', 'ArrowUp'],\r\n-        left: ['Left', 'ArrowLeft'],\r\n-        right: ['Right', 'ArrowRight'],\r\n-        down: ['Down', 'ArrowDown'],\r\n-        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\r\n-        'delete': ['Backspace', 'Delete', 'Del']\r\n-    };\r\n-\r\n-    \u002F\u002F #4868: modifiers that prevent the execution of the listener\r\n-    \u002F\u002F need to explicitly return null so that we can determine whether to remove\r\n-    \u002F\u002F the listener for .once\r\n-    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\r\n-\r\n-    var modifierCode = {\r\n-        stop: '$event.stopPropagation();',\r\n-        prevent: '$event.preventDefault();',\r\n-        self: genGuard(\"$event.target !== $event.currentTarget\"),\r\n-        ctrl: genGuard(\"!$event.ctrlKey\"),\r\n-        shift: genGuard(\"!$event.shiftKey\"),\r\n-        alt: genGuard(\"!$event.altKey\"),\r\n-        meta: genGuard(\"!$event.metaKey\"),\r\n-        left: genGuard(\"'button' in $event && $event.button !== 0\"),\r\n-        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\r\n-        right: genGuard(\"'button' in $event && $event.button !== 2\")\r\n-    };\r\n-\r\n-    function genHandlers (\r\n-        events,\r\n-        isNative\r\n-    ) {\r\n-        var prefix = isNative ? 'nativeOn:' : 'on:';\r\n-        var staticHandlers = \"\";\r\n-        var dynamicHandlers = \"\";\r\n-        for (var name in events) {\r\n-            var handlerCode = genHandler(events[name]);\r\n-            if (events[name] && events[name].dynamic) {\r\n-                dynamicHandlers += name + \",\" + handlerCode + \",\";\r\n-            } else {\r\n-                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\r\n-            }\r\n-        }\r\n-        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\r\n-        if (dynamicHandlers) {\r\n-            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\r\n-        } else {\r\n-            return prefix + staticHandlers\r\n-        }\r\n-    }\r\n-\r\n-    function genHandler (handler) {\r\n-        if (!handler) {\r\n-            return 'function(){}'\r\n-        }\r\n-\r\n-        if (Array.isArray(handler)) {\r\n-            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\r\n-        }\r\n-\r\n-        var isMethodPath = simplePathRE.test(handler.value);\r\n-        var isFunctionExpression = fnExpRE.test(handler.value);\r\n-        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\r\n-\r\n-        if (!handler.modifiers) {\r\n-            if (isMethodPath || isFunctionExpression) {\r\n-                return handler.value\r\n-            }\r\n-            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\r\n-        } else {\r\n-            var code = '';\r\n-            var genModifierCode = '';\r\n-            var keys = [];\r\n-            for (var key in handler.modifiers) {\r\n-                if (modifierCode[key]) {\r\n-                    genModifierCode += modifierCode[key];\r\n-                    \u002F\u002F left\u002Fright\r\n-                    if (keyCodes[key]) {\r\n-                        keys.push(key);\r\n-                    }\r\n-                } else if (key === 'exact') {\r\n-                    var modifiers = (handler.modifiers);\r\n-                    genModifierCode += genGuard(\r\n-                        ['ctrl', 'shift', 'alt', 'meta']\r\n-                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\r\n-                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\r\n-                            .join('||')\r\n-                    );\r\n-                } else {\r\n-                    keys.push(key);\r\n-                }\r\n-            }\r\n-            if (keys.length) {\r\n-                code += genKeyFilter(keys);\r\n-            }\r\n-            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\r\n-            if (genModifierCode) {\r\n-                code += genModifierCode;\r\n-            }\r\n-            var handlerCode = isMethodPath\r\n-                ? (\"return \" + (handler.value) + \"($event)\")\r\n-                : isFunctionExpression\r\n-                    ? (\"return (\" + (handler.value) + \")($event)\")\r\n-                    : isFunctionInvocation\r\n-                        ? (\"return \" + (handler.value))\r\n-                        : handler.value;\r\n-            return (\"function($event){\" + code + handlerCode + \"}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genKeyFilter (keys) {\r\n-        return (\r\n-            \u002F\u002F make sure the key filters only apply to KeyboardEvents\r\n-            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\r\n-            \u002F\u002F key events that do not have keyCode property...\r\n-            \"if(!$event.type.indexOf('key')&&\" +\r\n-            (keys.map(genFilterCode).join('&&')) + \")return null;\"\r\n-        )\r\n-    }\r\n-\r\n-    function genFilterCode (key) {\r\n-        var keyVal = parseInt(key, 10);\r\n-        if (keyVal) {\r\n-            return (\"$event.keyCode!==\" + keyVal)\r\n-        }\r\n-        var keyCode = keyCodes[key];\r\n-        var keyName = keyNames[key];\r\n-        return (\r\n-            \"_k($event.keyCode,\" +\r\n-            (JSON.stringify(key)) + \",\" +\r\n-            (JSON.stringify(keyCode)) + \",\" +\r\n-            \"$event.key,\" +\r\n-            \"\" + (JSON.stringify(keyName)) +\r\n-            \")\"\r\n-        )\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function on (el, dir) {\r\n-        if (dir.modifiers) {\r\n-            warn(\"v-on without argument does not support modifiers.\");\r\n-        }\r\n-        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bind$1 (el, dir) {\r\n-        el.wrapData = function (code) {\r\n-            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseDirectives = {\r\n-        on: on,\r\n-        bind: bind$1,\r\n-        cloak: noop\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-\r\n-\r\n-    var CodegenState = function CodegenState (options) {\r\n-        this.options = options;\r\n-        this.warn = options.warn || baseWarn;\r\n-        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\r\n-        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\r\n-        this.directives = extend(extend({}, baseDirectives), options.directives);\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-        this.onceId = 0;\r\n-        this.staticRenderFns = [];\r\n-        this.pre = false;\r\n-    };\r\n-\r\n-\r\n-\r\n-    function generate (\r\n-        ast,\r\n-        options\r\n-    ) {\r\n-        var state = new CodegenState(options);\r\n-        var code = ast ? genElement(ast, state) : '_c(\"div\")';\r\n-        return {\r\n-            render: (\"with(this){return \" + code + \"}\"),\r\n-            staticRenderFns: state.staticRenderFns\r\n-        }\r\n-    }\r\n-\r\n-    function genElement (el, state) {\r\n-        if (el.parent) {\r\n-            el.pre = el.pre || el.parent.pre;\r\n-        }\r\n-\r\n-        if (el.staticRoot && !el.staticProcessed) {\r\n-            return genStatic(el, state)\r\n-        } else if (el.once && !el.onceProcessed) {\r\n-            return genOnce(el, state)\r\n-        } else if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state)\r\n-        } else if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\r\n-            return genChildren(el, state) || 'void 0'\r\n-        } else if (el.tag === 'slot') {\r\n-            return genSlot(el, state)\r\n-        } else {\r\n-            \u002F\u002F component or element\r\n-            var code;\r\n-            if (el.component) {\r\n-                code = genComponent(el.component, el, state);\r\n-            } else {\r\n-                var data;\r\n-                if (!el.plain || (el.pre && state.maybeComponent(el))) {\r\n-                    data = genData$2(el, state);\r\n-                }\r\n-\r\n-                var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\r\n-            }\r\n-            \u002F\u002F module transforms\r\n-            for (var i = 0; i \u003C state.transforms.length; i++) {\r\n-                code = state.transforms[i](el, code);\r\n-            }\r\n-            return code\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F hoist static sub-trees out\r\n-    function genStatic (el, state) {\r\n-        el.staticProcessed = true;\r\n-        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\r\n-        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\r\n-        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\r\n-        var originalPreState = state.pre;\r\n-        if (el.pre) {\r\n-            state.pre = el.pre;\r\n-        }\r\n-        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\r\n-        state.pre = originalPreState;\r\n-        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\r\n-    }\r\n-\r\n-    \u002F\u002F v-once\r\n-    function genOnce (el, state) {\r\n-        el.onceProcessed = true;\r\n-        if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.staticInFor) {\r\n-            var key = '';\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (parent.for) {\r\n-                    key = parent.key;\r\n-                    break\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-            if (!key) {\r\n-                state.warn(\r\n-                    \"v-once can only be used inside v-for that is keyed. \",\r\n-                    el.rawAttrsMap['v-once']\r\n-                );\r\n-                return genElement(el, state)\r\n-            }\r\n-            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\r\n-        } else {\r\n-            return genStatic(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genIf (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        el.ifProcessed = true; \u002F\u002F avoid recursion\r\n-        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\r\n-    }\r\n-\r\n-    function genIfConditions (\r\n-        conditions,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        if (!conditions.length) {\r\n-            return altEmpty || '_e()'\r\n-        }\r\n-\r\n-        var condition = conditions.shift();\r\n-        if (condition.exp) {\r\n-            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\r\n-        } else {\r\n-            return (\"\" + (genTernaryExp(condition.block)))\r\n-        }\r\n-\r\n-        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\r\n-        function genTernaryExp (el) {\r\n-            return altGen\r\n-                ? altGen(el, state)\r\n-                : el.once\r\n-                    ? genOnce(el, state)\r\n-                    : genElement(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genFor (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altHelper\r\n-    ) {\r\n-        var exp = el.for;\r\n-        var alias = el.alias;\r\n-        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\r\n-        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\r\n-\r\n-        if (state.maybeComponent(el) &&\r\n-            el.tag !== 'slot' &&\r\n-            el.tag !== 'template' &&\r\n-            !el.key\r\n-        ) {\r\n-            state.warn(\r\n-                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\r\n-                \"v-for should have explicit keys. \" +\r\n-                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\r\n-                el.rawAttrsMap['v-for'],\r\n-                true \u002F* tip *\u002F\r\n-            );\r\n-        }\r\n-\r\n-        el.forProcessed = true; \u002F\u002F avoid recursion\r\n-        return (altHelper || '_l') + \"((\" + exp + \"),\" +\r\n-            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\r\n-            \"return \" + ((altGen || genElement)(el, state)) +\r\n-            '})'\r\n-    }\r\n-\r\n-    function genData$2 (el, state) {\r\n-        var data = '{';\r\n-\r\n-        \u002F\u002F directives first.\r\n-        \u002F\u002F directives may mutate the el's other properties before they are generated.\r\n-        var dirs = genDirectives(el, state);\r\n-        if (dirs) { data += dirs + ','; }\r\n-\r\n-        \u002F\u002F key\r\n-        if (el.key) {\r\n-            data += \"key:\" + (el.key) + \",\";\r\n-        }\r\n-        \u002F\u002F ref\r\n-        if (el.ref) {\r\n-            data += \"ref:\" + (el.ref) + \",\";\r\n-        }\r\n-        if (el.refInFor) {\r\n-            data += \"refInFor:true,\";\r\n-        }\r\n-        \u002F\u002F pre\r\n-        if (el.pre) {\r\n-            data += \"pre:true,\";\r\n-        }\r\n-        \u002F\u002F record original tag name for components using \"is\" attribute\r\n-        if (el.component) {\r\n-            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\r\n-        }\r\n-        \u002F\u002F module data generation functions\r\n-        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\r\n-            data += state.dataGenFns[i](el);\r\n-        }\r\n-        \u002F\u002F attributes\r\n-        if (el.attrs) {\r\n-            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\r\n-        }\r\n-        \u002F\u002F DOM props\r\n-        if (el.props) {\r\n-            data += \"domProps:\" + (genProps(el.props)) + \",\";\r\n-        }\r\n-        \u002F\u002F event handlers\r\n-        if (el.events) {\r\n-            data += (genHandlers(el.events, false)) + \",\";\r\n-        }\r\n-        if (el.nativeEvents) {\r\n-            data += (genHandlers(el.nativeEvents, true)) + \",\";\r\n-        }\r\n-        \u002F\u002F slot target\r\n-        \u002F\u002F only for non-scoped slots\r\n-        if (el.slotTarget && !el.slotScope) {\r\n-            data += \"slot:\" + (el.slotTarget) + \",\";\r\n-        }\r\n-        \u002F\u002F scoped slots\r\n-        if (el.scopedSlots) {\r\n-            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\r\n-        }\r\n-        \u002F\u002F component v-model\r\n-        if (el.model) {\r\n-            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\r\n-        }\r\n-        \u002F\u002F inline-template\r\n-        if (el.inlineTemplate) {\r\n-            var inlineTemplate = genInlineTemplate(el, state);\r\n-            if (inlineTemplate) {\r\n-                data += inlineTemplate + \",\";\r\n-            }\r\n-        }\r\n-        data = data.replace(\u002F,$\u002F, '') + '}';\r\n-        \u002F\u002F v-bind dynamic argument wrap\r\n-        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\r\n-        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\r\n-        if (el.dynamicAttrs) {\r\n-            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\r\n-        }\r\n-        \u002F\u002F v-bind data wrap\r\n-        if (el.wrapData) {\r\n-            data = el.wrapData(data);\r\n-        }\r\n-        \u002F\u002F v-on data wrap\r\n-        if (el.wrapListeners) {\r\n-            data = el.wrapListeners(data);\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function genDirectives (el, state) {\r\n-        var dirs = el.directives;\r\n-        if (!dirs) { return }\r\n-        var res = 'directives:[';\r\n-        var hasRuntime = false;\r\n-        var i, l, dir, needRuntime;\r\n-        for (i = 0, l = dirs.length; i \u003C l; i++) {\r\n-            dir = dirs[i];\r\n-            needRuntime = true;\r\n-            var gen = state.directives[dir.name];\r\n-            if (gen) {\r\n-                \u002F\u002F compile-time directive that manipulates AST.\r\n-                \u002F\u002F returns true if it also needs a runtime counterpart.\r\n-                needRuntime = !!gen(el, dir, state.warn);\r\n-            }\r\n-            if (needRuntime) {\r\n-                hasRuntime = true;\r\n-                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\r\n-            }\r\n-        }\r\n-        if (hasRuntime) {\r\n-            return res.slice(0, -1) + ']'\r\n-        }\r\n-    }\r\n-\r\n-    function genInlineTemplate (el, state) {\r\n-        var ast = el.children[0];\r\n-        if (el.children.length !== 1 || ast.type !== 1) {\r\n-            state.warn(\r\n-                'Inline-template components must have exactly one child element.',\r\n-                { start: el.start }\r\n-            );\r\n-        }\r\n-        if (ast && ast.type === 1) {\r\n-            var inlineRenderFns = generate(ast, state.options);\r\n-            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genScopedSlots (\r\n-        el,\r\n-        slots,\r\n-        state\r\n-    ) {\r\n-        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\r\n-        \u002F\u002F components with only scoped slots to skip forced updates from parent.\r\n-        \u002F\u002F but in some cases we have to bail-out of this optimization\r\n-        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\r\n-        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\r\n-                var slot = slots[key];\r\n-                return (\r\n-                    slot.slotTargetDynamic ||\r\n-                    slot.if ||\r\n-                    slot.for ||\r\n-                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\r\n-                )\r\n-            });\r\n-\r\n-        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\r\n-        \u002F\u002F it's possible for the same component to be reused but with different\r\n-        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\r\n-        \u002F\u002F the generated code of all the slot contents.\r\n-        var needsKey = !!el.if;\r\n-\r\n-        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\r\n-        \u002F\u002F disconnected due to the intermediate scope variable)\r\n-        \u002F\u002F #9438, #9506\r\n-        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\r\n-        \u002F\u002F and skip force updating ones that do not actually use scope variables.\r\n-        if (!needsForceUpdate) {\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (\r\n-                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\r\n-                    parent.for\r\n-                ) {\r\n-                    needsForceUpdate = true;\r\n-                    break\r\n-                }\r\n-                if (parent.if) {\r\n-                    needsKey = true;\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-        }\r\n-\r\n-        var generatedSlots = Object.keys(slots)\r\n-            .map(function (key) { return genScopedSlot(slots[key], state); })\r\n-            .join(',');\r\n-\r\n-        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\r\n-    }\r\n-\r\n-    function hash(str) {\r\n-        var hash = 5381;\r\n-        var i = str.length;\r\n-        while(i) {\r\n-            hash = (hash * 33) ^ str.charCodeAt(--i);\r\n-        }\r\n-        return hash >>> 0\r\n-    }\r\n-\r\n-    function containsSlotChild (el) {\r\n-        if (el.type === 1) {\r\n-            if (el.tag === 'slot') {\r\n-                return true\r\n-            }\r\n-            return el.children.some(containsSlotChild)\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function genScopedSlot (\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var isLegacySyntax = el.attrsMap['slot-scope'];\r\n-        if (el.if && !el.ifProcessed && !isLegacySyntax) {\r\n-            return genIf(el, state, genScopedSlot, \"null\")\r\n-        }\r\n-        if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state, genScopedSlot)\r\n-        }\r\n-        var slotScope = el.slotScope === emptySlotScopeToken\r\n-            ? \"\"\r\n-            : String(el.slotScope);\r\n-        var fn = \"function(\" + slotScope + \"){\" +\r\n-            \"return \" + (el.tag === 'template'\r\n-                ? el.if && isLegacySyntax\r\n-                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\r\n-                    : genChildren(el, state) || 'undefined'\r\n-                : genElement(el, state)) + \"}\";\r\n-        \u002F\u002F reverse proxy v-slot without scope on this.$slots\r\n-        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\r\n-        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\r\n-    }\r\n-\r\n-    function genChildren (\r\n-        el,\r\n-        state,\r\n-        checkSkip,\r\n-        altGenElement,\r\n-        altGenNode\r\n-    ) {\r\n-        var children = el.children;\r\n-        if (children.length) {\r\n-            var el$1 = children[0];\r\n-            \u002F\u002F optimize single v-for\r\n-            if (children.length === 1 &&\r\n-                el$1.for &&\r\n-                el$1.tag !== 'template' &&\r\n-                el$1.tag !== 'slot'\r\n-            ) {\r\n-                var normalizationType = checkSkip\r\n-                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\r\n-                    : \"\";\r\n-                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\r\n-            }\r\n-            var normalizationType$1 = checkSkip\r\n-                ? getNormalizationType(children, state.maybeComponent)\r\n-                : 0;\r\n-            var gen = altGenNode || genNode;\r\n-            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F determine the normalization needed for the children array.\r\n-    \u002F\u002F 0: no normalization needed\r\n-    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\r\n-    \u002F\u002F 2: full normalization needed\r\n-    function getNormalizationType (\r\n-        children,\r\n-        maybeComponent\r\n-    ) {\r\n-        var res = 0;\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            var el = children[i];\r\n-            if (el.type !== 1) {\r\n-                continue\r\n-            }\r\n-            if (needsNormalization(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\r\n-                res = 2;\r\n-                break\r\n-            }\r\n-            if (maybeComponent(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\r\n-                res = 1;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function needsNormalization (el) {\r\n-        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\r\n-    }\r\n-\r\n-    function genNode (node, state) {\r\n-        if (node.type === 1) {\r\n-            return genElement(node, state)\r\n-        } else if (node.type === 3 && node.isComment) {\r\n-            return genComment(node)\r\n-        } else {\r\n-            return genText(node)\r\n-        }\r\n-    }\r\n-\r\n-    function genText (text) {\r\n-        return (\"_v(\" + (text.type === 2\r\n-            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\r\n-            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\r\n-    }\r\n-\r\n-    function genComment (comment) {\r\n-        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\r\n-    }\r\n-\r\n-    function genSlot (el, state) {\r\n-        var slotName = el.slotName || '\"default\"';\r\n-        var children = genChildren(el, state);\r\n-        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\r\n-        var attrs = el.attrs || el.dynamicAttrs\r\n-            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\r\n-                \u002F\u002F slot props are camelized\r\n-                name: camelize(attr.name),\r\n-                value: attr.value,\r\n-                dynamic: attr.dynamic\r\n-            }); }))\r\n-            : null;\r\n-        var bind$$1 = el.attrsMap['v-bind'];\r\n-        if ((attrs || bind$$1) && !children) {\r\n-            res += \",null\";\r\n-        }\r\n-        if (attrs) {\r\n-            res += \",\" + attrs;\r\n-        }\r\n-        if (bind$$1) {\r\n-            res += (attrs ? '' : ',null') + \",\" + bind$$1;\r\n-        }\r\n-        return res + ')'\r\n-    }\r\n-\r\n-    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\r\n-    function genComponent (\r\n-        componentName,\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\r\n-    }\r\n-\r\n-    function genProps (props) {\r\n-        var staticProps = \"\";\r\n-        var dynamicProps = \"\";\r\n-        for (var i = 0; i \u003C props.length; i++) {\r\n-            var prop = props[i];\r\n-            var value = transformSpecialNewlines(prop.value);\r\n-            if (prop.dynamic) {\r\n-                dynamicProps += (prop.name) + \",\" + value + \",\";\r\n-            } else {\r\n-                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\r\n-            }\r\n-        }\r\n-        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\r\n-        if (dynamicProps) {\r\n-            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\r\n-        } else {\r\n-            return staticProps\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #3895, #4268\r\n-    function transformSpecialNewlines (text) {\r\n-        return text\r\n-            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\r\n-            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F\u002F these keywords should not appear inside expressions, but operators like\r\n-    \u002F\u002F typeof, instanceof and in are allowed\r\n-    var prohibitedKeywordRE = new RegExp('\\\\b' + (\r\n-            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n-            'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n-            'extends,finally,continue,debugger,function,arguments'\r\n-        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\r\n-\r\n-    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\r\n-    var unaryOperatorsRE = new RegExp('\\\\b' + (\r\n-            'delete,typeof,void'\r\n-        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\r\n-\r\n-    \u002F\u002F strip strings in expressions\r\n-    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\r\n-\r\n-    \u002F\u002F detect problematic expressions in a template\r\n-    function detectErrors (ast, warn) {\r\n-        if (ast) {\r\n-            checkNode(ast, warn);\r\n-        }\r\n-    }\r\n-\r\n-    function checkNode (node, warn) {\r\n-        if (node.type === 1) {\r\n-            for (var name in node.attrsMap) {\r\n-                if (dirRE.test(name)) {\r\n-                    var value = node.attrsMap[name];\r\n-                    if (value) {\r\n-                        var range = node.rawAttrsMap[name];\r\n-                        if (name === 'v-for') {\r\n-                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else if (onRE.test(name)) {\r\n-                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else {\r\n-                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0; i \u003C node.children.length; i++) {\r\n-                    checkNode(node.children[i], warn);\r\n-                }\r\n-            }\r\n-        } else if (node.type === 2) {\r\n-            checkExpression(node.expression, node.text, warn, node);\r\n-        }\r\n-    }\r\n-\r\n-    function checkEvent (exp, text, warn, range) {\r\n-        var stipped = exp.replace(stripStringRE, '');\r\n-        var keywordMatch = stipped.match(unaryOperatorsRE);\r\n-        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\r\n-            warn(\r\n-                \"avoid using JavaScript unary operator as property name: \" +\r\n-                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\r\n-                range\r\n-            );\r\n-        }\r\n-        checkExpression(exp, text, warn, range);\r\n-    }\r\n-\r\n-    function checkFor (node, text, warn, range) {\r\n-        checkExpression(node.for || '', text, warn, range);\r\n-        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\r\n-        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\r\n-        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\r\n-    }\r\n-\r\n-    function checkIdentifier (\r\n-        ident,\r\n-        type,\r\n-        text,\r\n-        warn,\r\n-        range\r\n-    ) {\r\n-        if (typeof ident === 'string') {\r\n-            try {\r\n-                new Function((\"var \" + ident + \"=_\"));\r\n-            } catch (e) {\r\n-                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkExpression (exp, text, warn, range) {\r\n-        try {\r\n-            new Function((\"return \" + exp));\r\n-        } catch (e) {\r\n-            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\r\n-            if (keywordMatch) {\r\n-                warn(\r\n-                    \"avoid using JavaScript keyword as property name: \" +\r\n-                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\r\n-                    range\r\n-                );\r\n-            } else {\r\n-                warn(\r\n-                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\r\n-                    \"    \" + exp + \"\\n\\n\" +\r\n-                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\r\n-                    range\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var range = 2;\r\n-\r\n-    function generateCodeFrame (\r\n-        source,\r\n-        start,\r\n-        end\r\n-    ) {\r\n-        if ( start === void 0 ) start = 0;\r\n-        if ( end === void 0 ) end = source.length;\r\n-\r\n-        var lines = source.split(\u002F\\r?\\n\u002F);\r\n-        var count = 0;\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C lines.length; i++) {\r\n-            count += lines[i].length + 1;\r\n-            if (count >= start) {\r\n-                for (var j = i - range; j \u003C= i + range || end > count; j++) {\r\n-                    if (j \u003C 0 || j >= lines.length) { continue }\r\n-                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\r\n-                    var lineLength = lines[j].length;\r\n-                    if (j === i) {\r\n-                        \u002F\u002F push underline\r\n-                        var pad = start - (count - lineLength) + 1;\r\n-                        var length = end > count ? lineLength - pad : end - start;\r\n-                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\r\n-                    } else if (j > i) {\r\n-                        if (end > count) {\r\n-                            var length$1 = Math.min(end - count, lineLength);\r\n-                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\r\n-                        }\r\n-                        count += lineLength + 1;\r\n-                    }\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-        return res.join('\\n')\r\n-    }\r\n-\r\n-    function repeat$1 (str, n) {\r\n-        var result = '';\r\n-        if (n > 0) {\r\n-            while (true) { \u002F\u002F eslint-disable-line\r\n-                if (n & 1) { result += str; }\r\n-                n >>>= 1;\r\n-                if (n \u003C= 0) { break }\r\n-                str += str;\r\n-            }\r\n-        }\r\n-        return result\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function createFunction (code, errors) {\r\n-        try {\r\n-            return new Function(code)\r\n-        } catch (err) {\r\n-            errors.push({ err: err, code: code });\r\n-            return noop\r\n-        }\r\n-    }\r\n-\r\n-    function createCompileToFunctionFn (compile) {\r\n-        var cache = Object.create(null);\r\n-\r\n-        return function compileToFunctions (\r\n-            template,\r\n-            options,\r\n-            vm\r\n-        ) {\r\n-            options = extend({}, options);\r\n-            var warn$$1 = options.warn || warn;\r\n-            delete options.warn;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                \u002F\u002F detect possible CSP restriction\r\n-                try {\r\n-                    new Function('return 1');\r\n-                } catch (e) {\r\n-                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\r\n-                        warn$$1(\r\n-                            'It seems you are using the standalone build of Vue.js in an ' +\r\n-                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\r\n-                            'The template compiler cannot work in this environment. Consider ' +\r\n-                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\r\n-                            'templates into render functions.'\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F check cache\r\n-            var key = options.delimiters\r\n-                ? String(options.delimiters) + template\r\n-                : template;\r\n-            if (cache[key]) {\r\n-                return cache[key]\r\n-            }\r\n-\r\n-            \u002F\u002F compile\r\n-            var compiled = compile(template, options);\r\n-\r\n-            \u002F\u002F check compilation errors\u002Ftips\r\n-            {\r\n-                if (compiled.errors && compiled.errors.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.errors.forEach(function (e) {\r\n-                            warn$$1(\r\n-                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\r\n-                                generateCodeFrame(template, e.start, e.end),\r\n-                                vm\r\n-                            );\r\n-                        });\r\n-                    } else {\r\n-                        warn$$1(\r\n-                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\r\n-                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                }\r\n-                if (compiled.tips && compiled.tips.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\r\n-                    } else {\r\n-                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F turn code into functions\r\n-            var res = {};\r\n-            var fnGenErrors = [];\r\n-            res.render = createFunction(compiled.render, fnGenErrors);\r\n-            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\r\n-                return createFunction(code, fnGenErrors)\r\n-            });\r\n-\r\n-            \u002F\u002F check function generation errors.\r\n-            \u002F\u002F this should only happen if there is a bug in the compiler itself.\r\n-            \u002F\u002F mostly for codegen development use\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\r\n-                    warn$$1(\r\n-                        \"Failed to generate render function:\\n\\n\" +\r\n-                        fnGenErrors.map(function (ref) {\r\n-                            var err = ref.err;\r\n-                            var code = ref.code;\r\n-\r\n-                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\r\n-                        }).join('\\n'),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-\r\n-            return (cache[key] = res)\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createCompilerCreator (baseCompile) {\r\n-        return function createCompiler (baseOptions) {\r\n-            function compile (\r\n-                template,\r\n-                options\r\n-            ) {\r\n-                var finalOptions = Object.create(baseOptions);\r\n-                var errors = [];\r\n-                var tips = [];\r\n-\r\n-                var warn = function (msg, range, tip) {\r\n-                    (tip ? tips : errors).push(msg);\r\n-                };\r\n-\r\n-                if (options) {\r\n-                    if (options.outputSourceRange) {\r\n-                        \u002F\u002F $flow-disable-line\r\n-                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\r\n-\r\n-                        warn = function (msg, range, tip) {\r\n-                            var data = { msg: msg };\r\n-                            if (range) {\r\n-                                if (range.start != null) {\r\n-                                    data.start = range.start + leadingSpaceLength;\r\n-                                }\r\n-                                if (range.end != null) {\r\n-                                    data.end = range.end + leadingSpaceLength;\r\n-                                }\r\n-                            }\r\n-                            (tip ? tips : errors).push(data);\r\n-                        };\r\n-                    }\r\n-                    \u002F\u002F merge custom modules\r\n-                    if (options.modules) {\r\n-                        finalOptions.modules =\r\n-                            (baseOptions.modules || []).concat(options.modules);\r\n-                    }\r\n-                    \u002F\u002F merge custom directives\r\n-                    if (options.directives) {\r\n-                        finalOptions.directives = extend(\r\n-                            Object.create(baseOptions.directives || null),\r\n-                            options.directives\r\n-                        );\r\n-                    }\r\n-                    \u002F\u002F copy other options\r\n-                    for (var key in options) {\r\n-                        if (key !== 'modules' && key !== 'directives') {\r\n-                            finalOptions[key] = options[key];\r\n-                        }\r\n-                    }\r\n-                }\r\n-\r\n-                finalOptions.warn = warn;\r\n-\r\n-                var compiled = baseCompile(template.trim(), finalOptions);\r\n-                {\r\n-                    detectErrors(compiled.ast, warn);\r\n-                }\r\n-                compiled.errors = errors;\r\n-                compiled.tips = tips;\r\n-                return compiled\r\n-            }\r\n-\r\n-            return {\r\n-                compile: compile,\r\n-                compileToFunctions: createCompileToFunctionFn(compile)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\r\n-    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\r\n-    \u002F\u002F Here we just export a default compiler using the default parts.\r\n-    var createCompiler = createCompilerCreator(function baseCompile (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        var ast = parse(template.trim(), options);\r\n-        if (options.optimize !== false) {\r\n-            optimize(ast, options);\r\n-        }\r\n-        var code = generate(ast, options);\r\n-        return {\r\n-            ast: ast,\r\n-            render: code.render,\r\n-            staticRenderFns: code.staticRenderFns\r\n-        }\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref$1 = createCompiler(baseOptions);\r\n-    var compile = ref$1.compile;\r\n-    var compileToFunctions = ref$1.compileToFunctions;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F check whether current browser encodes a char inside attribute values\r\n-    var div;\r\n-    function getShouldDecode (href) {\r\n-        div = div || document.createElement('div');\r\n-        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\r\n-        return div.innerHTML.indexOf('&#10;') > 0\r\n-    }\r\n-\r\n-    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\r\n-    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\r\n-    \u002F\u002F #6828: chrome encodes content in a[href]\r\n-    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var idToTemplate = cached(function (id) {\r\n-        var el = query(id);\r\n-        return el && el.innerHTML\r\n-    });\r\n-\r\n-    var mount = Vue.prototype.$mount;\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && query(el);\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (el === document.body || el === document.documentElement) {\r\n-            warn(\r\n-                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\r\n-            );\r\n-            return this\r\n-        }\r\n-\r\n-        var options = this.$options;\r\n-        \u002F\u002F resolve template\u002Fel and convert to render function\r\n-        if (!options.render) {\r\n-            var template = options.template;\r\n-            if (template) {\r\n-                if (typeof template === 'string') {\r\n-                    if (template.charAt(0) === '#') {\r\n-                        template = idToTemplate(template);\r\n-                      \u002F* istanbul ignore if *\u002F\r\n-                        if (!template) {\r\n-                            warn(\r\n-                                (\"Template element not found or is empty: \" + (options.template)),\r\n-                                this\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                } else if (template.nodeType) {\r\n-                    template = template.innerHTML;\r\n-                } else {\r\n-                    {\r\n-                        warn('invalid template option:' + template, this);\r\n-                    }\r\n-                    return this\r\n-                }\r\n-            } else if (el) {\r\n-                template = getOuterHTML(el);\r\n-            }\r\n-            if (template) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile');\r\n-                }\r\n-\r\n-                var ref = compileToFunctions(template, {\r\n-                    outputSourceRange: \"development\" !== 'production',\r\n-                    shouldDecodeNewlines: shouldDecodeNewlines,\r\n-                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\r\n-                    delimiters: options.delimiters,\r\n-                    comments: options.comments\r\n-                }, this);\r\n-                var render = ref.render;\r\n-                var staticRenderFns = ref.staticRenderFns;\r\n-                options.render = render;\r\n-                options.staticRenderFns = staticRenderFns;\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile end');\r\n-                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\r\n-                }\r\n-            }\r\n-        }\r\n-        return mount.call(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Get outerHTML of elements, taking care\r\n-     * of SVG elements in IE as well.\r\n-     *\u002F\r\n-    function getOuterHTML (el) {\r\n-        if (el.outerHTML) {\r\n-            return el.outerHTML\r\n-        } else {\r\n-            var container = document.createElement('div');\r\n-            container.appendChild(el.cloneNode(true));\r\n-            return container.innerHTML\r\n-        }\r\n-    }\r\n-\r\n-    Vue.compile = compileToFunctions;\r\n-\r\n-    return Vue;\r\n-\r\n-}));\r\n-\u002F**\r\n- * vuex v3.1.0\r\n- * (c) 2019 Evan You\r\n- * @license MIT\r\n- *\u002F\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vuex = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-    function applyMixin (Vue) {\r\n-        var version = Number(Vue.version.split('.')[0]);\r\n-\r\n-        if (version >= 2) {\r\n-            Vue.mixin({ beforeCreate: vuexInit });\r\n-        } else {\r\n-            \u002F\u002F override init and inject vuex init procedure\r\n-            \u002F\u002F for 1.x backwards compatibility.\r\n-            var _init = Vue.prototype._init;\r\n-            Vue.prototype._init = function (options) {\r\n-                if ( options === void 0 ) options = {};\r\n-\r\n-                options.init = options.init\r\n-                    ? [vuexInit].concat(options.init)\r\n-                    : vuexInit;\r\n-                _init.call(this, options);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F**\r\n-         * Vuex init hook, injected into each instances init hooks list.\r\n-         *\u002F\r\n-\r\n-        function vuexInit () {\r\n-            var options = this.$options;\r\n-            \u002F\u002F store injection\r\n-            if (options.store) {\r\n-                this.$store = typeof options.store === 'function'\r\n-                    ? options.store()\r\n-                    : options.store;\r\n-            } else if (options.parent && options.parent.$store) {\r\n-                this.$store = options.parent.$store;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var devtoolHook =\r\n-        typeof window !== 'undefined' &&\r\n-        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-    function devtoolPlugin (store) {\r\n-        if (!devtoolHook) { return }\r\n-\r\n-        store._devtoolHook = devtoolHook;\r\n-\r\n-        devtoolHook.emit('vuex:init', store);\r\n-\r\n-        devtoolHook.on('vuex:travel-to-state', function (targetState) {\r\n-            store.replaceState(targetState);\r\n-        });\r\n-\r\n-        store.subscribe(function (mutation, state) {\r\n-            devtoolHook.emit('vuex:mutation', mutation, state);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the first item that pass the test\r\n-     * by second argument function\r\n-     *\r\n-     * @param {Array} list\r\n-     * @param {Function} f\r\n-     * @return {*}\r\n-     *\u002F\r\n-\r\n-    \u002F**\r\n-     * forEach for object\r\n-     *\u002F\r\n-    function forEachValue (obj, fn) {\r\n-        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\r\n-    }\r\n-\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return val && typeof val.then === 'function'\r\n-    }\r\n-\r\n-    function assert (condition, msg) {\r\n-        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\r\n-    }\r\n-\r\n-    \u002F\u002F Base data struct for store's module, package with some attribute and method\r\n-    var Module = function Module (rawModule, runtime) {\r\n-        this.runtime = runtime;\r\n-        \u002F\u002F Store some children item\r\n-        this._children = Object.create(null);\r\n-        \u002F\u002F Store the origin module object which passed by programmer\r\n-        this._rawModule = rawModule;\r\n-        var rawState = rawModule.state;\r\n-\r\n-        \u002F\u002F Store the origin module's state\r\n-        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\r\n-    };\r\n-\r\n-    var prototypeAccessors = { namespaced: { configurable: true } };\r\n-\r\n-    prototypeAccessors.namespaced.get = function () {\r\n-        return !!this._rawModule.namespaced\r\n-    };\r\n-\r\n-    Module.prototype.addChild = function addChild (key, module) {\r\n-        this._children[key] = module;\r\n-    };\r\n-\r\n-    Module.prototype.removeChild = function removeChild (key) {\r\n-        delete this._children[key];\r\n-    };\r\n-\r\n-    Module.prototype.getChild = function getChild (key) {\r\n-        return this._children[key]\r\n-    };\r\n-\r\n-    Module.prototype.update = function update (rawModule) {\r\n-        this._rawModule.namespaced = rawModule.namespaced;\r\n-        if (rawModule.actions) {\r\n-            this._rawModule.actions = rawModule.actions;\r\n-        }\r\n-        if (rawModule.mutations) {\r\n-            this._rawModule.mutations = rawModule.mutations;\r\n-        }\r\n-        if (rawModule.getters) {\r\n-            this._rawModule.getters = rawModule.getters;\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachChild = function forEachChild (fn) {\r\n-        forEachValue(this._children, fn);\r\n-    };\r\n-\r\n-    Module.prototype.forEachGetter = function forEachGetter (fn) {\r\n-        if (this._rawModule.getters) {\r\n-            forEachValue(this._rawModule.getters, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachAction = function forEachAction (fn) {\r\n-        if (this._rawModule.actions) {\r\n-            forEachValue(this._rawModule.actions, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachMutation = function forEachMutation (fn) {\r\n-        if (this._rawModule.mutations) {\r\n-            forEachValue(this._rawModule.mutations, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Object.defineProperties( Module.prototype, prototypeAccessors );\r\n-\r\n-    var ModuleCollection = function ModuleCollection (rawRootModule) {\r\n-        \u002F\u002F register root module (Vuex.Store options)\r\n-        this.register([], rawRootModule, false);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.get = function get (path) {\r\n-        return path.reduce(function (module, key) {\r\n-            return module.getChild(key)\r\n-        }, this.root)\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\r\n-        var module = this.root;\r\n-        return path.reduce(function (namespace, key) {\r\n-            module = module.getChild(key);\r\n-            return namespace + (module.namespaced ? key + '\u002F' : '')\r\n-        }, '')\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\r\n-        update([], this.root, rawRootModule);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\r\n-        var this$1 = this;\r\n-        if ( runtime === void 0 ) runtime = true;\r\n-\r\n-        {\r\n-            assertRawModule(path, rawModule);\r\n-        }\r\n-\r\n-        var newModule = new Module(rawModule, runtime);\r\n-        if (path.length === 0) {\r\n-            this.root = newModule;\r\n-        } else {\r\n-            var parent = this.get(path.slice(0, -1));\r\n-            parent.addChild(path[path.length - 1], newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F register nested modules\r\n-        if (rawModule.modules) {\r\n-            forEachValue(rawModule.modules, function (rawChildModule, key) {\r\n-                this$1.register(path.concat(key), rawChildModule, runtime);\r\n-            });\r\n-        }\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.unregister = function unregister (path) {\r\n-        var parent = this.get(path.slice(0, -1));\r\n-        var key = path[path.length - 1];\r\n-        if (!parent.getChild(key).runtime) { return }\r\n-\r\n-        parent.removeChild(key);\r\n-    };\r\n-\r\n-    function update (path, targetModule, newModule) {\r\n-        {\r\n-            assertRawModule(path, newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F update target module\r\n-        targetModule.update(newModule);\r\n-\r\n-        \u002F\u002F update nested modules\r\n-        if (newModule.modules) {\r\n-            for (var key in newModule.modules) {\r\n-                if (!targetModule.getChild(key)) {\r\n-                    {\r\n-                        console.warn(\r\n-                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\r\n-                            'manual reload is needed'\r\n-                        );\r\n-                    }\r\n-                    return\r\n-                }\r\n-                update(\r\n-                    path.concat(key),\r\n-                    targetModule.getChild(key),\r\n-                    newModule.modules[key]\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var functionAssert = {\r\n-        assert: function (value) { return typeof value === 'function'; },\r\n-        expected: 'function'\r\n-    };\r\n-\r\n-    var objectAssert = {\r\n-        assert: function (value) { return typeof value === 'function' ||\r\n-            (typeof value === 'object' && typeof value.handler === 'function'); },\r\n-        expected: 'function or object with \"handler\" function'\r\n-    };\r\n-\r\n-    var assertTypes = {\r\n-        getters: functionAssert,\r\n-        mutations: functionAssert,\r\n-        actions: objectAssert\r\n-    };\r\n-\r\n-    function assertRawModule (path, rawModule) {\r\n-        Object.keys(assertTypes).forEach(function (key) {\r\n-            if (!rawModule[key]) { return }\r\n-\r\n-            var assertOptions = assertTypes[key];\r\n-\r\n-            forEachValue(rawModule[key], function (value, type) {\r\n-                assert(\r\n-                    assertOptions.assert(value),\r\n-                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\r\n-                );\r\n-            });\r\n-        });\r\n-    }\r\n-\r\n-    function makeAssertionMessage (path, key, type, value, expected) {\r\n-        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\r\n-        if (path.length > 0) {\r\n-            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\r\n-        }\r\n-        buf += \" is \" + (JSON.stringify(value)) + \".\";\r\n-        return buf\r\n-    }\r\n-\r\n-    var Vue; \u002F\u002F bind on install\r\n-\r\n-    var Store = function Store (options) {\r\n-        var this$1 = this;\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\r\n-        \u002F\u002F To allow users to avoid auto-installation in some cases,\r\n-        \u002F\u002F this code should be placed here. See #731\r\n-        if (!Vue && typeof window !== 'undefined' && window.Vue) {\r\n-            install(window.Vue);\r\n-        }\r\n-\r\n-        {\r\n-            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\r\n-            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\r\n-            assert(this instanceof Store, \"store must be called with the new operator.\");\r\n-        }\r\n-\r\n-        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\r\n-        var strict = options.strict; if ( strict === void 0 ) strict = false;\r\n-\r\n-        \u002F\u002F store internal state\r\n-        this._committing = false;\r\n-        this._actions = Object.create(null);\r\n-        this._actionSubscribers = [];\r\n-        this._mutations = Object.create(null);\r\n-        this._wrappedGetters = Object.create(null);\r\n-        this._modules = new ModuleCollection(options);\r\n-        this._modulesNamespaceMap = Object.create(null);\r\n-        this._subscribers = [];\r\n-        this._watcherVM = new Vue();\r\n-\r\n-        \u002F\u002F bind commit and dispatch to self\r\n-        var store = this;\r\n-        var ref = this;\r\n-        var dispatch = ref.dispatch;\r\n-        var commit = ref.commit;\r\n-        this.dispatch = function boundDispatch (type, payload) {\r\n-            return dispatch.call(store, type, payload)\r\n-        };\r\n-        this.commit = function boundCommit (type, payload, options) {\r\n-            return commit.call(store, type, payload, options)\r\n-        };\r\n-\r\n-        \u002F\u002F strict mode\r\n-        this.strict = strict;\r\n-\r\n-        var state = this._modules.root.state;\r\n-\r\n-        \u002F\u002F init root module.\r\n-        \u002F\u002F this also recursively registers all sub-modules\r\n-        \u002F\u002F and collects all module getters inside this._wrappedGetters\r\n-        installModule(this, state, [], this._modules.root);\r\n-\r\n-        \u002F\u002F initialize the store vm, which is responsible for the reactivity\r\n-        \u002F\u002F (also registers _wrappedGetters as computed properties)\r\n-        resetStoreVM(this, state);\r\n-\r\n-        \u002F\u002F apply plugins\r\n-        plugins.forEach(function (plugin) { return plugin(this$1); });\r\n-\r\n-        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\r\n-        if (useDevtools) {\r\n-            devtoolPlugin(this);\r\n-        }\r\n-    };\r\n-\r\n-    var prototypeAccessors$1 = { state: { configurable: true } };\r\n-\r\n-    prototypeAccessors$1.state.get = function () {\r\n-        return this._vm._data.$$state\r\n-    };\r\n-\r\n-    prototypeAccessors$1.state.set = function (v) {\r\n-        {\r\n-            assert(false, \"use store.replaceState() to explicit replace store state.\");\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.commit = function commit (_type, _payload, _options) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style commit\r\n-        var ref = unifyObjectStyle(_type, _payload, _options);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-        var options = ref.options;\r\n-\r\n-        var mutation = { type: type, payload: payload };\r\n-        var entry = this._mutations[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown mutation type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        this._withCommit(function () {\r\n-            entry.forEach(function commitIterator (handler) {\r\n-                handler(payload);\r\n-            });\r\n-        });\r\n-        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\r\n-\r\n-        if (\r\n-            options && options.silent\r\n-        ) {\r\n-            console.warn(\r\n-                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\r\n-                'Use the filter functionality in the vue-devtools'\r\n-            );\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.dispatch = function dispatch (_type, _payload) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style dispatch\r\n-        var ref = unifyObjectStyle(_type, _payload);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-\r\n-        var action = { type: type, payload: payload };\r\n-        var entry = this._actions[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown action type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        try {\r\n-            this._actionSubscribers\r\n-                .filter(function (sub) { return sub.before; })\r\n-                .forEach(function (sub) { return sub.before(action, this$1.state); });\r\n-        } catch (e) {\r\n-            {\r\n-                console.warn(\"[vuex] error in before action subscribers: \");\r\n-                console.error(e);\r\n-            }\r\n-        }\r\n-\r\n-        var result = entry.length > 1\r\n-            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\r\n-            : entry[0](payload);\r\n-\r\n-        return result.then(function (res) {\r\n-            try {\r\n-                this$1._actionSubscribers\r\n-                    .filter(function (sub) { return sub.after; })\r\n-                    .forEach(function (sub) { return sub.after(action, this$1.state); });\r\n-            } catch (e) {\r\n-                {\r\n-                    console.warn(\"[vuex] error in after action subscribers: \");\r\n-                    console.error(e);\r\n-                }\r\n-            }\r\n-            return res\r\n-        })\r\n-    };\r\n-\r\n-    Store.prototype.subscribe = function subscribe (fn) {\r\n-        return genericSubscribe(fn, this._subscribers)\r\n-    };\r\n-\r\n-    Store.prototype.subscribeAction = function subscribeAction (fn) {\r\n-        var subs = typeof fn === 'function' ? { before: fn } : fn;\r\n-        return genericSubscribe(subs, this._actionSubscribers)\r\n-    };\r\n-\r\n-    Store.prototype.watch = function watch (getter, cb, options) {\r\n-        var this$1 = this;\r\n-\r\n-        {\r\n-            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\r\n-        }\r\n-        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\r\n-    };\r\n-\r\n-    Store.prototype.replaceState = function replaceState (state) {\r\n-        var this$1 = this;\r\n-\r\n-        this._withCommit(function () {\r\n-            this$1._vm._data.$$state = state;\r\n-        });\r\n-    };\r\n-\r\n-    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-            assert(path.length > 0, 'cannot register the root module by using registerModule.');\r\n-        }\r\n-\r\n-        this._modules.register(path, rawModule);\r\n-        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\r\n-        \u002F\u002F reset store to update getters...\r\n-        resetStoreVM(this, this.state);\r\n-    };\r\n-\r\n-    Store.prototype.unregisterModule = function unregisterModule (path) {\r\n-        var this$1 = this;\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-        }\r\n-\r\n-        this._modules.unregister(path);\r\n-        this._withCommit(function () {\r\n-            var parentState = getNestedState(this$1.state, path.slice(0, -1));\r\n-            Vue.delete(parentState, path[path.length - 1]);\r\n-        });\r\n-        resetStore(this);\r\n-    };\r\n-\r\n-    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\r\n-        this._modules.update(newOptions);\r\n-        resetStore(this, true);\r\n-    };\r\n-\r\n-    Store.prototype._withCommit = function _withCommit (fn) {\r\n-        var committing = this._committing;\r\n-        this._committing = true;\r\n-        fn();\r\n-        this._committing = committing;\r\n-    };\r\n-\r\n-    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\r\n-\r\n-    function genericSubscribe (fn, subs) {\r\n-        if (subs.indexOf(fn) \u003C 0) {\r\n-            subs.push(fn);\r\n-        }\r\n-        return function () {\r\n-            var i = subs.indexOf(fn);\r\n-            if (i > -1) {\r\n-                subs.splice(i, 1);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function resetStore (store, hot) {\r\n-        store._actions = Object.create(null);\r\n-        store._mutations = Object.create(null);\r\n-        store._wrappedGetters = Object.create(null);\r\n-        store._modulesNamespaceMap = Object.create(null);\r\n-        var state = store.state;\r\n-        \u002F\u002F init all modules\r\n-        installModule(store, state, [], store._modules.root, true);\r\n-        \u002F\u002F reset vm\r\n-        resetStoreVM(store, state, hot);\r\n-    }\r\n-\r\n-    function resetStoreVM (store, state, hot) {\r\n-        var oldVm = store._vm;\r\n-\r\n-        \u002F\u002F bind store public getters\r\n-        store.getters = {};\r\n-        var wrappedGetters = store._wrappedGetters;\r\n-        var computed = {};\r\n-        forEachValue(wrappedGetters, function (fn, key) {\r\n-            \u002F\u002F use computed to leverage its lazy-caching mechanism\r\n-            computed[key] = function () { return fn(store); };\r\n-            Object.defineProperty(store.getters, key, {\r\n-                get: function () { return store._vm[key]; },\r\n-                enumerable: true \u002F\u002F for local getters\r\n-            });\r\n-        });\r\n-\r\n-        \u002F\u002F use a Vue instance to store the state tree\r\n-        \u002F\u002F suppress warnings just in case the user has added\r\n-        \u002F\u002F some funky global mixins\r\n-        var silent = Vue.config.silent;\r\n-        Vue.config.silent = true;\r\n-        store._vm = new Vue({\r\n-            data: {\r\n-                $$state: state\r\n-            },\r\n-            computed: computed\r\n-        });\r\n-        Vue.config.silent = silent;\r\n-\r\n-        \u002F\u002F enable strict mode for new vm\r\n-        if (store.strict) {\r\n-            enableStrictMode(store);\r\n-        }\r\n-\r\n-        if (oldVm) {\r\n-            if (hot) {\r\n-                \u002F\u002F dispatch changes in all subscribed watchers\r\n-                \u002F\u002F to force getter re-evaluation for hot reloading.\r\n-                store._withCommit(function () {\r\n-                    oldVm._data.$$state = null;\r\n-                });\r\n-            }\r\n-            Vue.nextTick(function () { return oldVm.$destroy(); });\r\n-        }\r\n-    }\r\n-\r\n-    function installModule (store, rootState, path, module, hot) {\r\n-        var isRoot = !path.length;\r\n-        var namespace = store._modules.getNamespace(path);\r\n-\r\n-        \u002F\u002F register in namespace map\r\n-        if (module.namespaced) {\r\n-            store._modulesNamespaceMap[namespace] = module;\r\n-        }\r\n-\r\n-        \u002F\u002F set state\r\n-        if (!isRoot && !hot) {\r\n-            var parentState = getNestedState(rootState, path.slice(0, -1));\r\n-            var moduleName = path[path.length - 1];\r\n-            store._withCommit(function () {\r\n-                Vue.set(parentState, moduleName, module.state);\r\n-            });\r\n-        }\r\n-\r\n-        var local = module.context = makeLocalContext(store, namespace, path);\r\n-\r\n-        module.forEachMutation(function (mutation, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerMutation(store, namespacedType, mutation, local);\r\n-        });\r\n-\r\n-        module.forEachAction(function (action, key) {\r\n-            var type = action.root ? key : namespace + key;\r\n-            var handler = action.handler || action;\r\n-            registerAction(store, type, handler, local);\r\n-        });\r\n-\r\n-        module.forEachGetter(function (getter, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerGetter(store, namespacedType, getter, local);\r\n-        });\r\n-\r\n-        module.forEachChild(function (child, key) {\r\n-            installModule(store, rootState, path.concat(key), child, hot);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * make localized dispatch, commit, getters and state\r\n-     * if there is no namespace, just use root ones\r\n-     *\u002F\r\n-    function makeLocalContext (store, namespace, path) {\r\n-        var noNamespace = namespace === '';\r\n-\r\n-        var local = {\r\n-            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._actions[type]) {\r\n-                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                return store.dispatch(type, payload)\r\n-            },\r\n-\r\n-            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._mutations[type]) {\r\n-                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                store.commit(type, payload, options);\r\n-            }\r\n-        };\r\n-\r\n-        \u002F\u002F getters and state object must be gotten lazily\r\n-        \u002F\u002F because they will be changed by vm update\r\n-        Object.defineProperties(local, {\r\n-            getters: {\r\n-                get: noNamespace\r\n-                    ? function () { return store.getters; }\r\n-                    : function () { return makeLocalGetters(store, namespace); }\r\n-            },\r\n-            state: {\r\n-                get: function () { return getNestedState(store.state, path); }\r\n-            }\r\n-        });\r\n-\r\n-        return local\r\n-    }\r\n-\r\n-    function makeLocalGetters (store, namespace) {\r\n-        var gettersProxy = {};\r\n-\r\n-        var splitPos = namespace.length;\r\n-        Object.keys(store.getters).forEach(function (type) {\r\n-            \u002F\u002F skip if the target getter is not match this namespace\r\n-            if (type.slice(0, splitPos) !== namespace) { return }\r\n-\r\n-            \u002F\u002F extract local getter type\r\n-            var localType = type.slice(splitPos);\r\n-\r\n-            \u002F\u002F Add a port to the getters proxy.\r\n-            \u002F\u002F Define as getter property because\r\n-            \u002F\u002F we do not want to evaluate the getters in this time.\r\n-            Object.defineProperty(gettersProxy, localType, {\r\n-                get: function () { return store.getters[type]; },\r\n-                enumerable: true\r\n-            });\r\n-        });\r\n-\r\n-        return gettersProxy\r\n-    }\r\n-\r\n-    function registerMutation (store, type, handler, local) {\r\n-        var entry = store._mutations[type] || (store._mutations[type] = []);\r\n-        entry.push(function wrappedMutationHandler (payload) {\r\n-            handler.call(store, local.state, payload);\r\n-        });\r\n-    }\r\n-\r\n-    function registerAction (store, type, handler, local) {\r\n-        var entry = store._actions[type] || (store._actions[type] = []);\r\n-        entry.push(function wrappedActionHandler (payload, cb) {\r\n-            var res = handler.call(store, {\r\n-                dispatch: local.dispatch,\r\n-                commit: local.commit,\r\n-                getters: local.getters,\r\n-                state: local.state,\r\n-                rootGetters: store.getters,\r\n-                rootState: store.state\r\n-            }, payload, cb);\r\n-            if (!isPromise(res)) {\r\n-                res = Promise.resolve(res);\r\n-            }\r\n-            if (store._devtoolHook) {\r\n-                return res.catch(function (err) {\r\n-                    store._devtoolHook.emit('vuex:error', err);\r\n-                    throw err\r\n-                })\r\n-            } else {\r\n-                return res\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    function registerGetter (store, type, rawGetter, local) {\r\n-        if (store._wrappedGetters[type]) {\r\n-            {\r\n-                console.error((\"[vuex] duplicate getter key: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        store._wrappedGetters[type] = function wrappedGetter (store) {\r\n-            return rawGetter(\r\n-                local.state, \u002F\u002F local state\r\n-                local.getters, \u002F\u002F local getters\r\n-                store.state, \u002F\u002F root state\r\n-                store.getters \u002F\u002F root getters\r\n-            )\r\n-        };\r\n-    }\r\n-\r\n-    function enableStrictMode (store) {\r\n-        store._vm.$watch(function () { return this._data.$$state }, function () {\r\n-            {\r\n-                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\r\n-            }\r\n-        }, { deep: true, sync: true });\r\n-    }\r\n-\r\n-    function getNestedState (state, path) {\r\n-        return path.length\r\n-            ? path.reduce(function (state, key) { return state[key]; }, state)\r\n-            : state\r\n-    }\r\n-\r\n-    function unifyObjectStyle (type, payload, options) {\r\n-        if (isObject(type) && type.type) {\r\n-            options = payload;\r\n-            payload = type;\r\n-            type = type.type;\r\n-        }\r\n-\r\n-        {\r\n-            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\r\n-        }\r\n-\r\n-        return { type: type, payload: payload, options: options }\r\n-    }\r\n-\r\n-    function install (_Vue) {\r\n-        if (Vue && _Vue === Vue) {\r\n-            {\r\n-                console.error(\r\n-                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\r\n-                );\r\n-            }\r\n-            return\r\n-        }\r\n-        Vue = _Vue;\r\n-        applyMixin(Vue);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the state.\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\r\n-     * @param {Object}\r\n-     *\u002F\r\n-    var mapState = normalizeNamespace(function (namespace, states) {\r\n-        var res = {};\r\n-        normalizeMap(states).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedState () {\r\n-                var state = this.$store.state;\r\n-                var getters = this.$store.getters;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    state = module.context.state;\r\n-                    getters = module.context.getters;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.call(this, state, getters)\r\n-                    : state[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for committing the mutation\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapMutations = normalizeNamespace(function (namespace, mutations) {\r\n-        var res = {};\r\n-        normalizeMap(mutations).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedMutation () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F Get the commit method from store\r\n-                var commit = this.$store.commit;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    commit = module.context.commit;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [commit].concat(args))\r\n-                    : commit.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the getters\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} getters\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapGetters = normalizeNamespace(function (namespace, getters) {\r\n-        var res = {};\r\n-        normalizeMap(getters).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            \u002F\u002F The namespace has been mutated by normalizeNamespace\r\n-            val = namespace + val;\r\n-            res[key] = function mappedGetter () {\r\n-                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\r\n-                    return\r\n-                }\r\n-                if (!(val in this.$store.getters)) {\r\n-                    console.error((\"[vuex] unknown getter: \" + val));\r\n-                    return\r\n-                }\r\n-                return this.$store.getters[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for dispatch the action\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapActions = normalizeNamespace(function (namespace, actions) {\r\n-        var res = {};\r\n-        normalizeMap(actions).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedAction () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F get dispatch function from store\r\n-                var dispatch = this.$store.dispatch;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    dispatch = module.context.dispatch;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [dispatch].concat(args))\r\n-                    : dispatch.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var createNamespacedHelpers = function (namespace) { return ({\r\n-        mapState: mapState.bind(null, namespace),\r\n-        mapGetters: mapGetters.bind(null, namespace),\r\n-        mapMutations: mapMutations.bind(null, namespace),\r\n-        mapActions: mapActions.bind(null, namespace)\r\n-    }); };\r\n-\r\n-    \u002F**\r\n-     * Normalize the map\r\n-     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\r\n-     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\r\n-     * @param {Array|Object} map\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function normalizeMap (map) {\r\n-        return Array.isArray(map)\r\n-            ? map.map(function (key) { return ({ key: key, val: key }); })\r\n-            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\r\n-     * @param {Function} fn\r\n-     * @return {Function}\r\n-     *\u002F\r\n-    function normalizeNamespace (fn) {\r\n-        return function (namespace, map) {\r\n-            if (typeof namespace !== 'string') {\r\n-                map = namespace;\r\n-                namespace = '';\r\n-            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\r\n-                namespace += '\u002F';\r\n-            }\r\n-            return fn(namespace, map)\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Search a special module from store by namespace. if module not exist, print error message.\r\n-     * @param {Object} store\r\n-     * @param {String} helper\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function getModuleByNamespace (store, helper, namespace) {\r\n-        var module = store._modulesNamespaceMap[namespace];\r\n-        if (!module) {\r\n-            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\r\n-        }\r\n-        return module\r\n-    }\r\n-\r\n-    var index = {\r\n-        Store: Store,\r\n-        install: install,\r\n-        version: '3.1.0',\r\n-        mapState: mapState,\r\n-        mapMutations: mapMutations,\r\n-        mapGetters: mapGetters,\r\n-        mapActions: mapActions,\r\n-        createNamespacedHelpers: createNamespacedHelpers\r\n-    };\r\n-\r\n-    return index;\r\n-\r\n-}));\r\n-\u002F*!\r\n- * vue-resource v1.3.4\r\n- * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global.VueResource = factory());\r\n-}(this, (function () { 'use strict';\r\n-\r\n-    \u002F**\r\n-     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\r\n-     *\u002F\r\n-\r\n-    var RESOLVED = 0;\r\n-    var REJECTED = 1;\r\n-    var PENDING  = 2;\r\n-\r\n-    function Promise$1(executor) {\r\n-\r\n-        this.state = PENDING;\r\n-        this.value = undefined;\r\n-        this.deferred = [];\r\n-\r\n-        var promise = this;\r\n-\r\n-        try {\r\n-            executor(function (x) {\r\n-                promise.resolve(x);\r\n-            }, function (r) {\r\n-                promise.reject(r);\r\n-            });\r\n-        } catch (e) {\r\n-            promise.reject(e);\r\n-        }\r\n-    }\r\n-\r\n-    Promise$1.reject = function (r) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            reject(r);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.resolve = function (x) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            resolve(x);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.all = function all(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            var count = 0, result = [];\r\n-\r\n-            if (iterable.length === 0) {\r\n-                resolve(result);\r\n-            }\r\n-\r\n-            function resolver(i) {\r\n-                return function (x) {\r\n-                    result[i] = x;\r\n-                    count += 1;\r\n-\r\n-                    if (count === iterable.length) {\r\n-                        resolve(result);\r\n-                    }\r\n-                };\r\n-            }\r\n-\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.race = function race(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolve, reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    var p$1 = Promise$1.prototype;\r\n-\r\n-    p$1.resolve = function resolve(x) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (x === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            var called = false;\r\n-\r\n-            try {\r\n-                var then = x && x['then'];\r\n-\r\n-                if (x !== null && typeof x === 'object' && typeof then === 'function') {\r\n-                    then.call(x, function (x) {\r\n-                        if (!called) {\r\n-                            promise.resolve(x);\r\n-                        }\r\n-                        called = true;\r\n-\r\n-                    }, function (r) {\r\n-                        if (!called) {\r\n-                            promise.reject(r);\r\n-                        }\r\n-                        called = true;\r\n-                    });\r\n-                    return;\r\n-                }\r\n-            } catch (e) {\r\n-                if (!called) {\r\n-                    promise.reject(e);\r\n-                }\r\n-                return;\r\n-            }\r\n-\r\n-            promise.state = RESOLVED;\r\n-            promise.value = x;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.reject = function reject(reason) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (reason === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            promise.state = REJECTED;\r\n-            promise.value = reason;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.notify = function notify() {\r\n-        var promise = this;\r\n-\r\n-        nextTick(function () {\r\n-            if (promise.state !== PENDING) {\r\n-                while (promise.deferred.length) {\r\n-                    var deferred = promise.deferred.shift(),\r\n-                        onResolved = deferred[0],\r\n-                        onRejected = deferred[1],\r\n-                        resolve = deferred[2],\r\n-                        reject = deferred[3];\r\n-\r\n-                    try {\r\n-                        if (promise.state === RESOLVED) {\r\n-                            if (typeof onResolved === 'function') {\r\n-                                resolve(onResolved.call(undefined, promise.value));\r\n-                            } else {\r\n-                                resolve(promise.value);\r\n-                            }\r\n-                        } else if (promise.state === REJECTED) {\r\n-                            if (typeof onRejected === 'function') {\r\n-                                resolve(onRejected.call(undefined, promise.value));\r\n-                            } else {\r\n-                                reject(promise.value);\r\n-                            }\r\n-                        }\r\n-                    } catch (e) {\r\n-                        reject(e);\r\n-                    }\r\n-                }\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    p$1.then = function then(onResolved, onRejected) {\r\n-        var promise = this;\r\n-\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            promise.deferred.push([onResolved, onRejected, resolve, reject]);\r\n-            promise.notify();\r\n-        });\r\n-    };\r\n-\r\n-    p$1.catch = function (onRejected) {\r\n-        return this.then(undefined, onRejected);\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Promise adapter.\r\n-     *\u002F\r\n-\r\n-    if (typeof Promise === 'undefined') {\r\n-        window.Promise = Promise$1;\r\n-    }\r\n-\r\n-    function PromiseObj(executor, context) {\r\n-\r\n-        if (executor instanceof Promise) {\r\n-            this.promise = executor;\r\n-        } else {\r\n-            this.promise = new Promise(executor.bind(context));\r\n-        }\r\n-\r\n-        this.context = context;\r\n-    }\r\n-\r\n-    PromiseObj.all = function (iterable, context) {\r\n-        return new PromiseObj(Promise.all(iterable), context);\r\n-    };\r\n-\r\n-    PromiseObj.resolve = function (value, context) {\r\n-        return new PromiseObj(Promise.resolve(value), context);\r\n-    };\r\n-\r\n-    PromiseObj.reject = function (reason, context) {\r\n-        return new PromiseObj(Promise.reject(reason), context);\r\n-    };\r\n-\r\n-    PromiseObj.race = function (iterable, context) {\r\n-        return new PromiseObj(Promise.race(iterable), context);\r\n-    };\r\n-\r\n-    var p = PromiseObj.prototype;\r\n-\r\n-    p.bind = function (context) {\r\n-        this.context = context;\r\n-        return this;\r\n-    };\r\n-\r\n-    p.then = function (fulfilled, rejected) {\r\n-\r\n-        if (fulfilled && fulfilled.bind && this.context) {\r\n-            fulfilled = fulfilled.bind(this.context);\r\n-        }\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\r\n-    };\r\n-\r\n-    p.catch = function (rejected) {\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.catch(rejected), this.context);\r\n-    };\r\n-\r\n-    p.finally = function (callback) {\r\n-\r\n-        return this.then(function (value) {\r\n-                callback.call(this);\r\n-                return value;\r\n-            }, function (reason) {\r\n-                callback.call(this);\r\n-                return Promise.reject(reason);\r\n-            }\r\n-        );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Utility functions.\r\n-     *\u002F\r\n-\r\n-    var ref = {};\r\n-    var hasOwnProperty = ref.hasOwnProperty;\r\n-\r\n-    var ref$1 = [];\r\n-    var slice = ref$1.slice;\r\n-    var debug = false;\r\n-    var ntick;\r\n-\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-\r\n-    var Util = function (ref) {\r\n-        var config = ref.config;\r\n-        var nextTick = ref.nextTick;\r\n-\r\n-        ntick = nextTick;\r\n-        debug = config.debug || !config.silent;\r\n-    };\r\n-\r\n-    function warn(msg) {\r\n-        if (typeof console !== 'undefined' && debug) {\r\n-            console.warn('[VueResource warn]: ' + msg);\r\n-        }\r\n-    }\r\n-\r\n-    function error(msg) {\r\n-        if (typeof console !== 'undefined') {\r\n-            console.error(msg);\r\n-        }\r\n-    }\r\n-\r\n-    function nextTick(cb, ctx) {\r\n-        return ntick(cb, ctx);\r\n-    }\r\n-\r\n-    function trim(str) {\r\n-        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\r\n-    }\r\n-\r\n-    function trimEnd(str, chars) {\r\n-\r\n-        if (str && chars === undefined) {\r\n-            return str.replace(\u002F\\s+$\u002F, '');\r\n-        }\r\n-\r\n-        if (!str || !chars) {\r\n-            return str;\r\n-        }\r\n-\r\n-        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\r\n-    }\r\n-\r\n-    function toLower(str) {\r\n-        return str ? str.toLowerCase() : '';\r\n-    }\r\n-\r\n-    function toUpper(str) {\r\n-        return str ? str.toUpperCase() : '';\r\n-    }\r\n-\r\n-    var isArray = Array.isArray;\r\n-\r\n-    function isString(val) {\r\n-        return typeof val === 'string';\r\n-    }\r\n-\r\n-\r\n-\r\n-    function isFunction(val) {\r\n-        return typeof val === 'function';\r\n-    }\r\n-\r\n-    function isObject(obj) {\r\n-        return obj !== null && typeof obj === 'object';\r\n-    }\r\n-\r\n-    function isPlainObject(obj) {\r\n-        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\r\n-    }\r\n-\r\n-    function isBlob(obj) {\r\n-        return typeof Blob !== 'undefined' && obj instanceof Blob;\r\n-    }\r\n-\r\n-    function isFormData(obj) {\r\n-        return typeof FormData !== 'undefined' && obj instanceof FormData;\r\n-    }\r\n-\r\n-    function when(value, fulfilled, rejected) {\r\n-\r\n-        var promise = PromiseObj.resolve(value);\r\n-\r\n-        if (arguments.length \u003C 2) {\r\n-            return promise;\r\n-        }\r\n-\r\n-        return promise.then(fulfilled, rejected);\r\n-    }\r\n-\r\n-    function options(fn, obj, opts) {\r\n-\r\n-        opts = opts || {};\r\n-\r\n-        if (isFunction(opts)) {\r\n-            opts = opts.call(obj);\r\n-        }\r\n-\r\n-        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\r\n-    }\r\n-\r\n-    function each(obj, iterator) {\r\n-\r\n-        var i, key;\r\n-\r\n-        if (isArray(obj)) {\r\n-            for (i = 0; i \u003C obj.length; i++) {\r\n-                iterator.call(obj[i], obj[i], i);\r\n-            }\r\n-        } else if (isObject(obj)) {\r\n-            for (key in obj) {\r\n-                if (hasOwnProperty.call(obj, key)) {\r\n-                    iterator.call(obj[key], obj[key], key);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        return obj;\r\n-    }\r\n-\r\n-    var assign = Object.assign || _assign;\r\n-\r\n-    function merge(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source, true);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function defaults(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-\r\n-            for (var key in source) {\r\n-                if (target[key] === undefined) {\r\n-                    target[key] = source[key];\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _assign(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _merge(target, source, deep) {\r\n-        for (var key in source) {\r\n-            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\r\n-                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\r\n-                    target[key] = {};\r\n-                }\r\n-                if (isArray(source[key]) && !isArray(target[key])) {\r\n-                    target[key] = [];\r\n-                }\r\n-                _merge(target[key], source[key], deep);\r\n-            } else if (source[key] !== undefined) {\r\n-                target[key] = source[key];\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Root Prefix Transform.\r\n-     *\u002F\r\n-\r\n-    var root = function (options$$1, next) {\r\n-\r\n-        var url = next(options$$1);\r\n-\r\n-        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\r\n-            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Query Parameter Transform.\r\n-     *\u002F\r\n-\r\n-    var query = function (options$$1, next) {\r\n-\r\n-        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\r\n-\r\n-        each(options$$1.params, function (value, key) {\r\n-            if (urlParams.indexOf(key) === -1) {\r\n-                query[key] = value;\r\n-            }\r\n-        });\r\n-\r\n-        query = Url.params(query);\r\n-\r\n-        if (query) {\r\n-            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\r\n-     *\u002F\r\n-\r\n-    function expand(url, params, variables) {\r\n-\r\n-        var tmpl = parse(url), expanded = tmpl.expand(params);\r\n-\r\n-        if (variables) {\r\n-            variables.push.apply(variables, tmpl.vars);\r\n-        }\r\n-\r\n-        return expanded;\r\n-    }\r\n-\r\n-    function parse(template) {\r\n-\r\n-        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\r\n-\r\n-        return {\r\n-            vars: variables,\r\n-            expand: function expand(context) {\r\n-                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\r\n-                    if (expression) {\r\n-\r\n-                        var operator = null, values = [];\r\n-\r\n-                        if (operators.indexOf(expression.charAt(0)) !== -1) {\r\n-                            operator = expression.charAt(0);\r\n-                            expression = expression.substr(1);\r\n-                        }\r\n-\r\n-                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\r\n-                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\r\n-                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\r\n-                            variables.push(tmp[1]);\r\n-                        });\r\n-\r\n-                        if (operator && operator !== '+') {\r\n-\r\n-                            var separator = ',';\r\n-\r\n-                            if (operator === '?') {\r\n-                                separator = '&';\r\n-                            } else if (operator !== '#') {\r\n-                                separator = operator;\r\n-                            }\r\n-\r\n-                            return (values.length !== 0 ? operator : '') + values.join(separator);\r\n-                        } else {\r\n-                            return values.join(',');\r\n-                        }\r\n-\r\n-                    } else {\r\n-                        return encodeReserved(literal);\r\n-                    }\r\n-                });\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function getValues(context, operator, key, modifier) {\r\n-\r\n-        var value = context[key], result = [];\r\n-\r\n-        if (isDefined(value) && value !== '') {\r\n-            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n-                value = value.toString();\r\n-\r\n-                if (modifier && modifier !== '*') {\r\n-                    value = value.substring(0, parseInt(modifier, 10));\r\n-                }\r\n-\r\n-                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-            } else {\r\n-                if (modifier === '*') {\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                result.push(encodeValue(operator, value[k], k));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-                } else {\r\n-                    var tmp = [];\r\n-\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            tmp.push(encodeValue(operator, value));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                tmp.push(encodeURIComponent(k));\r\n-                                tmp.push(encodeValue(operator, value[k].toString()));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-\r\n-                    if (isKeyOperator(operator)) {\r\n-                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\r\n-                    } else if (tmp.length !== 0) {\r\n-                        result.push(tmp.join(','));\r\n-                    }\r\n-                }\r\n-            }\r\n-        } else {\r\n-            if (operator === ';') {\r\n-                result.push(encodeURIComponent(key));\r\n-            } else if (value === '' && (operator === '&' || operator === '?')) {\r\n-                result.push(encodeURIComponent(key) + '=');\r\n-            } else if (value === '') {\r\n-                result.push('');\r\n-            }\r\n-        }\r\n-\r\n-        return result;\r\n-    }\r\n-\r\n-    function isDefined(value) {\r\n-        return value !== undefined && value !== null;\r\n-    }\r\n-\r\n-    function isKeyOperator(operator) {\r\n-        return operator === ';' || operator === '&' || operator === '?';\r\n-    }\r\n-\r\n-    function encodeValue(operator, value, key) {\r\n-\r\n-        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\r\n-\r\n-        if (key) {\r\n-            return encodeURIComponent(key) + '=' + value;\r\n-        } else {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    function encodeReserved(str) {\r\n-        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\r\n-            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\r\n-                part = encodeURI(part);\r\n-            }\r\n-            return part;\r\n-        }).join('');\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * URL Template (RFC 6570) Transform.\r\n-     *\u002F\r\n-\r\n-    var template = function (options) {\r\n-\r\n-        var variables = [], url = expand(options.url, options.params, variables);\r\n-\r\n-        variables.forEach(function (key) {\r\n-            delete options.params[key];\r\n-        });\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for URL templating.\r\n-     *\u002F\r\n-\r\n-    function Url(url, params) {\r\n-\r\n-        var self = this || {}, options$$1 = url, transform;\r\n-\r\n-        if (isString(url)) {\r\n-            options$$1 = {url: url, params: params};\r\n-        }\r\n-\r\n-        options$$1 = merge({}, Url.options, self.$options, options$$1);\r\n-\r\n-        Url.transforms.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Url.transform[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                transform = factory(handler, transform, self.$vm);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return transform(options$$1);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Url options.\r\n-     *\u002F\r\n-\r\n-    Url.options = {\r\n-        url: '',\r\n-        root: null,\r\n-        params: {}\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Url transforms.\r\n-     *\u002F\r\n-\r\n-    Url.transform = {template: template, query: query, root: root};\r\n-    Url.transforms = ['template', 'query', 'root'];\r\n-\r\n-    \u002F**\r\n-     * Encodes a Url parameter string.\r\n-     *\r\n-     * @param {Object} obj\r\n-     *\u002F\r\n-\r\n-    Url.params = function (obj) {\r\n-\r\n-        var params = [], escape = encodeURIComponent;\r\n-\r\n-        params.add = function (key, value) {\r\n-\r\n-            if (isFunction(value)) {\r\n-                value = value();\r\n-            }\r\n-\r\n-            if (value === null) {\r\n-                value = '';\r\n-            }\r\n-\r\n-            this.push(escape(key) + '=' + escape(value));\r\n-        };\r\n-\r\n-        serialize(params, obj);\r\n-\r\n-        return params.join('&').replace(\u002F%20\u002Fg, '+');\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Parse a URL and return its components.\r\n-     *\r\n-     * @param {String} url\r\n-     *\u002F\r\n-\r\n-    Url.parse = function (url) {\r\n-\r\n-        var el = document.createElement('a');\r\n-\r\n-        if (document.documentMode) {\r\n-            el.href = url;\r\n-            url = el.href;\r\n-        }\r\n-\r\n-        el.href = url;\r\n-\r\n-        return {\r\n-            href: el.href,\r\n-            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\r\n-            port: el.port,\r\n-            host: el.host,\r\n-            hostname: el.hostname,\r\n-            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\r\n-            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\r\n-            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\r\n-        };\r\n-    };\r\n-\r\n-    function factory(handler, next, vm) {\r\n-        return function (options$$1) {\r\n-            return handler.call(vm, options$$1, next);\r\n-        };\r\n-    }\r\n-\r\n-    function serialize(params, obj, scope) {\r\n-\r\n-        var array = isArray(obj), plain = isPlainObject(obj), hash;\r\n-\r\n-        each(obj, function (value, key) {\r\n-\r\n-            hash = isObject(value) || isArray(value);\r\n-\r\n-            if (scope) {\r\n-                key = scope + '[' + (plain || hash ? key : '') + ']';\r\n-            }\r\n-\r\n-            if (!scope && array) {\r\n-                params.add(value.name, value.value);\r\n-            } else if (hash) {\r\n-                serialize(params, value, key);\r\n-            } else {\r\n-                params.add(key, value);\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * XDomain client (Internet Explorer).\r\n-     *\u002F\r\n-\r\n-    var xdrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xdr = new XDomainRequest(), handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load') {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                resolve(request.respondWith(xdr.responseText, {status: status}));\r\n-            };\r\n-\r\n-            request.abort = function () { return xdr.abort(); };\r\n-\r\n-            xdr.open(request.method, request.getUrl());\r\n-\r\n-            if (request.timeout) {\r\n-                xdr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            xdr.onload = handler;\r\n-            xdr.onabort = handler;\r\n-            xdr.onerror = handler;\r\n-            xdr.ontimeout = handler;\r\n-            xdr.onprogress = function () {};\r\n-            xdr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * CORS Interceptor.\r\n-     *\u002F\r\n-\r\n-    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\r\n-\r\n-    var cors = function (request, next) {\r\n-\r\n-        if (inBrowser) {\r\n-\r\n-            var orgUrl = Url.parse(location.href);\r\n-            var reqUrl = Url.parse(request.getUrl());\r\n-\r\n-            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\r\n-\r\n-                request.crossOrigin = true;\r\n-                request.emulateHTTP = false;\r\n-\r\n-                if (!SUPPORTS_CORS) {\r\n-                    request.client = xdrClient;\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Form data Interceptor.\r\n-     *\u002F\r\n-\r\n-    var form = function (request, next) {\r\n-\r\n-        if (isFormData(request.body)) {\r\n-\r\n-            request.headers.delete('Content-Type');\r\n-\r\n-        } else if (isObject(request.body) && request.emulateJSON) {\r\n-\r\n-            request.body = Url.params(request.body);\r\n-            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSON Interceptor.\r\n-     *\u002F\r\n-\r\n-    var json = function (request, next) {\r\n-\r\n-        var type = request.headers.get('Content-Type') || '';\r\n-\r\n-        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\r\n-            request.body = JSON.stringify(request.body);\r\n-        }\r\n-\r\n-        next(function (response) {\r\n-\r\n-            return response.bodyText ? when(response.text(), function (text) {\r\n-\r\n-                type = response.headers.get('Content-Type') || '';\r\n-\r\n-                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\r\n-\r\n-                    try {\r\n-                        response.body = JSON.parse(text);\r\n-                    } catch (e) {\r\n-                        response.body = null;\r\n-                    }\r\n-\r\n-                } else {\r\n-                    response.body = text;\r\n-                }\r\n-\r\n-                return response;\r\n-\r\n-            }) : response;\r\n-\r\n-        });\r\n-    };\r\n-\r\n-    function isJson(str) {\r\n-\r\n-        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\r\n-\r\n-        return start && end[start[0]].test(str);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * JSONP client (Browser).\r\n-     *\u002F\r\n-\r\n-    var jsonpClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\r\n-\r\n-            handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load' && body !== null) {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                if (status && window[callback]) {\r\n-                    delete window[callback];\r\n-                    document.body.removeChild(script);\r\n-                }\r\n-\r\n-                resolve(request.respondWith(body, {status: status}));\r\n-            };\r\n-\r\n-            window[callback] = function (result) {\r\n-                body = JSON.stringify(result);\r\n-            };\r\n-\r\n-            request.abort = function () {\r\n-                handler({type: 'abort'});\r\n-            };\r\n-\r\n-            request.params[name] = callback;\r\n-\r\n-            if (request.timeout) {\r\n-                setTimeout(request.abort, request.timeout);\r\n-            }\r\n-\r\n-            script = document.createElement('script');\r\n-            script.src = request.getUrl();\r\n-            script.type = 'text\u002Fjavascript';\r\n-            script.async = true;\r\n-            script.onload = handler;\r\n-            script.onerror = handler;\r\n-\r\n-            document.body.appendChild(script);\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSONP Interceptor.\r\n-     *\u002F\r\n-\r\n-    var jsonp = function (request, next) {\r\n-\r\n-        if (request.method == 'JSONP') {\r\n-            request.client = jsonpClient;\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Before Interceptor.\r\n-     *\u002F\r\n-\r\n-    var before = function (request, next) {\r\n-\r\n-        if (isFunction(request.before)) {\r\n-            request.before.call(this, request);\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * HTTP method override Interceptor.\r\n-     *\u002F\r\n-\r\n-    var method = function (request, next) {\r\n-\r\n-        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\r\n-            request.headers.set('X-HTTP-Method-Override', request.method);\r\n-            request.method = 'POST';\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Header Interceptor.\r\n-     *\u002F\r\n-\r\n-    var header = function (request, next) {\r\n-\r\n-        var headers = assign({}, Http.headers.common,\r\n-            !request.crossOrigin ? Http.headers.custom : {},\r\n-            Http.headers[toLower(request.method)]\r\n-        );\r\n-\r\n-        each(headers, function (value, name) {\r\n-            if (!request.headers.has(name)) {\r\n-                request.headers.set(name, value);\r\n-            }\r\n-        });\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * XMLHttp client (Browser).\r\n-     *\u002F\r\n-\r\n-    var xhrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xhr = new XMLHttpRequest(), handler = function (event) {\r\n-\r\n-                var response = request.respondWith(\r\n-                    'response' in xhr ? xhr.response : xhr.responseText, {\r\n-                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\r\n-                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\r\n-                    }\r\n-                );\r\n-\r\n-                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\r\n-                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\r\n-                });\r\n-\r\n-                resolve(response);\r\n-            };\r\n-\r\n-            request.abort = function () { return xhr.abort(); };\r\n-\r\n-            if (request.progress) {\r\n-                if (request.method === 'GET') {\r\n-                    xhr.addEventListener('progress', request.progress);\r\n-                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\r\n-                    xhr.upload.addEventListener('progress', request.progress);\r\n-                }\r\n-            }\r\n-\r\n-            xhr.open(request.method, request.getUrl(), true);\r\n-\r\n-            if (request.timeout) {\r\n-                xhr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            if (request.responseType && 'responseType' in xhr) {\r\n-                xhr.responseType = request.responseType;\r\n-            }\r\n-\r\n-            if (request.withCredentials || request.credentials) {\r\n-                xhr.withCredentials = true;\r\n-            }\r\n-\r\n-            if (!request.crossOrigin) {\r\n-                request.headers.set('X-Requested-With', 'XMLHttpRequest');\r\n-            }\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                xhr.setRequestHeader(name, value);\r\n-            });\r\n-\r\n-            xhr.onload = handler;\r\n-            xhr.onabort = handler;\r\n-            xhr.onerror = handler;\r\n-            xhr.ontimeout = handler;\r\n-            xhr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Http client (Node).\r\n-     *\u002F\r\n-\r\n-    var nodeClient = function (request) {\r\n-\r\n-        var client = require('got');\r\n-\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var url = request.getUrl();\r\n-            var body = request.getBody();\r\n-            var method = request.method;\r\n-            var headers = {}, handler;\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                headers[name] = value;\r\n-            });\r\n-\r\n-            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\r\n-\r\n-                var response = request.respondWith(resp.body, {\r\n-                        status: resp.statusCode,\r\n-                        statusText: trim(resp.statusMessage)\r\n-                    }\r\n-                );\r\n-\r\n-                each(resp.headers, function (value, name) {\r\n-                    response.headers.set(name, value);\r\n-                });\r\n-\r\n-                resolve(response);\r\n-\r\n-            }, function (error$$1) { return handler(error$$1.response); });\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Base client.\r\n-     *\u002F\r\n-\r\n-    var Client = function (context) {\r\n-\r\n-        var reqHandlers = [sendRequest], resHandlers = [], handler;\r\n-\r\n-        if (!isObject(context)) {\r\n-            context = null;\r\n-        }\r\n-\r\n-        function Client(request) {\r\n-            return new PromiseObj(function (resolve, reject) {\r\n-\r\n-                function exec() {\r\n-\r\n-                    handler = reqHandlers.pop();\r\n-\r\n-                    if (isFunction(handler)) {\r\n-                        handler.call(context, request, next);\r\n-                    } else {\r\n-                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\r\n-                        next();\r\n-                    }\r\n-                }\r\n-\r\n-                function next(response) {\r\n-\r\n-                    if (isFunction(response)) {\r\n-\r\n-                        resHandlers.unshift(response);\r\n-\r\n-                    } else if (isObject(response)) {\r\n-\r\n-                        resHandlers.forEach(function (handler) {\r\n-                            response = when(response, function (response) {\r\n-                                return handler.call(context, response) || response;\r\n-                            }, reject);\r\n-                        });\r\n-\r\n-                        when(response, resolve, reject);\r\n-\r\n-                        return;\r\n-                    }\r\n-\r\n-                    exec();\r\n-                }\r\n-\r\n-                exec();\r\n-\r\n-            }, context);\r\n-        }\r\n-\r\n-        Client.use = function (handler) {\r\n-            reqHandlers.push(handler);\r\n-        };\r\n-\r\n-        return Client;\r\n-    };\r\n-\r\n-    function sendRequest(request, resolve) {\r\n-\r\n-        var client = request.client || (inBrowser ? xhrClient : nodeClient);\r\n-\r\n-        resolve(client(request));\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Headers.\r\n-     *\u002F\r\n-\r\n-    var Headers = function Headers(headers) {\r\n-        var this$1 = this;\r\n-\r\n-\r\n-        this.map = {};\r\n-\r\n-        each(headers, function (value, name) { return this$1.append(name, value); });\r\n-    };\r\n-\r\n-    Headers.prototype.has = function has (name) {\r\n-        return getName(this.map, name) !== null;\r\n-    };\r\n-\r\n-    Headers.prototype.get = function get (name) {\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        return list ? list.join() : null;\r\n-    };\r\n-\r\n-    Headers.prototype.getAll = function getAll (name) {\r\n-        return this.map[getName(this.map, name)] || [];\r\n-    };\r\n-\r\n-    Headers.prototype.set = function set (name, value) {\r\n-        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\r\n-    };\r\n-\r\n-    Headers.prototype.append = function append (name, value){\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        if (list) {\r\n-            list.push(trim(value));\r\n-        } else {\r\n-            this.set(name, value);\r\n-        }\r\n-    };\r\n-\r\n-    Headers.prototype.delete = function delete$1 (name){\r\n-        delete this.map[getName(this.map, name)];\r\n-    };\r\n-\r\n-    Headers.prototype.deleteAll = function deleteAll (){\r\n-        this.map = {};\r\n-    };\r\n-\r\n-    Headers.prototype.forEach = function forEach (callback, thisArg) {\r\n-        var this$1 = this;\r\n-\r\n-        each(this.map, function (list, name) {\r\n-            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\r\n-        });\r\n-    };\r\n-\r\n-    function getName(map, name) {\r\n-        return Object.keys(map).reduce(function (prev, curr) {\r\n-            return toLower(name) === toLower(curr) ? curr : prev;\r\n-        }, null);\r\n-    }\r\n-\r\n-    function normalizeName(name) {\r\n-\r\n-        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\r\n-            throw new TypeError('Invalid character in header field name');\r\n-        }\r\n-\r\n-        return trim(name);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Response.\r\n-     *\u002F\r\n-\r\n-    var Response = function Response(body, ref) {\r\n-        var url = ref.url;\r\n-        var headers = ref.headers;\r\n-        var status = ref.status;\r\n-        var statusText = ref.statusText;\r\n-\r\n-\r\n-        this.url = url;\r\n-        this.ok = status >= 200 && status \u003C 300;\r\n-        this.status = status || 0;\r\n-        this.statusText = statusText || '';\r\n-        this.headers = new Headers(headers);\r\n-        this.body = body;\r\n-\r\n-        if (isString(body)) {\r\n-\r\n-            this.bodyText = body;\r\n-\r\n-        } else if (isBlob(body)) {\r\n-\r\n-            this.bodyBlob = body;\r\n-\r\n-            if (isBlobText(body)) {\r\n-                this.bodyText = blobText(body);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    Response.prototype.blob = function blob () {\r\n-        return when(this.bodyBlob);\r\n-    };\r\n-\r\n-    Response.prototype.text = function text () {\r\n-        return when(this.bodyText);\r\n-    };\r\n-\r\n-    Response.prototype.json = function json () {\r\n-        return when(this.text(), function (text) { return JSON.parse(text); });\r\n-    };\r\n-\r\n-    Object.defineProperty(Response.prototype, 'data', {\r\n-\r\n-        get: function get() {\r\n-            return this.body;\r\n-        },\r\n-\r\n-        set: function set(body) {\r\n-            this.body = body;\r\n-        }\r\n-\r\n-    });\r\n-\r\n-    function blobText(body) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var reader = new FileReader();\r\n-\r\n-            reader.readAsText(body);\r\n-            reader.onload = function () {\r\n-                resolve(reader.result);\r\n-            };\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    function isBlobText(body) {\r\n-        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Request.\r\n-     *\u002F\r\n-\r\n-    var Request = function Request(options$$1) {\r\n-\r\n-        this.body = null;\r\n-        this.params = {};\r\n-\r\n-        assign(this, options$$1, {\r\n-            method: toUpper(options$$1.method || 'GET')\r\n-        });\r\n-\r\n-        if (!(this.headers instanceof Headers)) {\r\n-            this.headers = new Headers(this.headers);\r\n-        }\r\n-    };\r\n-\r\n-    Request.prototype.getUrl = function getUrl (){\r\n-        return Url(this);\r\n-    };\r\n-\r\n-    Request.prototype.getBody = function getBody (){\r\n-        return this.body;\r\n-    };\r\n-\r\n-    Request.prototype.respondWith = function respondWith (body, options$$1) {\r\n-        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for sending network requests.\r\n-     *\u002F\r\n-\r\n-    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\r\n-    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\r\n-\r\n-    function Http(options$$1) {\r\n-\r\n-        var self = this || {}, client = Client(self.$vm);\r\n-\r\n-        defaults(options$$1 || {}, self.$options, Http.options);\r\n-\r\n-        Http.interceptors.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Http.interceptor[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                client.use(handler);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return client(new Request(options$$1)).then(function (response) {\r\n-\r\n-            return response.ok ? response : PromiseObj.reject(response);\r\n-\r\n-        }, function (response) {\r\n-\r\n-            if (response instanceof Error) {\r\n-                error(response);\r\n-            }\r\n-\r\n-            return PromiseObj.reject(response);\r\n-        });\r\n-    }\r\n-\r\n-    Http.options = {};\r\n-\r\n-    Http.headers = {\r\n-        put: JSON_CONTENT_TYPE,\r\n-        post: JSON_CONTENT_TYPE,\r\n-        patch: JSON_CONTENT_TYPE,\r\n-        delete: JSON_CONTENT_TYPE,\r\n-        common: COMMON_HEADERS,\r\n-        custom: {}\r\n-    };\r\n-\r\n-    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\r\n-    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\r\n-\r\n-    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    ['post', 'put', 'patch'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, body, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Service for interacting with RESTful services.\r\n-     *\u002F\r\n-\r\n-    function Resource(url, params, actions, options$$1) {\r\n-\r\n-        var self = this || {}, resource = {};\r\n-\r\n-        actions = assign({},\r\n-            Resource.actions,\r\n-            actions\r\n-        );\r\n-\r\n-        each(actions, function (action, name) {\r\n-\r\n-            action = merge({url: url, params: assign({}, params)}, options$$1, action);\r\n-\r\n-            resource[name] = function () {\r\n-                return (self.$http || Http)(opts(action, arguments));\r\n-            };\r\n-        });\r\n-\r\n-        return resource;\r\n-    }\r\n-\r\n-    function opts(action, args) {\r\n-\r\n-        var options$$1 = assign({}, action), params = {}, body;\r\n-\r\n-        switch (args.length) {\r\n-\r\n-            case 2:\r\n-\r\n-                params = args[0];\r\n-                body = args[1];\r\n-\r\n-                break;\r\n-\r\n-            case 1:\r\n-\r\n-                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\r\n-                    body = args[0];\r\n-                } else {\r\n-                    params = args[0];\r\n-                }\r\n-\r\n-                break;\r\n-\r\n-            case 0:\r\n-\r\n-                break;\r\n-\r\n-            default:\r\n-\r\n-                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\r\n-        }\r\n-\r\n-        options$$1.body = body;\r\n-        options$$1.params = assign({}, options$$1.params, params);\r\n-\r\n-        return options$$1;\r\n-    }\r\n-\r\n-    Resource.actions = {\r\n-\r\n-        get: {method: 'GET'},\r\n-        save: {method: 'POST'},\r\n-        query: {method: 'GET'},\r\n-        update: {method: 'PUT'},\r\n-        remove: {method: 'DELETE'},\r\n-        delete: {method: 'DELETE'}\r\n-\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Install plugin.\r\n-     *\u002F\r\n-\r\n-    function plugin(Vue) {\r\n-\r\n-        if (plugin.installed) {\r\n-            return;\r\n-        }\r\n-\r\n-        Util(Vue);\r\n-\r\n-        Vue.url = Url;\r\n-        Vue.http = Http;\r\n-        Vue.resource = Resource;\r\n-        Vue.Promise = PromiseObj;\r\n-\r\n-        Object.defineProperties(Vue.prototype, {\r\n-\r\n-            $url: {\r\n-                get: function get() {\r\n-                    return options(Vue.url, this, this.$options.url);\r\n-                }\r\n-            },\r\n-\r\n-            $http: {\r\n-                get: function get() {\r\n-                    return options(Vue.http, this, this.$options.http);\r\n-                }\r\n-            },\r\n-\r\n-            $resource: {\r\n-                get: function get() {\r\n-                    return Vue.resource.bind(this);\r\n-                }\r\n-            },\r\n-\r\n-            $promise: {\r\n-                get: function get() {\r\n-                    var this$1 = this;\r\n-\r\n-                    return function (executor) { return new Vue.Promise(executor, this$1); };\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    if (typeof window !== 'undefined' && window.Vue) {\r\n-        window.Vue.use(plugin);\r\n-    }\r\n-\r\n-    return plugin;\r\n-\r\n-})));\r\n+\u002F*!\n+ * Vue.js v2.6.10\n+ * (c) 2014-2019 Evan You\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vue = factory());\n+}(this, function () { 'use strict';\n+\n+  \u002F*  *\u002F\n+\n+    var emptyObject = Object.freeze({});\n+\n+    \u002F\u002F These helpers produce better VM code in JS engines due to their\n+    \u002F\u002F explicitness and function inlining.\n+    function isUndef (v) {\n+        return v === undefined || v === null\n+    }\n+\n+    function isDef (v) {\n+        return v !== undefined && v !== null\n+    }\n+\n+    function isTrue (v) {\n+        return v === true\n+    }\n+\n+    function isFalse (v) {\n+        return v === false\n+    }\n+\n+    \u002F**\n+     * Check if value is primitive.\n+     *\u002F\n+    function isPrimitive (value) {\n+        return (\n+            typeof value === 'string' ||\n+            typeof value === 'number' ||\n+            \u002F\u002F $flow-disable-line\n+            typeof value === 'symbol' ||\n+            typeof value === 'boolean'\n+        )\n+    }\n+\n+    \u002F**\n+     * Quick object check - this is primarily used to tell\n+     * Objects from primitive values when we know the value\n+     * is a JSON-compliant type.\n+     *\u002F\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    \u002F**\n+     * Get the raw type string of a value, e.g., [object Object].\n+     *\u002F\n+    var _toString = Object.prototype.toString;\n+\n+    function toRawType (value) {\n+        return _toString.call(value).slice(8, -1)\n+    }\n+\n+    \u002F**\n+     * Strict object type check. Only returns true\n+     * for plain JavaScript objects.\n+     *\u002F\n+    function isPlainObject (obj) {\n+        return _toString.call(obj) === '[object Object]'\n+    }\n+\n+    function isRegExp (v) {\n+        return _toString.call(v) === '[object RegExp]'\n+    }\n+\n+    \u002F**\n+     * Check if val is a valid array index.\n+     *\u002F\n+    function isValidArrayIndex (val) {\n+        var n = parseFloat(String(val));\n+        return n >= 0 && Math.floor(n) === n && isFinite(val)\n+    }\n+\n+    function isPromise (val) {\n+        return (\n+            isDef(val) &&\n+            typeof val.then === 'function' &&\n+            typeof val.catch === 'function'\n+        )\n+    }\n+\n+    \u002F**\n+     * Convert a value to a string that is actually rendered.\n+     *\u002F\n+    function toString (val) {\n+        return val == null\n+            ? ''\n+            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n+                ? JSON.stringify(val, null, 2)\n+                : String(val)\n+    }\n+\n+    \u002F**\n+     * Convert an input value to a number for persistence.\n+     * If the conversion fails, return original string.\n+     *\u002F\n+    function toNumber (val) {\n+        var n = parseFloat(val);\n+        return isNaN(n) ? val : n\n+    }\n+\n+    \u002F**\n+     * Make a map and return a function for checking if a key\n+     * is in that map.\n+     *\u002F\n+    function makeMap (\n+        str,\n+        expectsLowerCase\n+    ) {\n+        var map = Object.create(null);\n+        var list = str.split(',');\n+        for (var i = 0; i \u003C list.length; i++) {\n+            map[list[i]] = true;\n+        }\n+        return expectsLowerCase\n+            ? function (val) { return map[val.toLowerCase()]; }\n+            : function (val) { return map[val]; }\n+    }\n+\n+    \u002F**\n+     * Check if a tag is a built-in tag.\n+     *\u002F\n+    var isBuiltInTag = makeMap('slot,component', true);\n+\n+    \u002F**\n+     * Check if an attribute is a reserved attribute.\n+     *\u002F\n+    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n+\n+    \u002F**\n+     * Remove an item from an array.\n+     *\u002F\n+    function remove (arr, item) {\n+        if (arr.length) {\n+            var index = arr.indexOf(item);\n+            if (index > -1) {\n+                return arr.splice(index, 1)\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Check whether an object has the property.\n+     *\u002F\n+    var hasOwnProperty = Object.prototype.hasOwnProperty;\n+    function hasOwn (obj, key) {\n+        return hasOwnProperty.call(obj, key)\n+    }\n+\n+    \u002F**\n+     * Create a cached version of a pure function.\n+     *\u002F\n+    function cached (fn) {\n+        var cache = Object.create(null);\n+        return (function cachedFn (str) {\n+            var hit = cache[str];\n+            return hit || (cache[str] = fn(str))\n+        })\n+    }\n+\n+    \u002F**\n+     * Camelize a hyphen-delimited string.\n+     *\u002F\n+    var camelizeRE = \u002F-(\\w)\u002Fg;\n+    var camelize = cached(function (str) {\n+        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n+    });\n+\n+    \u002F**\n+     * Capitalize a string.\n+     *\u002F\n+    var capitalize = cached(function (str) {\n+        return str.charAt(0).toUpperCase() + str.slice(1)\n+    });\n+\n+    \u002F**\n+     * Hyphenate a camelCase string.\n+     *\u002F\n+    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\n+    var hyphenate = cached(function (str) {\n+        return str.replace(hyphenateRE, '-$1').toLowerCase()\n+    });\n+\n+    \u002F**\n+     * Simple bind polyfill for environments that do not support it,\n+     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n+     * since native bind is now performant enough in most browsers.\n+     * But removing it would mean breaking code that was able to run in\n+     * PhantomJS 1.x, so this must be kept for backward compatibility.\n+     *\u002F\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function polyfillBind (fn, ctx) {\n+        function boundFn (a) {\n+            var l = arguments.length;\n+            return l\n+                ? l > 1\n+                    ? fn.apply(ctx, arguments)\n+                    : fn.call(ctx, a)\n+                : fn.call(ctx)\n+        }\n+\n+        boundFn._length = fn.length;\n+        return boundFn\n+    }\n+\n+    function nativeBind (fn, ctx) {\n+        return fn.bind(ctx)\n+    }\n+\n+    var bind = Function.prototype.bind\n+        ? nativeBind\n+        : polyfillBind;\n+\n+    \u002F**\n+     * Convert an Array-like object to a real Array.\n+     *\u002F\n+    function toArray (list, start) {\n+        start = start || 0;\n+        var i = list.length - start;\n+        var ret = new Array(i);\n+        while (i--) {\n+            ret[i] = list[i + start];\n+        }\n+        return ret\n+    }\n+\n+    \u002F**\n+     * Mix properties into target object.\n+     *\u002F\n+    function extend (to, _from) {\n+        for (var key in _from) {\n+            to[key] = _from[key];\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Merge an Array of Objects into a single Object.\n+     *\u002F\n+    function toObject (arr) {\n+        var res = {};\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (arr[i]) {\n+                extend(res, arr[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Perform no operation.\n+     * Stubbing args to make Flow happy without leaving useless transpiled code\n+     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\n+     *\u002F\n+    function noop (a, b, c) {}\n+\n+    \u002F**\n+     * Always return false.\n+     *\u002F\n+    var no = function (a, b, c) { return false; };\n+\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Return the same value.\n+     *\u002F\n+    var identity = function (_) { return _; };\n+\n+    \u002F**\n+     * Generate a string containing static keys from compiler modules.\n+     *\u002F\n+    function genStaticKeys (modules) {\n+        return modules.reduce(function (keys, m) {\n+            return keys.concat(m.staticKeys || [])\n+        }, []).join(',')\n+    }\n+\n+    \u002F**\n+     * Check if two values are loosely equal - that is,\n+     * if they are plain objects, do they have the same shape?\n+     *\u002F\n+    function looseEqual (a, b) {\n+        if (a === b) { return true }\n+        var isObjectA = isObject(a);\n+        var isObjectB = isObject(b);\n+        if (isObjectA && isObjectB) {\n+            try {\n+                var isArrayA = Array.isArray(a);\n+                var isArrayB = Array.isArray(b);\n+                if (isArrayA && isArrayB) {\n+                    return a.length === b.length && a.every(function (e, i) {\n+                            return looseEqual(e, b[i])\n+                        })\n+                } else if (a instanceof Date && b instanceof Date) {\n+                    return a.getTime() === b.getTime()\n+                } else if (!isArrayA && !isArrayB) {\n+                    var keysA = Object.keys(a);\n+                    var keysB = Object.keys(b);\n+                    return keysA.length === keysB.length && keysA.every(function (key) {\n+                            return looseEqual(a[key], b[key])\n+                        })\n+                } else {\n+                  \u002F* istanbul ignore next *\u002F\n+                    return false\n+                }\n+            } catch (e) {\n+              \u002F* istanbul ignore next *\u002F\n+                return false\n+            }\n+        } else if (!isObjectA && !isObjectB) {\n+            return String(a) === String(b)\n+        } else {\n+            return false\n+        }\n+    }\n+\n+    \u002F**\n+     * Return the first index at which a loosely equal value can be\n+     * found in the array (if value is a plain object, the array must\n+     * contain an object of the same shape), or -1 if it is not present.\n+     *\u002F\n+    function looseIndexOf (arr, val) {\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (looseEqual(arr[i], val)) { return i }\n+        }\n+        return -1\n+    }\n+\n+    \u002F**\n+     * Ensure a function is called only once.\n+     *\u002F\n+    function once (fn) {\n+        var called = false;\n+        return function () {\n+            if (!called) {\n+                called = true;\n+                fn.apply(this, arguments);\n+            }\n+        }\n+    }\n+\n+    var SSR_ATTR = 'data-server-rendered';\n+\n+    var ASSET_TYPES = [\n+        'component',\n+        'directive',\n+        'filter'\n+    ];\n+\n+    var LIFECYCLE_HOOKS = [\n+        'beforeCreate',\n+        'created',\n+        'beforeMount',\n+        'mounted',\n+        'beforeUpdate',\n+        'updated',\n+        'beforeDestroy',\n+        'destroyed',\n+        'activated',\n+        'deactivated',\n+        'errorCaptured',\n+        'serverPrefetch'\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var config = ({\n+        \u002F**\n+         * Option merge strategies (used in core\u002Futil\u002Foptions)\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        optionMergeStrategies: Object.create(null),\n+\n+        \u002F**\n+         * Whether to suppress warnings.\n+         *\u002F\n+        silent: false,\n+\n+        \u002F**\n+         * Show production mode tip message on boot?\n+         *\u002F\n+        productionTip: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to enable devtools\n+         *\u002F\n+        devtools: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to record perf\n+         *\u002F\n+        performance: false,\n+\n+        \u002F**\n+         * Error handler for watcher errors\n+         *\u002F\n+        errorHandler: null,\n+\n+        \u002F**\n+         * Warn handler for watcher warns\n+         *\u002F\n+        warnHandler: null,\n+\n+        \u002F**\n+         * Ignore certain custom elements\n+         *\u002F\n+        ignoredElements: [],\n+\n+        \u002F**\n+         * Custom user key aliases for v-on\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        keyCodes: Object.create(null),\n+\n+        \u002F**\n+         * Check if a tag is reserved so that it cannot be registered as a\n+         * component. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedTag: no,\n+\n+        \u002F**\n+         * Check if an attribute is reserved so that it cannot be used as a component\n+         * prop. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedAttr: no,\n+\n+        \u002F**\n+         * Check if a tag is an unknown element.\n+         * Platform-dependent.\n+         *\u002F\n+        isUnknownElement: no,\n+\n+        \u002F**\n+         * Get the namespace of an element\n+         *\u002F\n+        getTagNamespace: noop,\n+\n+        \u002F**\n+         * Parse the real tag name for the specific platform.\n+         *\u002F\n+        parsePlatformTagName: identity,\n+\n+        \u002F**\n+         * Check if an attribute must be bound using property, e.g. value\n+         * Platform-dependent.\n+         *\u002F\n+        mustUseProp: no,\n+\n+        \u002F**\n+         * Perform updates asynchronously. Intended to be used by Vue Test Utils\n+         * This will significantly reduce performance if set to false.\n+         *\u002F\n+        async: true,\n+\n+        \u002F**\n+         * Exposed for legacy reasons\n+         *\u002F\n+        _lifecycleHooks: LIFECYCLE_HOOKS\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * unicode letters used for parsing html tags, component names and property paths.\n+     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\n+     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n+     *\u002F\n+    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\n+\n+    \u002F**\n+     * Check if a string starts with $ or _\n+     *\u002F\n+    function isReserved (str) {\n+        var c = (str + '').charCodeAt(0);\n+        return c === 0x24 || c === 0x5F\n+    }\n+\n+    \u002F**\n+     * Define a property.\n+     *\u002F\n+    function def (obj, key, val, enumerable) {\n+        Object.defineProperty(obj, key, {\n+            value: val,\n+            enumerable: !!enumerable,\n+            writable: true,\n+            configurable: true\n+        });\n+    }\n+\n+    \u002F**\n+     * Parse simple path.\n+     *\u002F\n+    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\n+    function parsePath (path) {\n+        if (bailRE.test(path)) {\n+            return\n+        }\n+        var segments = path.split('.');\n+        return function (obj) {\n+            for (var i = 0; i \u003C segments.length; i++) {\n+                if (!obj) { return }\n+                obj = obj[segments[i]];\n+            }\n+            return obj\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F can we use __proto__?\n+    var hasProto = '__proto__' in {};\n+\n+    \u002F\u002F Browser environment sniffing\n+    var inBrowser = typeof window !== 'undefined';\n+    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\n+    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\n+    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n+    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\n+    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n+    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\n+    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\n+    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\n+    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\n+    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\n+    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\n+\n+    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\n+    var nativeWatch = ({}).watch;\n+\n+    var supportsPassive = false;\n+    if (inBrowser) {\n+        try {\n+            var opts = {};\n+            Object.defineProperty(opts, 'passive', ({\n+                get: function get () {\n+                  \u002F* istanbul ignore next *\u002F\n+                    supportsPassive = true;\n+                }\n+            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\n+            window.addEventListener('test-passive', null, opts);\n+        } catch (e) {}\n+    }\n+\n+    \u002F\u002F this needs to be lazy-evaled because vue may be required before\n+    \u002F\u002F vue-server-renderer can set VUE_ENV\n+    var _isServer;\n+    var isServerRendering = function () {\n+        if (_isServer === undefined) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n+                \u002F\u002F detect presence of vue-server-renderer and avoid\n+                \u002F\u002F Webpack shimming the process\n+                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n+            } else {\n+                _isServer = false;\n+            }\n+        }\n+        return _isServer\n+    };\n+\n+    \u002F\u002F detect devtools\n+    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function isNative (Ctor) {\n+        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\n+    }\n+\n+    var hasSymbol =\n+        typeof Symbol !== 'undefined' && isNative(Symbol) &&\n+        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n+\n+    var _Set;\n+  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\n+    if (typeof Set !== 'undefined' && isNative(Set)) {\n+        \u002F\u002F use native Set when available.\n+        _Set = Set;\n+    } else {\n+        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\n+        _Set = \u002F*@__PURE__*\u002F(function () {\n+            function Set () {\n+                this.set = Object.create(null);\n+            }\n+            Set.prototype.has = function has (key) {\n+                return this.set[key] === true\n+            };\n+            Set.prototype.add = function add (key) {\n+                this.set[key] = true;\n+            };\n+            Set.prototype.clear = function clear () {\n+                this.set = Object.create(null);\n+            };\n+\n+            return Set;\n+        }());\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn = noop;\n+    var tip = noop;\n+    var generateComponentTrace = (noop); \u002F\u002F work around flow check\n+    var formatComponentName = (noop);\n+\n+    {\n+        var hasConsole = typeof console !== 'undefined';\n+        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\n+        var classify = function (str) { return str\n+            .replace(classifyRE, function (c) { return c.toUpperCase(); })\n+            .replace(\u002F[-_]\u002Fg, ''); };\n+\n+        warn = function (msg, vm) {\n+            var trace = vm ? generateComponentTrace(vm) : '';\n+\n+            if (config.warnHandler) {\n+                config.warnHandler.call(null, msg, vm, trace);\n+            } else if (hasConsole && (!config.silent)) {\n+                console.error((\"[Vue warn]: \" + msg + trace));\n+            }\n+        };\n+\n+        tip = function (msg, vm) {\n+            if (hasConsole && (!config.silent)) {\n+                console.warn(\"[Vue tip]: \" + msg + (\n+                        vm ? generateComponentTrace(vm) : ''\n+                    ));\n+            }\n+        };\n+\n+        formatComponentName = function (vm, includeFile) {\n+            if (vm.$root === vm) {\n+                return '\u003CRoot>'\n+            }\n+            var options = typeof vm === 'function' && vm.cid != null\n+                ? vm.options\n+                : vm._isVue\n+                    ? vm.$options || vm.constructor.options\n+                    : vm;\n+            var name = options.name || options._componentTag;\n+            var file = options.__file;\n+            if (!name && file) {\n+                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\n+                name = match && match[1];\n+            }\n+\n+            return (\n+                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\n+                (file && includeFile !== false ? (\" at \" + file) : '')\n+            )\n+        };\n+\n+        var repeat = function (str, n) {\n+            var res = '';\n+            while (n) {\n+                if (n % 2 === 1) { res += str; }\n+                if (n > 1) { str += str; }\n+                n >>= 1;\n+            }\n+            return res\n+        };\n+\n+        generateComponentTrace = function (vm) {\n+            if (vm._isVue && vm.$parent) {\n+                var tree = [];\n+                var currentRecursiveSequence = 0;\n+                while (vm) {\n+                    if (tree.length > 0) {\n+                        var last = tree[tree.length - 1];\n+                        if (last.constructor === vm.constructor) {\n+                            currentRecursiveSequence++;\n+                            vm = vm.$parent;\n+                            continue\n+                        } else if (currentRecursiveSequence > 0) {\n+                            tree[tree.length - 1] = [last, currentRecursiveSequence];\n+                            currentRecursiveSequence = 0;\n+                        }\n+                    }\n+                    tree.push(vm);\n+                    vm = vm.$parent;\n+                }\n+                return '\\n\\nfound in\\n\\n' + tree\n+                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n+                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n+                            : formatComponentName(vm))); })\n+                        .join('\\n')\n+            } else {\n+                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid = 0;\n+\n+    \u002F**\n+     * A dep is an observable that can have multiple\n+     * directives subscribing to it.\n+     *\u002F\n+    var Dep = function Dep () {\n+        this.id = uid++;\n+        this.subs = [];\n+    };\n+\n+    Dep.prototype.addSub = function addSub (sub) {\n+        this.subs.push(sub);\n+    };\n+\n+    Dep.prototype.removeSub = function removeSub (sub) {\n+        remove(this.subs, sub);\n+    };\n+\n+    Dep.prototype.depend = function depend () {\n+        if (Dep.target) {\n+            Dep.target.addDep(this);\n+        }\n+    };\n+\n+    Dep.prototype.notify = function notify () {\n+        \u002F\u002F stabilize the subscriber list first\n+        var subs = this.subs.slice();\n+        if (!config.async) {\n+            \u002F\u002F subs aren't sorted in scheduler if not running async\n+            \u002F\u002F we need to sort them now to make sure they fire in correct\n+            \u002F\u002F order\n+            subs.sort(function (a, b) { return a.id - b.id; });\n+        }\n+        for (var i = 0, l = subs.length; i \u003C l; i++) {\n+            subs[i].update();\n+        }\n+    };\n+\n+    \u002F\u002F The current target watcher being evaluated.\n+    \u002F\u002F This is globally unique because only one watcher\n+    \u002F\u002F can be evaluated at a time.\n+    Dep.target = null;\n+    var targetStack = [];\n+\n+    function pushTarget (target) {\n+        targetStack.push(target);\n+        Dep.target = target;\n+    }\n+\n+    function popTarget () {\n+        targetStack.pop();\n+        Dep.target = targetStack[targetStack.length - 1];\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var VNode = function VNode (\n+        tag,\n+        data,\n+        children,\n+        text,\n+        elm,\n+        context,\n+        componentOptions,\n+        asyncFactory\n+    ) {\n+        this.tag = tag;\n+        this.data = data;\n+        this.children = children;\n+        this.text = text;\n+        this.elm = elm;\n+        this.ns = undefined;\n+        this.context = context;\n+        this.fnContext = undefined;\n+        this.fnOptions = undefined;\n+        this.fnScopeId = undefined;\n+        this.key = data && data.key;\n+        this.componentOptions = componentOptions;\n+        this.componentInstance = undefined;\n+        this.parent = undefined;\n+        this.raw = false;\n+        this.isStatic = false;\n+        this.isRootInsert = true;\n+        this.isComment = false;\n+        this.isCloned = false;\n+        this.isOnce = false;\n+        this.asyncFactory = asyncFactory;\n+        this.asyncMeta = undefined;\n+        this.isAsyncPlaceholder = false;\n+    };\n+\n+    var prototypeAccessors = { child: { configurable: true } };\n+\n+    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\n+  \u002F* istanbul ignore next *\u002F\n+    prototypeAccessors.child.get = function () {\n+        return this.componentInstance\n+    };\n+\n+    Object.defineProperties( VNode.prototype, prototypeAccessors );\n+\n+    var createEmptyVNode = function (text) {\n+        if ( text === void 0 ) text = '';\n+\n+        var node = new VNode();\n+        node.text = text;\n+        node.isComment = true;\n+        return node\n+    };\n+\n+    function createTextVNode (val) {\n+        return new VNode(undefined, undefined, undefined, String(val))\n+    }\n+\n+    \u002F\u002F optimized shallow clone\n+    \u002F\u002F used for static nodes and slot nodes because they may be reused across\n+    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\n+    \u002F\u002F on their elm reference.\n+    function cloneVNode (vnode) {\n+        var cloned = new VNode(\n+            vnode.tag,\n+            vnode.data,\n+            \u002F\u002F #7975\n+            \u002F\u002F clone children array to avoid mutating original in case of cloning\n+            \u002F\u002F a child.\n+            vnode.children && vnode.children.slice(),\n+            vnode.text,\n+            vnode.elm,\n+            vnode.context,\n+            vnode.componentOptions,\n+            vnode.asyncFactory\n+        );\n+        cloned.ns = vnode.ns;\n+        cloned.isStatic = vnode.isStatic;\n+        cloned.key = vnode.key;\n+        cloned.isComment = vnode.isComment;\n+        cloned.fnContext = vnode.fnContext;\n+        cloned.fnOptions = vnode.fnOptions;\n+        cloned.fnScopeId = vnode.fnScopeId;\n+        cloned.asyncMeta = vnode.asyncMeta;\n+        cloned.isCloned = true;\n+        return cloned\n+    }\n+\n+  \u002F*\n+   * not type checking this file because flow doesn't play well with\n+   * dynamically accessing methods on Array prototype\n+   *\u002F\n+\n+    var arrayProto = Array.prototype;\n+    var arrayMethods = Object.create(arrayProto);\n+\n+    var methodsToPatch = [\n+        'push',\n+        'pop',\n+        'shift',\n+        'unshift',\n+        'splice',\n+        'sort',\n+        'reverse'\n+    ];\n+\n+    \u002F**\n+     * Intercept mutating methods and emit events\n+     *\u002F\n+    methodsToPatch.forEach(function (method) {\n+        \u002F\u002F cache original method\n+        var original = arrayProto[method];\n+        def(arrayMethods, method, function mutator () {\n+            var args = [], len = arguments.length;\n+            while ( len-- ) args[ len ] = arguments[ len ];\n+\n+            var result = original.apply(this, args);\n+            var ob = this.__ob__;\n+            var inserted;\n+            switch (method) {\n+                case 'push':\n+                case 'unshift':\n+                    inserted = args;\n+                    break\n+                case 'splice':\n+                    inserted = args.slice(2);\n+                    break\n+            }\n+            if (inserted) { ob.observeArray(inserted); }\n+            \u002F\u002F notify change\n+            ob.dep.notify();\n+            return result\n+        });\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n+\n+    \u002F**\n+     * In some cases we may want to disable observation inside a component's\n+     * update computation.\n+     *\u002F\n+    var shouldObserve = true;\n+\n+    function toggleObserving (value) {\n+        shouldObserve = value;\n+    }\n+\n+    \u002F**\n+     * Observer class that is attached to each observed\n+     * object. Once attached, the observer converts the target\n+     * object's property keys into getter\u002Fsetters that\n+     * collect dependencies and dispatch updates.\n+     *\u002F\n+    var Observer = function Observer (value) {\n+        this.value = value;\n+        this.dep = new Dep();\n+        this.vmCount = 0;\n+        def(value, '__ob__', this);\n+        if (Array.isArray(value)) {\n+            if (hasProto) {\n+                protoAugment(value, arrayMethods);\n+            } else {\n+                copyAugment(value, arrayMethods, arrayKeys);\n+            }\n+            this.observeArray(value);\n+        } else {\n+            this.walk(value);\n+        }\n+    };\n+\n+    \u002F**\n+     * Walk through all properties and convert them into\n+     * getter\u002Fsetters. This method should only be called when\n+     * value type is Object.\n+     *\u002F\n+    Observer.prototype.walk = function walk (obj) {\n+        var keys = Object.keys(obj);\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            defineReactive$$1(obj, keys[i]);\n+        }\n+    };\n+\n+    \u002F**\n+     * Observe a list of Array items.\n+     *\u002F\n+    Observer.prototype.observeArray = function observeArray (items) {\n+        for (var i = 0, l = items.length; i \u003C l; i++) {\n+            observe(items[i]);\n+        }\n+    };\n+\n+    \u002F\u002F helpers\n+\n+    \u002F**\n+     * Augment a target Object or Array by intercepting\n+     * the prototype chain using __proto__\n+     *\u002F\n+    function protoAugment (target, src) {\n+      \u002F* eslint-disable no-proto *\u002F\n+        target.__proto__ = src;\n+      \u002F* eslint-enable no-proto *\u002F\n+    }\n+\n+    \u002F**\n+     * Augment a target Object or Array by defining\n+     * hidden properties.\n+     *\u002F\n+  \u002F* istanbul ignore next *\u002F\n+    function copyAugment (target, src, keys) {\n+        for (var i = 0, l = keys.length; i \u003C l; i++) {\n+            var key = keys[i];\n+            def(target, key, src[key]);\n+        }\n+    }\n+\n+    \u002F**\n+     * Attempt to create an observer instance for a value,\n+     * returns the new observer if successfully observed,\n+     * or the existing observer if the value already has one.\n+     *\u002F\n+    function observe (value, asRootData) {\n+        if (!isObject(value) || value instanceof VNode) {\n+            return\n+        }\n+        var ob;\n+        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n+            ob = value.__ob__;\n+        } else if (\n+            shouldObserve &&\n+            !isServerRendering() &&\n+            (Array.isArray(value) || isPlainObject(value)) &&\n+            Object.isExtensible(value) &&\n+            !value._isVue\n+        ) {\n+            ob = new Observer(value);\n+        }\n+        if (asRootData && ob) {\n+            ob.vmCount++;\n+        }\n+        return ob\n+    }\n+\n+    \u002F**\n+     * Define a reactive property on an Object.\n+     *\u002F\n+    function defineReactive$$1 (\n+        obj,\n+        key,\n+        val,\n+        customSetter,\n+        shallow\n+    ) {\n+        var dep = new Dep();\n+\n+        var property = Object.getOwnPropertyDescriptor(obj, key);\n+        if (property && property.configurable === false) {\n+            return\n+        }\n+\n+        \u002F\u002F cater for pre-defined getter\u002Fsetters\n+        var getter = property && property.get;\n+        var setter = property && property.set;\n+        if ((!getter || setter) && arguments.length === 2) {\n+            val = obj[key];\n+        }\n+\n+        var childOb = !shallow && observe(val);\n+        Object.defineProperty(obj, key, {\n+            enumerable: true,\n+            configurable: true,\n+            get: function reactiveGetter () {\n+                var value = getter ? getter.call(obj) : val;\n+                if (Dep.target) {\n+                    dep.depend();\n+                    if (childOb) {\n+                        childOb.dep.depend();\n+                        if (Array.isArray(value)) {\n+                            dependArray(value);\n+                        }\n+                    }\n+                }\n+                return value\n+            },\n+            set: function reactiveSetter (newVal) {\n+                var value = getter ? getter.call(obj) : val;\n+              \u002F* eslint-disable no-self-compare *\u002F\n+                if (newVal === value || (newVal !== newVal && value !== value)) {\n+                    return\n+                }\n+              \u002F* eslint-enable no-self-compare *\u002F\n+                if (customSetter) {\n+                    customSetter();\n+                }\n+                \u002F\u002F #7981: for accessor properties without setter\n+                if (getter && !setter) { return }\n+                if (setter) {\n+                    setter.call(obj, newVal);\n+                } else {\n+                    val = newVal;\n+                }\n+                childOb = !shallow && observe(newVal);\n+                dep.notify();\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * Set a property on an object. Adds the new property and\n+     * triggers change notification if the property doesn't\n+     * already exist.\n+     *\u002F\n+    function set (target, key, val) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.length = Math.max(target.length, key);\n+            target.splice(key, 1, val);\n+            return val\n+        }\n+        if (key in target && !(key in Object.prototype)) {\n+            target[key] = val;\n+            return val\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid adding reactive properties to a Vue instance or its root $data ' +\n+                'at runtime - declare it upfront in the data option.'\n+            );\n+            return val\n+        }\n+        if (!ob) {\n+            target[key] = val;\n+            return val\n+        }\n+        defineReactive$$1(ob.value, key, val);\n+        ob.dep.notify();\n+        return val\n+    }\n+\n+    \u002F**\n+     * Delete a property and trigger change if necessary.\n+     *\u002F\n+    function del (target, key) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.splice(key, 1);\n+            return\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid deleting properties on a Vue instance or its root $data ' +\n+                '- just set it to null.'\n+            );\n+            return\n+        }\n+        if (!hasOwn(target, key)) {\n+            return\n+        }\n+        delete target[key];\n+        if (!ob) {\n+            return\n+        }\n+        ob.dep.notify();\n+    }\n+\n+    \u002F**\n+     * Collect dependencies on array elements when the array is touched, since\n+     * we cannot intercept array element access like property getters.\n+     *\u002F\n+    function dependArray (value) {\n+        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\n+            e = value[i];\n+            e && e.__ob__ && e.__ob__.dep.depend();\n+            if (Array.isArray(e)) {\n+                dependArray(e);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Option overwriting strategies are functions that handle\n+     * how to merge a parent option value and a child option\n+     * value into the final value.\n+     *\u002F\n+    var strats = config.optionMergeStrategies;\n+\n+    \u002F**\n+     * Options with restrictions\n+     *\u002F\n+    {\n+        strats.el = strats.propsData = function (parent, child, vm, key) {\n+            if (!vm) {\n+                warn(\n+                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n+                    'creation with the `new` keyword.'\n+                );\n+            }\n+            return defaultStrat(parent, child)\n+        };\n+    }\n+\n+    \u002F**\n+     * Helper that recursively merges two data objects together.\n+     *\u002F\n+    function mergeData (to, from) {\n+        if (!from) { return to }\n+        var key, toVal, fromVal;\n+\n+        var keys = hasSymbol\n+            ? Reflect.ownKeys(from)\n+            : Object.keys(from);\n+\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            key = keys[i];\n+            \u002F\u002F in case the object is already observed...\n+            if (key === '__ob__') { continue }\n+            toVal = to[key];\n+            fromVal = from[key];\n+            if (!hasOwn(to, key)) {\n+                set(to, key, fromVal);\n+            } else if (\n+                toVal !== fromVal &&\n+                isPlainObject(toVal) &&\n+                isPlainObject(fromVal)\n+            ) {\n+                mergeData(toVal, fromVal);\n+            }\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Data\n+     *\u002F\n+    function mergeDataOrFn (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            \u002F\u002F in a Vue.extend merge, both should be functions\n+            if (!childVal) {\n+                return parentVal\n+            }\n+            if (!parentVal) {\n+                return childVal\n+            }\n+            \u002F\u002F when parentVal & childVal are both present,\n+            \u002F\u002F we need to return a function that returns the\n+            \u002F\u002F merged result of both functions... no need to\n+            \u002F\u002F check if parentVal is a function here because\n+            \u002F\u002F it has to be a function to pass previous merges.\n+            return function mergedDataFn () {\n+                return mergeData(\n+                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n+                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n+                )\n+            }\n+        } else {\n+            return function mergedInstanceDataFn () {\n+                \u002F\u002F instance merge\n+                var instanceData = typeof childVal === 'function'\n+                    ? childVal.call(vm, vm)\n+                    : childVal;\n+                var defaultData = typeof parentVal === 'function'\n+                    ? parentVal.call(vm, vm)\n+                    : parentVal;\n+                if (instanceData) {\n+                    return mergeData(instanceData, defaultData)\n+                } else {\n+                    return defaultData\n+                }\n+            }\n+        }\n+    }\n+\n+    strats.data = function (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            if (childVal && typeof childVal !== 'function') {\n+                warn(\n+                    'The \"data\" option should be a function ' +\n+                    'that returns a per-instance value in component ' +\n+                    'definitions.',\n+                    vm\n+                );\n+\n+                return parentVal\n+            }\n+            return mergeDataOrFn(parentVal, childVal)\n+        }\n+\n+        return mergeDataOrFn(parentVal, childVal, vm)\n+    };\n+\n+    \u002F**\n+     * Hooks and props are merged as arrays.\n+     *\u002F\n+    function mergeHook (\n+        parentVal,\n+        childVal\n+    ) {\n+        var res = childVal\n+            ? parentVal\n+                ? parentVal.concat(childVal)\n+                : Array.isArray(childVal)\n+                    ? childVal\n+                    : [childVal]\n+            : parentVal;\n+        return res\n+            ? dedupeHooks(res)\n+            : res\n+    }\n+\n+    function dedupeHooks (hooks) {\n+        var res = [];\n+        for (var i = 0; i \u003C hooks.length; i++) {\n+            if (res.indexOf(hooks[i]) === -1) {\n+                res.push(hooks[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+    LIFECYCLE_HOOKS.forEach(function (hook) {\n+        strats[hook] = mergeHook;\n+    });\n+\n+    \u002F**\n+     * Assets\n+     *\n+     * When a vm is present (instance creation), we need to do\n+     * a three-way merge between constructor options, instance\n+     * options and parent options.\n+     *\u002F\n+    function mergeAssets (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        var res = Object.create(parentVal || null);\n+        if (childVal) {\n+            assertObjectType(key, childVal, vm);\n+            return extend(res, childVal)\n+        } else {\n+            return res\n+        }\n+    }\n+\n+    ASSET_TYPES.forEach(function (type) {\n+        strats[type + 's'] = mergeAssets;\n+    });\n+\n+    \u002F**\n+     * Watchers.\n+     *\n+     * Watchers hashes should not overwrite one\n+     * another, so we merge them as arrays.\n+     *\u002F\n+    strats.watch = function (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        \u002F\u002F work around Firefox's Object.prototype.watch...\n+        if (parentVal === nativeWatch) { parentVal = undefined; }\n+        if (childVal === nativeWatch) { childVal = undefined; }\n+      \u002F* istanbul ignore if *\u002F\n+        if (!childVal) { return Object.create(parentVal || null) }\n+        {\n+            assertObjectType(key, childVal, vm);\n+        }\n+        if (!parentVal) { return childVal }\n+        var ret = {};\n+        extend(ret, parentVal);\n+        for (var key$1 in childVal) {\n+            var parent = ret[key$1];\n+            var child = childVal[key$1];\n+            if (parent && !Array.isArray(parent)) {\n+                parent = [parent];\n+            }\n+            ret[key$1] = parent\n+                ? parent.concat(child)\n+                : Array.isArray(child) ? child : [child];\n+        }\n+        return ret\n+    };\n+\n+    \u002F**\n+     * Other object hashes.\n+     *\u002F\n+    strats.props =\n+        strats.methods =\n+            strats.inject =\n+                strats.computed = function (\n+                    parentVal,\n+                    childVal,\n+                    vm,\n+                    key\n+                ) {\n+                    if (childVal && \"development\" !== 'production') {\n+                        assertObjectType(key, childVal, vm);\n+                    }\n+                    if (!parentVal) { return childVal }\n+                    var ret = Object.create(null);\n+                    extend(ret, parentVal);\n+                    if (childVal) { extend(ret, childVal); }\n+                    return ret\n+                };\n+    strats.provide = mergeDataOrFn;\n+\n+    \u002F**\n+     * Default strategy.\n+     *\u002F\n+    var defaultStrat = function (parentVal, childVal) {\n+        return childVal === undefined\n+            ? parentVal\n+            : childVal\n+    };\n+\n+    \u002F**\n+     * Validate component names\n+     *\u002F\n+    function checkComponents (options) {\n+        for (var key in options.components) {\n+            validateComponentName(key);\n+        }\n+    }\n+\n+    function validateComponentName (name) {\n+        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n+            warn(\n+                'Invalid component name: \"' + name + '\". Component names ' +\n+                'should conform to valid custom element name in html5 specification.'\n+            );\n+        }\n+        if (isBuiltInTag(name) || config.isReservedTag(name)) {\n+            warn(\n+                'Do not use built-in or reserved HTML elements as component ' +\n+                'id: ' + name\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Ensure all props option syntax are normalized into the\n+     * Object-based format.\n+     *\u002F\n+    function normalizeProps (options, vm) {\n+        var props = options.props;\n+        if (!props) { return }\n+        var res = {};\n+        var i, val, name;\n+        if (Array.isArray(props)) {\n+            i = props.length;\n+            while (i--) {\n+                val = props[i];\n+                if (typeof val === 'string') {\n+                    name = camelize(val);\n+                    res[name] = { type: null };\n+                } else {\n+                    warn('props must be strings when using array syntax.');\n+                }\n+            }\n+        } else if (isPlainObject(props)) {\n+            for (var key in props) {\n+                val = props[key];\n+                name = camelize(key);\n+                res[name] = isPlainObject(val)\n+                    ? val\n+                    : { type: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(props)) + \".\",\n+                vm\n+            );\n+        }\n+        options.props = res;\n+    }\n+\n+    \u002F**\n+     * Normalize all injections into Object-based format\n+     *\u002F\n+    function normalizeInject (options, vm) {\n+        var inject = options.inject;\n+        if (!inject) { return }\n+        var normalized = options.inject = {};\n+        if (Array.isArray(inject)) {\n+            for (var i = 0; i \u003C inject.length; i++) {\n+                normalized[inject[i]] = { from: inject[i] };\n+            }\n+        } else if (isPlainObject(inject)) {\n+            for (var key in inject) {\n+                var val = inject[key];\n+                normalized[key] = isPlainObject(val)\n+                    ? extend({ from: key }, val)\n+                    : { from: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(inject)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Normalize raw function directives into object format.\n+     *\u002F\n+    function normalizeDirectives (options) {\n+        var dirs = options.directives;\n+        if (dirs) {\n+            for (var key in dirs) {\n+                var def$$1 = dirs[key];\n+                if (typeof def$$1 === 'function') {\n+                    dirs[key] = { bind: def$$1, update: def$$1 };\n+                }\n+            }\n+        }\n+    }\n+\n+    function assertObjectType (name, value, vm) {\n+        if (!isPlainObject(value)) {\n+            warn(\n+                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n+                \"but got \" + (toRawType(value)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Merge two option objects into a new one.\n+     * Core utility used in both instantiation and inheritance.\n+     *\u002F\n+    function mergeOptions (\n+        parent,\n+        child,\n+        vm\n+    ) {\n+        {\n+            checkComponents(child);\n+        }\n+\n+        if (typeof child === 'function') {\n+            child = child.options;\n+        }\n+\n+        normalizeProps(child, vm);\n+        normalizeInject(child, vm);\n+        normalizeDirectives(child);\n+\n+        \u002F\u002F Apply extends and mixins on the child options,\n+        \u002F\u002F but only if it is a raw options object that isn't\n+        \u002F\u002F the result of another mergeOptions call.\n+        \u002F\u002F Only merged options has the _base property.\n+        if (!child._base) {\n+            if (child.extends) {\n+                parent = mergeOptions(parent, child.extends, vm);\n+            }\n+            if (child.mixins) {\n+                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\n+                    parent = mergeOptions(parent, child.mixins[i], vm);\n+                }\n+            }\n+        }\n+\n+        var options = {};\n+        var key;\n+        for (key in parent) {\n+            mergeField(key);\n+        }\n+        for (key in child) {\n+            if (!hasOwn(parent, key)) {\n+                mergeField(key);\n+            }\n+        }\n+        function mergeField (key) {\n+            var strat = strats[key] || defaultStrat;\n+            options[key] = strat(parent[key], child[key], vm, key);\n+        }\n+        return options\n+    }\n+\n+    \u002F**\n+     * Resolve an asset.\n+     * This function is used because child instances need access\n+     * to assets defined in its ancestor chain.\n+     *\u002F\n+    function resolveAsset (\n+        options,\n+        type,\n+        id,\n+        warnMissing\n+    ) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (typeof id !== 'string') {\n+            return\n+        }\n+        var assets = options[type];\n+        \u002F\u002F check local registration variations first\n+        if (hasOwn(assets, id)) { return assets[id] }\n+        var camelizedId = camelize(id);\n+        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n+        var PascalCaseId = capitalize(camelizedId);\n+        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n+        \u002F\u002F fallback to prototype chain\n+        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n+        if (warnMissing && !res) {\n+            warn(\n+                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n+                options\n+            );\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function validateProp (\n+        key,\n+        propOptions,\n+        propsData,\n+        vm\n+    ) {\n+        var prop = propOptions[key];\n+        var absent = !hasOwn(propsData, key);\n+        var value = propsData[key];\n+        \u002F\u002F boolean casting\n+        var booleanIndex = getTypeIndex(Boolean, prop.type);\n+        if (booleanIndex > -1) {\n+            if (absent && !hasOwn(prop, 'default')) {\n+                value = false;\n+            } else if (value === '' || value === hyphenate(key)) {\n+                \u002F\u002F only cast empty string \u002F same name to boolean if\n+                \u002F\u002F boolean has higher priority\n+                var stringIndex = getTypeIndex(String, prop.type);\n+                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\n+                    value = true;\n+                }\n+            }\n+        }\n+        \u002F\u002F check default value\n+        if (value === undefined) {\n+            value = getPropDefaultValue(vm, prop, key);\n+            \u002F\u002F since the default value is a fresh copy,\n+            \u002F\u002F make sure to observe it.\n+            var prevShouldObserve = shouldObserve;\n+            toggleObserving(true);\n+            observe(value);\n+            toggleObserving(prevShouldObserve);\n+        }\n+        {\n+            assertProp(prop, key, value, vm, absent);\n+        }\n+        return value\n+    }\n+\n+    \u002F**\n+     * Get the default value of a prop.\n+     *\u002F\n+    function getPropDefaultValue (vm, prop, key) {\n+        \u002F\u002F no default, return undefined\n+        if (!hasOwn(prop, 'default')) {\n+            return undefined\n+        }\n+        var def = prop.default;\n+        \u002F\u002F warn against non-factory defaults for Object & Array\n+        if (isObject(def)) {\n+            warn(\n+                'Invalid default value for prop \"' + key + '\": ' +\n+                'Props with type Object\u002FArray must use a factory function ' +\n+                'to return the default value.',\n+                vm\n+            );\n+        }\n+        \u002F\u002F the raw prop value was also undefined from previous render,\n+        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\n+        if (vm && vm.$options.propsData &&\n+            vm.$options.propsData[key] === undefined &&\n+            vm._props[key] !== undefined\n+        ) {\n+            return vm._props[key]\n+        }\n+        \u002F\u002F call factory function for non-Function types\n+        \u002F\u002F a value is Function if its prototype is function even across different execution context\n+        return typeof def === 'function' && getType(prop.type) !== 'Function'\n+            ? def.call(vm)\n+            : def\n+    }\n+\n+    \u002F**\n+     * Assert whether a prop is valid.\n+     *\u002F\n+    function assertProp (\n+        prop,\n+        name,\n+        value,\n+        vm,\n+        absent\n+    ) {\n+        if (prop.required && absent) {\n+            warn(\n+                'Missing required prop: \"' + name + '\"',\n+                vm\n+            );\n+            return\n+        }\n+        if (value == null && !prop.required) {\n+            return\n+        }\n+        var type = prop.type;\n+        var valid = !type || type === true;\n+        var expectedTypes = [];\n+        if (type) {\n+            if (!Array.isArray(type)) {\n+                type = [type];\n+            }\n+            for (var i = 0; i \u003C type.length && !valid; i++) {\n+                var assertedType = assertType(value, type[i]);\n+                expectedTypes.push(assertedType.expectedType || '');\n+                valid = assertedType.valid;\n+            }\n+        }\n+\n+        if (!valid) {\n+            warn(\n+                getInvalidTypeMessage(name, value, expectedTypes),\n+                vm\n+            );\n+            return\n+        }\n+        var validator = prop.validator;\n+        if (validator) {\n+            if (!validator(value)) {\n+                warn(\n+                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n+                    vm\n+                );\n+            }\n+        }\n+    }\n+\n+    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\n+\n+    function assertType (value, type) {\n+        var valid;\n+        var expectedType = getType(type);\n+        if (simpleCheckRE.test(expectedType)) {\n+            var t = typeof value;\n+            valid = t === expectedType.toLowerCase();\n+            \u002F\u002F for primitive wrapper objects\n+            if (!valid && t === 'object') {\n+                valid = value instanceof type;\n+            }\n+        } else if (expectedType === 'Object') {\n+            valid = isPlainObject(value);\n+        } else if (expectedType === 'Array') {\n+            valid = Array.isArray(value);\n+        } else {\n+            valid = value instanceof type;\n+        }\n+        return {\n+            valid: valid,\n+            expectedType: expectedType\n+        }\n+    }\n+\n+    \u002F**\n+     * Use function string name to check built-in types,\n+     * because a simple equality check will fail when running\n+     * across different vms \u002F iframes.\n+     *\u002F\n+    function getType (fn) {\n+        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\n+        return match ? match[1] : ''\n+    }\n+\n+    function isSameType (a, b) {\n+        return getType(a) === getType(b)\n+    }\n+\n+    function getTypeIndex (type, expectedTypes) {\n+        if (!Array.isArray(expectedTypes)) {\n+            return isSameType(expectedTypes, type) ? 0 : -1\n+        }\n+        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\n+            if (isSameType(expectedTypes[i], type)) {\n+                return i\n+            }\n+        }\n+        return -1\n+    }\n+\n+    function getInvalidTypeMessage (name, value, expectedTypes) {\n+        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n+            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n+        var expectedType = expectedTypes[0];\n+        var receivedType = toRawType(value);\n+        var expectedValue = styleValue(value, expectedType);\n+        var receivedValue = styleValue(value, receivedType);\n+        \u002F\u002F check if we need to specify expected value\n+        if (expectedTypes.length === 1 &&\n+            isExplicable(expectedType) &&\n+            !isBoolean(expectedType, receivedType)) {\n+            message += \" with value \" + expectedValue;\n+        }\n+        message += \", got \" + receivedType + \" \";\n+        \u002F\u002F check if we need to specify received value\n+        if (isExplicable(receivedType)) {\n+            message += \"with value \" + receivedValue + \".\";\n+        }\n+        return message\n+    }\n+\n+    function styleValue (value, type) {\n+        if (type === 'String') {\n+            return (\"\\\"\" + value + \"\\\"\")\n+        } else if (type === 'Number') {\n+            return (\"\" + (Number(value)))\n+        } else {\n+            return (\"\" + value)\n+        }\n+    }\n+\n+    function isExplicable (value) {\n+        var explicitTypes = ['string', 'number', 'boolean'];\n+        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n+    }\n+\n+    function isBoolean () {\n+        var args = [], len = arguments.length;\n+        while ( len-- ) args[ len ] = arguments[ len ];\n+\n+        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function handleError (err, vm, info) {\n+        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n+        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\n+        pushTarget();\n+        try {\n+            if (vm) {\n+                var cur = vm;\n+                while ((cur = cur.$parent)) {\n+                    var hooks = cur.$options.errorCaptured;\n+                    if (hooks) {\n+                        for (var i = 0; i \u003C hooks.length; i++) {\n+                            try {\n+                                var capture = hooks[i].call(cur, err, vm, info) === false;\n+                                if (capture) { return }\n+                            } catch (e) {\n+                                globalHandleError(e, cur, 'errorCaptured hook');\n+                            }\n+                        }\n+                    }\n+                }\n+            }\n+            globalHandleError(err, vm, info);\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    function invokeWithErrorHandling (\n+        handler,\n+        context,\n+        args,\n+        vm,\n+        info\n+    ) {\n+        var res;\n+        try {\n+            res = args ? handler.apply(context, args) : handler.call(context);\n+            if (res && !res._isVue && isPromise(res) && !res._handled) {\n+                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\n+                \u002F\u002F issue #9511\n+                \u002F\u002F avoid catch triggering multiple times when nested calls\n+                res._handled = true;\n+            }\n+        } catch (e) {\n+            handleError(e, vm, info);\n+        }\n+        return res\n+    }\n+\n+    function globalHandleError (err, vm, info) {\n+        if (config.errorHandler) {\n+            try {\n+                return config.errorHandler.call(null, err, vm, info)\n+            } catch (e) {\n+                \u002F\u002F if the user intentionally throws the original error in the handler,\n+                \u002F\u002F do not log it twice\n+                if (e !== err) {\n+                    logError(e, null, 'config.errorHandler');\n+                }\n+            }\n+        }\n+        logError(err, vm, info);\n+    }\n+\n+    function logError (err, vm, info) {\n+        {\n+            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n+            console.error(err);\n+        } else {\n+            throw err\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var isUsingMicroTask = false;\n+\n+    var callbacks = [];\n+    var pending = false;\n+\n+    function flushCallbacks () {\n+        pending = false;\n+        var copies = callbacks.slice(0);\n+        callbacks.length = 0;\n+        for (var i = 0; i \u003C copies.length; i++) {\n+            copies[i]();\n+        }\n+    }\n+\n+    \u002F\u002F Here we have async deferring wrappers using microtasks.\n+    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\n+    \u002F\u002F However, it has subtle problems when state is changed right before repaint\n+    \u002F\u002F (e.g. #6813, out-in transitions).\n+    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\n+    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n+    \u002F\u002F So we now use microtasks everywhere, again.\n+    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\n+    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\n+    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\n+    \u002F\u002F or even between bubbling of the same event (#6566).\n+    var timerFunc;\n+\n+    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\n+    \u002F\u002F via either native Promise.then or MutationObserver.\n+    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\n+    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n+    \u002F\u002F completely stops working after triggering a few times... so, if native\n+    \u002F\u002F Promise is available, we will use it:\n+  \u002F* istanbul ignore next, $flow-disable-line *\u002F\n+    if (typeof Promise !== 'undefined' && isNative(Promise)) {\n+        var p = Promise.resolve();\n+        timerFunc = function () {\n+            p.then(flushCallbacks);\n+            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\n+            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\n+            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\n+            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\n+            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\n+            if (isIOS) { setTimeout(noop); }\n+        };\n+        isUsingMicroTask = true;\n+    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\n+            isNative(MutationObserver) ||\n+            \u002F\u002F PhantomJS and iOS 7.x\n+            MutationObserver.toString() === '[object MutationObserverConstructor]'\n+        )) {\n+        \u002F\u002F Use MutationObserver where native Promise is not available,\n+        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\n+        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\n+        var counter = 1;\n+        var observer = new MutationObserver(flushCallbacks);\n+        var textNode = document.createTextNode(String(counter));\n+        observer.observe(textNode, {\n+            characterData: true\n+        });\n+        timerFunc = function () {\n+            counter = (counter + 1) % 2;\n+            textNode.data = String(counter);\n+        };\n+        isUsingMicroTask = true;\n+    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n+        \u002F\u002F Fallback to setImmediate.\n+        \u002F\u002F Techinically it leverages the (macro) task queue,\n+        \u002F\u002F but it is still a better choice than setTimeout.\n+        timerFunc = function () {\n+            setImmediate(flushCallbacks);\n+        };\n+    } else {\n+        \u002F\u002F Fallback to setTimeout.\n+        timerFunc = function () {\n+            setTimeout(flushCallbacks, 0);\n+        };\n+    }\n+\n+    function nextTick (cb, ctx) {\n+        var _resolve;\n+        callbacks.push(function () {\n+            if (cb) {\n+                try {\n+                    cb.call(ctx);\n+                } catch (e) {\n+                    handleError(e, ctx, 'nextTick');\n+                }\n+            } else if (_resolve) {\n+                _resolve(ctx);\n+            }\n+        });\n+        if (!pending) {\n+            pending = true;\n+            timerFunc();\n+        }\n+        \u002F\u002F $flow-disable-line\n+        if (!cb && typeof Promise !== 'undefined') {\n+            return new Promise(function (resolve) {\n+                _resolve = resolve;\n+            })\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var mark;\n+    var measure;\n+\n+    {\n+        var perf = inBrowser && window.performance;\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            perf &&\n+            perf.mark &&\n+            perf.measure &&\n+            perf.clearMarks &&\n+            perf.clearMeasures\n+        ) {\n+            mark = function (tag) { return perf.mark(tag); };\n+            measure = function (name, startTag, endTag) {\n+                perf.measure(name, startTag, endTag);\n+                perf.clearMarks(startTag);\n+                perf.clearMarks(endTag);\n+                \u002F\u002F perf.clearMeasures(name)\n+            };\n+        }\n+    }\n+\n+  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\n+\n+    var initProxy;\n+\n+    {\n+        var allowedGlobals = makeMap(\n+            'Infinity,undefined,NaN,isFinite,isNaN,' +\n+            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n+            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n+            'require' \u002F\u002F for Webpack\u002FBrowserify\n+        );\n+\n+        var warnNonPresent = function (target, key) {\n+            warn(\n+                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n+                'referenced during render. Make sure that this property is reactive, ' +\n+                'either in the data option, or for class-based components, by ' +\n+                'initializing the property. ' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\n+                target\n+            );\n+        };\n+\n+        var warnReservedPrefix = function (target, key) {\n+            warn(\n+                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n+                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n+                'prevent conflicts with Vue internals' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\n+                target\n+            );\n+        };\n+\n+        var hasProxy =\n+            typeof Proxy !== 'undefined' && isNative(Proxy);\n+\n+        if (hasProxy) {\n+            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n+            config.keyCodes = new Proxy(config.keyCodes, {\n+                set: function set (target, key, value) {\n+                    if (isBuiltInModifier(key)) {\n+                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n+                        return false\n+                    } else {\n+                        target[key] = value;\n+                        return true\n+                    }\n+                }\n+            });\n+        }\n+\n+        var hasHandler = {\n+            has: function has (target, key) {\n+                var has = key in target;\n+                var isAllowed = allowedGlobals(key) ||\n+                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n+                if (!has && !isAllowed) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return has || !isAllowed\n+            }\n+        };\n+\n+        var getHandler = {\n+            get: function get (target, key) {\n+                if (typeof key === 'string' && !(key in target)) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return target[key]\n+            }\n+        };\n+\n+        initProxy = function initProxy (vm) {\n+            if (hasProxy) {\n+                \u002F\u002F determine which proxy handler to use\n+                var options = vm.$options;\n+                var handlers = options.render && options.render._withStripped\n+                    ? getHandler\n+                    : hasHandler;\n+                vm._renderProxy = new Proxy(vm, handlers);\n+            } else {\n+                vm._renderProxy = vm;\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var seenObjects = new _Set();\n+\n+    \u002F**\n+     * Recursively traverse an object to evoke all converted\n+     * getters, so that every nested property inside the object\n+     * is collected as a \"deep\" dependency.\n+     *\u002F\n+    function traverse (val) {\n+        _traverse(val, seenObjects);\n+        seenObjects.clear();\n+    }\n+\n+    function _traverse (val, seen) {\n+        var i, keys;\n+        var isA = Array.isArray(val);\n+        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n+            return\n+        }\n+        if (val.__ob__) {\n+            var depId = val.__ob__.dep.id;\n+            if (seen.has(depId)) {\n+                return\n+            }\n+            seen.add(depId);\n+        }\n+        if (isA) {\n+            i = val.length;\n+            while (i--) { _traverse(val[i], seen); }\n+        } else {\n+            keys = Object.keys(val);\n+            i = keys.length;\n+            while (i--) { _traverse(val[keys[i]], seen); }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var normalizeEvent = cached(function (name) {\n+        var passive = name.charAt(0) === '&';\n+        name = passive ? name.slice(1) : name;\n+        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\n+        name = once$$1 ? name.slice(1) : name;\n+        var capture = name.charAt(0) === '!';\n+        name = capture ? name.slice(1) : name;\n+        return {\n+            name: name,\n+            once: once$$1,\n+            capture: capture,\n+            passive: passive\n+        }\n+    });\n+\n+    function createFnInvoker (fns, vm) {\n+        function invoker () {\n+            var arguments$1 = arguments;\n+\n+            var fns = invoker.fns;\n+            if (Array.isArray(fns)) {\n+                var cloned = fns.slice();\n+                for (var i = 0; i \u003C cloned.length; i++) {\n+                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n+                }\n+            } else {\n+                \u002F\u002F return handler return value for single handlers\n+                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n+            }\n+        }\n+        invoker.fns = fns;\n+        return invoker\n+    }\n+\n+    function updateListeners (\n+        on,\n+        oldOn,\n+        add,\n+        remove$$1,\n+        createOnceHandler,\n+        vm\n+    ) {\n+        var name, def$$1, cur, old, event;\n+        for (name in on) {\n+            def$$1 = cur = on[name];\n+            old = oldOn[name];\n+            event = normalizeEvent(name);\n+            if (isUndef(cur)) {\n+                warn(\n+                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n+                    vm\n+                );\n+            } else if (isUndef(old)) {\n+                if (isUndef(cur.fns)) {\n+                    cur = on[name] = createFnInvoker(cur, vm);\n+                }\n+                if (isTrue(event.once)) {\n+                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n+                }\n+                add(event.name, cur, event.capture, event.passive, event.params);\n+            } else if (cur !== old) {\n+                old.fns = cur;\n+                on[name] = old;\n+            }\n+        }\n+        for (name in oldOn) {\n+            if (isUndef(on[name])) {\n+                event = normalizeEvent(name);\n+                remove$$1(event.name, oldOn[name], event.capture);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function mergeVNodeHook (def, hookKey, hook) {\n+        if (def instanceof VNode) {\n+            def = def.data.hook || (def.data.hook = {});\n+        }\n+        var invoker;\n+        var oldHook = def[hookKey];\n+\n+        function wrappedHook () {\n+            hook.apply(this, arguments);\n+            \u002F\u002F important: remove merged hook to ensure it's called only once\n+            \u002F\u002F and prevent memory leak\n+            remove(invoker.fns, wrappedHook);\n+        }\n+\n+        if (isUndef(oldHook)) {\n+            \u002F\u002F no existing hook\n+            invoker = createFnInvoker([wrappedHook]);\n+        } else {\n+          \u002F* istanbul ignore if *\u002F\n+            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n+                \u002F\u002F already a merged invoker\n+                invoker = oldHook;\n+                invoker.fns.push(wrappedHook);\n+            } else {\n+                \u002F\u002F existing plain hook\n+                invoker = createFnInvoker([oldHook, wrappedHook]);\n+            }\n+        }\n+\n+        invoker.merged = true;\n+        def[hookKey] = invoker;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function extractPropsFromVNodeData (\n+        data,\n+        Ctor,\n+        tag\n+    ) {\n+        \u002F\u002F we are only extracting raw values here.\n+        \u002F\u002F validation and default values are handled in the child\n+        \u002F\u002F component itself.\n+        var propOptions = Ctor.options.props;\n+        if (isUndef(propOptions)) {\n+            return\n+        }\n+        var res = {};\n+        var attrs = data.attrs;\n+        var props = data.props;\n+        if (isDef(attrs) || isDef(props)) {\n+            for (var key in propOptions) {\n+                var altKey = hyphenate(key);\n+                {\n+                    var keyInLowerCase = key.toLowerCase();\n+                    if (\n+                        key !== keyInLowerCase &&\n+                        attrs && hasOwn(attrs, keyInLowerCase)\n+                    ) {\n+                        tip(\n+                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n+                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n+                            \" \\\"\" + key + \"\\\". \" +\n+                            \"Note that HTML attributes are case-insensitive and camelCased \" +\n+                            \"props need to use their kebab-case equivalents when using in-DOM \" +\n+                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n+                        );\n+                    }\n+                }\n+                checkProp(res, props, key, altKey, true) ||\n+                checkProp(res, attrs, key, altKey, false);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkProp (\n+        res,\n+        hash,\n+        key,\n+        altKey,\n+        preserve\n+    ) {\n+        if (isDef(hash)) {\n+            if (hasOwn(hash, key)) {\n+                res[key] = hash[key];\n+                if (!preserve) {\n+                    delete hash[key];\n+                }\n+                return true\n+            } else if (hasOwn(hash, altKey)) {\n+                res[key] = hash[altKey];\n+                if (!preserve) {\n+                    delete hash[altKey];\n+                }\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F The template compiler attempts to minimize the need for normalization by\n+    \u002F\u002F statically analyzing the template at compile time.\n+    \u002F\u002F\n+    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\n+    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\n+    \u002F\u002F two cases where extra normalization is needed:\n+\n+    \u002F\u002F 1. When the children contains components - because a functional component\n+    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\n+    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\n+    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n+    \u002F\u002F because functional components already normalize their own children.\n+    function simpleNormalizeChildren (children) {\n+        for (var i = 0; i \u003C children.length; i++) {\n+            if (Array.isArray(children[i])) {\n+                return Array.prototype.concat.apply([], children)\n+            }\n+        }\n+        return children\n+    }\n+\n+    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\n+    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\n+    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\n+    \u002F\u002F is needed to cater to all possible types of children values.\n+    function normalizeChildren (children) {\n+        return isPrimitive(children)\n+            ? [createTextVNode(children)]\n+            : Array.isArray(children)\n+                ? normalizeArrayChildren(children)\n+                : undefined\n+    }\n+\n+    function isTextNode (node) {\n+        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n+    }\n+\n+    function normalizeArrayChildren (children, nestedIndex) {\n+        var res = [];\n+        var i, c, lastIndex, last;\n+        for (i = 0; i \u003C children.length; i++) {\n+            c = children[i];\n+            if (isUndef(c) || typeof c === 'boolean') { continue }\n+            lastIndex = res.length - 1;\n+            last = res[lastIndex];\n+            \u002F\u002F  nested\n+            if (Array.isArray(c)) {\n+                if (c.length > 0) {\n+                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n+                    \u002F\u002F merge adjacent text nodes\n+                    if (isTextNode(c[0]) && isTextNode(last)) {\n+                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n+                        c.shift();\n+                    }\n+                    res.push.apply(res, c);\n+                }\n+            } else if (isPrimitive(c)) {\n+                if (isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    \u002F\u002F this is necessary for SSR hydration because text nodes are\n+                    \u002F\u002F essentially merged when rendered to HTML strings\n+                    res[lastIndex] = createTextVNode(last.text + c);\n+                } else if (c !== '') {\n+                    \u002F\u002F convert primitive to vnode\n+                    res.push(createTextVNode(c));\n+                }\n+            } else {\n+                if (isTextNode(c) && isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    res[lastIndex] = createTextVNode(last.text + c.text);\n+                } else {\n+                    \u002F\u002F default key for nested array children (likely generated by v-for)\n+                    if (isTrue(children._isVList) &&\n+                        isDef(c.tag) &&\n+                        isUndef(c.key) &&\n+                        isDef(nestedIndex)) {\n+                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n+                    }\n+                    res.push(c);\n+                }\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initProvide (vm) {\n+        var provide = vm.$options.provide;\n+        if (provide) {\n+            vm._provided = typeof provide === 'function'\n+                ? provide.call(vm)\n+                : provide;\n+        }\n+    }\n+\n+    function initInjections (vm) {\n+        var result = resolveInject(vm.$options.inject, vm);\n+        if (result) {\n+            toggleObserving(false);\n+            Object.keys(result).forEach(function (key) {\n+              \u002F* istanbul ignore else *\u002F\n+                {\n+                    defineReactive$$1(vm, key, result[key], function () {\n+                        warn(\n+                            \"Avoid mutating an injected value directly since the changes will be \" +\n+                            \"overwritten whenever the provided component re-renders. \" +\n+                            \"injection being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    });\n+                }\n+            });\n+            toggleObserving(true);\n+        }\n+    }\n+\n+    function resolveInject (inject, vm) {\n+        if (inject) {\n+            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\n+            var result = Object.create(null);\n+            var keys = hasSymbol\n+                ? Reflect.ownKeys(inject)\n+                : Object.keys(inject);\n+\n+            for (var i = 0; i \u003C keys.length; i++) {\n+                var key = keys[i];\n+                \u002F\u002F #6574 in case the inject object is observed...\n+                if (key === '__ob__') { continue }\n+                var provideKey = inject[key].from;\n+                var source = vm;\n+                while (source) {\n+                    if (source._provided && hasOwn(source._provided, provideKey)) {\n+                        result[key] = source._provided[provideKey];\n+                        break\n+                    }\n+                    source = source.$parent;\n+                }\n+                if (!source) {\n+                    if ('default' in inject[key]) {\n+                        var provideDefault = inject[key].default;\n+                        result[key] = typeof provideDefault === 'function'\n+                            ? provideDefault.call(vm)\n+                            : provideDefault;\n+                    } else {\n+                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n+                    }\n+                }\n+            }\n+            return result\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F**\n+     * Runtime helper for resolving raw children VNodes into a slot object.\n+     *\u002F\n+    function resolveSlots (\n+        children,\n+        context\n+    ) {\n+        if (!children || !children.length) {\n+            return {}\n+        }\n+        var slots = {};\n+        for (var i = 0, l = children.length; i \u003C l; i++) {\n+            var child = children[i];\n+            var data = child.data;\n+            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\n+            if (data && data.attrs && data.attrs.slot) {\n+                delete data.attrs.slot;\n+            }\n+            \u002F\u002F named slots should only be respected if the vnode was rendered in the\n+            \u002F\u002F same context.\n+            if ((child.context === context || child.fnContext === context) &&\n+                data && data.slot != null\n+            ) {\n+                var name = data.slot;\n+                var slot = (slots[name] || (slots[name] = []));\n+                if (child.tag === 'template') {\n+                    slot.push.apply(slot, child.children || []);\n+                } else {\n+                    slot.push(child);\n+                }\n+            } else {\n+                (slots.default || (slots.default = [])).push(child);\n+            }\n+        }\n+        \u002F\u002F ignore slots that contains only whitespace\n+        for (var name$1 in slots) {\n+            if (slots[name$1].every(isWhitespace)) {\n+                delete slots[name$1];\n+            }\n+        }\n+        return slots\n+    }\n+\n+    function isWhitespace (node) {\n+        return (node.isComment && !node.asyncFactory) || node.text === ' '\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function normalizeScopedSlots (\n+        slots,\n+        normalSlots,\n+        prevSlots\n+    ) {\n+        var res;\n+        var hasNormalSlots = Object.keys(normalSlots).length > 0;\n+        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n+        var key = slots && slots.$key;\n+        if (!slots) {\n+            res = {};\n+        } else if (slots._normalized) {\n+            \u002F\u002F fast path 1: child component re-render only, parent did not change\n+            return slots._normalized\n+        } else if (\n+            isStable &&\n+            prevSlots &&\n+            prevSlots !== emptyObject &&\n+            key === prevSlots.$key &&\n+            !hasNormalSlots &&\n+            !prevSlots.$hasNormal\n+        ) {\n+            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\n+            \u002F\u002F only need to normalize once\n+            return prevSlots\n+        } else {\n+            res = {};\n+            for (var key$1 in slots) {\n+                if (slots[key$1] && key$1[0] !== '$') {\n+                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n+                }\n+            }\n+        }\n+        \u002F\u002F expose normal slots on scopedSlots\n+        for (var key$2 in normalSlots) {\n+            if (!(key$2 in res)) {\n+                res[key$2] = proxyNormalSlot(normalSlots, key$2);\n+            }\n+        }\n+        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\n+        \u002F\u002F and when that is passed down this would cause an error\n+        if (slots && Object.isExtensible(slots)) {\n+            (slots)._normalized = res;\n+        }\n+        def(res, '$stable', isStable);\n+        def(res, '$key', key);\n+        def(res, '$hasNormal', hasNormalSlots);\n+        return res\n+    }\n+\n+    function normalizeScopedSlot(normalSlots, key, fn) {\n+        var normalized = function () {\n+            var res = arguments.length ? fn.apply(null, arguments) : fn({});\n+            res = res && typeof res === 'object' && !Array.isArray(res)\n+                ? [res] \u002F\u002F single vnode\n+                : normalizeChildren(res);\n+            return res && (\n+                res.length === 0 ||\n+                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\n+            ) ? undefined\n+                : res\n+        };\n+        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\n+        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\n+        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\n+        if (fn.proxy) {\n+            Object.defineProperty(normalSlots, key, {\n+                get: normalized,\n+                enumerable: true,\n+                configurable: true\n+            });\n+        }\n+        return normalized\n+    }\n+\n+    function proxyNormalSlot(slots, key) {\n+        return function () { return slots[key]; }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering v-for lists.\n+     *\u002F\n+    function renderList (\n+        val,\n+        render\n+    ) {\n+        var ret, i, l, keys, key;\n+        if (Array.isArray(val) || typeof val === 'string') {\n+            ret = new Array(val.length);\n+            for (i = 0, l = val.length; i \u003C l; i++) {\n+                ret[i] = render(val[i], i);\n+            }\n+        } else if (typeof val === 'number') {\n+            ret = new Array(val);\n+            for (i = 0; i \u003C val; i++) {\n+                ret[i] = render(i + 1, i);\n+            }\n+        } else if (isObject(val)) {\n+            if (hasSymbol && val[Symbol.iterator]) {\n+                ret = [];\n+                var iterator = val[Symbol.iterator]();\n+                var result = iterator.next();\n+                while (!result.done) {\n+                    ret.push(render(result.value, ret.length));\n+                    result = iterator.next();\n+                }\n+            } else {\n+                keys = Object.keys(val);\n+                ret = new Array(keys.length);\n+                for (i = 0, l = keys.length; i \u003C l; i++) {\n+                    key = keys[i];\n+                    ret[i] = render(val[key], key, i);\n+                }\n+            }\n+        }\n+        if (!isDef(ret)) {\n+            ret = [];\n+        }\n+        (ret)._isVList = true;\n+        return ret\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering \u003Cslot>\n+     *\u002F\n+    function renderSlot (\n+        name,\n+        fallback,\n+        props,\n+        bindObject\n+    ) {\n+        var scopedSlotFn = this.$scopedSlots[name];\n+        var nodes;\n+        if (scopedSlotFn) { \u002F\u002F scoped slot\n+            props = props || {};\n+            if (bindObject) {\n+                if (!isObject(bindObject)) {\n+                    warn(\n+                        'slot v-bind without argument expects an Object',\n+                        this\n+                    );\n+                }\n+                props = extend(extend({}, bindObject), props);\n+            }\n+            nodes = scopedSlotFn(props) || fallback;\n+        } else {\n+            nodes = this.$slots[name] || fallback;\n+        }\n+\n+        var target = props && props.slot;\n+        if (target) {\n+            return this.$createElement('template', { slot: target }, nodes)\n+        } else {\n+            return nodes\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for resolving filters\n+     *\u002F\n+    function resolveFilter (id) {\n+        return resolveAsset(this.$options, 'filters', id, true) || identity\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isKeyNotMatch (expect, actual) {\n+        if (Array.isArray(expect)) {\n+            return expect.indexOf(actual) === -1\n+        } else {\n+            return expect !== actual\n+        }\n+    }\n+\n+    \u002F**\n+     * Runtime helper for checking keyCodes from config.\n+     * exposed as Vue.prototype._k\n+     * passing in eventKeyName as last argument separately for backwards compat\n+     *\u002F\n+    function checkKeyCodes (\n+        eventKeyCode,\n+        key,\n+        builtInKeyCode,\n+        eventKeyName,\n+        builtInKeyName\n+    ) {\n+        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n+        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n+            return isKeyNotMatch(builtInKeyName, eventKeyName)\n+        } else if (mappedKeyCode) {\n+            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n+        } else if (eventKeyName) {\n+            return hyphenate(eventKeyName) !== key\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n+     *\u002F\n+    function bindObjectProps (\n+        data,\n+        tag,\n+        value,\n+        asProp,\n+        isSync\n+    ) {\n+        if (value) {\n+            if (!isObject(value)) {\n+                warn(\n+                    'v-bind without argument expects an Object or Array value',\n+                    this\n+                );\n+            } else {\n+                if (Array.isArray(value)) {\n+                    value = toObject(value);\n+                }\n+                var hash;\n+                var loop = function ( key ) {\n+                    if (\n+                        key === 'class' ||\n+                        key === 'style' ||\n+                        isReservedAttribute(key)\n+                    ) {\n+                        hash = data;\n+                    } else {\n+                        var type = data.attrs && data.attrs.type;\n+                        hash = asProp || config.mustUseProp(tag, type, key)\n+                            ? data.domProps || (data.domProps = {})\n+                            : data.attrs || (data.attrs = {});\n+                    }\n+                    var camelizedKey = camelize(key);\n+                    var hyphenatedKey = hyphenate(key);\n+                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n+                        hash[key] = value[key];\n+\n+                        if (isSync) {\n+                            var on = data.on || (data.on = {});\n+                            on[(\"update:\" + key)] = function ($event) {\n+                                value[key] = $event;\n+                            };\n+                        }\n+                    }\n+                };\n+\n+                for (var key in value) loop( key );\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering static trees.\n+     *\u002F\n+    function renderStatic (\n+        index,\n+        isInFor\n+    ) {\n+        var cached = this._staticTrees || (this._staticTrees = []);\n+        var tree = cached[index];\n+        \u002F\u002F if has already-rendered static tree and not inside v-for,\n+        \u002F\u002F we can reuse the same tree.\n+        if (tree && !isInFor) {\n+            return tree\n+        }\n+        \u002F\u002F otherwise, render a fresh tree.\n+        tree = cached[index] = this.$options.staticRenderFns[index].call(\n+            this._renderProxy,\n+            null,\n+            this \u002F\u002F for render fns generated for functional component templates\n+        );\n+        markStatic(tree, (\"__static__\" + index), false);\n+        return tree\n+    }\n+\n+    \u002F**\n+     * Runtime helper for v-once.\n+     * Effectively it means marking the node as static with a unique key.\n+     *\u002F\n+    function markOnce (\n+        tree,\n+        index,\n+        key\n+    ) {\n+        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n+        return tree\n+    }\n+\n+    function markStatic (\n+        tree,\n+        key,\n+        isOnce\n+    ) {\n+        if (Array.isArray(tree)) {\n+            for (var i = 0; i \u003C tree.length; i++) {\n+                if (tree[i] && typeof tree[i] !== 'string') {\n+                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n+                }\n+            }\n+        } else {\n+            markStaticNode(tree, key, isOnce);\n+        }\n+    }\n+\n+    function markStaticNode (node, key, isOnce) {\n+        node.isStatic = true;\n+        node.key = key;\n+        node.isOnce = isOnce;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindObjectListeners (data, value) {\n+        if (value) {\n+            if (!isPlainObject(value)) {\n+                warn(\n+                    'v-on without argument expects an Object value',\n+                    this\n+                );\n+            } else {\n+                var on = data.on = data.on ? extend({}, data.on) : {};\n+                for (var key in value) {\n+                    var existing = on[key];\n+                    var ours = value[key];\n+                    on[key] = existing ? [].concat(existing, ours) : ours;\n+                }\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveScopedSlots (\n+        fns, \u002F\u002F see flow\u002Fvnode\n+        res,\n+        \u002F\u002F the following are added in 2.6\n+        hasDynamicKeys,\n+        contentHashKey\n+    ) {\n+        res = res || { $stable: !hasDynamicKeys };\n+        for (var i = 0; i \u003C fns.length; i++) {\n+            var slot = fns[i];\n+            if (Array.isArray(slot)) {\n+                resolveScopedSlots(slot, res, hasDynamicKeys);\n+            } else if (slot) {\n+                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\n+                if (slot.proxy) {\n+                    slot.fn.proxy = true;\n+                }\n+                res[slot.key] = slot.fn;\n+            }\n+        }\n+        if (contentHashKey) {\n+            (res).$key = contentHashKey;\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindDynamicKeys (baseObj, values) {\n+        for (var i = 0; i \u003C values.length; i += 2) {\n+            var key = values[i];\n+            if (typeof key === 'string' && key) {\n+                baseObj[values[i]] = values[i + 1];\n+            } else if (key !== '' && key !== null) {\n+                \u002F\u002F null is a speical value for explicitly removing a binding\n+                warn(\n+                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n+                    this\n+                );\n+            }\n+        }\n+        return baseObj\n+    }\n+\n+    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\n+    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\n+    \u002F\u002F to string and cause the type check to miss.\n+    function prependModifier (value, symbol) {\n+        return typeof value === 'string' ? symbol + value : value\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function installRenderHelpers (target) {\n+        target._o = markOnce;\n+        target._n = toNumber;\n+        target._s = toString;\n+        target._l = renderList;\n+        target._t = renderSlot;\n+        target._q = looseEqual;\n+        target._i = looseIndexOf;\n+        target._m = renderStatic;\n+        target._f = resolveFilter;\n+        target._k = checkKeyCodes;\n+        target._b = bindObjectProps;\n+        target._v = createTextVNode;\n+        target._e = createEmptyVNode;\n+        target._u = resolveScopedSlots;\n+        target._g = bindObjectListeners;\n+        target._d = bindDynamicKeys;\n+        target._p = prependModifier;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function FunctionalRenderContext (\n+        data,\n+        props,\n+        children,\n+        parent,\n+        Ctor\n+    ) {\n+        var this$1 = this;\n+\n+        var options = Ctor.options;\n+        \u002F\u002F ensure the createElement function in functional components\n+        \u002F\u002F gets a unique context - this is necessary for correct named slot check\n+        var contextVm;\n+        if (hasOwn(parent, '_uid')) {\n+            contextVm = Object.create(parent);\n+            \u002F\u002F $flow-disable-line\n+            contextVm._original = parent;\n+        } else {\n+            \u002F\u002F the context vm passed in is a functional context as well.\n+            \u002F\u002F in this case we want to make sure we are able to get a hold to the\n+            \u002F\u002F real context instance.\n+            contextVm = parent;\n+            \u002F\u002F $flow-disable-line\n+            parent = parent._original;\n+        }\n+        var isCompiled = isTrue(options._compiled);\n+        var needNormalization = !isCompiled;\n+\n+        this.data = data;\n+        this.props = props;\n+        this.children = children;\n+        this.parent = parent;\n+        this.listeners = data.on || emptyObject;\n+        this.injections = resolveInject(options.inject, parent);\n+        this.slots = function () {\n+            if (!this$1.$slots) {\n+                normalizeScopedSlots(\n+                    data.scopedSlots,\n+                    this$1.$slots = resolveSlots(children, parent)\n+                );\n+            }\n+            return this$1.$slots\n+        };\n+\n+        Object.defineProperty(this, 'scopedSlots', ({\n+            enumerable: true,\n+            get: function get () {\n+                return normalizeScopedSlots(data.scopedSlots, this.slots())\n+            }\n+        }));\n+\n+        \u002F\u002F support for compiled functional template\n+        if (isCompiled) {\n+            \u002F\u002F exposing $options for renderStatic()\n+            this.$options = options;\n+            \u002F\u002F pre-resolve slots for renderSlot()\n+            this.$slots = this.slots();\n+            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n+        }\n+\n+        if (options._scopeId) {\n+            this._c = function (a, b, c, d) {\n+                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n+                if (vnode && !Array.isArray(vnode)) {\n+                    vnode.fnScopeId = options._scopeId;\n+                    vnode.fnContext = parent;\n+                }\n+                return vnode\n+            };\n+        } else {\n+            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n+        }\n+    }\n+\n+    installRenderHelpers(FunctionalRenderContext.prototype);\n+\n+    function createFunctionalComponent (\n+        Ctor,\n+        propsData,\n+        data,\n+        contextVm,\n+        children\n+    ) {\n+        var options = Ctor.options;\n+        var props = {};\n+        var propOptions = options.props;\n+        if (isDef(propOptions)) {\n+            for (var key in propOptions) {\n+                props[key] = validateProp(key, propOptions, propsData || emptyObject);\n+            }\n+        } else {\n+            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n+            if (isDef(data.props)) { mergeProps(props, data.props); }\n+        }\n+\n+        var renderContext = new FunctionalRenderContext(\n+            data,\n+            props,\n+            children,\n+            contextVm,\n+            Ctor\n+        );\n+\n+        var vnode = options.render.call(null, renderContext._c, renderContext);\n+\n+        if (vnode instanceof VNode) {\n+            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n+        } else if (Array.isArray(vnode)) {\n+            var vnodes = normalizeChildren(vnode) || [];\n+            var res = new Array(vnodes.length);\n+            for (var i = 0; i \u003C vnodes.length; i++) {\n+                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n+            }\n+            return res\n+        }\n+    }\n+\n+    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n+        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\n+        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\n+        \u002F\u002F that should not be matched to match.\n+        var clone = cloneVNode(vnode);\n+        clone.fnContext = contextVm;\n+        clone.fnOptions = options;\n+        {\n+            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n+        }\n+        if (data.slot) {\n+            (clone.data || (clone.data = {})).slot = data.slot;\n+        }\n+        return clone\n+    }\n+\n+    function mergeProps (to, from) {\n+        for (var key in from) {\n+            to[camelize(key)] = from[key];\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F inline hooks to be invoked on component VNodes during patch\n+    var componentVNodeHooks = {\n+        init: function init (vnode, hydrating) {\n+            if (\n+                vnode.componentInstance &&\n+                !vnode.componentInstance._isDestroyed &&\n+                vnode.data.keepAlive\n+            ) {\n+                \u002F\u002F kept-alive components, treat as a patch\n+                var mountedNode = vnode; \u002F\u002F work around flow\n+                componentVNodeHooks.prepatch(mountedNode, mountedNode);\n+            } else {\n+                var child = vnode.componentInstance = createComponentInstanceForVnode(\n+                    vnode,\n+                    activeInstance\n+                );\n+                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n+            }\n+        },\n+\n+        prepatch: function prepatch (oldVnode, vnode) {\n+            var options = vnode.componentOptions;\n+            var child = vnode.componentInstance = oldVnode.componentInstance;\n+            updateChildComponent(\n+                child,\n+                options.propsData, \u002F\u002F updated props\n+                options.listeners, \u002F\u002F updated listeners\n+                vnode, \u002F\u002F new parent vnode\n+                options.children \u002F\u002F new children\n+            );\n+        },\n+\n+        insert: function insert (vnode) {\n+            var context = vnode.context;\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isMounted) {\n+                componentInstance._isMounted = true;\n+                callHook(componentInstance, 'mounted');\n+            }\n+            if (vnode.data.keepAlive) {\n+                if (context._isMounted) {\n+                    \u002F\u002F vue-router#1212\n+                    \u002F\u002F During updates, a kept-alive component's child components may\n+                    \u002F\u002F change, so directly walking the tree here may call activated hooks\n+                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\n+                    \u002F\u002F be processed after the whole patch process ended.\n+                    queueActivatedComponent(componentInstance);\n+                } else {\n+                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        },\n+\n+        destroy: function destroy (vnode) {\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isDestroyed) {\n+                if (!vnode.data.keepAlive) {\n+                    componentInstance.$destroy();\n+                } else {\n+                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        }\n+    };\n+\n+    var hooksToMerge = Object.keys(componentVNodeHooks);\n+\n+    function createComponent (\n+        Ctor,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        if (isUndef(Ctor)) {\n+            return\n+        }\n+\n+        var baseCtor = context.$options._base;\n+\n+        \u002F\u002F plain options object: turn it into a constructor\n+        if (isObject(Ctor)) {\n+            Ctor = baseCtor.extend(Ctor);\n+        }\n+\n+        \u002F\u002F if at this stage it's not a constructor or an async component factory,\n+        \u002F\u002F reject.\n+        if (typeof Ctor !== 'function') {\n+            {\n+                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n+            }\n+            return\n+        }\n+\n+        \u002F\u002F async component\n+        var asyncFactory;\n+        if (isUndef(Ctor.cid)) {\n+            asyncFactory = Ctor;\n+            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n+            if (Ctor === undefined) {\n+                \u002F\u002F return a placeholder node for async component, which is rendered\n+                \u002F\u002F as a comment node but preserves all the raw information for the node.\n+                \u002F\u002F the information will be used for async server-rendering and hydration.\n+                return createAsyncPlaceholder(\n+                    asyncFactory,\n+                    data,\n+                    context,\n+                    children,\n+                    tag\n+                )\n+            }\n+        }\n+\n+        data = data || {};\n+\n+        \u002F\u002F resolve constructor options in case global mixins are applied after\n+        \u002F\u002F component constructor creation\n+        resolveConstructorOptions(Ctor);\n+\n+        \u002F\u002F transform component v-model data into props & events\n+        if (isDef(data.model)) {\n+            transformModel(Ctor.options, data);\n+        }\n+\n+        \u002F\u002F extract props\n+        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n+\n+        \u002F\u002F functional component\n+        if (isTrue(Ctor.options.functional)) {\n+            return createFunctionalComponent(Ctor, propsData, data, context, children)\n+        }\n+\n+        \u002F\u002F extract listeners, since these needs to be treated as\n+        \u002F\u002F child component listeners instead of DOM listeners\n+        var listeners = data.on;\n+        \u002F\u002F replace with listeners with .native modifier\n+        \u002F\u002F so it gets processed during parent component patch.\n+        data.on = data.nativeOn;\n+\n+        if (isTrue(Ctor.options.abstract)) {\n+            \u002F\u002F abstract components do not keep anything\n+            \u002F\u002F other than props & listeners & slot\n+\n+            \u002F\u002F work around flow\n+            var slot = data.slot;\n+            data = {};\n+            if (slot) {\n+                data.slot = slot;\n+            }\n+        }\n+\n+        \u002F\u002F install component management hooks onto the placeholder node\n+        installComponentHooks(data);\n+\n+        \u002F\u002F return a placeholder vnode\n+        var name = Ctor.options.name || tag;\n+        var vnode = new VNode(\n+            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n+            data, undefined, undefined, undefined, context,\n+            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n+            asyncFactory\n+        );\n+\n+        return vnode\n+    }\n+\n+    function createComponentInstanceForVnode (\n+        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\n+        parent \u002F\u002F activeInstance in lifecycle state\n+    ) {\n+        var options = {\n+            _isComponent: true,\n+            _parentVnode: vnode,\n+            parent: parent\n+        };\n+        \u002F\u002F check inline-template render functions\n+        var inlineTemplate = vnode.data.inlineTemplate;\n+        if (isDef(inlineTemplate)) {\n+            options.render = inlineTemplate.render;\n+            options.staticRenderFns = inlineTemplate.staticRenderFns;\n+        }\n+        return new vnode.componentOptions.Ctor(options)\n+    }\n+\n+    function installComponentHooks (data) {\n+        var hooks = data.hook || (data.hook = {});\n+        for (var i = 0; i \u003C hooksToMerge.length; i++) {\n+            var key = hooksToMerge[i];\n+            var existing = hooks[key];\n+            var toMerge = componentVNodeHooks[key];\n+            if (existing !== toMerge && !(existing && existing._merged)) {\n+                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n+            }\n+        }\n+    }\n+\n+    function mergeHook$1 (f1, f2) {\n+        var merged = function (a, b) {\n+            \u002F\u002F flow complains about extra args which is why we use any\n+            f1(a, b);\n+            f2(a, b);\n+        };\n+        merged._merged = true;\n+        return merged\n+    }\n+\n+    \u002F\u002F transform component v-model info (value and callback) into\n+    \u002F\u002F prop and event handler respectively.\n+    function transformModel (options, data) {\n+        var prop = (options.model && options.model.prop) || 'value';\n+        var event = (options.model && options.model.event) || 'input'\n+        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n+        var on = data.on || (data.on = {});\n+        var existing = on[event];\n+        var callback = data.model.callback;\n+        if (isDef(existing)) {\n+            if (\n+                Array.isArray(existing)\n+                    ? existing.indexOf(callback) === -1\n+                    : existing !== callback\n+            ) {\n+                on[event] = [callback].concat(existing);\n+            }\n+        } else {\n+            on[event] = callback;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var SIMPLE_NORMALIZE = 1;\n+    var ALWAYS_NORMALIZE = 2;\n+\n+    \u002F\u002F wrapper function for providing a more flexible interface\n+    \u002F\u002F without getting yelled at by flow\n+    function createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType,\n+        alwaysNormalize\n+    ) {\n+        if (Array.isArray(data) || isPrimitive(data)) {\n+            normalizationType = children;\n+            children = data;\n+            data = undefined;\n+        }\n+        if (isTrue(alwaysNormalize)) {\n+            normalizationType = ALWAYS_NORMALIZE;\n+        }\n+        return _createElement(context, tag, data, children, normalizationType)\n+    }\n+\n+    function _createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType\n+    ) {\n+        if (isDef(data) && isDef((data).__ob__)) {\n+            warn(\n+                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n+                'Always create fresh vnode data objects in each render!',\n+                context\n+            );\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F object syntax in v-bind\n+        if (isDef(data) && isDef(data.is)) {\n+            tag = data.is;\n+        }\n+        if (!tag) {\n+            \u002F\u002F in case of component :is set to falsy value\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F warn against non-primitive key\n+        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n+        ) {\n+            {\n+                warn(\n+                    'Avoid using non-primitive value as key, ' +\n+                    'use string\u002Fnumber value instead.',\n+                    context\n+                );\n+            }\n+        }\n+        \u002F\u002F support single function children as default scoped slot\n+        if (Array.isArray(children) &&\n+            typeof children[0] === 'function'\n+        ) {\n+            data = data || {};\n+            data.scopedSlots = { default: children[0] };\n+            children.length = 0;\n+        }\n+        if (normalizationType === ALWAYS_NORMALIZE) {\n+            children = normalizeChildren(children);\n+        } else if (normalizationType === SIMPLE_NORMALIZE) {\n+            children = simpleNormalizeChildren(children);\n+        }\n+        var vnode, ns;\n+        if (typeof tag === 'string') {\n+            var Ctor;\n+            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n+            if (config.isReservedTag(tag)) {\n+                \u002F\u002F platform built-in elements\n+                vnode = new VNode(\n+                    config.parsePlatformTagName(tag), data, children,\n+                    undefined, undefined, context\n+                );\n+            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n+                \u002F\u002F component\n+                vnode = createComponent(Ctor, data, context, children, tag);\n+            } else {\n+                \u002F\u002F unknown or unlisted namespaced elements\n+                \u002F\u002F check at runtime because it may get assigned a namespace when its\n+                \u002F\u002F parent normalizes children\n+                vnode = new VNode(\n+                    tag, data, children,\n+                    undefined, undefined, context\n+                );\n+            }\n+        } else {\n+            \u002F\u002F direct component options \u002F constructor\n+            vnode = createComponent(tag, data, context, children);\n+        }\n+        if (Array.isArray(vnode)) {\n+            return vnode\n+        } else if (isDef(vnode)) {\n+            if (isDef(ns)) { applyNS(vnode, ns); }\n+            if (isDef(data)) { registerDeepBindings(data); }\n+            return vnode\n+        } else {\n+            return createEmptyVNode()\n+        }\n+    }\n+\n+    function applyNS (vnode, ns, force) {\n+        vnode.ns = ns;\n+        if (vnode.tag === 'foreignObject') {\n+            \u002F\u002F use default namespace inside foreignObject\n+            ns = undefined;\n+            force = true;\n+        }\n+        if (isDef(vnode.children)) {\n+            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\n+                var child = vnode.children[i];\n+                if (isDef(child.tag) && (\n+                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n+                    applyNS(child, ns, force);\n+                }\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F ref #5318\n+    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\n+    \u002F\u002F :class are used on slot nodes\n+    function registerDeepBindings (data) {\n+        if (isObject(data.style)) {\n+            traverse(data.style);\n+        }\n+        if (isObject(data.class)) {\n+            traverse(data.class);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initRender (vm) {\n+        vm._vnode = null; \u002F\u002F the root of the child tree\n+        vm._staticTrees = null; \u002F\u002F v-once cached trees\n+        var options = vm.$options;\n+        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\n+        var renderContext = parentVnode && parentVnode.context;\n+        vm.$slots = resolveSlots(options._renderChildren, renderContext);\n+        vm.$scopedSlots = emptyObject;\n+        \u002F\u002F bind the createElement fn to this instance\n+        \u002F\u002F so that we get proper render context inside it.\n+        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\n+        \u002F\u002F internal version is used by render functions compiled from templates\n+        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n+        \u002F\u002F normalization is always applied for the public version, used in\n+        \u002F\u002F user-written render functions.\n+        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n+\n+        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\n+        \u002F\u002F they need to be reactive so that HOCs using them are always updated\n+        var parentData = parentVnode && parentVnode.data;\n+\n+      \u002F* istanbul ignore else *\u002F\n+        {\n+            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n+            }, true);\n+            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n+            }, true);\n+        }\n+    }\n+\n+    var currentRenderingInstance = null;\n+\n+    function renderMixin (Vue) {\n+        \u002F\u002F install runtime convenience helpers\n+        installRenderHelpers(Vue.prototype);\n+\n+        Vue.prototype.$nextTick = function (fn) {\n+            return nextTick(fn, this)\n+        };\n+\n+        Vue.prototype._render = function () {\n+            var vm = this;\n+            var ref = vm.$options;\n+            var render = ref.render;\n+            var _parentVnode = ref._parentVnode;\n+\n+            if (_parentVnode) {\n+                vm.$scopedSlots = normalizeScopedSlots(\n+                    _parentVnode.data.scopedSlots,\n+                    vm.$slots,\n+                    vm.$scopedSlots\n+                );\n+            }\n+\n+            \u002F\u002F set parent vnode. this allows render functions to have access\n+            \u002F\u002F to the data on the placeholder node.\n+            vm.$vnode = _parentVnode;\n+            \u002F\u002F render self\n+            var vnode;\n+            try {\n+                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\n+                \u002F\u002F separately from one another. Nested component's render fns are called\n+                \u002F\u002F when parent component is patched.\n+                currentRenderingInstance = vm;\n+                vnode = render.call(vm._renderProxy, vm.$createElement);\n+            } catch (e) {\n+                handleError(e, vm, \"render\");\n+                \u002F\u002F return error render result,\n+                \u002F\u002F or previous vnode to prevent render error causing blank component\n+              \u002F* istanbul ignore else *\u002F\n+                if (vm.$options.renderError) {\n+                    try {\n+                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n+                    } catch (e) {\n+                        handleError(e, vm, \"renderError\");\n+                        vnode = vm._vnode;\n+                    }\n+                } else {\n+                    vnode = vm._vnode;\n+                }\n+            } finally {\n+                currentRenderingInstance = null;\n+            }\n+            \u002F\u002F if the returned array contains only a single node, allow it\n+            if (Array.isArray(vnode) && vnode.length === 1) {\n+                vnode = vnode[0];\n+            }\n+            \u002F\u002F return empty vnode in case the render function errored out\n+            if (!(vnode instanceof VNode)) {\n+                if (Array.isArray(vnode)) {\n+                    warn(\n+                        'Multiple root nodes returned from render function. Render function ' +\n+                        'should return a single root node.',\n+                        vm\n+                    );\n+                }\n+                vnode = createEmptyVNode();\n+            }\n+            \u002F\u002F set parent\n+            vnode.parent = _parentVnode;\n+            return vnode\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function ensureCtor (comp, base) {\n+        if (\n+            comp.__esModule ||\n+            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n+        ) {\n+            comp = comp.default;\n+        }\n+        return isObject(comp)\n+            ? base.extend(comp)\n+            : comp\n+    }\n+\n+    function createAsyncPlaceholder (\n+        factory,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        var node = createEmptyVNode();\n+        node.asyncFactory = factory;\n+        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n+        return node\n+    }\n+\n+    function resolveAsyncComponent (\n+        factory,\n+        baseCtor\n+    ) {\n+        if (isTrue(factory.error) && isDef(factory.errorComp)) {\n+            return factory.errorComp\n+        }\n+\n+        if (isDef(factory.resolved)) {\n+            return factory.resolved\n+        }\n+\n+        var owner = currentRenderingInstance;\n+        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n+            \u002F\u002F already pending\n+            factory.owners.push(owner);\n+        }\n+\n+        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n+            return factory.loadingComp\n+        }\n+\n+        if (owner && !isDef(factory.owners)) {\n+            var owners = factory.owners = [owner];\n+            var sync = true;\n+            var timerLoading = null;\n+            var timerTimeout = null\n+\n+            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n+\n+            var forceRender = function (renderCompleted) {\n+                for (var i = 0, l = owners.length; i \u003C l; i++) {\n+                    (owners[i]).$forceUpdate();\n+                }\n+\n+                if (renderCompleted) {\n+                    owners.length = 0;\n+                    if (timerLoading !== null) {\n+                        clearTimeout(timerLoading);\n+                        timerLoading = null;\n+                    }\n+                    if (timerTimeout !== null) {\n+                        clearTimeout(timerTimeout);\n+                        timerTimeout = null;\n+                    }\n+                }\n+            };\n+\n+            var resolve = once(function (res) {\n+                \u002F\u002F cache resolved\n+                factory.resolved = ensureCtor(res, baseCtor);\n+                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\n+                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\n+                if (!sync) {\n+                    forceRender(true);\n+                } else {\n+                    owners.length = 0;\n+                }\n+            });\n+\n+            var reject = once(function (reason) {\n+                warn(\n+                    \"Failed to resolve async component: \" + (String(factory)) +\n+                    (reason ? (\"\\nReason: \" + reason) : '')\n+                );\n+                if (isDef(factory.errorComp)) {\n+                    factory.error = true;\n+                    forceRender(true);\n+                }\n+            });\n+\n+            var res = factory(resolve, reject);\n+\n+            if (isObject(res)) {\n+                if (isPromise(res)) {\n+                    \u002F\u002F () => Promise\n+                    if (isUndef(factory.resolved)) {\n+                        res.then(resolve, reject);\n+                    }\n+                } else if (isPromise(res.component)) {\n+                    res.component.then(resolve, reject);\n+\n+                    if (isDef(res.error)) {\n+                        factory.errorComp = ensureCtor(res.error, baseCtor);\n+                    }\n+\n+                    if (isDef(res.loading)) {\n+                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\n+                        if (res.delay === 0) {\n+                            factory.loading = true;\n+                        } else {\n+                            timerLoading = setTimeout(function () {\n+                                timerLoading = null;\n+                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\n+                                    factory.loading = true;\n+                                    forceRender(false);\n+                                }\n+                            }, res.delay || 200);\n+                        }\n+                    }\n+\n+                    if (isDef(res.timeout)) {\n+                        timerTimeout = setTimeout(function () {\n+                            timerTimeout = null;\n+                            if (isUndef(factory.resolved)) {\n+                                reject(\n+                                    \"timeout (\" + (res.timeout) + \"ms)\"\n+                                );\n+                            }\n+                        }, res.timeout);\n+                    }\n+                }\n+            }\n+\n+            sync = false;\n+            \u002F\u002F return in case resolved synchronously\n+            return factory.loading\n+                ? factory.loadingComp\n+                : factory.resolved\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isAsyncPlaceholder (node) {\n+        return node.isComment && node.asyncFactory\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function getFirstComponentChild (children) {\n+        if (Array.isArray(children)) {\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var c = children[i];\n+                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n+                    return c\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    function initEvents (vm) {\n+        vm._events = Object.create(null);\n+        vm._hasHookEvent = false;\n+        \u002F\u002F init parent attached events\n+        var listeners = vm.$options._parentListeners;\n+        if (listeners) {\n+            updateComponentListeners(vm, listeners);\n+        }\n+    }\n+\n+    var target;\n+\n+    function add (event, fn) {\n+        target.$on(event, fn);\n+    }\n+\n+    function remove$1 (event, fn) {\n+        target.$off(event, fn);\n+    }\n+\n+    function createOnceHandler (event, fn) {\n+        var _target = target;\n+        return function onceHandler () {\n+            var res = fn.apply(null, arguments);\n+            if (res !== null) {\n+                _target.$off(event, onceHandler);\n+            }\n+        }\n+    }\n+\n+    function updateComponentListeners (\n+        vm,\n+        listeners,\n+        oldListeners\n+    ) {\n+        target = vm;\n+        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n+        target = undefined;\n+    }\n+\n+    function eventsMixin (Vue) {\n+        var hookRE = \u002F^hook:\u002F;\n+        Vue.prototype.$on = function (event, fn) {\n+            var vm = this;\n+            if (Array.isArray(event)) {\n+                for (var i = 0, l = event.length; i \u003C l; i++) {\n+                    vm.$on(event[i], fn);\n+                }\n+            } else {\n+                (vm._events[event] || (vm._events[event] = [])).push(fn);\n+                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\n+                \u002F\u002F instead of a hash lookup\n+                if (hookRE.test(event)) {\n+                    vm._hasHookEvent = true;\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$once = function (event, fn) {\n+            var vm = this;\n+            function on () {\n+                vm.$off(event, on);\n+                fn.apply(vm, arguments);\n+            }\n+            on.fn = fn;\n+            vm.$on(event, on);\n+            return vm\n+        };\n+\n+        Vue.prototype.$off = function (event, fn) {\n+            var vm = this;\n+            \u002F\u002F all\n+            if (!arguments.length) {\n+                vm._events = Object.create(null);\n+                return vm\n+            }\n+            \u002F\u002F array of events\n+            if (Array.isArray(event)) {\n+                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\n+                    vm.$off(event[i$1], fn);\n+                }\n+                return vm\n+            }\n+            \u002F\u002F specific event\n+            var cbs = vm._events[event];\n+            if (!cbs) {\n+                return vm\n+            }\n+            if (!fn) {\n+                vm._events[event] = null;\n+                return vm\n+            }\n+            \u002F\u002F specific handler\n+            var cb;\n+            var i = cbs.length;\n+            while (i--) {\n+                cb = cbs[i];\n+                if (cb === fn || cb.fn === fn) {\n+                    cbs.splice(i, 1);\n+                    break\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$emit = function (event) {\n+            var vm = this;\n+            {\n+                var lowerCaseEvent = event.toLowerCase();\n+                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n+                    tip(\n+                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n+                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n+                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\n+                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\n+                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n+                    );\n+                }\n+            }\n+            var cbs = vm._events[event];\n+            if (cbs) {\n+                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n+                var args = toArray(arguments, 1);\n+                var info = \"event handler for \\\"\" + event + \"\\\"\";\n+                for (var i = 0, l = cbs.length; i \u003C l; i++) {\n+                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n+                }\n+            }\n+            return vm\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var activeInstance = null;\n+    var isUpdatingChildComponent = false;\n+\n+    function setActiveInstance(vm) {\n+        var prevActiveInstance = activeInstance;\n+        activeInstance = vm;\n+        return function () {\n+            activeInstance = prevActiveInstance;\n+        }\n+    }\n+\n+    function initLifecycle (vm) {\n+        var options = vm.$options;\n+\n+        \u002F\u002F locate first non-abstract parent\n+        var parent = options.parent;\n+        if (parent && !options.abstract) {\n+            while (parent.$options.abstract && parent.$parent) {\n+                parent = parent.$parent;\n+            }\n+            parent.$children.push(vm);\n+        }\n+\n+        vm.$parent = parent;\n+        vm.$root = parent ? parent.$root : vm;\n+\n+        vm.$children = [];\n+        vm.$refs = {};\n+\n+        vm._watcher = null;\n+        vm._inactive = null;\n+        vm._directInactive = false;\n+        vm._isMounted = false;\n+        vm._isDestroyed = false;\n+        vm._isBeingDestroyed = false;\n+    }\n+\n+    function lifecycleMixin (Vue) {\n+        Vue.prototype._update = function (vnode, hydrating) {\n+            var vm = this;\n+            var prevEl = vm.$el;\n+            var prevVnode = vm._vnode;\n+            var restoreActiveInstance = setActiveInstance(vm);\n+            vm._vnode = vnode;\n+            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\n+            \u002F\u002F based on the rendering backend used.\n+            if (!prevVnode) {\n+                \u002F\u002F initial render\n+                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\n+            } else {\n+                \u002F\u002F updates\n+                vm.$el = vm.__patch__(prevVnode, vnode);\n+            }\n+            restoreActiveInstance();\n+            \u002F\u002F update __vue__ reference\n+            if (prevEl) {\n+                prevEl.__vue__ = null;\n+            }\n+            if (vm.$el) {\n+                vm.$el.__vue__ = vm;\n+            }\n+            \u002F\u002F if parent is an HOC, update its $el as well\n+            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n+                vm.$parent.$el = vm.$el;\n+            }\n+            \u002F\u002F updated hook is called by the scheduler to ensure that children are\n+            \u002F\u002F updated in a parent's updated hook.\n+        };\n+\n+        Vue.prototype.$forceUpdate = function () {\n+            var vm = this;\n+            if (vm._watcher) {\n+                vm._watcher.update();\n+            }\n+        };\n+\n+        Vue.prototype.$destroy = function () {\n+            var vm = this;\n+            if (vm._isBeingDestroyed) {\n+                return\n+            }\n+            callHook(vm, 'beforeDestroy');\n+            vm._isBeingDestroyed = true;\n+            \u002F\u002F remove self from parent\n+            var parent = vm.$parent;\n+            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n+                remove(parent.$children, vm);\n+            }\n+            \u002F\u002F teardown watchers\n+            if (vm._watcher) {\n+                vm._watcher.teardown();\n+            }\n+            var i = vm._watchers.length;\n+            while (i--) {\n+                vm._watchers[i].teardown();\n+            }\n+            \u002F\u002F remove reference from data ob\n+            \u002F\u002F frozen object may not have observer.\n+            if (vm._data.__ob__) {\n+                vm._data.__ob__.vmCount--;\n+            }\n+            \u002F\u002F call the last hook...\n+            vm._isDestroyed = true;\n+            \u002F\u002F invoke destroy hooks on current rendered tree\n+            vm.__patch__(vm._vnode, null);\n+            \u002F\u002F fire destroyed hook\n+            callHook(vm, 'destroyed');\n+            \u002F\u002F turn off all instance listeners.\n+            vm.$off();\n+            \u002F\u002F remove __vue__ reference\n+            if (vm.$el) {\n+                vm.$el.__vue__ = null;\n+            }\n+            \u002F\u002F release circular reference (#6759)\n+            if (vm.$vnode) {\n+                vm.$vnode.parent = null;\n+            }\n+        };\n+    }\n+\n+    function mountComponent (\n+        vm,\n+        el,\n+        hydrating\n+    ) {\n+        vm.$el = el;\n+        if (!vm.$options.render) {\n+            vm.$options.render = createEmptyVNode;\n+            {\n+              \u002F* istanbul ignore if *\u002F\n+                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n+                    vm.$options.el || el) {\n+                    warn(\n+                        'You are using the runtime-only build of Vue where the template ' +\n+                        'compiler is not available. Either pre-compile the templates into ' +\n+                        'render functions, or use the compiler-included build.',\n+                        vm\n+                    );\n+                } else {\n+                    warn(\n+                        'Failed to mount component: template or render function not defined.',\n+                        vm\n+                    );\n+                }\n+            }\n+        }\n+        callHook(vm, 'beforeMount');\n+\n+        var updateComponent;\n+      \u002F* istanbul ignore if *\u002F\n+        if (config.performance && mark) {\n+            updateComponent = function () {\n+                var name = vm._name;\n+                var id = vm._uid;\n+                var startTag = \"vue-perf-start:\" + id;\n+                var endTag = \"vue-perf-end:\" + id;\n+\n+                mark(startTag);\n+                var vnode = vm._render();\n+                mark(endTag);\n+                measure((\"vue \" + name + \" render\"), startTag, endTag);\n+\n+                mark(startTag);\n+                vm._update(vnode, hydrating);\n+                mark(endTag);\n+                measure((\"vue \" + name + \" patch\"), startTag, endTag);\n+            };\n+        } else {\n+            updateComponent = function () {\n+                vm._update(vm._render(), hydrating);\n+            };\n+        }\n+\n+        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\n+        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\n+        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\n+        new Watcher(vm, updateComponent, noop, {\n+            before: function before () {\n+                if (vm._isMounted && !vm._isDestroyed) {\n+                    callHook(vm, 'beforeUpdate');\n+                }\n+            }\n+        }, true \u002F* isRenderWatcher *\u002F);\n+        hydrating = false;\n+\n+        \u002F\u002F manually mounted instance, call mounted on self\n+        \u002F\u002F mounted is called for render-created child components in its inserted hook\n+        if (vm.$vnode == null) {\n+            vm._isMounted = true;\n+            callHook(vm, 'mounted');\n+        }\n+        return vm\n+    }\n+\n+    function updateChildComponent (\n+        vm,\n+        propsData,\n+        listeners,\n+        parentVnode,\n+        renderChildren\n+    ) {\n+        {\n+            isUpdatingChildComponent = true;\n+        }\n+\n+        \u002F\u002F determine whether component has slot children\n+        \u002F\u002F we need to do this before overwriting $options._renderChildren.\n+\n+        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\n+        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\n+        \u002F\u002F \"$stable\" marker.\n+        var newScopedSlots = parentVnode.data.scopedSlots;\n+        var oldScopedSlots = vm.$scopedSlots;\n+        var hasDynamicScopedSlot = !!(\n+            (newScopedSlots && !newScopedSlots.$stable) ||\n+            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n+            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n+        );\n+\n+        \u002F\u002F Any static slot children from the parent may have changed during parent's\n+        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\n+        \u002F\u002F update is necessary to ensure correctness.\n+        var needsForceUpdate = !!(\n+            renderChildren ||               \u002F\u002F has new static slots\n+            vm.$options._renderChildren ||  \u002F\u002F has old static slots\n+            hasDynamicScopedSlot\n+        );\n+\n+        vm.$options._parentVnode = parentVnode;\n+        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\n+\n+        if (vm._vnode) { \u002F\u002F update child tree's parent\n+            vm._vnode.parent = parentVnode;\n+        }\n+        vm.$options._renderChildren = renderChildren;\n+\n+        \u002F\u002F update $attrs and $listeners hash\n+        \u002F\u002F these are also reactive so they may trigger child update if the child\n+        \u002F\u002F used them during render\n+        vm.$attrs = parentVnode.data.attrs || emptyObject;\n+        vm.$listeners = listeners || emptyObject;\n+\n+        \u002F\u002F update props\n+        if (propsData && vm.$options.props) {\n+            toggleObserving(false);\n+            var props = vm._props;\n+            var propKeys = vm.$options._propKeys || [];\n+            for (var i = 0; i \u003C propKeys.length; i++) {\n+                var key = propKeys[i];\n+                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\n+                props[key] = validateProp(key, propOptions, propsData, vm);\n+            }\n+            toggleObserving(true);\n+            \u002F\u002F keep a copy of raw propsData\n+            vm.$options.propsData = propsData;\n+        }\n+\n+        \u002F\u002F update listeners\n+        listeners = listeners || emptyObject;\n+        var oldListeners = vm.$options._parentListeners;\n+        vm.$options._parentListeners = listeners;\n+        updateComponentListeners(vm, listeners, oldListeners);\n+\n+        \u002F\u002F resolve slots + force update if has children\n+        if (needsForceUpdate) {\n+            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n+            vm.$forceUpdate();\n+        }\n+\n+        {\n+            isUpdatingChildComponent = false;\n+        }\n+    }\n+\n+    function isInInactiveTree (vm) {\n+        while (vm && (vm = vm.$parent)) {\n+            if (vm._inactive) { return true }\n+        }\n+        return false\n+    }\n+\n+    function activateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = false;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        } else if (vm._directInactive) {\n+            return\n+        }\n+        if (vm._inactive || vm._inactive === null) {\n+            vm._inactive = false;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                activateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'activated');\n+        }\n+    }\n+\n+    function deactivateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = true;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        }\n+        if (!vm._inactive) {\n+            vm._inactive = true;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                deactivateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'deactivated');\n+        }\n+    }\n+\n+    function callHook (vm, hook) {\n+        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\n+        pushTarget();\n+        var handlers = vm.$options[hook];\n+        var info = hook + \" hook\";\n+        if (handlers) {\n+            for (var i = 0, j = handlers.length; i \u003C j; i++) {\n+                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n+            }\n+        }\n+        if (vm._hasHookEvent) {\n+            vm.$emit('hook:' + hook);\n+        }\n+        popTarget();\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var MAX_UPDATE_COUNT = 100;\n+\n+    var queue = [];\n+    var activatedChildren = [];\n+    var has = {};\n+    var circular = {};\n+    var waiting = false;\n+    var flushing = false;\n+    var index = 0;\n+\n+    \u002F**\n+     * Reset the scheduler's state.\n+     *\u002F\n+    function resetSchedulerState () {\n+        index = queue.length = activatedChildren.length = 0;\n+        has = {};\n+        {\n+            circular = {};\n+        }\n+        waiting = flushing = false;\n+    }\n+\n+    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\n+    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\n+    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\n+    \u002F\u002F every time the scheduler flushes and use that for all event listeners\n+    \u002F\u002F attached during that flush.\n+    var currentFlushTimestamp = 0;\n+\n+    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\n+    var getNow = Date.now;\n+\n+    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\n+    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\n+    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\n+    \u002F\u002F same timestamp type when saving the flush timestamp.\n+    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\n+    \u002F\u002F implementations (#9632)\n+    if (inBrowser && !isIE) {\n+        var performance = window.performance;\n+        if (\n+            performance &&\n+            typeof performance.now === 'function' &&\n+            getNow() > document.createEvent('Event').timeStamp\n+        ) {\n+            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\n+            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\n+            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\n+            \u002F\u002F well.\n+            getNow = function () { return performance.now(); };\n+        }\n+    }\n+\n+    \u002F**\n+     * Flush both queues and run the watchers.\n+     *\u002F\n+    function flushSchedulerQueue () {\n+        currentFlushTimestamp = getNow();\n+        flushing = true;\n+        var watcher, id;\n+\n+        \u002F\u002F Sort queue before flush.\n+        \u002F\u002F This ensures that:\n+        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\n+        \u002F\u002F    created before the child)\n+        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\n+        \u002F\u002F    user watchers are created before the render watcher)\n+        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\n+        \u002F\u002F    its watchers can be skipped.\n+        queue.sort(function (a, b) { return a.id - b.id; });\n+\n+        \u002F\u002F do not cache length because more watchers might be pushed\n+        \u002F\u002F as we run existing watchers\n+        for (index = 0; index \u003C queue.length; index++) {\n+            watcher = queue[index];\n+            if (watcher.before) {\n+                watcher.before();\n+            }\n+            id = watcher.id;\n+            has[id] = null;\n+            watcher.run();\n+            \u002F\u002F in dev build, check and stop circular updates.\n+            if (has[id] != null) {\n+                circular[id] = (circular[id] || 0) + 1;\n+                if (circular[id] > MAX_UPDATE_COUNT) {\n+                    warn(\n+                        'You may have an infinite update loop ' + (\n+                            watcher.user\n+                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n+                                : \"in a component render function.\"\n+                        ),\n+                        watcher.vm\n+                    );\n+                    break\n+                }\n+            }\n+        }\n+\n+        \u002F\u002F keep copies of post queues before resetting state\n+        var activatedQueue = activatedChildren.slice();\n+        var updatedQueue = queue.slice();\n+\n+        resetSchedulerState();\n+\n+        \u002F\u002F call component updated and activated hooks\n+        callActivatedHooks(activatedQueue);\n+        callUpdatedHooks(updatedQueue);\n+\n+        \u002F\u002F devtool hook\n+      \u002F* istanbul ignore if *\u002F\n+        if (devtools && config.devtools) {\n+            devtools.emit('flush');\n+        }\n+    }\n+\n+    function callUpdatedHooks (queue) {\n+        var i = queue.length;\n+        while (i--) {\n+            var watcher = queue[i];\n+            var vm = watcher.vm;\n+            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n+                callHook(vm, 'updated');\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Queue a kept-alive component that was activated during patch.\n+     * The queue will be processed after the entire tree has been patched.\n+     *\u002F\n+    function queueActivatedComponent (vm) {\n+        \u002F\u002F setting _inactive to false here so that a render function can\n+        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\n+        vm._inactive = false;\n+        activatedChildren.push(vm);\n+    }\n+\n+    function callActivatedHooks (queue) {\n+        for (var i = 0; i \u003C queue.length; i++) {\n+            queue[i]._inactive = true;\n+            activateChildComponent(queue[i], true \u002F* true *\u002F);\n+        }\n+    }\n+\n+    \u002F**\n+     * Push a watcher into the watcher queue.\n+     * Jobs with duplicate IDs will be skipped unless it's\n+     * pushed when the queue is being flushed.\n+     *\u002F\n+    function queueWatcher (watcher) {\n+        var id = watcher.id;\n+        if (has[id] == null) {\n+            has[id] = true;\n+            if (!flushing) {\n+                queue.push(watcher);\n+            } else {\n+                \u002F\u002F if already flushing, splice the watcher based on its id\n+                \u002F\u002F if already past its id, it will be run next immediately.\n+                var i = queue.length - 1;\n+                while (i > index && queue[i].id > watcher.id) {\n+                    i--;\n+                }\n+                queue.splice(i + 1, 0, watcher);\n+            }\n+            \u002F\u002F queue the flush\n+            if (!waiting) {\n+                waiting = true;\n+\n+                if (!config.async) {\n+                    flushSchedulerQueue();\n+                    return\n+                }\n+                nextTick(flushSchedulerQueue);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var uid$2 = 0;\n+\n+    \u002F**\n+     * A watcher parses an expression, collects dependencies,\n+     * and fires callback when the expression value changes.\n+     * This is used for both the $watch() api and directives.\n+     *\u002F\n+    var Watcher = function Watcher (\n+        vm,\n+        expOrFn,\n+        cb,\n+        options,\n+        isRenderWatcher\n+    ) {\n+        this.vm = vm;\n+        if (isRenderWatcher) {\n+            vm._watcher = this;\n+        }\n+        vm._watchers.push(this);\n+        \u002F\u002F options\n+        if (options) {\n+            this.deep = !!options.deep;\n+            this.user = !!options.user;\n+            this.lazy = !!options.lazy;\n+            this.sync = !!options.sync;\n+            this.before = options.before;\n+        } else {\n+            this.deep = this.user = this.lazy = this.sync = false;\n+        }\n+        this.cb = cb;\n+        this.id = ++uid$2; \u002F\u002F uid for batching\n+        this.active = true;\n+        this.dirty = this.lazy; \u002F\u002F for lazy watchers\n+        this.deps = [];\n+        this.newDeps = [];\n+        this.depIds = new _Set();\n+        this.newDepIds = new _Set();\n+        this.expression = expOrFn.toString();\n+        \u002F\u002F parse expression for getter\n+        if (typeof expOrFn === 'function') {\n+            this.getter = expOrFn;\n+        } else {\n+            this.getter = parsePath(expOrFn);\n+            if (!this.getter) {\n+                this.getter = noop;\n+                warn(\n+                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n+                    'Watcher only accepts simple dot-delimited paths. ' +\n+                    'For full control, use a function instead.',\n+                    vm\n+                );\n+            }\n+        }\n+        this.value = this.lazy\n+            ? undefined\n+            : this.get();\n+    };\n+\n+    \u002F**\n+     * Evaluate the getter, and re-collect dependencies.\n+     *\u002F\n+    Watcher.prototype.get = function get () {\n+        pushTarget(this);\n+        var value;\n+        var vm = this.vm;\n+        try {\n+            value = this.getter.call(vm, vm);\n+        } catch (e) {\n+            if (this.user) {\n+                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+            } else {\n+                throw e\n+            }\n+        } finally {\n+            \u002F\u002F \"touch\" every property so they are all tracked as\n+            \u002F\u002F dependencies for deep watching\n+            if (this.deep) {\n+                traverse(value);\n+            }\n+            popTarget();\n+            this.cleanupDeps();\n+        }\n+        return value\n+    };\n+\n+    \u002F**\n+     * Add a dependency to this directive.\n+     *\u002F\n+    Watcher.prototype.addDep = function addDep (dep) {\n+        var id = dep.id;\n+        if (!this.newDepIds.has(id)) {\n+            this.newDepIds.add(id);\n+            this.newDeps.push(dep);\n+            if (!this.depIds.has(id)) {\n+                dep.addSub(this);\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Clean up for dependency collection.\n+     *\u002F\n+    Watcher.prototype.cleanupDeps = function cleanupDeps () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            var dep = this.deps[i];\n+            if (!this.newDepIds.has(dep.id)) {\n+                dep.removeSub(this);\n+            }\n+        }\n+        var tmp = this.depIds;\n+        this.depIds = this.newDepIds;\n+        this.newDepIds = tmp;\n+        this.newDepIds.clear();\n+        tmp = this.deps;\n+        this.deps = this.newDeps;\n+        this.newDeps = tmp;\n+        this.newDeps.length = 0;\n+    };\n+\n+    \u002F**\n+     * Subscriber interface.\n+     * Will be called when a dependency changes.\n+     *\u002F\n+    Watcher.prototype.update = function update () {\n+      \u002F* istanbul ignore else *\u002F\n+        if (this.lazy) {\n+            this.dirty = true;\n+        } else if (this.sync) {\n+            this.run();\n+        } else {\n+            queueWatcher(this);\n+        }\n+    };\n+\n+    \u002F**\n+     * Scheduler job interface.\n+     * Will be called by the scheduler.\n+     *\u002F\n+    Watcher.prototype.run = function run () {\n+        if (this.active) {\n+            var value = this.get();\n+            if (\n+                value !== this.value ||\n+                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\n+                \u002F\u002F when the value is the same, because the value may\n+                \u002F\u002F have mutated.\n+                isObject(value) ||\n+                this.deep\n+            ) {\n+                \u002F\u002F set new value\n+                var oldValue = this.value;\n+                this.value = value;\n+                if (this.user) {\n+                    try {\n+                        this.cb.call(this.vm, value, oldValue);\n+                    } catch (e) {\n+                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+                    }\n+                } else {\n+                    this.cb.call(this.vm, value, oldValue);\n+                }\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Evaluate the value of the watcher.\n+     * This only gets called for lazy watchers.\n+     *\u002F\n+    Watcher.prototype.evaluate = function evaluate () {\n+        this.value = this.get();\n+        this.dirty = false;\n+    };\n+\n+    \u002F**\n+     * Depend on all deps collected by this watcher.\n+     *\u002F\n+    Watcher.prototype.depend = function depend () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            this.deps[i].depend();\n+        }\n+    };\n+\n+    \u002F**\n+     * Remove self from all dependencies' subscriber list.\n+     *\u002F\n+    Watcher.prototype.teardown = function teardown () {\n+        if (this.active) {\n+            \u002F\u002F remove self from vm's watcher list\n+            \u002F\u002F this is a somewhat expensive operation so we skip it\n+            \u002F\u002F if the vm is being destroyed.\n+            if (!this.vm._isBeingDestroyed) {\n+                remove(this.vm._watchers, this);\n+            }\n+            var i = this.deps.length;\n+            while (i--) {\n+                this.deps[i].removeSub(this);\n+            }\n+            this.active = false;\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var sharedPropertyDefinition = {\n+        enumerable: true,\n+        configurable: true,\n+        get: noop,\n+        set: noop\n+    };\n+\n+    function proxy (target, sourceKey, key) {\n+        sharedPropertyDefinition.get = function proxyGetter () {\n+            return this[sourceKey][key]\n+        };\n+        sharedPropertyDefinition.set = function proxySetter (val) {\n+            this[sourceKey][key] = val;\n+        };\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function initState (vm) {\n+        vm._watchers = [];\n+        var opts = vm.$options;\n+        if (opts.props) { initProps(vm, opts.props); }\n+        if (opts.methods) { initMethods(vm, opts.methods); }\n+        if (opts.data) {\n+            initData(vm);\n+        } else {\n+            observe(vm._data = {}, true \u002F* asRootData *\u002F);\n+        }\n+        if (opts.computed) { initComputed(vm, opts.computed); }\n+        if (opts.watch && opts.watch !== nativeWatch) {\n+            initWatch(vm, opts.watch);\n+        }\n+    }\n+\n+    function initProps (vm, propsOptions) {\n+        var propsData = vm.$options.propsData || {};\n+        var props = vm._props = {};\n+        \u002F\u002F cache prop keys so that future props updates can iterate using Array\n+        \u002F\u002F instead of dynamic object key enumeration.\n+        var keys = vm.$options._propKeys = [];\n+        var isRoot = !vm.$parent;\n+        \u002F\u002F root instance props should be converted\n+        if (!isRoot) {\n+            toggleObserving(false);\n+        }\n+        var loop = function ( key ) {\n+            keys.push(key);\n+            var value = validateProp(key, propsOptions, propsData, vm);\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                var hyphenatedKey = hyphenate(key);\n+                if (isReservedAttribute(hyphenatedKey) ||\n+                    config.isReservedAttr(hyphenatedKey)) {\n+                    warn(\n+                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n+                        vm\n+                    );\n+                }\n+                defineReactive$$1(props, key, value, function () {\n+                    if (!isRoot && !isUpdatingChildComponent) {\n+                        warn(\n+                            \"Avoid mutating a prop directly since the value will be \" +\n+                            \"overwritten whenever the parent component re-renders. \" +\n+                            \"Instead, use a data or computed property based on the prop's \" +\n+                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    }\n+                });\n+            }\n+            \u002F\u002F static props are already proxied on the component's prototype\n+            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\n+            \u002F\u002F instantiation here.\n+            if (!(key in vm)) {\n+                proxy(vm, \"_props\", key);\n+            }\n+        };\n+\n+        for (var key in propsOptions) loop( key );\n+        toggleObserving(true);\n+    }\n+\n+    function initData (vm) {\n+        var data = vm.$options.data;\n+        data = vm._data = typeof data === 'function'\n+            ? getData(data, vm)\n+            : data || {};\n+        if (!isPlainObject(data)) {\n+            data = {};\n+            warn(\n+                'data functions should return an object:\\n' +\n+                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\n+                vm\n+            );\n+        }\n+        \u002F\u002F proxy data on instance\n+        var keys = Object.keys(data);\n+        var props = vm.$options.props;\n+        var methods = vm.$options.methods;\n+        var i = keys.length;\n+        while (i--) {\n+            var key = keys[i];\n+            {\n+                if (methods && hasOwn(methods, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n+                        vm\n+                    );\n+                }\n+            }\n+            if (props && hasOwn(props, key)) {\n+                warn(\n+                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n+                    \"Use prop default value instead.\",\n+                    vm\n+                );\n+            } else if (!isReserved(key)) {\n+                proxy(vm, \"_data\", key);\n+            }\n+        }\n+        \u002F\u002F observe data\n+        observe(data, true \u002F* asRootData *\u002F);\n+    }\n+\n+    function getData (data, vm) {\n+        \u002F\u002F #7573 disable dep collection when invoking data getters\n+        pushTarget();\n+        try {\n+            return data.call(vm, vm)\n+        } catch (e) {\n+            handleError(e, vm, \"data()\");\n+            return {}\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    var computedWatcherOptions = { lazy: true };\n+\n+    function initComputed (vm, computed) {\n+        \u002F\u002F $flow-disable-line\n+        var watchers = vm._computedWatchers = Object.create(null);\n+        \u002F\u002F computed properties are just getters during SSR\n+        var isSSR = isServerRendering();\n+\n+        for (var key in computed) {\n+            var userDef = computed[key];\n+            var getter = typeof userDef === 'function' ? userDef : userDef.get;\n+            if (getter == null) {\n+                warn(\n+                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n+                    vm\n+                );\n+            }\n+\n+            if (!isSSR) {\n+                \u002F\u002F create internal watcher for the computed property.\n+                watchers[key] = new Watcher(\n+                    vm,\n+                    getter || noop,\n+                    noop,\n+                    computedWatcherOptions\n+                );\n+            }\n+\n+            \u002F\u002F component-defined computed properties are already defined on the\n+            \u002F\u002F component prototype. We only need to define computed properties defined\n+            \u002F\u002F at instantiation here.\n+            if (!(key in vm)) {\n+                defineComputed(vm, key, userDef);\n+            } else {\n+                if (key in vm.$data) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n+                } else if (vm.$options.props && key in vm.$options.props) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n+                }\n+            }\n+        }\n+    }\n+\n+    function defineComputed (\n+        target,\n+        key,\n+        userDef\n+    ) {\n+        var shouldCache = !isServerRendering();\n+        if (typeof userDef === 'function') {\n+            sharedPropertyDefinition.get = shouldCache\n+                ? createComputedGetter(key)\n+                : createGetterInvoker(userDef);\n+            sharedPropertyDefinition.set = noop;\n+        } else {\n+            sharedPropertyDefinition.get = userDef.get\n+                ? shouldCache && userDef.cache !== false\n+                    ? createComputedGetter(key)\n+                    : createGetterInvoker(userDef.get)\n+                : noop;\n+            sharedPropertyDefinition.set = userDef.set || noop;\n+        }\n+        if (sharedPropertyDefinition.set === noop) {\n+            sharedPropertyDefinition.set = function () {\n+                warn(\n+                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n+                    this\n+                );\n+            };\n+        }\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function createComputedGetter (key) {\n+        return function computedGetter () {\n+            var watcher = this._computedWatchers && this._computedWatchers[key];\n+            if (watcher) {\n+                if (watcher.dirty) {\n+                    watcher.evaluate();\n+                }\n+                if (Dep.target) {\n+                    watcher.depend();\n+                }\n+                return watcher.value\n+            }\n+        }\n+    }\n+\n+    function createGetterInvoker(fn) {\n+        return function computedGetter () {\n+            return fn.call(this, this)\n+        }\n+    }\n+\n+    function initMethods (vm, methods) {\n+        var props = vm.$options.props;\n+        for (var key in methods) {\n+            {\n+                if (typeof methods[key] !== 'function') {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n+                        \"Did you reference the function correctly?\",\n+                        vm\n+                    );\n+                }\n+                if (props && hasOwn(props, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n+                        vm\n+                    );\n+                }\n+                if ((key in vm) && isReserved(key)) {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n+                        \"Avoid defining component methods that start with _ or $.\"\n+                    );\n+                }\n+            }\n+            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n+        }\n+    }\n+\n+    function initWatch (vm, watch) {\n+        for (var key in watch) {\n+            var handler = watch[key];\n+            if (Array.isArray(handler)) {\n+                for (var i = 0; i \u003C handler.length; i++) {\n+                    createWatcher(vm, key, handler[i]);\n+                }\n+            } else {\n+                createWatcher(vm, key, handler);\n+            }\n+        }\n+    }\n+\n+    function createWatcher (\n+        vm,\n+        expOrFn,\n+        handler,\n+        options\n+    ) {\n+        if (isPlainObject(handler)) {\n+            options = handler;\n+            handler = handler.handler;\n+        }\n+        if (typeof handler === 'string') {\n+            handler = vm[handler];\n+        }\n+        return vm.$watch(expOrFn, handler, options)\n+    }\n+\n+    function stateMixin (Vue) {\n+        \u002F\u002F flow somehow has problems with directly declared definition object\n+        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\n+        \u002F\u002F the object here.\n+        var dataDef = {};\n+        dataDef.get = function () { return this._data };\n+        var propsDef = {};\n+        propsDef.get = function () { return this._props };\n+        {\n+            dataDef.set = function () {\n+                warn(\n+                    'Avoid replacing instance root $data. ' +\n+                    'Use nested data properties instead.',\n+                    this\n+                );\n+            };\n+            propsDef.set = function () {\n+                warn(\"$props is readonly.\", this);\n+            };\n+        }\n+        Object.defineProperty(Vue.prototype, '$data', dataDef);\n+        Object.defineProperty(Vue.prototype, '$props', propsDef);\n+\n+        Vue.prototype.$set = set;\n+        Vue.prototype.$delete = del;\n+\n+        Vue.prototype.$watch = function (\n+            expOrFn,\n+            cb,\n+            options\n+        ) {\n+            var vm = this;\n+            if (isPlainObject(cb)) {\n+                return createWatcher(vm, expOrFn, cb, options)\n+            }\n+            options = options || {};\n+            options.user = true;\n+            var watcher = new Watcher(vm, expOrFn, cb, options);\n+            if (options.immediate) {\n+                try {\n+                    cb.call(vm, watcher.value);\n+                } catch (error) {\n+                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n+                }\n+            }\n+            return function unwatchFn () {\n+                watcher.teardown();\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid$3 = 0;\n+\n+    function initMixin (Vue) {\n+        Vue.prototype._init = function (options) {\n+            var vm = this;\n+            \u002F\u002F a uid\n+            vm._uid = uid$3++;\n+\n+            var startTag, endTag;\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                startTag = \"vue-perf-start:\" + (vm._uid);\n+                endTag = \"vue-perf-end:\" + (vm._uid);\n+                mark(startTag);\n+            }\n+\n+            \u002F\u002F a flag to avoid this being observed\n+            vm._isVue = true;\n+            \u002F\u002F merge options\n+            if (options && options._isComponent) {\n+                \u002F\u002F optimize internal component instantiation\n+                \u002F\u002F since dynamic options merging is pretty slow, and none of the\n+                \u002F\u002F internal component options needs special treatment.\n+                initInternalComponent(vm, options);\n+            } else {\n+                vm.$options = mergeOptions(\n+                    resolveConstructorOptions(vm.constructor),\n+                    options || {},\n+                    vm\n+                );\n+            }\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                initProxy(vm);\n+            }\n+            \u002F\u002F expose real self\n+            vm._self = vm;\n+            initLifecycle(vm);\n+            initEvents(vm);\n+            initRender(vm);\n+            callHook(vm, 'beforeCreate');\n+            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\n+            initState(vm);\n+            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\n+            callHook(vm, 'created');\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                vm._name = formatComponentName(vm, false);\n+                mark(endTag);\n+                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n+            }\n+\n+            if (vm.$options.el) {\n+                vm.$mount(vm.$options.el);\n+            }\n+        };\n+    }\n+\n+    function initInternalComponent (vm, options) {\n+        var opts = vm.$options = Object.create(vm.constructor.options);\n+        \u002F\u002F doing this because it's faster than dynamic enumeration.\n+        var parentVnode = options._parentVnode;\n+        opts.parent = options.parent;\n+        opts._parentVnode = parentVnode;\n+\n+        var vnodeComponentOptions = parentVnode.componentOptions;\n+        opts.propsData = vnodeComponentOptions.propsData;\n+        opts._parentListeners = vnodeComponentOptions.listeners;\n+        opts._renderChildren = vnodeComponentOptions.children;\n+        opts._componentTag = vnodeComponentOptions.tag;\n+\n+        if (options.render) {\n+            opts.render = options.render;\n+            opts.staticRenderFns = options.staticRenderFns;\n+        }\n+    }\n+\n+    function resolveConstructorOptions (Ctor) {\n+        var options = Ctor.options;\n+        if (Ctor.super) {\n+            var superOptions = resolveConstructorOptions(Ctor.super);\n+            var cachedSuperOptions = Ctor.superOptions;\n+            if (superOptions !== cachedSuperOptions) {\n+                \u002F\u002F super option changed,\n+                \u002F\u002F need to resolve new options.\n+                Ctor.superOptions = superOptions;\n+                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\n+                var modifiedOptions = resolveModifiedOptions(Ctor);\n+                \u002F\u002F update base extend options\n+                if (modifiedOptions) {\n+                    extend(Ctor.extendOptions, modifiedOptions);\n+                }\n+                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n+                if (options.name) {\n+                    options.components[options.name] = Ctor;\n+                }\n+            }\n+        }\n+        return options\n+    }\n+\n+    function resolveModifiedOptions (Ctor) {\n+        var modified;\n+        var latest = Ctor.options;\n+        var sealed = Ctor.sealedOptions;\n+        for (var key in latest) {\n+            if (latest[key] !== sealed[key]) {\n+                if (!modified) { modified = {}; }\n+                modified[key] = latest[key];\n+            }\n+        }\n+        return modified\n+    }\n+\n+    function Vue (options) {\n+        if (!(this instanceof Vue)\n+        ) {\n+            warn('Vue is a constructor and should be called with the `new` keyword');\n+        }\n+        this._init(options);\n+    }\n+\n+    initMixin(Vue);\n+    stateMixin(Vue);\n+    eventsMixin(Vue);\n+    lifecycleMixin(Vue);\n+    renderMixin(Vue);\n+\n+  \u002F*  *\u002F\n+\n+    function initUse (Vue) {\n+        Vue.use = function (plugin) {\n+            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n+            if (installedPlugins.indexOf(plugin) > -1) {\n+                return this\n+            }\n+\n+            \u002F\u002F additional parameters\n+            var args = toArray(arguments, 1);\n+            args.unshift(this);\n+            if (typeof plugin.install === 'function') {\n+                plugin.install.apply(plugin, args);\n+            } else if (typeof plugin === 'function') {\n+                plugin.apply(null, args);\n+            }\n+            installedPlugins.push(plugin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initMixin$1 (Vue) {\n+        Vue.mixin = function (mixin) {\n+            this.options = mergeOptions(this.options, mixin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initExtend (Vue) {\n+        \u002F**\n+         * Each instance constructor, including Vue, has a unique\n+         * cid. This enables us to create wrapped \"child\n+         * constructors\" for prototypal inheritance and cache them.\n+         *\u002F\n+        Vue.cid = 0;\n+        var cid = 1;\n+\n+        \u002F**\n+         * Class inheritance\n+         *\u002F\n+        Vue.extend = function (extendOptions) {\n+            extendOptions = extendOptions || {};\n+            var Super = this;\n+            var SuperId = Super.cid;\n+            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n+            if (cachedCtors[SuperId]) {\n+                return cachedCtors[SuperId]\n+            }\n+\n+            var name = extendOptions.name || Super.options.name;\n+            if (name) {\n+                validateComponentName(name);\n+            }\n+\n+            var Sub = function VueComponent (options) {\n+                this._init(options);\n+            };\n+            Sub.prototype = Object.create(Super.prototype);\n+            Sub.prototype.constructor = Sub;\n+            Sub.cid = cid++;\n+            Sub.options = mergeOptions(\n+                Super.options,\n+                extendOptions\n+            );\n+            Sub['super'] = Super;\n+\n+            \u002F\u002F For props and computed properties, we define the proxy getters on\n+            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\n+            \u002F\u002F avoids Object.defineProperty calls for each instance created.\n+            if (Sub.options.props) {\n+                initProps$1(Sub);\n+            }\n+            if (Sub.options.computed) {\n+                initComputed$1(Sub);\n+            }\n+\n+            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\n+            Sub.extend = Super.extend;\n+            Sub.mixin = Super.mixin;\n+            Sub.use = Super.use;\n+\n+            \u002F\u002F create asset registers, so extended classes\n+            \u002F\u002F can have their private assets too.\n+            ASSET_TYPES.forEach(function (type) {\n+                Sub[type] = Super[type];\n+            });\n+            \u002F\u002F enable recursive self-lookup\n+            if (name) {\n+                Sub.options.components[name] = Sub;\n+            }\n+\n+            \u002F\u002F keep a reference to the super options at extension time.\n+            \u002F\u002F later at instantiation we can check if Super's options have\n+            \u002F\u002F been updated.\n+            Sub.superOptions = Super.options;\n+            Sub.extendOptions = extendOptions;\n+            Sub.sealedOptions = extend({}, Sub.options);\n+\n+            \u002F\u002F cache constructor\n+            cachedCtors[SuperId] = Sub;\n+            return Sub\n+        };\n+    }\n+\n+    function initProps$1 (Comp) {\n+        var props = Comp.options.props;\n+        for (var key in props) {\n+            proxy(Comp.prototype, \"_props\", key);\n+        }\n+    }\n+\n+    function initComputed$1 (Comp) {\n+        var computed = Comp.options.computed;\n+        for (var key in computed) {\n+            defineComputed(Comp.prototype, key, computed[key]);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initAssetRegisters (Vue) {\n+        \u002F**\n+         * Create asset registration methods.\n+         *\u002F\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue[type] = function (\n+                id,\n+                definition\n+            ) {\n+                if (!definition) {\n+                    return this.options[type + 's'][id]\n+                } else {\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (type === 'component') {\n+                        validateComponentName(id);\n+                    }\n+                    if (type === 'component' && isPlainObject(definition)) {\n+                        definition.name = definition.name || id;\n+                        definition = this.options._base.extend(definition);\n+                    }\n+                    if (type === 'directive' && typeof definition === 'function') {\n+                        definition = { bind: definition, update: definition };\n+                    }\n+                    this.options[type + 's'][id] = definition;\n+                    return definition\n+                }\n+            };\n+        });\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function getComponentName (opts) {\n+        return opts && (opts.Ctor.options.name || opts.tag)\n+    }\n+\n+    function matches (pattern, name) {\n+        if (Array.isArray(pattern)) {\n+            return pattern.indexOf(name) > -1\n+        } else if (typeof pattern === 'string') {\n+            return pattern.split(',').indexOf(name) > -1\n+        } else if (isRegExp(pattern)) {\n+            return pattern.test(name)\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return false\n+    }\n+\n+    function pruneCache (keepAliveInstance, filter) {\n+        var cache = keepAliveInstance.cache;\n+        var keys = keepAliveInstance.keys;\n+        var _vnode = keepAliveInstance._vnode;\n+        for (var key in cache) {\n+            var cachedNode = cache[key];\n+            if (cachedNode) {\n+                var name = getComponentName(cachedNode.componentOptions);\n+                if (name && !filter(name)) {\n+                    pruneCacheEntry(cache, key, keys, _vnode);\n+                }\n+            }\n+        }\n+    }\n+\n+    function pruneCacheEntry (\n+        cache,\n+        key,\n+        keys,\n+        current\n+    ) {\n+        var cached$$1 = cache[key];\n+        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n+            cached$$1.componentInstance.$destroy();\n+        }\n+        cache[key] = null;\n+        remove(keys, key);\n+    }\n+\n+    var patternTypes = [String, RegExp, Array];\n+\n+    var KeepAlive = {\n+        name: 'keep-alive',\n+        abstract: true,\n+\n+        props: {\n+            include: patternTypes,\n+            exclude: patternTypes,\n+            max: [String, Number]\n+        },\n+\n+        created: function created () {\n+            this.cache = Object.create(null);\n+            this.keys = [];\n+        },\n+\n+        destroyed: function destroyed () {\n+            for (var key in this.cache) {\n+                pruneCacheEntry(this.cache, key, this.keys);\n+            }\n+        },\n+\n+        mounted: function mounted () {\n+            var this$1 = this;\n+\n+            this.$watch('include', function (val) {\n+                pruneCache(this$1, function (name) { return matches(val, name); });\n+            });\n+            this.$watch('exclude', function (val) {\n+                pruneCache(this$1, function (name) { return !matches(val, name); });\n+            });\n+        },\n+\n+        render: function render () {\n+            var slot = this.$slots.default;\n+            var vnode = getFirstComponentChild(slot);\n+            var componentOptions = vnode && vnode.componentOptions;\n+            if (componentOptions) {\n+                \u002F\u002F check pattern\n+                var name = getComponentName(componentOptions);\n+                var ref = this;\n+                var include = ref.include;\n+                var exclude = ref.exclude;\n+                if (\n+                    \u002F\u002F not included\n+                (include && (!name || !matches(include, name))) ||\n+                \u002F\u002F excluded\n+                (exclude && name && matches(exclude, name))\n+                ) {\n+                    return vnode\n+                }\n+\n+                var ref$1 = this;\n+                var cache = ref$1.cache;\n+                var keys = ref$1.keys;\n+                var key = vnode.key == null\n+                    \u002F\u002F same constructor may get registered as different local components\n+                    \u002F\u002F so cid alone is not enough (#3269)\n+                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n+                    : vnode.key;\n+                if (cache[key]) {\n+                    vnode.componentInstance = cache[key].componentInstance;\n+                    \u002F\u002F make current key freshest\n+                    remove(keys, key);\n+                    keys.push(key);\n+                } else {\n+                    cache[key] = vnode;\n+                    keys.push(key);\n+                    \u002F\u002F prune oldest entry\n+                    if (this.max && keys.length > parseInt(this.max)) {\n+                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\n+                    }\n+                }\n+\n+                vnode.data.keepAlive = true;\n+            }\n+            return vnode || (slot && slot[0])\n+        }\n+    };\n+\n+    var builtInComponents = {\n+        KeepAlive: KeepAlive\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function initGlobalAPI (Vue) {\n+        \u002F\u002F config\n+        var configDef = {};\n+        configDef.get = function () { return config; };\n+        {\n+            configDef.set = function () {\n+                warn(\n+                    'Do not replace the Vue.config object, set individual fields instead.'\n+                );\n+            };\n+        }\n+        Object.defineProperty(Vue, 'config', configDef);\n+\n+        \u002F\u002F exposed util methods.\n+        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\n+        \u002F\u002F them unless you are aware of the risk.\n+        Vue.util = {\n+            warn: warn,\n+            extend: extend,\n+            mergeOptions: mergeOptions,\n+            defineReactive: defineReactive$$1\n+        };\n+\n+        Vue.set = set;\n+        Vue.delete = del;\n+        Vue.nextTick = nextTick;\n+\n+        \u002F\u002F 2.6 explicit observable API\n+        Vue.observable = function (obj) {\n+            observe(obj);\n+            return obj\n+        };\n+\n+        Vue.options = Object.create(null);\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue.options[type + 's'] = Object.create(null);\n+        });\n+\n+        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\n+        \u002F\u002F components with in Weex's multi-instance scenarios.\n+        Vue.options._base = Vue;\n+\n+        extend(Vue.options.components, builtInComponents);\n+\n+        initUse(Vue);\n+        initMixin$1(Vue);\n+        initExtend(Vue);\n+        initAssetRegisters(Vue);\n+    }\n+\n+    initGlobalAPI(Vue);\n+\n+    Object.defineProperty(Vue.prototype, '$isServer', {\n+        get: isServerRendering\n+    });\n+\n+    Object.defineProperty(Vue.prototype, '$ssrContext', {\n+        get: function get () {\n+          \u002F* istanbul ignore next *\u002F\n+            return this.$vnode && this.$vnode.ssrContext\n+        }\n+    });\n+\n+    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\n+    Object.defineProperty(Vue, 'FunctionalRenderContext', {\n+        value: FunctionalRenderContext\n+    });\n+\n+    Vue.version = '2.6.10';\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F these are reserved for web because they are directly compiled away\n+    \u002F\u002F during template compilation\n+    var isReservedAttr = makeMap('style,class');\n+\n+    \u002F\u002F attributes that should be using props for binding\n+    var acceptValue = makeMap('input,textarea,option,select,progress');\n+    var mustUseProp = function (tag, type, attr) {\n+        return (\n+            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n+            (attr === 'selected' && tag === 'option') ||\n+            (attr === 'checked' && tag === 'input') ||\n+            (attr === 'muted' && tag === 'video')\n+        )\n+    };\n+\n+    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n+\n+    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n+\n+    var convertEnumeratedValue = function (key, value) {\n+        return isFalsyAttrValue(value) || value === 'false'\n+            ? 'false'\n+            \u002F\u002F allow arbitrary string value for contenteditable\n+            : key === 'contenteditable' && isValidContentEditableValue(value)\n+                ? value\n+                : 'true'\n+    };\n+\n+    var isBooleanAttr = makeMap(\n+        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n+        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n+        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n+        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n+        'required,reversed,scoped,seamless,selected,sortable,translate,' +\n+        'truespeed,typemustmatch,visible'\n+    );\n+\n+    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\n+\n+    var isXlink = function (name) {\n+        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n+    };\n+\n+    var getXlinkProp = function (name) {\n+        return isXlink(name) ? name.slice(6, name.length) : ''\n+    };\n+\n+    var isFalsyAttrValue = function (val) {\n+        return val == null || val === false\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function genClassForVnode (vnode) {\n+        var data = vnode.data;\n+        var parentNode = vnode;\n+        var childNode = vnode;\n+        while (isDef(childNode.componentInstance)) {\n+            childNode = childNode.componentInstance._vnode;\n+            if (childNode && childNode.data) {\n+                data = mergeClassData(childNode.data, data);\n+            }\n+        }\n+        while (isDef(parentNode = parentNode.parent)) {\n+            if (parentNode && parentNode.data) {\n+                data = mergeClassData(data, parentNode.data);\n+            }\n+        }\n+        return renderClass(data.staticClass, data.class)\n+    }\n+\n+    function mergeClassData (child, parent) {\n+        return {\n+            staticClass: concat(child.staticClass, parent.staticClass),\n+            class: isDef(child.class)\n+                ? [child.class, parent.class]\n+                : parent.class\n+        }\n+    }\n+\n+    function renderClass (\n+        staticClass,\n+        dynamicClass\n+    ) {\n+        if (isDef(staticClass) || isDef(dynamicClass)) {\n+            return concat(staticClass, stringifyClass(dynamicClass))\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function concat (a, b) {\n+        return a ? b ? (a + ' ' + b) : a : (b || '')\n+    }\n+\n+    function stringifyClass (value) {\n+        if (Array.isArray(value)) {\n+            return stringifyArray(value)\n+        }\n+        if (isObject(value)) {\n+            return stringifyObject(value)\n+        }\n+        if (typeof value === 'string') {\n+            return value\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function stringifyArray (value) {\n+        var res = '';\n+        var stringified;\n+        for (var i = 0, l = value.length; i \u003C l; i++) {\n+            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n+                if (res) { res += ' '; }\n+                res += stringified;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function stringifyObject (value) {\n+        var res = '';\n+        for (var key in value) {\n+            if (value[key]) {\n+                if (res) { res += ' '; }\n+                res += key;\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var namespaceMap = {\n+        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\n+        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\n+    };\n+\n+    var isHTMLTag = makeMap(\n+        'html,body,base,head,link,meta,style,title,' +\n+        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n+        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n+        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n+        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n+        'embed,object,param,source,canvas,script,noscript,del,ins,' +\n+        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n+        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n+        'output,progress,select,textarea,' +\n+        'details,dialog,menu,menuitem,summary,' +\n+        'content,element,shadow,template,blockquote,iframe,tfoot'\n+    );\n+\n+    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\n+    \u002F\u002F contain child elements.\n+    var isSVG = makeMap(\n+        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n+        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n+        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n+        true\n+    );\n+\n+    var isPreTag = function (tag) { return tag === 'pre'; };\n+\n+    var isReservedTag = function (tag) {\n+        return isHTMLTag(tag) || isSVG(tag)\n+    };\n+\n+    function getTagNamespace (tag) {\n+        if (isSVG(tag)) {\n+            return 'svg'\n+        }\n+        \u002F\u002F basic support for MathML\n+        \u002F\u002F note it doesn't support other MathML elements being component roots\n+        if (tag === 'math') {\n+            return 'math'\n+        }\n+    }\n+\n+    var unknownElementCache = Object.create(null);\n+    function isUnknownElement (tag) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!inBrowser) {\n+            return true\n+        }\n+        if (isReservedTag(tag)) {\n+            return false\n+        }\n+        tag = tag.toLowerCase();\n+      \u002F* istanbul ignore if *\u002F\n+        if (unknownElementCache[tag] != null) {\n+            return unknownElementCache[tag]\n+        }\n+        var el = document.createElement(tag);\n+        if (tag.indexOf('-') > -1) {\n+            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\n+            return (unknownElementCache[tag] = (\n+                el.constructor === window.HTMLUnknownElement ||\n+                el.constructor === window.HTMLElement\n+            ))\n+        } else {\n+            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\n+        }\n+    }\n+\n+    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Query an element selector if it's not an element already.\n+     *\u002F\n+    function query (el) {\n+        if (typeof el === 'string') {\n+            var selected = document.querySelector(el);\n+            if (!selected) {\n+                warn(\n+                    'Cannot find element: ' + el\n+                );\n+                return document.createElement('div')\n+            }\n+            return selected\n+        } else {\n+            return el\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createElement$1 (tagName, vnode) {\n+        var elm = document.createElement(tagName);\n+        if (tagName !== 'select') {\n+            return elm\n+        }\n+        \u002F\u002F false or null will remove the attribute but undefined will not\n+        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n+            elm.setAttribute('multiple', 'multiple');\n+        }\n+        return elm\n+    }\n+\n+    function createElementNS (namespace, tagName) {\n+        return document.createElementNS(namespaceMap[namespace], tagName)\n+    }\n+\n+    function createTextNode (text) {\n+        return document.createTextNode(text)\n+    }\n+\n+    function createComment (text) {\n+        return document.createComment(text)\n+    }\n+\n+    function insertBefore (parentNode, newNode, referenceNode) {\n+        parentNode.insertBefore(newNode, referenceNode);\n+    }\n+\n+    function removeChild (node, child) {\n+        node.removeChild(child);\n+    }\n+\n+    function appendChild (node, child) {\n+        node.appendChild(child);\n+    }\n+\n+    function parentNode (node) {\n+        return node.parentNode\n+    }\n+\n+    function nextSibling (node) {\n+        return node.nextSibling\n+    }\n+\n+    function tagName (node) {\n+        return node.tagName\n+    }\n+\n+    function setTextContent (node, text) {\n+        node.textContent = text;\n+    }\n+\n+    function setStyleScope (node, scopeId) {\n+        node.setAttribute(scopeId, '');\n+    }\n+\n+    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\n+        createElement: createElement$1,\n+        createElementNS: createElementNS,\n+        createTextNode: createTextNode,\n+        createComment: createComment,\n+        insertBefore: insertBefore,\n+        removeChild: removeChild,\n+        appendChild: appendChild,\n+        parentNode: parentNode,\n+        nextSibling: nextSibling,\n+        tagName: tagName,\n+        setTextContent: setTextContent,\n+        setStyleScope: setStyleScope\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref = {\n+        create: function create (_, vnode) {\n+            registerRef(vnode);\n+        },\n+        update: function update (oldVnode, vnode) {\n+            if (oldVnode.data.ref !== vnode.data.ref) {\n+                registerRef(oldVnode, true);\n+                registerRef(vnode);\n+            }\n+        },\n+        destroy: function destroy (vnode) {\n+            registerRef(vnode, true);\n+        }\n+    };\n+\n+    function registerRef (vnode, isRemoval) {\n+        var key = vnode.data.ref;\n+        if (!isDef(key)) { return }\n+\n+        var vm = vnode.context;\n+        var ref = vnode.componentInstance || vnode.elm;\n+        var refs = vm.$refs;\n+        if (isRemoval) {\n+            if (Array.isArray(refs[key])) {\n+                remove(refs[key], ref);\n+            } else if (refs[key] === ref) {\n+                refs[key] = undefined;\n+            }\n+        } else {\n+            if (vnode.data.refInFor) {\n+                if (!Array.isArray(refs[key])) {\n+                    refs[key] = [ref];\n+                } else if (refs[key].indexOf(ref) \u003C 0) {\n+                    \u002F\u002F $flow-disable-line\n+                    refs[key].push(ref);\n+                }\n+            } else {\n+                refs[key] = ref;\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Virtual DOM patching algorithm based on Snabbdom by\n+     * Simon Friis Vindum (@paldepind)\n+     * Licensed under the MIT License\n+     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\n+     *\n+     * modified by Evan You (@yyx990803)\n+     *\n+     * Not type-checking this because this file is perf-critical and the cost\n+     * of making flow understand it is not worth it.\n+     *\u002F\n+\n+    var emptyNode = new VNode('', {}, []);\n+\n+    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n+\n+    function sameVnode (a, b) {\n+        return (\n+            a.key === b.key && (\n+                (\n+                    a.tag === b.tag &&\n+                    a.isComment === b.isComment &&\n+                    isDef(a.data) === isDef(b.data) &&\n+                    sameInputType(a, b)\n+                ) || (\n+                    isTrue(a.isAsyncPlaceholder) &&\n+                    a.asyncFactory === b.asyncFactory &&\n+                    isUndef(b.asyncFactory.error)\n+                )\n+            )\n+        )\n+    }\n+\n+    function sameInputType (a, b) {\n+        if (a.tag !== 'input') { return true }\n+        var i;\n+        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n+        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n+        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n+    }\n+\n+    function createKeyToOldIdx (children, beginIdx, endIdx) {\n+        var i, key;\n+        var map = {};\n+        for (i = beginIdx; i \u003C= endIdx; ++i) {\n+            key = children[i].key;\n+            if (isDef(key)) { map[key] = i; }\n+        }\n+        return map\n+    }\n+\n+    function createPatchFunction (backend) {\n+        var i, j;\n+        var cbs = {};\n+\n+        var modules = backend.modules;\n+        var nodeOps = backend.nodeOps;\n+\n+        for (i = 0; i \u003C hooks.length; ++i) {\n+            cbs[hooks[i]] = [];\n+            for (j = 0; j \u003C modules.length; ++j) {\n+                if (isDef(modules[j][hooks[i]])) {\n+                    cbs[hooks[i]].push(modules[j][hooks[i]]);\n+                }\n+            }\n+        }\n+\n+        function emptyNodeAt (elm) {\n+            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n+        }\n+\n+        function createRmCb (childElm, listeners) {\n+            function remove$$1 () {\n+                if (--remove$$1.listeners === 0) {\n+                    removeNode(childElm);\n+                }\n+            }\n+            remove$$1.listeners = listeners;\n+            return remove$$1\n+        }\n+\n+        function removeNode (el) {\n+            var parent = nodeOps.parentNode(el);\n+            \u002F\u002F element may have already been removed due to v-html \u002F v-text\n+            if (isDef(parent)) {\n+                nodeOps.removeChild(parent, el);\n+            }\n+        }\n+\n+        function isUnknownElement$$1 (vnode, inVPre) {\n+            return (\n+                !inVPre &&\n+                !vnode.ns &&\n+                !(\n+                    config.ignoredElements.length &&\n+                    config.ignoredElements.some(function (ignore) {\n+                        return isRegExp(ignore)\n+                            ? ignore.test(vnode.tag)\n+                            : ignore === vnode.tag\n+                    })\n+                ) &&\n+                config.isUnknownElement(vnode.tag)\n+            )\n+        }\n+\n+        var creatingElmInVPre = 0;\n+\n+        function createElm (\n+            vnode,\n+            insertedVnodeQueue,\n+            parentElm,\n+            refElm,\n+            nested,\n+            ownerArray,\n+            index\n+        ) {\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F This vnode was used in a previous render!\n+                \u002F\u002F now it's used as a new node, overwriting its elm would cause\n+                \u002F\u002F potential patch errors down the road when it's used as an insertion\n+                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\n+                \u002F\u002F associated DOM element for it.\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\n+            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n+                return\n+            }\n+\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            var tag = vnode.tag;\n+            if (isDef(tag)) {\n+                {\n+                    if (data && data.pre) {\n+                        creatingElmInVPre++;\n+                    }\n+                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n+                        warn(\n+                            'Unknown custom element: \u003C' + tag + '> - did you ' +\n+                            'register the component correctly? For recursive components, ' +\n+                            'make sure to provide the \"name\" option.',\n+                            vnode.context\n+                        );\n+                    }\n+                }\n+\n+                vnode.elm = vnode.ns\n+                    ? nodeOps.createElementNS(vnode.ns, tag)\n+                    : nodeOps.createElement(tag, vnode);\n+                setScope(vnode);\n+\n+              \u002F* istanbul ignore if *\u002F\n+                {\n+                    createChildren(vnode, children, insertedVnodeQueue);\n+                    if (isDef(data)) {\n+                        invokeCreateHooks(vnode, insertedVnodeQueue);\n+                    }\n+                    insert(parentElm, vnode.elm, refElm);\n+                }\n+\n+                if (data && data.pre) {\n+                    creatingElmInVPre--;\n+                }\n+            } else if (isTrue(vnode.isComment)) {\n+                vnode.elm = nodeOps.createComment(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            } else {\n+                vnode.elm = nodeOps.createTextNode(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            }\n+        }\n+\n+        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i = vnode.data;\n+            if (isDef(i)) {\n+                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n+                if (isDef(i = i.hook) && isDef(i = i.init)) {\n+                    i(vnode, false \u002F* hydrating *\u002F);\n+                }\n+                \u002F\u002F after calling the init hook, if the vnode is a child component\n+                \u002F\u002F it should've created a child instance and mounted it. the child\n+                \u002F\u002F component also has set the placeholder vnode's elm.\n+                \u002F\u002F in that case we can just return the element and be done.\n+                if (isDef(vnode.componentInstance)) {\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    insert(parentElm, vnode.elm, refElm);\n+                    if (isTrue(isReactivated)) {\n+                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n+                    }\n+                    return true\n+                }\n+            }\n+        }\n+\n+        function initComponent (vnode, insertedVnodeQueue) {\n+            if (isDef(vnode.data.pendingInsert)) {\n+                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n+                vnode.data.pendingInsert = null;\n+            }\n+            vnode.elm = vnode.componentInstance.$el;\n+            if (isPatchable(vnode)) {\n+                invokeCreateHooks(vnode, insertedVnodeQueue);\n+                setScope(vnode);\n+            } else {\n+                \u002F\u002F empty component root.\n+                \u002F\u002F skip all element-related modules except for ref (#3455)\n+                registerRef(vnode);\n+                \u002F\u002F make sure to invoke the insert hook\n+                insertedVnodeQueue.push(vnode);\n+            }\n+        }\n+\n+        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i;\n+            \u002F\u002F hack for #4339: a reactivated component with inner transition\n+            \u002F\u002F does not trigger because the inner node's created hooks are not called\n+            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\n+            \u002F\u002F there doesn't seem to be a better way to do it.\n+            var innerNode = vnode;\n+            while (innerNode.componentInstance) {\n+                innerNode = innerNode.componentInstance._vnode;\n+                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n+                    for (i = 0; i \u003C cbs.activate.length; ++i) {\n+                        cbs.activate[i](emptyNode, innerNode);\n+                    }\n+                    insertedVnodeQueue.push(innerNode);\n+                    break\n+                }\n+            }\n+            \u002F\u002F unlike a newly created component,\n+            \u002F\u002F a reactivated keep-alive component doesn't insert itself\n+            insert(parentElm, vnode.elm, refElm);\n+        }\n+\n+        function insert (parent, elm, ref$$1) {\n+            if (isDef(parent)) {\n+                if (isDef(ref$$1)) {\n+                    if (nodeOps.parentNode(ref$$1) === parent) {\n+                        nodeOps.insertBefore(parent, elm, ref$$1);\n+                    }\n+                } else {\n+                    nodeOps.appendChild(parent, elm);\n+                }\n+            }\n+        }\n+\n+        function createChildren (vnode, children, insertedVnodeQueue) {\n+            if (Array.isArray(children)) {\n+                {\n+                    checkDuplicateKeys(children);\n+                }\n+                for (var i = 0; i \u003C children.length; ++i) {\n+                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n+                }\n+            } else if (isPrimitive(vnode.text)) {\n+                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n+            }\n+        }\n+\n+        function isPatchable (vnode) {\n+            while (vnode.componentInstance) {\n+                vnode = vnode.componentInstance._vnode;\n+            }\n+            return isDef(vnode.tag)\n+        }\n+\n+        function invokeCreateHooks (vnode, insertedVnodeQueue) {\n+            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                cbs.create[i$1](emptyNode, vnode);\n+            }\n+            i = vnode.data.hook; \u002F\u002F Reuse variable\n+            if (isDef(i)) {\n+                if (isDef(i.create)) { i.create(emptyNode, vnode); }\n+                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n+            }\n+        }\n+\n+        \u002F\u002F set scope id attribute for scoped CSS.\n+        \u002F\u002F this is implemented as a special case to avoid the overhead\n+        \u002F\u002F of going through the normal attribute patching process.\n+        function setScope (vnode) {\n+            var i;\n+            if (isDef(i = vnode.fnScopeId)) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            } else {\n+                var ancestor = vnode;\n+                while (ancestor) {\n+                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n+                        nodeOps.setStyleScope(vnode.elm, i);\n+                    }\n+                    ancestor = ancestor.parent;\n+                }\n+            }\n+            \u002F\u002F for slot content they should also get the scopeId from the host instance.\n+            if (isDef(i = activeInstance) &&\n+                i !== vnode.context &&\n+                i !== vnode.fnContext &&\n+                isDef(i = i.$options._scopeId)\n+            ) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            }\n+        }\n+\n+        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n+            }\n+        }\n+\n+        function invokeDestroyHook (vnode) {\n+            var i, j;\n+            var data = vnode.data;\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n+                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n+            }\n+            if (isDef(i = vnode.children)) {\n+                for (j = 0; j \u003C vnode.children.length; ++j) {\n+                    invokeDestroyHook(vnode.children[j]);\n+                }\n+            }\n+        }\n+\n+        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                var ch = vnodes[startIdx];\n+                if (isDef(ch)) {\n+                    if (isDef(ch.tag)) {\n+                        removeAndInvokeRemoveHook(ch);\n+                        invokeDestroyHook(ch);\n+                    } else { \u002F\u002F Text node\n+                        removeNode(ch.elm);\n+                    }\n+                }\n+            }\n+        }\n+\n+        function removeAndInvokeRemoveHook (vnode, rm) {\n+            if (isDef(rm) || isDef(vnode.data)) {\n+                var i;\n+                var listeners = cbs.remove.length + 1;\n+                if (isDef(rm)) {\n+                    \u002F\u002F we have a recursively passed down rm callback\n+                    \u002F\u002F increase the listeners count\n+                    rm.listeners += listeners;\n+                } else {\n+                    \u002F\u002F directly removing\n+                    rm = createRmCb(vnode.elm, listeners);\n+                }\n+                \u002F\u002F recursively invoke hooks on child component root node\n+                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n+                    removeAndInvokeRemoveHook(i, rm);\n+                }\n+                for (i = 0; i \u003C cbs.remove.length; ++i) {\n+                    cbs.remove[i](vnode, rm);\n+                }\n+                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n+                    i(vnode, rm);\n+                } else {\n+                    rm();\n+                }\n+            } else {\n+                removeNode(vnode.elm);\n+            }\n+        }\n+\n+        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n+            var oldStartIdx = 0;\n+            var newStartIdx = 0;\n+            var oldEndIdx = oldCh.length - 1;\n+            var oldStartVnode = oldCh[0];\n+            var oldEndVnode = oldCh[oldEndIdx];\n+            var newEndIdx = newCh.length - 1;\n+            var newStartVnode = newCh[0];\n+            var newEndVnode = newCh[newEndIdx];\n+            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n+\n+            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\n+            \u002F\u002F to ensure removed elements stay in correct relative positions\n+            \u002F\u002F during leaving transitions\n+            var canMove = !removeOnly;\n+\n+            {\n+                checkDuplicateKeys(newCh);\n+            }\n+\n+            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\n+                if (isUndef(oldStartVnode)) {\n+                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\n+                } else if (isUndef(oldEndVnode)) {\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                } else if (sameVnode(oldStartVnode, newStartVnode)) {\n+                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else if (sameVnode(oldEndVnode, newEndVnode)) {\n+                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\n+                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\n+                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else {\n+                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n+                    idxInOld = isDef(newStartVnode.key)\n+                        ? oldKeyToIdx[newStartVnode.key]\n+                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n+                    if (isUndef(idxInOld)) { \u002F\u002F New element\n+                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                    } else {\n+                        vnodeToMove = oldCh[idxInOld];\n+                        if (sameVnode(vnodeToMove, newStartVnode)) {\n+                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                            oldCh[idxInOld] = undefined;\n+                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n+                        } else {\n+                            \u002F\u002F same key but different element. treat as new element\n+                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                        }\n+                    }\n+                    newStartVnode = newCh[++newStartIdx];\n+                }\n+            }\n+            if (oldStartIdx > oldEndIdx) {\n+                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n+                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n+            } else if (newStartIdx > newEndIdx) {\n+                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n+            }\n+        }\n+\n+        function checkDuplicateKeys (children) {\n+            var seenKeys = {};\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var vnode = children[i];\n+                var key = vnode.key;\n+                if (isDef(key)) {\n+                    if (seenKeys[key]) {\n+                        warn(\n+                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n+                            vnode.context\n+                        );\n+                    } else {\n+                        seenKeys[key] = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        function findIdxInOld (node, oldCh, start, end) {\n+            for (var i = start; i \u003C end; i++) {\n+                var c = oldCh[i];\n+                if (isDef(c) && sameVnode(node, c)) { return i }\n+            }\n+        }\n+\n+        function patchVnode (\n+            oldVnode,\n+            vnode,\n+            insertedVnodeQueue,\n+            ownerArray,\n+            index,\n+            removeOnly\n+        ) {\n+            if (oldVnode === vnode) {\n+                return\n+            }\n+\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F clone reused vnode\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            var elm = vnode.elm = oldVnode.elm;\n+\n+            if (isTrue(oldVnode.isAsyncPlaceholder)) {\n+                if (isDef(vnode.asyncFactory.resolved)) {\n+                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n+                } else {\n+                    vnode.isAsyncPlaceholder = true;\n+                }\n+                return\n+            }\n+\n+            \u002F\u002F reuse element for static trees.\n+            \u002F\u002F note we only do this if the vnode is cloned -\n+            \u002F\u002F if the new node is not cloned it means the render functions have been\n+            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\n+            if (isTrue(vnode.isStatic) &&\n+                isTrue(oldVnode.isStatic) &&\n+                vnode.key === oldVnode.key &&\n+                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n+            ) {\n+                vnode.componentInstance = oldVnode.componentInstance;\n+                return\n+            }\n+\n+            var i;\n+            var data = vnode.data;\n+            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n+                i(oldVnode, vnode);\n+            }\n+\n+            var oldCh = oldVnode.children;\n+            var ch = vnode.children;\n+            if (isDef(data) && isPatchable(vnode)) {\n+                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n+                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n+            }\n+            if (isUndef(vnode.text)) {\n+                if (isDef(oldCh) && isDef(ch)) {\n+                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n+                } else if (isDef(ch)) {\n+                    {\n+                        checkDuplicateKeys(ch);\n+                    }\n+                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n+                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n+                } else if (isDef(oldCh)) {\n+                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n+                } else if (isDef(oldVnode.text)) {\n+                    nodeOps.setTextContent(elm, '');\n+                }\n+            } else if (oldVnode.text !== vnode.text) {\n+                nodeOps.setTextContent(elm, vnode.text);\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n+            }\n+        }\n+\n+        function invokeInsertHook (vnode, queue, initial) {\n+            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\n+            \u002F\u002F element is really inserted\n+            if (isTrue(initial) && isDef(vnode.parent)) {\n+                vnode.parent.data.pendingInsert = queue;\n+            } else {\n+                for (var i = 0; i \u003C queue.length; ++i) {\n+                    queue[i].data.hook.insert(queue[i]);\n+                }\n+            }\n+        }\n+\n+        var hydrationBailed = false;\n+        \u002F\u002F list of modules that can skip create hook during hydration because they\n+        \u002F\u002F are already rendered on the client or has no need for initialization\n+        \u002F\u002F Note: style is excluded because it relies on initial clone for future\n+        \u002F\u002F deep updates (#7063).\n+        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n+\n+        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\n+        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n+            var i;\n+            var tag = vnode.tag;\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            inVPre = inVPre || (data && data.pre);\n+            vnode.elm = elm;\n+\n+            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n+                vnode.isAsyncPlaceholder = true;\n+                return true\n+            }\n+            \u002F\u002F assert node match\n+            {\n+                if (!assertNodeMatch(elm, vnode, inVPre)) {\n+                    return false\n+                }\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\n+                if (isDef(i = vnode.componentInstance)) {\n+                    \u002F\u002F child component. it should have hydrated its own tree.\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    return true\n+                }\n+            }\n+            if (isDef(tag)) {\n+                if (isDef(children)) {\n+                    \u002F\u002F empty element, allow client to pick up and populate children\n+                    if (!elm.hasChildNodes()) {\n+                        createChildren(vnode, children, insertedVnodeQueue);\n+                    } else {\n+                        \u002F\u002F v-html and domProps: innerHTML\n+                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n+                            if (i !== elm.innerHTML) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('server innerHTML: ', i);\n+                                    console.warn('client innerHTML: ', elm.innerHTML);\n+                                }\n+                                return false\n+                            }\n+                        } else {\n+                            \u002F\u002F iterate and compare children lists\n+                            var childrenMatch = true;\n+                            var childNode = elm.firstChild;\n+                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\n+                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n+                                    childrenMatch = false;\n+                                    break\n+                                }\n+                                childNode = childNode.nextSibling;\n+                            }\n+                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\n+                            \u002F\u002F longer than the virtual children list.\n+                            if (!childrenMatch || childNode) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n+                                }\n+                                return false\n+                            }\n+                        }\n+                    }\n+                }\n+                if (isDef(data)) {\n+                    var fullInvoke = false;\n+                    for (var key in data) {\n+                        if (!isRenderedModule(key)) {\n+                            fullInvoke = true;\n+                            invokeCreateHooks(vnode, insertedVnodeQueue);\n+                            break\n+                        }\n+                    }\n+                    if (!fullInvoke && data['class']) {\n+                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\n+                        traverse(data['class']);\n+                    }\n+                }\n+            } else if (elm.data !== vnode.text) {\n+                elm.data = vnode.text;\n+            }\n+            return true\n+        }\n+\n+        function assertNodeMatch (node, vnode, inVPre) {\n+            if (isDef(vnode.tag)) {\n+                return vnode.tag.indexOf('vue-component') === 0 || (\n+                        !isUnknownElement$$1(vnode, inVPre) &&\n+                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n+                    )\n+            } else {\n+                return node.nodeType === (vnode.isComment ? 8 : 3)\n+            }\n+        }\n+\n+        return function patch (oldVnode, vnode, hydrating, removeOnly) {\n+            if (isUndef(vnode)) {\n+                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n+                return\n+            }\n+\n+            var isInitialPatch = false;\n+            var insertedVnodeQueue = [];\n+\n+            if (isUndef(oldVnode)) {\n+                \u002F\u002F empty mount (likely as component), create new root element\n+                isInitialPatch = true;\n+                createElm(vnode, insertedVnodeQueue);\n+            } else {\n+                var isRealElement = isDef(oldVnode.nodeType);\n+                if (!isRealElement && sameVnode(oldVnode, vnode)) {\n+                    \u002F\u002F patch existing root node\n+                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n+                } else {\n+                    if (isRealElement) {\n+                        \u002F\u002F mounting to a real element\n+                        \u002F\u002F check if this is server-rendered content and if we can perform\n+                        \u002F\u002F a successful hydration.\n+                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n+                            oldVnode.removeAttribute(SSR_ATTR);\n+                            hydrating = true;\n+                        }\n+                        if (isTrue(hydrating)) {\n+                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n+                                invokeInsertHook(vnode, insertedVnodeQueue, true);\n+                                return oldVnode\n+                            } else {\n+                                warn(\n+                                    'The client-side rendered virtual DOM tree is not matching ' +\n+                                    'server-rendered content. This is likely caused by incorrect ' +\n+                                    'HTML markup, for example nesting block-level elements inside ' +\n+                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\n+                                    'full client-side render.'\n+                                );\n+                            }\n+                        }\n+                        \u002F\u002F either not server-rendered, or hydration failed.\n+                        \u002F\u002F create an empty node and replace it\n+                        oldVnode = emptyNodeAt(oldVnode);\n+                    }\n+\n+                    \u002F\u002F replacing existing element\n+                    var oldElm = oldVnode.elm;\n+                    var parentElm = nodeOps.parentNode(oldElm);\n+\n+                    \u002F\u002F create new node\n+                    createElm(\n+                        vnode,\n+                        insertedVnodeQueue,\n+                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\n+                        \u002F\u002F leaving transition. Only happens when combining transition +\n+                        \u002F\u002F keep-alive + HOCs. (#4590)\n+                        oldElm._leaveCb ? null : parentElm,\n+                        nodeOps.nextSibling(oldElm)\n+                    );\n+\n+                    \u002F\u002F update parent placeholder node element, recursively\n+                    if (isDef(vnode.parent)) {\n+                        var ancestor = vnode.parent;\n+                        var patchable = isPatchable(vnode);\n+                        while (ancestor) {\n+                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\n+                                cbs.destroy[i](ancestor);\n+                            }\n+                            ancestor.elm = vnode.elm;\n+                            if (patchable) {\n+                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                                    cbs.create[i$1](emptyNode, ancestor);\n+                                }\n+                                \u002F\u002F #6513\n+                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\n+                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\n+                                var insert = ancestor.data.hook.insert;\n+                                if (insert.merged) {\n+                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\n+                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\n+                                        insert.fns[i$2]();\n+                                    }\n+                                }\n+                            } else {\n+                                registerRef(ancestor);\n+                            }\n+                            ancestor = ancestor.parent;\n+                        }\n+                    }\n+\n+                    \u002F\u002F destroy old node\n+                    if (isDef(parentElm)) {\n+                        removeVnodes(parentElm, [oldVnode], 0, 0);\n+                    } else if (isDef(oldVnode.tag)) {\n+                        invokeDestroyHook(oldVnode);\n+                    }\n+                }\n+            }\n+\n+            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n+            return vnode.elm\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var directives = {\n+        create: updateDirectives,\n+        update: updateDirectives,\n+        destroy: function unbindDirectives (vnode) {\n+            updateDirectives(vnode, emptyNode);\n+        }\n+    };\n+\n+    function updateDirectives (oldVnode, vnode) {\n+        if (oldVnode.data.directives || vnode.data.directives) {\n+            _update(oldVnode, vnode);\n+        }\n+    }\n+\n+    function _update (oldVnode, vnode) {\n+        var isCreate = oldVnode === emptyNode;\n+        var isDestroy = vnode === emptyNode;\n+        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n+        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n+\n+        var dirsWithInsert = [];\n+        var dirsWithPostpatch = [];\n+\n+        var key, oldDir, dir;\n+        for (key in newDirs) {\n+            oldDir = oldDirs[key];\n+            dir = newDirs[key];\n+            if (!oldDir) {\n+                \u002F\u002F new directive, bind\n+                callHook$1(dir, 'bind', vnode, oldVnode);\n+                if (dir.def && dir.def.inserted) {\n+                    dirsWithInsert.push(dir);\n+                }\n+            } else {\n+                \u002F\u002F existing directive, update\n+                dir.oldValue = oldDir.value;\n+                dir.oldArg = oldDir.arg;\n+                callHook$1(dir, 'update', vnode, oldVnode);\n+                if (dir.def && dir.def.componentUpdated) {\n+                    dirsWithPostpatch.push(dir);\n+                }\n+            }\n+        }\n+\n+        if (dirsWithInsert.length) {\n+            var callInsert = function () {\n+                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\n+                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n+                }\n+            };\n+            if (isCreate) {\n+                mergeVNodeHook(vnode, 'insert', callInsert);\n+            } else {\n+                callInsert();\n+            }\n+        }\n+\n+        if (dirsWithPostpatch.length) {\n+            mergeVNodeHook(vnode, 'postpatch', function () {\n+                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\n+                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n+                }\n+            });\n+        }\n+\n+        if (!isCreate) {\n+            for (key in oldDirs) {\n+                if (!newDirs[key]) {\n+                    \u002F\u002F no longer present, unbind\n+                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n+                }\n+            }\n+        }\n+    }\n+\n+    var emptyModifiers = Object.create(null);\n+\n+    function normalizeDirectives$1 (\n+        dirs,\n+        vm\n+    ) {\n+        var res = Object.create(null);\n+        if (!dirs) {\n+            \u002F\u002F $flow-disable-line\n+            return res\n+        }\n+        var i, dir;\n+        for (i = 0; i \u003C dirs.length; i++) {\n+            dir = dirs[i];\n+            if (!dir.modifiers) {\n+                \u002F\u002F $flow-disable-line\n+                dir.modifiers = emptyModifiers;\n+            }\n+            res[getRawDirName(dir)] = dir;\n+            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n+        }\n+        \u002F\u002F $flow-disable-line\n+        return res\n+    }\n+\n+    function getRawDirName (dir) {\n+        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n+    }\n+\n+    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n+        var fn = dir.def && dir.def[hook];\n+        if (fn) {\n+            try {\n+                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n+            } catch (e) {\n+                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n+            }\n+        }\n+    }\n+\n+    var baseModules = [\n+        ref,\n+        directives\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function updateAttrs (oldVnode, vnode) {\n+        var opts = vnode.componentOptions;\n+        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n+            return\n+        }\n+        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n+            return\n+        }\n+        var key, cur, old;\n+        var elm = vnode.elm;\n+        var oldAttrs = oldVnode.data.attrs || {};\n+        var attrs = vnode.data.attrs || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(attrs.__ob__)) {\n+            attrs = vnode.data.attrs = extend({}, attrs);\n+        }\n+\n+        for (key in attrs) {\n+            cur = attrs[key];\n+            old = oldAttrs[key];\n+            if (old !== cur) {\n+                setAttr(elm, key, cur);\n+            }\n+        }\n+        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\n+        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\n+      \u002F* istanbul ignore if *\u002F\n+        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n+            setAttr(elm, 'value', attrs.value);\n+        }\n+        for (key in oldAttrs) {\n+            if (isUndef(attrs[key])) {\n+                if (isXlink(key)) {\n+                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+                } else if (!isEnumeratedAttr(key)) {\n+                    elm.removeAttribute(key);\n+                }\n+            }\n+        }\n+    }\n+\n+    function setAttr (el, key, value) {\n+        if (el.tagName.indexOf('-') > -1) {\n+            baseSetAttr(el, key, value);\n+        } else if (isBooleanAttr(key)) {\n+            \u002F\u002F set attribute for blank value\n+            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttribute(key);\n+            } else {\n+                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\n+                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\n+                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n+                    ? 'true'\n+                    : key;\n+                el.setAttribute(key, value);\n+            }\n+        } else if (isEnumeratedAttr(key)) {\n+            el.setAttribute(key, convertEnumeratedValue(key, value));\n+        } else if (isXlink(key)) {\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+            } else {\n+                el.setAttributeNS(xlinkNS, key, value);\n+            }\n+        } else {\n+            baseSetAttr(el, key, value);\n+        }\n+    }\n+\n+    function baseSetAttr (el, key, value) {\n+        if (isFalsyAttrValue(value)) {\n+            el.removeAttribute(key);\n+        } else {\n+            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\n+            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\n+            \u002F\u002F immediately.\n+          \u002F* istanbul ignore if *\u002F\n+            if (\n+                isIE && !isIE9 &&\n+                el.tagName === 'TEXTAREA' &&\n+                key === 'placeholder' && value !== '' && !el.__ieph\n+            ) {\n+                var blocker = function (e) {\n+                    e.stopImmediatePropagation();\n+                    el.removeEventListener('input', blocker);\n+                };\n+                el.addEventListener('input', blocker);\n+                \u002F\u002F $flow-disable-line\n+                el.__ieph = true; \u002F* IE placeholder patched *\u002F\n+            }\n+            el.setAttribute(key, value);\n+        }\n+    }\n+\n+    var attrs = {\n+        create: updateAttrs,\n+        update: updateAttrs\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function updateClass (oldVnode, vnode) {\n+        var el = vnode.elm;\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+        if (\n+            isUndef(data.staticClass) &&\n+            isUndef(data.class) && (\n+                isUndef(oldData) || (\n+                    isUndef(oldData.staticClass) &&\n+                    isUndef(oldData.class)\n+                )\n+            )\n+        ) {\n+            return\n+        }\n+\n+        var cls = genClassForVnode(vnode);\n+\n+        \u002F\u002F handle transition classes\n+        var transitionClass = el._transitionClasses;\n+        if (isDef(transitionClass)) {\n+            cls = concat(cls, stringifyClass(transitionClass));\n+        }\n+\n+        \u002F\u002F set the class\n+        if (cls !== el._prevClass) {\n+            el.setAttribute('class', cls);\n+            el._prevClass = cls;\n+        }\n+    }\n+\n+    var klass = {\n+        create: updateClass,\n+        update: updateClass\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\n+\n+    function parseFilters (exp) {\n+        var inSingle = false;\n+        var inDouble = false;\n+        var inTemplateString = false;\n+        var inRegex = false;\n+        var curly = 0;\n+        var square = 0;\n+        var paren = 0;\n+        var lastFilterIndex = 0;\n+        var c, prev, i, expression, filters;\n+\n+        for (i = 0; i \u003C exp.length; i++) {\n+            prev = c;\n+            c = exp.charCodeAt(i);\n+            if (inSingle) {\n+                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n+            } else if (inDouble) {\n+                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n+            } else if (inTemplateString) {\n+                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n+            } else if (inRegex) {\n+                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n+            } else if (\n+                c === 0x7C && \u002F\u002F pipe\n+                exp.charCodeAt(i + 1) !== 0x7C &&\n+                exp.charCodeAt(i - 1) !== 0x7C &&\n+                !curly && !square && !paren\n+            ) {\n+                if (expression === undefined) {\n+                    \u002F\u002F first filter, end of expression\n+                    lastFilterIndex = i + 1;\n+                    expression = exp.slice(0, i).trim();\n+                } else {\n+                    pushFilter();\n+                }\n+            } else {\n+                switch (c) {\n+                    case 0x22: inDouble = true; break         \u002F\u002F \"\n+                    case 0x27: inSingle = true; break         \u002F\u002F '\n+                    case 0x60: inTemplateString = true; break \u002F\u002F `\n+                    case 0x28: paren++; break                 \u002F\u002F (\n+                    case 0x29: paren--; break                 \u002F\u002F )\n+                    case 0x5B: square++; break                \u002F\u002F [\n+                    case 0x5D: square--; break                \u002F\u002F ]\n+                    case 0x7B: curly++; break                 \u002F\u002F {\n+                    case 0x7D: curly--; break                 \u002F\u002F }\n+                }\n+                if (c === 0x2f) { \u002F\u002F \u002F\n+                    var j = i - 1;\n+                    var p = (void 0);\n+                    \u002F\u002F find first non-whitespace prev char\n+                    for (; j >= 0; j--) {\n+                        p = exp.charAt(j);\n+                        if (p !== ' ') { break }\n+                    }\n+                    if (!p || !validDivisionCharRE.test(p)) {\n+                        inRegex = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        if (expression === undefined) {\n+            expression = exp.slice(0, i).trim();\n+        } else if (lastFilterIndex !== 0) {\n+            pushFilter();\n+        }\n+\n+        function pushFilter () {\n+            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n+            lastFilterIndex = i + 1;\n+        }\n+\n+        if (filters) {\n+            for (i = 0; i \u003C filters.length; i++) {\n+                expression = wrapFilter(expression, filters[i]);\n+            }\n+        }\n+\n+        return expression\n+    }\n+\n+    function wrapFilter (exp, filter) {\n+        var i = filter.indexOf('(');\n+        if (i \u003C 0) {\n+            \u002F\u002F _f: resolveFilter\n+            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n+        } else {\n+            var name = filter.slice(0, i);\n+            var args = filter.slice(i + 1);\n+            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+    function baseWarn (msg, range) {\n+        console.error((\"[Vue compiler]: \" + msg));\n+    }\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    function pluckModuleFunction (\n+        modules,\n+        key\n+    ) {\n+        return modules\n+            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n+            : []\n+    }\n+\n+    function addProp (el, name, value, range, dynamic) {\n+        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    function addAttr (el, name, value, range, dynamic) {\n+        var attrs = dynamic\n+            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n+            : (el.attrs || (el.attrs = []));\n+        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    \u002F\u002F add a raw attr (use this in preTransforms)\n+    function addRawAttr (el, name, value, range) {\n+        el.attrsMap[name] = value;\n+        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n+    }\n+\n+    function addDirective (\n+        el,\n+        name,\n+        rawName,\n+        value,\n+        arg,\n+        isDynamicArg,\n+        modifiers,\n+        range\n+    ) {\n+        (el.directives || (el.directives = [])).push(rangeSetItem({\n+            name: name,\n+            rawName: rawName,\n+            value: value,\n+            arg: arg,\n+            isDynamicArg: isDynamicArg,\n+            modifiers: modifiers\n+        }, range));\n+        el.plain = false;\n+    }\n+\n+    function prependModifierMarker (symbol, name, dynamic) {\n+        return dynamic\n+            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n+            : symbol + name \u002F\u002F mark the event as captured\n+    }\n+\n+    function addHandler (\n+        el,\n+        name,\n+        value,\n+        modifiers,\n+        important,\n+        warn,\n+        range,\n+        dynamic\n+    ) {\n+        modifiers = modifiers || emptyObject;\n+        \u002F\u002F warn prevent and passive modifier\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            warn &&\n+            modifiers.prevent && modifiers.passive\n+        ) {\n+            warn(\n+                'passive and prevent can\\'t be used together. ' +\n+                'Passive handler can\\'t prevent default event.',\n+                range\n+            );\n+        }\n+\n+        \u002F\u002F normalize click.right and click.middle since they don't actually fire\n+        \u002F\u002F this is technically browser-specific, but at least for now browsers are\n+        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\n+        if (modifiers.right) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'contextmenu';\n+                delete modifiers.right;\n+            }\n+        } else if (modifiers.middle) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'mouseup';\n+            }\n+        }\n+\n+        \u002F\u002F check capture modifier\n+        if (modifiers.capture) {\n+            delete modifiers.capture;\n+            name = prependModifierMarker('!', name, dynamic);\n+        }\n+        if (modifiers.once) {\n+            delete modifiers.once;\n+            name = prependModifierMarker('~', name, dynamic);\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (modifiers.passive) {\n+            delete modifiers.passive;\n+            name = prependModifierMarker('&', name, dynamic);\n+        }\n+\n+        var events;\n+        if (modifiers.native) {\n+            delete modifiers.native;\n+            events = el.nativeEvents || (el.nativeEvents = {});\n+        } else {\n+            events = el.events || (el.events = {});\n+        }\n+\n+        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n+        if (modifiers !== emptyObject) {\n+            newHandler.modifiers = modifiers;\n+        }\n+\n+        var handlers = events[name];\n+      \u002F* istanbul ignore if *\u002F\n+        if (Array.isArray(handlers)) {\n+            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n+        } else if (handlers) {\n+            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n+        } else {\n+            events[name] = newHandler;\n+        }\n+\n+        el.plain = false;\n+    }\n+\n+    function getRawBindingAttr (\n+        el,\n+        name\n+    ) {\n+        return el.rawAttrsMap[':' + name] ||\n+            el.rawAttrsMap['v-bind:' + name] ||\n+            el.rawAttrsMap[name]\n+    }\n+\n+    function getBindingAttr (\n+        el,\n+        name,\n+        getStatic\n+    ) {\n+        var dynamicValue =\n+            getAndRemoveAttr(el, ':' + name) ||\n+            getAndRemoveAttr(el, 'v-bind:' + name);\n+        if (dynamicValue != null) {\n+            return parseFilters(dynamicValue)\n+        } else if (getStatic !== false) {\n+            var staticValue = getAndRemoveAttr(el, name);\n+            if (staticValue != null) {\n+                return JSON.stringify(staticValue)\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\n+    \u002F\u002F doesn't get processed by processAttrs.\n+    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\n+    \u002F\u002F needed during codegen.\n+    function getAndRemoveAttr (\n+        el,\n+        name,\n+        removeFromMap\n+    ) {\n+        var val;\n+        if ((val = el.attrsMap[name]) != null) {\n+            var list = el.attrsList;\n+            for (var i = 0, l = list.length; i \u003C l; i++) {\n+                if (list[i].name === name) {\n+                    list.splice(i, 1);\n+                    break\n+                }\n+            }\n+        }\n+        if (removeFromMap) {\n+            delete el.attrsMap[name];\n+        }\n+        return val\n+    }\n+\n+    function getAndRemoveAttrByRegex (\n+        el,\n+        name\n+    ) {\n+        var list = el.attrsList;\n+        for (var i = 0, l = list.length; i \u003C l; i++) {\n+            var attr = list[i];\n+            if (name.test(attr.name)) {\n+                list.splice(i, 1);\n+                return attr\n+            }\n+        }\n+    }\n+\n+    function rangeSetItem (\n+        item,\n+        range\n+    ) {\n+        if (range) {\n+            if (range.start != null) {\n+                item.start = range.start;\n+            }\n+            if (range.end != null) {\n+                item.end = range.end;\n+            }\n+        }\n+        return item\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Cross-platform code generation for component v-model\n+     *\u002F\n+    function genComponentModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var ref = modifiers || {};\n+        var number = ref.number;\n+        var trim = ref.trim;\n+\n+        var baseValueExpression = '$$v';\n+        var valueExpression = baseValueExpression;\n+        if (trim) {\n+            valueExpression =\n+                \"(typeof \" + baseValueExpression + \" === 'string'\" +\n+                \"? \" + baseValueExpression + \".trim()\" +\n+                \": \" + baseValueExpression + \")\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+        var assignment = genAssignmentCode(value, valueExpression);\n+\n+        el.model = {\n+            value: (\"(\" + value + \")\"),\n+            expression: JSON.stringify(value),\n+            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n+        };\n+    }\n+\n+    \u002F**\n+     * Cross-platform codegen helper for generating v-model value assignment code.\n+     *\u002F\n+    function genAssignmentCode (\n+        value,\n+        assignment\n+    ) {\n+        var res = parseModel(value);\n+        if (res.key === null) {\n+            return (value + \"=\" + assignment)\n+        } else {\n+            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n+        }\n+    }\n+\n+    \u002F**\n+     * Parse a v-model expression into a base path and a final key segment.\n+     * Handles both dot-path and possible square brackets.\n+     *\n+     * Possible cases:\n+     *\n+     * - test\n+     * - test[key]\n+     * - test[test1[key]]\n+     * - test[\"a\"][key]\n+     * - xxx.test[a[a].test1[key]]\n+     * - test.xxx.a[\"asa\"][test1[key]]\n+     *\n+     *\u002F\n+\n+    var len, str, chr, index$1, expressionPos, expressionEndPos;\n+\n+\n+\n+    function parseModel (val) {\n+        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\n+        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\n+        val = val.trim();\n+        len = val.length;\n+\n+        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\n+            index$1 = val.lastIndexOf('.');\n+            if (index$1 > -1) {\n+                return {\n+                    exp: val.slice(0, index$1),\n+                    key: '\"' + val.slice(index$1 + 1) + '\"'\n+                }\n+            } else {\n+                return {\n+                    exp: val,\n+                    key: null\n+                }\n+            }\n+        }\n+\n+        str = val;\n+        index$1 = expressionPos = expressionEndPos = 0;\n+\n+        while (!eof()) {\n+            chr = next();\n+          \u002F* istanbul ignore if *\u002F\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+            } else if (chr === 0x5B) {\n+                parseBracket(chr);\n+            }\n+        }\n+\n+        return {\n+            exp: val.slice(0, expressionPos),\n+            key: val.slice(expressionPos + 1, expressionEndPos)\n+        }\n+    }\n+\n+    function next () {\n+        return str.charCodeAt(++index$1)\n+    }\n+\n+    function eof () {\n+        return index$1 >= len\n+    }\n+\n+    function isStringStart (chr) {\n+        return chr === 0x22 || chr === 0x27\n+    }\n+\n+    function parseBracket (chr) {\n+        var inBracket = 1;\n+        expressionPos = index$1;\n+        while (!eof()) {\n+            chr = next();\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+                continue\n+            }\n+            if (chr === 0x5B) { inBracket++; }\n+            if (chr === 0x5D) { inBracket--; }\n+            if (inBracket === 0) {\n+                expressionEndPos = index$1;\n+                break\n+            }\n+        }\n+    }\n+\n+    function parseString (chr) {\n+        var stringQuote = chr;\n+        while (!eof()) {\n+            chr = next();\n+            if (chr === stringQuote) {\n+                break\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn$1;\n+\n+    \u002F\u002F in some cases, the event used has to be determined at runtime\n+    \u002F\u002F so we used some reserved tokens during compile.\n+    var RANGE_TOKEN = '__r';\n+    var CHECKBOX_RADIO_TOKEN = '__c';\n+\n+    function model (\n+        el,\n+        dir,\n+        _warn\n+    ) {\n+        warn$1 = _warn;\n+        var value = dir.value;\n+        var modifiers = dir.modifiers;\n+        var tag = el.tag;\n+        var type = el.attrsMap.type;\n+\n+        {\n+            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\n+            \u002F\u002F value will throw an error.\n+            if (tag === 'input' && type === 'file') {\n+                warn$1(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n+                    \"File inputs are read only. Use a v-on:change listener instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+        }\n+\n+        if (el.component) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else if (tag === 'select') {\n+            genSelect(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'checkbox') {\n+            genCheckboxModel(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'radio') {\n+            genRadioModel(el, value, modifiers);\n+        } else if (tag === 'input' || tag === 'textarea') {\n+            genDefaultModel(el, value, modifiers);\n+        } else if (!config.isReservedTag(tag)) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else {\n+            warn$1(\n+                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                \"v-model is not supported on this element type. \" +\n+                'If you are working with contenteditable, it\\'s recommended to ' +\n+                'wrap a library dedicated for that purpose inside a custom component.',\n+                el.rawAttrsMap['v-model']\n+            );\n+        }\n+\n+        \u002F\u002F ensure runtime directive metadata\n+        return true\n+    }\n+\n+    function genCheckboxModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n+        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n+        addProp(el, 'checked',\n+            \"Array.isArray(\" + value + \")\" +\n+            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n+                trueValueBinding === 'true'\n+                    ? (\":(\" + value + \")\")\n+                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n+            )\n+        );\n+        addHandler(el, 'change',\n+            \"var $$a=\" + value + \",\" +\n+            '$$el=$event.target,' +\n+            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n+            'if(Array.isArray($$a)){' +\n+            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n+            '$$i=_i($$a,$$v);' +\n+            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n+            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n+            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n+            null, true\n+        );\n+    }\n+\n+    function genRadioModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n+        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n+        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n+    }\n+\n+    function genSelect (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var selectedVal = \"Array.prototype.filter\" +\n+            \".call($event.target.options,function(o){return o.selected})\" +\n+            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n+            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n+\n+        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n+        var code = \"var $$selectedVal = \" + selectedVal + \";\";\n+        code = code + \" \" + (genAssignmentCode(value, assignment));\n+        addHandler(el, 'change', code, null, true);\n+    }\n+\n+    function genDefaultModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var type = el.attrsMap.type;\n+\n+        \u002F\u002F warn if v-bind:value conflicts with v-model\n+        \u002F\u002F except for inputs with v-bind:type\n+        {\n+            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n+            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n+            if (value$1 && !typeBinding) {\n+                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n+                warn$1(\n+                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n+                    'because the latter already expands to a value binding internally',\n+                    el.rawAttrsMap[binding]\n+                );\n+            }\n+        }\n+\n+        var ref = modifiers || {};\n+        var lazy = ref.lazy;\n+        var number = ref.number;\n+        var trim = ref.trim;\n+        var needCompositionGuard = !lazy && type !== 'range';\n+        var event = lazy\n+            ? 'change'\n+            : type === 'range'\n+                ? RANGE_TOKEN\n+                : 'input';\n+\n+        var valueExpression = '$event.target.value';\n+        if (trim) {\n+            valueExpression = \"$event.target.value.trim()\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+\n+        var code = genAssignmentCode(value, valueExpression);\n+        if (needCompositionGuard) {\n+            code = \"if($event.target.composing)return;\" + code;\n+        }\n+\n+        addProp(el, 'value', (\"(\" + value + \")\"));\n+        addHandler(el, event, code, null, true);\n+        if (trim || number) {\n+            addHandler(el, 'blur', '$forceUpdate()');\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\n+    \u002F\u002F it's important to place the event as the first in the array because\n+    \u002F\u002F the whole point is ensuring the v-model callback gets called before\n+    \u002F\u002F user-attached handlers.\n+    function normalizeEvents (on) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[RANGE_TOKEN])) {\n+            \u002F\u002F IE input[type=range] only supports `change` event\n+            var event = isIE ? 'change' : 'input';\n+            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n+            delete on[RANGE_TOKEN];\n+        }\n+        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\n+        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n+            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n+            delete on[CHECKBOX_RADIO_TOKEN];\n+        }\n+    }\n+\n+    var target$1;\n+\n+    function createOnceHandler$1 (event, handler, capture) {\n+        var _target = target$1; \u002F\u002F save current target element in closure\n+        return function onceHandler () {\n+            var res = handler.apply(null, arguments);\n+            if (res !== null) {\n+                remove$2(event, onceHandler, capture, _target);\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n+    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\n+    \u002F\u002F safe to exclude.\n+    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\n+\n+    function add$1 (\n+        name,\n+        handler,\n+        capture,\n+        passive\n+    ) {\n+        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\n+        \u002F\u002F attached to outer element during patch, and triggered again. This\n+        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\n+        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\n+        \u002F\u002F and the handler would only fire if the event passed to it was fired\n+        \u002F\u002F AFTER it was attached.\n+        if (useMicrotaskFix) {\n+            var attachedTimestamp = currentFlushTimestamp;\n+            var original = handler;\n+            handler = original._wrapper = function (e) {\n+                if (\n+                    \u002F\u002F no bubbling, should always fire.\n+                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\n+                \u002F\u002F certain weird environments...\n+                e.target === e.currentTarget ||\n+                \u002F\u002F event is fired after handler attachment\n+                e.timeStamp >= attachedTimestamp ||\n+                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\n+                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n+                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\n+                e.timeStamp \u003C= 0 ||\n+                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\n+                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\n+                \u002F\u002F starting reference\n+                e.target.ownerDocument !== document\n+                ) {\n+                    return original.apply(this, arguments)\n+                }\n+            };\n+        }\n+        target$1.addEventListener(\n+            name,\n+            handler,\n+            supportsPassive\n+                ? { capture: capture, passive: passive }\n+                : capture\n+        );\n+    }\n+\n+    function remove$2 (\n+        name,\n+        handler,\n+        capture,\n+        _target\n+    ) {\n+        (_target || target$1).removeEventListener(\n+            name,\n+            handler._wrapper || handler,\n+            capture\n+        );\n+    }\n+\n+    function updateDOMListeners (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n+            return\n+        }\n+        var on = vnode.data.on || {};\n+        var oldOn = oldVnode.data.on || {};\n+        target$1 = vnode.elm;\n+        normalizeEvents(on);\n+        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n+        target$1 = undefined;\n+    }\n+\n+    var events = {\n+        create: updateDOMListeners,\n+        update: updateDOMListeners\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var svgContainer;\n+\n+    function updateDOMProps (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n+            return\n+        }\n+        var key, cur;\n+        var elm = vnode.elm;\n+        var oldProps = oldVnode.data.domProps || {};\n+        var props = vnode.data.domProps || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(props.__ob__)) {\n+            props = vnode.data.domProps = extend({}, props);\n+        }\n+\n+        for (key in oldProps) {\n+            if (!(key in props)) {\n+                elm[key] = '';\n+            }\n+        }\n+\n+        for (key in props) {\n+            cur = props[key];\n+            \u002F\u002F ignore children if the node has textContent or innerHTML,\n+            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\n+            \u002F\u002F on subsequent patches (#3360)\n+            if (key === 'textContent' || key === 'innerHTML') {\n+                if (vnode.children) { vnode.children.length = 0; }\n+                if (cur === oldProps[key]) { continue }\n+                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\n+                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\n+                if (elm.childNodes.length === 1) {\n+                    elm.removeChild(elm.childNodes[0]);\n+                }\n+            }\n+\n+            if (key === 'value' && elm.tagName !== 'PROGRESS') {\n+                \u002F\u002F store value as _value as well since\n+                \u002F\u002F non-string values will be stringified\n+                elm._value = cur;\n+                \u002F\u002F avoid resetting cursor position when value is the same\n+                var strCur = isUndef(cur) ? '' : String(cur);\n+                if (shouldUpdateValue(elm, strCur)) {\n+                    elm.value = strCur;\n+                }\n+            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n+                \u002F\u002F IE doesn't support innerHTML for SVG elements\n+                svgContainer = svgContainer || document.createElement('div');\n+                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\n+                var svg = svgContainer.firstChild;\n+                while (elm.firstChild) {\n+                    elm.removeChild(elm.firstChild);\n+                }\n+                while (svg.firstChild) {\n+                    elm.appendChild(svg.firstChild);\n+                }\n+            } else if (\n+                \u002F\u002F skip the update if old and new VDOM state is the same.\n+            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\n+            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\n+            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\n+            cur !== oldProps[key]\n+            ) {\n+                \u002F\u002F some property updates can throw\n+                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\n+                try {\n+                    elm[key] = cur;\n+                } catch (e) {}\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\n+\n+\n+    function shouldUpdateValue (elm, checkVal) {\n+        return (!elm.composing && (\n+            elm.tagName === 'OPTION' ||\n+            isNotInFocusAndDirty(elm, checkVal) ||\n+            isDirtyWithModifiers(elm, checkVal)\n+        ))\n+    }\n+\n+    function isNotInFocusAndDirty (elm, checkVal) {\n+        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\n+        \u002F\u002F not equal to the updated value\n+        var notInFocus = true;\n+        \u002F\u002F #6157\n+        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\n+        try { notInFocus = document.activeElement !== elm; } catch (e) {}\n+        return notInFocus && elm.value !== checkVal\n+    }\n+\n+    function isDirtyWithModifiers (elm, newVal) {\n+        var value = elm.value;\n+        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\n+        if (isDef(modifiers)) {\n+            if (modifiers.number) {\n+                return toNumber(value) !== toNumber(newVal)\n+            }\n+            if (modifiers.trim) {\n+                return value.trim() !== newVal.trim()\n+            }\n+        }\n+        return value !== newVal\n+    }\n+\n+    var domProps = {\n+        create: updateDOMProps,\n+        update: updateDOMProps\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var parseStyleText = cached(function (cssText) {\n+        var res = {};\n+        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\n+        var propertyDelimiter = \u002F:(.+)\u002F;\n+        cssText.split(listDelimiter).forEach(function (item) {\n+            if (item) {\n+                var tmp = item.split(propertyDelimiter);\n+                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n+            }\n+        });\n+        return res\n+    });\n+\n+    \u002F\u002F merge static and dynamic style data on the same vnode\n+    function normalizeStyleData (data) {\n+        var style = normalizeStyleBinding(data.style);\n+        \u002F\u002F static style is pre-processed into an object during compilation\n+        \u002F\u002F and is always a fresh object, so it's safe to merge into it\n+        return data.staticStyle\n+            ? extend(data.staticStyle, style)\n+            : style\n+    }\n+\n+    \u002F\u002F normalize possible array \u002F string values into Object\n+    function normalizeStyleBinding (bindingStyle) {\n+        if (Array.isArray(bindingStyle)) {\n+            return toObject(bindingStyle)\n+        }\n+        if (typeof bindingStyle === 'string') {\n+            return parseStyleText(bindingStyle)\n+        }\n+        return bindingStyle\n+    }\n+\n+    \u002F**\n+     * parent component style should be after child's\n+     * so that parent component's style could override it\n+     *\u002F\n+    function getStyle (vnode, checkChild) {\n+        var res = {};\n+        var styleData;\n+\n+        if (checkChild) {\n+            var childNode = vnode;\n+            while (childNode.componentInstance) {\n+                childNode = childNode.componentInstance._vnode;\n+                if (\n+                    childNode && childNode.data &&\n+                    (styleData = normalizeStyleData(childNode.data))\n+                ) {\n+                    extend(res, styleData);\n+                }\n+            }\n+        }\n+\n+        if ((styleData = normalizeStyleData(vnode.data))) {\n+            extend(res, styleData);\n+        }\n+\n+        var parentNode = vnode;\n+        while ((parentNode = parentNode.parent)) {\n+            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n+                extend(res, styleData);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var cssVarRE = \u002F^--\u002F;\n+    var importantRE = \u002F\\s*!important$\u002F;\n+    var setProp = function (el, name, val) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (cssVarRE.test(name)) {\n+            el.style.setProperty(name, val);\n+        } else if (importantRE.test(val)) {\n+            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n+        } else {\n+            var normalizedName = normalize(name);\n+            if (Array.isArray(val)) {\n+                \u002F\u002F Support values array created by autoprefixer, e.g.\n+                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n+                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\n+                for (var i = 0, len = val.length; i \u003C len; i++) {\n+                    el.style[normalizedName] = val[i];\n+                }\n+            } else {\n+                el.style[normalizedName] = val;\n+            }\n+        }\n+    };\n+\n+    var vendorNames = ['Webkit', 'Moz', 'ms'];\n+\n+    var emptyStyle;\n+    var normalize = cached(function (prop) {\n+        emptyStyle = emptyStyle || document.createElement('div').style;\n+        prop = camelize(prop);\n+        if (prop !== 'filter' && (prop in emptyStyle)) {\n+            return prop\n+        }\n+        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n+        for (var i = 0; i \u003C vendorNames.length; i++) {\n+            var name = vendorNames[i] + capName;\n+            if (name in emptyStyle) {\n+                return name\n+            }\n+        }\n+    });\n+\n+    function updateStyle (oldVnode, vnode) {\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+\n+        if (isUndef(data.staticStyle) && isUndef(data.style) &&\n+            isUndef(oldData.staticStyle) && isUndef(oldData.style)\n+        ) {\n+            return\n+        }\n+\n+        var cur, name;\n+        var el = vnode.elm;\n+        var oldStaticStyle = oldData.staticStyle;\n+        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n+\n+        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\n+        var oldStyle = oldStaticStyle || oldStyleBinding;\n+\n+        var style = normalizeStyleBinding(vnode.data.style) || {};\n+\n+        \u002F\u002F store normalized style under a different key for next diff\n+        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\n+        \u002F\u002F to mutate it.\n+        vnode.data.normalizedStyle = isDef(style.__ob__)\n+            ? extend({}, style)\n+            : style;\n+\n+        var newStyle = getStyle(vnode, true);\n+\n+        for (name in oldStyle) {\n+            if (isUndef(newStyle[name])) {\n+                setProp(el, name, '');\n+            }\n+        }\n+        for (name in newStyle) {\n+            cur = newStyle[name];\n+            if (cur !== oldStyle[name]) {\n+                \u002F\u002F ie9 setting to null has no effect, must use empty string\n+                setProp(el, name, cur == null ? '' : cur);\n+            }\n+        }\n+    }\n+\n+    var style = {\n+        create: updateStyle,\n+        update: updateStyle\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var whitespaceRE = \u002F\\s+\u002F;\n+\n+    \u002F**\n+     * Add class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function addClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n+            } else {\n+                el.classList.add(cls);\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\n+                el.setAttribute('class', (cur + cls).trim());\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Remove class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function removeClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n+            } else {\n+                el.classList.remove(cls);\n+            }\n+            if (!el.classList.length) {\n+                el.removeAttribute('class');\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            var tar = ' ' + cls + ' ';\n+            while (cur.indexOf(tar) >= 0) {\n+                cur = cur.replace(tar, ' ');\n+            }\n+            cur = cur.trim();\n+            if (cur) {\n+                el.setAttribute('class', cur);\n+            } else {\n+                el.removeAttribute('class');\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveTransition (def$$1) {\n+        if (!def$$1) {\n+            return\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if (typeof def$$1 === 'object') {\n+            var res = {};\n+            if (def$$1.css !== false) {\n+                extend(res, autoCssTransition(def$$1.name || 'v'));\n+            }\n+            extend(res, def$$1);\n+            return res\n+        } else if (typeof def$$1 === 'string') {\n+            return autoCssTransition(def$$1)\n+        }\n+    }\n+\n+    var autoCssTransition = cached(function (name) {\n+        return {\n+            enterClass: (name + \"-enter\"),\n+            enterToClass: (name + \"-enter-to\"),\n+            enterActiveClass: (name + \"-enter-active\"),\n+            leaveClass: (name + \"-leave\"),\n+            leaveToClass: (name + \"-leave-to\"),\n+            leaveActiveClass: (name + \"-leave-active\")\n+        }\n+    });\n+\n+    var hasTransition = inBrowser && !isIE9;\n+    var TRANSITION = 'transition';\n+    var ANIMATION = 'animation';\n+\n+    \u002F\u002F Transition property\u002Fevent sniffing\n+    var transitionProp = 'transition';\n+    var transitionEndEvent = 'transitionend';\n+    var animationProp = 'animation';\n+    var animationEndEvent = 'animationend';\n+    if (hasTransition) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (window.ontransitionend === undefined &&\n+            window.onwebkittransitionend !== undefined\n+        ) {\n+            transitionProp = 'WebkitTransition';\n+            transitionEndEvent = 'webkitTransitionEnd';\n+        }\n+        if (window.onanimationend === undefined &&\n+            window.onwebkitanimationend !== undefined\n+        ) {\n+            animationProp = 'WebkitAnimation';\n+            animationEndEvent = 'webkitAnimationEnd';\n+        }\n+    }\n+\n+    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\n+    var raf = inBrowser\n+        ? window.requestAnimationFrame\n+            ? window.requestAnimationFrame.bind(window)\n+            : setTimeout\n+        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\n+\n+    function nextFrame (fn) {\n+        raf(function () {\n+            raf(fn);\n+        });\n+    }\n+\n+    function addTransitionClass (el, cls) {\n+        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n+        if (transitionClasses.indexOf(cls) \u003C 0) {\n+            transitionClasses.push(cls);\n+            addClass(el, cls);\n+        }\n+    }\n+\n+    function removeTransitionClass (el, cls) {\n+        if (el._transitionClasses) {\n+            remove(el._transitionClasses, cls);\n+        }\n+        removeClass(el, cls);\n+    }\n+\n+    function whenTransitionEnds (\n+        el,\n+        expectedType,\n+        cb\n+    ) {\n+        var ref = getTransitionInfo(el, expectedType);\n+        var type = ref.type;\n+        var timeout = ref.timeout;\n+        var propCount = ref.propCount;\n+        if (!type) { return cb() }\n+        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n+        var ended = 0;\n+        var end = function () {\n+            el.removeEventListener(event, onEnd);\n+            cb();\n+        };\n+        var onEnd = function (e) {\n+            if (e.target === el) {\n+                if (++ended >= propCount) {\n+                    end();\n+                }\n+            }\n+        };\n+        setTimeout(function () {\n+            if (ended \u003C propCount) {\n+                end();\n+            }\n+        }, timeout + 1);\n+        el.addEventListener(event, onEnd);\n+    }\n+\n+    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\n+\n+    function getTransitionInfo (el, expectedType) {\n+        var styles = window.getComputedStyle(el);\n+        \u002F\u002F JSDOM may return undefined for transition properties\n+        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n+        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n+        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n+        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n+        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n+        var animationTimeout = getTimeout(animationDelays, animationDurations);\n+\n+        var type;\n+        var timeout = 0;\n+        var propCount = 0;\n+      \u002F* istanbul ignore if *\u002F\n+        if (expectedType === TRANSITION) {\n+            if (transitionTimeout > 0) {\n+                type = TRANSITION;\n+                timeout = transitionTimeout;\n+                propCount = transitionDurations.length;\n+            }\n+        } else if (expectedType === ANIMATION) {\n+            if (animationTimeout > 0) {\n+                type = ANIMATION;\n+                timeout = animationTimeout;\n+                propCount = animationDurations.length;\n+            }\n+        } else {\n+            timeout = Math.max(transitionTimeout, animationTimeout);\n+            type = timeout > 0\n+                ? transitionTimeout > animationTimeout\n+                    ? TRANSITION\n+                    : ANIMATION\n+                : null;\n+            propCount = type\n+                ? type === TRANSITION\n+                    ? transitionDurations.length\n+                    : animationDurations.length\n+                : 0;\n+        }\n+        var hasTransform =\n+            type === TRANSITION &&\n+            transformRE.test(styles[transitionProp + 'Property']);\n+        return {\n+            type: type,\n+            timeout: timeout,\n+            propCount: propCount,\n+            hasTransform: hasTransform\n+        }\n+    }\n+\n+    function getTimeout (delays, durations) {\n+      \u002F* istanbul ignore next *\u002F\n+        while (delays.length \u003C durations.length) {\n+            delays = delays.concat(delays);\n+        }\n+\n+        return Math.max.apply(null, durations.map(function (d, i) {\n+            return toMs(d) + toMs(delays[i])\n+        }))\n+    }\n+\n+    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n+    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\n+    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n+    \u002F\u002F as a floor function) causing unexpected behaviors\n+    function toMs (s) {\n+        return Number(s.slice(0, -1).replace(',', '.')) * 1000\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function enter (vnode, toggleDisplay) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call leave callback now\n+        if (isDef(el._leaveCb)) {\n+            el._leaveCb.cancelled = true;\n+            el._leaveCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data)) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._enterCb) || el.nodeType !== 1) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var enterClass = data.enterClass;\n+        var enterToClass = data.enterToClass;\n+        var enterActiveClass = data.enterActiveClass;\n+        var appearClass = data.appearClass;\n+        var appearToClass = data.appearToClass;\n+        var appearActiveClass = data.appearActiveClass;\n+        var beforeEnter = data.beforeEnter;\n+        var enter = data.enter;\n+        var afterEnter = data.afterEnter;\n+        var enterCancelled = data.enterCancelled;\n+        var beforeAppear = data.beforeAppear;\n+        var appear = data.appear;\n+        var afterAppear = data.afterAppear;\n+        var appearCancelled = data.appearCancelled;\n+        var duration = data.duration;\n+\n+        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\n+        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\n+        \u002F\u002F as the root node of a child component. In that case we need to check\n+        \u002F\u002F \u003Ctransition>'s parent for appear check.\n+        var context = activeInstance;\n+        var transitionNode = activeInstance.$vnode;\n+        while (transitionNode && transitionNode.parent) {\n+            context = transitionNode.context;\n+            transitionNode = transitionNode.parent;\n+        }\n+\n+        var isAppear = !context._isMounted || !vnode.isRootInsert;\n+\n+        if (isAppear && !appear && appear !== '') {\n+            return\n+        }\n+\n+        var startClass = isAppear && appearClass\n+            ? appearClass\n+            : enterClass;\n+        var activeClass = isAppear && appearActiveClass\n+            ? appearActiveClass\n+            : enterActiveClass;\n+        var toClass = isAppear && appearToClass\n+            ? appearToClass\n+            : enterToClass;\n+\n+        var beforeEnterHook = isAppear\n+            ? (beforeAppear || beforeEnter)\n+            : beforeEnter;\n+        var enterHook = isAppear\n+            ? (typeof appear === 'function' ? appear : enter)\n+            : enter;\n+        var afterEnterHook = isAppear\n+            ? (afterAppear || afterEnter)\n+            : afterEnter;\n+        var enterCancelledHook = isAppear\n+            ? (appearCancelled || enterCancelled)\n+            : enterCancelled;\n+\n+        var explicitEnterDuration = toNumber(\n+            isObject(duration)\n+                ? duration.enter\n+                : duration\n+        );\n+\n+        if (explicitEnterDuration != null) {\n+            checkDuration(explicitEnterDuration, 'enter', vnode);\n+        }\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(enterHook);\n+\n+        var cb = el._enterCb = once(function () {\n+            if (expectsCSS) {\n+                removeTransitionClass(el, toClass);\n+                removeTransitionClass(el, activeClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, startClass);\n+                }\n+                enterCancelledHook && enterCancelledHook(el);\n+            } else {\n+                afterEnterHook && afterEnterHook(el);\n+            }\n+            el._enterCb = null;\n+        });\n+\n+        if (!vnode.data.show) {\n+            \u002F\u002F remove pending leave element on enter by injecting an insert hook\n+            mergeVNodeHook(vnode, 'insert', function () {\n+                var parent = el.parentNode;\n+                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n+                if (pendingNode &&\n+                    pendingNode.tag === vnode.tag &&\n+                    pendingNode.elm._leaveCb\n+                ) {\n+                    pendingNode.elm._leaveCb();\n+                }\n+                enterHook && enterHook(el, cb);\n+            });\n+        }\n+\n+        \u002F\u002F start enter transition\n+        beforeEnterHook && beforeEnterHook(el);\n+        if (expectsCSS) {\n+            addTransitionClass(el, startClass);\n+            addTransitionClass(el, activeClass);\n+            nextFrame(function () {\n+                removeTransitionClass(el, startClass);\n+                if (!cb.cancelled) {\n+                    addTransitionClass(el, toClass);\n+                    if (!userWantsControl) {\n+                        if (isValidDuration(explicitEnterDuration)) {\n+                            setTimeout(cb, explicitEnterDuration);\n+                        } else {\n+                            whenTransitionEnds(el, type, cb);\n+                        }\n+                    }\n+                }\n+            });\n+        }\n+\n+        if (vnode.data.show) {\n+            toggleDisplay && toggleDisplay();\n+            enterHook && enterHook(el, cb);\n+        }\n+\n+        if (!expectsCSS && !userWantsControl) {\n+            cb();\n+        }\n+    }\n+\n+    function leave (vnode, rm) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call enter callback now\n+        if (isDef(el._enterCb)) {\n+            el._enterCb.cancelled = true;\n+            el._enterCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data) || el.nodeType !== 1) {\n+            return rm()\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._leaveCb)) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var leaveClass = data.leaveClass;\n+        var leaveToClass = data.leaveToClass;\n+        var leaveActiveClass = data.leaveActiveClass;\n+        var beforeLeave = data.beforeLeave;\n+        var leave = data.leave;\n+        var afterLeave = data.afterLeave;\n+        var leaveCancelled = data.leaveCancelled;\n+        var delayLeave = data.delayLeave;\n+        var duration = data.duration;\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(leave);\n+\n+        var explicitLeaveDuration = toNumber(\n+            isObject(duration)\n+                ? duration.leave\n+                : duration\n+        );\n+\n+        if (isDef(explicitLeaveDuration)) {\n+            checkDuration(explicitLeaveDuration, 'leave', vnode);\n+        }\n+\n+        var cb = el._leaveCb = once(function () {\n+            if (el.parentNode && el.parentNode._pending) {\n+                el.parentNode._pending[vnode.key] = null;\n+            }\n+            if (expectsCSS) {\n+                removeTransitionClass(el, leaveToClass);\n+                removeTransitionClass(el, leaveActiveClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, leaveClass);\n+                }\n+                leaveCancelled && leaveCancelled(el);\n+            } else {\n+                rm();\n+                afterLeave && afterLeave(el);\n+            }\n+            el._leaveCb = null;\n+        });\n+\n+        if (delayLeave) {\n+            delayLeave(performLeave);\n+        } else {\n+            performLeave();\n+        }\n+\n+        function performLeave () {\n+            \u002F\u002F the delayed leave may have already been cancelled\n+            if (cb.cancelled) {\n+                return\n+            }\n+            \u002F\u002F record leaving element\n+            if (!vnode.data.show && el.parentNode) {\n+                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n+            }\n+            beforeLeave && beforeLeave(el);\n+            if (expectsCSS) {\n+                addTransitionClass(el, leaveClass);\n+                addTransitionClass(el, leaveActiveClass);\n+                nextFrame(function () {\n+                    removeTransitionClass(el, leaveClass);\n+                    if (!cb.cancelled) {\n+                        addTransitionClass(el, leaveToClass);\n+                        if (!userWantsControl) {\n+                            if (isValidDuration(explicitLeaveDuration)) {\n+                                setTimeout(cb, explicitLeaveDuration);\n+                            } else {\n+                                whenTransitionEnds(el, type, cb);\n+                            }\n+                        }\n+                    }\n+                });\n+            }\n+            leave && leave(el, cb);\n+            if (!expectsCSS && !userWantsControl) {\n+                cb();\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F only used in dev mode\n+    function checkDuration (val, name, vnode) {\n+        if (typeof val !== 'number') {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\n+                \"got \" + (JSON.stringify(val)) + \".\",\n+                vnode.context\n+            );\n+        } else if (isNaN(val)) {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\n+                'the duration expression might be incorrect.',\n+                vnode.context\n+            );\n+        }\n+    }\n+\n+    function isValidDuration (val) {\n+        return typeof val === 'number' && !isNaN(val)\n+    }\n+\n+    \u002F**\n+     * Normalize a transition hook's argument length. The hook may be:\n+     * - a merged hook (invoker) with the original in .fns\n+     * - a wrapped component method (check ._length)\n+     * - a plain function (.length)\n+     *\u002F\n+    function getHookArgumentsLength (fn) {\n+        if (isUndef(fn)) {\n+            return false\n+        }\n+        var invokerFns = fn.fns;\n+        if (isDef(invokerFns)) {\n+            \u002F\u002F invoker\n+            return getHookArgumentsLength(\n+                Array.isArray(invokerFns)\n+                    ? invokerFns[0]\n+                    : invokerFns\n+            )\n+        } else {\n+            return (fn._length || fn.length) > 1\n+        }\n+    }\n+\n+    function _enter (_, vnode) {\n+        if (vnode.data.show !== true) {\n+            enter(vnode);\n+        }\n+    }\n+\n+    var transition = inBrowser ? {\n+        create: _enter,\n+        activate: _enter,\n+        remove: function remove$$1 (vnode, rm) {\n+          \u002F* istanbul ignore else *\u002F\n+            if (vnode.data.show !== true) {\n+                leave(vnode, rm);\n+            } else {\n+                rm();\n+            }\n+        }\n+    } : {};\n+\n+    var platformModules = [\n+        attrs,\n+        klass,\n+        events,\n+        domProps,\n+        style,\n+        transition\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F the directive module should be applied last, after all\n+    \u002F\u002F built-in modules have been applied.\n+    var modules = platformModules.concat(baseModules);\n+\n+    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n+\n+    \u002F**\n+     * Not type checking this file because flow doesn't like attaching\n+     * properties to Elements.\n+     *\u002F\n+\n+  \u002F* istanbul ignore if *\u002F\n+    if (isIE9) {\n+        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\n+        document.addEventListener('selectionchange', function () {\n+            var el = document.activeElement;\n+            if (el && el.vmodel) {\n+                trigger(el, 'input');\n+            }\n+        });\n+    }\n+\n+    var directive = {\n+        inserted: function inserted (el, binding, vnode, oldVnode) {\n+            if (vnode.tag === 'select') {\n+                \u002F\u002F #6903\n+                if (oldVnode.elm && !oldVnode.elm._vOptions) {\n+                    mergeVNodeHook(vnode, 'postpatch', function () {\n+                        directive.componentUpdated(el, binding, vnode);\n+                    });\n+                } else {\n+                    setSelected(el, binding, vnode.context);\n+                }\n+                el._vOptions = [].map.call(el.options, getValue);\n+            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n+                el._vModifiers = binding.modifiers;\n+                if (!binding.modifiers.lazy) {\n+                    el.addEventListener('compositionstart', onCompositionStart);\n+                    el.addEventListener('compositionend', onCompositionEnd);\n+                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\n+                    \u002F\u002F switching focus before confirming composition choice\n+                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\n+                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\n+                    el.addEventListener('change', onCompositionEnd);\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (isIE9) {\n+                        el.vmodel = true;\n+                    }\n+                }\n+            }\n+        },\n+\n+        componentUpdated: function componentUpdated (el, binding, vnode) {\n+            if (vnode.tag === 'select') {\n+                setSelected(el, binding, vnode.context);\n+                \u002F\u002F in case the options rendered by v-for have changed,\n+                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\n+                \u002F\u002F detect such cases and filter out values that no longer has a matching\n+                \u002F\u002F option in the DOM.\n+                var prevOptions = el._vOptions;\n+                var curOptions = el._vOptions = [].map.call(el.options, getValue);\n+                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n+                    \u002F\u002F trigger change event if\n+                    \u002F\u002F no matching option found for at least one value\n+                    var needReset = el.multiple\n+                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n+                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n+                    if (needReset) {\n+                        trigger(el, 'change');\n+                    }\n+                }\n+            }\n+        }\n+    };\n+\n+    function setSelected (el, binding, vm) {\n+        actuallySetSelected(el, binding, vm);\n+      \u002F* istanbul ignore if *\u002F\n+        if (isIE || isEdge) {\n+            setTimeout(function () {\n+                actuallySetSelected(el, binding, vm);\n+            }, 0);\n+        }\n+    }\n+\n+    function actuallySetSelected (el, binding, vm) {\n+        var value = binding.value;\n+        var isMultiple = el.multiple;\n+        if (isMultiple && !Array.isArray(value)) {\n+            warn(\n+                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n+                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n+                vm\n+            );\n+            return\n+        }\n+        var selected, option;\n+        for (var i = 0, l = el.options.length; i \u003C l; i++) {\n+            option = el.options[i];\n+            if (isMultiple) {\n+                selected = looseIndexOf(value, getValue(option)) > -1;\n+                if (option.selected !== selected) {\n+                    option.selected = selected;\n+                }\n+            } else {\n+                if (looseEqual(getValue(option), value)) {\n+                    if (el.selectedIndex !== i) {\n+                        el.selectedIndex = i;\n+                    }\n+                    return\n+                }\n+            }\n+        }\n+        if (!isMultiple) {\n+            el.selectedIndex = -1;\n+        }\n+    }\n+\n+    function hasNoMatchingOption (value, options) {\n+        return options.every(function (o) { return !looseEqual(o, value); })\n+    }\n+\n+    function getValue (option) {\n+        return '_value' in option\n+            ? option._value\n+            : option.value\n+    }\n+\n+    function onCompositionStart (e) {\n+        e.target.composing = true;\n+    }\n+\n+    function onCompositionEnd (e) {\n+        \u002F\u002F prevent triggering an input event for no reason\n+        if (!e.target.composing) { return }\n+        e.target.composing = false;\n+        trigger(e.target, 'input');\n+    }\n+\n+    function trigger (el, type) {\n+        var e = document.createEvent('HTMLEvents');\n+        e.initEvent(type, true, true);\n+        el.dispatchEvent(e);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F recursively search for possible transition defined inside the component root\n+    function locateNode (vnode) {\n+        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n+            ? locateNode(vnode.componentInstance._vnode)\n+            : vnode\n+    }\n+\n+    var show = {\n+        bind: function bind (el, ref, vnode) {\n+            var value = ref.value;\n+\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            var originalDisplay = el.__vOriginalDisplay =\n+                el.style.display === 'none' ? '' : el.style.display;\n+            if (value && transition$$1) {\n+                vnode.data.show = true;\n+                enter(vnode, function () {\n+                    el.style.display = originalDisplay;\n+                });\n+            } else {\n+                el.style.display = value ? originalDisplay : 'none';\n+            }\n+        },\n+\n+        update: function update (el, ref, vnode) {\n+            var value = ref.value;\n+            var oldValue = ref.oldValue;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (!value === !oldValue) { return }\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            if (transition$$1) {\n+                vnode.data.show = true;\n+                if (value) {\n+                    enter(vnode, function () {\n+                        el.style.display = el.__vOriginalDisplay;\n+                    });\n+                } else {\n+                    leave(vnode, function () {\n+                        el.style.display = 'none';\n+                    });\n+                }\n+            } else {\n+                el.style.display = value ? el.__vOriginalDisplay : 'none';\n+            }\n+        },\n+\n+        unbind: function unbind (\n+            el,\n+            binding,\n+            vnode,\n+            oldVnode,\n+            isDestroy\n+        ) {\n+            if (!isDestroy) {\n+                el.style.display = el.__vOriginalDisplay;\n+            }\n+        }\n+    };\n+\n+    var platformDirectives = {\n+        model: directive,\n+        show: show\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var transitionProps = {\n+        name: String,\n+        appear: Boolean,\n+        css: Boolean,\n+        mode: String,\n+        type: String,\n+        enterClass: String,\n+        leaveClass: String,\n+        enterToClass: String,\n+        leaveToClass: String,\n+        enterActiveClass: String,\n+        leaveActiveClass: String,\n+        appearClass: String,\n+        appearActiveClass: String,\n+        appearToClass: String,\n+        duration: [Number, String, Object]\n+    };\n+\n+    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\n+    \u002F\u002F we want to recursively retrieve the real component to be rendered\n+    function getRealChild (vnode) {\n+        var compOptions = vnode && vnode.componentOptions;\n+        if (compOptions && compOptions.Ctor.options.abstract) {\n+            return getRealChild(getFirstComponentChild(compOptions.children))\n+        } else {\n+            return vnode\n+        }\n+    }\n+\n+    function extractTransitionData (comp) {\n+        var data = {};\n+        var options = comp.$options;\n+        \u002F\u002F props\n+        for (var key in options.propsData) {\n+            data[key] = comp[key];\n+        }\n+        \u002F\u002F events.\n+        \u002F\u002F extract listeners and pass them directly to the transition methods\n+        var listeners = options._parentListeners;\n+        for (var key$1 in listeners) {\n+            data[camelize(key$1)] = listeners[key$1];\n+        }\n+        return data\n+    }\n+\n+    function placeholder (h, rawChild) {\n+        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\n+            return h('keep-alive', {\n+                props: rawChild.componentOptions.propsData\n+            })\n+        }\n+    }\n+\n+    function hasParentTransition (vnode) {\n+        while ((vnode = vnode.parent)) {\n+            if (vnode.data.transition) {\n+                return true\n+            }\n+        }\n+    }\n+\n+    function isSameChild (child, oldChild) {\n+        return oldChild.key === child.key && oldChild.tag === child.tag\n+    }\n+\n+    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n+\n+    var isVShowDirective = function (d) { return d.name === 'show'; };\n+\n+    var Transition = {\n+        name: 'transition',\n+        props: transitionProps,\n+        abstract: true,\n+\n+        render: function render (h) {\n+            var this$1 = this;\n+\n+            var children = this.$slots.default;\n+            if (!children) {\n+                return\n+            }\n+\n+            \u002F\u002F filter out text nodes (possible whitespaces)\n+            children = children.filter(isNotTextNode);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!children.length) {\n+                return\n+            }\n+\n+            \u002F\u002F warn multiple elements\n+            if (children.length > 1) {\n+                warn(\n+                    '\u003Ctransition> can only be used on a single element. Use ' +\n+                    '\u003Ctransition-group> for lists.',\n+                    this.$parent\n+                );\n+            }\n+\n+            var mode = this.mode;\n+\n+            \u002F\u002F warn invalid mode\n+            if (mode && mode !== 'in-out' && mode !== 'out-in'\n+            ) {\n+                warn(\n+                    'invalid \u003Ctransition> mode: ' + mode,\n+                    this.$parent\n+                );\n+            }\n+\n+            var rawChild = children[0];\n+\n+            \u002F\u002F if this is a component root node and the component's\n+            \u002F\u002F parent container node also has transition, skip.\n+            if (hasParentTransition(this.$vnode)) {\n+                return rawChild\n+            }\n+\n+            \u002F\u002F apply transition data to child\n+            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\n+            var child = getRealChild(rawChild);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!child) {\n+                return rawChild\n+            }\n+\n+            if (this._leaving) {\n+                return placeholder(h, rawChild)\n+            }\n+\n+            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\n+            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\n+            \u002F\u002F during entering.\n+            var id = \"__transition-\" + (this._uid) + \"-\";\n+            child.key = child.key == null\n+                ? child.isComment\n+                    ? id + 'comment'\n+                    : id + child.tag\n+                : isPrimitive(child.key)\n+                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n+                    : child.key;\n+\n+            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n+            var oldRawChild = this._vnode;\n+            var oldChild = getRealChild(oldRawChild);\n+\n+            \u002F\u002F mark v-show\n+            \u002F\u002F so that the transition module can hand over the control to the directive\n+            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n+                child.data.show = true;\n+            }\n+\n+            if (\n+                oldChild &&\n+                oldChild.data &&\n+                !isSameChild(child, oldChild) &&\n+                !isAsyncPlaceholder(oldChild) &&\n+                \u002F\u002F #6687 component root is a comment node\n+                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n+            ) {\n+                \u002F\u002F replace old child transition data with fresh one\n+                \u002F\u002F important for dynamic transitions!\n+                var oldData = oldChild.data.transition = extend({}, data);\n+                \u002F\u002F handle transition mode\n+                if (mode === 'out-in') {\n+                    \u002F\u002F return placeholder node and queue update when leave finishes\n+                    this._leaving = true;\n+                    mergeVNodeHook(oldData, 'afterLeave', function () {\n+                        this$1._leaving = false;\n+                        this$1.$forceUpdate();\n+                    });\n+                    return placeholder(h, rawChild)\n+                } else if (mode === 'in-out') {\n+                    if (isAsyncPlaceholder(child)) {\n+                        return oldRawChild\n+                    }\n+                    var delayedLeave;\n+                    var performLeave = function () { delayedLeave(); };\n+                    mergeVNodeHook(data, 'afterEnter', performLeave);\n+                    mergeVNodeHook(data, 'enterCancelled', performLeave);\n+                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n+                }\n+            }\n+\n+            return rawChild\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var props = extend({\n+        tag: String,\n+        moveClass: String\n+    }, transitionProps);\n+\n+    delete props.mode;\n+\n+    var TransitionGroup = {\n+        props: props,\n+\n+        beforeMount: function beforeMount () {\n+            var this$1 = this;\n+\n+            var update = this._update;\n+            this._update = function (vnode, hydrating) {\n+                var restoreActiveInstance = setActiveInstance(this$1);\n+                \u002F\u002F force removing pass\n+                this$1.__patch__(\n+                    this$1._vnode,\n+                    this$1.kept,\n+                    false, \u002F\u002F hydrating\n+                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\n+                );\n+                this$1._vnode = this$1.kept;\n+                restoreActiveInstance();\n+                update.call(this$1, vnode, hydrating);\n+            };\n+        },\n+\n+        render: function render (h) {\n+            var tag = this.tag || this.$vnode.data.tag || 'span';\n+            var map = Object.create(null);\n+            var prevChildren = this.prevChildren = this.children;\n+            var rawChildren = this.$slots.default || [];\n+            var children = this.children = [];\n+            var transitionData = extractTransitionData(this);\n+\n+            for (var i = 0; i \u003C rawChildren.length; i++) {\n+                var c = rawChildren[i];\n+                if (c.tag) {\n+                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n+                        children.push(c);\n+                        map[c.key] = c\n+                        ;(c.data || (c.data = {})).transition = transitionData;\n+                    } else {\n+                        var opts = c.componentOptions;\n+                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n+                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\n+                    }\n+                }\n+            }\n+\n+            if (prevChildren) {\n+                var kept = [];\n+                var removed = [];\n+                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\n+                    var c$1 = prevChildren[i$1];\n+                    c$1.data.transition = transitionData;\n+                    c$1.data.pos = c$1.elm.getBoundingClientRect();\n+                    if (map[c$1.key]) {\n+                        kept.push(c$1);\n+                    } else {\n+                        removed.push(c$1);\n+                    }\n+                }\n+                this.kept = h(tag, null, kept);\n+                this.removed = removed;\n+            }\n+\n+            return h(tag, null, children)\n+        },\n+\n+        updated: function updated () {\n+            var children = this.prevChildren;\n+            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n+            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n+                return\n+            }\n+\n+            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\n+            \u002F\u002F in each iteration - which helps prevent layout thrashing.\n+            children.forEach(callPendingCbs);\n+            children.forEach(recordPosition);\n+            children.forEach(applyTranslation);\n+\n+            \u002F\u002F force reflow to put everything in position\n+            \u002F\u002F assign to this to avoid being removed in tree-shaking\n+            \u002F\u002F $flow-disable-line\n+            this._reflow = document.body.offsetHeight;\n+\n+            children.forEach(function (c) {\n+                if (c.data.moved) {\n+                    var el = c.elm;\n+                    var s = el.style;\n+                    addTransitionClass(el, moveClass);\n+                    s.transform = s.WebkitTransform = s.transitionDuration = '';\n+                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n+                        if (e && e.target !== el) {\n+                            return\n+                        }\n+                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\n+                            el.removeEventListener(transitionEndEvent, cb);\n+                            el._moveCb = null;\n+                            removeTransitionClass(el, moveClass);\n+                        }\n+                    });\n+                }\n+            });\n+        },\n+\n+        methods: {\n+            hasMove: function hasMove (el, moveClass) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (!hasTransition) {\n+                    return false\n+                }\n+              \u002F* istanbul ignore if *\u002F\n+                if (this._hasMove) {\n+                    return this._hasMove\n+                }\n+                \u002F\u002F Detect whether an element with the move class applied has\n+                \u002F\u002F CSS transitions. Since the element may be inside an entering\n+                \u002F\u002F transition at this very moment, we make a clone of it and remove\n+                \u002F\u002F all other transition classes applied to ensure only the move class\n+                \u002F\u002F is applied.\n+                var clone = el.cloneNode();\n+                if (el._transitionClasses) {\n+                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n+                }\n+                addClass(clone, moveClass);\n+                clone.style.display = 'none';\n+                this.$el.appendChild(clone);\n+                var info = getTransitionInfo(clone);\n+                this.$el.removeChild(clone);\n+                return (this._hasMove = info.hasTransform)\n+            }\n+        }\n+    };\n+\n+    function callPendingCbs (c) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._moveCb) {\n+            c.elm._moveCb();\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._enterCb) {\n+            c.elm._enterCb();\n+        }\n+    }\n+\n+    function recordPosition (c) {\n+        c.data.newPos = c.elm.getBoundingClientRect();\n+    }\n+\n+    function applyTranslation (c) {\n+        var oldPos = c.data.pos;\n+        var newPos = c.data.newPos;\n+        var dx = oldPos.left - newPos.left;\n+        var dy = oldPos.top - newPos.top;\n+        if (dx || dy) {\n+            c.data.moved = true;\n+            var s = c.elm.style;\n+            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n+            s.transitionDuration = '0s';\n+        }\n+    }\n+\n+    var platformComponents = {\n+        Transition: Transition,\n+        TransitionGroup: TransitionGroup\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F install platform specific utils\n+    Vue.config.mustUseProp = mustUseProp;\n+    Vue.config.isReservedTag = isReservedTag;\n+    Vue.config.isReservedAttr = isReservedAttr;\n+    Vue.config.getTagNamespace = getTagNamespace;\n+    Vue.config.isUnknownElement = isUnknownElement;\n+\n+    \u002F\u002F install platform runtime directives & components\n+    extend(Vue.options.directives, platformDirectives);\n+    extend(Vue.options.components, platformComponents);\n+\n+    \u002F\u002F install platform patch function\n+    Vue.prototype.__patch__ = inBrowser ? patch : noop;\n+\n+    \u002F\u002F public mount method\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && inBrowser ? query(el) : undefined;\n+        return mountComponent(this, el, hydrating)\n+    };\n+\n+    \u002F\u002F devtools global hook\n+  \u002F* istanbul ignore next *\u002F\n+    if (inBrowser) {\n+        setTimeout(function () {\n+            if (config.devtools) {\n+                if (devtools) {\n+                    devtools.emit('init', Vue);\n+                } else {\n+                    console[console.info ? 'info' : 'log'](\n+                        'Download the Vue Devtools extension for a better development experience:\\n' +\n+                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\n+                    );\n+                }\n+            }\n+            if (config.productionTip !== false &&\n+                typeof console !== 'undefined'\n+            ) {\n+                console[console.info ? 'info' : 'log'](\n+                    \"You are running Vue in development mode.\\n\" +\n+                    \"Make sure to turn on production mode when deploying for production.\\n\" +\n+                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\n+                );\n+            }\n+        }, 0);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\n+    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\n+\n+    var buildRegex = cached(function (delimiters) {\n+        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n+        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n+        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n+    });\n+\n+\n+\n+    function parseText (\n+        text,\n+        delimiters\n+    ) {\n+        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n+        if (!tagRE.test(text)) {\n+            return\n+        }\n+        var tokens = [];\n+        var rawTokens = [];\n+        var lastIndex = tagRE.lastIndex = 0;\n+        var match, index, tokenValue;\n+        while ((match = tagRE.exec(text))) {\n+            index = match.index;\n+            \u002F\u002F push text token\n+            if (index > lastIndex) {\n+                rawTokens.push(tokenValue = text.slice(lastIndex, index));\n+                tokens.push(JSON.stringify(tokenValue));\n+            }\n+            \u002F\u002F tag token\n+            var exp = parseFilters(match[1].trim());\n+            tokens.push((\"_s(\" + exp + \")\"));\n+            rawTokens.push({ '@binding': exp });\n+            lastIndex = index + match[0].length;\n+        }\n+        if (lastIndex \u003C text.length) {\n+            rawTokens.push(tokenValue = text.slice(lastIndex));\n+            tokens.push(JSON.stringify(tokenValue));\n+        }\n+        return {\n+            expression: tokens.join('+'),\n+            tokens: rawTokens\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticClass = getAndRemoveAttr(el, 'class');\n+        if (staticClass) {\n+            var res = parseText(staticClass, options.delimiters);\n+            if (res) {\n+                warn(\n+                    \"class=\\\"\" + staticClass + \"\\\": \" +\n+                    'Interpolation inside attributes has been removed. ' +\n+                    'Use v-bind or the colon shorthand instead. For example, ' +\n+                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\n+                    el.rawAttrsMap['class']\n+                );\n+            }\n+        }\n+        if (staticClass) {\n+            el.staticClass = JSON.stringify(staticClass);\n+        }\n+        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\n+        if (classBinding) {\n+            el.classBinding = classBinding;\n+        }\n+    }\n+\n+    function genData (el) {\n+        var data = '';\n+        if (el.staticClass) {\n+            data += \"staticClass:\" + (el.staticClass) + \",\";\n+        }\n+        if (el.classBinding) {\n+            data += \"class:\" + (el.classBinding) + \",\";\n+        }\n+        return data\n+    }\n+\n+    var klass$1 = {\n+        staticKeys: ['staticClass'],\n+        transformNode: transformNode,\n+        genData: genData\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode$1 (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticStyle = getAndRemoveAttr(el, 'style');\n+        if (staticStyle) {\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                var res = parseText(staticStyle, options.delimiters);\n+                if (res) {\n+                    warn(\n+                        \"style=\\\"\" + staticStyle + \"\\\": \" +\n+                        'Interpolation inside attributes has been removed. ' +\n+                        'Use v-bind or the colon shorthand instead. For example, ' +\n+                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\n+                        el.rawAttrsMap['style']\n+                    );\n+                }\n+            }\n+            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n+        }\n+\n+        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\n+        if (styleBinding) {\n+            el.styleBinding = styleBinding;\n+        }\n+    }\n+\n+    function genData$1 (el) {\n+        var data = '';\n+        if (el.staticStyle) {\n+            data += \"staticStyle:\" + (el.staticStyle) + \",\";\n+        }\n+        if (el.styleBinding) {\n+            data += \"style:(\" + (el.styleBinding) + \"),\";\n+        }\n+        return data\n+    }\n+\n+    var style$1 = {\n+        staticKeys: ['staticStyle'],\n+        transformNode: transformNode$1,\n+        genData: genData$1\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var decoder;\n+\n+    var he = {\n+        decode: function decode (html) {\n+            decoder = decoder || document.createElement('div');\n+            decoder.innerHTML = html;\n+            return decoder.textContent\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isUnaryTag = makeMap(\n+        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n+        'link,meta,param,source,track,wbr'\n+    );\n+\n+    \u002F\u002F Elements that you can, intentionally, leave open\n+    \u002F\u002F (and which close themselves)\n+    var canBeLeftOpenTag = makeMap(\n+        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n+    );\n+\n+    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\n+    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\n+    var isNonPhrasingTag = makeMap(\n+        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n+        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n+        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n+        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n+        'title,tr,track'\n+    );\n+\n+    \u002F**\n+     * Not type-checking this file because it's mostly vendor code.\n+     *\u002F\n+\n+        \u002F\u002F Regular Expressions for parsing tags and attributes\n+    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\n+    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\n+    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\n+    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\n+    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\n+    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\n+    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\n+    var comment = \u002F^\u003C!\\--\u002F;\n+    var conditionalComment = \u002F^\u003C!\\[\u002F;\n+\n+    \u002F\u002F Special Elements (can contain anything)\n+    var isPlainTextElement = makeMap('script,style,textarea', true);\n+    var reCache = {};\n+\n+    var decodingMap = {\n+        '&lt;': '\u003C',\n+        '&gt;': '>',\n+        '&quot;': '\"',\n+        '&amp;': '&',\n+        '&#10;': '\\n',\n+        '&#9;': '\\t',\n+        '&#39;': \"'\"\n+    };\n+    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\n+    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\n+\n+    \u002F\u002F #5992\n+    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\n+    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n+\n+    function decodeAttr (value, shouldDecodeNewlines) {\n+        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n+        return value.replace(re, function (match) { return decodingMap[match]; })\n+    }\n+\n+    function parseHTML (html, options) {\n+        var stack = [];\n+        var expectHTML = options.expectHTML;\n+        var isUnaryTag$$1 = options.isUnaryTag || no;\n+        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n+        var index = 0;\n+        var last, lastTag;\n+        while (html) {\n+            last = html;\n+            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\n+            if (!lastTag || !isPlainTextElement(lastTag)) {\n+                var textEnd = html.indexOf('\u003C');\n+                if (textEnd === 0) {\n+                    \u002F\u002F Comment:\n+                    if (comment.test(html)) {\n+                        var commentEnd = html.indexOf('-->');\n+\n+                        if (commentEnd >= 0) {\n+                            if (options.shouldKeepComment) {\n+                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n+                            }\n+                            advance(commentEnd + 3);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\n+                    if (conditionalComment.test(html)) {\n+                        var conditionalEnd = html.indexOf(']>');\n+\n+                        if (conditionalEnd >= 0) {\n+                            advance(conditionalEnd + 2);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F Doctype:\n+                    var doctypeMatch = html.match(doctype);\n+                    if (doctypeMatch) {\n+                        advance(doctypeMatch[0].length);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F End tag:\n+                    var endTagMatch = html.match(endTag);\n+                    if (endTagMatch) {\n+                        var curIndex = index;\n+                        advance(endTagMatch[0].length);\n+                        parseEndTag(endTagMatch[1], curIndex, index);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F Start tag:\n+                    var startTagMatch = parseStartTag();\n+                    if (startTagMatch) {\n+                        handleStartTag(startTagMatch);\n+                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n+                            advance(1);\n+                        }\n+                        continue\n+                    }\n+                }\n+\n+                var text = (void 0), rest = (void 0), next = (void 0);\n+                if (textEnd >= 0) {\n+                    rest = html.slice(textEnd);\n+                    while (\n+                    !endTag.test(rest) &&\n+                    !startTagOpen.test(rest) &&\n+                    !comment.test(rest) &&\n+                    !conditionalComment.test(rest)\n+                        ) {\n+                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\n+                        next = rest.indexOf('\u003C', 1);\n+                        if (next \u003C 0) { break }\n+                        textEnd += next;\n+                        rest = html.slice(textEnd);\n+                    }\n+                    text = html.substring(0, textEnd);\n+                }\n+\n+                if (textEnd \u003C 0) {\n+                    text = html;\n+                }\n+\n+                if (text) {\n+                    advance(text.length);\n+                }\n+\n+                if (options.chars && text) {\n+                    options.chars(text, index - text.length, index);\n+                }\n+            } else {\n+                var endTagLength = 0;\n+                var stackedTag = lastTag.toLowerCase();\n+                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\n+                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n+                    endTagLength = endTag.length;\n+                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n+                        text = text\n+                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\n+                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\n+                    }\n+                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\n+                        text = text.slice(1);\n+                    }\n+                    if (options.chars) {\n+                        options.chars(text);\n+                    }\n+                    return ''\n+                });\n+                index += html.length - rest$1.length;\n+                html = rest$1;\n+                parseEndTag(stackedTag, index - endTagLength, index);\n+            }\n+\n+            if (html === last) {\n+                options.chars && options.chars(html);\n+                if (!stack.length && options.warn) {\n+                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n+                }\n+                break\n+            }\n+        }\n+\n+        \u002F\u002F Clean up any remaining tags\n+        parseEndTag();\n+\n+        function advance (n) {\n+            index += n;\n+            html = html.substring(n);\n+        }\n+\n+        function parseStartTag () {\n+            var start = html.match(startTagOpen);\n+            if (start) {\n+                var match = {\n+                    tagName: start[1],\n+                    attrs: [],\n+                    start: index\n+                };\n+                advance(start[0].length);\n+                var end, attr;\n+                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n+                    attr.start = index;\n+                    advance(attr[0].length);\n+                    attr.end = index;\n+                    match.attrs.push(attr);\n+                }\n+                if (end) {\n+                    match.unarySlash = end[1];\n+                    advance(end[0].length);\n+                    match.end = index;\n+                    return match\n+                }\n+            }\n+        }\n+\n+        function handleStartTag (match) {\n+            var tagName = match.tagName;\n+            var unarySlash = match.unarySlash;\n+\n+            if (expectHTML) {\n+                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n+                    parseEndTag(lastTag);\n+                }\n+                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n+                    parseEndTag(tagName);\n+                }\n+            }\n+\n+            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n+\n+            var l = match.attrs.length;\n+            var attrs = new Array(l);\n+            for (var i = 0; i \u003C l; i++) {\n+                var args = match.attrs[i];\n+                var value = args[3] || args[4] || args[5] || '';\n+                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n+                    ? options.shouldDecodeNewlinesForHref\n+                    : options.shouldDecodeNewlines;\n+                attrs[i] = {\n+                    name: args[1],\n+                    value: decodeAttr(value, shouldDecodeNewlines)\n+                };\n+                if (options.outputSourceRange) {\n+                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\n+                    attrs[i].end = args.end;\n+                }\n+            }\n+\n+            if (!unary) {\n+                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n+                lastTag = tagName;\n+            }\n+\n+            if (options.start) {\n+                options.start(tagName, attrs, unary, match.start, match.end);\n+            }\n+        }\n+\n+        function parseEndTag (tagName, start, end) {\n+            var pos, lowerCasedTagName;\n+            if (start == null) { start = index; }\n+            if (end == null) { end = index; }\n+\n+            \u002F\u002F Find the closest opened tag of the same type\n+            if (tagName) {\n+                lowerCasedTagName = tagName.toLowerCase();\n+                for (pos = stack.length - 1; pos >= 0; pos--) {\n+                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n+                        break\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F If no tag name is provided, clean shop\n+                pos = 0;\n+            }\n+\n+            if (pos >= 0) {\n+                \u002F\u002F Close all the open elements, up the stack\n+                for (var i = stack.length - 1; i >= pos; i--) {\n+                    if (i > pos || !tagName &&\n+                        options.warn\n+                    ) {\n+                        options.warn(\n+                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\n+                            { start: stack[i].start, end: stack[i].end }\n+                        );\n+                    }\n+                    if (options.end) {\n+                        options.end(stack[i].tag, start, end);\n+                    }\n+                }\n+\n+                \u002F\u002F Remove the open elements from the stack\n+                stack.length = pos;\n+                lastTag = pos && stack[pos - 1].tag;\n+            } else if (lowerCasedTagName === 'br') {\n+                if (options.start) {\n+                    options.start(tagName, [], true, start, end);\n+                }\n+            } else if (lowerCasedTagName === 'p') {\n+                if (options.start) {\n+                    options.start(tagName, [], false, start, end);\n+                }\n+                if (options.end) {\n+                    options.end(tagName, start, end);\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var onRE = \u002F^@|^v-on:\u002F;\n+    var dirRE = \u002F^v-|^@|^:\u002F;\n+    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\n+    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\n+    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\n+    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\n+\n+    var argRE = \u002F:(.*)$\u002F;\n+    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\n+    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\n+\n+    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\n+\n+    var lineBreakRE = \u002F[\\r\\n]\u002F;\n+    var whitespaceRE$1 = \u002F\\s+\u002Fg;\n+\n+    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\n+\n+    var decodeHTMLCached = cached(he.decode);\n+\n+    var emptySlotScopeToken = \"_empty_\";\n+\n+    \u002F\u002F configurable state\n+    var warn$2;\n+    var delimiters;\n+    var transforms;\n+    var preTransforms;\n+    var postTransforms;\n+    var platformIsPreTag;\n+    var platformMustUseProp;\n+    var platformGetTagNamespace;\n+    var maybeComponent;\n+\n+    function createASTElement (\n+        tag,\n+        attrs,\n+        parent\n+    ) {\n+        return {\n+            type: 1,\n+            tag: tag,\n+            attrsList: attrs,\n+            attrsMap: makeAttrsMap(attrs),\n+            rawAttrsMap: {},\n+            parent: parent,\n+            children: []\n+        }\n+    }\n+\n+    \u002F**\n+     * Convert HTML string to AST.\n+     *\u002F\n+    function parse (\n+        template,\n+        options\n+    ) {\n+        warn$2 = options.warn || baseWarn;\n+\n+        platformIsPreTag = options.isPreTag || no;\n+        platformMustUseProp = options.mustUseProp || no;\n+        platformGetTagNamespace = options.getTagNamespace || no;\n+        var isReservedTag = options.isReservedTag || no;\n+        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+\n+        transforms = pluckModuleFunction(options.modules, 'transformNode');\n+        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n+        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n+\n+        delimiters = options.delimiters;\n+\n+        var stack = [];\n+        var preserveWhitespace = options.preserveWhitespace !== false;\n+        var whitespaceOption = options.whitespace;\n+        var root;\n+        var currentParent;\n+        var inVPre = false;\n+        var inPre = false;\n+        var warned = false;\n+\n+        function warnOnce (msg, range) {\n+            if (!warned) {\n+                warned = true;\n+                warn$2(msg, range);\n+            }\n+        }\n+\n+        function closeElement (element) {\n+            trimEndingWhitespace(element);\n+            if (!inVPre && !element.processed) {\n+                element = processElement(element, options);\n+            }\n+            \u002F\u002F tree management\n+            if (!stack.length && element !== root) {\n+                \u002F\u002F allow root elements with v-if, v-else-if and v-else\n+                if (root.if && (element.elseif || element.else)) {\n+                    {\n+                        checkRootConstraints(element);\n+                    }\n+                    addIfCondition(root, {\n+                        exp: element.elseif,\n+                        block: element\n+                    });\n+                } else {\n+                    warnOnce(\n+                        \"Component template should contain exactly one root element. \" +\n+                        \"If you are using v-if on multiple elements, \" +\n+                        \"use v-else-if to chain them instead.\",\n+                        { start: element.start }\n+                    );\n+                }\n+            }\n+            if (currentParent && !element.forbidden) {\n+                if (element.elseif || element.else) {\n+                    processIfConditions(element, currentParent);\n+                } else {\n+                    if (element.slotScope) {\n+                        \u002F\u002F scoped slot\n+                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\n+                        \u002F\u002F find it as the prev node.\n+                        var name = element.slotTarget || '\"default\"'\n+                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n+                    }\n+                    currentParent.children.push(element);\n+                    element.parent = currentParent;\n+                }\n+            }\n+\n+            \u002F\u002F final children cleanup\n+            \u002F\u002F filter out scoped slots\n+            element.children = element.children.filter(function (c) { return !(c).slotScope; });\n+            \u002F\u002F remove trailing whitespace node again\n+            trimEndingWhitespace(element);\n+\n+            \u002F\u002F check pre state\n+            if (element.pre) {\n+                inVPre = false;\n+            }\n+            if (platformIsPreTag(element.tag)) {\n+                inPre = false;\n+            }\n+            \u002F\u002F apply post-transforms\n+            for (var i = 0; i \u003C postTransforms.length; i++) {\n+                postTransforms[i](element, options);\n+            }\n+        }\n+\n+        function trimEndingWhitespace (el) {\n+            \u002F\u002F remove trailing whitespace node\n+            if (!inPre) {\n+                var lastNode;\n+                while (\n+                (lastNode = el.children[el.children.length - 1]) &&\n+                lastNode.type === 3 &&\n+                lastNode.text === ' '\n+                    ) {\n+                    el.children.pop();\n+                }\n+            }\n+        }\n+\n+        function checkRootConstraints (el) {\n+            if (el.tag === 'slot' || el.tag === 'template') {\n+                warnOnce(\n+                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\n+                    'contain multiple nodes.',\n+                    { start: el.start }\n+                );\n+            }\n+            if (el.attrsMap.hasOwnProperty('v-for')) {\n+                warnOnce(\n+                    'Cannot use v-for on stateful component root element because ' +\n+                    'it renders multiple elements.',\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+\n+        parseHTML(template, {\n+            warn: warn$2,\n+            expectHTML: options.expectHTML,\n+            isUnaryTag: options.isUnaryTag,\n+            canBeLeftOpenTag: options.canBeLeftOpenTag,\n+            shouldDecodeNewlines: options.shouldDecodeNewlines,\n+            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n+            shouldKeepComment: options.comments,\n+            outputSourceRange: options.outputSourceRange,\n+            start: function start (tag, attrs, unary, start$1, end) {\n+                \u002F\u002F check namespace.\n+                \u002F\u002F inherit parent ns if there is one\n+                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n+\n+                \u002F\u002F handle IE svg bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE && ns === 'svg') {\n+                    attrs = guardIESVGBug(attrs);\n+                }\n+\n+                var element = createASTElement(tag, attrs, currentParent);\n+                if (ns) {\n+                    element.ns = ns;\n+                }\n+\n+                {\n+                    if (options.outputSourceRange) {\n+                        element.start = start$1;\n+                        element.end = end;\n+                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n+                            cumulated[attr.name] = attr;\n+                            return cumulated\n+                        }, {});\n+                    }\n+                    attrs.forEach(function (attr) {\n+                        if (invalidAttributeRE.test(attr.name)) {\n+                            warn$2(\n+                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\n+                                \"spaces, quotes, \u003C, >, \u002F or =.\",\n+                                {\n+                                    start: attr.start + attr.name.indexOf(\"[\"),\n+                                    end: attr.start + attr.name.length\n+                                }\n+                            );\n+                        }\n+                    });\n+                }\n+\n+                if (isForbiddenTag(element) && !isServerRendering()) {\n+                    element.forbidden = true;\n+                    warn$2(\n+                        'Templates should only be responsible for mapping the state to the ' +\n+                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n+                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\n+                        { start: element.start }\n+                    );\n+                }\n+\n+                \u002F\u002F apply pre-transforms\n+                for (var i = 0; i \u003C preTransforms.length; i++) {\n+                    element = preTransforms[i](element, options) || element;\n+                }\n+\n+                if (!inVPre) {\n+                    processPre(element);\n+                    if (element.pre) {\n+                        inVPre = true;\n+                    }\n+                }\n+                if (platformIsPreTag(element.tag)) {\n+                    inPre = true;\n+                }\n+                if (inVPre) {\n+                    processRawAttrs(element);\n+                } else if (!element.processed) {\n+                    \u002F\u002F structural directives\n+                    processFor(element);\n+                    processIf(element);\n+                    processOnce(element);\n+                }\n+\n+                if (!root) {\n+                    root = element;\n+                    {\n+                        checkRootConstraints(root);\n+                    }\n+                }\n+\n+                if (!unary) {\n+                    currentParent = element;\n+                    stack.push(element);\n+                } else {\n+                    closeElement(element);\n+                }\n+            },\n+\n+            end: function end (tag, start, end$1) {\n+                var element = stack[stack.length - 1];\n+                \u002F\u002F pop stack\n+                stack.length -= 1;\n+                currentParent = stack[stack.length - 1];\n+                if (options.outputSourceRange) {\n+                    element.end = end$1;\n+                }\n+                closeElement(element);\n+            },\n+\n+            chars: function chars (text, start, end) {\n+                if (!currentParent) {\n+                    {\n+                        if (text === template) {\n+                            warnOnce(\n+                                'Component template requires a root element, rather than just text.',\n+                                { start: start }\n+                            );\n+                        } else if ((text = text.trim())) {\n+                            warnOnce(\n+                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n+                                { start: start }\n+                            );\n+                        }\n+                    }\n+                    return\n+                }\n+                \u002F\u002F IE textarea placeholder bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE &&\n+                    currentParent.tag === 'textarea' &&\n+                    currentParent.attrsMap.placeholder === text\n+                ) {\n+                    return\n+                }\n+                var children = currentParent.children;\n+                if (inPre || text.trim()) {\n+                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n+                } else if (!children.length) {\n+                    \u002F\u002F remove the whitespace-only node right after an opening tag\n+                    text = '';\n+                } else if (whitespaceOption) {\n+                    if (whitespaceOption === 'condense') {\n+                        \u002F\u002F in condense mode, remove the whitespace node if it contains\n+                        \u002F\u002F line break, otherwise condense to a single space\n+                        text = lineBreakRE.test(text) ? '' : ' ';\n+                    } else {\n+                        text = ' ';\n+                    }\n+                } else {\n+                    text = preserveWhitespace ? ' ' : '';\n+                }\n+                if (text) {\n+                    if (!inPre && whitespaceOption === 'condense') {\n+                        \u002F\u002F condense consecutive whitespaces into single space\n+                        text = text.replace(whitespaceRE$1, ' ');\n+                    }\n+                    var res;\n+                    var child;\n+                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n+                        child = {\n+                            type: 2,\n+                            expression: res.expression,\n+                            tokens: res.tokens,\n+                            text: text\n+                        };\n+                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n+                        child = {\n+                            type: 3,\n+                            text: text\n+                        };\n+                    }\n+                    if (child) {\n+                        if (options.outputSourceRange) {\n+                            child.start = start;\n+                            child.end = end;\n+                        }\n+                        children.push(child);\n+                    }\n+                }\n+            },\n+            comment: function comment (text, start, end) {\n+                \u002F\u002F adding anyting as a sibling to the root node is forbidden\n+                \u002F\u002F comments should still be allowed, but ignored\n+                if (currentParent) {\n+                    var child = {\n+                        type: 3,\n+                        text: text,\n+                        isComment: true\n+                    };\n+                    if (options.outputSourceRange) {\n+                        child.start = start;\n+                        child.end = end;\n+                    }\n+                    currentParent.children.push(child);\n+                }\n+            }\n+        });\n+        return root\n+    }\n+\n+    function processPre (el) {\n+        if (getAndRemoveAttr(el, 'v-pre') != null) {\n+            el.pre = true;\n+        }\n+    }\n+\n+    function processRawAttrs (el) {\n+        var list = el.attrsList;\n+        var len = list.length;\n+        if (len) {\n+            var attrs = el.attrs = new Array(len);\n+            for (var i = 0; i \u003C len; i++) {\n+                attrs[i] = {\n+                    name: list[i].name,\n+                    value: JSON.stringify(list[i].value)\n+                };\n+                if (list[i].start != null) {\n+                    attrs[i].start = list[i].start;\n+                    attrs[i].end = list[i].end;\n+                }\n+            }\n+        } else if (!el.pre) {\n+            \u002F\u002F non root node in pre blocks with no attributes\n+            el.plain = true;\n+        }\n+    }\n+\n+    function processElement (\n+        element,\n+        options\n+    ) {\n+        processKey(element);\n+\n+        \u002F\u002F determine whether this is a plain element after\n+        \u002F\u002F removing structural attributes\n+        element.plain = (\n+            !element.key &&\n+            !element.scopedSlots &&\n+            !element.attrsList.length\n+        );\n+\n+        processRef(element);\n+        processSlotContent(element);\n+        processSlotOutlet(element);\n+        processComponent(element);\n+        for (var i = 0; i \u003C transforms.length; i++) {\n+            element = transforms[i](element, options) || element;\n+        }\n+        processAttrs(element);\n+        return element\n+    }\n+\n+    function processKey (el) {\n+        var exp = getBindingAttr(el, 'key');\n+        if (exp) {\n+            {\n+                if (el.tag === 'template') {\n+                    warn$2(\n+                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\n+                        getRawBindingAttr(el, 'key')\n+                    );\n+                }\n+                if (el.for) {\n+                    var iterator = el.iterator2 || el.iterator1;\n+                    var parent = el.parent;\n+                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n+                        warn$2(\n+                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\n+                            \"this is the same as not using keys.\",\n+                            getRawBindingAttr(el, 'key'),\n+                            true \u002F* tip *\u002F\n+                        );\n+                    }\n+                }\n+            }\n+            el.key = exp;\n+        }\n+    }\n+\n+    function processRef (el) {\n+        var ref = getBindingAttr(el, 'ref');\n+        if (ref) {\n+            el.ref = ref;\n+            el.refInFor = checkInFor(el);\n+        }\n+    }\n+\n+    function processFor (el) {\n+        var exp;\n+        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n+            var res = parseFor(exp);\n+            if (res) {\n+                extend(el, res);\n+            } else {\n+                warn$2(\n+                    (\"Invalid v-for expression: \" + exp),\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+    }\n+\n+\n+\n+    function parseFor (exp) {\n+        var inMatch = exp.match(forAliasRE);\n+        if (!inMatch) { return }\n+        var res = {};\n+        res.for = inMatch[2].trim();\n+        var alias = inMatch[1].trim().replace(stripParensRE, '');\n+        var iteratorMatch = alias.match(forIteratorRE);\n+        if (iteratorMatch) {\n+            res.alias = alias.replace(forIteratorRE, '').trim();\n+            res.iterator1 = iteratorMatch[1].trim();\n+            if (iteratorMatch[2]) {\n+                res.iterator2 = iteratorMatch[2].trim();\n+            }\n+        } else {\n+            res.alias = alias;\n+        }\n+        return res\n+    }\n+\n+    function processIf (el) {\n+        var exp = getAndRemoveAttr(el, 'v-if');\n+        if (exp) {\n+            el.if = exp;\n+            addIfCondition(el, {\n+                exp: exp,\n+                block: el\n+            });\n+        } else {\n+            if (getAndRemoveAttr(el, 'v-else') != null) {\n+                el.else = true;\n+            }\n+            var elseif = getAndRemoveAttr(el, 'v-else-if');\n+            if (elseif) {\n+                el.elseif = elseif;\n+            }\n+        }\n+    }\n+\n+    function processIfConditions (el, parent) {\n+        var prev = findPrevElement(parent.children);\n+        if (prev && prev.if) {\n+            addIfCondition(prev, {\n+                exp: el.elseif,\n+                block: el\n+            });\n+        } else {\n+            warn$2(\n+                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n+                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\n+                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n+            );\n+        }\n+    }\n+\n+    function findPrevElement (children) {\n+        var i = children.length;\n+        while (i--) {\n+            if (children[i].type === 1) {\n+                return children[i]\n+            } else {\n+                if (children[i].text !== ' ') {\n+                    warn$2(\n+                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n+                        \"will be ignored.\",\n+                        children[i]\n+                    );\n+                }\n+                children.pop();\n+            }\n+        }\n+    }\n+\n+    function addIfCondition (el, condition) {\n+        if (!el.ifConditions) {\n+            el.ifConditions = [];\n+        }\n+        el.ifConditions.push(condition);\n+    }\n+\n+    function processOnce (el) {\n+        var once$$1 = getAndRemoveAttr(el, 'v-once');\n+        if (once$$1 != null) {\n+            el.once = true;\n+        }\n+    }\n+\n+    \u002F\u002F handle content being passed to a component as slot,\n+    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\n+    function processSlotContent (el) {\n+        var slotScope;\n+        if (el.tag === 'template') {\n+            slotScope = getAndRemoveAttr(el, 'scope');\n+          \u002F* istanbul ignore if *\u002F\n+            if (slotScope) {\n+                warn$2(\n+                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n+                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n+                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\n+                    \"denote scoped slots.\",\n+                    el.rawAttrsMap['scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n+        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (el.attrsMap['v-for']) {\n+                warn$2(\n+                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\n+                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\n+                    \"scoped slot to make it clearer.\",\n+                    el.rawAttrsMap['slot-scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope;\n+        }\n+\n+        \u002F\u002F slot=\"xxx\"\n+        var slotTarget = getBindingAttr(el, 'slot');\n+        if (slotTarget) {\n+            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n+            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n+            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\n+            \u002F\u002F only for non-scoped slots.\n+            if (el.tag !== 'template' && !el.slotScope) {\n+                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n+            }\n+        }\n+\n+        \u002F\u002F 2.6 v-slot syntax\n+        {\n+            if (el.tag === 'template') {\n+                \u002F\u002F v-slot on \u003Ctemplate>\n+                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding) {\n+                    {\n+                        if (el.slotTarget || el.slotScope) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.parent && !maybeComponent(el.parent)) {\n+                            warn$2(\n+                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\n+                                \"the receiving the component\",\n+                                el\n+                            );\n+                        }\n+                    }\n+                    var ref = getSlotName(slotBinding);\n+                    var name = ref.name;\n+                    var dynamic = ref.dynamic;\n+                    el.slotTarget = name;\n+                    el.slotTargetDynamic = dynamic;\n+                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\n+                }\n+            } else {\n+                \u002F\u002F v-slot on component, denotes default slot\n+                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding$1) {\n+                    {\n+                        if (!maybeComponent(el)) {\n+                            warn$2(\n+                                \"v-slot can only be used on components or \u003Ctemplate>.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                        if (el.slotScope || el.slotTarget) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.scopedSlots) {\n+                            warn$2(\n+                                \"To avoid scope ambiguity, the default slot should also use \" +\n+                                \"\u003Ctemplate> syntax when there are other named slots.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                    }\n+                    \u002F\u002F add the component's children to its default slot\n+                    var slots = el.scopedSlots || (el.scopedSlots = {});\n+                    var ref$1 = getSlotName(slotBinding$1);\n+                    var name$1 = ref$1.name;\n+                    var dynamic$1 = ref$1.dynamic;\n+                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\n+                    slotContainer.slotTarget = name$1;\n+                    slotContainer.slotTargetDynamic = dynamic$1;\n+                    slotContainer.children = el.children.filter(function (c) {\n+                        if (!c.slotScope) {\n+                            c.parent = slotContainer;\n+                            return true\n+                        }\n+                    });\n+                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n+                    \u002F\u002F remove children as they are returned from scopedSlots now\n+                    el.children = [];\n+                    \u002F\u002F mark el non-plain so data gets generated\n+                    el.plain = false;\n+                }\n+            }\n+        }\n+    }\n+\n+    function getSlotName (binding) {\n+        var name = binding.name.replace(slotRE, '');\n+        if (!name) {\n+            if (binding.name[0] !== '#') {\n+                name = 'default';\n+            } else {\n+                warn$2(\n+                    \"v-slot shorthand syntax requires a slot name.\",\n+                    binding\n+                );\n+            }\n+        }\n+        return dynamicArgRE.test(name)\n+            \u002F\u002F dynamic [name]\n+            ? { name: name.slice(1, -1), dynamic: true }\n+            \u002F\u002F static name\n+            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n+    }\n+\n+    \u002F\u002F handle \u003Cslot\u002F> outlets\n+    function processSlotOutlet (el) {\n+        if (el.tag === 'slot') {\n+            el.slotName = getBindingAttr(el, 'name');\n+            if (el.key) {\n+                warn$2(\n+                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\n+                    \"and can possibly expand into multiple elements. \" +\n+                    \"Use the key on a wrapping element instead.\",\n+                    getRawBindingAttr(el, 'key')\n+                );\n+            }\n+        }\n+    }\n+\n+    function processComponent (el) {\n+        var binding;\n+        if ((binding = getBindingAttr(el, 'is'))) {\n+            el.component = binding;\n+        }\n+        if (getAndRemoveAttr(el, 'inline-template') != null) {\n+            el.inlineTemplate = true;\n+        }\n+    }\n+\n+    function processAttrs (el) {\n+        var list = el.attrsList;\n+        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n+        for (i = 0, l = list.length; i \u003C l; i++) {\n+            name = rawName = list[i].name;\n+            value = list[i].value;\n+            if (dirRE.test(name)) {\n+                \u002F\u002F mark element as dynamic\n+                el.hasBindings = true;\n+                \u002F\u002F modifiers\n+                modifiers = parseModifiers(name.replace(dirRE, ''));\n+                \u002F\u002F support .foo shorthand syntax for the .prop modifier\n+                if (modifiers) {\n+                    name = name.replace(modifierRE, '');\n+                }\n+                if (bindRE.test(name)) { \u002F\u002F v-bind\n+                    name = name.replace(bindRE, '');\n+                    value = parseFilters(value);\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    if (\n+                        value.trim().length === 0\n+                    ) {\n+                        warn$2(\n+                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n+                        );\n+                    }\n+                    if (modifiers) {\n+                        if (modifiers.prop && !isDynamic) {\n+                            name = camelize(name);\n+                            if (name === 'innerHtml') { name = 'innerHTML'; }\n+                        }\n+                        if (modifiers.camel && !isDynamic) {\n+                            name = camelize(name);\n+                        }\n+                        if (modifiers.sync) {\n+                            syncGen = genAssignmentCode(value, \"$event\");\n+                            if (!isDynamic) {\n+                                addHandler(\n+                                    el,\n+                                    (\"update:\" + (camelize(name))),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i]\n+                                );\n+                                if (hyphenate(name) !== camelize(name)) {\n+                                    addHandler(\n+                                        el,\n+                                        (\"update:\" + (hyphenate(name))),\n+                                        syncGen,\n+                                        null,\n+                                        false,\n+                                        warn$2,\n+                                        list[i]\n+                                    );\n+                                }\n+                            } else {\n+                                \u002F\u002F handler w\u002F dynamic event name\n+                                addHandler(\n+                                    el,\n+                                    (\"\\\"update:\\\"+(\" + name + \")\"),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i],\n+                                    true \u002F\u002F dynamic\n+                                );\n+                            }\n+                        }\n+                    }\n+                    if ((modifiers && modifiers.prop) || (\n+                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n+                        )) {\n+                        addProp(el, name, value, list[i], isDynamic);\n+                    } else {\n+                        addAttr(el, name, value, list[i], isDynamic);\n+                    }\n+                } else if (onRE.test(name)) { \u002F\u002F v-on\n+                    name = name.replace(onRE, '');\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n+                } else { \u002F\u002F normal directives\n+                    name = name.replace(dirRE, '');\n+                    \u002F\u002F parse arg\n+                    var argMatch = name.match(argRE);\n+                    var arg = argMatch && argMatch[1];\n+                    isDynamic = false;\n+                    if (arg) {\n+                        name = name.slice(0, -(arg.length + 1));\n+                        if (dynamicArgRE.test(arg)) {\n+                            arg = arg.slice(1, -1);\n+                            isDynamic = true;\n+                        }\n+                    }\n+                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n+                    if (name === 'model') {\n+                        checkForAliasModel(el, value);\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F literal attribute\n+                {\n+                    var res = parseText(value, delimiters);\n+                    if (res) {\n+                        warn$2(\n+                            name + \"=\\\"\" + value + \"\\\": \" +\n+                            'Interpolation inside attributes has been removed. ' +\n+                            'Use v-bind or the colon shorthand instead. For example, ' +\n+                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\n+                            list[i]\n+                        );\n+                    }\n+                }\n+                addAttr(el, name, JSON.stringify(value), list[i]);\n+                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\n+                \u002F\u002F even immediately after element creation\n+                if (!el.component &&\n+                    name === 'muted' &&\n+                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n+                    addProp(el, name, 'true', list[i]);\n+                }\n+            }\n+        }\n+    }\n+\n+    function checkInFor (el) {\n+        var parent = el;\n+        while (parent) {\n+            if (parent.for !== undefined) {\n+                return true\n+            }\n+            parent = parent.parent;\n+        }\n+        return false\n+    }\n+\n+    function parseModifiers (name) {\n+        var match = name.match(modifierRE);\n+        if (match) {\n+            var ret = {};\n+            match.forEach(function (m) { ret[m.slice(1)] = true; });\n+            return ret\n+        }\n+    }\n+\n+    function makeAttrsMap (attrs) {\n+        var map = {};\n+        for (var i = 0, l = attrs.length; i \u003C l; i++) {\n+            if (\n+                map[attrs[i].name] && !isIE && !isEdge\n+            ) {\n+                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n+            }\n+            map[attrs[i].name] = attrs[i].value;\n+        }\n+        return map\n+    }\n+\n+    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\n+    function isTextTag (el) {\n+        return el.tag === 'script' || el.tag === 'style'\n+    }\n+\n+    function isForbiddenTag (el) {\n+        return (\n+            el.tag === 'style' ||\n+            (el.tag === 'script' && (\n+                !el.attrsMap.type ||\n+                el.attrsMap.type === 'text\u002Fjavascript'\n+            ))\n+        )\n+    }\n+\n+    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\n+    var ieNSPrefix = \u002F^NS\\d+:\u002F;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function guardIESVGBug (attrs) {\n+        var res = [];\n+        for (var i = 0; i \u003C attrs.length; i++) {\n+            var attr = attrs[i];\n+            if (!ieNSBug.test(attr.name)) {\n+                attr.name = attr.name.replace(ieNSPrefix, '');\n+                res.push(attr);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkForAliasModel (el, value) {\n+        var _el = el;\n+        while (_el) {\n+            if (_el.for && _el.alias === value) {\n+                warn$2(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                    \"You are binding v-model directly to a v-for iteration alias. \" +\n+                    \"This will not be able to modify the v-for source array because \" +\n+                    \"writing to the alias is like modifying a function local variable. \" +\n+                    \"Consider using an array of objects and use v-model on an object property instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+            _el = _el.parent;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function preTransformNode (el, options) {\n+        if (el.tag === 'input') {\n+            var map = el.attrsMap;\n+            if (!map['v-model']) {\n+                return\n+            }\n+\n+            var typeBinding;\n+            if (map[':type'] || map['v-bind:type']) {\n+                typeBinding = getBindingAttr(el, 'type');\n+            }\n+            if (!map.type && !typeBinding && map['v-bind']) {\n+                typeBinding = \"(\" + (map['v-bind']) + \").type\";\n+            }\n+\n+            if (typeBinding) {\n+                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n+                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n+                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n+                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n+                \u002F\u002F 1. checkbox\n+                var branch0 = cloneASTElement(el);\n+                \u002F\u002F process for on the main node\n+                processFor(branch0);\n+                addRawAttr(branch0, 'type', 'checkbox');\n+                processElement(branch0, options);\n+                branch0.processed = true; \u002F\u002F prevent it from double-processed\n+                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n+                addIfCondition(branch0, {\n+                    exp: branch0.if,\n+                    block: branch0\n+                });\n+                \u002F\u002F 2. add radio else-if condition\n+                var branch1 = cloneASTElement(el);\n+                getAndRemoveAttr(branch1, 'v-for', true);\n+                addRawAttr(branch1, 'type', 'radio');\n+                processElement(branch1, options);\n+                addIfCondition(branch0, {\n+                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n+                    block: branch1\n+                });\n+                \u002F\u002F 3. other\n+                var branch2 = cloneASTElement(el);\n+                getAndRemoveAttr(branch2, 'v-for', true);\n+                addRawAttr(branch2, ':type', typeBinding);\n+                processElement(branch2, options);\n+                addIfCondition(branch0, {\n+                    exp: ifCondition,\n+                    block: branch2\n+                });\n+\n+                if (hasElse) {\n+                    branch0.else = true;\n+                } else if (elseIfCondition) {\n+                    branch0.elseif = elseIfCondition;\n+                }\n+\n+                return branch0\n+            }\n+        }\n+    }\n+\n+    function cloneASTElement (el) {\n+        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n+    }\n+\n+    var model$1 = {\n+        preTransformNode: preTransformNode\n+    };\n+\n+    var modules$1 = [\n+        klass$1,\n+        style$1,\n+        model$1\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function text (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function html (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+    var directives$1 = {\n+        model: model,\n+        text: text,\n+        html: html\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var baseOptions = {\n+        expectHTML: true,\n+        modules: modules$1,\n+        directives: directives$1,\n+        isPreTag: isPreTag,\n+        isUnaryTag: isUnaryTag,\n+        mustUseProp: mustUseProp,\n+        canBeLeftOpenTag: canBeLeftOpenTag,\n+        isReservedTag: isReservedTag,\n+        getTagNamespace: getTagNamespace,\n+        staticKeys: genStaticKeys(modules$1)\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isStaticKey;\n+    var isPlatformReservedTag;\n+\n+    var genStaticKeysCached = cached(genStaticKeys$1);\n+\n+    \u002F**\n+     * Goal of the optimizer: walk the generated template AST tree\n+     * and detect sub-trees that are purely static, i.e. parts of\n+     * the DOM that never needs to change.\n+     *\n+     * Once we detect these sub-trees, we can:\n+     *\n+     * 1. Hoist them into constants, so that we no longer need to\n+     *    create fresh nodes for them on each re-render;\n+     * 2. Completely skip them in the patching process.\n+     *\u002F\n+    function optimize (root, options) {\n+        if (!root) { return }\n+        isStaticKey = genStaticKeysCached(options.staticKeys || '');\n+        isPlatformReservedTag = options.isReservedTag || no;\n+        \u002F\u002F first pass: mark all non-static nodes.\n+        markStatic$1(root);\n+        \u002F\u002F second pass: mark static roots.\n+        markStaticRoots(root, false);\n+    }\n+\n+    function genStaticKeys$1 (keys) {\n+        return makeMap(\n+            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n+            (keys ? ',' + keys : '')\n+        )\n+    }\n+\n+    function markStatic$1 (node) {\n+        node.static = isStatic(node);\n+        if (node.type === 1) {\n+            \u002F\u002F do not make component slot content static. this avoids\n+            \u002F\u002F 1. components not able to mutate slot nodes\n+            \u002F\u002F 2. static slot content fails for hot-reloading\n+            if (\n+                !isPlatformReservedTag(node.tag) &&\n+                node.tag !== 'slot' &&\n+                node.attrsMap['inline-template'] == null\n+            ) {\n+                return\n+            }\n+            for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                var child = node.children[i];\n+                markStatic$1(child);\n+                if (!child.static) {\n+                    node.static = false;\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    var block = node.ifConditions[i$1].block;\n+                    markStatic$1(block);\n+                    if (!block.static) {\n+                        node.static = false;\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    function markStaticRoots (node, isInFor) {\n+        if (node.type === 1) {\n+            if (node.static || node.once) {\n+                node.staticInFor = isInFor;\n+            }\n+            \u002F\u002F For a node to qualify as a static root, it should have children that\n+            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\n+            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\n+            if (node.static && node.children.length && !(\n+                    node.children.length === 1 &&\n+                    node.children[0].type === 3\n+                )) {\n+                node.staticRoot = true;\n+                return\n+            } else {\n+                node.staticRoot = false;\n+            }\n+            if (node.children) {\n+                for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                    markStaticRoots(node.children[i], isInFor || !!node.for);\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\n+                }\n+            }\n+        }\n+    }\n+\n+    function isStatic (node) {\n+        if (node.type === 2) { \u002F\u002F expression\n+            return false\n+        }\n+        if (node.type === 3) { \u002F\u002F text\n+            return true\n+        }\n+        return !!(node.pre || (\n+            !node.hasBindings && \u002F\u002F no dynamic bindings\n+            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\n+            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\n+            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\n+            !isDirectChildOfTemplateFor(node) &&\n+            Object.keys(node).every(isStaticKey)\n+        ))\n+    }\n+\n+    function isDirectChildOfTemplateFor (node) {\n+        while (node.parent) {\n+            node = node.parent;\n+            if (node.tag !== 'template') {\n+                return false\n+            }\n+            if (node.for) {\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\n+    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\n+    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\n+\n+    \u002F\u002F KeyboardEvent.keyCode aliases\n+    var keyCodes = {\n+        esc: 27,\n+        tab: 9,\n+        enter: 13,\n+        space: 32,\n+        up: 38,\n+        left: 37,\n+        right: 39,\n+        down: 40,\n+        'delete': [8, 46]\n+    };\n+\n+    \u002F\u002F KeyboardEvent.key aliases\n+    var keyNames = {\n+        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\n+        esc: ['Esc', 'Escape'],\n+        tab: 'Tab',\n+        enter: 'Enter',\n+        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\n+        space: [' ', 'Spacebar'],\n+        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n+        up: ['Up', 'ArrowUp'],\n+        left: ['Left', 'ArrowLeft'],\n+        right: ['Right', 'ArrowRight'],\n+        down: ['Down', 'ArrowDown'],\n+        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\n+        'delete': ['Backspace', 'Delete', 'Del']\n+    };\n+\n+    \u002F\u002F #4868: modifiers that prevent the execution of the listener\n+    \u002F\u002F need to explicitly return null so that we can determine whether to remove\n+    \u002F\u002F the listener for .once\n+    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n+\n+    var modifierCode = {\n+        stop: '$event.stopPropagation();',\n+        prevent: '$event.preventDefault();',\n+        self: genGuard(\"$event.target !== $event.currentTarget\"),\n+        ctrl: genGuard(\"!$event.ctrlKey\"),\n+        shift: genGuard(\"!$event.shiftKey\"),\n+        alt: genGuard(\"!$event.altKey\"),\n+        meta: genGuard(\"!$event.metaKey\"),\n+        left: genGuard(\"'button' in $event && $event.button !== 0\"),\n+        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n+        right: genGuard(\"'button' in $event && $event.button !== 2\")\n+    };\n+\n+    function genHandlers (\n+        events,\n+        isNative\n+    ) {\n+        var prefix = isNative ? 'nativeOn:' : 'on:';\n+        var staticHandlers = \"\";\n+        var dynamicHandlers = \"\";\n+        for (var name in events) {\n+            var handlerCode = genHandler(events[name]);\n+            if (events[name] && events[name].dynamic) {\n+                dynamicHandlers += name + \",\" + handlerCode + \",\";\n+            } else {\n+                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n+            }\n+        }\n+        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n+        if (dynamicHandlers) {\n+            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n+        } else {\n+            return prefix + staticHandlers\n+        }\n+    }\n+\n+    function genHandler (handler) {\n+        if (!handler) {\n+            return 'function(){}'\n+        }\n+\n+        if (Array.isArray(handler)) {\n+            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n+        }\n+\n+        var isMethodPath = simplePathRE.test(handler.value);\n+        var isFunctionExpression = fnExpRE.test(handler.value);\n+        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n+\n+        if (!handler.modifiers) {\n+            if (isMethodPath || isFunctionExpression) {\n+                return handler.value\n+            }\n+            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\n+        } else {\n+            var code = '';\n+            var genModifierCode = '';\n+            var keys = [];\n+            for (var key in handler.modifiers) {\n+                if (modifierCode[key]) {\n+                    genModifierCode += modifierCode[key];\n+                    \u002F\u002F left\u002Fright\n+                    if (keyCodes[key]) {\n+                        keys.push(key);\n+                    }\n+                } else if (key === 'exact') {\n+                    var modifiers = (handler.modifiers);\n+                    genModifierCode += genGuard(\n+                        ['ctrl', 'shift', 'alt', 'meta']\n+                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n+                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n+                            .join('||')\n+                    );\n+                } else {\n+                    keys.push(key);\n+                }\n+            }\n+            if (keys.length) {\n+                code += genKeyFilter(keys);\n+            }\n+            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\n+            if (genModifierCode) {\n+                code += genModifierCode;\n+            }\n+            var handlerCode = isMethodPath\n+                ? (\"return \" + (handler.value) + \"($event)\")\n+                : isFunctionExpression\n+                    ? (\"return (\" + (handler.value) + \")($event)\")\n+                    : isFunctionInvocation\n+                        ? (\"return \" + (handler.value))\n+                        : handler.value;\n+            return (\"function($event){\" + code + handlerCode + \"}\")\n+        }\n+    }\n+\n+    function genKeyFilter (keys) {\n+        return (\n+            \u002F\u002F make sure the key filters only apply to KeyboardEvents\n+            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n+            \u002F\u002F key events that do not have keyCode property...\n+            \"if(!$event.type.indexOf('key')&&\" +\n+            (keys.map(genFilterCode).join('&&')) + \")return null;\"\n+        )\n+    }\n+\n+    function genFilterCode (key) {\n+        var keyVal = parseInt(key, 10);\n+        if (keyVal) {\n+            return (\"$event.keyCode!==\" + keyVal)\n+        }\n+        var keyCode = keyCodes[key];\n+        var keyName = keyNames[key];\n+        return (\n+            \"_k($event.keyCode,\" +\n+            (JSON.stringify(key)) + \",\" +\n+            (JSON.stringify(keyCode)) + \",\" +\n+            \"$event.key,\" +\n+            \"\" + (JSON.stringify(keyName)) +\n+            \")\"\n+        )\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function on (el, dir) {\n+        if (dir.modifiers) {\n+            warn(\"v-on without argument does not support modifiers.\");\n+        }\n+        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bind$1 (el, dir) {\n+        el.wrapData = function (code) {\n+            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var baseDirectives = {\n+        on: on,\n+        bind: bind$1,\n+        cloak: noop\n+    };\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+\n+\n+    var CodegenState = function CodegenState (options) {\n+        this.options = options;\n+        this.warn = options.warn || baseWarn;\n+        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n+        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n+        this.directives = extend(extend({}, baseDirectives), options.directives);\n+        var isReservedTag = options.isReservedTag || no;\n+        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+        this.onceId = 0;\n+        this.staticRenderFns = [];\n+        this.pre = false;\n+    };\n+\n+\n+\n+    function generate (\n+        ast,\n+        options\n+    ) {\n+        var state = new CodegenState(options);\n+        var code = ast ? genElement(ast, state) : '_c(\"div\")';\n+        return {\n+            render: (\"with(this){return \" + code + \"}\"),\n+            staticRenderFns: state.staticRenderFns\n+        }\n+    }\n+\n+    function genElement (el, state) {\n+        if (el.parent) {\n+            el.pre = el.pre || el.parent.pre;\n+        }\n+\n+        if (el.staticRoot && !el.staticProcessed) {\n+            return genStatic(el, state)\n+        } else if (el.once && !el.onceProcessed) {\n+            return genOnce(el, state)\n+        } else if (el.for && !el.forProcessed) {\n+            return genFor(el, state)\n+        } else if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n+            return genChildren(el, state) || 'void 0'\n+        } else if (el.tag === 'slot') {\n+            return genSlot(el, state)\n+        } else {\n+            \u002F\u002F component or element\n+            var code;\n+            if (el.component) {\n+                code = genComponent(el.component, el, state);\n+            } else {\n+                var data;\n+                if (!el.plain || (el.pre && state.maybeComponent(el))) {\n+                    data = genData$2(el, state);\n+                }\n+\n+                var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n+            }\n+            \u002F\u002F module transforms\n+            for (var i = 0; i \u003C state.transforms.length; i++) {\n+                code = state.transforms[i](el, code);\n+            }\n+            return code\n+        }\n+    }\n+\n+    \u002F\u002F hoist static sub-trees out\n+    function genStatic (el, state) {\n+        el.staticProcessed = true;\n+        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\n+        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\n+        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\n+        var originalPreState = state.pre;\n+        if (el.pre) {\n+            state.pre = el.pre;\n+        }\n+        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n+        state.pre = originalPreState;\n+        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n+    }\n+\n+    \u002F\u002F v-once\n+    function genOnce (el, state) {\n+        el.onceProcessed = true;\n+        if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.staticInFor) {\n+            var key = '';\n+            var parent = el.parent;\n+            while (parent) {\n+                if (parent.for) {\n+                    key = parent.key;\n+                    break\n+                }\n+                parent = parent.parent;\n+            }\n+            if (!key) {\n+                state.warn(\n+                    \"v-once can only be used inside v-for that is keyed. \",\n+                    el.rawAttrsMap['v-once']\n+                );\n+                return genElement(el, state)\n+            }\n+            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n+        } else {\n+            return genStatic(el, state)\n+        }\n+    }\n+\n+    function genIf (\n+        el,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        el.ifProcessed = true; \u002F\u002F avoid recursion\n+        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n+    }\n+\n+    function genIfConditions (\n+        conditions,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        if (!conditions.length) {\n+            return altEmpty || '_e()'\n+        }\n+\n+        var condition = conditions.shift();\n+        if (condition.exp) {\n+            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n+        } else {\n+            return (\"\" + (genTernaryExp(condition.block)))\n+        }\n+\n+        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\n+        function genTernaryExp (el) {\n+            return altGen\n+                ? altGen(el, state)\n+                : el.once\n+                    ? genOnce(el, state)\n+                    : genElement(el, state)\n+        }\n+    }\n+\n+    function genFor (\n+        el,\n+        state,\n+        altGen,\n+        altHelper\n+    ) {\n+        var exp = el.for;\n+        var alias = el.alias;\n+        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n+        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n+\n+        if (state.maybeComponent(el) &&\n+            el.tag !== 'slot' &&\n+            el.tag !== 'template' &&\n+            !el.key\n+        ) {\n+            state.warn(\n+                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n+                \"v-for should have explicit keys. \" +\n+                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\n+                el.rawAttrsMap['v-for'],\n+                true \u002F* tip *\u002F\n+            );\n+        }\n+\n+        el.forProcessed = true; \u002F\u002F avoid recursion\n+        return (altHelper || '_l') + \"((\" + exp + \"),\" +\n+            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n+            \"return \" + ((altGen || genElement)(el, state)) +\n+            '})'\n+    }\n+\n+    function genData$2 (el, state) {\n+        var data = '{';\n+\n+        \u002F\u002F directives first.\n+        \u002F\u002F directives may mutate the el's other properties before they are generated.\n+        var dirs = genDirectives(el, state);\n+        if (dirs) { data += dirs + ','; }\n+\n+        \u002F\u002F key\n+        if (el.key) {\n+            data += \"key:\" + (el.key) + \",\";\n+        }\n+        \u002F\u002F ref\n+        if (el.ref) {\n+            data += \"ref:\" + (el.ref) + \",\";\n+        }\n+        if (el.refInFor) {\n+            data += \"refInFor:true,\";\n+        }\n+        \u002F\u002F pre\n+        if (el.pre) {\n+            data += \"pre:true,\";\n+        }\n+        \u002F\u002F record original tag name for components using \"is\" attribute\n+        if (el.component) {\n+            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n+        }\n+        \u002F\u002F module data generation functions\n+        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\n+            data += state.dataGenFns[i](el);\n+        }\n+        \u002F\u002F attributes\n+        if (el.attrs) {\n+            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n+        }\n+        \u002F\u002F DOM props\n+        if (el.props) {\n+            data += \"domProps:\" + (genProps(el.props)) + \",\";\n+        }\n+        \u002F\u002F event handlers\n+        if (el.events) {\n+            data += (genHandlers(el.events, false)) + \",\";\n+        }\n+        if (el.nativeEvents) {\n+            data += (genHandlers(el.nativeEvents, true)) + \",\";\n+        }\n+        \u002F\u002F slot target\n+        \u002F\u002F only for non-scoped slots\n+        if (el.slotTarget && !el.slotScope) {\n+            data += \"slot:\" + (el.slotTarget) + \",\";\n+        }\n+        \u002F\u002F scoped slots\n+        if (el.scopedSlots) {\n+            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n+        }\n+        \u002F\u002F component v-model\n+        if (el.model) {\n+            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n+        }\n+        \u002F\u002F inline-template\n+        if (el.inlineTemplate) {\n+            var inlineTemplate = genInlineTemplate(el, state);\n+            if (inlineTemplate) {\n+                data += inlineTemplate + \",\";\n+            }\n+        }\n+        data = data.replace(\u002F,$\u002F, '') + '}';\n+        \u002F\u002F v-bind dynamic argument wrap\n+        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\n+        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\n+        if (el.dynamicAttrs) {\n+            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n+        }\n+        \u002F\u002F v-bind data wrap\n+        if (el.wrapData) {\n+            data = el.wrapData(data);\n+        }\n+        \u002F\u002F v-on data wrap\n+        if (el.wrapListeners) {\n+            data = el.wrapListeners(data);\n+        }\n+        return data\n+    }\n+\n+    function genDirectives (el, state) {\n+        var dirs = el.directives;\n+        if (!dirs) { return }\n+        var res = 'directives:[';\n+        var hasRuntime = false;\n+        var i, l, dir, needRuntime;\n+        for (i = 0, l = dirs.length; i \u003C l; i++) {\n+            dir = dirs[i];\n+            needRuntime = true;\n+            var gen = state.directives[dir.name];\n+            if (gen) {\n+                \u002F\u002F compile-time directive that manipulates AST.\n+                \u002F\u002F returns true if it also needs a runtime counterpart.\n+                needRuntime = !!gen(el, dir, state.warn);\n+            }\n+            if (needRuntime) {\n+                hasRuntime = true;\n+                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n+            }\n+        }\n+        if (hasRuntime) {\n+            return res.slice(0, -1) + ']'\n+        }\n+    }\n+\n+    function genInlineTemplate (el, state) {\n+        var ast = el.children[0];\n+        if (el.children.length !== 1 || ast.type !== 1) {\n+            state.warn(\n+                'Inline-template components must have exactly one child element.',\n+                { start: el.start }\n+            );\n+        }\n+        if (ast && ast.type === 1) {\n+            var inlineRenderFns = generate(ast, state.options);\n+            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n+        }\n+    }\n+\n+    function genScopedSlots (\n+        el,\n+        slots,\n+        state\n+    ) {\n+        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\n+        \u002F\u002F components with only scoped slots to skip forced updates from parent.\n+        \u002F\u002F but in some cases we have to bail-out of this optimization\n+        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\n+        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n+                var slot = slots[key];\n+                return (\n+                    slot.slotTargetDynamic ||\n+                    slot.if ||\n+                    slot.for ||\n+                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\n+                )\n+            });\n+\n+        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\n+        \u002F\u002F it's possible for the same component to be reused but with different\n+        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\n+        \u002F\u002F the generated code of all the slot contents.\n+        var needsKey = !!el.if;\n+\n+        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\n+        \u002F\u002F disconnected due to the intermediate scope variable)\n+        \u002F\u002F #9438, #9506\n+        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\n+        \u002F\u002F and skip force updating ones that do not actually use scope variables.\n+        if (!needsForceUpdate) {\n+            var parent = el.parent;\n+            while (parent) {\n+                if (\n+                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n+                    parent.for\n+                ) {\n+                    needsForceUpdate = true;\n+                    break\n+                }\n+                if (parent.if) {\n+                    needsKey = true;\n+                }\n+                parent = parent.parent;\n+            }\n+        }\n+\n+        var generatedSlots = Object.keys(slots)\n+            .map(function (key) { return genScopedSlot(slots[key], state); })\n+            .join(',');\n+\n+        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n+    }\n+\n+    function hash(str) {\n+        var hash = 5381;\n+        var i = str.length;\n+        while(i) {\n+            hash = (hash * 33) ^ str.charCodeAt(--i);\n+        }\n+        return hash >>> 0\n+    }\n+\n+    function containsSlotChild (el) {\n+        if (el.type === 1) {\n+            if (el.tag === 'slot') {\n+                return true\n+            }\n+            return el.children.some(containsSlotChild)\n+        }\n+        return false\n+    }\n+\n+    function genScopedSlot (\n+        el,\n+        state\n+    ) {\n+        var isLegacySyntax = el.attrsMap['slot-scope'];\n+        if (el.if && !el.ifProcessed && !isLegacySyntax) {\n+            return genIf(el, state, genScopedSlot, \"null\")\n+        }\n+        if (el.for && !el.forProcessed) {\n+            return genFor(el, state, genScopedSlot)\n+        }\n+        var slotScope = el.slotScope === emptySlotScopeToken\n+            ? \"\"\n+            : String(el.slotScope);\n+        var fn = \"function(\" + slotScope + \"){\" +\n+            \"return \" + (el.tag === 'template'\n+                ? el.if && isLegacySyntax\n+                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n+                    : genChildren(el, state) || 'undefined'\n+                : genElement(el, state)) + \"}\";\n+        \u002F\u002F reverse proxy v-slot without scope on this.$slots\n+        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n+        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n+    }\n+\n+    function genChildren (\n+        el,\n+        state,\n+        checkSkip,\n+        altGenElement,\n+        altGenNode\n+    ) {\n+        var children = el.children;\n+        if (children.length) {\n+            var el$1 = children[0];\n+            \u002F\u002F optimize single v-for\n+            if (children.length === 1 &&\n+                el$1.for &&\n+                el$1.tag !== 'template' &&\n+                el$1.tag !== 'slot'\n+            ) {\n+                var normalizationType = checkSkip\n+                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n+                    : \"\";\n+                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n+            }\n+            var normalizationType$1 = checkSkip\n+                ? getNormalizationType(children, state.maybeComponent)\n+                : 0;\n+            var gen = altGenNode || genNode;\n+            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n+        }\n+    }\n+\n+    \u002F\u002F determine the normalization needed for the children array.\n+    \u002F\u002F 0: no normalization needed\n+    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\n+    \u002F\u002F 2: full normalization needed\n+    function getNormalizationType (\n+        children,\n+        maybeComponent\n+    ) {\n+        var res = 0;\n+        for (var i = 0; i \u003C children.length; i++) {\n+            var el = children[i];\n+            if (el.type !== 1) {\n+                continue\n+            }\n+            if (needsNormalization(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n+                res = 2;\n+                break\n+            }\n+            if (maybeComponent(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n+                res = 1;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function needsNormalization (el) {\n+        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n+    }\n+\n+    function genNode (node, state) {\n+        if (node.type === 1) {\n+            return genElement(node, state)\n+        } else if (node.type === 3 && node.isComment) {\n+            return genComment(node)\n+        } else {\n+            return genText(node)\n+        }\n+    }\n+\n+    function genText (text) {\n+        return (\"_v(\" + (text.type === 2\n+            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\n+            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n+    }\n+\n+    function genComment (comment) {\n+        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n+    }\n+\n+    function genSlot (el, state) {\n+        var slotName = el.slotName || '\"default\"';\n+        var children = genChildren(el, state);\n+        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n+        var attrs = el.attrs || el.dynamicAttrs\n+            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n+                \u002F\u002F slot props are camelized\n+                name: camelize(attr.name),\n+                value: attr.value,\n+                dynamic: attr.dynamic\n+            }); }))\n+            : null;\n+        var bind$$1 = el.attrsMap['v-bind'];\n+        if ((attrs || bind$$1) && !children) {\n+            res += \",null\";\n+        }\n+        if (attrs) {\n+            res += \",\" + attrs;\n+        }\n+        if (bind$$1) {\n+            res += (attrs ? '' : ',null') + \",\" + bind$$1;\n+        }\n+        return res + ')'\n+    }\n+\n+    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\n+    function genComponent (\n+        componentName,\n+        el,\n+        state\n+    ) {\n+        var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n+    }\n+\n+    function genProps (props) {\n+        var staticProps = \"\";\n+        var dynamicProps = \"\";\n+        for (var i = 0; i \u003C props.length; i++) {\n+            var prop = props[i];\n+            var value = transformSpecialNewlines(prop.value);\n+            if (prop.dynamic) {\n+                dynamicProps += (prop.name) + \",\" + value + \",\";\n+            } else {\n+                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n+            }\n+        }\n+        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n+        if (dynamicProps) {\n+            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n+        } else {\n+            return staticProps\n+        }\n+    }\n+\n+    \u002F\u002F #3895, #4268\n+    function transformSpecialNewlines (text) {\n+        return text\n+            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\n+            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F\u002F these keywords should not appear inside expressions, but operators like\n+    \u002F\u002F typeof, instanceof and in are allowed\n+    var prohibitedKeywordRE = new RegExp('\\\\b' + (\n+            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n+            'super,throw,while,yield,delete,export,import,return,switch,default,' +\n+            'extends,finally,continue,debugger,function,arguments'\n+        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\n+\n+    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\n+    var unaryOperatorsRE = new RegExp('\\\\b' + (\n+            'delete,typeof,void'\n+        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n+\n+    \u002F\u002F strip strings in expressions\n+    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\n+\n+    \u002F\u002F detect problematic expressions in a template\n+    function detectErrors (ast, warn) {\n+        if (ast) {\n+            checkNode(ast, warn);\n+        }\n+    }\n+\n+    function checkNode (node, warn) {\n+        if (node.type === 1) {\n+            for (var name in node.attrsMap) {\n+                if (dirRE.test(name)) {\n+                    var value = node.attrsMap[name];\n+                    if (value) {\n+                        var range = node.rawAttrsMap[name];\n+                        if (name === 'v-for') {\n+                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else if (onRE.test(name)) {\n+                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else {\n+                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        }\n+                    }\n+                }\n+            }\n+            if (node.children) {\n+                for (var i = 0; i \u003C node.children.length; i++) {\n+                    checkNode(node.children[i], warn);\n+                }\n+            }\n+        } else if (node.type === 2) {\n+            checkExpression(node.expression, node.text, warn, node);\n+        }\n+    }\n+\n+    function checkEvent (exp, text, warn, range) {\n+        var stipped = exp.replace(stripStringRE, '');\n+        var keywordMatch = stipped.match(unaryOperatorsRE);\n+        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n+            warn(\n+                \"avoid using JavaScript unary operator as property name: \" +\n+                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n+                range\n+            );\n+        }\n+        checkExpression(exp, text, warn, range);\n+    }\n+\n+    function checkFor (node, text, warn, range) {\n+        checkExpression(node.for || '', text, warn, range);\n+        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n+        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n+        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n+    }\n+\n+    function checkIdentifier (\n+        ident,\n+        type,\n+        text,\n+        warn,\n+        range\n+    ) {\n+        if (typeof ident === 'string') {\n+            try {\n+                new Function((\"var \" + ident + \"=_\"));\n+            } catch (e) {\n+                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n+            }\n+        }\n+    }\n+\n+    function checkExpression (exp, text, warn, range) {\n+        try {\n+            new Function((\"return \" + exp));\n+        } catch (e) {\n+            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n+            if (keywordMatch) {\n+                warn(\n+                    \"avoid using JavaScript keyword as property name: \" +\n+                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n+                    range\n+                );\n+            } else {\n+                warn(\n+                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n+                    \"    \" + exp + \"\\n\\n\" +\n+                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\n+                    range\n+                );\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var range = 2;\n+\n+    function generateCodeFrame (\n+        source,\n+        start,\n+        end\n+    ) {\n+        if ( start === void 0 ) start = 0;\n+        if ( end === void 0 ) end = source.length;\n+\n+        var lines = source.split(\u002F\\r?\\n\u002F);\n+        var count = 0;\n+        var res = [];\n+        for (var i = 0; i \u003C lines.length; i++) {\n+            count += lines[i].length + 1;\n+            if (count >= start) {\n+                for (var j = i - range; j \u003C= i + range || end > count; j++) {\n+                    if (j \u003C 0 || j >= lines.length) { continue }\n+                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n+                    var lineLength = lines[j].length;\n+                    if (j === i) {\n+                        \u002F\u002F push underline\n+                        var pad = start - (count - lineLength) + 1;\n+                        var length = end > count ? lineLength - pad : end - start;\n+                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n+                    } else if (j > i) {\n+                        if (end > count) {\n+                            var length$1 = Math.min(end - count, lineLength);\n+                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n+                        }\n+                        count += lineLength + 1;\n+                    }\n+                }\n+                break\n+            }\n+        }\n+        return res.join('\\n')\n+    }\n+\n+    function repeat$1 (str, n) {\n+        var result = '';\n+        if (n > 0) {\n+            while (true) { \u002F\u002F eslint-disable-line\n+                if (n & 1) { result += str; }\n+                n >>>= 1;\n+                if (n \u003C= 0) { break }\n+                str += str;\n+            }\n+        }\n+        return result\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function createFunction (code, errors) {\n+        try {\n+            return new Function(code)\n+        } catch (err) {\n+            errors.push({ err: err, code: code });\n+            return noop\n+        }\n+    }\n+\n+    function createCompileToFunctionFn (compile) {\n+        var cache = Object.create(null);\n+\n+        return function compileToFunctions (\n+            template,\n+            options,\n+            vm\n+        ) {\n+            options = extend({}, options);\n+            var warn$$1 = options.warn || warn;\n+            delete options.warn;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                \u002F\u002F detect possible CSP restriction\n+                try {\n+                    new Function('return 1');\n+                } catch (e) {\n+                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\n+                        warn$$1(\n+                            'It seems you are using the standalone build of Vue.js in an ' +\n+                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n+                            'The template compiler cannot work in this environment. Consider ' +\n+                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n+                            'templates into render functions.'\n+                        );\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F check cache\n+            var key = options.delimiters\n+                ? String(options.delimiters) + template\n+                : template;\n+            if (cache[key]) {\n+                return cache[key]\n+            }\n+\n+            \u002F\u002F compile\n+            var compiled = compile(template, options);\n+\n+            \u002F\u002F check compilation errors\u002Ftips\n+            {\n+                if (compiled.errors && compiled.errors.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.errors.forEach(function (e) {\n+                            warn$$1(\n+                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n+                                generateCodeFrame(template, e.start, e.end),\n+                                vm\n+                            );\n+                        });\n+                    } else {\n+                        warn$$1(\n+                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n+                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n+                            vm\n+                        );\n+                    }\n+                }\n+                if (compiled.tips && compiled.tips.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n+                    } else {\n+                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F turn code into functions\n+            var res = {};\n+            var fnGenErrors = [];\n+            res.render = createFunction(compiled.render, fnGenErrors);\n+            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n+                return createFunction(code, fnGenErrors)\n+            });\n+\n+            \u002F\u002F check function generation errors.\n+            \u002F\u002F this should only happen if there is a bug in the compiler itself.\n+            \u002F\u002F mostly for codegen development use\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n+                    warn$$1(\n+                        \"Failed to generate render function:\\n\\n\" +\n+                        fnGenErrors.map(function (ref) {\n+                            var err = ref.err;\n+                            var code = ref.code;\n+\n+                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n+                        }).join('\\n'),\n+                        vm\n+                    );\n+                }\n+            }\n+\n+            return (cache[key] = res)\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createCompilerCreator (baseCompile) {\n+        return function createCompiler (baseOptions) {\n+            function compile (\n+                template,\n+                options\n+            ) {\n+                var finalOptions = Object.create(baseOptions);\n+                var errors = [];\n+                var tips = [];\n+\n+                var warn = function (msg, range, tip) {\n+                    (tip ? tips : errors).push(msg);\n+                };\n+\n+                if (options) {\n+                    if (options.outputSourceRange) {\n+                        \u002F\u002F $flow-disable-line\n+                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\n+\n+                        warn = function (msg, range, tip) {\n+                            var data = { msg: msg };\n+                            if (range) {\n+                                if (range.start != null) {\n+                                    data.start = range.start + leadingSpaceLength;\n+                                }\n+                                if (range.end != null) {\n+                                    data.end = range.end + leadingSpaceLength;\n+                                }\n+                            }\n+                            (tip ? tips : errors).push(data);\n+                        };\n+                    }\n+                    \u002F\u002F merge custom modules\n+                    if (options.modules) {\n+                        finalOptions.modules =\n+                            (baseOptions.modules || []).concat(options.modules);\n+                    }\n+                    \u002F\u002F merge custom directives\n+                    if (options.directives) {\n+                        finalOptions.directives = extend(\n+                            Object.create(baseOptions.directives || null),\n+                            options.directives\n+                        );\n+                    }\n+                    \u002F\u002F copy other options\n+                    for (var key in options) {\n+                        if (key !== 'modules' && key !== 'directives') {\n+                            finalOptions[key] = options[key];\n+                        }\n+                    }\n+                }\n+\n+                finalOptions.warn = warn;\n+\n+                var compiled = baseCompile(template.trim(), finalOptions);\n+                {\n+                    detectErrors(compiled.ast, warn);\n+                }\n+                compiled.errors = errors;\n+                compiled.tips = tips;\n+                return compiled\n+            }\n+\n+            return {\n+                compile: compile,\n+                compileToFunctions: createCompileToFunctionFn(compile)\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\n+    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\n+    \u002F\u002F Here we just export a default compiler using the default parts.\n+    var createCompiler = createCompilerCreator(function baseCompile (\n+        template,\n+        options\n+    ) {\n+        var ast = parse(template.trim(), options);\n+        if (options.optimize !== false) {\n+            optimize(ast, options);\n+        }\n+        var code = generate(ast, options);\n+        return {\n+            ast: ast,\n+            render: code.render,\n+            staticRenderFns: code.staticRenderFns\n+        }\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref$1 = createCompiler(baseOptions);\n+    var compile = ref$1.compile;\n+    var compileToFunctions = ref$1.compileToFunctions;\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F check whether current browser encodes a char inside attribute values\n+    var div;\n+    function getShouldDecode (href) {\n+        div = div || document.createElement('div');\n+        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\n+        return div.innerHTML.indexOf('&#10;') > 0\n+    }\n+\n+    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\n+    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n+    \u002F\u002F #6828: chrome encodes content in a[href]\n+    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n+\n+  \u002F*  *\u002F\n+\n+    var idToTemplate = cached(function (id) {\n+        var el = query(id);\n+        return el && el.innerHTML\n+    });\n+\n+    var mount = Vue.prototype.$mount;\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && query(el);\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (el === document.body || el === document.documentElement) {\n+            warn(\n+                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\n+            );\n+            return this\n+        }\n+\n+        var options = this.$options;\n+        \u002F\u002F resolve template\u002Fel and convert to render function\n+        if (!options.render) {\n+            var template = options.template;\n+            if (template) {\n+                if (typeof template === 'string') {\n+                    if (template.charAt(0) === '#') {\n+                        template = idToTemplate(template);\n+                      \u002F* istanbul ignore if *\u002F\n+                        if (!template) {\n+                            warn(\n+                                (\"Template element not found or is empty: \" + (options.template)),\n+                                this\n+                            );\n+                        }\n+                    }\n+                } else if (template.nodeType) {\n+                    template = template.innerHTML;\n+                } else {\n+                    {\n+                        warn('invalid template option:' + template, this);\n+                    }\n+                    return this\n+                }\n+            } else if (el) {\n+                template = getOuterHTML(el);\n+            }\n+            if (template) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile');\n+                }\n+\n+                var ref = compileToFunctions(template, {\n+                    outputSourceRange: \"development\" !== 'production',\n+                    shouldDecodeNewlines: shouldDecodeNewlines,\n+                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n+                    delimiters: options.delimiters,\n+                    comments: options.comments\n+                }, this);\n+                var render = ref.render;\n+                var staticRenderFns = ref.staticRenderFns;\n+                options.render = render;\n+                options.staticRenderFns = staticRenderFns;\n+\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile end');\n+                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n+                }\n+            }\n+        }\n+        return mount.call(this, el, hydrating)\n+    };\n+\n+    \u002F**\n+     * Get outerHTML of elements, taking care\n+     * of SVG elements in IE as well.\n+     *\u002F\n+    function getOuterHTML (el) {\n+        if (el.outerHTML) {\n+            return el.outerHTML\n+        } else {\n+            var container = document.createElement('div');\n+            container.appendChild(el.cloneNode(true));\n+            return container.innerHTML\n+        }\n+    }\n+\n+    Vue.compile = compileToFunctions;\n+\n+    return Vue;\n+\n+}));\n+\u002F**\n+ * vuex v3.1.0\n+ * (c) 2019 Evan You\n+ * @license MIT\n+ *\u002F\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vuex = factory());\n+}(this, function () { 'use strict';\n+\n+    function applyMixin (Vue) {\n+        var version = Number(Vue.version.split('.')[0]);\n+\n+        if (version >= 2) {\n+            Vue.mixin({ beforeCreate: vuexInit });\n+        } else {\n+            \u002F\u002F override init and inject vuex init procedure\n+            \u002F\u002F for 1.x backwards compatibility.\n+            var _init = Vue.prototype._init;\n+            Vue.prototype._init = function (options) {\n+                if ( options === void 0 ) options = {};\n+\n+                options.init = options.init\n+                    ? [vuexInit].concat(options.init)\n+                    : vuexInit;\n+                _init.call(this, options);\n+            };\n+        }\n+\n+        \u002F**\n+         * Vuex init hook, injected into each instances init hooks list.\n+         *\u002F\n+\n+        function vuexInit () {\n+            var options = this.$options;\n+            \u002F\u002F store injection\n+            if (options.store) {\n+                this.$store = typeof options.store === 'function'\n+                    ? options.store()\n+                    : options.store;\n+            } else if (options.parent && options.parent.$store) {\n+                this.$store = options.parent.$store;\n+            }\n+        }\n+    }\n+\n+    var devtoolHook =\n+        typeof window !== 'undefined' &&\n+        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+    function devtoolPlugin (store) {\n+        if (!devtoolHook) { return }\n+\n+        store._devtoolHook = devtoolHook;\n+\n+        devtoolHook.emit('vuex:init', store);\n+\n+        devtoolHook.on('vuex:travel-to-state', function (targetState) {\n+            store.replaceState(targetState);\n+        });\n+\n+        store.subscribe(function (mutation, state) {\n+            devtoolHook.emit('vuex:mutation', mutation, state);\n+        });\n+    }\n+\n+    \u002F**\n+     * Get the first item that pass the test\n+     * by second argument function\n+     *\n+     * @param {Array} list\n+     * @param {Function} f\n+     * @return {*}\n+     *\u002F\n+\n+    \u002F**\n+     * forEach for object\n+     *\u002F\n+    function forEachValue (obj, fn) {\n+        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n+    }\n+\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    function isPromise (val) {\n+        return val && typeof val.then === 'function'\n+    }\n+\n+    function assert (condition, msg) {\n+        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n+    }\n+\n+    \u002F\u002F Base data struct for store's module, package with some attribute and method\n+    var Module = function Module (rawModule, runtime) {\n+        this.runtime = runtime;\n+        \u002F\u002F Store some children item\n+        this._children = Object.create(null);\n+        \u002F\u002F Store the origin module object which passed by programmer\n+        this._rawModule = rawModule;\n+        var rawState = rawModule.state;\n+\n+        \u002F\u002F Store the origin module's state\n+        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n+    };\n+\n+    var prototypeAccessors = { namespaced: { configurable: true } };\n+\n+    prototypeAccessors.namespaced.get = function () {\n+        return !!this._rawModule.namespaced\n+    };\n+\n+    Module.prototype.addChild = function addChild (key, module) {\n+        this._children[key] = module;\n+    };\n+\n+    Module.prototype.removeChild = function removeChild (key) {\n+        delete this._children[key];\n+    };\n+\n+    Module.prototype.getChild = function getChild (key) {\n+        return this._children[key]\n+    };\n+\n+    Module.prototype.update = function update (rawModule) {\n+        this._rawModule.namespaced = rawModule.namespaced;\n+        if (rawModule.actions) {\n+            this._rawModule.actions = rawModule.actions;\n+        }\n+        if (rawModule.mutations) {\n+            this._rawModule.mutations = rawModule.mutations;\n+        }\n+        if (rawModule.getters) {\n+            this._rawModule.getters = rawModule.getters;\n+        }\n+    };\n+\n+    Module.prototype.forEachChild = function forEachChild (fn) {\n+        forEachValue(this._children, fn);\n+    };\n+\n+    Module.prototype.forEachGetter = function forEachGetter (fn) {\n+        if (this._rawModule.getters) {\n+            forEachValue(this._rawModule.getters, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachAction = function forEachAction (fn) {\n+        if (this._rawModule.actions) {\n+            forEachValue(this._rawModule.actions, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachMutation = function forEachMutation (fn) {\n+        if (this._rawModule.mutations) {\n+            forEachValue(this._rawModule.mutations, fn);\n+        }\n+    };\n+\n+    Object.defineProperties( Module.prototype, prototypeAccessors );\n+\n+    var ModuleCollection = function ModuleCollection (rawRootModule) {\n+        \u002F\u002F register root module (Vuex.Store options)\n+        this.register([], rawRootModule, false);\n+    };\n+\n+    ModuleCollection.prototype.get = function get (path) {\n+        return path.reduce(function (module, key) {\n+            return module.getChild(key)\n+        }, this.root)\n+    };\n+\n+    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\n+        var module = this.root;\n+        return path.reduce(function (namespace, key) {\n+            module = module.getChild(key);\n+            return namespace + (module.namespaced ? key + '\u002F' : '')\n+        }, '')\n+    };\n+\n+    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\n+        update([], this.root, rawRootModule);\n+    };\n+\n+    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n+        var this$1 = this;\n+        if ( runtime === void 0 ) runtime = true;\n+\n+        {\n+            assertRawModule(path, rawModule);\n+        }\n+\n+        var newModule = new Module(rawModule, runtime);\n+        if (path.length === 0) {\n+            this.root = newModule;\n+        } else {\n+            var parent = this.get(path.slice(0, -1));\n+            parent.addChild(path[path.length - 1], newModule);\n+        }\n+\n+        \u002F\u002F register nested modules\n+        if (rawModule.modules) {\n+            forEachValue(rawModule.modules, function (rawChildModule, key) {\n+                this$1.register(path.concat(key), rawChildModule, runtime);\n+            });\n+        }\n+    };\n+\n+    ModuleCollection.prototype.unregister = function unregister (path) {\n+        var parent = this.get(path.slice(0, -1));\n+        var key = path[path.length - 1];\n+        if (!parent.getChild(key).runtime) { return }\n+\n+        parent.removeChild(key);\n+    };\n+\n+    function update (path, targetModule, newModule) {\n+        {\n+            assertRawModule(path, newModule);\n+        }\n+\n+        \u002F\u002F update target module\n+        targetModule.update(newModule);\n+\n+        \u002F\u002F update nested modules\n+        if (newModule.modules) {\n+            for (var key in newModule.modules) {\n+                if (!targetModule.getChild(key)) {\n+                    {\n+                        console.warn(\n+                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n+                            'manual reload is needed'\n+                        );\n+                    }\n+                    return\n+                }\n+                update(\n+                    path.concat(key),\n+                    targetModule.getChild(key),\n+                    newModule.modules[key]\n+                );\n+            }\n+        }\n+    }\n+\n+    var functionAssert = {\n+        assert: function (value) { return typeof value === 'function'; },\n+        expected: 'function'\n+    };\n+\n+    var objectAssert = {\n+        assert: function (value) { return typeof value === 'function' ||\n+            (typeof value === 'object' && typeof value.handler === 'function'); },\n+        expected: 'function or object with \"handler\" function'\n+    };\n+\n+    var assertTypes = {\n+        getters: functionAssert,\n+        mutations: functionAssert,\n+        actions: objectAssert\n+    };\n+\n+    function assertRawModule (path, rawModule) {\n+        Object.keys(assertTypes).forEach(function (key) {\n+            if (!rawModule[key]) { return }\n+\n+            var assertOptions = assertTypes[key];\n+\n+            forEachValue(rawModule[key], function (value, type) {\n+                assert(\n+                    assertOptions.assert(value),\n+                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\n+                );\n+            });\n+        });\n+    }\n+\n+    function makeAssertionMessage (path, key, type, value, expected) {\n+        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n+        if (path.length > 0) {\n+            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n+        }\n+        buf += \" is \" + (JSON.stringify(value)) + \".\";\n+        return buf\n+    }\n+\n+    var Vue; \u002F\u002F bind on install\n+\n+    var Store = function Store (options) {\n+        var this$1 = this;\n+        if ( options === void 0 ) options = {};\n+\n+        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\n+        \u002F\u002F To allow users to avoid auto-installation in some cases,\n+        \u002F\u002F this code should be placed here. See #731\n+        if (!Vue && typeof window !== 'undefined' && window.Vue) {\n+            install(window.Vue);\n+        }\n+\n+        {\n+            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n+            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n+            assert(this instanceof Store, \"store must be called with the new operator.\");\n+        }\n+\n+        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n+        var strict = options.strict; if ( strict === void 0 ) strict = false;\n+\n+        \u002F\u002F store internal state\n+        this._committing = false;\n+        this._actions = Object.create(null);\n+        this._actionSubscribers = [];\n+        this._mutations = Object.create(null);\n+        this._wrappedGetters = Object.create(null);\n+        this._modules = new ModuleCollection(options);\n+        this._modulesNamespaceMap = Object.create(null);\n+        this._subscribers = [];\n+        this._watcherVM = new Vue();\n+\n+        \u002F\u002F bind commit and dispatch to self\n+        var store = this;\n+        var ref = this;\n+        var dispatch = ref.dispatch;\n+        var commit = ref.commit;\n+        this.dispatch = function boundDispatch (type, payload) {\n+            return dispatch.call(store, type, payload)\n+        };\n+        this.commit = function boundCommit (type, payload, options) {\n+            return commit.call(store, type, payload, options)\n+        };\n+\n+        \u002F\u002F strict mode\n+        this.strict = strict;\n+\n+        var state = this._modules.root.state;\n+\n+        \u002F\u002F init root module.\n+        \u002F\u002F this also recursively registers all sub-modules\n+        \u002F\u002F and collects all module getters inside this._wrappedGetters\n+        installModule(this, state, [], this._modules.root);\n+\n+        \u002F\u002F initialize the store vm, which is responsible for the reactivity\n+        \u002F\u002F (also registers _wrappedGetters as computed properties)\n+        resetStoreVM(this, state);\n+\n+        \u002F\u002F apply plugins\n+        plugins.forEach(function (plugin) { return plugin(this$1); });\n+\n+        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n+        if (useDevtools) {\n+            devtoolPlugin(this);\n+        }\n+    };\n+\n+    var prototypeAccessors$1 = { state: { configurable: true } };\n+\n+    prototypeAccessors$1.state.get = function () {\n+        return this._vm._data.$$state\n+    };\n+\n+    prototypeAccessors$1.state.set = function (v) {\n+        {\n+            assert(false, \"use store.replaceState() to explicit replace store state.\");\n+        }\n+    };\n+\n+    Store.prototype.commit = function commit (_type, _payload, _options) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style commit\n+        var ref = unifyObjectStyle(_type, _payload, _options);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+        var options = ref.options;\n+\n+        var mutation = { type: type, payload: payload };\n+        var entry = this._mutations[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown mutation type: \" + type));\n+            }\n+            return\n+        }\n+        this._withCommit(function () {\n+            entry.forEach(function commitIterator (handler) {\n+                handler(payload);\n+            });\n+        });\n+        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n+\n+        if (\n+            options && options.silent\n+        ) {\n+            console.warn(\n+                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n+                'Use the filter functionality in the vue-devtools'\n+            );\n+        }\n+    };\n+\n+    Store.prototype.dispatch = function dispatch (_type, _payload) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style dispatch\n+        var ref = unifyObjectStyle(_type, _payload);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+\n+        var action = { type: type, payload: payload };\n+        var entry = this._actions[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown action type: \" + type));\n+            }\n+            return\n+        }\n+\n+        try {\n+            this._actionSubscribers\n+                .filter(function (sub) { return sub.before; })\n+                .forEach(function (sub) { return sub.before(action, this$1.state); });\n+        } catch (e) {\n+            {\n+                console.warn(\"[vuex] error in before action subscribers: \");\n+                console.error(e);\n+            }\n+        }\n+\n+        var result = entry.length > 1\n+            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n+            : entry[0](payload);\n+\n+        return result.then(function (res) {\n+            try {\n+                this$1._actionSubscribers\n+                    .filter(function (sub) { return sub.after; })\n+                    .forEach(function (sub) { return sub.after(action, this$1.state); });\n+            } catch (e) {\n+                {\n+                    console.warn(\"[vuex] error in after action subscribers: \");\n+                    console.error(e);\n+                }\n+            }\n+            return res\n+        })\n+    };\n+\n+    Store.prototype.subscribe = function subscribe (fn) {\n+        return genericSubscribe(fn, this._subscribers)\n+    };\n+\n+    Store.prototype.subscribeAction = function subscribeAction (fn) {\n+        var subs = typeof fn === 'function' ? { before: fn } : fn;\n+        return genericSubscribe(subs, this._actionSubscribers)\n+    };\n+\n+    Store.prototype.watch = function watch (getter, cb, options) {\n+        var this$1 = this;\n+\n+        {\n+            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n+        }\n+        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n+    };\n+\n+    Store.prototype.replaceState = function replaceState (state) {\n+        var this$1 = this;\n+\n+        this._withCommit(function () {\n+            this$1._vm._data.$$state = state;\n+        });\n+    };\n+\n+    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\n+        if ( options === void 0 ) options = {};\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+            assert(path.length > 0, 'cannot register the root module by using registerModule.');\n+        }\n+\n+        this._modules.register(path, rawModule);\n+        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n+        \u002F\u002F reset store to update getters...\n+        resetStoreVM(this, this.state);\n+    };\n+\n+    Store.prototype.unregisterModule = function unregisterModule (path) {\n+        var this$1 = this;\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+        }\n+\n+        this._modules.unregister(path);\n+        this._withCommit(function () {\n+            var parentState = getNestedState(this$1.state, path.slice(0, -1));\n+            Vue.delete(parentState, path[path.length - 1]);\n+        });\n+        resetStore(this);\n+    };\n+\n+    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\n+        this._modules.update(newOptions);\n+        resetStore(this, true);\n+    };\n+\n+    Store.prototype._withCommit = function _withCommit (fn) {\n+        var committing = this._committing;\n+        this._committing = true;\n+        fn();\n+        this._committing = committing;\n+    };\n+\n+    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\n+\n+    function genericSubscribe (fn, subs) {\n+        if (subs.indexOf(fn) \u003C 0) {\n+            subs.push(fn);\n+        }\n+        return function () {\n+            var i = subs.indexOf(fn);\n+            if (i > -1) {\n+                subs.splice(i, 1);\n+            }\n+        }\n+    }\n+\n+    function resetStore (store, hot) {\n+        store._actions = Object.create(null);\n+        store._mutations = Object.create(null);\n+        store._wrappedGetters = Object.create(null);\n+        store._modulesNamespaceMap = Object.create(null);\n+        var state = store.state;\n+        \u002F\u002F init all modules\n+        installModule(store, state, [], store._modules.root, true);\n+        \u002F\u002F reset vm\n+        resetStoreVM(store, state, hot);\n+    }\n+\n+    function resetStoreVM (store, state, hot) {\n+        var oldVm = store._vm;\n+\n+        \u002F\u002F bind store public getters\n+        store.getters = {};\n+        var wrappedGetters = store._wrappedGetters;\n+        var computed = {};\n+        forEachValue(wrappedGetters, function (fn, key) {\n+            \u002F\u002F use computed to leverage its lazy-caching mechanism\n+            computed[key] = function () { return fn(store); };\n+            Object.defineProperty(store.getters, key, {\n+                get: function () { return store._vm[key]; },\n+                enumerable: true \u002F\u002F for local getters\n+            });\n+        });\n+\n+        \u002F\u002F use a Vue instance to store the state tree\n+        \u002F\u002F suppress warnings just in case the user has added\n+        \u002F\u002F some funky global mixins\n+        var silent = Vue.config.silent;\n+        Vue.config.silent = true;\n+        store._vm = new Vue({\n+            data: {\n+                $$state: state\n+            },\n+            computed: computed\n+        });\n+        Vue.config.silent = silent;\n+\n+        \u002F\u002F enable strict mode for new vm\n+        if (store.strict) {\n+            enableStrictMode(store);\n+        }\n+\n+        if (oldVm) {\n+            if (hot) {\n+                \u002F\u002F dispatch changes in all subscribed watchers\n+                \u002F\u002F to force getter re-evaluation for hot reloading.\n+                store._withCommit(function () {\n+                    oldVm._data.$$state = null;\n+                });\n+            }\n+            Vue.nextTick(function () { return oldVm.$destroy(); });\n+        }\n+    }\n+\n+    function installModule (store, rootState, path, module, hot) {\n+        var isRoot = !path.length;\n+        var namespace = store._modules.getNamespace(path);\n+\n+        \u002F\u002F register in namespace map\n+        if (module.namespaced) {\n+            store._modulesNamespaceMap[namespace] = module;\n+        }\n+\n+        \u002F\u002F set state\n+        if (!isRoot && !hot) {\n+            var parentState = getNestedState(rootState, path.slice(0, -1));\n+            var moduleName = path[path.length - 1];\n+            store._withCommit(function () {\n+                Vue.set(parentState, moduleName, module.state);\n+            });\n+        }\n+\n+        var local = module.context = makeLocalContext(store, namespace, path);\n+\n+        module.forEachMutation(function (mutation, key) {\n+            var namespacedType = namespace + key;\n+            registerMutation(store, namespacedType, mutation, local);\n+        });\n+\n+        module.forEachAction(function (action, key) {\n+            var type = action.root ? key : namespace + key;\n+            var handler = action.handler || action;\n+            registerAction(store, type, handler, local);\n+        });\n+\n+        module.forEachGetter(function (getter, key) {\n+            var namespacedType = namespace + key;\n+            registerGetter(store, namespacedType, getter, local);\n+        });\n+\n+        module.forEachChild(function (child, key) {\n+            installModule(store, rootState, path.concat(key), child, hot);\n+        });\n+    }\n+\n+    \u002F**\n+     * make localized dispatch, commit, getters and state\n+     * if there is no namespace, just use root ones\n+     *\u002F\n+    function makeLocalContext (store, namespace, path) {\n+        var noNamespace = namespace === '';\n+\n+        var local = {\n+            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._actions[type]) {\n+                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                return store.dispatch(type, payload)\n+            },\n+\n+            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._mutations[type]) {\n+                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                store.commit(type, payload, options);\n+            }\n+        };\n+\n+        \u002F\u002F getters and state object must be gotten lazily\n+        \u002F\u002F because they will be changed by vm update\n+        Object.defineProperties(local, {\n+            getters: {\n+                get: noNamespace\n+                    ? function () { return store.getters; }\n+                    : function () { return makeLocalGetters(store, namespace); }\n+            },\n+            state: {\n+                get: function () { return getNestedState(store.state, path); }\n+            }\n+        });\n+\n+        return local\n+    }\n+\n+    function makeLocalGetters (store, namespace) {\n+        var gettersProxy = {};\n+\n+        var splitPos = namespace.length;\n+        Object.keys(store.getters).forEach(function (type) {\n+            \u002F\u002F skip if the target getter is not match this namespace\n+            if (type.slice(0, splitPos) !== namespace) { return }\n+\n+            \u002F\u002F extract local getter type\n+            var localType = type.slice(splitPos);\n+\n+            \u002F\u002F Add a port to the getters proxy.\n+            \u002F\u002F Define as getter property because\n+            \u002F\u002F we do not want to evaluate the getters in this time.\n+            Object.defineProperty(gettersProxy, localType, {\n+                get: function () { return store.getters[type]; },\n+                enumerable: true\n+            });\n+        });\n+\n+        return gettersProxy\n+    }\n+\n+    function registerMutation (store, type, handler, local) {\n+        var entry = store._mutations[type] || (store._mutations[type] = []);\n+        entry.push(function wrappedMutationHandler (payload) {\n+            handler.call(store, local.state, payload);\n+        });\n+    }\n+\n+    function registerAction (store, type, handler, local) {\n+        var entry = store._actions[type] || (store._actions[type] = []);\n+        entry.push(function wrappedActionHandler (payload, cb) {\n+            var res = handler.call(store, {\n+                dispatch: local.dispatch,\n+                commit: local.commit,\n+                getters: local.getters,\n+                state: local.state,\n+                rootGetters: store.getters,\n+                rootState: store.state\n+            }, payload, cb);\n+            if (!isPromise(res)) {\n+                res = Promise.resolve(res);\n+            }\n+            if (store._devtoolHook) {\n+                return res.catch(function (err) {\n+                    store._devtoolHook.emit('vuex:error', err);\n+                    throw err\n+                })\n+            } else {\n+                return res\n+            }\n+        });\n+    }\n+\n+    function registerGetter (store, type, rawGetter, local) {\n+        if (store._wrappedGetters[type]) {\n+            {\n+                console.error((\"[vuex] duplicate getter key: \" + type));\n+            }\n+            return\n+        }\n+        store._wrappedGetters[type] = function wrappedGetter (store) {\n+            return rawGetter(\n+                local.state, \u002F\u002F local state\n+                local.getters, \u002F\u002F local getters\n+                store.state, \u002F\u002F root state\n+                store.getters \u002F\u002F root getters\n+            )\n+        };\n+    }\n+\n+    function enableStrictMode (store) {\n+        store._vm.$watch(function () { return this._data.$$state }, function () {\n+            {\n+                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n+            }\n+        }, { deep: true, sync: true });\n+    }\n+\n+    function getNestedState (state, path) {\n+        return path.length\n+            ? path.reduce(function (state, key) { return state[key]; }, state)\n+            : state\n+    }\n+\n+    function unifyObjectStyle (type, payload, options) {\n+        if (isObject(type) && type.type) {\n+            options = payload;\n+            payload = type;\n+            type = type.type;\n+        }\n+\n+        {\n+            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n+        }\n+\n+        return { type: type, payload: payload, options: options }\n+    }\n+\n+    function install (_Vue) {\n+        if (Vue && _Vue === Vue) {\n+            {\n+                console.error(\n+                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n+                );\n+            }\n+            return\n+        }\n+        Vue = _Vue;\n+        applyMixin(Vue);\n+    }\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the state.\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n+     * @param {Object}\n+     *\u002F\n+    var mapState = normalizeNamespace(function (namespace, states) {\n+        var res = {};\n+        normalizeMap(states).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedState () {\n+                var state = this.$store.state;\n+                var getters = this.$store.getters;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    state = module.context.state;\n+                    getters = module.context.getters;\n+                }\n+                return typeof val === 'function'\n+                    ? val.call(this, state, getters)\n+                    : state[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for committing the mutation\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapMutations = normalizeNamespace(function (namespace, mutations) {\n+        var res = {};\n+        normalizeMap(mutations).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedMutation () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F Get the commit method from store\n+                var commit = this.$store.commit;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    commit = module.context.commit;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [commit].concat(args))\n+                    : commit.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the getters\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} getters\n+     * @return {Object}\n+     *\u002F\n+    var mapGetters = normalizeNamespace(function (namespace, getters) {\n+        var res = {};\n+        normalizeMap(getters).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            \u002F\u002F The namespace has been mutated by normalizeNamespace\n+            val = namespace + val;\n+            res[key] = function mappedGetter () {\n+                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n+                    return\n+                }\n+                if (!(val in this.$store.getters)) {\n+                    console.error((\"[vuex] unknown getter: \" + val));\n+                    return\n+                }\n+                return this.$store.getters[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for dispatch the action\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapActions = normalizeNamespace(function (namespace, actions) {\n+        var res = {};\n+        normalizeMap(actions).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedAction () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F get dispatch function from store\n+                var dispatch = this.$store.dispatch;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    dispatch = module.context.dispatch;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [dispatch].concat(args))\n+                    : dispatch.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    var createNamespacedHelpers = function (namespace) { return ({\n+        mapState: mapState.bind(null, namespace),\n+        mapGetters: mapGetters.bind(null, namespace),\n+        mapMutations: mapMutations.bind(null, namespace),\n+        mapActions: mapActions.bind(null, namespace)\n+    }); };\n+\n+    \u002F**\n+     * Normalize the map\n+     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n+     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n+     * @param {Array|Object} map\n+     * @return {Object}\n+     *\u002F\n+    function normalizeMap (map) {\n+        return Array.isArray(map)\n+            ? map.map(function (key) { return ({ key: key, val: key }); })\n+            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n+    }\n+\n+    \u002F**\n+     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n+     * @param {Function} fn\n+     * @return {Function}\n+     *\u002F\n+    function normalizeNamespace (fn) {\n+        return function (namespace, map) {\n+            if (typeof namespace !== 'string') {\n+                map = namespace;\n+                namespace = '';\n+            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\n+                namespace += '\u002F';\n+            }\n+            return fn(namespace, map)\n+        }\n+    }\n+\n+    \u002F**\n+     * Search a special module from store by namespace. if module not exist, print error message.\n+     * @param {Object} store\n+     * @param {String} helper\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    function getModuleByNamespace (store, helper, namespace) {\n+        var module = store._modulesNamespaceMap[namespace];\n+        if (!module) {\n+            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n+        }\n+        return module\n+    }\n+\n+    var index = {\n+        Store: Store,\n+        install: install,\n+        version: '3.1.0',\n+        mapState: mapState,\n+        mapMutations: mapMutations,\n+        mapGetters: mapGetters,\n+        mapActions: mapActions,\n+        createNamespacedHelpers: createNamespacedHelpers\n+    };\n+\n+    return index;\n+\n+}));\n+\u002F*!\n+ * vue-resource v1.3.4\n+ * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global.VueResource = factory());\n+}(this, (function () { 'use strict';\n+\n+    \u002F**\n+     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\n+     *\u002F\n+\n+    var RESOLVED = 0;\n+    var REJECTED = 1;\n+    var PENDING  = 2;\n+\n+    function Promise$1(executor) {\n+\n+        this.state = PENDING;\n+        this.value = undefined;\n+        this.deferred = [];\n+\n+        var promise = this;\n+\n+        try {\n+            executor(function (x) {\n+                promise.resolve(x);\n+            }, function (r) {\n+                promise.reject(r);\n+            });\n+        } catch (e) {\n+            promise.reject(e);\n+        }\n+    }\n+\n+    Promise$1.reject = function (r) {\n+        return new Promise$1(function (resolve, reject) {\n+            reject(r);\n+        });\n+    };\n+\n+    Promise$1.resolve = function (x) {\n+        return new Promise$1(function (resolve, reject) {\n+            resolve(x);\n+        });\n+    };\n+\n+    Promise$1.all = function all(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            var count = 0, result = [];\n+\n+            if (iterable.length === 0) {\n+                resolve(result);\n+            }\n+\n+            function resolver(i) {\n+                return function (x) {\n+                    result[i] = x;\n+                    count += 1;\n+\n+                    if (count === iterable.length) {\n+                        resolve(result);\n+                    }\n+                };\n+            }\n+\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\n+            }\n+        });\n+    };\n+\n+    Promise$1.race = function race(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolve, reject);\n+            }\n+        });\n+    };\n+\n+    var p$1 = Promise$1.prototype;\n+\n+    p$1.resolve = function resolve(x) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (x === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            var called = false;\n+\n+            try {\n+                var then = x && x['then'];\n+\n+                if (x !== null && typeof x === 'object' && typeof then === 'function') {\n+                    then.call(x, function (x) {\n+                        if (!called) {\n+                            promise.resolve(x);\n+                        }\n+                        called = true;\n+\n+                    }, function (r) {\n+                        if (!called) {\n+                            promise.reject(r);\n+                        }\n+                        called = true;\n+                    });\n+                    return;\n+                }\n+            } catch (e) {\n+                if (!called) {\n+                    promise.reject(e);\n+                }\n+                return;\n+            }\n+\n+            promise.state = RESOLVED;\n+            promise.value = x;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.reject = function reject(reason) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (reason === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            promise.state = REJECTED;\n+            promise.value = reason;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.notify = function notify() {\n+        var promise = this;\n+\n+        nextTick(function () {\n+            if (promise.state !== PENDING) {\n+                while (promise.deferred.length) {\n+                    var deferred = promise.deferred.shift(),\n+                        onResolved = deferred[0],\n+                        onRejected = deferred[1],\n+                        resolve = deferred[2],\n+                        reject = deferred[3];\n+\n+                    try {\n+                        if (promise.state === RESOLVED) {\n+                            if (typeof onResolved === 'function') {\n+                                resolve(onResolved.call(undefined, promise.value));\n+                            } else {\n+                                resolve(promise.value);\n+                            }\n+                        } else if (promise.state === REJECTED) {\n+                            if (typeof onRejected === 'function') {\n+                                resolve(onRejected.call(undefined, promise.value));\n+                            } else {\n+                                reject(promise.value);\n+                            }\n+                        }\n+                    } catch (e) {\n+                        reject(e);\n+                    }\n+                }\n+            }\n+        });\n+    };\n+\n+    p$1.then = function then(onResolved, onRejected) {\n+        var promise = this;\n+\n+        return new Promise$1(function (resolve, reject) {\n+            promise.deferred.push([onResolved, onRejected, resolve, reject]);\n+            promise.notify();\n+        });\n+    };\n+\n+    p$1.catch = function (onRejected) {\n+        return this.then(undefined, onRejected);\n+    };\n+\n+    \u002F**\n+     * Promise adapter.\n+     *\u002F\n+\n+    if (typeof Promise === 'undefined') {\n+        window.Promise = Promise$1;\n+    }\n+\n+    function PromiseObj(executor, context) {\n+\n+        if (executor instanceof Promise) {\n+            this.promise = executor;\n+        } else {\n+            this.promise = new Promise(executor.bind(context));\n+        }\n+\n+        this.context = context;\n+    }\n+\n+    PromiseObj.all = function (iterable, context) {\n+        return new PromiseObj(Promise.all(iterable), context);\n+    };\n+\n+    PromiseObj.resolve = function (value, context) {\n+        return new PromiseObj(Promise.resolve(value), context);\n+    };\n+\n+    PromiseObj.reject = function (reason, context) {\n+        return new PromiseObj(Promise.reject(reason), context);\n+    };\n+\n+    PromiseObj.race = function (iterable, context) {\n+        return new PromiseObj(Promise.race(iterable), context);\n+    };\n+\n+    var p = PromiseObj.prototype;\n+\n+    p.bind = function (context) {\n+        this.context = context;\n+        return this;\n+    };\n+\n+    p.then = function (fulfilled, rejected) {\n+\n+        if (fulfilled && fulfilled.bind && this.context) {\n+            fulfilled = fulfilled.bind(this.context);\n+        }\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\n+    };\n+\n+    p.catch = function (rejected) {\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.catch(rejected), this.context);\n+    };\n+\n+    p.finally = function (callback) {\n+\n+        return this.then(function (value) {\n+                callback.call(this);\n+                return value;\n+            }, function (reason) {\n+                callback.call(this);\n+                return Promise.reject(reason);\n+            }\n+        );\n+    };\n+\n+    \u002F**\n+     * Utility functions.\n+     *\u002F\n+\n+    var ref = {};\n+    var hasOwnProperty = ref.hasOwnProperty;\n+\n+    var ref$1 = [];\n+    var slice = ref$1.slice;\n+    var debug = false;\n+    var ntick;\n+\n+    var inBrowser = typeof window !== 'undefined';\n+\n+    var Util = function (ref) {\n+        var config = ref.config;\n+        var nextTick = ref.nextTick;\n+\n+        ntick = nextTick;\n+        debug = config.debug || !config.silent;\n+    };\n+\n+    function warn(msg) {\n+        if (typeof console !== 'undefined' && debug) {\n+            console.warn('[VueResource warn]: ' + msg);\n+        }\n+    }\n+\n+    function error(msg) {\n+        if (typeof console !== 'undefined') {\n+            console.error(msg);\n+        }\n+    }\n+\n+    function nextTick(cb, ctx) {\n+        return ntick(cb, ctx);\n+    }\n+\n+    function trim(str) {\n+        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\n+    }\n+\n+    function trimEnd(str, chars) {\n+\n+        if (str && chars === undefined) {\n+            return str.replace(\u002F\\s+$\u002F, '');\n+        }\n+\n+        if (!str || !chars) {\n+            return str;\n+        }\n+\n+        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\n+    }\n+\n+    function toLower(str) {\n+        return str ? str.toLowerCase() : '';\n+    }\n+\n+    function toUpper(str) {\n+        return str ? str.toUpperCase() : '';\n+    }\n+\n+    var isArray = Array.isArray;\n+\n+    function isString(val) {\n+        return typeof val === 'string';\n+    }\n+\n+\n+\n+    function isFunction(val) {\n+        return typeof val === 'function';\n+    }\n+\n+    function isObject(obj) {\n+        return obj !== null && typeof obj === 'object';\n+    }\n+\n+    function isPlainObject(obj) {\n+        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n+    }\n+\n+    function isBlob(obj) {\n+        return typeof Blob !== 'undefined' && obj instanceof Blob;\n+    }\n+\n+    function isFormData(obj) {\n+        return typeof FormData !== 'undefined' && obj instanceof FormData;\n+    }\n+\n+    function when(value, fulfilled, rejected) {\n+\n+        var promise = PromiseObj.resolve(value);\n+\n+        if (arguments.length \u003C 2) {\n+            return promise;\n+        }\n+\n+        return promise.then(fulfilled, rejected);\n+    }\n+\n+    function options(fn, obj, opts) {\n+\n+        opts = opts || {};\n+\n+        if (isFunction(opts)) {\n+            opts = opts.call(obj);\n+        }\n+\n+        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\n+    }\n+\n+    function each(obj, iterator) {\n+\n+        var i, key;\n+\n+        if (isArray(obj)) {\n+            for (i = 0; i \u003C obj.length; i++) {\n+                iterator.call(obj[i], obj[i], i);\n+            }\n+        } else if (isObject(obj)) {\n+            for (key in obj) {\n+                if (hasOwnProperty.call(obj, key)) {\n+                    iterator.call(obj[key], obj[key], key);\n+                }\n+            }\n+        }\n+\n+        return obj;\n+    }\n+\n+    var assign = Object.assign || _assign;\n+\n+    function merge(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source, true);\n+        });\n+\n+        return target;\n+    }\n+\n+    function defaults(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+\n+            for (var key in source) {\n+                if (target[key] === undefined) {\n+                    target[key] = source[key];\n+                }\n+            }\n+\n+        });\n+\n+        return target;\n+    }\n+\n+    function _assign(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source);\n+        });\n+\n+        return target;\n+    }\n+\n+    function _merge(target, source, deep) {\n+        for (var key in source) {\n+            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n+                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n+                    target[key] = {};\n+                }\n+                if (isArray(source[key]) && !isArray(target[key])) {\n+                    target[key] = [];\n+                }\n+                _merge(target[key], source[key], deep);\n+            } else if (source[key] !== undefined) {\n+                target[key] = source[key];\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Root Prefix Transform.\n+     *\u002F\n+\n+    var root = function (options$$1, next) {\n+\n+        var url = next(options$$1);\n+\n+        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\n+            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Query Parameter Transform.\n+     *\u002F\n+\n+    var query = function (options$$1, next) {\n+\n+        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\n+\n+        each(options$$1.params, function (value, key) {\n+            if (urlParams.indexOf(key) === -1) {\n+                query[key] = value;\n+            }\n+        });\n+\n+        query = Url.params(query);\n+\n+        if (query) {\n+            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\n+     *\u002F\n+\n+    function expand(url, params, variables) {\n+\n+        var tmpl = parse(url), expanded = tmpl.expand(params);\n+\n+        if (variables) {\n+            variables.push.apply(variables, tmpl.vars);\n+        }\n+\n+        return expanded;\n+    }\n+\n+    function parse(template) {\n+\n+        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\n+\n+        return {\n+            vars: variables,\n+            expand: function expand(context) {\n+                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\n+                    if (expression) {\n+\n+                        var operator = null, values = [];\n+\n+                        if (operators.indexOf(expression.charAt(0)) !== -1) {\n+                            operator = expression.charAt(0);\n+                            expression = expression.substr(1);\n+                        }\n+\n+                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\n+                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\n+                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n+                            variables.push(tmp[1]);\n+                        });\n+\n+                        if (operator && operator !== '+') {\n+\n+                            var separator = ',';\n+\n+                            if (operator === '?') {\n+                                separator = '&';\n+                            } else if (operator !== '#') {\n+                                separator = operator;\n+                            }\n+\n+                            return (values.length !== 0 ? operator : '') + values.join(separator);\n+                        } else {\n+                            return values.join(',');\n+                        }\n+\n+                    } else {\n+                        return encodeReserved(literal);\n+                    }\n+                });\n+            }\n+        };\n+    }\n+\n+    function getValues(context, operator, key, modifier) {\n+\n+        var value = context[key], result = [];\n+\n+        if (isDefined(value) && value !== '') {\n+            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n+                value = value.toString();\n+\n+                if (modifier && modifier !== '*') {\n+                    value = value.substring(0, parseInt(modifier, 10));\n+                }\n+\n+                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+            } else {\n+                if (modifier === '*') {\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                result.push(encodeValue(operator, value[k], k));\n+                            }\n+                        });\n+                    }\n+                } else {\n+                    var tmp = [];\n+\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            tmp.push(encodeValue(operator, value));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                tmp.push(encodeURIComponent(k));\n+                                tmp.push(encodeValue(operator, value[k].toString()));\n+                            }\n+                        });\n+                    }\n+\n+                    if (isKeyOperator(operator)) {\n+                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\n+                    } else if (tmp.length !== 0) {\n+                        result.push(tmp.join(','));\n+                    }\n+                }\n+            }\n+        } else {\n+            if (operator === ';') {\n+                result.push(encodeURIComponent(key));\n+            } else if (value === '' && (operator === '&' || operator === '?')) {\n+                result.push(encodeURIComponent(key) + '=');\n+            } else if (value === '') {\n+                result.push('');\n+            }\n+        }\n+\n+        return result;\n+    }\n+\n+    function isDefined(value) {\n+        return value !== undefined && value !== null;\n+    }\n+\n+    function isKeyOperator(operator) {\n+        return operator === ';' || operator === '&' || operator === '?';\n+    }\n+\n+    function encodeValue(operator, value, key) {\n+\n+        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\n+\n+        if (key) {\n+            return encodeURIComponent(key) + '=' + value;\n+        } else {\n+            return value;\n+        }\n+    }\n+\n+    function encodeReserved(str) {\n+        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\n+            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\n+                part = encodeURI(part);\n+            }\n+            return part;\n+        }).join('');\n+    }\n+\n+    \u002F**\n+     * URL Template (RFC 6570) Transform.\n+     *\u002F\n+\n+    var template = function (options) {\n+\n+        var variables = [], url = expand(options.url, options.params, variables);\n+\n+        variables.forEach(function (key) {\n+            delete options.params[key];\n+        });\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Service for URL templating.\n+     *\u002F\n+\n+    function Url(url, params) {\n+\n+        var self = this || {}, options$$1 = url, transform;\n+\n+        if (isString(url)) {\n+            options$$1 = {url: url, params: params};\n+        }\n+\n+        options$$1 = merge({}, Url.options, self.$options, options$$1);\n+\n+        Url.transforms.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Url.transform[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                transform = factory(handler, transform, self.$vm);\n+            }\n+\n+        });\n+\n+        return transform(options$$1);\n+    }\n+\n+    \u002F**\n+     * Url options.\n+     *\u002F\n+\n+    Url.options = {\n+        url: '',\n+        root: null,\n+        params: {}\n+    };\n+\n+    \u002F**\n+     * Url transforms.\n+     *\u002F\n+\n+    Url.transform = {template: template, query: query, root: root};\n+    Url.transforms = ['template', 'query', 'root'];\n+\n+    \u002F**\n+     * Encodes a Url parameter string.\n+     *\n+     * @param {Object} obj\n+     *\u002F\n+\n+    Url.params = function (obj) {\n+\n+        var params = [], escape = encodeURIComponent;\n+\n+        params.add = function (key, value) {\n+\n+            if (isFunction(value)) {\n+                value = value();\n+            }\n+\n+            if (value === null) {\n+                value = '';\n+            }\n+\n+            this.push(escape(key) + '=' + escape(value));\n+        };\n+\n+        serialize(params, obj);\n+\n+        return params.join('&').replace(\u002F%20\u002Fg, '+');\n+    };\n+\n+    \u002F**\n+     * Parse a URL and return its components.\n+     *\n+     * @param {String} url\n+     *\u002F\n+\n+    Url.parse = function (url) {\n+\n+        var el = document.createElement('a');\n+\n+        if (document.documentMode) {\n+            el.href = url;\n+            url = el.href;\n+        }\n+\n+        el.href = url;\n+\n+        return {\n+            href: el.href,\n+            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\n+            port: el.port,\n+            host: el.host,\n+            hostname: el.hostname,\n+            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\n+            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\n+            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\n+        };\n+    };\n+\n+    function factory(handler, next, vm) {\n+        return function (options$$1) {\n+            return handler.call(vm, options$$1, next);\n+        };\n+    }\n+\n+    function serialize(params, obj, scope) {\n+\n+        var array = isArray(obj), plain = isPlainObject(obj), hash;\n+\n+        each(obj, function (value, key) {\n+\n+            hash = isObject(value) || isArray(value);\n+\n+            if (scope) {\n+                key = scope + '[' + (plain || hash ? key : '') + ']';\n+            }\n+\n+            if (!scope && array) {\n+                params.add(value.name, value.value);\n+            } else if (hash) {\n+                serialize(params, value, key);\n+            } else {\n+                params.add(key, value);\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * XDomain client (Internet Explorer).\n+     *\u002F\n+\n+    var xdrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xdr = new XDomainRequest(), handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load') {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                resolve(request.respondWith(xdr.responseText, {status: status}));\n+            };\n+\n+            request.abort = function () { return xdr.abort(); };\n+\n+            xdr.open(request.method, request.getUrl());\n+\n+            if (request.timeout) {\n+                xdr.timeout = request.timeout;\n+            }\n+\n+            xdr.onload = handler;\n+            xdr.onabort = handler;\n+            xdr.onerror = handler;\n+            xdr.ontimeout = handler;\n+            xdr.onprogress = function () {};\n+            xdr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * CORS Interceptor.\n+     *\u002F\n+\n+    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\n+\n+    var cors = function (request, next) {\n+\n+        if (inBrowser) {\n+\n+            var orgUrl = Url.parse(location.href);\n+            var reqUrl = Url.parse(request.getUrl());\n+\n+            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\n+\n+                request.crossOrigin = true;\n+                request.emulateHTTP = false;\n+\n+                if (!SUPPORTS_CORS) {\n+                    request.client = xdrClient;\n+                }\n+            }\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Form data Interceptor.\n+     *\u002F\n+\n+    var form = function (request, next) {\n+\n+        if (isFormData(request.body)) {\n+\n+            request.headers.delete('Content-Type');\n+\n+        } else if (isObject(request.body) && request.emulateJSON) {\n+\n+            request.body = Url.params(request.body);\n+            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * JSON Interceptor.\n+     *\u002F\n+\n+    var json = function (request, next) {\n+\n+        var type = request.headers.get('Content-Type') || '';\n+\n+        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\n+            request.body = JSON.stringify(request.body);\n+        }\n+\n+        next(function (response) {\n+\n+            return response.bodyText ? when(response.text(), function (text) {\n+\n+                type = response.headers.get('Content-Type') || '';\n+\n+                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\n+\n+                    try {\n+                        response.body = JSON.parse(text);\n+                    } catch (e) {\n+                        response.body = null;\n+                    }\n+\n+                } else {\n+                    response.body = text;\n+                }\n+\n+                return response;\n+\n+            }) : response;\n+\n+        });\n+    };\n+\n+    function isJson(str) {\n+\n+        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\n+\n+        return start && end[start[0]].test(str);\n+    }\n+\n+    \u002F**\n+     * JSONP client (Browser).\n+     *\u002F\n+\n+    var jsonpClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\n+\n+            handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load' && body !== null) {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                if (status && window[callback]) {\n+                    delete window[callback];\n+                    document.body.removeChild(script);\n+                }\n+\n+                resolve(request.respondWith(body, {status: status}));\n+            };\n+\n+            window[callback] = function (result) {\n+                body = JSON.stringify(result);\n+            };\n+\n+            request.abort = function () {\n+                handler({type: 'abort'});\n+            };\n+\n+            request.params[name] = callback;\n+\n+            if (request.timeout) {\n+                setTimeout(request.abort, request.timeout);\n+            }\n+\n+            script = document.createElement('script');\n+            script.src = request.getUrl();\n+            script.type = 'text\u002Fjavascript';\n+            script.async = true;\n+            script.onload = handler;\n+            script.onerror = handler;\n+\n+            document.body.appendChild(script);\n+        });\n+    };\n+\n+    \u002F**\n+     * JSONP Interceptor.\n+     *\u002F\n+\n+    var jsonp = function (request, next) {\n+\n+        if (request.method == 'JSONP') {\n+            request.client = jsonpClient;\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Before Interceptor.\n+     *\u002F\n+\n+    var before = function (request, next) {\n+\n+        if (isFunction(request.before)) {\n+            request.before.call(this, request);\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * HTTP method override Interceptor.\n+     *\u002F\n+\n+    var method = function (request, next) {\n+\n+        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\n+            request.headers.set('X-HTTP-Method-Override', request.method);\n+            request.method = 'POST';\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Header Interceptor.\n+     *\u002F\n+\n+    var header = function (request, next) {\n+\n+        var headers = assign({}, Http.headers.common,\n+            !request.crossOrigin ? Http.headers.custom : {},\n+            Http.headers[toLower(request.method)]\n+        );\n+\n+        each(headers, function (value, name) {\n+            if (!request.headers.has(name)) {\n+                request.headers.set(name, value);\n+            }\n+        });\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * XMLHttp client (Browser).\n+     *\u002F\n+\n+    var xhrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xhr = new XMLHttpRequest(), handler = function (event) {\n+\n+                var response = request.respondWith(\n+                    'response' in xhr ? xhr.response : xhr.responseText, {\n+                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\n+                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\n+                    }\n+                );\n+\n+                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\n+                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\n+                });\n+\n+                resolve(response);\n+            };\n+\n+            request.abort = function () { return xhr.abort(); };\n+\n+            if (request.progress) {\n+                if (request.method === 'GET') {\n+                    xhr.addEventListener('progress', request.progress);\n+                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\n+                    xhr.upload.addEventListener('progress', request.progress);\n+                }\n+            }\n+\n+            xhr.open(request.method, request.getUrl(), true);\n+\n+            if (request.timeout) {\n+                xhr.timeout = request.timeout;\n+            }\n+\n+            if (request.responseType && 'responseType' in xhr) {\n+                xhr.responseType = request.responseType;\n+            }\n+\n+            if (request.withCredentials || request.credentials) {\n+                xhr.withCredentials = true;\n+            }\n+\n+            if (!request.crossOrigin) {\n+                request.headers.set('X-Requested-With', 'XMLHttpRequest');\n+            }\n+\n+            request.headers.forEach(function (value, name) {\n+                xhr.setRequestHeader(name, value);\n+            });\n+\n+            xhr.onload = handler;\n+            xhr.onabort = handler;\n+            xhr.onerror = handler;\n+            xhr.ontimeout = handler;\n+            xhr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * Http client (Node).\n+     *\u002F\n+\n+    var nodeClient = function (request) {\n+\n+        var client = require('got');\n+\n+        return new PromiseObj(function (resolve) {\n+\n+            var url = request.getUrl();\n+            var body = request.getBody();\n+            var method = request.method;\n+            var headers = {}, handler;\n+\n+            request.headers.forEach(function (value, name) {\n+                headers[name] = value;\n+            });\n+\n+            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\n+\n+                var response = request.respondWith(resp.body, {\n+                        status: resp.statusCode,\n+                        statusText: trim(resp.statusMessage)\n+                    }\n+                );\n+\n+                each(resp.headers, function (value, name) {\n+                    response.headers.set(name, value);\n+                });\n+\n+                resolve(response);\n+\n+            }, function (error$$1) { return handler(error$$1.response); });\n+        });\n+    };\n+\n+    \u002F**\n+     * Base client.\n+     *\u002F\n+\n+    var Client = function (context) {\n+\n+        var reqHandlers = [sendRequest], resHandlers = [], handler;\n+\n+        if (!isObject(context)) {\n+            context = null;\n+        }\n+\n+        function Client(request) {\n+            return new PromiseObj(function (resolve, reject) {\n+\n+                function exec() {\n+\n+                    handler = reqHandlers.pop();\n+\n+                    if (isFunction(handler)) {\n+                        handler.call(context, request, next);\n+                    } else {\n+                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\n+                        next();\n+                    }\n+                }\n+\n+                function next(response) {\n+\n+                    if (isFunction(response)) {\n+\n+                        resHandlers.unshift(response);\n+\n+                    } else if (isObject(response)) {\n+\n+                        resHandlers.forEach(function (handler) {\n+                            response = when(response, function (response) {\n+                                return handler.call(context, response) || response;\n+                            }, reject);\n+                        });\n+\n+                        when(response, resolve, reject);\n+\n+                        return;\n+                    }\n+\n+                    exec();\n+                }\n+\n+                exec();\n+\n+            }, context);\n+        }\n+\n+        Client.use = function (handler) {\n+            reqHandlers.push(handler);\n+        };\n+\n+        return Client;\n+    };\n+\n+    function sendRequest(request, resolve) {\n+\n+        var client = request.client || (inBrowser ? xhrClient : nodeClient);\n+\n+        resolve(client(request));\n+    }\n+\n+    \u002F**\n+     * HTTP Headers.\n+     *\u002F\n+\n+    var Headers = function Headers(headers) {\n+        var this$1 = this;\n+\n+\n+        this.map = {};\n+\n+        each(headers, function (value, name) { return this$1.append(name, value); });\n+    };\n+\n+    Headers.prototype.has = function has (name) {\n+        return getName(this.map, name) !== null;\n+    };\n+\n+    Headers.prototype.get = function get (name) {\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        return list ? list.join() : null;\n+    };\n+\n+    Headers.prototype.getAll = function getAll (name) {\n+        return this.map[getName(this.map, name)] || [];\n+    };\n+\n+    Headers.prototype.set = function set (name, value) {\n+        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\n+    };\n+\n+    Headers.prototype.append = function append (name, value){\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        if (list) {\n+            list.push(trim(value));\n+        } else {\n+            this.set(name, value);\n+        }\n+    };\n+\n+    Headers.prototype.delete = function delete$1 (name){\n+        delete this.map[getName(this.map, name)];\n+    };\n+\n+    Headers.prototype.deleteAll = function deleteAll (){\n+        this.map = {};\n+    };\n+\n+    Headers.prototype.forEach = function forEach (callback, thisArg) {\n+        var this$1 = this;\n+\n+        each(this.map, function (list, name) {\n+            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\n+        });\n+    };\n+\n+    function getName(map, name) {\n+        return Object.keys(map).reduce(function (prev, curr) {\n+            return toLower(name) === toLower(curr) ? curr : prev;\n+        }, null);\n+    }\n+\n+    function normalizeName(name) {\n+\n+        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\n+            throw new TypeError('Invalid character in header field name');\n+        }\n+\n+        return trim(name);\n+    }\n+\n+    \u002F**\n+     * HTTP Response.\n+     *\u002F\n+\n+    var Response = function Response(body, ref) {\n+        var url = ref.url;\n+        var headers = ref.headers;\n+        var status = ref.status;\n+        var statusText = ref.statusText;\n+\n+\n+        this.url = url;\n+        this.ok = status >= 200 && status \u003C 300;\n+        this.status = status || 0;\n+        this.statusText = statusText || '';\n+        this.headers = new Headers(headers);\n+        this.body = body;\n+\n+        if (isString(body)) {\n+\n+            this.bodyText = body;\n+\n+        } else if (isBlob(body)) {\n+\n+            this.bodyBlob = body;\n+\n+            if (isBlobText(body)) {\n+                this.bodyText = blobText(body);\n+            }\n+        }\n+    };\n+\n+    Response.prototype.blob = function blob () {\n+        return when(this.bodyBlob);\n+    };\n+\n+    Response.prototype.text = function text () {\n+        return when(this.bodyText);\n+    };\n+\n+    Response.prototype.json = function json () {\n+        return when(this.text(), function (text) { return JSON.parse(text); });\n+    };\n+\n+    Object.defineProperty(Response.prototype, 'data', {\n+\n+        get: function get() {\n+            return this.body;\n+        },\n+\n+        set: function set(body) {\n+            this.body = body;\n+        }\n+\n+    });\n+\n+    function blobText(body) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var reader = new FileReader();\n+\n+            reader.readAsText(body);\n+            reader.onload = function () {\n+                resolve(reader.result);\n+            };\n+\n+        });\n+    }\n+\n+    function isBlobText(body) {\n+        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n+    }\n+\n+    \u002F**\n+     * HTTP Request.\n+     *\u002F\n+\n+    var Request = function Request(options$$1) {\n+\n+        this.body = null;\n+        this.params = {};\n+\n+        assign(this, options$$1, {\n+            method: toUpper(options$$1.method || 'GET')\n+        });\n+\n+        if (!(this.headers instanceof Headers)) {\n+            this.headers = new Headers(this.headers);\n+        }\n+    };\n+\n+    Request.prototype.getUrl = function getUrl (){\n+        return Url(this);\n+    };\n+\n+    Request.prototype.getBody = function getBody (){\n+        return this.body;\n+    };\n+\n+    Request.prototype.respondWith = function respondWith (body, options$$1) {\n+        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n+    };\n+\n+    \u002F**\n+     * Service for sending network requests.\n+     *\u002F\n+\n+    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\n+    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\n+\n+    function Http(options$$1) {\n+\n+        var self = this || {}, client = Client(self.$vm);\n+\n+        defaults(options$$1 || {}, self.$options, Http.options);\n+\n+        Http.interceptors.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Http.interceptor[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                client.use(handler);\n+            }\n+\n+        });\n+\n+        return client(new Request(options$$1)).then(function (response) {\n+\n+            return response.ok ? response : PromiseObj.reject(response);\n+\n+        }, function (response) {\n+\n+            if (response instanceof Error) {\n+                error(response);\n+            }\n+\n+            return PromiseObj.reject(response);\n+        });\n+    }\n+\n+    Http.options = {};\n+\n+    Http.headers = {\n+        put: JSON_CONTENT_TYPE,\n+        post: JSON_CONTENT_TYPE,\n+        patch: JSON_CONTENT_TYPE,\n+        delete: JSON_CONTENT_TYPE,\n+        common: COMMON_HEADERS,\n+        custom: {}\n+    };\n+\n+    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\n+    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n+\n+    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n+        };\n+\n+    });\n+\n+    ['post', 'put', 'patch'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, body, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n+        };\n+\n+    });\n+\n+    \u002F**\n+     * Service for interacting with RESTful services.\n+     *\u002F\n+\n+    function Resource(url, params, actions, options$$1) {\n+\n+        var self = this || {}, resource = {};\n+\n+        actions = assign({},\n+            Resource.actions,\n+            actions\n+        );\n+\n+        each(actions, function (action, name) {\n+\n+            action = merge({url: url, params: assign({}, params)}, options$$1, action);\n+\n+            resource[name] = function () {\n+                return (self.$http || Http)(opts(action, arguments));\n+            };\n+        });\n+\n+        return resource;\n+    }\n+\n+    function opts(action, args) {\n+\n+        var options$$1 = assign({}, action), params = {}, body;\n+\n+        switch (args.length) {\n+\n+            case 2:\n+\n+                params = args[0];\n+                body = args[1];\n+\n+                break;\n+\n+            case 1:\n+\n+                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\n+                    body = args[0];\n+                } else {\n+                    params = args[0];\n+                }\n+\n+                break;\n+\n+            case 0:\n+\n+                break;\n+\n+            default:\n+\n+                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n+        }\n+\n+        options$$1.body = body;\n+        options$$1.params = assign({}, options$$1.params, params);\n+\n+        return options$$1;\n+    }\n+\n+    Resource.actions = {\n+\n+        get: {method: 'GET'},\n+        save: {method: 'POST'},\n+        query: {method: 'GET'},\n+        update: {method: 'PUT'},\n+        remove: {method: 'DELETE'},\n+        delete: {method: 'DELETE'}\n+\n+    };\n+\n+    \u002F**\n+     * Install plugin.\n+     *\u002F\n+\n+    function plugin(Vue) {\n+\n+        if (plugin.installed) {\n+            return;\n+        }\n+\n+        Util(Vue);\n+\n+        Vue.url = Url;\n+        Vue.http = Http;\n+        Vue.resource = Resource;\n+        Vue.Promise = PromiseObj;\n+\n+        Object.defineProperties(Vue.prototype, {\n+\n+            $url: {\n+                get: function get() {\n+                    return options(Vue.url, this, this.$options.url);\n+                }\n+            },\n+\n+            $http: {\n+                get: function get() {\n+                    return options(Vue.http, this, this.$options.http);\n+                }\n+            },\n+\n+            $resource: {\n+                get: function get() {\n+                    return Vue.resource.bind(this);\n+                }\n+            },\n+\n+            $promise: {\n+                get: function get() {\n+                    var this$1 = this;\n+\n+                    return function (executor) { return new Vue.Promise(executor, this$1); };\n+                }\n+            }\n+\n+        });\n+    }\n+\n+    if (typeof window !== 'undefined' && window.Vue) {\n+        window.Vue.use(plugin);\n+    }\n+\n+    return plugin;\n+\n+})));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1574 +1,1574 @@\n-\u002F*!\r\n- * vue-resource v1.3.4\r\n- * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global.VueResource = factory());\r\n-}(this, (function () { 'use strict';\r\n-\r\n-    \u002F**\r\n-     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\r\n-     *\u002F\r\n-\r\n-    var RESOLVED = 0;\r\n-    var REJECTED = 1;\r\n-    var PENDING  = 2;\r\n-\r\n-    function Promise$1(executor) {\r\n-\r\n-        this.state = PENDING;\r\n-        this.value = undefined;\r\n-        this.deferred = [];\r\n-\r\n-        var promise = this;\r\n-\r\n-        try {\r\n-            executor(function (x) {\r\n-                promise.resolve(x);\r\n-            }, function (r) {\r\n-                promise.reject(r);\r\n-            });\r\n-        } catch (e) {\r\n-            promise.reject(e);\r\n-        }\r\n-    }\r\n-\r\n-    Promise$1.reject = function (r) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            reject(r);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.resolve = function (x) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            resolve(x);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.all = function all(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            var count = 0, result = [];\r\n-\r\n-            if (iterable.length === 0) {\r\n-                resolve(result);\r\n-            }\r\n-\r\n-            function resolver(i) {\r\n-                return function (x) {\r\n-                    result[i] = x;\r\n-                    count += 1;\r\n-\r\n-                    if (count === iterable.length) {\r\n-                        resolve(result);\r\n-                    }\r\n-                };\r\n-            }\r\n-\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.race = function race(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolve, reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    var p$1 = Promise$1.prototype;\r\n-\r\n-    p$1.resolve = function resolve(x) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (x === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            var called = false;\r\n-\r\n-            try {\r\n-                var then = x && x['then'];\r\n-\r\n-                if (x !== null && typeof x === 'object' && typeof then === 'function') {\r\n-                    then.call(x, function (x) {\r\n-                        if (!called) {\r\n-                            promise.resolve(x);\r\n-                        }\r\n-                        called = true;\r\n-\r\n-                    }, function (r) {\r\n-                        if (!called) {\r\n-                            promise.reject(r);\r\n-                        }\r\n-                        called = true;\r\n-                    });\r\n-                    return;\r\n-                }\r\n-            } catch (e) {\r\n-                if (!called) {\r\n-                    promise.reject(e);\r\n-                }\r\n-                return;\r\n-            }\r\n-\r\n-            promise.state = RESOLVED;\r\n-            promise.value = x;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.reject = function reject(reason) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (reason === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            promise.state = REJECTED;\r\n-            promise.value = reason;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.notify = function notify() {\r\n-        var promise = this;\r\n-\r\n-        nextTick(function () {\r\n-            if (promise.state !== PENDING) {\r\n-                while (promise.deferred.length) {\r\n-                    var deferred = promise.deferred.shift(),\r\n-                        onResolved = deferred[0],\r\n-                        onRejected = deferred[1],\r\n-                        resolve = deferred[2],\r\n-                        reject = deferred[3];\r\n-\r\n-                    try {\r\n-                        if (promise.state === RESOLVED) {\r\n-                            if (typeof onResolved === 'function') {\r\n-                                resolve(onResolved.call(undefined, promise.value));\r\n-                            } else {\r\n-                                resolve(promise.value);\r\n-                            }\r\n-                        } else if (promise.state === REJECTED) {\r\n-                            if (typeof onRejected === 'function') {\r\n-                                resolve(onRejected.call(undefined, promise.value));\r\n-                            } else {\r\n-                                reject(promise.value);\r\n-                            }\r\n-                        }\r\n-                    } catch (e) {\r\n-                        reject(e);\r\n-                    }\r\n-                }\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    p$1.then = function then(onResolved, onRejected) {\r\n-        var promise = this;\r\n-\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            promise.deferred.push([onResolved, onRejected, resolve, reject]);\r\n-            promise.notify();\r\n-        });\r\n-    };\r\n-\r\n-    p$1.catch = function (onRejected) {\r\n-        return this.then(undefined, onRejected);\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Promise adapter.\r\n-     *\u002F\r\n-\r\n-    if (typeof Promise === 'undefined') {\r\n-        window.Promise = Promise$1;\r\n-    }\r\n-\r\n-    function PromiseObj(executor, context) {\r\n-\r\n-        if (executor instanceof Promise) {\r\n-            this.promise = executor;\r\n-        } else {\r\n-            this.promise = new Promise(executor.bind(context));\r\n-        }\r\n-\r\n-        this.context = context;\r\n-    }\r\n-\r\n-    PromiseObj.all = function (iterable, context) {\r\n-        return new PromiseObj(Promise.all(iterable), context);\r\n-    };\r\n-\r\n-    PromiseObj.resolve = function (value, context) {\r\n-        return new PromiseObj(Promise.resolve(value), context);\r\n-    };\r\n-\r\n-    PromiseObj.reject = function (reason, context) {\r\n-        return new PromiseObj(Promise.reject(reason), context);\r\n-    };\r\n-\r\n-    PromiseObj.race = function (iterable, context) {\r\n-        return new PromiseObj(Promise.race(iterable), context);\r\n-    };\r\n-\r\n-    var p = PromiseObj.prototype;\r\n-\r\n-    p.bind = function (context) {\r\n-        this.context = context;\r\n-        return this;\r\n-    };\r\n-\r\n-    p.then = function (fulfilled, rejected) {\r\n-\r\n-        if (fulfilled && fulfilled.bind && this.context) {\r\n-            fulfilled = fulfilled.bind(this.context);\r\n-        }\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\r\n-    };\r\n-\r\n-    p.catch = function (rejected) {\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.catch(rejected), this.context);\r\n-    };\r\n-\r\n-    p.finally = function (callback) {\r\n-\r\n-        return this.then(function (value) {\r\n-                callback.call(this);\r\n-                return value;\r\n-            }, function (reason) {\r\n-                callback.call(this);\r\n-                return Promise.reject(reason);\r\n-            }\r\n-        );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Utility functions.\r\n-     *\u002F\r\n-\r\n-    var ref = {};\r\n-    var hasOwnProperty = ref.hasOwnProperty;\r\n-\r\n-    var ref$1 = [];\r\n-    var slice = ref$1.slice;\r\n-    var debug = false;\r\n-    var ntick;\r\n-\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-\r\n-    var Util = function (ref) {\r\n-        var config = ref.config;\r\n-        var nextTick = ref.nextTick;\r\n-\r\n-        ntick = nextTick;\r\n-        debug = config.debug || !config.silent;\r\n-    };\r\n-\r\n-    function warn(msg) {\r\n-        if (typeof console !== 'undefined' && debug) {\r\n-            console.warn('[VueResource warn]: ' + msg);\r\n-        }\r\n-    }\r\n-\r\n-    function error(msg) {\r\n-        if (typeof console !== 'undefined') {\r\n-            console.error(msg);\r\n-        }\r\n-    }\r\n-\r\n-    function nextTick(cb, ctx) {\r\n-        return ntick(cb, ctx);\r\n-    }\r\n-\r\n-    function trim(str) {\r\n-        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\r\n-    }\r\n-\r\n-    function trimEnd(str, chars) {\r\n-\r\n-        if (str && chars === undefined) {\r\n-            return str.replace(\u002F\\s+$\u002F, '');\r\n-        }\r\n-\r\n-        if (!str || !chars) {\r\n-            return str;\r\n-        }\r\n-\r\n-        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\r\n-    }\r\n-\r\n-    function toLower(str) {\r\n-        return str ? str.toLowerCase() : '';\r\n-    }\r\n-\r\n-    function toUpper(str) {\r\n-        return str ? str.toUpperCase() : '';\r\n-    }\r\n-\r\n-    var isArray = Array.isArray;\r\n-\r\n-    function isString(val) {\r\n-        return typeof val === 'string';\r\n-    }\r\n-\r\n-\r\n-\r\n-    function isFunction(val) {\r\n-        return typeof val === 'function';\r\n-    }\r\n-\r\n-    function isObject(obj) {\r\n-        return obj !== null && typeof obj === 'object';\r\n-    }\r\n-\r\n-    function isPlainObject(obj) {\r\n-        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\r\n-    }\r\n-\r\n-    function isBlob(obj) {\r\n-        return typeof Blob !== 'undefined' && obj instanceof Blob;\r\n-    }\r\n-\r\n-    function isFormData(obj) {\r\n-        return typeof FormData !== 'undefined' && obj instanceof FormData;\r\n-    }\r\n-\r\n-    function when(value, fulfilled, rejected) {\r\n-\r\n-        var promise = PromiseObj.resolve(value);\r\n-\r\n-        if (arguments.length \u003C 2) {\r\n-            return promise;\r\n-        }\r\n-\r\n-        return promise.then(fulfilled, rejected);\r\n-    }\r\n-\r\n-    function options(fn, obj, opts) {\r\n-\r\n-        opts = opts || {};\r\n-\r\n-        if (isFunction(opts)) {\r\n-            opts = opts.call(obj);\r\n-        }\r\n-\r\n-        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\r\n-    }\r\n-\r\n-    function each(obj, iterator) {\r\n-\r\n-        var i, key;\r\n-\r\n-        if (isArray(obj)) {\r\n-            for (i = 0; i \u003C obj.length; i++) {\r\n-                iterator.call(obj[i], obj[i], i);\r\n-            }\r\n-        } else if (isObject(obj)) {\r\n-            for (key in obj) {\r\n-                if (hasOwnProperty.call(obj, key)) {\r\n-                    iterator.call(obj[key], obj[key], key);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        return obj;\r\n-    }\r\n-\r\n-    var assign = Object.assign || _assign;\r\n-\r\n-    function merge(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source, true);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function defaults(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-\r\n-            for (var key in source) {\r\n-                if (target[key] === undefined) {\r\n-                    target[key] = source[key];\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _assign(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _merge(target, source, deep) {\r\n-        for (var key in source) {\r\n-            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\r\n-                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\r\n-                    target[key] = {};\r\n-                }\r\n-                if (isArray(source[key]) && !isArray(target[key])) {\r\n-                    target[key] = [];\r\n-                }\r\n-                _merge(target[key], source[key], deep);\r\n-            } else if (source[key] !== undefined) {\r\n-                target[key] = source[key];\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Root Prefix Transform.\r\n-     *\u002F\r\n-\r\n-    var root = function (options$$1, next) {\r\n-\r\n-        var url = next(options$$1);\r\n-\r\n-        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\r\n-            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Query Parameter Transform.\r\n-     *\u002F\r\n-\r\n-    var query = function (options$$1, next) {\r\n-\r\n-        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\r\n-\r\n-        each(options$$1.params, function (value, key) {\r\n-            if (urlParams.indexOf(key) === -1) {\r\n-                query[key] = value;\r\n-            }\r\n-        });\r\n-\r\n-        query = Url.params(query);\r\n-\r\n-        if (query) {\r\n-            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\r\n-     *\u002F\r\n-\r\n-    function expand(url, params, variables) {\r\n-\r\n-        var tmpl = parse(url), expanded = tmpl.expand(params);\r\n-\r\n-        if (variables) {\r\n-            variables.push.apply(variables, tmpl.vars);\r\n-        }\r\n-\r\n-        return expanded;\r\n-    }\r\n-\r\n-    function parse(template) {\r\n-\r\n-        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\r\n-\r\n-        return {\r\n-            vars: variables,\r\n-            expand: function expand(context) {\r\n-                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\r\n-                    if (expression) {\r\n-\r\n-                        var operator = null, values = [];\r\n-\r\n-                        if (operators.indexOf(expression.charAt(0)) !== -1) {\r\n-                            operator = expression.charAt(0);\r\n-                            expression = expression.substr(1);\r\n-                        }\r\n-\r\n-                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\r\n-                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\r\n-                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\r\n-                            variables.push(tmp[1]);\r\n-                        });\r\n-\r\n-                        if (operator && operator !== '+') {\r\n-\r\n-                            var separator = ',';\r\n-\r\n-                            if (operator === '?') {\r\n-                                separator = '&';\r\n-                            } else if (operator !== '#') {\r\n-                                separator = operator;\r\n-                            }\r\n-\r\n-                            return (values.length !== 0 ? operator : '') + values.join(separator);\r\n-                        } else {\r\n-                            return values.join(',');\r\n-                        }\r\n-\r\n-                    } else {\r\n-                        return encodeReserved(literal);\r\n-                    }\r\n-                });\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function getValues(context, operator, key, modifier) {\r\n-\r\n-        var value = context[key], result = [];\r\n-\r\n-        if (isDefined(value) && value !== '') {\r\n-            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n-                value = value.toString();\r\n-\r\n-                if (modifier && modifier !== '*') {\r\n-                    value = value.substring(0, parseInt(modifier, 10));\r\n-                }\r\n-\r\n-                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-            } else {\r\n-                if (modifier === '*') {\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                result.push(encodeValue(operator, value[k], k));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-                } else {\r\n-                    var tmp = [];\r\n-\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            tmp.push(encodeValue(operator, value));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                tmp.push(encodeURIComponent(k));\r\n-                                tmp.push(encodeValue(operator, value[k].toString()));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-\r\n-                    if (isKeyOperator(operator)) {\r\n-                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\r\n-                    } else if (tmp.length !== 0) {\r\n-                        result.push(tmp.join(','));\r\n-                    }\r\n-                }\r\n-            }\r\n-        } else {\r\n-            if (operator === ';') {\r\n-                result.push(encodeURIComponent(key));\r\n-            } else if (value === '' && (operator === '&' || operator === '?')) {\r\n-                result.push(encodeURIComponent(key) + '=');\r\n-            } else if (value === '') {\r\n-                result.push('');\r\n-            }\r\n-        }\r\n-\r\n-        return result;\r\n-    }\r\n-\r\n-    function isDefined(value) {\r\n-        return value !== undefined && value !== null;\r\n-    }\r\n-\r\n-    function isKeyOperator(operator) {\r\n-        return operator === ';' || operator === '&' || operator === '?';\r\n-    }\r\n-\r\n-    function encodeValue(operator, value, key) {\r\n-\r\n-        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\r\n-\r\n-        if (key) {\r\n-            return encodeURIComponent(key) + '=' + value;\r\n-        } else {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    function encodeReserved(str) {\r\n-        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\r\n-            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\r\n-                part = encodeURI(part);\r\n-            }\r\n-            return part;\r\n-        }).join('');\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * URL Template (RFC 6570) Transform.\r\n-     *\u002F\r\n-\r\n-    var template = function (options) {\r\n-\r\n-        var variables = [], url = expand(options.url, options.params, variables);\r\n-\r\n-        variables.forEach(function (key) {\r\n-            delete options.params[key];\r\n-        });\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for URL templating.\r\n-     *\u002F\r\n-\r\n-    function Url(url, params) {\r\n-\r\n-        var self = this || {}, options$$1 = url, transform;\r\n-\r\n-        if (isString(url)) {\r\n-            options$$1 = {url: url, params: params};\r\n-        }\r\n-\r\n-        options$$1 = merge({}, Url.options, self.$options, options$$1);\r\n-\r\n-        Url.transforms.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Url.transform[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                transform = factory(handler, transform, self.$vm);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return transform(options$$1);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Url options.\r\n-     *\u002F\r\n-\r\n-    Url.options = {\r\n-        url: '',\r\n-        root: null,\r\n-        params: {}\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Url transforms.\r\n-     *\u002F\r\n-\r\n-    Url.transform = {template: template, query: query, root: root};\r\n-    Url.transforms = ['template', 'query', 'root'];\r\n-\r\n-    \u002F**\r\n-     * Encodes a Url parameter string.\r\n-     *\r\n-     * @param {Object} obj\r\n-     *\u002F\r\n-\r\n-    Url.params = function (obj) {\r\n-\r\n-        var params = [], escape = encodeURIComponent;\r\n-\r\n-        params.add = function (key, value) {\r\n-\r\n-            if (isFunction(value)) {\r\n-                value = value();\r\n-            }\r\n-\r\n-            if (value === null) {\r\n-                value = '';\r\n-            }\r\n-\r\n-            this.push(escape(key) + '=' + escape(value));\r\n-        };\r\n-\r\n-        serialize(params, obj);\r\n-\r\n-        return params.join('&').replace(\u002F%20\u002Fg, '+');\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Parse a URL and return its components.\r\n-     *\r\n-     * @param {String} url\r\n-     *\u002F\r\n-\r\n-    Url.parse = function (url) {\r\n-\r\n-        var el = document.createElement('a');\r\n-\r\n-        if (document.documentMode) {\r\n-            el.href = url;\r\n-            url = el.href;\r\n-        }\r\n-\r\n-        el.href = url;\r\n-\r\n-        return {\r\n-            href: el.href,\r\n-            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\r\n-            port: el.port,\r\n-            host: el.host,\r\n-            hostname: el.hostname,\r\n-            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\r\n-            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\r\n-            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\r\n-        };\r\n-    };\r\n-\r\n-    function factory(handler, next, vm) {\r\n-        return function (options$$1) {\r\n-            return handler.call(vm, options$$1, next);\r\n-        };\r\n-    }\r\n-\r\n-    function serialize(params, obj, scope) {\r\n-\r\n-        var array = isArray(obj), plain = isPlainObject(obj), hash;\r\n-\r\n-        each(obj, function (value, key) {\r\n-\r\n-            hash = isObject(value) || isArray(value);\r\n-\r\n-            if (scope) {\r\n-                key = scope + '[' + (plain || hash ? key : '') + ']';\r\n-            }\r\n-\r\n-            if (!scope && array) {\r\n-                params.add(value.name, value.value);\r\n-            } else if (hash) {\r\n-                serialize(params, value, key);\r\n-            } else {\r\n-                params.add(key, value);\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * XDomain client (Internet Explorer).\r\n-     *\u002F\r\n-\r\n-    var xdrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xdr = new XDomainRequest(), handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load') {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                resolve(request.respondWith(xdr.responseText, {status: status}));\r\n-            };\r\n-\r\n-            request.abort = function () { return xdr.abort(); };\r\n-\r\n-            xdr.open(request.method, request.getUrl());\r\n-\r\n-            if (request.timeout) {\r\n-                xdr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            xdr.onload = handler;\r\n-            xdr.onabort = handler;\r\n-            xdr.onerror = handler;\r\n-            xdr.ontimeout = handler;\r\n-            xdr.onprogress = function () {};\r\n-            xdr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * CORS Interceptor.\r\n-     *\u002F\r\n-\r\n-    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\r\n-\r\n-    var cors = function (request, next) {\r\n-\r\n-        if (inBrowser) {\r\n-\r\n-            var orgUrl = Url.parse(location.href);\r\n-            var reqUrl = Url.parse(request.getUrl());\r\n-\r\n-            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\r\n-\r\n-                request.crossOrigin = true;\r\n-                request.emulateHTTP = false;\r\n-\r\n-                if (!SUPPORTS_CORS) {\r\n-                    request.client = xdrClient;\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Form data Interceptor.\r\n-     *\u002F\r\n-\r\n-    var form = function (request, next) {\r\n-\r\n-        if (isFormData(request.body)) {\r\n-\r\n-            request.headers.delete('Content-Type');\r\n-\r\n-        } else if (isObject(request.body) && request.emulateJSON) {\r\n-\r\n-            request.body = Url.params(request.body);\r\n-            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSON Interceptor.\r\n-     *\u002F\r\n-\r\n-    var json = function (request, next) {\r\n-\r\n-        var type = request.headers.get('Content-Type') || '';\r\n-\r\n-        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\r\n-            request.body = JSON.stringify(request.body);\r\n-        }\r\n-\r\n-        next(function (response) {\r\n-\r\n-            return response.bodyText ? when(response.text(), function (text) {\r\n-\r\n-                type = response.headers.get('Content-Type') || '';\r\n-\r\n-                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\r\n-\r\n-                    try {\r\n-                        response.body = JSON.parse(text);\r\n-                    } catch (e) {\r\n-                        response.body = null;\r\n-                    }\r\n-\r\n-                } else {\r\n-                    response.body = text;\r\n-                }\r\n-\r\n-                return response;\r\n-\r\n-            }) : response;\r\n-\r\n-        });\r\n-    };\r\n-\r\n-    function isJson(str) {\r\n-\r\n-        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\r\n-\r\n-        return start && end[start[0]].test(str);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * JSONP client (Browser).\r\n-     *\u002F\r\n-\r\n-    var jsonpClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\r\n-\r\n-            handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load' && body !== null) {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                if (status && window[callback]) {\r\n-                    delete window[callback];\r\n-                    document.body.removeChild(script);\r\n-                }\r\n-\r\n-                resolve(request.respondWith(body, {status: status}));\r\n-            };\r\n-\r\n-            window[callback] = function (result) {\r\n-                body = JSON.stringify(result);\r\n-            };\r\n-\r\n-            request.abort = function () {\r\n-                handler({type: 'abort'});\r\n-            };\r\n-\r\n-            request.params[name] = callback;\r\n-\r\n-            if (request.timeout) {\r\n-                setTimeout(request.abort, request.timeout);\r\n-            }\r\n-\r\n-            script = document.createElement('script');\r\n-            script.src = request.getUrl();\r\n-            script.type = 'text\u002Fjavascript';\r\n-            script.async = true;\r\n-            script.onload = handler;\r\n-            script.onerror = handler;\r\n-\r\n-            document.body.appendChild(script);\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSONP Interceptor.\r\n-     *\u002F\r\n-\r\n-    var jsonp = function (request, next) {\r\n-\r\n-        if (request.method == 'JSONP') {\r\n-            request.client = jsonpClient;\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Before Interceptor.\r\n-     *\u002F\r\n-\r\n-    var before = function (request, next) {\r\n-\r\n-        if (isFunction(request.before)) {\r\n-            request.before.call(this, request);\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * HTTP method override Interceptor.\r\n-     *\u002F\r\n-\r\n-    var method = function (request, next) {\r\n-\r\n-        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\r\n-            request.headers.set('X-HTTP-Method-Override', request.method);\r\n-            request.method = 'POST';\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Header Interceptor.\r\n-     *\u002F\r\n-\r\n-    var header = function (request, next) {\r\n-\r\n-        var headers = assign({}, Http.headers.common,\r\n-            !request.crossOrigin ? Http.headers.custom : {},\r\n-            Http.headers[toLower(request.method)]\r\n-        );\r\n-\r\n-        each(headers, function (value, name) {\r\n-            if (!request.headers.has(name)) {\r\n-                request.headers.set(name, value);\r\n-            }\r\n-        });\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * XMLHttp client (Browser).\r\n-     *\u002F\r\n-\r\n-    var xhrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xhr = new XMLHttpRequest(), handler = function (event) {\r\n-\r\n-                var response = request.respondWith(\r\n-                    'response' in xhr ? xhr.response : xhr.responseText, {\r\n-                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\r\n-                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\r\n-                    }\r\n-                );\r\n-\r\n-                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\r\n-                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\r\n-                });\r\n-\r\n-                resolve(response);\r\n-            };\r\n-\r\n-            request.abort = function () { return xhr.abort(); };\r\n-\r\n-            if (request.progress) {\r\n-                if (request.method === 'GET') {\r\n-                    xhr.addEventListener('progress', request.progress);\r\n-                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\r\n-                    xhr.upload.addEventListener('progress', request.progress);\r\n-                }\r\n-            }\r\n-\r\n-            xhr.open(request.method, request.getUrl(), true);\r\n-\r\n-            if (request.timeout) {\r\n-                xhr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            if (request.responseType && 'responseType' in xhr) {\r\n-                xhr.responseType = request.responseType;\r\n-            }\r\n-\r\n-            if (request.withCredentials || request.credentials) {\r\n-                xhr.withCredentials = true;\r\n-            }\r\n-\r\n-            if (!request.crossOrigin) {\r\n-                request.headers.set('X-Requested-With', 'XMLHttpRequest');\r\n-            }\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                xhr.setRequestHeader(name, value);\r\n-            });\r\n-\r\n-            xhr.onload = handler;\r\n-            xhr.onabort = handler;\r\n-            xhr.onerror = handler;\r\n-            xhr.ontimeout = handler;\r\n-            xhr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Http client (Node).\r\n-     *\u002F\r\n-\r\n-    var nodeClient = function (request) {\r\n-\r\n-        var client = require('got');\r\n-\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var url = request.getUrl();\r\n-            var body = request.getBody();\r\n-            var method = request.method;\r\n-            var headers = {}, handler;\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                headers[name] = value;\r\n-            });\r\n-\r\n-            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\r\n-\r\n-                var response = request.respondWith(resp.body, {\r\n-                        status: resp.statusCode,\r\n-                        statusText: trim(resp.statusMessage)\r\n-                    }\r\n-                );\r\n-\r\n-                each(resp.headers, function (value, name) {\r\n-                    response.headers.set(name, value);\r\n-                });\r\n-\r\n-                resolve(response);\r\n-\r\n-            }, function (error$$1) { return handler(error$$1.response); });\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Base client.\r\n-     *\u002F\r\n-\r\n-    var Client = function (context) {\r\n-\r\n-        var reqHandlers = [sendRequest], resHandlers = [], handler;\r\n-\r\n-        if (!isObject(context)) {\r\n-            context = null;\r\n-        }\r\n-\r\n-        function Client(request) {\r\n-            return new PromiseObj(function (resolve, reject) {\r\n-\r\n-                function exec() {\r\n-\r\n-                    handler = reqHandlers.pop();\r\n-\r\n-                    if (isFunction(handler)) {\r\n-                        handler.call(context, request, next);\r\n-                    } else {\r\n-                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\r\n-                        next();\r\n-                    }\r\n-                }\r\n-\r\n-                function next(response) {\r\n-\r\n-                    if (isFunction(response)) {\r\n-\r\n-                        resHandlers.unshift(response);\r\n-\r\n-                    } else if (isObject(response)) {\r\n-\r\n-                        resHandlers.forEach(function (handler) {\r\n-                            response = when(response, function (response) {\r\n-                                return handler.call(context, response) || response;\r\n-                            }, reject);\r\n-                        });\r\n-\r\n-                        when(response, resolve, reject);\r\n-\r\n-                        return;\r\n-                    }\r\n-\r\n-                    exec();\r\n-                }\r\n-\r\n-                exec();\r\n-\r\n-            }, context);\r\n-        }\r\n-\r\n-        Client.use = function (handler) {\r\n-            reqHandlers.push(handler);\r\n-        };\r\n-\r\n-        return Client;\r\n-    };\r\n-\r\n-    function sendRequest(request, resolve) {\r\n-\r\n-        var client = request.client || (inBrowser ? xhrClient : nodeClient);\r\n-\r\n-        resolve(client(request));\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Headers.\r\n-     *\u002F\r\n-\r\n-    var Headers = function Headers(headers) {\r\n-        var this$1 = this;\r\n-\r\n-\r\n-        this.map = {};\r\n-\r\n-        each(headers, function (value, name) { return this$1.append(name, value); });\r\n-    };\r\n-\r\n-    Headers.prototype.has = function has (name) {\r\n-        return getName(this.map, name) !== null;\r\n-    };\r\n-\r\n-    Headers.prototype.get = function get (name) {\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        return list ? list.join() : null;\r\n-    };\r\n-\r\n-    Headers.prototype.getAll = function getAll (name) {\r\n-        return this.map[getName(this.map, name)] || [];\r\n-    };\r\n-\r\n-    Headers.prototype.set = function set (name, value) {\r\n-        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\r\n-    };\r\n-\r\n-    Headers.prototype.append = function append (name, value){\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        if (list) {\r\n-            list.push(trim(value));\r\n-        } else {\r\n-            this.set(name, value);\r\n-        }\r\n-    };\r\n-\r\n-    Headers.prototype.delete = function delete$1 (name){\r\n-        delete this.map[getName(this.map, name)];\r\n-    };\r\n-\r\n-    Headers.prototype.deleteAll = function deleteAll (){\r\n-        this.map = {};\r\n-    };\r\n-\r\n-    Headers.prototype.forEach = function forEach (callback, thisArg) {\r\n-        var this$1 = this;\r\n-\r\n-        each(this.map, function (list, name) {\r\n-            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\r\n-        });\r\n-    };\r\n-\r\n-    function getName(map, name) {\r\n-        return Object.keys(map).reduce(function (prev, curr) {\r\n-            return toLower(name) === toLower(curr) ? curr : prev;\r\n-        }, null);\r\n-    }\r\n-\r\n-    function normalizeName(name) {\r\n-\r\n-        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\r\n-            throw new TypeError('Invalid character in header field name');\r\n-        }\r\n-\r\n-        return trim(name);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Response.\r\n-     *\u002F\r\n-\r\n-    var Response = function Response(body, ref) {\r\n-        var url = ref.url;\r\n-        var headers = ref.headers;\r\n-        var status = ref.status;\r\n-        var statusText = ref.statusText;\r\n-\r\n-\r\n-        this.url = url;\r\n-        this.ok = status >= 200 && status \u003C 300;\r\n-        this.status = status || 0;\r\n-        this.statusText = statusText || '';\r\n-        this.headers = new Headers(headers);\r\n-        this.body = body;\r\n-\r\n-        if (isString(body)) {\r\n-\r\n-            this.bodyText = body;\r\n-\r\n-        } else if (isBlob(body)) {\r\n-\r\n-            this.bodyBlob = body;\r\n-\r\n-            if (isBlobText(body)) {\r\n-                this.bodyText = blobText(body);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    Response.prototype.blob = function blob () {\r\n-        return when(this.bodyBlob);\r\n-    };\r\n-\r\n-    Response.prototype.text = function text () {\r\n-        return when(this.bodyText);\r\n-    };\r\n-\r\n-    Response.prototype.json = function json () {\r\n-        return when(this.text(), function (text) { return JSON.parse(text); });\r\n-    };\r\n-\r\n-    Object.defineProperty(Response.prototype, 'data', {\r\n-\r\n-        get: function get() {\r\n-            return this.body;\r\n-        },\r\n-\r\n-        set: function set(body) {\r\n-            this.body = body;\r\n-        }\r\n-\r\n-    });\r\n-\r\n-    function blobText(body) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var reader = new FileReader();\r\n-\r\n-            reader.readAsText(body);\r\n-            reader.onload = function () {\r\n-                resolve(reader.result);\r\n-            };\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    function isBlobText(body) {\r\n-        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Request.\r\n-     *\u002F\r\n-\r\n-    var Request = function Request(options$$1) {\r\n-\r\n-        this.body = null;\r\n-        this.params = {};\r\n-\r\n-        assign(this, options$$1, {\r\n-            method: toUpper(options$$1.method || 'GET')\r\n-        });\r\n-\r\n-        if (!(this.headers instanceof Headers)) {\r\n-            this.headers = new Headers(this.headers);\r\n-        }\r\n-    };\r\n-\r\n-    Request.prototype.getUrl = function getUrl (){\r\n-        return Url(this);\r\n-    };\r\n-\r\n-    Request.prototype.getBody = function getBody (){\r\n-        return this.body;\r\n-    };\r\n-\r\n-    Request.prototype.respondWith = function respondWith (body, options$$1) {\r\n-        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for sending network requests.\r\n-     *\u002F\r\n-\r\n-    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\r\n-    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\r\n-\r\n-    function Http(options$$1) {\r\n-\r\n-        var self = this || {}, client = Client(self.$vm);\r\n-\r\n-        defaults(options$$1 || {}, self.$options, Http.options);\r\n-\r\n-        Http.interceptors.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Http.interceptor[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                client.use(handler);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return client(new Request(options$$1)).then(function (response) {\r\n-\r\n-            return response.ok ? response : PromiseObj.reject(response);\r\n-\r\n-        }, function (response) {\r\n-\r\n-            if (response instanceof Error) {\r\n-                error(response);\r\n-            }\r\n-\r\n-            return PromiseObj.reject(response);\r\n-        });\r\n-    }\r\n-\r\n-    Http.options = {};\r\n-\r\n-    Http.headers = {\r\n-        put: JSON_CONTENT_TYPE,\r\n-        post: JSON_CONTENT_TYPE,\r\n-        patch: JSON_CONTENT_TYPE,\r\n-        delete: JSON_CONTENT_TYPE,\r\n-        common: COMMON_HEADERS,\r\n-        custom: {}\r\n-    };\r\n-\r\n-    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\r\n-    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\r\n-\r\n-    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    ['post', 'put', 'patch'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, body, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Service for interacting with RESTful services.\r\n-     *\u002F\r\n-\r\n-    function Resource(url, params, actions, options$$1) {\r\n-\r\n-        var self = this || {}, resource = {};\r\n-\r\n-        actions = assign({},\r\n-            Resource.actions,\r\n-            actions\r\n-        );\r\n-\r\n-        each(actions, function (action, name) {\r\n-\r\n-            action = merge({url: url, params: assign({}, params)}, options$$1, action);\r\n-\r\n-            resource[name] = function () {\r\n-                return (self.$http || Http)(opts(action, arguments));\r\n-            };\r\n-        });\r\n-\r\n-        return resource;\r\n-    }\r\n-\r\n-    function opts(action, args) {\r\n-\r\n-        var options$$1 = assign({}, action), params = {}, body;\r\n-\r\n-        switch (args.length) {\r\n-\r\n-            case 2:\r\n-\r\n-                params = args[0];\r\n-                body = args[1];\r\n-\r\n-                break;\r\n-\r\n-            case 1:\r\n-\r\n-                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\r\n-                    body = args[0];\r\n-                } else {\r\n-                    params = args[0];\r\n-                }\r\n-\r\n-                break;\r\n-\r\n-            case 0:\r\n-\r\n-                break;\r\n-\r\n-            default:\r\n-\r\n-                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\r\n-        }\r\n-\r\n-        options$$1.body = body;\r\n-        options$$1.params = assign({}, options$$1.params, params);\r\n-\r\n-        return options$$1;\r\n-    }\r\n-\r\n-    Resource.actions = {\r\n-\r\n-        get: {method: 'GET'},\r\n-        save: {method: 'POST'},\r\n-        query: {method: 'GET'},\r\n-        update: {method: 'PUT'},\r\n-        remove: {method: 'DELETE'},\r\n-        delete: {method: 'DELETE'}\r\n-\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Install plugin.\r\n-     *\u002F\r\n-\r\n-    function plugin(Vue) {\r\n-\r\n-        if (plugin.installed) {\r\n-            return;\r\n-        }\r\n-\r\n-        Util(Vue);\r\n-\r\n-        Vue.url = Url;\r\n-        Vue.http = Http;\r\n-        Vue.resource = Resource;\r\n-        Vue.Promise = PromiseObj;\r\n-\r\n-        Object.defineProperties(Vue.prototype, {\r\n-\r\n-            $url: {\r\n-                get: function get() {\r\n-                    return options(Vue.url, this, this.$options.url);\r\n-                }\r\n-            },\r\n-\r\n-            $http: {\r\n-                get: function get() {\r\n-                    return options(Vue.http, this, this.$options.http);\r\n-                }\r\n-            },\r\n-\r\n-            $resource: {\r\n-                get: function get() {\r\n-                    return Vue.resource.bind(this);\r\n-                }\r\n-            },\r\n-\r\n-            $promise: {\r\n-                get: function get() {\r\n-                    var this$1 = this;\r\n-\r\n-                    return function (executor) { return new Vue.Promise(executor, this$1); };\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    if (typeof window !== 'undefined' && window.Vue) {\r\n-        window.Vue.use(plugin);\r\n-    }\r\n-\r\n-    return plugin;\r\n-\r\n-})));\r\n+\u002F*!\n+ * vue-resource v1.3.4\n+ * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global.VueResource = factory());\n+}(this, (function () { 'use strict';\n+\n+    \u002F**\n+     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\n+     *\u002F\n+\n+    var RESOLVED = 0;\n+    var REJECTED = 1;\n+    var PENDING  = 2;\n+\n+    function Promise$1(executor) {\n+\n+        this.state = PENDING;\n+        this.value = undefined;\n+        this.deferred = [];\n+\n+        var promise = this;\n+\n+        try {\n+            executor(function (x) {\n+                promise.resolve(x);\n+            }, function (r) {\n+                promise.reject(r);\n+            });\n+        } catch (e) {\n+            promise.reject(e);\n+        }\n+    }\n+\n+    Promise$1.reject = function (r) {\n+        return new Promise$1(function (resolve, reject) {\n+            reject(r);\n+        });\n+    };\n+\n+    Promise$1.resolve = function (x) {\n+        return new Promise$1(function (resolve, reject) {\n+            resolve(x);\n+        });\n+    };\n+\n+    Promise$1.all = function all(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            var count = 0, result = [];\n+\n+            if (iterable.length === 0) {\n+                resolve(result);\n+            }\n+\n+            function resolver(i) {\n+                return function (x) {\n+                    result[i] = x;\n+                    count += 1;\n+\n+                    if (count === iterable.length) {\n+                        resolve(result);\n+                    }\n+                };\n+            }\n+\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\n+            }\n+        });\n+    };\n+\n+    Promise$1.race = function race(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolve, reject);\n+            }\n+        });\n+    };\n+\n+    var p$1 = Promise$1.prototype;\n+\n+    p$1.resolve = function resolve(x) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (x === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            var called = false;\n+\n+            try {\n+                var then = x && x['then'];\n+\n+                if (x !== null && typeof x === 'object' && typeof then === 'function') {\n+                    then.call(x, function (x) {\n+                        if (!called) {\n+                            promise.resolve(x);\n+                        }\n+                        called = true;\n+\n+                    }, function (r) {\n+                        if (!called) {\n+                            promise.reject(r);\n+                        }\n+                        called = true;\n+                    });\n+                    return;\n+                }\n+            } catch (e) {\n+                if (!called) {\n+                    promise.reject(e);\n+                }\n+                return;\n+            }\n+\n+            promise.state = RESOLVED;\n+            promise.value = x;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.reject = function reject(reason) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (reason === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            promise.state = REJECTED;\n+            promise.value = reason;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.notify = function notify() {\n+        var promise = this;\n+\n+        nextTick(function () {\n+            if (promise.state !== PENDING) {\n+                while (promise.deferred.length) {\n+                    var deferred = promise.deferred.shift(),\n+                        onResolved = deferred[0],\n+                        onRejected = deferred[1],\n+                        resolve = deferred[2],\n+                        reject = deferred[3];\n+\n+                    try {\n+                        if (promise.state === RESOLVED) {\n+                            if (typeof onResolved === 'function') {\n+                                resolve(onResolved.call(undefined, promise.value));\n+                            } else {\n+                                resolve(promise.value);\n+                            }\n+                        } else if (promise.state === REJECTED) {\n+                            if (typeof onRejected === 'function') {\n+                                resolve(onRejected.call(undefined, promise.value));\n+                            } else {\n+                                reject(promise.value);\n+                            }\n+                        }\n+                    } catch (e) {\n+                        reject(e);\n+                    }\n+                }\n+            }\n+        });\n+    };\n+\n+    p$1.then = function then(onResolved, onRejected) {\n+        var promise = this;\n+\n+        return new Promise$1(function (resolve, reject) {\n+            promise.deferred.push([onResolved, onRejected, resolve, reject]);\n+            promise.notify();\n+        });\n+    };\n+\n+    p$1.catch = function (onRejected) {\n+        return this.then(undefined, onRejected);\n+    };\n+\n+    \u002F**\n+     * Promise adapter.\n+     *\u002F\n+\n+    if (typeof Promise === 'undefined') {\n+        window.Promise = Promise$1;\n+    }\n+\n+    function PromiseObj(executor, context) {\n+\n+        if (executor instanceof Promise) {\n+            this.promise = executor;\n+        } else {\n+            this.promise = new Promise(executor.bind(context));\n+        }\n+\n+        this.context = context;\n+    }\n+\n+    PromiseObj.all = function (iterable, context) {\n+        return new PromiseObj(Promise.all(iterable), context);\n+    };\n+\n+    PromiseObj.resolve = function (value, context) {\n+        return new PromiseObj(Promise.resolve(value), context);\n+    };\n+\n+    PromiseObj.reject = function (reason, context) {\n+        return new PromiseObj(Promise.reject(reason), context);\n+    };\n+\n+    PromiseObj.race = function (iterable, context) {\n+        return new PromiseObj(Promise.race(iterable), context);\n+    };\n+\n+    var p = PromiseObj.prototype;\n+\n+    p.bind = function (context) {\n+        this.context = context;\n+        return this;\n+    };\n+\n+    p.then = function (fulfilled, rejected) {\n+\n+        if (fulfilled && fulfilled.bind && this.context) {\n+            fulfilled = fulfilled.bind(this.context);\n+        }\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\n+    };\n+\n+    p.catch = function (rejected) {\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.catch(rejected), this.context);\n+    };\n+\n+    p.finally = function (callback) {\n+\n+        return this.then(function (value) {\n+                callback.call(this);\n+                return value;\n+            }, function (reason) {\n+                callback.call(this);\n+                return Promise.reject(reason);\n+            }\n+        );\n+    };\n+\n+    \u002F**\n+     * Utility functions.\n+     *\u002F\n+\n+    var ref = {};\n+    var hasOwnProperty = ref.hasOwnProperty;\n+\n+    var ref$1 = [];\n+    var slice = ref$1.slice;\n+    var debug = false;\n+    var ntick;\n+\n+    var inBrowser = typeof window !== 'undefined';\n+\n+    var Util = function (ref) {\n+        var config = ref.config;\n+        var nextTick = ref.nextTick;\n+\n+        ntick = nextTick;\n+        debug = config.debug || !config.silent;\n+    };\n+\n+    function warn(msg) {\n+        if (typeof console !== 'undefined' && debug) {\n+            console.warn('[VueResource warn]: ' + msg);\n+        }\n+    }\n+\n+    function error(msg) {\n+        if (typeof console !== 'undefined') {\n+            console.error(msg);\n+        }\n+    }\n+\n+    function nextTick(cb, ctx) {\n+        return ntick(cb, ctx);\n+    }\n+\n+    function trim(str) {\n+        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\n+    }\n+\n+    function trimEnd(str, chars) {\n+\n+        if (str && chars === undefined) {\n+            return str.replace(\u002F\\s+$\u002F, '');\n+        }\n+\n+        if (!str || !chars) {\n+            return str;\n+        }\n+\n+        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\n+    }\n+\n+    function toLower(str) {\n+        return str ? str.toLowerCase() : '';\n+    }\n+\n+    function toUpper(str) {\n+        return str ? str.toUpperCase() : '';\n+    }\n+\n+    var isArray = Array.isArray;\n+\n+    function isString(val) {\n+        return typeof val === 'string';\n+    }\n+\n+\n+\n+    function isFunction(val) {\n+        return typeof val === 'function';\n+    }\n+\n+    function isObject(obj) {\n+        return obj !== null && typeof obj === 'object';\n+    }\n+\n+    function isPlainObject(obj) {\n+        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n+    }\n+\n+    function isBlob(obj) {\n+        return typeof Blob !== 'undefined' && obj instanceof Blob;\n+    }\n+\n+    function isFormData(obj) {\n+        return typeof FormData !== 'undefined' && obj instanceof FormData;\n+    }\n+\n+    function when(value, fulfilled, rejected) {\n+\n+        var promise = PromiseObj.resolve(value);\n+\n+        if (arguments.length \u003C 2) {\n+            return promise;\n+        }\n+\n+        return promise.then(fulfilled, rejected);\n+    }\n+\n+    function options(fn, obj, opts) {\n+\n+        opts = opts || {};\n+\n+        if (isFunction(opts)) {\n+            opts = opts.call(obj);\n+        }\n+\n+        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\n+    }\n+\n+    function each(obj, iterator) {\n+\n+        var i, key;\n+\n+        if (isArray(obj)) {\n+            for (i = 0; i \u003C obj.length; i++) {\n+                iterator.call(obj[i], obj[i], i);\n+            }\n+        } else if (isObject(obj)) {\n+            for (key in obj) {\n+                if (hasOwnProperty.call(obj, key)) {\n+                    iterator.call(obj[key], obj[key], key);\n+                }\n+            }\n+        }\n+\n+        return obj;\n+    }\n+\n+    var assign = Object.assign || _assign;\n+\n+    function merge(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source, true);\n+        });\n+\n+        return target;\n+    }\n+\n+    function defaults(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+\n+            for (var key in source) {\n+                if (target[key] === undefined) {\n+                    target[key] = source[key];\n+                }\n+            }\n+\n+        });\n+\n+        return target;\n+    }\n+\n+    function _assign(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source);\n+        });\n+\n+        return target;\n+    }\n+\n+    function _merge(target, source, deep) {\n+        for (var key in source) {\n+            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n+                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n+                    target[key] = {};\n+                }\n+                if (isArray(source[key]) && !isArray(target[key])) {\n+                    target[key] = [];\n+                }\n+                _merge(target[key], source[key], deep);\n+            } else if (source[key] !== undefined) {\n+                target[key] = source[key];\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Root Prefix Transform.\n+     *\u002F\n+\n+    var root = function (options$$1, next) {\n+\n+        var url = next(options$$1);\n+\n+        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\n+            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Query Parameter Transform.\n+     *\u002F\n+\n+    var query = function (options$$1, next) {\n+\n+        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\n+\n+        each(options$$1.params, function (value, key) {\n+            if (urlParams.indexOf(key) === -1) {\n+                query[key] = value;\n+            }\n+        });\n+\n+        query = Url.params(query);\n+\n+        if (query) {\n+            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\n+     *\u002F\n+\n+    function expand(url, params, variables) {\n+\n+        var tmpl = parse(url), expanded = tmpl.expand(params);\n+\n+        if (variables) {\n+            variables.push.apply(variables, tmpl.vars);\n+        }\n+\n+        return expanded;\n+    }\n+\n+    function parse(template) {\n+\n+        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\n+\n+        return {\n+            vars: variables,\n+            expand: function expand(context) {\n+                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\n+                    if (expression) {\n+\n+                        var operator = null, values = [];\n+\n+                        if (operators.indexOf(expression.charAt(0)) !== -1) {\n+                            operator = expression.charAt(0);\n+                            expression = expression.substr(1);\n+                        }\n+\n+                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\n+                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\n+                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n+                            variables.push(tmp[1]);\n+                        });\n+\n+                        if (operator && operator !== '+') {\n+\n+                            var separator = ',';\n+\n+                            if (operator === '?') {\n+                                separator = '&';\n+                            } else if (operator !== '#') {\n+                                separator = operator;\n+                            }\n+\n+                            return (values.length !== 0 ? operator : '') + values.join(separator);\n+                        } else {\n+                            return values.join(',');\n+                        }\n+\n+                    } else {\n+                        return encodeReserved(literal);\n+                    }\n+                });\n+            }\n+        };\n+    }\n+\n+    function getValues(context, operator, key, modifier) {\n+\n+        var value = context[key], result = [];\n+\n+        if (isDefined(value) && value !== '') {\n+            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n+                value = value.toString();\n+\n+                if (modifier && modifier !== '*') {\n+                    value = value.substring(0, parseInt(modifier, 10));\n+                }\n+\n+                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+            } else {\n+                if (modifier === '*') {\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                result.push(encodeValue(operator, value[k], k));\n+                            }\n+                        });\n+                    }\n+                } else {\n+                    var tmp = [];\n+\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            tmp.push(encodeValue(operator, value));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                tmp.push(encodeURIComponent(k));\n+                                tmp.push(encodeValue(operator, value[k].toString()));\n+                            }\n+                        });\n+                    }\n+\n+                    if (isKeyOperator(operator)) {\n+                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\n+                    } else if (tmp.length !== 0) {\n+                        result.push(tmp.join(','));\n+                    }\n+                }\n+            }\n+        } else {\n+            if (operator === ';') {\n+                result.push(encodeURIComponent(key));\n+            } else if (value === '' && (operator === '&' || operator === '?')) {\n+                result.push(encodeURIComponent(key) + '=');\n+            } else if (value === '') {\n+                result.push('');\n+            }\n+        }\n+\n+        return result;\n+    }\n+\n+    function isDefined(value) {\n+        return value !== undefined && value !== null;\n+    }\n+\n+    function isKeyOperator(operator) {\n+        return operator === ';' || operator === '&' || operator === '?';\n+    }\n+\n+    function encodeValue(operator, value, key) {\n+\n+        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\n+\n+        if (key) {\n+            return encodeURIComponent(key) + '=' + value;\n+        } else {\n+            return value;\n+        }\n+    }\n+\n+    function encodeReserved(str) {\n+        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\n+            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\n+                part = encodeURI(part);\n+            }\n+            return part;\n+        }).join('');\n+    }\n+\n+    \u002F**\n+     * URL Template (RFC 6570) Transform.\n+     *\u002F\n+\n+    var template = function (options) {\n+\n+        var variables = [], url = expand(options.url, options.params, variables);\n+\n+        variables.forEach(function (key) {\n+            delete options.params[key];\n+        });\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Service for URL templating.\n+     *\u002F\n+\n+    function Url(url, params) {\n+\n+        var self = this || {}, options$$1 = url, transform;\n+\n+        if (isString(url)) {\n+            options$$1 = {url: url, params: params};\n+        }\n+\n+        options$$1 = merge({}, Url.options, self.$options, options$$1);\n+\n+        Url.transforms.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Url.transform[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                transform = factory(handler, transform, self.$vm);\n+            }\n+\n+        });\n+\n+        return transform(options$$1);\n+    }\n+\n+    \u002F**\n+     * Url options.\n+     *\u002F\n+\n+    Url.options = {\n+        url: '',\n+        root: null,\n+        params: {}\n+    };\n+\n+    \u002F**\n+     * Url transforms.\n+     *\u002F\n+\n+    Url.transform = {template: template, query: query, root: root};\n+    Url.transforms = ['template', 'query', 'root'];\n+\n+    \u002F**\n+     * Encodes a Url parameter string.\n+     *\n+     * @param {Object} obj\n+     *\u002F\n+\n+    Url.params = function (obj) {\n+\n+        var params = [], escape = encodeURIComponent;\n+\n+        params.add = function (key, value) {\n+\n+            if (isFunction(value)) {\n+                value = value();\n+            }\n+\n+            if (value === null) {\n+                value = '';\n+            }\n+\n+            this.push(escape(key) + '=' + escape(value));\n+        };\n+\n+        serialize(params, obj);\n+\n+        return params.join('&').replace(\u002F%20\u002Fg, '+');\n+    };\n+\n+    \u002F**\n+     * Parse a URL and return its components.\n+     *\n+     * @param {String} url\n+     *\u002F\n+\n+    Url.parse = function (url) {\n+\n+        var el = document.createElement('a');\n+\n+        if (document.documentMode) {\n+            el.href = url;\n+            url = el.href;\n+        }\n+\n+        el.href = url;\n+\n+        return {\n+            href: el.href,\n+            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\n+            port: el.port,\n+            host: el.host,\n+            hostname: el.hostname,\n+            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\n+            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\n+            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\n+        };\n+    };\n+\n+    function factory(handler, next, vm) {\n+        return function (options$$1) {\n+            return handler.call(vm, options$$1, next);\n+        };\n+    }\n+\n+    function serialize(params, obj, scope) {\n+\n+        var array = isArray(obj), plain = isPlainObject(obj), hash;\n+\n+        each(obj, function (value, key) {\n+\n+            hash = isObject(value) || isArray(value);\n+\n+            if (scope) {\n+                key = scope + '[' + (plain || hash ? key : '') + ']';\n+            }\n+\n+            if (!scope && array) {\n+                params.add(value.name, value.value);\n+            } else if (hash) {\n+                serialize(params, value, key);\n+            } else {\n+                params.add(key, value);\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * XDomain client (Internet Explorer).\n+     *\u002F\n+\n+    var xdrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xdr = new XDomainRequest(), handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load') {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                resolve(request.respondWith(xdr.responseText, {status: status}));\n+            };\n+\n+            request.abort = function () { return xdr.abort(); };\n+\n+            xdr.open(request.method, request.getUrl());\n+\n+            if (request.timeout) {\n+                xdr.timeout = request.timeout;\n+            }\n+\n+            xdr.onload = handler;\n+            xdr.onabort = handler;\n+            xdr.onerror = handler;\n+            xdr.ontimeout = handler;\n+            xdr.onprogress = function () {};\n+            xdr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * CORS Interceptor.\n+     *\u002F\n+\n+    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\n+\n+    var cors = function (request, next) {\n+\n+        if (inBrowser) {\n+\n+            var orgUrl = Url.parse(location.href);\n+            var reqUrl = Url.parse(request.getUrl());\n+\n+            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\n+\n+                request.crossOrigin = true;\n+                request.emulateHTTP = false;\n+\n+                if (!SUPPORTS_CORS) {\n+                    request.client = xdrClient;\n+                }\n+            }\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Form data Interceptor.\n+     *\u002F\n+\n+    var form = function (request, next) {\n+\n+        if (isFormData(request.body)) {\n+\n+            request.headers.delete('Content-Type');\n+\n+        } else if (isObject(request.body) && request.emulateJSON) {\n+\n+            request.body = Url.params(request.body);\n+            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * JSON Interceptor.\n+     *\u002F\n+\n+    var json = function (request, next) {\n+\n+        var type = request.headers.get('Content-Type') || '';\n+\n+        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\n+            request.body = JSON.stringify(request.body);\n+        }\n+\n+        next(function (response) {\n+\n+            return response.bodyText ? when(response.text(), function (text) {\n+\n+                type = response.headers.get('Content-Type') || '';\n+\n+                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\n+\n+                    try {\n+                        response.body = JSON.parse(text);\n+                    } catch (e) {\n+                        response.body = null;\n+                    }\n+\n+                } else {\n+                    response.body = text;\n+                }\n+\n+                return response;\n+\n+            }) : response;\n+\n+        });\n+    };\n+\n+    function isJson(str) {\n+\n+        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\n+\n+        return start && end[start[0]].test(str);\n+    }\n+\n+    \u002F**\n+     * JSONP client (Browser).\n+     *\u002F\n+\n+    var jsonpClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\n+\n+            handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load' && body !== null) {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                if (status && window[callback]) {\n+                    delete window[callback];\n+                    document.body.removeChild(script);\n+                }\n+\n+                resolve(request.respondWith(body, {status: status}));\n+            };\n+\n+            window[callback] = function (result) {\n+                body = JSON.stringify(result);\n+            };\n+\n+            request.abort = function () {\n+                handler({type: 'abort'});\n+            };\n+\n+            request.params[name] = callback;\n+\n+            if (request.timeout) {\n+                setTimeout(request.abort, request.timeout);\n+            }\n+\n+            script = document.createElement('script');\n+            script.src = request.getUrl();\n+            script.type = 'text\u002Fjavascript';\n+            script.async = true;\n+            script.onload = handler;\n+            script.onerror = handler;\n+\n+            document.body.appendChild(script);\n+        });\n+    };\n+\n+    \u002F**\n+     * JSONP Interceptor.\n+     *\u002F\n+\n+    var jsonp = function (request, next) {\n+\n+        if (request.method == 'JSONP') {\n+            request.client = jsonpClient;\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Before Interceptor.\n+     *\u002F\n+\n+    var before = function (request, next) {\n+\n+        if (isFunction(request.before)) {\n+            request.before.call(this, request);\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * HTTP method override Interceptor.\n+     *\u002F\n+\n+    var method = function (request, next) {\n+\n+        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\n+            request.headers.set('X-HTTP-Method-Override', request.method);\n+            request.method = 'POST';\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Header Interceptor.\n+     *\u002F\n+\n+    var header = function (request, next) {\n+\n+        var headers = assign({}, Http.headers.common,\n+            !request.crossOrigin ? Http.headers.custom : {},\n+            Http.headers[toLower(request.method)]\n+        );\n+\n+        each(headers, function (value, name) {\n+            if (!request.headers.has(name)) {\n+                request.headers.set(name, value);\n+            }\n+        });\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * XMLHttp client (Browser).\n+     *\u002F\n+\n+    var xhrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xhr = new XMLHttpRequest(), handler = function (event) {\n+\n+                var response = request.respondWith(\n+                    'response' in xhr ? xhr.response : xhr.responseText, {\n+                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\n+                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\n+                    }\n+                );\n+\n+                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\n+                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\n+                });\n+\n+                resolve(response);\n+            };\n+\n+            request.abort = function () { return xhr.abort(); };\n+\n+            if (request.progress) {\n+                if (request.method === 'GET') {\n+                    xhr.addEventListener('progress', request.progress);\n+                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\n+                    xhr.upload.addEventListener('progress', request.progress);\n+                }\n+            }\n+\n+            xhr.open(request.method, request.getUrl(), true);\n+\n+            if (request.timeout) {\n+                xhr.timeout = request.timeout;\n+            }\n+\n+            if (request.responseType && 'responseType' in xhr) {\n+                xhr.responseType = request.responseType;\n+            }\n+\n+            if (request.withCredentials || request.credentials) {\n+                xhr.withCredentials = true;\n+            }\n+\n+            if (!request.crossOrigin) {\n+                request.headers.set('X-Requested-With', 'XMLHttpRequest');\n+            }\n+\n+            request.headers.forEach(function (value, name) {\n+                xhr.setRequestHeader(name, value);\n+            });\n+\n+            xhr.onload = handler;\n+            xhr.onabort = handler;\n+            xhr.onerror = handler;\n+            xhr.ontimeout = handler;\n+            xhr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * Http client (Node).\n+     *\u002F\n+\n+    var nodeClient = function (request) {\n+\n+        var client = require('got');\n+\n+        return new PromiseObj(function (resolve) {\n+\n+            var url = request.getUrl();\n+            var body = request.getBody();\n+            var method = request.method;\n+            var headers = {}, handler;\n+\n+            request.headers.forEach(function (value, name) {\n+                headers[name] = value;\n+            });\n+\n+            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\n+\n+                var response = request.respondWith(resp.body, {\n+                        status: resp.statusCode,\n+                        statusText: trim(resp.statusMessage)\n+                    }\n+                );\n+\n+                each(resp.headers, function (value, name) {\n+                    response.headers.set(name, value);\n+                });\n+\n+                resolve(response);\n+\n+            }, function (error$$1) { return handler(error$$1.response); });\n+        });\n+    };\n+\n+    \u002F**\n+     * Base client.\n+     *\u002F\n+\n+    var Client = function (context) {\n+\n+        var reqHandlers = [sendRequest], resHandlers = [], handler;\n+\n+        if (!isObject(context)) {\n+            context = null;\n+        }\n+\n+        function Client(request) {\n+            return new PromiseObj(function (resolve, reject) {\n+\n+                function exec() {\n+\n+                    handler = reqHandlers.pop();\n+\n+                    if (isFunction(handler)) {\n+                        handler.call(context, request, next);\n+                    } else {\n+                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\n+                        next();\n+                    }\n+                }\n+\n+                function next(response) {\n+\n+                    if (isFunction(response)) {\n+\n+                        resHandlers.unshift(response);\n+\n+                    } else if (isObject(response)) {\n+\n+                        resHandlers.forEach(function (handler) {\n+                            response = when(response, function (response) {\n+                                return handler.call(context, response) || response;\n+                            }, reject);\n+                        });\n+\n+                        when(response, resolve, reject);\n+\n+                        return;\n+                    }\n+\n+                    exec();\n+                }\n+\n+                exec();\n+\n+            }, context);\n+        }\n+\n+        Client.use = function (handler) {\n+            reqHandlers.push(handler);\n+        };\n+\n+        return Client;\n+    };\n+\n+    function sendRequest(request, resolve) {\n+\n+        var client = request.client || (inBrowser ? xhrClient : nodeClient);\n+\n+        resolve(client(request));\n+    }\n+\n+    \u002F**\n+     * HTTP Headers.\n+     *\u002F\n+\n+    var Headers = function Headers(headers) {\n+        var this$1 = this;\n+\n+\n+        this.map = {};\n+\n+        each(headers, function (value, name) { return this$1.append(name, value); });\n+    };\n+\n+    Headers.prototype.has = function has (name) {\n+        return getName(this.map, name) !== null;\n+    };\n+\n+    Headers.prototype.get = function get (name) {\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        return list ? list.join() : null;\n+    };\n+\n+    Headers.prototype.getAll = function getAll (name) {\n+        return this.map[getName(this.map, name)] || [];\n+    };\n+\n+    Headers.prototype.set = function set (name, value) {\n+        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\n+    };\n+\n+    Headers.prototype.append = function append (name, value){\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        if (list) {\n+            list.push(trim(value));\n+        } else {\n+            this.set(name, value);\n+        }\n+    };\n+\n+    Headers.prototype.delete = function delete$1 (name){\n+        delete this.map[getName(this.map, name)];\n+    };\n+\n+    Headers.prototype.deleteAll = function deleteAll (){\n+        this.map = {};\n+    };\n+\n+    Headers.prototype.forEach = function forEach (callback, thisArg) {\n+        var this$1 = this;\n+\n+        each(this.map, function (list, name) {\n+            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\n+        });\n+    };\n+\n+    function getName(map, name) {\n+        return Object.keys(map).reduce(function (prev, curr) {\n+            return toLower(name) === toLower(curr) ? curr : prev;\n+        }, null);\n+    }\n+\n+    function normalizeName(name) {\n+\n+        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\n+            throw new TypeError('Invalid character in header field name');\n+        }\n+\n+        return trim(name);\n+    }\n+\n+    \u002F**\n+     * HTTP Response.\n+     *\u002F\n+\n+    var Response = function Response(body, ref) {\n+        var url = ref.url;\n+        var headers = ref.headers;\n+        var status = ref.status;\n+        var statusText = ref.statusText;\n+\n+\n+        this.url = url;\n+        this.ok = status >= 200 && status \u003C 300;\n+        this.status = status || 0;\n+        this.statusText = statusText || '';\n+        this.headers = new Headers(headers);\n+        this.body = body;\n+\n+        if (isString(body)) {\n+\n+            this.bodyText = body;\n+\n+        } else if (isBlob(body)) {\n+\n+            this.bodyBlob = body;\n+\n+            if (isBlobText(body)) {\n+                this.bodyText = blobText(body);\n+            }\n+        }\n+    };\n+\n+    Response.prototype.blob = function blob () {\n+        return when(this.bodyBlob);\n+    };\n+\n+    Response.prototype.text = function text () {\n+        return when(this.bodyText);\n+    };\n+\n+    Response.prototype.json = function json () {\n+        return when(this.text(), function (text) { return JSON.parse(text); });\n+    };\n+\n+    Object.defineProperty(Response.prototype, 'data', {\n+\n+        get: function get() {\n+            return this.body;\n+        },\n+\n+        set: function set(body) {\n+            this.body = body;\n+        }\n+\n+    });\n+\n+    function blobText(body) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var reader = new FileReader();\n+\n+            reader.readAsText(body);\n+            reader.onload = function () {\n+                resolve(reader.result);\n+            };\n+\n+        });\n+    }\n+\n+    function isBlobText(body) {\n+        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n+    }\n+\n+    \u002F**\n+     * HTTP Request.\n+     *\u002F\n+\n+    var Request = function Request(options$$1) {\n+\n+        this.body = null;\n+        this.params = {};\n+\n+        assign(this, options$$1, {\n+            method: toUpper(options$$1.method || 'GET')\n+        });\n+\n+        if (!(this.headers instanceof Headers)) {\n+            this.headers = new Headers(this.headers);\n+        }\n+    };\n+\n+    Request.prototype.getUrl = function getUrl (){\n+        return Url(this);\n+    };\n+\n+    Request.prototype.getBody = function getBody (){\n+        return this.body;\n+    };\n+\n+    Request.prototype.respondWith = function respondWith (body, options$$1) {\n+        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n+    };\n+\n+    \u002F**\n+     * Service for sending network requests.\n+     *\u002F\n+\n+    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\n+    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\n+\n+    function Http(options$$1) {\n+\n+        var self = this || {}, client = Client(self.$vm);\n+\n+        defaults(options$$1 || {}, self.$options, Http.options);\n+\n+        Http.interceptors.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Http.interceptor[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                client.use(handler);\n+            }\n+\n+        });\n+\n+        return client(new Request(options$$1)).then(function (response) {\n+\n+            return response.ok ? response : PromiseObj.reject(response);\n+\n+        }, function (response) {\n+\n+            if (response instanceof Error) {\n+                error(response);\n+            }\n+\n+            return PromiseObj.reject(response);\n+        });\n+    }\n+\n+    Http.options = {};\n+\n+    Http.headers = {\n+        put: JSON_CONTENT_TYPE,\n+        post: JSON_CONTENT_TYPE,\n+        patch: JSON_CONTENT_TYPE,\n+        delete: JSON_CONTENT_TYPE,\n+        common: COMMON_HEADERS,\n+        custom: {}\n+    };\n+\n+    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\n+    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n+\n+    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n+        };\n+\n+    });\n+\n+    ['post', 'put', 'patch'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, body, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n+        };\n+\n+    });\n+\n+    \u002F**\n+     * Service for interacting with RESTful services.\n+     *\u002F\n+\n+    function Resource(url, params, actions, options$$1) {\n+\n+        var self = this || {}, resource = {};\n+\n+        actions = assign({},\n+            Resource.actions,\n+            actions\n+        );\n+\n+        each(actions, function (action, name) {\n+\n+            action = merge({url: url, params: assign({}, params)}, options$$1, action);\n+\n+            resource[name] = function () {\n+                return (self.$http || Http)(opts(action, arguments));\n+            };\n+        });\n+\n+        return resource;\n+    }\n+\n+    function opts(action, args) {\n+\n+        var options$$1 = assign({}, action), params = {}, body;\n+\n+        switch (args.length) {\n+\n+            case 2:\n+\n+                params = args[0];\n+                body = args[1];\n+\n+                break;\n+\n+            case 1:\n+\n+                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\n+                    body = args[0];\n+                } else {\n+                    params = args[0];\n+                }\n+\n+                break;\n+\n+            case 0:\n+\n+                break;\n+\n+            default:\n+\n+                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n+        }\n+\n+        options$$1.body = body;\n+        options$$1.params = assign({}, options$$1.params, params);\n+\n+        return options$$1;\n+    }\n+\n+    Resource.actions = {\n+\n+        get: {method: 'GET'},\n+        save: {method: 'POST'},\n+        query: {method: 'GET'},\n+        update: {method: 'PUT'},\n+        remove: {method: 'DELETE'},\n+        delete: {method: 'DELETE'}\n+\n+    };\n+\n+    \u002F**\n+     * Install plugin.\n+     *\u002F\n+\n+    function plugin(Vue) {\n+\n+        if (plugin.installed) {\n+            return;\n+        }\n+\n+        Util(Vue);\n+\n+        Vue.url = Url;\n+        Vue.http = Http;\n+        Vue.resource = Resource;\n+        Vue.Promise = PromiseObj;\n+\n+        Object.defineProperties(Vue.prototype, {\n+\n+            $url: {\n+                get: function get() {\n+                    return options(Vue.url, this, this.$options.url);\n+                }\n+            },\n+\n+            $http: {\n+                get: function get() {\n+                    return options(Vue.http, this, this.$options.http);\n+                }\n+            },\n+\n+            $resource: {\n+                get: function get() {\n+                    return Vue.resource.bind(this);\n+                }\n+            },\n+\n+            $promise: {\n+                get: function get() {\n+                    var this$1 = this;\n+\n+                    return function (executor) { return new Vue.Promise(executor, this$1); };\n+                }\n+            }\n+\n+        });\n+    }\n+\n+    if (typeof window !== 'undefined' && window.Vue) {\n+        window.Vue.use(plugin);\n+    }\n+\n+    return plugin;\n+\n+})));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1005 +1,1005 @@\n-\u002F**\r\n- * vuex v3.1.0\r\n- * (c) 2019 Evan You\r\n- * @license MIT\r\n- *\u002F\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vuex = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-    function applyMixin (Vue) {\r\n-        var version = Number(Vue.version.split('.')[0]);\r\n-\r\n-        if (version >= 2) {\r\n-            Vue.mixin({ beforeCreate: vuexInit });\r\n-        } else {\r\n-            \u002F\u002F override init and inject vuex init procedure\r\n-            \u002F\u002F for 1.x backwards compatibility.\r\n-            var _init = Vue.prototype._init;\r\n-            Vue.prototype._init = function (options) {\r\n-                if ( options === void 0 ) options = {};\r\n-\r\n-                options.init = options.init\r\n-                    ? [vuexInit].concat(options.init)\r\n-                    : vuexInit;\r\n-                _init.call(this, options);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F**\r\n-         * Vuex init hook, injected into each instances init hooks list.\r\n-         *\u002F\r\n-\r\n-        function vuexInit () {\r\n-            var options = this.$options;\r\n-            \u002F\u002F store injection\r\n-            if (options.store) {\r\n-                this.$store = typeof options.store === 'function'\r\n-                    ? options.store()\r\n-                    : options.store;\r\n-            } else if (options.parent && options.parent.$store) {\r\n-                this.$store = options.parent.$store;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var devtoolHook =\r\n-        typeof window !== 'undefined' &&\r\n-        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-    function devtoolPlugin (store) {\r\n-        if (!devtoolHook) { return }\r\n-\r\n-        store._devtoolHook = devtoolHook;\r\n-\r\n-        devtoolHook.emit('vuex:init', store);\r\n-\r\n-        devtoolHook.on('vuex:travel-to-state', function (targetState) {\r\n-            store.replaceState(targetState);\r\n-        });\r\n-\r\n-        store.subscribe(function (mutation, state) {\r\n-            devtoolHook.emit('vuex:mutation', mutation, state);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the first item that pass the test\r\n-     * by second argument function\r\n-     *\r\n-     * @param {Array} list\r\n-     * @param {Function} f\r\n-     * @return {*}\r\n-     *\u002F\r\n-\r\n-    \u002F**\r\n-     * forEach for object\r\n-     *\u002F\r\n-    function forEachValue (obj, fn) {\r\n-        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\r\n-    }\r\n-\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return val && typeof val.then === 'function'\r\n-    }\r\n-\r\n-    function assert (condition, msg) {\r\n-        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\r\n-    }\r\n-\r\n-    \u002F\u002F Base data struct for store's module, package with some attribute and method\r\n-    var Module = function Module (rawModule, runtime) {\r\n-        this.runtime = runtime;\r\n-        \u002F\u002F Store some children item\r\n-        this._children = Object.create(null);\r\n-        \u002F\u002F Store the origin module object which passed by programmer\r\n-        this._rawModule = rawModule;\r\n-        var rawState = rawModule.state;\r\n-\r\n-        \u002F\u002F Store the origin module's state\r\n-        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\r\n-    };\r\n-\r\n-    var prototypeAccessors = { namespaced: { configurable: true } };\r\n-\r\n-    prototypeAccessors.namespaced.get = function () {\r\n-        return !!this._rawModule.namespaced\r\n-    };\r\n-\r\n-    Module.prototype.addChild = function addChild (key, module) {\r\n-        this._children[key] = module;\r\n-    };\r\n-\r\n-    Module.prototype.removeChild = function removeChild (key) {\r\n-        delete this._children[key];\r\n-    };\r\n-\r\n-    Module.prototype.getChild = function getChild (key) {\r\n-        return this._children[key]\r\n-    };\r\n-\r\n-    Module.prototype.update = function update (rawModule) {\r\n-        this._rawModule.namespaced = rawModule.namespaced;\r\n-        if (rawModule.actions) {\r\n-            this._rawModule.actions = rawModule.actions;\r\n-        }\r\n-        if (rawModule.mutations) {\r\n-            this._rawModule.mutations = rawModule.mutations;\r\n-        }\r\n-        if (rawModule.getters) {\r\n-            this._rawModule.getters = rawModule.getters;\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachChild = function forEachChild (fn) {\r\n-        forEachValue(this._children, fn);\r\n-    };\r\n-\r\n-    Module.prototype.forEachGetter = function forEachGetter (fn) {\r\n-        if (this._rawModule.getters) {\r\n-            forEachValue(this._rawModule.getters, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachAction = function forEachAction (fn) {\r\n-        if (this._rawModule.actions) {\r\n-            forEachValue(this._rawModule.actions, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachMutation = function forEachMutation (fn) {\r\n-        if (this._rawModule.mutations) {\r\n-            forEachValue(this._rawModule.mutations, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Object.defineProperties( Module.prototype, prototypeAccessors );\r\n-\r\n-    var ModuleCollection = function ModuleCollection (rawRootModule) {\r\n-        \u002F\u002F register root module (Vuex.Store options)\r\n-        this.register([], rawRootModule, false);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.get = function get (path) {\r\n-        return path.reduce(function (module, key) {\r\n-            return module.getChild(key)\r\n-        }, this.root)\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\r\n-        var module = this.root;\r\n-        return path.reduce(function (namespace, key) {\r\n-            module = module.getChild(key);\r\n-            return namespace + (module.namespaced ? key + '\u002F' : '')\r\n-        }, '')\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\r\n-        update([], this.root, rawRootModule);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\r\n-        var this$1 = this;\r\n-        if ( runtime === void 0 ) runtime = true;\r\n-\r\n-        {\r\n-            assertRawModule(path, rawModule);\r\n-        }\r\n-\r\n-        var newModule = new Module(rawModule, runtime);\r\n-        if (path.length === 0) {\r\n-            this.root = newModule;\r\n-        } else {\r\n-            var parent = this.get(path.slice(0, -1));\r\n-            parent.addChild(path[path.length - 1], newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F register nested modules\r\n-        if (rawModule.modules) {\r\n-            forEachValue(rawModule.modules, function (rawChildModule, key) {\r\n-                this$1.register(path.concat(key), rawChildModule, runtime);\r\n-            });\r\n-        }\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.unregister = function unregister (path) {\r\n-        var parent = this.get(path.slice(0, -1));\r\n-        var key = path[path.length - 1];\r\n-        if (!parent.getChild(key).runtime) { return }\r\n-\r\n-        parent.removeChild(key);\r\n-    };\r\n-\r\n-    function update (path, targetModule, newModule) {\r\n-        {\r\n-            assertRawModule(path, newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F update target module\r\n-        targetModule.update(newModule);\r\n-\r\n-        \u002F\u002F update nested modules\r\n-        if (newModule.modules) {\r\n-            for (var key in newModule.modules) {\r\n-                if (!targetModule.getChild(key)) {\r\n-                    {\r\n-                        console.warn(\r\n-                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\r\n-                            'manual reload is needed'\r\n-                        );\r\n-                    }\r\n-                    return\r\n-                }\r\n-                update(\r\n-                    path.concat(key),\r\n-                    targetModule.getChild(key),\r\n-                    newModule.modules[key]\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var functionAssert = {\r\n-        assert: function (value) { return typeof value === 'function'; },\r\n-        expected: 'function'\r\n-    };\r\n-\r\n-    var objectAssert = {\r\n-        assert: function (value) { return typeof value === 'function' ||\r\n-            (typeof value === 'object' && typeof value.handler === 'function'); },\r\n-        expected: 'function or object with \"handler\" function'\r\n-    };\r\n-\r\n-    var assertTypes = {\r\n-        getters: functionAssert,\r\n-        mutations: functionAssert,\r\n-        actions: objectAssert\r\n-    };\r\n-\r\n-    function assertRawModule (path, rawModule) {\r\n-        Object.keys(assertTypes).forEach(function (key) {\r\n-            if (!rawModule[key]) { return }\r\n-\r\n-            var assertOptions = assertTypes[key];\r\n-\r\n-            forEachValue(rawModule[key], function (value, type) {\r\n-                assert(\r\n-                    assertOptions.assert(value),\r\n-                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\r\n-                );\r\n-            });\r\n-        });\r\n-    }\r\n-\r\n-    function makeAssertionMessage (path, key, type, value, expected) {\r\n-        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\r\n-        if (path.length > 0) {\r\n-            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\r\n-        }\r\n-        buf += \" is \" + (JSON.stringify(value)) + \".\";\r\n-        return buf\r\n-    }\r\n-\r\n-    var Vue; \u002F\u002F bind on install\r\n-\r\n-    var Store = function Store (options) {\r\n-        var this$1 = this;\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\r\n-        \u002F\u002F To allow users to avoid auto-installation in some cases,\r\n-        \u002F\u002F this code should be placed here. See #731\r\n-        if (!Vue && typeof window !== 'undefined' && window.Vue) {\r\n-            install(window.Vue);\r\n-        }\r\n-\r\n-        {\r\n-            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\r\n-            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\r\n-            assert(this instanceof Store, \"store must be called with the new operator.\");\r\n-        }\r\n-\r\n-        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\r\n-        var strict = options.strict; if ( strict === void 0 ) strict = false;\r\n-\r\n-        \u002F\u002F store internal state\r\n-        this._committing = false;\r\n-        this._actions = Object.create(null);\r\n-        this._actionSubscribers = [];\r\n-        this._mutations = Object.create(null);\r\n-        this._wrappedGetters = Object.create(null);\r\n-        this._modules = new ModuleCollection(options);\r\n-        this._modulesNamespaceMap = Object.create(null);\r\n-        this._subscribers = [];\r\n-        this._watcherVM = new Vue();\r\n-\r\n-        \u002F\u002F bind commit and dispatch to self\r\n-        var store = this;\r\n-        var ref = this;\r\n-        var dispatch = ref.dispatch;\r\n-        var commit = ref.commit;\r\n-        this.dispatch = function boundDispatch (type, payload) {\r\n-            return dispatch.call(store, type, payload)\r\n-        };\r\n-        this.commit = function boundCommit (type, payload, options) {\r\n-            return commit.call(store, type, payload, options)\r\n-        };\r\n-\r\n-        \u002F\u002F strict mode\r\n-        this.strict = strict;\r\n-\r\n-        var state = this._modules.root.state;\r\n-\r\n-        \u002F\u002F init root module.\r\n-        \u002F\u002F this also recursively registers all sub-modules\r\n-        \u002F\u002F and collects all module getters inside this._wrappedGetters\r\n-        installModule(this, state, [], this._modules.root);\r\n-\r\n-        \u002F\u002F initialize the store vm, which is responsible for the reactivity\r\n-        \u002F\u002F (also registers _wrappedGetters as computed properties)\r\n-        resetStoreVM(this, state);\r\n-\r\n-        \u002F\u002F apply plugins\r\n-        plugins.forEach(function (plugin) { return plugin(this$1); });\r\n-\r\n-        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\r\n-        if (useDevtools) {\r\n-            devtoolPlugin(this);\r\n-        }\r\n-    };\r\n-\r\n-    var prototypeAccessors$1 = { state: { configurable: true } };\r\n-\r\n-    prototypeAccessors$1.state.get = function () {\r\n-        return this._vm._data.$$state\r\n-    };\r\n-\r\n-    prototypeAccessors$1.state.set = function (v) {\r\n-        {\r\n-            assert(false, \"use store.replaceState() to explicit replace store state.\");\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.commit = function commit (_type, _payload, _options) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style commit\r\n-        var ref = unifyObjectStyle(_type, _payload, _options);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-        var options = ref.options;\r\n-\r\n-        var mutation = { type: type, payload: payload };\r\n-        var entry = this._mutations[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown mutation type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        this._withCommit(function () {\r\n-            entry.forEach(function commitIterator (handler) {\r\n-                handler(payload);\r\n-            });\r\n-        });\r\n-        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\r\n-\r\n-        if (\r\n-            options && options.silent\r\n-        ) {\r\n-            console.warn(\r\n-                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\r\n-                'Use the filter functionality in the vue-devtools'\r\n-            );\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.dispatch = function dispatch (_type, _payload) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style dispatch\r\n-        var ref = unifyObjectStyle(_type, _payload);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-\r\n-        var action = { type: type, payload: payload };\r\n-        var entry = this._actions[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown action type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        try {\r\n-            this._actionSubscribers\r\n-                .filter(function (sub) { return sub.before; })\r\n-                .forEach(function (sub) { return sub.before(action, this$1.state); });\r\n-        } catch (e) {\r\n-            {\r\n-                console.warn(\"[vuex] error in before action subscribers: \");\r\n-                console.error(e);\r\n-            }\r\n-        }\r\n-\r\n-        var result = entry.length > 1\r\n-            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\r\n-            : entry[0](payload);\r\n-\r\n-        return result.then(function (res) {\r\n-            try {\r\n-                this$1._actionSubscribers\r\n-                    .filter(function (sub) { return sub.after; })\r\n-                    .forEach(function (sub) { return sub.after(action, this$1.state); });\r\n-            } catch (e) {\r\n-                {\r\n-                    console.warn(\"[vuex] error in after action subscribers: \");\r\n-                    console.error(e);\r\n-                }\r\n-            }\r\n-            return res\r\n-        })\r\n-    };\r\n-\r\n-    Store.prototype.subscribe = function subscribe (fn) {\r\n-        return genericSubscribe(fn, this._subscribers)\r\n-    };\r\n-\r\n-    Store.prototype.subscribeAction = function subscribeAction (fn) {\r\n-        var subs = typeof fn === 'function' ? { before: fn } : fn;\r\n-        return genericSubscribe(subs, this._actionSubscribers)\r\n-    };\r\n-\r\n-    Store.prototype.watch = function watch (getter, cb, options) {\r\n-        var this$1 = this;\r\n-\r\n-        {\r\n-            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\r\n-        }\r\n-        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\r\n-    };\r\n-\r\n-    Store.prototype.replaceState = function replaceState (state) {\r\n-        var this$1 = this;\r\n-\r\n-        this._withCommit(function () {\r\n-            this$1._vm._data.$$state = state;\r\n-        });\r\n-    };\r\n-\r\n-    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-            assert(path.length > 0, 'cannot register the root module by using registerModule.');\r\n-        }\r\n-\r\n-        this._modules.register(path, rawModule);\r\n-        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\r\n-        \u002F\u002F reset store to update getters...\r\n-        resetStoreVM(this, this.state);\r\n-    };\r\n-\r\n-    Store.prototype.unregisterModule = function unregisterModule (path) {\r\n-        var this$1 = this;\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-        }\r\n-\r\n-        this._modules.unregister(path);\r\n-        this._withCommit(function () {\r\n-            var parentState = getNestedState(this$1.state, path.slice(0, -1));\r\n-            Vue.delete(parentState, path[path.length - 1]);\r\n-        });\r\n-        resetStore(this);\r\n-    };\r\n-\r\n-    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\r\n-        this._modules.update(newOptions);\r\n-        resetStore(this, true);\r\n-    };\r\n-\r\n-    Store.prototype._withCommit = function _withCommit (fn) {\r\n-        var committing = this._committing;\r\n-        this._committing = true;\r\n-        fn();\r\n-        this._committing = committing;\r\n-    };\r\n-\r\n-    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\r\n-\r\n-    function genericSubscribe (fn, subs) {\r\n-        if (subs.indexOf(fn) \u003C 0) {\r\n-            subs.push(fn);\r\n-        }\r\n-        return function () {\r\n-            var i = subs.indexOf(fn);\r\n-            if (i > -1) {\r\n-                subs.splice(i, 1);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function resetStore (store, hot) {\r\n-        store._actions = Object.create(null);\r\n-        store._mutations = Object.create(null);\r\n-        store._wrappedGetters = Object.create(null);\r\n-        store._modulesNamespaceMap = Object.create(null);\r\n-        var state = store.state;\r\n-        \u002F\u002F init all modules\r\n-        installModule(store, state, [], store._modules.root, true);\r\n-        \u002F\u002F reset vm\r\n-        resetStoreVM(store, state, hot);\r\n-    }\r\n-\r\n-    function resetStoreVM (store, state, hot) {\r\n-        var oldVm = store._vm;\r\n-\r\n-        \u002F\u002F bind store public getters\r\n-        store.getters = {};\r\n-        var wrappedGetters = store._wrappedGetters;\r\n-        var computed = {};\r\n-        forEachValue(wrappedGetters, function (fn, key) {\r\n-            \u002F\u002F use computed to leverage its lazy-caching mechanism\r\n-            computed[key] = function () { return fn(store); };\r\n-            Object.defineProperty(store.getters, key, {\r\n-                get: function () { return store._vm[key]; },\r\n-                enumerable: true \u002F\u002F for local getters\r\n-            });\r\n-        });\r\n-\r\n-        \u002F\u002F use a Vue instance to store the state tree\r\n-        \u002F\u002F suppress warnings just in case the user has added\r\n-        \u002F\u002F some funky global mixins\r\n-        var silent = Vue.config.silent;\r\n-        Vue.config.silent = true;\r\n-        store._vm = new Vue({\r\n-            data: {\r\n-                $$state: state\r\n-            },\r\n-            computed: computed\r\n-        });\r\n-        Vue.config.silent = silent;\r\n-\r\n-        \u002F\u002F enable strict mode for new vm\r\n-        if (store.strict) {\r\n-            enableStrictMode(store);\r\n-        }\r\n-\r\n-        if (oldVm) {\r\n-            if (hot) {\r\n-                \u002F\u002F dispatch changes in all subscribed watchers\r\n-                \u002F\u002F to force getter re-evaluation for hot reloading.\r\n-                store._withCommit(function () {\r\n-                    oldVm._data.$$state = null;\r\n-                });\r\n-            }\r\n-            Vue.nextTick(function () { return oldVm.$destroy(); });\r\n-        }\r\n-    }\r\n-\r\n-    function installModule (store, rootState, path, module, hot) {\r\n-        var isRoot = !path.length;\r\n-        var namespace = store._modules.getNamespace(path);\r\n-\r\n-        \u002F\u002F register in namespace map\r\n-        if (module.namespaced) {\r\n-            store._modulesNamespaceMap[namespace] = module;\r\n-        }\r\n-\r\n-        \u002F\u002F set state\r\n-        if (!isRoot && !hot) {\r\n-            var parentState = getNestedState(rootState, path.slice(0, -1));\r\n-            var moduleName = path[path.length - 1];\r\n-            store._withCommit(function () {\r\n-                Vue.set(parentState, moduleName, module.state);\r\n-            });\r\n-        }\r\n-\r\n-        var local = module.context = makeLocalContext(store, namespace, path);\r\n-\r\n-        module.forEachMutation(function (mutation, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerMutation(store, namespacedType, mutation, local);\r\n-        });\r\n-\r\n-        module.forEachAction(function (action, key) {\r\n-            var type = action.root ? key : namespace + key;\r\n-            var handler = action.handler || action;\r\n-            registerAction(store, type, handler, local);\r\n-        });\r\n-\r\n-        module.forEachGetter(function (getter, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerGetter(store, namespacedType, getter, local);\r\n-        });\r\n-\r\n-        module.forEachChild(function (child, key) {\r\n-            installModule(store, rootState, path.concat(key), child, hot);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * make localized dispatch, commit, getters and state\r\n-     * if there is no namespace, just use root ones\r\n-     *\u002F\r\n-    function makeLocalContext (store, namespace, path) {\r\n-        var noNamespace = namespace === '';\r\n-\r\n-        var local = {\r\n-            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._actions[type]) {\r\n-                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                return store.dispatch(type, payload)\r\n-            },\r\n-\r\n-            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._mutations[type]) {\r\n-                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                store.commit(type, payload, options);\r\n-            }\r\n-        };\r\n-\r\n-        \u002F\u002F getters and state object must be gotten lazily\r\n-        \u002F\u002F because they will be changed by vm update\r\n-        Object.defineProperties(local, {\r\n-            getters: {\r\n-                get: noNamespace\r\n-                    ? function () { return store.getters; }\r\n-                    : function () { return makeLocalGetters(store, namespace); }\r\n-            },\r\n-            state: {\r\n-                get: function () { return getNestedState(store.state, path); }\r\n-            }\r\n-        });\r\n-\r\n-        return local\r\n-    }\r\n-\r\n-    function makeLocalGetters (store, namespace) {\r\n-        var gettersProxy = {};\r\n-\r\n-        var splitPos = namespace.length;\r\n-        Object.keys(store.getters).forEach(function (type) {\r\n-            \u002F\u002F skip if the target getter is not match this namespace\r\n-            if (type.slice(0, splitPos) !== namespace) { return }\r\n-\r\n-            \u002F\u002F extract local getter type\r\n-            var localType = type.slice(splitPos);\r\n-\r\n-            \u002F\u002F Add a port to the getters proxy.\r\n-            \u002F\u002F Define as getter property because\r\n-            \u002F\u002F we do not want to evaluate the getters in this time.\r\n-            Object.defineProperty(gettersProxy, localType, {\r\n-                get: function () { return store.getters[type]; },\r\n-                enumerable: true\r\n-            });\r\n-        });\r\n-\r\n-        return gettersProxy\r\n-    }\r\n-\r\n-    function registerMutation (store, type, handler, local) {\r\n-        var entry = store._mutations[type] || (store._mutations[type] = []);\r\n-        entry.push(function wrappedMutationHandler (payload) {\r\n-            handler.call(store, local.state, payload);\r\n-        });\r\n-    }\r\n-\r\n-    function registerAction (store, type, handler, local) {\r\n-        var entry = store._actions[type] || (store._actions[type] = []);\r\n-        entry.push(function wrappedActionHandler (payload, cb) {\r\n-            var res = handler.call(store, {\r\n-                dispatch: local.dispatch,\r\n-                commit: local.commit,\r\n-                getters: local.getters,\r\n-                state: local.state,\r\n-                rootGetters: store.getters,\r\n-                rootState: store.state\r\n-            }, payload, cb);\r\n-            if (!isPromise(res)) {\r\n-                res = Promise.resolve(res);\r\n-            }\r\n-            if (store._devtoolHook) {\r\n-                return res.catch(function (err) {\r\n-                    store._devtoolHook.emit('vuex:error', err);\r\n-                    throw err\r\n-                })\r\n-            } else {\r\n-                return res\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    function registerGetter (store, type, rawGetter, local) {\r\n-        if (store._wrappedGetters[type]) {\r\n-            {\r\n-                console.error((\"[vuex] duplicate getter key: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        store._wrappedGetters[type] = function wrappedGetter (store) {\r\n-            return rawGetter(\r\n-                local.state, \u002F\u002F local state\r\n-                local.getters, \u002F\u002F local getters\r\n-                store.state, \u002F\u002F root state\r\n-                store.getters \u002F\u002F root getters\r\n-            )\r\n-        };\r\n-    }\r\n-\r\n-    function enableStrictMode (store) {\r\n-        store._vm.$watch(function () { return this._data.$$state }, function () {\r\n-            {\r\n-                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\r\n-            }\r\n-        }, { deep: true, sync: true });\r\n-    }\r\n-\r\n-    function getNestedState (state, path) {\r\n-        return path.length\r\n-            ? path.reduce(function (state, key) { return state[key]; }, state)\r\n-            : state\r\n-    }\r\n-\r\n-    function unifyObjectStyle (type, payload, options) {\r\n-        if (isObject(type) && type.type) {\r\n-            options = payload;\r\n-            payload = type;\r\n-            type = type.type;\r\n-        }\r\n-\r\n-        {\r\n-            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\r\n-        }\r\n-\r\n-        return { type: type, payload: payload, options: options }\r\n-    }\r\n-\r\n-    function install (_Vue) {\r\n-        if (Vue && _Vue === Vue) {\r\n-            {\r\n-                console.error(\r\n-                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\r\n-                );\r\n-            }\r\n-            return\r\n-        }\r\n-        Vue = _Vue;\r\n-        applyMixin(Vue);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the state.\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\r\n-     * @param {Object}\r\n-     *\u002F\r\n-    var mapState = normalizeNamespace(function (namespace, states) {\r\n-        var res = {};\r\n-        normalizeMap(states).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedState () {\r\n-                var state = this.$store.state;\r\n-                var getters = this.$store.getters;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    state = module.context.state;\r\n-                    getters = module.context.getters;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.call(this, state, getters)\r\n-                    : state[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for committing the mutation\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapMutations = normalizeNamespace(function (namespace, mutations) {\r\n-        var res = {};\r\n-        normalizeMap(mutations).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedMutation () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F Get the commit method from store\r\n-                var commit = this.$store.commit;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    commit = module.context.commit;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [commit].concat(args))\r\n-                    : commit.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the getters\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} getters\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapGetters = normalizeNamespace(function (namespace, getters) {\r\n-        var res = {};\r\n-        normalizeMap(getters).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            \u002F\u002F The namespace has been mutated by normalizeNamespace\r\n-            val = namespace + val;\r\n-            res[key] = function mappedGetter () {\r\n-                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\r\n-                    return\r\n-                }\r\n-                if (!(val in this.$store.getters)) {\r\n-                    console.error((\"[vuex] unknown getter: \" + val));\r\n-                    return\r\n-                }\r\n-                return this.$store.getters[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for dispatch the action\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapActions = normalizeNamespace(function (namespace, actions) {\r\n-        var res = {};\r\n-        normalizeMap(actions).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedAction () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F get dispatch function from store\r\n-                var dispatch = this.$store.dispatch;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    dispatch = module.context.dispatch;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [dispatch].concat(args))\r\n-                    : dispatch.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var createNamespacedHelpers = function (namespace) { return ({\r\n-        mapState: mapState.bind(null, namespace),\r\n-        mapGetters: mapGetters.bind(null, namespace),\r\n-        mapMutations: mapMutations.bind(null, namespace),\r\n-        mapActions: mapActions.bind(null, namespace)\r\n-    }); };\r\n-\r\n-    \u002F**\r\n-     * Normalize the map\r\n-     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\r\n-     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\r\n-     * @param {Array|Object} map\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function normalizeMap (map) {\r\n-        return Array.isArray(map)\r\n-            ? map.map(function (key) { return ({ key: key, val: key }); })\r\n-            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\r\n-     * @param {Function} fn\r\n-     * @return {Function}\r\n-     *\u002F\r\n-    function normalizeNamespace (fn) {\r\n-        return function (namespace, map) {\r\n-            if (typeof namespace !== 'string') {\r\n-                map = namespace;\r\n-                namespace = '';\r\n-            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\r\n-                namespace += '\u002F';\r\n-            }\r\n-            return fn(namespace, map)\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Search a special module from store by namespace. if module not exist, print error message.\r\n-     * @param {Object} store\r\n-     * @param {String} helper\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function getModuleByNamespace (store, helper, namespace) {\r\n-        var module = store._modulesNamespaceMap[namespace];\r\n-        if (!module) {\r\n-            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\r\n-        }\r\n-        return module\r\n-    }\r\n-\r\n-    var index = {\r\n-        Store: Store,\r\n-        install: install,\r\n-        version: '3.1.0',\r\n-        mapState: mapState,\r\n-        mapMutations: mapMutations,\r\n-        mapGetters: mapGetters,\r\n-        mapActions: mapActions,\r\n-        createNamespacedHelpers: createNamespacedHelpers\r\n-    };\r\n-\r\n-    return index;\r\n-\r\n+\u002F**\n+ * vuex v3.1.0\n+ * (c) 2019 Evan You\n+ * @license MIT\n+ *\u002F\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vuex = factory());\n+}(this, function () { 'use strict';\n+\n+    function applyMixin (Vue) {\n+        var version = Number(Vue.version.split('.')[0]);\n+\n+        if (version >= 2) {\n+            Vue.mixin({ beforeCreate: vuexInit });\n+        } else {\n+            \u002F\u002F override init and inject vuex init procedure\n+            \u002F\u002F for 1.x backwards compatibility.\n+            var _init = Vue.prototype._init;\n+            Vue.prototype._init = function (options) {\n+                if ( options === void 0 ) options = {};\n+\n+                options.init = options.init\n+                    ? [vuexInit].concat(options.init)\n+                    : vuexInit;\n+                _init.call(this, options);\n+            };\n+        }\n+\n+        \u002F**\n+         * Vuex init hook, injected into each instances init hooks list.\n+         *\u002F\n+\n+        function vuexInit () {\n+            var options = this.$options;\n+            \u002F\u002F store injection\n+            if (options.store) {\n+                this.$store = typeof options.store === 'function'\n+                    ? options.store()\n+                    : options.store;\n+            } else if (options.parent && options.parent.$store) {\n+                this.$store = options.parent.$store;\n+            }\n+        }\n+    }\n+\n+    var devtoolHook =\n+        typeof window !== 'undefined' &&\n+        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+    function devtoolPlugin (store) {\n+        if (!devtoolHook) { return }\n+\n+        store._devtoolHook = devtoolHook;\n+\n+        devtoolHook.emit('vuex:init', store);\n+\n+        devtoolHook.on('vuex:travel-to-state', function (targetState) {\n+            store.replaceState(targetState);\n+        });\n+\n+        store.subscribe(function (mutation, state) {\n+            devtoolHook.emit('vuex:mutation', mutation, state);\n+        });\n+    }\n+\n+    \u002F**\n+     * Get the first item that pass the test\n+     * by second argument function\n+     *\n+     * @param {Array} list\n+     * @param {Function} f\n+     * @return {*}\n+     *\u002F\n+\n+    \u002F**\n+     * forEach for object\n+     *\u002F\n+    function forEachValue (obj, fn) {\n+        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n+    }\n+\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    function isPromise (val) {\n+        return val && typeof val.then === 'function'\n+    }\n+\n+    function assert (condition, msg) {\n+        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n+    }\n+\n+    \u002F\u002F Base data struct for store's module, package with some attribute and method\n+    var Module = function Module (rawModule, runtime) {\n+        this.runtime = runtime;\n+        \u002F\u002F Store some children item\n+        this._children = Object.create(null);\n+        \u002F\u002F Store the origin module object which passed by programmer\n+        this._rawModule = rawModule;\n+        var rawState = rawModule.state;\n+\n+        \u002F\u002F Store the origin module's state\n+        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n+    };\n+\n+    var prototypeAccessors = { namespaced: { configurable: true } };\n+\n+    prototypeAccessors.namespaced.get = function () {\n+        return !!this._rawModule.namespaced\n+    };\n+\n+    Module.prototype.addChild = function addChild (key, module) {\n+        this._children[key] = module;\n+    };\n+\n+    Module.prototype.removeChild = function removeChild (key) {\n+        delete this._children[key];\n+    };\n+\n+    Module.prototype.getChild = function getChild (key) {\n+        return this._children[key]\n+    };\n+\n+    Module.prototype.update = function update (rawModule) {\n+        this._rawModule.namespaced = rawModule.namespaced;\n+        if (rawModule.actions) {\n+            this._rawModule.actions = rawModule.actions;\n+        }\n+        if (rawModule.mutations) {\n+            this._rawModule.mutations = rawModule.mutations;\n+        }\n+        if (rawModule.getters) {\n+            this._rawModule.getters = rawModule.getters;\n+        }\n+    };\n+\n+    Module.prototype.forEachChild = function forEachChild (fn) {\n+        forEachValue(this._children, fn);\n+    };\n+\n+    Module.prototype.forEachGetter = function forEachGetter (fn) {\n+        if (this._rawModule.getters) {\n+            forEachValue(this._rawModule.getters, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachAction = function forEachAction (fn) {\n+        if (this._rawModule.actions) {\n+            forEachValue(this._rawModule.actions, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachMutation = function forEachMutation (fn) {\n+        if (this._rawModule.mutations) {\n+            forEachValue(this._rawModule.mutations, fn);\n+        }\n+    };\n+\n+    Object.defineProperties( Module.prototype, prototypeAccessors );\n+\n+    var ModuleCollection = function ModuleCollection (rawRootModule) {\n+        \u002F\u002F register root module (Vuex.Store options)\n+        this.register([], rawRootModule, false);\n+    };\n+\n+    ModuleCollection.prototype.get = function get (path) {\n+        return path.reduce(function (module, key) {\n+            return module.getChild(key)\n+        }, this.root)\n+    };\n+\n+    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\n+        var module = this.root;\n+        return path.reduce(function (namespace, key) {\n+            module = module.getChild(key);\n+            return namespace + (module.namespaced ? key + '\u002F' : '')\n+        }, '')\n+    };\n+\n+    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\n+        update([], this.root, rawRootModule);\n+    };\n+\n+    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n+        var this$1 = this;\n+        if ( runtime === void 0 ) runtime = true;\n+\n+        {\n+            assertRawModule(path, rawModule);\n+        }\n+\n+        var newModule = new Module(rawModule, runtime);\n+        if (path.length === 0) {\n+            this.root = newModule;\n+        } else {\n+            var parent = this.get(path.slice(0, -1));\n+            parent.addChild(path[path.length - 1], newModule);\n+        }\n+\n+        \u002F\u002F register nested modules\n+        if (rawModule.modules) {\n+            forEachValue(rawModule.modules, function (rawChildModule, key) {\n+                this$1.register(path.concat(key), rawChildModule, runtime);\n+            });\n+        }\n+    };\n+\n+    ModuleCollection.prototype.unregister = function unregister (path) {\n+        var parent = this.get(path.slice(0, -1));\n+        var key = path[path.length - 1];\n+        if (!parent.getChild(key).runtime) { return }\n+\n+        parent.removeChild(key);\n+    };\n+\n+    function update (path, targetModule, newModule) {\n+        {\n+            assertRawModule(path, newModule);\n+        }\n+\n+        \u002F\u002F update target module\n+        targetModule.update(newModule);\n+\n+        \u002F\u002F update nested modules\n+        if (newModule.modules) {\n+            for (var key in newModule.modules) {\n+                if (!targetModule.getChild(key)) {\n+                    {\n+                        console.warn(\n+                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n+                            'manual reload is needed'\n+                        );\n+                    }\n+                    return\n+                }\n+                update(\n+                    path.concat(key),\n+                    targetModule.getChild(key),\n+                    newModule.modules[key]\n+                );\n+            }\n+        }\n+    }\n+\n+    var functionAssert = {\n+        assert: function (value) { return typeof value === 'function'; },\n+        expected: 'function'\n+    };\n+\n+    var objectAssert = {\n+        assert: function (value) { return typeof value === 'function' ||\n+            (typeof value === 'object' && typeof value.handler === 'function'); },\n+        expected: 'function or object with \"handler\" function'\n+    };\n+\n+    var assertTypes = {\n+        getters: functionAssert,\n+        mutations: functionAssert,\n+        actions: objectAssert\n+    };\n+\n+    function assertRawModule (path, rawModule) {\n+        Object.keys(assertTypes).forEach(function (key) {\n+            if (!rawModule[key]) { return }\n+\n+            var assertOptions = assertTypes[key];\n+\n+            forEachValue(rawModule[key], function (value, type) {\n+                assert(\n+                    assertOptions.assert(value),\n+                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\n+                );\n+            });\n+        });\n+    }\n+\n+    function makeAssertionMessage (path, key, type, value, expected) {\n+        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n+        if (path.length > 0) {\n+            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n+        }\n+        buf += \" is \" + (JSON.stringify(value)) + \".\";\n+        return buf\n+    }\n+\n+    var Vue; \u002F\u002F bind on install\n+\n+    var Store = function Store (options) {\n+        var this$1 = this;\n+        if ( options === void 0 ) options = {};\n+\n+        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\n+        \u002F\u002F To allow users to avoid auto-installation in some cases,\n+        \u002F\u002F this code should be placed here. See #731\n+        if (!Vue && typeof window !== 'undefined' && window.Vue) {\n+            install(window.Vue);\n+        }\n+\n+        {\n+            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n+            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n+            assert(this instanceof Store, \"store must be called with the new operator.\");\n+        }\n+\n+        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n+        var strict = options.strict; if ( strict === void 0 ) strict = false;\n+\n+        \u002F\u002F store internal state\n+        this._committing = false;\n+        this._actions = Object.create(null);\n+        this._actionSubscribers = [];\n+        this._mutations = Object.create(null);\n+        this._wrappedGetters = Object.create(null);\n+        this._modules = new ModuleCollection(options);\n+        this._modulesNamespaceMap = Object.create(null);\n+        this._subscribers = [];\n+        this._watcherVM = new Vue();\n+\n+        \u002F\u002F bind commit and dispatch to self\n+        var store = this;\n+        var ref = this;\n+        var dispatch = ref.dispatch;\n+        var commit = ref.commit;\n+        this.dispatch = function boundDispatch (type, payload) {\n+            return dispatch.call(store, type, payload)\n+        };\n+        this.commit = function boundCommit (type, payload, options) {\n+            return commit.call(store, type, payload, options)\n+        };\n+\n+        \u002F\u002F strict mode\n+        this.strict = strict;\n+\n+        var state = this._modules.root.state;\n+\n+        \u002F\u002F init root module.\n+        \u002F\u002F this also recursively registers all sub-modules\n+        \u002F\u002F and collects all module getters inside this._wrappedGetters\n+        installModule(this, state, [], this._modules.root);\n+\n+        \u002F\u002F initialize the store vm, which is responsible for the reactivity\n+        \u002F\u002F (also registers _wrappedGetters as computed properties)\n+        resetStoreVM(this, state);\n+\n+        \u002F\u002F apply plugins\n+        plugins.forEach(function (plugin) { return plugin(this$1); });\n+\n+        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n+        if (useDevtools) {\n+            devtoolPlugin(this);\n+        }\n+    };\n+\n+    var prototypeAccessors$1 = { state: { configurable: true } };\n+\n+    prototypeAccessors$1.state.get = function () {\n+        return this._vm._data.$$state\n+    };\n+\n+    prototypeAccessors$1.state.set = function (v) {\n+        {\n+            assert(false, \"use store.replaceState() to explicit replace store state.\");\n+        }\n+    };\n+\n+    Store.prototype.commit = function commit (_type, _payload, _options) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style commit\n+        var ref = unifyObjectStyle(_type, _payload, _options);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+        var options = ref.options;\n+\n+        var mutation = { type: type, payload: payload };\n+        var entry = this._mutations[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown mutation type: \" + type));\n+            }\n+            return\n+        }\n+        this._withCommit(function () {\n+            entry.forEach(function commitIterator (handler) {\n+                handler(payload);\n+            });\n+        });\n+        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n+\n+        if (\n+            options && options.silent\n+        ) {\n+            console.warn(\n+                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n+                'Use the filter functionality in the vue-devtools'\n+            );\n+        }\n+    };\n+\n+    Store.prototype.dispatch = function dispatch (_type, _payload) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style dispatch\n+        var ref = unifyObjectStyle(_type, _payload);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+\n+        var action = { type: type, payload: payload };\n+        var entry = this._actions[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown action type: \" + type));\n+            }\n+            return\n+        }\n+\n+        try {\n+            this._actionSubscribers\n+                .filter(function (sub) { return sub.before; })\n+                .forEach(function (sub) { return sub.before(action, this$1.state); });\n+        } catch (e) {\n+            {\n+                console.warn(\"[vuex] error in before action subscribers: \");\n+                console.error(e);\n+            }\n+        }\n+\n+        var result = entry.length > 1\n+            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n+            : entry[0](payload);\n+\n+        return result.then(function (res) {\n+            try {\n+                this$1._actionSubscribers\n+                    .filter(function (sub) { return sub.after; })\n+                    .forEach(function (sub) { return sub.after(action, this$1.state); });\n+            } catch (e) {\n+                {\n+                    console.warn(\"[vuex] error in after action subscribers: \");\n+                    console.error(e);\n+                }\n+            }\n+            return res\n+        })\n+    };\n+\n+    Store.prototype.subscribe = function subscribe (fn) {\n+        return genericSubscribe(fn, this._subscribers)\n+    };\n+\n+    Store.prototype.subscribeAction = function subscribeAction (fn) {\n+        var subs = typeof fn === 'function' ? { before: fn } : fn;\n+        return genericSubscribe(subs, this._actionSubscribers)\n+    };\n+\n+    Store.prototype.watch = function watch (getter, cb, options) {\n+        var this$1 = this;\n+\n+        {\n+            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n+        }\n+        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n+    };\n+\n+    Store.prototype.replaceState = function replaceState (state) {\n+        var this$1 = this;\n+\n+        this._withCommit(function () {\n+            this$1._vm._data.$$state = state;\n+        });\n+    };\n+\n+    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\n+        if ( options === void 0 ) options = {};\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+            assert(path.length > 0, 'cannot register the root module by using registerModule.');\n+        }\n+\n+        this._modules.register(path, rawModule);\n+        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n+        \u002F\u002F reset store to update getters...\n+        resetStoreVM(this, this.state);\n+    };\n+\n+    Store.prototype.unregisterModule = function unregisterModule (path) {\n+        var this$1 = this;\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+        }\n+\n+        this._modules.unregister(path);\n+        this._withCommit(function () {\n+            var parentState = getNestedState(this$1.state, path.slice(0, -1));\n+            Vue.delete(parentState, path[path.length - 1]);\n+        });\n+        resetStore(this);\n+    };\n+\n+    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\n+        this._modules.update(newOptions);\n+        resetStore(this, true);\n+    };\n+\n+    Store.prototype._withCommit = function _withCommit (fn) {\n+        var committing = this._committing;\n+        this._committing = true;\n+        fn();\n+        this._committing = committing;\n+    };\n+\n+    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\n+\n+    function genericSubscribe (fn, subs) {\n+        if (subs.indexOf(fn) \u003C 0) {\n+            subs.push(fn);\n+        }\n+        return function () {\n+            var i = subs.indexOf(fn);\n+            if (i > -1) {\n+                subs.splice(i, 1);\n+            }\n+        }\n+    }\n+\n+    function resetStore (store, hot) {\n+        store._actions = Object.create(null);\n+        store._mutations = Object.create(null);\n+        store._wrappedGetters = Object.create(null);\n+        store._modulesNamespaceMap = Object.create(null);\n+        var state = store.state;\n+        \u002F\u002F init all modules\n+        installModule(store, state, [], store._modules.root, true);\n+        \u002F\u002F reset vm\n+        resetStoreVM(store, state, hot);\n+    }\n+\n+    function resetStoreVM (store, state, hot) {\n+        var oldVm = store._vm;\n+\n+        \u002F\u002F bind store public getters\n+        store.getters = {};\n+        var wrappedGetters = store._wrappedGetters;\n+        var computed = {};\n+        forEachValue(wrappedGetters, function (fn, key) {\n+            \u002F\u002F use computed to leverage its lazy-caching mechanism\n+            computed[key] = function () { return fn(store); };\n+            Object.defineProperty(store.getters, key, {\n+                get: function () { return store._vm[key]; },\n+                enumerable: true \u002F\u002F for local getters\n+            });\n+        });\n+\n+        \u002F\u002F use a Vue instance to store the state tree\n+        \u002F\u002F suppress warnings just in case the user has added\n+        \u002F\u002F some funky global mixins\n+        var silent = Vue.config.silent;\n+        Vue.config.silent = true;\n+        store._vm = new Vue({\n+            data: {\n+                $$state: state\n+            },\n+            computed: computed\n+        });\n+        Vue.config.silent = silent;\n+\n+        \u002F\u002F enable strict mode for new vm\n+        if (store.strict) {\n+            enableStrictMode(store);\n+        }\n+\n+        if (oldVm) {\n+            if (hot) {\n+                \u002F\u002F dispatch changes in all subscribed watchers\n+                \u002F\u002F to force getter re-evaluation for hot reloading.\n+                store._withCommit(function () {\n+                    oldVm._data.$$state = null;\n+                });\n+            }\n+            Vue.nextTick(function () { return oldVm.$destroy(); });\n+        }\n+    }\n+\n+    function installModule (store, rootState, path, module, hot) {\n+        var isRoot = !path.length;\n+        var namespace = store._modules.getNamespace(path);\n+\n+        \u002F\u002F register in namespace map\n+        if (module.namespaced) {\n+            store._modulesNamespaceMap[namespace] = module;\n+        }\n+\n+        \u002F\u002F set state\n+        if (!isRoot && !hot) {\n+            var parentState = getNestedState(rootState, path.slice(0, -1));\n+            var moduleName = path[path.length - 1];\n+            store._withCommit(function () {\n+                Vue.set(parentState, moduleName, module.state);\n+            });\n+        }\n+\n+        var local = module.context = makeLocalContext(store, namespace, path);\n+\n+        module.forEachMutation(function (mutation, key) {\n+            var namespacedType = namespace + key;\n+            registerMutation(store, namespacedType, mutation, local);\n+        });\n+\n+        module.forEachAction(function (action, key) {\n+            var type = action.root ? key : namespace + key;\n+            var handler = action.handler || action;\n+            registerAction(store, type, handler, local);\n+        });\n+\n+        module.forEachGetter(function (getter, key) {\n+            var namespacedType = namespace + key;\n+            registerGetter(store, namespacedType, getter, local);\n+        });\n+\n+        module.forEachChild(function (child, key) {\n+            installModule(store, rootState, path.concat(key), child, hot);\n+        });\n+    }\n+\n+    \u002F**\n+     * make localized dispatch, commit, getters and state\n+     * if there is no namespace, just use root ones\n+     *\u002F\n+    function makeLocalContext (store, namespace, path) {\n+        var noNamespace = namespace === '';\n+\n+        var local = {\n+            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._actions[type]) {\n+                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                return store.dispatch(type, payload)\n+            },\n+\n+            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._mutations[type]) {\n+                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                store.commit(type, payload, options);\n+            }\n+        };\n+\n+        \u002F\u002F getters and state object must be gotten lazily\n+        \u002F\u002F because they will be changed by vm update\n+        Object.defineProperties(local, {\n+            getters: {\n+                get: noNamespace\n+                    ? function () { return store.getters; }\n+                    : function () { return makeLocalGetters(store, namespace); }\n+            },\n+            state: {\n+                get: function () { return getNestedState(store.state, path); }\n+            }\n+        });\n+\n+        return local\n+    }\n+\n+    function makeLocalGetters (store, namespace) {\n+        var gettersProxy = {};\n+\n+        var splitPos = namespace.length;\n+        Object.keys(store.getters).forEach(function (type) {\n+            \u002F\u002F skip if the target getter is not match this namespace\n+            if (type.slice(0, splitPos) !== namespace) { return }\n+\n+            \u002F\u002F extract local getter type\n+            var localType = type.slice(splitPos);\n+\n+            \u002F\u002F Add a port to the getters proxy.\n+            \u002F\u002F Define as getter property because\n+            \u002F\u002F we do not want to evaluate the getters in this time.\n+            Object.defineProperty(gettersProxy, localType, {\n+                get: function () { return store.getters[type]; },\n+                enumerable: true\n+            });\n+        });\n+\n+        return gettersProxy\n+    }\n+\n+    function registerMutation (store, type, handler, local) {\n+        var entry = store._mutations[type] || (store._mutations[type] = []);\n+        entry.push(function wrappedMutationHandler (payload) {\n+            handler.call(store, local.state, payload);\n+        });\n+    }\n+\n+    function registerAction (store, type, handler, local) {\n+        var entry = store._actions[type] || (store._actions[type] = []);\n+        entry.push(function wrappedActionHandler (payload, cb) {\n+            var res = handler.call(store, {\n+                dispatch: local.dispatch,\n+                commit: local.commit,\n+                getters: local.getters,\n+                state: local.state,\n+                rootGetters: store.getters,\n+                rootState: store.state\n+            }, payload, cb);\n+            if (!isPromise(res)) {\n+                res = Promise.resolve(res);\n+            }\n+            if (store._devtoolHook) {\n+                return res.catch(function (err) {\n+                    store._devtoolHook.emit('vuex:error', err);\n+                    throw err\n+                })\n+            } else {\n+                return res\n+            }\n+        });\n+    }\n+\n+    function registerGetter (store, type, rawGetter, local) {\n+        if (store._wrappedGetters[type]) {\n+            {\n+                console.error((\"[vuex] duplicate getter key: \" + type));\n+            }\n+            return\n+        }\n+        store._wrappedGetters[type] = function wrappedGetter (store) {\n+            return rawGetter(\n+                local.state, \u002F\u002F local state\n+                local.getters, \u002F\u002F local getters\n+                store.state, \u002F\u002F root state\n+                store.getters \u002F\u002F root getters\n+            )\n+        };\n+    }\n+\n+    function enableStrictMode (store) {\n+        store._vm.$watch(function () { return this._data.$$state }, function () {\n+            {\n+                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n+            }\n+        }, { deep: true, sync: true });\n+    }\n+\n+    function getNestedState (state, path) {\n+        return path.length\n+            ? path.reduce(function (state, key) { return state[key]; }, state)\n+            : state\n+    }\n+\n+    function unifyObjectStyle (type, payload, options) {\n+        if (isObject(type) && type.type) {\n+            options = payload;\n+            payload = type;\n+            type = type.type;\n+        }\n+\n+        {\n+            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n+        }\n+\n+        return { type: type, payload: payload, options: options }\n+    }\n+\n+    function install (_Vue) {\n+        if (Vue && _Vue === Vue) {\n+            {\n+                console.error(\n+                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n+                );\n+            }\n+            return\n+        }\n+        Vue = _Vue;\n+        applyMixin(Vue);\n+    }\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the state.\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n+     * @param {Object}\n+     *\u002F\n+    var mapState = normalizeNamespace(function (namespace, states) {\n+        var res = {};\n+        normalizeMap(states).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedState () {\n+                var state = this.$store.state;\n+                var getters = this.$store.getters;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    state = module.context.state;\n+                    getters = module.context.getters;\n+                }\n+                return typeof val === 'function'\n+                    ? val.call(this, state, getters)\n+                    : state[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for committing the mutation\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapMutations = normalizeNamespace(function (namespace, mutations) {\n+        var res = {};\n+        normalizeMap(mutations).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedMutation () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F Get the commit method from store\n+                var commit = this.$store.commit;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    commit = module.context.commit;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [commit].concat(args))\n+                    : commit.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the getters\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} getters\n+     * @return {Object}\n+     *\u002F\n+    var mapGetters = normalizeNamespace(function (namespace, getters) {\n+        var res = {};\n+        normalizeMap(getters).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            \u002F\u002F The namespace has been mutated by normalizeNamespace\n+            val = namespace + val;\n+            res[key] = function mappedGetter () {\n+                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n+                    return\n+                }\n+                if (!(val in this.$store.getters)) {\n+                    console.error((\"[vuex] unknown getter: \" + val));\n+                    return\n+                }\n+                return this.$store.getters[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for dispatch the action\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapActions = normalizeNamespace(function (namespace, actions) {\n+        var res = {};\n+        normalizeMap(actions).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedAction () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F get dispatch function from store\n+                var dispatch = this.$store.dispatch;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    dispatch = module.context.dispatch;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [dispatch].concat(args))\n+                    : dispatch.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    var createNamespacedHelpers = function (namespace) { return ({\n+        mapState: mapState.bind(null, namespace),\n+        mapGetters: mapGetters.bind(null, namespace),\n+        mapMutations: mapMutations.bind(null, namespace),\n+        mapActions: mapActions.bind(null, namespace)\n+    }); };\n+\n+    \u002F**\n+     * Normalize the map\n+     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n+     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n+     * @param {Array|Object} map\n+     * @return {Object}\n+     *\u002F\n+    function normalizeMap (map) {\n+        return Array.isArray(map)\n+            ? map.map(function (key) { return ({ key: key, val: key }); })\n+            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n+    }\n+\n+    \u002F**\n+     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n+     * @param {Function} fn\n+     * @return {Function}\n+     *\u002F\n+    function normalizeNamespace (fn) {\n+        return function (namespace, map) {\n+            if (typeof namespace !== 'string') {\n+                map = namespace;\n+                namespace = '';\n+            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\n+                namespace += '\u002F';\n+            }\n+            return fn(namespace, map)\n+        }\n+    }\n+\n+    \u002F**\n+     * Search a special module from store by namespace. if module not exist, print error message.\n+     * @param {Object} store\n+     * @param {String} helper\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    function getModuleByNamespace (store, helper, namespace) {\n+        var module = store._modulesNamespaceMap[namespace];\n+        if (!module) {\n+            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n+        }\n+        return module\n+    }\n+\n+    var index = {\n+        Store: Store,\n+        install: install,\n+        version: '3.1.0',\n+        mapState: mapState,\n+        mapMutations: mapMutations,\n+        mapGetters: mapGetters,\n+        mapActions: mapActions,\n+        createNamespacedHelpers: createNamespacedHelpers\n+    };\n+\n+    return index;\n+\n }));\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fwatch.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fwatch.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fjs\u002Fvendor\u002Fwatch.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fjs\u002Fvendor\u002Fwatch.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-if (!Object.prototype.watchChange) {\r\n-    var isFunction = function (fn) {\r\n-        return fn && {}.toString.call(fn) === '[object Function]';\r\n-    };\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'watchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop, handler) {\r\n-                var obj = this;\r\n-\r\n-                function x(prop, handler) {\r\n-                    var oldval = obj[prop],\r\n-                        newval = oldval,\r\n-                        getter = function () {\r\n-                            return newval;\r\n-                        },\r\n-                        setter = function (val) {\r\n-                            return newval = handler.call(obj, prop, oldval, val);\r\n-                        };\r\n-\r\n-                    if (delete obj[prop]) {\r\n-                        Object.defineProperty(\r\n-                            obj,\r\n-                            prop,\r\n-                            {\r\n-                                get: getter,\r\n-                                set: setter,\r\n-                                enumerable: true,\r\n-                                configurable: true\r\n-                            }\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                if (isFunction(prop)) {\r\n-                    for (var k in this) {\r\n-                        new x(k, prop);\r\n-                    }\r\n-                } else {\r\n-                    new x(prop, handler)\r\n-                }\r\n-            }\r\n-        });\r\n-}\r\n-\r\n-if (!Object.prototype.unwatchChange) {\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'unwatchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop) {\r\n-                var val = this[prop];\r\n-                delete this[prop];\r\n-                this[prop] = val;\r\n-            }\r\n-        }\r\n-    );\r\n+if (!Object.prototype.watchChange) {\n+    var isFunction = function (fn) {\n+        return fn && {}.toString.call(fn) === '[object Function]';\n+    };\n+    Object.defineProperty(\n+        Object.prototype,\n+        'watchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop, handler) {\n+                var obj = this;\n+\n+                function x(prop, handler) {\n+                    var oldval = obj[prop],\n+                        newval = oldval,\n+                        getter = function () {\n+                            return newval;\n+                        },\n+                        setter = function (val) {\n+                            return newval = handler.call(obj, prop, oldval, val);\n+                        };\n+\n+                    if (delete obj[prop]) {\n+                        Object.defineProperty(\n+                            obj,\n+                            prop,\n+                            {\n+                                get: getter,\n+                                set: setter,\n+                                enumerable: true,\n+                                configurable: true\n+                            }\n+                        );\n+                    }\n+                }\n+\n+                if (isFunction(prop)) {\n+                    for (var k in this) {\n+                        new x(k, prop);\n+                    }\n+                } else {\n+                    new x(prop, handler)\n+                }\n+            }\n+        });\n+}\n+\n+if (!Object.prototype.unwatchChange) {\n+    Object.defineProperty(\n+        Object.prototype,\n+        'unwatchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop) {\n+                var val = this[prop];\n+                delete this[prop];\n+                this[prop] = val;\n+            }\n+        }\n+    );\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fapi.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fapi.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fapi.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fapi.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\u002F**\r\n- * List API on backend\r\n- *\u002F\r\n-export default {\r\n-\tapiAdminNotice: lpGlobalSettings.rest + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices',\r\n-\tapiAddons: lpGlobalSettings.rest + 'lp\u002Fv1\u002Faddon\u002Fall',\r\n-\tapiAddonAction: lpGlobalSettings.rest + 'lp\u002Fv1\u002Faddon\u002Faction',\r\n-};\r\n+\u002F**\n+ * List API on backend\n+ *\u002F\n+export default {\n+\tapiAdminNotice: lpGlobalSettings.rest + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices',\n+\tapiAddons: lpGlobalSettings.rest + 'lp\u002Fv1\u002Faddon\u002Fall',\n+\tapiAddonAction: lpGlobalSettings.rest + 'lp\u002Fv1\u002Faddon\u002Faction',\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-const Course = {\r\n-\theartbeat: function( context ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'heartbeat',\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\t\t\t\tcontext.commit( 'UPDATE_HEART_BEAT', !! result.success );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_HEART_BEAT', false );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tdraftCourse: function( context, payload ) {\r\n-\t\tvar auto_draft = context.getters.autoDraft;\r\n-\r\n-\t\tif ( auto_draft ) {\r\n-\t\t\tLP.Request( {\r\n-\t\t\t\ttype: 'draft-course',\r\n-\t\t\t\tcourse: JSON.stringify( payload ),\r\n-\t\t\t} ).then( function( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( ! result.success ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\r\n-\t\t\t}\r\n-\t\t\t);\r\n-\t\t}\r\n-\t},\r\n-\r\n-\tnewRequest: function( context ) {\r\n-\t\tcontext.commit( 'INCREASE_NUMBER_REQUEST' );\r\n-\t\tcontext.commit( 'UPDATE_STATUS', 'loading' );\r\n-\r\n-\t\twindow.onbeforeunload = function() {\r\n-\t\t\treturn '';\r\n-\t\t};\r\n-\t},\r\n-\r\n-\trequestCompleted: function( context, status ) {\r\n-\t\tcontext.commit( 'DECREASE_NUMBER_REQUEST' );\r\n-\r\n-\t\tif ( context.getters.currentRequest === 0 ) {\r\n-\t\t\tcontext.commit( 'UPDATE_STATUS', status );\r\n-\t\t\twindow.onbeforeunload = null;\r\n-\t\t}\r\n-\t},\r\n-};\r\n-\r\n-export default Course;\r\n+const Course = {\n+\theartbeat: function( context ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'heartbeat',\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\t\t\t\tcontext.commit( 'UPDATE_HEART_BEAT', !! result.success );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'UPDATE_HEART_BEAT', false );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tdraftCourse: function( context, payload ) {\n+\t\tvar auto_draft = context.getters.autoDraft;\n+\n+\t\tif ( auto_draft ) {\n+\t\t\tLP.Request( {\n+\t\t\t\ttype: 'draft-course',\n+\t\t\t\tcourse: JSON.stringify( payload ),\n+\t\t\t} ).then( function( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( ! result.success ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\n+\t\t\t}\n+\t\t\t);\n+\t\t}\n+\t},\n+\n+\tnewRequest: function( context ) {\n+\t\tcontext.commit( 'INCREASE_NUMBER_REQUEST' );\n+\t\tcontext.commit( 'UPDATE_STATUS', 'loading' );\n+\n+\t\twindow.onbeforeunload = function() {\n+\t\t\treturn '';\n+\t\t};\n+\t},\n+\n+\trequestCompleted: function( context, status ) {\n+\t\tcontext.commit( 'DECREASE_NUMBER_REQUEST' );\n+\n+\t\tif ( context.getters.currentRequest === 0 ) {\n+\t\t\tcontext.commit( 'UPDATE_STATUS', status );\n+\t\t\twindow.onbeforeunload = null;\n+\t\t}\n+\t},\n+};\n+\n+export default Course;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse-section.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse-section.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse-section.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fcourse-section.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,231 +1,231 @@\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const CourseCurriculum = {\r\n-\ttoggleAllSections( context ) {\r\n-\t\tconst hidden = context.getters.isHiddenAllSections;\r\n-\r\n-\t\tif ( hidden ) {\r\n-\t\t\tcontext.commit( 'OPEN_ALL_SECTIONS' );\r\n-\t\t} else {\r\n-\t\t\tcontext.commit( 'CLOSE_ALL_SECTIONS' );\r\n-\t\t}\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'hidden-sections',\r\n-\t\t\thidden: context.getters.hiddenSections,\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tupdateSectionsOrder( context, order ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'sort-sections',\r\n-\t\t\torder: JSON.stringify( order ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\t\t\t\tconst order_sections = result.data;\r\n-\r\n-\t\t\t\tcontext.commit( 'SORT_SECTION', order_sections );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\ttoggleSection( context, section ) {\r\n-\t\tif ( section.open ) {\r\n-\t\t\tcontext.commit( 'CLOSE_SECTION', section );\r\n-\t\t} else {\r\n-\t\t\tcontext.commit( 'OPEN_SECTION', section );\r\n-\t\t}\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'hidden-sections',\r\n-\t\t\thidden: context.getters.hiddenSections,\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tupdateSection( context, section ) {\r\n-\t\tcontext.commit( 'UPDATE_SECTION_REQUEST', section.id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-section',\r\n-\t\t\tsection: JSON.stringify( section ),\r\n-\t\t} ).then( function() {\r\n-\t\t\tcontext.commit( 'UPDATE_SECTION_SUCCESS', section.id );\r\n-\t\t} )\r\n-\t\t\t.catch( function() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_SECTION_FAILURE', section.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tremoveSection( context, payload ) {\r\n-\t\tcontext.commit( 'REMOVE_SECTION', payload.index );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'remove-section',\r\n-\t\t\tsection_id: payload.section.id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tnewSection( context, name ) {\r\n-\t\tconst newSection = {\r\n-\t\t\ttype: 'new-section',\r\n-\t\t\tsection_name: name,\r\n-\t\t\ttemp_id: LP.uniqueId(),\r\n-\t\t};\r\n-\t\tcontext.commit( 'ADD_NEW_SECTION', {\r\n-\t\t\tid: newSection.temp_id,\r\n-\t\t\titems: [],\r\n-\t\t\topen: false,\r\n-\t\t\ttitle: newSection.section_name,\r\n-\t\t} );\r\n-\r\n-\t\tLP.Request( newSection ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tconst section = $.extend( {}, result.data, { open: true } );\r\n-\t\t\t\t\tcontext.commit( 'ADD_NEW_SECTION', section );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateSectionItem( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_SECTION_ITEM_REQUEST', payload.item.id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-section-item',\r\n-\t\t\tsection_id: payload.section_id,\r\n-\t\t\titem: JSON.stringify( payload.item ),\r\n-\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM_SUCCESS', payload.item.id );\r\n-\r\n-\t\t\t\tconst result = response.body;\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tconst item = result.data;\r\n-\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM', { section_id: payload.section_id, item } );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM_FAILURE', payload.item.id );\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tremoveSectionItem( context, payload ) {\r\n-\t\tconst id = payload.item.id;\r\n-\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\tpayload.item.temp_id = 0;\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'remove-section-item',\r\n-\t\t\tsection_id: payload.section_id,\r\n-\t\t\titem_id: id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( rs ) {\r\n-\t\t\t\tconst { data, success } = rs.body;\r\n-\r\n-\t\t\t\tif ( success ) {\r\n-\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\talert( data );\r\n-\t\t\t\t\tpayload.oldId = id;\r\n-\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\t\t\t}\r\n-\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tdeleteSectionItem( context, payload ) {\r\n-\t\tconst id = payload.item.id;\r\n-\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\tpayload.item.temp_id = 0;\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'delete-section-item',\r\n-\t\t\tsection_id: payload.section_id,\r\n-\t\t\titem_id: id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( rs ) {\r\n-\t\t\t\tconst { data, success } = rs.body;\r\n-\r\n-\t\t\t\tif ( success ) {\r\n-\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\talert( data );\r\n-\t\t\t\t\tpayload.oldId = id;\r\n-\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tnewSectionItem( context, payload ) {\r\n-\t\tcontext.commit( 'APPEND_EMPTY_ITEM_TO_SECTION', payload );\r\n-\t\t\u002F\u002Fcontext.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'new-section-item',\r\n-\t\t\tsection_id: payload.section_id,\r\n-\t\t\titem: JSON.stringify( payload.item ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\u002F\u002F context.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});\r\n-\t\t\t\t\tconst items = {};\r\n-\t\t\t\t\t$.each( result.data, function( i, a ) {\r\n-\t\t\t\t\t\titems[ a.old_id ? a.old_id : a.id ] = a;\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_ITEM_SECTION_BY_ID', {\r\n-\t\t\t\t\t\tsection_id: payload.section_id,\r\n-\t\t\t\t\t\titems,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateSectionItems( { state }, payload ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-section-items',\r\n-\t\t\tsection_id: payload.section_id,\r\n-\t\t\titems: JSON.stringify( payload.items ),\r\n-\t\t\tlast_section: state.sections[ state.sections.length - 1 ] === ( payload.section_id ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\u002F\u002F console.log(result);\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-};\r\n-\r\n-export default CourseCurriculum;\r\n+const $ = window.jQuery || jQuery;\n+\n+const CourseCurriculum = {\n+\ttoggleAllSections( context ) {\n+\t\tconst hidden = context.getters.isHiddenAllSections;\n+\n+\t\tif ( hidden ) {\n+\t\t\tcontext.commit( 'OPEN_ALL_SECTIONS' );\n+\t\t} else {\n+\t\t\tcontext.commit( 'CLOSE_ALL_SECTIONS' );\n+\t\t}\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'hidden-sections',\n+\t\t\thidden: context.getters.hiddenSections,\n+\t\t} );\n+\t},\n+\n+\tupdateSectionsOrder( context, order ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'sort-sections',\n+\t\t\torder: JSON.stringify( order ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\t\t\t\tconst order_sections = result.data;\n+\n+\t\t\t\tcontext.commit( 'SORT_SECTION', order_sections );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\ttoggleSection( context, section ) {\n+\t\tif ( section.open ) {\n+\t\t\tcontext.commit( 'CLOSE_SECTION', section );\n+\t\t} else {\n+\t\t\tcontext.commit( 'OPEN_SECTION', section );\n+\t\t}\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'hidden-sections',\n+\t\t\thidden: context.getters.hiddenSections,\n+\t\t} );\n+\t},\n+\n+\tupdateSection( context, section ) {\n+\t\tcontext.commit( 'UPDATE_SECTION_REQUEST', section.id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-section',\n+\t\t\tsection: JSON.stringify( section ),\n+\t\t} ).then( function() {\n+\t\t\tcontext.commit( 'UPDATE_SECTION_SUCCESS', section.id );\n+\t\t} )\n+\t\t\t.catch( function() {\n+\t\t\t\tcontext.commit( 'UPDATE_SECTION_FAILURE', section.id );\n+\t\t\t} );\n+\t},\n+\n+\tremoveSection( context, payload ) {\n+\t\tcontext.commit( 'REMOVE_SECTION', payload.index );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'remove-section',\n+\t\t\tsection_id: payload.section.id,\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tnewSection( context, name ) {\n+\t\tconst newSection = {\n+\t\t\ttype: 'new-section',\n+\t\t\tsection_name: name,\n+\t\t\ttemp_id: LP.uniqueId(),\n+\t\t};\n+\t\tcontext.commit( 'ADD_NEW_SECTION', {\n+\t\t\tid: newSection.temp_id,\n+\t\t\titems: [],\n+\t\t\topen: false,\n+\t\t\ttitle: newSection.section_name,\n+\t\t} );\n+\n+\t\tLP.Request( newSection ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tconst section = $.extend( {}, result.data, { open: true } );\n+\t\t\t\t\tcontext.commit( 'ADD_NEW_SECTION', section );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateSectionItem( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_SECTION_ITEM_REQUEST', payload.item.id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-section-item',\n+\t\t\tsection_id: payload.section_id,\n+\t\t\titem: JSON.stringify( payload.item ),\n+\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM_SUCCESS', payload.item.id );\n+\n+\t\t\t\tconst result = response.body;\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tconst item = result.data;\n+\n+\t\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM', { section_id: payload.section_id, item } );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'UPDATE_SECTION_ITEM_FAILURE', payload.item.id );\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tremoveSectionItem( context, payload ) {\n+\t\tconst id = payload.item.id;\n+\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\tpayload.item.temp_id = 0;\n+\t\tLP.Request( {\n+\t\t\ttype: 'remove-section-item',\n+\t\t\tsection_id: payload.section_id,\n+\t\t\titem_id: id,\n+\t\t} ).then(\n+\t\t\tfunction( rs ) {\n+\t\t\t\tconst { data, success } = rs.body;\n+\n+\t\t\t\tif ( success ) {\n+\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\t\t\t} else {\n+\t\t\t\t\talert( data );\n+\t\t\t\t\tpayload.oldId = id;\n+\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\t\t\t}\n+\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tdeleteSectionItem( context, payload ) {\n+\t\tconst id = payload.item.id;\n+\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\tpayload.item.temp_id = 0;\n+\t\tLP.Request( {\n+\t\t\ttype: 'delete-section-item',\n+\t\t\tsection_id: payload.section_id,\n+\t\t\titem_id: id,\n+\t\t} ).then(\n+\t\t\tfunction( rs ) {\n+\t\t\t\tconst { data, success } = rs.body;\n+\n+\t\t\t\tif ( success ) {\n+\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\t\t\t} else {\n+\t\t\t\t\talert( data );\n+\t\t\t\t\tpayload.oldId = id;\n+\t\t\t\t\tcontext.commit( 'REMOVE_SECTION_ITEM', payload );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tnewSectionItem( context, payload ) {\n+\t\tcontext.commit( 'APPEND_EMPTY_ITEM_TO_SECTION', payload );\n+\t\t\u002F\u002Fcontext.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});\n+\t\tLP.Request( {\n+\t\t\ttype: 'new-section-item',\n+\t\t\tsection_id: payload.section_id,\n+\t\t\titem: JSON.stringify( payload.item ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\u002F\u002F context.commit('UPDATE_SECTION_ITEMS', {section_id: payload.section_id, items: result.data});\n+\t\t\t\t\tconst items = {};\n+\t\t\t\t\t$.each( result.data, function( i, a ) {\n+\t\t\t\t\t\titems[ a.old_id ? a.old_id : a.id ] = a;\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tcontext.commit( 'UPDATE_ITEM_SECTION_BY_ID', {\n+\t\t\t\t\t\tsection_id: payload.section_id,\n+\t\t\t\t\t\titems,\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateSectionItems( { state }, payload ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-section-items',\n+\t\t\tsection_id: payload.section_id,\n+\t\t\titems: JSON.stringify( payload.items ),\n+\t\t\tlast_section: state.sections[ state.sections.length - 1 ] === ( payload.section_id ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\u002F\u002F console.log(result);\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+};\n+\n+export default CourseCurriculum;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-course-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-course-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-course-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-course-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-const ModalCourseItems = {\r\n-\r\n-\ttoggle: function( context ) {\r\n-\t\tcontext.commit( 'TOGGLE' );\r\n-\t},\r\n-\r\n-\topen: function( context, sectionId ) {\r\n-\t\tcontext.commit( 'SET_SECTION', sectionId );\r\n-\t\tcontext.commit( 'RESET' );\r\n-\t\tcontext.commit( 'TOGGLE' );\r\n-\t},\r\n-\r\n-\tsearchItems: function( context, payload ) {\r\n-\t\tcontext.commit( 'SEARCH_ITEMS_REQUEST' );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'search-items',\r\n-\t\t\tquery: payload.query,\r\n-\t\t\titem_type: payload.type,\r\n-\t\t\tpage: payload.page,\r\n-\t\t\texclude: JSON.stringify( [] ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( ! result.success ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tvar data = result.data;\r\n-\r\n-\t\t\t\tcontext.commit( 'SET_LIST_ITEMS', data.items );\r\n-\t\t\t\tcontext.commit( 'UPDATE_PAGINATION', data.pagination );\r\n-\t\t\t\tcontext.commit( 'SEARCH_ITEMS_SUCCESS' );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'SEARCH_ITEMS_FAILURE' );\r\n-\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\taddItem: function( context, item ) {\r\n-\t\tcontext.commit( 'ADD_ITEM', item );\r\n-\t},\r\n-\r\n-\tremoveItem: function( context, index ) {\r\n-\t\tcontext.commit( 'REMOVE_ADDED_ITEM', index );\r\n-\t},\r\n-\r\n-\taddItemsToSection: function( context ) {\r\n-\t\tvar items = context.getters.addedItems;\r\n-\r\n-\t\tif ( items.length > 0 ) {\r\n-\t\t\tLP.Request( {\r\n-\t\t\t\ttype: 'add-items-to-section',\r\n-\t\t\t\tsection_id: context.getters.section,\r\n-\t\t\t\titems: JSON.stringify( items ),\r\n-\t\t\t} ).then(\r\n-\t\t\t\tfunction( response ) {\r\n-\t\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\tcontext.commit( 'TOGGLE' );\r\n-\r\n-\t\t\t\t\t\tvar items = result.data;\r\n-\t\t\t\t\t\tcontext.commit( 'ss\u002FUPDATE_SECTION_ITEMS', {\r\n-\t\t\t\t\t\t\tsection_id: context.getters.section,\r\n-\t\t\t\t\t\t\titems: items,\r\n-\t\t\t\t\t\t}, { root: true } );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tfunction( error ) {\r\n-\t\t\t\t\tconsole.error( error );\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\t\t}\r\n-\t},\r\n-};\r\n-\r\n-export default ModalCourseItems;\r\n+const ModalCourseItems = {\n+\n+\ttoggle: function( context ) {\n+\t\tcontext.commit( 'TOGGLE' );\n+\t},\n+\n+\topen: function( context, sectionId ) {\n+\t\tcontext.commit( 'SET_SECTION', sectionId );\n+\t\tcontext.commit( 'RESET' );\n+\t\tcontext.commit( 'TOGGLE' );\n+\t},\n+\n+\tsearchItems: function( context, payload ) {\n+\t\tcontext.commit( 'SEARCH_ITEMS_REQUEST' );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'search-items',\n+\t\t\tquery: payload.query,\n+\t\t\titem_type: payload.type,\n+\t\t\tpage: payload.page,\n+\t\t\texclude: JSON.stringify( [] ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( ! result.success ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tvar data = result.data;\n+\n+\t\t\t\tcontext.commit( 'SET_LIST_ITEMS', data.items );\n+\t\t\t\tcontext.commit( 'UPDATE_PAGINATION', data.pagination );\n+\t\t\t\tcontext.commit( 'SEARCH_ITEMS_SUCCESS' );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'SEARCH_ITEMS_FAILURE' );\n+\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\taddItem: function( context, item ) {\n+\t\tcontext.commit( 'ADD_ITEM', item );\n+\t},\n+\n+\tremoveItem: function( context, index ) {\n+\t\tcontext.commit( 'REMOVE_ADDED_ITEM', index );\n+\t},\n+\n+\taddItemsToSection: function( context ) {\n+\t\tvar items = context.getters.addedItems;\n+\n+\t\tif ( items.length > 0 ) {\n+\t\t\tLP.Request( {\n+\t\t\t\ttype: 'add-items-to-section',\n+\t\t\t\tsection_id: context.getters.section,\n+\t\t\t\titems: JSON.stringify( items ),\n+\t\t\t} ).then(\n+\t\t\t\tfunction( response ) {\n+\t\t\t\t\tvar result = response.body;\n+\n+\t\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\tcontext.commit( 'TOGGLE' );\n+\n+\t\t\t\t\t\tvar items = result.data;\n+\t\t\t\t\t\tcontext.commit( 'ss\u002FUPDATE_SECTION_ITEMS', {\n+\t\t\t\t\t\t\tsection_id: context.getters.section,\n+\t\t\t\t\t\t\titems: items,\n+\t\t\t\t\t\t}, { root: true } );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tfunction( error ) {\n+\t\t\t\t\tconsole.error( error );\n+\t\t\t\t}\n+\t\t\t);\n+\t\t}\n+\t},\n+};\n+\n+export default ModalCourseItems;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-quiz-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-quiz-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-quiz-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fmodal-quiz-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-const ModalQuizItems = {\r\n-\r\n-\ttoggle: function( context ) {\r\n-\t\tcontext.commit( 'TOGGLE' );\r\n-\t},\r\n-\r\n-\t\u002F\u002F open modal\r\n-\topen: function( context, quizId ) {\r\n-\t\tcontext.commit( 'SET_QUIZ', quizId );\r\n-\t\tcontext.commit( 'RESET' );\r\n-\t\tcontext.commit( 'TOGGLE' );\r\n-\t},\r\n-\r\n-\t\u002F\u002F query available question\r\n-\tsearchItems: function( context, payload ) {\r\n-\t\tcontext.commit( 'SEARCH_ITEM_REQUEST' );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'search-items',\r\n-\t\t\tquery: payload.query,\r\n-\t\t\tpage: payload.page,\r\n-\t\t\texclude: JSON.stringify( [] ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( ! result.success ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tvar data = result.data;\r\n-\r\n-\t\t\t\tcontext.commit( 'SET_LIST_ITEMS', data.items );\r\n-\t\t\t\tcontext.commit( 'UPDATE_PAGINATION', data.pagination );\r\n-\t\t\t\tcontext.commit( 'SEARCH_ITEM_SUCCESS' );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'SEARCH_ITEMS_FAIL' );\r\n-\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\t\u002F\u002F add question\r\n-\taddItem: function( context, item ) {\r\n-\t\tcontext.commit( 'ADD_ITEM', item );\r\n-\t},\r\n-\r\n-\t\u002F\u002F remove question\r\n-\tremoveItem: function( context, index ) {\r\n-\t\tcontext.commit( 'REMOVE_ADDED_ITEM', index );\r\n-\t},\r\n-\r\n-\taddQuestionsToQuiz: function( context, quiz ) {\r\n-\t\tvar items = context.getters.addedItems;\r\n-\t\tif ( items.length > 0 ) {\r\n-\t\t\tLP.Request( {\r\n-\t\t\t\ttype: 'add-questions-to-quiz',\r\n-\t\t\t\titems: JSON.stringify( items ),\r\n-\t\t\t\tdraft_quiz: JSON.stringify( quiz ),\r\n-\t\t\t} ).then(\r\n-\t\t\t\tfunction( response ) {\r\n-\t\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\tvar questions = result.data;\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F update quiz list questions\r\n-\t\t\t\t\t\tcontext.commit( 'lqs\u002FSET_QUESTIONS', questions, { root: true } );\r\n-\t\t\t\t\t\tcontext.commit( 'TOGGLE' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tfunction( error ) {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\t\t}\r\n-\t},\r\n-};\r\n-\r\n-export default ModalQuizItems;\r\n+const ModalQuizItems = {\n+\n+\ttoggle: function( context ) {\n+\t\tcontext.commit( 'TOGGLE' );\n+\t},\n+\n+\t\u002F\u002F open modal\n+\topen: function( context, quizId ) {\n+\t\tcontext.commit( 'SET_QUIZ', quizId );\n+\t\tcontext.commit( 'RESET' );\n+\t\tcontext.commit( 'TOGGLE' );\n+\t},\n+\n+\t\u002F\u002F query available question\n+\tsearchItems: function( context, payload ) {\n+\t\tcontext.commit( 'SEARCH_ITEM_REQUEST' );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'search-items',\n+\t\t\tquery: payload.query,\n+\t\t\tpage: payload.page,\n+\t\t\texclude: JSON.stringify( [] ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( ! result.success ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tvar data = result.data;\n+\n+\t\t\t\tcontext.commit( 'SET_LIST_ITEMS', data.items );\n+\t\t\t\tcontext.commit( 'UPDATE_PAGINATION', data.pagination );\n+\t\t\t\tcontext.commit( 'SEARCH_ITEM_SUCCESS' );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'SEARCH_ITEMS_FAIL' );\n+\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\t\u002F\u002F add question\n+\taddItem: function( context, item ) {\n+\t\tcontext.commit( 'ADD_ITEM', item );\n+\t},\n+\n+\t\u002F\u002F remove question\n+\tremoveItem: function( context, index ) {\n+\t\tcontext.commit( 'REMOVE_ADDED_ITEM', index );\n+\t},\n+\n+\taddQuestionsToQuiz: function( context, quiz ) {\n+\t\tvar items = context.getters.addedItems;\n+\t\tif ( items.length > 0 ) {\n+\t\t\tLP.Request( {\n+\t\t\t\ttype: 'add-questions-to-quiz',\n+\t\t\t\titems: JSON.stringify( items ),\n+\t\t\t\tdraft_quiz: JSON.stringify( quiz ),\n+\t\t\t} ).then(\n+\t\t\t\tfunction( response ) {\n+\t\t\t\t\tvar result = response.body;\n+\n+\t\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\tvar questions = result.data;\n+\n+\t\t\t\t\t\t\u002F\u002F update quiz list questions\n+\t\t\t\t\t\tcontext.commit( 'lqs\u002FSET_QUESTIONS', questions, { root: true } );\n+\t\t\t\t\t\tcontext.commit( 'TOGGLE' );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tfunction( error ) {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t}\n+\t\t\t);\n+\t\t}\n+\t},\n+};\n+\n+export default ModalQuizItems;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-const Question = {\r\n-\tchangeQuestionType( context, payload ) {\r\n-\t\tconst draftQuestion = undefined !== payload.question ? payload.question : '';\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'change-question-type',\r\n-\t\t\tquestion_type: payload.type,\r\n-\t\t\tdraft_question: context.getters.autoDraft ? draftQuestion : '',\r\n-\t\t} ).then( function( response ) {\r\n-\t\t\tconst result = response.body;\r\n-\r\n-\t\t\tif ( result.success ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\r\n-\t\t\t\tcontext.commit( 'CHANGE_QUESTION_TYPE', result.data );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tupdateAnswersOrder( context, order ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'sort-answer',\r\n-\t\t\torder,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\u002F\u002F context.commit('SET_ANSWERS', result.data);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateAnswerTitle( context, answer ) {\r\n-\t\tif ( typeof answer.question_answer_id == 'undefined' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tanswer = JSON.stringify( answer );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-answer-title',\r\n-\t\t\tanswer,\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tupdateCorrectAnswer( context, correct ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'change-correct',\r\n-\t\t\tcorrect: JSON.stringify( correct ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_ANSWERS', result.data );\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tdeleteAnswer( context, payload ) {\r\n-\t\tcontext.commit( 'DELETE_ANSWER', payload.id );\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'delete-answer',\r\n-\t\t\tanswer_id: payload.id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'SET_ANSWERS', result.data );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F notice error\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tnewAnswer( context, data ) {\r\n-\t\tcontext.commit( 'ADD_NEW_ANSWER', data.answer );\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'new-answer',\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tconst result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_ANSWERS', result.data );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F notice error\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tnewRequest( context ) {\r\n-\t\tcontext.commit( 'INCREASE_NUMBER_REQUEST' );\r\n-\t\tcontext.commit( 'UPDATE_STATUS', 'loading' );\r\n-\r\n-\t\twindow.onbeforeunload = function() {\r\n-\t\t\treturn '';\r\n-\t\t};\r\n-\t},\r\n-\r\n-\trequestCompleted( context, status ) {\r\n-\t\tcontext.commit( 'DECREASE_NUMBER_REQUEST' );\r\n-\r\n-\t\tif ( context.getters.currentRequest === 0 ) {\r\n-\t\t\tcontext.commit( 'UPDATE_STATUS', status );\r\n-\t\t\twindow.onbeforeunload = null;\r\n-\t\t}\r\n-\t},\r\n-};\r\n-\r\n-export default Question;\r\n+const Question = {\n+\tchangeQuestionType( context, payload ) {\n+\t\tconst draftQuestion = undefined !== payload.question ? payload.question : '';\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'change-question-type',\n+\t\t\tquestion_type: payload.type,\n+\t\t\tdraft_question: context.getters.autoDraft ? draftQuestion : '',\n+\t\t} ).then( function( response ) {\n+\t\t\tconst result = response.body;\n+\n+\t\t\tif ( result.success ) {\n+\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\n+\t\t\t\tcontext.commit( 'CHANGE_QUESTION_TYPE', result.data );\n+\t\t\t}\n+\t\t} );\n+\t},\n+\n+\tupdateAnswersOrder( context, order ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'sort-answer',\n+\t\t\torder,\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\u002F\u002F context.commit('SET_ANSWERS', result.data);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateAnswerTitle( context, answer ) {\n+\t\tif ( typeof answer.question_answer_id == 'undefined' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tanswer = JSON.stringify( answer );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-answer-title',\n+\t\t\tanswer,\n+\t\t} );\n+\t},\n+\n+\tupdateCorrectAnswer( context, correct ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'change-correct',\n+\t\t\tcorrect: JSON.stringify( correct ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'UPDATE_ANSWERS', result.data );\n+\t\t\t\t\tcontext.commit( 'UPDATE_AUTO_DRAFT_STATUS', false );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tdeleteAnswer( context, payload ) {\n+\t\tcontext.commit( 'DELETE_ANSWER', payload.id );\n+\t\tLP.Request( {\n+\t\t\ttype: 'delete-answer',\n+\t\t\tanswer_id: payload.id,\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'SET_ANSWERS', result.data );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F notice error\n+\t\t\t\t}\n+\t\t\t} );\n+\t},\n+\n+\tnewAnswer( context, data ) {\n+\t\tcontext.commit( 'ADD_NEW_ANSWER', data.answer );\n+\t\tLP.Request( {\n+\t\t\ttype: 'new-answer',\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tconst result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'UPDATE_ANSWERS', result.data );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F notice error\n+\t\t\t\t}\n+\t\t\t} );\n+\t},\n+\n+\tnewRequest( context ) {\n+\t\tcontext.commit( 'INCREASE_NUMBER_REQUEST' );\n+\t\tcontext.commit( 'UPDATE_STATUS', 'loading' );\n+\n+\t\twindow.onbeforeunload = function() {\n+\t\t\treturn '';\n+\t\t};\n+\t},\n+\n+\trequestCompleted( context, status ) {\n+\t\tcontext.commit( 'DECREASE_NUMBER_REQUEST' );\n+\n+\t\tif ( context.getters.currentRequest === 0 ) {\n+\t\t\tcontext.commit( 'UPDATE_STATUS', status );\n+\t\t\twindow.onbeforeunload = null;\n+\t\t}\n+\t},\n+};\n+\n+export default Question;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquestion-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,342 +1,342 @@\n-const $ = window.jQuery;\r\n-\r\n-const QuestionList = {\r\n-\r\n-\ttoggleAll: function( context ) {\r\n-\t\tvar hidden = context.getters.isHiddenListQuestions;\r\n-\r\n-\t\tif ( hidden ) {\r\n-\t\t\tcontext.commit( 'OPEN_LIST_QUESTIONS' );\r\n-\t\t} else {\r\n-\t\t\tcontext.commit( 'CLOSE_LIST_QUESTIONS' );\r\n-\t\t}\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'hidden-questions',\r\n-\t\t\thidden: context.getters.hiddenQuestions,\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tupdateQuizQuestionsHidden: function( context, data ) {\r\n-\t\tLP.Request( $.extend( {}, data, {\r\n-\t\t\ttype: 'update-quiz-questions-hidden',\r\n-\t\t} ) );\r\n-\t},\r\n-\r\n-\tnewQuestion: function( context, payload ) {\r\n-\t\tvar newQuestion = JSON.parse( JSON.stringify( payload.question ) );\r\n-\t\tnewQuestion.settings = {};\r\n-\t\tcontext.commit( 'ADD_NEW_QUESTION', newQuestion );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'new-question',\r\n-\t\t\tquestion: JSON.stringify( payload.question ),\r\n-\t\t\tdraft_quiz: JSON.stringify( payload.quiz ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', payload.question.type, { root: true } );\r\n-\t\t\t\t\tcontext.commit( 'ADD_NEW_QUESTION', result.data );\r\n-\t\t\t\t\tcontext.commit( 'CLOSE_LIST_QUESTIONS' );\r\n-\t\t\t\t\tcontext.commit( 'OPEN_QUESTION', result.data );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateQuestionsOrder: function( context, order ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'sort-questions',\r\n-\t\t\torder: JSON.stringify( order ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tcontext.commit( 'SORT_QUESTIONS', order );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateQuestionTitle: function( context, question ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question.id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-question-title',\r\n-\t\t\tquestion: JSON.stringify( question ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\r\n-\t\t\t}\r\n-\t\t).catch(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tchangeQuestionType: function( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'change-question-type',\r\n-\t\t\tquestion_id: payload.question_id,\r\n-\t\t\tquestion_type: payload.type,\r\n-\t\t} ).then( function( response ) {\r\n-\t\t\tvar result = response.body;\r\n-\r\n-\t\t\tif ( result.success ) {\r\n-\t\t\t\tvar question = result.data;\r\n-\t\t\t\tcontext.commit( 'CHANGE_QUESTION_TYPE', question );\r\n-\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', question.type.key, { root: true } );\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\r\n-\t\t\t}\r\n-\t\t} ).catch( function() {\r\n-\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tisHiddenQuestionsSettings: function( context, id ) {\r\n-\t},\r\n-\r\n-\tcloneQuestion: function( context, question ) {\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'clone-question',\r\n-\t\t\tquestion: JSON.stringify( question ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tvar question = result.data;\r\n-\r\n-\t\t\t\t\tcontext.commit( 'ADD_NEW_QUESTION', result.data );\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', question.type.key, { root: true } );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tremoveQuestion: function( context, question ) {\r\n-\t\tvar question_id = question.id;\r\n-\t\tquestion.temp_id = LP.uniqueId();\r\n-\t\tcontext.commit( 'REMOVE_QUESTION', question );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'remove-question',\r\n-\t\t\tquestion_id: question_id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tquestion.id = question.temp_id;\r\n-\t\t\t\t\tquestion.temp_id = 0;\r\n-\t\t\t\t\tcontext.commit( 'REMOVE_QUESTION', question );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tconsole.error( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tdeleteQuestion: function( context, question ) {\r\n-\t\tvar question_id = question.id;\r\n-\t\tquestion.temp_id = LP.uniqueId();\r\n-\t\tcontext.commit( 'REMOVE_QUESTION', question );\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'delete-question',\r\n-\t\t\tquestion_id: question_id,\r\n-\t\t} )\r\n-\t\t\t.then( function() {\r\n-\t\t\t\tquestion.id = question.temp_id;\r\n-\t\t\t\tquestion.temp_id = 0;\r\n-\t\t\t\tcontext.commit( 'REMOVE_QUESTION', question );\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\r\n-\t\t\t} )\r\n-\t\t\t.catch( function() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\ttoggleQuestion: function( context, question ) {\r\n-\t\tif ( question.open ) {\r\n-\t\t\tcontext.commit( 'CLOSE_QUESTION', question );\r\n-\t\t} else {\r\n-\t\t\tcontext.commit( 'OPEN_QUESTION', question );\r\n-\t\t}\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'hidden-questions',\r\n-\t\t\thidden: context.getters.hiddenQuestions,\r\n-\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateQuestionAnswersOrder: function( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'sort-question-answers',\r\n-\t\t\tquestion_id: payload.question_id,\r\n-\t\t\torder: JSON.stringify( payload.order ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body,\r\n-\t\t\t\t\torder = result.data;\r\n-\t\t\t\tcontext.commit( 'SORT_QUESTION_ANSWERS', order );\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tupdateQuestionAnswerTitle: function( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-question-answer-title',\r\n-\t\t\tquestion_id: parseInt( payload.question_id ),\r\n-\t\t\tanswer: JSON.stringify( payload.answer ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_ANSWER_SUCCESS', parseInt( payload.question_id ) );\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\r\n-\t\t\t}\r\n-\t\t).catch(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_ANSWER_FAILURE', parseInt( payload.question_id ) );\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tupdateQuestionCorrectAnswer: function( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'change-question-correct-answer',\r\n-\t\t\tquestion_id: payload.question_id,\r\n-\t\t\tcorrect: JSON.stringify( payload.correct ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'CHANGE_QUESTION_CORRECT_ANSWERS', result.data );\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tdeleteQuestionAnswer: function( context, payload ) {\r\n-\t\tpayload.temp_id = LP.uniqueId();\r\n-\t\tcontext.commit( 'DELETE_ANSWER', payload );\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'delete-question-answer',\r\n-\t\t\tquestion_id: payload.question_id,\r\n-\t\t\tanswer_id: payload.answer_id,\r\n-\t\t} ).then(\r\n-\t\t\tfunction( response ) {\r\n-\t\t\t\tvar result = response.body;\r\n-\r\n-\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\tcontext.commit( 'DELETE_QUESTION_ANSWER', {\r\n-\t\t\t\t\t\tquestion_id: payload.question_id,\r\n-\t\t\t\t\t\tanswer_id: payload.temp_id,\r\n-\t\t\t\t\t\t\u002F\u002Fanswer_id: payload.answer_id\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( error ) {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t},\r\n-\r\n-\tnewQuestionAnswer: function( context, data ) {\r\n-\t\tvar temp_id = LP.uniqueId(),\r\n-\t\t\tquestion_id = data.question_id;\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question_id );\r\n-\t\tcontext.commit( 'ADD_QUESTION_ANSWER', {\r\n-\t\t\tquestion_id: question_id,\r\n-\t\t\tanswer: { text: LP_Quiz_Store.getters['i18n\u002Fall'].new_option, question_answer_id: temp_id },\r\n-\t\t} );\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'new-question-answer',\r\n-\t\t\tquestion_id: question_id,\r\n-\t\t\tquestion_answer_id: temp_id,\r\n-\t\t} )\r\n-\t\t\t.then(\r\n-\t\t\t\tfunction( response ) {\r\n-\t\t\t\t\tvar result = response.body;\r\n-\t\t\t\t\tif ( result.success ) {\r\n-\t\t\t\t\t\tvar answer = result.data;\r\n-\t\t\t\t\t\tcontext.commit( 'ADD_QUESTION_ANSWER', { question_id: question_id, answer: answer } );\r\n-\t\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question_id );\r\n-\r\n-\t\t\t\t\t\tdata.success && setTimeout( function() {\r\n-\t\t\t\t\t\t\tdata.success.apply( data.context, [ answer ] );\r\n-\t\t\t\t\t\t}, 300 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tfunction( error ) {\r\n-\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question_id );\r\n-\t\t\t\t\tconsole.error( error );\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\t},\r\n-\r\n-\tupdateQuestionContent: function( context, question ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question.id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-question-content',\r\n-\t\t\tquestion: JSON.stringify( question ),\r\n-\t\t} ).then(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\r\n-\t\t\t}\r\n-\t\t).catch(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\r\n-\tupdateQuestionMeta: function( context, payload ) {\r\n-\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question.id );\r\n-\r\n-\t\tLP.Request( {\r\n-\t\t\ttype: 'update-question-meta',\r\n-\t\t\tquestion: JSON.stringify( payload.question ),\r\n-\t\t\tmeta_key: payload.meta_key,\r\n-\t\t} ).then(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question.id );\r\n-\t\t\t}\r\n-\t\t).catch(\r\n-\t\t\tfunction() {\r\n-\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question.id );\r\n-\t\t\t} );\r\n-\t},\r\n-};\r\n-\r\n-export default QuestionList;\r\n+const $ = window.jQuery;\n+\n+const QuestionList = {\n+\n+\ttoggleAll: function( context ) {\n+\t\tvar hidden = context.getters.isHiddenListQuestions;\n+\n+\t\tif ( hidden ) {\n+\t\t\tcontext.commit( 'OPEN_LIST_QUESTIONS' );\n+\t\t} else {\n+\t\t\tcontext.commit( 'CLOSE_LIST_QUESTIONS' );\n+\t\t}\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'hidden-questions',\n+\t\t\thidden: context.getters.hiddenQuestions,\n+\t\t} );\n+\t},\n+\n+\tupdateQuizQuestionsHidden: function( context, data ) {\n+\t\tLP.Request( $.extend( {}, data, {\n+\t\t\ttype: 'update-quiz-questions-hidden',\n+\t\t} ) );\n+\t},\n+\n+\tnewQuestion: function( context, payload ) {\n+\t\tvar newQuestion = JSON.parse( JSON.stringify( payload.question ) );\n+\t\tnewQuestion.settings = {};\n+\t\tcontext.commit( 'ADD_NEW_QUESTION', newQuestion );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'new-question',\n+\t\t\tquestion: JSON.stringify( payload.question ),\n+\t\t\tdraft_quiz: JSON.stringify( payload.quiz ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', payload.question.type, { root: true } );\n+\t\t\t\t\tcontext.commit( 'ADD_NEW_QUESTION', result.data );\n+\t\t\t\t\tcontext.commit( 'CLOSE_LIST_QUESTIONS' );\n+\t\t\t\t\tcontext.commit( 'OPEN_QUESTION', result.data );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateQuestionsOrder: function( context, order ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'sort-questions',\n+\t\t\torder: JSON.stringify( order ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tcontext.commit( 'SORT_QUESTIONS', order );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateQuestionTitle: function( context, question ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question.id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-question-title',\n+\t\t\tquestion: JSON.stringify( question ),\n+\t\t} ).then(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\n+\t\t\t}\n+\t\t).catch(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\n+\t\t\t} );\n+\t},\n+\n+\tchangeQuestionType: function( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'change-question-type',\n+\t\t\tquestion_id: payload.question_id,\n+\t\t\tquestion_type: payload.type,\n+\t\t} ).then( function( response ) {\n+\t\t\tvar result = response.body;\n+\n+\t\t\tif ( result.success ) {\n+\t\t\t\tvar question = result.data;\n+\t\t\t\tcontext.commit( 'CHANGE_QUESTION_TYPE', question );\n+\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', question.type.key, { root: true } );\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\n+\t\t\t}\n+\t\t} ).catch( function() {\n+\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\n+\t\t} );\n+\t},\n+\n+\tisHiddenQuestionsSettings: function( context, id ) {\n+\t},\n+\n+\tcloneQuestion: function( context, question ) {\n+\t\tLP.Request( {\n+\t\t\ttype: 'clone-question',\n+\t\t\tquestion: JSON.stringify( question ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tvar question = result.data;\n+\n+\t\t\t\t\tcontext.commit( 'ADD_NEW_QUESTION', result.data );\n+\t\t\t\t\tcontext.commit( 'UPDATE_NEW_QUESTION_TYPE', question.type.key, { root: true } );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tremoveQuestion: function( context, question ) {\n+\t\tvar question_id = question.id;\n+\t\tquestion.temp_id = LP.uniqueId();\n+\t\tcontext.commit( 'REMOVE_QUESTION', question );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'remove-question',\n+\t\t\tquestion_id: question_id,\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tquestion.id = question.temp_id;\n+\t\t\t\t\tquestion.temp_id = 0;\n+\t\t\t\t\tcontext.commit( 'REMOVE_QUESTION', question );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tconsole.error( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tdeleteQuestion: function( context, question ) {\n+\t\tvar question_id = question.id;\n+\t\tquestion.temp_id = LP.uniqueId();\n+\t\tcontext.commit( 'REMOVE_QUESTION', question );\n+\t\tLP.Request( {\n+\t\t\ttype: 'delete-question',\n+\t\t\tquestion_id: question_id,\n+\t\t} )\n+\t\t\t.then( function() {\n+\t\t\t\tquestion.id = question.temp_id;\n+\t\t\t\tquestion.temp_id = 0;\n+\t\t\t\tcontext.commit( 'REMOVE_QUESTION', question );\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\n+\t\t\t} )\n+\t\t\t.catch( function() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\n+\t\t\t} );\n+\t},\n+\n+\ttoggleQuestion: function( context, question ) {\n+\t\tif ( question.open ) {\n+\t\t\tcontext.commit( 'CLOSE_QUESTION', question );\n+\t\t} else {\n+\t\t\tcontext.commit( 'OPEN_QUESTION', question );\n+\t\t}\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'hidden-questions',\n+\t\t\thidden: context.getters.hiddenQuestions,\n+\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateQuestionAnswersOrder: function( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'sort-question-answers',\n+\t\t\tquestion_id: payload.question_id,\n+\t\t\torder: JSON.stringify( payload.order ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body,\n+\t\t\t\t\torder = result.data;\n+\t\t\t\tcontext.commit( 'SORT_QUESTION_ANSWERS', order );\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tupdateQuestionAnswerTitle: function( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-question-answer-title',\n+\t\t\tquestion_id: parseInt( payload.question_id ),\n+\t\t\tanswer: JSON.stringify( payload.answer ),\n+\t\t} ).then(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_ANSWER_SUCCESS', parseInt( payload.question_id ) );\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\n+\t\t\t}\n+\t\t).catch(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_ANSWER_FAILURE', parseInt( payload.question_id ) );\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\n+\t\t\t} );\n+\t},\n+\n+\tupdateQuestionCorrectAnswer: function( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'change-question-correct-answer',\n+\t\t\tquestion_id: payload.question_id,\n+\t\t\tcorrect: JSON.stringify( payload.correct ),\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'CHANGE_QUESTION_CORRECT_ANSWERS', result.data );\n+\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tdeleteQuestionAnswer: function( context, payload ) {\n+\t\tpayload.temp_id = LP.uniqueId();\n+\t\tcontext.commit( 'DELETE_ANSWER', payload );\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question_id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'delete-question-answer',\n+\t\t\tquestion_id: payload.question_id,\n+\t\t\tanswer_id: payload.answer_id,\n+\t\t} ).then(\n+\t\t\tfunction( response ) {\n+\t\t\t\tvar result = response.body;\n+\n+\t\t\t\tif ( result.success ) {\n+\t\t\t\t\tcontext.commit( 'DELETE_QUESTION_ANSWER', {\n+\t\t\t\t\t\tquestion_id: payload.question_id,\n+\t\t\t\t\t\tanswer_id: payload.temp_id,\n+\t\t\t\t\t\t\u002F\u002Fanswer_id: payload.answer_id\n+\t\t\t\t\t} );\n+\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question_id );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( error ) {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question_id );\n+\t\t\t\tconsole.log( error );\n+\t\t\t}\n+\t\t);\n+\t},\n+\n+\tnewQuestionAnswer: function( context, data ) {\n+\t\tvar temp_id = LP.uniqueId(),\n+\t\t\tquestion_id = data.question_id;\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question_id );\n+\t\tcontext.commit( 'ADD_QUESTION_ANSWER', {\n+\t\t\tquestion_id: question_id,\n+\t\t\tanswer: { text: LP_Quiz_Store.getters['i18n\u002Fall'].new_option, question_answer_id: temp_id },\n+\t\t} );\n+\t\tLP.Request( {\n+\t\t\ttype: 'new-question-answer',\n+\t\t\tquestion_id: question_id,\n+\t\t\tquestion_answer_id: temp_id,\n+\t\t} )\n+\t\t\t.then(\n+\t\t\t\tfunction( response ) {\n+\t\t\t\t\tvar result = response.body;\n+\t\t\t\t\tif ( result.success ) {\n+\t\t\t\t\t\tvar answer = result.data;\n+\t\t\t\t\t\tcontext.commit( 'ADD_QUESTION_ANSWER', { question_id: question_id, answer: answer } );\n+\t\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question_id );\n+\n+\t\t\t\t\t\tdata.success && setTimeout( function() {\n+\t\t\t\t\t\t\tdata.success.apply( data.context, [ answer ] );\n+\t\t\t\t\t\t}, 300 );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tfunction( error ) {\n+\t\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question_id );\n+\t\t\t\t\tconsole.error( error );\n+\t\t\t\t}\n+\t\t\t);\n+\t},\n+\n+\tupdateQuestionContent: function( context, question ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', question.id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-question-content',\n+\t\t\tquestion: JSON.stringify( question ),\n+\t\t} ).then(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', question.id );\n+\t\t\t}\n+\t\t).catch(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', question.id );\n+\t\t\t} );\n+\t},\n+\n+\tupdateQuestionMeta: function( context, payload ) {\n+\t\tcontext.commit( 'UPDATE_QUESTION_REQUEST', payload.question.id );\n+\n+\t\tLP.Request( {\n+\t\t\ttype: 'update-question-meta',\n+\t\t\tquestion: JSON.stringify( payload.question ),\n+\t\t\tmeta_key: payload.meta_key,\n+\t\t} ).then(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_SUCCESS', payload.question.id );\n+\t\t\t}\n+\t\t).catch(\n+\t\t\tfunction() {\n+\t\t\t\tcontext.commit( 'UPDATE_QUESTION_FAILURE', payload.question.id );\n+\t\t\t} );\n+\t},\n+};\n+\n+export default QuestionList;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Factions\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-const Quiz = {\r\n-    heartbeat: function (context) {\r\n-        LP.Request({\r\n-                type: 'heartbeat'\r\n-            }\r\n-        )\r\n-            .then(\r\n-                function (response) {\r\n-                    var result = response.body;\r\n-                    context.commit('UPDATE_HEART_BEAT', !!result.success);\r\n-                },\r\n-                function (error) {\r\n-                    context.commit('UPDATE_HEART_BEAT', false);\r\n-                }\r\n-            );\r\n-    },\r\n-\r\n-    newRequest: function (context) {\r\n-        context.commit('INCREASE_NUMBER_REQUEST');\r\n-        context.commit('UPDATE_STATUS', 'loading');\r\n-\r\n-        window.onbeforeunload = function () {\r\n-            return '';\r\n-        }\r\n-    },\r\n-\r\n-    requestCompleted: function (context, status) {\r\n-        context.commit('DECREASE_NUMBER_REQUEST');\r\n-\r\n-        if (context.getters.currentRequest === 0) {\r\n-            context.commit('UPDATE_STATUS', status);\r\n-            window.onbeforeunload = null;\r\n-        }\r\n-    }\r\n-};\r\n-\r\n+const Quiz = {\n+    heartbeat: function (context) {\n+        LP.Request({\n+                type: 'heartbeat'\n+            }\n+        )\n+            .then(\n+                function (response) {\n+                    var result = response.body;\n+                    context.commit('UPDATE_HEART_BEAT', !!result.success);\n+                },\n+                function (error) {\n+                    context.commit('UPDATE_HEART_BEAT', false);\n+                }\n+            );\n+    },\n+\n+    newRequest: function (context) {\n+        context.commit('INCREASE_NUMBER_REQUEST');\n+        context.commit('UPDATE_STATUS', 'loading');\n+\n+        window.onbeforeunload = function () {\n+            return '';\n+        }\n+    },\n+\n+    requestCompleted: function (context, status) {\n+        context.commit('DECREASE_NUMBER_REQUEST');\n+\n+        if (context.getters.currentRequest === 0) {\n+            context.commit('UPDATE_STATUS', status);\n+            window.onbeforeunload = null;\n+        }\n+    }\n+};\n+\n export default Quiz;\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-import HTTP from '.\u002Fhttp';\r\n-import CourseStore from '.\u002Fstore\u002Fcourse';\r\n-\r\n-window.$Vue = window.$Vue || Vue;\r\n-window.$Vuex = window.$Vuex || Vuex;\r\n-\r\n-const $ = window.jQuery;\r\n-\r\n-\u002F**\r\n- * Init app.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-$( document ).ready( function() {\r\n-\twindow.LP_Curriculum_Store = new $Vuex.Store( CourseStore( lpAdminCourseEditorSettings ) );\r\n-\tHTTP( { ns: 'LPCurriculumRequest', store: LP_Curriculum_Store } );\r\n-\r\n-\tsetTimeout( () => {\r\n-\t\twindow.LP_Course_Editor = new $Vue( {\r\n-\t\t\tel: '#admin-editor-lp_course',\r\n-\t\t\ttemplate: '\u003Clp-course-editor>\u003C\u002Flp-course-editor>',\r\n-\t\t} );\r\n-\t}, 100 );\r\n-} );\r\n+import HTTP from '.\u002Fhttp';\n+import CourseStore from '.\u002Fstore\u002Fcourse';\n+\n+window.$Vue = window.$Vue || Vue;\n+window.$Vuex = window.$Vuex || Vuex;\n+\n+const $ = window.jQuery;\n+\n+\u002F**\n+ * Init app.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+$( document ).ready( function() {\n+\twindow.LP_Curriculum_Store = new $Vuex.Store( CourseStore( lpAdminCourseEditorSettings ) );\n+\tHTTP( { ns: 'LPCurriculumRequest', store: LP_Curriculum_Store } );\n+\n+\tsetTimeout( () => {\n+\t\twindow.LP_Course_Editor = new $Vue( {\n+\t\t\tel: '#admin-editor-lp_course',\n+\t\t\ttemplate: '\u003Clp-course-editor>\u003C\u002Flp-course-editor>',\n+\t\t} );\n+\t}, 100 );\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Ffill-in-blanks.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Ffill-in-blanks.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Ffill-in-blanks.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Ffill-in-blanks.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-( function( $ ) {\r\n-\twindow.FIB = {\r\n-\r\n-\t\tgetSelectedText: function getSelectedText() {\r\n-\t\t\tlet html = '';\r\n-\t\t\tif ( typeof window.getSelection !== 'undefined' ) {\r\n-\t\t\t\tconst sel = window.getSelection();\r\n-\t\t\t\tif ( sel.rangeCount ) {\r\n-\t\t\t\t\tconst container = document.createElement( 'div' );\r\n-\t\t\t\t\tfor ( let i = 0, len = sel.rangeCount; i \u003C len; ++i ) {\r\n-\t\t\t\t\t\tcontainer.appendChild( sel.getRangeAt( i ).cloneContents() );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\thtml = container.innerHTML;\r\n-\t\t\t\t}\r\n-\t\t\t} else if ( typeof document.selection !== 'undefined' ) {\r\n-\t\t\t\tif ( document.selection.type === 'Text' ) {\r\n-\t\t\t\t\thtml = document.selection.createRange().htmlText;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\treturn html;\r\n-\t\t},\r\n-\r\n-\t\tcreateTextNode( content ) {\r\n-\t\t\treturn document.createTextNode( content );\r\n-\t\t},\r\n-\r\n-\t\tisContainHtml: function isContainHtml( content ) {\r\n-\t\t\tconst $el = $( content ),\r\n-\t\t\t\tsel = 'b.fib-blank';\r\n-\t\t\treturn $el.is( sel ) || $el.find( sel ).length || $el.parent().is( sel );\r\n-\t\t},\r\n-\r\n-\t\tgetSelectionRange: function getSelectionRange() {\r\n-\t\t\tlet t = '';\r\n-\t\t\tif ( window.getSelection ) {\r\n-\t\t\t\tt = window.getSelection();\r\n-\t\t\t} else if ( document.getSelection ) {\r\n-\t\t\t\tt = document.getSelection();\r\n-\t\t\t} else if ( document.selection ) {\r\n-\t\t\t\tt = document.selection.createRange().text;\r\n-\t\t\t}\r\n-\t\t\treturn t;\r\n-\t\t},\r\n-\r\n-\t\touterHTML( $dom ) {\r\n-\t\t\treturn $( '\u003Cdiv>' ).append( $( $dom ).clone() ).html();\r\n-\t\t},\r\n-\r\n-\t\tdoUpgrade( callback ) {\r\n-\t\t\t$.ajax( {\r\n-\t\t\t\turl: '',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\t'lp-ajax': 'fib-upgrade',\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess( res ) {\r\n-\t\t\t\t\tconsole.log( res );\r\n-\t\t\t\t\tcallback && callback.call( res );\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t},\r\n-\t};\r\n-\r\n-\t$( document ).ready( function() {\r\n-\t\t$( '#do-upgrade-fib' ).on( 'click', function() {\r\n-\t\t\tconst $button = $( this ).prop( 'disabled', true ).addClass( 'ajaxloading' );\r\n-\t\t\tFIB.doUpgrade( function() {\r\n-\t\t\t\t$button.prop( 'disabled', false ).removeClass( 'ajaxloading' );\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\twindow.FIB = {\n+\n+\t\tgetSelectedText: function getSelectedText() {\n+\t\t\tlet html = '';\n+\t\t\tif ( typeof window.getSelection !== 'undefined' ) {\n+\t\t\t\tconst sel = window.getSelection();\n+\t\t\t\tif ( sel.rangeCount ) {\n+\t\t\t\t\tconst container = document.createElement( 'div' );\n+\t\t\t\t\tfor ( let i = 0, len = sel.rangeCount; i \u003C len; ++i ) {\n+\t\t\t\t\t\tcontainer.appendChild( sel.getRangeAt( i ).cloneContents() );\n+\t\t\t\t\t}\n+\t\t\t\t\thtml = container.innerHTML;\n+\t\t\t\t}\n+\t\t\t} else if ( typeof document.selection !== 'undefined' ) {\n+\t\t\t\tif ( document.selection.type === 'Text' ) {\n+\t\t\t\t\thtml = document.selection.createRange().htmlText;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn html;\n+\t\t},\n+\n+\t\tcreateTextNode( content ) {\n+\t\t\treturn document.createTextNode( content );\n+\t\t},\n+\n+\t\tisContainHtml: function isContainHtml( content ) {\n+\t\t\tconst $el = $( content ),\n+\t\t\t\tsel = 'b.fib-blank';\n+\t\t\treturn $el.is( sel ) || $el.find( sel ).length || $el.parent().is( sel );\n+\t\t},\n+\n+\t\tgetSelectionRange: function getSelectionRange() {\n+\t\t\tlet t = '';\n+\t\t\tif ( window.getSelection ) {\n+\t\t\t\tt = window.getSelection();\n+\t\t\t} else if ( document.getSelection ) {\n+\t\t\t\tt = document.getSelection();\n+\t\t\t} else if ( document.selection ) {\n+\t\t\t\tt = document.selection.createRange().text;\n+\t\t\t}\n+\t\t\treturn t;\n+\t\t},\n+\n+\t\touterHTML( $dom ) {\n+\t\t\treturn $( '\u003Cdiv>' ).append( $( $dom ).clone() ).html();\n+\t\t},\n+\n+\t\tdoUpgrade( callback ) {\n+\t\t\t$.ajax( {\n+\t\t\t\turl: '',\n+\t\t\t\tdata: {\n+\t\t\t\t\t'lp-ajax': 'fib-upgrade',\n+\t\t\t\t},\n+\t\t\t\tsuccess( res ) {\n+\t\t\t\t\tconsole.log( res );\n+\t\t\t\t\tcallback && callback.call( res );\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t},\n+\t};\n+\n+\t$( document ).ready( function() {\n+\t\t$( '#do-upgrade-fib' ).on( 'click', function() {\n+\t\t\tconst $button = $( this ).prop( 'disabled', true ).addClass( 'ajaxloading' );\n+\t\t\tFIB.doUpgrade( function() {\n+\t\t\t\t$button.prop( 'disabled', false ).removeClass( 'ajaxloading' );\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-const Course = {\r\n-\theartbeat: function( state ) {\r\n-\t\treturn state.heartbeat;\r\n-\t},\r\n-\taction: function( state ) {\r\n-\t\treturn state.action;\r\n-\t},\r\n-\tid: function( state ) {\r\n-\t\treturn state.course_id;\r\n-\t},\r\n-\tautoDraft: function( state ) {\r\n-\t\treturn state.auto_draft;\r\n-\t},\r\n-\tdisable_curriculum: function( state ) {\r\n-\t\treturn state.disable_curriculum;\r\n-\t},\r\n-\tstatus: function( state ) {\r\n-\t\treturn state.status || 'error';\r\n-\t},\r\n-\tcurrentRequest: function( state ) {\r\n-\t\treturn state.countCurrentRequest || 0;\r\n-\t},\r\n-\turlAjax: function( state ) {\r\n-\t\treturn state.ajax;\r\n-\t},\r\n-\tnonce: function( state ) {\r\n-\t\treturn state.nonce;\r\n-\t},\r\n-};\r\n-\r\n-export default Course;\r\n+const Course = {\n+\theartbeat: function( state ) {\n+\t\treturn state.heartbeat;\n+\t},\n+\taction: function( state ) {\n+\t\treturn state.action;\n+\t},\n+\tid: function( state ) {\n+\t\treturn state.course_id;\n+\t},\n+\tautoDraft: function( state ) {\n+\t\treturn state.auto_draft;\n+\t},\n+\tdisable_curriculum: function( state ) {\n+\t\treturn state.disable_curriculum;\n+\t},\n+\tstatus: function( state ) {\n+\t\treturn state.status || 'error';\n+\t},\n+\tcurrentRequest: function( state ) {\n+\t\treturn state.countCurrentRequest || 0;\n+\t},\n+\turlAjax: function( state ) {\n+\t\treturn state.ajax;\n+\t},\n+\tnonce: function( state ) {\n+\t\treturn state.nonce;\n+\t},\n+};\n+\n+export default Course;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse-section.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse-section.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse-section.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fcourse-section.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-const CourseCurriculum = {\r\n-\tsections: function( state ) {\r\n-\t\treturn state.sections || [];\r\n-\t},\r\n-\turlEdit: function( state ) {\r\n-\t\treturn state.urlEdit;\r\n-\t},\r\n-\thiddenSections: function( state ) {\r\n-\t\treturn state.sections\r\n-\t\t\t.filter( function( section ) {\r\n-\t\t\t\treturn ! section.open;\r\n-\t\t\t} )\r\n-\t\t\t.map( function( section ) {\r\n-\t\t\t\treturn parseInt( section.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\tisHiddenAllSections: function( state, getters ) {\r\n-\t\tvar sections = getters.sections;\r\n-\t\tvar hiddenSections = getters.hiddenSections;\r\n-\r\n-\t\treturn hiddenSections.length === sections.length;\r\n-\t},\r\n-\tstatusUpdateSection: function( state ) {\r\n-\t\treturn state.statusUpdateSection;\r\n-\t},\r\n-\tstatusUpdateSectionItem: function( state ) {\r\n-\t\treturn state.statusUpdateSectionItem;\r\n-\t},\r\n-};\r\n-\r\n-export default CourseCurriculum;\r\n+const CourseCurriculum = {\n+\tsections: function( state ) {\n+\t\treturn state.sections || [];\n+\t},\n+\turlEdit: function( state ) {\n+\t\treturn state.urlEdit;\n+\t},\n+\thiddenSections: function( state ) {\n+\t\treturn state.sections\n+\t\t\t.filter( function( section ) {\n+\t\t\t\treturn ! section.open;\n+\t\t\t} )\n+\t\t\t.map( function( section ) {\n+\t\t\t\treturn parseInt( section.id );\n+\t\t\t} );\n+\t},\n+\tisHiddenAllSections: function( state, getters ) {\n+\t\tvar sections = getters.sections;\n+\t\tvar hiddenSections = getters.hiddenSections;\n+\n+\t\treturn hiddenSections.length === sections.length;\n+\t},\n+\tstatusUpdateSection: function( state ) {\n+\t\treturn state.statusUpdateSection;\n+\t},\n+\tstatusUpdateSectionItem: function( state ) {\n+\t\treturn state.statusUpdateSectionItem;\n+\t},\n+};\n+\n+export default CourseCurriculum;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-course-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-course-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-course-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-course-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\r\n-const Getters = {\r\n-\tstatus: function( state ) {\r\n-\t\treturn state.status;\r\n-\t},\r\n-\tpagination: function( state ) {\r\n-\t\treturn state.pagination;\r\n-\t},\r\n-\titems: function( state, _getters ) {\r\n-\t\treturn state.items.map( function( item ) {\r\n-\t\t\tvar find = _getters.addedItems.find( function( _item ) {\r\n-\t\t\t\treturn item.id === _item.id;\r\n-\t\t\t} );\r\n-\r\n-\t\t\titem.added = !! find;\r\n-\r\n-\t\t\treturn item;\r\n-\t\t} );\r\n-\t},\r\n-\taddedItems: function( state ) {\r\n-\t\treturn state.addedItems;\r\n-\t},\r\n-\tisOpen: function( state ) {\r\n-\t\treturn state.open;\r\n-\t},\r\n-\ttypes: function( state ) {\r\n-\t\treturn state.types;\r\n-\t},\r\n-\tsection: function( state ) {\r\n-\t\treturn state.sectionId;\r\n-\t},\r\n-};\r\n-\r\n-export default Getters;\r\n+\n+const Getters = {\n+\tstatus: function( state ) {\n+\t\treturn state.status;\n+\t},\n+\tpagination: function( state ) {\n+\t\treturn state.pagination;\n+\t},\n+\titems: function( state, _getters ) {\n+\t\treturn state.items.map( function( item ) {\n+\t\t\tvar find = _getters.addedItems.find( function( _item ) {\n+\t\t\t\treturn item.id === _item.id;\n+\t\t\t} );\n+\n+\t\t\titem.added = !! find;\n+\n+\t\t\treturn item;\n+\t\t} );\n+\t},\n+\taddedItems: function( state ) {\n+\t\treturn state.addedItems;\n+\t},\n+\tisOpen: function( state ) {\n+\t\treturn state.open;\n+\t},\n+\ttypes: function( state ) {\n+\t\treturn state.types;\n+\t},\n+\tsection: function( state ) {\n+\t\treturn state.sectionId;\n+\t},\n+};\n+\n+export default Getters;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-quiz-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-quiz-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-quiz-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fmodal-quiz-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-const ModalQuizItems = {\r\n-\tstatus: function( state ) {\r\n-\t\treturn state.status;\r\n-\t},\r\n-\tpagination: function( state ) {\r\n-\t\treturn state.pagination;\r\n-\t},\r\n-\titems: function( state, _getters ) {\r\n-\t\treturn state.items.map( function( item ) {\r\n-\t\t\tvar find = _getters.addedItems.find( function( _item ) {\r\n-\t\t\t\treturn item.id === _item.id;\r\n-\t\t\t} );\r\n-\r\n-\t\t\titem.added = !! find;\r\n-\r\n-\t\t\treturn item;\r\n-\t\t} );\r\n-\t},\r\n-\tcode: function( state ) {\r\n-\t\treturn Date.now();\r\n-\t},\r\n-\taddedItems: function( state ) {\r\n-\t\treturn state.addedItems;\r\n-\t},\r\n-\tisOpen: function( state ) {\r\n-\t\treturn state.open;\r\n-\t},\r\n-\tquiz: function( state ) {\r\n-\t\treturn state.quizId;\r\n-\t},\r\n-};\r\n-\r\n-export default ModalQuizItems;\r\n+const ModalQuizItems = {\n+\tstatus: function( state ) {\n+\t\treturn state.status;\n+\t},\n+\tpagination: function( state ) {\n+\t\treturn state.pagination;\n+\t},\n+\titems: function( state, _getters ) {\n+\t\treturn state.items.map( function( item ) {\n+\t\t\tvar find = _getters.addedItems.find( function( _item ) {\n+\t\t\t\treturn item.id === _item.id;\n+\t\t\t} );\n+\n+\t\t\titem.added = !! find;\n+\n+\t\t\treturn item;\n+\t\t} );\n+\t},\n+\tcode: function( state ) {\n+\t\treturn Date.now();\n+\t},\n+\taddedItems: function( state ) {\n+\t\treturn state.addedItems;\n+\t},\n+\tisOpen: function( state ) {\n+\t\treturn state.open;\n+\t},\n+\tquiz: function( state ) {\n+\t\treturn state.quizId;\n+\t},\n+};\n+\n+export default ModalQuizItems;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-const Question = {\r\n-\tid: function( state ) {\r\n-\t\treturn state.id;\r\n-\t},\r\n-\ttype: function( state ) {\r\n-\t\treturn state.type;\r\n-\t},\r\n-\tcode: function( state ) {\r\n-\t\treturn Date.now();\r\n-\t},\r\n-\tautoDraft: function( state ) {\r\n-\t\treturn state.auto_draft;\r\n-\t},\r\n-\tanswers: function( state ) {\r\n-\t\treturn Object.values( state.answers ) || [];\r\n-\t},\r\n-\tsettings: function( state ) {\r\n-\t\treturn state.setting;\r\n-\t},\r\n-\ttypes: function( state ) {\r\n-\t\treturn state.questionTypes || [];\r\n-\t},\r\n-\tnumberCorrect: function( state ) {\r\n-\t\tvar correct = 0;\r\n-\t\tObject.keys( state.answers ).forEach( function( key ) {\r\n-\t\t\tif ( state.answers[key].is_true === 'yes' ) {\r\n-\t\t\t\tcorrect += 1;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t\treturn correct;\r\n-\t},\r\n-\tstatus: function( state ) {\r\n-\t\treturn state.status;\r\n-\t},\r\n-\tcurrentRequest: function( state ) {\r\n-\t\treturn state.countCurrentRequest || 0;\r\n-\t},\r\n-\taction: function( state ) {\r\n-\t\treturn state.action;\r\n-\t},\r\n-\tnonce: function( state ) {\r\n-\t\treturn state.nonce;\r\n-\t},\r\n-\texternalComponent: function( state ) {\r\n-\t\treturn state.externalComponent || [];\r\n-\t},\r\n-\tsupportAnswerOptions: function( state ) {\r\n-\t\treturn state.supportAnswerOptions || [];\r\n-\t},\r\n-\tstate: function( state ) {\r\n-\t\treturn state;\r\n-\t},\r\n-\ti18n: function( state ) {\r\n-\t\treturn state.i18n;\r\n-\t},\r\n-};\r\n-\r\n-export default Question;\r\n+const Question = {\n+\tid: function( state ) {\n+\t\treturn state.id;\n+\t},\n+\ttype: function( state ) {\n+\t\treturn state.type;\n+\t},\n+\tcode: function( state ) {\n+\t\treturn Date.now();\n+\t},\n+\tautoDraft: function( state ) {\n+\t\treturn state.auto_draft;\n+\t},\n+\tanswers: function( state ) {\n+\t\treturn Object.values( state.answers ) || [];\n+\t},\n+\tsettings: function( state ) {\n+\t\treturn state.setting;\n+\t},\n+\ttypes: function( state ) {\n+\t\treturn state.questionTypes || [];\n+\t},\n+\tnumberCorrect: function( state ) {\n+\t\tvar correct = 0;\n+\t\tObject.keys( state.answers ).forEach( function( key ) {\n+\t\t\tif ( state.answers[key].is_true === 'yes' ) {\n+\t\t\t\tcorrect += 1;\n+\t\t\t}\n+\t\t} );\n+\t\treturn correct;\n+\t},\n+\tstatus: function( state ) {\n+\t\treturn state.status;\n+\t},\n+\tcurrentRequest: function( state ) {\n+\t\treturn state.countCurrentRequest || 0;\n+\t},\n+\taction: function( state ) {\n+\t\treturn state.action;\n+\t},\n+\tnonce: function( state ) {\n+\t\treturn state.nonce;\n+\t},\n+\texternalComponent: function( state ) {\n+\t\treturn state.externalComponent || [];\n+\t},\n+\tsupportAnswerOptions: function( state ) {\n+\t\treturn state.supportAnswerOptions || [];\n+\t},\n+\tstate: function( state ) {\n+\t\treturn state;\n+\t},\n+\ti18n: function( state ) {\n+\t\treturn state.i18n;\n+\t},\n+};\n+\n+export default Question;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquestion-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-const QuestionList = {\r\n-\tlistQuestions: function( state ) {\r\n-\t\treturn state.questions || [];\r\n-\t},\r\n-\tquestionsOrder: function( state ) {\r\n-\t\treturn state.order || [];\r\n-\t},\r\n-\texternalComponent: function( state ) {\r\n-\t\treturn state.externalComponent || [];\r\n-\t},\r\n-\tsupportAnswerOptions: function( state ) {\r\n-\t\treturn state.supportAnswerOptions || [];\r\n-\t},\r\n-\thiddenQuestionsSettings: function( state ) {\r\n-\t\treturn state.hidden_questions_settings || [];\r\n-\t},\r\n-\thiddenQuestions: function( state ) {\r\n-\t\treturn state.questions\r\n-\t\t\t.filter( function( question ) {\r\n-\t\t\t\treturn ! question.open;\r\n-\t\t\t} )\r\n-\t\t\t.map( function( question ) {\r\n-\t\t\t\treturn parseInt( question.id );\r\n-\t\t\t} );\r\n-\t},\r\n-\tisHiddenListQuestions: function( state, getters ) {\r\n-\t\tvar questions = getters.listQuestions;\r\n-\t\tvar hiddenQuestions = getters.hiddenQuestions;\r\n-\r\n-\t\treturn questions.length === hiddenQuestions.length;\r\n-\t},\r\n-\tdisableUpdateList: function( state ) {\r\n-\t\treturn state.disableUpdateList;\r\n-\t},\r\n-\tstatusUpdateQuestions: function( state ) {\r\n-\t\treturn state.statusUpdateQuestions;\r\n-\t},\r\n-\tstatusUpdateQuestionItem: function( state ) {\r\n-\t\treturn state.statusUpdateQuestionItem;\r\n-\t},\r\n-\tstatusUpdateQuestionAnswer: function( state ) {\r\n-\t\treturn state.statusUpdateQuestionAnswer;\r\n-\t},\r\n-};\r\n-\r\n-export default QuestionList;\r\n+const QuestionList = {\n+\tlistQuestions: function( state ) {\n+\t\treturn state.questions || [];\n+\t},\n+\tquestionsOrder: function( state ) {\n+\t\treturn state.order || [];\n+\t},\n+\texternalComponent: function( state ) {\n+\t\treturn state.externalComponent || [];\n+\t},\n+\tsupportAnswerOptions: function( state ) {\n+\t\treturn state.supportAnswerOptions || [];\n+\t},\n+\thiddenQuestionsSettings: function( state ) {\n+\t\treturn state.hidden_questions_settings || [];\n+\t},\n+\thiddenQuestions: function( state ) {\n+\t\treturn state.questions\n+\t\t\t.filter( function( question ) {\n+\t\t\t\treturn ! question.open;\n+\t\t\t} )\n+\t\t\t.map( function( question ) {\n+\t\t\t\treturn parseInt( question.id );\n+\t\t\t} );\n+\t},\n+\tisHiddenListQuestions: function( state, getters ) {\n+\t\tvar questions = getters.listQuestions;\n+\t\tvar hiddenQuestions = getters.hiddenQuestions;\n+\n+\t\treturn questions.length === hiddenQuestions.length;\n+\t},\n+\tdisableUpdateList: function( state ) {\n+\t\treturn state.disableUpdateList;\n+\t},\n+\tstatusUpdateQuestions: function( state ) {\n+\t\treturn state.statusUpdateQuestions;\n+\t},\n+\tstatusUpdateQuestionItem: function( state ) {\n+\t\treturn state.statusUpdateQuestionItem;\n+\t},\n+\tstatusUpdateQuestionAnswer: function( state ) {\n+\t\treturn state.statusUpdateQuestionAnswer;\n+\t},\n+};\n+\n+export default QuestionList;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fgetters\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-const Quiz = {\r\n-\theartbeat: function( state ) {\r\n-\t\treturn state.heartbeat;\r\n-\t},\r\n-\tquestionTypes: function( state ) {\r\n-\t\treturn state.types;\r\n-\t},\r\n-\tdefaultNewQuestionType: function( state ) {\r\n-\t\treturn state.default_new;\r\n-\t},\r\n-\taction: function( state ) {\r\n-\t\treturn state.action;\r\n-\t},\r\n-\tid: function( state ) {\r\n-\t\treturn state.quiz_id;\r\n-\t},\r\n-\tstatus: function( state ) {\r\n-\t\treturn state.status || 'error';\r\n-\t},\r\n-\tcurrentRequest: function( state ) {\r\n-\t\treturn state.countCurrentRequest || 0;\r\n-\t},\r\n-\tnonce: function( state ) {\r\n-\t\treturn state.nonce;\r\n-\t},\r\n-};\r\n-\r\n-export default Quiz;\r\n+const Quiz = {\n+\theartbeat: function( state ) {\n+\t\treturn state.heartbeat;\n+\t},\n+\tquestionTypes: function( state ) {\n+\t\treturn state.types;\n+\t},\n+\tdefaultNewQuestionType: function( state ) {\n+\t\treturn state.default_new;\n+\t},\n+\taction: function( state ) {\n+\t\treturn state.action;\n+\t},\n+\tid: function( state ) {\n+\t\treturn state.quiz_id;\n+\t},\n+\tstatus: function( state ) {\n+\t\treturn state.status || 'error';\n+\t},\n+\tcurrentRequest: function( state ) {\n+\t\treturn state.countCurrentRequest || 0;\n+\t},\n+\tnonce: function( state ) {\n+\t\treturn state.nonce;\n+\t},\n+};\n+\n+export default Quiz;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fhttp.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fhttp.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fhttp.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fhttp.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-export default function HTTP( options ) {\r\n-\tconst $ = window.jQuery || jQuery;\r\n-\tconst $VueHTTP = Vue.http;\r\n-\r\n-\toptions = $.extend( {\r\n-\t\tns: 'LPRequest',\r\n-\t\tstore: false,\r\n-\t}, options || {} );\r\n-\r\n-\tlet $publishingAction = null;\r\n-\r\n-\tLP.Request = function( payload ) {\r\n-\t\t$publishingAction = $( '#publishing-action' );\r\n-\r\n-\t\tpayload.id = options.store.getters.id;\r\n-\t\tpayload.nonce = options.store.getters.nonce;\r\n-\t\tpayload[ 'lp-ajax' ] = options.store.getters.action;\r\n-\t\t\u002F\u002Fpayload.code = options.store.getters.code;\r\n-\r\n-\t\t$publishingAction.find( '#publish' ).addClass( 'disabled' );\r\n-\t\t$publishingAction.find( '.spinner' ).addClass( 'is-active' );\r\n-\t\t$publishingAction.addClass( 'code-' + payload.code );\r\n-\r\n-\t\treturn $VueHTTP.post( options.store.getters.urlAjax,\r\n-\t\t\tpayload,\r\n-\t\t\t{\r\n-\t\t\t\temulateJSON: true,\r\n-\t\t\t\tparams: {\r\n-\t\t\t\t\tnamespace: options.ns,\r\n-\t\t\t\t\tcode: payload.code,\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t};\r\n-\r\n-\t$VueHTTP.interceptors.push( function( request, next ) {\r\n-\t\tif ( request.params.namespace !== options.ns ) {\r\n-\t\t\tnext();\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\toptions.store.dispatch( 'newRequest' );\r\n-\r\n-\t\tnext( function( response ) {\r\n-\t\t\tif ( ! jQuery.isPlainObject( response.body ) ) {\r\n-\t\t\t\tresponse.body = LP.parseJSON( response.body );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst body = response.body;\r\n-\t\t\tconst result = body.success || false;\r\n-\r\n-\t\t\tif ( result ) {\r\n-\t\t\t\toptions.store.dispatch( 'requestCompleted', 'successful' );\r\n-\t\t\t} else {\r\n-\t\t\t\toptions.store.dispatch( 'requestCompleted', 'failed' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$publishingAction.removeClass( 'code-' + request.params.code );\r\n-\r\n-\t\t\tif ( ! $publishingAction.attr( 'class' ) ) {\r\n-\t\t\t\t$publishingAction.find( '#publish' ).removeClass( 'disabled' );\r\n-\t\t\t\t$publishingAction.find( '.spinner' ).removeClass( 'is-active' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-}\r\n+export default function HTTP( options ) {\n+\tconst $ = window.jQuery || jQuery;\n+\tconst $VueHTTP = Vue.http;\n+\n+\toptions = $.extend( {\n+\t\tns: 'LPRequest',\n+\t\tstore: false,\n+\t}, options || {} );\n+\n+\tlet $publishingAction = null;\n+\n+\tLP.Request = function( payload ) {\n+\t\t$publishingAction = $( '#publishing-action' );\n+\n+\t\tpayload.id = options.store.getters.id;\n+\t\tpayload.nonce = options.store.getters.nonce;\n+\t\tpayload[ 'lp-ajax' ] = options.store.getters.action;\n+\t\t\u002F\u002Fpayload.code = options.store.getters.code;\n+\n+\t\t$publishingAction.find( '#publish' ).addClass( 'disabled' );\n+\t\t$publishingAction.find( '.spinner' ).addClass( 'is-active' );\n+\t\t$publishingAction.addClass( 'code-' + payload.code );\n+\n+\t\treturn $VueHTTP.post( options.store.getters.urlAjax,\n+\t\t\tpayload,\n+\t\t\t{\n+\t\t\t\temulateJSON: true,\n+\t\t\t\tparams: {\n+\t\t\t\t\tnamespace: options.ns,\n+\t\t\t\t\tcode: payload.code,\n+\t\t\t\t},\n+\t\t\t} );\n+\t};\n+\n+\t$VueHTTP.interceptors.push( function( request, next ) {\n+\t\tif ( request.params.namespace !== options.ns ) {\n+\t\t\tnext();\n+\t\t\treturn;\n+\t\t}\n+\n+\t\toptions.store.dispatch( 'newRequest' );\n+\n+\t\tnext( function( response ) {\n+\t\t\tif ( ! jQuery.isPlainObject( response.body ) ) {\n+\t\t\t\tresponse.body = LP.parseJSON( response.body );\n+\t\t\t}\n+\n+\t\t\tconst body = response.body;\n+\t\t\tconst result = body.success || false;\n+\n+\t\t\tif ( result ) {\n+\t\t\t\toptions.store.dispatch( 'requestCompleted', 'successful' );\n+\t\t\t} else {\n+\t\t\t\toptions.store.dispatch( 'requestCompleted', 'failed' );\n+\t\t\t}\n+\n+\t\t\t$publishingAction.removeClass( 'code-' + request.params.code );\n+\n+\t\t\tif ( ! $publishingAction.attr( 'class' ) ) {\n+\t\t\t\t$publishingAction.find( '#publish' ).removeClass( 'disabled' );\n+\t\t\t\t$publishingAction.find( '.spinner' ).removeClass( 'is-active' );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-const Course = {\r\n-\r\n-\tUPDATE_HEART_BEAT: function( state, status ) {\r\n-\t\tstate.heartbeat = !! status;\r\n-\t},\r\n-\r\n-\tUPDATE_AUTO_DRAFT_STATUS: function( state, status ) {\r\n-\t\tstate.auto_draft = status;\r\n-\t},\r\n-\r\n-\tUPDATE_STATUS: function( state, status ) {\r\n-\t\tstate.status = status;\r\n-\t},\r\n-\r\n-\tINCREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest++;\r\n-\t},\r\n-\r\n-\tDECREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest--;\r\n-\t},\r\n-};\r\n-\r\n-export default Course;\r\n+const Course = {\n+\n+\tUPDATE_HEART_BEAT: function( state, status ) {\n+\t\tstate.heartbeat = !! status;\n+\t},\n+\n+\tUPDATE_AUTO_DRAFT_STATUS: function( state, status ) {\n+\t\tstate.auto_draft = status;\n+\t},\n+\n+\tUPDATE_STATUS: function( state, status ) {\n+\t\tstate.status = status;\n+\t},\n+\n+\tINCREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest++;\n+\t},\n+\n+\tDECREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest--;\n+\t},\n+};\n+\n+export default Course;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse-section.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse-section.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse-section.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fcourse-section.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,178 +1,178 @@\n-const CourseCurriculum = {\r\n-\tSORT_SECTION( state, orders ) {\r\n-\t\tstate.sections = state.sections.map( function( section ) {\r\n-\t\t\tsection.order = orders[ section.id ];\r\n-\r\n-\t\t\treturn section;\r\n-\t\t} );\r\n-\t},\r\n-\tSET_SECTIONS( state, sections ) {\r\n-\t\tstate.sections = sections;\r\n-\t},\r\n-\tADD_NEW_SECTION( state, newSection ) {\r\n-\t\tif ( newSection.open === undefined ) {\r\n-\t\t\tnewSection.open = true;\r\n-\t\t}\r\n-\t\tlet pos;\r\n-\r\n-\t\tif ( newSection.temp_id ) {\r\n-\t\t\tstate.sections.map( function( section, i ) {\r\n-\t\t\t\tif ( newSection.temp_id == section.id ) {\r\n-\t\t\t\t\tpos = i;\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tif ( pos !== undefined ) {\r\n-\t\t\t$Vue.set( state.sections, pos, newSection );\r\n-\t\t} else {\r\n-\t\t\tstate.sections.push( newSection );\r\n-\t\t}\r\n-\t},\r\n-\tADD_EMPTY_SECTION( state, section ) {\r\n-\t\tsection.open = true;\r\n-\t\tstate.sections.push( section );\r\n-\t},\r\n-\tREMOVE_SECTION( state, index ) {\r\n-\t\tstate.sections.splice( index, 1 );\r\n-\t},\r\n-\tREMOVE_SECTION_ITEM( state, payload ) {\r\n-\t\tconst section = state.sections.find( function( section ) {\r\n-\t\t\treturn ( section.id === payload.section_id );\r\n-\t\t} );\r\n-\r\n-\t\tlet items = section.items || [],\r\n-\t\t\titem = payload.item,\r\n-\t\t\tindex = -1;\r\n-\t\titems.forEach( function( it, i ) {\r\n-\t\t\tif ( it.id === item.id ) {\r\n-\t\t\t\tindex = i;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tif ( index !== -1 ) {\r\n-\t\t\tif ( payload.oldId !== undefined ) {\r\n-\t\t\t\titems[ index ].id = payload.oldId;\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( item.temp_id ) {\r\n-\t\t\t\titems[ index ].id = item.temp_id;\r\n-\t\t\t} else {\r\n-\t\t\t\titems.splice( index, 1 );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\tUPDATE_SECTION_ITEMS( state, payload ) {\r\n-\t\tconst section = state.sections.find( function( section ) {\r\n-\t\t\treturn parseInt( section.id ) === parseInt( payload.section_id );\r\n-\t\t} );\r\n-\r\n-\t\tif ( ! section ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tsection.items = payload.items;\r\n-\t},\r\n-\tUPDATE_SECTION_ITEM( state, payload ) {\r\n-\r\n-\t},\r\n-\r\n-\tCLOSE_SECTION( state, section ) {\r\n-\t\tstate.sections.forEach( function( _section, index ) {\r\n-\t\t\tif ( section.id === _section.id ) {\r\n-\t\t\t\tstate.sections[ index ].open = false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tOPEN_SECTION( state, section ) {\r\n-\t\tstate.sections.forEach( function( _section, index ) {\r\n-\t\t\tif ( section.id === _section.id ) {\r\n-\t\t\t\tstate.sections[ index ].open = true;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tOPEN_ALL_SECTIONS( state ) {\r\n-\t\tstate.sections = state.sections.map( function( _section ) {\r\n-\t\t\t_section.open = true;\r\n-\r\n-\t\t\treturn _section;\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tCLOSE_ALL_SECTIONS( state ) {\r\n-\t\tstate.sections = state.sections.map( function( _section ) {\r\n-\t\t\t_section.open = false;\r\n-\r\n-\t\t\treturn _section;\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_REQUEST( state, sectionId ) {\r\n-\t\t$Vue.set( state.statusUpdateSection, sectionId, 'updating' );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_SUCCESS( state, sectionId ) {\r\n-\t\t$Vue.set( state.statusUpdateSection, sectionId, 'successful' );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_FAILURE( state, sectionId ) {\r\n-\t\t$Vue.set( state.statusUpdateSection, sectionId, 'failed' );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_ITEM_REQUEST( state, itemId ) {\r\n-\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'updating' );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_ITEM_SUCCESS( state, itemId ) {\r\n-\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'successful' );\r\n-\t},\r\n-\r\n-\tUPDATE_SECTION_ITEM_FAILURE( state, itemId ) {\r\n-\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'failed' );\r\n-\t},\r\n-\tAPPEND_EMPTY_ITEM_TO_SECTION( state, data ) {\r\n-\t\tconst section = state.sections.find( function( section ) {\r\n-\t\t\treturn parseInt( section.id ) === parseInt( data.section_id );\r\n-\t\t} );\r\n-\r\n-\t\tif ( ! section ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tsection.items.push( { id: data.item.id, title: data.item.title, type: 'empty-item' } );\r\n-\t},\r\n-\tUPDATE_ITEM_SECTION_BY_ID( state, data ) {\r\n-\t\tconst section = state.sections.find( function( section ) {\r\n-\t\t\treturn parseInt( section.id ) === parseInt( data.section_id );\r\n-\t\t} );\r\n-\r\n-\t\tif ( ! section ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tfor ( let i = 0; i \u003C section.items.length; i++ ) {\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! section.items[ i ] ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst item_id = section.items[ i ].id;\r\n-\r\n-\t\t\t\tif ( item_id ) {\r\n-\t\t\t\t\tif ( data.items[ item_id ] ) {\r\n-\t\t\t\t\t\t$Vue.set( section.items, i, data.items[ item_id ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( ex ) {\r\n-\t\t\t\tconsole.log( ex );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Fsection.items.push({id: data.item.id, title: data.item.title, type: 'empty-item'});\r\n-\t},\r\n-};\r\n-\r\n-export default CourseCurriculum;\r\n+const CourseCurriculum = {\n+\tSORT_SECTION( state, orders ) {\n+\t\tstate.sections = state.sections.map( function( section ) {\n+\t\t\tsection.order = orders[ section.id ];\n+\n+\t\t\treturn section;\n+\t\t} );\n+\t},\n+\tSET_SECTIONS( state, sections ) {\n+\t\tstate.sections = sections;\n+\t},\n+\tADD_NEW_SECTION( state, newSection ) {\n+\t\tif ( newSection.open === undefined ) {\n+\t\t\tnewSection.open = true;\n+\t\t}\n+\t\tlet pos;\n+\n+\t\tif ( newSection.temp_id ) {\n+\t\t\tstate.sections.map( function( section, i ) {\n+\t\t\t\tif ( newSection.temp_id == section.id ) {\n+\t\t\t\t\tpos = i;\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\n+\t\tif ( pos !== undefined ) {\n+\t\t\t$Vue.set( state.sections, pos, newSection );\n+\t\t} else {\n+\t\t\tstate.sections.push( newSection );\n+\t\t}\n+\t},\n+\tADD_EMPTY_SECTION( state, section ) {\n+\t\tsection.open = true;\n+\t\tstate.sections.push( section );\n+\t},\n+\tREMOVE_SECTION( state, index ) {\n+\t\tstate.sections.splice( index, 1 );\n+\t},\n+\tREMOVE_SECTION_ITEM( state, payload ) {\n+\t\tconst section = state.sections.find( function( section ) {\n+\t\t\treturn ( section.id === payload.section_id );\n+\t\t} );\n+\n+\t\tlet items = section.items || [],\n+\t\t\titem = payload.item,\n+\t\t\tindex = -1;\n+\t\titems.forEach( function( it, i ) {\n+\t\t\tif ( it.id === item.id ) {\n+\t\t\t\tindex = i;\n+\t\t\t}\n+\t\t} );\n+\n+\t\tif ( index !== -1 ) {\n+\t\t\tif ( payload.oldId !== undefined ) {\n+\t\t\t\titems[ index ].id = payload.oldId;\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( item.temp_id ) {\n+\t\t\t\titems[ index ].id = item.temp_id;\n+\t\t\t} else {\n+\t\t\t\titems.splice( index, 1 );\n+\t\t\t}\n+\t\t}\n+\t},\n+\tUPDATE_SECTION_ITEMS( state, payload ) {\n+\t\tconst section = state.sections.find( function( section ) {\n+\t\t\treturn parseInt( section.id ) === parseInt( payload.section_id );\n+\t\t} );\n+\n+\t\tif ( ! section ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tsection.items = payload.items;\n+\t},\n+\tUPDATE_SECTION_ITEM( state, payload ) {\n+\n+\t},\n+\n+\tCLOSE_SECTION( state, section ) {\n+\t\tstate.sections.forEach( function( _section, index ) {\n+\t\t\tif ( section.id === _section.id ) {\n+\t\t\t\tstate.sections[ index ].open = false;\n+\t\t\t}\n+\t\t} );\n+\t},\n+\n+\tOPEN_SECTION( state, section ) {\n+\t\tstate.sections.forEach( function( _section, index ) {\n+\t\t\tif ( section.id === _section.id ) {\n+\t\t\t\tstate.sections[ index ].open = true;\n+\t\t\t}\n+\t\t} );\n+\t},\n+\n+\tOPEN_ALL_SECTIONS( state ) {\n+\t\tstate.sections = state.sections.map( function( _section ) {\n+\t\t\t_section.open = true;\n+\n+\t\t\treturn _section;\n+\t\t} );\n+\t},\n+\n+\tCLOSE_ALL_SECTIONS( state ) {\n+\t\tstate.sections = state.sections.map( function( _section ) {\n+\t\t\t_section.open = false;\n+\n+\t\t\treturn _section;\n+\t\t} );\n+\t},\n+\n+\tUPDATE_SECTION_REQUEST( state, sectionId ) {\n+\t\t$Vue.set( state.statusUpdateSection, sectionId, 'updating' );\n+\t},\n+\n+\tUPDATE_SECTION_SUCCESS( state, sectionId ) {\n+\t\t$Vue.set( state.statusUpdateSection, sectionId, 'successful' );\n+\t},\n+\n+\tUPDATE_SECTION_FAILURE( state, sectionId ) {\n+\t\t$Vue.set( state.statusUpdateSection, sectionId, 'failed' );\n+\t},\n+\n+\tUPDATE_SECTION_ITEM_REQUEST( state, itemId ) {\n+\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'updating' );\n+\t},\n+\n+\tUPDATE_SECTION_ITEM_SUCCESS( state, itemId ) {\n+\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'successful' );\n+\t},\n+\n+\tUPDATE_SECTION_ITEM_FAILURE( state, itemId ) {\n+\t\t$Vue.set( state.statusUpdateSectionItem, itemId, 'failed' );\n+\t},\n+\tAPPEND_EMPTY_ITEM_TO_SECTION( state, data ) {\n+\t\tconst section = state.sections.find( function( section ) {\n+\t\t\treturn parseInt( section.id ) === parseInt( data.section_id );\n+\t\t} );\n+\n+\t\tif ( ! section ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tsection.items.push( { id: data.item.id, title: data.item.title, type: 'empty-item' } );\n+\t},\n+\tUPDATE_ITEM_SECTION_BY_ID( state, data ) {\n+\t\tconst section = state.sections.find( function( section ) {\n+\t\t\treturn parseInt( section.id ) === parseInt( data.section_id );\n+\t\t} );\n+\n+\t\tif ( ! section ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tfor ( let i = 0; i \u003C section.items.length; i++ ) {\n+\t\t\ttry {\n+\t\t\t\tif ( ! section.items[ i ] ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tconst item_id = section.items[ i ].id;\n+\n+\t\t\t\tif ( item_id ) {\n+\t\t\t\t\tif ( data.items[ item_id ] ) {\n+\t\t\t\t\t\t$Vue.set( section.items, i, data.items[ item_id ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} catch ( ex ) {\n+\t\t\t\tconsole.log( ex );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002Fsection.items.push({id: data.item.id, title: data.item.title, type: 'empty-item'});\n+\t},\n+};\n+\n+export default CourseCurriculum;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-course-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-course-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-course-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-course-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-const Mutations = {\r\n-\tTOGGLE: function( state ) {\r\n-\t\tstate.open = ! state.open;\r\n-\t},\r\n-\tSET_SECTION: function( state, sectionId ) {\r\n-\t\tstate.sectionId = sectionId;\r\n-\t},\r\n-\tSET_LIST_ITEMS: function( state, items ) {\r\n-\t\tstate.items = items;\r\n-\t},\r\n-\tADD_ITEM: function( state, item ) {\r\n-\t\tstate.addedItems.push( item );\r\n-\t},\r\n-\tREMOVE_ADDED_ITEM: function( state, item ) {\r\n-\t\tstate.addedItems.forEach( function( _item, index ) {\r\n-\t\t\tif ( _item.id === item.id ) {\r\n-\t\t\t\tstate.addedItems.splice( index, 1 );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tRESET: function( state ) {\r\n-\t\tstate.addedItems = [];\r\n-\t\tstate.items = [];\r\n-\t},\r\n-\tUPDATE_PAGINATION: function( state, pagination ) {\r\n-\t\tstate.pagination = pagination;\r\n-\t},\r\n-\tSEARCH_ITEMS_REQUEST: function( state ) {\r\n-\t\tstate.status = 'loading';\r\n-\t},\r\n-\tSEARCH_ITEMS_SUCCESS: function( state ) {\r\n-\t\tstate.status = 'successful';\r\n-\t},\r\n-\tSEARCH_ITEMS_FAILURE: function( state ) {\r\n-\t\tstate.status = 'failed';\r\n-\t},\r\n-};\r\n-\r\n-export default Mutations;\r\n+const Mutations = {\n+\tTOGGLE: function( state ) {\n+\t\tstate.open = ! state.open;\n+\t},\n+\tSET_SECTION: function( state, sectionId ) {\n+\t\tstate.sectionId = sectionId;\n+\t},\n+\tSET_LIST_ITEMS: function( state, items ) {\n+\t\tstate.items = items;\n+\t},\n+\tADD_ITEM: function( state, item ) {\n+\t\tstate.addedItems.push( item );\n+\t},\n+\tREMOVE_ADDED_ITEM: function( state, item ) {\n+\t\tstate.addedItems.forEach( function( _item, index ) {\n+\t\t\tif ( _item.id === item.id ) {\n+\t\t\t\tstate.addedItems.splice( index, 1 );\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tRESET: function( state ) {\n+\t\tstate.addedItems = [];\n+\t\tstate.items = [];\n+\t},\n+\tUPDATE_PAGINATION: function( state, pagination ) {\n+\t\tstate.pagination = pagination;\n+\t},\n+\tSEARCH_ITEMS_REQUEST: function( state ) {\n+\t\tstate.status = 'loading';\n+\t},\n+\tSEARCH_ITEMS_SUCCESS: function( state ) {\n+\t\tstate.status = 'successful';\n+\t},\n+\tSEARCH_ITEMS_FAILURE: function( state ) {\n+\t\tstate.status = 'failed';\n+\t},\n+};\n+\n+export default Mutations;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-quiz-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-quiz-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-quiz-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fmodal-quiz-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-const ModalQuizItems = {\r\n-\tTOGGLE: function( state ) {\r\n-\t\tstate.open = ! state.open;\r\n-\t},\r\n-\tSET_QUIZ: function( state, quizId ) {\r\n-\t\tstate.quizId = quizId;\r\n-\t},\r\n-\tSET_LIST_ITEMS: function( state, items ) {\r\n-\t\tstate.items = items;\r\n-\t},\r\n-\tADD_ITEM: function( state, item ) {\r\n-\t\tstate.addedItems.push( item );\r\n-\t},\r\n-\tREMOVE_ADDED_ITEM: function( state, item ) {\r\n-\t\tstate.addedItems.forEach( function( _item, index ) {\r\n-\t\t\tif ( _item.id === item.id ) {\r\n-\t\t\t\tstate.addedItems.splice( index, 1 );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tRESET: function( state ) {\r\n-\t\tstate.addedItems = [];\r\n-\t\tstate.items = [];\r\n-\t},\r\n-\tUPDATE_PAGINATION: function( state, pagination ) {\r\n-\t\tstate.pagination = pagination;\r\n-\t},\r\n-\tSEARCH_ITEM_REQUEST: function( state ) {\r\n-\t\tstate.status = 'loading';\r\n-\t},\r\n-\tSEARCH_ITEM_SUCCESS: function( state ) {\r\n-\t\tstate.status = 'successful';\r\n-\t},\r\n-\tSEARCH_ITEM_FAIL: function( state ) {\r\n-\t\tstate.status = 'fail';\r\n-\t},\r\n-};\r\n-\r\n-export default ModalQuizItems;\r\n+const ModalQuizItems = {\n+\tTOGGLE: function( state ) {\n+\t\tstate.open = ! state.open;\n+\t},\n+\tSET_QUIZ: function( state, quizId ) {\n+\t\tstate.quizId = quizId;\n+\t},\n+\tSET_LIST_ITEMS: function( state, items ) {\n+\t\tstate.items = items;\n+\t},\n+\tADD_ITEM: function( state, item ) {\n+\t\tstate.addedItems.push( item );\n+\t},\n+\tREMOVE_ADDED_ITEM: function( state, item ) {\n+\t\tstate.addedItems.forEach( function( _item, index ) {\n+\t\t\tif ( _item.id === item.id ) {\n+\t\t\t\tstate.addedItems.splice( index, 1 );\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tRESET: function( state ) {\n+\t\tstate.addedItems = [];\n+\t\tstate.items = [];\n+\t},\n+\tUPDATE_PAGINATION: function( state, pagination ) {\n+\t\tstate.pagination = pagination;\n+\t},\n+\tSEARCH_ITEM_REQUEST: function( state ) {\n+\t\tstate.status = 'loading';\n+\t},\n+\tSEARCH_ITEM_SUCCESS: function( state ) {\n+\t\tstate.status = 'successful';\n+\t},\n+\tSEARCH_ITEM_FAIL: function( state ) {\n+\t\tstate.status = 'fail';\n+\t},\n+};\n+\n+export default ModalQuizItems;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-const Question = {\r\n-\r\n-\tUPDATE_STATUS: function( state, status ) {\r\n-\t\tstate.status = status;\r\n-\t},\r\n-\r\n-\tUPDATE_AUTO_DRAFT_STATUS: function( state, status ) {\r\n-\t\tstate.auto_draft = status;\r\n-\t},\r\n-\r\n-\tCHANGE_QUESTION_TYPE: function( state, question ) {\r\n-\t\tstate.answers = question.answers;\r\n-\t\tstate.type = question.type;\r\n-\t},\r\n-\r\n-\tSET_ANSWERS: function( state, answers ) {\r\n-\t\tstate.answers = answers;\r\n-\t},\r\n-\r\n-\tDELETE_ANSWER: function( state, id ) {\r\n-\t\tfor ( var i = 0, n = state.answers.length; i \u003C n; i++ ) {\r\n-\t\t\tif ( state.answers[i].question_answer_id == id ) {\r\n-\t\t\t\tstate.answers[i].question_answer_id = LP.uniqueId();\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\r\n-\tADD_NEW_ANSWER: function( state, answer ) {\r\n-\t\tstate.answers.push( answer );\r\n-\t},\r\n-\r\n-\tUPDATE_ANSWERS: function( state, answers ) {\r\n-\t\tstate.answers = answers;\r\n-\t},\r\n-\r\n-\tINCREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest++;\r\n-\t},\r\n-\r\n-\tDECREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest--;\r\n-\t},\r\n-};\r\n-\r\n-export default Question;\r\n+const Question = {\n+\n+\tUPDATE_STATUS: function( state, status ) {\n+\t\tstate.status = status;\n+\t},\n+\n+\tUPDATE_AUTO_DRAFT_STATUS: function( state, status ) {\n+\t\tstate.auto_draft = status;\n+\t},\n+\n+\tCHANGE_QUESTION_TYPE: function( state, question ) {\n+\t\tstate.answers = question.answers;\n+\t\tstate.type = question.type;\n+\t},\n+\n+\tSET_ANSWERS: function( state, answers ) {\n+\t\tstate.answers = answers;\n+\t},\n+\n+\tDELETE_ANSWER: function( state, id ) {\n+\t\tfor ( var i = 0, n = state.answers.length; i \u003C n; i++ ) {\n+\t\t\tif ( state.answers[i].question_answer_id == id ) {\n+\t\t\t\tstate.answers[i].question_answer_id = LP.uniqueId();\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t},\n+\n+\tADD_NEW_ANSWER: function( state, answer ) {\n+\t\tstate.answers.push( answer );\n+\t},\n+\n+\tUPDATE_ANSWERS: function( state, answers ) {\n+\t\tstate.answers = answers;\n+\t},\n+\n+\tINCREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest++;\n+\t},\n+\n+\tDECREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest--;\n+\t},\n+};\n+\n+export default Question;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquestion-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,170 +1,170 @@\n-var $ = window.jQuery;\r\n-\r\n-const QuestionList = {\r\n-\tSORT_QUESTIONS: function( state, orders ) {\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tquestion.order = orders[question.id];\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tSORT_QUESTION_ANSWERS: function( state, orders ) {\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tquestion.answers.answer_order = orders[question.answers.question_answer_id];\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tADD_QUESTION_ANSWER: function( state, payload ) {\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tif ( question.id === payload.question_id ) {\r\n-\t\t\t\tvar found = false;\r\n-\t\t\t\tif ( payload.answer.temp_id ) {\r\n-\t\t\t\t\tfor ( var i = 0, n = question.answers.length; i \u003C n; i++ ) {\r\n-\t\t\t\t\t\tif ( question.answers[i].question_answer_id == payload.answer.temp_id ) {\r\n-\t\t\t\t\t\t\tfound = true;\r\n-\t\t\t\t\t\t\t$Vue.set( question.answers, i, payload.answer );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t! found && question.answers.push( payload.answer );\r\n-\t\t\t\treturn question;\r\n-\t\t\t}\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tCHANGE_QUESTION_CORRECT_ANSWERS: function( state, data ) {\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tif ( parseInt( question.id ) === data.id ) {\r\n-\t\t\t\tquestion.answers = data.answers;\r\n-\t\t\t}\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tSET_QUESTIONS: function( state, questions ) {\r\n-\t\tstate.questions = questions;\r\n-\t},\r\n-\tADD_NEW_QUESTION: function( state, question ) {\r\n-\t\tvar found = false;\r\n-\t\tif ( question.temp_id ) {\r\n-\t\t\tfor ( var i = 0, n = state.questions.length; i \u003C n; i++ ) {\r\n-\t\t\t\tif ( state.questions[i].id === question.temp_id ) {\r\n-\t\t\t\t\t$Vue.set( state.questions, i, question );\r\n-\t\t\t\t\tfound = true;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif ( ! found ) {\r\n-\t\t\tvar _last_child = $( '.lp-list-questions .main > div:last-child' );\r\n-\t\t\tif ( _last_child.length ) {\r\n-\t\t\t\tvar _offset = _last_child.offset().top;\r\n-\t\t\t\t$( 'html,body' ).animate( { scrollTop: _offset } );\r\n-\t\t\t}\r\n-\r\n-\t\t\tstate.questions.push( question );\r\n-\t\t}\r\n-\t},\r\n-\tCHANGE_QUESTION_TYPE: function( state, data ) {\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tif ( parseInt( question.id ) === data.id ) {\r\n-\t\t\t\tquestion.answers = data.answers;\r\n-\t\t\t\tquestion.type = data.type;\r\n-\t\t\t\tquestion.open = true;\r\n-\t\t\t}\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tREMOVE_QUESTION: function( state, item ) {\r\n-\t\tvar questions = state.questions,\r\n-\t\t\tindex = questions.indexOf( item );\r\n-\r\n-\t\tif ( item.temp_id ) {\r\n-\t\t\tstate.questions[index].id = item.temp_id;\r\n-\t\t} else {\r\n-\t\t\tstate.questions.splice( index, 1 );\r\n-\t\t}\r\n-\t},\r\n-\tDELETE_QUESTION_ANSWER: function( state, payload ) {\r\n-\t\tvar question_id = payload.question_id,\r\n-\t\t\tanswer_id = payload.answer_id;\r\n-\r\n-\t\tstate.questions = state.questions.map( function( question ) {\r\n-\t\t\tif ( question.id === question_id ) {\r\n-\t\t\t\tvar answers = question.answers;\r\n-\t\t\t\tanswers.forEach( function( answer ) {\r\n-\t\t\t\t\tif ( answer.question_answer_id === answer_id ) {\r\n-\t\t\t\t\t\tvar index = answers.indexOf( answer );\r\n-\t\t\t\t\t\tanswers.splice( index, 1 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t\treturn question;\r\n-\t\t} );\r\n-\t},\r\n-\tREMOVE_QUESTIONS: function() {\r\n-\t\t\u002F\u002F code\r\n-\t},\r\n-\tCLOSE_QUESTION: function( state, question ) {\r\n-\t\tstate.questions.forEach( function( _question, index ) {\r\n-\t\t\tif ( question.id === _question.id ) {\r\n-\t\t\t\tstate.questions[index].open = false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tOPEN_QUESTION: function( state, question ) {\r\n-\t\tstate.questions.forEach( function( _question, index ) {\r\n-\t\t\tif ( ( question.id ) === _question.id ) {\r\n-\t\t\t\tstate.questions[index].open = true;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tCLOSE_LIST_QUESTIONS: function( state ) {\r\n-\t\tstate.questions = state.questions.map( function( _question ) {\r\n-\t\t\t_question.open = false;\r\n-\r\n-\t\t\treturn _question;\r\n-\t\t} );\r\n-\t},\r\n-\tOPEN_LIST_QUESTIONS: function( state ) {\r\n-\t\tstate.questions = state.questions.map( function( _question ) {\r\n-\t\t\t_question.open = true;\r\n-\r\n-\t\t\treturn _question;\r\n-\t\t} );\r\n-\t},\r\n-\tUPDATE_QUESTION_REQUEST: function( state, questionId ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionItem, questionId, 'updating' );\r\n-\t},\r\n-\tUPDATE_QUESTION_SUCCESS: function( state, questionID ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionItem, questionID, 'successful' );\r\n-\t},\r\n-\tUPDATE_QUESTION_FAILURE: function( state, questionID ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionItem, questionID, 'failed' );\r\n-\t},\r\n-\r\n-\tUPDATE_QUESTION_ANSWER_REQUEST: function( state, question_id ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'updating' );\r\n-\t},\r\n-\tUPDATE_QUESTION_ANSWER_SUCCESS: function( state, question_id ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'successful' );\r\n-\t},\r\n-\tUPDATE_QUESTION_ANSWER_FAIL: function( state, question_id ) {\r\n-\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'failed' );\r\n-\t},\r\n-\tDELETE_ANSWER: function( state, data ) {\r\n-\t\tstate.questions.map( function( question, index ) {\r\n-\t\t\tif ( question.id == data.question_id ) {\r\n-\t\t\t\tfor ( var i = 0, n = question.answers.length; i \u003C n; i++ ) {\r\n-\t\t\t\t\tif ( question.answers[i].question_answer_id == data.answer_id ) {\r\n-\t\t\t\t\t\tquestion.answers[i].question_answer_id = data.temp_id;\r\n-\t\t\t\t\t\t\u002F\u002Fstate.questions[index].answers.splice(i, 1);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-};\r\n-\r\n-export default QuestionList;\r\n+var $ = window.jQuery;\n+\n+const QuestionList = {\n+\tSORT_QUESTIONS: function( state, orders ) {\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tquestion.order = orders[question.id];\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tSORT_QUESTION_ANSWERS: function( state, orders ) {\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tquestion.answers.answer_order = orders[question.answers.question_answer_id];\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tADD_QUESTION_ANSWER: function( state, payload ) {\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tif ( question.id === payload.question_id ) {\n+\t\t\t\tvar found = false;\n+\t\t\t\tif ( payload.answer.temp_id ) {\n+\t\t\t\t\tfor ( var i = 0, n = question.answers.length; i \u003C n; i++ ) {\n+\t\t\t\t\t\tif ( question.answers[i].question_answer_id == payload.answer.temp_id ) {\n+\t\t\t\t\t\t\tfound = true;\n+\t\t\t\t\t\t\t$Vue.set( question.answers, i, payload.answer );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t! found && question.answers.push( payload.answer );\n+\t\t\t\treturn question;\n+\t\t\t}\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tCHANGE_QUESTION_CORRECT_ANSWERS: function( state, data ) {\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tif ( parseInt( question.id ) === data.id ) {\n+\t\t\t\tquestion.answers = data.answers;\n+\t\t\t}\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tSET_QUESTIONS: function( state, questions ) {\n+\t\tstate.questions = questions;\n+\t},\n+\tADD_NEW_QUESTION: function( state, question ) {\n+\t\tvar found = false;\n+\t\tif ( question.temp_id ) {\n+\t\t\tfor ( var i = 0, n = state.questions.length; i \u003C n; i++ ) {\n+\t\t\t\tif ( state.questions[i].id === question.temp_id ) {\n+\t\t\t\t\t$Vue.set( state.questions, i, question );\n+\t\t\t\t\tfound = true;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tif ( ! found ) {\n+\t\t\tvar _last_child = $( '.lp-list-questions .main > div:last-child' );\n+\t\t\tif ( _last_child.length ) {\n+\t\t\t\tvar _offset = _last_child.offset().top;\n+\t\t\t\t$( 'html,body' ).animate( { scrollTop: _offset } );\n+\t\t\t}\n+\n+\t\t\tstate.questions.push( question );\n+\t\t}\n+\t},\n+\tCHANGE_QUESTION_TYPE: function( state, data ) {\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tif ( parseInt( question.id ) === data.id ) {\n+\t\t\t\tquestion.answers = data.answers;\n+\t\t\t\tquestion.type = data.type;\n+\t\t\t\tquestion.open = true;\n+\t\t\t}\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tREMOVE_QUESTION: function( state, item ) {\n+\t\tvar questions = state.questions,\n+\t\t\tindex = questions.indexOf( item );\n+\n+\t\tif ( item.temp_id ) {\n+\t\t\tstate.questions[index].id = item.temp_id;\n+\t\t} else {\n+\t\t\tstate.questions.splice( index, 1 );\n+\t\t}\n+\t},\n+\tDELETE_QUESTION_ANSWER: function( state, payload ) {\n+\t\tvar question_id = payload.question_id,\n+\t\t\tanswer_id = payload.answer_id;\n+\n+\t\tstate.questions = state.questions.map( function( question ) {\n+\t\t\tif ( question.id === question_id ) {\n+\t\t\t\tvar answers = question.answers;\n+\t\t\t\tanswers.forEach( function( answer ) {\n+\t\t\t\t\tif ( answer.question_answer_id === answer_id ) {\n+\t\t\t\t\t\tvar index = answers.indexOf( answer );\n+\t\t\t\t\t\tanswers.splice( index, 1 );\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t\treturn question;\n+\t\t} );\n+\t},\n+\tREMOVE_QUESTIONS: function() {\n+\t\t\u002F\u002F code\n+\t},\n+\tCLOSE_QUESTION: function( state, question ) {\n+\t\tstate.questions.forEach( function( _question, index ) {\n+\t\t\tif ( question.id === _question.id ) {\n+\t\t\t\tstate.questions[index].open = false;\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tOPEN_QUESTION: function( state, question ) {\n+\t\tstate.questions.forEach( function( _question, index ) {\n+\t\t\tif ( ( question.id ) === _question.id ) {\n+\t\t\t\tstate.questions[index].open = true;\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tCLOSE_LIST_QUESTIONS: function( state ) {\n+\t\tstate.questions = state.questions.map( function( _question ) {\n+\t\t\t_question.open = false;\n+\n+\t\t\treturn _question;\n+\t\t} );\n+\t},\n+\tOPEN_LIST_QUESTIONS: function( state ) {\n+\t\tstate.questions = state.questions.map( function( _question ) {\n+\t\t\t_question.open = true;\n+\n+\t\t\treturn _question;\n+\t\t} );\n+\t},\n+\tUPDATE_QUESTION_REQUEST: function( state, questionId ) {\n+\t\t$Vue.set( state.statusUpdateQuestionItem, questionId, 'updating' );\n+\t},\n+\tUPDATE_QUESTION_SUCCESS: function( state, questionID ) {\n+\t\t$Vue.set( state.statusUpdateQuestionItem, questionID, 'successful' );\n+\t},\n+\tUPDATE_QUESTION_FAILURE: function( state, questionID ) {\n+\t\t$Vue.set( state.statusUpdateQuestionItem, questionID, 'failed' );\n+\t},\n+\n+\tUPDATE_QUESTION_ANSWER_REQUEST: function( state, question_id ) {\n+\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'updating' );\n+\t},\n+\tUPDATE_QUESTION_ANSWER_SUCCESS: function( state, question_id ) {\n+\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'successful' );\n+\t},\n+\tUPDATE_QUESTION_ANSWER_FAIL: function( state, question_id ) {\n+\t\t$Vue.set( state.statusUpdateQuestionAnswer, question_id, 'failed' );\n+\t},\n+\tDELETE_ANSWER: function( state, data ) {\n+\t\tstate.questions.map( function( question, index ) {\n+\t\t\tif ( question.id == data.question_id ) {\n+\t\t\t\tfor ( var i = 0, n = question.answers.length; i \u003C n; i++ ) {\n+\t\t\t\t\tif ( question.answers[i].question_answer_id == data.answer_id ) {\n+\t\t\t\t\t\tquestion.answers[i].question_answer_id = data.temp_id;\n+\t\t\t\t\t\t\u002F\u002Fstate.questions[index].answers.splice(i, 1);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t} );\n+\t},\n+};\n+\n+export default QuestionList;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fmutations\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-const Quiz = {\r\n-\r\n-\tUPDATE_HEART_BEAT: function( state, status ) {\r\n-\t\tstate.heartbeat = !! status;\r\n-\t},\r\n-\r\n-\tUPDATE_STATUS: function( state, status ) {\r\n-\t\tstate.status = status;\r\n-\t},\r\n-\r\n-\tUPDATE_NEW_QUESTION_TYPE: function( state, type ) {\r\n-\t\tstate.default_new = type;\r\n-\t},\r\n-\r\n-\tINCREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest++;\r\n-\t},\r\n-\r\n-\tDECREASE_NUMBER_REQUEST: function( state ) {\r\n-\t\tstate.countCurrentRequest--;\r\n-\t},\r\n-};\r\n-\r\n-export default Quiz;\r\n+const Quiz = {\n+\n+\tUPDATE_HEART_BEAT: function( state, status ) {\n+\t\tstate.heartbeat = !! status;\n+\t},\n+\n+\tUPDATE_STATUS: function( state, status ) {\n+\t\tstate.status = status;\n+\t},\n+\n+\tUPDATE_NEW_QUESTION_TYPE: function( state, type ) {\n+\t\tstate.default_new = type;\n+\t},\n+\n+\tINCREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest++;\n+\t},\n+\n+\tDECREASE_NUMBER_REQUEST: function( state ) {\n+\t\tstate.countCurrentRequest--;\n+\t},\n+};\n+\n+export default Quiz;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-import HTTP from '.\u002Fhttp';\r\n-import Store from '.\u002Fstore\u002Fquestion';\r\n-import '.\u002Ffill-in-blanks';\r\n-\r\n-window.$Vue = window.$Vue || Vue;\r\n-window.$Vuex = window.$Vuex || Vuex;\r\n-\r\n-const $ = window.jQuery;\r\n-\r\n-\u002F**\r\n- * Init app.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-$( document ).ready( function() {\r\n-\twindow.LP_Question_Store = new $Vuex.Store( Store( lp_question_editor ) );\r\n-\r\n-\tHTTP( { ns: 'LPQuestionEditorRequest', store: LP_Question_Store } );\r\n-\r\n-\tsetTimeout( () => {\r\n-\t\tif ( $( '#admin-editor-lp_question' ).length ) {\r\n-\t\t\twindow.LP_Question_Editor = new $Vue( {\r\n-\t\t\t\tel: '#admin-editor-lp_question',\r\n-\t\t\t\ttemplate: '\u003Clp-question-editor>\u003C\u002Flp-question-editor>',\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t}, 100 );\r\n-} );\r\n+import HTTP from '.\u002Fhttp';\n+import Store from '.\u002Fstore\u002Fquestion';\n+import '.\u002Ffill-in-blanks';\n+\n+window.$Vue = window.$Vue || Vue;\n+window.$Vuex = window.$Vuex || Vuex;\n+\n+const $ = window.jQuery;\n+\n+\u002F**\n+ * Init app.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+$( document ).ready( function() {\n+\twindow.LP_Question_Store = new $Vuex.Store( Store( lp_question_editor ) );\n+\n+\tHTTP( { ns: 'LPQuestionEditorRequest', store: LP_Question_Store } );\n+\n+\tsetTimeout( () => {\n+\t\tif ( $( '#admin-editor-lp_question' ).length ) {\n+\t\t\twindow.LP_Question_Editor = new $Vue( {\n+\t\t\t\tel: '#admin-editor-lp_question',\n+\t\t\t\ttemplate: '\u003Clp-question-editor>\u003C\u002Flp-question-editor>',\n+\t\t\t} );\n+\t\t}\n+\t}, 100 );\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-import QuizStore from '.\u002Fstore\u002Fquiz';\r\n-import HTTP from '.\u002Fhttp';\r\n-import '.\u002Ffill-in-blanks';\r\n-\r\n-window.$Vue = window.$Vue || Vue;\r\n-window.$Vuex = window.$Vuex || Vuex;\r\n-\r\n-\u002F**\r\n- * Init app.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-window.jQuery( document ).ready( function() {\r\n-\twindow.LP_Quiz_Store = new $Vuex.Store( QuizStore( lp_quiz_editor ) );\r\n-\tHTTP( { ns: 'LPListQuizQuestionsRequest', store: LP_Quiz_Store } );\r\n-\r\n-\tsetTimeout( () => {\r\n-\t\twindow.LP_Quiz_Editor = new $Vue( {\r\n-\t\t\tel: '#admin-editor-lp_quiz',\r\n-\t\t\ttemplate: '\u003Clp-quiz-editor>\u003C\u002Flp-quiz-editor>',\r\n-\t\t} );\r\n-\t}, 100 );\r\n-} );\r\n+import QuizStore from '.\u002Fstore\u002Fquiz';\n+import HTTP from '.\u002Fhttp';\n+import '.\u002Ffill-in-blanks';\n+\n+window.$Vue = window.$Vue || Vue;\n+window.$Vuex = window.$Vuex || Vuex;\n+\n+\u002F**\n+ * Init app.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+window.jQuery( document ).ready( function() {\n+\twindow.LP_Quiz_Store = new $Vuex.Store( QuizStore( lp_quiz_editor ) );\n+\tHTTP( { ns: 'LPListQuizQuestionsRequest', store: LP_Quiz_Store } );\n+\n+\tsetTimeout( () => {\n+\t\twindow.LP_Quiz_Editor = new $Vue( {\n+\t\t\tel: '#admin-editor-lp_quiz',\n+\t\t\ttemplate: '\u003Clp-quiz-editor>\u003C\u002Flp-quiz-editor>',\n+\t\t} );\n+\t}, 100 );\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-import ModalCourseItems from '..\u002Fstore\u002Fmodal-course-items';\r\n-import CourseSection from '..\u002Fstore\u002Fcourse-section';\r\n-import i18n from '..\u002Fstore\u002Fi18n';\r\n-import getters from '..\u002Fgetters\u002Fcourse';\r\n-import mutations from '..\u002Fmutations\u002Fcourse';\r\n-import actions from '..\u002Factions\u002Fcourse';\r\n-\r\n-const $ = window.jQuery;\r\n-\r\n-const Course = function Course( data ) {\r\n-\tvar state = $.extend( {}, data.root );\r\n-\r\n-\tstate.status = 'success';\r\n-\tstate.heartbeat = true;\r\n-\tstate.countCurrentRequest = 0;\r\n-\r\n-\treturn {\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t\tmutations: mutations,\r\n-\t\tactions: actions,\r\n-\t\tmodules: {\r\n-\t\t\tci: ModalCourseItems( data ),\r\n-\t\t\ti18n: i18n( data.i18n ),\r\n-\t\t\tss: CourseSection( data ),\r\n-\t\t},\r\n-\t};\r\n-};\r\n-\r\n-export default Course;\r\n+import ModalCourseItems from '..\u002Fstore\u002Fmodal-course-items';\n+import CourseSection from '..\u002Fstore\u002Fcourse-section';\n+import i18n from '..\u002Fstore\u002Fi18n';\n+import getters from '..\u002Fgetters\u002Fcourse';\n+import mutations from '..\u002Fmutations\u002Fcourse';\n+import actions from '..\u002Factions\u002Fcourse';\n+\n+const $ = window.jQuery;\n+\n+const Course = function Course( data ) {\n+\tvar state = $.extend( {}, data.root );\n+\n+\tstate.status = 'success';\n+\tstate.heartbeat = true;\n+\tstate.countCurrentRequest = 0;\n+\n+\treturn {\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t\tmutations: mutations,\n+\t\tactions: actions,\n+\t\tmodules: {\n+\t\t\tci: ModalCourseItems( data ),\n+\t\t\ti18n: i18n( data.i18n ),\n+\t\t\tss: CourseSection( data ),\n+\t\t},\n+\t};\n+};\n+\n+export default Course;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse-section.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse-section.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse-section.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fcourse-section.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-import Actions from '..\u002Factions\u002Fcourse-section';\r\n-import Mutations from '..\u002Fmutations\u002Fcourse-section';\r\n-import Getters from '..\u002Fgetters\u002Fcourse-section';\r\n-\r\n-const $ = window.jQuery;\r\n-\r\n-export default function( data ) {\r\n-\tvar state = $.extend( {}, data.sections );\r\n-\r\n-\tstate.statusUpdateSection = {};\r\n-\tstate.statusUpdateSectionItem = {};\r\n-\r\n-\tstate.sections = state.sections.map( function( section ) {\r\n-\t\tvar hiddenSections = state.hidden_sections;\r\n-\r\n-\t\tvar find = hiddenSections.find( function( sectionId ) {\r\n-\t\t\treturn parseInt( section.id ) === parseInt( sectionId );\r\n-\t\t} );\r\n-\r\n-\t\tsection.open = ! find;\r\n-\r\n-\t\treturn section;\r\n-\t} );\r\n-\r\n-\treturn {\r\n-\t\tnamespaced: true,\r\n-\t\tstate: state,\r\n-\t\tgetters: Getters,\r\n-\t\tmutations: Mutations,\r\n-\t\tactions: Actions,\r\n-\t};\r\n-}\r\n+import Actions from '..\u002Factions\u002Fcourse-section';\n+import Mutations from '..\u002Fmutations\u002Fcourse-section';\n+import Getters from '..\u002Fgetters\u002Fcourse-section';\n+\n+const $ = window.jQuery;\n+\n+export default function( data ) {\n+\tvar state = $.extend( {}, data.sections );\n+\n+\tstate.statusUpdateSection = {};\n+\tstate.statusUpdateSectionItem = {};\n+\n+\tstate.sections = state.sections.map( function( section ) {\n+\t\tvar hiddenSections = state.hidden_sections;\n+\n+\t\tvar find = hiddenSections.find( function( sectionId ) {\n+\t\t\treturn parseInt( section.id ) === parseInt( sectionId );\n+\t\t} );\n+\n+\t\tsection.open = ! find;\n+\n+\t\treturn section;\n+\t} );\n+\n+\treturn {\n+\t\tnamespaced: true,\n+\t\tstate: state,\n+\t\tgetters: Getters,\n+\t\tmutations: Mutations,\n+\t\tactions: Actions,\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fi18n.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fi18n.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fi18n.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fi18n.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const i18n = function i18n( i18n ) {\r\n-\tconst state = $.extend( {}, i18n );\r\n-\tconst getters = {\r\n-\t\tall: function( state ) {\r\n-\t\t\treturn state;\r\n-\t\t},\r\n-\t};\r\n-\r\n-\treturn {\r\n-\t\tnamespaced: true,\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t};\r\n-};\r\n-\r\n-export default i18n;\r\n+const $ = window.jQuery || jQuery;\n+\n+const i18n = function i18n( i18n ) {\n+\tconst state = $.extend( {}, i18n );\n+\tconst getters = {\n+\t\tall: function( state ) {\n+\t\t\treturn state;\n+\t\t},\n+\t};\n+\n+\treturn {\n+\t\tnamespaced: true,\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t};\n+};\n+\n+export default i18n;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-course-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-course-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-course-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-course-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-import getters from '..\u002Fgetters\u002Fmodal-course-items';\r\n-import mutations from '..\u002Fmutations\u002Fmodal-course-items';\r\n-import actions from '..\u002Factions\u002Fmodal-course-items';\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-export default function( data ) {\r\n-\tvar state = $.extend( {}, data.chooseItems );\r\n-\tstate.sectionId = false;\r\n-\tstate.pagination = '';\r\n-\tstate.status = '';\r\n-\r\n-\treturn {\r\n-\t\tnamespaced: true,\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t\tmutations: mutations,\r\n-\t\tactions: actions,\r\n-\t};\r\n-}\r\n+import getters from '..\u002Fgetters\u002Fmodal-course-items';\n+import mutations from '..\u002Fmutations\u002Fmodal-course-items';\n+import actions from '..\u002Factions\u002Fmodal-course-items';\n+\n+const $ = window.jQuery || jQuery;\n+\n+export default function( data ) {\n+\tvar state = $.extend( {}, data.chooseItems );\n+\tstate.sectionId = false;\n+\tstate.pagination = '';\n+\tstate.status = '';\n+\n+\treturn {\n+\t\tnamespaced: true,\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t\tmutations: mutations,\n+\t\tactions: actions,\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-quiz-items.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-quiz-items.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-quiz-items.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fmodal-quiz-items.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-import getters from '..\u002Fgetters\u002Fmodal-quiz-items';\r\n-import mutations from '..\u002Fmutations\u002Fmodal-quiz-items';\r\n-import actions from '..\u002Factions\u002Fmodal-quiz-items';\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const Quiz = function( data ) {\r\n-\tvar state = $.extend( {\r\n-\t\tquizId: false,\r\n-\t\tpagination: '',\r\n-\t\tstatus: '',\r\n-\t}, data.chooseItems );\r\n-\r\n-\treturn {\r\n-\t\tnamespaced: true,\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t\tmutations: mutations,\r\n-\t\tactions: actions,\r\n-\t};\r\n-};\r\n-\r\n-export default Quiz;\r\n+import getters from '..\u002Fgetters\u002Fmodal-quiz-items';\n+import mutations from '..\u002Fmutations\u002Fmodal-quiz-items';\n+import actions from '..\u002Factions\u002Fmodal-quiz-items';\n+\n+const $ = window.jQuery || jQuery;\n+\n+const Quiz = function( data ) {\n+\tvar state = $.extend( {\n+\t\tquizId: false,\n+\t\tpagination: '',\n+\t\tstatus: '',\n+\t}, data.chooseItems );\n+\n+\treturn {\n+\t\tnamespaced: true,\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t\tmutations: mutations,\n+\t\tactions: actions,\n+\t};\n+};\n+\n+export default Quiz;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-import getters from '..\u002Fgetters\u002Fquestion';\r\n-import mutations from '..\u002Fmutations\u002Fquestion';\r\n-import actions from '..\u002Factions\u002Fquestion';\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const Question = function Question( data ) {\r\n-\tvar state = $.extend( {\r\n-\t\tstatus: 'successful',\r\n-\t\tcountCurrentRequest: 0,\r\n-\t\ti18n: $.extend( {}, data.i18n ),\r\n-\t}, data.root );\r\n-\r\n-\treturn {\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t\tmutations: mutations,\r\n-\t\tactions: actions,\r\n-\t};\r\n-};\r\n-\r\n-export default Question;\r\n+import getters from '..\u002Fgetters\u002Fquestion';\n+import mutations from '..\u002Fmutations\u002Fquestion';\n+import actions from '..\u002Factions\u002Fquestion';\n+\n+const $ = window.jQuery || jQuery;\n+\n+const Question = function Question( data ) {\n+\tvar state = $.extend( {\n+\t\tstatus: 'successful',\n+\t\tcountCurrentRequest: 0,\n+\t\ti18n: $.extend( {}, data.i18n ),\n+\t}, data.root );\n+\n+\treturn {\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t\tmutations: mutations,\n+\t\tactions: actions,\n+\t};\n+};\n+\n+export default Question;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquestion-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-import getters from '..\u002Fgetters\u002Fquestion-list';\r\n-import mutations from '..\u002Fmutations\u002Fquestion-list';\r\n-import actions from '..\u002Factions\u002Fquestion-list';\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const QuestionList = function QuestionList( data ) {\r\n-\tconst listQuestions = data.listQuestions;\r\n-\tconst state = $.extend( {\r\n-\t\tstatusUpdateQuestions: {},\r\n-\t\tstatusUpdateQuestionItem: {},\r\n-\t\tstatusUpdateQuestionAnswer: {},\r\n-\t\tquestions: listQuestions.questions.map( function( question ) {\r\n-\t\t\tconst hiddenQuestions = listQuestions.hidden_questions;\r\n-\t\t\tconst ArrQuestionIds = Object.keys( hiddenQuestions );\r\n-\t\t\tconst find = ArrQuestionIds.find( function( questionId ) {\r\n-\t\t\t\treturn parseInt( question.id ) === parseInt( questionId );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tquestion.open = ! find;\r\n-\r\n-\t\t\treturn question;\r\n-\t\t} ),\r\n-\t}, listQuestions );\r\n-\r\n-\treturn {\r\n-\t\tnamespaced: true,\r\n-\t\tstate,\r\n-\t\tgetters,\r\n-\t\tmutations,\r\n-\t\tactions,\r\n-\t};\r\n-};\r\n-\r\n-export default QuestionList;\r\n+import getters from '..\u002Fgetters\u002Fquestion-list';\n+import mutations from '..\u002Fmutations\u002Fquestion-list';\n+import actions from '..\u002Factions\u002Fquestion-list';\n+\n+const $ = window.jQuery || jQuery;\n+\n+const QuestionList = function QuestionList( data ) {\n+\tconst listQuestions = data.listQuestions;\n+\tconst state = $.extend( {\n+\t\tstatusUpdateQuestions: {},\n+\t\tstatusUpdateQuestionItem: {},\n+\t\tstatusUpdateQuestionAnswer: {},\n+\t\tquestions: listQuestions.questions.map( function( question ) {\n+\t\t\tconst hiddenQuestions = listQuestions.hidden_questions;\n+\t\t\tconst ArrQuestionIds = Object.keys( hiddenQuestions );\n+\t\t\tconst find = ArrQuestionIds.find( function( questionId ) {\n+\t\t\t\treturn parseInt( question.id ) === parseInt( questionId );\n+\t\t\t} );\n+\n+\t\t\tquestion.open = ! find;\n+\n+\t\t\treturn question;\n+\t\t} ),\n+\t}, listQuestions );\n+\n+\treturn {\n+\t\tnamespaced: true,\n+\t\tstate,\n+\t\tgetters,\n+\t\tmutations,\n+\t\tactions,\n+\t};\n+};\n+\n+export default QuestionList;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Feditor\u002Fstore\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-import getters from '..\u002Fgetters\u002Fquiz';\r\n-import mutations from '..\u002Fmutations\u002Fquiz';\r\n-import actions from '..\u002Factions\u002Fquiz';\r\n-\r\n-import ModalQuizItems from '..\u002Fstore\u002Fmodal-quiz-items';\r\n-import i18n from '..\u002Fstore\u002Fi18n';\r\n-import QuestionList from '..\u002Fstore\u002Fquestion-list';\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const Quiz = function Quiz( data ) {\r\n-\tconst state = $.extend( {\r\n-\t\tstatus: 'success',\r\n-\t\theartbeat: true,\r\n-\t\tcountCurrentRequest: 0,\r\n-\t}, data.root );\r\n-\r\n-\treturn {\r\n-\t\tstate: state,\r\n-\t\tgetters: getters,\r\n-\t\tmutations: mutations,\r\n-\t\tactions: actions,\r\n-\t\tmodules: {\r\n-\t\t\tcqi: ModalQuizItems( data ),\r\n-\t\t\ti18n: i18n( data.i18n ),\r\n-\t\t\tlqs: QuestionList( data ),\r\n-\t\t},\r\n-\t};\r\n-};\r\n-\r\n-export default Quiz;\r\n+import getters from '..\u002Fgetters\u002Fquiz';\n+import mutations from '..\u002Fmutations\u002Fquiz';\n+import actions from '..\u002Factions\u002Fquiz';\n+\n+import ModalQuizItems from '..\u002Fstore\u002Fmodal-quiz-items';\n+import i18n from '..\u002Fstore\u002Fi18n';\n+import QuestionList from '..\u002Fstore\u002Fquestion-list';\n+\n+const $ = window.jQuery || jQuery;\n+\n+const Quiz = function Quiz( data ) {\n+\tconst state = $.extend( {\n+\t\tstatus: 'success',\n+\t\theartbeat: true,\n+\t\tcountCurrentRequest: 0,\n+\t}, data.root );\n+\n+\treturn {\n+\t\tstate: state,\n+\t\tgetters: getters,\n+\t\tmutations: mutations,\n+\t\tactions: actions,\n+\t\tmodules: {\n+\t\t\tcqi: ModalQuizItems( data ),\n+\t\t\ti18n: i18n( data.i18n ),\n+\t\t\tlqs: QuestionList( data ),\n+\t\t},\n+\t};\n+};\n+\n+export default Quiz;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fgutenberg\u002Feditor-check.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fgutenberg\u002Feditor-check.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fgutenberg\u002Feditor-check.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fgutenberg\u002Feditor-check.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-document.addEventListener( 'DOMContentLoaded', function () {\r\n-\tconst validTemplates = [\r\n-\t\t'single-lp_course',\r\n-\t\t'archive-lp_course',\r\n-\t\t'taxonomy-course_tag',\r\n-\t\t'taxonomy-course_category',\r\n-\t];\r\n-\r\n-\tconst getParamP = () => {\r\n-\t\tconst urlParams = new URLSearchParams( window.location.search );\r\n-\t\tconst paramP = urlParams.get( 'p' )?.replace( \u002F^\\\u002F|\\\u002F$\u002Fg, '' );\r\n-\t\treturn paramP === 'template' ? paramP : null;\r\n-\t};\r\n-\r\n-\tconst debounce = ( func, wait ) => {\r\n-\t\tlet timeout;\r\n-\t\treturn ( ...args ) => {\r\n-\t\t\tclearTimeout( timeout );\r\n-\t\t\ttimeout = setTimeout( () => func( ...args ), wait );\r\n-\t\t};\r\n-\t};\r\n-\r\n-\tlet previousTemplate = null;\r\n-\tconst checkAndReload = () => {\r\n-\t\tconst currentTemplate =\r\n-\t\t\twp?.data?.select( 'core\u002Feditor' )?.getEditedPostAttribute( 'slug' ) ||\r\n-\t\t\twp?.data?.select( 'core\u002Feditor' )?.getCurrentPostId() ||\r\n-\t\t\tgetParamP();\r\n-\r\n-\t\tif ( ! currentTemplate || currentTemplate === previousTemplate ) return;\r\n-\r\n-\t\tif (\r\n-\t\t\tcurrentTemplate !== 'home' &&\r\n-\t\t\tpreviousTemplate &&\r\n-\t\t\tpreviousTemplate !== currentTemplate &&\r\n-\t\t\t( validTemplates.includes( currentTemplate ) || validTemplates.includes( previousTemplate ) )\r\n-\t\t) {\r\n-\t\t\twindow.location.reload();\r\n-\t\t}\r\n-\r\n-\t\tpreviousTemplate = currentTemplate;\r\n-\t};\r\n-\r\n-\tconst debouncedCheckAndReload = debounce( checkAndReload, 200 );\r\n-\r\n-\twp?.data?.subscribe( () => {\r\n-\t\tdebouncedCheckAndReload();\r\n-\t} );\r\n-} );\r\n+document.addEventListener( 'DOMContentLoaded', function () {\n+\tconst validTemplates = [\n+\t\t'single-lp_course',\n+\t\t'archive-lp_course',\n+\t\t'taxonomy-course_tag',\n+\t\t'taxonomy-course_category',\n+\t];\n+\n+\tconst getParamP = () => {\n+\t\tconst urlParams = new URLSearchParams( window.location.search );\n+\t\tconst paramP = urlParams.get( 'p' )?.replace( \u002F^\\\u002F|\\\u002F$\u002Fg, '' );\n+\t\treturn paramP === 'template' ? paramP : null;\n+\t};\n+\n+\tconst debounce = ( func, wait ) => {\n+\t\tlet timeout;\n+\t\treturn ( ...args ) => {\n+\t\t\tclearTimeout( timeout );\n+\t\t\ttimeout = setTimeout( () => func( ...args ), wait );\n+\t\t};\n+\t};\n+\n+\tlet previousTemplate = null;\n+\tconst checkAndReload = () => {\n+\t\tconst currentTemplate =\n+\t\t\twp?.data?.select( 'core\u002Feditor' )?.getEditedPostAttribute( 'slug' ) ||\n+\t\t\twp?.data?.select( 'core\u002Feditor' )?.getCurrentPostId() ||\n+\t\t\tgetParamP();\n+\n+\t\tif ( ! currentTemplate || currentTemplate === previousTemplate ) return;\n+\n+\t\tif (\n+\t\t\tcurrentTemplate !== 'home' &&\n+\t\t\tpreviousTemplate &&\n+\t\t\tpreviousTemplate !== currentTemplate &&\n+\t\t\t( validTemplates.includes( currentTemplate ) || validTemplates.includes( previousTemplate ) )\n+\t\t) {\n+\t\t\twindow.location.reload();\n+\t\t}\n+\n+\t\tpreviousTemplate = currentTemplate;\n+\t};\n+\n+\tconst debouncedCheckAndReload = debounce( checkAndReload, 200 );\n+\n+\twp?.data?.subscribe( () => {\n+\t\tdebouncedCheckAndReload();\n+\t} );\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Faddons\u002Fsearch-lp-addons-themes.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Faddons\u002Fsearch-lp-addons-themes.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Faddons\u002Fsearch-lp-addons-themes.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Faddons\u002Fsearch-lp-addons-themes.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-( function( $ ) {\r\n-\tlet timer = null,\r\n-\t\t$wraps = null,\r\n-\t\t$cloneWraps = null;\r\n-\r\n-\tconst onSearch = function( keyword ) {\r\n-\t\tif ( ! $cloneWraps ) {\r\n-\t\t\t$cloneWraps = $wraps.clone();\r\n-\t\t}\r\n-\t\tconst keywords = keyword.toLowerCase().split( \u002F\\s+\u002F ).filter( function( a, b ) {\r\n-\t\t\treturn a.length >= 3;\r\n-\t\t} );\r\n-\t\tconst foundItems = function( $w1, $w2 ) {\r\n-\t\t\treturn $w1.find( '.plugin-card' ).each( function() {\r\n-\t\t\t\tconst $item = $( this ),\r\n-\t\t\t\t\titemText = $item.find( '.item-title' ).text().toLowerCase(),\r\n-\t\t\t\t\titemDesc = $item.find( '.column-description, .theme-description' ).text();\r\n-\t\t\t\tconst found = function() {\r\n-\t\t\t\t\tconst reg = new RegExp( keywords.join( '|' ), 'ig' );\r\n-\t\t\t\t\treturn itemText.match( reg ) || itemDesc.match( reg );\r\n-\t\t\t\t};\r\n-\t\t\t\tif ( keywords.length ) {\r\n-\t\t\t\t\tif ( found() ) {\r\n-\t\t\t\t\t\tconst $clone = $item.clone();\r\n-\t\t\t\t\t\t$w2.append( $clone );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$w2.append( $item.clone() );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t};\r\n-\r\n-\t\t$wraps.each( function( i ) {\r\n-\t\t\tconst $this = $( this ).html( '' ),\r\n-\t\t\t\t$items = foundItems( $cloneWraps.eq( i ), $this ),\r\n-\t\t\t\tcount = $this.children().length;\r\n-\r\n-\t\t\t$this.prev( 'h2' ).find( 'span' ).html( count );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t$( document ).on( 'keyup', '.lp-search-addon', function( e ) {\r\n-\t\ttimer && clearTimeout( timer );\r\n-\t\ttimer = setTimeout( onSearch, 300, e.target.value );\r\n-\t} );\r\n-\r\n-\t$( function() {\r\n-\t\t$wraps = $( '.addons-browse' );\r\n-\t} );\r\n-}( jQuery ) );\r\n-\r\n-const searchThemesAddons = () => {\r\n-\r\n-};\r\n-\r\n-export default searchThemesAddons;\r\n+( function( $ ) {\n+\tlet timer = null,\n+\t\t$wraps = null,\n+\t\t$cloneWraps = null;\n+\n+\tconst onSearch = function( keyword ) {\n+\t\tif ( ! $cloneWraps ) {\n+\t\t\t$cloneWraps = $wraps.clone();\n+\t\t}\n+\t\tconst keywords = keyword.toLowerCase().split( \u002F\\s+\u002F ).filter( function( a, b ) {\n+\t\t\treturn a.length >= 3;\n+\t\t} );\n+\t\tconst foundItems = function( $w1, $w2 ) {\n+\t\t\treturn $w1.find( '.plugin-card' ).each( function() {\n+\t\t\t\tconst $item = $( this ),\n+\t\t\t\t\titemText = $item.find( '.item-title' ).text().toLowerCase(),\n+\t\t\t\t\titemDesc = $item.find( '.column-description, .theme-description' ).text();\n+\t\t\t\tconst found = function() {\n+\t\t\t\t\tconst reg = new RegExp( keywords.join( '|' ), 'ig' );\n+\t\t\t\t\treturn itemText.match( reg ) || itemDesc.match( reg );\n+\t\t\t\t};\n+\t\t\t\tif ( keywords.length ) {\n+\t\t\t\t\tif ( found() ) {\n+\t\t\t\t\t\tconst $clone = $item.clone();\n+\t\t\t\t\t\t$w2.append( $clone );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t$w2.append( $item.clone() );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t};\n+\n+\t\t$wraps.each( function( i ) {\n+\t\t\tconst $this = $( this ).html( '' ),\n+\t\t\t\t$items = foundItems( $cloneWraps.eq( i ), $this ),\n+\t\t\t\tcount = $this.children().length;\n+\n+\t\t\t$this.prev( 'h2' ).find( 'span' ).html( count );\n+\t\t} );\n+\t};\n+\n+\t$( document ).on( 'keyup', '.lp-search-addon', function( e ) {\n+\t\ttimer && clearTimeout( timer );\n+\t\ttimer = setTimeout( onSearch, 300, e.target.value );\n+\t} );\n+\n+\t$( function() {\n+\t\t$wraps = $( '.addons-browse' );\n+\t} );\n+}( jQuery ) );\n+\n+const searchThemesAddons = () => {\n+\n+};\n+\n+export default searchThemesAddons;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsetup.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsetup.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsetup.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsetup.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,146 +1,146 @@\n-( function( $ ) {\r\n-\t'use strict';\r\n-\tlet $main, $setupForm;\r\n-\r\n-\tconst checkForm = function checkForm( $form ) {\r\n-\t\tconst $emails = $form.find( 'input[type=\"email\"]' );\r\n-\t\tlet valid = true;\r\n-\r\n-\t\t$emails.each( function() {\r\n-\t\t\tconst $this = $( this );\r\n-\t\t\t$this.css( 'border-color', '' );\r\n-\r\n-\t\t\tswitch ( $this.attr( 'name' ) ) {\r\n-\t\t\tcase 'settings[paypal][paypal_email]':\r\n-\t\t\tcase 'settings[paypal][paypal_sandbox_email]':\r\n-\t\t\t\tif ( ! $this.closest( 'tr' ).prev().find( 'input[type=\"checkbox\"]' ).is( ':checked' ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! isEmail( this.value ) ) {\r\n-\t\t\t\tvalid = false;\r\n-\t\t\t\t$this.css( 'border-color', '#FF0000' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\treturn valid;\r\n-\t};\r\n-\r\n-\tconst blockContent = function blockContent( block ) {\r\n-\t\t$main.toggleClass( 'loading', block === undefined ? true : block );\r\n-\t};\r\n-\r\n-\tconst getFormData = function getFormData( more ) {\r\n-\t\t$setupForm = $( '#learn-press-setup-form' );\r\n-\t\tconst data = $setupForm.serializeJSON();\r\n-\r\n-\t\treturn $.extend( data, more || {} );\r\n-\t};\r\n-\r\n-\tconst replaceMainContent = function replaceMainContent( newContent ) {\r\n-\t\tconst $newContent = $( newContent );\r\n-\t\t$main.replaceWith( $newContent );\r\n-\t\t$main = $newContent;\r\n-\t};\r\n-\r\n-\t\u002F*const navPages = function navPages( e ) {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tif ( ! checkForm( $setupForm ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst loadUrl = $( this ).attr( 'href' );\r\n-\r\n-\t\t$main.addClass( 'loading' );\r\n-\t\t$.post( {\r\n-\t\t\turl: loadUrl,\r\n-\t\t\tdata: getFormData(),\r\n-\t\t\tsuccess( res ) {\r\n-\t\t\t\tconst $html = $( res );\r\n-\t\t\t\treplaceMainContent( $html.contents().filter( '#main' ) );\r\n-\r\n-\t\t\t\tLP.setUrl( loadUrl );\r\n-\r\n-\t\t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\r\n-\t\t\t\t$( '.learn-press-tip' ).LP( 'QuickTip' );\r\n-\t\t\t\t$main.removeClass( 'loading' );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};*\u002F\r\n-\r\n-\tconst updateCurrency = function updateCurrency() {\r\n-\t\tconst m = $( this ).children( ':selected' ).html().match( \u002F\\((.*)\\)\u002F ),\r\n-\t\t\tsymbol = m ? m[ 1 ] : '';\r\n-\t\t$( '#currency-pos' ).children().each( function() {\r\n-\t\t\tconst $option = $( this );\r\n-\t\t\tlet text = $option.html();\r\n-\r\n-\t\t\tswitch ( $option.val() ) {\r\n-\t\t\tcase 'left':\r\n-\t\t\t\ttext = text.replace( \u002F\\( (.*)69\u002F, '( ' + symbol + '69' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'right':\r\n-\t\t\t\ttext = text.replace( \u002F9([^0-9]*) \\)\u002F, '9' + symbol + ' )' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'left_with_space':\r\n-\t\t\t\ttext = text.replace( \u002F\\( (.*) 6\u002F, '( ' + symbol + ' 6' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'right_with_space':\r\n-\t\t\t\ttext = text.replace( \u002F9 (.*) \\)\u002F, '9 ' + symbol + ' )' );\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t\t$option.html( text );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst updatePrice = function updatePrice() {\r\n-\t\t$.post( {\r\n-\t\t\turl: '',\r\n-\t\t\tdataType: 'html',\r\n-\t\t\tdata: getFormData( {\r\n-\t\t\t\t'lp-ajax': 'get-price-format',\r\n-\t\t\t} ),\r\n-\t\t\tsuccess( res ) {\r\n-\t\t\t\t$( '#preview-price' ).html( res );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst createPages = function createPages( e ) {\r\n-\t\te.preventDefault();\r\n-\t\tblockContent();\r\n-\r\n-\t\t$.post( {\r\n-\t\t\turl: $( this ).attr( 'href' ),\r\n-\t\t\tdataType: 'html',\r\n-\t\t\tdata: getFormData( {\r\n-\t\t\t\t'lp-ajax': 'setup-create-pages',\r\n-\t\t\t} ),\r\n-\t\t\tsuccess( res ) {\r\n-\t\t\t\treplaceMainContent( $( res ).contents().filter( '#main' ) );\r\n-\t\t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\r\n-\t\t\t\tblockContent( false );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tfunction isEmail( email ) {\r\n-\t\tconst re = \u002F^(([^\u003C>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^\u003C>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\u002F;\r\n-\t\treturn re.test( email );\r\n-\t}\r\n-\r\n-\t$( function() {\r\n-\t\t$main = $( '#main' );\r\n-\t\t$setupForm = $( '#learn-press-setup-form' );\r\n-\t\t$( '.learn-press-select2' ).select2();\r\n-\r\n-\t\t$( document ).\r\n-\t\t\t\u002F\u002F on( 'click', '.buttons .button', navPages ).\r\n-\t\t\ton( 'change', '#currency', updateCurrency ).\r\n-\t\t\ton( 'change', 'input, select', updatePrice ).\r\n-\t\t\ton( 'click', '#create-pages', createPages );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\t'use strict';\n+\tlet $main, $setupForm;\n+\n+\tconst checkForm = function checkForm( $form ) {\n+\t\tconst $emails = $form.find( 'input[type=\"email\"]' );\n+\t\tlet valid = true;\n+\n+\t\t$emails.each( function() {\n+\t\t\tconst $this = $( this );\n+\t\t\t$this.css( 'border-color', '' );\n+\n+\t\t\tswitch ( $this.attr( 'name' ) ) {\n+\t\t\tcase 'settings[paypal][paypal_email]':\n+\t\t\tcase 'settings[paypal][paypal_sandbox_email]':\n+\t\t\t\tif ( ! $this.closest( 'tr' ).prev().find( 'input[type=\"checkbox\"]' ).is( ':checked' ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ( ! isEmail( this.value ) ) {\n+\t\t\t\tvalid = false;\n+\t\t\t\t$this.css( 'border-color', '#FF0000' );\n+\t\t\t}\n+\t\t} );\n+\n+\t\treturn valid;\n+\t};\n+\n+\tconst blockContent = function blockContent( block ) {\n+\t\t$main.toggleClass( 'loading', block === undefined ? true : block );\n+\t};\n+\n+\tconst getFormData = function getFormData( more ) {\n+\t\t$setupForm = $( '#learn-press-setup-form' );\n+\t\tconst data = $setupForm.serializeJSON();\n+\n+\t\treturn $.extend( data, more || {} );\n+\t};\n+\n+\tconst replaceMainContent = function replaceMainContent( newContent ) {\n+\t\tconst $newContent = $( newContent );\n+\t\t$main.replaceWith( $newContent );\n+\t\t$main = $newContent;\n+\t};\n+\n+\t\u002F*const navPages = function navPages( e ) {\n+\t\te.preventDefault();\n+\n+\t\tif ( ! checkForm( $setupForm ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst loadUrl = $( this ).attr( 'href' );\n+\n+\t\t$main.addClass( 'loading' );\n+\t\t$.post( {\n+\t\t\turl: loadUrl,\n+\t\t\tdata: getFormData(),\n+\t\t\tsuccess( res ) {\n+\t\t\t\tconst $html = $( res );\n+\t\t\t\treplaceMainContent( $html.contents().filter( '#main' ) );\n+\n+\t\t\t\tLP.setUrl( loadUrl );\n+\n+\t\t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\n+\t\t\t\t$( '.learn-press-tip' ).LP( 'QuickTip' );\n+\t\t\t\t$main.removeClass( 'loading' );\n+\t\t\t},\n+\t\t} );\n+\t};*\u002F\n+\n+\tconst updateCurrency = function updateCurrency() {\n+\t\tconst m = $( this ).children( ':selected' ).html().match( \u002F\\((.*)\\)\u002F ),\n+\t\t\tsymbol = m ? m[ 1 ] : '';\n+\t\t$( '#currency-pos' ).children().each( function() {\n+\t\t\tconst $option = $( this );\n+\t\t\tlet text = $option.html();\n+\n+\t\t\tswitch ( $option.val() ) {\n+\t\t\tcase 'left':\n+\t\t\t\ttext = text.replace( \u002F\\( (.*)69\u002F, '( ' + symbol + '69' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'right':\n+\t\t\t\ttext = text.replace( \u002F9([^0-9]*) \\)\u002F, '9' + symbol + ' )' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'left_with_space':\n+\t\t\t\ttext = text.replace( \u002F\\( (.*) 6\u002F, '( ' + symbol + ' 6' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'right_with_space':\n+\t\t\t\ttext = text.replace( \u002F9 (.*) \\)\u002F, '9 ' + symbol + ' )' );\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t$option.html( text );\n+\t\t} );\n+\t};\n+\n+\tconst updatePrice = function updatePrice() {\n+\t\t$.post( {\n+\t\t\turl: '',\n+\t\t\tdataType: 'html',\n+\t\t\tdata: getFormData( {\n+\t\t\t\t'lp-ajax': 'get-price-format',\n+\t\t\t} ),\n+\t\t\tsuccess( res ) {\n+\t\t\t\t$( '#preview-price' ).html( res );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst createPages = function createPages( e ) {\n+\t\te.preventDefault();\n+\t\tblockContent();\n+\n+\t\t$.post( {\n+\t\t\turl: $( this ).attr( 'href' ),\n+\t\t\tdataType: 'html',\n+\t\t\tdata: getFormData( {\n+\t\t\t\t'lp-ajax': 'setup-create-pages',\n+\t\t\t} ),\n+\t\t\tsuccess( res ) {\n+\t\t\t\treplaceMainContent( $( res ).contents().filter( '#main' ) );\n+\t\t\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\n+\t\t\t\tblockContent( false );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tfunction isEmail( email ) {\n+\t\tconst re = \u002F^(([^\u003C>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^\u003C>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\u002F;\n+\t\treturn re.test( email );\n+\t}\n+\n+\t$( function() {\n+\t\t$main = $( '#main' );\n+\t\t$setupForm = $( '#learn-press-setup-form' );\n+\t\t$( '.learn-press-select2' ).select2();\n+\n+\t\t$( document ).\n+\t\t\t\u002F\u002F on( 'click', '.buttons .button', navPages ).\n+\t\t\ton( 'change', '#currency', updateCurrency ).\n+\t\t\ton( 'change', 'input, select', updatePrice ).\n+\t\t\ton( 'click', '#create-pages', createPages );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsync-data.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsync-data.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsync-data.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fsync-data.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,262 +1,262 @@\n-( function( $ ) {\r\n-\tconst Sync_Base = {\r\n-\t\tid: 'sync-base',\r\n-\t\tsyncing: false,\r\n-\t\titems: false,\r\n-\t\tcompleted: false,\r\n-\t\tcallback: null,\r\n-\t\tmethodGetItems: '',\r\n-\t\titemsKey: '',\r\n-\t\tchunkSize: 50,\r\n-\t\tsync( callback ) {\r\n-\t\t\tif ( this.syncing ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.callback = callback;\r\n-\r\n-\t\t\tif ( this.items === false ) {\r\n-\t\t\t\tthis.get_items();\r\n-\t\t\t} else if ( ! this.dispatch() ) {\r\n-\t\t\t\tthis.completed = true;\r\n-\t\t\t\tthis.callToCallback();\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.syncing = true;\r\n-\t\t},\r\n-\t\tinit() {\r\n-\t\t\tthis.syncing = false;\r\n-\t\t\tthis.items = false;\r\n-\t\t\tthis.completed = false;\r\n-\t\t},\r\n-\t\tis_completed() {\r\n-\t\t\treturn this.completed;\r\n-\t\t},\r\n-\t\tdispatch() {\r\n-\t\t\tconst that = this,\r\n-\t\t\t\titems = this.items ? this.items.splice( 0, this.chunkSize ) : false;\r\n-\t\t\tif ( ! items || items.length === 0 ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t\t$.ajax( {\r\n-\t\t\t\turl: '',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\t'lp-ajax': this.id,\r\n-\t\t\t\t\tsync: items,\r\n-\t\t\t\t},\r\n-\t\t\t\tmethod: 'post',\r\n-\t\t\t\tsuccess( response ) {\r\n-\t\t\t\t\tresponse = LP.parseJSON( response );\r\n-\t\t\t\t\tthat.syncing = false;\r\n-\t\t\t\t\tif ( response.result !== 'success' ) {\r\n-\t\t\t\t\t\tthat.completed = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthat.callToCallback();\r\n-\t\t\t\t\tif ( that.is_completed() ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tthat.sync( that.callback );\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t},\r\n-\t\tcallToCallback() {\r\n-\t\t\tthis.callback && this.callback.call( this );\r\n-\t\t},\r\n-\t\tget_items() {\r\n-\t\t\tconst that = this;\r\n-\t\t\t$.ajax( {\r\n-\t\t\t\turl: '',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\t'lp-ajax': this.id,\r\n-\t\t\t\t\tsync: this.methodGetItems,\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess( response ) {\r\n-\t\t\t\t\tthat.syncing = false;\r\n-\t\t\t\t\tresponse = LP.parseJSON( response );\r\n-\t\t\t\t\tif ( response[ that.itemsKey ] ) {\r\n-\t\t\t\t\t\tthat.items = response[ that.itemsKey ];\r\n-\t\t\t\t\t\tthat.sync( that.callback );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthat.completed = true;\r\n-\t\t\t\t\t\tthat.items = [];\r\n-\t\t\t\t\t\tthat.callToCallback();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t},\r\n-\t};\r\n-\r\n-\tconst Sync_Course_Orders = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-course-orders',\r\n-\t\tmethodGetItems: 'get-courses',\r\n-\t\titemsKey: 'courses',\r\n-\t} );\r\n-\r\n-\tconst Sync_User_Courses = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-user-courses',\r\n-\t\tmethodGetItems: 'get-users',\r\n-\t\titemsKey: 'users',\r\n-\t\tchunkSize: 500,\r\n-\t} );\r\n-\r\n-\tconst Sync_User_Orders = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-user-orders',\r\n-\t\tmethodGetItems: 'get-users',\r\n-\t\titemsKey: 'users',\r\n-\t\tchunkSize: 500,\r\n-\t} );\r\n-\r\n-\tconst Sync_Course_Final_Quiz = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-course-final-quiz',\r\n-\t\tmethodGetItems: 'get-courses',\r\n-\t\titemsKey: 'courses',\r\n-\t\tchunkSize: 500,\r\n-\t} );\r\n-\r\n-\tconst Sync_Remove_Older_Data = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-remove-older-data',\r\n-\t\tmethodGetItems: 'remove-older-data',\r\n-\t\titemsKey: '_nothing_here',\r\n-\t\tchunkSize: 500,\r\n-\t} );\r\n-\r\n-\tconst Sync_Calculate_Course_Results = $.extend( {}, Sync_Base, {\r\n-\t\tid: 'sync-calculate-course-results',\r\n-\t\tmethodGetItems: 'get-users',\r\n-\t\titemsKey: 'users',\r\n-\t\tchunkSize: 1,\r\n-\t} );\r\n-\r\n-\twindow.LP_Sync_Data = {\r\n-\t\tsyncs: [],\r\n-\t\tsyncing: 0,\r\n-\t\toptions: {},\r\n-\t\tstart( options ) {\r\n-\t\t\tthis.syncs = [];\r\n-\t\t\tthis.options = $.extend( {\r\n-\t\t\t\tonInit() {\r\n-\t\t\t\t},\r\n-\t\t\t\tonStart() {\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\tonCompleted() {\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\tonCompletedAll() {\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t}, options || {} );\r\n-\r\n-\t\t\tif ( ! this.get_syncs() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tthis.reset();\r\n-\t\t\tthis.options.onInit.call( this );\r\n-\t\t\tvar that = this,\r\n-\t\t\t\tsyncing = 0,\r\n-\t\t\t\ttotalSyncs = this.syncs.length,\r\n-\t\t\t\tsyncCallback = function( $sync ) {\r\n-\t\t\t\t\tif ( $sync.is_completed() ) {\r\n-\t\t\t\t\t\tsyncing++;\r\n-\t\t\t\t\t\tthat.options.onCompleted.call( that, $sync );\r\n-\t\t\t\t\t\tif ( syncing >= totalSyncs ) {\r\n-\t\t\t\t\t\t\tthat.options.onCompletedAll.call( that );\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tthat.sync( syncing, syncCallback );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t};\r\n-\t\t\tthis.sync( syncing, syncCallback );\r\n-\t\t},\r\n-\t\treset() {\r\n-\t\t\tfor ( const sync in this.syncs ) {\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tthis[ this.syncs[ sync ] ].init();\r\n-\t\t\t\t} catch ( e ) {\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tsync( sync, callback ) {\r\n-\t\t\tconst that = this,\r\n-\t\t\t\t$sync = this[ this.syncs[ sync ] ];\r\n-\t\t\tthat.options.onStart.call( that, $sync );\r\n-\t\t\t$sync.sync( function() {\r\n-\t\t\t\tcallback.call( that, $sync );\r\n-\t\t\t} );\r\n-\t\t},\r\n-\t\tget_syncs() {\r\n-\t\t\tconst syncs = $( 'input[name^=\"lp-repair\"]:checked' ).serializeJSON()[ 'lp-repair' ];\r\n-\t\t\tif ( ! syncs ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tfor ( let sync in syncs ) {\r\n-\t\t\t\tif ( syncs[ sync ] !== 'yes' ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tsync = sync.replace( \u002F[-]+\u002Fg, '_' );\r\n-\r\n-\t\t\t\tif ( ! this[ sync ] ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis.syncs.push( sync );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn this.syncs;\r\n-\t\t},\r\n-\t\tget_sync( id ) {\r\n-\t\t\tid = id.replace( \u002F[-]+\u002Fg, '_' );\r\n-\t\t\treturn this[ id ];\r\n-\t\t},\r\n-\t\tsync_course_orders: Sync_Course_Orders,\r\n-\t\tsync_user_orders: Sync_User_Orders,\r\n-\t\tsync_user_courses: Sync_User_Courses,\r\n-\t\tsync_course_final_quiz: Sync_Course_Final_Quiz,\r\n-\t\tsync_remove_older_data: Sync_Remove_Older_Data,\r\n-\t\tsync_calculate_course_results: Sync_Calculate_Course_Results,\r\n-\t};\r\n-\r\n-\t$( document ).ready( function() {\r\n-\t\tfunction initSyncs() {\r\n-\t\t\tconst $chkAll = $( '#learn-press-check-all-syncs' ),\r\n-\t\t\t\t$chks = $( '#learn-press-syncs' ).find( '[name^=\"lp-repair\"]' );\r\n-\r\n-\t\t\t$chkAll.on( 'click', function() {\r\n-\t\t\t\t$chks.prop( 'checked', this.checked );\r\n-\t\t\t} );\r\n-\r\n-\t\t\t$chks.on( 'click', function() {\r\n-\t\t\t\t$chkAll.prop( 'checked', $chks.filter( ':checked' ).length === $chks.length );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tinitSyncs();\r\n-\t} ).on( 'click', '.lp-button-repair', function() {\r\n-\t\tfunction getInput( sync ) {\r\n-\t\t\treturn $( 'ul#learn-press-syncs' ).find( 'input[name*=\"' + sync + '\"]' );\r\n-\t\t}\r\n-\r\n-\t\tLP_Sync_Data.start( {\r\n-\t\t\tonInit() {\r\n-\t\t\t\t$( 'ul#learn-press-syncs' ).children().removeClass( 'syncing synced' );\r\n-\t\t\t\t$( '.lp-button-repair' ).prop( 'disabled', true );\r\n-\t\t\t},\r\n-\t\t\tonStart( $sync ) {\r\n-\t\t\t\tgetInput( $sync.id ).closest( 'li' ).addClass( 'syncing' );\r\n-\t\t\t},\r\n-\t\t\tonCompleted( $sync ) {\r\n-\t\t\t\tgetInput( $sync.id ).closest( 'li' ).removeClass( 'syncing' ).addClass( 'synced' );\r\n-\t\t\t},\r\n-\t\t\tonCompletedAll() {\r\n-\t\t\t\t$( 'ul#learn-press-syncs' ).children().removeClass( 'syncing synced' );\r\n-\t\t\t\t$( '.lp-button-repair' ).prop( 'disabled', false );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\tconst Sync_Base = {\n+\t\tid: 'sync-base',\n+\t\tsyncing: false,\n+\t\titems: false,\n+\t\tcompleted: false,\n+\t\tcallback: null,\n+\t\tmethodGetItems: '',\n+\t\titemsKey: '',\n+\t\tchunkSize: 50,\n+\t\tsync( callback ) {\n+\t\t\tif ( this.syncing ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tthis.callback = callback;\n+\n+\t\t\tif ( this.items === false ) {\n+\t\t\t\tthis.get_items();\n+\t\t\t} else if ( ! this.dispatch() ) {\n+\t\t\t\tthis.completed = true;\n+\t\t\t\tthis.callToCallback();\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tthis.syncing = true;\n+\t\t},\n+\t\tinit() {\n+\t\t\tthis.syncing = false;\n+\t\t\tthis.items = false;\n+\t\t\tthis.completed = false;\n+\t\t},\n+\t\tis_completed() {\n+\t\t\treturn this.completed;\n+\t\t},\n+\t\tdispatch() {\n+\t\t\tconst that = this,\n+\t\t\t\titems = this.items ? this.items.splice( 0, this.chunkSize ) : false;\n+\t\t\tif ( ! items || items.length === 0 ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t\t$.ajax( {\n+\t\t\t\turl: '',\n+\t\t\t\tdata: {\n+\t\t\t\t\t'lp-ajax': this.id,\n+\t\t\t\t\tsync: items,\n+\t\t\t\t},\n+\t\t\t\tmethod: 'post',\n+\t\t\t\tsuccess( response ) {\n+\t\t\t\t\tresponse = LP.parseJSON( response );\n+\t\t\t\t\tthat.syncing = false;\n+\t\t\t\t\tif ( response.result !== 'success' ) {\n+\t\t\t\t\t\tthat.completed = true;\n+\t\t\t\t\t}\n+\t\t\t\t\tthat.callToCallback();\n+\t\t\t\t\tif ( that.is_completed() ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tthat.sync( that.callback );\n+\t\t\t\t},\n+\t\t\t} );\n+\n+\t\t\treturn true;\n+\t\t},\n+\t\tcallToCallback() {\n+\t\t\tthis.callback && this.callback.call( this );\n+\t\t},\n+\t\tget_items() {\n+\t\t\tconst that = this;\n+\t\t\t$.ajax( {\n+\t\t\t\turl: '',\n+\t\t\t\tdata: {\n+\t\t\t\t\t'lp-ajax': this.id,\n+\t\t\t\t\tsync: this.methodGetItems,\n+\t\t\t\t},\n+\t\t\t\tsuccess( response ) {\n+\t\t\t\t\tthat.syncing = false;\n+\t\t\t\t\tresponse = LP.parseJSON( response );\n+\t\t\t\t\tif ( response[ that.itemsKey ] ) {\n+\t\t\t\t\t\tthat.items = response[ that.itemsKey ];\n+\t\t\t\t\t\tthat.sync( that.callback );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthat.completed = true;\n+\t\t\t\t\t\tthat.items = [];\n+\t\t\t\t\t\tthat.callToCallback();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t},\n+\t};\n+\n+\tconst Sync_Course_Orders = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-course-orders',\n+\t\tmethodGetItems: 'get-courses',\n+\t\titemsKey: 'courses',\n+\t} );\n+\n+\tconst Sync_User_Courses = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-user-courses',\n+\t\tmethodGetItems: 'get-users',\n+\t\titemsKey: 'users',\n+\t\tchunkSize: 500,\n+\t} );\n+\n+\tconst Sync_User_Orders = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-user-orders',\n+\t\tmethodGetItems: 'get-users',\n+\t\titemsKey: 'users',\n+\t\tchunkSize: 500,\n+\t} );\n+\n+\tconst Sync_Course_Final_Quiz = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-course-final-quiz',\n+\t\tmethodGetItems: 'get-courses',\n+\t\titemsKey: 'courses',\n+\t\tchunkSize: 500,\n+\t} );\n+\n+\tconst Sync_Remove_Older_Data = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-remove-older-data',\n+\t\tmethodGetItems: 'remove-older-data',\n+\t\titemsKey: '_nothing_here',\n+\t\tchunkSize: 500,\n+\t} );\n+\n+\tconst Sync_Calculate_Course_Results = $.extend( {}, Sync_Base, {\n+\t\tid: 'sync-calculate-course-results',\n+\t\tmethodGetItems: 'get-users',\n+\t\titemsKey: 'users',\n+\t\tchunkSize: 1,\n+\t} );\n+\n+\twindow.LP_Sync_Data = {\n+\t\tsyncs: [],\n+\t\tsyncing: 0,\n+\t\toptions: {},\n+\t\tstart( options ) {\n+\t\t\tthis.syncs = [];\n+\t\t\tthis.options = $.extend( {\n+\t\t\t\tonInit() {\n+\t\t\t\t},\n+\t\t\t\tonStart() {\n+\n+\t\t\t\t},\n+\t\t\t\tonCompleted() {\n+\n+\t\t\t\t},\n+\t\t\t\tonCompletedAll() {\n+\n+\t\t\t\t},\n+\t\t\t}, options || {} );\n+\n+\t\t\tif ( ! this.get_syncs() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tthis.reset();\n+\t\t\tthis.options.onInit.call( this );\n+\t\t\tvar that = this,\n+\t\t\t\tsyncing = 0,\n+\t\t\t\ttotalSyncs = this.syncs.length,\n+\t\t\t\tsyncCallback = function( $sync ) {\n+\t\t\t\t\tif ( $sync.is_completed() ) {\n+\t\t\t\t\t\tsyncing++;\n+\t\t\t\t\t\tthat.options.onCompleted.call( that, $sync );\n+\t\t\t\t\t\tif ( syncing >= totalSyncs ) {\n+\t\t\t\t\t\t\tthat.options.onCompletedAll.call( that );\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tthat.sync( syncing, syncCallback );\n+\t\t\t\t\t}\n+\t\t\t\t};\n+\t\t\tthis.sync( syncing, syncCallback );\n+\t\t},\n+\t\treset() {\n+\t\t\tfor ( const sync in this.syncs ) {\n+\t\t\t\ttry {\n+\t\t\t\t\tthis[ this.syncs[ sync ] ].init();\n+\t\t\t\t} catch ( e ) {\n+\t\t\t\t}\n+\t\t\t}\n+\t\t},\n+\t\tsync( sync, callback ) {\n+\t\t\tconst that = this,\n+\t\t\t\t$sync = this[ this.syncs[ sync ] ];\n+\t\t\tthat.options.onStart.call( that, $sync );\n+\t\t\t$sync.sync( function() {\n+\t\t\t\tcallback.call( that, $sync );\n+\t\t\t} );\n+\t\t},\n+\t\tget_syncs() {\n+\t\t\tconst syncs = $( 'input[name^=\"lp-repair\"]:checked' ).serializeJSON()[ 'lp-repair' ];\n+\t\t\tif ( ! syncs ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tfor ( let sync in syncs ) {\n+\t\t\t\tif ( syncs[ sync ] !== 'yes' ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tsync = sync.replace( \u002F[-]+\u002Fg, '_' );\n+\n+\t\t\t\tif ( ! this[ sync ] ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tthis.syncs.push( sync );\n+\t\t\t}\n+\n+\t\t\treturn this.syncs;\n+\t\t},\n+\t\tget_sync( id ) {\n+\t\t\tid = id.replace( \u002F[-]+\u002Fg, '_' );\n+\t\t\treturn this[ id ];\n+\t\t},\n+\t\tsync_course_orders: Sync_Course_Orders,\n+\t\tsync_user_orders: Sync_User_Orders,\n+\t\tsync_user_courses: Sync_User_Courses,\n+\t\tsync_course_final_quiz: Sync_Course_Final_Quiz,\n+\t\tsync_remove_older_data: Sync_Remove_Older_Data,\n+\t\tsync_calculate_course_results: Sync_Calculate_Course_Results,\n+\t};\n+\n+\t$( document ).ready( function() {\n+\t\tfunction initSyncs() {\n+\t\t\tconst $chkAll = $( '#learn-press-check-all-syncs' ),\n+\t\t\t\t$chks = $( '#learn-press-syncs' ).find( '[name^=\"lp-repair\"]' );\n+\n+\t\t\t$chkAll.on( 'click', function() {\n+\t\t\t\t$chks.prop( 'checked', this.checked );\n+\t\t\t} );\n+\n+\t\t\t$chks.on( 'click', function() {\n+\t\t\t\t$chkAll.prop( 'checked', $chks.filter( ':checked' ).length === $chks.length );\n+\t\t\t} );\n+\t\t}\n+\n+\t\tinitSyncs();\n+\t} ).on( 'click', '.lp-button-repair', function() {\n+\t\tfunction getInput( sync ) {\n+\t\t\treturn $( 'ul#learn-press-syncs' ).find( 'input[name*=\"' + sync + '\"]' );\n+\t\t}\n+\n+\t\tLP_Sync_Data.start( {\n+\t\t\tonInit() {\n+\t\t\t\t$( 'ul#learn-press-syncs' ).children().removeClass( 'syncing synced' );\n+\t\t\t\t$( '.lp-button-repair' ).prop( 'disabled', true );\n+\t\t\t},\n+\t\t\tonStart( $sync ) {\n+\t\t\t\tgetInput( $sync.id ).closest( 'li' ).addClass( 'syncing' );\n+\t\t\t},\n+\t\t\tonCompleted( $sync ) {\n+\t\t\t\tgetInput( $sync.id ).closest( 'li' ).removeClass( 'syncing' ).addClass( 'synced' );\n+\t\t\t},\n+\t\t\tonCompletedAll() {\n+\t\t\t\t$( 'ul#learn-press-syncs' ).children().removeClass( 'syncing synced' );\n+\t\t\t\t$( '.lp-button-repair' ).prop( 'disabled', false );\n+\t\t\t},\n+\t\t} );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fthemes-addons.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fthemes-addons.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fthemes-addons.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fthemes-addons.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-import searchThemesAddons from '.\u002Faddons\u002Fsearch-lp-addons-themes';\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\tsearchThemesAddons();\r\n-} );\r\n+import searchThemesAddons from '.\u002Faddons\u002Fsearch-lp-addons-themes';\n+\n+document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\tsearchThemesAddons();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fclean_database.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fclean_database.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fclean_database.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fclean_database.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,120 +1,120 @@\n-import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\r\n-import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\r\n-\r\n-const cleanDatabases = () => {\r\n-\tconst elCleanDatabases = document.querySelector( '#lp-tool-clean-database' );\r\n-\r\n-\tif ( ! elCleanDatabases ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst elBtnCleanDatabases = elCleanDatabases.querySelector( '.lp-btn-clean-db' );\r\n-\telBtnCleanDatabases.addEventListener( 'click', function( e ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst elToolsSelect = document.querySelector( '#tools-select__id' );\r\n-\t\tconst ElToolSelectLi = elToolsSelect.querySelectorAll( 'ul li input' );\r\n-\t\tconst checkedOne = Array.prototype.slice.call( ElToolSelectLi ).some( ( x ) => x.checked );\r\n-\t\tconst prepareMessage = elCleanDatabases.querySelector( '.tools-prepare__message' );\r\n-\t\tif ( checkedOne == false ) {\r\n-\t\t\tprepareMessage.style.display = 'block';\r\n-\t\t\tprepareMessage.textContent = 'You must choose at least one table to take this action';\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tprepareMessage.style.display = 'none';\r\n-\r\n-\t\tconst elLoading = elCleanDatabases.querySelector( '.wrapper-lp-loading' );\r\n-\t\tif ( ! lpModalOverlay.init() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\tlpModalOverlay.setContentModal( elLoading.innerHTML );\r\n-\t\tlpModalOverlay.setTitleModal( elCleanDatabases.querySelector( 'h2' ).textContent );\r\n-\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'inline-block';\r\n-\t\tlpModalOverlay.elBtnYes[ 0 ].textContent = 'Run';\r\n-\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Close';\r\n-\t\tconst listTables = new Array();\r\n-\t\tconst ElToolSelectLiCheked = elToolsSelect.querySelectorAll( 'ul li input:checked' );\r\n-\t\tElToolSelectLiCheked.forEach( ( e ) => {\r\n-\t\t\tlistTables.push( e.value );\r\n-\t\t} );\r\n-\t\tconst tables = listTables[ 0 ];\r\n-\t\tconst item = elLoading.querySelector( '.progressbar__item' );\r\n-\r\n-\t\tconst itemtotal = item.getAttribute( 'data-total' );\r\n-\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\r\n-\t\tconst notice = modal.querySelector( '.lp-tool__message' );\r\n-\t\tif ( itemtotal \u003C= 0 ) {\r\n-\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\r\n-\t\t\tnotice.textContent = ( 'There is no data that need to be repaired in the chosen tables' );\r\n-\t\t\tnotice.style.display = 'block';\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\u002F\u002F warn user before doing\r\n-\t\t\tconst r = confirm( 'The modified data is impossible to be restored. Please backup your website before doing this.' );\r\n-\t\t\tif ( r == false ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\r\n-\t\t\tconst notice = modal.querySelector( '.lp-tool__message' );\r\n-\t\t\tnotice.textContent = 'This action is in processing. Don\\'t close this page';\r\n-\t\t\tnotice.style.display = 'block';\r\n-\t\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Fclean-tables';\r\n-\t\t\tconst params = { tables, itemtotal };\r\n-\r\n-\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'none';\r\n-\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\r\n-\r\n-\t\t\tconst functions = {\r\n-\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\tconst { status, message, data: { processed, percent } } = res;\r\n-\t\t\t\t\tconst modalItem = modal.querySelector( '.progressbar__item' );\r\n-\t\t\t\t\tconst progressBarRows = modalItem.querySelector( '.progressbar__rows' );\r\n-\t\t\t\t\tconst progressPercent = modalItem.querySelector( '.progressbar__percent' );\r\n-\t\t\t\t\tconst progressValue = modalItem.querySelector( '.progressbar__value' );\r\n-\r\n-\t\t\t\t\tconsole.log( status );\r\n-\t\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\t\thandleAjax( url, params, functions );\r\n-\t\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t\t\t\u002F\u002F update processed quantity\r\n-\t\t\t\t\t\tprogressBarRows.textContent = processed + ' \u002F ' + itemtotal;\r\n-\t\t\t\t\t\t\u002F\u002F update percent\r\n-\t\t\t\t\t\tprogressPercent.textContent = '( ' + percent + '%' + ' )';\r\n-\t\t\t\t\t\t\u002F\u002F update percent width\r\n-\t\t\t\t\t\tprogressValue.style.width = percent + '%';\r\n-\t\t\t\t\t} else if ( 'finished' === status ) {\r\n-\t\t\t\t\t\t\u002F\u002F Re-update indexs\r\n-\t\t\t\t\t\tprogressBarRows.textContent = itemtotal + ' \u002F ' + itemtotal;\r\n-\t\t\t\t\t\tprogressPercent.textContent = '( 100% )';\r\n-\t\t\t\t\t\t\u002F\u002F Update complete nofication\r\n-\t\t\t\t\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\r\n-\t\t\t\t\t\tconst notice = modal.querySelector( '.lp-tool__message' );\r\n-\t\t\t\t\t\tnotice.textContent = 'Process has been completed. Press click the finish button to close this popup';\r\n-\t\t\t\t\t\tnotice.style.color = 'white';\r\n-\t\t\t\t\t\tnotice.style.background = 'green';\r\n-\t\t\t\t\t\tprogressValue.style.width = '100%';\r\n-\t\t\t\t\t\t\u002F\u002F Show finish button\r\n-\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'inline-block';\r\n-\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Finish';\r\n-\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].addEventListener( 'click', function() {\r\n-\t\t\t\t\t\t\tlocation.reload();\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tconsole.log( message );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( err ) => {\r\n-\t\t\t\t\tconsole.log( err );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t\thandleAjax( url, params, functions );\r\n-\t\t};\r\n-\t} );\r\n-};\r\n-export default cleanDatabases;\r\n+import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\n+import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\n+\n+const cleanDatabases = () => {\n+\tconst elCleanDatabases = document.querySelector( '#lp-tool-clean-database' );\n+\n+\tif ( ! elCleanDatabases ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elBtnCleanDatabases = elCleanDatabases.querySelector( '.lp-btn-clean-db' );\n+\telBtnCleanDatabases.addEventListener( 'click', function( e ) {\n+\t\te.preventDefault();\n+\t\tconst elToolsSelect = document.querySelector( '#tools-select__id' );\n+\t\tconst ElToolSelectLi = elToolsSelect.querySelectorAll( 'ul li input' );\n+\t\tconst checkedOne = Array.prototype.slice.call( ElToolSelectLi ).some( ( x ) => x.checked );\n+\t\tconst prepareMessage = elCleanDatabases.querySelector( '.tools-prepare__message' );\n+\t\tif ( checkedOne == false ) {\n+\t\t\tprepareMessage.style.display = 'block';\n+\t\t\tprepareMessage.textContent = 'You must choose at least one table to take this action';\n+\t\t\treturn;\n+\t\t}\n+\t\tprepareMessage.style.display = 'none';\n+\n+\t\tconst elLoading = elCleanDatabases.querySelector( '.wrapper-lp-loading' );\n+\t\tif ( ! lpModalOverlay.init() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpModalOverlay.elLPOverlay.show();\n+\t\tlpModalOverlay.setContentModal( elLoading.innerHTML );\n+\t\tlpModalOverlay.setTitleModal( elCleanDatabases.querySelector( 'h2' ).textContent );\n+\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'inline-block';\n+\t\tlpModalOverlay.elBtnYes[ 0 ].textContent = 'Run';\n+\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Close';\n+\t\tconst listTables = new Array();\n+\t\tconst ElToolSelectLiCheked = elToolsSelect.querySelectorAll( 'ul li input:checked' );\n+\t\tElToolSelectLiCheked.forEach( ( e ) => {\n+\t\t\tlistTables.push( e.value );\n+\t\t} );\n+\t\tconst tables = listTables[ 0 ];\n+\t\tconst item = elLoading.querySelector( '.progressbar__item' );\n+\n+\t\tconst itemtotal = item.getAttribute( 'data-total' );\n+\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\n+\t\tconst notice = modal.querySelector( '.lp-tool__message' );\n+\t\tif ( itemtotal \u003C= 0 ) {\n+\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\n+\t\t\tnotice.textContent = ( 'There is no data that need to be repaired in the chosen tables' );\n+\t\t\tnotice.style.display = 'block';\n+\t\t\treturn;\n+\t\t}\n+\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\u002F\u002F warn user before doing\n+\t\t\tconst r = confirm( 'The modified data is impossible to be restored. Please backup your website before doing this.' );\n+\t\t\tif ( r == false ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\n+\t\t\tconst notice = modal.querySelector( '.lp-tool__message' );\n+\t\t\tnotice.textContent = 'This action is in processing. Don\\'t close this page';\n+\t\t\tnotice.style.display = 'block';\n+\t\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Fclean-tables';\n+\t\t\tconst params = { tables, itemtotal };\n+\n+\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'none';\n+\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\n+\n+\t\t\tconst functions = {\n+\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\tconst { status, message, data: { processed, percent } } = res;\n+\t\t\t\t\tconst modalItem = modal.querySelector( '.progressbar__item' );\n+\t\t\t\t\tconst progressBarRows = modalItem.querySelector( '.progressbar__rows' );\n+\t\t\t\t\tconst progressPercent = modalItem.querySelector( '.progressbar__percent' );\n+\t\t\t\t\tconst progressValue = modalItem.querySelector( '.progressbar__value' );\n+\n+\t\t\t\t\tconsole.log( status );\n+\t\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\t\thandleAjax( url, params, functions );\n+\t\t\t\t\t\t}, 2000 );\n+\t\t\t\t\t\t\u002F\u002F update processed quantity\n+\t\t\t\t\t\tprogressBarRows.textContent = processed + ' \u002F ' + itemtotal;\n+\t\t\t\t\t\t\u002F\u002F update percent\n+\t\t\t\t\t\tprogressPercent.textContent = '( ' + percent + '%' + ' )';\n+\t\t\t\t\t\t\u002F\u002F update percent width\n+\t\t\t\t\t\tprogressValue.style.width = percent + '%';\n+\t\t\t\t\t} else if ( 'finished' === status ) {\n+\t\t\t\t\t\t\u002F\u002F Re-update indexs\n+\t\t\t\t\t\tprogressBarRows.textContent = itemtotal + ' \u002F ' + itemtotal;\n+\t\t\t\t\t\tprogressPercent.textContent = '( 100% )';\n+\t\t\t\t\t\t\u002F\u002F Update complete nofication\n+\t\t\t\t\t\tconst modal = document.querySelector( '.lp-modal-body .main-content' );\n+\t\t\t\t\t\tconst notice = modal.querySelector( '.lp-tool__message' );\n+\t\t\t\t\t\tnotice.textContent = 'Process has been completed. Press click the finish button to close this popup';\n+\t\t\t\t\t\tnotice.style.color = 'white';\n+\t\t\t\t\t\tnotice.style.background = 'green';\n+\t\t\t\t\t\tprogressValue.style.width = '100%';\n+\t\t\t\t\t\t\u002F\u002F Show finish button\n+\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'inline-block';\n+\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Finish';\n+\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].addEventListener( 'click', function() {\n+\t\t\t\t\t\t\tlocation.reload();\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tconsole.log( message );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( err ) => {\n+\t\t\t\t\tconsole.log( err );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\n+\t\t\t\t},\n+\t\t\t};\n+\t\t\thandleAjax( url, params, functions );\n+\t\t};\n+\t} );\n+};\n+export default cleanDatabases;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fcreate_indexs.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fcreate_indexs.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fcreate_indexs.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fcreate_indexs.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,134 +1,134 @@\n-import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\r\n-import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\r\n-\r\n-const createIndexes = () => {\r\n-\tconst elCreateIndexTables = document.querySelector( '#lp-tool-create-indexes-tables' );\r\n-\r\n-\tif ( ! elCreateIndexTables ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst elBtnCreateIndexes = elCreateIndexTables.querySelector( '.lp-btn-create-indexes' );\r\n-\r\n-\telBtnCreateIndexes.addEventListener( 'click', ( e ) => {\r\n-\t\te.preventDefault();\r\n-\t\tconst elLoading = elCreateIndexTables.querySelector( '.wrapper-lp-loading' );\r\n-\r\n-\t\tif ( ! lpModalOverlay.init() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\tlpModalOverlay.setContentModal( elLoading.innerHTML );\r\n-\t\tlpModalOverlay.setTitleModal( elCreateIndexTables.querySelector( 'h2' ).textContent );\r\n-\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'inline-block';\r\n-\t\tlpModalOverlay.elBtnYes[ 0 ].textContent = 'Run';\r\n-\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Close';\r\n-\r\n-\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Flist-tables-indexs';\r\n-\t\tconst params = {};\r\n-\t\tconst functions = {\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst { status, message, data: { tables, table } } = res;\r\n-\t\t\t\tconst elSteps = document.querySelector( '.example-lp-group-step' );\r\n-\r\n-\t\t\t\tlpModalOverlay.setContentModal( elSteps.innerHTML );\r\n-\r\n-\t\t\t\tconst elGroupStep = lpModalOverlay.elLPOverlay[ 0 ].querySelector( '.lp-group-step ' );\r\n-\r\n-\t\t\t\t\u002F\u002F Show progress when upgrading.\r\n-\t\t\t\tconst showProgress = ( stepCurrent, percent ) => {\r\n-\t\t\t\t\tconst elItemStepCurrent = elGroupStep.querySelector( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\r\n-\t\t\t\t\telItemStepCurrent.classList.add( 'running' );\r\n-\r\n-\t\t\t\t\tif ( 100 === percent ) {\r\n-\t\t\t\t\t\telItemStepCurrent.classList.remove( 'running' );\r\n-\t\t\t\t\t\telItemStepCurrent.classList.add( 'completed' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tconst progressBar = elItemStepCurrent.querySelector( '.progress-bar' );\r\n-\t\t\t\t\tprogressBar.style.width = percent;\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\t\u002F\u002F Scroll to step current.\r\n-\t\t\t\tconst scrollToStepCurrent = ( stepCurrent ) => {\r\n-\t\t\t\t\tconst elItemStepCurrent = elGroupStep.querySelector( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\r\n-\r\n-\t\t\t\t\tconst offset = elItemStepCurrent.offsetTop - lpModalOverlay.elMainContent[ 0 ].offsetTop +\r\n-\t\t\t\t\t\tlpModalOverlay.elMainContent[ 0 ].scrollTop;\r\n-\r\n-\t\t\t\t\tlpModalOverlay.elMainContent.stop().animate( {\r\n-\t\t\t\t\t\tscrollTop: offset,\r\n-\t\t\t\t\t}, 600 );\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tfor ( const table in tables ) {\r\n-\t\t\t\t\tconst elItemStep = lpModalOverlay.elLPOverlay[ 0 ].querySelector( '.lp-item-step' ).cloneNode( true );\r\n-\t\t\t\t\tconst input = elItemStep.querySelector( 'input' );\r\n-\t\t\t\t\tconst label = elItemStep.querySelector( 'label' );\r\n-\r\n-\t\t\t\t\tlabel.textContent = `Table: ${ table }`;\r\n-\t\t\t\t\tinput.value = table;\r\n-\r\n-\t\t\t\t\telGroupStep.append( elItemStep );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Fcreate-indexs';\r\n-\t\t\t\t\tconst params = { tables, table };\r\n-\r\n-\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'none';\r\n-\t\t\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\r\n-\r\n-\t\t\t\t\tshowProgress( table, 0.1 );\r\n-\r\n-\t\t\t\t\tconst functions = {\r\n-\t\t\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\t\t\tconst { status, message, data: { table, percent } } = res;\r\n-\r\n-\t\t\t\t\t\t\tshowProgress( params.table, percent );\r\n-\r\n-\t\t\t\t\t\t\tif ( undefined !== table ) {\r\n-\t\t\t\t\t\t\t\tif ( params.table !== table ) {\r\n-\t\t\t\t\t\t\t\t\tshowProgress( table, 0.1 );\r\n-\t\t\t\t\t\t\t\t\tscrollToStepCurrent( table );\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tparams.table = table;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\t\t\t\thandleAjax( url, params, functions );\r\n-\t\t\t\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t\t\t\t} else if ( 'finished' === status ) {\r\n-\t\t\t\t\t\t\t\tconsole.log( 'finished' );\r\n-\t\t\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'inline-block';\r\n-\t\t\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Finish';\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tconsole.log( message );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror: ( err ) => {\r\n-\t\t\t\t\t\t\tconsole.log( err );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t};\r\n-\t\t\t\t\thandleAjax( url, params, functions );\r\n-\t\t\t\t};\r\n-\t\t\t},\r\n-\t\t\terror: ( err ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\thandleAjax( url, params, functions );\r\n-\t} );\r\n-};\r\n-\r\n-export default createIndexes;\r\n+import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\n+import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\n+\n+const createIndexes = () => {\n+\tconst elCreateIndexTables = document.querySelector( '#lp-tool-create-indexes-tables' );\n+\n+\tif ( ! elCreateIndexTables ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elBtnCreateIndexes = elCreateIndexTables.querySelector( '.lp-btn-create-indexes' );\n+\n+\telBtnCreateIndexes.addEventListener( 'click', ( e ) => {\n+\t\te.preventDefault();\n+\t\tconst elLoading = elCreateIndexTables.querySelector( '.wrapper-lp-loading' );\n+\n+\t\tif ( ! lpModalOverlay.init() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpModalOverlay.elLPOverlay.show();\n+\t\tlpModalOverlay.setContentModal( elLoading.innerHTML );\n+\t\tlpModalOverlay.setTitleModal( elCreateIndexTables.querySelector( 'h2' ).textContent );\n+\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'inline-block';\n+\t\tlpModalOverlay.elBtnYes[ 0 ].textContent = 'Run';\n+\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Close';\n+\n+\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Flist-tables-indexs';\n+\t\tconst params = {};\n+\t\tconst functions = {\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst { status, message, data: { tables, table } } = res;\n+\t\t\t\tconst elSteps = document.querySelector( '.example-lp-group-step' );\n+\n+\t\t\t\tlpModalOverlay.setContentModal( elSteps.innerHTML );\n+\n+\t\t\t\tconst elGroupStep = lpModalOverlay.elLPOverlay[ 0 ].querySelector( '.lp-group-step ' );\n+\n+\t\t\t\t\u002F\u002F Show progress when upgrading.\n+\t\t\t\tconst showProgress = ( stepCurrent, percent ) => {\n+\t\t\t\t\tconst elItemStepCurrent = elGroupStep.querySelector( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\n+\t\t\t\t\telItemStepCurrent.classList.add( 'running' );\n+\n+\t\t\t\t\tif ( 100 === percent ) {\n+\t\t\t\t\t\telItemStepCurrent.classList.remove( 'running' );\n+\t\t\t\t\t\telItemStepCurrent.classList.add( 'completed' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tconst progressBar = elItemStepCurrent.querySelector( '.progress-bar' );\n+\t\t\t\t\tprogressBar.style.width = percent;\n+\t\t\t\t};\n+\n+\t\t\t\t\u002F\u002F Scroll to step current.\n+\t\t\t\tconst scrollToStepCurrent = ( stepCurrent ) => {\n+\t\t\t\t\tconst elItemStepCurrent = elGroupStep.querySelector( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\n+\n+\t\t\t\t\tconst offset = elItemStepCurrent.offsetTop - lpModalOverlay.elMainContent[ 0 ].offsetTop +\n+\t\t\t\t\t\tlpModalOverlay.elMainContent[ 0 ].scrollTop;\n+\n+\t\t\t\t\tlpModalOverlay.elMainContent.stop().animate( {\n+\t\t\t\t\t\tscrollTop: offset,\n+\t\t\t\t\t}, 600 );\n+\t\t\t\t};\n+\n+\t\t\t\tfor ( const table in tables ) {\n+\t\t\t\t\tconst elItemStep = lpModalOverlay.elLPOverlay[ 0 ].querySelector( '.lp-item-step' ).cloneNode( true );\n+\t\t\t\t\tconst input = elItemStep.querySelector( 'input' );\n+\t\t\t\t\tconst label = elItemStep.querySelector( 'label' );\n+\n+\t\t\t\t\tlabel.textContent = `Table: ${ table }`;\n+\t\t\t\t\tinput.value = table;\n+\n+\t\t\t\t\telGroupStep.append( elItemStep );\n+\t\t\t\t}\n+\n+\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\tconst url = '\u002Flp\u002Fv1\u002Fadmin\u002Ftools\u002Fcreate-indexs';\n+\t\t\t\t\tconst params = { tables, table };\n+\n+\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'none';\n+\t\t\t\t\tlpModalOverlay.elBtnYes[ 0 ].style.display = 'none';\n+\n+\t\t\t\t\tshowProgress( table, 0.1 );\n+\n+\t\t\t\t\tconst functions = {\n+\t\t\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\t\t\tconst { status, message, data: { table, percent } } = res;\n+\n+\t\t\t\t\t\t\tshowProgress( params.table, percent );\n+\n+\t\t\t\t\t\t\tif ( undefined !== table ) {\n+\t\t\t\t\t\t\t\tif ( params.table !== table ) {\n+\t\t\t\t\t\t\t\t\tshowProgress( table, 0.1 );\n+\t\t\t\t\t\t\t\t\tscrollToStepCurrent( table );\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tparams.table = table;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\t\t\t\thandleAjax( url, params, functions );\n+\t\t\t\t\t\t\t\t}, 2000 );\n+\t\t\t\t\t\t\t} else if ( 'finished' === status ) {\n+\t\t\t\t\t\t\t\tconsole.log( 'finished' );\n+\t\t\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].style.display = 'inline-block';\n+\t\t\t\t\t\t\t\tlpModalOverlay.elBtnNo[ 0 ].textContent = 'Finish';\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tconsole.log( message );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror: ( err ) => {\n+\t\t\t\t\t\t\tconsole.log( err );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tcompleted: () => {\n+\n+\t\t\t\t\t\t},\n+\t\t\t\t\t};\n+\t\t\t\t\thandleAjax( url, params, functions );\n+\t\t\t\t};\n+\t\t\t},\n+\t\t\terror: ( err ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t};\n+\n+\t\thandleAjax( url, params, functions );\n+\t} );\n+};\n+\n+export default createIndexes;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fre-upgrade-db.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fre-upgrade-db.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fre-upgrade-db.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fre-upgrade-db.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\r\n-import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\r\n-\r\n-const reUpgradeDB = () => {\r\n-\tconst elToolReUpgradeDB = document.querySelector( '#lp-tool-re-upgrade-db' );\r\n-\r\n-\tif ( ! elToolReUpgradeDB ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Check valid to show popup re-upgrade\r\n-\tlet url = 'lp\u002Fv1\u002Fdatabase\u002Fcheck-db-valid-re-upgrade';\r\n-\thandleAjax( url, {}, {\r\n-\t\tsuccess( res ) {\r\n-\t\t\tconst { data: { can_re_upgrade } } = res;\r\n-\r\n-\t\t\tif ( ! can_re_upgrade ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\telToolReUpgradeDB.style.display = 'block';\r\n-\r\n-\t\t\tconst elBtnReUpradeDB = elToolReUpgradeDB.querySelector( '.lp-btn-re-upgrade-db' );\r\n-\t\t\tconst elMessage = elToolReUpgradeDB.querySelector( '.learn-press-message' );\r\n-\r\n-\t\t\telBtnReUpradeDB.addEventListener( 'click', () => {\r\n-\t\t\t\t\u002F\u002F eslint-disable-next-line no-alert\r\n-\t\t\t\tif ( confirm( 'Are you want to Re Upgrade!' ) ) {\r\n-\t\t\t\t\turl = 'lp\u002Fv1\u002Fdatabase\u002Fdel-tb-lp-upgrade-db';\r\n-\t\t\t\t\thandleAjax( url, {}, {\r\n-\t\t\t\t\t\tsuccess( res ) {\r\n-\t\t\t\t\t\t\tconst { status, message, data: { url } } = res;\r\n-\r\n-\t\t\t\t\t\t\tif ( 'success' === status && undefined !== url ) {\r\n-\t\t\t\t\t\t\t\twindow.location.href = url;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror( err ) {\r\n-\t\t\t\t\t\t\telMessage.classList.add( 'error' );\r\n-\t\t\t\t\t\t\telMessage.textContent = err.message;\r\n-\t\t\t\t\t\t\telMessage.style.display = 'block';\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t},\r\n-\t\terror( err ) {\r\n-\r\n-\t\t},\r\n-\t} );\r\n-};\r\n-\r\n-export default reUpgradeDB;\r\n+import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\n+import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\n+\n+const reUpgradeDB = () => {\n+\tconst elToolReUpgradeDB = document.querySelector( '#lp-tool-re-upgrade-db' );\n+\n+\tif ( ! elToolReUpgradeDB ) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F\u002F Check valid to show popup re-upgrade\n+\tlet url = 'lp\u002Fv1\u002Fdatabase\u002Fcheck-db-valid-re-upgrade';\n+\thandleAjax( url, {}, {\n+\t\tsuccess( res ) {\n+\t\t\tconst { data: { can_re_upgrade } } = res;\n+\n+\t\t\tif ( ! can_re_upgrade ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\telToolReUpgradeDB.style.display = 'block';\n+\n+\t\t\tconst elBtnReUpradeDB = elToolReUpgradeDB.querySelector( '.lp-btn-re-upgrade-db' );\n+\t\t\tconst elMessage = elToolReUpgradeDB.querySelector( '.learn-press-message' );\n+\n+\t\t\telBtnReUpradeDB.addEventListener( 'click', () => {\n+\t\t\t\t\u002F\u002F eslint-disable-next-line no-alert\n+\t\t\t\tif ( confirm( 'Are you want to Re Upgrade!' ) ) {\n+\t\t\t\t\turl = 'lp\u002Fv1\u002Fdatabase\u002Fdel-tb-lp-upgrade-db';\n+\t\t\t\t\thandleAjax( url, {}, {\n+\t\t\t\t\t\tsuccess( res ) {\n+\t\t\t\t\t\t\tconst { status, message, data: { url } } = res;\n+\n+\t\t\t\t\t\t\tif ( 'success' === status && undefined !== url ) {\n+\t\t\t\t\t\t\t\twindow.location.href = url;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror( err ) {\n+\t\t\t\t\t\t\telMessage.classList.add( 'error' );\n+\t\t\t\t\t\t\telMessage.textContent = err.message;\n+\t\t\t\t\t\t\telMessage.style.display = 'block';\n+\t\t\t\t\t\t},\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t},\n+\t\terror( err ) {\n+\n+\t\t},\n+\t} );\n+};\n+\n+export default reUpgradeDB;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fupgrade.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fupgrade.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fupgrade.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Fdatabase\u002Fupgrade.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,300 +1,300 @@\n-import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\r\n-import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\r\n-\r\n-const $ = jQuery;\r\n-\r\n-const elToolUpgradeDB = $( '#lp-tool-upgrade-db' );\r\n-\r\n-const upgradeDB = () => {\r\n-\tlet isUpgrading = 0;\r\n-\tconst elWrapperTermsUpgrade = elToolUpgradeDB.find( '.wrapper-terms-upgrade' );\r\n-\tconst elStatusUpgrade = elToolUpgradeDB.find( '.wrapper-lp-status-upgrade' );\r\n-\tconst elWrapperUpgradeMessage = elToolUpgradeDB.find( '.wrapper-lp-upgrade-message' );\r\n-\tlet checkValidBeforeUpgrade = null;\r\n-\tconst elMessageUpgrading = $( 'input[name=message-when-upgrading]' ).val();\r\n-\r\n-\tif ( elWrapperTermsUpgrade.length ) { \u002F\u002F Show Terms Upgrade.\r\n-\t\tlpModalOverlay.setContentModal( elWrapperTermsUpgrade.html() );\r\n-\r\n-\t\tconst elTermUpdate = lpModalOverlay.elLPOverlay.find( '.terms-upgrade' );\r\n-\t\tconst elLPAgreeTerm = elTermUpdate.find( 'input[name=lp-agree-term]' );\r\n-\t\tconst elTermMessage = elTermUpdate.find( '.error' );\r\n-\r\n-\t\tcheckValidBeforeUpgrade = function() {\r\n-\t\t\telTermMessage.hide();\r\n-\t\t\telTermMessage.removeClass( 'learn-press-message' );\r\n-\r\n-\t\t\tif ( elLPAgreeTerm.is( ':checked' ) ) {\r\n-\t\t\t\thandleAjax( '\u002Flp\u002Fv1\u002Fdatabase\u002Fagree_terms', { agree_terms: 1 }, {} );\r\n-\r\n-\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\r\n-\t\t\t\tlpModalOverlay.setContentModal( elStatusUpgrade.html() );\r\n-\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\telTermMessage.show();\r\n-\t\t\telTermMessage.addClass( 'learn-press-message' );\r\n-\t\t\tlpModalOverlay.elMainContent.animate( {\r\n-\t\t\t\tscrollTop: elTermMessage.offset().top,\r\n-\t\t\t} );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t};\r\n-\t} else { \u002F\u002F Show Steps Upgrade.\r\n-\t\tlpModalOverlay.setContentModal( elStatusUpgrade.html() );\r\n-\t\tcheckValidBeforeUpgrade = function() {\r\n-\t\t\treturn true;\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tlpModalOverlay.setTitleModal( elToolUpgradeDB.find( 'h2' ).html() );\r\n-\tlpModalOverlay.elBtnYes.text( 'Upgrade' );\r\n-\tlpModalOverlay.elBtnYes.show();\r\n-\tlpModalOverlay.elBtnNo.text( 'Cancel' );\r\n-\tlpModalOverlay.callBackYes = function( e ) {\r\n-\t\tif ( ! checkValidBeforeUpgrade() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst target = e.target;\r\n-\t\t\u002F\u002F Show message note when upgrading.\r\n-\t\tif ( target.innerText === 'Upgrade' ) {\r\n-\t\t\tlpModalOverlay.elFooter.prepend( '\u003Cspan class=\"learn-press-notice\">' + elMessageUpgrading + '\u003C\u002Fspan>' );\r\n-\t\t}\r\n-\r\n-\t\tisUpgrading = 1;\r\n-\r\n-\t\tlpModalOverlay.elBtnYes.hide();\r\n-\t\tlpModalOverlay.elBtnNo.hide();\r\n-\r\n-\t\tconst urlHandle = '\u002Flp\u002Fv1\u002Fdatabase\u002Fupgrade';\r\n-\t\tconst elGroupStep = lpModalOverlay.elLPOverlay.find( '.lp-group-step' );\r\n-\t\tconst elItemSteps = elToolUpgradeDB.find( '.lp-item-step' );\r\n-\r\n-\t\t\u002F\u002F Get params.\r\n-\t\tconst steps = [];\r\n-\r\n-\t\t$.each( elItemSteps, function( i, el ) {\r\n-\t\t\tconst elItemStepsTmp = $( el );\r\n-\r\n-\t\t\tif ( ! elItemStepsTmp.hasClass( 'completed' ) ) {\r\n-\t\t\t\tconst step = elItemStepsTmp.find( 'input' ).val();\r\n-\t\t\t\tsteps.push( step );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tconst params = {\r\n-\t\t\tsteps,\r\n-\t\t\tstep: steps[ 0 ],\r\n-\t\t};\r\n-\r\n-\t\tlet elItemStepCurrent = null;\r\n-\r\n-\t\t\u002F\u002F Show progress when upgrading.\r\n-\t\tconst showProgress = ( stepCurrent, percent ) => {\r\n-\t\t\telItemStepCurrent = elGroupStep.find( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\r\n-\t\t\telItemStepCurrent.addClass( 'running' );\r\n-\r\n-\t\t\tif ( 100 === percent ) {\r\n-\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'completed' );\r\n-\t\t\t}\r\n-\r\n-\t\t\telItemStepCurrent.find( '.progress-bar' ).css( 'width', percent + '%' );\r\n-\t\t\telItemStepCurrent.find( '.percent' ).text( percent + '%' );\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002F Scroll to step current.\r\n-\t\tconst scrollToStepCurrent = ( stepCurrent ) => {\r\n-\t\t\telItemStepCurrent = elGroupStep.find( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\r\n-\r\n-\t\t\tif ( ! elItemStepCurrent.length ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst offset = elItemStepCurrent.offset().top - lpModalOverlay.elMainContent.offset().top +\r\n-\t\t\t\tlpModalOverlay.elMainContent.scrollTop();\r\n-\r\n-\t\t\tlpModalOverlay.elMainContent.stop().animate( {\r\n-\t\t\t\tscrollTop: offset,\r\n-\t\t\t}, 600 );\r\n-\t\t};\r\n-\r\n-\t\tshowProgress( steps[ 0 ], 0.1 );\r\n-\r\n-\t\tconst funcCallBack = {\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tshowProgress( params.step, res.percent );\r\n-\r\n-\t\t\t\tif ( params.step !== res.name ) {\r\n-\t\t\t\t\tshowProgress( res.name, 0.1 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tscrollToStepCurrent( params.step );\r\n-\r\n-\t\t\t\tif ( 'success' === res.status ) {\r\n-\t\t\t\t\tparams.step = res.name;\r\n-\t\t\t\t\tparams.data = res.data;\r\n-\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\thandleAjax( urlHandle, params, funcCallBack );\r\n-\t\t\t\t\t}, 800 );\r\n-\t\t\t\t} else if ( 'finished' === res.status ) {\r\n-\t\t\t\t\tisUpgrading = 0;\r\n-\t\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'completed' );\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html() );\r\n-\t\t\t\t\t}, 1000 );\r\n-\t\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\r\n-\t\t\t\t\tlpModalOverlay.elBtnNo.text( 'Close' );\r\n-\t\t\t\t\tlpModalOverlay.elBtnNo.show();\r\n-\t\t\t\t\tlpModalOverlay.elBtnNo.on( 'click', () => {\r\n-\t\t\t\t\t\twindow.location.reload();\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tisUpgrading = 0;\r\n-\t\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\r\n-\t\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'error' );\r\n-\t\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html(), function() {\r\n-\t\t\t\t\t\tlpModalOverlay.elBtnYes.text( 'Retry' ).show();\r\n-\t\t\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\t\t\twindow.location.href = lpGlobalSettings.siteurl + '\u002Fwp-admin\u002Fadmin.php?page=learn-press-tools&tab=database&action=upgrade-db';\r\n-\t\t\t\t\t\t};\r\n-\t\t\t\t\t\tlpModalOverlay.elBtnNo.show();\r\n-\r\n-\t\t\t\t\t\tif ( ! res.message ) {\r\n-\t\t\t\t\t\t\tres.message = 'Upgrade not success! Please clear cache, restart sever then retry or contact to LP to help';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tlpModalOverlay.elMainContent.find( '.learn-press-message' ).addClass( 'error' ).html( res.message );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( err ) => {\r\n-\t\t\t\tisUpgrading = 0;\r\n-\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html(), function() {\r\n-\t\t\t\t\tlpModalOverlay.elBtnYes.text( 'Retry' ).show();\r\n-\t\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\t\twindow.location.location = 'wp-admin\u002Fadmin.php?page=learn-press-tools&tab=database&action=upgrade-db';\r\n-\t\t\t\t\t};\r\n-\t\t\t\t\tlpModalOverlay.elBtnNo.show();\r\n-\r\n-\t\t\t\t\tif ( ! err.message ) {\r\n-\t\t\t\t\t\terr.message = 'Upgrade not success! Something wrong. Please clear cache, restart sever then retry or contact to LP to help';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tlpModalOverlay.elMainContent.find( '.learn-press-message' ).addClass( 'error' ).html( err.message );\r\n-\t\t\t\t} );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\thandleAjax( urlHandle, params, funcCallBack );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Show confirm if, within upgrading, the user reload the page.\r\n-\twindow.onbeforeunload = function() {\r\n-\t\tif ( isUpgrading ) {\r\n-\t\t\treturn 'LP is upgrading Database. Are you want to reload page?';\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F\u002F Show confirm if, within upgrading, the user close the page.\r\n-\twindow.onclose = function() {\r\n-\t\tif ( isUpgrading ) {\r\n-\t\t\treturn 'LP is upgrading Database. Are you want to close page?';\r\n-\t\t}\r\n-\t};\r\n-};\r\n-\r\n-const getStepsUpgradeStatus = () => {\r\n-\tif ( ! elToolUpgradeDB.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F\u002F initial LP Modal Overlay\r\n-\tif ( ! lpModalOverlay.init() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst elWrapperStatusUpgrade = $( '.wrapper-lp-status-upgrade' );\r\n-\tconst urlHandle = '\u002Flp\u002Fv1\u002Fdatabase\u002Fget_steps';\r\n-\r\n-\t\u002F\u002F Show dialog upgrade database.\r\n-\tconst queryString = window.location.search;\r\n-\tconst urlParams = new URLSearchParams( queryString );\r\n-\tconst action = urlParams.get( 'action' );\r\n-\r\n-\tif ( 'upgrade-db' === action ) {\r\n-\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\tlpModalOverlay.setTitleModal( elToolUpgradeDB.find( 'h2' ).html() );\r\n-\t\tlpModalOverlay.setContentModal( $( '.wrapper-lp-loading' ).html() );\r\n-\t}\r\n-\r\n-\tconst funcCallBack = {\r\n-\t\tsuccess: ( res ) => {\r\n-\t\t\tconst { steps_completed, steps_default } = res;\r\n-\r\n-\t\t\tif ( undefined === steps_completed || undefined === steps_default ) {\r\n-\t\t\t\tconsole.log( 'invalid steps_completed and steps_default' );\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Render show Steps.\r\n-\t\t\tlet htmlStep = '';\r\n-\t\t\tfor ( const k_gr_steps in steps_default ) {\r\n-\t\t\t\tconst step_group = steps_default[ k_gr_steps ];\r\n-\t\t\t\tconst steps = step_group.steps;\r\n-\r\n-\t\t\t\thtmlStep = '\u003Cdiv class=\"lp-group-step\">';\r\n-\t\t\t\thtmlStep += '\u003Ch3>' + step_group.label + '\u003C\u002Fh3>';\r\n-\r\n-\t\t\t\tfor ( const k_step in steps ) {\r\n-\t\t\t\t\tconst step = steps[ k_step ];\r\n-\t\t\t\t\tlet completed = '';\r\n-\r\n-\t\t\t\t\tif ( undefined !== steps_completed[ k_step ] ) {\r\n-\t\t\t\t\t\tcompleted = 'completed';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step ' + completed + '\">';\r\n-\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step-left\">\u003Cinput type=\"hidden\" name=\"lp_steps_upgrade_db[]\" value=\"' + step.name + '\"  \u002F>\u003C\u002Fdiv>';\r\n-\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step-right\">';\r\n-\t\t\t\t\thtmlStep += '\u003Clabel for=\"\">\u003Cstrong>\u003C\u002Fstrong>' + step.label + '\u003C\u002Flabel>';\r\n-\t\t\t\t\thtmlStep += '\u003Cdiv class=\"description\">' + step.description + '\u003C\u002Fdiv>';\r\n-\t\t\t\t\thtmlStep += '\u003Cdiv class=\"percent\">\u003C\u002Fdiv>';\r\n-\t\t\t\t\thtmlStep += '\u003Cspan class=\"progress-bar\">\u003C\u002Fspan>';\r\n-\t\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\r\n-\t\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\r\n-\r\n-\t\t\t\telWrapperStatusUpgrade.append( htmlStep );\r\n-\r\n-\t\t\t\tconst elBtnUpgradeDB = $( '.lp-btn-upgrade-db' );\r\n-\r\n-\t\t\t\tif ( 'upgrade-db' === action ) {\r\n-\t\t\t\t\tupgradeDB();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\telBtnUpgradeDB.on( 'click', function() {\r\n-\t\t\t\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\t\t\t\tupgradeDB();\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\terror: ( err ) => {\r\n-\r\n-\t\t},\r\n-\t\tcompleted: () => {\r\n-\r\n-\t\t},\r\n-\t};\r\n-\r\n-\thandleAjax( urlHandle, {}, funcCallBack );\r\n-};\r\n-\r\n-export default getStepsUpgradeStatus;\r\n+import lpModalOverlay from '..\u002F..\u002F..\u002F..\u002Futils\u002Flp-modal-overlay';\n+import handleAjax from '..\u002F..\u002F..\u002F..\u002Futils\u002Fhandle-ajax-api';\n+\n+const $ = jQuery;\n+\n+const elToolUpgradeDB = $( '#lp-tool-upgrade-db' );\n+\n+const upgradeDB = () => {\n+\tlet isUpgrading = 0;\n+\tconst elWrapperTermsUpgrade = elToolUpgradeDB.find( '.wrapper-terms-upgrade' );\n+\tconst elStatusUpgrade = elToolUpgradeDB.find( '.wrapper-lp-status-upgrade' );\n+\tconst elWrapperUpgradeMessage = elToolUpgradeDB.find( '.wrapper-lp-upgrade-message' );\n+\tlet checkValidBeforeUpgrade = null;\n+\tconst elMessageUpgrading = $( 'input[name=message-when-upgrading]' ).val();\n+\n+\tif ( elWrapperTermsUpgrade.length ) { \u002F\u002F Show Terms Upgrade.\n+\t\tlpModalOverlay.setContentModal( elWrapperTermsUpgrade.html() );\n+\n+\t\tconst elTermUpdate = lpModalOverlay.elLPOverlay.find( '.terms-upgrade' );\n+\t\tconst elLPAgreeTerm = elTermUpdate.find( 'input[name=lp-agree-term]' );\n+\t\tconst elTermMessage = elTermUpdate.find( '.error' );\n+\n+\t\tcheckValidBeforeUpgrade = function() {\n+\t\t\telTermMessage.hide();\n+\t\t\telTermMessage.removeClass( 'learn-press-message' );\n+\n+\t\t\tif ( elLPAgreeTerm.is( ':checked' ) ) {\n+\t\t\t\thandleAjax( '\u002Flp\u002Fv1\u002Fdatabase\u002Fagree_terms', { agree_terms: 1 }, {} );\n+\n+\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\n+\t\t\t\tlpModalOverlay.setContentModal( elStatusUpgrade.html() );\n+\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\telTermMessage.show();\n+\t\t\telTermMessage.addClass( 'learn-press-message' );\n+\t\t\tlpModalOverlay.elMainContent.animate( {\n+\t\t\t\tscrollTop: elTermMessage.offset().top,\n+\t\t\t} );\n+\n+\t\t\treturn false;\n+\t\t};\n+\t} else { \u002F\u002F Show Steps Upgrade.\n+\t\tlpModalOverlay.setContentModal( elStatusUpgrade.html() );\n+\t\tcheckValidBeforeUpgrade = function() {\n+\t\t\treturn true;\n+\t\t};\n+\t}\n+\n+\tlpModalOverlay.setTitleModal( elToolUpgradeDB.find( 'h2' ).html() );\n+\tlpModalOverlay.elBtnYes.text( 'Upgrade' );\n+\tlpModalOverlay.elBtnYes.show();\n+\tlpModalOverlay.elBtnNo.text( 'Cancel' );\n+\tlpModalOverlay.callBackYes = function( e ) {\n+\t\tif ( ! checkValidBeforeUpgrade() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst target = e.target;\n+\t\t\u002F\u002F Show message note when upgrading.\n+\t\tif ( target.innerText === 'Upgrade' ) {\n+\t\t\tlpModalOverlay.elFooter.prepend( '\u003Cspan class=\"learn-press-notice\">' + elMessageUpgrading + '\u003C\u002Fspan>' );\n+\t\t}\n+\n+\t\tisUpgrading = 1;\n+\n+\t\tlpModalOverlay.elBtnYes.hide();\n+\t\tlpModalOverlay.elBtnNo.hide();\n+\n+\t\tconst urlHandle = '\u002Flp\u002Fv1\u002Fdatabase\u002Fupgrade';\n+\t\tconst elGroupStep = lpModalOverlay.elLPOverlay.find( '.lp-group-step' );\n+\t\tconst elItemSteps = elToolUpgradeDB.find( '.lp-item-step' );\n+\n+\t\t\u002F\u002F Get params.\n+\t\tconst steps = [];\n+\n+\t\t$.each( elItemSteps, function( i, el ) {\n+\t\t\tconst elItemStepsTmp = $( el );\n+\n+\t\t\tif ( ! elItemStepsTmp.hasClass( 'completed' ) ) {\n+\t\t\t\tconst step = elItemStepsTmp.find( 'input' ).val();\n+\t\t\t\tsteps.push( step );\n+\t\t\t}\n+\t\t} );\n+\n+\t\tconst params = {\n+\t\t\tsteps,\n+\t\t\tstep: steps[ 0 ],\n+\t\t};\n+\n+\t\tlet elItemStepCurrent = null;\n+\n+\t\t\u002F\u002F Show progress when upgrading.\n+\t\tconst showProgress = ( stepCurrent, percent ) => {\n+\t\t\telItemStepCurrent = elGroupStep.find( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\n+\t\t\telItemStepCurrent.addClass( 'running' );\n+\n+\t\t\tif ( 100 === percent ) {\n+\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'completed' );\n+\t\t\t}\n+\n+\t\t\telItemStepCurrent.find( '.progress-bar' ).css( 'width', percent + '%' );\n+\t\t\telItemStepCurrent.find( '.percent' ).text( percent + '%' );\n+\t\t};\n+\n+\t\t\u002F\u002F Scroll to step current.\n+\t\tconst scrollToStepCurrent = ( stepCurrent ) => {\n+\t\t\telItemStepCurrent = elGroupStep.find( 'input[value=' + stepCurrent + ']' ).closest( '.lp-item-step' );\n+\n+\t\t\tif ( ! elItemStepCurrent.length ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst offset = elItemStepCurrent.offset().top - lpModalOverlay.elMainContent.offset().top +\n+\t\t\t\tlpModalOverlay.elMainContent.scrollTop();\n+\n+\t\t\tlpModalOverlay.elMainContent.stop().animate( {\n+\t\t\t\tscrollTop: offset,\n+\t\t\t}, 600 );\n+\t\t};\n+\n+\t\tshowProgress( steps[ 0 ], 0.1 );\n+\n+\t\tconst funcCallBack = {\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tshowProgress( params.step, res.percent );\n+\n+\t\t\t\tif ( params.step !== res.name ) {\n+\t\t\t\t\tshowProgress( res.name, 0.1 );\n+\t\t\t\t}\n+\n+\t\t\t\tscrollToStepCurrent( params.step );\n+\n+\t\t\t\tif ( 'success' === res.status ) {\n+\t\t\t\t\tparams.step = res.name;\n+\t\t\t\t\tparams.data = res.data;\n+\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\thandleAjax( urlHandle, params, funcCallBack );\n+\t\t\t\t\t}, 800 );\n+\t\t\t\t} else if ( 'finished' === res.status ) {\n+\t\t\t\t\tisUpgrading = 0;\n+\t\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'completed' );\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html() );\n+\t\t\t\t\t}, 1000 );\n+\t\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\n+\t\t\t\t\tlpModalOverlay.elBtnNo.text( 'Close' );\n+\t\t\t\t\tlpModalOverlay.elBtnNo.show();\n+\t\t\t\t\tlpModalOverlay.elBtnNo.on( 'click', () => {\n+\t\t\t\t\t\twindow.location.reload();\n+\t\t\t\t\t} );\n+\t\t\t\t} else {\n+\t\t\t\t\tisUpgrading = 0;\n+\t\t\t\t\tlpModalOverlay.elFooter.find( '.learn-press-notice' ).remove();\n+\t\t\t\t\telItemStepCurrent.removeClass( 'running' ).addClass( 'error' );\n+\t\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html(), function() {\n+\t\t\t\t\t\tlpModalOverlay.elBtnYes.text( 'Retry' ).show();\n+\t\t\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\t\t\twindow.location.href = lpGlobalSettings.siteurl + '\u002Fwp-admin\u002Fadmin.php?page=learn-press-tools&tab=database&action=upgrade-db';\n+\t\t\t\t\t\t};\n+\t\t\t\t\t\tlpModalOverlay.elBtnNo.show();\n+\n+\t\t\t\t\t\tif ( ! res.message ) {\n+\t\t\t\t\t\t\tres.message = 'Upgrade not success! Please clear cache, restart sever then retry or contact to LP to help';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tlpModalOverlay.elMainContent.find( '.learn-press-message' ).addClass( 'error' ).html( res.message );\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( err ) => {\n+\t\t\t\tisUpgrading = 0;\n+\t\t\t\tlpModalOverlay.setContentModal( elWrapperUpgradeMessage.html(), function() {\n+\t\t\t\t\tlpModalOverlay.elBtnYes.text( 'Retry' ).show();\n+\t\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\t\twindow.location.location = 'wp-admin\u002Fadmin.php?page=learn-press-tools&tab=database&action=upgrade-db';\n+\t\t\t\t\t};\n+\t\t\t\t\tlpModalOverlay.elBtnNo.show();\n+\n+\t\t\t\t\tif ( ! err.message ) {\n+\t\t\t\t\t\terr.message = 'Upgrade not success! Something wrong. Please clear cache, restart sever then retry or contact to LP to help';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tlpModalOverlay.elMainContent.find( '.learn-press-message' ).addClass( 'error' ).html( err.message );\n+\t\t\t\t} );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t};\n+\n+\t\thandleAjax( urlHandle, params, funcCallBack );\n+\t};\n+\n+\t\u002F\u002F Show confirm if, within upgrading, the user reload the page.\n+\twindow.onbeforeunload = function() {\n+\t\tif ( isUpgrading ) {\n+\t\t\treturn 'LP is upgrading Database. Are you want to reload page?';\n+\t\t}\n+\t};\n+\n+\t\u002F\u002F Show confirm if, within upgrading, the user close the page.\n+\twindow.onclose = function() {\n+\t\tif ( isUpgrading ) {\n+\t\t\treturn 'LP is upgrading Database. Are you want to close page?';\n+\t\t}\n+\t};\n+};\n+\n+const getStepsUpgradeStatus = () => {\n+\tif ( ! elToolUpgradeDB.length ) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F\u002F initial LP Modal Overlay\n+\tif ( ! lpModalOverlay.init() ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elWrapperStatusUpgrade = $( '.wrapper-lp-status-upgrade' );\n+\tconst urlHandle = '\u002Flp\u002Fv1\u002Fdatabase\u002Fget_steps';\n+\n+\t\u002F\u002F Show dialog upgrade database.\n+\tconst queryString = window.location.search;\n+\tconst urlParams = new URLSearchParams( queryString );\n+\tconst action = urlParams.get( 'action' );\n+\n+\tif ( 'upgrade-db' === action ) {\n+\t\tlpModalOverlay.elLPOverlay.show();\n+\t\tlpModalOverlay.setTitleModal( elToolUpgradeDB.find( 'h2' ).html() );\n+\t\tlpModalOverlay.setContentModal( $( '.wrapper-lp-loading' ).html() );\n+\t}\n+\n+\tconst funcCallBack = {\n+\t\tsuccess: ( res ) => {\n+\t\t\tconst { steps_completed, steps_default } = res;\n+\n+\t\t\tif ( undefined === steps_completed || undefined === steps_default ) {\n+\t\t\t\tconsole.log( 'invalid steps_completed and steps_default' );\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Render show Steps.\n+\t\t\tlet htmlStep = '';\n+\t\t\tfor ( const k_gr_steps in steps_default ) {\n+\t\t\t\tconst step_group = steps_default[ k_gr_steps ];\n+\t\t\t\tconst steps = step_group.steps;\n+\n+\t\t\t\thtmlStep = '\u003Cdiv class=\"lp-group-step\">';\n+\t\t\t\thtmlStep += '\u003Ch3>' + step_group.label + '\u003C\u002Fh3>';\n+\n+\t\t\t\tfor ( const k_step in steps ) {\n+\t\t\t\t\tconst step = steps[ k_step ];\n+\t\t\t\t\tlet completed = '';\n+\n+\t\t\t\t\tif ( undefined !== steps_completed[ k_step ] ) {\n+\t\t\t\t\t\tcompleted = 'completed';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step ' + completed + '\">';\n+\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step-left\">\u003Cinput type=\"hidden\" name=\"lp_steps_upgrade_db[]\" value=\"' + step.name + '\"  \u002F>\u003C\u002Fdiv>';\n+\t\t\t\t\thtmlStep += '\u003Cdiv class=\"lp-item-step-right\">';\n+\t\t\t\t\thtmlStep += '\u003Clabel for=\"\">\u003Cstrong>\u003C\u002Fstrong>' + step.label + '\u003C\u002Flabel>';\n+\t\t\t\t\thtmlStep += '\u003Cdiv class=\"description\">' + step.description + '\u003C\u002Fdiv>';\n+\t\t\t\t\thtmlStep += '\u003Cdiv class=\"percent\">\u003C\u002Fdiv>';\n+\t\t\t\t\thtmlStep += '\u003Cspan class=\"progress-bar\">\u003C\u002Fspan>';\n+\t\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\n+\t\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\n+\t\t\t\t}\n+\n+\t\t\t\thtmlStep += '\u003C\u002Fdiv>';\n+\n+\t\t\t\telWrapperStatusUpgrade.append( htmlStep );\n+\n+\t\t\t\tconst elBtnUpgradeDB = $( '.lp-btn-upgrade-db' );\n+\n+\t\t\t\tif ( 'upgrade-db' === action ) {\n+\t\t\t\t\tupgradeDB();\n+\t\t\t\t}\n+\n+\t\t\t\telBtnUpgradeDB.on( 'click', function() {\n+\t\t\t\t\tlpModalOverlay.elLPOverlay.show();\n+\t\t\t\t\tupgradeDB();\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t},\n+\t\terror: ( err ) => {\n+\n+\t\t},\n+\t\tcompleted: () => {\n+\n+\t\t},\n+\t};\n+\n+\thandleAjax( urlHandle, {}, funcCallBack );\n+};\n+\n+export default getStepsUpgradeStatus;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,222 +1,222 @@\n-\u002F**\r\n- * Reset course progress.\r\n- *\r\n- * @since 4.0.5.\r\n- * @author Nhamdv - Code choi choi in Physcode.\r\n- *\u002F\r\n-const { __ } = wp.i18n;\r\n-const { TextControl, Button, Spinner, CheckboxControl, Notice } = wp.components;\r\n-const { useState, useEffect } = wp.element;\r\n-const { addQueryArgs } = wp.url;\r\n-\r\n-const ResetCourse = () => {\r\n-\tconst [ loading, setLoading ] = useState( false );\r\n-\tconst [ search, setSearch ] = useState( '' );\r\n-\tconst [ data, setData ] = useState( [] );\r\n-\tconst [ checkData, setCheckData ] = useState( [] );\r\n-\tconst [ message, setMessage ] = useState( [] );\r\n-\tconst [ loadingReset, setLoadingReset ] = useState( false );\r\n-\r\n-\tuseEffect( () => {\r\n-\t\tresponsiveData( search );\r\n-\t}, [ search ] );\r\n-\r\n-\tconst responsiveData = async ( s ) => {\r\n-\t\ttry {\r\n-\t\t\tif ( ! s || loading ) {\r\n-\t\t\t\tsetMessage( [] );\r\n-\t\t\t\tsetData( [] );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( s.length \u003C 3 ) {\r\n-\t\t\t\tsetMessage( [ { status: 'error', message: 'Please enter at least 3 characters to searching course.' } ] );\r\n-\t\t\t\tsetData( [] );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tsetLoading( true );\r\n-\r\n-\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Freset-data\u002Fsearch-courses', {\r\n-\t\t\t\t\ts,\r\n-\t\t\t\t} ),\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t} );\r\n-\r\n-\t\t\tconst { status, data } = response;\r\n-\r\n-\t\t\tsetLoading( false );\r\n-\r\n-\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\tsetData( data );\r\n-\t\t\t\tsetMessage( [] );\r\n-\t\t\t} else {\r\n-\t\t\t\tsetMessage( [ { status: 'error', message: response.message || 'LearnPress: Search Course Fail!' } ] );\r\n-\t\t\t\tsetData( [] );\r\n-\t\t\t}\r\n-\t\t} catch ( error ) {\r\n-\t\t\tconsole.log( error.message );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tfunction checkItems( id ) {\r\n-\t\tconst datas = [ ...checkData ];\r\n-\r\n-\t\tif ( datas.includes( id ) ) {\r\n-\t\t\tconst index = datas.indexOf( id );\r\n-\r\n-\t\t\tif ( index > -1 ) {\r\n-\t\t\t\tdatas.splice( index, 1 );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tdatas.push( id );\r\n-\t\t}\r\n-\r\n-\t\tsetCheckData( datas );\r\n-\t}\r\n-\r\n-\tconst resetCourse = async () => {\r\n-\t\tif ( checkData.length === 0 ) {\r\n-\t\t\tsetMessage( [ { status: 'error', message: 'Please chooce Course for reset data!' } ] );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F eslint-disable-next-line no-alert\r\n-\t\tif ( ! confirm( 'Are you sure to reset course progress of all users enrolled this course?' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst notice = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\tsetLoadingReset( true );\r\n-\r\n-\t\t\tfor ( const courseId of checkData ) {\r\n-\t\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Freset-data\u002Freset-courses', {\r\n-\t\t\t\t\t\tcourseId,\r\n-\t\t\t\t\t} ),\r\n-\t\t\t\t\tmethod: 'GET',\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tconst { status, data, message } = response;\r\n-\r\n-\t\t\t\tnotice.push( { status, message: message || `Course #${ courseId } reset successfully!` } );\r\n-\t\t\t}\r\n-\r\n-\t\t\tsetLoadingReset( false );\r\n-\t\t} catch ( error ) {\r\n-\t\t\tnotice.push( { status: 'error', message: error.message || `LearnPress Error: Reset Course Data.` } );\r\n-\t\t}\r\n-\r\n-\t\tsetMessage( notice );\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Ch2>{ __( 'Reset Course Progress', 'learnpress' ) }\u003C\u002Fh2>\r\n-\t\t\t\u003Cdiv className=\"description\">\r\n-\t\t\t\t\u003Cp>{ __( 'This action will reset course progress of all users who have enrolled.', 'learnpress' ) }\u003C\u002Fp>\r\n-\t\t\t\t\u003Cp>{ __( 'Search results only show if courses have user data.', 'learnpress' ) }\u003C\u002Fp>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\u003CTextControl\r\n-\t\t\t\t\t\tplaceholder={ __( 'Search course by name', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ search }\r\n-\t\t\t\t\t\tonChange={ ( value ) => setSearch( value ) }\r\n-\t\t\t\t\t\tstyle={ { width: 300 } }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t{ loading && \u003CSpinner \u002F> }\r\n-\r\n-\t\t\t{ data.length > 0 && (\r\n-\t\t\t\t\u003C>\r\n-\t\t\t\t\t\u003Cdiv className=\"lp-reset-course_progress\" style={ {\r\n-\t\t\t\t\t\tborder: '1px solid #eee',\r\n-\t\t\t\t\t} }>\r\n-\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv style={ { background: '#eee' } }>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003CCheckboxControl\r\n-\t\t\t\t\t\t\t\t\t\tchecked={ checkData.length === data.length }\r\n-\t\t\t\t\t\t\t\t\t\tonChange={ () => {\r\n-\t\t\t\t\t\t\t\t\t\t\tif ( checkData.length === data.length ) {\r\n-\t\t\t\t\t\t\t\t\t\t\t\tsetCheckData( [] );\r\n-\t\t\t\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\t\t\t\tsetCheckData( data.map( ( dt ) => dt.id ) );\r\n-\t\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\t\t\tstyle={ { margin: 0 } }\r\n-\t\t\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'ID', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'Name', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'Students', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t\t\u003Cdiv style={ { height: '100%', maxHeight: 200, overflow: 'auto' } }>\r\n-\t\t\t\t\t\t\t{ data.map( ( dt ) => {\r\n-\t\t\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv style={ { borderTop: '1px solid #eee' } } key={ dt.id }>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003CCheckboxControl\r\n-\t\t\t\t\t\t\t\t\t\t\t\tchecked={ checkData.includes( dt.id ) }\r\n-\t\t\t\t\t\t\t\t\t\t\t\tonChange={ () => checkItems( dt.id ) }\r\n-\t\t\t\t\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv>#{ dt.id }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv>{ dt.title }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv>{ dt.students }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t} ) }\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t{ loadingReset ? \u003CSpinner \u002F> : (\r\n-\t\t\t\t\t\t\u003CButton\r\n-\t\t\t\t\t\t\tisPrimary\r\n-\t\t\t\t\t\t\tonClick={ () => resetCourse() }\r\n-\t\t\t\t\t\t\tstyle={ { marginTop: 10, height: 30 } }\r\n-\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t{ __( 'Reset now', 'learnpress' ) }\r\n-\t\t\t\t\t\t\u003C\u002FButton>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002F>\r\n-\t\t\t) }\r\n-\r\n-\t\t\t{ message.length > 0 && message.map( ( mess, index ) => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003CNotice status={ mess.status } key={ index } isDismissible={ false }>\r\n-\t\t\t\t\t\t{ mess.message }\r\n-\t\t\t\t\t\u003C\u002FNotice>\r\n-\t\t\t\t);\r\n-\t\t\t} ) }\r\n-\r\n-\t\t\t\u003Cstyle>\r\n-\t\t\t\t{ '\\\r\n-\t\t\t\t.lp-reset-course_progress .components-base-control__field {\\\r\n-\t\t\t\t\tmargin: 0;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.components-notice{\\\r\n-\t\t\t\t\tmargin-left: 0;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.lp-reset-course_progress > div > div{\\\r\n-\t\t\t\t\tdisplay: grid;\\\r\n-\t\t\t\t\tgrid-template-columns: 80px 50px 1fr 80px;\\\r\n-\t\t\t\t\talign-items: center;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t.lp-reset-course_progress > div > div > div{\\\r\n-\t\t\t\t\tmaegin: 0;\\\r\n-\t\t\t\t\tpadding: 8px 10px;\\\r\n-\t\t\t\t}\\\r\n-\t\t\t\t' }\r\n-\r\n-\t\t\t\u003C\u002Fstyle>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-export default ResetCourse;\r\n+\u002F**\n+ * Reset course progress.\n+ *\n+ * @since 4.0.5.\n+ * @author Nhamdv - Code choi choi in Physcode.\n+ *\u002F\n+const { __ } = wp.i18n;\n+const { TextControl, Button, Spinner, CheckboxControl, Notice } = wp.components;\n+const { useState, useEffect } = wp.element;\n+const { addQueryArgs } = wp.url;\n+\n+const ResetCourse = () => {\n+\tconst [ loading, setLoading ] = useState( false );\n+\tconst [ search, setSearch ] = useState( '' );\n+\tconst [ data, setData ] = useState( [] );\n+\tconst [ checkData, setCheckData ] = useState( [] );\n+\tconst [ message, setMessage ] = useState( [] );\n+\tconst [ loadingReset, setLoadingReset ] = useState( false );\n+\n+\tuseEffect( () => {\n+\t\tresponsiveData( search );\n+\t}, [ search ] );\n+\n+\tconst responsiveData = async ( s ) => {\n+\t\ttry {\n+\t\t\tif ( ! s || loading ) {\n+\t\t\t\tsetMessage( [] );\n+\t\t\t\tsetData( [] );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( s.length \u003C 3 ) {\n+\t\t\t\tsetMessage( [ { status: 'error', message: 'Please enter at least 3 characters to searching course.' } ] );\n+\t\t\t\tsetData( [] );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tsetLoading( true );\n+\n+\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Freset-data\u002Fsearch-courses', {\n+\t\t\t\t\ts,\n+\t\t\t\t} ),\n+\t\t\t\tmethod: 'GET',\n+\t\t\t} );\n+\n+\t\t\tconst { status, data } = response;\n+\n+\t\t\tsetLoading( false );\n+\n+\t\t\tif ( status === 'success' ) {\n+\t\t\t\tsetData( data );\n+\t\t\t\tsetMessage( [] );\n+\t\t\t} else {\n+\t\t\t\tsetMessage( [ { status: 'error', message: response.message || 'LearnPress: Search Course Fail!' } ] );\n+\t\t\t\tsetData( [] );\n+\t\t\t}\n+\t\t} catch ( error ) {\n+\t\t\tconsole.log( error.message );\n+\t\t}\n+\t};\n+\n+\tfunction checkItems( id ) {\n+\t\tconst datas = [ ...checkData ];\n+\n+\t\tif ( datas.includes( id ) ) {\n+\t\t\tconst index = datas.indexOf( id );\n+\n+\t\t\tif ( index > -1 ) {\n+\t\t\t\tdatas.splice( index, 1 );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tdatas.push( id );\n+\t\t}\n+\n+\t\tsetCheckData( datas );\n+\t}\n+\n+\tconst resetCourse = async () => {\n+\t\tif ( checkData.length === 0 ) {\n+\t\t\tsetMessage( [ { status: 'error', message: 'Please chooce Course for reset data!' } ] );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F eslint-disable-next-line no-alert\n+\t\tif ( ! confirm( 'Are you sure to reset course progress of all users enrolled this course?' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst notice = [];\n+\n+\t\ttry {\n+\t\t\tsetLoadingReset( true );\n+\n+\t\t\tfor ( const courseId of checkData ) {\n+\t\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Freset-data\u002Freset-courses', {\n+\t\t\t\t\t\tcourseId,\n+\t\t\t\t\t} ),\n+\t\t\t\t\tmethod: 'GET',\n+\t\t\t\t} );\n+\n+\t\t\t\tconst { status, data, message } = response;\n+\n+\t\t\t\tnotice.push( { status, message: message || `Course #${ courseId } reset successfully!` } );\n+\t\t\t}\n+\n+\t\t\tsetLoadingReset( false );\n+\t\t} catch ( error ) {\n+\t\t\tnotice.push( { status: 'error', message: error.message || `LearnPress Error: Reset Course Data.` } );\n+\t\t}\n+\n+\t\tsetMessage( notice );\n+\t};\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Ch2>{ __( 'Reset Course Progress', 'learnpress' ) }\u003C\u002Fh2>\n+\t\t\t\u003Cdiv className=\"description\">\n+\t\t\t\t\u003Cp>{ __( 'This action will reset course progress of all users who have enrolled.', 'learnpress' ) }\u003C\u002Fp>\n+\t\t\t\t\u003Cp>{ __( 'Search results only show if courses have user data.', 'learnpress' ) }\u003C\u002Fp>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\u003CTextControl\n+\t\t\t\t\t\tplaceholder={ __( 'Search course by name', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ search }\n+\t\t\t\t\t\tonChange={ ( value ) => setSearch( value ) }\n+\t\t\t\t\t\tstyle={ { width: 300 } }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t{ loading && \u003CSpinner \u002F> }\n+\n+\t\t\t{ data.length > 0 && (\n+\t\t\t\t\u003C>\n+\t\t\t\t\t\u003Cdiv className=\"lp-reset-course_progress\" style={ {\n+\t\t\t\t\t\tborder: '1px solid #eee',\n+\t\t\t\t\t} }>\n+\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\u003Cdiv style={ { background: '#eee' } }>\n+\t\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\t\u003CCheckboxControl\n+\t\t\t\t\t\t\t\t\t\tchecked={ checkData.length === data.length }\n+\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n+\t\t\t\t\t\t\t\t\t\t\tif ( checkData.length === data.length ) {\n+\t\t\t\t\t\t\t\t\t\t\t\tsetCheckData( [] );\n+\t\t\t\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\t\t\t\tsetCheckData( data.map( ( dt ) => dt.id ) );\n+\t\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\t\t\tstyle={ { margin: 0 } }\n+\t\t\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'ID', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'Name', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv>{ __( 'Students', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t\t\u003Cdiv style={ { height: '100%', maxHeight: 200, overflow: 'auto' } }>\n+\t\t\t\t\t\t\t{ data.map( ( dt ) => {\n+\t\t\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\t\t\u003Cdiv style={ { borderTop: '1px solid #eee' } } key={ dt.id }>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003CCheckboxControl\n+\t\t\t\t\t\t\t\t\t\t\t\tchecked={ checkData.includes( dt.id ) }\n+\t\t\t\t\t\t\t\t\t\t\t\tonChange={ () => checkItems( dt.id ) }\n+\t\t\t\t\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv>#{ dt.id }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv>{ dt.title }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv>{ dt.students }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t} ) }\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t{ loadingReset ? \u003CSpinner \u002F> : (\n+\t\t\t\t\t\t\u003CButton\n+\t\t\t\t\t\t\tisPrimary\n+\t\t\t\t\t\t\tonClick={ () => resetCourse() }\n+\t\t\t\t\t\t\tstyle={ { marginTop: 10, height: 30 } }\n+\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t{ __( 'Reset now', 'learnpress' ) }\n+\t\t\t\t\t\t\u003C\u002FButton>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002F>\n+\t\t\t) }\n+\n+\t\t\t{ message.length > 0 && message.map( ( mess, index ) => {\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003CNotice status={ mess.status } key={ index } isDismissible={ false }>\n+\t\t\t\t\t\t{ mess.message }\n+\t\t\t\t\t\u003C\u002FNotice>\n+\t\t\t\t);\n+\t\t\t} ) }\n+\n+\t\t\t\u003Cstyle>\n+\t\t\t\t{ '\\\n+\t\t\t\t.lp-reset-course_progress .components-base-control__field {\\\n+\t\t\t\t\tmargin: 0;\\\n+\t\t\t\t}\\\n+\t\t\t\t.components-notice{\\\n+\t\t\t\t\tmargin-left: 0;\\\n+\t\t\t\t}\\\n+\t\t\t\t.lp-reset-course_progress > div > div{\\\n+\t\t\t\t\tdisplay: grid;\\\n+\t\t\t\t\tgrid-template-columns: 80px 50px 1fr 80px;\\\n+\t\t\t\t\talign-items: center;\\\n+\t\t\t\t}\\\n+\t\t\t\t.lp-reset-course_progress > div > div > div{\\\n+\t\t\t\t\tmaegin: 0;\\\n+\t\t\t\t\tpadding: 8px 10px;\\\n+\t\t\t\t}\\\n+\t\t\t\t' }\n+\n+\t\t\t\u003C\u002Fstyle>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+export default ResetCourse;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-import ResetCourse from '.\u002Fcourse';\r\n-\r\n-const resetData = () => {\r\n-\tif ( document.querySelectorAll( '#learn-press-reset-course-users' ).length > 0 ) {\r\n-\t\twp.element.render( \u003CResetCourse \u002F>, [ ...document.querySelectorAll( '#learn-press-reset-course-users' ) ][ 0 ] );\r\n-\t}\r\n-};\r\n-export default resetData;\r\n+import ResetCourse from '.\u002Fcourse';\n+\n+const resetData = () => {\n+\tif ( document.querySelectorAll( '#learn-press-reset-course-users' ).length > 0 ) {\n+\t\twp.element.render( \u003CResetCourse \u002F>, [ ...document.querySelectorAll( '#learn-press-reset-course-users' ) ][ 0 ] );\n+\t}\n+};\n+export default resetData;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,147 +1,147 @@\n-import getStepsUpgradeStatus from '.\u002Ftools\u002Fdatabase\u002Fupgrade';\r\n-import createIndexes from '.\u002Ftools\u002Fdatabase\u002Fcreate_indexs';\r\n-import reUpgradeDB from '.\u002Ftools\u002Fdatabase\u002Fre-upgrade-db';\r\n-import cleanDatabases from '.\u002Ftools\u002Fdatabase\u002Fclean_database';\r\n-\r\n-import resetData from '.\u002Ftools\u002Freset-data';\r\n-\r\n-( function( $ ) {\r\n-\tconst $doc = $( document );\r\n-\tlet isRunning = false;\r\n-\r\n-\tconst installSampleCourse = function installSampleCourse( e ) {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst $button = $( this );\r\n-\r\n-\t\tif ( isRunning ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! confirm( lpGlobalSettings.i18n.confirm_install_sample_data ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$button.addClass( 'disabled' ).html( $button.data( 'installing-text' ) );\r\n-\t\t$( '.lp-install-sample__response' ).remove();\r\n-\t\tisRunning = true;\r\n-\r\n-\t\t$.ajax( {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\turl: $button.attr( 'href' ),\r\n-\t\t\tdata: $( '.lp-install-sample__options' ).serializeJSON(),\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t\tisRunning = false;\r\n-\t\t\t\t$( response ).insertBefore( $button.parent() );\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t\tisRunning = false;\r\n-\t\t\t\t$( response ).insertBefore( $button.parent() );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst uninstallSampleCourse = function uninstallSampleCourse( e ) {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst $button = $( this );\r\n-\r\n-\t\tif ( isRunning ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! confirm( lpGlobalSettings.i18n.confirm_uninstall_sample_data ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$button.addClass( 'disabled' ).html( $button.data( 'uninstalling-text' ) );\r\n-\t\tisRunning = true;\r\n-\r\n-\t\t$.ajax( {\r\n-\t\t\turl: $button.attr( 'href' ),\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t\tisRunning = false;\r\n-\t\t\t\t$( response ).insertBefore( $button.parent() );\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t\tisRunning = false;\r\n-\t\t\t\t$( response ).insertBefore( $button.parent() );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst clearHardCache = function clearHardCache( e ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst $button = $( this );\r\n-\r\n-\t\tif ( $button.hasClass( 'disabled' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$button.addClass( 'disabled' ).html( $button.data( 'cleaning-text' ) );\r\n-\t\t$.ajax( {\r\n-\t\t\turl: $button.attr( 'href' ),\r\n-\t\t\tdata: {},\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst toggleHardCache = function toggleHardCache() {\r\n-\t\t$.ajax( {\r\n-\t\t\turl: 'admin.php?page=lp-toggle-hard-cache-option',\r\n-\t\t\tdata: { v: this.checked ? 'yes' : 'no' },\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst toggleOptions = function toggleOptions( e ) {\r\n-\t\te.preventDefault();\r\n-\t\t$( '.lp-install-sample__options' ).toggleClass( 'hide-if-js' );\r\n-\t};\r\n-\r\n-\tconst formatValueInput = ( e ) => {\r\n-\t\tconst input = $( e.target );\r\n-\t\tlet value = input.val();\r\n-\t\tvalue = value.replace( \u002F[^0-9]\u002Fg, '' );\r\n-\r\n-\t\tinput.val( value );\r\n-\r\n-\t\tif ( parseInt( value, 10 ) \u003C input.attr( 'min' ) ) {\r\n-\t\t\tinput.val( input.attr( 'min' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( parseInt( value, 10 ) > input.attr( 'max' ) ) {\r\n-\t\t\tinput.val( input.attr( 'max' ) );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t$( function() {\r\n-\t\tgetStepsUpgradeStatus();\r\n-\t\tcreateIndexes();\r\n-\t\treUpgradeDB();\r\n-\t\tresetData();\r\n-\t\tcleanDatabases();\r\n-\t\t$doc.on( 'click', '.lp-install-sample__install', installSampleCourse )\r\n-\t\t\t.on( 'click', '.lp-install-sample__uninstall', uninstallSampleCourse )\r\n-\t\t\t.on( 'click', '#learn-press-clear-cache', clearHardCache )\r\n-\t\t\t.on( 'click', 'input[name=\"enable_hard_cache\"]', toggleHardCache )\r\n-\t\t\t.on( 'click', '.lp-install-sample__toggle-options', toggleOptions )\r\n-\t\t\t.on( 'change', 'input[name=\"section-range[]\"]', formatValueInput )\r\n-\t\t\t.on( 'change', 'input[name=\"item-range[]\"]', formatValueInput )\r\n-\t\t\t.on( 'change', 'input[name=\"question-range[]\"]', formatValueInput )\r\n-\t\t\t.on( 'change', 'input[name=\"answer-range[]\"]', formatValueInput )\r\n-\t\t\t.on( 'change', 'input[name=\"course-price\"]', formatValueInput );\r\n-\t} );\r\n-}( jQuery ) );\r\n+import getStepsUpgradeStatus from '.\u002Ftools\u002Fdatabase\u002Fupgrade';\n+import createIndexes from '.\u002Ftools\u002Fdatabase\u002Fcreate_indexs';\n+import reUpgradeDB from '.\u002Ftools\u002Fdatabase\u002Fre-upgrade-db';\n+import cleanDatabases from '.\u002Ftools\u002Fdatabase\u002Fclean_database';\n+\n+import resetData from '.\u002Ftools\u002Freset-data';\n+\n+( function( $ ) {\n+\tconst $doc = $( document );\n+\tlet isRunning = false;\n+\n+\tconst installSampleCourse = function installSampleCourse( e ) {\n+\t\te.preventDefault();\n+\n+\t\tconst $button = $( this );\n+\n+\t\tif ( isRunning ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! confirm( lpGlobalSettings.i18n.confirm_install_sample_data ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$button.addClass( 'disabled' ).html( $button.data( 'installing-text' ) );\n+\t\t$( '.lp-install-sample__response' ).remove();\n+\t\tisRunning = true;\n+\n+\t\t$.ajax( {\n+\t\t\tmethod: 'POST',\n+\t\t\turl: $button.attr( 'href' ),\n+\t\t\tdata: $( '.lp-install-sample__options' ).serializeJSON(),\n+\t\t\tsuccess( response ) {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t\tisRunning = false;\n+\t\t\t\t$( response ).insertBefore( $button.parent() );\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t\tisRunning = false;\n+\t\t\t\t$( response ).insertBefore( $button.parent() );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst uninstallSampleCourse = function uninstallSampleCourse( e ) {\n+\t\te.preventDefault();\n+\n+\t\tconst $button = $( this );\n+\n+\t\tif ( isRunning ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! confirm( lpGlobalSettings.i18n.confirm_uninstall_sample_data ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$button.addClass( 'disabled' ).html( $button.data( 'uninstalling-text' ) );\n+\t\tisRunning = true;\n+\n+\t\t$.ajax( {\n+\t\t\turl: $button.attr( 'href' ),\n+\t\t\tsuccess( response ) {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t\tisRunning = false;\n+\t\t\t\t$( response ).insertBefore( $button.parent() );\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t\tisRunning = false;\n+\t\t\t\t$( response ).insertBefore( $button.parent() );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst clearHardCache = function clearHardCache( e ) {\n+\t\te.preventDefault();\n+\t\tconst $button = $( this );\n+\n+\t\tif ( $button.hasClass( 'disabled' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$button.addClass( 'disabled' ).html( $button.data( 'cleaning-text' ) );\n+\t\t$.ajax( {\n+\t\t\turl: $button.attr( 'href' ),\n+\t\t\tdata: {},\n+\t\t\tsuccess( response ) {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t\t$button.removeClass( 'disabled' ).html( $button.data( 'text' ) );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst toggleHardCache = function toggleHardCache() {\n+\t\t$.ajax( {\n+\t\t\turl: 'admin.php?page=lp-toggle-hard-cache-option',\n+\t\t\tdata: { v: this.checked ? 'yes' : 'no' },\n+\t\t\tsuccess( response ) {\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst toggleOptions = function toggleOptions( e ) {\n+\t\te.preventDefault();\n+\t\t$( '.lp-install-sample__options' ).toggleClass( 'hide-if-js' );\n+\t};\n+\n+\tconst formatValueInput = ( e ) => {\n+\t\tconst input = $( e.target );\n+\t\tlet value = input.val();\n+\t\tvalue = value.replace( \u002F[^0-9]\u002Fg, '' );\n+\n+\t\tinput.val( value );\n+\n+\t\tif ( parseInt( value, 10 ) \u003C input.attr( 'min' ) ) {\n+\t\t\tinput.val( input.attr( 'min' ) );\n+\t\t}\n+\n+\t\tif ( parseInt( value, 10 ) > input.attr( 'max' ) ) {\n+\t\t\tinput.val( input.attr( 'max' ) );\n+\t\t}\n+\t};\n+\n+\t$( function() {\n+\t\tgetStepsUpgradeStatus();\n+\t\tcreateIndexes();\n+\t\treUpgradeDB();\n+\t\tresetData();\n+\t\tcleanDatabases();\n+\t\t$doc.on( 'click', '.lp-install-sample__install', installSampleCourse )\n+\t\t\t.on( 'click', '.lp-install-sample__uninstall', uninstallSampleCourse )\n+\t\t\t.on( 'click', '#learn-press-clear-cache', clearHardCache )\n+\t\t\t.on( 'click', 'input[name=\"enable_hard_cache\"]', toggleHardCache )\n+\t\t\t.on( 'click', '.lp-install-sample__toggle-options', toggleOptions )\n+\t\t\t.on( 'change', 'input[name=\"section-range[]\"]', formatValueInput )\n+\t\t\t.on( 'change', 'input[name=\"item-range[]\"]', formatValueInput )\n+\t\t\t.on( 'change', 'input[name=\"question-range[]\"]', formatValueInput )\n+\t\t\t.on( 'change', 'input[name=\"answer-range[]\"]', formatValueInput )\n+\t\t\t.on( 'change', 'input[name=\"course-price\"]', formatValueInput );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fwidgets.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fwidgets.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fwidgets.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Fwidgets.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,123 +1,123 @@\n-const $ = jQuery;\r\n-\r\n-function formatCourse( repo ) {\r\n-\tif ( repo.loading ) {\r\n-\t\treturn repo.text;\r\n-\t}\r\n-\tconst markup = \"\u003Cdiv class='select2-result-course_title'>\" + repo.id + ' - ' + repo.title.rendered + '\u003C\u002Fdiv>';\r\n-\treturn markup;\r\n-}\r\n-\r\n-function formatCourseSelection( repo ) {\r\n-\treturn repo.title.rendered || repo.text;\r\n-}\r\n-\r\n-\u002F*function autocompleteWidget( widget = null ) {\r\n-\tconst searchs = $( '.lp-widget_select_course' );\r\n-\tconst wpRestUrl = searchs.data( 'rest-url' );\r\n-\tconst postType = searchs.data( 'post_type' ) || 'lp_course';\r\n-\r\n-\tif ( postType === 'lp_course' ) {\r\n-\t\tconst dataStruct = {\r\n-\t\t\turlApi: Api.admin.apiSearchCourses,\r\n-\t\t\tdataType: 'courses',\r\n-\t\t\tkeyGetValue: {\r\n-\t\t\t\tvalue: 'ID',\r\n-\t\t\t\ttext: '{{post_title}} (#{{ID}})',\r\n-\t\t\t\tkey_render: {\r\n-\t\t\t\t\tpost_title: 'post_title',\r\n-\t\t\t\t\tID: 'ID',\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\tconst dataStructJson = JSON.stringify( dataStruct );\r\n-\t\tconst widgetListEl = document.querySelector( '#widget-list' );\r\n-\t\tlet nonTomSelectWidgetEls = '';\r\n-\t\tif ( widgetListEl ) {\r\n-\t\t\tconst tomSelectWidgetEls = Array.prototype.slice.call( widgetListEl.querySelectorAll( '.lp-widget_select_course' ) );\r\n-\t\t\tnonTomSelectWidgetEls = Array.prototype.slice.call( searchs ).filter( ( el ) => ! tomSelectWidgetEls.includes( el ) );\r\n-\t\t}\r\n-\r\n-\t\tnonTomSelectWidgetEls.forEach( ( nonTomSelectWidgetEl ) => {\r\n-\t\t\t$( nonTomSelectWidgetEl ).attr( 'data-struct', dataStructJson );\r\n-\t\t\tinitTomSelect( nonTomSelectWidgetEl );\r\n-\t\t} );\r\n-\t} else {\r\n-\t\tsearchs.select2( {\r\n-\t\t\tajax: {\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t\turl: wpRestUrl + 'wp\u002Fv2\u002F' + postType,\r\n-\t\t\t\tdataType: 'json',\r\n-\t\t\t\tdelay: 250,\r\n-\t\t\t\tdata( params ) {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tsearch: params.term,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tprocessResults( data, params ) {\r\n-\t\t\t\t\tparams.page = params.page || 1;\r\n-\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tresults: data,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tcache: true,\r\n-\t\t\t},\r\n-\t\t\tescapeMarkup( markup ) {\r\n-\t\t\t\treturn markup;\r\n-\t\t\t},\r\n-\t\t\tminimumInputLength: 2,\r\n-\t\t\ttemplateResult: formatCourse, \u002F\u002F omitted for brevity, see the source of this page\r\n-\t\t\ttemplateSelection: formatCourseSelection, \u002F\u002F omitted for brevity, see the source of this page\r\n-\t\t} );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\tif ( document.querySelector( '#widgets-editor' ) ) {\r\n-\t\t$( document ).on( 'widget-added', function( event, widget ) {\r\n-\t\t\t\u002F\u002FautocompleteWidget( widget );\r\n-\t\t} );\r\n-\t} else {\r\n-\t\t$( document ).on( 'learnpress\u002Fwidgets\u002Fselect', function() {\r\n-\t\t\t\u002F\u002FautocompleteWidget();\r\n-\t\t\tsortItem();\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002FautocompleteWidget();\r\n-\t}\r\n-} );\r\n-\r\n-\u002F\u002FSortable checkbox\r\n-document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\tsortItem();\r\n-} );\r\n-\r\n-$( document ).on( 'widget-added widget-updated', function( event ) {\r\n-\tsortItem();\r\n-} );\r\n-\r\n-function sortItem() {\r\n-\t$( '.widget-content .sortable' ).sortable( {\r\n-\t\thandle: '.drag',\r\n-\r\n-\t\tstart( event, ui ) {\r\n-\r\n-\t\t},\r\n-\t\tupdate( event, ui ) {\r\n-\t\t\tconst value = [];\r\n-\t\t\t$( this ).children().map( function() {\r\n-\t\t\t\tvalue.push( $( this ).find( 'input' ).val() );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tvalue.join( ',' );\r\n-\r\n-\t\t\tconst fieldSort = $( this ).closest( '.widget-content' ).find( 'input.fields-sort' );\r\n-\t\t\tfieldSort.val( value );\r\n-\t\t\tfieldSort.trigger( 'change' );\r\n-\t\t},\r\n-\t\tstop( event, ui ) {\r\n-\r\n-\t\t},\r\n-\t} );\r\n-}\r\n+const $ = jQuery;\n+\n+function formatCourse( repo ) {\n+\tif ( repo.loading ) {\n+\t\treturn repo.text;\n+\t}\n+\tconst markup = \"\u003Cdiv class='select2-result-course_title'>\" + repo.id + ' - ' + repo.title.rendered + '\u003C\u002Fdiv>';\n+\treturn markup;\n+}\n+\n+function formatCourseSelection( repo ) {\n+\treturn repo.title.rendered || repo.text;\n+}\n+\n+\u002F*function autocompleteWidget( widget = null ) {\n+\tconst searchs = $( '.lp-widget_select_course' );\n+\tconst wpRestUrl = searchs.data( 'rest-url' );\n+\tconst postType = searchs.data( 'post_type' ) || 'lp_course';\n+\n+\tif ( postType === 'lp_course' ) {\n+\t\tconst dataStruct = {\n+\t\t\turlApi: Api.admin.apiSearchCourses,\n+\t\t\tdataType: 'courses',\n+\t\t\tkeyGetValue: {\n+\t\t\t\tvalue: 'ID',\n+\t\t\t\ttext: '{{post_title}} (#{{ID}})',\n+\t\t\t\tkey_render: {\n+\t\t\t\t\tpost_title: 'post_title',\n+\t\t\t\t\tID: 'ID',\n+\t\t\t\t},\n+\t\t\t},\n+\t\t};\n+\t\tconst dataStructJson = JSON.stringify( dataStruct );\n+\t\tconst widgetListEl = document.querySelector( '#widget-list' );\n+\t\tlet nonTomSelectWidgetEls = '';\n+\t\tif ( widgetListEl ) {\n+\t\t\tconst tomSelectWidgetEls = Array.prototype.slice.call( widgetListEl.querySelectorAll( '.lp-widget_select_course' ) );\n+\t\t\tnonTomSelectWidgetEls = Array.prototype.slice.call( searchs ).filter( ( el ) => ! tomSelectWidgetEls.includes( el ) );\n+\t\t}\n+\n+\t\tnonTomSelectWidgetEls.forEach( ( nonTomSelectWidgetEl ) => {\n+\t\t\t$( nonTomSelectWidgetEl ).attr( 'data-struct', dataStructJson );\n+\t\t\tinitTomSelect( nonTomSelectWidgetEl );\n+\t\t} );\n+\t} else {\n+\t\tsearchs.select2( {\n+\t\t\tajax: {\n+\t\t\t\tmethod: 'GET',\n+\t\t\t\turl: wpRestUrl + 'wp\u002Fv2\u002F' + postType,\n+\t\t\t\tdataType: 'json',\n+\t\t\t\tdelay: 250,\n+\t\t\t\tdata( params ) {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tsearch: params.term,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tprocessResults( data, params ) {\n+\t\t\t\t\tparams.page = params.page || 1;\n+\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tresults: data,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tcache: true,\n+\t\t\t},\n+\t\t\tescapeMarkup( markup ) {\n+\t\t\t\treturn markup;\n+\t\t\t},\n+\t\t\tminimumInputLength: 2,\n+\t\t\ttemplateResult: formatCourse, \u002F\u002F omitted for brevity, see the source of this page\n+\t\t\ttemplateSelection: formatCourseSelection, \u002F\u002F omitted for brevity, see the source of this page\n+\t\t} );\n+\t}\n+}*\u002F\n+\n+document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\tif ( document.querySelector( '#widgets-editor' ) ) {\n+\t\t$( document ).on( 'widget-added', function( event, widget ) {\n+\t\t\t\u002F\u002FautocompleteWidget( widget );\n+\t\t} );\n+\t} else {\n+\t\t$( document ).on( 'learnpress\u002Fwidgets\u002Fselect', function() {\n+\t\t\t\u002F\u002FautocompleteWidget();\n+\t\t\tsortItem();\n+\t\t} );\n+\n+\t\t\u002F\u002FautocompleteWidget();\n+\t}\n+} );\n+\n+\u002F\u002FSortable checkbox\n+document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\tsortItem();\n+} );\n+\n+$( document ).on( 'widget-added widget-updated', function( event ) {\n+\tsortItem();\n+} );\n+\n+function sortItem() {\n+\t$( '.widget-content .sortable' ).sortable( {\n+\t\thandle: '.drag',\n+\n+\t\tstart( event, ui ) {\n+\n+\t\t},\n+\t\tupdate( event, ui ) {\n+\t\t\tconst value = [];\n+\t\t\t$( this ).children().map( function() {\n+\t\t\t\tvalue.push( $( this ).find( 'input' ).val() );\n+\t\t\t} );\n+\n+\t\t\tvalue.join( ',' );\n+\n+\t\t\tconst fieldSort = $( this ).closest( '.widget-content' ).find( 'input.fields-sort' );\n+\t\t\tfieldSort.val( value );\n+\t\t\tfieldSort.trigger( 'change' );\n+\t\t},\n+\t\tstop( event, ui ) {\n+\n+\t\t},\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,350 +1,350 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { withSelect, withDispatch, select as wpSelect } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-const { debounce } = lodash;\r\n-\r\n-import store from '.\u002Fstore';\r\n-\r\n-const stripSlashes = function stripSlashes( str ) {\r\n-\treturn ( str + '' ).replace( \u002F\\\\(.?)\u002Fg, function( s, n1 ) {\r\n-\t\tswitch ( n1 ) {\r\n-\t\tcase '\\\\':\r\n-\t\t\treturn '\\\\';\r\n-\t\tcase '0':\r\n-\t\t\treturn '\\u0000';\r\n-\t\tcase '':\r\n-\t\t\treturn '';\r\n-\t\tdefault:\r\n-\t\t\treturn n1;\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-class Editor extends Component {\r\n-\tconstructor( props ) {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tthis.state = {\r\n-\t\t\tblanks: [],\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tcomponentDidMount() {\r\n-\t\tconst {\r\n-\t\t\tsetData,\r\n-\t\t\tinitSettings,\r\n-\t\t} = this.props;\r\n-\t\tconst { blankOptions } = initSettings;\r\n-\t\tconst newBlanks = {};\r\n-\r\n-\t\tblankOptions.map( ( option ) => {\r\n-\t\t\tconst optionBlanks = this.getBlanks( option.text );\r\n-\t\t\tnewBlanks[ option.question_answer_id ] = optionBlanks ? optionBlanks[ 0 ] : [];\r\n-\t\t} );\r\n-\r\n-\t\tsetData( {\r\n-\t\t\tquestion: {\r\n-\t\t\t\t...initSettings,\r\n-\t\t\t\tblanks: newBlanks,\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t}\r\n-\r\n-    \u002F**\r\n-     * Parse blanks options from content and update state.\r\n-     *\r\n-     * @param option\r\n-     * @param text\r\n-     *\u002F\r\n-    setContent = ( option, text ) => {\r\n-    \tconst optionBlanks = this.getBlanks( text );\r\n-    \tconst {\r\n-    \t\tblankOptions,\r\n-    \t\tblanks,\r\n-    \t\tupdateOption,\r\n-    \t\tsetData,\r\n-    \t\tid,\r\n-    \t} = this.props;\r\n-\r\n-    \tconst newState = {\r\n-    \t\tblankOptions: blankOptions.map( ( opt ) => {\r\n-    \t\t\treturn opt.question_answer_id == option.question_answer_id ? {\r\n-    \t\t\t\t...opt,\r\n-    \t\t\t\ttext,\r\n-    \t\t\t} : opt;\r\n-    \t\t} ),\r\n-    \t\tblanks: {\r\n-    \t\t\t...blanks,\r\n-    \t\t\t[ option.question_answer_id ]: optionBlanks ? optionBlanks[ 0 ] : [],\r\n-    \t\t},\r\n-    \t};\r\n-\r\n-    \tsetData( newState, 'question' );\r\n-    \tthis.queue = this.queue || {};\r\n-    \tthis.queue[ option.question_answer_id ] = [ {\r\n-    \t\ttext,\r\n-    \t\tblanks: newState.blanks[ option.question_answer_id ],\r\n-    \t}, option.question_answer_id, id ];\r\n-\r\n-    \tthis.updateOption();\r\n-    };\r\n-\r\n-    updateOption = debounce( () => {\r\n-    \tconst {\r\n-    \t\tupdateOption,\r\n-    \t} = this.props;\r\n-\r\n-    \tconst queue = this.queue ? Object.values( this.queue ) : [];\r\n-\r\n-    \tqueue.map( ( item ) => {\r\n-    \t\tif ( item ) {\r\n-    \t\t\tupdateOption( item[ 0 ], item[ 1 ], item[ 2 ] );\r\n-    \t\t\tdelete this.queue[ item[ 1 ] ];\r\n-    \t\t}\r\n-    \t} );\r\n-    }, 1000 );\r\n-\r\n-    \u002F**\r\n-     * Get blanks from a content and return.\r\n-     *\r\n-     * @param content\r\n-     * @return {Array}\r\n-     *\u002F\r\n-    getBlanks = ( content ) => {\r\n-    \t\u002F\u002F if (undefined === content) {\r\n-    \t\u002F\u002F     content = this.state.passage;\r\n-    \t\u002F\u002F }\r\n-\r\n-    \tconst blanks = [];\r\n-    \tconst shortcodes = content.match( \u002F\\{\\{([^\\{\\\"\\'].*?)\\}\\}\u002Fg );\r\n-\r\n-    \tif ( shortcodes ) {\r\n-    \t\tshortcodes.map( ( shortcode ) => {\r\n-    \t\t\tblanks.push( this.getBlank( shortcode ) );\r\n-    \t\t} );\r\n-    \t}\r\n-    \treturn blanks;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Parse details from a blank.\r\n-     *\r\n-     * @param blank\r\n-     * @return {{words: Array, tip: string, corrects: Array}}\r\n-     *\u002F\r\n-    getBlank = ( blank ) => {\r\n-    \tconst contents = blank.match( \u002F\\{\\{(.*)\\}\\}\u002F );\r\n-    \tconst words = contents && contents[ 1 ] ? contents[ 1 ].split( '\u002F' ) : [];\r\n-    \tconst matchTip = words.length ? words[ words.length - 1 ].match( \u002F(.*)(\\s(\\\"(.*)\\\"|\\'(.*)\\'))\u002F ) : false;\r\n-    \tconst corrects = [];\r\n-\r\n-    \t\u002F\u002F Remove tip from last word. (last-word \"This is tip of the blank\")\r\n-    \tif ( matchTip ) {\r\n-    \t\twords[ words.length - 1 ] = matchTip[ 1 ];\r\n-    \t}\r\n-\r\n-    \twords.map( ( word, i ) => {\r\n-    \t\t\u002F\u002F Match the word wrapped by [ and ] is CORRECT word\r\n-    \t\tconst matchCorrect = word.match( \u002F\\[(.*)\\]\u002F );\r\n-\r\n-    \t\tif ( matchCorrect ) {\r\n-    \t\t\t\u002F\u002F Remove the \"[\" and \"]\"\r\n-    \t\t\tmatchCorrect[ 1 ] = stripSlashes( matchCorrect[ 1 ] );\r\n-    \t\t\tcorrects.push( matchCorrect[ 1 ] );\r\n-    \t\t\twords[ i ] = matchCorrect[ 1 ];\r\n-    \t\t} else {\r\n-    \t\t\twords[ i ] = stripSlashes( word );\r\n-    \t\t}\r\n-    \t} );\r\n-\r\n-    \treturn {\r\n-    \t\twords: words.filter( ( w ) => {\r\n-    \t\t\treturn w && w.length;\r\n-    \t\t} ),\r\n-    \t\ttip: matchTip ? stripSlashes( matchTip[ 4 ] || matchTip[ 5 ] || '' ) : '',\r\n-    \t\tcorrects: corrects.filter( ( w ) => {\r\n-    \t\t\treturn w && w.length;\r\n-    \t\t} ),\r\n-    \t};\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Event handler for each input in blanks.\r\n-     *\r\n-     * @param answer\r\n-     *\u002F\r\n-    onChangeOption = ( answer ) => ( event ) => {\r\n-    \tconst {\r\n-    \t\tinstantParseBlanks,\r\n-    \t} = this.props;\r\n-\r\n-    \tif ( instantParseBlanks ) {\r\n-    \t\tthis.setContent( answer, event.target.value );\r\n-    \t}\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Event handler to add new blank to question\r\n-     *\r\n-     * @param event\r\n-     *\u002F\r\n-    addBlank = ( event ) => {\r\n-    \tconst {\r\n-    \t\taddOption,\r\n-    \t\tid,\r\n-    \t} = this.props;\r\n-\r\n-    \taddOption( id, { text: 'asdasdasd' } );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Event handler to remove a blank.\r\n-     *\r\n-     * @param option\r\n-     *\u002F\r\n-    removeBlank = ( option ) => () => {\r\n-    \tconst {\r\n-    \t\tid,\r\n-    \t\tremoveOption,\r\n-    \t} = this.props;\r\n-\r\n-    \tremoveOption( id, option.question_answer_id );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Get html of passage content for preview.\r\n-     *\r\n-     * @return {string}\r\n-     *\u002F\r\n-    getPreview = () => {\r\n-    \tconst {\r\n-    \t\tblankOptions,\r\n-    \t\tblankFillsStyle,\r\n-    \t\tblanksStyle,\r\n-    \t} = this.props;\r\n-\r\n-    \tif ( ! blankOptions ) {\r\n-    \t\treturn '';\r\n-    \t}\r\n-\r\n-    \tconst preview = blankOptions.map( ( answer ) => {\r\n-    \t\tconst blanks = this.getBlanks( answer.text );\r\n-    \t\tconst blank = blanks ? blanks[ 0 ] : {};\r\n-\r\n-    \t\tlet html = '';\r\n-\r\n-    \t\tif ( blank && blank.words.length ) {\r\n-    \t\t\thtml = '\u003Cspan class=\"blank-input\">\u003C\u002Fspan>';\r\n-\r\n-    \t\t\tif ( blank.words.length > 1 ) {\r\n-    \t\t\t\tswitch ( blankFillsStyle ) {\r\n-    \t\t\t\tcase 'select':\r\n-    \t\t\t\t\thtml += '\u003Cselect>' + blank.words.map( ( word ) => {\r\n-    \t\t\t\t\t\treturn `\u003Coption value=${ word }>${ word }\u003C\u002Foption>`;\r\n-    \t\t\t\t\t} ).join( '' ) + '\u003C\u002Fselect>';\r\n-\r\n-    \t\t\t\t\tbreak;\r\n-    \t\t\t\tcase 'enumeration':\r\n-    \t\t\t\t\thtml += '(' + blank.words.map( ( word ) => {\r\n-    \t\t\t\t\t\treturn `\u003Ccode>${ word }\u003C\u002Fcode>`;\r\n-    \t\t\t\t\t} ).join( ', ' ) + ')';\r\n-    \t\t\t\t\tbreak;\r\n-    \t\t\t\t}\r\n-    \t\t\t}\r\n-\r\n-    \t\t\tif ( blank.tip ) {\r\n-    \t\t\t\thtml += '?';\r\n-    \t\t\t}\r\n-    \t\t}\r\n-\r\n-    \t\treturn ( '' + answer.text ).replace( \u002F\\{\\{(.*)\\}\\}\u002F, html );\r\n-    \t} ).join( blanksStyle === 'paragraphs' ? '\u003C\u002Fdiv>\u003Cdiv>' : ( blanksStyle === 'ordered' ? '\u003C\u002Fli>\u003Cli>' : ' ' ) );\r\n-\r\n-    \treturn blanksStyle === 'paragraphs' ? `\u003Cdiv>${ preview }\u003C\u002Fdiv>` : ( blanksStyle === 'ordered' ? `\u003Col>\u003Cli>${ preview }\u003C\u002Fli>\u003C\u002Fol>` : preview );\r\n-    };\r\n-\r\n-    render() {\r\n-    \tconst {\r\n-    \t\tblanks,\r\n-    \t\tblankOptions,\r\n-    \t} = this.props;\r\n-\r\n-    \treturn \u003CReact.Fragment>\r\n-    \t\t\u003Cdiv className=\"blank-options\">\r\n-    \t\t\t{ blankOptions && (\r\n-\t\u003Cul className=\"blanks\">\r\n-    \t\t\t\t\t{\r\n-    \t\t\t\t\t\tblankOptions.map( ( answer ) => {\r\n-    \t\t\t\t\t\t\tconst blankOptions = blanks[ answer.question_answer_id ] || {};\r\n-\r\n-    \t\t\t\t\t\t\treturn \u003Cli className=\"blank\" key={ answer.question_answer_id }>\r\n-    \t\t\t\t\t\t\t\t\u003Ctextarea className=\"blank-content\" onChange={ this.onChangeOption( answer ) }\r\n-    \t\t\t\t\t\t\t\t\tvalue={ answer.text }>\r\n-\t\u003C\u002Ftextarea>\r\n-    \t\t\t\t\t\t\t\t{ blankOptions.words && (\r\n-\t\u003Cdiv className=\"blank-words\">\r\n-    \t\t\t\t\t\t\t\t\t\t\u003Clabel>{ __( 'Words fill', 'learnpress' ) }\u003C\u002Flabel>\r\n-    \t\t\t\t\t\t\t\t\t\t\u003Cp>\r\n-    \t\t\t\t\t\t\t\t\t\t\t{\r\n-    \t\t\t\t\t\t\t\t\t\t\t\tblankOptions.words && blankOptions.words.map( ( word, i ) => {\r\n-    \t\t\t\t\t\t\t\t\t\t\t\t\tconst className = [ 'word' ];\r\n-    \t\t\t\t\t\t\t\t\t\t\t\t\t( blankOptions.corrects || [] ).indexOf( word ) !== -1 && className.push( 'correct' );\r\n-\r\n-    \t\t\t\t\t\t\t\t\t\t\t\t\treturn \u003Ccode key={ `word-${ word }-${ i }` }\r\n-    \t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={ className.join( ' ' ) }>{ word }\u003C\u002Fcode>;\r\n-    \t\t\t\t\t\t\t\t\t\t\t\t} )\r\n-    \t\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\u003C\u002Fp>\r\n-    \t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-    \t\t\t\t\t\t\t\t)\r\n-    \t\t\t\t\t\t\t\t}\r\n-\r\n-    \t\t\t\t\t\t\t\t{ blankOptions.tip && (\r\n-\t\u003Cdiv className=\"blank-tip\">\r\n-    \t\t\t\t\t\t\t\t\t\t\u003Clabel>{ __( 'Tip', 'learnpress' ) }\u003C\u002Flabel>\r\n-    \t\t\t\t\t\t\t\t\t\t\u003Cp>{ blankOptions.tip }\u003C\u002Fp>\r\n-    \t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-    \t\t\t\t\t\t\t\t)\r\n-    \t\t\t\t\t\t\t\t}\r\n-\r\n-    \t\t\t\t\t\t\t\t\u003Cbutton className=\"button button-remove\"\r\n-    \t\t\t\t\t\t\t\t\tonClick={ this.removeBlank( answer ) }>{ __( 'Remove', 'learnpress' ) }\u003C\u002Fbutton>\r\n-    \t\t\t\t\t\t\t\u003C\u002Fli>;\r\n-    \t\t\t\t\t\t} )\r\n-    \t\t\t\t\t}\r\n-    \t\t\t\t\u003C\u002Ful> )\r\n-    \t\t\t}\r\n-    \t\t\t\u003Cbutton className=\"button\" onClick={ this.addBlank }>{ __( 'Add Blank', 'learnpress' ) }\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n-    \t\t\u003Cdiv className=\"passage-preview\" dangerouslySetInnerHTML={ { __html: this.getPreview() } }>\r\n-\t\u003C\u002Fdiv>\r\n-    \t\u003C\u002FReact.Fragment>;\r\n-    }\r\n-}\r\n-\r\n-export default compose( [\r\n-\twithSelect( ( select ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t} = select( 'learnpress\u002Fquestion' );\r\n-\r\n-\t\treturn getData( 'question' );\r\n-\t} ),\r\n-\twithDispatch( ( dispatch ) => {\r\n-\t\tconst {\r\n-\t\t\tsetData,\r\n-\t\t\taddOption,\r\n-\t\t\tremoveOption,\r\n-\t\t\tupdateOption,\r\n-\t\t} = dispatch( 'learnpress\u002Fquestion' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tsetData,\r\n-\t\t\taddOption,\r\n-\t\t\tremoveOption,\r\n-\t\t\tupdateOption,\r\n-\t\t};\r\n-\t} ),\r\n-] )( Editor );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { withSelect, withDispatch, select as wpSelect } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+const { debounce } = lodash;\n+\n+import store from '.\u002Fstore';\n+\n+const stripSlashes = function stripSlashes( str ) {\n+\treturn ( str + '' ).replace( \u002F\\\\(.?)\u002Fg, function( s, n1 ) {\n+\t\tswitch ( n1 ) {\n+\t\tcase '\\\\':\n+\t\t\treturn '\\\\';\n+\t\tcase '0':\n+\t\t\treturn '\\u0000';\n+\t\tcase '':\n+\t\t\treturn '';\n+\t\tdefault:\n+\t\t\treturn n1;\n+\t\t}\n+\t} );\n+};\n+\n+class Editor extends Component {\n+\tconstructor( props ) {\n+\t\tsuper( ...arguments );\n+\n+\t\tthis.state = {\n+\t\t\tblanks: [],\n+\t\t};\n+\t}\n+\n+\tcomponentDidMount() {\n+\t\tconst {\n+\t\t\tsetData,\n+\t\t\tinitSettings,\n+\t\t} = this.props;\n+\t\tconst { blankOptions } = initSettings;\n+\t\tconst newBlanks = {};\n+\n+\t\tblankOptions.map( ( option ) => {\n+\t\t\tconst optionBlanks = this.getBlanks( option.text );\n+\t\t\tnewBlanks[ option.question_answer_id ] = optionBlanks ? optionBlanks[ 0 ] : [];\n+\t\t} );\n+\n+\t\tsetData( {\n+\t\t\tquestion: {\n+\t\t\t\t...initSettings,\n+\t\t\t\tblanks: newBlanks,\n+\t\t\t},\n+\t\t} );\n+\t}\n+\n+    \u002F**\n+     * Parse blanks options from content and update state.\n+     *\n+     * @param option\n+     * @param text\n+     *\u002F\n+    setContent = ( option, text ) => {\n+    \tconst optionBlanks = this.getBlanks( text );\n+    \tconst {\n+    \t\tblankOptions,\n+    \t\tblanks,\n+    \t\tupdateOption,\n+    \t\tsetData,\n+    \t\tid,\n+    \t} = this.props;\n+\n+    \tconst newState = {\n+    \t\tblankOptions: blankOptions.map( ( opt ) => {\n+    \t\t\treturn opt.question_answer_id == option.question_answer_id ? {\n+    \t\t\t\t...opt,\n+    \t\t\t\ttext,\n+    \t\t\t} : opt;\n+    \t\t} ),\n+    \t\tblanks: {\n+    \t\t\t...blanks,\n+    \t\t\t[ option.question_answer_id ]: optionBlanks ? optionBlanks[ 0 ] : [],\n+    \t\t},\n+    \t};\n+\n+    \tsetData( newState, 'question' );\n+    \tthis.queue = this.queue || {};\n+    \tthis.queue[ option.question_answer_id ] = [ {\n+    \t\ttext,\n+    \t\tblanks: newState.blanks[ option.question_answer_id ],\n+    \t}, option.question_answer_id, id ];\n+\n+    \tthis.updateOption();\n+    };\n+\n+    updateOption = debounce( () => {\n+    \tconst {\n+    \t\tupdateOption,\n+    \t} = this.props;\n+\n+    \tconst queue = this.queue ? Object.values( this.queue ) : [];\n+\n+    \tqueue.map( ( item ) => {\n+    \t\tif ( item ) {\n+    \t\t\tupdateOption( item[ 0 ], item[ 1 ], item[ 2 ] );\n+    \t\t\tdelete this.queue[ item[ 1 ] ];\n+    \t\t}\n+    \t} );\n+    }, 1000 );\n+\n+    \u002F**\n+     * Get blanks from a content and return.\n+     *\n+     * @param content\n+     * @return {Array}\n+     *\u002F\n+    getBlanks = ( content ) => {\n+    \t\u002F\u002F if (undefined === content) {\n+    \t\u002F\u002F     content = this.state.passage;\n+    \t\u002F\u002F }\n+\n+    \tconst blanks = [];\n+    \tconst shortcodes = content.match( \u002F\\{\\{([^\\{\\\"\\'].*?)\\}\\}\u002Fg );\n+\n+    \tif ( shortcodes ) {\n+    \t\tshortcodes.map( ( shortcode ) => {\n+    \t\t\tblanks.push( this.getBlank( shortcode ) );\n+    \t\t} );\n+    \t}\n+    \treturn blanks;\n+    };\n+\n+    \u002F**\n+     * Parse details from a blank.\n+     *\n+     * @param blank\n+     * @return {{words: Array, tip: string, corrects: Array}}\n+     *\u002F\n+    getBlank = ( blank ) => {\n+    \tconst contents = blank.match( \u002F\\{\\{(.*)\\}\\}\u002F );\n+    \tconst words = contents && contents[ 1 ] ? contents[ 1 ].split( '\u002F' ) : [];\n+    \tconst matchTip = words.length ? words[ words.length - 1 ].match( \u002F(.*)(\\s(\\\"(.*)\\\"|\\'(.*)\\'))\u002F ) : false;\n+    \tconst corrects = [];\n+\n+    \t\u002F\u002F Remove tip from last word. (last-word \"This is tip of the blank\")\n+    \tif ( matchTip ) {\n+    \t\twords[ words.length - 1 ] = matchTip[ 1 ];\n+    \t}\n+\n+    \twords.map( ( word, i ) => {\n+    \t\t\u002F\u002F Match the word wrapped by [ and ] is CORRECT word\n+    \t\tconst matchCorrect = word.match( \u002F\\[(.*)\\]\u002F );\n+\n+    \t\tif ( matchCorrect ) {\n+    \t\t\t\u002F\u002F Remove the \"[\" and \"]\"\n+    \t\t\tmatchCorrect[ 1 ] = stripSlashes( matchCorrect[ 1 ] );\n+    \t\t\tcorrects.push( matchCorrect[ 1 ] );\n+    \t\t\twords[ i ] = matchCorrect[ 1 ];\n+    \t\t} else {\n+    \t\t\twords[ i ] = stripSlashes( word );\n+    \t\t}\n+    \t} );\n+\n+    \treturn {\n+    \t\twords: words.filter( ( w ) => {\n+    \t\t\treturn w && w.length;\n+    \t\t} ),\n+    \t\ttip: matchTip ? stripSlashes( matchTip[ 4 ] || matchTip[ 5 ] || '' ) : '',\n+    \t\tcorrects: corrects.filter( ( w ) => {\n+    \t\t\treturn w && w.length;\n+    \t\t} ),\n+    \t};\n+    };\n+\n+    \u002F**\n+     * Event handler for each input in blanks.\n+     *\n+     * @param answer\n+     *\u002F\n+    onChangeOption = ( answer ) => ( event ) => {\n+    \tconst {\n+    \t\tinstantParseBlanks,\n+    \t} = this.props;\n+\n+    \tif ( instantParseBlanks ) {\n+    \t\tthis.setContent( answer, event.target.value );\n+    \t}\n+    };\n+\n+    \u002F**\n+     * Event handler to add new blank to question\n+     *\n+     * @param event\n+     *\u002F\n+    addBlank = ( event ) => {\n+    \tconst {\n+    \t\taddOption,\n+    \t\tid,\n+    \t} = this.props;\n+\n+    \taddOption( id, { text: 'asdasdasd' } );\n+    };\n+\n+    \u002F**\n+     * Event handler to remove a blank.\n+     *\n+     * @param option\n+     *\u002F\n+    removeBlank = ( option ) => () => {\n+    \tconst {\n+    \t\tid,\n+    \t\tremoveOption,\n+    \t} = this.props;\n+\n+    \tremoveOption( id, option.question_answer_id );\n+    };\n+\n+    \u002F**\n+     * Get html of passage content for preview.\n+     *\n+     * @return {string}\n+     *\u002F\n+    getPreview = () => {\n+    \tconst {\n+    \t\tblankOptions,\n+    \t\tblankFillsStyle,\n+    \t\tblanksStyle,\n+    \t} = this.props;\n+\n+    \tif ( ! blankOptions ) {\n+    \t\treturn '';\n+    \t}\n+\n+    \tconst preview = blankOptions.map( ( answer ) => {\n+    \t\tconst blanks = this.getBlanks( answer.text );\n+    \t\tconst blank = blanks ? blanks[ 0 ] : {};\n+\n+    \t\tlet html = '';\n+\n+    \t\tif ( blank && blank.words.length ) {\n+    \t\t\thtml = '\u003Cspan class=\"blank-input\">\u003C\u002Fspan>';\n+\n+    \t\t\tif ( blank.words.length > 1 ) {\n+    \t\t\t\tswitch ( blankFillsStyle ) {\n+    \t\t\t\tcase 'select':\n+    \t\t\t\t\thtml += '\u003Cselect>' + blank.words.map( ( word ) => {\n+    \t\t\t\t\t\treturn `\u003Coption value=${ word }>${ word }\u003C\u002Foption>`;\n+    \t\t\t\t\t} ).join( '' ) + '\u003C\u002Fselect>';\n+\n+    \t\t\t\t\tbreak;\n+    \t\t\t\tcase 'enumeration':\n+    \t\t\t\t\thtml += '(' + blank.words.map( ( word ) => {\n+    \t\t\t\t\t\treturn `\u003Ccode>${ word }\u003C\u002Fcode>`;\n+    \t\t\t\t\t} ).join( ', ' ) + ')';\n+    \t\t\t\t\tbreak;\n+    \t\t\t\t}\n+    \t\t\t}\n+\n+    \t\t\tif ( blank.tip ) {\n+    \t\t\t\thtml += '?';\n+    \t\t\t}\n+    \t\t}\n+\n+    \t\treturn ( '' + answer.text ).replace( \u002F\\{\\{(.*)\\}\\}\u002F, html );\n+    \t} ).join( blanksStyle === 'paragraphs' ? '\u003C\u002Fdiv>\u003Cdiv>' : ( blanksStyle === 'ordered' ? '\u003C\u002Fli>\u003Cli>' : ' ' ) );\n+\n+    \treturn blanksStyle === 'paragraphs' ? `\u003Cdiv>${ preview }\u003C\u002Fdiv>` : ( blanksStyle === 'ordered' ? `\u003Col>\u003Cli>${ preview }\u003C\u002Fli>\u003C\u002Fol>` : preview );\n+    };\n+\n+    render() {\n+    \tconst {\n+    \t\tblanks,\n+    \t\tblankOptions,\n+    \t} = this.props;\n+\n+    \treturn \u003CReact.Fragment>\n+    \t\t\u003Cdiv className=\"blank-options\">\n+    \t\t\t{ blankOptions && (\n+\t\u003Cul className=\"blanks\">\n+    \t\t\t\t\t{\n+    \t\t\t\t\t\tblankOptions.map( ( answer ) => {\n+    \t\t\t\t\t\t\tconst blankOptions = blanks[ answer.question_answer_id ] || {};\n+\n+    \t\t\t\t\t\t\treturn \u003Cli className=\"blank\" key={ answer.question_answer_id }>\n+    \t\t\t\t\t\t\t\t\u003Ctextarea className=\"blank-content\" onChange={ this.onChangeOption( answer ) }\n+    \t\t\t\t\t\t\t\t\tvalue={ answer.text }>\n+\t\u003C\u002Ftextarea>\n+    \t\t\t\t\t\t\t\t{ blankOptions.words && (\n+\t\u003Cdiv className=\"blank-words\">\n+    \t\t\t\t\t\t\t\t\t\t\u003Clabel>{ __( 'Words fill', 'learnpress' ) }\u003C\u002Flabel>\n+    \t\t\t\t\t\t\t\t\t\t\u003Cp>\n+    \t\t\t\t\t\t\t\t\t\t\t{\n+    \t\t\t\t\t\t\t\t\t\t\t\tblankOptions.words && blankOptions.words.map( ( word, i ) => {\n+    \t\t\t\t\t\t\t\t\t\t\t\t\tconst className = [ 'word' ];\n+    \t\t\t\t\t\t\t\t\t\t\t\t\t( blankOptions.corrects || [] ).indexOf( word ) !== -1 && className.push( 'correct' );\n+\n+    \t\t\t\t\t\t\t\t\t\t\t\t\treturn \u003Ccode key={ `word-${ word }-${ i }` }\n+    \t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={ className.join( ' ' ) }>{ word }\u003C\u002Fcode>;\n+    \t\t\t\t\t\t\t\t\t\t\t\t} )\n+    \t\t\t\t\t\t\t\t\t\t\t}\n+\t\t\u003C\u002Fp>\n+    \t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+    \t\t\t\t\t\t\t\t)\n+    \t\t\t\t\t\t\t\t}\n+\n+    \t\t\t\t\t\t\t\t{ blankOptions.tip && (\n+\t\u003Cdiv className=\"blank-tip\">\n+    \t\t\t\t\t\t\t\t\t\t\u003Clabel>{ __( 'Tip', 'learnpress' ) }\u003C\u002Flabel>\n+    \t\t\t\t\t\t\t\t\t\t\u003Cp>{ blankOptions.tip }\u003C\u002Fp>\n+    \t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+    \t\t\t\t\t\t\t\t)\n+    \t\t\t\t\t\t\t\t}\n+\n+    \t\t\t\t\t\t\t\t\u003Cbutton className=\"button button-remove\"\n+    \t\t\t\t\t\t\t\t\tonClick={ this.removeBlank( answer ) }>{ __( 'Remove', 'learnpress' ) }\u003C\u002Fbutton>\n+    \t\t\t\t\t\t\t\u003C\u002Fli>;\n+    \t\t\t\t\t\t} )\n+    \t\t\t\t\t}\n+    \t\t\t\t\u003C\u002Ful> )\n+    \t\t\t}\n+    \t\t\t\u003Cbutton className=\"button\" onClick={ this.addBlank }>{ __( 'Add Blank', 'learnpress' ) }\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n+    \t\t\u003Cdiv className=\"passage-preview\" dangerouslySetInnerHTML={ { __html: this.getPreview() } }>\n+\t\u003C\u002Fdiv>\n+    \t\u003C\u002FReact.Fragment>;\n+    }\n+}\n+\n+export default compose( [\n+\twithSelect( ( select ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t} = select( 'learnpress\u002Fquestion' );\n+\n+\t\treturn getData( 'question' );\n+\t} ),\n+\twithDispatch( ( dispatch ) => {\n+\t\tconst {\n+\t\t\tsetData,\n+\t\t\taddOption,\n+\t\t\tremoveOption,\n+\t\t\tupdateOption,\n+\t\t} = dispatch( 'learnpress\u002Fquestion' );\n+\n+\t\treturn {\n+\t\t\tsetData,\n+\t\t\taddOption,\n+\t\t\tremoveOption,\n+\t\t\tupdateOption,\n+\t\t};\n+\t} ),\n+] )( Editor );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Factions.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Factions.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Factions.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Factions.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,105 +1,105 @@\n-import {dispatch, select, apiFetch} from '@learnpress\u002Fdata-controls';\r\n-import {select as wpSelect} from '@wordpress\u002Fdata';\r\n-\r\n-const getEditorNonce = function getEditorNonce() {\r\n-    return lp_question_editor.root.nonce;\r\n-}\r\n-\r\n-\u002F**\r\n- * Set user data for app.\r\n- * @param key\r\n- * @param data\r\n- * @return {{type: string, data: *}}\r\n- *\u002F\r\n-export function setData( data, key ) {\r\n-    return {\r\n-        type: 'SET_DATA',\r\n-        data,\r\n-        key\r\n-    }\r\n-}\r\n-\r\n-export function __addOption(id, option) {\r\n-    return {\r\n-        type: 'ADD_OPTION',\r\n-        id,\r\n-        option\r\n-    }\r\n-}\r\n-\r\n-\u002F**\r\n- * Add new blank and send to rest\r\n- *\u002F\r\n-export function* addOption(questionId, option) {\r\n-    const results = yield apiFetch({\r\n-        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fadd-option',\r\n-        method: 'POST',\r\n-        data: {\r\n-            nonce: getEditorNonce(),\r\n-            type: 'new-answer',\r\n-            id: questionId,\r\n-            option\r\n-        }\r\n-    });\r\n-\r\n-    yield dispatch('learnpress\u002Fquestion', '__addOption', questionId, results.result);\r\n-}\r\n-\r\n-export function __removeOption(questionId, optionId) {\r\n-    return {\r\n-        type: 'REMOVE_OPTION',\r\n-        id: questionId,\r\n-        optionId\r\n-    }\r\n-}\r\n-\r\n-\u002F**\r\n- * Send a rest request to remove answer option.\r\n- *\r\n- * @param questionId\r\n- * @param optionId\r\n- *\u002F\r\n-export function* removeOption(questionId, optionId) {\r\n-    const results = yield apiFetch({\r\n-        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fremove-option',\r\n-        method: 'POST',\r\n-        data: {\r\n-            nonce: getEditorNonce(),\r\n-            type: 'delete-answer',\r\n-            id: questionId,\r\n-            answer_id: optionId\r\n-        }\r\n-    });\r\n-\r\n-    yield dispatch('learnpress\u002Fquestion', '__removeOption', questionId, optionId);\r\n-}\r\n-\r\n-export function __updateOption(option, optionId, questionId) {\r\n-    return {\r\n-        type: 'UPDATE_OPTION',\r\n-        id: questionId,\r\n-        optionId,\r\n-        option\r\n-    }\r\n-}\r\n-\r\n-export function* updateOption(option, optionId, questionId) {\r\n-\r\n-    const results = yield apiFetch({\r\n-        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fupdate-option',\r\n-        method: 'POST',\r\n-        data: {\r\n-            type: 'update-answer-title',\r\n-            answer: {\r\n-                ...option,\r\n-                question_answer_id: optionId\r\n-            },\r\n-            id:questionId,\r\n-            nonce: getEditorNonce()\r\n-        }\r\n-    });\r\n-\r\n-    yield dispatch('learnpress\u002Fquestion', '__updateOption', option);\r\n-\r\n-    \u002F\u002Fyield dispatch('learnpress\u002Fquiz', '__requestStartQuizSuccess', quiz);\r\n-}\r\n+import {dispatch, select, apiFetch} from '@learnpress\u002Fdata-controls';\n+import {select as wpSelect} from '@wordpress\u002Fdata';\n+\n+const getEditorNonce = function getEditorNonce() {\n+    return lp_question_editor.root.nonce;\n+}\n+\n+\u002F**\n+ * Set user data for app.\n+ * @param key\n+ * @param data\n+ * @return {{type: string, data: *}}\n+ *\u002F\n+export function setData( data, key ) {\n+    return {\n+        type: 'SET_DATA',\n+        data,\n+        key\n+    }\n+}\n+\n+export function __addOption(id, option) {\n+    return {\n+        type: 'ADD_OPTION',\n+        id,\n+        option\n+    }\n+}\n+\n+\u002F**\n+ * Add new blank and send to rest\n+ *\u002F\n+export function* addOption(questionId, option) {\n+    const results = yield apiFetch({\n+        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fadd-option',\n+        method: 'POST',\n+        data: {\n+            nonce: getEditorNonce(),\n+            type: 'new-answer',\n+            id: questionId,\n+            option\n+        }\n+    });\n+\n+    yield dispatch('learnpress\u002Fquestion', '__addOption', questionId, results.result);\n+}\n+\n+export function __removeOption(questionId, optionId) {\n+    return {\n+        type: 'REMOVE_OPTION',\n+        id: questionId,\n+        optionId\n+    }\n+}\n+\n+\u002F**\n+ * Send a rest request to remove answer option.\n+ *\n+ * @param questionId\n+ * @param optionId\n+ *\u002F\n+export function* removeOption(questionId, optionId) {\n+    const results = yield apiFetch({\n+        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fremove-option',\n+        method: 'POST',\n+        data: {\n+            nonce: getEditorNonce(),\n+            type: 'delete-answer',\n+            id: questionId,\n+            answer_id: optionId\n+        }\n+    });\n+\n+    yield dispatch('learnpress\u002Fquestion', '__removeOption', questionId, optionId);\n+}\n+\n+export function __updateOption(option, optionId, questionId) {\n+    return {\n+        type: 'UPDATE_OPTION',\n+        id: questionId,\n+        optionId,\n+        option\n+    }\n+}\n+\n+export function* updateOption(option, optionId, questionId) {\n+\n+    const results = yield apiFetch({\n+        path: 'lp\u002Fa\u002Fv1\u002Fquestion\u002F' + questionId + '\u002Fupdate-option',\n+        method: 'POST',\n+        data: {\n+            type: 'update-answer-title',\n+            answer: {\n+                ...option,\n+                question_answer_id: optionId\n+            },\n+            id:questionId,\n+            nonce: getEditorNonce()\n+        }\n+    });\n+\n+    yield dispatch('learnpress\u002Fquestion', '__updateOption', option);\n+\n+    \u002F\u002Fyield dispatch('learnpress\u002Fquiz', '__requestStartQuizSuccess', quiz);\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-import {registerStore} from '@wordpress\u002Fdata';\r\n-\r\n-import reducer from '.\u002Freducer';\r\n-import * as actions from '.\u002Factions';\r\n-import * as selectors from '.\u002Fselectors';\r\n-import applyMiddlewares from '.\u002Fmiddlewares';\r\n-\r\n-const {controls: dataControls} = LP.dataControls;\r\n-\r\n-const store = registerStore('learnpress\u002Fquestion', {\r\n-    reducer,\r\n-    selectors,\r\n-    actions,\r\n-    controls: {\r\n-        ...dataControls\r\n-    }\r\n-});\r\n-\r\n-applyMiddlewares(store);\r\n-\r\n-export default store;\r\n+import {registerStore} from '@wordpress\u002Fdata';\n+\n+import reducer from '.\u002Freducer';\n+import * as actions from '.\u002Factions';\n+import * as selectors from '.\u002Fselectors';\n+import applyMiddlewares from '.\u002Fmiddlewares';\n+\n+const {controls: dataControls} = LP.dataControls;\n+\n+const store = registerStore('learnpress\u002Fquestion', {\n+    reducer,\n+    selectors,\n+    actions,\n+    controls: {\n+        ...dataControls\n+    }\n+});\n+\n+applyMiddlewares(store);\n+\n+export default store;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fmiddlewares.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fmiddlewares.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fmiddlewares.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fmiddlewares.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u002F**\r\n- * External dependencies\r\n- *\u002F\r\n-import refx from 'refx';\r\n-\r\n-\u002F**\r\n- * Internal dependencies\r\n- *\u002F\r\n-\u002F\u002Fimport effects from '.\u002Feffects';\r\n-\r\n-const effects = {\r\n-\tENROLL_COURSE_X: ( action, store ) => {\r\n-\t\tenrollCourse:( action, store ) => {\r\n-\t\t\tconst { dispatch } = store;\r\n-\r\n-\t\t\t\u002F\u002Fdispatch()\r\n-\t\t};\r\n-\t},\r\n-};\r\n-\r\n-\u002F**\r\n- * Applies the custom middlewares used specifically in the editor module.\r\n- *\r\n- * @param {Object} store Store Object.\r\n- *\r\n- * @return {Object} Update Store Object.\r\n- *\u002F\r\n-function applyMiddlewares( store ) {\r\n-\tlet enhancedDispatch = () => {\r\n-\t\tthrow new Error(\r\n-\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\r\n-            'Other middleware would not be applied to this dispatch.'\r\n-\t\t);\r\n-\t};\r\n-\r\n-\tconst middlewareAPI = {\r\n-\t\tgetState: store.getState,\r\n-\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\r\n-\t};\r\n-\r\n-\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\r\n-\r\n-\tstore.dispatch = enhancedDispatch;\r\n-\treturn store;\r\n-}\r\n-\r\n-export default applyMiddlewares;\r\n+\u002F**\n+ * External dependencies\n+ *\u002F\n+import refx from 'refx';\n+\n+\u002F**\n+ * Internal dependencies\n+ *\u002F\n+\u002F\u002Fimport effects from '.\u002Feffects';\n+\n+const effects = {\n+\tENROLL_COURSE_X: ( action, store ) => {\n+\t\tenrollCourse:( action, store ) => {\n+\t\t\tconst { dispatch } = store;\n+\n+\t\t\t\u002F\u002Fdispatch()\n+\t\t};\n+\t},\n+};\n+\n+\u002F**\n+ * Applies the custom middlewares used specifically in the editor module.\n+ *\n+ * @param {Object} store Store Object.\n+ *\n+ * @return {Object} Update Store Object.\n+ *\u002F\n+function applyMiddlewares( store ) {\n+\tlet enhancedDispatch = () => {\n+\t\tthrow new Error(\n+\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\n+            'Other middleware would not be applied to this dispatch.'\n+\t\t);\n+\t};\n+\n+\tconst middlewareAPI = {\n+\t\tgetState: store.getState,\n+\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\n+\t};\n+\n+\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\n+\n+\tstore.dispatch = enhancedDispatch;\n+\treturn store;\n+}\n+\n+export default applyMiddlewares;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Freducer.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Freducer.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Freducer.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Freducer.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-import {combineReducers} from '@wordpress\u002Fdata';\r\n-\r\n-const {omit, flow, isArray, remove, get, set} = lodash;\r\n-const STORE_DATA = {\r\n-    question: false\r\n-};\r\n-\r\n-\u002F**\r\n- * Remove an option from question answers.\r\n- *\r\n- * @param {object} state\r\n- * @param {int} optionId\r\n- * @param {int} id\r\n- *\u002F\r\n-const removeOptionById = function removeOptionById(state, optionId, id) {\r\n-    const {question: {blankOptions}} = state;\r\n-\r\n-    remove(blankOptions, function (a) {\r\n-        return a.question_answer_id == optionId;\r\n-    });\r\n-\r\n-    return blankOptions;\r\n-};\r\n-\r\n-const setData = function setData(state, data, key) {\r\n-    if (!key) {\r\n-        return {\r\n-            ...state,\r\n-            ...data\r\n-        }\r\n-    }\r\n-\r\n-    const oldData = get(state, key);\r\n-    set(state, key, {...oldData, ...data});\r\n-\r\n-    return {...state};\r\n-};\r\n-\r\n-const updateOptionById = function updateOptionById(state, option, optionId, id) {\r\n-    const {question: {blankOptions}} = state;\r\n-\r\n-    return blankOptions.map((opt) => {\r\n-        return opt.question_answer_id == optionId ? {\r\n-            ...opt,\r\n-            ...option\r\n-        } : opt;\r\n-    });\r\n-};\r\n-\r\n-export const storeData = (state = STORE_DATA, action) => {\r\n-    switch (action.type) {\r\n-        case 'SET_DATA':\r\n-            return setData(state, action.data, action.key);\r\n-        case 'ADD_OPTION':\r\n-            return {\r\n-                ...state,\r\n-                question: {\r\n-                    ...state.question,\r\n-                    blankOptions: [...state.question.blankOptions, action.option]\r\n-                }\r\n-            }\r\n-        case 'REMOVE_OPTION':\r\n-            return {\r\n-                ...state,\r\n-                question: {\r\n-                    ...state.question,\r\n-                    blankOptions: [...removeOptionById(state, action.optionId, action.id)]\r\n-                }\r\n-            }\r\n-        case 'UPDATE_OPTION':\r\n-            return {\r\n-                ...state,\r\n-                question: {\r\n-                    ...state.question,\r\n-                    blankOptions: [...updateOptionById(state, action.option, action.optionId, action.id)]\r\n-                }\r\n-            }\r\n-    }\r\n-    return state;\r\n-};\r\n-\r\n-export default storeData;\r\n+import {combineReducers} from '@wordpress\u002Fdata';\n+\n+const {omit, flow, isArray, remove, get, set} = lodash;\n+const STORE_DATA = {\n+    question: false\n+};\n+\n+\u002F**\n+ * Remove an option from question answers.\n+ *\n+ * @param {object} state\n+ * @param {int} optionId\n+ * @param {int} id\n+ *\u002F\n+const removeOptionById = function removeOptionById(state, optionId, id) {\n+    const {question: {blankOptions}} = state;\n+\n+    remove(blankOptions, function (a) {\n+        return a.question_answer_id == optionId;\n+    });\n+\n+    return blankOptions;\n+};\n+\n+const setData = function setData(state, data, key) {\n+    if (!key) {\n+        return {\n+            ...state,\n+            ...data\n+        }\n+    }\n+\n+    const oldData = get(state, key);\n+    set(state, key, {...oldData, ...data});\n+\n+    return {...state};\n+};\n+\n+const updateOptionById = function updateOptionById(state, option, optionId, id) {\n+    const {question: {blankOptions}} = state;\n+\n+    return blankOptions.map((opt) => {\n+        return opt.question_answer_id == optionId ? {\n+            ...opt,\n+            ...option\n+        } : opt;\n+    });\n+};\n+\n+export const storeData = (state = STORE_DATA, action) => {\n+    switch (action.type) {\n+        case 'SET_DATA':\n+            return setData(state, action.data, action.key);\n+        case 'ADD_OPTION':\n+            return {\n+                ...state,\n+                question: {\n+                    ...state.question,\n+                    blankOptions: [...state.question.blankOptions, action.option]\n+                }\n+            }\n+        case 'REMOVE_OPTION':\n+            return {\n+                ...state,\n+                question: {\n+                    ...state.question,\n+                    blankOptions: [...removeOptionById(state, action.optionId, action.id)]\n+                }\n+            }\n+        case 'UPDATE_OPTION':\n+            return {\n+                ...state,\n+                question: {\n+                    ...state.question,\n+                    blankOptions: [...updateOptionById(state, action.option, action.optionId, action.id)]\n+                }\n+            }\n+    }\n+    return state;\n+};\n+\n+export default storeData;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fselectors.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fselectors.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fselectors.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Fstore\u002Fselectors.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-import { select } from '@wordpress\u002Fdata';\r\n-const { get, set, isArray } = lodash;\r\n-\r\n-\u002F**\r\n- * Get property of store data.\r\n- *\r\n- * @param state - Store data\r\n- * @param prop - Optional. NULL will return all data.\r\n- * @return {*}\r\n- *\u002F\r\n-export function getData( state, prop ) {\r\n-\tif ( prop ) {\r\n-\t\tif ( isArray( prop ) ) {\r\n-\t\t\tconst ret = {};\r\n-\r\n-\t\t\tfor ( let i = 0; i \u003C prop.length; i++ ) {\r\n-\t\t\t\tset( ret, prop, get( state, prop ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ret;\r\n-\t\t}\r\n-\r\n-\t\treturn get( state, prop );\r\n-\t}\r\n-\r\n-\treturn state;\r\n-}\r\n-\r\n-export function getDefaultRestArgs( state ) {\r\n-\tconst { userQuiz } = state;\r\n-\r\n-\treturn {\r\n-\t\titem_id: userQuiz.id,\r\n-\t\tcourse_id: userQuiz.courseId,\r\n-\t};\r\n-}\r\n+import { select } from '@wordpress\u002Fdata';\n+const { get, set, isArray } = lodash;\n+\n+\u002F**\n+ * Get property of store data.\n+ *\n+ * @param state - Store data\n+ * @param prop - Optional. NULL will return all data.\n+ * @return {*}\n+ *\u002F\n+export function getData( state, prop ) {\n+\tif ( prop ) {\n+\t\tif ( isArray( prop ) ) {\n+\t\t\tconst ret = {};\n+\n+\t\t\tfor ( let i = 0; i \u003C prop.length; i++ ) {\n+\t\t\t\tset( ret, prop, get( state, prop ) );\n+\t\t\t}\n+\n+\t\t\treturn ret;\n+\t\t}\n+\n+\t\treturn get( state, prop );\n+\t}\n+\n+\treturn state;\n+}\n+\n+export function getDefaultRestArgs( state ) {\n+\tconst { userQuiz } = state;\n+\n+\treturn {\n+\t\titem_id: userQuiz.id,\n+\t\tcourse_id: userQuiz.courseId,\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion-editor.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion-editor.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion-editor.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion-editor.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-import Editor from '.\u002Fquestion\u002Findex';\r\n-import store from '.\u002Fquestion\u002Fstore';\r\n-\r\n-export default Editor;\r\n-\r\n-export const init = function init( elem, settings ) {\r\n-\twp.element.render(\r\n-\t\t\u003CEditor initSettings={ settings } \u002F>,\r\n-\t\tjQuery( elem )[ 0 ]\r\n-\t);\r\n-\tconst $ = jQuery;\r\n-\r\n-\t$( document ).on( 'change', '#_lp_blanks_style, #_lp_blank_fills_style', () => {\r\n-\t\twp.data.dispatch( 'learnpress\u002Fquestion' ).setData( {\r\n-\t\t\tblanksStyle: $( '#_lp_blanks_style' ).val(),\r\n-\t\t\tblankFillsStyle: $( '#_lp_blank_fills_style' ).val(),\r\n-\t\t}, 'question' );\r\n-\t} );\r\n-};\r\n+import Editor from '.\u002Fquestion\u002Findex';\n+import store from '.\u002Fquestion\u002Fstore';\n+\n+export default Editor;\n+\n+export const init = function init( elem, settings ) {\n+\twp.element.render(\n+\t\t\u003CEditor initSettings={ settings } \u002F>,\n+\t\tjQuery( elem )[ 0 ]\n+\t);\n+\tconst $ = jQuery;\n+\n+\t$( document ).on( 'change', '#_lp_blanks_style, #_lp_blank_fills_style', () => {\n+\t\twp.data.dispatch( 'learnpress\u002Fquestion' ).setData( {\n+\t\t\tblanksStyle: $( '#_lp_blanks_style' ).val(),\n+\t\t\tblankFillsStyle: $( '#_lp_blank_fills_style' ).val(),\n+\t\t}, 'question' );\n+\t} );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Farchive-course-legacy\",\r\n-\t\"title\": \"Archive Course (Legacy)\",\r\n-\t\"category\": \"learnpress-legacy\",\r\n-\t\"description\": \"Renders template Archive Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"ancestor\": [],\r\n-\t\"keywords\": [\r\n-\t\t\"legacy\",\r\n-\t\t\"learnpress\"\r\n-\t],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Farchive-course-legacy\",\n+\t\"title\": \"Archive Course (Legacy)\",\n+\t\"category\": \"learnpress-legacy\",\n+\t\"description\": \"Renders template Archive Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"ancestor\": [],\n+\t\"keywords\": [\n+\t\t\"legacy\",\n+\t\t\"learnpress\"\n+\t],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003CPlaceholder\r\n-\t\t\t\tlabel={ __( 'Archive Course (Legacy)', 'learnpress' ) }\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'The block will display the full content of the course archive page. Elements on it cannot be modified!',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002FPlaceholder>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003CPlaceholder\n+\t\t\t\tlabel={ __( 'Archive Course (Legacy)', 'learnpress' ) }\n+\t\t\t>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t{\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'The block will display the full content of the course archive page. Elements on it cannot be modified!',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t}\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002FPlaceholder>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u002F**\r\n- * Register block archive property.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002FutilBlock.js';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Farchive-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_category',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Farchive-course_tag',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block archive property.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { checkTemplatesCanLoadBlock } from '..\u002FutilBlock.js';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Farchive-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_category',\n+\t'learnpress\u002Flearnpress\u002F\u002Farchive-course_tag',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fbreadcrumb\",\r\n-\t\"title\": \"Learnpress Breadcrumb\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"ellipsis\",\r\n-\t\"description\": \"Renders Learnpress Breadcrumb PHP Template.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"learnpress breadcrumb\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"showHome\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"homeLabel\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"Home\"\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": true,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": true,\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"link\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fbreadcrumb\",\n+\t\"title\": \"Learnpress Breadcrumb\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"ellipsis\",\n+\t\"description\": \"Renders Learnpress Breadcrumb PHP Template.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"learnpress breadcrumb\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"showHome\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"homeLabel\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"Home\"\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": true,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": true,\n+\t\t\t\"background\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"link\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl, TextControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Home', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.showHome ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) =>\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tshowHome: value ? true : false,\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t{ props.attributes.showHome ? (\r\n-\t\t\t\t\t\t\u003CTextControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Home Label', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\t\thomeLabel: value ?? 'Home',\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\tvalue={ props.attributes.homeLabel ?? 'Home' }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cul className=\"learn-press-breadcrumb\">\r\n-\t\t\t\t\t{ props.attributes.showHome ? (\r\n-\t\t\t\t\t\t\u003C>\r\n-\t\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\t\u003Ca>{ props.attributes.homeLabel }\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003Cli className=\"breadcrumb-delimiter\">\r\n-\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-right\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\u003Ca>{ __( 'Navigation', 'learnpress' ) }\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003Cli className=\"breadcrumb-delimiter\">\r\n-\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-right\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\u003Cspan>{ __( 'Path', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl, TextControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Home', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.showHome ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) =>\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tshowHome: value ? true : false,\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t{ props.attributes.showHome ? (\n+\t\t\t\t\t\t\u003CTextControl\n+\t\t\t\t\t\t\tlabel={ __( 'Home Label', 'learnpress' ) }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\t\thomeLabel: value ?? 'Home',\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\tvalue={ props.attributes.homeLabel ?? 'Home' }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cul className=\"learn-press-breadcrumb\">\n+\t\t\t\t\t{ props.attributes.showHome ? (\n+\t\t\t\t\t\t\u003C>\n+\t\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\t\u003Ca>{ props.attributes.homeLabel }\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003Cli className=\"breadcrumb-delimiter\">\n+\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-right\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003C\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\u003Ca>{ __( 'Navigation', 'learnpress' ) }\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003Cli className=\"breadcrumb-delimiter\">\n+\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-right\">\u003C\u002Fi>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\u003Cspan>{ __( 'Path', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Register block archive property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block archive property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,52 +1,52 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-address\",\r\n-\t\"title\": \"Course Address\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Address Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"address\", \"single\", \"offline\", \"course\", \"learnpress\" ],\r\n-\t\"icon\": \"location\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showText\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"isLink\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-address\",\n+\t\"title\": \"Course Address\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Address Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"address\", \"single\", \"offline\", \"course\", \"learnpress\" ],\n+\t\"icon\": \"location\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showText\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"isLink\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cspan>{ __( 'Address', 'learnpress' ) } \u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cspan>{ __( 'Address', 'learnpress' ) } \u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block course instructor.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course instructor.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-button\",\r\n-\t\"title\": \"Course Button\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"button\",\r\n-\t\"description\": \"Renders template Button Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"button single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"textAlign\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"center\"\r\n-\t\t},\r\n-\t\t\"justifyContent\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"center\"\r\n-\t\t},\r\n-\t\t\"alignItems\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"top\"\r\n-\t\t},\r\n-\t\t\"width\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"100\"\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"background\": true,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"content\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"content\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-button\",\n+\t\"title\": \"Course Button\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"button\",\n+\t\"description\": \"Renders template Button Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"button single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"textAlign\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"center\"\n+\t\t},\n+\t\t\"justifyContent\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"center\"\n+\t\t},\n+\t\t\"alignItems\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"top\"\n+\t\t},\n+\t\t\"width\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"100\"\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": true,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"background\": true,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"margin\": true,\n+\t\t\t\"padding\": true,\n+\t\t\t\"content\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"content\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import {\r\n-\tPanelBody,\r\n-\t__experimentalToggleGroupControl as ToggleGroupControl,\r\n-\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\r\n-} from '@wordpress\u002Fcomponents';\r\n-\r\n-import {\r\n-\tuseBlockProps,\r\n-\tBlockControls,\r\n-\tInspectorControls,\r\n-\tAlignmentToolbar,\r\n-\tJustifyToolbar,\r\n-\tBlockVerticalAlignmentToolbar,\r\n-} from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes = {}, setAttributes } = props;\r\n-\tconst blockProps = useBlockProps( {\r\n-\t\tstyle: {\r\n-\t\t\ttextAlign: attributes.textAlign,\r\n-\t\t\twidth: '100%',\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tconst mapAlignItems = {\r\n-\t\ttop: 'flex-start',\r\n-\t\tcenter: 'center',\r\n-\t\tbottom: 'flex-end',\r\n-\t};\r\n-\r\n-\t\u002F\u002F classOfDiv to fix align.\r\n-\tlet classOfDiv = blockProps.className;\r\n-\tclassOfDiv = classOfDiv\r\n-\t\t.split( ' ' )\r\n-\t\t.filter( ( cls ) => cls.startsWith( 'align' ) )\r\n-\t\t.join( ' ' );\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CBlockControls>\r\n-\t\t\t\t\u003CAlignmentToolbar\r\n-\t\t\t\t\tvalue={ attributes.textAlign }\r\n-\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { textAlign: newAlign } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\t\u003CJustifyToolbar\r\n-\t\t\t\t\tvalue={ attributes.justifyContent }\r\n-\t\t\t\t\tonChange={ ( newJustify ) => setAttributes( { justifyContent: newJustify } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\t\u003CBlockVerticalAlignmentToolbar\r\n-\t\t\t\t\tvalue={ attributes.alignItems }\r\n-\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { alignItems: newAlign } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\u003C\u002FBlockControls>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleGroupControl\r\n-\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ attributes.width || '100' }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\twidth: value || '100',\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\tisBlock={ true }\r\n-\t\t\t\t\t>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"25\" label=\"25%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"50\" label=\"50%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"75\" label=\"75%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"100\" label=\"100%\" \u002F>\r\n-\t\t\t\t\t\u003C\u002FToggleGroupControl>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv\r\n-\t\t\t\tclassName={ classOfDiv }\r\n-\t\t\t\tstyle={ {\r\n-\t\t\t\t\tdisplay: 'flex',\r\n-\t\t\t\t\ttextAlign: attributes.textAlign,\r\n-\t\t\t\t\talignItems: mapAlignItems[ attributes.alignItems ] || 'flex-start',\r\n-\t\t\t\t\tjustifyContent: attributes.justifyContent,\r\n-\t\t\t\t} }\r\n-\t\t\t>\r\n-\t\t\t\t\u003Ca\r\n-\t\t\t\t\tstyle={ {\r\n-\t\t\t\t\t\twidth: attributes.width ? `${ attributes.width }%` : undefined,\r\n-\t\t\t\t\t} }\r\n-\t\t\t\t>\r\n-\t\t\t\t\t\u003Cbutton { ...blockProps }>{ __( 'Buy Now', 'learnpress' ) }\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import {\n+\tPanelBody,\n+\t__experimentalToggleGroupControl as ToggleGroupControl,\n+\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n+} from '@wordpress\u002Fcomponents';\n+\n+import {\n+\tuseBlockProps,\n+\tBlockControls,\n+\tInspectorControls,\n+\tAlignmentToolbar,\n+\tJustifyToolbar,\n+\tBlockVerticalAlignmentToolbar,\n+} from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes = {}, setAttributes } = props;\n+\tconst blockProps = useBlockProps( {\n+\t\tstyle: {\n+\t\t\ttextAlign: attributes.textAlign,\n+\t\t\twidth: '100%',\n+\t\t},\n+\t} );\n+\n+\tconst mapAlignItems = {\n+\t\ttop: 'flex-start',\n+\t\tcenter: 'center',\n+\t\tbottom: 'flex-end',\n+\t};\n+\n+\t\u002F\u002F classOfDiv to fix align.\n+\tlet classOfDiv = blockProps.className;\n+\tclassOfDiv = classOfDiv\n+\t\t.split( ' ' )\n+\t\t.filter( ( cls ) => cls.startsWith( 'align' ) )\n+\t\t.join( ' ' );\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CBlockControls>\n+\t\t\t\t\u003CAlignmentToolbar\n+\t\t\t\t\tvalue={ attributes.textAlign }\n+\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { textAlign: newAlign } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\t\u003CJustifyToolbar\n+\t\t\t\t\tvalue={ attributes.justifyContent }\n+\t\t\t\t\tonChange={ ( newJustify ) => setAttributes( { justifyContent: newJustify } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\t\u003CBlockVerticalAlignmentToolbar\n+\t\t\t\t\tvalue={ attributes.alignItems }\n+\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { alignItems: newAlign } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\u003C\u002FBlockControls>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleGroupControl\n+\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ attributes.width || '100' }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\twidth: value || '100',\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\tisBlock={ true }\n+\t\t\t\t\t>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"25\" label=\"25%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"50\" label=\"50%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"75\" label=\"75%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"100\" label=\"100%\" \u002F>\n+\t\t\t\t\t\u003C\u002FToggleGroupControl>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv\n+\t\t\t\tclassName={ classOfDiv }\n+\t\t\t\tstyle={ {\n+\t\t\t\t\tdisplay: 'flex',\n+\t\t\t\t\ttextAlign: attributes.textAlign,\n+\t\t\t\t\talignItems: mapAlignItems[ attributes.alignItems ] || 'flex-start',\n+\t\t\t\t\tjustifyContent: attributes.justifyContent,\n+\t\t\t\t} }\n+\t\t\t>\n+\t\t\t\t\u003Ca\n+\t\t\t\t\tstyle={ {\n+\t\t\t\t\t\twidth: attributes.width ? `${ attributes.width }%` : undefined,\n+\t\t\t\t\t} }\n+\t\t\t\t>\n+\t\t\t\t\t\u003Cbutton { ...blockProps }>{ __( 'Buy Now', 'learnpress' ) }\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course button.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course button.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-button-read-more\",\r\n-\t\"title\": \"Course Button Read More\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"button\",\r\n-\t\"description\": \"Renders template Button Course Read More PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"button read more single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"textAlign\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"center\"\r\n-\t\t},\r\n-\t\t\"justifyContent\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"center\"\r\n-\t\t},\r\n-\t\t\"alignItems\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"top\"\r\n-\t\t},\r\n-\t\t\"width\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"100\"\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"background\": true,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"content\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"content\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-button-read-more\",\n+\t\"title\": \"Course Button Read More\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"button\",\n+\t\"description\": \"Renders template Button Course Read More PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"button read more single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"textAlign\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"center\"\n+\t\t},\n+\t\t\"justifyContent\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"center\"\n+\t\t},\n+\t\t\"alignItems\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"top\"\n+\t\t},\n+\t\t\"width\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"100\"\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": true,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"background\": true,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"margin\": true,\n+\t\t\t\"padding\": true,\n+\t\t\t\"content\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"content\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,94 +1,94 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import {\r\n-\tPanelBody,\r\n-\t__experimentalToggleGroupControl as ToggleGroupControl,\r\n-\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\r\n-} from '@wordpress\u002Fcomponents';\r\n-\r\n-import {\r\n-\tuseBlockProps,\r\n-\tBlockControls,\r\n-\tInspectorControls,\r\n-\tAlignmentToolbar,\r\n-\tJustifyToolbar,\r\n-\tBlockVerticalAlignmentToolbar,\r\n-} from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps( {\r\n-\t\tstyle: {\r\n-\t\t\ttextAlign: attributes.textAlign,\r\n-\t\t\twidth: '100%',\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tconst mapAlignItems = {\r\n-\t\ttop: 'flex-start',\r\n-\t\tcenter: 'center',\r\n-\t\tbottom: 'flex-end',\r\n-\t};\r\n-\r\n-\tlet classOfDiv = blockProps.className;\r\n-\tclassOfDiv = classOfDiv\r\n-\t\t.split( ' ' )\r\n-\t\t.filter( ( cls ) => cls.startsWith( 'align' ) )\r\n-\t\t.join( ' ' );\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CBlockControls>\r\n-\t\t\t\t\u003CAlignmentToolbar\r\n-\t\t\t\t\tvalue={ attributes.textAlign }\r\n-\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { textAlign: newAlign } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\t\u003CJustifyToolbar\r\n-\t\t\t\t\tvalue={ attributes.justifyContent }\r\n-\t\t\t\t\tonChange={ ( newJustify ) => setAttributes( { justifyContent: newJustify } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\t\u003CBlockVerticalAlignmentToolbar\r\n-\t\t\t\t\tvalue={ attributes.alignItems }\r\n-\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { alignItems: newAlign } ) }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t\u003C\u002FBlockControls>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleGroupControl\r\n-\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ attributes.width || '100' }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\twidth: value || '100',\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\tisBlock={ true }\r\n-\t\t\t\t\t>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"25\" label=\"25%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"50\" label=\"50%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"75\" label=\"75%\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"100\" label=\"100%\" \u002F>\r\n-\t\t\t\t\t\u003C\u002FToggleGroupControl>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv\r\n-\t\t\t\tclass=\"course-button-read-more\"\r\n-\t\t\t\tclassName={ classOfDiv }\r\n-\t\t\t\tstyle={ {\r\n-\t\t\t\t\tdisplay: 'flex',\r\n-\t\t\t\t\ttextAlign: attributes.textAlign,\r\n-\t\t\t\t\talignItems: mapAlignItems[ attributes.alignItems ] || 'flex-start',\r\n-\t\t\t\t\tjustifyContent: attributes.justifyContent,\r\n-\t\t\t\t} }\r\n-\t\t\t>\r\n-\t\t\t\t\u003Ca\r\n-\t\t\t\t\tstyle={ {\r\n-\t\t\t\t\t\twidth: attributes.width ? `${ attributes.width }%` : undefined,\r\n-\t\t\t\t\t} }\r\n-\t\t\t\t>\r\n-\t\t\t\t\t\u003Cbutton { ...blockProps }>{ __( 'Read more', 'learnpress' ) }\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import {\n+\tPanelBody,\n+\t__experimentalToggleGroupControl as ToggleGroupControl,\n+\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n+} from '@wordpress\u002Fcomponents';\n+\n+import {\n+\tuseBlockProps,\n+\tBlockControls,\n+\tInspectorControls,\n+\tAlignmentToolbar,\n+\tJustifyToolbar,\n+\tBlockVerticalAlignmentToolbar,\n+} from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps( {\n+\t\tstyle: {\n+\t\t\ttextAlign: attributes.textAlign,\n+\t\t\twidth: '100%',\n+\t\t},\n+\t} );\n+\n+\tconst mapAlignItems = {\n+\t\ttop: 'flex-start',\n+\t\tcenter: 'center',\n+\t\tbottom: 'flex-end',\n+\t};\n+\n+\tlet classOfDiv = blockProps.className;\n+\tclassOfDiv = classOfDiv\n+\t\t.split( ' ' )\n+\t\t.filter( ( cls ) => cls.startsWith( 'align' ) )\n+\t\t.join( ' ' );\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CBlockControls>\n+\t\t\t\t\u003CAlignmentToolbar\n+\t\t\t\t\tvalue={ attributes.textAlign }\n+\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { textAlign: newAlign } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\t\u003CJustifyToolbar\n+\t\t\t\t\tvalue={ attributes.justifyContent }\n+\t\t\t\t\tonChange={ ( newJustify ) => setAttributes( { justifyContent: newJustify } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\t\u003CBlockVerticalAlignmentToolbar\n+\t\t\t\t\tvalue={ attributes.alignItems }\n+\t\t\t\t\tonChange={ ( newAlign ) => setAttributes( { alignItems: newAlign } ) }\n+\t\t\t\t\u002F>\n+\t\t\t\u003C\u002FBlockControls>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleGroupControl\n+\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ attributes.width || '100' }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\twidth: value || '100',\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\tisBlock={ true }\n+\t\t\t\t\t>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"25\" label=\"25%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"50\" label=\"50%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"75\" label=\"75%\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"100\" label=\"100%\" \u002F>\n+\t\t\t\t\t\u003C\u002FToggleGroupControl>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv\n+\t\t\t\tclass=\"course-button-read-more\"\n+\t\t\t\tclassName={ classOfDiv }\n+\t\t\t\tstyle={ {\n+\t\t\t\t\tdisplay: 'flex',\n+\t\t\t\t\ttextAlign: attributes.textAlign,\n+\t\t\t\t\talignItems: mapAlignItems[ attributes.alignItems ] || 'flex-start',\n+\t\t\t\t\tjustifyContent: attributes.justifyContent,\n+\t\t\t\t} }\n+\t\t\t>\n+\t\t\t\t\u003Ca\n+\t\t\t\t\tstyle={ {\n+\t\t\t\t\t\twidth: attributes.width ? `${ attributes.width }%` : undefined,\n+\t\t\t\t\t} }\n+\t\t\t\t>\n+\t\t\t\t\t\u003Cbutton { ...blockProps }>{ __( 'Read more', 'learnpress' ) }\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u002F**\r\n- * Register block course button.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course button.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-capacity\",\r\n-\t\"title\": \"Course Capacity\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show number capacity of course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"capacity\", \"count\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-capacity\",\n+\t\"title\": \"Course Capacity\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show number capacity of course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"capacity\", \"count\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseCapacity = '\u003Cspan class=\"course-capacity\">Unlimited\u003C\u002Fspan>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-students\">\u003C\u002Fi>' } }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? __( 'Capacity:', 'learnpress' ) : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseCapacity,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseCapacity = '\u003Cspan class=\"course-capacity\">Unlimited\u003C\u002Fspan>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-students\">\u003C\u002Fi>' } }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? __( 'Capacity:', 'learnpress' ) : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseCapacity,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course lesson.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit.js';\r\n-import { save } from '.\u002Fsave.js';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { people } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: people,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: people,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course lesson.\n+ *\u002F\n+\n+import edit from '.\u002Fedit.js';\n+import { save } from '.\u002Fsave.js';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { people } from '@wordpress\u002Ficons';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: people,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: people,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-categories\",\r\n-\t\"title\": \"Course Category\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"category\",\r\n-\t\"description\": \"Renders template List Category Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"category Category single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"showText\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"isLink\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"link\": false,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-categories\",\n+\t\"title\": \"Course Category\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"category\",\n+\t\"description\": \"Renders template List Category Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"category Category single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"showText\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"isLink\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"link\": false,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseCategory = lpCourseData?.category || 'Category';\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( \"Show text 'by'\", 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showText }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowText: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Make the category a link', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.isLink }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tisLink: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t{ attributes.isLink ? (\r\n-\t\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tchecked={ attributes.target }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\ttarget: value,\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\r\n-\t\t\t\t\t{ attributes.showText ? 'in ' : '' }\r\n-\t\t\t\t\t\u003Cdiv className=\"course-categories\">\r\n-\t\t\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t\t__html: courseCategory,\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseCategory = lpCourseData?.category || 'Category';\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( \"Show text 'by'\", 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showText }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowText: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Make the category a link', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.isLink }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tisLink: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t{ attributes.isLink ? (\n+\t\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\n+\t\t\t\t\t\t\tchecked={ attributes.target }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\ttarget: value,\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\n+\t\t\t\t\t{ attributes.showText ? 'in ' : '' }\n+\t\t\t\t\t\u003Cdiv className=\"course-categories\">\n+\t\t\t\t\t\t\u003Cdiv\n+\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t\t__html: courseCategory,\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t>\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course categories.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course categories.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-curriculum\",\r\n-\t\"title\": \"Course Curriculum\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Curriculum Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"curriculum single course\", \"learnpress\" ],\r\n-\t\"icon\": \"list-view\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-curriculum\",\n+\t\"title\": \"Course Curriculum\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Curriculum Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"curriculum single course\", \"learnpress\" ],\n+\t\"icon\": \"list-view\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,117 +1,117 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-curriculum\">\r\n-\t\t\t\t\t\u003Ch3 className=\"lp-course-curriculum__title\">{ __( 'Curriculum', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cdiv className=\"course-curriculum-info\">\r\n-\t\t\t\t\t\t\u003Cul className=\"course-curriculum-info__left\">\r\n-\t\t\t\t\t\t\t\u003Cli className=\"course-count-section\">{ '2 Sections' }\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003Cli className=\"course-count-lesson\">{ '3 Lessons' }\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003Cli className=\"course-duration\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan className=\"course-duration\">{ '3 Weeks' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\u003Cdiv className=\"course-curriculum-info__right\">\r\n-\t\t\t\t\t\t\t\u003Cspan className=\"course-toggle-all-sections\">{ 'Expand all sections' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv className=\"course-curriculum\">\r\n-\t\t\t\t\t\t\u003Cul className=\"course-sections\">\r\n-\t\t\t\t\t\t\t\u003Cli className=\"course-section\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__title\">{ 'Section 1' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-count-items\">{ '3' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cul className=\"course-section__items\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'What is LearnPress?' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '20 Minutes' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item \">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'How to use LearnPress?' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '60 Minutes' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico preview\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item \">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'Demo the Quiz of LearnPress' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '10 Minutes' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"question-count\">{ '4 Questions' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico locked\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003Cli className=\"course-section lp-collapse\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__title\">{ 'Section 2' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__description\">\r\n-\t\t\t\t\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\r\n-\t\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-count-items\">{ '10' }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"lp-course-curriculum\">\n+\t\t\t\t\t\u003Ch3 className=\"lp-course-curriculum__title\">{ __( 'Curriculum', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cdiv className=\"course-curriculum-info\">\n+\t\t\t\t\t\t\u003Cul className=\"course-curriculum-info__left\">\n+\t\t\t\t\t\t\t\u003Cli className=\"course-count-section\">{ '2 Sections' }\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003Cli className=\"course-count-lesson\">{ '3 Lessons' }\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003Cli className=\"course-duration\">\n+\t\t\t\t\t\t\t\t\u003Cspan className=\"course-duration\">{ '3 Weeks' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\u003Cdiv className=\"course-curriculum-info__right\">\n+\t\t\t\t\t\t\t\u003Cspan className=\"course-toggle-all-sections\">{ 'Expand all sections' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv className=\"course-curriculum\">\n+\t\t\t\t\t\t\u003Cul className=\"course-sections\">\n+\t\t\t\t\t\t\t\u003Cli className=\"course-section\">\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__title\">{ 'Section 1' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-count-items\">{ '3' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cul className=\"course-section__items\">\n+\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'What is LearnPress?' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '20 Minutes' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item \">\n+\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'How to use LearnPress?' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '60 Minutes' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico preview\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\t\u003Cli className=\"course-item \">\n+\t\t\t\t\t\t\t\t\t\t\u003Ca className=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item-title\">{ 'Demo the Quiz of LearnPress' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"duration\">{ '10 Minutes' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"question-count\">{ '4 Questions' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan className=\"course-item-ico locked\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003Cli className=\"course-section lp-collapse\">\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__title\">{ 'Section 2' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"course-section__description\">\n+\t\t\t\t\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\n+\t\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003Cdiv className=\"section-count-items\">{ '10' }\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block course curriculum.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course curriculum.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-delivery\",\r\n-\t\"title\": \"Course Delivery Type\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show type delivery of course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"delivery\", \"type\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-delivery\",\n+\t\"title\": \"Course Delivery Type\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show type delivery of course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"delivery\", \"type\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseDelivery = '\u003Cspan class=\"course-deliver-type\">Private 1-1\u003C\u002Fspan>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-bookmark-o\">\u003C\u002Fi>' } } \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? __( 'Delivery type:', 'learnpress' ) : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseDelivery,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseDelivery = '\u003Cspan class=\"course-deliver-type\">Private 1-1\u003C\u002Fspan>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-bookmark-o\">\u003C\u002Fi>' } } \u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? __( 'Delivery type:', 'learnpress' ) : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseDelivery,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course lesson.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit.js';\r\n-import { save } from '.\u002Fsave.js';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { heading } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: heading,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: heading,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course lesson.\n+ *\u002F\n+\n+import edit from '.\u002Fedit.js';\n+import { save } from '.\u002Fsave.js';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { heading } from '@wordpress\u002Ficons';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: heading,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: heading,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-description\",\r\n-\t\"title\": \"Course Description\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Course Description PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"description single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-description\",\n+\t\"title\": \"Course Description\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Course Description PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"description single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseDescription =\r\n-\t\tlpCourseData?.description ||\r\n-\t\t'\u003Ch3>Description\u003C\u002Fh3> \u003Cdiv className=\"lp-course-description\"> \u003Cp>Ullo fecit epicurus necesse manilium plebiscito intrandum facto sequamur habemus nostrane adipiscing vocatur poterit caeleste\u003C\u002Fp> \u003Cp>Beatus neget maximarum superiores dacere veriusque isto anquam congressu reprehendi\u003C\u002Fp>\u003C\u002Fdiv>';\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv\r\n-\t\t\t\t{ ...blockProps }\r\n-\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t__html: courseDescription,\r\n-\t\t\t\t} }\r\n-\t\t\t>\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\tconst { lpCourseData } = context;\n+\tconst courseDescription =\n+\t\tlpCourseData?.description ||\n+\t\t'\u003Ch3>Description\u003C\u002Fh3> \u003Cdiv className=\"lp-course-description\"> \u003Cp>Ullo fecit epicurus necesse manilium plebiscito intrandum facto sequamur habemus nostrane adipiscing vocatur poterit caeleste\u003C\u002Fp> \u003Cp>Beatus neget maximarum superiores dacere veriusque isto anquam congressu reprehendi\u003C\u002Fp>\u003C\u002Fdiv>';\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv\n+\t\t\t\t{ ...blockProps }\n+\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t__html: courseDescription,\n+\t\t\t\t} }\n+\t\t\t>\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u002F**\r\n- * Register block course description.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { postContent } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: postContent,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: postContent,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course description.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { postContent } from '@wordpress\u002Ficons';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: postContent,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: postContent,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-description\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-duration\",\r\n-\t\"title\": \"Course Duration\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show Duration of Course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"duration\", \"learnpress\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"icon\": \"clock\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-duration\",\n+\t\"title\": \"Course Duration\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show Duration of Course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"duration\", \"learnpress\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"icon\": \"clock\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseDuration =\r\n-\t\tlpCourseData?.duration ||\r\n-\t\t'\u003Cdiv class=\"course-count-duration\">\u003Cspan class=\"course-duration\">10 Weeks\u003C\u002Fspan>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ props.attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>' } } \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ props.attributes.showLabel ? 'Duration:' : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseDuration,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseDuration =\n+\t\tlpCourseData?.duration ||\n+\t\t'\u003Cdiv class=\"course-count-duration\">\u003Cspan class=\"course-duration\">10 Weeks\u003C\u002Fspan>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ props.attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>' } } \u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ props.attributes.showLabel ? 'Duration:' : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseDuration,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course duration.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course duration.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-faqs\",\r\n-\t\"title\": \"Course Faqs\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"index-card\",\r\n-\t\"description\": \"Renders template Box Extra Faqs Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"box extra faqs single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-faqs\",\n+\t\"title\": \"Course Faqs\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"index-card\",\n+\t\"description\": \"Renders template Box Extra Faqs Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"box extra faqs single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"course-faqs course-tab-panel-faqs\">\r\n-\t\t\t\t\t\u003Ch3 className=\"course-faqs__title\">{ __( 'FAQs', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cdiv className=\"course-faqs-box\">\r\n-\t\t\t\t\t\t\u003Clabel className=\"course-faqs-box__title\">\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Fortepossumus poterat varietatem nullus tum signa dissentiens abducas gaudio memini pervertere impudens?'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv className=\"course-faqs-box\">\r\n-\t\t\t\t\t\t\u003Clabel className=\"course-faqs-box__title\">\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Homerus defecerit iure naturales praeponunt futuri avaritiamne celebrari parva vincla aetatulis extrema?'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"course-faqs course-tab-panel-faqs\">\n+\t\t\t\t\t\u003Ch3 className=\"course-faqs__title\">{ __( 'FAQs', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cdiv className=\"course-faqs-box\">\n+\t\t\t\t\t\t\u003Clabel className=\"course-faqs-box__title\">\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Fortepossumus poterat varietatem nullus tum signa dissentiens abducas gaudio memini pervertere impudens?'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv className=\"course-faqs-box\">\n+\t\t\t\t\t\t\u003Clabel className=\"course-faqs-box__title\">\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Homerus defecerit iure naturales praeponunt futuri avaritiamne celebrari parva vincla aetatulis extrema?'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course faqs.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course faqs.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-featured\",\r\n-\t\"title\": \"Course Featured\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"star-empty\",\r\n-\t\"description\": \"Course featured.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"course featured\", \"learnpress\"],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"attributes\": {\r\n-\r\n-\t},\r\n-\t\"usesContext\": [\"lpCourseData\"],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"textTransform\": false,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": true,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"fontSize\": true,\r\n-\t\t\t\t\"textTransform\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"background\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-featured\",\n+\t\"title\": \"Course Featured\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"star-empty\",\n+\t\"description\": \"Course featured.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"course featured\", \"learnpress\"],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"attributes\": {\n+\n+\t},\n+\t\"usesContext\": [\"lpCourseData\"],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"textTransform\": false,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": true,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"fontSize\": true,\n+\t\t\t\t\"textTransform\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"text\": true,\n+\t\t\t\"background\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"background\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { lpCourseData } = context;\r\n-\r\n-\tconst label = __( 'Featured', 'learnpress' );\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps } style={ { ...blockProps.style, display: 'inline-block' } }>\r\n-\t\t\t\t{ label }\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\tconst { lpCourseData } = context;\n+\n+\tconst label = __( 'Featured', 'learnpress' );\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps } style={ { ...blockProps.style, display: 'inline-block' } }>\n+\t\t\t\t{ label }\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course featured.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-\u002F**\r\n- * Check if the block can load in the template editor: single-lp_course.\r\n- * if it is editing on this template, set ancestor to null\r\n- *\u002F\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-\u002F\u002F Register the block with the original metadata, ancestor will be set on block.json\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course featured.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+\u002F**\n+ * Check if the block can load in the template editor: single-lp_course.\n+ * if it is editing on this template, set ancestor to null\n+ *\u002F\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+\u002F\u002F Register the block with the original metadata, ancestor will be set on block.json\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-feature-review\",\r\n-\t\"title\": \"Course Feature Review\",\r\n-\t\"icon\": \"star-filled\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Feature Review Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"feature review single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-feature-review\",\n+\t\"title\": \"Course Feature Review\",\n+\t\"icon\": \"star-filled\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Feature Review Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"feature review single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"featured-review__title\">{ __( 'Featured Review', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"featured-review__stars\">\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"featured-review__content\">\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"featured-review__title\">{ __( 'Featured Review', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"featured-review__stars\">\n+\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"featured-review__content\">\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course feature review.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course feature review.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-features\",\r\n-\t\"title\": \"Course Features\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"index-card\",\r\n-\t\"description\": \"Renders template Box Extra Features Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"box extra features single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-features\",\n+\t\"title\": \"Course Features\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"index-card\",\n+\t\"description\": \"Renders template Box Extra Features Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"box extra features single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"course-features extra-box\">\r\n-\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Features', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Versum metuit commentatus neglegendi turpitudinis putandum pueris discipulum verso dicta hominibus ennius rhetoribus intellegunt'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Repellant tubulo nihilne vester philosophis eo negat exemplis que ullo egone cupido comparatio'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Saepe apparet rerum pollicetur obscurentur clamores instructus petendam accessio possit istarum descensio'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"course-features extra-box\">\n+\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Features', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Versum metuit commentatus neglegendi turpitudinis putandum pueris discipulum verso dicta hominibus ennius rhetoribus intellegunt'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Repellant tubulo nihilne vester philosophis eo negat exemplis que ullo egone cupido comparatio'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Saepe apparet rerum pollicetur obscurentur clamores instructus petendam accessio possit istarum descensio'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course features.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course features.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-image\",\r\n-\t\"title\": \"Course Image\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"format-image\",\r\n-\t\"description\": \"Renders template Image Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"image single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"isLink\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t},\r\n-\t\t\"size\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"custom\"\r\n-\t\t},\r\n-\t\t\"customWidth\": {\r\n-\t\t\t\"type\": \"number\",\r\n-\t\t\t\"default\": 500\r\n-\t\t},\r\n-\t\t\"customHeight\": {\r\n-\t\t\t\"type\": \"number\",\r\n-\t\t\t\"default\": 300\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"shadow\": true,\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-image\",\n+\t\"title\": \"Course Image\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"format-image\",\n+\t\"description\": \"Renders template Image Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"image single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"isLink\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t},\n+\t\t\"size\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"custom\"\n+\t\t},\n+\t\t\"customWidth\": {\n+\t\t\t\"type\": \"number\",\n+\t\t\t\"default\": 500\n+\t\t},\n+\t\t\"customHeight\": {\n+\t\t\t\"type\": \"number\",\n+\t\t\t\"default\": 300\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"html\": false,\n+\t\t\"shadow\": true,\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,171 +1,171 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import {\r\n-\tPanelBody,\r\n-\tToggleControl,\r\n-\tSelectControl,\r\n-\t__experimentalInputControl as InputControl,\r\n-} from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseImage =\r\n-\t\tlpCourseData?.image ||\r\n-\t\t'\u003Cdiv class=\"course-img\">\u003Cimg src=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\" alt=\"course thumbnail placeholder\"\u003C\u002Fdiv>';\r\n-\r\n-\tconst sizeOption = [\r\n-\t\t{ label: 'Thumbnail', value: 'thumbnail' },\r\n-\t\t{ label: 'Medium', value: 'medium' },\r\n-\t\t{ label: 'Large', value: 'large' },\r\n-\t\t{ label: 'Full', value: 'full' },\r\n-\t\t{ label: 'Custom', value: 'custom' },\r\n-\t];\r\n-\r\n-\tconst getStyledCourseImage = () => {\r\n-\t\tif (\r\n-\t\t\tlpCourseData?.image &&\r\n-\t\t\tattributes.size === 'custom' &&\r\n-\t\t\tattributes.customWidth === 500 &&\r\n-\t\t\tattributes.customHeight === 300\r\n-\t\t) {\r\n-\t\t\treturn lpCourseData?.image;\r\n-\t\t}\r\n-\r\n-\t\tlet width = 2560;\r\n-\t\tlet height = 2560;\r\n-\r\n-\t\tif ( attributes.size === 'thumbnail' ) {\r\n-\t\t\twidth = 150;\r\n-\t\t\theight = 150;\r\n-\t\t}\r\n-\r\n-\t\tif ( attributes.size === 'medium' ) {\r\n-\t\t\twidth = 300;\r\n-\t\t\theight = 300;\r\n-\t\t}\r\n-\r\n-\t\tif ( attributes.size === 'large' ) {\r\n-\t\t\twidth = 1024;\r\n-\t\t\theight = 724;\r\n-\t\t}\r\n-\r\n-\t\tif ( attributes.size === 'full' ) {\r\n-\t\t\twidth = 2560;\r\n-\t\t\theight = 2560;\r\n-\t\t}\r\n-\r\n-\t\tif ( attributes.size === 'custom' ) {\r\n-\t\t\tif ( attributes.customWidth && attributes.customWidth > 0 ) {\r\n-\t\t\t\twidth = attributes.customWidth;\r\n-\t\t\t}\r\n-\t\t\tif ( attributes.customHeight && attributes.customHeight > 0 ) {\r\n-\t\t\t\theight = attributes.customHeight;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( attributes.customWidth == 0 ) {\r\n-\t\t\t\twidth = 2560;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( attributes.customHeight == 0 ) {\r\n-\t\t\t\twidth = 2560;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tconst ratio = width \u002F height;\r\n-\t\treturn `\u003Cdiv class=\"course-img\">\u003Cimg src=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\" width=\"${ width }\" height=\"${ height }\" style=\"aspect-ratio: ${ ratio }; object-fit:cover;\" alt=\"course thumbnail placeholder\"\u003C\u002Fdiv>`;\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Size', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ props.attributes.size }\r\n-\t\t\t\t\t\toptions={ sizeOption }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tif ( value !== 'custom' ) {\r\n-\t\t\t\t\t\t\t\tsetAttributes( { customWidth: 500, customHeight: 300 } );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\tsetAttributes( { size: value } );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t{ props.attributes.size === 'custom' ? (\r\n-\t\t\t\t\t\t\u003Cdiv style={ { display: 'flex', gap: '12px' } }>\r\n-\t\t\t\t\t\t\t\u003CInputControl\r\n-\t\t\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\ttype=\"number\"\r\n-\t\t\t\t\t\t\t\tmin={ 0 }\r\n-\t\t\t\t\t\t\t\tstyle={ { flex: 1 } }\r\n-\t\t\t\t\t\t\t\tplaceholder={ __( 'Auto', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\tsuffix={ \u003Cdiv style={ { marginRight: '8px' } }>{ __( 'px', 'learnpress' ) }\u003C\u002Fdiv> }\r\n-\t\t\t\t\t\t\t\tvalue={ props.attributes.customWidth }\r\n-\t\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\t\tconst numValue = parseInt( value, 10 );\r\n-\t\t\t\t\t\t\t\t\tif ( ! isNaN( Number( numValue ) ) && numValue >= 0 ) {\r\n-\t\t\t\t\t\t\t\t\t\tsetAttributes( { customWidth: Number( numValue ) } );\r\n-\t\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\t\tsetAttributes( { customWidth: 500 } );\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\t\u003CInputControl\r\n-\t\t\t\t\t\t\t\tlabel={ __( 'Height', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\ttype=\"number\"\r\n-\t\t\t\t\t\t\t\tmin={ 0 }\r\n-\t\t\t\t\t\t\t\tstyle={ { flex: 1 } }\r\n-\t\t\t\t\t\t\t\tplaceholder={ __( 'Auto', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\tsuffix={ \u003Cdiv style={ { marginRight: '8px' } }>{ __( 'px', 'learnpress' ) }\u003C\u002Fdiv> }\r\n-\t\t\t\t\t\t\t\tvalue={ props.attributes.customHeight }\r\n-\t\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\t\tconst numValue = parseInt( value, 10 );\r\n-\t\t\t\t\t\t\t\t\tif ( ! isNaN( Number( numValue ) ) && numValue >= 0 ) {\r\n-\t\t\t\t\t\t\t\t\t\tsetAttributes( { customHeight: Number( numValue ) } );\r\n-\t\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\t\tsetAttributes( { customHeight: 300 } );\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Make the image a link', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.isLink ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tisLink: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t{ props.attributes.isLink ? (\r\n-\t\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\t\ttarget: value ? true : false,\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Ca>\r\n-\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t{ ...blockProps }\r\n-\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t__html: getStyledCourseImage() || courseImage,\r\n-\t\t\t\t\t} }\r\n-\t\t\t\t>\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import {\n+\tPanelBody,\n+\tToggleControl,\n+\tSelectControl,\n+\t__experimentalInputControl as InputControl,\n+} from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\tconst { lpCourseData } = context;\n+\tconst courseImage =\n+\t\tlpCourseData?.image ||\n+\t\t'\u003Cdiv class=\"course-img\">\u003Cimg src=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\" alt=\"course thumbnail placeholder\"\u003C\u002Fdiv>';\n+\n+\tconst sizeOption = [\n+\t\t{ label: 'Thumbnail', value: 'thumbnail' },\n+\t\t{ label: 'Medium', value: 'medium' },\n+\t\t{ label: 'Large', value: 'large' },\n+\t\t{ label: 'Full', value: 'full' },\n+\t\t{ label: 'Custom', value: 'custom' },\n+\t];\n+\n+\tconst getStyledCourseImage = () => {\n+\t\tif (\n+\t\t\tlpCourseData?.image &&\n+\t\t\tattributes.size === 'custom' &&\n+\t\t\tattributes.customWidth === 500 &&\n+\t\t\tattributes.customHeight === 300\n+\t\t) {\n+\t\t\treturn lpCourseData?.image;\n+\t\t}\n+\n+\t\tlet width = 2560;\n+\t\tlet height = 2560;\n+\n+\t\tif ( attributes.size === 'thumbnail' ) {\n+\t\t\twidth = 150;\n+\t\t\theight = 150;\n+\t\t}\n+\n+\t\tif ( attributes.size === 'medium' ) {\n+\t\t\twidth = 300;\n+\t\t\theight = 300;\n+\t\t}\n+\n+\t\tif ( attributes.size === 'large' ) {\n+\t\t\twidth = 1024;\n+\t\t\theight = 724;\n+\t\t}\n+\n+\t\tif ( attributes.size === 'full' ) {\n+\t\t\twidth = 2560;\n+\t\t\theight = 2560;\n+\t\t}\n+\n+\t\tif ( attributes.size === 'custom' ) {\n+\t\t\tif ( attributes.customWidth && attributes.customWidth > 0 ) {\n+\t\t\t\twidth = attributes.customWidth;\n+\t\t\t}\n+\t\t\tif ( attributes.customHeight && attributes.customHeight > 0 ) {\n+\t\t\t\theight = attributes.customHeight;\n+\t\t\t}\n+\n+\t\t\tif ( attributes.customWidth == 0 ) {\n+\t\t\t\twidth = 2560;\n+\t\t\t}\n+\n+\t\t\tif ( attributes.customHeight == 0 ) {\n+\t\t\t\twidth = 2560;\n+\t\t\t}\n+\t\t}\n+\n+\t\tconst ratio = width \u002F height;\n+\t\treturn `\u003Cdiv class=\"course-img\">\u003Cimg src=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\" width=\"${ width }\" height=\"${ height }\" style=\"aspect-ratio: ${ ratio }; object-fit:cover;\" alt=\"course thumbnail placeholder\"\u003C\u002Fdiv>`;\n+\t};\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Size', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ props.attributes.size }\n+\t\t\t\t\t\toptions={ sizeOption }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tif ( value !== 'custom' ) {\n+\t\t\t\t\t\t\t\tsetAttributes( { customWidth: 500, customHeight: 300 } );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\tsetAttributes( { size: value } );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t{ props.attributes.size === 'custom' ? (\n+\t\t\t\t\t\t\u003Cdiv style={ { display: 'flex', gap: '12px' } }>\n+\t\t\t\t\t\t\t\u003CInputControl\n+\t\t\t\t\t\t\t\tlabel={ __( 'Width', 'learnpress' ) }\n+\t\t\t\t\t\t\t\ttype=\"number\"\n+\t\t\t\t\t\t\t\tmin={ 0 }\n+\t\t\t\t\t\t\t\tstyle={ { flex: 1 } }\n+\t\t\t\t\t\t\t\tplaceholder={ __( 'Auto', 'learnpress' ) }\n+\t\t\t\t\t\t\t\tsuffix={ \u003Cdiv style={ { marginRight: '8px' } }>{ __( 'px', 'learnpress' ) }\u003C\u002Fdiv> }\n+\t\t\t\t\t\t\t\tvalue={ props.attributes.customWidth }\n+\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\t\tconst numValue = parseInt( value, 10 );\n+\t\t\t\t\t\t\t\t\tif ( ! isNaN( Number( numValue ) ) && numValue >= 0 ) {\n+\t\t\t\t\t\t\t\t\t\tsetAttributes( { customWidth: Number( numValue ) } );\n+\t\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\t\tsetAttributes( { customWidth: 500 } );\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\t\u003CInputControl\n+\t\t\t\t\t\t\t\tlabel={ __( 'Height', 'learnpress' ) }\n+\t\t\t\t\t\t\t\ttype=\"number\"\n+\t\t\t\t\t\t\t\tmin={ 0 }\n+\t\t\t\t\t\t\t\tstyle={ { flex: 1 } }\n+\t\t\t\t\t\t\t\tplaceholder={ __( 'Auto', 'learnpress' ) }\n+\t\t\t\t\t\t\t\tsuffix={ \u003Cdiv style={ { marginRight: '8px' } }>{ __( 'px', 'learnpress' ) }\u003C\u002Fdiv> }\n+\t\t\t\t\t\t\t\tvalue={ props.attributes.customHeight }\n+\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\t\tconst numValue = parseInt( value, 10 );\n+\t\t\t\t\t\t\t\t\tif ( ! isNaN( Number( numValue ) ) && numValue >= 0 ) {\n+\t\t\t\t\t\t\t\t\t\tsetAttributes( { customHeight: Number( numValue ) } );\n+\t\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\t\tsetAttributes( { customHeight: 300 } );\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Make the image a link', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.isLink ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tisLink: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t{ props.attributes.isLink ? (\n+\t\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\n+\t\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\t\ttarget: value ? true : false,\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Ca>\n+\t\t\t\t\u003Cdiv\n+\t\t\t\t\t{ ...blockProps }\n+\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t__html: getStyledCourseImage() || courseImage,\n+\t\t\t\t\t} }\n+\t\t\t\t>\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course image.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course image.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-instructor\",\r\n-\t\"title\": \"Course Instructor\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Instructor Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor single course\", \"learnpress\" ],\r\n-\t\"icon\": \"id\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showText\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"isLink\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"link\": false,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-instructor\",\n+\t\"title\": \"Course Instructor\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Instructor Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor single course\", \"learnpress\" ],\n+\t\"icon\": \"id\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showText\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"isLink\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"link\": false,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseInstructor = lpCourseData?.instructor || '\u003Cstrong>Instructor\u003C\u002Fstrong>';\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( \"Show text 'by'\", 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.showText ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tshowText: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Make the instructor a link', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.isLink ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tisLink: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t{ props.attributes.isLink ? (\r\n-\t\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\t\ttarget: value ? true : false,\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\r\n-\t\t\t\t\t\u003Clabel>{ props.attributes.showText ? 'by ' : '' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cdiv className=\"course-instructor\">\r\n-\t\t\t\t\t\t{ props.attributes.isLink ? (\r\n-\t\t\t\t\t\t\t\u003Ca\r\n-\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t\t\t__html: courseInstructor,\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t>\u003C\u002Fa>\r\n-\t\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t\t\t__html: courseInstructor,\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseInstructor = lpCourseData?.instructor || '\u003Cstrong>Instructor\u003C\u002Fstrong>';\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( \"Show text 'by'\", 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.showText ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tshowText: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Make the instructor a link', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.isLink ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tisLink: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t{ props.attributes.isLink ? (\n+\t\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\n+\t\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\t\ttarget: value ? true : false,\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\n+\t\t\t\t\t\u003Clabel>{ props.attributes.showText ? 'by ' : '' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cdiv className=\"course-instructor\">\n+\t\t\t\t\t\t{ props.attributes.isLink ? (\n+\t\t\t\t\t\t\t\u003Ca\n+\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t\t\t__html: courseInstructor,\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t>\u003C\u002Fa>\n+\t\t\t\t\t\t) : (\n+\t\t\t\t\t\t\t\u003Cdiv\n+\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t\t\t__html: courseInstructor,\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t>\u003C\u002Fdiv>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course instructor.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course instructor.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-instructor-info\",\r\n-\t\"title\": \"Course Instructor Info\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"index-card\",\r\n-\t\"description\": \"Renders template Instructor Section PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor info single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-instructor-info\",\n+\t\"title\": \"Course Instructor Info\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"index-card\",\n+\t\"description\": \"Renders template Instructor Section PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor info single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"lp-section-instructor\">\r\n-\t\t\t\t\t\u003Ch3 className=\"section-title\">{ 'Instructor' }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cdiv className=\"lp-instructor-info\">\r\n-\t\t\t\t\t\t\u003Cdiv className=\"instructor-avatar\">\r\n-\t\t\t\t\t\t\t\u003Cimg\r\n-\t\t\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\r\n-\t\t\t\t\t\t\t\talt=\"Instructor avatar placeholder\"\r\n-\t\t\t\t\t\t\t\theight={ 160 }\r\n-\t\t\t\t\t\t\t\twidth={ 160 }\r\n-\t\t\t\t\t\t\t\tstyle={ { aspectRatio: '1 \u002F 1', objectFit: 'cover' } }\r\n-\t\t\t\t\t\t\t>\u003C\u002Fimg>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv className=\"lp-section-instructor\">\r\n-\t\t\t\t\t\t\t\u003Cspan className=\"instructor-display-name\">\r\n-\t\t\t\t\t\t\t\t{ __( 'Instructor Name', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003Cdiv className=\"lp-instructor-meta\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-item-meta\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cspan className=\"instructor-total-students\">{ '2 Students' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-item-meta\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cspan className=\"instructor-total-courses\">{ '12 Courses' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-description\">\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"lp-section-instructor\">\n+\t\t\t\t\t\u003Ch3 className=\"section-title\">{ 'Instructor' }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cdiv className=\"lp-instructor-info\">\n+\t\t\t\t\t\t\u003Cdiv className=\"instructor-avatar\">\n+\t\t\t\t\t\t\t\u003Cimg\n+\t\t\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\n+\t\t\t\t\t\t\t\talt=\"Instructor avatar placeholder\"\n+\t\t\t\t\t\t\t\theight={ 160 }\n+\t\t\t\t\t\t\t\twidth={ 160 }\n+\t\t\t\t\t\t\t\tstyle={ { aspectRatio: '1 \u002F 1', objectFit: 'cover' } }\n+\t\t\t\t\t\t\t>\u003C\u002Fimg>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv className=\"lp-section-instructor\">\n+\t\t\t\t\t\t\t\u003Cspan className=\"instructor-display-name\">\n+\t\t\t\t\t\t\t\t{ __( 'Instructor Name', 'learnpress' ) }\n+\t\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003Cdiv className=\"lp-instructor-meta\">\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-item-meta\">\n+\t\t\t\t\t\t\t\t\t\u003Cspan className=\"instructor-total-students\">{ '2 Students' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-item-meta\">\n+\t\t\t\t\t\t\t\t\t\u003Cspan className=\"instructor-total-courses\">{ '12 Courses' }\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv className=\"instructor-description\">\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t\t\t'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua'\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course instructor info.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course instructor info.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-item-curriculum\",\r\n-\t\"title\": \"Course Item Curriculum (Legacy)\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"welcome-learn-more\",\r\n-\t\"description\": \"Renders Course Item Curriculum Block PHP Template.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item curriculum course single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-item-curriculum\",\n+\t\"title\": \"Course Item Curriculum (Legacy)\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"welcome-learn-more\",\n+\t\"description\": \"Renders Course Item Curriculum Block PHP Template.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item curriculum course single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003CPlaceholder\r\n-\t\t\t\tlabel={ __( 'Course item curriculum (Legacy) - Don\\'t remove', 'learnpress' ) }\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'Displays the course curriculum, including lessons, quizzes, and other learning items, organized by sections or topics!',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002FPlaceholder>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003CPlaceholder\n+\t\t\t\tlabel={ __( 'Course item curriculum (Legacy) - Don\\'t remove', 'learnpress' ) }\n+\t\t\t>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t{\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'Displays the course curriculum, including lessons, quizzes, and other learning items, organized by sections or topics!',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t}\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002FPlaceholder>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block course item curriculum.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course item curriculum.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-lesson\",\r\n-\t\"title\": \"Course Lesson Count\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show number lesson of course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"lesson\", \"count\", \"learnpress\" ],\r\n-\t\"icon\": \"media-text\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-lesson\",\n+\t\"title\": \"Course Lesson Count\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show number lesson of course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"lesson\", \"count\", \"learnpress\" ],\n+\t\"icon\": \"media-text\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseLesson =\r\n-\t\tlpCourseData?.lesson ||\r\n-\t\t'\u003Cdiv class=\"course-count-lesson\">\u003Cdiv class=\"course-count-item lp_lesson\">5 Lessons\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' } } \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? 'Lesson:' : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseLesson,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseLesson =\n+\t\tlpCourseData?.lesson ||\n+\t\t'\u003Cdiv class=\"course-count-lesson\">\u003Cdiv class=\"course-count-item lp_lesson\">5 Lessons\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' } } \u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? 'Lesson:' : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseLesson,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block course lesson.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course lesson.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-level\",\r\n-\t\"title\": \"Course Level\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show level course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"level\", \"learnpress\"],\r\n-\t\"icon\": \"chart-bar\",\r\n-\t\"ancestor\": [\"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\"],\r\n-\t\"usesContext\": [\"lpCourseData\"],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-level\",\n+\t\"title\": \"Course Level\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show level course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"level\", \"learnpress\"],\n+\t\"icon\": \"chart-bar\",\n+\t\"ancestor\": [\"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\"],\n+\t\"usesContext\": [\"lpCourseData\"],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseLevel =\r\n-\t\tlpCourseData?.level ||\r\n-\t\t'\u003Cdiv class=\"course-count-level\">\u003Cspan class=\"course-level\">All levels\u003C\u002Fspan>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>' } } \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? 'Level:' : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseLevel,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseLevel =\n+\t\tlpCourseData?.level ||\n+\t\t'\u003Cdiv class=\"course-count-level\">\u003Cspan class=\"course-level\">All levels\u003C\u002Fspan>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>' } } \u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? 'Level:' : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseLevel,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u002F**\r\n- * Register block course level.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course level.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-material\",\r\n-\t\"title\": \"Course Material\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"download\",\r\n-\t\"description\": \"Renders template Material Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"material single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": false }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-material\",\n+\t\"title\": \"Course Material\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"download\",\n+\t\"description\": \"Renders template Material Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"material single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": false }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv class=\"course-material\">\r\n-\t\t\t\t\t\u003Ch3 class=\"course-material__title\">{ __( 'Course Material', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-list-material\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-material-skeleton\">\r\n-\t\t\t\t\t\t\t\u003Ctable class=\"course-material-table\">\r\n-\t\t\t\t\t\t\t\t\u003Cthead>\r\n-\t\t\t\t\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-name\">{ __( 'Name', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-type\">{ __( 'Type', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-size\">{ __( 'Size', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-link\">{ __( 'Download', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\t\t\t\t\t\u003Ctbody id=\"material-file-list\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ctr class=\"lp-material-item\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-name\">Course Materials\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-type\">txt\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-size\">1KB\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-link\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Ca>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-file-download btn-download-material\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\t\t\t\t\u003C\u002Ftable>\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"lp-button lp-loadmore-material\">\r\n-\t\t\t\t\t\t\t\t{ __( 'Load more', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv class=\"course-material\">\n+\t\t\t\t\t\u003Ch3 class=\"course-material__title\">{ __( 'Course Material', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cdiv class=\"lp-list-material\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-material-skeleton\">\n+\t\t\t\t\t\t\t\u003Ctable class=\"course-material-table\">\n+\t\t\t\t\t\t\t\t\u003Cthead>\n+\t\t\t\t\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-name\">{ __( 'Name', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-type\">{ __( 'Type', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-size\">{ __( 'Size', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\t\t\u003Cth class=\"lp-material-th-file-link\">{ __( 'Download', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\t\t\u003C\u002Fthead>\n+\t\t\t\t\t\t\t\t\u003Ctbody id=\"material-file-list\">\n+\t\t\t\t\t\t\t\t\t\u003Ctr class=\"lp-material-item\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-name\">Course Materials\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-type\">txt\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-size\">1KB\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd class=\"lp-material-file-link\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Ca>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-file-download btn-download-material\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\t\t\u003C\u002Ftbody>\n+\t\t\t\t\t\t\t\u003C\u002Ftable>\n+\t\t\t\t\t\t\t\u003Cbutton class=\"lp-button lp-loadmore-material\">\n+\t\t\t\t\t\t\t\t{ __( 'Load more', 'learnpress' ) }\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block course price.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course price.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-offline-lesson\",\r\n-\t\"title\": \"Course Offline Lesson\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show number lesson of course offline.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"lesson\", \"offline\", \"count\", \"learnpress\" ],\r\n-\t\"icon\": \"media-text\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-offline-lesson\",\n+\t\"title\": \"Course Offline Lesson\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show number lesson of course offline.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"lesson\", \"offline\", \"count\", \"learnpress\" ],\n+\t\"icon\": \"media-text\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseLesson =\r\n-\t\t'\u003Cdiv class=\"course-count-lesson\">\u003Cdiv class=\"course-count-item lp_lesson\">5\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' } } \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? __( 'Lesson:', 'learnpress' ) : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseLesson,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseLesson =\n+\t\t'\u003Cdiv class=\"course-count-lesson\">\u003Cdiv class=\"course-count-item lp_lesson\">5\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan dangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' } } \u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? __( 'Lesson:', 'learnpress' ) : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseLesson,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u002F**\r\n- * Register block course lesson.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit.js';\r\n-import { save } from '.\u002Fsave.js';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { people } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course lesson.\n+ *\u002F\n+\n+import edit from '.\u002Fedit.js';\n+import { save } from '.\u002Fsave.js';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { people } from '@wordpress\u002Ficons';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-price\",\r\n-\t\"title\": \"Course Price\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"money-alt\",\r\n-\t\"description\": \"Renders template Price Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"price single course\", \"learnpress\"],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": false }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-price\",\n+\t\"title\": \"Course Price\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"money-alt\",\n+\t\"description\": \"Renders template Price Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"price single course\", \"learnpress\"],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": false }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { RawHTML } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { lpCourseData } = context;\r\n-\tconst coursePrice =\r\n-\t\tlpCourseData?.price ||\r\n-\t\t'\u003Cspan class=\"course-price\">\u003Cspan class=\"course-item-price\"> \u003Cspan class=\"origin-price\">$5.00\u003C\u002Fspan>\u003Cspan class=\"price\">$4.00\u003C\u002Fspan> \u003C\u002Fspan>\u003C\u002Fspan>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003CRawHTML>{ coursePrice }\u003C\u002FRawHTML>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { RawHTML } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\tconst { lpCourseData } = context;\n+\tconst coursePrice =\n+\t\tlpCourseData?.price ||\n+\t\t'\u003Cspan class=\"course-price\">\u003Cspan class=\"course-item-price\"> \u003Cspan class=\"origin-price\">$5.00\u003C\u002Fspan>\u003Cspan class=\"price\">$4.00\u003C\u002Fspan> \u003C\u002Fspan>\u003C\u002Fspan>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003CRawHTML>{ coursePrice }\u003C\u002FRawHTML>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course price.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course price.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-price\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-progress\",\r\n-\t\"title\": \"Course Progress\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Progress Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"progress single course\", \"learnpress\" ],\r\n-\t\"icon\": \"chart-line\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-progress\",\n+\t\"title\": \"Course Progress\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Progress Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"progress single course\", \"learnpress\" ],\n+\t\"icon\": \"chart-line\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"course-progress\">\r\n-\t\t\t\t\t\u003Cspan>{ 'Course passing progress: 0%' }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cdiv className=\"line\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cspan>{ 'Start date: 2025' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"course-progress\">\n+\t\t\t\t\t\u003Cspan>{ 'Course passing progress: 0%' }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cdiv className=\"line\">\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cspan>{ 'Start date: 2025' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course process.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course process.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-progress\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-quiz\",\r\n-\t\"title\": \"Course Quiz Count\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show number quiz of course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"quiz\", \"learnpress\" ],\r\n-\t\"icon\": \"editor-help\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-quiz\",\n+\t\"title\": \"Course Quiz Count\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show number quiz of course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"quiz\", \"learnpress\" ],\n+\t\"icon\": \"editor-help\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseQuiz =\r\n-\t\tlpCourseData?.quiz ||\r\n-\t\t'\u003Cdiv class=\"course-count-quiz\">\u003Cdiv class=\"course-count-item lp_quiz\">9 Quizzes\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>' } }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? 'Quiz:' : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseQuiz,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseQuiz =\n+\t\tlpCourseData?.quiz ||\n+\t\t'\u003Cdiv class=\"course-count-quiz\">\u003Cdiv class=\"course-count-item lp_quiz\">9 Quizzes\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>' } }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? 'Quiz:' : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseQuiz,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course quiz.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course quiz.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-requirements\",\r\n-\t\"title\": \"Course Requirements\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"index-card\",\r\n-\t\"description\": \"Renders template Box Extra Requirements Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"box extra requirements single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-requirements\",\n+\t\"title\": \"Course Requirements\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"index-card\",\n+\t\"description\": \"Renders template Box Extra Requirements Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"box extra requirements single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"course-requirements extra-box\">\r\n-\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Requirements', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Afflueret videsne commoventur debilitas etsi adridens habitus placuit hoc conatum deinde fruentem dirigentes longam sapientem'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Lucullo summas debeatis varietate indoctum vitae cavere cornibus avaritias sequamini persequi assignatum polemoni'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Laboro excelsiores meo utebare causam arripuit levem motu seditione egregio malitias istam'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"course-requirements extra-box\">\n+\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Requirements', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Afflueret videsne commoventur debilitas etsi adridens habitus placuit hoc conatum deinde fruentem dirigentes longam sapientem'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Lucullo summas debeatis varietate indoctum vitae cavere cornibus avaritias sequamini persequi assignatum polemoni'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Laboro excelsiores meo utebare causam arripuit levem motu seditione egregio malitias istam'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course requirements.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course requirements.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-share\",\r\n-\t\"title\": \"Course Share\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"share\",\r\n-\t\"description\": \"Renders Share Course Block PHP Template.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"share course single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true,\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-share\",\n+\t\"title\": \"Course Share\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"share\",\n+\t\"description\": \"Renders Share Course Block PHP Template.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"share course single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true,\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\r\n-\t\t\t\t\t\u003Ci className=\"lp-icon-share-alt\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Share', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"is-layout-flex c-gap-4\">\n+\t\t\t\t\t\u003Ci className=\"lp-icon-share-alt\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Cspan>{ __( 'Share', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course share.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course share.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-student\",\r\n-\t\"title\": \"Course Student Count\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Show number students attempt course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"count\", \"student\", \"learnpress\"],\r\n-\t\"icon\": \"admin-users\",\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"usesContext\": [ \"lpCourseData\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"showIcon\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"showLabel\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-student\",\n+\t\"title\": \"Course Student Count\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Show number students attempt course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"count\", \"student\", \"learnpress\"],\n+\t\"icon\": \"admin-users\",\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"usesContext\": [ \"lpCourseData\" ],\n+\t\"attributes\": {\n+\t\t\"showIcon\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"showLabel\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { lpCourseData } = context;\r\n-\tconst courseStudent =\r\n-\t\tlpCourseData?.student ||\r\n-\t\t'\u003Cdiv class=\"course-count-student\">\u003Cdiv class=\"course-count-student\">3 Student\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showLabel }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowLabel: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ attributes.showIcon }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tshowIcon: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"info-meta-item\">\r\n-\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\r\n-\t\t\t\t\t\t{ attributes.showIcon && (\r\n-\t\t\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>' } }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t{ attributes.showLabel ? 'Student:' : '' }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\tclassName=\"info-meta-right\"\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseStudent,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InspectorControls, useBlockProps } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { lpCourseData } = context;\n+\tconst courseStudent =\n+\t\tlpCourseData?.student ||\n+\t\t'\u003Cdiv class=\"course-count-student\">\u003Cdiv class=\"course-count-student\">3 Student\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Label', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showLabel }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowLabel: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show Icon', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ attributes.showIcon }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tshowIcon: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"info-meta-item\">\n+\t\t\t\t\t\u003Cspan className=\"info-meta-left\">\n+\t\t\t\t\t\t{ attributes.showIcon && (\n+\t\t\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>' } }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\t{ attributes.showLabel ? 'Student:' : '' }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\tclassName=\"info-meta-right\"\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseStudent,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course student.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course student.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-target-audiences\",\r\n-\t\"title\": \"Course Target audiences\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"index-card\",\r\n-\t\"description\": \"Renders template Box Extra Target audiences Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"box extra target audiences single course\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"heading\": true,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"h3\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-target-audiences\",\n+\t\"title\": \"Course Target audiences\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"index-card\",\n+\t\"description\": \"Renders template Box Extra Target audiences Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"box extra target audiences single course\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"heading\": true,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"h3\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"course-target extra-box\">\r\n-\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Target audiences', 'learnpress' ) }\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Mavis tolluntur redargueret spe fortior ames amicitia petitur cariorem similiora gaudeant'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t'Fuisse confirmandus materiam reges versuta improbos inconstantissime rationis antiocho stultorum sequetur dicimus emolumento video hanc'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>{ 'Perfecit exquisita urbe asoti discere decimum existeret lyco morbo hi' }\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"course-target extra-box\">\n+\t\t\t\t\t\u003Ch3 className=\"extra-box__title\">{ __( 'Target audiences', 'learnpress' ) }\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Mavis tolluntur redargueret spe fortior ames amicitia petitur cariorem similiora gaudeant'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t'Fuisse confirmandus materiam reges versuta improbos inconstantissime rationis antiocho stultorum sequetur dicimus emolumento video hanc'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>{ 'Perfecit exquisita urbe asoti discere decimum existeret lyco morbo hi' }\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block course target audiences.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course target audiences.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,70 +1,70 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-title\",\r\n-\t\"title\": \"Course Title\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Course title.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"course title\", \"learnpress\"],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"tag\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"span\"\r\n-\t\t},\r\n-\t\t\"isLink\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t},\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"usesContext\": [\"lpCourseData\"],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"textTransform\": false,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": true,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"fontSize\": true,\r\n-\t\t\t\t\"textTransform\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": true,\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true,\r\n-\t\t\t\t\"link\": false,\r\n-\t\t\t\t\"background\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": false,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": false\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-title\",\n+\t\"title\": \"Course Title\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Course title.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"course title\", \"learnpress\"],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-course\", \"learnpress\u002Fcourse-item-template\" ],\n+\t\"attributes\": {\n+\t\t\"tag\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"span\"\n+\t\t},\n+\t\t\"isLink\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t},\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"usesContext\": [\"lpCourseData\"],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"textTransform\": false,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": true,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"fontSize\": true,\n+\t\t\t\t\"textTransform\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": true,\n+\t\t\t\"background\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true,\n+\t\t\t\t\"link\": false,\n+\t\t\t\t\"background\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": false,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": false\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,79 +1,79 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { RawHTML } from '@wordpress\u002Felement';\r\n-import { PanelBody, SelectControl, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst { tag, isLink, target } = attributes;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { lpCourseData } = context;\r\n-\tconst tagOptions = [\r\n-\t\t{ label: 'span', value: 'span' },\r\n-\t\t{ label: 'div', value: 'div' },\r\n-\t\t{ label: 'h1', value: 'h1' },\r\n-\t\t{ label: 'h2', value: 'h2' },\r\n-\t\t{ label: 'h3', value: 'h3' },\r\n-\t\t{ label: 'h4', value: 'h4' },\r\n-\t\t{ label: 'h5', value: 'h5' },\r\n-\t\t{ label: 'h6', value: 'h6' },\r\n-\t];\r\n-\tconst courseTitle = lpCourseData?.title || __( 'Course Title', 'learnpress' );\r\n-\tconst TagName = tag;\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Tag', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ tag }\r\n-\t\t\t\t\t\toptions={ tagOptions }\r\n-\t\t\t\t\t\tonChange={ ( value ) => setAttributes( { tag: value } ) }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\u002F\u002F Default text of WP so not need text-domain\r\n-\t\t\t\t\t\tlabel={ __( 'Make the title a link' ) }\r\n-\t\t\t\t\t\tchecked={ !! isLink }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tisLink: value,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t{ props.attributes.isLink ? (\r\n-\t\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tchecked={ !! target }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\t\ttarget: value,\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\r\n-\t\t\t{ props.attributes.isLink ? (\r\n-\t\t\t\t\u003CTagName { ...blockProps }>\r\n-\t\t\t\t\t\u003Ca\r\n-\t\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t\t__html: courseTitle,\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t>\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002FTagName>\r\n-\t\t\t) : (\r\n-\t\t\t\t\u003CTagName\r\n-\t\t\t\t\t{ ...blockProps }\r\n-\t\t\t\t\tdangerouslySetInnerHTML={ {\r\n-\t\t\t\t\t\t__html: courseTitle,\r\n-\t\t\t\t\t} }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t) }\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { RawHTML } from '@wordpress\u002Felement';\n+import { PanelBody, SelectControl, ToggleControl } from '@wordpress\u002Fcomponents';\n+\n+const Edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst { tag, isLink, target } = attributes;\n+\tconst blockProps = useBlockProps();\n+\tconst { lpCourseData } = context;\n+\tconst tagOptions = [\n+\t\t{ label: 'span', value: 'span' },\n+\t\t{ label: 'div', value: 'div' },\n+\t\t{ label: 'h1', value: 'h1' },\n+\t\t{ label: 'h2', value: 'h2' },\n+\t\t{ label: 'h3', value: 'h3' },\n+\t\t{ label: 'h4', value: 'h4' },\n+\t\t{ label: 'h5', value: 'h5' },\n+\t\t{ label: 'h6', value: 'h6' },\n+\t];\n+\tconst courseTitle = lpCourseData?.title || __( 'Course Title', 'learnpress' );\n+\tconst TagName = tag;\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Tag', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ tag }\n+\t\t\t\t\t\toptions={ tagOptions }\n+\t\t\t\t\t\tonChange={ ( value ) => setAttributes( { tag: value } ) }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\u002F\u002F Default text of WP so not need text-domain\n+\t\t\t\t\t\tlabel={ __( 'Make the title a link' ) }\n+\t\t\t\t\t\tchecked={ !! isLink }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tisLink: value,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t{ props.attributes.isLink ? (\n+\t\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\tlabel={ __( 'Open is new tab', 'learnpress' ) }\n+\t\t\t\t\t\t\tchecked={ !! target }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\t\ttarget: value,\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\n+\t\t\t{ props.attributes.isLink ? (\n+\t\t\t\t\u003CTagName { ...blockProps }>\n+\t\t\t\t\t\u003Ca\n+\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t\t__html: courseTitle,\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t>\u003C\u002Fa>\n+\t\t\t\t\u003C\u002FTagName>\n+\t\t\t) : (\n+\t\t\t\t\u003CTagName\n+\t\t\t\t\t{ ...blockProps }\n+\t\t\t\t\tdangerouslySetInnerHTML={ {\n+\t\t\t\t\t\t__html: courseTitle,\n+\t\t\t\t\t} }\n+\t\t\t\t\u002F>\n+\t\t\t) }\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u002F**\r\n- * Register block course title.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { title } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-\u002F**\r\n- * Check if the block can load in the template editor: single-lp_course.\r\n- * if it is editing on this template, set ancestor to null\r\n- *\u002F\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: title,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-\u002F\u002F Register the block with the original metadata, ancestor will be set on block.json\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: title,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course title.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { title } from '@wordpress\u002Ficons';\n+\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+\u002F**\n+ * Check if the block can load in the template editor: single-lp_course.\n+ * if it is editing on this template, set ancestor to null\n+ *\u002F\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: title,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+\u002F\u002F Register the block with the original metadata, ancestor will be set on block.json\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: title,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-filter\",\r\n-\t\"title\": \"Course Filter\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"description\": \"Show filter fields for courses.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"filter\", \"learnpress\"],\r\n-\t\"icon\": \"filter\",\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"title\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"Course Filter\"\r\n-\t\t},\r\n-\t\t\"numberLevelCategory\": {\r\n-\t\t\t\"type\": \"number\",\r\n-\t\t\t\"default\": 1\r\n-\t\t},\r\n-\t\t\"showInRest\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"hideCountZero\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t},\r\n-\t\t\"searchSuggestion\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": true\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true,\r\n-\t\t\"wrapper\": false\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-filter\",\n+\t\"title\": \"Course Filter\",\n+\t\"category\": \"learnpress-category\",\n+\t\"description\": \"Show filter fields for courses.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"filter\", \"learnpress\"],\n+\t\"icon\": \"filter\",\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"title\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"Course Filter\"\n+\t\t},\n+\t\t\"numberLevelCategory\": {\n+\t\t\t\"type\": \"number\",\n+\t\t\t\"default\": 1\n+\t\t},\n+\t\t\"showInRest\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"hideCountZero\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t},\n+\t\t\"searchSuggestion\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": true\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true,\n+\t\t\"wrapper\": false\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,86 +1,86 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { InnerBlocks, useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl, TextControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Show title', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.title ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\ttitle: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CTextControl\r\n-\t\t\t\t\t\tlabel={ __( 'Level of category to display on Frontend', 'learnpress' ) }\r\n-\t\t\t\t\t\ttype=\"number\"\r\n-\t\t\t\t\t\tmin=\"1\"\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tnumberLevelCategory: value ? parseInt( value, 10 ) : 1,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\tvalue={ props.attributes.numberLevelCategory ?? 1 }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Load widget via REST', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.showInRest ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tshowInRest: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Hide field has count is zero', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.hideCountZero ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\thideCountZero: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Enable Keyword Search Suggestion', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.searchSuggestion ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tsearchSuggestion: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"filter\">\r\n-\t\t\t\t\t\u003Ch3>{ props.attributes.title ? __( 'Course Filter', 'learnpress' ) : '' }\u003C\u002Fh3>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\u003CInnerBlocks\r\n-\t\t\t\t\t\tallowedBlocks={ [\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-search-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-author-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-level-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-price-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-categories-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-tag-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fcourse-review-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fbutton-submit-filter',\r\n-\t\t\t\t\t\t\t'learnpress\u002Fbutton-reset-filter',\r\n-\t\t\t\t\t\t] }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { InnerBlocks, useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl, TextControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Show title', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.title ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\ttitle: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CTextControl\n+\t\t\t\t\t\tlabel={ __( 'Level of category to display on Frontend', 'learnpress' ) }\n+\t\t\t\t\t\ttype=\"number\"\n+\t\t\t\t\t\tmin=\"1\"\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tnumberLevelCategory: value ? parseInt( value, 10 ) : 1,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\tvalue={ props.attributes.numberLevelCategory ?? 1 }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Load widget via REST', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.showInRest ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tshowInRest: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Hide field has count is zero', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.hideCountZero ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\thideCountZero: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Enable Keyword Search Suggestion', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.searchSuggestion ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tsearchSuggestion: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"filter\">\n+\t\t\t\t\t\u003Ch3>{ props.attributes.title ? __( 'Course Filter', 'learnpress' ) : '' }\u003C\u002Fh3>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\u003CInnerBlocks\n+\t\t\t\t\t\tallowedBlocks={ [\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-search-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-author-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-level-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-price-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-categories-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-tag-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fcourse-review-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fbutton-submit-filter',\n+\t\t\t\t\t\t\t'learnpress\u002Fbutton-reset-filter',\n+\t\t\t\t\t\t] }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Register block course filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-filter', {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-filter', {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-import { InnerBlocks } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const save = ( props ) => {\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInnerBlocks.Content \u002F>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { InnerBlocks } from '@wordpress\u002Fblock-editor';\n+\n+export const save = ( props ) => {\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInnerBlocks.Content \u002F>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fbutton-reset-filter\",\r\n-\t\"title\": \"Button Reset Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Button Reset Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"category button reset filter course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"background\": true,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fbutton-reset-filter\",\n+\t\"title\": \"Button Reset Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Button Reset Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"category button reset filter course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": true,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"background\": true,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>{ __( 'Reset', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>{ __( 'Reset', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block button reset filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fbutton-reset-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath d=\"M8 12.5h8V11H8v1.5Z M19 6.5H5a2 2 0 0 0-2 2V15a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a2 2 0 0 0-2-2ZM5 8h14a.5.5 0 0 1 .5.5V15a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V8.5A.5.5 0 0 1 5 8Z\">\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block button reset filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fbutton-reset-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath d=\"M8 12.5h8V11H8v1.5Z M19 6.5H5a2 2 0 0 0-2 2V15a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a2 2 0 0 0-2-2ZM5 8h14a.5.5 0 0 1 .5.5V15a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V8.5A.5.5 0 0 1 5 8Z\">\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fbutton-submit-filter\",\r\n-\t\"title\": \"Button Submit Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Button Submit Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"category button submit filter course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": true,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"background\": true,\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fbutton-submit-filter\",\n+\t\"title\": \"Button Submit Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Button Submit Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"category button submit filter course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": true,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"background\": true,\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>{ __( 'Apply', 'learnpress' ) }\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>{ __( 'Apply', 'learnpress' ) }\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block button submit filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fbutton-submit-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath d=\"M8 12.5h8V11H8v1.5Z M19 6.5H5a2 2 0 0 0-2 2V15a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a2 2 0 0 0-2-2ZM5 8h14a.5.5 0 0 1 .5.5V15a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V8.5A.5.5 0 0 1 5 8Z\">\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block button submit filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fbutton-submit-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath d=\"M8 12.5h8V11H8v1.5Z M19 6.5H5a2 2 0 0 0-2 2V15a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8.5a2 2 0 0 0-2-2ZM5 8h14a.5.5 0 0 1 .5.5V15a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V8.5A.5.5 0 0 1 5 8Z\">\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-author-filter\",\r\n-\t\"title\": \"Author Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Author Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"filter\", \"learnpress\"],\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-author-filter\",\n+\t\"title\": \"Author Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Author Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"filter\", \"learnpress\"],\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Author', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Author', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Guest' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course author filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-author-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course author filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-author-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-categories-filter\",\r\n-\t\"title\": \"Categories Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Categories Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"categories filter archive course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-categories-filter\",\n+\t\"title\": \"Categories Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Categories Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"categories filter archive course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Category', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Category 1' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Category 2' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Category 3' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Category', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Category 1' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Category 2' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Category 3' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course categories filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-categories-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course categories filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-categories-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-level-filter\",\r\n-\t\"title\": \"Level Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Level Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"level filter archive course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-level-filter\",\n+\t\"title\": \"Level Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Level Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"level filter archive course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Level', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'All Level' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Level', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'All Level' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course level filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-level-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course level filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-level-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-price-filter\",\r\n-\t\"title\": \"Price Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Price Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"price filter archive course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-price-filter\",\n+\t\"title\": \"Price Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Price Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"price filter archive course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Price', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Free' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Paid' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Price', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Free' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Paid' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course price filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-price-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course price filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-price-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-search-filter\",\r\n-\t\"title\": \"Search Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Search Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"search filter archive course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-search-filter\",\n+\t\"title\": \"Search Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Search Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"search filter archive course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Search', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"search-box\">\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Search', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"search-box\">\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course search filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-search-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course search filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-search-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-tag-filter\",\r\n-\t\"title\": \"Tag Filter\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"description\": \"Renders template Tag Filter PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"tag filter archive course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [\"wide\", \"full\"],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": false,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"padding\": false,\r\n-\t\t\t\t\"margin\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-tag-filter\",\n+\t\"title\": \"Tag Filter\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"description\": \"Renders template Tag Filter PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"tag filter archive course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [\"wide\", \"full\"],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": false,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"padding\": false,\n+\t\t\t\t\"margin\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"ancestor\": [\"learnpress\u002Fcourse-filter\"]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cstrong>{ __( 'Tags', 'learnpress' ) }\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Tag 1' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Tag 2' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\r\n-\t\t\t\t\t\u003Clabel>{ 'Tag 3' }\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cstrong>{ __( 'Tags', 'learnpress' ) }\u003C\u002Fstrong>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Tag 1' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Tag 2' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv className=\"lp-course-filter__field\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\">\u003C\u002Finput>\n+\t\t\t\t\t\u003Clabel>{ 'Tag 3' }\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan className=\"count\">{ '25' }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Register block course tag filter.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-tag-filter', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course tag filter.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-tag-filter', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\tclassName=\"wc-block-editor-components-block-icon\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M16.83 6.342l.602.3.625-.25.443-.176v12.569l-.443-.178-.625-.25-.603.301-1.444.723-2.41-.804-.475-.158-.474.158-2.41.803-1.445-.722-.603-.3-.625.25-.443.177V6.215l.443.178.625.25.603-.301 1.444-.722 2.41.803.475.158.474-.158 2.41-.803 1.445.722zM20 4l-1.5.6-1 .4-2-1-3 1-3-1-2 1-1-.4L5 4v17l1.5-.6 1-.4 2 1 3-1 3 1 2-1 1 .4 1.5.6V4zm-3.5 6.25v-1.5h-8v1.5h8zm0 3v-1.5h-8v1.5h8zm-8 3v-1.5h8v1.5h-8z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-item-template\",\r\n-\t\"title\": \"Course Item Template\",\r\n-\t\"category\": \"\",\r\n-\t\"description\": \"Course Item Template\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"course item\", \"learnpress\" ],\r\n-\t\"usesContext\": [ \"lpCourseQuery\" ],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t},\r\n-\t\"attributes\": {\r\n-\t\t\"layout\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"list\"\r\n-\t\t},\r\n-\t\t\"columns\": {\r\n-\t\t\t\"type\": \"number\",\r\n-\t\t\t\"default\": 3\r\n-\t\t}\r\n-\t},\r\n-\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ]\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-item-template\",\n+\t\"title\": \"Course Item Template\",\n+\t\"category\": \"\",\n+\t\"description\": \"Course Item Template\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"course item\", \"learnpress\" ],\n+\t\"usesContext\": [ \"lpCourseQuery\" ],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t},\n+\t\"attributes\": {\n+\t\t\"layout\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"list\"\n+\t\t},\n+\t\t\"columns\": {\n+\t\t\t\"type\": \"number\",\n+\t\t\t\"default\": 3\n+\t\t}\n+\t},\n+\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ]\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,287 +1,287 @@\n-import {\r\n-\tInnerBlocks,\r\n-\tuseBlockProps,\r\n-\tBlockContextProvider,\r\n-\tuseInnerBlocksProps,\r\n-\tInspectorControls,\r\n-\t\u002F\u002F eslint-disable-next-line @wordpress\u002Fno-unsafe-wp-apis\r\n-\t__experimentalUseBlockPreview as useBlockPreview,\r\n-\tstore as blockEditorStore,\r\n-} from '@wordpress\u002Fblock-editor';\r\n-import classnames from 'classnames';\r\n-import { useSelect } from '@wordpress\u002Fdata';\r\n-import { memo, useMemo, useState, useEffect } from '@wordpress\u002Felement';\r\n-import {\r\n-\tPanelBody,\r\n-\t__experimentalToggleGroupControl as ToggleGroupControl,\r\n-\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\r\n-\tRangeControl,\r\n-} from '@wordpress\u002Fcomponents';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import API from '..\u002F..\u002F..\u002F..\u002F..\u002Fjs\u002Fapi.js';\r\n-const TEMPLATE_DEFAULT = [\r\n-\t[ 'learnpress\u002Fcourse-image' ],\r\n-\t[ 'learnpress\u002Fcourse-title' ],\r\n-\t[ 'learnpress\u002Fcourse-price' ],\r\n-];\r\n-\r\n-function PostTemplateInnerBlocks( { classList } ) {\r\n-\tconst innerBlocksProps = useInnerBlocksProps(\r\n-\t\t{ className: classnames( 'wp-block-learnpress-course-item-template' ) },\r\n-\t\t{ template: TEMPLATE_DEFAULT }\r\n-\t);\r\n-\treturn (\r\n-\t\t\u003Cli className=\"course\">\r\n-\t\t\t\u003Cdiv { ...innerBlocksProps }>\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t);\r\n-}\r\n-\r\n-function PostTemplateBlockPreview( {\r\n-\tblocks,\r\n-\tblockContextId,\r\n-\tclassList,\r\n-\tisHidden,\r\n-\tsetActiveBlockContextId,\r\n-} ) {\r\n-\tconst blockPreviewProps = useBlockPreview( {\r\n-\t\tblocks,\r\n-\t} );\r\n-\r\n-\tconst handleOnClick = () => {\r\n-\t\tsetActiveBlockContextId( blockContextId );\r\n-\t};\r\n-\r\n-\tconst style = {\r\n-\t\tdisplay: isHidden ? 'none' : undefined,\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003Cli\r\n-\t\t\tclassName=\"course\"\r\n-\t\t\ttabIndex={ 0 }\r\n-\t\t\t\u002F\u002F eslint-disable-next-line jsx-a11y\u002Fno-noninteractive-element-to-interactive-role\r\n-\t\t\trole=\"button\"\r\n-\t\t\tonClick={ handleOnClick }\r\n-\t\t\tonKeyPress={ handleOnClick }\r\n-\t\t\tstyle={ style }\r\n-\t\t>\r\n-\t\t\t\u003Cdiv { ...blockPreviewProps } className=\"wp-block-learnpress-course-item-template\">\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t);\r\n-}\r\n-\r\n-const fetchLearnPressCourses = async ( courseQuery, signal ) => {\r\n-\tconst url = API.apiCourses;\r\n-\tlet params = '?return_type=json';\r\n-\r\n-\tif ( courseQuery ) {\r\n-\t\tparams += `&${ new URLSearchParams( courseQuery ).toString() }`;\r\n-\t}\r\n-\r\n-\tconst response = await fetch( url + params, {\r\n-\t\tmethod: 'GET',\r\n-\t\tsignal,\r\n-\t} );\r\n-\r\n-\tif ( ! response.ok ) {\r\n-\t\tthrow new Error( `HTTP error! Status: ${ response.status }` );\r\n-\t}\r\n-\r\n-\treturn await response.json();\r\n-};\r\n-\r\n-const MemoizedPostTemplateBlockPreview = memo( PostTemplateBlockPreview );\r\n-\r\n-const Edit = ( { clientId, context, attributes, setAttributes } ) => {\r\n-\tconst blockProps = useBlockProps( {\r\n-\t\tclassName: classnames( 'learn-press-courses' ),\r\n-\t} );\r\n-\tconst [ activeBlockContextId, setActiveBlockContextId ] = useState();\r\n-\tconst [ coursesData, setCoursesData ] = useState();\r\n-\tconst [ listCourses, setListCourses ] = useState( [] );\r\n-\tconst [ loadingAPI, setLoadingAPI ] = useState( 0 );\r\n-\t\u002F\u002F const [ totalPages, setTotalPages ] = useState( 1 );\r\n-\tconst { columns } = attributes;\r\n-\r\n-\tconst layoutPagination = context.lpCourseQuery?.pagination_type || 'number';\r\n-\r\n-\t\u002F\u002F Fetch courses when query parameters change\r\n-\tuseEffect( () => {\r\n-\t\tconst courseQuery = context.lpCourseQuery ?? {};\r\n-\t\tlet signal, controller;\r\n-\t\tconst fetchCourses = async () => {\r\n-\t\t\ttry {\r\n-\t\t\t\tsetLoadingAPI( 1 );\r\n-\t\t\t\tcontroller = new AbortController();\r\n-\t\t\t\tsignal = controller.signal;\r\n-\r\n-\t\t\t\tconst response = await fetchLearnPressCourses( courseQuery, signal );\r\n-\t\t\t\tconst { data } = response;\r\n-\t\t\t\tconst { courses, page, total, total_pages } = data;\r\n-\r\n-\t\t\t\tsetCoursesData( response );\r\n-\t\t\t\tsetListCourses( courses );\r\n-\t\t\t\t\u002F\u002F setTotalPages( total_pages );\r\n-\t\t\t} catch ( error ) {\r\n-\t\t\t\tif ( error.name !== 'AbortError' ) {\r\n-\t\t\t\t\tconsole.error( 'Failed to fetch courses:', error );\r\n-\t\t\t\t}\r\n-\t\t\t} finally {\r\n-\t\t\t\tsetLoadingAPI( 0 );\r\n-\t\t\t}\r\n-\t\t};\r\n-\r\n-\t\tfetchCourses();\r\n-\r\n-\t\treturn () => {\r\n-\t\t\tcontroller.abort();\r\n-\t\t};\r\n-\t}, [ context.lpCourseQuery?.order_by, context.lpCourseQuery?.limit ] );\r\n-\r\n-\tconst { blocks } = useSelect(\r\n-\t\t( select ) => {\r\n-\t\t\tconst { getBlocks } = select( blockEditorStore );\r\n-\r\n-\t\t\treturn {\r\n-\t\t\t\tblocks: getBlocks( clientId ),\r\n-\t\t\t};\r\n-\t\t},\r\n-\t\t[ clientId ]\r\n-\t);\r\n-\r\n-\tconst blockContexts = useMemo(\r\n-\t\t() =>\r\n-\t\t\tlistCourses?.map( ( course ) => ( {\r\n-\t\t\t\tlpCourseData: course,\r\n-\t\t\t\tcourseId: course?.ID,\r\n-\t\t\t} ) ),\r\n-\t\t[ listCourses ]\r\n-\t);\r\n-\r\n-\tif ( loadingAPI ) {\r\n-\t\treturn (\r\n-\t\t\t\u003Cul { ...blockProps }>\r\n-\t\t\t\t\u003Cli>{ __( 'Courses Fetching…', 'learnpress' ) }\u003C\u002Fli>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tif ( listCourses.length === 0 && ! loadingAPI ) {\r\n-\t\tconst dataDummy = [\r\n-\t\t\t{\r\n-\t\t\t\tID: 1,\r\n-\t\t\t\tpost_title: __( 'Course One', 'learnpress' ),\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tID: 2,\r\n-\t\t\t\tpost_title: __( 'Course two', 'learnpress' ),\r\n-\t\t\t},\r\n-\t\t];\r\n-\t\tsetListCourses( dataDummy );\r\n-\t}\r\n-\r\n-\tfunction paginationTypeDisplay( type ) {\r\n-\t\tswitch ( type ) {\r\n-\t\t\tcase 'load-more':\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003Cbutton className=\"courses-btn-load-more\">{ __( 'Load More', 'learnpress' ) }\u003C\u002Fbutton>\r\n-\t\t\t\t);\r\n-\t\t\tcase 'infinite':\r\n-\t\t\t\treturn '';\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003Cnav className=\"learnpress-block-pagination navigation pagination\">\r\n-\t\t\t\t\t\t\u003Cul className=\"page-numbers\">\r\n-\t\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\t\u003Ca className=\"prev page-numbers\" href=\"?paged=1\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-arrow-left\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t{ Array.from( { length: 3 }, ( _, index ) => (\r\n-\t\t\t\t\t\t\t\t\u003Cli key={ index }>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca className=\"page-numbers\" href=\"{index}\">\r\n-\t\t\t\t\t\t\t\t\t\t{ index + 1 }\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t) ) }\r\n-\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\u003C\u002Fnav>\r\n-\t\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleGroupControl\r\n-\t\t\t\t\t\tlabel={ __( 'Layout', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ attributes.layout || 'gird' }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tlayout: value || 'gird',\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\tisBlock={ true }\r\n-\t\t\t\t\t>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"list\" label=\"Stack\" \u002F>\r\n-\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"grid\" label=\"Grid\" \u002F>\r\n-\t\t\t\t\t\u003C\u002FToggleGroupControl>\r\n-\r\n-\t\t\t\t\t{ attributes.layout === 'grid' && (\r\n-\t\t\t\t\t\t\u003CRangeControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Columns', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tvalue={ attributes.columns || 3 }\r\n-\t\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcolumns: value,\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\tmin={ 2 }\r\n-\t\t\t\t\t\t\tmax={ 6 }\r\n-\t\t\t\t\t\t\tstep={ 1 }\r\n-\t\t\t\t\t\t\tmarks={ [\r\n-\t\t\t\t\t\t\t\t{ value: 2, label: '2' },\r\n-\t\t\t\t\t\t\t\t{ value: 3, label: '3' },\r\n-\t\t\t\t\t\t\t\t{ value: 4, label: '4' },\r\n-\t\t\t\t\t\t\t\t{ value: 5, label: '5' },\r\n-\t\t\t\t\t\t\t\t{ value: 6, label: '6' },\r\n-\t\t\t\t\t\t\t] }\r\n-\t\t\t\t\t\t\twithInputField={ true }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cul\r\n-\t\t\t\tclassName=\"learn-press-courses wp-block-learn-press-courses\"\r\n-\t\t\t\tdata-layout={ attributes.layout ? attributes.layout : 'list' }\r\n-\t\t\t\tstyle={ {\r\n-\t\t\t\t\t'--columns': attributes.columns || 3,\r\n-\t\t\t\t} }\r\n-\t\t\t>\r\n-\t\t\t\t{ blockContexts &&\r\n-\t\t\t\t\tblockContexts.map( ( blockContext ) => (\r\n-\t\t\t\t\t\t\u003CBlockContextProvider key={ blockContext.courseId } value={ blockContext }>\r\n-\t\t\t\t\t\t\t{ blockContext.courseId ===\r\n-\t\t\t\t\t\t\t( activeBlockContextId || blockContexts[ 0 ]?.courseId ) ? (\r\n-\t\t\t\t\t\t\t\t\u003CPostTemplateInnerBlocks classList={ blockContext.classList } \u002F>\r\n-\t\t\t\t\t\t\t) : null }\r\n-\t\t\t\t\t\t\t\u003CMemoizedPostTemplateBlockPreview\r\n-\t\t\t\t\t\t\t\tblocks={ blocks }\r\n-\t\t\t\t\t\t\t\tblockContextId={ blockContext.courseId }\r\n-\t\t\t\t\t\t\t\tclassList={ blockContext.classList }\r\n-\t\t\t\t\t\t\t\tsetActiveBlockContextId={ setActiveBlockContextId }\r\n-\t\t\t\t\t\t\t\tisHidden={\r\n-\t\t\t\t\t\t\t\t\tblockContext.courseId === ( activeBlockContextId || blockContexts[ 0 ]?.courseId )\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\u003C\u002FBlockContextProvider>\r\n-\t\t\t\t\t) ) }\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\t{ context.lpCourseQuery?.pagination ? paginationTypeDisplay( layoutPagination ) : null }\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import {\n+\tInnerBlocks,\n+\tuseBlockProps,\n+\tBlockContextProvider,\n+\tuseInnerBlocksProps,\n+\tInspectorControls,\n+\t\u002F\u002F eslint-disable-next-line @wordpress\u002Fno-unsafe-wp-apis\n+\t__experimentalUseBlockPreview as useBlockPreview,\n+\tstore as blockEditorStore,\n+} from '@wordpress\u002Fblock-editor';\n+import classnames from 'classnames';\n+import { useSelect } from '@wordpress\u002Fdata';\n+import { memo, useMemo, useState, useEffect } from '@wordpress\u002Felement';\n+import {\n+\tPanelBody,\n+\t__experimentalToggleGroupControl as ToggleGroupControl,\n+\t__experimentalToggleGroupControlOption as ToggleGroupControlOption,\n+\tRangeControl,\n+} from '@wordpress\u002Fcomponents';\n+import { __ } from '@wordpress\u002Fi18n';\n+import API from '..\u002F..\u002F..\u002F..\u002F..\u002Fjs\u002Fapi.js';\n+const TEMPLATE_DEFAULT = [\n+\t[ 'learnpress\u002Fcourse-image' ],\n+\t[ 'learnpress\u002Fcourse-title' ],\n+\t[ 'learnpress\u002Fcourse-price' ],\n+];\n+\n+function PostTemplateInnerBlocks( { classList } ) {\n+\tconst innerBlocksProps = useInnerBlocksProps(\n+\t\t{ className: classnames( 'wp-block-learnpress-course-item-template' ) },\n+\t\t{ template: TEMPLATE_DEFAULT }\n+\t);\n+\treturn (\n+\t\t\u003Cli className=\"course\">\n+\t\t\t\u003Cdiv { ...innerBlocksProps }>\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t);\n+}\n+\n+function PostTemplateBlockPreview( {\n+\tblocks,\n+\tblockContextId,\n+\tclassList,\n+\tisHidden,\n+\tsetActiveBlockContextId,\n+} ) {\n+\tconst blockPreviewProps = useBlockPreview( {\n+\t\tblocks,\n+\t} );\n+\n+\tconst handleOnClick = () => {\n+\t\tsetActiveBlockContextId( blockContextId );\n+\t};\n+\n+\tconst style = {\n+\t\tdisplay: isHidden ? 'none' : undefined,\n+\t};\n+\n+\treturn (\n+\t\t\u003Cli\n+\t\t\tclassName=\"course\"\n+\t\t\ttabIndex={ 0 }\n+\t\t\t\u002F\u002F eslint-disable-next-line jsx-a11y\u002Fno-noninteractive-element-to-interactive-role\n+\t\t\trole=\"button\"\n+\t\t\tonClick={ handleOnClick }\n+\t\t\tonKeyPress={ handleOnClick }\n+\t\t\tstyle={ style }\n+\t\t>\n+\t\t\t\u003Cdiv { ...blockPreviewProps } className=\"wp-block-learnpress-course-item-template\">\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t);\n+}\n+\n+const fetchLearnPressCourses = async ( courseQuery, signal ) => {\n+\tconst url = API.apiCourses;\n+\tlet params = '?return_type=json';\n+\n+\tif ( courseQuery ) {\n+\t\tparams += `&${ new URLSearchParams( courseQuery ).toString() }`;\n+\t}\n+\n+\tconst response = await fetch( url + params, {\n+\t\tmethod: 'GET',\n+\t\tsignal,\n+\t} );\n+\n+\tif ( ! response.ok ) {\n+\t\tthrow new Error( `HTTP error! Status: ${ response.status }` );\n+\t}\n+\n+\treturn await response.json();\n+};\n+\n+const MemoizedPostTemplateBlockPreview = memo( PostTemplateBlockPreview );\n+\n+const Edit = ( { clientId, context, attributes, setAttributes } ) => {\n+\tconst blockProps = useBlockProps( {\n+\t\tclassName: classnames( 'learn-press-courses' ),\n+\t} );\n+\tconst [ activeBlockContextId, setActiveBlockContextId ] = useState();\n+\tconst [ coursesData, setCoursesData ] = useState();\n+\tconst [ listCourses, setListCourses ] = useState( [] );\n+\tconst [ loadingAPI, setLoadingAPI ] = useState( 0 );\n+\t\u002F\u002F const [ totalPages, setTotalPages ] = useState( 1 );\n+\tconst { columns } = attributes;\n+\n+\tconst layoutPagination = context.lpCourseQuery?.pagination_type || 'number';\n+\n+\t\u002F\u002F Fetch courses when query parameters change\n+\tuseEffect( () => {\n+\t\tconst courseQuery = context.lpCourseQuery ?? {};\n+\t\tlet signal, controller;\n+\t\tconst fetchCourses = async () => {\n+\t\t\ttry {\n+\t\t\t\tsetLoadingAPI( 1 );\n+\t\t\t\tcontroller = new AbortController();\n+\t\t\t\tsignal = controller.signal;\n+\n+\t\t\t\tconst response = await fetchLearnPressCourses( courseQuery, signal );\n+\t\t\t\tconst { data } = response;\n+\t\t\t\tconst { courses, page, total, total_pages } = data;\n+\n+\t\t\t\tsetCoursesData( response );\n+\t\t\t\tsetListCourses( courses );\n+\t\t\t\t\u002F\u002F setTotalPages( total_pages );\n+\t\t\t} catch ( error ) {\n+\t\t\t\tif ( error.name !== 'AbortError' ) {\n+\t\t\t\t\tconsole.error( 'Failed to fetch courses:', error );\n+\t\t\t\t}\n+\t\t\t} finally {\n+\t\t\t\tsetLoadingAPI( 0 );\n+\t\t\t}\n+\t\t};\n+\n+\t\tfetchCourses();\n+\n+\t\treturn () => {\n+\t\t\tcontroller.abort();\n+\t\t};\n+\t}, [ context.lpCourseQuery?.order_by, context.lpCourseQuery?.limit ] );\n+\n+\tconst { blocks } = useSelect(\n+\t\t( select ) => {\n+\t\t\tconst { getBlocks } = select( blockEditorStore );\n+\n+\t\t\treturn {\n+\t\t\t\tblocks: getBlocks( clientId ),\n+\t\t\t};\n+\t\t},\n+\t\t[ clientId ]\n+\t);\n+\n+\tconst blockContexts = useMemo(\n+\t\t() =>\n+\t\t\tlistCourses?.map( ( course ) => ( {\n+\t\t\t\tlpCourseData: course,\n+\t\t\t\tcourseId: course?.ID,\n+\t\t\t} ) ),\n+\t\t[ listCourses ]\n+\t);\n+\n+\tif ( loadingAPI ) {\n+\t\treturn (\n+\t\t\t\u003Cul { ...blockProps }>\n+\t\t\t\t\u003Cli>{ __( 'Courses Fetching…', 'learnpress' ) }\u003C\u002Fli>\n+\t\t\t\u003C\u002Ful>\n+\t\t);\n+\t}\n+\n+\tif ( listCourses.length === 0 && ! loadingAPI ) {\n+\t\tconst dataDummy = [\n+\t\t\t{\n+\t\t\t\tID: 1,\n+\t\t\t\tpost_title: __( 'Course One', 'learnpress' ),\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tID: 2,\n+\t\t\t\tpost_title: __( 'Course two', 'learnpress' ),\n+\t\t\t},\n+\t\t];\n+\t\tsetListCourses( dataDummy );\n+\t}\n+\n+\tfunction paginationTypeDisplay( type ) {\n+\t\tswitch ( type ) {\n+\t\t\tcase 'load-more':\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003Cbutton className=\"courses-btn-load-more\">{ __( 'Load More', 'learnpress' ) }\u003C\u002Fbutton>\n+\t\t\t\t);\n+\t\t\tcase 'infinite':\n+\t\t\t\treturn '';\n+\t\t\tdefault:\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003Cnav className=\"learnpress-block-pagination navigation pagination\">\n+\t\t\t\t\t\t\u003Cul className=\"page-numbers\">\n+\t\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\t\u003Ca className=\"prev page-numbers\" href=\"?paged=1\">\n+\t\t\t\t\t\t\t\t\t\u003Ci className=\"lp-icon-arrow-left\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t{ Array.from( { length: 3 }, ( _, index ) => (\n+\t\t\t\t\t\t\t\t\u003Cli key={ index }>\n+\t\t\t\t\t\t\t\t\t\u003Ca className=\"page-numbers\" href=\"{index}\">\n+\t\t\t\t\t\t\t\t\t\t{ index + 1 }\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t) ) }\n+\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\u003C\u002Fnav>\n+\t\t\t\t);\n+\t\t}\n+\t}\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleGroupControl\n+\t\t\t\t\t\tlabel={ __( 'Layout', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ attributes.layout || 'gird' }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tlayout: value || 'gird',\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\tisBlock={ true }\n+\t\t\t\t\t>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"list\" label=\"Stack\" \u002F>\n+\t\t\t\t\t\t\u003CToggleGroupControlOption value=\"grid\" label=\"Grid\" \u002F>\n+\t\t\t\t\t\u003C\u002FToggleGroupControl>\n+\n+\t\t\t\t\t{ attributes.layout === 'grid' && (\n+\t\t\t\t\t\t\u003CRangeControl\n+\t\t\t\t\t\t\tlabel={ __( 'Columns', 'learnpress' ) }\n+\t\t\t\t\t\t\tvalue={ attributes.columns || 3 }\n+\t\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcolumns: value,\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\tmin={ 2 }\n+\t\t\t\t\t\t\tmax={ 6 }\n+\t\t\t\t\t\t\tstep={ 1 }\n+\t\t\t\t\t\t\tmarks={ [\n+\t\t\t\t\t\t\t\t{ value: 2, label: '2' },\n+\t\t\t\t\t\t\t\t{ value: 3, label: '3' },\n+\t\t\t\t\t\t\t\t{ value: 4, label: '4' },\n+\t\t\t\t\t\t\t\t{ value: 5, label: '5' },\n+\t\t\t\t\t\t\t\t{ value: 6, label: '6' },\n+\t\t\t\t\t\t\t] }\n+\t\t\t\t\t\t\twithInputField={ true }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cul\n+\t\t\t\tclassName=\"learn-press-courses wp-block-learn-press-courses\"\n+\t\t\t\tdata-layout={ attributes.layout ? attributes.layout : 'list' }\n+\t\t\t\tstyle={ {\n+\t\t\t\t\t'--columns': attributes.columns || 3,\n+\t\t\t\t} }\n+\t\t\t>\n+\t\t\t\t{ blockContexts &&\n+\t\t\t\t\tblockContexts.map( ( blockContext ) => (\n+\t\t\t\t\t\t\u003CBlockContextProvider key={ blockContext.courseId } value={ blockContext }>\n+\t\t\t\t\t\t\t{ blockContext.courseId ===\n+\t\t\t\t\t\t\t( activeBlockContextId || blockContexts[ 0 ]?.courseId ) ? (\n+\t\t\t\t\t\t\t\t\u003CPostTemplateInnerBlocks classList={ blockContext.classList } \u002F>\n+\t\t\t\t\t\t\t) : null }\n+\t\t\t\t\t\t\t\u003CMemoizedPostTemplateBlockPreview\n+\t\t\t\t\t\t\t\tblocks={ blocks }\n+\t\t\t\t\t\t\t\tblockContextId={ blockContext.courseId }\n+\t\t\t\t\t\t\t\tclassList={ blockContext.classList }\n+\t\t\t\t\t\t\t\tsetActiveBlockContextId={ setActiveBlockContextId }\n+\t\t\t\t\t\t\t\tisHidden={\n+\t\t\t\t\t\t\t\t\tblockContext.courseId === ( activeBlockContextId || blockContexts[ 0 ]?.courseId )\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\u003C\u002FBlockContextProvider>\n+\t\t\t\t\t) ) }\n+\t\t\t\u003C\u002Ful>\n+\t\t\t{ context.lpCourseQuery?.pagination ? paginationTypeDisplay( layoutPagination ) : null }\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u002F**\r\n- * Register block single course property.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import save from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Fcourse-item-template', {\r\n-\t...metadata,\r\n-\ticon: {\r\n-\t\tsrc: (\r\n-\t\t\t\u003Csvg\r\n-\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\r\n-\t\t\t\tviewBox=\"0 0 24 24\"\r\n-\t\t\t\twidth=\"24\"\r\n-\t\t\t\theight=\"24\"\r\n-\t\t\t\taria-hidden=\"true\"\r\n-\t\t\t\tfocusable=\"false\"\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cpath\r\n-\t\t\t\t\tfillRule=\"evenodd\"\r\n-\t\t\t\t\td=\"M5 5.5h14a.5.5 0 01.5.5v1.5a.5.5 0 01-.5.5H5a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 9.232A2 2 0 013 7.5V6a2 2 0 012-2h14a2 2 0 012 2v1.5a2 2 0 01-1 1.732V18a2 2 0 01-2 2H6a2 2 0 01-2-2V9.232zm1.5.268V18a.5.5 0 00.5.5h12a.5.5 0 00.5-.5V9.5h-13z\"\r\n-\t\t\t\t\tclipRule=\"evenodd\"\r\n-\t\t\t\t>\u003C\u002Fpath>\r\n-\t\t\t\u003C\u002Fsvg>\r\n-\t\t),\r\n-\t},\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block single course property.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import save from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Fcourse-item-template', {\n+\t...metadata,\n+\ticon: {\n+\t\tsrc: (\n+\t\t\t\u003Csvg\n+\t\t\t\txmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\"\n+\t\t\t\tviewBox=\"0 0 24 24\"\n+\t\t\t\twidth=\"24\"\n+\t\t\t\theight=\"24\"\n+\t\t\t\taria-hidden=\"true\"\n+\t\t\t\tfocusable=\"false\"\n+\t\t\t>\n+\t\t\t\t\u003Cpath\n+\t\t\t\t\tfillRule=\"evenodd\"\n+\t\t\t\t\td=\"M5 5.5h14a.5.5 0 01.5.5v1.5a.5.5 0 01-.5.5H5a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 9.232A2 2 0 013 7.5V6a2 2 0 012-2h14a2 2 0 012 2v1.5a2 2 0 01-1 1.732V18a2 2 0 01-2 2H6a2 2 0 01-2-2V9.232zm1.5.268V18a.5.5 0 00.5.5h12a.5.5 0 00.5-.5V9.5h-13z\"\n+\t\t\t\t\tclipRule=\"evenodd\"\n+\t\t\t\t>\u003C\u002Fpath>\n+\t\t\t\u003C\u002Fsvg>\n+\t\t),\n+\t},\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-import { useBlockProps, InnerBlocks } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Save = ( props ) => {\r\n-\tconst blockProps = useBlockProps.save();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003CInnerBlocks.Content \u002F>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Save;\r\n+import { useBlockProps, InnerBlocks } from '@wordpress\u002Fblock-editor';\n+\n+const Save = ( props ) => {\n+\tconst blockProps = useBlockProps.save();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003CInnerBlocks.Content \u002F>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Save;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-order-by\",\r\n-\t\"title\": \"Course Sorting\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"editor-alignleft\",\r\n-\t\"description\": \"Show sorting select box for courses.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"sort\", \"learnpress\"],\r\n-\t\"usesContext\": [ \"lpCourseQuery\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ],\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-order-by\",\n+\t\"title\": \"Course Sorting\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"editor-alignleft\",\n+\t\"description\": \"Show sorting select box for courses.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"sort\", \"learnpress\"],\n+\t\"usesContext\": [ \"lpCourseQuery\" ],\n+\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ],\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst { attributes, setAttributes, context } = props;\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst orderByValue = context.lpCourseQuery?.order_by || 'post_date';\r\n-\tconst orderByData = [\r\n-\t\t{ label: 'Newly published', value: 'post_date' },\r\n-\t\t{ label: 'Title a-z', value: 'post_title' },\r\n-\t\t{ label: 'Title z-a', value: 'post_title_desc' },\r\n-\t\t{ label: 'Price high to low', value: 'price' },\r\n-\t\t{ label: 'Price low to high', value: 'price_low' },\r\n-\t\t{ label: 'Popular', value: 'popular' },\r\n-\t\t{ label: 'Average Ratings', value: 'rating' },\r\n-\t];\r\n-\r\n-\tconst orderByLabel =\r\n-\t\torderByData.find( ( item ) => item.value === orderByValue )?.label ??\r\n-\t\t'Newly published';\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"courses-order-by-wrapper\">\r\n-\t\t\t\t\t\u003Cselect name=\"order_by\" className=\"block-courses-order-by\">\r\n-\t\t\t\t\t\t\u003Coption selected=\"selected\">\r\n-\t\t\t\t\t\t\t{ orderByLabel }\r\n-\t\t\t\t\t\t\u003C\u002Foption>\r\n-\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst { attributes, setAttributes, context } = props;\n+\tconst blockProps = useBlockProps();\n+\tconst orderByValue = context.lpCourseQuery?.order_by || 'post_date';\n+\tconst orderByData = [\n+\t\t{ label: 'Newly published', value: 'post_date' },\n+\t\t{ label: 'Title a-z', value: 'post_title' },\n+\t\t{ label: 'Title z-a', value: 'post_title_desc' },\n+\t\t{ label: 'Price high to low', value: 'price' },\n+\t\t{ label: 'Price low to high', value: 'price_low' },\n+\t\t{ label: 'Popular', value: 'popular' },\n+\t\t{ label: 'Average Ratings', value: 'rating' },\n+\t];\n+\n+\tconst orderByLabel =\n+\t\torderByData.find( ( item ) => item.value === orderByValue )?.label ??\n+\t\t'Newly published';\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"courses-order-by-wrapper\">\n+\t\t\t\t\t\u003Cselect name=\"order_by\" className=\"block-courses-order-by\">\n+\t\t\t\t\t\t\u003Coption selected=\"selected\">\n+\t\t\t\t\t\t\t{ orderByLabel }\n+\t\t\t\t\t\t\u003C\u002Foption>\n+\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u002F**\r\n- * Register block course order by property.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course order by property.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-order-by\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-results\",\r\n-\t\"title\": \"Course Results\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"feedback\",\r\n-\t\"description\": \"Show Course Results.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"course results\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-results\",\n+\t\"title\": \"Course Results\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"feedback\",\n+\t\"description\": \"Show Course Results.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"course results\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Flist-courses\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": false,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-import { __, sprintf } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv class=\"course-results\">\r\n-\t\t\t\t\t{ sprintf( __( 'Showing %d-%d of %d results', 'learnpress' ), 1, 6, 20 ) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __, sprintf } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv class=\"course-results\">\n+\t\t\t\t\t{ sprintf( __( 'Showing %d-%d of %d results', 'learnpress' ), 1, 6, 20 ) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u002F**\r\n- * Register block course results.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course results.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fcourse-search\",\r\n-\t\"title\": \"Course Search\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"search\",\r\n-\t\"description\": \"Show Search Course.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"search\", \"learnpress\"],\r\n-\t\"ancestor\": [\"learnpress\u002Flist-courses\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": true,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fcourse-search\",\n+\t\"title\": \"Course Search\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"search\",\n+\t\"description\": \"Show Search Course.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"search\", \"learnpress\"],\n+\t\"ancestor\": [\"learnpress\u002Flist-courses\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": true,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": false,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cform className=\"block-search-courses\" >\r\n-\t\t\t\t\t\u003Cinput type=\"search\" placeholder=\"Search courses...\" name=\"c_search\" value=\"\" \u002F>\r\n-\t\t\t\t\t\u003Cbutton type=\"submit\" disabled name=\"lp-btn-search-courses\">\u003Ci className=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fform>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cform className=\"block-search-courses\" >\n+\t\t\t\t\t\u003Cinput type=\"search\" placeholder=\"Search courses...\" name=\"c_search\" value=\"\" \u002F>\n+\t\t\t\t\t\u003Cbutton type=\"submit\" disabled name=\"lp-btn-search-courses\">\u003Ci className=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fform>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u002F**\r\n- * Register block course search.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course search.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-search\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Flist-courses\",\r\n-\t\"title\": \"Course Listing\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"description\": \"Course Listing block\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"listing course\", \"learnpress\", \"query loop\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"courseQuery\": {\r\n-\t\t\t\"type\": \"object\",\r\n-\t\t\t\"default\": {\r\n-\t\t\t\t\"limit\": 10,\r\n-\t\t\t\t\"order_by\": \"post_date\",\r\n-\t\t\t\t\"related\": false,\r\n-\t\t\t\t\"pagination\": false,\r\n-\t\t\t\t\"pagination_type\": \"number\",\r\n-\t\t\t\t\"tag_id\": \"\",\r\n-\t\t\t\t\"term_id\": \"\",\r\n-\t\t\t\t\"load_ajax\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t\"providesContext\": {\r\n-\t\t\"lpCourseQuery\": \"courseQuery\"\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"html\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ]\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Flist-courses\",\n+\t\"title\": \"Course Listing\",\n+\t\"category\": \"learnpress-category\",\n+\t\"description\": \"Course Listing block\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"listing course\", \"learnpress\", \"query loop\" ],\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"courseQuery\": {\n+\t\t\t\"type\": \"object\",\n+\t\t\t\"default\": {\n+\t\t\t\t\"limit\": 10,\n+\t\t\t\t\"order_by\": \"post_date\",\n+\t\t\t\t\"related\": false,\n+\t\t\t\t\"pagination\": false,\n+\t\t\t\t\"pagination_type\": \"number\",\n+\t\t\t\t\"tag_id\": \"\",\n+\t\t\t\t\"term_id\": \"\",\n+\t\t\t\t\"load_ajax\": false\n+\t\t\t}\n+\t\t}\n+\t},\n+\t\"providesContext\": {\n+\t\t\"lpCourseQuery\": \"courseQuery\"\n+\t},\n+\t\"supports\": {\n+\t\t\"html\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ]\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,178 +1,178 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import {\r\n-\tSelectControl,\r\n-\tToggleControl,\r\n-\tPanelBody,\r\n-\tRangeControl,\r\n-\tTextControl,\r\n-\t__experimentalToolsPanel as ToolsPanel,\r\n-\t__experimentalToolsPanelItem as ToolsPanelItem,\r\n-} from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps, InspectorControls, InnerBlocks } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst { attributes, setAttributes, clientId } = props;\r\n-\tconst { courseQuery } = attributes;\r\n-\r\n-\tconst QUERY_LOOP_TEMPLATE = [ [ 'learnpress\u002Fcourse-item-template' ] ];\r\n-\tconst resetAllTaxonomy = () => {\r\n-\t\tsetAttributes( {\r\n-\t\t\tcourseQuery: {\r\n-\t\t\t\t...courseQuery,\r\n-\t\t\t\tterm_id: '',\r\n-\t\t\t\ttag_id: '',\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst orderByData = [\r\n-\t\t{ label: 'Newly published', value: 'post_date' },\r\n-\t\t{ label: 'Title a-z', value: 'post_title' },\r\n-\t\t{ label: 'Title z-a', value: 'post_title_desc' },\r\n-\t\t{ label: 'Price high to low', value: 'price' },\r\n-\t\t{ label: 'Price low to high', value: 'price_low' },\r\n-\t\t{ label: 'Popular', value: 'popular' },\r\n-\t\t{ label: 'Average Ratings', value: 'rating' },\r\n-\t];\r\n-\tconst paginationTypes = [\r\n-\t\t{ label: __( 'Number', 'learnpress' ), value: 'number' },\r\n-\t\t{ label: __( 'Load more', 'learnpress' ), value: 'load-more' },\r\n-\t\t{ label: __( 'Infinite Scroll', 'learnpress' ), value: 'infinite' },\r\n-\t];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Query Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CRangeControl\r\n-\t\t\t\t\t\tlabel={ __( 'Posts per page' ) }\r\n-\t\t\t\t\t\tvalue={ courseQuery.limit }\r\n-\t\t\t\t\t\tonChange={ ( limit ) =>\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, limit },\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tmin={ 1 }\r\n-\t\t\t\t\t\tmax={ 20 }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Related Course', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ courseQuery.related }\r\n-\t\t\t\t\t\tonChange={ ( related ) => {\r\n-\t\t\t\t\t\t\tif ( related ) {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcourseQuery: {\r\n-\t\t\t\t\t\t\t\t\t\t...courseQuery,\r\n-\t\t\t\t\t\t\t\t\t\tterm_id: '',\r\n-\t\t\t\t\t\t\t\t\t\ttag_id: '',\r\n-\t\t\t\t\t\t\t\t\t\tpagination: false,\r\n-\t\t\t\t\t\t\t\t\t\torder_by: 'post_date',\r\n-\t\t\t\t\t\t\t\t\t\trelated,\r\n-\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, related },\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Enable AJAX', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ courseQuery.load_ajax }\r\n-\t\t\t\t\t\tonChange={ ( load_ajax ) => {\r\n-\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\tcourseQuery: {\r\n-\t\t\t\t\t\t\t\t\t...courseQuery,\r\n-\t\t\t\t\t\t\t\t\tload_ajax,\r\n-\t\t\t\t\t\t\t\t\tload_ajax_after: ! load_ajax ? false : courseQuery.load_ajax_after,\r\n-\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t{ ! courseQuery.related && (\r\n-\t\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Order by', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tvalue={ courseQuery.order_by }\r\n-\t\t\t\t\t\t\toptions={ orderByData }\r\n-\t\t\t\t\t\t\tonChange={ ( order_by ) => {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, order_by },\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t{ ! courseQuery.related && (\r\n-\t\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Pagination', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tchecked={ courseQuery.pagination }\r\n-\t\t\t\t\t\t\tonChange={ ( pagination ) => {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcourseQuery: {\r\n-\t\t\t\t\t\t\t\t\t\t...courseQuery,\r\n-\t\t\t\t\t\t\t\t\t\tpagination,\r\n-\t\t\t\t\t\t\t\t\t\tpagination_type: ! pagination ? 'number' : courseQuery.pagination_type,\r\n-\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t{ courseQuery.pagination && (\r\n-\t\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\t\tlabel={ __( 'Pagination Type', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tvalue={ courseQuery.pagination_type }\r\n-\t\t\t\t\t\t\toptions={ paginationTypes }\r\n-\t\t\t\t\t\t\tonChange={ ( pagination_type ) => {\r\n-\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, pagination_type },\r\n-\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\t{ \u002F* { ! courseQuery.related && (\r\n-\t\t\t\t\t\u003CToolsPanel label={ __( 'Filter', 'learnpress' ) } resetAll={ resetAllTaxonomy }>\r\n-\t\t\t\t\t\t\u003CToolsPanelItem\r\n-\t\t\t\t\t\t\tlabel={ __( 'Taxonomy', 'learnpress' ) }\r\n-\t\t\t\t\t\t\tonSelect={ () => resetAllTaxonomy() }\r\n-\t\t\t\t\t\t\thasValue={ () => !! courseQuery.term_id || !! courseQuery.tag_id }\r\n-\t\t\t\t\t\t\tonDeselect={ () => resetAllTaxonomy() }\r\n-\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\u003CTextControl\r\n-\t\t\t\t\t\t\t\tlabel={ __( 'Category', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\tonChange={ ( term_id ) => {\r\n-\t\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\t\tcourseQuery: {\r\n-\t\t\t\t\t\t\t\t\t\t\t...courseQuery,\r\n-\t\t\t\t\t\t\t\t\t\t\tterm_id,\r\n-\t\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\tvalue={ courseQuery.term_id ?? '' }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\t\t\u003CTextControl\r\n-\t\t\t\t\t\t\t\tlabel={ __( 'Tag', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\tonChange={ ( tag_id ) => {\r\n-\t\t\t\t\t\t\t\t\tsetAttributes( {\r\n-\t\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, tag_id },\r\n-\t\t\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\tvalue={ courseQuery.tag_id ?? '' }\r\n-\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\u003C\u002FToolsPanelItem>\r\n-\t\t\t\t\t\u003C\u002FToolsPanel>\r\n-\t\t\t\t) } *\u002F }\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003CInnerBlocks template={ QUERY_LOOP_TEMPLATE } \u002F>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import {\n+\tSelectControl,\n+\tToggleControl,\n+\tPanelBody,\n+\tRangeControl,\n+\tTextControl,\n+\t__experimentalToolsPanel as ToolsPanel,\n+\t__experimentalToolsPanelItem as ToolsPanelItem,\n+} from '@wordpress\u002Fcomponents';\n+import { useBlockProps, InspectorControls, InnerBlocks } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst { attributes, setAttributes, clientId } = props;\n+\tconst { courseQuery } = attributes;\n+\n+\tconst QUERY_LOOP_TEMPLATE = [ [ 'learnpress\u002Fcourse-item-template' ] ];\n+\tconst resetAllTaxonomy = () => {\n+\t\tsetAttributes( {\n+\t\t\tcourseQuery: {\n+\t\t\t\t...courseQuery,\n+\t\t\t\tterm_id: '',\n+\t\t\t\ttag_id: '',\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst orderByData = [\n+\t\t{ label: 'Newly published', value: 'post_date' },\n+\t\t{ label: 'Title a-z', value: 'post_title' },\n+\t\t{ label: 'Title z-a', value: 'post_title_desc' },\n+\t\t{ label: 'Price high to low', value: 'price' },\n+\t\t{ label: 'Price low to high', value: 'price_low' },\n+\t\t{ label: 'Popular', value: 'popular' },\n+\t\t{ label: 'Average Ratings', value: 'rating' },\n+\t];\n+\tconst paginationTypes = [\n+\t\t{ label: __( 'Number', 'learnpress' ), value: 'number' },\n+\t\t{ label: __( 'Load more', 'learnpress' ), value: 'load-more' },\n+\t\t{ label: __( 'Infinite Scroll', 'learnpress' ), value: 'infinite' },\n+\t];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Query Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CRangeControl\n+\t\t\t\t\t\tlabel={ __( 'Posts per page' ) }\n+\t\t\t\t\t\tvalue={ courseQuery.limit }\n+\t\t\t\t\t\tonChange={ ( limit ) =>\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, limit },\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tmin={ 1 }\n+\t\t\t\t\t\tmax={ 20 }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Related Course', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ courseQuery.related }\n+\t\t\t\t\t\tonChange={ ( related ) => {\n+\t\t\t\t\t\t\tif ( related ) {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcourseQuery: {\n+\t\t\t\t\t\t\t\t\t\t...courseQuery,\n+\t\t\t\t\t\t\t\t\t\tterm_id: '',\n+\t\t\t\t\t\t\t\t\t\ttag_id: '',\n+\t\t\t\t\t\t\t\t\t\tpagination: false,\n+\t\t\t\t\t\t\t\t\t\torder_by: 'post_date',\n+\t\t\t\t\t\t\t\t\t\trelated,\n+\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, related },\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Enable AJAX', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ courseQuery.load_ajax }\n+\t\t\t\t\t\tonChange={ ( load_ajax ) => {\n+\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\tcourseQuery: {\n+\t\t\t\t\t\t\t\t\t...courseQuery,\n+\t\t\t\t\t\t\t\t\tload_ajax,\n+\t\t\t\t\t\t\t\t\tload_ajax_after: ! load_ajax ? false : courseQuery.load_ajax_after,\n+\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t{ ! courseQuery.related && (\n+\t\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\t\tlabel={ __( 'Order by', 'learnpress' ) }\n+\t\t\t\t\t\t\tvalue={ courseQuery.order_by }\n+\t\t\t\t\t\t\toptions={ orderByData }\n+\t\t\t\t\t\t\tonChange={ ( order_by ) => {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, order_by },\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) }\n+\n+\t\t\t\t\t{ ! courseQuery.related && (\n+\t\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\t\tlabel={ __( 'Pagination', 'learnpress' ) }\n+\t\t\t\t\t\t\tchecked={ courseQuery.pagination }\n+\t\t\t\t\t\t\tonChange={ ( pagination ) => {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcourseQuery: {\n+\t\t\t\t\t\t\t\t\t\t...courseQuery,\n+\t\t\t\t\t\t\t\t\t\tpagination,\n+\t\t\t\t\t\t\t\t\t\tpagination_type: ! pagination ? 'number' : courseQuery.pagination_type,\n+\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) }\n+\n+\t\t\t\t\t{ courseQuery.pagination && (\n+\t\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\t\tlabel={ __( 'Pagination Type', 'learnpress' ) }\n+\t\t\t\t\t\t\tvalue={ courseQuery.pagination_type }\n+\t\t\t\t\t\t\toptions={ paginationTypes }\n+\t\t\t\t\t\t\tonChange={ ( pagination_type ) => {\n+\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, pagination_type },\n+\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\t{ \u002F* { ! courseQuery.related && (\n+\t\t\t\t\t\u003CToolsPanel label={ __( 'Filter', 'learnpress' ) } resetAll={ resetAllTaxonomy }>\n+\t\t\t\t\t\t\u003CToolsPanelItem\n+\t\t\t\t\t\t\tlabel={ __( 'Taxonomy', 'learnpress' ) }\n+\t\t\t\t\t\t\tonSelect={ () => resetAllTaxonomy() }\n+\t\t\t\t\t\t\thasValue={ () => !! courseQuery.term_id || !! courseQuery.tag_id }\n+\t\t\t\t\t\t\tonDeselect={ () => resetAllTaxonomy() }\n+\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\u003CTextControl\n+\t\t\t\t\t\t\t\tlabel={ __( 'Category', 'learnpress' ) }\n+\t\t\t\t\t\t\t\tonChange={ ( term_id ) => {\n+\t\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\t\tcourseQuery: {\n+\t\t\t\t\t\t\t\t\t\t\t...courseQuery,\n+\t\t\t\t\t\t\t\t\t\t\tterm_id,\n+\t\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\tvalue={ courseQuery.term_id ?? '' }\n+\t\t\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\t\t\u003CTextControl\n+\t\t\t\t\t\t\t\tlabel={ __( 'Tag', 'learnpress' ) }\n+\t\t\t\t\t\t\t\tonChange={ ( tag_id ) => {\n+\t\t\t\t\t\t\t\t\tsetAttributes( {\n+\t\t\t\t\t\t\t\t\t\tcourseQuery: { ...courseQuery, tag_id },\n+\t\t\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\tvalue={ courseQuery.tag_id ?? '' }\n+\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\u003C\u002FToolsPanelItem>\n+\t\t\t\t\t\u003C\u002FToolsPanel>\n+\t\t\t\t) } *\u002F }\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003CInnerBlocks template={ QUERY_LOOP_TEMPLATE } \u002F>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Register block course title.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import save from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( 'learnpress\u002Flist-courses', {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block course title.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import save from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( 'learnpress\u002Flist-courses', {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-import { useBlockProps, InnerBlocks } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Save = ( props ) => {\r\n-\tconst blockProps = useBlockProps.save();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003CInnerBlocks.Content \u002F>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Save;\r\n+import { useBlockProps, InnerBlocks } from '@wordpress\u002Fblock-editor';\n+\n+const Save = ( props ) => {\n+\tconst blockProps = useBlockProps.save();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003CInnerBlocks.Content \u002F>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Save;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-avatar\",\r\n-\t\"title\": \"Instructor Avatar\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"format-image\",\r\n-\t\"description\": \"Renders template Instructor Avatar PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor avatar single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"__experimentalBorder\": {\r\n-\t\t\t\"color\": true,\r\n-\t\t\t\"radius\": true,\r\n-\t\t\t\"width\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"width\": false,\r\n-\t\t\t\t\"color\": false,\r\n-\t\t\t\t\"radius\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-avatar\",\n+\t\"title\": \"Instructor Avatar\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"format-image\",\n+\t\"description\": \"Renders template Instructor Avatar PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor avatar single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"__experimentalBorder\": {\n+\t\t\t\"color\": true,\n+\t\t\t\"radius\": true,\n+\t\t\t\"width\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"width\": false,\n+\t\t\t\t\"color\": false,\n+\t\t\t\t\"radius\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"instructor-avatar\">\r\n-\t\t\t\t\t\u003Cimg\r\n-\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\r\n-\t\t\t\t\t\talt=\"Instructor avatar placeholder\"\r\n-\t\t\t\t\t\theight={ 300 }\r\n-\t\t\t\t\t\twidth={ 300 }\r\n-\t\t\t\t\t\tstyle={ { aspectRatio: '1 \u002F 1', objectFit: 'cover' } }\r\n-\t\t\t\t\t>\u003C\u002Fimg>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"instructor-avatar\">\n+\t\t\t\t\t\u003Cimg\n+\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\n+\t\t\t\t\t\talt=\"Instructor avatar placeholder\"\n+\t\t\t\t\t\theight={ 300 }\n+\t\t\t\t\t\twidth={ 300 }\n+\t\t\t\t\t\tstyle={ { aspectRatio: '1 \u002F 1', objectFit: 'cover' } }\n+\t\t\t\t\t>\u003C\u002Fimg>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u002F**\r\n- * Register block instructor avatar.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { commentAuthorAvatar } from '@wordpress\u002Ficons';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: commentAuthorAvatar,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor avatar.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { commentAuthorAvatar } from '@wordpress\u002Ficons';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: commentAuthorAvatar,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-avatar\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-background\",\r\n-\t\"title\": \"Instructor Background\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"format-image\",\r\n-\t\"description\": \"Renders template Instructor Background PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor background single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"position\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"center\"\r\n-\t\t},\r\n-\t\t\"size\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"cover\"\r\n-\t\t},\r\n-\t\t\"repeat\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": false\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-background\",\n+\t\"title\": \"Instructor Background\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"format-image\",\n+\t\"description\": \"Renders template Instructor Background PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor background single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"position\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"center\"\n+\t\t},\n+\t\t\"size\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"cover\"\n+\t\t},\n+\t\t\"repeat\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": false\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl, SelectControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst position = [\r\n-\t\t{ label: 'Center', value: 'center' },\r\n-\t\t{ label: 'Left', value: 'left' },\r\n-\t\t{ label: 'Right', value: 'right' },\r\n-\t\t{ label: 'Top', value: 'top' },\r\n-\t\t{ label: 'Bottom', value: 'bottom' },\r\n-\t];\r\n-\r\n-\tconst size = [\r\n-\t\t{ label: 'Auto', value: 'auto' },\r\n-\t\t{ label: 'Cover', value: 'cover' },\r\n-\t\t{ label: 'Contain', value: 'contain' },\r\n-\t\t{ label: 'Unset', value: 'unset' },\r\n-\t];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Background Position', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ props.attributes.position }\r\n-\t\t\t\t\t\toptions={ position }\r\n-\t\t\t\t\t\tonChange={ ( value ) =>\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tposition: value ? value : '',\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Background Size', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ props.attributes.size }\r\n-\t\t\t\t\t\toptions={ size }\r\n-\t\t\t\t\t\tonChange={ ( value ) =>\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tsize: value ? value : '',\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Background Repeat', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.repeat ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\trepeat: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"lp-user-cover-image_background\">\r\n-\t\t\t\t\t\u003Cimg\r\n-\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\r\n-\t\t\t\t\t\talt=\"Instructor background placeholder\"\r\n-\t\t\t\t\t\theight={ 285 }\r\n-\t\t\t\t\t\twidth={ 1280 }\r\n-\t\t\t\t\t\tstyle={ { aspectRatio: 4.5, objectFit: 'cover' } }\r\n-\t\t\t\t\t>\u003C\u002Fimg>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl, SelectControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst position = [\n+\t\t{ label: 'Center', value: 'center' },\n+\t\t{ label: 'Left', value: 'left' },\n+\t\t{ label: 'Right', value: 'right' },\n+\t\t{ label: 'Top', value: 'top' },\n+\t\t{ label: 'Bottom', value: 'bottom' },\n+\t];\n+\n+\tconst size = [\n+\t\t{ label: 'Auto', value: 'auto' },\n+\t\t{ label: 'Cover', value: 'cover' },\n+\t\t{ label: 'Contain', value: 'contain' },\n+\t\t{ label: 'Unset', value: 'unset' },\n+\t];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Background Position', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ props.attributes.position }\n+\t\t\t\t\t\toptions={ position }\n+\t\t\t\t\t\tonChange={ ( value ) =>\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tposition: value ? value : '',\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Background Size', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ props.attributes.size }\n+\t\t\t\t\t\toptions={ size }\n+\t\t\t\t\t\tonChange={ ( value ) =>\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tsize: value ? value : '',\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Background Repeat', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.repeat ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\trepeat: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"lp-user-cover-image_background\">\n+\t\t\t\t\t\u003Cimg\n+\t\t\t\t\t\tsrc=\"\u002Fwp-content\u002Fplugins\u002Flearnpress\u002Fassets\u002Fimages\u002Fno-image.png\"\n+\t\t\t\t\t\talt=\"Instructor background placeholder\"\n+\t\t\t\t\t\theight={ 285 }\n+\t\t\t\t\t\twidth={ 1280 }\n+\t\t\t\t\t\tstyle={ { aspectRatio: 4.5, objectFit: 'cover' } }\n+\t\t\t\t\t>\u003C\u002Fimg>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block instructor background.\r\n- *\u002F\r\n-\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor background.\n+ *\u002F\n+\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-course\",\r\n-\t\"title\": \"Instructor Count Course\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"media-text\",\r\n-\t\"description\": \"Renders template instructor count course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor course single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"hidden\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"\"\r\n-\t\t}\r\n-\t},\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-course\",\n+\t\"title\": \"Instructor Count Course\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"media-text\",\n+\t\"description\": \"Renders template instructor count course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor course single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"attributes\": {\n+\t\t\"hidden\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"\"\n+\t\t}\n+\t},\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, SelectControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst mode = [\r\n-\t\t{ label: 'Icon + Number + Text', value: '' },\r\n-\t\t{ label: 'Icon + Number', value: 'text' },\r\n-\t\t{ label: 'Number + Text', value: 'icon' },\r\n-\t];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Display Modes', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ props.attributes.hidden }\r\n-\t\t\t\t\t\toptions={ mode }\r\n-\t\t\t\t\t\tonChange={ ( value ) =>\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\thidden: value ? value : '',\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"wrapper-instructor-total-courses\">\r\n-\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'icon' ? (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t\u003Cspan className=\"lp-ico lp-icon-courses\">\u003C\u002Fspan>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\t\u003Cspan className=\"instructor-total-courses\">{ '99' }\u003C\u002Fspan>\r\n-\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'text' ? (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t\u003Cspan>{ ' Courses' }\u003C\u002Fspan>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, SelectControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst mode = [\n+\t\t{ label: 'Icon + Number + Text', value: '' },\n+\t\t{ label: 'Icon + Number', value: 'text' },\n+\t\t{ label: 'Number + Text', value: 'icon' },\n+\t];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Display Modes', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ props.attributes.hidden }\n+\t\t\t\t\t\toptions={ mode }\n+\t\t\t\t\t\tonChange={ ( value ) =>\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\thidden: value ? value : '',\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"wrapper-instructor-total-courses\">\n+\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'icon' ? (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t\u003Cspan className=\"lp-ico lp-icon-courses\">\u003C\u002Fspan>\n+\t\t\t\t\t) }\n+\t\t\t\t\t\u003Cspan className=\"instructor-total-courses\">{ '99' }\u003C\u002Fspan>\n+\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'text' ? (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t\u003Cspan>{ ' Courses' }\u003C\u002Fspan>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u002F**\r\n- * Register block instructor course property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor course property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-description\",\r\n-\t\"title\": \"Instructor Description\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"format-image\",\r\n-\t\"description\": \"Renders template Instructor Description PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor description single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-description\",\n+\t\"title\": \"Instructor Description\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"format-image\",\n+\t\"description\": \"Renders template Instructor Description PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor description single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"instructor-description\">\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t'It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.'\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"instructor-description\">\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t'It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.'\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u002F**\r\n- * Register block instructor description property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor description property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-description\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-name\",\r\n-\t\"title\": \"Instructor Name\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"nametag\",\r\n-\t\"description\": \"Renders template Instructor Name PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor name single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-name\",\n+\t\"title\": \"Instructor Name\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"nametag\",\n+\t\"description\": \"Renders template Instructor Name PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor name single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Ch2>\r\n-\t\t\t\t\t\u003Cspan className=\"instructor-display-name\">\r\n-\t\t\t\t\t\t{ __( \"Instructor's name\", 'learnpress' ) }\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fh2>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Ch2>\n+\t\t\t\t\t\u003Cspan className=\"instructor-display-name\">\n+\t\t\t\t\t\t{ __( \"Instructor's name\", 'learnpress' ) }\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fh2>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u002F**\r\n- * Register block instructor name.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { title } from '@wordpress\u002Ficons';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: title,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor name.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { title } from '@wordpress\u002Ficons';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: title,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-social\",\r\n-\t\"title\": \"Instructor Social\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"share\",\r\n-\t\"description\": \"Renders template Instructor Social PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor social single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"attributes\": {\r\n-\t\t\"target\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t},\r\n-\t\t\"nofollow\": {\r\n-\t\t\t\"type\": \"boolean\",\r\n-\t\t\t\"default\": false\r\n-\t\t}\r\n-\t},\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-social\",\n+\t\"title\": \"Instructor Social\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"share\",\n+\t\"description\": \"Renders template Instructor Social PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor social single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"attributes\": {\n+\t\t\"target\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t},\n+\t\t\"nofollow\": {\n+\t\t\t\"type\": \"boolean\",\n+\t\t\t\"default\": false\n+\t\t}\n+\t},\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Open links in new tab', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\ttarget: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003CToggleControl\r\n-\t\t\t\t\t\tlabel={ __( 'Add nofollow attribute', 'learnpress' ) }\r\n-\t\t\t\t\t\tchecked={ props.attributes.nofollow ? true : false }\r\n-\t\t\t\t\t\tonChange={ ( value ) => {\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\tnofollow: value ? true : false,\r\n-\t\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"instructor-social\">\r\n-\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, ToggleControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Open links in new tab', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.target ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\ttarget: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003CToggleControl\n+\t\t\t\t\t\tlabel={ __( 'Add nofollow attribute', 'learnpress' ) }\n+\t\t\t\t\t\tchecked={ props.attributes.nofollow ? true : false }\n+\t\t\t\t\t\tonChange={ ( value ) => {\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\tnofollow: value ? true : false,\n+\t\t\t\t\t\t\t} );\n+\t\t\t\t\t\t} }\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"instructor-social\">\n+\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>\n+\t\t\t\t\t\u003Ci className=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u002F**\r\n- * Register block instructor social property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { customLink } from '@wordpress\u002Ficons';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: customLink,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block instructor social property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { customLink } from '@wordpress\u002Ficons';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: customLink,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Finstructor-student\",\r\n-\t\"title\": \"Instructor Count Student\",\r\n-\t\"category\": \"learnpress-course-elements\",\r\n-\t\"icon\": \"admin-users\",\r\n-\t\"description\": \"Renders template instructor count student PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"instructor student single\", \"learnpress\" ],\r\n-\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"attributes\": {\r\n-\t\t\"hidden\": {\r\n-\t\t\t\"type\": \"string\",\r\n-\t\t\t\"default\": \"\"\r\n-\t\t}\r\n-\t},\r\n-\t\"supports\": {\r\n-\t\t\"multiple\": false,\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Finstructor-student\",\n+\t\"title\": \"Instructor Count Student\",\n+\t\"category\": \"learnpress-course-elements\",\n+\t\"icon\": \"admin-users\",\n+\t\"description\": \"Renders template instructor count student PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"instructor student single\", \"learnpress\" ],\n+\t\"ancestor\": [ \"learnpress\u002Fsingle-instructor\" ],\n+\t\"usesContext\": [],\n+\t\"attributes\": {\n+\t\t\"hidden\": {\n+\t\t\t\"type\": \"string\",\n+\t\t\t\"default\": \"\"\n+\t\t}\n+\t},\n+\t\"supports\": {\n+\t\t\"multiple\": false,\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\r\n-import { PanelBody, SelectControl } from '@wordpress\u002Fcomponents';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst mode = [\r\n-\t\t{ label: 'Icon + Number + Text', value: '' },\r\n-\t\t{ label: 'Icon + Number', value: 'text' },\r\n-\t\t{ label: 'Number + Text', value: 'icon' },\r\n-\t];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInspectorControls>\r\n-\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\r\n-\t\t\t\t\t\u003CSelectControl\r\n-\t\t\t\t\t\tlabel={ __( 'Display Modes', 'learnpress' ) }\r\n-\t\t\t\t\t\tvalue={ props.attributes.hidden }\r\n-\t\t\t\t\t\toptions={ mode }\r\n-\t\t\t\t\t\tonChange={ ( value ) =>\r\n-\t\t\t\t\t\t\tprops.setAttributes( {\r\n-\t\t\t\t\t\t\t\thidden: value ? value : '',\r\n-\t\t\t\t\t\t\t} )\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F>\r\n-\t\t\t\t\u003C\u002FPanelBody>\r\n-\t\t\t\u003C\u002FInspectorControls>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003Cdiv className=\"wrapper-instructor-total-students\">\r\n-\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'icon' ? (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t\u003Cspan className=\"lp-ico lp-icon-students\">\u003C\u002Fspan>\r\n-\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\u003Cspan className=\"instructor-total-students\">{ '99' }\u003C\u002Fspan>\r\n-\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'text' ? (\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t) : (\r\n-\t\t\t\t\t\t\u003Cspan>{ ' Students' }\u003C\u002Fspan>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useBlockProps, InspectorControls } from '@wordpress\u002Fblock-editor';\n+import { PanelBody, SelectControl } from '@wordpress\u002Fcomponents';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst mode = [\n+\t\t{ label: 'Icon + Number + Text', value: '' },\n+\t\t{ label: 'Icon + Number', value: 'text' },\n+\t\t{ label: 'Number + Text', value: 'icon' },\n+\t];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInspectorControls>\n+\t\t\t\t\u003CPanelBody title={ __( 'Settings', 'learnpress' ) }>\n+\t\t\t\t\t\u003CSelectControl\n+\t\t\t\t\t\tlabel={ __( 'Display Modes', 'learnpress' ) }\n+\t\t\t\t\t\tvalue={ props.attributes.hidden }\n+\t\t\t\t\t\toptions={ mode }\n+\t\t\t\t\t\tonChange={ ( value ) =>\n+\t\t\t\t\t\t\tprops.setAttributes( {\n+\t\t\t\t\t\t\t\thidden: value ? value : '',\n+\t\t\t\t\t\t\t} )\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\u002F>\n+\t\t\t\t\u003C\u002FPanelBody>\n+\t\t\t\u003C\u002FInspectorControls>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003Cdiv className=\"wrapper-instructor-total-students\">\n+\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'icon' ? (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t\u003Cspan className=\"lp-ico lp-icon-students\">\u003C\u002Fspan>\n+\t\t\t\t\t) }\n+\n+\t\t\t\t\t\u003Cspan className=\"instructor-total-students\">{ '99' }\u003C\u002Fspan>\n+\t\t\t\t\t{ props.attributes.hidden && props.attributes.hidden === 'text' ? (\n+\t\t\t\t\t\t''\n+\t\t\t\t\t) : (\n+\t\t\t\t\t\t\u003Cspan>{ ' Students' }\u003C\u002Fspan>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u002F**\r\n- * Register block instructor student property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n-\r\n+\u002F**\n+ * Register block instructor student property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+const templatesName = [ Number( lpDataAdmin?.single_instructor_id ) ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fsingle-course\",\r\n-\t\"title\": \"Single Course\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"archive\",\r\n-\t\"description\": \"Renders Template Single Course PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"learnpress single course\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true,\r\n-\t\t\"wrapper\": false\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fsingle-course\",\n+\t\"title\": \"Single Course\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"archive\",\n+\t\"description\": \"Renders Template Single Course PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"learnpress single course\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true,\n+\t\t\"wrapper\": false\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,168 +1,168 @@\n-import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\tconst TEMPLATE = [\r\n-\t\t[\r\n-\t\t\t'core\u002Fgroup',\r\n-\t\t\t{\r\n-\t\t\t\tmetadata: { name: 'Header' },\r\n-\t\t\t\tclassName: 'lp-single-course__header',\r\n-\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t},\r\n-\t\t\t[\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\tmetadata: { name: 'Inner' },\r\n-\t\t\t\t\t\tclassName: 'lp-single-course__header__inner',\r\n-\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t[ 'learnpress\u002Fbreadcrumb', {} ],\r\n-\t\t\t\t\t\t[ 'learnpress\u002Fcourse-title', { tag: 'h1' } ],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\tmetadata: { name: 'Meta Left' },\r\n-\t\t\t\t\t\t\t\tclassName: 'course-instructor-category',\r\n-\t\t\t\t\t\t\t\tlayout: { type: 'flex', flexWrap: 'nowrap' },\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-instructor', {} ],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-categories', {} ],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'learnpress\u002Fcourse-date', {} ],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t],\r\n-\t\t[\r\n-\t\t\t'core\u002Fgroup',\r\n-\t\t\t{\r\n-\t\t\t\tmetadata: { name: 'Area' },\r\n-\t\t\t\tclassName: 'lp-content-area',\r\n-\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t},\r\n-\t\t\t[\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\tmetadata: { name: 'Main' },\r\n-\t\t\t\t\t\tclassName: 'lp-single-course-main',\r\n-\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\tmetadata: { name: 'Left' },\r\n-\t\t\t\t\t\t\t\tclassName: 'lp-single-course-main__left',\r\n-\t\t\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-description', {} ],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-features', {} ],\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-target-audiences',\r\n-\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-requirements', {} ],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-faqs', {} ],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-curriculum', {} ],\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-instructor-info',\r\n-\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-comment', {} ],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\tmetadata: { name: 'Right' },\r\n-\t\t\t\t\t\t\t\tclassName: 'lp-single-course-main__right',\r\n-\t\t\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t\t\tclassName:\r\n-\t\t\t\t\t\t\t\t\t\t\t'lp-single-course-main__right__inner',\r\n-\t\t\t\t\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-image', {} ],\r\n-\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-price', {} ],\r\n-\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-progress',\r\n-\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t\t\t\t\t\t\t{\r\n-\t\t\t\t\t\t\t\t\t\t\t\tmetadata: { name: 'Meta' },\r\n-\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'info-metas',\r\n-\t\t\t\t\t\t\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-student',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-lesson',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-duration',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-quiz',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-level',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-button',\r\n-\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-share', {} ],\r\n-\t\t\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-feature-review',\r\n-\t\t\t\t\t\t\t\t\t\t\t{},\r\n-\t\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'core\u002Fgroup',\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\tmetadata: { name: 'Related' },\r\n-\t\t\t\t\t\tclassName: 'lp-list-courses-related',\r\n-\t\t\t\t\t\tlayout: { type: 'default' },\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t[ [ 'learnpress\u002Fcourse-related', {} ] ],\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t],\r\n-\t];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\t\u003CInnerBlocks template={ TEMPLATE } \u002F>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\tconst TEMPLATE = [\n+\t\t[\n+\t\t\t'core\u002Fgroup',\n+\t\t\t{\n+\t\t\t\tmetadata: { name: 'Header' },\n+\t\t\t\tclassName: 'lp-single-course__header',\n+\t\t\t\tlayout: { type: 'default' },\n+\t\t\t},\n+\t\t\t[\n+\t\t\t\t[\n+\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t{\n+\t\t\t\t\t\tmetadata: { name: 'Inner' },\n+\t\t\t\t\t\tclassName: 'lp-single-course__header__inner',\n+\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t},\n+\t\t\t\t\t[\n+\t\t\t\t\t\t[ 'learnpress\u002Fbreadcrumb', {} ],\n+\t\t\t\t\t\t[ 'learnpress\u002Fcourse-title', { tag: 'h1' } ],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\tmetadata: { name: 'Meta Left' },\n+\t\t\t\t\t\t\t\tclassName: 'course-instructor-category',\n+\t\t\t\t\t\t\t\tlayout: { type: 'flex', flexWrap: 'nowrap' },\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-instructor', {} ],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-categories', {} ],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'learnpress\u002Fcourse-date', {} ],\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t],\n+\t\t],\n+\t\t[\n+\t\t\t'core\u002Fgroup',\n+\t\t\t{\n+\t\t\t\tmetadata: { name: 'Area' },\n+\t\t\t\tclassName: 'lp-content-area',\n+\t\t\t\tlayout: { type: 'default' },\n+\t\t\t},\n+\t\t\t[\n+\t\t\t\t[\n+\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t{\n+\t\t\t\t\t\tmetadata: { name: 'Main' },\n+\t\t\t\t\t\tclassName: 'lp-single-course-main',\n+\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t},\n+\t\t\t\t\t[\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\tmetadata: { name: 'Left' },\n+\t\t\t\t\t\t\t\tclassName: 'lp-single-course-main__left',\n+\t\t\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-description', {} ],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-features', {} ],\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-target-audiences',\n+\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-requirements', {} ],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-faqs', {} ],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-curriculum', {} ],\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-instructor-info',\n+\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-comment', {} ],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\tmetadata: { name: 'Right' },\n+\t\t\t\t\t\t\t\tclassName: 'lp-single-course-main__right',\n+\t\t\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t\t\tclassName:\n+\t\t\t\t\t\t\t\t\t\t\t'lp-single-course-main__right__inner',\n+\t\t\t\t\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-image', {} ],\n+\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-price', {} ],\n+\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-progress',\n+\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t\t\t\t\t\t\t{\n+\t\t\t\t\t\t\t\t\t\t\t\tmetadata: { name: 'Meta' },\n+\t\t\t\t\t\t\t\t\t\t\t\tclassName: 'info-metas',\n+\t\t\t\t\t\t\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-student',\n+\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-lesson',\n+\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-duration',\n+\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-quiz',\n+\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-level',\n+\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-button',\n+\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t\t[ 'learnpress\u002Fcourse-share', {} ],\n+\t\t\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\t\t'learnpress\u002Fcourse-feature-review',\n+\t\t\t\t\t\t\t\t\t\t\t{},\n+\t\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'core\u002Fgroup',\n+\t\t\t\t\t{\n+\t\t\t\t\t\tmetadata: { name: 'Related' },\n+\t\t\t\t\t\tclassName: 'lp-list-courses-related',\n+\t\t\t\t\t\tlayout: { type: 'default' },\n+\t\t\t\t\t},\n+\t\t\t\t\t[ [ 'learnpress\u002Fcourse-related', {} ] ],\n+\t\t\t\t],\n+\t\t\t],\n+\t\t],\n+\t];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\t\u003CInnerBlocks template={ TEMPLATE } \u002F>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Register block single course property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block single course property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const save = ( props ) => {\r\n-\tconst blockProps = useBlockProps.save();\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInnerBlocks.Content \u002F>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const save = ( props ) => {\n+\tconst blockProps = useBlockProps.save();\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInnerBlocks.Content \u002F>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-close\",\r\n-\t\"title\": \"Item Close\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"no-alt\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\r\n-\t\t\"item close course\",\r\n-\t\t\"learnpress\"\r\n-\t],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-close\",\n+\t\"title\": \"Item Close\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"no-alt\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\n+\t\t\"item close course\",\n+\t\t\"learnpress\"\n+\t],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Ca class=\"back-course\" aria-label=\"Back to course\">\r\n-\t\t\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Ca class=\"back-course\" aria-label=\"Back to course\">\n+\t\t\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item close.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item close.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-close\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-comment\",\r\n-\t\"title\": \"Item Comment\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"admin-comments\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item comment\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-comment\",\n+\t\"title\": \"Item Comment\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"admin-comments\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item comment\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv className=\"learn-press-comments\">\r\n-\t\t\t\t\u003Cdiv className=\"comment-respond\">\r\n-\t\t\t\t\t\u003Ch3 className=\"comment-reply-title\">Leave a Reply\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cp class=\"comment-form-comment\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"comment\">\r\n-\t\t\t\t\t\t\tComment \u003Cspan class=\"required\">*\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Flabel>{ ' ' }\r\n-\t\t\t\t\t\t\u003Ctextarea name=\"comment\" cols=\"45\" rows=\"8\" maxlength=\"65525\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"form-submit wp-block-button\">\r\n-\t\t\t\t\t\t\u003Cinput\r\n-\t\t\t\t\t\t\tname=\"submit\"\r\n-\t\t\t\t\t\t\ttype=\"submit\"\r\n-\t\t\t\t\t\t\tclass=\"submit wp-element-button\"\r\n-\t\t\t\t\t\t\tvalue=\"Post Comment\"\r\n-\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv className=\"learn-press-comments\">\n+\t\t\t\t\u003Cdiv className=\"comment-respond\">\n+\t\t\t\t\t\u003Ch3 className=\"comment-reply-title\">Leave a Reply\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cp class=\"comment-form-comment\">\n+\t\t\t\t\t\t\u003Clabel for=\"comment\">\n+\t\t\t\t\t\t\tComment \u003Cspan class=\"required\">*\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Flabel>{ ' ' }\n+\t\t\t\t\t\t\u003Ctextarea name=\"comment\" cols=\"45\" rows=\"8\" maxlength=\"65525\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"form-submit wp-block-button\">\n+\t\t\t\t\t\t\u003Cinput\n+\t\t\t\t\t\t\tname=\"submit\"\n+\t\t\t\t\t\t\ttype=\"submit\"\n+\t\t\t\t\t\t\tclass=\"submit wp-element-button\"\n+\t\t\t\t\t\t\tvalue=\"Post Comment\"\n+\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item curriculum.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit.js';\r\n-import { save } from '.\u002Fsave.js';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item curriculum.\n+ *\u002F\n+\n+import edit from '.\u002Fedit.js';\n+import { save } from '.\u002Fsave.js';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-comment\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-content\",\r\n-\t\"title\": \"Item Content\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item content course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-content\",\n+\t\"title\": \"Item Content\",\n+\t\"category\": \"learnpress-category\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item content course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv id=\"learn-press-content-item\">\r\n-\t\t\t\t\u003Cdiv class=\"content-item-scrollable\">\r\n-\t\t\t\t\t\u003Cdiv class=\"content-item-wrap\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"content-item-summary\">\r\n-\t\t\t\t\t\t\t\u003Ch1 class=\"course-item-title lesson-title\">Lesson 2\u003C\u002Fh1>\r\n-\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"content-item-description lesson-description\">\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tVidisse advesperascit mediocribus adulter everti fiant redderet sequens discimus\r\n-\t\t\t\t\t\t\t\t\thinc licentiam lectulis levares\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tAcupenserem dicat spelunca opifices cuiusque oculis iniquus platonis littera\r\n-\t\t\t\t\t\t\t\t\tsummis miseriarum testimonium dicat hominem inventus\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tRelinquet debuerunt tuae animoque verbis prima vitiose negotii inchoatum don\r\n-\t\t\t\t\t\t\t\t\tsapiens postulo luci illustris amitti falli consul propter proferebas possent\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tNecopinato crimen dempta soletis evolare democritus doleas secusne brevem\r\n-\t\t\t\t\t\t\t\t\tpertinacem levem hieronymi periculo diem tuum\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tPrimos singulis persecuti exponere modicum aculeis relinquunt atque evolare\r\n-\t\t\t\t\t\t\t\t\tphaedro detractus refert spectare squilla odio\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tConcordiae mene sensim vivunt postulet quaeram quali cupit optatius praeterita\r\n-\t\t\t\t\t\t\t\t\tdisseretur potius eam augendae praesidii erunt pollicentur recusant hortandus\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tMultarum consequentia confecimus miserrimus statui quidque liceat occultissimarum\r\n-\t\t\t\t\t\t\t\t\tintervalla longinquum iisque\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tSanguine zeno artem usum summum dissensione eorum alias attinet prosunt appellamus\r\n-\t\t\t\t\t\t\t\t\tsensitque vestra consuetudo commodaita\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tSerpere vitae labefactare commovebat quanto dies subito qualis impedit ingredimur\r\n-\t\t\t\t\t\t\t\t\tincontentae aderit etenim rationis malitiam audax amicitia quodsi malitiam\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\t\t\tPietatem quibus gravior ita mentio essentne putaverunt habere nominati gravis\r\n-\t\t\t\t\t\t\t\t\tvocant legem iocari sequens duxisse viros simonides\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv id=\"learn-press-content-item\">\n+\t\t\t\t\u003Cdiv class=\"content-item-scrollable\">\n+\t\t\t\t\t\u003Cdiv class=\"content-item-wrap\">\n+\t\t\t\t\t\t\u003Cdiv class=\"content-item-summary\">\n+\t\t\t\t\t\t\t\u003Ch1 class=\"course-item-title lesson-title\">Lesson 2\u003C\u002Fh1>\n+\n+\t\t\t\t\t\t\t\u003Cdiv class=\"content-item-description lesson-description\">\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tVidisse advesperascit mediocribus adulter everti fiant redderet sequens discimus\n+\t\t\t\t\t\t\t\t\thinc licentiam lectulis levares\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tAcupenserem dicat spelunca opifices cuiusque oculis iniquus platonis littera\n+\t\t\t\t\t\t\t\t\tsummis miseriarum testimonium dicat hominem inventus\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tRelinquet debuerunt tuae animoque verbis prima vitiose negotii inchoatum don\n+\t\t\t\t\t\t\t\t\tsapiens postulo luci illustris amitti falli consul propter proferebas possent\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tNecopinato crimen dempta soletis evolare democritus doleas secusne brevem\n+\t\t\t\t\t\t\t\t\tpertinacem levem hieronymi periculo diem tuum\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tPrimos singulis persecuti exponere modicum aculeis relinquunt atque evolare\n+\t\t\t\t\t\t\t\t\tphaedro detractus refert spectare squilla odio\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tConcordiae mene sensim vivunt postulet quaeram quali cupit optatius praeterita\n+\t\t\t\t\t\t\t\t\tdisseretur potius eam augendae praesidii erunt pollicentur recusant hortandus\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tMultarum consequentia confecimus miserrimus statui quidque liceat occultissimarum\n+\t\t\t\t\t\t\t\t\tintervalla longinquum iisque\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tSanguine zeno artem usum summum dissensione eorum alias attinet prosunt appellamus\n+\t\t\t\t\t\t\t\t\tsensitque vestra consuetudo commodaita\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tSerpere vitae labefactare commovebat quanto dies subito qualis impedit ingredimur\n+\t\t\t\t\t\t\t\t\tincontentae aderit etenim rationis malitiam audax amicitia quodsi malitiam\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\t\t\tPietatem quibus gravior ita mentio essentne putaverunt habere nominati gravis\n+\t\t\t\t\t\t\t\t\tvocant legem iocari sequens duxisse viros simonides\n+\t\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block item content.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { postContent } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: postContent,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: postContent,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item content.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { postContent } from '@wordpress\u002Ficons';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: postContent,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: postContent,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-content\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-curriculum\",\r\n-\t\"title\": \"Item Curriculum\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"list-view\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item curriculum course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-curriculum\",\n+\t\"title\": \"Item Curriculum\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"list-view\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item curriculum course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1088 +1,1088 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv class=\"lp-course-curriculum\">\r\n-\t\t\t\t\u003Cdiv class=\"course-curriculum\">\r\n-\t\t\t\t\t\u003Cul class=\"course-sections\">\r\n-\t\t\t\t\t\t\u003Cli class=\"course-section\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 1\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">10\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"763\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.1\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 1\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"764\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.2\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 2\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"765\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.3\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 3\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"766\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.4\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 4\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"767\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.5\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 5\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"768\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.6\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 6\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"769\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca\r\n-\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-7-5\u002F\"\r\n-\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\r\n-\t\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.7\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 7\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"770\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca\r\n-\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-8-5\u002F\"\r\n-\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\r\n-\t\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.8\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 8\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"771\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca\r\n-\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-9-5\u002F\"\r\n-\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\r\n-\t\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.9\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 9\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"772\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.10\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 1\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">40 Minutes\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">15 Questions\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 2\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">14\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"788\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.1\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 10\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"789\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.2\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 11\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"790\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.3\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 12\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"791\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.4\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 13\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"792\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.5\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 14\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"793\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.6\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 15\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"794\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.7\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 16\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"795\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.8\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 17\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"796\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.9\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 18\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"797\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.10\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 19\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"798\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"11\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.11\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 20\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"799\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"12\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.12\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 21\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"800\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"13\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.13\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 22\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"801\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"14\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.14\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 2\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">40 Minutes\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">15 Questions\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 3\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">10\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"817\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.1\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 23\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"818\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.2\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 24\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"819\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.3\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 25\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"820\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.4\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 26\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"821\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.5\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 27\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"822\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.6\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 28\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"823\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.7\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 29\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"824\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.8\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 30\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"825\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.9\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 31\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"826\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.10\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 3\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">30 Minutes\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">10 Questions\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 4\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">13\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"837\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.1\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 32\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"838\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.2\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 33\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"839\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.3\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 34\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"840\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.4\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 35\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"841\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.5\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 36\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"842\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.6\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 37\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"843\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.7\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 38\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"844\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.8\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 39\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"845\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.9\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 40\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"846\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.10\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 41\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"847\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"11\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.11\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 42\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"848\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"12\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.12\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 43\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003Cli\r\n-\t\t\t\t\t\t\t\t\tclass=\"course-item \"\r\n-\t\t\t\t\t\t\t\t\tdata-item-id=\"849\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-order=\"13\"\r\n-\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.13\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 4\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">10 Minutes\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">10 Questions\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv class=\"lp-course-curriculum\">\n+\t\t\t\t\u003Cdiv class=\"course-curriculum\">\n+\t\t\t\t\t\u003Cul class=\"course-sections\">\n+\t\t\t\t\t\t\u003Cli class=\"course-section\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 1\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">10\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"763\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.1\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 1\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"764\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.2\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 2\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"765\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.3\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 3\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"766\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.4\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 4\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"767\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.5\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 5\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"768\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.6\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 6\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"769\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca\n+\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-7-5\u002F\"\n+\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\n+\t\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.7\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 7\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"770\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca\n+\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-8-5\u002F\"\n+\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\n+\t\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.8\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 8\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"771\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca\n+\t\t\t\t\t\t\t\t\t\thref=\"http:\u002F\u002Flp.local\u002Fcourses\u002Fzab\u002Flessons\u002Flesson-9-5\u002F\"\n+\t\t\t\t\t\t\t\t\t\tclass=\"course-item__link\"\n+\t\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.9\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 9\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"772\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">1.10\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 1\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">40 Minutes\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">15 Questions\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 2\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">14\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"788\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.1\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 10\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"789\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.2\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 11\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"790\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.3\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 12\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"791\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.4\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 13\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"792\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.5\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 14\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"793\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.6\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 15\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"794\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.7\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 16\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"795\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.8\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 17\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"796\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.9\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 18\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"797\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.10\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 19\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"798\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"11\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.11\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 20\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"799\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"12\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.12\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 21\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"800\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"13\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.13\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 22\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"801\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"14\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">2.14\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 2\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">40 Minutes\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">15 Questions\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 3\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">10\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"817\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.1\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 23\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"818\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.2\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 24\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"819\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.3\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 25\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"820\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.4\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 26\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"821\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.5\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 27\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"822\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.6\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 28\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"823\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.7\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 29\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"824\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.8\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 30\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"825\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.9\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 31\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"826\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">3.10\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 3\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">30 Minutes\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">10 Questions\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli class=\"course-section lp-collapse\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-header\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-toggle\">\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section-info\">\n+\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-section__title\">Section 4\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"section-count-items\">13\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cul class=\"course-section__items\">\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"837\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"1\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.1\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 32\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"838\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"2\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.2\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 33\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"839\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"3\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.3\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 34\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"840\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"4\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.4\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 35\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"841\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"5\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.5\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 36\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"842\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"6\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.6\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 37\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"843\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"7\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.7\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 38\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"844\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"8\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.8\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 39\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"845\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"9\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.9\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 40\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"846\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"10\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.10\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 41\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"847\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"11\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.11\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 42\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"848\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"12\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_lesson\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_lesson\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.12\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Lesson 43\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003Cli\n+\t\t\t\t\t\t\t\t\tclass=\"course-item \"\n+\t\t\t\t\t\t\t\t\tdata-item-id=\"849\"\n+\t\t\t\t\t\t\t\t\tdata-item-order=\"13\"\n+\t\t\t\t\t\t\t\t\tdata-item-type=\"lp_quiz\"\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Ca class=\"course-item__link\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__info\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico lp_quiz\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-order lp-hidden\">4.13\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__content\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__left\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item-title\">Quiz 4\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__right\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"duration\">10 Minutes\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"question-count\">10 Questions\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"course-item__status\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"course-item-ico in-progress\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item curriculum.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item curriculum.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-curriculum\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-hidden-sidebar\",\r\n-\t\"title\": \"Item Hidden Sidebar\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"hidden\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item hidden sidebar course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-hidden-sidebar\",\n+\t\"title\": \"Item Hidden Sidebar\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"hidden\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item hidden sidebar course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\">\u003C\u002Finput>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\">\u003C\u002Finput>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item hidden sidebar.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item hidden sidebar.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-hidden-sidebar\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-navigation\",\r\n-\t\"title\": \"Item Nagivation\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item nagivation course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-navigation\",\n+\t\"title\": \"Item Nagivation\",\n+\t\"category\": \"learnpress-category\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item nagivation course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv class=\"course-item-nav\" data-nav=\"all\">\r\n-\t\t\t\t\u003Cdiv class=\"prev\">\r\n-\t\t\t\t\t\u003Cdiv class=\"course-item-nav__name\">Lesson 1\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Ca>Prev\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"next\">\r\n-\t\t\t\t\t\u003Cdiv class=\"course-item-nav__name\">Lesson 3\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Ca>Next\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv class=\"course-item-nav\" data-nav=\"all\">\n+\t\t\t\t\u003Cdiv class=\"prev\">\n+\t\t\t\t\t\u003Cdiv class=\"course-item-nav__name\">Lesson 1\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Ca>Prev\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Cdiv class=\"next\">\n+\t\t\t\t\t\u003Cdiv class=\"course-item-nav__name\">Lesson 3\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Ca>Next\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u002F**\r\n- * Register block item navigation.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-import { queryPaginationNumbers } from '@wordpress\u002Ficons';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\ticon: queryPaginationNumbers,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\ticon: queryPaginationNumbers,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item navigation.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+import { queryPaginationNumbers } from '@wordpress\u002Ficons';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\ticon: queryPaginationNumbers,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\ticon: queryPaginationNumbers,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-navigation\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-progress\",\r\n-\t\"title\": \"Item Progress\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"chart-line\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item progress course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": [ \"wide\", \"full\" ],\r\n-\t\t\"html\": false,\r\n-\t\t\"typography\": {\r\n-\t\t\t\"fontSize\": true,\r\n-\t\t\t\"lineHeight\": false,\r\n-\t\t\t\"fontWeight\": true,\r\n-\t\t\t\"__experimentalFontFamily\": false,\r\n-\t\t\t\"__experimentalTextDecoration\": false,\r\n-\t\t\t\"__experimentalFontStyle\": false,\r\n-\t\t\t\"__experimentalFontWeight\": true,\r\n-\t\t\t\"__experimentalLetterSpacing\": false,\r\n-\t\t\t\"__experimentalTextTransform\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\r\n-\t\t},\r\n-\t\t\"color\": {\r\n-\t\t\t\"background\": false,\r\n-\t\t\t\"text\": true,\r\n-\t\t\t\"link\": false,\r\n-\t\t\t\"gradients\": false,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"text\": true\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t\"spacing\": {\r\n-\t\t\t\"padding\": true,\r\n-\t\t\t\"margin\": true,\r\n-\t\t\t\"__experimentalDefaultControls\": {\r\n-\t\t\t\t\"margin\": false,\r\n-\t\t\t\t\"padding\": false\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-progress\",\n+\t\"title\": \"Item Progress\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"chart-line\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item progress course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": [ \"wide\", \"full\" ],\n+\t\t\"html\": false,\n+\t\t\"typography\": {\n+\t\t\t\"fontSize\": true,\n+\t\t\t\"lineHeight\": false,\n+\t\t\t\"fontWeight\": true,\n+\t\t\t\"__experimentalFontFamily\": false,\n+\t\t\t\"__experimentalTextDecoration\": false,\n+\t\t\t\"__experimentalFontStyle\": false,\n+\t\t\t\"__experimentalFontWeight\": true,\n+\t\t\t\"__experimentalLetterSpacing\": false,\n+\t\t\t\"__experimentalTextTransform\": true,\n+\t\t\t\"__experimentalDefaultControls\": { \"fontSize\": true }\n+\t\t},\n+\t\t\"color\": {\n+\t\t\t\"background\": false,\n+\t\t\t\"text\": true,\n+\t\t\t\"link\": false,\n+\t\t\t\"gradients\": false,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"text\": true\n+\t\t\t}\n+\t\t},\n+\t\t\"spacing\": {\n+\t\t\t\"padding\": true,\n+\t\t\t\"margin\": true,\n+\t\t\t\"__experimentalDefaultControls\": {\n+\t\t\t\t\"margin\": false,\n+\t\t\t\t\"padding\": false\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv class=\"items-progress\">\r\n-\t\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\t\u003Cspan class=\"items-completed\">43\u003C\u002Fspan> of 86 items\r\n-\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cdiv class=\"learn-press-progress\">\r\n-\t\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t\tclass=\"learn-press-progress__active\"\r\n-\t\t\t\t\t\tdata-value=\"50%\"\r\n-\t\t\t\t\t\tstyle={ { left: '-50%' } }\r\n-\t\t\t\t\t>\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv class=\"items-progress\">\n+\t\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\t\u003Cspan class=\"items-completed\">43\u003C\u002Fspan> of 86 items\n+\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\u003Cdiv class=\"learn-press-progress\">\n+\t\t\t\t\t\u003Cdiv\n+\t\t\t\t\t\tclass=\"learn-press-progress__active\"\n+\t\t\t\t\t\tdata-value=\"50%\"\n+\t\t\t\t\t\tstyle={ { left: '-50%' } }\n+\t\t\t\t\t>\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item progress.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item progress.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-progress\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fitem-search\",\r\n-\t\"title\": \"Item Search\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"search\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [ \"item search course\", \"learnpress\" ],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fitem-search\",\n+\t\"title\": \"Item Search\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"search\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [ \"item search course\", \"learnpress\" ],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003Cdiv class=\"search-course\">\r\n-\t\t\t\t\u003Cinput type=\"text\" name=\"s\" autocomplete=\"off\" placeholder=\"Search for course content\" \u002F>\r\n-\t\t\t\t\u003Cbutton name=\"submit\" aria-label=\"Search for course content\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003Cdiv class=\"search-course\">\n+\t\t\t\t\u003Cinput type=\"text\" name=\"s\" autocomplete=\"off\" placeholder=\"Search for course content\" \u002F>\n+\t\t\t\t\u003Cbutton name=\"submit\" aria-label=\"Search for course content\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u002F**\r\n- * Register block item search.\r\n- *\u002F\r\n-\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\r\n-\r\n-const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block item search.\n+ *\u002F\n+\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+import { checkTemplatesCanLoadBlock } from '..\u002F..\u002FutilBlock.js';\n+\n+const templatesName = [ 'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course_item' ];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-item\u002Fitem-search\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fsingle-course-legacy\",\r\n-\t\"title\": \"Single Course (Legacy)\",\r\n-\t\"category\": \"learnpress-legacy\",\r\n-\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\r\n-\t\t\"legacy\",\r\n-\t\t\"learnpress\"\r\n-\t],\r\n-\t\"ancestor\": [],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"align\": true\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fsingle-course-legacy\",\n+\t\"title\": \"Single Course (Legacy)\",\n+\t\"category\": \"learnpress-legacy\",\n+\t\"description\": \"Renders template Single Course Legacy PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\n+\t\t\"legacy\",\n+\t\t\"learnpress\"\n+\t],\n+\t\"ancestor\": [],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"align\": true\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { Placeholder } from '@wordpress\u002Fcomponents';\r\n-import { useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-const Edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv { ...blockProps }>\r\n-\t\t\t\u003CPlaceholder\r\n-\t\t\t\tlabel={ __( 'Single Course (Legacy)', 'learnpress' ) }\r\n-\t\t\t>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t{\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'Display full content of Single Course, can not edit.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002FPlaceholder>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Edit;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import { Placeholder } from '@wordpress\u002Fcomponents';\n+import { useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+const Edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\treturn (\n+\t\t\u003Cdiv { ...blockProps }>\n+\t\t\t\u003CPlaceholder\n+\t\t\t\tlabel={ __( 'Single Course (Legacy)', 'learnpress' ) }\n+\t\t\t>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t{\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'Display full content of Single Course, can not edit.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t}\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002FPlaceholder>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Edit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u002F**\r\n- * Register block single course legacy.\r\n- *\u002F\r\n-import edit from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { checkTemplatesCanLoadBlock } from '..\u002FutilBlock.js';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-const templatesName = [\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\r\n-];\r\n-\r\n-checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\r\n-\tregisterBlockType( metadataNew.name, {\r\n-\t\t...metadataNew,\r\n-\t\tedit,\r\n-\t\tsave,\r\n-\t} );\r\n-} );\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block single course legacy.\n+ *\u002F\n+import edit from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { checkTemplatesCanLoadBlock } from '..\u002FutilBlock.js';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+const templatesName = [\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course-offline',\n+];\n+\n+checkTemplatesCanLoadBlock( templatesName, metadata, ( metadataNew ) => {\n+\tregisterBlockType( metadataNew.name, {\n+\t\t...metadataNew,\n+\t\tedit,\n+\t\tsave,\n+\t} );\n+} );\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-export const save = ( props ) => null;\r\n+export const save = ( props ) => null;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fblock.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fblock.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fblock.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fblock.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-{\r\n-\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\r\n-\t\"apiVersion\": 3,\r\n-\t\"name\": \"learnpress\u002Fsingle-instructor\",\r\n-\t\"title\": \"Single Instructor\",\r\n-\t\"category\": \"learnpress-category\",\r\n-\t\"icon\": \"archive\",\r\n-\t\"description\": \"Renders Template Single Instructor PHP templates.\",\r\n-\t\"textdomain\": \"learnpress\",\r\n-\t\"keywords\": [\"learnpress single instructor\", \"learnpress\"],\r\n-\t\"usesContext\": [],\r\n-\t\"supports\": {\r\n-\t\t\"inserter\": true,\r\n-\t\t\"reusable\": true,\r\n-\t\t\"reorder\": true,\r\n-\t\t\"html\": false,\r\n-\t\t\"multiple\": true,\r\n-\t\t\"wrapper\": false\r\n-\t}\r\n-}\r\n+{\n+\t\"$schema\": \"https:\u002F\u002Fschemas.wp.org\u002Ftrunk\u002Fblock.json\",\n+\t\"apiVersion\": 3,\n+\t\"name\": \"learnpress\u002Fsingle-instructor\",\n+\t\"title\": \"Single Instructor\",\n+\t\"category\": \"learnpress-category\",\n+\t\"icon\": \"archive\",\n+\t\"description\": \"Renders Template Single Instructor PHP templates.\",\n+\t\"textdomain\": \"learnpress\",\n+\t\"keywords\": [\"learnpress single instructor\", \"learnpress\"],\n+\t\"usesContext\": [],\n+\t\"supports\": {\n+\t\t\"inserter\": true,\n+\t\t\"reusable\": true,\n+\t\t\"reorder\": true,\n+\t\t\"html\": false,\n+\t\t\"multiple\": true,\n+\t\t\"wrapper\": false\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fedit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fedit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fedit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fedit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const edit = ( props ) => {\r\n-\tconst blockProps = useBlockProps();\r\n-\r\n-\tconst TEMPLATE = [];\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv { ...blockProps }>{ \u003CInnerBlocks \u002F> }\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { InnerBlocks, useBlockProps } from '@wordpress\u002Fblock-editor';\n+\n+export const edit = ( props ) => {\n+\tconst blockProps = useBlockProps();\n+\n+\tconst TEMPLATE = [];\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv { ...blockProps }>{ \u003CInnerBlocks \u002F> }\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Register block single instructor property.\r\n- *\u002F\r\n-import { edit } from '.\u002Fedit';\r\n-import { save } from '.\u002Fsave';\r\n-import metadata from '.\u002Fblock.json';\r\n-import { registerBlockType } from '@wordpress\u002Fblocks';\r\n-\r\n-registerBlockType( metadata.name, {\r\n-\t...metadata,\r\n-\tedit,\r\n-\tsave,\r\n-} );\r\n+\u002F**\n+ * Register block single instructor property.\n+ *\u002F\n+import { edit } from '.\u002Fedit';\n+import { save } from '.\u002Fsave';\n+import metadata from '.\u002Fblock.json';\n+import { registerBlockType } from '@wordpress\u002Fblocks';\n+\n+registerBlockType( metadata.name, {\n+\t...metadata,\n+\tedit,\n+\tsave,\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fsave.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fsave.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fsave.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-instructor\u002Fsave.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-import { InnerBlocks } from '@wordpress\u002Fblock-editor';\r\n-\r\n-export const save = ( props ) => {\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003CInnerBlocks.Content \u002F>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n+import { InnerBlocks } from '@wordpress\u002Fblock-editor';\n+\n+export const save = ( props ) => {\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003CInnerBlocks.Content \u002F>\n+\t\t\u003C\u002F>\n+\t);\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002FutilBlock.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u002F**\r\n- * Check if the block can be loaded in the current template.\r\n- *\r\n- * @since 4.2.8.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-import { unregisterBlockType, getBlockType } from '@wordpress\u002Fblocks';\r\n-import { subscribe, select } from '@wordpress\u002Fdata';\r\n-\r\n-let currentPostIdOld = null;\r\n-const checkTemplatesCanLoadBlock = ( templates, metadata, callBack ) => {\r\n-\tsubscribe( () => {\r\n-\t\tconst metaDataNew = { ...metadata };\r\n-\t\tconst store = select( 'core\u002Feditor' ) || null;\r\n-\r\n-\t\tif ( ! store || typeof store.getCurrentPostId !== 'function' || ! store.getCurrentPostId() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst currentPostId = store.getCurrentPostId();\r\n-\r\n-\t\tif ( currentPostId === null ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( currentPostIdOld === currentPostId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tcurrentPostIdOld = currentPostId;\r\n-\t\tif ( getBlockType( metaDataNew.name ) ) {\r\n-\t\t\tunregisterBlockType( metaDataNew.name );\r\n-\r\n-\t\t\tif ( templates.includes( currentPostId ) ) {\r\n-\t\t\t\tmetaDataNew.ancestor = null;\r\n-\t\t\t\tcallBack( metaDataNew );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! metaDataNew.ancestor ) {\r\n-\t\t\t\t\tmetaDataNew.ancestor = [];\r\n-\t\t\t\t}\r\n-\t\t\t\tcallBack( metaDataNew );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-export { checkTemplatesCanLoadBlock };\r\n+\u002F**\n+ * Check if the block can be loaded in the current template.\n+ *\n+ * @since 4.2.8.4\n+ * @version 1.0.0\n+ *\u002F\n+import { unregisterBlockType, getBlockType } from '@wordpress\u002Fblocks';\n+import { subscribe, select } from '@wordpress\u002Fdata';\n+\n+let currentPostIdOld = null;\n+const checkTemplatesCanLoadBlock = ( templates, metadata, callBack ) => {\n+\tsubscribe( () => {\n+\t\tconst metaDataNew = { ...metadata };\n+\t\tconst store = select( 'core\u002Feditor' ) || null;\n+\n+\t\tif ( ! store || typeof store.getCurrentPostId !== 'function' || ! store.getCurrentPostId() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst currentPostId = store.getCurrentPostId();\n+\n+\t\tif ( currentPostId === null ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( currentPostIdOld === currentPostId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tcurrentPostIdOld = currentPostId;\n+\t\tif ( getBlockType( metaDataNew.name ) ) {\n+\t\t\tunregisterBlockType( metaDataNew.name );\n+\n+\t\t\tif ( templates.includes( currentPostId ) ) {\n+\t\t\t\tmetaDataNew.ancestor = null;\n+\t\t\t\tcallBack( metaDataNew );\n+\t\t\t} else {\n+\t\t\t\tif ( ! metaDataNew.ancestor ) {\n+\t\t\t\t\tmetaDataNew.ancestor = [];\n+\t\t\t\t}\n+\t\t\t\tcallBack( metaDataNew );\n+\t\t\t}\n+\t\t}\n+\t} );\n+};\n+\n+export { checkTemplatesCanLoadBlock };\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fdata-controls.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fdata-controls.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fdata-controls.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Fdata-controls.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-import triggerFetch from '@wordpress\u002Fapi-fetch';\r\n-\r\n-const createRegistryControl = function createRegistryControl( registryControl ) {\r\n-\tregistryControl.isRegistryControl = true;\r\n-\r\n-\treturn registryControl;\r\n-};\r\n-\r\n-export const apiFetch = ( request ) => {\r\n-\treturn {\r\n-\t\ttype: 'API_FETCH',\r\n-\t\trequest,\r\n-\t};\r\n-};\r\n-\r\n-export function select( storeKey, selectorName, ...args ) {\r\n-\treturn {\r\n-\t\ttype: 'SELECT',\r\n-\t\tstoreKey,\r\n-\t\tselectorName,\r\n-\t\targs,\r\n-\t};\r\n-}\r\n-\r\n-export function dispatch( storeKey, actionName, ...args ) {\r\n-\treturn {\r\n-\t\ttype: 'DISPATCH',\r\n-\t\tstoreKey,\r\n-\t\tactionName,\r\n-\t\targs,\r\n-\t};\r\n-}\r\n-\r\n-const resolveSelect = ( registry, { storeKey, selectorName, args } ) => {\r\n-\treturn new Promise( ( resolve ) => {\r\n-\t\tconst hasFinished = () => registry.select( '' )\r\n-\t\t\t.hasFinishedResolution( storeKey, selectorName, args );\r\n-\r\n-\t\tconst getResult = () => registry.select( storeKey )[ selectorName ]\r\n-\t\t\t.apply( null, args );\r\n-\r\n-\t\tconst result = getResult();\r\n-\r\n-\t\tif ( hasFinished() ) {\r\n-\t\t\treturn resolve( result );\r\n-\t\t}\r\n-\r\n-\t\tconst unsubscribe = registry.subscribe( () => {\r\n-\t\t\tif ( hasFinished() ) {\r\n-\t\t\t\tunsubscribe();\r\n-\t\t\t\tresolve( getResult() );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n-\r\n-export const controls = {\r\n-\tAPI_FETCH( { request } ) {\r\n-\t\treturn triggerFetch( request );\r\n-\t},\r\n-\tSELECT: createRegistryControl(\r\n-\t\t( registry ) => ( { storeKey, selectorName, args } ) => {\r\n-\t\t\treturn registry.select( storeKey )[ selectorName ].hasResolver\r\n-\t\t\t\t? resolveSelect( registry, { storeKey, selectorName, args } )\r\n-\t\t\t\t: registry.select( storeKey )[ selectorName ]( ...args );\r\n-\t\t}\r\n-\t),\r\n-\tDISPATCH: createRegistryControl(\r\n-\t\t( registry ) => ( { storeKey, actionName, args } ) => {\r\n-\t\t\treturn registry.dispatch( storeKey )[ actionName ]( ...args );\r\n-\t\t}\r\n-\t),\r\n-};\r\n+import triggerFetch from '@wordpress\u002Fapi-fetch';\n+\n+const createRegistryControl = function createRegistryControl( registryControl ) {\n+\tregistryControl.isRegistryControl = true;\n+\n+\treturn registryControl;\n+};\n+\n+export const apiFetch = ( request ) => {\n+\treturn {\n+\t\ttype: 'API_FETCH',\n+\t\trequest,\n+\t};\n+};\n+\n+export function select( storeKey, selectorName, ...args ) {\n+\treturn {\n+\t\ttype: 'SELECT',\n+\t\tstoreKey,\n+\t\tselectorName,\n+\t\targs,\n+\t};\n+}\n+\n+export function dispatch( storeKey, actionName, ...args ) {\n+\treturn {\n+\t\ttype: 'DISPATCH',\n+\t\tstoreKey,\n+\t\tactionName,\n+\t\targs,\n+\t};\n+}\n+\n+const resolveSelect = ( registry, { storeKey, selectorName, args } ) => {\n+\treturn new Promise( ( resolve ) => {\n+\t\tconst hasFinished = () => registry.select( '' )\n+\t\t\t.hasFinishedResolution( storeKey, selectorName, args );\n+\n+\t\tconst getResult = () => registry.select( storeKey )[ selectorName ]\n+\t\t\t.apply( null, args );\n+\n+\t\tconst result = getResult();\n+\n+\t\tif ( hasFinished() ) {\n+\t\t\treturn resolve( result );\n+\t\t}\n+\n+\t\tconst unsubscribe = registry.subscribe( () => {\n+\t\t\tif ( hasFinished() ) {\n+\t\t\t\tunsubscribe();\n+\t\t\t\tresolve( getResult() );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+};\n+\n+export const controls = {\n+\tAPI_FETCH( { request } ) {\n+\t\treturn triggerFetch( request );\n+\t},\n+\tSELECT: createRegistryControl(\n+\t\t( registry ) => ( { storeKey, selectorName, args } ) => {\n+\t\t\treturn registry.select( storeKey )[ selectorName ].hasResolver\n+\t\t\t\t? resolveSelect( registry, { storeKey, selectorName, args } )\n+\t\t\t\t: registry.select( storeKey )[ selectorName ]( ...args );\n+\t\t}\n+\t),\n+\tDISPATCH: createRegistryControl(\n+\t\t( registry ) => ( { storeKey, actionName, args } ) => {\n+\t\t\treturn registry.dispatch( storeKey )[ actionName ]( ...args );\n+\t\t}\n+\t),\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fcustom.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fcustom.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fcustom.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fcustom.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u002F**\r\n- * Custom functions for frontend quiz.\r\n- *\u002F\r\n-\r\n-const { Hook } = LP;\r\n-\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-Hook.addFilter( 'question-blocks', function( blocks ) {\r\n-\treturn blocks; \u002F\u002F\u002F[ 'answer-options', 'title', 'content', 'hint', 'explanation'];\r\n-} );\r\n-\r\n-Hook.addAction( 'before-start-quiz', function() {\r\n-} );\r\n-\r\n-Hook.addAction( 'quiz-started', function( results, id ) {\r\n-\t$( `.course-item-${ id }` ).removeClass( 'status-completed failed passed' ).addClass( 'has-status status-started' );\r\n-\r\n-\twindow.onbeforeunload = function() {\r\n-\t\treturn 'Warning!';\r\n-\t};\r\n-} );\r\n-\r\n-Hook.addAction( 'quiz-submitted', function( response, id ) {\r\n-\t$( `.course-item-${ id }` ).removeClass( 'status-started passed failed' ).addClass( `has-status status-completed ${ response.results.graduation }` );\r\n-\twindow.onbeforeunload = null;\r\n-} );\r\n+\u002F**\n+ * Custom functions for frontend quiz.\n+ *\u002F\n+\n+const { Hook } = LP;\n+\n+const $ = window.jQuery || jQuery;\n+\n+Hook.addFilter( 'question-blocks', function( blocks ) {\n+\treturn blocks; \u002F\u002F\u002F[ 'answer-options', 'title', 'content', 'hint', 'explanation'];\n+} );\n+\n+Hook.addAction( 'before-start-quiz', function() {\n+} );\n+\n+Hook.addAction( 'quiz-started', function( results, id ) {\n+\t$( `.course-item-${ id }` ).removeClass( 'status-completed failed passed' ).addClass( 'has-status status-started' );\n+\n+\twindow.onbeforeunload = function() {\n+\t\treturn 'Warning!';\n+\t};\n+} );\n+\n+Hook.addAction( 'quiz-submitted', function( response, id ) {\n+\t$( `.course-item-${ id }` ).removeClass( 'status-started passed failed' ).addClass( `has-status status-completed ${ response.results.graduation }` );\n+\twindow.onbeforeunload = null;\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors\u002Finstructor-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors\u002Finstructor-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors\u002Finstructor-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors\u002Finstructor-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,129 +1,129 @@\n-import { lpAddQueryArgs } from '..\u002F..\u002Futils\u002Futils';\r\n-let query = {};\r\n-\r\n-let lpUrlParam = [];\r\n-if ( 'undefined' !== typeof lpSkeletonParam ) {\r\n-\tlpUrlParam = lpSkeletonParam;\r\n-}\r\n-\r\n-export default function InstructorList() {\r\n-\t\u002F\u002F Call API get instructors without wait element ready\r\n-\tlet htmlListItemInstructor = '';\r\n-\tlet htmlPagination = '';\r\n-\tgetInstructors( { ...lpUrlParam, paged: 1 }, true, function( res ) {\r\n-\t\thtmlListItemInstructor = res.data.content;\r\n-\t\tif ( res.data.pagination !== undefined ) {\r\n-\t\t\thtmlPagination = res.data.pagination;\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tlet totalTimeDetect = 0;\r\n-\tconst detectedElArchive = setInterval( function() {\r\n-\t\ttotalTimeDetect++;\r\n-\r\n-\t\t\u002F\u002F Stop if detected more than 10 seconds\r\n-\t\tif ( totalTimeDetect > 10000 ) {\r\n-\t\t\tclearInterval( detectedElArchive );\r\n-\t\t}\r\n-\r\n-\t\tconst elListInstructors = document.querySelector( '.lp-list-instructors' );\r\n-\t\tif ( elListInstructors && htmlListItemInstructor !== '' ) {\r\n-\t\t\tclearInterval( detectedElArchive );\r\n-\t\t\tconst elUlListInstructors = document.querySelector( '.ul-list-instructors' );\r\n-\t\t\telListInstructors.classList.add( 'detected' );\r\n-\t\t\telUlListInstructors.innerHTML = htmlListItemInstructor;\r\n-\t\t\telListInstructors.insertAdjacentHTML( 'beforeend', htmlPagination );\r\n-\t\t}\r\n-\t}, 1 );\r\n-\r\n-\t\u002F\u002F For case multiple ul list instructors on a page.\r\n-\t\u002F*document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\t\tconst elListInstructors = document.querySelectorAll( '.lp-list-instructors:not(.detected)' );\r\n-\t\tif ( elListInstructors.length > 0 ) {\r\n-\t\t\telListInstructors.forEach( function( el ) {\r\n-\t\t\t\tconst elUlListInstructors = el.querySelector( '.ul-list-instructors' );\r\n-\t\t\t\tquery = { paged: 1 };\r\n-\t\t\t\tgetInstructors( query, true, function( res ) {\r\n-\t\t\t\t\telUlListInstructors.innerHTML = res.data.content;\r\n-\r\n-\t\t\t\t\tif ( res.data.pagination !== undefined ) {\r\n-\t\t\t\t\t\tel.insertAdjacentHTML( 'beforeend', res.data.pagination );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t} );*\u002F\r\n-\r\n-\tpagination();\r\n-}\r\n-\r\n-const getInstructors = ( queryParam, firstLoad = false, callBack ) => {\r\n-\tconst url = lpAddQueryArgs( urlListInstructorsAPI, queryParam );\r\n-\tconst paramsFetch = {\r\n-\t\tmethod: 'GET',\r\n-\t};\r\n-\r\n-\tfetch( url, paramsFetch )\r\n-\t\t.then( ( response ) => response.json() )\r\n-\t\t.then( ( res ) => {\r\n-\t\t\tif ( res.data.content !== undefined ) {\r\n-\t\t\t\tif ( callBack ) {\r\n-\t\t\t\t\tcallBack( res );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} ).catch( ( error ) => {\r\n-\t\t\tconsole.log( error );\r\n-\t\t} ).finally( () => {\r\n-\t\t\tif ( firstLoad === false ) {\r\n-\t\t\t\tconst urlPush = lpInstructorsUrl + '?paged=' + queryParam.paged;\r\n-\t\t\t\twindow.history.pushState( '', '', urlPush );\r\n-\t\t\t}\r\n-\t\t} );\r\n-};\r\n-\r\n-const pagination = () => {\r\n-\tdocument.addEventListener( 'click', function( event ) {\r\n-\t\tconst target = event.target;\r\n-\t\tconst elListInstructors = target.closest( '.lp-list-instructors' );\r\n-\t\tif ( ! elListInstructors ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst elUlListInstructors = elListInstructors.querySelector( '.ul-list-instructors' );\r\n-\t\tconst pagination = target.closest( '.learn-press-pagination' );\r\n-\r\n-\t\tif ( ! pagination || ! elListInstructors || ! elUlListInstructors ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlet pageLinkNode;\r\n-\t\tif ( target.tagName.toLowerCase() === 'a' ) {\r\n-\t\t\tpageLinkNode = target;\r\n-\t\t} else if ( target.closest( 'a.page-numbers' ) ) {\r\n-\t\t\tpageLinkNode = target.closest( 'a.page-numbers' );\r\n-\t\t} else {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tevent.preventDefault();\r\n-\r\n-\t\tconst currentPage = parseInt( pagination.querySelector( '.current' ).innerHTML );\r\n-\t\tlet paged;\r\n-\r\n-\t\tif ( pageLinkNode.classList.contains( 'next' ) ) {\r\n-\t\t\tpaged = currentPage + 1;\r\n-\t\t} else if ( pageLinkNode.classList.contains( 'prev' ) ) {\r\n-\t\t\tpaged = currentPage - 1;\r\n-\t\t} else {\r\n-\t\t\tpaged = pageLinkNode.innerHTML;\r\n-\t\t}\r\n-\r\n-\t\tquery = { ...query, paged, ...lpUrlParam };\r\n-\t\tgetInstructors( query, false, function( res ) {\r\n-\t\t\telUlListInstructors.innerHTML = res.data.content;\r\n-\t\t\tpagination.remove();\r\n-\t\t\tif ( res.data.pagination !== undefined ) {\r\n-\t\t\t\telListInstructors.insertAdjacentHTML( 'beforeend', res.data.pagination );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n+import { lpAddQueryArgs } from '..\u002F..\u002Futils\u002Futils';\n+let query = {};\n+\n+let lpUrlParam = [];\n+if ( 'undefined' !== typeof lpSkeletonParam ) {\n+\tlpUrlParam = lpSkeletonParam;\n+}\n+\n+export default function InstructorList() {\n+\t\u002F\u002F Call API get instructors without wait element ready\n+\tlet htmlListItemInstructor = '';\n+\tlet htmlPagination = '';\n+\tgetInstructors( { ...lpUrlParam, paged: 1 }, true, function( res ) {\n+\t\thtmlListItemInstructor = res.data.content;\n+\t\tif ( res.data.pagination !== undefined ) {\n+\t\t\thtmlPagination = res.data.pagination;\n+\t\t}\n+\t} );\n+\n+\tlet totalTimeDetect = 0;\n+\tconst detectedElArchive = setInterval( function() {\n+\t\ttotalTimeDetect++;\n+\n+\t\t\u002F\u002F Stop if detected more than 10 seconds\n+\t\tif ( totalTimeDetect > 10000 ) {\n+\t\t\tclearInterval( detectedElArchive );\n+\t\t}\n+\n+\t\tconst elListInstructors = document.querySelector( '.lp-list-instructors' );\n+\t\tif ( elListInstructors && htmlListItemInstructor !== '' ) {\n+\t\t\tclearInterval( detectedElArchive );\n+\t\t\tconst elUlListInstructors = document.querySelector( '.ul-list-instructors' );\n+\t\t\telListInstructors.classList.add( 'detected' );\n+\t\t\telUlListInstructors.innerHTML = htmlListItemInstructor;\n+\t\t\telListInstructors.insertAdjacentHTML( 'beforeend', htmlPagination );\n+\t\t}\n+\t}, 1 );\n+\n+\t\u002F\u002F For case multiple ul list instructors on a page.\n+\t\u002F*document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\t\tconst elListInstructors = document.querySelectorAll( '.lp-list-instructors:not(.detected)' );\n+\t\tif ( elListInstructors.length > 0 ) {\n+\t\t\telListInstructors.forEach( function( el ) {\n+\t\t\t\tconst elUlListInstructors = el.querySelector( '.ul-list-instructors' );\n+\t\t\t\tquery = { paged: 1 };\n+\t\t\t\tgetInstructors( query, true, function( res ) {\n+\t\t\t\t\telUlListInstructors.innerHTML = res.data.content;\n+\n+\t\t\t\t\tif ( res.data.pagination !== undefined ) {\n+\t\t\t\t\t\tel.insertAdjacentHTML( 'beforeend', res.data.pagination );\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\t\t\t} );\n+\t\t}\n+\t} );*\u002F\n+\n+\tpagination();\n+}\n+\n+const getInstructors = ( queryParam, firstLoad = false, callBack ) => {\n+\tconst url = lpAddQueryArgs( urlListInstructorsAPI, queryParam );\n+\tconst paramsFetch = {\n+\t\tmethod: 'GET',\n+\t};\n+\n+\tfetch( url, paramsFetch )\n+\t\t.then( ( response ) => response.json() )\n+\t\t.then( ( res ) => {\n+\t\t\tif ( res.data.content !== undefined ) {\n+\t\t\t\tif ( callBack ) {\n+\t\t\t\t\tcallBack( res );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} ).catch( ( error ) => {\n+\t\t\tconsole.log( error );\n+\t\t} ).finally( () => {\n+\t\t\tif ( firstLoad === false ) {\n+\t\t\t\tconst urlPush = lpInstructorsUrl + '?paged=' + queryParam.paged;\n+\t\t\t\twindow.history.pushState( '', '', urlPush );\n+\t\t\t}\n+\t\t} );\n+};\n+\n+const pagination = () => {\n+\tdocument.addEventListener( 'click', function( event ) {\n+\t\tconst target = event.target;\n+\t\tconst elListInstructors = target.closest( '.lp-list-instructors' );\n+\t\tif ( ! elListInstructors ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst elUlListInstructors = elListInstructors.querySelector( '.ul-list-instructors' );\n+\t\tconst pagination = target.closest( '.learn-press-pagination' );\n+\n+\t\tif ( ! pagination || ! elListInstructors || ! elUlListInstructors ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlet pageLinkNode;\n+\t\tif ( target.tagName.toLowerCase() === 'a' ) {\n+\t\t\tpageLinkNode = target;\n+\t\t} else if ( target.closest( 'a.page-numbers' ) ) {\n+\t\t\tpageLinkNode = target.closest( 'a.page-numbers' );\n+\t\t} else {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tevent.preventDefault();\n+\n+\t\tconst currentPage = parseInt( pagination.querySelector( '.current' ).innerHTML );\n+\t\tlet paged;\n+\n+\t\tif ( pageLinkNode.classList.contains( 'next' ) ) {\n+\t\t\tpaged = currentPage + 1;\n+\t\t} else if ( pageLinkNode.classList.contains( 'prev' ) ) {\n+\t\t\tpaged = currentPage - 1;\n+\t\t} else {\n+\t\t\tpaged = pageLinkNode.innerHTML;\n+\t\t}\n+\n+\t\tquery = { ...query, paged, ...lpUrlParam };\n+\t\tgetInstructors( query, false, function( res ) {\n+\t\t\telUlListInstructors.innerHTML = res.data.content;\n+\t\t\tpagination.remove();\n+\t\t\tif ( res.data.pagination !== undefined ) {\n+\t\t\t\telListInstructors.insertAdjacentHTML( 'beforeend', res.data.pagination );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Finstructors.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-import InstructorList from '.\u002Finstructors\u002Finstructor-list';\r\n-InstructorList();\r\n-\r\n+import InstructorList from '.\u002Finstructors\u002Finstructor-list';\n+InstructorList();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flesson.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flesson.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flesson.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flesson.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\r\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flp-configs.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flp-configs.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flp-configs.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Flp-configs.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,64 +1,64 @@\n-const { Hook } = LP;\r\n-\r\n-export const classNames = {\r\n-\tQuiz: {\r\n-\t\tResult: [ 'quiz-result' ],\r\n-\t\tContent: [ 'quiz-content' ],\r\n-\t\tQuestions: [ 'quiz-questions' ],\r\n-\t\tButtons: [ 'quiz-buttons' ],\r\n-\t\tAttempts: [ 'quiz-attempts' ],\r\n-\t},\r\n-};\r\n-\r\n-const questionCheckers = {\r\n-\tsingle_choice() {\r\n-\r\n-\t},\r\n-\r\n-\tmulti_choice() {\r\n-\r\n-\t},\r\n-\r\n-\ttrue_or_false() {\r\n-\r\n-\t},\r\n-};\r\n-\r\n-export const isQuestionCorrect = {\r\n-\tfill_in_blank() {\r\n-\t\treturn true;\r\n-\t},\r\n-};\r\n-\r\n-\u002F**\r\n- * Question blocks.\r\n- *\r\n- * Allow to sort the blocks of question\r\n- *\u002F\r\n-export const questionBlocks = function() {\r\n-\treturn LP.Hook.applyFilters( 'question-blocks', [ 'title', 'content', 'answer-options', 'explanation', 'hint', 'buttons' ] );\r\n-};\r\n-\r\n-export const questionFooterButtons = function() {\r\n-\treturn LP.Hook.applyFilters( 'question-footer-buttons', [ 'instant-check' ] );\r\n-};\r\n-\r\n-export const questionTitleParts = function() {\r\n-\treturn LP.Hook.applyFilters( 'question-title-parts', [ 'index', 'title', 'hint', 'edit-permalink' ] );\r\n-};\r\n-\r\n-export const questionChecker = function( type ) {\r\n-\tconst c = LP.Hook.applyFilters( 'question-checkers', questionCheckers );\r\n-\r\n-\treturn type && c[ type ] ? c[ type ] : function() {\r\n-\t\treturn {};\r\n-\t};\r\n-};\r\n-\r\n-export const quizStartBlocks = function() {\r\n-\tconst blocks = Hook.applyFilters( 'quiz-start-blocks', {\r\n-\t\tmeta: true,\r\n-\t\tdescription: true,\r\n-\t\tcustom: 'Hello',\r\n-\t} );\r\n-};\r\n+const { Hook } = LP;\n+\n+export const classNames = {\n+\tQuiz: {\n+\t\tResult: [ 'quiz-result' ],\n+\t\tContent: [ 'quiz-content' ],\n+\t\tQuestions: [ 'quiz-questions' ],\n+\t\tButtons: [ 'quiz-buttons' ],\n+\t\tAttempts: [ 'quiz-attempts' ],\n+\t},\n+};\n+\n+const questionCheckers = {\n+\tsingle_choice() {\n+\n+\t},\n+\n+\tmulti_choice() {\n+\n+\t},\n+\n+\ttrue_or_false() {\n+\n+\t},\n+};\n+\n+export const isQuestionCorrect = {\n+\tfill_in_blank() {\n+\t\treturn true;\n+\t},\n+};\n+\n+\u002F**\n+ * Question blocks.\n+ *\n+ * Allow to sort the blocks of question\n+ *\u002F\n+export const questionBlocks = function() {\n+\treturn LP.Hook.applyFilters( 'question-blocks', [ 'title', 'content', 'answer-options', 'explanation', 'hint', 'buttons' ] );\n+};\n+\n+export const questionFooterButtons = function() {\n+\treturn LP.Hook.applyFilters( 'question-footer-buttons', [ 'instant-check' ] );\n+};\n+\n+export const questionTitleParts = function() {\n+\treturn LP.Hook.applyFilters( 'question-title-parts', [ 'index', 'title', 'hint', 'edit-permalink' ] );\n+};\n+\n+export const questionChecker = function( type ) {\n+\tconst c = LP.Hook.applyFilters( 'question-checkers', questionCheckers );\n+\n+\treturn type && c[ type ] ? c[ type ] : function() {\n+\t\treturn {};\n+\t};\n+};\n+\n+export const quizStartBlocks = function() {\n+\tconst blocks = Hook.applyFilters( 'quiz-start-blocks', {\n+\t\tmeta: true,\n+\t\tdescription: true,\n+\t\tcustom: 'Hello',\n+\t} );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmaterial.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmaterial.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmaterial.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmaterial.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-import * as Util from '..\u002F..\u002F..\u002Fjs\u002Futils.js';\r\n-export default function lpMaterialsLoad() {\r\n-\tdocument.addEventListener( 'click', function( e ) {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target.classList.contains( 'lp-loadmore-material' ) ) {\r\n-\t\t\tconst loadMoreButton = target;\r\n-\t\t\tconst lpTarget = target.closest( '.lp-target' );\r\n-\t\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( lpTarget );\r\n-\t\t\tdataSend.args.paged++;\r\n-\r\n-\t\t\tUtil.lpSetLoadingEl( loadMoreButton, 1 );\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\tconst tableBody = lpTarget.querySelector( 'table.course-material-table tbody' );\r\n-\t\t\t\t\t\ttableBody.insertAdjacentHTML( 'beforeend', data.content );\r\n-\t\t\t\t\t\tif ( data.paged === data.total_pages ) {\r\n-\t\t\t\t\t\t\tloadMoreButton.remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\twindow.lpAJAXG.setDataSetCurrent( lpTarget, dataSend );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tconsole.error( message );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.error( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\tUtil.lpSetLoadingEl( loadMoreButton, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t}\r\n-\t} );\r\n-}\r\n+import * as Util from '..\u002F..\u002F..\u002Fjs\u002Futils.js';\n+export default function lpMaterialsLoad() {\n+\tdocument.addEventListener( 'click', function( e ) {\n+\t\tconst target = e.target;\n+\t\tif ( target.classList.contains( 'lp-loadmore-material' ) ) {\n+\t\t\tconst loadMoreButton = target;\n+\t\t\tconst lpTarget = target.closest( '.lp-target' );\n+\t\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( lpTarget );\n+\t\t\tdataSend.args.paged++;\n+\n+\t\t\tUtil.lpSetLoadingEl( loadMoreButton, 1 );\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\tconst tableBody = lpTarget.querySelector( 'table.course-material-table tbody' );\n+\t\t\t\t\t\ttableBody.insertAdjacentHTML( 'beforeend', data.content );\n+\t\t\t\t\t\tif ( data.paged === data.total_pages ) {\n+\t\t\t\t\t\t\tloadMoreButton.remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\twindow.lpAJAXG.setDataSetCurrent( lpTarget, dataSend );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tconsole.error( message );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.error( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\tUtil.lpSetLoadingEl( loadMoreButton, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t}\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u002F**\r\n- * Create Modal popup.\r\n- * Edit: Use React Hook.\r\n- *\r\n- * @author Nhamdv - ThimPress.\r\n- *\u002F\r\n-\r\n-import store from '.\u002Fstore';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { useSelect, dispatch } from '@wordpress\u002Fdata';\r\n-\r\n-const Modal = ( { children } ) => {\r\n-\tconst { show, hide, confirm } = dispatch( 'learnpress\u002Fmodal' );\r\n-\r\n-\tconst isShow = useSelect( ( select ) => {\r\n-\t\tconst isOpen = select( 'learnpress\u002Fmodal' ).isOpen();\r\n-\t\treturn isOpen;\r\n-\t} );\r\n-\r\n-\tconst message = useSelect( ( select ) => {\r\n-\t\tconst getMessage = select( 'learnpress\u002Fmodal' ).getMessage();\r\n-\t\treturn getMessage;\r\n-\t} );\r\n-\r\n-\tconst dataConfirm = ( c ) => ( event ) => {\r\n-\t\tconfirm( c );\r\n-\t};\r\n-\r\n-\tconst styles = {\r\n-\t\tdisplay: isShow ? 'block' : 'none',\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003Cdiv id=\"lp-modal-overlay\" style={ styles }>\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv id=\"lp-modal-window\" style={ styles }>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-modal-content\" dangerouslySetInnerHTML={ { __html: message } }>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-modal-buttons\">\r\n-\t\t\t\t\t\t\u003Cbutton className=\"lp-button modal-button-ok\" onClick={ dataConfirm( 'yes' ) }>\r\n-\t\t\t\t\t\t\t\u003Cspan>{ __( 'OK', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton className=\"lp-button modal-button-cancel\" onClick={ dataConfirm( 'no' ) }>\r\n-\t\t\t\t\t\t\t\u003Cspan>{ __( 'Cancel', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t{ children }\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Modal;\r\n+\u002F**\n+ * Create Modal popup.\n+ * Edit: Use React Hook.\n+ *\n+ * @author Nhamdv - ThimPress.\n+ *\u002F\n+\n+import store from '.\u002Fstore';\n+import { __ } from '@wordpress\u002Fi18n';\n+import { useSelect, dispatch } from '@wordpress\u002Fdata';\n+\n+const Modal = ( { children } ) => {\n+\tconst { show, hide, confirm } = dispatch( 'learnpress\u002Fmodal' );\n+\n+\tconst isShow = useSelect( ( select ) => {\n+\t\tconst isOpen = select( 'learnpress\u002Fmodal' ).isOpen();\n+\t\treturn isOpen;\n+\t} );\n+\n+\tconst message = useSelect( ( select ) => {\n+\t\tconst getMessage = select( 'learnpress\u002Fmodal' ).getMessage();\n+\t\treturn getMessage;\n+\t} );\n+\n+\tconst dataConfirm = ( c ) => ( event ) => {\n+\t\tconfirm( c );\n+\t};\n+\n+\tconst styles = {\n+\t\tdisplay: isShow ? 'block' : 'none',\n+\t};\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003Cdiv id=\"lp-modal-overlay\" style={ styles }>\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv id=\"lp-modal-window\" style={ styles }>\n+\t\t\t\t\t\u003Cdiv id=\"lp-modal-content\" dangerouslySetInnerHTML={ { __html: message } }>\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv id=\"lp-modal-buttons\">\n+\t\t\t\t\t\t\u003Cbutton className=\"lp-button modal-button-ok\" onClick={ dataConfirm( 'yes' ) }>\n+\t\t\t\t\t\t\t\u003Cspan>{ __( 'OK', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton className=\"lp-button modal-button-cancel\" onClick={ dataConfirm( 'no' ) }>\n+\t\t\t\t\t\t\t\u003Cspan>{ __( 'Cancel', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t{ children }\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Modal;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Factions.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Factions.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Factions.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Factions.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-export function show( message, cb ) {\r\n-\treturn {\r\n-\t\ttype: 'SHOW_MODAL',\r\n-\t\tmessage,\r\n-\t\tcb,\r\n-\t};\r\n-}\r\n-\r\n-export function hide() {\r\n-\treturn {\r\n-\t\ttype: 'HIDE_MODAL',\r\n-\t};\r\n-}\r\n-\r\n-export function confirm( value ) {\r\n-\treturn {\r\n-\t\ttype: 'CONFIRM',\r\n-\t\tvalue,\r\n-\t};\r\n-}\r\n+export function show( message, cb ) {\n+\treturn {\n+\t\ttype: 'SHOW_MODAL',\n+\t\tmessage,\n+\t\tcb,\n+\t};\n+}\n+\n+export function hide() {\n+\treturn {\n+\t\ttype: 'HIDE_MODAL',\n+\t};\n+}\n+\n+export function confirm( value ) {\n+\treturn {\n+\t\ttype: 'CONFIRM',\n+\t\tvalue,\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-import { registerStore } from '@wordpress\u002Fdata';\r\n-\r\n-import reducer from '.\u002Freducer';\r\n-import * as actions from '.\u002Factions';\r\n-import * as selectors from '.\u002Fselectors';\r\n-import applyMiddlewares from '.\u002Fmiddlewares';\r\n-\r\n-const { controls: dataControls } = LP.dataControls;\r\n-\r\n-const store = registerStore( 'learnpress\u002Fmodal', {\r\n-\treducer,\r\n-\tselectors,\r\n-\tactions,\r\n-\tcontrols: {\r\n-\t\t...dataControls,\r\n-\t},\r\n-} );\r\n-\r\n-applyMiddlewares( store );\r\n-\r\n-export default store;\r\n+import { registerStore } from '@wordpress\u002Fdata';\n+\n+import reducer from '.\u002Freducer';\n+import * as actions from '.\u002Factions';\n+import * as selectors from '.\u002Fselectors';\n+import applyMiddlewares from '.\u002Fmiddlewares';\n+\n+const { controls: dataControls } = LP.dataControls;\n+\n+const store = registerStore( 'learnpress\u002Fmodal', {\n+\treducer,\n+\tselectors,\n+\tactions,\n+\tcontrols: {\n+\t\t...dataControls,\n+\t},\n+} );\n+\n+applyMiddlewares( store );\n+\n+export default store;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fmiddlewares.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fmiddlewares.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fmiddlewares.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fmiddlewares.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u002F**\r\n- * External dependencies\r\n- *\u002F\r\n-import refx from 'refx';\r\n-\r\n-const effects = {\r\n-\tENROLL_COURSE_X: ( action, store ) => {\r\n-\t\tenrollCourse: ( action, store ) => {\r\n-\t\t\tconst { dispatch } = store;\r\n-\r\n-\t\t\t\u002F\u002Fdispatch()\r\n-\t\t};\r\n-\t},\r\n-};\r\n-\r\n-\u002F**\r\n- * Applies the custom middlewares used specifically in the editor module.\r\n- *\r\n- * @param {Object} store Store Object.\r\n- *\r\n- * @return {Object} Update Store Object.\r\n- *\u002F\r\n-function applyMiddlewares( store ) {\r\n-\tlet enhancedDispatch = () => {\r\n-\t\tthrow new Error(\r\n-\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\r\n-\t\t\t\t'Other middleware would not be applied to this dispatch.'\r\n-\t\t);\r\n-\t};\r\n-\r\n-\tconst middlewareAPI = {\r\n-\t\tgetState: store.getState,\r\n-\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\r\n-\t};\r\n-\r\n-\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\r\n-\r\n-\tstore.dispatch = enhancedDispatch;\r\n-\treturn store;\r\n-}\r\n-\r\n-export default applyMiddlewares;\r\n+\u002F**\n+ * External dependencies\n+ *\u002F\n+import refx from 'refx';\n+\n+const effects = {\n+\tENROLL_COURSE_X: ( action, store ) => {\n+\t\tenrollCourse: ( action, store ) => {\n+\t\t\tconst { dispatch } = store;\n+\n+\t\t\t\u002F\u002Fdispatch()\n+\t\t};\n+\t},\n+};\n+\n+\u002F**\n+ * Applies the custom middlewares used specifically in the editor module.\n+ *\n+ * @param {Object} store Store Object.\n+ *\n+ * @return {Object} Update Store Object.\n+ *\u002F\n+function applyMiddlewares( store ) {\n+\tlet enhancedDispatch = () => {\n+\t\tthrow new Error(\n+\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\n+\t\t\t\t'Other middleware would not be applied to this dispatch.'\n+\t\t);\n+\t};\n+\n+\tconst middlewareAPI = {\n+\t\tgetState: store.getState,\n+\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\n+\t};\n+\n+\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\n+\n+\tstore.dispatch = enhancedDispatch;\n+\treturn store;\n+}\n+\n+export default applyMiddlewares;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Freducer.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Freducer.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Freducer.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Freducer.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-const STORE_DATA = {};\r\n-\r\n-export const Modal = ( state = STORE_DATA, action ) => {\r\n-\tswitch ( action.type ) {\r\n-\tcase 'SHOW_MODAL':\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tisOpen: true,\r\n-\t\t\tmessage: action.message,\r\n-\t\t\tcb: action.cb,\r\n-\t\t};\r\n-\tcase 'HIDE_MODAL':\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tisOpen: false,\r\n-\t\t\tmessage: false,\r\n-\t\t\tcb: null,\r\n-\t\t};\r\n-\tcase 'CONFIRM':\r\n-\t\tstate.cb &&\r\n-\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\tstate.cb();\r\n-\t\t\t\t}, 10 );\r\n-\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tconfirm: action.value,\r\n-\t\t};\r\n-\t}\r\n-\treturn state;\r\n-};\r\n-\r\n-export default Modal;\r\n+const STORE_DATA = {};\n+\n+export const Modal = ( state = STORE_DATA, action ) => {\n+\tswitch ( action.type ) {\n+\tcase 'SHOW_MODAL':\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tisOpen: true,\n+\t\t\tmessage: action.message,\n+\t\t\tcb: action.cb,\n+\t\t};\n+\tcase 'HIDE_MODAL':\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tisOpen: false,\n+\t\t\tmessage: false,\n+\t\t\tcb: null,\n+\t\t};\n+\tcase 'CONFIRM':\n+\t\tstate.cb &&\n+\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\tstate.cb();\n+\t\t\t\t}, 10 );\n+\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tconfirm: action.value,\n+\t\t};\n+\t}\n+\treturn state;\n+};\n+\n+export default Modal;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fselectors.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fselectors.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fselectors.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Fstore\u002Fselectors.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-import { dispatch } from '@wordpress\u002Fdata';\r\n-\r\n-export function isOpen( state ) {\r\n-\treturn state.isOpen;\r\n-}\r\n-\r\n-export function getMessage( state ) {\r\n-\treturn state.message;\r\n-}\r\n-\r\n-export function confirm( state, message, cb ) {\r\n-\tconst { show, hide } = dispatch( 'learnpress\u002Fmodal' );\r\n-\r\n-\tif ( ! state.message ) {\r\n-\t\tshow( message, cb );\r\n-\t} else {\r\n-\t\thide();\r\n-\t\treturn state.confirm;\r\n-\t}\r\n-\r\n-\treturn 'no';\r\n-}\r\n+import { dispatch } from '@wordpress\u002Fdata';\n+\n+export function isOpen( state ) {\n+\treturn state.isOpen;\n+}\n+\n+export function getMessage( state ) {\n+\treturn state.message;\n+}\n+\n+export function confirm( state, message, cb ) {\n+\tconst { show, hide } = dispatch( 'learnpress\u002Fmodal' );\n+\n+\tif ( ! state.message ) {\n+\t\tshow( message, cb );\n+\t} else {\n+\t\thide();\n+\t\treturn state.confirm;\n+\t}\n+\n+\treturn 'no';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-import Modal from '.\u002Fmodal\u002Findex';\r\n-\r\n-export default Modal;\r\n+import Modal from '.\u002Fmodal\u002Findex';\n+\n+export default Modal;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-export { default as QuestionBase } from '.\u002Fquestion-base';\r\n-export { default as SingleChoice } from '.\u002Fquestions\u002Fsingle-choice';\r\n-export { default as MultipleChoices } from '.\u002Fquestions\u002Fmultiple-choices';\r\n-export { default as TrueOrFalse } from '.\u002Fquestions\u002Ftrue-or-false';\r\n-export { default as FillInBlanks } from '.\u002Fquestions\u002Ffill-in-blanks';\r\n+export { default as QuestionBase } from '.\u002Fquestion-base';\n+export { default as SingleChoice } from '.\u002Fquestions\u002Fsingle-choice';\n+export { default as MultipleChoices } from '.\u002Fquestions\u002Fmultiple-choices';\n+export { default as TrueOrFalse } from '.\u002Fquestions\u002Ftrue-or-false';\n+export { default as FillInBlanks } from '.\u002Fquestions\u002Ffill-in-blanks';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,258 +1,258 @@\n-\u002F* eslint-disable no-mixed-spaces-and-tabs *\u002F\r\n-import { Component } from '@wordpress\u002Felement';\r\n-import { select as wpSelect } from '@wordpress\u002Fdata';\r\n-import { __, sprintf } from '@wordpress\u002Fi18n';\r\n-\r\n-const { isArray, get, set } = lodash;\r\n-\r\n-class QuestionBase extends Component {\r\n-\tconstructor( props ) {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tconst { question } = props;\r\n-\r\n-\t\tthis.state = {\r\n-\t\t\toptionClass: [ 'answer-option' ],\r\n-\t\t\tquestionId: 0,\r\n-\t\t\toptions: question ? this.parseOptions( question.options ) : [],\r\n-\t\t\tself: this,\r\n-\t\t};\r\n-\r\n-\t\tif ( props.$wrap ) {\r\n-\t\t\tthis.$wrap = props.$wrap;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tstatic getDerivedStateFromProps( props, state ) {\r\n-\t\treturn state.self.prepare( props, state );\r\n-\t}\r\n-\r\n-\tcomponentDidMount() {\r\n-\t\tconst newState = this.prepare( this.props, this.state );\r\n-\r\n-\t\tif ( newState ) {\r\n-\t\t\tthis.setState( newState );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprepare = ( props, state ) => {\r\n-\t\tconst { question } = props;\r\n-\r\n-\t\tif ( question && question.id !== state.questionId ) {\r\n-\t\t\treturn {\r\n-\t\t\t\toptions: state.self.parseOptions( question.options ),\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\tsetInputRef = ( el, k ) => {\r\n-\t\tif ( ! this.inputs ) {\r\n-\t\t\tthis.inputs = {};\r\n-\t\t}\r\n-\r\n-\t\tthis.inputs[ k ] = el;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Only show correct answer\r\n-\t * status = completed\r\n-\t * todo: check isset answered but if skip it will not show.\r\n-\t *\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tmaybeShowCorrectAnswer = () => {\r\n-\t\tconst { status, isCheckedAnswer, showCorrectReview, isReviewing } = this.props;\r\n-\r\n-\t\treturn ( status === 'completed' && showCorrectReview ) || ( isCheckedAnswer && ! isReviewing );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Disable answer option in review mode or user has checked the question.\r\n-\t *\r\n-\t * @param option Doc.\r\n-\t *\u002F\r\n-\tmaybeDisabledOption = ( option ) => {\r\n-\t\tconst {\r\n-\t\t\tanswered,\r\n-\t\t\tstatus,\r\n-\t\t\tisCheckedAnswer,\r\n-\t\t} = this.props;\r\n-\r\n-\t\treturn isCheckedAnswer || ( status !== 'started' );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Event callback for clicking on answer option to\r\n-\t * store answered\r\n-\t *\u002F\r\n-\tsetAnswerChecked = () => ( event ) => {\r\n-\t\tconst {\r\n-\t\t\tupdateUserQuestionAnswers,\r\n-\t\t\tquestion,\r\n-\t\t\tstatus,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tif ( status !== 'started' ) {\r\n-\t\t\treturn __( 'LP Error: can not set answers', 'learnpress' );\r\n-\t\t}\r\n-\r\n-\t\tconst $options = this.$wrap.find( '.option-check' );\r\n-\t\tconst answered = [];\r\n-\t\tconst isSingle = question.type !== 'multi_choice';\r\n-\r\n-\t\t$options.each( ( i, option ) => {\r\n-\t\t\tif ( option.checked ) {\r\n-\t\t\t\tanswered.push( option.value );\r\n-\r\n-\t\t\t\tif ( isSingle ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tupdateUserQuestionAnswers( question.id, isSingle ? answered[ 0 ] : answered );\r\n-\t};\r\n-\r\n-\tmaybeCheckedAnswer = ( value ) => {\r\n-\t\tconst { answered } = this.props;\r\n-\r\n-\t\tif ( isArray( answered ) ) {\r\n-\t\t\treturn !! answered.find( ( a ) => {\r\n-\t\t\t\treturn a == value;\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\treturn value == answered;\r\n-\t};\r\n-\r\n-\tgetOptionType = ( questionType, option ) => {\r\n-\t\tlet type = 'radio';\r\n-\r\n-\t\tswitch ( questionType ) {\r\n-\t\tcase 'multi_choice':\r\n-\t\t\ttype = 'checkbox';\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn type;\r\n-\t};\r\n-\r\n-\tisDefaultType = () => {\r\n-\t\treturn this.props.supportOptions;\r\n-\t};\r\n-\r\n-\tgetWarningMessage = () => {\r\n-\t\treturn \u003C>{ __( 'The render function should be overwritten from the base.', 'learnpress' ) }\u003C\u002F>;\r\n-\t};\r\n-\r\n-\tgetOptionClass = ( option ) => {\r\n-\t\tconst { answered } = this.props;\r\n-\r\n-\t\tconst classes = [ 'answer-option' ];\r\n-\r\n-\t\treturn classes;\r\n-\t};\r\n-\r\n-\tparseOptions = ( options ) => {\r\n-\t\tif ( options ) {\r\n-\t\t\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\r\n-\t\t\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\r\n-\t\t}\r\n-\r\n-\t\treturn options || [];\r\n-\t};\r\n-\r\n-\tgetOptions = () => {\r\n-\t\treturn this.state.options || [];\r\n-\t};\r\n-\r\n-\tisCorrect = () => {\r\n-\t\tconst { answered } = this.props;\r\n-\r\n-\t\tif ( ! answered ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tlet i, option, options;\r\n-\r\n-\t\tfor ( i = 0, options = this.getOptions(); i \u003C options.length; i++ ) {\r\n-\t\t\toption = options[ i ];\r\n-\r\n-\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\tif ( answered == option.value ) {\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t};\r\n-\r\n-\tisChecked = () => {\r\n-\t\tconst { question } = this.props;\r\n-\r\n-\t\treturn wpSelect( 'learnpress\u002Fquiz' ).isCheckedAnswer( question.id );\r\n-\t};\r\n-\r\n-\tgetCorrectLabel = () => {\r\n-\t\tconst { status, answered, question } = this.props;\r\n-\r\n-\t\tconst checker = LP.config.isQuestionCorrect[ question.type ] || this.isCorrect;\r\n-\t\tconst isCorrect = checker.call( this );\r\n-\r\n-\t\treturn this.maybeShowCorrectAnswer() && (\r\n-\t\t\t\u003Cdiv className={ `question-response` + ( isCorrect ? ' correct' : ' incorrect' ) }>\r\n-\t\t\t\t\u003Cspan className=\"label\">{ isCorrect ? __( 'Correct', 'learnpress' ) : __( 'Incorrect', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan className=\"point\">{ sprintf( __( '%d\u002F%d point', 'learnpress' ), isCorrect ? question.point : 0, question.point ) }\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t);\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst { question, status } = this.props;\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003Cdiv className=\"question-answers\">\r\n-\r\n-\t\t\t\t{ this.isDefaultType() && (\r\n-\t\t\t\t\t\u003Cul id={ `answer-options-${ question.id }` } className=\"answer-options\">\r\n-\r\n-\t\t\t\t\t\t{ this.getOptions().map( ( option ) => {\r\n-\t\t\t\t\t\t\tconst ID = `learn-press-answer-option-${ option.uid }`;\r\n-\r\n-\t\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\t\u003Cli className={ this.getOptionClass( option ).join( ' ' ) }\r\n-\t\t\t\t\t\t\t\t\tkey={ `answer-option-${ option.uid }` }\r\n-\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\u003Cinput type={ this.getOptionType( question.type, option ) }\r\n-\t\t\t\t\t\t\t\t\t\tclassName=\"option-check\"\r\n-\t\t\t\t\t\t\t\t\t\tname={ status === 'started' ? `learn-press-question-${ question.id }` : '' }\r\n-\t\t\t\t\t\t\t\t\t\tid={ ID }\r\n-\t\t\t\t\t\t\t\t\t\tref={ ( el ) => {\r\n-\t\t\t\t\t\t\t\t\t\t\tthis.setInputRef( el, option.value );\r\n-\t\t\t\t\t\t\t\t\t\t} }\r\n-\t\t\t\t\t\t\t\t\t\tonChange={ this.setAnswerChecked() }\r\n-\t\t\t\t\t\t\t\t\t\tdisabled={ this.maybeDisabledOption( option ) }\r\n-\t\t\t\t\t\t\t\t\t\tchecked={ this.maybeCheckedAnswer( option.value ) }\r\n-\t\t\t\t\t\t\t\t\t\tvalue={ status === 'started' ? option.value : '' }\r\n-\t\t\t\t\t\t\t\t\t\u002F>\r\n-\r\n-\t\t\t\t\t\t\t\t\t\u003Clabel htmlFor={ ID }\r\n-\t\t\t\t\t\t\t\t\t\tclassName=\"option-title\"\r\n-\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: option.title || option.value } }>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t} ) }\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t) }\r\n-\r\n-\t\t\t\t{ ! this.isDefaultType() && this.getWarningMessage() }\r\n-\t\t\t\t{ this.getCorrectLabel() }\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-export default QuestionBase;\r\n+\u002F* eslint-disable no-mixed-spaces-and-tabs *\u002F\n+import { Component } from '@wordpress\u002Felement';\n+import { select as wpSelect } from '@wordpress\u002Fdata';\n+import { __, sprintf } from '@wordpress\u002Fi18n';\n+\n+const { isArray, get, set } = lodash;\n+\n+class QuestionBase extends Component {\n+\tconstructor( props ) {\n+\t\tsuper( ...arguments );\n+\n+\t\tconst { question } = props;\n+\n+\t\tthis.state = {\n+\t\t\toptionClass: [ 'answer-option' ],\n+\t\t\tquestionId: 0,\n+\t\t\toptions: question ? this.parseOptions( question.options ) : [],\n+\t\t\tself: this,\n+\t\t};\n+\n+\t\tif ( props.$wrap ) {\n+\t\t\tthis.$wrap = props.$wrap;\n+\t\t}\n+\t}\n+\n+\tstatic getDerivedStateFromProps( props, state ) {\n+\t\treturn state.self.prepare( props, state );\n+\t}\n+\n+\tcomponentDidMount() {\n+\t\tconst newState = this.prepare( this.props, this.state );\n+\n+\t\tif ( newState ) {\n+\t\t\tthis.setState( newState );\n+\t\t}\n+\t}\n+\n+\tprepare = ( props, state ) => {\n+\t\tconst { question } = props;\n+\n+\t\tif ( question && question.id !== state.questionId ) {\n+\t\t\treturn {\n+\t\t\t\toptions: state.self.parseOptions( question.options ),\n+\t\t\t};\n+\t\t}\n+\n+\t\treturn null;\n+\t}\n+\n+\tsetInputRef = ( el, k ) => {\n+\t\tif ( ! this.inputs ) {\n+\t\t\tthis.inputs = {};\n+\t\t}\n+\n+\t\tthis.inputs[ k ] = el;\n+\t}\n+\n+\t\u002F**\n+\t * Only show correct answer\n+\t * status = completed\n+\t * todo: check isset answered but if skip it will not show.\n+\t *\n+\t * @author Nhamdv\n+\t *\u002F\n+\tmaybeShowCorrectAnswer = () => {\n+\t\tconst { status, isCheckedAnswer, showCorrectReview, isReviewing } = this.props;\n+\n+\t\treturn ( status === 'completed' && showCorrectReview ) || ( isCheckedAnswer && ! isReviewing );\n+\t};\n+\n+\t\u002F**\n+\t * Disable answer option in review mode or user has checked the question.\n+\t *\n+\t * @param option Doc.\n+\t *\u002F\n+\tmaybeDisabledOption = ( option ) => {\n+\t\tconst {\n+\t\t\tanswered,\n+\t\t\tstatus,\n+\t\t\tisCheckedAnswer,\n+\t\t} = this.props;\n+\n+\t\treturn isCheckedAnswer || ( status !== 'started' );\n+\t};\n+\n+\t\u002F**\n+\t * Event callback for clicking on answer option to\n+\t * store answered\n+\t *\u002F\n+\tsetAnswerChecked = () => ( event ) => {\n+\t\tconst {\n+\t\t\tupdateUserQuestionAnswers,\n+\t\t\tquestion,\n+\t\t\tstatus,\n+\t\t} = this.props;\n+\n+\t\tif ( status !== 'started' ) {\n+\t\t\treturn __( 'LP Error: can not set answers', 'learnpress' );\n+\t\t}\n+\n+\t\tconst $options = this.$wrap.find( '.option-check' );\n+\t\tconst answered = [];\n+\t\tconst isSingle = question.type !== 'multi_choice';\n+\n+\t\t$options.each( ( i, option ) => {\n+\t\t\tif ( option.checked ) {\n+\t\t\t\tanswered.push( option.value );\n+\n+\t\t\t\tif ( isSingle ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\n+\t\tupdateUserQuestionAnswers( question.id, isSingle ? answered[ 0 ] : answered );\n+\t};\n+\n+\tmaybeCheckedAnswer = ( value ) => {\n+\t\tconst { answered } = this.props;\n+\n+\t\tif ( isArray( answered ) ) {\n+\t\t\treturn !! answered.find( ( a ) => {\n+\t\t\t\treturn a == value;\n+\t\t\t} );\n+\t\t}\n+\n+\t\treturn value == answered;\n+\t};\n+\n+\tgetOptionType = ( questionType, option ) => {\n+\t\tlet type = 'radio';\n+\n+\t\tswitch ( questionType ) {\n+\t\tcase 'multi_choice':\n+\t\t\ttype = 'checkbox';\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn type;\n+\t};\n+\n+\tisDefaultType = () => {\n+\t\treturn this.props.supportOptions;\n+\t};\n+\n+\tgetWarningMessage = () => {\n+\t\treturn \u003C>{ __( 'The render function should be overwritten from the base.', 'learnpress' ) }\u003C\u002F>;\n+\t};\n+\n+\tgetOptionClass = ( option ) => {\n+\t\tconst { answered } = this.props;\n+\n+\t\tconst classes = [ 'answer-option' ];\n+\n+\t\treturn classes;\n+\t};\n+\n+\tparseOptions = ( options ) => {\n+\t\tif ( options ) {\n+\t\t\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\n+\t\t\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\n+\t\t}\n+\n+\t\treturn options || [];\n+\t};\n+\n+\tgetOptions = () => {\n+\t\treturn this.state.options || [];\n+\t};\n+\n+\tisCorrect = () => {\n+\t\tconst { answered } = this.props;\n+\n+\t\tif ( ! answered ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tlet i, option, options;\n+\n+\t\tfor ( i = 0, options = this.getOptions(); i \u003C options.length; i++ ) {\n+\t\t\toption = options[ i ];\n+\n+\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\tif ( answered == option.value ) {\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t};\n+\n+\tisChecked = () => {\n+\t\tconst { question } = this.props;\n+\n+\t\treturn wpSelect( 'learnpress\u002Fquiz' ).isCheckedAnswer( question.id );\n+\t};\n+\n+\tgetCorrectLabel = () => {\n+\t\tconst { status, answered, question } = this.props;\n+\n+\t\tconst checker = LP.config.isQuestionCorrect[ question.type ] || this.isCorrect;\n+\t\tconst isCorrect = checker.call( this );\n+\n+\t\treturn this.maybeShowCorrectAnswer() && (\n+\t\t\t\u003Cdiv className={ `question-response` + ( isCorrect ? ' correct' : ' incorrect' ) }>\n+\t\t\t\t\u003Cspan className=\"label\">{ isCorrect ? __( 'Correct', 'learnpress' ) : __( 'Incorrect', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan className=\"point\">{ sprintf( __( '%d\u002F%d point', 'learnpress' ), isCorrect ? question.point : 0, question.point ) }\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t);\n+\t};\n+\n+\trender() {\n+\t\tconst { question, status } = this.props;\n+\n+\t\treturn (\n+\t\t\t\u003Cdiv className=\"question-answers\">\n+\n+\t\t\t\t{ this.isDefaultType() && (\n+\t\t\t\t\t\u003Cul id={ `answer-options-${ question.id }` } className=\"answer-options\">\n+\n+\t\t\t\t\t\t{ this.getOptions().map( ( option ) => {\n+\t\t\t\t\t\t\tconst ID = `learn-press-answer-option-${ option.uid }`;\n+\n+\t\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\t\u003Cli className={ this.getOptionClass( option ).join( ' ' ) }\n+\t\t\t\t\t\t\t\t\tkey={ `answer-option-${ option.uid }` }\n+\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\u003Cinput type={ this.getOptionType( question.type, option ) }\n+\t\t\t\t\t\t\t\t\t\tclassName=\"option-check\"\n+\t\t\t\t\t\t\t\t\t\tname={ status === 'started' ? `learn-press-question-${ question.id }` : '' }\n+\t\t\t\t\t\t\t\t\t\tid={ ID }\n+\t\t\t\t\t\t\t\t\t\tref={ ( el ) => {\n+\t\t\t\t\t\t\t\t\t\t\tthis.setInputRef( el, option.value );\n+\t\t\t\t\t\t\t\t\t\t} }\n+\t\t\t\t\t\t\t\t\t\tonChange={ this.setAnswerChecked() }\n+\t\t\t\t\t\t\t\t\t\tdisabled={ this.maybeDisabledOption( option ) }\n+\t\t\t\t\t\t\t\t\t\tchecked={ this.maybeCheckedAnswer( option.value ) }\n+\t\t\t\t\t\t\t\t\t\tvalue={ status === 'started' ? option.value : '' }\n+\t\t\t\t\t\t\t\t\t\u002F>\n+\n+\t\t\t\t\t\t\t\t\t\u003Clabel htmlFor={ ID }\n+\t\t\t\t\t\t\t\t\t\tclassName=\"option-title\"\n+\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: option.title || option.value } }>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t} ) }\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t) }\n+\n+\t\t\t\t{ ! this.isDefaultType() && this.getWarningMessage() }\n+\t\t\t\t{ this.getCorrectLabel() }\n+\t\t\t\u003C\u002Fdiv>\n+\t\t);\n+\t}\n+}\n+export default QuestionBase;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,143 +1,143 @@\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import QuestionBase from '..\u002F..\u002Fquestion-base';\r\n-\r\n-let flagEventEnterInput = false;\r\n-\r\n-class QuestionFillInBlanks extends QuestionBase {\r\n-\tcomponentDidMount() {\r\n-\t\tconst { answered, question } = this.props;\r\n-\r\n-\t\tif ( answered ) {\r\n-\t\t\tconst allFIBs = document.querySelectorAll( '.lp-fib-input > input' );\r\n-\r\n-\t\t\t[ ...allFIBs ].map( ( ele ) => {\r\n-\t\t\t\tconst question_id = parseInt( ele.closest( '.question' ).dataset.id );\r\n-\r\n-\t\t\t\tif ( question_id === question.id ) {\r\n-\t\t\t\t\tif ( answered[ ele.dataset.id ] ) {\r\n-\t\t\t\t\t\tele.value = answered[ ele.dataset.id ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tthis.updateFibAnswer();\r\n-\t}\r\n-\r\n-\tcomponentDidUpdate( prevProps ) {\r\n-\t\tif ( ! prevProps.answered ) {\r\n-\t\t\tthis.updateFibAnswer();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tupdateFibAnswer = () => {\r\n-\t\tif ( ! flagEventEnterInput ) {\r\n-\t\t\tdocument.addEventListener( 'input', ( e ) => {\r\n-\t\t\t\tconst target = e.target;\r\n-\t\t\t\tconst parent = target.closest( '.lp-fib-input' );\r\n-\r\n-\t\t\t\tif ( parent ) {\r\n-\t\t\t\t\tconst elQuestionFIB = target.closest( '.question-fill_in_blanks' );\r\n-\t\t\t\t\tconst question_id = elQuestionFIB.dataset.id;\r\n-\t\t\t\t\tthis.setAnswered( question_id, target.dataset.id, target.value );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tflagEventEnterInput = true;\r\n-\t};\r\n-\r\n-\tsetAnswered = ( question_id, id, value ) => {\r\n-\t\tconst {\r\n-\t\t\tupdateUserQuestionFibAnswers,\r\n-\t\t\tquestion,\r\n-\t\t\tstatus,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tif ( status !== 'started' ) {\r\n-\t\t\treturn 'LP Error: can not set answers';\r\n-\t\t}\r\n-\r\n-\t\tconst newAnswered = {};\r\n-\t\tnewAnswered[ id ] = value;\r\n-\r\n-\t\tupdateUserQuestionFibAnswers( question_id, id, value );\r\n-\t};\r\n-\r\n-\tgetCorrectLabel = () => {\r\n-\t\tconst { question, mark } = this.props;\r\n-\r\n-\t\tlet getMark = mark || 0;\r\n-\r\n-\t\tif ( mark ) {\r\n-\t\t\tif ( ! Number.isInteger( mark ) ) {\r\n-\t\t\t\tgetMark = mark.toFixed( 2 );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn this.maybeShowCorrectAnswer() && (\r\n-\t\t\t\u003Cdiv className=\"question-response correct\">\r\n-\t\t\t\t\u003Cspan className=\"label\">{ __( 'Points', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan className=\"point\">{ `${ getMark }\u002F${ question.point } ${ __( 'point', 'learnpress' ) }` }\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan className=\"lp-fib-note\">\u003Cspan style={ { background: '#00adff' } }>\u003C\u002Fspan>{ __( 'Correct', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan className=\"lp-fib-note\">\u003Cspan style={ { background: '#d85554' } }>\u003C\u002Fspan>{ __( 'Incorrect', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t);\r\n-\t};\r\n-\r\n-\tconvertInputField = ( option ) => {\r\n-\t\tconst { answered, isReviewing, showCorrectReview, isCheckedAnswer } = this.props;\r\n-\r\n-\t\tlet title = option.title;\r\n-\r\n-\t\tconst answers = option?.answers;\r\n-\r\n-\t\toption.ids.map( ( id, index ) => {\r\n-\t\t\tconst textReplace = '{{FIB_' + id + '}}';\r\n-\t\t\tlet elContent = '';\r\n-\r\n-\t\t\tconst answerID = answers ? answers?.[ id ] : undefined;\r\n-\r\n-\t\t\tif ( answerID || isReviewing ) {\r\n-\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered ${ ( showCorrectReview || isCheckedAnswer ) && answerID?.correct ? ( answerID?.isCorrect ? 'correct' : 'fail' ) : '' }\">`;\r\n-\r\n-\t\t\t\tif ( ! answerID?.isCorrect ) {\r\n-\t\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered__answer\">${ answered?.[ id ] ?? '' }\u003C\u002Fspan>`;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! answerID?.isCorrect && answerID?.correct ) {\r\n-\t\t\t\t\telContent += ' → ';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered__fill\">${ answerID?.correct ?? '' }\u003C\u002Fspan>`;\r\n-\t\t\t\telContent += '\u003C\u002Fspan>';\r\n-\t\t\t} else {\r\n-\t\t\t\telContent += '\u003Cdiv class=\"lp-fib-input\" style=\"display: inline-block; width: auto;\">';\r\n-\t\t\t\telContent += '\u003Cinput type=\"text\" data-id=\"' + id + '\" value=\"\" \u002F>';\r\n-\t\t\t\telContent += '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\r\n-\t\t\ttitle = title.replace( textReplace, elContent );\r\n-\t\t} );\r\n-\r\n-\t\treturn title;\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cdiv className=\"lp-fib-content\">\r\n-\t\t\t\t\t{ this.getOptions().map( ( option ) => {\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003Cdiv key={ `blank-${ option.uid }` } dangerouslySetInnerHTML={ { __html: this.convertInputField( option ) || option.value } }>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} ) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t{ ! this.isDefaultType() && this.getWarningMessage() }\r\n-\t\t\t\t{ this.getCorrectLabel() }\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default QuestionFillInBlanks;\r\n+import { __ } from '@wordpress\u002Fi18n';\n+import QuestionBase from '..\u002F..\u002Fquestion-base';\n+\n+let flagEventEnterInput = false;\n+\n+class QuestionFillInBlanks extends QuestionBase {\n+\tcomponentDidMount() {\n+\t\tconst { answered, question } = this.props;\n+\n+\t\tif ( answered ) {\n+\t\t\tconst allFIBs = document.querySelectorAll( '.lp-fib-input > input' );\n+\n+\t\t\t[ ...allFIBs ].map( ( ele ) => {\n+\t\t\t\tconst question_id = parseInt( ele.closest( '.question' ).dataset.id );\n+\n+\t\t\t\tif ( question_id === question.id ) {\n+\t\t\t\t\tif ( answered[ ele.dataset.id ] ) {\n+\t\t\t\t\t\tele.value = answered[ ele.dataset.id ];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\n+\t\tthis.updateFibAnswer();\n+\t}\n+\n+\tcomponentDidUpdate( prevProps ) {\n+\t\tif ( ! prevProps.answered ) {\n+\t\t\tthis.updateFibAnswer();\n+\t\t}\n+\t}\n+\n+\tupdateFibAnswer = () => {\n+\t\tif ( ! flagEventEnterInput ) {\n+\t\t\tdocument.addEventListener( 'input', ( e ) => {\n+\t\t\t\tconst target = e.target;\n+\t\t\t\tconst parent = target.closest( '.lp-fib-input' );\n+\n+\t\t\t\tif ( parent ) {\n+\t\t\t\t\tconst elQuestionFIB = target.closest( '.question-fill_in_blanks' );\n+\t\t\t\t\tconst question_id = elQuestionFIB.dataset.id;\n+\t\t\t\t\tthis.setAnswered( question_id, target.dataset.id, target.value );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\n+\t\tflagEventEnterInput = true;\n+\t};\n+\n+\tsetAnswered = ( question_id, id, value ) => {\n+\t\tconst {\n+\t\t\tupdateUserQuestionFibAnswers,\n+\t\t\tquestion,\n+\t\t\tstatus,\n+\t\t} = this.props;\n+\n+\t\tif ( status !== 'started' ) {\n+\t\t\treturn 'LP Error: can not set answers';\n+\t\t}\n+\n+\t\tconst newAnswered = {};\n+\t\tnewAnswered[ id ] = value;\n+\n+\t\tupdateUserQuestionFibAnswers( question_id, id, value );\n+\t};\n+\n+\tgetCorrectLabel = () => {\n+\t\tconst { question, mark } = this.props;\n+\n+\t\tlet getMark = mark || 0;\n+\n+\t\tif ( mark ) {\n+\t\t\tif ( ! Number.isInteger( mark ) ) {\n+\t\t\t\tgetMark = mark.toFixed( 2 );\n+\t\t\t}\n+\t\t}\n+\t\treturn this.maybeShowCorrectAnswer() && (\n+\t\t\t\u003Cdiv className=\"question-response correct\">\n+\t\t\t\t\u003Cspan className=\"label\">{ __( 'Points', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan className=\"point\">{ `${ getMark }\u002F${ question.point } ${ __( 'point', 'learnpress' ) }` }\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan className=\"lp-fib-note\">\u003Cspan style={ { background: '#00adff' } }>\u003C\u002Fspan>{ __( 'Correct', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan className=\"lp-fib-note\">\u003Cspan style={ { background: '#d85554' } }>\u003C\u002Fspan>{ __( 'Incorrect', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t);\n+\t};\n+\n+\tconvertInputField = ( option ) => {\n+\t\tconst { answered, isReviewing, showCorrectReview, isCheckedAnswer } = this.props;\n+\n+\t\tlet title = option.title;\n+\n+\t\tconst answers = option?.answers;\n+\n+\t\toption.ids.map( ( id, index ) => {\n+\t\t\tconst textReplace = '{{FIB_' + id + '}}';\n+\t\t\tlet elContent = '';\n+\n+\t\t\tconst answerID = answers ? answers?.[ id ] : undefined;\n+\n+\t\t\tif ( answerID || isReviewing ) {\n+\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered ${ ( showCorrectReview || isCheckedAnswer ) && answerID?.correct ? ( answerID?.isCorrect ? 'correct' : 'fail' ) : '' }\">`;\n+\n+\t\t\t\tif ( ! answerID?.isCorrect ) {\n+\t\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered__answer\">${ answered?.[ id ] ?? '' }\u003C\u002Fspan>`;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! answerID?.isCorrect && answerID?.correct ) {\n+\t\t\t\t\telContent += ' → ';\n+\t\t\t\t}\n+\n+\t\t\t\telContent += `\u003Cspan class=\"lp-fib-answered__fill\">${ answerID?.correct ?? '' }\u003C\u002Fspan>`;\n+\t\t\t\telContent += '\u003C\u002Fspan>';\n+\t\t\t} else {\n+\t\t\t\telContent += '\u003Cdiv class=\"lp-fib-input\" style=\"display: inline-block; width: auto;\">';\n+\t\t\t\telContent += '\u003Cinput type=\"text\" data-id=\"' + id + '\" value=\"\" \u002F>';\n+\t\t\t\telContent += '\u003C\u002Fdiv>';\n+\t\t\t}\n+\n+\t\t\ttitle = title.replace( textReplace, elContent );\n+\t\t} );\n+\n+\t\treturn title;\n+\t};\n+\n+\trender() {\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cdiv className=\"lp-fib-content\">\n+\t\t\t\t\t{ this.getOptions().map( ( option ) => {\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003Cdiv key={ `blank-${ option.uid }` } dangerouslySetInnerHTML={ { __html: this.convertInputField( option ) || option.value } }>\u003C\u002Fdiv>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} ) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t{ ! this.isDefaultType() && this.getWarningMessage() }\n+\t\t\t\t{ this.getCorrectLabel() }\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default QuestionFillInBlanks;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fmultiple-choices\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fmultiple-choices\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fmultiple-choices\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fmultiple-choices\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import QuestionBase from '..\u002F..\u002Fquestion-base';\r\n-\r\n-const { isBoolean } = lodash;\r\n-\r\n-class QuestionMultipleChoices extends QuestionBase {\r\n-\tisCorrect = () => {\r\n-\t\tconst { answered } = this.props;\r\n-\r\n-\t\tif ( isBoolean( answered ) || ! answered ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tlet i, option, options;\r\n-\r\n-\t\tfor ( i = 0, options = this.getOptions(); i \u003C options.length; i++ ) {\r\n-\t\t\toption = options[ i ];\r\n-\r\n-\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\tif ( answered.indexOf( option.value ) === -1 ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t} else if ( answered.indexOf( option.value ) !== -1 ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t};\r\n-\r\n-\tgetOptionClass = ( option ) => {\r\n-\t\tconst { answered } = this.props;\r\n-\t\tconst optionClass = [ ...this.state.optionClass ];\r\n-\r\n-\t\tif ( this.maybeShowCorrectAnswer() ) {\r\n-\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\toptionClass.push( 'answer-correct' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( answered ) {\r\n-\t\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\t\tanswered.indexOf( option.value ) !== -1 && optionClass.push( 'answered-correct' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tanswered.indexOf( option.value ) !== -1 && optionClass.push( 'answered-wrong' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn optionClass;\r\n-\t};\r\n-}\r\n-\r\n-export default QuestionMultipleChoices;\r\n+import { Component } from '@wordpress\u002Felement';\n+import { __ } from '@wordpress\u002Fi18n';\n+import QuestionBase from '..\u002F..\u002Fquestion-base';\n+\n+const { isBoolean } = lodash;\n+\n+class QuestionMultipleChoices extends QuestionBase {\n+\tisCorrect = () => {\n+\t\tconst { answered } = this.props;\n+\n+\t\tif ( isBoolean( answered ) || ! answered ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tlet i, option, options;\n+\n+\t\tfor ( i = 0, options = this.getOptions(); i \u003C options.length; i++ ) {\n+\t\t\toption = options[ i ];\n+\n+\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\tif ( answered.indexOf( option.value ) === -1 ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t} else if ( answered.indexOf( option.value ) !== -1 ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn true;\n+\t};\n+\n+\tgetOptionClass = ( option ) => {\n+\t\tconst { answered } = this.props;\n+\t\tconst optionClass = [ ...this.state.optionClass ];\n+\n+\t\tif ( this.maybeShowCorrectAnswer() ) {\n+\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\toptionClass.push( 'answer-correct' );\n+\t\t\t}\n+\n+\t\t\tif ( answered ) {\n+\t\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\t\tanswered.indexOf( option.value ) !== -1 && optionClass.push( 'answered-correct' );\n+\t\t\t\t} else {\n+\t\t\t\t\tanswered.indexOf( option.value ) !== -1 && optionClass.push( 'answered-wrong' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn optionClass;\n+\t};\n+}\n+\n+export default QuestionMultipleChoices;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fsingle-choice\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fsingle-choice\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fsingle-choice\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Fsingle-choice\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u002F* eslint-disable no-mixed-spaces-and-tabs *\u002F\r\n-import QuestionBase from '..\u002F..\u002Fquestion-base';\r\n-\r\n-class QuestionSingleChoice extends QuestionBase {\r\n-    getOptionClass = ( option ) => {\r\n-    \tconst { answered } = this.props;\r\n-    \tconst optionClass = [ ...this.state.optionClass ];\r\n-\r\n-    \tif ( this.maybeShowCorrectAnswer() ) {\r\n-    \t\tif ( option.isTrue === 'yes' ) {\r\n-    \t\t\toptionClass.push( 'answer-correct' );\r\n-    \t\t}\r\n-\r\n-    \t\tif ( answered ) {\r\n-    \t\t\tif ( option.isTrue === 'yes' ) {\r\n-    \t\t\t\t( answered === option.value ) && optionClass.push( 'answered-correct' );\r\n-    \t\t\t} else {\r\n-    \t\t\t\t( answered === option.value ) && optionClass.push( 'answered-wrong' );\r\n-    \t\t\t}\r\n-    \t\t}\r\n-    \t}\r\n-\r\n-    \treturn optionClass;\r\n-    };\r\n-}\r\n-\r\n-export default QuestionSingleChoice;\r\n+\u002F* eslint-disable no-mixed-spaces-and-tabs *\u002F\n+import QuestionBase from '..\u002F..\u002Fquestion-base';\n+\n+class QuestionSingleChoice extends QuestionBase {\n+    getOptionClass = ( option ) => {\n+    \tconst { answered } = this.props;\n+    \tconst optionClass = [ ...this.state.optionClass ];\n+\n+    \tif ( this.maybeShowCorrectAnswer() ) {\n+    \t\tif ( option.isTrue === 'yes' ) {\n+    \t\t\toptionClass.push( 'answer-correct' );\n+    \t\t}\n+\n+    \t\tif ( answered ) {\n+    \t\t\tif ( option.isTrue === 'yes' ) {\n+    \t\t\t\t( answered === option.value ) && optionClass.push( 'answered-correct' );\n+    \t\t\t} else {\n+    \t\t\t\t( answered === option.value ) && optionClass.push( 'answered-wrong' );\n+    \t\t\t}\n+    \t\t}\n+    \t}\n+\n+    \treturn optionClass;\n+    };\n+}\n+\n+export default QuestionSingleChoice;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ftrue-or-false\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ftrue-or-false\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ftrue-or-false\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ftrue-or-false\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-import QuestionBase from '..\u002F..\u002Fquestion-base';\r\n-\r\n-class QuestionTrueOrFalse extends QuestionBase {\r\n-\tgetOptionClass = ( option ) => {\r\n-\t\tconst { answered } = this.props;\r\n-\t\tconst optionClass = [ ...this.state.optionClass ];\r\n-\r\n-\t\tif ( this.maybeShowCorrectAnswer() ) {\r\n-\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\toptionClass.push( 'answer-correct' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( answered ) {\r\n-\t\t\t\tif ( option.isTrue === 'yes' ) {\r\n-\t\t\t\t\t( answered === option.value ) && optionClass.push( 'answered-correct' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t( answered === option.value ) && optionClass.push( 'answered-wrong' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn optionClass;\r\n-\t};\r\n-}\r\n-\r\n-export default QuestionTrueOrFalse;\r\n+import QuestionBase from '..\u002F..\u002Fquestion-base';\n+\n+class QuestionTrueOrFalse extends QuestionBase {\n+\tgetOptionClass = ( option ) => {\n+\t\tconst { answered } = this.props;\n+\t\tconst optionClass = [ ...this.state.optionClass ];\n+\n+\t\tif ( this.maybeShowCorrectAnswer() ) {\n+\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\toptionClass.push( 'answer-correct' );\n+\t\t\t}\n+\n+\t\t\tif ( answered ) {\n+\t\t\t\tif ( option.isTrue === 'yes' ) {\n+\t\t\t\t\t( answered === option.value ) && optionClass.push( 'answered-correct' );\n+\t\t\t\t} else {\n+\t\t\t\t\t( answered === option.value ) && optionClass.push( 'answered-wrong' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn optionClass;\n+\t};\n+}\n+\n+export default QuestionTrueOrFalse;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { withDispatch, withSelect } from '@wordpress\u002Fdata';\r\n-import { __, sprintf } from '@wordpress\u002Fi18n';\r\n-\r\n-export * from '.\u002Fcomponents';\r\n-\r\n-class QuestionTypes extends Component {\r\n-\tgetQuestion = () => {\r\n-\t\tconst { question } = this.props;\r\n-\r\n-\t\tconst types = LP.Hook.applyFilters( 'question-types', {\r\n-\t\t\tsingle_choice: LP.questionTypes.SingleChoice,\r\n-\t\t\tmulti_choice: LP.questionTypes.MultipleChoices,\r\n-\t\t\ttrue_or_false: LP.questionTypes.TrueOrFalse,\r\n-\t\t\tfill_in_blanks: LP.questionTypes.FillInBlanks,\r\n-\t\t} );\r\n-\r\n-\t\treturn types[ question.type ];\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst {\r\n-\t\t\tquestion,\r\n-\t\t\tsupportOptions,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tconst childProps = { ...this.props };\r\n-\t\tchildProps.supportOptions = supportOptions.indexOf( question.type ) !== -1;\r\n-\r\n-\t\tconst TheQuestion = this.getQuestion() || function() {\r\n-\t\t\treturn (\r\n-\t\t\t\t\u003Cdiv className=\"question-types\"\r\n-\t\t\t\t\tdangerouslySetInnerHTML={ { __html: sprintf( __( 'Question \u003Ccode>%s\u003C\u002Fcode> invalid!', 'learnpress' ), question.type ) } }>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t);\r\n-\t\t};\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003CTheQuestion { ...childProps } \u002F>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose(\r\n-\twithSelect( ( select, { question: { id } } ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t\tisCheckedAnswer,\r\n-\t\t} = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tsupportOptions: getData( 'supportOptions' ),\r\n-\t\t\tisCheckedAnswer: isCheckedAnswer( id ),\r\n-\t\t\tkeyPressed: getData( 'keyPressed' ),\r\n-\t\t\tshowCorrectReview: getData( 'showCorrectReview' ),\r\n-\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\r\n-\t\t};\r\n-\t} ),\r\n-\twithDispatch( () => {\r\n-\t\treturn {};\r\n-\t} )\r\n-)( QuestionTypes );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { withDispatch, withSelect } from '@wordpress\u002Fdata';\n+import { __, sprintf } from '@wordpress\u002Fi18n';\n+\n+export * from '.\u002Fcomponents';\n+\n+class QuestionTypes extends Component {\n+\tgetQuestion = () => {\n+\t\tconst { question } = this.props;\n+\n+\t\tconst types = LP.Hook.applyFilters( 'question-types', {\n+\t\t\tsingle_choice: LP.questionTypes.SingleChoice,\n+\t\t\tmulti_choice: LP.questionTypes.MultipleChoices,\n+\t\t\ttrue_or_false: LP.questionTypes.TrueOrFalse,\n+\t\t\tfill_in_blanks: LP.questionTypes.FillInBlanks,\n+\t\t} );\n+\n+\t\treturn types[ question.type ];\n+\t};\n+\n+\trender() {\n+\t\tconst {\n+\t\t\tquestion,\n+\t\t\tsupportOptions,\n+\t\t} = this.props;\n+\n+\t\tconst childProps = { ...this.props };\n+\t\tchildProps.supportOptions = supportOptions.indexOf( question.type ) !== -1;\n+\n+\t\tconst TheQuestion = this.getQuestion() || function() {\n+\t\t\treturn (\n+\t\t\t\t\u003Cdiv className=\"question-types\"\n+\t\t\t\t\tdangerouslySetInnerHTML={ { __html: sprintf( __( 'Question \u003Ccode>%s\u003C\u002Fcode> invalid!', 'learnpress' ), question.type ) } }>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t);\n+\t\t};\n+\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003CTheQuestion { ...childProps } \u002F>\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default compose(\n+\twithSelect( ( select, { question: { id } } ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t\tisCheckedAnswer,\n+\t\t} = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tsupportOptions: getData( 'supportOptions' ),\n+\t\t\tisCheckedAnswer: isCheckedAnswer( id ),\n+\t\t\tkeyPressed: getData( 'keyPressed' ),\n+\t\t\tshowCorrectReview: getData( 'showCorrectReview' ),\n+\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\n+\t\t};\n+\t} ),\n+\twithDispatch( () => {\n+\t\treturn {};\n+\t} )\n+)( QuestionTypes );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,4 @@\n-export * from '.\u002Fquestion-types\u002Findex';\r\n-import QuestionTypes from '.\u002Fquestion-types\u002Findex';\r\n-\r\n-export default QuestionTypes;\r\n+export * from '.\u002Fquestion-types\u002Findex';\n+import QuestionTypes from '.\u002Fquestion-types\u002Findex';\n+\n+export default QuestionTypes;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,109 +1,109 @@\n-import { select } from '@wordpress\u002Fdata';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-import { default as formatDuration } from '..\u002Fduration';\r\n-\r\n-\u002F**\r\n- * Displays list of all attempt from a quiz.\r\n- *\u002F\r\n-const Attempts = () => {\r\n-\tconst attempts = select( 'learnpress\u002Fquiz' ).getData( 'attempts' ) || [];\r\n-\r\n-\tconst hasAttempts = attempts && !! attempts.length;\r\n-\treturn (\r\n-\t\t! hasAttempts ? false : \u003C>\r\n-\t\t\t\u003Cdiv className=\"quiz-attempts\">\r\n-\t\t\t\t\u003Ch4 className=\"attempts-heading\">{ __( 'Last Attempt', 'learnpress' ) }\u003C\u002Fh4>\r\n-\r\n-\t\t\t\t{ hasAttempts && (\r\n-\t\t\t\t\t\u003Ctable>\r\n-\t\t\t\t\t\t\u003Cthead>\r\n-\t\t\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__questions\">{ __( 'Questions', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__spend\">{ __( 'Time spent', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__marks\">{ __( 'Marks', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__grade\">{ __( 'Passing grade', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__result\">{ __( 'Result', 'learnpress' ) }\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\t\t\t\u003Ctbody>\r\n-\t\t\t\t\t\t\t{ attempts.map( ( row, key ) => {\r\n-\t\t\t\t\t\t\t\t\u002F\u002F Re-write value to attempts.timeSpend\r\n-\t\t\t\t\t\t\t\t\u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\t\t\t\t\t\t\tconst timespendStart = window.localStorage.getItem( 'quiz_start_' + lpQuizSettings.id ),\r\n-\t\t\t\t\t\t\t\t\t\ttimespendEnd = window.localStorage.getItem( 'quiz_end_' + lpQuizSettings.id );\r\n-\t\t\t\t\t\t\t\t\tif ( timespendStart && timespendEnd ) {\r\n-\t\t\t\t\t\t\t\t\t\trow.timeSpend = timeDifference( timespendStart, timespendEnd ).duration;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}*\u002F\r\n-\t\t\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\t\t\u003Ctr key={ `attempt-${ key }` }>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__questions\">{ `${ row.questionCorrect } \u002F ${ row.questionCount }` }\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__spend\">{ row.timeSpend || '--' }\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__marks\">{ `${ row.userMark } \u002F ${ row.mark }` }\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__grade\">{ row.passingGrade || '-' }\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__result\">{ `${ parseFloat( row.result ).toFixed( 2 ) }%` } \u003Cspan>{ row.graduationText }\u003C\u002Fspan>\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t} ) }\r\n-\t\t\t\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\t\t\u003C\u002Ftable>\r\n-\t\t\t\t) }\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-function timeDifference( earlierDate, laterDate ) {\r\n-\tconst oDiff = new Object();\r\n-\r\n-\t\u002F\u002F  Calculate Differences\r\n-\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\tlet nTotalDiff = laterDate - earlierDate;\r\n-\r\n-\toDiff.days = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 \u002F 24 );\r\n-\tnTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;\r\n-\r\n-\toDiff.hours = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 );\r\n-\tnTotalDiff -= oDiff.hours * 1000 * 60 * 60;\r\n-\r\n-\toDiff.minutes = Math.floor( nTotalDiff \u002F 1000 \u002F 60 );\r\n-\tnTotalDiff -= oDiff.minutes * 1000 * 60;\r\n-\r\n-\toDiff.seconds = Math.floor( nTotalDiff \u002F 1000 );\r\n-\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\r\n-\t\u002F\u002F  Format Duration\r\n-\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\t\u002F\u002F  Format Hours\r\n-\tlet hourtext = '00';\r\n-\tif ( oDiff.days > 0 ) {\r\n-\t\thourtext = String( oDiff.days );\r\n-\t}\r\n-\tif ( hourtext.length == 1 ) {\r\n-\t\thourtext = '0' + hourtext;\r\n-\t}\r\n-\r\n-\t\u002F\u002F  Format Minutes\r\n-\tlet mintext = '00';\r\n-\tif ( oDiff.minutes > 0 ) {\r\n-\t\tmintext = String( oDiff.minutes );\r\n-\t}\r\n-\tif ( mintext.length == 1 ) {\r\n-\t\tmintext = '0' + mintext;\r\n-\t}\r\n-\r\n-\t\u002F\u002F  Format Seconds\r\n-\tlet sectext = '00';\r\n-\tif ( oDiff.seconds > 0 ) {\r\n-\t\tsectext = String( oDiff.seconds );\r\n-\t}\r\n-\tif ( sectext.length == 1 ) {\r\n-\t\tsectext = '0' + sectext;\r\n-\t}\r\n-\t\u002F\u002F  Set Duration\r\n-\tconst sDuration = hourtext + ':' + mintext + ':' + sectext;\r\n-\toDiff.duration = sDuration;\r\n-\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\r\n-\treturn oDiff;\r\n-}\r\n-export default Attempts;\r\n+import { select } from '@wordpress\u002Fdata';\n+import { __ } from '@wordpress\u002Fi18n';\n+import { default as formatDuration } from '..\u002Fduration';\n+\n+\u002F**\n+ * Displays list of all attempt from a quiz.\n+ *\u002F\n+const Attempts = () => {\n+\tconst attempts = select( 'learnpress\u002Fquiz' ).getData( 'attempts' ) || [];\n+\n+\tconst hasAttempts = attempts && !! attempts.length;\n+\treturn (\n+\t\t! hasAttempts ? false : \u003C>\n+\t\t\t\u003Cdiv className=\"quiz-attempts\">\n+\t\t\t\t\u003Ch4 className=\"attempts-heading\">{ __( 'Last Attempt', 'learnpress' ) }\u003C\u002Fh4>\n+\n+\t\t\t\t{ hasAttempts && (\n+\t\t\t\t\t\u003Ctable>\n+\t\t\t\t\t\t\u003Cthead>\n+\t\t\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__questions\">{ __( 'Questions', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__spend\">{ __( 'Time spent', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__marks\">{ __( 'Marks', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__grade\">{ __( 'Passing grade', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\t\u003Cth className=\"quiz-attempts__result\">{ __( 'Result', 'learnpress' ) }\u003C\u002Fth>\n+\t\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\u003C\u002Fthead>\n+\t\t\t\t\t\t\u003Ctbody>\n+\t\t\t\t\t\t\t{ attempts.map( ( row, key ) => {\n+\t\t\t\t\t\t\t\t\u002F\u002F Re-write value to attempts.timeSpend\n+\t\t\t\t\t\t\t\t\u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\t\t\t\t\t\t\tconst timespendStart = window.localStorage.getItem( 'quiz_start_' + lpQuizSettings.id ),\n+\t\t\t\t\t\t\t\t\t\ttimespendEnd = window.localStorage.getItem( 'quiz_end_' + lpQuizSettings.id );\n+\t\t\t\t\t\t\t\t\tif ( timespendStart && timespendEnd ) {\n+\t\t\t\t\t\t\t\t\t\trow.timeSpend = timeDifference( timespendStart, timespendEnd ).duration;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}*\u002F\n+\t\t\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\t\t\u003Ctr key={ `attempt-${ key }` }>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__questions\">{ `${ row.questionCorrect } \u002F ${ row.questionCount }` }\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__spend\">{ row.timeSpend || '--' }\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__marks\">{ `${ row.userMark } \u002F ${ row.mark }` }\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__grade\">{ row.passingGrade || '-' }\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\t\u003Ctd className=\"quiz-attempts__result\">{ `${ parseFloat( row.result ).toFixed( 2 ) }%` } \u003Cspan>{ row.graduationText }\u003C\u002Fspan>\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t} ) }\n+\t\t\t\t\t\t\u003C\u002Ftbody>\n+\t\t\t\t\t\u003C\u002Ftable>\n+\t\t\t\t) }\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002F>\n+\t);\n+};\n+function timeDifference( earlierDate, laterDate ) {\n+\tconst oDiff = new Object();\n+\n+\t\u002F\u002F  Calculate Differences\n+\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\tlet nTotalDiff = laterDate - earlierDate;\n+\n+\toDiff.days = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 \u002F 24 );\n+\tnTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;\n+\n+\toDiff.hours = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 );\n+\tnTotalDiff -= oDiff.hours * 1000 * 60 * 60;\n+\n+\toDiff.minutes = Math.floor( nTotalDiff \u002F 1000 \u002F 60 );\n+\tnTotalDiff -= oDiff.minutes * 1000 * 60;\n+\n+\toDiff.seconds = Math.floor( nTotalDiff \u002F 1000 );\n+\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\n+\t\u002F\u002F  Format Duration\n+\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\t\u002F\u002F  Format Hours\n+\tlet hourtext = '00';\n+\tif ( oDiff.days > 0 ) {\n+\t\thourtext = String( oDiff.days );\n+\t}\n+\tif ( hourtext.length == 1 ) {\n+\t\thourtext = '0' + hourtext;\n+\t}\n+\n+\t\u002F\u002F  Format Minutes\n+\tlet mintext = '00';\n+\tif ( oDiff.minutes > 0 ) {\n+\t\tmintext = String( oDiff.minutes );\n+\t}\n+\tif ( mintext.length == 1 ) {\n+\t\tmintext = '0' + mintext;\n+\t}\n+\n+\t\u002F\u002F  Format Seconds\n+\tlet sectext = '00';\n+\tif ( oDiff.seconds > 0 ) {\n+\t\tsectext = String( oDiff.seconds );\n+\t}\n+\tif ( sectext.length == 1 ) {\n+\t\tsectext = '0' + sectext;\n+\t}\n+\t\u002F\u002F  Set Duration\n+\tconst sDuration = hourtext + ':' + mintext + ':' + sectext;\n+\toDiff.duration = sDuration;\n+\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\n+\treturn oDiff;\n+}\n+export default Attempts;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-import classNames from 'classnames';\r\n-\r\n-import { Component } from '@wordpress\u002Felement';\r\n-import { withDispatch, withSelect } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-class ButtonCheck extends Component {\r\n-\tconstructor() {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tthis.state = {\r\n-\t\t\tloading: false,\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tcheckAnswer = () => {\r\n-\t\tconst { checkAnswer, question, answered } = this.props;\r\n-\r\n-\t\t\u002F\u002F Fix temporary for FIB.\r\n-\t\tif ( question.type === 'fill_in_blanks' ) {\r\n-\t\t\tconst elFIB = document.querySelector( `.question-fill_in_blanks[data-id=\"${ question.id }\"]` );\r\n-\t\t\tconst elInputs = elFIB.querySelectorAll( '.lp-fib-input > input' );\r\n-\t\t\telInputs.forEach( ( elInput ) => {\r\n-\t\t\t\tif ( elInput.value.length > 0 ) {\r\n-\t\t\t\t\tthis.setState( {\r\n-\t\t\t\t\t\tloading: true,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\tcheckAnswer( question.id );\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tif ( answered ) {\r\n-\t\t\tcheckAnswer( question.id );\r\n-\r\n-\t\t\tthis.setState( {\r\n-\t\t\t\tloading: true,\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst { answered } = this.props;\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cbutton className={ classNames( 'lp-button', 'instant-check', {\r\n-\t\t\t\t\tloading: this.state.loading,\r\n-\t\t\t\t} ) } onClick={ this.checkAnswer }\r\n-\t\t\t\t>\r\n-\t\t\t\t\t\u003Cspan className=\"instant-check__icon\" \u002F>\r\n-\t\t\t\t\t{ __( 'Check answers', 'learnpress' ) }\r\n-\r\n-\t\t\t\t\t{ ! answered && (\r\n-\t\t\t\t\t\t\u003Cdiv className=\"instant-check__info\" dangerouslySetInnerHTML={ { __html: __( 'You need to answer the question before checking the answer key.', 'learnpress' ) } } \u002F>\r\n-\t\t\t\t\t) }\r\n-\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose(\r\n-\twithSelect( ( select, { question: { id } } ) => {\r\n-\t\tconst { getQuestionAnswered } = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tanswered: getQuestionAnswered( id ),\r\n-\t\t};\r\n-\t} ),\r\n-\twithDispatch( ( dispatch, { id } ) => {\r\n-\t\tconst { checkAnswer } = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tcheckAnswer( id ) {\r\n-\t\t\t\tcheckAnswer( id );\r\n-\t\t\t},\r\n-\t\t};\r\n-\t} )\r\n-)( ButtonCheck );\r\n+import classNames from 'classnames';\n+\n+import { Component } from '@wordpress\u002Felement';\n+import { withDispatch, withSelect } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+class ButtonCheck extends Component {\n+\tconstructor() {\n+\t\tsuper( ...arguments );\n+\n+\t\tthis.state = {\n+\t\t\tloading: false,\n+\t\t};\n+\t}\n+\n+\tcheckAnswer = () => {\n+\t\tconst { checkAnswer, question, answered } = this.props;\n+\n+\t\t\u002F\u002F Fix temporary for FIB.\n+\t\tif ( question.type === 'fill_in_blanks' ) {\n+\t\t\tconst elFIB = document.querySelector( `.question-fill_in_blanks[data-id=\"${ question.id }\"]` );\n+\t\t\tconst elInputs = elFIB.querySelectorAll( '.lp-fib-input > input' );\n+\t\t\telInputs.forEach( ( elInput ) => {\n+\t\t\t\tif ( elInput.value.length > 0 ) {\n+\t\t\t\t\tthis.setState( {\n+\t\t\t\t\t\tloading: true,\n+\t\t\t\t\t} );\n+\t\t\t\t\tcheckAnswer( question.id );\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\n+\t\tif ( answered ) {\n+\t\t\tcheckAnswer( question.id );\n+\n+\t\t\tthis.setState( {\n+\t\t\t\tloading: true,\n+\t\t\t} );\n+\t\t}\n+\t};\n+\n+\trender() {\n+\t\tconst { answered } = this.props;\n+\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cbutton className={ classNames( 'lp-button', 'instant-check', {\n+\t\t\t\t\tloading: this.state.loading,\n+\t\t\t\t} ) } onClick={ this.checkAnswer }\n+\t\t\t\t>\n+\t\t\t\t\t\u003Cspan className=\"instant-check__icon\" \u002F>\n+\t\t\t\t\t{ __( 'Check answers', 'learnpress' ) }\n+\n+\t\t\t\t\t{ ! answered && (\n+\t\t\t\t\t\t\u003Cdiv className=\"instant-check__info\" dangerouslySetInnerHTML={ { __html: __( 'You need to answer the question before checking the answer key.', 'learnpress' ) } } \u002F>\n+\t\t\t\t\t) }\n+\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default compose(\n+\twithSelect( ( select, { question: { id } } ) => {\n+\t\tconst { getQuestionAnswered } = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tanswered: getQuestionAnswered( id ),\n+\t\t};\n+\t} ),\n+\twithDispatch( ( dispatch, { id } ) => {\n+\t\tconst { checkAnswer } = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tcheckAnswer( id ) {\n+\t\t\t\tcheckAnswer( id );\n+\t\t\t},\n+\t\t};\n+\t} )\n+)( ButtonCheck );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { withDispatch } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-class ButtonHint extends Component {\r\n-\t\u002F**\r\n-\t * Callback to show hint of question\r\n-\t *\u002F\r\n-\tshowHint = () => {\r\n-\t\tconst { showHint, question } = this.props;\r\n-\r\n-\t\tshowHint( question.id, ! question.showHint );\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst { question } = this.props;\r\n-\r\n-\t\treturn (\r\n-\t\t\tquestion.hint ? (\r\n-\t\t\t\t\u003Cbutton className=\"btn-show-hint\" onClick={ this.showHint }>\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Hint', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t) : ''\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose(\r\n-\twithDispatch( ( dispatch, { id } ) => {\r\n-\t\tconst {\r\n-\t\t\tshowHint,\r\n-\t\t} = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tshowHint( id, show ) {\r\n-\t\t\t\tshowHint( id, show );\r\n-\t\t\t},\r\n-\t\t};\r\n-\t} )\r\n-)( ButtonHint );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { withDispatch } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+class ButtonHint extends Component {\n+\t\u002F**\n+\t * Callback to show hint of question\n+\t *\u002F\n+\tshowHint = () => {\n+\t\tconst { showHint, question } = this.props;\n+\n+\t\tshowHint( question.id, ! question.showHint );\n+\t};\n+\n+\trender() {\n+\t\tconst { question } = this.props;\n+\n+\t\treturn (\n+\t\t\tquestion.hint ? (\n+\t\t\t\t\u003Cbutton className=\"btn-show-hint\" onClick={ this.showHint }>\n+\t\t\t\t\t\u003Cspan>{ __( 'Hint', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t) : ''\n+\t\t);\n+\t}\n+}\n+\n+export default compose(\n+\twithDispatch( ( dispatch, { id } ) => {\n+\t\tconst {\n+\t\t\tshowHint,\n+\t\t} = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tshowHint( id, show ) {\n+\t\t\t\tshowHint( id, show );\n+\t\t\t},\n+\t\t};\n+\t} )\n+)( ButtonHint );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,467 +1,467 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { withSelect, withDispatch, select } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-class Buttons extends Component {\r\n-\tstartQuiz = ( event ) => {\r\n-\t\tevent && event.preventDefault();\r\n-\t\tconst btn = document.querySelector( '.lp-button.start' );\r\n-\t\tbtn && btn.setAttribute( 'disabled', 'disabled' );\r\n-\t\tbtn.classList.add( 'loading' );\r\n-\t\tconst { startQuiz, status } = this.props;\r\n-\r\n-\t\tif ( status === 'completed' ) {\r\n-\t\t\tconst { confirm, isOpen } = select( 'learnpress\u002Fmodal' );\r\n-\r\n-\t\t\tif ( 'no' === confirm( __( 'Are you sure you want to retake the quiz?', 'learnpress' ), this.startQuiz ) ) {\r\n-\t\t\t\t! isOpen() && btn && btn.removeAttribute( 'disabled' );\r\n-\t\t\t\tbtn.classList.remove( 'loading' );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F No require enroll\r\n-\t\t\u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\t\u002F\u002F Reset data\r\n-\t\t\twindow.localStorage.removeItem( 'quiz_start_' + lpQuizSettings.id );\r\n-\t\t\twindow.localStorage.removeItem( 'quiz_userdata_' + lpQuizSettings.id );\r\n-\t\t\twindow.localStorage.setItem( 'quiz_start_' + lpQuizSettings.id, Date.now() );\r\n-\r\n-\t\t\t\u002F\u002F Set retake to local.storage\r\n-\t\t\tconst retakenNumber = window.localStorage.getItem( 'quiz_retake_' + lpQuizSettings.id );\r\n-\t\t\tif ( retakenNumber >= 1 ) {\r\n-\t\t\t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, parseInt( retakenNumber ) + 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, 1 );\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\tstartQuiz();\r\n-\t};\r\n-\r\n-\tnav = ( to ) => ( event ) => {\r\n-\t\tlet {\r\n-\t\t\tquestionNav,\r\n-\t\t\tcurrentPage,\r\n-\t\t\tnumPages,\r\n-\t\t\tsetCurrentPage,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tswitch ( to ) {\r\n-\t\tcase 'prev':\r\n-\t\t\tif ( currentPage > 1 ) {\r\n-\t\t\t\tcurrentPage = currentPage - 1;\r\n-\t\t\t} else if ( questionNav === 'infinity' ) {\r\n-\t\t\t\tcurrentPage = numPages;\r\n-\t\t\t} else {\r\n-\t\t\t\tcurrentPage = 1;\r\n-\t\t\t}\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\tif ( currentPage \u003C numPages ) {\r\n-\t\t\t\tcurrentPage = currentPage + 1;\r\n-\t\t\t} else if ( questionNav === 'infinity' ) {\r\n-\t\t\t\tcurrentPage = 1;\r\n-\t\t\t} else {\r\n-\t\t\t\tcurrentPage = numPages;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tsetCurrentPage( currentPage );\r\n-\t};\r\n-\r\n-\tmoveTo = ( pageNum ) => ( event ) => {\r\n-\t\tevent.preventDefault();\r\n-\r\n-\t\tconst {\r\n-\t\t\tnumPages,\r\n-\t\t\tsetCurrentPage,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tif ( pageNum \u003C 1 || pageNum > numPages ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tsetCurrentPage( pageNum );\r\n-\t};\r\n-\r\n-\tisLast = () => {\r\n-\t\tconst { currentPage, numPages } = this.props;\r\n-\r\n-\t\treturn currentPage === numPages;\r\n-\t};\r\n-\r\n-\tisFirst = () => {\r\n-\t\tconst { currentPage } = this.props;\r\n-\r\n-\t\treturn currentPage === 1;\r\n-\t};\r\n-\r\n-\tsubmit = () => {\r\n-\t\tconst { submitQuiz } = this.props;\r\n-\r\n-\t\tconst { confirm } = select( 'learnpress\u002Fmodal' );\r\n-\r\n-\t\tif ( 'no' === confirm( __( 'Are you sure to submit the quiz?', 'learnpress' ), this.submit ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tsubmitQuiz();\r\n-\t};\r\n-\r\n-\tsetQuizMode = ( mode ) => () => {\r\n-\t\tconst { setQuizMode } = this.props;\r\n-\r\n-\t\tsetQuizMode( mode );\r\n-\t};\r\n-\r\n-\tisReviewing = () => {\r\n-\t\tconst { isReviewing } = this.props;\r\n-\r\n-\t\treturn isReviewing;\r\n-\t};\r\n-\r\n-\tpageNumbers( args ) {\r\n-\t\tconst { numPages, currentPage } = this.props;\r\n-\r\n-\t\tif ( numPages \u003C 2 ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\targs = {\r\n-\t\t\tnumPages,\r\n-\t\t\tcurrentPage,\r\n-\t\t\tmidSize: 1,\r\n-\t\t\tendSize: 1,\r\n-\t\t\tprevNext: true,\r\n-\t\t\t...( args || {} ),\r\n-\t\t};\r\n-\r\n-\t\tif ( args.endSize \u003C 1 ) {\r\n-\t\t\targs.endSize = 1;\r\n-\t\t}\r\n-\r\n-\t\tif ( args.midSize \u003C 0 ) {\r\n-\t\t\targs.midSize = 1;\r\n-\t\t}\r\n-\r\n-\t\tconst numbers = [ ...Array( numPages ).keys() ];\r\n-\t\tlet dots = false;\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003Cdiv className=\"nav-links\">\r\n-\r\n-\t\t\t\t{ args.prevNext && ! this.isFirst() && (\r\n-\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\tclassName=\"page-numbers prev\"\r\n-\t\t\t\t\t\tdata-type=\"question-navx\"\r\n-\t\t\t\t\t\tonClick={ this.nav( 'prev' ) }\r\n-\t\t\t\t\t>\r\n-\t\t\t\t\t\t{ __( 'Prev', 'learnpress' ) }\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t) }\r\n-\r\n-\t\t\t\t{ numbers.map( ( number ) => {\r\n-\t\t\t\t\tnumber = number + 1;\r\n-\r\n-\t\t\t\t\tif ( number === args.currentPage ) {\r\n-\t\t\t\t\t\tdots = true;\r\n-\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003Cspan key={ `page-number-${ number }` } className=\"page-numbers current\">{ number }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( number \u003C= args.endSize || ( args.currentPage && number >= args.currentPage - args.midSize && number \u003C= args.currentPage + args.midSize ) || number > args.numPages - args.endSize ) {\r\n-\t\t\t\t\t\tdots = true;\r\n-\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\t\t\tkey={ `page-number-${ number }` }\r\n-\t\t\t\t\t\t\t\tclassName=\"page-numbers\"\r\n-\t\t\t\t\t\t\t\tonClick={ this.moveTo( number ) }\r\n-\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t{ number }\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else if ( dots ) {\r\n-\t\t\t\t\t\tdots = false;\r\n-\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003Cspan key={ `page-number-${ number }` } className=\"page-numbers dots\">&hellip;\u003C\u002Fspan>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn '';\r\n-\t\t\t\t} ) }\r\n-\r\n-\t\t\t\t{ args.prevNext && ! this.isLast() && (\r\n-\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\tclassName=\"page-numbers next\"\r\n-\t\t\t\t\t\tdata-type=\"question-navx\"\r\n-\t\t\t\t\t\tonClick={ this.nav( 'next' ) }\r\n-\t\t\t\t\t>\r\n-\t\t\t\t\t\t{ __( 'Next', 'learnpress' ) }\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t) }\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t);\r\n-\t}\r\n-\r\n-\trender() {\r\n-\t\tconst {\r\n-\t\t\tstatus,\r\n-\t\t\tquestionNav,\r\n-\t\t\tisReviewing,\r\n-\t\t\tshowReview,\r\n-\t\t\tnumPages,\r\n-\t\t\tquestion,\r\n-\t\t\tquestionsPerPage,\r\n-\t\t\tcanRetry,\r\n-\t\t\tretakeNumber,\r\n-\t\t\trequiredPassword,\r\n-\t\t\tallowRetake,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tconst classNames = [ 'quiz-buttons' ];\r\n-\r\n-\t\tif ( status === 'started' || isReviewing ) {\r\n-\t\t\tclassNames.push( 'align-center' );\r\n-\t\t}\r\n-\r\n-\t\tif ( questionNav === 'questionNav' ) {\r\n-\t\t\tclassNames.push( 'infinity' );\r\n-\t\t}\r\n-\r\n-\t\tif ( this.isFirst() ) {\r\n-\t\t\tclassNames.push( 'is-first' );\r\n-\t\t}\r\n-\r\n-\t\tif ( this.isLast() ) {\r\n-\t\t\tclassNames.push( 'is-last' );\r\n-\t\t}\r\n-\r\n-\t\tconst popupSidebar = document.querySelector( '#popup-sidebar' );\r\n-\t\tconst quizzApp = document.querySelector( '#learn-press-quiz-app' );\r\n-\r\n-\t\tlet styles = '';\r\n-\r\n-\t\tif ( status === 'started' || isReviewing ) {\r\n-\t\t\tstyles = { marginLeft: popupSidebar && popupSidebar.offsetWidth \u002F 2, width: quizzApp && quizzApp.offsetWidth };\r\n-\t\t} else {\r\n-\t\t\tstyles = null;\r\n-\t\t}\r\n-\t\tlet navPositionClass = ' fixed';\r\n-\t\tif ( lpQuizSettings.navigationPosition == 'no' ) {\r\n-\t\t\tnavPositionClass = ' nav-center';\r\n-\t\t}\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\r\n-\t\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t\tclassName={ `button-left` + ( ( status === 'started' || isReviewing ) ? navPositionClass : '' ) }\r\n-\t\t\t\t\t\tstyle={ styles }\r\n-\t\t\t\t\t>\r\n-\r\n-\t\t\t\t\t\t{ ( ( status === 'completed' && canRetry ) || -1 !== [ '', 'viewed' ].indexOf( status ) ) && ! isReviewing && ! requiredPassword && (\r\n-\t\t\t\t\t\t\t\u003Cbutton className=\"lp-button start\" onClick={ this.startQuiz }>\r\n-\t\t\t\t\t\t\t\t{ ( status === 'completed' ) ? `${ __( 'Retake', 'learnpress' ) } ${ ! allowRetake ? ` ${ retakeNumber ? ` (${ retakeNumber })` : '' }` : '' } ` :\t' ' + __( 'Start', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\t{ ( 'started' === status || isReviewing ) && ( numPages > 1 ) && (\r\n-\t\t\t\t\t\t\t\u003C>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"questions-pagination\">\r\n-\t\t\t\t\t\t\t\t\t{ this.pageNumbers() }\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002F>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t\u003Cdiv className=\"button-right\">\r\n-\t\t\t\t\t\t{ ( 'started' === status ) && (\r\n-\t\t\t\t\t\t\t\u003C>\r\n-\t\t\t\t\t\t\t\t{ ( ( 'infinity' === questionNav || this.isLast() ) && ! isReviewing ) && (\r\n-\t\t\t\t\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\t\t\t\t\tclassName=\"lp-button submit-quiz\"\r\n-\t\t\t\t\t\t\t\t\t\tonClick={ this.submit }\r\n-\t\t\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t\t\t{ __( 'Finish Quiz', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\t\t\u003C\u002F>\r\n-\t\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\t{ isReviewing && showReview && (\r\n-\t\t\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\t\t\tclassName=\"lp-button back-quiz\"\r\n-\t\t\t\t\t\t\t\tonClick={ this.setQuizMode( '' ) }\r\n-\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t{ __( 'Result', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\t{ 'completed' === status && showReview && ! isReviewing && (\r\n-\t\t\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\t\t\tclassName=\"lp-button review-quiz\"\r\n-\t\t\t\t\t\t\t\tonClick={ this.setQuizMode( 'reviewing' ) }\r\n-\t\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\t{ __( 'Review', 'learnpress' ) }\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t) }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t{ this.props.message && this.props.success !== true && (\r\n-\t\t\t\t\t\u003Cdiv className=\"learn-press-message error\">\r\n-\t\t\t\t\t\t{ this.props.message }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t) }\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Helper function to check a button should be show or not.\r\n- *\r\n- * Buttons [hint, check]\r\n- *\u002F\r\n-export const MaybeShowButton = compose(\r\n-\twithSelect( ( select ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t} = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tstatus: getData( 'status' ),\r\n-\t\t\tshowCheck: getData( 'instantCheck' ),\r\n-\t\t\tcheckedQuestions: getData( 'checkedQuestions' ),\r\n-\t\t\thintedQuestions: getData( 'hintedQuestions' ),\r\n-\t\t\tquestionsPerPage: getData( 'questionsPerPage' ),\r\n-\t\t};\r\n-\t} )\r\n-)( ( props ) => {\r\n-\tconst {\r\n-\t\tshowCheck,\r\n-\t\tcheckedQuestions,\r\n-\t\thintedQuestions,\r\n-\t\tquestion,\r\n-\t\tstatus,\r\n-\t\ttype,\r\n-\t\tButton,\r\n-\t} = props;\r\n-\r\n-\tif ( status !== 'started' ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tconst theButton = \u003CButton question={ question } \u002F>;\r\n-\r\n-\tswitch ( type ) {\r\n-\tcase 'hint':\r\n-\r\n-\t\tif ( ! hintedQuestions ) {\r\n-\t\t\treturn theButton;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! question.hasHint ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn hintedQuestions.indexOf( question.id ) === -1 && theButton;\r\n-\r\n-\tcase 'check':\r\n-\r\n-\t\tif ( ! showCheck ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! checkedQuestions ) {\r\n-\t\t\treturn theButton;\r\n-\t\t}\r\n-\r\n-\t\treturn checkedQuestions.indexOf( question.id ) === -1 && theButton;\r\n-\t}\r\n-} );\r\n-\r\n-export default compose( [\r\n-\twithSelect( ( select ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t\tgetCurrentQuestion,\r\n-\t\t} = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\tconst data = {\r\n-\t\t\tid: getData( 'id' ),\r\n-\t\t\tstatus: getData( 'status' ),\r\n-\t\t\tquestionIds: getData( 'questionIds' ),\r\n-\t\t\tquestionNav: getData( 'questionNav' ),\r\n-\t\t\tisReviewing: getData( 'reviewQuestions' ) && getData( 'mode' ) === 'reviewing',\r\n-\t\t\tshowReview: getData( 'reviewQuestions' ),\r\n-\t\t\tshowCheck: getData( 'instantCheck' ),\r\n-\t\t\tcheckedQuestions: getData( 'checkedQuestions' ),\r\n-\t\t\thintedQuestions: getData( 'hintedQuestions' ),\r\n-\t\t\tnumPages: getData( 'numPages' ),\r\n-\t\t\tpages: getData( 'pages' ),\r\n-\t\t\tcurrentPage: getData( 'currentPage' ),\r\n-\t\t\tquestionsPerPage: getData( 'questionsPerPage' ),\r\n-\t\t\tpageNumbers: getData( 'pageNumbers' ),\r\n-\t\t\tkeyPressed: getData( 'keyPressed' ),\r\n-\t\t\tcanRetry: getData( 'retakeCount' ) > 0 && getData( 'retaken' ) \u003C getData( 'retakeCount' ),\r\n-\t\t\tretakeNumber: getData( 'retakeCount' ) > 0 && getData( 'retaken' ) \u003C getData( 'retakeCount' ) ? getData( 'retakeCount' ) - getData( 'retaken' ) : null,\r\n-\t\t\tmessage: getData( 'messageResponse' ) || false,\r\n-\t\t\tsuccess: getData( 'successResponse' ) !== undefined ? getData( 'successResponse' ) : true,\r\n-\t\t\trequiredPassword: getData( 'requiredPassword' ),\r\n-\t\t\tallowRetake: getData( 'allowRetake' ),\r\n-\t\t};\r\n-\r\n-\t\tif ( data.questionsPerPage === 1 ) {\r\n-\t\t\tdata.question = getCurrentQuestion( 'object' );\r\n-\t\t}\r\n-\r\n-\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\tconst retakenCurrent = window.localStorage.getItem( 'quiz_off_retaken_' + lpQuizSettings.id );\r\n-\r\n-\t\t\tif ( getData( 'retakeCount' ) > retakenCurrent ) {\r\n-\t\t\t\tdata.retakeNumber = getData( 'retakeCount' ) - retakenCurrent;\r\n-\t\t\t\tdata.canRetry = true;\r\n-\t\t\t} else {\r\n-\t\t\t\tdata.canRetry = false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( data.allowRetake ) {\r\n-\t\t\tdata.canRetry = true;\r\n-\t\t}\r\n-\r\n-\t\treturn data;\r\n-\t} ),\r\n-\twithDispatch( ( dispatch, { id } ) => {\r\n-\t\tconst {\r\n-\t\t\tstartQuiz,\r\n-\t\t\tsetCurrentQuestion,\r\n-\t\t\tsubmitQuiz,\r\n-\t\t\tsetQuizMode,\r\n-\t\t\tshowHint,\r\n-\t\t\tcheckAnswer,\r\n-\t\t\tsetCurrentPage,\r\n-\t\t} = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tstartQuiz,\r\n-\t\t\tsetCurrentQuestion,\r\n-\t\t\tsetQuizMode,\r\n-\t\t\tsetCurrentPage,\r\n-\t\t\tsubmitQuiz( id ) {\r\n-\t\t\t\tsubmitQuiz( id );\r\n-\t\t\t},\r\n-\t\t\tshowHint( id ) {\r\n-\t\t\t\tshowHint( id );\r\n-\t\t\t},\r\n-\t\t\tcheckAnswer( id ) {\r\n-\t\t\t\tcheckAnswer( id );\r\n-\t\t\t},\r\n-\t\t};\r\n-\t} ),\r\n-] )( Buttons );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { withSelect, withDispatch, select } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+class Buttons extends Component {\n+\tstartQuiz = ( event ) => {\n+\t\tevent && event.preventDefault();\n+\t\tconst btn = document.querySelector( '.lp-button.start' );\n+\t\tbtn && btn.setAttribute( 'disabled', 'disabled' );\n+\t\tbtn.classList.add( 'loading' );\n+\t\tconst { startQuiz, status } = this.props;\n+\n+\t\tif ( status === 'completed' ) {\n+\t\t\tconst { confirm, isOpen } = select( 'learnpress\u002Fmodal' );\n+\n+\t\t\tif ( 'no' === confirm( __( 'Are you sure you want to retake the quiz?', 'learnpress' ), this.startQuiz ) ) {\n+\t\t\t\t! isOpen() && btn && btn.removeAttribute( 'disabled' );\n+\t\t\t\tbtn.classList.remove( 'loading' );\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F No require enroll\n+\t\t\u002F*if ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\t\u002F\u002F Reset data\n+\t\t\twindow.localStorage.removeItem( 'quiz_start_' + lpQuizSettings.id );\n+\t\t\twindow.localStorage.removeItem( 'quiz_userdata_' + lpQuizSettings.id );\n+\t\t\twindow.localStorage.setItem( 'quiz_start_' + lpQuizSettings.id, Date.now() );\n+\n+\t\t\t\u002F\u002F Set retake to local.storage\n+\t\t\tconst retakenNumber = window.localStorage.getItem( 'quiz_retake_' + lpQuizSettings.id );\n+\t\t\tif ( retakenNumber >= 1 ) {\n+\t\t\t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, parseInt( retakenNumber ) + 1 );\n+\t\t\t} else {\n+\t\t\t\twindow.localStorage.setItem( 'quiz_retake_' + lpQuizSettings.id, 1 );\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\tstartQuiz();\n+\t};\n+\n+\tnav = ( to ) => ( event ) => {\n+\t\tlet {\n+\t\t\tquestionNav,\n+\t\t\tcurrentPage,\n+\t\t\tnumPages,\n+\t\t\tsetCurrentPage,\n+\t\t} = this.props;\n+\n+\t\tswitch ( to ) {\n+\t\tcase 'prev':\n+\t\t\tif ( currentPage > 1 ) {\n+\t\t\t\tcurrentPage = currentPage - 1;\n+\t\t\t} else if ( questionNav === 'infinity' ) {\n+\t\t\t\tcurrentPage = numPages;\n+\t\t\t} else {\n+\t\t\t\tcurrentPage = 1;\n+\t\t\t}\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tif ( currentPage \u003C numPages ) {\n+\t\t\t\tcurrentPage = currentPage + 1;\n+\t\t\t} else if ( questionNav === 'infinity' ) {\n+\t\t\t\tcurrentPage = 1;\n+\t\t\t} else {\n+\t\t\t\tcurrentPage = numPages;\n+\t\t\t}\n+\t\t}\n+\n+\t\tsetCurrentPage( currentPage );\n+\t};\n+\n+\tmoveTo = ( pageNum ) => ( event ) => {\n+\t\tevent.preventDefault();\n+\n+\t\tconst {\n+\t\t\tnumPages,\n+\t\t\tsetCurrentPage,\n+\t\t} = this.props;\n+\n+\t\tif ( pageNum \u003C 1 || pageNum > numPages ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tsetCurrentPage( pageNum );\n+\t};\n+\n+\tisLast = () => {\n+\t\tconst { currentPage, numPages } = this.props;\n+\n+\t\treturn currentPage === numPages;\n+\t};\n+\n+\tisFirst = () => {\n+\t\tconst { currentPage } = this.props;\n+\n+\t\treturn currentPage === 1;\n+\t};\n+\n+\tsubmit = () => {\n+\t\tconst { submitQuiz } = this.props;\n+\n+\t\tconst { confirm } = select( 'learnpress\u002Fmodal' );\n+\n+\t\tif ( 'no' === confirm( __( 'Are you sure to submit the quiz?', 'learnpress' ), this.submit ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tsubmitQuiz();\n+\t};\n+\n+\tsetQuizMode = ( mode ) => () => {\n+\t\tconst { setQuizMode } = this.props;\n+\n+\t\tsetQuizMode( mode );\n+\t};\n+\n+\tisReviewing = () => {\n+\t\tconst { isReviewing } = this.props;\n+\n+\t\treturn isReviewing;\n+\t};\n+\n+\tpageNumbers( args ) {\n+\t\tconst { numPages, currentPage } = this.props;\n+\n+\t\tif ( numPages \u003C 2 ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\targs = {\n+\t\t\tnumPages,\n+\t\t\tcurrentPage,\n+\t\t\tmidSize: 1,\n+\t\t\tendSize: 1,\n+\t\t\tprevNext: true,\n+\t\t\t...( args || {} ),\n+\t\t};\n+\n+\t\tif ( args.endSize \u003C 1 ) {\n+\t\t\targs.endSize = 1;\n+\t\t}\n+\n+\t\tif ( args.midSize \u003C 0 ) {\n+\t\t\targs.midSize = 1;\n+\t\t}\n+\n+\t\tconst numbers = [ ...Array( numPages ).keys() ];\n+\t\tlet dots = false;\n+\n+\t\treturn (\n+\t\t\t\u003Cdiv className=\"nav-links\">\n+\n+\t\t\t\t{ args.prevNext && ! this.isFirst() && (\n+\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\tclassName=\"page-numbers prev\"\n+\t\t\t\t\t\tdata-type=\"question-navx\"\n+\t\t\t\t\t\tonClick={ this.nav( 'prev' ) }\n+\t\t\t\t\t>\n+\t\t\t\t\t\t{ __( 'Prev', 'learnpress' ) }\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t) }\n+\n+\t\t\t\t{ numbers.map( ( number ) => {\n+\t\t\t\t\tnumber = number + 1;\n+\n+\t\t\t\t\tif ( number === args.currentPage ) {\n+\t\t\t\t\t\tdots = true;\n+\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003Cspan key={ `page-number-${ number }` } className=\"page-numbers current\">{ number }\u003C\u002Fspan>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( number \u003C= args.endSize || ( args.currentPage && number >= args.currentPage - args.midSize && number \u003C= args.currentPage + args.midSize ) || number > args.numPages - args.endSize ) {\n+\t\t\t\t\t\tdots = true;\n+\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\t\t\tkey={ `page-number-${ number }` }\n+\t\t\t\t\t\t\t\tclassName=\"page-numbers\"\n+\t\t\t\t\t\t\t\tonClick={ this.moveTo( number ) }\n+\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t{ number }\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else if ( dots ) {\n+\t\t\t\t\t\tdots = false;\n+\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003Cspan key={ `page-number-${ number }` } className=\"page-numbers dots\">&hellip;\u003C\u002Fspan>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn '';\n+\t\t\t\t} ) }\n+\n+\t\t\t\t{ args.prevNext && ! this.isLast() && (\n+\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\tclassName=\"page-numbers next\"\n+\t\t\t\t\t\tdata-type=\"question-navx\"\n+\t\t\t\t\t\tonClick={ this.nav( 'next' ) }\n+\t\t\t\t\t>\n+\t\t\t\t\t\t{ __( 'Next', 'learnpress' ) }\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t) }\n+\t\t\t\u003C\u002Fdiv>\n+\t\t);\n+\t}\n+\n+\trender() {\n+\t\tconst {\n+\t\t\tstatus,\n+\t\t\tquestionNav,\n+\t\t\tisReviewing,\n+\t\t\tshowReview,\n+\t\t\tnumPages,\n+\t\t\tquestion,\n+\t\t\tquestionsPerPage,\n+\t\t\tcanRetry,\n+\t\t\tretakeNumber,\n+\t\t\trequiredPassword,\n+\t\t\tallowRetake,\n+\t\t} = this.props;\n+\n+\t\tconst classNames = [ 'quiz-buttons' ];\n+\n+\t\tif ( status === 'started' || isReviewing ) {\n+\t\t\tclassNames.push( 'align-center' );\n+\t\t}\n+\n+\t\tif ( questionNav === 'questionNav' ) {\n+\t\t\tclassNames.push( 'infinity' );\n+\t\t}\n+\n+\t\tif ( this.isFirst() ) {\n+\t\t\tclassNames.push( 'is-first' );\n+\t\t}\n+\n+\t\tif ( this.isLast() ) {\n+\t\t\tclassNames.push( 'is-last' );\n+\t\t}\n+\n+\t\tconst popupSidebar = document.querySelector( '#popup-sidebar' );\n+\t\tconst quizzApp = document.querySelector( '#learn-press-quiz-app' );\n+\n+\t\tlet styles = '';\n+\n+\t\tif ( status === 'started' || isReviewing ) {\n+\t\t\tstyles = { marginLeft: popupSidebar && popupSidebar.offsetWidth \u002F 2, width: quizzApp && quizzApp.offsetWidth };\n+\t\t} else {\n+\t\t\tstyles = null;\n+\t\t}\n+\t\tlet navPositionClass = ' fixed';\n+\t\tif ( lpQuizSettings.navigationPosition == 'no' ) {\n+\t\t\tnavPositionClass = ' nav-center';\n+\t\t}\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\n+\t\t\t\t\t\u003Cdiv\n+\t\t\t\t\t\tclassName={ `button-left` + ( ( status === 'started' || isReviewing ) ? navPositionClass : '' ) }\n+\t\t\t\t\t\tstyle={ styles }\n+\t\t\t\t\t>\n+\n+\t\t\t\t\t\t{ ( ( status === 'completed' && canRetry ) || -1 !== [ '', 'viewed' ].indexOf( status ) ) && ! isReviewing && ! requiredPassword && (\n+\t\t\t\t\t\t\t\u003Cbutton className=\"lp-button start\" onClick={ this.startQuiz }>\n+\t\t\t\t\t\t\t\t{ ( status === 'completed' ) ? `${ __( 'Retake', 'learnpress' ) } ${ ! allowRetake ? ` ${ retakeNumber ? ` (${ retakeNumber })` : '' }` : '' } ` :\t' ' + __( 'Start', 'learnpress' ) }\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t) }\n+\n+\t\t\t\t\t\t{ ( 'started' === status || isReviewing ) && ( numPages > 1 ) && (\n+\t\t\t\t\t\t\t\u003C>\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"questions-pagination\">\n+\t\t\t\t\t\t\t\t\t{ this.pageNumbers() }\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002F>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t\u003Cdiv className=\"button-right\">\n+\t\t\t\t\t\t{ ( 'started' === status ) && (\n+\t\t\t\t\t\t\t\u003C>\n+\t\t\t\t\t\t\t\t{ ( ( 'infinity' === questionNav || this.isLast() ) && ! isReviewing ) && (\n+\t\t\t\t\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\t\t\t\t\tclassName=\"lp-button submit-quiz\"\n+\t\t\t\t\t\t\t\t\t\tonClick={ this.submit }\n+\t\t\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t\t\t{ __( 'Finish Quiz', 'learnpress' ) }\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\t) }\n+\t\t\t\t\t\t\t\u003C\u002F>\n+\t\t\t\t\t\t) }\n+\n+\t\t\t\t\t\t{ isReviewing && showReview && (\n+\t\t\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\t\t\tclassName=\"lp-button back-quiz\"\n+\t\t\t\t\t\t\t\tonClick={ this.setQuizMode( '' ) }\n+\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t{ __( 'Result', 'learnpress' ) }\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t) }\n+\n+\t\t\t\t\t\t{ 'completed' === status && showReview && ! isReviewing && (\n+\t\t\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\t\t\tclassName=\"lp-button review-quiz\"\n+\t\t\t\t\t\t\t\tonClick={ this.setQuizMode( 'reviewing' ) }\n+\t\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\t{ __( 'Review', 'learnpress' ) }\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t) }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t{ this.props.message && this.props.success !== true && (\n+\t\t\t\t\t\u003Cdiv className=\"learn-press-message error\">\n+\t\t\t\t\t\t{ this.props.message }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t) }\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+\u002F**\n+ * Helper function to check a button should be show or not.\n+ *\n+ * Buttons [hint, check]\n+ *\u002F\n+export const MaybeShowButton = compose(\n+\twithSelect( ( select ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t} = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tstatus: getData( 'status' ),\n+\t\t\tshowCheck: getData( 'instantCheck' ),\n+\t\t\tcheckedQuestions: getData( 'checkedQuestions' ),\n+\t\t\thintedQuestions: getData( 'hintedQuestions' ),\n+\t\t\tquestionsPerPage: getData( 'questionsPerPage' ),\n+\t\t};\n+\t} )\n+)( ( props ) => {\n+\tconst {\n+\t\tshowCheck,\n+\t\tcheckedQuestions,\n+\t\thintedQuestions,\n+\t\tquestion,\n+\t\tstatus,\n+\t\ttype,\n+\t\tButton,\n+\t} = props;\n+\n+\tif ( status !== 'started' ) {\n+\t\treturn false;\n+\t}\n+\n+\tconst theButton = \u003CButton question={ question } \u002F>;\n+\n+\tswitch ( type ) {\n+\tcase 'hint':\n+\n+\t\tif ( ! hintedQuestions ) {\n+\t\t\treturn theButton;\n+\t\t}\n+\n+\t\tif ( ! question.hasHint ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn hintedQuestions.indexOf( question.id ) === -1 && theButton;\n+\n+\tcase 'check':\n+\n+\t\tif ( ! showCheck ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! checkedQuestions ) {\n+\t\t\treturn theButton;\n+\t\t}\n+\n+\t\treturn checkedQuestions.indexOf( question.id ) === -1 && theButton;\n+\t}\n+} );\n+\n+export default compose( [\n+\twithSelect( ( select ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t\tgetCurrentQuestion,\n+\t\t} = select( 'learnpress\u002Fquiz' );\n+\n+\t\tconst data = {\n+\t\t\tid: getData( 'id' ),\n+\t\t\tstatus: getData( 'status' ),\n+\t\t\tquestionIds: getData( 'questionIds' ),\n+\t\t\tquestionNav: getData( 'questionNav' ),\n+\t\t\tisReviewing: getData( 'reviewQuestions' ) && getData( 'mode' ) === 'reviewing',\n+\t\t\tshowReview: getData( 'reviewQuestions' ),\n+\t\t\tshowCheck: getData( 'instantCheck' ),\n+\t\t\tcheckedQuestions: getData( 'checkedQuestions' ),\n+\t\t\thintedQuestions: getData( 'hintedQuestions' ),\n+\t\t\tnumPages: getData( 'numPages' ),\n+\t\t\tpages: getData( 'pages' ),\n+\t\t\tcurrentPage: getData( 'currentPage' ),\n+\t\t\tquestionsPerPage: getData( 'questionsPerPage' ),\n+\t\t\tpageNumbers: getData( 'pageNumbers' ),\n+\t\t\tkeyPressed: getData( 'keyPressed' ),\n+\t\t\tcanRetry: getData( 'retakeCount' ) > 0 && getData( 'retaken' ) \u003C getData( 'retakeCount' ),\n+\t\t\tretakeNumber: getData( 'retakeCount' ) > 0 && getData( 'retaken' ) \u003C getData( 'retakeCount' ) ? getData( 'retakeCount' ) - getData( 'retaken' ) : null,\n+\t\t\tmessage: getData( 'messageResponse' ) || false,\n+\t\t\tsuccess: getData( 'successResponse' ) !== undefined ? getData( 'successResponse' ) : true,\n+\t\t\trequiredPassword: getData( 'requiredPassword' ),\n+\t\t\tallowRetake: getData( 'allowRetake' ),\n+\t\t};\n+\n+\t\tif ( data.questionsPerPage === 1 ) {\n+\t\t\tdata.question = getCurrentQuestion( 'object' );\n+\t\t}\n+\n+\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\tconst retakenCurrent = window.localStorage.getItem( 'quiz_off_retaken_' + lpQuizSettings.id );\n+\n+\t\t\tif ( getData( 'retakeCount' ) > retakenCurrent ) {\n+\t\t\t\tdata.retakeNumber = getData( 'retakeCount' ) - retakenCurrent;\n+\t\t\t\tdata.canRetry = true;\n+\t\t\t} else {\n+\t\t\t\tdata.canRetry = false;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( data.allowRetake ) {\n+\t\t\tdata.canRetry = true;\n+\t\t}\n+\n+\t\treturn data;\n+\t} ),\n+\twithDispatch( ( dispatch, { id } ) => {\n+\t\tconst {\n+\t\t\tstartQuiz,\n+\t\t\tsetCurrentQuestion,\n+\t\t\tsubmitQuiz,\n+\t\t\tsetQuizMode,\n+\t\t\tshowHint,\n+\t\t\tcheckAnswer,\n+\t\t\tsetCurrentPage,\n+\t\t} = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tstartQuiz,\n+\t\t\tsetCurrentQuestion,\n+\t\t\tsetQuizMode,\n+\t\t\tsetCurrentPage,\n+\t\t\tsubmitQuiz( id ) {\n+\t\t\t\tsubmitQuiz( id );\n+\t\t\t},\n+\t\t\tshowHint( id ) {\n+\t\t\t\tshowHint( id );\n+\t\t\t},\n+\t\t\tcheckAnswer( id ) {\n+\t\t\t\tcheckAnswer( id );\n+\t\t\t},\n+\t\t};\n+\t} ),\n+] )( Buttons );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fcontent\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fcontent\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fcontent\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fcontent\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u002F**\r\n- * Quiz Content.\r\n- * Edit: Use React hook.\r\n- *\r\n- * @author nhamdv - ThimPress\r\n- *\u002F\r\n-import { select } from '@wordpress\u002Fdata';\r\n-\r\n-const Content = () => {\r\n-\tconst content = select( 'learnpress\u002Fquiz' ).getData( 'content' );\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv className=\"quiz-content\" dangerouslySetInnerHTML={ { __html: content } } \u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Content;\r\n+\u002F**\n+ * Quiz Content.\n+ * Edit: Use React hook.\n+ *\n+ * @author nhamdv - ThimPress\n+ *\u002F\n+import { select } from '@wordpress\u002Fdata';\n+\n+const Content = () => {\n+\tconst content = select( 'learnpress\u002Fquiz' ).getData( 'content' );\n+\n+\treturn (\n+\t\t\u003Cdiv className=\"quiz-content\" dangerouslySetInnerHTML={ { __html: content } } \u002F>\n+\t);\n+};\n+\n+export default Content;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fduration\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fduration\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fduration\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fduration\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-const formatDuration = ( seconds ) => {\r\n-\tlet d;\r\n-\r\n-\tconst dayInSeconds = 3600 * 24;\r\n-\r\n-\tif ( seconds > dayInSeconds ) {\r\n-\t\td = ( seconds - ( seconds % dayInSeconds ) ) \u002F dayInSeconds;\r\n-\t\tseconds = seconds % dayInSeconds;\r\n-\t} else if ( seconds == dayInSeconds ) {\r\n-\t\treturn '24:00';\r\n-\t}\r\n-\r\n-\tconst x = ( new Date( seconds * 1000 ).toUTCString() ).match( \u002F\\d{2}:\\d{2}:\\d{2}\u002F )[ 0 ].split( ':' );\r\n-\r\n-\tif ( d ) {\r\n-\t\tx[ 0 ] = parseInt( x[ 0 ] ) + ( d * 24 );\r\n-\t}\r\n-\r\n-\tconst html = x.join( ':' );\r\n-\r\n-\treturn html;\r\n-};\r\n-\r\n-export default formatDuration;\r\n+const formatDuration = ( seconds ) => {\n+\tlet d;\n+\n+\tconst dayInSeconds = 3600 * 24;\n+\n+\tif ( seconds > dayInSeconds ) {\n+\t\td = ( seconds - ( seconds % dayInSeconds ) ) \u002F dayInSeconds;\n+\t\tseconds = seconds % dayInSeconds;\n+\t} else if ( seconds == dayInSeconds ) {\n+\t\treturn '24:00';\n+\t}\n+\n+\tconst x = ( new Date( seconds * 1000 ).toUTCString() ).match( \u002F\\d{2}:\\d{2}:\\d{2}\u002F )[ 0 ].split( ':' );\n+\n+\tif ( d ) {\n+\t\tx[ 0 ] = parseInt( x[ 0 ] ) + ( d * 24 );\n+\t}\n+\n+\tconst html = x.join( ':' );\n+\n+\treturn html;\n+};\n+\n+export default formatDuration;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-export { default as Title } from '.\u002Ftitle';\r\n-export { default as Content } from '.\u002Fcontent';\r\n-export { default as Meta } from '.\u002Fmeta';\r\n-export { default as Buttons } from '.\u002Fbuttons';\r\n-export { default as Questions } from '.\u002Fquestions';\r\n-export { default as Attempts } from '.\u002Fattempts';\r\n-export { default as Timer } from '.\u002Ftimer';\r\n-export { default as Result } from '.\u002Fresult';\r\n-export { default as Status } from '.\u002Fstatus';\r\n+export { default as Title } from '.\u002Ftitle';\n+export { default as Content } from '.\u002Fcontent';\n+export { default as Meta } from '.\u002Fmeta';\n+export { default as Buttons } from '.\u002Fbuttons';\n+export { default as Questions } from '.\u002Fquestions';\n+export { default as Attempts } from '.\u002Fattempts';\n+export { default as Timer } from '.\u002Ftimer';\n+export { default as Result } from '.\u002Fresult';\n+export { default as Status } from '.\u002Fstatus';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-\u002F**\r\n- * Quiz Meta.\r\n- * Edit: Use React Hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n- *\u002F\r\n-import { select } from '@wordpress\u002Fdata';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-import { default as formatDuration } from '..\u002Fduration';\r\n-const { Hook } = LP;\r\n-\r\n-const Meta = () => {\r\n-\tconst getData = ( attr ) => {\r\n-\t\treturn select( 'learnpress\u002Fquiz' ).getData( attr );\r\n-\t};\r\n-\r\n-\tconst metaFields = Hook.applyFilters( 'quiz-meta-fields', {\r\n-\t\tduration: {\r\n-\t\t\ttitle: __( 'Duration:', 'learnpress' ),\r\n-\t\t\tname: 'duration',\r\n-\t\t\tcontent: formatDuration( getData( 'duration' ) ) || '--',\r\n-\t\t},\r\n-\t\tpassingGrade: {\r\n-\t\t\ttitle: __( 'Passing grade:', 'learnpress' ),\r\n-\t\t\tname: 'passing-grade',\r\n-\t\t\tcontent: getData( 'passingGrade' ) || '--',\r\n-\t\t},\r\n-\t\tquestionsCount: {\r\n-\t\t\ttitle: __( 'Questions:', 'learnpress' ),\r\n-\t\t\tname: 'questions-count',\r\n-\t\t\tcontent: getData( 'questionIds' ) ? getData( 'questionIds' ).length : 0,\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\treturn (\r\n-\t\tmetaFields && (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cul className=\"quiz-intro\">\r\n-\t\t\t\t\t{ Object.values( metaFields ).map( ( field, i ) => {\r\n-\t\t\t\t\t\tconst id = field.name || i;\r\n-\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003Cli key={ `quiz-intro-field-${ i }` } className={ `quiz-intro-item quiz-intro-item--${ id }` }>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv className=\"quiz-intro-item__title\" dangerouslySetInnerHTML={ { __html: field.title } } \u002F>\r\n-\t\t\t\t\t\t\t\t\u003Cspan className=\"quiz-intro-item__content\" dangerouslySetInnerHTML={ { __html: field.content } } \u002F>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} ) }\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t)\r\n-\t);\r\n-};\r\n-\r\n-export default Meta;\r\n+\u002F**\n+ * Quiz Meta.\n+ * Edit: Use React Hook.\n+ *\n+ * @author Nhamdv - ThimPress\n+ *\u002F\n+import { select } from '@wordpress\u002Fdata';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+import { default as formatDuration } from '..\u002Fduration';\n+const { Hook } = LP;\n+\n+const Meta = () => {\n+\tconst getData = ( attr ) => {\n+\t\treturn select( 'learnpress\u002Fquiz' ).getData( attr );\n+\t};\n+\n+\tconst metaFields = Hook.applyFilters( 'quiz-meta-fields', {\n+\t\tduration: {\n+\t\t\ttitle: __( 'Duration:', 'learnpress' ),\n+\t\t\tname: 'duration',\n+\t\t\tcontent: formatDuration( getData( 'duration' ) ) || '--',\n+\t\t},\n+\t\tpassingGrade: {\n+\t\t\ttitle: __( 'Passing grade:', 'learnpress' ),\n+\t\t\tname: 'passing-grade',\n+\t\t\tcontent: getData( 'passingGrade' ) || '--',\n+\t\t},\n+\t\tquestionsCount: {\n+\t\t\ttitle: __( 'Questions:', 'learnpress' ),\n+\t\t\tname: 'questions-count',\n+\t\t\tcontent: getData( 'questionIds' ) ? getData( 'questionIds' ).length : 0,\n+\t\t},\n+\t} );\n+\n+\treturn (\n+\t\tmetaFields && (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cul className=\"quiz-intro\">\n+\t\t\t\t\t{ Object.values( metaFields ).map( ( field, i ) => {\n+\t\t\t\t\t\tconst id = field.name || i;\n+\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003Cli key={ `quiz-intro-field-${ i }` } className={ `quiz-intro-item quiz-intro-item--${ id }` }>\n+\t\t\t\t\t\t\t\t\u003Cdiv className=\"quiz-intro-item__title\" dangerouslySetInnerHTML={ { __html: field.title } } \u002F>\n+\t\t\t\t\t\t\t\t\u003Cspan className=\"quiz-intro-item__content\" dangerouslySetInnerHTML={ { __html: field.content } } \u002F>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} ) }\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002F>\n+\t\t)\n+\t);\n+};\n+\n+export default Meta;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fbuttons.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fbuttons.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fbuttons.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fbuttons.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-import { default as ButtonHint } from '..\u002Fbuttons\u002Fbutton-hint';\r\n-import { default as ButtonCheck } from '..\u002Fbuttons\u002Fbutton-check';\r\n-import { MaybeShowButton } from '..\u002Fbuttons';\r\n-import { Fragment } from '@wordpress\u002Felement';\r\n-\r\n-const Buttons = function Buttons( props ) {\r\n-\tconst {\r\n-\t\tquestion,\r\n-\t} = props;\r\n-\r\n-\tconst buttons = {\r\n-\t\t'instant-check': () => {\r\n-\t\t\treturn (\r\n-\t\t\t\t\u003CMaybeShowButton\r\n-\t\t\t\t\ttype=\"check\"\r\n-\t\t\t\t\tButton={ ButtonCheck }\r\n-\t\t\t\t\tquestion={ question }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t);\r\n-\t\t},\r\n-\t\thint: () => {\r\n-\t\t\treturn (\r\n-\t\t\t\t\u003CMaybeShowButton\r\n-\t\t\t\t\ttype=\"hint\"\r\n-\t\t\t\t\tButton={ ButtonHint }\r\n-\t\t\t\t\tquestion={ question }\r\n-\t\t\t\t\u002F>\r\n-\t\t\t);\r\n-\t\t},\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003C>\r\n-\t\t\t{ LP.config.questionFooterButtons().map( ( name ) => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003CFragment key={ `button-${ name }` }>\r\n-\t\t\t\t\t\t{ buttons[ name ] && buttons[ name ]() }\r\n-\t\t\t\t\t\u003C\u002FFragment>\r\n-\t\t\t\t);\r\n-\t\t\t} ) }\r\n-\t\t\u003C\u002F>\r\n-\t);\r\n-};\r\n-\r\n-export default Buttons;\r\n+import { default as ButtonHint } from '..\u002Fbuttons\u002Fbutton-hint';\n+import { default as ButtonCheck } from '..\u002Fbuttons\u002Fbutton-check';\n+import { MaybeShowButton } from '..\u002Fbuttons';\n+import { Fragment } from '@wordpress\u002Felement';\n+\n+const Buttons = function Buttons( props ) {\n+\tconst {\n+\t\tquestion,\n+\t} = props;\n+\n+\tconst buttons = {\n+\t\t'instant-check': () => {\n+\t\t\treturn (\n+\t\t\t\t\u003CMaybeShowButton\n+\t\t\t\t\ttype=\"check\"\n+\t\t\t\t\tButton={ ButtonCheck }\n+\t\t\t\t\tquestion={ question }\n+\t\t\t\t\u002F>\n+\t\t\t);\n+\t\t},\n+\t\thint: () => {\n+\t\t\treturn (\n+\t\t\t\t\u003CMaybeShowButton\n+\t\t\t\t\ttype=\"hint\"\n+\t\t\t\t\tButton={ ButtonHint }\n+\t\t\t\t\tquestion={ question }\n+\t\t\t\t\u002F>\n+\t\t\t);\n+\t\t},\n+\t};\n+\n+\treturn (\n+\t\t\u003C>\n+\t\t\t{ LP.config.questionFooterButtons().map( ( name ) => {\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003CFragment key={ `button-${ name }` }>\n+\t\t\t\t\t\t{ buttons[ name ] && buttons[ name ]() }\n+\t\t\t\t\t\u003C\u002FFragment>\n+\t\t\t\t);\n+\t\t\t} ) }\n+\t\t\u003C\u002F>\n+\t);\n+};\n+\n+export default Buttons;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,175 +1,175 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { withSelect, withDispatch } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-import Question from '.\u002Fquestion';\r\n-\r\n-class Questions extends Component {\r\n-\tconstructor( props ) {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tthis.needToTop = false;\r\n-\t\tthis.state = {\r\n-\t\t\tisReviewing: null,\r\n-\t\t\tcurrentPage: 0,\r\n-\t\t\tself: this,\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tstatic getDerivedStateFromProps( props, state ) {\r\n-\t\tconst checkProps = [ 'isReviewing', 'currentPage' ];\r\n-\t\tconst changedProps = {};\r\n-\r\n-\t\tfor ( let i = 0; i \u003C checkProps.length; i++ ) {\r\n-\t\t\tif ( props[ checkProps[ i ] ] !== state[ checkProps[ i ] ] ) {\r\n-\t\t\t\tchangedProps[ checkProps[ i ] ] = props[ checkProps[ i ] ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( Object.values( changedProps ).length ) {\r\n-\t\t\tif ( props.questionsPerPage === 1 ) {\r\n-\t\t\t\tstate.self.needToTop = true;\r\n-\t\t\t}\r\n-\t\t\treturn changedProps;\r\n-\t\t}\r\n-\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\t\u002F\u002F componentWillReceiveProps(nextProps){\r\n-\t\u002F\u002F     const checkProps = ['isReviewing', 'currentPage'];\r\n-\t\u002F\u002F\r\n-\t\u002F\u002F     for(let i = 0; i \u003C checkProps.length; i++){\r\n-\t\u002F\u002F         if(this.props[checkProps[i]] !== nextProps[checkProps[i]]){\r\n-\t\u002F\u002F             this.needToTop = true;\r\n-\t\u002F\u002F             return;\r\n-\t\u002F\u002F         }\r\n-\t\u002F\u002F     }\r\n-\t\u002F\u002F\r\n-\t\u002F\u002F }\r\n-\r\n-\t\u002F\u002F componentWillUpdate() {\r\n-\t\u002F\u002F     this.needToTop = this.state.needToTop;\r\n-\t\u002F\u002F     this.setState({needToTop: false});\r\n-\t\u002F\u002F }\r\n-\r\n-\tcomponentDidUpdate() {\r\n-\t\tif ( this.needToTop ) {\r\n-\t\t\tjQuery( '#popup-content' )\r\n-\t\t\t\t.animate( { scrollTop: 0 } )\r\n-\t\t\t\t.find( '.content-item-scrollable:last' )\r\n-\t\t\t\t.animate( { scrollTop: 0 } );\r\n-\t\t\tthis.needToTop = false;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tstartQuiz = ( event ) => {\r\n-\t\tevent.preventDefault();\r\n-\r\n-\t\tconst {\r\n-\t\t\tstartQuiz,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tstartQuiz();\r\n-\t};\r\n-\r\n-\tisInVisibleRange = ( id, index ) => {\r\n-\t\tconst {\r\n-\t\t\tcurrentPage,\r\n-\t\t\tquestionsPerPage,\r\n-\t\t} = this.props;\r\n-\t\treturn currentPage === Math.ceil( index \u002F questionsPerPage );\r\n-\t};\r\n-\r\n-\tnav = ( event ) => {\r\n-\t\tconst { sendKey } = this.props;\r\n-\r\n-\t\tswitch ( event.keyCode ) {\r\n-\t\tcase 37:\r\n-\t\t\treturn sendKey( 'left' );\r\n-\t\tcase 38:\r\n-\t\t\treturn;\r\n-\t\tcase 39:\r\n-\t\t\treturn sendKey( 'right' );\r\n-\t\tcase 40:\r\n-\t\t\treturn;\r\n-\t\tdefault:\r\n-\t\t\tif ( event.keyCode >= 49 && event.keyCode \u003C= 57 ) {\r\n-\t\t\t\tsendKey( event.keyCode - 48 );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\trender() {\r\n-\t\tconst {\r\n-\t\t\tstatus,\r\n-\t\t\tcurrentQuestion,\r\n-\t\t\tquestions,\r\n-\t\t\tquestionsRendered,\r\n-\t\t\tisReviewing,\r\n-\t\t\tquestionsPerPage,\r\n-\t\t} = this.props;\r\n-\t\tlet isShow = true;\r\n-\r\n-\t\tif ( status === 'completed' && ! isReviewing ) {\r\n-\t\t\tisShow = false;\r\n-\t\t}\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cdiv tabIndex={ 100 } onKeyUp={ this.nav }>\r\n-\t\t\t\t\t\u003Cdiv className=\"quiz-questions\" style={ { display: isShow ? '' : 'none' } }>\r\n-\t\t\t\t\t\t{ questions.map( ( question, index ) => {\r\n-\t\t\t\t\t\t\tconst isCurrent = questionsPerPage ? false : currentQuestion === question.id;\r\n-\t\t\t\t\t\t\tconst isRendered = questionsRendered && questionsRendered.indexOf( question.id ) !== -1;\r\n-\t\t\t\t\t\t\tconst isVisible = this.isInVisibleRange( question.id, index + 1 );\r\n-\t\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\t( isRendered || ! isRendered ) || isVisible\r\n-\t\t\t\t\t\t\t\t\t? \u003CQuestion\r\n-\t\t\t\t\t\t\t\t\t\t\tkey={ `loop-question-${ question.id }` }\r\n-\t\t\t\t\t\t\t\t\t\t\tisCurrent={ isCurrent }\r\n-\t\t\t\t\t\t\t\t\t\t\tisShow={ isVisible }\r\n-\t\t\t\t\t\t\t\t\t\t\tisShowIndex={ questionsPerPage ? index + 1 : false }\r\n-\t\t\t\t\t\t\t\t\t\t\tquestionsPerPage={ questionsPerPage }\r\n-\t\t\t\t\t\t\t\t\t\t\tquestion={ question }\r\n-\t\t\t\t\t\t\t\t\t\u002F> : ''\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t} ) }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose(\r\n-\twithSelect( ( select, a, b ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t\tgetQuestions,\r\n-\t\t} = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tstatus: getData( 'status' ),\r\n-\t\t\tcurrentQuestion: getData( 'currentQuestion' ),\r\n-\t\t\tquestions: getQuestions(),\r\n-\t\t\tquestionsRendered: getData( 'questionsRendered' ),\r\n-\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\r\n-\t\t\tnumPages: getData( 'numPages' ),\r\n-\t\t\tcurrentPage: getData( 'currentPage' ),\r\n-\t\t\tquestionsPerPage: getData( 'questionsPerPage' ) || 1,\r\n-\t\t};\r\n-\t} ),\r\n-\twithDispatch( ( dispatch ) => {\r\n-\t\tconst {\r\n-\t\t\tstartQuiz,\r\n-\t\t\tsendKey,\r\n-\t\t} = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tstartQuiz,\r\n-\t\t\tsendKey,\r\n-\t\t};\r\n-\t} )\r\n-)( Questions );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { withSelect, withDispatch } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+import Question from '.\u002Fquestion';\n+\n+class Questions extends Component {\n+\tconstructor( props ) {\n+\t\tsuper( ...arguments );\n+\n+\t\tthis.needToTop = false;\n+\t\tthis.state = {\n+\t\t\tisReviewing: null,\n+\t\t\tcurrentPage: 0,\n+\t\t\tself: this,\n+\t\t};\n+\t}\n+\n+\tstatic getDerivedStateFromProps( props, state ) {\n+\t\tconst checkProps = [ 'isReviewing', 'currentPage' ];\n+\t\tconst changedProps = {};\n+\n+\t\tfor ( let i = 0; i \u003C checkProps.length; i++ ) {\n+\t\t\tif ( props[ checkProps[ i ] ] !== state[ checkProps[ i ] ] ) {\n+\t\t\t\tchangedProps[ checkProps[ i ] ] = props[ checkProps[ i ] ];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( Object.values( changedProps ).length ) {\n+\t\t\tif ( props.questionsPerPage === 1 ) {\n+\t\t\t\tstate.self.needToTop = true;\n+\t\t\t}\n+\t\t\treturn changedProps;\n+\t\t}\n+\n+\t\treturn null;\n+\t}\n+\n+\t\u002F\u002F componentWillReceiveProps(nextProps){\n+\t\u002F\u002F     const checkProps = ['isReviewing', 'currentPage'];\n+\t\u002F\u002F\n+\t\u002F\u002F     for(let i = 0; i \u003C checkProps.length; i++){\n+\t\u002F\u002F         if(this.props[checkProps[i]] !== nextProps[checkProps[i]]){\n+\t\u002F\u002F             this.needToTop = true;\n+\t\u002F\u002F             return;\n+\t\u002F\u002F         }\n+\t\u002F\u002F     }\n+\t\u002F\u002F\n+\t\u002F\u002F }\n+\n+\t\u002F\u002F componentWillUpdate() {\n+\t\u002F\u002F     this.needToTop = this.state.needToTop;\n+\t\u002F\u002F     this.setState({needToTop: false});\n+\t\u002F\u002F }\n+\n+\tcomponentDidUpdate() {\n+\t\tif ( this.needToTop ) {\n+\t\t\tjQuery( '#popup-content' )\n+\t\t\t\t.animate( { scrollTop: 0 } )\n+\t\t\t\t.find( '.content-item-scrollable:last' )\n+\t\t\t\t.animate( { scrollTop: 0 } );\n+\t\t\tthis.needToTop = false;\n+\t\t}\n+\t}\n+\n+\tstartQuiz = ( event ) => {\n+\t\tevent.preventDefault();\n+\n+\t\tconst {\n+\t\t\tstartQuiz,\n+\t\t} = this.props;\n+\n+\t\tstartQuiz();\n+\t};\n+\n+\tisInVisibleRange = ( id, index ) => {\n+\t\tconst {\n+\t\t\tcurrentPage,\n+\t\t\tquestionsPerPage,\n+\t\t} = this.props;\n+\t\treturn currentPage === Math.ceil( index \u002F questionsPerPage );\n+\t};\n+\n+\tnav = ( event ) => {\n+\t\tconst { sendKey } = this.props;\n+\n+\t\tswitch ( event.keyCode ) {\n+\t\tcase 37:\n+\t\t\treturn sendKey( 'left' );\n+\t\tcase 38:\n+\t\t\treturn;\n+\t\tcase 39:\n+\t\t\treturn sendKey( 'right' );\n+\t\tcase 40:\n+\t\t\treturn;\n+\t\tdefault:\n+\t\t\tif ( event.keyCode >= 49 && event.keyCode \u003C= 57 ) {\n+\t\t\t\tsendKey( event.keyCode - 48 );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\trender() {\n+\t\tconst {\n+\t\t\tstatus,\n+\t\t\tcurrentQuestion,\n+\t\t\tquestions,\n+\t\t\tquestionsRendered,\n+\t\t\tisReviewing,\n+\t\t\tquestionsPerPage,\n+\t\t} = this.props;\n+\t\tlet isShow = true;\n+\n+\t\tif ( status === 'completed' && ! isReviewing ) {\n+\t\t\tisShow = false;\n+\t\t}\n+\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cdiv tabIndex={ 100 } onKeyUp={ this.nav }>\n+\t\t\t\t\t\u003Cdiv className=\"quiz-questions\" style={ { display: isShow ? '' : 'none' } }>\n+\t\t\t\t\t\t{ questions.map( ( question, index ) => {\n+\t\t\t\t\t\t\tconst isCurrent = questionsPerPage ? false : currentQuestion === question.id;\n+\t\t\t\t\t\t\tconst isRendered = questionsRendered && questionsRendered.indexOf( question.id ) !== -1;\n+\t\t\t\t\t\t\tconst isVisible = this.isInVisibleRange( question.id, index + 1 );\n+\t\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\t( isRendered || ! isRendered ) || isVisible\n+\t\t\t\t\t\t\t\t\t? \u003CQuestion\n+\t\t\t\t\t\t\t\t\t\t\tkey={ `loop-question-${ question.id }` }\n+\t\t\t\t\t\t\t\t\t\t\tisCurrent={ isCurrent }\n+\t\t\t\t\t\t\t\t\t\t\tisShow={ isVisible }\n+\t\t\t\t\t\t\t\t\t\t\tisShowIndex={ questionsPerPage ? index + 1 : false }\n+\t\t\t\t\t\t\t\t\t\t\tquestionsPerPage={ questionsPerPage }\n+\t\t\t\t\t\t\t\t\t\t\tquestion={ question }\n+\t\t\t\t\t\t\t\t\t\u002F> : ''\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t} ) }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default compose(\n+\twithSelect( ( select, a, b ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t\tgetQuestions,\n+\t\t} = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tstatus: getData( 'status' ),\n+\t\t\tcurrentQuestion: getData( 'currentQuestion' ),\n+\t\t\tquestions: getQuestions(),\n+\t\t\tquestionsRendered: getData( 'questionsRendered' ),\n+\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\n+\t\t\tnumPages: getData( 'numPages' ),\n+\t\t\tcurrentPage: getData( 'currentPage' ),\n+\t\t\tquestionsPerPage: getData( 'questionsPerPage' ) || 1,\n+\t\t};\n+\t} ),\n+\twithDispatch( ( dispatch ) => {\n+\t\tconst {\n+\t\t\tstartQuiz,\n+\t\t\tsendKey,\n+\t\t} = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tstartQuiz,\n+\t\t\tsendKey,\n+\t\t};\n+\t} )\n+)( Questions );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,245 +1,245 @@\n-import { Component, Fragment } from '@wordpress\u002Felement';\r\n-import { withSelect, withDispatch } from '@wordpress\u002Fdata';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { __, sprintf } from '@wordpress\u002Fi18n';\r\n-import Buttons from '.\u002Fbuttons';\r\n-import { MaybeShowButton } from '..\u002Fbuttons';\r\n-import { default as ButtonCheck } from '..\u002Fbuttons\u002Fbutton-check';\r\n-import { default as ButtonHint } from '..\u002Fbuttons\u002Fbutton-hint';\r\n-\r\n-const $ = window.jQuery;\r\n-const { uniqueId, isArray, isNumber, bind } = lodash;\r\n-\r\n-class Question extends Component {\r\n-\tconstructor() {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tthis.state = {\r\n-\t\t\ttime: null,\r\n-\t\t\tshowHint: false,\r\n-\t\t};\r\n-\r\n-\t\tthis.$wrap = null;\r\n-\t}\r\n-\r\n-\tcomponentDidMount( a ) {\r\n-\t\tconst {\r\n-\t\t\tquestion,\r\n-\t\t\tisCurrent,\r\n-\t\t\tmarkQuestionRendered,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tif ( isCurrent ) {\r\n-\t\t\tmarkQuestionRendered( question.id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! this.state.time ) {\r\n-\t\t\tthis.setState( {\r\n-\t\t\t\ttime: new Date(),\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tLP.Hook.doAction( 'lp-question-compatible-builder' );\r\n-\r\n-\t\tif ( typeof MathJax !== 'undefined' && typeof MathJax.Hub !== 'undefined' ) {\r\n-\t\t\tMathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );\r\n-\t\t}\r\n-\r\n-\t\treturn a;\r\n-\t}\r\n-\r\n-\tsetRef = ( el ) => {\r\n-\t\tthis.$wrap = $( el );\r\n-\t};\r\n-\r\n-\tparseOptions = ( options ) => {\r\n-\t\tif ( options ) {\r\n-\t\t\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\r\n-\t\t\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\r\n-\t\t}\r\n-\r\n-\t\treturn options || [];\r\n-\t};\r\n-\r\n-\tgetWrapperClass = () => {\r\n-\t\tconst { question, answered } = this.props;\r\n-\r\n-\t\tconst classes = [ 'question', 'question-' + question.type ];\r\n-\t\tconst options = this.parseOptions( question.options );\r\n-\r\n-\t\tif ( options.length && options[ 0 ].isTrue !== undefined ) {\r\n-\t\t\tclasses.push( 'question-answered' );\r\n-\t\t}\r\n-\r\n-\t\treturn classes;\r\n-\t};\r\n-\r\n-\tgetEditLink = () => {\r\n-\t\tconst {\r\n-\t\t\tquestion,\r\n-\t\t\teditPermalink,\r\n-\t\t} = this.props;\r\n-\r\n-\t\treturn editPermalink ? editPermalink.replace( \u002Fpost=(.*[0-9])\u002F, `post=${ question.id }` ) : '';\r\n-\t};\r\n-\r\n-\teditPermalink = ( editPermalink ) => {\r\n-\t\treturn sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', editPermalink, __( 'Edit', 'learnpress' ) );\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst {\r\n-\t\t\tquestion,\r\n-\t\t\tisShow,\r\n-\t\t\tisShowIndex,\r\n-\t\t\tisShowHint,\r\n-\t\t\tstatus,\r\n-\t\t} = this.props;\r\n-\r\n-\t\tconst QuestionTypes = LP.questionTypes.default;\r\n-\t\tconst editPermalink = this.getEditLink();\r\n-\r\n-\t\tif ( editPermalink ) {\r\n-\t\t\tjQuery( '#wp-admin-bar-edit-lp_question' ).find( '.ab-item' ).attr( 'href', editPermalink );\r\n-\t\t}\r\n-\r\n-\t\tconst titleParts = {\r\n-\t\t\tindex: () => {\r\n-\t\t\t\treturn ( isShowIndex ? \u003Cspan className=\"question-index\">{ isShowIndex }.\u003C\u002Fspan> : '' );\r\n-\t\t\t},\r\n-\r\n-\t\t\ttitle: () => {\r\n-\t\t\t\treturn ( \u003Cspan dangerouslySetInnerHTML={ { __html: question.title } } \u002F> );\r\n-\t\t\t},\r\n-\r\n-\t\t\thint: () => {\r\n-\t\t\t\treturn \u003CButtonHint question={ question }>\u003C\u002FButtonHint>;\r\n-\t\t\t},\r\n-\r\n-\t\t\t'edit-permalink': () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\teditPermalink && (\r\n-\t\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: this.editPermalink( editPermalink ) } }\r\n-\t\t\t\t\t\t\tclassName=\"edit-link\">\r\n-\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst blocks = {\r\n-\t\t\ttitle: () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003Ch4 className=\"question-title\">\r\n-\t\t\t\t\t\t{ LP.config.questionTitleParts().map( ( name ) => {\r\n-\t\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\t\u003CFragment key={ `title-part-${ name }` }>\r\n-\t\t\t\t\t\t\t\t\t{ titleParts[ name ] && titleParts[ name ]() }\r\n-\t\t\t\t\t\t\t\t\u003C\u002FFragment>\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t} ) }\r\n-\t\t\t\t\t\u003C\u002Fh4>\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\r\n-\t\t\tcontent: () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t\u003Cdiv className=\"question-content\" dangerouslySetInnerHTML={ { __html: question.content } } \u002F>\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\r\n-\t\t\t'answer-options': () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\tthis.$wrap && \u003CQuestionTypes { ...{ ...this.props, $wrap: this.$wrap } } \u002F>\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\r\n-\t\t\texplanation: () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\tquestion.explanation && (\r\n-\t\t\t\t\t\t\u003C>\r\n-\t\t\t\t\t\t\t\u003Cdiv className=\"question-explanation-content\">\r\n-\t\t\t\t\t\t\t\t\u003Cstrong className=\"explanation-title\">{ __( 'Explanation', 'learnpress' ) }:\u003C\u002Fstrong>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv dangerouslySetInnerHTML={ { __html: question.explanation } }>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002F>\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\r\n-\t\t\thint: () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\tquestion.hint && ! question.explanation && question.showHint && (\r\n-\t\t\t\t\t\t\u003C>\r\n-\t\t\t\t\t\t\t\u003Cdiv className=\"question-hint-content\">\r\n-\t\t\t\t\t\t\t\t\u003Cstrong className=\"hint-title\">{ __( 'Hint', 'learnpress' ) }:\u003C\u002Fstrong>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv dangerouslySetInnerHTML={ { __html: question.hint } } \u002F>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002F>\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\r\n-\t\t\tbuttons: () => {\r\n-\t\t\t\treturn (\r\n-\t\t\t\t\t( 'started' === status ) && \u003CButtons question={ question } \u002F>\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst configBlocks = LP.config.questionBlocks();\r\n-\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\t\u003Cdiv className={ this.getWrapperClass().join( ' ' ) }\r\n-\t\t\t\t\tstyle={ { display: isShow ? '' : 'none' } }\r\n-\t\t\t\t\tdata-id={ question.id }\r\n-\t\t\t\t\tref={ this.setRef }>\r\n-\r\n-\t\t\t\t\t{ configBlocks.map( ( name ) => {\r\n-\t\t\t\t\t\treturn (\r\n-\t\t\t\t\t\t\t\u003CFragment key={ `block-${ name }` }>\r\n-\t\t\t\t\t\t\t\t{ blocks[ name ] ? blocks[ name ]() : '' }\r\n-\t\t\t\t\t\t\t\u003C\u002FFragment>\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} ) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose( [\r\n-\twithSelect( ( select, { question: { id } } ) => {\r\n-\t\tconst {\r\n-\t\t\tgetData,\r\n-\t\t\tgetQuestionAnswered,\r\n-\t\t\tgetQuestionMark,\r\n-\t\t} = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tstatus: getData( 'status' ),\r\n-\t\t\tquestions: getData( 'question' ),\r\n-\t\t\tanswered: getQuestionAnswered( id ),\r\n-\t\t\tquestionsRendered: getData( 'questionsRendered' ),\r\n-\t\t\teditPermalink: getData( 'editPermalink' ),\r\n-\t\t\tnumPages: getData( 'numPages' ),\r\n-\t\t\tmark: getQuestionMark( id ) || '',\r\n-\t\t};\r\n-\t} ),\r\n-\twithDispatch( ( dispatch ) => {\r\n-\t\tconst {\r\n-\t\t\tupdateUserQuestionAnswers,\r\n-\t\t\tupdateUserQuestionFibAnswers,\r\n-\t\t\tmarkQuestionRendered,\r\n-\t\t} = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tmarkQuestionRendered,\r\n-\t\t\tupdateUserQuestionAnswers,\r\n-\t\t\tupdateUserQuestionFibAnswers,\r\n-\t\t};\r\n-\t} ),\r\n-] )( Question );\r\n+import { Component, Fragment } from '@wordpress\u002Felement';\n+import { withSelect, withDispatch } from '@wordpress\u002Fdata';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { __, sprintf } from '@wordpress\u002Fi18n';\n+import Buttons from '.\u002Fbuttons';\n+import { MaybeShowButton } from '..\u002Fbuttons';\n+import { default as ButtonCheck } from '..\u002Fbuttons\u002Fbutton-check';\n+import { default as ButtonHint } from '..\u002Fbuttons\u002Fbutton-hint';\n+\n+const $ = window.jQuery;\n+const { uniqueId, isArray, isNumber, bind } = lodash;\n+\n+class Question extends Component {\n+\tconstructor() {\n+\t\tsuper( ...arguments );\n+\n+\t\tthis.state = {\n+\t\t\ttime: null,\n+\t\t\tshowHint: false,\n+\t\t};\n+\n+\t\tthis.$wrap = null;\n+\t}\n+\n+\tcomponentDidMount( a ) {\n+\t\tconst {\n+\t\t\tquestion,\n+\t\t\tisCurrent,\n+\t\t\tmarkQuestionRendered,\n+\t\t} = this.props;\n+\n+\t\tif ( isCurrent ) {\n+\t\t\tmarkQuestionRendered( question.id );\n+\t\t}\n+\n+\t\tif ( ! this.state.time ) {\n+\t\t\tthis.setState( {\n+\t\t\t\ttime: new Date(),\n+\t\t\t} );\n+\t\t}\n+\n+\t\tLP.Hook.doAction( 'lp-question-compatible-builder' );\n+\n+\t\tif ( typeof MathJax !== 'undefined' && typeof MathJax.Hub !== 'undefined' ) {\n+\t\t\tMathJax.Hub.Queue( [ 'Typeset', MathJax.Hub ] );\n+\t\t}\n+\n+\t\treturn a;\n+\t}\n+\n+\tsetRef = ( el ) => {\n+\t\tthis.$wrap = $( el );\n+\t};\n+\n+\tparseOptions = ( options ) => {\n+\t\tif ( options ) {\n+\t\t\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\n+\t\t\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\n+\t\t}\n+\n+\t\treturn options || [];\n+\t};\n+\n+\tgetWrapperClass = () => {\n+\t\tconst { question, answered } = this.props;\n+\n+\t\tconst classes = [ 'question', 'question-' + question.type ];\n+\t\tconst options = this.parseOptions( question.options );\n+\n+\t\tif ( options.length && options[ 0 ].isTrue !== undefined ) {\n+\t\t\tclasses.push( 'question-answered' );\n+\t\t}\n+\n+\t\treturn classes;\n+\t};\n+\n+\tgetEditLink = () => {\n+\t\tconst {\n+\t\t\tquestion,\n+\t\t\teditPermalink,\n+\t\t} = this.props;\n+\n+\t\treturn editPermalink ? editPermalink.replace( \u002Fpost=(.*[0-9])\u002F, `post=${ question.id }` ) : '';\n+\t};\n+\n+\teditPermalink = ( editPermalink ) => {\n+\t\treturn sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', editPermalink, __( 'Edit', 'learnpress' ) );\n+\t};\n+\n+\trender() {\n+\t\tconst {\n+\t\t\tquestion,\n+\t\t\tisShow,\n+\t\t\tisShowIndex,\n+\t\t\tisShowHint,\n+\t\t\tstatus,\n+\t\t} = this.props;\n+\n+\t\tconst QuestionTypes = LP.questionTypes.default;\n+\t\tconst editPermalink = this.getEditLink();\n+\n+\t\tif ( editPermalink ) {\n+\t\t\tjQuery( '#wp-admin-bar-edit-lp_question' ).find( '.ab-item' ).attr( 'href', editPermalink );\n+\t\t}\n+\n+\t\tconst titleParts = {\n+\t\t\tindex: () => {\n+\t\t\t\treturn ( isShowIndex ? \u003Cspan className=\"question-index\">{ isShowIndex }.\u003C\u002Fspan> : '' );\n+\t\t\t},\n+\n+\t\t\ttitle: () => {\n+\t\t\t\treturn ( \u003Cspan dangerouslySetInnerHTML={ { __html: question.title } } \u002F> );\n+\t\t\t},\n+\n+\t\t\thint: () => {\n+\t\t\t\treturn \u003CButtonHint question={ question }>\u003C\u002FButtonHint>;\n+\t\t\t},\n+\n+\t\t\t'edit-permalink': () => {\n+\t\t\t\treturn (\n+\t\t\t\t\teditPermalink && (\n+\t\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\t\tdangerouslySetInnerHTML={ { __html: this.editPermalink( editPermalink ) } }\n+\t\t\t\t\t\t\tclassName=\"edit-link\">\n+\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst blocks = {\n+\t\t\ttitle: () => {\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003Ch4 className=\"question-title\">\n+\t\t\t\t\t\t{ LP.config.questionTitleParts().map( ( name ) => {\n+\t\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\t\u003CFragment key={ `title-part-${ name }` }>\n+\t\t\t\t\t\t\t\t\t{ titleParts[ name ] && titleParts[ name ]() }\n+\t\t\t\t\t\t\t\t\u003C\u002FFragment>\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t} ) }\n+\t\t\t\t\t\u003C\u002Fh4>\n+\t\t\t\t);\n+\t\t\t},\n+\n+\t\t\tcontent: () => {\n+\t\t\t\treturn (\n+\t\t\t\t\t\u003Cdiv className=\"question-content\" dangerouslySetInnerHTML={ { __html: question.content } } \u002F>\n+\t\t\t\t);\n+\t\t\t},\n+\n+\t\t\t'answer-options': () => {\n+\t\t\t\treturn (\n+\t\t\t\t\tthis.$wrap && \u003CQuestionTypes { ...{ ...this.props, $wrap: this.$wrap } } \u002F>\n+\t\t\t\t);\n+\t\t\t},\n+\n+\t\t\texplanation: () => {\n+\t\t\t\treturn (\n+\t\t\t\t\tquestion.explanation && (\n+\t\t\t\t\t\t\u003C>\n+\t\t\t\t\t\t\t\u003Cdiv className=\"question-explanation-content\">\n+\t\t\t\t\t\t\t\t\u003Cstrong className=\"explanation-title\">{ __( 'Explanation', 'learnpress' ) }:\u003C\u002Fstrong>\n+\t\t\t\t\t\t\t\t\u003Cdiv dangerouslySetInnerHTML={ { __html: question.explanation } }>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002F>\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t},\n+\n+\t\t\thint: () => {\n+\t\t\t\treturn (\n+\t\t\t\t\tquestion.hint && ! question.explanation && question.showHint && (\n+\t\t\t\t\t\t\u003C>\n+\t\t\t\t\t\t\t\u003Cdiv className=\"question-hint-content\">\n+\t\t\t\t\t\t\t\t\u003Cstrong className=\"hint-title\">{ __( 'Hint', 'learnpress' ) }:\u003C\u002Fstrong>\n+\t\t\t\t\t\t\t\t\u003Cdiv dangerouslySetInnerHTML={ { __html: question.hint } } \u002F>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002F>\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t},\n+\n+\t\t\tbuttons: () => {\n+\t\t\t\treturn (\n+\t\t\t\t\t( 'started' === status ) && \u003CButtons question={ question } \u002F>\n+\t\t\t\t);\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst configBlocks = LP.config.questionBlocks();\n+\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\t\u003Cdiv className={ this.getWrapperClass().join( ' ' ) }\n+\t\t\t\t\tstyle={ { display: isShow ? '' : 'none' } }\n+\t\t\t\t\tdata-id={ question.id }\n+\t\t\t\t\tref={ this.setRef }>\n+\n+\t\t\t\t\t{ configBlocks.map( ( name ) => {\n+\t\t\t\t\t\treturn (\n+\t\t\t\t\t\t\t\u003CFragment key={ `block-${ name }` }>\n+\t\t\t\t\t\t\t\t{ blocks[ name ] ? blocks[ name ]() : '' }\n+\t\t\t\t\t\t\t\u003C\u002FFragment>\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} ) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default compose( [\n+\twithSelect( ( select, { question: { id } } ) => {\n+\t\tconst {\n+\t\t\tgetData,\n+\t\t\tgetQuestionAnswered,\n+\t\t\tgetQuestionMark,\n+\t\t} = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tstatus: getData( 'status' ),\n+\t\t\tquestions: getData( 'question' ),\n+\t\t\tanswered: getQuestionAnswered( id ),\n+\t\t\tquestionsRendered: getData( 'questionsRendered' ),\n+\t\t\teditPermalink: getData( 'editPermalink' ),\n+\t\t\tnumPages: getData( 'numPages' ),\n+\t\t\tmark: getQuestionMark( id ) || '',\n+\t\t};\n+\t} ),\n+\twithDispatch( ( dispatch ) => {\n+\t\tconst {\n+\t\t\tupdateUserQuestionAnswers,\n+\t\t\tupdateUserQuestionFibAnswers,\n+\t\t\tmarkQuestionRendered,\n+\t\t} = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tmarkQuestionRendered,\n+\t\t\tupdateUserQuestionAnswers,\n+\t\t\tupdateUserQuestionFibAnswers,\n+\t\t};\n+\t} ),\n+] )( Question );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,281 +1,281 @@\n-\u002F**\r\n- * Quizz Result.\r\n- * Edit: Use React hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n- *\u002F\r\n-import { useState, useEffect } from '@wordpress\u002Felement';\r\n-import { useSelect } from '@wordpress\u002Fdata';\r\n-import { __ } from '@wordpress\u002Fi18n';\r\n-\r\n-import { getResponse } from '..\u002F..\u002F..\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress';\r\n-\r\n-const { debounce } = lodash;\r\n-const Result = () => {\r\n-\tconst [ percentage, setPercentage ] = useState( 0 );\r\n-\tconst [ done, setDone ] = useState( false );\r\n-\tconst QuizID = useSelect( ( select ) => {\r\n-\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'id' );\r\n-\t}, [] );\r\n-\tconst results = useSelect( ( select ) => {\r\n-\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'results' );\r\n-\t}, [] );\r\n-\r\n-\tconst passingGrade = useSelect( ( select ) => {\r\n-\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'passingGrade' );\r\n-\t}, [] );\r\n-\r\n-\tconst submitting = useSelect( ( select ) => {\r\n-\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'submitting' );\r\n-\t}, [] );\r\n-\r\n-\tuseEffect( () => {\r\n-\t\tanimate();\r\n-\r\n-\t\tlet graduation = '';\r\n-\t\tif ( results.graduation ) {\r\n-\t\t\tgraduation = results.graduation;\r\n-\t\t} else if ( results.result >= passingGradeValue ) {\r\n-\t\t\tgraduation = 'passed';\r\n-\t\t} else {\r\n-\t\t\tgraduation = 'failed';\r\n-\t\t}\r\n-\r\n-\t\tif ( graduation ) {\r\n-\t\t\tconst ele = document.querySelector( `.course-curriculum .course-item.course-item-${ QuizID }` );\r\n-\r\n-\t\t\tif ( ele ) {\r\n-\t\t\t\tele.classList.remove( 'failed', 'passed' );\r\n-\t\t\t\tele.classList.add( 'has-status', 'status-completed', graduation );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tconst item = [ ...document.querySelectorAll( '#popup-header .items-progress' ) ][ 0 ];\r\n-\t\tif ( item ) {\r\n-\t\t\tconst totalItems = item.dataset.totalItems;\r\n-\r\n-\t\t\tconst itemCompleted = item.querySelector( '.items-completed' );\r\n-\t\t\tconst elProgress = item.querySelector( '.learn-press-progress__active' );\r\n-\r\n-\t\t\tif ( itemCompleted ) {\r\n-\t\t\t\t\u002F\u002F const number = parseInt( itemCompleted.textContent );\r\n-\r\n-\t\t\t\tconst allItemCompleted = document.querySelectorAll( '#popup-sidebar .course-curriculum .course-item__status .completed' );\r\n-\r\n-\t\t\t\titemCompleted.textContent = parseInt( allItemCompleted.length );\r\n-\r\n-\t\t\t\t\u002F\u002F Set progress\r\n-\t\t\t\tconst perCent = parseInt( allItemCompleted.length ) * 100 \u002F parseInt( totalItems );\r\n-\t\t\t\tconst percentSet = 100 - perCent;\r\n-\r\n-\t\t\t\telProgress.style.left = '-' + percentSet + '%';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}, [ results ] );\r\n-\r\n-\tuseEffect( () => {\r\n-\t\tif ( submitting !== undefined ) {\r\n-\t\t\tupdateItemsProgress();\r\n-\t\t}\r\n-\t}, [ submitting ] );\r\n-\r\n-\tconst updateItemsProgress = () => {\r\n-\t\tconst elements = document.querySelectorAll( '.popup-header__inner' );\r\n-\r\n-\t\tif ( elements.length > 0 && elements[ 0 ].querySelectorAll( 'form.form-button-finish-course' ).length === 0 ) {\r\n-\t\t\tgetResponse( elements[ 0 ] );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tconst animate = () => {\r\n-\t\tsetPercentage( 0 );\r\n-\t\tsetDone( false );\r\n-\r\n-\t\tjQuery.easing._customEasing = function( e, f, a, h, g ) {\r\n-\t\t\treturn ( h * Math.sqrt( 1 - ( ( f = ( f \u002F g ) - 1 ) * f ) ) ) + a;\r\n-\t\t};\r\n-\r\n-\t\tdebounce( () => {\r\n-\t\t\tconst $el = jQuery( '\u003Cspan \u002F>' ).css( {\r\n-\t\t\t\twidth: 1,\r\n-\t\t\t\theight: 1,\r\n-\t\t\t} ).appendTo( document.body );\r\n-\r\n-\t\t\t$el.css( 'left', 0 ).animate( { left: results.result }, {\r\n-\t\t\t\tduration: 1500,\r\n-\t\t\t\tstep: ( now, fx ) => {\r\n-\t\t\t\t\tsetPercentage( now );\r\n-\t\t\t\t},\r\n-\t\t\t\tdone: () => {\r\n-\t\t\t\t\tsetDone( true );\r\n-\t\t\t\t\t$el.remove();\r\n-\r\n-\t\t\t\t\tjQuery( '#quizResultGrade' ).css( {\r\n-\t\t\t\t\t\ttransform: 'scale(1.3)',\r\n-\t\t\t\t\t\ttransition: 'all 0.25s',\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tdebounce( () => {\r\n-\t\t\t\t\t\tjQuery( '#quizResultGrade' ).css( {\r\n-\t\t\t\t\t\t\ttransform: 'scale(1)',\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t}, 500 )();\r\n-\t\t\t\t},\r\n-\t\t\t\teasing: '_customEasing',\r\n-\t\t\t} );\r\n-\t\t}, results.result > 0 ? 1000 : 10 )();\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Render HTML elements.\r\n-\t *\r\n-\t *\u002F\r\n-\r\n-\tlet percentResult = percentage;\r\n-\r\n-\tif ( ! Number.isInteger( percentage ) ) {\r\n-\t\tpercentResult = parseFloat( percentage ).toFixed( 2 );\r\n-\t}\r\n-\r\n-\tconst border = 10;\r\n-\tconst width = 200;\r\n-\tconst radius = width \u002F 2;\r\n-\tconst r = ( width - border ) \u002F 2;\r\n-\tconst circumference = r * 2 * Math.PI;\r\n-\tconst offset = circumference - ( percentResult \u002F 100 * circumference );\r\n-\tconst styles = {\r\n-\t\tstrokeDasharray: `${ circumference } ${ circumference }`,\r\n-\t\tstrokeDashoffset: offset,\r\n-\t};\r\n-\tconst passingGradeValue = parseFloat( results.passingGrade || passingGrade );\r\n-\r\n-\tlet graduation = '';\r\n-\tif ( results.graduation ) {\r\n-\t\tgraduation = results.graduation;\r\n-\t} else if ( percentResult >= passingGradeValue ) {\r\n-\t\tgraduation = 'passed';\r\n-\t} else {\r\n-\t\tgraduation = 'failed';\r\n-\t}\r\n-\r\n-\tlet message = '';\r\n-\tif ( results.graduationText ) {\r\n-\t\tmessage = results.graduationText;\r\n-\t} else if ( graduation === 'passed' ) {\r\n-\t\tmessage = __( 'Passed', 'learnpress' );\r\n-\t} else {\r\n-\t\tmessage = __( 'Failed', 'learnpress' );\r\n-\t}\r\n-\r\n-\tconst classNames = [ 'quiz-result', graduation ];\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\r\n-\t\t\t\u003Ch3 className=\"result-heading\">{ __( 'Your Result', 'learnpress' ) }\u003C\u002Fh3>\r\n-\r\n-\t\t\t\u003Cdiv id=\"quizResultGrade\" className=\"result-grade\">\r\n-\t\t\t\t\u003Csvg className=\"circle-progress-bar\" width={ width } height={ width }>\r\n-\t\t\t\t\t\u003Ccircle className=\"circle-progress-bar__circle\" stroke=\"\" strokeWidth={ border } style={ styles }\r\n-\t\t\t\t\t\tfill=\"transparent\" r={ r } cx={ radius } cy={ radius }>\u003C\u002Fcircle>\r\n-\t\t\t\t\u003C\u002Fsvg>\r\n-\r\n-\t\t\t\t\u003Cspan className=\"result-achieved\">{ `${ percentResult }%` }\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan className=\"result-require\">\r\n-\t\t\t\t\t{ passingGradeValue + '%' || '-' }\r\n-\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t{ done && \u003Cp className=\"result-message\">{ message }\u003C\u002Fp> }\r\n-\r\n-\t\t\t\u003Cul className=\"result-statistic\">\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-time-spend\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Time spent', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.timeSpend }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-point\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Points', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.userMark } \u002F { results.mark }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-questions\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Questions', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.questionCount }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-correct\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Correct', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.questionCorrect }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-wrong\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Wrong', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.questionWrong }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-skipped\">\r\n-\t\t\t\t\t\u003Cspan>{ __( 'Skipped', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>{ results.questionEmpty }\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t{ typeof results.minusPoint !== 'undefined' && (\r\n-\t\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-minus\">\r\n-\t\t\t\t\t\t\u003Cspan>{ __( 'Minus points', 'learnpress' ) }\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cp>{ results.minusPoint }\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t) }\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-\r\n-\tfunction timeDifference( earlierDate, laterDate ) {\r\n-\t\tconst oDiff = new Object();\r\n-\r\n-\t\t\u002F\u002F  Calculate Differences\r\n-\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\t\tlet nTotalDiff = laterDate - earlierDate;\r\n-\r\n-\t\toDiff.days = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 \u002F 24 );\r\n-\t\tnTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;\r\n-\r\n-\t\toDiff.hours = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 );\r\n-\t\tnTotalDiff -= oDiff.hours * 1000 * 60 * 60;\r\n-\r\n-\t\toDiff.minutes = Math.floor( nTotalDiff \u002F 1000 \u002F 60 );\r\n-\t\tnTotalDiff -= oDiff.minutes * 1000 * 60;\r\n-\r\n-\t\toDiff.seconds = Math.floor( nTotalDiff \u002F 1000 );\r\n-\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\r\n-\t\t\u002F\u002F  Format Duration\r\n-\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\t\t\u002F\u002F  Format Hours\r\n-\t\tlet hourtext = '00';\r\n-\t\tif ( oDiff.days > 0 ) {\r\n-\t\t\thourtext = String( oDiff.days );\r\n-\t\t}\r\n-\t\tif ( hourtext.length == 1 ) {\r\n-\t\t\thourtext = '0' + hourtext;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F  Format Minutes\r\n-\t\tlet mintext = '00';\r\n-\t\tif ( oDiff.minutes > 0 ) {\r\n-\t\t\tmintext = String( oDiff.minutes );\r\n-\t\t}\r\n-\t\tif ( mintext.length == 1 ) {\r\n-\t\t\tmintext = '0' + mintext;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F  Format Seconds\r\n-\t\tlet sectext = '00';\r\n-\t\tif ( oDiff.seconds > 0 ) {\r\n-\t\t\tsectext = String( oDiff.seconds );\r\n-\t\t}\r\n-\t\tif ( sectext.length == 1 ) {\r\n-\t\t\tsectext = '0' + sectext;\r\n-\t\t}\r\n-\t\t\u002F\u002F  Set Duration\r\n-\t\tconst sDuration = hourtext + ':' + mintext + ':' + sectext;\r\n-\t\toDiff.duration = sDuration;\r\n-\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\r\n-\r\n-\t\treturn oDiff;\r\n-\t}\r\n-};\r\n-\r\n-export default Result;\r\n+\u002F**\n+ * Quizz Result.\n+ * Edit: Use React hook.\n+ *\n+ * @author Nhamdv - ThimPress\n+ *\u002F\n+import { useState, useEffect } from '@wordpress\u002Felement';\n+import { useSelect } from '@wordpress\u002Fdata';\n+import { __ } from '@wordpress\u002Fi18n';\n+\n+import { getResponse } from '..\u002F..\u002F..\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress';\n+\n+const { debounce } = lodash;\n+const Result = () => {\n+\tconst [ percentage, setPercentage ] = useState( 0 );\n+\tconst [ done, setDone ] = useState( false );\n+\tconst QuizID = useSelect( ( select ) => {\n+\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'id' );\n+\t}, [] );\n+\tconst results = useSelect( ( select ) => {\n+\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'results' );\n+\t}, [] );\n+\n+\tconst passingGrade = useSelect( ( select ) => {\n+\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'passingGrade' );\n+\t}, [] );\n+\n+\tconst submitting = useSelect( ( select ) => {\n+\t\treturn select( 'learnpress\u002Fquiz' ).getData( 'submitting' );\n+\t}, [] );\n+\n+\tuseEffect( () => {\n+\t\tanimate();\n+\n+\t\tlet graduation = '';\n+\t\tif ( results.graduation ) {\n+\t\t\tgraduation = results.graduation;\n+\t\t} else if ( results.result >= passingGradeValue ) {\n+\t\t\tgraduation = 'passed';\n+\t\t} else {\n+\t\t\tgraduation = 'failed';\n+\t\t}\n+\n+\t\tif ( graduation ) {\n+\t\t\tconst ele = document.querySelector( `.course-curriculum .course-item.course-item-${ QuizID }` );\n+\n+\t\t\tif ( ele ) {\n+\t\t\t\tele.classList.remove( 'failed', 'passed' );\n+\t\t\t\tele.classList.add( 'has-status', 'status-completed', graduation );\n+\t\t\t}\n+\t\t}\n+\n+\t\tconst item = [ ...document.querySelectorAll( '#popup-header .items-progress' ) ][ 0 ];\n+\t\tif ( item ) {\n+\t\t\tconst totalItems = item.dataset.totalItems;\n+\n+\t\t\tconst itemCompleted = item.querySelector( '.items-completed' );\n+\t\t\tconst elProgress = item.querySelector( '.learn-press-progress__active' );\n+\n+\t\t\tif ( itemCompleted ) {\n+\t\t\t\t\u002F\u002F const number = parseInt( itemCompleted.textContent );\n+\n+\t\t\t\tconst allItemCompleted = document.querySelectorAll( '#popup-sidebar .course-curriculum .course-item__status .completed' );\n+\n+\t\t\t\titemCompleted.textContent = parseInt( allItemCompleted.length );\n+\n+\t\t\t\t\u002F\u002F Set progress\n+\t\t\t\tconst perCent = parseInt( allItemCompleted.length ) * 100 \u002F parseInt( totalItems );\n+\t\t\t\tconst percentSet = 100 - perCent;\n+\n+\t\t\t\telProgress.style.left = '-' + percentSet + '%';\n+\t\t\t}\n+\t\t}\n+\t}, [ results ] );\n+\n+\tuseEffect( () => {\n+\t\tif ( submitting !== undefined ) {\n+\t\t\tupdateItemsProgress();\n+\t\t}\n+\t}, [ submitting ] );\n+\n+\tconst updateItemsProgress = () => {\n+\t\tconst elements = document.querySelectorAll( '.popup-header__inner' );\n+\n+\t\tif ( elements.length > 0 && elements[ 0 ].querySelectorAll( 'form.form-button-finish-course' ).length === 0 ) {\n+\t\t\tgetResponse( elements[ 0 ] );\n+\t\t}\n+\t};\n+\n+\tconst animate = () => {\n+\t\tsetPercentage( 0 );\n+\t\tsetDone( false );\n+\n+\t\tjQuery.easing._customEasing = function( e, f, a, h, g ) {\n+\t\t\treturn ( h * Math.sqrt( 1 - ( ( f = ( f \u002F g ) - 1 ) * f ) ) ) + a;\n+\t\t};\n+\n+\t\tdebounce( () => {\n+\t\t\tconst $el = jQuery( '\u003Cspan \u002F>' ).css( {\n+\t\t\t\twidth: 1,\n+\t\t\t\theight: 1,\n+\t\t\t} ).appendTo( document.body );\n+\n+\t\t\t$el.css( 'left', 0 ).animate( { left: results.result }, {\n+\t\t\t\tduration: 1500,\n+\t\t\t\tstep: ( now, fx ) => {\n+\t\t\t\t\tsetPercentage( now );\n+\t\t\t\t},\n+\t\t\t\tdone: () => {\n+\t\t\t\t\tsetDone( true );\n+\t\t\t\t\t$el.remove();\n+\n+\t\t\t\t\tjQuery( '#quizResultGrade' ).css( {\n+\t\t\t\t\t\ttransform: 'scale(1.3)',\n+\t\t\t\t\t\ttransition: 'all 0.25s',\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tdebounce( () => {\n+\t\t\t\t\t\tjQuery( '#quizResultGrade' ).css( {\n+\t\t\t\t\t\t\ttransform: 'scale(1)',\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t}, 500 )();\n+\t\t\t\t},\n+\t\t\t\teasing: '_customEasing',\n+\t\t\t} );\n+\t\t}, results.result > 0 ? 1000 : 10 )();\n+\t};\n+\n+\t\u002F**\n+\t * Render HTML elements.\n+\t *\n+\t *\u002F\n+\n+\tlet percentResult = percentage;\n+\n+\tif ( ! Number.isInteger( percentage ) ) {\n+\t\tpercentResult = parseFloat( percentage ).toFixed( 2 );\n+\t}\n+\n+\tconst border = 10;\n+\tconst width = 200;\n+\tconst radius = width \u002F 2;\n+\tconst r = ( width - border ) \u002F 2;\n+\tconst circumference = r * 2 * Math.PI;\n+\tconst offset = circumference - ( percentResult \u002F 100 * circumference );\n+\tconst styles = {\n+\t\tstrokeDasharray: `${ circumference } ${ circumference }`,\n+\t\tstrokeDashoffset: offset,\n+\t};\n+\tconst passingGradeValue = parseFloat( results.passingGrade || passingGrade );\n+\n+\tlet graduation = '';\n+\tif ( results.graduation ) {\n+\t\tgraduation = results.graduation;\n+\t} else if ( percentResult >= passingGradeValue ) {\n+\t\tgraduation = 'passed';\n+\t} else {\n+\t\tgraduation = 'failed';\n+\t}\n+\n+\tlet message = '';\n+\tif ( results.graduationText ) {\n+\t\tmessage = results.graduationText;\n+\t} else if ( graduation === 'passed' ) {\n+\t\tmessage = __( 'Passed', 'learnpress' );\n+\t} else {\n+\t\tmessage = __( 'Failed', 'learnpress' );\n+\t}\n+\n+\tconst classNames = [ 'quiz-result', graduation ];\n+\n+\treturn (\n+\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\n+\t\t\t\u003Ch3 className=\"result-heading\">{ __( 'Your Result', 'learnpress' ) }\u003C\u002Fh3>\n+\n+\t\t\t\u003Cdiv id=\"quizResultGrade\" className=\"result-grade\">\n+\t\t\t\t\u003Csvg className=\"circle-progress-bar\" width={ width } height={ width }>\n+\t\t\t\t\t\u003Ccircle className=\"circle-progress-bar__circle\" stroke=\"\" strokeWidth={ border } style={ styles }\n+\t\t\t\t\t\tfill=\"transparent\" r={ r } cx={ radius } cy={ radius }>\u003C\u002Fcircle>\n+\t\t\t\t\u003C\u002Fsvg>\n+\n+\t\t\t\t\u003Cspan className=\"result-achieved\">{ `${ percentResult }%` }\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan className=\"result-require\">\n+\t\t\t\t\t{ passingGradeValue + '%' || '-' }\n+\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t{ done && \u003Cp className=\"result-message\">{ message }\u003C\u002Fp> }\n+\n+\t\t\t\u003Cul className=\"result-statistic\">\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-time-spend\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Time spent', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.timeSpend }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-point\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Points', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.userMark } \u002F { results.mark }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-questions\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Questions', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.questionCount }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-correct\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Correct', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.questionCorrect }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-wrong\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Wrong', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.questionWrong }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-skipped\">\n+\t\t\t\t\t\u003Cspan>{ __( 'Skipped', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>{ results.questionEmpty }\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t{ typeof results.minusPoint !== 'undefined' && (\n+\t\t\t\t\t\u003Cli className=\"result-statistic-field result-questions-minus\">\n+\t\t\t\t\t\t\u003Cspan>{ __( 'Minus points', 'learnpress' ) }\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cp>{ results.minusPoint }\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t) }\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+\n+\tfunction timeDifference( earlierDate, laterDate ) {\n+\t\tconst oDiff = new Object();\n+\n+\t\t\u002F\u002F  Calculate Differences\n+\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\t\tlet nTotalDiff = laterDate - earlierDate;\n+\n+\t\toDiff.days = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 \u002F 24 );\n+\t\tnTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;\n+\n+\t\toDiff.hours = Math.floor( nTotalDiff \u002F 1000 \u002F 60 \u002F 60 );\n+\t\tnTotalDiff -= oDiff.hours * 1000 * 60 * 60;\n+\n+\t\toDiff.minutes = Math.floor( nTotalDiff \u002F 1000 \u002F 60 );\n+\t\tnTotalDiff -= oDiff.minutes * 1000 * 60;\n+\n+\t\toDiff.seconds = Math.floor( nTotalDiff \u002F 1000 );\n+\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\n+\t\t\u002F\u002F  Format Duration\n+\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\t\t\u002F\u002F  Format Hours\n+\t\tlet hourtext = '00';\n+\t\tif ( oDiff.days > 0 ) {\n+\t\t\thourtext = String( oDiff.days );\n+\t\t}\n+\t\tif ( hourtext.length == 1 ) {\n+\t\t\thourtext = '0' + hourtext;\n+\t\t}\n+\n+\t\t\u002F\u002F  Format Minutes\n+\t\tlet mintext = '00';\n+\t\tif ( oDiff.minutes > 0 ) {\n+\t\t\tmintext = String( oDiff.minutes );\n+\t\t}\n+\t\tif ( mintext.length == 1 ) {\n+\t\t\tmintext = '0' + mintext;\n+\t\t}\n+\n+\t\t\u002F\u002F  Format Seconds\n+\t\tlet sectext = '00';\n+\t\tif ( oDiff.seconds > 0 ) {\n+\t\t\tsectext = String( oDiff.seconds );\n+\t\t}\n+\t\tif ( sectext.length == 1 ) {\n+\t\t\tsectext = '0' + sectext;\n+\t\t}\n+\t\t\u002F\u002F  Set Duration\n+\t\tconst sDuration = hourtext + ':' + mintext + ':' + sectext;\n+\t\toDiff.duration = sDuration;\n+\t\t\u002F\u002F  -------------------------------------------------------------------  \u002F\u002F\n+\n+\t\treturn oDiff;\n+\t}\n+};\n+\n+export default Result;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,127 +1,127 @@\n-import { useEffect } from '@wordpress\u002Felement';\r\n-import { dispatch, select } from '@wordpress\u002Fdata';\r\n-import Timer from '..\u002Ftimer';\r\n-import { __, sprintf } from '@wordpress\u002Fi18n';\r\n-\r\n-const $ = jQuery;\r\n-const { debounce } = lodash;\r\n-\r\n-const Status = () => {\r\n-\tconst { submitQuiz } = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\tuseEffect( () => {\r\n-\t\tconst $pc = $( '#popup-content' );\r\n-\r\n-\t\tif ( ! $pc.length ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst $sc = $pc.find( '.content-item-scrollable:eq(1)' );\r\n-\t\tconst $qs = $pc.find( '.quiz-status' );\r\n-\t\tconst pcTop = $qs.offset().top - 92;\r\n-\t\tlet isFixed = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check when status bar is stopped in the top\r\n-\t\t * to add new class into html\r\n-\t\t *\u002F\r\n-\t\t$sc.on( 'scroll', () => {\r\n-\t\t\tif ( $sc.scrollTop() >= pcTop ) {\r\n-\t\t\t\tif ( isFixed ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t\tisFixed = true;\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! isFixed ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t\tisFixed = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isFixed ) {\r\n-\t\t\t\t$pc.addClass( 'fixed-quiz-status' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$pc.removeClass( 'fixed-quiz-status' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}, [] );\r\n-\r\n-\t\u002F**\r\n-\t * Submit question to record results.\r\n-\t *\u002F\r\n-\tconst submit = () => {\r\n-\t\tconst { confirm } = select( 'learnpress\u002Fmodal' );\r\n-\r\n-\t\tif ( 'no' === confirm( __( 'Are you sure to submit the quiz?', 'learnpress' ), submit ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tsubmitQuiz();\r\n-\t};\r\n-\r\n-\tconst getMark = () => {\r\n-\t\tconst answered = select( 'learnpress\u002Fquiz' ).getData( 'answered' );\r\n-\r\n-\t\treturn Object.values( answered ).reduce( ( m, r ) => {\r\n-\t\t\treturn m + r.mark;\r\n-\t\t}, 0 );\r\n-\t};\r\n-\r\n-\tconst { getData, getUserMark } = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\tconst currentPage = getData( 'currentPage' );\r\n-\tconst questionsPerPage = getData( 'questionsPerPage' );\r\n-\tconst questionsCount = getData( 'numberQuestionsToDo' );\r\n-\tconst submitting = getData( 'submitting' );\r\n-\tconst duration = getData( 'duration' );\r\n-\tconst userMark = getUserMark();\r\n-\r\n-\tconst classNames = [ 'quiz-status' ];\r\n-\r\n-\tconst start = ( ( currentPage - 1 ) * questionsPerPage ) + 1;\r\n-\tlet end = start + questionsPerPage - 1;\r\n-\tlet indexHtml = '';\r\n-\r\n-\tend = Math.min( end, questionsCount );\r\n-\r\n-\tif ( submitting ) {\r\n-\t\tclassNames.push( 'submitting' );\r\n-\t}\r\n-\r\n-\tif ( end \u003C questionsCount ) {\r\n-\t\tif ( questionsPerPage > 1 ) {\r\n-\t\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d to %d of %d\u003C\u002Fspan>', 'learnpress' ), start, end, questionsCount );\r\n-\t\t} else {\r\n-\t\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d of %d\u003C\u002Fspan>', 'learnpress' ), start, questionsCount );\r\n-\t\t}\r\n-\t} else {\r\n-\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d of %d\u003C\u002Fspan>', 'learnpress' ), start, end );\r\n-\t}\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003Cdiv className=\"questions-index\" dangerouslySetInnerHTML={ { __html: indexHtml } } \u002F>\r\n-\r\n-\t\t\t\t\u003Cdiv className=\"current-point\">\r\n-\t\t\t\t\t{ sprintf( __( 'Earned Point: %s', 'learnpress' ), userMark ) }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\u003Cdiv className=\"submit-quiz\">\r\n-\t\t\t\t\t\t\u003Cbutton\r\n-\t\t\t\t\t\t\tclassName=\"lp-button\" id=\"button-submit-quiz\"\r\n-\t\t\t\t\t\t\tonClick={ submit }\r\n-\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t{ ! submitting ? __( 'Finish Quiz', 'learnpress' ) : __( 'Submitting…', 'learnpress' ) }\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t{ \u003CTimer \u002F> }\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Status;\r\n+import { useEffect } from '@wordpress\u002Felement';\n+import { dispatch, select } from '@wordpress\u002Fdata';\n+import Timer from '..\u002Ftimer';\n+import { __, sprintf } from '@wordpress\u002Fi18n';\n+\n+const $ = jQuery;\n+const { debounce } = lodash;\n+\n+const Status = () => {\n+\tconst { submitQuiz } = dispatch( 'learnpress\u002Fquiz' );\n+\n+\tuseEffect( () => {\n+\t\tconst $pc = $( '#popup-content' );\n+\n+\t\tif ( ! $pc.length ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst $sc = $pc.find( '.content-item-scrollable:eq(1)' );\n+\t\tconst $qs = $pc.find( '.quiz-status' );\n+\t\tconst pcTop = $qs.offset().top - 92;\n+\t\tlet isFixed = false;\n+\n+\t\t\u002F**\n+\t\t * Check when status bar is stopped in the top\n+\t\t * to add new class into html\n+\t\t *\u002F\n+\t\t$sc.on( 'scroll', () => {\n+\t\t\tif ( $sc.scrollTop() >= pcTop ) {\n+\t\t\t\tif ( isFixed ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t\tisFixed = true;\n+\t\t\t} else {\n+\t\t\t\tif ( ! isFixed ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t\tisFixed = false;\n+\t\t\t}\n+\n+\t\t\tif ( isFixed ) {\n+\t\t\t\t$pc.addClass( 'fixed-quiz-status' );\n+\t\t\t} else {\n+\t\t\t\t$pc.removeClass( 'fixed-quiz-status' );\n+\t\t\t}\n+\t\t} );\n+\t}, [] );\n+\n+\t\u002F**\n+\t * Submit question to record results.\n+\t *\u002F\n+\tconst submit = () => {\n+\t\tconst { confirm } = select( 'learnpress\u002Fmodal' );\n+\n+\t\tif ( 'no' === confirm( __( 'Are you sure to submit the quiz?', 'learnpress' ), submit ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tsubmitQuiz();\n+\t};\n+\n+\tconst getMark = () => {\n+\t\tconst answered = select( 'learnpress\u002Fquiz' ).getData( 'answered' );\n+\n+\t\treturn Object.values( answered ).reduce( ( m, r ) => {\n+\t\t\treturn m + r.mark;\n+\t\t}, 0 );\n+\t};\n+\n+\tconst { getData, getUserMark } = select( 'learnpress\u002Fquiz' );\n+\n+\tconst currentPage = getData( 'currentPage' );\n+\tconst questionsPerPage = getData( 'questionsPerPage' );\n+\tconst questionsCount = getData( 'numberQuestionsToDo' );\n+\tconst submitting = getData( 'submitting' );\n+\tconst duration = getData( 'duration' );\n+\tconst userMark = getUserMark();\n+\n+\tconst classNames = [ 'quiz-status' ];\n+\n+\tconst start = ( ( currentPage - 1 ) * questionsPerPage ) + 1;\n+\tlet end = start + questionsPerPage - 1;\n+\tlet indexHtml = '';\n+\n+\tend = Math.min( end, questionsCount );\n+\n+\tif ( submitting ) {\n+\t\tclassNames.push( 'submitting' );\n+\t}\n+\n+\tif ( end \u003C questionsCount ) {\n+\t\tif ( questionsPerPage > 1 ) {\n+\t\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d to %d of %d\u003C\u002Fspan>', 'learnpress' ), start, end, questionsCount );\n+\t\t} else {\n+\t\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d of %d\u003C\u002Fspan>', 'learnpress' ), start, questionsCount );\n+\t\t}\n+\t} else {\n+\t\tindexHtml = sprintf( __( 'Question \u003Cspan>%d of %d\u003C\u002Fspan>', 'learnpress' ), start, end );\n+\t}\n+\n+\treturn (\n+\t\t\u003Cdiv className={ classNames.join( ' ' ) }>\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003Cdiv className=\"questions-index\" dangerouslySetInnerHTML={ { __html: indexHtml } } \u002F>\n+\n+\t\t\t\t\u003Cdiv className=\"current-point\">\n+\t\t\t\t\t{ sprintf( __( 'Earned Point: %s', 'learnpress' ), userMark ) }\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\u003Cdiv className=\"submit-quiz\">\n+\t\t\t\t\t\t\u003Cbutton\n+\t\t\t\t\t\t\tclassName=\"lp-button\" id=\"button-submit-quiz\"\n+\t\t\t\t\t\t\tonClick={ submit }\n+\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t{ ! submitting ? __( 'Finish Quiz', 'learnpress' ) : __( 'Submitting…', 'learnpress' ) }\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t{ \u003CTimer \u002F> }\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Status;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftimer\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftimer\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftimer\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftimer\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u002F**\r\n- * Edit: React hook.\r\n- *\r\n- * @author Nhamdv - ThimPress\r\n- *\u002F\r\n-import { useEffect, useState } from '@wordpress\u002Felement';\r\n-import { select, dispatch } from '@wordpress\u002Fdata';\r\n-\r\n-const Timer = () => {\r\n-\tconst { getData } = select( 'learnpress\u002Fquiz' );\r\n-\tconst { submitQuiz } = dispatch( 'learnpress\u002Fquiz' );\r\n-\tlet totalTime = getData( 'totalTime' );\r\n-\tconst durationTime = getData( 'duration' );\r\n-\tconst timeSpendG = getData( 'timeSpend' );\r\n-\tconst [ seconds, setSeconds ] = useState( totalTime );\r\n-\tlet [ timeSpend, setTimeSpend ] = useState( timeSpendG );\r\n-\r\n-\tuseEffect( () => {\r\n-\t\tconst myInterval = setInterval( () => {\r\n-\t\t\tif ( durationTime > 0 ) {\r\n-\t\t\t\tlet remainSeconds = seconds;\r\n-\t\t\t\tremainSeconds -= 1;\r\n-\r\n-\t\t\t\tremainSeconds = wp.hooks.applyFilters( 'js-lp-quiz-remaining_time', remainSeconds, durationTime );\r\n-\r\n-\t\t\t\tif ( remainSeconds > 0 ) {\r\n-\t\t\t\t\tsetSeconds( remainSeconds );\r\n-\t\t\t\t\ttimeSpend++;\r\n-\t\t\t\t\tsetTimeSpend( durationTime - remainSeconds );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tclearInterval( myInterval );\r\n-\t\t\t\t\tsubmitQuiz();\r\n-\t\t\t\t}\r\n-\t\t\t} else { \u002F\u002F Apply when set duration = 0\r\n-\t\t\t\ttimeSpend++;\r\n-\t\t\t\tsetTimeSpend( timeSpend );\r\n-\t\t\t\tsetSeconds( timeSpend );\r\n-\t\t\t}\r\n-\t\t}, 1000 );\r\n-\r\n-\t\treturn () => clearInterval( myInterval );\r\n-\t}, [ seconds, timeSpend ] );\r\n-\r\n-\tconst formatTime = ( separator = ':' ) => {\r\n-\t\tconst t = [];\r\n-\t\tlet m;\r\n-\r\n-\t\tif ( timeSpendG ) {\r\n-\t\t\ttotalTime = timeSpendG;\r\n-\t\t}\r\n-\r\n-\t\tif ( totalTime \u003C 3600 ) {\r\n-\t\t\tt.push( ( seconds - ( seconds % 60 ) ) \u002F 60 );\r\n-\t\t\tt.push( seconds % 60 );\r\n-\t\t} else if ( totalTime ) {\r\n-\t\t\tt.push( ( seconds - ( seconds % 3600 ) ) \u002F 3600 );\r\n-\t\t\tm = seconds % 3600;\r\n-\t\t\tt.push( ( m - ( m % 60 ) ) \u002F 60 );\r\n-\t\t\tt.push( m % 60 );\r\n-\t\t}\r\n-\r\n-\t\treturn t.map( ( a ) => {\r\n-\t\t\treturn a \u003C 10 ? `0${ a }` : a;\r\n-\t\t} ).join( separator );\r\n-\t};\r\n-\r\n-\treturn (\r\n-\t\t\u003Cdiv className=\"countdown\">\r\n-\t\t\t\u003Ci className=\"lp-icon-stopwatch\">\u003C\u002Fi>\r\n-\t\t\t\u003Cspan>{ formatTime() }\u003C\u002Fspan>\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"lp-quiz-time-spend\" value={ timeSpend } \u002F>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t);\r\n-};\r\n-\r\n-export default Timer;\r\n+\u002F**\n+ * Edit: React hook.\n+ *\n+ * @author Nhamdv - ThimPress\n+ *\u002F\n+import { useEffect, useState } from '@wordpress\u002Felement';\n+import { select, dispatch } from '@wordpress\u002Fdata';\n+\n+const Timer = () => {\n+\tconst { getData } = select( 'learnpress\u002Fquiz' );\n+\tconst { submitQuiz } = dispatch( 'learnpress\u002Fquiz' );\n+\tlet totalTime = getData( 'totalTime' );\n+\tconst durationTime = getData( 'duration' );\n+\tconst timeSpendG = getData( 'timeSpend' );\n+\tconst [ seconds, setSeconds ] = useState( totalTime );\n+\tlet [ timeSpend, setTimeSpend ] = useState( timeSpendG );\n+\n+\tuseEffect( () => {\n+\t\tconst myInterval = setInterval( () => {\n+\t\t\tif ( durationTime > 0 ) {\n+\t\t\t\tlet remainSeconds = seconds;\n+\t\t\t\tremainSeconds -= 1;\n+\n+\t\t\t\tremainSeconds = wp.hooks.applyFilters( 'js-lp-quiz-remaining_time', remainSeconds, durationTime );\n+\n+\t\t\t\tif ( remainSeconds > 0 ) {\n+\t\t\t\t\tsetSeconds( remainSeconds );\n+\t\t\t\t\ttimeSpend++;\n+\t\t\t\t\tsetTimeSpend( durationTime - remainSeconds );\n+\t\t\t\t} else {\n+\t\t\t\t\tclearInterval( myInterval );\n+\t\t\t\t\tsubmitQuiz();\n+\t\t\t\t}\n+\t\t\t} else { \u002F\u002F Apply when set duration = 0\n+\t\t\t\ttimeSpend++;\n+\t\t\t\tsetTimeSpend( timeSpend );\n+\t\t\t\tsetSeconds( timeSpend );\n+\t\t\t}\n+\t\t}, 1000 );\n+\n+\t\treturn () => clearInterval( myInterval );\n+\t}, [ seconds, timeSpend ] );\n+\n+\tconst formatTime = ( separator = ':' ) => {\n+\t\tconst t = [];\n+\t\tlet m;\n+\n+\t\tif ( timeSpendG ) {\n+\t\t\ttotalTime = timeSpendG;\n+\t\t}\n+\n+\t\tif ( totalTime \u003C 3600 ) {\n+\t\t\tt.push( ( seconds - ( seconds % 60 ) ) \u002F 60 );\n+\t\t\tt.push( seconds % 60 );\n+\t\t} else if ( totalTime ) {\n+\t\t\tt.push( ( seconds - ( seconds % 3600 ) ) \u002F 3600 );\n+\t\t\tm = seconds % 3600;\n+\t\t\tt.push( ( m - ( m % 60 ) ) \u002F 60 );\n+\t\t\tt.push( m % 60 );\n+\t\t}\n+\n+\t\treturn t.map( ( a ) => {\n+\t\t\treturn a \u003C 10 ? `0${ a }` : a;\n+\t\t} ).join( separator );\n+\t};\n+\n+\treturn (\n+\t\t\u003Cdiv className=\"countdown\">\n+\t\t\t\u003Ci className=\"lp-icon-stopwatch\">\u003C\u002Fi>\n+\t\t\t\u003Cspan>{ formatTime() }\u003C\u002Fspan>\n+\t\t\t\u003Cinput type=\"hidden\" name=\"lp-quiz-time-spend\" value={ timeSpend } \u002F>\n+\t\t\u003C\u002Fdiv>\n+\t);\n+};\n+\n+export default Timer;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftitle\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftitle\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftitle\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Ftitle\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-const Title = () => {\r\n-\treturn \u003Ch3>The title\u003C\u002Fh3>;\r\n-};\r\n-\r\n-export default Title;\r\n+\n+const Title = () => {\n+\treturn \u003Ch3>The title\u003C\u002Fh3>;\n+};\n+\n+export default Title;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,112 +1,112 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import { compose } from '@wordpress\u002Fcompose';\r\n-import { withDispatch, withSelect } from '@wordpress\u002Fdata';\r\n-import { Content, Meta, Buttons, Questions, Attempts, Result, Status } from '.\u002Fcomponents';\r\n-\r\n-import store from '.\u002Fstore';\r\n-\r\n-const { chunk } = lodash;\r\n-class Quiz extends Component {\r\n-\tconstructor( props ) {\r\n-\t\tsuper( ...arguments );\r\n-\r\n-\t\tthis.state = {\r\n-\t\t\tcurrentPage: 1,\r\n-\t\t\tnumPages: 0,\r\n-\t\t\tpages: [],\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tcomponentDidMount() {\r\n-\t\tconst { settings, setQuizData } = this.props;\r\n-\r\n-\t\tconst { question_ids, questions_per_page } = settings;\r\n-\r\n-\t\tconst chunks = chunk( question_ids, questions_per_page );\r\n-\r\n-\t\tsettings.currentPage = 1;\r\n-\t\tsettings.numPages = chunks.length;\r\n-\t\tsettings.pages = chunks;\r\n-\r\n-\t\tconst answered = settings.id ? localStorage.getItem( `LP_Quiz_${ settings.id }_Answered` ) : false;\r\n-\r\n-\t\tif ( answered ) {\r\n-\t\t\tsettings.answered = JSON.parse( answered );\r\n-\t\t}\r\n-\r\n-\t\tsetQuizData( settings );\r\n-\t}\r\n-\r\n-\tcomponentDidUpdate( prevProps, prevState, snapshot ) {\r\n-\t\tconst { status } = prevProps;\r\n-\t\tconst elQuizContent = document.querySelector( '.quiz-content' );\r\n-\r\n-\t\tif ( status !== undefined && elQuizContent ) {\r\n-\t\t\telQuizContent.style.display = 'none';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tstartQuiz = ( event ) => {\r\n-\t\tthis.props.startQuiz();\r\n-\t};\r\n-\r\n-\trender() {\r\n-\t\tconst { status, isReviewing, answered } = this.props;\r\n-\r\n-\t\twp.hooks.doAction( 'lp-js-quiz-answer', answered, status );\r\n-\r\n-\t\tconst isA =\r\n-\t\t\t-1 !== [ '', 'completed', 'viewed' ].indexOf( status ) || ! status;\r\n-\t\tconst notStarted =\r\n-\t\t\t-1 !== [ '', 'viewed', undefined ].indexOf( status ) || ! status;\r\n-\r\n-\t\t\u002F\u002F Just render content if status !== undefined (meant all data loaded)\r\n-\t\treturn (\r\n-\t\t\tundefined !== status && (\r\n-\t\t\t\t\u003C>\r\n-\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t{ ! isReviewing && 'completed' === status && (\r\n-\t\t\t\t\t\t\t\u003CResult \u002F>\r\n-\t\t\t\t\t\t) }\r\n-\r\n-\t\t\t\t\t\t{ ! isReviewing && notStarted && \u003CMeta \u002F> }\r\n-\r\n-\t\t\t\t\t\t{ 'started' === status && \u003CStatus \u002F> }\r\n-\r\n-\t\t\t\t\t\t{ ( -1 !== [ 'completed', 'started' ].indexOf( status ) ||\r\n-\t\t\t\t\t\t\t\tisReviewing ) && \u003CQuestions \u002F> }\r\n-\r\n-\t\t\t\t\t\t\u003CButtons \u002F>\r\n-\r\n-\t\t\t\t\t\t{ isA && ! isReviewing && \u003CAttempts \u002F> }\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002F>\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default compose( [\r\n-\twithSelect( ( select ) => {\r\n-\t\tconst { getQuestions, getData } = select( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tquestions: getQuestions(),\r\n-\t\t\tstatus: getData( 'status' ),\r\n-\t\t\tstore: getData(),\r\n-\t\t\tanswered: getData( 'answered' ),\r\n-\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\r\n-\t\t\tquestionIds: getData( 'questionIds' ),\r\n-\t\t\tcheckCount: getData( 'instantCheck' ),\r\n-\t\t\tquestionsPerPage: getData( 'questionsPerPage' ) || 1,\r\n-\t\t};\r\n-\t} ),\r\n-\twithDispatch( ( dispatch ) => {\r\n-\t\tconst { setQuizData, startQuiz } = dispatch( 'learnpress\u002Fquiz' );\r\n-\r\n-\t\treturn {\r\n-\t\t\tsetQuizData,\r\n-\t\t\tstartQuiz,\r\n-\t\t};\r\n-\t} ),\r\n-] )( Quiz );\r\n+import { Component } from '@wordpress\u002Felement';\n+import { compose } from '@wordpress\u002Fcompose';\n+import { withDispatch, withSelect } from '@wordpress\u002Fdata';\n+import { Content, Meta, Buttons, Questions, Attempts, Result, Status } from '.\u002Fcomponents';\n+\n+import store from '.\u002Fstore';\n+\n+const { chunk } = lodash;\n+class Quiz extends Component {\n+\tconstructor( props ) {\n+\t\tsuper( ...arguments );\n+\n+\t\tthis.state = {\n+\t\t\tcurrentPage: 1,\n+\t\t\tnumPages: 0,\n+\t\t\tpages: [],\n+\t\t};\n+\t}\n+\n+\tcomponentDidMount() {\n+\t\tconst { settings, setQuizData } = this.props;\n+\n+\t\tconst { question_ids, questions_per_page } = settings;\n+\n+\t\tconst chunks = chunk( question_ids, questions_per_page );\n+\n+\t\tsettings.currentPage = 1;\n+\t\tsettings.numPages = chunks.length;\n+\t\tsettings.pages = chunks;\n+\n+\t\tconst answered = settings.id ? localStorage.getItem( `LP_Quiz_${ settings.id }_Answered` ) : false;\n+\n+\t\tif ( answered ) {\n+\t\t\tsettings.answered = JSON.parse( answered );\n+\t\t}\n+\n+\t\tsetQuizData( settings );\n+\t}\n+\n+\tcomponentDidUpdate( prevProps, prevState, snapshot ) {\n+\t\tconst { status } = prevProps;\n+\t\tconst elQuizContent = document.querySelector( '.quiz-content' );\n+\n+\t\tif ( status !== undefined && elQuizContent ) {\n+\t\t\telQuizContent.style.display = 'none';\n+\t\t}\n+\t}\n+\n+\tstartQuiz = ( event ) => {\n+\t\tthis.props.startQuiz();\n+\t};\n+\n+\trender() {\n+\t\tconst { status, isReviewing, answered } = this.props;\n+\n+\t\twp.hooks.doAction( 'lp-js-quiz-answer', answered, status );\n+\n+\t\tconst isA =\n+\t\t\t-1 !== [ '', 'completed', 'viewed' ].indexOf( status ) || ! status;\n+\t\tconst notStarted =\n+\t\t\t-1 !== [ '', 'viewed', undefined ].indexOf( status ) || ! status;\n+\n+\t\t\u002F\u002F Just render content if status !== undefined (meant all data loaded)\n+\t\treturn (\n+\t\t\tundefined !== status && (\n+\t\t\t\t\u003C>\n+\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t{ ! isReviewing && 'completed' === status && (\n+\t\t\t\t\t\t\t\u003CResult \u002F>\n+\t\t\t\t\t\t) }\n+\n+\t\t\t\t\t\t{ ! isReviewing && notStarted && \u003CMeta \u002F> }\n+\n+\t\t\t\t\t\t{ 'started' === status && \u003CStatus \u002F> }\n+\n+\t\t\t\t\t\t{ ( -1 !== [ 'completed', 'started' ].indexOf( status ) ||\n+\t\t\t\t\t\t\t\tisReviewing ) && \u003CQuestions \u002F> }\n+\n+\t\t\t\t\t\t\u003CButtons \u002F>\n+\n+\t\t\t\t\t\t{ isA && ! isReviewing && \u003CAttempts \u002F> }\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002F>\n+\t\t\t)\n+\t\t);\n+\t}\n+}\n+\n+export default compose( [\n+\twithSelect( ( select ) => {\n+\t\tconst { getQuestions, getData } = select( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tquestions: getQuestions(),\n+\t\t\tstatus: getData( 'status' ),\n+\t\t\tstore: getData(),\n+\t\t\tanswered: getData( 'answered' ),\n+\t\t\tisReviewing: getData( 'mode' ) === 'reviewing',\n+\t\t\tquestionIds: getData( 'questionIds' ),\n+\t\t\tcheckCount: getData( 'instantCheck' ),\n+\t\t\tquestionsPerPage: getData( 'questionsPerPage' ) || 1,\n+\t\t};\n+\t} ),\n+\twithDispatch( ( dispatch ) => {\n+\t\tconst { setQuizData, startQuiz } = dispatch( 'learnpress\u002Fquiz' );\n+\n+\t\treturn {\n+\t\t\tsetQuizData,\n+\t\t\tstartQuiz,\n+\t\t};\n+\t} ),\n+] )( Quiz );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Factions.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Factions.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Factions.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Factions.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,365 +1,365 @@\n-import { dispatch, select, apiFetch } from '@learnpress\u002Fdata-controls';\r\n-import { select as wpSelect, dispatch as wpDispatch } from '@wordpress\u002Fdata';\r\n-\r\n-function _dispatch() {\r\n-\tconst args = [].slice.call( arguments, 2 );\r\n-\tconst d = wpDispatch( arguments[ 0 ] );\r\n-\tconst f = arguments[ 1 ];\r\n-\td[ f ]( ...args );\r\n-}\r\n-\r\n-const { camelCaseDashObjectKeys, Hook } = LP;\r\n-\u002F**\r\n- * Set user data for app.\r\n- *\r\n- * @param key\r\n- * @param data\r\n- *\u002F\r\n-export function setQuizData( key, data ) {\r\n-\tif ( typeof key === 'string' ) {\r\n-\t\tdata = { [ key ]: data };\r\n-\t} else {\r\n-\t\tdata = key;\r\n-\t}\r\n-\r\n-\treturn {\r\n-\t\ttype: 'SET_QUIZ_DATA',\r\n-\t\tdata: camelCaseDashObjectKeys( data ),\r\n-\t};\r\n-}\r\n-\r\n-\u002F**\r\n- * Set question will display.\r\n- *\r\n- * @param questionId\r\n- *\u002F\r\n-export function setCurrentQuestion( questionId ) {\r\n-\treturn {\r\n-\t\ttype: 'SET_CURRENT_QUESTION',\r\n-\t\tquestionId,\r\n-\t};\r\n-}\r\n-\r\n-export function setCurrentPage( currentPage ) {\r\n-\treturn {\r\n-\t\ttype: 'SET_CURRENT_PAGE',\r\n-\t\tcurrentPage,\r\n-\t};\r\n-}\r\n-\r\n-export function __requestBeforeStartQuiz( quizId, courseId, userId ) {\r\n-\treturn {\r\n-\t\ttype: 'BEFORE_START_QUIZ',\r\n-\t};\r\n-}\r\n-\r\n-export function __requestStartQuizSuccess( results, quizId, courseId, userId ) {\r\n-\tHook.doAction( 'quiz-started', results, quizId, courseId, userId );\r\n-\treturn {\r\n-\t\ttype: 'START_QUIZ_SUCCESS',\r\n-\t\tquizId,\r\n-\t\tcourseId,\r\n-\t\tuserId,\r\n-\t\tresults,\r\n-\t};\r\n-}\r\n-\r\n-\u002F**\r\n- * Request to api for starting a quiz.\r\n- *\u002F\r\n-const startQuiz = function*() {\r\n-\tconst { itemId, courseId } = wpSelect( 'learnpress\u002Fquiz' ).getDefaultRestArgs();\r\n-\r\n-\tconst doStart = Hook.applyFilters( 'before-start-quiz', true, itemId, courseId );\r\n-\r\n-\tif ( true !== doStart ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tlet response = yield apiFetch( {\r\n-\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fstart-quiz',\r\n-\t\tmethod: 'POST',\r\n-\t\tdata: {\r\n-\t\t\titem_id: itemId,\r\n-\t\t\tcourse_id: courseId,\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tconst btnStart = document.querySelector( '.lp-button.start' );\r\n-\r\n-\tif ( response.status !== 'error' ) {\r\n-\t\tresponse = Hook.applyFilters( 'request-start-quiz-response', response, itemId, courseId );\r\n-\t\tconst { results } = response;\r\n-\t\tconst { duration, status, question_ids, questions } = results;\r\n-\r\n-\t\t\u002F\u002F No require enroll\r\n-\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\r\n-\t\t\twindow.localStorage.removeItem( keyQuizOff );\r\n-\t\t\tconst quizDataOff = {\r\n-\t\t\t\tendTime: ( Date.now() + ( duration * 1000 ) ),\r\n-\t\t\t\tstatus,\r\n-\t\t\t\tquestion_ids,\r\n-\t\t\t\tquestions,\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\r\n-\r\n-\t\t\t\u002F\u002F Set Retake quiz\r\n-\t\t\tconst keyQuizOffRetaken = 'quiz_off_retaken_' + lpQuizSettings.id;\r\n-\t\t\tlet quizOffRetaken = window.localStorage.getItem( keyQuizOffRetaken );\r\n-\r\n-\t\t\tif ( null === quizOffRetaken ) {\r\n-\t\t\t\tquizOffRetaken = 0;\r\n-\t\t\t} else {\r\n-\t\t\t\tquizOffRetaken++;\r\n-\t\t\t}\r\n-\r\n-\t\t\twindow.localStorage.setItem( keyQuizOffRetaken, quizOffRetaken );\r\n-\t\t\t\u002F\u002F End\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Reload when start\u002Fretake quiz\r\n-\t\twindow.localStorage.removeItem( 'LP' );\r\n-\t\twindow.location.href = response.redirect_url;\r\n-\t\t\u002F\u002Fwindow.location.reload();\r\n-\r\n-\t\t\u002F\u002Fyield _dispatch( 'learnpress\u002Fquiz', '__requestStartQuizSuccess', camelCaseDashObjectKeys( response ), itemId, courseId );\r\n-\t} else {\r\n-\t\tconst elButtons = document.querySelector( '.quiz-buttons' );\r\n-\t\tconst message = `\u003Cdiv class=\"learn-press-message error\">${ response.message }\u003C\u002Fdiv>`;\r\n-\t\telButtons.insertAdjacentHTML( 'afterend', message );\r\n-\t\tbtnStart.classList.remove( 'loading' );\r\n-\t}\r\n-};\r\n-\r\n-export { startQuiz };\r\n-\r\n-export function __requestSubmitQuiz() {\r\n-\treturn {\r\n-\t\ttype: 'SUBMIT_QUIZ',\r\n-\t};\r\n-}\r\n-\r\n-export function __requestSubmitQuizSuccess( results, quizId, courseId ) {\r\n-\tHook.doAction( 'quiz-submitted', results, quizId, courseId );\r\n-\r\n-\treturn {\r\n-\t\ttype: 'SUBMIT_QUIZ_SUCCESS',\r\n-\t\tresults,\r\n-\t};\r\n-}\r\n-\r\n-export function* submitQuiz() {\r\n-\tconst {\r\n-\t\tgetDefaultRestArgs,\r\n-\t\tgetQuestionsSelectedAnswers,\r\n-\t} = wpSelect( 'learnpress\u002Fquiz' );\r\n-\r\n-\tconst {\r\n-\t\titemId,\r\n-\t\tcourseId,\r\n-\t} = getDefaultRestArgs();\r\n-\r\n-\tconst doSubmit = Hook.applyFilters( 'before-submit-quiz', true );\r\n-\r\n-\tif ( true !== doSubmit ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst answered = getQuestionsSelectedAnswers();\r\n-\r\n-\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\tconst keyQuizOff = `quiz_off_${ lpQuizSettings.id }`;\r\n-\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\r\n-\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\r\n-\t\tconst keyAnswer = `LP_Quiz_${ itemId }_Answered`;\r\n-\t\tconst answerDataStr = localStorage.getItem( keyAnswer );\r\n-\r\n-\t\tif ( null !== answerDataStr ) {\r\n-\t\t\tconst data = JSON.parse( answerDataStr );\r\n-\r\n-\t\t\tfor ( const [ k, v ] of Object.entries( data ) ) {\r\n-\t\t\t\tanswered[ k ] = v.answered;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Added questions not answered\r\n-\t\tquizDataOff.question_ids.forEach( ( question_id ) => {\r\n-\t\t\tif ( ! answered[ question_id ] ) {\r\n-\t\t\t\tanswered[ question_id ] = '';\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Get time spend did quiz - tungnx\r\n-\tlet timeSpend = 0;\r\n-\tconst elTimeSpend = document.querySelector( 'input[name=lp-quiz-time-spend]' );\r\n-\r\n-\tif ( elTimeSpend ) {\r\n-\t\ttimeSpend = elTimeSpend.value;\r\n-\t}\r\n-\t\u002F\u002F End\r\n-\r\n-\tlet response = yield apiFetch( {\r\n-\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fsubmit-quiz',\r\n-\t\tmethod: 'POST',\r\n-\t\tdata: {\r\n-\t\t\titem_id: itemId,\r\n-\t\t\tcourse_id: courseId,\r\n-\t\t\tanswered,\r\n-\t\t\ttime_spend: timeSpend,\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tresponse = Hook.applyFilters( 'request-submit-quiz-response', response, itemId, courseId );\r\n-\r\n-\tif ( response.status === 'success' ) {\r\n-\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\r\n-\t\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\r\n-\t\t\tif ( null !== quizDataOffStr ) {\r\n-\t\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\r\n-\r\n-\t\t\t\tquizDataOff.status = response.results.status;\r\n-\t\t\t\tquizDataOff.results = response.results.results;\r\n-\r\n-\t\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\r\n-\t\t\t\twindow.localStorage.removeItem( 'LP_Quiz_' + lpQuizSettings.id + '_Answered' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tyield _dispatch( 'learnpress\u002Fquiz', '__requestSubmitQuizSuccess', camelCaseDashObjectKeys( response.results ), itemId, courseId );\r\n-\t}\r\n-}\r\n-\r\n-export function updateUserQuestionAnswers( questionId, answers, quizId, courseId = 0, userId = 0 ) {\r\n-\treturn {\r\n-\t\ttype: 'UPDATE_USER_QUESTION_ANSWERS',\r\n-\t\tquestionId,\r\n-\t\tanswers,\r\n-\t};\r\n-}\r\n-\r\n-\u002F**\r\n- * Handle when user change value on input fill in blanks.\r\n- *\r\n- * @param questionId\r\n- * @param idInput\r\n- * @param valueInput\r\n- * @param quizId\r\n- * @param courseId\r\n- * @param userId\r\n- * @since 4.2.5.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-export function updateUserQuestionFibAnswers( questionId, idInput, valueInput, quizId, courseId = 0, userId = 0 ) {\r\n-\treturn {\r\n-\t\ttype: 'UPDATE_USER_QUESTION_FIB_ANSWERS',\r\n-\t\tquestionId,\r\n-\t\tidInput,\r\n-\t\tvalueInput,\r\n-\t};\r\n-}\r\n-\r\n-export function __requestShowHintSuccess( id, showHint ) {\r\n-\treturn {\r\n-\t\ttype: 'SET_QUESTION_HINT',\r\n-\t\tquestionId: id,\r\n-\t\tshowHint,\r\n-\t};\r\n-}\r\n-\r\n-export function* showHint( id, showHint ) {\r\n-\tyield _dispatch( 'learnpress\u002Fquiz', '__requestShowHintSuccess', id, showHint );\r\n-}\r\n-\r\n-export function __requestCheckAnswerSuccess( id, result ) {\r\n-\treturn {\r\n-\t\ttype: 'CHECK_ANSWER',\r\n-\t\tquestionId: id,\r\n-\t\t...result,\r\n-\t};\r\n-}\r\n-\r\n-export function* checkAnswer( id ) {\r\n-\tconst {\r\n-\t\tgetDefaultRestArgs,\r\n-\t\tgetQuestionAnswered,\r\n-\t} = wpSelect( 'learnpress\u002Fquiz' );\r\n-\r\n-\tconst {\r\n-\t\titemId,\r\n-\t\tcourseId,\r\n-\t} = getDefaultRestArgs();\r\n-\r\n-\tconst result = yield apiFetch( {\r\n-\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fcheck-answer',\r\n-\t\tmethod: 'POST',\r\n-\t\tdata: {\r\n-\t\t\titem_id: itemId,\r\n-\t\t\tcourse_id: courseId,\r\n-\t\t\tquestion_id: id,\r\n-\t\t\tanswered: getQuestionAnswered( id ) || '',\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tif ( result.status === 'success' ) {\r\n-\t\t\u002F\u002F No require enroll\r\n-\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\r\n-\t\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\r\n-\r\n-\t\t\tif ( null !== quizDataOffStr ) {\r\n-\t\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\r\n-\r\n-\t\t\t\tconst questionOptions = result.options;\r\n-\r\n-\t\t\t\tif ( undefined === quizDataOff.checked_questions ) {\r\n-\t\t\t\t\tquizDataOff.checked_questions = [];\r\n-\t\t\t\t\tquizDataOff.checked_questions.push( id );\r\n-\t\t\t\t} else if ( -1 === quizDataOff.checked_questions.indexOf( id ) ) {\r\n-\t\t\t\t\tquizDataOff.checked_questions.push( id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( undefined === quizDataOff.question_options ) {\r\n-\t\t\t\t\tquizDataOff.question_options = {};\r\n-\t\t\t\t\tquizDataOff.question_options[ id ] = questionOptions;\r\n-\t\t\t\t} else if ( undefined === quizDataOff.question_options[ id ] ) {\r\n-\t\t\t\t\tquizDataOff.question_options[ id ] = questionOptions;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\r\n-\r\n-\t\t\t\t\u002F\u002Fconsole.log( quizDataOff );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tyield _dispatch( 'learnpress\u002Fquiz', '__requestCheckAnswerSuccess', id, camelCaseDashObjectKeys( result ) );\r\n-\t}\r\n-}\r\n-\r\n-export function markQuestionRendered( questionId ) {\r\n-\treturn {\r\n-\t\ttype: 'MARK_QUESTION_RENDERED',\r\n-\t\tquestionId,\r\n-\t};\r\n-}\r\n-\r\n-export function setQuizMode( mode ) {\r\n-\treturn {\r\n-\t\ttype: 'SET_QUIZ_MODE',\r\n-\t\tmode,\r\n-\t};\r\n-}\r\n-\r\n-export function sendKey( keyPressed ) {\r\n-\tsetTimeout( () => {\r\n-\t\t_dispatch( 'learnpress\u002Fquiz', 'sendKey', '' );\r\n-\t}, 300 );\r\n-\r\n-\treturn {\r\n-\t\ttype: 'SEND_KEY',\r\n-\t\tkeyPressed,\r\n-\t};\r\n-}\r\n+import { dispatch, select, apiFetch } from '@learnpress\u002Fdata-controls';\n+import { select as wpSelect, dispatch as wpDispatch } from '@wordpress\u002Fdata';\n+\n+function _dispatch() {\n+\tconst args = [].slice.call( arguments, 2 );\n+\tconst d = wpDispatch( arguments[ 0 ] );\n+\tconst f = arguments[ 1 ];\n+\td[ f ]( ...args );\n+}\n+\n+const { camelCaseDashObjectKeys, Hook } = LP;\n+\u002F**\n+ * Set user data for app.\n+ *\n+ * @param key\n+ * @param data\n+ *\u002F\n+export function setQuizData( key, data ) {\n+\tif ( typeof key === 'string' ) {\n+\t\tdata = { [ key ]: data };\n+\t} else {\n+\t\tdata = key;\n+\t}\n+\n+\treturn {\n+\t\ttype: 'SET_QUIZ_DATA',\n+\t\tdata: camelCaseDashObjectKeys( data ),\n+\t};\n+}\n+\n+\u002F**\n+ * Set question will display.\n+ *\n+ * @param questionId\n+ *\u002F\n+export function setCurrentQuestion( questionId ) {\n+\treturn {\n+\t\ttype: 'SET_CURRENT_QUESTION',\n+\t\tquestionId,\n+\t};\n+}\n+\n+export function setCurrentPage( currentPage ) {\n+\treturn {\n+\t\ttype: 'SET_CURRENT_PAGE',\n+\t\tcurrentPage,\n+\t};\n+}\n+\n+export function __requestBeforeStartQuiz( quizId, courseId, userId ) {\n+\treturn {\n+\t\ttype: 'BEFORE_START_QUIZ',\n+\t};\n+}\n+\n+export function __requestStartQuizSuccess( results, quizId, courseId, userId ) {\n+\tHook.doAction( 'quiz-started', results, quizId, courseId, userId );\n+\treturn {\n+\t\ttype: 'START_QUIZ_SUCCESS',\n+\t\tquizId,\n+\t\tcourseId,\n+\t\tuserId,\n+\t\tresults,\n+\t};\n+}\n+\n+\u002F**\n+ * Request to api for starting a quiz.\n+ *\u002F\n+const startQuiz = function*() {\n+\tconst { itemId, courseId } = wpSelect( 'learnpress\u002Fquiz' ).getDefaultRestArgs();\n+\n+\tconst doStart = Hook.applyFilters( 'before-start-quiz', true, itemId, courseId );\n+\n+\tif ( true !== doStart ) {\n+\t\treturn;\n+\t}\n+\n+\tlet response = yield apiFetch( {\n+\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fstart-quiz',\n+\t\tmethod: 'POST',\n+\t\tdata: {\n+\t\t\titem_id: itemId,\n+\t\t\tcourse_id: courseId,\n+\t\t},\n+\t} );\n+\n+\tconst btnStart = document.querySelector( '.lp-button.start' );\n+\n+\tif ( response.status !== 'error' ) {\n+\t\tresponse = Hook.applyFilters( 'request-start-quiz-response', response, itemId, courseId );\n+\t\tconst { results } = response;\n+\t\tconst { duration, status, question_ids, questions } = results;\n+\n+\t\t\u002F\u002F No require enroll\n+\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\n+\t\t\twindow.localStorage.removeItem( keyQuizOff );\n+\t\t\tconst quizDataOff = {\n+\t\t\t\tendTime: ( Date.now() + ( duration * 1000 ) ),\n+\t\t\t\tstatus,\n+\t\t\t\tquestion_ids,\n+\t\t\t\tquestions,\n+\t\t\t};\n+\n+\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\n+\n+\t\t\t\u002F\u002F Set Retake quiz\n+\t\t\tconst keyQuizOffRetaken = 'quiz_off_retaken_' + lpQuizSettings.id;\n+\t\t\tlet quizOffRetaken = window.localStorage.getItem( keyQuizOffRetaken );\n+\n+\t\t\tif ( null === quizOffRetaken ) {\n+\t\t\t\tquizOffRetaken = 0;\n+\t\t\t} else {\n+\t\t\t\tquizOffRetaken++;\n+\t\t\t}\n+\n+\t\t\twindow.localStorage.setItem( keyQuizOffRetaken, quizOffRetaken );\n+\t\t\t\u002F\u002F End\n+\t\t}\n+\n+\t\t\u002F\u002F Reload when start\u002Fretake quiz\n+\t\twindow.localStorage.removeItem( 'LP' );\n+\t\twindow.location.href = response.redirect_url;\n+\t\t\u002F\u002Fwindow.location.reload();\n+\n+\t\t\u002F\u002Fyield _dispatch( 'learnpress\u002Fquiz', '__requestStartQuizSuccess', camelCaseDashObjectKeys( response ), itemId, courseId );\n+\t} else {\n+\t\tconst elButtons = document.querySelector( '.quiz-buttons' );\n+\t\tconst message = `\u003Cdiv class=\"learn-press-message error\">${ response.message }\u003C\u002Fdiv>`;\n+\t\telButtons.insertAdjacentHTML( 'afterend', message );\n+\t\tbtnStart.classList.remove( 'loading' );\n+\t}\n+};\n+\n+export { startQuiz };\n+\n+export function __requestSubmitQuiz() {\n+\treturn {\n+\t\ttype: 'SUBMIT_QUIZ',\n+\t};\n+}\n+\n+export function __requestSubmitQuizSuccess( results, quizId, courseId ) {\n+\tHook.doAction( 'quiz-submitted', results, quizId, courseId );\n+\n+\treturn {\n+\t\ttype: 'SUBMIT_QUIZ_SUCCESS',\n+\t\tresults,\n+\t};\n+}\n+\n+export function* submitQuiz() {\n+\tconst {\n+\t\tgetDefaultRestArgs,\n+\t\tgetQuestionsSelectedAnswers,\n+\t} = wpSelect( 'learnpress\u002Fquiz' );\n+\n+\tconst {\n+\t\titemId,\n+\t\tcourseId,\n+\t} = getDefaultRestArgs();\n+\n+\tconst doSubmit = Hook.applyFilters( 'before-submit-quiz', true );\n+\n+\tif ( true !== doSubmit ) {\n+\t\treturn;\n+\t}\n+\n+\tconst answered = getQuestionsSelectedAnswers();\n+\n+\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\tconst keyQuizOff = `quiz_off_${ lpQuizSettings.id }`;\n+\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\n+\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\n+\t\tconst keyAnswer = `LP_Quiz_${ itemId }_Answered`;\n+\t\tconst answerDataStr = localStorage.getItem( keyAnswer );\n+\n+\t\tif ( null !== answerDataStr ) {\n+\t\t\tconst data = JSON.parse( answerDataStr );\n+\n+\t\t\tfor ( const [ k, v ] of Object.entries( data ) ) {\n+\t\t\t\tanswered[ k ] = v.answered;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Added questions not answered\n+\t\tquizDataOff.question_ids.forEach( ( question_id ) => {\n+\t\t\tif ( ! answered[ question_id ] ) {\n+\t\t\t\tanswered[ question_id ] = '';\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Get time spend did quiz - tungnx\n+\tlet timeSpend = 0;\n+\tconst elTimeSpend = document.querySelector( 'input[name=lp-quiz-time-spend]' );\n+\n+\tif ( elTimeSpend ) {\n+\t\ttimeSpend = elTimeSpend.value;\n+\t}\n+\t\u002F\u002F End\n+\n+\tlet response = yield apiFetch( {\n+\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fsubmit-quiz',\n+\t\tmethod: 'POST',\n+\t\tdata: {\n+\t\t\titem_id: itemId,\n+\t\t\tcourse_id: courseId,\n+\t\t\tanswered,\n+\t\t\ttime_spend: timeSpend,\n+\t\t},\n+\t} );\n+\n+\tresponse = Hook.applyFilters( 'request-submit-quiz-response', response, itemId, courseId );\n+\n+\tif ( response.status === 'success' ) {\n+\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\n+\t\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\n+\t\t\tif ( null !== quizDataOffStr ) {\n+\t\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\n+\n+\t\t\t\tquizDataOff.status = response.results.status;\n+\t\t\t\tquizDataOff.results = response.results.results;\n+\n+\t\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\n+\t\t\t\twindow.localStorage.removeItem( 'LP_Quiz_' + lpQuizSettings.id + '_Answered' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tyield _dispatch( 'learnpress\u002Fquiz', '__requestSubmitQuizSuccess', camelCaseDashObjectKeys( response.results ), itemId, courseId );\n+\t}\n+}\n+\n+export function updateUserQuestionAnswers( questionId, answers, quizId, courseId = 0, userId = 0 ) {\n+\treturn {\n+\t\ttype: 'UPDATE_USER_QUESTION_ANSWERS',\n+\t\tquestionId,\n+\t\tanswers,\n+\t};\n+}\n+\n+\u002F**\n+ * Handle when user change value on input fill in blanks.\n+ *\n+ * @param questionId\n+ * @param idInput\n+ * @param valueInput\n+ * @param quizId\n+ * @param courseId\n+ * @param userId\n+ * @since 4.2.5.9\n+ * @version 1.0.0\n+ *\u002F\n+export function updateUserQuestionFibAnswers( questionId, idInput, valueInput, quizId, courseId = 0, userId = 0 ) {\n+\treturn {\n+\t\ttype: 'UPDATE_USER_QUESTION_FIB_ANSWERS',\n+\t\tquestionId,\n+\t\tidInput,\n+\t\tvalueInput,\n+\t};\n+}\n+\n+export function __requestShowHintSuccess( id, showHint ) {\n+\treturn {\n+\t\ttype: 'SET_QUESTION_HINT',\n+\t\tquestionId: id,\n+\t\tshowHint,\n+\t};\n+}\n+\n+export function* showHint( id, showHint ) {\n+\tyield _dispatch( 'learnpress\u002Fquiz', '__requestShowHintSuccess', id, showHint );\n+}\n+\n+export function __requestCheckAnswerSuccess( id, result ) {\n+\treturn {\n+\t\ttype: 'CHECK_ANSWER',\n+\t\tquestionId: id,\n+\t\t...result,\n+\t};\n+}\n+\n+export function* checkAnswer( id ) {\n+\tconst {\n+\t\tgetDefaultRestArgs,\n+\t\tgetQuestionAnswered,\n+\t} = wpSelect( 'learnpress\u002Fquiz' );\n+\n+\tconst {\n+\t\titemId,\n+\t\tcourseId,\n+\t} = getDefaultRestArgs();\n+\n+\tconst result = yield apiFetch( {\n+\t\tpath: 'lp\u002Fv1\u002Fusers\u002Fcheck-answer',\n+\t\tmethod: 'POST',\n+\t\tdata: {\n+\t\t\titem_id: itemId,\n+\t\t\tcourse_id: courseId,\n+\t\t\tquestion_id: id,\n+\t\t\tanswered: getQuestionAnswered( id ) || '',\n+\t\t},\n+\t} );\n+\n+\tif ( result.status === 'success' ) {\n+\t\t\u002F\u002F No require enroll\n+\t\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\n+\t\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\n+\n+\t\t\tif ( null !== quizDataOffStr ) {\n+\t\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\n+\n+\t\t\t\tconst questionOptions = result.options;\n+\n+\t\t\t\tif ( undefined === quizDataOff.checked_questions ) {\n+\t\t\t\t\tquizDataOff.checked_questions = [];\n+\t\t\t\t\tquizDataOff.checked_questions.push( id );\n+\t\t\t\t} else if ( -1 === quizDataOff.checked_questions.indexOf( id ) ) {\n+\t\t\t\t\tquizDataOff.checked_questions.push( id );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( undefined === quizDataOff.question_options ) {\n+\t\t\t\t\tquizDataOff.question_options = {};\n+\t\t\t\t\tquizDataOff.question_options[ id ] = questionOptions;\n+\t\t\t\t} else if ( undefined === quizDataOff.question_options[ id ] ) {\n+\t\t\t\t\tquizDataOff.question_options[ id ] = questionOptions;\n+\t\t\t\t}\n+\n+\t\t\t\twindow.localStorage.setItem( keyQuizOff, JSON.stringify( quizDataOff ) );\n+\n+\t\t\t\t\u002F\u002Fconsole.log( quizDataOff );\n+\t\t\t}\n+\t\t}\n+\n+\t\tyield _dispatch( 'learnpress\u002Fquiz', '__requestCheckAnswerSuccess', id, camelCaseDashObjectKeys( result ) );\n+\t}\n+}\n+\n+export function markQuestionRendered( questionId ) {\n+\treturn {\n+\t\ttype: 'MARK_QUESTION_RENDERED',\n+\t\tquestionId,\n+\t};\n+}\n+\n+export function setQuizMode( mode ) {\n+\treturn {\n+\t\ttype: 'SET_QUIZ_MODE',\n+\t\tmode,\n+\t};\n+}\n+\n+export function sendKey( keyPressed ) {\n+\tsetTimeout( () => {\n+\t\t_dispatch( 'learnpress\u002Fquiz', 'sendKey', '' );\n+\t}, 300 );\n+\n+\treturn {\n+\t\ttype: 'SEND_KEY',\n+\t\tkeyPressed,\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fconstants.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fconstants.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fconstants.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fconstants.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-export const ENROLL_COURSE = 'ENROLL_COURSE';\r\n-export const LEAVE_COURSE = 'LEAVE_COURSE';\r\n-export const SET_COURSE_DATA = 'SET_COURSE_DATA';\r\n+export const ENROLL_COURSE = 'ENROLL_COURSE';\n+export const LEAVE_COURSE = 'LEAVE_COURSE';\n+export const SET_COURSE_DATA = 'SET_COURSE_DATA';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-import { registerStore } from '@wordpress\u002Fdata';\r\n-\r\n-import reducer from '.\u002Freducer';\r\n-import * as actions from '.\u002Factions';\r\n-import * as selectors from '.\u002Fselectors';\r\n-import applyMiddlewares from '.\u002Fmiddlewares';\r\n-\r\n-const { controls: dataControls } = LP.dataControls;\r\n-\r\n-const store = registerStore( 'learnpress\u002Fquiz', {\r\n-\treducer,\r\n-\tselectors,\r\n-\tactions,\r\n-\tcontrols: {\r\n-\t\t...dataControls,\r\n-\t},\r\n-} );\r\n-\r\n-applyMiddlewares( store );\r\n-\r\n-export default store;\r\n+import { registerStore } from '@wordpress\u002Fdata';\n+\n+import reducer from '.\u002Freducer';\n+import * as actions from '.\u002Factions';\n+import * as selectors from '.\u002Fselectors';\n+import applyMiddlewares from '.\u002Fmiddlewares';\n+\n+const { controls: dataControls } = LP.dataControls;\n+\n+const store = registerStore( 'learnpress\u002Fquiz', {\n+\treducer,\n+\tselectors,\n+\tactions,\n+\tcontrols: {\n+\t\t...dataControls,\n+\t},\n+} );\n+\n+applyMiddlewares( store );\n+\n+export default store;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fmiddlewares.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fmiddlewares.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fmiddlewares.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fmiddlewares.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u002F**\r\n- * External dependencies\r\n- *\u002F\r\n-import refx from 'refx';\r\n-\r\n-\u002F**\r\n- * Internal dependencies\r\n- *\u002F\r\n-\u002F\u002Fimport effects from '.\u002Feffects';\r\n-\r\n-const effects = {\r\n-\tENROLL_COURSE_X: ( action, store ) => {\r\n-\t\tenrollCourse:( action, store ) => {\r\n-\t\t\tconst { dispatch } = store;\r\n-\r\n-\t\t\t\u002F\u002Fdispatch()\r\n-\t\t};\r\n-\t},\r\n-};\r\n-\r\n-\u002F**\r\n- * Applies the custom middlewares used specifically in the editor module.\r\n- *\r\n- * @param {Object} store Store Object.\r\n- *\r\n- * @return {Object} Update Store Object.\r\n- *\u002F\r\n-function applyMiddlewares( store ) {\r\n-\tlet enhancedDispatch = () => {\r\n-\t\tthrow new Error(\r\n-\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\r\n-            'Other middleware would not be applied to this dispatch.'\r\n-\t\t);\r\n-\t};\r\n-\r\n-\tconst middlewareAPI = {\r\n-\t\tgetState: store.getState,\r\n-\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\r\n-\t};\r\n-\r\n-\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\r\n-\r\n-\tstore.dispatch = enhancedDispatch;\r\n-\treturn store;\r\n-}\r\n-\r\n-export default applyMiddlewares;\r\n+\u002F**\n+ * External dependencies\n+ *\u002F\n+import refx from 'refx';\n+\n+\u002F**\n+ * Internal dependencies\n+ *\u002F\n+\u002F\u002Fimport effects from '.\u002Feffects';\n+\n+const effects = {\n+\tENROLL_COURSE_X: ( action, store ) => {\n+\t\tenrollCourse:( action, store ) => {\n+\t\t\tconst { dispatch } = store;\n+\n+\t\t\t\u002F\u002Fdispatch()\n+\t\t};\n+\t},\n+};\n+\n+\u002F**\n+ * Applies the custom middlewares used specifically in the editor module.\n+ *\n+ * @param {Object} store Store Object.\n+ *\n+ * @return {Object} Update Store Object.\n+ *\u002F\n+function applyMiddlewares( store ) {\n+\tlet enhancedDispatch = () => {\n+\t\tthrow new Error(\n+\t\t\t'Dispatching while constructing your middleware is not allowed. ' +\n+            'Other middleware would not be applied to this dispatch.'\n+\t\t);\n+\t};\n+\n+\tconst middlewareAPI = {\n+\t\tgetState: store.getState,\n+\t\tdispatch: ( ...args ) => enhancedDispatch( ...args ),\n+\t};\n+\n+\tenhancedDispatch = refx( effects )( middlewareAPI )( store.dispatch );\n+\n+\tstore.dispatch = enhancedDispatch;\n+\treturn store;\n+}\n+\n+export default applyMiddlewares;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Freducer.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Freducer.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Freducer.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Freducer.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,273 +1,273 @@\n-import { combineReducers } from '@wordpress\u002Fdata';\r\n-\r\n-const { omit, flow, isArray, chunk } = lodash;\r\n-const { camelCaseDashObjectKeys } = LP;\r\n-const { get: storageGet, set: storageSet } = LP.localStorage;\r\n-const STORE_DATA = {};\r\n-\r\n-export const setItemStatus = ( item, status ) => {\r\n-\tconst userSettings = {\r\n-\t\t...item.userSettings,\r\n-\t\tstatus,\r\n-\t};\r\n-\r\n-\treturn {\r\n-\t\t...item,\r\n-\t\tuserSettings,\r\n-\t};\r\n-};\r\n-\r\n-const updateUserQuestionAnswer = ( state, action ) => {\r\n-\tconst { answered, id } = state;\r\n-\tconst newAnswer = {\r\n-\t\t...( answered[ action.questionId ] || {} ),\r\n-\t\tanswered: action.answers,\r\n-\t\ttemp: true,\r\n-\t};\r\n-\r\n-\tif ( id ) {\r\n-\t\tlocalStorage.setItem( `LP_Quiz_${ id }_Answered`, JSON.stringify( {\r\n-\t\t\t...state.answered,\r\n-\t\t\t[ action.questionId ]: newAnswer,\r\n-\t\t} ) );\r\n-\t}\r\n-\r\n-\treturn {\r\n-\t\t...state,\r\n-\t\tanswered: {\r\n-\t\t\t...state.answered,\r\n-\t\t\t[ action.questionId ]: newAnswer,\r\n-\t\t},\r\n-\t};\r\n-};\r\n-\r\n-const updateUserQuestionFibAnswer = ( state, action ) => {\r\n-\tconst { id } = state;\r\n-\tconst { questionId, idInput, valueInput } = action;\r\n-\r\n-\tif ( state.answered.hasOwnProperty( questionId ) ) {\r\n-\t\tstate.answered[ questionId ].answered[ idInput ] = valueInput;\r\n-\t} else {\r\n-\t\tstate.answered[ action.questionId ] = { answered: { [ idInput ]: valueInput }, temp: true };\r\n-\t}\r\n-\r\n-\tlocalStorage.setItem( `LP_Quiz_${ id }_Answered`, JSON.stringify( state.answered ) );\r\n-\r\n-\treturn state;\r\n-};\r\n-\r\n-const markQuestionRendered = ( state, action ) => {\r\n-\tconst {\r\n-\t\tquestionsRendered,\r\n-\t} = state;\r\n-\r\n-\tif ( isArray( questionsRendered ) ) {\r\n-\t\tquestionsRendered.push( action.questionId );\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tquestionsRendered: [ ...questionsRendered ],\r\n-\t\t};\r\n-\t}\r\n-\treturn {\r\n-\t\t...state,\r\n-\t\tquestionsRendered: [ action.questionId ],\r\n-\t};\r\n-};\r\n-\r\n-const resetCurrentPage = ( state, args ) => {\r\n-\tif ( args.currentPage ) {\r\n-\t\tstorageSet( `Q${ state.id }.currentPage`, args.currentPage );\r\n-\t}\r\n-\r\n-\treturn {\r\n-\t\t...state,\r\n-\t\t...args,\r\n-\t};\r\n-};\r\n-\r\n-const setQuestionHint = ( state, action ) => {\r\n-\tconst questions = state.questions.map( ( question ) => {\r\n-\t\treturn question.id == action.questionId ? { ...question, showHint: action.showHint } : question;\r\n-\t} );\r\n-\r\n-\treturn {\r\n-\t\t...state,\r\n-\t\tquestions: [ ...questions ],\r\n-\t};\r\n-};\r\n-\r\n-const checkAnswer = ( state, action ) => {\r\n-\tconst questions = state.questions.map( ( question ) => {\r\n-\t\tif ( question.id !== action.questionId ) {\r\n-\t\t\treturn question;\r\n-\t\t}\r\n-\r\n-\t\tconst newArgs = {\r\n-\t\t\texplanation: action.explanation,\r\n-\t\t};\r\n-\r\n-\t\tif ( action.options ) {\r\n-\t\t\tnewArgs.options = action.options;\r\n-\t\t}\r\n-\r\n-\t\treturn { ...question, ...newArgs };\r\n-\t} );\r\n-\r\n-\tconst answered = {\r\n-\t\t...state.answered,\r\n-\t\t[ action.questionId ]: action.result,\r\n-\t};\r\n-\r\n-\tlet newAnswered = localStorage.getItem( `LP_Quiz_${ state.id }_Answered` );\r\n-\r\n-\tif ( newAnswered ) {\r\n-\t\tnewAnswered = {\r\n-\t\t\t...JSON.parse( newAnswered ),\r\n-\t\t\t...answered,\r\n-\t\t};\r\n-\r\n-\t\tlocalStorage.setItem( `LP_Quiz_${ state.id }_Answered`, JSON.stringify( newAnswered ) );\r\n-\t}\r\n-\r\n-\treturn {\r\n-\t\t...state,\r\n-\t\tquestions: [ ...questions ],\r\n-\t\tanswered,\r\n-\t\tcheckedQuestions: [ ...state.checkedQuestions, action.questionId ],\r\n-\t};\r\n-};\r\n-\r\n-const submitQuiz = ( state, action ) => {\r\n-\tlocalStorage.removeItem( `LP_Quiz_${ state.id }_Answered` );\r\n-\r\n-\tconst questions = state.questions.map( ( question ) => {\r\n-\t\tconst newArgs = {};\r\n-\t\tif ( state.reviewQuestions ) {\r\n-\t\t\tif ( action.results.questions[ question.id ]?.explanation ) {\r\n-\t\t\t\tnewArgs.explanation = action.results.questions[ question.id ].explanation;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( action.results.questions[ question.id ]?.options ) {\r\n-\t\t\t\tnewArgs.options = action.results.questions[ question.id ].options;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn { ...question, ...newArgs };\r\n-\t} );\r\n-\r\n-\treturn resetCurrentPage( state, {\r\n-\t\tsubmitting: false,\r\n-\t\tcurrentPage: 1,\r\n-\t\t...action.results,\r\n-\t\tquestions: [ ...questions ],\r\n-\t} );\r\n-};\r\n-\r\n-const startQuizz = ( state, action ) => {\r\n-\tconst successResponse = ( action.results.success ) !== undefined ? action.results.success : false;\r\n-\tconst messageResponse = action.results.message || false;\r\n-\r\n-\tconst chunks = chunk( action.results.results.questionIds, state.questionsPerPage );\r\n-\tstate.numPages = chunks.length;\r\n-\r\n-\treturn resetCurrentPage( state, {\r\n-\t\tcheckedQuestions: [],\r\n-\t\thintedQuestions: [],\r\n-\t\tmode: '',\r\n-\t\tcurrentPage: 1,\r\n-\t\t...action.results.results,\r\n-\t\tsuccessResponse,\r\n-\t\tmessageResponse,\r\n-\t} );\r\n-};\r\n-\r\n-export const userQuiz = ( state = STORE_DATA, action ) => {\r\n-\tswitch ( action.type ) {\r\n-\tcase 'SET_QUIZ_DATA':\r\n-\t\tif ( 1 > action.data.questionsPerPage ) {\r\n-\t\t\taction.data.questionsPerPage = 1;\r\n-\t\t}\r\n-\r\n-\t\tconst chunks = chunk( state.questionIds || action.data.questionIds, action.data.questionsPerPage );\r\n-\r\n-\t\taction.data.numPages = chunks.length;\r\n-\t\taction.data.pages = chunks;\r\n-\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\t...action.data,\r\n-\t\t\tcurrentPage: storageGet( `Q${ action.data.id }.currentPage` ) || action.data.currentPage,\r\n-\t\t};\r\n-\tcase 'SUBMIT_QUIZ':\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tsubmitting: true,\r\n-\t\t};\r\n-\tcase 'START_QUIZ':\r\n-\tcase 'START_QUIZ_SUCCESS':\r\n-\t\treturn startQuizz( state, action );\r\n-\tcase 'SET_CURRENT_QUESTION':\r\n-\t\tstorageSet( `Q${ state.id }.currentQuestion`, action.questionId );\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tcurrentQuestion: action.questionId,\r\n-\t\t};\r\n-\tcase 'SET_CURRENT_PAGE':\r\n-\t\tstorageSet( `Q${ state.id }.currentPage`, action.currentPage );\r\n-\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tcurrentPage: action.currentPage,\r\n-\t\t};\r\n-\tcase 'SUBMIT_QUIZ_SUCCESS':\r\n-\t\treturn submitQuiz( state, action );\r\n-\tcase 'UPDATE_USER_QUESTION_ANSWERS':\r\n-\t\treturn state.status === 'started' ? updateUserQuestionAnswer( state, action ) : state;\r\n-\tcase 'UPDATE_USER_QUESTION_FIB_ANSWERS':\r\n-\t\treturn state.status === 'started' ? updateUserQuestionFibAnswer( state, action ) : state;\r\n-\tcase 'MARK_QUESTION_RENDERED':\r\n-\t\treturn markQuestionRendered( state, action );\r\n-\tcase 'SET_QUIZ_MODE':\r\n-\t\tif ( action.mode == 'reviewing' ) {\r\n-\t\t\treturn resetCurrentPage( state, {\r\n-\t\t\t\tmode: action.mode,\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tmode: action.mode,\r\n-\t\t};\r\n-\tcase 'SET_QUESTION_HINT':\r\n-\t\treturn setQuestionHint( state, action );\r\n-\tcase 'CHECK_ANSWER':\r\n-\t\treturn checkAnswer( state, action );\r\n-\tcase 'SEND_KEY':\r\n-\t\treturn {\r\n-\t\t\t...state,\r\n-\t\t\tkeyPressed: action.keyPressed,\r\n-\t\t};\r\n-\t}\r\n-\treturn state;\r\n-};\r\n-\r\n-export const blocks = flow(\r\n-\tcombineReducers,\r\n-\t( reducer ) => ( state, action ) => {\r\n-\t\treturn reducer( state, action );\r\n-\t},\r\n-\t( reducer ) => ( state, action ) => {\r\n-\t\treturn reducer( state, action );\r\n-\t},\r\n-\t( reducer ) => ( state, action ) => {\r\n-\t\treturn reducer( state, action );\r\n-\t}\r\n-)( {\r\n-\ta( state = { a: 1 }, action ) {\r\n-\t\treturn state;\r\n-\t},\r\n-\tb( state = { b: 2 }, action ) {\r\n-\t\treturn state;\r\n-\t},\r\n-} );\r\n-\r\n-export default combineReducers( { blocks, userQuiz } );\r\n+import { combineReducers } from '@wordpress\u002Fdata';\n+\n+const { omit, flow, isArray, chunk } = lodash;\n+const { camelCaseDashObjectKeys } = LP;\n+const { get: storageGet, set: storageSet } = LP.localStorage;\n+const STORE_DATA = {};\n+\n+export const setItemStatus = ( item, status ) => {\n+\tconst userSettings = {\n+\t\t...item.userSettings,\n+\t\tstatus,\n+\t};\n+\n+\treturn {\n+\t\t...item,\n+\t\tuserSettings,\n+\t};\n+};\n+\n+const updateUserQuestionAnswer = ( state, action ) => {\n+\tconst { answered, id } = state;\n+\tconst newAnswer = {\n+\t\t...( answered[ action.questionId ] || {} ),\n+\t\tanswered: action.answers,\n+\t\ttemp: true,\n+\t};\n+\n+\tif ( id ) {\n+\t\tlocalStorage.setItem( `LP_Quiz_${ id }_Answered`, JSON.stringify( {\n+\t\t\t...state.answered,\n+\t\t\t[ action.questionId ]: newAnswer,\n+\t\t} ) );\n+\t}\n+\n+\treturn {\n+\t\t...state,\n+\t\tanswered: {\n+\t\t\t...state.answered,\n+\t\t\t[ action.questionId ]: newAnswer,\n+\t\t},\n+\t};\n+};\n+\n+const updateUserQuestionFibAnswer = ( state, action ) => {\n+\tconst { id } = state;\n+\tconst { questionId, idInput, valueInput } = action;\n+\n+\tif ( state.answered.hasOwnProperty( questionId ) ) {\n+\t\tstate.answered[ questionId ].answered[ idInput ] = valueInput;\n+\t} else {\n+\t\tstate.answered[ action.questionId ] = { answered: { [ idInput ]: valueInput }, temp: true };\n+\t}\n+\n+\tlocalStorage.setItem( `LP_Quiz_${ id }_Answered`, JSON.stringify( state.answered ) );\n+\n+\treturn state;\n+};\n+\n+const markQuestionRendered = ( state, action ) => {\n+\tconst {\n+\t\tquestionsRendered,\n+\t} = state;\n+\n+\tif ( isArray( questionsRendered ) ) {\n+\t\tquestionsRendered.push( action.questionId );\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tquestionsRendered: [ ...questionsRendered ],\n+\t\t};\n+\t}\n+\treturn {\n+\t\t...state,\n+\t\tquestionsRendered: [ action.questionId ],\n+\t};\n+};\n+\n+const resetCurrentPage = ( state, args ) => {\n+\tif ( args.currentPage ) {\n+\t\tstorageSet( `Q${ state.id }.currentPage`, args.currentPage );\n+\t}\n+\n+\treturn {\n+\t\t...state,\n+\t\t...args,\n+\t};\n+};\n+\n+const setQuestionHint = ( state, action ) => {\n+\tconst questions = state.questions.map( ( question ) => {\n+\t\treturn question.id == action.questionId ? { ...question, showHint: action.showHint } : question;\n+\t} );\n+\n+\treturn {\n+\t\t...state,\n+\t\tquestions: [ ...questions ],\n+\t};\n+};\n+\n+const checkAnswer = ( state, action ) => {\n+\tconst questions = state.questions.map( ( question ) => {\n+\t\tif ( question.id !== action.questionId ) {\n+\t\t\treturn question;\n+\t\t}\n+\n+\t\tconst newArgs = {\n+\t\t\texplanation: action.explanation,\n+\t\t};\n+\n+\t\tif ( action.options ) {\n+\t\t\tnewArgs.options = action.options;\n+\t\t}\n+\n+\t\treturn { ...question, ...newArgs };\n+\t} );\n+\n+\tconst answered = {\n+\t\t...state.answered,\n+\t\t[ action.questionId ]: action.result,\n+\t};\n+\n+\tlet newAnswered = localStorage.getItem( `LP_Quiz_${ state.id }_Answered` );\n+\n+\tif ( newAnswered ) {\n+\t\tnewAnswered = {\n+\t\t\t...JSON.parse( newAnswered ),\n+\t\t\t...answered,\n+\t\t};\n+\n+\t\tlocalStorage.setItem( `LP_Quiz_${ state.id }_Answered`, JSON.stringify( newAnswered ) );\n+\t}\n+\n+\treturn {\n+\t\t...state,\n+\t\tquestions: [ ...questions ],\n+\t\tanswered,\n+\t\tcheckedQuestions: [ ...state.checkedQuestions, action.questionId ],\n+\t};\n+};\n+\n+const submitQuiz = ( state, action ) => {\n+\tlocalStorage.removeItem( `LP_Quiz_${ state.id }_Answered` );\n+\n+\tconst questions = state.questions.map( ( question ) => {\n+\t\tconst newArgs = {};\n+\t\tif ( state.reviewQuestions ) {\n+\t\t\tif ( action.results.questions[ question.id ]?.explanation ) {\n+\t\t\t\tnewArgs.explanation = action.results.questions[ question.id ].explanation;\n+\t\t\t}\n+\n+\t\t\tif ( action.results.questions[ question.id ]?.options ) {\n+\t\t\t\tnewArgs.options = action.results.questions[ question.id ].options;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn { ...question, ...newArgs };\n+\t} );\n+\n+\treturn resetCurrentPage( state, {\n+\t\tsubmitting: false,\n+\t\tcurrentPage: 1,\n+\t\t...action.results,\n+\t\tquestions: [ ...questions ],\n+\t} );\n+};\n+\n+const startQuizz = ( state, action ) => {\n+\tconst successResponse = ( action.results.success ) !== undefined ? action.results.success : false;\n+\tconst messageResponse = action.results.message || false;\n+\n+\tconst chunks = chunk( action.results.results.questionIds, state.questionsPerPage );\n+\tstate.numPages = chunks.length;\n+\n+\treturn resetCurrentPage( state, {\n+\t\tcheckedQuestions: [],\n+\t\thintedQuestions: [],\n+\t\tmode: '',\n+\t\tcurrentPage: 1,\n+\t\t...action.results.results,\n+\t\tsuccessResponse,\n+\t\tmessageResponse,\n+\t} );\n+};\n+\n+export const userQuiz = ( state = STORE_DATA, action ) => {\n+\tswitch ( action.type ) {\n+\tcase 'SET_QUIZ_DATA':\n+\t\tif ( 1 > action.data.questionsPerPage ) {\n+\t\t\taction.data.questionsPerPage = 1;\n+\t\t}\n+\n+\t\tconst chunks = chunk( state.questionIds || action.data.questionIds, action.data.questionsPerPage );\n+\n+\t\taction.data.numPages = chunks.length;\n+\t\taction.data.pages = chunks;\n+\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\t...action.data,\n+\t\t\tcurrentPage: storageGet( `Q${ action.data.id }.currentPage` ) || action.data.currentPage,\n+\t\t};\n+\tcase 'SUBMIT_QUIZ':\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tsubmitting: true,\n+\t\t};\n+\tcase 'START_QUIZ':\n+\tcase 'START_QUIZ_SUCCESS':\n+\t\treturn startQuizz( state, action );\n+\tcase 'SET_CURRENT_QUESTION':\n+\t\tstorageSet( `Q${ state.id }.currentQuestion`, action.questionId );\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tcurrentQuestion: action.questionId,\n+\t\t};\n+\tcase 'SET_CURRENT_PAGE':\n+\t\tstorageSet( `Q${ state.id }.currentPage`, action.currentPage );\n+\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tcurrentPage: action.currentPage,\n+\t\t};\n+\tcase 'SUBMIT_QUIZ_SUCCESS':\n+\t\treturn submitQuiz( state, action );\n+\tcase 'UPDATE_USER_QUESTION_ANSWERS':\n+\t\treturn state.status === 'started' ? updateUserQuestionAnswer( state, action ) : state;\n+\tcase 'UPDATE_USER_QUESTION_FIB_ANSWERS':\n+\t\treturn state.status === 'started' ? updateUserQuestionFibAnswer( state, action ) : state;\n+\tcase 'MARK_QUESTION_RENDERED':\n+\t\treturn markQuestionRendered( state, action );\n+\tcase 'SET_QUIZ_MODE':\n+\t\tif ( action.mode == 'reviewing' ) {\n+\t\t\treturn resetCurrentPage( state, {\n+\t\t\t\tmode: action.mode,\n+\t\t\t} );\n+\t\t}\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tmode: action.mode,\n+\t\t};\n+\tcase 'SET_QUESTION_HINT':\n+\t\treturn setQuestionHint( state, action );\n+\tcase 'CHECK_ANSWER':\n+\t\treturn checkAnswer( state, action );\n+\tcase 'SEND_KEY':\n+\t\treturn {\n+\t\t\t...state,\n+\t\t\tkeyPressed: action.keyPressed,\n+\t\t};\n+\t}\n+\treturn state;\n+};\n+\n+export const blocks = flow(\n+\tcombineReducers,\n+\t( reducer ) => ( state, action ) => {\n+\t\treturn reducer( state, action );\n+\t},\n+\t( reducer ) => ( state, action ) => {\n+\t\treturn reducer( state, action );\n+\t},\n+\t( reducer ) => ( state, action ) => {\n+\t\treturn reducer( state, action );\n+\t}\n+)( {\n+\ta( state = { a: 1 }, action ) {\n+\t\treturn state;\n+\t},\n+\tb( state = { b: 2 }, action ) {\n+\t\treturn state;\n+\t},\n+} );\n+\n+export default combineReducers( { blocks, userQuiz } );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fselectors.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fselectors.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fselectors.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fstore\u002Fselectors.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,243 +1,243 @@\n-import { select } from '@wordpress\u002Fdata';\r\n-const { get, isArray } = lodash;\r\n-\r\n-const getQuestionOptions = function getQuestionOptions( state, id ) {\r\n-\tconsole.time( 'parseOptions' );\r\n-\r\n-\tconst question = getQuestion( state, id );\r\n-\tlet options = question.options;\r\n-\r\n-\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\r\n-\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\r\n-\r\n-\tconsole.timeEnd( 'parseOptions' );\r\n-\treturn options;\r\n-};\r\n-\r\n-export { getQuestionOptions };\r\n-\r\n-\u002F**\r\n- * Get current status of an item in course.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n- *\u002F\r\n-export function getItemStatus( state, itemId ) {\r\n-\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\r\n-\treturn item ? get( item, 'userSettings.status' ) : '';\r\n-}\r\n-\r\n-export function getProp( state, prop, defaultValue ) {\r\n-\treturn state[ prop ] || defaultValue;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get quiz attempted.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n- * @return {Array}\r\n- *\u002F\r\n-export function getQuizAttempts( state, itemId ) {\r\n-\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\r\n-\treturn item ? get( item, 'userSettings.attempts' ) : [];\r\n-}\r\n-\r\n-\u002F**\r\n- * Get answers for a quiz user has did.\r\n- *\r\n- * @param state\r\n- * @param itemId\r\n- * @return {{}}\r\n- *\u002F\r\n-export function getQuizAnswered( state, itemId ) {\r\n-\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\r\n-\treturn item ? get( item, 'userSettings.answered', {} ) : {};\r\n-}\r\n-\r\n-\u002F**\r\n- * Get all questions in quiz.\r\n- *\r\n- * @param state\r\n- * @return {*}\r\n- *\u002F\r\n-export function getQuestions( state ) {\r\n-\tconst { userQuiz } = state;\r\n-\tconst questions = get( userQuiz, 'questions' );\r\n-\treturn questions ? Object.values( questions ) : [];\r\n-}\r\n-\r\n-\u002F**\r\n- * Get property of store data.\r\n- *\r\n- * @param state - Store data\r\n- * @param prop - Optional. NULL will return all data.\r\n- * @return {*}\r\n- *\u002F\r\n-export function getData( state, prop ) {\r\n-\tconst { userQuiz } = state;\r\n-\r\n-\tif ( prop ) {\r\n-\t\treturn get( userQuiz, prop );\r\n-\t}\r\n-\r\n-\treturn userQuiz;\r\n-}\r\n-\r\n-export function getDefaultRestArgs( state ) {\r\n-\tconst { userQuiz } = state;\r\n-\r\n-\treturn {\r\n-\t\titemId: userQuiz.id,\r\n-\t\tcourseId: userQuiz.courseId,\r\n-\t};\r\n-}\r\n-\r\n-export function getQuestionAnswered( state, id ) {\r\n-\tconst { userQuiz } = state;\r\n-\r\n-\treturn get( userQuiz, `answered.${ id }.answered` ) || undefined;\r\n-}\r\n-\r\n-export function getQuestionMark( state, id ) {\r\n-\tconst { userQuiz } = state;\r\n-\r\n-\treturn get( userQuiz, `answered.${ id }.mark` ) || undefined;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current question is doing.\r\n- *\r\n- * @param {Object} state\r\n- * @param {string} ret\r\n- * @return {*}\r\n- *\u002F\r\n-export function getCurrentQuestion( state, ret = '' ) {\r\n-\tconst questionsPerPage = get( state, 'userQuiz.questionsPerPage' ) || 1;\r\n-\r\n-\tif ( questionsPerPage > 1 ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tconst currentPage = get( state, 'userQuiz.currentPage' ) || 1;\r\n-\treturn ret === 'object' ? get( state, `userQuiz.questions[${ currentPage - 1 }]` ) : get( state, `userQuiz.questionIds[${ currentPage - 1 }]` );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return a question contains fully data with title, content, ...\r\n- *\r\n- * @param state\r\n- * @param theId\r\n- *\u002F\r\n-const getQuestion = function getQuestion( state, theId ) {\r\n-\tconst { userQuiz } = state;\r\n-\tconst s = select( 'learnpress\u002Fquiz' );\r\n-\tconst questions = s.getQuestions();\r\n-\r\n-\treturn questions.find( ( q ) => {\r\n-\t\treturn q.id == theId;\r\n-\t} );\r\n-};\r\n-\r\n-export { getQuestion };\r\n-\r\n-\u002F**\r\n- * If user has used 'Instant check' for a question.\r\n- *\r\n- * @param {Object} state - Global state for app.\r\n- * @param {number} id\r\n- * @return {boolean}\r\n- *\u002F\r\n-export function isCheckedAnswer( state, id ) {\r\n-\tconst checkedQuestions = get( state, 'userQuiz.checkedQuestions' ) || [];\r\n-\r\n-\treturn checkedQuestions.indexOf( id ) !== -1;\r\n-}\r\n-\r\n-export function isCorrect( state, id ) {\r\n-\r\n-}\r\n-\r\n-\u002F**\r\n- * Get questions user has selected answers.\r\n- *\r\n- * @param {Object} state. Global app state\r\n- * @param state\r\n- * @param {number} questionId\r\n- * @return {{}}\r\n- *\u002F\r\n-const getQuestionsSelectedAnswers = function( state, questionId ) {\r\n-\tconst data = get( state, 'userQuiz.answered' );\r\n-\tconst returnData = {};\r\n-\r\n-\tfor ( const loopId in data ) {\r\n-\t\tif ( ! data.hasOwnProperty( loopId ) ) {\r\n-\t\t\tcontinue;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Answer filled by user\r\n-\t\tif ( ( data[ loopId ].temp || data[ loopId ].blanks ) ) {\r\n-\t\t\t\u002F\u002F If specific a question then return it only.\r\n-\t\t\tif ( questionId && loopId === questionId ) {\r\n-\t\t\t\treturn data[ loopId ].answered;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturnData[ loopId ] = data[ loopId ].answered;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn returnData;\r\n-};\r\n-\r\n-export { getQuestionsSelectedAnswers };\r\n-\r\n-\u002F**\r\n- * Get mark user earned.\r\n- * Just for questions user has used 'Instant check' button.\r\n- *\r\n- * @param state\r\n- * @return {number}\r\n- *\u002F\r\n-export function getUserMark( state ) {\r\n-\tconst userQuiz = state.userQuiz || {};\r\n-\tconst {\r\n-\t\tanswered,\r\n-\t\tnegativeMarking,\r\n-\t\tquestions,\r\n-\t\tcheckedQuestions,\r\n-\t} = userQuiz;\r\n-\r\n-\tlet totalMark = 0;\r\n-\r\n-\tfor ( let id in answered ) {\r\n-\t\tif ( ! answered.hasOwnProperty( id ) ) {\r\n-\t\t\tcontinue;\r\n-\t\t}\r\n-\r\n-\t\tid = parseInt( id );\r\n-\t\tconst data = answered[ id ];\r\n-\t\tconst questionMark = data.questionMark ? data.questionMark : ( function() {\r\n-\t\t\tconst question = questions.find( ( q ) => {\r\n-\t\t\t\treturn q.id === id;\r\n-\t\t\t} );\r\n-\r\n-\t\t\treturn question ? question.point : 0;\r\n-\t\t}() );\r\n-\r\n-\t\tconst isChecked = checkedQuestions.indexOf( id ) !== -1;\r\n-\r\n-\t\tif ( data.temp ) {\r\n-\t\t\tcontinue;\r\n-\t\t}\r\n-\r\n-\t\tif ( negativeMarking ) {\r\n-\t\t\tif ( data.answered ) {\r\n-\t\t\t\ttotalMark = data.correct ? totalMark + data.mark : totalMark - questionMark;\r\n-\t\t\t}\r\n-\t\t} else if ( data.answered && data.correct ) {\r\n-\t\t\ttotalMark += data.mark;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn totalMark > 0 ? totalMark : 0;\r\n-}\r\n+import { select } from '@wordpress\u002Fdata';\n+const { get, isArray } = lodash;\n+\n+const getQuestionOptions = function getQuestionOptions( state, id ) {\n+\tconsole.time( 'parseOptions' );\n+\n+\tconst question = getQuestion( state, id );\n+\tlet options = question.options;\n+\n+\toptions = ! isArray( options ) ? JSON.parse( CryptoJS.AES.decrypt( options.data, options.key, { format: CryptoJSAesJson } ).toString( CryptoJS.enc.Utf8 ) ) : options;\n+\toptions = ! isArray( options ) ? JSON.parse( options ) : options;\n+\n+\tconsole.timeEnd( 'parseOptions' );\n+\treturn options;\n+};\n+\n+export { getQuestionOptions };\n+\n+\u002F**\n+ * Get current status of an item in course.\n+ *\n+ * @param state\n+ * @param itemId\n+ *\u002F\n+export function getItemStatus( state, itemId ) {\n+\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\n+\treturn item ? get( item, 'userSettings.status' ) : '';\n+}\n+\n+export function getProp( state, prop, defaultValue ) {\n+\treturn state[ prop ] || defaultValue;\n+}\n+\n+\u002F**\n+ * Get quiz attempted.\n+ *\n+ * @param state\n+ * @param itemId\n+ * @return {Array}\n+ *\u002F\n+export function getQuizAttempts( state, itemId ) {\n+\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\n+\treturn item ? get( item, 'userSettings.attempts' ) : [];\n+}\n+\n+\u002F**\n+ * Get answers for a quiz user has did.\n+ *\n+ * @param state\n+ * @param itemId\n+ * @return {{}}\n+ *\u002F\n+export function getQuizAnswered( state, itemId ) {\n+\tconst item = select( 'course-learner\u002Fuser' ).getItemById( itemId );\n+\treturn item ? get( item, 'userSettings.answered', {} ) : {};\n+}\n+\n+\u002F**\n+ * Get all questions in quiz.\n+ *\n+ * @param state\n+ * @return {*}\n+ *\u002F\n+export function getQuestions( state ) {\n+\tconst { userQuiz } = state;\n+\tconst questions = get( userQuiz, 'questions' );\n+\treturn questions ? Object.values( questions ) : [];\n+}\n+\n+\u002F**\n+ * Get property of store data.\n+ *\n+ * @param state - Store data\n+ * @param prop - Optional. NULL will return all data.\n+ * @return {*}\n+ *\u002F\n+export function getData( state, prop ) {\n+\tconst { userQuiz } = state;\n+\n+\tif ( prop ) {\n+\t\treturn get( userQuiz, prop );\n+\t}\n+\n+\treturn userQuiz;\n+}\n+\n+export function getDefaultRestArgs( state ) {\n+\tconst { userQuiz } = state;\n+\n+\treturn {\n+\t\titemId: userQuiz.id,\n+\t\tcourseId: userQuiz.courseId,\n+\t};\n+}\n+\n+export function getQuestionAnswered( state, id ) {\n+\tconst { userQuiz } = state;\n+\n+\treturn get( userQuiz, `answered.${ id }.answered` ) || undefined;\n+}\n+\n+export function getQuestionMark( state, id ) {\n+\tconst { userQuiz } = state;\n+\n+\treturn get( userQuiz, `answered.${ id }.mark` ) || undefined;\n+}\n+\n+\u002F**\n+ * Get current question is doing.\n+ *\n+ * @param {Object} state\n+ * @param {string} ret\n+ * @return {*}\n+ *\u002F\n+export function getCurrentQuestion( state, ret = '' ) {\n+\tconst questionsPerPage = get( state, 'userQuiz.questionsPerPage' ) || 1;\n+\n+\tif ( questionsPerPage > 1 ) {\n+\t\treturn false;\n+\t}\n+\n+\tconst currentPage = get( state, 'userQuiz.currentPage' ) || 1;\n+\treturn ret === 'object' ? get( state, `userQuiz.questions[${ currentPage - 1 }]` ) : get( state, `userQuiz.questionIds[${ currentPage - 1 }]` );\n+}\n+\n+\u002F**\n+ * Return a question contains fully data with title, content, ...\n+ *\n+ * @param state\n+ * @param theId\n+ *\u002F\n+const getQuestion = function getQuestion( state, theId ) {\n+\tconst { userQuiz } = state;\n+\tconst s = select( 'learnpress\u002Fquiz' );\n+\tconst questions = s.getQuestions();\n+\n+\treturn questions.find( ( q ) => {\n+\t\treturn q.id == theId;\n+\t} );\n+};\n+\n+export { getQuestion };\n+\n+\u002F**\n+ * If user has used 'Instant check' for a question.\n+ *\n+ * @param {Object} state - Global state for app.\n+ * @param {number} id\n+ * @return {boolean}\n+ *\u002F\n+export function isCheckedAnswer( state, id ) {\n+\tconst checkedQuestions = get( state, 'userQuiz.checkedQuestions' ) || [];\n+\n+\treturn checkedQuestions.indexOf( id ) !== -1;\n+}\n+\n+export function isCorrect( state, id ) {\n+\n+}\n+\n+\u002F**\n+ * Get questions user has selected answers.\n+ *\n+ * @param {Object} state. Global app state\n+ * @param state\n+ * @param {number} questionId\n+ * @return {{}}\n+ *\u002F\n+const getQuestionsSelectedAnswers = function( state, questionId ) {\n+\tconst data = get( state, 'userQuiz.answered' );\n+\tconst returnData = {};\n+\n+\tfor ( const loopId in data ) {\n+\t\tif ( ! data.hasOwnProperty( loopId ) ) {\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\t\u002F\u002F Answer filled by user\n+\t\tif ( ( data[ loopId ].temp || data[ loopId ].blanks ) ) {\n+\t\t\t\u002F\u002F If specific a question then return it only.\n+\t\t\tif ( questionId && loopId === questionId ) {\n+\t\t\t\treturn data[ loopId ].answered;\n+\t\t\t}\n+\n+\t\t\treturnData[ loopId ] = data[ loopId ].answered;\n+\t\t}\n+\t}\n+\n+\treturn returnData;\n+};\n+\n+export { getQuestionsSelectedAnswers };\n+\n+\u002F**\n+ * Get mark user earned.\n+ * Just for questions user has used 'Instant check' button.\n+ *\n+ * @param state\n+ * @return {number}\n+ *\u002F\n+export function getUserMark( state ) {\n+\tconst userQuiz = state.userQuiz || {};\n+\tconst {\n+\t\tanswered,\n+\t\tnegativeMarking,\n+\t\tquestions,\n+\t\tcheckedQuestions,\n+\t} = userQuiz;\n+\n+\tlet totalMark = 0;\n+\n+\tfor ( let id in answered ) {\n+\t\tif ( ! answered.hasOwnProperty( id ) ) {\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tid = parseInt( id );\n+\t\tconst data = answered[ id ];\n+\t\tconst questionMark = data.questionMark ? data.questionMark : ( function() {\n+\t\t\tconst question = questions.find( ( q ) => {\n+\t\t\t\treturn q.id === id;\n+\t\t\t} );\n+\n+\t\t\treturn question ? question.point : 0;\n+\t\t}() );\n+\n+\t\tconst isChecked = checkedQuestions.indexOf( id ) !== -1;\n+\n+\t\tif ( data.temp ) {\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tif ( negativeMarking ) {\n+\t\t\tif ( data.answered ) {\n+\t\t\t\ttotalMark = data.correct ? totalMark + data.mark : totalMark - questionMark;\n+\t\t\t}\n+\t\t} else if ( data.answered && data.correct ) {\n+\t\t\ttotalMark += data.mark;\n+\t\t}\n+\t}\n+\n+\treturn totalMark > 0 ? totalMark : 0;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-import Quiz from '.\u002Fquiz\u002Findex';\r\n-import '.\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible';\r\n-\r\n-const { modal: { default: Modal } } = LP;\r\n-\r\n-export default Quiz;\r\n-\r\n-export const init = ( elem, settings ) => {\r\n-\t\u002F\u002F For no require enroll\r\n-\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\r\n-\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\r\n-\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\r\n-\r\n-\t\tif ( null !== quizDataOffStr ) {\r\n-\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\r\n-\t\t\tsettings.status = quizDataOff.status;\r\n-\t\t\tsettings.questions = quizDataOff.questions;\r\n-\r\n-\t\t\tif ( 'started' === quizDataOff.status ) {\r\n-\t\t\t\tconst now = Date.now();\r\n-\r\n-\t\t\t\tsettings.total_time = Math.floor( ( quizDataOff.endTime - now ) \u002F 1000 );\r\n-\t\t\t} else if ( 'completed' === quizDataOff.status ) {\r\n-\t\t\t\tsettings.results = quizDataOff.results;\r\n-\t\t\t\tsettings.answered = quizDataOff.results.answered;\r\n-\t\t\t\tsettings.questions = quizDataOff.results.questions;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( undefined !== quizDataOff.checked_questions ) {\r\n-\t\t\t\tsettings.checked_questions = quizDataOff.checked_questions;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( undefined !== quizDataOff.question_options ) {\r\n-\t\t\t\t\u002F\u002Fsettings.checked_questions = quizDataOff.checked_questions;\r\n-\r\n-\t\t\t\tfor ( const i in settings.questions ) {\r\n-\t\t\t\t\tconst question = settings.questions[ i ];\r\n-\r\n-\t\t\t\t\tif ( undefined !== quizDataOff.question_options[ question.id ] ) {\r\n-\t\t\t\t\t\tquestion.options = quizDataOff.question_options[ question.id ];\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tsettings.questions[ i ] = question;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002Fconsole.log(settings);\r\n-\r\n-\twp.element.render(\r\n-\t\t\u003CModal>\u003CQuiz settings={ settings } \u002F>\u003C\u002FModal>,\r\n-\t\t[ ...document.querySelectorAll( elem ) ][ 0 ]\r\n-\t);\r\n-\r\n-\tLP.Hook.doAction( 'lp-quiz-compatible-builder' );\r\n-};\r\n+import Quiz from '.\u002Fquiz\u002Findex';\n+import '.\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible';\n+\n+const { modal: { default: Modal } } = LP;\n+\n+export default Quiz;\n+\n+export const init = ( elem, settings ) => {\n+\t\u002F\u002F For no require enroll\n+\tif ( lpQuizSettings.checkNorequizenroll === 1 ) {\n+\t\tconst keyQuizOff = 'quiz_off_' + lpQuizSettings.id;\n+\t\tconst quizDataOffStr = window.localStorage.getItem( keyQuizOff );\n+\n+\t\tif ( null !== quizDataOffStr ) {\n+\t\t\tconst quizDataOff = JSON.parse( quizDataOffStr );\n+\t\t\tsettings.status = quizDataOff.status;\n+\t\t\tsettings.questions = quizDataOff.questions;\n+\n+\t\t\tif ( 'started' === quizDataOff.status ) {\n+\t\t\t\tconst now = Date.now();\n+\n+\t\t\t\tsettings.total_time = Math.floor( ( quizDataOff.endTime - now ) \u002F 1000 );\n+\t\t\t} else if ( 'completed' === quizDataOff.status ) {\n+\t\t\t\tsettings.results = quizDataOff.results;\n+\t\t\t\tsettings.answered = quizDataOff.results.answered;\n+\t\t\t\tsettings.questions = quizDataOff.results.questions;\n+\t\t\t}\n+\n+\t\t\tif ( undefined !== quizDataOff.checked_questions ) {\n+\t\t\t\tsettings.checked_questions = quizDataOff.checked_questions;\n+\t\t\t}\n+\n+\t\t\tif ( undefined !== quizDataOff.question_options ) {\n+\t\t\t\t\u002F\u002Fsettings.checked_questions = quizDataOff.checked_questions;\n+\n+\t\t\t\tfor ( const i in settings.questions ) {\n+\t\t\t\t\tconst question = settings.questions[ i ];\n+\n+\t\t\t\t\tif ( undefined !== quizDataOff.question_options[ question.id ] ) {\n+\t\t\t\t\t\tquestion.options = quizDataOff.question_options[ question.id ];\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tsettings.questions[ i ] = question;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F\u002Fconsole.log(settings);\n+\n+\twp.element.render(\n+\t\t\u003CModal>\u003CQuiz settings={ settings } \u002F>\u003C\u002FModal>,\n+\t\t[ ...document.querySelectorAll( elem ) ][ 0 ]\n+\t);\n+\n+\tLP.Hook.doAction( 'lp-quiz-compatible-builder' );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fshow-lp-overlay-complete-item.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fshow-lp-overlay-complete-item.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fshow-lp-overlay-complete-item.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fshow-lp-overlay-complete-item.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-import lpModalOverlay from '..\u002Futils\u002Flp-modal-overlay';\r\n-\r\n-const lpModalOverlayCompleteItem = {\r\n-\telBtnFinishCourse: null,\r\n-\telBtnCompleteItem: null,\r\n-\tinit() {\r\n-\t\tif ( ! lpModalOverlay.init() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( undefined === lpGlobalSettings || 'yes' !== lpGlobalSettings.option_enable_popup_confirm_finish ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.elBtnFinishCourse = document.querySelectorAll( '.lp-btn-finish-course' );\r\n-\t\tthis.elBtnCompleteItem = document.querySelector( '.lp-btn-complete-item' );\r\n-\r\n-\t\tif ( this.elBtnCompleteItem ) {\r\n-\t\t\tthis.elBtnCompleteItem.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tconst form = e.target.closest( 'form' );\r\n-\r\n-\t\t\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\t\t\tlpModalOverlay.setTitleModal( form.dataset.title );\r\n-\t\t\t\t\u002F\u002F ESC html\r\n-\t\t\t\tconst div = document.createElement( 'div' );\r\n-\t\t\t\tdiv.appendChild( document.createTextNode( form.dataset.confirm ) );\r\n-\t\t\t\tconst contentModal = div.innerHTML;\r\n-\t\t\t\t\u002F\u002F End ESC html\r\n-\t\t\t\tlpModalOverlay.setContentModal( '\u003Cdiv class=\"pd-2em\">' + contentModal + '\u003C\u002Fdiv>' );\r\n-\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\tform.submit();\r\n-\t\t\t\t};\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tif ( this.elBtnFinishCourse ) {\r\n-\t\t\tthis.elBtnFinishCourse.forEach( ( element ) => element.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tconst form = e.target.closest( 'form' );\r\n-\r\n-\t\t\t\tlpModalOverlay.elLPOverlay.show();\r\n-\t\t\t\tlpModalOverlay.setTitleModal( form.dataset.title );\r\n-\t\t\t\tlpModalOverlay.setContentModal( '\u003Cdiv class=\"pd-2em\">' + form.dataset.confirm + '\u003C\u002Fdiv>' );\r\n-\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\tform.submit();\r\n-\t\t\t\t};\r\n-\t\t\t} ) );\r\n-\t\t}\r\n-\t},\r\n-};\r\n-\r\n-export default lpModalOverlayCompleteItem;\r\n+import lpModalOverlay from '..\u002Futils\u002Flp-modal-overlay';\n+\n+const lpModalOverlayCompleteItem = {\n+\telBtnFinishCourse: null,\n+\telBtnCompleteItem: null,\n+\tinit() {\n+\t\tif ( ! lpModalOverlay.init() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( undefined === lpGlobalSettings || 'yes' !== lpGlobalSettings.option_enable_popup_confirm_finish ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.elBtnFinishCourse = document.querySelectorAll( '.lp-btn-finish-course' );\n+\t\tthis.elBtnCompleteItem = document.querySelector( '.lp-btn-complete-item' );\n+\n+\t\tif ( this.elBtnCompleteItem ) {\n+\t\t\tthis.elBtnCompleteItem.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tconst form = e.target.closest( 'form' );\n+\n+\t\t\t\tlpModalOverlay.elLPOverlay.show();\n+\t\t\t\tlpModalOverlay.setTitleModal( form.dataset.title );\n+\t\t\t\t\u002F\u002F ESC html\n+\t\t\t\tconst div = document.createElement( 'div' );\n+\t\t\t\tdiv.appendChild( document.createTextNode( form.dataset.confirm ) );\n+\t\t\t\tconst contentModal = div.innerHTML;\n+\t\t\t\t\u002F\u002F End ESC html\n+\t\t\t\tlpModalOverlay.setContentModal( '\u003Cdiv class=\"pd-2em\">' + contentModal + '\u003C\u002Fdiv>' );\n+\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\tform.submit();\n+\t\t\t\t};\n+\t\t\t} );\n+\t\t}\n+\n+\t\tif ( this.elBtnFinishCourse ) {\n+\t\t\tthis.elBtnFinishCourse.forEach( ( element ) => element.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tconst form = e.target.closest( 'form' );\n+\n+\t\t\t\tlpModalOverlay.elLPOverlay.show();\n+\t\t\t\tlpModalOverlay.setTitleModal( form.dataset.title );\n+\t\t\t\tlpModalOverlay.setContentModal( '\u003Cdiv class=\"pd-2em\">' + form.dataset.confirm + '\u003C\u002Fdiv>' );\n+\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\tform.submit();\n+\t\t\t\t};\n+\t\t\t} ) );\n+\t\t}\n+\t},\n+};\n+\n+export default lpModalOverlayCompleteItem;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-import { Component } from '@wordpress\u002Felement';\r\n-import Quiz from '@learnpress\u002Fquiz';\r\n-\r\n-import '.\u002Fstore';\r\n-\r\n-import { Sidebar } from '..\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar'; \u002F\u002F Use toggle in Curriculum tab.\r\n-\r\n-class SingleCourse extends Component {\r\n-\trender() {\r\n-\t\treturn (\r\n-\t\t\t\u003C>\r\n-\t\t\t\u003C\u002F>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default SingleCourse;\r\n-\r\n-function run() {\r\n-\tSidebar();\r\n-}\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', () => {\r\n-\trun();\r\n-} );\r\n-\r\n+import { Component } from '@wordpress\u002Felement';\n+import Quiz from '@learnpress\u002Fquiz';\n+\n+import '.\u002Fstore';\n+\n+import { Sidebar } from '..\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar'; \u002F\u002F Use toggle in Curriculum tab.\n+\n+class SingleCourse extends Component {\n+\trender() {\n+\t\treturn (\n+\t\t\t\u003C>\n+\t\t\t\u003C\u002F>\n+\t\t);\n+\t}\n+}\n+\n+export default SingleCourse;\n+\n+function run() {\n+\tSidebar();\n+}\n+\n+document.addEventListener( 'DOMContentLoaded', () => {\n+\trun();\n+} );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstore\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstore\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstore\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstore\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-\u002F**\r\n- * Created by tu on 9\u002F19\u002F19.\r\n- *\u002F\r\n+\u002F**\n+ * Created by tu on 9\u002F19\u002F19.\n+ *\u002F\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstudent-list.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstudent-list.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstudent-list.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course\u002Fstudent-list.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,96 @@\n-\r\n-const studentListCourse = () => {\r\n-\tconst elementStudentList = document.querySelector( '.learnpress-course-student-list' );\r\n-\r\n-\tif ( ! elementStudentList ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst skeleton = elementStudentList.querySelector( '.lp-skeleton-animation' );\r\n-\tconst eleParents = elementStudentList.querySelector( '.content-student-list' );\r\n-\r\n-\tconst Sekeleton = () => {\r\n-\t\tconst extraQuery = {\r\n-\t\t\tstatus: '',\r\n-\t\t\tpaged: 1,\r\n-\t\t};\r\n-\r\n-\t\tgetResponse( eleParents, extraQuery );\r\n-\r\n-\t\tconst select = document.querySelector( '.students-list-filter' );\r\n-\r\n-\t\tif ( select != null ) {\r\n-\t\t\tselect.addEventListener( 'change', function() {\r\n-\t\t\t\teleParents.innerHTML = '';\r\n-\t\t\t\tskeleton.style.display = 'block';\r\n-\t\t\t\textraQuery.status = this.value;\r\n-\t\t\t\tgetResponse( eleParents, extraQuery );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tconst getResponse = async ( ele, extraQuery, append = false, viewMoreEle ) => {\r\n-\t\tconst courseID = ele.dataset.id;\r\n-\t\tconst statusFilter = extraQuery?.status || '';\r\n-\t\tconst paged = extraQuery?.paged || 1;\r\n-\r\n-\t\ttry {\r\n-\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Flazy-load\u002Fstudent-list', {\r\n-\t\t\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\r\n-\t\t\t\t\tstatus: statusFilter,\r\n-\t\t\t\t\tpaged,\r\n-\t\t\t\t} ),\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t} );\r\n-\r\n-\t\t\tconst { data, status, message } = response;\r\n-\r\n-\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( append ) {\r\n-\t\t\t\tele.innerHTML += data.content;\r\n-\t\t\t} else {\r\n-\t\t\t\tele.innerHTML = data.content;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( viewMoreEle ) {\r\n-\t\t\t\tviewMoreEle.classList.remove( 'loading' );\r\n-\r\n-\t\t\t\tconst paged = viewMoreEle.dataset.paged;\r\n-\t\t\t\tconst numberPage = viewMoreEle.dataset.number;\r\n-\r\n-\t\t\t\tif ( numberPage \u003C= paged ) {\r\n-\t\t\t\t\tviewMoreEle.remove();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tviewMoreEle.dataset.paged = parseInt( paged ) + 1;\r\n-\t\t\t}\r\n-\t\t\tviewMoreStudentList( ele, extraQuery );\r\n-\t\t} catch ( error ) {\r\n-\t\t\tele.insertAdjacentHTML( 'beforeend', `\u003Cdiv class=\"learn-press-message error\" style=\"display:block\">${ error.message || 'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-student-list' }\u003C\u002Fdiv>` );\r\n-\t\t}\r\n-\r\n-\t\tskeleton.style.display = 'none';\r\n-\t};\r\n-\r\n-\tconst viewMoreStudentList = ( ele, extraQuery ) => {\r\n-\t\tconst viewMoreEle = ele.querySelector( '.lp_student_list_button button.lp-button' );\r\n-\r\n-\t\tif ( viewMoreEle ) {\r\n-\t\t\tviewMoreEle.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tconst paged = viewMoreEle && viewMoreEle.dataset.paged;\r\n-\r\n-\t\t\t\tviewMoreEle.classList.add( 'loading' );\r\n-\r\n-\t\t\t\tgetResponse( ele.querySelector( 'ul.students' ), { ...extraQuery, ...{ paged } }, true, viewMoreEle );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tSekeleton();\r\n-};\r\n+\n+const studentListCourse = () => {\n+\tconst elementStudentList = document.querySelector( '.learnpress-course-student-list' );\n+\n+\tif ( ! elementStudentList ) {\n+\t\treturn;\n+\t}\n+\n+\tconst skeleton = elementStudentList.querySelector( '.lp-skeleton-animation' );\n+\tconst eleParents = elementStudentList.querySelector( '.content-student-list' );\n+\n+\tconst Sekeleton = () => {\n+\t\tconst extraQuery = {\n+\t\t\tstatus: '',\n+\t\t\tpaged: 1,\n+\t\t};\n+\n+\t\tgetResponse( eleParents, extraQuery );\n+\n+\t\tconst select = document.querySelector( '.students-list-filter' );\n+\n+\t\tif ( select != null ) {\n+\t\t\tselect.addEventListener( 'change', function() {\n+\t\t\t\teleParents.innerHTML = '';\n+\t\t\t\tskeleton.style.display = 'block';\n+\t\t\t\textraQuery.status = this.value;\n+\t\t\t\tgetResponse( eleParents, extraQuery );\n+\t\t\t} );\n+\t\t}\n+\t};\n+\n+\tconst getResponse = async ( ele, extraQuery, append = false, viewMoreEle ) => {\n+\t\tconst courseID = ele.dataset.id;\n+\t\tconst statusFilter = extraQuery?.status || '';\n+\t\tconst paged = extraQuery?.paged || 1;\n+\n+\t\ttry {\n+\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Flazy-load\u002Fstudent-list', {\n+\t\t\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\n+\t\t\t\t\tstatus: statusFilter,\n+\t\t\t\t\tpaged,\n+\t\t\t\t} ),\n+\t\t\t\tmethod: 'GET',\n+\t\t\t} );\n+\n+\t\t\tconst { data, status, message } = response;\n+\n+\t\t\tif ( status === 'error' ) {\n+\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t}\n+\n+\t\t\tif ( append ) {\n+\t\t\t\tele.innerHTML += data.content;\n+\t\t\t} else {\n+\t\t\t\tele.innerHTML = data.content;\n+\t\t\t}\n+\n+\t\t\tif ( viewMoreEle ) {\n+\t\t\t\tviewMoreEle.classList.remove( 'loading' );\n+\n+\t\t\t\tconst paged = viewMoreEle.dataset.paged;\n+\t\t\t\tconst numberPage = viewMoreEle.dataset.number;\n+\n+\t\t\t\tif ( numberPage \u003C= paged ) {\n+\t\t\t\t\tviewMoreEle.remove();\n+\t\t\t\t}\n+\n+\t\t\t\tviewMoreEle.dataset.paged = parseInt( paged ) + 1;\n+\t\t\t}\n+\t\t\tviewMoreStudentList( ele, extraQuery );\n+\t\t} catch ( error ) {\n+\t\t\tele.insertAdjacentHTML( 'beforeend', `\u003Cdiv class=\"learn-press-message error\" style=\"display:block\">${ error.message || 'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-student-list' }\u003C\u002Fdiv>` );\n+\t\t}\n+\n+\t\tskeleton.style.display = 'none';\n+\t};\n+\n+\tconst viewMoreStudentList = ( ele, extraQuery ) => {\n+\t\tconst viewMoreEle = ele.querySelector( '.lp_student_list_button button.lp-button' );\n+\n+\t\tif ( viewMoreEle ) {\n+\t\t\tviewMoreEle.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tconst paged = viewMoreEle && viewMoreEle.dataset.paged;\n+\n+\t\t\t\tviewMoreEle.classList.add( 'loading' );\n+\n+\t\t\t\tgetResponse( ele.querySelector( 'ul.students' ), { ...extraQuery, ...{ paged } }, true, viewMoreEle );\n+\t\t\t} );\n+\t\t}\n+\t};\n+\n+\tSekeleton();\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,446 +1,446 @@\n-import SingleCourse from '.\u002Fsingle-course\u002Findex';\r\n-import lpModalOverlayCompleteItem from '.\u002Fshow-lp-overlay-complete-item';\r\n-import lpModalOverlay from '..\u002Futils\u002Flp-modal-overlay';\r\n-import courseCurriculumSkeleton from '.\u002Fsingle-curriculum\u002Fskeleton';\r\n-import lpMaterialsLoad from '.\u002Fmaterial';\r\n-import TabsDragScroll from '.\u002Ftabs-scroll';\r\n-import { lpSetLoadingEl } from '..\u002F..\u002F..\u002Fjs\u002Futils.js';\r\n-import Toastify from 'toastify-js';\r\n-import 'toastify-js\u002Fsrc\u002Ftoastify.css';\r\n-import LPCopyToClipboard from '..\u002F..\u002F..\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js';\r\n-\r\n-export default SingleCourse;\r\n-\r\n-export const init = () => {\r\n-\twp.element.render(\r\n-\t\t\u003CSingleCourse \u002F>,\r\n-\t);\r\n-};\r\n-\r\n-const $ = jQuery;\r\n-\r\n-const initCourseTabs = function() {\r\n-\t$( '#learn-press-course-tabs' ).on(\r\n-\t\t'change',\r\n-\t\t'input[name=\"learn-press-course-tab-radio\"]',\r\n-\t\tfunction( e ) {\r\n-\t\t\tconst selectedTab = $( 'input[name=\"learn-press-course-tab-radio\"]:checked' ).val();\r\n-\r\n-\t\t\tLP.Cookies.set( 'course-tab', selectedTab );\r\n-\r\n-\t\t\t$( 'label[for=\"' + $( e.target ).attr( 'id' ) + '\"]' ).closest( 'li' ).addClass( 'active' ).siblings().removeClass( 'active' );\r\n-\t\t}\r\n-\t);\r\n-};\r\n-\r\n-const initCourseSidebar = function initCourseSidebar() {\r\n-\tconst $sidebar = $( '.course-summary-sidebar' );\r\n-\r\n-\tif ( ! $sidebar.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst $window = $( window );\r\n-\tconst $scrollable = $sidebar.children();\r\n-\tconst offset = $sidebar.offset();\r\n-\tlet scrollTop = 0;\r\n-\tconst maxHeight = $sidebar.height();\r\n-\tconst scrollHeight = $scrollable.height();\r\n-\tconst options = {\r\n-\t\toffsetTop: 32,\r\n-\t};\r\n-\r\n-\tconst onScroll = function() {\r\n-\t\tscrollTop = $window.scrollTop();\r\n-\r\n-\t\tconst top = scrollTop - offset.top + options.offsetTop;\r\n-\r\n-\t\tif ( top \u003C 0 ) {\r\n-\t\t\t$sidebar.removeClass( 'slide-top slide-down' );\r\n-\t\t\t$scrollable.css( 'top', '' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( top > maxHeight - scrollHeight ) {\r\n-\t\t\t$sidebar.removeClass( 'slide-down' ).addClass( 'slide-top' );\r\n-\t\t\t$scrollable.css( 'top', maxHeight - scrollHeight );\r\n-\t\t} else {\r\n-\t\t\t$sidebar.removeClass( 'slide-top' ).addClass( 'slide-down' );\r\n-\t\t\t$scrollable.css( 'top', options.offsetTop );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t$window.on( 'scroll.fixed-course-sidebar', onScroll ).trigger( 'scroll.fixed-course-sidebar' );\r\n-};\r\n-\r\n-\u002F\u002F Rest API Enroll course - Nhamdv.\r\n-const enrollCourse = () => {\r\n-\tconst formEnrolls = document.querySelectorAll( 'form.enroll-course' );\r\n-\r\n-\tif ( formEnrolls.length > 0 ) {\r\n-\t\tformEnrolls.forEach( ( formEnroll ) => {\r\n-\t\t\tconst submit = async ( id, btnEnroll ) => {\r\n-\t\t\t\tconst status = 'error';\r\n-\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fenroll-course',\r\n-\t\t\t\t\t\tmethod: 'POST',\r\n-\t\t\t\t\t\tdata: { id },\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tconst { status, data: { redirect }, message } = response;\r\n-\r\n-\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\tbtnEnroll.remove();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tlpSetLoadingEl( btnEnroll, 0 );\r\n-\t\t\t\t\t\tthrow new Error( message );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( message && status ) {\r\n-\t\t\t\t\t\tformEnroll.innerHTML += `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\r\n-\t\t\t\t\t\tif ( redirect ) {\r\n-\t\t\t\t\t\t\twindow.location.href = redirect;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} catch ( error ) {\r\n-\t\t\t\t\tToastify( {\r\n-\t\t\t\t\t\ttext: error.message,\r\n-\t\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\t\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\t\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\r\n-\t\t\t\t\t\tclose: lpData.toast.close == 1,\r\n-\t\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\t\t\t\t\t\tduration: lpData.toast.duration,\r\n-\t\t\t\t\t} ).showToast();\r\n-\t\t\t\t}\r\n-\t\t\t};\r\n-\r\n-\t\t\tformEnroll.addEventListener( 'submit', ( event ) => {\r\n-\t\t\t\tevent.preventDefault();\r\n-\t\t\t\tconst id = formEnroll.querySelector( 'input[name=enroll-course]' ).value;\r\n-\t\t\t\tconst btnEnroll = formEnroll.querySelector( 'button.button-enroll-course' );\r\n-\t\t\t\tlpSetLoadingEl( btnEnroll, 1 );\r\n-\t\t\t\tsubmit( id, btnEnroll );\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Reload when press back button in chrome.\r\n-\tif ( document.querySelector( '.course-detail-info' ) !== null ) {\r\n-\t\twindow.addEventListener( 'pageshow', ( event ) => {\r\n-\t\t\tconst hasCache = event.persisted || ( typeof window.performance != 'undefined' && String( window.performance.getEntriesByType( 'navigation' )[ 0 ].type ) == 'back_forward' );\r\n-\t\t\tif ( hasCache ) {\r\n-\t\t\t\tlocation.reload();\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F Rest API purchase course - Nhamdv.\r\n-const purchaseCourse = () => {\r\n-\tconst forms = document.querySelectorAll( 'form.purchase-course' );\r\n-\r\n-\tif ( forms.length > 0 ) {\r\n-\t\tforms.forEach( ( form ) => {\r\n-\t\t\t\u002F\u002F Allow Repurchase.\r\n-\t\t\tconst allowRepurchase = () => {\r\n-\t\t\t\tconst continueRepurchases = document.querySelectorAll( '.lp_allow_repurchase_select' );\r\n-\r\n-\t\t\t\tcontinueRepurchases.forEach( ( repurchase ) => {\r\n-\t\t\t\t\tconst radios = repurchase.querySelectorAll( '[name=_lp_allow_repurchase_type]' );\r\n-\r\n-\t\t\t\t\tfor ( let i = 0, length = radios.length; i \u003C length; i++ ) {\r\n-\t\t\t\t\t\tif ( radios[ i ].checked ) {\r\n-\t\t\t\t\t\t\tconst repurchaseType = radios[ i ].value;\r\n-\t\t\t\t\t\t\tconst id = form.querySelector( 'input[name=purchase-course]' ).value;\r\n-\r\n-\t\t\t\t\t\t\tconst btnBuyNow = form.querySelector( 'button.button-purchase-course' );\r\n-\t\t\t\t\t\t\tlpSetLoadingEl( btnBuyNow, 1 );\r\n-\r\n-\t\t\t\t\t\t\tsubmit( id, btnBuyNow, repurchaseType );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\t\t\t};\r\n-\r\n-\t\t\tconst submit = async ( id, btn, repurchaseType = false ) => {\r\n-\t\t\t\tconst status = 'error';\r\n-\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tconst formData = new FormData( form );\r\n-\t\t\t\t\tconst dataSend = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\r\n-\t\t\t\t\t\tconst val = formData.getAll( key );\r\n-\r\n-\t\t\t\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\r\n-\t\t\t\t\t} ) );\r\n-\r\n-\t\t\t\t\tdataSend.id = id;\r\n-\t\t\t\t\tdataSend.repurchaseType = repurchaseType;\r\n-\r\n-\t\t\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fpurchase-course',\r\n-\t\t\t\t\t\tmethod: 'POST',\r\n-\t\t\t\t\t\tdata: dataSend,\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tconst { status, data: { redirect, type, html, titlePopup }, message } = response;\r\n-\r\n-\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\tif ( type === 'allow_repurchase' ) {\r\n-\t\t\t\t\t\t\tlpSetLoadingEl( btn, 0 );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tbtn.remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tlpSetLoadingEl( btn, 0 );\r\n-\t\t\t\t\t\tthrow new Error( message );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( type === 'allow_repurchase' && status === 'success' ) {\r\n-\t\t\t\t\t\tif ( ! form.querySelector( '.lp_allow_repurchase_select' ) ) {\r\n-\t\t\t\t\t\t\tif ( ! lpModalOverlay.init() ) {\r\n-\t\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tlpModalOverlay.elLPOverlay.show();\r\n-\r\n-\t\t\t\t\t\t\tlpModalOverlay.setTitleModal( titlePopup || '' );\r\n-\r\n-\t\t\t\t\t\t\tlpModalOverlay.setContentModal( html );\r\n-\r\n-\t\t\t\t\t\t\tlpModalOverlay.callBackYes = () => {\r\n-\t\t\t\t\t\t\t\tlpModalOverlay.elLPOverlay.hide();\r\n-\r\n-\t\t\t\t\t\t\t\tallowRepurchase();\r\n-\t\t\t\t\t\t\t};\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else if ( message && status ) {\r\n-\t\t\t\t\t\tform.innerHTML += `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\r\n-\r\n-\t\t\t\t\t\tif ( 'success' === status && redirect ) {\r\n-\t\t\t\t\t\t\twindow.location.href = redirect;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} catch ( error ) {\r\n-\t\t\t\t\tToastify( {\r\n-\t\t\t\t\t\ttext: error.message,\r\n-\t\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\t\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\t\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\r\n-\t\t\t\t\t\tclose: lpData.toast.close == 1,\r\n-\t\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\t\t\t\t\t\tduration: lpData.toast.duration,\r\n-\t\t\t\t\t} ).showToast();\r\n-\t\t\t\t}\r\n-\t\t\t};\r\n-\r\n-\t\t\tform.addEventListener( 'submit', ( event ) => {\r\n-\t\t\t\tevent.preventDefault();\r\n-\t\t\t\tconst id = form.querySelector( 'input[name=purchase-course]' ).value;\r\n-\t\t\t\tconst btn = form.querySelector( 'button.button-purchase-course' );\r\n-\t\t\t\tlpSetLoadingEl( btn, 1 );\r\n-\t\t\t\tsubmit( id, btn );\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-const retakeCourse = () => {\r\n-\tconst elFormRetakeCourses = document.querySelectorAll( '.lp-form-retake-course' );\r\n-\r\n-\tif ( ! elFormRetakeCourses.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\telFormRetakeCourses.forEach( ( elFormRetakeCourse ) => {\r\n-\t\tconst elButtonRetakeCourses = elFormRetakeCourse.querySelector( '.button-retake-course' );\r\n-\t\tconst elCourseId = elFormRetakeCourse.querySelector( '[name=retake-course]' ).value;\r\n-\t\tconst elAjaxMessage = elFormRetakeCourse.querySelector( '.lp-ajax-message' );\r\n-\t\tconst submit = ( elButtonRetakeCourse ) => {\r\n-\t\t\twp.apiFetch( {\r\n-\t\t\t\tpath: '\u002Flp\u002Fv1\u002Fcourses\u002Fretake-course',\r\n-\t\t\t\tmethod: 'POST',\r\n-\t\t\t\tdata: { id: elCourseId },\r\n-\t\t\t} ).then( ( res ) => {\r\n-\t\t\t\tconst { status, message, data } = res;\r\n-\t\t\t\telAjaxMessage.innerHTML = message;\r\n-\r\n-\t\t\t\tif ( undefined != status && status === 'success' ) {\r\n-\t\t\t\t\telButtonRetakeCourse.style.display = 'none';\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\twindow.location.replace( data.url_redirect );\r\n-\t\t\t\t\t}, 1000 );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telAjaxMessage.classList.add( 'error' );\r\n-\t\t\t\t}\r\n-\t\t\t} ).catch( ( err ) => {\r\n-\t\t\t\telAjaxMessage.classList.add( 'error' );\r\n-\t\t\t\telAjaxMessage.innerHTML = 'error: ' + err.message;\r\n-\t\t\t} ).then( () => {\r\n-\t\t\t\telButtonRetakeCourse.classList.remove( 'loading' );\r\n-\t\t\t\telButtonRetakeCourse.disabled = false;\r\n-\t\t\t\telAjaxMessage.style.display = 'block';\r\n-\t\t\t} );\r\n-\t\t};\r\n-\r\n-\t\telFormRetakeCourse.addEventListener( 'submit', ( e ) => {\r\n-\t\t\te.preventDefault();\r\n-\t\t} );\r\n-\r\n-\t\telButtonRetakeCourses.addEventListener(\r\n-\t\t\t'click',\r\n-\t\t\t( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\telButtonRetakeCourses.classList.add( 'loading' );\r\n-\t\t\t\telButtonRetakeCourses.disabled = true;\r\n-\t\t\t\tsubmit( elButtonRetakeCourses );\r\n-\t\t\t}\r\n-\t\t);\r\n-\t} );\r\n-};\r\n-\r\n-\u002F\u002F Rest API load content course progress - Nhamdv.\r\n-const courseProgress = () => {\r\n-\tconst elements = document.querySelectorAll( '.lp-course-progress-wrapper' );\r\n-\r\n-\tif ( ! elements.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( 'IntersectionObserver' in window ) {\r\n-\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\r\n-\t\t\tentries.forEach( ( entry ) => {\r\n-\t\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\t\tconst ele = entry.target;\r\n-\r\n-\t\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t\tgetResponse( ele );\r\n-\t\t\t\t\t}, 600 );\r\n-\r\n-\t\t\t\t\teleObserver.unobserve( ele );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\t[ ...elements ].map( ( ele ) => eleObserver.observe( ele ) );\r\n-\t}\r\n-\r\n-\tconst getResponse = async ( ele ) => {\r\n-\t\tlet url = 'lp\u002Fv1\u002Flazy-load\u002Fcourse-progress';\r\n-\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\r\n-\t\t\turl += '?lang=' + lpData.urlParams.lang;\r\n-\t\t}\r\n-\r\n-\t\tconst response = await wp.apiFetch( {\r\n-\t\t\tpath: url,\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tdata: {\r\n-\t\t\t\tcourseId: lpGlobalSettings.post_id || '',\r\n-\t\t\t\tuserId: lpData.user_id || '',\r\n-\t\t\t},\r\n-\t\t} );\r\n-\r\n-\t\tconst { data } = response;\r\n-\r\n-\t\tele.innerHTML = data;\r\n-\t};\r\n-};\r\n-\r\n-const accordionExtraTab = () => {\r\n-\tconst elements = document.querySelectorAll( '.course-extra-box' );\r\n-\t[ ...elements ].map( ( ele ) => {\r\n-\t\tconst title = ele.querySelector( '.course-extra-box__title' );\r\n-\t\tele.classList.remove( 'active' );\r\n-\t\tconst content = ele.querySelector( '.course-extra-box__content' );\r\n-\t\tcontent.style.height = '0';\r\n-\r\n-\t\ttitle.addEventListener( 'click', () => {\r\n-\t\t\tconst isActive = ele.classList.contains( 'active' );\r\n-\r\n-\t\t\t[ ...elements ].forEach( ( otherEle ) => {\r\n-\t\t\t\tif ( otherEle !== ele ) {\r\n-\t\t\t\t\totherEle.classList.remove( 'active' );\r\n-\t\t\t\t\totherEle.querySelector( '.course-extra-box__content' ).style.height = '0';\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\r\n-\t\t\tif ( isActive ) {\r\n-\t\t\t\tele.classList.remove( 'active' );\r\n-\t\t\t\tcontent.style.height = '0';\r\n-\t\t\t} else {\r\n-\t\t\t\tele.classList.add( 'active' );\r\n-\t\t\t\tcontent.style.height = content.scrollHeight + 'px';\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n-\r\n-const courseContinue = () => {\r\n-\tconst formContinue = document.querySelectorAll( 'form.continue-course' );\r\n-\tif ( formContinue.length && lpData.user_id > 0 ) {\r\n-\t\tconst getResponse = async ( ele ) => {\r\n-\t\t\tconst response = await wp.apiFetch( {\r\n-\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fcontinue-course',\r\n-\t\t\t\tmethod: 'POST',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\tcourseId: lpGlobalSettings.post_id || '',\r\n-\t\t\t\t\tuserId: lpGlobalSettings.user_id || '',\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\r\n-\t\t\treturn response;\r\n-\t\t};\r\n-\r\n-\t\tgetResponse( formContinue ).then( function( result ) {\r\n-\t\t\tif ( result.status === 'success' ) {\r\n-\t\t\t\tformContinue.forEach( ( form ) => {\r\n-\t\t\t\t\tform.style.display = 'inline-block';\r\n-\t\t\t\t\tform.action = result.data;\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-export {\r\n-\tinitCourseTabs,\r\n-\tinitCourseSidebar,\r\n-\tenrollCourse,\r\n-};\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function() {\r\n-\tconst $popup = $( '#popup-course' );\r\n-\tlet timerClearScroll;\r\n-\tconst $curriculum = $( '#learn-press-course-curriculum' );\r\n-\taccordionExtraTab();\r\n-\tinitCourseTabs();\r\n-\tinitCourseSidebar();\r\n-\tenrollCourse();\r\n-\tpurchaseCourse();\r\n-\tretakeCourse();\r\n-\tcourseProgress();\r\n-\tcourseContinue();\r\n-\tlpModalOverlayCompleteItem.init();\r\n-\tlpMaterialsLoad();\r\n-\t\u002F\u002FcourseCurriculumSkeleton();\r\n-\tTabsDragScroll();\r\n-\tLPCopyToClipboard();\r\n-} );\r\n-\r\n-const detectedElCurriculum = setInterval( function() {\r\n-\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\r\n-\tif ( elementCurriculum ) {\r\n-\t\tcourseCurriculumSkeleton();\r\n-\r\n-\t\tclearInterval( detectedElCurriculum );\r\n-\t}\r\n-}, 1 );\r\n-\r\n-\u002F\u002F Add callback for Thimkits\r\n-LP.Hook.addAction( 'lp_course_curriculum_skeleton', function( id ) {\r\n-\tcourseCurriculumSkeleton( id );\r\n-} );\r\n-\r\n+import SingleCourse from '.\u002Fsingle-course\u002Findex';\n+import lpModalOverlayCompleteItem from '.\u002Fshow-lp-overlay-complete-item';\n+import lpModalOverlay from '..\u002Futils\u002Flp-modal-overlay';\n+import courseCurriculumSkeleton from '.\u002Fsingle-curriculum\u002Fskeleton';\n+import lpMaterialsLoad from '.\u002Fmaterial';\n+import TabsDragScroll from '.\u002Ftabs-scroll';\n+import { lpSetLoadingEl } from '..\u002F..\u002F..\u002Fjs\u002Futils.js';\n+import Toastify from 'toastify-js';\n+import 'toastify-js\u002Fsrc\u002Ftoastify.css';\n+import LPCopyToClipboard from '..\u002F..\u002F..\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js';\n+\n+export default SingleCourse;\n+\n+export const init = () => {\n+\twp.element.render(\n+\t\t\u003CSingleCourse \u002F>,\n+\t);\n+};\n+\n+const $ = jQuery;\n+\n+const initCourseTabs = function() {\n+\t$( '#learn-press-course-tabs' ).on(\n+\t\t'change',\n+\t\t'input[name=\"learn-press-course-tab-radio\"]',\n+\t\tfunction( e ) {\n+\t\t\tconst selectedTab = $( 'input[name=\"learn-press-course-tab-radio\"]:checked' ).val();\n+\n+\t\t\tLP.Cookies.set( 'course-tab', selectedTab );\n+\n+\t\t\t$( 'label[for=\"' + $( e.target ).attr( 'id' ) + '\"]' ).closest( 'li' ).addClass( 'active' ).siblings().removeClass( 'active' );\n+\t\t}\n+\t);\n+};\n+\n+const initCourseSidebar = function initCourseSidebar() {\n+\tconst $sidebar = $( '.course-summary-sidebar' );\n+\n+\tif ( ! $sidebar.length ) {\n+\t\treturn;\n+\t}\n+\n+\tconst $window = $( window );\n+\tconst $scrollable = $sidebar.children();\n+\tconst offset = $sidebar.offset();\n+\tlet scrollTop = 0;\n+\tconst maxHeight = $sidebar.height();\n+\tconst scrollHeight = $scrollable.height();\n+\tconst options = {\n+\t\toffsetTop: 32,\n+\t};\n+\n+\tconst onScroll = function() {\n+\t\tscrollTop = $window.scrollTop();\n+\n+\t\tconst top = scrollTop - offset.top + options.offsetTop;\n+\n+\t\tif ( top \u003C 0 ) {\n+\t\t\t$sidebar.removeClass( 'slide-top slide-down' );\n+\t\t\t$scrollable.css( 'top', '' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( top > maxHeight - scrollHeight ) {\n+\t\t\t$sidebar.removeClass( 'slide-down' ).addClass( 'slide-top' );\n+\t\t\t$scrollable.css( 'top', maxHeight - scrollHeight );\n+\t\t} else {\n+\t\t\t$sidebar.removeClass( 'slide-top' ).addClass( 'slide-down' );\n+\t\t\t$scrollable.css( 'top', options.offsetTop );\n+\t\t}\n+\t};\n+\n+\t$window.on( 'scroll.fixed-course-sidebar', onScroll ).trigger( 'scroll.fixed-course-sidebar' );\n+};\n+\n+\u002F\u002F Rest API Enroll course - Nhamdv.\n+const enrollCourse = () => {\n+\tconst formEnrolls = document.querySelectorAll( 'form.enroll-course' );\n+\n+\tif ( formEnrolls.length > 0 ) {\n+\t\tformEnrolls.forEach( ( formEnroll ) => {\n+\t\t\tconst submit = async ( id, btnEnroll ) => {\n+\t\t\t\tconst status = 'error';\n+\n+\t\t\t\ttry {\n+\t\t\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fenroll-course',\n+\t\t\t\t\t\tmethod: 'POST',\n+\t\t\t\t\t\tdata: { id },\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tconst { status, data: { redirect }, message } = response;\n+\n+\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\tbtnEnroll.remove();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlpSetLoadingEl( btnEnroll, 0 );\n+\t\t\t\t\t\tthrow new Error( message );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( message && status ) {\n+\t\t\t\t\t\tformEnroll.innerHTML += `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\n+\t\t\t\t\t\tif ( redirect ) {\n+\t\t\t\t\t\t\twindow.location.href = redirect;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} catch ( error ) {\n+\t\t\t\t\tToastify( {\n+\t\t\t\t\t\ttext: error.message,\n+\t\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\t\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\t\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\n+\t\t\t\t\t\tclose: lpData.toast.close == 1,\n+\t\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\t\t\t\t\t\tduration: lpData.toast.duration,\n+\t\t\t\t\t} ).showToast();\n+\t\t\t\t}\n+\t\t\t};\n+\n+\t\t\tformEnroll.addEventListener( 'submit', ( event ) => {\n+\t\t\t\tevent.preventDefault();\n+\t\t\t\tconst id = formEnroll.querySelector( 'input[name=enroll-course]' ).value;\n+\t\t\t\tconst btnEnroll = formEnroll.querySelector( 'button.button-enroll-course' );\n+\t\t\t\tlpSetLoadingEl( btnEnroll, 1 );\n+\t\t\t\tsubmit( id, btnEnroll );\n+\t\t\t} );\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Reload when press back button in chrome.\n+\tif ( document.querySelector( '.course-detail-info' ) !== null ) {\n+\t\twindow.addEventListener( 'pageshow', ( event ) => {\n+\t\t\tconst hasCache = event.persisted || ( typeof window.performance != 'undefined' && String( window.performance.getEntriesByType( 'navigation' )[ 0 ].type ) == 'back_forward' );\n+\t\t\tif ( hasCache ) {\n+\t\t\t\tlocation.reload();\n+\t\t\t}\n+\t\t} );\n+\t}\n+};\n+\n+\u002F\u002F Rest API purchase course - Nhamdv.\n+const purchaseCourse = () => {\n+\tconst forms = document.querySelectorAll( 'form.purchase-course' );\n+\n+\tif ( forms.length > 0 ) {\n+\t\tforms.forEach( ( form ) => {\n+\t\t\t\u002F\u002F Allow Repurchase.\n+\t\t\tconst allowRepurchase = () => {\n+\t\t\t\tconst continueRepurchases = document.querySelectorAll( '.lp_allow_repurchase_select' );\n+\n+\t\t\t\tcontinueRepurchases.forEach( ( repurchase ) => {\n+\t\t\t\t\tconst radios = repurchase.querySelectorAll( '[name=_lp_allow_repurchase_type]' );\n+\n+\t\t\t\t\tfor ( let i = 0, length = radios.length; i \u003C length; i++ ) {\n+\t\t\t\t\t\tif ( radios[ i ].checked ) {\n+\t\t\t\t\t\t\tconst repurchaseType = radios[ i ].value;\n+\t\t\t\t\t\t\tconst id = form.querySelector( 'input[name=purchase-course]' ).value;\n+\n+\t\t\t\t\t\t\tconst btnBuyNow = form.querySelector( 'button.button-purchase-course' );\n+\t\t\t\t\t\t\tlpSetLoadingEl( btnBuyNow, 1 );\n+\n+\t\t\t\t\t\t\tsubmit( id, btnBuyNow, repurchaseType );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\t\t\t};\n+\n+\t\t\tconst submit = async ( id, btn, repurchaseType = false ) => {\n+\t\t\t\tconst status = 'error';\n+\n+\t\t\t\ttry {\n+\t\t\t\t\tconst formData = new FormData( form );\n+\t\t\t\t\tconst dataSend = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\n+\t\t\t\t\t\tconst val = formData.getAll( key );\n+\n+\t\t\t\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\n+\t\t\t\t\t} ) );\n+\n+\t\t\t\t\tdataSend.id = id;\n+\t\t\t\t\tdataSend.repurchaseType = repurchaseType;\n+\n+\t\t\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fpurchase-course',\n+\t\t\t\t\t\tmethod: 'POST',\n+\t\t\t\t\t\tdata: dataSend,\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tconst { status, data: { redirect, type, html, titlePopup }, message } = response;\n+\n+\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\tif ( type === 'allow_repurchase' ) {\n+\t\t\t\t\t\t\tlpSetLoadingEl( btn, 0 );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tbtn.remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlpSetLoadingEl( btn, 0 );\n+\t\t\t\t\t\tthrow new Error( message );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( type === 'allow_repurchase' && status === 'success' ) {\n+\t\t\t\t\t\tif ( ! form.querySelector( '.lp_allow_repurchase_select' ) ) {\n+\t\t\t\t\t\t\tif ( ! lpModalOverlay.init() ) {\n+\t\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tlpModalOverlay.elLPOverlay.show();\n+\n+\t\t\t\t\t\t\tlpModalOverlay.setTitleModal( titlePopup || '' );\n+\n+\t\t\t\t\t\t\tlpModalOverlay.setContentModal( html );\n+\n+\t\t\t\t\t\t\tlpModalOverlay.callBackYes = () => {\n+\t\t\t\t\t\t\t\tlpModalOverlay.elLPOverlay.hide();\n+\n+\t\t\t\t\t\t\t\tallowRepurchase();\n+\t\t\t\t\t\t\t};\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else if ( message && status ) {\n+\t\t\t\t\t\tform.innerHTML += `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\n+\n+\t\t\t\t\t\tif ( 'success' === status && redirect ) {\n+\t\t\t\t\t\t\twindow.location.href = redirect;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} catch ( error ) {\n+\t\t\t\t\tToastify( {\n+\t\t\t\t\t\ttext: error.message,\n+\t\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\t\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\t\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\n+\t\t\t\t\t\tclose: lpData.toast.close == 1,\n+\t\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\t\t\t\t\t\tduration: lpData.toast.duration,\n+\t\t\t\t\t} ).showToast();\n+\t\t\t\t}\n+\t\t\t};\n+\n+\t\t\tform.addEventListener( 'submit', ( event ) => {\n+\t\t\t\tevent.preventDefault();\n+\t\t\t\tconst id = form.querySelector( 'input[name=purchase-course]' ).value;\n+\t\t\t\tconst btn = form.querySelector( 'button.button-purchase-course' );\n+\t\t\t\tlpSetLoadingEl( btn, 1 );\n+\t\t\t\tsubmit( id, btn );\n+\t\t\t} );\n+\t\t} );\n+\t}\n+};\n+\n+const retakeCourse = () => {\n+\tconst elFormRetakeCourses = document.querySelectorAll( '.lp-form-retake-course' );\n+\n+\tif ( ! elFormRetakeCourses.length ) {\n+\t\treturn;\n+\t}\n+\n+\telFormRetakeCourses.forEach( ( elFormRetakeCourse ) => {\n+\t\tconst elButtonRetakeCourses = elFormRetakeCourse.querySelector( '.button-retake-course' );\n+\t\tconst elCourseId = elFormRetakeCourse.querySelector( '[name=retake-course]' ).value;\n+\t\tconst elAjaxMessage = elFormRetakeCourse.querySelector( '.lp-ajax-message' );\n+\t\tconst submit = ( elButtonRetakeCourse ) => {\n+\t\t\twp.apiFetch( {\n+\t\t\t\tpath: '\u002Flp\u002Fv1\u002Fcourses\u002Fretake-course',\n+\t\t\t\tmethod: 'POST',\n+\t\t\t\tdata: { id: elCourseId },\n+\t\t\t} ).then( ( res ) => {\n+\t\t\t\tconst { status, message, data } = res;\n+\t\t\t\telAjaxMessage.innerHTML = message;\n+\n+\t\t\t\tif ( undefined != status && status === 'success' ) {\n+\t\t\t\t\telButtonRetakeCourse.style.display = 'none';\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\twindow.location.replace( data.url_redirect );\n+\t\t\t\t\t}, 1000 );\n+\t\t\t\t} else {\n+\t\t\t\t\telAjaxMessage.classList.add( 'error' );\n+\t\t\t\t}\n+\t\t\t} ).catch( ( err ) => {\n+\t\t\t\telAjaxMessage.classList.add( 'error' );\n+\t\t\t\telAjaxMessage.innerHTML = 'error: ' + err.message;\n+\t\t\t} ).then( () => {\n+\t\t\t\telButtonRetakeCourse.classList.remove( 'loading' );\n+\t\t\t\telButtonRetakeCourse.disabled = false;\n+\t\t\t\telAjaxMessage.style.display = 'block';\n+\t\t\t} );\n+\t\t};\n+\n+\t\telFormRetakeCourse.addEventListener( 'submit', ( e ) => {\n+\t\t\te.preventDefault();\n+\t\t} );\n+\n+\t\telButtonRetakeCourses.addEventListener(\n+\t\t\t'click',\n+\t\t\t( e ) => {\n+\t\t\t\te.preventDefault();\n+\t\t\t\telButtonRetakeCourses.classList.add( 'loading' );\n+\t\t\t\telButtonRetakeCourses.disabled = true;\n+\t\t\t\tsubmit( elButtonRetakeCourses );\n+\t\t\t}\n+\t\t);\n+\t} );\n+};\n+\n+\u002F\u002F Rest API load content course progress - Nhamdv.\n+const courseProgress = () => {\n+\tconst elements = document.querySelectorAll( '.lp-course-progress-wrapper' );\n+\n+\tif ( ! elements.length ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( 'IntersectionObserver' in window ) {\n+\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\n+\t\t\tentries.forEach( ( entry ) => {\n+\t\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\t\tconst ele = entry.target;\n+\n+\t\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t\tgetResponse( ele );\n+\t\t\t\t\t}, 600 );\n+\n+\t\t\t\t\teleObserver.unobserve( ele );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t} );\n+\n+\t\t[ ...elements ].map( ( ele ) => eleObserver.observe( ele ) );\n+\t}\n+\n+\tconst getResponse = async ( ele ) => {\n+\t\tlet url = 'lp\u002Fv1\u002Flazy-load\u002Fcourse-progress';\n+\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\n+\t\t\turl += '?lang=' + lpData.urlParams.lang;\n+\t\t}\n+\n+\t\tconst response = await wp.apiFetch( {\n+\t\t\tpath: url,\n+\t\t\tmethod: 'POST',\n+\t\t\tdata: {\n+\t\t\t\tcourseId: lpGlobalSettings.post_id || '',\n+\t\t\t\tuserId: lpData.user_id || '',\n+\t\t\t},\n+\t\t} );\n+\n+\t\tconst { data } = response;\n+\n+\t\tele.innerHTML = data;\n+\t};\n+};\n+\n+const accordionExtraTab = () => {\n+\tconst elements = document.querySelectorAll( '.course-extra-box' );\n+\t[ ...elements ].map( ( ele ) => {\n+\t\tconst title = ele.querySelector( '.course-extra-box__title' );\n+\t\tele.classList.remove( 'active' );\n+\t\tconst content = ele.querySelector( '.course-extra-box__content' );\n+\t\tcontent.style.height = '0';\n+\n+\t\ttitle.addEventListener( 'click', () => {\n+\t\t\tconst isActive = ele.classList.contains( 'active' );\n+\n+\t\t\t[ ...elements ].forEach( ( otherEle ) => {\n+\t\t\t\tif ( otherEle !== ele ) {\n+\t\t\t\t\totherEle.classList.remove( 'active' );\n+\t\t\t\t\totherEle.querySelector( '.course-extra-box__content' ).style.height = '0';\n+\t\t\t\t}\n+\t\t\t} );\n+\n+\t\t\tif ( isActive ) {\n+\t\t\t\tele.classList.remove( 'active' );\n+\t\t\t\tcontent.style.height = '0';\n+\t\t\t} else {\n+\t\t\t\tele.classList.add( 'active' );\n+\t\t\t\tcontent.style.height = content.scrollHeight + 'px';\n+\t\t\t}\n+\t\t} );\n+\t} );\n+};\n+\n+const courseContinue = () => {\n+\tconst formContinue = document.querySelectorAll( 'form.continue-course' );\n+\tif ( formContinue.length && lpData.user_id > 0 ) {\n+\t\tconst getResponse = async ( ele ) => {\n+\t\t\tconst response = await wp.apiFetch( {\n+\t\t\t\tpath: 'lp\u002Fv1\u002Fcourses\u002Fcontinue-course',\n+\t\t\t\tmethod: 'POST',\n+\t\t\t\tdata: {\n+\t\t\t\t\tcourseId: lpGlobalSettings.post_id || '',\n+\t\t\t\t\tuserId: lpGlobalSettings.user_id || '',\n+\t\t\t\t},\n+\t\t\t} );\n+\n+\t\t\treturn response;\n+\t\t};\n+\n+\t\tgetResponse( formContinue ).then( function( result ) {\n+\t\t\tif ( result.status === 'success' ) {\n+\t\t\t\tformContinue.forEach( ( form ) => {\n+\t\t\t\t\tform.style.display = 'inline-block';\n+\t\t\t\t\tform.action = result.data;\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t}\n+};\n+\n+export {\n+\tinitCourseTabs,\n+\tinitCourseSidebar,\n+\tenrollCourse,\n+};\n+\n+document.addEventListener( 'DOMContentLoaded', function() {\n+\tconst $popup = $( '#popup-course' );\n+\tlet timerClearScroll;\n+\tconst $curriculum = $( '#learn-press-course-curriculum' );\n+\taccordionExtraTab();\n+\tinitCourseTabs();\n+\tinitCourseSidebar();\n+\tenrollCourse();\n+\tpurchaseCourse();\n+\tretakeCourse();\n+\tcourseProgress();\n+\tcourseContinue();\n+\tlpModalOverlayCompleteItem.init();\n+\tlpMaterialsLoad();\n+\t\u002F\u002FcourseCurriculumSkeleton();\n+\tTabsDragScroll();\n+\tLPCopyToClipboard();\n+} );\n+\n+const detectedElCurriculum = setInterval( function() {\n+\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\n+\tif ( elementCurriculum ) {\n+\t\tcourseCurriculumSkeleton();\n+\n+\t\tclearInterval( detectedElCurriculum );\n+\t}\n+}, 1 );\n+\n+\u002F\u002F Add callback for Thimkits\n+LP.Hook.addAction( 'lp_course_curriculum_skeleton', function( id ) {\n+\tcourseCurriculumSkeleton( id );\n+} );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcomment.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcomment.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcomment.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcomment.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-\u002F**\r\n- * Toogle form Comment for Lesson.\r\n- *\r\n- * @author Nhamdv.\r\n- *\u002F\r\n-\r\n-export const commentForm = () => {\r\n-\tconst btn = document.querySelector( '.lp-lesson-comment-btn' );\r\n-\r\n-\tif ( ! btn ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst btnOpen = btn.textContent;\r\n-\tconst btnClose = btn.dataset.close;\r\n-\tconst hashComment = window.location.hash;\r\n-\r\n-\tif ( hashComment.includes( 'comment' ) ) {\r\n-\t\tbtn.parentNode.classList.add( 'open-comments' );\r\n-\t}\r\n-\r\n-\tconst toogleText = ( btn, btnParent ) => {\r\n-\t\tif ( btnParent.classList.contains( 'open-comments' ) ) {\r\n-\t\t\tbtn.textContent = btnClose;\r\n-\t\t} else {\r\n-\t\t\tbtn.textContent = btnOpen;\r\n-\t\t}\r\n-\t};\r\n-\r\n-\ttoogleText( btn, btn.parentNode );\r\n-\r\n-\tbtn.addEventListener( 'click', ( e ) => {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tbtn.parentNode.classList.toggle( 'open-comments' );\r\n-\t\ttoogleText( btn, btn.parentNode );\r\n-\t} );\r\n-\r\n-\t\u002F\u002F Use for Rest API.\r\n-\t\u002F\u002F const toogle = $( '#learn-press-item-comments-toggle' );\r\n-\r\n-\t\u002F\u002F toogle.on( 'change', async function() {\r\n-\t\u002F\u002F \tif ( ! toogle[ 0 ].checked ) {\r\n-\t\u002F\u002F \t\treturn;\r\n-\t\u002F\u002F \t}\r\n-\r\n-\t\u002F\u002F \tconst response = await wp.apiFetch( {\r\n-\t\u002F\u002F \t\tpath: 'lp\u002Fv1\u002Fcourses\u002F339\u002Fitem-comments\u002F50',\r\n-\t\u002F\u002F \t} );\r\n-\r\n-\t\u002F\u002F \t$( '.learn-press-comments' ).html( response.comments );\r\n-\t\u002F\u002F } );\r\n-};\r\n+\u002F**\n+ * Toogle form Comment for Lesson.\n+ *\n+ * @author Nhamdv.\n+ *\u002F\n+\n+export const commentForm = () => {\n+\tconst btn = document.querySelector( '.lp-lesson-comment-btn' );\n+\n+\tif ( ! btn ) {\n+\t\treturn;\n+\t}\n+\n+\tconst btnOpen = btn.textContent;\n+\tconst btnClose = btn.dataset.close;\n+\tconst hashComment = window.location.hash;\n+\n+\tif ( hashComment.includes( 'comment' ) ) {\n+\t\tbtn.parentNode.classList.add( 'open-comments' );\n+\t}\n+\n+\tconst toogleText = ( btn, btnParent ) => {\n+\t\tif ( btnParent.classList.contains( 'open-comments' ) ) {\n+\t\t\tbtn.textContent = btnClose;\n+\t\t} else {\n+\t\t\tbtn.textContent = btnOpen;\n+\t\t}\n+\t};\n+\n+\ttoogleText( btn, btn.parentNode );\n+\n+\tbtn.addEventListener( 'click', ( e ) => {\n+\t\te.preventDefault();\n+\n+\t\tbtn.parentNode.classList.toggle( 'open-comments' );\n+\t\ttoogleText( btn, btn.parentNode );\n+\t} );\n+\n+\t\u002F\u002F Use for Rest API.\n+\t\u002F\u002F const toogle = $( '#learn-press-item-comments-toggle' );\n+\n+\t\u002F\u002F toogle.on( 'change', async function() {\n+\t\u002F\u002F \tif ( ! toogle[ 0 ].checked ) {\n+\t\u002F\u002F \t\treturn;\n+\t\u002F\u002F \t}\n+\n+\t\u002F\u002F \tconst response = await wp.apiFetch( {\n+\t\u002F\u002F \t\tpath: 'lp\u002Fv1\u002Fcourses\u002F339\u002Fitem-comments\u002F50',\n+\t\u002F\u002F \t} );\n+\n+\t\u002F\u002F \t$( '.learn-press-comments' ).html( response.comments );\n+\t\u002F\u002F } );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fcompatible.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u002F**\r\n- * Compatible with Page Builder.\r\n- *\r\n- * @author nhamdv\r\n- *\u002F\r\n-\r\n-LP.Hook.addAction( 'lp-compatible-builder', () => {\r\n-\tLP.Hook.removeAction( 'lp-compatible-builder' );\r\n-\r\n-\tif ( typeof elementorFrontend !== 'undefined' ) {\r\n-\t\t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\r\n-\t\t\t\u002F\u002FWaypoint.refreshAll();\r\n-\t\t\twindow.dispatchEvent( new Event( 'resize' ) );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\r\n-\t\t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\r\n-\t\t\tVcWaypoint.refreshAll();\r\n-\t\t} );\r\n-\t}*\u002F\r\n-} );\r\n-\r\n-LP.Hook.addAction( 'lp-quiz-compatible-builder', () => {\r\n-\tLP.Hook.removeAction( 'lp-quiz-compatible-builder' );\r\n-\r\n-\tLP.Hook.doAction( 'lp-compatible-builder' );\r\n-\r\n-\tif ( typeof elementorFrontend !== 'undefined' ) {\r\n-\t\treturn window.elementorFrontend.init();\r\n-\t}\r\n-\r\n-\tif ( typeof vc_js !== 'undefined' ) {\r\n-\t\tif ( typeof vc_round_charts !== 'undefined' ) {\r\n-\t\t\tvc_round_charts();\r\n-\t\t}\r\n-\r\n-\t\tif ( typeof vc_pieChart !== 'undefined' ) {\r\n-\t\t\tvc_pieChart();\r\n-\t\t}\r\n-\t\tif ( typeof vc_line_charts !== 'undefined' ) {\r\n-\t\t\tvc_line_charts();\r\n-\t\t}\r\n-\r\n-\t\treturn window.vc_js();\r\n-\t}\r\n-} );\r\n-\r\n-LP.Hook.addAction( 'lp-question-compatible-builder', () => {\r\n-\tLP.Hook.removeAction( 'lp-question-compatible-builder' );\r\n-\tLP.Hook.removeAction( 'lp-quiz-compatible-builder' );\r\n-\tLP.Hook.doAction( 'lp-compatible-builder' );\r\n-\r\n-\tif ( typeof elementorFrontend !== 'undefined' ) {\r\n-\t\treturn window.elementorFrontend.init();\r\n-\t}\r\n-\r\n-\tif ( typeof vc_js !== 'undefined' ) {\r\n-\t\tif ( typeof vc_round_charts !== 'undefined' ) {\r\n-\t\t\tvc_round_charts();\r\n-\t\t}\r\n-\r\n-\t\tif ( typeof vc_pieChart !== 'undefined' ) {\r\n-\t\t\tvc_pieChart();\r\n-\t\t}\r\n-\t\tif ( typeof vc_line_charts !== 'undefined' ) {\r\n-\t\t\tvc_line_charts();\r\n-\t\t}\r\n-\r\n-\t\treturn window.vc_js();\r\n-\t}\r\n-} );\r\n+\u002F**\n+ * Compatible with Page Builder.\n+ *\n+ * @author nhamdv\n+ *\u002F\n+\n+LP.Hook.addAction( 'lp-compatible-builder', () => {\n+\tLP.Hook.removeAction( 'lp-compatible-builder' );\n+\n+\tif ( typeof elementorFrontend !== 'undefined' ) {\n+\t\t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\n+\t\t\t\u002F\u002FWaypoint.refreshAll();\n+\t\t\twindow.dispatchEvent( new Event( 'resize' ) );\n+\t\t} );\n+\t}\n+\n+\t\u002F*if ( typeof vc_js !== 'undefined' && typeof VcWaypoint !== 'undefined' ) {\n+\t\t[ ...document.querySelectorAll( '#popup-content' ) ][ 0 ].addEventListener( 'scroll', () => {\n+\t\t\tVcWaypoint.refreshAll();\n+\t\t} );\n+\t}*\u002F\n+} );\n+\n+LP.Hook.addAction( 'lp-quiz-compatible-builder', () => {\n+\tLP.Hook.removeAction( 'lp-quiz-compatible-builder' );\n+\n+\tLP.Hook.doAction( 'lp-compatible-builder' );\n+\n+\tif ( typeof elementorFrontend !== 'undefined' ) {\n+\t\treturn window.elementorFrontend.init();\n+\t}\n+\n+\tif ( typeof vc_js !== 'undefined' ) {\n+\t\tif ( typeof vc_round_charts !== 'undefined' ) {\n+\t\t\tvc_round_charts();\n+\t\t}\n+\n+\t\tif ( typeof vc_pieChart !== 'undefined' ) {\n+\t\t\tvc_pieChart();\n+\t\t}\n+\t\tif ( typeof vc_line_charts !== 'undefined' ) {\n+\t\t\tvc_line_charts();\n+\t\t}\n+\n+\t\treturn window.vc_js();\n+\t}\n+} );\n+\n+LP.Hook.addAction( 'lp-question-compatible-builder', () => {\n+\tLP.Hook.removeAction( 'lp-question-compatible-builder' );\n+\tLP.Hook.removeAction( 'lp-quiz-compatible-builder' );\n+\tLP.Hook.doAction( 'lp-compatible-builder' );\n+\n+\tif ( typeof elementorFrontend !== 'undefined' ) {\n+\t\treturn window.elementorFrontend.init();\n+\t}\n+\n+\tif ( typeof vc_js !== 'undefined' ) {\n+\t\tif ( typeof vc_round_charts !== 'undefined' ) {\n+\t\t\tvc_round_charts();\n+\t\t}\n+\n+\t\tif ( typeof vc_pieChart !== 'undefined' ) {\n+\t\t\tvc_pieChart();\n+\t\t}\n+\t\tif ( typeof vc_line_charts !== 'undefined' ) {\n+\t\t\tvc_line_charts();\n+\t\t}\n+\n+\t\treturn window.vc_js();\n+\t}\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fitems-progress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u002F\u002F Rest API load content course progress - Nhamdv.\r\n-import { addQueryArgs } from '@wordpress\u002Furl';\r\n-import lpModalOverlayCompleteItem from '..\u002F..\u002Fshow-lp-overlay-complete-item';\r\n-\r\n-export const itemsProgress = () => {\r\n-\tconst elements = document.querySelectorAll( '.popup-header__inner' );\r\n-\r\n-\tif ( ! elements.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( document.querySelector( '#learn-press-quiz-app div.quiz-result' ) !== null ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( elements[ 0 ].querySelectorAll( 'form.form-button-finish-course' ).length !== 0 ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst user_id = lpGlobalSettings.user_id || 0;\r\n-\tif ( user_id === 0 ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( 'IntersectionObserver' in window ) {\r\n-\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\r\n-\t\t\tentries.forEach( ( entry ) => {\r\n-\t\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\t\tconst ele = entry.target;\r\n-\r\n-\t\t\t\t\tgetResponse( ele );\r\n-\r\n-\t\t\t\t\teleObserver.unobserve( ele );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\t[ ...elements ].map( ( ele ) => eleObserver.observe( ele ) );\r\n-\t}\r\n-};\r\n-\r\n-export const getResponse = async ( ele ) => {\r\n-\tconst response = await wp.apiFetch( {\r\n-\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Flazy-load\u002Fitems-progress', {\r\n-\t\t\tcourseId: lpGlobalSettings.post_id || '',\r\n-\t\t\tuserId: lpGlobalSettings.user_id || '',\r\n-\t\t} ),\r\n-\t\tmethod: 'GET',\r\n-\t} );\r\n-\r\n-\tconst { data } = response;\r\n-\r\n-\tele.innerHTML += data;\r\n-\tele.classList.add( 'can-finish-course' );\r\n-\r\n-\tlpModalOverlayCompleteItem.init();\r\n-};\r\n+\u002F\u002F Rest API load content course progress - Nhamdv.\n+import { addQueryArgs } from '@wordpress\u002Furl';\n+import lpModalOverlayCompleteItem from '..\u002F..\u002Fshow-lp-overlay-complete-item';\n+\n+export const itemsProgress = () => {\n+\tconst elements = document.querySelectorAll( '.popup-header__inner' );\n+\n+\tif ( ! elements.length ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( document.querySelector( '#learn-press-quiz-app div.quiz-result' ) !== null ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( elements[ 0 ].querySelectorAll( 'form.form-button-finish-course' ).length !== 0 ) {\n+\t\treturn;\n+\t}\n+\n+\tconst user_id = lpGlobalSettings.user_id || 0;\n+\tif ( user_id === 0 ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( 'IntersectionObserver' in window ) {\n+\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\n+\t\t\tentries.forEach( ( entry ) => {\n+\t\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\t\tconst ele = entry.target;\n+\n+\t\t\t\t\tgetResponse( ele );\n+\n+\t\t\t\t\teleObserver.unobserve( ele );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t} );\n+\n+\t\t[ ...elements ].map( ( ele ) => eleObserver.observe( ele ) );\n+\t}\n+};\n+\n+export const getResponse = async ( ele ) => {\n+\tconst response = await wp.apiFetch( {\n+\t\tpath: addQueryArgs( 'lp\u002Fv1\u002Flazy-load\u002Fitems-progress', {\n+\t\t\tcourseId: lpGlobalSettings.post_id || '',\n+\t\t\tuserId: lpGlobalSettings.user_id || '',\n+\t\t} ),\n+\t\tmethod: 'GET',\n+\t} );\n+\n+\tconst { data } = response;\n+\n+\tele.innerHTML += data;\n+\tele.classList.add( 'can-finish-course' );\n+\n+\tlpModalOverlayCompleteItem.init();\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fprogress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fprogress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fprogress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fprogress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-const $ = jQuery;\r\n-\r\n-export const progressBar = () => {\r\n-\t$( '.learn-press-progress' ).each( function() {\r\n-\t\tconst $progress = $( this );\r\n-\t\tconst $active = $progress.find( '.learn-press-progress__active' );\r\n-\t\tconst value = $active.data( 'value' );\r\n-\r\n-\t\tif ( value === undefined ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$active.css( 'left', -( 100 - parseInt( value ) ) + '%' );\r\n-\t} );\r\n-};\r\n+const $ = jQuery;\n+\n+export const progressBar = () => {\n+\t$( '.learn-press-progress' ).each( function() {\n+\t\tconst $progress = $( this );\n+\t\tconst $active = $progress.find( '.learn-press-progress__active' );\n+\t\tconst value = $active.data( 'value' );\n+\n+\t\tif ( value === undefined ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$active.css( 'left', -( 100 - parseInt( value ) ) + '%' );\n+\t} );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsearch.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsearch.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsearch.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsearch.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,89 +1,89 @@\n-\r\n-export const searchCourseContent = () => {\r\n-\tconst popup = document.querySelector( '#popup-course' );\r\n-\tconst list = document.querySelector( '#learn-press-course-curriculum' );\r\n-\r\n-\tif ( popup && list ) {\r\n-\t\tconst items = list.querySelector( '.curriculum-sections' );\r\n-\t\tconst form = popup.querySelector( '.search-course' );\r\n-\t\tconst search = popup.querySelector( '.search-course input[type=\"text\"]' );\r\n-\r\n-\t\tif ( ! search || ! items || ! form ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst sections = items.querySelectorAll( 'li.section' );\r\n-\t\tconst dataItems = items.querySelectorAll( 'li.course-item' );\r\n-\r\n-\t\tconst dataSearch = [];\r\n-\r\n-\t\tdataItems.forEach( ( item ) => {\r\n-\t\t\tconst itemID = item.dataset.id;\r\n-\t\t\tconst name = item.querySelector( '.item-name' );\r\n-\r\n-\t\t\tdataSearch.push( {\r\n-\t\t\t\tid: itemID,\r\n-\t\t\t\tname: name ? name.textContent.toLowerCase() : '',\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\tconst submit = ( event ) => {\r\n-\t\t\tevent.preventDefault();\r\n-\r\n-\t\t\tconst inputVal = search.value;\r\n-\r\n-\t\t\tform.classList.add( 'searching' );\r\n-\r\n-\t\t\tif ( ! inputVal ) {\r\n-\t\t\t\tform.classList.remove( 'searching' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst outputs = [];\r\n-\r\n-\t\t\tdataSearch.forEach( ( i ) => {\r\n-\t\t\t\tif ( ! inputVal || i.name.match( inputVal.toLowerCase() ) ) {\r\n-\t\t\t\t\toutputs.push( i.id );\r\n-\r\n-\t\t\t\t\tdataItems.forEach( ( c ) => {\r\n-\t\t\t\t\t\tif ( outputs.indexOf( c.dataset.id ) !== -1 ) {\r\n-\t\t\t\t\t\t\tc.classList.remove( 'hide-if-js' );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tc.classList.add( 'hide-if-js' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\r\n-\t\t\tsections.forEach( ( section ) => {\r\n-\t\t\t\tconst listItem = section.querySelectorAll( '.course-item' );\r\n-\t\t\t\tconst isTrue = [];\r\n-\r\n-\t\t\t\tlistItem.forEach( ( a ) => {\r\n-\t\t\t\t\tif ( outputs.includes( a.dataset.id ) ) {\r\n-\t\t\t\t\t\tisTrue.push( a.dataset.id );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tif ( isTrue.length === 0 ) {\r\n-\t\t\t\t\tsection.classList.add( 'hide-if-js' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tsection.classList.remove( 'hide-if-js' );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t};\r\n-\r\n-\t\tconst clear = form.querySelector( '.clear' );\r\n-\r\n-\t\tif ( clear ) {\r\n-\t\t\tclear.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tsearch.value = '';\r\n-\r\n-\t\t\t\tsubmit( e );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tform.addEventListener( 'submit', submit );\r\n-\t\tsearch.addEventListener( 'keyup', submit );\r\n-\t}\r\n-};\r\n+\n+export const searchCourseContent = () => {\n+\tconst popup = document.querySelector( '#popup-course' );\n+\tconst list = document.querySelector( '#learn-press-course-curriculum' );\n+\n+\tif ( popup && list ) {\n+\t\tconst items = list.querySelector( '.curriculum-sections' );\n+\t\tconst form = popup.querySelector( '.search-course' );\n+\t\tconst search = popup.querySelector( '.search-course input[type=\"text\"]' );\n+\n+\t\tif ( ! search || ! items || ! form ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst sections = items.querySelectorAll( 'li.section' );\n+\t\tconst dataItems = items.querySelectorAll( 'li.course-item' );\n+\n+\t\tconst dataSearch = [];\n+\n+\t\tdataItems.forEach( ( item ) => {\n+\t\t\tconst itemID = item.dataset.id;\n+\t\t\tconst name = item.querySelector( '.item-name' );\n+\n+\t\t\tdataSearch.push( {\n+\t\t\t\tid: itemID,\n+\t\t\t\tname: name ? name.textContent.toLowerCase() : '',\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tconst submit = ( event ) => {\n+\t\t\tevent.preventDefault();\n+\n+\t\t\tconst inputVal = search.value;\n+\n+\t\t\tform.classList.add( 'searching' );\n+\n+\t\t\tif ( ! inputVal ) {\n+\t\t\t\tform.classList.remove( 'searching' );\n+\t\t\t}\n+\n+\t\t\tconst outputs = [];\n+\n+\t\t\tdataSearch.forEach( ( i ) => {\n+\t\t\t\tif ( ! inputVal || i.name.match( inputVal.toLowerCase() ) ) {\n+\t\t\t\t\toutputs.push( i.id );\n+\n+\t\t\t\t\tdataItems.forEach( ( c ) => {\n+\t\t\t\t\t\tif ( outputs.indexOf( c.dataset.id ) !== -1 ) {\n+\t\t\t\t\t\t\tc.classList.remove( 'hide-if-js' );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tc.classList.add( 'hide-if-js' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t} );\n+\n+\t\t\tsections.forEach( ( section ) => {\n+\t\t\t\tconst listItem = section.querySelectorAll( '.course-item' );\n+\t\t\t\tconst isTrue = [];\n+\n+\t\t\t\tlistItem.forEach( ( a ) => {\n+\t\t\t\t\tif ( outputs.includes( a.dataset.id ) ) {\n+\t\t\t\t\t\tisTrue.push( a.dataset.id );\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\n+\t\t\t\tif ( isTrue.length === 0 ) {\n+\t\t\t\t\tsection.classList.add( 'hide-if-js' );\n+\t\t\t\t} else {\n+\t\t\t\t\tsection.classList.remove( 'hide-if-js' );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t};\n+\n+\t\tconst clear = form.querySelector( '.clear' );\n+\n+\t\tif ( clear ) {\n+\t\t\tclear.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\t\t\t\tsearch.value = '';\n+\n+\t\t\t\tsubmit( e );\n+\t\t\t} );\n+\t\t}\n+\n+\t\tform.addEventListener( 'submit', submit );\n+\t\tsearch.addEventListener( 'keyup', submit );\n+\t}\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fcomponents\u002Fsidebar.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-const $ = jQuery;\r\n-const { throttle } = lodash;\r\n-\r\n-export const Sidebar = () => {\r\n-\t\u002F\u002F Tungnx - Show\u002Fhide sidebar curriculumn\r\n-\tconst elSidebarToggle = document.querySelector( '#sidebar-toggle' );\r\n-\r\n-\t\u002F\u002F For style of theme\r\n-\tconst toggleSidebar = ( toggle ) => {\r\n-\t\t$( 'body' ).removeClass( 'lp-sidebar-toggle__open' );\r\n-\t\t$( 'body' ).removeClass( 'lp-sidebar-toggle__close' );\r\n-\r\n-\t\tif ( toggle ) {\r\n-\t\t\t$( 'body' ).addClass( 'lp-sidebar-toggle__close' );\r\n-\t\t} else {\r\n-\t\t\t$( 'body' ).addClass( 'lp-sidebar-toggle__open' );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F\u002F For lp and theme\r\n-\tif ( elSidebarToggle ) {\r\n-\t\tif ( $( window ).innerWidth() \u003C= 768 ) {\r\n-\t\t\telSidebarToggle.setAttribute( 'checked', 'checked' );\r\n-\t\t} else if ( LP.Cookies.get( 'sidebar-toggle' ) ) {\r\n-\t\t\telSidebarToggle.setAttribute( 'checked', 'checked' );\r\n-\t\t} else {\r\n-\t\t\telSidebarToggle.removeAttribute( 'checked' );\r\n-\t\t}\r\n-\t}\r\n-\t\u002F\u002F End editor by tungnx\r\n-\r\n-\t\u002F\u002F Code for old curriculum\r\n-\t\u002F*const $curriculum = $( '#learn-press-course-curriculum' );\r\n-\t$curriculum.find( '.section-desc' ).each( ( i, el ) => {\r\n-\t\tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\r\n-\t\t\tb.toggleClass( 'c' );\r\n-\t\t} );\r\n-\t\tconst b = $( el ).siblings( '.section-title' ).append( a );\r\n-\t} );*\u002F\r\n-\r\n-\t\u002F\u002F Code for old curriculum\r\n-\t\u002F*$( '.section' ).each( function() {\r\n-\t\tconst $section = $( this ),\r\n-\t\t\t$toggle = $section.find( '.section-left' );\r\n-\r\n-\t\t$toggle.on( 'click', function() {\r\n-\t\t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\r\n-\t\t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\r\n-\t\t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\r\n-\t\t\tconst at = sections.findIndex( ( id ) => {\r\n-\t\t\t\treturn id == sectionId;\r\n-\t\t\t} );\r\n-\r\n-\t\t\tif ( isClose ) {\r\n-\t\t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\r\n-\t\t\t} else {\r\n-\t\t\t\tsections.splice( at, 1 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP.Cookies.remove( 'closed-section-(.*)' );\r\n-\t\t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\r\n-\t\t} );\r\n-\t} );*\u002F\r\n-\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tif ( e.target.id === 'sidebar-toggle' ) {\r\n-\t\t\tLP.Cookies.set( 'sidebar-toggle', e.target.checked ? true : false );\r\n-\t\t\ttoggleSidebar( LP.Cookies.get( 'sidebar-toggle' ) );\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n+const $ = jQuery;\n+const { throttle } = lodash;\n+\n+export const Sidebar = () => {\n+\t\u002F\u002F Tungnx - Show\u002Fhide sidebar curriculumn\n+\tconst elSidebarToggle = document.querySelector( '#sidebar-toggle' );\n+\n+\t\u002F\u002F For style of theme\n+\tconst toggleSidebar = ( toggle ) => {\n+\t\t$( 'body' ).removeClass( 'lp-sidebar-toggle__open' );\n+\t\t$( 'body' ).removeClass( 'lp-sidebar-toggle__close' );\n+\n+\t\tif ( toggle ) {\n+\t\t\t$( 'body' ).addClass( 'lp-sidebar-toggle__close' );\n+\t\t} else {\n+\t\t\t$( 'body' ).addClass( 'lp-sidebar-toggle__open' );\n+\t\t}\n+\t};\n+\n+\t\u002F\u002F For lp and theme\n+\tif ( elSidebarToggle ) {\n+\t\tif ( $( window ).innerWidth() \u003C= 768 ) {\n+\t\t\telSidebarToggle.setAttribute( 'checked', 'checked' );\n+\t\t} else if ( LP.Cookies.get( 'sidebar-toggle' ) ) {\n+\t\t\telSidebarToggle.setAttribute( 'checked', 'checked' );\n+\t\t} else {\n+\t\t\telSidebarToggle.removeAttribute( 'checked' );\n+\t\t}\n+\t}\n+\t\u002F\u002F End editor by tungnx\n+\n+\t\u002F\u002F Code for old curriculum\n+\t\u002F*const $curriculum = $( '#learn-press-course-curriculum' );\n+\t$curriculum.find( '.section-desc' ).each( ( i, el ) => {\n+\t\tconst a = $( '\u003Cspan class=\"show-desc\">\u003C\u002Fspan>' ).on( 'click', () => {\n+\t\t\tb.toggleClass( 'c' );\n+\t\t} );\n+\t\tconst b = $( el ).siblings( '.section-title' ).append( a );\n+\t} );*\u002F\n+\n+\t\u002F\u002F Code for old curriculum\n+\t\u002F*$( '.section' ).each( function() {\n+\t\tconst $section = $( this ),\n+\t\t\t$toggle = $section.find( '.section-left' );\n+\n+\t\t$toggle.on( 'click', function() {\n+\t\t\tconst isClose = $section.toggleClass( 'closed' ).hasClass( 'closed' );\n+\t\t\tconst sections = LP.Cookies.get( 'closed-section-' + lpGlobalSettings.post_id ) || [];\n+\t\t\tconst sectionId = parseInt( $section.data( 'section-id' ) );\n+\t\t\tconst at = sections.findIndex( ( id ) => {\n+\t\t\t\treturn id == sectionId;\n+\t\t\t} );\n+\n+\t\t\tif ( isClose ) {\n+\t\t\t\tsections.push( parseInt( $section.data( 'section-id' ) ) );\n+\t\t\t} else {\n+\t\t\t\tsections.splice( at, 1 );\n+\t\t\t}\n+\n+\t\t\tLP.Cookies.remove( 'closed-section-(.*)' );\n+\t\t\tLP.Cookies.set( 'closed-section-' + lpGlobalSettings.post_id, [ ...new Set( sections ) ] );\n+\t\t} );\n+\t} );*\u002F\n+\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tif ( e.target.id === 'sidebar-toggle' ) {\n+\t\t\tLP.Cookies.set( 'sidebar-toggle', e.target.checked ? true : false );\n+\t\t\ttoggleSidebar( LP.Cookies.get( 'sidebar-toggle' ) );\n+\t\t}\n+\t} );\n+};\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-const $ = jQuery;\r\n-import { Component } from '@wordpress\u002Felement';\r\n-import { searchCourseContent } from '.\u002Fcomponents\u002Fsearch';\r\n-import { Sidebar } from '.\u002Fcomponents\u002Fsidebar';\r\n-import { progressBar } from '.\u002Fcomponents\u002Fprogress';\r\n-import { commentForm } from '.\u002Fcomponents\u002Fcomment';\r\n-import { itemsProgress } from '.\u002Fcomponents\u002Fitems-progress';\r\n-\r\n-import '.\u002Fcomponents\u002Fcompatible';\r\n-\r\n-class SingleCurriculums extends Component {\r\n-\tcheckCourseDurationExpire() {\r\n-\t\tconst elCourseItemIsBlockeds = document.getElementsByName( 'lp-course-timestamp-remaining' );\r\n-\r\n-\t\tif ( elCourseItemIsBlockeds.length ) {\r\n-\t\t\tconst elCourseItemIsBlocked = elCourseItemIsBlockeds[ 0 ];\r\n-\t\t\tconst timeDuration = elCourseItemIsBlocked.value; \u002F\u002F value is second\r\n-\r\n-\t\t\tif ( timeDuration \u003C ( 60 * 60 * 24 ) ) { \u002F\u002F compare with 1 day\r\n-\t\t\t\tsetTimeout(\r\n-\t\t\t\t\tfunction() {\r\n-\t\t\t\t\t\twindow.location.reload( true );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttimeDuration * 1000\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\trender() {\r\n-\t\treturn (\r\n-\t\t\t\u003Cdiv>\u003C\u002Fdiv>\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-export default SingleCurriculums;\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', () => {\r\n-\tLP.Hook.doAction( 'lp-compatible-builder' );\r\n-\r\n-\tsearchCourseContent();\r\n-\tSidebar();\r\n-\tprogressBar();\r\n-\t\u002F\u002FcommentForm();\r\n-\titemsProgress();\r\n-\r\n-\t\u002F\u002F Check duration expire of course\r\n-\tconst singleCurriculums = new SingleCurriculums();\r\n-\tsingleCurriculums.checkCourseDurationExpire();\r\n-} );\r\n+const $ = jQuery;\n+import { Component } from '@wordpress\u002Felement';\n+import { searchCourseContent } from '.\u002Fcomponents\u002Fsearch';\n+import { Sidebar } from '.\u002Fcomponents\u002Fsidebar';\n+import { progressBar } from '.\u002Fcomponents\u002Fprogress';\n+import { commentForm } from '.\u002Fcomponents\u002Fcomment';\n+import { itemsProgress } from '.\u002Fcomponents\u002Fitems-progress';\n+\n+import '.\u002Fcomponents\u002Fcompatible';\n+\n+class SingleCurriculums extends Component {\n+\tcheckCourseDurationExpire() {\n+\t\tconst elCourseItemIsBlockeds = document.getElementsByName( 'lp-course-timestamp-remaining' );\n+\n+\t\tif ( elCourseItemIsBlockeds.length ) {\n+\t\t\tconst elCourseItemIsBlocked = elCourseItemIsBlockeds[ 0 ];\n+\t\t\tconst timeDuration = elCourseItemIsBlocked.value; \u002F\u002F value is second\n+\n+\t\t\tif ( timeDuration \u003C ( 60 * 60 * 24 ) ) { \u002F\u002F compare with 1 day\n+\t\t\t\tsetTimeout(\n+\t\t\t\t\tfunction() {\n+\t\t\t\t\t\twindow.location.reload( true );\n+\t\t\t\t\t},\n+\t\t\t\t\ttimeDuration * 1000\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\t}\n+\trender() {\n+\t\treturn (\n+\t\t\t\u003Cdiv>\u003C\u002Fdiv>\n+\t\t);\n+\t}\n+}\n+\n+export default SingleCurriculums;\n+\n+document.addEventListener( 'DOMContentLoaded', () => {\n+\tLP.Hook.doAction( 'lp-compatible-builder' );\n+\n+\tsearchCourseContent();\n+\tSidebar();\n+\tprogressBar();\n+\t\u002F\u002FcommentForm();\n+\titemsProgress();\n+\n+\t\u002F\u002F Check duration expire of course\n+\tconst singleCurriculums = new SingleCurriculums();\n+\tsingleCurriculums.checkCourseDurationExpire();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fscrolltoitem.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fscrolltoitem.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fscrolltoitem.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fscrolltoitem.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-import lpModalOverlay from '..\u002F..\u002Futils\u002Flp-modal-overlay';\r\n-\r\n-const $ = jQuery;\r\n-\r\n-const scrollToItemCurrent = {\r\n-\tinit() {\r\n-\t\tthis.scrollToItemViewing = function() {\r\n-\t\t\tconst elItemViewing = $( '.viewing-course-item' );\r\n-\t\t\tif ( elItemViewing.length ) {\r\n-\t\t\t\tconst elCourseCurriculumn = $( '#learn-press-course-curriculum' );\r\n-\t\t\t\tconst heightCourseItemContentHeader = $( '#popup-sidebar' ).outerHeight();\r\n-\t\t\t\tconst heightSectionTitle = $( '.section-title' ).outerHeight();\r\n-\t\t\t\tconst heightSectionHeader = $( '.section-header' ).outerHeight();\r\n-\t\t\t\tconst regex = new RegExp( '^viewing-course-item-([0-9].*)' );\r\n-\t\t\t\tconst classList = elItemViewing.attr( 'class' );\r\n-\t\t\t\tconst classArr = classList.split( \u002F\\s+\u002F );\r\n-\t\t\t\tlet idItem = 0;\r\n-\r\n-\t\t\t\t$.each( classArr, function( i, className ) {\r\n-\t\t\t\t\tconst compare = regex.exec( className );\r\n-\r\n-\t\t\t\t\tif ( compare ) {\r\n-\t\t\t\t\t\tidItem = compare[ 1 ];\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tif ( 0 === idItem ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst elItemCurrent = $( '.course-item-' + idItem );\r\n-\t\t\t\telItemCurrent.addClass( 'current' );\r\n-\t\t\t\tconst offSetTop = elItemCurrent.offset().top;\r\n-\t\t\t\tconst offset = elItemCurrent.offset().top - elCourseCurriculumn.offset().top +\r\n-\t\t\t\t\telCourseCurriculumn.scrollTop();\r\n-\r\n-\t\t\t\telCourseCurriculumn.animate( {\r\n-\t\t\t\t\tscrollTop: LP.Hook.applyFilters( 'scroll-item-current', offset - heightSectionHeader ),\r\n-\t\t\t\t}, 800 );\r\n-\t\t\t}\r\n-\t\t};\r\n-\t\tthis.scrollToItemViewing();\r\n-\t},\r\n-};\r\n-\r\n-export default scrollToItemCurrent;\r\n+import lpModalOverlay from '..\u002F..\u002Futils\u002Flp-modal-overlay';\n+\n+const $ = jQuery;\n+\n+const scrollToItemCurrent = {\n+\tinit() {\n+\t\tthis.scrollToItemViewing = function() {\n+\t\t\tconst elItemViewing = $( '.viewing-course-item' );\n+\t\t\tif ( elItemViewing.length ) {\n+\t\t\t\tconst elCourseCurriculumn = $( '#learn-press-course-curriculum' );\n+\t\t\t\tconst heightCourseItemContentHeader = $( '#popup-sidebar' ).outerHeight();\n+\t\t\t\tconst heightSectionTitle = $( '.section-title' ).outerHeight();\n+\t\t\t\tconst heightSectionHeader = $( '.section-header' ).outerHeight();\n+\t\t\t\tconst regex = new RegExp( '^viewing-course-item-([0-9].*)' );\n+\t\t\t\tconst classList = elItemViewing.attr( 'class' );\n+\t\t\t\tconst classArr = classList.split( \u002F\\s+\u002F );\n+\t\t\t\tlet idItem = 0;\n+\n+\t\t\t\t$.each( classArr, function( i, className ) {\n+\t\t\t\t\tconst compare = regex.exec( className );\n+\n+\t\t\t\t\tif ( compare ) {\n+\t\t\t\t\t\tidItem = compare[ 1 ];\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\n+\t\t\t\tif ( 0 === idItem ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst elItemCurrent = $( '.course-item-' + idItem );\n+\t\t\t\telItemCurrent.addClass( 'current' );\n+\t\t\t\tconst offSetTop = elItemCurrent.offset().top;\n+\t\t\t\tconst offset = elItemCurrent.offset().top - elCourseCurriculumn.offset().top +\n+\t\t\t\t\telCourseCurriculumn.scrollTop();\n+\n+\t\t\t\telCourseCurriculumn.animate( {\n+\t\t\t\t\tscrollTop: LP.Hook.applyFilters( 'scroll-item-current', offset - heightSectionHeader ),\n+\t\t\t\t}, 800 );\n+\t\t\t}\n+\t\t};\n+\t\tthis.scrollToItemViewing();\n+\t},\n+};\n+\n+export default scrollToItemCurrent;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fskeleton.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fskeleton.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fskeleton.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum\u002Fskeleton.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,411 +1,411 @@\n-\u002F\u002F Rest API load content in Tab Curriculum - Nhamdv.\r\n-import { addQueryArgs } from '@wordpress\u002Furl';\r\n-\u002F\u002Fimport apiFetch from '@wordpress\u002Fapi-fetch';\r\n-import scrollToItemCurrent from '.\u002Fscrolltoitem';\r\n-import { searchCourseContent } from '.\u002Fcomponents\u002Fsearch';\r\n-\r\n-export default function courseCurriculumSkeleton( courseID = '' ) {\r\n-\tlet idItemViewing = 0;\r\n-\tconst elItemViewing = document.querySelector( '.viewing-course-item' );\r\n-\tif ( elItemViewing ) {\r\n-\t\tconst regex = new RegExp( '^viewing-course-item-([0-9].*)' );\r\n-\t\tconst classList = elItemViewing.classList;\r\n-\r\n-\t\tclassList.forEach( function( className ) {\r\n-\t\t\tconst compare = regex.exec( className );\r\n-\r\n-\t\t\tif ( compare ) {\r\n-\t\t\t\tidItemViewing = compare[ 1 ];\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tlet isLoadingItems = false;\r\n-\tlet isLoadingSections = false;\r\n-\tconst Sekeleton = () => {\r\n-\t\tconst elementCurriculum = document.querySelector(\r\n-\t\t\t'.learnpress-course-curriculum'\r\n-\t\t);\r\n-\r\n-\t\tif ( ! elementCurriculum ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tgetResponse( elementCurriculum );\r\n-\t};\r\n-\r\n-\tconst getResponse = async ( ele ) => {\r\n-\t\tconst skeleton = ele.querySelector( '.lp-skeleton-animation' );\r\n-\t\tconst itemID = ele.dataset.id;\r\n-\t\tconst sectionID = ele.dataset.section;\r\n-\r\n-\t\ttry {\r\n-\t\t\tconst page = 1;\r\n-\t\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum\u002F';\r\n-\t\t\turl = addQueryArgs( url, {\r\n-\t\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\r\n-\t\t\t\tpage,\r\n-\t\t\t\tsectionID: sectionID || '',\r\n-\t\t\t\tidItemViewing,\r\n-\t\t\t} );\r\n-\t\t\tlet paramsFetch = {};\r\n-\t\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\t\tparamsFetch = {\r\n-\t\t\t\t\theaders: {\r\n-\t\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\t\t\t}\r\n-\r\n-\t\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\r\n-\t\t\tresponse = await response.json();\r\n-\r\n-\t\t\tconst { data, status, message } = response;\r\n-\t\t\tconst section_ids = data.section_ids;\r\n-\r\n-\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst returnData = data.content;\r\n-\r\n-\t\t\tif ( sectionID ) {\r\n-\t\t\t\tif ( section_ids && ! section_ids.includes( sectionID ) ) {\r\n-\t\t\t\t\tconst response2 = await getResponsive(\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\tpage + 1,\r\n-\t\t\t\t\t\tsectionID\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( response2 ) {\r\n-\t\t\t\t\t\tconst { data2, pages2, page2 } = response2;\r\n-\r\n-\t\t\t\t\t\tawait parseContentItems( {\r\n-\t\t\t\t\t\t\tele,\r\n-\t\t\t\t\t\t\treturnData,\r\n-\t\t\t\t\t\t\tsectionID,\r\n-\t\t\t\t\t\t\titemID,\r\n-\t\t\t\t\t\t\tdata2,\r\n-\t\t\t\t\t\t\tpages2,\r\n-\t\t\t\t\t\t\tpage2,\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tawait parseContentItems( {\r\n-\t\t\t\t\t\tele,\r\n-\t\t\t\t\t\treturnData,\r\n-\t\t\t\t\t\tsectionID,\r\n-\t\t\t\t\t\titemID,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturnData && ele.insertAdjacentHTML( 'beforeend', returnData );\r\n-\t\t\t}\r\n-\t\t} catch ( error ) {\r\n-\t\t\tele.insertAdjacentHTML(\r\n-\t\t\t\t'beforeend',\r\n-\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\r\n-\t\t\t\t\terror.message ||\r\n-\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\r\n-\t\t\t\t}\u003C\u002Fdiv>`\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tskeleton && skeleton.remove();\r\n-\r\n-\t\tsearchCourseContent();\r\n-\t};\r\n-\r\n-\tconst parseContentItems = async ( {\r\n-\t\tele,\r\n-\t\treturnData,\r\n-\t\tsectionID,\r\n-\t\titemID,\r\n-\t\tdata2,\r\n-\t\tpages2,\r\n-\t\tpage2,\r\n-\t} ) => {\r\n-\t\tconst parser = new DOMParser();\r\n-\t\tconst doc = parser.parseFromString( returnData, 'text\u002Fhtml' );\r\n-\r\n-\t\tif ( data2 ) {\r\n-\t\t\tconst sections = doc.querySelector( '.curriculum-sections' );\r\n-\r\n-\t\t\tconst loadMoreBtn = doc.querySelector( '.curriculum-more__button' );\r\n-\r\n-\t\t\tif ( loadMoreBtn ) {\r\n-\t\t\t\tif ( pages2 \u003C= page2 ) {\r\n-\t\t\t\t\tloadMoreBtn.remove();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tloadMoreBtn.dataset.page = page2;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tsections.insertAdjacentHTML( 'beforeend', data2 );\r\n-\t\t}\r\n-\r\n-\t\tconst section = doc.querySelector( `[data-section-id=\"${ sectionID }\"]` );\r\n-\r\n-\t\tif ( section ) {\r\n-\t\t\tconst items = section.querySelectorAll( '.course-item' );\r\n-\t\t\tconst item_ids = [ ...items ].map( ( item ) => item.dataset.id );\r\n-\t\t\tconst sectionContent = section.querySelector( '.section-content' );\r\n-\t\t\tconst itemLoadMore = section.querySelector(\r\n-\t\t\t\t'.section-item__loadmore'\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( itemID && ! item_ids.includes( itemID ) ) {\r\n-\t\t\t\tconst responseItem = await getResponsiveItem(\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t2,\r\n-\t\t\t\t\tsectionID,\r\n-\t\t\t\t\titemID\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tconst { data3, pages3, paged3, page } = responseItem;\r\n-\r\n-\t\t\t\tif ( pages3 \u003C= paged3 || pages3 \u003C= page ) {\r\n-\t\t\t\t\titemLoadMore.remove();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\titemLoadMore.dataset.page = page;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( data3 && sectionContent ) {\r\n-\t\t\t\t\tsectionContent.insertAdjacentHTML( 'beforeend', data3 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tele.insertAdjacentHTML( 'beforeend', doc.body.innerHTML );\r\n-\r\n-\t\tscrollToItemCurrent.init();\r\n-\t};\r\n-\r\n-\tconst getResponsiveItem = async ( returnData, paged, sectionID, itemID ) => {\r\n-\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum-items\u002F';\r\n-\t\turl = addQueryArgs( url, {\r\n-\t\t\tsectionId: sectionID || '',\r\n-\t\t\tpage: paged,\r\n-\t\t} );\r\n-\t\tlet paramsFetch = {};\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch = {\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\r\n-\t\tresponse = await response.json();\r\n-\r\n-\t\tconst { data, status, pages, message } = response;\r\n-\r\n-\t\tconst { page } = data;\r\n-\r\n-\t\tlet item_ids;\r\n-\r\n-\t\tif ( status === 'success' ) {\r\n-\t\t\tconst dataTmp = data.content;\r\n-\t\t\titem_ids = data.item_ids;\r\n-\r\n-\t\t\treturnData += dataTmp;\r\n-\r\n-\t\t\tif ( sectionID && item_ids && itemID && ! item_ids.includes( itemID ) ) {\r\n-\t\t\t\treturn getResponsiveItem(\r\n-\t\t\t\t\treturnData,\r\n-\t\t\t\t\tpaged + 1,\r\n-\t\t\t\t\tsectionID,\r\n-\t\t\t\t\titemID\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tisLoadingItems = false;\r\n-\r\n-\t\treturn {\r\n-\t\t\tdata3: returnData,\r\n-\t\t\tpages3: pages || data.pages,\r\n-\t\t\tstatus3: status,\r\n-\t\t\tmessage3: message,\r\n-\t\t\tpage: page || 0,\r\n-\t\t};\r\n-\t};\r\n-\r\n-\tconst getResponsive = async ( returnData, page, sectionID ) => {\r\n-\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum\u002F';\r\n-\t\turl = addQueryArgs( url, {\r\n-\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\r\n-\t\t\tpage,\r\n-\t\t\tsectionID: sectionID || '',\r\n-\t\t\tloadMore: true,\r\n-\t\t} );\r\n-\t\tlet paramsFetch = {};\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch = {\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\r\n-\t\tresponse = await response.json();\r\n-\r\n-\t\tconst { data, status, message } = response;\r\n-\r\n-\t\tconst returnDataTmp = data.content;\r\n-\t\tconst section_ids = data.section_ids;\r\n-\t\tconst pages = data.pages;\r\n-\r\n-\t\tif ( status === 'success' ) {\r\n-\t\t\treturnData += returnDataTmp;\r\n-\r\n-\t\t\tif (\r\n-\t\t\t\tsectionID &&\r\n-\t\t\t\tsection_ids &&\r\n-\t\t\t\tsection_ids.length > 0 &&\r\n-\t\t\t\t! section_ids.includes( sectionID )\r\n-\t\t\t) {\r\n-\t\t\t\treturn getResponsive( returnData, page + 1, sectionID );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tisLoadingSections = false;\r\n-\r\n-\t\treturn {\r\n-\t\t\tdata2: returnData,\r\n-\t\t\tpages2: pages || data.pages,\r\n-\t\t\tpage2: page,\r\n-\t\t\tstatus2: status,\r\n-\t\t\tmessage2: message,\r\n-\t\t};\r\n-\t};\r\n-\r\n-\tSekeleton();\r\n-\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst sectionBtns = document.querySelectorAll(\r\n-\t\t\t'.section-item__loadmore'\r\n-\t\t);\r\n-\r\n-\t\t[ ...sectionBtns ].map( async ( sectionBtn ) => {\r\n-\t\t\tif ( sectionBtn.contains( e.target ) && ! isLoadingItems ) {\r\n-\t\t\t\tisLoadingItems = true;\r\n-\t\t\t\tconst sectionItem = sectionBtn.parentNode;\r\n-\t\t\t\tconst sectionId = sectionItem.getAttribute( 'data-section-id' );\r\n-\t\t\t\tconst sectionContent =\r\n-\t\t\t\t\tsectionItem.querySelector( '.section-content' );\r\n-\r\n-\t\t\t\tconst paged = parseInt( sectionBtn.dataset.page );\r\n-\r\n-\t\t\t\tsectionBtn.classList.add( 'loading' );\r\n-\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tconst response = await getResponsiveItem(\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\tpaged + 1,\r\n-\t\t\t\t\t\tsectionId,\r\n-\t\t\t\t\t\t''\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tconst { data3, pages3, status3, message3 } = response;\r\n-\r\n-\t\t\t\t\tif ( status3 === 'error' ) {\r\n-\t\t\t\t\t\tthrow new Error( message3 || 'Error' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( pages3 \u003C= paged + 1 ) {\r\n-\t\t\t\t\t\tsectionBtn.remove();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tsectionBtn.dataset.page = paged + 1;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tsectionContent.insertAdjacentHTML( 'beforeend', data3 );\r\n-\t\t\t\t} catch ( e ) {\r\n-\t\t\t\t\tsectionContent.insertAdjacentHTML(\r\n-\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\r\n-\t\t\t\t\t\t\te.message ||\r\n-\t\t\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\r\n-\t\t\t\t\t\t}\u003C\u002Fdiv>`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tsectionBtn.classList.remove( 'loading' );\r\n-\r\n-\t\t\t\tsearchCourseContent();\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Load more Sections\r\n-\t\tconst moreSections = document.querySelectorAll(\r\n-\t\t\t'.curriculum-more__button'\r\n-\t\t);\r\n-\r\n-\t\t[ ...moreSections ].map( async ( moreSection ) => {\r\n-\t\t\tif ( moreSection.contains( e.target ) && ! isLoadingSections ) {\r\n-\t\t\t\tisLoadingSections = true;\r\n-\t\t\t\tconst paged = parseInt( moreSection.dataset.page );\r\n-\r\n-\t\t\t\tconst sections =\r\n-\t\t\t\t\tmoreSection.parentNode.parentNode.querySelector(\r\n-\t\t\t\t\t\t'.curriculum-sections'\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( paged && sections ) {\r\n-\t\t\t\t\tmoreSection.classList.add( 'loading' );\r\n-\r\n-\t\t\t\t\ttry {\r\n-\t\t\t\t\t\tconst response2 = await getResponsive(\r\n-\t\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\t\tpaged + 1,\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tconst { data2, pages2, status2, message2 } = response2;\r\n-\r\n-\t\t\t\t\t\tif ( status2 === 'error' ) {\r\n-\t\t\t\t\t\t\tthrow new Error( message2 || 'Error' );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( pages2 \u003C= paged + 1 ) {\r\n-\t\t\t\t\t\t\tmoreSection.remove();\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tmoreSection.dataset.page = paged + 1;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tsections.insertAdjacentHTML( 'beforeend', data2 );\r\n-\t\t\t\t\t} catch ( e ) {\r\n-\t\t\t\t\t\tsections.insertAdjacentHTML(\r\n-\t\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\r\n-\t\t\t\t\t\t\t\te.message ||\r\n-\t\t\t\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\r\n-\t\t\t\t\t\t\t}\u003C\u002Fdiv>`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tmoreSection.classList.remove( 'loading' );\r\n-\r\n-\t\t\t\t\tsearchCourseContent();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Show\u002FHide accordion\r\n-\t\tif ( document.querySelector( '.learnpress-course-curriculum' ) ) {\r\n-\t\t\tconst sections = document.querySelectorAll( '.section' );\r\n-\r\n-\t\t\t[ ...sections ].map( ( section ) => {\r\n-\t\t\t\tif ( section.contains( e.target ) ) {\r\n-\t\t\t\t\tconst toggle = section.querySelector( '.section-left' );\r\n-\r\n-\t\t\t\t\ttoggle.contains( e.target ) &&\r\n-\t\t\t\t\t\tsection.classList.toggle( 'closed' );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t} );\r\n-}\r\n+\u002F\u002F Rest API load content in Tab Curriculum - Nhamdv.\n+import { addQueryArgs } from '@wordpress\u002Furl';\n+\u002F\u002Fimport apiFetch from '@wordpress\u002Fapi-fetch';\n+import scrollToItemCurrent from '.\u002Fscrolltoitem';\n+import { searchCourseContent } from '.\u002Fcomponents\u002Fsearch';\n+\n+export default function courseCurriculumSkeleton( courseID = '' ) {\n+\tlet idItemViewing = 0;\n+\tconst elItemViewing = document.querySelector( '.viewing-course-item' );\n+\tif ( elItemViewing ) {\n+\t\tconst regex = new RegExp( '^viewing-course-item-([0-9].*)' );\n+\t\tconst classList = elItemViewing.classList;\n+\n+\t\tclassList.forEach( function( className ) {\n+\t\t\tconst compare = regex.exec( className );\n+\n+\t\t\tif ( compare ) {\n+\t\t\t\tidItemViewing = compare[ 1 ];\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\tlet isLoadingItems = false;\n+\tlet isLoadingSections = false;\n+\tconst Sekeleton = () => {\n+\t\tconst elementCurriculum = document.querySelector(\n+\t\t\t'.learnpress-course-curriculum'\n+\t\t);\n+\n+\t\tif ( ! elementCurriculum ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tgetResponse( elementCurriculum );\n+\t};\n+\n+\tconst getResponse = async ( ele ) => {\n+\t\tconst skeleton = ele.querySelector( '.lp-skeleton-animation' );\n+\t\tconst itemID = ele.dataset.id;\n+\t\tconst sectionID = ele.dataset.section;\n+\n+\t\ttry {\n+\t\t\tconst page = 1;\n+\t\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum\u002F';\n+\t\t\turl = addQueryArgs( url, {\n+\t\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\n+\t\t\t\tpage,\n+\t\t\t\tsectionID: sectionID || '',\n+\t\t\t\tidItemViewing,\n+\t\t\t} );\n+\t\t\tlet paramsFetch = {};\n+\t\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\t\tparamsFetch = {\n+\t\t\t\t\theaders: {\n+\t\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\t\t\t}\n+\n+\t\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\n+\t\t\tresponse = await response.json();\n+\n+\t\t\tconst { data, status, message } = response;\n+\t\t\tconst section_ids = data.section_ids;\n+\n+\t\t\tif ( status === 'error' ) {\n+\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t}\n+\n+\t\t\tconst returnData = data.content;\n+\n+\t\t\tif ( sectionID ) {\n+\t\t\t\tif ( section_ids && ! section_ids.includes( sectionID ) ) {\n+\t\t\t\t\tconst response2 = await getResponsive(\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\tpage + 1,\n+\t\t\t\t\t\tsectionID\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( response2 ) {\n+\t\t\t\t\t\tconst { data2, pages2, page2 } = response2;\n+\n+\t\t\t\t\t\tawait parseContentItems( {\n+\t\t\t\t\t\t\tele,\n+\t\t\t\t\t\t\treturnData,\n+\t\t\t\t\t\t\tsectionID,\n+\t\t\t\t\t\t\titemID,\n+\t\t\t\t\t\t\tdata2,\n+\t\t\t\t\t\t\tpages2,\n+\t\t\t\t\t\t\tpage2,\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tawait parseContentItems( {\n+\t\t\t\t\t\tele,\n+\t\t\t\t\t\treturnData,\n+\t\t\t\t\t\tsectionID,\n+\t\t\t\t\t\titemID,\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturnData && ele.insertAdjacentHTML( 'beforeend', returnData );\n+\t\t\t}\n+\t\t} catch ( error ) {\n+\t\t\tele.insertAdjacentHTML(\n+\t\t\t\t'beforeend',\n+\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\n+\t\t\t\t\terror.message ||\n+\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\n+\t\t\t\t}\u003C\u002Fdiv>`\n+\t\t\t);\n+\t\t}\n+\n+\t\tskeleton && skeleton.remove();\n+\n+\t\tsearchCourseContent();\n+\t};\n+\n+\tconst parseContentItems = async ( {\n+\t\tele,\n+\t\treturnData,\n+\t\tsectionID,\n+\t\titemID,\n+\t\tdata2,\n+\t\tpages2,\n+\t\tpage2,\n+\t} ) => {\n+\t\tconst parser = new DOMParser();\n+\t\tconst doc = parser.parseFromString( returnData, 'text\u002Fhtml' );\n+\n+\t\tif ( data2 ) {\n+\t\t\tconst sections = doc.querySelector( '.curriculum-sections' );\n+\n+\t\t\tconst loadMoreBtn = doc.querySelector( '.curriculum-more__button' );\n+\n+\t\t\tif ( loadMoreBtn ) {\n+\t\t\t\tif ( pages2 \u003C= page2 ) {\n+\t\t\t\t\tloadMoreBtn.remove();\n+\t\t\t\t} else {\n+\t\t\t\t\tloadMoreBtn.dataset.page = page2;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tsections.insertAdjacentHTML( 'beforeend', data2 );\n+\t\t}\n+\n+\t\tconst section = doc.querySelector( `[data-section-id=\"${ sectionID }\"]` );\n+\n+\t\tif ( section ) {\n+\t\t\tconst items = section.querySelectorAll( '.course-item' );\n+\t\t\tconst item_ids = [ ...items ].map( ( item ) => item.dataset.id );\n+\t\t\tconst sectionContent = section.querySelector( '.section-content' );\n+\t\t\tconst itemLoadMore = section.querySelector(\n+\t\t\t\t'.section-item__loadmore'\n+\t\t\t);\n+\n+\t\t\tif ( itemID && ! item_ids.includes( itemID ) ) {\n+\t\t\t\tconst responseItem = await getResponsiveItem(\n+\t\t\t\t\t'',\n+\t\t\t\t\t2,\n+\t\t\t\t\tsectionID,\n+\t\t\t\t\titemID\n+\t\t\t\t);\n+\n+\t\t\t\tconst { data3, pages3, paged3, page } = responseItem;\n+\n+\t\t\t\tif ( pages3 \u003C= paged3 || pages3 \u003C= page ) {\n+\t\t\t\t\titemLoadMore.remove();\n+\t\t\t\t} else {\n+\t\t\t\t\titemLoadMore.dataset.page = page;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( data3 && sectionContent ) {\n+\t\t\t\t\tsectionContent.insertAdjacentHTML( 'beforeend', data3 );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tele.insertAdjacentHTML( 'beforeend', doc.body.innerHTML );\n+\n+\t\tscrollToItemCurrent.init();\n+\t};\n+\n+\tconst getResponsiveItem = async ( returnData, paged, sectionID, itemID ) => {\n+\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum-items\u002F';\n+\t\turl = addQueryArgs( url, {\n+\t\t\tsectionId: sectionID || '',\n+\t\t\tpage: paged,\n+\t\t} );\n+\t\tlet paramsFetch = {};\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch = {\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t}\n+\n+\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\n+\t\tresponse = await response.json();\n+\n+\t\tconst { data, status, pages, message } = response;\n+\n+\t\tconst { page } = data;\n+\n+\t\tlet item_ids;\n+\n+\t\tif ( status === 'success' ) {\n+\t\t\tconst dataTmp = data.content;\n+\t\t\titem_ids = data.item_ids;\n+\n+\t\t\treturnData += dataTmp;\n+\n+\t\t\tif ( sectionID && item_ids && itemID && ! item_ids.includes( itemID ) ) {\n+\t\t\t\treturn getResponsiveItem(\n+\t\t\t\t\treturnData,\n+\t\t\t\t\tpaged + 1,\n+\t\t\t\t\tsectionID,\n+\t\t\t\t\titemID\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\tisLoadingItems = false;\n+\n+\t\treturn {\n+\t\t\tdata3: returnData,\n+\t\t\tpages3: pages || data.pages,\n+\t\t\tstatus3: status,\n+\t\t\tmessage3: message,\n+\t\t\tpage: page || 0,\n+\t\t};\n+\t};\n+\n+\tconst getResponsive = async ( returnData, page, sectionID ) => {\n+\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum\u002F';\n+\t\turl = addQueryArgs( url, {\n+\t\t\tcourseId: courseID || lpGlobalSettings.post_id || '',\n+\t\t\tpage,\n+\t\t\tsectionID: sectionID || '',\n+\t\t\tloadMore: true,\n+\t\t} );\n+\t\tlet paramsFetch = {};\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch = {\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t}\n+\n+\t\tlet response = await fetch( url, { method: 'GET', ...paramsFetch } );\n+\t\tresponse = await response.json();\n+\n+\t\tconst { data, status, message } = response;\n+\n+\t\tconst returnDataTmp = data.content;\n+\t\tconst section_ids = data.section_ids;\n+\t\tconst pages = data.pages;\n+\n+\t\tif ( status === 'success' ) {\n+\t\t\treturnData += returnDataTmp;\n+\n+\t\t\tif (\n+\t\t\t\tsectionID &&\n+\t\t\t\tsection_ids &&\n+\t\t\t\tsection_ids.length > 0 &&\n+\t\t\t\t! section_ids.includes( sectionID )\n+\t\t\t) {\n+\t\t\t\treturn getResponsive( returnData, page + 1, sectionID );\n+\t\t\t}\n+\t\t}\n+\n+\t\tisLoadingSections = false;\n+\n+\t\treturn {\n+\t\t\tdata2: returnData,\n+\t\t\tpages2: pages || data.pages,\n+\t\t\tpage2: page,\n+\t\t\tstatus2: status,\n+\t\t\tmessage2: message,\n+\t\t};\n+\t};\n+\n+\tSekeleton();\n+\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst sectionBtns = document.querySelectorAll(\n+\t\t\t'.section-item__loadmore'\n+\t\t);\n+\n+\t\t[ ...sectionBtns ].map( async ( sectionBtn ) => {\n+\t\t\tif ( sectionBtn.contains( e.target ) && ! isLoadingItems ) {\n+\t\t\t\tisLoadingItems = true;\n+\t\t\t\tconst sectionItem = sectionBtn.parentNode;\n+\t\t\t\tconst sectionId = sectionItem.getAttribute( 'data-section-id' );\n+\t\t\t\tconst sectionContent =\n+\t\t\t\t\tsectionItem.querySelector( '.section-content' );\n+\n+\t\t\t\tconst paged = parseInt( sectionBtn.dataset.page );\n+\n+\t\t\t\tsectionBtn.classList.add( 'loading' );\n+\n+\t\t\t\ttry {\n+\t\t\t\t\tconst response = await getResponsiveItem(\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\tpaged + 1,\n+\t\t\t\t\t\tsectionId,\n+\t\t\t\t\t\t''\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tconst { data3, pages3, status3, message3 } = response;\n+\n+\t\t\t\t\tif ( status3 === 'error' ) {\n+\t\t\t\t\t\tthrow new Error( message3 || 'Error' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( pages3 \u003C= paged + 1 ) {\n+\t\t\t\t\t\tsectionBtn.remove();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tsectionBtn.dataset.page = paged + 1;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tsectionContent.insertAdjacentHTML( 'beforeend', data3 );\n+\t\t\t\t} catch ( e ) {\n+\t\t\t\t\tsectionContent.insertAdjacentHTML(\n+\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\n+\t\t\t\t\t\t\te.message ||\n+\t\t\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\n+\t\t\t\t\t\t}\u003C\u002Fdiv>`\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tsectionBtn.classList.remove( 'loading' );\n+\n+\t\t\t\tsearchCourseContent();\n+\t\t\t}\n+\t\t} );\n+\n+\t\t\u002F\u002F Load more Sections\n+\t\tconst moreSections = document.querySelectorAll(\n+\t\t\t'.curriculum-more__button'\n+\t\t);\n+\n+\t\t[ ...moreSections ].map( async ( moreSection ) => {\n+\t\t\tif ( moreSection.contains( e.target ) && ! isLoadingSections ) {\n+\t\t\t\tisLoadingSections = true;\n+\t\t\t\tconst paged = parseInt( moreSection.dataset.page );\n+\n+\t\t\t\tconst sections =\n+\t\t\t\t\tmoreSection.parentNode.parentNode.querySelector(\n+\t\t\t\t\t\t'.curriculum-sections'\n+\t\t\t\t\t);\n+\n+\t\t\t\tif ( paged && sections ) {\n+\t\t\t\t\tmoreSection.classList.add( 'loading' );\n+\n+\t\t\t\t\ttry {\n+\t\t\t\t\t\tconst response2 = await getResponsive(\n+\t\t\t\t\t\t\t'',\n+\t\t\t\t\t\t\tpaged + 1,\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tconst { data2, pages2, status2, message2 } = response2;\n+\n+\t\t\t\t\t\tif ( status2 === 'error' ) {\n+\t\t\t\t\t\t\tthrow new Error( message2 || 'Error' );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( pages2 \u003C= paged + 1 ) {\n+\t\t\t\t\t\t\tmoreSection.remove();\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tmoreSection.dataset.page = paged + 1;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tsections.insertAdjacentHTML( 'beforeend', data2 );\n+\t\t\t\t\t} catch ( e ) {\n+\t\t\t\t\t\tsections.insertAdjacentHTML(\n+\t\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t\t`\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${\n+\t\t\t\t\t\t\t\te.message ||\n+\t\t\t\t\t\t\t\t'Error: Query lp\u002Fv1\u002Flazy-load\u002Fcourse-curriculum'\n+\t\t\t\t\t\t\t}\u003C\u002Fdiv>`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tmoreSection.classList.remove( 'loading' );\n+\n+\t\t\t\t\tsearchCourseContent();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\n+\t\t\u002F\u002F Show\u002FHide accordion\n+\t\tif ( document.querySelector( '.learnpress-course-curriculum' ) ) {\n+\t\t\tconst sections = document.querySelectorAll( '.section' );\n+\n+\t\t\t[ ...sections ].map( ( section ) => {\n+\t\t\t\tif ( section.contains( e.target ) ) {\n+\t\t\t\t\tconst toggle = section.querySelector( '.section-left' );\n+\n+\t\t\t\t\ttoggle.contains( e.target ) &&\n+\t\t\t\t\t\tsection.classList.toggle( 'closed' );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fsingle-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-import SingleCurriculums from '.\u002Fsingle-curriculum\u002Findex';\r\n-import lpModalOverlayCompleteItem from '.\u002Fshow-lp-overlay-complete-item';\r\n-\u002F\u002Fimport courseCurriculumSkeleton from '.\u002Fsingle-curriculum\u002Fskeleton';\r\n-import lpMaterialsLoad from '.\u002Fmaterial';\r\n-\r\n-export default SingleCurriculums;\r\n-\r\n-\u002F\u002F Comment code use for old curriculum\r\n-\u002F*export const init = () => {\r\n-\twp.element.render(\r\n-\t\t\u003CSingleCurriculums \u002F>,\r\n-\t\tdocument.getElementById( 'learn-press-course-curriculum' )\r\n-\t);\r\n-};*\u002F\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\t\u002F\u002FLP.Hook.doAction( 'course-ready' );\r\n-\tlpModalOverlayCompleteItem.init();\r\n-\r\n-\tlpMaterialsLoad();\r\n-\t\u002F\u002FcourseCurriculumSkeleton();\r\n-\t\u002F\u002Finit();\r\n-} );\r\n-\r\n-\u002F\u002F Comment code use for old curriculum\r\n-\u002F*const detectedElCurriculum = setInterval( function() {\r\n-\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\r\n-\tif ( elementCurriculum ) {\r\n-\t\tcourseCurriculumSkeleton();\r\n-\t\tclearInterval( detectedElCurriculum );\r\n-\t}\r\n-}, 1 );*\u002F\r\n+import SingleCurriculums from '.\u002Fsingle-curriculum\u002Findex';\n+import lpModalOverlayCompleteItem from '.\u002Fshow-lp-overlay-complete-item';\n+\u002F\u002Fimport courseCurriculumSkeleton from '.\u002Fsingle-curriculum\u002Fskeleton';\n+import lpMaterialsLoad from '.\u002Fmaterial';\n+\n+export default SingleCurriculums;\n+\n+\u002F\u002F Comment code use for old curriculum\n+\u002F*export const init = () => {\n+\twp.element.render(\n+\t\t\u003CSingleCurriculums \u002F>,\n+\t\tdocument.getElementById( 'learn-press-course-curriculum' )\n+\t);\n+};*\u002F\n+\n+document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\t\u002F\u002FLP.Hook.doAction( 'course-ready' );\n+\tlpModalOverlayCompleteItem.init();\n+\n+\tlpMaterialsLoad();\n+\t\u002F\u002FcourseCurriculumSkeleton();\n+\t\u002F\u002Finit();\n+} );\n+\n+\u002F\u002F Comment code use for old curriculum\n+\u002F*const detectedElCurriculum = setInterval( function() {\n+\tconst elementCurriculum = document.querySelector( '.learnpress-course-curriculum' );\n+\tif ( elementCurriculum ) {\n+\t\tcourseCurriculumSkeleton();\n+\t\tclearInterval( detectedElCurriculum );\n+\t}\n+}, 1 );*\u002F\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Ftabs-scroll.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Ftabs-scroll.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Ftabs-scroll.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Ftabs-scroll.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-export default function TabsDragScroll() {\r\n-\t\u002F\u002F Selectors and DOM elements\r\n-\tconst TabsDragScroll = document.querySelector('.TabsDragScroll');\r\n-\tif (!TabsDragScroll) return;\r\n-\r\n-\tconst tabMenu = TabsDragScroll.querySelector('ul');\r\n-\r\n-\t\u002F\u002F Dragging functionality\r\n-\tlet activeDrag = false;\r\n-\ttabMenu.addEventListener('mousemove', (event) => {\r\n-\t\tif (!activeDrag) return;\r\n-\t\ttabMenu.scrollLeft -= event.movementX;\r\n-\t\t\u002F\u002F iconVisibility();\r\n-\t\ttabMenu.classList.add('dragging');\r\n-\t});\r\n-\tdocument.addEventListener('mouseup', () => {\r\n-\t\tactiveDrag = false;\r\n-\t\ttabMenu.classList.remove('dragging');\r\n-\t});\r\n-\ttabMenu.addEventListener('mousedown', () => {\r\n-\t\tactiveDrag = true;\r\n-\t});\r\n-\r\n-\t\u002F\u002F Scroll to \u003Cli> on click\r\n-\tconst scrollToLi = (li) => {\r\n-\t\tconst liLeft = li.offsetLeft;\r\n-\t\tconst liWidth = li.offsetWidth;\r\n-\t\tconst tabCenter = (tabMenu.clientWidth \u002F 2) - (liWidth \u002F 2);\r\n-\r\n-\t\ttabMenu.scrollTo({\r\n-\t\t\tleft: liLeft - tabCenter,\r\n-\t\t\tbehavior: 'smooth',\r\n-\t\t});\r\n-\t};\r\n-\r\n-\t\u002F\u002F Add click event listeners to all \u003Cli> elements\r\n-\ttabMenu.querySelectorAll('li').forEach((li) => {\r\n-\t\tli.addEventListener('click', () => scrollToLi(li));\r\n-\t});\r\n-}\r\n+export default function TabsDragScroll() {\n+\t\u002F\u002F Selectors and DOM elements\n+\tconst TabsDragScroll = document.querySelector('.TabsDragScroll');\n+\tif (!TabsDragScroll) return;\n+\n+\tconst tabMenu = TabsDragScroll.querySelector('ul');\n+\n+\t\u002F\u002F Dragging functionality\n+\tlet activeDrag = false;\n+\ttabMenu.addEventListener('mousemove', (event) => {\n+\t\tif (!activeDrag) return;\n+\t\ttabMenu.scrollLeft -= event.movementX;\n+\t\t\u002F\u002F iconVisibility();\n+\t\ttabMenu.classList.add('dragging');\n+\t});\n+\tdocument.addEventListener('mouseup', () => {\n+\t\tactiveDrag = false;\n+\t\ttabMenu.classList.remove('dragging');\n+\t});\n+\ttabMenu.addEventListener('mousedown', () => {\n+\t\tactiveDrag = true;\n+\t});\n+\n+\t\u002F\u002F Scroll to \u003Cli> on click\n+\tconst scrollToLi = (li) => {\n+\t\tconst liLeft = li.offsetLeft;\n+\t\tconst liWidth = li.offsetWidth;\n+\t\tconst tabCenter = (tabMenu.clientWidth \u002F 2) - (liWidth \u002F 2);\n+\n+\t\ttabMenu.scrollTo({\n+\t\t\tleft: liLeft - tabCenter,\n+\t\t\tbehavior: 'smooth',\n+\t\t});\n+\t};\n+\n+\t\u002F\u002F Add click event listeners to all \u003Cli> elements\n+\ttabMenu.querySelectorAll('li').forEach((li) => {\n+\t\tli.addEventListener('click', () => scrollToLi(li));\n+\t});\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fcookies.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fcookies.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fcookies.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fcookies.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-const Cookies = {\r\n-\tget: ( name, def, global ) => {\r\n-\t\tlet ret;\r\n-\r\n-\t\tif ( global ) {\r\n-\t\t\tret = wpCookies.get( name );\r\n-\t\t} else {\r\n-\t\t\tlet ck = wpCookies.get( 'LP' );\r\n-\t\t\tif ( ck ) {\r\n-\t\t\t\tck = JSON.parse( ck );\r\n-\t\t\t\tret = name ? ck[ name ] : ck;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! ret && ret !== def ) {\r\n-\t\t\tret = def;\r\n-\t\t}\r\n-\r\n-\t\treturn ret;\r\n-\t},\r\n-\r\n-\tset( name, value, expires, path, domain, secure ) {\r\n-\t\tif ( arguments.length > 2 ) {\r\n-\t\t\twpCookies.set( name, value, expires, path, domain, secure );\r\n-\t\t} else if ( arguments.length == 2 ) {\r\n-\t\t\tlet ck = wpCookies.get( 'LP' );\r\n-\r\n-\t\t\tif ( ck ) {\r\n-\t\t\t\tck = JSON.parse( ck );\r\n-\t\t\t} else {\r\n-\t\t\t\tck = {};\r\n-\t\t\t}\r\n-\r\n-\t\t\tck[ name ] = value;\r\n-\r\n-\t\t\twpCookies.set( 'LP', JSON.stringify( ck ), '', '\u002F' );\r\n-\t\t} else {\r\n-\t\t\twpCookies.set( 'LP', JSON.stringify( name ), '', '\u002F' );\r\n-\t\t}\r\n-\t},\r\n-\r\n-\tremove( name ) {\r\n-\t\tconst allCookies = Cookies.get();\r\n-\t\tconst reg = new RegExp( name, 'g' );\r\n-\t\tconst newCookies = {};\r\n-\t\tconst useRegExp = name.match( \u002F\\*\u002F );\r\n-\r\n-\t\tfor ( const i in allCookies ) {\r\n-\t\t\tif ( useRegExp ) {\r\n-\t\t\t\tif ( ! i.match( reg ) ) {\r\n-\t\t\t\t\tnewCookies[ i ] = allCookies[ i ];\r\n-\t\t\t\t}\r\n-\t\t\t} else if ( name != i ) {\r\n-\t\t\t\tnewCookies[ i ] = allCookies[ i ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tCookies.set( newCookies );\r\n-\t},\r\n-};\r\n-\r\n-export default Cookies;\r\n+const Cookies = {\n+\tget: ( name, def, global ) => {\n+\t\tlet ret;\n+\n+\t\tif ( global ) {\n+\t\t\tret = wpCookies.get( name );\n+\t\t} else {\n+\t\t\tlet ck = wpCookies.get( 'LP' );\n+\t\t\tif ( ck ) {\n+\t\t\t\tck = JSON.parse( ck );\n+\t\t\t\tret = name ? ck[ name ] : ck;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! ret && ret !== def ) {\n+\t\t\tret = def;\n+\t\t}\n+\n+\t\treturn ret;\n+\t},\n+\n+\tset( name, value, expires, path, domain, secure ) {\n+\t\tif ( arguments.length > 2 ) {\n+\t\t\twpCookies.set( name, value, expires, path, domain, secure );\n+\t\t} else if ( arguments.length == 2 ) {\n+\t\t\tlet ck = wpCookies.get( 'LP' );\n+\n+\t\t\tif ( ck ) {\n+\t\t\t\tck = JSON.parse( ck );\n+\t\t\t} else {\n+\t\t\t\tck = {};\n+\t\t\t}\n+\n+\t\t\tck[ name ] = value;\n+\n+\t\t\twpCookies.set( 'LP', JSON.stringify( ck ), '', '\u002F' );\n+\t\t} else {\n+\t\t\twpCookies.set( 'LP', JSON.stringify( name ), '', '\u002F' );\n+\t\t}\n+\t},\n+\n+\tremove( name ) {\n+\t\tconst allCookies = Cookies.get();\n+\t\tconst reg = new RegExp( name, 'g' );\n+\t\tconst newCookies = {};\n+\t\tconst useRegExp = name.match( \u002F\\*\u002F );\n+\n+\t\tfor ( const i in allCookies ) {\n+\t\t\tif ( useRegExp ) {\n+\t\t\t\tif ( ! i.match( reg ) ) {\n+\t\t\t\t\tnewCookies[ i ] = allCookies[ i ];\n+\t\t\t\t}\n+\t\t\t} else if ( name != i ) {\n+\t\t\t\tnewCookies[ i ] = allCookies[ i ];\n+\t\t\t}\n+\t\t}\n+\n+\t\tCookies.set( newCookies );\n+\t},\n+};\n+\n+export default Cookies;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fhandle-ajax-api.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-const handleAjax = function( url, params, functions ) {\r\n-\twp.apiFetch( {\r\n-\t\tpath: url,\r\n-\t\tmethod: 'POST',\r\n-\t\tdata: params,\r\n-\t} ).then( ( res ) => {\r\n-\t\tif ( 'function' === typeof functions.success ) {\r\n-\t\t\tfunctions.success( res );\r\n-\t\t}\r\n-\t} ).catch( ( err ) => {\r\n-\t\tif ( 'function' === typeof functions.error ) {\r\n-\t\t\tfunctions.error( err );\r\n-\t\t}\r\n-\t} ).then( () => {\r\n-\t\tif ( 'function' === typeof functions.completed ) {\r\n-\t\t\tfunctions.completed();\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-export default handleAjax;\r\n+const handleAjax = function( url, params, functions ) {\n+\twp.apiFetch( {\n+\t\tpath: url,\n+\t\tmethod: 'POST',\n+\t\tdata: params,\n+\t} ).then( ( res ) => {\n+\t\tif ( 'function' === typeof functions.success ) {\n+\t\t\tfunctions.success( res );\n+\t\t}\n+\t} ).catch( ( err ) => {\n+\t\tif ( 'function' === typeof functions.error ) {\n+\t\t\tfunctions.error( err );\n+\t\t}\n+\t} ).then( () => {\n+\t\tif ( 'function' === typeof functions.completed ) {\n+\t\t\tfunctions.completed();\n+\t\t}\n+\t} );\n+};\n+\n+export default handleAjax;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Flp-modal-overlay.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Flp-modal-overlay.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Flp-modal-overlay.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Flp-modal-overlay.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-const $ = jQuery;\r\n-let elLPOverlay = null;\r\n-const lpModalOverlay = {\r\n-\telLPOverlay: null,\r\n-\telMainContent: null,\r\n-\telTitle: null,\r\n-\telBtnYes: null,\r\n-\telBtnNo: null,\r\n-\telFooter: null,\r\n-\telCalledModal: null,\r\n-\tcallBackYes: null,\r\n-\tinstance: null,\r\n-\tinit() {\r\n-\t\tif ( this.instance ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\tthis.elLPOverlay = $( '.lp-overlay' );\r\n-\r\n-\t\tif ( ! this.elLPOverlay.length ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t\telLPOverlay = this.elLPOverlay;\r\n-\r\n-\t\tthis.elMainContent = elLPOverlay.find( '.main-content' );\r\n-\t\tthis.elTitle = elLPOverlay.find( '.modal-title' );\r\n-\t\tthis.elBtnYes = elLPOverlay.find( '.btn-yes' );\r\n-\t\tthis.elBtnNo = elLPOverlay.find( '.btn-no' );\r\n-\t\tthis.elFooter = elLPOverlay.find( '.lp-modal-footer' );\r\n-\r\n-\t\t$( document ).on( 'click', '.close, .btn-no', function() {\r\n-\t\t\telLPOverlay.hide();\r\n-\t\t} );\r\n-\r\n-\t\t$( document ).on( 'click', '.btn-yes', function( e ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\te.stopPropagation();\r\n-\r\n-\t\t\tif ( 'function' === typeof lpModalOverlay.callBackYes ) {\r\n-\t\t\t\tlpModalOverlay.callBackYes( e );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tthis.instance = this;\r\n-\r\n-\t\treturn true;\r\n-\t},\r\n-\tsetElCalledModal( elCalledModal ) {\r\n-\t\tthis.elCalledModal = elCalledModal;\r\n-\t},\r\n-\tsetContentModal( content, event ) {\r\n-\t\tthis.elMainContent.html( content );\r\n-\t\tif ( 'function' === typeof event ) {\r\n-\t\t\tevent();\r\n-\t\t}\r\n-\t},\r\n-\tsetTitleModal( content ) {\r\n-\t\tthis.elTitle.html( content );\r\n-\t},\r\n-};\r\n-\r\n-export default lpModalOverlay;\r\n+const $ = jQuery;\n+let elLPOverlay = null;\n+const lpModalOverlay = {\n+\telLPOverlay: null,\n+\telMainContent: null,\n+\telTitle: null,\n+\telBtnYes: null,\n+\telBtnNo: null,\n+\telFooter: null,\n+\telCalledModal: null,\n+\tcallBackYes: null,\n+\tinstance: null,\n+\tinit() {\n+\t\tif ( this.instance ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\tthis.elLPOverlay = $( '.lp-overlay' );\n+\n+\t\tif ( ! this.elLPOverlay.length ) {\n+\t\t\treturn false;\n+\t\t}\n+\t\telLPOverlay = this.elLPOverlay;\n+\n+\t\tthis.elMainContent = elLPOverlay.find( '.main-content' );\n+\t\tthis.elTitle = elLPOverlay.find( '.modal-title' );\n+\t\tthis.elBtnYes = elLPOverlay.find( '.btn-yes' );\n+\t\tthis.elBtnNo = elLPOverlay.find( '.btn-no' );\n+\t\tthis.elFooter = elLPOverlay.find( '.lp-modal-footer' );\n+\n+\t\t$( document ).on( 'click', '.close, .btn-no', function() {\n+\t\t\telLPOverlay.hide();\n+\t\t} );\n+\n+\t\t$( document ).on( 'click', '.btn-yes', function( e ) {\n+\t\t\te.preventDefault();\n+\t\t\te.stopPropagation();\n+\n+\t\t\tif ( 'function' === typeof lpModalOverlay.callBackYes ) {\n+\t\t\t\tlpModalOverlay.callBackYes( e );\n+\t\t\t}\n+\t\t} );\n+\n+\t\tthis.instance = this;\n+\n+\t\treturn true;\n+\t},\n+\tsetElCalledModal( elCalledModal ) {\n+\t\tthis.elCalledModal = elCalledModal;\n+\t},\n+\tsetContentModal( content, event ) {\n+\t\tthis.elMainContent.html( content );\n+\t\tif ( 'function' === typeof event ) {\n+\t\t\tevent();\n+\t\t}\n+\t},\n+\tsetTitleModal( content ) {\n+\t\tthis.elTitle.html( content );\n+\t},\n+};\n+\n+export default lpModalOverlay;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Futils.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Futils.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Futils.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fapps\u002Fjs\u002Futils\u002Futils.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,228 @@\n-const lpFetchAPI = ( url, data = {}, functions = {} ) => {\r\n-\tif ( 'function' === typeof functions.before ) {\r\n-\t\tfunctions.before();\r\n-\t}\r\n-\r\n-\tfetch( url, { method: 'GET', ...data } )\r\n-\t\t.then( ( response ) => response.json() )\r\n-\t\t.then( ( response ) => {\r\n-\t\t\tif ( 'function' === typeof functions.success ) {\r\n-\t\t\t\tfunctions.success( response );\r\n-\t\t\t}\r\n-\t\t} ).catch( ( err ) => {\r\n-\t\t\tif ( 'function' === typeof functions.error ) {\r\n-\t\t\t\tfunctions.error( err );\r\n-\t\t\t}\r\n-\t\t} )\r\n-\t\t.finally( () => {\r\n-\t\t\tif ( 'function' === typeof functions.completed ) {\r\n-\t\t\t\tfunctions.completed();\r\n-\t\t\t}\r\n-\t\t} );\r\n-};\r\n-\r\n-const lpGetCurrentURLNoParam = () => {\r\n-\tlet currentUrl = window.location.href;\r\n-\tconst hasParams = currentUrl.includes( '?' );\r\n-\tif ( hasParams ) {\r\n-\t\tcurrentUrl = currentUrl.split( '?' )[ 0 ];\r\n-\t}\r\n-\r\n-\treturn currentUrl;\r\n-};\r\n-\r\n-const lpAddQueryArgs = ( endpoint, args ) => {\r\n-\tconst url = new URL( endpoint );\r\n-\r\n-\tObject.keys( args ).forEach( ( arg ) => {\r\n-\t\turl.searchParams.set( arg, args[ arg ] );\r\n-\t} );\r\n-\r\n-\treturn url;\r\n-};\r\n-\r\n-export { lpFetchAPI, lpAddQueryArgs, lpGetCurrentURLNoParam };\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.3\n+ *\u002F\n+const lpClassName = {\n+\thidden: 'lp-hidden',\n+\tloading: 'loading',\n+\telCollapse: 'lp-collapse',\n+\telSectionToggle: '.lp-section-toggle',\n+\telTriggerToggle: '.lp-trigger-toggle',\n+};\n+\n+const lpFetchAPI = ( url, data = {}, functions = {} ) => {\n+\tif ( 'function' === typeof functions.before ) {\n+\t\tfunctions.before();\n+\t}\n+\n+\tfetch( url, { method: 'GET', ...data } )\n+\t\t.then( ( response ) => response.json() )\n+\t\t.then( ( response ) => {\n+\t\t\tif ( 'function' === typeof functions.success ) {\n+\t\t\t\tfunctions.success( response );\n+\t\t\t}\n+\t\t} )\n+\t\t.catch( ( err ) => {\n+\t\t\tif ( 'function' === typeof functions.error ) {\n+\t\t\t\tfunctions.error( err );\n+\t\t\t}\n+\t\t} )\n+\t\t.finally( () => {\n+\t\t\tif ( 'function' === typeof functions.completed ) {\n+\t\t\t\tfunctions.completed();\n+\t\t\t}\n+\t\t} );\n+};\n+\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n+ *\u002F\n+const lpGetCurrentURLNoParam = () => {\n+\tlet currentUrl = window.location.href;\n+\tconst hasParams = currentUrl.includes( '?' );\n+\tif ( hasParams ) {\n+\t\tcurrentUrl = currentUrl.split( '?' )[ 0 ];\n+\t}\n+\n+\treturn currentUrl;\n+};\n+\n+const lpAddQueryArgs = ( endpoint, args ) => {\n+\tconst url = new URL( endpoint );\n+\n+\tObject.keys( args ).forEach( ( arg ) => {\n+\t\turl.searchParams.set( arg, args[ arg ] );\n+\t} );\n+\n+\treturn url;\n+};\n+\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementViewed = ( el, callback ) => {\n+\tconst observerSeeItem = new IntersectionObserver( function ( entries ) {\n+\t\tfor ( const entry of entries ) {\n+\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\tcallback( entry );\n+\t\t\t}\n+\t\t}\n+\t} );\n+\n+\tobserverSeeItem.observe( el );\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+const listenElementCreated = ( callback ) => {\n+\tconst observerCreateItem = new MutationObserver( function ( mutations ) {\n+\t\tmutations.forEach( function ( mutation ) {\n+\t\t\tif ( mutation.addedNodes ) {\n+\t\t\t\tmutation.addedNodes.forEach( function ( node ) {\n+\t\t\t\t\tif ( node.nodeType === 1 ) {\n+\t\t\t\t\t\tcallback( node );\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+\n+\tobserverCreateItem.observe( document, { childList: true, subtree: true } );\n+\t\u002F\u002F End.\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n+ *\u002F\n+const lpOnElementReady = ( selector, callback ) => {\n+\tconst element = document.querySelector( selector );\n+\tif ( element ) {\n+\t\tcallback( element );\n+\t\treturn;\n+\t}\n+\n+\tconst observer = new MutationObserver( ( mutations, obs ) => {\n+\t\tconst element = document.querySelector( selector );\n+\t\tif ( element ) {\n+\t\t\tobs.disconnect();\n+\t\t\tcallback( element );\n+\t\t}\n+\t} );\n+\n+\tobserver.observe( document.documentElement, {\n+\t\tchildList: true,\n+\t\tsubtree: true,\n+\t} );\n+};\n+\n+\u002F\u002F Parse JSON from string with content include LP_AJAX_START.\n+const lpAjaxParseJsonOld = ( data ) => {\n+\tif ( typeof data !== 'string' ) {\n+\t\treturn data;\n+\t}\n+\n+\tconst m = String.raw( { raw: data } ).match( \u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs );\n+\n+\ttry {\n+\t\tif ( m ) {\n+\t\t\tdata = JSON.parse( m[ 1 ].replace( \u002F(?:\\r\\n|\\r|\\n)\u002Fg, '' ) );\n+\t\t} else {\n+\t\t\tdata = JSON.parse( data );\n+\t\t}\n+\t} catch ( e ) {\n+\t\tdata = {};\n+\t}\n+\n+\treturn data;\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpShowHideEl = ( el, status = 0 ) => {\n+\tif ( ! el ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( ! status ) {\n+\t\tel.classList.add( lpClassName.hidden );\n+\t} else {\n+\t\tel.classList.remove( lpClassName.hidden );\n+\t}\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+const lpSetLoadingEl = ( el, status ) => {\n+\tif ( ! el ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( ! status ) {\n+\t\tel.classList.remove( lpClassName.loading );\n+\t} else {\n+\t\tel.classList.add( lpClassName.loading );\n+\t}\n+};\n+\n+\u002F\u002F Toggle collapse section\n+const toggleCollapse = ( e, target, elTriggerClassName = '', elsExclude = [], callback ) => {\n+\tif ( ! elTriggerClassName ) {\n+\t\telTriggerClassName = lpClassName.elTriggerToggle;\n+\t}\n+\n+\t\u002F\u002F Exclude elements, which should not trigger the collapse toggle\n+\tif ( elsExclude && elsExclude.length > 0 ) {\n+\t\tfor ( const elExclude of elsExclude ) {\n+\t\t\tif ( target.closest( elExclude ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tconst elTrigger = target.closest( elTriggerClassName );\n+\tif ( ! elTrigger ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elSectionToggle = elTrigger.closest( `${ lpClassName.elSectionToggle }` );\n+\tif ( ! elSectionToggle ) {\n+\t\treturn;\n+\t}\n+\n+\telSectionToggle.classList.toggle( `${ lpClassName.elCollapse }` );\n+\n+\tif ( 'function' === typeof callback ) {\n+\t\tcallback( elSectionToggle );\n+\t}\n+};\n+\n+export {\n+\tlpFetchAPI,\n+\tlpAddQueryArgs,\n+\tlpGetCurrentURLNoParam,\n+\tlistenElementViewed,\n+\tlistenElementCreated,\n+\tlpOnElementReady,\n+\tlpAjaxParseJsonOld,\n+\tlpShowHideEl,\n+\tlpSetLoadingEl,\n+\tlpClassName,\n+\ttoggleCollapse,\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-\u002F*!\r\n- * Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\r\n- * License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\r\n- *\u002F\r\n-.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:\"\\f26e\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-accusoft:before{content:\"\\f369\"}.fa-acquisitions-incorporated:before{content:\"\\f6af\"}.fa-ad:before{content:\"\\f641\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-card:before{content:\"\\f2bb\"}.fa-adjust:before{content:\"\\f042\"}.fa-adn:before{content:\"\\f170\"}.fa-adobe:before{content:\"\\f778\"}.fa-adversal:before{content:\"\\f36a\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-air-freshener:before{content:\"\\f5d0\"}.fa-airbnb:before{content:\"\\f834\"}.fa-algolia:before{content:\"\\f36c\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-justify:before{content:\"\\f039\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-right:before{content:\"\\f038\"}.fa-alipay:before{content:\"\\f642\"}.fa-allergies:before{content:\"\\f461\"}.fa-amazon:before{content:\"\\f270\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-amilia:before{content:\"\\f36d\"}.fa-anchor:before{content:\"\\f13d\"}.fa-android:before{content:\"\\f17b\"}.fa-angellist:before{content:\"\\f209\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-down:before{content:\"\\f107\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angry:before{content:\"\\f556\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-angular:before{content:\"\\f420\"}.fa-ankh:before{content:\"\\f644\"}.fa-app-store:before{content:\"\\f36f\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-apper:before{content:\"\\f371\"}.fa-apple:before{content:\"\\f179\"}.fa-apple-alt:before{content:\"\\f5d1\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-archive:before{content:\"\\f187\"}.fa-archway:before{content:\"\\f557\"}.fa-arrow-alt-circle-down:before{content:\"\\f358\"}.fa-arrow-alt-circle-left:before{content:\"\\f359\"}.fa-arrow-alt-circle-right:before{content:\"\\f35a\"}.fa-arrow-alt-circle-up:before{content:\"\\f35b\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-arrows-alt-h:before{content:\"\\f337\"}.fa-arrows-alt-v:before{content:\"\\f338\"}.fa-artstation:before{content:\"\\f77a\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asterisk:before{content:\"\\f069\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-at:before{content:\"\\f1fa\"}.fa-atlas:before{content:\"\\f558\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-atom:before{content:\"\\f5d2\"}.fa-audible:before{content:\"\\f373\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-avianex:before{content:\"\\f374\"}.fa-aviato:before{content:\"\\f421\"}.fa-award:before{content:\"\\f559\"}.fa-aws:before{content:\"\\f375\"}.fa-baby:before{content:\"\\f77c\"}.fa-baby-carriage:before{content:\"\\f77d\"}.fa-backspace:before{content:\"\\f55a\"}.fa-backward:before{content:\"\\f04a\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-balance-scale-left:before{content:\"\\f515\"}.fa-balance-scale-right:before{content:\"\\f516\"}.fa-ban:before{content:\"\\f05e\"}.fa-band-aid:before{content:\"\\f462\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-barcode:before{content:\"\\f02a\"}.fa-bars:before{content:\"\\f0c9\"}.fa-baseball-ball:before{content:\"\\f433\"}.fa-basketball-ball:before{content:\"\\f434\"}.fa-bath:before{content:\"\\f2cd\"}.fa-battery-empty:before{content:\"\\f244\"}.fa-battery-full:before{content:\"\\f240\"}.fa-battery-half:before{content:\"\\f242\"}.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battle-net:before{content:\"\\f835\"}.fa-bed:before{content:\"\\f236\"}.fa-beer:before{content:\"\\f0fc\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-bell:before{content:\"\\f0f3\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bible:before{content:\"\\f647\"}.fa-bicycle:before{content:\"\\f206\"}.fa-biking:before{content:\"\\f84a\"}.fa-bimobject:before{content:\"\\f378\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-biohazard:before{content:\"\\f780\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-bity:before{content:\"\\f37a\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-blender:before{content:\"\\f517\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-blind:before{content:\"\\f29d\"}.fa-blog:before{content:\"\\f781\"}.fa-blogger:before{content:\"\\f37c\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-bold:before{content:\"\\f032\"}.fa-bolt:before{content:\"\\f0e7\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-bone:before{content:\"\\f5d7\"}.fa-bong:before{content:\"\\f55c\"}.fa-book:before{content:\"\\f02d\"}.fa-book-dead:before{content:\"\\f6b7\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-reader:before{content:\"\\f5da\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-border-all:before{content:\"\\f84c\"}.fa-border-none:before{content:\"\\f850\"}.fa-border-style:before{content:\"\\f853\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-box:before{content:\"\\f466\"}.fa-box-open:before{content:\"\\f49e\"}.fa-boxes:before{content:\"\\f468\"}.fa-braille:before{content:\"\\f2a1\"}.fa-brain:before{content:\"\\f5dc\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-broadcast-tower:before{content:\"\\f519\"}.fa-broom:before{content:\"\\f51a\"}.fa-brush:before{content:\"\\f55d\"}.fa-btc:before{content:\"\\f15a\"}.fa-buffer:before{content:\"\\f837\"}.fa-bug:before{content:\"\\f188\"}.fa-building:before{content:\"\\f1ad\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bullseye:before{content:\"\\f140\"}.fa-burn:before{content:\"\\f46a\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-bus:before{content:\"\\f207\"}.fa-bus-alt:before{content:\"\\f55e\"}.fa-business-time:before{content:\"\\f64a\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-calendar:before{content:\"\\f133\"}.fa-calendar-alt:before{content:\"\\f073\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-calendar-times:before{content:\"\\f273\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-camera:before{content:\"\\f030\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-campground:before{content:\"\\f6bb\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-capsules:before{content:\"\\f46b\"}.fa-car:before{content:\"\\f1b9\"}.fa-car-alt:before{content:\"\\f5de\"}.fa-car-battery:before{content:\"\\f5df\"}.fa-car-crash:before{content:\"\\f5e1\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-caret-square-down:before{content:\"\\f150\"}.fa-caret-square-left:before{content:\"\\f191\"}.fa-caret-square-right:before{content:\"\\f152\"}.fa-caret-square-up:before{content:\"\\f151\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-carrot:before{content:\"\\f787\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cash-register:before{content:\"\\f788\"}.fa-cat:before{content:\"\\f6be\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-centercode:before{content:\"\\f380\"}.fa-centos:before{content:\"\\f789\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-chair:before{content:\"\\f6c0\"}.fa-chalkboard:before{content:\"\\f51b\"}.fa-chalkboard-teacher:before{content:\"\\f51c\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-chart-area:before{content:\"\\f1fe\"}.fa-chart-bar:before{content:\"\\f080\"}.fa-chart-line:before{content:\"\\f201\"}.fa-chart-pie:before{content:\"\\f200\"}.fa-check:before{content:\"\\f00c\"}.fa-check-circle:before{content:\"\\f058\"}.fa-check-double:before{content:\"\\f560\"}.fa-check-square:before{content:\"\\f14a\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-chess:before{content:\"\\f439\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-child:before{content:\"\\f1ae\"}.fa-chrome:before{content:\"\\f268\"}.fa-chromecast:before{content:\"\\f838\"}.fa-church:before{content:\"\\f51d\"}.fa-circle:before{content:\"\\f111\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-city:before{content:\"\\f64f\"}.fa-clinic-medical:before{content:\"\\f7f2\"}.fa-clipboard:before{content:\"\\f328\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-clock:before{content:\"\\f017\"}.fa-clone:before{content:\"\\f24d\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-cloud-download-alt:before{content:\"\\f381\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-cloud-upload-alt:before{content:\"\\f382\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-cocktail:before{content:\"\\f561\"}.fa-code:before{content:\"\\f121\"}.fa-code-branch:before{content:\"\\f126\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-codiepie:before{content:\"\\f284\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cog:before{content:\"\\f013\"}.fa-cogs:before{content:\"\\f085\"}.fa-coins:before{content:\"\\f51e\"}.fa-columns:before{content:\"\\f0db\"}.fa-comment:before{content:\"\\f075\"}.fa-comment-alt:before{content:\"\\f27a\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-comment-dots:before{content:\"\\f4ad\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-comments:before{content:\"\\f086\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-compass:before{content:\"\\f14e\"}.fa-compress:before{content:\"\\f066\"}.fa-compress-arrows-alt:before{content:\"\\f78c\"}.fa-concierge-bell:before{content:\"\\f562\"}.fa-confluence:before{content:\"\\f78d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-contao:before{content:\"\\f26d\"}.fa-cookie:before{content:\"\\f563\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-copy:before{content:\"\\f0c5\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cpanel:before{content:\"\\f388\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-crop:before{content:\"\\f125\"}.fa-crop-alt:before{content:\"\\f565\"}.fa-cross:before{content:\"\\f654\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-crow:before{content:\"\\f520\"}.fa-crown:before{content:\"\\f521\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-css3:before{content:\"\\f13c\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-cut:before{content:\"\\f0c4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-dashcube:before{content:\"\\f210\"}.fa-database:before{content:\"\\f1c0\"}.fa-deaf:before{content:\"\\f2a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-democrat:before{content:\"\\f747\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-desktop:before{content:\"\\f108\"}.fa-dev:before{content:\"\\f6cc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-dhl:before{content:\"\\f790\"}.fa-diagnoses:before{content:\"\\f470\"}.fa-diaspora:before{content:\"\\f791\"}.fa-dice:before{content:\"\\f522\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-dice-five:before{content:\"\\f523\"}.fa-dice-four:before{content:\"\\f524\"}.fa-dice-one:before{content:\"\\f525\"}.fa-dice-six:before{content:\"\\f526\"}.fa-dice-three:before{content:\"\\f527\"}.fa-dice-two:before{content:\"\\f528\"}.fa-digg:before{content:\"\\f1a6\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-digital-tachograph:before{content:\"\\f566\"}.fa-directions:before{content:\"\\f5eb\"}.fa-discord:before{content:\"\\f392\"}.fa-discourse:before{content:\"\\f393\"}.fa-divide:before{content:\"\\f529\"}.fa-dizzy:before{content:\"\\f567\"}.fa-dna:before{content:\"\\f471\"}.fa-dochub:before{content:\"\\f394\"}.fa-docker:before{content:\"\\f395\"}.fa-dog:before{content:\"\\f6d3\"}.fa-dollar-sign:before{content:\"\\f155\"}.fa-dolly:before{content:\"\\f472\"}.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-donate:before{content:\"\\f4b9\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-door-open:before{content:\"\\f52b\"}.fa-dot-circle:before{content:\"\\f192\"}.fa-dove:before{content:\"\\f4ba\"}.fa-download:before{content:\"\\f019\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-drafting-compass:before{content:\"\\f568\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-dribbble-square:before{content:\"\\f397\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-drum:before{content:\"\\f569\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-dyalog:before{content:\"\\f399\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-edge:before{content:\"\\f282\"}.fa-edit:before{content:\"\\f044\"}.fa-egg:before{content:\"\\f7fb\"}.fa-eject:before{content:\"\\f052\"}.fa-elementor:before{content:\"\\f430\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-ello:before{content:\"\\f5f1\"}.fa-ember:before{content:\"\\f423\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-envira:before{content:\"\\f299\"}.fa-equals:before{content:\"\\f52c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-erlang:before{content:\"\\f39d\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-ethernet:before{content:\"\\f796\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-euro-sign:before{content:\"\\f153\"}.fa-evernote:before{content:\"\\f839\"}.fa-exchange-alt:before{content:\"\\f362\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-expand:before{content:\"\\f065\"}.fa-expand-arrows-alt:before{content:\"\\f31e\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-external-link-alt:before{content:\"\\f35d\"}.fa-external-link-square-alt:before{content:\"\\f360\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-dropper:before{content:\"\\f1fb\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-facebook:before{content:\"\\f09a\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-fan:before{content:\"\\f863\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-fax:before{content:\"\\f1ac\"}.fa-feather:before{content:\"\\f52d\"}.fa-feather-alt:before{content:\"\\f56b\"}.fa-fedex:before{content:\"\\f797\"}.fa-fedora:before{content:\"\\f798\"}.fa-female:before{content:\"\\f182\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-figma:before{content:\"\\f799\"}.fa-file:before{content:\"\\f15b\"}.fa-file-alt:before{content:\"\\f15c\"}.fa-file-archive:before{content:\"\\f1c6\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-file-download:before{content:\"\\f56d\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-export:before{content:\"\\f56e\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-file-import:before{content:\"\\f56f\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-file-medical:before{content:\"\\f477\"}.fa-file-medical-alt:before{content:\"\\f478\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-file-signature:before{content:\"\\f573\"}.fa-file-upload:before{content:\"\\f574\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-fill:before{content:\"\\f575\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-film:before{content:\"\\f008\"}.fa-filter:before{content:\"\\f0b0\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-fire:before{content:\"\\f06d\"}.fa-fire-alt:before{content:\"\\f7e4\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-firefox:before{content:\"\\f269\"}.fa-first-aid:before{content:\"\\f479\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-fish:before{content:\"\\f578\"}.fa-fist-raised:before{content:\"\\f6de\"}.fa-flag:before{content:\"\\f024\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-flask:before{content:\"\\f0c3\"}.fa-flickr:before{content:\"\\f16e\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-flushed:before{content:\"\\f579\"}.fa-fly:before{content:\"\\f417\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-font:before{content:\"\\f031\"}.fa-font-awesome:before{content:\"\\f2b4\"}.fa-font-awesome-alt:before{content:\"\\f35c\"}.fa-font-awesome-flag:before{content:\"\\f425\"}.fa-font-awesome-logo-full:before{content:\"\\f4e6\"}.fa-fonticons:before{content:\"\\f280\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-football-ball:before{content:\"\\f44e\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-forumbee:before{content:\"\\f211\"}.fa-forward:before{content:\"\\f04e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-frog:before{content:\"\\f52e\"}.fa-frown:before{content:\"\\f119\"}.fa-frown-open:before{content:\"\\f57a\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-funnel-dollar:before{content:\"\\f662\"}.fa-futbol:before{content:\"\\f1e3\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-gavel:before{content:\"\\f0e3\"}.fa-gem:before{content:\"\\f3a5\"}.fa-genderless:before{content:\"\\f22d\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-gift:before{content:\"\\f06b\"}.fa-gifts:before{content:\"\\f79c\"}.fa-git:before{content:\"\\f1d3\"}.fa-git-alt:before{content:\"\\f841\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-github:before{content:\"\\f09b\"}.fa-github-alt:before{content:\"\\f113\"}.fa-github-square:before{content:\"\\f092\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-gitlab:before{content:\"\\f296\"}.fa-gitter:before{content:\"\\f426\"}.fa-glass-cheers:before{content:\"\\f79f\"}.fa-glass-martini:before{content:\"\\f000\"}.fa-glass-martini-alt:before{content:\"\\f57b\"}.fa-glass-whiskey:before{content:\"\\f7a0\"}.fa-glasses:before{content:\"\\f530\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-globe:before{content:\"\\f0ac\"}.fa-globe-africa:before{content:\"\\f57c\"}.fa-globe-americas:before{content:\"\\f57d\"}.fa-globe-asia:before{content:\"\\f57e\"}.fa-globe-europe:before{content:\"\\f7a2\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-golf-ball:before{content:\"\\f450\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-google:before{content:\"\\f1a0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-gopuram:before{content:\"\\f664\"}.fa-graduation-cap:before{content:\"\\f19d\"}.fa-gratipay:before{content:\"\\f184\"}.fa-grav:before{content:\"\\f2d6\"}.fa-greater-than:before{content:\"\\f531\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-grimace:before{content:\"\\f57f\"}.fa-grin:before{content:\"\\f580\"}.fa-grin-alt:before{content:\"\\f581\"}.fa-grin-beam:before{content:\"\\f582\"}.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-grin-hearts:before{content:\"\\f584\"}.fa-grin-squint:before{content:\"\\f585\"}.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-grin-stars:before{content:\"\\f587\"}.fa-grin-tears:before{content:\"\\f588\"}.fa-grin-tongue:before{content:\"\\f589\"}.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-grin-wink:before{content:\"\\f58c\"}.fa-grip-horizontal:before{content:\"\\f58d\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-hacker-news-square:before{content:\"\\f3af\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-hamburger:before{content:\"\\f805\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hamsa:before{content:\"\\f665\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-hand-paper:before{content:\"\\f256\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-hand-rock:before{content:\"\\f255\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-hands:before{content:\"\\f4c2\"}.fa-hands-helping:before{content:\"\\f4c4\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-hard-hat:before{content:\"\\f807\"}.fa-hashtag:before{content:\"\\f292\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-haykal:before{content:\"\\f666\"}.fa-hdd:before{content:\"\\f0a0\"}.fa-heading:before{content:\"\\f1dc\"}.fa-headphones:before{content:\"\\f025\"}.fa-headphones-alt:before{content:\"\\f58f\"}.fa-headset:before{content:\"\\f590\"}.fa-heart:before{content:\"\\f004\"}.fa-heart-broken:before{content:\"\\f7a9\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-helicopter:before{content:\"\\f533\"}.fa-highlighter:before{content:\"\\f591\"}.fa-hiking:before{content:\"\\f6ec\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-hips:before{content:\"\\f452\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-history:before{content:\"\\f1da\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-home:before{content:\"\\f015\"}.fa-hooli:before{content:\"\\f427\"}.fa-hornbill:before{content:\"\\f592\"}.fa-horse:before{content:\"\\f6f0\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-hospital:before{content:\"\\f0f8\"}.fa-hospital-alt:before{content:\"\\f47d\"}.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-hot-tub:before{content:\"\\f593\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-hotel:before{content:\"\\f594\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-start:before{content:\"\\f251\"}.fa-house-damage:before{content:\"\\f6f1\"}.fa-houzz:before{content:\"\\f27c\"}.fa-hryvnia:before{content:\"\\f6f2\"}.fa-html5:before{content:\"\\f13b\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-icons:before{content:\"\\f86d\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-id-card:before{content:\"\\f2c2\"}.fa-id-card-alt:before{content:\"\\f47f\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-image:before{content:\"\\f03e\"}.fa-images:before{content:\"\\f302\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-inbox:before{content:\"\\f01c\"}.fa-indent:before{content:\"\\f03c\"}.fa-industry:before{content:\"\\f275\"}.fa-infinity:before{content:\"\\f534\"}.fa-info:before{content:\"\\f129\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-instagram:before{content:\"\\f16d\"}.fa-intercom:before{content:\"\\f7af\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-invision:before{content:\"\\f7b0\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-italic:before{content:\"\\f033\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-java:before{content:\"\\f4e4\"}.fa-jedi:before{content:\"\\f669\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-jira:before{content:\"\\f7b1\"}.fa-joget:before{content:\"\\f3b7\"}.fa-joint:before{content:\"\\f595\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-journal-whills:before{content:\"\\f66a\"}.fa-js:before{content:\"\\f3b8\"}.fa-js-square:before{content:\"\\f3b9\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-key:before{content:\"\\f084\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-khanda:before{content:\"\\f66d\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-kiss:before{content:\"\\f596\"}.fa-kiss-beam:before{content:\"\\f597\"}.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-korvue:before{content:\"\\f42f\"}.fa-landmark:before{content:\"\\f66f\"}.fa-language:before{content:\"\\f1ab\"}.fa-laptop:before{content:\"\\f109\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-laugh:before{content:\"\\f599\"}.fa-laugh-beam:before{content:\"\\f59a\"}.fa-laugh-squint:before{content:\"\\f59b\"}.fa-laugh-wink:before{content:\"\\f59c\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-leaf:before{content:\"\\f06c\"}.fa-leanpub:before{content:\"\\f212\"}.fa-lemon:before{content:\"\\f094\"}.fa-less:before{content:\"\\f41d\"}.fa-less-than:before{content:\"\\f536\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-level-down-alt:before{content:\"\\f3be\"}.fa-level-up-alt:before{content:\"\\f3bf\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-line:before{content:\"\\f3c0\"}.fa-link:before{content:\"\\f0c1\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-linode:before{content:\"\\f2b8\"}.fa-linux:before{content:\"\\f17c\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-list:before{content:\"\\f03a\"}.fa-list-alt:before{content:\"\\f022\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-lock:before{content:\"\\f023\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-long-arrow-alt-right:before{content:\"\\f30b\"}.fa-long-arrow-alt-up:before{content:\"\\f30c\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-luggage-cart:before{content:\"\\f59d\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-magic:before{content:\"\\f0d0\"}.fa-magnet:before{content:\"\\f076\"}.fa-mail-bulk:before{content:\"\\f674\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-male:before{content:\"\\f183\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-map:before{content:\"\\f279\"}.fa-map-marked:before{content:\"\\f59f\"}.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-map-marker:before{content:\"\\f041\"}.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-markdown:before{content:\"\\f60f\"}.fa-marker:before{content:\"\\f5a1\"}.fa-mars:before{content:\"\\f222\"}.fa-mars-double:before{content:\"\\f227\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mask:before{content:\"\\f6fa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-medal:before{content:\"\\f5a2\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-medium:before{content:\"\\f23a\"}.fa-medium-m:before{content:\"\\f3c7\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-meh:before{content:\"\\f11a\"}.fa-meh-blank:before{content:\"\\f5a4\"}.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-memory:before{content:\"\\f538\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-menorah:before{content:\"\\f676\"}.fa-mercury:before{content:\"\\f223\"}.fa-meteor:before{content:\"\\f753\"}.fa-microchip:before{content:\"\\f2db\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-alt:before{content:\"\\f3c9\"}.fa-microphone-alt-slash:before{content:\"\\f539\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-microscope:before{content:\"\\f610\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-minus:before{content:\"\\f068\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-minus-square:before{content:\"\\f146\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-mix:before{content:\"\\f3cb\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-mobile:before{content:\"\\f10b\"}.fa-mobile-alt:before{content:\"\\f3cd\"}.fa-modx:before{content:\"\\f285\"}.fa-monero:before{content:\"\\f3d0\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-money-check:before{content:\"\\f53c\"}.fa-money-check-alt:before{content:\"\\f53d\"}.fa-monument:before{content:\"\\f5a6\"}.fa-moon:before{content:\"\\f186\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-mosque:before{content:\"\\f678\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-mouse:before{content:\"\\f8cc\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-music:before{content:\"\\f001\"}.fa-napster:before{content:\"\\f3d2\"}.fa-neos:before{content:\"\\f612\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-neuter:before{content:\"\\f22c\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-node:before{content:\"\\f419\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-npm:before{content:\"\\f3d4\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-oil-can:before{content:\"\\f613\"}.fa-old-republic:before{content:\"\\f510\"}.fa-om:before{content:\"\\f679\"}.fa-opencart:before{content:\"\\f23d\"}.fa-openid:before{content:\"\\f19b\"}.fa-opera:before{content:\"\\f26a\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-osi:before{content:\"\\f41a\"}.fa-otter:before{content:\"\\f700\"}.fa-outdent:before{content:\"\\f03b\"}.fa-page4:before{content:\"\\f3d7\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-pager:before{content:\"\\f815\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-palette:before{content:\"\\f53f\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-pallet:before{content:\"\\f482\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-parking:before{content:\"\\f540\"}.fa-passport:before{content:\"\\f5ab\"}.fa-pastafarianism:before{content:\"\\f67b\"}.fa-paste:before{content:\"\\f0ea\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-pause:before{content:\"\\f04c\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-paw:before{content:\"\\f1b0\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-peace:before{content:\"\\f67c\"}.fa-pen:before{content:\"\\f304\"}.fa-pen-alt:before{content:\"\\f305\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-pen-square:before{content:\"\\f14b\"}.fa-pencil-alt:before{content:\"\\f303\"}.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-penny-arcade:before{content:\"\\f704\"}.fa-people-carry:before{content:\"\\f4ce\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-percent:before{content:\"\\f295\"}.fa-percentage:before{content:\"\\f541\"}.fa-periscope:before{content:\"\\f3da\"}.fa-person-booth:before{content:\"\\f756\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-phone:before{content:\"\\f095\"}.fa-phone-alt:before{content:\"\\f879\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-phone-square:before{content:\"\\f098\"}.fa-phone-square-alt:before{content:\"\\f87b\"}.fa-phone-volume:before{content:\"\\f2a0\"}.fa-photo-video:before{content:\"\\f87c\"}.fa-php:before{content:\"\\f457\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-pills:before{content:\"\\f484\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-plane:before{content:\"\\f072\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-play:before{content:\"\\f04b\"}.fa-play-circle:before{content:\"\\f144\"}.fa-playstation:before{content:\"\\f3df\"}.fa-plug:before{content:\"\\f1e6\"}.fa-plus:before{content:\"\\f067\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-poll:before{content:\"\\f681\"}.fa-poll-h:before{content:\"\\f682\"}.fa-poo:before{content:\"\\f2fe\"}.fa-poo-storm:before{content:\"\\f75a\"}.fa-poop:before{content:\"\\f619\"}.fa-portrait:before{content:\"\\f3e0\"}.fa-pound-sign:before{content:\"\\f154\"}.fa-power-off:before{content:\"\\f011\"}.fa-pray:before{content:\"\\f683\"}.fa-praying-hands:before{content:\"\\f684\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-prescription-bottle-alt:before{content:\"\\f486\"}.fa-print:before{content:\"\\f02f\"}.fa-procedures:before{content:\"\\f487\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-project-diagram:before{content:\"\\f542\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-python:before{content:\"\\f3e2\"}.fa-qq:before{content:\"\\f1d6\"}.fa-qrcode:before{content:\"\\f029\"}.fa-question:before{content:\"\\f128\"}.fa-question-circle:before{content:\"\\f059\"}.fa-quidditch:before{content:\"\\f458\"}.fa-quinscape:before{content:\"\\f459\"}.fa-quora:before{content:\"\\f2c4\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-quran:before{content:\"\\f687\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-random:before{content:\"\\f074\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-react:before{content:\"\\f41b\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-readme:before{content:\"\\f4d5\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-receipt:before{content:\"\\f543\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-redo:before{content:\"\\f01e\"}.fa-redo-alt:before{content:\"\\f2f9\"}.fa-registered:before{content:\"\\f25d\"}.fa-remove-format:before{content:\"\\f87d\"}.fa-renren:before{content:\"\\f18b\"}.fa-reply:before{content:\"\\f3e5\"}.fa-reply-all:before{content:\"\\f122\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-republican:before{content:\"\\f75e\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-retweet:before{content:\"\\f079\"}.fa-rev:before{content:\"\\f5b2\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-ring:before{content:\"\\f70b\"}.fa-road:before{content:\"\\f018\"}.fa-robot:before{content:\"\\f544\"}.fa-rocket:before{content:\"\\f135\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-route:before{content:\"\\f4d7\"}.fa-rss:before{content:\"\\f09e\"}.fa-rss-square:before{content:\"\\f143\"}.fa-ruble-sign:before{content:\"\\f158\"}.fa-ruler:before{content:\"\\f545\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-running:before{content:\"\\f70c\"}.fa-rupee-sign:before{content:\"\\f156\"}.fa-sad-cry:before{content:\"\\f5b3\"}.fa-sad-tear:before{content:\"\\f5b4\"}.fa-safari:before{content:\"\\f267\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-sass:before{content:\"\\f41e\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-save:before{content:\"\\f0c7\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-school:before{content:\"\\f549\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-scribd:before{content:\"\\f28a\"}.fa-scroll:before{content:\"\\f70e\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-search:before{content:\"\\f002\"}.fa-search-dollar:before{content:\"\\f688\"}.fa-search-location:before{content:\"\\f689\"}.fa-search-minus:before{content:\"\\f010\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-seedling:before{content:\"\\f4d8\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-sellsy:before{content:\"\\f213\"}.fa-server:before{content:\"\\f233\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-shapes:before{content:\"\\f61f\"}.fa-share:before{content:\"\\f064\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-share-square:before{content:\"\\f14d\"}.fa-shekel-sign:before{content:\"\\f20b\"}.fa-shield-alt:before{content:\"\\f3ed\"}.fa-ship:before{content:\"\\f21a\"}.fa-shipping-fast:before{content:\"\\f48b\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-shower:before{content:\"\\f2cc\"}.fa-shuttle-van:before{content:\"\\f5b6\"}.fa-sign:before{content:\"\\f4d9\"}.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-sign-language:before{content:\"\\f2a7\"}.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-signal:before{content:\"\\f012\"}.fa-signature:before{content:\"\\f5b7\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-sith:before{content:\"\\f512\"}.fa-skating:before{content:\"\\f7c5\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-skiing:before{content:\"\\f7c9\"}.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-skull:before{content:\"\\f54c\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-skype:before{content:\"\\f17e\"}.fa-slack:before{content:\"\\f198\"}.fa-slack-hash:before{content:\"\\f3ef\"}.fa-slash:before{content:\"\\f715\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-sliders-h:before{content:\"\\f1de\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-smile:before{content:\"\\f118\"}.fa-smile-beam:before{content:\"\\f5b8\"}.fa-smile-wink:before{content:\"\\f4da\"}.fa-smog:before{content:\"\\f75f\"}.fa-smoking:before{content:\"\\f48d\"}.fa-smoking-ban:before{content:\"\\f54d\"}.fa-sms:before{content:\"\\f7cd\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-snowboarding:before{content:\"\\f7ce\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-socks:before{content:\"\\f696\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-sort:before{content:\"\\f0dc\"}.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-sort-amount-down:before{content:\"\\f160\"}.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-sort-amount-up:before{content:\"\\f161\"}.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-sort-down:before{content:\"\\f0dd\"}.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-sort-up:before{content:\"\\f0de\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-spa:before{content:\"\\f5bb\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-spell-check:before{content:\"\\f891\"}.fa-spider:before{content:\"\\f717\"}.fa-spinner:before{content:\"\\f110\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-square:before{content:\"\\f0c8\"}.fa-square-full:before{content:\"\\f45c\"}.fa-square-root-alt:before{content:\"\\f698\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-stackpath:before{content:\"\\f842\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-star:before{content:\"\\f005\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-star-half:before{content:\"\\f089\"}.fa-star-half-alt:before{content:\"\\f5c0\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-steam-symbol:before{content:\"\\f3f6\"}.fa-step-backward:before{content:\"\\f048\"}.fa-step-forward:before{content:\"\\f051\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-stop:before{content:\"\\f04d\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-store:before{content:\"\\f54e\"}.fa-store-alt:before{content:\"\\f54f\"}.fa-strava:before{content:\"\\f428\"}.fa-stream:before{content:\"\\f550\"}.fa-street-view:before{content:\"\\f21d\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-stripe:before{content:\"\\f429\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-subscript:before{content:\"\\f12c\"}.fa-subway:before{content:\"\\f239\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-sun:before{content:\"\\f185\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-superscript:before{content:\"\\f12b\"}.fa-supple:before{content:\"\\f3f9\"}.fa-surprise:before{content:\"\\f5c2\"}.fa-suse:before{content:\"\\f7d6\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-swift:before{content:\"\\f8e1\"}.fa-swimmer:before{content:\"\\f5c4\"}.fa-swimming-pool:before{content:\"\\f5c5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-sync:before{content:\"\\f021\"}.fa-sync-alt:before{content:\"\\f2f1\"}.fa-syringe:before{content:\"\\f48e\"}.fa-table:before{content:\"\\f0ce\"}.fa-table-tennis:before{content:\"\\f45d\"}.fa-tablet:before{content:\"\\f10a\"}.fa-tablet-alt:before{content:\"\\f3fa\"}.fa-tablets:before{content:\"\\f490\"}.fa-tachometer-alt:before{content:\"\\f3fd\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-tape:before{content:\"\\f4db\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-taxi:before{content:\"\\f1ba\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-teeth:before{content:\"\\f62e\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-telegram-plane:before{content:\"\\f3fe\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-tenge:before{content:\"\\f7d7\"}.fa-terminal:before{content:\"\\f120\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-th:before{content:\"\\f00a\"}.fa-th-large:before{content:\"\\f009\"}.fa-th-list:before{content:\"\\f00b\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-theater-masks:before{content:\"\\f630\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-thermometer:before{content:\"\\f491\"}.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbtack:before{content:\"\\f08d\"}.fa-ticket-alt:before{content:\"\\f3ff\"}.fa-times:before{content:\"\\f00d\"}.fa-times-circle:before{content:\"\\f057\"}.fa-tint:before{content:\"\\f043\"}.fa-tint-slash:before{content:\"\\f5c7\"}.fa-tired:before{content:\"\\f5c8\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-toolbox:before{content:\"\\f552\"}.fa-tools:before{content:\"\\f7d9\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-torah:before{content:\"\\f6a0\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-tractor:before{content:\"\\f722\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-trademark:before{content:\"\\f25c\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-train:before{content:\"\\f238\"}.fa-tram:before{content:\"\\f7da\"}.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-trash:before{content:\"\\f1f8\"}.fa-trash-alt:before{content:\"\\f2ed\"}.fa-trash-restore:before{content:\"\\f829\"}.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-tree:before{content:\"\\f1bb\"}.fa-trello:before{content:\"\\f181\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-trophy:before{content:\"\\f091\"}.fa-truck:before{content:\"\\f0d1\"}.fa-truck-loading:before{content:\"\\f4de\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-tshirt:before{content:\"\\f553\"}.fa-tty:before{content:\"\\f1e4\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-tv:before{content:\"\\f26c\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-twitter:before{content:\"\\f099\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-typo3:before{content:\"\\f42b\"}.fa-uber:before{content:\"\\f402\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-uikit:before{content:\"\\f403\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-underline:before{content:\"\\f0cd\"}.fa-undo:before{content:\"\\f0e2\"}.fa-undo-alt:before{content:\"\\f2ea\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-university:before{content:\"\\f19c\"}.fa-unlink:before{content:\"\\f127\"}.fa-unlock:before{content:\"\\f09c\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-untappd:before{content:\"\\f405\"}.fa-upload:before{content:\"\\f093\"}.fa-ups:before{content:\"\\f7e0\"}.fa-usb:before{content:\"\\f287\"}.fa-user:before{content:\"\\f007\"}.fa-user-alt:before{content:\"\\f406\"}.fa-user-alt-slash:before{content:\"\\f4fa\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-user-cog:before{content:\"\\f4fe\"}.fa-user-edit:before{content:\"\\f4ff\"}.fa-user-friends:before{content:\"\\f500\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-user-injured:before{content:\"\\f728\"}.fa-user-lock:before{content:\"\\f502\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-user-minus:before{content:\"\\f503\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-user-shield:before{content:\"\\f505\"}.fa-user-slash:before{content:\"\\f506\"}.fa-user-tag:before{content:\"\\f507\"}.fa-user-tie:before{content:\"\\f508\"}.fa-user-times:before{content:\"\\f235\"}.fa-users:before{content:\"\\f0c0\"}.fa-users-cog:before{content:\"\\f509\"}.fa-usps:before{content:\"\\f7e1\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-utensils:before{content:\"\\f2e7\"}.fa-vaadin:before{content:\"\\f408\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-venus:before{content:\"\\f221\"}.fa-venus-double:before{content:\"\\f226\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-viacoin:before{content:\"\\f237\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-vial:before{content:\"\\f492\"}.fa-vials:before{content:\"\\f493\"}.fa-viber:before{content:\"\\f409\"}.fa-video:before{content:\"\\f03d\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-vk:before{content:\"\\f189\"}.fa-vnv:before{content:\"\\f40b\"}.fa-voicemail:before{content:\"\\f897\"}.fa-volleyball-ball:before{content:\"\\f45f\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-mute:before{content:\"\\f6a9\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-up:before{content:\"\\f028\"}.fa-vote-yea:before{content:\"\\f772\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-walking:before{content:\"\\f554\"}.fa-wallet:before{content:\"\\f555\"}.fa-warehouse:before{content:\"\\f494\"}.fa-water:before{content:\"\\f773\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-waze:before{content:\"\\f83f\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-weibo:before{content:\"\\f18a\"}.fa-weight:before{content:\"\\f496\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-wind:before{content:\"\\f72e\"}.fa-window-close:before{content:\"\\f410\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-wine-glass-alt:before{content:\"\\f5ce\"}.fa-wix:before{content:\"\\f5cf\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-won-sign:before{content:\"\\f159\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-wpforms:before{content:\"\\f298\"}.fa-wpressr:before{content:\"\\f3e4\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-x-ray:before{content:\"\\f497\"}.fa-xbox:before{content:\"\\f412\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-yammer:before{content:\"\\f840\"}.fa-yandex:before{content:\"\\f413\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-yen-sign:before{content:\"\\f157\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-youtube:before{content:\"\\f167\"}.fa-youtube-square:before{content:\"\\f431\"}.fa-zhihu:before{content:\"\\f63f\"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:\"Font Awesome 5 Brands\";font-style:normal;font-weight:normal;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg#fontawesome) format(\"svg\")}.fab{font-family:\"Font Awesome 5 Brands\"}@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:400;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg#fontawesome) format(\"svg\")}.far{font-weight:400}@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:900;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg#fontawesome) format(\"svg\")}.fa,.far,.fas{font-family:\"Font Awesome 5 Free\"}.fa,.fas{font-weight:900}\r\n+\u002F*!\n+ * Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\n+ * License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n+ *\u002F\n+.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:\"\\f26e\"}.fa-accessible-icon:before{content:\"\\f368\"}.fa-accusoft:before{content:\"\\f369\"}.fa-acquisitions-incorporated:before{content:\"\\f6af\"}.fa-ad:before{content:\"\\f641\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-card:before{content:\"\\f2bb\"}.fa-adjust:before{content:\"\\f042\"}.fa-adn:before{content:\"\\f170\"}.fa-adobe:before{content:\"\\f778\"}.fa-adversal:before{content:\"\\f36a\"}.fa-affiliatetheme:before{content:\"\\f36b\"}.fa-air-freshener:before{content:\"\\f5d0\"}.fa-airbnb:before{content:\"\\f834\"}.fa-algolia:before{content:\"\\f36c\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-justify:before{content:\"\\f039\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-right:before{content:\"\\f038\"}.fa-alipay:before{content:\"\\f642\"}.fa-allergies:before{content:\"\\f461\"}.fa-amazon:before{content:\"\\f270\"}.fa-amazon-pay:before{content:\"\\f42c\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-american-sign-language-interpreting:before{content:\"\\f2a3\"}.fa-amilia:before{content:\"\\f36d\"}.fa-anchor:before{content:\"\\f13d\"}.fa-android:before{content:\"\\f17b\"}.fa-angellist:before{content:\"\\f209\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-down:before{content:\"\\f107\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angry:before{content:\"\\f556\"}.fa-angrycreative:before{content:\"\\f36e\"}.fa-angular:before{content:\"\\f420\"}.fa-ankh:before{content:\"\\f644\"}.fa-app-store:before{content:\"\\f36f\"}.fa-app-store-ios:before{content:\"\\f370\"}.fa-apper:before{content:\"\\f371\"}.fa-apple:before{content:\"\\f179\"}.fa-apple-alt:before{content:\"\\f5d1\"}.fa-apple-pay:before{content:\"\\f415\"}.fa-archive:before{content:\"\\f187\"}.fa-archway:before{content:\"\\f557\"}.fa-arrow-alt-circle-down:before{content:\"\\f358\"}.fa-arrow-alt-circle-left:before{content:\"\\f359\"}.fa-arrow-alt-circle-right:before{content:\"\\f35a\"}.fa-arrow-alt-circle-up:before{content:\"\\f35b\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-arrows-alt-h:before{content:\"\\f337\"}.fa-arrows-alt-v:before{content:\"\\f338\"}.fa-artstation:before{content:\"\\f77a\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-asterisk:before{content:\"\\f069\"}.fa-asymmetrik:before{content:\"\\f372\"}.fa-at:before{content:\"\\f1fa\"}.fa-atlas:before{content:\"\\f558\"}.fa-atlassian:before{content:\"\\f77b\"}.fa-atom:before{content:\"\\f5d2\"}.fa-audible:before{content:\"\\f373\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-autoprefixer:before{content:\"\\f41c\"}.fa-avianex:before{content:\"\\f374\"}.fa-aviato:before{content:\"\\f421\"}.fa-award:before{content:\"\\f559\"}.fa-aws:before{content:\"\\f375\"}.fa-baby:before{content:\"\\f77c\"}.fa-baby-carriage:before{content:\"\\f77d\"}.fa-backspace:before{content:\"\\f55a\"}.fa-backward:before{content:\"\\f04a\"}.fa-bacon:before{content:\"\\f7e5\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-balance-scale-left:before{content:\"\\f515\"}.fa-balance-scale-right:before{content:\"\\f516\"}.fa-ban:before{content:\"\\f05e\"}.fa-band-aid:before{content:\"\\f462\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-barcode:before{content:\"\\f02a\"}.fa-bars:before{content:\"\\f0c9\"}.fa-baseball-ball:before{content:\"\\f433\"}.fa-basketball-ball:before{content:\"\\f434\"}.fa-bath:before{content:\"\\f2cd\"}.fa-battery-empty:before{content:\"\\f244\"}.fa-battery-full:before{content:\"\\f240\"}.fa-battery-half:before{content:\"\\f242\"}.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battle-net:before{content:\"\\f835\"}.fa-bed:before{content:\"\\f236\"}.fa-beer:before{content:\"\\f0fc\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-bell:before{content:\"\\f0f3\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bezier-curve:before{content:\"\\f55b\"}.fa-bible:before{content:\"\\f647\"}.fa-bicycle:before{content:\"\\f206\"}.fa-biking:before{content:\"\\f84a\"}.fa-bimobject:before{content:\"\\f378\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-biohazard:before{content:\"\\f780\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitcoin:before{content:\"\\f379\"}.fa-bity:before{content:\"\\f37a\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-blackberry:before{content:\"\\f37b\"}.fa-blender:before{content:\"\\f517\"}.fa-blender-phone:before{content:\"\\f6b6\"}.fa-blind:before{content:\"\\f29d\"}.fa-blog:before{content:\"\\f781\"}.fa-blogger:before{content:\"\\f37c\"}.fa-blogger-b:before{content:\"\\f37d\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-bold:before{content:\"\\f032\"}.fa-bolt:before{content:\"\\f0e7\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-bone:before{content:\"\\f5d7\"}.fa-bong:before{content:\"\\f55c\"}.fa-book:before{content:\"\\f02d\"}.fa-book-dead:before{content:\"\\f6b7\"}.fa-book-medical:before{content:\"\\f7e6\"}.fa-book-open:before{content:\"\\f518\"}.fa-book-reader:before{content:\"\\f5da\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-bootstrap:before{content:\"\\f836\"}.fa-border-all:before{content:\"\\f84c\"}.fa-border-none:before{content:\"\\f850\"}.fa-border-style:before{content:\"\\f853\"}.fa-bowling-ball:before{content:\"\\f436\"}.fa-box:before{content:\"\\f466\"}.fa-box-open:before{content:\"\\f49e\"}.fa-boxes:before{content:\"\\f468\"}.fa-braille:before{content:\"\\f2a1\"}.fa-brain:before{content:\"\\f5dc\"}.fa-bread-slice:before{content:\"\\f7ec\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-briefcase-medical:before{content:\"\\f469\"}.fa-broadcast-tower:before{content:\"\\f519\"}.fa-broom:before{content:\"\\f51a\"}.fa-brush:before{content:\"\\f55d\"}.fa-btc:before{content:\"\\f15a\"}.fa-buffer:before{content:\"\\f837\"}.fa-bug:before{content:\"\\f188\"}.fa-building:before{content:\"\\f1ad\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bullseye:before{content:\"\\f140\"}.fa-burn:before{content:\"\\f46a\"}.fa-buromobelexperte:before{content:\"\\f37f\"}.fa-bus:before{content:\"\\f207\"}.fa-bus-alt:before{content:\"\\f55e\"}.fa-business-time:before{content:\"\\f64a\"}.fa-buy-n-large:before{content:\"\\f8a6\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-calendar:before{content:\"\\f133\"}.fa-calendar-alt:before{content:\"\\f073\"}.fa-calendar-check:before{content:\"\\f274\"}.fa-calendar-day:before{content:\"\\f783\"}.fa-calendar-minus:before{content:\"\\f272\"}.fa-calendar-plus:before{content:\"\\f271\"}.fa-calendar-times:before{content:\"\\f273\"}.fa-calendar-week:before{content:\"\\f784\"}.fa-camera:before{content:\"\\f030\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-campground:before{content:\"\\f6bb\"}.fa-canadian-maple-leaf:before{content:\"\\f785\"}.fa-candy-cane:before{content:\"\\f786\"}.fa-cannabis:before{content:\"\\f55f\"}.fa-capsules:before{content:\"\\f46b\"}.fa-car:before{content:\"\\f1b9\"}.fa-car-alt:before{content:\"\\f5de\"}.fa-car-battery:before{content:\"\\f5df\"}.fa-car-crash:before{content:\"\\f5e1\"}.fa-car-side:before{content:\"\\f5e4\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-caret-square-down:before{content:\"\\f150\"}.fa-caret-square-left:before{content:\"\\f191\"}.fa-caret-square-right:before{content:\"\\f152\"}.fa-caret-square-up:before{content:\"\\f151\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-carrot:before{content:\"\\f787\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cash-register:before{content:\"\\f788\"}.fa-cat:before{content:\"\\f6be\"}.fa-cc-amazon-pay:before{content:\"\\f42d\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-apple-pay:before{content:\"\\f416\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-centercode:before{content:\"\\f380\"}.fa-centos:before{content:\"\\f789\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-chair:before{content:\"\\f6c0\"}.fa-chalkboard:before{content:\"\\f51b\"}.fa-chalkboard-teacher:before{content:\"\\f51c\"}.fa-charging-station:before{content:\"\\f5e7\"}.fa-chart-area:before{content:\"\\f1fe\"}.fa-chart-bar:before{content:\"\\f080\"}.fa-chart-line:before{content:\"\\f201\"}.fa-chart-pie:before{content:\"\\f200\"}.fa-check:before{content:\"\\f00c\"}.fa-check-circle:before{content:\"\\f058\"}.fa-check-double:before{content:\"\\f560\"}.fa-check-square:before{content:\"\\f14a\"}.fa-cheese:before{content:\"\\f7ef\"}.fa-chess:before{content:\"\\f439\"}.fa-chess-bishop:before{content:\"\\f43a\"}.fa-chess-board:before{content:\"\\f43c\"}.fa-chess-king:before{content:\"\\f43f\"}.fa-chess-knight:before{content:\"\\f441\"}.fa-chess-pawn:before{content:\"\\f443\"}.fa-chess-queen:before{content:\"\\f445\"}.fa-chess-rook:before{content:\"\\f447\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-child:before{content:\"\\f1ae\"}.fa-chrome:before{content:\"\\f268\"}.fa-chromecast:before{content:\"\\f838\"}.fa-church:before{content:\"\\f51d\"}.fa-circle:before{content:\"\\f111\"}.fa-circle-notch:before{content:\"\\f1ce\"}.fa-city:before{content:\"\\f64f\"}.fa-clinic-medical:before{content:\"\\f7f2\"}.fa-clipboard:before{content:\"\\f328\"}.fa-clipboard-check:before{content:\"\\f46c\"}.fa-clipboard-list:before{content:\"\\f46d\"}.fa-clock:before{content:\"\\f017\"}.fa-clone:before{content:\"\\f24d\"}.fa-closed-captioning:before{content:\"\\f20a\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-cloud-download-alt:before{content:\"\\f381\"}.fa-cloud-meatball:before{content:\"\\f73b\"}.fa-cloud-moon:before{content:\"\\f6c3\"}.fa-cloud-moon-rain:before{content:\"\\f73c\"}.fa-cloud-rain:before{content:\"\\f73d\"}.fa-cloud-showers-heavy:before{content:\"\\f740\"}.fa-cloud-sun:before{content:\"\\f6c4\"}.fa-cloud-sun-rain:before{content:\"\\f743\"}.fa-cloud-upload-alt:before{content:\"\\f382\"}.fa-cloudscale:before{content:\"\\f383\"}.fa-cloudsmith:before{content:\"\\f384\"}.fa-cloudversify:before{content:\"\\f385\"}.fa-cocktail:before{content:\"\\f561\"}.fa-code:before{content:\"\\f121\"}.fa-code-branch:before{content:\"\\f126\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-codiepie:before{content:\"\\f284\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cog:before{content:\"\\f013\"}.fa-cogs:before{content:\"\\f085\"}.fa-coins:before{content:\"\\f51e\"}.fa-columns:before{content:\"\\f0db\"}.fa-comment:before{content:\"\\f075\"}.fa-comment-alt:before{content:\"\\f27a\"}.fa-comment-dollar:before{content:\"\\f651\"}.fa-comment-dots:before{content:\"\\f4ad\"}.fa-comment-medical:before{content:\"\\f7f5\"}.fa-comment-slash:before{content:\"\\f4b3\"}.fa-comments:before{content:\"\\f086\"}.fa-comments-dollar:before{content:\"\\f653\"}.fa-compact-disc:before{content:\"\\f51f\"}.fa-compass:before{content:\"\\f14e\"}.fa-compress:before{content:\"\\f066\"}.fa-compress-arrows-alt:before{content:\"\\f78c\"}.fa-concierge-bell:before{content:\"\\f562\"}.fa-confluence:before{content:\"\\f78d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-contao:before{content:\"\\f26d\"}.fa-cookie:before{content:\"\\f563\"}.fa-cookie-bite:before{content:\"\\f564\"}.fa-copy:before{content:\"\\f0c5\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-cotton-bureau:before{content:\"\\f89e\"}.fa-couch:before{content:\"\\f4b8\"}.fa-cpanel:before{content:\"\\f388\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-creative-commons-by:before{content:\"\\f4e7\"}.fa-creative-commons-nc:before{content:\"\\f4e8\"}.fa-creative-commons-nc-eu:before{content:\"\\f4e9\"}.fa-creative-commons-nc-jp:before{content:\"\\f4ea\"}.fa-creative-commons-nd:before{content:\"\\f4eb\"}.fa-creative-commons-pd:before{content:\"\\f4ec\"}.fa-creative-commons-pd-alt:before{content:\"\\f4ed\"}.fa-creative-commons-remix:before{content:\"\\f4ee\"}.fa-creative-commons-sa:before{content:\"\\f4ef\"}.fa-creative-commons-sampling:before{content:\"\\f4f0\"}.fa-creative-commons-sampling-plus:before{content:\"\\f4f1\"}.fa-creative-commons-share:before{content:\"\\f4f2\"}.fa-creative-commons-zero:before{content:\"\\f4f3\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-critical-role:before{content:\"\\f6c9\"}.fa-crop:before{content:\"\\f125\"}.fa-crop-alt:before{content:\"\\f565\"}.fa-cross:before{content:\"\\f654\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-crow:before{content:\"\\f520\"}.fa-crown:before{content:\"\\f521\"}.fa-crutch:before{content:\"\\f7f7\"}.fa-css3:before{content:\"\\f13c\"}.fa-css3-alt:before{content:\"\\f38b\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-cut:before{content:\"\\f0c4\"}.fa-cuttlefish:before{content:\"\\f38c\"}.fa-d-and-d:before{content:\"\\f38d\"}.fa-d-and-d-beyond:before{content:\"\\f6ca\"}.fa-dashcube:before{content:\"\\f210\"}.fa-database:before{content:\"\\f1c0\"}.fa-deaf:before{content:\"\\f2a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-democrat:before{content:\"\\f747\"}.fa-deploydog:before{content:\"\\f38e\"}.fa-deskpro:before{content:\"\\f38f\"}.fa-desktop:before{content:\"\\f108\"}.fa-dev:before{content:\"\\f6cc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-dharmachakra:before{content:\"\\f655\"}.fa-dhl:before{content:\"\\f790\"}.fa-diagnoses:before{content:\"\\f470\"}.fa-diaspora:before{content:\"\\f791\"}.fa-dice:before{content:\"\\f522\"}.fa-dice-d20:before{content:\"\\f6cf\"}.fa-dice-d6:before{content:\"\\f6d1\"}.fa-dice-five:before{content:\"\\f523\"}.fa-dice-four:before{content:\"\\f524\"}.fa-dice-one:before{content:\"\\f525\"}.fa-dice-six:before{content:\"\\f526\"}.fa-dice-three:before{content:\"\\f527\"}.fa-dice-two:before{content:\"\\f528\"}.fa-digg:before{content:\"\\f1a6\"}.fa-digital-ocean:before{content:\"\\f391\"}.fa-digital-tachograph:before{content:\"\\f566\"}.fa-directions:before{content:\"\\f5eb\"}.fa-discord:before{content:\"\\f392\"}.fa-discourse:before{content:\"\\f393\"}.fa-divide:before{content:\"\\f529\"}.fa-dizzy:before{content:\"\\f567\"}.fa-dna:before{content:\"\\f471\"}.fa-dochub:before{content:\"\\f394\"}.fa-docker:before{content:\"\\f395\"}.fa-dog:before{content:\"\\f6d3\"}.fa-dollar-sign:before{content:\"\\f155\"}.fa-dolly:before{content:\"\\f472\"}.fa-dolly-flatbed:before{content:\"\\f474\"}.fa-donate:before{content:\"\\f4b9\"}.fa-door-closed:before{content:\"\\f52a\"}.fa-door-open:before{content:\"\\f52b\"}.fa-dot-circle:before{content:\"\\f192\"}.fa-dove:before{content:\"\\f4ba\"}.fa-download:before{content:\"\\f019\"}.fa-draft2digital:before{content:\"\\f396\"}.fa-drafting-compass:before{content:\"\\f568\"}.fa-dragon:before{content:\"\\f6d5\"}.fa-draw-polygon:before{content:\"\\f5ee\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-dribbble-square:before{content:\"\\f397\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-drum:before{content:\"\\f569\"}.fa-drum-steelpan:before{content:\"\\f56a\"}.fa-drumstick-bite:before{content:\"\\f6d7\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-dumbbell:before{content:\"\\f44b\"}.fa-dumpster:before{content:\"\\f793\"}.fa-dumpster-fire:before{content:\"\\f794\"}.fa-dungeon:before{content:\"\\f6d9\"}.fa-dyalog:before{content:\"\\f399\"}.fa-earlybirds:before{content:\"\\f39a\"}.fa-ebay:before{content:\"\\f4f4\"}.fa-edge:before{content:\"\\f282\"}.fa-edit:before{content:\"\\f044\"}.fa-egg:before{content:\"\\f7fb\"}.fa-eject:before{content:\"\\f052\"}.fa-elementor:before{content:\"\\f430\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-ello:before{content:\"\\f5f1\"}.fa-ember:before{content:\"\\f423\"}.fa-empire:before{content:\"\\f1d1\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-text:before{content:\"\\f658\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-envira:before{content:\"\\f299\"}.fa-equals:before{content:\"\\f52c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-erlang:before{content:\"\\f39d\"}.fa-ethereum:before{content:\"\\f42e\"}.fa-ethernet:before{content:\"\\f796\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-euro-sign:before{content:\"\\f153\"}.fa-evernote:before{content:\"\\f839\"}.fa-exchange-alt:before{content:\"\\f362\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-expand:before{content:\"\\f065\"}.fa-expand-arrows-alt:before{content:\"\\f31e\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-external-link-alt:before{content:\"\\f35d\"}.fa-external-link-square-alt:before{content:\"\\f360\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-dropper:before{content:\"\\f1fb\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-facebook:before{content:\"\\f09a\"}.fa-facebook-f:before{content:\"\\f39e\"}.fa-facebook-messenger:before{content:\"\\f39f\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-fan:before{content:\"\\f863\"}.fa-fantasy-flight-games:before{content:\"\\f6dc\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-fax:before{content:\"\\f1ac\"}.fa-feather:before{content:\"\\f52d\"}.fa-feather-alt:before{content:\"\\f56b\"}.fa-fedex:before{content:\"\\f797\"}.fa-fedora:before{content:\"\\f798\"}.fa-female:before{content:\"\\f182\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-figma:before{content:\"\\f799\"}.fa-file:before{content:\"\\f15b\"}.fa-file-alt:before{content:\"\\f15c\"}.fa-file-archive:before{content:\"\\f1c6\"}.fa-file-audio:before{content:\"\\f1c7\"}.fa-file-code:before{content:\"\\f1c9\"}.fa-file-contract:before{content:\"\\f56c\"}.fa-file-csv:before{content:\"\\f6dd\"}.fa-file-download:before{content:\"\\f56d\"}.fa-file-excel:before{content:\"\\f1c3\"}.fa-file-export:before{content:\"\\f56e\"}.fa-file-image:before{content:\"\\f1c5\"}.fa-file-import:before{content:\"\\f56f\"}.fa-file-invoice:before{content:\"\\f570\"}.fa-file-invoice-dollar:before{content:\"\\f571\"}.fa-file-medical:before{content:\"\\f477\"}.fa-file-medical-alt:before{content:\"\\f478\"}.fa-file-pdf:before{content:\"\\f1c1\"}.fa-file-powerpoint:before{content:\"\\f1c4\"}.fa-file-prescription:before{content:\"\\f572\"}.fa-file-signature:before{content:\"\\f573\"}.fa-file-upload:before{content:\"\\f574\"}.fa-file-video:before{content:\"\\f1c8\"}.fa-file-word:before{content:\"\\f1c2\"}.fa-fill:before{content:\"\\f575\"}.fa-fill-drip:before{content:\"\\f576\"}.fa-film:before{content:\"\\f008\"}.fa-filter:before{content:\"\\f0b0\"}.fa-fingerprint:before{content:\"\\f577\"}.fa-fire:before{content:\"\\f06d\"}.fa-fire-alt:before{content:\"\\f7e4\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-firefox:before{content:\"\\f269\"}.fa-first-aid:before{content:\"\\f479\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-first-order-alt:before{content:\"\\f50a\"}.fa-firstdraft:before{content:\"\\f3a1\"}.fa-fish:before{content:\"\\f578\"}.fa-fist-raised:before{content:\"\\f6de\"}.fa-flag:before{content:\"\\f024\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-flag-usa:before{content:\"\\f74d\"}.fa-flask:before{content:\"\\f0c3\"}.fa-flickr:before{content:\"\\f16e\"}.fa-flipboard:before{content:\"\\f44d\"}.fa-flushed:before{content:\"\\f579\"}.fa-fly:before{content:\"\\f417\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-minus:before{content:\"\\f65d\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-folder-plus:before{content:\"\\f65e\"}.fa-font:before{content:\"\\f031\"}.fa-font-awesome:before{content:\"\\f2b4\"}.fa-font-awesome-alt:before{content:\"\\f35c\"}.fa-font-awesome-flag:before{content:\"\\f425\"}.fa-font-awesome-logo-full:before{content:\"\\f4e6\"}.fa-fonticons:before{content:\"\\f280\"}.fa-fonticons-fi:before{content:\"\\f3a2\"}.fa-football-ball:before{content:\"\\f44e\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-fort-awesome-alt:before{content:\"\\f3a3\"}.fa-forumbee:before{content:\"\\f211\"}.fa-forward:before{content:\"\\f04e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-freebsd:before{content:\"\\f3a4\"}.fa-frog:before{content:\"\\f52e\"}.fa-frown:before{content:\"\\f119\"}.fa-frown-open:before{content:\"\\f57a\"}.fa-fulcrum:before{content:\"\\f50b\"}.fa-funnel-dollar:before{content:\"\\f662\"}.fa-futbol:before{content:\"\\f1e3\"}.fa-galactic-republic:before{content:\"\\f50c\"}.fa-galactic-senate:before{content:\"\\f50d\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-gas-pump:before{content:\"\\f52f\"}.fa-gavel:before{content:\"\\f0e3\"}.fa-gem:before{content:\"\\f3a5\"}.fa-genderless:before{content:\"\\f22d\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-ghost:before{content:\"\\f6e2\"}.fa-gift:before{content:\"\\f06b\"}.fa-gifts:before{content:\"\\f79c\"}.fa-git:before{content:\"\\f1d3\"}.fa-git-alt:before{content:\"\\f841\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-github:before{content:\"\\f09b\"}.fa-github-alt:before{content:\"\\f113\"}.fa-github-square:before{content:\"\\f092\"}.fa-gitkraken:before{content:\"\\f3a6\"}.fa-gitlab:before{content:\"\\f296\"}.fa-gitter:before{content:\"\\f426\"}.fa-glass-cheers:before{content:\"\\f79f\"}.fa-glass-martini:before{content:\"\\f000\"}.fa-glass-martini-alt:before{content:\"\\f57b\"}.fa-glass-whiskey:before{content:\"\\f7a0\"}.fa-glasses:before{content:\"\\f530\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-globe:before{content:\"\\f0ac\"}.fa-globe-africa:before{content:\"\\f57c\"}.fa-globe-americas:before{content:\"\\f57d\"}.fa-globe-asia:before{content:\"\\f57e\"}.fa-globe-europe:before{content:\"\\f7a2\"}.fa-gofore:before{content:\"\\f3a7\"}.fa-golf-ball:before{content:\"\\f450\"}.fa-goodreads:before{content:\"\\f3a8\"}.fa-goodreads-g:before{content:\"\\f3a9\"}.fa-google:before{content:\"\\f1a0\"}.fa-google-drive:before{content:\"\\f3aa\"}.fa-google-play:before{content:\"\\f3ab\"}.fa-google-plus:before{content:\"\\f2b3\"}.fa-google-plus-g:before{content:\"\\f0d5\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-gopuram:before{content:\"\\f664\"}.fa-graduation-cap:before{content:\"\\f19d\"}.fa-gratipay:before{content:\"\\f184\"}.fa-grav:before{content:\"\\f2d6\"}.fa-greater-than:before{content:\"\\f531\"}.fa-greater-than-equal:before{content:\"\\f532\"}.fa-grimace:before{content:\"\\f57f\"}.fa-grin:before{content:\"\\f580\"}.fa-grin-alt:before{content:\"\\f581\"}.fa-grin-beam:before{content:\"\\f582\"}.fa-grin-beam-sweat:before{content:\"\\f583\"}.fa-grin-hearts:before{content:\"\\f584\"}.fa-grin-squint:before{content:\"\\f585\"}.fa-grin-squint-tears:before{content:\"\\f586\"}.fa-grin-stars:before{content:\"\\f587\"}.fa-grin-tears:before{content:\"\\f588\"}.fa-grin-tongue:before{content:\"\\f589\"}.fa-grin-tongue-squint:before{content:\"\\f58a\"}.fa-grin-tongue-wink:before{content:\"\\f58b\"}.fa-grin-wink:before{content:\"\\f58c\"}.fa-grip-horizontal:before{content:\"\\f58d\"}.fa-grip-lines:before{content:\"\\f7a4\"}.fa-grip-lines-vertical:before{content:\"\\f7a5\"}.fa-grip-vertical:before{content:\"\\f58e\"}.fa-gripfire:before{content:\"\\f3ac\"}.fa-grunt:before{content:\"\\f3ad\"}.fa-guitar:before{content:\"\\f7a6\"}.fa-gulp:before{content:\"\\f3ae\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-hacker-news:before{content:\"\\f1d4\"}.fa-hacker-news-square:before{content:\"\\f3af\"}.fa-hackerrank:before{content:\"\\f5f7\"}.fa-hamburger:before{content:\"\\f805\"}.fa-hammer:before{content:\"\\f6e3\"}.fa-hamsa:before{content:\"\\f665\"}.fa-hand-holding:before{content:\"\\f4bd\"}.fa-hand-holding-heart:before{content:\"\\f4be\"}.fa-hand-holding-usd:before{content:\"\\f4c0\"}.fa-hand-lizard:before{content:\"\\f258\"}.fa-hand-middle-finger:before{content:\"\\f806\"}.fa-hand-paper:before{content:\"\\f256\"}.fa-hand-peace:before{content:\"\\f25b\"}.fa-hand-point-down:before{content:\"\\f0a7\"}.fa-hand-point-left:before{content:\"\\f0a5\"}.fa-hand-point-right:before{content:\"\\f0a4\"}.fa-hand-point-up:before{content:\"\\f0a6\"}.fa-hand-pointer:before{content:\"\\f25a\"}.fa-hand-rock:before{content:\"\\f255\"}.fa-hand-scissors:before{content:\"\\f257\"}.fa-hand-spock:before{content:\"\\f259\"}.fa-hands:before{content:\"\\f4c2\"}.fa-hands-helping:before{content:\"\\f4c4\"}.fa-handshake:before{content:\"\\f2b5\"}.fa-hanukiah:before{content:\"\\f6e6\"}.fa-hard-hat:before{content:\"\\f807\"}.fa-hashtag:before{content:\"\\f292\"}.fa-hat-cowboy:before{content:\"\\f8c0\"}.fa-hat-cowboy-side:before{content:\"\\f8c1\"}.fa-hat-wizard:before{content:\"\\f6e8\"}.fa-haykal:before{content:\"\\f666\"}.fa-hdd:before{content:\"\\f0a0\"}.fa-heading:before{content:\"\\f1dc\"}.fa-headphones:before{content:\"\\f025\"}.fa-headphones-alt:before{content:\"\\f58f\"}.fa-headset:before{content:\"\\f590\"}.fa-heart:before{content:\"\\f004\"}.fa-heart-broken:before{content:\"\\f7a9\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-helicopter:before{content:\"\\f533\"}.fa-highlighter:before{content:\"\\f591\"}.fa-hiking:before{content:\"\\f6ec\"}.fa-hippo:before{content:\"\\f6ed\"}.fa-hips:before{content:\"\\f452\"}.fa-hire-a-helper:before{content:\"\\f3b0\"}.fa-history:before{content:\"\\f1da\"}.fa-hockey-puck:before{content:\"\\f453\"}.fa-holly-berry:before{content:\"\\f7aa\"}.fa-home:before{content:\"\\f015\"}.fa-hooli:before{content:\"\\f427\"}.fa-hornbill:before{content:\"\\f592\"}.fa-horse:before{content:\"\\f6f0\"}.fa-horse-head:before{content:\"\\f7ab\"}.fa-hospital:before{content:\"\\f0f8\"}.fa-hospital-alt:before{content:\"\\f47d\"}.fa-hospital-symbol:before{content:\"\\f47e\"}.fa-hot-tub:before{content:\"\\f593\"}.fa-hotdog:before{content:\"\\f80f\"}.fa-hotel:before{content:\"\\f594\"}.fa-hotjar:before{content:\"\\f3b1\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-start:before{content:\"\\f251\"}.fa-house-damage:before{content:\"\\f6f1\"}.fa-houzz:before{content:\"\\f27c\"}.fa-hryvnia:before{content:\"\\f6f2\"}.fa-html5:before{content:\"\\f13b\"}.fa-hubspot:before{content:\"\\f3b2\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-ice-cream:before{content:\"\\f810\"}.fa-icicles:before{content:\"\\f7ad\"}.fa-icons:before{content:\"\\f86d\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-id-card:before{content:\"\\f2c2\"}.fa-id-card-alt:before{content:\"\\f47f\"}.fa-igloo:before{content:\"\\f7ae\"}.fa-image:before{content:\"\\f03e\"}.fa-images:before{content:\"\\f302\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-inbox:before{content:\"\\f01c\"}.fa-indent:before{content:\"\\f03c\"}.fa-industry:before{content:\"\\f275\"}.fa-infinity:before{content:\"\\f534\"}.fa-info:before{content:\"\\f129\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-instagram:before{content:\"\\f16d\"}.fa-intercom:before{content:\"\\f7af\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-invision:before{content:\"\\f7b0\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-italic:before{content:\"\\f033\"}.fa-itch-io:before{content:\"\\f83a\"}.fa-itunes:before{content:\"\\f3b4\"}.fa-itunes-note:before{content:\"\\f3b5\"}.fa-java:before{content:\"\\f4e4\"}.fa-jedi:before{content:\"\\f669\"}.fa-jedi-order:before{content:\"\\f50e\"}.fa-jenkins:before{content:\"\\f3b6\"}.fa-jira:before{content:\"\\f7b1\"}.fa-joget:before{content:\"\\f3b7\"}.fa-joint:before{content:\"\\f595\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-journal-whills:before{content:\"\\f66a\"}.fa-js:before{content:\"\\f3b8\"}.fa-js-square:before{content:\"\\f3b9\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-kaaba:before{content:\"\\f66b\"}.fa-kaggle:before{content:\"\\f5fa\"}.fa-key:before{content:\"\\f084\"}.fa-keybase:before{content:\"\\f4f5\"}.fa-keyboard:before{content:\"\\f11c\"}.fa-keycdn:before{content:\"\\f3ba\"}.fa-khanda:before{content:\"\\f66d\"}.fa-kickstarter:before{content:\"\\f3bb\"}.fa-kickstarter-k:before{content:\"\\f3bc\"}.fa-kiss:before{content:\"\\f596\"}.fa-kiss-beam:before{content:\"\\f597\"}.fa-kiss-wink-heart:before{content:\"\\f598\"}.fa-kiwi-bird:before{content:\"\\f535\"}.fa-korvue:before{content:\"\\f42f\"}.fa-landmark:before{content:\"\\f66f\"}.fa-language:before{content:\"\\f1ab\"}.fa-laptop:before{content:\"\\f109\"}.fa-laptop-code:before{content:\"\\f5fc\"}.fa-laptop-medical:before{content:\"\\f812\"}.fa-laravel:before{content:\"\\f3bd\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-laugh:before{content:\"\\f599\"}.fa-laugh-beam:before{content:\"\\f59a\"}.fa-laugh-squint:before{content:\"\\f59b\"}.fa-laugh-wink:before{content:\"\\f59c\"}.fa-layer-group:before{content:\"\\f5fd\"}.fa-leaf:before{content:\"\\f06c\"}.fa-leanpub:before{content:\"\\f212\"}.fa-lemon:before{content:\"\\f094\"}.fa-less:before{content:\"\\f41d\"}.fa-less-than:before{content:\"\\f536\"}.fa-less-than-equal:before{content:\"\\f537\"}.fa-level-down-alt:before{content:\"\\f3be\"}.fa-level-up-alt:before{content:\"\\f3bf\"}.fa-life-ring:before{content:\"\\f1cd\"}.fa-lightbulb:before{content:\"\\f0eb\"}.fa-line:before{content:\"\\f3c0\"}.fa-link:before{content:\"\\f0c1\"}.fa-linkedin:before{content:\"\\f08c\"}.fa-linkedin-in:before{content:\"\\f0e1\"}.fa-linode:before{content:\"\\f2b8\"}.fa-linux:before{content:\"\\f17c\"}.fa-lira-sign:before{content:\"\\f195\"}.fa-list:before{content:\"\\f03a\"}.fa-list-alt:before{content:\"\\f022\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-lock:before{content:\"\\f023\"}.fa-lock-open:before{content:\"\\f3c1\"}.fa-long-arrow-alt-down:before{content:\"\\f309\"}.fa-long-arrow-alt-left:before{content:\"\\f30a\"}.fa-long-arrow-alt-right:before{content:\"\\f30b\"}.fa-long-arrow-alt-up:before{content:\"\\f30c\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-luggage-cart:before{content:\"\\f59d\"}.fa-lyft:before{content:\"\\f3c3\"}.fa-magento:before{content:\"\\f3c4\"}.fa-magic:before{content:\"\\f0d0\"}.fa-magnet:before{content:\"\\f076\"}.fa-mail-bulk:before{content:\"\\f674\"}.fa-mailchimp:before{content:\"\\f59e\"}.fa-male:before{content:\"\\f183\"}.fa-mandalorian:before{content:\"\\f50f\"}.fa-map:before{content:\"\\f279\"}.fa-map-marked:before{content:\"\\f59f\"}.fa-map-marked-alt:before{content:\"\\f5a0\"}.fa-map-marker:before{content:\"\\f041\"}.fa-map-marker-alt:before{content:\"\\f3c5\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-markdown:before{content:\"\\f60f\"}.fa-marker:before{content:\"\\f5a1\"}.fa-mars:before{content:\"\\f222\"}.fa-mars-double:before{content:\"\\f227\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mask:before{content:\"\\f6fa\"}.fa-mastodon:before{content:\"\\f4f6\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-mdb:before{content:\"\\f8ca\"}.fa-medal:before{content:\"\\f5a2\"}.fa-medapps:before{content:\"\\f3c6\"}.fa-medium:before{content:\"\\f23a\"}.fa-medium-m:before{content:\"\\f3c7\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-medrt:before{content:\"\\f3c8\"}.fa-meetup:before{content:\"\\f2e0\"}.fa-megaport:before{content:\"\\f5a3\"}.fa-meh:before{content:\"\\f11a\"}.fa-meh-blank:before{content:\"\\f5a4\"}.fa-meh-rolling-eyes:before{content:\"\\f5a5\"}.fa-memory:before{content:\"\\f538\"}.fa-mendeley:before{content:\"\\f7b3\"}.fa-menorah:before{content:\"\\f676\"}.fa-mercury:before{content:\"\\f223\"}.fa-meteor:before{content:\"\\f753\"}.fa-microchip:before{content:\"\\f2db\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-alt:before{content:\"\\f3c9\"}.fa-microphone-alt-slash:before{content:\"\\f539\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-microscope:before{content:\"\\f610\"}.fa-microsoft:before{content:\"\\f3ca\"}.fa-minus:before{content:\"\\f068\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-minus-square:before{content:\"\\f146\"}.fa-mitten:before{content:\"\\f7b5\"}.fa-mix:before{content:\"\\f3cb\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-mizuni:before{content:\"\\f3cc\"}.fa-mobile:before{content:\"\\f10b\"}.fa-mobile-alt:before{content:\"\\f3cd\"}.fa-modx:before{content:\"\\f285\"}.fa-monero:before{content:\"\\f3d0\"}.fa-money-bill:before{content:\"\\f0d6\"}.fa-money-bill-alt:before{content:\"\\f3d1\"}.fa-money-bill-wave:before{content:\"\\f53a\"}.fa-money-bill-wave-alt:before{content:\"\\f53b\"}.fa-money-check:before{content:\"\\f53c\"}.fa-money-check-alt:before{content:\"\\f53d\"}.fa-monument:before{content:\"\\f5a6\"}.fa-moon:before{content:\"\\f186\"}.fa-mortar-pestle:before{content:\"\\f5a7\"}.fa-mosque:before{content:\"\\f678\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-mountain:before{content:\"\\f6fc\"}.fa-mouse:before{content:\"\\f8cc\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-mug-hot:before{content:\"\\f7b6\"}.fa-music:before{content:\"\\f001\"}.fa-napster:before{content:\"\\f3d2\"}.fa-neos:before{content:\"\\f612\"}.fa-network-wired:before{content:\"\\f6ff\"}.fa-neuter:before{content:\"\\f22c\"}.fa-newspaper:before{content:\"\\f1ea\"}.fa-nimblr:before{content:\"\\f5a8\"}.fa-node:before{content:\"\\f419\"}.fa-node-js:before{content:\"\\f3d3\"}.fa-not-equal:before{content:\"\\f53e\"}.fa-notes-medical:before{content:\"\\f481\"}.fa-npm:before{content:\"\\f3d4\"}.fa-ns8:before{content:\"\\f3d5\"}.fa-nutritionix:before{content:\"\\f3d6\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-oil-can:before{content:\"\\f613\"}.fa-old-republic:before{content:\"\\f510\"}.fa-om:before{content:\"\\f679\"}.fa-opencart:before{content:\"\\f23d\"}.fa-openid:before{content:\"\\f19b\"}.fa-opera:before{content:\"\\f26a\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-orcid:before{content:\"\\f8d2\"}.fa-osi:before{content:\"\\f41a\"}.fa-otter:before{content:\"\\f700\"}.fa-outdent:before{content:\"\\f03b\"}.fa-page4:before{content:\"\\f3d7\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-pager:before{content:\"\\f815\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-paint-roller:before{content:\"\\f5aa\"}.fa-palette:before{content:\"\\f53f\"}.fa-palfed:before{content:\"\\f3d8\"}.fa-pallet:before{content:\"\\f482\"}.fa-paper-plane:before{content:\"\\f1d8\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-parachute-box:before{content:\"\\f4cd\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-parking:before{content:\"\\f540\"}.fa-passport:before{content:\"\\f5ab\"}.fa-pastafarianism:before{content:\"\\f67b\"}.fa-paste:before{content:\"\\f0ea\"}.fa-patreon:before{content:\"\\f3d9\"}.fa-pause:before{content:\"\\f04c\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-paw:before{content:\"\\f1b0\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-peace:before{content:\"\\f67c\"}.fa-pen:before{content:\"\\f304\"}.fa-pen-alt:before{content:\"\\f305\"}.fa-pen-fancy:before{content:\"\\f5ac\"}.fa-pen-nib:before{content:\"\\f5ad\"}.fa-pen-square:before{content:\"\\f14b\"}.fa-pencil-alt:before{content:\"\\f303\"}.fa-pencil-ruler:before{content:\"\\f5ae\"}.fa-penny-arcade:before{content:\"\\f704\"}.fa-people-carry:before{content:\"\\f4ce\"}.fa-pepper-hot:before{content:\"\\f816\"}.fa-percent:before{content:\"\\f295\"}.fa-percentage:before{content:\"\\f541\"}.fa-periscope:before{content:\"\\f3da\"}.fa-person-booth:before{content:\"\\f756\"}.fa-phabricator:before{content:\"\\f3db\"}.fa-phoenix-framework:before{content:\"\\f3dc\"}.fa-phoenix-squadron:before{content:\"\\f511\"}.fa-phone:before{content:\"\\f095\"}.fa-phone-alt:before{content:\"\\f879\"}.fa-phone-slash:before{content:\"\\f3dd\"}.fa-phone-square:before{content:\"\\f098\"}.fa-phone-square-alt:before{content:\"\\f87b\"}.fa-phone-volume:before{content:\"\\f2a0\"}.fa-photo-video:before{content:\"\\f87c\"}.fa-php:before{content:\"\\f457\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-pied-piper-hat:before{content:\"\\f4e5\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-piggy-bank:before{content:\"\\f4d3\"}.fa-pills:before{content:\"\\f484\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-pizza-slice:before{content:\"\\f818\"}.fa-place-of-worship:before{content:\"\\f67f\"}.fa-plane:before{content:\"\\f072\"}.fa-plane-arrival:before{content:\"\\f5af\"}.fa-plane-departure:before{content:\"\\f5b0\"}.fa-play:before{content:\"\\f04b\"}.fa-play-circle:before{content:\"\\f144\"}.fa-playstation:before{content:\"\\f3df\"}.fa-plug:before{content:\"\\f1e6\"}.fa-plus:before{content:\"\\f067\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-poll:before{content:\"\\f681\"}.fa-poll-h:before{content:\"\\f682\"}.fa-poo:before{content:\"\\f2fe\"}.fa-poo-storm:before{content:\"\\f75a\"}.fa-poop:before{content:\"\\f619\"}.fa-portrait:before{content:\"\\f3e0\"}.fa-pound-sign:before{content:\"\\f154\"}.fa-power-off:before{content:\"\\f011\"}.fa-pray:before{content:\"\\f683\"}.fa-praying-hands:before{content:\"\\f684\"}.fa-prescription:before{content:\"\\f5b1\"}.fa-prescription-bottle:before{content:\"\\f485\"}.fa-prescription-bottle-alt:before{content:\"\\f486\"}.fa-print:before{content:\"\\f02f\"}.fa-procedures:before{content:\"\\f487\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-project-diagram:before{content:\"\\f542\"}.fa-pushed:before{content:\"\\f3e1\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-python:before{content:\"\\f3e2\"}.fa-qq:before{content:\"\\f1d6\"}.fa-qrcode:before{content:\"\\f029\"}.fa-question:before{content:\"\\f128\"}.fa-question-circle:before{content:\"\\f059\"}.fa-quidditch:before{content:\"\\f458\"}.fa-quinscape:before{content:\"\\f459\"}.fa-quora:before{content:\"\\f2c4\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-quran:before{content:\"\\f687\"}.fa-r-project:before{content:\"\\f4f7\"}.fa-radiation:before{content:\"\\f7b9\"}.fa-radiation-alt:before{content:\"\\f7ba\"}.fa-rainbow:before{content:\"\\f75b\"}.fa-random:before{content:\"\\f074\"}.fa-raspberry-pi:before{content:\"\\f7bb\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-react:before{content:\"\\f41b\"}.fa-reacteurope:before{content:\"\\f75d\"}.fa-readme:before{content:\"\\f4d5\"}.fa-rebel:before{content:\"\\f1d0\"}.fa-receipt:before{content:\"\\f543\"}.fa-record-vinyl:before{content:\"\\f8d9\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-red-river:before{content:\"\\f3e3\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-redhat:before{content:\"\\f7bc\"}.fa-redo:before{content:\"\\f01e\"}.fa-redo-alt:before{content:\"\\f2f9\"}.fa-registered:before{content:\"\\f25d\"}.fa-remove-format:before{content:\"\\f87d\"}.fa-renren:before{content:\"\\f18b\"}.fa-reply:before{content:\"\\f3e5\"}.fa-reply-all:before{content:\"\\f122\"}.fa-replyd:before{content:\"\\f3e6\"}.fa-republican:before{content:\"\\f75e\"}.fa-researchgate:before{content:\"\\f4f8\"}.fa-resolving:before{content:\"\\f3e7\"}.fa-restroom:before{content:\"\\f7bd\"}.fa-retweet:before{content:\"\\f079\"}.fa-rev:before{content:\"\\f5b2\"}.fa-ribbon:before{content:\"\\f4d6\"}.fa-ring:before{content:\"\\f70b\"}.fa-road:before{content:\"\\f018\"}.fa-robot:before{content:\"\\f544\"}.fa-rocket:before{content:\"\\f135\"}.fa-rocketchat:before{content:\"\\f3e8\"}.fa-rockrms:before{content:\"\\f3e9\"}.fa-route:before{content:\"\\f4d7\"}.fa-rss:before{content:\"\\f09e\"}.fa-rss-square:before{content:\"\\f143\"}.fa-ruble-sign:before{content:\"\\f158\"}.fa-ruler:before{content:\"\\f545\"}.fa-ruler-combined:before{content:\"\\f546\"}.fa-ruler-horizontal:before{content:\"\\f547\"}.fa-ruler-vertical:before{content:\"\\f548\"}.fa-running:before{content:\"\\f70c\"}.fa-rupee-sign:before{content:\"\\f156\"}.fa-sad-cry:before{content:\"\\f5b3\"}.fa-sad-tear:before{content:\"\\f5b4\"}.fa-safari:before{content:\"\\f267\"}.fa-salesforce:before{content:\"\\f83b\"}.fa-sass:before{content:\"\\f41e\"}.fa-satellite:before{content:\"\\f7bf\"}.fa-satellite-dish:before{content:\"\\f7c0\"}.fa-save:before{content:\"\\f0c7\"}.fa-schlix:before{content:\"\\f3ea\"}.fa-school:before{content:\"\\f549\"}.fa-screwdriver:before{content:\"\\f54a\"}.fa-scribd:before{content:\"\\f28a\"}.fa-scroll:before{content:\"\\f70e\"}.fa-sd-card:before{content:\"\\f7c2\"}.fa-search:before{content:\"\\f002\"}.fa-search-dollar:before{content:\"\\f688\"}.fa-search-location:before{content:\"\\f689\"}.fa-search-minus:before{content:\"\\f010\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-searchengin:before{content:\"\\f3eb\"}.fa-seedling:before{content:\"\\f4d8\"}.fa-sellcast:before{content:\"\\f2da\"}.fa-sellsy:before{content:\"\\f213\"}.fa-server:before{content:\"\\f233\"}.fa-servicestack:before{content:\"\\f3ec\"}.fa-shapes:before{content:\"\\f61f\"}.fa-share:before{content:\"\\f064\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-share-square:before{content:\"\\f14d\"}.fa-shekel-sign:before{content:\"\\f20b\"}.fa-shield-alt:before{content:\"\\f3ed\"}.fa-ship:before{content:\"\\f21a\"}.fa-shipping-fast:before{content:\"\\f48b\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-shoe-prints:before{content:\"\\f54b\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-shopware:before{content:\"\\f5b5\"}.fa-shower:before{content:\"\\f2cc\"}.fa-shuttle-van:before{content:\"\\f5b6\"}.fa-sign:before{content:\"\\f4d9\"}.fa-sign-in-alt:before{content:\"\\f2f6\"}.fa-sign-language:before{content:\"\\f2a7\"}.fa-sign-out-alt:before{content:\"\\f2f5\"}.fa-signal:before{content:\"\\f012\"}.fa-signature:before{content:\"\\f5b7\"}.fa-sim-card:before{content:\"\\f7c4\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-sistrix:before{content:\"\\f3ee\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-sith:before{content:\"\\f512\"}.fa-skating:before{content:\"\\f7c5\"}.fa-sketch:before{content:\"\\f7c6\"}.fa-skiing:before{content:\"\\f7c9\"}.fa-skiing-nordic:before{content:\"\\f7ca\"}.fa-skull:before{content:\"\\f54c\"}.fa-skull-crossbones:before{content:\"\\f714\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-skype:before{content:\"\\f17e\"}.fa-slack:before{content:\"\\f198\"}.fa-slack-hash:before{content:\"\\f3ef\"}.fa-slash:before{content:\"\\f715\"}.fa-sleigh:before{content:\"\\f7cc\"}.fa-sliders-h:before{content:\"\\f1de\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-smile:before{content:\"\\f118\"}.fa-smile-beam:before{content:\"\\f5b8\"}.fa-smile-wink:before{content:\"\\f4da\"}.fa-smog:before{content:\"\\f75f\"}.fa-smoking:before{content:\"\\f48d\"}.fa-smoking-ban:before{content:\"\\f54d\"}.fa-sms:before{content:\"\\f7cd\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-snowboarding:before{content:\"\\f7ce\"}.fa-snowflake:before{content:\"\\f2dc\"}.fa-snowman:before{content:\"\\f7d0\"}.fa-snowplow:before{content:\"\\f7d2\"}.fa-socks:before{content:\"\\f696\"}.fa-solar-panel:before{content:\"\\f5ba\"}.fa-sort:before{content:\"\\f0dc\"}.fa-sort-alpha-down:before{content:\"\\f15d\"}.fa-sort-alpha-down-alt:before{content:\"\\f881\"}.fa-sort-alpha-up:before{content:\"\\f15e\"}.fa-sort-alpha-up-alt:before{content:\"\\f882\"}.fa-sort-amount-down:before{content:\"\\f160\"}.fa-sort-amount-down-alt:before{content:\"\\f884\"}.fa-sort-amount-up:before{content:\"\\f161\"}.fa-sort-amount-up-alt:before{content:\"\\f885\"}.fa-sort-down:before{content:\"\\f0dd\"}.fa-sort-numeric-down:before{content:\"\\f162\"}.fa-sort-numeric-down-alt:before{content:\"\\f886\"}.fa-sort-numeric-up:before{content:\"\\f163\"}.fa-sort-numeric-up-alt:before{content:\"\\f887\"}.fa-sort-up:before{content:\"\\f0de\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-sourcetree:before{content:\"\\f7d3\"}.fa-spa:before{content:\"\\f5bb\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-speakap:before{content:\"\\f3f3\"}.fa-speaker-deck:before{content:\"\\f83c\"}.fa-spell-check:before{content:\"\\f891\"}.fa-spider:before{content:\"\\f717\"}.fa-spinner:before{content:\"\\f110\"}.fa-splotch:before{content:\"\\f5bc\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-spray-can:before{content:\"\\f5bd\"}.fa-square:before{content:\"\\f0c8\"}.fa-square-full:before{content:\"\\f45c\"}.fa-square-root-alt:before{content:\"\\f698\"}.fa-squarespace:before{content:\"\\f5be\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-stackpath:before{content:\"\\f842\"}.fa-stamp:before{content:\"\\f5bf\"}.fa-star:before{content:\"\\f005\"}.fa-star-and-crescent:before{content:\"\\f699\"}.fa-star-half:before{content:\"\\f089\"}.fa-star-half-alt:before{content:\"\\f5c0\"}.fa-star-of-david:before{content:\"\\f69a\"}.fa-star-of-life:before{content:\"\\f621\"}.fa-staylinked:before{content:\"\\f3f5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-steam-symbol:before{content:\"\\f3f6\"}.fa-step-backward:before{content:\"\\f048\"}.fa-step-forward:before{content:\"\\f051\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-sticker-mule:before{content:\"\\f3f7\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-stop:before{content:\"\\f04d\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stopwatch:before{content:\"\\f2f2\"}.fa-store:before{content:\"\\f54e\"}.fa-store-alt:before{content:\"\\f54f\"}.fa-strava:before{content:\"\\f428\"}.fa-stream:before{content:\"\\f550\"}.fa-street-view:before{content:\"\\f21d\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-stripe:before{content:\"\\f429\"}.fa-stripe-s:before{content:\"\\f42a\"}.fa-stroopwafel:before{content:\"\\f551\"}.fa-studiovinari:before{content:\"\\f3f8\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-subscript:before{content:\"\\f12c\"}.fa-subway:before{content:\"\\f239\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-suitcase-rolling:before{content:\"\\f5c1\"}.fa-sun:before{content:\"\\f185\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-superscript:before{content:\"\\f12b\"}.fa-supple:before{content:\"\\f3f9\"}.fa-surprise:before{content:\"\\f5c2\"}.fa-suse:before{content:\"\\f7d6\"}.fa-swatchbook:before{content:\"\\f5c3\"}.fa-swift:before{content:\"\\f8e1\"}.fa-swimmer:before{content:\"\\f5c4\"}.fa-swimming-pool:before{content:\"\\f5c5\"}.fa-symfony:before{content:\"\\f83d\"}.fa-synagogue:before{content:\"\\f69b\"}.fa-sync:before{content:\"\\f021\"}.fa-sync-alt:before{content:\"\\f2f1\"}.fa-syringe:before{content:\"\\f48e\"}.fa-table:before{content:\"\\f0ce\"}.fa-table-tennis:before{content:\"\\f45d\"}.fa-tablet:before{content:\"\\f10a\"}.fa-tablet-alt:before{content:\"\\f3fa\"}.fa-tablets:before{content:\"\\f490\"}.fa-tachometer-alt:before{content:\"\\f3fd\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-tape:before{content:\"\\f4db\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-taxi:before{content:\"\\f1ba\"}.fa-teamspeak:before{content:\"\\f4f9\"}.fa-teeth:before{content:\"\\f62e\"}.fa-teeth-open:before{content:\"\\f62f\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-telegram-plane:before{content:\"\\f3fe\"}.fa-temperature-high:before{content:\"\\f769\"}.fa-temperature-low:before{content:\"\\f76b\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-tenge:before{content:\"\\f7d7\"}.fa-terminal:before{content:\"\\f120\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-th:before{content:\"\\f00a\"}.fa-th-large:before{content:\"\\f009\"}.fa-th-list:before{content:\"\\f00b\"}.fa-the-red-yeti:before{content:\"\\f69d\"}.fa-theater-masks:before{content:\"\\f630\"}.fa-themeco:before{content:\"\\f5c6\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-thermometer:before{content:\"\\f491\"}.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-thermometer-full:before{content:\"\\f2c7\"}.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-think-peaks:before{content:\"\\f731\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbtack:before{content:\"\\f08d\"}.fa-ticket-alt:before{content:\"\\f3ff\"}.fa-times:before{content:\"\\f00d\"}.fa-times-circle:before{content:\"\\f057\"}.fa-tint:before{content:\"\\f043\"}.fa-tint-slash:before{content:\"\\f5c7\"}.fa-tired:before{content:\"\\f5c8\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-toilet:before{content:\"\\f7d8\"}.fa-toilet-paper:before{content:\"\\f71e\"}.fa-toolbox:before{content:\"\\f552\"}.fa-tools:before{content:\"\\f7d9\"}.fa-tooth:before{content:\"\\f5c9\"}.fa-torah:before{content:\"\\f6a0\"}.fa-torii-gate:before{content:\"\\f6a1\"}.fa-tractor:before{content:\"\\f722\"}.fa-trade-federation:before{content:\"\\f513\"}.fa-trademark:before{content:\"\\f25c\"}.fa-traffic-light:before{content:\"\\f637\"}.fa-train:before{content:\"\\f238\"}.fa-tram:before{content:\"\\f7da\"}.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-trash:before{content:\"\\f1f8\"}.fa-trash-alt:before{content:\"\\f2ed\"}.fa-trash-restore:before{content:\"\\f829\"}.fa-trash-restore-alt:before{content:\"\\f82a\"}.fa-tree:before{content:\"\\f1bb\"}.fa-trello:before{content:\"\\f181\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-trophy:before{content:\"\\f091\"}.fa-truck:before{content:\"\\f0d1\"}.fa-truck-loading:before{content:\"\\f4de\"}.fa-truck-monster:before{content:\"\\f63b\"}.fa-truck-moving:before{content:\"\\f4df\"}.fa-truck-pickup:before{content:\"\\f63c\"}.fa-tshirt:before{content:\"\\f553\"}.fa-tty:before{content:\"\\f1e4\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-tv:before{content:\"\\f26c\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-twitter:before{content:\"\\f099\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-typo3:before{content:\"\\f42b\"}.fa-uber:before{content:\"\\f402\"}.fa-ubuntu:before{content:\"\\f7df\"}.fa-uikit:before{content:\"\\f403\"}.fa-umbraco:before{content:\"\\f8e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-umbrella-beach:before{content:\"\\f5ca\"}.fa-underline:before{content:\"\\f0cd\"}.fa-undo:before{content:\"\\f0e2\"}.fa-undo-alt:before{content:\"\\f2ea\"}.fa-uniregistry:before{content:\"\\f404\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-university:before{content:\"\\f19c\"}.fa-unlink:before{content:\"\\f127\"}.fa-unlock:before{content:\"\\f09c\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-untappd:before{content:\"\\f405\"}.fa-upload:before{content:\"\\f093\"}.fa-ups:before{content:\"\\f7e0\"}.fa-usb:before{content:\"\\f287\"}.fa-user:before{content:\"\\f007\"}.fa-user-alt:before{content:\"\\f406\"}.fa-user-alt-slash:before{content:\"\\f4fa\"}.fa-user-astronaut:before{content:\"\\f4fb\"}.fa-user-check:before{content:\"\\f4fc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-clock:before{content:\"\\f4fd\"}.fa-user-cog:before{content:\"\\f4fe\"}.fa-user-edit:before{content:\"\\f4ff\"}.fa-user-friends:before{content:\"\\f500\"}.fa-user-graduate:before{content:\"\\f501\"}.fa-user-injured:before{content:\"\\f728\"}.fa-user-lock:before{content:\"\\f502\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-user-minus:before{content:\"\\f503\"}.fa-user-ninja:before{content:\"\\f504\"}.fa-user-nurse:before{content:\"\\f82f\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-user-shield:before{content:\"\\f505\"}.fa-user-slash:before{content:\"\\f506\"}.fa-user-tag:before{content:\"\\f507\"}.fa-user-tie:before{content:\"\\f508\"}.fa-user-times:before{content:\"\\f235\"}.fa-users:before{content:\"\\f0c0\"}.fa-users-cog:before{content:\"\\f509\"}.fa-usps:before{content:\"\\f7e1\"}.fa-ussunnah:before{content:\"\\f407\"}.fa-utensil-spoon:before{content:\"\\f2e5\"}.fa-utensils:before{content:\"\\f2e7\"}.fa-vaadin:before{content:\"\\f408\"}.fa-vector-square:before{content:\"\\f5cb\"}.fa-venus:before{content:\"\\f221\"}.fa-venus-double:before{content:\"\\f226\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-viacoin:before{content:\"\\f237\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-vial:before{content:\"\\f492\"}.fa-vials:before{content:\"\\f493\"}.fa-viber:before{content:\"\\f409\"}.fa-video:before{content:\"\\f03d\"}.fa-video-slash:before{content:\"\\f4e2\"}.fa-vihara:before{content:\"\\f6a7\"}.fa-vimeo:before{content:\"\\f40a\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-vimeo-v:before{content:\"\\f27d\"}.fa-vine:before{content:\"\\f1ca\"}.fa-vk:before{content:\"\\f189\"}.fa-vnv:before{content:\"\\f40b\"}.fa-voicemail:before{content:\"\\f897\"}.fa-volleyball-ball:before{content:\"\\f45f\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-mute:before{content:\"\\f6a9\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-up:before{content:\"\\f028\"}.fa-vote-yea:before{content:\"\\f772\"}.fa-vr-cardboard:before{content:\"\\f729\"}.fa-vuejs:before{content:\"\\f41f\"}.fa-walking:before{content:\"\\f554\"}.fa-wallet:before{content:\"\\f555\"}.fa-warehouse:before{content:\"\\f494\"}.fa-water:before{content:\"\\f773\"}.fa-wave-square:before{content:\"\\f83e\"}.fa-waze:before{content:\"\\f83f\"}.fa-weebly:before{content:\"\\f5cc\"}.fa-weibo:before{content:\"\\f18a\"}.fa-weight:before{content:\"\\f496\"}.fa-weight-hanging:before{content:\"\\f5cd\"}.fa-weixin:before{content:\"\\f1d7\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-whatsapp-square:before{content:\"\\f40c\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-whmcs:before{content:\"\\f40d\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-wind:before{content:\"\\f72e\"}.fa-window-close:before{content:\"\\f410\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-windows:before{content:\"\\f17a\"}.fa-wine-bottle:before{content:\"\\f72f\"}.fa-wine-glass:before{content:\"\\f4e3\"}.fa-wine-glass-alt:before{content:\"\\f5ce\"}.fa-wix:before{content:\"\\f5cf\"}.fa-wizards-of-the-coast:before{content:\"\\f730\"}.fa-wolf-pack-battalion:before{content:\"\\f514\"}.fa-won-sign:before{content:\"\\f159\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-wordpress-simple:before{content:\"\\f411\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-wpforms:before{content:\"\\f298\"}.fa-wpressr:before{content:\"\\f3e4\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-x-ray:before{content:\"\\f497\"}.fa-xbox:before{content:\"\\f412\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-y-combinator:before{content:\"\\f23b\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-yammer:before{content:\"\\f840\"}.fa-yandex:before{content:\"\\f413\"}.fa-yandex-international:before{content:\"\\f414\"}.fa-yarn:before{content:\"\\f7e3\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-yen-sign:before{content:\"\\f157\"}.fa-yin-yang:before{content:\"\\f6ad\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-youtube:before{content:\"\\f167\"}.fa-youtube-square:before{content:\"\\f431\"}.fa-zhihu:before{content:\"\\f63f\"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:\"Font Awesome 5 Brands\";font-style:normal;font-weight:normal;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg#fontawesome) format(\"svg\")}.fab{font-family:\"Font Awesome 5 Brands\"}@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:400;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg#fontawesome) format(\"svg\")}.far{font-weight:400}@font-face{font-family:\"Font Awesome 5 Free\";font-style:normal;font-weight:900;font-display:auto;src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.eot);src:url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.eot?#iefix) format(\"embedded-opentype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.woff2) format(\"woff2\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.woff) format(\"woff\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.ttf) format(\"truetype\"),url(.\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg#fontawesome) format(\"svg\")}.fa,.far,.fas{font-family:\"Font Awesome 5 Free\"}.fa,.fas{font-weight:900}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffont-awesome.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,4 @@\n-\u002F*!\r\n- *  Font Awesome 4.7.0 by @davegandy - http:\u002F\u002Ffontawesome.io - @fontawesome\r\n- *  License - http:\u002F\u002Ffontawesome.io\u002Flicense (Font: SIL OFL 1.1, CSS: MIT License)\r\n+\u002F*!\n+ *  Font Awesome 4.7.0 by @davegandy - http:\u002F\u002Ffontawesome.io - @fontawesome\n+ *  License - http:\u002F\u002Ffontawesome.io\u002Flicense (Font: SIL OFL 1.1, CSS: MIT License)\n  *\u002F@font-face{font-family:FontAwesome;src:url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.eot?v=4.7.0);src:url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.woff?v=4.7.0) format('woff'),url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(..\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px\u002F1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-close:before,.fa-remove:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-cog:before,.fa-gear:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-repeat:before,.fa-rotate-right:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-exclamation-triangle:before,.fa-warning:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-cogs:before,.fa-gears:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-floppy-o:before,.fa-save:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-sort:before,.fa-unsorted:before{content:\"\\f0dc\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\f0dd\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-gavel:before,.fa-legal:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-bolt:before,.fa-flash:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-clipboard:before,.fa-paste:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-chain-broken:before,.fa-unlink:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:\"\\f150\"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:\"\\f151\"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:\"\\f152\"}.fa-eur:before,.fa-euro:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-inr:before,.fa-rupee:before{content:\"\\f156\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:\"\\f157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:\"\\f158\"}.fa-krw:before,.fa-won:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-try:before,.fa-turkish-lira:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:\"\\f19c\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper-pp:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:\"\\f1c5\"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:\"\\f1c6\"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:\"\\f1d0\"}.fa-empire:before,.fa-ge:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-paper-plane:before,.fa-send:before{content:\"\\f1d8\"}.fa-paper-plane-o:before,.fa-send-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-bed:before,.fa-hotel:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-y-combinator:before,.fa-yc:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-television:before,.fa-tv:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}.fa-reddit-alien:before{content:\"\\f281\"}.fa-edge:before{content:\"\\f282\"}.fa-credit-card-alt:before{content:\"\\f283\"}.fa-codiepie:before{content:\"\\f284\"}.fa-modx:before{content:\"\\f285\"}.fa-fort-awesome:before{content:\"\\f286\"}.fa-usb:before{content:\"\\f287\"}.fa-product-hunt:before{content:\"\\f288\"}.fa-mixcloud:before{content:\"\\f289\"}.fa-scribd:before{content:\"\\f28a\"}.fa-pause-circle:before{content:\"\\f28b\"}.fa-pause-circle-o:before{content:\"\\f28c\"}.fa-stop-circle:before{content:\"\\f28d\"}.fa-stop-circle-o:before{content:\"\\f28e\"}.fa-shopping-bag:before{content:\"\\f290\"}.fa-shopping-basket:before{content:\"\\f291\"}.fa-hashtag:before{content:\"\\f292\"}.fa-bluetooth:before{content:\"\\f293\"}.fa-bluetooth-b:before{content:\"\\f294\"}.fa-percent:before{content:\"\\f295\"}.fa-gitlab:before{content:\"\\f296\"}.fa-wpbeginner:before{content:\"\\f297\"}.fa-wpforms:before{content:\"\\f298\"}.fa-envira:before{content:\"\\f299\"}.fa-universal-access:before{content:\"\\f29a\"}.fa-wheelchair-alt:before{content:\"\\f29b\"}.fa-question-circle-o:before{content:\"\\f29c\"}.fa-blind:before{content:\"\\f29d\"}.fa-audio-description:before{content:\"\\f29e\"}.fa-volume-control-phone:before{content:\"\\f2a0\"}.fa-braille:before{content:\"\\f2a1\"}.fa-assistive-listening-systems:before{content:\"\\f2a2\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:\"\\f2a3\"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:\"\\f2a4\"}.fa-glide:before{content:\"\\f2a5\"}.fa-glide-g:before{content:\"\\f2a6\"}.fa-sign-language:before,.fa-signing:before{content:\"\\f2a7\"}.fa-low-vision:before{content:\"\\f2a8\"}.fa-viadeo:before{content:\"\\f2a9\"}.fa-viadeo-square:before{content:\"\\f2aa\"}.fa-snapchat:before{content:\"\\f2ab\"}.fa-snapchat-ghost:before{content:\"\\f2ac\"}.fa-snapchat-square:before{content:\"\\f2ad\"}.fa-pied-piper:before{content:\"\\f2ae\"}.fa-first-order:before{content:\"\\f2b0\"}.fa-yoast:before{content:\"\\f2b1\"}.fa-themeisle:before{content:\"\\f2b2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\f2b3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\f2b4\"}.fa-handshake-o:before{content:\"\\f2b5\"}.fa-envelope-open:before{content:\"\\f2b6\"}.fa-envelope-open-o:before{content:\"\\f2b7\"}.fa-linode:before{content:\"\\f2b8\"}.fa-address-book:before{content:\"\\f2b9\"}.fa-address-book-o:before{content:\"\\f2ba\"}.fa-address-card:before,.fa-vcard:before{content:\"\\f2bb\"}.fa-address-card-o:before,.fa-vcard-o:before{content:\"\\f2bc\"}.fa-user-circle:before{content:\"\\f2bd\"}.fa-user-circle-o:before{content:\"\\f2be\"}.fa-user-o:before{content:\"\\f2c0\"}.fa-id-badge:before{content:\"\\f2c1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\f2c2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\f2c3\"}.fa-quora:before{content:\"\\f2c4\"}.fa-free-code-camp:before{content:\"\\f2c5\"}.fa-telegram:before{content:\"\\f2c6\"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:\"\\f2c7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\f2c8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\f2c9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\f2ca\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\f2cb\"}.fa-shower:before{content:\"\\f2cc\"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:\"\\f2cd\"}.fa-podcast:before{content:\"\\f2ce\"}.fa-window-maximize:before{content:\"\\f2d0\"}.fa-window-minimize:before{content:\"\\f2d1\"}.fa-window-restore:before{content:\"\\f2d2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\f2d3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\f2d4\"}.fa-bandcamp:before{content:\"\\f2d5\"}.fa-grav:before{content:\"\\f2d6\"}.fa-etsy:before{content:\"\\f2d7\"}.fa-imdb:before{content:\"\\f2d8\"}.fa-ravelry:before{content:\"\\f2d9\"}.fa-eercast:before{content:\"\\f2da\"}.fa-microchip:before{content:\"\\f2db\"}.fa-snowflake-o:before{content:\"\\f2dc\"}.fa-superpowers:before{content:\"\\f2dd\"}.fa-wpexplorer:before{content:\"\\f2de\"}.fa-meetup:before{content:\"\\f2e0\"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fawesome\u002Ffontawesome-webfont.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2671 +1,2671 @@\n-\u003C?xml version=\"1.0\" standalone=\"no\"?>\r\n-\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\r\n-\u003Csvg>\r\n-\u003Cmetadata>\r\n-Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016\r\n- By ,,,\r\n-Copyright Dave Gandy 2016. All rights reserved.\r\n-\u003C\u002Fmetadata>\r\n-\u003Cdefs>\r\n-\u003Cfont id=\"FontAwesome\" horiz-adv-x=\"1536\" >\r\n-  \u003Cfont-face \r\n-    font-family=\"FontAwesome\"\r\n-    font-weight=\"400\"\r\n-    font-stretch=\"normal\"\r\n-    units-per-em=\"1792\"\r\n-    panose-1=\"0 0 0 0 0 0 0 0 0 0\"\r\n-    ascent=\"1536\"\r\n-    descent=\"-256\"\r\n-    bbox=\"-1.02083 -256.962 2304.6 1537.02\"\r\n-    underline-thickness=\"0\"\r\n-    underline-position=\"0\"\r\n-    unicode-range=\"U+0020-F500\"\r\n-  \u002F>\r\n-\u003Cmissing-glyph horiz-adv-x=\"896\" \r\n-d=\"M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z\" \u002F>\r\n-    \u003Cglyph glyph-name=\".notdef\" horiz-adv-x=\"896\" \r\n-d=\"M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z\" \u002F>\r\n-    \u003Cglyph glyph-name=\".null\" horiz-adv-x=\"0\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"nonmarkingreturn\" horiz-adv-x=\"597\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"space\" unicode=\" \" horiz-adv-x=\"448\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"dieresis\" unicode=\"&#xa8;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xa9;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xae;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"acute\" unicode=\"&#xb4;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"AE\" unicode=\"&#xc6;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"Oslash\" unicode=\"&#xd8;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"trademark\" unicode=\"&#x2122;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"infinity\" unicode=\"&#x221e;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"notequal\" unicode=\"&#x2260;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"glass\" unicode=\"&#xf000;\" horiz-adv-x=\"1792\" \r\n-d=\"M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"music\" unicode=\"&#xf001;\" \r\n-d=\"M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89\r\n-t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search\" unicode=\"&#xf002;\" horiz-adv-x=\"1664\" \r\n-d=\"M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5\r\n-t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf003;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13\r\n-t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z\r\n-M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600\r\n-q-18 -18 -44 -18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"1664\" \r\n-d=\"M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455\r\n-l502 -73q56 -9 56 -46z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star_empty\" unicode=\"&#xf006;\" horiz-adv-x=\"1664\" \r\n-d=\"M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500\r\n-l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"1280\" \r\n-d=\"M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5\r\n-t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"film\" unicode=\"&#xf008;\" horiz-adv-x=\"1920\" \r\n-d=\"M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128\r\n-q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45\r\n-t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128\r\n-q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19\r\n-t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th_large\" unicode=\"&#xf009;\" horiz-adv-x=\"1664\" \r\n-d=\"M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38\r\n-h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th\" unicode=\"&#xf00a;\" horiz-adv-x=\"1792\" \r\n-d=\"M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320\r\n-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28\r\n-h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192\r\n-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th_list\" unicode=\"&#xf00b;\" horiz-adv-x=\"1792\" \r\n-d=\"M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960\r\n-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28\r\n-h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ok\" unicode=\"&#xf00c;\" horiz-adv-x=\"1792\" \r\n-d=\"M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"remove\" unicode=\"&#xf00d;\" horiz-adv-x=\"1408\" \r\n-d=\"M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68\r\n-t-28 -68l-294 -294l294 -294q28 -28 28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"zoom_in\" unicode=\"&#xf00e;\" horiz-adv-x=\"1664\" \r\n-d=\"M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224\r\n-q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5\r\n-t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"zoom_out\" unicode=\"&#xf010;\" horiz-adv-x=\"1664\" \r\n-d=\"M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z\r\n-M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"off\" unicode=\"&#xf011;\" \r\n-d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5\r\n-t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"signal\" unicode=\"&#xf012;\" horiz-adv-x=\"1792\" \r\n-d=\"M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23\r\n-v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cog\" unicode=\"&#xf013;\" \r\n-d=\"M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38\r\n-q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13\r\n-l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22\r\n-q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash\" unicode=\"&#xf014;\" horiz-adv-x=\"1408\" \r\n-d=\"M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576\r\n-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832\r\n-q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"home\" unicode=\"&#xf015;\" horiz-adv-x=\"1664\" \r\n-d=\"M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5\r\n-l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file_alt\" unicode=\"&#xf016;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"time\" unicode=\"&#xf017;\" \r\n-d=\"M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"road\" unicode=\"&#xf018;\" horiz-adv-x=\"1920\" \r\n-d=\"M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256\r\n-q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"download_alt\" unicode=\"&#xf019;\" horiz-adv-x=\"1664\" \r\n-d=\"M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136\r\n-q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"download\" unicode=\"&#xf01a;\" \r\n-d=\"M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273\r\n-t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"upload\" unicode=\"&#xf01b;\" \r\n-d=\"M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198\r\n-t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"inbox\" unicode=\"&#xf01c;\" \r\n-d=\"M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552\r\n-q25 -61 25 -123z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play_circle\" unicode=\"&#xf01d;\" \r\n-d=\"M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"repeat\" unicode=\"&#xf01e;\" \r\n-d=\"M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9\r\n-l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"refresh\" unicode=\"&#xf021;\" \r\n-d=\"M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117\r\n-q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5\r\n-q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list_alt\" unicode=\"&#xf022;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5\r\n-t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47\r\n-t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lock\" unicode=\"&#xf023;\" horiz-adv-x=\"1152\" \r\n-d=\"M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" horiz-adv-x=\"1792\" \r\n-d=\"M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48\r\n-t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"headphones\" unicode=\"&#xf025;\" horiz-adv-x=\"1664\" \r\n-d=\"M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78\r\n-t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5\r\n-t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume_off\" unicode=\"&#xf026;\" horiz-adv-x=\"768\" \r\n-d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume_down\" unicode=\"&#xf027;\" horiz-adv-x=\"1152\" \r\n-d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36\r\n-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume_up\" unicode=\"&#xf028;\" horiz-adv-x=\"1664\" \r\n-d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36\r\n-t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5\r\n-t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289\r\n-t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"qrcode\" unicode=\"&#xf029;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z\r\n-M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"barcode\" unicode=\"&#xf02a;\" horiz-adv-x=\"1792\" \r\n-d=\"M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z\r\n-M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tag\" unicode=\"&#xf02b;\" \r\n-d=\"M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5\r\n-l715 -714q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tags\" unicode=\"&#xf02c;\" horiz-adv-x=\"1920\" \r\n-d=\"M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5\r\n-l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book\" unicode=\"&#xf02d;\" horiz-adv-x=\"1664\" \r\n-d=\"M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23\r\n-q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906\r\n-q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5\r\n-t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"1280\" \r\n-d=\"M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"print\" unicode=\"&#xf02f;\" horiz-adv-x=\"1664\" \r\n-d=\"M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68\r\n-v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"camera\" unicode=\"&#xf030;\" horiz-adv-x=\"1920\" \r\n-d=\"M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136\r\n-q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"font\" unicode=\"&#xf031;\" horiz-adv-x=\"1664\" \r\n-d=\"M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57\r\n-q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5\r\n-q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bold\" unicode=\"&#xf032;\" horiz-adv-x=\"1408\" \r\n-d=\"M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142\r\n-q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5\r\n-t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5\r\n-t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"italic\" unicode=\"&#xf033;\" horiz-adv-x=\"1024\" \r\n-d=\"M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5\r\n-q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"text_height\" unicode=\"&#xf034;\" horiz-adv-x=\"1792\" \r\n-d=\"M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2\r\n-t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5\r\n-q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27\r\n-q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"text_width\" unicode=\"&#xf035;\" \r\n-d=\"M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1\r\n-t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27\r\n-q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5\r\n-t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49\r\n-t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align_left\" unicode=\"&#xf036;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45\r\n-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align_center\" unicode=\"&#xf037;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19\r\n-h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align_right\" unicode=\"&#xf038;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45\r\n-t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align_justify\" unicode=\"&#xf039;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45\r\n-t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list\" unicode=\"&#xf03a;\" horiz-adv-x=\"1792\" \r\n-d=\"M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5\r\n-t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344\r\n-q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5\r\n-t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192\r\n-q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"indent_left\" unicode=\"&#xf03b;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5\r\n-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088\r\n-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"indent_right\" unicode=\"&#xf03c;\" horiz-adv-x=\"1792\" \r\n-d=\"M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5\r\n-t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088\r\n-q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facetime_video\" unicode=\"&#xf03d;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5\r\n-q39 -17 39 -59z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"picture\" unicode=\"&#xf03e;\" horiz-adv-x=\"1920\" \r\n-d=\"M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216\r\n-q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pencil\" unicode=\"&#xf040;\" \r\n-d=\"M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38\r\n-q53 0 91 -38l235 -234q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map_marker\" unicode=\"&#xf041;\" horiz-adv-x=\"1024\" \r\n-d=\"M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adjust\" unicode=\"&#xf042;\" \r\n-d=\"M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tint\" unicode=\"&#xf043;\" horiz-adv-x=\"1024\" \r\n-d=\"M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362\r\n-q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"1792\" \r\n-d=\"M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832\r\n-q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92\r\n-l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share\" unicode=\"&#xf045;\" horiz-adv-x=\"1664\" \r\n-d=\"M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832\r\n-q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5\r\n-t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check\" unicode=\"&#xf046;\" horiz-adv-x=\"1664\" \r\n-d=\"M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832\r\n-q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110\r\n-q24 -24 24 -57t-24 -57z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"move\" unicode=\"&#xf047;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45\r\n-t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"step_backward\" unicode=\"&#xf048;\" horiz-adv-x=\"1024\" \r\n-d=\"M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fast_backward\" unicode=\"&#xf049;\" horiz-adv-x=\"1792\" \r\n-d=\"M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710\r\n-q19 19 32 13t13 -32v-710q4 10 13 19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"backward\" unicode=\"&#xf04a;\" horiz-adv-x=\"1664\" \r\n-d=\"M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play\" unicode=\"&#xf04b;\" horiz-adv-x=\"1408\" \r\n-d=\"M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pause\" unicode=\"&#xf04c;\" \r\n-d=\"M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stop\" unicode=\"&#xf04d;\" \r\n-d=\"M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"forward\" unicode=\"&#xf04e;\" horiz-adv-x=\"1664\" \r\n-d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fast_forward\" unicode=\"&#xf050;\" horiz-adv-x=\"1792\" \r\n-d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710\r\n-q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"step_forward\" unicode=\"&#xf051;\" horiz-adv-x=\"1024\" \r\n-d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eject\" unicode=\"&#xf052;\" horiz-adv-x=\"1538\" \r\n-d=\"M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_left\" unicode=\"&#xf053;\" horiz-adv-x=\"1280\" \r\n-d=\"M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_right\" unicode=\"&#xf054;\" horiz-adv-x=\"1280\" \r\n-d=\"M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus_sign\" unicode=\"&#xf055;\" \r\n-d=\"M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5\r\n-t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus_sign\" unicode=\"&#xf056;\" \r\n-d=\"M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\r\n-t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"remove_sign\" unicode=\"&#xf057;\" \r\n-d=\"M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19\r\n-q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ok_sign\" unicode=\"&#xf058;\" \r\n-d=\"M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\r\n-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"question_sign\" unicode=\"&#xf059;\" \r\n-d=\"M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59\r\n-q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\r\n-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"info_sign\" unicode=\"&#xf05a;\" \r\n-d=\"M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23\r\n-t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"screenshot\" unicode=\"&#xf05b;\" \r\n-d=\"M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109\r\n-q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143\r\n-q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"remove_circle\" unicode=\"&#xf05c;\" \r\n-d=\"M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23\r\n-l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5\r\n-t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ok_circle\" unicode=\"&#xf05d;\" \r\n-d=\"M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198\r\n-t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ban_circle\" unicode=\"&#xf05e;\" \r\n-d=\"M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61\r\n-t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow_left\" unicode=\"&#xf060;\" \r\n-d=\"M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5\r\n-t32.5 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow_right\" unicode=\"&#xf061;\" \r\n-d=\"M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow_up\" unicode=\"&#xf062;\" horiz-adv-x=\"1664\" \r\n-d=\"M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651\r\n-q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow_down\" unicode=\"&#xf063;\" horiz-adv-x=\"1664\" \r\n-d=\"M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share_alt\" unicode=\"&#xf064;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22\r\n-t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"resize_full\" unicode=\"&#xf065;\" \r\n-d=\"M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332\r\n-q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"resize_small\" unicode=\"&#xf066;\" \r\n-d=\"M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45\r\n-t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus\" unicode=\"&#xf067;\" horiz-adv-x=\"1408\" \r\n-d=\"M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus\" unicode=\"&#xf068;\" horiz-adv-x=\"1408\" \r\n-d=\"M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"asterisk\" unicode=\"&#xf069;\" horiz-adv-x=\"1664\" \r\n-d=\"M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154\r\n-q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exclamation_sign\" unicode=\"&#xf06a;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192\r\n-q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gift\" unicode=\"&#xf06b;\" \r\n-d=\"M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320\r\n-q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5\r\n-t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"leaf\" unicode=\"&#xf06c;\" horiz-adv-x=\"1792\" \r\n-d=\"M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268\r\n-q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5\r\n-t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fire\" unicode=\"&#xf06d;\" horiz-adv-x=\"1408\" \r\n-d=\"M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1\r\n-q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye_open\" unicode=\"&#xf06e;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5\r\n-t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye_close\" unicode=\"&#xf070;\" horiz-adv-x=\"1792\" \r\n-d=\"M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9\r\n-q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5\r\n-q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"warning_sign\" unicode=\"&#xf071;\" horiz-adv-x=\"1792\" \r\n-d=\"M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185\r\n-q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plane\" unicode=\"&#xf072;\" horiz-adv-x=\"1408\" \r\n-d=\"M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9\r\n-q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf073;\" horiz-adv-x=\"1664\" \r\n-d=\"M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z\r\n-M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64\r\n-q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47\r\n-h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"random\" unicode=\"&#xf074;\" horiz-adv-x=\"1792\" \r\n-d=\"M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1\r\n-t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5\r\n-v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111\r\n-t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281\r\n-q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"magnet\" unicode=\"&#xf076;\" \r\n-d=\"M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384\r\n-q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_up\" unicode=\"&#xf077;\" horiz-adv-x=\"1792\" \r\n-d=\"M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_down\" unicode=\"&#xf078;\" horiz-adv-x=\"1792\" \r\n-d=\"M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"retweet\" unicode=\"&#xf079;\" horiz-adv-x=\"1920\" \r\n-d=\"M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21\r\n-zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shopping_cart\" unicode=\"&#xf07a;\" horiz-adv-x=\"1664\" \r\n-d=\"M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45\r\n-t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder_close\" unicode=\"&#xf07b;\" horiz-adv-x=\"1664\" \r\n-d=\"M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder_open\" unicode=\"&#xf07c;\" horiz-adv-x=\"1920\" \r\n-d=\"M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5\r\n-t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"resize_vertical\" unicode=\"&#xf07d;\" horiz-adv-x=\"768\" \r\n-d=\"M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"resize_horizontal\" unicode=\"&#xf07e;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bar_chart\" unicode=\"&#xf080;\" horiz-adv-x=\"2048\" \r\n-d=\"M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"twitter_sign\" unicode=\"&#xf081;\" \r\n-d=\"M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4\r\n-q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5\r\n-t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook_sign\" unicode=\"&#xf082;\" \r\n-d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960\r\n-q0 119 84.5 203.5t203.5 84.5h960z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"camera_retro\" unicode=\"&#xf083;\" horiz-adv-x=\"1792\" \r\n-d=\"M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5\r\n-t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280\r\n-q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"key\" unicode=\"&#xf084;\" horiz-adv-x=\"1792\" \r\n-d=\"M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26\r\n-l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5\r\n-t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cogs\" unicode=\"&#xf085;\" horiz-adv-x=\"1920\" \r\n-d=\"M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5\r\n-t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5\r\n-l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7\r\n-l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31\r\n-q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20\r\n-t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68\r\n-q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70\r\n-q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"1792\" \r\n-d=\"M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224\r\n-q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7\r\n-q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs_up_alt\" unicode=\"&#xf087;\" \r\n-d=\"M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5\r\n-t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769\r\n-q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128\r\n-q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs_down_alt\" unicode=\"&#xf088;\" \r\n-d=\"M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5\r\n-t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z\r\n-M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5\r\n-h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star_half\" unicode=\"&#xf089;\" horiz-adv-x=\"896\" \r\n-d=\"M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heart_empty\" unicode=\"&#xf08a;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559\r\n-q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5\r\n-q224 0 351 -124t127 -344z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"signout\" unicode=\"&#xf08b;\" horiz-adv-x=\"1664\" \r\n-d=\"M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704\r\n-q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linkedin_sign\" unicode=\"&#xf08c;\" \r\n-d=\"M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5\r\n-q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pushpin\" unicode=\"&#xf08d;\" horiz-adv-x=\"1152\" \r\n-d=\"M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38\r\n-t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"external_link\" unicode=\"&#xf08e;\" horiz-adv-x=\"1792\" \r\n-d=\"M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320\r\n-q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"signin\" unicode=\"&#xf090;\" \r\n-d=\"M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5\r\n-q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trophy\" unicode=\"&#xf091;\" horiz-adv-x=\"1664\" \r\n-d=\"M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91\r\n-t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96\r\n-q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github_sign\" unicode=\"&#xf092;\" \r\n-d=\"M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4\r\n-q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4\r\n-t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16\r\n-q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"upload_alt\" unicode=\"&#xf093;\" horiz-adv-x=\"1664\" \r\n-d=\"M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92\r\n-t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \r\n-d=\"M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5\r\n-q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44\r\n-q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5\r\n-q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone\" unicode=\"&#xf095;\" horiz-adv-x=\"1408\" \r\n-d=\"M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186\r\n-q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14\r\n-t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check_empty\" unicode=\"&#xf096;\" horiz-adv-x=\"1408\" \r\n-d=\"M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832\r\n-q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bookmark_empty\" unicode=\"&#xf097;\" horiz-adv-x=\"1280\" \r\n-d=\"M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289\r\n-q0 34 19.5 62t52.5 41q21 9 44 9h1048z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone_sign\" unicode=\"&#xf098;\" \r\n-d=\"M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5\r\n-t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5\r\n-t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"twitter\" unicode=\"&#xf099;\" horiz-adv-x=\"1664\" \r\n-d=\"M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41\r\n-q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook\" unicode=\"&#xf09a;\" horiz-adv-x=\"1024\" \r\n-d=\"M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github\" unicode=\"&#xf09b;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24\r\n-q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5\r\n-t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12\r\n-q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z\r\n-M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlock\" unicode=\"&#xf09c;\" horiz-adv-x=\"1664\" \r\n-d=\"M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5\r\n-t316.5 -131.5t131.5 -316.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"credit_card\" unicode=\"&#xf09d;\" horiz-adv-x=\"1920\" \r\n-d=\"M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608\r\n-q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rss\" unicode=\"&#xf09e;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5\r\n-t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294\r\n-q187 -186 294 -425.5t120 -501.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" \r\n-d=\"M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5\r\n-h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75\r\n-l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bullhorn\" unicode=\"&#xf0a1;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5\r\n-t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0a2;\" horiz-adv-x=\"1792\" \r\n-d=\"M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z\r\n-M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5\r\n-t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"certificate\" unicode=\"&#xf0a3;\" \r\n-d=\"M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70\r\n-l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70\r\n-l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand_right\" unicode=\"&#xf0a4;\" horiz-adv-x=\"1792\" \r\n-d=\"M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106\r\n-q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43\r\n-q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5\r\n-t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand_left\" unicode=\"&#xf0a5;\" horiz-adv-x=\"1792\" \r\n-d=\"M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5\r\n-t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z\r\n-M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67\r\n-q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand_up\" unicode=\"&#xf0a6;\" \r\n-d=\"M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576\r\n-q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5\r\n-t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76\r\n-q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand_down\" unicode=\"&#xf0a7;\" \r\n-d=\"M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33\r\n-t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580\r\n-q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100\r\n-q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle_arrow_left\" unicode=\"&#xf0a8;\" \r\n-d=\"M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle_arrow_right\" unicode=\"&#xf0a9;\" \r\n-d=\"M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle_arrow_up\" unicode=\"&#xf0aa;\" \r\n-d=\"M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle_arrow_down\" unicode=\"&#xf0ab;\" \r\n-d=\"M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe\" unicode=\"&#xf0ac;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11\r\n-q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5\r\n-q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5\r\n-q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5\r\n-t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3\r\n-q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25\r\n-q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5\r\n-t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5\r\n-t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21\r\n-q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5\r\n-q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3\r\n-q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5\r\n-t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5\r\n-q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7\r\n-q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wrench\" unicode=\"&#xf0ad;\" horiz-adv-x=\"1664\" \r\n-d=\"M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5\r\n-t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tasks\" unicode=\"&#xf0ae;\" horiz-adv-x=\"1792\" \r\n-d=\"M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19\r\n-t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"filter\" unicode=\"&#xf0b0;\" horiz-adv-x=\"1408\" \r\n-d=\"M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"briefcase\" unicode=\"&#xf0b1;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68\r\n-t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fullscreen\" unicode=\"&#xf0b2;\" \r\n-d=\"M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144\r\n-l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"group\" unicode=\"&#xf0c0;\" horiz-adv-x=\"1920\" \r\n-d=\"M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5\r\n-t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75\r\n-t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5\r\n-t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"link\" unicode=\"&#xf0c1;\" horiz-adv-x=\"1664\" \r\n-d=\"M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26\r\n-l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15\r\n-t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207\r\n-q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud\" unicode=\"&#xf0c2;\" horiz-adv-x=\"1920\" \r\n-d=\"M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"beaker\" unicode=\"&#xf0c3;\" horiz-adv-x=\"1664\" \r\n-d=\"M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cut\" unicode=\"&#xf0c4;\" horiz-adv-x=\"1792\" \r\n-d=\"M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84\r\n-q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148\r\n-q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108\r\n-q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6\r\n-q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"1792\" \r\n-d=\"M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299\r\n-h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paper_clip\" unicode=\"&#xf0c6;\" horiz-adv-x=\"1408\" \r\n-d=\"M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181\r\n-l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" \r\n-d=\"M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5\r\n-h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sign_blank\" unicode=\"&#xf0c8;\" \r\n-d=\"M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reorder\" unicode=\"&#xf0c9;\" \r\n-d=\"M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45\r\n-t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ul\" unicode=\"&#xf0ca;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5\r\n-t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ol\" unicode=\"&#xf0cb;\" horiz-adv-x=\"1792\" \r\n-d=\"M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362\r\n-q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5\r\n-t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216\r\n-q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"strikethrough\" unicode=\"&#xf0cc;\" horiz-adv-x=\"1792\" \r\n-d=\"M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6\r\n-l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23\r\n-l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"underline\" unicode=\"&#xf0cd;\" \r\n-d=\"M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47\r\n-q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41\r\n-q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472\r\n-q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"table\" unicode=\"&#xf0ce;\" horiz-adv-x=\"1664\" \r\n-d=\"M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23\r\n-v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192\r\n-q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192\r\n-q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"magic\" unicode=\"&#xf0d0;\" horiz-adv-x=\"1664\" \r\n-d=\"M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276\r\n-l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck\" unicode=\"&#xf0d1;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5\r\n-t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38\r\n-t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pinterest\" unicode=\"&#xf0d2;\" \r\n-d=\"M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134\r\n-q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33\r\n-q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pinterest_sign\" unicode=\"&#xf0d3;\" \r\n-d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5\r\n-t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5\r\n-t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google_plus_sign\" unicode=\"&#xf0d4;\" \r\n-d=\"M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585\r\n-h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google_plus\" unicode=\"&#xf0d5;\" horiz-adv-x=\"2304\" \r\n-d=\"M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62\r\n-q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money\" unicode=\"&#xf0d6;\" horiz-adv-x=\"1920\" \r\n-d=\"M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384\r\n-v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret_down\" unicode=\"&#xf0d7;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret_up\" unicode=\"&#xf0d8;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret_left\" unicode=\"&#xf0d9;\" horiz-adv-x=\"640\" \r\n-d=\"M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret_right\" unicode=\"&#xf0da;\" horiz-adv-x=\"640\" \r\n-d=\"M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"columns\" unicode=\"&#xf0db;\" horiz-adv-x=\"1664\" \r\n-d=\"M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort\" unicode=\"&#xf0dc;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_down\" unicode=\"&#xf0dd;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_up\" unicode=\"&#xf0de;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope_alt\" unicode=\"&#xf0e0;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123\r\n-q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linkedin\" unicode=\"&#xf0e1;\" \r\n-d=\"M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329\r\n-q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"undo\" unicode=\"&#xf0e2;\" \r\n-d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5\r\n-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"legal\" unicode=\"&#xf0e3;\" horiz-adv-x=\"1792\" \r\n-d=\"M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5\r\n-t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14\r\n-q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28\r\n-q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dashboard\" unicode=\"&#xf0e4;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5\r\n-t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5\r\n-t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29\r\n-q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment_alt\" unicode=\"&#xf0e5;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640\r\n-q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5\r\n-t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comments_alt\" unicode=\"&#xf0e6;\" horiz-adv-x=\"1792\" \r\n-d=\"M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257\r\n-t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5\r\n-t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129\r\n-q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bolt\" unicode=\"&#xf0e7;\" horiz-adv-x=\"896\" \r\n-d=\"M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sitemap\" unicode=\"&#xf0e8;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320\r\n-q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"umbrella\" unicode=\"&#xf0e9;\" horiz-adv-x=\"1664\" \r\n-d=\"M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97\r\n-q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69\r\n-q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paste\" unicode=\"&#xf0ea;\" horiz-adv-x=\"1792\" \r\n-d=\"M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28\r\n-h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"light_bulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"1024\" \r\n-d=\"M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134\r\n-q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47\r\n-q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5\r\n-t186.5 -32.5t164 -89t117 -142t44.5 -184.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exchange\" unicode=\"&#xf0ec;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9\r\n-q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud_download\" unicode=\"&#xf0ed;\" horiz-adv-x=\"1920\" \r\n-d=\"M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088\r\n-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud_upload\" unicode=\"&#xf0ee;\" horiz-adv-x=\"1920\" \r\n-d=\"M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088\r\n-q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user_md\" unicode=\"&#xf0f0;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56\r\n-t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68\r\n-t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5\r\n-t271.5 -112.5t112.5 -271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stethoscope\" unicode=\"&#xf0f1;\" horiz-adv-x=\"1408\" \r\n-d=\"M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48\r\n-t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252\r\n-t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"suitcase\" unicode=\"&#xf0f2;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66\r\n-t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell_alt\" unicode=\"&#xf0f3;\" horiz-adv-x=\"1792\" \r\n-d=\"M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5\r\n-t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"coffee\" unicode=\"&#xf0f4;\" horiz-adv-x=\"1920\" \r\n-d=\"M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45\r\n-t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"food\" unicode=\"&#xf0f5;\" horiz-adv-x=\"1408\" \r\n-d=\"M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45\r\n-t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file_text_alt\" unicode=\"&#xf0f6;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704\r\n-q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf0f7;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\r\n-M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5\r\n-t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320\r\n-v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ambulance\" unicode=\"&#xf0f9;\" horiz-adv-x=\"1920\" \r\n-d=\"M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5\r\n-t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152\r\n-q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medkit\" unicode=\"&#xf0fa;\" horiz-adv-x=\"1792\" \r\n-d=\"M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32\r\n-q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fighter_jet\" unicode=\"&#xf0fb;\" horiz-adv-x=\"1920\" \r\n-d=\"M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96\r\n-q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"beer\" unicode=\"&#xf0fc;\" horiz-adv-x=\"1664\" \r\n-d=\"M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"h_sign\" unicode=\"&#xf0fd;\" \r\n-d=\"M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f0fe\" unicode=\"&#xf0fe;\" \r\n-d=\"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"double_angle_left\" unicode=\"&#xf100;\" horiz-adv-x=\"1024\" \r\n-d=\"M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23\r\n-t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"double_angle_right\" unicode=\"&#xf101;\" horiz-adv-x=\"1024\" \r\n-d=\"M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23\r\n-l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"double_angle_up\" unicode=\"&#xf102;\" horiz-adv-x=\"1152\" \r\n-d=\"M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393\r\n-q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"double_angle_down\" unicode=\"&#xf103;\" horiz-adv-x=\"1152\" \r\n-d=\"M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23\r\n-t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle_left\" unicode=\"&#xf104;\" horiz-adv-x=\"640\" \r\n-d=\"M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle_right\" unicode=\"&#xf105;\" horiz-adv-x=\"640\" \r\n-d=\"M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle_up\" unicode=\"&#xf106;\" horiz-adv-x=\"1152\" \r\n-d=\"M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle_down\" unicode=\"&#xf107;\" horiz-adv-x=\"1152\" \r\n-d=\"M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"desktop\" unicode=\"&#xf108;\" horiz-adv-x=\"1920\" \r\n-d=\"M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19\r\n-t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laptop\" unicode=\"&#xf109;\" horiz-adv-x=\"1920\" \r\n-d=\"M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z\r\n-M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tablet\" unicode=\"&#xf10a;\" horiz-adv-x=\"1152\" \r\n-d=\"M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832\r\n-q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mobile_phone\" unicode=\"&#xf10b;\" horiz-adv-x=\"768\" \r\n-d=\"M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136\r\n-q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle_blank\" unicode=\"&#xf10c;\" \r\n-d=\"M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103\r\n-t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quote_left\" unicode=\"&#xf10d;\" horiz-adv-x=\"1664\" \r\n-d=\"M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z\r\n-M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quote_right\" unicode=\"&#xf10e;\" horiz-adv-x=\"1664\" \r\n-d=\"M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216\r\n-v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spinner\" unicode=\"&#xf110;\" horiz-adv-x=\"1792\" \r\n-d=\"M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5\r\n-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z\r\n-M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5\r\n-q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \r\n-d=\"M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reply\" unicode=\"&#xf112;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19\r\n-l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github_alt\" unicode=\"&#xf113;\" horiz-adv-x=\"1664\" \r\n-d=\"M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320\r\n-q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86\r\n-t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218\r\n-q0 -87 -27 -168q136 -160 136 -398z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder_close_alt\" unicode=\"&#xf114;\" horiz-adv-x=\"1664\" \r\n-d=\"M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320\r\n-q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder_open_alt\" unicode=\"&#xf115;\" horiz-adv-x=\"1920\" \r\n-d=\"M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68\r\n-v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"expand_alt\" unicode=\"&#xf116;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"collapse_alt\" unicode=\"&#xf117;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" \r\n-d=\"M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\r\n-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5\r\n-t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" \r\n-d=\"M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\r\n-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204\r\n-t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" \r\n-d=\"M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\r\n-t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gamepad\" unicode=\"&#xf11b;\" horiz-adv-x=\"1920\" \r\n-d=\"M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5\r\n-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150\r\n-t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"1920\" \r\n-d=\"M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16\r\n-h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16\r\n-h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96\r\n-q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896\r\n-h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag_alt\" unicode=\"&#xf11d;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9\r\n-h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102\r\n-q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag_checkered\" unicode=\"&#xf11e;\" horiz-adv-x=\"1792\" \r\n-d=\"M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2\r\n-q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266\r\n-q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8\r\n-q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"terminal\" unicode=\"&#xf120;\" horiz-adv-x=\"1664\" \r\n-d=\"M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9\r\n-t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"code\" unicode=\"&#xf121;\" horiz-adv-x=\"1920\" \r\n-d=\"M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5\r\n-l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reply_all\" unicode=\"&#xf122;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1\r\n-q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star_half_empty\" unicode=\"&#xf123;\" horiz-adv-x=\"1664\" \r\n-d=\"M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5\r\n-l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"location_arrow\" unicode=\"&#xf124;\" horiz-adv-x=\"1408\" \r\n-d=\"M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crop\" unicode=\"&#xf125;\" horiz-adv-x=\"1664\" \r\n-d=\"M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23\r\n-v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"code_fork\" unicode=\"&#xf126;\" horiz-adv-x=\"1024\" \r\n-d=\"M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5\r\n-q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497\r\n-q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlink\" unicode=\"&#xf127;\" horiz-adv-x=\"1664\" \r\n-d=\"M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320\r\n-q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18\r\n-l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9\r\n-t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"question\" unicode=\"&#xf128;\" horiz-adv-x=\"1024\" \r\n-d=\"M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5\r\n-t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_279\" unicode=\"&#xf129;\" horiz-adv-x=\"640\" \r\n-d=\"M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192\r\n-q0 26 19 45t45 19h256q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exclamation\" unicode=\"&#xf12a;\" horiz-adv-x=\"640\" \r\n-d=\"M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"superscript\" unicode=\"&#xf12b;\" \r\n-d=\"M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z\r\n-M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5\r\n-t-65.5 -51.5t-30.5 -63h232v80h126z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"subscript\" unicode=\"&#xf12c;\" \r\n-d=\"M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z\r\n-M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73\r\n-h232v80h126z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_283\" unicode=\"&#xf12d;\" horiz-adv-x=\"1920\" \r\n-d=\"M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"puzzle_piece\" unicode=\"&#xf12e;\" horiz-adv-x=\"1664\" \r\n-d=\"M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5\r\n-t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89\r\n-q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117\r\n-q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone\" unicode=\"&#xf130;\" horiz-adv-x=\"1152\" \r\n-d=\"M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5\r\n-t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone_off\" unicode=\"&#xf131;\" horiz-adv-x=\"1408\" \r\n-d=\"M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128\r\n-q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23\r\n-t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shield\" unicode=\"&#xf132;\" horiz-adv-x=\"1280\" \r\n-d=\"M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150\r\n-t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar_empty\" unicode=\"&#xf133;\" horiz-adv-x=\"1664\" \r\n-d=\"M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280\r\n-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fire_extinguisher\" unicode=\"&#xf134;\" horiz-adv-x=\"1408\" \r\n-d=\"M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800\r\n-q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113\r\n-q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rocket\" unicode=\"&#xf135;\" horiz-adv-x=\"1664\" \r\n-d=\"M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1\r\n-q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"maxcdn\" unicode=\"&#xf136;\" horiz-adv-x=\"1792\" \r\n-d=\"M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_sign_left\" unicode=\"&#xf137;\" \r\n-d=\"M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\r\n-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_sign_right\" unicode=\"&#xf138;\" \r\n-d=\"M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\r\n-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_sign_up\" unicode=\"&#xf139;\" \r\n-d=\"M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\r\n-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron_sign_down\" unicode=\"&#xf13a;\" \r\n-d=\"M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\r\n-t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"html5\" unicode=\"&#xf13b;\" horiz-adv-x=\"1408\" \r\n-d=\"M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"css3\" unicode=\"&#xf13c;\" horiz-adv-x=\"1792\" \r\n-d=\"M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"anchor\" unicode=\"&#xf13d;\" horiz-adv-x=\"1792\" \r\n-d=\"M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352\r\n-q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19\r\n-t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlock_alt\" unicode=\"&#xf13e;\" horiz-adv-x=\"1152\" \r\n-d=\"M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181\r\n-v-320h736z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bullseye\" unicode=\"&#xf140;\" \r\n-d=\"M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150\r\n-t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640\r\n-q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ellipsis_horizontal\" unicode=\"&#xf141;\" horiz-adv-x=\"1408\" \r\n-d=\"M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192\r\n-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ellipsis_vertical\" unicode=\"&#xf142;\" horiz-adv-x=\"384\" \r\n-d=\"M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192\r\n-q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_303\" unicode=\"&#xf143;\" \r\n-d=\"M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128\r\n-q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play_sign\" unicode=\"&#xf144;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56\r\n-q16 -8 32 -8q17 0 32 9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ticket\" unicode=\"&#xf145;\" horiz-adv-x=\"1792\" \r\n-d=\"M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136\r\n-t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus_sign_alt\" unicode=\"&#xf146;\" \r\n-d=\"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\r\n-t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check_minus\" unicode=\"&#xf147;\" horiz-adv-x=\"1408\" \r\n-d=\"M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5\r\n-t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"level_up\" unicode=\"&#xf148;\" horiz-adv-x=\"1024\" \r\n-d=\"M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"level_down\" unicode=\"&#xf149;\" horiz-adv-x=\"1024\" \r\n-d=\"M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check_sign\" unicode=\"&#xf14a;\" \r\n-d=\"M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5\r\n-t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"edit_sign\" unicode=\"&#xf14b;\" \r\n-d=\"M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120\r\n-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_312\" unicode=\"&#xf14c;\" \r\n-d=\"M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960\r\n-q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share_sign\" unicode=\"&#xf14d;\" \r\n-d=\"M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5\r\n-t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" \r\n-d=\"M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\r\n-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"collapse\" unicode=\"&#xf150;\" \r\n-d=\"M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120\r\n-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"collapse_top\" unicode=\"&#xf151;\" \r\n-d=\"M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_317\" unicode=\"&#xf152;\" \r\n-d=\"M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5\r\n-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eur\" unicode=\"&#xf153;\" horiz-adv-x=\"1024\" \r\n-d=\"M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9\r\n-t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26\r\n-l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gbp\" unicode=\"&#xf154;\" horiz-adv-x=\"1024\" \r\n-d=\"M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7\r\n-q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"usd\" unicode=\"&#xf155;\" horiz-adv-x=\"1024\" \r\n-d=\"M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43\r\n-t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5\r\n-t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50\r\n-t53 -63.5t31.5 -76.5t13 -94z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"inr\" unicode=\"&#xf156;\" horiz-adv-x=\"898\" \r\n-d=\"M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102\r\n-q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jpy\" unicode=\"&#xf157;\" horiz-adv-x=\"1027\" \r\n-d=\"M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61\r\n-l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rub\" unicode=\"&#xf158;\" horiz-adv-x=\"1280\" \r\n-d=\"M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128\r\n-q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"krw\" unicode=\"&#xf159;\" horiz-adv-x=\"1792\" \r\n-d=\"M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23\r\n-t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28\r\n-q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"btc\" unicode=\"&#xf15a;\" horiz-adv-x=\"1280\" \r\n-d=\"M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164\r\n-l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30\r\n-t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" \r\n-d=\"M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file_text\" unicode=\"&#xf15c;\" \r\n-d=\"M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704\r\n-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_by_alphabet\" unicode=\"&#xf15d;\" horiz-adv-x=\"1664\" \r\n-d=\"M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23\r\n-v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162\r\n-l230 -662h70z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_329\" unicode=\"&#xf15e;\" horiz-adv-x=\"1664\" \r\n-d=\"M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150\r\n-v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248\r\n-v119h121z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_by_attributes\" unicode=\"&#xf160;\" horiz-adv-x=\"1792\" \r\n-d=\"M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832\r\n-q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256\r\n-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_by_attributes_alt\" unicode=\"&#xf161;\" horiz-adv-x=\"1792\" \r\n-d=\"M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192\r\n-q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832\r\n-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_by_order\" unicode=\"&#xf162;\" \r\n-d=\"M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23\r\n-zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5\r\n-t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort_by_order_alt\" unicode=\"&#xf163;\" \r\n-d=\"M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9\r\n-t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13\r\n-q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_334\" unicode=\"&#xf164;\" horiz-adv-x=\"1664\" \r\n-d=\"M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76\r\n-q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5\r\n-t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_335\" unicode=\"&#xf165;\" horiz-adv-x=\"1664\" \r\n-d=\"M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135\r\n-t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121\r\n-t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"youtube_sign\" unicode=\"&#xf166;\" \r\n-d=\"M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15\r\n-q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38\r\n-q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5\r\n-q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38\r\n-q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5\r\n-h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"youtube\" unicode=\"&#xf167;\" \r\n-d=\"M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73\r\n-q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51\r\n-q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99\r\n-q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51\r\n-q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"xing\" unicode=\"&#xf168;\" horiz-adv-x=\"1408\" \r\n-d=\"M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942\r\n-q25 45 64 45h241q22 0 31 -15z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"xing_sign\" unicode=\"&#xf169;\" \r\n-d=\"M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1\r\n-l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"youtube_play\" unicode=\"&#xf16a;\" horiz-adv-x=\"1792\" \r\n-d=\"M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5\r\n-l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136\r\n-q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dropbox\" unicode=\"&#xf16b;\" horiz-adv-x=\"1792\" \r\n-d=\"M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stackexchange\" unicode=\"&#xf16c;\" \r\n-d=\"M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"instagram\" unicode=\"&#xf16d;\" \r\n-d=\"M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270\r\n-q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5\r\n-t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317\r\n-q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flickr\" unicode=\"&#xf16e;\" \r\n-d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150\r\n-t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adn\" unicode=\"&#xf170;\" \r\n-d=\"M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f171\" unicode=\"&#xf171;\" horiz-adv-x=\"1408\" \r\n-d=\"M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22\r\n-t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18\r\n-t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5\r\n-t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bitbucket_sign\" unicode=\"&#xf172;\" \r\n-d=\"M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5\r\n-t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z\r\n-M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120\r\n-v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tumblr\" unicode=\"&#xf173;\" horiz-adv-x=\"1024\" \r\n-d=\"M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14\r\n-q78 2 134 29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tumblr_sign\" unicode=\"&#xf174;\" \r\n-d=\"M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z\r\n-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long_arrow_down\" unicode=\"&#xf175;\" horiz-adv-x=\"768\" \r\n-d=\"M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long_arrow_up\" unicode=\"&#xf176;\" horiz-adv-x=\"768\" \r\n-d=\"M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long_arrow_left\" unicode=\"&#xf177;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long_arrow_right\" unicode=\"&#xf178;\" horiz-adv-x=\"1792\" \r\n-d=\"M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"apple\" unicode=\"&#xf179;\" horiz-adv-x=\"1408\" \r\n-d=\"M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65\r\n-q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"windows\" unicode=\"&#xf17a;\" horiz-adv-x=\"1664\" \r\n-d=\"M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"android\" unicode=\"&#xf17b;\" horiz-adv-x=\"1408\" \r\n-d=\"M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30\r\n-t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5\r\n-h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linux\" unicode=\"&#xf17c;\" \r\n-d=\"M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z\r\n-M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7\r\n-q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15\r\n-q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5\r\n-t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19\r\n-q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63\r\n-q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92\r\n-q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152\r\n-q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4\r\n-t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5\r\n-t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43\r\n-q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49\r\n-t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54\r\n-q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5\r\n-t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5\r\n-t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dribble\" unicode=\"&#xf17d;\" \r\n-d=\"M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81\r\n-t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19\r\n-q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6\r\n-t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skype\" unicode=\"&#xf17e;\" \r\n-d=\"M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5\r\n-t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5\r\n-q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80\r\n-q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"foursquare\" unicode=\"&#xf180;\" horiz-adv-x=\"1280\" \r\n-d=\"M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z\r\n-M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324\r\n-l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trello\" unicode=\"&#xf181;\" \r\n-d=\"M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408\r\n-q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"female\" unicode=\"&#xf182;\" horiz-adv-x=\"1280\" \r\n-d=\"M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43\r\n-q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"male\" unicode=\"&#xf183;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z\r\n-M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gittip\" unicode=\"&#xf184;\" \r\n-d=\"M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\r\n-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" horiz-adv-x=\"1792\" \r\n-d=\"M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4\r\n-l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94\r\n-q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_366\" unicode=\"&#xf186;\" \r\n-d=\"M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61\r\n-t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"archive\" unicode=\"&#xf187;\" horiz-adv-x=\"1792\" \r\n-d=\"M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536\r\n-q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bug\" unicode=\"&#xf188;\" horiz-adv-x=\"1664\" \r\n-d=\"M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207\r\n-q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19\r\n-t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vk\" unicode=\"&#xf189;\" horiz-adv-x=\"1920\" \r\n-d=\"M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58\r\n-t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6\r\n-q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24\r\n-q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2\r\n-q39 5 64 -2.5t31 -16.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weibo\" unicode=\"&#xf18a;\" horiz-adv-x=\"1792\" \r\n-d=\"M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12\r\n-q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422\r\n-q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178\r\n-q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z\r\n-M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"renren\" unicode=\"&#xf18b;\" \r\n-d=\"M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495\r\n-q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_372\" unicode=\"&#xf18c;\" horiz-adv-x=\"1408\" \r\n-d=\"M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5\r\n-t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56\r\n-t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5\r\n-t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stack_exchange\" unicode=\"&#xf18d;\" horiz-adv-x=\"1280\" \r\n-d=\"M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_374\" unicode=\"&#xf18e;\" \r\n-d=\"M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198\r\n-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow_circle_alt_left\" unicode=\"&#xf190;\" \r\n-d=\"M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198\r\n-t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_376\" unicode=\"&#xf191;\" \r\n-d=\"M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z\r\n-M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dot_circle_alt\" unicode=\"&#xf192;\" \r\n-d=\"M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5\r\n-t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_378\" unicode=\"&#xf193;\" horiz-adv-x=\"1664\" \r\n-d=\"M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128\r\n-q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vimeo_square\" unicode=\"&#xf194;\" \r\n-d=\"M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179\r\n-q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_380\" unicode=\"&#xf195;\" horiz-adv-x=\"1152\" \r\n-d=\"M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160\r\n-q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus_square_o\" unicode=\"&#xf196;\" horiz-adv-x=\"1408\" \r\n-d=\"M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832\r\n-q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_382\" unicode=\"&#xf197;\" horiz-adv-x=\"2176\" \r\n-d=\"M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40\r\n-t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29\r\n-q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_383\" unicode=\"&#xf198;\" horiz-adv-x=\"1664\" \r\n-d=\"M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9\r\n-q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102\r\n-t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_384\" unicode=\"&#xf199;\" \r\n-d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69\r\n-q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13\r\n-t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_385\" unicode=\"&#xf19a;\" horiz-adv-x=\"1792\" \r\n-d=\"M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5\r\n-t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21\r\n-t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286\r\n-t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273\r\n-t273 -182.5t331.5 -68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_386\" unicode=\"&#xf19b;\" horiz-adv-x=\"1792\" \r\n-d=\"M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_387\" unicode=\"&#xf19c;\" horiz-adv-x=\"2048\" \r\n-d=\"M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64\r\n-q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_388\" unicode=\"&#xf19d;\" horiz-adv-x=\"2304\" \r\n-d=\"M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433\r\n-q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_389\" unicode=\"&#xf19e;\" \r\n-d=\"M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0\r\n-q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1A0\" unicode=\"&#xf1a0;\" \r\n-d=\"M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5\r\n-t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f1a1\" unicode=\"&#xf1a1;\" horiz-adv-x=\"1792\" \r\n-d=\"M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26\r\n-t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37\r\n-q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191\r\n-t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_392\" unicode=\"&#xf1a2;\" \r\n-d=\"M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54\r\n-q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83\r\n-q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960\r\n-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_393\" unicode=\"&#xf1a3;\" \r\n-d=\"M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150\r\n-v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103\r\n-t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f1a4\" unicode=\"&#xf1a4;\" horiz-adv-x=\"1920\" \r\n-d=\"M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328\r\n-v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_395\" unicode=\"&#xf1a5;\" \r\n-d=\"M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\r\n-t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_396\" unicode=\"&#xf1a6;\" horiz-adv-x=\"2048\" \r\n-d=\"M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123\r\n-v-369h123z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_397\" unicode=\"&#xf1a7;\" \r\n-d=\"M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101\r\n-v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960\r\n-q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_398\" unicode=\"&#xf1a8;\" horiz-adv-x=\"2038\" \r\n-d=\"M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14\r\n-q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24\r\n-q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33\r\n-q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5\r\n-t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43\r\n-q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5\r\n-t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13\r\n-t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_399\" unicode=\"&#xf1a9;\" \r\n-d=\"M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10\r\n-q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14\r\n-q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14\r\n-t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44\r\n-q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_400\" unicode=\"&#xf1aa;\" \r\n-d=\"M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z\r\n-M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5\r\n-t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5\r\n-q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126\r\n-t135.5 51q85 0 145 -60.5t60 -145.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f1ab\" unicode=\"&#xf1ab;\" \r\n-d=\"M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5\r\n-q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28\r\n-q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z\r\n-M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11\r\n-q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5\r\n-q20 0 20 -21v-418z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_402\" unicode=\"&#xf1ac;\" horiz-adv-x=\"1792\" \r\n-d=\"M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48\r\n-l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23\r\n-t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128\r\n-q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128\r\n-q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_403\" unicode=\"&#xf1ad;\" \r\n-d=\"M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9\r\n-t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64\r\n-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64\r\n-q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9\r\n-t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64\r\n-q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64\r\n-q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9\r\n-t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_404\" unicode=\"&#xf1ae;\" horiz-adv-x=\"1280\" \r\n-d=\"M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152\r\n-q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1B1\" unicode=\"&#xf1b0;\" horiz-adv-x=\"1664\" \r\n-d=\"M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5\r\n-q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819\r\n-q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5\r\n-t100.5 134t141.5 55.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_406\" unicode=\"&#xf1b1;\" horiz-adv-x=\"768\" \r\n-d=\"M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_407\" unicode=\"&#xf1b2;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_408\" unicode=\"&#xf1b3;\" horiz-adv-x=\"2304\" \r\n-d=\"M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67\r\n-t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70\r\n-v-400l434 -186q36 -16 57 -48t21 -70z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_409\" unicode=\"&#xf1b4;\" horiz-adv-x=\"2048\" \r\n-d=\"M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658\r\n-q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204\r\n-q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_410\" unicode=\"&#xf1b5;\" \r\n-d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5\r\n-t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217\r\n-t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_411\" unicode=\"&#xf1b6;\" horiz-adv-x=\"1792\" \r\n-d=\"M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5\r\n-q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89\r\n-q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_412\" unicode=\"&#xf1b7;\" \r\n-d=\"M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5\r\n-q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5\r\n-q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_413\" unicode=\"&#xf1b8;\" horiz-adv-x=\"1792\" \r\n-d=\"M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188\r\n-l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5\r\n-t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1\r\n-q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_414\" unicode=\"&#xf1b9;\" horiz-adv-x=\"2048\" \r\n-d=\"M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384\r\n-q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5\r\n-l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_415\" unicode=\"&#xf1ba;\" horiz-adv-x=\"2048\" \r\n-d=\"M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5\r\n-t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z\r\n-M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_416\" unicode=\"&#xf1bb;\" \r\n-d=\"M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384\r\n-q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_417\" unicode=\"&#xf1bc;\" \r\n-d=\"M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64\r\n-q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37\r\n-q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_418\" unicode=\"&#xf1bd;\" horiz-adv-x=\"1024\" \r\n-d=\"M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_419\" unicode=\"&#xf1be;\" horiz-adv-x=\"2304\" \r\n-d=\"M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11\r\n-q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245\r\n-q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785\r\n-l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242\r\n-q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236\r\n-q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786\r\n-q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1C0\" unicode=\"&#xf1c0;\" \r\n-d=\"M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127\r\n-t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5\r\n-t-103 128v128q0 69 103 128t280 93.5t385 34.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1C1\" unicode=\"&#xf1c1;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197\r\n-q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8\r\n-q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_422\" unicode=\"&#xf1c2;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5\r\n-t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_423\" unicode=\"&#xf1c3;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107\r\n-h-290v-107h68l189 -272l-194 -283h-68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_424\" unicode=\"&#xf1c4;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_425\" unicode=\"&#xf1c5;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_426\" unicode=\"&#xf1c6;\" \r\n-d=\"M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400\r\n-v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79\r\n-q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_427\" unicode=\"&#xf1c7;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5\r\n-q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_428\" unicode=\"&#xf1c8;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_429\" unicode=\"&#xf1c9;\" \r\n-d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\r\n-M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243\r\n-l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_430\" unicode=\"&#xf1ca;\" \r\n-d=\"M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406\r\n-q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_431\" unicode=\"&#xf1cb;\" horiz-adv-x=\"1792\" \r\n-d=\"M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546\r\n-q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_432\" unicode=\"&#xf1cc;\" horiz-adv-x=\"2048\" \r\n-d=\"M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94\r\n-q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55\r\n-t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_433\" unicode=\"&#xf1cd;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194\r\n-q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5\r\n-t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_434\" unicode=\"&#xf1ce;\" horiz-adv-x=\"1792\" \r\n-d=\"M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5\r\n-t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D0\" unicode=\"&#xf1d0;\" horiz-adv-x=\"1792\" \r\n-d=\"M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41\r\n-t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170\r\n-t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136\r\n-q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D1\" unicode=\"&#xf1d1;\" horiz-adv-x=\"1792\" \r\n-d=\"M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251\r\n-l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162\r\n-q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33\r\n-q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5\r\n-t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71\r\n-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D2\" unicode=\"&#xf1d2;\" \r\n-d=\"M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85\r\n-q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392\r\n-q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072\r\n-q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_438\" unicode=\"&#xf1d3;\" horiz-adv-x=\"1792\" \r\n-d=\"M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58\r\n-q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47\r\n-q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171\r\n-v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_439\" unicode=\"&#xf1d4;\" \r\n-d=\"M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D5\" unicode=\"&#xf1d5;\" horiz-adv-x=\"1280\" \r\n-d=\"M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5\r\n-t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153\r\n-t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D6\" unicode=\"&#xf1d6;\" horiz-adv-x=\"1792\" \r\n-d=\"M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5\r\n-q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20\r\n-t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5\r\n-t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1D7\" unicode=\"&#xf1d7;\" horiz-adv-x=\"2048\" \r\n-d=\"M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25\r\n-q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5\r\n-q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109\r\n-q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_443\" unicode=\"&#xf1d8;\" horiz-adv-x=\"1792\" \r\n-d=\"M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_444\" unicode=\"&#xf1d9;\" horiz-adv-x=\"1792\" \r\n-d=\"M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137\r\n-l863 639l-478 -797z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_445\" unicode=\"&#xf1da;\" \r\n-d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5\r\n-t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23\r\n-t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_446\" unicode=\"&#xf1db;\" \r\n-d=\"M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\r\n-t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_447\" unicode=\"&#xf1dc;\" horiz-adv-x=\"1792\" \r\n-d=\"M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15\r\n-t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2\r\n-t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160\r\n-q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5\r\n-q0 -26 -12 -48t-36 -22z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_448\" unicode=\"&#xf1dd;\" horiz-adv-x=\"1280\" \r\n-d=\"M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179\r\n-q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_449\" unicode=\"&#xf1de;\" \r\n-d=\"M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256\r\n-q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1E0\" unicode=\"&#xf1e0;\" \r\n-d=\"M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5\r\n-t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_451\" unicode=\"&#xf1e1;\" \r\n-d=\"M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5\r\n-t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_452\" unicode=\"&#xf1e2;\" horiz-adv-x=\"1792\" \r\n-d=\"M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5\r\n-t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91\r\n-q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9\r\n-t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_453\" unicode=\"&#xf1e3;\" horiz-adv-x=\"1792\" \r\n-d=\"M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323\r\n-l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_454\" unicode=\"&#xf1e4;\" horiz-adv-x=\"1792\" \r\n-d=\"M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23\r\n-v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192\r\n-q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23\r\n-zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5\r\n-t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_455\" unicode=\"&#xf1e5;\" horiz-adv-x=\"1792\" \r\n-d=\"M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z\r\n-M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_456\" unicode=\"&#xf1e6;\" horiz-adv-x=\"1792\" \r\n-d=\"M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234\r\n-l401 400q38 37 91 37t90 -37z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_457\" unicode=\"&#xf1e7;\" horiz-adv-x=\"1792\" \r\n-d=\"M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5\r\n-t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z\r\n-M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7\r\n-t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_458\" unicode=\"&#xf1e8;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_459\" unicode=\"&#xf1e9;\" \r\n-d=\"M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36\r\n-q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5\r\n-t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87\r\n-q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_460\" unicode=\"&#xf1ea;\" horiz-adv-x=\"2048\" \r\n-d=\"M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19\r\n-t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_461\" unicode=\"&#xf1eb;\" horiz-adv-x=\"2048\" \r\n-d=\"M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121\r\n-q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z\r\n-M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_462\" unicode=\"&#xf1ec;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5\r\n-t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5\r\n-t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5\r\n-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z\r\n-M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38\r\n-h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_463\" unicode=\"&#xf1ed;\" \r\n-d=\"M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246\r\n-q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598\r\n-q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_464\" unicode=\"&#xf1ee;\" horiz-adv-x=\"1792\" \r\n-d=\"M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640\r\n-q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF1F0\" unicode=\"&#xf1f0;\" horiz-adv-x=\"2304\" \r\n-d=\"M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27\r\n-q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128\r\n-q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_466\" unicode=\"&#xf1f1;\" horiz-adv-x=\"2304\" \r\n-d=\"M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249\r\n-q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z\r\n-M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32\r\n-h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4\r\n-q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75\r\n-q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14\r\n-q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22\r\n-q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12\r\n-q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122\r\n-h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5\r\n-t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_467\" unicode=\"&#xf1f2;\" horiz-adv-x=\"2304\" \r\n-d=\"M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42\r\n-q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604\r\n-v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569\r\n-q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73\r\n-t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f1f3\" unicode=\"&#xf1f3;\" horiz-adv-x=\"2304\" \r\n-d=\"M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z\r\n-M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260\r\n-l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279\r\n-v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040\r\n-q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168\r\n-q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5\r\n-t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21\r\n-h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5\r\n-t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_469\" unicode=\"&#xf1f4;\" horiz-adv-x=\"2304\" \r\n-d=\"M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16\r\n-t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76\r\n-q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59\r\n-t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489\r\n-l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66\r\n-q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_470\" unicode=\"&#xf1f5;\" horiz-adv-x=\"2304\" \r\n-d=\"M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109\r\n-q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118\r\n-q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151\r\n-q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31\r\n-q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_471\" unicode=\"&#xf1f6;\" horiz-adv-x=\"2048\" \r\n-d=\"M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5\r\n-l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5\r\n-l418 363q10 8 23.5 7t21.5 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_472\" unicode=\"&#xf1f7;\" horiz-adv-x=\"2048\" \r\n-d=\"M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128\r\n-q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161\r\n-q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_473\" unicode=\"&#xf1f8;\" horiz-adv-x=\"1408\" \r\n-d=\"M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704\r\n-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167\r\n-q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_474\" unicode=\"&#xf1f9;\" \r\n-d=\"M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5\r\n-t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5\r\n-t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_475\" unicode=\"&#xf1fa;\" \r\n-d=\"M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53\r\n-q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24\r\n-t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61\r\n-t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_476\" unicode=\"&#xf1fb;\" horiz-adv-x=\"1792\" \r\n-d=\"M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10\r\n-t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f1fc\" unicode=\"&#xf1fc;\" horiz-adv-x=\"1792\" \r\n-d=\"M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5\r\n-t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_478\" unicode=\"&#xf1fd;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5\r\n-t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38\r\n-t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448\r\n-h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5\r\n-q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_479\" unicode=\"&#xf1fe;\" horiz-adv-x=\"2048\" \r\n-d=\"M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_480\" unicode=\"&#xf200;\" horiz-adv-x=\"1792\" \r\n-d=\"M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_481\" unicode=\"&#xf201;\" horiz-adv-x=\"2048\" \r\n-d=\"M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9\r\n-t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_482\" unicode=\"&#xf202;\" horiz-adv-x=\"1792\" \r\n-d=\"M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20\r\n-q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50\r\n-t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1\r\n-q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_483\" unicode=\"&#xf203;\" \r\n-d=\"M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73\r\n-q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110\r\n-q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960\r\n-q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_484\" unicode=\"&#xf204;\" horiz-adv-x=\"2048\" \r\n-d=\"M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5\r\n-t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5\r\n-t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_485\" unicode=\"&#xf205;\" horiz-adv-x=\"2048\" \r\n-d=\"M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5\r\n-t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_486\" unicode=\"&#xf206;\" horiz-adv-x=\"2304\" \r\n-d=\"M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94\r\n-q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469\r\n-q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400\r\n-q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_487\" unicode=\"&#xf207;\" \r\n-d=\"M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5\r\n-h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\r\n-t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_488\" unicode=\"&#xf208;\" horiz-adv-x=\"2048\" \r\n-d=\"M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327\r\n-q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5\r\n-q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_489\" unicode=\"&#xf209;\" horiz-adv-x=\"1280\" \r\n-d=\"M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119\r\n-t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5\r\n-t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14\r\n-q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88\r\n-q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5\r\n-t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_490\" unicode=\"&#xf20a;\" horiz-adv-x=\"2048\" \r\n-d=\"M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206\r\n-q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307\r\n-t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14\r\n-t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_491\" unicode=\"&#xf20b;\" \r\n-d=\"M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5\r\n-t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_492\" unicode=\"&#xf20c;\" \r\n-d=\"M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55\r\n-q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410\r\n-q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_493\" unicode=\"&#xf20d;\" \r\n-d=\"M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_494\" unicode=\"&#xf20e;\" horiz-adv-x=\"2048\" \r\n-d=\"M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335\r\n-q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5\r\n-q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438\r\n-h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66\r\n-l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946\r\n-l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82\r\n-zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f210\" unicode=\"&#xf210;\" \r\n-d=\"M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_496\" unicode=\"&#xf211;\" \r\n-d=\"M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384\r\n-q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f212\" unicode=\"&#xf212;\" horiz-adv-x=\"2048\" \r\n-d=\"M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021\r\n-q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25\r\n-q209 0 374 -102q172 107 374 102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_498\" unicode=\"&#xf213;\" horiz-adv-x=\"2048\" \r\n-d=\"M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101\r\n-q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284\r\n-q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_499\" unicode=\"&#xf214;\" \r\n-d=\"M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34\r\n-l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114\r\n-v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z\r\n-M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378\r\n-v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51\r\n-h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5\r\n-t-43 -34t-16.5 -53.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_500\" unicode=\"&#xf215;\" horiz-adv-x=\"2048\" \r\n-d=\"M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832\r\n-q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_501\" unicode=\"&#xf216;\" horiz-adv-x=\"2048\" \r\n-d=\"M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5\r\n-t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113\r\n-t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5\r\n-q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_502\" unicode=\"&#xf217;\" horiz-adv-x=\"1664\" \r\n-d=\"M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\r\n-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920\r\n-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_503\" unicode=\"&#xf218;\" horiz-adv-x=\"1664\" \r\n-d=\"M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\r\n-t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920\r\n-q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_504\" unicode=\"&#xf219;\" horiz-adv-x=\"2048\" \r\n-d=\"M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20\r\n-l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_505\" unicode=\"&#xf21a;\" horiz-adv-x=\"2048\" \r\n-d=\"M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83\r\n-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83\r\n-q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314\r\n-v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83\r\n-q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_506\" unicode=\"&#xf21b;\" \r\n-d=\"M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14\r\n-t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5\r\n-q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31\r\n-t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_507\" unicode=\"&#xf21c;\" horiz-adv-x=\"2304\" \r\n-d=\"M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5\r\n-t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105\r\n-l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226\r\n-t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_508\" unicode=\"&#xf21d;\" \r\n-d=\"M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12\r\n-q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384\r\n-q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5\r\n-t158.5 -65.5t65.5 -158.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_509\" unicode=\"&#xf21e;\" horiz-adv-x=\"1792\" \r\n-d=\"M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221\r\n-q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124\r\n-t127 -344z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"venus\" unicode=\"&#xf221;\" horiz-adv-x=\"1280\" \r\n-d=\"M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292\r\n-q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_511\" unicode=\"&#xf222;\" \r\n-d=\"M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5\r\n-q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_512\" unicode=\"&#xf223;\" horiz-adv-x=\"1280\" \r\n-d=\"M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5\r\n-t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\r\n-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_513\" unicode=\"&#xf224;\" \r\n-d=\"M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64\r\n-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\r\n-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_514\" unicode=\"&#xf225;\" horiz-adv-x=\"1792\" \r\n-d=\"M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64\r\n-q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9\r\n-t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5\r\n-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_515\" unicode=\"&#xf226;\" horiz-adv-x=\"1792\" \r\n-d=\"M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23\r\n-t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391\r\n-q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391\r\n-q0 -226 -154 -391q103 -57 218 -57z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_516\" unicode=\"&#xf227;\" horiz-adv-x=\"1920\" \r\n-d=\"M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230\r\n-q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9\r\n-t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128\r\n-q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_517\" unicode=\"&#xf228;\" horiz-adv-x=\"2048\" \r\n-d=\"M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23\r\n-t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9\r\n-t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5\r\n-t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_518\" unicode=\"&#xf229;\" \r\n-d=\"M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5\r\n-t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\r\n-t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_519\" unicode=\"&#xf22a;\" horiz-adv-x=\"1280\" \r\n-d=\"M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22\r\n-t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5\r\n-t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_520\" unicode=\"&#xf22b;\" horiz-adv-x=\"2048\" \r\n-d=\"M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5\r\n-t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5\r\n-t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_521\" unicode=\"&#xf22c;\" horiz-adv-x=\"1280\" \r\n-d=\"M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5\r\n-t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_522\" unicode=\"&#xf22d;\" horiz-adv-x=\"1280\" \r\n-d=\"M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123\r\n-t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_523\" unicode=\"&#xf22e;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"_524\" unicode=\"&#xf22f;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"_525\" unicode=\"&#xf230;\" \r\n-d=\"M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_526\" unicode=\"&#xf231;\" horiz-adv-x=\"1280\" \r\n-d=\"M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5\r\n-l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5\r\n-q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_527\" unicode=\"&#xf232;\" \r\n-d=\"M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5\r\n-t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233\r\n-l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_528\" unicode=\"&#xf233;\" horiz-adv-x=\"1792\" \r\n-d=\"M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216\r\n-q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_529\" unicode=\"&#xf234;\" horiz-adv-x=\"2048\" \r\n-d=\"M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5\r\n-t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5\r\n-t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_530\" unicode=\"&#xf235;\" horiz-adv-x=\"2048\" \r\n-d=\"M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136\r\n-q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69\r\n-t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_531\" unicode=\"&#xf236;\" horiz-adv-x=\"2048\" \r\n-d=\"M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704\r\n-q-26 0 -45 -19t-19 -45v-384h1152z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_532\" unicode=\"&#xf237;\" \r\n-d=\"M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_533\" unicode=\"&#xf238;\" \r\n-d=\"M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56\r\n-t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_534\" unicode=\"&#xf239;\" \r\n-d=\"M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47\r\n-t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_535\" unicode=\"&#xf23a;\" horiz-adv-x=\"1792\" \r\n-d=\"M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116\r\n-q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_536\" unicode=\"&#xf23b;\" \r\n-d=\"M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_537\" unicode=\"&#xf23c;\" horiz-adv-x=\"2296\" \r\n-d=\"M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5\r\n-q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5\r\n-q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42\r\n-q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37\r\n-q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5\r\n-q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139\r\n-q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8\r\n-t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132\r\n-q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132\r\n-q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z\r\n-M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86\r\n-t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103\r\n-q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4\r\n-l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130\r\n-t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150\r\n-q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12\r\n-q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_538\" unicode=\"&#xf23d;\" horiz-adv-x=\"2304\" \r\n-d=\"M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5\r\n-t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5\r\n-t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_539\" unicode=\"&#xf23e;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348\r\n-t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23\r\n-t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96\r\n-q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512\r\n-q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_540\" unicode=\"&#xf240;\" horiz-adv-x=\"2304\" \r\n-d=\"M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113\r\n-v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_541\" unicode=\"&#xf241;\" horiz-adv-x=\"2304\" \r\n-d=\"M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\r\n-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_542\" unicode=\"&#xf242;\" horiz-adv-x=\"2304\" \r\n-d=\"M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\r\n-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_543\" unicode=\"&#xf243;\" horiz-adv-x=\"2304\" \r\n-d=\"M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\r\n-h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_544\" unicode=\"&#xf244;\" horiz-adv-x=\"2304\" \r\n-d=\"M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23\r\n-v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_545\" unicode=\"&#xf245;\" horiz-adv-x=\"1280\" \r\n-d=\"M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_546\" unicode=\"&#xf246;\" horiz-adv-x=\"1024\" \r\n-d=\"M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_547\" unicode=\"&#xf247;\" horiz-adv-x=\"2048\" \r\n-d=\"M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128\r\n-h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_548\" unicode=\"&#xf248;\" horiz-adv-x=\"2304\" \r\n-d=\"M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256\r\n-v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_549\" unicode=\"&#xf249;\" \r\n-d=\"M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_550\" unicode=\"&#xf24a;\" \r\n-d=\"M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_551\" unicode=\"&#xf24b;\" horiz-adv-x=\"2304\" \r\n-d=\"M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5\r\n-t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88\r\n-t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90\r\n-t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_552\" unicode=\"&#xf24c;\" horiz-adv-x=\"2304\" \r\n-d=\"M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294\r\n-t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z\r\n-M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_553\" unicode=\"&#xf24d;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113\r\n-zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_554\" unicode=\"&#xf24e;\" horiz-adv-x=\"2304\" \r\n-d=\"M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64\r\n-q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91\r\n-t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5\r\n-t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_555\" unicode=\"&#xf250;\" \r\n-d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\r\n-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5\r\n-t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_556\" unicode=\"&#xf251;\" \r\n-d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\r\n-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_557\" unicode=\"&#xf252;\" \r\n-d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\r\n-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_558\" unicode=\"&#xf253;\" \r\n-d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\r\n-t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196\r\n-h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_559\" unicode=\"&#xf254;\" \r\n-d=\"M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87\r\n-t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9\r\n-h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_560\" unicode=\"&#xf255;\" \r\n-d=\"M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25\r\n-q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27\r\n-t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21\r\n-q72 69 174 69z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_561\" unicode=\"&#xf256;\" horiz-adv-x=\"1792\" \r\n-d=\"M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33\r\n-t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52\r\n-h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_562\" unicode=\"&#xf257;\" horiz-adv-x=\"1792\" \r\n-d=\"M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668\r\n-q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17\r\n-t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5\r\n-t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5\r\n-q0 -42 -23 -78t-61 -53l-310 -141h91z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_563\" unicode=\"&#xf258;\" horiz-adv-x=\"2048\" \r\n-d=\"M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32\r\n-q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68\r\n-q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_564\" unicode=\"&#xf259;\" horiz-adv-x=\"2048\" \r\n-d=\"M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79\r\n-t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24\r\n-q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26\r\n-l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_565\" unicode=\"&#xf25a;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5\r\n-q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5\r\n-v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32\r\n-v-384h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_566\" unicode=\"&#xf25b;\" \r\n-d=\"M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181\r\n-v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46\r\n-q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5\r\n-q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308\r\n-q0 -53 37.5 -90.5t90.5 -37.5h668z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_567\" unicode=\"&#xf25c;\" horiz-adv-x=\"1973\" \r\n-d=\"M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5\r\n-t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141\r\n-q13 0 22 -8.5t10 -20.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_568\" unicode=\"&#xf25d;\" horiz-adv-x=\"1792\" \r\n-d=\"M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109\r\n-t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640\r\n-q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_569\" unicode=\"&#xf25e;\" horiz-adv-x=\"1792\" \r\n-d=\"M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78\r\n-q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5\r\n-t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376\r\n-q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191\r\n-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f260\" unicode=\"&#xf260;\" horiz-adv-x=\"2048\" \r\n-d=\"M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f261\" unicode=\"&#xf261;\" horiz-adv-x=\"1792\" \r\n-d=\"M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191\r\n-t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_572\" unicode=\"&#xf262;\" horiz-adv-x=\"2304\" \r\n-d=\"M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57\r\n-t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197\r\n-t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5\r\n-t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5\r\n-t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5\r\n-q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f263\" unicode=\"&#xf263;\" horiz-adv-x=\"1280\" \r\n-d=\"M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5\r\n-t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94\r\n-q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_574\" unicode=\"&#xf264;\" \r\n-d=\"M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32\r\n-q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5\r\n-zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_575\" unicode=\"&#xf265;\" horiz-adv-x=\"1720\" \r\n-d=\"M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33\r\n-l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_576\" unicode=\"&#xf266;\" horiz-adv-x=\"2304\" \r\n-d=\"M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540\r\n-q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81\r\n-l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_577\" unicode=\"&#xf267;\" horiz-adv-x=\"1792\" \r\n-d=\"M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640\r\n-q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5\r\n-t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5\r\n-t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5\r\n-t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191\r\n-t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_578\" unicode=\"&#xf268;\" horiz-adv-x=\"1792\" \r\n-d=\"M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962\r\n-q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_579\" unicode=\"&#xf269;\" horiz-adv-x=\"1792\" \r\n-d=\"M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5\r\n-q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5\r\n-q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_580\" unicode=\"&#xf26a;\" horiz-adv-x=\"1792\" \r\n-d=\"M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339\r\n-q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_581\" unicode=\"&#xf26b;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606\r\n-q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z\r\n-M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_582\" unicode=\"&#xf26c;\" horiz-adv-x=\"2048\" \r\n-d=\"M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23\r\n-v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_583\" unicode=\"&#xf26d;\" horiz-adv-x=\"1792\" \r\n-d=\"M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34\r\n-h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100\r\n-q-68 175 -180 287z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_584\" unicode=\"&#xf26e;\" \r\n-d=\"M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6\r\n-q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13\r\n-q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249\r\n-q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183\r\n-q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46\r\n-t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_585\" unicode=\"&#xf270;\" horiz-adv-x=\"1792\" \r\n-d=\"M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z\r\n-M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30\r\n-q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57\r\n-t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133\r\n-q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_586\" unicode=\"&#xf271;\" horiz-adv-x=\"1792\" \r\n-d=\"M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9\r\n-h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224\r\n-v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_587\" unicode=\"&#xf272;\" horiz-adv-x=\"1792\" \r\n-d=\"M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23\r\n-t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47\r\n-t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_588\" unicode=\"&#xf273;\" horiz-adv-x=\"1792\" \r\n-d=\"M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z\r\n-M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280\r\n-q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_589\" unicode=\"&#xf274;\" horiz-adv-x=\"1792\" \r\n-d=\"M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23\r\n-t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47\r\n-t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_590\" unicode=\"&#xf275;\" horiz-adv-x=\"1792\" \r\n-d=\"M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_591\" unicode=\"&#xf276;\" horiz-adv-x=\"1024\" \r\n-d=\"M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249\r\n-q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_592\" unicode=\"&#xf277;\" horiz-adv-x=\"1792\" \r\n-d=\"M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768\r\n-q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_593\" unicode=\"&#xf278;\" horiz-adv-x=\"2048\" \r\n-d=\"M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173\r\n-v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_594\" unicode=\"&#xf279;\" horiz-adv-x=\"1792\" \r\n-d=\"M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472\r\n-q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_595\" unicode=\"&#xf27a;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5\r\n-t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37\r\n-t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_596\" unicode=\"&#xf27b;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5\r\n-t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5\r\n-t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51\r\n-t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_597\" unicode=\"&#xf27c;\" horiz-adv-x=\"1024\" \r\n-d=\"M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_598\" unicode=\"&#xf27d;\" horiz-adv-x=\"1792\" \r\n-d=\"M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246\r\n-q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"f27e\" unicode=\"&#xf27e;\" \r\n-d=\"M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF280\" unicode=\"&#xf280;\" \r\n-d=\"M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72\r\n-h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275\r\n-l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF281\" unicode=\"&#xf281;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5\r\n-l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44\r\n-t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106\r\n-q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_602\" unicode=\"&#xf282;\" horiz-adv-x=\"1792\" \r\n-d=\"M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53\r\n-q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_603\" unicode=\"&#xf283;\" horiz-adv-x=\"2304\" \r\n-d=\"M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_604\" unicode=\"&#xf284;\" horiz-adv-x=\"1792\" \r\n-d=\"M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308\r\n-t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20\r\n-t28.5 -48t1 -56t-27.5 -48t-57.5 -20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF285\" unicode=\"&#xf285;\" horiz-adv-x=\"1792\" \r\n-d=\"M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF286\" unicode=\"&#xf286;\" horiz-adv-x=\"1792\" \r\n-d=\"M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96\r\n-q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5\r\n-q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96\r\n-q16 0 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_607\" unicode=\"&#xf287;\" horiz-adv-x=\"2304\" \r\n-d=\"M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96\r\n-q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5\r\n-t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_608\" unicode=\"&#xf288;\" horiz-adv-x=\"1792\" \r\n-d=\"M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348\r\n-t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_609\" unicode=\"&#xf289;\" horiz-adv-x=\"2304\" \r\n-d=\"M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22\r\n-q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5\r\n-q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13\r\n-q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_610\" unicode=\"&#xf28a;\" \r\n-d=\"M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83\r\n-t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20\r\n-q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5\r\n-t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_611\" unicode=\"&#xf28b;\" \r\n-d=\"M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103\r\n-t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_612\" unicode=\"&#xf28c;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273\r\n-t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_613\" unicode=\"&#xf28d;\" \r\n-d=\"M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\r\n-t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_614\" unicode=\"&#xf28e;\" \r\n-d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273\r\n-t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_615\" unicode=\"&#xf290;\" horiz-adv-x=\"1792\" \r\n-d=\"M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5\r\n-t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_616\" unicode=\"&#xf291;\" horiz-adv-x=\"2048\" \r\n-d=\"M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5\r\n-t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416\r\n-q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441\r\n-h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_617\" unicode=\"&#xf292;\" horiz-adv-x=\"1792\" \r\n-d=\"M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12\r\n-q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311\r\n-q15 0 25 -12q9 -12 6 -28z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_618\" unicode=\"&#xf293;\" \r\n-d=\"M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5\r\n-t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_619\" unicode=\"&#xf294;\" horiz-adv-x=\"1024\" \r\n-d=\"M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_620\" unicode=\"&#xf295;\" \r\n-d=\"M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5\r\n-t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5\r\n-t271.5 -112.5t112.5 -271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_621\" unicode=\"&#xf296;\" horiz-adv-x=\"1792\" \r\n-d=\"M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_622\" unicode=\"&#xf297;\" horiz-adv-x=\"1792\" \r\n-d=\"M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111\r\n-q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_623\" unicode=\"&#xf298;\" \r\n-d=\"M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14\r\n-t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_624\" unicode=\"&#xf299;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57\r\n-q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285\r\n-q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_625\" unicode=\"&#xf29a;\" horiz-adv-x=\"1792\" \r\n-d=\"M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42\r\n-q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z\r\n-M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298\r\n-t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_626\" unicode=\"&#xf29b;\" \r\n-d=\"M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300\r\n-l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z\r\n-M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_627\" unicode=\"&#xf29c;\" \r\n-d=\"M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5\r\n-t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5\r\n-t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5\r\n-t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_628\" unicode=\"&#xf29d;\" horiz-adv-x=\"1408\" \r\n-d=\"M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457\r\n-q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521\r\n-q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661\r\n-q3 -1 7 1t7 4l3 2q11 9 11 17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"_629\" unicode=\"&#xf29e;\" horiz-adv-x=\"2304\" \r\n-d=\"M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10\r\n-t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5\r\n-t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5\r\n-h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96\r\n-t9.5 -70.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A0\" unicode=\"&#xf2a0;\" horiz-adv-x=\"1408\" \r\n-d=\"M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5\r\n-q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127\r\n-l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272\r\n-t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249\r\n-q-18 -19 -45 -19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A1\" unicode=\"&#xf2a1;\" horiz-adv-x=\"2176\" \r\n-d=\"M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352\r\n-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864\r\n-q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136\r\n-t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56\r\n-t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56\r\n-t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136\r\n-t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A2\" unicode=\"&#xf2a2;\" horiz-adv-x=\"1792\" \r\n-d=\"M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z\r\n-M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72\r\n-t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45\r\n-t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4\r\n-q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A3\" unicode=\"&#xf2a3;\" horiz-adv-x=\"2304\" \r\n-d=\"M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55\r\n-q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5\r\n-q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101\r\n-q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35\r\n-q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5\r\n-q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A4\" unicode=\"&#xf2a4;\" horiz-adv-x=\"1792\" \r\n-d=\"M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19\r\n-t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74\r\n-t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233\r\n-l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A5\" unicode=\"&#xf2a5;\" \r\n-d=\"M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2\r\n-q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10\r\n-q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5\r\n-t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A6\" unicode=\"&#xf2a6;\" horiz-adv-x=\"1535\" \r\n-d=\"M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5\r\n-l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5\r\n-q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9\r\n-q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A7\" unicode=\"&#xf2a7;\" horiz-adv-x=\"1664\" \r\n-d=\"M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37\r\n-t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38\r\n-l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148\r\n-q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26\r\n-l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A8\" unicode=\"&#xf2a8;\" horiz-adv-x=\"1792\" \r\n-d=\"M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5\r\n-q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841\r\n-q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5\r\n-q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2A9\" unicode=\"&#xf2a9;\" horiz-adv-x=\"1280\" \r\n-d=\"M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5\r\n-q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z\r\n-M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2AA\" unicode=\"&#xf2aa;\" \r\n-d=\"M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z\r\n-M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5\r\n-q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\r\n-t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2AB\" unicode=\"&#xf2ab;\" \r\n-d=\"M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114\r\n-q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5\r\n-t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\r\n-t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2AC\" unicode=\"&#xf2ac;\" horiz-adv-x=\"1664\" \r\n-d=\"M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35\r\n-q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5\r\n-t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2AD\" unicode=\"&#xf2ad;\" \r\n-d=\"M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115\r\n-q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15\r\n-t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960\r\n-q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2AE\" unicode=\"&#xf2ae;\" horiz-adv-x=\"2304\" \r\n-d=\"M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7\r\n-q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158\r\n-q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B0\" unicode=\"&#xf2b0;\" \r\n-d=\"M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104\r\n-q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108\r\n-l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z\r\n-M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B1\" unicode=\"&#xf2b1;\" horiz-adv-x=\"1664\" \r\n-d=\"M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5\r\n-t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B2\" unicode=\"&#xf2b2;\" horiz-adv-x=\"1792\" \r\n-d=\"M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5\r\n-t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114\r\n-q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50\r\n-q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5\r\n-t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46\r\n-q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5\r\n-q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177\r\n-t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B3\" unicode=\"&#xf2b3;\" \r\n-d=\"M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110\r\n-h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B4\" unicode=\"&#xf2b4;\" \r\n-d=\"M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5\r\n-q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B5\" unicode=\"&#xf2b5;\" horiz-adv-x=\"2304\" \r\n-d=\"M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66\r\n-l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180\r\n-q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z\r\n-M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421\r\n-q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B6\" unicode=\"&#xf2b6;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107\r\n-t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39\r\n-q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B7\" unicode=\"&#xf2b7;\" horiz-adv-x=\"1792\" \r\n-d=\"M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5\r\n-l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5\r\n-h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94\r\n-q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B8\" unicode=\"&#xf2b8;\" \r\n-d=\"M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465\r\n-l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161\r\n-q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74\r\n-q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2B9\" unicode=\"&#xf2b9;\" horiz-adv-x=\"1664\" \r\n-d=\"M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576\r\n-q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216\r\n-q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2BA\" unicode=\"&#xf2ba;\" horiz-adv-x=\"1664\" \r\n-d=\"M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5\r\n-t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96\r\n-q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216\r\n-q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2BB\" unicode=\"&#xf2bb;\" horiz-adv-x=\"2048\" \r\n-d=\"M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z\r\n-M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568\r\n-q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9\r\n-h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2BC\" unicode=\"&#xf2bc;\" horiz-adv-x=\"2048\" \r\n-d=\"M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925\r\n-q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568\r\n-q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5\r\n-t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113\r\n-t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2BD\" unicode=\"&#xf2bd;\" horiz-adv-x=\"1792\" \r\n-d=\"M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5\r\n-t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2BE\" unicode=\"&#xf2be;\" horiz-adv-x=\"1792\" \r\n-d=\"M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61\r\n-t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C0\" unicode=\"&#xf2c0;\" \r\n-d=\"M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5\r\n-t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145\r\n-q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C1\" unicode=\"&#xf2c1;\" horiz-adv-x=\"1280\" \r\n-d=\"M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5\r\n-t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352\r\n-q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C2\" unicode=\"&#xf2c2;\" horiz-adv-x=\"2048\" \r\n-d=\"M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56\r\n-t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23\r\n-v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728\r\n-q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C3\" unicode=\"&#xf2c3;\" horiz-adv-x=\"2048\" \r\n-d=\"M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z\r\n-M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64\r\n-q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47\r\n-h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C4\" unicode=\"&#xf2c4;\" horiz-adv-x=\"1792\" \r\n-d=\"M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117\r\n-q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5\r\n-t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C5\" unicode=\"&#xf2c5;\" horiz-adv-x=\"2304\" \r\n-d=\"M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21\r\n-t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46\r\n-t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54\r\n-t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29\r\n-q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5\r\n-t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314\r\n-q2 -42 2 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C6\" unicode=\"&#xf2c6;\" horiz-adv-x=\"1792\" \r\n-d=\"M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71\r\n-t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C7\" unicode=\"&#xf2c7;\" horiz-adv-x=\"1024\" \r\n-d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\r\n-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\r\n-v128h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C8\" unicode=\"&#xf2c8;\" horiz-adv-x=\"1024\" \r\n-d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\r\n-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\r\n-v128h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2C9\" unicode=\"&#xf2c9;\" horiz-adv-x=\"1024\" \r\n-d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\r\n-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\r\n-v128h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2CA\" unicode=\"&#xf2ca;\" horiz-adv-x=\"1024\" \r\n-d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\r\n-t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\r\n-v128h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2CB\" unicode=\"&#xf2cb;\" horiz-adv-x=\"1024\" \r\n-d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z\r\n-M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2CC\" unicode=\"&#xf2cc;\" horiz-adv-x=\"1920\" \r\n-d=\"M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41\r\n-t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19\r\n-t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768\r\n-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19\r\n-t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384\r\n-q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2CD\" unicode=\"&#xf2cd;\" horiz-adv-x=\"1792\" \r\n-d=\"M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9\r\n-t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9\r\n-t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42\r\n-q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9\r\n-t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23\r\n-t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2CE\" unicode=\"&#xf2ce;\" \r\n-d=\"M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5\r\n-t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70\r\n-q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20\r\n-q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5\r\n-t72.5 -263.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D0\" unicode=\"&#xf2d0;\" horiz-adv-x=\"1792\" \r\n-d=\"M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D1\" unicode=\"&#xf2d1;\" horiz-adv-x=\"1792\" \r\n-d=\"M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D2\" unicode=\"&#xf2d2;\" horiz-adv-x=\"2048\" \r\n-d=\"M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47\r\n-t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D3\" unicode=\"&#xf2d3;\" horiz-adv-x=\"1792\" \r\n-d=\"M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10\r\n-l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D4\" unicode=\"&#xf2d4;\" horiz-adv-x=\"1792\" \r\n-d=\"M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23\r\n-l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D5\" unicode=\"&#xf2d5;\" horiz-adv-x=\"1792\" \r\n-d=\"M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D6\" unicode=\"&#xf2d6;\" horiz-adv-x=\"1794\" \r\n-d=\"M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12\r\n-t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5\r\n-t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5\r\n-q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5\r\n-q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34\r\n-q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5\r\n-t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D7\" unicode=\"&#xf2d7;\" \r\n-d=\"M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89\r\n-q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5\r\n-t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D8\" unicode=\"&#xf2d8;\" \r\n-d=\"M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7\r\n-t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5\r\n-h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113\r\n-v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2D9\" unicode=\"&#xf2d9;\" horiz-adv-x=\"2176\" \r\n-d=\"M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584\r\n-q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5\r\n-q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15\r\n-q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82\r\n-q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104\r\n-t302 11t306.5 -97q220 -115 333 -336t87 -474z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2DA\" unicode=\"&#xf2da;\" horiz-adv-x=\"1792\" \r\n-d=\"M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178\r\n-q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199\r\n-t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297\r\n-t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208\r\n-t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2DB\" unicode=\"&#xf2db;\" \r\n-d=\"M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16\r\n-q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28\r\n-t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32\r\n-q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16\r\n-h48q16 0 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2DC\" unicode=\"&#xf2dc;\" horiz-adv-x=\"1664\" \r\n-d=\"M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45\r\n-t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33\r\n-q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313\r\n-l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106\r\n-q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2DD\" unicode=\"&#xf2dd;\" horiz-adv-x=\"1792\" \r\n-d=\"M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321\r\n-q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2DE\" unicode=\"&#xf2de;\" horiz-adv-x=\"1792\" \r\n-d=\"M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62\r\n-t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71\r\n-t286 -191t191 -286t71 -348z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E0\" unicode=\"&#xf2e0;\" horiz-adv-x=\"1920\" \r\n-d=\"M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3\r\n-t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53\r\n-q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5\r\n-q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5\r\n-t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5\r\n-q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z\r\n-M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21\r\n-q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16\r\n-q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E1\" unicode=\"&#xf2e1;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E2\" unicode=\"&#xf2e2;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E3\" unicode=\"&#xf2e3;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E4\" unicode=\"&#xf2e4;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E5\" unicode=\"&#xf2e5;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E6\" unicode=\"&#xf2e6;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E7\" unicode=\"&#xf2e7;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"_698\" unicode=\"&#xf2e8;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2E9\" unicode=\"&#xf2e9;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2EA\" unicode=\"&#xf2ea;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2EB\" unicode=\"&#xf2eb;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2EC\" unicode=\"&#xf2ec;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2ED\" unicode=\"&#xf2ed;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"uniF2EE\" unicode=\"&#xf2ee;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-    \u003Cglyph glyph-name=\"lessequal\" unicode=\"&#xf500;\" horiz-adv-x=\"1792\" \r\n- \u002F>\r\n-  \u003C\u002Ffont>\r\n-\u003C\u002Fdefs>\u003C\u002Fsvg>\r\n+\u003C?xml version=\"1.0\" standalone=\"no\"?>\n+\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\n+\u003Csvg>\n+\u003Cmetadata>\n+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016\n+ By ,,,\n+Copyright Dave Gandy 2016. All rights reserved.\n+\u003C\u002Fmetadata>\n+\u003Cdefs>\n+\u003Cfont id=\"FontAwesome\" horiz-adv-x=\"1536\" >\n+  \u003Cfont-face \n+    font-family=\"FontAwesome\"\n+    font-weight=\"400\"\n+    font-stretch=\"normal\"\n+    units-per-em=\"1792\"\n+    panose-1=\"0 0 0 0 0 0 0 0 0 0\"\n+    ascent=\"1536\"\n+    descent=\"-256\"\n+    bbox=\"-1.02083 -256.962 2304.6 1537.02\"\n+    underline-thickness=\"0\"\n+    underline-position=\"0\"\n+    unicode-range=\"U+0020-F500\"\n+  \u002F>\n+\u003Cmissing-glyph horiz-adv-x=\"896\" \n+d=\"M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z\" \u002F>\n+    \u003Cglyph glyph-name=\".notdef\" horiz-adv-x=\"896\" \n+d=\"M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z\" \u002F>\n+    \u003Cglyph glyph-name=\".null\" horiz-adv-x=\"0\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"nonmarkingreturn\" horiz-adv-x=\"597\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"space\" unicode=\" \" horiz-adv-x=\"448\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"dieresis\" unicode=\"&#xa8;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xa9;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xae;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"acute\" unicode=\"&#xb4;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"AE\" unicode=\"&#xc6;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"Oslash\" unicode=\"&#xd8;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"trademark\" unicode=\"&#x2122;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"infinity\" unicode=\"&#x221e;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"notequal\" unicode=\"&#x2260;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"glass\" unicode=\"&#xf000;\" horiz-adv-x=\"1792\" \n+d=\"M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"music\" unicode=\"&#xf001;\" \n+d=\"M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89\n+t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"search\" unicode=\"&#xf002;\" horiz-adv-x=\"1664\" \n+d=\"M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5\n+t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf003;\" horiz-adv-x=\"1792\" \n+d=\"M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13\n+t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z\n+M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" horiz-adv-x=\"1792\" \n+d=\"M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600\n+q-18 -18 -44 -18z\" \u002F>\n+    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"1664\" \n+d=\"M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455\n+l502 -73q56 -9 56 -46z\" \u002F>\n+    \u003Cglyph glyph-name=\"star_empty\" unicode=\"&#xf006;\" horiz-adv-x=\"1664\" \n+d=\"M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500\n+l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z\" \u002F>\n+    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"1280\" \n+d=\"M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5\n+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"film\" unicode=\"&#xf008;\" horiz-adv-x=\"1920\" \n+d=\"M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128\n+q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45\n+t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128\n+q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19\n+t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"th_large\" unicode=\"&#xf009;\" horiz-adv-x=\"1664\" \n+d=\"M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38\n+h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"th\" unicode=\"&#xf00a;\" horiz-adv-x=\"1792\" \n+d=\"M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320\n+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28\n+h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192\n+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"th_list\" unicode=\"&#xf00b;\" horiz-adv-x=\"1792\" \n+d=\"M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960\n+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28\n+h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"ok\" unicode=\"&#xf00c;\" horiz-adv-x=\"1792\" \n+d=\"M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"remove\" unicode=\"&#xf00d;\" horiz-adv-x=\"1408\" \n+d=\"M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68\n+t-28 -68l-294 -294l294 -294q28 -28 28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"zoom_in\" unicode=\"&#xf00e;\" horiz-adv-x=\"1664\" \n+d=\"M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224\n+q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5\n+t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"zoom_out\" unicode=\"&#xf010;\" horiz-adv-x=\"1664\" \n+d=\"M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z\n+M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"off\" unicode=\"&#xf011;\" \n+d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5\n+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"signal\" unicode=\"&#xf012;\" horiz-adv-x=\"1792\" \n+d=\"M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23\n+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"cog\" unicode=\"&#xf013;\" \n+d=\"M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38\n+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13\n+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22\n+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash\" unicode=\"&#xf014;\" horiz-adv-x=\"1408\" \n+d=\"M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576\n+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832\n+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"home\" unicode=\"&#xf015;\" horiz-adv-x=\"1664\" \n+d=\"M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5\n+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"file_alt\" unicode=\"&#xf016;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"time\" unicode=\"&#xf017;\" \n+d=\"M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"road\" unicode=\"&#xf018;\" horiz-adv-x=\"1920\" \n+d=\"M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256\n+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z\" \u002F>\n+    \u003Cglyph glyph-name=\"download_alt\" unicode=\"&#xf019;\" horiz-adv-x=\"1664\" \n+d=\"M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136\n+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z\" \u002F>\n+    \u003Cglyph glyph-name=\"download\" unicode=\"&#xf01a;\" \n+d=\"M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273\n+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"upload\" unicode=\"&#xf01b;\" \n+d=\"M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198\n+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"inbox\" unicode=\"&#xf01c;\" \n+d=\"M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552\n+q25 -61 25 -123z\" \u002F>\n+    \u003Cglyph glyph-name=\"play_circle\" unicode=\"&#xf01d;\" \n+d=\"M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"repeat\" unicode=\"&#xf01e;\" \n+d=\"M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9\n+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z\" \u002F>\n+    \u003Cglyph glyph-name=\"refresh\" unicode=\"&#xf021;\" \n+d=\"M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117\n+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5\n+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"list_alt\" unicode=\"&#xf022;\" horiz-adv-x=\"1792\" \n+d=\"M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z\n+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5\n+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47\n+t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"lock\" unicode=\"&#xf023;\" horiz-adv-x=\"1152\" \n+d=\"M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" horiz-adv-x=\"1792\" \n+d=\"M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48\n+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"headphones\" unicode=\"&#xf025;\" horiz-adv-x=\"1664\" \n+d=\"M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78\n+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5\n+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume_off\" unicode=\"&#xf026;\" horiz-adv-x=\"768\" \n+d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume_down\" unicode=\"&#xf027;\" horiz-adv-x=\"1152\" \n+d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36\n+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume_up\" unicode=\"&#xf028;\" horiz-adv-x=\"1664\" \n+d=\"M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36\n+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5\n+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289\n+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"qrcode\" unicode=\"&#xf029;\" horiz-adv-x=\"1408\" \n+d=\"M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z\n+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z\" \u002F>\n+    \u003Cglyph glyph-name=\"barcode\" unicode=\"&#xf02a;\" horiz-adv-x=\"1792\" \n+d=\"M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z\n+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z\" \u002F>\n+    \u003Cglyph glyph-name=\"tag\" unicode=\"&#xf02b;\" \n+d=\"M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5\n+l715 -714q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"tags\" unicode=\"&#xf02c;\" horiz-adv-x=\"1920\" \n+d=\"M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5\n+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"book\" unicode=\"&#xf02d;\" horiz-adv-x=\"1664\" \n+d=\"M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23\n+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906\n+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5\n+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"1280\" \n+d=\"M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z\" \u002F>\n+    \u003Cglyph glyph-name=\"print\" unicode=\"&#xf02f;\" horiz-adv-x=\"1664\" \n+d=\"M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68\n+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"camera\" unicode=\"&#xf030;\" horiz-adv-x=\"1920\" \n+d=\"M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136\n+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"font\" unicode=\"&#xf031;\" horiz-adv-x=\"1664\" \n+d=\"M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57\n+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5\n+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z\" \u002F>\n+    \u003Cglyph glyph-name=\"bold\" unicode=\"&#xf032;\" horiz-adv-x=\"1408\" \n+d=\"M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142\n+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5\n+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5\n+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"italic\" unicode=\"&#xf033;\" horiz-adv-x=\"1024\" \n+d=\"M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5\n+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"text_height\" unicode=\"&#xf034;\" horiz-adv-x=\"1792\" \n+d=\"M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2\n+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5\n+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27\n+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z\" \u002F>\n+    \u003Cglyph glyph-name=\"text_width\" unicode=\"&#xf035;\" \n+d=\"M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1\n+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27\n+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5\n+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49\n+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"align_left\" unicode=\"&#xf036;\" horiz-adv-x=\"1792\" \n+d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45\n+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"align_center\" unicode=\"&#xf037;\" horiz-adv-x=\"1792\" \n+d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19\n+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"align_right\" unicode=\"&#xf038;\" horiz-adv-x=\"1792\" \n+d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45\n+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"align_justify\" unicode=\"&#xf039;\" horiz-adv-x=\"1792\" \n+d=\"M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45\n+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"list\" unicode=\"&#xf03a;\" horiz-adv-x=\"1792\" \n+d=\"M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5\n+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344\n+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5\n+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192\n+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"indent_left\" unicode=\"&#xf03b;\" horiz-adv-x=\"1792\" \n+d=\"M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5\n+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088\n+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"indent_right\" unicode=\"&#xf03c;\" horiz-adv-x=\"1792\" \n+d=\"M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5\n+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088\n+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"facetime_video\" unicode=\"&#xf03d;\" horiz-adv-x=\"1792\" \n+d=\"M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5\n+q39 -17 39 -59z\" \u002F>\n+    \u003Cglyph glyph-name=\"picture\" unicode=\"&#xf03e;\" horiz-adv-x=\"1920\" \n+d=\"M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216\n+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"pencil\" unicode=\"&#xf040;\" \n+d=\"M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38\n+q53 0 91 -38l235 -234q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"map_marker\" unicode=\"&#xf041;\" horiz-adv-x=\"1024\" \n+d=\"M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z\" \u002F>\n+    \u003Cglyph glyph-name=\"adjust\" unicode=\"&#xf042;\" \n+d=\"M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"tint\" unicode=\"&#xf043;\" horiz-adv-x=\"1024\" \n+d=\"M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362\n+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z\" \u002F>\n+    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"1792\" \n+d=\"M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832\n+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92\n+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"share\" unicode=\"&#xf045;\" horiz-adv-x=\"1664\" \n+d=\"M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832\n+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5\n+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"check\" unicode=\"&#xf046;\" horiz-adv-x=\"1664\" \n+d=\"M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832\n+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110\n+q24 -24 24 -57t-24 -57z\" \u002F>\n+    \u003Cglyph glyph-name=\"move\" unicode=\"&#xf047;\" horiz-adv-x=\"1792\" \n+d=\"M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45\n+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"step_backward\" unicode=\"&#xf048;\" horiz-adv-x=\"1024\" \n+d=\"M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z\" \u002F>\n+    \u003Cglyph glyph-name=\"fast_backward\" unicode=\"&#xf049;\" horiz-adv-x=\"1792\" \n+d=\"M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710\n+q19 19 32 13t13 -32v-710q4 10 13 19z\" \u002F>\n+    \u003Cglyph glyph-name=\"backward\" unicode=\"&#xf04a;\" horiz-adv-x=\"1664\" \n+d=\"M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z\" \u002F>\n+    \u003Cglyph glyph-name=\"play\" unicode=\"&#xf04b;\" horiz-adv-x=\"1408\" \n+d=\"M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z\" \u002F>\n+    \u003Cglyph glyph-name=\"pause\" unicode=\"&#xf04c;\" \n+d=\"M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"stop\" unicode=\"&#xf04d;\" \n+d=\"M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"forward\" unicode=\"&#xf04e;\" horiz-adv-x=\"1664\" \n+d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"fast_forward\" unicode=\"&#xf050;\" horiz-adv-x=\"1792\" \n+d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710\n+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"step_forward\" unicode=\"&#xf051;\" horiz-adv-x=\"1024\" \n+d=\"M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"eject\" unicode=\"&#xf052;\" horiz-adv-x=\"1538\" \n+d=\"M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_left\" unicode=\"&#xf053;\" horiz-adv-x=\"1280\" \n+d=\"M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_right\" unicode=\"&#xf054;\" horiz-adv-x=\"1280\" \n+d=\"M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus_sign\" unicode=\"&#xf055;\" \n+d=\"M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5\n+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus_sign\" unicode=\"&#xf056;\" \n+d=\"M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\n+t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"remove_sign\" unicode=\"&#xf057;\" \n+d=\"M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19\n+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ok_sign\" unicode=\"&#xf058;\" \n+d=\"M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\n+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"question_sign\" unicode=\"&#xf059;\" \n+d=\"M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59\n+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\n+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"info_sign\" unicode=\"&#xf05a;\" \n+d=\"M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23\n+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"screenshot\" unicode=\"&#xf05b;\" \n+d=\"M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109\n+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143\n+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"remove_circle\" unicode=\"&#xf05c;\" \n+d=\"M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23\n+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5\n+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ok_circle\" unicode=\"&#xf05d;\" \n+d=\"M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198\n+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ban_circle\" unicode=\"&#xf05e;\" \n+d=\"M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61\n+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow_left\" unicode=\"&#xf060;\" \n+d=\"M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5\n+t32.5 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow_right\" unicode=\"&#xf061;\" \n+d=\"M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow_up\" unicode=\"&#xf062;\" horiz-adv-x=\"1664\" \n+d=\"M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651\n+q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow_down\" unicode=\"&#xf063;\" horiz-adv-x=\"1664\" \n+d=\"M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"share_alt\" unicode=\"&#xf064;\" horiz-adv-x=\"1792\" \n+d=\"M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22\n+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"resize_full\" unicode=\"&#xf065;\" \n+d=\"M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332\n+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"resize_small\" unicode=\"&#xf066;\" \n+d=\"M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45\n+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus\" unicode=\"&#xf067;\" horiz-adv-x=\"1408\" \n+d=\"M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus\" unicode=\"&#xf068;\" horiz-adv-x=\"1408\" \n+d=\"M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"asterisk\" unicode=\"&#xf069;\" horiz-adv-x=\"1664\" \n+d=\"M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154\n+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z\" \u002F>\n+    \u003Cglyph glyph-name=\"exclamation_sign\" unicode=\"&#xf06a;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192\n+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"gift\" unicode=\"&#xf06b;\" \n+d=\"M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320\n+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5\n+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"leaf\" unicode=\"&#xf06c;\" horiz-adv-x=\"1792\" \n+d=\"M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268\n+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5\n+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z\" \u002F>\n+    \u003Cglyph glyph-name=\"fire\" unicode=\"&#xf06d;\" horiz-adv-x=\"1408\" \n+d=\"M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1\n+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye_open\" unicode=\"&#xf06e;\" horiz-adv-x=\"1792\" \n+d=\"M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5\n+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye_close\" unicode=\"&#xf070;\" horiz-adv-x=\"1792\" \n+d=\"M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9\n+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5\n+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"warning_sign\" unicode=\"&#xf071;\" horiz-adv-x=\"1792\" \n+d=\"M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185\n+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z\" \u002F>\n+    \u003Cglyph glyph-name=\"plane\" unicode=\"&#xf072;\" horiz-adv-x=\"1408\" \n+d=\"M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9\n+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf073;\" horiz-adv-x=\"1664\" \n+d=\"M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z\n+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64\n+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47\n+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"random\" unicode=\"&#xf074;\" horiz-adv-x=\"1792\" \n+d=\"M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1\n+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5\n+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111\n+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" horiz-adv-x=\"1792\" \n+d=\"M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281\n+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"magnet\" unicode=\"&#xf076;\" \n+d=\"M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384\n+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_up\" unicode=\"&#xf077;\" horiz-adv-x=\"1792\" \n+d=\"M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_down\" unicode=\"&#xf078;\" horiz-adv-x=\"1792\" \n+d=\"M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"retweet\" unicode=\"&#xf079;\" horiz-adv-x=\"1920\" \n+d=\"M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21\n+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"shopping_cart\" unicode=\"&#xf07a;\" horiz-adv-x=\"1664\" \n+d=\"M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45\n+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder_close\" unicode=\"&#xf07b;\" horiz-adv-x=\"1664\" \n+d=\"M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder_open\" unicode=\"&#xf07c;\" horiz-adv-x=\"1920\" \n+d=\"M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5\n+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"resize_vertical\" unicode=\"&#xf07d;\" horiz-adv-x=\"768\" \n+d=\"M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"resize_horizontal\" unicode=\"&#xf07e;\" horiz-adv-x=\"1792\" \n+d=\"M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"bar_chart\" unicode=\"&#xf080;\" horiz-adv-x=\"2048\" \n+d=\"M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"twitter_sign\" unicode=\"&#xf081;\" \n+d=\"M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4\n+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5\n+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook_sign\" unicode=\"&#xf082;\" \n+d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960\n+q0 119 84.5 203.5t203.5 84.5h960z\" \u002F>\n+    \u003Cglyph glyph-name=\"camera_retro\" unicode=\"&#xf083;\" horiz-adv-x=\"1792\" \n+d=\"M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5\n+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280\n+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"key\" unicode=\"&#xf084;\" horiz-adv-x=\"1792\" \n+d=\"M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26\n+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5\n+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z\" \u002F>\n+    \u003Cglyph glyph-name=\"cogs\" unicode=\"&#xf085;\" horiz-adv-x=\"1920\" \n+d=\"M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5\n+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5\n+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7\n+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31\n+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20\n+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68\n+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70\n+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z\" \u002F>\n+    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"1792\" \n+d=\"M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224\n+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7\n+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs_up_alt\" unicode=\"&#xf087;\" \n+d=\"M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5\n+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769\n+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128\n+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs_down_alt\" unicode=\"&#xf088;\" \n+d=\"M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5\n+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z\n+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5\n+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z\" \u002F>\n+    \u003Cglyph glyph-name=\"star_half\" unicode=\"&#xf089;\" horiz-adv-x=\"896\" \n+d=\"M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z\" \u002F>\n+    \u003Cglyph glyph-name=\"heart_empty\" unicode=\"&#xf08a;\" horiz-adv-x=\"1792\" \n+d=\"M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559\n+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5\n+q224 0 351 -124t127 -344z\" \u002F>\n+    \u003Cglyph glyph-name=\"signout\" unicode=\"&#xf08b;\" horiz-adv-x=\"1664\" \n+d=\"M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704\n+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"linkedin_sign\" unicode=\"&#xf08c;\" \n+d=\"M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5\n+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"pushpin\" unicode=\"&#xf08d;\" horiz-adv-x=\"1152\" \n+d=\"M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38\n+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"external_link\" unicode=\"&#xf08e;\" horiz-adv-x=\"1792\" \n+d=\"M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320\n+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"signin\" unicode=\"&#xf090;\" \n+d=\"M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5\n+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"trophy\" unicode=\"&#xf091;\" horiz-adv-x=\"1664\" \n+d=\"M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91\n+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96\n+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"github_sign\" unicode=\"&#xf092;\" \n+d=\"M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4\n+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4\n+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16\n+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"upload_alt\" unicode=\"&#xf093;\" horiz-adv-x=\"1664\" \n+d=\"M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92\n+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z\" \u002F>\n+    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \n+d=\"M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5\n+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44\n+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5\n+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone\" unicode=\"&#xf095;\" horiz-adv-x=\"1408\" \n+d=\"M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186\n+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14\n+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z\" \u002F>\n+    \u003Cglyph glyph-name=\"check_empty\" unicode=\"&#xf096;\" horiz-adv-x=\"1408\" \n+d=\"M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832\n+q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"bookmark_empty\" unicode=\"&#xf097;\" horiz-adv-x=\"1280\" \n+d=\"M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289\n+q0 34 19.5 62t52.5 41q21 9 44 9h1048z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone_sign\" unicode=\"&#xf098;\" \n+d=\"M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5\n+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5\n+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"twitter\" unicode=\"&#xf099;\" horiz-adv-x=\"1664\" \n+d=\"M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41\n+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook\" unicode=\"&#xf09a;\" horiz-adv-x=\"1024\" \n+d=\"M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"github\" unicode=\"&#xf09b;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24\n+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5\n+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12\n+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z\n+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlock\" unicode=\"&#xf09c;\" horiz-adv-x=\"1664\" \n+d=\"M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5\n+t316.5 -131.5t131.5 -316.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"credit_card\" unicode=\"&#xf09d;\" horiz-adv-x=\"1920\" \n+d=\"M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608\n+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z\" \u002F>\n+    \u003Cglyph glyph-name=\"rss\" unicode=\"&#xf09e;\" horiz-adv-x=\"1408\" \n+d=\"M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5\n+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294\n+q187 -186 294 -425.5t120 -501.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" \n+d=\"M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5\n+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75\n+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z\" \u002F>\n+    \u003Cglyph glyph-name=\"bullhorn\" unicode=\"&#xf0a1;\" horiz-adv-x=\"1792\" \n+d=\"M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5\n+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0a2;\" horiz-adv-x=\"1792\" \n+d=\"M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z\n+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5\n+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z\" \u002F>\n+    \u003Cglyph glyph-name=\"certificate\" unicode=\"&#xf0a3;\" \n+d=\"M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70\n+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70\n+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand_right\" unicode=\"&#xf0a4;\" horiz-adv-x=\"1792\" \n+d=\"M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106\n+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43\n+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5\n+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand_left\" unicode=\"&#xf0a5;\" horiz-adv-x=\"1792\" \n+d=\"M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5\n+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z\n+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67\n+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand_up\" unicode=\"&#xf0a6;\" \n+d=\"M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576\n+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5\n+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76\n+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand_down\" unicode=\"&#xf0a7;\" \n+d=\"M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33\n+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580\n+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100\n+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle_arrow_left\" unicode=\"&#xf0a8;\" \n+d=\"M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle_arrow_right\" unicode=\"&#xf0a9;\" \n+d=\"M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle_arrow_up\" unicode=\"&#xf0aa;\" \n+d=\"M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle_arrow_down\" unicode=\"&#xf0ab;\" \n+d=\"M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe\" unicode=\"&#xf0ac;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11\n+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5\n+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5\n+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5\n+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3\n+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25\n+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5\n+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5\n+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21\n+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5\n+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3\n+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5\n+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5\n+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7\n+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"wrench\" unicode=\"&#xf0ad;\" horiz-adv-x=\"1664\" \n+d=\"M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5\n+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z\" \u002F>\n+    \u003Cglyph glyph-name=\"tasks\" unicode=\"&#xf0ae;\" horiz-adv-x=\"1792\" \n+d=\"M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19\n+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"filter\" unicode=\"&#xf0b0;\" horiz-adv-x=\"1408\" \n+d=\"M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z\" \u002F>\n+    \u003Cglyph glyph-name=\"briefcase\" unicode=\"&#xf0b1;\" horiz-adv-x=\"1792\" \n+d=\"M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68\n+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"fullscreen\" unicode=\"&#xf0b2;\" \n+d=\"M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144\n+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"group\" unicode=\"&#xf0c0;\" horiz-adv-x=\"1920\" \n+d=\"M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5\n+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75\n+t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5\n+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z\" \u002F>\n+    \u003Cglyph glyph-name=\"link\" unicode=\"&#xf0c1;\" horiz-adv-x=\"1664\" \n+d=\"M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26\n+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15\n+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207\n+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud\" unicode=\"&#xf0c2;\" horiz-adv-x=\"1920\" \n+d=\"M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"beaker\" unicode=\"&#xf0c3;\" horiz-adv-x=\"1664\" \n+d=\"M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z\" \u002F>\n+    \u003Cglyph glyph-name=\"cut\" unicode=\"&#xf0c4;\" horiz-adv-x=\"1792\" \n+d=\"M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84\n+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148\n+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108\n+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6\n+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"1792\" \n+d=\"M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299\n+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z\" \u002F>\n+    \u003Cglyph glyph-name=\"paper_clip\" unicode=\"&#xf0c6;\" horiz-adv-x=\"1408\" \n+d=\"M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181\n+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" \n+d=\"M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5\n+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z\" \u002F>\n+    \u003Cglyph glyph-name=\"sign_blank\" unicode=\"&#xf0c8;\" \n+d=\"M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"reorder\" unicode=\"&#xf0c9;\" \n+d=\"M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45\n+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"ul\" unicode=\"&#xf0ca;\" horiz-adv-x=\"1792\" \n+d=\"M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5\n+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\n+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ol\" unicode=\"&#xf0cb;\" horiz-adv-x=\"1792\" \n+d=\"M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362\n+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5\n+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216\n+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"strikethrough\" unicode=\"&#xf0cc;\" horiz-adv-x=\"1792\" \n+d=\"M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6\n+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23\n+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z\" \u002F>\n+    \u003Cglyph glyph-name=\"underline\" unicode=\"&#xf0cd;\" \n+d=\"M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47\n+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41\n+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472\n+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z\" \u002F>\n+    \u003Cglyph glyph-name=\"table\" unicode=\"&#xf0ce;\" horiz-adv-x=\"1664\" \n+d=\"M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23\n+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192\n+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192\n+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"magic\" unicode=\"&#xf0d0;\" horiz-adv-x=\"1664\" \n+d=\"M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276\n+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck\" unicode=\"&#xf0d1;\" horiz-adv-x=\"1792\" \n+d=\"M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5\n+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38\n+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"pinterest\" unicode=\"&#xf0d2;\" \n+d=\"M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134\n+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33\n+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"pinterest_sign\" unicode=\"&#xf0d3;\" \n+d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5\n+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5\n+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z\" \u002F>\n+    \u003Cglyph glyph-name=\"google_plus_sign\" unicode=\"&#xf0d4;\" \n+d=\"M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585\n+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"google_plus\" unicode=\"&#xf0d5;\" horiz-adv-x=\"2304\" \n+d=\"M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62\n+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z\" \u002F>\n+    \u003Cglyph glyph-name=\"money\" unicode=\"&#xf0d6;\" horiz-adv-x=\"1920\" \n+d=\"M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384\n+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret_down\" unicode=\"&#xf0d7;\" horiz-adv-x=\"1024\" \n+d=\"M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret_up\" unicode=\"&#xf0d8;\" horiz-adv-x=\"1024\" \n+d=\"M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret_left\" unicode=\"&#xf0d9;\" horiz-adv-x=\"640\" \n+d=\"M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret_right\" unicode=\"&#xf0da;\" horiz-adv-x=\"640\" \n+d=\"M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"columns\" unicode=\"&#xf0db;\" horiz-adv-x=\"1664\" \n+d=\"M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort\" unicode=\"&#xf0dc;\" horiz-adv-x=\"1024\" \n+d=\"M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_down\" unicode=\"&#xf0dd;\" horiz-adv-x=\"1024\" \n+d=\"M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_up\" unicode=\"&#xf0de;\" horiz-adv-x=\"1024\" \n+d=\"M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope_alt\" unicode=\"&#xf0e0;\" horiz-adv-x=\"1792\" \n+d=\"M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123\n+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"linkedin\" unicode=\"&#xf0e1;\" \n+d=\"M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329\n+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"undo\" unicode=\"&#xf0e2;\" \n+d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5\n+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z\" \u002F>\n+    \u003Cglyph glyph-name=\"legal\" unicode=\"&#xf0e3;\" horiz-adv-x=\"1792\" \n+d=\"M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5\n+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14\n+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28\n+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"dashboard\" unicode=\"&#xf0e4;\" horiz-adv-x=\"1792\" \n+d=\"M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5\n+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5\n+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29\n+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment_alt\" unicode=\"&#xf0e5;\" horiz-adv-x=\"1792\" \n+d=\"M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640\n+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5\n+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"comments_alt\" unicode=\"&#xf0e6;\" horiz-adv-x=\"1792\" \n+d=\"M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257\n+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5\n+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129\n+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"bolt\" unicode=\"&#xf0e7;\" horiz-adv-x=\"896\" \n+d=\"M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z\" \u002F>\n+    \u003Cglyph glyph-name=\"sitemap\" unicode=\"&#xf0e8;\" horiz-adv-x=\"1792\" \n+d=\"M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320\n+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"umbrella\" unicode=\"&#xf0e9;\" horiz-adv-x=\"1664\" \n+d=\"M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97\n+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69\n+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"paste\" unicode=\"&#xf0ea;\" horiz-adv-x=\"1792\" \n+d=\"M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28\n+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z\" \u002F>\n+    \u003Cglyph glyph-name=\"light_bulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"1024\" \n+d=\"M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134\n+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47\n+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5\n+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"exchange\" unicode=\"&#xf0ec;\" horiz-adv-x=\"1792\" \n+d=\"M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9\n+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud_download\" unicode=\"&#xf0ed;\" horiz-adv-x=\"1920\" \n+d=\"M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088\n+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud_upload\" unicode=\"&#xf0ee;\" horiz-adv-x=\"1920\" \n+d=\"M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088\n+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"user_md\" unicode=\"&#xf0f0;\" horiz-adv-x=\"1408\" \n+d=\"M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56\n+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68\n+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5\n+t271.5 -112.5t112.5 -271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"stethoscope\" unicode=\"&#xf0f1;\" horiz-adv-x=\"1408\" \n+d=\"M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48\n+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252\n+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"suitcase\" unicode=\"&#xf0f2;\" horiz-adv-x=\"1792\" \n+d=\"M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66\n+t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell_alt\" unicode=\"&#xf0f3;\" horiz-adv-x=\"1792\" \n+d=\"M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5\n+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z\" \u002F>\n+    \u003Cglyph glyph-name=\"coffee\" unicode=\"&#xf0f4;\" horiz-adv-x=\"1920\" \n+d=\"M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45\n+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"food\" unicode=\"&#xf0f5;\" horiz-adv-x=\"1408\" \n+d=\"M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45\n+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"file_text_alt\" unicode=\"&#xf0f6;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704\n+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z\" \u002F>\n+    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf0f7;\" horiz-adv-x=\"1408\" \n+d=\"M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"1408\" \n+d=\"M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z\n+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5\n+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320\n+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"ambulance\" unicode=\"&#xf0f9;\" horiz-adv-x=\"1920\" \n+d=\"M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5\n+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152\n+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"medkit\" unicode=\"&#xf0fa;\" horiz-adv-x=\"1792\" \n+d=\"M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32\n+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"fighter_jet\" unicode=\"&#xf0fb;\" horiz-adv-x=\"1920\" \n+d=\"M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96\n+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z\" \u002F>\n+    \u003Cglyph glyph-name=\"beer\" unicode=\"&#xf0fc;\" horiz-adv-x=\"1664\" \n+d=\"M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z\" \u002F>\n+    \u003Cglyph glyph-name=\"h_sign\" unicode=\"&#xf0fd;\" \n+d=\"M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"f0fe\" unicode=\"&#xf0fe;\" \n+d=\"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"double_angle_left\" unicode=\"&#xf100;\" horiz-adv-x=\"1024\" \n+d=\"M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23\n+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"double_angle_right\" unicode=\"&#xf101;\" horiz-adv-x=\"1024\" \n+d=\"M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23\n+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"double_angle_up\" unicode=\"&#xf102;\" horiz-adv-x=\"1152\" \n+d=\"M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393\n+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"double_angle_down\" unicode=\"&#xf103;\" horiz-adv-x=\"1152\" \n+d=\"M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23\n+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle_left\" unicode=\"&#xf104;\" horiz-adv-x=\"640\" \n+d=\"M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle_right\" unicode=\"&#xf105;\" horiz-adv-x=\"640\" \n+d=\"M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle_up\" unicode=\"&#xf106;\" horiz-adv-x=\"1152\" \n+d=\"M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle_down\" unicode=\"&#xf107;\" horiz-adv-x=\"1152\" \n+d=\"M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"desktop\" unicode=\"&#xf108;\" horiz-adv-x=\"1920\" \n+d=\"M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19\n+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"laptop\" unicode=\"&#xf109;\" horiz-adv-x=\"1920\" \n+d=\"M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z\n+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"tablet\" unicode=\"&#xf10a;\" horiz-adv-x=\"1152\" \n+d=\"M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832\n+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"mobile_phone\" unicode=\"&#xf10b;\" horiz-adv-x=\"768\" \n+d=\"M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136\n+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle_blank\" unicode=\"&#xf10c;\" \n+d=\"M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103\n+t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"quote_left\" unicode=\"&#xf10d;\" horiz-adv-x=\"1664\" \n+d=\"M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z\n+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"quote_right\" unicode=\"&#xf10e;\" horiz-adv-x=\"1664\" \n+d=\"M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216\n+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"spinner\" unicode=\"&#xf110;\" horiz-adv-x=\"1792\" \n+d=\"M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5\n+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z\n+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5\n+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \n+d=\"M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"reply\" unicode=\"&#xf112;\" horiz-adv-x=\"1792\" \n+d=\"M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19\n+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z\" \u002F>\n+    \u003Cglyph glyph-name=\"github_alt\" unicode=\"&#xf113;\" horiz-adv-x=\"1664\" \n+d=\"M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320\n+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86\n+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218\n+q0 -87 -27 -168q136 -160 136 -398z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder_close_alt\" unicode=\"&#xf114;\" horiz-adv-x=\"1664\" \n+d=\"M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320\n+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder_open_alt\" unicode=\"&#xf115;\" horiz-adv-x=\"1920\" \n+d=\"M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68\n+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"expand_alt\" unicode=\"&#xf116;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"collapse_alt\" unicode=\"&#xf117;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" \n+d=\"M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\n+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5\n+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" \n+d=\"M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\n+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204\n+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" \n+d=\"M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\n+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"gamepad\" unicode=\"&#xf11b;\" horiz-adv-x=\"1920\" \n+d=\"M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5\n+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150\n+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z\" \u002F>\n+    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"1920\" \n+d=\"M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16\n+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16\n+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96\n+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896\n+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag_alt\" unicode=\"&#xf11d;\" horiz-adv-x=\"1792\" \n+d=\"M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9\n+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102\n+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag_checkered\" unicode=\"&#xf11e;\" horiz-adv-x=\"1792\" \n+d=\"M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2\n+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266\n+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8\n+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z\" \u002F>\n+    \u003Cglyph glyph-name=\"terminal\" unicode=\"&#xf120;\" horiz-adv-x=\"1664\" \n+d=\"M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9\n+t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"code\" unicode=\"&#xf121;\" horiz-adv-x=\"1920\" \n+d=\"M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5\n+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"reply_all\" unicode=\"&#xf122;\" horiz-adv-x=\"1792\" \n+d=\"M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1\n+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z\" \u002F>\n+    \u003Cglyph glyph-name=\"star_half_empty\" unicode=\"&#xf123;\" horiz-adv-x=\"1664\" \n+d=\"M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5\n+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"location_arrow\" unicode=\"&#xf124;\" horiz-adv-x=\"1408\" \n+d=\"M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"crop\" unicode=\"&#xf125;\" horiz-adv-x=\"1664\" \n+d=\"M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23\n+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"code_fork\" unicode=\"&#xf126;\" horiz-adv-x=\"1024\" \n+d=\"M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5\n+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497\n+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlink\" unicode=\"&#xf127;\" horiz-adv-x=\"1664\" \n+d=\"M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320\n+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18\n+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9\n+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"question\" unicode=\"&#xf128;\" horiz-adv-x=\"1024\" \n+d=\"M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5\n+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_279\" unicode=\"&#xf129;\" horiz-adv-x=\"640\" \n+d=\"M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192\n+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"exclamation\" unicode=\"&#xf12a;\" horiz-adv-x=\"640\" \n+d=\"M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"superscript\" unicode=\"&#xf12b;\" \n+d=\"M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z\n+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5\n+t-65.5 -51.5t-30.5 -63h232v80h126z\" \u002F>\n+    \u003Cglyph glyph-name=\"subscript\" unicode=\"&#xf12c;\" \n+d=\"M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z\n+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73\n+h232v80h126z\" \u002F>\n+    \u003Cglyph glyph-name=\"_283\" unicode=\"&#xf12d;\" horiz-adv-x=\"1920\" \n+d=\"M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"puzzle_piece\" unicode=\"&#xf12e;\" horiz-adv-x=\"1664\" \n+d=\"M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5\n+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89\n+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117\n+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone\" unicode=\"&#xf130;\" horiz-adv-x=\"1152\" \n+d=\"M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5\n+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone_off\" unicode=\"&#xf131;\" horiz-adv-x=\"1408\" \n+d=\"M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128\n+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23\n+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z\" \u002F>\n+    \u003Cglyph glyph-name=\"shield\" unicode=\"&#xf132;\" horiz-adv-x=\"1280\" \n+d=\"M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150\n+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar_empty\" unicode=\"&#xf133;\" horiz-adv-x=\"1664\" \n+d=\"M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280\n+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"fire_extinguisher\" unicode=\"&#xf134;\" horiz-adv-x=\"1408\" \n+d=\"M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800\n+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113\n+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z\" \u002F>\n+    \u003Cglyph glyph-name=\"rocket\" unicode=\"&#xf135;\" horiz-adv-x=\"1664\" \n+d=\"M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1\n+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"maxcdn\" unicode=\"&#xf136;\" horiz-adv-x=\"1792\" \n+d=\"M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_sign_left\" unicode=\"&#xf137;\" \n+d=\"M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\n+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_sign_right\" unicode=\"&#xf138;\" \n+d=\"M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\n+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_sign_up\" unicode=\"&#xf139;\" \n+d=\"M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\n+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron_sign_down\" unicode=\"&#xf13a;\" \n+d=\"M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5\n+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"html5\" unicode=\"&#xf13b;\" horiz-adv-x=\"1408\" \n+d=\"M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z\" \u002F>\n+    \u003Cglyph glyph-name=\"css3\" unicode=\"&#xf13c;\" horiz-adv-x=\"1792\" \n+d=\"M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z\" \u002F>\n+    \u003Cglyph glyph-name=\"anchor\" unicode=\"&#xf13d;\" horiz-adv-x=\"1792\" \n+d=\"M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352\n+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19\n+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlock_alt\" unicode=\"&#xf13e;\" horiz-adv-x=\"1152\" \n+d=\"M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181\n+v-320h736z\" \u002F>\n+    \u003Cglyph glyph-name=\"bullseye\" unicode=\"&#xf140;\" \n+d=\"M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150\n+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640\n+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ellipsis_horizontal\" unicode=\"&#xf141;\" horiz-adv-x=\"1408\" \n+d=\"M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192\n+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"ellipsis_vertical\" unicode=\"&#xf142;\" horiz-adv-x=\"384\" \n+d=\"M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192\n+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"_303\" unicode=\"&#xf143;\" \n+d=\"M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128\n+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"play_sign\" unicode=\"&#xf144;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56\n+q16 -8 32 -8q17 0 32 9z\" \u002F>\n+    \u003Cglyph glyph-name=\"ticket\" unicode=\"&#xf145;\" horiz-adv-x=\"1792\" \n+d=\"M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136\n+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus_sign_alt\" unicode=\"&#xf146;\" \n+d=\"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\n+t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"check_minus\" unicode=\"&#xf147;\" horiz-adv-x=\"1408\" \n+d=\"M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5\n+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"level_up\" unicode=\"&#xf148;\" horiz-adv-x=\"1024\" \n+d=\"M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"level_down\" unicode=\"&#xf149;\" horiz-adv-x=\"1024\" \n+d=\"M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z\" \u002F>\n+    \u003Cglyph glyph-name=\"check_sign\" unicode=\"&#xf14a;\" \n+d=\"M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5\n+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"edit_sign\" unicode=\"&#xf14b;\" \n+d=\"M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120\n+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_312\" unicode=\"&#xf14c;\" \n+d=\"M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960\n+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"share_sign\" unicode=\"&#xf14d;\" \n+d=\"M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5\n+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" \n+d=\"M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\n+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"collapse\" unicode=\"&#xf150;\" \n+d=\"M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120\n+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"collapse_top\" unicode=\"&#xf151;\" \n+d=\"M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_317\" unicode=\"&#xf152;\" \n+d=\"M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5\n+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"eur\" unicode=\"&#xf153;\" horiz-adv-x=\"1024\" \n+d=\"M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9\n+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26\n+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z\" \u002F>\n+    \u003Cglyph glyph-name=\"gbp\" unicode=\"&#xf154;\" horiz-adv-x=\"1024\" \n+d=\"M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7\n+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"usd\" unicode=\"&#xf155;\" horiz-adv-x=\"1024\" \n+d=\"M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43\n+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5\n+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50\n+t53 -63.5t31.5 -76.5t13 -94z\" \u002F>\n+    \u003Cglyph glyph-name=\"inr\" unicode=\"&#xf156;\" horiz-adv-x=\"898\" \n+d=\"M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102\n+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"jpy\" unicode=\"&#xf157;\" horiz-adv-x=\"1027\" \n+d=\"M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61\n+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"rub\" unicode=\"&#xf158;\" horiz-adv-x=\"1280\" \n+d=\"M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128\n+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z\" \u002F>\n+    \u003Cglyph glyph-name=\"krw\" unicode=\"&#xf159;\" horiz-adv-x=\"1792\" \n+d=\"M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23\n+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28\n+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"btc\" unicode=\"&#xf15a;\" horiz-adv-x=\"1280\" \n+d=\"M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164\n+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30\n+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z\" \u002F>\n+    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" \n+d=\"M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z\" \u002F>\n+    \u003Cglyph glyph-name=\"file_text\" unicode=\"&#xf15c;\" \n+d=\"M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704\n+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_by_alphabet\" unicode=\"&#xf15d;\" horiz-adv-x=\"1664\" \n+d=\"M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23\n+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162\n+l230 -662h70z\" \u002F>\n+    \u003Cglyph glyph-name=\"_329\" unicode=\"&#xf15e;\" horiz-adv-x=\"1664\" \n+d=\"M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150\n+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248\n+v119h121z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_by_attributes\" unicode=\"&#xf160;\" horiz-adv-x=\"1792\" \n+d=\"M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832\n+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256\n+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_by_attributes_alt\" unicode=\"&#xf161;\" horiz-adv-x=\"1792\" \n+d=\"M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192\n+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832\n+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_by_order\" unicode=\"&#xf162;\" \n+d=\"M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23\n+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5\n+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort_by_order_alt\" unicode=\"&#xf163;\" \n+d=\"M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9\n+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13\n+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_334\" unicode=\"&#xf164;\" horiz-adv-x=\"1664\" \n+d=\"M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76\n+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5\n+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z\" \u002F>\n+    \u003Cglyph glyph-name=\"_335\" unicode=\"&#xf165;\" horiz-adv-x=\"1664\" \n+d=\"M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135\n+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121\n+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z\" \u002F>\n+    \u003Cglyph glyph-name=\"youtube_sign\" unicode=\"&#xf166;\" \n+d=\"M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15\n+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38\n+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5\n+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38\n+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5\n+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"youtube\" unicode=\"&#xf167;\" \n+d=\"M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73\n+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51\n+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99\n+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51\n+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z\" \u002F>\n+    \u003Cglyph glyph-name=\"xing\" unicode=\"&#xf168;\" horiz-adv-x=\"1408\" \n+d=\"M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942\n+q25 45 64 45h241q22 0 31 -15z\" \u002F>\n+    \u003Cglyph glyph-name=\"xing_sign\" unicode=\"&#xf169;\" \n+d=\"M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1\n+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"youtube_play\" unicode=\"&#xf16a;\" horiz-adv-x=\"1792\" \n+d=\"M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5\n+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136\n+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z\" \u002F>\n+    \u003Cglyph glyph-name=\"dropbox\" unicode=\"&#xf16b;\" horiz-adv-x=\"1792\" \n+d=\"M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z\" \u002F>\n+    \u003Cglyph glyph-name=\"stackexchange\" unicode=\"&#xf16c;\" \n+d=\"M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z\" \u002F>\n+    \u003Cglyph glyph-name=\"instagram\" unicode=\"&#xf16d;\" \n+d=\"M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270\n+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5\n+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317\n+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z\" \u002F>\n+    \u003Cglyph glyph-name=\"flickr\" unicode=\"&#xf16e;\" \n+d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150\n+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z\" \u002F>\n+    \u003Cglyph glyph-name=\"adn\" unicode=\"&#xf170;\" \n+d=\"M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"f171\" unicode=\"&#xf171;\" horiz-adv-x=\"1408\" \n+d=\"M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22\n+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18\n+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5\n+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z\" \u002F>\n+    \u003Cglyph glyph-name=\"bitbucket_sign\" unicode=\"&#xf172;\" \n+d=\"M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5\n+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z\n+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120\n+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"tumblr\" unicode=\"&#xf173;\" horiz-adv-x=\"1024\" \n+d=\"M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14\n+q78 2 134 29z\" \u002F>\n+    \u003Cglyph glyph-name=\"tumblr_sign\" unicode=\"&#xf174;\" \n+d=\"M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z\n+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"long_arrow_down\" unicode=\"&#xf175;\" horiz-adv-x=\"768\" \n+d=\"M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"long_arrow_up\" unicode=\"&#xf176;\" horiz-adv-x=\"768\" \n+d=\"M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z\" \u002F>\n+    \u003Cglyph glyph-name=\"long_arrow_left\" unicode=\"&#xf177;\" horiz-adv-x=\"1792\" \n+d=\"M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"long_arrow_right\" unicode=\"&#xf178;\" horiz-adv-x=\"1792\" \n+d=\"M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"apple\" unicode=\"&#xf179;\" horiz-adv-x=\"1408\" \n+d=\"M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65\n+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z\" \u002F>\n+    \u003Cglyph glyph-name=\"windows\" unicode=\"&#xf17a;\" horiz-adv-x=\"1664\" \n+d=\"M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z\" \u002F>\n+    \u003Cglyph glyph-name=\"android\" unicode=\"&#xf17b;\" horiz-adv-x=\"1408\" \n+d=\"M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30\n+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5\n+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"linux\" unicode=\"&#xf17c;\" \n+d=\"M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z\n+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7\n+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15\n+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5\n+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19\n+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63\n+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92\n+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152\n+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4\n+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5\n+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43\n+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49\n+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54\n+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5\n+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5\n+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"dribble\" unicode=\"&#xf17d;\" \n+d=\"M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81\n+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19\n+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6\n+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"skype\" unicode=\"&#xf17e;\" \n+d=\"M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5\n+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5\n+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80\n+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z\" \u002F>\n+    \u003Cglyph glyph-name=\"foursquare\" unicode=\"&#xf180;\" horiz-adv-x=\"1280\" \n+d=\"M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z\n+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324\n+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"trello\" unicode=\"&#xf181;\" \n+d=\"M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408\n+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"female\" unicode=\"&#xf182;\" horiz-adv-x=\"1280\" \n+d=\"M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43\n+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"male\" unicode=\"&#xf183;\" horiz-adv-x=\"1024\" \n+d=\"M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z\n+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"gittip\" unicode=\"&#xf184;\" \n+d=\"M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\n+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" horiz-adv-x=\"1792\" \n+d=\"M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4\n+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94\n+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z\" \u002F>\n+    \u003Cglyph glyph-name=\"_366\" unicode=\"&#xf186;\" \n+d=\"M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61\n+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z\" \u002F>\n+    \u003Cglyph glyph-name=\"archive\" unicode=\"&#xf187;\" horiz-adv-x=\"1792\" \n+d=\"M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536\n+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"bug\" unicode=\"&#xf188;\" horiz-adv-x=\"1664\" \n+d=\"M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207\n+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19\n+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"vk\" unicode=\"&#xf189;\" horiz-adv-x=\"1920\" \n+d=\"M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58\n+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6\n+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24\n+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2\n+q39 5 64 -2.5t31 -16.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"weibo\" unicode=\"&#xf18a;\" horiz-adv-x=\"1792\" \n+d=\"M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12\n+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422\n+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178\n+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z\n+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"renren\" unicode=\"&#xf18b;\" \n+d=\"M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495\n+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_372\" unicode=\"&#xf18c;\" horiz-adv-x=\"1408\" \n+d=\"M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5\n+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56\n+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5\n+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"stack_exchange\" unicode=\"&#xf18d;\" horiz-adv-x=\"1280\" \n+d=\"M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"_374\" unicode=\"&#xf18e;\" \n+d=\"M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198\n+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow_circle_alt_left\" unicode=\"&#xf190;\" \n+d=\"M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198\n+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_376\" unicode=\"&#xf191;\" \n+d=\"M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z\n+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"dot_circle_alt\" unicode=\"&#xf192;\" \n+d=\"M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5\n+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_378\" unicode=\"&#xf193;\" horiz-adv-x=\"1664\" \n+d=\"M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128\n+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z\" \u002F>\n+    \u003Cglyph glyph-name=\"vimeo_square\" unicode=\"&#xf194;\" \n+d=\"M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179\n+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_380\" unicode=\"&#xf195;\" horiz-adv-x=\"1152\" \n+d=\"M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160\n+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus_square_o\" unicode=\"&#xf196;\" horiz-adv-x=\"1408\" \n+d=\"M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832\n+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_382\" unicode=\"&#xf197;\" horiz-adv-x=\"2176\" \n+d=\"M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40\n+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29\n+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"_383\" unicode=\"&#xf198;\" horiz-adv-x=\"1664\" \n+d=\"M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9\n+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102\n+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z\" \u002F>\n+    \u003Cglyph glyph-name=\"_384\" unicode=\"&#xf199;\" \n+d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69\n+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13\n+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_385\" unicode=\"&#xf19a;\" horiz-adv-x=\"1792\" \n+d=\"M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5\n+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21\n+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286\n+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273\n+t273 -182.5t331.5 -68z\" \u002F>\n+    \u003Cglyph glyph-name=\"_386\" unicode=\"&#xf19b;\" horiz-adv-x=\"1792\" \n+d=\"M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z\" \u002F>\n+    \u003Cglyph glyph-name=\"_387\" unicode=\"&#xf19c;\" horiz-adv-x=\"2048\" \n+d=\"M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64\n+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z\" \u002F>\n+    \u003Cglyph glyph-name=\"_388\" unicode=\"&#xf19d;\" horiz-adv-x=\"2304\" \n+d=\"M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433\n+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z\" \u002F>\n+    \u003Cglyph glyph-name=\"_389\" unicode=\"&#xf19e;\" \n+d=\"M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0\n+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1A0\" unicode=\"&#xf1a0;\" \n+d=\"M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5\n+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z\" \u002F>\n+    \u003Cglyph glyph-name=\"f1a1\" unicode=\"&#xf1a1;\" horiz-adv-x=\"1792\" \n+d=\"M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26\n+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37\n+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191\n+t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_392\" unicode=\"&#xf1a2;\" \n+d=\"M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54\n+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83\n+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960\n+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_393\" unicode=\"&#xf1a3;\" \n+d=\"M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150\n+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103\n+t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"f1a4\" unicode=\"&#xf1a4;\" horiz-adv-x=\"1920\" \n+d=\"M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328\n+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z\" \u002F>\n+    \u003Cglyph glyph-name=\"_395\" unicode=\"&#xf1a5;\" \n+d=\"M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\n+t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_396\" unicode=\"&#xf1a6;\" horiz-adv-x=\"2048\" \n+d=\"M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123\n+v-369h123z\" \u002F>\n+    \u003Cglyph glyph-name=\"_397\" unicode=\"&#xf1a7;\" \n+d=\"M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101\n+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960\n+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_398\" unicode=\"&#xf1a8;\" horiz-adv-x=\"2038\" \n+d=\"M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14\n+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24\n+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33\n+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5\n+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43\n+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5\n+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13\n+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z\" \u002F>\n+    \u003Cglyph glyph-name=\"_399\" unicode=\"&#xf1a9;\" \n+d=\"M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10\n+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14\n+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14\n+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44\n+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_400\" unicode=\"&#xf1aa;\" \n+d=\"M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z\n+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5\n+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5\n+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126\n+t135.5 51q85 0 145 -60.5t60 -145.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"f1ab\" unicode=\"&#xf1ab;\" \n+d=\"M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5\n+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28\n+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z\n+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11\n+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5\n+q20 0 20 -21v-418z\" \u002F>\n+    \u003Cglyph glyph-name=\"_402\" unicode=\"&#xf1ac;\" horiz-adv-x=\"1792\" \n+d=\"M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48\n+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23\n+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128\n+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128\n+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z\" \u002F>\n+    \u003Cglyph glyph-name=\"_403\" unicode=\"&#xf1ad;\" \n+d=\"M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9\n+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64\n+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64\n+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9\n+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64\n+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64\n+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9\n+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_404\" unicode=\"&#xf1ae;\" horiz-adv-x=\"1280\" \n+d=\"M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152\n+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1B1\" unicode=\"&#xf1b0;\" horiz-adv-x=\"1664\" \n+d=\"M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5\n+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819\n+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5\n+t100.5 134t141.5 55.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_406\" unicode=\"&#xf1b1;\" horiz-adv-x=\"768\" \n+d=\"M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_407\" unicode=\"&#xf1b2;\" horiz-adv-x=\"1792\" \n+d=\"M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"_408\" unicode=\"&#xf1b3;\" horiz-adv-x=\"2304\" \n+d=\"M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67\n+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70\n+v-400l434 -186q36 -16 57 -48t21 -70z\" \u002F>\n+    \u003Cglyph glyph-name=\"_409\" unicode=\"&#xf1b4;\" horiz-adv-x=\"2048\" \n+d=\"M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658\n+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204\n+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z\" \u002F>\n+    \u003Cglyph glyph-name=\"_410\" unicode=\"&#xf1b5;\" \n+d=\"M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5\n+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217\n+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z\" \u002F>\n+    \u003Cglyph glyph-name=\"_411\" unicode=\"&#xf1b6;\" horiz-adv-x=\"1792\" \n+d=\"M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5\n+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89\n+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_412\" unicode=\"&#xf1b7;\" \n+d=\"M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5\n+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5\n+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"_413\" unicode=\"&#xf1b8;\" horiz-adv-x=\"1792\" \n+d=\"M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188\n+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5\n+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1\n+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z\" \u002F>\n+    \u003Cglyph glyph-name=\"_414\" unicode=\"&#xf1b9;\" horiz-adv-x=\"2048\" \n+d=\"M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384\n+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5\n+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_415\" unicode=\"&#xf1ba;\" horiz-adv-x=\"2048\" \n+d=\"M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5\n+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z\n+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z\" \u002F>\n+    \u003Cglyph glyph-name=\"_416\" unicode=\"&#xf1bb;\" \n+d=\"M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384\n+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"_417\" unicode=\"&#xf1bc;\" \n+d=\"M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64\n+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37\n+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_418\" unicode=\"&#xf1bd;\" horiz-adv-x=\"1024\" \n+d=\"M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z\" \u002F>\n+    \u003Cglyph glyph-name=\"_419\" unicode=\"&#xf1be;\" horiz-adv-x=\"2304\" \n+d=\"M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11\n+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245\n+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785\n+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242\n+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236\n+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786\n+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1C0\" unicode=\"&#xf1c0;\" \n+d=\"M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127\n+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5\n+t-103 128v128q0 69 103 128t280 93.5t385 34.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1C1\" unicode=\"&#xf1c1;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197\n+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8\n+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z\" \u002F>\n+    \u003Cglyph glyph-name=\"_422\" unicode=\"&#xf1c2;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5\n+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z\" \u002F>\n+    \u003Cglyph glyph-name=\"_423\" unicode=\"&#xf1c3;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107\n+h-290v-107h68l189 -272l-194 -283h-68z\" \u002F>\n+    \u003Cglyph glyph-name=\"_424\" unicode=\"&#xf1c4;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z\" \u002F>\n+    \u003Cglyph glyph-name=\"_425\" unicode=\"&#xf1c5;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z\" \u002F>\n+    \u003Cglyph glyph-name=\"_426\" unicode=\"&#xf1c6;\" \n+d=\"M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400\n+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79\n+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"_427\" unicode=\"&#xf1c7;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5\n+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z\" \u002F>\n+    \u003Cglyph glyph-name=\"_428\" unicode=\"&#xf1c8;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z\" \u002F>\n+    \u003Cglyph glyph-name=\"_429\" unicode=\"&#xf1c9;\" \n+d=\"M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z\n+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243\n+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_430\" unicode=\"&#xf1ca;\" \n+d=\"M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406\n+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z\" \u002F>\n+    \u003Cglyph glyph-name=\"_431\" unicode=\"&#xf1cb;\" horiz-adv-x=\"1792\" \n+d=\"M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546\n+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"_432\" unicode=\"&#xf1cc;\" horiz-adv-x=\"2048\" \n+d=\"M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94\n+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55\n+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_433\" unicode=\"&#xf1cd;\" horiz-adv-x=\"1792\" \n+d=\"M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194\n+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5\n+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z\" \u002F>\n+    \u003Cglyph glyph-name=\"_434\" unicode=\"&#xf1ce;\" horiz-adv-x=\"1792\" \n+d=\"M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5\n+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D0\" unicode=\"&#xf1d0;\" horiz-adv-x=\"1792\" \n+d=\"M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41\n+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170\n+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136\n+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D1\" unicode=\"&#xf1d1;\" horiz-adv-x=\"1792\" \n+d=\"M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251\n+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162\n+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33\n+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5\n+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71\n+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D2\" unicode=\"&#xf1d2;\" \n+d=\"M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85\n+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392\n+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072\n+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_438\" unicode=\"&#xf1d3;\" horiz-adv-x=\"1792\" \n+d=\"M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58\n+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47\n+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171\n+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_439\" unicode=\"&#xf1d4;\" \n+d=\"M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D5\" unicode=\"&#xf1d5;\" horiz-adv-x=\"1280\" \n+d=\"M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5\n+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153\n+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D6\" unicode=\"&#xf1d6;\" horiz-adv-x=\"1792\" \n+d=\"M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5\n+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20\n+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5\n+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1D7\" unicode=\"&#xf1d7;\" horiz-adv-x=\"2048\" \n+d=\"M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25\n+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5\n+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109\n+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_443\" unicode=\"&#xf1d8;\" horiz-adv-x=\"1792\" \n+d=\"M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"_444\" unicode=\"&#xf1d9;\" horiz-adv-x=\"1792\" \n+d=\"M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137\n+l863 639l-478 -797z\" \u002F>\n+    \u003Cglyph glyph-name=\"_445\" unicode=\"&#xf1da;\" \n+d=\"M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5\n+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23\n+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_446\" unicode=\"&#xf1db;\" \n+d=\"M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103\n+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_447\" unicode=\"&#xf1dc;\" horiz-adv-x=\"1792\" \n+d=\"M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15\n+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2\n+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160\n+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5\n+q0 -26 -12 -48t-36 -22z\" \u002F>\n+    \u003Cglyph glyph-name=\"_448\" unicode=\"&#xf1dd;\" horiz-adv-x=\"1280\" \n+d=\"M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179\n+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z\" \u002F>\n+    \u003Cglyph glyph-name=\"_449\" unicode=\"&#xf1de;\" \n+d=\"M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256\n+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1E0\" unicode=\"&#xf1e0;\" \n+d=\"M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5\n+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z\" \u002F>\n+    \u003Cglyph glyph-name=\"_451\" unicode=\"&#xf1e1;\" \n+d=\"M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5\n+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_452\" unicode=\"&#xf1e2;\" horiz-adv-x=\"1792\" \n+d=\"M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5\n+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91\n+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9\n+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_453\" unicode=\"&#xf1e3;\" horiz-adv-x=\"1792\" \n+d=\"M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323\n+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z\" \u002F>\n+    \u003Cglyph glyph-name=\"_454\" unicode=\"&#xf1e4;\" horiz-adv-x=\"1792\" \n+d=\"M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23\n+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192\n+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23\n+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5\n+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z\" \u002F>\n+    \u003Cglyph glyph-name=\"_455\" unicode=\"&#xf1e5;\" horiz-adv-x=\"1792\" \n+d=\"M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z\n+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_456\" unicode=\"&#xf1e6;\" horiz-adv-x=\"1792\" \n+d=\"M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234\n+l401 400q38 37 91 37t90 -37z\" \u002F>\n+    \u003Cglyph glyph-name=\"_457\" unicode=\"&#xf1e7;\" horiz-adv-x=\"1792\" \n+d=\"M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5\n+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z\n+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7\n+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z\" \u002F>\n+    \u003Cglyph glyph-name=\"_458\" unicode=\"&#xf1e8;\" horiz-adv-x=\"1792\" \n+d=\"M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z\" \u002F>\n+    \u003Cglyph glyph-name=\"_459\" unicode=\"&#xf1e9;\" \n+d=\"M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36\n+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5\n+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87\n+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z\" \u002F>\n+    \u003Cglyph glyph-name=\"_460\" unicode=\"&#xf1ea;\" horiz-adv-x=\"2048\" \n+d=\"M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19\n+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z\" \u002F>\n+    \u003Cglyph glyph-name=\"_461\" unicode=\"&#xf1eb;\" horiz-adv-x=\"2048\" \n+d=\"M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121\n+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z\n+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z\" \u002F>\n+    \u003Cglyph glyph-name=\"_462\" unicode=\"&#xf1ec;\" horiz-adv-x=\"1792\" \n+d=\"M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5\n+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5\n+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5\n+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z\n+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38\n+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_463\" unicode=\"&#xf1ed;\" \n+d=\"M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246\n+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598\n+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z\" \u002F>\n+    \u003Cglyph glyph-name=\"_464\" unicode=\"&#xf1ee;\" horiz-adv-x=\"1792\" \n+d=\"M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640\n+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF1F0\" unicode=\"&#xf1f0;\" horiz-adv-x=\"2304\" \n+d=\"M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27\n+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128\n+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_466\" unicode=\"&#xf1f1;\" horiz-adv-x=\"2304\" \n+d=\"M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249\n+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z\n+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32\n+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4\n+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75\n+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14\n+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22\n+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12\n+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122\n+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5\n+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_467\" unicode=\"&#xf1f2;\" horiz-adv-x=\"2304\" \n+d=\"M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42\n+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604\n+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569\n+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73\n+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z\" \u002F>\n+    \u003Cglyph glyph-name=\"f1f3\" unicode=\"&#xf1f3;\" horiz-adv-x=\"2304\" \n+d=\"M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z\n+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260\n+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279\n+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040\n+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168\n+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5\n+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21\n+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5\n+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z\" \u002F>\n+    \u003Cglyph glyph-name=\"_469\" unicode=\"&#xf1f4;\" horiz-adv-x=\"2304\" \n+d=\"M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16\n+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76\n+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59\n+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489\n+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66\n+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_470\" unicode=\"&#xf1f5;\" horiz-adv-x=\"2304\" \n+d=\"M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109\n+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118\n+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151\n+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31\n+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_471\" unicode=\"&#xf1f6;\" horiz-adv-x=\"2048\" \n+d=\"M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5\n+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5\n+l418 363q10 8 23.5 7t21.5 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"_472\" unicode=\"&#xf1f7;\" horiz-adv-x=\"2048\" \n+d=\"M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128\n+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161\n+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"_473\" unicode=\"&#xf1f8;\" horiz-adv-x=\"1408\" \n+d=\"M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704\n+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167\n+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_474\" unicode=\"&#xf1f9;\" \n+d=\"M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5\n+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5\n+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_475\" unicode=\"&#xf1fa;\" \n+d=\"M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53\n+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24\n+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61\n+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z\" \u002F>\n+    \u003Cglyph glyph-name=\"_476\" unicode=\"&#xf1fb;\" horiz-adv-x=\"1792\" \n+d=\"M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10\n+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"f1fc\" unicode=\"&#xf1fc;\" horiz-adv-x=\"1792\" \n+d=\"M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5\n+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_478\" unicode=\"&#xf1fd;\" horiz-adv-x=\"1792\" \n+d=\"M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5\n+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38\n+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448\n+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5\n+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z\" \u002F>\n+    \u003Cglyph glyph-name=\"_479\" unicode=\"&#xf1fe;\" horiz-adv-x=\"2048\" \n+d=\"M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z\" \u002F>\n+    \u003Cglyph glyph-name=\"_480\" unicode=\"&#xf200;\" horiz-adv-x=\"1792\" \n+d=\"M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_481\" unicode=\"&#xf201;\" horiz-adv-x=\"2048\" \n+d=\"M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9\n+t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_482\" unicode=\"&#xf202;\" horiz-adv-x=\"1792\" \n+d=\"M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20\n+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50\n+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1\n+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z\" \u002F>\n+    \u003Cglyph glyph-name=\"_483\" unicode=\"&#xf203;\" \n+d=\"M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73\n+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110\n+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960\n+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_484\" unicode=\"&#xf204;\" horiz-adv-x=\"2048\" \n+d=\"M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5\n+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5\n+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_485\" unicode=\"&#xf205;\" horiz-adv-x=\"2048\" \n+d=\"M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5\n+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_486\" unicode=\"&#xf206;\" horiz-adv-x=\"2304\" \n+d=\"M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94\n+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469\n+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400\n+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_487\" unicode=\"&#xf207;\" \n+d=\"M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5\n+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5\n+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z\" \u002F>\n+    \u003Cglyph glyph-name=\"_488\" unicode=\"&#xf208;\" horiz-adv-x=\"2048\" \n+d=\"M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327\n+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5\n+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z\" \u002F>\n+    \u003Cglyph glyph-name=\"_489\" unicode=\"&#xf209;\" horiz-adv-x=\"1280\" \n+d=\"M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119\n+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5\n+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14\n+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88\n+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5\n+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_490\" unicode=\"&#xf20a;\" horiz-adv-x=\"2048\" \n+d=\"M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206\n+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307\n+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14\n+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z\" \u002F>\n+    \u003Cglyph glyph-name=\"_491\" unicode=\"&#xf20b;\" \n+d=\"M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5\n+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_492\" unicode=\"&#xf20c;\" \n+d=\"M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55\n+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410\n+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z\" \u002F>\n+    \u003Cglyph glyph-name=\"_493\" unicode=\"&#xf20d;\" \n+d=\"M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z\" \u002F>\n+    \u003Cglyph glyph-name=\"_494\" unicode=\"&#xf20e;\" horiz-adv-x=\"2048\" \n+d=\"M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335\n+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5\n+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438\n+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66\n+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946\n+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82\n+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z\" \u002F>\n+    \u003Cglyph glyph-name=\"f210\" unicode=\"&#xf210;\" \n+d=\"M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z\" \u002F>\n+    \u003Cglyph glyph-name=\"_496\" unicode=\"&#xf211;\" \n+d=\"M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384\n+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z\" \u002F>\n+    \u003Cglyph glyph-name=\"f212\" unicode=\"&#xf212;\" horiz-adv-x=\"2048\" \n+d=\"M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021\n+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25\n+q209 0 374 -102q172 107 374 102z\" \u002F>\n+    \u003Cglyph glyph-name=\"_498\" unicode=\"&#xf213;\" horiz-adv-x=\"2048\" \n+d=\"M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101\n+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284\n+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_499\" unicode=\"&#xf214;\" \n+d=\"M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34\n+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114\n+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z\n+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378\n+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51\n+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5\n+t-43 -34t-16.5 -53.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_500\" unicode=\"&#xf215;\" horiz-adv-x=\"2048\" \n+d=\"M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832\n+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_501\" unicode=\"&#xf216;\" horiz-adv-x=\"2048\" \n+d=\"M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5\n+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113\n+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5\n+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z\" \u002F>\n+    \u003Cglyph glyph-name=\"_502\" unicode=\"&#xf217;\" horiz-adv-x=\"1664\" \n+d=\"M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\n+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920\n+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"_503\" unicode=\"&#xf218;\" horiz-adv-x=\"1664\" \n+d=\"M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5\n+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920\n+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"_504\" unicode=\"&#xf219;\" horiz-adv-x=\"2048\" \n+d=\"M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20\n+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z\" \u002F>\n+    \u003Cglyph glyph-name=\"_505\" unicode=\"&#xf21a;\" horiz-adv-x=\"2048\" \n+d=\"M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83\n+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83\n+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314\n+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83\n+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_506\" unicode=\"&#xf21b;\" \n+d=\"M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14\n+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5\n+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31\n+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_507\" unicode=\"&#xf21c;\" horiz-adv-x=\"2304\" \n+d=\"M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5\n+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105\n+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226\n+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z\" \u002F>\n+    \u003Cglyph glyph-name=\"_508\" unicode=\"&#xf21d;\" \n+d=\"M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12\n+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384\n+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5\n+t158.5 -65.5t65.5 -158.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_509\" unicode=\"&#xf21e;\" horiz-adv-x=\"1792\" \n+d=\"M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221\n+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124\n+t127 -344z\" \u002F>\n+    \u003Cglyph glyph-name=\"venus\" unicode=\"&#xf221;\" horiz-adv-x=\"1280\" \n+d=\"M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292\n+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_511\" unicode=\"&#xf222;\" \n+d=\"M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5\n+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_512\" unicode=\"&#xf223;\" horiz-adv-x=\"1280\" \n+d=\"M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5\n+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\n+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_513\" unicode=\"&#xf224;\" \n+d=\"M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64\n+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\n+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_514\" unicode=\"&#xf225;\" horiz-adv-x=\"1792\" \n+d=\"M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64\n+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9\n+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5\n+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_515\" unicode=\"&#xf226;\" horiz-adv-x=\"1792\" \n+d=\"M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23\n+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391\n+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391\n+q0 -226 -154 -391q103 -57 218 -57z\" \u002F>\n+    \u003Cglyph glyph-name=\"_516\" unicode=\"&#xf227;\" horiz-adv-x=\"1920\" \n+d=\"M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230\n+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9\n+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128\n+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z\" \u002F>\n+    \u003Cglyph glyph-name=\"_517\" unicode=\"&#xf228;\" horiz-adv-x=\"2048\" \n+d=\"M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23\n+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9\n+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5\n+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z\" \u002F>\n+    \u003Cglyph glyph-name=\"_518\" unicode=\"&#xf229;\" \n+d=\"M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5\n+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5\n+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_519\" unicode=\"&#xf22a;\" horiz-adv-x=\"1280\" \n+d=\"M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22\n+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5\n+t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_520\" unicode=\"&#xf22b;\" horiz-adv-x=\"2048\" \n+d=\"M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5\n+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5\n+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_521\" unicode=\"&#xf22c;\" horiz-adv-x=\"1280\" \n+d=\"M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5\n+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_522\" unicode=\"&#xf22d;\" horiz-adv-x=\"1280\" \n+d=\"M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123\n+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_523\" unicode=\"&#xf22e;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"_524\" unicode=\"&#xf22f;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"_525\" unicode=\"&#xf230;\" \n+d=\"M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z\" \u002F>\n+    \u003Cglyph glyph-name=\"_526\" unicode=\"&#xf231;\" horiz-adv-x=\"1280\" \n+d=\"M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5\n+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5\n+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_527\" unicode=\"&#xf232;\" \n+d=\"M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5\n+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233\n+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z\" \u002F>\n+    \u003Cglyph glyph-name=\"_528\" unicode=\"&#xf233;\" horiz-adv-x=\"1792\" \n+d=\"M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216\n+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z\" \u002F>\n+    \u003Cglyph glyph-name=\"_529\" unicode=\"&#xf234;\" horiz-adv-x=\"2048\" \n+d=\"M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5\n+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5\n+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z\" \u002F>\n+    \u003Cglyph glyph-name=\"_530\" unicode=\"&#xf235;\" horiz-adv-x=\"2048\" \n+d=\"M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136\n+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69\n+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z\" \u002F>\n+    \u003Cglyph glyph-name=\"_531\" unicode=\"&#xf236;\" horiz-adv-x=\"2048\" \n+d=\"M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704\n+q-26 0 -45 -19t-19 -45v-384h1152z\" \u002F>\n+    \u003Cglyph glyph-name=\"_532\" unicode=\"&#xf237;\" \n+d=\"M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z\" \u002F>\n+    \u003Cglyph glyph-name=\"_533\" unicode=\"&#xf238;\" \n+d=\"M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56\n+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z\" \u002F>\n+    \u003Cglyph glyph-name=\"_534\" unicode=\"&#xf239;\" \n+d=\"M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47\n+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z\" \u002F>\n+    \u003Cglyph glyph-name=\"_535\" unicode=\"&#xf23a;\" horiz-adv-x=\"1792\" \n+d=\"M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116\n+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z\" \u002F>\n+    \u003Cglyph glyph-name=\"_536\" unicode=\"&#xf23b;\" \n+d=\"M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z\" \u002F>\n+    \u003Cglyph glyph-name=\"_537\" unicode=\"&#xf23c;\" horiz-adv-x=\"2296\" \n+d=\"M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5\n+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5\n+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42\n+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37\n+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5\n+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139\n+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8\n+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132\n+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132\n+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z\n+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86\n+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103\n+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4\n+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130\n+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150\n+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12\n+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z\" \u002F>\n+    \u003Cglyph glyph-name=\"_538\" unicode=\"&#xf23d;\" horiz-adv-x=\"2304\" \n+d=\"M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5\n+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5\n+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_539\" unicode=\"&#xf23e;\" horiz-adv-x=\"1792\" \n+d=\"M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348\n+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23\n+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96\n+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512\n+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z\" \u002F>\n+    \u003Cglyph glyph-name=\"_540\" unicode=\"&#xf240;\" horiz-adv-x=\"2304\" \n+d=\"M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113\n+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_541\" unicode=\"&#xf241;\" horiz-adv-x=\"2304\" \n+d=\"M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\n+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_542\" unicode=\"&#xf242;\" horiz-adv-x=\"2304\" \n+d=\"M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\n+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_543\" unicode=\"&#xf243;\" horiz-adv-x=\"2304\" \n+d=\"M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9\n+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_544\" unicode=\"&#xf244;\" horiz-adv-x=\"2304\" \n+d=\"M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23\n+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_545\" unicode=\"&#xf245;\" horiz-adv-x=\"1280\" \n+d=\"M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"_546\" unicode=\"&#xf246;\" horiz-adv-x=\"1024\" \n+d=\"M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z\" \u002F>\n+    \u003Cglyph glyph-name=\"_547\" unicode=\"&#xf247;\" horiz-adv-x=\"2048\" \n+d=\"M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128\n+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z\" \u002F>\n+    \u003Cglyph glyph-name=\"_548\" unicode=\"&#xf248;\" horiz-adv-x=\"2304\" \n+d=\"M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256\n+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"_549\" unicode=\"&#xf249;\" \n+d=\"M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z\" \u002F>\n+    \u003Cglyph glyph-name=\"_550\" unicode=\"&#xf24a;\" \n+d=\"M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"_551\" unicode=\"&#xf24b;\" horiz-adv-x=\"2304\" \n+d=\"M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5\n+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88\n+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90\n+t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_552\" unicode=\"&#xf24c;\" horiz-adv-x=\"2304\" \n+d=\"M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294\n+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z\n+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_553\" unicode=\"&#xf24d;\" horiz-adv-x=\"1792\" \n+d=\"M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113\n+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"_554\" unicode=\"&#xf24e;\" horiz-adv-x=\"2304\" \n+d=\"M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64\n+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91\n+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5\n+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z\" \u002F>\n+    \u003Cglyph glyph-name=\"_555\" unicode=\"&#xf250;\" \n+d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\n+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5\n+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_556\" unicode=\"&#xf251;\" \n+d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\n+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z\" \u002F>\n+    \u003Cglyph glyph-name=\"_557\" unicode=\"&#xf252;\" \n+d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\n+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z\" \u002F>\n+    \u003Cglyph glyph-name=\"_558\" unicode=\"&#xf253;\" \n+d=\"M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9\n+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196\n+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_559\" unicode=\"&#xf254;\" \n+d=\"M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87\n+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9\n+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z\" \u002F>\n+    \u003Cglyph glyph-name=\"_560\" unicode=\"&#xf255;\" \n+d=\"M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25\n+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27\n+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21\n+q72 69 174 69z\" \u002F>\n+    \u003Cglyph glyph-name=\"_561\" unicode=\"&#xf256;\" horiz-adv-x=\"1792\" \n+d=\"M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33\n+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52\n+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_562\" unicode=\"&#xf257;\" horiz-adv-x=\"1792\" \n+d=\"M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668\n+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17\n+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5\n+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5\n+q0 -42 -23 -78t-61 -53l-310 -141h91z\" \u002F>\n+    \u003Cglyph glyph-name=\"_563\" unicode=\"&#xf258;\" horiz-adv-x=\"2048\" \n+d=\"M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32\n+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68\n+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z\" \u002F>\n+    \u003Cglyph glyph-name=\"_564\" unicode=\"&#xf259;\" horiz-adv-x=\"2048\" \n+d=\"M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79\n+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24\n+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26\n+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z\" \u002F>\n+    \u003Cglyph glyph-name=\"_565\" unicode=\"&#xf25a;\" horiz-adv-x=\"1792\" \n+d=\"M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5\n+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5\n+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32\n+v-384h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"_566\" unicode=\"&#xf25b;\" \n+d=\"M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181\n+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46\n+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5\n+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308\n+q0 -53 37.5 -90.5t90.5 -37.5h668z\" \u002F>\n+    \u003Cglyph glyph-name=\"_567\" unicode=\"&#xf25c;\" horiz-adv-x=\"1973\" \n+d=\"M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5\n+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141\n+q13 0 22 -8.5t10 -20.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_568\" unicode=\"&#xf25d;\" horiz-adv-x=\"1792\" \n+d=\"M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109\n+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640\n+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_569\" unicode=\"&#xf25e;\" horiz-adv-x=\"1792\" \n+d=\"M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78\n+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5\n+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376\n+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191\n+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z\" \u002F>\n+    \u003Cglyph glyph-name=\"f260\" unicode=\"&#xf260;\" horiz-adv-x=\"2048\" \n+d=\"M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z\" \u002F>\n+    \u003Cglyph glyph-name=\"f261\" unicode=\"&#xf261;\" horiz-adv-x=\"1792\" \n+d=\"M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191\n+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_572\" unicode=\"&#xf262;\" horiz-adv-x=\"2304\" \n+d=\"M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57\n+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197\n+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5\n+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5\n+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5\n+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z\" \u002F>\n+    \u003Cglyph glyph-name=\"f263\" unicode=\"&#xf263;\" horiz-adv-x=\"1280\" \n+d=\"M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5\n+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94\n+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z\" \u002F>\n+    \u003Cglyph glyph-name=\"_574\" unicode=\"&#xf264;\" \n+d=\"M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32\n+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5\n+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_575\" unicode=\"&#xf265;\" horiz-adv-x=\"1720\" \n+d=\"M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33\n+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z\" \u002F>\n+    \u003Cglyph glyph-name=\"_576\" unicode=\"&#xf266;\" horiz-adv-x=\"2304\" \n+d=\"M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540\n+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81\n+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z\" \u002F>\n+    \u003Cglyph glyph-name=\"_577\" unicode=\"&#xf267;\" horiz-adv-x=\"1792\" \n+d=\"M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640\n+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5\n+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5\n+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5\n+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191\n+t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_578\" unicode=\"&#xf268;\" horiz-adv-x=\"1792\" \n+d=\"M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962\n+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_579\" unicode=\"&#xf269;\" horiz-adv-x=\"1792\" \n+d=\"M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5\n+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5\n+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_580\" unicode=\"&#xf26a;\" horiz-adv-x=\"1792\" \n+d=\"M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339\n+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"_581\" unicode=\"&#xf26b;\" horiz-adv-x=\"1792\" \n+d=\"M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606\n+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z\n+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z\" \u002F>\n+    \u003Cglyph glyph-name=\"_582\" unicode=\"&#xf26c;\" horiz-adv-x=\"2048\" \n+d=\"M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23\n+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"_583\" unicode=\"&#xf26d;\" horiz-adv-x=\"1792\" \n+d=\"M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34\n+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100\n+q-68 175 -180 287z\" \u002F>\n+    \u003Cglyph glyph-name=\"_584\" unicode=\"&#xf26e;\" \n+d=\"M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6\n+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13\n+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249\n+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183\n+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46\n+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z\" \u002F>\n+    \u003Cglyph glyph-name=\"_585\" unicode=\"&#xf270;\" horiz-adv-x=\"1792\" \n+d=\"M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z\n+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30\n+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57\n+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133\n+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_586\" unicode=\"&#xf271;\" horiz-adv-x=\"1792\" \n+d=\"M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9\n+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224\n+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z\" \u002F>\n+    \u003Cglyph glyph-name=\"_587\" unicode=\"&#xf272;\" horiz-adv-x=\"1792\" \n+d=\"M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23\n+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47\n+t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_588\" unicode=\"&#xf273;\" horiz-adv-x=\"1792\" \n+d=\"M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z\n+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280\n+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_589\" unicode=\"&#xf274;\" horiz-adv-x=\"1792\" \n+d=\"M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23\n+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47\n+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z\" \u002F>\n+    \u003Cglyph glyph-name=\"_590\" unicode=\"&#xf275;\" horiz-adv-x=\"1792\" \n+d=\"M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"_591\" unicode=\"&#xf276;\" horiz-adv-x=\"1024\" \n+d=\"M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249\n+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_592\" unicode=\"&#xf277;\" horiz-adv-x=\"1792\" \n+d=\"M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768\n+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z\" \u002F>\n+    \u003Cglyph glyph-name=\"_593\" unicode=\"&#xf278;\" horiz-adv-x=\"2048\" \n+d=\"M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173\n+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z\" \u002F>\n+    \u003Cglyph glyph-name=\"_594\" unicode=\"&#xf279;\" horiz-adv-x=\"1792\" \n+d=\"M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472\n+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_595\" unicode=\"&#xf27a;\" horiz-adv-x=\"1792\" \n+d=\"M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5\n+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37\n+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_596\" unicode=\"&#xf27b;\" horiz-adv-x=\"1792\" \n+d=\"M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5\n+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5\n+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51\n+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_597\" unicode=\"&#xf27c;\" horiz-adv-x=\"1024\" \n+d=\"M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z\" \u002F>\n+    \u003Cglyph glyph-name=\"_598\" unicode=\"&#xf27d;\" horiz-adv-x=\"1792\" \n+d=\"M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246\n+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z\" \u002F>\n+    \u003Cglyph glyph-name=\"f27e\" unicode=\"&#xf27e;\" \n+d=\"M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF280\" unicode=\"&#xf280;\" \n+d=\"M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72\n+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275\n+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF281\" unicode=\"&#xf281;\" horiz-adv-x=\"1792\" \n+d=\"M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5\n+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44\n+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106\n+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z\" \u002F>\n+    \u003Cglyph glyph-name=\"_602\" unicode=\"&#xf282;\" horiz-adv-x=\"1792\" \n+d=\"M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53\n+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_603\" unicode=\"&#xf283;\" horiz-adv-x=\"2304\" \n+d=\"M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z\" \u002F>\n+    \u003Cglyph glyph-name=\"_604\" unicode=\"&#xf284;\" horiz-adv-x=\"1792\" \n+d=\"M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308\n+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20\n+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF285\" unicode=\"&#xf285;\" horiz-adv-x=\"1792\" \n+d=\"M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF286\" unicode=\"&#xf286;\" horiz-adv-x=\"1792\" \n+d=\"M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96\n+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5\n+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96\n+q16 0 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"_607\" unicode=\"&#xf287;\" horiz-adv-x=\"2304\" \n+d=\"M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96\n+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5\n+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z\" \u002F>\n+    \u003Cglyph glyph-name=\"_608\" unicode=\"&#xf288;\" horiz-adv-x=\"1792\" \n+d=\"M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348\n+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_609\" unicode=\"&#xf289;\" horiz-adv-x=\"2304\" \n+d=\"M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22\n+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5\n+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13\n+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z\" \u002F>\n+    \u003Cglyph glyph-name=\"_610\" unicode=\"&#xf28a;\" \n+d=\"M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83\n+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20\n+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5\n+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_611\" unicode=\"&#xf28b;\" \n+d=\"M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103\n+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_612\" unicode=\"&#xf28c;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273\n+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z\" \u002F>\n+    \u003Cglyph glyph-name=\"_613\" unicode=\"&#xf28d;\" \n+d=\"M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\n+t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_614\" unicode=\"&#xf28e;\" \n+d=\"M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273\n+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z\" \u002F>\n+    \u003Cglyph glyph-name=\"_615\" unicode=\"&#xf290;\" horiz-adv-x=\"1792\" \n+d=\"M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5\n+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_616\" unicode=\"&#xf291;\" horiz-adv-x=\"2048\" \n+d=\"M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5\n+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416\n+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441\n+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z\" \u002F>\n+    \u003Cglyph glyph-name=\"_617\" unicode=\"&#xf292;\" horiz-adv-x=\"1792\" \n+d=\"M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12\n+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311\n+q15 0 25 -12q9 -12 6 -28z\" \u002F>\n+    \u003Cglyph glyph-name=\"_618\" unicode=\"&#xf293;\" \n+d=\"M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5\n+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_619\" unicode=\"&#xf294;\" horiz-adv-x=\"1024\" \n+d=\"M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z\" \u002F>\n+    \u003Cglyph glyph-name=\"_620\" unicode=\"&#xf295;\" \n+d=\"M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5\n+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5\n+t271.5 -112.5t112.5 -271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_621\" unicode=\"&#xf296;\" horiz-adv-x=\"1792\" \n+d=\"M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"_622\" unicode=\"&#xf297;\" horiz-adv-x=\"1792\" \n+d=\"M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111\n+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_623\" unicode=\"&#xf298;\" \n+d=\"M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14\n+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z\" \u002F>\n+    \u003Cglyph glyph-name=\"_624\" unicode=\"&#xf299;\" horiz-adv-x=\"1792\" \n+d=\"M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57\n+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285\n+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z\" \u002F>\n+    \u003Cglyph glyph-name=\"_625\" unicode=\"&#xf29a;\" horiz-adv-x=\"1792\" \n+d=\"M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42\n+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z\n+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298\n+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"_626\" unicode=\"&#xf29b;\" \n+d=\"M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300\n+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z\n+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_627\" unicode=\"&#xf29c;\" \n+d=\"M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5\n+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5\n+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5\n+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"_628\" unicode=\"&#xf29d;\" horiz-adv-x=\"1408\" \n+d=\"M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457\n+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521\n+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661\n+q3 -1 7 1t7 4l3 2q11 9 11 17z\" \u002F>\n+    \u003Cglyph glyph-name=\"_629\" unicode=\"&#xf29e;\" horiz-adv-x=\"2304\" \n+d=\"M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10\n+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5\n+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5\n+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96\n+t9.5 -70.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A0\" unicode=\"&#xf2a0;\" horiz-adv-x=\"1408\" \n+d=\"M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5\n+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127\n+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272\n+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249\n+q-18 -19 -45 -19z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A1\" unicode=\"&#xf2a1;\" horiz-adv-x=\"2176\" \n+d=\"M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352\n+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864\n+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136\n+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56\n+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56\n+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136\n+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A2\" unicode=\"&#xf2a2;\" horiz-adv-x=\"1792\" \n+d=\"M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z\n+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72\n+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45\n+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4\n+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A3\" unicode=\"&#xf2a3;\" horiz-adv-x=\"2304\" \n+d=\"M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55\n+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5\n+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101\n+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35\n+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5\n+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A4\" unicode=\"&#xf2a4;\" horiz-adv-x=\"1792\" \n+d=\"M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19\n+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74\n+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233\n+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A5\" unicode=\"&#xf2a5;\" \n+d=\"M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2\n+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10\n+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5\n+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A6\" unicode=\"&#xf2a6;\" horiz-adv-x=\"1535\" \n+d=\"M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5\n+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5\n+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9\n+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A7\" unicode=\"&#xf2a7;\" horiz-adv-x=\"1664\" \n+d=\"M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37\n+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38\n+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148\n+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26\n+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A8\" unicode=\"&#xf2a8;\" horiz-adv-x=\"1792\" \n+d=\"M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5\n+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841\n+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5\n+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2A9\" unicode=\"&#xf2a9;\" horiz-adv-x=\"1280\" \n+d=\"M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5\n+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z\n+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2AA\" unicode=\"&#xf2aa;\" \n+d=\"M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z\n+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5\n+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5\n+t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2AB\" unicode=\"&#xf2ab;\" \n+d=\"M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114\n+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5\n+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5\n+t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2AC\" unicode=\"&#xf2ac;\" horiz-adv-x=\"1664\" \n+d=\"M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35\n+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5\n+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2AD\" unicode=\"&#xf2ad;\" \n+d=\"M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115\n+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15\n+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960\n+q119 0 203.5 -84.5t84.5 -203.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2AE\" unicode=\"&#xf2ae;\" horiz-adv-x=\"2304\" \n+d=\"M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7\n+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158\n+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B0\" unicode=\"&#xf2b0;\" \n+d=\"M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104\n+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108\n+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z\n+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B1\" unicode=\"&#xf2b1;\" horiz-adv-x=\"1664\" \n+d=\"M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5\n+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B2\" unicode=\"&#xf2b2;\" horiz-adv-x=\"1792\" \n+d=\"M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5\n+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114\n+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50\n+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5\n+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46\n+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5\n+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177\n+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B3\" unicode=\"&#xf2b3;\" \n+d=\"M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110\n+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B4\" unicode=\"&#xf2b4;\" \n+d=\"M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5\n+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B5\" unicode=\"&#xf2b5;\" horiz-adv-x=\"2304\" \n+d=\"M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66\n+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180\n+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z\n+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421\n+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B6\" unicode=\"&#xf2b6;\" horiz-adv-x=\"1792\" \n+d=\"M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107\n+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39\n+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B7\" unicode=\"&#xf2b7;\" horiz-adv-x=\"1792\" \n+d=\"M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5\n+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5\n+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94\n+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B8\" unicode=\"&#xf2b8;\" \n+d=\"M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465\n+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161\n+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74\n+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2B9\" unicode=\"&#xf2b9;\" horiz-adv-x=\"1664\" \n+d=\"M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576\n+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216\n+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2BA\" unicode=\"&#xf2ba;\" horiz-adv-x=\"1664\" \n+d=\"M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5\n+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96\n+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216\n+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2BB\" unicode=\"&#xf2bb;\" horiz-adv-x=\"2048\" \n+d=\"M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z\n+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568\n+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9\n+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2BC\" unicode=\"&#xf2bc;\" horiz-adv-x=\"2048\" \n+d=\"M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925\n+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568\n+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5\n+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113\n+t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2BD\" unicode=\"&#xf2bd;\" horiz-adv-x=\"1792\" \n+d=\"M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5\n+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2BE\" unicode=\"&#xf2be;\" horiz-adv-x=\"1792\" \n+d=\"M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61\n+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C0\" unicode=\"&#xf2c0;\" \n+d=\"M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5\n+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145\n+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C1\" unicode=\"&#xf2c1;\" horiz-adv-x=\"1280\" \n+d=\"M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5\n+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352\n+q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C2\" unicode=\"&#xf2c2;\" horiz-adv-x=\"2048\" \n+d=\"M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56\n+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23\n+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728\n+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C3\" unicode=\"&#xf2c3;\" horiz-adv-x=\"2048\" \n+d=\"M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z\n+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64\n+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47\n+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C4\" unicode=\"&#xf2c4;\" horiz-adv-x=\"1792\" \n+d=\"M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117\n+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5\n+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C5\" unicode=\"&#xf2c5;\" horiz-adv-x=\"2304\" \n+d=\"M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21\n+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46\n+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54\n+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29\n+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5\n+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314\n+q2 -42 2 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C6\" unicode=\"&#xf2c6;\" horiz-adv-x=\"1792\" \n+d=\"M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71\n+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C7\" unicode=\"&#xf2c7;\" horiz-adv-x=\"1024\" \n+d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\n+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\n+v128h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C8\" unicode=\"&#xf2c8;\" horiz-adv-x=\"1024\" \n+d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\n+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\n+v128h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2C9\" unicode=\"&#xf2c9;\" horiz-adv-x=\"1024\" \n+d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\n+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\n+v128h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2CA\" unicode=\"&#xf2ca;\" horiz-adv-x=\"1024\" \n+d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5\n+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192\n+v128h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2CB\" unicode=\"&#xf2cb;\" horiz-adv-x=\"1024\" \n+d=\"M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z\n+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2CC\" unicode=\"&#xf2cc;\" horiz-adv-x=\"1920\" \n+d=\"M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41\n+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19\n+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768\n+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19\n+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384\n+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2CD\" unicode=\"&#xf2cd;\" horiz-adv-x=\"1792\" \n+d=\"M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9\n+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9\n+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42\n+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9\n+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23\n+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2CE\" unicode=\"&#xf2ce;\" \n+d=\"M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5\n+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70\n+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20\n+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5\n+t72.5 -263.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D0\" unicode=\"&#xf2d0;\" horiz-adv-x=\"1792\" \n+d=\"M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D1\" unicode=\"&#xf2d1;\" horiz-adv-x=\"1792\" \n+d=\"M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D2\" unicode=\"&#xf2d2;\" horiz-adv-x=\"2048\" \n+d=\"M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47\n+t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D3\" unicode=\"&#xf2d3;\" horiz-adv-x=\"1792\" \n+d=\"M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10\n+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D4\" unicode=\"&#xf2d4;\" horiz-adv-x=\"1792\" \n+d=\"M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23\n+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D5\" unicode=\"&#xf2d5;\" horiz-adv-x=\"1792\" \n+d=\"M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D6\" unicode=\"&#xf2d6;\" horiz-adv-x=\"1794\" \n+d=\"M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12\n+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5\n+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5\n+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5\n+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34\n+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5\n+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D7\" unicode=\"&#xf2d7;\" \n+d=\"M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89\n+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5\n+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D8\" unicode=\"&#xf2d8;\" \n+d=\"M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7\n+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5\n+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113\n+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2D9\" unicode=\"&#xf2d9;\" horiz-adv-x=\"2176\" \n+d=\"M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584\n+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5\n+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15\n+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82\n+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104\n+t302 11t306.5 -97q220 -115 333 -336t87 -474z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2DA\" unicode=\"&#xf2da;\" horiz-adv-x=\"1792\" \n+d=\"M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178\n+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199\n+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297\n+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208\n+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2DB\" unicode=\"&#xf2db;\" \n+d=\"M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16\n+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28\n+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32\n+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16\n+h48q16 0 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2DC\" unicode=\"&#xf2dc;\" horiz-adv-x=\"1664\" \n+d=\"M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45\n+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33\n+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313\n+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106\n+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2DD\" unicode=\"&#xf2dd;\" horiz-adv-x=\"1792\" \n+d=\"M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321\n+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2DE\" unicode=\"&#xf2de;\" horiz-adv-x=\"1792\" \n+d=\"M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62\n+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71\n+t286 -191t191 -286t71 -348z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E0\" unicode=\"&#xf2e0;\" horiz-adv-x=\"1920\" \n+d=\"M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3\n+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53\n+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5\n+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5\n+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5\n+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z\n+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21\n+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16\n+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E1\" unicode=\"&#xf2e1;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E2\" unicode=\"&#xf2e2;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E3\" unicode=\"&#xf2e3;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E4\" unicode=\"&#xf2e4;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E5\" unicode=\"&#xf2e5;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E6\" unicode=\"&#xf2e6;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E7\" unicode=\"&#xf2e7;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"_698\" unicode=\"&#xf2e8;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2E9\" unicode=\"&#xf2e9;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2EA\" unicode=\"&#xf2ea;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2EB\" unicode=\"&#xf2eb;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2EC\" unicode=\"&#xf2ec;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2ED\" unicode=\"&#xf2ed;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"uniF2EE\" unicode=\"&#xf2ee;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+    \u003Cglyph glyph-name=\"lessequal\" unicode=\"&#xf500;\" horiz-adv-x=\"1792\" \n+ \u002F>\n+  \u003C\u002Ffont>\n+\u003C\u002Fdefs>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-brands-400.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3496 +1,3496 @@\n-\u003C?xml version=\"1.0\" standalone=\"no\"?>\r\n-\u003C!--\r\n-Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\r\n-License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\r\n--->\r\n-\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\r\n-\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\r\n-\u003Cmetadata>\r\n-Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019\r\n- By Robert Madole\r\n-Copyright (c) Font Awesome\r\n-\u003C\u002Fmetadata>\r\n-\u003Cdefs>\r\n-\u003Cfont id=\"FontAwesome5Brands-Regular\" horiz-adv-x=\"448\" >\r\n-  \u003Cfont-face \r\n-    font-family=\"Font Awesome 5 Brands Regular\"\r\n-    font-weight=\"400\"\r\n-    font-stretch=\"normal\"\r\n-    units-per-em=\"512\"\r\n-    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\r\n-    ascent=\"448\"\r\n-    descent=\"-64\"\r\n-    bbox=\"-0.200195 -66.9505 641.5 448.3\"\r\n-    underline-thickness=\"25\"\r\n-    underline-position=\"-50\"\r\n-    unicode-range=\"U+0020-F8E8\"\r\n-  \u002F>\r\n-    \u003Cmissing-glyph \u002F>\r\n-    \u003Cglyph glyph-name=\"twitter-square\" unicode=\"&#xf081;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM351.1 257.2c12.8008 9.2998 24 20.8994 32.9004 34c-11.7998 -5.10059 -24.5996 -8.7998 -37.7998 -10.2002\r\n-c13.5996 8.09961 23.8994 20.9004 28.7998 36.0996c-12.5996 -7.5 -26.7998 -13 -41.5996 -15.7998c-12 12.7998 -29 20.7002 -47.9004 20.7002c-40 0 -73.2998 -36.0996 -64 -80.5996c-54.4004 2.7998 -102.9 28.7998 -135.2 68.5996\r\n-c-5.7002 -9.7002 -8.89941 -20.9004 -8.89941 -33.0996v-0.107422c0 -19.3584 13.0811 -43.7715 29.1992 -54.4932c-10.6992 0.400391 -20.8994 3.40039 -29.5996 8.2998v-0.799805c0 -31.8994 22.5 -58.2998 52.5 -64.3994\r\n-c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601\r\n-c0 2.7998 0 5.7002 -0.200195 8.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook-square\" unicode=\"&#xf082;\" \r\n-d=\"M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984\r\n-c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linkedin\" unicode=\"&#xf08c;\" \r\n-d=\"M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275\r\n-c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002\r\n-v-213.8h66.4004v105.8c0 27.9004 5.2998 54.9004 39.9004 54.9004c34 0 34.5 -31.9004 34.5 -56.7002v-104h66.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github-square\" unicode=\"&#xf092;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM277.3 32.2998c66 22 110.8 84.9004 110.7 158.3c0 91.8008 -74.4004 161.5 -166.2 161.5s-162 -69.6992 -162 -161.5\r\n-c0 -73.3994 46.2002 -136.199 112.2 -158.3c8.5 -1.5 11.5 3.7002 11.5 8c0 4.10059 -0.200195 26.7002 -0.200195 40.6006c0 0 -46.3994 -10 -56.0996 19.6992c0 0 -7.60059 19.2002 -18.4004 24.2002c0 0 -15.0996 10.4004 1.10059 10.2002\r\n-c0 0 16.3994 -1.2998 25.5 -17.0996c14.5 -25.6006 38.7998 -18.2002 48.2998 -13.9004c1.5 10.5996 5.7998 18 10.5996 22.2998c-37 4.10059 -74.2998 9.5 -74.2998 73.1006c0 18.1992 5 27.2998 15.5996 39c-1.7998 4.39941 -7.39941 22.0996 1.7002 45\r\n-c13.9004 4.2998 45.7002 -17.9004 45.7002 -17.9004c13.2002 3.7002 27.5 5.59961 41.5996 5.59961c14.1006 0 28.4004 -1.89941 41.6006 -5.59961c0 0 31.7998 22.2002 45.7002 17.9004c9.09961 -23 3.39941 -40.7002 1.69922 -45\r\n-c10.6006 -11.7002 17.1006 -20.8008 17.1006 -39c0 -63.9004 -39 -69 -76 -73.1006c6.09961 -5.2002 11.2998 -15.0996 11.2998 -30.7002c0 -22.2998 -0.200195 -49.8994 -0.200195 -55.2998c0 -4.2998 3.10059 -9.5 11.5 -8zM179.2 93.4004\r\n-c-1.90039 -0.400391 -3.7002 0.399414 -3.90039 1.69922c-0.200195 1.5 1.10059 2.80078 3 3.2002c1.90039 0.200195 3.7002 -0.599609 3.90039 -1.89941c0.299805 -1.30078 -1 -2.60059 -3 -3zM169.7 94.2998c0 1.5 -1.7998 2.60059 -3.7002 2.40039\r\n-c-2 0 -3.5 -1.10059 -3.5 -2.40039c0 -1.5 1.5 -2.59961 3.7002 -2.39941c2 0 3.5 1.09961 3.5 2.39941zM156 95.4004c-0.400391 -1.30078 -2.40039 -1.90039 -4.09961 -1.30078c-1.90039 0.400391 -3.2002 1.90039 -2.80078 3.2002\r\n-c0.400391 1.2998 2.40039 1.90039 4.10059 1.5c2 -0.599609 3.2998 -2.09961 2.7998 -3.39941zM143.7 100.8c0.899414 0.799805 0.399414 2.7998 -0.900391 4.10059c-1.5 1.5 -3.39941 1.69922 -4.2998 0.599609c-1 -0.900391 -0.599609 -2.7998 0.900391 -4.09961\r\n-c1.5 -1.5 3.39941 -1.7002 4.2998 -0.600586zM134.6 109.9c1.10059 0.799805 1.10059 2.59961 0 4.09961c-0.899414 1.5 -2.59961 2.2002 -3.69922 1.2998c-1.10059 -0.700195 -1.10059 -2.39941 0 -3.89941c1.09961 -1.5 2.7998 -2.10059 3.69922 -1.5zM128.1 119.6\r\n-c0.900391 0.700195 0.700195 2.2002 -0.399414 3.5c-1.10059 1 -2.60059 1.5 -3.5 0.600586c-0.900391 -0.700195 -0.700195 -2.2002 0.399414 -3.5c1.10059 -1 2.60059 -1.5 3.5 -0.600586zM121.4 127c0.399414 0.799805 -0.200195 1.90039 -1.5 2.59961\r\n-c-1.30078 0.5 -2.40039 0.200195 -2.80078 -0.399414c-0.399414 -0.900391 0.200195 -2 1.5 -2.60059c1.10059 -0.699219 2.40039 -0.5 2.80078 0.400391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"twitter\" unicode=\"&#xf099;\" horiz-adv-x=\"512\" \r\n-d=\"M459.37 296.284c0.325195 -4.54785 0.325195 -9.09766 0.325195 -13.6455c0 -138.72 -105.583 -298.558 -298.559 -298.558c-59.4521 0 -114.68 17.2188 -161.137 47.1055c8.44727 -0.973633 16.5684 -1.29883 25.3398 -1.29883\r\n-c49.0547 0 94.2129 16.5684 130.274 44.832c-46.1318 0.975586 -84.792 31.1885 -98.1123 72.7725c6.49805 -0.974609 12.9951 -1.62402 19.8184 -1.62402c9.4209 0 18.8428 1.2998 27.6133 3.57324c-48.0811 9.74707 -84.1426 51.9795 -84.1426 102.984v1.29883\r\n-c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04\r\n-c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432\r\n-c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook\" unicode=\"&#xf09a;\" horiz-adv-x=\"512\" \r\n-d=\"M504 192c0 -123.78 -90.6904 -226.38 -209.25 -245v173.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4102 38.7305h31.2803v61s-28.3809 4.83984 -55.5205 4.83984c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63\r\n-v-173.31c-118.56 18.6201 -209.25 121.22 -209.25 245c0 137 111 248 248 248s248 -111 248 -248z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github\" unicode=\"&#xf09b;\" horiz-adv-x=\"496\" \r\n-d=\"M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078\r\n-c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059\r\n-c-3 -0.700195 -5.59961 0.600586 -5.89941 2.60059c-0.300781 2.2998 1.69922 4.19922 4.59961 4.89941zM244.8 440c138.7 0 251.2 -105.3 251.2 -244c0 -110.9 -67.7998 -205.8 -167.8 -239c-12.7002 -2.2998 -17.2998 5.59961 -17.2998 12.0996\r\n-c0 8.2002 0.299805 49.9004 0.299805 83.6006c0 23.5 -7.7998 38.5 -17 46.3994c55.8994 6.30078 114.8 14 114.8 110.5c0 27.4004 -9.7998 41.2002 -25.7998 58.9004c2.59961 6.5 11.0996 33.2002 -2.60059 67.9004c-20.8994 6.59961 -69 -27 -69 -27\r\n-c-20 5.59961 -41.5 8.5 -62.7998 8.5s-42.7998 -2.90039 -62.7998 -8.5c0 0 -48.0996 33.5 -69 27c-13.7002 -34.6006 -5.2002 -61.4004 -2.59961 -67.9004c-16 -17.5996 -23.6006 -31.4004 -23.6006 -58.9004c0 -96.1992 56.4004 -104.3 112.3 -110.5\r\n-c-7.19922 -6.59961 -13.6992 -17.6992 -16 -33.6992c-14.2998 -6.60059 -51 -17.7002 -72.8994 20.8994c-13.7002 23.7998 -38.6006 25.7998 -38.6006 25.7998c-24.5 0.300781 -1.59961 -15.3994 -1.59961 -15.3994c16.4004 -7.5 27.7998 -36.6006 27.7998 -36.6006\r\n-c14.7002 -44.7998 84.7002 -29.7998 84.7002 -29.7998c0 -21 0.299805 -55.2002 0.299805 -61.3994c0 -6.5 -4.5 -14.4004 -17.2998 -12.1006c-99.7002 33.4004 -169.5 128.3 -169.5 239.2c0 138.7 106.1 244 244.8 244zM97.2002 95.0996\r\n-c1.2998 1.30078 3.59961 0.600586 5.2002 -1c1.69922 -1.89941 2 -4.19922 0.699219 -5.19922c-1.2998 -1.30078 -3.59961 -0.600586 -5.19922 1c-1.7002 1.89941 -2 4.19922 -0.700195 5.19922zM86.4004 103.2c0.699219 1 2.2998 1.2998 4.2998 0.700195\r\n-c2 -1 3 -2.60059 2.2998 -3.90039c-0.700195 -1.40039 -2.7002 -1.7002 -4.2998 -0.700195c-2 1 -3 2.60059 -2.2998 3.90039zM118.8 67.5996c1.2998 1.60059 4.2998 1.30078 6.5 -1c2 -1.89941 2.60059 -4.89941 1.2998 -6.19922\r\n-c-1.2998 -1.60059 -4.19922 -1.30078 -6.5 1c-2.2998 1.89941 -2.89941 4.89941 -1.2998 6.19922zM107.4 82.2998c1.59961 1.2998 4.19922 0.299805 5.59961 -2c1.59961 -2.2998 1.59961 -4.89941 0 -6.2002c-1.2998 -1 -4 0 -5.59961 2.30078\r\n-c-1.60059 2.2998 -1.60059 4.89941 0 5.89941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pinterest\" unicode=\"&#xf0d2;\" horiz-adv-x=\"496\" \r\n-d=\"M496 192c0 -137 -111 -248 -248 -248c-25.5996 0 -50.2002 3.90039 -73.4004 11.0996c10.1006 16.5 25.2002 43.5 30.8008 65c3 11.6006 15.3994 59 15.3994 59c8.10059 -15.3994 31.7002 -28.5 56.7998 -28.5c74.8008 0 128.7 68.8008 128.7 154.301\r\n-c0 81.8994 -66.8994 143.199 -152.899 143.199c-107 0 -163.9 -71.7998 -163.9 -150.1c0 -36.4004 19.4004 -81.7002 50.2998 -96.0996c4.7002 -2.2002 7.2002 -1.2002 8.2998 3.2998c0.800781 3.39941 5 20.2998 6.90039 28.0996\r\n-c0.599609 2.5 0.299805 4.7002 -1.7002 7.10059c-10.0996 12.5 -18.2998 35.2998 -18.2998 56.5996c0 54.7002 41.4004 107.6 112 107.6c60.9004 0 103.6 -41.5 103.6 -100.899c0 -67.1006 -33.8994 -113.601 -78 -113.601c-24.2998 0 -42.5996 20.1006 -36.6992 44.8008\r\n-c7 29.5 20.5 61.2998 20.5 82.5996c0 19 -10.2002 34.9004 -31.4004 34.9004c-24.9004 0 -44.9004 -25.7002 -44.9004 -60.2002c0 -22 7.40039 -36.7998 7.40039 -36.7998s-24.5 -103.801 -29 -123.2c-5 -21.4004 -3 -51.6006 -0.900391 -71.2002\r\n-c-92.1992 36.0996 -157.6 125.9 -157.6 231c0 137 111 248 248 248s248 -111 248 -248z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pinterest-square\" unicode=\"&#xf0d3;\" \r\n-d=\"M448 368v-352c0 -26.5 -21.5 -48 -48 -48h-245.6c9.7998 16.4004 22.3994 40 27.3994 59.2998c3 11.5 15.2998 58.4004 15.2998 58.4004c8 -15.2998 31.4004 -28.2002 56.3008 -28.2002c74.0996 0 127.399 68.0996 127.399 152.7\r\n-c0 81.0996 -66.2002 141.8 -151.399 141.8c-106 0 -162.2 -71.0996 -162.2 -148.6c0 -36 19.2002 -80.8008 49.7998 -95.1006c4.7002 -2.2002 7.09961 -1.2002 8.2002 3.2998c0.799805 3.40039 5 20.1006 6.7998 27.8008c0.599609 2.5 0.299805 4.59961 -1.7002 7\r\n-c-10.0996 12.2998 -18.2998 34.8994 -18.2998 56c0 54.1992 41 106.6 110.9 106.6c60.2998 0 102.6 -41.0996 102.6 -99.9004c0 -66.3994 -33.5 -112.399 -77.2002 -112.399c-24.0996 0 -42.0996 19.8994 -36.3994 44.3994c6.89941 29.2002 20.2998 60.7002 20.2998 81.8008\r\n-c0 53 -75.5 45.6992 -75.5 -25c0 -21.7002 7.2998 -36.5 7.2998 -36.5c-31.4004 -132.801 -36.0996 -134.5 -29.5996 -192.601l2.19922 -0.799805h-88.5996c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-plus-square\" unicode=\"&#xf0d4;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM164 92c57.7002 0 96 40.5 96 97.5996c0 6.5 -0.599609 11.6006 -1.59961 16.6006h-94.4004v-34.4004h56.9004\r\n-c-2.40039 -14.5996 -17.2002 -43.0996 -56.8008 -43.0996c-34.0996 0 -61.8994 28.2998 -61.8994 63.2002c0 35 27.7998 63.1992 61.8994 63.1992c19.5 0 32.4004 -8.2998 39.8008 -15.3994l27.0996 26.0996c-17.5 16.4004 -40 26.2002 -67 26.2002\r\n-c-55.2998 0 -100 -44.7002 -100 -100s44.7002 -100 100 -100zM384 173.8v29.2002h-29v29h-29.2002v-29h-29v-29.2002h29v-29h29.2002v29h29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-plus-g\" unicode=\"&#xf0d5;\" horiz-adv-x=\"640\" \r\n-d=\"M386.061 219.504c1.83398 -9.69238 3.14355 -19.3838 3.14355 -31.9561c0 -109.753 -73.6055 -187.548 -184.404 -187.548c-106.084 0 -192 85.915 -192 192s85.916 192 192 192c51.8643 0 95.083 -18.8594 128.611 -50.292l-52.126 -50.0303\r\n-c-14.1455 13.6211 -39.0283 29.5996 -76.4854 29.5996c-65.4834 0 -118.92 -54.2217 -118.92 -121.277s53.4365 -121.277 118.92 -121.277c75.9609 0 104.514 54.7451 108.965 82.7734h-108.965v66.0088h181.261v-0.000976562zM571.467 213.067h55.7334v-56.001h-55.7334\r\n-v-55.7334h-56.001v55.7334h-55.7324v56.001h55.7324v55.7324h56.001v-55.7324z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linkedin-in\" unicode=\"&#xf0e1;\" \r\n-d=\"M100.28 0h-92.8799v299.1h92.8799v-299.1zM53.79 339.9c-29.7002 0 -53.79 24.5996 -53.79 54.2998c0 29.6914 24.0977 53.79 53.79 53.79s53.79 -24.0986 53.79 -53.79c0 -29.7002 -24.0996 -54.2998 -53.79 -54.2998zM447.9 0h-92.6807v145.6\r\n-c0 34.7002 -0.700195 79.2002 -48.29 79.2002c-48.29 0 -55.6895 -37.7002 -55.6895 -76.7002v-148.1h-92.7803v299.1h89.0801v-40.7998h1.2998c12.4004 23.5 42.6904 48.2998 87.8799 48.2998c94 0 111.28 -61.8994 111.28 -142.3v-164.3h-0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"github-alt\" unicode=\"&#xf113;\" horiz-adv-x=\"480\" \r\n-d=\"M186.1 119.3c0 -20.8994 -10.8994 -55.0996 -36.6992 -55.0996c-25.8008 0 -36.7002 34.2002 -36.7002 55.0996c0 20.9004 10.8994 55.1006 36.7002 55.1006c25.7998 0 36.6992 -34.2002 36.6992 -55.1006zM480 169.8c0 -31.8994 -3.2002 -65.7002 -17.5 -95\r\n-c-37.9004 -76.5996 -142.1 -74.7998 -216.7 -74.7998c-75.7998 0 -186.2 -2.7002 -225.6 74.7998c-14.6006 29 -20.2002 63.1006 -20.2002 95c0 41.9004 13.9004 81.5 41.5 113.601c-5.2002 15.7998 -7.7002 32.3994 -7.7002 48.7998\r\n-c0 21.5 4.90039 32.2998 14.6006 51.7998c45.2998 0 74.2998 -9 108.8 -36c29 6.90039 58.7998 10 88.7002 10c27 0 54.1992 -2.90039 80.3994 -9.2002c34 26.7002 63 35.2002 107.8 35.2002c9.80078 -19.5 14.6006 -30.2998 14.6006 -51.7998\r\n-c0 -16.4004 -2.60059 -32.7002 -7.7002 -48.2002c27.5 -32.4004 39 -72.2998 39 -114.2zM415.7 119.3c0 43.9004 -26.7002 82.6006 -73.5 82.6006c-18.9004 0 -37 -3.40039 -56 -6c-14.9004 -2.30078 -29.7998 -3.2002 -45.1006 -3.2002\r\n-c-15.1992 0 -30.0996 0.899414 -45.0996 3.2002c-18.7002 2.59961 -37 6 -56 6c-46.7998 0 -73.5 -38.7002 -73.5 -82.6006c0 -87.7998 80.4004 -101.3 150.4 -101.3h48.1992c70.3008 0 150.601 13.4004 150.601 101.3zM333.1 174.4\r\n-c25.8008 0 36.7002 -34.2002 36.7002 -55.1006c0 -20.8994 -10.8994 -55.0996 -36.7002 -55.0996c-25.7998 0 -36.6992 34.2002 -36.6992 55.0996c0 20.9004 10.8994 55.1006 36.6992 55.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"maxcdn\" unicode=\"&#xf136;\" horiz-adv-x=\"512\" \r\n-d=\"M461.1 5.2998h-97.3994l51.8994 242.7c2.30078 10.2002 0.900391 19.5 -4.39941 25.7002c-5 6.09961 -13.7002 9.59961 -24.2002 9.59961h-49.2998l-59.5 -278h-97.4004l59.5 278h-83.3994l-59.5 -278h-97.4004l59.5 278l-44.5996 95.4004h372.1\r\n-c39.4004 0 75.2998 -16.2998 98.2998 -44.9004c23.2998 -28.5996 31.7998 -67.3994 23.6006 -105.899z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"html5\" unicode=\"&#xf13b;\" horiz-adv-x=\"384\" \r\n-d=\"M0 416h384l-34.9004 -395.8l-157.6 -52.2002l-156.6 52.2002zM308.2 288.1l4.39941 47.7002h-241.1l12.7998 -145.6h166.9l-6 -62.2002l-53.7002 -14.5l-53.5 14.5l-3.5 38.0996h-47.7002l6 -75.7998l98.7002 -27.2998h1.09961v0.299805l97.9004 27l13.5996 148.4h-175.6\r\n-l-4.09961 49.3994h183.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"css3\" unicode=\"&#xf13c;\" horiz-adv-x=\"512\" \r\n-d=\"M480 416l-64 -368l-223.3 -80l-192.7 80l19.5996 94.7998h82l-8 -40.5996l116.4 -44.4004l134.1 44.4004l18.8008 97.0996h-333.4l16 82h333.7l10.5 52.7002h-333.4l16.2998 82h407.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"btc\" unicode=\"&#xf15a;\" horiz-adv-x=\"384\" \r\n-d=\"M310.204 205.362c46.0059 -11.0283 74.9971 -38.4443 69.3262 -99.8906c-7.24805 -76.5723 -61.5967 -97.0547 -142.896 -101.467v-68.0049h-48.5273v66.7451c-12.29 0 -25.21 0 -38.4443 0.314453v-67.0596h-48.5283v68.0049s-8.88867 0.31543 -97.3701 0.31543\r\n-l9.76758 57.666c34.7305 -0.614258 50.3301 -3.4209 53.2549 16.0703v217.43c-4.60645 24.5664 -24.709 22.1045 -63.0234 21.4268v51.6777c58.748 -0.275391 79.5283 -0.539062 97.3701 0v79.4092h48.5283v-77.833c12.9189 0.31543 25.8389 0.629883 38.4443 0.629883\r\n-v77.2031h48.5273v-79.4092c62.3926 -5.35547 109.492 -24.5781 114.851 -81.9287c4.09668 -41.9102 -13.5508 -67.1201 -41.2803 -81.2998zM150.608 313.447v-96.7402c27.416 0 113.126 -6.30273 113.126 48.2119c0 57.0352 -85.7109 48.5283 -113.126 48.5283z\r\n-M150.608 61.6709c32.7715 0 133.126 -6.93262 133.127 53.2529c0 62.3936 -100.355 53.2549 -133.127 53.2549v-106.508z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"youtube\" unicode=\"&#xf167;\" horiz-adv-x=\"576\" \r\n-d=\"M549.655 323.917c11.4121 -42.8672 11.4121 -132.305 11.4121 -132.305s0 -89.4385 -11.4121 -132.306c-6.28125 -23.6494 -24.7871 -41.5 -48.2842 -47.8203c-42.5908 -11.4863 -213.371 -11.4863 -213.371 -11.4863s-170.78 0 -213.371 11.4863\r\n-c-23.4971 6.32031 -42.0029 24.1709 -48.2842 47.8203c-11.4121 42.8672 -11.4121 132.306 -11.4121 132.306s0 89.4375 11.4121 132.305c6.28125 23.6504 24.7871 42.2754 48.2842 48.5967c42.5908 11.4863 213.371 11.4863 213.371 11.4863s170.781 0 213.371 -11.4863\r\n-c23.4971 -6.32031 42.0029 -24.9463 48.2842 -48.5967zM232.145 110.409l142.739 81.2012l-142.739 81.2051v-162.406z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"xing\" unicode=\"&#xf168;\" horiz-adv-x=\"384\" \r\n-d=\"M162.7 238c-1.7998 -3.2998 -25.2002 -44.4004 -70.1006 -123.5c-4.89941 -8.2998 -10.7998 -12.5 -17.6992 -12.5h-65.1006c-7.7002 0 -12.0996 7.5 -8.5 14.4004l69 121.3c0.200195 0 0.200195 0.0996094 0 0.299805l-43.8994 75.5996\r\n-c-4.30078 7.80078 0.299805 14.1006 8.5 14.1006h65.0996c7.2998 0 13.2998 -4.10059 18 -12.2002zM382.6 401.9l-144 -253v-0.300781l91.6006 -166.6c3.89941 -7.09961 0.200195 -14.0996 -8.5 -14.0996h-65.2002c-7.59961 0 -13.5996 4 -18 12.1992l-92.4004 168.5\r\n-c3.30078 5.80078 51.5 90.8008 144.801 255.2c4.59961 8.10059 10.3994 12.2002 17.5 12.2002h65.6992c8 0 12.3008 -6.7002 8.5 -14.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"xing-square\" unicode=\"&#xf169;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM140.4 127.8c4.89941 0 9.09961 2.90039 12.5996 9.10059c32.0996 56.5 48.7998 85.8994 50.0996 88.1992l-31.8994 55.3008\r\n-c-3.40039 5.7998 -7.7002 8.69922 -12.9004 8.69922h-46.5996c-5.7998 0 -9 -4.5 -6 -10.0996l31.3994 -54c0.100586 -0.0996094 0.100586 -0.200195 0 -0.200195l-49.2998 -86.7002c-2.7002 -5 0.5 -10.2998 6 -10.2998h46.6006zM360.1 341.9\r\n-c2.80078 5.2998 -0.299805 10.0996 -6 10h-46.8994c-5.10059 0 -9.2002 -2.90039 -12.5 -8.7002c-66.6006 -117.4 -101.101 -178.2 -103.4 -182.3l66 -120.301c3.2002 -5.7998 7.40039 -8.69922 12.9004 -8.69922h46.5996c6.10059 0 8.7998 5 6 10.0996l-65.5 119v0.200195z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dropbox\" unicode=\"&#xf16b;\" horiz-adv-x=\"528\" \r\n-d=\"M264.4 331.7l-132 -84.2998l132 -84.3008l-132 -84.2998l-132.4 85.1006l132.3 84.2998l-132.3 83.5l132.3 84.2998zM131.6 52.2998l132 84.2998l132 -84.2998l-132 -84.2998zM264.4 163.9l132 84.2998l-132 83.5996l131.3 84.2002l132.3 -84.2998l-132.3 -84.2998\r\n-l132.3 -84.2002l-132.3 -84.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stack-overflow\" unicode=\"&#xf16c;\" horiz-adv-x=\"384\" \r\n-d=\"M290.7 137l-8.2002 -39l-195.7 41l8.2002 39.2998zM341.7 224l-25.5 -30.7998l-153.5 128.3l25.5 30.7998zM310.5 184.3l-16.7998 -36.2998l-181.2 84.5l16.7002 36.5zM262 416l119.3 -160.3l-32 -24l-119.3 160.3zM282.5 88v-39.7002h-200v39.7002h200zM322.2 8v120h40\r\n-v-160h-359.5v160h40v-120h279.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"instagram\" unicode=\"&#xf16d;\" \r\n-d=\"M224.1 307c63.6006 0 114.9 -51.2998 114.9 -114.9c0 -63.5996 -51.2998 -114.899 -114.9 -114.899c-63.5996 0 -114.899 51.2998 -114.899 114.899c0 63.6006 51.2998 114.9 114.899 114.9zM224.1 117.4c41.1006 0 74.7002 33.5 74.7002 74.6992\r\n-c0 41.2002 -33.5 74.7002 -74.7002 74.7002c-41.1992 0 -74.6992 -33.5 -74.6992 -74.7002c0 -41.1992 33.5996 -74.6992 74.6992 -74.6992zM370.5 311.7c0 -14.9004 -12 -26.7998 -26.7998 -26.7998c-14.9004 0 -26.7998 12 -26.7998 26.7998s12 26.7998 26.7998 26.7998\r\n-s26.7998 -12 26.7998 -26.7998zM446.6 284.5c2.10059 -37 2.10059 -147.8 0 -184.8c-1.7998 -35.9004 -10 -67.7002 -36.1992 -93.9004c-26.2002 -26.2998 -58 -34.5 -93.9004 -36.2002c-37 -2.09961 -147.9 -2.09961 -184.9 0\r\n-c-35.8994 1.80078 -67.5996 10 -93.8994 36.2002s-34.5 58 -36.2002 93.9004c-2.09961 37 -2.09961 147.899 0 184.899c1.7998 35.9004 9.90039 67.7002 36.2002 93.9004s58.0996 34.4004 93.8994 36.0996c37 2.10059 147.9 2.10059 184.9 0\r\n-c35.9004 -1.7998 67.7002 -10 93.9004 -36.1992c26.2998 -26.2002 34.5 -58 36.1992 -93.9004zM398.8 60c11.7002 29.4004 9 99.5 9 132.1c0 32.6006 2.7002 102.601 -9 132.101c-7.89941 19.7002 -23 34.7998 -42.5996 42.5996c-29.4004 11.6006 -99.5 9 -132.101 9\r\n-c-32.5996 0 -102.6 2.7002 -132.1 -9c-19.7002 -7.89941 -34.7998 -23 -42.5996 -42.5996c-11.6006 -29.4004 -9 -99.5 -9 -132.101c0 -32.5996 -2.7002 -102.6 9 -132.1c7.89941 -19.7002 23 -34.7998 42.5996 -42.5996c29.4004 -11.6006 99.5 -9 132.1 -9\r\n-c32.6006 0 102.601 -2.7002 132.101 9c19.7002 7.89941 34.7998 23 42.5996 42.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flickr\" unicode=\"&#xf16e;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM144.5 129c35.0996 0 63.5 28.4004 63.5 63.5s-28.4004 63.5 -63.5 63.5s-63.5 -28.4004 -63.5 -63.5s28.4004 -63.5 63.5 -63.5z\r\n-M303.5 129c35.0996 0 63.5 28.4004 63.5 63.5s-28.4004 63.5 -63.5 63.5s-63.5 -28.4004 -63.5 -63.5s28.4004 -63.5 63.5 -63.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adn\" unicode=\"&#xf170;\" horiz-adv-x=\"496\" \r\n-d=\"M248 280.5l64.9004 -98.7998h-129.801zM496 192c0 -136.9 -111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248s248 -111.1 248 -248zM396.2 109.3l-148.2 223.2l-148.2 -223.2h30.4004l33.5996 51.7002h168.601l33.5996 -51.7002h30.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bitbucket\" unicode=\"&#xf171;\" horiz-adv-x=\"512\" \r\n-d=\"M22.2002 416l466.8 -0.200195c0.776367 -0.0107422 2.03027 -0.100586 2.7998 -0.200195c7.39648 -1.21875 13.3984 -8.29102 13.3984 -15.7871c0 -0.697266 -0.0888672 -1.82324 -0.198242 -2.5127l-67.9004 -416.8\r\n-c-1.2168 -7.39746 -8.29004 -13.4014 -15.7871 -13.4014c-0.0585938 0 -0.154297 0.000976562 -0.212891 0.000976562h-325.699c-10.1016 0.0820312 -19.6445 8.23535 -21.3008 18.2002l-67.8994 412.101c-0.0966797 0.769531 -0.186523 2.02344 -0.200195 2.7998\r\n-c0.108398 8.72168 7.27539 15.8008 15.999 15.8008c0.0556641 0 0.145508 0 0.201172 -0.000976562zM308.1 118.2l25.2002 147h-157.3l28.0996 -147h104z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tumblr\" unicode=\"&#xf173;\" horiz-adv-x=\"320\" \r\n-d=\"M309.8 -32.2998c-13.5996 -14.5 -50 -31.7002 -97.3994 -31.7002c-120.801 0 -147 88.7998 -147 140.6v144h-47.5c-5.5 0 -10 4.5 -10 10v68c0 7.2002 4.5 13.6006 11.2998 16c62 21.8008 81.5 76 84.2998 117.101c0.799805 11 6.5 16.2998 16.0996 16.2998h70.9004\r\n-c5.5 0 10 -4.5 10 -10v-115.2h83c5.5 0 10 -4.39941 10 -9.89941v-81.7002c0 -5.5 -4.5 -10 -10 -10h-83.4004v-133.2c0 -34.2002 23.7002 -53.5996 68 -35.7998c4.80078 1.89941 9 3.2002 12.7002 2.2002c3.5 -0.900391 5.7998 -3.40039 7.40039 -7.90039l22 -64.2998\r\n-c1.7998 -5 3.2998 -10.6006 -0.400391 -14.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tumblr-square\" unicode=\"&#xf174;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM317.7 51.7998c2.2998 2.40039 1.2998 5.90039 0.299805 9.10059l-13.7998 40.1992c-1 2.80078 -2.40039 4.40039 -4.60059 4.90039\r\n-c-2.39941 0.599609 -5 -0.200195 -8 -1.40039c-27.6992 -11.0996 -42.5 1 -42.5 22.4004v83.2998h52.1006c3.39941 0 6.2002 2.7998 6.2002 6.2002v51.0996c0 3.40039 -2.80078 6.2002 -6.2002 6.2002h-51.9004v72c0 3.40039 -2.7998 6.2002 -6.2002 6.2002h-44.2998\r\n-c-5.89941 0 -9.5 -3.2998 -10 -10.2002c-1.7998 -25.7002 -13.8994 -59.5 -52.7002 -73.2002c-4.2998 -1.5 -7.09961 -5.5 -7.09961 -10v-42.5c0 -3.39941 2.7998 -6.19922 6.2002 -6.19922h29.7002v-90c0 -32.4004 16.3994 -87.9004 91.8994 -87.9004\r\n-c29.7002 0 52.4004 10.7002 60.9004 19.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"apple\" unicode=\"&#xf179;\" horiz-adv-x=\"384\" \r\n-d=\"M318.7 179.3c0 -1.89941 -3.5 -61.2002 61.7002 -91.8994c-12.2002 -36.8008 -54 -118.601 -102.601 -119.301c-28.0996 0 -44.5996 17.9004 -76.3994 17.9004c-32.8008 0 -50.6006 -17.2998 -75.8008 -17.9004c-48.1992 -1.5 -94.3994 88.5 -107.199 125.2\r\n-c-9.60059 27.9336 -14.4004 55 -14.4004 81.2002c0 88.7002 59.2998 132.3 115.1 133.2c27 0 61.4004 -19.7002 76.4004 -19.7002c14.2002 0 53 23.5 88.5 20.7002c37.5 -2.90039 65.9004 -17.7002 84.7002 -44.6006c-33.6006 -20.3994 -50.2002 -48.0996 -50 -84.7998z\r\n-M262.1 343.5c-19.5996 -22.9004 -43.3994 -36.2998 -69.5 -34.2998c-2.19922 27.5996 8.10059 52.0996 25.6006 71.8994c15.8994 18.5 43.7998 33.5 67.8994 34.9004c0.800781 -10.5996 3.30078 -40.0996 -24 -72.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"windows\" unicode=\"&#xf17a;\" \r\n-d=\"M0 354.3l183.6 25.2998v-177.399h-183.6v152.1zM0 29.7002v149.899h183.6v-175.199zM203.8 1.7002v177.899h244.2v-211.6zM203.8 382.3l244.2 33.7002v-213.8h-244.2v180.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"android\" unicode=\"&#xf17b;\" \r\n-d=\"M89.5996 243.5v-115.8c0 -15.4004 -12.0996 -27.7002 -27.5 -27.7002c-15.2998 0 -30.0996 12.4004 -30.0996 27.7002v115.8c0 15.0996 14.7998 27.5 30.0996 27.5c15.1006 0 27.5 -12.4004 27.5 -27.5zM100.4 86.5v179.4h247.3v-179.4\r\n-c0 -16.4004 -13.2002 -29.5996 -29.4004 -29.5996h-20.2002v-61.1006c0 -36.7998 -55.5 -36.7002 -55.5 0v61.1006h-37.1992v-61.1006c0 -36.5996 -55.2002 -36.8994 -55.2002 0l-0.299805 61.1006h-19.9004c-16.4004 0 -29.5996 13.1992 -29.5996 29.5996zM348.4 275.6\r\n-h-249.101c0 42.8008 25.6006 80 63.6006 99.4004l-19.1006 35.2998c-2.7998 4.90039 4.2998 8 6.7002 3.7998l19.4004 -35.5996c34.8994 15.5 75 14.7002 108.3 0l19.2998 35.5c2.5 4.2998 9.5 1.09961 6.7002 -3.7998l-19.1006 -35.2002\r\n-c37.7002 -19.4004 63.3008 -56.5996 63.3008 -99.4004zM177.7 331.1c0 5.7002 -4.60059 10.5 -10.5 10.5c-5.7002 0 -10.2002 -4.7998 -10.2002 -10.5c0 -5.69922 4.59961 -10.5 10.2002 -10.5c5.89941 0 10.5 4.80078 10.5 10.5zM291.1 331.1\r\n-c0 5.7002 -4.59961 10.5 -10.1992 10.5c-5.90039 0 -10.5 -4.7998 -10.5 -10.5c0 -5.69922 4.59961 -10.5 10.5 -10.5c5.59961 0 10.1992 4.80078 10.1992 10.5zM385.9 271c15.2998 0 30.0996 -12.0996 30.0996 -27.5v-115.8\r\n-c0 -15.2998 -14.7002 -27.7002 -30.0996 -27.7002c-15.1006 0 -27.5 12.2998 -27.5 27.7002v115.8c0 15.4004 12.3994 27.5 27.5 27.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linux\" unicode=\"&#xf17c;\" \r\n-d=\"M220.8 324.7c-1.09961 0.599609 -3.09961 0.399414 -3.39941 1.7002c-0.200195 0.399414 0.199219 0.899414 0.599609 1.09961c1.59961 0.900391 3.7998 0.599609 5.5 -0.0996094c1.2998 -0.600586 3.40039 -1.5 3.2002 -2.90039\r\n-c-0.100586 -1.09961 -1.7998 -1.5 -2.90039 -1.5c-1.2002 0 -2 1.2002 -3 1.7002zM198.9 323c-1 -0.0996094 -2.7002 0.400391 -2.80078 1.40039c-0.199219 1.39941 1.90039 2.2998 3.2002 2.89941c1.7002 0.700195 3.90039 1 5.5 0.100586\r\n-c0.400391 -0.200195 0.799805 -0.700195 0.600586 -1.10059c-0.400391 -1.2002 -2.40039 -1 -3.5 -1.59961c-1 -0.5 -1.80078 -1.7002 -3 -1.7002zM420 44.2002c11.0996 -12.4004 15.9004 -21.5 15.5 -29.7002c-0.5 -8.2002 -6.5 -13.7998 -13.9004 -18.2998\r\n-c-14.8994 -9 -37.2998 -15.7998 -50.8994 -32.2002c-14.2002 -16.9004 -31.7002 -26.5996 -48.2998 -27.9004c-16.5 -1.2998 -32 6.30078 -40.3008 23v0.100586c-1.09961 2.09961 -1.89941 4.39941 -2.5 6.7002c-21.5 -1.2002 -40.1992 5.2998 -55.0996 4.09961\r\n-c-22 -1.2002 -35.7998 -6.5 -48.2998 -6.59961c-4.7998 -10.6006 -14.2998 -17.6006 -25.9004 -20.2002c-16 -3.7002 -36.0996 0 -55.8994 10.3994c-18.5 9.80078 -42 8.90039 -59.3008 12.5c-8.69922 1.80078 -16.2998 5 -20.0996 12.3008\r\n-c-3.7002 7.2998 -3 17.2998 2.2002 31.6992c1.7002 5.10059 0.399414 12.7002 -0.799805 20.8008c-0.600586 3.89941 -1.2002 7.89941 -1.2002 11.7998c0 4.2998 0.700195 8.5 2.7998 12.3994c4.5 8.5 11.7998 12.1006 18.5 14.5c6.7002 2.40039 12.7998 4 17 8.30078\r\n-c5.2002 5.5 10.0996 14.3994 16.5996 20.1992c-2.59961 17.2002 0.200195 35.4004 6.2002 53.3008c12.6006 37.8994 39.2002 74.1992 58.1006 96.6992c16.0996 22.9004 20.7998 41.3008 22.5 64.7002c1.09961 31.7998 -24.5 135.4 77.8994 135.2\r\n-c80.9004 -0.0996094 76.2998 -85.4004 75.7998 -131.3c-0.299805 -30.1006 16.3008 -50.5 33.4004 -72c15.2002 -18 35.0996 -44.2998 46.5 -74.4004c9.2998 -24.5996 12.9004 -51.7998 3.7002 -79.0996c1.39941 -0.5 2.7998 -1.2002 4.09961 -2\r\n-c1.40039 -0.799805 2.7002 -1.7998 4 -2.90039c6.60059 -5.59961 8.7002 -14.2998 10.5 -22.3994c1.90039 -8.10059 3.60059 -15.7002 7.2002 -19.7002zM223.7 360.7c-3.2002 -7.2002 -3.90039 -14.9004 -2.90039 -21.7998c3.60059 -0.900391 8.90039 -2.40039 13 -4.40039\r\n-c-2.09961 12.2002 4.5 23.5 11.7998 23c8.90039 -0.299805 13.9004 -15.5 9.10059 -27.2998c-0.799805 -1.90039 -2.7998 -3.40039 -3.90039 -4.60059c6.7002 -2.2998 11 -4.09961 12.6006 -4.89941c7.89941 9.5 10.7998 26.2002 4.2998 40.3994\r\n-c-9.7998 21.4004 -34.2002 21.8008 -44 -0.399414zM183 372.2c-18.9004 0 -24 -37.5 -8.40039 -52.1006c7.80078 5.7002 6.90039 4.7002 5.90039 5.5c-8 6.90039 -6.59961 27.4004 1.7998 28.1006c6.2998 0.5 10.7998 -10.7002 9.60059 -19.6006\r\n-c3.09961 2.10059 6.69922 3.60059 10.1992 4.60059c1.7002 19.2998 -9 33.5 -19.0996 33.5zM169.4 311.5c-4.2002 -3.2998 -5.60059 -7.40039 -4.2002 -12.2998c1.5 -4.90039 6.09961 -10.5 14.7002 -15.2998c7.7998 -4.60059 12 -11.5 20 -15\r\n-c2.59961 -1.10059 5.69922 -1.90039 9.59961 -2.10059c18.4004 -1.09961 27.0996 11.2998 38.2002 14.9004c11.7002 3.7002 20.0996 11 22.7002 18.0996c3.19922 8.5 -2.10059 14.7002 -10.5 18.2002c-11.3008 4.90039 -16.3008 5.2002 -22.6006 9.2998\r\n-c-10.2998 6.60059 -18.7998 8.90039 -25.8994 8.90039c-14.4004 0 -23.2002 -9.7998 -27.9004 -14.2002c-0.5 -0.5 -7.90039 -5.90039 -14.0996 -10.5zM172.7 -22.5c2.09961 20.5 -31.5 49 -41 68.9004l-19.6006 35.5996c-6.7998 9.2002 -13.7998 14.7998 -21.8994 16\r\n-c-7.7002 1.2002 -12.6006 -1.40039 -17.7002 -6.90039c-4.7998 -5.09961 -8.7998 -12.2998 -14.2998 -18c-7.7998 -6.5 -9.2998 -6.19922 -19.6006 -9.89941c-6.2998 -2.2002 -11.2998 -4.60059 -14.7998 -11.2998c-2.7002 -5 -2.09961 -12.2002 -0.899414 -20\r\n-c1.19922 -7.90039 3 -16.3008 0.599609 -23.9004v-0.200195c-5 -13.7002 -5 -21.7002 -2.59961 -26.3994c7.89941 -15.4004 46.5996 -6.10059 76.5 -21.9004c31.3994 -16.4004 72.5996 -17.0996 75.2998 18zM171.3 3.40039c37.6006 -25.7002 82.2002 -15.7002 114.3 7.19922\r\n-c3.2002 11 6.30078 21.3008 6.80078 29c0.799805 15.2002 1.59961 28.7002 4.39941 39.9004c3.10059 12.5996 9.2998 23.0996 21.4004 27.2998c2.2998 21.1006 18.7002 21.1006 38.2998 12.5c18.9004 -8.5 26 -16 22.7998 -26.0996c1 0 2 0.0996094 4.2002 0\r\n-c5.2002 16.8994 -14.2998 28 -30.7002 34.7998c2.90039 12 2.40039 24.0996 -0.399414 35.7002c-6 25.2998 -22.6006 47.7998 -35.2002 59c-2.2998 0.0996094 -2.10059 -1.90039 2.59961 -6.5c11.6006 -10.7002 37.1006 -49.2002 23.2998 -84.9004\r\n-c-3.89941 1 -7.59961 1.5 -10.8994 1.40039c-5.2998 29.0996 -17.5 53.2002 -23.6006 64.5996c-11.5 21.4004 -29.5 65.2998 -37.1992 95.7002c-4.5 -6.40039 -12.4004 -11.9004 -22.3008 -15c-4.69922 -1.5 -9.69922 -5.5 -15.8994 -9\r\n-c-13.9004 -8 -30 -8.7998 -42.4004 1.2002c-4.5 3.59961 -8 7.59961 -12.5996 10.2998c-1.60059 0.900391 -5.10059 3.2998 -6.2002 4.09961c-2 -37.7998 -27.2998 -85.2998 -39.2998 -112.699c-8.2998 -19.7002 -13.2002 -40.8008 -13.7998 -61.5\r\n-c-21.8008 29.0996 -5.90039 66.2998 2.59961 82.3994c9.5 17.6006 11 22.5 8.7002 20.7998c-8.60059 -14 -22 -36.2998 -27.2002 -59.1992c-2.7002 -11.9004 -3.2002 -24 0.299805 -35.2002s11.1006 -21.5 24.6006 -29.9004c0 0 24.7998 -14.2998 38.2998 -32.5\r\n-c7.39941 -10 9.7002 -18.7002 7.39941 -24.8994c-2.5 -6.7002 -9.59961 -8.90039 -16.6992 -8.90039c4.7998 -6 10.2998 -13 14.3994 -19.5996zM428.7 14.9004c0.299805 5.09961 -3.10059 13 -13.7002 24.5996c-10 11.2998 -7.2002 33.0996 -17.0996 41.5996\r\n-c-6.90039 6 -13.6006 5.40039 -22.6006 5.10059c-7.7002 -8.7998 -25.7998 -19.6006 -38.3994 -16.2998c-11.5 2.89941 -18 16.2998 -18.8008 29.5c-0.299805 -0.200195 -0.699219 -0.300781 -1 -0.5c-7.09961 -3.90039 -11.0996 -10.8008 -13.6992 -21.1006\r\n-c-2.5 -10.2002 -3.40039 -23.5 -4.2002 -38.7002c-0.700195 -11.7998 -6.2002 -26.3994 -9.90039 -40.5996c-3.5 -13.2002 -5.7998 -25.2002 -1.09961 -36.2998c7.2002 -14.5 19.5 -20.4004 33.7002 -19.2998c14.1992 1.09961 30.3994 9.7998 43.5996 25.5\r\n-c22 26.5996 62.2998 29.6992 63.2002 46.5zM173.3 299.3c-3.5 2.7998 -3.09961 6.60059 -1.7002 6.5c2.40039 -0.299805 2.80078 -3.5 4.30078 -4.89941c2 -1.90039 4.59961 -4.40039 7.69922 -6.90039c6.2002 -4.90039 14.5 -9.7002 24.9004 -9.7002\r\n-s22.5 6 29.9004 10.2002c4.19922 2.40039 9.5 6.59961 13.8994 9.7998c3.40039 2.5 3.2002 5.40039 6 5.10059c2.7998 -0.300781 0.799805 -3.2002 -3.09961 -6.60059c-3.90039 -3.39941 -9.90039 -7.7998 -14.7998 -10.3994\r\n-c-9.30078 -4.90039 -20.2002 -10.8008 -31.8008 -10.8008c-11.5 0 -20.6992 5.40039 -27.2998 10.6006c-3.2998 2.59961 -6 5.2002 -8 7.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dribbble\" unicode=\"&#xf17d;\" horiz-adv-x=\"512\" \r\n-d=\"M256 440c136.748 0 248 -111.252 248 -248s-111.252 -248 -248 -248s-248 111.252 -248 248s111.252 248 248 248zM419.97 325.634c-4.46582 -6.04102 -39.9629 -51.5459 -118.284 -83.5225c7.43652 -15.2217 12.8652 -27.5732 18.6172 -41.6143\r\n-c70.4844 8.86426 140.519 -5.34082 147.502 -6.81836c-0.46582 49.998 -18.332 95.9092 -47.835 131.955zM396.421 350.13c-52.0947 46.2188 -122.885 63.6816 -190.061 47.4893c5.85449 -7.83984 44.3281 -60.2324 79.04 -124.008\r\n-c75.3232 28.2324 107.211 71.0918 111.021 76.5186zM165.941 383.38c-59.2637 -27.9531 -103.562 -82.585 -117.298 -148.318c9.47461 -0.125 96.7471 -0.503906 195.834 25.8096c-35.0986 62.3926 -72.9512 114.85 -78.5361 122.509zM44.1699 191.677\r\n-c0 -54.4072 20.624 -104.082 54.457 -141.636c34.3369 58.7793 103.932 120.731 180.531 142.306c-5.31738 12.0342 -11.1104 24.0811 -17.1738 35.9492c-105.786 -31.6592 -208.438 -30.3359 -217.706 -30.1455c-0.0654297 -2.15137 -0.108398 -4.30762 -0.108398 -6.47363\r\n-zM125.977 24.5645c62.7539 -48.9355 144.656 -56.8955 212.769 -27.8828c-3.15039 18.585 -15.4492 83.3555 -45.1895 160.639c-85.4004 -29.1348 -145.452 -87.5234 -167.579 -132.756zM374.357 16.0752c47.5215 32.1338 81.3525 83.0371 90.7949 141.978\r\n-c-7.24707 2.28711 -65.5674 19.6816 -131.947 9.05566c27.7061 -76.1367 38.9805 -138.147 41.1523 -151.033z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skype\" unicode=\"&#xf17e;\" \r\n-d=\"M424.7 148.2c14.5996 -18.9004 23.2998 -42.5 23.2002 -68.1006c0 -61.7998 -50.2002 -112 -112 -112c-25.6006 0 -49.2002 8.7002 -68.2002 23.3008c-14.1006 -3 -28.9004 -4.7002 -43.7998 -4.7002c-113.4 0 -205.301 91.7998 -205.301 205.3\r\n-c0 14.9004 1.80078 29.7998 4.7002 43.7998c-14.5996 18.9004 -23.2998 42.5 -23.2998 68.2002c0 61.7998 50.2002 112 112 112c25.7002 0 49.2998 -8.7002 68.2998 -23.4004c14.1006 3 28.9004 4.7002 43.7998 4.7002c113.4 0 205.301 -91.7998 205.301 -205.3\r\n-c0 -14.9004 -1.80078 -29.7998 -4.7002 -43.7998zM230.1 56.7002c54.9004 0 112 27.3994 112 86.5c0 50.7998 -49.2998 68.2998 -90.6992 77.5996c-48.3008 11.2002 -69.1006 13.2002 -69.1006 33c0 15.5 16.2998 22.5 42 22.5c45.7998 0 46.7002 -33.5 75 -33.5\r\n-c18.9004 0 30.2998 14.9004 30.2998 31.7998c0 33.5 -55.6992 55.4004 -110.8 55.4004c-50.5 0 -109.1 -21.9004 -109.1 -81.0996c0 -65.2002 55.2998 -71.8008 117.8 -87.2002c26 -6.40039 42 -9.2998 42 -28c0 -14.9004 -16.5996 -26.2998 -42.2998 -26.2998\r\n-c-54 0 -56.9004 44.8994 -88.1006 44.8994c-20.5 0 -29.5 -14.5996 -29.5 -30.5996c0 -35.7998 54.9004 -65 120.5 -65z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"foursquare\" unicode=\"&#xf180;\" horiz-adv-x=\"368\" \r\n-d=\"M323.1 445c40 0 50.7002 -22.7998 42.2002 -65.2002l-48.5996 -243c-3.7002 -14.5 -9.2002 -39.7002 -44.2998 -39.7002h-83.4004c-3.40039 0 -3.7002 0.300781 -6.7998 -3.09961c0 0 -2.2002 -2.5 -131.101 -151.9\r\n-c-10.0996 -11.6992 -26.6992 -9.59961 -32.8994 -7.09961c-6.10059 2.40039 -18.2002 9.7998 -18.2002 30.0996v433.801c0 17.7998 12.4004 46.0996 49.9004 46.0996h273.199zM306.8 371.2c2.10059 9.7998 -5.2998 17.5 -13.5 17.5h-219\r\n-c-9.7998 0 -16.5996 -8.90039 -16.5996 -16.6006v-338.8c0 -0.899414 0.899414 -1.2002 1.7998 -0.299805c80.5996 96.9004 89.5 108.3 89.5 108.3c9.2998 10.7998 13 12.6006 26.5 12.6006h73.5c10.0996 0 16 8.59961 16.9004 13.5\r\n-c0.899414 5 9.59961 49.8994 11.3994 58.7998c1.7998 9 -6.5 18.2002 -14.7998 18.2002h-90.4004c-12 0 -20.5996 8.59961 -20.5996 20.5996v13c0 12 8.59961 20.2998 20.5996 20.2998h106.4c7.40039 0 15.7002 6.7002 16.9004 13.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trello\" unicode=\"&#xf181;\" \r\n-d=\"M392.3 416c30.7998 -0.200195 55.7002 -25.2002 55.6006 -56v-336c0 -30.7998 -24.9004 -55.7998 -55.7002 -56h-336.2c-30.9004 0 -56 25.0996 -56 56c0 340 -0.0996094 336 0 336c0 30.9004 25.0996 56 56.0996 56h336.2zM197 76.7002h0.0996094v254.2\r\n-c0 14.8994 -12.0996 26.8994 -26.8994 26.8994h-82.9004c-14.8994 0 -26.8994 -12.0996 -26.8994 -26.8994v-254.2c0.0996094 -14.7998 12.1992 -26.7002 27 -26.6006h82.6992c14.8008 0 26.7002 11.9004 26.9004 26.6006zM390.1 188.7v142.1\r\n-c0 14.9004 -12.0996 26.9004 -26.8994 26.9004h-81.1006c-14.7998 0 -26.7998 -12.1006 -26.7998 -26.9004v-142.1c0 -14.9004 12.1006 -26.9004 26.9004 -26.9004h81c14.8994 0 26.8994 12.1006 26.8994 26.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gratipay\" unicode=\"&#xf184;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM362.6 213.6c8.80078 12 19.1006 50.4004 -13.7998 72c-27.7002 18.1006 -54.2002 4.2002 -68.0996 -11.8994c-15.1006 -16.9004 -45.7998 -17.9004 -61.7002 0\r\n-c-13.9004 16.0996 -40.4004 30 -68.5 11.8994c-32.7002 -21.5996 -22.2998 -60.0996 -13.5996 -72l112.699 -152.699z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vk\" unicode=\"&#xf189;\" horiz-adv-x=\"576\" \r\n-d=\"M545 330.3c-7.40039 -34.2998 -79.2998 -135.5 -79.4004 -135.6c-6.19922 -10 -8.69922 -15 0 -26.2002c3.40039 -4.7998 79.1006 -76.5996 90.3008 -111.5c4.89941 -16.5996 -3.60059 -25 -20.4004 -25h-58.9004c-22.3994 0 -29 17.9004 -69 57.9004\r\n-c-35 33.6992 -50 38.0996 -58.6992 38.0996c-18.8008 0 -15.4004 -6.2998 -15.4004 -73.0996c0 -14.5 -4.59961 -22.9004 -42.0996 -22.9004c-62.4004 0 -131 37.9004 -179.7 107.8c-73.1006 102.4 -93.1006 179.9 -93.1006 195.5c0 8.7998 3.40039 16.7002 20.2002 16.7002\r\n-h58.9004c15.0996 0 20.7998 -6.59961 26.5996 -22.9004c28.7998 -84 77.4004 -157.399 97.4004 -157.399c7.5 0 10.8994 3.5 10.8994 22.5v86.7998c-2.19922 40 -23.3994 43.2998 -23.3994 57.5c0 6.5 5.59961 13.5 15 13.5h92.5996\r\n-c12.4004 0 16.6006 -6.7002 16.6006 -21.7002v-116.7c0 -12.5 5.69922 -16.8994 9.39941 -16.8994c7.5 0 13.7998 4.39941 27.5 18.0996c42.4004 47.4004 72.4004 120.5 72.4004 120.5c3.7002 8.7998 10.5996 16.7002 25.5996 16.7002h58.9004\r\n-c17.7998 0 21.5 -9.2002 17.7998 -21.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weibo\" unicode=\"&#xf18a;\" horiz-adv-x=\"512\" \r\n-d=\"M407 270.4c7.59961 24 -13.4004 46.7998 -37.4004 41.6992c-22 -4.7998 -28.7998 28.1006 -7.09961 32.8008c50.0996 10.8994 92.2998 -37.1006 76.5 -84.8008c-6.7998 -21.1992 -38.7998 -10.7998 -32 10.3008zM214.8 1.2998c-106.3 0 -214.8 51.4004 -214.8 136.3\r\n-c0 44.3008 28 95.4004 76.2998 143.7c99.7002 99.7002 203.2 100.9 173.601 5.7002c-4 -13.0996 12.2998 -5.7002 12.2998 -6c79.5 33.5996 140.5 16.7998 114 -51.4004c-3.7002 -9.39941 1.09961 -10.8994 8.2998 -13.0996c135.7 -42.2998 34.7998 -215.2 -169.7 -215.2z\r\n-M358.5 147.6c-5.40039 55.7002 -78.5 94 -163.4 85.7002c-84.7998 -8.59961 -148.8 -60.2998 -143.399 -116c5.39941 -55.7002 78.5 -94 163.399 -85.7002c84.8008 8.60059 148.801 60.3008 143.4 116zM347.9 412.9c102.3 21.5996 189.3 -74.5 157.399 -174.301\r\n-c-8.2998 -25 -44.7998 -12.1992 -37.3994 12c23.0996 71.2002 -39.4004 139.2 -111.7 124c-25.1006 -5.39941 -34.2002 32.7002 -8.2998 38.3008zM269.4 101.9c-17.1006 -38.8008 -66.8008 -60 -109.101 -46.3008c-40.7998 13.1006 -58 53.4004 -40.2998 89.7002\r\n-c17.7002 35.4004 63.0996 55.4004 103.4 45.1006c42 -10.8008 63.0996 -50.2002 46 -88.5zM183.1 131.9c-12.8994 5.39941 -30 -0.300781 -38 -12.9004c-8.2998 -12.9004 -4.2998 -28 8.60059 -34c13.0996 -6 30.7998 -0.299805 39.0996 12.9004\r\n-c8 13.0996 3.7002 28.2998 -9.7002 34zM215.7 145.3c-5.10059 1.7002 -11.4004 -0.599609 -14.2998 -5.39941c-2.90039 -5.10059 -1.40039 -10.6006 3.69922 -12.9004c5.10059 -2 11.7002 0.299805 14.6006 5.40039c2.7998 5.19922 1.09961 10.8994 -4 12.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"renren\" unicode=\"&#xf18b;\" horiz-adv-x=\"512\" \r\n-d=\"M214 278.9c0 -110.4 -61 -205.4 -147.6 -247.4c-36.4004 43.2998 -58.4004 98.7998 -58.4004 159.9c0 122.699 89.0996 224.399 206 244.1v-156.6zM255 -56c-42.9004 0 -83.2998 11 -118.5 30.4004c57.2002 36.0996 103.4 90.6992 118.5 154.6\r\n-c15.5 -63.9004 61.7002 -118.5 118.8 -154.7c-35.0996 -19.2998 -75.5 -30.2998 -118.8 -30.2998zM445.6 31.5c-86.5996 42 -147.6 136.9 -147.6 247.4v156.6c116.9 -19.7002 206 -121.4 206 -244.1c0 -61.1006 -22 -116.601 -58.4004 -159.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pagelines\" unicode=\"&#xf18c;\" horiz-adv-x=\"384\" \r\n-d=\"M384 135.3c-55.0996 -136.7 -187.1 -54 -187.1 -54c-40.5 -81.7998 -107.4 -134.399 -184.601 -134.7c-16.0996 0 -16.5996 24.4004 0 24.4004c64.4004 0.299805 120.5 42.7002 157.2 110.1c-41.0996 -15.8994 -118.6 -27.8994 -161.6 82.2002\r\n-c109 44.9004 159.1 -11.2002 178.3 -45.5c9.89941 24.4004 17 50.9004 21.5996 79.7002c0 0 -139.7 -21.9004 -149.5 98.0996c119.101 47.9004 152.601 -76.6992 152.601 -76.6992c1.59961 16.6992 3.2998 52.5996 3.2998 53.3994c0 0 -106.3 73.7002 -38.1006 165.2\r\n-c124.601 -43 61.4004 -162.4 61.4004 -162.4c0.5 -1.59961 0.5 -23.7998 0 -33.3994c0 0 45.2002 89 136.4 57.5c-4.2002 -134 -141.9 -106.4 -141.9 -106.4c-4.40039 -27.3994 -11.2002 -53.3994 -20 -77.5c0 0 83 91.7998 172 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stack-exchange\" unicode=\"&#xf18d;\" \r\n-d=\"M17.7002 115.7h412.7v-22c0 -37.7002 -29.3008 -68 -65.3008 -68h-19l-86.7998 -89.7002v89.7002h-176.3c-36 0 -65.2998 30.2998 -65.2998 68v22zM17.7002 139.3v85h412.7v-85h-412.7zM17.7002 248.7v85h412.7v-85h-412.7zM365 448\r\n-c36 0 65.2998 -30.2998 65.4004 -67.7002v-22.2998h-412.7v22.2998c0 37.4004 29.2998 67.7002 65.2998 67.7002h282z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vimeo-square\" unicode=\"&#xf194;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM383.8 266.4c1.90039 41.5996 -13.5996 63 -46.5 64c-44.2998 1.39941 -74.3994 -23.6006 -90.0996 -75.1006\r\n-c19.5996 8.40039 48.5996 10.6006 45.2002 -22.2002c-0.900391 -11.0996 -8.10059 -27.0996 -21.5 -48.2998c-37.2002 -58.7002 -46.3008 -39.0996 -66.8008 90.5c-5.7998 36.5 -21.0996 53.5 -46 51.1006c-22 -2 -57.1992 -38 -94.0996 -70.4004l15 -19.4004\r\n-c14.2998 10.1006 22.7002 15.1006 25.0996 15.1006c20.8008 0 31.5 -54.1006 56.7002 -146.4c12.9004 -34.3994 28.6006 -51.5996 47.2998 -51.5996c30.1006 0 66.9004 28.2998 110.4 84.7998c42.0996 54.0996 63.9004 96.7998 65.2998 127.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"slack\" unicode=\"&#xf198;\" \r\n-d=\"M94.1201 132.9c0 -25.9004 -21.1602 -47.0605 -47.0605 -47.0605c-25.8994 0 -47.0596 21.1602 -47.0596 47.0605c0 25.8994 21.1602 47.0596 47.0596 47.0596h47.0605v-47.0596zM117.84 132.9c0 25.8994 21.1602 47.0596 47.0605 47.0596\r\n-c25.8994 0 47.0596 -21.1602 47.0596 -47.0596v-117.841c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596c-25.9004 0 -47.0605 21.1602 -47.0605 47.0596v117.841zM164.9 321.88c-25.9004 0 -47.0605 21.1602 -47.0605 47.0605c0 25.8994 21.1602 47.0596 47.0605 47.0596\r\n-c25.8994 0 47.0596 -21.1602 47.0596 -47.0596v-47.0605h-47.0596zM164.9 298.16c25.8994 0 47.0596 -21.1602 47.0596 -47.0605c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596h-117.841c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596\r\n-c0 25.9004 21.1602 47.0605 47.0596 47.0605h117.841zM353.88 251.1c0 25.9004 21.1602 47.0605 47.0605 47.0605c25.8994 0 47.0596 -21.1602 47.0596 -47.0605c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596h-47.0605v47.0596zM330.16 251.1\r\n-c0 -25.8994 -21.1602 -47.0596 -47.0605 -47.0596c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596v117.841c0 25.8994 21.1602 47.0596 47.0596 47.0596c25.9004 0 47.0605 -21.1602 47.0605 -47.0596v-117.841zM283.1 62.1201c25.9004 0 47.0605 -21.1602 47.0605 -47.0605\r\n-c0 -25.8994 -21.1602 -47.0596 -47.0605 -47.0596c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596v47.0605h47.0596zM283.1 85.8398c-25.8994 0 -47.0596 21.1602 -47.0596 47.0605c0 25.8994 21.1602 47.0596 47.0596 47.0596h117.841\r\n-c25.8994 0 47.0596 -21.1602 47.0596 -47.0596c0 -25.9004 -21.1602 -47.0605 -47.0596 -47.0605h-117.841z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wordpress\" unicode=\"&#xf19a;\" horiz-adv-x=\"512\" \r\n-d=\"M61.7002 278.6l101.5 -278c-71 34.4004 -119.9 107.2 -119.9 191.4c0 30.9004 6.60059 60.0996 18.4004 86.5996zM399.6 202.7c0 -18.2002 -7 -39.2998 -16 -68.7002l-21.1992 -70.9004l-76.9004 228.7c12.7998 0.700195 24.2998 2 24.2998 2\r\n-c11.4004 1.2998 10.1006 18.2002 -1.39941 17.5c0 0 -34.5 -2.7002 -56.7002 -2.7002c-20.9004 0 -56 2.7002 -56 2.7002c-11.4004 0.700195 -12.7998 -16.7998 -1.2998 -17.5c0 0 10.7998 -1.2998 22.2998 -2l33.0996 -90.7998l-46.5996 -139.6l-77.5 230.399\r\n-c12.7998 0.700195 24.2998 2 24.2998 2c11.4004 1.2998 10.0996 18.2002 -1.40039 17.5c0 0 -34.5 -2.7002 -56.6992 -2.7002c-4 0 -8.7002 0.100586 -13.7002 0.300781c38.0996 57.7998 103.5 95.8994 177.8 95.8994c55.4004 0 105.8 -21.2002 143.7 -55.8994\r\n-c-1 0.0996094 -1.90039 0.199219 -2.7998 0.199219c-20.9004 0 -35.7002 -18.1992 -35.7002 -37.7998c0 -17.5 10.0996 -32.3994 20.8994 -49.8994c8.10059 -14.2002 17.5 -32.4004 17.5 -58.7002zM259.7 173.4l65.3994 -179.2c0.400391 -1 0.900391 -2 1.5 -2.90039\r\n-c-22.0996 -7.7998 -45.7998 -12.0996 -70.5996 -12.0996c-20.9004 0 -41 3.09961 -60.0996 8.7002zM442.7 294.1c16.5996 -30.2998 26 -65.0996 26 -102.1c0 -78.5 -42.5 -147 -105.8 -183.9l65 187.9c12.1992 30.4004 16.1992 54.5996 16.1992 76.2002\r\n-c0 7.89941 -0.5 15.0996 -1.39941 21.8994zM504 192c0 -136.8 -111.3 -248 -248 -248c-136.8 0 -248 111.3 -248 248c0 136.8 111.2 248 248 248c136.7 0 248 -111.2 248 -248zM492.6 192c0 130.5 -106.199 236.6 -236.6 236.6c-130.5 0 -236.6 -106.1 -236.6 -236.6\r\n-s106.199 -236.6 236.6 -236.6c130.5 0 236.6 106.1 236.6 236.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"openid\" unicode=\"&#xf19b;\" \r\n-d=\"M271.5 16l-68 -32c-115 10.2998 -203.5 71.5 -203.5 145.8c0 71.5 82.5 131 191.7 144.3v-43c-71.5 -12.5 -124 -53 -124 -101.3c0 -51 58.5 -93.2998 135.7 -103v340l68 33.2002v-384h0.0996094zM448 157l-131.3 28.5l36.7998 20.7002c-19.5 11.5 -43.5 20 -70 24.7998\r\n-v43c46.2002 -5.5 87.7002 -19.5 120.3 -39.2998l35 19.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yahoo\" unicode=\"&#xf19e;\" \r\n-d=\"M252 156l4 -220c-12.7002 2.2002 -23.5 3.90039 -32.2998 3.90039c-8.40039 0 -19.2002 -1.7002 -32.2998 -3.90039l4 220c-55 94.7998 -110.4 196.8 -174 292c11.8994 -3.09961 23 -3.90039 33.1992 -3.90039c9 0 20.4004 0.800781 34.1006 3.90039\r\n-c40.8994 -72.2002 82.0996 -138.7 135 -225.5c37.2998 61.5996 91.0996 144.1 134.899 225.5c11.1006 -2.90039 22 -3.90039 32.9004 -3.90039c11.5 0 23.2002 1 35 3.90039c-34.4004 -47.9004 -131.6 -216.9 -174.5 -292z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google\" unicode=\"&#xf1a0;\" horiz-adv-x=\"488\" \r\n-d=\"M488 186.2c0 -141.5 -96.9004 -242.2 -240 -242.2c-137.2 0 -248 110.8 -248 248s110.8 248 248 248c66.7998 0 123 -24.5 166.3 -64.9004l-67.5 -64.8994c-88.2998 85.2002 -252.5 21.2002 -252.5 -118.2c0 -86.5 69.1006 -156.6 153.7 -156.6\r\n-c98.2002 0 135 70.3994 140.8 106.899h-140.8v85.2998h236.1c2.30078 -12.6992 3.90039 -24.8994 3.90039 -41.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reddit\" unicode=\"&#xf1a1;\" horiz-adv-x=\"512\" \r\n-d=\"M201.5 142.5c-13.7998 0 -24.9004 11.0996 -24.9004 24.5996c0 13.8008 11.1006 24.9004 24.9004 24.9004c13.5996 0 24.5996 -11.0996 24.5996 -24.9004c0 -13.5996 -11.0996 -24.5996 -24.5996 -24.5996zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248\r\n-s111 248 248 248s248 -111 248 -248zM371.7 233.2c-9.40039 0 -17.7002 -3.90039 -23.7998 -10c-22.4004 15.5 -52.6006 25.5 -86.1006 26.5996l17.4004 78.2998l55.3994 -12.5c0 -13.5996 11.1006 -24.5996 24.6006 -24.5996c13.7998 0 24.8994 11.2998 24.8994 24.9004\r\n-c0 13.5996 -11.0996 24.8994 -24.8994 24.8994c-9.7002 0 -18 -5.7998 -22.1006 -13.7998l-61.1992 13.5996c-3 0.800781 -6.10059 -1.39941 -6.90039 -4.39941l-19.0996 -86.4004c-33.2002 -1.39941 -63.1006 -11.2998 -85.5 -26.7998\r\n-c-6.10059 6.40039 -14.7002 10.2002 -24.1006 10.2002c-34.8994 0 -46.2998 -46.9004 -14.3994 -62.7998c-1.10059 -5 -1.7002 -10.2002 -1.7002 -15.5c0 -52.6006 59.2002 -95.2002 132 -95.2002c73.0996 0 132.3 42.5996 132.3 95.2002\r\n-c0 5.2998 -0.599609 10.7998 -1.90039 15.7998c31.3008 16 19.8008 62.5 -14.8994 62.5zM302.8 117c2.2002 2.2002 6.10059 2.2002 8.2998 0c2.5 -2.5 2.5 -6.40039 0 -8.59961c-22.8994 -22.8008 -87.3994 -22.8008 -110.199 0c-2.5 2.19922 -2.5 6.09961 0 8.59961\r\n-c2.19922 2.2002 6.09961 2.2002 8.2998 0c17.5 -17.9004 75.3994 -18.2002 93.5996 0zM310.5 192c13.9004 0 24.9004 -11.0996 24.9004 -24.9004c0 -13.5 -11.1006 -24.5996 -24.9004 -24.5996c-13.5 0 -24.5996 11 -24.5996 24.5996c0 13.8008 11 24.9004 24.5996 24.9004z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reddit-square\" unicode=\"&#xf1a2;\" \r\n-d=\"M283.2 102.5c2.7002 -2.7002 2.7002 -6.7998 0 -9.2002c-24.5 -24.5 -93.7998 -24.5996 -118.4 0c-2.7002 2.40039 -2.7002 6.5 0 9.2002c2.40039 2.40039 6.5 2.40039 8.90039 0c18.7002 -19.2002 81 -19.5996 100.5 0c2.39941 2.2998 6.59961 2.2998 9 0zM191.9 156.3\r\n-c0 -14.5996 -11.9004 -26.5 -26.5 -26.5c-14.9004 0 -26.8008 11.9004 -26.8008 26.5c0 14.9004 11.9004 26.7998 26.8008 26.7998c14.5996 0 26.5 -11.8994 26.5 -26.7998zM282.6 183.1c14.9004 0 26.8008 -11.8994 26.8008 -26.7998\r\n-c0 -14.5996 -11.9004 -26.5 -26.8008 -26.5c-14.5996 0 -26.5 11.9004 -26.5 26.5c0 14.9004 11.9004 26.7998 26.5 26.7998zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM348.3 227.4\r\n-c-10.0996 0 -19 -4.2002 -25.5996 -10.7002c-24.1006 16.7002 -56.5 27.3994 -92.5 28.5996l18.7002 84.2002l59.5 -13.4004c0 -14.5996 11.8994 -26.5 26.5 -26.5c14.8994 0 26.7998 12.2002 26.7998 26.8008c0 14.5996 -11.9004 26.7998 -26.7998 26.7998\r\n-c-10.4004 0 -19.3008 -6.2002 -23.8008 -14.9004l-65.6992 14.6006c-3.30078 0.899414 -6.5 -1.5 -7.40039 -4.80078l-20.5 -92.7998c-35.7002 -1.5 -67.7998 -12.2002 -91.9004 -28.8994c-6.5 6.7998 -15.7998 11 -25.8994 11c-37.5 0 -49.7998 -50.4004 -15.5 -67.5\r\n-c-1.2002 -5.40039 -1.7998 -11 -1.7998 -16.7002c0 -56.5 63.6992 -102.3 141.899 -102.3c78.5 0 142.2 45.7998 142.2 102.3c0 5.7002 -0.599609 11.5996 -2.09961 17c33.5996 17.2002 21.1992 67.2002 -16.1006 67.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stumbleupon-circle\" unicode=\"&#xf1a3;\" horiz-adv-x=\"496\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 262.5c9.7998 0 17.7998 -8 17.7002 -17.5996v-20.6006l22.8994 -10.7002l34.1006 10.1006v23.7002c0 40.2998 -34 72.5996 -74.7002 72.5996\r\n-c-40.5 0 -74.7002 -32.0996 -74.7002 -72.0996v-108.4c0 -9.90039 -8 -17.7998 -17.7998 -17.7998s-17.7998 7.7998 -17.7998 17.7998v45.7998h-57.2998v-46.5c0 -41.3994 33.5 -74.8994 74.8994 -74.8994c41 0 74.9004 33 74.9004 73.8994v106.9\r\n-c0 9.7998 8 17.7998 17.7998 17.7998zM423.6 138.9c0 0 0 0.5 0.100586 46.3994h-57.2998v-48c0 -9.7002 -8 -17.5996 -17.8008 -17.5996c-9.7998 0 -17.7998 7.7998 -17.7998 17.5996v47.1006l-34.0996 -10.1006l-22.9004 10.7002v-46.7998\r\n-c0 -41 33.7002 -74.2002 74.9004 -74.2002c41.3994 0 74.8994 33.5 74.8994 74.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stumbleupon\" unicode=\"&#xf1a4;\" horiz-adv-x=\"512\" \r\n-d=\"M502.9 182v-69.7002c0 -62.0996 -50.3008 -112.399 -112.4 -112.399c-61.7998 0 -112.4 49.7998 -112.4 111.3v70.2002l34.3008 -16l51.0996 15.1992v-70.5996c0 -14.7002 12 -26.5 26.7002 -26.5s26.7998 11.7998 26.7998 26.5v72h85.9004zM278.2 240.2v30.8994\r\n-c0 14.7002 -12 26.7002 -26.7002 26.7002s-26.7002 -12 -26.7002 -26.7002v-160.3c0 -61.2998 -50.7998 -110.8 -112.399 -110.8c-62.1006 0 -112.4 50.2998 -112.4 112.3v69.7002h86v-68.5996c0 -14.9004 12 -26.7002 26.7002 -26.7002s26.7002 11.7998 26.7002 26.7002\r\n-v162.399c0 60 51.2998 108.2 112.1 108.2c61 0 112.1 -48.5 112.1 -109v-35.5996l-51.0996 -15.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"delicious\" unicode=\"&#xf1a5;\" \r\n-d=\"M446.5 380c1 -3.7998 1.5 -7.90039 1.59961 -12v-352.1c0 -26.5 -21.5 -48 -48 -48h-352c-4.09961 0 -8.19922 0.5 -12 1.5c-7.69922 2 -14.5996 5.7998 -20.2998 11c-1.2002 1.09961 -2.2998 2.19922 -3.2998 3.2998c-5.2002 5.7002 -9 12.5996 -11 20.2998\r\n-c-1 3.7998 -1.5 7.90039 -1.5 12v352c0 26.5 21.5 48 48 47.9004h352c4.09961 0 8.2002 -0.5 12 -1.5c1.90039 -0.400391 3.7002 -1 5.40039 -1.7002c1.89941 -0.700195 3.69922 -1.5 5.5 -2.5c1.39941 -0.700195 2.69922 -1.5 4 -2.40039\r\n-c1.09961 -0.799805 2.19922 -1.59961 3.2998 -2.5c2.5 -2 4.7998 -4.2998 6.89941 -6.7998c1.7002 -2.09961 3.30078 -4.5 4.7002 -6.90039c1.2998 -2.2998 2.40039 -4.59961 3.2998 -7.09961c0.5 -1.5 1 -3 1.40039 -4.5zM416 16v176h-192v192h-176\r\n-c-8.7998 0 -16 -7.2002 -16 -16v-176h192v-192h176c8.7998 0 16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"digg\" unicode=\"&#xf1a6;\" horiz-adv-x=\"512\" \r\n-d=\"M81.7002 275.7v76.2998h51v-250.7h-132.7v174.4h81.7002zM81.7002 142.3v92.2998h-30.7998v-92.2998h30.7998zM378.9 275.7h133.1v-243.7h-133.1v40.7998h81.7998v28.5h-81.7998v174.4zM460.7 142.3v92.2998h-30.7998v-92.2998h30.7998zM225.1 101.3v174.4h133.301\r\n-v-243.7h-133.301v40.7998h82.1006v28.5h-82.1006zM276.3 234.6v-92.2998h30.7998v92.2998h-30.7998zM153.3 352h51.2998v-51h-51.2998v51zM153.3 275.7h51.2998v-174.4h-51.2998v174.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pied-piper-pp\" unicode=\"&#xf1a7;\" \r\n-d=\"M205.3 273.4c0 -21.1006 -14.2002 -38.1006 -31.7002 -38.1006c-7.09961 0 -12.7998 1.2002 -17.1992 3.7002v68c4.39941 2.7002 10.0996 4.2002 17.1992 4.2002c17.5 0 31.7002 -16.9004 31.7002 -37.7998zM257.9 206.4c17.3994 0 31.6992 -17 31.6992 -38.1006\r\n-c0 -20.8994 -14.2998 -37.7998 -31.6992 -37.7998c-7.10059 0 -12.8008 1.2002 -17.2002 3.7002v68c4.39941 2.7002 10.0996 4.2002 17.2002 4.2002zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\r\n-c26.5 0 48 -21.5 48 -48zM185 192.9c41 0 74.2002 35.5996 74.2002 79.5996s-33.2002 79.5996 -74.2002 79.5996c-12 0 -24.0996 -3.19922 -34.5996 -8.7998h-45.7002v-206.3l51.7998 10.0996v50.6006c8.59961 -3.10059 18.0996 -4.7998 28.5 -4.7998zM343.4 167.6\r\n-c0 44 -33.2002 79.6006 -73.9004 79.6006c-3.2002 0 -6.40039 -0.200195 -9.59961 -0.700195c-3.7002 -12.5 -10.1006 -23.7998 -19.2002 -33.4004c-13.7998 -15 -32.2002 -23.7998 -51.7998 -24.7998v-156.3l51.7998 10.0996v50.6006\r\n-c8.59961 -3.2002 18.2002 -4.7002 28.7002 -4.7002c40.7998 0 74 35.5996 74 79.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pied-piper-alt\" unicode=\"&#xf1a8;\" horiz-adv-x=\"576\" \r\n-d=\"M244 202l-27.7002 -5.7002l-1.7002 4.90039c6.7002 0.5 12.7002 3.7002 19.3008 3.7002c3.7998 0 6.89941 -0.900391 10.0996 -2.90039zM379.9 4.09961c9.5 0 28.1992 -45.0996 33 -55.0996c-35.9004 -13.4004 -70.3008 -15.9004 -106 -9.7998l-6.90039 45.0996\r\n-c15.7998 10.2998 60.9004 19.7998 79.9004 19.7998zM340.8 271c-7.59961 3.5 -63.8994 6.40039 -98.7998 -10c6.2998 11.7998 13.2002 17 25.9004 21.7998c27.2998 10.2998 40.1992 30.5 58.8994 51.1006c11.9004 -8.40039 12 -24.6006 31.6006 -23v-21.8008\r\n-l6.2998 -0.299805c37.3994 14.4004 74.7002 30.2002 106.6 54.6006c48.2998 36.7998 52.9004 50 81.2998 100l2 2.59961c-0.599609 -14.0996 -6.2998 -27.2998 -12.3994 -39.9004c-30.5 -63.7998 -78.7002 -100.3 -146.8 -116.699\r\n-c-12.4004 -2.90039 -26.4004 -3.2002 -37.6006 -8.90039c1.40039 -9.7998 13.2002 -18.0996 13.2002 -23c0 -3.40039 -5.5 -7.2002 -7.5 -8.59961c-11.2002 12.8994 -16.0996 19.2998 -22.7002 22.0996zM555.5 448l-0.299805 -1.40039l-0.600586 -0.599609\r\n-l0.300781 0.900391zM496.3 65.9004c20.1006 -34.2002 43.7002 -54.3008 72.7002 -79.9004c-31 -19.2998 -70.4004 -32.2002 -103.5 -47.2002c-55.2002 46.2998 -23 229.9 -111.5 229.9c-3.5 -0.700195 -2.40039 -0.299805 -4.59961 -1.7002\r\n-c1.09961 -1.40039 2.59961 -2.90039 3.69922 -4c23.9004 -20.0996 33.4004 -24.4004 34.8008 -58.5996l0.299805 -9.5c0.799805 -21.6006 -5.5 -42.5 -9.7998 -63.5c-25.9004 0.699219 -51.2002 -11 -77.9004 -2.90039c-0.700195 5.90039 -1.09961 30.9004 0.299805 41.0996\r\n-c1.40039 9.5 33.6006 29.9004 33 43.7002c-5.5 0.600586 -9.2002 -2.59961 -12.3994 -6.89941c-13.3008 -19.5 -47.2002 -41.9004 -71.3008 -41.9004c-16.5996 0 -56.2998 71.5 -76.3994 85.9004c-3.2002 2.2998 -5.2002 5.39941 -7.7998 8.59961\r\n-c-16.1006 -3.7998 -139.4 -32.2002 -147.4 -32.2002c-6 0 -11.5 4.90039 -11.5 10.9004c0 5.5 3.40039 10.7002 8.90039 11.7998l139.6 30.4004c-9.5 17.1992 12.2998 17.5 21.5 20.0996c3.2002 0.799805 6.2998 4 9.5 4c6.2998 0 11.7998 -8.90039 13.7998 -14.0996\r\n-c6.2998 1.39941 45.7002 10.5996 49.4004 10.5996c15.2002 0 15.8994 -20.0996 2.89941 -22.7002l-52.2998 -11.5l-0.299805 -4.59961c-0.299805 -10.1006 45.4004 -60.1006 53.4004 -60.1006c18.0996 0 54.8994 41.7002 54.8994 60.1006\r\n-c0 30.7002 -42.7998 12.5996 -42.7998 33.5996c0 3.5 1.2002 6.60059 2.90039 9.7998l-19.5 5.5c13.0996 13.6006 13.7998 31.7002 10.8994 50.3008c14.7002 2.89941 26.7002 4.59961 41.4004 4.59961c56.8994 0 45.7002 -8.59961 65.5 -54.2998l14.3994 7.2002\r\n-c-2.2998 -34.2002 -36.1992 -17.5 -35.0996 -31l0.299805 -6c74.7002 2.89941 116.101 -58.6006 150 -115.5zM300.1 19.7998h8.90039l2.90039 -23.7998l-11.8008 -3.40039v27.2002zM231.4 170.2l13.7998 3.5l31.2998 -50.9004l-21 -13.7998zM315.8 15.2998\r\n-c22.6006 2.5 32.7002 6.2998 59.5 6.2998c0.299805 -1.39941 0.900391 -3.19922 0.900391 -4.59961c0 -7.5 -49.4004 -12.5996 -58.4004 -14.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"drupal\" unicode=\"&#xf1a9;\" \r\n-d=\"M319.5 333.3c13.5 -8.2998 96.5 -67 96.5 -179.3c0 -112 -88.5 -186 -190.2 -186c-102 0 -193.8 80.2998 -193.8 189.5c0 109 85 167.5 100.8 175.8c18.7002 10.1006 32.2002 15.2998 53.5 32.2998c10.5 8.30078 19.2998 20.2002 22 49.5\r\n-c15.2002 -18.2998 33.5 -39.5 46.5 -48.2998c21.2002 -14 42.5 -19.5 64.7002 -33.5zM322 7.7002c4.2002 4.2002 1.90039 13.0996 -4.2002 8.5c-8.5 -6.2998 -27.5 -14 -54.5 -14c-34.5 0 -51.5 13.2998 -51.5 13.2998c-6.2002 0 -11.2998 -7.2002 -6.5 -12\r\n-c26.6006 -24.5 96.6006 -15.9004 116.7 4.2002zM267.5 60.2998c-6.5 -2.7002 -28.4004 -16.7998 -22.4004 -25c2.40039 -3.2998 5.2002 -1.2998 12.2002 4.7002c7.2002 5.7998 12 11 26.7002 11c25.2998 0 18.0996 -19.9004 26.5 -15.7002\r\n-c9.90039 4.90039 -2.09961 20.9004 -6.2002 23.7002c-7.7998 5.09961 -28.0996 4.90039 -36.7998 1.2998zM360 43c39.0996 -3.2998 64.5 106 15.7998 106c-20 0 -60.5 -41.5 -81.7998 -41.7998c-24.7002 -0.5 -59 49 -108.5 48.5\r\n-c-66.4004 -0.400391 -90.5996 -78.6006 -51.7998 -105.2c57.2002 -38.7002 130.399 42.9004 161.3 42c19.5 -0.700195 49.7998 -48.5 65 -49.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"joomla\" unicode=\"&#xf1aa;\" \r\n-d=\"M0.599609 355.9c0 33.2998 26.8008 60.0996 59.8008 60.0996c30 0 54.5 -21.9004 59.1992 -50.2002c32.6006 7.60059 67.1006 -0.599609 96.5 -30l-44.2998 -44.2998c-20.5 20.5 -42.5996 16.2998 -55.3994 3.5c-14.3008 -14.2998 -14.3008 -37.9004 0 -52.2002\r\n-l99.5 -99.5l-44 -44.2998c-87.7002 87.2002 -49.7002 49.7002 -99.8008 99.7002c-26.7998 26.5 -35 64.7998 -24.7998 98.8994c-26.8994 5.80078 -46.7002 29.7002 -46.7002 58.3008zM130.1 239.5c28.5 28.4004 81.3008 80.7998 99.6006 99.9004\r\n-c26.5996 26.5996 64.5 35 98.2998 25.0996c4.09961 29.0996 29.2002 51.5996 59.5 51.5996c33 0 59.7998 -26.8994 59.7998 -60.0996c0 -30.2998 -22.7002 -55.4004 -51.8994 -59.5c9.59961 -33.5996 2.2998 -70 -28.9004 -101.2l-44 44.2998\r\n-c20.5 20.4004 16.2998 42.6006 3.5 55.4004c-14.2998 14.2998 -37.5996 14.2998 -51.9004 0c-10 -10.0996 -89.6992 -89.7998 -99.6992 -99.7998zM396.4 87.2998c29.0996 -4.09961 51.5996 -28.8994 51.5996 -59.0996c0 -33.2998 -26.7998 -60.1006 -59.7998 -60.1006\r\n-c-29.2002 0 -53.4004 20.7002 -58.9004 48.1006c-34.7002 -10.7998 -75.0996 -2.2002 -102.7 28l44 44.2998c20.4004 -20.5 42.6006 -16.2998 55.4004 -3.5c14.2998 14.2998 14.2998 37.5996 0 51.9004l-99.7002 99.6992l44.2998 44.3008\r\n-c104.5 -104.4 87.7002 -87.5 99.5 -99.7002c25.4004 -25.4004 34.5 -61.2002 26.3008 -93.9004zM312.1 140.4c-87.2998 -87.3008 -67.3994 -67.7002 -99.5 -99.7002c-25.6992 -25.4004 -61.5 -34.2002 -94.1992 -26c-6.10059 -26.9004 -30 -46.7002 -58.6006 -46.7002\r\n-c-33 0 -59.7998 26.7998 -59.7998 60.0996c0 28.3008 19.5 52.2002 46.2002 58.2002c-8.5 33.1006 -0.700195 68.1006 29.5 98.2998l44 -44.2998c-20.1006 -20.0996 -16.2998 -42 -3.2002 -55.3994c14.2998 -14.3008 37.5996 -14.3008 51.9004 0\r\n-c49.2998 49.3994 12.6992 13.3994 99.6992 99.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"behance\" unicode=\"&#xf1b4;\" horiz-adv-x=\"576\" \r\n-d=\"M232 210.8c43.5996 -12.2998 64.7002 -45.2002 64.7002 -89.7002c0 -72 -60.5 -102.899 -124.9 -102.899h-171.8v354.399h167.1c60.7002 0 113.301 -17.1992 113.301 -87.7998c0 -35.7998 -16.6006 -58.7998 -48.4004 -74zM77.9004 312.1v-82.6992h79\r\n-c27.7998 0 47.5 12.0996 47.5 42.1992c0 32.6006 -25.3008 40.5 -53.4004 40.5h-73.0996zM161.2 78.4004c31.7002 0 57.5996 11.1992 57.5996 47c0 36.2998 -21.7002 50.5996 -56 50.5996h-84.8994v-97.5996h83.2998zM519.7 319.1h-143.7v34.9004h143.7v-34.9004zM576 142.8\r\n-c0 -4.5 -0.299805 -9 -0.599609 -13.2002h-185.101c0 -41.0996 21.7002 -65.2998 63 -65.2998c21.4004 0 49 11.6006 55.7002 33.5h62.2002c-19.1006 -58.7002 -58.7998 -86.2998 -120.101 -86.2998c-81 0 -131.3 54.7998 -131.3 134.7c0 77 53.1006 135.8 131.3 135.8\r\n-c80.5 0 124.9 -63.2998 124.9 -139.2zM390.4 174h114.699c-3 34 -20.7998 54.7998 -56.1992 54.7998c-33.8008 0 -56.2002 -21.0996 -58.5 -54.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"behance-square\" unicode=\"&#xf1b5;\" \r\n-d=\"M186.5 155c0 -19.2998 -14 -25.4004 -31.2002 -25.4004h-45.0996v52.9004h46c18.5996 -0.0996094 30.2998 -7.7998 30.2998 -27.5zM178.8 237.3c0 -16.2998 -10.7002 -22.8994 -25.7998 -22.8994h-42.7002v44.7998h39.6006c15.1992 0 28.8994 -4.2002 28.8994 -21.9004z\r\n-M311.1 214.1c19.2002 0 28.8008 -11.1992 30.5 -29.6992h-62.1992c1.19922 18.2998 13.3994 29.6992 31.6992 29.6992zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM271.7 263h77.7998\r\n-v18.9004h-77.7998v-18.9004zM228.7 152.7c0 24.0996 -11.4004 44.8994 -35 51.5996c17.2002 8.2002 26.2002 17.7002 26.2002 37c0 38.2002 -28.5 47.5 -61.4004 47.5h-90.5v-192h93.0996c34.9004 0.200195 67.6006 16.9004 67.6006 55.9004zM380 167.5\r\n-c0 41.0996 -24.0996 75.4004 -67.5996 75.4004c-42.4004 0 -71.1006 -31.8008 -71.1006 -73.6006c0 -43.2998 27.2998 -73 71.1006 -73c33.1992 0 54.6992 14.9004 65.0996 46.7998h-33.7002c-3.7002 -11.8994 -18.5996 -18.0996 -30.2002 -18.0996\r\n-c-22.3994 0 -34.0996 13.0996 -34.0996 35.2998h100.2c0.0996094 2.2998 0.299805 4.7998 0.299805 7.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"steam\" unicode=\"&#xf1b6;\" horiz-adv-x=\"496\" \r\n-d=\"M496 192c0 -137 -111.2 -248 -248.4 -248c-113.8 0 -209.6 76.2998 -239 180.4l95.2002 -39.3008c6.40039 -32.0996 34.9004 -56.3994 68.9004 -56.3994c39.2002 0 71.8994 32.3994 70.2002 73.5l84.5 60.2002c52.0996 -1.30078 95.7998 40.8994 95.7998 93.5\r\n-c0 51.5996 -42 93.5 -93.7002 93.5s-93.7002 -42 -93.7002 -93.5v-1.2002l-59.2002 -85.7002c-15.5 0.900391 -30.6992 -3.40039 -43.5 -12.0996l-133.1 55c10.2002 127.699 117.1 228.1 247.6 228.1c137.2 0 248.4 -111 248.4 -248zM155.7 63.7002\r\n-c19.7998 -8.2002 42.5 1.09961 50.7998 21c8.2998 19.7998 -1.09961 42.5 -20.9004 50.7002l-31.5 13c12.2002 4.59961 26 4.7998 38.9004 -0.600586c13 -5.39941 23.0996 -15.5996 28.5 -28.5996s5.2998 -27.2998 -0.0996094 -40.2998\r\n-c-11.2002 -26.8008 -42.1006 -39.6006 -69 -28.4004c-10.2119 4.26953 -22.3975 15.8281 -27.2002 25.7998zM329.5 193.6c-34.4004 0 -62.4004 28 -62.4004 62.3008c0 34.2998 28 62.2998 62.4004 62.2998s62.4004 -28 62.4004 -62.2998\r\n-c0 -34.3008 -27.9004 -62.3008 -62.4004 -62.3008zM329.6 209.2c25.9004 0 46.9004 21 46.9004 46.7998c0 25.9004 -21 46.7998 -46.9004 46.7998c-25.8994 0 -46.8994 -21 -46.8994 -46.7998c0.0996094 -25.7998 21.0996 -46.7998 46.8994 -46.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"steam-square\" unicode=\"&#xf1b7;\" \r\n-d=\"M185.2 91.5c7.7002 18.5 -1 39.7002 -19.6006 47.4004l-29.5 12.1992c11.4004 4.30078 24.3008 4.5 36.4004 -0.5c12.2002 -5.09961 21.5996 -14.5996 26.7002 -26.6992c5 -12.2002 5 -25.6006 -0.100586 -37.7002c-10.5 -25.1006 -39.3994 -37 -64.5996 -26.5\r\n-c-11.5996 4.7998 -20.4004 13.5996 -25.4004 24.2002l28.5 -11.8008c18.6006 -7.7998 39.9004 0.900391 47.6006 19.4004zM400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v112.8l89.0996 -36.8994\r\n-c6 -30 32.7002 -52.7002 64.5 -52.7002c36.6006 0 67.3008 30.2998 65.7002 68.7998l79 56.2998c48.7002 -1.2002 89.6006 38.2998 89.6006 87.5c0 48.2002 -39.3008 87.5 -87.6006 87.5s-87.5996 -39.2998 -87.5996 -87.5v-1.09961l-55.4004 -80.2002\r\n-c-14.5 0.799805 -28.7002 -3.09961 -40.7002 -11.2998l-116.6 48.0996v160.7c0 26.5 21.5 48 48 48h352zM300.3 193.5c-32.2002 0 -58.3994 26.0996 -58.3994 58.2998s26.1992 58.2998 58.3994 58.2998s58.4004 -26.1992 58.4004 -58.2998\r\n-c0 -32.0996 -26.2002 -58.2998 -58.4004 -58.2998zM300.4 208.1c24.1992 0 43.8994 19.6006 43.8994 43.8008c0 24.1992 -19.5996 43.7998 -43.8994 43.7998c-24.2002 0 -43.9004 -19.6006 -43.9004 -43.7998c0 -24.2002 19.7002 -43.8008 43.9004 -43.8008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spotify\" unicode=\"&#xf1bc;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM348.7 75.0996c8.09961 0 15.2002 6.30078 15.2002 15.4004s-3.60059 12.5996 -9.7002 16.5c-71.4004 42.7002 -155.101 44.2998 -237 26.2002\r\n-c-7.5 -1.60059 -13.6006 -6.5 -13.6006 -16.7998c0 -8.10059 6.10059 -15.8008 15.8008 -15.8008c2.89941 0 8 1.60059 11.8994 2.60059c71.7002 14.7002 144.3 13.0996 206.7 -24.5c3.90039 -2.2998 6.5 -3.60059 10.7002 -3.60059zM375.6 140.7\r\n-c10.9004 0 19.3008 8.7002 19.4004 19.5c0 8.7002 -3.2002 14.8994 -11.2998 19.7002c-49.4004 29.3994 -112.101 45.5 -177 45.5c-41.6006 0 -70 -5.80078 -97.7998 -13.6006c-10.3008 -2.89941 -15.5 -10 -15.5 -20.7002c0 -10.6992 8.69922 -19.3994 19.3994 -19.3994\r\n-c4.5 0 7.10059 1.2998 11.9004 2.59961c82.8994 22.5 176.1 7.60059 238.6 -29.3994c3.60059 -1.90039 7.10059 -4.2002 12.2998 -4.2002zM406.6 216.9c12.2002 0 23.2002 9.69922 23.2002 23.2998c0 11.8994 -5.09961 18.0996 -12.8994 22.5996\r\n-c-55.9004 32.6006 -132.4 47.7998 -205.4 47.7998c-42.9004 0 -82.2998 -4.89941 -117.5 -15.1992c-9 -2.60059 -17.4004 -10.3008 -17.4004 -23.9004c0 -13.2998 10.1006 -23.5996 23.3008 -23.5996c4.7998 0 9.2998 1.59961 12.8994 2.59961\r\n-c82.4004 23 209.7 12.7998 280.9 -29.7002c4.5 -2.59961 7.7002 -3.89941 12.8994 -3.89941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"deviantart\" unicode=\"&#xf1bd;\" horiz-adv-x=\"320\" \r\n-d=\"M320 354.8l-98.2002 -179.1l7.40039 -9.5h90.7998v-127.7h-160.9l-13.5 -9.2002l-43.6992 -84c-0.300781 0 -8.60059 -8.59961 -9.2002 -9.2002h-92.7002v93.2002l93.2002 179.4l-7.40039 9.2002h-85.7998v127.6h156l13.5 9.2002l43.7002 84\r\n-c0.299805 0 8.59961 8.59961 9.2002 9.2002h97.5996v-93.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"soundcloud\" unicode=\"&#xf1be;\" horiz-adv-x=\"640\" \r\n-d=\"M111.4 191.7l5.7998 -65l-5.7998 -68.2998c-0.300781 -2.5 -2.2002 -4.40039 -4.40039 -4.40039s-4.2002 1.90039 -4.2002 4.40039l-5.59961 68.2998l5.59961 65c0 2.2002 1.90039 4.2002 4.2002 4.2002c2.2002 0 4.09961 -2 4.40039 -4.2002zM132.8 237.3\r\n-c2.5 0 4.7002 -2.2002 4.7002 -5l5.7998 -105.6l-5.7998 -68.2998c0 -2.80078 -2.2002 -5 -4.7002 -5c-2.7998 0 -4.7002 2.19922 -5 5l-5 68.2998l5 105.6c0.299805 2.7998 2.2002 5 5 5zM158.3 261.4c2.7998 0 5.2998 -2.2002 5.2998 -5.30078l5.30078 -130\r\n-l-5.30078 -67.7998c0 -3.09961 -2.5 -5.2998 -5.2998 -5.2998c-3.09961 0 -5.2998 2.2002 -5.59961 5.2998l-4.40039 67.7998l4.40039 130c0.299805 3.10059 2.5 5.30078 5.59961 5.30078zM7.2002 164.8c1.39941 0 2.2002 -1.09961 2.5 -2.5l5.59961 -35.5996l-5.59961 -35\r\n-c-0.299805 -1.40039 -1.10059 -2.5 -2.5 -2.5c-1.40039 0 -2.2002 1.09961 -2.5 2.5l-4.7002 35l4.7002 35.5996c0.299805 1.40039 1.09961 2.5 2.5 2.5zM30.7998 186.7c1.40039 0 2.5 -1.10059 2.7998 -2.5l7.2002 -57.5l-7.2002 -56.4004\r\n-c-0.299805 -1.39941 -1.39941 -2.5 -2.7998 -2.5c-1.39941 0 -2.5 1.10059 -2.5 2.7998l-6.39941 56.1006l6.39941 57.5c0 1.39941 1.10059 2.5 2.5 2.5zM56.0996 198.1c1.7002 0 3.10059 -1.39941 3.10059 -3.2998l6.89941 -68.0996l-6.89941 -65.7998\r\n-c0 -1.7002 -1.40039 -3.10059 -3.10059 -3.10059c-1.59961 0 -3 1.40039 -3.2998 3.10059l-5.7998 65.7998l5.7998 68.0996c0.200195 1.90039 1.60059 3.2998 3.2998 3.2998zM81.4004 200.3c1.89941 0 3.59961 -1.39941 3.89941 -3.59961l6.40039 -70l-6.40039 -67.7998\r\n-c-0.299805 -2.2002 -2 -3.60059 -3.89941 -3.60059c-1.90039 0 -3.60059 1.40039 -3.60059 3.60059l-5.7998 67.7998l5.7998 70c0 2.2002 1.7002 3.59961 3.60059 3.59961zM322.8 311.2c2.5 -1.40039 4.10059 -4.2002 4.5 -7.2002l3.90039 -177.5l-3.90039 -64.2002\r\n-c0 -4.7002 -3.89941 -8.59961 -8.59961 -8.59961s-8.60059 3.89941 -8.90039 8.59961l-1.7002 31.7002l-1.69922 32.5l3.2998 176.7v0.799805c0.200195 2.5 1.39941 5 3.2998 6.7002c1.40039 1.09961 3.40039 1.89941 5.59961 1.89941\r\n-c1.40039 0 3.10059 -0.599609 4.2002 -1.39941zM296.1 295.9c2.2002 -1.40039 3.60059 -3.90039 3.90039 -6.7002l3.2998 -162.8l-3.09961 -58.6006l-0.299805 -6.7002c0 -2.2998 -0.800781 -4.19922 -2.5 -5.59961c-1.40039 -1.40039 -3.40039 -2.5 -5.60059 -2.5\r\n-c-2.5 0 -4.7002 1.2002 -6.39941 3.09961c-1.10059 1.40039 -1.7002 3 -1.7002 4.7002v0.299805c-3.10059 65.3008 -3.10059 65.6006 -3.10059 65.6006l2.80078 160.8l0.299805 1.7002c0 2.7998 1.39941 5.2998 3.59961 6.7002\r\n-c1.2998 0.799805 2.7998 1.39941 4.40039 1.39941c1.59961 0 3 -0.599609 4.39941 -1.39941zM184.7 273.4c3.39941 0 5.89941 -2.80078 6.09961 -6.10059l5 -140.6l-5 -67.2002c-0.299805 -3.2998 -2.7998 -5.7998 -6.09961 -5.7998c-3 0 -5.5 2.5 -5.7998 5.7998\r\n-l-4.40039 67.2002l4.40039 140.6c0 3.2998 2.69922 6.10059 5.7998 6.10059zM561.4 210.6c43.2998 0 78.5996 -35.2998 78.5 -78.8994c0 -43.2998 -35.3008 -78.2998 -78.6006 -78.2998h-218.3c-4.7002 0.599609 -8.59961 4.19922 -8.59961 9.19922v249.7\r\n-c0 4.7998 1.69922 7 7.7998 9.2002c15.2998 6.09961 32.5 9.40039 50.2998 9.40039c72.5 0 131.9 -55.6006 138.3 -126.4c9.5 3.90039 19.7998 6.09961 30.6006 6.09961zM264.7 270.9c4.2002 0 7.2002 -3.30078 7.5 -7.80078l3.89941 -136.699l-3.89941 -65.6006\r\n-c0 -4.2002 -3.2998 -7.5 -7.5 -7.5s-7.5 3.2998 -7.7998 7.5l-3.30078 65.6006l3.30078 136.699c0.299805 4.5 3.59961 7.80078 7.7998 7.80078zM211.1 278.7c3.60059 0 6.40039 -3.10059 6.7002 -6.7002l4.40039 -145.3l-4.40039 -66.9004\r\n-c-0.299805 -3.59961 -3.09961 -6.39941 -6.7002 -6.39941c-3.2998 0 -6.09961 2.7998 -6.39941 6.39941l-3.90039 66.9004l3.90039 145.3c0 3.59961 3.09961 6.7002 6.39941 6.7002zM237.8 275.3c3.90039 0 6.90039 -3 6.90039 -6.89941l4.2002 -141.7l-4.2002 -66.4004\r\n-c0 -3.7998 -3.10059 -6.89941 -6.90039 -6.89941s-6.59961 3 -6.89941 6.89941l-3.90039 66.4004l3.90039 141.7c0 3.7998 3 6.89941 6.89941 6.89941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vine\" unicode=\"&#xf1ca;\" horiz-adv-x=\"384\" \r\n-d=\"M384 193.3v-52.0996c-18.4004 -4.2002 -36.9004 -6.10059 -52.0996 -6.10059c-36.9004 -77.3994 -103 -143.8 -125.101 -156.199c-14 -7.90039 -27.0996 -8.40039 -42.7002 0.799805c-27.0996 16.2998 -129.899 100.6 -164.1 365.6h74.5\r\n-c18.7002 -159.1 64.5 -240.7 114.8 -301.8c27.9004 27.9004 54.7998 65.0996 75.6006 106.9c-49.8008 25.2998 -80.1006 80.8994 -80.1006 145.6c0 65.5996 37.7002 115.1 102.2 115.1c114.9 0 106.2 -127.899 81.5996 -181.5c0 0 -46.3994 -9.19922 -63.5 20.5\r\n-c3.40039 11.3008 8.2002 30.8008 8.2002 48.5c0 31.3008 -11.2998 46.6006 -28.3994 46.6006c-18.2002 0 -30.8008 -17.1006 -30.8008 -50c0.100586 -79.2002 59.4004 -118.7 129.9 -101.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"codepen\" unicode=\"&#xf1cb;\" horiz-adv-x=\"512\" \r\n-d=\"M502.285 288.296c6.00098 -3.99902 9.71484 -11.1426 9.71582 -18.2852v-155.999c0 -7.14258 -3.71484 -14.2871 -9.71484 -18.2861l-234 -156.021c-8.06055 -4.95996 -16.584 -4.91504 -24.5713 0l-234 156.021c-6.00098 4 -9.71484 11.1436 -9.71484 18.2861v155.999\r\n-c0 7.14258 3.71387 14.2861 9.71387 18.2852l234 156c8.06055 4.95996 16.584 4.91504 24.5713 0zM278 384.869v-102.572l95.4287 -63.7148l76.8574 51.4287zM234 384.869l-172.286 -114.858l76.8574 -51.4287l95.4287 63.7148v102.572zM44 228.868v-73.7139\r\n-l55.1426 36.8564zM234 -0.84668v102.571l-95.4287 63.7158l-76.8574 -51.4297zM256 140.011l77.7148 52l-77.7148 52l-77.7148 -52zM278 -0.84668l172.286 114.857l-76.8574 51.4297l-95.4287 -63.7158v-102.571zM468 155.154v73.7139l-55.1426 -36.8574z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jsfiddle\" unicode=\"&#xf1cc;\" horiz-adv-x=\"576\" \r\n-d=\"M510.634 210.538c45.6885 -25.334 68.3721 -74.5605 56.832 -122.634c-12.1035 -50.4199 -55.5479 -86.6592 -108.212 -87.293c-84.0303 -1.01172 -168.079 -0.458984 -252.12 -0.480469c-30.3223 -0.00683594 -60.668 -0.492188 -90.959 0.539062\r\n-c-48.0938 1.63672 -91.7764 35.8643 -105.607 81.4326c-14.1289 46.5508 2.18945 94.623 41.9014 124.615c2.54688 1.92383 4.86914 6.52051 4.51465 9.54492c-3.74609 31.8604 7.14453 57.6709 32.6758 76.4082c26.2822 19.2881 55.2285 21.5879 85.3311 9.16699\r\n-c2.36621 -0.975586 4.63965 -2.17773 7.82422 -3.68555c16.5215 27.5332 38.1221 48.6523 65.4922 63.9023c92.8594 51.7402 210.954 8.31152 246.85 -91.6455c5.55762 -15.4766 6.74512 -32.6074 9.09668 -49.0947c0.716797 -5.02832 1.6543 -8.15527 6.38086 -10.7764z\r\n-M531.741 53.6582c39.3135 48.375 22.418 117.668 -35.1426 144.497c-7.43555 3.46582 -9.72559 7.74414 -9.84766 15.8936c-1.87012 125.129 -132.78 187.063 -230.24 132.697c-26.1133 -14.5674 -46.4492 -34.8955 -60.6709 -61.2939\r\n-c-7.59082 -14.0908 -11.9287 -7.97754 -22.1982 -2.52734c-24.6113 13.0635 -49.0469 12.6406 -72.0332 -3.08301c-21.9678 -15.0244 -31.9102 -36.6201 -26.4199 -62.9805c2.4082 -11.5703 -0.914062 -17.0635 -10.0967 -23.1367\r\n-c-38.1895 -25.2578 -53.0879 -74.8604 -34.1855 -116.105c18.4355 -40.2295 51.3135 -59.6631 95.1748 -59.9951c0.700195 -0.00488281 163.728 -0.545898 163.728 0.154297c56.8857 0 113.778 -0.551758 170.652 0.229492\r\n-c28.9375 0.397461 53.0498 13.2178 71.2803 35.6504zM443.952 134.157c-5.84863 -31.1572 -34.6221 -55.0967 -66.666 -55.0957c-16.9531 0.00195312 -32.0586 6.5459 -44.0791 17.7051c-27.6973 25.7139 -71.1406 74.9805 -95.9375 93.3877\r\n-c-20.0557 14.8877 -41.9893 12.333 -60.2715 -3.78223c-49.9961 -44.0713 15.8594 -121.775 67.0625 -77.1885c4.54883 3.95996 7.84082 9.54297 12.7441 12.8447c8.18457 5.50879 20.7666 0.883789 13.168 -10.6221c-17.3574 -26.2842 -49.3301 -38.1973 -78.8623 -29.3008\r\n-c-28.8975 8.70312 -48.8408 35.9678 -48.626 70.1787c1.22461 22.4844 12.3633 43.0596 35.4141 55.9648c22.5742 12.6377 46.3682 13.1455 66.9902 -2.47363c50.791 -38.4756 75.5781 -81.7451 107.296 -101.245c24.5586 -15.0996 54.2549 -7.36328 68.8232 17.5059\r\n-c28.8301 49.209 -34.5918 105.016 -78.8682 63.46c-3.98828 -3.74414 -6.91699 -8.93164 -11.4092 -11.7197c-10.9756 -6.81152 -17.333 4.1123 -12.8096 10.3525c20.7031 28.5537 50.4639 40.4404 83.2715 28.2139c31.4287 -11.7139 49.1074 -44.3662 42.7598 -78.1855z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rebel\" unicode=\"&#xf1d0;\" horiz-adv-x=\"512\" \r\n-d=\"M256.5 -56c-139.3 0 -247.5 116.2 -243.3 254.1c2.7998 79.2002 43.2002 152.2 116.5 200.4c0.299805 0 1.89941 0.599609 1.09961 -0.799805c-5.7998 -5.5 -111.3 -129.8 -14.0996 -226.4c49.7998 -49.5 90 -2.5 90 -2.5c38.5 50.1006 -0.600586 125.9 -0.600586 125.9\r\n-c-10 24.8994 -45.6992 40.0996 -45.6992 40.0996l28.7998 31.7998c24.3994 -10.5 43.2002 -38.6992 43.2002 -38.6992c0.799805 29.5996 -21.9004 61.3994 -21.9004 61.3994l44.5996 50.7002l44.3008 -50.0996c-20.5 -28.8008 -21.9004 -62.6006 -21.9004 -62.6006\r\n-c13.7998 23 43.5 39.2998 43.5 39.2998l28.5 -31.7998c-27.4004 -8.89941 -45.4004 -39.8994 -45.4004 -39.8994c-15.7998 -28.5 -27.0996 -89.4004 0.600586 -127.301c32.3994 -44.5996 87.7002 2.80078 87.7002 2.80078c102.699 91.8994 -10.5 225 -10.5 225\r\n-c-6.10059 5.5 0.799805 2.7998 0.799805 2.7998c50.0996 -36.5 114.6 -84.4004 116.2 -204.8c2 -145.601 -99.9004 -249.4 -242.4 -249.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"empire\" unicode=\"&#xf1d1;\" horiz-adv-x=\"496\" \r\n-d=\"M287.6 393.8c-10.7998 2.2002 -22.0996 3.2998 -33.5 3.60059v18.1992c78.1006 -2.19922 146.101 -44 184.601 -106.6l-15.7998 -9.09961c-6.10059 9.69922 -12.7002 18.7998 -20.2002 27.0996l-18 -15.5c-26 29.5996 -61.4004 50.7002 -101.9 58.4004zM53.4004 125.6\r\n-c3.89941 -10.7998 8.2998 -21.0996 13.5996 -31.0996l-15.7998 -9.09961c-17.1006 31.5996 -27.1006 68.0996 -27.1006 106.6s9.90039 75 27.1006 106.5l15.7998 -9.09961c-5.2998 -9.7002 -10 -20.2002 -13.5996 -31l22.6992 -7.7002\r\n-c-6.39941 -18.2998 -9.69922 -38.2002 -9.69922 -58.7002s3.59961 -40.4004 10 -58.7002zM213.1 14l-4.69922 -23.7998c10.7998 -1.90039 22.1992 -3.2998 33.5 -3.60059v-18.2998c-78.1006 2.2998 -146.4 44.2998 -184.9 106.601l16 9.39941\r\n-c5.7998 -9.7002 12.7002 -18.7998 20.2002 -27.3994l18 15.7998c26.0996 -29.6006 61.5 -50.7002 101.899 -58.7002zM93.2998 327.1c-7.5 -8.2998 -14.0996 -17.5 -20.0996 -27.1992l-15.7998 9.09961c38.5 62.5996 106.5 104.4 184.6 106.6v-18.1992\r\n-c-11.4004 -0.300781 -22.7002 -1.40039 -33.5 -3.60059l4.7002 -23.7998c-40.5 -7.7002 -75.9004 -28.7998 -101.9 -58.4004zM402.7 56.9004c7.5 8.59961 14.3994 17.6992 20.0996 27.3994l16.1006 -9.39941c-38.5 -62.3008 -106.801 -104.4 -184.9 -106.601v18.2998\r\n-c11.4004 0.300781 22.7002 1.7002 33.5 3.60059l-4.7002 23.7998c40.5 8 75.9004 29.0996 101.9 58.7002zM496 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM483.8 192c0 130.1 -105.7 235.8 -235.8 235.8\r\n-s-235.8 -105.7 -235.8 -235.8s105.7 -235.8 235.8 -235.8s235.8 105.7 235.8 235.8zM444.8 298.6c17.2002 -31.5996 27.1006 -68.0996 27.1006 -106.6s-9.90039 -75 -27.1006 -106.4l-15.7998 9.10059c5.2998 10 9.7002 20.2002 13.5996 31l-23 7.7002\r\n-c6.40039 18.2998 10 38.1992 10 58.6992s-3.2998 40.4004 -9.69922 58.7002l22.6992 7.7002c-3.59961 10.7998 -8.2998 21.2998 -13.5996 31zM261.8 120.9l13.2998 -66.7002c-8.59961 -1.7002 -17.6992 -2.7998 -27.0996 -2.7998s-18.5 1.09961 -27.0996 2.7998\r\n-l13.2998 66.7002c-16.2998 3.2998 -30.5 11.5996 -40.7002 23.5l-51.2002 -44.8008c-11.8994 13.6006 -21.2998 29.4004 -27.0996 46.8008l64.2002 22.0996c-2.5 7.40039 -3.90039 15.2002 -3.90039 23.5s1.40039 16 3.90039 23.5l-64.5 22.0996\r\n-c6.09961 17.5 15.5 33.2002 27.3994 46.8008l51.2002 -44.8008c10.2998 11.9004 24.4004 20.5 40.7002 23.8008l-13.2998 66.3994c8.59961 2 17.6992 2.7998 27.0996 2.7998s18.5 -0.899414 27.0996 -2.7998l-13.2998 -66.3994\r\n-c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996\r\n-c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"git-square\" unicode=\"&#xf1d2;\" \r\n-d=\"M100.59 113.76c48.5703 -3.30957 58.9502 -2.10938 58.9502 -11.9395c0 -20 -65.5498 -20.0605 -65.5498 -1.52051c0.00976562 5.08984 3.29004 9.40039 6.59961 13.46zM128.54 230.4c30.96 0 31.7598 -44.4707 -0.75 -44.4707c-33 0 -31.54 44.4707 0.75 44.4707z\r\n-M448 368v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352c26.4961 0 48 -21.5039 48 -48zM221 298.69c0 -14.4902 8.37988 -22.8809 22.8604 -22.8809c14.7393 0 23.1299 8.39062 23.1299 22.8809\r\n-c0 14.4893 -8.37012 22.3096 -23.1104 22.3096c-14.4795 0 -22.8799 -7.83984 -22.8799 -22.3096zM199.18 253h-49.5498c-25 6.5498 -81.5596 4.84961 -81.5596 -46.75c0 -18.7998 9.39941 -32 21.8496 -38.1104c-15.6895 -14.3701 -23.1201 -21.1396 -23.1201 -30.7393\r\n-c0 -6.87012 2.79004 -13.2207 11.1807 -16.7607c-8.90039 -8.39941 -14 -14.4795 -14 -25.9199c0.0195312 -20.0693 17.5498 -31.7197 63.5391 -31.7197c44.2207 0 69.8701 16.5098 69.8701 45.7305c0 36.6699 -28.2295 35.3193 -94.7695 39.3799l8.37988 13.4297\r\n-c17 -4.74023 74.1904 -6.23047 74.1904 42.4297c0 11.6904 -4.83008 19.8203 -9.40039 25.6699l23.3799 1.78027zM283.52 143.16l-13 1.78027c-3.81934 0.509766 -4.06934 1 -4.06934 5.08984v105.45h-52.6006l-2.79004 -20.5703c15.75 -5.5498 17 -4.86035 17 -10.1699\r\n-v-74.7402c0 -5.62012 -0.30957 -4.58008 -17 -6.87012v-20.0596h72.4209zM384 133l-6.87012 22.3701c-40.9297 -15.3701 -37.8496 12.4102 -37.8496 16.7295v60.7207h37.8496v25.4102h-35.8203c-2.86914 0 -2 -2.52051 -2 38.6299h-24.1797\r\n-c-2.79004 -27.7002 -11.6797 -38.8799 -34 -41.4199v-22.6201c20.4697 0 19.8203 0.849609 19.8203 -2.54004v-66.5703c0 -28.7197 11.4297 -40.9102 41.6699 -40.9102c14.4502 0 30.4502 4.83008 41.3799 10.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"git\" unicode=\"&#xf1d3;\" horiz-adv-x=\"512\" \r\n-d=\"M216.29 289.61l0.0400391 -34.5508l-37.4102 -2.83984c7.27051 -9.35938 15 -22.3701 15 -41.0693c0 -77.8906 -91.4297 -75.4707 -118.7 -67.8906l-13.4297 -21.5498c106.47 -6.5 151.63 -4.33984 151.63 -63c0 -46.7598 -41.04 -73.1797 -111.79 -73.1797\r\n-c-73.5801 0 -101.63 18.71 -101.63 50.8193c0 18.3008 8.12988 28.04 22.4004 41.4502c-13.4199 5.66992 -17.8906 15.8105 -17.8906 26.8105c0 15.3594 11.9004 26.21 37 49.21c-20 9.76953 -35 30.9102 -35 61c0 82.5498 90.4902 85.2793 130.49 74.79h79.29z\r\n-M152.87 47.71c0 15.7402 -16.6104 13.8096 -94.3203 19.1104c-5.2998 -6.54004 -10.5693 -13.4004 -10.5693 -21.54c0 -29.6699 104.89 -29.6299 104.89 2.42969zM102.06 182.29c52.0205 0 50.7402 71.1602 1.2002 71.1602c-51.6602 0 -54 -71.1602 -1.2002 -71.1602z\r\n-M235.36 81.7803v32.0996c26.75 3.66016 27.2393 2 27.2393 11v119.51c0 8.5 -2.0498 7.37988 -27.2393 16.2607l4.46973 32.9199h84.1699v-168.71c0 -6.51074 0.400391 -7.32031 6.50977 -8.14062l20.7305 -2.83984v-32.0996h-115.88zM287.81 326.09\r\n-c-23.1699 0 -36.5898 13.4297 -36.5898 36.6104c0 23.1797 13.4199 35.7695 36.5898 35.7695c23.5801 0 37 -12.6201 37 -35.7695c0 -23.1504 -13.4199 -36.6104 -37 -36.6104zM512 97.54c-17.4902 -8.53027 -43.0996 -16.2598 -66.2803 -16.2598\r\n-c-48.3799 0 -66.6699 19.5 -66.6699 65.46v106.51c0 5.41992 1.0498 4.05957 -31.71 4.05957v36.1904c35.7803 4.07031 50 22 54.4697 66.2695h38.6309c0 -65.8291 -1.34082 -61.8096 3.25977 -61.8096h57.2998v-40.6504h-60.5596v-97.1494\r\n-c0 -6.91992 -4.9209 -51.4102 60.5693 -26.8398z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hacker-news\" unicode=\"&#xf1d4;\" \r\n-d=\"M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6\r\n-c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tencent-weibo\" unicode=\"&#xf1d5;\" horiz-adv-x=\"384\" \r\n-d=\"M72.2998 -47.7998c1.40039 -19.9004 -27.5996 -22.2002 -29.7002 -2.90039c-11.5996 129.9 31.1006 239.5 101.4 313.2c-15.5996 34 9.2002 77.0996 50.5996 77.0996c30.3008 0 55.1006 -24.5996 55.1006 -55.0996c0 -44 -49.5 -70.7998 -86.9004 -45.0996\r\n-c-65.7002 -71.3008 -101.399 -169.801 -90.5 -287.2zM192 447.9c92 0 166.6 -74.6006 166.6 -166.5c0 -102.301 -93.2998 -185.5 -204 -162.301c-19 4.7002 -12.5 33.2002 6.60059 29.1006c80.7998 -20.7998 167.7 42.2998 167.7 133.1c0 75.5 -61.5 136.9 -136.9 136.9\r\n-c-101 0 -168.3 -106.601 -122 -199.2c9 -17.9004 -17.5996 -30.7998 -26.2998 -13.4004c-56 108.101 22.3994 242.301 148.3 242.301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"qq\" unicode=\"&#xf1d6;\" \r\n-d=\"M433.754 27.5547c-11.5264 -1.39258 -44.8604 52.7412 -44.8604 52.7412c0 -31.3447 -16.1357 -72.2471 -51.0508 -101.786c16.8418 -5.19141 54.8428 -19.167 45.8037 -34.4209c-7.31641 -12.3428 -125.511 -7.88086 -159.633 -4.03711\r\n-c-34.1221 -3.84375 -152.315 -8.30566 -159.632 4.03711c-9.04492 15.25 28.918 29.2139 45.7832 34.415c-34.9199 29.5391 -51.0586 70.4453 -51.0586 101.792c0 0 -33.334 -54.1338 -44.8594 -52.7412c-5.37012 0.650391 -12.4238 29.6445 9.34668 99.7041\r\n-c10.2617 33.0244 21.9951 60.4785 40.1445 105.779c-3.05566 116.898 45.2441 214.956 160.262 214.962c113.737 -0.00585938 163.156 -96.1328 160.264 -214.963c18.1182 -45.2227 29.9121 -72.8506 40.1445 -105.778c21.7676 -70.0596 14.7158 -99.0527 9.3457 -99.7041z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weixin\" unicode=\"&#xf1d7;\" horiz-adv-x=\"576\" \r\n-d=\"M385.2 280.4c-92.4004 0 -165.4 -69.1006 -165.3 -154c0 -14.2002 2.19922 -27.9004 6.19922 -40.8008c-6.19922 -0.5 -12.0996 -0.799805 -18.2998 -0.799805c-24.3994 0 -43.7998 4.90039 -68.2002 9.7002l-68 -34.0996l19.3008 58.5996\r\n-c-48.6006 34.0996 -77.9004 78.2002 -77.9004 131.6c0 92.6006 87.5 165.4 194.7 165.4c95.5996 0 179.7 -58.2998 196.3 -136.7c-6.2002 0.799805 -12.4004 1.10059 -18.7998 1.10059zM280.7 333.3c-14.7002 0 -29.2002 -9.7002 -29.2998 -24.3994\r\n-c0 -14.5 14.5 -24.2002 29.2998 -24.2002c14.5 0 24.2002 9.7002 24.2002 24.2002c0 14.6992 -9.7002 24.3994 -24.2002 24.3994zM144.3 284.7c14.7998 0 24.4004 9.59961 24.4004 24.2002c0 14.6992 -9.60059 24.3994 -24.4004 24.3994\r\n-c-14.5 0 -29.2998 -9.59961 -29.2998 -24.3994c0 -14.5 14.7998 -24.2002 29.2998 -24.2002zM563 128.6c0 -43.7998 -29 -82.6992 -68.2002 -112.1l14.7998 -48.5996l-53.3994 29.2998c-19.7002 -4.7998 -39.2998 -9.90039 -58.6006 -9.90039\r\n-c-92.5996 0 -165.399 63.4004 -165.399 141.3c0 77.9004 72.7002 141.301 165.399 141.301c87.5 0 165.4 -63.4004 165.4 -141.301zM343.9 153.1c14.6992 0 24.3994 9.60059 24.3994 19.6006c0 9.59961 -9.59961 19.2998 -24.3994 19.2998\r\n-c-9.60059 0 -19.3008 -9.59961 -19.3008 -19.2998c0 -9.90039 9.60059 -19.6006 19.3008 -19.6006zM451 153.1c14.5 0 24.5 9.60059 24.4004 19.6006c0 9.59961 -9.90039 19.2998 -24.4004 19.2998c-9.59961 0 -19.2998 -9.59961 -19.2998 -19.2998\r\n-c0 -9.90039 9.59961 -19.6006 19.2998 -19.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"slideshare\" unicode=\"&#xf1e7;\" horiz-adv-x=\"512\" \r\n-d=\"M187.7 294.3c34 0 61.7002 -25.7002 61.7002 -57.7002c0 -31.6992 -27.7002 -57.6992 -61.7002 -57.6992s-61.7002 26 -61.7002 57.6992c0 32 27.7002 57.7002 61.7002 57.7002zM331.1 294.3c34.3008 0 61.8008 -25.7002 61.7002 -57.7002\r\n-c0 -31.6992 -27.3994 -57.6992 -61.7002 -57.6992c-34 0 -61.6992 26 -61.6992 57.6992c0 32 27.6992 57.7002 61.6992 57.7002zM487.7 204.3c15.2002 10.5 25.2002 -4 16.0996 -17.7998c-18.2998 -22.5996 -53.2002 -50.2998 -106.3 -72\r\n-c56.2998 -191.7 -137.4 -222.3 -134.3 -124c0 0.700195 -0.299805 53.7998 -0.299805 93.5c-4.30078 0.799805 -8.60059 2 -13.7002 3.09961c0 -40 -0.299805 -95.8994 -0.299805 -96.5996c3.09961 -98.2002 -190.601 -67.5996 -134.301 124.1\r\n-c-53.1992 21.7002 -88 49.4004 -106.3 72c-9.09961 13.7002 0.900391 28.3008 16 17.7002c2 -1.39941 4.2998 -2.89941 6.2998 -4.2998v198.3c0 27.4004 20.6006 49.7002 46 49.7002h359.101c25.3994 0 46 -22.2998 46 -49.7002v-198.3zM457.2 185.1h0.0996094v190.601\r\n-c0 32.7998 -10.5996 45.7002 -40.8994 45.7002h-317.7c-31.7002 0 -40.6006 -10.8008 -40.6006 -45.7002v-192.4c67.7002 -35.3994 125.7 -29.0996 157.4 -28c13.4004 0.299805 22 -2.2998 27.0996 -7.7002c1.7002 -1.59961 10 -9.39941 20.3008 -17.0996\r\n-c1.09961 15.7998 10 25.7998 33.6992 24.9004c32.3008 -1.40039 91.7002 -7.7002 160.601 29.6992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"twitch\" unicode=\"&#xf1e8;\" \r\n-d=\"M40.0996 416h397.9v-274.2l-117 -117h-87l-56.7998 -56.7998h-60.2002v56.7998h-107v314.3zM397.9 161.9v214h-321v-280.9h90.2998v-56.7998l56.7998 56.7998h107zM331 299v-116.9h-40.0996v116.9h40.0996zM224 299v-116.9h-40.0996v116.9h40.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yelp\" unicode=\"&#xf1e9;\" horiz-adv-x=\"384\" \r\n-d=\"M42.9004 207.68l99.6191 -48.6094c19.2002 -9.40039 16.2002 -37.5107 -4.5 -42.71l-107.52 -26.8105c-1.51074 -0.379883 -4 -0.6875 -5.55762 -0.6875c-11.2676 0 -21.415 9.08887 -22.6523 20.2881c-0.708984 6.18164 -1.28516 16.25 -1.28516 22.4727\r\n-c0 17.8105 4.60742 45.9658 10.2852 62.8467c2.88574 8.56836 12.5664 15.5215 21.6074 15.5215c2.9082 0 7.38867 -1.03516 10.0029 -2.31152zM86.9004 -31.5703c-5.48535 3.75195 -9.92773 12.1904 -9.92773 18.8359c0 4.8291 2.61914 11.6631 5.84766 15.2539\r\n-l74.21 82.4004c14.3096 15.8105 40.5098 5.2002 39.8096 -16.0996l-3.89941 -110.82c-0.412109 -12.1484 -10.6123 -22.0078 -22.7676 -22.0078c-1.07129 0 -2.79688 0.146484 -3.85254 0.328125c-23.8691 4.04199 -59.4492 18.4277 -79.4199 32.1094zM232.24 78.3496\r\n-c-11.2998 18.1104 6.2002 40.4102 26.5098 33.9102l105.42 -34.2598c8.69043 -2.88965 15.7422 -12.667 15.7422 -21.8252c0 -2.8125 -0.963867 -7.16504 -2.15234 -9.71484c-10.418 -21.8799 -34.0322 -52.1689 -52.71 -67.6104\r\n-c-3.50586 -2.88867 -10.0391 -5.2334 -14.582 -5.2334c-6.99707 0 -15.6963 4.80859 -19.418 10.7334zM380.57 210.58c1.04688 -2.41602 1.93652 -6.5127 1.93652 -9.14551c0 -9.49805 -7.39551 -19.3828 -16.5068 -22.0645l-106.64 -30.5098\r\n-c-20.5 -5.90039 -37.1006 17.0098 -25.2002 34.71l62 91.9199c3.75 5.55664 12.2354 10.0654 18.9385 10.0654c4.74512 0 11.4932 -2.53809 15.0615 -5.66602c18.166 -16.0361 40.75 -47.0869 50.4102 -69.3096zM62.1104 417.82\r\n-c29.4697 14.0293 79.793 27.5137 112.33 30.0996c0.503906 0.0410156 1.32422 0.0742188 1.83008 0.0742188c12.5146 0 22.6709 -10.1562 22.6709 -22.6699c0 -0.0566406 -0.000976562 -0.147461 -0.000976562 -0.204102v-208.34\r\n-c0 -23.2998 -30.9102 -31.6006 -42.6104 -11.4004l-104.12 180.44c-1.68164 2.92188 -3.0459 8.0293 -3.0459 11.4014c0 7.93066 5.7998 17.1592 12.9463 20.5986z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paypal\" unicode=\"&#xf1ed;\" horiz-adv-x=\"384\" \r\n-d=\"M111.4 152.1c-3.5 -19.1992 -17.4004 -108.699 -21.5 -134c-0.300781 -1.7998 -1 -2.5 -3 -2.5h-74.6006c-7.59961 0 -13.0996 6.60059 -12.0996 13.9004l58.5996 371.9c1.5 9.59961 10.1006 16.8994 20 16.8994c152.3 0 165.101 3.7002 204 -11.3994\r\n-c60.1006 -23.3008 65.6006 -79.5 44 -140.301c-21.5 -62.5996 -72.5 -89.5 -140.1 -90.2998c-43.4004 -0.700195 -69.5 7 -75.2998 -24.2002zM357.1 296c28.4004 -21.2002 30.3008 -57.7998 23.8008 -92.5996c-16.5 -83.5 -71.9004 -112.301 -142.9 -112.301\r\n-c-15 0 -24.7002 2.30078 -29.2998 -19.6992c-15.5 -97.4004 -13.7002 -85.9004 -14.4004 -91.3008c-1.7002 -8.59961 -8.7998 -14.8994 -17.3994 -14.8994h-63.5c-7.10059 0 -11.6006 5.7998 -10.6006 12.8994c0 0 4.5 29.3008 27.1006 169.7\r\n-c0.799805 6.10059 4.7998 9.40039 10.8994 9.40039c54 0 164.601 -9.90039 204.5 103.899c3.7002 11.1006 6.7998 22.2002 8.7998 33.6006c0.5 3.09961 1.2002 2.59961 3 1.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-wallet\" unicode=\"&#xf1ee;\" \r\n-d=\"M156.8 321.2c37.6006 -60.6006 64.2002 -113.101 84.2998 -162.5c-8.2998 -33.7998 -18.7998 -66.5 -31.2998 -98.2998c-13.2002 52.2998 -26.5 101.3 -56 148.5c6.5 36.3994 2.2998 73.5996 3 112.3zM109.3 248c5 0 10 -2.5 13 -6.5\r\n-c43.7998 -59.7998 66.2998 -123.8 82.5 -193.5h-103.5c-20 69.5 -49.5 133 -91.7002 187.3c-4 5.2002 0 12.7002 6.5 12.7002h93.2002zM157.1 336h108.7c74.7998 -103 131.2 -230 143.2 -368h-113.7c-8.2002 133.5 -69.7002 260 -138.2 368zM408.9 404.5\r\n-c19 -67.5 31.0996 -139 31.0996 -212.6c0 -69.5 -9.5 -142.5 -25.2998 -203c-10.9004 92.5 -42.4004 184.6 -90.6006 270.8c-4.19922 50.5 -13.2998 99.5 -26.5 146c-1.19922 5.2998 2.5 10.2998 7.80078 10.2998h88.2998c7 0 13.3994 -4.7002 15.2002 -11.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-visa\" unicode=\"&#xf1f0;\" horiz-adv-x=\"576\" \r\n-d=\"M470.1 216.7c0 0 7.60059 -37.2002 9.30078 -45h-33.4004c3.2998 8.89941 16 43.5 16 43.5c-0.200195 -0.299805 3.2998 9.09961 5.2998 14.8994zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480\r\n-c26.5 0 48 -21.5 48 -48zM152.5 116.8l63.2002 155.2h-42.5l-39.2998 -106l-4.30078 21.5l-14 71.4004c-2.2998 9.89941 -9.39941 12.6992 -18.1992 13.0996h-64.7002l-0.700195 -3.09961c15.7998 -4 29.9004 -9.80078 42.2002 -17.1006l35.7998 -135h42.5zM246.9 116.6\r\n-l25.1992 155.4h-40.1992l-25.1006 -155.4h40.1006zM386.8 167.4c0.200195 17.6992 -10.5996 31.1992 -33.7002 42.2998c-14.0996 7.09961 -22.6992 11.8994 -22.6992 19.2002c0.199219 6.59961 7.2998 13.3994 23.0996 13.3994\r\n-c13.0996 0.299805 22.7002 -2.7998 29.9004 -5.89941l3.59961 -1.7002l5.5 33.5996c-7.90039 3.10059 -20.5 6.60059 -36 6.60059c-39.7002 0 -67.5996 -21.2002 -67.7998 -51.4004c-0.299805 -22.2998 20 -34.7002 35.2002 -42.2002\r\n-c15.5 -7.59961 20.7998 -12.5996 20.7998 -19.2998c-0.200195 -10.4004 -12.6006 -15.2002 -24.1006 -15.2002c-16 0 -24.5996 2.5 -37.6992 8.2998l-5.30078 2.5l-5.59961 -34.8994c9.40039 -4.2998 26.7998 -8.10059 44.7998 -8.2998\r\n-c42.2002 -0.100586 69.7002 20.7998 70 53zM528 116.6l-32.4004 155.4h-31.0996c-9.59961 0 -16.9004 -2.7998 -21 -12.9004l-59.7002 -142.5h42.2002s6.90039 19.2002 8.40039 23.3008h51.5996c1.2002 -5.5 4.7998 -23.3008 4.7998 -23.3008h37.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-mastercard\" unicode=\"&#xf1f1;\" horiz-adv-x=\"576\" \r\n-d=\"M482.9 37.7002c0 -6.7998 -4.60059 -11.7002 -11.2002 -11.7002c-6.7998 0 -11.2002 5.2002 -11.2002 11.7002s4.40039 11.7002 11.2002 11.7002c6.59961 0 11.2002 -5.2002 11.2002 -11.7002zM172.1 49.4004c6.5 0 10.8008 -5.2002 10.9004 -11.7002\r\n-c0 -6.7998 -4.40039 -11.7002 -10.9004 -11.7002c-7.09961 0 -11.1992 5.2002 -11.1992 11.7002s4.09961 11.7002 11.1992 11.7002zM289.6 49.7002c5.2002 0 8.7002 -3 9.60059 -8.7002h-19.1006c0.800781 5.2002 4.10059 8.7002 9.5 8.7002zM397.4 49.4004\r\n-c6.7998 0 11.1992 -5.2002 11.1992 -11.7002c0 -6.7998 -4.39941 -11.7002 -11.1992 -11.7002c-6.80078 0 -10.9004 5.2002 -10.9004 11.7002s4.09961 11.7002 10.9004 11.7002zM503.3 23.2998c0 -0.299805 0.299805 -0.5 0.299805 -1.09961\r\n-c0 -0.299805 -0.299805 -0.5 -0.299805 -1.10059c-0.299805 -0.299805 -0.299805 -0.5 -0.5 -0.799805c-0.299805 -0.299805 -0.5 -0.5 -1.09961 -0.5c-0.299805 -0.299805 -0.5 -0.299805 -1.10059 -0.299805c-0.299805 0 -0.5 0 -1.09961 0.299805\r\n-c-0.299805 0 -0.5 0.299805 -0.799805 0.5c-0.299805 0.299805 -0.5 0.5 -0.5 0.799805c-0.299805 0.5 -0.299805 0.800781 -0.299805 1.10059c0 0.5 0 0.799805 0.299805 1.09961c0 0.5 0.299805 0.799805 0.5 1.10059c0.299805 0.299805 0.5 0.299805 0.799805 0.5\r\n-c0.5 0.299805 0.799805 0.299805 1.09961 0.299805c0.5 0 0.800781 0 1.10059 -0.299805c0.5 -0.300781 0.799805 -0.300781 1.09961 -0.5c0.299805 -0.200195 0.200195 -0.600586 0.5 -1.10059zM501.1 21.9004c0.5 0 0.5 0.299805 0.800781 0.299805\r\n-c0.299805 0.299805 0.299805 0.5 0.299805 0.799805s0 0.5 -0.299805 0.799805c-0.300781 0 -0.5 0.299805 -1.10059 0.299805h-1.59961v-3.5h0.799805v1.40039h0.299805l1.10059 -1.40039h0.799805zM576 367v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48\r\n-v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM64 227.4c0 -76.5 62.0996 -138.5 138.5 -138.5c27.2002 0 53.9004 8.19922 76.5 23.0996c-72.9004 59.2998 -72.4004 171.2 0 230.5c-22.5996 15 -49.2998 23.0996 -76.5 23.0996\r\n-c-76.4004 0.100586 -138.5 -62 -138.5 -138.199zM288 118.6c70.5 55 70.2002 162.2 0 217.5c-70.2002 -55.2998 -70.5 -162.6 0 -217.5zM145.7 42.2998c0 8.7002 -5.7002 14.4004 -14.7002 14.7002c-4.59961 0 -9.5 -1.40039 -12.7998 -6.5\r\n-c-2.40039 4.09961 -6.5 6.5 -12.2002 6.5c-3.7998 0 -7.59961 -1.40039 -10.5996 -5.40039v4.40039h-8.2002v-36.7002h8.2002c0 18.9004 -2.5 30.2002 9 30.2002c10.1992 0 8.19922 -10.2002 8.19922 -30.2002h7.90039c0 18.2998 -2.5 30.2002 9 30.2002\r\n-c10.2002 0 8.2002 -10 8.2002 -30.2002h8.2002v23h-0.200195zM190.6 56h-7.89941v-4.40039c-2.7002 3.30078 -6.5 5.40039 -11.7002 5.40039c-10.2998 0 -18.2002 -8.2002 -18.2002 -19.2998c0 -11.2002 7.90039 -19.2998 18.2002 -19.2998\r\n-c5.2002 0 9 1.89941 11.7002 5.39941v-4.59961h7.89941v36.7998zM231.1 30.4004c0 15 -22.8994 8.19922 -22.8994 15.1992c0 5.7002 11.8994 4.80078 18.5 1.10059l3.2998 6.5c-9.40039 6.09961 -30.2002 6 -30.2002 -8.2002c0 -14.2998 22.9004 -8.2998 22.9004 -15\r\n-c0 -6.2998 -13.5 -5.7998 -20.7002 -0.799805l-3.5 -6.2998c11.2002 -7.60059 32.5996 -6 32.5996 7.5zM266.5 21.0996l-2.2002 6.80078c-3.7998 -2.10059 -12.2002 -4.40039 -12.2002 4.09961v16.5996h13.1006v7.40039h-13.1006v11.2002h-8.19922v-11.2002h-7.60059\r\n-v-7.2998h7.60059v-16.7002c0 -17.5996 17.2998 -14.4004 22.5996 -10.9004zM279.8 34.5h27.5c0 16.2002 -7.39941 22.5996 -17.3994 22.5996c-10.6006 0 -18.2002 -7.89941 -18.2002 -19.2998c0 -20.5 22.5996 -23.8994 33.7998 -14.2002l-3.7998 6\r\n-c-7.7998 -6.39941 -19.6006 -5.7998 -21.9004 4.90039zM338.9 56c-4.60059 2 -11.6006 1.7998 -15.2002 -4.40039v4.40039h-8.2002v-36.7002h8.2002v20.7002c0 11.5996 9.5 10.0996 12.7998 8.40039zM349.5 37.7002c0 11.3994 11.5996 15.0996 20.7002 8.39941l3.7998 6.5\r\n-c-11.5996 9.10059 -32.7002 4.10059 -32.7002 -15c0 -19.7998 22.4004 -23.7998 32.7002 -15l-3.7998 6.5c-9.2002 -6.5 -20.7002 -2.59961 -20.7002 8.60059zM416.2 56h-8.2002v-4.40039c-8.2998 11 -29.9004 4.80078 -29.9004 -13.8994\r\n-c0 -19.2002 22.4004 -24.7002 29.9004 -13.9004v-4.59961h8.2002v36.7998zM449.9 56c-2.40039 1.2002 -11 2.90039 -15.2002 -4.40039v4.40039h-7.90039v-36.7002h7.90039v20.7002c0 11 9 10.2998 12.7998 8.40039zM490.2 70.9004h-7.90039v-19.3008\r\n-c-8.2002 10.9004 -29.8994 5.10059 -29.8994 -13.8994c0 -19.4004 22.5 -24.6006 29.8994 -13.9004v-4.59961h7.90039v51.7002zM497.8 146v-4.59961h0.799805v4.59961h1.90039v0.799805h-4.59961v-0.799805h1.89941zM504.4 22.2002c0 0.5 0 1.09961 -0.300781 1.59961\r\n-c-0.299805 0.299805 -0.5 0.799805 -0.799805 1.10059c-0.299805 0.299805 -0.799805 0.5 -1.09961 0.799805c-0.5 0 -1.10059 0.299805 -1.60059 0.299805c-0.299805 0 -0.799805 -0.299805 -1.39941 -0.299805c-0.5 -0.299805 -0.799805 -0.5 -1.10059 -0.799805\r\n-c-0.5 -0.300781 -0.799805 -0.800781 -0.799805 -1.10059c-0.299805 -0.5 -0.299805 -1.09961 -0.299805 -1.59961c0 -0.299805 0 -0.799805 0.299805 -1.40039c0 -0.299805 0.299805 -0.799805 0.799805 -1.09961c0.300781 -0.299805 0.5 -0.5 1.10059 -0.799805\r\n-c0.5 -0.300781 1.09961 -0.300781 1.39941 -0.300781c0.5 0 1.10059 0 1.60059 0.300781c0.299805 0.299805 0.799805 0.5 1.09961 0.799805s0.5 0.799805 0.799805 1.09961c0.300781 0.600586 0.300781 1.10059 0.300781 1.40039zM507.6 146.9h-1.39941l-1.60059 -3.5\r\n-l-1.59961 3.5h-1.40039v-5.40039h0.800781v4.09961l1.59961 -3.5h1.09961l1.40039 3.5v-4.09961h1.09961v5.40039zM512 227.4c0 76.1992 -62.0996 138.3 -138.5 138.3c-27.2002 0 -53.9004 -8.2002 -76.5 -23.1006c72.0996 -59.2998 73.2002 -171.5 0 -230.5\r\n-c22.5996 -15 49.5 -23.0996 76.5 -23.0996c76.4004 -0.0996094 138.5 61.9004 138.5 138.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-discover\" unicode=\"&#xf1f2;\" horiz-adv-x=\"576\" \r\n-d=\"M520.4 251.9c0 -8.40039 -5.5 -12.8008 -15.8008 -12.8008h-4.69922v24.9004h4.89941c10.1006 0 15.6006 -4.2002 15.6006 -12.0996zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480z\r\n-M483.9 277.1v-82h16v32.8008h2.19922l22.2002 -32.8008h19.6006l-25.8008 34.4004c12.1006 2.5 18.7002 10.5996 18.7002 23.2002c0 28.5 -30.2998 24.3994 -52.8994 24.3994zM428 277v-82h45.2998v13.7998h-29.2998v22.2002h28.2998v13.7998h-28.2998v18.2002h29.2998v14\r\n-h-45.2998zM359.3 277h-17.5l35 -84.2002h8.60059l35.5 84.2002h-17.5l-22.2002 -55.2002zM303.4 280c-24.6006 0 -44.6006 -19.9004 -44.6006 -44.5996c0 -24.6006 19.9004 -44.6006 44.6006 -44.6006c24.5996 0 44.5996 19.9004 44.5996 44.6006\r\n-c0 24.5996 -19.9004 44.5996 -44.5996 44.5996zM254.1 273.9c-30.1992 15 -63.2998 -6.80078 -63.2998 -38c0 -32.5 33.6006 -52.5 63.2998 -38.2002v19c-19.2998 -19.2998 -46.7998 -5.7998 -46.7998 19.2002c0 23.6992 26.7002 39.0996 46.7998 19v19zM156.9 207.6\r\n-c-7.60059 0 -13.8008 3.7002 -17.5 10.8008l-10.3008 -9.90039c17.8008 -26.0996 56.6006 -18.2002 56.6006 11.2998c0 13.1006 -5.40039 19 -23.6006 25.6006c-9.59961 3.39941 -12.2998 5.89941 -12.2998 10.2998c0 8.7002 14.5 14.0996 24.9004 2.5l8.39941 10.7998\r\n-c-19.0996 17.0996 -49.6992 8.90039 -49.6992 -14.2998c0 -11.2998 5.19922 -17.2002 20.1992 -22.7002c25.7002 -9.09961 14.7002 -24.4004 3.30078 -24.4004zM55.4004 195c30.8994 0 44.0996 22.4004 44.0996 40.9004c0 24.0996 -18 41.0996 -44.0996 41.0996h-23.4004\r\n-v-82h23.4004zM122.9 195v82h-16v-82h16zM544 15v145c-33.2998 -20.7998 -226.4 -124.4 -416 -160h401c8.2002 0 15 6.7998 15 15zM74.0996 256.4c5.7002 -5 8.90039 -12.6006 8.90039 -20.5c0 -7.90039 -3.2002 -15.5 -8.90039 -20.7002\r\n-c-4.89941 -4.40039 -11.5996 -6.40039 -21.8994 -6.40039h-4.2002v54.2002h4.2002c10.2998 0 16.7002 -1.7002 21.8994 -6.59961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-amex\" unicode=\"&#xf1f3;\" horiz-adv-x=\"576\" \r\n-d=\"M325.1 280.2c0.100586 -8 -4.2998 -15.7002 -11.6992 -18.7002c9.5 -3.2998 11 -9.2002 11 -18.4004v-13.5h-16.6006c-0.299805 14.8008 3.60059 25.1006 -14.7998 25.1006h-18v-25.1006h-16.4004v69.3008l39.1006 -0.300781c13.2998 0 27.3994 -2 27.3994 -18.3994z\r\n-M295.7 268.9c5.7002 0 11 1.2998 11 7.89941c0 6.40039 -5.60059 7.40039 -10.7002 7.40039h-21v-15.2998h20.7002zM279 179.4c15.5996 0 27.9004 -5.40039 27.9004 -22.7002c0 -27.9004 -30.4004 -23.2998 -49.3008 -23.2998l-0.0996094 -23.3008h-32.2002l-20.3994 23\r\n-l-21.3008 -23h-65.3994l0.0996094 69.3008h66.5l20.5 -22.8008l21 22.8008h52.7002zM175.2 124.7l19 20.2002l-17.9004 20.1992h-41.7002v-12.5h36.3008v-14.0996h-36.3008v-13.7998h40.6006zM241 116.5v55.5l-25.2998 -27.4004zM278.8 147.5\r\n-c5.90039 0 10.5 2.7998 10.5 9.2002c0 6.09961 -4.59961 8.39941 -10.2002 8.39941h-21.5v-17.5996h21.2002zM247.2 284.2h-38.9004v-12.5h37.7998v-14.1006h-37.7998v-13.7998h38.9004v-14.2998h-55.5v69.2998h55.5v-14.5996zM576 192.6h-0.200195h0.200195zM381.4 160.7\r\n-c-0.100586 -7.60059 -4.2002 -15.2998 -11.9004 -18.4004c9.2002 -3.2998 11 -9.5 11 -18.3994l-0.0996094 -13.8008h-16.6006l0.100586 11.5c0 11.8008 -3.80078 13.8008 -14.8008 13.8008h-17.5996l-0.0996094 -25.3008h-16.6006l0.100586 69.3008h39.3994\r\n-c13 0 27.1006 -2.30078 27.1006 -18.7002zM352.2 149.5c5.59961 0 11 1.2998 11 8.2002c0 6.39941 -5.60059 7.39941 -10.7002 7.39941h-21v-15.5996h20.7002zM179.4 229.5h-16.8008v54.2002l-24 -54.2002h-14.5996l-24 54.2002v-54.2002h-33.7998l-6.40039 15.2998h-34.5\r\n-l-6.39941 -15.2998h-17.9004l29.7002 69.2998h24.5l28.0996 -65.7002v65.7002h27.1006l21.6992 -47l19.7002 47h27.6006v-69.2998zM31.2002 259.2h22.7002l-11.5 27.5996zM508.6 100.3c34.8008 0 54.8008 -2.2002 67.5 6.10059v-90.4004c0 -26.5 -21.5 -48 -48 -48h-480.1\r\n-c-26.5 0 -48 21.5 -48 48v203.7h26.5996c4.2002 10.0996 2.2002 5.2998 6.40039 15.2998h19.2002c4.2002 -10 2.2002 -5.2002 6.39941 -15.2998h52.9004v11.3994c2.2002 -5 1.09961 -2.5 5.09961 -11.3994h29.5c2.40039 5.5 2.60059 5.7998 5.10059 11.3994v-11.3994h135.5\r\n-v25.0996c6.39941 0 8 0.100586 9.7998 -0.200195c0 0 -0.200195 -10.8994 0.0996094 -24.7998h66.5v8.90039c7.40039 -5.90039 17.4004 -8.90039 29.7002 -8.90039h26.7998c4.2002 10.1006 2.2002 5.2998 6.40039 15.2998h19c6.5 -15 0.200195 -0.5 6.59961 -15.2998\r\n-h52.8008v21.9004c11.7998 -19.7002 7.7998 -12.9004 13.1992 -21.9004h41.6006v92h-39.9004v-18.3994c-12.2002 20.1992 -6.2998 10.3994 -11.2002 18.3994h-43.2998v-20.5996c-6.2002 14.5996 -4.59961 10.7998 -8.7998 20.5996h-32.4004\r\n-c-0.399414 0 -2.2998 -0.200195 -2.2998 0.299805h-27.5996c-12.7998 0 -23.1006 -3.19922 -30.7002 -9.2998v9.2998h-39.9004v-5.2998c-10.7998 6.10059 -20.6992 5.10059 -64.3994 5.2998c-0.100586 0 -11.6006 0.100586 -11.6006 0h-103\r\n-c-2.5 -6.09961 -6.7998 -16.3994 -12.5996 -30c-2.7998 6 -11 23.8008 -13.9004 30h-46v-21.0996c-7.39941 17.4004 -4.69922 11 -9 21.0996h-39.6992c-3.40039 -7.89941 -13.7002 -32 -23.1006 -53.8994v109.8c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48v-175.4\r\n-c-37.7002 0.200195 -44 0.900391 -54.2998 -5v5c-45.2998 0 -53.5 1.7002 -64.9004 -5.19922v5.19922h-78.1992v-5.09961c-11.4004 6.5 -21.4004 5.09961 -75.7002 5.09961v-5.59961c-6.2998 3.7002 -14.5 5.59961 -24.2998 5.59961h-58\r\n-c-3.5 -3.7998 -12.5 -13.6992 -15.7002 -17.1992c-12.7002 14.0996 -10.5 11.5996 -15.5 17.1992h-83.1006v-92.2998h82c3.30078 3.5 12.9004 13.9004 16.1006 17.4004c12.7002 -14.2998 10.2998 -11.7002 15.3994 -17.4004h48.9004\r\n-c0 14.7002 0.0996094 8.2998 0.0996094 23c11.5 -0.200195 24.3008 0.200195 34.3008 6.2002c0 -13.9004 -0.100586 -17.0996 -0.100586 -29.2002h39.6006c0 18.5 0.0996094 7.40039 0.0996094 25.2998c6.2002 0 7.7002 0 9.40039 -0.0996094\r\n-c0.0996094 -1.2998 0 0 0 -25.2002c152.8 0 145.899 -1.09961 156.699 4.5v-4.5zM544.9 164.8c-4.60059 0 -9.2002 -0.700195 -9.2002 -6.5c0 -12.2002 28.7998 0.299805 39.2998 -13.5v-25.7998c-4.90039 -7.09961 -14.0996 -8.90039 -22.5 -8.90039h-32l0.0996094 14.8008\r\n-h32c4.10059 0 8.40039 1.2998 8.40039 6.39941c0 14.6006 -42.7002 -5.59961 -42.7002 27.4004c0 14.0996 11 20.7002 23.7998 20.7002h32.9004v-14.6006h-30.0996zM487.9 125c4.09961 0 8.69922 1 8.7998 6.40039c0 14.8994 -42.7002 -5.60059 -42.7002 27.3994\r\n-c0 14.1006 10.7002 20.7002 23.5 20.7002h33.2002v-14.5996h-30.4004c-4.2998 0 -9.2002 -0.800781 -9.2002 -6.40039c0 -15.0996 42.9004 6.90039 42.9004 -26.2998c0 -16.4004 -11.4004 -22 -26.2002 -22h-32.2002l0.100586 14.7998h32.2002zM445.7 165.1h-38.5v-12.5\r\n-h37.7998v-14.0996h-37.9004v-13.7998l38.6006 -0.299805l-0.100586 -14.3008h-55.1992l0.0996094 69.3008h55.2002v-14.3008zM389.4 273.2c0.299805 0.299805 1.69922 1 7.2998 1c1 0 2 -0.100586 3.09961 -0.100586l-7.2998 -16.8994\r\n-c-2.2998 0 -3.2002 0.399414 -3.40039 0.5c-0.199219 0.200195 -1.09961 1.89941 -1.09961 7.89941c0 5.40039 1.09961 7.40039 1.40039 7.60059zM409.8 283.7h-0.0996094h0.0996094zM393.6 298.9h16.1006v-15.2002c-17.4004 0.299805 -33.1006 4.09961 -33.1006 -19.7002\r\n-c0 -11.7998 2.80078 -19.9004 16.1006 -19.9004h7.39941l23.5 54.5h24.8008l27.8994 -65.3994v65.3994h25.2998l29.1006 -48.0996v48.0996h16.8994v-69h-23.5996l-31.2002 51.9004v-51.9004h-33.7002l-6.59961 15.3008h-34.2998l-6.40039 -15.3008h-19.2002\r\n-c-22.7998 0 -33 11.8008 -33 34c0 23.3008 10.5 35.3008 34 35.3008zM435.7 286.8l-11.6006 -27.5996h22.8008zM334.6 298.8h16.9004v-69.2998h-16.9004v69.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-paypal\" unicode=\"&#xf1f4;\" horiz-adv-x=\"576\" \r\n-d=\"M186.3 189.8c0 -12.2002 -9.7002 -21.5 -22 -21.5c-9.2002 0 -16 5.2002 -16 15c0 12.2002 9.5 22 21.7002 22c9.2998 0 16.2998 -5.7002 16.2998 -15.5zM80.5 238.3c11.2998 0 19.7998 -1.5 17.5 -14.8994c-2 -12.7002 -10.5 -14.2002 -21.5 -14.2002l-8.2002 -0.299805\r\n-l4.2998 26.6992c0.200195 1.7002 1.7002 2.7002 3.2002 2.7002h4.7002zM364.5 238.3c8.5 0 18 -0.5 18.0996 -11.0996c0 -15 -9 -18 -22 -18l-8 -0.299805l4.2002 26.6992c0.200195 1.7002 1.40039 2.7002 3.2002 2.7002h4.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480\r\n-c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM128.3 232.6c0 21 -16.2002 28 -34.7002 28h-40c-2.5 0 -5 -2 -5.19922 -4.69922l-16.4004 -102.101c-0.299805 -2 1.2002 -4 3.2002 -4h19c2.7002 0 5.2002 2.90039 5.5 5.7002l4.5 26.5996\r\n-c1 7.2002 13.2002 4.7002 18 4.7002c28.5996 0 46.0996 17 46.0996 45.7998zM212.5 223.8h-19c-3.7998 0 -4 -5.5 -4.2002 -8.2002c-5.7998 8.5 -14.2002 10 -23.7002 10c-24.5 0 -43.1992 -21.5 -43.1992 -45.1992c0 -19.5 12.1992 -32.2002 31.6992 -32.2002\r\n-c9 0 20.2002 4.89941 26.5 11.8994c-0.5 -1.5 -1 -4.69922 -1 -6.19922c0 -2.30078 1 -4 3.2002 -4h17.2002c2.7002 0 5 2.89941 5.5 5.69922l10.2002 64.3008c0.299805 1.89941 -1.2002 3.89941 -3.2002 3.89941zM253 125.9l63.7002 92.5996c0.5 0.5 0.5 1 0.5 1.7002\r\n-c0 1.7002 -1.5 3.5 -3.2002 3.5h-19.2002c-1.7002 0 -3.5 -1 -4.5 -2.5l-26.5 -39l-11 37.5c-0.799805 2.2002 -3 4 -5.5 4h-18.7002c-1.69922 0 -3.19922 -1.7998 -3.19922 -3.5c0 -1.2002 19.5 -56.7998 21.1992 -62.1006c-2.69922 -3.7998 -20.5 -28.5996 -20.5 -31.5996\r\n-c0 -1.7998 1.5 -3.2002 3.2002 -3.2002h19.2002c1.7998 0.100586 3.5 1.10059 4.5 2.60059zM412.3 232.6c0 21 -16.2002 28 -34.7002 28h-39.6992c-2.7002 0 -5.2002 -2 -5.5 -4.69922l-16.2002 -102c-0.200195 -2 1.2998 -4 3.2002 -4h20.5c2 0 3.5 1.5 4 3.19922l4.5 29\r\n-c1 7.2002 13.1992 4.7002 18 4.7002c28.3994 0 45.8994 17 45.8994 45.7998zM496.5 223.8h-19c-3.7998 0 -4 -5.5 -4.2998 -8.2002c-5.5 8.5 -14 10 -23.7002 10c-24.5 0 -43.2002 -21.5 -43.2002 -45.1992c0 -19.5 12.2002 -32.2002 31.7002 -32.2002\r\n-c9.2998 0 20.5 4.89941 26.5 11.8994c-0.299805 -1.5 -1 -4.69922 -1 -6.19922c0 -2.30078 1 -4 3.2002 -4h17.2998c2.7002 0 5 2.89941 5.5 5.69922l10.2002 64.3008c0.299805 1.89941 -1.2002 3.89941 -3.2002 3.89941zM544 257.1c0 2 -1.5 3.5 -3.2002 3.5h-18.5\r\n-c-1.5 0 -3 -1.19922 -3.2002 -2.69922l-16.1992 -104l-0.300781 -0.5c0 -1.80078 1.5 -3.5 3.5 -3.5h16.5c2.5 0 5 2.89941 5.2002 5.69922l16.2002 101.2v0.299805zM454 205.3c9.2998 0 16.2998 -5.7002 16.2002 -15.5c0 -12.2998 -9.7002 -21.5 -21.7002 -21.5\r\n-c-9.2002 0 -16.2002 5.2998 -16.2002 15c0 12.2998 9.5 22 21.7002 22z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-stripe\" unicode=\"&#xf1f5;\" horiz-adv-x=\"576\" \r\n-d=\"M492.4 227.2c8.69922 0 18 -6.7002 18 -22.7002h-36.7002c0 16 9.7998 22.7002 18.7002 22.7002zM375 224.6c12.9004 0.100586 21.9004 -14.5 21.9004 -33.0996c0 -19.0996 -8.80078 -33.4004 -21.9004 -33.4004c-8.2998 0 -13.2998 3 -16.7998 6.7002l-0.200195 52.7998\r\n-c3.7002 4.10059 8.7998 7 17 7zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM122.2 166.9c0 42.2998 -54.2998 34.6992 -54.2998 50.6992c0 5.5 4.59961 7.7002 12.0996 7.7002\r\n-c10.7998 0 24.5 -3.2998 35.2998 -9.09961v33.3994c-11.7998 4.7002 -23.5 6.5 -35.2998 6.5c-28.7998 0 -48 -15 -48 -40.1992c0 -39.3008 54 -32.9004 54 -49.9004c0 -6.59961 -5.7002 -8.7002 -13.5996 -8.7002c-11.8008 0 -26.9004 4.90039 -38.9004 11.2998v-33.8994\r\n-c13.2002 -5.7002 26.5996 -8.10059 38.7998 -8.10059c29.6006 0.200195 49.9004 14.7002 49.9004 40.3008zM191 223.5v30.2998h-26.9004v30.7998l-34.6992 -7.39941l-0.200195 -113.9c0 -21 15.7998 -36.5 36.8994 -36.5c11.6006 0 20.2002 2.10059 24.9004 4.7002v28.9004\r\n-c-4.5 -1.80078 -27 -8.30078 -27 12.5996v50.5h27zM265 221.1v32.7002h-0.0996094c-4.7002 1.7002 -21.3008 4.7998 -29.6006 -10.5l-2.2002 10.5h-30.6992v-124.5h35.5v84.4004c8.39941 11 22.5996 8.89941 27.0996 7.39941zM309.1 129.3v124.5h-35.6992v-124.5h35.6992z\r\n-M309.1 272.2v28.8994l-35.6992 -7.59961v-28.9004zM383.2 126.7c25.3994 0.0996094 48.5996 20.5 48.5996 65.5996c0 41.2998 -23.5 63.7998 -48.3994 63.7998c-13.9004 0 -22.9004 -6.59961 -27.8008 -11.0996l-1.7998 8.7998h-31.2998v-165.8l35.5 7.5l0.0996094 40.2002\r\n-c5.10059 -3.7002 12.7002 -9 25.1006 -9zM543.6 178.2c0.100586 2 0.400391 9.39941 0.400391 12.8994c0 36.4004 -17.5996 65.1006 -51.2998 65.1006c-33.7998 0 -54.2998 -28.7002 -54.2998 -64.9004c0 -42.7998 24.1992 -64.5 58.7998 -64.5\r\n-c17 0 29.7002 3.90039 39.3994 9.2002v28.5996c-9.69922 -4.89941 -20.7998 -7.89941 -34.8994 -7.89941c-13.7998 0 -26 4.89941 -27.6006 21.5h69.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lastfm\" unicode=\"&#xf202;\" horiz-adv-x=\"512\" \r\n-d=\"M225.8 80.9004c0 0 -31.7002 -31.1006 -97.8994 -31.1006c-82.2002 0 -127.9 48.1006 -127.9 137.2c0 92.7002 45.7002 147.2 131.8 147.2c117.7 0 129.3 -66.2002 161.3 -163c14 -42.7998 38.7002 -73.9004 97.9004 -73.9004c39.9004 0 61 8.7998 61 30.5\r\n-c0 31.9004 -34.9004 35.1006 -79.7998 45.7002c-48.6006 11.7002 -68 36.9004 -68 76.7998c0 64 51.5996 83.9004 104.399 83.9004c59.8008 0 96.2002 -21.7002 100.9 -74.5l-58.5996 -7c-2.30078 25.2002 -17.5 35.7998 -45.7002 35.7998\r\n-c-25.7998 0 -41.6006 -11.7998 -41.6006 -31.7002c0 -17.5996 7.60059 -28.0996 33.4004 -34c52.2998 -11.5 115 -19.2002 115 -92.0996c0 -58.6006 -49.2998 -80.9004 -122 -80.9004c-101.4 0 -136.6 45.7002 -155.4 102.601\r\n-c-26.0996 81.5996 -34.3994 134.899 -100.899 134.899c-35.7002 0 -72.1006 -25.7998 -72.1006 -97.8994c0 -56.3008 28.7002 -91.5 69.2002 -91.5c45.7002 0 76.2002 34 76.2002 34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lastfm-square\" unicode=\"&#xf203;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM307.8 103.1c45.4004 0 76.2002 13.9004 76.1006 50.6006c0 45.5 -39.1006 50.3994 -71.8008 57.5\r\n-c-16.0996 3.7002 -20.8994 10.2998 -20.8994 21.2998c0 12.5 9.89941 19.7998 26 19.7998c17.5996 0 27.0996 -6.59961 28.5996 -22.3994l36.7002 4.39941c-2.90039 33 -25.5996 46.6006 -63 46.6006c-32.9004 0 -65.2002 -12.4004 -65.2002 -52.4004\r\n-c0 -24.9004 12.1006 -40.7002 42.5 -48c28.1006 -6.59961 49.9004 -8.7002 49.9004 -28.5996c0 -13.6006 -13.2002 -19.1006 -38.1006 -19.1006c-37 0 -52.3994 19.4004 -61.1992 46.2002c-20 60.5 -27.3008 101.9 -100.801 101.9c-53.8994 0 -82.5 -34.1006 -82.5 -92\r\n-c0 -55.7002 28.6006 -85.8008 79.9004 -85.8008c41.4004 0 61.2002 19.4004 61.2002 19.4004l-11.7002 31.9004s-19 -21.3008 -47.5996 -21.3008c-25.3008 0 -43.3008 22 -43.3008 57.2002c0 45.1006 22.7002 61.2002 45.1006 61.2002c41.5 0 46.7002 -33.2998 63 -84.2998\r\n-c11.7002 -35.5 33.7002 -64.1006 97.0996 -64.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ioxhost\" unicode=\"&#xf208;\" horiz-adv-x=\"640\" \r\n-d=\"M616 288c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-52.7002c3.10059 -15.5 4.7002 -31.5996 4.7002 -48c0 -137 -111 -248 -248 -248c-102.9 0 -191.2 62.7002 -228.7 152h-67.2998c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24\r\n-h52.7002c-3.10059 15.5 -4.7002 31.5996 -4.7002 48c0 137 111 248 248 248c102.9 0 191.2 -62.7002 228.7 -152h67.2998zM520 192c0 16.5996 -2 32.5996 -5.7998 48h-298.2c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24h279.5\r\n-c-33.9004 62 -99.7998 104 -175.5 104c-110.5 0 -200 -89.5 -200 -200c0 -16.5996 2 -32.5996 5.7998 -48h298.2c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-279.5c33.9004 -62 99.7998 -104 175.5 -104c110.5 0 200 89.5 200 200zM216 216h208\r\n-c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-208c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angellist\" unicode=\"&#xf209;\" \r\n-d=\"M347.1 232.6c48 -11.6992 54.9004 -50.5996 54.9004 -93.6992c0 -114.301 -73.4004 -202.9 -191.4 -202.9c-96.1992 0 -164.6 76.4004 -164.5 148.6c0 37.1006 14.2002 61.7002 51.1006 71.7002c-3.10059 8.2998 -8 20.7998 -8 29.7002\r\n-c0 23.5 24.8994 52.5996 48.2998 52.5996c6.90039 0 13.7002 -2 20 -4.2998c-12.4004 35.2002 -46.5996 126.7 -46.5996 162c0 28.7998 14.5996 51.7002 45.6992 51.7002c40 0 85.4004 -144 95.1006 -172.5c12.5 31.4004 52.5 163.1 97.0996 163.1\r\n-c28 0 43.7002 -22.2998 43.7002 -48.8994c0 -30.2002 -33.7002 -124.5 -45.4004 -157.101zM311.7 340l-33.1006 -93.7002l34 -6c8.5 23.4004 47.1006 128.9 47.1006 148c0 7.10059 -2.2998 16 -10.9004 16c-16 0 -33.0996 -52 -37.0996 -64.2998zM142.3 399.7\r\n-c0 -29.1006 34.6006 -120 45.5 -148.8c7.7002 4.39941 19.7998 2.69922 35.4004 1.39941l-34.6006 100.3c-31.7998 92.8008 -46.2998 59 -46.2998 47.1006zM140 204c-7.7002 0 -20.2998 -13.4004 -20.4004 -21.0996c0 -20.8008 56 -97.7002 76.9004 -97.7002\r\n-c5.7002 0 10.5996 6.2998 10.5996 11.3994c0 12.8008 -37.7998 107.4 -67.0996 107.4zM324.3 17.7002c55.2998 61.5 49.1006 158.6 31 174.7c-24 21.0996 -106 29.0996 -138.3 29.0996c-17.2998 0 -17.4004 -6.40039 -17.4004 -13.0996\r\n-c0 -43.7002 92.9004 -39.7002 120.601 -39.7002c11.2002 0 15.7998 -9.90039 16.8994 -21.1006c-7.39941 -7.39941 -17.6992 -11.6992 -27.3994 -15.3994c-9.40039 -3.40039 -19.1006 -7.10059 -27.1006 -13.1006c-22 -16 -43.6992 -43.3994 -43.6992 -71.6992\r\n-c0 -17.7002 10.5996 -32.9004 10.5996 -50.3008c0 -0.299805 -2 -6.5 -2 -7.39941c-32.5996 2.2998 -40.5996 34.5996 -41.7002 61.7002c-3.39941 -0.900391 -8 -0.600586 -11.7002 -0.600586c5.10059 -17.7998 -11.8994 -42 -38 -42\r\n-c-37.7998 0 -88 57.2002 -58.2998 86.9004c28.7002 -35.9004 35 -51.4004 51.1006 -51.4004c4 0 11.6992 3.40039 11.6992 8.2998c0 12.8008 -42.8994 73.1006 -54.2998 73.1006c-16.7998 0 -37.7002 -24.9004 -20.5996 -68.2998\r\n-c22.5996 -55.7002 69.5 -88.3008 128.899 -88.3008c43.4004 0 80.6006 16.6006 109.7 48.6006zM225.7 143.7c3.2002 -8.2998 6.59961 -16.6006 9.39941 -25.1006c6.30078 7.10059 12.9004 13.7002 20.3008 19.1006c-10 2 -20 2.89941 -29.7002 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"buysellads\" unicode=\"&#xf20d;\" \r\n-d=\"M224 297.3l42.9004 -160.7h-85.8008zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM382.7 42.7002l-94.5 298.7h-128.4l-94.5 -298.7h90.7002l111.7 91.5996l24.2002 -91.5996h90.7998z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"connectdevelop\" unicode=\"&#xf20e;\" horiz-adv-x=\"576\" \r\n-d=\"M550.5 207c6.69629 -1.33887 11.7861 -7.5 11.7881 -14.7324c0 -7.5 -5.3584 -13.6602 -12.3223 -15l-54.9111 -95.3574c0.536133 -1.60742 0.804688 -3.21387 0.804688 -4.82129c0 -7.23145 -5.09082 -13.3926 -12.0547 -14.7314l-51.6963 -90.2686\r\n-c0.535156 -1.33887 0.802734 -2.67773 0.802734 -4.28516c0 -8.30371 -6.69727 -15.2676 -15.2686 -15.2676c-4.28516 0 -8.30371 1.875 -10.9814 4.82129h-107.144c-2.67871 -3.21484 -6.96484 -5.35742 -11.5176 -5.35742s-8.83887 2.14258 -11.5166 5.35645h-106.875\r\n-c-2.67969 -3.21484 -6.69727 -5.35742 -11.5186 -5.35742c-8.30371 0 -15.2676 6.69727 -15.2676 15.2676c0 1.875 0.535156 3.75 1.07031 5.35742l-51.6963 89.7324c-6.96484 1.33887 -12.0547 7.5 -12.0547 14.7314c0 1.875 0.268555 3.21387 0.804688 4.82129\r\n-l-55.1797 95.3574c-6.96484 1.60742 -12.0537 7.76855 -12.0537 15c0 7.5 5.3584 13.6611 12.5898 15l53.3047 92.1436c0 0.536133 -0.268555 1.07227 -0.268555 1.60645c0 6.16113 3.75098 11.251 9.10742 13.6611l55.9824 97.2334\r\n-c-0.536133 1.33887 -1.07129 3.21387 -1.07129 4.82129c0 8.57129 6.96484 15.2676 15.2676 15.2676c4.82227 0 8.83887 -2.14258 11.7861 -5.625h106.071c2.67871 3.48242 6.69629 5.625 11.5176 5.625s8.83887 -2.14258 11.5176 -5.62402h106.606\r\n-c2.94727 3.48242 6.96484 5.625 11.7861 5.625c8.30371 0 15.2676 -6.69727 15.2676 -15.2676c0 -1.60742 -0.535156 -3.21484 -1.07031 -4.82129l55.4463 -95.8936c8.03613 -0.267578 14.7324 -6.96484 14.7324 -15.001c0 -2.67871 -0.803711 -5.08984 -1.875 -7.23145z\r\n-M153.535 -2.73242v75.8037h-43.6602zM153.535 81.1074v50.624l-44.999 -47.4102c0.535156 -1.07227 1.07129 -2.14355 1.33887 -3.21387h43.6602zM153.535 143.518l0.000976562 92.9463l-50.0889 51.9648c-2.41113 -1.60645 -5.08887 -2.41113 -7.76855 -2.67871\r\n-l-51.9648 -90c0.268555 -1.07227 0.268555 -2.14258 0.268555 -3.48242c0 -1.33887 0 -2.67871 -0.535156 -4.01758l55.7129 -96.4287c1.33887 -0.267578 2.67871 -1.07129 4.01758 -1.60742zM153.535 245.84v72.0527l-43.9277 -15.8037\r\n-c0 -0.267578 0.267578 -0.803711 0.267578 -1.07227c0 -2.94531 -0.803711 -5.62402 -2.14258 -7.7666zM153.535 326.465v59.7324l-43.6602 -75.5361zM480.054 287.357l-0.267578 0.267578l-98.0361 -101.518l63.75 -67.2324l35.3584 167.143zM291.75 92.8926\r\n-l-11.25 -11.7852h22.7676zM291.482 104.143l79.2852 82.2324l-83.0352 87.5889l-79.5537 -84.375zM296.839 98.25l16.875 -17.1426h124.02l5.8916 28.125l-67.5 71.25zM410.411 403.607l-117.053 -124.019l83.0342 -87.5889l97.5 101.25\r\n-c-1.33984 2.14258 -2.14258 4.82129 -2.14258 7.7666v0.536133l-57.8574 100.714c-1.33984 0.268555 -2.41016 0.804688 -3.48145 1.34082zM401.304 405.75h-4.28711l-166.339 -60l57.0547 -60.2676zM277.821 405.75h-103.929l50.8936 -53.5713l148.393 53.5713h-75\r\n-c-2.67871 -2.67773 -6.16016 -4.28516 -10.1787 -4.28516s-7.50098 1.60742 -10.1787 4.28516zM161.572 400.125v-70.7148l54.9111 19.8213l-51.1611 53.8398c-0.730469 -0.25293 -1.93066 -0.613281 -2.67969 -0.804688zM161.572 320.839v-83.3037l40.9814 -42.0527\r\n-l79.5537 84.1064l-59.7324 63.2139zM161.572 228.161v-76.0723l36.4277 38.3037zM161.572 140.303v-59.1953h107.678l17.1426 17.6777l-82.7676 85.9814zM168.536 -21.75h1.33887l91.6074 94.8213h-99.9102v-89.7324l1.07031 -1.60645\r\n-c2.41113 -0.804688 4.28613 -1.875 5.89355 -3.48242zM298.447 -21.75h104.194l-91.6064 94.8213h-38.3037l-91.6074 -94.8213h96.4287c2.68066 2.41016 6.42871 4.28516 10.4473 4.28516s7.76758 -1.875 10.4473 -4.28516zM418.447 -9.96387l17.4121 83.0361h-114.376\r\n-l89.1953 -91.875c1.07227 0.536133 2.14355 1.07031 3.48242 1.33887zM431.303 12.2676l34.8223 60.8037h-21.9639zM466.125 81.1074c0.267578 1.07129 0.803711 2.14258 1.33887 2.94531l-17.1426 18.2139l-4.55371 -21.1592h20.3574zM532.286 188.518\r\n-c-0.268555 1.33984 -0.536133 2.41113 -0.536133 3.75c0 1.60742 0.536133 2.94629 0.802734 4.28516l-45.8027 79.2861l-34.5537 -163.928l20.625 -21.9639c1.33887 0.802734 2.67871 1.33887 4.01758 1.87402z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dashcube\" unicode=\"&#xf210;\" \r\n-d=\"M326.6 344l102.2 104v-427c0 -50.5 -40.0996 -85 -91.2002 -85h-227.199c-51.1006 0 -91.2002 34.5 -91.2002 85v229.5c0 50.2002 40.0996 93.5 91.2002 93.5h216.199zM153.9 31.5v-0.0996094h223.8l-51.1006 52.2998v123.5c0 17.7002 -14.2998 32.5 -32 32.5h-140.699\r\n-c-17.7002 0 -32.4004 -14.7998 -32.4004 -32.5v-142.9c0 -17.7002 14.7002 -32.7998 32.4004 -32.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"forumbee\" unicode=\"&#xf211;\" \r\n-d=\"M5.7998 138.3c-3.7998 17 -5.7998 34.2002 -5.7998 51.4004c0 123.3 99.7998 223.3 223.1 223.3c16.6006 0 33.3008 -2 49.3008 -5.5c-123.4 -47 -220.5 -145.5 -266.601 -269.2zM398.7 327.5c-151.101 -44 -269.2 -164.4 -312.3 -315.7\r\n-c-17.2002 13.4004 -32.7002 30.9004 -45.2002 49c43.3994 149.9 160.1 267.7 309.7 312c18.0996 -12.5996 34.0996 -27.7998 47.7998 -45.2998zM414.5 74.7998c13.0996 -35.2998 24.2002 -73.2998 33.5 -109.8c-36.0996 9.2998 -72 20.5 -107 33.5996\r\n-c-25.7002 -16 -54.5996 -26.8994 -84.5996 -31.2998c42.5996 79.7002 108.199 147.4 187.6 190.3c-4.09961 -29.0996 -14.2998 -57.6992 -29.5 -82.7998zM444.2 220.3c-113.7 -46.7002 -204.2 -139.399 -250.5 -253.5c-19.6006 2.7002 -38.5 7.60059 -56.6006 15.2002\r\n-c44.9004 138.5 153.4 249.3 291.301 295.1c7.89941 -18.0996 13.1992 -37.2998 15.7998 -56.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"leanpub\" unicode=\"&#xf212;\" horiz-adv-x=\"576\" \r\n-d=\"M386.539 336.515l15.0957 -248.955l-10.9785 0.275391c-36.2324 0.824219 -71.6406 -8.7832 -102.657 -27.9971c-31.0156 19.2139 -66.4238 27.9971 -102.657 27.9971c-45.5635 0 -82.0693 -10.7051 -123.516 -27.7227l31.291 258.288\r\n-c28.5459 11.8027 61.4834 18.1143 92.2256 18.1143c41.1729 0 73.8359 -13.1748 102.657 -42.5439c27.7227 28.2715 59.0127 41.7217 98.5391 42.5439zM569.07 0c-25.5264 0 -47.4854 5.21484 -70.542 15.6445c-34.3105 15.6455 -69.9932 24.9785 -107.871 24.9785\r\n-c-38.9775 0 -74.9346 -12.9014 -102.657 -40.623c-27.7227 27.7227 -63.6797 40.623 -102.657 40.623c-37.8779 0 -73.5605 -9.33301 -107.871 -24.9785c-22.2324 -9.88086 -44.7402 -15.6445 -69.1689 -15.6445h-1.37305l42.5449 349.141\r\n-c39.251 22.2334 87.0117 34.8594 132.301 34.8594c37.0547 0 75.209 -7.68457 106.225 -29.0947c31.0156 21.4102 69.1699 29.0947 106.225 29.0947c45.2891 0 93.0498 -12.626 132.301 -34.8594zM525.702 44.7412l-34.0361 280.246\r\n-c-30.7422 13.999 -67.248 21.4102 -101.009 21.4102c-38.4287 0 -74.3848 -12.0771 -102.657 -38.7021c-28.2725 26.625 -64.2275 38.7021 -102.657 38.7021c-33.7607 0 -70.2666 -7.41113 -101.009 -21.4102l-34.0361 -280.246\r\n-c47.2109 19.4863 82.8945 33.4854 135.045 33.4854c37.6045 0 70.8174 -9.60547 102.657 -29.6436c31.8398 20.0381 65.0518 29.6436 102.657 29.6436c52.1504 0 87.834 -13.999 135.045 -33.4854z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sellsy\" unicode=\"&#xf213;\" horiz-adv-x=\"640\" \r\n-d=\"M539.71 210.692c55.1572 -13.4834 94.0742 -63.124 94.0732 -119.509c0 -68.0264 -55.4639 -123.184 -123.185 -123.184h-381.197c-67.7217 0 -123.186 55.1572 -123.185 123.185c0 47.4961 27.8848 91.0098 70.7852 111.234\r\n-c-2.14453 7.35449 -3.06543 15.0146 -3.06543 22.3691c0 46.2705 37.6914 83.9609 83.9629 83.9609c20.2227 0 39.835 -7.35449 55.1562 -20.5303c18.3867 74.7695 85.8008 127.781 163.021 127.781c92.542 0 167.924 -75.3818 167.924 -167.924\r\n-c0 -12.5635 -1.22559 -25.127 -4.29004 -37.3838zM199.88 46.4463v110.928c0 8.27344 -7.04688 15.3213 -15.3213 15.3213h-30.9482c-8.27344 0 -15.3213 -7.04785 -15.3213 -15.3213v-110.928c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h30.9482\r\n-c8.27344 0 15.3213 7.04688 15.3213 15.3213zM289.357 46.4463v131.458c0 8.27246 -7.04883 15.3203 -15.3223 15.3203h-30.9492c-8.27246 0 -15.3213 -7.04688 -15.3213 -15.3203v-131.458c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h30.9492\r\n-c8.27344 0 15.3223 7.04688 15.3223 15.3213zM378.834 46.4463v162.714c0 8.27246 -7.04688 15.3213 -15.3213 15.3213h-30.9482c-8.27441 0 -15.3223 -7.04785 -15.3223 -15.3213v-162.714c0 -8.27344 7.04785 -15.3213 15.3223 -15.3213h30.9482\r\n-c8.27441 0 15.3213 7.04688 15.3213 15.3213zM465.861 46.4463v224.612c0 8.58008 -7.04785 15.6279 -15.3223 15.6279h-28.4971c-8.27441 0 -15.3213 -7.04883 -15.3213 -15.6279v-224.612c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h28.4971\r\n-c8.27441 0 15.3223 7.04688 15.3223 15.3213z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shirtsinbulk\" unicode=\"&#xf214;\" \r\n-d=\"M100 37.7002l4.40039 9.89941l30.5996 -13.3994l-4.40039 -9.90039zM139.4 20.2002l4.39941 9.89941l30.6006 -13.3994l-4.40039 -9.90039zM311.5 34.2002l30.5996 13.3994l4.40039 -9.89941l-30.5996 -13.4004zM179.1 3l4.40039 9.59961l30.2998 -13.3994\r\n-l-4.39941 -9.90039zM60.4004 55.2002l4.39941 9.89941l30.6006 -13.6992l-4.40039 -9.60059zM271.8 16.7002l30.6006 13.3994l4.39941 -9.89941l-30.5996 -13.4004zM232.5 -0.799805l30.5996 13.3994l4.40039 -9.59961l-30.5996 -13.7002zM350.9 51.4004l30.5996 13.6992\r\n-l4.40039 -9.89941l-30.6006 -13.4004zM170 401.4v-10.5h-33.5v10.5h33.5zM122.8 401.4l-0.0996094 -10.5h-33.5v10.5h33.5996zM75.5 401.4l0.0996094 -10.5h-33.2998v10.5h33.2002zM217 401.4v-10.5h-33.2002v10.5h33.2002zM311.5 401.4v-10.5h-33.5v10.5h33.5zM358.8 401.4\r\n-v-10.5h-33.5v10.5h33.5zM264.2 401.4v-10.5h-33.2002v10.5h33.2002zM405.7 401.4v-10.5h-33.2998v10.5h33.2998zM52.7998 96.9004v-33.5h-10.7998v33.5h10.7998zM122.8 312.8l-0.0996094 -10.5h-33.5v10.5h33.5996zM52.7998 302.2v-23h-10.7998v33.5h33.5996v-10.5h-22.7998\r\n-zM221.7 73.5996c-50.2002 0 -91.2998 40.8008 -91.2998 91.3008c0 50.1992 41.0996 91.2998 91.2998 91.2998c50.5 0 91.2998 -41.1006 91.2998 -91.2998c0 -50.5 -40.7998 -91.3008 -91.2998 -91.3008zM173.5 184.7c0 -44.2998 77.5996 -11.9004 77.5996 -38\r\n-c0 -13.1006 -24 -14.2998 -32.6992 -14.2998c-12.3008 0 -29.8008 2.69922 -35.9004 14.8994h-0.900391l-9 -18.3994c14.8008 -9.30078 29.1006 -12.2002 47.2002 -12.2002c19.5 0 51 5.7998 51 31.2002c0 48.0996 -78.5 16.2998 -78.5 37.8994\r\n-c0 13.1006 20.7998 14.9004 29.7998 14.9004c10.8008 0 29.2002 -3.2002 35.6006 -13.1006h0.899414l8.80078 16.9004c-15.1006 6.2002 -27.4004 12 -44.3008 12c-20.0996 0 -49.5996 -6.40039 -49.5996 -31.7998zM52.7998 269.6v-33.5996h-10.7998v33.5996h10.7998z\r\n-M395.2 63.4004v33.5h10.7998v-33.5h-10.7998zM52.7998 140.1v-33.5h-10.7998v33.5h10.7998zM0 444.3h448v-406l-226.3 -98.5996l-221.7 98.5996v406zM418.8 57.2002h0.100586v270.1h-389.7v-270.1l192.8 -85.7002zM418.8 356.5h0.100586v58.5996h-389.7v-58.5996h389.6z\r\n-M52.7998 226.4v-33.5h-10.7998v33.5h10.7998zM52.7998 183.2v-33.5h-10.7998v33.5h10.7998zM170 312.8v-10.5h-33.5v10.5h33.5zM395.2 149.7v33.5h10.7998v-33.5h-10.7998zM395.2 192.9v33.5h10.7998v-33.5h-10.7998zM217 312.8v-10.5h-33.2002v10.5h33.2002zM395.2 236\r\n-v33.5h10.7998v-33.5h-10.7998zM395.2 106.5v33.5h10.7998v-33.5h-10.7998zM264.2 312.8v-10.5h-33.2002v10.5h33.2002zM311.5 312.8v-10.5h-33.5v10.5h33.5zM395.2 279.2l0.0996094 23h-22.7998v10.5h33.5v-33.5h-10.7998zM358.8 312.8v-10.5h-33.5v10.5h33.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"simplybuilt\" unicode=\"&#xf215;\" horiz-adv-x=\"512\" \r\n-d=\"M481.2 384c14.7002 0 26.5 -11.7998 26.7002 -26.2998v-331.4c0 -14.5 -11.8008 -26.2998 -26.6006 -26.2998h-450.399c-14.8008 0 -26.6006 11.7998 -26.6006 26.2998v331.4c0 14.5 11.7998 26.2998 26.4004 26.2998h106c14.5996 0 26.5996 -11.7998 26.5996 -26.2998\r\n-v-39.6006h185.3v39.6006c0 14.5 12.1006 26.2998 26.6006 26.2998h106zM149.8 92.2002c36.9004 0 66.6006 29.7002 66.6006 66.3994c0 36.9004 -29.7002 66.6006 -66.6006 66.6006c-36.7002 0 -66.3994 -29.7002 -66.3994 -66.6006\r\n-c0 -36.6992 29.7998 -66.3994 66.3994 -66.3994zM362.2 92.2002c36.5996 0 66.3994 29.7002 66.3994 66.5996c0 36.7002 -29.7998 66.4004 -66.3994 66.4004c-36.9004 0 -66.6006 -29.7998 -66.6006 -66.4004c0 -36.8994 29.7002 -66.5996 66.6006 -66.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skyatlas\" unicode=\"&#xf216;\" horiz-adv-x=\"640\" \r\n-d=\"M640 118.7c0 -65.9004 -52.5 -114.4 -117.5 -114.4c-165.9 0 -196.6 249.7 -359.7 249.7c-146.899 0 -147.1 -212.2 5.60059 -212.2c42.5 0 90.8994 17.7998 125.3 42.5c5.59961 4.10059 16.8994 16.2998 22.7998 16.2998s10.9004 -5 10.9004 -10.8994\r\n-c0 -7.7998 -13.1006 -19.1006 -18.7002 -24.1006c-40.9004 -35.5996 -100.3 -61.1992 -154.7 -61.1992c-83.4004 -0.100586 -154 59 -154 144.899c0 85.9004 67.5 149.101 152.8 149.101c185.3 0 222.5 -245.9 361.9 -245.9c99.8994 0 94.7998 139.7 3.39941 139.7\r\n-c-17.5 0 -35 -11.6006 -46.8994 -11.6006c-8.40039 0 -15.9004 7.2002 -15.9004 15.6006c0 11.5996 5.2998 23.7002 5.2998 36.2998c0 66.5996 -50.8994 114.7 -116.899 114.7c-53.1006 0 -80 -36.9004 -88.7998 -36.9004c-6.2002 0 -11.2002 5 -11.2002 11.2002\r\n-c0 5.59961 4.09961 10.2998 7.7998 14.4004c25.2998 28.7998 64.7002 43.6992 102.8 43.6992c79.4004 0 139.101 -58.3994 139.101 -137.8c0 -6.89941 -0.300781 -13.7002 -1.2002 -20.5996c11.8994 3.09961 24.0996 4.7002 35.8994 4.7002\r\n-c60.7002 0 111.9 -45.3008 111.9 -107.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pinterest-p\" unicode=\"&#xf231;\" horiz-adv-x=\"384\" \r\n-d=\"M204 441.5c94.2002 0 180 -64.7998 180 -164.1c0 -93.3008 -47.7002 -196.801 -153.9 -196.801c-25.1992 0 -57 12.6006 -69.2998 36c-22.7998 -90.2998 -21 -103.8 -71.3994 -172.8c-5.2002 -1.89941 -3.5 -2.2998 -6.90039 1.5c-1.7998 18.9004 -4.5 37.5 -4.5 56.4004\r\n-c0 61.2002 28.2002 149.7 42 209.1c-7.5 15.2998 -9.59961 33.9004 -9.59961 50.7002c0 80 93.8994 92 93.8994 25.7998c0 -39 -26.3994 -75.5996 -26.3994 -113.399c0 -25.8008 21.2998 -43.8008 46.1992 -43.8008c69 0 90.3008 99.6006 90.3008 152.7\r\n-c0 71.1006 -50.4004 109.8 -118.5 109.8c-79.2002 0 -140.4 -57 -140.4 -137.399c0 -38.7002 23.7002 -58.5 23.7002 -67.7998c0 -7.80078 -5.7002 -35.4004 -15.6006 -35.4004c-24 0 -63.5996 40 -63.5996 110.4c0 110.699 101.4 179.1 204 179.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"whatsapp\" unicode=\"&#xf232;\" \r\n-d=\"M380.9 350.9c41.8994 -42 67.0996 -97.7002 67.0996 -157c0 -122.4 -101.8 -222 -224.1 -222h-0.100586c-37.2002 0 -73.7002 9.2998 -106.1 27l-117.7 -30.9004l31.5 115c-19.4004 33.7002 -29.5996 71.9004 -29.5996 111c0 122.4 99.5996 222 222 222\r\n-c59.2998 0 115.1 -23.0996 157 -65.0996zM223.9 9.2998c101.699 0 186.6 82.7998 186.6 184.601c0.0996094 49.2998 -21.2998 95.5996 -56.0996 130.5c-34.8008 34.8994 -81.1006 54.0996 -130.4 54.0996c-101.8 0 -184.6 -82.7998 -184.6 -184.5\r\n-c0 -34.9004 9.69922 -68.7998 28.1992 -98.2002l4.40039 -7l-18.5996 -68.0996l69.7998 18.2998l6.7002 -4c28.2998 -16.7998 60.7998 -25.7002 94 -25.7002zM325.1 147.5c5.5 -2.7002 9.2002 -4.09961 10.5 -6.59961c1.40039 -2.30078 1.40039 -13.4004 -3.19922 -26.4004\r\n-c-4.60059 -13 -26.7002 -24.7998 -37.4004 -26.4004c-17.5996 -2.59961 -31.4004 -1.2998 -66.5996 13.9004c-55.7002 24.0996 -92 80.0996 -94.8008 83.7998c-2.69922 3.7002 -22.5996 30.1006 -22.5996 57.4004s14.2998 40.7002 19.4004 46.2998\r\n-c5.09961 5.5 11.0996 6.90039 14.7998 6.90039s7.39941 0 10.5996 -0.200195c3.40039 -0.200195 8 1.2998 12.5 -9.5c4.60059 -11.1006 15.7002 -38.4004 17.1006 -41.2002c1.39941 -2.7998 2.2998 -6 0.5 -9.7002c-10.6006 -21.2002 -22 -20.5 -16.3008 -30.2998\r\n-c21.5 -36.9004 42.9004 -49.7002 75.5 -66c5.5 -2.7998 8.80078 -2.2998 12 1.40039c3.30078 3.7998 13.9004 16.1992 17.6006 21.7998c3.7002 5.59961 7.39941 4.7002 12.5 2.7998c5.09961 -1.7998 32.3994 -15.2002 37.8994 -18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"viacoin\" unicode=\"&#xf237;\" horiz-adv-x=\"384\" \r\n-d=\"M384 416l-48 -112h48v-48h-68.5l-13.7998 -32h82.2998v-48h-102.8l-89.2002 -208l-89.2002 208h-102.8v48h82.2998l-13.7998 32h-68.5v48h48l-48 112h64l80.7998 -192h94.5l80.7002 192h64zM192 112l27 64h-54z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medium\" unicode=\"&#xf23a;\" \r\n-d=\"M0 416h448v-448h-448v448zM372.2 309.9v5h-83.2002l-59.2998 -147.9l-67.4004 148h-87.2998v-5.09961l28.0996 -33.9004c2.80078 -2.5 4.2002 -6.09961 3.80078 -9.7998v-133c0.799805 -4.7998 -0.700195 -9.7002 -4.10059 -13.2002l-31.5996 -38.2998v-5.10059h89.7998\r\n-v5.10059l-31.5996 38.2998c-3.40039 3.5 -5.10059 8.40039 -4.40039 13.2002v115l78.7002 -171.601h9.09961l67.6006 171.601v-136.9c0 -3.59961 0 -4.2998 -2.40039 -6.7002l-24.2998 -23.5996v-4.90039h118v5.10059l-23.5 23\r\n-c-2.10059 1.5 -3.10059 4.09961 -2.7002 6.7002v169.3c-0.400391 2.5 0.599609 5.09961 2.7002 6.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"y-combinator\" unicode=\"&#xf23b;\" \r\n-d=\"M448 416v-448h-448v448h448zM236 160.5l77.5 145.5h-32.7002l-45.7998 -91c-4.7002 -9.2998 -9 -18.2998 -12.7998 -26.7998l-12.2002 26.7998l-45.2002 91h-35l76.7002 -143.8v-94.5h29.5v92.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"optin-monster\" unicode=\"&#xf23c;\" horiz-adv-x=\"576\" \r\n-d=\"M572.6 26.5996c1 -3.5 1.90039 -7 1.7002 -10.6992c0.799805 -31.6006 -44.2998 -64 -73.5 -65.1006c-17.2998 -0.799805 -34.5996 8.40039 -42.7002 23.5c-113.5 -4.09961 -227 -4.89941 -340.199 0c-8.40039 -15.0996 -25.7002 -24 -43 -23.5\r\n-c-28.9004 1.10059 -74 33.5 -73.5 65.1006c0.299805 3.7998 0.799805 7.2998 1.89941 10.7998c-5.59961 9.39941 -4.7998 15.2998 5.40039 11.5996c3.2998 5.2002 7 9.5 11.0996 13.7998c-2.5 10.9004 1.2998 14.1006 11.1006 9.2002c4.5 3.2998 10 6.5 15.8994 9.2002\r\n-c0 15.7998 11.7998 11.2002 17.2998 5.7002c12.5 1.7998 20.2002 -0.700195 26.8008 -5.7002v19.7002c-12.9004 0 -40.6006 11.3994 -45.9004 36.2002c-5 20.7998 2.59961 38.0996 25.0996 47.5996c0.800781 5.90039 8.10059 14 14.9004 15.9004\r\n-c7.59961 1.89941 12.5 -4.60059 14.0996 -10.3008c7.40039 0 17.8008 -1.5 21.1006 -8.09961c5.39941 0.5 11.0996 1.40039 16.5 1.90039c-2.40039 1.89941 -5.10059 3.5 -8.10059 4.59961c-5.09961 8.90039 -13.7998 11.0996 -24.5996 11.5996\r\n-c0 0.800781 0 1.60059 0.299805 2.7002c-19.7998 0.5 -44.0996 5.60059 -54.8994 17.7998c-21.3008 23.6006 -15.9004 83.6006 12.1992 103.5c8.40039 5.7002 21.6006 0.800781 22.7002 -9.69922c2.40039 -20.6006 0.400391 -26.8008 26.2002 -25.9004\r\n-c8.09961 7.7998 16.7998 14.5996 26.5 20c-14.9004 1.2998 -28.9004 -1.59961 -43.7998 -3.7998c12.7002 12.5 23.8994 25.3994 56.7002 42.3994c23.5 11.9004 50 20.8008 76.1992 23.2002c-18.5996 7.90039 -40 11.9004 -59.6992 16.5\r\n-c76.5 16.2002 174.6 22.1006 244.199 -37.5996c18.1006 -15.4004 32.4004 -36.2002 42.7002 -60c39.7998 -4.90039 36.4004 5.5 38.6006 25.0996c1.09961 10.2998 14.2998 15.4004 22.6992 9.5c14.9004 -10.5 22.2002 -30.7998 24.6006 -48.0996\r\n-c2.2002 -17.7998 0.299805 -41.2998 -12.4004 -55.1006c-10.7998 -12.1992 -34.2998 -17.5996 -53.7998 -18.0996v-2.7998c-11.0996 -0.200195 -20.2998 -2.40039 -25.7002 -11.6006c-3 -1.09961 -5.7002 -2.69922 -8.39941 -4.59961\r\n-c5.69922 -0.5 11.3994 -1.40039 16.7998 -1.90039c1.89941 5.60059 12.5996 8.40039 21.0996 8.40039c1.7002 5.40039 6.7998 11.9004 14.1006 10.2998c7.2998 -1.59961 14.0996 -10 14.8994 -15.8994c10.7998 -4.40039 22.1006 -12.2002 25.1006 -25.7002\r\n-c1.89941 -8.10059 1.69922 -15.1006 0.299805 -21.9004c-5.7002 -25.2002 -33.2998 -36.2002 -45.9004 -36.2002c0 -6.69922 0 -13.1992 -0.299805 -19.6992c8.09961 6 16.4004 7.19922 26.7998 5.69922c6 5.90039 17.6006 9.40039 17.6006 -5.69922\r\n-c5.59961 -2.7002 11.2998 -6 15.8994 -9.2002c10.1006 5 13.7002 0.5 10.7998 -9.2002c4.10059 -4.2998 8.10059 -8.90039 11.1006 -13.7998c10.0996 3.59961 11 -2.10059 5.39941 -11.6006zM498.8 280.6c17.2998 -6.69922 26.2002 -22.0996 30.2998 -35.6992\r\n-c1.10059 10.5996 -2.69922 39.5 -13.7998 51.0996c-7.2998 7.2998 -14.0996 5.09961 -14.0996 -0.799805c0 -6.2002 -1.2998 -11.6006 -2.40039 -14.6006zM494.2 273.9c-3.2002 -3.30078 -9.2002 -4.90039 -14.1006 -5.7002c13 -15.7002 17 -41.7002 12.7002 -63\r\n-c10.7998 2.2002 20.5 6.2998 26.2002 12.2002c1.90039 2.19922 3.7998 4.89941 4.90039 7.59961c-1.10059 21.2998 -10.2002 42.7002 -29.7002 48.9004zM470.1 267.1c-3.69922 0 -8.09961 0 -11.7998 0.300781c7.5 -20.6006 12.4004 -42.7002 14.2998 -64.6006\r\n-c3.5 0 7.5 0.299805 11.6006 0.799805c5.89941 24.3008 -0.299805 51.6006 -14.1006 63.5zM47.5 245c4.09961 13.5 13 28.9004 30.2998 35.7002c-1 3 -2.39941 8.39941 -2.39941 14.5996c0 5.90039 -7.10059 8.10059 -14.1006 0.799805\r\n-c-11.3994 -11.5996 -14.8994 -40.5996 -13.7998 -51.0996zM57.2002 217.4c5.7002 -6.2002 15.3994 -10 26.2002 -12.2002c-4.30078 21.3994 -0.300781 47.2998 12.6992 63c-4.89941 0.799805 -10.8994 2.5 -14.0996 5.7002\r\n-c-19.4004 -6.2002 -28.2998 -27.6006 -29.7002 -48.9004c1.40039 -2.7002 3 -5.40039 4.90039 -7.59961zM105.1 202.8c2.40039 22.2002 9.10059 43.7998 19.8008 63.5c-5.2002 -1.09961 -10 -3 -14.9004 -4.89941l-12.2002 -5.10059v0.299805\r\n-c-7.2998 -14.0996 -10 -34.3994 -5.39941 -53c4.59961 -0.5 8.59961 -0.799805 12.6992 -0.799805zM289.1 365.5c-41.8994 0 -76.1992 -34.0996 -76.1992 -75.9004c0 -42.1992 34.2998 -76.1992 76.1992 -76.1992c41.9004 0 76.2002 34 76.2002 76.1992\r\n-c0 41.9004 -34.2998 75.9004 -76.2002 75.9004zM404.7 191.2c-12.9004 0.799805 -26.2002 0.799805 -39.5 1.09961c10 -50.5996 3.2998 -64.7002 16.5 -58.0996c16 8.09961 22.7002 39.2002 23 57zM350.7 192.8c-18.9004 0.299805 -38.1006 0.299805 -57 0v0.299805\r\n-c-0.299805 -5.19922 0.200195 -38.0996 4.2998 -41.0996c11.0996 -5.40039 39.5 -4.59961 51.0996 -1.09961c5.40039 1.59961 2.40039 37 1.60059 41.8994zM278.3 139c4.60059 2.5 2.40039 45.4004 1.2998 53.7002v0.299805\r\n-c-19.3994 -0.299805 -38.5996 -0.299805 -57.7998 -0.799805c-1.89941 -9.2002 -4.59961 -48.9004 1.90039 -51.6006c13 -5.69922 41.5996 -5.09961 54.5996 -1.59961zM171.8 190.1c-5.39941 -19.6992 0.299805 -45.0996 22.2002 -54.8994\r\n-c5.40039 -2.5 8.59961 -2.5 9.7002 4.2998c1.89941 8.7002 2.5 36.7998 4.89941 52.2002c-12.1992 -0.200195 -24.5996 -0.799805 -36.7998 -1.60059zM136.4 158.8c2.39941 -3.7002 1.59961 -9.09961 -8 -12.5c43.7998 -47 92.6992 -85.7002 155.899 -106.5\r\n-c67.5 19.2002 115.601 60 163.2 107c-11.0996 4.2998 -7.7002 10.2998 -7.2998 11.6006c-8.90039 0.799805 -17.9004 1.89941 -26.5 2.69922c-9.5 -33 -36 -52.8994 -46.7998 -31.5996c-2.7002 5.2002 -3.5 11.7002 -4.60059 16.7998\r\n-c-3.7998 -8.39941 -13.2998 -8.09961 -24.5996 -8.89941c-13.2002 -1.10059 -31.6006 -1.30078 -44 3c-3 -12.9004 -11.1006 -12.9004 -26.7998 -14.3008c-14.1006 -1.39941 -48.7002 -4.09961 -54.9004 10.8008c-1.09961 -28.7002 -35.0996 -10 -45.0996 7\r\n-c-3.2002 5.69922 -5.40039 11.3994 -7 17.5996c-7.80078 -0.799805 -15.7002 -1.59961 -23.5 -2.7002zM114.8 -13.7002c0.5 2.5 0.799805 5.2002 0.799805 8.2002c-5.69922 23.2002 -18.5996 49.7002 -33.5 54c-22.3994 6.7002 -68.8994 -23.5 -66.1992 -54.5996\r\n-c12.6992 -19.5 40 -35.7002 59.1992 -36.5c17.8008 -0.800781 35.9004 11.0996 39.7002 28.8994zM106.1 52.2998c9 -16 15.5 -33.2998 16.7002 -51.8994c33.5 19.3994 69.1006 35.6992 105.9 47c-38.7002 20.5 -68.1006 47.7998 -97.2998 77\r\n-c-2.10059 -1.30078 -5.10059 -2.40039 -7.80078 -3.5c-1.59961 -4.90039 8.7002 -5.30078 5.40039 -12.4004c-2.09961 -4.09961 -8.59961 -7.59961 -15.0996 -9.2002c-2.10059 -2.7002 -5.10059 -4.89941 -7.80078 -6.5h-0.299805\r\n-c-0.200195 -13.5 -0.200195 -27 0.299805 -40.5zM443.7 -12.2998c-36.7998 21.2998 -74.1006 41.2998 -115.601 53c-13.7998 -6.2002 -27.8994 -11.2998 -42.1992 -15.4004c-2.10059 -0.799805 -2.10059 -0.799805 -4.30078 0\r\n-c-11.8994 3.7002 -23.2998 8.10059 -34.8994 13.2002c-40.2002 -11.5996 -77.2998 -29.2002 -112.4 -50.7998h-0.299805v-0.299805c0.299805 0 0.299805 0 0.299805 0.299805c103.2 -4.10059 206.4 -3.5 309.4 0zM454.2 0.0996094c1 14.7002 7.2002 35.8008 16.5 51.7002\r\n-l-0.299805 -0.299805c0.5 13.7002 0.799805 27.5 0.799805 41.2998c-3 1.7002 -5.7002 4.10059 -8.10059 6.7998c-6.5 1.30078 -12.8994 5.10059 -15.0996 8.90039c-1.90039 4.09961 1.2998 7.59961 5.90039 10.2998c-0.200195 0.5 -0.5 1.60059 -0.5 2.40039\r\n-c-3 0.799805 -5.40039 1.7998 -7.60059 3.2002c-31.5996 -29.4004 -65.3994 -56.7002 -103.5 -76.7002c38.9004 -11.7002 76 -28.1006 111.9 -47.6006zM560.1 -6.09961c3 31.0996 -43.5 61.3994 -66.1992 54.5c-14.6006 -4.30078 -27.8008 -30.8008 -33.5 -54\r\n-c0 -23.8008 21.1992 -37.9004 40.5 -37c19.1992 0.799805 46.5 17 59.1992 36.5zM372.9 372.8c-35.7002 39.2002 -81.4004 47.7998 -126 23.5c25.1992 56.2002 122.199 48.6006 126 -23.5zM74.7998 40.9004c14.9004 1.89941 24.6006 -19.2002 18.6006 -30.8008\r\n-c-4.80078 -9.69922 -23.7002 -24.0996 -35.9004 -27.2998c-16.5 -4.59961 -32.2002 3.2998 -32.2002 14.9004c0 17.7998 33.7998 41.5996 49.5 43.2002zM290.7 217.1c-30.9004 0 -57.6006 25.7002 -50.2998 59.8008c13.1992 -20.7002 46.5 -12 46.5 11.2998\r\n-c0 10 -7 18.5996 -16.5 21.5996c31.6992 13.7998 72.1992 -8.2002 72.1992 -44.2998c0 -26.7998 -23.2998 -48.4004 -51.8994 -48.4004zM68 -26.0996c-0.5 8.39941 20.2998 23.5 29.2002 25.0996c8.59961 1.59961 12.7002 -11.4004 9.7002 -18.4004\r\n-c-2.7002 -5.69922 -10.5 -13.5 -17.3008 -16.1992c-9.39941 -3.2002 -21.0996 3 -21.5996 9.5zM501.2 40.9004c15.7002 -1.60059 49.5 -25.4004 49.5 -43.2002c0 -11.7002 -15.7002 -19.5 -32.2002 -14.9004c-12.0996 3.2002 -31.2998 17.6006 -36.2002 27.2998\r\n-c-5.7002 11.6006 4 32.7002 18.9004 30.8008zM478.8 -1c8.90039 -1.59961 30 -16.7002 29.1006 -25.0996c-0.200195 -6.5 -12.1006 -12.7002 -21.3008 -9.5c-7 2.69922 -14.8994 10.5 -17.2998 16.1992c-2.89941 7.10059 1.10059 20 9.5 18.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"opencart\" unicode=\"&#xf23d;\" horiz-adv-x=\"640\" \r\n-d=\"M423.3 7.2998c0 -25.2998 -20.2998 -45.5996 -45.5996 -45.5996s-45.7998 20.2998 -45.7998 45.5996s20.5996 45.7998 45.7998 45.7998c25.3994 0 45.5996 -20.5 45.5996 -45.7998zM169.4 53.0996c25.2998 0 45.7998 -20.5 45.7998 -45.7998\r\n-s-20.5 -45.5996 -45.7998 -45.5996c-25.3008 0 -45.6006 20.3994 -45.6006 45.5996s20.2998 45.7998 45.6006 45.7998zM461.1 323.1c302.2 0 169.5 -67.1992 -17.1992 -233.899c59.1992 102.8 262.5 193.899 -70.8008 188.899c-319.8 -4.69922 -338.699 92.5 -373.1 144.2\r\n-c81.9004 -86.3994 158.9 -99.2002 461.1 -99.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"expeditedssl\" unicode=\"&#xf23e;\" horiz-adv-x=\"496\" \r\n-d=\"M248 404.6c117.4 0 212.6 -95.1992 212.6 -212.6s-95.1992 -212.6 -212.6 -212.6s-212.6 95.1992 -212.6 212.6s95.1992 212.6 212.6 212.6zM150.6 271.7h-0.199219v-26.6006c0 -5 3.89941 -8.89941 8.89941 -8.89941h17.7002c5 0 8.90039 3.89941 8.90039 8.89941\r\n-v26.6006c0 82.0996 124 82.0996 124 0v-26.6006c0 -5 3.89941 -8.89941 8.89941 -8.89941h17.7002c5 0 8.90039 3.89941 8.90039 8.89941v26.6006c0 53.7002 -43.7002 97.3994 -97.4004 97.3994s-97.4004 -43.6992 -97.4004 -97.3994zM389.7 68v141.7\r\n-c0 9.7002 -8 17.7002 -17.7002 17.7002h-248c-9.7002 0 -17.7002 -8 -17.7002 -17.7002v-141.7c0 -9.7002 8 -17.7002 17.7002 -17.7002h248c9.7002 0 17.7002 8 17.7002 17.7002zM141.7 205.3v-132.899c0 -2.5 -1.90039 -4.40039 -4.40039 -4.40039h-8.89941\r\n-c-2.5 0 -4.40039 1.90039 -4.40039 4.40039v132.899c0 2.5 1.90039 4.40039 4.40039 4.40039h8.89941c2.5 0 4.40039 -1.90039 4.40039 -4.40039zM283.4 156.6c0 -13 -7.2002 -24.3994 -17.7002 -30.3994v-31.6006c0 -5 -3.90039 -8.89941 -8.90039 -8.89941h-17.7002\r\n-c-5 0 -8.89941 3.89941 -8.89941 8.89941v31.6006c-10.5 6.09961 -17.7002 17.3994 -17.7002 30.3994c0 19.7002 15.7998 35.4004 35.4004 35.4004c19.5996 0 35.5 -15.7998 35.5 -35.4004zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248\r\n-s111 248 248 248zM248 -38.2998c127 0 230.3 103.3 230.3 230.3s-103.3 230.3 -230.3 230.3s-230.3 -103.3 -230.3 -230.3s103.3 -230.3 230.3 -230.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-jcb\" unicode=\"&#xf24b;\" horiz-adv-x=\"576\" \r\n-d=\"M431.5 203.7v32.2998c41.2002 0 38.5 -0.200195 38.5 -0.200195c7.2998 -1.2998 13.2998 -7.2998 13.2998 -16c0 -8.7998 -6 -14.5 -13.2998 -15.7998c-1.2002 -0.400391 -3.2998 -0.299805 -38.5 -0.299805zM474.3 183.5c7.5 -1.5 13.5 -8.2998 13.5 -17\r\n-c0 -9 -6 -15.5 -13.5 -17c-2.7998 -0.700195 -3.2002 -0.5 -42.7998 -0.5v35c39.5 0 40 0.200195 42.7998 -0.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM182 255.7h-57\r\n-c0 -67.1006 10.7002 -109.7 -35.7998 -109.7c-19.5 0 -38.7998 5.7002 -57.2002 14.7998v-28c30 -8.2998 68 -8.2998 68 -8.2998c97.9004 0 82 47.7002 82 131.2zM360.5 251.2c-63.4004 16 -165 14.8994 -165 -59.2998c0 -77.1006 108.2 -73.6006 165 -59.2002v28.2998\r\n-c-47.5996 -24.7002 -107.5 -22 -107.5 31s59.7998 55.5996 107.5 31.2002v28zM544 161.5c0 18.5 -16.5 30.5 -38 32v0.799805c19.5 2.7002 30.2998 15.5 30.2998 30.2002c0 19 -15.7002 30 -37 31c0 0 6.2998 0.299805 -120.3 0.299805v-127.5h122.7\r\n-c24.2998 -0.0996094 42.2998 12.9004 42.2998 33.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-diners-club\" unicode=\"&#xf24c;\" horiz-adv-x=\"576\" \r\n-d=\"M239.7 368.1c97.2002 0 175.8 -78.5996 175.8 -175.8c0 -96.8994 -78.5996 -175.8 -175.8 -175.8c-96.9004 0 -175.8 78.9004 -175.8 175.8c0 97.2002 78.8994 175.8 175.8 175.8zM199.8 88.5v207.9c-41.7002 -16.2002 -71.3994 -56.7002 -71.3994 -104.101\r\n-c0 -47.3994 29.6992 -87.8994 71.3994 -103.8zM279.6 88.2002c41.7002 16.2002 71.4004 56.7002 71.4004 104.1c0 47.4004 -29.7002 87.9004 -71.4004 104.101v-208.2zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h480zM329.7 0c105 0 200.7 85.5 200.7 190.2c0 114.6 -95.7002 193.8 -200.7 193.8h-90.2998c-106.2 0 -193.801 -79.2002 -193.801 -193.8c0 -104.7 87.6006 -190.2 193.801 -190.2h90.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons\" unicode=\"&#xf25e;\" horiz-adv-x=\"496\" \r\n-d=\"M245.83 233.13l-33.2197 -17.2803c-9.43066 19.5801 -25.2402 19.9307 -27.46 19.9307c-22.1309 0 -33.2207 -14.6104 -33.2207 -43.8398c0 -23.5703 9.20996 -43.8408 33.2207 -43.8408c14.4697 0 24.6494 7.09082 30.5693 21.2607l30.5498 -15.5\r\n-c-6.16992 -11.5107 -25.6895 -38.9805 -65.0996 -38.9805c-22.5996 0 -73.96 10.3203 -73.96 77.0498c0 58.6904 43 77.0605 72.6299 77.0605c30.7197 0.00976562 52.7002 -11.9502 65.9902 -35.8604zM388.88 233.13l-32.7803 -17.2803\r\n-c-9.5 19.7705 -25.7197 19.9307 -27.8994 19.9307c-22.1406 0 -33.2197 -14.6104 -33.2197 -43.8398c0 -23.5508 9.22949 -43.8408 33.2197 -43.8408c14.4502 0 24.6494 7.09082 30.54 21.2607l31 -15.5c-2.10059 -3.75 -21.3906 -38.9805 -65.0898 -38.9805\r\n-c-22.6904 0 -73.96 9.87012 -73.96 77.0498c0 58.6699 42.9697 77.0605 72.6299 77.0605c30.71 0.00976562 52.5801 -11.9502 65.5596 -35.8604zM247.56 439.95c141.82 0 248.44 -110.13 248.44 -248c0 -147.13 -118.51 -248 -248.44 -248\r\n-c-133.96 0 -247.56 109.51 -247.56 248c0 132.939 104.74 248 247.56 248zM248.43 -10.8604c103.16 0 202.83 81.1299 202.84 202.82c0 113.8 -90.2891 203.26 -202.819 203.26c-118.29 0 -203.72 -97.8496 -203.72 -203.27c0 -109.771 91.1592 -202.811 203.699 -202.811z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gg\" unicode=\"&#xf260;\" horiz-adv-x=\"512\" \r\n-d=\"M179.2 217.6l102.399 -102.399l-102.399 -102.4l-179.2 179.2l179.2 179.2l44.7998 -44.7998l-25.5996 -25.6006l-19.2002 19.2002l-128 -128l128 -128l51.5 51.5l-77.1006 76.5zM332.8 371.2l179.2 -179.2l-179.2 -179.2l-44.7998 44.7998l25.5996 25.6006\r\n-l19.2002 -19.2002l128 128l-128 128l-51.5 -51.5l77.1006 -76.5l-25.6006 -25.5996l-102.399 102.399z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gg-circle\" unicode=\"&#xf261;\" horiz-adv-x=\"512\" \r\n-d=\"M257 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM207.5 65.2002l75 75.2002l-77.2002 77.1992l-24.3994 -24.3994l53.0996 -52.9004l-26.5996 -26.5996l-77.2002 77.2002l77.2002 77.1992l11.0996 -11.0996l24.2002 24.2002\r\n-l-35.2002 35.3994l-125.7 -125.699zM306.5 67.4004l125.7 125.6l-125.7 125.7l-75 -75l77.2002 -77.2002l24.3994 24.4004l-53.0996 52.8994l26.5 26.5l77.2002 -77.2002l-77.2002 -77.1992l-11.0996 11.0996l-24.1006 -24.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tripadvisor\" unicode=\"&#xf262;\" horiz-adv-x=\"576\" \r\n-d=\"M166.4 167.479c0 -13.2354 -10.7305 -23.9658 -23.9668 -23.9658c-13.2354 0 -23.9658 10.7305 -23.9658 23.9658c0 13.2363 10.7305 23.9668 23.9658 23.9668c13.2363 0 23.9668 -10.7295 23.9668 -23.9668zM431.362 191.435\r\n-c13.2295 0 23.9551 -10.7246 23.9561 -23.9561c0 -13.2305 -10.7266 -23.9551 -23.9561 -23.9551c-13.2314 0 -23.9561 10.7256 -23.9561 23.9551c0 13.2314 10.7256 23.9561 23.9561 23.9561zM520.75 51.9453c-62.667 -49.1045 -153.276 -38.1094 -202.379 24.5586\r\n-l-30.9795 -46.3252l-30.6826 45.9395c-48.2773 -60.3906 -135.622 -71.8916 -197.885 -26.0547c-64.0586 47.1572 -77.7588 137.315 -30.6016 201.373c-5.05762 17.1221 -17.7021 42.7236 -28.2227 57.1475l90.2861 0.0498047\r\n-c48.0039 29.8701 132.851 54.1123 189.389 54.1123c2.11914 0 5.55762 -0.0371094 7.67578 -0.0820312c1.72363 0.0302734 4.52246 0.0556641 6.24609 0.0556641c55.5518 0 138.851 -23.9258 185.936 -53.4043l96.2178 -0.0742188\r\n-c-10.6191 -14.5371 -23.3213 -40.3643 -28.3516 -57.6494c46.793 -62.7471 34.9639 -151.37 -26.6484 -199.646zM259.366 166.239c-0.00683594 63.5566 -51.5352 115.075 -115.092 115.067c-63.5576 -0.00683594 -115.074 -51.5342 -115.068 -115.092\r\n-c0.00683594 -63.5566 51.5352 -115.075 115.092 -115.067c63.5127 0.0742188 114.984 51.5381 115.068 115.052v0.0400391zM287.957 176.694c5.43262 73.4395 65.5098 130.884 139.12 133.021c-35.5576 15.374 -95.8555 27.8506 -134.594 27.8506\r\n-c-1.41699 0 -3.7168 -0.0166016 -5.13379 -0.0380859c-0.953125 0.00878906 -2.50098 0.0166016 -3.45508 0.0166016c-39.2324 0 -100.479 -12.2168 -136.709 -27.2695c74.3447 -1.58203 135.3 -59.4248 140.771 -133.581zM539.663 205.461\r\n-c-21.9922 59.6338 -88.1621 90.1484 -147.795 68.1572c-59.6338 -21.9922 -90.1484 -88.1621 -68.1572 -147.795v-0.0322266c22.0381 -59.6074 88.1982 -90.0908 147.827 -68.1133c59.6152 22.0039 90.1133 88.1621 68.125 147.783zM213.624 167.486v-0.115234\r\n-c-0.0566406 -39.3281 -31.9863 -71.1631 -71.3145 -71.1064c-39.3271 0.0576172 -71.1621 31.9863 -71.1055 71.3145s31.9863 71.1631 71.3135 71.1055c39.2598 -0.115234 71.042 -31.9395 71.1064 -71.1982zM189.112 167.486v0.0839844\r\n-c-0.0517578 25.7832 -20.9941 46.6445 -46.7783 46.5938s-46.6445 -20.9941 -46.5938 -46.7773c0.0507812 -25.7842 20.9941 -46.6445 46.7764 -46.5938c25.7266 0.113281 46.5371 20.9678 46.5957 46.6934zM502.535 167.486\r\n-c-0.0205078 -39.3281 -31.918 -71.2422 -71.2471 -71.2217c-39.3291 0.0214844 -71.1943 31.918 -71.1729 71.2471c0.0195312 39.3281 31.918 71.1943 71.2471 71.1729c39.29 -0.0654297 71.1211 -31.9082 71.1729 -71.1982zM478.031 167.494\r\n-c-0.00878906 25.7842 -20.918 46.6787 -46.7021 46.6699s-46.6787 -20.918 -46.6699 -46.7021s20.918 -46.6777 46.7021 -46.6699c25.7646 0.0458984 46.6357 20.9277 46.6699 46.6934v0.00878906z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"odnoklassniki\" unicode=\"&#xf263;\" horiz-adv-x=\"320\" \r\n-d=\"M275.1 114c-27.3994 -17.4004 -65.0996 -24.2998 -90 -26.9004l20.9004 -20.5996l76.2998 -76.2998c27.9004 -28.6006 -17.5 -73.2998 -45.7002 -45.7002c-19.0996 19.4004 -47.0996 47.4004 -76.2998 76.5996l-76.2998 -76.5\r\n-c-28.2002 -27.5 -73.5996 17.6006 -45.4004 45.7002c19.4004 19.4004 47.1006 47.4004 76.3008 76.2998l20.5996 20.6006c-24.5996 2.59961 -62.9004 9.09961 -90.5996 26.8994c-32.6006 21 -46.9004 33.3008 -34.3008 59c7.40039 14.6006 27.7002 26.9004 54.6006 5.7002\r\n-c0 0 36.2998 -28.8994 94.8994 -28.8994c58.6006 0 94.9004 28.8994 94.9004 28.8994c26.9004 21.1006 47.0996 8.90039 54.5996 -5.7002c12.4004 -25.6992 -1.89941 -38 -34.5 -59.0996zM30.2998 318.3c0 71.7002 58.2998 129.7 129.7 129.7s129.7 -58 129.7 -129.7\r\n-c0 -71.3994 -58.2998 -129.399 -129.7 -129.399s-129.7 58 -129.7 129.399zM96.2998 318.3c0 -35.0996 28.6006 -63.7002 63.7002 -63.7002s63.7002 28.6006 63.7002 63.7002c0 35.4004 -28.6006 64 -63.7002 64s-63.7002 -28.5996 -63.7002 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"odnoklassniki-square\" unicode=\"&#xf264;\" \r\n-d=\"M184.2 270.9c0 22.0996 17.8994 40 39.7998 40s39.7998 -17.9004 39.7998 -40c0 -22 -17.8994 -39.8008 -39.7998 -39.8008s-39.7998 17.9004 -39.7998 39.8008zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\r\n-c26.5 0 48 -21.5 48 -48zM142.9 270.9c0 -44.6006 36.3994 -80.9004 81.0996 -80.9004s81.0996 36.2002 81.0996 80.9004c0 44.7998 -36.3994 81.0996 -81.0996 81.0996s-81.0996 -36.2002 -81.0996 -81.0996zM317.4 180.2\r\n-c-4.60059 9.09961 -17.3008 16.7998 -34.1006 3.59961c0 0 -22.7002 -18 -59.2998 -18s-59.2998 18 -59.2998 18c-16.7998 13.2002 -29.5 5.5 -34.1006 -3.59961c-7.89941 -16.1006 1.10059 -23.7002 21.4004 -37c17.2998 -11.1006 41.2002 -15.2002 56.5996 -16.7998\r\n-l-12.8994 -12.9004c-18.2002 -18 -35.5 -35.5 -47.7002 -47.7002c-17.5996 -17.5996 10.7002 -45.7998 28.4004 -28.5996l47.6992 47.8994c18.2002 -18.1992 35.7002 -35.6992 47.7002 -47.8994c17.6006 -17.2002 46 10.7002 28.6006 28.5996l-47.7002 47.7002l-13 12.9004\r\n-c15.5 1.59961 39.0996 5.89941 56.2002 16.7998c20.3994 13.2998 29.2998 21 21.5 37z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"get-pocket\" unicode=\"&#xf265;\" \r\n-d=\"M407.6 384c22.7002 0 40.4004 -18.2002 40.4004 -40.5996v-135.2c0 -124.7 -99.7998 -224.2 -223.8 -224.2c-124.5 0 -224.2 99.5 -224.2 224.2v135.2c0 22.0996 18.5 40.5996 40.5996 40.5996h367zM245.6 115.5c111.9 107.5 114.801 105.4 114.801 123.2\r\n-c0 16.8994 -13.8008 30.7002 -30.7002 30.7002c-16.9004 0 -14.9004 -2.40039 -105.5 -89.3008c-89.1006 85.5 -88.2002 89.3008 -105.2 89.3008c-16.9004 0 -30.7002 -13.8008 -30.7002 -30.7002c0 -18.1006 1.2002 -14.2998 114.9 -123.2\r\n-c11 -11.0996 30 -11.7998 42.3994 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wikipedia-w\" unicode=\"&#xf266;\" horiz-adv-x=\"640\" \r\n-d=\"M640 396.8l-0.299805 -12.2002c-28.1006 -0.799805 -45 -15.7998 -55.7998 -40.2998c-25 -57.7998 -103.301 -240 -155.301 -358.6h-13.5996l-81.9004 193.1c-32.5 -63.5996 -68.2998 -130 -99.1992 -193.1c-0.300781 -0.299805 -15 0 -15 0.299805\r\n-c-46.9004 109.7 -96.1006 218.6 -143.101 328.6c-11.3994 26.7002 -49.3994 70 -75.5996 69.7002c0 3.10059 -0.299805 10 -0.299805 14.2002h161.899v-13.9004c-19.2002 -1.09961 -52.7998 -13.2998 -43.2998 -34.1992c21.9004 -49.7002 103.6 -240.301 125.6 -288.601\r\n-c15 29.7002 57.8008 109.2 75.3008 142.8c-13.9004 28.3008 -58.6006 133.9 -72.8008 160c-9.69922 17.8008 -36.0996 19.4004 -55.7998 19.7002v13.9004l142.5 -0.299805v-13.1006c-19.3994 -0.599609 -38.0996 -7.7998 -29.3994 -26.0996\r\n-c18.8994 -40 30.5996 -68.1006 48.0996 -104.7c5.59961 10.7998 34.7002 69.4004 48.0996 100.8c8.90039 20.6006 -3.89941 28.6006 -38.5996 29.4004c0.299805 3.59961 0 10.2998 0.299805 13.5996c44.4004 0.299805 111.101 0.299805 123.101 0.600586v-13.6006\r\n-c-22.5 -0.799805 -45.8008 -12.7998 -58.1006 -31.7002l-59.2002 -122.8c6.40039 -16.0996 63.3008 -142.8 69.2002 -156.7l122.4 282.601c-8.60059 23.0996 -36.4004 28.0996 -47.2002 28.2998v13.9004l127.8 -1.10059z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"safari\" unicode=\"&#xf267;\" horiz-adv-x=\"512\" \r\n-d=\"M236.9 191.2c0 9.09961 6.59961 17.7002 16.2998 17.7002c8.89941 0 17.3994 -6.40039 17.3994 -16.1006c0 -9.09961 -6.39941 -17.7002 -16.0996 -17.7002c-9 0 -17.5996 6.7002 -17.5996 16.1006zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248\r\n-s111 248 248 248s248 -111 248 -248zM477.4 192c0 122.3 -99.1006 221.4 -221.4 221.4s-221.4 -99.1006 -221.4 -221.4s99.1006 -221.4 221.4 -221.4s221.4 99.1006 221.4 221.4zM404.9 95.4004c0 -3.60059 13 -10.2002 16.2998 -12.2002\r\n-c-27.4004 -41.5 -69.7998 -71.4004 -117.9 -83.2998l-4.39941 18.5c-0.300781 2.5 -1.90039 2.7998 -4.2002 2.7998c-1.90039 0 -3 -2.7998 -2.7998 -4.2002l4.39941 -18.7998c-13.2998 -2.7998 -26.7998 -4.2002 -40.3994 -4.2002c-36.3008 0 -72 10.2002 -103 29.0996\r\n-c1.69922 2.80078 12.1992 18 12.1992 20.2002c0 1.90039 -1.69922 3.60059 -3.59961 3.60059c-3.90039 0 -12.2002 -16.6006 -14.7002 -19.9004c-41.7998 27.7002 -72 70.5996 -83.5996 119.6l19.0996 4.2002c2.2002 0.600586 2.7998 2.2002 2.7998 4.2002\r\n-c0 1.90039 -2.7998 3 -4.39941 2.7998l-18.7002 -4.2998c-2.5 12.7002 -3.90039 25.5 -3.90039 38.5c0 37.0996 10.5 73.5996 30.2002 104.9c2.7998 -1.7002 16.1006 -10.8008 18.2998 -10.8008c1.90039 0 3.60059 1.40039 3.60059 3.30078\r\n-c0 3.89941 -14.7002 11.2998 -18 13.5996c28.2002 41.2002 71.0996 70.9004 119.8 81.9004l4.2002 -18.5c0.599609 -2.2002 2.2002 -2.80078 4.2002 -2.80078s3 2.80078 2.7998 4.40039l-4.2002 18.2998c12.2002 2.2002 24.5996 3.60059 37.0996 3.60059\r\n-c37.1006 0 73.3008 -10.5 104.9 -30.2002c-1.90039 -2.7998 -10.7998 -15.7998 -10.7998 -18c0 -1.90039 1.39941 -3.60059 3.2998 -3.60059c3.90039 0 11.2998 14.4004 13.2998 17.7002c41 -27.7002 70.2998 -70 81.7002 -118.2l-15.5 -3.2998\r\n-c-2.5 -0.599609 -2.7998 -2.2002 -2.7998 -4.39941c0 -1.90039 2.7998 -3 4.2002 -2.80078l15.7998 3.60059c2.5 -12.7002 3.89941 -25.7002 3.89941 -38.7002c0 -36.2998 -10 -72 -28.7998 -102.7c-2.7998 1.40039 -14.3994 9.7002 -16.5996 9.7002\r\n-c-2.10059 0 -3.7998 -1.7002 -3.7998 -3.59961zM371.7 337.6c-13 -12.1992 -134.2 -123.699 -137.601 -129.5l-96.5996 -160.5c12.7002 11.9004 134.2 124 137.3 129.301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chrome\" unicode=\"&#xf268;\" horiz-adv-x=\"496\" \r\n-d=\"M131.5 230.5l-76.4004 117.4c47.6006 59.1992 119 91.7998 192 92.0996c42.3008 0.299805 85.5 -10.5 124.801 -33.2002c43.3994 -25.2002 76.3994 -61.3994 97.3994 -103l-205.3 10.7998c-58.0996 3.40039 -113.4 -29.2998 -132.5 -84.0996zM164.4 192\r\n-c0 46.2998 37.3994 83.5996 83.5996 83.5996s83.5996 -37.3994 83.5996 -83.5996s-37.3994 -83.5996 -83.5996 -83.5996s-83.5996 37.3994 -83.5996 83.5996zM479.3 281.2c43.5 -111.9 0 -241.9 -107.399 -303.9c-43.4004 -25.2002 -91.3008 -35.3994 -137.801 -32.8994\r\n-l112.101 172.399c31.8994 49 31.2998 112.9 -6.60059 157.2zM133.7 144.4c26.2998 -51.7002 81.8994 -83.3008 139.5 -72.5l-63.7002 -124.801c-118.7 18.2002 -209.5 120.9 -209.5 244.9c0 50.0996 14.9004 96.9004 40.4004 135.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"firefox\" unicode=\"&#xf269;\" horiz-adv-x=\"480\" \r\n-d=\"M478.1 212.7c1.30078 -7.10059 1.90039 -14.2998 1.90039 -21.6006v-2.7998c-1.40039 -34 -11.5996 -67 -29.5996 -95.8994c-1 -1.5 -1.80078 -2.90039 -2.7002 -4.30078c2.7002 -7.19922 2.59961 -15.0996 -0.400391 -22.1992\r\n-c-5 -19.4004 -16.5996 -36.4004 -32.8994 -48.1006c-10.8008 -8.7002 -22.7002 -16.2002 -35.3008 -22.0996l-1.89941 -0.900391l-1 -0.5c-1.7002 -0.700195 -3.2998 -1.39941 -4.90039 -2.09961c-2.39941 -5.10059 -5.7998 -9.60059 -9.89941 -13.2998\r\n-c-2.5 -3.10059 -30.1006 -35 -113.801 -35c-23.5996 0 -47.1992 3.5 -69.7998 10.2998c0.799805 -0.299805 1.60059 -0.700195 2.40039 -1c-2.60059 0.899414 -5.2002 1.7998 -7.7002 2.7002c-19.0996 5.89941 -37.2002 14.5996 -53.7998 25.7998\r\n-c-40.7002 24.7002 -72.9004 61.2002 -92.2998 104.7c-14.5 31.3994 -21.1006 65.7998 -19.4004 100.3c-2.7998 -8.2998 -5.2002 -16.7002 -7 -25.2998c0 29.1992 5.5 58.0996 16.2002 85.1992c-5.5 -7.89941 -10.2998 -16.2998 -14.2998 -25.0996\r\n-c5.69922 23.0996 14.6992 45.2002 26.7998 65.5996c3.7002 6.10059 7.89941 11.9004 12.7002 17.1006v0.200195c-0.100586 2.69922 0.0996094 5.5 0.5 8.2998c1.5 16.2998 5.69922 32.2002 12.3994 47.0996l0.299805 0.700195c0.100586 0.299805 0 -1 0 -1.7002\r\n-s-0.0996094 -1.2998 0 -1c0.600586 2 1.40039 4 2.30078 5.90039c1 2.09961 2.39941 4.09961 3.89941 5.7998c0.100586 0.0996094 0.200195 0.200195 0.299805 0.400391c0.100586 0.199219 -0.399414 -2 -0.5 -3.10059v-0.5c0.600586 1.2002 1.30078 2.40039 2.2002 4.5\r\n-c2.10059 5.90039 6 11 11.1006 14.5l0.199219 0.100586c-0.299805 -9 1.2002 -17.9004 4.40039 -26.2002v-0.100586c0.299805 -0.399414 0.5 1.30078 0.900391 1.30078c0.0996094 0 0.199219 -0.100586 0.199219 -0.200195\r\n-c0.900391 -1.7998 1.80078 -3.60059 2.7002 -5.2002c1.2998 -2.2002 2.5 -4.2002 3.7002 -6l0.400391 -0.200195l0.199219 0.100586c2.60059 -4.2002 5.90039 -7.80078 9.7002 -10.9004h-0.200195l0.200195 -0.0996094c18.2998 3.59961 37.2002 2 54.6006 -4.7002\r\n-l0.0996094 0.0996094c2.09961 2.60059 4.59961 4.90039 7.2998 6.90039c0 -0.900391 -0.0996094 -1.7998 -0.200195 -2.7002c4 5 9.10059 9 15 11.5c-0.399414 -0.700195 -0.5 -1.40039 -0.5 -2.2002c7.40039 4.2998 15.5 7.40039 23.9004 9\r\n-c1.09961 0 -3.5 -1.7998 -5.09961 -3.09961c3.69922 1.59961 7.69922 2.59961 11.6992 2.7998c6.60059 0.700195 14 -2.09961 12.6006 -2.7002c-2.7998 -1 -5.5 -2.2002 -8.2002 -3.5c-0.799805 -0.700195 3.2002 0.200195 2.40039 -0.5\r\n-c-14 -9.2002 -24.8008 -22.5996 -30.8008 -38.2998v-0.0996094c2.5 -11 11.4004 -19.3008 22.5 -21.1006c31.5 -3 37.5 -5.59961 38.4004 -9.09961v-1.5c-0.0996094 -1 -0.200195 -1.90039 -0.299805 -2.7998c-1.2002 -6.90039 -4.90039 -13.2002 -10.2002 -17.7002\r\n-c-1.40039 -1.2998 -2.90039 -2.5 -4.5 -3.5c-1.09961 -0.700195 -6.40039 -2.7998 -12.7998 -5.60059c-7.90039 -3.19922 -15.5 -7.09961 -22.7002 -11.5996c-1.2998 -0.799805 -2.40039 -1.7002 -3.40039 -2.7002c-0.399414 -0.399414 -1.19922 -1.5 -1.19922 -1.5\r\n-v-0.0996094c0.5 -1.2002 1 -2.40039 1.19922 -3.7002c-1.39941 1.7002 -2.69922 1.09961 -1.89941 -0.5c0.899414 -2.5 1.2998 -5.2002 1.09961 -7.7998c0.200195 -4.7998 -0.700195 -9.60059 -2.59961 -14c-2.10059 1.5 -4.2998 2.89941 -6.60059 4.09961h-0.199219\r\n-c2.5 -1.59961 4.2998 -3.89941 5.39941 -6.59961c0.700195 -2.2002 -0.299805 -2.7002 -0.299805 -2.7002c-1.40039 2 -3.09961 3.59961 -5.2002 4.7002c-3.09961 1.7998 -8.7998 4.7002 -11.3994 5.7998c-0.300781 -0.200195 -0.5 -0.0996094 -0.800781 -0.200195\r\n-c0.800781 -1.2998 2.10059 -3.7998 2.10059 -3.7998s-1.7998 1.09961 -4.7998 2.59961c-3.90039 -1.7998 -7.2002 -4.89941 -9.30078 -8.69922c-3.5 -7.7002 -3.09961 -16.7002 1 -24.1006c4 -6 9.10059 -11.2002 15 -15.2002\r\n-c0.400391 -0.299805 -3.39941 1.10059 -3.09961 0.800781c4.59961 -3.2002 9.40039 -6.10059 14.4004 -8.60059c1.5 -1 -5 1.2002 -3.40039 0.299805c1.40039 -0.899414 2.7998 -1.69922 4.2998 -2.5c22.9004 -12.0996 38.9004 0.400391 56.4004 2.90039\r\n-c16.7998 3 33.7998 -3.59961 44.2002 -17c6 -8.5 -0.600586 -16.7002 -9 -14h-0.200195c-8.60059 2.90039 -19.1006 -4.2998 -36.6006 -14c-17.2998 -8.2998 -36.8994 -10.5996 -55.5996 -6.59961c-4.7998 0.899414 -9.40039 2.09961 -14 3.69922l-2 0.700195\r\n-l0.200195 -0.299805c8.7998 -12.2002 19.8994 -22.5 32.7998 -30.2998c8.7002 -4.40039 17.9004 -7.5 27.4004 -9.2998c8 -1.90039 16.1992 -2.80078 24.5 -2.80078c61 -0.0996094 110.6 49.4004 110.6 110.4c0.0996094 15.9004 -3.09961 31.7998 -9.2998 46.5\r\n-c20.7002 -12.2998 37.5996 -30.2002 48.7998 -51.5c-13.9004 40.5996 -40.2998 56.4004 -64.7002 76.5996c-19.5996 14.8008 -34.7002 34.9004 -43.3994 57.9004c-25.2002 67.7998 33.0996 132.9 33.0996 132.9s-3.59961 -15.1006 27.4004 -44.3008\r\n-c6.39941 -5.89941 16.7998 -14.5 28.8994 -26.6992c1.7002 9.2998 4.2002 18.3994 7.40039 27.2998c2.5 -14.7002 7.7998 -28.7998 15.3994 -41.6006c11.7002 -16.6992 21.9004 -25.5996 30.7002 -40c1.90039 -2.5 3.7998 -5.19922 5.60059 -7.89941\r\n-c5.09961 -7.2002 9.5 -14.7998 13.2998 -22.7998c6 -12 10.7998 -24.5 14.5 -37.4004c3 -10.4004 4.89941 -20.9004 5.7998 -31.5996c2.90039 3.89941 4.7002 5.89941 4.7002 5.89941s0.700195 -2.59961 1.39941 -7.09961zM179.1 310.3\r\n-c-0.5 -1.2002 -0.899414 -2.2998 -1.2998 -3.5c0.400391 1.2002 0.900391 2.40039 1.2998 3.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"opera\" unicode=\"&#xf26a;\" horiz-adv-x=\"496\" \r\n-d=\"M313.9 415.3c-170.2 0 -252.601 -223.8 -147.5 -355.1c36.5 -45.4004 88.5996 -75.6006 147.5 -75.6006c36.2998 0 70.2998 11.1006 99.3994 30.4004c-43.7998 -39.2002 -101.899 -63 -165.3 -63c-3.90039 0 -8 0 -11.9004 0.299805\r\n-c-131.5 6.10059 -236.1 114.601 -236.1 247.7c0 137 111 248 248 248h0.799805c63.1006 -0.299805 120.7 -24.0996 164.4 -63.0996c-29 19.3994 -63.1006 30.3994 -99.2998 30.3994zM415.7 17.5996c-40.9004 -24.6992 -90.7002 -23.5996 -132 5.80078\r\n-c56.2002 20.5 97.7002 91.5996 97.7002 176.6c0 84.7002 -41.2002 155.8 -97.4004 176.6c41.7998 29.2002 91.2002 30.3008 132.9 5c105.899 -98.6992 105.5 -265.699 -1.2002 -364z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"internet-explorer\" unicode=\"&#xf26b;\" horiz-adv-x=\"512\" \r\n-d=\"M483.049 288.294c25.1963 -45.4473 33.2578 -97.5811 26.8516 -141.162h-328.792c0 -100.432 144.31 -136.029 196.818 -47.4355h120.833c-32.5645 -91.7285 -119.689 -146.022 -216.813 -146.022c-35.1367 0 -70.2725 0.143555 -101.695 15.5732\r\n-c-87.3975 -44.4941 -180.251 -56.5693 -180.251 42.0059c0 45.8066 23.2461 107.096 43.9922 145.022c35.1357 63.7227 81.4121 124.875 135.687 173.168c-43.7061 -18.8604 -91.125 -66.2959 -121.977 -101.158c25.877 112.787 129.466 193.638 237.098 186.457\r\n-c130.032 59.7939 209.673 34.1445 209.673 -38.5771c0 -27.4326 -10.5684 -63.2959 -21.4238 -87.8711zM64.5586 101.123c-73.001 -152.4 11.5254 -172.244 100.267 -123.304c-46.5635 27.4326 -82.5557 72.1533 -100.267 123.304zM180.536 209.996h207.961\r\n-c-2 55.1514 -50.5635 94.8711 -103.981 94.8711c-53.7041 0 -101.979 -39.7197 -103.979 -94.8711zM365.072 397.596c46.2764 -18.002 85.9824 -57.2939 112.263 -99.5859c7.1416 18.8604 14.5693 47.8643 14.5693 67.8672c0 32.0049 -22.8525 53.7217 -54.2744 53.7217\r\n-c-23.9951 0 -51.1328 -11.7158 -72.5576 -22.0029z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"contao\" unicode=\"&#xf26d;\" horiz-adv-x=\"512\" \r\n-d=\"M45.4004 143c14.3994 -67.0996 26.3994 -129 68.1992 -175h-79.5996c-18.7002 0 -34 15.2002 -34 34v380c0 18.7002 15.2002 34 34 34h57.7002c-13.7998 -12.5996 -26.1006 -27.2002 -36.9004 -43.5996c-45.3994 -70 -27 -146.801 -9.39941 -229.4zM478 416\r\n-c18.7998 0 34 -15.2002 34 -34v-380.1c0 -18.8008 -15.2998 -34 -34 -34h-52.0996c38.6992 38.3994 60.5996 92.0996 57.3994 163.6l-137.399 -29.5996c-1.7002 -32.5 -12.9004 -63.8008 -57.4004 -73.2002c-24.9004 -5.2998 -45.4004 0.599609 -58.2998 11.7002\r\n-c-15.7998 13.5 -28.4004 31 -49.5 131.199c-21.4004 100.5 -17 121.601 -8.2002 140.301c7.2998 15.2998 23.7002 29.2998 48.2998 34.5996c44.7998 9.40039 67.7002 -14.9004 82.6006 -43.9004l137.1 29.3008c-13.5 34.5996 -31.2998 62.6992 -52.7002 84.0996h90.2002z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"500px\" unicode=\"&#xf26e;\" \r\n-d=\"M103.3 103.7c-6.5 14.2002 -6.89941 18.2998 7.40039 23.0996c25.5996 8 8 -9.2002 43.2002 -49.2002h0.299805v93.9004c1.2002 50.2002 44 92.2002 97.7002 92.2002c53.8994 0 97.6992 -43.5 97.6992 -96.7998c0 -63.4004 -60.7998 -113.2 -128.5 -93.3008\r\n-c-10.5 4.2002 -2.09961 31.7002 8.5 28.6006c53 0 89.4004 10.0996 89.4004 64.3994c0 61 -77.0996 89.6006 -116.9 44.6006c-23.5 -26.4004 -17.5996 -42.1006 -17.5996 -157.601c50.7002 -31 118.3 -22 160.4 20.1006c24.7998 24.7998 38.5 58 38.5 93\r\n-c0 35.2002 -13.8008 68.2002 -38.8008 93.2998c-24.7998 24.7998 -57.7998 38.5 -93.2998 38.5s-68.7998 -13.7998 -93.5 -38.5c-0.299805 -0.299805 -16 -16.5 -21.2002 -23.9004l-0.5 -0.599609c-3.2998 -4.7002 -6.2998 -9.09961 -20.0996 -6.09961\r\n-c-6.90039 1.69922 -14.2998 5.7998 -14.2998 11.7998v186.8c0 5 3.89941 10.5 10.5 10.5h241.3c8.2998 0 8.2998 -11.5996 8.2998 -15.0996c0 -3.90039 0 -15.1006 -8.2998 -15.1006h-223.2v-132.899h0.299805c104.2 109.8 282.801 36 282.801 -108.9\r\n-c0 -178.1 -244.801 -220.3 -310.101 -62.7998zM166.6 364.5c3.80078 18.7998 145.101 50.7998 238.301 -38.2002c8.5 -7.5 -9.5 -22.7998 -14.3008 -22.7998c-6.59961 0 -84.5996 87.9004 -209.399 40.4004c-10 -3.90039 -15.1006 16.3994 -14.6006 20.5996zM393 33.2998\r\n-c8.09961 8 27.5996 -12.5996 20.7002 -20.3994c-135.601 -135.601 -357.601 -52.1006 -381.601 121.3c-1.5 10.7002 28.9004 15.5 28.9004 3.2998c33 -165 222 -214.1 332 -104.2zM213.6 141.4c0 3.39941 2.30078 4.69922 20.4004 22.5996l-18.2002 18.2002\r\n-c-5.59961 5.59961 7.40039 17.2998 12.4004 17.2998c3.09961 0 2.89941 -0.700195 21.5 -19.5l17.8994 17.9004c6.10059 6.09961 22.5 -8.90039 16.2002 -15.7002l-18.2002 -18.2002l17.3008 -17.2998c7.7998 -7.7998 -5.30078 -18.2002 -10.7002 -18.2002\r\n-c-3.2002 0 -2.7002 0.200195 -22.2998 19.5c-19.7002 -19.7002 -18.5 -19.5 -22.3008 -19.5c-2.39941 0 -5.5 1.40039 -8.5 4.40039c-1.19922 1.19922 -5.5 4.5 -5.5 8.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"amazon\" unicode=\"&#xf270;\" \r\n-d=\"M257.2 285.3c0 39.2998 5.2002 69.2002 -35.5 69.1006c0 0 -37.9004 0 -54.2002 -49.5l-73.5 6.7998c0 49.2998 46.7002 104.3 134.7 104.3c87.7998 0 112.3 -57 112.3 -82.2998v-147.101c0 -27.5 32.2998 -52.7998 32.2998 -52.7998l-56.7998 -56\r\n-c-9.90039 9.2998 -38.7998 36.6006 -45.2998 46.7998c-45.2002 -70.7998 -183.5 -66.2998 -183.5 43.2002c0 102 120.8 115.7 169.5 117.5zM257.2 198.5v40.5996c-33.7002 -1.09961 -84.2002 -10.5996 -84.2002 -57.7998c0 -50.7998 84.2002 -62.7998 84.2002 17.2002z\r\n-M393.2 35c-7.7002 -10 -70 -67 -174.5 -67s-184.5 71.5 -209 101c-6.7998 7.7002 1 11.2998 5.5 8.2998c73.2998 -44.5 187.8 -117.8 372.5 -30.2998c7.5 3.7002 13.2998 -2 5.5 -12zM433 32.7998c-6.5 -15.7998 -16 -26.7998 -21.2002 -31\r\n-c-5.5 -4.5 -9.5 -2.7002 -6.5 3.7998s19.2998 46.5 12.7002 55c-6.5 8.30078 -37 4.30078 -48 3.2002c-10.7998 -1 -13 -2 -14 0.299805c-2.2998 5.7002 21.7002 15.5 37.5 17.5c15.7002 1.80078 41 0.800781 46 -5.69922c3.7002 -5.10059 0 -27.1006 -6.5 -43.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"houzz\" unicode=\"&#xf27c;\" \r\n-d=\"M275.9 117.3h-104.601v-149.3h-154.3v448h109.5v-104.5l305.1 -85.5996v-257.9h-155.699v149.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vimeo-v\" unicode=\"&#xf27d;\" \r\n-d=\"M447.8 294.4c-2 -43.6006 -32.3994 -103.301 -91.3994 -179.101c-60.9004 -79.2002 -112.4 -118.8 -154.601 -118.8c-26.0996 0 -48.2002 24.0996 -66.2998 72.2998c-35.2002 129.2 -50.2002 204.9 -79.2998 204.9c-3.40039 0 -15.1006 -7.10059 -35.2002 -21.1006\r\n-l-21 27.2002c51.5996 45.2998 100.9 95.7002 131.8 98.5c34.9004 3.40039 56.2998 -20.5 64.4004 -71.5c28.7002 -181.5 41.3994 -208.899 93.5996 -126.7c18.7002 29.6006 28.7998 52.1006 30.2002 67.6006c4.7998 45.8994 -35.7998 42.7998 -63.2998 31\r\n-c22 72.0996 64.0996 107.1 126.2 105.1c45.7998 -1.2002 67.5 -31.0996 64.8994 -89.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"black-tie\" unicode=\"&#xf27e;\" \r\n-d=\"M0 416h448v-448h-448v448zM316.5 90.7998l-64.5 184l64.4004 86.6006h-184.9l64.5 -86.6006l-64.5 -184l92.5 -88.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fonticons\" unicode=\"&#xf280;\" \r\n-d=\"M0 416h448v-448h-448v448zM187 275.1c11.9004 0 16.5996 -4.2998 16.2998 -23l50.7002 6.10059c0 44.5996 -30.5996 52.7998 -64.7002 52.7998c-50.7998 0 -77.2998 -20.4004 -77.2998 -70v-21h-28v-37.4004h22.2002c2.89941 0 5.7998 0 5.7998 -2.2998v-111.399\r\n-c0 -5.60059 -1.5 -7.30078 -6.7002 -7.90039l-21.2998 -2v-25.7002h130.7v25.1006l-43.5 4.09961c-5.2002 0.599609 -3.2002 1.5 -3.2002 7.2998v112.9h55.7002l11.0996 37.2998h-67.3994c-2.90039 0 0.599609 2 0.599609 4.40039v23.2998\r\n-c0 17.5 0.599609 27.3994 19 27.3994zM261.3 33.2998h102.601v25.1006l-15.7002 2.59961c-5.5 0.900391 -2.90039 1.5 -2.90039 7.2998v151.7h-80.2002l-6.69922 -29.5l24.1992 -6.40039c3.80078 -1.19922 6.7002 -3.7998 6.7002 -7.89941v-107.9\r\n-c0 -5.59961 -2.39941 -6.7002 -7.59961 -7.2998l-20.4004 -2.59961v-25.1006zM342.1 288.8l21.9004 24.2002l-3.5 9.59961h-27.7002l-15.5 28h-9.2998l-15.5 -28h-27.7002l-3.5 -9.59961l21.7998 -24.2002l-9 -33.2002l7.30078 -7.2998l31.1992 16.6006l31.2002 -16.6006\r\n-l7.2998 7.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reddit-alien\" unicode=\"&#xf281;\" horiz-adv-x=\"512\" \r\n-d=\"M440.3 244.5c55.2998 0 73.7002 -74.0996 23.7998 -99.7002c2.2002 -7.89941 3.10059 -16.7002 3.10059 -25.0996c0 -83.7998 -94.4004 -151.7 -210.8 -151.7c-115.9 0 -210.301 67.9004 -210.301 151.7c0 8.39941 0.800781 16.7998 2.60059 24.7002\r\n-c-50.9004 25.5 -32.7002 100.1 22.8994 100.1c15 0 28.7002 -6.2002 38.4004 -16.2998c35.7998 24.7002 83.4004 40.5996 136.3 42.7998l30.4004 137.6c1.2998 4.90039 6.09961 8.40039 11 7.10059l97.3994 -21.6006c6.60059 12.7002 19.9004 22 35.3008 22\r\n-c22.0996 0 39.6992 -18.0996 39.6992 -39.6992c0 -21.6006 -17.6992 -39.7002 -39.6992 -39.7002c-21.6006 0 -39.2002 17.5996 -39.2002 39.2002l-88.2002 19.7998l-27.7002 -124.8c53.2998 -1.7002 101.4 -17.6006 137.101 -42.3008\r\n-c9.69922 9.7002 22.8994 15.9004 37.8994 15.9004zM129.4 139.1c0 -21.5996 17.6992 -39.2998 39.6992 -39.1992c21.6006 0 39.2002 17.5996 39.2002 39.1992c0 22.1006 -17.5996 39.7002 -39.2002 39.7002c-22.0996 0 -39.6992 -17.7002 -39.6992 -39.7002zM343.7 45.5996\r\n-c4 3.5 4 9.7002 -0.100586 13.7002c-3.5 3.5 -9.69922 3.5 -13.1992 0c-29 -29 -121.2 -28.5 -149 0c-3.5 3.5 -9.7002 3.5 -13.2002 0c-4 -4 -4 -10.2002 0 -13.7002c36.3994 -36.3994 139.1 -36.3994 175.5 0zM342.9 99.7998c22 0 39.5996 17.7002 39.6992 39.2002\r\n-c0 22.0996 -17.6992 39.7002 -39.6992 39.7002c-21.6006 0 -39.2002 -17.7002 -39.2002 -39.7002c0 -21.5996 17.5996 -39.2002 39.2002 -39.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"edge\" unicode=\"&#xf282;\" horiz-adv-x=\"512\" \r\n-d=\"M25.7139 219.837c0.111328 0.162109 0.230469 0.323242 0.341797 0.485352c-0.0205078 -0.162109 -0.0449219 -0.323242 -0.0644531 -0.485352h-0.277344zM486.286 204.329l0.000976562 -52.0645h-314.073c1.38379 -128.497 191.392 -124.065 272.255 -67.5713v-104.404\r\n-c-47.3555 -28.5244 -156.774 -53.1709 -240.132 -21.3242c-70.6191 27.1406 -119.913 100.528 -120.743 171.977c-1.10742 92.2188 45.6943 153.422 120.742 188.314c-15.7852 -19.9395 -27.9697 -41.54 -34.3389 -78.9258h175.853\r\n-c10.2471 104.957 -99.4189 104.957 -99.4189 104.957c-103.302 -3.58984 -177.945 -63.6543 -220.375 -124.966c14.5615 114.465 92.9062 219.955 232.837 219.678c85.0195 0 157.605 -39.8779 198.593 -113.265c21.0469 -37.9404 28.8008 -78.373 28.8008 -122.405z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"codiepie\" unicode=\"&#xf284;\" horiz-adv-x=\"472\" \r\n-d=\"M422.5 245.1c30.7002 0 33.5 -53.0996 -0.299805 -53.0996h-10.7998v-44.2998h-26.6006v97.3994h37.7002zM472 95.4004c-42.0996 -91.9004 -121.6 -151.4 -224 -151.4c-137 0 -248 111 -248 248s111 248 248 248c97.4004 0 172.8 -53.7002 218.2 -138.4l-186 -108.8z\r\n-M433.5 82.9004l-60.2998 30.6992c-27.1006 -44.2998 -70.4004 -71.3994 -122.4 -71.3994c-82.5 0 -149.2 66.7002 -149.2 148.899c0 82.5 66.7002 149.2 149.2 149.2c48.4004 0 88.9004 -23.5 116.9 -63.3994l59.5 34.5996c-40.7002 62.5996 -104.7 100 -179.2 100\r\n-c-121.2 0 -219.5 -98.2998 -219.5 -219.5s98.2998 -219.5 219.5 -219.5c78.5996 0 146.5 42.0996 185.5 110.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"modx\" unicode=\"&#xf285;\" \r\n-d=\"M356 206.2l36.7002 -23.7002v-214.5l-133 83.7998zM440 373l-83.2002 -134.3l-153.5 96.5l23 37.7998h213.7zM351 230.2l-249.8 -57.7002l-46 29v214.5zM97 153.8l249.7 57.7002l-125 -200.5h-213.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fort-awesome\" unicode=\"&#xf286;\" horiz-adv-x=\"512\" \r\n-d=\"M489.2 160.1c2.59961 0 4.59961 -2 4.5 -4.59961v-219.5h-182.9v96c0 72.5996 -109.7 72.5996 -109.7 0v-96h-182.899v219.5c0 2.59961 2 4.59961 4.59961 4.59961h27.4004c2.59961 0 4.59961 -2 4.59961 -4.59961v-32h36.6006v178.3\r\n-c0 2.60059 2 4.60059 4.59961 4.60059h27.4004c2.59961 0 4.59961 -2 4.59961 -4.60059v-32h36.2998v32c0 2.60059 2 4.60059 4.60059 4.60059h27.3994c2.60059 0 4.60059 -2 4.60059 -4.60059v-32h36.5996v32c0 6 8 4.60059 11.7002 4.60059v111.699\r\n-c-5.40039 2.60059 -9.10059 8.30078 -9.10059 14.3008c0 20.7998 31.4004 20.6992 31.4004 0c0 -6 -3.7002 -11.7002 -9.09961 -14.3008v-4.89941c7.69922 1.7998 15.6992 2.89941 23.6992 2.89941c11.7002 0 22.9004 -4.2998 32.6006 -4.2998\r\n-c8.89941 0 18.8994 4.2998 24 4.2998c2.59961 0 4.59961 -2 4.59961 -4.59961v-60c0 -6.90039 -23.0996 -8 -27.7002 -8c-10.5 0 -20.5 4.2998 -31.3994 4.2998c-8.60059 0 -17.4004 -1.39941 -25.7002 -3.39941v-38c3.7002 0 11.7002 1.39941 11.7002 -4.60059v-32h36.5996\r\n-v32c0 2.60059 2 4.60059 4.60059 4.60059h27.3994c2.60059 0 4.60059 -2 4.60059 -4.60059v-32h36.5996v32c0 2.60059 2 4.60059 4.59961 4.60059h27.4004c2.59961 0 4.59961 -2 4.59961 -4.60059v-178.3h36.6006v32c0 2.59961 2 4.59961 4.59961 4.59961h27.4004z\r\n-M201.1 164.6v64c0 2.60059 -2 4.60059 -4.59961 4.60059h-27.4004c-2.59961 0 -4.59961 -2 -4.59961 -4.60059v-64c0 -2.59961 2 -4.59961 4.59961 -4.59961h27.4004c2.59961 0 4.59961 2 4.59961 4.59961zM347.5 164.6v64c0 2.60059 -2 4.60059 -4.59961 4.60059h-27.4004\r\n-c-2.59961 0 -4.59961 -2 -4.59961 -4.60059v-64c0 -2.59961 2 -4.59961 4.59961 -4.59961h27.4004c2.59961 0 4.59961 2 4.59961 4.59961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"usb\" unicode=\"&#xf287;\" horiz-adv-x=\"640\" \r\n-d=\"M641.5 192c0 -3.09961 -1.7002 -6.09961 -4.5 -7.5l-89.0996 -53.5c-1.40039 -0.799805 -2.80078 -1.40039 -4.5 -1.40039c-1.40039 0 -3.10059 0.300781 -4.5 1.10059c-2.80078 1.7002 -4.5 4.5 -4.5 7.7998v35.5996h-238.7\r\n-c25.2998 -39.5996 40.5 -106.899 69.5996 -106.899h26.7002v26.7998c0 5 3.90039 8.90039 8.90039 8.90039h89.0996c5 0 8.90039 -3.90039 8.90039 -8.90039v-89.0996c0 -5 -3.90039 -8.90039 -8.90039 -8.90039h-89.0996c-5 0 -8.90039 3.90039 -8.90039 8.90039v26.6992\r\n-h-26.7002c-75.3994 0 -81.0996 142.5 -124.7 142.5h-100.3c-8.09961 -30.5996 -35.8994 -53.5 -69 -53.5c-39.2998 0.100586 -71.2998 32.1006 -71.2998 71.4004s32 71.2998 71.2998 71.2998c33.1006 0 61 -22.7998 69 -53.5c39.1006 0 43.9004 -9.5 74.6006 60.4004\r\n-c40.0996 89.0996 58.0996 82.0996 108.899 82.0996c7.5 20.9004 27 35.6006 50.4004 35.6006c29.5 0 53.5 -23.9004 53.5 -53.5c0 -29.6006 -23.9004 -53.5 -53.5 -53.5c-23.4004 0 -42.9004 14.7998 -50.4004 35.5996h-29.7998\r\n-c-29.0996 0 -44.2998 -67.4004 -69.5996 -106.9h310.1v35.6006c0 3.2998 1.7002 6.09961 4.5 7.7998s6.40039 1.40039 8.90039 -0.299805l89.0996 -53.5c2.7998 -1.10059 4.5 -4.10059 4.5 -7.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"product-hunt\" unicode=\"&#xf288;\" horiz-adv-x=\"512\" \r\n-d=\"M326.3 229.2c0 -20.5 -16.7002 -37.2002 -37.2002 -37.2002h-70.2998v74.4004h70.2998c20.5 0 37.2002 -16.7002 37.2002 -37.2002zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM375.9 229.2\r\n-c0 47.8994 -38.9004 86.7998 -86.8008 86.7998h-119.899v-248h49.5996v74.4004h70.2998c47.9004 0 86.8008 38.8994 86.8008 86.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mixcloud\" unicode=\"&#xf289;\" horiz-adv-x=\"640\" \r\n-d=\"M424.43 228.271c42.3623 -9.1377 74.4805 -47.0693 74.4805 -92.2002c0 -52.3311 -42.6406 -94.6934 -94.9688 -94.6934h-289.614c-62.5752 0 -113.243 50.668 -113.243 112.966c0 56.7598 42.085 103.554 96.6299 111.582\r\n-c22.9814 67.5586 86.9395 114.074 159.205 114.074c87.2158 0 159.205 -66.7266 167.511 -151.729zM403.941 83.7412c29.0713 0 52.6064 23.5352 52.6064 52.3301c0 22.1494 -14.1211 40.9766 -33.502 48.4531c-1.38477 -8.58301 -3.59961 -17.166 -6.36914 -25.4727\r\n-c-8.01367 -25.6484 -49.0898 -14.2266 -40.1465 13.29c4.15332 12.7373 6.36914 26.0264 6.36914 39.5938c0 69.2197 -56.4834 125.702 -125.979 125.702c-49.8379 0 -94.6934 -29.626 -114.628 -73.9258c19.3809 -4.98438 37.3779 -14.9512 52.0527 -29.3486\r\n-c19.9531 -19.9531 -10.2168 -50.1436 -30.1797 -30.1807c-13.29 13.291 -31.0107 20.7666 -49.8379 20.7666c-39.04 0 -70.8809 -31.5645 -70.8809 -70.6045s31.8408 -70.6035 70.8809 -70.6035h289.614zM639.01 136.071c0 -44.0244 -12.7363 -86.3867 -37.1016 -122.657\r\n-c-4.15332 -6.0918 -10.7979 -9.41406 -17.7197 -9.41406c-16.3174 0 -27.1279 18.8262 -17.4434 32.9492c19.3809 29.3486 29.9033 63.6816 29.9033 99.1221c0 35.4395 -10.5215 69.7725 -29.9033 98.8447c-15.6553 22.8311 19.3613 47.2402 35.1631 23.5342\r\n-c24.3662 -35.9932 37.1016 -78.3564 37.1016 -122.379zM568.13 136.071c0 -31.5654 -9.13672 -62.0215 -26.8564 -88.3252c-4.15332 -6.09082 -10.7988 -9.13574 -17.7207 -9.13574c-17.2012 0 -27.0215 18.9785 -17.4424 32.9473\r\n-c13.0127 19.1045 19.6572 41.2559 19.6572 64.5137c0 22.9805 -6.64453 45.4072 -19.6572 64.5117c-15.7617 22.9863 19.0078 47.0947 35.1631 23.5352c17.7188 -26.0264 26.8564 -56.4834 26.8564 -88.0469z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"scribd\" unicode=\"&#xf28a;\" horiz-adv-x=\"384\" \r\n-d=\"M42.2998 195.3c-16.0996 19 -24.7002 45.9004 -24.7998 79.9004c0 100.399 75.2002 153.1 167.2 153.1c98.5996 1.60059 156.8 -49 184.3 -70.5996l-50.5 -72.1006l-37.2998 24.6006l26.8994 38.5996c-36.5 24 -79.3994 36.5 -123 35.7998\r\n-c-50.6992 0.800781 -111.699 -27.1992 -111.699 -76.1992c0 -18.7002 11.1992 -20.7002 28.5996 -15.6006c23.2998 5.2998 41.9004 -0.599609 55.7998 -14c26.4004 -24.2998 23.2002 -67.5996 -0.700195 -91.8994c-29.1992 -29.5 -85.1992 -27.3008 -114.8 8.39941z\r\n-M360 189.4c33.9004 -40.4004 36.7998 -138.2 -20.2998 -189.601c-39.2002 -33.5996 -82.2002 -44.0996 -133.601 -44.0996c-70.2998 -0.299805 -138.199 25.3994 -190.699 72.2002l-15.4004 13.7998l60.7998 71.7998l35.6006 -27.4004l-33.7002 -39.3994\r\n-c41.7002 -30.9004 92.2002 -47.5 144.1 -47.2998c61.9004 0 104.7 23.5 121.4 64.3994c0.899414 4.2002 1.39941 8.40039 1.39941 12.7002c0 18.7002 -11.1992 20.7002 -28.5996 15.5996c-23.2998 -5.2998 -42.2002 0.5 -56.2998 14.4004\r\n-c-12.4004 11.2998 -19.1006 27.5 -18.4004 44.2998c-0.599609 39.2002 32.4004 69.2002 70.5 67.2002c24.2998 0.799805 47.7002 -9.7998 63.2002 -28.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bluetooth\" unicode=\"&#xf293;\" \r\n-d=\"M292.6 276.9l-42.8994 -42.9004l-0.299805 86zM249.4 57.0996l0.199219 86l42.9004 -42.8994zM416 188.6c0 -205.6 -71.9004 -252.6 -185.1 -252.6c-113.2 0 -198.9 47 -198.9 252.6c0 205.601 83.4004 259.4 196.6 259.4c113.2 0 187.4 -53.9004 187.4 -259.4z\r\n-M257.5 188.6l79.4004 88.6006l-125.101 134.3v-176.9l-73.7998 73.8008l-27 -26.9004l92.7002 -93l-92.7002 -93l26.9004 -26.9004l73.7998 73.8008l2.2998 -170l127.4 127.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bluetooth-b\" unicode=\"&#xf294;\" horiz-adv-x=\"320\" \r\n-d=\"M196.48 187.977l97.9111 -103.333l-148.552 -148.644l-2.71484 198.284l-86.1113 -86.1113l-31.4053 31.4053l108.061 108.398l-108.061 108.399l31.4053 31.4053l86.1113 -86.1113v206.33l145.981 -156.69zM237.34 290.973l-50.3145 50.3174l0.337891 -100.295z\r\n-M187.363 134.96l-0.337891 -100.294l50.3145 50.3164z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gitlab\" unicode=\"&#xf296;\" horiz-adv-x=\"512\" \r\n-d=\"M105.2 423.1c0 0 56.5 -174.8 56.5996 -174.8h-132l56.5 174.8c3.2002 8.90039 15.7998 8.90039 18.9004 0zM0.900391 160.3l28.7998 88l226.2 -294l-247.9 184c-6.7998 5.10059 -9.7002 14 -7.09961 22zM161.7 248.3h188.6l-94.2998 -294zM511.1 160.3\r\n-c2.5 -8 -0.299805 -16.8994 -7.19922 -22l-247.9 -184l226.3 294zM425.7 423.1l56.5 -174.8h-132l56.5996 174.8c3.2002 8.90039 15.7998 8.90039 18.9004 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wpbeginner\" unicode=\"&#xf297;\" horiz-adv-x=\"512\" \r\n-d=\"M462.799 125.626c56.2109 -64.3076 4.16211 -157.626 -91.8545 -157.626c-39.6025 0 -78.8242 17.6865 -100.143 50.04c-6.88672 -0.356445 -22.7021 -0.356445 -29.5898 0c-21.3643 -32.4209 -60.624 -50.04 -100.143 -50.04\r\n-c-95.4902 0 -148.349 92.9961 -91.8555 157.626c-79.1387 131.851 31.2646 290.374 206.792 290.374c175.632 0 285.87 -158.626 206.793 -290.374zM123.152 208.598h41.5283v58.0752h-41.5283v-58.0752zM340.332 122.526v23.8389\r\n-c-60.5059 -20.915 -132.355 -9.19824 -187.589 33.9707l0.246094 -24.8965c51.1006 -46.3672 131.746 -57.875 187.343 -32.9131zM189.579 208.598h166.058v58.0752h-166.058v-58.0752z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wpforms\" unicode=\"&#xf298;\" \r\n-d=\"M448 372.8v-361.7c0 -24.2998 -19 -43.1992 -43.2002 -43.1992h-361.6c-23.9004 0.0996094 -43.2002 18.6992 -43.2002 43.2998v361.6c0 24.1006 18.7998 43.2002 43.2002 43.2002h361.7c24 0 43.0996 -18.7998 43.0996 -43.2002zM410.7 11.2002v361.6\r\n-c0 3 -2.60059 5.7998 -5.7998 5.7998h-9.30078l-110.3 -74.5996l-61.2998 49.9004l-61.2002 -49.9004l-110.3 74.7002h-9.2998c-3.2002 0 -5.7998 -2.7998 -5.7998 -5.7998v-361.7c0 -3 2.59961 -5.7998 5.7998 -5.7998h361.7\r\n-c3.19922 -0.100586 5.7998 2.69922 5.7998 5.7998zM150.2 262v-37h-73.5v37h73.5zM150.2 187.6v-37.2998h-73.5v37.2998h73.5zM161.3 334.9l54 43.6992h-118.5zM371.3 262v-37h-196v37h196zM371.3 187.6v-37.2998h-196v37.2998h196zM286.7 334.9l64.5 43.6992h-118.4z\r\n-M371.3 113v-37.2998h-99.3994v37.2998h99.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envira\" unicode=\"&#xf299;\" \r\n-d=\"M0 416c477.6 0 366.6 -317.3 367.1 -366.3l80.9004 -81.7002h-26l-70.4004 71.2002c-39 -4.2002 -124.399 -34.5 -214.399 37c-90.2002 71.5 -85.2002 157.1 -137.2 339.8zM79.7002 370c-49.7002 23.5 -5.2002 -9.2002 -5.2002 -9.2002\r\n-c45.2002 -31.2002 66 -73.7002 90.2002 -119.899c31.5 -60.2002 79 -139.7 144.2 -167.7c65 -28 34.1992 -12.5 6 8.5c-28.2002 21.2002 -68.2002 87 -91 130.2c-31.7002 60 -61 118.6 -144.2 158.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glide\" unicode=\"&#xf2a5;\" \r\n-d=\"M252.8 299.4c0 -8.80078 -1.59961 -17.7002 -3.39941 -26.4004c-5.80078 -27.7998 -11.6006 -55.7998 -17.3008 -83.5996c-1.39941 -6.30078 -8.2998 -4.90039 -13.6992 -4.90039c-23.8008 0 -30.5 26 -30.5 45.5c0 29.2998 11.1992 68.0996 38.5 83.0996\r\n-c4.2998 2.5 9.19922 4.2002 14.0996 4.2002c11.4004 0 12.2998 -8.2998 12.2998 -17.8994zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM384 181c0 5.09961 -20.7998 37.7002 -25.5 39.5\r\n-c-2.2002 0.900391 -7.2002 2.2998 -9.59961 2.2998c-23.1006 0 -38.7002 -10.5 -58.2002 -21.5l-0.5 0.5c4.2998 29.4004 14.5996 57.2002 14.5996 87.4004c0 44.5996 -23.7998 62.7002 -67.5 62.7002c-71.7002 0 -108 -70.8008 -108 -123.5c0 -54.7002 32 -85 86.2998 -85\r\n-c7.5 0 6.90039 0.599609 6.90039 -2.30078c-10.5 -80.2998 -56.5 -82.8994 -56.5 -58.8994c0 24.3994 28 36.5 28.2998 38c-0.200195 7.59961 -29.2998 17.2002 -36.7002 17.2002c-21.0996 0 -32.6992 -33 -32.6992 -50.6006c0 -32.2998 20.3994 -54.7002 53.2998 -54.7002\r\n-c48.2002 0 83.3994 49.7002 94.2998 91.7002c9.40039 37.7002 7 39.4004 12.2998 42.1006c20 10.0996 35.7998 16.7998 58.4004 16.7998c11.0996 0 19 -2.2998 36.7002 -5.2002c1.7998 -0.0996094 4.09961 1.7002 4.09961 3.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glide-g\" unicode=\"&#xf2a6;\" \r\n-d=\"M407.1 236.8c7.5 -2.89941 40.9004 -55.3994 40.9004 -63.3994c0 -2.90039 -3.7998 -5.80078 -6.7002 -5.80078c-28.3994 4.7002 -41.0996 8.40039 -58.8994 8.40039c-36.3008 0 -61.6006 -10.7998 -93.8008 -27c-8.5 -4.2998 -4.59961 -7.09961 -19.6992 -67.5996\r\n-c-17.4004 -67.6006 -74 -145.4 -151.4 -145.4c-52.7002 0 -85.5 36 -85.5 87.9004c0 28.0996 18.5 79.1992 52.4004 79.2998c11.8994 0 58.5996 -15.4004 58.8994 -27.6006c-0.5 -2.39941 -45.5 -21.7998 -45.5 -61c0 -38.5 73.9004 -34.2998 90.7998 94.6006\r\n-c0 4.7998 1 3.7998 -11 3.7998c-87.2998 0 -138.6 48.7002 -138.6 136.6c0 84.7002 58.2998 198.4 173.4 198.4c70.1992 0 108.399 -29.0996 108.399 -100.6c0 -48.5 -16.5 -93.1006 -23.5 -140.4l0.900391 -0.900391c31.2998 17.7002 56.3994 34.5 93.5 34.5\r\n-c3.7998 0 11.8994 -2.39941 15.3994 -3.7998zM231.8 321.2c2.90039 13.8994 5.5 28.0996 5.60059 42.3994c0 15.4004 -1.40039 28.7002 -20 28.7002c-7.80078 0 -15.6006 -2.59961 -22.6006 -6.7002c-43.7998 -24.0996 -61.7998 -86.3994 -61.7998 -133.399\r\n-c0 -31.2998 10.7002 -73.1006 49 -73.1006c8.7002 0 19.7002 -2.39941 22 7.80078c9.2002 44.6992 18.5 89.5996 27.7998 134.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"viadeo\" unicode=\"&#xf2a9;\" \r\n-d=\"M276.2 297.5v-0.700195c-17.9004 52.6006 -42.6006 103.4 -70.7998 151.2c43.2998 -29.2002 67 -100 70.7998 -150.5zM308.9 175.8c15.0996 3.10059 29.5 9 42.1992 17c24.5 -58.5996 20.2002 -139.7 -36.3994 -201c-67.7998 -73.8994 -191.9 -74.5996 -259.8 0\r\n-c-108.801 117.8 -31.6006 313.7 129.899 313.7c21.2998 0 42.6006 -3.5 62.5 -10.7002c-6.89941 -13.3994 -11.7002 -28.2002 -13.3994 -43.2998c-15.4004 6.5 -32.3008 9.59961 -49.1006 9.59961c-78 0 -135.399 -66.6992 -135.399 -142.3\r\n-c0 -68.7998 45.5996 -126 111.3 -137.399c98.5 38.3994 116.6 188.199 116.6 280c0 11.6992 0 23.6992 -1 35.3994c12.4004 -36.0996 18.9004 -73.8994 18.9004 -112c0 -86.5 -35.1006 -158.399 -109.3 -205.1l-3.80078 -0.299805\r\n-c80 -1.60059 137.801 61.6992 137.801 139.399c0 19.5 -3.40039 38.7998 -11 57zM418.1 436.3c52 -74 20.9004 -208.6 -58.0996 -208.6c-21.2998 0 -40.2002 11.3994 -55 25.7998c35.0996 19.2998 79.4004 49.2002 99.7002 84.9004\r\n-c2.39941 4.7998 6.5 13.6992 7.2002 19.1992c-19.9004 -44.6992 -70.8008 -79.6992 -118.2 -90.6992c-7.5 11.6992 -12 24.6992 -12 38.7998c0 16.5 8.2002 38.5 20.5996 50.5c34.5 32.8994 84.7998 13.5996 115.8 80.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"viadeo-square\" unicode=\"&#xf2aa;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM280.7 66.7998c35.3994 38.2998 38.0996 89 22.7998 125.601c-7.90039 -4.90039 -16.9004 -8.60059 -26.4004 -10.5\r\n-c4.80078 -11.4004 6.90039 -23.5 6.90039 -35.7002c0 -48.6006 -36.2002 -88.2002 -86.2002 -87.2002l2.40039 0.200195c46.3994 29.2002 68.2998 74.0996 68.2998 128.2c0 23.7998 -4.09961 47.5 -11.7998 70v0.399414c-2.2998 31.6006 -17.1006 75.7998 -44.2002 94.1006\r\n-c17.5996 -29.9004 33 -61.6006 44.2002 -94.5c0.599609 -7.30078 0.599609 -14.8008 0.599609 -22.1006c0 -57.3994 -11.3994 -151 -72.8994 -175c-41 7.2002 -69.5 42.9004 -69.5 85.9004c0 47.2002 35.7998 88.8994 84.5996 88.8994c10.5 0 21 -1.89941 30.7002 -6\r\n-c1.09961 9.5 4.09961 18.7002 8.39941 27.1006c-12.5 4.59961 -25.7998 6.7002 -39.0996 6.7002c-101 0 -149.2 -122.5 -81.2002 -196.101c42.4004 -46.5996 120 -46.2002 162.4 0zM309 214.3c49.4004 0 68.7998 84.1006 36.2998 130.3\r\n-c-19.3994 -41.5 -50.7998 -29.5 -72.3994 -50c-7.7002 -7.5 -12.9004 -21.2998 -12.9004 -31.5996c0 -8.7998 2.7998 -17 7.5 -24.2998c29.7002 6.89941 61.4004 28.7998 73.9004 56.7002c-0.400391 -3.40039 -3 -9 -4.5 -12c-12.7002 -22.3008 -40.4004 -41 -62.3008 -53\r\n-c9.30078 -9 21.1006 -16.1006 34.4004 -16.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snapchat\" unicode=\"&#xf2ab;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM417.5 101.1c2.2002 5.30078 -0.900391 9.80078 -4.90039 10.8008c-46.2998 7.59961 -67.0996 55.0996 -68 57.0996\r\n-c-0.0996094 0.0996094 -0.0996094 0.200195 -0.199219 0.299805c-2.40039 5 -3 9.2002 -1.60059 12.5c2.60059 6.2998 12.5 9.40039 19 11.5c1.7998 0.600586 3.5 1.10059 4.90039 1.7002c11.5 4.5 17.2998 10.0996 17.2002 16.5996\r\n-c-0.100586 5.10059 -4.10059 9.60059 -10.4004 11.9004c-4 1.59961 -9.59961 1.90039 -13.5996 0c-5.5 -2.59961 -10.4004 -4 -14.7002 -4.2002c-2.7998 0.100586 -4.60059 0.799805 -5.7002 1.40039c1.40039 24 4.7002 58 -3.7998 77.0996\r\n-c-16.2998 36.5 -49.6006 54.2998 -84.2998 54.2998c-0.600586 0 -6.10059 -0.0996094 -6.7002 -0.0996094c-14 0 -61.6006 -4 -84.1006 -54.2998c-8.5 -19.1006 -5.19922 -53.2002 -3.7998 -77.1006c-1.09961 -0.599609 -3.2998 -1.39941 -6.59961 -1.39941\r\n-c-4.5 0 -9.7998 1.39941 -15.7002 4.2002c-7.5 3.5 -20.2998 -1.80078 -21.9004 -10.3008c-1 -4.89941 1.2002 -12.0996 17 -18.2998c6.10059 -2.5 20.6006 -5.2998 24 -13.2002c1.40039 -3.2998 0.900391 -7.5 -1.59961 -12.5\r\n-c-0.0996094 -0.0996094 -0.200195 -0.199219 -0.200195 -0.299805c-0.899414 -2 -21.7002 -49.5 -68 -57.0996c-3.59961 -0.600586 -6.09961 -3.7998 -5.89941 -7.40039c0.699219 -13.8994 31.6992 -19.2998 45.5 -21.3994c1.39941 -1.90039 2.5 -9.90039 4.2998 -16\r\n-c0.799805 -2.7002 2.89941 -6 8.2998 -6s13.2998 3.09961 25.7998 3.09961c17.6006 0 23.6006 -4 37.4004 -13.7002c9.89941 -7 27.5 -19.7998 48.5 -18.2002c20.7998 -0.899414 34.7002 7.90039 49.2002 18.2002c13.6992 9.7002 19.7998 13.7002 37.3994 13.7002\r\n-c13 0 19.6006 -2.90039 25.7998 -2.90039h0.200195c4.40039 0 7 2.2002 8.10059 5.90039c1.7998 6.09961 2.89941 14 4.2998 15.9004c26.7002 4.19922 41.2998 10.0996 44.7998 18.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snapchat-ghost\" unicode=\"&#xf2ac;\" horiz-adv-x=\"512\" \r\n-d=\"M510.846 55.3271c-5.21094 -12.1572 -27.2383 -21.0889 -67.3594 -27.3184c-2.06445 -2.78613 -3.77539 -14.6855 -6.50781 -23.9561c-1.625 -5.56543 -5.62207 -8.86914 -12.1279 -8.86914l-0.296875 0.00585938c-9.39453 0 -19.2031 4.32227 -38.8516 4.32227\r\n-c-26.5215 0 -35.6621 -6.04297 -56.2539 -20.5879c-21.832 -15.4375 -42.7715 -28.7637 -74.0273 -27.3984c-31.6455 -2.33398 -58.0244 16.9072 -72.8711 27.4033c-20.7139 14.6436 -29.8281 20.582 -56.2412 20.582c-18.8633 0 -30.7354 -4.71973 -38.8516 -4.71973\r\n-c-8.07324 0 -11.2129 4.92188 -12.4219 9.04004c-2.70312 9.18848 -4.4043 21.2627 -6.52344 24.1299c-20.6787 3.20898 -67.3096 11.3438 -68.498 32.1504c-0.00878906 0.161133 -0.015625 0.422852 -0.015625 0.583984c0 4.97559 3.98438 9.67285 8.89258 10.4844\r\n-c69.583 11.4551 100.925 82.9014 102.228 85.9346c0.0742188 0.175781 0.155273 0.34375 0.237305 0.514648c3.71289 7.53711 4.54395 13.8486 2.46289 18.7529c-5.05078 11.8965 -26.8721 16.1641 -36.0537 19.7959c-23.7148 9.36621 -27.0146 20.1279 -25.6113 27.5039\r\n-c2.43652 12.8359 21.7246 20.7354 33.002 15.4531c8.91895 -4.18066 16.8428 -6.29688 23.5469 -6.29688c5.02148 0 8.21191 1.2041 9.95996 2.1709c-2.04297 35.9365 -7.10156 87.29 5.68652 115.969c33.7734 75.7188 105.356 81.6025 126.478 81.6025\r\n-c0.943359 0 9.14062 0.0888672 10.1094 0.0888672c52.1484 0 102.255 -26.7803 126.724 -81.6426c12.7764 -28.6504 7.74902 -79.792 5.69434 -116.01c1.58203 -0.87207 4.35742 -1.94141 8.59961 -2.13867c6.39648 0.286133 13.8145 2.38867 22.0693 6.25684\r\n-c6.08496 2.84668 14.4053 2.46094 20.4795 -0.0576172l0.0292969 -0.00976562c9.47559 -3.38574 15.4385 -10.2158 15.5889 -17.8701c0.183594 -9.74707 -8.52246 -18.165 -25.8779 -25.0186c-2.11816 -0.834961 -4.69434 -1.6543 -7.43457 -2.52441\r\n-c-9.79688 -3.10645 -24.5996 -7.80566 -28.6152 -17.2715c-2.0791 -4.9043 -1.25684 -11.2109 2.45996 -18.748c0.0869141 -0.167969 0.166016 -0.341797 0.238281 -0.514648c1.30176 -3.03027 32.6152 -74.46 102.23 -85.9346\r\n-c6.42676 -1.05762 11.1631 -7.87695 7.72461 -15.8584z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snapchat-square\" unicode=\"&#xf2ad;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM393.5 101.1c2.2002 5.30078 -0.900391 9.80078 -4.90039 10.8008c-46.2998 7.59961 -67.0996 55.0996 -68 57.0996\r\n-c-0.0996094 0.0996094 -0.0996094 0.200195 -0.199219 0.299805c-2.40039 5 -3 9.2002 -1.60059 12.5c2.60059 6.2998 12.5 9.40039 19 11.5c1.7998 0.600586 3.5 1.10059 4.90039 1.7002c11.5 4.5 17.2998 10.0996 17.2002 16.5996\r\n-c-0.100586 5.10059 -4.10059 9.60059 -10.4004 11.9004c-4 1.59961 -9.59961 1.90039 -13.5996 0c-5.5 -2.59961 -10.4004 -4 -14.7002 -4.2002c-2.7998 0.100586 -4.60059 0.799805 -5.7002 1.40039c1.40039 24 4.7002 58 -3.7998 77.0996\r\n-c-16.2998 36.5 -49.6006 54.2998 -84.2998 54.2998c-0.600586 0 -6.10059 -0.0996094 -6.7002 -0.0996094c-14 0 -61.6006 -4 -84.1006 -54.2998c-8.5 -19.1006 -5.19922 -53.2002 -3.7998 -77.1006c-1.09961 -0.599609 -3.2998 -1.39941 -6.59961 -1.39941\r\n-c-4.5 0 -9.7998 1.39941 -15.7002 4.2002c-7.5 3.5 -20.2998 -1.80078 -21.9004 -10.3008c-1 -4.89941 1.2002 -12.0996 17 -18.2998c6.10059 -2.5 20.6006 -5.2998 24 -13.2002c1.40039 -3.2998 0.900391 -7.5 -1.59961 -12.5\r\n-c-0.0996094 -0.0996094 -0.200195 -0.199219 -0.200195 -0.299805c-0.899414 -2 -21.7002 -49.5 -68 -57.0996c-3.59961 -0.600586 -6.09961 -3.7998 -5.89941 -7.40039c0.699219 -13.8994 31.6992 -19.2998 45.5 -21.3994c1.39941 -1.90039 2.5 -9.90039 4.2998 -16\r\n-c0.799805 -2.7002 2.89941 -6 8.2998 -6s13.2998 3.09961 25.7998 3.09961c17.6006 0 23.6006 -4 37.4004 -13.7002c9.89941 -7 27.5 -19.7998 48.5 -18.2002c20.7998 -0.899414 34.7002 7.90039 49.2002 18.2002c13.6992 9.7002 19.7998 13.7002 37.3994 13.7002\r\n-c13 0 19.6006 -2.90039 25.7998 -2.90039h0.200195c4.40039 0 7 2.2002 8.10059 5.90039c1.7998 6.09961 2.89941 14 4.2998 15.9004c26.7002 4.19922 41.2998 10.0996 44.7998 18.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pied-piper\" unicode=\"&#xf2ae;\" \r\n-d=\"M32 29l-32 -60.2002l0.799805 328c0 65.9004 53.2002 119.2 119.2 119.2h327.2c-93 -28.9004 -189.9 -94.2002 -253.9 -168.6c-70.5996 -81.4004 -110.7 -137.4 -161.3 -218.4zM448 416c0 0 0 -328.8 0.0996094 -328.8c0 -65.9004 -53.2998 -119.2 -119.3 -119.2\r\n-h-328.399c18.5 25.5 61.6992 54 84.8994 66c35.5 18.0996 76.4004 28.5 105.3 56.2998c42.1006 40.5 47.8008 105 71 158.601c43.6006 100.3 186.4 167.1 186.4 167.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"first-order\" unicode=\"&#xf2b0;\" \r\n-d=\"M12.9004 218.8c0.0996094 0.100586 0.199219 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.100586 -0.400391h-0.199219zM224 351.4c7.40039 0 14.5996 -0.5 21.7002 -1.7002l-4 -67.7002l22.2998 64.2998c14.2998 -3.7998 27.7002 -9.5 40 -16.8994\r\n-l-29.4004 -61.1006l45.1006 50.9004c11.5 -8.90039 21.7002 -19.2002 30.5996 -30.9004l-50.5996 -45.3994l60.8994 29.6992c7.5 -12.2998 12.9004 -26 16.6006 -40.2998l-64 -22.2998l67.7002 4c1.09961 -7.09961 1.39941 -14.5996 1.39941 -22\r\n-s-0.299805 -14.5996 -1.39941 -21.7002l-67.4004 4l64 -22.2998c-3.7002 -14.5996 -9.5 -28 -16.5996 -40.2998l-61.1006 29.3994l50.6006 -45.0996c-8.60059 -11.7998 -18.9004 -22 -30.6006 -30.9004l-44.8994 50.9004l29.3994 -61.2998\r\n-c-12.2998 -7.5 -25.7002 -12.9004 -40 -16.9004l-22.5996 65.1006l4 -68.6006c-7.10059 -1.09961 -14.2998 -1.7002 -21.7002 -1.7002c-7.09961 0 -14.5996 0.600586 -21.7002 1.7002l4 68l-22.2998 -64.5996c-14.2998 3.7998 -27.7002 9.5 -40 16.8994l29.5 61.4004\r\n-l-44.9004 -50.9004c-11.7998 8.60059 -22 19.2002 -30.8994 30.9004l50.8994 45.0996l-61.0996 -29.6992c-7.2002 12.5996 -12.9004 26 -16.5996 40.2998l64 22.5996l-67.7002 -4c-0.799805 7.10059 -1.40039 14.2998 -1.40039 21.7002s0.5 14.9004 1.40039 22l68 -4\r\n-l-64.2998 22.5996c3.69922 14.3008 9.5 27.7002 16.5996 40l61.0996 -29.6992l-50.5996 45.3994c8.90039 11.7998 19.2002 22 30.5996 30.9004l45.1006 -50.9004l-29.4004 61.4004c12.2998 7.2002 25.7002 12.8994 40 16.5996l22 -64l-3.7002 67.4004\r\n-c6.80078 1.09961 14.3008 1.7002 21.4004 1.7002zM443.4 320v-256l-219.4 -128l-219.4 128v256l219.4 128zM426.3 309.7l-202.3 117.399l-202.3 -117.399v-235.101l202.3 -117.699l202.3 117.699v235.101zM224 410.9l187.7 -109.4v-218.9l-187.7 -109.5l-187.7 109.5\r\n-v218.801zM224 360c-92.2998 0 -166.9 -75.0996 -166.9 -168c0 -92.5996 74.6006 -167.7 166.9 -167.7c92 0 166.9 75.1006 166.9 167.7c0 92.9004 -74.9004 168 -166.9 168z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yoast\" unicode=\"&#xf2b1;\" \r\n-d=\"M91.2998 372h186l-7 -18.9004h-179c-39.7002 0 -71.8994 -31.5996 -71.8994 -70.2998v-205.399c0 -35.4004 24.8994 -70.3008 84 -70.3008v-19.0996h-12.1006c-50.0996 0 -91.2998 40.2002 -91.2998 89.5v205.3c0 49.2998 40.7002 89.2002 91.2998 89.2002zM320.4 428\r\n-h66.5c-143.801 -378.1 -145.7 -398.9 -184.7 -439.3c-20.7998 -21.6006 -49.2998 -31.7002 -78.2998 -32.7002v51.0996c49.1992 7.7002 64.5996 49.9004 64.5996 75.3008c0 20.0996 0.599609 12.5996 -82.0996 223.199h61.3994l50.4004 -156.6zM448 286.5v-298.5h-214\r\n-c6.59961 9.59961 10.7002 16.2998 12.0996 19.4004h182.5v279.1c0 32.5 -17.0996 51.9004 -48.1992 62.9004l6.69922 17.5996c41.7002 -13.5996 60.9004 -43.0996 60.9004 -80.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"themeisle\" unicode=\"&#xf2b2;\" horiz-adv-x=\"512\" \r\n-d=\"M208 359.714c0 10 6.28613 21.7139 17.7148 21.7139c11.1426 0 17.7139 -11.7139 17.7139 -21.7139c0 -10.2852 -6.57129 -21.7139 -17.7139 -21.7139c-11.4287 0 -17.7148 11.4287 -17.7148 21.7139zM512 199.714c0 -36.001 -11.4287 -102.286 -36.2861 -129.714\r\n-c-22.8574 -24.8584 -87.4277 -61.1426 -120.856 -70.5723l-1.14355 -0.286133v-32.5703c0 -16.2861 -12.5723 -30.5713 -29.1426 -30.5713c-10 0 -19.4297 5.71387 -24.5723 14.2861c-5.42676 -8.57227 -14.8564 -14.2861 -24.8564 -14.2861\r\n-s-19.4287 5.71387 -24.8574 14.2861c-5.14258 -8.57227 -14.5713 -14.2861 -24.5703 -14.2861c-10.2861 0 -19.4287 5.71387 -24.8574 14.2861c-5.14355 -8.57227 -14.5713 -14.2861 -24.5713 -14.2861c-18.8574 0 -29.4287 15.7139 -29.4287 32.8574\r\n-c-16.2861 -12.2852 -35.7158 -19.4287 -56.5713 -19.4287c-22 0 -43.4287 8.28516 -60.2861 22.8574c10.2852 0.286133 20.5713 2.28613 30.2852 5.71387c-20.8574 5.71387 -39.4277 18.8574 -52 36.2861c21.3701 -4.64551 46.209 -1.67285 67.1426 11.1426\r\n-c-22 22 -56.5703 58.8574 -68.5713 87.4287c-5.71387 13.4287 -6.85645 31.4287 -6.85645 45.7139c0 49.7139 20.2861 160 86.2861 160c10.5713 0 18.8564 -4.8584 23.1426 -14.8574c3.0498 4.46289 8.42578 11.374 12 15.4277c2 2.57227 5.71387 5.42969 7.14355 8.28613\r\n-c7.99902 12.5713 11.7139 21.1426 21.7139 34c32.2852 41.1445 81.7139 69.4297 134.856 69.4297c6 0 12 -0.285156 17.7148 -1.14355c10.8564 11.7148 26 18.2861 41.7148 18.2861c14.5703 0 29.7139 -6 40 -16.2861c0.856445 -0.857422 1.42773 -2.28613 1.42773 -3.42773\r\n-c0 -3.71387 -10.2852 -13.4287 -12.8574 -16.2861c4.28613 -1.42871 15.7148 -6.8584 15.7148 -12c0 -2.85742 -2.85742 -5.14258 -4.57129 -7.14258c31.4287 -27.7148 49.4287 -67.1436 56.2861 -108c4.28613 5.14258 10.2852 8.57129 17.1426 8.57129\r\n-c10.5713 0 20.8574 -7.14355 28.5713 -14.001c20.8564 -18.5703 25.7139 -53.1416 25.7139 -79.7139zM188 358.572c0 -18.2861 12.5713 -37.1436 32.2861 -37.1436c19.7139 0 32.2852 18.8574 32.2852 37.1436c0 18 -12.5713 36.8564 -32.2852 36.8564\r\n-c-19.7148 0 -32.2861 -18.8574 -32.2861 -36.8564zM237.714 254c0 19.7139 3.71387 39.1426 8.57129 58.2861c-52.0391 -79.5342 -13.5312 -184.571 68.8574 -184.571c21.4287 0 42.5713 7.71387 60 20c2 7.42871 3.71484 14.8574 3.71484 22.5723\r\n-c0 14.2861 -6.28613 21.4277 -20.5723 21.4277c-4.57129 0 -9.14355 -0.856445 -13.4287 -1.71387c-63.3438 -12.668 -107.143 -3.66895 -107.143 63.999zM196.572 -0.858398c0 11.1436 -8.8584 20.8574 -20.2861 20.8574c-11.4287 0 -20 -9.71484 -20 -20.8574v-32.5703\r\n-c0 -11.1436 8.57129 -21.1426 20 -21.1426c11.4277 0 20.2861 9.71484 20.2861 21.1426v32.5703zM245.715 -0.858398c0 11.1436 -8.57227 20.8574 -20 20.8574c-11.4287 0 -20.2861 -9.71484 -20.2861 -20.8574v-32.5703c0 -11.1436 8.85742 -21.1426 20.2861 -21.1426\r\n-c11.4277 0 20 10 20 21.1426v32.5703zM295.428 -0.858398c0 11.1436 -8.85645 20.8574 -20.2852 20.8574s-20.2852 -9.71484 -20.2852 -20.8574v-32.5703c0 -11.1436 8.85645 -21.1426 20.2852 -21.1426s20.2852 9.71484 20.2852 21.1426v32.5703zM345.143 -0.858398\r\n-c0 11.1436 -8.85645 20.8574 -20.2852 20.8574s-20.2861 -9.71484 -20.2861 -20.8574v-32.5703c0 -11.1436 8.85742 -21.1426 20.2861 -21.1426s20.2852 10 20.2852 21.1426v32.5703zM421.714 162c-30.8564 -59.1416 -90.2852 -102.572 -158.571 -102.572\r\n-c-96.5703 0 -160.57 84.5723 -160.57 176.572c0 16.8574 2 33.4287 6 49.7139c-20 -33.7148 -29.7139 -72.5723 -29.7139 -111.429c0 -60.2861 24.8564 -121.715 71.4287 -160.857c5.14258 9.71387 14.8564 16.2861 26 16.2861c10 0 19.4277 -5.71387 24.5713 -14.2861\r\n-c5.42871 8.57129 14.5703 14.2861 24.8574 14.2861c10 0 19.4277 -5.71387 24.5713 -14.2861c5.42871 8.57129 14.8564 14.2861 24.8574 14.2861c10 0 19.4287 -5.71387 24.8574 -14.2861c5.14258 8.57129 14.5713 14.2861 24.5723 14.2861\r\n-c10.8564 0 20.8564 -6.57227 25.7139 -16c43.4268 36.2861 68.5693 92 71.4258 148.286zM432.286 261.714c0 53.7139 -34.5713 105.714 -92.5723 105.714c-30.2852 0 -58.5713 -15.1426 -78.8564 -36.8564c-19.9951 -66.3828 -27.4473 -136.571 41.4287 -136.571\r\n-c28.8047 0 97.3564 28.5381 84.2861 -36.8574c28.8564 26 45.7139 65.7148 45.7139 104.571z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-plus\" unicode=\"&#xf2b3;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM177.3 68c71.2998 0 118.8 50.4004 118.8 121.2c0 7.09961 -0.599609 13.8994 -1.89941 20.7002h-116.9v-42.6006h70.1006\r\n-c-5.2002 -34.2002 -37.5 -53.2998 -70.1006 -53.2998c-43 0 -77.2002 35.5 -77.2002 78.0996c0 42.6006 34.3008 78.1006 77.2002 78.1006c18.1006 0 36.2002 -6.2002 49.4004 -19.1006l33.5996 32.6006c-22.8994 21.2998 -51.7002 32.2998 -83 32.2998\r\n-c-68.7998 0 -124 -55.5 -124 -124s55.2002 -124 124 -124zM407.5 174.2h35.2002v35.5h-35.2002v35.5h-35.5v-35.5h-35.5v-35.5h35.5v-35.5h35.5v35.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"font-awesome\" unicode=\"&#xf2b4;\" \r\n-d=\"M397.8 416c27.5 0 50.2002 -22.7002 50.2002 -50.2002v-347.6c0 -27.5 -22.7002 -50.2002 -50.2002 -50.2002h-347.6c-27.5 0 -50.2002 22.7002 -50.2002 50.2002v347.6c0 27.5 22.7002 50.2002 50.2002 50.2002h347.6zM352.4 131.7h0.0996094v140.3\r\n-c0 4.2002 -4.2002 7.7998 -9 7.7998c-6 0 -31.0996 -16.0996 -53.7998 -16.0996c-4.7002 0 -8.90039 0.599609 -13.1006 2.39941c-20.2998 7.7002 -38.1992 13.7002 -60.8994 13.7002c-20.9004 0 -43 -6.5 -61.5 -14.2998\r\n-c-1.7998 -1.2002 -3.60059 -1.7998 -5.40039 -2.40039v18.5c8.2998 6 13.1006 15.5 13.1006 26.3008c0 18.5996 -15 33.5 -33.5 33.5c-18.6006 0 -33.5 -15 -33.5 -33.5c0 -10.8008 5.2998 -20.3008 13.0996 -26.3008v-218.6c0 -11.2998 9 -20.2998 20.2998 -20.2998\r\n-c8.90039 0 16.7002 5.89941 19.1006 14.2998v1.2002c0.599609 1.2002 0.599609 3 0.599609 4.7998v45.4004c1.2002 0.599609 2.40039 0.599609 3.59961 1.19922c19.7002 8.90039 44.2002 17.3008 67.5 17.3008c32.3008 0 44.8008 -16.7002 71.7002 -16.7002\r\n-c19.2002 0 37.1006 6.5 53.7998 13.7002c4.2002 1.7998 7.80078 3.59961 7.80078 7.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"linode\" unicode=\"&#xf2b8;\" \r\n-d=\"M437.4 221.7c0.599609 -2 -8.80078 -66.2998 -9.7002 -72.7998c0 -0.900391 -0.5 -1.7002 -1.10059 -2l-54.5996 -43.7002c-1.09961 -0.900391 -2.59961 -0.900391 -3.7002 0l-20.2998 14l-2.2998 -33.4004c0 -0.899414 -0.200195 -1.7002 -1.10059 -2.2998\r\n-l-66.8994 -53.4004c-1.10059 -0.899414 -2.90039 -0.899414 -4 0l-28 23.7002l2 -46c0 -0.899414 -0.200195 -1.7002 -1.10059 -2.2998l-83.6992 -66.9004c-0.600586 -0.299805 -1.10059 -0.599609 -1.7002 -0.599609c-0.900391 0.299805 -1.7002 0.299805 -2.2998 0.900391\r\n-l-65.1006 69.0996c-1.5 1.40039 -15.5 72 -16.8994 79.0996c-0.300781 1.10059 0.5 2.5 1.39941 3.10059l17.4004 10.5996c-3.40039 3.2002 -26.5 23.4004 -27.1006 26.2998l-20.5996 100.301c-0.299805 1.09961 0.299805 2.5 1.7002 3.39941l26.8994 12.9004\r\n-c-4.59961 3.5 -37.6992 27.5 -38.5996 30.8994l-27.4004 133.101c-0.299805 1.7002 0.600586 3.09961 2 3.7002l123.7 38.5996c0.600586 0 1.40039 0 2.2998 -0.299805l90.6006 -43.7002c0.799805 -0.599609 1.7002 -1.7002 1.7002 -2.59961l5.69922 -132.301\r\n-c0 -1.19922 -0.599609 -2.2998 -1.69922 -2.89941l-33.7002 -17.4004l36 -24.2998c0.799805 -0.299805 1.39941 -1.40039 1.39941 -2.2998l1.40039 -35.1006l34.5996 21.2002c0.800781 0.600586 2.2002 0.600586 3.10059 0l24 -16l0.899414 31.4004\r\n-c0 0.899414 0.5 2 1.40039 2.59961l58.9004 36c1.09961 0.600586 2.19922 0.600586 3.09961 0l70 -38.5996c0.5 -0.600586 1.09961 -1.10059 1.40039 -2zM232.6 216.9l-100.6 -57.2002l14 -96.6006l90.5996 61.2002zM224.9 396.9l-120.9 -46.6006l19.7002 -134.8\r\n-l106.6 55.4004zM44 274.9l73.0996 -57.2002l-19.3994 132.899l-79.7002 49.4004zM74.5996 127.1l64.8008 -60.7998l-13.7002 93.4004l-70 58.2998zM98.9004 9.40039l57.6992 -61.2002l-9.69922 67.3994l-61.7002 60.9004zM163.4 -55.0996l78.1992 62.2998l-3.09961 70\r\n-l-85.7002 -61.4004zM245.4 60l27.0996 -22.9004l-0.599609 68.3008l-29.4004 22.5996c0 -2.2998 1.2002 -6.2998 -1.09961 -8l-22.3008 -14.9004l24.3008 -20c2.89941 -2.19922 2 -21.6992 2 -25.0996zM339.7 85.4004l4.2002 66.8994l-65.7002 -46.8994l0.599609 -68.6006z\r\n-M367.4 111.1l5.7998 66.6006l-64.6006 40.5996l-0.599609 -30l41.2002 -27.2002c0.799805 -0.599609 1.39941 -1.69922 1.09961 -2.59961l-2 -34zM422 150.9l8.5 63.3994l-51.0996 -36.5996l-5.7002 -65.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quora\" unicode=\"&#xf2c4;\" \r\n-d=\"M440.5 61.2998c1.7998 -18 -7.2002 -93.2998 -89 -93.2998c-49.5 0 -75.5 28.7002 -95.2002 62.2998c-117.7 -32.5996 -249 54.9004 -249 189c0 117 98 196.7 197.7 196.7c101.8 0 198.5 -79.2002 198.4 -196.7c0 -65.5 -30.5 -118.8 -74.7002 -153\r\n-c14.2002 -21.5996 29 -35.7998 49.5 -35.7998c22.5 0 31.5 17.2998 33 30.7998h29.2998zM297 118.8c11.2998 24.9004 16.7998 58.7002 16.7002 100.5c0 104.2 -32.5 157.7 -108.7 157.7c-75 0 -107.5 -53.5 -107.5 -157.9c0 -103.699 32.5 -156.699 107.5 -156.699\r\n-c12 0 22.7002 1.19922 32.7002 4.19922c-15.5 30.5 -33.7002 61.3008 -69.2002 61.3008c-6.7998 0 -13.5996 -1 -19.7998 -4l-12.2002 24.2998c14.7002 12.7998 38.5 22.7998 69 22.7998c47.7998 0 72 -23 91.5 -52.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"free-code-camp\" unicode=\"&#xf2c5;\" horiz-adv-x=\"576\" \r\n-d=\"M69.2998 303.5c-41 -68.5 -36.3994 -163 1 -227c22.2002 -38.2002 49.7002 -52.4004 49.7002 -66.5c0 -6.7998 -6 -13 -12.7998 -13c-19.5 0 -99.2002 75.5 -99.2002 197.8c0 111.5 78 186 97.0996 186c6 0 14.9004 -4.7998 14.9004 -11.0996\r\n-c0 -12.7002 -28.2998 -28.6006 -50.7002 -66.2002zM265.1 89.7002c-37.1992 13.5996 -65.5 45.8994 -65.2998 86.2002c0 48 57.7002 90.0996 57.7002 136.199c0 16.8008 -10.4004 32.6006 -19.5996 38.2002c-1.90039 1 -4.60059 2.7002 -4.60059 5.10059\r\n-c0 9.59961 26.1006 2.7998 36.5 -2.2002c33.6006 -15.9004 40.6006 -40.2998 46.4004 -74.1006c1.39941 -7.89941 4.2998 -33.2998 15.8994 -33.2998c7.5 0 12.3008 5.10059 12.3008 12.2998c0 12.6006 -15.4004 31.2002 -7.2002 31.2002\r\n-c6.09961 0 18.5996 -12.7998 22.5 -16.8994c23.3994 -24.9004 32.0996 -49 32.0996 -82.6006c0 -42.2002 -23.3994 -74.7002 -53.0996 -89.7998c-9.2002 -5.7998 -12.1006 0.900391 -12.1006 1.90039c0 7 29.5 23.5996 29.5 56c0 10.5996 -2.69922 22.5 -8.5 31.3994\r\n-c-1.69922 2.40039 -7.69922 10.1006 -11.0996 10.1006c-0.700195 0 -0.700195 -0.5 -0.700195 -1.2002c0 -5.7998 3.60059 -11.4004 3.60059 -17.4004c0 -13 -31.9004 -20.2002 -31.9004 6.7998c0 7.10059 0.700195 14.3008 0.700195 21.3008\r\n-c0 5.09961 -0.200195 6.5 -2.40039 11.0996c-3.39941 6.5 -14.5 19.7998 -22.5 19.7998c-2.2002 0 -2.89941 0 -2.89941 -2.2002c0 -3.39941 7.69922 -7 7.69922 -19.2998c0 -32.0996 -44.1992 -37.8994 -44.1992 -70c0 -14.3994 1.89941 -26.5 10.0996 -38.5996\r\n-c5.09961 -7.5 10.5996 -11.7998 19.0996 -15.2002c2.10059 -0.700195 4.30078 -0.900391 4.30078 -3.59961c0 -6.40039 -7.80078 -3 -12.3008 -1.2002zM470.4 381c21.3994 0 97.5996 -78.9004 97.5 -198.2c0 -104.899 -73.4004 -185.7 -98.8008 -185.7\r\n-c-5 0 -13.1992 6.30078 -13.1992 11.4004c0 8.2002 28.2998 34.5996 35.2998 43.5c61 76.7002 64 205.9 -17.6006 291c-5.5 5.7998 -17.5996 16.7002 -17.5996 25.4004c0 6.09961 8.40039 12.5996 14.4004 12.5996zM428.1 57.9004c8.40039 0 11.9004 -7 11.9004 -15.5\r\n-c0 -8.90039 -2.5 -16.4004 -11.9004 -16.4004h-261.1c-8.5 0 -15.5 7 -15.5 15.5c0 8.90039 6.09961 16.4004 15.5 16.4004h261.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"telegram\" unicode=\"&#xf2c6;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM369.8 270.1c3.60059 16.8008 -6.09961 23.5 -17.2002 19.5l-239.1 -92.1992c-16.4004 -6.40039 -16.0996 -15.5 -2.7998 -19.7002l61.2002 -19.1006l142 89.4004\r\n-c6.59961 4.40039 12.6992 1.90039 7.69922 -2.5l-114.899 -103.8l-4.40039 -63.1006c6.40039 0 9.2002 2.80078 12.5 6.10059l29.9004 28.7998l62 -45.7002c11.2998 -6.39941 19.3994 -3.09961 22.3994 10.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bandcamp\" unicode=\"&#xf2d5;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM296.2 113.9l84.7002 156.1h-181l-84.7002 -156.1h181z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grav\" unicode=\"&#xf2d6;\" horiz-adv-x=\"512\" \r\n-d=\"M301.1 236c4.40039 -4.40039 4.40039 -11.9004 0 -16.2998l-9.69922 -9.7002c-4.40039 -4.7002 -11.9004 -4.7002 -16.6006 0l-10.5 10.5c-4.39941 4.7002 -4.39941 11.9004 0 16.5996l9.7002 9.7002c4.40039 4.40039 11.9004 4.40039 16.5996 0zM270.9 255.7\r\n-c-2.7002 -2.7998 -7.40039 -2.7998 -10.5 0c-2.80078 3 -2.80078 7.7002 0 10.5c3 3 7.69922 3 10.5 0c3 -2.7002 3 -7.5 0 -10.5zM244.9 250.4c2.7998 3 7.5 3 10.5 0c2.7998 -2.7002 2.7998 -7.40039 0 -10.2002c-3 -3 -7.7002 -3 -10.5 0c-3 2.7002 -3 7.39941 0 10.2002\r\n-zM317.4 263.7c-19.9004 14.3994 -33.8008 43.2002 -11.9004 68.0996c21.5996 24.9004 40.7002 17.2002 59.7998 -0.799805c11.9004 -11.2998 29.2998 -24.9004 17.2002 -48.2002c-12.5 -23.5 -45.0996 -33.2002 -65.0996 -19.0996zM365.1 308.2\r\n-c-8.89941 10 -23.2998 -6.90039 -15.5 -16.1006c7.40039 -9 32.1006 -2.39941 15.5 16.1006zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM437.8 149.4c2.5 16.0996 -20.2002 16.5996 -25.2002 25.6992\r\n-c-13.5996 24.1006 -27.6992 36.8008 -54.5 30.4004c11.6006 8 23.5 6.09961 23.5 6.09961c0.300781 6.40039 0 13 -9.39941 24.9004c3.89941 12.5 0.299805 22.4004 0.299805 22.4004c15.5 8.59961 26.7998 24.3994 29.0996 43.1992\r\n-c3.60059 31 -18.7998 59.2002 -49.7998 62.8008c-22.0996 2.5 -43.7002 -7.7002 -54.2998 -25.7002c-23.2002 -40.1006 1.40039 -70.9004 22.4004 -81.4004c-14.4004 1.40039 -34.3008 11.9004 -40.1006 34.2998c-6.59961 25.7002 2.7998 49.8008 8.90039 61.4004\r\n-c0 0 -4.40039 5.7998 -8 8.90039c0 0 -13.7998 0 -24.6006 -5.30078c11.9004 15.2002 25.2002 14.4004 25.2002 14.4004c0 6.40039 -0.599609 14.9004 -3.59961 21.5996c-5.40039 11 -23.7998 12.9004 -31.7002 -2.7998c0.0996094 0.200195 0.299805 0.400391 0.400391 0.5\r\n-c-5 -11.8994 -1.10059 -55.8994 16.8994 -87.2002c-2.5 -1.39941 -9.09961 -6.09961 -13 -10c-21.5996 -9.69922 -56.2002 -60.2998 -56.2002 -60.2998c-28.1992 -10.7998 -77.1992 -50.8994 -70.5996 -79.7002c0.299805 -3 1.40039 -5.5 3 -7.5\r\n-c-2.7998 -2.19922 -5.5 -5 -8.2998 -8.2998c-11.9004 -13.7998 -5.2998 -35.2002 17.7002 -24.3994c15.7998 7.19922 29.5996 20.1992 36.2998 30.3994c0 0 -5.5 5 -16.2998 4.40039c27.6992 6.59961 34.2998 9.39941 46.1992 9.09961c8 -3.89941 8 34.2998 8 34.2998\r\n-c0 14.7002 -2.19922 31 -11.0996 41.5c12.5 -12.1992 29.0996 -32.6992 28 -60.5996c-0.799805 -18.2998 -15.2002 -23 -15.2002 -23c-9.09961 -16.5996 -43.2002 -65.9004 -30.3994 -106c0 0 -9.7002 14.9004 -10.2002 22.0996\r\n-c-17.4004 -19.3994 -46.5 -52.2998 -24.6006 -64.5c26.6006 -14.6992 108.801 88.6006 126.2 142.301c34.6006 20.7998 55.4004 47.2998 63.9004 65c22 -43.5 95.2998 -94.5 101.1 -59z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"etsy\" unicode=\"&#xf2d7;\" horiz-adv-x=\"384\" \r\n-d=\"M384 100c-1.75 -10.75 -13.75 -110 -15.5 -132c-117.879 4.29883 -219.895 4.74316 -368.5 0v25.5c45.457 8.94824 60.627 8.01855 61 35.25c1.79297 72.3223 3.52441 244.143 0 322c-1.0293 28.46 -12.1299 26.7646 -61 36v25.5\r\n-c73.8857 -2.3584 255.933 -8.55078 362.999 3.75c-3.5 -38.25 -7.75 -126.5 -7.75 -126.5h-23.249c-11.0527 42.835 -18.7588 90.5 -54.75 90.5h-137c-10.25 0 -10.75 -3.5 -10.75 -9.75v-163.75c58 -0.5 88.5 2.5 88.5 2.5c29.7695 0.951172 27.5596 8.50195 40.75 65.251\r\n-h25.75c-4.40723 -101.351 -3.91016 -61.8291 -1.75 -160.25h-25.75c-9.15527 40.0859 -9.06543 61.0449 -39.501 61.5c0 0 -21.5 2 -88 2v-139c0 -26 14.25 -38.25 44.25 -38.25h89.251c63.6357 0 66.5645 24.9961 98.751 99.75h22.249v-0.000976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"imdb\" unicode=\"&#xf2d8;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM21.2998 218.8h-0.299805c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391v-0.400391zM97 128.2v127.8h-33v-127.8h33z\r\n-M210.2 128.2v127.8h-43l-7.60059 -59.9004c-2.69922 20 -5.39941 40.1006 -8.69922 59.9004h-42.8008v-127.8h29v84.5l12.2002 -84.5h20.6006l11.5996 86.3994v-86.3994h28.7002zM221.6 128.2c86.1006 -0.100586 75 -6 75 82.5c0 8.09961 0.300781 16.7998 -1.39941 24.3994\r\n-c-4.2998 22.5 -31.4004 20.9004 -49 20.9004h-24.6006v-127.8zM382.5 157.4v36c0 17.2998 -0.799805 30.0996 -22.2002 30.0996c-8.89941 0 -14.8994 -2.7002 -20.8994 -9.2002v41.7002h-31.7002v-127.8h29.7998l1.90039 8.09961\r\n-c5.69922 -6.7998 11.8994 -9.7998 20.8994 -9.7998c19.7998 0 22.2002 15.2002 22.2002 30.9004zM265 218.1v-49.2998c0 -9.7002 1.90039 -18.7002 -10.2998 -18.3994v83.6992c11.8994 0 10.2998 -6.2998 10.2998 -16zM350.5 192v-32.7002\r\n-c0 -5.39941 1.59961 -14.3994 -6.2002 -14.3994c-1.59961 0 -3 0.799805 -3.7998 2.39941c-2.2002 5.10059 -1.09961 44.1006 -1.09961 44.7002c0 3.7998 -1.10059 12.7002 4.89941 12.7002c7.2998 0 6.2002 -7.2998 6.2002 -12.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ravelry\" unicode=\"&#xf2d9;\" horiz-adv-x=\"512\" \r\n-d=\"M407.4 386.5c72.6992 -37.9004 112 -117.2 103.3 -199.5c-1.7002 -16.7002 -4.40039 -36.2002 -9.7998 -52.2002c-22.2002 -65.7002 -52.9004 -108.6 -123.101 -147.7c-6.39941 -4.39941 -13.2998 -8.59961 -20.2002 -10.7998\r\n-c-12.5 -4.39941 -26.0996 -5.39941 -40.0996 -3.89941c-5.90039 -0.5 -11.7998 -0.700195 -18 -0.700195c-93.7002 0 -173 64 -196.9 151.399c-0.699219 0 -1.5 0.200195 -2.19922 0.200195c-5.60059 -44.2998 27.0996 -104.1 27.0996 -104.1s2 -3 13.2998 -20.2002\r\n-c-62.7998 33.2002 -64.5 131.2 -64.5 131.2c-15 5.59961 -67.2002 23.3994 -76.2998 37.8994c0 0 40.9004 -22.3994 76.2002 -27c-0.200195 0.300781 0.5 7.90039 0.5 7.90039c2.2002 30 12.5 53.4004 23.0996 71.4004c6.90039 33.7998 22.1006 64.2998 43.2998 89.8994\r\n-c3.7002 15.2998 9.60059 33.5 19.9004 52.7002c4.40039 8.40039 8.59961 13.7998 19.9004 19c74.8994 35 148.699 43.9004 224.5 4.5zM138.8 284.8c-7.59961 -11.2998 -13.7002 -23.5996 -18.8994 -36.3994c8.09961 8.59961 14.7998 14.1992 18.1992 16.6992\r\n-c-0.5 7.40039 0.700195 19.7002 0.700195 19.7002zM107.6 162.9c0.700195 -9.60059 2 -18.9004 4.2002 -28.1006l41.4004 -6.89941c-14.1006 42.0996 -15.7998 90.0996 -15.7998 90.0996c-16.5 -16 -25.4004 -37.9004 -29.8008 -55.0996zM115.5 120.1\r\n-c21.4004 -69.6992 81 -122.8 154.1 -134.399c-1 0.299805 -1.69922 0.5 -2.69922 1c0 0 -81 47.5 -108.301 124.3c-9.09961 1.5 -28.2998 5.90039 -43.0996 9.09961zM386 3.90039c63 32 106.6 98 106.8 174c0 107.399 -86.5996 194.5 -193 194.5\r\n-c-49.2998 0 -94.0996 -18.7002 -128.3 -49.5c-5.2002 -10.1006 -8.59961 -22.9004 -11.0996 -39.4004c52.5 44.5996 146 33.5 146 33.5c23.3994 -1 20.5996 -21.7002 20.3994 -28.0996c-85.2002 7.19922 -127 -17.2002 -168.399 -52.4004\r\n-c0 0 8.09961 -78.7998 26.7998 -110.8c107.8 -4.90039 189.8 53.7002 189.8 53.7002c10.2998 7.39941 19.4004 8.09961 21.4004 -4.7002c1.5 -10.4004 2.19922 -24.4004 -9.60059 -29.7998c-36 -16.8008 -75.5996 -27.3008 -115 -33\r\n-c-25.5996 -3.7002 -39.7998 -4.60059 -78 -3.90039c36.4004 -84.7002 127.5 -107.8 127.5 -107.8c28.5 -4.7002 50.2002 -1 64.7002 3.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sellcast\" unicode=\"&#xf2da;\" \r\n-d=\"M353.4 416c52.0996 0 94.6992 -42.5996 94.6992 -94.5996v-258.801c0 -52 -42.5996 -94.5996 -94.6992 -94.5996h-258.7c-52.1006 0 -94.7002 42.5996 -94.7002 94.7002v258.7c0 52 42.5996 94.5996 94.7002 94.5996h258.7zM303.4 99.5996\r\n-c27.8994 48.2002 11.1992 110.5 -37.2002 138.5c-18.6006 10.8008 0.0996094 -0.0996094 -18.5 10.7002c-25 14.4004 -46.2002 -23.2998 -21.6006 -37.5c18 -10.2002 0.800781 -0.399414 18.6006 -10.5996c27.5996 -16 37.2002 -51.7998 21.2998 -79.4004\r\n-c-16 -27.5996 -51.7998 -37.2002 -79.4004 -21.2998c-18.5996 10.7998 0.100586 -0.0996094 -18.5 10.7002c-10.2998 6 -23.5996 2.39941 -29.5 -7.90039l-15.6992 -27.2002c-12.6006 -21.7998 19.3994 -53 42.2998 -13.1992c48.2998 -27.7002 110.3 -11 138.2 37.1992z\r\n-M325.2 308.4c14.2998 24.7998 -23.4004 46.3994 -37.7002 21.5l-4.7998 -8.40039c-48.2998 27.7002 -110.3 11 -138.2 -37.2002c-27.7998 -48.2998 -11.0996 -110.6 37.0996 -138.399c18.6006 -10.8008 -0.0996094 0.0996094 18.5 -10.7002\r\n-c25 -14.4004 46.2002 23.2998 21.6006 37.5c-0.100586 0 -18.6006 10.5996 -18.6006 10.5996c-27.5996 16 -37.2998 51.7998 -21.2998 79.4004c16 27.5996 51.7998 37.2002 79.4004 21.2998c18.5996 -10.7998 -0.100586 0.0996094 18.5 -10.7002\r\n-c10.2002 -5.09961 20 -2.89941 26.5 3.60059c2.7002 2.69922 2 2 19 31.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"superpowers\" unicode=\"&#xf2dd;\" \r\n-d=\"M448 416l-87.2002 -87c39.7002 -38.7002 61.2002 -92.7002 57.7002 -148.2c-5.40039 -93 -76.9004 -167.3 -168.7 -179.8c-83.2998 -11 -166.5 -22 -249.8 -33l86.7998 86.7998c-39.7998 38.7002 -61.0996 92.7002 -57.7998 148.2c5.7002 93.2998 77 167.5 169 180\r\n-c83.2002 11 166.7 22 250 33zM368.3 183.7c4.40039 80 -56.7998 146.3 -136.1 151c-78.7002 4.7998 -148.5 -55.2998 -153 -134.5c-4.40039 -80 56.7998 -146.3 136.3 -151c78.7998 -4.7002 148.6 55 152.8 134.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wpexplorer\" unicode=\"&#xf2de;\" horiz-adv-x=\"512\" \r\n-d=\"M512 192c0 -141.2 -114.7 -256 -256 -256c-141.2 0 -256 114.7 -256 256s114.7 256 256 256s256 -114.7 256 -256zM480 192c0 123.2 -100.3 224 -224 224c-123.5 0 -224 -100.5 -224 -224s100.5 -224 224 -224s224 100.5 224 224zM160.9 323.4l86.8994 -37.1006\r\n-l-37.0996 -86.8994l-86.9004 37.0996zM270.9 154.3l46.5996 -94h-14.5996l-50 100l-48.9004 -100h-14l51.0996 106.9l-22.2998 9.39941l6 14l68.6006 -29.0996l-6 -14.2998zM259.1 270.6l68.6006 -29.3994l-29.4004 -68.2998l-68.2998 29.0996zM339.4 227.7\r\n-l54.5996 -23.1006l-23.4004 -54.2998l-54.2998 23.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meetup\" unicode=\"&#xf2e0;\" horiz-adv-x=\"512\" \r\n-d=\"M99 33.7002c1.09961 -5.7002 -2.2998 -11.1006 -8 -12.2998c-5.40039 -1.10059 -10.9004 2.2998 -12 8c-1.09961 5.39941 2.2998 11.0996 7.7002 12.2998c5.39941 1.2002 11.0996 -2.2998 12.2998 -8zM242.1 -37.7002c6.60059 4.60059 15.5 2.7998 19.7002 -3.7002\r\n-c4.60059 -6.59961 2.90039 -15.3994 -3.39941 -20c-6.60059 -4.59961 -15.4004 -2.89941 -20 3.7002c-4.30078 6.60059 -2.60059 15.4004 3.69922 20zM156.1 424.6c-6.2998 -1.5 -12.5 2.5 -13.8994 9.10059c-1.2002 6.2998 2.7998 12.5996 9.09961 14\r\n-c6.2998 1.5 12.6006 -2.5 13.7002 -9.10059c1.40039 -6.2998 -2.59961 -12.5996 -8.90039 -14zM34.4004 221.7c10 -7.10059 12.5996 -20.7998 5.69922 -31.2002c-6.89941 -10.2998 -20.5996 -12.7998 -30.5996 -5.7002c-10 6.90039 -12.5996 20.9004 -5.7002 30.9004\r\n-c6.90039 10.2998 20.6006 12.8994 30.6006 6zM306.4 392.6c-10.3008 -6.2998 -23.7002 -2.89941 -29.7002 7.40039c-6.2998 10.5996 -2.90039 24.2998 7.39941 30.5996c10.3008 6.30078 23.7002 2.90039 30 -7.69922c6 -10.3008 2.90039 -24 -7.69922 -30.3008zM115.3 334.6\r\n-c-7.5 -5.19922 -18 -3.5 -23.0996 4.30078c-5.10059 7.69922 -3.40039 18.2998 4.2998 23.6992c7.40039 5.10059 18 3.40039 23.0996 -4.2998c5.10059 -7.7002 3.40039 -18.2998 -4.2998 -23.7002zM487.6 178.6c7.40039 1.40039 14.8008 -3.5 16.3008 -10.8994\r\n-c1.69922 -7.7002 -3.2002 -15.2002 -10.6006 -16.6006c-7.39941 -1.69922 -14.8994 3.2002 -16.2998 10.6006c-1.7002 7.7998 3.2002 15.2002 10.5996 16.8994zM527.3 235.4c1.40039 -5.7002 -2.2998 -11.1006 -7.7002 -12.6006\r\n-c-5.69922 -1.09961 -11.1992 2.60059 -12.2998 8c-1.09961 5.7002 2.2998 11.5 8 12.6006c5.40039 1.09961 10.9004 -2.30078 12 -8zM447 309.1c8.2998 6 20 3.80078 25.7002 -4.89941c5.7002 -8.60059 3.7002 -20.2998 -4.60059 -26.2998\r\n-c-8.59961 -5.7002 -20.2998 -3.7002 -26 4.89941c-5.69922 8.60059 -3.69922 20.2998 4.90039 26.2998zM440.7 169.7c26.2998 -43.1006 15.0996 -100 -26.2998 -129.101c-17.4004 -12.2998 -37.1006 -17.6992 -56.9004 -17.0996\r\n-c-12 -47.0996 -69.4004 -64.5996 -105.1 -32.5996c-1.10059 -0.900391 -2.60059 -1.7002 -3.7002 -2.90039c-39.1006 -27.0996 -92.2998 -17.4004 -119.4 22.2998c-9.7002 14.2998 -14.5996 30.6006 -15.0996 46.9004c-65.4004 10.8994 -90 94 -41.1006 139.7\r\n-c-28.2998 46.8994 0.600586 107.399 53.4004 114.899c25.0996 66.2002 107.6 97.6006 163.6 54.2002c67.4004 22.2998 136.301 -29.4004 130.9 -101.1c41.0996 -12.6006 52.7998 -66.9004 19.7002 -95.2002zM370.7 95.4004\r\n-c-3.10059 20.5996 -40.9004 4.59961 -43.1006 27.0996c-3.09961 32 43.7002 101.1 40 128c-3.39941 24 -19.3994 29.0996 -33.3994 29.4004c-13.4004 0.299805 -16.9004 -2 -21.4004 -4.60059c-2.89941 -1.7002 -6.59961 -4.89941 -11.7002 0.299805\r\n-c-6.2998 6 -11.0996 11.7002 -19.3994 12.9004c-12.2998 2 -17.7002 -2 -26.6006 -9.7002c-3.39941 -2.89941 -12 -12.8994 -20 -9.09961c-3.39941 1.7002 -15.3994 7.7002 -24 11.3994c-16.2998 7.10059 -40 -4.59961 -48.5996 -20\r\n-c-12.9004 -22.8994 -38 -113.1 -41.7002 -125.1c-8.59961 -26.5996 10.9004 -48.5996 36.9004 -47.0996c11.0996 0.599609 18.2998 4.59961 25.3994 17.3994c4 7.40039 41.7002 107.7 44.6006 112.601c2 3.39941 8.89941 8 14.5996 5.09961\r\n-c5.7002 -3.09961 6.90039 -9.40039 6 -15.0996c-1.09961 -9.7002 -28 -70.9004 -28.8994 -77.7002c-3.40039 -22.9004 26.8994 -26.6006 38.5996 -4c3.7002 7.09961 45.7002 92.5996 49.4004 98.2998c4.2998 6.2998 7.39941 8.2998 11.6992 8\r\n-c3.10059 0 8.30078 -0.900391 7.10059 -10.9004c-1.40039 -9.39941 -35.1006 -72.2998 -38.9004 -87.6992c-4.59961 -20.6006 6.60059 -41.4004 24.9004 -50.6006c11.3994 -5.7002 62.5 -15.7002 58.5 11.1006zM376.4 3.09961c10.5996 7.5 24.8994 4.60059 32.2998 -6\r\n-c7.09961 -10.5996 4.59961 -25.1992 -6 -32.5996c-10.6006 -7.09961 -24.9004 -4.59961 -32 6c-7.2002 10.5996 -4.60059 25.2002 5.7002 32.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"font-awesome-alt\" unicode=\"&#xf35c;\" \r\n-d=\"M339.3 276.8c5.40039 0 9.5 -3 7.7002 -7.09961v-134.4c0 -4.2002 -3 -6 -7.2002 -7.7998c-15.5996 -7.09961 -33.5 -13.7002 -52 -13.7002c-26.2998 0 -38.2002 16.1006 -69.2998 16.1006c-22.7002 0 -46 -8.30078 -65.7002 -16.7002\r\n-c-0.599609 -0.600586 -1.7998 -1.2002 -3 -1.2002v-44.2002c0 -1.7998 0 -3 -0.599609 -4.7998v-1.2998c-2.40039 -7.7002 -9.5 -13.7002 -18.5 -13.7002c-10.7002 0 -19.7002 8.90039 -19.7002 19.7002v212.1c-7.7002 6 -12.5 15.5 -12.5 25.7002\r\n-c0 18 14.2998 32.2998 32.2998 32.2998s32.2998 -14.3994 32.2998 -32.2998c0 -10.7998 -4.69922 -19.7002 -12.5 -25.7002v-17.8994c1.2002 0.599609 3 1.19922 4.80078 1.7998c17.8994 7.09961 39.3994 13.7002 59.6992 13.7002\r\n-c22.1006 0 39.4004 -5.90039 59.1006 -13.7002c4.09961 -1.7998 8.2998 -2.40039 12.5 -2.40039c22.7002 0 46.5996 15.5 52.5996 15.5zM397.8 416c27.5 0 50.2002 -22.7002 50.2002 -50.2002v-347.6c0 -27.5 -22.7002 -50.2002 -50.2002 -50.2002h-347.6\r\n-c-27.5 0 -50.2002 22.7002 -50.2002 50.2002v347.6c0 27.5 22.7002 50.2002 50.2002 50.2002h347.6zM412.1 18.2998v347.601c0 7.69922 -6.5 14.2998 -14.2998 14.2998v-0.100586h-347.6c-7.7002 0 -14.2998 -6.5 -14.2998 -14.2998v-347.5\r\n-c0 -7.7002 6.5 -14.2998 14.2998 -14.2998h347.6c7.7002 0 14.2998 6.5 14.2998 14.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"accessible-icon\" unicode=\"&#xf368;\" \r\n-d=\"M423.9 192.2l-12.9004 -157.3c-3.2998 -40.7002 -63.9004 -35.1006 -60.5996 4.89941l10 122.5l-41.1006 -2.2998c10.1006 -20.7002 15.7998 -43.9004 15.7998 -68.5c0 -41.2002 -16.0996 -78.7002 -42.2998 -106.5l-39.2998 39.2998\r\n-c57.9004 63.7002 13.0996 167.2 -74 167.2c-25.9004 0 -49.5 -9.90039 -67.2002 -26l-39.2998 39.2998c22 20.7002 50.0996 35.1006 81.4004 40.2002l75.2998 85.7002l-42.6006 24.7998l-51.5996 -46c-30 -26.7998 -70.5996 18.5 -40.5 45.4004l68 60.6992\r\n-c9.7998 8.80078 24.0996 10.2002 35.5 3.60059c0 0 139.3 -80.9004 139.5 -81.1006c16.2002 -10.0996 20.7002 -36 6.09961 -52.5996l-58.3994 -66.5l106.1 5.90039c18.5 1.09961 33.6006 -14.4004 32.1006 -32.7002zM359 346.2\r\n-c-28.0996 0 -50.9004 22.7998 -50.9004 50.8994c0 28.1006 22.8008 50.9004 50.9004 50.9004s50.9004 -22.7998 50.9004 -50.9004c0 -28.0996 -22.8008 -50.8994 -50.9004 -50.8994zM179.6 -8.5c20.8008 0 40.1006 6.40039 56.1006 17.2998l39.7002 -39.7002\r\n-c-100.7 -78.8994 -251.4 -8.19922 -251.4 122.5c0 36.1006 12.4004 69.4004 33.2002 95.7002l39.7002 -39.7002c-44.7002 -65.5 2.09961 -156.1 82.6992 -156.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"accusoft\" unicode=\"&#xf369;\" horiz-adv-x=\"640\" \r\n-d=\"M322.1 196c-1.69922 -1.59961 -89.5996 -82.5 -90.1992 -83.2998l-92.6006 -33.7998c-4.7998 -2 -7.59961 -3.7002 -7 -8.90039c0.200195 -1.5 0.600586 -22.5996 1 -27.7002c-0.700195 -0.5 -0.0996094 0 -0.599609 -0.599609c0 0 -113.7 -36.6006 -114.5 -36.6006\r\n-c-14.1006 -5.09961 -22.7002 -8.2998 -15.7002 1.7002c1.2998 1.7998 234.4 231.601 243.4 240.9c13 13.5 25 15.0996 25 15.0996l51.1992 -65.7998v-1zM482.2 75.9004c-5.7002 6.89941 -232.2 297.1 -239.9 306.6c-13.7002 17.2002 0 16.7998 19.2002 16.9004\r\n-c9.7002 0.0996094 106.3 0.599609 116.5 0.599609c24.0996 0.0996094 28.7002 -0.599609 38.4004 -12.7998c2.09961 -2.7002 205.1 -245.8 207.199 -248.3c5.5 -6.7002 15.2002 -19.1006 7.2002 -23.4004c-2.39941 -1.2998 -114.6 -47.7002 -117.8 -48.9004\r\n-c-10.0996 -4 -17.5 -6.7998 -30.7998 9.30078zM634.9 74.2998c6 -1.39941 7.09961 -4.2002 1.69922 -8.2002c-2 -1.39941 -123.699 -76.5996 -125.8 -77.7998c-15.0996 -8.7998 -38 -1.59961 -53.5996 1.7002c-7.10059 1.5 -305.3 68.2998 -308 69.0996\r\n-c-2.60059 0.900391 -4.40039 1 -4.60059 3.5c-0.299805 4 6 5.60059 11.1006 7.60059c5 1.89941 145.3 52.5996 150.2 54.7002c4.7998 2.09961 11.2998 2.69922 14.3994 2.89941c4.90039 0.299805 59.9004 -8.39941 65.2998 -9.2998l57.1006 -74\r\n-c9.7998 -11.4004 20.7002 -21.9004 36.7002 -14.5996c2.5 1.19922 117.5 51.5996 117.5 51.5996c13.3994 -2.5 35.6992 -6.90039 38 -7.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adversal\" unicode=\"&#xf36a;\" horiz-adv-x=\"512\" \r\n-d=\"M482.1 416c24.5 0 29.9004 -5.59961 29.9004 -30.2002v-388.1c0 -24.5 -5.5 -29.7002 -29.9004 -29.7002h-453.399c-22.9004 0 -28.7002 5.59961 -28.7002 28.9004v390.199c0 23 5.7998 28.9004 28.7002 28.9004h453.399zM178.4 227.7\r\n-c9.39941 -7.2002 12.3994 -17.1006 11.2998 -27.2998c-1.7998 -19.1006 -75.7998 -11.4004 -114 -30.9004c-27.2002 -13.9004 -42.7002 -41.7002 -39.6006 -71c6.7002 -64.7002 89.6006 -79.7002 147 -43.2998c4.60059 3.2002 8.30078 4.89941 11.9004 1\r\n-c2.09961 -2.60059 2 -4 3.90039 -6.2002c7.2998 -9.59961 38.1992 -14.0996 46.5996 -7.40039c3.09961 2.80078 4.59961 6.30078 2.7002 10.7002c-13.6006 30.5 -6.60059 63 -9.2998 88.7998c0 69.3008 6.39941 111.7 -34.5 128.5\r\n-c-41.9004 17.4004 -84.2002 16.6006 -125.301 -4.7998c-16.2998 -9 -53.6992 -52.8994 -24.8994 -64.2998c5.2998 -2.2998 12.7998 -4 22.5 -5.5c8.2002 -1.2002 13.2002 -2.7998 17.5 8.2998c12.0996 32.1006 56.7002 43.6006 84.2002 23.4004zM465.1 5.7002\r\n-c0 14.2998 -9.7998 9.89941 -16.5996 9.89941c-132.3 0.400391 -264.5 0.400391 -396.8 0c-6.60059 0 -16.7002 4.80078 -17.1006 -9.09961c-0.399414 -15.5 10.4004 -10.7002 17.8008 -10.7002h394.899c6.7002 0 17.7998 -5.2002 17.7998 9.90039zM468.9 346.2\r\n-c0 0.200195 0 0.299805 0.0996094 0.5c0 9.89941 -3.5 15.0996 -13.5996 14.2998c-3.10059 -0.400391 -6.60059 0 -9.7002 0c-26.1006 0 -26 0 -26 -26.2002v-71c-79.2002 45.6006 -124.3 -6.59961 -136.101 -30.5c-16.3994 -32.8994 -21.7998 -66.5996 -15.6992 -100\r\n-c16.2998 -92.2998 91 -114.899 144.399 -85.2002c4.60059 2.80078 6.60059 7.5 12.4004 -1.19922c8.59961 -12.7002 23.7002 -5.2002 36.0996 -5.60059c7.40039 0 8.10059 8.2002 8.10059 13.9004v291zM417.4 113.9c-19.5 -47.6006 -72.9004 -43.3008 -90 -5.2002\r\n-c-15.1006 33.2998 -15.5 68.2002 0.399414 101.5c16.2998 34.0996 59.7002 35.7002 81.5 4.7998c20.6006 -28.7998 14.9004 -84.5996 8.10059 -101.1zM122.6 78.5996c-7.5 1.30078 -33 3.30078 -33.6992 27.8008c-0.400391 13.8994 7.7998 23 19.7998 25.7998\r\n-c24.3994 5.89941 49.2998 9.89941 73.7002 14.7002c8.89941 2 7.39941 -4.40039 7.7998 -9.5c1.39941 -33 -26.1006 -59.2002 -67.6006 -58.8008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"affiliatetheme\" unicode=\"&#xf36b;\" horiz-adv-x=\"512\" \r\n-d=\"M159.7 210.6c-51.2998 -70.8994 -116.601 -110.8 -145.7 -89.1992c-29.2002 21.6992 -11.2002 96.5996 40.2002 167.5c51.2998 70.8994 116.6 110.8 145.7 89.1992c29.0996 -21.5996 11.0996 -96.5996 -40.2002 -167.5zM510.9 267.9\r\n-c0.699219 -8.2002 1.09961 -16.5 1 -25c0 -151.801 -121.601 -274.9 -271.601 -274.9c-82.8994 0 -157.2 37.5996 -207 96.9004c71.2998 19.3994 130.5 68.3994 164.101 133.199c7.69922 -32.5996 24 -58.5996 49 -73.7998c72.5996 -44.0996 190.699 20.2002 264.5 143.601z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"algolia\" unicode=\"&#xf36c;\" \r\n-d=\"M229.3 265.4c49.2002 0 89.2002 -39.9004 89.2002 -89.2002s-39.9004 -89.2002 -89.2002 -89.2002s-89.2002 39.9004 -89.2002 89.2002s39.9004 89.2002 89.2002 89.2002zM292 208.8c1.2998 0.700195 1.7998 2.40039 1.09961 3.7002\r\n-c-12.1992 21.4004 -34.8994 36.0996 -61.0996 37.0996c-1.40039 0.100586 -2.7002 -1.09961 -2.7002 -2.59961v-66.5c0 -1.90039 2 -3.2002 3.7998 -2.2998zM389.1 416c32.5 0 58.9004 -26.4004 58.8008 -58.9004v-330.199c0 -32.5 -26.3008 -58.9004 -58.9004 -58.9004\r\n-h-330.1c-32.5 0 -58.9004 26.4004 -58.9004 59v330.1c0 32.5 26.4004 58.9004 58.9004 58.9004h330.199zM186.5 331.3h0.0996094v-15.7998c0 -1.7002 1.7002 -3 3.40039 -2.5c12.7002 3.7002 25.9004 5.5 39.4004 5.5c13 0 25.7998 -1.7002 38.0996 -5.09961\r\n-c1.59961 -0.5 3.2998 0.699219 3.2998 2.5v15.3994c0 10.7998 -8.7002 19.5 -19.5 19.5h-45.2998c-10.7998 0 -19.5 -8.7002 -19.5 -19.5zM102.1 294.3c-7.59961 -7.59961 -7.59961 -19.8994 0 -27.3994l7.7002 -7.7002c1.10059 -1.2002 3 -1 4 0.299805\r\n-c4.40039 6.09961 9.40039 12 14.7998 17.4004c5.5 5.5 11.4004 10.3994 17.6006 14.8994c1.2998 1 1.39941 2.90039 0.299805 4l-7.7002 7.7002c-7.59961 7.59961 -19.8994 7.59961 -27.5 0zM229.3 49.5c69.9004 0 126.601 56.7998 126.601 126.6\r\n-c0 70 -56.6006 126.601 -126.601 126.601c-69.8994 0 -126.6 -56.7002 -126.6 -126.601c0 -69.8994 56.5996 -126.6 126.6 -126.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"amilia\" unicode=\"&#xf36d;\" \r\n-d=\"M240.1 416c134.101 0 191.9 -55.7002 192 -136v-296.6c0 -3 -1 -8.10059 -5.09961 -9.10059c-4 -1 -57.2998 -0.700195 -66.5 -0.700195s-56.7998 1 -59.9004 2c-4 0.900391 -6.09961 6.10059 -6.09961 9.10059v25.3994\r\n-c-39.5996 -21.3994 -105.5 -42.0996 -153.3 -42.0996c-109.7 0 -124.9 85.7002 -124.9 104s-5.09961 95.5 30.4004 111.8c31.5 13.2002 156.3 36.5 243.7 47.7998v38.5c0 44.7002 -1 73.1006 -58.9004 73.1006c-55.7998 0 -119.8 -25.4004 -152.3 -47.7002\r\n-c-6.10059 -4.09961 -16.2002 -4.09961 -20.2998 6.09961c-5.10059 12.2002 -9.10059 34.5 -10.2002 39.6006c-1.90039 10.2002 2.09961 16.2998 7.2002 19.3994c52.6992 38.5 122.3 55.4004 184.199 55.4004zM290.3 68v106.7c-44.7002 -4.10059 -95.5 -20.2998 -119.8 -33.5\r\n-c-21.2998 -10.2002 -18.2998 -40.7002 -18.2998 -52.9004c0.0996094 -11.2002 6.2002 -44.7002 59 -44.7002c30.3994 0 57.7002 11.2002 79.0996 24.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angrycreative\" unicode=\"&#xf36e;\" horiz-adv-x=\"640\" \r\n-d=\"M640 209.8l-3.2002 -28.2002l-34.5 -2.2998l-2 -18.0996l34.5 2.2998l-3.2002 -28.2002l-34.3994 -2.2002l-2.2998 -20.0996l34.3994 2.2002l-3 -26.1006l-64.7002 -4.09961l12.7002 113.2l-47.2998 -115.4l-31.9004 -2l-23.7998 117.8l30.2998 2l13.6006 -79.3994\r\n-l31.7002 82.3994zM426.8 76.5l12.7998 120l28.4004 1.90039l-12.9004 -120.101zM162 59.9004l-19.4004 36l-3.5 -37.4004l-28.1992 -1.7002l2.69922 29.1006c-11 -18 -32 -34.3008 -56.8994 -35.8008c-32.7998 -2 -59.7002 20.9004 -56.4004 58.2002\r\n-c2.60059 29.2998 26.7002 62.7998 67.5 65.4004c37.7002 2.39941 47.6006 -23.2002 51.2998 -28.7998l2.80078 30.7998l38.8994 2.5c20.1006 1.2998 38.7002 -3.7002 42.5 -23.7002l2.60059 26.5996l64.7998 4.2002l-2.7002 -27.8994l-36.4004 -2.40039l-1.69922 -17.9004\r\n-l36.3994 2.30078l-2.7002 -27.9004l-36.3994 -2.2998l-1.90039 -19.9004l36.2998 2.2998l-2.09961 -20.7998l55 117.2l23.7998 1.59961l32.1006 -110.6l8.89941 85.5996l-22.2998 -1.39941l2.90039 27.8994l75 4.90039l-3 -28l-24.3008 -1.59961l-9.69922 -91.9004\r\n-l-58 -3.7002l-4.30078 15.6006l-39.3994 -2.5l-8 -16.3008zM117.7 130.1l-26.4004 -1.69922c-6.7002 12.3994 -14.3994 16.5996 -26.2998 15.7998c-19 -1.2002 -33.2998 -17.5 -34.5996 -33.2998c-1.40039 -16 7.2998 -32.5 28.6992 -31.2002\r\n-c12.8008 0.799805 21.3008 8.59961 28.9004 18.8994l27 1.7002zM173.8 137.8c1.2002 12.9004 -7.59961 13.6006 -26.0996 12.4004l-2.7002 -28.5c14.2002 0.899414 27.5 2.09961 28.7998 16.0996zM194.9 67l5.7998 60c-5 -13.5 -14.7002 -21.0996 -27.9004 -26.5996z\r\n-M330.3 112l-7.89941 37.7998l-15.8008 -39.2998zM160.2 186.6l-4.2998 17.5l-39.6006 -2.59961l-8.09961 -18.2002l-31.9004 -2.09961l57 121.899l23.9004 1.60059l30.7002 -102l9.89941 104.7l27 1.7998l37.7998 -63.6006l6.5 66.6006l28.5 1.89941l-4 -41.1992\r\n-c7.40039 13.5 22.9004 44.6992 63.6006 47.5c40.5 2.7998 52.3994 -29.3008 53.3994 -30.3008l3.30078 32l39.2998 2.7002c12.7002 0.900391 27.7998 -0.299805 36.2998 -9.7002l-4.40039 11.9004l32.2002 2.2002l12.9004 -43.2002l23 45.7002l31 2.2002l-43.6006 -78.4004\r\n-l-4.7998 -44.2998l-28.3994 -1.90039l4.7998 44.2998l-15.7998 43c1 -22.2998 -9.2002 -40.0996 -32 -49.5996l25.1992 -38.7998l-36.3994 -2.40039l-19.2002 36.7998l-4 -38.2998l-28.4004 -1.89941l3.30078 31.5c-6.7002 -9.30078 -19.7002 -35.4004 -59.6006 -38\r\n-c-26.2002 -1.7002 -45.5996 10.2998 -55.3994 39.1992l-4 -40.2998l-25 -1.59961l-37.6006 63.2998l-6.2998 -66.2002zM436.8 268.7c10.2002 0.700195 17.5 2.09961 21.6006 4.2998c4.5 2.40039 7 6.40039 7.59961 12.0996\r\n-c0.599609 5.30078 -0.599609 8.80078 -3.40039 10.4004c-3.59961 2.09961 -10.5996 2.7998 -22.8994 2zM327.7 234c5.59961 -5.90039 12.7002 -8.5 21.2998 -7.90039c4.7002 0.300781 9.09961 1.80078 13.2998 4.10059c5.5 3 10.6006 8 15.1006 14.2998l-34.2002 -2.2998\r\n-l2.39941 23.8994l63.1006 4.30078l1.2002 12l-31.2002 -2.10059c-4.10059 3.7002 -7.7998 6.60059 -11.1006 8.10059c-4 1.69922 -8.09961 2.7998 -12.1992 2.5c-8 -0.5 -15.3008 -3.60059 -22 -9.2002c-7.7002 -6.40039 -12 -14.5 -12.9004 -24.4004\r\n-c-1.09961 -9.59961 1.40039 -17.2998 7.2002 -23.2998zM126.4 225.8l23.7998 1.60059l-8.2998 37.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"app-store\" unicode=\"&#xf36f;\" horiz-adv-x=\"512\" \r\n-d=\"M255.9 327.1l9.09961 15.7002c5.59961 9.7998 18.0996 13.1006 27.9004 7.5c9.7998 -5.59961 13.0996 -18.0996 7.5 -27.8994l-87.5 -151.5h63.2998c20.5 0 32 -24.1006 23.0996 -40.8008h-185.5c-11.2998 0 -20.3994 9.10059 -20.3994 20.4004\r\n-s9.09961 20.4004 20.3994 20.4004h52l66.6006 115.399l-20.8008 36.1006c-5.59961 9.7998 -2.2998 22.1992 7.5 27.8994c9.80078 5.60059 22.2002 2.2998 27.9004 -7.5zM177.2 109.1l-19.6006 -34c-5.59961 -9.7998 -18.0996 -13.0996 -27.8994 -7.5\r\n-c-9.7998 5.60059 -13.1006 18.1006 -7.5 27.9004l14.5996 25.2002c16.4004 5.09961 29.7998 1.2002 40.4004 -11.6006zM346.1 170.8h53.1006c11.2998 0 20.3994 -9.09961 20.3994 -20.3994c0 -11.3008 -9.09961 -20.4004 -20.3994 -20.4004h-29.5l19.8994 -34.5\r\n-c5.60059 -9.7998 2.30078 -22.2002 -7.5 -27.9004c-9.7998 -5.59961 -22.1992 -2.2998 -27.8994 7.5c-33.5 58.1006 -58.7002 101.601 -75.4004 130.601c-17.0996 29.5 -4.89941 59.0996 7.2002 69.0996c13.4004 -23 33.4004 -57.7002 60.0996 -104zM256 440\r\n-c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM472 192c0 119.9 -97.2998 216 -216 216c-119.9 0 -216 -97.2998 -216 -216c0 -119.9 97.2998 -216 216 -216c119.9 0 216 97.2998 216 216z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"app-store-ios\" unicode=\"&#xf370;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM127 63.5l19.2998 33.2998c-10.2998 12.5 -23.5 16.2998 -39.5996 11.4004l-14.2998 -24.7002\r\n-c-5.5 -9.5 -2.30078 -21.7998 7.2998 -27.2998c9.5 -5.5 21.7998 -2.2998 27.2998 7.2998zM265.9 117.4c8.7998 16.2998 -2.5 40 -22.7002 40h-62.1006l85.8008 148.6c5.5 9.5 2.2998 21.7998 -7.30078 27.2998c-9.5 5.5 -21.7998 2.2998 -27.2998 -7.2998\r\n-l-8.89941 -15.4004l-8.90039 15.4004c-5.5 9.5 -17.7002 12.7998 -27.2998 7.2998c-9.5 -5.5 -12.7998 -17.7002 -7.2998 -27.2998l20.5 -35.4004l-65.4004 -113.199h-51c-11 0 -20 -9 -20 -20s9 -20 20 -20h181.9zM364 117.4c11 0 20 8.89941 20 20c0 11 -9 20 -20 20h-52\r\n-c-26.2002 45.2998 -45.7998 79.2998 -58.9004 102c-11.8994 -9.80078 -23.7998 -38.8008 -7.09961 -67.8008c16.5 -28.3994 41.0996 -71.1992 74 -128.1c5.5 -9.5 17.7002 -12.7998 27.2998 -7.2998c9.5 5.5 12.7998 17.7002 7.2998 27.2998l-19.5996 33.9004h29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"apper\" unicode=\"&#xf371;\" horiz-adv-x=\"640\" \r\n-d=\"M42.0996 208.9c22.2002 0 29 -2.80078 33.5 -14.6006h0.800781v22.9004c0 11.2998 -4.80078 15.3994 -17.9004 15.3994c-11.2998 0 -14.4004 -2.5 -15.0996 -12.7998h-38.6006c0.299805 13.9004 1.5 19.1006 5.7998 24.4004\r\n-c7.30078 8.7998 18.9004 11.7998 46.1006 11.7998c33 0 47.0996 -5 53.8994 -18.9004c2 -4.2998 4 -15.5996 4 -23.6992v-76.3008h-38.2998l1.2998 19.1006h-1c-5.2998 -15.6006 -13.5996 -20.4004 -35.5 -20.4004c-30.2998 0 -41.0996 10.1006 -41.0996 37.2998\r\n-c0 25.2002 12.2998 35.8008 42.0996 35.8008zM59.2002 160.8c13.0996 0 16.8994 3 16.8994 13.4004c0 9.09961 -4.2998 11.5996 -19.5996 11.5996c-13.0996 0 -17.9004 -3 -17.9004 -12.0996c-0.0996094 -10.4004 3.7002 -12.9004 20.6006 -12.9004zM137 255.7h38.2998\r\n-l-1.5 -20.6006h0.799805c9.10059 17.1006 15.9004 20.9004 37.5 20.9004c14.4004 0 24.7002 -3 31.5 -9.09961c9.80078 -8.60059 12.8008 -20.4004 12.8008 -48.1006c0 -30 -3 -43.0996 -12.1006 -52.8994c-6.7998 -7.30078 -16.3994 -10.1006 -33.2002 -10.1006\r\n-c-20.3994 0 -29.1992 5.5 -33.7998 21.2002h-0.799805v-70.2998h-39.5v169zM217.9 195c0 27.5 -3.30078 32.5 -20.7002 32.5c-16.9004 0 -20.7002 -5 -20.7002 -28.7002c0 -28 3.5 -33.5 21.2002 -33.5c16.3994 0 20.2002 5.60059 20.2002 29.7002zM275.8 255.7h38.2998\r\n-l-1.5 -20.6006h0.800781c9.09961 17.1006 15.8994 20.9004 37.5 20.9004c14.3994 0 24.6992 -3 31.5 -9.09961c9.7998 -8.60059 12.7998 -20.4004 12.7998 -48.1006c0 -30 -3 -43.0996 -12.1006 -52.8994c-6.7998 -7.30078 -16.3994 -10.1006 -33.2998 -10.1006\r\n-c-20.3994 0 -29.2002 5.5 -33.7998 21.2002h-0.799805v-70.2998h-39.5v169h0.0996094zM356.7 195c0 27.5 -3.2998 32.5 -20.7002 32.5c-16.9004 0 -20.7002 -5 -20.7002 -28.7002c0 -28 3.5 -33.5 21.2002 -33.5c16.4004 0 20.2002 5.60059 20.2002 29.7002zM410.5 198.8\r\n-c0 25.4004 3.2998 37.7998 12.2998 45.7998c8.7998 8.10059 22.2002 11.3008 45.1006 11.3008c42.7998 0 55.6992 -12.8008 55.6992 -55.7002v-11.1006h-75.2998c-0.299805 -2 -0.299805 -4 -0.299805 -4.7998c0 -16.8994 4.5 -21.8994 20.0996 -21.8994\r\n-c13.9004 0 17.9004 3 17.9004 13.8994h37.5v-2.2998c0 -9.7998 -2.5 -18.9004 -6.7998 -24.7002c-7.2998 -9.7998 -19.6006 -13.5996 -44.2998 -13.5996c-27.5 0 -41.6006 3.2998 -50.6006 12.2998c-8.5 8.5 -11.2998 21.2998 -11.2998 50.7998zM486.9 210.4\r\n-c-0.300781 1.7998 -0.300781 3.2998 -0.300781 3.7998c0 12.2998 -3.2998 14.5996 -19.5996 14.5996c-14.4004 0 -17.0996 -3 -18.0996 -15.0996l-0.300781 -3.2998h38.3008zM542.5 255.7h38.2998l-1.7998 -19.9004h0.700195\r\n-c6.7998 14.9004 14.3994 20.2002 29.7002 20.2002c10.7998 0 19.0996 -3.2998 23.3994 -9.2998c5.2998 -7.2998 6.7998 -14.4004 6.7998 -34c0 -1.5 0 -5 0.200195 -9.2998h-35c0.299805 1.7998 0.299805 3.2998 0.299805 4c0 15.3994 -2 19.3994 -10.2998 19.3994\r\n-c-6.2998 0 -10.7998 -3.2998 -13.0996 -9.2998c-1 -3 -1 -4.2998 -1 -12.2998v-68h-38.2998v118.5h0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"asymmetrik\" unicode=\"&#xf372;\" horiz-adv-x=\"576\" \r\n-d=\"M517.5 138.8c-13.9004 -14.2998 -30.4004 -27.7002 -48.9004 -39.7998l73.4004 -110.4h-101.6l-45.9004 71.8008c-17.5996 -7.2002 -35.9004 -13.4004 -54.5 -18.7002l32.5996 -53.1006h-135.5l22.8008 37.1006c-23.3008 -2.7002 -46.4004 -3.7002 -68.6006 -2.7002\r\n-l-22 -34.4004h-101.6l34.5 51.7002c-45 17.9004 -68.9004 47.9004 -68.4004 83c0.299805 25.7998 14 54.2998 41.7002 82.9004c38.9004 40 96.5 72.5996 161.6 92.8994c-22.2998 -8.09961 -42 -18.5 -62 -30.6992c-31.1992 -16.2002 -58.6992 -35.9004 -79.5 -58.1006\r\n-c-57.3994 -61 -46.5 -121.8 19.1006 -151.2l190.2 285.5l150.899 -226.399c13 9.5 24.7998 19.7998 35 30.5996c98 104.2 53.7002 207.9 -98.7998 231.7c-68.2998 10.5996 -146.8 5.7002 -221.3 -14.7998c-60.1006 -10 -118.7 -31.7002 -170.7 -58.2002\r\n-c118.1 66.9004 277.9 102.1 406.6 82.4004c110 -16.8008 170.2 -69.5 169.4 -135c-0.400391 -36.1006 -19.7002 -76.1006 -58.5 -116.101zM329.9 58.2998c18.3994 5.2998 36.5 11.7998 53.6992 19.2002l-78.6992 123l-101.9 -159.3\r\n-c22.5 -0.700195 45.7998 0.899414 69.2002 4.39941l32.7002 53.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"audible\" unicode=\"&#xf373;\" horiz-adv-x=\"640\" \r\n-d=\"M640 248.1v-54l-320 -200l-320 199.9v54l320 -200zM445.5 176.1c-70.7998 94.4004 -200.5 110.7 -290.2 36.3008c-2.59961 -2.2002 -5.2002 -4.40039 -7.7002 -6.7002h-0.299805c37.1006 55.7002 100.601 92.3994 172.601 92.3994s135.5 -36.7998 172.699 -92.5996z\r\n-M225.4 157.3c21 29.6006 55.5 49 94.3994 49c39.2002 0 73.9004 -19.5996 94.7998 -49.5l-45.3994 -28.3994c-21.2002 29.1992 -52 47.5996 -86.4004 47.5996c-20.8994 0 -40.5 -6.7998 -57.3994 -18.7002zM103.6 286.9c-11.5 -9.10059 -24.2998 -22.1006 -34.1992 -32.6006\r\n-c53.8994 82.1006 147 135.601 250.5 135.601c104.899 0 197.199 -54 250.699 -135.7l-48.7998 -30.4004l-0.700195 1c-99.2998 138.5 -285.699 166.4 -417.5 62.1006zM570.6 254.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"avianex\" unicode=\"&#xf374;\" horiz-adv-x=\"512\" \r\n-d=\"M453.1 416c39 0 64.8008 -31.2002 57.8008 -69.7998l-56.7002 -308.5c-7.10059 -38.5 -44.4004 -69.7002 -83.2998 -69.7002h-312c-39 0 -64.8008 31.2002 -57.7002 69.7002l56.5996 308.6c7.10059 38.5 44.4004 69.7002 83.2998 69.7002h312zM394.9 68.7002\r\n-l6.2998 7.89941l-94.9004 119.4l-4.5 7.2998c19.7998 14.2002 33.5 24.2998 35.2998 25.6006c7.90039 6.59961 6.30078 20.7998 -2.69922 31.2998c-9.2002 10.7998 -23 14.3994 -30.7002 7.89941c0 0 -14.4004 -13.5996 -33.7998 -32.3994l-4.90039 4.5l-103.1 112.399\r\n-l-8.90039 -4.7998l-18.7998 -28.8994l68.7998 -99.8008l20.5 -29.5996c-12 -12.2998 -23.5 -24.4004 -32.7998 -34.9004l-58 31.1006l-15.7002 -15.4004l52.4004 -48.0996l40.5996 -61l17.9004 12.7002l-22.1006 64.1992c12.5 7.60059 27 17.1006 41.7002 27.1006\r\n-l115.4 -110z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"aws\" unicode=\"&#xf375;\" horiz-adv-x=\"640\" \r\n-d=\"M180.41 244.99c-0.719727 -22.6504 10.5996 -32.6807 10.8799 -39.0498c-0.238281 -2.31543 -2.0752 -5.12402 -4.09961 -6.27051l-12.8008 -8.95996c-1.39941 -0.981445 -3.92188 -1.8418 -5.62988 -1.91992c-0.429688 0.0195312 -8.18945 -1.83008 -20.4795 25.6104\r\n-c-13.0283 -16.2627 -40.5127 -29.4609 -61.3496 -29.4609c-0.347656 0 -0.913086 0.00488281 -1.26074 0.0107422c-16.2803 -0.890625 -60.4004 9.24023 -58.1299 56.21c-1.58984 38.2803 34.0596 62.0596 70.9297 60.0498\r\n-c7.10059 -0.0195312 21.6006 -0.370117 46.9902 -6.26953v15.6191c2.69043 26.46 -14.7002 46.9902 -44.8096 43.9102c-2.40039 -0.00976562 -19.4004 0.5 -45.8408 -10.1094c-7.35938 -3.37988 -8.2998 -2.82031 -10.75 -2.82031\r\n-c-7.40918 0 -4.35938 21.4795 -2.93945 24.2002c5.20996 6.39941 35.8604 18.3496 65.9395 18.1797c1.86523 0.165039 4.89844 0.298828 6.77148 0.298828c15.2451 0 37.1611 -7.875 48.9189 -17.5791c9.87305 -11.0439 17.8867 -32.0303 17.8867 -46.8438\r\n-c0 -1.52539 -0.0966797 -3.99609 -0.216797 -5.51562zM93.9902 212.6c32.4297 0.470703 46.1602 19.9707 49.29 30.4707c2.45996 10.0498 2.0498 16.4102 2.0498 27.3994c-9.66992 2.32031 -23.5898 4.85059 -39.5605 4.87012\r\n-c-15.1494 1.14062 -42.8193 -5.62988 -41.7393 -32.2598c-1.24023 -16.79 11.1201 -31.4004 29.96 -30.4805zM264.91 189.55c-7.86035 -0.719727 -11.5205 4.86035 -12.6797 10.3701l-49.8008 164.65c-0.969727 2.7793 -1.60938 5.64941 -1.91992 8.58008\r\n-c-0.0283203 0.189453 -0.0517578 0.5 -0.0517578 0.692383c0 2.18555 1.75195 4.22656 3.91211 4.55762h22.25c8.78027 0.879883 11.6396 -6.03027 12.5498 -10.3701l35.7197 -140.83l33.1602 140.83c0.530273 3.21973 2.94043 11.0693 12.7998 10.2393h17.1602\r\n-c2.16992 0.180664 11.1104 0.5 12.6807 -10.3691l33.4199 -142.631l36.8701 142.631c0.479492 2.17969 2.71973 11.3691 12.6797 10.3691h19.7197c0.850586 0.130859 6.15039 0.810547 5.25 -8.5791c-0.429688 -1.85059 3.41016 10.6592 -52.75 -169.9\r\n-c-1.14941 -5.50977 -4.82031 -11.0898 -12.6797 -10.3701h-18.6904c-10.9395 -1.15039 -12.5098 9.66016 -12.6797 10.75l-33.1602 137.13l-32.7803 -136.99c-0.15918 -1.08984 -1.72949 -11.8994 -12.6797 -10.75h-18.2998v-0.00976562zM538.39 183.92\r\n-c-5.87988 -0.00976562 -33.9199 0.299805 -57.3594 12.29c-4.31152 1.8252 -7.81055 7.10645 -7.81055 11.7891v0.121094v10.75c0 8.4502 6.2002 6.89941 8.83008 5.88965c10.04 -4.05957 16.4805 -7.13965 28.8105 -9.59961\r\n-c36.6494 -7.53027 52.7695 2.2998 56.7197 4.47949c13.1504 7.81055 14.1895 25.6807 5.25 34.9502c-10.4805 8.79004 -15.4805 9.12012 -53.1299 21c-4.64062 1.29004 -43.7002 13.6104 -43.79 52.3604c-0.610352 28.2402 25.0498 56.1797 69.5195 55.9502\r\n-c12.6699 0.00976562 46.4307 -4.13086 55.5703 -15.6201c1.34961 -2.08984 2.01953 -4.5498 1.91992 -7.04004v-10.1104c0 -4.43945 -1.62012 -6.66016 -4.87012 -6.66016c-7.70996 0.860352 -21.3896 11.1699 -49.1602 10.75\r\n-c-6.88965 0.360352 -39.8896 -0.910156 -38.4092 -24.9697c-0.430664 -18.96 26.6094 -26.0703 29.6992 -26.8896c36.46 -10.9707 48.6504 -12.79 63.1201 -29.5801c17.1406 -22.25 7.90039 -48.2998 4.35059 -55.4404\r\n-c-19.0801 -37.4902 -68.4199 -34.4395 -69.2607 -34.4199zM578.59 79.0596c-70.0303 -51.7197 -171.689 -79.25 -258.49 -79.25c-0.853516 -0.00488281 -2.23926 -0.00976562 -3.09277 -0.00976562c-99.5195 0 -240.271 54.0918 -314.177 120.74\r\n-c-6.53027 5.88965 -0.770508 13.96 7.16992 9.46973c81.1748 -46.4336 222.955 -84.1201 316.473 -84.1201h0.407227c69.4072 0.373047 177.64 22.5713 241.59 49.5508c11.7803 5 21.7705 -7.80078 10.1201 -16.3809zM607.78 112.35\r\n-c-8.95996 11.5205 -59.2803 5.38086 -81.8105 2.69043c-6.79004 -0.770508 -7.93945 5.12012 -1.79004 9.46973c40.0703 28.1699 105.88 20.1006 113.44 10.6299c7.5498 -9.46973 -2.0498 -75.4092 -39.5605 -106.909c-5.75977 -4.87012 -11.2695 -2.30078 -8.70996 4.09961\r\n-c8.44043 21.25 27.3906 68.4902 18.4307 80.0195z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bimobject\" unicode=\"&#xf378;\" \r\n-d=\"M416 416c17.5996 0 32 -14.4004 32 -32v-384c0 -17.5996 -14.4004 -32 -32 -32h-384c-17.5996 0 -32 14.4004 -32 32v384c0 17.5996 14.4004 32 32 32h384zM352 158.6h-0.0996094v35c0 49.4004 -11.4004 82.5 -103.801 82.5h-17.2998\r\n-c-30 0 -65.0996 -8.2998 -69.7002 -38.7998h-1.09961v74.7002h-64v-232h64v34.7998h0.900391c8 -23.8994 26.2998 -38.7998 70.3994 -38.7998h16.9004c92.3994 0 103.8 33.2002 103.8 82.5996zM288 187.5v-22.9004c0 -21.6992 -3.40039 -33.7998 -38.4004 -33.7998h-45.2998\r\n-c-28.8994 0 -44.0996 6.5 -44.0996 35.7002v19c0 29.2998 15.2002 35.7002 44.0996 35.7002h45.2998c35 0.200195 38.4004 -12 38.4004 -33.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bitcoin\" unicode=\"&#xf379;\" horiz-adv-x=\"512\" \r\n-d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM362.349 227.33c4.9375 32.999 -20.1904 50.7393 -54.5498 62.5732l11.1465 44.7021l-27.2129 6.78027l-10.8516 -43.5234\r\n-c-7.1543 1.78223 -14.502 3.46387 -21.8027 5.12988l10.9287 43.8096l-27.1982 6.78125l-11.1523 -44.6855c-5.92188 1.34863 -11.7354 2.68164 -17.377 4.08398l0.0302734 0.139648l-37.5293 9.37012l-7.23926 -29.0625s20.1914 -4.62695 19.7646 -4.91309\r\n-c11.0225 -2.75098 13.0146 -10.0439 12.6807 -15.8242l-12.6963 -50.9258c0.759766 -0.193359 1.74414 -0.472656 2.8291 -0.90625c-0.907227 0.224609 -1.87598 0.472656 -2.87598 0.712891l-17.7959 -71.3379c-1.34961 -3.34863 -4.76758 -8.37012 -12.4717 -6.46484\r\n-c0.271484 -0.394531 -19.7793 4.9375 -19.7793 4.9375l-13.5107 -31.1475l35.4141 -8.82617c6.58887 -1.65137 13.0449 -3.37988 19.4004 -5.00684l-11.2617 -45.2129l27.1816 -6.78027l11.1533 44.7324c5.96875 -1.61719 15.6846 -4.13867 21.6865 -5.62695\r\n-l-11.1152 -44.5225l27.2139 -6.78125l11.2617 45.1279c46.4043 -8.78125 81.2988 -5.23926 95.9863 36.7266c11.8359 33.79 -0.589844 53.2812 -25.0049 65.9912c17.7803 4.09766 31.1748 15.792 34.7471 39.9492zM300.172 140.151\r\n-c-8.41016 -33.79 -65.3076 -15.5234 -83.7549 -10.9434l14.9443 59.8994c18.4453 -4.60352 77.5996 -13.7178 68.8105 -48.9561zM308.589 227.818c-7.67285 -30.7363 -55.0312 -15.1201 -70.3926 -11.292l13.5479 54.3262\r\n-c15.3633 -3.82715 64.8359 -10.9727 56.8447 -43.0342z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bity\" unicode=\"&#xf37a;\" horiz-adv-x=\"496\" \r\n-d=\"M78.4004 380.8c95.3994 89.2002 246.1 91.2002 343.1 -3.7998c14.2998 -14.0996 -6.40039 -37.0996 -22.4004 -21.5c-84.7998 82.4004 -215.8 80.2998 -298.899 3.2002c-16.2998 -15.1006 -36.5 8.2998 -21.7998 22.0996zM177.3 -37.7998\r\n-c-128.7 38.2998 -201.899 170.7 -169.8 298.1c5.2998 21 35.2002 12.5 30.2002 -7.09961c-28.2998 -111.3 35.2998 -227.101 147.5 -261c21.3994 -6.40039 11.3994 -35.7002 -7.90039 -30zM325.4 -35.7998c-19.2002 -6.2998 -30 22.7002 -8.80078 29.7002\r\n-c106.101 35.5 167.4 145.699 143.2 253.399c-4.89941 21.7002 25.5 27.6006 30 7.90039c28.5 -124.101 -42.5 -250.8 -164.399 -291zM262.5 43.2002c0 -8.2002 -6.59961 -14.7998 -14.7998 -14.7998s-14.7998 6.59961 -14.7998 14.7998l0.199219 71.7998\r\n-c0 8.09961 6.60059 14.7998 14.8008 14.7998c8.19922 0 14.7998 -6.59961 14.7998 -14.7998zM333.5 312.2c0 21.7998 32.5 19.5996 32.5 0v-71.6006c0 -69.2998 -60.7002 -90.8994 -118 -90.0996c-57.2998 -0.799805 -118 20.7998 -118 90.0996v71.6006\r\n-c0 19.5996 32.5 21.7998 32.5 0c-1.40039 -88.2002 -7 -131.8 85.5 -132.5c90.2002 0.599609 87.5996 41.5996 85.5 132.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blackberry\" unicode=\"&#xf37b;\" horiz-adv-x=\"512\" \r\n-d=\"M166 331.1c0 -23.3994 -16.4004 -49.0996 -72.5 -49.0996h-70.0996l21 88.7998h67.7998c42.0996 0 53.7998 -23.2998 53.7998 -39.7002zM292.2 370.8c42.0996 0 53.7998 -23.2998 53.7002 -39.7002c0 -23.3994 -16.3008 -49.0996 -70.1006 -49.0996h-70.0996\r\n-l18.7002 88.7998h67.7998zM88.7998 239.9c42.1006 0 53.7998 -23.4004 53.7998 -39.7002c0 -25.7002 -16.3994 -49.1006 -72.5 -49.1006h-70.0996l21 88.8008h67.7998zM268.9 239.9c42 0 53.6992 -23.4004 53.6992 -39.7002c0 -25.7002 -16.2998 -49.1006 -70.0996 -49.1006\r\n-h-70.0996l18.6992 88.8008h67.8008zM458.2 293.7c42.0996 0 53.7998 -23.4004 53.7002 -39.7002c0 -25.7002 -16.3008 -49.0996 -70.1006 -49.0996h-70.0996l18.7002 88.7998h67.7998zM430.2 155.8c42.0996 0 53.7002 -23.3994 53.7002 -39.7002\r\n-c0 -25.6992 -14 -49.0996 -70.1006 -49.0996h-70.0996l18.7002 88.7998h67.7998zM240.8 102c42.1006 0 53.7998 -23.4004 53.7002 -39.7002c0 -23.3994 -14 -49.0996 -70.0996 -49.0996h-70.1006l18.7002 88.7998h67.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blogger\" unicode=\"&#xf37c;\" \r\n-d=\"M162.4 252c4.7998 4.90039 6.19922 5.09961 36.3994 5.09961c27.2002 0 28.1006 -0.0996094 32.1006 -2.09961c5.7998 -2.90039 8.2998 -7 8.2998 -13.5996c0 -5.90039 -2.40039 -10 -7.60059 -13.4004c-2.7998 -1.7998 -4.5 -1.90039 -31.0996 -2.09961\r\n-c-16.4004 -0.100586 -29.5 0.199219 -31.5 0.799805c-10.2998 2.89941 -14.0996 17.7002 -6.59961 25.2998zM223.8 157.5c55.4004 0 55.1006 0 60.4004 -4.7002c7.39941 -7 5.89941 -19.2998 -3.10059 -24.3994l-9.19922 -1.5l-47.9004 -0.600586\r\n-c-42.2002 -0.5 -54.0996 0.200195 -56.2998 1.2002c-4.40039 1.90039 -8.5 7.2998 -9.2002 12c-0.599609 4.5 1.59961 10.7998 5.09961 13.9004c4.40039 3.89941 6.30078 4.09961 60.2002 4.09961zM447.2 27.4004c-3.5 -28.4004 -23 -50.4004 -51.1006 -57.5\r\n-c-7.19922 -1.80078 -9.69922 -1.90039 -172.899 -1.80078c-157.8 0 -165.9 0.100586 -172 1.80078c-8.40039 2.19922 -15.6006 5.5 -22.2998 10c-5.60059 3.7998 -13.9004 11.7998 -17 16.3994c-3.80078 5.60059 -8.2002 15.2998 -10 22\r\n-c-1.80078 6.7002 -1.90039 9.40039 -1.90039 173.4c0 163.1 0 166.6 1.7998 173.7c6.2998 24.6992 25.9004 43.5996 51.2002 49.1992c7.2998 1.60059 332.1 1.90039 340 0.300781c21.2002 -4.30078 37.9004 -17.1006 47.5996 -36.4004c7.7002 -15.2998 7 1.5 7.30078 -180.6\r\n-c0.199219 -115.801 0 -164.5 -0.700195 -170.5zM361.8 212.6c-1.09961 5 -4.2002 9.60059 -7.7002 11.5c-1.09961 0.600586 -8 1.30078 -15.5 1.7002c-12.3994 0.600586 -13.7998 0.799805 -17.7998 3.10059c-6.2002 3.59961 -7.89941 7.59961 -8 18.2998\r\n-c0 20.3994 -8.5 39.3994 -25.2998 56.5c-12 12.2002 -25.2998 20.5 -40.5996 25.0996c-3.60059 1.10059 -11.8008 1.5 -39.2002 1.7998c-42.9004 0.5 -52.5 -0.399414 -67.1006 -6.19922c-27 -10.7002 -46.2998 -33.4004 -53.3994 -62.4004\r\n-c-1.2998 -5.40039 -1.60059 -14.2002 -1.90039 -64.2998c-0.399414 -62.7998 0 -72.1006 4 -84.5c9.7002 -30.7002 37.1006 -53.4004 64.6006 -58.4004c9.19922 -1.7002 122.199 -2.09961 133.699 -0.5c20.1006 2.7002 35.9004 10.7998 50.7002 25.9004\r\n-c10.7002 10.8994 17.4004 22.7998 21.7998 38.5c3.2002 10.8994 2.90039 88.3994 1.7002 93.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blogger-b\" unicode=\"&#xf37d;\" \r\n-d=\"M446.6 225.3c2 -8.89941 2.40039 -134.1 -2.5 -151.7c-7.09961 -25.2998 -17.8994 -44.3994 -35.1992 -62.0996c-23.9004 -24.4004 -49.4004 -37.5 -81.9004 -41.9004c-18.7002 -2.5 -201.2 -1.89941 -216 0.800781c-44.5 8 -88.7998 44.6992 -104.4 94.2998\r\n-c-6.2998 20.0996 -7 35 -6.39941 136.5c0.5 81 1 95.0996 3.09961 103.899c11.4004 46.8008 42.6006 83.4004 86.1006 100.601c23.5996 9.39941 39 10.7998 108.399 10c44.2002 -0.5 57.4004 -1.10059 63.2998 -2.90039c24.6006 -7.5 46.2002 -20.7998 65.5 -40.5\r\n-c27.1006 -27.5996 40.8008 -58.2998 40.9004 -91.2998c0.0996094 -17.2002 2.7998 -23.5996 12.9004 -29.5c6.39941 -3.7002 8.59961 -4.09961 28.6992 -5c12 -0.5 23.2002 -1.7002 25 -2.7002c5.7002 -3.09961 10.7002 -10.5 12.5 -18.5zM124.5 288.9\r\n-c-12.2002 -12.3008 -6 -36.1006 10.5996 -40.8008c3.10059 -0.799805 24.3008 -1.39941 50.8008 -1.19922c43 0.199219 45.6992 0.399414 50.2998 3.2998c8.5 5.39941 12.2998 12.0996 12.2998 21.5996c0 10.6006 -4.09961 17.2002 -13.4004 21.9004\r\n-c-6.39941 3.2998 -7.89941 3.39941 -51.7998 3.39941c-48.7998 0 -51 -0.299805 -58.7998 -8.19922zM316.3 89.0996c14.4004 8.2002 17 28.1006 4.90039 39.4004c-8.5 7.90039 -8 7.90039 -97.6006 7.7998c-87.0996 -0.0996094 -90.1992 -0.299805 -97.2998 -6.7002\r\n-c-5.59961 -5.09961 -9.2998 -15.0996 -8.2002 -22.3994c1.10059 -7.7002 7.80078 -16.2998 14.9004 -19.4004c3.59961 -1.59961 22.7998 -2.7998 90.9004 -2l77.5 0.900391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"buromobelexperte\" unicode=\"&#xf37f;\" \r\n-d=\"M0 416h128v-128h-128v128zM120 296v112h-112v-112h112zM160 416h128v-128h-128v128zM280 296v112h-112v-112h112zM320 416h128v-128h-128v128zM440 296v112h-112v-112h112zM0 256h128v-128h-128v128zM120 136v112h-112v-112h112zM160 256h128v-128h-128v128zM280 136v112\r\n-h-112v-112h112zM320 256h128v-128h-128v128zM440 136v112h-112v-112h112zM0 96h128v-128h-128v128zM120 -24v112h-112v-112h112zM160 96h128v-128h-128v128zM280 -24v112h-112v-112h112zM320 96h128v-128h-128v128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"centercode\" unicode=\"&#xf380;\" horiz-adv-x=\"512\" \r\n-d=\"M329.2 179.4c-3.7998 -35.2002 -35.4004 -60.6006 -70.6006 -56.8008c-35.1992 3.80078 -60.5996 35.4004 -56.7998 70.6006s35.4004 60.5996 70.6006 56.7998c35.0996 -3.7998 60.5996 -35.4004 56.7998 -70.5996zM243.4 -55.7002\r\n-c-146.7 7.7002 -251.601 138.2 -233.301 279.4c11.2002 86.5996 65.8008 156.899 139.101 192c161 77.0996 349.7 -37.4004 354.7 -216.601c4.09961 -147 -118.4 -262.199 -260.5 -254.8zM423.3 124.3c27.9004 118 -160.5 205.9 -237.2 234.2\r\n-c-57.5 -56.2998 -69.0996 -188.6 -33.7998 -344.4c68.7998 -15.7998 169.101 26.4004 271 110.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloudscale\" unicode=\"&#xf383;\" \r\n-d=\"M318.1 294c6.2002 6.2998 15.8008 -3.09961 9.5 -9.59961l-75.1992 -88.8008c0.899414 -8.19922 -1.80078 -16.7998 -8.10059 -23.0996c-11.0996 -11 -28.8994 -11 -40 0c-11.0996 11.0996 -11.0996 29 0 40c6.2998 6.2998 14.7998 9 23.1006 8.09961l25.1992 20.4004\r\n-c-16.3994 15.2998 -38.3994 24.7002 -62.5996 24.7002c-50.7998 0 -94.5996 -41.4004 -92.5996 -97.4004c-1 6.2998 -1.40039 12.7998 -1.40039 19.4004c0 71.5 57.7998 132.3 129.4 132.3c31.7998 0 60.7998 -14.2998 83.2998 -33.5996zM234.3 182.5\r\n-c5.60059 5.5 5.60059 14.5996 0 20.2002c-5.59961 5.59961 -14.5996 5.59961 -20.2002 0c-5.59961 -5.60059 -5.59961 -14.6006 0 -20.2002c5.60059 -5.5 14.6006 -5.5 20.2002 0zM224 416c123.5 0 224 -100.5 224 -224s-100.5 -224 -224 -224s-224 100.5 -224 224\r\n-s100.5 224 224 224zM224 32c88.2002 0 160 71.7998 160 160s-71.7998 160 -160 160s-160 -71.7998 -160 -160s71.7998 -160 160 -160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloudsmith\" unicode=\"&#xf384;\" horiz-adv-x=\"332\" \r\n-d=\"M332.5 28.0996c0 -46.3994 -37.5996 -84.0996 -84 -84.0996s-84 37.7002 -84 84.0996c0 46.4004 37.5996 84 84 84s84 -37.5996 84 -84zM248.5 272c-46.4004 0 -80 -33.5996 -80 -80s-37.5996 -80 -84 -80s-84 33.5996 -84 80s37.5996 88 84 88s76 29.5996 76 76\r\n-s41.5996 84 88 84s80 -37.5996 80 -84s-33.5996 -84 -80 -84z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloudversify\" unicode=\"&#xf385;\" horiz-adv-x=\"616\" \r\n-d=\"M148.6 144v-0.0996094h-48.8994c-6.40039 0 -11.7002 5.39941 -11.7002 11.7998v40.3994c0 7.60059 7 11.9004 10.7998 11.9004h46.7998v-6.59961c0 -10.7002 8.80078 -16.7002 19.5 -16.7002h20.2002c10.7998 0 19.5 8.7998 19.5 19.5v20.3994\r\n-c0 10.6006 -3.5 19.5 -15.2002 19.5c18.5 15.2002 37.2002 21.4004 45 24.1006c15 56.5 42 92.3994 99.3008 109.7c55.0996 16.5 153.5 3.09961 186.5 -85c73.8994 -22.6006 106.899 -92.6006 92.0996 -155.101c-13 -54.8994 -62.2998 -100.6 -131.5 -99.5\r\n-c-49.5996 -51.3994 -135.2 -48.8994 -186.4 -5.59961c-78.5996 -4.2002 -137.8 42.7998 -146 111.3zM376 136c8.7002 -54.0996 59.7002 -65.5 91.7998 -59.2002c39.1006 7.7002 70.5 37.5 79.7002 76.5c5.7998 24.4004 2.40039 50 -9.40039 72l-10.5 19.6006\r\n-c1.2002 -22.5 -12.5 -60.6006 -47.5 -76.9004c65.5 67.7002 2.10059 141.2 -67.6992 150.5c-49.8008 6.59961 -83.3008 -13 -114.2 -43.7002c48 -4.7002 87.7002 -26.7998 101.8 -74.7998c-30.0996 49.2998 -103 56.5996 -133.6 40.7998\r\n-c-35.5 -18.2002 -60 -54 -57 -93.8994c3.59961 -47.4004 39.5 -67.4004 57.3994 -79.8008c-4.5 21.7002 -4 71.3008 29.2002 92.9004c-36.2998 -60 28.0996 -144.6 135.3 -110.8c-33.5996 14.3994 -66 40.5 -55.2998 86.7998zM128 240h-39.7998\r\n-c-8.90039 0 -16.2002 7.2998 -16.2002 16.2002v39.5996c0 8.90039 7.2998 16.2002 16.2002 16.2002h39.7998c8.90039 0 16.2002 -7.2998 16.2002 -16.2002v-39.5996c0 -8.90039 -7.2998 -16.2002 -16.2002 -16.2002zM10.0996 280c-5.59961 0 -10.0996 4.5 -10.0996 10.0996\r\n-v27.8008c0 5.59961 4.5 10.0996 10.0996 10.0996h27.7002c5.5 0 10.1006 -4.5 10.1006 -10.0996v-27.8008c0 -5.59961 -4.5 -10.0996 -10.1006 -10.0996h-27.7002zM168 305.3v21.4004c0 5.09961 4.2002 9.2998 9.2998 9.2998h21.4004\r\n-c5.09961 0 9.2998 -4.2002 9.2998 -9.2998v-21.4004c0 -5.09961 -4.2002 -9.2998 -9.2998 -9.2998h-21.4004c-5.09961 0 -9.2998 4.2002 -9.2998 9.2998zM56 212.5v-25c0 -6.2998 -5.09961 -11.5 -11.4004 -11.5h-25.1992c-6.30078 0 -11.4004 5.2002 -11.4004 11.5v25\r\n-c0 6.2998 5.09961 11.5 11.4004 11.5h25.0996c6.40039 0 11.5 -5.2002 11.5 -11.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cpanel\" unicode=\"&#xf388;\" horiz-adv-x=\"640\" \r\n-d=\"M210.3 227.8c6.60059 -29.0996 -14.5 -65.2998 -51.7002 -65.2998h-32l6.40039 23.7998c1.7998 6.2002 7.2998 10.7998 14.2998 10.7998h10.2998c12.4004 0 20.8008 11.7002 18.3008 22.6006c-2.10059 9.2002 -9.90039 14.7998 -18.3008 14.7998h-19.7998\r\n-l-25.7998 -95.7002c-1.90039 -6.2002 -7.40039 -10.7002 -14.2002 -10.7002l-24.7002 -0.0996094l34.9004 130.1c1.7998 6.40039 7.2002 10.9004 14.2998 10.9004h37c24.1006 0 45.4004 -16.4004 51 -41.2002zM53.7998 199.8c-24.8994 0 -24.7002 -37.3994 0 -37.3994\r\n-h11.2998c4.2002 0 7.60059 -3.90039 6.40039 -8.30078l-7.09961 -26.0996h-12.4004c-33.5 0 -59 31.4004 -50.2998 65.2002c7.2998 27 28.2998 41.0996 51.2002 41.0996h40l-6.2002 -23.5996c-1.90039 -6.5 -7.40039 -10.9004 -14.2998 -10.9004h-18.6006zM301.3 234.6\r\n-c18.7998 0 33.2998 -17.5996 28.5 -36.7998l-14 -51.7998c-2.7998 -10.5996 -12.2002 -17.7998 -23.3994 -17.7998l-57.5 0.200195c-42.9004 0 -38.5 63.7998 0.699219 63.7998h48.4004l-3.5 -13.2002c-1.90039 -6.2002 -7.40039 -10.7998 -14.2002 -10.7998h-21.5996\r\n-c-5.2998 0 -5.2998 -7.90039 0 -7.90039h34.8994c4.60059 0 5.10059 3.90039 5.5 5.2998l8.60059 31.8008c0.299805 1 1.89941 5.2998 -2.10059 5.2998h-57.5c-9.69922 0 -16.5996 8.89941 -14.1992 18.5l3.5 13.3994h77.8994zM633.1 269c4.5 0 7.7002 -4 6.5 -8.2998\r\n-l-26.5 -98.2002c-5.09961 -20.7002 -24.1992 -34.5 -44.8994 -34.5l35.5996 133.1c1.2002 4.7002 5.5 7.90039 10.4004 7.90039h18.8994zM396.8 234.3c34.4004 0 59.2998 -32.2998 50.2998 -65.3994l-8.7998 -33.1006c-1.2002 -4.89941 -5.7002 -7.7998 -10.2998 -7.7998\r\n-h-19.0996c-4.5 0 -7.60059 4 -6.40039 8.2998l10.5996 40c3.30078 11.6006 -5.59961 23.4004 -18.0996 23.4004h-19.7998l-17.2002 -64c-1.2002 -4.7998 -5.59961 -7.7998 -10.4004 -7.7998h-18.8994c-4.2002 0 -7.60059 3.89941 -6.40039 8.2998l26.2002 98h48.2998\r\n-v0.0996094zM495.1 159.7h73.3008l-5.7002 -21c-1.90039 -6.2002 -7.40039 -10.7002 -14.2002 -10.7002h-66.7002c-20 0 -33.2998 19 -28.2998 36.7002l10.7998 40c4.7998 17.5996 20.7002 29.5996 38.6006 29.5996h47.2998c19 0 33.2002 -17.7002 28.2998 -36.7998\r\n-l-3.2002 -12c-2.89941 -11 -12.7002 -17.5996 -23.2002 -17.5996h-53.3994l3.5 13c1.59961 6.19922 7.2002 10.7998 14.2002 10.7998h21.5996c2 0 3.2998 1 3.90039 3l0.699219 2.59961c0.700195 2.7002 -1.2998 5.10059 -3.89941 5.10059h-32.9004\r\n-c-4.09961 0 -6.89941 -2.10059 -7.7998 -6l-8 -30c-0.900391 -3.30078 1.5 -6.7002 5.09961 -6.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"css3-alt\" unicode=\"&#xf38b;\" horiz-adv-x=\"384\" \r\n-d=\"M0 416h384l-34.9004 -395.8l-157.1 -52.2002l-157.1 52.2002zM313.1 336h-242.199l5.7998 -47.2998h122.899l-6.5 -2.7002l-112.1 -46.7002l3.59961 -46.2998l0.200195 0.0996094v-0.0996094l166.3 -0.5l-3.69922 -61.5996l-54.7002 -15.4004l-52.6006 13.2998\r\n-l-3.19922 38.2998h-48.9004l6.40039 -73.8994l98.7998 -29.2002l98.2002 28.7002l12.7998 146.6h-111.5l0.299805 0.100586l115.3 49.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cuttlefish\" unicode=\"&#xf38c;\" horiz-adv-x=\"440\" \r\n-d=\"M344 142.5c13.7002 -50.9004 41.7002 -93.2998 87 -117.8c-45.2998 -49.6006 -110.5 -80.7002 -183 -80.7002c-137 0 -248 111 -248 248s111 248 248 248c72.5 0 137.7 -31.0996 183 -80.7002c-45.2998 -24.5 -73.2998 -66.8994 -87 -117.8\r\n-c-17.5 31.5996 -57.4004 54.5 -96 54.5c-56.5996 0 -104 -47.4004 -104 -104s47.4004 -104 104 -104c38.5996 0 78.5 22.9004 96 54.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"d-and-d\" unicode=\"&#xf38d;\" horiz-adv-x=\"576\" \r\n-d=\"M82.5 349.1c-0.599609 17.2002 2 33.8008 12.7002 48.2002c0.299805 -7.39941 1.2002 -14.5 4.2002 -21.5996c5.89941 27.5 19.6992 49.2998 42.2998 65.5c-1.90039 -5.90039 -3.5 -11.7998 -3 -17.7002c8.7002 7.40039 18.7998 17.7998 44.3994 22.7002\r\n-c14.7002 2.7998 29.7002 2 42.1006 -1c38.5 -9.2998 61 -34.2998 69.7002 -72.2998c5.2998 -23.1006 0.699219 -45 -8.30078 -66.4004c-5.19922 -12.4004 -12 -24.4004 -20.6992 -35.0996c-2 1.89941 -3.90039 3.7998 -5.80078 5.59961\r\n-c-42.7998 40.7998 -26.7998 25.2002 -37.3994 37.4004c-1.10059 1.19922 -1 2.19922 -0.100586 3.59961c8.30078 13.5 11.8008 28.2002 10 44c-1.09961 9.7998 -4.2998 18.9004 -11.2998 26.2002c-14.5 15.2998 -39.2002 15 -53.5 -0.600586\r\n-c-11.3994 -12.5 -14.0996 -27.3994 -10.8994 -43.5996c0.199219 -1.2998 0.399414 -2.7002 0 -3.90039c-3.40039 -13.6992 -4.60059 -27.5996 -2.5 -41.5996c0.0996094 -0.5 0.0996094 -1.09961 0.0996094 -1.59961c0 -0.300781 -0.0996094 -0.5 -0.200195 -1.10059\r\n-c-21.7998 11 -36 28.2998 -43.2002 52.2002c-8.2998 -17.7998 -11.0996 -35.5 -6.59961 -54.0996c-15.5996 15.1992 -21.2998 34.2998 -22 55.1992zM552.1 225.9c0.5 -0.600586 1.2002 -1 1.7002 -1.40039v-0.5c-15 3.59961 -29.7998 1.7998 -44.5 -1.2998\r\n-c-9.2998 -2 -18.2998 -4.7002 -26.7002 -9c-2.89941 -1.5 -5.69922 -3.2998 -8 -4.7002c-5.7998 2.40039 -11.2998 5.5 -17.1992 6.7998c-24.5 5.2998 -45.8008 -1.2002 -62.5 -20c-19.7002 -22.2002 -34.5 -47.5996 -46.7002 -74.5l-1.2002 -2.7002\r\n-c-0.0996094 -0.199219 -0.200195 -0.299805 -0.400391 -0.399414c-12.0996 8.2998 -21.5996 20.2998 -36.0996 25.5996c0.299805 0.400391 0.400391 0.900391 0.700195 1.2998c20.5996 28.2002 44.8994 52.5 75.0996 70.4004c16 9.5 33 16.0996 51.5 18.5\r\n-c1.7998 0.200195 3.5 0.400391 5.2998 1.09961c-4.39941 0 -8.7998 0.300781 -13.0996 -0.0996094c-21.2002 -1.90039 -40.5 -9.59961 -58.7002 -20.2002c-13.7998 -8 -26.2002 -17.7002 -36.5996 -29.7998c-0.400391 -0.5 -0.600586 -1.09961 -0.900391 -1.7002\r\n-c-0.299805 0.299805 -0.700195 0.600586 -1 0.900391c11 30.8994 30.7002 55 57.7002 73.2998c0.200195 -0.200195 0.5 -0.299805 0.700195 -0.5c-1.2002 -1.7002 -2.5 -3.2998 -3.5 -5.09961c-1.7998 -3.30078 -3.7002 -6.5 -5.10059 -10\r\n-c-1.7998 -4.30078 1.60059 -8.60059 12 -0.5c18.2002 14.0996 29.6006 26.2998 48.9004 29.5996c0.700195 0.0996094 1.2998 0.299805 1.90039 0.299805h2.5c-1 -0.700195 -1.60059 -1.09961 -2.2002 -1.5c-11.6006 -7.7998 -11.7998 -7.39941 -15 -12\r\n-c-2.60059 -3.7002 -0.200195 -8 4.7002 -6.7998c2.59961 0.599609 5.19922 1.2998 7.69922 2.2002c9.40039 3.2998 19 5.7998 29 6.39941c13.9004 0.800781 27.1006 -1.89941 39.9004 -7.09961c15.0996 -6.2002 28.5 -15 40.0996 -26.5996zM316.7 50.4004\r\n-c1.5 -1.30078 1.89941 -2.40039 0.899414 -4.2002c-25.2998 -50.2002 -61.0996 -89.1006 -116 -98.7998c-26.7998 -4.7002 -52.8994 -2.7002 -77.8994 8.59961c-18.5 8.2002 -34.6006 19.5996 -47.2002 35.5996c-2 2.60059 -3.7002 5.40039 -5.90039 8.60059\r\n-c-0.699219 -7.7998 0.100586 -14.9004 1.5 -21.9004c-0.199219 -0.200195 -0.399414 -0.299805 -0.599609 -0.5c-3.2002 3.40039 -6.59961 6.60059 -9.5 10.2998c-12.2002 15.5 -19.5 33.3008 -24.0996 52.3008c-11.8008 48.2998 -0.5 78.7998 7.7998 101.1\r\n-c-8.7002 -4.7998 -16.2002 -10.2998 -23.6006 -16.2002c11.6006 32.7998 31.9004 59.9004 56.1006 84.6006c2.39941 -2.10059 3.2998 -4.7002 3 -7.40039c-0.200195 -1 -5.90039 -38.9004 -5.60059 -44.7002c18.9004 18.9004 40.5 33.2998 64.8008 43.9004\r\n-c-7.5 -11.1006 -11 -23.4004 -11.8008 -37.2998c13.4004 12.1992 27.7002 20.0996 46.4004 13.8994c-8.5 -9.09961 -30.7998 -30.5 -38.5996 -64.2998c-5.10059 -21.9004 -3.80078 -43.0996 8.19922 -62.5996c11.2002 -18.3008 27.8008 -27.8008 49.4004 -27.8008\r\n-c12.5996 0 23.7998 5 34.0996 11.8008c18.5 12.2998 32.8008 28.5 44 47.5996c1.90039 3.2002 1.10059 2.09961 1.90039 3c19.9004 -16.0996 3.2998 -2.59961 42.7002 -35.5996zM488.7 96.7998c20.2002 -6.59961 35.5 -18.7998 43.7998 -38.8994\r\n-c9.2002 -23.1006 2.09961 -49.4004 -17.4004 -66c-16.3994 -14 -35.6992 -19.2002 -57 -17.4004c-0.599609 0 -1.19922 0 -1.89941 -0.299805c15.0996 -10.7002 31.5996 -15.2002 50.8994 -10.6006c-2.19922 -2.39941 -3.89941 -4.69922 -5.89941 -6.5\r\n-c-12.2998 -10.8994 -26.9004 -16.8994 -42.9004 -19.7998c-39.5996 -7.2998 -75.5996 12.7998 -85 56.9004c-0.5 2.09961 -0.599609 4.2002 -0.899414 6.39941c-10.8008 -8.19922 -16.4004 -34.0996 -0.700195 -52.2998c-1.60059 0.5 -2.60059 0.700195 -3.60059 1.10059\r\n-c-21.2998 8.2998 -34.3994 28.2998 -33.5 51.1992c0.900391 23.2002 4.90039 41 -13 56c-16.5 13.8008 -33 27.4004 -49.5 41.1006c-8.09961 6.7002 -14.7998 14.5 -17 25.0996c-1 4.60059 -1.39941 9.40039 -1.7998 14.1006c-0.5 6.09961 -3.2998 11 -7.89941 14.7998\r\n-c-4.5 3.89941 -9.30078 7.39941 -13.8008 11.2002c-8.89941 7.5 -12.2998 18.8994 -7.2998 29.8994c2.7998 -12.8994 9.60059 -18.8994 22.6006 -20.2998c4.39941 -0.5 8.89941 -0.799805 13.2998 -1.5c8.09961 -1.2002 12.7998 -6.09961 14.2998 -14.2002\r\n-c0.700195 -3.39941 1.2998 -6.7998 2.2002 -10.2002c1.59961 -5.59961 4.5 -8 10.3994 -8.39941c4.60059 -0.299805 9.30078 -0.5 13.9004 -0.900391c7.59961 -0.599609 14.2002 -3.7998 20.0996 -8.7002c19.4004 -16.1992 39 -32.1992 58.5 -48.2998\r\n-c5.7002 -4.7002 12 -8.2002 19.6006 -8.5c16.7002 -0.599609 29 15.2002 24.7998 31.7998c-0.200195 0.700195 -0.400391 1.5 -0.0996094 2.80078c2.39941 -2 4.89941 -3.80078 7 -5.90039c14.0996 -14 18.0996 -39.2998 8.69922 -56.0996\r\n-c-2.09961 -3.80078 -5.2998 -7.10059 -8.09961 -10.8008c0.700195 -0.199219 1.7998 -0.5 3 -0.599609c14 -1.40039 27.2002 1 38.9004 9.09961c15.7998 10.9004 18 31.2002 5.39941 45.6006c-4.7002 5.39941 -8.89941 8 -18.7998 12\r\n-c6.5 1.2998 19.2002 0.200195 28.7002 -2.90039zM99.4004 268.7c-5.30078 9.2002 -13.2002 15.5996 -22.1006 21.2998c13.7002 0.5 26.6006 -0.200195 39.6006 -3.7002c-7 12.2002 -8.5 24.7002 -5 38.7002c5.2998 -11.9004 13.6992 -20.0996 23.5996 -26.7998\r\n-c19.7002 -13.2002 35.7002 -19.6006 46.7002 -30.2002c3.39941 -3.2998 6.2998 -7.09961 9.59961 -10.9004c-0.799805 2.10059 -1.39941 4.10059 -2.2002 6c-5 10.6006 -13 18.6006 -22.5996 25c-1.7998 1.2002 -2.7998 2.5 -3.40039 4.5\r\n-c-3.2998 12.5 -3 25.1006 -0.699219 37.6006c1 5.5 2.7998 10.8994 4.5 16.2998c0.799805 2.40039 2.2998 4.59961 4 6.59961c0.599609 -6.89941 0 -25.5 19.5996 -46c10.7998 -11.2998 22.4004 -21.8994 33.9004 -32.6992c9 -8.5 18.2998 -16.7002 25.5 -26.8008\r\n-c1.09961 -1.59961 2.19922 -3.2998 3.7998 -4.69922c-5 13 -14.2002 24.0996 -24.2002 33.7998c-9.59961 9.2998 -19.4004 18.3994 -29.2002 27.3994c-3.2998 3 -4.59961 6.7002 -5.09961 10.9004c-1.2002 10.4004 0 20.5996 4.2998 30.2002c0.5 1 1.09961 2 1.90039 3.2998\r\n-c0.5 -4.2002 0.599609 -7.90039 1.39941 -11.5996c4.7998 -23.1006 20.4004 -36.3008 49.2998 -63.5c10 -9.40039 19.3008 -19.2002 25.6006 -31.6006c4.7998 -9.2998 7.2998 -19 5.7002 -29.5996c-0.100586 -0.600586 0.5 -1.7002 1.09961 -2\r\n-c6.2002 -2.60059 10 -6.90039 9.7002 -14.2998c7.7002 2.59961 12.5 8 16.3994 14.5c4.2002 -20.2002 -9.09961 -50.3008 -27.1992 -58.7002c0.399414 4.5 5 23.3994 -16.5 27.7002c-6.80078 1.2998 -12.8008 1.2998 -22.9004 2.09961c4.7002 9 10.4004 20.5996 0.5 22.4004\r\n-c-24.9004 4.59961 -52.7998 -1.90039 -57.7998 -4.60059c8.2002 -0.399414 16.2998 -1 23.5 -3.2998c-2 -6.5 -4 -12.7002 -5.7998 -18.9004c-1.90039 -6.5 2.09961 -14.5996 9.2998 -9.59961c1.2002 0.900391 2.2998 1.90039 3.2998 2.7002\r\n-c-3.09961 -17.9004 -2.90039 -15.9004 -2.7998 -18.2998c0.299805 -10.2002 9.5 -7.80078 15.7002 -7.30078c-2.5 -11.7998 -29.5 -27.2998 -45.4004 -25.7998c7 4.7002 12.7002 10.2998 15.9004 17.9004c-6.5 -0.799805 -12.9004 -1.60059 -19.2002 -2.40039\r\n-l-0.299805 0.900391c4.69922 3.39941 8 7.7998 10.1992 13.0996c8.7002 21.1006 -3.59961 38 -25 39.9004c-9.09961 0.799805 -17.7998 -0.799805 -25.8994 -5.5c6.2002 15.5996 17.2002 26.5996 32.5996 34.5c-15.2002 4.2998 -8.89941 2.7002 -24.5996 6.2998\r\n-c14.5996 9.2998 30.2002 13.2002 46.5 14.5996c-5.2002 3.2002 -48.1006 3.60059 -70.2002 -20.8994c7.90039 -1.40039 15.5 -2.7998 23.2002 -4.2002c-23.7998 -7 -44 -19.7002 -62.4004 -35.5996c1.10059 4.7998 2.7002 9.5 3.2998 14.2998\r\n-c0.600586 4.5 0.800781 9.2002 0.100586 13.5996c-1.5 9.40039 -8.90039 15.1006 -19.7002 16.2998c-7.90039 0.900391 -15.5996 -0.0996094 -23.2998 -1.2998c-0.900391 -0.0996094 -1.7002 -0.299805 -2.90039 0c15.7998 14.7998 36 21.7002 53.1006 33.5\r\n-c6 4.5 6.7998 8.2002 3 14.9004zM227.8 241.9c3.2998 -16 12.6006 -25.5 23.7998 -24.3008c-4.59961 11.3008 -12.0996 19.5 -23.7998 24.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"deploydog\" unicode=\"&#xf38e;\" horiz-adv-x=\"512\" \r\n-d=\"M382.2 312h51.7002v-239.6h-51.7002v20.6992c-19.7998 -24.7998 -52.7998 -24.0996 -73.7998 -14.6992c-26.2002 11.6992 -44.3008 38.0996 -44.3008 71.7998c0 29.7998 14.8008 57.8994 43.3008 70.7998c20.1992 9.09961 52.6992 10.5996 74.7998 -12.9004v103.9z\r\n-M317.5 150.2c0 -18.2002 13.5996 -33.5 33.2002 -33.5c19.7998 0 33.2002 16.3994 33.2002 32.8994c0 17.1006 -13.7002 33.2002 -33.2002 33.2002c-19.6006 0 -33.2002 -16.3994 -33.2002 -32.5996zM188.5 312h51.7002v-239.6h-51.7002v20.6992\r\n-c-19.7998 -24.7998 -52.7998 -24.0996 -73.7998 -14.6992c-26.2002 11.6992 -44.2998 38.0996 -44.2998 71.7998c0 29.7998 14.7998 57.8994 43.2998 70.7998c20.2002 9.09961 52.7002 10.5996 74.7998 -12.9004v103.9zM123.8 150.2c0 -18.2002 13.6006 -33.5 33.2002 -33.5\r\n-c19.7998 0 33.2002 16.3994 33.2002 32.8994c0 17.1006 -13.7002 33.2002 -33.2002 33.2002c-19.7002 0 -33.2002 -16.3994 -33.2002 -32.5996zM448 352h-384c-17.5996 0 -32 -14.5 -32 -32v-256c0 -17.5996 14.5 -32 32 -32h384c17.5996 0 32 14.5 32 32v256\r\n-c0 17.5996 -14.5 32 -32 32zM448 384c35.2002 0 64 -28.7998 64 -64v-256c0 -35.2002 -28.7998 -64 -64 -64h-384c-35.2002 0 -64 28.7998 -64 64v256c0 35.2002 28.7998 64 64 64h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"deskpro\" unicode=\"&#xf38f;\" horiz-adv-x=\"480\" \r\n-d=\"M205.9 -64l31.0996 38.4004c12.2998 0.199219 25.5996 1.39941 36.5 6.59961c38.9004 18.5996 38.4004 61.9004 38.2998 63.7998c-0.0996094 5 -0.799805 4.40039 -28.8994 37.4004h79.0996c-0.200195 -50.1006 -7.2998 -68.5 -10.2002 -75.7002\r\n-c-9.39941 -23.7002 -43.8994 -62.7998 -95.2002 -69.4004c-8.69922 -1.09961 -32.7998 -1.19922 -50.6992 -1.09961zM406.3 103.7l-119.2 -0.100586l17.4004 31.3008l175.5 -0.300781c-15.2002 -17.2998 -35.0996 -30.8994 -73.7002 -30.8994zM362.7 327.6v-168.3h-73.5\r\n-l-32.7002 -55.5h-6.5c-52.2998 0 -58.0996 56.5 -58.2998 58.9004c-1.2002 13.2002 -21.2998 11.5996 -20.1006 -1.7998c1.40039 -15.8008 8.80078 -40 26.4004 -57.1006h-91c-25.5 0 -110.8 26.7998 -107 114v213.3c0 16 9.7002 16.6006 15 16.8008h82\r\n-c0.200195 0 0.299805 -0.100586 0.5 -0.100586c4.2998 0.400391 50.0996 2.10059 50.0996 -43.7002c0 -13.2998 20.2002 -13.3994 20.2002 0c0 18.2002 -5.5 32.8008 -15.7998 43.7002h84.2002c108.7 0.400391 126.5 -79.3994 126.5 -120.2zM230.2 271.6l64 -29.2998\r\n-c13.2998 45.5 -42.2002 71.7002 -64 29.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"digital-ocean\" unicode=\"&#xf391;\" horiz-adv-x=\"512\" \r\n-d=\"M87 -33.7998v73.5996h73.7002v-73.5996h-73.7002zM25.4004 101.4h61.5996v-61.6006h-61.5996v61.6006zM491.6 271.1c53.2002 -170.3 -73 -327.1 -235.6 -327.1v95.7998h0.299805v0.299805c101.7 0.200195 180.5 101 141.4 208\r\n-c-14.2998 39.6006 -46.1006 71.4004 -85.7998 85.7002c-107.101 38.7998 -208.101 -39.8994 -208.101 -141.7h-95.7998c0 162.2 156.9 288.7 327 235.601c74.2002 -23.2998 133.6 -82.4004 156.6 -156.601zM256.3 40.0996h-0.299805v-0.299805h-95.2998v95.6006h95.5996\r\n-v-95.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"discord\" unicode=\"&#xf392;\" \r\n-d=\"M297.216 204.8c0 -15.6162 -11.5195 -28.416 -26.1123 -28.416c-14.3359 0 -26.1113 12.7998 -26.1113 28.416s11.5195 28.416 26.1113 28.416c14.5928 0 26.1123 -12.7998 26.1123 -28.416zM177.664 233.216c14.5918 0 26.3682 -12.7998 26.1123 -28.416\r\n-c0 -15.6162 -11.5205 -28.416 -26.1123 -28.416c-14.3359 0 -26.1123 12.7998 -26.1123 28.416s11.5205 28.416 26.1123 28.416zM448 395.264v-459.264c-64.4941 56.9941 -43.8682 38.1279 -118.784 107.776l13.5684 -47.3604h-290.304\r\n-c-28.9287 0 -52.4805 23.5518 -52.4805 52.7363v346.111c0 29.1846 23.5518 52.7363 52.4805 52.7363h343.039c28.9287 0 52.4805 -23.5518 52.4805 -52.7363zM375.04 152.576c0 82.4316 -36.8643 149.248 -36.8643 149.248\r\n-c-36.8643 27.6475 -71.9355 26.8799 -71.9355 26.8799l-3.58398 -4.0957c43.5195 -13.3125 63.7441 -32.5127 63.7441 -32.5127c-60.8115 33.3291 -132.244 33.335 -191.232 7.42383c-9.47168 -4.35156 -15.1035 -7.42383 -15.1035 -7.42383\r\n-s21.2471 20.2246 67.3271 33.5361l-2.55957 3.07227s-35.0723 0.767578 -71.9355 -26.8799c0 0 -36.8643 -66.8164 -36.8643 -149.248c0 0 21.5039 -37.1201 78.0801 -38.9121c0 0 9.47168 11.5195 17.1514 21.248c-32.5117 9.72754 -44.7998 30.208 -44.7998 30.208\r\n-c3.7666 -2.63574 9.97656 -6.05273 10.4961 -6.40039c43.21 -24.1973 104.588 -32.126 159.744 -8.95996c8.95996 3.32812 18.9443 8.19238 29.4395 15.1045c0 0 -12.7998 -20.9922 -46.3359 -30.4639c7.68066 -9.72852 16.8965 -20.7363 16.8965 -20.7363\r\n-c56.5762 1.79199 78.3359 38.9121 78.3359 38.9121z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"discourse\" unicode=\"&#xf393;\" \r\n-d=\"M225.9 416c122.699 0 222.1 -102.3 222.1 -223.9c0 -121.6 -99.4004 -223.899 -222.1 -223.899l-225.801 -0.200195s-0.0996094 224 -0.0996094 227.9c0 121.6 103.3 220.1 225.9 220.1zM224 64c70.7002 0 128 57.2998 128 128s-57.2998 128 -128 128\r\n-s-128 -57.2998 -128 -128c0 -22.0996 5.59961 -42.9004 15.4004 -61l-22.9004 -75l81.0996 20.0996c16.5 -7.7998 35 -12.0996 54.4004 -12.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dochub\" unicode=\"&#xf394;\" horiz-adv-x=\"416\" \r\n-d=\"M397.9 288h-141.9v140.4zM304 256h96v-126.1c0 -129.301 -70.2998 -193.9 -210.8 -193.9h-189.2v512h189.2c12.2002 0 23.7002 -1.09961 34.5996 -3.2998v-84c-10 1.7002 -21.0996 2.5 -33.0996 2.5h-94.7002v-337.3h94.7002c76.7998 0 113.3 33.2998 113.3 100.1v130z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"docker\" unicode=\"&#xf395;\" horiz-adv-x=\"640\" \r\n-d=\"M349.9 211.7h-66.1006v59.3994h66.1006v-59.3994zM349.9 416v-60.7002h-66.1006v60.7002h66.1006zM428.1 271.2v-59.4004h-66.0996v59.4004h66.0996zM271.8 343.3v-60.0996h-66.0996v60.0996h66.0996zM349.9 343.3v-60.0996h-66.1006v60.0996h66.1006zM626.7 243.3\r\n-l13.2998 -8.89941c-1.90039 -3.90039 -7 -14.6006 -8.5 -17.1006c-23.7002 -45.2998 -69.9004 -45.5996 -91.2998 -45.2002c-54.5 -131.699 -171 -204.199 -328.4 -204.199c-72.7002 0 -128.3 22.2998 -165.399 66.1992c-38.2002 45.3008 -52.7002 111.301 -44 162.101\r\n-h434.699c22.6006 -0.400391 39.7002 6 48.4004 10.7002c-19.7002 30.1992 -14.7002 76 3.7002 103.8l9.2998 14l14 -9.2998c24.4004 -18.8008 37.7998 -39.7002 41.0996 -63.7002c25.5 4.7998 58.7002 1.2998 73.1006 -8.40039zM115.6 271.2h0.100586v-59.4004h-66.1006\r\n-v59.4004h66zM193.7 271.2v-59.4004h-66.1006v59.4004h66.1006zM271.8 271.2v-59.4004h-66.0996v59.4004h66.0996zM193.7 343.3v-60.0996h-66.1006v60.0996h66.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"draft2digital\" unicode=\"&#xf396;\" horiz-adv-x=\"480\" \r\n-d=\"M480 49.9004l-144 -81.9004v64.2002l-336 -0.100586c18.2998 19.1006 84.5 87.8008 161.1 174.801c32.6006 37.1992 78 83.2998 69.7002 127.6c-5.2998 28.2998 -42.2002 50.7998 -83.2998 33.5c-8.59961 -3.59961 -24.5 -17.4004 -26.2998 -24.7002\r\n-c28.2998 -4.7002 48 -29.7002 48 -56.7998c0 -31.7002 -25.6006 -57.4004 -57.2998 -57.4004c-37.3008 0 -62.2002 34.1006 -56.7002 67.1006c1.2002 7.89941 5.09961 26.7998 18.2002 47.7002c14.8994 23.8994 45.1992 54.8994 104.3 67.2998\r\n-c103.8 21.7002 161.6 -36.6006 166 -41.2002c28.8994 -29.9004 48 -90.7002 12.7998 -153.3c-30 -53.4004 -81 -114.3 -111.8 -149.3h91.2998v64.6992zM369.9 77v-54.4004l47.0996 27.2002zM134.2 286.6c0 12.3008 -10 22.4004 -22.4004 22.4004\r\n-c-12.3994 0 -22.3994 -10 -22.3994 -22.4004c0 -12.3994 10 -22.3994 22.3994 -22.3994c12.4004 0 22.4004 10 22.4004 22.3994zM82.5 67.5h114.4c17.5996 19.2002 91.5 100.8 128.5 166.7c36.5996 65.0996 -5.80078 113.3 -5.80078 113.3\r\n-c-14.1992 14.9004 -36.8994 36.2002 -82.1992 38.2998c6.7998 -5.5 16.8994 -16.8994 24.2998 -35.7002c11.8994 -30.2998 6.7002 -69.5996 -28.4004 -112.699c-53.0996 -65.2002 -125.2 -142.5 -150.8 -169.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dribbble-square\" unicode=\"&#xf397;\" \r\n-d=\"M90.2002 219.8c8.89941 42.4004 37.3994 77.7002 75.7002 95.7002c3.59961 -4.90039 28 -38.7998 50.6992 -79c-64 -17 -120.3 -16.7998 -126.399 -16.7002zM314.6 294c-2.5 -3.5 -23 -31.0996 -71.5996 -49.4004c-22.4004 41.1006 -47.2002 74.9004 -51 80\r\n-c43.2998 10.5 89 -0.799805 122.6 -30.5996zM140.1 84c14.3008 29.2002 53 66.7998 108.101 85.5996c19.2002 -49.7998 27.2002 -91.5996 29.2002 -103.6c-44 -18.7002 -96.8008 -13.5996 -137.301 18zM238.9 192.2c-49.4004 -13.9004 -94.3008 -53.9004 -116.5 -91.7998\r\n-c-21.8008 24.2998 -35.1006 56.2998 -35.1006 91.3994c0 1.40039 0.100586 2.7998 0.100586 4.2002c6 -0.200195 72.1992 -1 140.399 19.4004c3.90039 -7.7002 7.7002 -15.4004 11.1006 -23.2002zM273.8 175.9c42.7998 6.89941 80.5 -4.30078 85.1006 -5.80078\r\n-c-6.10059 -38 -27.9004 -70.8994 -58.6006 -91.5996c-1.39941 8.2998 -8.59961 48.2998 -26.5 97.4004zM253.5 224.3c50.5 20.7002 73.4004 50 76.2998 53.9004c19.1006 -23.2002 30.6006 -52.7998 30.9004 -85.1006c-4.5 1 -49.7002 10.1006 -95.2002 4.40039\r\n-c-3.7002 9 -7.2002 17 -12 26.7998zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM384 192c0 88.2002 -71.7998 160 -160 160s-160 -71.7998 -160 -160s71.7998 -160 160 -160\r\n-s160 71.7998 160 160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dyalog\" unicode=\"&#xf399;\" horiz-adv-x=\"416\" \r\n-d=\"M0 416h171.2c74.5 0 137.7 -24 182.5 -69.5996c40.2002 -40.9004 62.2998 -95.6006 62.2998 -154.301c0 -111.399 -84.0996 -224.1 -244.8 -224.1h-171.2v64h171.2c122.2 0 180.8 84 180.8 160.1c0 79.7002 -67.4004 159.9 -180.8 159.9h-107.2v-55.2002h-64v119.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"earlybirds\" unicode=\"&#xf39a;\" horiz-adv-x=\"480\" \r\n-d=\"M313.2 400.5c1.2002 13 21.2998 14 36.5996 8.7002c0.900391 -0.299805 26.2002 -9.7002 19 -15.2002c-27.8994 7.40039 -56.3994 -18.2002 -55.5996 6.5zM112.2 393.6c-7.7998 6.2002 19.8994 16.4004 20.8994 16.7002c16.8008 5.7002 38.9004 4.60059 40.2002 -9.59961\r\n-c0.900391 -27.1006 -30.3994 1 -61.0996 -7.10059zM319.4 288c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16c-8.80078 0 -16 7.2002 -16 16s7.19922 16 16 16zM159.7 288c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16z\r\n-M478.2 124.8c-9.90039 -24 -40.7002 -11 -63.9004 1.2002c-13.5 -69.0996 -58.0996 -111.4 -126.3 -124.2c0.299805 -0.899414 -2 0.100586 24 -1c33.5996 -1.39941 63.7998 3.10059 97.4004 8c-19.8008 13.7998 -11.4004 37.1006 -9.80078 38.1006\r\n-c1.40039 0.899414 14.7002 -1.7002 21.6006 -11.5c8.59961 12.5 28.3994 14.7998 30.2002 13.5996c1.59961 -1.09961 6.59961 -20.9004 -6.90039 -34.5996c4.7002 0.899414 8.2002 1.59961 9.7998 2.09961c2.60059 0.799805 17.7002 -11.2998 3.10059 -13.2998\r\n-c-14.3008 -2.2998 -22.6006 -5.10059 -47.1006 -10.7998c-45.8994 -10.7002 -85.8994 -11.8008 -117.7 -12.8008l1 -11.5996c3.80078 -18.0996 -23.3994 -24.2998 -27.5996 -6.2002c0.799805 -17.8994 -27.0996 -21.7998 -28.4004 1l-0.5 -5.2998\r\n-c-0.699219 -18.4004 -28.3994 -17.9004 -28.2998 0.599609c-7.5 -13.5 -28.0996 -6.7998 -26.3994 8.5l1.19922 12.4004c-36.6992 -0.900391 -59.6992 -3.09961 -61.7998 -3.09961c-20.8994 0 -20.8994 31.5996 0 31.5996c2.40039 0 27.7002 -1.2998 63.2002 -2.7998\r\n-c-61.0996 15.5 -103.7 55 -114.9 118.2c-25 -12.8008 -57.5 -26.8008 -68.1992 -0.800781c-10.5 25.4004 21.5 42.6006 66.7998 73.4004c0.700195 6.59961 1.59961 13.2998 2.7002 19.7998c-14.4004 19.6006 -11.6006 36.2998 -16.1006 60.4004\r\n-c-16.7998 -2.40039 -23.2002 9.09961 -23.5996 23.0996c0.299805 7.2998 2.09961 14.9004 2.39941 15.4004c1.10059 1.7998 10.1006 2 12.7002 2.59961c6 31.7002 50.6006 33.2002 90.9004 34.5c19.7002 21.7998 45.2002 41.5 80.8994 48.2998\r\n-c-15.2998 19.4004 -3.39941 39.9004 -2.39941 40.4004c1.7002 0.799805 21.2002 -4.2998 26.2998 -23.2002c5.2002 8.7998 18.2998 11.4004 19.5996 10.7002c1.10059 -0.599609 6.40039 -15 -4.89941 -25.9004c40.2998 -3.5 72.2002 -24.6992 96 -50.6992\r\n-c36.0996 -1.5 71.7998 -5.90039 77.0996 -34c2.7002 -0.600586 11.6006 -0.800781 12.7002 -2.60059c0.299805 -0.5 2.09961 -8.09961 2.40039 -15.3994c-0.5 -13.9004 -6.80078 -25.4004 -23.6006 -23.1006c-3.2002 -17.2998 -2.7002 -32.8994 -8.7002 -47.7002\r\n-c2.40039 -11.6992 4 -23.7998 4.80078 -36.3994c37 -25.4004 70.2998 -42.5 60.2998 -66.9004zM207.4 288.1c0.899414 44 -37.9004 42.2002 -78.6006 40.3008c-21.7002 -1 -38.8994 -1.90039 -45.5 -13.9004c-11.3994 -20.9004 5.90039 -92.9004 23.2002 -101.2\r\n-c9.7998 -4.7002 73.4004 -7.89941 86.2998 7.10059c8.2002 9.39941 15 49.3994 14.6006 67.6992zM259.4 229.8c-4.30078 12.4004 -6 30.1006 -15.3008 32.7002c-2 0.5 -9 0.5 -11 0c-10 -2.7998 -10.7998 -22.0996 -17 -37.2002c15.4004 0 19.3008 -9.7002 23.7002 -9.7002\r\n-c4.2998 0 6.2998 11.3008 19.6006 14.2002zM395.1 314.5c-6.59961 12.0996 -24.7998 12.9004 -46.5 13.9004c-40.1992 1.89941 -78.1992 3.7998 -77.2998 -40.3008c-0.5 -18.2998 5 -58.2998 13.2002 -67.7998c13 -14.8994 76.5996 -11.7998 86.2998 -7.09961\r\n-c15.7998 7.59961 36.5 78.8994 24.2998 101.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"erlang\" unicode=\"&#xf39d;\" horiz-adv-x=\"640\" \r\n-d=\"M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z\r\n-M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399\r\n-c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook-f\" unicode=\"&#xf39e;\" horiz-adv-x=\"320\" \r\n-d=\"M279.14 160h-74.6895v-224h-100.17v224h-81.3906v92.6602h81.3906v70.6201c0 80.3398 47.8594 124.72 121.08 124.72c35.0693 0 71.75 -6.25977 71.75 -6.25977v-78.8906h-40.4199c-39.8203 0 -52.2402 -24.71 -52.2402 -50.0596v-60.1299h88.9102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"facebook-messenger\" unicode=\"&#xf39f;\" horiz-adv-x=\"512\" \r\n-d=\"M256.55 440c140.04 0 247.45 -102.34 247.45 -240.57c0 -175.13 -166.15 -273.229 -319.44 -231.04c-8.96973 2.44043 -9.64941 0.600586 -62.5596 -22.6992c-2.10449 -0.918945 -5.67578 -1.66504 -7.97168 -1.66504c-10.624 0 -19.543 8.61719 -19.9082 19.2344\r\n-c-1.41992 46.3701 0.299805 50.7207 -8.0498 58.2305c-48.3604 43.1602 -78.0703 105.64 -78.0703 177.939c0 138.23 108.52 240.57 248.55 240.57zM405.79 254.87c7.0498 11.0801 -6.65039 23.5996 -17.0898 15.6201l-78.4102 -59.3799\r\n-c-2.20801 -1.65625 -6.24023 -3 -9 -3s-6.79199 1.34375 -9 3l-58.0596 43.46c-5.48926 4.09961 -15.5049 7.42676 -22.3564 7.42676c-11.3438 0 -25.4805 -7.77637 -31.5537 -17.3574l-73 -115.569c-7.05078 -11.0703 6.64941 -23.6006 17.1094 -15.6699l78.3701 59.4395\r\n-c2.20801 1.65625 6.24023 3 9 3s6.79199 -1.34375 9 -3l58.0801 -43.4697c5.48926 -4.09766 15.5039 -7.42285 22.3535 -7.42285c11.3428 0 25.4805 7.77441 31.5566 17.3525z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"firstdraft\" unicode=\"&#xf3a1;\" horiz-adv-x=\"384\" \r\n-d=\"M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fonticons-fi\" unicode=\"&#xf3a2;\" horiz-adv-x=\"384\" \r\n-d=\"M114.4 224h92.3994l-15.2002 -51.2002h-76.3994v-157.8c0 -8 -2.7998 -9.2002 4.39941 -10l59.6006 -5.59961v-34.4004h-179.2v35.2002l29.2002 2.7998c7.2002 0.799805 9.2002 3.2002 9.2002 10.7998v155.8c0 3.2002 -4 3.2002 -8 3.2002h-30.4004v51.2002h38.4004\r\n-v28.7998c0 68 36.3994 96 106 96c46.7998 0 88.7998 -11.2002 88.7998 -72.3994l-69.6006 -8.40039c0.400391 25.5996 -6 31.5996 -22.3994 31.5996c-25.2002 0 -26 -13.5996 -26 -37.5996v-32c0 -3.2002 -4.7998 -6 -0.799805 -6zM384 -35h-140.8v34.4004l28 3.59961\r\n-c7.2002 0.799805 10.3994 2.40039 10.3994 10v148c0 5.59961 -4 9.2002 -9.19922 10.7998l-33.2002 8.7998l9.2002 40.4004h110v-208c0 -8 -3.60059 -8.7998 4 -10l21.5996 -3.59961v-34.4004zM354 312.2l12.4004 -45.6006l-10 -10l-42.8008 22.8008l-42.7998 -22.8008\r\n-l-10 10l12.4004 45.6006l-30 36.3994l4.7998 10h38l21.2002 38.4004h12.7998l21.2002 -38.4004h38l4.7998 -13.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fort-awesome-alt\" unicode=\"&#xf3a3;\" horiz-adv-x=\"512\" \r\n-d=\"M208 210.6c2.09961 0 3.7002 -1.59961 3.7002 -3.69922v-51.7002c0 -2.10059 -1.60059 -3.7002 -3.7002 -3.7002h-22.2002c-2.09961 0 -3.7002 1.59961 -3.7002 3.7002v51.7002c0 2.09961 1.60059 3.69922 3.7002 3.69922h22.2002zM326.2 210.6\r\n-c2 0 3.59961 -1.59961 3.7002 -3.69922v-51.7002c0 -2.10059 -1.60059 -3.7002 -3.7002 -3.7002h-22.2002c-2.09961 0 -3.7002 1.59961 -3.7002 3.7002v51.7002c0 2.09961 1.60059 3.69922 3.7002 3.69922h22.2002zM458.2 335.7\r\n-c28.8994 -40.7002 45.7998 -90.2002 45.7998 -143.7c0 -2 0 -4 -0.0996094 -6c0 -0.700195 0 -1.2998 -0.100586 -2c0 -1.2998 -0.0996094 -2.7002 -0.200195 -4c0 -0.799805 -0.0996094 -1.5 -0.0996094 -2.2998\r\n-c-0.0996094 -1.2002 -0.0996094 -2.40039 -0.200195 -0.700195c-0.0996094 -0.799805 -0.0996094 -1.59961 -0.200195 -2.40039c-0.0996094 -1.19922 -0.199219 -2.39941 -0.299805 -3.5c-0.0996094 -0.799805 -0.200195 -1.59961 -0.200195 -2.39941\r\n-c-0.0996094 -1.2002 -0.299805 -2.40039 -0.399414 -3.60059c-0.100586 -0.799805 -0.200195 -1.5 -0.299805 -2.2998c-0.200195 -1.2998 -0.400391 -2.59961 -0.5 -3.89941c-0.100586 -0.600586 -0.200195 -1.30078 -0.300781 -1.90039l-0.899414 -5.7002\r\n-c-0.100586 -0.599609 -0.200195 -1.09961 -0.299805 -1.7002c-0.200195 -1.2998 -0.5 -2.69922 -0.800781 -4c-0.199219 -0.799805 -0.299805 -1.59961 -0.5 -2.39941c-0.199219 -1.10059 -0.5 -2.2002 -0.699219 -3.2002\r\n-c-0.200195 -0.900391 -0.400391 -1.7002 -0.600586 -2.59961c-0.200195 -1 -0.5 -2 -0.700195 -3c-0.199219 -0.900391 -0.5 -1.80078 -0.699219 -2.7002c-0.300781 -1 -0.5 -1.90039 -0.800781 -2.90039c-0.199219 -0.899414 -0.5 -1.7998 -0.799805 -2.7002\r\n-c-0.299805 -0.899414 -0.599609 -1.89941 -0.799805 -2.7998c-0.299805 -0.899414 -0.5 -1.7998 -0.799805 -2.7002c-0.299805 -0.899414 -0.600586 -1.7998 -0.900391 -2.7998c-0.5 -1.59961 -1.09961 -3.2998 -1.7002 -4.89941\r\n-c-0.299805 -0.900391 -0.599609 -1.80078 -1 -2.80078c-0.399414 -1 -0.699219 -2 -1.09961 -3c-0.299805 -0.799805 -0.599609 -1.5 -0.900391 -2.2998l-1.19922 -3c-0.300781 -0.700195 -0.600586 -1.5 -0.900391 -2.2002c-0.400391 -1 -0.799805 -2 -1.2998 -3\r\n-l-0.900391 -2.09961c-0.399414 -1 -0.899414 -2 -1.39941 -3c-0.300781 -0.700195 -0.600586 -1.2998 -0.900391 -2c-0.5 -1 -1 -2.09961 -1.5 -3.09961c-0.299805 -0.600586 -0.599609 -1.10059 -0.799805 -1.7002c-0.600586 -1.10059 -1.10059 -2.2002 -1.7002 -3.2998\r\n-c-0.0996094 -0.200195 -0.200195 -0.300781 -0.299805 -0.5c-2.2002 -4.10059 -4.40039 -8.2002 -6.7998 -12.2002c-0.200195 -0.400391 -0.5 -0.799805 -0.700195 -1.2002c-0.700195 -1.09961 -1.2998 -2.2002 -2 -3.2998\r\n-c-0.299805 -0.5 -0.600586 -0.900391 -0.900391 -1.40039c-0.700195 -1.09961 -1.39941 -2.09961 -2 -3.2002c-0.299805 -0.5 -0.599609 -0.899414 -0.899414 -1.39941c-0.700195 -1.10059 -1.40039 -2.10059 -2.10059 -3.2002\r\n-c-0.299805 -0.400391 -0.599609 -0.799805 -0.799805 -1.2002c-0.799805 -1.09961 -1.5 -2.2002 -2.2998 -3.2998c-0.200195 -0.200195 -0.299805 -0.5 -0.5 -0.700195c-37.6006 -54.7002 -94.5 -91.3994 -160.101 -102.399\r\n-c-0.899414 -0.100586 -1.69922 -0.300781 -2.59961 -0.400391c-1 -0.200195 -2.09961 -0.299805 -3.09961 -0.5c-0.900391 -0.0996094 -1.80078 -0.299805 -2.80078 -0.400391c-1 -0.0996094 -2 -0.299805 -3 -0.399414c-1 -0.100586 -2 -0.200195 -2.89941 -0.299805\r\n-c-1 -0.100586 -1.90039 -0.200195 -2.90039 -0.300781c-1 -0.0996094 -2.09961 -0.199219 -3.09961 -0.299805c-0.900391 -0.0996094 -1.7998 -0.200195 -2.7002 -0.200195c-1.09961 -0.0996094 -2.2998 -0.0996094 -3.40039 -0.199219\r\n-c-0.799805 0 -1.69922 -0.100586 -2.5 -0.100586c-1.2998 -0.0996094 -2.59961 -0.0996094 -3.89941 -0.0996094c-0.700195 0 -1.40039 -0.100586 -2.10059 -0.100586c-2 0 -4 -0.0996094 -6 -0.0996094s-4 0 -6 0.0996094c-0.699219 0 -1.39941 0 -2.09961 0.100586\r\n-c-1.2998 0 -2.59961 0.0996094 -3.90039 0.0996094c-0.799805 0 -1.69922 0.100586 -2.5 0.100586c-1.09961 0.0996094 -2.2998 0.0996094 -3.39941 0.199219c-0.900391 0.100586 -1.7998 0.100586 -2.7002 0.200195c-1 0.100586 -2.09961 0.200195 -3.09961 0.299805\r\n-c-1 0.100586 -1.90039 0.200195 -2.90039 0.300781c-1 0.0996094 -2 0.199219 -2.90039 0.299805c-1 0.0996094 -2 0.200195 -3 0.399414c-0.899414 0.100586 -1.7998 0.300781 -2.7998 0.400391s-2.09961 0.299805 -3.09961 0.5\r\n-c-0.900391 0.0996094 -1.7002 0.299805 -2.60059 0.400391c-65.5996 10.8994 -122.5 47.6992 -160 99.3994c-0.199219 0.200195 -0.299805 0.5 -0.5 0.700195c-0.799805 1.09961 -1.59961 2.2002 -2.2998 3.2998c-0.299805 0.400391 -0.599609 0.799805 -0.799805 1.2002\r\n-c-0.700195 1.09961 -1.40039 2.09961 -2.09961 3.2002c-0.300781 0.5 -0.600586 0.899414 -0.900391 1.39941c-0.700195 1.10059 -1.40039 2.10059 -2 3.2002c-0.299805 0.5 -0.599609 0.900391 -0.900391 1.40039c-0.699219 1.09961 -1.2998 2.2002 -2 3.2998\r\n-c-0.199219 0.400391 -0.5 0.799805 -0.699219 1.2002c-2.40039 4 -4.60059 8.09961 -6.80078 12.2002c-0.0996094 0.199219 -0.199219 0.299805 -0.299805 0.5c-0.599609 1.09961 -1.09961 2.19922 -1.7002 3.2998c-0.299805 0.599609 -0.599609 1.09961 -0.799805 1.7002\r\n-c-0.5 1 -1 2.09961 -1.5 3.09961c-0.299805 0.700195 -0.599609 1.2998 -0.899414 2c-0.5 1 -0.900391 2 -1.40039 3l-0.900391 2.09961c-0.399414 1 -0.899414 2 -1.2998 3c-0.299805 0.700195 -0.599609 1.5 -0.899414 2.2002l-1.2002 3\r\n-c-0.299805 0.799805 -0.600586 1.5 -0.900391 2.2998c-0.399414 1 -0.799805 2 -1.09961 3c-0.299805 0.900391 -0.600586 1.80078 -1 2.80078c-0.600586 1.59961 -1.10059 3.2998 -1.7002 4.89941c-0.299805 0.900391 -0.599609 1.7998 -0.900391 2.7998\r\n-c-0.299805 0.900391 -0.5 1.80078 -0.799805 2.7002c-0.299805 0.900391 -0.599609 1.90039 -0.799805 2.7998c-0.299805 0.900391 -0.5 1.80078 -0.799805 2.7002c-0.299805 1 -0.5 1.90039 -0.799805 2.90039c-0.200195 0.899414 -0.5 1.7998 -0.700195 2.7002\r\n-c-0.299805 1 -0.5 2 -0.700195 3c-0.200195 0.899414 -0.400391 1.69922 -0.599609 2.59961c-0.200195 1.09961 -0.5 2.2002 -0.700195 3.2002c-0.200195 0.799805 -0.299805 1.59961 -0.5 2.39941c-0.299805 1.30078 -0.5 2.7002 -0.799805 4\r\n-c-0.100586 0.600586 -0.200195 1.10059 -0.300781 1.7002l-0.899414 5.7002c-0.100586 0.599609 -0.200195 1.2998 -0.299805 1.90039c-0.200195 1.2998 -0.400391 2.59961 -0.5 3.89941c-0.100586 0.799805 -0.200195 1.5 -0.300781 2.2998\r\n-c-0.0996094 1.2002 -0.299805 2.40039 -0.399414 3.60059c-0.100586 0.799805 -0.200195 1.59961 -0.200195 2.39941c-0.0996094 1.2002 -0.200195 2.40039 -0.299805 3.5c-0.100586 0.800781 -0.100586 1.60059 -0.200195 2.40039\r\n-c-0.0996094 1.2002 -0.200195 2.40039 -0.200195 3.7002c0 0.799805 -0.0996094 1.5 -0.0996094 2.2998c-0.100586 1.2998 -0.100586 2.7002 -0.200195 4c0 0.700195 0 1.2998 -0.0996094 2c0 2 -0.100586 4 -0.100586 6c0 53.5 16.9004 103 45.7998 143.6\r\n-c2.30078 3.2002 4.7002 6.40039 7.10059 9.5c4.89941 6.2002 10.0996 12.3008 15.5996 18c2.7002 2.90039 5.5 5.7002 8.40039 8.40039c2.89941 2.7002 5.7998 5.40039 8.7998 8c4.5 3.90039 9.09961 7.59961 13.9004 11.2002c1.59961 1.2002 3.19922 2.39941 4.7998 3.5\r\n-c27.2998 19.5996 59 33.7002 93.2998 40.7998c16.0996 3.2998 32.9004 5 50 5s33.7998 -1.7002 50 -5c34.2998 -7 66 -21.0996 93.5996 -40.7002c1.60059 -1.2002 3.2002 -2.2998 4.80078 -3.5c4.7998 -3.59961 9.39941 -7.2998 13.8994 -11.2002\r\n-c12 -10.3994 23 -21.8994 32.7998 -34.3994c2.5 -3.10059 4.80078 -6.2998 7.10059 -9.5zM448 76.5v71.2998c0 2.10059 -1.59961 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.69922 -1.59961 -3.69922 -3.7002v-25.7998h-29.5v144\r\n-c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.1006c-2.09961 0 -3.69922 -1.60059 -3.69922 -3.7002v-25.9004h-29.5v25.9004c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-25.9004h-29.5v25.9004\r\n-c0 4.7998 -6.5 3.7002 -9.5 3.7002v30.7002c6.7002 1.59961 13.7998 2.7998 20.7998 2.7998c8.80078 0 16.8008 -3.5 25.4004 -3.5c3.7002 0 22.4004 0.899414 22.4004 6.5v48.3994c0 2.10059 -1.60059 3.7002 -3.7002 3.7002c-4.2002 0 -12.2002 -3.5 -19.4004 -3.5\r\n-c-7.89941 0 -16.8994 3.5 -26.2998 3.5c-6.5 0 -12.9004 -0.899414 -19.2002 -2.2998v3.90039c4.40039 2.09961 7.40039 6.69922 7.40039 11.5c0 16.7998 -25.4004 16.7998 -25.4004 0c0 -4.80078 3 -9.5 7.40039 -11.5v-90.2002c-3 0 -9.5 1.09961 -9.5 -3.7002v-25.9004\r\n-h-29.5v25.9004c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-25.9004h-29.5v25.9004c0 2.09961 -1.59961 3.7002 -3.69922 3.7002h-22.1006c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-144h-29.5996v25.7998\r\n-c0 2.10059 -1.59961 3.7002 -3.7002 3.7002h-22.0996c-2.10059 0 -3.7002 -1.59961 -3.7002 -3.7002v-71.2998c9.40039 -15.5 20.5996 -29.9004 33.5996 -42.9004c20.6006 -20.5996 44.5 -36.6992 71.2002 -48c13.9004 -5.89941 28.2002 -10.2998 42.9004 -13.1992v75.7998\r\n-c0 58.5996 88.5996 58.5996 88.5996 0v-75.7998c14.7002 2.89941 29 7.39941 42.9004 13.1992c26.7002 11.3008 50.5996 27.4004 71.2002 48c13 13 24.1992 27.4004 33.5996 42.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"freebsd\" unicode=\"&#xf3a4;\" \r\n-d=\"M303.7 351.8c11.0996 11.1006 115.5 77 139.2 53.2002c23.6992 -23.7002 -42.1006 -128.1 -53.2002 -139.2c-11.1006 -11.0996 -39.4004 -0.899414 -63.1006 22.9004c-23.7998 23.7002 -34.0996 52 -22.8994 63.0996zM109.9 379.9\r\n-c-31.6006 -19.4004 -57.9004 -46.5 -76.4004 -78.7002c-20.7998 36.2998 -44.5 89.0996 -27.9004 105.7c16.4004 16.5 68 -6.40039 104.301 -27zM406.7 274c3.2998 5.5 7 11.7998 10.8994 18.7998c17.6006 -31.2998 27.7002 -67.3994 27.7002 -105.8\r\n-c0 -119.1 -96.5 -215.6 -215.6 -215.6c-119.101 0 -215.601 96.5996 -215.601 215.6c0 119.1 96.5 215.6 215.601 215.6c35.8994 0 69.7002 -8.7998 99.5 -24.2998c-7.2998 -4 -13.9004 -8 -19.6006 -11.5996c-26 4.7002 -32.8994 -16.4004 -14.8994 -48.7002\r\n-c21.7998 -43.0996 89 -90.4004 109.3 -70.0996c5.40039 5.39941 6 14.7998 2.7002 26.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gitkraken\" unicode=\"&#xf3a6;\" horiz-adv-x=\"592\" \r\n-d=\"M565.7 329.9c11.7998 -31.6006 18.2998 -65.7002 18.2998 -101.4c0 -155.1 -122.6 -281.6 -276.3 -287.7v145.8c-8.40039 -0.5 -16.6006 -0.399414 -23.4004 0v-145.899c-153.7 6.2002 -276.3 132.7 -276.3 287.8c0 35.7002 6.5 69.7998 18.2998 101.3\r\n-c2.2998 6.2002 9.2998 9.2002 15.2998 6.60059c5.7002 -2.40039 8.5 -8.80078 6.30078 -14.6006c-10.9004 -29 -16.9004 -60.5 -16.9004 -93.2998c0 -134.6 100.4 -245.7 230.2 -262.7v123.7c-7.90039 1.59961 -15.4004 3.7002 -23 6.2002v-104\r\n-c-106.7 26 -185.9 122.1 -185.9 236.8c0 91.7998 50.7998 171.8 125.8 213.3c5.80078 3.2002 13 0.900391 15.9004 -5c2.7002 -5.5 0.700195 -12.0996 -4.7002 -15.0996c-67.8994 -37.7002 -113.899 -110.101 -113.899 -193.2c0 -93.4004 57.8994 -173.2 139.8 -205.4\r\n-v92.2002c-14.2002 4.5 -24.7998 17.7002 -24.7998 33.5c0 13.1006 6.69922 24.4004 17.2998 30.5c-8.2002 79.6006 -44.5 58.6006 -44.5 83.9004v14.7998c0 38 87.8994 161.7 129.1 164.7c2.60059 0.200195 5.10059 0.200195 7.60059 0\r\n-c41.0996 -2.90039 129 -126.7 129 -164.7v-14.7002c0 -25.2998 -36.2002 -4.39941 -44.5 -83.8994c10.5 -6.10059 17.2998 -17.4004 17.2998 -30.5c0 -15.8008 -10.7002 -29 -24.9004 -33.5v-92.2002c81.9004 32.2998 139.8 112.1 139.8 205.399\r\n-c0 83.2002 -46 155.601 -113.899 193.2c-5.2998 2.90039 -7.40039 9.60059 -4.7002 15.1006c2.90039 5.89941 10.2002 8.19922 15.9004 5c75 -41.5 125.8 -121.5 125.8 -213.301c0 -114.699 -79.2002 -210.899 -185.9 -236.8v104\r\n-c-7.5 -2.59961 -15.0996 -4.7002 -23 -6.2002v-123.699c129.9 17 230.2 128.1 230.2 262.699c0 32.8008 -6 64.3008 -16.9004 93.3008c-2.19922 5.69922 0.600586 12.1992 6.30078 14.5996c6 2.59961 13 -0.5 15.2998 -6.59961zM365.9 172.5\r\n-c-13.1006 0 -23.7002 -10.5996 -23.7002 -23.7002c0 -13.2002 10.7002 -23.7002 23.7002 -23.7002c13.0996 0 23.6992 10.6006 23.6992 23.7002c0 13.2002 -10.6992 23.7002 -23.6992 23.7002zM226.1 125.2c13.2002 0 23.7002 10.7002 23.7002 23.7002\r\n-c0 13.0996 -10.5996 23.6992 -23.7002 23.6992c-13.1992 0 -23.6992 -10.6992 -23.6992 -23.6992s10.5 -23.7002 23.6992 -23.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gofore\" unicode=\"&#xf3a7;\" horiz-adv-x=\"400\" \r\n-d=\"M324 128.2c54.2998 0 65.7002 -50.1006 67.7002 -77.7002c-46.5 -56.2998 -107.8 -82.5 -171 -82.5c-123.7 0 -220.7 101.5 -220.7 224c0 123.4 98 224 220.7 224c59 0 114.3 -23.2998 156.1 -65.5996l-62.2998 -63.3008c-25 25.4004 -58.2998 39.4004 -93.5996 39.4004\r\n-c-73.2002 0 -132.4 -60.2998 -132.4 -134.4c0 -74.1992 59.2002 -134.399 132.4 -134.399c33.5996 0 65.3994 12.7002 89.8994 35.7998v34.7002h13.2002zM311.9 240.7c47.6992 0 88.0996 -35 88.0996 -100.2v-30.5996c-15.5 26.6992 -42.5 41.7998 -76 41.7998h-118.4v89\r\n-h106.301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"goodreads\" unicode=\"&#xf3a8;\" \r\n-d=\"M299.9 256.8c5.09961 -37.2998 -4.7002 -79 -35.9004 -100.7c-22.2998 -15.5 -52.7998 -14.0996 -70.7998 -5.69922c-37.1006 17.2998 -49.5 58.5996 -46.7998 97.1992c4.2998 60.9004 40.8994 87.9004 75.2998 87.5c46.8994 0.200195 71.7998 -31.7998 78.2002 -78.2998\r\n-zM448 360v-336c0 -30.9004 -25.0996 -56 -56 -56h-336c-30.9004 0 -56 25.0996 -56 56v336c0 30.9004 25.0996 56 56 56h336c30.9004 0 56 -25.0996 56 -56zM330 134.8c0 0 -0.0996094 34 -0.0996094 217.3h-29v-40.2998c-0.800781 -0.299805 -1.2002 0.5 -1.60059 1.2002\r\n-c-9.59961 20.7002 -35.8994 46.2998 -76 46c-51.8994 -0.400391 -87.2002 -31.2002 -100.6 -77.7998c-4.2998 -14.9004 -5.7998 -30.1006 -5.5 -45.6006c1.7002 -77.8994 45.0996 -117.8 112.399 -115.199c28.9004 1.09961 54.5 17 69 45.1992\r\n-c0.5 1 1.10059 1.90039 1.7002 2.90039c0.200195 -0.0996094 0.400391 -0.0996094 0.600586 -0.200195c0.299805 -3.7998 0.199219 -30.7002 0.0996094 -34.5c-0.200195 -14.7998 -2 -29.5 -7.2002 -43.5c-7.7998 -21 -22.2998 -34.7002 -44.5 -39.5\r\n-c-17.7998 -3.89941 -35.5996 -3.7998 -53.2002 1.2002c-21.5 6.09961 -36.5 19 -41.0996 41.7998c-0.299805 1.60059 -1.2998 1.2998 -2.2998 1.2998h-26.7998c0.799805 -10.5996 3.19922 -20.2998 8.5 -29.1992c24.1992 -40.5 82.6992 -48.5 128.199 -37.4004\r\n-c49.9004 12.2998 67.3008 54.9004 67.4004 106.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"goodreads-g\" unicode=\"&#xf3a9;\" horiz-adv-x=\"384\" \r\n-d=\"M42.5996 44.7002h2.80078c12.6992 0 25.5 0 38.1992 -0.100586c1.60059 0 3.10059 0.400391 3.60059 -2.09961c7.09961 -34.9004 30 -54.5996 62.8994 -63.9004c26.9004 -7.59961 54.1006 -7.7998 81.3008 -1.7998c33.7998 7.40039 56 28.2998 68 60.4004\r\n-c8 21.5 10.6992 43.7998 11 66.5c0.0996094 5.7998 0.299805 47 -0.200195 52.7998l-0.900391 0.299805c-0.799805 -1.5 -1.7002 -2.89941 -2.5 -4.39941c-22.0996 -43.1006 -61.2998 -67.4004 -105.399 -69.1006c-103 -4 -169.4 57 -172 176.2\r\n-c-0.5 23.7002 1.7998 46.9004 8.2998 69.7002c20.5996 71.0996 74.5996 118.2 153.899 118.8c61.3008 0.400391 101.5 -38.7002 116.2 -70.2998c0.5 -1.10059 1.2998 -2.2998 2.40039 -1.90039v61.6006h44.2998c0 -280.301 0.0996094 -332.2 0.0996094 -332.2\r\n-c-0.0996094 -78.5 -26.6992 -143.7 -103 -162.2c-69.5 -16.9004 -159 -4.7998 -196 57.2002c-8 13.5 -11.7998 28.2998 -13 44.5zM188.9 411.5c-52.5 0.5 -108.5 -40.7002 -115 -133.8c-4.10059 -59 14.7998 -122.2 71.5 -148.601\r\n-c27.5996 -12.8994 74.2998 -15 108.3 8.7002c47.5996 33.2002 62.7002 97 54.7998 154c-9.7002 71.1006 -47.7998 120 -119.6 119.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-drive\" unicode=\"&#xf3aa;\" horiz-adv-x=\"512\" \r\n-d=\"M339 133.1l-163.6 282.9h161.199l163.601 -282.9h-161.2zM201.5 109.5h310.5l-80.5996 -141.5h-310.5zM154.1 380.6l82.9004 -141.399l-156.4 -271.2l-80.5996 141.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"google-play\" unicode=\"&#xf3ab;\" horiz-adv-x=\"512\" \r\n-d=\"M325.3 213.7l-220.7 221.3l280.801 -161.2zM47 448l256.6 -255.9l-256.6 -256c-13 6.80078 -21.7002 19.2002 -21.7002 35.3008v441.3c0 16.0996 8.7002 28.5 21.7002 35.2998zM472.2 222.4c19.2002 -14.3008 19.2002 -46.5 1.2002 -60.8008l-60.1006 -34.0996\r\n-l-65.7002 64.5l65.7002 64.5zM104.6 -51l220.7 221.3l60.1006 -60.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gripfire\" unicode=\"&#xf3ac;\" horiz-adv-x=\"384\" \r\n-d=\"M112.5 146.6c0 -26.8994 16.5996 -47.1992 32.5996 -69.5c22.5 -30.1992 44.2002 -56.8994 44.2002 -86.5c-0.0996094 -14.5 -4.39941 -29.6992 -17.5 -46.3994c0 5.2998 4.7998 12.2002 4.7998 22.2998c0 15.2002 -13 39.9004 -78.0996 86.5996\r\n-c-34.2998 29.1006 -66.5 58.5 -66.5 108.301c0 114.699 147.1 176.5 147.1 268.6c0 3.2998 -0.199219 6.7002 -0.599609 10c5.09961 -2.40039 39.0996 -43.2998 39.0996 -90.4004c0 -80.5 -105.1 -129.199 -105.1 -203zM317.8 185.6\r\n-c1.5 -8.39941 2.2002 -16.5996 2.2002 -24.5996c0 -51.7998 -29.4004 -97.5 -67.2998 -136.8c-1 -1 -2.2002 -2.40039 -3.2002 -2.40039c-3.59961 0 -35.5 41.6006 -35.5 53.2002c0 0 41.7998 55.7002 41.7998 96.9004c0 10.7998 -2.7002 21.6992 -9.09961 33.3994\r\n-c-1.5 -32.2998 -55.7002 -87.7002 -58.1006 -87.7002c-2.69922 0 -17.8994 22 -17.8994 42.1006c0 5.2998 1 10.7002 3.2002 15.7998c2.39941 5.5 56.5996 72 56.5996 116.7c0 6.2002 -1 12 -3.40039 17.0996l-4 7.2002c16.7002 -6.5 82.6006 -64.0996 94.7002 -130.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grunt\" unicode=\"&#xf3ad;\" horiz-adv-x=\"384\" \r\n-d=\"M61.2998 258.7c0.5 4.89941 2.7998 10 7 12h0.100586c-4.60059 1.7002 -9.2002 3.09961 -13.5 4.09961c42.1992 10.2002 73.3994 -20.5996 83.0996 -31.7998c16.5996 -19.2002 35.5 -8.7998 35.5 -8.7998c0.299805 -11.1006 -10.2998 -19 -21.0996 -19.5\r\n-c1.19922 -15.4004 -13.9004 -32.5 -13.9004 -32.5s5.59961 15 2.7002 25.2998c-0.900391 3.2002 -2 6.09961 -3 8.5c-19.2998 -17.2002 -48 -1.5 -54.9004 6.09961c-9.59961 10.6006 -12.3994 23.8008 -12.7998 34.1006c-1.7998 -3.7998 -3.2998 -9.10059 -4 -16.6006\r\n-c0 0 -6.2998 9.10059 -5.2002 19.1006zM89.5996 260.5c-2.89941 -9.09961 -3.39941 -27.7002 6.90039 -35.2998c16.2998 -12.1006 32.2998 -5 38 -1.7002c-7.5 11.2998 -25.4004 26 -44.9004 37zM231.7 214.7c-10.7998 0.399414 -21.4004 8.39941 -21.2002 19.2998\r\n-c0 0 18.7998 -10.4004 35.5 8.7998c9.7002 11.2002 40.7998 42 83.0996 31.7998c-4.2998 -0.899414 -8.89941 -2.2998 -13.5 -4.09961h0.100586c4.09961 -1.7998 6.39941 -6.7998 7 -11.7998c1.2002 -10 -5.2002 -19.1006 -5.2002 -19.1006\r\n-c-0.599609 7.5 -2.2002 12.8008 -4 16.6006c-0.5 -10.2998 -3.2002 -23.5 -12.7998 -34.1006c-6.7998 -7.59961 -35.5 -23.3994 -54.7998 -6.09961c-1 -2.5 -2.10059 -5.2998 -3 -8.5c-2.90039 -10.2998 2.69922 -25.2998 2.69922 -25.2998s-15.0996 17 -13.8994 32.5z\r\n-M294.4 260.5c-19.5 -11 -37.4004 -25.5996 -44.9004 -37c5.7002 -3.40039 21.5996 -10.5 37.9004 1.59961c10.3994 7.7002 10 26.3008 7 35.4004zM160 29.5c4.09961 0 7 -0.900391 8.7998 -2.7002c2.2002 -2.2998 1.5 -5.2998 0.900391 -6.7998\r\n-c-1.10059 -2.7002 -5.5 -11.5996 -13 -19.7998c-2.7002 -2.90039 -6.60059 -4.60059 -11 -4.60059c-4.2998 0 -8.7002 1.60059 -11.7998 4.30078c-2.30078 2.09961 -10.2002 9.5 -13.7002 18.5996c-1.2998 3.40039 -1 6.09961 0.899414 8.09961\r\n-c1.30078 1.30078 4 2.90039 9.5 2.90039h29.4004zM349.2 130.7c0 0 29.2998 -22.5 21.0996 -70.9004c-5.2998 -29.5 -23.2002 -46 -47 -54.7002c-8.7998 -19.0996 -29.3994 -45.6992 -67.2998 -49.5996c-14.5 -11.7998 -34.5 -19.5 -63.5996 -19.5h-0.200195\r\n-c-29.2002 0 -49.2002 7.7002 -63.6006 19.5c-37.8994 3.90039 -58.5 30.5 -67.2998 49.5996c-23.7998 8.60059 -41.7998 25.2002 -47 54.7002c-8.59961 48.2002 20.6006 70.7998 20.6006 70.7998c2.39941 -17.8994 13 -33.8994 24.5996 -43.7998\r\n-c3.09961 22.7002 3.7002 55.5 3.7002 62.4004c0 14.7002 -9.5 24.5 -12.2002 26.0996c-2.5 1.5 -5.2998 3 -8.2998 4.60059c-18 9.59961 -40.4004 21.5996 -40.4004 43.6992c0 16.1006 9.2998 23.2002 15.4004 27.8008c0.799805 0.599609 1.5 1.19922 2.2002 1.69922\r\n-c2.09961 1.7002 3.69922 3 4.2998 4.40039c4.39941 9.7998 3.59961 34.2002 1.7002 37.5996c-0.600586 0.700195 -16.8008 21 -11.8008 39.2002c2 7.40039 6.90039 13.2998 14.1006 17c5.2998 2.7002 11.7998 4.2002 19.5 4.5c0.0996094 2 0.5 4 0.899414 5.90039\r\n-c0.5 2.59961 1.10059 5.2998 0.900391 8.09961c-0.400391 4.7002 -0.799805 9.10059 -2.2002 11.2998c-8.39941 13.3008 -28.7998 17.6006 -29 17.6006l-12.2998 2.39941l8.09961 9.40039c0.200195 0.200195 17.3008 17.5 46.3008 17.5c7.89941 0 16 -1.2998 23.8994 -3.5\r\n-c24.2998 -7.7998 42.9004 -30.5 49.4004 -39.2998c2 0.599609 3.89941 1.2002 5.89941 1.7002c-1 26.3994 20.7002 47.3994 28.2002 48.2998c0.5 -4.5 -0.399414 -22.2002 7.2002 -27.6006c2.2002 14.4004 9.59961 30.3008 39.0996 40.7002\r\n-c-6.2998 -16.7002 -0.799805 -30.7002 1.80078 -37.2002c20.0996 18.2002 33.6992 15.2002 33.6992 15.2002s-13.1992 -22.7002 -9 -38.5c3.30078 -0.799805 6.5 -1.7002 9.60059 -2.7002c6.5 8.80078 25.2002 31.5 49.3994 39.3008\r\n-c8.10059 2.59961 16.2002 3.89941 24.1006 3.89941c29 0 46.2002 -17.2998 46.2998 -17.5l8.09961 -9.5l-12.2998 -2.39941c-0.200195 0 -20.5996 -4.30078 -29 -17.6006c-1.39941 -2.2998 -1.7998 -6.59961 -2.2002 -11.2998\r\n-c-0.199219 -2.7998 0.300781 -5.5 0.900391 -8.09961c0.400391 -2 0.799805 -3.90039 0.900391 -5.90039c7.59961 -0.299805 14.1992 -1.7998 19.5 -4.5c7.19922 -3.7002 12.0996 -9.59961 14.0996 -17c4.90039 -18.2998 -11.2002 -38.5996 -11.7998 -39.2002\r\n-c-1.90039 -3.39941 -2.7002 -27.7998 1.7002 -37.5996c0.599609 -1.40039 2.19922 -2.7002 4.2998 -4.40039c0.700195 -0.599609 1.39941 -1.09961 2.2002 -1.7002c6.09961 -4.59961 15.3994 -11.5996 15.3994 -27.7998c0 -22.0996 -22.3994 -34.0996 -40.3994 -43.7002\r\n-c-2.90039 -1.59961 -5.80078 -3.09961 -8.30078 -4.59961c-2.69922 -1.59961 -12.1992 -11.4004 -12.1992 -26.0996c0 -6.90039 0.599609 -39.7002 3.69922 -62.4004c11.6006 9.90039 22.2002 25.7998 24.6006 43.7002zM305.7 410.3\r\n-c-17.7998 -5.7002 -31.6006 -23.0996 -37.7002 -32.2002c1.59961 -0.699219 3.09961 -1.39941 4.7002 -2.19922c2.59961 -1.2002 4.89941 -2.40039 7.09961 -3.7002c2.7002 5.5 8.40039 13.7002 20.7002 22.3994c8.2002 5.80078 18.2002 8.90039 28.7002 8.90039\r\n-c3.59961 0 6.7998 -0.400391 9.2002 -0.799805c3.2998 2.09961 6.59961 3.89941 9.69922 5.2998c-4.7998 2 -13.6992 5 -24.6992 5c-6.10059 0 -12.1006 -0.900391 -17.7002 -2.7002zM326.7 392.1c-7.40039 -0.299805 -14 -2.69922 -19.6006 -7\r\n-c-8 -6.39941 -12.0996 -17.6992 -13.5 -22.5c4.90039 -4.19922 8.2002 -8.09961 10.5 -11.1992c3.40039 1 7.30078 1.89941 11.5 2.69922c3.30078 4.5 3.90039 10.6006 4.40039 17c0.5 6.2002 1.09961 12.6006 4.40039 17.8008c0.699219 1.09961 1.5 2.19922 2.2998 3.19922\r\n-zM45.5996 402.7c2.40039 0.399414 5.60059 0.799805 9 0.899414c10.6006 0 20.5 -3.09961 28.8008 -8.89941c12.3994 -8.7002 18.0996 -17 20.6992 -22.4004c2.2002 1.2002 4.60059 2.5 7.10059 3.7002c1.59961 0.799805 3.2002 1.5 4.7998 2.2002\r\n-c-6.09961 8.89941 -19.9004 26.2998 -37.7002 32.0996c-5.7002 1.7998 -11.5996 2.7002 -17.7002 2.7002c-11 0 -19.8994 -3 -24.6992 -5c3.09961 -1.2998 6.39941 -3.09961 9.69922 -5.2998zM90.2998 362.6c-1.39941 4.80078 -5.5 16.1006 -13.5 22.4004\r\n-c-5.5 4.40039 -12.0996 6.7002 -19.5 7c0.799805 -1 1.60059 -2.09961 2.2998 -3.2002c3.30078 -5.2002 3.90039 -11.5996 4.40039 -17.7998c0.5 -6.40039 1 -12.5 4.2998 -16.9004c4.2002 -0.799805 8.10059 -1.7998 11.5 -2.69922c2.2002 3.19922 5.60059 7 10.5 11.1992z\r\n-M58.0996 188.1c8.7002 -5 18.1006 -16.7998 19 -34.1992c0.900391 -14.7002 -0.899414 -49.9004 -3.39941 -75.9004c12.5 -4.7998 26.7002 -6.40039 39.7002 -6.7998c2 4.09961 3.89941 8.5 5.5 13.0996c0.699219 1.90039 19.5996 51 26.3994 62.2002\r\n-c-5.39941 -39 -17.5 -73.7002 -23.5 -89.5996c3.40039 0.399414 7.2998 0.699219 11.7002 0.699219h117c4.40039 0 8.2002 -0.199219 11.7002 -0.699219c-6 15.8994 -18 50.5996 -23.5 89.5996c6.7998 -11.0996 25.7002 -60.2002 26.3994 -62.2002\r\n-c1.60059 -4.59961 3.5 -9 5.5 -13.0996c13 0.399414 27.3008 2 39.7002 6.7998c-2.5 26 -4.2998 61.2998 -3.39941 75.9004c1.09961 17.5 10.3994 29.1992 19.0996 34.1992c2.7002 1.5 5.5 3.10059 8.40039 4.60059c14.7998 8 30.1992 16.2998 30.1992 30.5\r\n-c0 11.0996 -4.2998 14.5 -8.89941 18.2002l-0.5 0.399414c-0.700195 0.600586 -1.5 1.2002 -2.2002 1.7998c0.900391 -7.19922 1.90039 -13.2998 2.7002 -14.8994c0 0 -12.1006 15 -15.7002 44.2998c-1.40039 11.5 1.09961 34.2002 5.09961 43\r\n-c-0.199219 -4.90039 0 -9.7998 0.300781 -14.4004c0.399414 0.900391 0.799805 1.60059 1.2998 2.2002c3.2998 4 11.8994 17.5 9.39941 26.6006c-1 3.39941 -3.19922 6 -6.69922 7.7998c-3.80078 1.89941 -8.80078 2.89941 -15.1006 2.89941\r\n-c-12.2998 0 -25.8994 -3.7998 -32.8994 -6c-25.1006 -7.89941 -55.4004 -30.8994 -64.1006 -37.6992c-0.200195 -0.200195 -0.399414 -0.300781 -0.399414 -0.300781l-5.60059 -3.89941l3.5 5.7998c0.200195 0.299805 19.1006 31.4004 53.1006 46.5\r\n-c-2 2.90039 -7.40039 8.2002 -21.6006 15.0996c-21.3994 10.5 -46.3994 15.8008 -74.2998 15.8008c-27.7998 0 -52.9004 -5.30078 -74.2998 -15.8008c-14.2002 -7 -19.6006 -12.1992 -21.6006 -15.0996c34.1006 -15.0996 53 -46.2002 53.2002 -46.5l3.5 -5.7998\r\n-l-5.59961 3.89941s-0.200195 0.100586 -0.400391 0.300781c-8.7002 6.7998 -39 29.6992 -64.0996 37.6992c-7 2.30078 -20.6006 6 -32.9004 6c-6.2998 0 -11.2998 -1 -15.0996 -2.89941c-3.60059 -1.7998 -5.7998 -4.2998 -6.7002 -7.7998\r\n-c-2.40039 -9.10059 6.2002 -22.6006 9.40039 -26.6006c0.5 -0.599609 0.899414 -1.39941 1.2998 -2.2002c0.299805 4.60059 0.5 9.5 0.299805 14.4004c4 -8.7002 6.5 -31.5 5.09961 -43c-3.59961 -29.2998 -15.6992 -44.2998 -15.6992 -44.2998\r\n-c0.799805 1.59961 1.7998 7.7002 2.69922 14.8994c-0.799805 -0.599609 -1.5 -1.19922 -2.19922 -1.7998l-0.5 -0.399414c-4.60059 -3.60059 -8.90039 -7.10059 -8.90039 -18.2002c0 -14.2002 15.2998 -22.5 30.2002 -30.5c2.7998 -1.5 5.7002 -3 8.39941 -4.60059z\r\n-M34.7998 43.4004c11.9004 -19.7002 35.5 -29.4004 58.2002 -29.5c-4.5 13.2998 -3.09961 24 4.09961 31.7998l1.40039 1.39941c1.7998 2.40039 4.2998 5.80078 7 10c-27.2002 1.10059 -63.5 11 -74.4004 45.4004c-5 -5 -8.39941 -39.0996 3.7002 -59.0996zM80.5 -0.0996094\r\n-c6.5 -9.5 16.5 -19.6006 30.9004 -25.5c-4.90039 7.19922 -8.80078 15.0996 -12.3008 23.0996c-6.39941 0.5 -12.5996 1.2998 -18.5996 2.40039zM192 -50.2002c60.5996 0.100586 78.2998 45.9004 84.9004 64.7002c3.59961 10.5 3.2998 18.2998 -0.900391 23.0996\r\n-c-2.7998 3.30078 -9.5 7.2002 -24.5996 7.2002h-118.801c-15.0996 0 -21.6992 -3.89941 -24.5996 -7.2002c-4.2998 -4.89941 -4.59961 -12.5996 -0.900391 -23.0996c6.60059 -18.9004 24.3008 -64.5996 84.9004 -64.7002zM272.6 -25.5996\r\n-c14.4004 5.89941 24.4004 16 30.9004 25.5c-6 -1.10059 -12.2002 -1.90039 -18.5996 -2.40039c-3.5 -8 -7.40039 -15.9004 -12.3008 -23.0996zM349.2 43.4004c12.2002 19.8994 8.7998 54 3.7998 59c-10.9004 -34.4004 -47.2002 -44.2002 -74.4004 -45.4004\r\n-c2.7002 -4.2002 5.2002 -7.59961 7 -10c0.5 -0.5 1 -1 1.40039 -1.5c7.2002 -7.7002 8.59961 -18.5 4.09961 -31.7998c22.5 0.399414 46.1006 10 58.1006 29.7002zM191.9 260.3c-12.7002 0.200195 -27.2002 17.7998 -27.2002 17.7998\r\n-c9.89941 -6 18.7998 -8.09961 27.2998 -8.2998c8.5 0.200195 17.4004 2.2998 27.2998 8.2998c0 0 -14.5 -17.6992 -27.2002 -17.7998h-0.199219zM253.6 29.5996c5.40039 -0.0996094 8.10059 -1.69922 9.40039 -3c1.90039 -1.89941 2.2002 -4.59961 0.900391 -7.89941\r\n-c-3.5 -8.90039 -11.4004 -16.1006 -13.7002 -18.1006c-3.10059 -2.59961 -7.40039 -4.19922 -11.7998 -4.19922c-4.40039 0 -8.30078 1.59961 -11 4.5c-7.5 8 -12 16.6992 -13 19.2998c-0.600586 1.5 -1.30078 4.39941 0.899414 6.7002\r\n-c1.7002 1.7998 4.7002 2.69922 8.90039 2.69922h29.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gulp\" unicode=\"&#xf3ae;\" horiz-adv-x=\"256\" \r\n-d=\"M209.8 56.9004l-14.0996 -24.6006l-4.60059 -80.2002c0 -8.89941 -28.2998 -16.0996 -63.0996 -16.0996s-63.0996 7.2002 -63.0996 16.0996l-5.80078 79.4004l-14.8994 25.4004c41.2002 -17.3008 126 -16.7002 165.6 0zM13.7998 310.2\r\n-c30.7002 -17 197.8 -16.9004 228.3 0.200195l-14.7998 -136.801c-4.7998 -4.19922 -11.5996 -10.1992 -16.5996 -14.0996c-1.60059 -1.2002 -6 -4.7002 -8 -4.7002c-1.2998 0 -2.2002 0.5 -2.2002 1.7998c0.0996094 1 3.40039 4.5 5 6.40039\r\n-c4.90039 5.7002 13.7998 16 13.7998 23.4004c0 7 -10.7002 14.0996 -25.7002 0.199219c-1.59961 -1.5 -3.09961 -3 -4.5 -4.5c0.400391 1.10059 1.10059 5.10059 1.10059 6.2002c0 2.7998 -1.40039 4 -4.2002 4c-1 0 -1.90039 -0.599609 -2.7002 -1.59961\r\n-c-2.59961 -3.10059 -3.89941 -7.5 -5.2998 -11.2998c-0.5 -1.80078 -1.09961 -3.60059 -1.7002 -5.5c-0.399414 -0.200195 -0.700195 -0.300781 -0.899414 -0.600586c-3.80078 -3.89941 -17.7002 -17 -23.1006 -17c-2.2998 0 -1.59961 3.60059 -1 5.7998\r\n-c1 3.40039 6.7998 17.7002 8.7002 22.3008c4.59961 11.0996 8 19.7998 13.2002 31.8994c3.89941 9.2002 3.7998 8.60059 4.5 10.5c0.700195 2.10059 0.700195 4.90039 -1 6.2002c-1 0.700195 -2 1.09961 -3.2002 1.09961c-2.40039 0 -4.7998 -1.39941 -6.09961 -4.69922\r\n-c-25.5 -64.4004 -25.2002 -63.3008 -26.4004 -68.2002c-2 -1.7002 -4.40039 -3.40039 -6.7998 -4.5c-3.10059 -1.40039 -6.7998 -2.2002 -6.7998 1.2002c0 3.69922 1.39941 8.19922 2.69922 11.6992c2.2002 6.10059 4.90039 11.1006 6.90039 16.7002\r\n-c0.900391 2.40039 1.2998 4.7002 -0.400391 6.90039c-0.799805 1 -1.89941 1.5 -3.19922 1.5c-2.60059 0 -4.10059 -2.60059 -5.2002 -5.10059c-0.700195 -1.5 -1.2998 -3.09961 -1.7998 -4.7998c-1.2002 -4 -3.60059 -8.7002 -5.60059 -12.2998\r\n-c-2.7998 -5 -6.5 -10.0996 -11.0996 -13.5c-2.2002 -1.59961 -4.5 -2.40039 -6.90039 -2.40039c-3.5 0 -2.39941 5.7002 -1.5 9c2.2002 7.80078 5.5 13.3008 9.2998 20.8008c1.30078 2.69922 2.30078 5.39941 -0.299805 7.19922c-0.5 0.300781 -1 0.5 -1.59961 0.700195\r\n-c-3.40039 0.900391 -6 -1.09961 -7.60059 -4.5c-3.09961 -6.2998 -5.39941 -11.7002 -7.09961 -16.2002c-3.2998 -8.89941 -6.90039 -18.2998 -4.59961 -23.7998c1.5 -3.7002 4.5 -5.09961 8.59961 -5.09961c9.7998 0 17.7998 6.7002 22.4004 14.8994\r\n-c-4.30078 -19.7998 8.19922 -17.2998 20 -8.09961c0.0996094 -0.400391 0.0996094 -0.799805 0.199219 -1.2002c1.5 -6.7002 8.7002 -6.7002 14.5 -4.09961c3.5 1.59961 8.2002 4.5 14.4004 10.5c0.200195 0.299805 0.799805 1.39941 -0.799805 -2.2998\r\n-c-7.2002 -16.2002 -13.5 -28.2002 -15 -34.3008c-0.200195 -0.899414 -0.299805 -1.7998 -0.299805 -2.69922c0 -1.80078 0.399414 -3.10059 1.2998 -3.7002c1.59961 -1.2002 4.2002 -1.2998 6.09961 -0.299805c1.7998 1 3.10059 2.59961 4 4.5\r\n-c1 2.19922 0.200195 0.699219 5.2002 14c5 13.3994 2.90039 7.7998 9.09961 22c1.90039 4.2998 4.2002 9.5 8.5 15.5c2.5 3.39941 5.5 7 8.7002 9.69922c5.7002 4.7002 11.7002 5.40039 11.7002 2.5c0 -2.19922 -3.2998 -6.39941 -4.7002 -8.09961\r\n-c-5.2998 -6.7002 -14.3994 -16.2998 -14.3994 -21.5c0 -9.5 12 -8 17.3994 -5.7002c7.2998 3.2002 13.9004 9.60059 19.6006 14.7998l-10.9004 -94.5996c-1.90039 -4.90039 -39.0996 -17.0996 -88.2002 -17.0996c-49 0 -86.2002 12.0996 -88.2002 17.0996l-7.59961 79.5996\r\n-c2.09961 -1.5 4.2998 -2.39941 7.7002 -2.39941c7.39941 0 16.0996 6.7002 21.5 11.7998c2.2998 2.2002 4.39941 4.40039 6.39941 6.59961c-1 -3 -7.09961 -22 -7.2998 -25.1992c-0.0996094 -1 -0.200195 -4.90039 0.799805 -6.30078\r\n-c0.5 -0.799805 1.40039 -1.19922 2.60059 -1.19922c2.89941 0 5.59961 4.69922 6.2998 7.5c0 0 1.7998 6.2998 7.59961 25.7998c6.30078 21.0996 10 24.5 10 34.7002c0 5.59961 -7.2998 6.7998 -9.89941 0l-5.2002 -15.5c-2.2002 -4.5 -8 -11.5 -12.5 -16\r\n-c-3.5 -3.5 -10.7998 -10.1006 -15.7998 -10.1006c-2.40039 0 -3.90039 1.40039 -4.90039 3.60059c-2.2998 5.2998 -0.899414 14.2998 0.600586 19.8994c2.59961 9.7002 6.89941 19.4004 12 28.2002c4.19922 7.2998 10.1992 15.7002 17.0996 20.7002\r\n-c6.59961 4.7998 12.7998 4.5 16.9004 -2.7998c1.5 -2.7002 3.7998 -7.30078 6.7998 -7.30078c2.5 0 5.7002 2.60059 4.5 9.10059c-0.5 2.5 -4.90039 8.7998 -10.1006 11.7998c-6 3.59961 -12.3994 3.59961 -18.6992 0.900391\r\n-c-19.2002 -8.2002 -34.1006 -35.2002 -40 -55.2002zM243.5 318.7c0 -21 -231.2 -21 -231.2 0c0 8.7998 51.7998 15.8994 115.601 15.8994c9 0 17.7998 -0.0996094 26.2998 -0.399414l12.5996 48.7002l61.2998 64.5c1.40039 1.39941 5.80078 0.199219 9.90039 -3.5\r\n-c4.09961 -3.7002 6.59961 -7.90039 5.2998 -9.30078l-0.0996094 -0.0996094l-57.2998 -60.5l-10 -40.7002c39.8994 -2.59961 67.5996 -8.09961 67.5996 -14.5996zM174.1 314.1c0 0.800781 -0.899414 1.5 -2.5 2.10059l-0.199219 -0.799805\r\n-c0 -1.30078 -5 -2.40039 -11.1006 -2.40039c-6.09961 0 -11.0996 1.09961 -11.0996 2.40039c0 0.0996094 0 0.199219 0.0996094 0.299805l0.200195 0.700195c-1.7998 -0.600586 -3 -1.40039 -3 -2.30078c0 -2.09961 6.2002 -3.69922 13.7002 -3.69922\r\n-c7.7002 -0.100586 13.8994 1.59961 13.8994 3.69922z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hacker-news-square\" unicode=\"&#xf3af;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391z\r\n-M239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hire-a-helper\" unicode=\"&#xf3b0;\" horiz-adv-x=\"512\" \r\n-d=\"M443.1 448c3.90039 -36.4004 32.5 -65.7998 68.9004 -71.7002v-370.5c-35.4004 -4 -64.9004 -33.3994 -67.9004 -69.7998h-372.199c-5.90039 36.4004 -34.5 63.9004 -71.9004 68.7998v371.5c37.4004 3.90039 67.9004 34.4004 71.9004 71.7002h371.199zM406.1 43.0996\r\n-c7.80078 0 5.80078 10.8008 0 10.8008c-10.2998 3.39941 -13.5 3.59961 -21.6992 13.7998c-7.80078 12.8994 -7.90039 44.3994 -7.90039 127.8v101.2c0 22.0996 12.2002 28.2998 28.5996 32.3994c8.90039 2.2002 3.90039 11.8008 -1 11.8008\r\n-c-36.5 0 -20.5996 -2 -57.0996 -2c-32.7002 0 -16.5 2 -49.2002 2c-3.2998 0 -8.5 -8.30078 -1 -10.8008c4.90039 -1.59961 27.6006 -3.69922 27.6006 -39.2998c0 -45.5996 0.199219 -55.7998 -1 -68.7998c0 -1.2998 -2.30078 -12.7998 -12.8008 -12.7998h-109.199\r\n-c-10.5 0 -12.8008 11.5 -12.8008 12.7998c-1.19922 13 -1 23.2002 -1 68.7998c0 35.6006 22.7002 37.7002 27.6006 39.2998c7.5 2.5 2.2998 10.8008 -1 10.8008c-32.7002 0 -16.5 -2 -49.2002 -2c-36.5 0 -20.5996 2 -57.0996 2c-5 0 -9.80078 -9.60059 -1 -11.8008\r\n-c16.3994 -4.09961 28.5996 -10.1992 28.5996 -32.3994v-101.2c0 -83.4004 -0.200195 -114.9 -7.90039 -127.8c-8.19922 -10.2998 -11.5 -10.4004 -21.6992 -13.7998c-5.80078 0 -7.90039 -10.8008 0 -10.8008c36.2998 0 18.7998 2 55.0996 2c35.7998 0 21 -2 56.0996 -2\r\n-c6 0 4.90039 8.2002 0 9.80078c-22.7998 7.59961 -22.8994 10.2998 -24.5996 12.7998c-10.4004 15.5996 -5.90039 83 -5.90039 113c0 5.2998 6.40039 12.7998 13.8008 12.7998h111.199c7.40039 0 13.8008 -7.5 13.8008 -12.7998c0 -30 4.5 -97.4004 -5.90039 -113\r\n-c-1.7002 -2.60059 -1.7998 -5.2002 -24.5996 -12.7998c-4.90039 -1.60059 -5.90039 -9.80078 0 -9.80078c35.0996 0 20.2998 2 56.0996 2c36.2998 0 18.7998 -2 55.0996 -2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hotjar\" unicode=\"&#xf3b1;\" \r\n-d=\"M414.9 286.5c30 -53 41.7998 -121.6 26.2998 -180.9c-14.7002 -56.6992 -68.2998 -120.3 -148.8 -145.6c54.5 76.9004 43.8994 200.1 -27.1006 215.5c54.2002 -93.9004 -53.7002 -180.3 -110.8 -93.9004c-2.5 -7.19922 -25.0996 -74.5 4.09961 -129.6\r\n-c-61.0996 9.09961 -117.8 33.5 -144.6 93.4004c-35 78.1992 -2.7002 149.8 79 204.899c129.2 87.2998 28.0996 197.7 28.0996 197.7s219.101 -29 293.801 -161.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hubspot\" unicode=\"&#xf3b2;\" horiz-adv-x=\"512\" \r\n-d=\"M267.4 236.4l-163.2 114.699c-7.90039 -4.69922 -17 -7.59961 -26.7998 -7.59961c-28.8008 0 -52.2002 23.4004 -52.2002 52.2998c0 28.7998 23.3994 52.2002 52.2002 52.2002c28.8994 0 52.3994 -23.4004 52.3994 -52.2002c0 -4.7998 -0.799805 -9.39941 -2 -13.7998\r\n-c51.4004 -39.0996 141.3 -103.9 168.9 -124.8c13.0996 6.89941 27.5 11.5 42.7002 13.5996v61.2002c-17.5 7.40039 -28.2002 23.7998 -28.2002 42.9004c0 26.0996 20.5996 47.8994 46.7002 47.8994c26.0996 0 47 -21.7998 47 -47.8994\r\n-c0 -19.1006 -10.7002 -35.5 -28.2002 -42.9004v-61.5996c62.5 -9.5 110.2 -63.5 110.2 -128.7c0 -71.9004 -58.1006 -130.2 -130 -130.2c-29.9004 0 -57.3008 10 -79.3008 26.9004l-50 -50.2002c1.30078 -3.90039 1.90039 -7.90039 1.90039 -12.1006\r\n-c0 -10.6992 -4.2002 -20.8994 -11.7998 -28.5c-7.7002 -7.69922 -17.7998 -11.5996 -28.6006 -11.5996c-10.6992 0 -20.8994 4 -28.5 11.5996c-7.59961 7.60059 -11.7998 17.7002 -11.7998 28.5c0 10.8008 4.2002 21 11.7998 28.6006\r\n-c7.60059 7.59961 17.7002 11.7998 28.5 11.7998c4.90039 0 9.60059 -0.900391 14 -2.5l49.5 49.7998c-16.2998 21.7002 -26 48.7002 -26 78c0 37.2998 15.7002 70.9004 40.8008 94.6006zM356.9 72.7998c38.0996 0 69 30.9004 69 69c0 38.1006 -30.9004 69 -69 69\r\n-c-38.1006 0 -69 -30.8994 -69 -69c0 -38.0996 30.8994 -69 69 -69z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"itunes\" unicode=\"&#xf3b4;\" \r\n-d=\"M223.6 367.7c94.5 0 171.2 -76.7002 171.2 -171.3c0 -94.5 -76.5996 -171.2 -171.2 -171.2c-94.5996 0 -171.1 76.7998 -171.1 171.3s76.5 171.2 171.1 171.2zM303 127.7c1.40039 6.2002 0.900391 -3 1 167.6c0 5.7002 -3.2998 9.10059 -9 8.7002\r\n-c-1.7998 0 -14.0996 -2.40039 -115.1 -21.4004c-0.900391 0 -4.60059 -1 -6.7002 -2.69922c-2 -1.60059 -3.10059 -3.80078 -3.5 -6.40039c-1.7002 -6.7002 2.39941 -128 -2.60059 -133.7c-2.09961 -2.5 -4.69922 -3.2002 -7.69922 -3.7002\r\n-c-17.7002 -3.19922 -29.6006 -4.7998 -38 -12.7998c-14.5 -14.2002 -7 -38.8994 14.3994 -42.8994c8 -1.40039 23.1006 0.599609 31.4004 5.19922c7.2998 3.80078 12.7998 10.6006 14.8994 19.6006c1.7002 7.7002 1.2002 2.39941 1.2002 118.5\r\n-c0 5.7002 1.7002 7.2002 6.7002 8.2998c0 0 87.9004 16.4004 91.9004 17.0996c5.69922 1 8.39941 -0.5 8.39941 -6.09961c0 -78.7998 1 -77.2002 -2.2002 -80.7998c-2.09961 -2.5 -4.69922 -3.2002 -7.69922 -3.7002c-17.7002 -3.2002 -29.6006 -4.7998 -38 -12.7998\r\n-c-10.6006 -10.4004 -10.4004 -26.7998 1.39941 -36.7998c9.7002 -7.80078 19.7998 -7.2002 31.9004 -5c13.7998 2.59961 24.0996 10.1992 27.2998 23.7998zM345.2 416c56.8994 0 102.8 -45.9004 102.8 -102.8v-242.4c0 -56.8994 -45.7998 -102.8 -102.8 -102.8h-242.4\r\n-c-56.8994 0 -102.8 45.9004 -102.8 102.8v242.4c0 56.8994 45.9004 102.8 102.8 102.8h242.4zM223.6 4c106.301 0 192.5 86.2002 192.5 192.5s-86.1992 192.5 -192.5 192.5c-106.3 0 -192.5 -86.2002 -192.5 -192.5s86.2002 -192.5 192.5 -192.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"itunes-note\" unicode=\"&#xf3b5;\" horiz-adv-x=\"384\" \r\n-d=\"M381.9 59.7998c-6.40039 -27.3994 -27.2002 -42.7998 -55.1006 -48c-24.5 -4.5 -44.8994 -5.59961 -64.5 10.2002c-23.8994 20.0996 -24.2002 53.4004 -2.7002 74.4004c17 16.1992 40.9004 19.5 76.8008 25.7998c6 1.09961 11.1992 2.5 15.5996 7.39941\r\n-c6.40039 7.2002 4.40039 4.10059 4.40039 163.2c0 11.2002 -5.5 14.2998 -17 12.2998c-8.2002 -1.39941 -185.7 -34.5996 -185.7 -34.5996c-10.2002 -2.2002 -13.4004 -5.2002 -13.4004 -16.7002c0 -234.7 1.10059 -223.899 -2.5 -239.5\r\n-c-4.2002 -18.2002 -15.3994 -31.8994 -30.2002 -39.5c-16.7998 -9.2998 -47.1992 -13.3994 -63.3994 -10.3994c-43.2002 8.09961 -58.4004 58 -29.1006 86.5996c17 16.2002 40.9004 19.5 76.8008 25.7998c6 1.10059 11.1992 2.5 15.5996 7.40039\r\n-c10.0996 11.5 1.7998 256.6 5.2002 270.2c0.799805 5.19922 3 9.59961 7.09961 12.8994c4.2002 3.5 11.7998 5.5 13.4004 5.5c204 38.2002 228.899 43.1006 232.399 43.1006c11.5 0.799805 18.1006 -6 18.1006 -17.6006c0.200195 -344.5 1.09961 -326 -1.7998 -338.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jenkins\" unicode=\"&#xf3b6;\" horiz-adv-x=\"512\" \r\n-d=\"M487.1 23c1.5 -11.9004 -5.2998 -28.2998 -8.69922 -39.7002c-4.90039 -16.2998 -9.7002 -31.8994 -14.6006 -47.2002h-422c-0.700195 1.90039 -1.39941 4 -2.09961 6c-4.60059 14.2002 -12.6006 31.7002 -14.7002 45.8008\r\n-c-3.09961 20.8994 16.5996 22.0996 29.2002 31.0996c19.5 14 34.7998 21.7998 55.8994 34.2998c6.30078 3.7998 25.1006 13.2002 27.3008 17.6006c4.2998 8.69922 -7.30078 20.8994 -10.4004 27.6992c-4.90039 10.7002 -7.5 19.8008 -8.2002 30.4004\r\n-c-17.7002 2.7998 -31.0996 13.2998 -39.2002 25.2002c-13.3994 19.7002 -22.6992 56 -11.0996 83.7002c0.900391 2.19922 5.40039 6.5 6.09961 9.7998c1.40039 6.59961 -2.5 15.3994 -2.69922 22.3994c-1.2002 36 6.09961 67 30.2998 77.8008\r\n-c9.7998 39.0996 45 52.1992 78.0996 71.5996c12.2998 7.2998 26 11.9004 40.1006 17.0996c50.5 18.7002 128.1 15.1006 170.1 -16.5996c17.7998 -13.5 46.2002 -41.9004 56.4004 -62.5c26.8994 -54.2998 25 -145.1 6.19922 -211.2\r\n-c-2.5 -8.89941 -6.19922 -21.8994 -11.2998 -32.5996c-3.59961 -7.40039 -14.7002 -22.2998 -13.2998 -28.9004c1.40039 -6.7998 25.2998 -24.8994 30.4004 -29.8994c9.19922 -8.80078 26.7998 -20.7002 28.1992 -31.9004zM205.9 414.3\r\n-c-33.2002 -9.39941 -75.7002 -33.5 -89.3008 -63.3994c10.6006 1.5 17.9004 6.7998 28.3008 7.5c3.89941 0.299805 9.09961 -1.60059 13.5996 -0.5c9 2.2998 16.5996 22.5 23.4004 30c6.59961 7.39941 14.5996 10.5 20 17.1992c3.5 1.7002 8.69922 1.60059 8.89941 6.80078\r\n-c-1.5 1.69922 -3.09961 2.89941 -4.89941 2.39941zM101.1 320.7c-14.6992 -16.1006 -11.5996 -46.2998 -9.7998 -67.7998c26.5 16.6992 61.6006 -1.30078 61.2998 -29.6006c12.6006 0.299805 4.7002 15.7998 2.40039 25.7002c-7.5 32.5996 12.5996 67.9004 0.900391 97.5996\r\n-c-22.7002 -1.7998 -41.3008 -11 -54.8008 -25.8994zM137.8 120.5c4.90039 -20 15.7002 -46 26.2998 -61.4004c13.6006 -19.3994 40.1006 -22.2998 68.7002 -24.1992c5.10059 11 23.9004 10.0996 36.2002 7.19922c-14.7002 5.80078 -28.4004 19.9004 -39.7002 32.4004\r\n-c-13 14.2998 -26.0996 29.7002 -26.7998 48.4004c24.5 -34 44.7998 -63.8008 89.5 -78.8008c33.7998 -11.2998 73.2002 5.2002 99.2002 23.4004c10.7998 7.59961 17.2002 19.5996 24.8994 30.5996c28.7002 41.2002 42 100.101 39.1006 157.101\r\n-c-1.2002 23.5 -1.10059 47 -9 62.7998c-8.2998 16.5996 -36.2002 31.2998 -52.5 16.4004c-3 16.0996 13.5996 26.0996 33.0996 20.2998c-13.8994 18 -28.5996 39.5996 -48.2998 50.7002c-34.4004 19.5 -92.7002 34.0996 -129.3 15.7998\r\n-c-29.6006 -14.7002 -69.5 -39.1006 -83.1006 -70c12.7002 -29.7998 -3.7998 -57.1006 -4.7998 -87.4004c-0.599609 -16.0996 7.60059 -30.2002 8.2002 -47.7002c-4.40039 -7.19922 -17.7002 -8.09961 -26.9004 -7.59961c-3.09961 15.5 -8.5 32.9004 -24.5 34.7002\r\n-c-22.5 2.39941 -39.0996 -16.2998 -40.0996 -35.7998c-1.2002 -23 17.7002 -61 44.4004 -58.4004c10.2998 1.09961 12.7998 11.4004 24.0996 11.2998c6.09961 -12.2002 -9.40039 -16 -11 -24.7002c-0.400391 -2.19922 1.2998 -11 2.2998 -15.0996zM359.8 -3.59961\r\n-c-1.59961 -4.40039 0.299805 -10.4004 -0.599609 -16.5c14.8994 -4.2002 31.8994 -6.40039 50.7002 -7c3.69922 4.7998 4.89941 13.7998 4.5 22.7998c-0.600586 10.7998 -3.40039 33.0996 -10.1006 37c-14.0996 8.2002 -39 -16.5 -49.5996 -20.2998\r\n-c1.2002 -3.40039 3.09961 -6 3.2002 -10.2002c6.2998 1.5 13.8994 0.5 19.2998 -2.2002c-6.2998 -0.700195 -13.2998 -0.599609 -17.4004 -3.59961zM342.6 16.4004c7.60059 5.5 14.3008 12 22.2002 17.0996c-18.2002 -1.59961 -41 -12.9004 -59 -4.90039\r\n-c-0.0996094 -0.899414 -1.2998 -0.599609 -1.5 -1.39941c12.2998 -9.60059 21.5 -11.6006 38.2998 -10.7998zM330.5 -16.7998c26.9004 -8.40039 22.2002 36.7998 -2.7998 20.2002c-0.700195 -8.2002 1.2002 -10.8008 2.7998 -20.2002zM226 9.40039\r\n-c0 6.19922 3.59961 12 2.7998 16.3994c-13.7998 2.40039 -31.8994 0.799805 -41.2998 7.2998c-9.59961 -9.69922 26.9004 -23 38.5 -23.6992zM57.7002 -49.0996v-0.100586h180.7c-0.800781 2.5 -1.5 4.90039 -2.2002 7.2002c-4.7998 15.2998 -7.5 26.7002 -8.7002 35.5\r\n-c-19.2002 9.2002 -39.7002 18.5 -56.2002 30.2002c-3 2.2002 -23.3994 28.7002 -26.2002 27.5996c-36.8994 -14.5996 -71.3994 -39.7002 -102.199 -63.5c5.59961 -11.7998 10.5 -24.2002 14.7998 -36.8994zM298.3 -54.7998h-0.799805\r\n-c0.299805 0.200195 0.5 0.399414 0.799805 0.5v-0.5zM305.8 -49.0996h9.60059c-1 1.5 -2.10059 2.89941 -3.2002 4.2998c-2.10059 -1.5 -4.2998 -2.90039 -6.40039 -4.2998zM320.9 -24.4004c0.0996094 3.60059 0.299805 7.2002 0.399414 10.6006\r\n-c-6.5 3.2002 -14 5.5 -23.5 5.89941c6.5 3.30078 15.9004 3.2002 21.7998 7.10059c0.100586 1.5 0.100586 2.89941 0.200195 4.2998c-10.7998 0.900391 -14.7998 5.59961 -21.8994 9.5c-11.6006 6.40039 -29 13.2002 -43.9004 16.0996\r\n-c-18.5 3.60059 -16.7998 -25.1992 -16 -42.3994c0.700195 -13.6006 7.7002 -28 10.7998 -37c1.5 -4.2002 1.7998 -8.7002 5.40039 -9.5c6.39941 -1.5 27.3994 6.89941 33.3994 10.2002c12.7002 6.89941 22.5 17.8994 33.3008 25.1992zM374.3 -49.0996l0.600586 12.5996\r\n-c-11.2002 -0.700195 -17.5 10.2002 -25.4004 11c-6.90039 0.700195 -12.7002 -7.90039 -21.7002 -4.2002c-2 -2.2002 -3.89941 -4.7002 -6 -6.89941c3.2002 -3.90039 6.10059 -8.10059 8.90039 -12.5h17.3994c0.200195 3.19922 2.80078 5.7998 6.10059 5.7998\r\n-s6 -2.60059 6.09961 -5.7998h14zM383 -49.0996h36.2998c-6.7002 10.1992 -20.0996 18.7998 -35.7002 11.5c-0.199219 -3.7002 -0.399414 -7.5 -0.599609 -11.5zM466.4 -12.0996c1.19922 6.19922 4.59961 19.5996 3.7998 25.0996\r\n-c-1.40039 9.7998 -14.6006 17.0996 -21.4004 23.0996c-12.3994 11.1006 -20.2002 21 -33.2002 31.4004c-5.19922 -7.7998 -16.5 -13 -20.7998 -19.2998c30.7002 14.8994 36.2998 -55.7998 24.2002 -78.5c1.90039 -6.7998 8.2998 -9.40039 10.9004 -15.5\r\n-c-0.700195 -1.10059 -1.30078 -2.2002 -1.90039 -3.2998h27.9004c0.199219 0 0.399414 0 0.599609 -0.100586c4.09961 13.1006 7.59961 25.9004 9.90039 37.1006zM222.2 317.5c5.39941 14.9004 27.2002 34.7002 45 32c7.7002 -1.2002 18 -8.2002 12.2002 -17.7002\r\n-c-30.2002 7 -45.2002 -12.5996 -54.4004 -33.0996c-8.09961 2 -4.90039 13.0996 -2.7998 18.7998zM406.3 254.4c8.2002 3.59961 22.4004 0.699219 29.6006 5.2998c-4.2002 11.5 -10.3008 21.3994 -9.30078 37.7002c0.5 0 1 0 1.40039 -0.100586\r\n-c6.7998 -14.2002 12.7002 -29.2002 21.4004 -41.7002c-5.7002 -13.5 -43.6006 -25.3994 -43.1006 -1.19922zM309.5 251.7c-6.7998 10.8994 -19 32.5 -14.5 45.2998c6.5 -11.9004 8.59961 -24.4004 17.7998 -33.2998c4.10059 -4 12.2002 -9 8.2002 -20.2002\r\n-c-0.900391 -2.7002 -7.7998 -8.59961 -11.7002 -9.7002c-14.3994 -4.2998 -47.8994 -0.899414 -36.5996 17.1006c11.8994 -0.700195 27.8994 -7.80078 36.7998 0.799805zM336.8 181.7c3.7998 -6.60059 1.40039 -18.7002 12.1006 -20.6006\r\n-c20.1992 -3.39941 43.5996 12.3008 58.0996 17.8008c9 15.1992 -0.799805 20.6992 -8.90039 30.5c-16.5996 20 -38.7998 44.7998 -38 74.6992c6.7002 4.90039 7.30078 -7.39941 8.2002 -9.69922c8.7002 -20.3008 30.4004 -46.2002 46.2998 -63.5\r\n-c3.90039 -4.30078 10.3008 -8.40039 11 -11.2002c2.10059 -8.2002 -5.39941 -18 -4.5 -23.5c-21.6992 -13.9004 -45.7998 -29.1006 -81.3994 -25.6006c-7.40039 6.7002 -10.2998 21.4004 -2.90039 31.1006zM135.5 190.9c-6.7998 3.89941 -8.40039 21 -16.4004 21.3994\r\n-c-11.3994 0.700195 -9.2998 -22.2002 -9.2998 -35.5c-7.7998 7.10059 -9.2002 29.1006 -3.5 40.2998c-6.59961 3.2002 -9.5 -3.59961 -13.0996 -5.89941c4.7002 34.0996 49.7998 15.7998 42.2998 -20.2998zM435.1 162.1c-10.0996 -19.1992 -24.3994 -40.3994 -54 -41\r\n-c-0.599609 6.2002 -1.09961 15.6006 0 19.4004c22.7002 2.2002 36.6006 13.7002 54 21.5996zM293.2 149.7c18.8994 -9.90039 53.5996 -11 79.2998 -10.2002c1.40039 -5.59961 1.2998 -12.5996 1.40039 -19.4004c-33 -1.7998 -72 6.40039 -80.7002 29.6006zM385.4 103\r\n-c-1.7002 -4.2998 -5.30078 -9.2998 -9.80078 -11.0996c-12.0996 -4.90039 -45.5996 -8.7002 -62.3994 0.299805c-10.7002 5.7002 -17.5 18.5 -23.4004 26c-2.7998 3.59961 -16.8994 12.8994 -0.200195 12.8994c13.1006 -32.6992 58 -29 95.8008 -28.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"joget\" unicode=\"&#xf3b7;\" horiz-adv-x=\"496\" \r\n-d=\"M378.1 403c116.601 -71.7998 152.9 -224.6 81 -341.2c-71.8994 -116.5 -224.6 -152.8 -341.199 -80.8994c-116.601 71.8994 -152.9 224.6 -81 341.199c46.8994 76 128.1 117.9 211.3 117.9c44.3994 0 89.3994 -11.9004 129.899 -37zM429.9 79.7998\r\n-c5.2998 8.7002 9.89941 17.6006 13.8994 26.6006c-32.0996 -1.10059 -157.1 1.5 -208.8 -17.6006c-58.4004 -21.5 -36.9004 -53.3994 -31.2002 -67.0996c3.7998 -9.10059 14.7002 -28.7998 23.7002 -42.4004c6.7998 -0.599609 13.5996 -1 20.4004 -1\r\n-c71.5996 0 141.6 36 182 101.5zM229.1 166.1c51 -1.2998 205.4 -4.39941 230.301 -4.89941c11.8994 81.7998 -24.5 166.6 -99.3008 212.7c-100.5 61.8994 -232.1 30.6992 -294 -69.8008c-28.5996 -46.3994 -37.2998 -99.3994 -28.5 -149.1\r\n-c11 40.9004 49.7002 131.5 178.301 140.2c50.8994 4 41.5 -19.2002 23.5996 -29.7002c-17.7998 -10.5 -45.7002 -23.7998 -68.9004 -51.2002c-23.1992 -27.3994 3 -46.7998 58.5 -48.2002zM412.9 220.9c22.6992 -6 19.0996 -15.5 19.0996 -15.5l-46.5 -23.4004\r\n-l-169.5 -1.59961s33.7998 10.7998 65.2998 31.2998c26 16.8994 49.7002 35.5996 67.5 35.5996c3.7002 0 7.2002 -0.899414 10.4004 -2.7002c18.5 -10.5996 -2.90039 -18.1992 -13.4004 -24.5996s-50.7002 -34.5 -50.7002 -34.5s1.40039 -7.59961 31.1006 8.2002\r\n-c29.7002 15.8994 64 33.2002 86.7002 27.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"js\" unicode=\"&#xf3b8;\" \r\n-d=\"M0 416h448v-448h-448v448zM243.8 66.5996v143.7h-42.0996v-143.1c0 -21.1006 -8.7998 -26.5 -22.6006 -26.5c-14.5 0 -20.5 9.89941 -27.0996 21.5996l-34.2998 -20.7002c10 -21.0996 29.5 -38.5 63.2002 -38.5c37.2998 0 62.8994 19.9004 62.8994 63.5zM343.4 3.09961\r\n-c39.8994 0 69.6992 20.8008 69.6992 58.6006c0 35.2002 -20.0996 50.8994 -55.8994 66.2002l-10.5 4.5c-18.1006 7.89941 -25.9004 13 -25.9004 25.5996c0 10.2002 7.7998 18 20.1006 18c12.0996 0 19.8994 -5.09961 27.0996 -18l32.7998 21\r\n-c-13.7998 24.4004 -33 33.7002 -59.7998 33.7002c-37.5 0 -61.5996 -24 -61.5996 -55.6006c0 -34.2998 20.0996 -50.5996 50.5 -63.5l10.5 -4.5c19.2998 -8.5 30.6992 -13.5996 30.6992 -28c0 -12.0996 -11.1992 -20.7998 -28.5996 -20.7998\r\n-c-20.7002 0 -32.5 10.9004 -41.5 25.6006l-34.2998 -19.8008c12.2998 -24.3994 37.5996 -43 76.7002 -43z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"js-square\" unicode=\"&#xf3b9;\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM243.8 66.5996v143.7h-42.0996v-143.1c0 -21.1006 -8.7998 -26.5 -22.6006 -26.5c-14.5 0 -20.5 9.89941 -27.0996 21.5996\r\n-l-34.2998 -20.7002c10 -21.0996 29.5 -38.5 63.2002 -38.5c37.2998 0 62.8994 19.9004 62.8994 63.5zM343.4 3.09961c39.8994 0 69.6992 20.8008 69.6992 58.6006c0 35.2002 -20.0996 50.8994 -55.8994 66.2002l-10.5 4.5c-18.1006 7.89941 -25.9004 13 -25.9004 25.5996\r\n-c0 10.2002 7.7998 18 20.1006 18c12.0996 0 19.8994 -5.09961 27.0996 -18l32.7998 21c-13.7998 24.4004 -33 33.7002 -59.7998 33.7002c-37.5 0 -61.5996 -24 -61.5996 -55.6006c0 -34.2998 20.0996 -50.5996 50.5 -63.5l10.5 -4.5\r\n-c19.2998 -8.5 30.6992 -13.5996 30.6992 -28c0 -12.0996 -11.1992 -20.7998 -28.5996 -20.7998c-20.7002 0 -32.5 10.9004 -41.5 25.6006l-34.2998 -19.8008c12.2998 -24.3994 37.5996 -43 76.7002 -43z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"keycdn\" unicode=\"&#xf3ba;\" horiz-adv-x=\"512\" \r\n-d=\"M63.7998 38.7002l60.5 59c32.1006 -42.7998 71.1006 -66 126.601 -67.4004c30.5 -0.700195 60.2998 7 86.3994 22.4004c5.10059 -5.2998 18.5 -19.5 20.9004 -22c-32.2002 -20.7002 -69.6006 -31.1006 -108.101 -30.2002\r\n-c-43.2998 1.09961 -84.5996 16.7002 -117.699 44.4004c0.299805 0.599609 -38.2002 -37.5 -38.6006 -37.9004c9.5 -29.7998 -13.0996 -62.4004 -46.2998 -62.4004c-26.7998 0.100586 -47.5 21.7002 -47.5 48.5c0 34.3008 33.0996 56.6006 63.7998 45.6006zM418.7 291.1\r\n-c19.0996 -31.2998 29.5996 -67.3994 28.7002 -104c-1.10059 -44.7998 -19 -87.5 -48.6006 -121c0.299805 -0.299805 23.7998 -25.1992 24.1006 -25.5c9.59961 1.30078 19.1992 -2 25.8994 -9.09961c11.2998 -12 10.9004 -30.9004 -1.09961 -42.4004\r\n-c-12 -11.2998 -30.9004 -10.8994 -42.4004 1.10059c-6.7002 7 -9.39941 16.7998 -7.59961 26.2998c-24.9004 26.5996 -44.4004 47.2002 -44.4004 47.2002c42.7002 34.0996 63.2998 79.5996 64.4004 124.2c0.700195 28.8994 -7.2002 57.1992 -21.1006 82.1992zM104 394.9\r\n-c6.7002 -7 9.40039 -16.8008 7.59961 -26.3008l45.9004 -48.0996c-4.7002 -3.7998 -13.2998 -10.4004 -22.7998 -21.2998c-25.4004 -28.5 -39.6006 -64.7998 -40.7002 -102.9c-0.700195 -28.8994 6.09961 -57.2002 20 -82.3994l-22 -21.5\r\n-c-19.2998 31.5996 -28.9004 67.6992 -27.7998 104.699c1 44.6006 18.2998 87.6006 47.5 121.101l-25.2998 26.3994c-9.60059 -1.2998 -19.2002 2 -25.9004 9.10059c-11.2998 12 -10.9004 30.8994 1.09961 42.3994c11.9004 11.2002 30.6006 10.9004 42.4004 -1.19922z\r\n-M464.9 440c26 0 47.0996 -22.4004 47.0996 -48.2998c0 -25.9004 -21.0996 -47.7002 -47.0996 -47.7002c-6.30078 -0.0996094 -14 1.09961 -15.9004 1.7998l-62.9004 -59.7002c-32.6992 43.6006 -76.6992 65.9004 -126.899 67.2002\r\n-c-30.5 0.700195 -60.2998 -6.7998 -86.2002 -22.3994l-21.0996 22c32.1992 20.7998 69.5996 31.0996 108.1 30.1992c43.2998 -1.09961 84.5996 -16.6992 117.7 -44.5996l41.0996 38.5996c-1.5 4.7002 -2.2002 9.60059 -2.2002 14.5\r\n-c-0.0996094 26.7002 22.3008 48.4004 48.3008 48.4004zM256.7 334.6c5.5 0 10.8994 -0.399414 16.3994 -1.09961c78.1006 -9.7998 133.4 -81.0996 123.801 -159.1c-9.80078 -78.1006 -81.1006 -133.4 -159.101 -123.801c-78.0996 9.80078 -133.399 81.1006 -123.8 159.2\r\n-c9.2998 72.4004 70.0996 124.601 142.7 124.8zM197.7 215.2c0.599609 -22.7002 12.2002 -41.7998 32.3994 -52.2002l-11 -51.7002h73.7002l-11 51.7002c20.1006 10.9004 32.1006 29 32.4004 52.2002c-0.400391 32.7998 -25.7998 57.5 -58.2998 58.2998\r\n-c-32.1006 -0.799805 -57.3008 -24.7998 -58.2002 -58.2998zM256 288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kickstarter\" unicode=\"&#xf3bb;\" \r\n-d=\"M400 -32h-352c-26.4004 0 -48 21.5996 -48 48v352c0 26.4004 21.5996 48 48 48h352c26.4004 0 48 -21.5996 48 -48v-352c0 -26.4004 -21.5996 -48 -48 -48zM199.6 269.5c0 30.7002 -17.5996 45.0996 -39.6992 45.0996c-25.8008 0 -40 -19.7998 -40 -44.5v-154.8\r\n-c0 -25.7998 13.6992 -45.5996 40.5 -45.5996c21.5 0 39.1992 14 39.1992 45.5996v41.7998l60.6006 -75.6992c12.2998 -14.9004 39 -16.8008 55.7998 0c14.5996 15.0996 14.7998 36.7998 4 50.3994l-49.0996 62.7998l40.5 58.7002c9.39941 13.5 9.5 34.5 -5.60059 49.1006\r\n-c-16.3994 15.8994 -44.5996 17.2998 -61.3994 -7l-44.8008 -64.7002v38.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kickstarter-k\" unicode=\"&#xf3bc;\" horiz-adv-x=\"384\" \r\n-d=\"M147.3 333.6v-70.5996l82.7998 118.2c31.2002 44.3994 83.3008 41.7998 113.601 12.7998c27.8994 -26.7002 27.7998 -65.0996 10.3994 -89.7998l-74.8994 -107.4l90.7998 -114.8c19.9004 -24.7998 19.5996 -64.5996 -7.40039 -92.2002\r\n-c-31.0996 -30.7002 -80.5 -27.2002 -103.199 0l-112.101 138.3v-76.5c0 -57.7998 -32.5996 -83.3994 -72.3994 -83.3994c-49.6006 0 -74.9004 36.0996 -74.9004 83.3994v283c0 45.2002 26.2002 81.4004 73.9004 81.4004c40.8994 0 73.3994 -26.2002 73.3994 -82.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laravel\" unicode=\"&#xf3bd;\" horiz-adv-x=\"512\" \r\n-d=\"M504.4 332.17c0.131836 -0.549805 0.240234 -1.45605 0.240234 -2.02246c0 -0.0185547 0 -0.0488281 -0.000976562 -0.0673828v-109.85c0.000976562 -0.0205078 0.000976562 -0.0527344 0.000976562 -0.0722656c0 -2.5498 -1.79199 -5.65332 -4.00098 -6.92773\r\n-l-92.2393 -53.1104v-105.26v-0.0224609c0 -2.54883 -1.79199 -5.65332 -4 -6.92773l-192.561 -110.84c-0.37207 -0.194336 -0.999023 -0.454102 -1.39941 -0.580078c-0.180664 -0.0605469 -0.350586 -0.169922 -0.550781 -0.220703\r\n-c-0.555664 -0.148438 -1.47363 -0.269531 -2.0498 -0.269531c-0.575195 0 -1.49414 0.121094 -2.0498 0.269531c-0.219727 0.0605469 -0.419922 0.180664 -0.629883 0.260742c-0.378906 0.119141 -0.975586 0.360352 -1.33008 0.540039l-192.5 110.84\r\n-c-2.20801 1.27441 -4 4.37891 -4 6.92773v0.0224609v329.699c0.00195312 0.589844 0.126953 1.53125 0.280273 2.10059c0.0693359 0.189453 0.199219 0.489258 0.290039 0.669922c0.111328 0.354492 0.339844 0.910156 0.509766 1.24023\r\n-c0.149414 0.259766 0.370117 0.469727 0.549805 0.719727c0.177734 0.270508 0.496094 0.6875 0.709961 0.929688c0.208008 0.179688 0.561523 0.448242 0.790039 0.600586c0.226562 0.210938 0.621094 0.520508 0.879883 0.689453v0l96.2705 55.4199\r\n-c1.02441 0.591797 2.81641 1.07227 4 1.07227c1.18262 0 2.97461 -0.480469 4 -1.07227l96.29 -55.4199v0c0.25293 -0.173828 0.647461 -0.478516 0.879883 -0.679688c0.223633 -0.154297 0.573242 -0.422852 0.779297 -0.599609\r\n-c0.21582 -0.24707 0.538086 -0.667969 0.720703 -0.94043c0.169922 -0.25 0.399414 -0.459961 0.540039 -0.719727c0.170898 -0.331055 0.404297 -0.886719 0.519531 -1.24023c0.0800781 -0.230469 0.219727 -0.44043 0.280273 -0.679688\r\n-c0.154297 -0.561523 0.280273 -1.48926 0.280273 -2.07129v-0.0195312v-205.93l80.2197 46.1904v105.239c0.00195312 0.584961 0.126953 1.5166 0.280273 2.08008c0.0693359 0.240234 0.199219 0.450195 0.279297 0.680664\r\n-c0.120117 0.354492 0.352539 0.915039 0.520508 1.25c0.149414 0.259766 0.370117 0.469727 0.540039 0.709961c0.179688 0.270508 0.50293 0.6875 0.719727 0.929688c0.205078 0.179688 0.553711 0.448242 0.780273 0.599609\r\n-c0.229492 0.208008 0.624023 0.516602 0.879883 0.69043v0l96.2803 55.4502c1.02441 0.591797 2.81641 1.07129 4 1.07129c1.18262 0 2.97461 -0.479492 4 -1.07129l96.2598 -55.4199c0.259766 -0.171875 0.663086 -0.476562 0.899414 -0.680664\r\n-c0.25 -0.199219 0.540039 -0.379883 0.770508 -0.599609c0.214844 -0.24707 0.538086 -0.667969 0.719727 -0.94043c0.164062 -0.18457 0.40625 -0.50293 0.540039 -0.709961c0.173828 -0.333008 0.411133 -0.892578 0.530273 -1.25\r\n-c0.0888672 -0.182617 0.214844 -0.487305 0.280273 -0.679688zM111.6 430.72l-80.1895 -46.1602l80.1797 -46.1699l80.2002 46.1807l-80.1904 46.1494v0zM199.85 370.72l-33.6895 -19.4297l-46.5303 -26.79v-201.29l33.6904 19.4004l46.5293 26.79v201.319zM199.85 -42.0596\r\n-l-0.109375 92.3594l-92.1904 52.1807v0v0c-0.248047 0.166992 -0.633789 0.462891 -0.859375 0.65918c-0.25 0.200195 -0.540039 0.360352 -0.770508 0.580078v0c-0.198242 0.219727 -0.494141 0.595703 -0.660156 0.839844\r\n-c-0.177734 0.206055 -0.446289 0.555664 -0.599609 0.780273v0c-0.139648 0.266602 -0.328125 0.713867 -0.419922 1c-0.125977 0.240234 -0.295898 0.643555 -0.379883 0.900391v0c-0.0683594 0.322266 -0.140625 0.850586 -0.160156 1.17969\r\n-c-0.0498047 0.246094 -0.103516 0.649414 -0.120117 0.900391v215.18l-46.5205 26.7998l-33.6895 19.3799v-311.18zM207.85 64.1104l117.62 67.1494l58.7998 33.5605l-80.1299 46.1299l-92.2598 -53.1104l-84.0898 -48.4102zM392.37 59.54v91.4102l-45.7705 -26.1504\r\n-l-130.72 -74.5996v-92.3105zM392.37 178.67v91.3301l-46.5303 26.8096l-33.6895 19.4004v-91.4199l46.5293 -26.79zM400.37 283.95l80.1797 46.1797l-80.1797 46.1504l-80.2002 -46.1602zM408.37 178.67l80.3096 46.1504v0v91.3896l-33.6797 -19.4004l-46.6299 -26.8096\r\n-v-91.3301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"line\" unicode=\"&#xf3c0;\" \r\n-d=\"M272.1 243.8v-71.0996c0 -1.7998 -1.39941 -3.2002 -3.19922 -3.2002h-11.4004c-1.09961 0 -2.09961 0.599609 -2.59961 1.2998l-32.6006 44v-42.2002c0 -1.7998 -1.39941 -3.19922 -3.2002 -3.19922h-11.3994c-1.7998 0 -3.2002 1.39941 -3.2002 3.19922v71.1006\r\n-c0 1.7998 1.40039 3.2002 3.2002 3.2002h11.2998c1 0 2.09961 -0.5 2.59961 -1.40039l32.6006 -44v42.2002c0 1.7998 1.39941 3.2002 3.2002 3.2002h11.3994c1.7998 0.0996094 3.2998 -1.40039 3.2998 -3.10059zM190.1 247c1.80078 0 3.2002 -1.5 3.2002 -3.2002v-71.0996\r\n-c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-11.3994c-1.7998 0 -3.2002 1.40039 -3.2002 3.2002v71.0996c0 1.7998 1.40039 3.2002 3.2002 3.2002h11.3994zM162.6 187.4c1.7002 0 3.10059 -1.5 3.10059 -3.2002v-11.4004c0 -1.7998 -1.40039 -3.2002 -3.2002 -3.2002\r\n-h-45.7002c-0.899414 0 -1.59961 0.400391 -2.2002 0.900391c-0.599609 0.599609 -0.899414 1.2998 -0.899414 2.2002v71.0996c0 1.7998 1.39941 3.2002 3.2002 3.2002h11.3994c1.7998 0 3.2002 -1.40039 3.2002 -3.2002v-56.3994h31.0996zM332.1 247\r\n-c1.7002 0 3.10059 -1.5 3.2002 -3.2002v-11.3994c0 -1.80078 -1.39941 -3.2002 -3.2002 -3.2002h-31.0996v-12h31.0996c1.80078 0 3.2002 -1.40039 3.2002 -3.2002v-11.5c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-31.0996v-12h31.0996\r\n-c1.80078 0 3.2002 -1.39941 3.2002 -3.2002v-11.3994c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-45.6992c-1.80078 0 -3.2002 1.5 -3.2002 3.2002v71.0996c0 1.7998 1.5 3.2002 3.2002 3.2002h45.6992zM448 334.3v-285.3\r\n-c-0.0996094 -44.7998 -36.7998 -81.0996 -81.7002 -81h-285.3c-44.7998 0.0996094 -81.0996 36.9004 -81 81.7002v285.3c0.0996094 44.7998 36.9004 81.0996 81.7002 81h285.3c44.7998 -0.0996094 81.0996 -36.7998 81 -81.7002zM386.4 211.7\r\n-c0 73 -73.2002 132.399 -163.101 132.399c-89.8994 0 -163.1 -59.3994 -163.1 -132.399c0 -65.4004 58 -120.2 136.399 -130.601c19.1006 -4.09961 16.9004 -11.0996 12.6006 -36.7998c-0.700195 -4.09961 -3.2998 -16.0996 14.0996 -8.7998\r\n-c17.4004 7.2998 93.9004 55.2998 128.2 94.7002c23.5996 26 34.9004 52.2998 34.9004 81.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lyft\" unicode=\"&#xf3c3;\" horiz-adv-x=\"512\" \r\n-d=\"M0 366.9h77.7998v-208.7c0 -33.1006 15 -52.7998 27.2002 -61c-12.7002 -11.1006 -51.2002 -20.9004 -80.2002 2.7998c-17 14 -24.7998 37.2998 -24.7998 59v207.9zM485.9 193.4c0 -14.2002 11.5996 -25.9004 26.0996 -25.9004v-76.5\r\n-c-56.7002 0 -102.7 46.0996 -102.7 102.7v77.0996c0 34.6006 -52.2002 34.6006 -52.2002 0v-23.2998h38.8008v-76.7998h-38.8008v-6.7002c0 -21.7998 -7.69922 -45 -24.7998 -59c-16.2998 -13.7002 -35.7002 -16.2998 -51.7002 -14v179.2\r\n-c0 56.7002 46.1006 102.7 102.7 102.7c49.1006 0 90.2002 -34.4004 100.3 -80.7002h26.1006v-76.7998h-23.7998v-22zM191.6 292.4v0.5h77.1006v-178.2c0 -52.4004 -29.7002 -91.7002 -76.7998 -100.8c-26.1006 -5.10059 -52.5 -2.80078 -77.6006 4.69922v70.3008\r\n-c9.7998 -4.2002 29.5 -9.40039 45 -7.80078c20.4004 2 32.7998 11.9004 34.9004 25.3008c0 0 -21.2002 -20.4004 -58.2002 -10.6006c-37 9.90039 -45 40.1006 -45 63.9004v132.7h76.7998v-113c0 -15.4004 23.7998 -15.4004 23.7998 0v113z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"magento\" unicode=\"&#xf3c4;\" \r\n-d=\"M445.7 320.1v-256.1l-63.4004 -36.5v255.8l-158.5 91.6006l-158.6 -91.6006l0.399414 -255.899l-63.2998 36.5996v255.9l221.9 128.1zM255.6 27.5v255.9l63.4004 -36.6006v-256l-95.0996 -54.8994l-94.9004 54.8994l-0.0996094 255.9l63.2998 36.5996v-256\r\n-l31.7998 -18.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medapps\" unicode=\"&#xf3c6;\" horiz-adv-x=\"320\" \r\n-d=\"M118.3 209.6c3.5 12.5 6.90039 33.6006 13.2002 33.6006c8.2998 -1.7998 9.59961 -23.4004 18.5996 -36.6006c4.60059 23.5 5.30078 85.1006 14.1006 86.7002c9 0.700195 19.7002 -66.5 22 -77.5c9.89941 -4.09961 48.8994 -6.59961 48.8994 -6.59961\r\n-c1.90039 -7.2998 -24 -7.60059 -40 -7.7998c-4.59961 -14.8008 -5.39941 -27.7002 -11.3994 -28c-4.7002 -0.200195 -8.2002 28.7998 -17.5 49.5996l-9.40039 -65.5c-4.39941 -13 -15.5 22.5 -21.8994 39.2998c-3.30078 0.100586 -62.4004 1.60059 -47.6006 7.7998zM228 0\r\n-h-136c-21.2002 0 -21.2002 32 0 32h136c21.2002 0 21.2002 -32 0 -32zM204 -64h-88c-21.2002 0 -21.2002 32 0 32h88c21.2002 0 21.2002 -32 0 -32zM238.2 77.5c-3.60059 -21.2998 -36 -15.5 -32.6006 5.09961c3.60059 21.2002 5.60059 40.6006 15.3008 58.6006\r\n-c32.5996 60.2998 66.0996 95.5 66.0996 151.6c0 67.9004 -57 123.2 -127 123.2s-127 -55.2998 -127 -123.2c0 -56.0996 33.5 -91.2998 66.0996 -151.7c9.7002 -17.8994 11.7002 -36.8994 15.3008 -58.5996c3.5 -20.7998 -29.1006 -26.0996 -32.6006 -5.09961\r\n-c-3.2002 19.0996 -5.2002 36.3994 -11.8994 48.8994c-8 14.7002 -16.1006 28.1006 -24 41c-24.6006 40.4004 -45.9004 75.2998 -45.9004 125.5c0 85.6006 71.7998 155.2 160 155.2s160 -69.5996 160 -155.2c0 -50.2998 -21.2998 -85.0996 -45.9004 -125.5\r\n-c-7.89941 -12.8994 -16.0996 -26.2998 -24 -41c-6.69922 -12.3994 -8.69922 -29.8994 -11.8994 -48.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medium-m\" unicode=\"&#xf3c7;\" horiz-adv-x=\"512\" \r\n-d=\"M71.5 305.7c0.599609 5.89941 -1.7002 11.7998 -6.09961 15.7998l-45.1006 54.4004v8.09961h140.2l108.4 -237.7l95.2998 237.7h133.7v-8.09961l-38.6006 -37c-3.2998 -2.5 -5 -6.7002 -4.2998 -10.8008v-272c-0.700195 -4.09961 1 -8.2998 4.2998 -10.7998l37.7002 -37\r\n-v-8.09961h-189.7v8.09961l39.1006 37.9004c3.7998 3.7998 3.7998 5 3.7998 10.7998v219.8l-108.7 -275.899h-14.7002l-126.399 275.899v-184.899c-1.10059 -7.80078 1.5 -15.6006 7 -21.2002l50.7998 -61.6006v-8.09961h-144v8l50.7998 61.7002\r\n-c5.40039 5.59961 7.90039 13.5 6.5 21.2002v213.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medrt\" unicode=\"&#xf3c8;\" horiz-adv-x=\"544\" \r\n-d=\"M113.7 192c0 -121.8 83.8994 -222.8 193.5 -241.1c-18.7002 -4.5 -38.2002 -6.90039 -58.2002 -6.90039c-137.6 0 -249 111 -249 248s111.4 248 248.9 248c20.0996 0 39.5996 -2.40039 58.1992 -6.90039c-109.6 -18.2998 -193.399 -119.3 -193.399 -241.1zM411.1 91.7002\r\n-c77.7002 55.3994 104.4 155.1 67 233.899c11.2002 -9.89941 21.5 -21.2998 30.5 -34.1992c61.6006 -88.3008 40.8008 -210.301 -46.5 -272.601c-87.2998 -62.2998 -208.1 -41.2002 -269.699 47c-9 12.7998 -16.2002 26.4004 -21.7002 40.5\r\n-c60.7998 -62.0996 162.7 -70 240.399 -14.5996zM192.3 335.7c72.5 54.5996 171.601 45.7002 221.601 -19.7998c45.2998 -59.7002 34.3994 -145.601 -22.3008 -201.801c18.5 51.4004 11.3008 111 -24.3994 158c-43 56.5 -114.601 78.3008 -178.9 60.5\r\n-c1.2998 1 2.60059 2.10059 4 3.10059zM296 224h40c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-40c-4.40039 0 -8 -3.59961 -8 -8v-40c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v40c0 4.40039 -3.59961 8 -8 8h-40\r\n-c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h40c4.40039 0 8 3.59961 8 8v40c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-40c0 -4.40039 3.59961 -8 8 -8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microsoft\" unicode=\"&#xf3ca;\" \r\n-d=\"M0 416h214.6v-214.6h-214.6v214.6zM233.4 416h214.6v-214.6h-214.6v214.6zM0 182.6h214.6v-214.6h-214.6v214.6zM233.4 182.6h214.6v-214.6h-214.6v214.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mix\" unicode=\"&#xf3cb;\" \r\n-d=\"M0 384h448v-204.1c0 -56.6006 -88 -59.9004 -88 0v23.7998c0 56.7998 -82.7002 59 -88 4.2998v-116.1c0 -58 -96 -57.9004 -96 0v175.3c0 56.8994 -80.0996 59.3994 -88 6.5v-238.601c0 -58.0996 -88 -56.1992 -88 0v348.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mizuni\" unicode=\"&#xf3cc;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111.1 248 -248c0 -137 -111 -248 -248 -248s-248 111 -248 248c0 136.9 111 248 248 248zM168 88.0996v223.9c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-272.1c21.2002 20.8994 48.5996 37.5996 80 48.1992zM288 98v214\r\n-c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-214c13 2 26.4004 3.09961 40.2002 3.09961c13.5996 0 26.8994 -1.09961 39.7998 -3.09961zM408 40.2998v271.7c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-223.7c31.4004 -10.5996 58.7998 -27.2002 80 -48z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"monero\" unicode=\"&#xf3d0;\" horiz-adv-x=\"496\" \r\n-d=\"M352 64h108.4c-43.4004 -71.9004 -122.301 -120 -212.4 -120s-169 48.0996 -212.4 120h108.4v127.8l104 -104.8l104 105v-128zM88 112h-74.7998c-8.60059 25.0996 -13.2002 52 -13.2002 80c0 137 111 248 248 248s248 -111 248 -248c0 -28 -4.7002 -54.9004 -13.2002 -80\r\n-h-74.7998v208l-160.6 -159.4l-159.4 159.4v-208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"napster\" unicode=\"&#xf3d2;\" horiz-adv-x=\"496\" \r\n-d=\"M298.3 74.4004c-14.2002 -13.6006 -31.2998 -24.1006 -50.3994 -30.5c-19 6.39941 -36.2002 16.8994 -50.3008 30.5h100.7zM342.3 274c-56.3994 39.7998 -132.1 39.9004 -188.899 -0.0996094c-19.9004 16.7998 -43.6006 29.5 -69.5 36.3994v-161.6\r\n-c0 -217.3 328 -219.101 328 0.299805v161.2c-26 -7 -49.6006 -19.2998 -69.6006 -36.2002zM133.5 332.5c6.5 -3.2002 14.0996 -7.40039 20.4004 -11.4004c58.6992 30.5 129.199 30.6006 187.899 0.100586c6.7002 4.2002 13.5 8 20.6006 11.5\r\n-c-64.6006 59.8994 -164.5 59.7998 -228.9 -0.200195zM43.7998 354.8c17.5 -0.5 34.2998 -3.09961 50.6006 -7.5c82 91.6006 225.5 91.6006 307.5 0.100586c16.0996 4.39941 32.7998 6.89941 50.0996 7.39941v-69.2002c58.7002 -36.5 58.5 -121.899 -0.200195 -158.199\r\n-l-0.299805 -1.7002c-25.9004 -238.8 -381.2 -243.601 -407.6 1.5c-58.5 37.2002 -58.5 121.8 -0.100586 158.3v69.2998zM259.2 96c13.0996 59.2998 33.5 56 113 55.4004c-0.799805 -8.2002 0.0996094 -32.3008 -26.2002 -47.4004c-4.40039 -2.5 -15.2998 -6 -25.5 -6.5\r\n-c-25.2998 -1.2002 -61.2998 -1.5 -61.2998 -1.5zM123.7 151.3c79.2998 0.700195 99.7998 4 113 -55.3994c0 0 -36 0.399414 -61.2998 1.5c-10.3008 0.5 -21.1006 4 -25.5 6.5c-26.3008 15.0996 -25.4004 39.1992 -26.2002 47.3994zM292.8 27.9004\r\n-c3 -4.90039 3.2002 -8.80078 3.2998 -8.90039c-29.0996 -17.5996 -67.0996 -17.5996 -96.1992 0c0 0 0.899414 5.5 3.69922 9.59961c3.5 5.10059 6.40039 6.60059 6.40039 6.60059c23.7002 -6.90039 51.0996 -7.2998 75.9004 0c0 0 3.69922 -2 6.89941 -7.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"node-js\" unicode=\"&#xf3d3;\" \r\n-d=\"M224 -60c-6.7002 0 -13.5 1.7998 -19.4004 5.2002l-61.6992 36.5c-9.2002 5.2002 -4.7002 7 -1.7002 8c12.2998 4.2998 14.7998 5.2002 27.8994 12.7002c1.40039 0.799805 3.2002 0.5 4.60059 -0.400391l47.3994 -28.0996c1.7002 -1 4.10059 -1 5.7002 0l184.7 106.6\r\n-c1.7002 1 2.7998 3 2.7998 5v213.2c0 2.09961 -1.09961 4 -2.89941 5.09961l-184.601 106.5c-1.7002 1 -4 1 -5.7002 0l-184.5 -106.6c-1.7998 -1 -2.89941 -3 -2.89941 -5.10059v-213.1c0 -2 1.09961 -4 2.89941 -4.90039l50.6006 -29.1992\r\n-c27.5 -13.7002 44.2998 2.39941 44.2998 18.6992v210.4c0 3 2.40039 5.2998 5.40039 5.2998h23.3994c2.90039 0 5.40039 -2.2998 5.40039 -5.2998v-210.5c0 -36.5996 -20 -57.5996 -54.7002 -57.5996c-10.7002 0 -19.0996 0 -42.5 11.5996l-48.4004 27.9004\r\n-c-12 6.89941 -19.3994 19.7998 -19.3994 33.6992v213.101c0 13.7998 7.39941 26.7998 19.3994 33.7002l184.5 106.6c11.7002 6.59961 27.2002 6.59961 38.8008 0l184.699 -106.7c12 -6.89941 19.4004 -19.7998 19.4004 -33.7002v-213.1\r\n-c0 -13.7998 -7.40039 -26.7002 -19.4004 -33.7002l-184.699 -106.6c-5.90039 -3.40039 -12.6006 -5.2002 -19.4004 -5.2002zM373.1 150.1c0 -40.1992 -33.5996 -63.2998 -92 -63.3994c-80.8994 0 -97.7998 37.0996 -97.7998 68.2002c0 2.89941 2.2998 5.2998 5.2998 5.2998\r\n-h23.9004c2.7002 0 4.90039 -1.90039 5.2998 -4.5c3.60059 -24.2998 14.2998 -36.6006 63.2002 -36.6006c38.9004 0 55.5 8.80078 55.5 29.4004c0 11.9004 -4.7002 20.7998 -65.2002 26.7002c-50.5 5 -81.7998 16.2002 -81.7998 56.5996c0 37.2998 31.4004 59.5 84.0996 59.5\r\n-c59.2002 0 88.5 -20.5 92.2002 -64.5996c0.100586 -1.5 -0.399414 -3 -1.39941 -4.10059c-1 -1.09961 -2.40039 -1.69922 -3.90039 -1.69922h-24c-2.5 0 -4.7002 1.7998 -5.2002 4.19922c-5.7998 25.6006 -19.7998 33.8008 -57.7002 33.8008\r\n-c-42.5 0 -47.3994 -14.8008 -47.3994 -25.9004c0 -13.4004 5.7998 -17.2998 63.2002 -24.9004c56.6992 -7.5 83.6992 -18.0996 83.6992 -58z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"npm\" unicode=\"&#xf3d4;\" horiz-adv-x=\"576\" \r\n-d=\"M288 160h-32v64h32v-64zM576 288v-192h-288v-32h-128v32h-160v192h576zM160 256h-128v-128h64v96h32v-96h32v128zM320 256h-128v-160h64v32h64v128zM544 256h-192v-128h64v96h32v-96h32v96h32v-96h32v128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ns8\" unicode=\"&#xf3d5;\" horiz-adv-x=\"640\" \r\n-d=\"M187.1 288.1h44.9004l-48.5 -160.1h-56.9004l-50.5996 106.5l-31.0996 -106.5h-44.9004l49 160.1h49.4004l54.5 -113.699zM639.6 289c4.60059 -28.5996 -36.0996 -44.7002 -65.6992 -50.5996h-0.100586c17.5 -29.3008 22.1006 -69.3008 3.40039 -105.5\r\n-c-26.4004 -51.2002 -86.5 -79.9004 -135.101 -68c-29.3994 7.19922 -51.3994 29 -56.7998 59.5c-0.700195 3.5 -1 7.09961 -1.2002 10.7998c-5.5 -2.7998 -11.8994 -4.2002 -18.5 -4.90039c-15.5996 -1.7002 -21 -2.2998 -160.899 -2.2998l11.5996 39.5h126.8\r\n-c9.10059 0 12.2002 3.2002 13.8008 7.40039c1.69922 4.59961 3.39941 10.1992 4.5 14.5996c1.09961 3.90039 0.0996094 6.59961 -7.7002 6.59961h-87.2998c-33.4004 0 -38.2002 9.2002 -32.8008 28.6006c3.2002 11.5 10.8008 37.2002 17.6006 47.0996\r\n-c7.09961 10.2002 18.2998 13.7002 30.5996 15c15.6006 1.7002 20.4004 1.2002 160.101 1.2002l-9.7002 -31.5h-133.5c-5.5 0 -11.2002 -0.700195 -13.2998 -7.09961c-1.80078 -5.40039 -2.10059 -6.7002 -3.7002 -12.2002c-1.40039 -5.10059 2.2002 -7.40039 11.5 -7.40039\r\n-h87.5996c20.4004 0 31 -6.7998 34 -16.5996c19.9004 21.3994 50.4004 39.5 94.2002 48.2002v0.0996094c-13.4004 42.5 43.9004 66.5996 88.5 58.7998c18.2002 -3.2002 39.2002 -13.2998 42.0996 -31.2998zM530.7 184.3c3.09961 15.7998 -0.5 33.7002 -7.2002 47.7998\r\n-c-23.2998 -2.89941 -52.2998 -10.0996 -68.5 -26.8994c-24.4004 -25.2998 -16.7998 -60 14.0996 -64.7998c25 -3.90039 55.7002 14.3994 61.6006 43.8994zM552.5 267.4c10.5996 1.5 23.5 3.5 34.2002 9.59961c14.7998 8.5 10.3994 21 -4.90039 24.4004\r\n-c-10.8994 2.39941 -25.0996 -0.5 -31.7998 -7.7002c-7.2998 -7.7998 -1.7002 -20.2998 2.5 -26.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"nutritionix\" unicode=\"&#xf3d6;\" horiz-adv-x=\"400\" \r\n-d=\"M88 439.9c0 0 133.4 8.19922 121 -104.4c0 0 19.0996 74.9004 103 40.5996c0 0 -17.7002 -74 -88 -56c0 0 14.5996 54.6006 66.0996 56.6006c0 0 -39.8994 10.2998 -82.0996 -48.7998c0 0 -19.7998 94.5 -93.5996 99.6992c0 0 75.1992 -19.3994 77.5996 -107.5\r\n-c0 -0.0996094 -106.4 -7 -104 119.801zM400 124.3c0 -48.5 -9.7002 -95.2998 -32 -132.3c-42.2002 -30.9004 -105 -48 -168 -48c-62.9004 0 -125.8 17.0996 -168 48c-22.2998 37 -32 83.7998 -32 132.3c0 48.4004 17.7002 94.7002 40 131.7\r\n-c42.2002 30.9004 97.0996 48.5996 160 48.5996c63 0 117.8 -17.5996 160 -48.5996c22.2998 -37 40 -83.2998 40 -131.7zM120 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM120 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\r\n-s12.5 -28 28 -28s28 12.5 28 28zM120 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM192 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM192 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\r\n-s12.5 -28 28 -28s28 12.5 28 28zM192 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM264 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM264 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\r\n-s12.5 -28 28 -28s28 12.5 28 28zM264 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM336 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM336 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\r\n-s12.5 -28 28 -28s28 12.5 28 28zM336 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM360 192c-4.7998 22.2998 -7.40039 36.9004 -16 56c-38.7998 19.9004 -90.5 32 -144 32s-105.2 -12.0996 -144 -32\r\n-c-8.7998 -19.5 -11.2002 -33.9004 -16 -56c42.2002 7.90039 98.7002 14.7998 160 14.7998s117.8 -6.89941 160 -14.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"page4\" unicode=\"&#xf3d7;\" horiz-adv-x=\"496\" \r\n-d=\"M248 -56c-137 0 -248 111 -248 248s111 248 248 248c20.9004 0 41.2998 -2.59961 60.7002 -7.5l-266.4 -376.5h205.7v-112zM248 87.5996h-149.4l149.4 213.601v-213.601zM344 56h111.4c-26.9004 -41 -65.7002 -73.5 -111.4 -92.7002v92.7002zM401.4 194.2v-16.7002\r\n-l-21.2002 8.2998zM381.1 139.7c5.90039 0 8.2002 -4.7002 8.2002 -10.6006v-10h-16.2002v7.7002c0 6.60059 1.30078 12.9004 8 12.9004zM496 192c0 -37.2998 -8.2002 -72.7002 -23 -104.4h-129v333.101c89.2998 -37.5 152 -125.8 152 -228.7zM360.4 304.4h68.1992v47.5996\r\n-h-13.8994v-32.5996h-13.9004v29.5996h-13.8994v-29.5996h-12.7002v32.5996h-13.9004v-47.5996h0.100586zM428.5 119.1h-26.5v11c0 15.4004 -5.59961 25.2002 -20.9004 25.2002c-15.3994 0 -20.6992 -10.5996 -20.6992 -25.8994v-25.3008h68.1992v15h-0.0996094zM428.5 222.1\r\n-l-68.2002 -29.6992v-12.4004l68.2002 -29.5v16.5996l-14.4004 5.7002v26.5l14.4004 5.90039v16.8994zM423.7 290.6h-35.6006v-26.5996h13.9004v12.2002h11c8.59961 -15.7998 1.2998 -35.2998 -18.5996 -35.2998c-22.5 0 -28.3008 25.2998 -15.5 37.6992l-11.6006 10.6006\r\n-c-16.2002 -17.5 -12.2002 -63.9004 27.1006 -63.9004c34 0 44.6992 35.9004 29.2998 65.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"palfed\" unicode=\"&#xf3d8;\" horiz-adv-x=\"576\" \r\n-d=\"M384.9 254.1c0.0996094 -53.3994 -46.5 -96.1992 -83.3008 -96.1992c-12.5 0 -14.3994 3.39941 -15.0996 6.19922c0.5 39.1006 1.7002 80.4004 3 119.801c40.2002 14.3994 95.4004 17.5996 95.4004 -29.8008zM190.4 181.9\r\n-c-0.200195 0.599609 -0.400391 2.09961 -0.600586 4.59961c0 25.5996 37 60.9004 58.5 75.9004c-1.2002 -36.4004 -5.5 -198.101 -1.39941 -242.5c3 -32.3008 26.7998 -32.9004 36.3994 -22.3008c5.90039 6.60059 5.5 15.7002 5.2998 19.1006v0.200195\r\n-c-1.7998 25.5996 -2.7998 60.5996 -2.69922 100c60.7998 -14.4004 140.1 60.2998 140.1 138.199c0 71 -63 94.2002 -135.2 72c-2.89941 14.6006 -18.2998 20.1006 -29.5 11.1006c-7.5 -6.2002 -9.5 -15.7998 -10.5 -28.2002c-57.7998 -30.9004 -100.7 -84.5 -100.7 -126.5\r\n-c0 -24.9004 15.6006 -43 37.1006 -43c35.0996 0 41 44.0996 14.3994 44.0996c-4.69922 0 -11 -2.69922 -11.1992 -2.69922zM8 266.9c0 38.5996 38.4004 37.3994 38.4004 37.3994h29c15.5 70.1006 120.5 74.2998 120.5 74.2998h28.0996v19.1006\r\n-c0 18.3994 21.0996 18.3994 21.0996 18.3994h85.8008c18.3994 0 21.0996 -18.3994 21.0996 -18.3994v-19.1006h28c89.2002 0 112.1 -48.6992 119.4 -74.2998h30.0996c38.5 0 38.4004 -37.3994 38.4004 -37.3994c0 -38.6006 -38.4004 -37.4004 -38.4004 -37.4004h-30\r\n-l-22.4004 -217.2c0 -43.8994 -44.6992 -44.2998 -44.6992 -44.2998h-288.9c-44.7002 0 -44.7002 44.2998 -44.7002 44.2998l-22.3994 217.2h-30c-38.5 0 -38.4004 37.4004 -38.4004 37.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"patreon\" unicode=\"&#xf3d9;\" horiz-adv-x=\"512\" \r\n-d=\"M512 253.2c0 -101.3 -82.4004 -183.8 -183.8 -183.8c-101.7 0 -184.4 82.3994 -184.4 183.8c0 101.6 82.7002 184.3 184.4 184.3c101.399 0 183.8 -82.7002 183.8 -184.3zM0 -53.5v491h90v-491h-90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"periscope\" unicode=\"&#xf3da;\" \r\n-d=\"M370 384.4c38.4004 -40.7002 59.5 -94.3008 59.5 -150.801c0 -74.2998 -57.4004 -159.5 -82 -192.6c-8 -10.7998 -79.2998 -105 -120.9 -105c-34 0 -88.7998 56.5 -125.399 104.9c-24.9004 32.8994 -82.7002 117.6 -82.7002 192.699c0 118.2 93.4004 214.4 208.1 214.4\r\n-c53.9004 0 104.801 -22.5996 143.4 -63.5996zM226.6 -45.9004c37.3008 0 184.801 167.301 184.7 279.4c0 107.3 -83.8994 196.3 -184.7 196.3c-106.1 0 -190 -88.8994 -190 -196.3c0 -112.1 147.5 -279.4 190 -279.4zM338 241.2c0 -59.1006 -51.0996 -109.7 -110.8 -109.7\r\n-c-100.601 0 -150.7 108.2 -92.9004 181.8v-0.399414c0 -24.5 20.1006 -44.4004 44.7998 -44.4004c24.7002 0 44.8008 19.9004 44.8008 44.4004c0 18.1992 -11.1006 33.7998 -26.9004 40.6992c76.5996 19.2002 141 -39.2998 141 -112.399z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phabricator\" unicode=\"&#xf3db;\" horiz-adv-x=\"496\" \r\n-d=\"M323 185.9c0 0 21.5996 -19.6006 20.9004 -20.7002l-8.10059 -19.7998c-0.5 -1.40039 -29.7002 -0.5 -29.7002 -0.5l-9.09961 -9.10059s1.59961 -31.5 0.200195 -32.0996l-20 -7.5c-1.2998 -0.5 -21.7998 23.2998 -21.7998 23.2998l-13.1006 0.200195\r\n-s-19.2998 -24.1006 -20.7002 -23.5l-20.0996 8.2998c-1.40039 0.5 -1.2002 32.2998 -1.2002 32.2998l-9.39941 9.2998s-28.9004 -0.899414 -29.5 0.5l-9.5 20c-0.600586 1.40039 21.0996 21.2002 21.0996 21.2002l-0.0996094 12.9004s-21.6006 19.5996 -21 21\r\n-l8.09961 19.7998c0.5 1.2998 29.7002 0.400391 29.7002 0.400391l9.09961 9.09961s-1.59961 28.4004 -0.200195 28.9004l20 8.2998c1.40039 0.599609 21.9004 -20.7998 21.9004 -20.7998l13.0996 -0.200195s19.3008 21.5996 20.7002 21l20.1006 -9.2002\r\n-c1.39941 -0.599609 1.19922 -29.0996 1.19922 -29.0996l9.40039 -9.30078s28.9004 0.900391 29.5 -0.5l9.5 -20c0.599609 -1.39941 -21.0996 -21.1992 -21.0996 -21.1992zM278.1 194.6c-0.699219 17 -15.5 30.3008 -32.7998 29.5\r\n-c-17.2998 -0.699219 -30.7998 -15.1992 -30.0996 -32.2998c0.700195 -17.0996 15.5 -30.3994 32.7998 -29.5996s30.7998 15.2998 30.0996 32.3994zM479.3 232.5c22.2998 -22.2998 22.2998 -58.7002 0 -81c-67.3994 -67.4004 -44.2998 -44.4004 -95.2998 -95.2998\r\n-c-74.4004 -74.5 -194.7 -74.9004 -269.8 -1.60059l-0.100586 -0.0996094c-51 51 -27.5 27.5996 -97.3994 97c-22.2998 22.2998 -22.2998 58.7002 0 81c67.8994 67.4004 44.7998 44.2998 95.7002 95.2998c74.3994 74.4004 194.699 74.9004 269.8 1.60059l0.0996094 0.0996094\r\n-zM140.4 84.2002c59.5996 -59.5 156 -59.6006 215.6 -0.100586c59.5996 59.6006 59.5 156.101 0 215.601c-59.5996 59.5 -156.1 59.5996 -215.6 0c-59.6006 -59.5 -59.6006 -156 0 -215.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phoenix-framework\" unicode=\"&#xf3dc;\" horiz-adv-x=\"640\" \r\n-d=\"M212.9 103.7c-36.7002 -1.2002 -108.7 29.2998 -127.7 106.399c-8.7002 35.3008 -2.7002 51.8008 -8 86.1006c-8.2002 53.3994 -32.1006 72.2002 -55.9004 76.5c-6.2002 1.09961 -12.3994 1.2998 -18.7002 0.299805\r\n-c-0.799805 -0.0996094 -1.59961 -0.200195 -2.39941 -0.200195c-0.100586 0.200195 -0.100586 0.299805 -0.200195 0.5c0.700195 0.600586 1.40039 1.2002 2.2002 1.7998c36.8994 26.9004 92 38.4004 136.3 35c123.6 -9.5 141.3 -156.6 252.5 -173.1\r\n-c6.09961 -0.900391 12.2998 -1.09961 18.5 -1.7002c0.700195 -0.0996094 1.40039 -0.0996094 2.5 -0.200195c-2.09961 -2.19922 -21.5996 -11.7998 -36.5 -14.5c-18.4004 -3.39941 -35.7002 -0.0996094 -51.2998 10.3008c-14.5 9.7998 -24.5 23.5 -38.9004 27.3994\r\n-c-13 3.60059 -34.0996 1.7002 -35.8994 -19.5996c-1.30078 -15.9004 14.1992 -51.7998 51.7998 -74.6006c40.3994 -24.5 101.399 -26.8994 134.7 -14.7998c0.299805 0.100586 0.699219 0.200195 1.09961 0.299805c0.200195 0.100586 0.400391 0 1 -0.0996094\r\n-c-23.5996 -28.4004 -71.2002 -49.9004 -108.2 -45.4004c-50.3994 6.2002 -77.7002 75.9004 -113.7 97.5c-19.0996 11.5 -49.0996 7 -52 -18.5c-1.09961 -10 2.10059 -19 6.40039 -27.5996c24.4004 -48.5996 65.5996 -47 68 -49.5996\r\n-c-2.7998 -0.800781 -21.7998 -2.10059 -25.5996 -2.2002zM75.2998 383.1c13.1006 -14.5 34.2002 -7.89941 35.2998 6.80078c-12.3994 -0.700195 -24.5 -2.2002 -36.5996 -4.80078c0.400391 -0.799805 0.400391 -1 1.2998 -2zM272.2 32.5996\r\n-c-42.7998 -1.19922 -92 26.7002 -123.5 61.4004c-4.60059 5 -16.7998 20.2002 -18.6006 23.4004l0.400391 0.399414c6.59961 -4.09961 25.7002 -18.5996 54.7998 -27c24.2002 -7 48.1006 -6.2998 71.6006 3.2998c22.6992 9.30078 41 0.5 43.0996 -2.89941\r\n-c-18.5 -3.7998 -20.0996 -4.40039 -24 -7.90039c-5.09961 -4.39941 -4.59961 -11.7002 7 -17.2002c26.2002 -12.3994 63 2.80078 97.2002 -25.3994c2.39941 -2 8.09961 -7.7998 10.0996 -10.7002c-0.0996094 -0.200195 -0.299805 -0.299805 -0.399414 -0.5\r\n-c-4.80078 1.5 -16.4004 7.5 -40.2002 9.2998c-24.7002 2 -46.2998 -5.2998 -77.5 -6.2002zM447 284.6c16.4004 5.2002 41.2998 13.4004 66.5 3.30078c16.0996 -6.5 26.2002 -18.7002 32.0996 -34.6006c3.5 -9.39941 5.10059 -19.7002 5.10059 -28.7002\r\n-c-0.200195 0 -0.400391 0 -0.600586 -0.0996094c-0.199219 0.400391 -0.399414 0.900391 -0.5 1.2998c-5 22 -29.8994 43.7998 -67.5996 29.9004c-50.2002 -18.6006 -130.4 -9.7002 -176.9 48c-0.699219 0.899414 -2.39941 1.7002 -1.2998 3.2002\r\n-c0.100586 0.199219 2.10059 -0.600586 3 -1.30078c18.1006 -13.3994 38.2998 -21.8994 60.2998 -26.1992c30.5 -6.10059 54.6006 -2.90039 79.9004 5.19922zM549.7 167.1c-32.4004 -0.199219 -33.7998 -50.0996 -103.601 -64.3994\r\n-c-18.1992 -3.7002 -38.6992 -4.60059 -44.8994 -4.2002v0.400391c2.7998 1.5 14.7002 2.59961 29.7002 16.5996c7.89941 7.2998 15.2998 15.0996 22.7998 22.9004c19.5 20.1992 41.3994 42.1992 81.8994 39c23.1006 -1.80078 29.3008 -8.2002 36.1006 -12.7002\r\n-c0.299805 -0.200195 0.399414 -0.5 0.700195 -0.900391c-0.5 0 -0.700195 -0.0996094 -0.900391 0c-7 2.7002 -14.2998 3.2998 -21.7998 3.2998zM537.4 191.2c-0.100586 -0.200195 -0.100586 -0.400391 -0.200195 -0.600586c-28.9004 4.40039 -48 7.90039 -68.5 -4\r\n-c-17 -9.89941 -31.4004 -20.5 -62 -24.3994c-27.1006 -3.40039 -45.1006 -2.40039 -66.1006 8c-0.299805 0.200195 -0.599609 0.399414 -1 0.599609c0 0.200195 0.100586 0.299805 0.100586 0.5c24.8994 -3.7998 36.3994 -5.09961 55.5 5.7998\r\n-c22.2998 12.9004 40.0996 26.6006 71.2998 31c29.5996 4.10059 51.2998 -2.5 70.9004 -16.8994zM268.6 350.7c-0.599609 0.599609 -1.09961 1.2002 -2.09961 2.2998c7.59961 0 29.7002 1.2002 53.4004 -8.40039c19.6992 -8 32.1992 -21 50.1992 -32.8994\r\n-c11.1006 -7.2998 23.4004 -9.2998 36.4004 -8.10059c4.2998 0.400391 8.5 1.2002 12.7998 1.7002c0.400391 0.100586 0.900391 0 1.5 -0.299805c-0.599609 -0.400391 -1.2002 -0.900391 -1.7998 -1.2002c-8.09961 -4 -16.7002 -6.2998 -25.5996 -7.09961\r\n-c-26.1006 -2.60059 -50.3008 3.7002 -73.4004 15.3994c-19.2998 9.90039 -36.4004 22.9004 -51.4004 38.6006zM640 112.3c-3.5 -3.09961 -22.7002 -11.5996 -42.7002 -5.2998c-12.2998 3.90039 -19.5 14.9004 -31.5996 24.0996\r\n-c-10 7.60059 -20.9004 7.90039 -28.1006 8.40039c0.600586 0.799805 0.900391 1.2002 1.2002 1.40039c14.7998 9.19922 30.5 12.1992 47.2998 6.5c12.5 -4.2002 19.2002 -13.5 30.4004 -24.2002c10.7998 -10.4004 21 -9.90039 23.0996 -10.5\r\n-c0.100586 0.0996094 0.200195 0 0.400391 -0.400391zM427.5 -24.7002c2.2002 -1.2002 1.59961 -1.5 1.5 -2c-18.5 1.40039 -33.9004 7.60059 -46.7998 22.2002c-21.7998 24.7002 -41.7002 27.9004 -48.6006 29.7002c0.5 0.200195 0.800781 0.399414 1.10059 0.399414\r\n-c13.0996 -0.0996094 26.0996 -0.699219 38.8994 -3.89941c25.3008 -6.40039 35 -25.4004 41.6006 -35.2998c3.2002 -4.80078 7.2998 -8.30078 12.2998 -11.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"playstation\" unicode=\"&#xf3df;\" horiz-adv-x=\"576\" \r\n-d=\"M570.9 75.7002c-11.3008 -14.2002 -38.8008 -24.2998 -38.8008 -24.2998l-205.1 -73.6006v54.2998l150.9 53.8008c17.0996 6.09961 19.7998 14.7998 5.7998 19.3994c-13.9004 4.60059 -39.1006 3.2998 -56.2002 -2.89941l-100.5 -35.5v56.3994\r\n-c23.2002 7.7998 47.0996 13.6006 75.7002 16.7998c40.8994 4.5 90.8994 -0.599609 130.2 -15.5c44.1992 -14 49.1992 -34.6992 38 -48.8994zM346.5 168.2v139c0 16.2998 -3 31.2998 -18.2998 35.5996c-11.7002 3.7998 -19 -7.09961 -19 -23.3994v-347.9l-93.7998 29.7998\r\n-v414.7c39.8994 -7.40039 98 -24.9004 129.199 -35.4004c79.5 -27.2998 106.4 -61.2998 106.4 -137.8c0 -74.5 -46 -102.8 -104.5 -74.5996zM43.2002 37.7998c-45.4004 12.7998 -53 39.5 -32.2998 54.7998c19.0996 14.2002 51.6992 24.9004 51.6992 24.9004l134.5 47.7998\r\n-v-54.5l-96.7998 -34.5996c-17.0996 -6.10059 -19.7002 -14.7998 -5.7998 -19.4004c13.9004 -4.59961 39.0996 -3.2998 56.2002 2.90039l46.3994 16.8994v-48.7998c-51.5996 -9.2998 -101.399 -7.2998 -153.899 10z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pushed\" unicode=\"&#xf3e1;\" horiz-adv-x=\"432\" \r\n-d=\"M407 336.1c21.7002 -1.89941 33.7998 -28 17.4004 -44.7998l-235.2 -231.3l-35.2998 -80.7998c-11 -17.2002 -41.2002 -14.2998 -47.7002 7l-105.101 348.3c-4.59961 18.2998 6.30078 33.9004 21.4004 36.5996l271.3 44.4004c17.9004 3.40039 39.1006 -13.5 28.7002 -37\r\n-l-14 -33.4004zM297.6 394.4l-189 -31l177.4 -16.3008l16.7998 39.9004c2.2998 4.90039 -0.0996094 8.09961 -5.2002 7.40039zM22.7002 340.1l157.899 -244.3l96.9004 230.7l-248.7 22.7002c-5.09961 0.899414 -9.2002 -4 -6.09961 -9.10059zM136 -8.40039\r\n-c0 0 28.2002 64.1006 35.2002 79.1006l-127.7 197.6l83.0996 -275.5c1.5 -4.2998 6.80078 -5.2002 9.40039 -1.2002zM408.8 306.1c3.10059 3.30078 1.40039 7.5 -2.59961 8.60059l-106.4 9.7002l-89.7002 -213.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"python\" unicode=\"&#xf3e2;\" \r\n-d=\"M439.8 247.5c10.7002 -42.9004 11.2002 -75.0996 0 -108.6c-10.7998 -32.5 -22.2998 -54.2002 -53.3994 -54.2002h-160.2v-13.6006h106.7v-40.6992c0 -30.8008 -26.5 -46.5 -53.4004 -54.3008c-40.5 -11.6992 -73 -9.89941 -106.8 0\r\n-c-28.2002 8.30078 -53.4004 25.3008 -53.4004 54.3008v101.8c0 29.2998 24.2002 54.2998 53.4004 54.2998h106.8c35.5996 0 66.7998 31 66.7998 67.7998v47.4004h40.1006c31.0996 0 45.6992 -23.2998 53.3994 -54.2002zM286.2 44c-11 0 -20 -9 -20.1006 -20.2998\r\n-c0 -11.2002 9.10059 -20.4004 20.1006 -20.4004c11.0996 0 20.0996 9.10059 20.0996 20.4004c0 11.2002 -9 20.2998 -20.0996 20.2998zM167.8 199.9c-36.2998 0 -66.7998 -31.1006 -66.7998 -66.4004v-48.7998h-36.7002c-31.0996 0 -49.2002 22.5996 -56.7998 54.2002\r\n-c-10.2002 42.5 -9.7998 67.8994 0 108.6c8.5 35.5 35.7002 54.2002 66.7998 54.2002h147v13.5996h-106.899v40.7002c0 30.9004 8.19922 47.5996 53.3994 55.5996c32.1006 5.7002 71 6 106.8 0.100586c29 -4.90039 53.4004 -26.6006 53.4004 -55.6006v-101.899\r\n-c0 -29.7998 -23.7002 -54.2998 -53.4004 -54.2998h-106.8zM161.1 342.5c11.1006 0 20.1006 9.09961 20.1006 20.2998s-9.10059 20.4004 -20.1006 20.4004c-11.0996 0 -20 -9.10059 -20.0996 -20.4004c0 -11.2002 9 -20.2998 20.0996 -20.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"red-river\" unicode=\"&#xf3e3;\" \r\n-d=\"M353.2 416c52.3994 0 94.7998 -42.4004 94.7998 -94.7998v-258.4c0 -52.3994 -42.4004 -94.7998 -94.7998 -94.7998h-258.4c-52.3994 0 -94.7998 42.4004 -94.7998 94.7998v258.4c0 52.3994 42.4004 94.7998 94.7998 94.7998h258.4zM144.9 247.1\r\n-c-0.600586 12.4004 11.6992 24.6006 24 24h56.2998c27 0 48.8994 21.9004 48.8994 48.9004h-154.199c-13.2002 0 -23.9004 -10.7002 -23.9004 -23.9004v-154.199c27 0 48.9004 21.8994 48.9004 48.8994v56.2998zM321.2 175.1c27 0 48.8994 21.9004 48.8994 48.9004h-154.199\r\n-c-13.2002 0 -23.9004 -10.7002 -23.9004 -23.9004v-154.199c27 0 48.9004 21.8994 48.9004 48.8994v56.2998c-0.600586 12.4004 11.6992 24.6006 24 24h56.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wpressr\" unicode=\"&#xf3e4;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM419.33 281.4c2.41016 5.47949 0.459961 8.2793 -5.62012 8.26953c-104.8 0.00976562 -107.69 -0.0302734 -130.78 0.0302734\r\n-c-4.31934 0.00976562 -7.10938 -1.82031 -8.83984 -5.78027c-5.70996 -13.0996 -11.5195 -26.1504 -17.2998 -39.21c-2.57031 -5.7998 -1 -8.26953 5.26953 -8.26953c25.2607 0 50.5205 -0.0107422 75.7803 0.0195312\r\n-c10.0303 0.00976562 8.54004 -13.6602 -3.89941 -13.6396c-26.4307 0.0498047 -52.8604 0 -79.29 0.0498047c-4.91016 0.00976562 -8.33008 -1.88965 -10.3506 -6.5c-4.2998 -9.83008 -32.1494 -73.0801 -32.1895 -73.1602\r\n-c-3.2002 -7.16016 -16.2607 -6.09961 -11.2803 5.33008c8.26953 18.9902 16.6504 37.9297 24.9795 56.8896c2.25 5.11035 -0.0996094 8.74023 -5.65918 8.75c-15.21 0.0205078 -30.4307 -0.0400391 -45.6406 0.0400391\r\n-c-3.35938 0.0107422 -5.41016 -1.29004 -6.76953 -4.38965c-31.4307 -71.8701 -29.7803 -67.3203 -30.0098 -67.6904c-3.87012 -6.37012 -14.8604 -3.34961 -10.9502 5.60059c5.66992 13.0098 11.3701 26.0098 17.0898 39c13.5703 30.7793 27.1396 61.5596 40.7402 92.3301\r\n-c2.54004 5.75 -0.419922 10.5801 -6.66016 10.5898c-14.2402 0.0302734 -28.4805 -0.0498047 -42.7197 0.0498047c-4.26074 0.0302734 -6.84082 -1.76953 -8.54004 -5.65039c-12.8604 -29.3896 -25.8203 -58.7295 -38.75 -88.0791\r\n-c-8.62012 -19.5605 -17.2305 -39.1201 -25.8906 -58.6602c-1.58008 -3.55078 -1.47949 -6.78027 1.20996 -9.73047c11.2207 -12.3096 22.4707 -24.6094 33.6807 -36.9395c2.08984 -2.30078 4.58984 -3.4502 7.71973 -3.4502c45.9395 0.0195312 91.8701 0.00976562 137.81 0\r\n-c3.86035 0 6.37988 1.78027 7.91992 5.29004c10.3203 23.5 20.7607 46.9395 30.9502 70.5c2.08984 4.83008 5.21973 6.75 10.3398 6.71973c23.0205 -0.110352 46.0303 -0.0400391 69.0508 -0.0498047c6.0791 0 10.5293 2.72949 12.9697 8.24023\r\n-c15.2598 34.4795 30.4502 68.9893 45.6299 103.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"replyd\" unicode=\"&#xf3e6;\" \r\n-d=\"M320 -32h-192c-70.4004 0 -128 57.5996 -128 128v192c0 70.4004 57.5996 128 128 128h192c70.4004 0 128 -57.5996 128 -128v-192c0 -70.4004 -57.5996 -128 -128 -128zM193.4 174.8c-6.10059 2 -11.6006 3.10059 -16.4004 3.10059\r\n-c-7.2002 0 -13.5 -1.90039 -18.9004 -5.60059c-5.39941 -3.7002 -9.59961 -9 -12.7998 -15.7998h-1.09961l-4.2002 18.2998h-28v-138.899h36.0996v89.6992c1.5 5.40039 4.40039 9.80078 8.7002 13.2002c4.2998 3.40039 9.7998 5.10059 16.2002 5.10059\r\n-c4.59961 0 9.7998 -1 15.5996 -3.10059zM308.6 71.4004c-3.19922 -2.40039 -7.69922 -4.80078 -13.6992 -7.10059s-12.8008 -3.5 -20.4004 -3.5c-12.2002 0 -21.0996 3 -26.5 8.90039c-5.5 5.89941 -8.5 14.7002 -9 26.3994h83.2998\r\n-c0.900391 4.80078 1.60059 9.40039 2.10059 13.9004c0.5 4.40039 0.699219 8.59961 0.699219 12.5c0 10.7002 -1.59961 19.7002 -4.69922 26.9004c-3.2002 7.19922 -7.30078 13 -12.5 17.1992c-5.2002 4.30078 -11.1006 7.30078 -17.8008 9.2002\r\n-c-6.69922 1.7998 -13.5 2.7998 -20.5996 2.7998c-21.0996 0 -37.5 -6.09961 -49.2002 -18.2998s-17.5 -30.5 -17.5 -55c0 -22.7998 5.2002 -40.7002 15.6006 -53.7002c10.3994 -13.0996 26.7998 -19.5996 49.1992 -19.5996c10.7002 0 20.9004 1.5 30.4004 4.59961\r\n-c9.5 3.10059 17.0996 6.80078 22.5996 11.2002zM286.8 141.7c3.7998 -5.40039 5.2998 -13.1006 4.60059 -23.1006h-51.7002c0.899414 9.40039 3.7002 17 8.2002 22.6006c4.5 5.59961 11.5 8.5 21 8.5c8.19922 0.0996094 14.0996 -2.60059 17.8994 -8zM366.7 139.2\r\n-c4.09961 -3.90039 9.39941 -5.7998 16.0996 -5.7998c7 0 12.6006 1.89941 16.7002 5.7998c4.09961 3.89941 6.09961 9.09961 6.09961 15.5996s-2 11.6006 -6.09961 15.4004s-9.59961 5.7002 -16.7002 5.7002c-6.7002 0 -12 -1.90039 -16.0996 -5.7002\r\n-c-4.10059 -3.7998 -6.10059 -8.90039 -6.10059 -15.4004s2 -11.7002 6.10059 -15.5996zM366.7 38.7002c4.09961 -3.90039 9.39941 -5.7998 16.0996 -5.7998c7 0 12.6006 1.89941 16.7002 5.7998c4.09961 3.89941 6.09961 9.09961 6.09961 15.5996\r\n-s-2 11.6006 -6.09961 15.4004s-9.59961 5.7002 -16.7002 5.7002c-6.7002 0 -12 -1.90039 -16.0996 -5.7002c-4.10059 -3.7998 -6.10059 -8.90039 -6.10059 -15.4004c0 -6.59961 2 -11.7002 6.10059 -15.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"resolving\" unicode=\"&#xf3e7;\" horiz-adv-x=\"496\" \r\n-d=\"M281.2 169.8l-197.9 -57.2002l-28.5996 98.6006l188.2 54.0996c52.6992 15.2998 65 8.10059 71.0996 -12.7998l11.2002 -39.2998c5.59961 -19.9004 2 -30.1006 -44 -43.4004zM248.5 440c137 0 248.5 -111.4 247.5 -247.7c0 -136.899 -111.5 -248.3 -248.5 -248.3\r\n-c-46 0 -89.5 12.7002 -126.3 34.7002l-23 80.2002l286.8 -37.3008l48.0996 13.3008l-9.69922 34.1992l-220.4 27.1006l92.5996 26.5996c30.2002 8.7002 42 15.7998 61.4004 33.2002c24.5 23 31.7002 45.5 23.5 73.5996l-10.7002 37.8008\r\n-c-8.7002 30.1992 -25.0996 49.0996 -61.3994 55.1992c-25.1006 3.5 -44.5 2 -79.3008 -8.19922l-221.899 -63.9004c26 108.8 124.2 189.5 241.3 189.5zM38.2998 59.4004c-24 38.3994 -38.2998 83.2998 -38.2998 131.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rocketchat\" unicode=\"&#xf3e8;\" horiz-adv-x=\"576\" \r\n-d=\"M486.41 340.43c119.649 -76.54 119.26 -221 0 -297.14c-77.1201 -50.9199 -179.37 -62.3896 -264.12 -47.1602c-95.5205 -91.1895 -201.72 -49.1602 -222.29 -37c0 0 73.0801 62.1006 61.21 116.49c-45.3896 46.3701 -86.5195 144.57 0 232.77\r\n-c11.8701 54.3906 -61.21 116.49 -61.21 116.49c20.7695 12.1201 127.26 54.2803 222.29 -37.3799c84.9404 15.3301 187.19 3.75977 264.12 -47.0703zM294.18 43.7803c126.67 0 229.409 66.2197 229.409 148.22s-102.74 148.43 -229.41 148.43\r\n-s-229.41 -66.4297 -229.41 -148.43c0 -35.79 19.4707 -68.5195 52 -94.1299c9.11426 -29.127 3.78125 -62.0234 -15.999 -98.6904c-0.889648 -1.67969 -1.76953 -3.45996 -2.76953 -5.23926c15.0498 1.33594 38.2158 7.93555 51.71 14.7295\r\n-c11.0684 6.26562 27.46 18.5361 36.5898 27.3896l19.7705 19.0908c23.6396 -6.27734 62.6758 -11.3721 87.1348 -11.3721c0.269531 0 0.706055 0.000976562 0.974609 0.00195312zM184.119 156.7c-0.133789 -0.00195312 -0.351562 -0.00390625 -0.485352 -0.00390625\r\n-c-18.6182 0 -33.9912 15.1084 -34.3145 33.7236c-0.700195 45.3896 67.8301 46.3799 68.5195 1.08984v-0.509766c0.000976562 -0.0888672 0.00195312 -0.232422 0.00195312 -0.321289c0 -18.6152 -15.1074 -33.8467 -33.7217 -33.999v0.0205078zM257.889 190.42\r\n-c-0.790039 45.3896 67.7402 46.4805 68.5303 1.19043v-0.610352c0.389648 -45.0801 -67.7402 -45.5703 -68.5303 -0.580078zM401.269 156.7c-0.133789 -0.00195312 -0.350586 -0.00390625 -0.485352 -0.00390625c-18.6182 0 -33.9951 15.1084 -34.3242 33.7236\r\n-c-0.69043 45.3896 67.8398 46.3799 68.5303 1.08984v-0.509766c0.000976562 -0.119141 0.00292969 -0.311523 0.00292969 -0.430664c0 -18.6152 -15.1084 -33.7979 -33.7236 -33.8896v0.0205078z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rockrms\" unicode=\"&#xf3e9;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM405.4 20.5l-101.5 118.9s73.5996 0.199219 74.1992 0.199219c29.6006 -1.09961 46.6006 33.3008 27.6006 56.1006l-157.7 185.1c-13.2002 17.2998 -40.0996 18.4004 -54.5 0\r\n-l-147.1 -172.5h90l84.2998 98.9004l84.5996 -99.2998h-75.2998c-30.5 0 -44.5 -35.7002 -26.5996 -56.1006l112 -131.3h90z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"schlix\" unicode=\"&#xf3ea;\" \r\n-d=\"M350.5 290.3l-54.2002 46.1006l73.4004 39l78.2998 -44.2002zM192 325.9l45.7002 28.1992l34.7002 -34.5996l-55.4004 -29zM126.9 319.3l31.8994 22.1006l17.2002 -28.4004l-36.7002 -22.5zM103.6 231.1l-8.7998 34.8008l29.6006 18.2998l13.0996 -35.2998z\r\n-M82.4004 314.8l23.8994 18.1006l8.90039 -24l-26.7002 -18.3008zM59 241.5l-3.59961 28.4004l22.2998 15.5l6.09961 -28.7002zM28.4004 224.9l20.7998 12.7998l3.2998 -33.4004l-22.9004 -12zM1.40039 180l19.1992 10.2002l0.400391 -38.2002l-21 -8.7998zM60.5 120.7\r\n-l-28.2998 -8.2998l-1.60059 46.7998l25.1006 10.7002zM99 184.8l-31.0996 -13l-5.2002 40.7998l27.3994 14.4004zM123.2 71l-41.6006 -5.90039l-8.09961 63.5l35.2002 10.8008zM151.7 210.9l21.2002 -57.1006l-46.2002 -13.5996l-13.7002 54.0996zM237.4 -19.5996\r\n-l-70.9004 3.2998l-24.2998 95.7998l55.2002 8.59961zM152.5 260.1l42.2002 22.4004l28 -45.9004l-50.7998 -21.2998zM193.5 165.2l61.2998 18.7002l52.7998 -86.6006l-79.7998 -11.2998zM244.9 250.8l67.2998 28.7998l65.5 -65.3994l-88.6006 -26.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"searchengin\" unicode=\"&#xf3eb;\" horiz-adv-x=\"460\" \r\n-d=\"M220.6 317.7l-67.1992 -209.3v130.3l-54.7002 -24.2002l54.7002 190.3v-115.3zM137.4 414.4l-1.30078 -4.7002l-15.1992 -52.9004c-40.3008 -15.5 -68.9004 -54.5996 -68.9004 -100.3c0 -52.2998 34.2998 -95.9004 83.4004 -105.5v-53.5996\r\n-c-77.9004 10.5 -135.4 78.1992 -135.4 159c0 80.5 59.7998 147.199 137.4 158zM448.8 -32.7998c-11.2002 -11.2002 -23.0996 -12.2998 -28.5996 -10.5c-5.40039 1.7998 -27.1006 19.8994 -60.4004 44.3994c-33.2998 24.6006 -33.5996 35.7002 -43 56.7002\r\n-c-9.39941 20.9004 -30.3994 42.6006 -57.5 52.4004l-9.7002 14.7002c-24.6992 -16.9004 -53 -26.9004 -81.2998 -28.7002l2.10059 6.59961l15.8994 49.5c46.5 11.9004 80.9004 54 80.9004 104.2c0 54.5 -38.4004 102.1 -96 107.1v52.1006\r\n-c83.2002 -5.10059 148.8 -74.5 148.8 -159.3c0 -33.6006 -11.2002 -64.7002 -29 -90.4004l14.5996 -9.59961c9.80078 -27.1006 31.5 -48 52.4004 -57.4004s32.2002 -9.7002 56.7998 -43c24.6006 -33.2002 42.7002 -54.9004 44.5 -60.2998\r\n-c1.7998 -5.40039 0.700195 -17.2998 -10.5 -28.5zM438.9 -14.9004c0 4.40039 -3.60059 8 -8 8c-4.40039 0 -8 -3.59961 -8 -8c0 -4.39941 3.59961 -8 8 -8c4.39941 0 8 3.60059 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"servicestack\" unicode=\"&#xf3ec;\" horiz-adv-x=\"496\" \r\n-d=\"M88 232c81.7002 -10.2002 273.7 -102.3 304 -232h-392c99.5 8.09961 184.5 137 88 232zM120 384c102.8 -15.5 335.3 -167.9 376 -384h-96c-26.2998 126.7 -150.7 216.7 -233.6 250.4c1.2998 49.6992 -14.1006 98 -46.4004 133.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sistrix\" unicode=\"&#xf3ee;\" \r\n-d=\"M448 -1l-30.5 -31l-146 148.1c-28.7002 -23.6992 -65.2002 -37.8994 -105 -37.8994c-91.7998 0 -166.5 75.7998 -166.5 168.899c0 93.1006 74.7002 168.9 166.6 168.801c91.8008 0 166.5 -75.8008 166.5 -168.9c0 -37 -11.8994 -71.2998 -31.8994 -99.2002zM166.5 117.2\r\n-c70.7002 0 128.1 58.2998 128.1 129.899c0 71.6006 -57.5 129.9 -128.1 129.9s-128.1 -58.2998 -128.1 -129.9c0 -71.5996 57.5 -129.899 128.1 -129.899z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"slack-hash\" unicode=\"&#xf3ef;\" \r\n-d=\"M446.2 177.6c6.2002 -19 -3.90039 -39.6992 -22.9004 -45.6992l-45.3994 -15.1006l15.6992 -47c6.10059 -19.0996 -3.89941 -39.7002 -23 -45.8994c-21.2998 -6.10059 -40.0996 6 -46 22.8994l-15.6992 47l-93.6006 -31.2998l15.7002 -47\r\n-c6.09961 -19.0996 -3.90039 -39.7002 -23 -45.9004c-21.2998 -6.09961 -40.0996 6 -46 22.9004l-15.7002 47c-45.7002 -15.2002 -50.8994 -17.7998 -57.7002 -16.7998c-14.5 0.599609 -28.5996 10.0996 -33.5996 24.5996c-6.09961 19 4 39.7002 23 45.9004l45.4004 15.0996\r\n-l-30.3008 90c-45.6992 -15.2002 -50.8994 -17.7998 -57.6992 -16.7998c-14.5 0.599609 -28.6006 10.0996 -33.6006 24.5996c-6.09961 19.1006 3.90039 39.7002 23 45.9004l45.2998 15l-15.6992 47c-6.10059 19.0996 3.89941 39.7002 23 45.9004\r\n-c19.0996 6.19922 39.7998 -3.90039 46 -22.9004l15.6992 -47l93.4004 31.2002l-15.7002 47c-6.09961 19.0996 3.90039 39.7002 23 45.8994c19.1006 6.2002 39.7998 -3.89941 46 -22.8994l15.7002 -47l45.4004 15.0996c19.0996 6.2002 39.7998 -3.89941 46 -22.8994\r\n-c6.09961 -19.1006 -3.90039 -39.7002 -23 -45.9004l-45.4004 -15.0996l30.2998 -90l45.4004 15.0996c19.0996 6.2002 39.7998 -3.90039 46 -22.9004zM192.1 130.4l93.5 31.2998l-30.2998 90.2002l-93.5 -31.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"speakap\" unicode=\"&#xf3f3;\" \r\n-d=\"M64 56.2197c-79.4102 88.1904 -72 224.36 16.6396 304.141c88.6406 79.7793 224.801 73 304.21 -15.2402c79.4102 -88.2402 72 -224.36 -16.6396 -304.14c-18.7402 -16.8701 64 -43.0908 42 -52.2607c-82.0596 -34.21 -253.91 -35 -346.229 67.5h0.0195312z\r\n-M277.31 267.82l38.5 40.8594c-9.60938 8.89062 -32 26.8301 -76.1699 27.6006c-52.3301 0.910156 -95.8594 -28.2998 -96.7695 -80c-0.200195 -11.3301 0.290039 -36.7207 29.4199 -54.8301c34.46 -21.4199 86.5195 -21.5098 86 -52.2598\r\n-c-0.370117 -21.2803 -26.4199 -25.8105 -38.5898 -25.6006c-3 0.0498047 -30.2305 0.459961 -47.6104 24.6201l-40 -42.6104c28.1602 -27 59 -32.6191 83.4902 -33.0498c10.2295 -0.179688 96.4199 -0.330078 97.8398 81\r\n-c0.280273 15.8105 -2.07031 39.7197 -28.8604 56.5898c-34.3594 21.6406 -85 19.4502 -84.4297 49.75c0.410156 23.25 31 25.3701 37.5303 25.2607c0.429688 0 26.6201 -0.260742 39.6201 -17.3701z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"staylinked\" unicode=\"&#xf3f5;\" horiz-adv-x=\"440\" \r\n-d=\"M382.7 155.5l44.2998 -41.2998c3.7002 -3.5 3.2998 -9 -0.700195 -12.2002l-198 -163.9c-9.89941 -7.59961 -17.2998 -0.799805 -17.2998 -0.799805l-208.7 196.101c-3.5 3.5 -3 9 1.2002 12.1992l45.7998 34.9004c4.2002 3.2002 10.4004 3 13.9004 -0.5l151.899 -147.5\r\n-c3.7002 -3.5 10 -3.7002 14.2002 -0.400391l93.2002 74c4.09961 3.2002 4.5 8.7002 0.900391 12.2002l-84 81.2998c-3.60059 3.5 -9.90039 3.7002 -14 0.5l-0.100586 -0.0996094c-4.09961 -3.2002 -10.3994 -3 -14 0.5l-68.0996 64.2998\r\n-c-3.5 3.5 -3.10059 9 1.09961 12.2002l57.2998 43.5996c4.10059 3.2002 10.3008 3 13.8008 -0.5l170 -167.3zM437.2 238.9c3.7002 -3.5 3.39941 -9 -0.700195 -12.2002l-45.7998 -35.7998c-4.10059 -3.2002 -10.4004 -3 -14.1006 0.5l-160.399 159\r\n-c-3.60059 3.5 -9.7998 3.69922 -13.9004 0.5l-92.2002 -71.5c-4.19922 -3.30078 -4.69922 -8.7002 -1.09961 -12.2002l94.5996 -91.7998c3.7002 -3.5 10 -3.60059 14.2002 -0.400391l0.100586 0.0996094c4.19922 3.2002 10.5996 3 14.1992 -0.5l57.1006 -54.3994\r\n-c3.7002 -3.5 3.2998 -9 -0.900391 -12.2002l-7.7002 -6l0.300781 -0.299805l-50.2002 -38.7998c-4.2002 -3.30078 -10.6006 -3.10059 -14.2998 0.399414l-171.7 165.101l-42.2998 41.6992c-3.60059 3.5 -3 9 1.19922 12.2002l206.801 162.101\r\n-c8.2998 6.59961 14.7998 2.2998 16.2998 1.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"steam-symbol\" unicode=\"&#xf3f6;\" \r\n-d=\"M395.5 270.5c0 -33.7998 -27.5 -61 -61 -61c-33.7998 0 -61 27.2998 -61 61s27.2998 61 61 61c33.5 0 61 -27.2002 61 -61zM448 270.3c0 -63 -51 -113.8 -113.7 -113.8l-109.3 -79.7998c-4 -43 -40.5 -76.7998 -84.5 -76.7998c-40.5 0 -74.7002 28.7998 -83 67\r\n-l-57.5 23.0996v107.3l97.2002 -39.2998c15.0996 9.2002 32.2002 13.2998 52 11.5l71 101.7c0.5 62.2998 51.5 112.8 114 112.8c62.7998 0 113.8 -51 113.8 -113.7zM203 85c0 34.7002 -27.7998 62.5 -62.5 62.5c-4.5 0 -9 -0.5 -13.5 -1.5l26 -10.5\r\n-c25.5 -10.2002 38 -39 27.7002 -64.5c-10.2002 -25.5 -39.2002 -38 -64.7002 -27.5c-10.2002 4 -20.5 8.2998 -30.7002 12.2002c10.5 -19.7002 31.2002 -33.2002 55.2002 -33.2002c34.7002 0 62.5 27.7998 62.5 62.5zM410.5 270.3c0 42 -34.2998 76.2002 -76.2002 76.2002\r\n-c-42.2998 0 -76.5 -34.2002 -76.5 -76.2002c0 -42.2002 34.2998 -76.2002 76.5 -76.2002c41.9004 -0.0996094 76.2002 33.9004 76.2002 76.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sticker-mule\" unicode=\"&#xf3f7;\" horiz-adv-x=\"576\" \r\n-d=\"M561.7 248.4c-1.2998 -0.300781 0.299805 0 0 0zM555.5 325.8c20.2002 -50.0996 20.5996 -45.2002 20.5996 -52.8994c0 -7.5 -4.09961 -11 -7.19922 -16.5c-1.5 -3 -4.60059 -7.5 -7.2002 -8c-0.400391 0 -3 -0.5 -13.4004 -2.5c-7.2002 -1 -13.3994 4.5 -14.8994 9.5\r\n-c-1.60059 4.69922 2.7998 10.0996 -11.8008 22.8994c-10.2998 10 -21.0996 11.2998 -31.8994 17c-9.7998 5.7002 -11.9004 -1 -18 -8c-18 -22.8994 -34 -46.8994 -52 -69.7998c-11.7998 -15 -24.2002 -30.4004 -33.5 -47.4004\r\n-c-3.90039 -6.7998 -9.5 -28.0996 -10.2998 -29.8994c-6.2002 -17.7002 -5.5 -25.7998 -16.5 -68.2998c-3.10059 -10 -5.7002 -21.4004 -8.7002 -32.4004c-2.2002 -6.7998 -7.40039 -49.2998 -0.5 -59.4004c2.09961 -3.5 8.7002 -4.5 11.2998 -8\r\n-c0.0996094 -0.0996094 9.59961 -18.1992 9.2998 -20c0 -6.09961 -9.39941 -5.59961 -11.2998 -6.5c-4.7998 -2.89941 -3.7998 -5.89941 -6.40039 -7.39941c-5.89941 -2.90039 -32.0996 -3.2002 -36.5 0.5c-4.09961 3 -2.19922 11.8994 -1.5 15\r\n-c2.2002 15 -2.5 7.89941 -9.7998 11.5c-3.09961 1.5 -4.09961 5.5 -4.59961 10c-0.5 1.5 -1 2.5 -1.5 3.5c-1.7002 10.7002 6.7998 33.5996 8.2002 43.3994c4.89941 23.7002 -0.700195 37.2002 1.5 46.9004c3.69922 16.2002 4.09961 3.5 4.09961 29.9004\r\n-c-1.40039 25.8994 3.2998 36.8994 0.5 38.8994c-14.7998 0 -64.2998 -10.7002 -112.2 -2c-46.0996 8.90039 -59.3994 29 -65.3994 30.9004c-10.3008 4.5 -23.2002 -0.5 -27.3008 -7c-0.0996094 -0.100586 -35 -70.6006 -39.5996 -87.7998\r\n-c-6.2002 -20.5 -0.5 -47.4004 4.09961 -66.8008c0 -0.0996094 4.5 -14.5996 10.3008 -19.5c2.09961 -1.5 5.09961 -2.5 7.19922 -4.5c2.80078 -2.69922 9.40039 -15.1992 9.80078 -16c2.59961 -4.5 3.59961 -8 -1.5 -10.5c-3.60059 -2 -9.30078 -2.5 -14.4004 -2.5\r\n-c-2.59961 -0.5 -1.5 -3.5 -3.09961 -5c-2.90039 -2.7998 -20.7002 -6.09961 -29.9004 -2.5c-2.59961 1 -5.7002 3 -6.2002 5c-1.5 4 2.10059 9 -1 12.5c-4.5 2.90039 -13.0996 2 -17 12c-2.2002 5.40039 -2.59961 7.60059 -2.59961 49.4004\r\n-c0 9.7002 -5.90039 38.7002 -8.2002 46.9004c-1.5 5.5 -1.5 11.5 0 16c0.299805 0.899414 4.09961 4.59961 4.09961 13c-1 1.5 -4.59961 0.5 -5.09961 1.5c-10.4004 80.5996 -5.90039 79 -7.7002 98.2998c-1.5 16 -10.8994 43.8994 -6.7002 64.2998\r\n-c0.5 2.40039 3.40039 21 24.2002 38.9004c31 26.6992 48.4004 38.2998 159 11.5c1.10059 -0.400391 66.2998 -21.1006 110.7 9c15.5 11.2998 28.7998 11.2998 35.5 16c0.0996094 0.0996094 61.7002 52.0996 87 65.2998c47.2002 29.3994 69.9004 16.7002 75.0996 18\r\n-c4.7002 1 13.4004 25.7998 17 25.7998c5.5 0 1.60059 -20.2002 3.60059 -25.9004c0.5 -2 3.59961 -5 6.2002 -5c2.2998 0 1.69922 0.800781 10.2998 5c8.39941 5.40039 14.8994 17.6006 20.5996 17c11.7002 -1.59961 -19 -41.5996 -19 -46.8994\r\n-c0 -2 0.200195 -0.799805 4.60059 -9.5c2.59961 -5.5 4.59961 -13.5 6.19922 -20c8.30078 -29.7002 5.7002 -14.6006 13.4004 -36.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"studiovinari\" unicode=\"&#xf3f8;\" horiz-adv-x=\"512\" \r\n-d=\"M480.3 260.3l4.2002 -28v-28l-25.0996 -44.0996l-39.8008 -78.4004l-56.0996 -67.5l-79.0996 -37.7998l-17.7002 -24.5l-7.7002 -12l-9.59961 -4s17.2998 63.5996 19.3994 63.5996c2.10059 0 20.2998 -0.699219 20.2998 -0.699219l66.7002 38.5996l-92.5 -26.0996\r\n-l-55.8994 -36.8008l-22.8008 -28l-6.59961 -1.39941l20.7998 73.5996l6.90039 5.5l20.7002 -12.8994l88.2998 45.1992l56.7998 51.5l14.7998 68.4004l-125.399 -23.2998l15.1992 18.2002l-173.399 53.2998l81.8994 10.5l-166 122.899l114.9 -18.0996l-101.3 108\r\n-l252.899 -126.6l-31.5 38l124.4 -74.4004l-143.3 99l18.7002 -38.4004l-49.6006 18.1006l-45.5 84.2998l194.601 -122l-42.9004 55.7998l108 -96.3994l12 8.89941l-21 16.4004l4.2002 37.7998l37.7998 10.4004l29.2002 -24.7002l11.5 -4.2002l-7 -6.2002l8.5 -12\r\n-l-13.1006 -7.39941l-10.2998 -20.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"supple\" unicode=\"&#xf3f9;\" horiz-adv-x=\"640\" \r\n-d=\"M640 185.5c0 -64.0996 -109 -116.1 -243.5 -116.1c-24.7998 0 -48.5996 1.7998 -71.0996 5c7.69922 -0.400391 15.5 -0.600586 23.3994 -0.600586c134.5 0 243.5 56.9004 243.5 127.101c0 29.3994 -19.0996 56.3994 -51.2002 78\r\n-c60 -21.1006 98.9004 -55.1006 98.9004 -93.4004zM47.7002 220.1c0.0996094 -29.3994 19.2998 -56.5 51.5996 -78c-60.2002 21 -99.2002 55 -99.2998 93.3008c-0.0996094 64.0996 108.8 116.3 243.3 116.699c24.7002 0 48.5 -1.69922 71 -4.89941\r\n-c-7.7002 0.299805 -15.3994 0.5 -23.2998 0.5c-134.5 -0.299805 -243.4 -57.4004 -243.3 -127.601zM107.9 180.2l8.7998 10.8994s8.7998 -10.0996 20.7002 -10.0996c6.5 0 12.2998 3.5 12.2998 10.0996c0 14.5 -40.2002 13.3008 -40.2002 39.9004\r\n-c0 13.9004 12 24.0996 28.5 24.0996c10 0 25.4004 -4.69922 25.4004 -16.7998v-7.89941h-14.2002v3.89941c0 4 -5.60059 6.60059 -11.2998 6.60059c-7.2002 0 -12.5 -3.7002 -12.5 -9.10059c0 -14.5996 40.1992 -11.7002 40.1992 -39.7002\r\n-c0 -13.5996 -10.5 -25.0996 -28.3994 -25.0996c-18.7998 0 -29.2998 13.2002 -29.2998 13.2002zM228.7 253.8h15.7002v-55c0 -18.8994 -13.3008 -31.8994 -33.4004 -31.8994c-20.2998 0 -33.7002 13 -33.7002 31.8994v55h15.7998v-54.5\r\n-c0 -11.2002 7.10059 -17.7002 17.8008 -17.7002c10.6992 0 17.7998 6.5 17.7998 17.8008v54.3994zM263.1 168.4v72h-7.7998v13.3994h39.1006c16 0 27.1992 -11.2002 27.1992 -27.7998s-11.1992 -28.0996 -27.1992 -28.0996h-15.5v-29.5h-15.8008zM278.9 211.4h12.5996\r\n-c8.90039 0 14 5.7998 14 14.6992c0 8.7002 -5 14.4004 -13.7002 14.4004h-12.8994v-29.0996zM335.9 168.4v72h-7.80078v13.3994h39.1006c16 0 27.2002 -11.2002 27.2002 -27.7998s-11.2002 -28.0996 -27.2002 -28.0996h-15.5v-29.5h-15.7998zM351.6 211.4h12.6006\r\n-c9 0 14 5.7998 14 14.6992c0 8.7002 -5 14.4004 -13.7002 14.4004h-12.9004v-29.0996zM408.7 176.6h0.0996094v61.2002c0 1.60059 -0.899414 2.60059 -2.59961 2.60059h-5.2002v13.3994h15.4004c5.7998 0 8.19922 -2.5 8.19922 -8.2002v-61.1992\r\n-c0 -1.60059 0.900391 -2.60059 2.60059 -2.60059h18.5996c1.60059 0 2.60059 0.900391 2.60059 2.60059v5.19922h14.2998v-13c0 -5.7998 -2.40039 -8.19922 -8.2002 -8.19922h-37.5996c-5.80078 0 -8.2002 2.39941 -8.2002 8.19922zM472.1 176.6h-0.0996094v63.9004h-7.7998\r\n-v13.4004h51.5996c5.7002 0 8.2002 -2.5 8.2002 -8.2002v-13h-14.2002v5.2002c0 1.59961 -0.899414 2.59961 -2.59961 2.59961h-19.2002v-22.4004h27.7002v-13.3994h-27.7002v-20.2998c0 -1.60059 0.900391 -2.60059 2.59961 -2.60059h19.7002\r\n-c1.60059 0 2.60059 0.900391 2.60059 2.60059v5.19922h14.2998v-13c0 -5.7998 -2.5 -8.19922 -8.2002 -8.19922h-38.7002c-5.7998 0 -8.2002 2.39941 -8.2002 8.19922zM531 252.6h-2.7002v1.2002h7v-1.2002h-2.7002v-5.89941h-1.59961v5.89941zM536.7 253.8h2.39941\r\n-l2.10059 -5.09961l2.09961 5.09961h2.2998v-7.09961h-1.5v5.7002l-2.2998 -5.7002h-1.2998l-2.2998 5.7002v-5.7002h-1.5v7.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"telegram-plane\" unicode=\"&#xf3fe;\" \r\n-d=\"M446.7 349.4l-67.6006 -318.801c-5.09961 -22.5 -18.3994 -28.0996 -37.2998 -17.5l-103 75.9004l-49.7002 -47.7998c-5.5 -5.5 -10.0996 -10.1006 -20.6992 -10.1006l7.39941 104.9l190.9 172.5c8.2998 7.40039 -1.7998 11.5 -12.9004 4.09961l-236 -148.6\r\n-l-101.6 31.7998c-22.1006 6.90039 -22.5 22.1006 4.59961 32.7002l397.4 153.1c18.3994 6.90039 34.5 -4.09961 28.5 -32.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uber\" unicode=\"&#xf402;\" \r\n-d=\"M414.1 416c18.7002 0 33.9004 -15.2002 33.8008 -33.9004v-380.199c0 -18.7002 -15.2002 -33.9004 -33.9004 -33.9004h-380.1c-18.7002 0 -33.9004 15.2002 -33.9004 34v380.1c0 18.7002 15.2002 33.9004 33.9004 33.9004h380.199zM237.6 56.9004\r\n-c74.6006 7.5 129 74.0996 121.5 148.6c-7 69.4004 -65.3994 122.2 -135.1 122.2s-128.1 -52.7998 -135.1 -122.2h94.3994v20.4004c0 3.7998 3.10059 6.7998 6.7998 6.7998h67.9004c3.7998 0 6.7998 -3.10059 6.7998 -6.7998v-67.9004\r\n-c0 -3.7998 -3.09961 -6.7998 -6.7998 -6.7998h-67.9004c-3.7998 0 -6.7998 3.09961 -6.7998 6.7998v20.4004h-94.3994c7.5 -74.6006 74.0996 -129 148.699 -121.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uikit\" unicode=\"&#xf403;\" \r\n-d=\"M443.9 320v-256l-225.9 -128l-218 128v214.3l87.5996 -45.0996v-117l133.5 -75.5l135.801 75.5v151l-101.101 57.5996l87.6006 53.1006zM308.6 398.9l-87.3994 -53l-86 47.2998l88.5996 54.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"uniregistry\" unicode=\"&#xf404;\" horiz-adv-x=\"384\" \r\n-d=\"M192 -32c-39.5 0 -76.2002 11.7998 -106.7 32.2002h213.5c-30.5996 -20.4004 -67.2998 -32.2002 -106.8 -32.2002zM102.9 161.1c0 -2.5 0.0996094 -5 0.299805 -7.39941h-103.101c-0.0996094 2.39941 -0.0996094 4.89941 -0.0996094 7.39941v12.4004h102.9v-12.4004z\r\n-M123.4 104.1c8.89941 -10.5996 20.0996 -19.0996 33 -24.7998h-138.301c-3.7998 8 -7 16.2998 -9.59961 24.7998h114.9zM105.7 138.8c2 -7.89941 5.2002 -15.3994 9.2002 -22.2998h-109.7c-1.7002 7.2998 -3 14.7002 -3.90039 22.2998h104.4zM102.9 208.1v-17.2998h-102.9\r\n-v17.2998h102.9zM102.9 381.3v-4.89941h-102.9v4.89941h102.9zM102.9 416v-2.5h-102.9v2.5h102.9zM102.9 346.7v-7.40039h-102.9v7.40039h102.9zM102.9 242.7v-14.7998h-102.9v14.7998h102.9zM102.9 312v-9.90039h-102.9v9.90039h102.9zM102.9 277.4v-12.4004h-102.9v12.4004\r\n-h102.9zM269.1 116.5c4 6.90039 7.10059 14.4004 9.2002 22.2998h104.4c-0.799805 -7.59961 -2.10059 -15 -3.90039 -22.2998h-109.7zM281.1 302.2v9.7998h102.9v-9.7998h-102.9zM281.1 265v12.4004h102.9v-12.4004h-102.9zM281.1 339.3v7.40039h102.9v-7.40039h-102.9z\r\n-M281.1 416h102.9v-2.5h-102.9v2.5zM78.0996 5.09961c-11.7998 8.7002 -23.5996 18.7002 -33.1992 29.7002h293.1c-9.5 -11.0996 -20.4004 -21 -32.2002 -29.7002h-227.7zM281.1 376.4v4.89941h102.9v-4.89941h-102.9zM281.1 227.9v14.7998h102.9v-14.7998h-102.9z\r\n-M38.7998 42.2998c-6.59961 8.5 -10.5996 17.6006 -15.7998 27.2002h338.9c-5.2002 -9.59961 -11.1006 -18.7002 -17.8008 -27.2002h-305.3zM227.6 79.4004c12.8008 5.59961 24.1006 14.0996 32.9004 24.7998h115c-2.7002 -8.60059 -4.7998 -16.7998 -8.5 -24.7998h-139.4z\r\n-M281.1 161.1v12.4004h102.9v-12.4004c0 -2.5 -0.0996094 -4.89941 -0.200195 -7.39941h-103.1c0.299805 2.39941 0.399414 4.89941 0.399414 7.39941zM281.1 190.8v17.2998h102.9v-17.2998h-102.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"untappd\" unicode=\"&#xf405;\" horiz-adv-x=\"640\" \r\n-d=\"M401.3 398.1c-79.7998 -160.1 -84.5996 -152.5 -87.8994 -173.199l-5.2002 -32.8008c-1.90039 -12 -6.60059 -23.5 -13.7002 -33.3994l-148.9 -207.8c-7.59961 -10.6006 -20.3994 -16.2002 -33.3994 -14.6006c-40.2998 5 -77.7998 32.2002 -95.2998 68.5\r\n-c-5.7002 11.7998 -4.5 25.7998 3.09961 36.4004l148.9 207.899c7.09961 9.90039 16.3994 18 27.1992 23.7002l29.3008 15.5c18.5 9.7998 9.69922 11.9004 135.6 138.9c1 4.7998 1 7.2998 3.59961 8c3 0.700195 6.60059 1 6.30078 4.59961l-0.400391 4.60059\r\n-c-0.200195 1.89941 1.2998 3.59961 3.2002 3.59961c4.5 0.0996094 13.2002 -1.2002 25.5996 -10c12.2998 -8.90039 16.4004 -16.7998 17.7002 -21.0996c0.599609 -1.80078 -0.599609 -3.7002 -2.40039 -4.2002l-4.5 -1.10059\r\n-c-3.39941 -0.899414 -2.5 -4.39941 -2.2998 -7.39941c0.100586 -2.7998 -2.2998 -3.60059 -6.5 -6.10059zM230.1 411.6c-3.19922 0.800781 -8.19922 1.2002 -6.7998 5.40039c1.2998 4.2998 5.40039 12.2002 17.7002 21.0996c12.4004 8.90039 21.0996 10.1006 25.5996 10\r\n-c4.2002 -0.0996094 3.10059 -4.89941 2.80078 -8.19922c-0.300781 -3.60059 3.2998 -3.80078 6.2998 -4.60059c2.59961 -0.700195 2.59961 -3.2998 3.59961 -8c9.10059 -9.2002 17.6006 -17.8994 25.6006 -26.0996c1.2998 -1.40039 1.19922 -3.5 -0.100586 -4.90039\r\n-c-15.8994 -16.3994 -29.2998 -30.5996 -40.5 -42.5996c-1 -1 -2.59961 -0.799805 -3.2998 0.5c-6.90039 13.5 -14.2998 28.0996 -22.2002 44c-4.2998 2.5 -6.59961 3.2998 -6.39941 6c0.199219 3 1.09961 6.5 -2.30078 7.39941zM620 41.2998\r\n-c7.7002 -10.7002 8.7998 -24.7002 3.40039 -36.5996c-17.7002 -36.6006 -55.4004 -63.7002 -95.7002 -68.6006c-12.9004 -1.5 -25.5 4.10059 -33.1006 14.7002l-148.899 207.9c-7.10059 9.89941 -11.7998 21.3994 -13.7002 33.3994\r\n-c-1.59961 9.80078 -2 19.1006 -0.299805 29.8008c1.89941 12 2.7002 6 49 94.7998c0.700195 1.39941 2.59961 1.59961 3.59961 0.5c16.2998 -18 19.2998 -23 30.5 -28.9004c29.7998 -15.7002 43.2002 -20.5996 56.4004 -39.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ussunnah\" unicode=\"&#xf407;\" horiz-adv-x=\"512\" \r\n-d=\"M156.8 162.9l5.7002 -14.4004h-8.2002c-1.2998 3.2002 -3.09961 7.7002 -3.7998 9.5c-2.5 6.2998 -1.09961 8.40039 0 10c1.90039 2.7002 3.2002 4.40039 3.59961 5.2002c0 -2.2002 0.800781 -5.7002 2.7002 -10.2998zM454.1 144.1\r\n-c-2.09961 -13.7998 -5.69922 -27.0996 -10.5 -39.6992l43 -23.4004l-44.7998 18.7998c-5.2998 -13.2002 -12 -25.5996 -19.8994 -37.2002l34.1992 -30.1992l-36.7998 26.3994c-8.39941 -11.7998 -18 -22.5996 -28.7002 -32.2998l24.9004 -34.7002l-28.0996 31.7998\r\n-c-11 -9.59961 -23.1006 -18 -36.1006 -25.0996l15.7002 -37.2002l-19.2998 35.2998c-13.1006 -6.7998 -27 -12.0996 -41.6006 -15.8994l6.7002 -38.4004l-10.5 37.4004c-14.2998 -3.40039 -29.2002 -5.2998 -44.5 -5.40039l-1.7998 -38.2998l-1.90039 38.4004\r\n-c-15.2998 0.0996094 -30.1992 2 -44.5 5.2998l-10.5996 -37.2998l6.7002 38.1992c-14.6006 3.7002 -28.6006 9.10059 -41.7002 15.8008l-19.2002 -35.1006l15.6006 37c-13 7 -25.2002 15.4004 -36.2002 25.1006l-27.9004 -31.6006l24.7002 34.4004\r\n-c-10.7002 9.7002 -20.4004 20.5 -28.7998 32.2998l-36.5 -26.2002l33.8994 29.9004c-7.89941 11.5996 -14.5996 24.0996 -20 37.2998l-44.3994 -18.7002l42.5996 23.2002c-4.7998 12.7002 -8.39941 26.0996 -10.5 39.9004l-51 -9l50.2998 14.1992\r\n-c-1.09961 8.5 -1.69922 17.1006 -1.69922 25.9004c0 4.7002 0.199219 9.40039 0.5 14.0996l-55.4004 2.90039l56 2.7998c1.2998 13.1006 3.7998 25.7998 7.5 38.1006l-57.0996 16.0996l58.8994 -10.4004c4 12 9.10059 23.5 15.2002 34.4004l-55.0996 30l58.2998 -24.5996\r\n-c6.2998 10.5996 13.5 20.3994 21.5996 29.5996l-49.5 43.5996l53.9004 -38.6992c8.09961 8.59961 17 16.5 26.5996 23.5996l-40 55.5996l45.6006 -51.5996c9.5 6.59961 19.6992 12.2998 30.2998 17.2002l-27.2998 64.8994l33.7998 -62.0996\r\n-c10.5 4.40039 21.3994 7.90039 32.7002 10.4004l-12.4004 70.6992l19.5 -69.1992c11 2.09961 22.2998 3.19922 33.7998 3.39941l3.7002 72.2002l3.59961 -72.2002c11.5 -0.200195 22.8008 -1.39941 33.8008 -3.5l19.5996 69.2998l-12.4004 -70.6992\r\n-c11.3008 -2.60059 22.2002 -6.10059 32.6006 -10.5l33.8994 62.1992l-27.3994 -65.0996c10.5996 -4.90039 20.7002 -10.7002 30.2002 -17.2002l45.7998 51.7998l-40.1006 -55.8994c9.5 -7.10059 18.4004 -15 26.5 -23.6006l54.2002 38.9004l-49.7002 -43.9004\r\n-c8 -9.09961 15.2002 -18.8994 21.5 -29.3994l58.7002 24.7002l-55.5 -30.2002c6.10059 -10.9004 11.1006 -22.2998 15.1006 -34.2998l59.2998 10.3994l-57.5 -16.2002c3.7002 -12.1992 6.2002 -24.8994 7.5 -37.8994l56.2998 -2.7002l-56 -2.7998\r\n-c0.299805 -4.60059 0.5 -9.2998 0.5 -14.1006c0 -8.69922 -0.599609 -17.2998 -1.59961 -25.7998l50.6992 -14.2998zM432.3 175.1c0 97.5 -79 176.5 -176.5 176.5s-176.5 -79 -176.5 -176.5s79 -176.5 176.5 -176.5s176.5 79 176.5 176.5zM408.3 175.1\r\n-c0 -84.2998 -68.2998 -152.6 -152.6 -152.6s-152.601 68.2998 -152.601 152.6c0 84.3008 68.3008 152.601 152.601 152.601s152.6 -68.2998 152.6 -152.601zM195 207c0 -2.09961 1.2998 -3.7998 3.59961 -5.09961c3.30078 -1.90039 6.2002 -4.60059 8.2002 -8.2002\r\n-c2.7998 5.7002 4.2998 9.5 4.2998 11.2002c0 2.19922 -1.09961 4.39941 -3.19922 7c-2.10059 2.5 -3.2002 5.19922 -3.30078 7.69922c-6.5 -6.7998 -9.59961 -10.8994 -9.59961 -12.5996zM154.3 226c0 -2.09961 1.2998 -3.7998 3.60059 -5.09961\r\n-c3.5 -1.90039 6.19922 -4.60059 8.19922 -8.2002c2.80078 5.7002 4.30078 9.5 4.30078 11.2002c0 2.19922 -1.10059 4.39941 -3.2002 7c-2.10059 2.5 -3.2002 5.19922 -3.2998 7.69922c-6.5 -6.7998 -9.60059 -10.8994 -9.60059 -12.5996zM135.3 226\r\n-c0 -2.09961 1.2998 -3.7998 3.60059 -5.09961c3.2998 -1.90039 6.19922 -4.60059 8.19922 -8.2002c2.80078 5.7002 4.30078 9.5 4.30078 11.2002c0 2.19922 -1.10059 4.39941 -3.2002 7c-2.10059 2.5 -3.2002 5.19922 -3.2998 7.69922\r\n-c-6.40039 -6.7998 -9.60059 -10.8994 -9.60059 -12.5996zM340.2 138.1c-8.40039 3 -8.7002 6.80078 -8.7002 15.6006v112.3c-8.2002 -12.5 -14.2002 -18.5996 -18 -18.5996c6.2998 -14.4004 9.5 -23.9004 9.5 -28.3008v-64.2998c0 -2.2002 -2.2002 -6.5 -4.7002 -6.5h-18\r\n-c-2.7998 7.5 -10.2002 26.9004 -15.2998 40.2998c-2 -2.5 -7.2002 -9.19922 -10.7002 -13.6992c2.40039 -1.60059 4.10059 -3.60059 5.2002 -6.30078c2.59961 -6.69922 6.40039 -16.5 7.90039 -20.1992h-9.2002c-3.90039 10.3994 -9.60059 25.3994 -11.7998 31.0996\r\n-c-2 -2.5 -7.2002 -9.2002 -10.7002 -13.7002c2.39941 -1.59961 4.09961 -3.59961 5.2002 -6.2998c0.799805 -2 2.7998 -7.2998 4.2998 -10.9004h-9.2002c-1.5 4.10059 -5.59961 14.6006 -8.40039 22c-2 -2.5 -7.19922 -9.19922 -10.6992 -13.6992\r\n-c2.5 -1.60059 4.2998 -3.60059 5.19922 -6.30078c0.200195 -0.599609 0.5 -1.39941 0.600586 -1.69922h-17.7002c-4.59961 13.8994 -11.4004 27.6992 -11.4004 34.0996c0 2.2002 0.300781 5.09961 1.10059 8.2002c-8.7998 -10.7998 -14 -15.9004 -14 -25\r\n-c0 -7.5 10.3994 -28.2998 10.3994 -33.2998c0 -1.7002 -0.5 -3.30078 -1.39941 -4.90039c-9.60059 12.7002 -15.5 20.7002 -18.7998 20.7002h-12l-11.2002 28c-3.7998 9.59961 -5.7002 16 -5.7002 18.7998c0 3.7998 0.5 7.7002 1.7002 12.2002\r\n-c-1 -1.2998 -3.7002 -4.7002 -5.5 -7.10059c-0.799805 2.10059 -3.10059 7.7002 -4.60059 11.5c-2.09961 -2.5 -7.5 -9.09961 -11.1992 -13.5996c0.899414 -2.2998 3.2998 -8.09961 4.89941 -12.2002c-2.5 -3.2998 -9.09961 -11.7998 -13.5996 -17.7002\r\n-c-4 -5.2998 -5.7998 -13.2998 -2.7002 -21.7998c2.5 -6.7002 2 -7.89941 -1.7002 -14.0996h61.7002c5.5 0 14.2998 -14 15.5 -22c13.2002 16 15.4004 19.5996 16.7998 21.5996h107c3.90039 0 7.2002 1.90039 9.90039 5.7998zM360.3 164.7v101.6\r\n-c-9 -12.5 -15.8994 -18.5996 -20.7002 -18.5996c7.10059 -14.4004 10.7002 -23.9004 10.7002 -28.2998v-66.3008c0 -17.5 8.60059 -20.3994 24 -20.3994c8.10059 0 12.5 0.799805 13.7002 2.7002c-4.2998 1.59961 -7.59961 2.5 -9.90039 3.2998\r\n-c-8.09961 3.2002 -17.7998 7.39941 -17.7998 26z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vaadin\" unicode=\"&#xf408;\" \r\n-d=\"M224.5 307.3c1.5 17.6006 4.90039 52.7002 49.7998 52.7002h98.6006c20.6992 0 32.0996 7.7998 32.0996 21.5996v12.3008c0 12.1992 9.2998 22.0996 21.5 22.0996s21.5 -9.90039 21.5 -22.0996v-36.5c0 -42.9004 -21.5 -62 -66.7998 -62h-100.5\r\n-c-30.1006 0 -33 -14.7002 -33 -27.1006c0 -1.2998 -0.100586 -2.5 -0.200195 -3.7002c-0.700195 -12.2998 -10.9004 -22.1992 -23.4004 -22.1992s-22.6992 9.7998 -23.3994 22.1992c-0.100586 1.2002 -0.200195 2.40039 -0.200195 3.7002c0 12.2998 -3 27.1006 -33 27.1006\r\n-h-100.7c-45.2998 0 -66.7998 19.0996 -66.7998 62v36.5c0 12.1992 9.40039 22.0996 21.5996 22.0996c12.2002 0 21.5 -9.90039 21.5 -22.0996v-12.3008c0 -13.7998 11.4004 -21.5996 32.1006 -21.5996h98.5996c44.7998 0 48.2998 -35.0996 49.7998 -52.7002h0.900391z\r\n-M224 -8c-11.5 0 -21.4004 7 -25.7002 16.2998c-1.09961 1.7998 -97.0996 169.5 -98.2002 171.4c-11.8994 19.7002 3.2002 44.2998 27.2002 44.2998c13.9004 0 23.4004 -6.40039 29.7998 -20.2998l66.9004 -117.7l66.9004 117.7c6.5 13.8994 15.8994 20.2998 29.7998 20.2998\r\n-c24 0 39.0996 -24.7002 27.2002 -44.2998c-1.10059 -1.7998 -97.1006 -169.601 -98.2002 -171.4c-4.2998 -9.2998 -14.2002 -16.2998 -25.7002 -16.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"viber\" unicode=\"&#xf409;\" horiz-adv-x=\"512\" \r\n-d=\"M444 398.1c42.2002 -36.6992 65.5996 -117.899 49.7998 -246.5c-15.2002 -124.6 -109.1 -136.6 -125.7 -142c-7.19922 -2.2998 -70.2998 -18.0996 -152.5 -11.1992c-9.09961 -10.5 -21.0996 -24.3008 -29.7998 -33.7002\r\n-c-15.8994 -17.1006 -25.7002 -33 -42.2998 -27.7998c-13.7998 4.19922 -13 25.0996 -13 25.0996l0.0996094 51.5996h-0.0996094c-120.1 33.8008 -118.4 158.4 -117 224.9s14.2998 120.2 50.9004 156.8c65.7998 60.4004 200.899 52.2998 200.899 52.2998\r\n-c114.601 -0.5 166 -37.7998 178.7 -49.5zM457.9 161c13.2998 107.3 -4.90039 180.5 -40.6006 211.1c-10.7998 9.80078 -57.2002 39 -154.1 39.4004c0 0 -114.7 7.5 -170.4 -43c-31 -30.5996 -41.5 -76.0996 -42.5996 -131.6\r\n-c-1.10059 -55.5 -7.10059 -161.601 94.7002 -189.801c-0.100586 0 -0.100586 0 0 0c0 0 -0.400391 -78.7998 -0.400391 -85.6992c-0.0996094 -10.5 5.7002 -11 11 -5.7002c16.2002 16.2998 68.2002 79 68.2002 79c69.7002 -4.5 125.2 9.2998 131.2 11.2002\r\n-c14 4.5 90.0996 11.0996 103 115.1zM318.9 241.8c0.399414 -8.59961 -12.5 -9.2002 -12.9004 -0.599609c-1.09961 22 -11.4004 32.7002 -32.5996 33.8994c-8.60059 0.5 -7.80078 13.4004 0.699219 12.9004c27.9004 -1.5 43.4004 -17.5 44.8008 -46.2002zM339.2 230.5\r\n-c1 42.4004 -25.5 75.5996 -75.7998 79.2998c-8.5 0.600586 -7.60059 13.5 0.899414 12.9004c58 -4.2002 88.9004 -44.1006 87.7998 -92.5c-0.0996094 -8.60059 -13.0996 -8.2002 -12.8994 0.299805zM386.2 217.1c0.0996094 -8.59961 -12.9004 -8.69922 -12.9004 -0.0996094\r\n-c-0.599609 81.5 -54.8994 125.9 -120.8 126.4c-8.5 0.0996094 -8.5 12.8994 0 12.8994c73.7002 -0.5 133 -51.3994 133.7 -139.2zM374.9 119v-0.200195c-10.8008 -19 -31 -40 -51.8008 -33.2998l-0.199219 0.299805c-21.1006 5.90039 -70.8008 31.5 -102.2 56.5\r\n-c-16.2002 12.7998 -31 27.9004 -42.4004 42.4004c-10.2998 12.8994 -20.7002 28.2002 -30.7998 46.5996c-21.2998 38.5 -26 55.7002 -26 55.7002c-6.7002 20.7998 14.2002 41 33.2998 51.7998h0.200195c9.2002 4.7998 18 3.2002 23.9004 -3.89941\r\n-c0 0 12.3994 -14.8008 17.6992 -22.1006c5 -6.7998 11.7002 -17.7002 15.2002 -23.7998c6.10059 -10.9004 2.2998 -22 -3.7002 -26.5996l-12 -9.60059c-6.09961 -4.89941 -5.2998 -14 -5.2998 -14s17.7998 -67.2998 84.2998 -84.2998c0 0 9.10059 -0.799805 14 5.2998\r\n-l9.60059 12c4.59961 6 15.7002 9.7998 26.5996 3.7002c14.7002 -8.2998 33.4004 -21.2002 45.7998 -32.9004c7 -5.69922 8.60059 -14.3994 3.80078 -23.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vimeo\" unicode=\"&#xf40a;\" \r\n-d=\"M403.2 416c24.7002 0 44.7998 -20.0996 44.7998 -44.7998v-358.4c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v358.4c0 24.7002 20.0996 44.7998 44.7998 44.7998h358.4zM377 267.2\r\n-c1.90039 42.2002 -13.7998 63.7998 -47.0996 64.7002c-44.9004 1.39941 -75.3008 -23.9004 -91.2002 -76c19.8994 8.5 49.2998 10.7998 45.7998 -22.4004c-1 -11.2002 -8.2998 -27.5 -21.7998 -48.9004c-37.7002 -59.3994 -46.9004 -39.5996 -67.6006 91.6006\r\n-c-5.7998 36.8994 -21.2998 54.0996 -46.5 51.7002c-22.2998 -2 -57.8994 -38.4004 -95.1992 -71.2002l15.1992 -19.6006c14.5 10.1006 23 15.2002 25.4004 15.2002c21 0 31.9004 -54.7002 57.4004 -148c13.0996 -34.8994 29 -52.2998 47.8994 -52.2998\r\n-c30.4004 0 67.7002 28.5996 111.7 85.7998c42.5996 54.7002 64.5996 97.9004 66 129.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vnv\" unicode=\"&#xf40b;\" horiz-adv-x=\"640\" \r\n-d=\"M104.9 96c-34.1006 0 -46.4004 30.4004 -46.4004 30.4004l-55.9004 111.5s-10.3994 18.0996 10.4004 18.0996h32.7998c10.4004 0 13.2002 -8.7002 18.7998 -18.0996l36.7002 -74.5s5.2002 -13.1006 21.1006 -13.1006c15.8994 0 21.0996 13.1006 21.0996 13.1006\r\n-l36.7002 74.5c5.59961 9.5 8.39941 18.0996 18.7998 18.0996h32.7998c20.7998 0 10.4004 -18.0996 10.4004 -18.0996l-55.7998 -111.5s-12.2002 -30.4004 -46.4004 -30.4004h-35.0996zM499.9 96c-34.1006 0 -46.4004 30.4004 -46.4004 30.4004l-55.9004 111.5\r\n-s-10.3994 18.0996 10.4004 18.0996h32.7998c10.4004 0 13.2002 -8.7002 18.7998 -18.0996l36.7002 -74.5s5.2002 -13.1006 21.1006 -13.1006c15.8994 0 21.0996 13.1006 21.0996 13.1006l36.7998 74.5c5.60059 9.5 8.40039 18.0996 18.7998 18.0996h32.9004\r\n-c20.7998 0 10.4004 -18.0996 10.4004 -18.0996l-55.9004 -111.5s-12.2002 -30.4004 -46.4004 -30.4004h-35.1992zM337.6 256c34.1006 0 46.4004 -30.4004 46.4004 -30.4004l55.9004 -111.5s10.3994 -18.0996 -10.4004 -18.0996h-32.7998\r\n-c-10.4004 0 -13.2002 8.7002 -18.7998 18.0996l-36.7002 74.5s-5.2002 13.1006 -21.1006 13.1006c-15.8994 0 -21.0996 -13.1006 -21.0996 -13.1006l-36.7002 -74.5c-5.59961 -9.39941 -8.39941 -18.0996 -18.7998 -18.0996h-32.9004\r\n-c-20.7998 0 -10.3994 18.0996 -10.3994 18.0996l55.8994 111.5s12.2002 30.4004 46.4004 30.4004h35.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"whatsapp-square\" unicode=\"&#xf40c;\" \r\n-d=\"M224 325.2c35.2002 0 68.2002 -13.7002 93.2002 -38.7002c24.8994 -24.9004 40.0996 -58 40.0996 -93.2002c0 -72.7002 -60.7002 -131.8 -133.3 -131.8h-0.0996094c-23.7002 0 -46.9004 6.40039 -67.1006 18.4004l-4.7998 2.89941l-49.9004 -13.0996l13.3008 48.5996\r\n-l-3.10059 5c-13.2002 20.9004 -20.2002 45.2002 -20.2002 70.1006c0.100586 72.6992 59.2002 131.8 131.9 131.8zM301.5 136.8c3.2998 9.2002 3.2998 17.2002 2.40039 19.1006c-1 1.59961 -3.60059 2.59961 -7.60059 4.59961s-23.5 11.5996 -27.0996 12.9004\r\n-c-3.60059 1.2998 -6.2998 2 -8.90039 -2c-2.59961 -3.90039 -10.2002 -12.9004 -12.5 -15.5c-2.2998 -2.7002 -4.59961 -3 -8.59961 -1c-23.2998 11.6992 -38.6006 20.7998 -53.9004 47.0996c-4.09961 7 4 6.40039 11.6006 21.5996\r\n-c1.39941 2.60059 0.699219 4.90039 -0.300781 6.90039s-8.89941 21.5 -12.1992 29.4004c-3.2002 7.69922 -6.5 6.69922 -8.90039 6.7998c-2.2998 0.0996094 -5 0.0996094 -7.59961 0.0996094c-2.7002 0 -7 -1 -10.6006 -5c-3.7002 -4 -13.8994 -13.5996 -13.8994 -33.0996\r\n-s14.1992 -38.4004 16.1992 -41c2 -2.60059 28 -42.6006 67.7002 -59.7998c25.1006 -10.8008 34.9004 -11.8008 47.5 -9.90039c7.60059 1.09961 23.4004 9.5 26.7002 18.7998zM400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48\r\n-v352c0 26.5 21.5 48 48 48h352zM223.9 34.7998c87.3994 0 160.1 71.1006 160.1 158.5c0 42.4004 -18 82.2002 -47.9004 112.2c-30 30 -69.7998 46.5 -112.199 46.5c-87.4004 0 -158.5 -71.0996 -158.601 -158.5c0 -28 7.2998 -55.2998 21.2002 -79.2998l-22.5 -82.2002\r\n-l84.0996 22.0996c23.1006 -12.5996 49.2002 -19.2998 75.8008 -19.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"whmcs\" unicode=\"&#xf40d;\" \r\n-d=\"M448 287l-29.0996 -7l-2.2002 -12.0996l20.8994 -18.8008l-10.2998 -20.0996l-28.7998 8.7998l-7.7998 -8.09961l8.7998 -28l-20.4004 -12.1006l-20.6992 21.6006l-11.6006 -3.5l-6.7002 -28.7998l-22.5996 0.299805l-6.7002 28.5l-11.5996 2.89941l-19.4004 -20.3994\r\n-l-19.8994 11.5996l8.09961 26.9004l-7.2002 8.59961l-29.5996 -7.5l-10.4004 18.5l20.1006 19.9004l-2.40039 12.0996l-28.7998 7.5l0.299805 21.7002l28.5 7.7998l2.90039 10.4004l-20.7002 21l11 19.0996l28.5 -7.5l8.09961 8.40039l-8.09961 27.7002l19.3994 11\r\n-l19.7002 -21l12.1006 3.19922l6.19922 26.4004h22.6006l7 -26.4004l10.7002 -3.19922l21.2998 21l19.0996 -11.6006l-7.5 -28.2002l7.2002 -7.5l29 7.5l10.4004 -19.3994l-20.1006 -20.7002l2.2002 -10.4004l28.5 -8.7998v-21.2998zM328.8 241.8\r\n-c31.4004 0 56.7998 25.2998 56.7998 56.7998c0 31.4004 -25.3994 56.8008 -56.7998 56.8008c-31.3994 0 -56.7998 -25.4004 -56.7998 -56.8008c0 -31.3994 25.5 -56.7998 56.7998 -56.7998zM401.1 225.4l46.9004 -14.5v-39.9004l-55.0996 -13.4004l-4.10059 -22.6992\r\n-l38.9004 -35.3008l-19.2002 -37.8994l-54 16.7002l-14.5996 -15.2002l16.6992 -52.5l-38.2998 -22.7002l-38.8994 40.5l-21.7002 -6.59961l-12.6006 -54l-42.3994 0.5l-12.6006 53.5996l-21.6992 5.59961l-36.4004 -38.3994l-37.4004 21.7002l15.2002 50.5l-13.7002 16.0996\r\n-l-55.5 -14.0996l-19.6992 34.7998l37.8994 37.3994l-4.7998 22.8008l-54 14.0996l0.5 40.9004l53.5 14.6992l5.7002 19.7002l-38.9004 39.4004l20.7002 35.7998l53.5996 -14.0996l15.2002 15.6992l-15.2002 52l36.4004 20.7002l36.7998 -39.3994l22.7002 6.09961l11.5996 52\r\n-h42.4004l11.5996 -45.9004l-22.5996 5.90039l-6.2998 1.7002l-3.2998 -5.7002l-11 -19.0996l-3.30078 -5.60059l4.60059 -4.59961l17.2002 -17.4004l-0.300781 -1l-23.7998 -6.5l-6.2002 -1.7002l-0.0996094 -6.39941l-0.200195 -12.9004\r\n-c-47.5 -10.3994 -83.2998 -52.7998 -83.2998 -103.5c0 -58.2998 47.2998 -105.7 105.7 -105.7c50.5 0 92.7002 35.4004 103.2 82.8008l13.1992 -0.200195l6.90039 -0.100586l1.59961 6.7002l5.60059 24l1.89941 0.600586l17.1006 -17.8008l4.7002 -4.89941l5.7998 3.39941\r\n-l20.3994 12.1006l5.80078 3.5l-2 6.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wordpress-simple\" unicode=\"&#xf411;\" horiz-adv-x=\"512\" \r\n-d=\"M256 440c136.7 0 248 -111.2 248 -248c0 -136.7 -111.3 -248 -248 -248s-248 111.3 -248 248c0 136.8 111.3 248 248 248zM33 192c0 -88.2002 51.2998 -164.5 125.7 -200.7l-106.4 291.4c-12.3994 -27.7002 -19.2998 -58.4004 -19.2998 -90.7002zM256 -31\r\n-c26 0 50.9004 4.5 74 12.5996c-0.599609 1 -1.09961 2 -1.59961 3.10059l-68.5 187.8l-66.9004 -194.4c20 -5.89941 41.0996 -9.09961 63 -9.09961zM286.7 296.5l80.7002 -239.6l22.1992 74.2998c9.7002 30.8994 17 53 17 72.0996c0 27.6006 -9.89941 46.7002 -18.3994 61.5\r\n-c-11.2998 18.4004 -21.9004 33.9004 -21.9004 52.2998c0 20.5 15.5 39.6006 37.4004 39.6006c1 0 1.89941 -0.100586 2.89941 -0.200195c-39.6992 36.2998 -92.5996 58.5 -150.6 58.5c-77.9004 0 -146.4 -40 -186.3 -100.5\r\n-c5.2998 -0.200195 10.2002 -0.299805 14.3994 -0.299805c23.3008 0 59.4004 2.7998 59.4004 2.7998c12 0.700195 13.4004 -17 1.40039 -18.4004c0 0 -12.1006 -1.39941 -25.5 -2.09961l81.1992 -241.5l48.8008 146.3l-34.7002 95.2002\r\n-c-12 0.700195 -23.4004 2.09961 -23.4004 2.09961c-12 0.700195 -10.5996 19.1006 1.40039 18.4004c0 0 36.7998 -2.7998 58.7002 -2.7998c23.2998 0 59.3994 2.7998 59.3994 2.7998c12 0.700195 13.4004 -17 1.40039 -18.4004c0 0 -12.1006 -1.39941 -25.5 -2.09961z\r\n-M368.1 -0.700195c66.3008 38.6006 110.9 110.4 110.9 192.7c0 38.7998 -9.90039 75.2002 -27.2998 107c1 -7.09961 1.5 -14.7002 1.5 -22.9004c0 -22.6992 -4.2998 -48.0996 -17 -79.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"xbox\" unicode=\"&#xf412;\" horiz-adv-x=\"512\" \r\n-d=\"M369.9 129.8c44.2998 -54.2998 64.6992 -98.7998 54.3994 -118.7c-7.89941 -15.0996 -56.7002 -44.5996 -92.5996 -55.8994c-29.6006 -9.2998 -68.4004 -13.2998 -100.4 -10.2002c-38.2002 3.7002 -76.8994 17.4004 -110.1 39\r\n-c-27.9004 18.2002 -34.2002 25.7002 -34.2002 40.5996c0 29.9004 32.9004 82.3008 89.2002 142.101c32 33.8994 76.5 73.7002 81.3994 72.5996c9.40039 -2.09961 84.3008 -75.0996 112.301 -109.5zM188.6 304.2c-66.3994 -81.5 -106 -155.4 -120.3 -194.4\r\n-c-9.7998 -26.5 -13.7002 -53 -9.5 -64c2.7998 -7.39941 0.200195 -4.7002 -9.2998 9.90039c-23.2002 35.5 -34.9004 70.3994 -40.5 120.899c-1.90039 16.7002 -1.2002 26.3008 4.2002 60.5c6.7998 42.7002 31.0996 92 60.2998 122.4\r\n-c12.4004 12.9004 13.5 13.2002 28.7002 8.09961c28.2998 -9.5 56.7002 -36.5 86.3994 -63.3994zM500.2 240.7c4.7002 -22.6006 5.09961 -70.9004 0.799805 -93.4004c-3.59961 -18.5 -11.2002 -42.5 -18.5996 -58.7002c-5.5 -12.1992 -19.3008 -35.7998 -25.4004 -43.5\r\n-c-3.09961 -3.89941 -3.09961 -3.89941 -1.40039 4.60059c2.30078 11.2002 -0.599609 31.5996 -7.39941 52.2998c-20.7002 62.9004 -80.5 149 -122.9 202.3c23.2998 21.4004 41 38.2998 64.2998 52.7998c11.8008 7.40039 28.7002 13.9004 36 13.9004\r\n-c7.10059 0 57.7002 -50.2998 74.6006 -130.3zM141.3 405c-14.5996 -0.700195 -14 0.0996094 9.40039 11.2002c81.2002 38.2998 170 27.5996 233.899 -11.7002c-13.3994 0.599609 -43.5 5.90039 -107.399 -25.2002c-11.2002 -5.5 -20.9004 -9.7998 -21.6006 -9.7002\r\n-c-4.59961 0.900391 -66.5996 37.9004 -114.3 35.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yandex\" unicode=\"&#xf413;\" horiz-adv-x=\"256\" \r\n-d=\"M153.1 132.2l-87.3994 -196.2h-63.7002l96 209.8c-45.0996 22.9004 -75.2002 64.4004 -75.2002 141.101c-0.0996094 107.399 68 161.1 148.9 161.1h82.2998v-512h-55.0996v196.2h-45.8008zM198.9 401.5h-29.4004c-44.4004 0 -87.4004 -29.4004 -87.4004 -114.6\r\n-c0 -82.3008 39.4004 -108.801 87.4004 -108.801h29.4004v223.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yandex-international\" unicode=\"&#xf414;\" horiz-adv-x=\"320\" \r\n-d=\"M129.5 -64v166.1l-111 297.9h55.7998l81.7998 -229.7l94.1006 277.7h51.2998l-120.7 -347.8v-164.2h-51.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"apple-pay\" unicode=\"&#xf415;\" horiz-adv-x=\"640\" \r\n-d=\"M116.9 289.5c-7.5 -8.90039 -19.5 -15.9004 -31.5 -14.9004c-1.5 12 4.39941 24.8008 11.2998 32.6006c7.5 9.09961 20.5996 15.5996 31.2998 16.0996c1.2002 -12.3994 -3.7002 -24.7002 -11.0996 -33.7998zM127.8 272.3c6.7998 -0.5 26.2998 -2.5 38.7998 -21.0996\r\n-c-1 -0.799805 -23.1992 -13.5 -22.8994 -40.2998c0.299805 -32 28 -42.6006 28.2998 -42.9004c-0.200195 -0.799805 -4.40039 -15.0996 -14.5 -29.9004c-8.90039 -13 -18 -25.6992 -32.5 -26c-14 -0.199219 -18.7002 8.40039 -34.7998 8.40039\r\n-c-16 0 -21.2002 -8.09961 -34.5 -8.59961c-14 -0.5 -24.6006 13.7998 -33.5 26.7998c-18.2002 26.2998 -32.1006 74 -13.2998 106.3c9.09961 16.0996 25.6992 26.2002 43.5996 26.5c13.7998 0.299805 26.4004 -9.09961 34.7998 -9.09961\r\n-c8.2002 0 23.1006 10.8994 40.5 9.89941zM228.2 308.5h73.2002c37.6992 0 64.0996 -26 64.0996 -64s-26.7998 -64.2998 -65.0996 -64.2998h-41.9004v-66.6006h-30.2998v194.9zM258.5 283v-77.4004h34.7998c26.4004 0 41.4004 14.2002 41.4004 38.8008\r\n-c0 24.5996 -15 38.5996 -41.2998 38.5996h-34.9004zM420.7 112.1c-28.1006 0 -47.7002 16.8008 -47.7998 42c0 25 19 39.4004 54.0996 41.5l37.7998 2.30078v10.7998c0 15.8994 -10.3994 24.5 -28.8994 24.5c-15.2002 0 -26.3008 -7.90039 -28.6006 -19.9004h-27.2998\r\n-c0.900391 25.2002 24.7002 43.6006 56.7998 43.6006c34.6006 0 57.1006 -18.2002 57.1006 -46.3008v-97h-28v23.4004h-0.600586c-8 -15.2998 -25.5996 -24.9004 -44.5996 -24.9004zM428.9 135.2c20.5 0 36 13 36 31.2002v11l-33.6006 -2.10059\r\n-c-18.8994 -1.09961 -28.7998 -8.2002 -28.7998 -20.5c0 -11.7998 10.2998 -19.5996 26.4004 -19.5996zM531.4 60.5996c-2.30078 0 -9.80078 0.300781 -11.6006 0.700195v23.4004c1.90039 -0.200195 6.5 -0.5 8.90039 -0.5c13.3994 0 20.8994 5.7002 25.5 20.2998\r\n-l2.7998 8.59961l-51.2002 141.9h31.6006l35.5996 -115.1h0.599609l35.6006 115.1h30.7998l-53.0996 -149c-12.1006 -34.0996 -26 -45.4004 -55.5 -45.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-apple-pay\" unicode=\"&#xf416;\" horiz-adv-x=\"576\" \r\n-d=\"M302.2 229.6c0 -17.1992 -10.5 -27.0996 -29 -27.0996h-24.2998v54.2002h24.3994c18.4004 0 28.9004 -9.7998 28.9004 -27.1006zM349.7 167c0 8.59961 6.89941 13.5 20.2002 14.4004l23.5 1.5v-7.7002c0 -12.7998 -10.8008 -21.9004 -25.2002 -21.9004\r\n-c-11.2998 0 -18.5 5.40039 -18.5 13.7002zM576 369v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM127.8 250.8c8.40039 -0.700195 16.7998 4.2002 22.1006 10.4004\r\n-c5.19922 6.39941 8.59961 15 7.69922 23.7002c-7.39941 -0.300781 -16.5996 -4.90039 -21.8994 -11.3008c-4.7998 -5.5 -8.90039 -14.3994 -7.90039 -22.7998zM188.4 176.3c-0.200195 0.200195 -19.6006 7.60059 -19.8008 30c-0.199219 18.7002 15.3008 27.7002 16 28.2002\r\n-c-8.7998 13 -22.3994 14.4004 -27.0996 14.7002c-12.2002 0.700195 -22.5996 -6.90039 -28.4004 -6.90039c-5.89941 0 -14.6992 6.60059 -24.2998 6.40039c-12.5 -0.200195 -24.2002 -7.2998 -30.5 -18.6006c-13.0996 -22.5996 -3.39941 -56 9.2998 -74.3994\r\n-c6.2002 -9.10059 13.7002 -19.1006 23.5 -18.7002c9.30078 0.400391 13 6 24.2002 6c11.2998 0 14.5 -6 24.2998 -5.90039c10.2002 0.200195 16.5 9.10059 22.8008 18.2002c6.89941 10.4004 9.7998 20.4004 10 21zM323.8 229.7c0 26.5996 -18.5 44.7998 -44.8994 44.7998\r\n-h-51.2002v-136.4h21.2002v46.6006h29.2998c26.7998 0 45.5996 18.3994 45.5996 45zM413.8 206c0 19.7002 -15.7998 32.4004 -40 32.4004c-22.5 0 -39.0996 -12.9004 -39.7002 -30.5h19.1006c1.59961 8.39941 9.39941 13.8994 20 13.8994c13 0 20.2002 -6 20.2002 -17.2002\r\n-v-7.5l-26.4004 -1.59961c-24.5996 -1.5 -37.9004 -11.5996 -37.9004 -29.0996c0 -17.7002 13.7002 -29.4004 33.4004 -29.4004c13.2998 0 25.5996 6.7002 31.2002 17.4004h0.399414v-16.4004h19.6006v68h0.0996094zM516 237.1h-21.5l-24.9004 -80.5996h-0.399414\r\n-l-24.9004 80.5996h-22.2998l35.9004 -99.2998l-1.90039 -6c-3.2002 -10.2002 -8.5 -14.2002 -17.9004 -14.2002c-1.69922 0 -4.89941 0.200195 -6.19922 0.300781v-16.4004c1.19922 -0.400391 6.5 -0.5 8.09961 -0.5c20.7002 0 30.4004 7.90039 38.9004 31.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fly\" unicode=\"&#xf417;\" horiz-adv-x=\"384\" \r\n-d=\"M197.8 20.2002c12.9004 -11.7002 33.7002 -33.2998 33.2002 -50.7002c0 -0.799805 -0.0996094 -1.59961 -0.0996094 -2.5c-1.80078 -19.7998 -18.8008 -31.0996 -39.1006 -31c-25 0.0996094 -39.8994 16.7998 -38.7002 35.7998c1 16.2002 20.5 36.7002 32.4004 47.6006\r\n-c2.2998 2.09961 2.7002 2.69922 5.59961 3.59961c3.40039 0 3.90039 -0.299805 6.7002 -2.7998zM331.9 380.7c23.8994 -40 27.7998 -73.2998 20.7998 -112.5c-15.2002 -69.9004 -103.601 -166.5 -155.9 -215.7c-1.7002 -1.59961 -1.39941 -1.40039 -3.5 -2.09961\r\n-l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002\r\n-c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153\r\n-c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"node\" unicode=\"&#xf419;\" horiz-adv-x=\"640\" \r\n-d=\"M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078\r\n-c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998\r\n-c-0.599609 -0.300781 -0.899414 -1 -0.899414 -1.60059v-66.7002c0 -0.599609 0.399414 -1.19922 0.899414 -1.5l15.8008 -9.09961c8.59961 -4.2998 13.8994 0.799805 13.8994 5.7998v65.9004c0 0.899414 0.700195 1.7002 1.7002 1.7002h7.2998\r\n-c0.900391 0 1.7002 -0.700195 1.7002 -1.7002v-65.9004c0 -11.5 -6.2002 -18 -17.0996 -18c-3.30078 0 -6 0 -13.3008 3.60059l-15.1992 8.69922c-3.7002 2.2002 -6.10059 6.2002 -6.10059 10.5v66.7002c0 4.2998 2.2998 8.40039 6.10059 10.5l57.7998 33.4004\r\n-c3.7002 2.09961 8.5 2.09961 12.0996 0l57.7998 -33.4004c3.7002 -2.2002 6.10059 -6.2002 6.10059 -10.5v-66.7002c0 -4.2998 -2.2998 -8.39941 -6.10059 -10.5l-57.7998 -33.3994c-1.7002 -1.10059 -3.7998 -1.7002 -6 -1.7002zM363 61.7998\r\n-c0 -12.5996 -10.5 -19.7998 -29 -19.7998c-25.2998 0 -30.5996 11.5996 -30.5996 21.2998c0 1 0.799805 1.7002 1.69922 1.7002h7.5c0.900391 0 1.60059 -0.599609 1.7002 -1.40039c1.10059 -7.59961 4.5 -11.3994 19.7998 -11.3994\r\n-c12.2002 0 17.4004 2.7002 17.4004 9.2002c0 3.69922 -1.5 6.39941 -20.4004 8.2998c-15.7998 1.59961 -25.5996 5 -25.5996 17.7002c0 11.5996 9.7998 18.5996 26.2998 18.5996c18.5 0 27.6006 -6.40039 28.7998 -20.2002\r\n-c0.100586 -0.5 -0.0996094 -0.899414 -0.399414 -1.2998c-0.299805 -0.299805 -0.700195 -0.5 -1.2002 -0.5h-7.5c-0.799805 0 -1.40039 0.5 -1.59961 1.2998c-1.80078 8 -6.2002 10.6006 -18.1006 10.6006c-13.2998 0 -14.7998 -4.60059 -14.7998 -8.10059\r\n-c0 -4.2002 1.7998 -5.39941 19.7998 -7.7998c17.7998 -2.40039 26.2002 -5.7002 26.2002 -18.2002zM417.5 111.9c0 -6.10059 -5 -11.1006 -11.0996 -11.1006c-6.10059 0 -11.1006 5 -11.1006 11.1006c0 6.2998 5.2002 11.0996 11.1006 11.0996\r\n-c6 0.0996094 11.0996 -4.7998 11.0996 -11.0996zM415.7 111.9c0 5.19922 -4.2002 9.2998 -9.40039 9.2998c-5.09961 0 -9.2998 -4.10059 -9.2998 -9.2998c0 -5.2002 4.2002 -9.40039 9.2998 -9.40039c5.2002 0.0996094 9.40039 4.2998 9.40039 9.40039zM411.2 105.7\r\n-h-2.60059c-0.0996094 0.599609 -0.5 3.7998 -0.5 3.89941c-0.199219 0.700195 -0.399414 1.10059 -1.2998 1.10059h-2.2002v-5h-2.39941v12.5h4.2998c1.5 0 4.40039 0 4.40039 -3.2998c0 -2.30078 -1.5 -2.80078 -2.40039 -3.10059\r\n-c1.7002 -0.0996094 1.7998 -1.2002 2.09961 -2.7998c0.100586 -1 0.300781 -2.7002 0.600586 -3.2998zM408.4 114.5c0 1.7002 -1.2002 1.7002 -1.80078 1.7002h-2v-3.5h1.90039c1.59961 0 1.90039 1.09961 1.90039 1.7998zM137.3 257l-0.200195 -95\r\n-c0 -1.2998 -0.699219 -2.59961 -1.7998 -3.2002c-1.09961 -0.700195 -2.59961 -0.700195 -3.7002 0l-36.3994 20.9004c-2.2998 1.2998 -3.7002 3.7998 -3.7002 6.39941v44.4004c0 2.59961 -1.40039 5.09961 -3.7002 6.40039l-15.5 8.89941\r\n-c-1.09961 0.700195 -2.39941 1 -3.7002 1c-1.2998 0 -2.5 -0.299805 -3.69922 -1l-15.5 -8.89941c-2.30078 -1.30078 -3.7002 -3.80078 -3.7002 -6.40039v-44.4004c0 -2.59961 -1.40039 -5 -3.7002 -6.39941l-36.4004 -20.9004\r\n-c-1.19922 -0.700195 -2.59961 -0.700195 -3.69922 0c-1.10059 0.700195 -1.80078 1.90039 -1.80078 3.2002l-0.0996094 95c0 2.59961 1.40039 5.09961 3.7002 6.40039l61.2002 35.2998c1.09961 0.599609 2.19922 1 3.39941 1h0.600586\r\n-c1.19922 -0.100586 2.39941 -0.400391 3.39941 -1l61.2998 -35.2998c2.30078 -1.30078 3.7002 -3.7002 3.7002 -6.40039zM472.5 360.7v-176.4c0 -2.59961 -1.40039 -5.09961 -3.7002 -6.39941l-61.2998 -35.4004c-2.2998 -1.2998 -5.09961 -1.2998 -7.40039 0\r\n-l-61.2998 35.4004c-2.2998 1.2998 -3.7002 3.7998 -3.7002 6.39941v70.7998c0 2.60059 1.40039 5.10059 3.7002 6.40039l61.2998 35.4004c2.30078 1.2998 5.10059 1.2998 7.40039 0l15.2998 -8.80078c1.7002 -1 3.90039 0.300781 3.90039 2.2002v94\r\n-c0 2.7998 3 4.60059 5.5 3.2002l36.5 -20.4004c2.2998 -1.19922 3.7998 -3.69922 3.7998 -6.39941zM426.5 231.8c0 0.700195 -0.400391 1.2998 -0.900391 1.60059l-21 12.1992c-0.599609 0.300781 -1.2998 0.300781 -1.89941 0l-21 -12.1992\r\n-c-0.600586 -0.300781 -0.900391 -0.900391 -0.900391 -1.60059v-24.2998c0 -0.700195 0.400391 -1.2998 0.900391 -1.59961l21 -12.1006c0.599609 -0.299805 1.2998 -0.299805 1.7998 0l21 12.1006c0.599609 0.299805 0.900391 0.899414 0.900391 1.59961v24.2998h0.0996094\r\n-zM636.3 232.5l-36.7002 -21.2998c-2.5 -1.40039 -5.59961 0.399414 -5.59961 3.2002v17.3994c0 1.2998 -0.799805 2.5 -1.90039 3.2002l-19.1992 11.0996c-1.10059 0.700195 -2.60059 0.700195 -3.7002 0l-19.2002 -11.0996\r\n-c-1.2002 -0.700195 -1.90039 -1.90039 -1.90039 -3.2002v-22.2002c0 -1.2998 0.700195 -2.5 1.90039 -3.19922l61.7002 -35.4004c2.5 -1.40039 2.5 -5 0 -6.40039l-36.7998 -20.5c-2.30078 -1.2998 -5.10059 -1.2998 -7.30078 0l-60.8994 34.7002\r\n-c-2.2998 1.2998 -3.7002 3.7002 -3.7002 6.40039v70.7998c0 2.59961 1.40039 5.09961 3.7002 6.40039l61.2998 35.3994c2.2998 1.2998 5.09961 1.2998 7.40039 0l60.8994 -35.3994c2.2998 -1.30078 3.7002 -3.80078 3.7002 -6.40039v-17.0996\r\n-c0 -2.60059 -1.40039 -5.10059 -3.7002 -6.40039zM559 229l11.7998 6.7998c0.400391 0.299805 1 0.299805 1.40039 0l11.7998 -6.7998c0.400391 -0.200195 0.700195 -0.700195 0.700195 -1.2002v-13.5996c0 -0.5 -0.299805 -0.900391 -0.700195 -1.2002l-11.7998 -6.7998\r\n-c-0.400391 -0.299805 -1 -0.299805 -1.40039 0l-11.7998 6.7998c-0.400391 0.200195 -0.700195 0.700195 -0.700195 1.2002v13.5996c0 0.5 0.299805 0.900391 0.700195 1.2002zM304.8 185.5c0 -0.599609 -0.0996094 -1.2002 -0.200195 -1.7002\r\n-c-0.5 -2 -1.7998 -3.7002 -3.59961 -4.7002l-61 -35.1992c-2.2002 -1.30078 -5 -1.40039 -7.40039 0l-61.1992 35.1992c-2.10059 1.2002 -4 3.60059 -4 6.40039v70.4004c0 2.69922 1.59961 5.09961 3.89941 6.39941l61.1006 35.2002\r\n-c2.39941 1.40039 5.2998 1.2002 7.39941 0l61.1006 -35.2002c2.2998 -1.2998 3.89941 -3.7998 3.89941 -6.39941v-70.4004zM230.5 310.4l-0.799805 -0.5h1.09961zM306.7 180.2l-0.400391 0.700195v-0.900391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"osi\" unicode=\"&#xf41a;\" horiz-adv-x=\"512\" \r\n-d=\"M8 181.56c2.2998 135.801 97.3994 232.441 213.799 248.102c138.8 18.5996 255.601 -75.7998 278 -201.101c21.2998 -118.8 -44 -230 -151.6 -274c-9.2998 -3.7998 -14.4004 -1.69922 -18 7.7002c-17.7998 46.2998 -35.5996 92.6328 -53.3994 138.999\r\n-c-3.09961 8.10059 -1 13.2002 7 16.7998c24.2002 11 39.2998 29.4004 43.2998 55.8008c0.469727 3.01562 0.850586 7.94043 0.850586 10.9922c0 36.2061 -29.2764 68.1074 -65.3506 71.207c-39 3.40039 -71.7998 -23.6992 -77.5 -59.6992\r\n-c-5.19922 -33 11.1006 -63.7002 41.9004 -77.7002c9.59961 -4.40039 11.5 -8.60059 7.7998 -18.4004c-17.8994 -46.5996 -35.7998 -93.2324 -53.7002 -139.899c-2.59961 -6.90039 -8.2998 -9.30078 -15.5 -6.5c-52.5996 20.2998 -101.399 61 -130.8 119\r\n-c-24.8994 49.1992 -25.2002 87.6992 -26.7998 108.699zM28.8994 183.461c0.399414 -6.59961 0.599609 -14.3008 1.2998 -22.1006c6.2998 -71.9004 49.5996 -143.5 131 -183.101c3.2002 -1.5 4.39941 -0.799805 5.59961 2.2998c14.9004 39.1006 29.9004 78.2012 45 117.302\r\n-c1.2998 3.2998 0.600586 4.7998 -2.39941 6.69922c-31.6006 19.9004 -47.3008 48.5 -45.6006 86c1 21.6006 9.2998 40.5 23.7998 56.3008c30 32.6992 77 39.7998 115.5 17.5996c25.3174 -14.5977 45.8643 -50.1641 45.8643 -79.3877\r\n-c0 -3.05078 -0.296875 -7.98438 -0.664062 -11.0127c-3.59961 -30.5996 -19.2998 -53.8994 -45.7002 -69.7998c-2.69922 -1.59961 -3.5 -2.89941 -2.2998 -6c15.2002 -39.2002 30.2666 -78.4336 45.2002 -117.7c1.2002 -3.09961 2.40039 -3.7998 5.59961 -2.2998\r\n-c35.5 16.6006 65.2002 40.2998 88.1006 72c34.7998 48.2002 49.0996 101.9 42.2998 161c-13.7002 117.5 -119.4 214.8 -255.5 198c-106.1 -13 -195.3 -102.5 -197.1 -225.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"react\" unicode=\"&#xf41b;\" horiz-adv-x=\"512\" \r\n-d=\"M418.2 270.8c54.3994 -18.7002 93.7998 -48.0996 93.7998 -78.3994c0 -31.7002 -41.7998 -62.6006 -99.5 -81.7002c-3.09961 -1 -6.2002 -2 -9.40039 -2.90039c1.10059 -4.59961 2.10059 -9.09961 3 -13.5c11.4004 -57.5996 2.60059 -104.899 -24.3994 -120.5\r\n-c-26.1006 -15.0996 -68.4004 -0.200195 -111.2 36.6006c-4.59961 4 -9.2002 8.09961 -13.5996 12.3994c-3.5 -3.39941 -7 -6.59961 -10.5 -9.7002c-44.2002 -38.6992 -89.6006 -54.6992 -116.601 -39.0996c-26.2002 15.0996 -34.3994 59.0996 -23.8994 114.6\r\n-c1.19922 6.10059 2.5 12 4 18c-4.60059 1.30078 -9.10059 2.80078 -13.6006 4.30078c-55.5 19 -96.2998 50.2998 -96.2998 81.5c0 30.1992 38.2998 59.3994 91.7002 77.8994c5.89941 2.10059 12.2002 4.10059 18.5996 5.90039\r\n-c-1.39941 5.59961 -2.59961 11.0996 -3.7002 16.7002c-11 56.3994 -3.19922 101.5 23 116.699c27.3008 15.9004 72.9004 -1.09961 118.4 -41.5c2.7998 -2.5 5.59961 -5.09961 8.2998 -7.69922c4 3.89941 8.2002 7.7998 12.5 11.5\r\n-c43.4004 37.7998 86.2998 53.5 112.601 38.3994c27.2998 -15.7998 35.3994 -63.7002 23.0996 -123.3c-0.799805 -3.7002 -1.59961 -7.40039 -2.5 -11.0996c5.40039 -1.60059 10.7998 -3.30078 16.2002 -5.10059zM282.9 355.7c-4 -3.5 -7.80078 -7 -11.7002 -10.7002\r\n-c15.3994 -16.7002 29.5996 -34.5 42.5996 -53.0996c22.6006 -2 45.1006 -5.60059 67.2998 -10.6006c0.900391 3.2998 1.60059 6.60059 2.30078 10c10.5996 51.5 4.09961 90.7002 -12.8008 100.4c-15.7998 9.09961 -50.5 -3.60059 -87.6992 -36zM167.2 140.5\r\n-c-5 8.59961 -9.7002 17.2998 -14.2998 26.0996c-6.40039 -15.1992 -11.9004 -30.0996 -16.3008 -44.5c15.3008 -3.2998 30.8008 -5.7998 46.4004 -7.5c-5.5 8.5 -10.7002 17.2002 -15.7998 25.9004zM136.9 260.8c4.39941 -14.0996 9.69922 -28.7002 16 -43.5996\r\n-c4.5 8.7998 9.2998 17.5 14.1992 26c4.90039 8.59961 10.1006 17.0996 15.4004 25.3994c-15.9004 -2 -31.2002 -4.59961 -45.5996 -7.7998zM164.3 191.9c6.7002 -13.8008 13.7998 -27.3008 21.5 -40.6006s15.9004 -26.2998 24.6006 -39\r\n-c14.6992 -0.899414 29.8994 -1.39941 45.5996 -1.39941s31.2002 0.5 46.0996 1.59961c8.5 12.7998 16.6006 25.7002 24.2002 39c7.7002 13.4004 14.9004 27 21.6006 40.7998c-6.80078 13.7002 -14 27.2002 -21.7002 40.4004s-15.7998 26.0996 -24.2998 38.7002\r\n-c-14.9004 1.09961 -30.3008 1.69922 -45.9004 1.69922s-30.9004 -0.599609 -45.9004 -1.69922c-8.59961 -12.7002 -16.7998 -25.6006 -24.3994 -38.9004c-7.60059 -13.2998 -14.7998 -26.7998 -21.4004 -40.5996zM344.9 140.7c-5 -8.60059 -10.1006 -17.2002 -15.5 -25.6006\r\n-c15.7998 1.80078 31.5 4.5 47 8c-4.90039 15.1006 -10.5 29.8008 -16.9004 44.3008c-4.7002 -9 -9.5 -17.9004 -14.5996 -26.7002zM359.3 217.2c6.10059 14.2002 11.5 28.5996 16.1006 43.3994c-14.4004 3.30078 -29.8008 6 -45.9004 8\r\n-c5.2998 -8.2998 10.4004 -16.6992 15.2998 -25.1992c5 -8.60059 9.7998 -17.4004 14.5 -26.2002zM256.2 329.7c-10 -10.9004 -20.1006 -22.9004 -29.9004 -35.7998c19.7998 0.899414 39.7002 0.899414 59.5 0c-9.2002 12.3994 -19.0996 24.3994 -29.5996 35.7998zM140.2 391\r\n-c-15.7998 -9.09961 -22 -45.5996 -12.6006 -94c1.10059 -5.2002 2.2002 -10.4004 3.5 -15.5c22.2002 4.90039 44.6006 8.40039 67.2002 10.4004c13.1006 18.5996 27.4004 36.3994 42.9004 53.0996c-2.60059 2.40039 -5.10059 4.7998 -7.60059 7\r\n-c-39.2998 34.7998 -76.5996 48.7998 -93.3994 39zM115.7 127.4c6.89941 22 15.2002 43.5996 24.7998 64.5c-9.5 20.5996 -17.7002 41.8994 -24.5 63.5996c-5.7998 -1.7002 -11.5996 -3.5 -17.2998 -5.5c-45.6006 -15.9004 -77.2002 -39.2998 -77.2002 -57.5996\r\n-c1.90039 -12.1006 8.7002 -22.9004 18.7998 -29.9004c17.5 -13.9004 41.7002 -24.5 63 -31.2002c4.10059 -1.39941 8.2002 -2.7002 12.4004 -3.89941zM232.3 29.4004c3.2002 2.7998 6.40039 5.7998 9.60059 8.89941c-15.5 16.7998 -30 34.7002 -43.2002 53.4004\r\n-c-22.9004 1.7002 -45.5 5 -67.9004 9.7998c-1.39941 -5.5 -2.59961 -11.0996 -3.7002 -16.7002c-9 -47.5 -2.39941 -82.7998 13.5 -92c11.4004 -4.5 24.2002 -4 35.3008 1.2998c20.7998 8.2002 39.8994 20.2002 56.3994 35.3008zM256.8 53.7002\r\n-c10.5 11.5996 20.4004 23.7002 29.6006 36.3994c-10 -0.5 -20.1006 -0.699219 -30.4004 -0.699219c-10 0 -19.9004 0.199219 -29.5 0.599609c9.90039 -13.0996 20.0996 -25.2998 30.2998 -36.2998zM387.5 23.7002c3.2002 22.2002 2.40039 44.7002 -2.5 66.2998\r\n-c-0.799805 4 -1.7002 8.09961 -2.7002 12.2002c-22.5 -5.10059 -45.2998 -8.60059 -68.2002 -10.5c-12.7998 -18.7998 -26.8994 -36.7002 -42.1992 -53.6006c4.2998 -4 8.5 -7.89941 12.6992 -11.5c36.6006 -31.3994 70.5 -43.3994 86.4004 -34.1992\r\n-c9.59961 7.69922 15.5996 19.0996 16.5 31.2998zM405.7 131.2c49.8994 16.5 84.7998 41.7998 84.7998 61.3994c0 18.2002 -32.7002 42 -79.2998 58c-4.7998 1.60059 -9.7998 3.2002 -15 4.7002c-6.7998 -21.5 -14.9004 -42.5 -24.5 -62.8994\r\n-c9.89941 -20.7002 18.5 -42 25.5 -63.8008c2.89941 0.800781 5.7002 1.7002 8.5 2.60059zM256 146.2c-25.2998 0 -45.7998 20.5 -45.7998 45.7998s20.5 45.7998 45.7998 45.7998s45.7998 -20.5 45.7998 -45.7998s-20.5 -45.7998 -45.7998 -45.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"autoprefixer\" unicode=\"&#xf41c;\" horiz-adv-x=\"640\" \r\n-d=\"M318.4 432l164.1 -480h-77.5l-25.2002 81.4004h-119.5l-25.3994 -81.4004h-77.5zM278.1 90.0996h83.6006l-40.9004 130.4h-1.5zM640 43l-158.5 -9.5l-19.4004 56.5l167.9 -15.5996zM177.9 90l-19.4004 -56.4004l-158.5 9.40039l10 31.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"less\" unicode=\"&#xf41d;\" horiz-adv-x=\"640\" \r\n-d=\"M612.7 229c0 -11 6.7998 -22.5996 27.2998 -23.2998v-27.2998c-20.5 -1 -27.2998 -12.6006 -27.2998 -23.6006c0 -20.3994 3.2002 -32 3.2002 -54.5996c0 -34.2002 -12.7002 -45.2002 -40.5 -45.2002h-20.5v25.2002h6.2998v0.5c13.5996 0 17.2998 4.7002 17.2998 22.5996\r\n-c0 17.2998 -1.59961 32.6006 -1.59961 51.5c0 24.2002 7.7998 33.6006 23.5996 37.2998v1.60059c-15.7002 3.7002 -23.5996 13.0996 -23.5996 37.2998c0 18.9004 1.59961 35.2002 1.59961 51.5c0 17.4004 -3.09961 22.0996 -17.2998 22.0996h-6.2998v24.2002h20.5\r\n-c27.8994 0 40.5 -11 40.5 -45.2002c0 -22 -3.2002 -34.0996 -3.2002 -54.5996zM507.1 197c20.5 -6.7998 43 -18.9004 43 -47.7998c0 -28.9004 -22.5996 -51 -64.5996 -51c-20 0 -44.0996 9 -59.9004 22.0996l21 30.5c14.2002 -11 27.4004 -16.2998 40.5 -16.2998\r\n-c14.2002 0 20.5 5.2002 20.5 13.0996c0 10.5 -15.7998 15.8008 -32.0996 22.1006c-18.9004 7.2998 -41.5 20.5 -41.5 46.2002c0 28.8994 24.2002 49.3994 59.9004 49.3994c24.1992 0 42.0996 -10.5 55.1992 -20.5l-21 -27.7998c-11.5 8.40039 -22 13.0996 -33.5996 13.0996\r\n-s-17.9004 -4.69922 -17.9004 -12.5996c0 -10.5 14.7002 -14.2002 30.5 -20.5zM148.2 137.6c1.59961 0 3.09961 0 6.2002 0.800781l5.2998 -34.2002c-5.7002 -2.10059 -13.6006 -3.7002 -23.6006 -3.7002c-32.0996 0 -43.0996 21 -43.0996 53.0996v150.801h-14.0996\r\n-c-13.6006 0 -17.3008 -4.80078 -17.3008 -22.1006s1.60059 -32.5996 1.60059 -51.5c0 -24.2002 -7.7998 -33.5996 -23.6006 -37.2998v-1.59961c15.7002 -3.7002 23.6006 -13.1006 23.6006 -37.3008c0 -19.3994 -1.60059 -34.1992 -1.60059 -51.5\r\n-c0 -17.2998 4.2002 -22.5996 17.3008 -22.5996h6.2998v-24.2002h-20.5c-27.9004 0 -40.5 11 -40.5 45.2002c0 22.5996 3.2002 34.2002 3.2002 53.5996c0 11 -6.80078 22.6006 -27.3008 23.1006v27.2998c20.5 1 27.3008 12.5996 27.3008 23.5996\r\n-c0 19.4004 -3.2002 32 -3.2002 54.6006c0 34.2002 12.5996 45.2002 41 45.2002h74.5996v-178.2c0 -9.90039 4.7002 -13.1006 8.40039 -13.1006zM379.9 197c20.5 -6.7998 43.0996 -18.9004 43 -47.7998c0 -28.9004 -22.6006 -51 -64.6006 -51\r\n-c-20 0 -44.0996 9 -59.8994 22.0996l20.5 30.5c14.1992 -11 27.3994 -16.2998 40.5 -16.2998c14.1992 0 20.5 5.2002 20.5 13.0996c0 10.5 -15.8008 15.8008 -32.1006 22.1006c-18.8994 7.2998 -41.5 20.5 -41.5 46.2002c0 28.8994 24.2002 49.3994 59.9004 49.3994\r\n-c24.2002 0 42.0996 -10.5 55.2002 -20.5l-21 -27.7998c-11.5 8.40039 -22 13.0996 -33.6006 13.0996c-11.5996 0 -17.8994 -4.69922 -17.8994 -12.5996c0 -10.5 14.6992 -14.2002 31 -20.5zM224.9 265.8c44.0996 0 67.2998 -33.0996 66.6992 -75.7002\r\n-c0 -8.39941 -1.09961 -15.6992 -1.59961 -19.3994h-95.2002c4.2002 -24.2002 20.5 -34.2002 41.5 -34.2002c11.6006 0 22.6006 3.2002 34.2002 10l15.7998 -27.7998c-16.2998 -11.1006 -37.2998 -17.9004 -56.2002 -17.9004c-45.0996 0 -79.2998 30.5 -79.2998 82.5\r\n-c-1 50.4004 35.7002 82.5 74.1006 82.5zM194.9 199.6h56.7998c0 17.9004 -7.40039 31 -26.2998 31c-14.7002 0 -27.3008 -10 -30.5 -31z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sass\" unicode=\"&#xf41e;\" horiz-adv-x=\"640\" \r\n-d=\"M301.84 69.0801c-0.299805 -0.599609 -0.599609 -1.08008 0 0zM550.97 156.08c57.9092 0.300781 90.5703 -37.0801 88.9707 -71.0801c-1.10059 -26.9004 -25.6904 -37.9004 -30.29 -38.7002c-3.30078 -0.599609 -5.10059 -0.700195 -5.60059 1.90039\r\n-c-0.299805 1.7998 0.900391 2.7002 4.7998 5.09961c3.90039 2.40039 15.6006 10.5 17.7002 25c2.10059 14.5 -8.7998 49.2998 -64.4795 55.7998c-26 3 -46.3906 -0.599609 -62.0898 -7.19922c2.89941 -7.60059 5.09961 -15.5 5.39941 -23.4004\r\n-c0.799805 -17.5 -11.29 -30.4004 -23.79 -39.5996c-5.48535 -3.98535 -15.1572 -8.95801 -21.5898 -11.1006c-5.2002 -2.2002 -12.2002 -4.5 -17.0996 -3.5c-10.9004 2.2002 -16.7002 11.7998 -9.30078 33.1006c4 11.5 15.5 29 34.0908 44.0996\r\n-c-4.30078 8.7002 -8.99023 17.5996 -11.3906 25.7002c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998c0 0 -15.2998 -31.7197 -35.0898 -60.6201c-1.09961 -1.7002 -2.2998 -3.39941 -3.39941 -5c3.7998 -9 6.89941 -18.5996 7.2998 -28.2002\r\n-c0.700195 -17.3994 -6.90039 -30.5996 -19.4004 -39.7998c-5.16211 -3.70605 -14.208 -8.45508 -20.1895 -10.5996c-3.90039 -1.7998 -12 -4.60059 -23.5 -5.40039c-6.29004 -0.5 -12.29 -0.0996094 -15.6904 2.5c-4.59961 3.40039 -5.2002 7.7998 -2.7998 13.7002\r\n-c2 5 17.21 22.4004 30 37.5996c3.5 4.2002 6.90039 8.5 9.90039 12.5c-0.0498047 0.0449219 -0.09375 0.134766 -0.100586 0.200195c0 0 2.2998 3 6.10059 8.2002c-4.7002 10.0996 -10.6006 20.5 -13.4004 30c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998\r\n-c0 0 -15.4902 -39.7002 -31.6895 -71.5c-12.4902 -24.5996 -20.79 -39.5 -24.5908 -46v-0.299805s-0.5 -0.900391 -1.5 -2.40039c-0.5 -0.799805 -0.699219 -1.19922 -0.699219 -1.19922v0.0996094c-4.20996 -6.2002 -13.6104 -18.2998 -23 -18.2998\r\n-c-25.7002 0 -16.3008 52.2002 -16.3008 52.2002s-7.5 -19.3008 -16 -35.9004c-6.88965 -13.5996 -13.0898 -25 -26.8896 -25c-3.90039 0 -10.1904 0.0996094 -15.3896 5c-11.8008 11.2002 -20.9004 39.7002 -19.1006 61.7002c1.5 18.7998 4.40039 31.7998 8.40039 42.5996\r\n-c-7.10059 -3.89941 -15.2002 -8.39941 -23.4902 -13.2998c-4.2998 -2.5 -8.59961 -5 -12.7998 -7.5c0.0996094 -0.299805 0.299805 -0.5 0.400391 -0.799805c10.5996 -20.4004 13.3896 -65.2002 -9.60059 -99.5s-65.7803 -55.2002 -107.57 -43.6006\r\n-c-13.3896 3.80078 -33.79 31.6006 -16.29 70.4004c15.4902 34.2002 77.3809 66.5996 93.6709 74.7002c1.39941 0.799805 2.89941 1.59961 4.5 2.5c-32.4902 28.3994 -113.671 66.7998 -125.061 125.7c-3.2002 16.5996 4.58984 56.2998 53.2803 101.899\r\n-c40.9902 38.2998 97.9697 67.7002 150.66 86.4004c88.4297 31.3994 181.949 12.8994 196.31 -43.5c14.1006 -55.5 -33.9902 -121.8 -95.7695 -145.601c-54.9902 -21.2998 -100.471 -17.8994 -119.17 -11.7998c-21.29 7 -33.79 21 -36.79 28.9004\r\n-c-1.2002 3.09961 -3.30078 8.2998 0 10.0996c2 1.10059 2.7998 0.799805 8.09961 -5.09961c5.09961 -5.60059 25.4902 -20.6006 64.2803 -16.2998c101.77 11.3994 163.06 90.5 143.66 133c-13.4902 29.7998 -91.8408 43.1992 -189.841 -5.60059\r\n-c-119.569 -59.5996 -126.069 -108.7 -127.069 -127.399c-2.7998 -51.3008 63.2793 -78.3008 99.0693 -116.5c0.5 -0.5 0.900391 -1 1.40039 -1.5c6.7002 3.69922 13.7998 7.59961 20.7002 11.3994c18 9.90039 35.0996 19.2002 43 23.5\r\n-c12.5801 18.2998 38.1797 38.5 56.5801 38.5c29.4893 0 19.3896 -42.3994 19.3896 -42.3994s0.599609 2 1.40039 2c0.799805 0 4.09961 5.5 13.1992 2.19922c9.40039 -3.5 7.2002 -10 7.30078 -10.6992c0.0996094 -1.30078 -11 -38.9004 -15.7002 -63.1006\r\n-c-2.2002 -11.5 -0.900391 -19.8994 -0.299805 -19.8994c0.899414 0 2.7998 2.89941 4.5 6.09961v0.0996094s1.2998 2.40039 3.5 6.7002c0 0.200195 -0.200195 -0.299805 -0.5 -0.799805c0.199219 0.400391 0.5 0.900391 0.899414 1.7002\r\n-c2.60059 5 6.2002 12.3994 10.4004 21.5996c8.18945 18.1006 39.4795 87.7002 42.0801 95.4004c2.59961 7.7002 4 15.7002 5.2998 19.0996c1.2998 3.40039 12.4102 6 25.2998 5.90039c12.8906 -0.100586 14.1904 -5.60059 14.29 -6.7002\r\n-c0.100586 -1.09961 -6.2002 -16.4004 -7.59961 -27.2002c-1.40039 -10.7998 -0.100586 -16.2002 1.09961 -25.2998c0.799805 -6 4.5 -13.5 8.90039 -22c13.2998 21.7998 36.79 63.5996 39.0898 75.2998c1.03613 5.38965 3.41016 13.9473 5.2998 19.1006\r\n-c1.29004 3.39941 12.3896 6 25.29 5.89941c12.9004 -0.0996094 14.2002 -5.59961 14.2998 -6.7002c0.100586 -1.09961 -6.2002 -16.3994 -7.59961 -27.1992c-1.40039 -10.8008 -0.100586 -16.2002 1.09961 -25.3008c1 -7.7998 7.10059 -18.1992 13 -30.0996\r\n-c15.1289 7.45215 41.0938 13.5 57.958 13.5h0.0419922zM121.79 11.3799c19.4004 21.0996 27.3896 47.9199 19.0996 78.3203c-1 -0.600586 -2 -1.10059 -2.89941 -1.7002c0 0 -0.400391 -0.200195 -1.2002 -0.700195c-4.7998 -2.89941 -8.7002 -5.2998 -11.4004 -6.89941\r\n-c-11.7998 -7.40039 -29.5898 -19.4004 -43.3896 -32.4004c-22.6904 -21.4199 -27.3896 -51 -15.4902 -57.9199c11.0898 -6.40039 36.8906 1.2002 55.2803 21.2998zM256.15 102.78c4 9.7998 19.6992 53.2998 16.1992 59.2002c-2.59961 4.5 -13.6992 0.899414 -23.79 -10.4004\r\n-c-6.2998 -7 -16.8994 -25 -21.8994 -40.0996c-9.90039 -30 -5.60059 -60.5 1.39941 -62.3008c8.2002 -2.09961 21.6904 37.9004 28.0908 53.6006zM367.15 49.7803c7.7998 4.7998 24.96 16.8994 25.0898 34.7998c0 0.599609 -0.100586 1.09961 -0.100586 1.59961\r\n-c-3.98926 -5.19922 -7.68945 -9.89941 -10.8896 -13.8994c-5.5 -6.7998 -19.4004 -21.7002 -19.4004 -21.7002s-2 -1.90039 -1.09961 -2.40039c1.2002 -0.699219 3.7002 0.200195 6.40039 1.60059zM452.73 69.2803c9.68945 3.5 25.7998 11.8994 25.8994 34.3994\r\n-c-0.0673828 3.06152 -0.918945 7.90039 -1.89941 10.8008c-10.4102 -9.2002 -16.4004 -18.8008 -19 -24.5c-6.7002 -14.6006 -7 -19.3008 -5 -20.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vuejs\" unicode=\"&#xf41f;\" \r\n-d=\"M356.9 383.7h91.0996l-224 -383.7l-224 383.7h176l48 -88.6006l56 88.6006h76.9004zM55.7002 351.7l168.3 -288.2l168.2 288.2h-53.7998l-114.4 -198.2l-114.5 198.2h-53.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angular\" unicode=\"&#xf420;\" \r\n-d=\"M185.7 179.9l38.0996 91.5996l38.1006 -91.5996h-76.2002zM223.8 416l207.8 -74.4004l-31.7998 -275.699l-176 -97.9004l-176 97.9004l-31.7998 275.699zM354 74.2002l-130.2 292.3l-130.1 -292.3h48.7002l26.1992 65.3994h110.601l26.2002 -65.3994h48.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"aviato\" unicode=\"&#xf421;\" horiz-adv-x=\"640\" \r\n-d=\"M107.2 164.5l-19 41.7998h-52.1006l-19 -41.7998h-17.0996l62.2002 131.4l62.2002 -131.4h-17.2002zM62.2002 262.6l-19.6006 -42.5h39.2002zM174.9 160.2l-62.2002 131.399h17.0996l45.1006 -96l45.0996 96h17zM255.5 164.5v127.1h15.5v-127.1h-15.5zM464.6 280.1\r\n-v-115.6h-17.2998v115.6h-41.2002v11.5h99.6006v-11.5h-41.1006zM640 229.2c0 -9.2002 -1.7002 -17.7998 -5.09961 -25.7998c-3.40039 -8 -8.2002 -15.1006 -14.2002 -21.1006s-13.1006 -10.7998 -21.1006 -14.2002c-8 -3.39941 -16.5996 -5.09961 -25.7998 -5.09961\r\n-s-17.7998 1.7002 -25.7998 5.09961c-8 3.40039 -15.0996 8.2002 -21.0996 14.2002s-10.8008 13 -14.2002 21.1006c-3.40039 8 -5.10059 16.5996 -5.10059 25.7998s1.7002 17.7998 5.10059 25.7998c3.39941 8 8.2002 15.0996 14.2002 21.0996s13 8.40039 21.0996 11.9004\r\n-c8 3.40039 16.5996 5.09961 25.7998 5.09961s17.7998 -1.69922 25.7998 -5.09961s15.1006 -5.7998 21.1006 -11.9004c6 -6 10.7002 -13.0996 14.2002 -21.0996c3.39941 -8 5.09961 -16.5996 5.09961 -25.7998zM624.5 229.2c0 7.2998 -1.2998 14 -3.90039 20.2998\r\n-c-2.59961 6.2998 -6.19922 11.7002 -10.7998 16.2998c-4.59961 4.60059 -10 8.2002 -16.2002 10.9004c-6.19922 2.7002 -12.7998 4 -19.7998 4s-13.5996 -1.2998 -19.7998 -4s-11.5996 -6.2998 -16.2002 -10.9004c-4.59961 -4.59961 -8.2002 -10 -10.7998 -16.2998\r\n-s-3.90039 -13.0996 -3.90039 -20.2998c0 -7.2998 1.30078 -14 3.90039 -20.2998c2.59961 -6.30078 6.2002 -11.7002 10.7998 -16.3008c4.60059 -4.59961 10 -8.19922 16.2002 -10.8994s12.7998 -4 19.7998 -4s13.6006 1.2998 19.7998 4\r\n-c6.2002 2.7002 11.6006 6.2998 16.2002 10.8994c4.60059 4.60059 8.2002 10 10.7998 16.3008c2.60059 6.2998 3.90039 13.0996 3.90039 20.2998zM529.7 132.5c6 -0.900391 10.5 -6 10.7002 -12.2998c0 -6.7998 -5.60059 -12.4004 -12.4004 -12.4004\r\n-s-12.4004 5.60059 -12.4004 12.4004c0 6.2002 4.60059 11.2998 10.5 12.2002v5.7998l-80.2998 -9v-5.40039c5.60059 -1.09961 9.90039 -6.09961 9.90039 -12.0996c0 -6.7998 -5.60059 -10.2002 -12.4004 -10.2002s-12.3994 3.40039 -12.3994 10.2002\r\n-c0 5.89941 4.19922 11 9.89941 12.0996v4.90039l-28.3994 -3.2002v-23.7002h5.89941v-13.7998h-5.89941v6.59961h-5v-6.59961h-5.90039v13.7998h5.90039v23.2002l-38.3008 -4.2998c-8.09961 -11.5 -19 -13.6006 -19 -13.6006l0.100586 -6.69922l5.09961 -0.200195\r\n-l0.100586 -12.1006h-4.10059l-0.0996094 5h-5.2002l-0.0996094 -5h-4.10059l0.100586 12.1006l5.09961 0.200195l0.0996094 6.69922s-10.8994 2.2002 -19 13.6006l-38.2998 4.2998v-23.2002h5.90039v-13.7998h-5.90039v6.59961h-5v-6.59961h-5.89941v13.9004h5.89941\r\n-v23.6992l-28.3994 3.2002v-4.89941c5.59961 -1.10059 9.89941 -6.10059 9.89941 -12.1006c0 -6.7998 -5.59961 -10.2002 -12.3994 -10.2002c-6.80078 0 -12.4004 3.40039 -12.4004 10.2002c0 5.90039 4.2002 11 9.90039 12.1006v5.39941l-80.3008 9v-5.7998\r\n-c5.90039 -0.900391 10.5 -6 10.5 -12.2002c0 -6.7998 -5.59961 -12.3994 -12.3994 -12.3994s-12.4004 5.59961 -12.4004 12.3994c0 6.2002 4.60059 11.2998 10.5 12.2002v6.2998l-88.8994 10l242.899 -13.5c-0.599609 2.2002 -1.09961 4.60059 -1.39941 7.2002\r\n-c-0.300781 2.09961 -0.5 4.2002 -0.600586 6.5l-64.7998 8.09961l64.9004 -1.89941c0 0.399414 0 0.799805 0.0996094 1.09961c2.7998 17.2002 25.5 23.7002 25.5 23.7002l1.09961 26.4004h-23.5996l-19 -41.8008h-17.0996l62.1992 131.4l62.2002 -131.4h-17.0996\r\n-l-19 41.8008h-23.7998l1.09961 -26.3008s22.7002 -6.5 25.5 -23.6992c0 -0.400391 0.0996094 -0.700195 0.0996094 -1.10059l64.9004 1.90039l-64.7998 -8.10059c-0.100586 -2.2998 -0.299805 -4.5 -0.600586 -6.5c-0.299805 -2.59961 -0.799805 -5 -1.39941 -7.19922\r\n-l242.899 13.3994l-88.8994 -10v-6.2998zM328.9 220.1h17.8994l1.7002 40.3008l1.7002 -40.3008h17.8994l-19.5996 42.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ember\" unicode=\"&#xf423;\" horiz-adv-x=\"640\" \r\n-d=\"M639.9 193.4c1.09961 -10.8008 -5.30078 -14.3008 -5.30078 -14.3008s-26.5996 -19.5996 -47 -13.6992c-20.3994 5.89941 -21.5 43.1992 -21.5 43.1992h-1.89941l-20.7002 -57.1992s-8.2998 -27.9004 -20.7002 -22.8008\r\n-c-12.3994 5.10059 -12.0996 18.6006 -12.0996 18.6006s-19.2998 -21.2998 -54.7998 -18.6006c-31.1006 2.30078 -41.1006 26.7002 -41.1006 26.7002s-20.7998 -14.3994 -79.0996 -25.8994c-26.1006 -2.90039 -44.6006 12.8994 -44.6006 12.8994\r\n-c-2.39941 -2.39941 -18 -10.2002 -18 -10.2002s-22.2998 -10.2998 -30.8994 5.30078c-8.60059 15.5996 -3 63.6992 -3 63.6992h-1.60059s-12.8994 -26.2998 -19.5996 -49.8994c-6.7002 -23.6006 -15 -21.2002 -15 -21.2002s-15.2998 -1.40039 -18.7998 11.4004\r\n-c-3.5 12.8994 5.59961 59.6992 5.59961 59.6992l-1.2998 -0.299805s-0.799805 1.40039 -12.5996 -23.5996c-20.1006 -48.9004 -24.9004 -50 -36.5 -47.9004c-11.6006 2.10059 -12.1006 16.7002 -12.1006 16.7002l-15.8994 -8.7998s-38.6006 -16.6006 -58.8008 -1.2998\r\n-c-13.3994 10.1992 -18 22.1992 -19.5996 29.6992c0 0 -17 1.80078 -28.0996 6.10059c-11.1006 4.2998 0.0996094 18.2998 0.0996094 18.2998s3.5 5.2998 10 0s18.7998 -2.90039 18.7998 -2.90039c1 8.5 2.5 19.7002 7.7998 31.5c11 24.7002 27.6006 33 41.3008 33.3008\r\n-c13.6992 0.199219 23.3994 -3.5 31.6992 -15.3008c18.6006 -45.8994 -49.3994 -69.1992 -49.3994 -69.1992s-1.7998 -12.1006 16.7002 -11.8008c18.5996 0.200195 46.7998 20.4004 46.7998 20.4004c1.2998 15.4004 12.0996 63.5 15 70.7002\r\n-c2.89941 7.2002 14.2002 5.89941 14.2002 5.89941s8.89941 1.90039 10.5 -7.5c1.69922 -9.39941 -6.40039 -47.5996 -6.40039 -47.5996l1.2998 -1.59961c0.799805 3.69922 20.4004 36.5 20.4004 36.5s11.2998 19.5996 28.5 18.7998s-0.799805 -53.5 -0.799805 -53.5\r\n-l1.2998 -1.60059l1.2998 2.40039c2.2002 5.90039 27.7002 44.5996 27.7002 44.5996s9.59961 11.3008 18.5 8.60059c8.7998 -2.60059 9.39941 -6.7002 9.89941 -14.2002s-7 -52.0996 -7 -52.0996s-4.2998 -29.2002 5.40039 -28.7002s20.2002 10.7002 20.2002 10.7002\r\n-s7.5 57.5996 12.5996 105.1c5.10059 47.5 27.1006 79.5 27.1006 79.5s6.5 10 23.5 16.7002c11.1992 4 23.3994 1.2998 29.1992 -23.1006c9.5 -41 -23.2998 -87.8994 -36.8994 -105.199c5.89941 5.7998 15.7998 12.0996 27.2002 5.2998\r\n-c40.2998 -25.2998 7.2998 -80.9004 7.2998 -80.9004c11.7998 3.7998 33 18 33 18s0.5 6.10059 0.700195 7.5c7.19922 41.2998 32 56.2002 36.5996 59.7002c4.7998 3.59961 47.0996 19.7998 49 -24s-52.9004 -59.0996 -52.9004 -59.0996s4.80078 -12.6006 25 -9.40039\r\n-c20.2002 3.2002 43.3008 22.7998 43.3008 22.7998c0.799805 18 12.5996 61 15 67.2002c2.39941 6.2002 17.1992 6.5 18.7998 3c2.2002 -7 0.299805 -37.5996 0.299805 -37.5996l1.59961 0.5c5.90039 17.5 18.3008 31.1992 18.3008 31.1992s9.89941 9.7002 18 7.30078\r\n-c8.09961 -2.30078 5.09961 -30.4004 5.09961 -30.4004s-4.2998 -30.7002 9.40039 -32c13.6992 -1.40039 29.2998 10.7002 29.2998 10.7002s9.59961 3.89941 10.7002 -6.7998zM61.9004 188.1c0 0 6.19922 -1.89941 19.8994 7.60059\r\n-c13.7002 9.39941 16.4004 24.3994 9.10059 31.3994c-7.2002 6.90039 -28.2002 -7 -29 -39zM334.7 311.9c0 0 -15.9004 -54.5 -16.4004 -70.7002c0 0 44.5 72 40 96.2002c-4.5 24.1992 -23.5996 -25.5 -23.5996 -25.5zM357.5 173.5\r\n-c12.5996 33.0996 -3.59961 45.5 -3.59961 45.5s-23.4004 12.9004 -33.3008 -20.2002c-9.89941 -33.0996 -6.39941 -44.8994 -6.39941 -44.8994s30.7002 -13.4004 43.2998 19.5996zM442.1 188.1c0 0 15.7002 -1.09961 26.4004 14.2002s1.2998 25.5 1.2998 25.5\r\n-s-8.59961 11.1006 -19.5996 -9.09961c-11.1006 -20.1006 -8.10059 -30.6006 -8.10059 -30.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"font-awesome-flag\" unicode=\"&#xf425;\" \r\n-d=\"M444.373 88.5762c0 -7.16797 -6.14453 -10.2402 -13.3125 -13.3125c-28.6719 -12.2881 -59.3916 -23.5518 -92.1592 -23.5518c-46.0801 0 -67.584 28.6719 -122.88 28.6719c-39.9365 0 -81.9209 -14.3359 -115.713 -29.6953\r\n-c-2.04785 -1.02441 -4.0957 -1.02441 -6.14355 -2.04883v-77.8232c0 -21.4053 -16.1221 -34.8164 -33.792 -34.8164c-19.4561 0 -34.8164 15.3604 -34.8164 34.8164v374.783c-13.3115 10.2402 -22.5273 26.624 -22.5273 45.0566c0 31.7441 25.5996 57.3438 57.3438 57.3438\r\n-s57.3438 -25.5996 57.3438 -57.3438c0 -18.4326 -8.19141 -34.8164 -22.5273 -45.0566v-31.7432c4.12402 1.37402 58.7676 28.6719 114.688 28.6719c65.2705 0 97.6758 -27.6484 126.976 -27.6484c38.9121 0 81.9209 27.6484 92.1602 27.6484\r\n-c8.19238 0 15.3604 -6.14453 15.3604 -13.3125v-240.64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gitter\" unicode=\"&#xf426;\" horiz-adv-x=\"384\" \r\n-d=\"M66.4004 125.5h-50.4004v322.5h50.4004v-322.5zM166.9 371.9v-435.9h-50.4004v435.9h50.4004zM267.5 371.9v-435.9h-50.4004v435.9h50.4004zM368 372v-247h-50.4004v247h50.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hooli\" unicode=\"&#xf427;\" horiz-adv-x=\"640\" \r\n-d=\"M144.5 96v16c12.2998 -6.59961 25.0996 -12.2002 38.2998 -16.7998zM202.2 101.3c29.5 -10.7002 55.3994 -13.5 75.2998 -13.2998c-24.7998 -7 -58.2002 -5.2998 -94.7002 7.2002l19.4004 0.799805v5.2998zM611.1 216.5c-16 0 -28.8994 13 -28.8994 28.9004\r\n-c0 15.8994 13 24.5 28.8994 24.5c16 0 28.9004 -8.5 28.9004 -24.5s-13 -28.9004 -28.9004 -28.9004zM582.1 96v110.5h57.9004v-110.5h-57.9004zM508.4 96v168l57.8994 27.2998v-195.3h-57.8994zM477.4 215.4c18.0996 -18.1006 16.6992 -33.8008 16.7998 -52.6006\r\n-c0 -18.7002 1.39941 -34.2998 -16.7998 -52.5c-18.1006 -18.2002 -50.4004 -17.0996 -50.4004 -17.0996s-32.2002 -1.10059 -50.4004 17.0996c-18.1992 18.2002 -16.7998 33.7998 -16.7998 52.5s-1.39941 34.4004 16.7998 52.6006\r\n-c18.1006 18.1992 50.4004 17.0996 50.4004 17.0996s32.2002 1.09961 50.4004 -17.0996zM437.6 143.5v40.4004c0 8.7998 -7.2998 10.8994 -10.6992 10.8994c-3.40039 0 -10.7002 -2.2002 -10.7002 -10.8994v-40.4004c0 -3.59961 1.7998 -12.5 10.7002 -12.5\r\n-c8.89941 0 10.6992 8.90039 10.6992 12.5zM331.4 215.4c18.1992 -18.1006 16.6992 -33.8008 16.6992 -52.3008c0 -18.6992 1.5 -34.2998 -16.6992 -52.5c-18.1006 -18.1992 -50.4004 -17.0996 -50.4004 -17.0996s-32.2002 -1.09961 -50.4004 17.0996\r\n-c-18.1992 18.2002 -16.7998 33.8008 -16.7998 52.5c0 15.6006 -0.899414 29.1006 9.2998 43.7002c-16 11.7998 -58 37.4004 -99.8994 58.2998v-54.2998c8 13.7002 22.7002 22 38.5 21.9004c27.2002 0 40.5996 -18.7002 40.5996 -37.4004v-93.8994\r\n-c-20.3994 7.5 -39.7002 17.3994 -57.7002 29.5996v48.7002c0 8.09961 -1.5 15 -10.5996 15s-10.7998 -11.2998 -10.7998 -18.2002v-29.7998l-4.5 3.59961c-22.9004 18.9004 -40.2998 35.6006 -53.4004 50.2998v-31c11 -9.7998 23.6006 -20.1992 38.4004 -31.3994\r\n-c6.39941 -4.90039 12.8994 -9.40039 19.3994 -13.6006v-28.5996h-57.8994v73.7002c-86.7002 78 -61.7998 110.8 -61.7998 110.8c8.2998 18.2998 42.8994 22.2002 97.2998 0.0996094l22.5 10.6006v-20.7002c29.5996 -14.5996 63.8994 -31.5 102.1 -61.0996\r\n-c1.60059 2.09961 3.40039 4.09961 5.2998 6c18.2002 18.1992 50.4004 17.0996 50.4004 17.0996s32.2002 1.09961 50.4004 -17.0996zM65.2002 264l29.2002 13.7002c-26.9004 10.0996 -50.9004 13.5 -64.4004 2.09961c-3.7002 -3.09961 -13.5 -24.5996 35.2002 -79.0996\r\n-v63.2998zM291.7 143.5v40.4004c0 8.7998 -7.2998 10.8994 -10.7002 10.8994s-10.7002 -2.2002 -10.7002 -10.8994v-40.4004c0 -3.59961 1.7998 -12.5 10.7002 -12.5s10.7002 8.90039 10.7002 12.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"strava\" unicode=\"&#xf428;\" horiz-adv-x=\"384\" \r\n-d=\"M158.4 448l150.199 -292h-88.5l-61.6992 116.1l-62.2002 -116.1h-89.2002zM308.6 156h67.6006l-111.5 -220l-112.2 220h67.5996l44.6006 -88.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stripe\" unicode=\"&#xf429;\" horiz-adv-x=\"640\" \r\n-d=\"M165 303.3l0.0996094 -38.5h33.7002v-37.7998h-33.7002v-63.2002c0 -26.2002 28 -18 33.7002 -15.7002v-33.7998c-5.89941 -3.2002 -16.5996 -5.89941 -31.2002 -5.89941c-26.2998 0 -46.0996 17 -46.0996 43.2998l0.200195 142.399zM254.1 251.7\r\n-c10.4004 19.0996 31.1006 15.2002 37.1006 13.0996v-40.7998c-5.7002 1.7998 -23.4004 4.5 -33.9004 -9.2998v-103.101h-44.2998v153.2h38.4004zM346.4 324v-36.2002l-44.6006 -9.5v36.2002zM44.9004 219.7c0 -20 67.8994 -10.5 67.8994 -63.4004\r\n-c0 -32 -25.3994 -47.7998 -62.2998 -47.7998c-15.2998 0 -32 3 -48.5 10.0996v40c14.9004 -8.09961 33.9004 -14.1992 48.5996 -14.1992c9.90039 0 17 2.69922 17 10.8994c0 21.2002 -67.5 13.2002 -67.5 62.4004c0 31.3994 24 50.2002 60 50.2002\r\n-c14.7002 0 29.4004 -2.30078 44.1006 -8.10059v-41.7998c-13.5 7.2998 -30.7002 11.4004 -44.2002 11.4004c-9.2998 -0.100586 -15.0996 -2.80078 -15.0996 -9.7002zM640 186.4c0 -4.30078 -0.400391 -13.6006 -0.599609 -15.9004h-86.9004\r\n-c2 -20.7998 17.2002 -26.9004 34.5 -26.9004c17.5996 0 31.5 3.7002 43.5996 9.80078v-33.4004c-12.0996 -6.7002 -28 -11.5 -49.1992 -11.5c-43.2002 0 -73.5 24.7002 -73.5 78.2002c0 45.2002 25.6992 81.0996 67.8994 81.0996s64.2002 -35.8994 64.2002 -81.3994z\r\n-M552.1 203.2h45.9004c0 20 -11.5996 28.3994 -22.5 28.3994c-11.0996 0 -23.4004 -8.39941 -23.4004 -28.3994zM439.2 267.8c31.2002 0 60.5996 -28.0996 60.5 -79.7002c0 -56.3994 -29 -79.5996 -60.7998 -79.5996c-15.5 0 -25 6.5 -31.4004 11.2002l-0.0996094 -50.2002\r\n-l-44.4004 -9.40039v204.801h39.0996l2.30078 -11c6.19922 5.69922 17.3994 13.8994 34.7998 13.8994zM428.6 145.3c16.5 0 27.5 17.9004 27.4004 41.7998c0 23.2002 -11.2002 41.4004 -27.4004 41.4004c-10.1992 0 -16.5996 -3.7002 -21.1992 -8.7998l0.299805 -66\r\n-c4.2998 -4.60059 10.5 -8.40039 20.8994 -8.40039zM301.9 111.6v153.2h44.5996v-153.2h-44.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stripe-s\" unicode=\"&#xf42a;\" horiz-adv-x=\"384\" \r\n-d=\"M155.3 293.4c0 -64.2002 218 -33.7002 218 -203.9c0 -102.6 -81.7002 -153.6 -200.3 -153.6c-44.8916 0.101562 -114.78 14.6172 -156 32.3994v128.5c47.9004 -26 108.9 -45.5 156.1 -45.5c31.8008 0 54.7002 8.5 54.7002 34.9004c0 68.0996 -216.8 42.5 -216.8 200.399\r\n-c0 101 77.0996 161.4 192.8 161.4c47.2998 0 94.5 -7.2002 141.8 -26.0996v-134.301c-43.3994 23.4004 -98.5 36.7002 -141.899 36.7002c-29.7998 0 -48.4004 -8.59961 -48.4004 -30.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"typo3\" unicode=\"&#xf42b;\" \r\n-d=\"M178.7 369.6c0 -66.3994 83.3994 -264.899 140.6 -264.899c6.90039 0 11.5 0 18.5 2.2998c-49.3994 -79.5 -110.399 -139 -146.7 -139c-77.2998 0 -184.1 234 -184.1 337.5c0 16.2998 3.90039 29.4004 9.2998 37.0996c27 32.4004 106.8 57.9004 176.3 66.4004\r\n-c-8.5 -7 -13.8994 -14.7002 -13.8994 -39.4004zM301.5 416c71.7998 0 138.8 -11.5996 138.8 -52.5c0 -82.5996 -52.5 -182.3 -78.7998 -182.3c-47.9004 0 -101.7 132.1 -101.7 198.5c0 30.8994 11.6006 36.2998 41.7002 36.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"amazon-pay\" unicode=\"&#xf42c;\" horiz-adv-x=\"640\" \r\n-d=\"M14 122.7c2.2998 4.2002 5.2002 4.89941 9.7002 2.5c10.3994 -5.60059 20.5996 -11.4004 31.2002 -16.7002c33.6992 -16.8047 90.7744 -37.5469 127.399 -46.2998c17.2734 -4.16797 45.5869 -9.4541 63.2002 -11.7998c22.083 -2.96875 58.0898 -5.37793 80.3721 -5.37793\r\n-c4.03809 0 10.5908 0.0800781 14.6279 0.177734c17.4004 0.399414 34.7998 1.7998 52.0996 3.7998c46.7393 5.44824 119.897 24.623 163.301 42.7998c2.89941 1.2002 5.89941 2 9.09961 1.2002c6.7002 -1.7998 9 -9 4.09961 -13.9004\r\n-c-2.47168 -2.27246 -6.77246 -5.58789 -9.59961 -7.39941c-30.7002 -21.1006 -64.2002 -36.4004 -99.5996 -47.9004c-20.3311 -6.55176 -53.9756 -14.4365 -75.1006 -17.5996c-14.6006 -2.23633 -38.4346 -4.38672 -53.2002 -4.7998\r\n-c-0.694336 -0.0419922 -1.81445 -0.176758 -2.5 -0.300781h-21.0996c-0.685547 0.124023 -1.80469 0.258789 -2.5 0.300781c-3.59961 0.199219 -7.2002 0.299805 -10.7002 0.399414c-13.9971 0.634766 -36.5762 3.00879 -50.3994 5.2998\r\n-c-22.7275 3.7041 -58.7471 13.0674 -80.4004 20.9004c-44.8652 16.1797 -110.094 55.1562 -145.6 87c-1.80078 1.59961 -3 3.7998 -4.40039 5.7002v2zM172 382.9c2.7998 0 5.5 0 8.2998 -0.100586c3.2998 -0.5 6.60059 -0.799805 9.7998 -1.5\r\n-c21.3008 -4.39941 35.4004 -17.2998 43.9004 -36.8994c6.90039 -15.9004 8.59961 -32.7002 8.09961 -49.8008c-0.399414 -15.3994 -3.2998 -30.1992 -10.2998 -44.0996c-9.2002 -18.4004 -23.3994 -30.9004 -43.7998 -34.9004c-22.5 -4.39941 -43.0996 0.5 -61 15.4004\r\n-c-0.5 0.5 -1.09961 1 -2.2002 1.90039v-72.4004c0 -1 0 -2 -0.0996094 -3c-0.299805 -3 -2.10059 -5 -5 -5c-7 -0.0996094 -14.1006 -0.0996094 -21.1006 0c-2.89941 0.0996094 -4.69922 2 -4.89941 5c-0.100586 1 -0.100586 2 -0.100586 3v209.3\r\n-c0 6.90039 1.30078 8.2002 8.2002 8.2002h11.5c4.60059 0 6.90039 -2 7.60059 -6.59961c0.5 -2.7002 0.899414 -5.5 1.2998 -8.2002c0.0439453 -0.405273 0.222656 -1.0332 0.399414 -1.40039c2.5 1.90039 4.7002 3.7002 7.10059 5.40039\r\n-c9.39941 6.90625 26.4238 13.6709 38 15.0996zM124.6 341c0.100586 -14.0996 0 -28 0 -42.0996c0 -14.1006 0.100586 -28.1006 0 -42.2002c-0.00488281 -0.0703125 -0.00878906 -0.183594 -0.00878906 -0.253906c0 -1.10547 0.765625 -2.46973 1.70898 -3.0459\r\n-c11.2002 -7.90039 23.4004 -13.3008 37.4004 -13.9004c20.2002 -0.900391 35.7998 7.2002 42.5996 28.5c3.2002 10 4 20.2002 4 30.5996c0 11.2002 -1 22.3008 -4.89941 33c-6.40039 17.5 -18.6006 24.8008 -33.5 25.9004\r\n-c-16.8008 1.2998 -31.9004 -3.7002 -45.6006 -13.2002c-0.945312 -0.556641 -1.71289 -1.90039 -1.71289 -2.99805c0 -0.0830078 0.00585938 -0.21875 0.0126953 -0.301758zM330.3 382.9c4 0 8 0 11.9004 0.0996094c3.59961 -0.5 7.2002 -0.799805 10.7998 -1.2998\r\n-c7.7002 -1.10059 15.0996 -3.10059 21.7998 -7.10059c11.6006 -6.89941 17.1006 -17.5 19 -30.3994c0.5 -3.29297 0.905273 -8.66895 0.905273 -12c0 -0.248047 -0.00195312 -0.651367 -0.00488281 -0.900391v-106\r\n-c0.00195312 -0.128906 0.00390625 -0.336914 0.00390625 -0.46582c0 -0.645508 -0.046875 -1.69141 -0.104492 -2.33398c-0.0742188 -2.57422 -2.22461 -4.67969 -4.7998 -4.7002c-5.39941 -0.0996094 -10.8994 -0.0996094 -16.2998 0\r\n-c-2.90039 0.100586 -4.7998 2.10059 -5.40039 5.2002c-0.699219 3.59961 -1.19922 7.2002 -1.7998 11c-0.481445 -0.245117 -1.19824 -0.737305 -1.59961 -1.09961c-11.7998 -9.7002 -25.2002 -16.1006 -40.2998 -18.4004c-13.1006 -2 -26 -1.2002 -37.9004 5.40039\r\n-c-12.4004 6.89941 -19.4004 17.6992 -21.4004 31.6992c-1.5 10.5 -0.799805 20.9004 3.90039 30.7002c6.09961 12.6006 16.5 20.4004 29.4004 24.9004c10.7998 3.7998 22 4.5 33.2998 3.89941c8.95312 -0.556641 23.2891 -2.75195 32 -4.89941\r\n-c0.399414 -0.100586 0.799805 0 1.2998 -0.100586c0.0898438 0.381836 0.179688 1.00879 0.200195 1.40039c-0.100586 8.2998 0 16.5996 -0.299805 24.9004c-0.200195 5.89941 -1.60059 11.5996 -5.30078 16.3994c-4.19922 5.5 -10.2998 7.40039 -16.7998 8.40039\r\n-c-12.5 1.89941 -24.8994 0.899414 -37.2002 -1.40039c-7.89941 -1.5 -15.6992 -3.7002 -23.5 -5.7002c-4.69922 -1.19922 -6.69922 0.100586 -6.7998 4.90039c-0.0996094 3.2998 0.100586 6.59961 0 9.90039c-0.0996094 3.89941 1.7002 6.5 5.2998 7.69922\r\n-c5.90039 2 11.8008 4.2002 17.9004 5.80078c7.86426 1.92188 20.8115 3.75879 28.9004 4.09961c0.899414 0.0996094 1.89941 0.299805 2.89941 0.400391zM365.3 255.2c-0.0996094 4.7002 0.100586 9.2998 0.100586 14.0996s-0.100586 9.5 0 14.2998\r\n-c0 1.60059 -0.5 2.40039 -2.10059 2.60059c-8.39941 1.09961 -16.5996 2.7002 -25 3.39941c-1.95117 0.227539 -5.12891 0.412109 -7.09375 0.412109c-4.99316 0 -12.9258 -1.16992 -17.7061 -2.61133c-8 -2.60059 -13.9004 -7.30078 -16.4004 -15.6006\r\n-c-0.779297 -2.57422 -1.41211 -6.84766 -1.41211 -9.53809c0 -2.78613 0.677734 -7.2041 1.5127 -9.86133c1.55762 -5.40918 7.11328 -11.3672 12.3994 -13.3008c5.40039 -2.19922 11.1006 -2.39941 16.8008 -1.7998c13.8994 1.40039 26.1992 6.7998 37.3994 14.9004\r\n-c0.832031 0.543945 1.50684 1.79199 1.50684 2.78613c0 0.0595703 -0.00292969 0.155273 -0.00683594 0.213867zM625.2 125.8v-17.2998c-0.700195 -3.59961 -1.2998 -7.2998 -2.10059 -10.9004c-4.39941 -20.2998 -11.8994 -39.1992 -24.6992 -55.5996\r\n-c-3.27148 -3.9209 -8.96094 -9.92383 -12.7002 -13.4004c-1.1416 -1.04102 -3.29199 -2.16113 -4.7998 -2.5c-2.90039 -0.699219 -4.60059 1.2002 -4.10059 4.10059c0.201172 0.852539 0.649414 2.19629 1 3c5.7998 14.7998 11.7002 29.7002 15.7998 45.0996\r\n-c2.10059 7.60059 3.90039 15.2998 3.5 23.2998c-0.199219 5.2002 -2.5 9 -7.59961 10.4004c-3.89746 1.15332 -10.3486 2.36328 -14.4004 2.7002c-11.3994 0.899414 -22.8994 0.200195 -34.2998 -0.900391c-7.7998 -0.799805 -15.5 -1.7002 -23.2998 -2.5\r\n-c-0.504883 -0.0576172 -1.32617 -0.103516 -1.83398 -0.103516c-0.100586 0 -0.264648 0.000976562 -0.366211 0.00390625c-1.5 -0.100586 -3.2002 0.299805 -3.59961 1.7998c-0.111328 0.383789 -0.201172 1.01855 -0.201172 1.41797\r\n-c0 0.764648 0.314453 1.92188 0.701172 2.58203c0.838867 1.1582 2.49609 2.72656 3.7002 3.5c12.0996 8.2998 25.6992 12.9004 40 15.5996c7.29883 1.34375 19.2461 2.43457 26.668 2.43457c3.46484 0 9.0791 -0.239258 12.5312 -0.53418\r\n-c5.92773 -0.371094 15.335 -2.11816 21 -3.90039c4.30078 -1.39941 8.10059 -3.2998 9.10059 -8.2998zM493.1 249c0.300781 -0.700195 0.501953 -1.2998 0.902344 -2.40039c2.59961 7.7002 5.2002 15 7.7002 22.2002l34.7998 100\r\n-c0.5 1.40039 1.09961 2.7002 1.59961 4.10059c0.932617 2.87988 4.14648 5.21777 7.17383 5.21777c0.145508 0 0.381836 -0.0078125 0.526367 -0.0185547c6.60059 0 13.2998 0.100586 19.9004 0c2.7998 0 4.09961 -1.59961 3.7002 -4.39941\r\n-c-0.277344 -1.56641 -0.994141 -4.03027 -1.60059 -5.5c-23.3662 -59.9336 -46.8994 -119.801 -70.5996 -179.601c-2.1416 -5.27734 -6.2627 -13.5205 -9.2002 -18.3994c-8.7998 -14.9004 -22.4004 -21.7998 -39.5 -21.4004c-4.70801 0.18457 -12.2793 1.08008 -16.9004 2\r\n-c-5.39941 0.900391 -7.2998 3.40039 -7.39941 8.90039c-0.100586 3.2666 -0.100586 6.56641 0 9.89941c0.0996094 3.5 1.7998 5 5.2002 4.80078c2.5 -0.200195 5 -0.800781 7.5 -1c1.30664 -0.148438 3.43359 -0.268555 4.74902 -0.268555\r\n-c2.98828 0 7.75977 0.612305 10.6504 1.36816c7.2002 1.90039 12.2002 6.7998 15.2002 13.2998c3.40039 7.2998 6 15 9.2998 22.2998c1.90039 4.2002 1.5 7.7002 -0.200195 11.8008c-19.7998 48.5 -39.5 97 -59.1006 145.5\r\n-c-0.649414 1.64453 -1.50098 4.37695 -1.90039 6.09961c-0.5 2.5 0.700195 4.5 3.2002 4.5c7.7002 0.0996094 15.2998 0 22.9004 -0.0996094c3.2002 0 5.2998 -1.90039 6.39941 -4.80078c2.10059 -5.59961 4.30078 -11.1992 6.30078 -16.8994\r\n-c12.8994 -35.7666 25.7988 -71.5 38.6982 -107.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cc-amazon-pay\" unicode=\"&#xf42d;\" horiz-adv-x=\"576\" \r\n-d=\"M124.7 246.2c0.0996094 11.7998 0 23.5 0 35.2998v35.2998c0 1.2998 0.399414 2 1.39941 2.7002c11.5 8 24.1006 12.0996 38.2002 11.0996c12.5 -0.899414 22.7002 -7 28.1006 -21.6992c3.2998 -8.90039 4.09961 -18.2002 4.09961 -27.7002\r\n-c0 -8.7002 -0.700195 -17.2998 -3.40039 -25.6006c-5.69922 -17.7998 -18.6992 -24.6992 -35.6992 -23.8994c-11.7002 0.5 -21.9004 5 -31.4004 11.7002c-0.900391 0.799805 -1.40039 1.59961 -1.2998 2.7998zM279.6 231.6c-5.19922 2 -8.7998 5.7002 -10.3994 11.2002\r\n-c-1.7002 5.40039 -1.7002 10.7998 -0.100586 16.2002c2 6.90039 7 10.9004 13.7002 13.0996c6.7998 2.2002 13.7998 2.5 20.7998 1.90039c7 -0.700195 13.9004 -2 20.9004 -2.90039c1.40039 -0.199219 1.7998 -0.799805 1.7998 -2.19922c-0.0996094 -4 0 -8 0 -12\r\n-c0 -3.90039 -0.0996094 -7.90039 0 -11.8008c0 -1.19922 -0.399414 -1.89941 -1.2998 -2.5c-9.40039 -6.7998 -19.7002 -11.2998 -31.2998 -12.5c-4.7998 -0.5 -9.5 -0.299805 -14.1006 1.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM368.5 344.1c0.400391 -1.69922 0.900391 -3.39941 1.59961 -5.09961c16.5 -40.5996 32.9004 -81.2998 49.5 -121.9c1.40039 -3.5 1.7002 -6.39941 0.200195 -9.89941\r\n-c-2.7998 -6.2002 -4.89941 -12.6006 -7.7998 -18.7002c-2.59961 -5.5 -6.7002 -9.5 -12.7002 -11.2002c-4.2002 -1.09961 -8.5 -1.2998 -12.8994 -0.899414c-2.10059 0.199219 -4.2002 0.699219 -6.30078 0.799805c-2.7998 0.200195 -4.19922 -1.10059 -4.2998 -4\r\n-c-0.0996094 -2.7998 -0.0996094 -5.60059 0 -8.2998c0.100586 -4.60059 1.60059 -6.7002 6.2002 -7.5c4.7002 -0.800781 9.40039 -1.60059 14.2002 -1.7002c14.2998 -0.299805 25.7002 5.39941 33.0996 17.8994c2.90039 4.90039 5.60059 10.1006 7.7002 15.4004\r\n-c19.7998 50.0996 39.5 100.3 59.2002 150.5c0.599609 1.5 1.09961 3 1.2998 4.59961c0.400391 2.40039 -0.700195 3.60059 -3.09961 3.7002c-5.60059 0.100586 -11.1006 0 -16.7002 0c-3.10059 0 -5.2998 -1.39941 -6.40039 -4.2998\r\n-c-0.399414 -1.09961 -0.899414 -2.2998 -1.2998 -3.40039l-29.0996 -83.6992c-2.10059 -6.10059 -4.2002 -12.1006 -6.5 -18.6006c-0.400391 0.900391 -0.600586 1.40039 -0.800781 1.90039c-10.7998 29.8994 -21.5996 59.8994 -32.3994 89.7998\r\n-c-1.7002 4.7002 -3.5 9.5 -5.2998 14.2002c-0.900391 2.5 -2.7002 4 -5.40039 4c-6.40039 0.0996094 -12.7998 0.200195 -19.2002 0.0996094c-2.2002 0 -3.2998 -1.59961 -2.7998 -3.7002zM242.4 242c1.69922 -11.7002 7.59961 -20.7998 18 -26.5996\r\n-c9.89941 -5.5 20.6992 -6.2002 31.6992 -4.60059c12.7002 1.90039 23.9004 7.2998 33.8008 15.5c0.399414 0.299805 0.799805 0.600586 1.39941 1c0.5 -3.2002 0.900391 -6.2002 1.5 -9.2002c0.5 -2.59961 2.10059 -4.2998 4.5 -4.39941\r\n-c4.60059 -0.100586 9.10059 -0.100586 13.7002 0c2.2998 0.0996094 3.7998 1.59961 4 3.89941c0.0996094 0.800781 0.0996094 1.60059 0.0996094 2.30078v88.7998c0 3.59961 -0.199219 7.2002 -0.699219 10.7998c-1.60059 10.7998 -6.2002 19.7002 -15.9004 25.4004\r\n-c-5.59961 3.2998 -11.7998 5 -18.2002 5.89941c-3 0.400391 -6 0.700195 -9.09961 1.10059h-10c-0.799805 -0.100586 -1.60059 -0.300781 -2.5 -0.300781c-8.2002 -0.399414 -16.2998 -1.39941 -24.2002 -3.5c-5.09961 -1.2998 -10 -3.19922 -15 -4.89941\r\n-c-3 -1 -4.5 -3.2002 -4.40039 -6.5c0.100586 -2.7998 -0.0996094 -5.60059 0 -8.2998c0.100586 -4.10059 1.80078 -5.2002 5.7002 -4.10059c6.5 1.7002 13.1006 3.5 19.7002 4.7998c10.2998 1.90039 20.7002 2.7002 31.0996 1.2002\r\n-c5.40039 -0.799805 10.5 -2.39941 14.1006 -7c3.09961 -4 4.2002 -8.7998 4.39941 -13.7002c0.300781 -6.89941 0.200195 -13.8994 0.300781 -20.7998c0 -0.399414 -0.100586 -0.700195 -0.200195 -1.2002c-0.400391 0 -0.799805 0 -1.10059 0.100586\r\n-c-8.7998 2.09961 -17.6992 3.59961 -26.7998 4.09961c-9.5 0.5 -18.8994 -0.0996094 -27.8994 -3.2002c-10.8008 -3.7998 -19.5 -10.2998 -24.6006 -20.7998c-4.09961 -8.2998 -4.59961 -17 -3.39941 -25.7998zM98.7002 341.1v-175.3c0 -0.799805 0 -1.7002 0.0996094 -2.5\r\n-c0.200195 -2.5 1.7002 -4.09961 4.10059 -4.2002c5.89941 -0.0996094 11.7998 -0.0996094 17.6992 0c2.5 0 4 1.7002 4.10059 4.10059c0.0996094 0.799805 0.0996094 1.7002 0.0996094 2.5v60.7002c0.900391 -0.700195 1.40039 -1.2002 1.90039 -1.60059\r\n-c15 -12.5 32.2002 -16.5996 51.0996 -12.8994c17.1006 3.39941 28.9004 13.8994 36.7002 29.1992c5.7998 11.6006 8.2998 24.1006 8.7002 37c0.5 14.3008 -1 28.4004 -6.7998 41.7002c-7.10059 16.4004 -18.9004 27.2998 -36.7002 30.9004\r\n-c-2.7002 0.599609 -5.5 0.799805 -8.2002 1.2002h-7c-1.2002 -0.200195 -2.40039 -0.300781 -3.59961 -0.5c-11.7002 -1.40039 -22.3008 -5.80078 -31.8008 -12.7002c-2 -1.40039 -3.89941 -3 -5.89941 -4.5c-0.100586 0.5 -0.299805 0.799805 -0.400391 1.2002\r\n-c-0.399414 2.2998 -0.700195 4.59961 -1.09961 6.89941c-0.600586 3.90039 -2.5 5.5 -6.40039 5.60059h-9.7002c-5.89941 0.0996094 -6.89941 -1 -6.89941 -6.80078zM493.6 109c-2.69922 0.700195 -5.09961 0 -7.59961 -1c-43.9004 -18.4004 -89.5 -30.2002 -136.8 -35.7998\r\n-c-14.5 -1.7002 -29.1006 -2.7998 -43.7002 -3.2002c-26.5996 -0.700195 -53.2002 0.799805 -79.5996 4.2998c-17.8008 2.40039 -35.5 5.7002 -53 9.90039c-37 8.89941 -72.7002 21.7002 -106.7 38.7998c-8.7998 4.40039 -17.4004 9.2998 -26.1006 14\r\n-c-3.7998 2.09961 -6.19922 1.5 -8.19922 -2.09961v-1.7002c1.19922 -1.60059 2.19922 -3.40039 3.69922 -4.7998c36 -32.2002 76.6006 -56.5 122 -72.9004c21.9004 -7.90039 44.4004 -13.7002 67.3008 -17.5c14 -2.2998 28 -3.7998 42.1992 -4.5\r\n-c3 -0.0996094 6 -0.200195 9 -0.400391c0.700195 0 1.40039 -0.199219 2.10059 -0.299805h17.7002c0.699219 0.100586 1.39941 0.299805 2.09961 0.299805c14.9004 0.400391 29.7998 1.80078 44.5996 4c21.4004 3.2002 42.4004 8.10059 62.9004 14.7002\r\n-c29.5996 9.60059 57.7002 22.4004 83.4004 40.1006c2.7998 1.89941 5.69922 3.7998 8 6.19922c4.2998 4.40039 2.2998 10.4004 -3.30078 11.9004zM544 136.7c-0.799805 4.2002 -4 5.7998 -7.59961 7c-5.7002 1.89941 -11.6006 2.7998 -17.6006 3.2998\r\n-c-11 0.900391 -22 0.400391 -32.7998 -1.59961c-12 -2.2002 -23.4004 -6.10059 -33.5 -13.1006c-1.2002 -0.799805 -2.40039 -1.7998 -3.09961 -3c-0.600586 -0.899414 -0.700195 -2.2998 -0.5 -3.39941c0.299805 -1.30078 1.69922 -1.60059 3 -1.5\r\n-c0.599609 0 1.19922 0 1.7998 0.0996094l19.5 2.09961c9.59961 0.900391 19.2002 1.5 28.7998 0.800781c4.09961 -0.300781 8.09961 -1.2002 12 -2.2002c4.2998 -1.10059 6.2002 -4.40039 6.40039 -8.7002c0.299805 -6.7002 -1.2002 -13.0996 -2.90039 -19.5\r\n-c-3.5 -12.9004 -8.2998 -25.4004 -13.2998 -37.7998c-0.299805 -0.799805 -0.700195 -1.7002 -0.799805 -2.5c-0.400391 -2.5 1 -4 3.39941 -3.5c1.40039 0.299805 3 1.09961 4 2.09961c3.7002 3.60059 7.5 7.2002 10.6006 11.2002\r\n-c10.6992 13.7998 17 29.5996 20.6992 46.5996c0.700195 3 1.2002 6.10059 1.7002 9.10059c0.200195 4.7002 0.200195 9.59961 0.200195 14.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ethereum\" unicode=\"&#xf42e;\" horiz-adv-x=\"320\" \r\n-d=\"M311.9 187.2l-151.9 -92.7998l-152 92.7998l152 260.8zM160 64.5996l152 92.8008l-152 -221.4l-152 221.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"korvue\" unicode=\"&#xf42f;\" horiz-adv-x=\"446\" \r\n-d=\"M386.5 414c32.7002 0 59.5 -26.7998 59.5996 -59.5v-327c0 -32.7002 -26.5 -59.5 -59.5 -59.5h-327.1c-32.7002 0 -59.5 26.7998 -59.5 59.4004v327.1c0 32.7002 26.7998 59.5 59.5 59.5h327zM87.0996 327.2v-132h187.5l81.2002 132h-110.899l-61.8008 -116v116h-96z\r\n-M248.9 55.0996h118.399l-88.5996 130.801h-191.5v-130.801h96v113.601z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"elementor\" unicode=\"&#xf430;\" \r\n-d=\"M425.6 416c12.4004 0 22.4004 -10 22.4004 -22.4004v-403.199c0 -12.4004 -10 -22.4004 -22.4004 -22.4004h-403.199c-12.4004 0 -22.4004 10 -22.4004 22.4004v403.199c0 12.4004 10 22.4004 22.4004 22.4004h403.199zM164.3 92.5v199h-39.7998v-199h39.7998z\r\n-M323.6 92.5v39.7998h-119.5v-39.7998h119.5zM323.6 172.1v39.8008h-119.5v-39.8008h119.5zM323.6 251.8v39.7998h-119.5v-39.7998h119.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"youtube-square\" unicode=\"&#xf431;\" \r\n-d=\"M186.8 245.9l95.2002 -54.1006l-95.2002 -54.0996v108.2zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM406 191.7c0 0 0 59.5996 -7.59961 88.2002\r\n-c-4.2002 15.7998 -16.5 28.1992 -32.2002 32.3994c-28.2998 7.7002 -142.2 7.7002 -142.2 7.7002s-113.9 0 -142.2 -7.7002c-15.7002 -4.2002 -28 -16.5996 -32.2002 -32.3994c-7.59961 -28.5 -7.59961 -88.2002 -7.59961 -88.2002s0 -59.6006 7.59961 -88.2002\r\n-c4.2002 -15.7998 16.5 -27.7002 32.2002 -31.9004c28.2998 -7.59961 142.2 -7.59961 142.2 -7.59961s113.9 0 142.2 7.7002c15.7002 4.2002 28 16.0996 32.2002 31.8994c7.59961 28.5 7.59961 88.1006 7.59961 88.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flipboard\" unicode=\"&#xf44d;\" \r\n-d=\"M0 416h448v-448h-448v448zM358.4 236.8v89.6006h-268.801v-268.801h89.6006v89.6006h89.5996v89.5996h89.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hips\" unicode=\"&#xf452;\" horiz-adv-x=\"640\" \r\n-d=\"M251.6 290.4v-201.801c0 -1.89941 -0.899414 -2.7998 -2.7998 -2.7998h-40.8994c-1.60059 0 -2.7002 1.40039 -2.7002 2.7998v201.801c0 1.39941 1.09961 2.7998 2.7002 2.7998h40.8994c1.90039 0 2.7998 -0.900391 2.7998 -2.7998zM156.5 280\r\n-c18.7002 -13.5 28 -31.9004 28 -55.2998v-136.101c0 -1.89941 -0.900391 -2.7998 -2.7002 -2.7998h-27.2998c-9.09961 0 -16.4004 7.2998 -16.4004 16.2998v122.601c0 0.899414 2.7002 27 -45.7998 27c-48.5996 0 -45.7998 -26.2002 -45.7998 -27v-136.101\r\n-c0 -1.89941 -0.900391 -2.7998 -2.7998 -2.7998h-41c-1.7998 0 -2.7002 0.900391 -2.7002 2.7998v279.2c0 1.7998 0.900391 2.7002 2.7002 2.7002h40.8994c1.90039 0 2.80078 -0.900391 2.80078 -2.7002v-81.2002c15.1992 7.7002 31.6992 11.5 49.7998 11.4004\r\n-c24 -0.0996094 44.2002 -6.2002 60.2998 -18zM634.9 169.9c5.5 -12.6006 6.59961 -25.6006 3.09961 -39.1006c-9.59961 -36.8994 -44.9004 -45.5 -45.5996 -45.7998c-10.5 -3.09961 -23.6006 -4.2998 -36.3008 -4.2998c-16.5996 0 -32.5996 2.7002 -48.1992 8.2002\r\n-c-9.7002 3.39941 -14.6006 10.2998 -14.6006 20.6992v34.4004c0 2.09961 2.2998 3.7002 4.40039 2.2998c13.7002 -10.2002 34.0996 -19.0996 58.3994 -19.0996c23.3008 0 32.8008 4.5 36.5 13.5996c3 7.90039 -0.599609 16.1006 -12.1992 21.2002l-53.6006 23.5\r\n-c-21.3994 9.40039 -33.7998 24 -37.2002 43.5996c-5.69922 33.7002 22.2002 53.3008 22.7002 53.7002c13.2002 9.60059 32 15.4004 58.5 15.4004c19 0 37.4004 -3.2998 55.1006 -9.90039c1.2998 -0.5 1.89941 -1.2998 1.89941 -2.59961v-44.7002\r\n-c0 -2.09961 -2.2998 -3.40039 -4 -2.40039c-39.7002 20.7002 -76.5996 12.3008 -84 6.80078c-6.59961 -4.90039 -6 -12.5 2.60059 -16.1006l57.5996 -25.2998c16.5 -7.09961 28.0996 -18.4004 34.9004 -34.0996zM376.2 298.2c60.3994 0 108.7 -48.2998 108.6 -108.601\r\n-c0 -60.1992 -48.2002 -108.699 -108.7 -108.699c-21.8994 0 -41.1992 6.39941 -57.6992 19.0996v-88.7998c0 -1.7998 -0.900391 -2.7002 -2.80078 -2.7002h-40.8994c-2.10059 0 -2.7002 1.90039 -2.7002 2.7002v183.5c0 83.3994 72.5 103.5 104.2 103.5zM376.2 127.3\r\n-c34.8994 0 62.2998 27.9004 62.2002 62.2002c0 34.5996 -27.7002 62.2002 -62.2002 62.2002c-34.6006 0 -62.2002 -27.7002 -62.2002 -62.2002c0 -17.2002 6 -31.7998 18.2002 -44c12.0996 -12.0996 26.7998 -18.2002 44 -18.2002zM228.3 375.5\r\n-c15.9004 0 28.9004 -12.7002 28.9004 -28.9004c0 -15.7998 -12.7002 -28.8994 -28.9004 -28.8994s-28.8994 13.2998 -28.8994 28.8994c0.0996094 16 13 28.9004 28.8994 28.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"php\" unicode=\"&#xf457;\" horiz-adv-x=\"640\" \r\n-d=\"M320 343.5c-171.3 0 -303.2 -72.2002 -303.2 -151.5s131.8 -151.5 303.2 -151.5c171.3 0 303.2 72.2002 303.2 151.5s-131.8 151.5 -303.2 151.5zM320 360.3c176.7 0 320 -75.2998 320 -168.3s-143.3 -168.3 -320 -168.3s-320 75.2998 -320 168.3s143.3 168.3 320 168.3z\r\n-M218.2 205.5c7.39941 38.4004 -18.4004 34.2998 -56.4004 34.2998l-13.7002 -70.5996c34.3008 0 62.2002 -4.2002 70.1006 36.2998zM97.4004 97.7002l32.6992 168.7h70.7002c21.2002 0 36.7998 -5.5 46.5 -16.7002c18.6006 -21.4004 11.7998 -64.1006 -14.2998 -88.1006\r\n-c-23.5996 -22.0996 -49.0996 -19.0996 -90.2002 -19.0996l-8.7002 -44.7998h-36.6992zM283.1 311.3h36.5l-8.69922 -44.7998c31.5 0 60.6992 2.2998 74.7998 -10.7002c14.7998 -13.5996 7.7002 -31 -8.2998 -113.1h-37c15.3994 79.3994 18.2998 86 12.6992 92\r\n-c-5.39941 5.7998 -17.6992 4.59961 -47.3994 4.59961l-18.7998 -96.5996h-36.5zM505 205.5c7.40039 38.4004 -18.2002 34.2998 -56.4004 34.2998l-13.6992 -70.5996c33.3994 0 62.0996 -4.7998 70.0996 36.2998zM384.2 97.7002l32.7998 168.7h70.7002\r\n-c21.2002 0 36.7998 -5.5 46.5 -16.7002c18.5996 -21.4004 11.7998 -64.1006 -14.2998 -88.1006c-23.1006 -21.5996 -47 -19.0996 -90.2002 -19.0996l-8.7002 -44.7998h-36.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quinscape\" unicode=\"&#xf459;\" horiz-adv-x=\"512\" \r\n-d=\"M313.6 -26.5996c4.40039 -4.40039 8.10059 -9 13.3008 -12.5c-18.5029 -5.58008 -49.2031 -10.1074 -68.5283 -10.1074c-0.516602 0 -1.35547 0.00292969 -1.87207 0.00683594c-135 0 -244.5 109.5 -244.5 244.601c0 135.1 109.4 244.6 244.5 244.6\r\n-s244.6 -109.5 244.6 -244.6c0 -35.3008 -6.89941 -67.4004 -20.2998 -97.7002c-3 5.7002 -7.2002 10.2002 -11.2002 15.2998c11.2002 93.5 -62.0996 176.6 -157 176.6c-87.2705 0 -158.1 -70.8281 -158.1 -158.1s70.8291 -158.1 158.1 -158.1h1zM313.5 -26.5\r\n-l0.400391 -0.0996094zM391.9 142.4c54.7471 0 99.1992 -44.4326 99.1992 -99.1807v-0.0195312c0 -54.7588 -44.4414 -99.2002 -99.1992 -99.2002c-54.7588 0 -99.2002 44.4414 -99.2002 99.2002c0 54.7578 44.4414 99.2002 99.2002 99.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"readme\" unicode=\"&#xf4d5;\" horiz-adv-x=\"576\" \r\n-d=\"M528.3 401.5c26.4004 -0.200195 47.7002 -21.7002 47.7002 -48.0996v-245.7c0 -26.5 -21.5 -48 -48 -48h-89.7002c-102.1 0 -132.6 -24.4004 -147.3 -75c-0.799805 -2.7998 -5.2998 -2.7998 -6 0c-14.5996 50.5996 -45.0996 75 -147.3 75h-89.7002\r\n-c-26.5 0 -48 21.5 -48 48v245.8c0 26.5 21.5 48 48 48h139.7c48.0996 0 89.7998 -33.2998 100.399 -80.2998c10.5 47 52.3008 80.2998 100.4 80.2998h139.8zM242 136.1h0.0996094v22.9004c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.9004\r\n-c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.60059 3.5 3.5zM242 197h0.0996094v22.9004c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.60059 -3.5 -3.5v-22.9004c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM242 257.9h0.0996094v22.8994\r\n-c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.8994c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM501.3 136.2h0.100586v22.8994c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.8994\r\n-c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM501.3 197.1h0.100586v22.9004c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.9004c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.60059 3.5 3.5zM501.3 258h0.100586v22.7998\r\n-c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.7998c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"java\" unicode=\"&#xf4e4;\" horiz-adv-x=\"384\" \r\n-d=\"M277.74 135.1c-94.5 -24.8994 -277 -13.2998 -224.5 12.1006c44.5 21.3994 80.5996 19 80.5996 19s-93.0996 -22.1006 -33 -30.1006c25.4004 -3.39941 76 -2.59961 123.101 1.30078c38.5 3.19922 77.1992 10.1992 77.1992 10.1992s-13.5996 -5.7998 -23.3994 -12.5z\r\n-M192.34 167.2c-48.5 43.7998 -84.0996 82.2998 -60.2002 118.2c35.1006 52.5 132.2 78.0996 110.7 162.6c0 0 53.1602 -53.2002 -50.5 -135c-83.0996 -65.5996 -19 -103.1 0 -145.8zM306.94 343.4c-111.601 -64.7002 -91 -83.5 -64.1006 -121.301\r\n-c28.7998 -40.5 -33.8994 -72.8994 -33.8994 -72.8994s31.1992 25.5996 6.5 54c-83.7002 96.3994 91.5996 140.2 91.5 140.2zM300.84 72.9004c96.1006 49.8994 51.6006 97.8994 20.6006 91.3994c-3.10352 -0.581055 -8.03125 -1.92578 -11 -3\r\n-c1.71973 2.44629 5.39258 5.26855 8.19922 6.2998c61.3008 21.6006 108.5 -63.5996 -19.7998 -97.2998c0.649414 0.642578 1.5459 1.80762 2 2.60059zM348 10.5996c53 -23.8994 -115.16 -72 -319.4 -38.7998c-74.8994 12.1006 36.1006 54.5 56.4004 40.2002\r\n-c0 0 -6.5 0.400391 -17.7002 -2c-10.7998 -2.2998 -45.0996 -13.4004 -26.7998 -21.2998c50.7998 -22.1006 233.7 -16.7998 291.6 0.700195c30.4004 9.2998 15.9004 21.1992 15.9004 21.1992zM124.44 52c0 0 -19.6006 -11.4004 13.8994 -15.2002\r\n-c40.6006 -4.59961 61.2998 -4 106 4.5c7.46094 -4.46777 20.0938 -10.6504 28.2002 -13.7998c-100.2 -42.9004 -226.8 2.5 -148.1 24.5zM304.24 -45.2002c69.7998 13.2002 76.2002 29.7002 76.2002 29.7002c-3.30078 -43.5996 -144.9 -52.7998 -237.101 -46.9004\r\n-c-60.5996 3.90039 -72.3994 13.7002 -72.3994 13.6006c57.5 -9.5 154.6 -11.2002 233.3 3.59961zM260.64 95c5.08594 -4.74902 14.5391 -10.4834 21.1006 -12.7998c-121.3 -35.5 -256.3 -2.90039 -169.5 25.8994c0 0 -21.9004 -16.1992 11.5996 -19.6992\r\n-c43.2998 -4.5 77.6006 -4.80078 136.8 6.59961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pied-piper-hat\" unicode=\"&#xf4e5;\" horiz-adv-x=\"640\" \r\n-d=\"M640 423.1c-80.7998 -53.5996 -89.4004 -92.5 -96.4004 -104.399c-6.69922 -12.2002 -11.6992 -60.2998 -23.2998 -83.6006c-11.7002 -23.5996 -54.2002 -42.1992 -66.0996 -50c-11.7002 -7.7998 -28.2998 -38.0996 -41.9004 -64.1992\r\n-c-108.1 4.39941 -167.399 -38.8008 -259.2 -93.6006c29.4004 9.7002 43.3008 16.7002 43.3008 16.7002c94.1992 36 139.3 68.2998 281.1 49.2002c1.09961 0 1.90039 -0.600586 2.7998 -0.799805c3.90039 -2.2002 5.2998 -6.90039 3.10059 -10.8008l-53.9004 -95.7998\r\n-c-2.5 -4.7002 -7.7998 -7.2002 -13.0996 -6.09961c-126.801 23.7998 -226.9 -17.2998 -318.9 -18.6006c-73.4004 -1.09961 -97.5 33.5 -97.5 35.1006c0 1.09961 0.599609 1.7002 1.7002 1.7002c0 0 38.2998 0 103.1 15.2998c73.6006 140.3 139.2 189.399 210.601 189.399\r\n-c0 0 71.6992 0 90.5996 -61.8994c22.7998 39.7002 28.2998 49.2002 28.2998 49.2002c5.2998 9.39941 35 77.1992 86.4004 141.399c51.5 64 90.3994 79.9004 119.3 91.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-by\" unicode=\"&#xf4e7;\" horiz-adv-x=\"496\" \r\n-d=\"M314.9 253.6v-101.399h-28.3008v-120.5h-77.0996v120.399h-28.2998v101.5c0 4.40039 1.59961 8.2002 4.59961 11.3008c3.10059 3.09961 6.90039 4.69922 11.2998 4.69922h101.9c4.09961 0 7.7998 -1.59961 11.0996 -4.69922\r\n-c3.10059 -3.2002 4.80078 -6.90039 4.80078 -11.3008zM213.4 317.3c0 23.2998 11.5 35 34.5 35s34.5 -11.7002 34.5 -35c0 -23 -11.5 -34.5 -34.5 -34.5s-34.5 11.5 -34.5 34.5zM247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248\r\n-c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-nc\" unicode=\"&#xf4e8;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c139.801 0 248.4 -107.9 248.4 -248c0 -147.2 -118.5 -248 -248.4 -248c-134.5 0 -247.6 110.8 -247.6 248c0 132.9 104.7 248 247.6 248zM55.7998 258.9c-7.39941 -20.4004 -11.0996 -42.7002 -11.0996 -66.9004c0 -110.9 92.0996 -202.4 203.7 -202.4\r\n-c122.399 0 177.199 101.801 178.5 104.101l-93.4004 41.5996c-7.7002 -37.0996 -41.2002 -53 -68.2002 -55.3994v-38.1006h-28.7998v38.2002c-27.5 0.299805 -52.5996 10.2002 -75.2998 29.7002l34.0996 34.5c31.7002 -29.4004 86.4004 -31.7998 86.4004 2.2002\r\n-c0 6.19922 -2.2002 11.1992 -6.60059 15.0996c-14.1992 6 -1.7998 0.0996094 -219.3 97.4004zM248.4 395.7c-38.4004 0 -112.4 -8.7002 -170.5 -93l94.7998 -42.5c10 31.2998 40.3994 42.8994 63.7998 44.2998v38.0996h28.7998v-38.0996\r\n-c22.7002 -1.2002 43.4004 -8.90039 62 -23l-32.2998 -33.2002c-42.7002 29.9004 -83.5 8 -70 -11.0996c53.4004 -24.1006 43.7998 -19.7998 93 -41.6006l127.1 -56.6992c4.10059 17.3994 6.2002 35.0996 6.2002 53.0996c0 57 -19.7998 105 -59.2998 143.9\r\n-c-39.2998 39.8994 -87.2002 59.7998 -143.6 59.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-nc-eu\" unicode=\"&#xf4e9;\" horiz-adv-x=\"496\" \r\n-d=\"M247.7 440c140.7 0 248.3 -109 248.3 -248c0 -147.1 -118.1 -248 -248.3 -248c-136 0 -247.7 111.7 -247.7 248c0 131.2 103.6 248 247.7 248zM248.3 -10.7002c122.601 0 177.3 102.2 178.8 104.3l-128.3 56.8008h-90.2998\r\n-c9.2002 -39.3008 39.0996 -50.2002 67.2998 -50.2002c19.1006 0 38.6006 6.2002 47.2998 10.7998l10 -46.0996c-14.1992 -7.90039 -38.1992 -15.8008 -64.7998 -15.8008c-57.3994 0 -113.2 34.3008 -124.6 101.301h-27v29.5h22.7998\r\n-c0 16.2998 0.400391 13.2998 0.400391 19.5h-23.3008v29.5h4.7002l-65.7002 29.0996c-7.19922 -20.7998 -10.8994 -42.7998 -10.8994 -66c0 -110.2 91.5996 -202.7 203.6 -202.7zM231.6 179.9l-0.5 0.399414l0.900391 -0.399414h-0.400391zM308.8 199.4l136.101 -60.5\r\n-c4.19922 16.5996 6.2998 34.1992 6.2998 52.8994c0 113.2 -90 203.4 -203 203.4c-13 0 -106.101 3.2002 -170.7 -93.6006l81.5996 -36.0996c4.10059 7.2002 8.60059 14 13.9004 20.0996c23.7002 26.5 56.9004 42.3008 95.9004 42.3008\r\n-c25.2998 0 47.2998 -5.80078 62.2998 -12.4004l-11.6006 -47.2998c-10.7998 4.59961 -27.7998 10 -46.0996 10c-20 0 -38.2002 -6.60059 -51.0996 -22.4004c-3.40039 -3.7998 -6.30078 -8.7998 -8.80078 -14.2998l28.6006 -12.5996h70.2998v-29.5h-3.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-nc-jp\" unicode=\"&#xf4ea;\" horiz-adv-x=\"496\" \r\n-d=\"M247.7 440c140.8 0 248.3 -109.2 248.3 -248c0 -147.2 -118.1 -248 -248.3 -248c-135.9 0 -247.7 111.6 -247.7 248c0 131.2 103.6 248 247.7 248zM248.3 -10.7002c118.101 0 173.7 96.1006 175.2 98.2998l-81 36.1006v-35.7002h-64.2002v-56h-61.7002v56h-63.7998\r\n-v38.7002h63.7998v18.7002l-5.69922 11.7998h-58.1006v38.5996h27.9004l-127 56.5c-6 -19.0996 -9 -39.2002 -9 -60.2998c0 -110.2 91.5996 -202.7 203.6 -202.7zM335.9 126.6l-54.7002 24.3008l-2.90039 -5.60059v-18.7002h57.6006zM342.4 178l101 -45.0996\r\n-c5.19922 18.3994 7.89941 38 7.89941 59c0 113.399 -90.2002 203.399 -203 203.399c-91.0996 0 -145.899 -54 -173.7 -98.0996l81.9004 -36.5l-27.2998 51h65.7998l39.5996 -85.7002l23 -10.2002l43.4004 96h65.7998l-63 -116h38.6006v-17.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-nd\" unicode=\"&#xf4eb;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM342.4 251v-42.5h-180.301v42.5h180.301zM342.4 171.2v-42.5h-180.301v42.5h180.301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-pd\" unicode=\"&#xf4ec;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111.1 248 -248c0 -137 -111 -248 -248 -248s-248 111 -248 248c0 136.9 111 248 248 248zM248 -9.5c76.0996 0 142.4 42.4004 176.7 104.8c-1.40039 0.299805 12.5 -5.7998 -217.9 96.7998c0.200195 -32 16.1006 -71.8994 53.9004 -71.8994\r\n-c18.7002 0 30.7998 10.3994 36.2998 16.7002l36.0996 -43.9004c-25.8994 -22.7998 -56.5 -29.5 -79.3994 -29.5c-46.5 0 -120.4 27.9004 -120.4 126.9c0 11.3994 1.2002 22.3994 3.2998 32.8994l-78.7998 35.1006c-45.5996 -129.9 51 -267.9 190.2 -267.9zM442.2 140.5\r\n-c0.200195 -0.200195 0.299805 -0.299805 0.599609 -0.400391c4.40039 16.6006 6.7998 34 6.7998 52c0 111.101 -90.3994 201.5 -201.5 201.5c-70.3994 0 -132.399 -36.2998 -168.5 -91.1992l74.9004 -33.4004c19.7998 31.0996 53.2998 51.5996 100.7 51.5996\r\n-c20.0996 0 51 -4.19922 78.0996 -27.5l-40.3994 -41.5996c-19.8008 19.7002 -55.9004 23 -74.7002 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-pd-alt\" unicode=\"&#xf4ed;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 -10.7998c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3\r\n-c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8zM316.7 262c21.3994 0 70 -5.2002 70 -68.5996c0 -63.5 -48.6006 -68.6006 -70 -68.6006h-53.2002v137.2h53.2002zM317.5 153.5c24 0 34.5 15.2998 34.5 39.9004\r\n-c0 42 -31.2002 39.8994 -35 39.8994l-19.4004 -0.0996094v-79.7002h19.9004zM203.7 262c33.7002 0 50.5 -15.5 50.5 -46.5c0 -9 -3 -46.5 -57.1006 -46.5h-27v-44.2998h-34.5996v137.3h68.2002zM198.8 194.7c27.9004 0 30 41.5996 -0.899414 41.5996h-28.3008v-41.5996\r\n-h29.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-remix\" unicode=\"&#xf4ee;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM410.1 187.6l4.90039 -2.19922v-70c-7.2002 -3.60059 -63.4004 -27.5 -67.2998 -28.8008c-6.5 1.80078 -113.7 46.8008 -137.3 56.2002l-64.2002 -26.5996l-63.2998 27.5v63.7998\r\n-l59.2998 24.7998c-0.700195 0.700195 -0.400391 -5 -0.400391 70.4004l67.2998 29.7002l151.9 -62.9004v-61.5996zM339.7 106.1v43.8008h-0.400391v1.7998l-113.8 46.5v-45.2002l113.8 -46.9004v0.400391zM347.2 163.7l39.8994 16.3994l-36.7998 15.5l-39 -16.3994z\r\n-M399.5 125.6v43l-44.2998 -18.5996v-43.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-sa\" unicode=\"&#xf4ef;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM137.7 227c13 83.9004 80.5 95.7002 108.899 95.7002c99.8008 0 127.5 -82.5 127.5 -134.2c0 -63.5996 -41 -132.9 -128.899 -132.9c-38.9004 0 -99.1006 20 -109.4 97h62.5\r\n-c1.5 -30.0996 19.6006 -45.1992 54.5 -45.1992c23.2998 0 58 18.1992 58 82.7998c0 82.5 -49.0996 80.5996 -56.7002 80.5996c-33.0996 0 -51.6992 -14.5996 -55.7998 -43.7998h18.2002l-49.2002 -49.2002l-49 49.2002h19.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-sampling\" unicode=\"&#xf4f0;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM252 342.1c2.7998 0.300781 11.5 -1 11.5 -11.5l6.59961 -107.199l4.90039 59.2998c0 6 4.7002 10.5996 10.5996 10.5996c5.90039 0 10.6006 -4.7002 10.6006 -10.5996\r\n-c0 -2.5 -0.5 5.7002 5.7002 -81.5l5.7998 64.2002c0.299805 2.89941 2.89941 9.2998 10.2002 9.2998c3.7998 0 9.89941 -2.2998 10.5996 -8.90039l11.5 -96.5l5.2998 12.7998c1.7998 4.40039 5.2002 6.60059 10.2002 6.60059h58v-21.2998h-50.9004l-18.1992 -44.3008\r\n-c-3.90039 -9.89941 -19.5 -9.09961 -20.8008 3.10059l-4 31.8994l-7.5 -92.5996c-0.299805 -3 -3 -9.2998 -10.1992 -9.2998c-3 0 -9.80078 2.09961 -10.6006 9.2998c0 1.90039 0.600586 -5.7998 -6.2002 77.9004l-5.2998 -72.2002\r\n-c-1.09961 -4.7998 -4.7998 -9.2998 -10.5996 -9.2998c-2.90039 0 -9.7998 2 -10.6006 9.2998c0 1.89941 0.5 -6.7002 -5.7998 87.7002l-5.7998 -94.8008c0 -6.2998 -3.59961 -12.3994 -10.5996 -12.3994c-5.2002 0 -10.6006 4.09961 -10.6006 12l-5.7998 87.7002\r\n-c-5.7998 -92.5 -5.2998 -84 -5.2998 -85.9004c-1.10059 -4.7998 -4.7998 -9.2998 -10.6006 -9.2998c-3 0 -9.7998 2.09961 -10.5996 9.2998c0 0.700195 -0.400391 1.09961 -0.400391 2.59961l-6.19922 88.6006l-4.90039 -56.7002\r\n-c-0.700195 -6.5 -6.7002 -9.2998 -10.5996 -9.2998c-5.80078 0 -9.60059 4.09961 -10.6006 8.89941l-11.0996 76.4004c-2 -4 -3.5 -8.40039 -11.1006 -8.40039h-51.3994v21.3008h44.7998l13.7002 27.8994c4.39941 9.90039 18.2002 7.2002 19.8994 -2.7002l3.10059 -20.3994\r\n-l8.39941 97.8994c0 6 4.80078 10.6006 10.6006 10.6006c0.5 0 10.5996 0.200195 10.5996 -12.4004l4.90039 -69.0996l6.59961 92.5996c0 10.1006 9.5 10.6006 10.2002 10.6006c0.599609 0 10.5996 -0.700195 10.5996 -10.6006l5.30078 -80.5996l6.19922 97.8994\r\n-c0.100586 1.10059 -0.599609 10.3008 9.90039 11.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-sampling-plus\" unicode=\"&#xf4f1;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM355.4 189.7l58.3994 0.299805v-23.2002h-50.5l-18 -43.3994c-4.59961 -11 -20.8994 -8.7002 -22.2998 3.09961l-2.7002 22.2998l-6.7998 -83\r\n-c-1.09961 -14.0996 -22 -14.2002 -23.0996 0.100586l-4.90039 64.3994l-4.59961 -58.5996c-1.10059 -14.2998 -22.3008 -14.1006 -23.2002 0.200195l-4.5 71.7998l-4.90039 -80.5c-0.899414 -14.5 -22.2998 -14.5 -23.2002 -0.100586l-4.7998 73.3008l-4.59961 -70.4004\r\n-c-0.900391 -14.2998 -22.1006 -14.5 -23.2002 -0.0996094l-5.7002 78.2998l-3.7998 -43.6006c-1.2002 -13.6992 -21.0996 -14.1992 -23.0996 -0.699219l-10.7002 73.0996c-2 -3.90039 -6 -6.40039 -10.4004 -6.40039h-51.2998v23.2002h43.9004l13.1992 27.7002\r\n-c4.90039 10.2998 20.3008 8.09961 22 -3.2998l1.80078 -12.2002l7.69922 89.7998c1.2002 14.1006 22.1006 14.1006 23.2002 -0.200195l4.10059 -57l5.2998 80.2002c1 14.4004 22.2998 14.4004 23.2002 0l4.2998 -66.2998l5.09961 83.7002\r\n-c0.900391 14.3994 22.2998 14.5 23.2002 0l5.90039 -94.2998l3.5 44.8994c1.09961 14.2002 22.0996 14.2998 23.1992 0l5.2002 -68.7998l4.2998 51.4004c1.10059 13.7998 21.4004 14.2998 23.1006 0.399414l11 -92.7998l4 9.5c1.7002 4.40039 6 7.2002 10.7002 7.2002z\r\n-M277.4 184.5c4.09961 0 7.5 3.40039 7.5 7.5c0 4.2002 -3.40039 7.5 -7.5 7.5h-21.9004v21.9004c0 4.19922 -3.40039 7.5 -7.5 7.5s-7.5 -3.40039 -7.5 -7.5v-21.9004h-21.9004c-4.09961 0 -7.5 -3.40039 -7.5 -7.5c0 -4.2002 3.40039 -7.5 7.5 -7.5h21.9004v-21.9004\r\n-c0 -4.19922 3.40039 -7.5 7.5 -7.5c4.2002 0 7.5 3.40039 7.5 7.5v21.9004h21.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-share\" unicode=\"&#xf4f2;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM349.4 262.9c7.7998 0 13.6992 -6.10059 13.6992 -13.7002v-182.5c0 -7.7002 -6.09961 -13.7002 -13.6992 -13.7002h-135.101c-7.7002 0 -13.7002 6 -13.7002 13.7002v54h-54\r\n-c-7.7998 0 -13.6992 6 -13.6992 13.7002v182.5c0 8.19922 6.59961 12.6992 12.3994 13.6992h136.4c7.7002 0 13.7002 -6 13.7002 -13.6992v-54h54zM159.9 147.7h40.6992v101.399c0 7.40039 5.80078 12.6006 12 13.7002h55.8008v40.2998h-108.5v-155.399zM336.1 235.8h-108.5\r\n-v-155.399h108.5v155.399z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"creative-commons-zero\" unicode=\"&#xf4f3;\" horiz-adv-x=\"496\" \r\n-d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\r\n-c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM248 334.8c81.9004 0 102.5 -77.2998 102.5 -142.8s-20.5996 -142.8 -102.5 -142.8s-102.5 77.2998 -102.5 142.8s20.5996 142.8 102.5 142.8zM248 280.9\r\n-c-42.0996 0 -44.0996 -60.1006 -44.0996 -88.9004c0 -9.2998 0.199219 -21.7002 1.89941 -34.4004l54.5 100.2c5.7002 9.7998 2.7998 16.7998 -3.09961 21.9004c-2.7998 0.700195 -5.90039 1.2002 -9.2002 1.2002zM288.8 234.7l-60.8994 -105.2\r\n-c-12.5 -18.7002 6.59961 -26.4004 20.0996 -26.4004c42.0996 0 44.0996 60 44.0996 88.9004c0 11.2998 -0.399414 27.2998 -3.2998 42.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ebay\" unicode=\"&#xf4f4;\" horiz-adv-x=\"640\" \r\n-d=\"M606 258.5h34l-99.2002 -194.8h-35.8994l28.5 54.0996l-61.5 116.101c3.09961 -6.60059 4.7998 -14.5 4.7998 -23.8008v-65.5996c0 -9.2998 0.299805 -18.5996 1 -26.7998h-29.7998c-0.800781 6.89941 -1.10059 13.5996 -1.10059 20.2002\r\n-c-16.0996 -19.8008 -35.2998 -25.5 -61.8994 -25.5c-39.5 0 -60.6006 20.8994 -60.6006 45c0 3.19922 0.200195 6.19922 0.700195 9c-8.40039 -32.3008 -36.4004 -54.2002 -73.2998 -54.2002c-23.2998 0 -45.1006 8.2998 -58.7002 24.8994\r\n-c0 -6.59961 -0.400391 -13.1992 -1.09961 -19.5h-31.5c0.5 10.2002 1.09961 22.8008 1.09961 33.1006v169.5h32.0996v-80.6006c15.7002 18.7002 37.4004 24.2002 58.7002 24.2002c35.7002 0 75.4004 -24.0996 75.4004 -76.2002c0 -5.59961 -0.5 -11 -1.5 -16.1992\r\n-c7.09961 24.3994 34.2998 33.5 76.7002 34.3994c13.6992 0.299805 29 0.400391 41.6992 0.400391v3.39941c0 23.4004 -15 33 -41 33c-19.2998 0 -33.5996 -8 -35 -21.7998h-33.6992c3.59961 34.4004 39.6992 43.1006 71.5 43.1006c27.3994 0 51.7998 -7 63.2998 -26\r\n-l-10.9004 20.5996h37.5l54.9004 -109.9zM243.7 134.2c29.7998 0 50.2002 21.5 50.2002 53.7998c0 32.4004 -20.4004 53.7998 -50.2002 53.7998c-29.6006 0 -50.2002 -21.3994 -50.2002 -53.7998c0 -32.2998 20.5996 -53.7998 50.2002 -53.7998zM444.6 181.5v3.2998\r\n-c-11.7998 0 -26.2998 -0.0996094 -39.3994 -0.599609c-29.1006 -0.900391 -47.2002 -6.2002 -47.2002 -25.2998c0 -12.4004 9.90039 -25.8008 35 -25.8008c33.7002 0 51.5996 18.4004 51.5996 48.4004zM32.7002 179.9c3.5 -58.3008 79.2002 -57.4004 91.2002 -21.6006\r\n-h33.0996c-6.40039 -34.3994 -43 -46.0996 -74.4004 -46.0996c-57.1992 0 -82.5 31.5 -82.5 74c0 46.7998 26.2002 77.5996 83 77.5996c45.3008 0 78.4004 -23.7002 78.4004 -75.3994v-8.5h-128.8zM127.7 201.3c-2.2998 54.7002 -87.5 56.6006 -94.4004 0h94.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"keybase\" unicode=\"&#xf4f5;\" \r\n-d=\"M286.17 29c9.93652 0 18 -8.06445 18 -18s-8.06348 -18 -18 -18c-9.93555 0 -18 8.06445 -18 18s8.06445 18 18 18zM398.09 176.6c22.9102 -33.46 35.9102 -72.3398 35.9102 -110.92c0 -31.6797 -5 -60.6797 -14.5996 -86.2295\r\n-c-3.04004 -8.0498 -10.9502 -12.7197 -18.3701 -11.1504c-6.83984 1.24023 -11.1201 9.28027 -8.60059 15.7402c11.1904 28.71 14.8799 58.3398 14.8799 81.6396c-0.0517578 7.91797 -1.30566 20.6543 -2.7998 28.4307\r\n-c-0.649414 -1.06055 -1.12988 -2.2207 -1.84961 -3.2207c-17.29 -24.5293 -50.54 -33.8896 -84.7402 -23.8398c-78.8701 23.1699 -178.02 3.81055 -236.25 -38.5898l24.6602 74.1104l-46.8203 -59.8301c2.04297 -15.3486 9.10352 -39.1504 15.7598 -53.1299\r\n-c6.25 -13.1904 0.460938 -18.2402 -3.75 -20.1104c-4.76953 -2.12012 -13.8594 -2.7998 -19.6396 7.33008c-5.43652 9.81641 -11.96 26.6436 -14.5596 37.5596l-23.3203 -29.7998v33.6406c0 55.7695 0 125.109 62.6504 188.409c11.4258 11.5684 32.1631 27.4902 46.29 35.54\r\n-l-8.93066 0.540039c-27.8799 1.64062 -49.2402 24.8506 -47.6299 51.8506l2.36035 36.6797c0 -6.24023 0.139648 45.8799 50.75 45.8799c2.05957 0 -0.470703 0.120117 41.0596 -2.33008c2.31641 -0.15625 6.03027 -0.71582 8.29004 -1.25\r\n-c7.41992 11.3398 15.6504 22.8301 24.3398 34.8906l5.48047 7.55957l22.8994 -13.5195c-11.29 -24 -10 -33 -9.39941 -35c9.08008 0.229492 20 -1.6709 32.4102 -5.77051c29.6523 -9.84375 53.7188 -43.1914 53.7188 -74.4355\r\n-c0 -8.5127 -2.61621 -21.8154 -5.83887 -29.6943c6.18652 -2.13965 12.3135 -4.56348 18.3799 -7.27051c47.8896 -21.2598 77.7598 -59.0898 87.2598 -73.71zM142.37 319.42c1.55664 5.42773 4.69336 14.0156 7 19.1699l-29.1104 1.73047\r\n-c0.610352 -0.0507812 -12.2598 0.849609 -13.2598 -11.3203l-2.41016 -36.6602c-0.00585938 -0.143555 -0.0107422 -0.376953 -0.0107422 -0.520508c0 -6.50293 5.27344 -12 11.7705 -12.2695l22.3809 -1.33984c-0.380859 3.10645 -0.689453 8.16797 -0.689453 11.2969\r\n-c0 2.28809 0.165039 5.99414 0.369141 8.27344l-13.1299 0.779297l1.38965 21.79zM290.79 147.24c2.06152 1.58789 3.73438 4.9873 3.73438 7.58887c0 1.80273 -0.893555 4.42383 -1.99414 5.85059l-81.0898 96.3203c-1.71484 1.99023 -5.23828 3.60547 -7.86523 3.60547\r\n-c-1.99023 0 -4.87305 -1.00098 -6.43555 -2.23535c-2.05957 -1.58398 -3.73242 -4.97949 -3.73242 -7.57812c0 -1.7998 0.892578 -4.41699 1.99316 -5.8418c0.0898438 -0.140625 18.5996 -22.1406 18.5996 -22.1406l-16.9102 -13.29\r\n-c-1.59473 -1.22266 -2.88867 -3.8457 -2.88867 -5.85547c0 -1.37988 0.680664 -3.38867 1.51855 -4.48438c0.0800781 -0.109375 2.52246 -3.07324 3.7998 -4.5293c1.27832 -1.45703 3.8877 -2.63867 5.8252 -2.63867c1.4707 0 3.60547 0.734375 4.76562 1.63867\r\n-l17.0898 13.4492l14.1396 -16.7393l-34.5703 -27.1807c-1.58398 -1.22266 -2.86914 -3.83984 -2.86914 -5.84082c0 -1.38574 0.685547 -3.40039 1.5293 -4.49902l15.7803 -18.6396c1.33594 -1.55176 4.08203 -2.81055 6.12988 -2.81055\r\n-c1.54492 0 3.78516 0.775391 5 1.73047l34.4199 27l9.68066 -11.4902c1.7334 -1.98242 5.27832 -3.5918 7.91211 -3.5918c1.98438 0 4.86816 0.986328 6.4375 2.20215zM187.44 29c9.93555 0 18 -8.06445 18 -18s-8.06445 -18 -18 -18c-9.93652 0 -18 8.06445 -18 18\r\n-s8.06348 18 18 18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mastodon\" unicode=\"&#xf4f6;\" \r\n-d=\"M433 268.89c0 0 0.799805 -71.6992 -9 -121.5c-6.23047 -31.5996 -55.1104 -66.1992 -111.23 -72.8994c-20.0996 -2.40039 -93.1191 -14.2002 -178.75 6.7002v-0.339844c0 -3.75977 0.40332 -9.83496 0.900391 -13.5605c6.62988 -49.5996 49.2197 -52.5996 89.6299 -54\r\n-c40.8105 -1.2998 77.1201 10.0996 77.1201 10.0996l1.7002 -36.8994s-28.5098 -15.2998 -79.3203 -18.1006c-28.0098 -1.59961 -62.8193 0.700195 -103.33 11.4004c-112.229 29.7002 -105.63 173.4 -105.63 289.1c0 97.2002 63.7197 125.7 63.7197 125.7\r\n-c61.9209 28.4004 227.96 28.7002 290.48 0c0 0 63.71 -28.5 63.71 -125.7zM357.88 143.69c0 122 5.29004 147.71 -18.4199 175.01c-25.71 28.7002 -79.7197 31 -103.83 -6.10059l-11.5996 -19.5l-11.6006 19.5c-24.0098 36.9004 -77.9297 35 -103.83 6.10059\r\n-c-23.6094 -27.1006 -18.4092 -52.9004 -18.4092 -175h46.7295v114.2c0 49.6992 64 51.5996 64 -6.90039v-62.5098h46.3301v62.5c0 58.5 64 56.5996 64 6.89941v-114.199h46.6299z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"r-project\" unicode=\"&#xf4f7;\" horiz-adv-x=\"581\" \r\n-d=\"M581 221.4c0 -54.8008 -33.9004 -104.301 -88.4004 -139.7l67.4004 -113.7h-112l-40.0996 75.4004c-21.8008 -6.5 -45.1006 -11.2002 -69.4004 -13.9004v-61.5h-99.0996v61.9004c-136.101 16.0996 -239.4 95.6992 -239.4 191.5c0 107.5 130.1 194.6 290.5 194.6\r\n-s290.5 -87.0996 290.5 -194.6zM114.2 206.9c0 -52.8008 51.0996 -98.4004 125.2 -119.9v208.3h199s90.5996 -1.59961 90.5996 -87.8994c0 -86.3008 -86.5996 -92.7002 -86.5996 -92.7002s17.5996 -5.2998 27.7998 -10.5c1.7002 -0.799805 4 -2.10059 6.39941 -3.7002\r\n-c43.8008 21.4004 70.3008 56.2998 70.3008 106.4c0 92.2998 -90 133 -211.9 133s-220.8 -59.5 -220.8 -133zM339.3 168.6c49.6006 0 87.7998 -8.19922 87.7998 28.3008c0 34.0996 -30 27.2998 -87.7998 27.2998v-55.6006zM338.4 96.0996v-22.0996\r\n-c17.5996 0.0996094 34.5 1 50.5996 2.90039c-5.09961 7.5 -13.2002 19.1992 -24 19.1992h-26.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"researchgate\" unicode=\"&#xf4f8;\" \r\n-d=\"M0 416h448v-448h-448v448zM262.2 81.5996v7.30078c-10 0 -20 6.89941 -27.2002 14.6992c-12.2002 13.3008 -28.5996 34.7002 -42.2002 58.9004c22.5 5.2998 39.2002 26.4004 39.2002 47.5c0 31.2002 -24.2002 45.5996 -55.9004 45.5996\r\n-c-17.7998 0 -45.0996 -1.59961 -70.8994 -0.599609v-8.09961c15.5996 -2.90039 22 -1.30078 22 -23.9004v-109.4c0 -22.5996 -6.5 -21 -22 -23.8994v-8.10059c7.5 0.200195 20.5 0.800781 33.5996 0.800781c12.5 0 28.7002 -0.5 35.6006 -0.800781v8.10059\r\n-c-19.8008 2.7002 -25.8008 0.399414 -25.8008 23.8994v46.4004c6.7002 -0.599609 12.5 -0.599609 21.4004 -0.599609c16.9004 -30.3008 33 -53 42.2002 -63.6006c16.7998 -20.2002 43.3994 -17.2002 50 -14.2002zM285.1 216.6c38.7002 0 34 29.4004 34 49.9004h-30.3994\r\n-v-10.7002h17.8994c0 -15.8994 -7.39941 -26.7998 -21.5 -26.7998c-11.2998 0 -17.8994 9.90039 -17.8994 23.2998v26.7998c0 12.4004 11.7998 19.7002 19.7002 19.7002c14.1992 0 19.6992 -12.5 19.6992 -12.5l10.7002 7.2002s-5.2002 17.9004 -30.3994 17.9004\r\n-c-25.2002 0 -34 -18.2002 -34 -30.4004v-32.2002c0 -16.5 8.89941 -32.2002 32.1992 -32.2002zM168.6 171.9c-9.39941 0 -13.5996 0.299805 -20 0.799805v69.7002c6.40039 0.599609 15 0.599609 22.5 0.599609c23.3008 0 37.2002 -12.2002 37.2002 -34.5\r\n-c0 -21.9004 -15 -36.5996 -39.7002 -36.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"teamspeak\" unicode=\"&#xf4f9;\" horiz-adv-x=\"512\" \r\n-d=\"M244.2 101.21c-2.40039 -12.5 -10.6006 -20 -22.5 -24.2998c-9.2002 -3.2002 -50.1006 -1.60059 -61.7002 -1c-18 1.2998 -33.2002 8.5 -43.4004 24c-14.5 22.5 -19.5 47.7002 -14.5 73.8994c4.60059 24.5 24.6006 34.7002 46.3008 22.7002\r\n-c15.1992 -7.5 42.5 -27.3994 63.3994 -46.5996c20.4004 -18.7002 34.7998 -36.4004 32.4004 -48.7002zM449.2 80.4102c6.7002 -5.41016 11.2002 -22 11.5996 -32.1006c1 -50.3994 -23.8994 -68 -46.5996 -85.3994c-65.1006 -50 -295.101 -16.9004 -145.4 -6.40039\r\n-c127.4 9 164.101 96.1006 172.101 121.5c0.647461 1.99023 2.87109 3.60547 4.96387 3.60547c1.04102 0 2.53516 -0.540039 3.33594 -1.20508zM511.2 202.81c0 -17.1992 1.89941 -34.5996 -1 -51.6992c-4 -24.7002 -29.1006 -41.7002 -53.2002 -36.7002\r\n-c-7.2002 1.7002 -9.40039 7.2002 -9.40039 14.2002c0 28.0996 0.800781 56.3994 0 84.5996c-1.89941 75.79 -36.1992 132.79 -102.3 169.4c-111 60.3896 -253.2 -7 -277.8 -131.5c-6.09961 -30.4004 -1.7002 -48.3008 -3.7002 -125.801\r\n-c-0.299805 -7.19922 -4.2998 -11.1992 -12 -11.5c-30.7998 -1.39941 -51.7998 18.2002 -51.7998 49v20.9004l0.799805 26.4902c2.40039 15.5 10.7002 27 24.9004 34c3.5 1.7998 5.7002 3.5 6.39941 7.7998c6.10059 33.4102 19.5 64 39.3008 91.71\r\n-c2.2998 3.09961 4 5.2998 1 9.2998c-3.7002 5.40039 -1 10.2002 3 14.5c28.0996 31.7998 61.8994 55.1006 102 67.4004c96 29.4668 180.1 9.29688 252.3 -60.5098c6.7002 -6.40039 15.5 -12.9004 7 -24.4004c-1.2998 -1.7998 1.09961 -3.5 2.2002 -5\r\n-c17.2246 -23.209 35.3242 -65.1367 40.3994 -93.5898c0.900391 -3.7002 3 -5.10059 5.90039 -6.40039c17.3994 -8.7998 25.7002 -23.2998 26 -42.2002zM351.6 71.3096l-51.5996 7.7002c-22.7998 5.90039 -51 32.7002 22.2002 60.7998\r\n-c21.5996 8.5 85.7002 37.2002 87.7998 -8c0.900391 -32 -21.9004 -63.2998 -58.4004 -60.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"first-order-alt\" unicode=\"&#xf50a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -48.21c132.66 0 240.21 107.55 240.21 240.21s-107.55 240.21 -240.21 240.21s-240.21 -107.55 -240.21 -240.21s107.55 -240.21 240.21 -240.21z\r\n-M248 411.71c121.34 0 219.71 -98.3701 219.71 -219.71s-98.3701 -219.71 -219.71 -219.71s-219.71 98.3701 -219.71 219.71s98.3701 219.71 219.71 219.71zM248 -19.5098c116.81 0 211.51 94.7002 211.51 211.51s-94.7002 211.51 -211.51 211.51\r\n-s-211.51 -94.6895 -211.51 -211.51s94.7002 -211.51 211.51 -211.51zM434.23 143.47c-3.69141 -14.209 -12.709 -36.0225 -20.1309 -48.6895l-74.1299 35.8799l61.4805 -54.8203c-8.85352 -11.7021 -25.5195 -28.4082 -37.2002 -37.29l-54.7998 61.5703l35.8799 -74.2705\r\n-c-12.6445 -7.45215 -34.4307 -16.5156 -48.6299 -20.2295l-27.29 78.4697l4.79004 -82.9297c-8.61035 -1.17969 -17.4004 -1.7998 -26.3301 -1.7998s-17.7197 0.620117 -26.3301 1.7998l4.75977 82.46l-27.1494 -78.0303c-14.2021 3.70996 -35.998 12.7588 -48.6504 20.2002\r\n-l35.9297 74.3398l-54.8701 -61.6396c-11.6836 8.87988 -28.3584 25.582 -37.2197 37.2793l61.5898 54.9004l-74.2598 -35.9297c-7.42383 12.667 -16.4463 34.4795 -20.1396 48.6895l77.8398 27.1104l-82.2305 -4.75977c-1.15918 8.56934 -1.7793 17.3193 -1.7793 26.21\r\n-c0 9 0.629883 17.8398 1.81934 26.5098l82.3799 -4.76953l-77.9395 27.1592c3.71973 14.208 12.7822 36.0127 20.2295 48.6699l74.2207 -35.9199l-61.5205 54.8604c8.88086 11.6836 25.582 28.3584 37.2803 37.2197l54.7598 -61.5293l-35.8301 74.1699\r\n-c12.6562 7.41895 34.4521 16.4375 48.6504 20.1299l26.8701 -77.25l-4.70996 81.6094c8.60938 1.18066 17.3896 1.80078 26.3193 1.80078c8.93066 0 17.71 -0.620117 26.3203 -1.80078l-4.74023 -82.1592l27.0498 77.7598c17.2705 -4.5 33.6006 -11.3506 48.6309 -20.1699\r\n-l-35.8203 -74.1201l54.7197 61.4697c11.6924 -8.86133 28.376 -25.54 37.2402 -37.2295l-61.4502 -54.7705l74.1201 35.8604c7.43945 -12.6533 16.4893 -34.4492 20.2002 -48.6504l-77.8105 -27.0996l82.2402 4.75c1.19043 -8.66016 1.82031 -17.5 1.82031 -26.4902\r\n-c0 -8.87988 -0.610352 -17.6299 -1.78027 -26.1904l-82.1201 4.75z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fulcrum\" unicode=\"&#xf50b;\" horiz-adv-x=\"320\" \r\n-d=\"M95.75 283.86l-35.3799 -43.5508l-35.3701 43.5508l35.3799 43.5498zM144.23 448v-211.11l-41.0801 -44.8896l41.0801 -44.8896v-211.11l-20.5107 198.18l-51 57.8203l50.9707 57.8203zM223.9 283.86l35.3799 43.5498l35.3799 -43.5498l-35.3799 -43.5508zM175.42 236.86\r\n-v211.14l20.5801 -198.18l51 -57.8203l-51 -57.8203l-20.5801 -198.18v211.11l41.0801 44.8896z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"galactic-republic\" unicode=\"&#xf50c;\" horiz-adv-x=\"496\" \r\n-d=\"M248 -56c-136.75 0 -248 111.25 -248 248s111.25 248 248 248s248 -111.25 248 -248s-111.25 -248 -248 -248zM248 423.47c-127.63 0 -231.47 -103.84 -231.47 -231.47s103.84 -231.47 231.47 -231.47s231.47 103.84 231.47 231.47s-103.84 231.47 -231.47 231.47z\r\n-M275.62 401.66c37.6602 -4.91016 72.21 -19.7402 100.96 -41.7998l-17.3896 -17.3604c-20.6758 15.3154 -58.1152 30.7891 -83.5703 34.54v24.6201zM220.25 401.59v-24.54c-30.9697 -4.60938 -59.4502 -16.8301 -83.5195 -34.6699h-0.0800781l-17.2803 17.3604\r\n-c28.7197 22.0498 63.2402 36.9102 100.88 41.8496zM232.5 351.42h31v-82.8604c10.0498 -2.0293 19.3701 -6.00977 27.6201 -11.5l58.6699 58.6709l21.9297 -21.9307l-58.6699 -58.6699c5.46973 -8.24023 9.48047 -17.5996 11.5 -27.6201h82.8701v-31h-82.8701\r\n-c-2.03027 -10.0195 -6.04004 -19.3096 -11.5 -27.54l58.6699 -58.6895l-21.9297 -21.9307l-58.6699 58.6904c-8.25 -5.49023 -17.5703 -9.52051 -27.6201 -11.5498v-82.9004h-31v82.9004c-8.25781 1.66895 -20.6533 6.80762 -27.6699 11.4697l-58.6201 -58.6201\r\n-l-21.9297 21.9297l58.6699 58.6904c-5.45996 8.23047 -9.4502 17.5205 -11.4697 27.54h-82.9004v31h82.9004c2.01953 10.0303 6 19.3896 11.4697 27.6201l-58.6699 58.6699l21.9297 21.9297l58.6201 -58.5898c8.25 5.48047 17.6299 9.38965 27.6699 11.4199v82.8701z\r\n-M415.74 320.7c22.0996 -28.7402 36.9795 -63.3398 41.9297 -101.03h-24.6201c-3.7832 25.4902 -19.3154 62.9746 -34.6699 83.6699zM80.1904 320.57l17.3896 -17.3906c-17.8301 -24.0693 -29.9902 -52.5596 -34.5898 -83.5195h-24.6504\r\n-c4.94043 37.6494 19.79 72.1895 41.8506 100.91zM38.3398 164.33l24.6504 0.00976562c4.58984 -30.9502 16.7002 -59.4502 34.5098 -83.5195l-17.3604 -17.3906c-22.0498 28.7207 -36.8799 63.2607 -41.7998 100.9zM433.04 164.33h24.6201\r\n-c-4.9502 -37.6699 -19.8506 -72.2197 -41.9297 -100.96l-17.3604 17.3604c17.8701 24.0996 30.0596 52.6094 34.6699 83.5996zM136.66 41.6201c24.0703 -17.8604 52.6094 -30.0205 83.5996 -34.6504v-24.6396c-37.6602 4.9502 -72.2295 19.8398 -100.96 41.9297z\r\n-M359.19 41.5703h0.0791016l17.3105 -17.3906c-28.75 -22.0596 -63.29 -36.9297 -100.96 -41.8496v24.5703c30.9902 4.58984 59.4795 16.8301 83.5703 34.6699z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"galactic-senate\" unicode=\"&#xf50d;\" horiz-adv-x=\"512\" \r\n-d=\"M249.86 414.52h12.2793v-26.0693c13.5801 -20.6201 23.8604 -108.59 24.4902 -215.351c-11.7402 15.6201 -19.1299 33.3301 -19.1299 48.2402v16.8799c0.0302734 5.32031 -0.75 10.5303 -2.19043 15.6504c-0.649414 2.13965 -1.38965 4.07031 -2.61914 5.82031\r\n-c-1.23047 1.73926 -3.44043 3.79004 -6.68066 3.79004c-3.25 0 -5.4502 -2.04004 -6.67969 -3.79004c-1.23047 -1.74023 -1.96973 -3.68066 -2.62012 -5.82031c-1.44043 -5.12012 -2.21973 -10.3301 -2.19043 -15.6504v-16.8799\r\n-c0 -14.9102 -7.38965 -32.6201 -19.1299 -48.2402c0.610352 106.761 10.8906 194.73 24.4707 215.351v26.0693zM223.52 266.75c-1.59961 -22.4004 -2.75 -46.5195 -3.47949 -72.0703c-23.2998 -11.2793 -40.7705 -33.1602 -46.3203 -59.5098\r\n-c-7.71973 -2.25977 -22.71 -3.91992 -40.4893 -4.21973c-7.51074 3.66016 -16.5 5.85938 -26.1807 6.04004c1.90039 14.9102 5.87012 29.1699 11.6504 42.4199c15.4395 -8.10059 30.9297 -8.66016 35.4697 -0.959961c4.57031 7.74023 -3.58984 21.04 -18.3203 30.6602\r\n-c8.68066 11.7695 18.9805 22.2998 30.5605 31.0898c9.50977 -15.5898 23.3594 -24.4404 31.3594 -19.8203c8.05078 4.65039 7.19043 21.1699 -1.70996 37.29c8.76074 3.88965 17.9404 6.92969 27.46 9.08008zM288.48 266.75\r\n-c7.82227 -1.75977 20.1201 -5.82812 27.4492 -9.08008c-8.89941 -16.1299 -9.75977 -32.6396 -1.70996 -37.29c8 -4.62012 21.8506 4.23047 31.3604 19.8203c11.5801 -8.79004 21.8799 -19.3203 30.5596 -31.0898c-14.7197 -9.61035 -22.8896 -22.9199 -18.3193 -30.6602\r\n-c4.54004 -7.7002 20.0293 -7.14062 35.4697 0.959961c5.79004 -13.25 9.75 -27.5098 11.6504 -42.4199c-9.68066 -0.19043 -18.6709 -2.37988 -26.1807 -6.04004c-17.7793 0.299805 -32.7695 1.95996 -40.4902 4.21973c-5.5498 26.3496 -23.0293 48.2305 -46.3193 59.5098\r\n-c-0.719727 25.5508 -1.87988 49.6699 -3.46973 72.0703zM256 258.15c3.23047 0 5.86035 -8.81055 6.08984 -19.9307h0.0498047v-16.8799c0 -41.4199 49.0107 -95.04 93.4902 -95.04c52 0 122.76 1.4502 156.37 -29.1699v-2.50977\r\n-c-9.41992 -17.1104 -20.5801 -33.1699 -33.1797 -47.9697c-12.5303 21.0898 -51.5898 40.96 -108.021 41.3496c-45.6797 -1.01953 -79.0195 -20.3301 -90.7598 -40.8701c-0.00976562 -0.00976562 0.00976562 -0.0400391 0 -0.0498047\r\n-c-7.66992 -2.13965 -15.8496 -3.23047 -24.04 -3.20996c-8.19043 -0.0205078 -16.3701 1.07031 -24.04 3.20996c-0.00976562 0.00976562 0.00976562 0.0400391 0 0.0498047c-11.7295 20.54 -45.0801 39.8506 -90.7598 40.8701\r\n-c-56.4307 -0.400391 -95.5 -20.2598 -108.021 -41.3496c-12.5996 14.7998 -23.7598 30.8496 -33.1797 47.9697v2.50977c33.6201 30.6201 104.37 29.1699 156.37 29.1699c44.4795 0 93.4902 53.6201 93.4902 95.04v16.8799h0.0498047\r\n-c0.229492 11.1201 2.85938 19.9307 6.08984 19.9307zM256 161.56c-22.4199 0 -40.5996 -18.1797 -40.5996 -40.5996s18.1797 -40.6504 40.5996 -40.6504s40.5996 18.2305 40.5996 40.6504s-18.1797 40.5996 -40.5996 40.5996zM256 153.92\r\n-c18.1904 0 32.96 -14.7695 32.96 -32.96s-14.7695 -32.96 -32.96 -32.96s-32.96 14.7695 -32.96 32.96s14.7695 32.96 32.96 32.96zM256 147.78c-14.8096 0 -26.8203 -12.0107 -26.8203 -26.8203s12.0107 -26.8203 26.8203 -26.8203s26.8203 12.0107 26.8203 26.8203\r\n-s-12.0107 26.8203 -26.8203 26.8203zM141.2 81.1104c18.75 -0.419922 35.1895 -4.18066 48.6094 -9.66992c12.5508 -16.0303 29.1602 -30.04 49.5801 -33.0703c0.100586 -0.00976562 0.169922 -0.0302734 0.270508 -0.0498047\r\n-c0.0498047 -0.0107422 0.109375 -0.0400391 0.160156 -0.0507812c5.23926 -1.06934 10.6396 -1.59961 16.1895 -1.59961c5.56055 0 10.9502 0.530273 16.1904 1.59961c0.0498047 0.0107422 0.109375 0.0400391 0.160156 0.0507812\r\n-c0.0996094 0.00976562 0.179688 0.0292969 0.269531 0.0498047c20.4199 3.04004 37.04 17.04 49.5801 33.0703c13.4199 5.5 29.8496 9.25 48.6104 9.66992c10.1797 -0.0800781 21.5996 -0.360352 30.5 -1.66016c-0.430664 -4.41992 -1.51074 -18.6299 -7.11035 -29.7598\r\n-c-9.11035 2.55957 -18.3604 3.89941 -27.6201 3.89941c-41.2803 -0.939453 -71.4795 -34.3496 -78.2598 -74.4697l-0.110352 -4.7002c-10.3994 -1.91992 -21.1797 -2.93945 -32.21 -2.93945c-11.0195 0 -21.8096 1.0293 -32.21 2.93945l-0.109375 4.7002\r\n-c-6.78027 40.1201 -36.9805 73.5303 -78.2607 74.4697c-9.25977 0 -18.5098 -1.33984 -27.6201 -3.89941c-5.59961 11.1299 -6.67969 25.3398 -7.10938 29.7598c8.89941 1.2998 20.3096 1.58984 30.5 1.66016z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jedi-order\" unicode=\"&#xf50e;\" \r\n-d=\"M398.5 74.4004c0 0 26.2998 16.1992 49.9004 77.6992c0 0 -17 -183.3 -222 -185.699h-4.10059c-205.1 2.39941 -222 185.699 -222 185.699c23.2002 -61.5996 49.4004 -77.6992 49.4004 -77.6992c-95.9004 122.1 -17.2002 233.1 -17.2002 233.1\r\n-c-45.4004 -85.7002 41.4004 -170.5 41.4004 -170.5c-105 171.6 60.5 271.5 60.5 271.5c-96.9004 -72.5996 10.0996 -190.7 10.0996 -190.7c-85.7998 -158.399 68.5996 -230.1 68.5996 -230.1s0.400391 16.8994 2.2002 85.7002l-34.5 -36.2002l24.2002 47.3994\r\n-l-62.5996 9.10059l62.5996 9.09961l-20.2002 55.5l31.4004 -45.8994c2.2998 87.8994 7.89941 305.899 7.89941 306.899v2.40039v-1v1v-2.40039c0.100586 -1.7998 5.7002 -219.2 7.90039 -306.899l31.4004 45.8994l-20.2002 -55.5l62.5996 -9.09961l-62.5996 -9.10059\r\n-l24.2002 -47.3994s-30.2002 31.7002 -34.5 36.2002c1.7998 -68.8008 2.19922 -85.7002 2.19922 -85.7002s154.4 71.7002 68.6006 230.1c0 0 107 118 10.0996 190.7c0 0 165.5 -100 60.5 -271.5c0 0 86.7998 84.7002 41.4004 170.5c0 0 78.7002 -111 -17.2002 -233.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mandalorian\" unicode=\"&#xf50f;\" \r\n-d=\"M232.27 -63.8896c-1 3.25977 -1.68945 15.8301 -1.38965 24.5801c0.549805 15.8896 1 24.7197 1.40039 28.7598c0.639648 6.2002 2.87012 20.7197 3.2793 21.3799c0.600586 1 0.400391 27.8701 -0.239258 33.1299c-0.310547 2.58008 -0.629883 11.9004 -0.69043 20.7305\r\n-c-0.129883 16.4697 -0.530273 20.1191 -2.72949 24.7598c-1.10059 2.31934 -1.23047 3.83984 -1 11.4297c0.0449219 1.07324 0.0820312 2.81641 0.0820312 3.89062c0 2.43945 -0.189453 6.39062 -0.422852 8.81934c-2 13 -3.45996 27.7002 -3.25 33.9004\r\n-s0.430664 7.14941 2.06055 9.66992c3.0498 4.70996 6.50977 14 8.62012 23.2695c2.25977 9.86035 3.87988 17.1807 4.58984 20.7402c0.921875 4.24121 2.90137 10.9834 4.41992 15.0498c2.26953 6.25 2.49023 15.3906 0.370117 15.3906\r\n-c-0.299805 0 -1.37988 -1.2207 -2.41016 -2.70996c-1.03027 -1.49023 -4.75977 -4.80078 -8.29004 -7.36035c-8.37012 -6.08008 -11.7002 -9.38965 -12.6602 -12.5801s-1 -7.22949 -0.160156 -7.75977c0.34082 -0.209961 1.29004 -2.40039 2.11035 -4.87988\r\n-c0.791992 -2.41602 1.43457 -6.43945 1.43457 -8.98145c0 -1.78223 -0.320312 -4.64062 -0.714844 -6.37891c-0.389648 -1.76953 -1 -5.46973 -1.45996 -8.22949c-0.459961 -2.76074 -1 -6.46094 -1.25 -8.2207c-0.149414 -1.27637 -0.84375 -3.18555 -1.5498 -4.25977\r\n-c-1 -1 -1.13965 -0.910156 -2.0498 0.530273c-0.619141 1.24316 -1.26465 3.37109 -1.44043 4.75c-0.25 1.73926 -1.62988 7.10938 -3.08008 11.9297c-3.2793 10.9004 -3.51953 16.1504 -1 21c0.683594 1.19141 1.43164 3.25684 1.66992 4.61035\r\n-c0 2.38965 -2.19922 5.31934 -7.40918 9.88965c-7 6.17969 -8.62988 7.91992 -10.2305 11.2998c-1.70996 3.60059 -3.05957 4.06055 -4.54004 1.54004c-1.78027 -3 -2.59961 -9.10938 -3 -22l-0.339844 -12.1895l2 -2.25c3.20996 -3.7002 12.0703 -16.4502 13.7803 -19.8301\r\n-c3.41016 -6.74023 4.33984 -11.6904 4.41016 -23.5605c0.0693359 -11.8701 0.949219 -22.75 2 -24.71c0.359375 -0.660156 0.509766 -1.34961 0.339844 -1.51953s0.410156 -2.08984 1.29004 -4.27051c0.871094 -2.41406 1.79395 -6.44629 2.05957 -9\r\n-c0.306641 -2.88867 1.07227 -7.53516 1.70996 -10.3701c2.23047 -9.55957 2.77051 -14.0801 2.39062 -20.1396c-0.200195 -3.26953 -0.530273 -11.0703 -0.730469 -17.3203c-1.30957 -41.7598 -1.84961 -58 -2 -61.21c-0.120117 -2 -0.389648 -11.5098 -0.599609 -21.0693\r\n-c-0.360352 -16.3008 -1.30078 -27.3701 -2.41992 -28.6504c-0.640625 -0.729492 -8.07031 4.91016 -12.5205 9.49023c-3.75 3.87012 -4 4.79004 -2.83008 9.9502c0.700195 3 2.25977 18.29 3.33008 32.6191c0.360352 4.78027 0.80957 10.5 1 12.7109\r\n-c0.830078 9.36914 1.66016 20.3496 2.61035 34.7793c0.55957 8.45996 1.33008 16.4404 1.71973 17.7305s0.889648 9.88965 1.12988 19.1094l0.429688 16.7705l-2.25977 4.2998c-1.71973 3.28027 -4.87012 6.94043 -13.2197 15.3398\r\n-c-6 6.07031 -11.8398 12.2998 -12.9102 13.8506l-1.9502 2.80957l0.75 10.9004c1.08984 15.71 1.10059 48.5693 0 59.0596l-0.889648 8.7002l-3.28027 4.51953c-5.85938 8.08008 -5.7998 7.75 -6.21973 33.2705c-0.100586 6.07031 -0.379883 11.5 -0.629883 12.0596\r\n-c-0.830078 1.87012 -3.0498 2.66016 -8.54004 3.05078c-8.86035 0.619141 -11 1.89941 -23.8506 14.5498c-6.14941 6 -12.3398 12 -13.75 13.1895c-2.80957 2.41992 -2.79004 2 -0.55957 9.62988l1.34961 4.65039l-1.68945 3c-0.630859 1.17676 -1.79102 3 -2.58984 4.07031\r\n-c-1.33008 1.50977 -5.5 10.8896 -6 13.4893c-0.0859375 0.307617 -0.155273 0.816406 -0.155273 1.13574c0 0.868164 0.458984 2.10645 1.02539 2.76465c2.22949 2.86035 3.39941 5.67969 4.44922 10.7305c2.33008 11.1895 7.74023 26.0898 10.6006 29.2197\r\n-c3.17969 3.46973 7.7002 1 9.41016 -5c1.33984 -4.79004 1.36914 -9.79004 0.0996094 -18.5498c-0.445312 -3.05176 -0.893555 -8.02832 -1 -11.1104c0 -4 0.19043 -4.69043 2.25 -7.38965c3.33008 -4.37012 7.72949 -7.41016 15.2002 -10.5205\r\n-c1.41992 -0.591797 3.53418 -1.86914 4.71973 -2.84961c11.1699 -10.7207 18.6201 -16.1807 22.9502 -16.8506c5.17969 -0.799805 8 -4.54004 10 -13.3896c1.30957 -5.65039 4 -11.1396 5.45996 -11.1396c0.994141 0.203125 2.48633 0.826172 3.33008 1.38965\r\n-c2 1.21973 2.25 1.73047 2.25 4.17969c-0.21875 4.96191 -1.11523 12.9541 -2 17.8398c-0.370117 1.66016 -0.780273 4.06055 -0.930664 5.35059c-0.149414 1.29004 -0.609375 3.84961 -1 5.68945c-2.5498 11.1602 -3.64941 15.46 -4.09961 16\r\n-c-1.5498 2 -4.08008 10.2002 -4.92969 15.9209c-1.64062 11.1094 -4 14.2295 -12.9102 17.3896c-4.0791 1.50293 -10.0547 5.0332 -13.3398 7.87988c-1.15039 1 -4 3.21973 -6.35059 5.05957c-2.34961 1.84082 -4.40918 3.53027 -4.59961 3.76074\r\n-c-0.701172 0.606445 -1.90625 1.50293 -2.69043 2c-6.23926 4.21973 -8.83984 7 -11.2598 12l-2.43945 5l-0.220703 13l-0.219727 13l6.91016 6.5498c3.9502 3.75 8.47949 7.34961 10.5898 8.42969c3.30957 1.69043 4.4502 1.89062 11.3701 2\r\n-c8.53027 0.19043 10.1201 0 11.6602 -1.55957c1.54004 -1.56055 1.35938 -6.40039 -0.290039 -8.5c-0.501953 -0.564453 -1.10156 -1.60352 -1.33984 -2.32031c0 -0.580078 -2.61035 -4.91016 -5.41992 -9c-0.879883 -1.80371 -1.94141 -4.85938 -2.37012 -6.82031\r\n-c20.4395 -13.3896 21.5498 -3.76953 14.0693 -29l11.3604 -2.51953c3.11035 8.66016 6.46973 17.2598 8.61035 26.2197c0.290039 7.62988 -12 4.19043 -15.4004 8.68066c-2.33008 5.92969 3.12988 14.1797 6.05957 19.1992c1.60059 2.33984 6.62012 4.7002 8.82031 4.15039\r\n-c0.879883 -0.219727 4.16016 0.349609 7.37012 1.28027c2.04395 0.641602 5.42676 1.39453 7.5498 1.67969c1.69336 0.183594 4.38184 0.760742 6 1.29004c3.65039 1.11035 4.5 1.16992 6.35059 0.400391c1.56738 -0.539062 4.1748 -1.14844 5.81934 -1.36035\r\n-c1.74902 -0.236328 4.43652 -1.0918 6 -1.91016c1.30762 -0.765625 3.54785 -1.73828 5 -2.16992c2.51074 -0.679688 3 -0.570312 7.05078 1.66992l4.34961 2.40039l10.7402 0.389648c10.4395 0.400391 10.8096 0.469727 15.2598 2.67969l4.58008 2.32031l2.45996 -1.42969\r\n-c1.75977 -1 3.13965 -2.73047 4.84961 -6c2.36035 -4.51074 2.37988 -4.58008 1.37012 -7.37012c-0.879883 -2.44043 -0.889648 -3.2998 -0.0996094 -6.39062c0.435547 -1.68164 1.37695 -4.3291 2.09961 -5.90918c0.535156 -1.04785 1.12207 -2.83984 1.31055 -4\r\n-c0.30957 -4.33008 0 -5.30078 -2.41016 -6.91992c-2.16992 -1.4707 -7 -7.91016 -7 -9.34082c-0.206055 -0.859375 -0.685547 -2.2041 -1.07031 -3c-5 -11.5098 -6.75977 -13.5596 -14.2598 -17c-9.2002 -4.19922 -12.2998 -5.18945 -16.21 -5.18945\r\n-c-3.10059 0 -4 -0.25 -4.54004 -1.25977c-0.972656 -1.19629 -2.80566 -2.8584 -4.08984 -3.70996c-1.53223 -1.02344 -3.49512 -3.16504 -4.37988 -4.78027c-0.411133 -1.04004 -1.52734 -2.34375 -2.49023 -2.91016\r\n-c-0.78125 -0.321289 -1.87891 -1.08789 -2.4502 -1.70996c-1.83496 -1.61133 -4.9707 -4.02148 -7 -5.37988c-3.33008 -2.33984 -6.87012 -5 -7.87012 -6c-0.560547 -0.604492 -1.62695 -1.36621 -2.37988 -1.7002c-0.697266 -0.314453 -1.65137 -1.05273 -2.12988 -1.65039\r\n-c-1.31055 -1.38965 -1.49023 -2.10938 -1.13965 -4.59961c0.255859 -1.65527 0.892578 -4.29004 1.41992 -5.87988c1.31934 -3.7998 1.30957 -7.86035 0 -10.5703c-1.31055 -2.70996 -0.890625 -6.64941 1.34961 -9.58984c2 -2.62988 2.16016 -4.55957 0.709961 -8.83984\r\n-c-0.587891 -2.27344 -1.06445 -6.02344 -1.06445 -8.37109c0 -0.148438 0.00195312 -0.390625 0.00488281 -0.539062c0 -4.87988 0.219727 -6.28027 1.45996 -8.37988c1.23926 -2.09961 1.81934 -2.48047 3.23926 -2.32031c2 0.230469 2.30078 1.0498 4.70996 12.1201\r\n-c2.18066 10 3.70996 11.9199 13.7607 17.0801c2.93945 1.50977 7.45996 4 10 5.44043c2.54004 1.43945 6.79004 3.68945 9.37012 4.90918c4.99414 2.18652 11.8125 7.41504 15.2197 11.6709c7.10938 8.78906 10 16.2197 12.8496 33.2998\r\n-c0.298828 2.31445 1.58008 5.77832 2.86035 7.72949c1.19434 1.86133 2.48828 5.13574 2.88965 7.31055c1 5.2998 2.85059 9.08008 5.58008 11.5098c4.7002 4.17969 6 1.08984 4.58984 -10.8701c-0.459961 -3.86035 -1.09961 -10.3301 -1.43945 -14.3799l-0.610352 -7.36035\r\n-l4.4502 -4.08984l4.4502 -4.08984l0.109375 -8.41992c0.0605469 -4.62988 0.470703 -9.53027 0.919922 -10.8896l0.820312 -2.4707l-6.42969 -6.2793c-8.54004 -8.33008 -12.8799 -13.9307 -16.7598 -21.6104c-1.77051 -3.49023 -3.74023 -7.11035 -4.38086 -8\r\n-c-2.17969 -3.11035 -6.45996 -13 -8.75977 -20.2598l-2.29004 -7.2207l-7 -6.48926c-3.83008 -3.57031 -8 -7.25 -9.16992 -8.16992c-3.0498 -2.32031 -4.25977 -5.15039 -4.25977 -10c-0.00683594 -0.166992 -0.0126953 -0.438477 -0.0126953 -0.605469\r\n-c0 -1.94336 0.717773 -4.9248 1.60254 -6.65527c0.660156 -1.29688 1.59668 -3.45996 2.08984 -4.83008c0.290039 -0.875 0.993164 -2.16992 1.57031 -2.88965c1.40039 -1.58984 1.91992 -16.1201 0.830078 -23.2197c-0.679688 -4.48047 -3.62988 -12 -4.7002 -12\r\n-c-1.79004 0 -4.05957 -9.27051 -5.07031 -20.7402c-0.179688 -2 -0.620117 -5.94043 -1 -8.7002s-1 -10 -1.34961 -16.0498c-0.770508 -12.2197 -0.19043 -18.7705 2 -23.1504c3.41016 -6.68945 0.519531 -12.6895 -11 -22.8398l-4 -3.49023l0.0703125 -5.18945\r\n-c0.0439453 -2.4834 0.554688 -6.45703 1.13965 -8.87012c4.61035 -16 4.73047 -16.9199 4.37988 -37.1299c-0.459961 -26.4004 -0.259766 -40.2705 0.629883 -44.1504c0.410156 -1.91406 0.893555 -5.05078 1.08008 -7c0.169922 -2 0.660156 -5.33008 1.08008 -7.35938\r\n-c0.469727 -2.26074 0.780273 -11 0.790039 -22.7402v-19.0605l-1.80957 -2.62988c-2.70996 -3.91016 -15.1104 -13.54 -15.4902 -12.29zM261.8 -18.7803c-0.179688 0.299805 -0.330078 6.87012 -0.330078 14.5898c0 14.0605 -0.889648 27.54 -2.25977 34.4502\r\n-c-0.400391 2 -0.80957 9.7002 -0.900391 17.0605c-0.149414 11.9297 -1.39941 24.3701 -2.63965 26.3799c-0.660156 1.06934 -3 17.6602 -3 21.2998c0 4.23047 1 6 5.28027 9.12988s4.85938 3.13965 5.47949 0.719727c0.280273 -1.09961 1.4502 -5.61914 2.60059 -10\r\n-c3.92969 -15.1191 4.13965 -16.2695 4.0498 -21.7393c-0.0996094 -5.78027 -0.129883 -6.12988 -1.74023 -17.7305c-1 -7.07031 -1.16992 -12.3896 -1 -28.4297c0.169922 -19.4004 -0.639648 -35.7305 -2 -41.2705c-0.709961 -2.7793 -2.7998 -5.47949 -3.42969 -4.42969z\r\n-M190.8 18.7998c-0.638672 2.95215 -1.41406 7.78613 -1.72949 10.79s-1.09082 7.83789 -1.73047 10.79c-0.433594 1.76758 -0.880859 4.6748 -1 6.49023c-0.30957 3.18945 -0.910156 7.45996 -1.33008 9.47949c-1 4.79004 -3.34961 19.3506 -3.41992 21.0703\r\n-c0 0.740234 -0.339844 4.0498 -0.700195 7.36035c-0.669922 6.20996 -0.839844 27.6699 -0.219727 28.29c1 1 6.62988 -2.76074 11.3301 -7.43066l5.28027 -5.25l-0.450195 -6.46973c-0.25 -3.55957 -0.599609 -10.2295 -0.780273 -14.8301\r\n-c-0.179688 -4.59961 -0.490234 -9.87012 -0.669922 -11.71s-0.610352 -9.36035 -0.939453 -16.7197c-0.790039 -17.4102 -1.94043 -31.29 -2.65039 -32c-0.101562 -0.107422 -0.302734 -0.193359 -0.450195 -0.193359c-0.208008 0 -0.454102 0.149414 -0.549805 0.333008\r\n-h0.00976562zM103.62 285.39c21.0703 -12.79 17.8398 -14.1494 28.4902 -17.6592c13 -4.29004 18.8701 -7.13086 23.1494 -16.8701c-43.6602 -36.1406 -69.0098 -57.8604 -76.71 -70.8604c-31 -52 -6 -101.59 62.75 -87.21c-14.1797 -29.2305 -78 -28.6299 -98.6797 4.90039\r\n-c-24.6797 39.9492 -22.0898 118.3 61 187.659v0.0400391zM314.41 106.39c56.6602 -6.87988 82.3203 37.7402 46.54 89.2305c0 0 -26.8701 29.3398 -64.2803 68c3 15.4502 9.49023 32.1201 30.5703 53.8203c89.2002 -63.5107 92 -141.61 92.46 -149.36\r\n-c4.2998 -70.6396 -78.7002 -91.1797 -105.29 -61.71v0.0195312z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"old-republic\" unicode=\"&#xf510;\" horiz-adv-x=\"496\" \r\n-d=\"M235.76 437.77c7.5 0.310547 15 0.280273 22.5 0.0908203c3.61035 -0.140625 7.2002 -0.400391 10.79 -0.730469c4.91992 -0.269531 9.79004 -1.03027 14.6699 -1.62012c2.93066 -0.429688 5.83008 -0.979492 8.75 -1.45996\r\n-c7.90039 -1.33008 15.6699 -3.28027 23.3906 -5.39941c12.2393 -3.4707 24.1895 -7.91992 35.7598 -13.21c26.5596 -12.2402 50.9395 -29.21 71.6299 -49.8809c20.0303 -20.0898 36.7197 -43.5498 48.8896 -69.1895c1.12988 -2.58984 2.44043 -5.10059 3.4707 -7.74023\r\n-c2.80957 -6.42969 5.38965 -12.9697 7.58008 -19.6299c4.13965 -12.3301 7.33984 -24.9902 9.41992 -37.8301c0.569336 -3.13965 1.04004 -6.2998 1.39941 -9.46973c0.549805 -3.83008 0.94043 -7.69043 1.18066 -11.5605\r\n-c0.829102 -8.33984 0.839844 -16.7295 0.769531 -25.0996c-0.0703125 -4.96973 -0.259766 -9.94043 -0.75 -14.8896c-0.240234 -3.38086 -0.509766 -6.76074 -0.979492 -10.1201c-0.390625 -2.7207 -0.630859 -5.45996 -1.11035 -8.16992\r\n-c-0.900391 -5.15039 -1.7002 -10.3105 -2.87012 -15.4102c-4.09961 -18.5 -10.2998 -36.5498 -18.5098 -53.6299c-15.7705 -32.8301 -38.8301 -62.1699 -67.1201 -85.1201c-14.3926 -11.7676 -39.8887 -27.3848 -56.9102 -34.8604\r\n-c-6.20996 -2.67969 -12.46 -5.25 -18.8701 -7.41016c-3.50977 -1.16016 -7.00977 -2.37988 -10.5703 -3.38965c-6.61914 -1.87988 -13.2891 -3.63965 -20.0391 -5c-4.66016 -0.910156 -9.34082 -1.73047 -14.0303 -2.48047c-5.25 -0.65918 -10.5 -1.43945 -15.79 -1.73926\r\n-c-6.69043 -0.660156 -13.4102 -0.839844 -20.1201 -0.810547c-6.82031 -0.0292969 -13.6504 0.120117 -20.4502 0.790039c-3.29004 0.230469 -6.57031 0.5 -9.83008 0.950195c-2.71973 0.389648 -5.45996 0.629883 -8.16992 1.11035\r\n-c-4.12012 0.719727 -8.25 1.37012 -12.3496 2.21973c-4.25 0.939453 -8.49023 1.88965 -12.6904 3.01953c-8.62988 2.16992 -17.0801 5.01074 -25.4102 8.13086c-10.4893 4.11914 -20.79 8.75 -30.6396 14.25c-2.13965 1.14941 -4.28027 2.28906 -6.34961 3.56934\r\n-c-11.2207 6.58008 -21.8604 14.1006 -31.9199 22.3398c-34.6807 28.4102 -61.4102 66.4307 -76.3506 108.7c-3.08984 8.74023 -5.70996 17.6504 -7.7998 26.6797c-1.48047 6.16016 -2.52051 12.4209 -3.58008 18.6602\r\n-c-0.400391 2.35059 -0.610352 4.73047 -0.950195 7.08984c-0.599609 3.96094 -0.75 7.96094 -1.16992 11.9404c-0.799805 9.46973 -0.709961 18.9902 -0.509766 28.4902c0.139648 3.50977 0.339844 7.00977 0.700195 10.5098\r\n-c0.30957 3.16992 0.459961 6.37012 0.919922 9.52051c0.410156 2.80957 0.649414 5.64941 1.16016 8.43945c0.699219 3.94043 1.2998 7.90039 2.11914 11.8203c3.43066 16.5195 8.4707 32.7295 15.2607 48.1797c1.14941 2.91992 2.58984 5.71973 3.85938 8.58984\r\n-c8.05078 16.71 17.9004 32.5605 29.4902 47.0605c20 25.3799 45.1006 46.6797 73.2705 62.4697c7.5 4.15039 15.1592 8.0498 23.0693 11.3701c15.8203 6.87988 32.4102 11.9502 49.3105 15.3799c3.50977 0.669922 7.04004 1.24023 10.5596 1.84961\r\n-c2.62012 0.470703 5.28027 0.700195 7.91016 1.08008c3.53027 0.530273 7.09961 0.680664 10.6504 1.04004c2.45996 0.240234 4.90918 0.360352 7.35938 0.509766zM244.4 413.36c-9.23047 -0.100586 -18.4307 -0.990234 -27.5703 -2.23047\r\n-c-7.2998 -1.08008 -14.5303 -2.59961 -21.71 -4.2998c-13.9102 -3.5 -27.4805 -8.33984 -40.46 -14.4199c-10.46 -4.99023 -20.5898 -10.7002 -30.1797 -17.2197c-4.18066 -2.9209 -8.40039 -5.80078 -12.3408 -9.03027\r\n-c-5.08008 -3.96973 -9.97949 -8.16992 -14.6797 -12.5898c-2.50977 -2.24023 -4.80957 -4.7002 -7.21973 -7.06055c-28.2207 -28.79 -48.4404 -65.3896 -57.5 -104.689c-2.04004 -8.44043 -3.54004 -17.0205 -4.44043 -25.6504\r\n-c-1.09961 -8.88965 -1.43945 -17.8496 -1.41016 -26.7998c0.110352 -7.13965 0.379883 -14.2803 1.2207 -21.3701c0.620117 -7.12012 1.87012 -14.1602 3.19922 -21.1797c1.07031 -4.65039 2.03027 -9.32031 3.33008 -13.9102\r\n-c6.29004 -23.3799 16.5 -45.7002 30.0703 -65.75c8.63965 -12.9805 18.7803 -24.9297 29.9805 -35.7705c16.2793 -15.8193 35.0498 -29.04 55.3398 -39.2197c7.2793 -3.51953 14.6602 -6.87012 22.2695 -9.62988c5.04004 -1.75977 10.0605 -3.57031 15.2197 -4.98047\r\n-c11.2607 -3.22949 22.7705 -5.59961 34.3906 -7.05957c2.91016 -0.290039 5.80957 -0.610352 8.71973 -0.900391c13.8203 -1.08008 27.7402 -1 41.54 0.430664c4.4502 0.599609 8.91992 0.989258 13.3496 1.7793c3.63086 0.670898 7.28027 1.25 10.8701 2.10059\r\n-c4.12988 0.979492 8.28027 1.91016 12.3604 3.07031c26.5 7.33984 51.5801 19.71 73.5801 36.1992c15.7803 11.8203 29.96 25.7607 42.1201 41.2803c3.25977 4.02051 6.16992 8.30957 9.12988 12.5498c3.38965 5.06055 6.58008 10.25 9.59961 15.54\r\n-c2.40039 4.44043 4.74023 8.91016 6.9502 13.4502c5.69043 12.0498 10.2803 24.6201 13.75 37.4902c2.58984 10.0098 4.75 20.1602 5.90039 30.4502c1.76953 13.4697 1.93945 27.0996 1.29004 40.6494c-0.290039 3.89062 -0.669922 7.77051 -1 11.6602\r\n-c-2.23047 19.0801 -6.79004 37.9102 -13.8203 55.7998c-5.9502 15.1299 -13.5303 29.6299 -22.6104 43.1299c-12.6895 18.8008 -28.2393 35.6807 -45.9697 49.8301c-25.0498 20 -54.4697 34.5498 -85.6504 42.0801c-7.7793 1.92969 -15.6895 3.33984 -23.6299 4.4502\r\n-c-3.90918 0.589844 -7.84961 0.820312 -11.7695 1.24023c-7.38965 0.569336 -14.8105 0.719727 -22.2197 0.580078zM139.26 364.47c13.2998 8.89062 28.0801 15.3799 43.2998 20.1807c-3.16992 -1.77051 -6.43945 -3.38086 -9.5293 -5.29004\r\n-c-11.21 -6.68066 -21.5205 -14.9004 -30.3799 -24.4902c-6.80078 -7.42969 -12.7607 -15.7305 -17.0107 -24.8896c-3.29004 -6.86035 -5.63965 -14.1904 -6.85938 -21.7109c-0.930664 -4.84961 -1.2998 -9.80957 -1.16992 -14.75\r\n-c0.129883 -13.6592 4.43945 -27.0791 11.29 -38.8193c5.91992 -10.2197 13.6299 -19.3301 22.3594 -27.2598c4.85059 -4.36035 10.2402 -8.09082 14.9502 -12.6006c2.25977 -2.18945 4.49023 -4.41992 6.42969 -6.91016c2.62012 -3.30957 4.89062 -6.98926 5.99023 -11.0996\r\n-c0.900391 -3.02051 0.660156 -6.2002 0.69043 -9.31055c0.0195312 -4.09961 -0.0400391 -8.19922 0.0292969 -12.2998c0.140625 -3.54004 -0.0195312 -7.08984 0.110352 -10.6299c0.0800781 -2.37988 0.0205078 -4.75977 0.0498047 -7.13965\r\n-c0.160156 -5.77051 0.0605469 -11.5303 0.150391 -17.2998c0.109375 -2.91016 0.0195312 -5.82031 0.129883 -8.74023c0.0302734 -1.62988 0.129883 -3.28027 -0.0302734 -4.91016c-0.910156 -0.120117 -1.81934 -0.179688 -2.72949 -0.160156\r\n-c-10.9902 0 -21.8799 2.62988 -31.9502 6.92969c-6 2.7002 -11.8105 5.89062 -17.0898 9.83008c-5.75 4.19043 -11.0898 8.95996 -15.79 14.3105c-6.53027 7.24023 -11.9805 15.3896 -16.6201 23.9502c-1.07031 2.0293 -2.24023 4.01953 -3.17969 6.12012\r\n-c-1.16016 2.63965 -2.62012 5.13965 -3.66992 7.81934c-4.05078 9.68066 -6.57031 19.9404 -8.08008 30.3105c-0.490234 4.43945 -1.09082 8.87988 -1.2002 13.3496c-0.700195 15.7305 0.839844 31.5498 4.66992 46.8203c2.12012 8.14941 4.76953 16.1797 8.30957 23.8301\r\n-c6.32031 14.1992 15.3398 27.1797 26.3008 38.1895c6.2793 6.2002 13.1299 11.8398 20.5293 16.6699zM314.63 384.59c2.74023 -0.740234 5.41016 -1.74023 8.08984 -2.67969c6.36035 -2.33008 12.6807 -4.83984 18.71 -7.95996\r\n-c13.1104 -6.44043 25.3105 -14.8105 35.8203 -24.9697c10.2002 -9.9502 18.7402 -21.6006 25.1396 -34.3408c1.28027 -2.75 2.64062 -5.45996 3.81055 -8.25977c6.30957 -15.0996 10 -31.2598 11.2295 -47.5703c0.410156 -4.54004 0.44043 -9.08984 0.450195 -13.6396\r\n-c0.0703125 -11.6396 -1.49023 -23.25 -4.2998 -34.5303c-1.96973 -7.26953 -4.34961 -14.4893 -7.86035 -21.1797c-3.17969 -6.63965 -6.67969 -13.1602 -10.8398 -19.2402c-6.93945 -10.4697 -15.5996 -19.8701 -25.8203 -27.2197\r\n-c-10.4795 -7.63965 -22.6396 -13.0195 -35.3994 -15.3799c-3.50977 -0.69043 -7.08008 -1.08008 -10.6602 -1.20996c-1.84961 -0.0605469 -3.71973 -0.160156 -5.55957 0.0996094c-0.280273 2.15039 0 4.31055 -0.0107422 6.45996\r\n-c-0.0292969 3.73047 0.140625 7.4502 0.100586 11.1699c0.189453 7.02051 0.0195312 14.0508 0.209961 21.0703c0.0292969 2.37988 -0.0302734 4.75977 0.0292969 7.13965c0.170898 5.07031 -0.0390625 10.1406 0.140625 15.21\r\n-c0.0996094 2.99023 -0.240234 6.04004 0.509766 8.95996c0.660156 2.5 1.78027 4.86035 3.08984 7.08008c4.45996 7.31055 11.0605 12.96 17.6807 18.2607c5.37988 4.17969 10.4697 8.76953 15.0195 13.8398c7.67969 8.37012 14.1699 17.8799 18.7803 28.2695\r\n-c2.5 5.93066 4.51953 12.1006 5.5498 18.46c0.860352 4.37012 1.05957 8.83008 1.00977 13.2705c-0.0195312 7.84961 -1.39941 15.6494 -3.63965 23.1699c-1.75 5.72949 -4.27051 11.1797 -7.08984 16.4502c-3.87012 6.92969 -8.65039 13.3096 -13.96 19.1992\r\n-c-9.94043 10.8506 -21.75 19.9404 -34.6006 27.1006c-1.84961 1.01953 -3.83984 1.82031 -5.62988 2.96973zM213.83 326.14c0.979492 1.18066 1.99023 2.33008 3.12012 3.37988c-0.610352 -0.929688 -1.27051 -1.80957 -1.9502 -2.67969\r\n-c-3.09961 -3.87988 -5.54004 -8.30957 -7.03027 -13.0596c-0.870117 -3.27051 -1.67969 -6.60059 -1.72949 -10c-0.0703125 -2.52051 -0.0800781 -5.07031 0.319336 -7.57031c1.13086 -7.62988 4.33008 -14.8496 8.77051 -21.1201c2 -2.7002 4.25 -5.26953 6.91992 -7.33008\r\n-c1.62012 -1.26953 3.53027 -2.08984 5.33984 -3.0498c3.11035 -1.67969 6.32031 -3.22949 9.07031 -5.47949c2.66992 -2.09082 4.5498 -5.33008 4.39941 -8.79004c-0.00976562 -73.6709 0 -147.341 -0.00976562 -221.021c0 -1.34961 -0.0800781 -2.7002 0.0400391 -4.04004\r\n-c0.129883 -1.47949 0.820312 -2.83008 1.46973 -4.14941c0.860352 -1.66016 1.78027 -3.34082 3.18066 -4.62012c0.849609 -0.770508 1.96973 -1.40039 3.14941 -1.24023c1.5 0.200195 2.66016 1.34961 3.4502 2.57031c0.959961 1.50977 1.67969 3.15918 2.28027 4.84961\r\n-c0.759766 2.12988 0.439453 4.41992 0.540039 6.62988c0.139648 4.03027 -0.0205078 8.06055 0.139648 12.0898c0.0302734 5.89062 0.0302734 11.7705 0.0605469 17.6602c0.139648 3.62012 0.0292969 7.24023 0.109375 10.8604\r\n-c0.150391 4.0293 -0.0195312 8.05957 0.140625 12.0898c0.0292969 5.99023 0.0292969 11.9795 0.0693359 17.9697c0.140625 3.62012 0.0205078 7.24023 0.110352 10.8604c0.139648 3.92969 -0.0205078 7.85938 0.139648 11.7803\r\n-c0.0302734 5.98926 0.0302734 11.9795 0.0605469 17.9697c0.160156 3.93945 -0.00976562 7.87988 0.189453 11.8193c0.290039 -1.43945 0.129883 -2.91992 0.220703 -4.37988c0.189453 -3.60938 0.419922 -7.22949 0.759766 -10.8398\r\n-c0.320312 -3.43945 0.439453 -6.88965 0.859375 -10.3193c0.370117 -3.10059 0.510742 -6.2207 0.950195 -9.31055c0.570312 -4.08984 0.870117 -8.20996 1.54004 -12.29c1.45996 -9.04004 2.83008 -18.1104 5.08984 -26.9902c1.13086 -4.81934 2.40039 -9.60938 4 -14.2998\r\n-c2.54004 -7.89941 5.7207 -15.6699 10.3105 -22.6201c1.72949 -2.63965 3.87012 -4.97949 6.09961 -7.20996c0.270508 -0.25 0.549805 -0.509766 0.879883 -0.709961c0.600586 -0.25 1.31055 0.0703125 1.7002 0.570312c0.709961 0.879883 1.16992 1.93945 1.7002 2.92969\r\n-c4.0498 7.7998 8.17969 15.5605 12.3398 23.3105c0.700195 1.30957 1.44043 2.62012 2.56055 3.60938c1.75 1.57031 3.83984 2.69043 5.97949 3.62988c2.87988 1.2207 5.90039 2.19043 9.03027 2.41992c6.58008 0.620117 13.1094 -0.75 19.5596 -1.84961\r\n-c3.69043 -0.580078 7.40039 -1.16992 11.1299 -1.41016c3.74023 -0.0996094 7.48047 -0.0498047 11.21 0.280273c8.55078 0.919922 16.9902 2.95996 24.9404 6.25c5.2998 2.24023 10.46 4.83008 15.3096 7.92969c11.46 7.20996 21.46 16.5703 30.04 27.0107\r\n-c1.16992 1.41992 2.25 2.89941 3.45996 4.2793c-1.19922 -3.24023 -2.66992 -6.37012 -4.15918 -9.47949c-1.25 -2.90039 -2.84082 -5.61035 -4.27051 -8.41992c-5.16016 -9.62988 -11.0195 -18.9102 -17.75 -27.5205\r\n-c-4.03027 -5.20996 -8.53027 -10.0498 -13.3301 -14.5703c-6.63965 -6.0498 -14.0703 -11.3691 -22.4297 -14.7598c-8.20996 -3.37012 -17.3105 -4.62988 -26.0898 -3.29004c-3.56055 0.580078 -7.01074 1.69043 -10.4102 2.87988\r\n-c-2.79004 0.970703 -5.39062 2.38086 -8.03027 3.69043c-3.42969 1.70996 -6.63965 3.80957 -9.70996 6.08008c2.70996 -3.06055 5.69043 -5.86035 8.7002 -8.61035c4.26953 -3.75977 8.74023 -7.30957 13.6299 -10.2295c3.98047 -2.4502 8.29004 -4.40039 12.8398 -5.51074\r\n-c1.45996 -0.369141 2.95996 -0.459961 4.4502 -0.599609c-1.25 -1.09961 -2.62988 -2.04004 -3.99023 -2.97949c-9.60938 -6.54004 -20.0098 -11.8604 -30.6895 -16.4307c-20.8604 -8.7002 -43.1699 -13.9697 -65.7402 -15.3398\r\n-c-4.66016 -0.240234 -9.32031 -0.360352 -13.9805 -0.360352c-4.97949 0.110352 -9.96973 0.130859 -14.9199 0.650391c-11.2002 0.759766 -22.29 2.73047 -33.1699 5.42969c-10.3496 2.70996 -20.5498 6.12012 -30.2998 10.5508\r\n-c-8.70996 3.85938 -17.1201 8.41992 -24.9902 13.79c-1.83008 1.30957 -3.74023 2.5293 -5.37012 4.0791c6.60059 1.19043 13.0303 3.39062 18.9902 6.48047c5.74023 2.86035 10.9902 6.66016 15.6299 11.0703c2.24023 2.18945 4.29004 4.58984 6.19043 7.08984\r\n-c-3.43066 -2.12988 -6.93066 -4.15039 -10.6201 -5.78027c-4.41016 -2.16016 -9.07031 -3.76953 -13.8105 -5.01953c-5.72949 -1.52051 -11.7393 -1.73047 -17.6094 -1.14062c-8.12988 0.950195 -15.8604 4.27051 -22.5098 8.98047\r\n-c-4.32031 2.93945 -8.2207 6.42969 -11.96 10.0596c-9.93066 10.1602 -18.2002 21.8105 -25.6602 33.8604c-3.94043 6.26953 -7.53027 12.75 -11.1201 19.2197c-1.0498 2.04004 -2.15039 4.0498 -3.17969 6.10059c2.84961 -2.9209 5.56934 -5.9707 8.42969 -8.88086\r\n-c8.99023 -8.96973 18.5596 -17.4395 29.1602 -24.4795c7.5498 -4.90039 15.6699 -9.23047 24.5596 -11.0303c3.11035 -0.729492 6.32031 -0.469727 9.46973 -0.80957c2.77051 -0.280273 5.56055 -0.200195 8.34082 -0.299805\r\n-c5.0498 -0.0605469 10.1094 -0.0400391 15.1592 0.15918c3.65039 0.160156 7.27051 0.660156 10.8906 1.09082c2.06934 0.25 4.10938 0.709961 6.13965 1.19922c3.87988 0.950195 8.11035 0.959961 11.8301 -0.609375c4.75977 -1.85059 8.44043 -5.64062 11.3799 -9.70996\r\n-c2.16016 -3.02051 4.06055 -6.2207 5.66016 -9.58008c1.16016 -2.43066 2.45996 -4.79004 3.5498 -7.26074c1 -2.23926 2.15039 -4.41992 3.41992 -6.51953c0.669922 -1.01953 1.40039 -2.15039 2.62012 -2.5498c1.06055 0.75 1.70996 1.91016 2.28027 3.03027\r\n-c2.09961 4.15918 3.41992 8.64941 4.88965 13.0498c2.02051 6.58984 3.78027 13.2695 5.19043 20.0195c2.20996 9.25 3.25 18.7197 4.54004 28.1299c0.55957 3.98047 0.830078 7.99023 1.30957 11.9707c0.870117 10.6396 1.90039 21.2695 2.24023 31.9395\r\n-c0.0800781 1.86035 0.240234 3.70996 0.25 5.57031c0.00976562 4.34961 0.25 8.68945 0.219727 13.0303c-0.00976562 2.37988 -0.00976562 4.75977 0 7.12988c0.0498047 5.06934 -0.200195 10.1396 -0.219727 15.21c-0.200195 6.60938 -0.709961 13.2002 -1.29004 19.7793\r\n-c-0.730469 5.88086 -1.5498 11.7803 -3.12012 17.5107c-2.0498 7.75 -5.58984 15.0293 -9.7998 21.8193c-3.16016 5.07031 -6.79004 9.87988 -11.0898 14.0303c-3.87988 3.86035 -8.58008 7.08008 -13.9404 8.4502c-1.5 0.410156 -3.05957 0.450195 -4.58984 0.639648\r\n-c0.0703125 2.99023 0.700195 5.93066 1.25977 8.85059c1.58984 7.70996 3.7998 15.2998 6.76074 22.5996c1.51953 4.03027 3.40918 7.90039 5.38965 11.7197c3.4502 6.56055 7.62012 12.79 12.46 18.46zM245.1 324.44\r\n-c0.350586 0.0595703 0.709961 0.119141 1.07031 0.189453c0.19043 -1.79004 0.0898438 -3.58008 0.0996094 -5.37012v-38.1299c-0.00976562 -1.74023 0.130859 -3.49023 -0.149414 -5.21973c-0.360352 0.0302734 -0.709961 0.0498047 -1.06055 0.0498047\r\n-c-0.949219 3.75 -1.71973 7.5498 -2.61914 11.3096c-0.380859 1.53027 -0.580078 3.09082 -1.07031 4.59082c-1.7002 0.239258 -3.42969 0.169922 -5.15039 0.199219c-5.05957 0.0107422 -10.1299 0 -15.1895 0.0107422\r\n-c-1.66016 0.00976562 -3.32031 -0.0898438 -4.98047 0.0292969c-0.0302734 0.390625 -0.259766 0.910156 0.160156 1.18066c1.28027 0.649414 2.71973 0.879883 4.05957 1.34961c3.43066 1.13965 6.88086 2.16016 10.3105 3.31055\r\n-c1.38965 0.479492 2.90039 0.719727 4.16016 1.54004c0.0400391 0.55957 0.0195312 1.12988 -0.0498047 1.67969c-1.23047 0.549805 -2.53027 0.870117 -3.81055 1.28027c-3.12988 1.0293 -6.29004 1.95996 -9.41016 3.01953c-1.79004 0.620117 -3.66992 1 -5.41016 1.79004\r\n-c-0.0292969 0.370117 -0.0693359 0.730469 -0.109375 1.08984c5.08984 0.19043 10.2002 -0.0595703 15.2998 0.120117c3.36035 0.129883 6.73047 -0.0800781 10.0898 0.0703125c0.120117 0.389648 0.259766 0.769531 0.370117 1.16016\r\n-c1.08008 4.93945 2.33008 9.8291 3.38965 14.75zM251.07 324.64c0.359375 -0.0498047 0.719727 -0.120117 1.08008 -0.199219c0.979492 -3.85059 1.72949 -7.76074 2.70996 -11.6104c0.359375 -1.41992 0.55957 -2.87988 1.0293 -4.27051\r\n-c2.53027 -0.179688 5.07031 0.0107422 7.61035 -0.0498047c5.16016 -0.120117 10.3301 -0.120117 15.4902 -0.0693359c0.759766 0.00976562 1.51953 -0.0302734 2.2793 -0.0800781c-0.0390625 -0.360352 -0.0693359 -0.720703 -0.0996094 -1.08008\r\n-c-1.82031 -0.830078 -3.78027 -1.25 -5.66992 -1.89062c-3.73047 -1.22949 -7.48047 -2.38965 -11.2197 -3.56934c-0.570312 -0.169922 -1.12012 -0.419922 -1.66992 -0.640625c-0.150391 -0.549805 -0.180664 -1.12012 -0.120117 -1.68945\r\n-c0.870117 -0.480469 1.81934 -0.810547 2.76953 -1.08984c4.87988 -1.52051 9.73047 -3.14062 14.6299 -4.60059c0.379883 -0.129883 0.780273 -0.269531 1.12988 -0.490234c0.400391 -0.269531 0.230469 -0.790039 0.150391 -1.17969\r\n-c-1.66016 -0.129883 -3.30957 -0.0302734 -4.96973 -0.0400391c-5.16992 -0.00976562 -10.3301 0.00976562 -15.5 -0.00976562c-1.61035 -0.0302734 -3.21973 0.0195312 -4.82031 -0.209961c-0.519531 -1.66992 -0.719727 -3.41992 -1.16992 -5.11035\r\n-c-0.94043 -3.56934 -1.51953 -7.24023 -2.54004 -10.7793c-0.360352 -0.0107422 -0.709961 -0.0205078 -1.05957 -0.0605469c-0.290039 1.73047 -0.150391 3.48047 -0.150391 5.21973v38.1299c0.0205078 1.78027 -0.0800781 3.58008 0.110352 5.37012zM65.0498 279.67\r\n-c1.12012 2.15039 2.08008 4.40039 3.37012 6.45996c-1.82031 -7.55957 -2.91016 -15.2695 -3.62012 -23c-0.799805 -7.70996 -0.849609 -15.4902 -0.540039 -23.2295c1.0498 -19.9404 5.54004 -39.8301 14.2305 -57.8809c2.99023 -5.98926 6.34961 -11.8291 10.5 -17.1094\r\n-c6.12012 -7.46973 12.5293 -14.7598 19.8398 -21.0898c4.7998 -4.10059 9.99023 -7.78027 15.54 -10.8008c3.26953 -1.64941 6.50977 -3.38965 9.93945 -4.67969c5.01074 -2.03027 10.1904 -3.60938 15.4209 -4.93945c3.8291 -0.959961 7.7793 -1.41016 11.5195 -2.70996\r\n-c5 -1.57031 9.46973 -4.61035 13.0303 -8.43066c4.92969 -5.22949 8.08984 -11.8701 10.2002 -18.6699c0.989258 -2.89941 1.58984 -5.91016 2.16992 -8.91992c0.149414 -0.75 0.219727 -1.51953 0.15918 -2.29004c-6.5 -2.78027 -13.2598 -5.05957 -20.2598 -6.17969\r\n-c-4.10938 -0.780273 -8.29004 -0.990234 -12.46 -1.08008c-10.25 -0.240234 -20.4697 1.75977 -30.1201 5.12012c-3.73926 1.41992 -7.48926 2.84961 -11.0293 4.71973c-8.06055 3.83984 -15.6406 8.7002 -22.46 14.46c-2.9209 2.5498 -5.83008 5.12988 -8.40039 8.03027\r\n-c-9.16016 9.83008 -16.2998 21.4102 -21.79 33.6494c-2.38965 5.55078 -4.61035 11.1807 -6.37012 16.96c-1.16992 3.94043 -2.36035 7.89062 -3.25977 11.9102c-0.75 2.94043 -1.21973 5.9502 -1.87012 8.91992c-0.459961 2.14062 -0.69043 4.32031 -1.03027 6.48047\r\n-c-0.849609 5.42969 -1.2793 10.9297 -1.33008 16.4297c0.110352 6.18066 0.25 12.3701 1.07031 18.5c0.400391 2.86035 0.669922 5.74023 1.15039 8.60059c0.979492 5.69922 2.13965 11.3691 3.70996 16.9297c3.08984 11.6504 7.47949 22.9502 12.6895 33.8398z\r\n-M428.78 286.11c1.09961 -1.66016 1.91016 -3.48047 2.7793 -5.26074c2.10059 -4.44922 4.24023 -8.89941 6.02051 -13.4893c7.61035 -18.7607 12.2998 -38.79 13.04 -59.0508c0.0195312 -1.75977 0.0703125 -3.51953 0.110352 -5.29004\r\n-c0.129883 -9.56934 -1.27051 -19.0898 -3.18066 -28.4492c-0.729492 -3.58984 -1.54004 -7.16992 -2.58008 -10.6904c-4.04004 -14.7197 -10 -29 -18.4102 -41.7803c-8.20996 -12.5693 -19.0098 -23.5498 -31.8398 -31.4092\r\n-c-5.72949 -3.59082 -11.79 -6.64062 -18.0498 -9.19043c-5.78027 -2.19043 -11.71 -4.03027 -17.7998 -5.11035c-6.40039 -1.0498 -12.9102 -1.51953 -19.4004 -1.22949c-7.91992 0.479492 -15.7793 2.07031 -23.21 4.84961\r\n-c-1.93945 0.799805 -3.93945 1.45996 -5.83984 2.33008c-0.209961 1.50977 0.25 2.99023 0.530273 4.45996c1.16016 5.74023 3.03027 11.3604 5.7002 16.5801c2.36914 4.50977 5.51953 8.65039 9.45996 11.9004c2.42969 2.0498 5.23926 3.60938 8.15918 4.83008\r\n-c3.58008 1.5 7.4707 1.96973 11.2402 2.83008c7.23047 1.70996 14.3701 3.92969 21.1504 7c10.3496 4.64941 19.71 11.3799 27.6494 19.46c1.59082 1.60938 3.23047 3.17969 4.74023 4.86914c3.37012 3.76074 6.70996 7.57031 9.85059 11.5303\r\n-c7.47949 10.0703 12.8193 21.5898 16.71 33.4805c1.58008 5.2998 3.20996 10.5996 4.20996 16.0498c0.629883 2.87012 1.04004 5.78027 1.51953 8.67969c0.870117 6.08984 1.58984 12.2207 1.67969 18.3799c0.120117 6.65039 0.140625 13.3203 -0.529297 19.9404\r\n-c-0.730469 7.99023 -1.87012 15.96 -3.70996 23.7803z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phoenix-squadron\" unicode=\"&#xf511;\" horiz-adv-x=\"512\" \r\n-d=\"M96 384.62c46.4902 36.1299 105.55 56.0703 164.51 54.5703c29.5801 0.379883 59.1104 -5.37012 86.9102 -15.3301c-24.1299 4.62988 -49 6.33984 -73.3799 2.44922c-42.8701 -5.30957 -83.04 -27.1494 -111.83 -59.1797c5.66992 1 10.7803 3.66992 16 5.86035\r\n-c18.1396 7.87012 37.4902 13.2598 57.2305 14.8301c19.7393 2.12988 39.6396 0.429688 59.2793 -1.91992c-14.4199 -2.79004 -29.1201 -4.57031 -43 -9.59082c-34.4297 -11.0693 -65.2695 -33.1592 -86.2998 -62.6299c-13.7998 -19.71 -23.6299 -42.8594 -24.6699 -67.1299\r\n-c-0.349609 -16.4902 5.21973 -34.8096 19.8301 -44c7.01465 -4.23926 19.3594 -7.67969 27.5547 -7.67969c2.77539 0 7.23926 0.420898 9.96484 0.939453c15.4502 2.45996 30.0703 8.64062 43.6006 16.3301c11.5195 6.82031 22.6699 14.5508 32 24.25\r\n-c3.79004 3.2207 2.53027 8.4502 2.62012 12.79c-2.12012 0.339844 -4.37988 1.11035 -6.30078 -0.299805c-9.47656 -5.19531 -25.5244 -12.0811 -35.8193 -15.3701c-20 -6.16992 -42.1602 -8.45996 -62.1006 -0.779297c12.79 -1.73047 26.0605 -0.310547 37.7402 5.43945\r\n-c20.2305 9.71973 36.8105 25.2002 54.4404 38.7705c23.0107 17.7168 62.8379 42.4951 88.8994 55.3096c25.71 12 52.9404 22.7803 81.5703 24.1201c-15.6299 -13.7197 -32.1504 -26.5205 -46.7803 -41.3799c-14.5098 -14 -27.46 -29.5 -40.1094 -45.1807\r\n-c-3.52051 -4.59961 -8.9502 -6.93945 -13.5801 -10.1592c-18.8516 -12.6768 -42.0986 -39.6016 -51.8906 -60.1006c-9.33008 -19.6797 -14.5 -41.8496 -11.7695 -63.6494c1.93945 -13.6904 8.70996 -27.5908 20.8994 -34.9102c12.9004 -8 29.0508 -8.07031 43.4805 -5.10059\r\n-c32.7998 7.4502 61.4297 28.8906 81 55.8408c20.4404 27.5195 30.5195 62.1992 29.1602 96.3496c-0.520508 7.5 -1.57031 15 -1.66016 22.4902c8 -19.4805 14.8203 -39.71 16.6504 -60.8301c2 -14.2803 0.75 -28.7598 -1.62012 -42.9004\r\n-c-1.91016 -11 -5.66992 -21.5098 -7.78027 -32.4297c17.209 19.293 34.833 55.6123 39.3398 81.0703c1.24121 7.8584 2.24902 20.6953 2.24902 28.6514c0 21.957 -7.37305 55.999 -16.459 75.9883c20.7803 -32 32.3398 -69.5801 35.71 -107.48\r\n-c0.490234 -12.7295 0.490234 -25.5098 0 -38.2295c-2.37305 -28.7334 -15.6289 -72.5254 -29.5898 -97.75c-26.1201 -47.3398 -68 -85.6299 -117.19 -108c-78.29 -36.2305 -174.68 -31.3203 -248 14.6797c-32.9014 20.1289 -73.8711 64.3281 -91.4492 98.6602\r\n-c-12.291 24.2021 -23.6523 65.8301 -25.3604 92.9199v31.3398c3.92969 69.7402 40.8701 135.92 96 178.36zM318 304.29c4.54688 0.770508 11.7148 2.77734 16 4.47949c5 1.77051 9.24023 5.94043 10.3203 11.2207c-8.95996 -4.99023 -17.9805 -9.91992 -26.3203 -15.7002z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sith\" unicode=\"&#xf512;\" \r\n-d=\"M0 416l118.75 -69.71l-11.5195 58.9004l91.0596 -69.8701c8.5 1.50977 17.0996 2.29004 25.71 2.29004s17.21 -0.770508 25.71 -2.29004l91.0596 69.8701l-11.5195 -58.9004l118.75 69.71l-69.71 -118.75l58.8604 11.5195l-69.8408 -91.0293\r\n-c3.04004 -17.0098 3.03027 -34.4404 0 -51.4502l69.8408 -91.0303l-58.8604 11.5205l69.71 -118.78l-118.75 69.71l11.5195 -58.8604l-91.0293 69.8408c-17.0098 -3.04004 -34.46 -3.04004 -51.4805 0l-91.0293 -69.8408l11.5195 58.8604l-118.75 -69.71l69.71 118.78\r\n-l-58.8604 -11.5205l69.8408 91.0303c-1.25488 7.04492 -2.27246 18.5693 -2.27246 25.7246c0 7.15625 1.01758 18.6807 2.27246 25.7256l-69.8408 91.0293l58.8604 -11.5195zM224 316.22c-31.7998 0 -63.6104 -12.0898 -87.8496 -36.3398\r\n-c-48.4902 -48.4902 -48.5 -127.2 0 -175.7c48.5 -48.4893 127.21 -48.5195 175.699 -0.0292969c48.4902 48.4893 48.5 127.199 0 175.699c-24.25 24.25 -56.0498 36.3701 -87.8496 36.3701zM224 279.56c22.4199 0 44.8301 -8.51953 61.9199 -25.6094\r\n-c34.1904 -34.1904 34.1797 -89.6904 0 -123.87c-34.1895 -34.1797 -89.6504 -34.1904 -123.84 0c-34.1904 34.1895 -34.1797 89.6895 0 123.87c17.0898 17.0898 39.5 25.6094 61.9199 25.6094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trade-federation\" unicode=\"&#xf513;\" horiz-adv-x=\"496\" \r\n-d=\"M248 439.2c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -43.5996c129.7 0 234.8 105.1 234.8 234.8s-105.1 234.8 -234.8 234.8s-234.8 -105.1 -234.8 -234.8s105.1 -234.8 234.8 -234.8zM403.1 284.9v-0.100586h-145.699\r\n-v-34.7998h83.2998v-47h-83.2998v-195.8h-48.8008v196.8h-117.699l-36.7002 46h155.1v81.7002h193.8v-46.7998zM329.8 239.8h-82.8994v56.2002h145v24.4004h-171.801v-80.6006h-143.899l20.0996 -23.8994h123.8v-197.4h26.8008v197.4h82.8994v23.8994zM168.5 308.8l22 9.2998\r\n-l-15.7998 -18.0996l15.7002 -18.0996l-22.2002 9.5l-12.2998 -20.5l2.09961 24l-23.2998 5.39941l23.5 5.40039l-2.10059 23.7998zM138.9 328.5l9.5 -10.2002l-13.8008 5.2998l-6.7998 -12.1992l0.799805 14.6992l-13.6992 2.7002l14.2998 3.7998l-1.7002 13.9004\r\n-l8 -12.4004l12.7002 5.90039zM304.3 183.3l-9.2998 -10.7998l9.40039 -10.7002l-13.1006 5.5l-7.2998 -12.2002l1.2002 14.2002l-13.9004 3.2002l13.9004 3.2002l-1.2998 14.2002l7.2998 -12.2002zM411.2 260.5l-15 -17.5996l15.0996 -17l-21.2002 8.7998l-11.5 -19.6006\r\n-l1.80078 22.9004l-22.2002 4.90039l22.2998 5.39941l-2.2002 22.7002l12 -19.5996zM248 418.1c125.3 0 226.9 -101.6 226.9 -226.899s-101.601 -226.9 -226.9 -226.9s-226.9 101.601 -226.9 226.9s101.601 226.899 226.9 226.899zM342.6 252h-83.1992v30.9004h145.699\r\n-v50.6992h-197.8v-81.5996h-157.399l40 -49.9004h116.699v-196.8h52.7002v195.7h83.2998v51zM248 404.8c-94.5996 0 -174.9 -61.5996 -202.9 -146.8h157.4v81.5996h199.1c-38.7998 40.2002 -93.2998 65.2002 -153.6 65.2002zM248 -22.2998c117.9 0 213.5 95.5996 213.4 213.5\r\n-c0 51.8994 -18.5 99.5 -49.3008 136.5v-50.7998h-145.6v-19.2002h83.2002v-62.7002h-83.2998v-195.8h-64.6006v196.8h-114.7l-43.7998 56.2998c-5.7998 -19.2998 -8.89941 -39.8994 -8.89941 -61.0996c0 -117.9 95.6992 -213.5 213.6 -213.5zM178.8 173l22.7002 9.2998\r\n-l-16.9004 -17.0996l15.8008 -18.7998l-21.5 10.7998l-13 -20.9004l3.69922 23.7998l-23.7998 5.90039l23.7002 3.90039l-1.7002 24.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wolf-pack-battalion\" unicode=\"&#xf514;\" horiz-adv-x=\"512\" \r\n-d=\"M267.73 -23.5303l-11.4404 -21.1396l-11.4404 21.1104l-10.5596 -15.8408l-5.28027 12.3203l-5.2793 -7v-29.8301c-21.0605 7.91992 -21.1104 66.8604 -25.5107 97.21c-4.62012 31.8799 0.879883 92.8105 -81.3701 149.11c8.88086 23.5996 12 49.4297 2.64062 80.0498\r\n-c-27.8701 -3.33008 -53.9404 -10.5801 -63.3398 -54.0996l30.3496 -8.36035c-11.2002 -23.04 -17.0195 -46.7598 -13.2002 -72.1396l27.2705 7l6.16016 -33.4307l18.4697 7l8.7998 -33.4297l19.3496 7l-26.4297 -21.0596l-8.7998 28.1494l-24.6299 -5.28027l-7 35.6309\r\n-l-26.3906 -14.5205c-0.25 20.0205 -6.95996 58.0605 8.80078 84.4502l-26.3906 -5.28027c-3.99023 22.0703 2.37988 39.21 7.91992 56.7402l-22.4297 -9.67969c0.44043 25.0693 29.9404 56.79 61.5898 58.5098c20.2197 1.08984 56.7305 25.1602 54.1006 51.8994\r\n-c-1.95996 19.8701 -17.4502 42.6201 -43.1104 49.7002c43.9795 -36.5098 9.71973 -67.2998 -5.28027 -73.46c-4.39941 11.4404 -17.54 69.0801 0 130.2c40.4697 -22.8701 89.7002 -65.0996 93.21 -147.86l58.0605 -38.71l3.51953 -93.25l-107.33 59.8203l-7 -7\r\n-l17.5801 -3.50977l44 -38.71l15.8398 5.2793l28.1504 -49.2598l3.51953 -119.64l-21.1094 -15.8398l32.5498 -15.8398l32.5498 15.8398l-21.1094 15.8398l3.51953 119.64l28.0996 49.25l15.8408 -5.28027l44 38.7109l17.5898 3.51953l-7 7l-107.3 -59.7695l3.51953 93.25\r\n-l58 38.71c3.5498 82.6895 52.8096 124.92 93.2002 147.79c17.54 -61.1201 4.39941 -118.761 0 -130.2c-14.96 6.16016 -49.2803 36.9502 -5.28027 73.46c-25.6602 -7.08008 -41.1104 -29.8301 -43.1104 -49.7002c-2.63965 -26.7305 33.8809 -50.8096 54.1006 -51.9004\r\n-c31.6396 -1.70996 61.1396 -33.4297 61.5801 -58.5l-22.4307 9.68066c5.54004 -17.5303 11.9209 -34.6699 7.9209 -56.7402l-26.3906 5.28027c15.7998 -26.3906 9.0498 -64.4502 8.7998 -84.4502l-26.3896 14.5195l-7 -35.6299l-24.5898 5.24023l-8.7998 -28.1504\r\n-l-26.3906 21.1104l19.3506 -7l8.7998 33.3896l18.4697 -7l6.16016 33.4307l27.2803 -7.05078c3.7998 25.3809 -2.0498 49.1406 -13.2002 72.1406l30.3496 8.35938c-9.42969 43.5205 -35.4297 50.7305 -63.3398 54.1006\r\n-c-9.35938 -30.6201 -6.24023 -56.4404 2.64062 -80.0498c-82.25 -56.3008 -76.75 -117.221 -81.3701 -149.11c-4.40039 -30.3496 -4.4502 -89.29 -25.5107 -97.21v29.9502l-5.2793 7l-5.28027 -12.3203zM346.9 71.4697l-15.8408 10.5303\r\n-c7.4707 4.36035 13.7607 8.41992 19.3506 12.3203c-0.600586 -7.2207 -0.270508 -13.8398 -3.50977 -22.8398v-0.0107422zM375.05 120.73c-0.399414 -10.9404 -0.899414 -21.6602 -1.75977 -31.6709c-7.84961 1.86035 -15.5703 3.80078 -21.1104 7\r\n-c8.24023 7.94043 15.5508 16.3203 22.8701 24.6807v-0.00976562zM399.68 115.45l-23.75 6.16016c5.62695 7.16797 13.9014 19.3848 18.4707 27.2695c3.22949 -9.21973 5.2793 -20 5.2793 -33.4297zM403.2 196.39c19.4395 -12.8096 27.7998 -33.6592 29.9102 -56.2998\r\n-c-12.3203 4.53027 -24.6299 9.31055 -36.9502 10.5605c5.05957 12 6.64941 28.1396 7 45.7393h0.0400391zM401.44 242.13c18.5596 -2.62988 35.1494 -9.18945 45.7598 -28.1494c-14.2197 -4.36035 -24.7803 -5.9707 -44 -14.0801\r\n-c0.0800781 13.4092 -0.950195 27.9297 -1.75977 42.2295zM165.68 71.4805c-3.23926 9 -2.91016 15.5791 -3.50977 22.8398c5.58984 -3.90039 11.8799 -7.95996 19.3496 -12.3203zM137.53 120.74c7.31934 -8.36035 14.6299 -16.7402 22.8701 -24.6699\r\n-c-5.54004 -3.2002 -13.2607 -5.14062 -21.1104 -7c-0.860352 10.0098 -1.36035 20.7295 -1.75977 31.6699zM112.89 115.46c0 13.4297 2 24.21 5.28027 33.4297c4.56934 -7.88477 12.8438 -20.1016 18.4697 -27.2695zM109.37 196.4h0.0898438\r\n-c0.349609 -17.6006 2 -33.7402 7 -45.7402c-12.3701 -1.25 -24.6797 -6.03027 -37 -10.5605c2.11035 22.6406 10.4697 43.4902 29.9102 56.3008zM111.13 242.14c-0.80957 -14.2998 -1.83984 -28.8193 -1.75977 -42.2295c-19.2197 8.10938 -29.7803 9.71973 -44 14.0801\r\n-c10.6299 18.9502 27.2295 25.5195 45.7598 28.1494z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hornbill\" unicode=\"&#xf592;\" horiz-adv-x=\"512\" \r\n-d=\"M76.3799 77.7002c0.182617 -1.37207 0.331055 -3.6084 0.331055 -4.99219c0 -20.8662 -16.9346 -37.8008 -37.7998 -37.8008s-37.7998 16.9346 -37.7998 37.8008c0 20.8652 16.9346 37.7998 37.7998 37.7998c1.49805 0 3.91602 -0.173828 5.39844 -0.387695\r\n-c-78.2793 111.35 52 190.53 52 190.53c-5.85938 -43 -8.23926 -91.1602 -8.23926 -91.1602c-67.3105 -41.4902 0.929688 -64.0605 39.8096 -72.8701c18.6445 -50.7129 77.6279 -91.9023 131.66 -91.9404c1.91992 0 3.76953 0.209961 5.66992 0.280273l0.110352 -18.8604\r\n-c-99.2207 -1.38965 -158.7 29.1406 -188.94 51.6006zM184.38 405.4c109.75 73.9395 187.601 -54.0605 187.601 -54.0605c-43.04 5.86035 -91.1807 8.24023 -91.1807 8.24023c-43.0996 70.0098 -65.7998 -6.58008 -73.7998 -44.29\r\n-c-48.4805 -19.5557 -87.8545 -77.8545 -87.8896 -130.13c0 -0.910156 0.139648 -1.78027 0.139648 -2.67969l-21.8398 -0.150391c-1.41016 100.43 29.8701 160.09 52.4199 190c-0.842773 -0.0683594 -2.21191 -0.123047 -3.05664 -0.123047\r\n-c-20.9482 0 -37.9502 17.001 -37.9502 37.9492c0 20.9492 17.002 37.9502 37.9502 37.9502c13.1934 0 28.5273 -9.65723 34.2266 -21.5566c2.04199 -4.25488 3.7002 -11.5381 3.7002 -16.2578c0 -1.35547 -0.143555 -3.54785 -0.320312 -4.8916zM488.57 271.23\r\n-c-4.21777 -2.00879 -11.3906 -3.63867 -16.0615 -3.63867c-0.886719 0 -2.32422 0.0625 -3.20898 0.138672c84.4502 -113.45 -49 -194.61 -49 -194.61c5.87012 43.0303 8.20996 91.1602 8.20996 91.1602c66.6006 40.96 0.640625 63.54 -38.46 72.54\r\n-c-19.3633 48.9775 -77.8232 88.7422 -130.49 88.7598c-2.75 0 -5.43945 -0.259766 -8.13965 -0.410156l-0.139648 22.5c93.6094 1.33008 151.72 -25.7998 183.45 -47.7402c-0.226562 1.52539 -0.40918 4.01465 -0.40918 5.55566c0 20.9434 16.9971 37.9404 37.9395 37.9404\r\n-c20.9434 0 37.9404 -16.9971 37.9404 -37.9404c0 -13.2236 -9.69043 -28.5703 -21.6309 -34.2549zM374.06 11.7598v-0.0595703c0.0917969 0.000976562 0.239258 0.000976562 0.330078 0.000976562c20.9375 0 37.9297 -16.9922 37.9297 -37.9297\r\n-s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973\r\n-c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mailchimp\" unicode=\"&#xf59e;\" \r\n-d=\"M330.61 204.48c-2.50977 3.17969 -4.70996 8.31934 -5.9707 14.3193c-2.22949 10.6807 -1.98926 18.4102 4.24023 19.4199c6.23047 1.01074 9.25 -5.45996 11.4805 -16.1299c1.5 -7.17969 1.20996 -13.7803 -0.450195 -17.6094\r\n-c-1.27832 0.165039 -3.36133 0.299805 -4.65039 0.299805c-1.28809 0 -3.37207 -0.134766 -4.64941 -0.299805zM277.05 196c-4.45996 1.95996 -10.2598 4.13965 -17.2598 3.7002c-12.5996 -0.770508 -21.75 -7.21973 -22.5996 -3.48047\r\n-c-0.400391 1.83984 2.40918 4.87988 5.40918 7.06055c4.5791 3.35254 12.9014 6.07422 18.5762 6.07422c3.45312 0 8.84473 -1.07324 12.0342 -2.39453c8.63965 -3.7002 14.0098 -11.1504 12.1201 -13.0898c-1.08008 -1.12988 -3.81055 0.129883 -8.28027 2.12988z\r\n-M268.05 190.87c9.68066 1.14941 16.8604 -4.62988 15.4004 -6.85059c-0.629883 -1.00977 -2.02051 -0.829102 -4.94043 -0.489258c-1.55078 0.239258 -4.08301 0.433594 -5.65234 0.433594c-3.72656 0 -9.58105 -1.06738 -13.0674 -2.38379\r\n-c-4.04004 -1.62012 -4.30957 -1.15039 -5.20996 -0.810547c-1.53027 3.57031 4.40039 8.68066 13.4697 10.1006zM322.22 173.77c-3.40039 -6.91016 -17.7002 0.0703125 -14.2998 7c3.40039 6.93066 17.6797 -0.129883 14.2998 -7zM337.88 194.24\r\n-c7.69922 -0.149414 7.42969 -16.0605 -0.259766 -15.9307c-7.69043 0.130859 -7.40039 16.0605 0.259766 15.9307zM119.09 115.34c4.0293 0.910156 3.40039 -1.25 3.37012 -0.359375c0.256836 -0.317383 0.46582 -0.904297 0.46582 -1.3125\r\n-c0 -0.299805 -0.119141 -0.755859 -0.265625 -1.01758c-3.16016 -7.37012 -20.1904 -7.68066 -21.5801 9c-0.910156 10.8594 9.30957 21.0293 -2.28027 28.6191c-1.77734 1.17773 -4.95117 2.13281 -7.08301 2.13281c-3.84961 0 -8.67285 -2.62207 -10.7666 -5.85254\r\n-c-3.2998 -5.16016 -3.11035 -12.2002 -7.37988 -11.6299c-3.7207 0.540039 -3.70996 14.4805 5 24.0801c7.22949 8 25.9492 11.9297 35.0498 -5.54004c8.11035 -15.3896 -8.2002 -27.7695 -3 -35.7695c2.46973 -3.80078 7.14941 -2.66016 8.46973 -2.35059zM418.81 132.41\r\n-c6.44043 0 16.5605 -7.5 16.5605 -25.2705c0 -17.7695 -7.37012 -37.9092 -9.11035 -42.3799c-54.3896 -130.279 -264.56 -130.06 -322.29 3c-31.5293 -0.0400391 -64.1699 26.9805 -67.5293 60.3799c-0.256836 2.25195 -0.463867 5.91992 -0.463867 8.18652\r\n-c0 7.21289 2.04395 18.5537 4.56348 25.3135l-14.7598 12.5107c-67.5498 57.04 143.72 291.85 211.27 232.93c0.339844 -0.299805 22.9902 -22.5205 23.0498 -22.5703l12.5508 5.33008c59.2695 24.5303 107.359 12.6904 107.42 -26.4697\r\n-c0.0292969 -20.3604 -12.9404 -44.1006 -33.7305 -65.6504c26.1699 -24.2998 20.0205 -71.6094 21.5205 -83c7.19922 -2 30.6992 -7.62012 41.0996 -18.54c18.3604 -19.25 5.52051 -39.5801 3.07031 -43.25c4.20996 -11.2998 3.42969 -8.79004 6.7793 -20.5195z\r\n-M102.81 84.25c29.4502 -0.680664 38.6309 28.2002 34.0908 57.8398c-9.74023 62.9404 -90.1699 48.9805 -84 -12.3301c2.44922 -24.3594 27.0898 -44.8994 49.9092 -45.5098zM84.2998 198.45c19.3105 51.8096 51.54 99.5498 94.2002 132.399\r\n-c31.6504 26.4102 65.7998 45.3506 65.7998 45.3506s-18.3896 21.3193 -23.9395 22.8896c-34.1699 9.23047 -107.94 -41.6494 -155.051 -108.88c-19.0596 -27.21 -46.3096 -75.3604 -33.2998 -100.21c1.58984 -3 10.71 -10.9297 15.5898 -15\r\n-c8.18066 11.9102 21.54 20.5 36.7002 23.4502zM323.18 97.2998c2.58984 0.259766 0.560547 -2.53027 0.560547 -2.53027s-27.4004 -12.75 -71 0.740234c1.20996 -10.2295 11.1699 -14.8193 15.9395 -16.6699c31.4004 -12.21 86.6904 -2.58008 128.46 26\r\n-c0.850586 0.589844 1.41992 0 0.730469 -1c-28.9697 -41.3496 -128.73 -54.7598 -151.37 -21.3496c-12.0801 17.8301 -0.599609 43.8594 19.5498 41.1494c6.7998 -0.769531 53.7705 -8 100.48 13.6807c27.4893 12.7598 37.8701 26.79 36.3096 38.1602\r\n-c-0.447266 3.00293 -2.57031 7.16504 -4.74023 9.28906c-5 4.83008 -12.79 8.60059 -26 12.3105c-4.35938 1.22949 -7.31934 2.00977 -10.5098 3.05957c-5.67969 1.83008 -8.47949 3.33008 -9.10938 14c-0.280273 4.62988 -1.09082 20.9102 -1.38086 27.6299\r\n-c-0.519531 11.7607 -1.91992 27.8506 -11.9199 34.4902c-2.37305 1.51953 -6.58691 2.75195 -9.40527 2.75195c-1.1748 0 -3.05371 -0.229492 -4.19434 -0.511719c-5.69043 -0.969727 -9.06055 -4.00977 -13.2598 -7.50977\r\n-c-12.4404 -10.3701 -22.9502 -12.0605 -34.6406 -11.5605c-6.98926 0.290039 -14.3994 1.37988 -22.8799 1.87988l-5 0.290039c-19.5801 1 -40.5693 -15.9092 -44.0693 -39.9092c-4.86035 -33.4307 19.3291 -50.7002 26.3291 -60.8301\r\n-c0.912109 -1.0918 1.77246 -3.12598 1.9209 -4.54004c0 -1.94043 -1.25 -3.48047 -2.48047 -4.79004c-19.9805 -20.54 -26.3701 -53.1699 -18.8398 -80.3701c0.768555 -2.76562 2.35938 -7.12891 3.5498 -9.74023c17.7002 -41.2598 72.4902 -60.4795 126 -43\r\n-c5.81152 1.89844 14.9238 5.74219 20.3398 8.58008c9.78906 4.8418 23.7441 15.2852 31.1504 23.3096c14.2002 14.8408 22.6396 30.9707 25.9297 50.8408c2.81055 18.6191 -7.78027 18.7598 -11.4395 18.0996c-1.13477 6.94531 -4.32422 17.8223 -7.12012 24.2803\r\n-c-15.6299 -12.3506 -35.71 -20.9707 -51 -25.3506c-69.4004 -19.9102 -90.1904 6.35059 -96.4004 -13.8096c33.7705 -12.3701 69.5098 -7.07031 69.5098 -7.07031zM171.31 290.5l0.0605469 0.00976562c-0.0947266 -0.115234 -0.171875 -0.331055 -0.171875 -0.481445\r\n-c0 -0.418945 0.34082 -0.759766 0.759766 -0.759766c0.124023 0 0.308594 0.0546875 0.412109 0.121094c11.4199 8.30078 64.9502 42.7705 134.5 26.8301c0.860352 -0.189453 1.39941 1.29004 0.639648 1.7207c-11.3398 6.33984 -28.6895 10.6494 -41 10.7393\r\n-c-0.404297 0.00976562 -0.732422 0.345703 -0.732422 0.75c0 0.134766 0.0634766 0.332031 0.142578 0.44043c1.84668 2.41602 5.30078 5.88379 7.70996 7.74023c0.166992 0.126953 0.302734 0.401367 0.302734 0.611328c0 0.424805 -0.344727 0.770508 -0.770508 0.770508\r\n-c-0.0146484 0 -0.0380859 -0.000976562 -0.0517578 -0.00195312c-17.5205 -1.08008 -37.5107 -9.4707 -49 -17.2998c-0.107422 -0.0751953 -0.300781 -0.136719 -0.431641 -0.136719c-0.414062 0 -0.75 0.335938 -0.75 0.75\r\n-c0 0.0498047 0.00976562 0.12793 0.0214844 0.176758c0.899414 4.30957 3.72949 9.98926 5.18945 12.6494c0.0566406 0.0947266 0.102539 0.261719 0.102539 0.37207c0 0.402344 -0.327148 0.729492 -0.730469 0.729492\r\n-c-0.110352 0 -0.276367 -0.0449219 -0.37207 -0.101562c-18.4697 -9.4502 -39.0898 -26.2803 -55.8301 -45.6299z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"megaport\" unicode=\"&#xf5a3;\" horiz-adv-x=\"496\" \r\n-d=\"M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5\r\n-v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"nimblr\" unicode=\"&#xf5a8;\" horiz-adv-x=\"384\" \r\n-d=\"M246.6 148.71c15.5703 0 27.1504 -11.46 27.1504 -27s-11.6201 -27 -27.1504 -27c-15.6992 0 -27.1494 11.5703 -27.1494 27s11.5498 27 27.1494 27zM113 121.75c0 15.6104 11.6797 27 27.1504 27c15.4697 0 27.1494 -11.46 27.1494 -27s-11.4697 -27 -27.1494 -27\r\n-c-15.4404 0 -27.1504 11.3096 -27.1504 27zM191.76 289c98.3701 0 177.76 -78.9102 177.76 -176.48c0 -97.5693 -79.6094 -176.52 -177.76 -176.52c-98.1494 0 -177.76 78.8701 -177.76 176.52v335.48l45.25 -227c30.2002 48.2305 97.75 68 132.51 68zM191.76 -19.1201\r\n-c73.2402 0 132.51 58.96 132.51 131.64c0 72.6807 -59.2393 131.54 -132.51 131.54c-73.2695 0 -132.51 -58.8994 -132.51 -131.59c0 -72.6895 59.2402 -131.59 132.51 -131.59z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rev\" unicode=\"&#xf5b2;\" \r\n-d=\"M289.67 173.11c0 -36.1943 -29.375 -65.5801 -65.5703 -65.5801c-36.1943 0 -65.5693 29.375 -65.5693 65.5693c0 36.1953 29.375 65.5703 65.5693 65.5703h0.0107422c36.1445 -0.0439453 65.5156 -29.415 65.5596 -65.5596zM429.22 178.16v-210.16h-210.16v0.110352\r\n-c-110.939 2.70996 -200.06 93.4092 -200.06 205c0 108.569 84.2998 197.319 191 204.569v38.3203l108.77 -62.7803l-108.77 -62.79v39.1201c-80 -7.16016 -143 -74.5498 -143 -156.43c0 -86.6201 70.4902 -157.12 157.11 -157.12s157.09 70.5 157.09 157.12\r\n-c-0.0224609 47.1709 -32.1934 106.235 -71.8105 131.84l45.3799 26.2002c39.8018 -32.8584 73.0977 -101.402 74.3203 -153h0.129883z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shopware\" unicode=\"&#xf5b5;\" horiz-adv-x=\"512\" \r\n-d=\"M403.5 -7.41016c-36.0898 -26.8223 -101.875 -48.5908 -146.841 -48.5908c-0.181641 0 -0.477539 0.000976562 -0.65918 0.000976562c-137.19 0 -248 111 -248 248c0 137.19 111 248 248 248h0.211914c52.3994 0 126.538 -28.4482 165.488 -63.5\r\n-c0.643555 -0.585938 1.16602 -1.76855 1.16602 -2.63965c0 -1.9707 -1.59961 -3.56934 -3.57031 -3.56934c-0.125977 0 -0.330078 0.0126953 -0.456055 0.0292969c-15.2227 2.03223 -40.042 3.68164 -55.4004 3.68164\r\n-c-0.361328 0 -0.948242 -0.000976562 -1.30957 -0.00195312c-129.36 0 -222.399 -53.4697 -222.399 -155.35c0 -109 92.1299 -145.881 176.829 -178.73c33.6406 -13 65.4004 -25.3604 87 -41.5898c0.788086 -0.592773 1.42676 -1.87402 1.42676 -2.86035\r\n-c0 -0.985352 -0.638672 -2.2666 -1.42676 -2.85938zM503 214.91c0.578125 -6.2832 1.04688 -16.5039 1.04688 -22.8135c0 -25.8613 -7.62793 -66.4043 -17.0273 -90.4971c-0.495117 -1.2373 -1.98047 -2.24316 -3.31348 -2.24316\r\n-c-0.495117 0 -1.25 0.19043 -1.68652 0.423828c-29.4893 16.3594 -61.6094 28.3398 -92.6797 39.9297c-60.2803 22.4902 -112.34 41.8896 -112.34 84.4902c0 1.45996 -3.87988 53.6299 80.25 53.6299c50.8604 0 92.7197 -17.4805 144.48 -60.4805\r\n-c0.625 -0.530273 1.19336 -1.62305 1.26953 -2.43945z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"squarespace\" unicode=\"&#xf5be;\" horiz-adv-x=\"512\" \r\n-d=\"M186.12 104.66l157.22 157.2c38.5703 38.5898 101.13 38.5898 139.72 0c38.5908 -38.5801 38.5908 -101.13 0 -139.721l-119.25 -119.239l-0.0400391 -0.0400391c-19.2891 -19.2705 -50.5498 -19.25 -69.8193 0.0400391l154.149 154.14\r\n-c19.29 19.29 19.29 50.5703 0 69.8604s-50.5693 19.29 -69.8594 0l-157.181 -157.181c-9.64941 -9.64941 -25.29 -9.64941 -34.9395 0c-9.65039 9.65039 -9.65039 25.29 0 34.9404zM430.65 209.46c9.63965 -9.63965 9.63965 -25.2803 -0.0107422 -34.9297l-157.199 -157.2\r\n-c-38.5801 -38.5703 -101.141 -38.5703 -139.721 0l-0.0195312 0.0195312c-9.64062 9.65039 -9.62988 25.29 0.0195312 34.9307l0.0107422 0.00976562c9.64941 9.63965 25.2793 9.62988 34.9199 -0.00976562l0.0498047 -0.0498047\r\n-c19.29 -19.2607 50.5498 -19.2402 69.8193 0.0498047l157.2 157.18c9.64062 9.65039 25.2803 9.65039 34.9307 0zM168.66 122.13c-38.6006 -38.5801 -101.13 -38.5801 -139.73 0.00976562c-38.5801 38.5801 -38.5801 101.13 0 139.721l119.23 119.25l0.0195312 0.0195312\r\n-c19.3008 19.2803 50.5703 19.2705 69.8506 -0.0195312l-154.17 -154.17l-0.0302734 -0.0302734c-19.2803 -19.2998 -19.2598 -50.5605 0.0302734 -69.8398l0.00976562 -0.0107422c19.29 -19.29 50.5703 -19.2793 69.8496 0.0107422l157.21 157.18\r\n-c9.64062 9.63965 25.2705 9.63965 34.9102 0c9.64062 -9.65039 9.64062 -25.29 0 -34.9404zM81.3301 174.53c-9.64062 9.64941 -9.65039 25.29 0 34.9297l157.189 157.19c38.5908 38.5898 101.131 38.5898 139.721 0c9.64941 -9.64062 9.64941 -25.2803 0 -34.9307\r\n-c-9.64062 -9.64941 -25.2803 -9.64941 -34.9307 0l-0.0195312 0.0205078c-19.29 19.2793 -50.5596 19.2695 -69.8398 -0.0205078l-157.21 -157.189c-9.64062 -9.64062 -25.2705 -9.64062 -34.9102 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"themeco\" unicode=\"&#xf5c6;\" \r\n-d=\"M202.9 439.57c9.89941 5.72949 26 5.81934 35.9492 0.209961l191.15 -107.63c10 -5.60059 18 -19.4404 18 -30.8604v-217.29c0 -11.4404 -8.05957 -25.29 -18 -31l-191.19 -108.74c-9.92969 -5.66016 -26 -5.56934 -35.8496 0.209961l-185.1 108.41\r\n-c-9.86035 5.78027 -17.8604 19.7402 -17.8604 31.1201v217.29c0 11.4404 8 25.3604 17.9102 31.0801zM125.5 239.74c-15.9404 0 -31.8896 -0.140625 -47.8301 -0.140625v-101.449h19.1299v29.8496h28.7002c49.71 0 49.5596 71.7402 0 71.7402zM265.64 139.45\r\n-l-30.7295 34.6396c37 7.50977 34.7998 65.2305 -10.8701 65.5098c-16.0898 0 -32.1699 0.140625 -48.2598 0.140625v-101.59h19.1299v33.9092h18.4102l29.5596 -33.9092h22.7598v1.2998zM224.05 221.77c23.3398 0 23.2598 -32.46 0 -32.46h-29.1299v32.46h29.1299z\r\n-M128.49 223.37c21.1797 0 21.1094 -38.8506 0 -38.8506h-32.3105v38.8408zM321.14 241.62c-68.46 0 -71 -105.8 0 -105.8c69.4805 0.00976562 69.4102 105.8 0 105.8zM321.14 224.23c44.1201 0 44.8008 -70.8604 0 -70.8604c-44.7998 0 -44.4297 70.8604 0 70.8604z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weebly\" unicode=\"&#xf5cc;\" horiz-adv-x=\"512\" \r\n-d=\"M425.09 382.17c50.9102 0 87.5498 -35.1504 86.9199 -83.4697c0 -21.6201 -0.950195 -18.5498 -77.5 -227.2c-22.3799 -60.5703 -67.7695 -69.6699 -92.7402 -69.6699c-39.2393 0 -70.0391 19.46 -85.9297 54.29c-15.8896 -34.5205 -46.7002 -53.9805 -85.9297 -53.9805\r\n-c-24.9697 0 -70.3701 8.78027 -92.7402 69.3506c-72.9902 200.21 -77.1699 204.52 -77.1699 233.479c0 43.3105 38.5898 77.2002 87.54 77.2002c40.21 0 73.2803 -25.7295 83.6602 -64.3301c18.4795 58.0498 65.5 64.3301 85.2803 64.3301\r\n-c19.4492 0 66.7891 -6.26953 84.9492 -64.3301c10.3799 38.6006 43.7803 64.3301 83.6602 64.3301zM451.43 267.36c3.49023 11.1992 7.29004 19.3701 7.61035 27.2393c0 22.3906 -16.1602 35.71 -38.3301 35.71c-18.6904 0 -31.9902 -11.7998 -36.1104 -29.0498\r\n-l-44.0293 -139.819h-0.950195l-44.6602 136.79c-6.01953 19.9697 -16.4697 32.0791 -38.96 32.0791s-32.9404 -12.4092 -38.96 -32.0791l-44.6602 -136.79h-0.950195l-44.0293 139.819c-4.12012 17.25 -17.4199 29.0498 -36.1104 29.0498\r\n-c-22.4902 0 -38.3301 -13.0195 -38.3301 -29.3594c0 -10.5898 2.54004 -19.6699 7.91992 -34.5l64.9404 -175.23c7.91016 -21.4795 21.2197 -37.2197 46.2393 -37.2197c23.1201 0 37.0605 12.0996 44.0205 33.5996l39.2803 117.42h0.949219l39.2803 -117.42\r\n-c6.65039 -21.4893 20.5898 -33.8994 44.0303 -33.8994c25.0195 0 38.3203 15.7295 46.2402 37.2197z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wix\" unicode=\"&#xf5cf;\" horiz-adv-x=\"640\" \r\n-d=\"M393.38 316.31c0 -13.0293 2.08008 -32.6895 -28.6797 -43.8291c-9.52051 -3.4502 -15.9502 -9.66016 -15.9502 -9.66016c0 31 4.71973 42.2197 17.4004 48.8594c9.75 5.11035 27.2295 4.62988 27.2295 4.62988zM277.58 280.77\r\n-c5.47949 26.3408 30.8799 38.3408 55.2998 35.2705l-65.5703 -247.93s-21.6396 -1.56055 -32.46 3.95996c-14.2197 7.25 -20.9893 12.8398 -29.5898 46.5693c-7.66992 30.0703 -29.1494 118.4 -31.1201 124.7c-4.30957 13.8105 -10.6396 14.9404 -15.3994 0\r\n-c-2.00977 -6.29004 -23.4502 -94.6299 -31.1201 -124.7c-8.61035 -33.7295 -15.3701 -39.3193 -29.5898 -46.5693c-10.8301 -5.52051 -32.46 -3.95996 -32.46 -3.95996l-65.5703 247.93c23.8604 3 49.7305 -8.5498 55.2803 -35.2705l34.2393 -132.659l28.4805 108.569\r\n-c7.76953 32.3506 21.0596 48.5303 48.4297 48.5303c27.6201 0 40.7402 -16.54 48.4307 -48.5303l28.4795 -108.569zM393.36 275.56v-8.97949l0.0195312 0.00976562v-150.27c-0.129883 -30.8301 -3.33008 -37.6807 -17.2598 -44.7803\r\n-c-10.8203 -5.52051 -27.3701 -3.42969 -27.3701 -3.42969v152.069c0 21.25 -1.95996 27.9404 13.1797 35.2002c6.19043 2.96973 11.96 5.25 17.9707 8.61035c9.35938 5.22949 13.46 11.5693 13.46 11.5693zM556.8 191.48l82.9902 -123.36s-35.9297 -4.62012 -53.3203 11.21\r\n-c-13.9102 12.6602 -23.7393 28.3398 -53.1396 70.7197c-0.5 0.770508 -6.25977 10.5205 -13.0703 0c-34.9297 -50.3496 -41.0195 -60.2598 -52.5098 -70.7197c-17.3799 -15.8301 -53.9502 -11.21 -53.9502 -11.21l82.9697 123.36l-83.1992 123.739\r\n-s35.1094 5.98047 52.5 -9.84961c13.3799 -12.1797 24.8896 -30.2402 54.1797 -72.4697c6.82031 -10.54 12.5996 -0.730469 13.0703 0c29.7695 42.9199 40.8799 60.3691 54.1797 72.4697c17.3896 15.8301 52.5 9.84961 52.5 9.84961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ello\" unicode=\"&#xf5f1;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM391.84 154.8c2.48047 7.44043 -2.47949 15.71 -9.91992 17.3604c-7.43945 2.47949 -15.71 -2.48047 -17.3604 -9.91992\r\n-c-14.0498 -52.9102 -62 -90.1104 -116.56 -90.1104s-102.51 37.2002 -116.56 90.1104c-1.65039 7.43945 -9.9209 11.5693 -17.3604 9.91992c-7.44043 -1.65039 -11.5703 -9.91992 -9.91992 -17.3604c16.5303 -65.3096 76.0498 -111.6 143.84 -111.6\r\n-s127.31 46.29 143.84 111.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hackerrank\" unicode=\"&#xf5f7;\" horiz-adv-x=\"512\" \r\n-d=\"M477.5 320c14.5 -25 14.4805 -230.92 -0.00976562 -256s-192.391 -128 -221.33 -128c-28.9404 0 -206.83 102.8 -221.32 128s-14.4102 230.79 0 256s192.351 128 221.32 128s206.84 -103.05 221.34 -128zM316.13 33.7803c3.95996 0 40.4404 35.7793 37.5605 38.6895\r\n-c-0.870117 0.839844 -8.82031 1.49023 -17.6904 1.83984c0 32.4004 -3 19.0508 0.679688 210.341c0.0703125 3.65918 -1.04004 5.37988 -4.5 5.37988c-11.0801 0.0693359 -22.1602 0.0195312 -33.2295 -0.0605469c-3.25977 -0.0292969 -4.31055 -1.80957 -4.20996 -5.2002\r\n-c1.58984 -48.8994 1.2002 -79.0898 1.2002 -83.6396h-80.2607c0.629883 25.7998 0.209961 79.6396 2.62988 105.39v3.16016c8.87012 0.350586 15.9004 0.970703 16.7705 1.83984c2.90039 2.91016 -34.3203 38.6904 -38.2705 38.6904\r\n-c-3.94922 0 -41.4092 -35.7695 -38.4893 -38.6904c0.879883 -0.839844 7.58984 -1.48926 17.2598 -1.83984v-3.16992c3.15039 -128.67 1.07031 -179.229 0.150391 -212.67c-0.130859 -4.58008 1.63965 -6.10938 5.73926 -6.10938\r\n-c10.1406 0.0292969 20.2803 -0.0800781 30.4102 -0.0800781c4.16016 -0.0605469 5.96973 1.39941 5.74023 5.93945c-1.83008 36.6797 -1.37012 65.7803 -1.37012 72.8799h79.9297c0 -2.41992 0.44043 -3.84961 0.44043 -5.84961\r\n-c-0.350586 -17.7305 -0.94043 -60.0898 -0.94043 -86.3203c-11.29 -0.349609 -16.6797 -0.959961 -17.5498 -1.83008c-2.91016 -2.91992 34 -38.6895 38 -38.6895z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kaggle\" unicode=\"&#xf5fa;\" horiz-adv-x=\"320\" \r\n-d=\"M304.2 -53.5l1.39941 -7.59961c-0.5 -2 -2.5 -3 -6 -3h-66.8994c-4 0 -7.5 1.7998 -10.5 5.2998l-110.5 140.6l-30.7998 -29.2998v-109c0 -5 -2.5 -7.5 -7.5 -7.5h-51.9004c-5 0 -7.5 2.5 -7.5 7.5v497c0 5 2.5 7.5 7.5 7.5h51.9004c5 0 7.5 -2.5 7.5 -7.5v-306\r\n-l132.3 133.7c3.5 3.5 7 5.2998 10.5 5.2998h69.2002c7 0 7.89941 -7.7998 5.2998 -10.5l-139.8 -135.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"markdown\" unicode=\"&#xf60f;\" horiz-adv-x=\"640\" \r\n-d=\"M593.8 388.9c25.5 0 46.2002 -20.7002 46.2002 -46.1006v-301.6c0.0996094 -25.4004 -20.5996 -46.1006 -46.0996 -46.1006h-547.7c-25.5 0 -46.2002 20.7002 -46.2002 46.2002v301.5c0 25.4004 20.7002 46.1006 46.2002 46.1006h547.6zM338.5 87.4004h-0.200195v209.199\r\n-h-61.5l-61.5 -76.8994l-61.5 76.8994h-61.5v-209.199h61.7002v120l61.5 -76.9004l61.5 76.9004v-120h61.5zM473.8 84.2998l92.2002 107.7h-61.5v104.6h-61.5v-104.6h-61.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"neos\" unicode=\"&#xf612;\" horiz-adv-x=\"512\" \r\n-d=\"M415.44 -64h-95.1104l-108.21 154.54v-91.0996l-86.4297 -63.4404h-97.6904v482.18l40.4697 29.8203h108.05l123.74 -176.13v112.68l86.4307 63.4502h97.6895v-461.5zM38.7695 412.73v-460.73l72 52.8799v249.12l215.5 -307.64h84.79l52.3506 38.1699h-78.2705\r\n-l-316.14 450.47zM121.31 -53.8799l80 58.7803v101l-79.7598 114.399v-220.939l-72.5498 -53.25h72.3398zM80.6299 437.23l310.601 -442.57h82.3691v442.57h-79.75v-317.561l-222.939 317.561h-90.2803zM311 256.35l72 -102.81v278.53l-72 -53v-122.721z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"zhihu\" unicode=\"&#xf63f;\" horiz-adv-x=\"640\" \r\n-d=\"M170.54 299.87h122.68v-217.55h-49.5293l-42.0107 -26.3701l-7.70996 26.3701l-23.4297 0.00976562v217.54zM268.29 105.94v170.31h-72.8203v-170.31l11.9004 -0.0400391l5.08008 -17.4707l27.8994 17.5107h27.9404zM149.83 200.33\r\n-c7.5 0 7.58984 -23.6104 7.58984 -23.6104h-61.6504c-0.879883 -13.1201 -3.50977 -26.6895 -7.86914 -40.6699l14.6191 11.6201c8.73047 -8.75 29.2109 -32.8896 36.79 -41.8096c9.15039 -13.1006 1.24023 -39.9902 1.24023 -39.9902l-53.96 64.9395\r\n-c-12.6094 -48.3496 -35.5898 -69.25 -35.5898 -69.25c-10.0898 -8.96973 -30.5098 -15.75 -51 -9.89941c42.8301 33.2197 66.4502 75.2402 70.8496 125.1h-65.5801s3.82031 23.6201 15.5605 23.6201h52.2695c0.480469 6.56055 1.68066 62.9404 1.68066 73.4404h-28.8701\r\n-c-2.62988 -7.87012 -3.03027 -8.64062 -5.14062 -14.5303c-11.4697 -21.0303 -30.9492 -21.5703 -36.8398 -22.21c17.4902 34.9795 27.3105 69.2197 30.7002 78.1201c8.2002 21.5693 32.2705 21.5693 32.2705 21.5693c-5.25 -14.0098 -9.63086 -27.5498 -13.1201 -40.6699\r\n-h88.5c10.5498 0.25 8.58008 -22.3096 8.58008 -22.3096h-51.1602c0 -21.8701 -0.459961 -46.3604 -2.2002 -73.46h52.3301zM561.85 201.93l-19.2295 14.4307s30.8301 40.0498 36.8301 48.1992c8.72949 10.7402 27.3799 -4.05957 27.3799 -4.05957\r\n-s-24.1504 -32.9297 -44.9805 -58.5703zM411.76 261.02l0.00976562 0.0107422c8.99023 -8.25 34.6602 -45.8604 34.6602 -45.8604l-19.46 -13.7295c-1.59961 2.40918 -41.1201 57.4492 -41.1201 57.4492s16.9004 10.3799 25.9102 2.12988zM640 189.65\r\n-c0 0 0.950195 -23.79 -8.73047 -23.79h-122.359v-73.3203c0.780273 -28.0303 -15.3301 -45.3096 -44.8906 -45.3096c-9.84961 0 -16.1396 1.75977 -26.0195 6.56934c-12.9805 7.4502 -17.3203 17.8701 -19.3096 21.8398c15.6094 -0.65918 27.6094 -1.91992 41.6895 -1.80957\r\n-c13.29 -0.870117 24.4805 7.15039 24.4805 21.1201v70.9199h-107.94c-22.6895 0.540039 -25.5098 22.8496 -25.5098 22.8496h133.47v99.8105c-12.8301 0 -31.6797 -0.830078 -56.5098 -2.43066c-26.46 -0.80957 -35.8398 -2.58984 -49.1504 0.890625\r\n-c-8.16016 2.46973 -14.1797 10.7295 -15.7793 19.5498c67.1396 1.55957 232.359 18.0498 232.359 18.0498s20.1006 5.75977 23.1699 4.58008c12.8105 -6.25 0.589844 -33.4395 0.589844 -33.4395c-17.6396 -0.810547 -46.8896 -2.40039 -87.7695 -4.81055\r\n-c-10.4297 -0.799805 -18.04 -1.2002 -22.8496 -1.2002v-101c0.149414 0 111.279 0.930664 131.06 0.930664z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"alipay\" unicode=\"&#xf642;\" \r\n-d=\"M377.74 416c38.6895 0 70.0898 -31.5703 69.9297 -70.2598v-234.41c-48.6104 16.7002 -99.6895 36.04 -148.62 52.7402c23.1406 44.2998 38.3506 90.9199 38.3506 90.9199h-88.7705v31.2402h109.45v19.0098h-109.44v50.4199h-50.9199v-50.4199h-109.439v-19.0098h109.439\r\n-v-31.2402h-92.0801v-16.7002h178.2s-9.91992 -30.25 -26.4502 -60.3398c-47.7793 14.71 -91.75 24.96 -127.13 24.96c-84.6396 0 -103.49 -42.4902 -99.5195 -81.5c3.30957 -31.0703 26.4502 -76.3701 97.04 -76.3701c64.4795 0 116.55 37.0303 148.62 81\r\n-c61.0098 -28.0996 125.64 -62.8203 171.6 -88.4404c-0.5 -38.5195 -31.7402 -69.5996 -70.2598 -69.5996h-307.48c-38.8496 0 -70.2598 31.4102 -70.2598 70.2598v307.48c0 38.8496 31.4102 70.2598 70.2598 70.2598h307.48zM47.2803 125.05\r\n-c-0.990234 17.5205 10.9102 50.5801 78.3594 50.5801c24.96 0 64.8105 -12.7295 109.44 -31.4102c-25.29 -33.2197 -65.7998 -72.8994 -117.87 -72.8994c-59.6797 0 -68.9404 33.5596 -69.9297 53.7295z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"the-red-yeti\" unicode=\"&#xf69d;\" horiz-adv-x=\"512\" \r\n-d=\"M488.23 206.3c2.49805 -3.35254 5.51465 -9.31152 6.76953 -13.2998c3.37793 -9.19922 7.36523 -24.5205 8.90039 -34.2002l-2.5 -0.5l-13 14.2998c-17.9004 -28.0996 -9.90039 -15.3994 -16.7002 -25.0996c0 -124.2 -101.3 -211.5 -223 -211.5\r\n-c-61.5 0 -113.9 20.2002 -157.5 60.2002c-64.5 60.8994 -64.9004 125 -64.9004 150.5c-0.5 1.7998 -0.700195 3.5 -1.2002 5.2002l-20.1992 -22.4004c-6.80078 43 25.6992 74.2998 33 80.7002c0.5 1 0.699219 2.2002 1.19922 3.2002l-28.7998 1l-3 3.39941\r\n-c8.5 3.5 25.2998 13.2998 40.2998 14.2998c6.30273 12.0684 18.7568 30.123 27.8008 40.3008c1.2998 6.39941 3.2998 14.1992 6.59961 25.7998l-7.59961 -4.7002l-1.7002 1.7002l1.7002 8.39941c8.87207 21.3857 29.7939 51.5811 46.6992 67.4004l-33 14.2998h3.7002\r\n-c20.9004 4.90039 33.2002 3.2998 49.2002 0c-2.5 4.10059 -5.40039 10.5 -8.40039 18.9004c-1.16699 3.20996 -2.11426 8.58691 -2.11426 12.0029c0 3.81152 1.1709 9.76855 2.61426 13.2969c8.90039 -7.40039 14.3008 -24.5996 15.2002 -27\r\n-c0.700195 3.59961 2.10059 21.2998 33.7002 45.5l1.83008 -0.5l-12 -44.2002c30 17.7002 63 21.9004 97.9004 11.7998c-12.7002 -12.1992 -24.3008 -28.8994 -42.5 -33c7.39941 -2.2998 28.6992 -9.69922 34.1992 -15.1992l-24.7998 7.09961\r\n-c6.5 -6 19.6006 -16.4004 25.1006 -25.0996c19.418 -0.893555 50.0615 -6.85254 68.3994 -13.3008l-0.5 0.5c29.4004 14.7002 37.7002 27.3008 74.7998 3c0 -30.1992 -2.2998 -23.3994 3 -29.7998c6.41602 5.42383 17.75 12.8154 25.3008 16.5\r\n-c13 6.40039 23.0996 4.7002 30.6992 -5.89941c11.8008 0 17.8008 -15.7002 18.4004 -27c14.7998 -2.90039 2.7002 -30.7002 2.5 -30.7002l-7.09961 -18.2002c7.7998 -7.7998 22.0996 -20.9004 31.6992 -44.7998zM398 336.8c-13.0996 8.90039 -22.7002 11.9004 -28.2998 8.5\r\n-c8.09961 -7.2002 13 -14.2998 13.5 -20.7002c1.2002 -7.59961 -2.2002 -14.7998 -10.6006 -21.8994l-4.19922 -3.40039c3.60059 -5.90918 7.36328 -16.2578 8.39941 -23.0996h2.5c-2.09961 13.8994 -2.5 11 0.700195 14.7998c11 -6.40039 14.9004 -14.5 16 -19.9004\r\n-c21.7998 10.1006 29.5 12.7002 54.7998 20.9004l-18.2002 -16c11.4004 0 25.6006 0.299805 46.5 -8.40039c7 24.3008 7.10059 20.7002 2.5 20.7002l-4.69922 -11.2998c-1.7002 10.5 -2.90039 18.9004 -3.40039 25.2998c-0.5 6.7002 -3.90039 9.60059 -9.2998 10.1006\r\n-c-0.00976562 -0.384766 -0.0175781 -1.00781 -0.0175781 -1.3916c0 -3.87012 0.769531 -10.0566 1.71777 -13.8086l-1.7002 -5.90039c-2.90039 10.6006 -5.90039 20.2002 -9.2998 27.7998c-9.7002 17.7002 -30.2002 -9.19922 -43 -11.2998\r\n-c3.72266 -0.207031 9.77051 -0.375977 13.5 -0.375977c3.72852 0 9.77637 0.168945 13.5 0.375977l-22.4004 -5.39941l3.40039 -4.7002c-5.5 0 -16.9004 -0.900391 -22.4004 17.2002zM358.4 346.9l-20.3008 -11.8008c11.3008 -7.59961 20.2002 -18.1992 27.8008 -31.1992\r\n-c6.39941 2.89941 10.0996 5.09961 11.7998 7.59961c2.5 2.7998 2.5 4.7002 3 7.09961c0.599609 1.30078 0.799805 2.7002 -3.40039 11.1006c-7.5 11.7998 -16.2002 15.2998 -18.8994 17.2002zM91 304.9c-7.7998 -24.1006 -11.7002 -49.4004 -13.2002 -74.6006l13.2002 -5\r\n-l1.2002 27c9.5 -16.3994 11.2002 -23.2998 12.2998 -28.7998c2.7998 2.09961 7.7002 7 22.5996 11.2998l1.2002 -1.7002l-7.59961 -10.5996c10.0996 3.5 19.5 3.5 28.2998 0.5l-10.5996 -8.40039c22.7998 -8.39941 26.5996 -7.59961 38.3994 -26.0996l-11.7998 1.2002\r\n-c34.9297 -20.5 66 -47.9004 141.2 -63.2002c15.5996 24.0996 14 21.0996 14 22.9004l0.200195 0.199219l-0.200195 0.200195c-0.700195 1.90039 -14.1006 16.6006 -18.2002 20.7002c7.2998 -1.7998 6 -0.900391 10.7998 -3.7002\r\n-c1.7002 -0.899414 -5.39941 5.40039 -21.8994 20.2002c16.5 -6.7002 27.5996 -15.5 33 -27.7998l1.69922 30.7002l-22.3994 17.6992l6.39941 5.90039c-7.2998 0 -31 3.7002 -49.1992 -16l-2.5 0.5c5.89844 12.1807 13.0664 32.7881 16 46\r\n-c1.61914 7.72656 2.96289 20.4053 3 28.2998c0 19.5 -4.7002 38.4004 -13.5 56.6006c-6.40039 13.5 -16.5 25.2998 -30 35.3994c-5.4707 4.09961 -14.7441 10.1475 -20.7002 13.5c3 0.700195 1 1.2002 -5.40039 1.2002c-6.39941 0.200195 -13 0.700195 -19.3994 1.2002v-3\r\n-c-8.67773 -1.375 -20.0127 -8.18457 -25.3008 -15.2002h-1.19922l-5.40039 -3.40039c-1.2002 2.90039 0 6.30078 4.2002 9.30078l10.5996 11.2998l-3.39941 -0.5l2 3.39941c-2.30078 0.200195 -4.2002 0.5 -6.2002 0.700195l-0.5 1.2002l2.5 1.7002\r\n-c2.2002 -0.200195 4.59961 -0.5 7.09961 -0.700195c2.52539 1.3457 6.89746 2.43848 9.75879 2.43848c1.18359 0 3.08301 -0.196289 4.24121 -0.438477l2.5 -1.2002l0.200195 -0.5c6.50488 0.421875 16.9883 1.7207 23.4004 2.90039\r\n-c20.6992 2.89941 36.6992 11.2998 48.5 24.7998l-21.1006 0.5c-25.7998 0.5 -49.3994 -5.40039 -71.2998 -18.9004l-2.5 2.5l0.5 4.7002l1.7002 7.10059c1.37695 7.08105 4.24414 18.415 6.39941 25.2998c-1.69922 -0.700195 -4.59961 -4.90039 -9.2998 -11.2998\r\n-c-4.7002 -6.40039 -8.39941 -13 -10.0996 -19.4004c-0.905273 -4.24512 -3.54785 -10.6514 -5.90039 -14.2998l-13.5 29l8.40039 -35.7998l-0.5 -1.7002h-0.015625c-4.51953 0 -11.6807 1.12012 -15.9844 2.5c-3.40039 0.700195 -10.6006 1.2002 -20.9004 1.2002\r\n-c0.5 0 -0.700195 0 -3.2002 -0.5c5.40039 -1.30078 13.5 -4.2002 24.8008 -8.40039l6.39941 1.2002c-4.2002 -3.40039 -10.8994 -10.1006 -20.2002 -19.4004c-9.39941 -8.89941 -20.1992 -26.0996 -32.5 -50.2002l4.2002 1.2002l10.1006 9.2998l-5.40039 -4.69922\r\n-l13 12.2998l-2.5 -3.40039c-5.09961 -7.59961 -8.09961 -12.2998 -9.2998 -15.2002zM367.5 -25.0996c8.2998 40.2998 3.59961 55.1992 -0.700195 89.5c-35.5 -11.8008 -20.2998 -6 -32 -10.8008l10.5 -14.1992l-1.2002 -1.2002c-20.1992 6 -23.1992 10.7998 -27.7998 15\r\n-c6 -22.2002 13.9004 -26.4004 29.5 -31.7002c-9.5 -9.59961 -25.3994 4 -34.3994 13l2.5 -23.5996l-4.2002 -3c-5 22.0996 -22 39.0996 -25.2998 39.0996c-44 -13 -79.1006 -5.7998 -113.9 10.5996c-1.59961 -0.399414 -70.5996 -18 -120.5 37.1006\r\n-c13.7002 -35 32.2998 -63.7002 71.2998 -82.6006c-4.13574 8.56934 -13.4102 20.4863 -20.7002 26.6006c0 0 0.700195 3.7002 1.2002 10.0996c19.4004 -19.3994 50.7002 -39.5 93.2002 -60.2002c-59.5996 24.5 -59.9004 24.8008 -69.0996 29l16 -20.6992\r\n-c-3 -1.30078 -6.7002 -0.5 -10.1006 1.19922c-10.3359 6.03809 -26.1943 17.1484 -35.3994 24.8008c1.89941 -2.2002 80.0996 -98.5 200.899 -74.3008c-43.0996 21.8008 -52.3994 52.4004 -66.5996 73.5l17.7002 -7.59961l-11.8008 23.0996\r\n-c20.1006 -27.7998 28.6006 -35 38.4004 -44.2998l-30 16.5c12.5996 -27.0996 33.7002 -47 63.5 -58.7998c2.90039 1.5 9.09961 -1.09961 59 23.9004zM482.8 189.3l8.93066 -12.7998l-12.3008 32.5c10.9004 0 10 -0.0996094 21.2002 -3.40039\r\n-c-6.72168 9.44824 -18.8184 23.7842 -27 32l-26.5996 23.1006l1.2002 3l23.5996 2.5c-9.00293 1.98535 -23.7871 3.86719 -33 4.2002l-17.7002 -0.5l-0.5 2.89941l14.7998 13l-41.7998 -20.2002l-12.2998 18.9004l3.40039 -16l-2.5 -1.2002l-5.90039 4.2002h-10.0996\r\n-l5.39941 -4.2002v-2l-13.5 -27.7998c-10.0996 -31.2002 -21.8994 -67.9004 -35.3994 -109.7l1.19922 16l-1.19922 -3v-0.5c-6.40039 -16 -13.6006 -29.5 -21.2002 -39.5996l9.2998 21.8994l-46.7002 -20.1992c11.7998 13.5 23.6006 19.3994 34.9004 18.8994\r\n-c-71.2002 11.4004 -106.2 41 -110.4 46c3.60059 -6.2002 13.2002 -17.7998 16 -40.0996l-1.7002 -1.2002c-4.2998 15.5996 -16.3994 46.5996 -55.7998 69.5996l23.6006 -2.5c-10.5 12.6006 -36.3008 17.8008 -40.8008 16l-2.5 2.5l8.40039 8.40039l-22.2998 -5.7998\r\n-l5.39941 13.5c-8.09961 -4.40039 -4.2998 -2.40039 -17 -8.90039l-1.69922 0.5c0.599609 0.600586 0.899414 -0.700195 -3 9.2998c-0.600586 -11 -0.400391 -8.59961 -1 -11.7998c-1.07324 -0.355469 -2.73145 -1.11719 -3.7002 -1.7002c-40 20.6006 -57.2002 11 -73 5.2002\r\n-c36.7998 -6 29.2998 -4 38.3994 -9.2998c-25.7998 -12.2002 -31.8994 -12.5996 -51.3994 -70.0996l22.2695 22.2998l2.5 -16.4004c13.4004 -58 68.7002 -92.5 126.4 -83.3994l-26.1006 22.3994l44.8008 -22.3994l-1.2002 -3c4.59961 -1.7002 9.2998 -3 13.5 -4.2002\r\n-c16.4727 -4.87598 43.7852 -8.83203 60.9648 -8.83203c8.94727 0 23.3887 1.08887 32.2354 2.43164l-32.5 21.2002c35.7998 -7 50.6992 -31.4004 56.7998 -39.5996l-7.60059 29l1.2002 2.5l19 -27.9004l-9.2998 26.5996l21.9004 -13.5h1.19922l-3.39941 4.2002\r\n-l7.09961 -4.7002l-14.2998 16l1.2002 3l7.59961 -7.09961c4.2998 1.2002 41.4004 10.5 80.9004 40.2998c47.8994 35.4004 68.0996 73.7998 71.5996 79.7002l-3 9.2998zM476.7 260.6l-18.2002 -1.19922l14.2998 -11.8008zM221.9 253.5\r\n-c2.69922 -5.09961 5.69922 -12.4004 18.3994 -18.7998c-7.5 -10.9004 -8.2998 -10.5 -20.2002 -16c-7.59961 -7.7002 -13.5 -13.1006 -17.6992 -14.7998l7.09961 13c-4.61914 -1.69336 -12.3604 -3.06641 -17.2793 -3.06641c-2.08789 0 -5.45703 0.25293 -7.52051 0.566406\r\n-l-0.5 1.19922c19 2.10059 37.2002 9.40039 46.5 16c-4.10059 4.2002 -7.10059 11.3008 -8.7998 21.9004zM225.6 355.8c4.92578 -2.78809 11.3486 -8.9707 14.3008 -13.7998c14.6992 -24.0996 19.1992 -40.0996 11.2998 -47.7002\r\n-c-7.90039 -7.59961 -16.7998 -7.09961 -26.1006 3c-9.2998 10.1006 -13.5 23.7002 -11.7998 39.6006c1.7002 15.8994 5.90039 22.2998 12.2998 18.8994zM220.9 309.5c7.09961 -21.2998 33.3994 -23.0996 26.8994 4.90039c-3.89941 16.5 -8.7998 27.0996 -15.2002 32.5\r\n-c-6.59961 5.39941 -10.0996 6.69922 -11.2998 4.19922c-2.5 -2.89941 -3.5 -11.2998 -3 -24.7998c7.5 12.7998 11.6006 5.90039 12.5 4.7002l-0.5 -0.5c-0.799805 -1.7002 -2.59961 -3.09961 1.7002 -6.2002l1.2002 0.5v-4.7002\r\n-c-1.7998 -12.5 -6.90039 -12.7998 -12.2998 -10.5996zM175.9 315c-2.09375 0.388672 -4.49707 2.27051 -5.40039 4.2002c-3.5 8.5 0 21.2002 8.09961 21.2002c2 -0.5 3.7002 -1.7002 5.40039 -4.7002c-1.5 -0.400391 -4.7002 -4.7998 0.700195 -5.90039h0.5\r\n-c0 -13.7002 -7.7002 -15.0996 -9.2998 -14.7998zM216 365.1l-3.7002 2.40039l-0.5 2.5c18.2998 0 25.7998 -8.7998 28.2998 -14.2998c-6.0459 3.29688 -16.542 5.97266 -23.4297 5.97266c-0.737305 0 -1.93359 -0.0322266 -2.66992 -0.0732422l-0.5 3zM144.2 315.7\r\n-c1.59961 -1.60059 0.599609 -0.299805 4.89941 -6.60059c-25.3994 -4.69922 -23.1992 -12.2998 -30 -12.2998c0.300781 0.600586 7.10059 16 23.6006 16l-7.10059 7.60059c9.40039 0.5 15.2002 2.09961 19.9004 -5.90039c0.0175781 6.60938 1.31641 17.1826 2.90039 23.5996\r\n-c2 7.60059 3.69922 11.8008 5.39941 13.5c1 1.5 16.2998 15.7002 29 22.4004c2.05469 1.48047 5.77637 2.68262 8.30859 2.68262c1.48438 0 3.81055 -0.44043 5.19141 -0.982422c0.285156 -0.345703 0.515625 -0.989258 0.515625 -1.43652\r\n-c0 -0.0732422 -0.00683594 -0.191406 -0.015625 -0.263672l-13 -7.59961c7.60059 -11.8008 10.5 -25.3008 8.7998 -41.3008c-0.932617 -9.45898 -7.5625 -22.1377 -14.7998 -28.2998l2.90039 -4.7002c-30 2.2002 -24.7998 6.80078 -46.5 23.6006zM162.9 334.4\r\n-c-1.80078 -7.2002 -2.30078 -16 -3.10059 -26l5.40039 -6.40039l7.09961 -3.40039c2.01465 -0.384766 5.31445 -0.697266 7.36523 -0.697266c1.08887 0 2.85156 0.0888672 3.93457 0.197266c1 1.7002 3.5 4.2002 6.40039 7.60059c5 5.89941 7.90039 13.7998 8.40039 23.0996\r\n-c0.0703125 1.18262 0.126953 3.10449 0.126953 4.28906c0 5.92773 -1.40137 15.3408 -3.12695 21.0107c-3 8.10059 -5.90039 11 -10.1006 9.30078c-5.39941 -1.7002 -10.5996 -5.40039 -16 -11.8008c-3 -4.19922 -5.2002 -9.59961 -6.39941 -17.1992zM204.9 278.3\r\n-l-3.10059 -6.5c7.10059 4.2002 13.5 7.2002 19.4004 8.40039l7.09961 0.5l11.7998 -7.60059h-2.5c-8.7998 3.7002 -19.3994 1.2002 -30.6992 -7.59961c-0.5 -4.7002 1.69922 -14.7002 5.89941 -29.5l9.2002 0.5c-21.9004 -6.59961 -37.5996 -8.40039 -48.9004 -5.40039\r\n-c-24.8994 6.7002 -27.3994 23.6006 -27.5 24.1006c-1.47754 5.69238 -2.67676 15.0869 -2.67676 20.9688c0 3.53418 0.438477 9.23828 0.977539 12.7314c-6.40039 -0.5 -11 -4.2002 -15.2002 -10.6006c-2.90039 5.90039 -5.40039 8.7998 -5.90039 9.2998\r\n-c1.5 0.700195 12.2998 7.5 32.5 4.90039l0.5 -2.5l-5.89941 -1.2002c-0.100586 -0.399414 -1.90039 -29.5 18.8994 -24.7998c1.40039 0.299805 1.2998 -0.0996094 36.1006 14.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"acquisitions-incorporated\" unicode=\"&#xf6af;\" horiz-adv-x=\"384\" \r\n-d=\"M357.45 -20.2002c2.2002 -14.2998 4.09961 -28.7002 6.59961 -43.7002h-337.1c-4 0 -6.10059 0.700195 -5.2998 5.7002c2.09961 12.9004 3.5 25.9004 5 38.7998c0.5 4.80078 2.2998 6.80078 7.59961 6.80078c118.1 -1 114.9 -0.300781 121.4 2.39941\r\n-c9.39941 4 14.8994 12.9004 14.8994 23.1006c-0.0996094 42.8994 -0.299805 85.8994 -0.200195 128.8c0 3.7998 -1.19922 5.89941 -4.59961 6.7998c-15.7002 3.90039 -31.2998 7.7002 -47.5996 11.7002c-5.30078 -12.2998 -10.4004 -24.4004 -15.7002 -36.7002\r\n-c1.7998 -3.2998 28.3994 -2.90039 35.2998 -2.90039v-27.5996h-114.3c1 8.59961 1.7002 16.7998 3.2002 24.9004c0.299805 1.39941 3.59961 3.09961 5.5 3.19922c8.39941 0.400391 16.8994 0.300781 25.3994 0.100586c4 0 5.90039 1.09961 7.60059 5.2002\r\n-c16.5996 40.6992 13.5 31.1992 67.2998 161c31.5 76.0996 33 76 32.5996 87.3994c-0.700195 18.6006 -25.3994 22.2998 -37.7002 22.1006c-30 -0.400391 -38.3994 0.5 -101.8 0.5c-7.2002 44.5 -4.2002 32.0996 -6.39941 45.2998c-0.700195 4.2002 1 5.2998 4.59961 5.2998\r\n-l339.1 -0.200195c-0.799805 -5.39941 -1.59961 -10.7998 -2.39941 -16.0996c-1.2998 -9.7002 -2.7998 -19.4004 -4 -29.2002c-0.299805 -2.90039 -1.2002 -4.2998 -4.2998 -4.2998c-20.6006 -0.100586 -41.2002 -0.100586 -61.8008 -0.5\r\n-c-18.6992 -0.400391 -37.5996 -0.299805 -56.1992 -2c-13.4004 -1.2002 -23.3008 -12.6006 -18.9004 -26.6006c8.59961 -27.0996 27.7002 -69.0996 36.5 -89.1992c65.7002 -154.2 61.4004 -157 84 -158.601c6.59961 -0.5 13.4004 -0.0996094 20.4004 -0.0996094\r\n-c1.2998 -9.40039 2.59961 -18 4 -27.5h-116v27c10.3994 0 20.3994 0.0996094 30.3994 -0.100586c3.5 0 5 0.700195 3.40039 4.40039c-4.40039 10.2998 -8.7002 20.5996 -13.2002 30.9004c-1.59961 3.69922 -4.09961 4.7998 -8.40039 3.5\r\n-c-12.3994 -3.60059 -24.7998 -6.7002 -37.2998 -9.7002c-4.2998 -1.10059 -6 -2.7998 -5.89941 -7.5c0.799805 -57.5 0.899414 -127.5 1 -129.101c0.399414 -12.5996 8.69922 -21.3994 21 -23.0996c0.899414 -0.200195 12.8994 -2.7998 112.699 -2.59961\r\n-c8.30078 0 8.40039 0.0996094 9.60059 -7.60059zM182.55 185.5c2.46484 -0.869141 6.58691 -1.5752 9.2002 -1.5752s6.73535 0.706055 9.2002 1.5752c13 4.2002 26.2998 7.7998 39.3994 11.7002c1.1123 0.512695 2.86035 1.45312 3.90039 2.09961\r\n-c-6.7002 17.4004 -13.0996 34.2002 -19.7002 50.9004c-8.89941 22.7002 -17.7002 60.2998 -27 82.7998c-1.5 0.799805 -1.89941 -2.40039 -9.39941 0c-17.1006 -44 -34.1006 -87.7998 -51.3008 -132.1c1.54297 -0.917969 4.1416 -2.2168 5.80078 -2.90039\r\n-c13.2998 -4.2998 26.5996 -8.2998 39.8994 -12.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"critical-role\" unicode=\"&#xf6c9;\" \r\n-d=\"M225.82 448c0.259766 -0.150391 216.569 -124.51 217.12 -124.72c3 -1.18066 3.69922 -3.45996 3.69922 -6.56055c-0.0732422 -83.4463 -0.0732422 -166.899 0 -250.359c0.00976562 -0.124023 0.0175781 -0.326172 0.0175781 -0.450195\r\n-c0 -2.06836 -1.52148 -4.45703 -3.39746 -5.33008c-21.3701 -12 -207.859 -118.29 -218.93 -124.58h-3c-79.3301 45.6602 -218.25 125.44 -218.4 125.52c-1.04297 0.491211 -1.89062 1.8252 -1.89062 2.97754c0 0.0732422 0.00488281 0.19043 0.0107422 0.262695\r\n-c0 0.870117 0 225.94 -0.0498047 253.101c-0.0078125 0.102539 -0.0136719 0.269531 -0.0136719 0.37207c0 1.78223 1.31836 3.82422 2.94336 4.55762c23.2607 13.0996 209.271 119.21 220.141 125.21h1.75zM215.4 427.58l-0.219727 0.158203\r\n-c-64.7471 -36.8604 -129.474 -73.7305 -194.18 -110.61c0 -0.120117 0.0800781 -0.229492 0.129883 -0.349609l30.8604 -11.6406c-7.70996 -6 -8.32031 -6 -10.6504 -5.12988c-0.0996094 0 -24.1699 9.28027 -26.7998 10v-230.43\r\n-c0.879883 1.41016 64.0703 110.91 64.1299 111c1.62012 2.82031 3 1.91992 9.12012 1.51953c1.40039 -0.0898438 1.47949 -0.219727 0.780273 -1.41992c-41.1904 -71.3301 -36.4004 -63 -67.4805 -116.939c-0.80957 -1.40039 -0.609375 -1.12988 1.25 -1.12988h186.5\r\n-c1.44043 0 1.69043 0.229492 1.7002 1.63965v8.87988c0 1.33984 2.36035 0.810547 -18.3701 1c-7.45996 0.0703125 -14.1396 3.21973 -21.3799 12.7002c-7.37988 9.66016 -14.6201 19.4297 -21.8496 29.21c-2.28027 3.08008 -3.4502 2.37988 -16.7607 2.37988\r\n-c-1.75 0 -1.7793 0 -1.75977 -1.82031c0.290039 -26.21 0.150391 -25.2695 1 -32.6592c0.520508 -4.37012 2.16016 -4.2002 9.69043 -4.81055c3.13965 -0.259766 3.87988 -4.08008 0.519531 -4.91992c-1.57031 -0.389648 -31.5996 -0.509766 -33.6699 0.0996094\r\n-c-0.982422 0.269531 -1.78027 1.31543 -1.78027 2.33398c0 1.16016 0.931641 2.2334 2.08008 2.39648c3.29004 0.759766 6.16016 -0.80957 6.66016 4.44043c1.2998 13.6592 1.16992 9 1.09961 79.4199c0 10.8193 -0.349609 12.5801 -5.35938 13.5498\r\n-c-1.21973 0.240234 -3.54004 0.160156 -4.69043 0.549805c-2.87988 1 -2 4.83984 1.77051 4.84961c33.6699 0 46.0801 1.07031 56.0596 -4.85938c7.74023 -4.61035 12 -11.4805 12.5098 -20.4004c0.880859 -14.5898 -6.50977 -22.3496 -15 -32.5898\r\n-c-0.282227 -0.241211 -0.510742 -0.738281 -0.510742 -1.11035c0 -0.371094 0.228516 -0.868164 0.510742 -1.10938c2.60059 -3.25 5 -6.62988 7.70996 -9.83008c27.5605 -33.2305 24.1104 -30.54 41.2803 -33.0605c0.890625 -0.129883 1 0.419922 1 1.15039v11\r\n-c0 1 0.320312 1.42969 1.41016 1.25977c2.98633 -0.454102 7.86133 -0.822266 10.8818 -0.822266c3.53223 0 9.2207 0.50293 12.6982 1.12207c1.08008 0.150391 1.5 -0.199219 1.47949 -1.33008c0 -0.109375 0.880859 -26.6895 0.870117 -26.7998\r\n-c-0.0498047 -1.51953 0.669922 -1.62012 1.89062 -1.62012h186.71c-27.1533 47.0342 -54.2334 93.9746 -81.2402 140.821c2.25977 0.660156 -0.400391 0 6.69043 1.38965c2 0.390625 2.0498 0.410156 3.10938 -1.43945c7.31055 -12.6396 77.3105 -134 77.3701 -134.061\r\n-v230.44c-1.71973 -0.5 -103.3 -38.7197 -105.76 -39.6797c-1.08008 -0.419922 -1.5498 -0.200195 -1.91016 0.879883c-0.629883 1.89941 -1.33984 3.75977 -2.08984 5.62012c-0.320312 0.790039 -0.0898438 1.12988 0.649414 1.38965\r\n-c0.100586 0 95.5303 35.8496 103 38.7705c-65.4199 37.5693 -130.56 75 -196 112.6l86.8203 -150.39l-0.280273 -0.330078c-9.56934 0.899414 -10.46 1.59961 -11.7998 3.93945c-1 1.69043 -73.5 127.71 -82 142.16c-9.09961 -14.6699 -83.5596 -146.21 -85.3701 -146.32\r\n-c-2.92969 -0.169922 -5.87988 -0.0800781 -9.25 -0.0800781c28.833 49.8271 57.5596 99.4941 86.1797 149.001zM267.331 297.658c1.54688 0.120117 4.02832 0.500977 5.54004 0.849609c1.68945 0.299805 2.53027 -0.200195 2.59961 -1.91992\r\n-c0 -0.109375 0.0703125 -19.0596 -0.859375 -20.4502c-0.930664 -1.38965 -1.87988 -1.21973 -2.60059 0.19043c-5 9.68945 6.2207 9.66016 -39.1201 12c-0.699219 0 -1 -0.230469 -1 -0.929688c0 -0.130859 3.7207 -122 3.73047 -122.11\r\n-c0 -0.889648 0.519531 -1.2002 1.20996 -1.50977c2.46484 -0.980469 6.3623 -2.79492 8.7002 -4.0498c7.30957 -4.33008 11.3799 -10.8408 12.4102 -19.3105c1.43945 -11.7998 -2.77051 -35.7695 -32.21 -37.1396c-2.75 -0.129883 -28.2607 -1.08008 -34.1406 23.25\r\n-c-4.66016 19.2598 8.25977 32.7002 19.8906 36.3994c1.11035 0.202148 2.0127 1.28223 2.0127 2.41113c0 0.0683594 -0.00585938 0.180664 -0.0126953 0.249023c0.0996094 5.62988 3 107.101 3.70996 121.351c0.0498047 1.0791 -0.620117 1.15918 -1.35059 1.14941\r\n-c-32.3496 -0.519531 -36.75 0.339844 -40.2197 -8.51953c-2.41992 -6.18066 -4.13965 -1.32031 -3.9502 -0.230469c1.05957 6 2.16309 12 3.31055 18c0.399414 2.11035 1.42969 2.61035 3.42969 1.86035c5.58984 -2.11035 6.71973 -1.7002 37.25 -1.91992\r\n-c1.72949 0 1.78027 0.0800781 1.82031 1.84961c0.679688 27.4902 0.579102 22.5898 1 29.5498c0.00976562 0.0878906 0.0185547 0.231445 0.0185547 0.320312c0 0.986328 -0.738281 2.09766 -1.64941 2.48047c-5.59961 2.90918 -8.75 7.5498 -8.89941 13.8691\r\n-c-0.350586 14.8105 17.7197 21.6699 27.3799 11.5107c6.83984 -7.19043 5.7998 -18.9102 -2.4502 -24.1504c-1.24316 -0.68457 -2.25195 -2.3916 -2.25195 -3.81055c0 -0.146484 0.0146484 -0.383789 0.0322266 -0.529297c0 -0.589844 -0.110352 4.30957 1 -30.0498\r\n-c0 -0.900391 0.429688 -1.12012 1.24023 -1.11035c0.0996094 0 23 0.0898438 34.4697 0.370117zM68.2705 306.298c19.8408 4.50977 32.6807 0.560547 52.4902 -1.68945c2.75977 -0.310547 3.74023 -1.2207 3.62012 -4c-0.209961 -5 -1.16016 -22.3301 -1.24023 -23.1504\r\n-c-0.0371094 -0.932617 -0.767578 -1.98145 -1.62988 -2.33984c-4.05957 -1.7002 -3.60938 4.4502 -4 7.29004c-3.12988 22.4297 -73.8701 32.7002 -74.6299 -25.4004c-0.30957 -23.9199 17 -53.6299 54.0801 -50.8799c27.2402 2 19 20.1904 24.8398 20.4697\r\n-c0.0996094 0.0136719 0.261719 0.0244141 0.362305 0.0244141c1.50195 0 2.7207 -1.21875 2.7207 -2.71973c0 -0.186523 -0.0371094 -0.483398 -0.0830078 -0.664062c-1.83008 -10.8506 -3.41992 -18.9502 -3.4502 -19.1504\r\n-c-1.54004 -9.16992 -86.6992 -22.0898 -93.3496 42.0605c-2.70996 25.8496 10.4404 53.3691 40.2695 60.1494zM148.271 218.628h-19.4893c-0.0576172 -0.00488281 -0.151367 -0.00878906 -0.208984 -0.00878906c-1.04102 0 -2.13867 0.805664 -2.45117 1.79883\r\n-c2.37988 3.75 5.88965 -0.919922 5.86035 6.13965c-0.0800781 25.75 0.209961 38 0.229492 40.1006c0 3.41992 -0.530273 4.64941 -3.32031 4.93945c-7 0.720703 -3.10938 3.37012 -1.10938 3.38086c11.8398 0.0996094 22.6201 0.179688 30.0498 -0.720703\r\n-c8.76953 -1.06934 16.71 -12.6299 7.92969 -22.6201c-2 -2.25 -4 -4.41992 -6.13965 -6.72949c0.950195 -1.15039 6.89941 -8.82031 17.2803 -19.6797c2.65918 -2.78027 6.14941 -3.51074 9.87988 -3.13086h0.0214844c1.1709 0 2.16016 0.950195 2.20801 2.12012\r\n-c0.299805 3.41992 0.259766 -4.72949 0.450195 40.5801c0 5.65039 -0.339844 6.58008 -3.22949 6.83008c-3.9502 0.350586 -4 2.25977 -0.69043 3.37012l19.0898 0.0898438c0.320312 0 4.49023 -0.530273 1 -3.37988c0 -0.0498047 -0.160156 0 -0.240234 0\r\n-c-3.60938 -0.259766 -3.93945 -1 -4 -4.62012c-0.269531 -43.9297 0.0703125 -40.2295 0.410156 -42.8203c0.110352 -0.839844 0.270508 -2.22949 5.10059 -2.13965c2.48926 0 3.85938 -3.37012 0 -3.39941c-10.3701 -0.0800781 -20.7402 0 -31.1104 -0.0703125\r\n-c-10.6699 0 -13.4697 6.2002 -24.21 20.8203c-1.59961 2.17969 -8.31055 2.35938 -8.2002 0.369141c0.879883 -16.4697 0 -17.7793 4 -17.6699c4.75 0.100586 4.73047 -3.56934 0.830078 -3.5498h0.0595703zM423.271 228.778\r\n-c-1.20996 -7.12988 0.170898 -10.3799 -5.2998 -10.3398c-61.5498 0.419922 -47.8193 0.219727 -50.7197 0.30957c-1.02246 0.100586 -2.64844 0.426758 -3.62988 0.730469c-2.53027 0.599609 1.47949 1.22949 -0.379883 5.59961\r\n-c-1.43066 3.37012 -2.78027 6.78027 -4.11035 10.1895c-0.210938 0.797852 -1.05078 1.44434 -1.875 1.44434c-0.0351562 0 -0.0908203 -0.00195312 -0.125 -0.00390625c-1.82812 0.0878906 -4.79785 0.15918 -6.62793 0.15918\r\n-c-2.19727 0 -5.75879 -0.102539 -7.95215 -0.229492c-0.587891 -0.0771484 -1.31348 -0.551758 -1.62012 -1.05957c-1.58008 -3.62012 -3.06934 -7.29004 -4.50977 -11c-1.26953 -3.23047 7.86035 -1.32031 12.1904 -2.16016c3 -0.570312 4.5293 -3.71973 0.65918 -3.72949\r\n-h-26.3691c-2.91992 0 -3.09082 3.14941 -0.740234 3.20996c0.0791016 -0.00390625 0.208008 -0.00683594 0.288086 -0.00683594c2.14648 0 4.66992 1.55762 5.63184 3.47656c1.5 3 2.7998 6 4.11035 9.08984c18.1797 42.1396 17.0596 40.1699 18.4199 41.6104\r\n-c0.300781 0.431641 0.973633 0.78125 1.5 0.78125s1.19824 -0.349609 1.5 -0.78125c2.92969 -3.33984 18.3994 -44.71 23.6201 -51.9199c2 -2.7002 5.73926 -2 6.35938 -2c3.61035 -0.130859 4 1.10938 4.12988 4.29004\r\n-c0.0898438 1.86914 0.0800781 -1.1709 0.0703125 41.2393c0 4.45996 -2.36035 3.74023 -5.5498 4.27051c-0.259766 0 -2.56055 0.629883 -0.0800781 3.05957c0.209961 0.200195 -0.890625 0.240234 21.7002 0.150391c2.31934 0 5.31934 -2.75 -1.20996 -3.4502\r\n-c-0.0322266 0.000976562 -0.0830078 0.00292969 -0.115234 0.00292969c-1.41309 0 -2.55957 -1.14746 -2.55957 -2.56055c0 -0.0751953 0.00683594 -0.197266 0.0146484 -0.272461c-0.0703125 -1.62988 -0.19043 -38.8896 0.290039 -41.21\r\n-c0.27832 -1.34668 1.62109 -2.43848 2.99609 -2.43848c0.0644531 0 0.168945 0.00390625 0.233398 0.00878906c13.25 -0.430664 14.9199 -0.44043 16 3.41016c1.66992 5.7793 4.12988 2.51953 3.73047 0.189453zM318.551 164.408\r\n-c-4.24023 0 -4.41992 3.38965 -0.609375 3.41016c35.9092 0.160156 28.1094 -0.379883 37.1895 0.649414c1.67969 0.19043 2.37988 -0.239258 2.25 -1.88965c-0.259766 -3.38965 -0.639648 -6.78027 -1 -10.1602c-0.25 -2.16016 -3.2002 -2.61035 -3.39941 0.150391\r\n-c-0.380859 5.30957 -2.15039 4.44922 -15.6309 5.08008c-1.58008 0.0693359 -1.63965 0 -1.63965 -1.52051v-16.1299c0 -1.65039 0 -1.59961 1.62012 -1.46973c3.12012 0.25 10.3096 -0.339844 15.6895 1.51953c0.470703 0.160156 3.30078 1.79004 3.07031 -1.75977\r\n-c0 -0.209961 -0.759766 -10.3496 -1.17969 -11.3896c-0.530273 -1.29004 -1.87988 -1.51074 -2.58008 -0.320312c-1.16992 2 0 5.08008 -3.70996 5.2998c-15.4199 0.900391 -12.9102 2.5498 -12.9102 -6c0 -12.25 -0.759766 -16.1104 3.88965 -16.2402\r\n-c16.6406 -0.479492 14.4004 0 16.4307 5.70996c0.839844 2.37012 3.5 1.77051 3.17969 -0.580078c-0.44043 -3.20996 -0.849609 -6.42969 -1.22949 -9.63965c0 -0.360352 -0.160156 -2.39941 -4.66016 -2.38965c-37.1602 0.0800781 -34.54 0.189453 -35.21 0.30957\r\n-c-2.7207 0.509766 -2.2002 3 0.219727 3.4502c1.09961 0.19043 4 -0.540039 4.16016 2.55957c2.43945 56.2207 -0.0703125 51.3408 -3.91016 51.3301zM318.141 273.928c2.45996 -0.609375 3.12988 -1.75977 2.9502 -4.64941\r\n-c-0.330078 -5.2998 -0.339844 -9 -0.549805 -9.69043c-0.660156 -2.22949 -3.15039 -2.12012 -3.33984 0.270508c-0.379883 4.80957 -3.0498 7.81934 -7.57031 9.14941c-26.2803 7.73047 -32.8096 -15.46 -27.1699 -30.2197c5.87988 -15.4102 22 -15.9199 28.8604 -13.7803\r\n-c5.91992 1.85059 5.87988 6.5 6.91016 7.58008c1.22949 1.2998 2.25 1.83984 3.11914 -1.09961c0 -0.100586 0.570312 -11.8906 -6 -12.75c-1.59961 -0.209961 -19.3799 -3.69043 -32.6797 3.38965c-21 11.1904 -16.7402 35.4697 -6.87988 45.3301\r\n-c14 14.0596 39.9102 7.05957 42.3203 6.46973h0.0292969zM289.801 167.858c3.28027 0 3.66016 -3 0.160156 -3.43066c-2.61035 -0.319336 -5 0.419922 -5 -5.45996c0 -2 -0.19043 -29.0498 0.400391 -41.4502c0.109375 -2.28906 1.14941 -3.51953 3.43945 -3.64941\r\n-c22 -1.20996 14.9502 1.64941 18.79 6.33984c1.83008 2.24023 2.75977 -0.839844 2.75977 -1.08008c0.350586 -13.6201 -4 -12.3896 -5.18945 -12.3994l-38.1602 0.189453c-1.92969 0.230469 -2.05957 3 -0.419922 3.37988c2 0.480469 4.93945 -0.399414 5.12988 2.7998\r\n-c1 15.8701 0.570312 44.6504 0.339844 47.8105c-0.269531 3.76953 -2.7998 3.26953 -5.67969 3.70996c-2.46973 0.379883 -2 3.21973 0.339844 3.21973c1.4502 0.0205078 17.9697 0.0302734 23.0898 0.0205078zM258.171 225.648\r\n-c0.0703125 -4.08008 2.86035 -3.45996 6 -3.58008c2.61035 -0.100586 2.53027 -3.41016 -0.0703125 -3.43066c-6.47949 0 -13.6992 0 -21.6094 0.0605469c-3.83984 0 -3.37988 3.34961 0 3.37012c4.49023 0 3.24023 -1.61035 3.41016 45.54\r\n-c0 5.08008 -3.27051 3.54004 -4.7207 4.22949c-2.58008 1.23047 -1.35938 3.08984 0.410156 3.15039c1.29004 0 20.1904 0.410156 21.1699 -0.209961c0.980469 -0.620117 1.87012 -1.65039 -0.419922 -2.86035c-1 -0.519531 -3.85938 0.280273 -4.14941 -2.46973\r\n-c0 -0.209961 -0.820312 -1.62988 -0.0703125 -43.7998h0.0498047zM221.261 -48.6221c0.408203 -0.273438 1.13867 -0.495117 1.62988 -0.495117c0.492188 0 1.22168 0.22168 1.62988 0.495117c17 9.79004 182 103.57 197.421 112.51\r\n-c-0.140625 0.430664 11.2598 0.180664 -181.521 0.270508c-1.21973 0 -1.57031 -0.370117 -1.53027 -1.56055c0 -0.0996094 1.25 -44.5098 1.2207 -50.3799c-0.0791016 -2.17969 -0.688477 -5.63379 -1.36035 -7.70996c-0.549805 -1.83008 0.379883 0.5 -13.5 -32.2295\r\n-c-0.730469 -1.7207 -1 -2.20996 -2 0.0800781c-4.19043 10.3398 -8.28027 20.7197 -12.5703 31c-1.12109 2.52441 -2.03125 6.81543 -2.03125 9.57812c0 0.333984 0.0146484 0.876953 0.03125 1.21191c0.160156 2.45996 0.800781 16.1191 1.51074 48c0 1.94922 0 2 -2 2\r\n-h-183c2.5791 -1.63086 178.319 -102.57 196 -112.761zM130.361 140.128c0 -2.39941 0.359375 -2.79004 2.75977 -3c11.54 -1.16992 21 -3.74023 25.6396 7.32031c6 14.46 2.66016 34.4102 -12.4795 38.8398c-2 0.589844 -16 2.75977 -15.9404 -1.50977\r\n-c0.0498047 -8.04004 0.00976562 -11.6104 0.0205078 -41.6504zM236.111 155.178c0 -2.12988 1.06934 -38.6797 1.08984 -39.1299c0.339844 -9.93945 -25.5801 -5.76953 -25.2305 2.58984c0.0800781 2 1.37012 37.4199 1.10059 39.4307\r\n-c-14.1006 -7.44043 -14.4199 -40.21 6.43945 -48.8008c1.88184 -0.816406 5.0752 -1.47949 7.12695 -1.47949c5.53418 0 12.3721 3.83008 15.2637 8.5498c4.90918 7.75977 6.83984 29.4697 -5.43066 39c-0.0966797 -0.0400391 -0.257812 -0.09375 -0.359375 -0.120117\r\n-v-0.0400391zM223.831 353.178c-9.83008 0 -9.73047 -14.75 -0.0703125 -14.8701c9.66016 -0.119141 10.1006 14.8809 0.0703125 14.9102v-0.0400391zM143.681 249.348c0 -1.7998 0.410156 -2.39941 2.16992 -2.58008c13.6201 -1.38965 12.5107 11 12.1602 13.3604\r\n-c-1.68945 11.2197 -14.3799 10.2002 -14.3496 7.81055c0.0498047 -4.5 -0.0302734 -13.6807 0.0195312 -18.5908zM356.001 242.948l-6.09961 15.8398c-2.16016 -5.48047 -4.16016 -10.5703 -6.23047 -15.8398h12.3301z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"d-and-d-beyond\" unicode=\"&#xf6ca;\" horiz-adv-x=\"640\" \r\n-d=\"M313.8 206.5c-9.89941 0 -16 7 -15.7002 7.09961c-4.2998 5.7002 -3 -0.299805 -2.39941 -1.89941c-10.9004 10.2998 -5.2998 25.3994 -5.10059 26c0.700195 1.89941 0 2.2002 -0.599609 1.89941c-1 -0.299805 -2.09961 -1.89941 -2.09961 -1.89941\r\n-c0.799805 9.09961 9.2998 14.7002 9.2998 14.7002l0.200195 -0.200195c1 -1.5 -0.400391 -3.2002 -0.600586 -9c1.60059 2.2998 7.90039 6.59961 11.4004 7.89941c-1.10059 -1.5 -2.10059 -3.59961 -2.10059 -6.59961c3.7002 4.2002 7.5 2.59961 8 2.40039\r\n-c-12.1992 -11.9004 -7 -26.6006 3.2002 -26.6006c5.7002 0 11.5 6.40039 13.9004 10.7002c2.39941 -2.40039 6.39941 -5.5 7.39941 -6.59961c-3.7998 -7.80078 -11 -17.9004 -24.7998 -17.9004zM366.2 227.6c0 -2.89941 -2.90039 -4.09961 -5.40039 -4.5\r\n-c0.700195 1.5 1.7998 5.10059 -0.200195 9c0.700195 -0.0996094 5.60059 -0.5 5.60059 -4.5zM376.5 222.4c-0.400391 -6.5 -6.90039 -11.6006 -14.5996 -10.6006c2 -1.7002 6.59961 -3 9 -1.89941c-3.90039 -6.90039 -23.1006 -7.5 -23.1006 6.39941\r\n-c-2.89941 -2.89941 -2.09961 -7.39941 0 -9.2998c-2.2002 0.700195 -5.7998 3.09961 -6.39941 7.40039c-1.30078 10.0996 4.39941 6.5 -10.4004 18.0996c-4.7998 3.7002 -3 6.59961 -4 8.5c-1.09961 2.2002 -7 4.09961 -4.5 8.5\r\n-c-0.0996094 -1.59961 1 -2.90039 2.59961 -3.5c1.80078 -0.700195 3.2002 -0.200195 4.80078 -1c1.69922 -1.2002 0.899414 -3.90039 2.19922 -5c1.10059 -0.799805 4.2002 0.299805 6.60059 -1.7998c2.59961 -2 8.2002 -6.7002 10.5996 -8.60059\r\n-c4.40039 -3.59961 8.7998 0.400391 7.40039 4.60059c4.5 -2.60059 5 -9.90039 1.2998 -12.5c10.5996 -2.40039 13 10.0996 5 11.3994c7.2998 0.700195 13.5 -4.2998 13.5 -10.6992zM337.1 240.8c4.30078 6.10059 13.3008 15.2998 23.8008 15.7998\r\n-c-5.90039 0.800781 -15.1006 -3.19922 -19.7002 -9c0.899414 3.90039 5.09961 10.1006 10.2002 13c0 0 -2.5 -3.19922 -1.40039 -3.69922c1.59961 -0.800781 5.7998 5.69922 11.2002 5.89941c0 0 -4 -2 -3.2002 -3.39941c0.599609 -0.900391 3.2998 1.2998 8 1.2998\r\n-c5.7998 0 10.9004 -3.5 13.2998 -6.2002c-4 1.09961 -11.5996 -0.799805 -13.7998 -2.7002c-0.299805 0.200195 -11.7998 9 -22 -15.5c-4.7998 3.7998 -4.40039 3.7002 -6.40039 4.5zM579.6 188.9c37.2002 0 60.4004 -19.6006 60.4004 -48.9004\r\n-c0 -28.2002 -17 -48.9004 -59.0996 -48.9004c-20.7002 0 -41.2002 1.30078 -51.6006 2.10059l7.40039 8.2002v77.1992l-7.40039 8.2002c10.2998 0.799805 29.6006 2.10059 50.2998 2.10059zM564.5 113.3c25.4004 -3.2002 46.7998 1.40039 46.7998 27\r\n-c0 22.5 -16.7002 29.6006 -46.7998 26.2998v-53.2998zM301.6 267c0.100586 -0.299805 -2.7998 2.2998 -3.2998 7.5c-0.200195 2.2998 0 19.7998 20 18.9004c11.2002 -0.600586 16.7002 -8.30078 16.7002 -16.5c0 -4.30078 -2.2998 -10.1006 -5.5 -13.8008\r\n-c-2.2002 2.2002 -5.59961 4.60059 -7.7002 7.80078c3.7998 5.59961 2.2002 14.3994 -4.7002 14.3994c-4.2998 0 -7.7998 -4.5 -6.39941 -9.89941c-0.700195 -2.40039 -1 -5.60059 -0.5 -8c-4.90039 2.59961 -6.5 6 -7.5 9c-1.2998 -2.5 -2.10059 -6 -1.10059 -9.40039z\r\n-M301.2 261c0.299805 1.7002 -3.10059 4.59961 -4.7998 5.2002c4.7998 0.200195 7 -0.600586 7 -0.600586c-1.30078 1.7002 -1.60059 4.5 -1 6.7002c2.5 -6.09961 11.6992 -7.09961 13.8994 -12.2002c-0.299805 2.30078 -2.39941 4.7002 -4.7998 6.10059\r\n-c-1.2998 3.2002 -0.299805 9.39941 1.2998 11c-0.5 -8.7998 12 -13.7998 14.6006 -20.2002c-1.40039 5.5 -7.40039 9 -10.1006 12.2002c-1 2.09961 -0.200195 5.7998 0.799805 7.09961c-0.5 -9.7002 15.8008 -14.2998 14.1006 -23.8994\r\n-c0.899414 -0.400391 2.09961 -1.2002 1.89941 -2.60059c1.30078 0.299805 2.60059 1.7002 2.90039 2.7002c0.700195 -4.5 -1.90039 -9 -4.7998 -10.4004c1.59961 4 -2.7002 5.60059 -6.7002 5.10059c0 0 1.59961 2.2998 1 3.39941\r\n-c-0.799805 1.5 -8 0.800781 -11.2002 -0.299805c1.10059 0.100586 3.60059 -0.200195 4.60059 -0.5c-2.10059 -2.89941 -1 -7.09961 1.2998 -4.2002c0 0 -1.10059 -3.5 -0.299805 -4.2998c0.799805 -0.799805 2.59961 -0.200195 2.59961 -0.200195\r\n-c-1.2002 -2.69922 -5.2998 -4.59961 -8.2002 -4.59961c1.10059 0.400391 2.7002 2.2998 3 3.40039c-0.799805 -0.5 -2.7002 -0.700195 -3.5 -0.5c6.10059 3 0 13.1992 -7 8.19922c1 2.7002 3.7002 5.30078 5.7998 6.10059c-1.2998 0.5 -2.69922 0.799805 -4.2998 1.09961\r\n-c1.7998 1.5 6.2998 2.7998 8.5 2.60059c-3.5 0.799805 -9.89941 -0.300781 -12.7998 -3.7002c0.900391 0 3.2998 -0.5 4.2998 -0.799805c-4 -0.700195 -9.39941 -4.40039 -11 -6.2002c0.299805 2.2002 1 4.2002 0.5 5.59961c-0.799805 2 -3 2.7998 -7.7998 1.7998\r\n-c3.2002 3.2002 9.7002 5.10059 10.2002 6.90039zM327.1 253.6c0 0 -0.899414 3 -4.19922 4.30078c0.699219 -2.2002 1.5 -4.30078 4.19922 -4.30078zM366 249.9l0.700195 0.699219c0.5 0.400391 1.59961 0.900391 2.7002 1.40039v-18.4004\r\n-c-1.7002 0.800781 -3.5 1.10059 -5.60059 1.10059c-2.39941 0 -5 -0.5 -5 -0.5c-0.5 0.5 -3.59961 2.89941 -5.09961 3.2002c4.09961 -4.30078 0.5 -9.80078 -3 -7.2002v15.7002c0.700195 0.799805 1.2998 1.7998 2.09961 2.59961\r\n-c1.7002 2.09961 4.60059 3.40039 7.5 3.40039c1.7998 0 3.60059 -0.400391 4.7002 -1.40039zM79.9004 142.1c22 -6.39941 19.3994 -20.0996 19.3994 -25.1992c0 -7.80078 -3.2002 -13.6006 -9.89941 -17.6006c-12.6006 -7.39941 -24.7002 -5.89941 -86.4004 -5.89941\r\n-l8.40039 8.59961v32.2998l-11.4004 14.6006h11.2998v29.5l-8.2998 8.59961h56.0996c12.9004 0 37 -4.40039 37 -25c0 -1.90039 1 -15.2998 -16.1992 -19.9004zM38.5996 169.6v-20.8994c10.6006 0 29.6006 -3.2998 29.6006 8.7998v3\r\n-c0 9.90039 -9.60059 9.09961 -29.6006 9.09961zM38.5996 110.4c20.4004 0 32.9004 -1.90039 32.9004 9.2998h-0.200195v4.5c0 11.0996 -20.5 8.7998 -32.7002 8.7998v-22.5996zM139.8 129.7v-15.4004l60.1006 0.200195l-14.1006 -21.2002h-81.2002l7.40039 8.2002v77.0996\r\n-l-7.40039 8.2002l73.5 0.200195v-0.200195l14.1006 -21h-52.4004v-14.8994h37.2002l-14.0996 -21.2002v-0.200195zM354.5 189.8c73.7998 0 77.5996 -99.2998 -0.299805 -99.2998c-77.2002 0 -73.6006 99.2998 0.299805 99.2998zM354.2 112.3\r\n-c39 0 37 55.2002 0.200195 55.2998c-37.1006 0 -37.6006 -55.2998 -0.200195 -55.2998zM262.9 120.6l0.199219 -19l7.2002 -8.19922h-42.5996l7.7002 8.19922l-0.200195 19.4004l-44.1006 65.7998h44.9004l-6.40039 -7.2002l21 -37.1992h0.300781l20.5 37.1992\r\n-l-6.10059 7.2002h41.7002zM234.5 271.9c-9.09961 6.69922 -9.5 14.0996 -9.59961 14.8994c7.2998 -4.2998 9 -4 39.8994 -4c-5.7998 0 24 3.10059 32.2002 -22.8994c-0.400391 0 -8.40039 -4.80078 -10.4004 -7.90039c5.30078 1.90039 8.90039 1.09961 9 1.09961\r\n-c-8 -5.09961 -9.59961 -14.7998 -9.59961 -20.5c0.900391 2.10059 2.7002 3.7002 2.7002 3.5c-0.600586 -2.5 -1.40039 -7 -0.799805 -12c-8.60059 -7.09961 -16 -8.59961 -26 -8.59961h-35.1006c0.400391 0.0996094 7.7998 4.5 7.90039 4.59961\r\n-c1.89941 1.10059 2.7002 2.2002 2.7002 6.40039v38.7998c0 4.2002 -1.30078 5.2998 -2.90039 6.60059zM256 266.4v-34.6006c4.7002 0 23.0996 -3.39941 23.0996 17.2998c0 20.6006 -18.5 17.3008 -23.0996 17.3008zM484.9 186.8l39.1992 -0.0996094l-7.39941 -8.2998\r\n-v-85.2002h-21.2998c-4 12.7002 -44.8008 45 -48.5 55.5996h-0.300781v-47.3994l7.40039 -8.2002h-39l7.2002 8.2998v76.9004l-7.40039 8.5h31.6006c2.89941 -9.40039 39.7998 -36.5 45.1992 -50.9004h0.300781v42.5zM378.2 282.9\r\n-c32.7002 -1.60059 33.7998 -29.8008 33.7998 -33.6006c0 -6.7002 -3.2998 -34 -36.7002 -34h-0.299805c3.59961 4.2998 3.5 11.9004 -2.2002 16.2998c1.2002 0 19.7002 -3.19922 19.7002 17.3008c0 20.6992 -18.4004 17.2998 -23.0996 17.2998v-4.2998\r\n-c-5.40039 0.799805 -7.40039 -0.300781 -7.5 -0.300781c2.09961 1.80078 4.5 2.60059 6.09961 2.90039c-7.09961 1.59961 -13.5996 -2.40039 -14.5996 -3.5c0.799805 1.7998 2.39941 3.40039 3.5 4.5c-2.30078 -0.799805 -4.30078 -1.90039 -6.10059 -3\r\n-c0 5.2002 0.200195 7.5 -2.89941 9.5c-9.10059 6.59961 -9.5 14.2002 -9.60059 14.9004c7.10059 -4.2002 7.7002 -4 39.9004 -4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dev\" unicode=\"&#xf6cc;\" \r\n-d=\"M120.12 239.71c3.87012 -2.90039 5.82031 -7.25977 5.83008 -13.0596v-69.6504c0 -5.80957 -1.94043 -10.1602 -5.82031 -13.0596c-3.87988 -2.90039 -7.76953 -4.35059 -11.6494 -4.35059h-17.4502v104.47h17.4395c3.87988 0 7.77051 -1.44922 11.6504 -4.34961z\r\n-M404.1 416c24.2002 0 43.8408 -19.5898 43.9004 -43.7998v-360.4c-0.0595703 -24.21 -19.6904 -43.7998 -43.9004 -43.7998h-360.199c-24.2002 0 -43.8408 19.5898 -43.9004 43.7998v360.4c0.0595703 24.21 19.7002 43.7998 43.9004 43.7998h360.199zM154.2 156.81\r\n-l-0.00976562 70.9307c-0.0107422 18.8193 -11.9307 47.2793 -47.3701 47.2793h-47.3799v-165.46h46.3994c36.75 -0.0595703 48.3604 28.4404 48.3604 47.25zM254.88 245.47l0.00976562 29.5205h-63.1895c-11.1504 -0.280273 -19.9805 -9.54004 -19.71 -20.6904v-125.109\r\n-c0.279297 -11.1602 9.55957 -19.9805 20.7197 -19.6904h62.1797v29.5703h-53.29v38.4102h32.5703v29.5693h-32.5703v38.4199h53.2803zM358.52 130.18l38.4609 144.801h-32.5801l-29.5703 -113.721l-29.71 113.721h-32.5703l38.5303 -144.801\r\n-c10.5898 -24.6299 34.2402 -30.75 47.4395 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fantasy-flight-games\" unicode=\"&#xf6dc;\" horiz-adv-x=\"512\" \r\n-d=\"M256 415.14l223.14 -223.14l-223.14 -223.14l-223.14 223.14zM88.3398 192.17c11.3447 -11.2461 29.7705 -29.4893 41.1299 -40.7197c20.1602 19.8799 40.46 39.8994 61.8506 60.9902c12.0596 -12.5801 24.5195 -25.5703 36.54 -38.1104\r\n-c12.0293 11.6895 23.7393 23.0596 35.6895 34.6602c-6.99023 7.4502 -32.1494 32.8301 -35.0898 35.7793c-1.91016 1.9209 -2.29004 3.2207 -0.120117 5.35059c15.5801 15.2295 39.21 17.79 56.9805 5.09961c7.98926 -5.70996 14.2998 -11.6396 48.5098 -43.9502\r\n-c10.8203 11.1504 22.2295 22.8506 33.5 34.6904c0.490234 0.520508 0.0996094 2.63965 -0.580078 3.37988c-0.0898438 0.100586 -37.5195 40.6006 -62.1504 59c-33.5801 25.0801 -78.3193 23.0605 -119.77 -18.6895c-84.5703 -85.1807 -94.5303 -95.4805 -96.4902 -97.4805z\r\n-M323.16 90.5703c18.8203 18.79 80.3301 80.6396 100.5 101.5c-13.7305 13.4492 -27.1797 26.6299 -40.8604 40.0293c-20.0098 -19.7393 -40.2402 -39.6895 -61.25 -60.4199c-12.3301 12.8301 -24.8799 25.8799 -37.25 38.75\r\n-c-1.25977 -0.689453 -1.64941 -0.80957 -1.91016 -1.06934c-10.7295 -10.7705 -21.4199 -21.5801 -32.21 -32.29c-2.22949 -2.20996 -0.519531 -3.35059 0.800781 -4.69043c10.5791 -10.7402 21.1797 -21.4502 31.7695 -32.1797\r\n-c3.5498 -3.60059 3.54004 -3.85059 -0.139648 -7.24023c-16.8008 -15.4697 -40.8408 -16.54 -59.3203 -1.7998c-7.62012 6.08008 -11.6602 10.1797 -44.6797 42.0898c-11.5801 -11.8896 -23.3203 -23.9404 -35.3701 -36.3096\r\n-c33.5498 -34.7607 50.8496 -53.3408 72.9297 -66.8408c28.9004 -17.6699 71.5 -14.96 106.99 20.4707zM256 448l256 -256l-256 -256l-256 256zM16 192l240 -240l240 240l-240 240z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"penny-arcade\" unicode=\"&#xf704;\" horiz-adv-x=\"640\" \r\n-d=\"M421.91 283.73c7.33984 -16.2705 2.29004 -5.07031 24.6299 -54.6807l-39.7305 -10.6094c13.7002 59.2295 10.6104 45.8398 15.1006 65.29zM215.82 232.62c32.5 8.99023 41.9492 -37.6396 -0.350586 -47.4297c-14.2002 -3.77051 -6.64941 -1.75 -34.8193 -9.34082\r\n-l-4.45996 46.1904c28.3193 7.5498 19.4395 5.17969 39.6299 10.5801zM541.98 258.81c75.7998 -37.9092 98 -76.3193 97.9893 -104.47c2.10059 -78.8496 -183.3 -130.33 -399.89 -84.8301c0.540039 -13 -8.00977 -24.6494 -20.5801 -28.0195\r\n-c-125.54 -33.54 -117.35 -31.75 -122.53 -31.7598c-14.3701 -0.0107422 -26.4102 10.8896 -27.7998 25.1992l-4.2998 44.4805c-0.0683594 0.724609 -0.125 1.90332 -0.125 2.63184c0 10.5811 8.01758 22.2461 17.8945 26.0381l-1.73926 17.8799\r\n-c-50.2305 28.2598 -80.9004 61.8701 -80.9004 95.3701c0 72.9199 144.26 113.4 309.41 98.3701c2.68945 7.54395 11.1514 15.3438 18.8896 17.4102c96.8701 25.9092 65.3203 17.4795 135.59 36.2295c13.1602 3.50977 26.9307 -2.95996 32.6201 -15.3301zM255.14 149.7\r\n-c17.5 4.0498 40.2363 19.1562 50.75 33.7197c21.6006 32.5898 14.1104 105.561 -42.5498 104.43c-16.04 -0.229492 -8.07031 0.890625 -186.22 -46.6494l4.34961 -44.5l20.1201 5.38965l11.1104 -114.64l-20.0205 -5.35059l4.30078 -44.5195l115.31 30.7803\r\n-l-4.50977 44.5098l-20.5303 -5.50977l-2.45996 23.5498l48.4404 12.9102zM454.32 133.08l108.55 28.96l-4.2998 44.4795l-20.79 -5.55957l-66.6699 145.47c-70.5801 -18.8301 -42.2305 -11.25 -135.591 -36.2393l4.2002 -44.4805l17.1504 4.55957l-33.0801 -126.47\r\n-l-20.9902 -5.58984l4.45996 -44.4297l112.851 30.0693l-4.05078 39.54l-19.1992 -5.12012l4.09961 17.54l57.7598 15.4209l6.61035 -14.6807l-14.9004 -3.97949z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wizards-of-the-coast\" unicode=\"&#xf730;\" horiz-adv-x=\"640\" \r\n-d=\"M219.19 102.31c7.44922 5.80078 16.2598 0.680664 21.7295 -7.0791c7.08984 -10.1201 6.24023 -18.1602 -0.259766 -23.04c-7.62012 -6.24023 -17.0898 0.129883 -21.7305 6.5498c-10.8096 15.1299 -1.63965 22.1895 0.260742 23.5693zM555.94 26.3701\r\n-c1.30957 4.4502 3.92969 10.21 3.93945 20.1699c0 34.04 -41.6299 64.4102 -100.03 68.0801c-53.1592 3.39941 -120.46 -15.4502 -184.35 -73.8506l-0.790039 0.260742c1.58008 10.4697 -0.780273 16.2295 -3.40039 21.21l0.260742 1.56934\r\n-c64.4199 51.3203 134.069 66.5107 188.8 60.4902c61.0098 -6.54004 104.479 -39.54 101.34 -78.0303c-0.790039 -9.68945 -2.88965 -15.71 -4.97949 -19.8994c-1.34082 -1.66992 -1.13086 -1.7002 -0.790039 0zM392.28 207.58\r\n-c-0.530273 7.07031 3.13965 11.7803 6.7998 15.46c3.66992 3.91992 14.9297 10.4697 14.9297 10.4697s-1.2998 -26.4502 -2.08984 -29.8496c-1.04004 -3.92969 -4.96973 -6.81055 -10.4697 -6.5498c-4.98047 0.259766 -8.37988 3.39941 -9.16992 10.4697zM342.26 358.68\r\n-c147.17 0 275.48 -86.6797 291.21 -196.939c0 0 -3.66992 -1.31055 -9.68945 -4.4502c0 -0.259766 1.0498 -10.7402 0.259766 -16.5c-0.259766 -1.83008 -1.0498 -1.0498 -1.0498 0c-0.270508 5.24023 -1.57031 11.5303 -2.36035 14.9297\r\n-c-4.70996 -2.60938 -10.21 -6.54004 -15.9697 -11.7793c0 0 4.70996 -10.21 4.70996 -25.9209c0 -21.21 -8.37988 -32.9893 -16.5 -37.9697l-0.259766 0.520508c9.16992 9.16992 12.5693 21.4795 12.5693 31.9492c0 13.8701 -6.80957 33.25 -14.3994 41.3701\r\n-c0 0 4.4502 -8.12012 6.80957 -17.8096c0 0 -21.21 -21.4697 -26.9697 -62.3203c0 0 -3.66992 9.16992 -10.7402 16.2402c0 0 12.0498 -15.4502 12.0498 -38.2305c0 -19.3799 -12.8398 -37.4395 -27.5 -48.1797c-0.989258 0 -0.790039 -0.169922 -0.790039 0.790039\r\n-c15.71 12.8301 22.2607 28.0205 22.2607 46.3506c0 38.2295 -49.2305 80.3896 -130.15 80.3896c-96.1104 0 -181.74 -58.1299 -236.99 -128.05l-1.0498 0.259766c-40.3203 120.979 -135.64 185.66 -196.13 202.16c-2.09961 0.519531 -1.83984 0.790039 -0.790039 1.30957\r\n-c12.3096 14.4004 136.96 151.88 341.47 151.88zM243.02 69.0596c16.8408 14.5908 4.99023 30.7705 4.71094 31.1602c-4.08008 5.99023 -16.3105 16.8506 -31.1602 5.5c-10.9502 -8.37988 -11.6406 -22.8896 -4.19043 -32.4697\r\n-c6.44043 -8.26953 19.5801 -13.1797 30.6396 -4.19043zM245.11 205.49l1.83008 -8.11035l-3.6709 4.4502l-14.1396 -26.71l24.6201 -28.7998l12.5703 6.01953l-11.7803 70.96zM263.7 87.9102c3.41016 2.35938 7.33984 4.97949 9.67969 6.57031l-0.259766 0.259766\r\n-c-1.56055 -0.780273 -3.11035 -1.0498 -12.5703 15.9697v0.259766c6.87012 5.16016 8.45996 4.89062 11.5205 5.5l0.259766 0.260742c-1.31055 3.66992 -1.31055 3.66992 -1.83008 5.5h-0.259766c-3.95996 -3.31055 -1.4707 -1.58008 -11.5205 -7.86035h-0.259766\r\n-c-1.83008 3.13965 -4.19043 7.33008 -5.75977 9.68945v1.31055c4.4502 3.91992 10.2197 6.7998 12.3096 7.58984c2.87988 1.0498 4.19043 0.520508 5.24023 0.259766l0.259766 0.520508c-1.30957 1.83008 -2.08984 2.87988 -3.39941 4.70996l-0.520508 0.259766\r\n-c-9.9502 -5.5 -17.54 -9.9502 -25.3994 -15.71l0.259766 -0.519531c1.30957 0.259766 3.13965 -0.260742 4.4502 -2.62012c15.04 -25.0801 19.5898 -27.5908 17.54 -31.6904zM318.96 120.38v0.25c-1.99023 0 -2.34961 -1.37012 -14.6602 30.6396v0.260742\r\n-c4.95996 1.85938 8.78027 4.37988 12.3105 2.62012l0.259766 0.519531l-3.13965 4.98047l-0.520508 0.259766c-2.22949 -0.929688 -20.4697 -8.00977 -27.7598 -12.5703l-0.259766 -0.519531l1.0498 -5.76074h0.519531c1.0498 3.68066 9.7998 7.33008 9.9502 7.33008\r\n-l0.259766 -0.259766c12.9404 -29.7598 13.0703 -29.8799 11.7803 -32.4697l0.259766 -0.259766c3.93066 2.09961 6.81055 3.40918 9.9502 4.97949zM363.73 136.88c-0.780273 0.520508 -2.09082 1.31055 -2.63086 3.92969c-1.56934 6.02051 -4.70996 20.1709 -6.2793 26.4502\r\n-c-0.530273 1.57031 -0.530273 3.14062 0.519531 4.4502l-0.259766 0.259766c-3.41016 -0.529297 -6.29004 -1.30957 -10.7402 -2.35938v-0.260742c1.57031 -0.529297 2.10059 -2.09961 2.62012 -3.92969l2.62012 -9.42969l-0.259766 -0.259766\r\n-c-3.40039 -1.05078 -8.90039 -2.62012 -12.8301 -3.93066h-0.259766c-0.780273 2.10059 -1.83008 5.75977 -3.14062 9.69043l0.259766 4.70996l-0.259766 0.259766c-4.71973 -1.30957 -7.59961 -2.34961 -10.7402 -3.40039v-0.519531\r\n-c1.05078 0 2.10059 -1.30957 2.62012 -3.13965c1.0498 -3.40039 8.12012 -24.0908 9.16992 -27.2305c0.790039 -2.09961 0.790039 -3.66992 -0.259766 -4.97949l0.259766 -0.260742c3.14062 1.31055 6.54004 2.87988 10.21 3.93066v0.519531\r\n-c-1.0498 0.259766 -2.08984 0.780273 -2.87988 3.13965c-1.0498 3.93066 -3.39941 11.2607 -4.18945 13.8809l0.259766 0.259766c3.92969 1.30957 9.42969 3.13965 12.8301 3.92969l0.259766 -0.259766c0.530273 -2.09961 2.62012 -10.2197 3.66992 -13.6201\r\n-l-0.519531 -4.4502l0.259766 -0.259766c4.4502 1.57031 5.5 1.83008 9.69043 2.87988zM395.94 143.69c0.529297 1.8291 1.0498 3.65918 1.5791 6.04004h-0.259766c-2.0293 -4.06055 -15.0898 -5.09082 -16.2402 -4.71094l-0.259766 0.260742\r\n-c-0.519531 3.13965 -1.83008 10.4795 -2.08984 12.5693l0.259766 0.260742c8.06055 0.899414 5.40039 1.0293 10.21 0h0.260742c0 3.40918 0.259766 3.66992 0.259766 5.23926h-0.259766c-5.98047 -2.2998 -1.2207 -0.679688 -10.7402 -2.35938l-0.259766 0.259766\r\n-c-0.520508 3.40039 -1.31055 8.37988 -1.57031 9.9502l0.259766 0.259766c12.9004 2.41016 15.1006 0.349609 16.2402 -0.790039l0.259766 0.259766c-0.780273 2.36035 -1.0498 3.14062 -1.57031 5.5l-0.259766 0.260742\r\n-c-4.71973 -0.260742 -15.71 -1.05078 -24.8799 -2.62012l-0.790039 -0.520508c1.83008 -0.790039 2.36035 -1.83984 2.62012 -3.66992c1.58008 -7.59961 3.41016 -18.3301 4.98047 -26.1895l-0.790039 -4.19043l0.259766 -0.259766\r\n-c8.37988 1.83008 17.8096 3.66992 22.5195 4.18945zM406.68 188.2c3.14062 1.56934 7.33008 5.5 7.33008 5.50977c1.95996 -4.58008 0.970703 -2.70996 4.19043 -7.86035c10.1494 -0.459961 8.60938 0.0205078 20.4297 -1.0498l0.790039 4.70996\r\n-s-4.18945 0 -5.75977 1.83008c-1.0498 1.31055 -1.31055 3.14062 -1.57031 5.5c0 2.36035 0.270508 16.5 0.790039 20.6904c0.259766 4.18945 2.08984 20.4199 2.08984 23.04c0.260742 2.62012 1.0498 8.91016 0.260742 12.0498\r\n-c-4.82031 19.2803 -24.4307 17.8096 -50.0205 16.2402l-5.24023 -16.2402l2.62012 -2.87988c16.5498 16.5498 37.6201 4.56934 29.5898 -5.75977c-5.18945 -6.9209 -19.7393 -8.90039 -28.54 -17.0205c-6.47949 -6.49023 -12.2393 -20.9004 -5.5 -31.6904\r\n-c6.12988 -11.0391 17.29 -9.96973 17.54 -9.94922c2.87988 0 6.55078 0.519531 11 2.87988zM443.86 166.99c0 1.83984 0.269531 4.18945 0.269531 5.25l-0.259766 0.519531c-14.3604 8.98047 -26.8604 0.919922 -28.7998 -9.9502\r\n-c-2.83984 -16.0898 15.3594 -25.46 25.6602 -18.5898l0.519531 0.520508c0 0.259766 1.30957 4.4502 1.83008 6.2793l-0.259766 0.260742c-6.39062 -9.58008 -23.3203 -6.87012 -20.6904 10.21c1.91016 12.6602 15.3799 16.0801 21.7305 5.5zM449.63 254.72\r\n-c0 0 4.96973 -0.790039 4.99023 -3.66016c0 -2.08984 -4.98047 -55.25 -4.98047 -55.25c-0.109375 -1.48926 -0.339844 -6.80957 -7.58984 -6.80957l-0.790039 -4.70996c18.3906 -2.83008 19.3701 -3.04004 36.9199 -7.33008l0.520508 4.70996\r\n-c-13.0498 3.91992 -9.74023 7.37012 -4.4502 46.0898c1.09961 0.870117 8.62012 7.14062 20.6904 0.790039l11.2598 11.2598s-9.69043 8.90039 -14.9307 7.33008c-5.23926 -1.30957 -15.4492 -10.7393 -15.4492 -10.7393l1.56934 17.54\r\n-c-8.10938 4.0498 -27.0693 7.3291 -27.7598 7.3291v-6.5498zM460.62 140.28c9.42969 -2.35059 16.2402 2.62012 18.8496 11.5195c2.08984 7.60059 -1.56934 16.7598 -10.7393 19.3799c-6.54004 2.10059 -15.7109 -0.779297 -18.8506 -10.21\r\n-c-3.39941 -9.68945 2.62012 -18.5996 10.7402 -20.6895zM502.78 130.59c-0.780273 1.31055 -1.04004 2.10059 -0.799805 3.91016c1.22949 27.0098 1.5293 24.6602 1.0498 25.1396c-2.08984 0.790039 -5.5 2.09082 -7.58984 2.87988l-0.520508 -0.259766v-2.08984\r\n-c-3.92969 -6.01953 -10.4795 -15.4502 -13.8799 -20.1602l-2.62012 -1.83008v-0.259766c2.08984 -0.259766 4.70996 -1.30957 6.02051 -1.57031v0.260742l0.790039 3.39941c0.789062 1.0498 2.35938 3.66992 3.66992 5.5c0.40918 0 2.25 -0.549805 7.06934 -2.35938\r\n-c0.330078 -0.320312 0.330078 0.649414 -0.259766 -7.59082l-1.57031 -1.8291v-0.260742c1.57031 -0.519531 6.28027 -2.35938 8.64062 -2.87988zM498.07 220.41c-13.2207 -21.1504 -9.39062 -51.6006 9.66992 -52.9004c5.75977 -0.259766 9.42969 3.93066 9.68945 3.66992\r\n-l-2.08984 -6.80957c8.91016 -4.21973 11.4404 -5.29004 17.8105 -8.63965l1.83008 4.44922c-6.14062 3.51074 -1.29004 11.25 24.6191 84.3203c-6.13965 6.45996 -10.2998 10.0596 -22.5195 20.4297l-1.83008 -3.66992c1.62988 -1.35938 6.79004 -5.00977 4.4502 -11.2598\r\n-l-7.58984 -26.1904c-3.28027 12.79 -22.79 14.8701 -34.04 -3.39941zM527.4 141.07l2.35938 3.39941v0.520508c-3.41016 6.83008 -11.9395 7.41992 -14.6602 2.35938c-1.83984 -3.40918 0.260742 -7.06934 1.83008 -9.68945\r\n-c1.57031 -2.87988 3.14062 -6.29004 2.08984 -8.37988c-2.31934 -4.62988 -8.94922 -0.680664 -8.37988 4.97949l-0.790039 -0.259766c-2.09961 -4.7998 -1.83008 -4.00977 -1.83008 -4.70996c3.05078 -6.09961 12.8105 -7.12988 15.4502 -0.790039\r\n-c1.57031 3.15039 0.520508 6.80957 -1.0498 9.42969c-1.83008 3.40039 -4.18945 6.29004 -2.87988 8.37988c1.51953 2.65039 7.86035 0.470703 7.86035 -5.23926zM548.61 127.71l1.30957 3.91016l-0.259766 0.259766c-2.36035 2.08984 -8.64062 6.54004 -12.3105 8.90039\r\n-h-0.259766l-3.13965 -3.40039v-0.259766c4.7998 -0.320312 3.37988 0.149414 6.01953 -1.83008v-0.259766c-2.62012 -4.9707 -6.0293 -11.2607 -9.16992 -17.0205l-2.08984 -1.30957l-0.259766 -0.259766l5.75977 -4.4502l0.259766 0.259766\r\n-c-0.259766 0.530273 -0.519531 1.57031 0.790039 3.92969c2.87988 5.77051 6.28027 12.0508 8.64062 16.2402h0.259766c3.54004 -2.57031 2.49023 -1.43945 4.4502 -4.70996zM575.84 171.97l7.85059 10.46s-9.4209 18.8604 -23.04 16.5\r\n-c-20.8408 -4.0293 -3.15039 -34.21 -2.09082 -38.2295c4.33008 -15.1299 -16.3193 -12.5605 -13.3496 5.24023l-2.87988 2.08984l-4.98047 -14.4004s11.7803 -11.2598 20.1602 -10.4697c8.12012 0.790039 13.8799 6.29004 13.8799 16.5\r\n-c0 8.37988 -7.85938 22.7803 -7.85938 27.7598c0 6.86035 12.2695 4.75977 11.5195 -4.97949c-0.259766 -2.61035 -1.2998 -5.23047 -2.08984 -7.59082zM611.46 182.18c0.780273 -2.35938 1.57031 -1.83008 0.790039 0.270508\r\n-c-32.4697 98.9795 -132.76 138.78 -199.8 139.83c-50.54 0.779297 -89.5605 -11.79 -131.98 -35.8799l20.6904 61.0098l-33.7803 -65.7305l-8.89941 20.9502c3.13965 1.04004 6.2793 2.08984 6.2793 2.08984l-2.62012 8.64062s-3.13965 -0.780273 -7.33008 -2.09082\r\n-l-12.0498 28.2803l13.6201 -61.0098c-5.12012 2.55957 -19.0996 6.83008 -6.5498 19.3799l-2.62012 11c-6.97949 -2.21973 -13.2295 -3.62012 -32.21 -9.68945l-23.0801 11.5l59.1797 -42.6807l-4.70996 -2.08984l-17.2793 13.8799\r\n-c2.23926 -5.13965 3.2998 -12.1699 4.70996 -19.6396l-28.54 -13.0898l-30.1104 36.1396l-17.2803 -9.16992l13.6201 -42.4199l-11.2598 -4.98047l94.2695 29.3301l-3.66992 -10.4697l-0.519531 3.13965l-13.0898 -3.39941l4.97949 -24.6201l-4.4502 -12.3105\r\n-l-25.6592 30.6406l-39.8008 -10.21l18.8506 -58.9199c-60.1299 62.3994 -67.7002 66.3994 -61.7998 75.6797c2.09961 2.87988 7.85938 7.07031 7.85938 7.07031l-4.18945 7.06934c-26.7803 -18.3496 -27.8398 -19.1494 -58.4004 -42.6797l4.98047 -6.01953\r\n-s8.12012 5.75977 13.6201 5.5c7.81934 -0.350586 1.76953 2.93945 113.659 -98.7305l11.7803 8.37988l-27.7598 93.4805l35.8799 -42.1602l-4.70996 -13.8799l41.9004 88.5098c34.6699 -80.5098 29.1494 -66.9502 32.9893 -78.8203l-33.5195 67.2998l-2.36035 -4.44922\r\n-c1.2998 -1.30078 -0.919922 3.05957 22.7803 -59.4404c3.22949 -8.88965 -1.10059 -9.88965 -5.5 -12.8301l2.36035 -4.70996c15.3594 6.79004 22.9395 9.54004 39.0195 14.4004l-1.0498 4.97949c-8.89062 -1.33008 -10.1006 0.169922 -12.0498 4.4502\r\n-c-1.05078 2.09961 -14.1504 40.0703 -20.4307 58.6602l-10.21 4.97949l-2.35938 8.12012l61.54 -36.6602l-13.0908 -43.21c12.1904 3.26074 27.0303 6.74023 49.4902 9.9502l-0.259766 26.71l-4.98047 -1.0498c-0.669922 -13.7998 -6.0293 -22.0801 -19.6396 -22.7803\r\n-l22.2598 80.3906c-27.6201 -0.450195 -59.2695 -7.19043 -66.7695 -8.90039l3.92969 -16.5l-25.1396 19.6396l91.3896 20.6904l-85.6299 -9.16992c38.4902 22.5195 79.3398 39.0195 132.76 37.9697c131.46 -2.08984 180.95 -99.2402 191.95 -129.62zM203.48 295.57\r\n-l2.35938 -8.64062c7.82031 2.61035 10.8604 2.36035 11.2598 2.36035l-9.42969 7.58984c-2.36035 -0.790039 -4.18945 -1.30957 -4.18945 -1.30957zM347.24 257.07l-11.5303 -37.71l-21.7295 17.0195c6.7998 25.5 31.6895 21.29 33.2598 20.6904zM318.43 380.93\r\n-c224.94 0 321.83 -143.76 321.57 -227.55c0 -11 -0.269531 -17.5498 -0.790039 -19.6396c-0.259766 -2.10059 -1.0498 -0.790039 -1.0498 0.519531v9.9502c0 106.58 -121.51 223.37 -301.67 223.37c-61.2705 0 -103.69 -12.0498 -110.24 -13.8799l-1.57031 0.259766\r\n-c-6.80957 7.58984 -12.8301 9.69043 -21.21 11.7803v0.790039c8.91016 2.34961 56.5605 14.3994 114.96 14.3994zM529.49 211.25c-8.61035 -34.4502 -13.6504 -35.3496 -18.3301 -35.3604c-7.33008 0 -6.81055 9.43066 -6.02051 14.9307\r\n-c0.879883 9.72949 7.40039 34.6494 17.0205 33.5195c7.33008 -0.780273 8.63965 -7.33008 7.33008 -13.0898zM467.96 168.3c3.40039 -0.780273 7.84961 -4.4502 5.23047 -14.3896c-2.88086 -11.2598 -8.11035 -11.79 -11.7803 -10.7402\r\n-c-5.5 1.31055 -7.85059 7.84961 -6.02051 14.6602c3.14062 11.2598 9.9502 11.2598 12.5703 10.4697zM491 147.35v0.270508c1.0498 1.83008 5.5 8.63965 6.5498 9.9502c-0.269531 -3.66992 -0.790039 -10.2207 -0.790039 -12.0508\r\n-c-2.62012 0.780273 -3.92969 1.31055 -5.75977 1.83008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"think-peaks\" unicode=\"&#xf731;\" horiz-adv-x=\"576\" \r\n-d=\"M465.4 38.5996l-206.2 353.801l-204.2 -352.101l-32 0.299805l236.2 407.4l206.2 -353.9l55.0996 95l32 -0.299805zM110.1 82.7002l149.601 257.899l235.8 -404.6l-32.5 0.0996094l-203.4 349.101l-117.399 -202.5h-32.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reacteurope\" unicode=\"&#xf75d;\" horiz-adv-x=\"576\" \r\n-d=\"M250.6 236.26l2 6.7998l-5.69922 4.30078l7.19922 0.0996094l2.30078 6.7998l2.2998 -6.7998l7.09961 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.7998 4.10059zM314.3 236.26l1.90039 6.7998l-5.7002 4.30078l7.2002 0.0996094l2.2998 6.7998l2.2998 -6.7998\r\n-l7.2002 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.80078 4.10059zM223 185.76c4.90039 0 3.7998 -3.89941 3.7998 -13.7598c0 -10.2998 -6.7002 -14.0996 -16.7998 -14.0996h-0.200195c-10.0996 0 -16.7998 3.69922 -16.7998 14.0996v40.0596\r\n-c0 9.90039 6.7002 14.1006 16.7998 14.1006h0.200195c10.0996 0 16.7998 -4.2002 16.7998 -14.1006c0 -8.39941 0.900391 -12.1992 -3.7998 -12.2998h-3.40039c-4.5 0 -3.7998 3.2998 -3.7998 10.5c0 4.7002 -2.2998 6.10059 -5.7998 6.10059\r\n-s-5.7998 -1.40039 -5.7998 -6.10059v-36.5996c0 -4.7002 2.2998 -6.10059 5.7998 -6.10059s5.7998 1.40039 5.7998 6.10059c0 8.09961 -1 12.0996 3.7998 12.0996h3.40039zM142.3 168.36c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961\r\n-c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-21.8994c-2.5 0 -3.80078 1.2998 -3.80078 3.7998v59.0996c0 2.5 1.30078 3.90039 3.7002 3.80078h21.7002c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-14.4004v-18.2998h11.4004\r\n-c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-11.4004v-19.2998h14.7002zM100.3 186.86l8.10059 -23.9004c0.799805 -2.59961 -0.400391 -4.40039 -3.2002 -4.40039h-3.2998\r\n-c-0.0820312 -0.00585938 -0.21582 -0.0107422 -0.297852 -0.0107422c-1.81543 0 -3.6084 1.43848 -4.00293 3.21094l-7.39941 23.5h-5.60059v-22.8994c0 -2.5 -1.2998 -3.80078 -3.7998 -3.80078h-3.39941c-2.5 0 -3.80078 1.30078 -3.80078 3.80078v59.0996\r\n-c0 2.5 1.30078 3.7998 3.80078 3.7998h13.3994c10.1006 0 16.7998 -4 16.7998 -14.0996v-11.9004c0 -6.39941 -2.69922 -10.3994 -7.2998 -12.3994zM96.5 200.86v8.69922c0 4.80078 -2.5 6.10059 -6.09961 6.10059h-5.80078v-20.9004h5.80078\r\n-c3.59961 0 6.09961 1.2998 6.09961 6.10059zM176 222l11.2002 -59.2002c0.5 -2.7002 -0.799805 -4.09961 -3.40039 -4.09961h-3.5c-0.100586 -0.00976562 -0.264648 -0.0185547 -0.366211 -0.0185547c-1.94531 0 -3.61816 1.57617 -3.7334 3.51855l-1.7998 11.2998h-12.2002\r\n-l-1.7998 -11.2998c-0.116211 -1.94238 -1.78809 -3.51855 -3.7334 -3.51855c-0.101562 0 -0.265625 0.00878906 -0.367188 0.0185547h-3c-2.5 0 -3.89941 1.39941 -3.39941 4.09961l11 59.2002c0.135742 1.88477 1.78027 3.41504 3.66992 3.41504\r\n-c0.0908203 0 0.239258 -0.00683594 0.330078 -0.0146484h6.89941c0.110352 0.0117188 0.290039 0.0205078 0.401367 0.0205078c1.89844 0 3.60059 -1.53223 3.79883 -3.4209zM163.7 182.7h9.39941l-4.69922 29.7002zM253 162.5c0 -2.45996 -1.2998 -3.83984 -3.7998 -3.7998\r\n-h-3.40039c-2.5 0 -3.7998 1.2998 -3.7998 3.7998v53.2002h-7.2998c-2.5 0 -3.7998 1.2998 -3.7998 3.7998v2.09961c0 2.5 1.2998 3.80078 3.7998 3.80078h25.7998c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-7.5v-53.2002z\r\n-M501 163.3c0.0449219 0.00390625 0.119141 -0.0322266 0.164062 -0.0322266c1.01562 0 1.84082 -0.824219 1.84082 -1.83984c0 -0.0351562 -0.00292969 -0.0927734 -0.00488281 -0.12793v-0.799805c0.00195312 -0.0273438 0.00292969 -0.0722656 0.00292969 -0.100586\r\n-c0 -0.999023 -0.810547 -1.80957 -1.81055 -1.80957c-0.0527344 0 -0.139648 0.00488281 -0.192383 0.00976562h-22.5c-0.0527344 -0.00488281 -0.139648 -0.00976562 -0.192383 -0.00976562c-1 0 -1.81055 0.810547 -1.81055 1.80957\r\n-c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00878906 0.0625 -0.0166016 0.166016 -0.0166016 0.229492c0 0.893555 0.725586 1.62012 1.62012 1.62012c0.111328 0 0.289062 -0.0224609 0.396484 -0.0498047h22.2002\r\n-c0.0644531 0.00878906 0.169922 0.015625 0.235352 0.015625c0.977539 0 1.77051 -0.792969 1.77051 -1.76953c0 -0.0400391 -0.00292969 -0.105469 -0.00585938 -0.145508v-0.800781c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281\r\n-c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-19.1006v-25.7998h16.1006c0.03125 0.00195312 0.0820312 0.00390625 0.113281 0.00390625c1.04297 0 1.88965 -0.84668 1.88965 -1.89062\r\n-c0 -0.03125 -0.000976562 -0.0820312 -0.00292969 -0.113281v-0.799805c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-16.1006v-26.7002\r\n-h19.4004zM407.9 226.2c10.0996 0 15.2998 -4.74023 15.2998 -14.1006v-40.0996c0 -9.2998 -5.2002 -14.0996 -15.2998 -14.0996h-0.800781c-10.0996 0 -15.2998 4.7998 -15.2998 14.0996v40.0996c0 9.40039 5.2002 14.1006 15.2998 14.1006h0.800781zM418.1 173.8v36.6006\r\n-c0 7.89941 -3 11.0996 -10.5 11.0996s-10.5 -3.2002 -10.5 -11.0996v-36.6006c0 -8 3 -11.0996 10.5 -11.0996s10.4004 3.09961 10.5 11.0996zM371.6 188.3l10.6006 -27.2998c0.5 -1.2998 -0.100586 -2.2998 -1.5 -2.2998h-1.5\r\n-c-0.0351562 -0.00195312 -0.0927734 -0.00390625 -0.128906 -0.00390625c-0.886719 0 -1.85938 0.673828 -2.1709 1.50391l-10.4004 27.2002h-11.5996v-26.9004c0.00390625 -0.0458984 0.0078125 -0.12207 0.0078125 -0.167969\r\n-c0 -0.960938 -0.779297 -1.74023 -1.74023 -1.74023c-0.0458984 0 -0.12207 0.00390625 -0.167969 0.0078125h-1.2002c-0.0527344 -0.00488281 -0.139648 -0.00976562 -0.192383 -0.00976562c-0.999023 0 -1.81055 0.810547 -1.81055 1.80957\r\n-c0 0.0283203 0.00195312 0.0732422 0.00292969 0.100586v63c-0.000976562 0.0273438 -0.00292969 0.0722656 -0.00292969 0.100586c0 0.999023 0.811523 1.80957 1.81055 1.80957c0.0527344 0 0.139648 -0.00488281 0.192383 -0.00976562h13.7002\r\n-c10.0996 0 15.2998 -4.7002 15.2998 -14.1006v-9.7002c0 -7.19922 -3.09961 -11.6992 -9.2002 -13.2998zM365.2 192.2c7.5 0 10.5 3.16016 10.5 11v6.39941c0 8 -3 11.1006 -10.5 11.1006h-10.2002v-28.5h10.2002zM451.1 225.3c10.1006 0 15.3008 -4.7002 15.3008 -14.0996\r\n-v-10.5c0 -9.2998 -5.2002 -14.1006 -15.3008 -14.1006h-10.5996v-26.0996c0.00488281 -0.0458984 0.0078125 -0.12207 0.0078125 -0.167969c0 -0.960938 -0.779297 -1.74023 -1.73926 -1.74023c-0.046875 0 -0.12207 0.00390625 -0.168945 0.0078125h-1.19922\r\n-c-0.0537109 -0.00488281 -0.139648 -0.00976562 -0.193359 -0.00976562c-0.999023 0 -1.80957 0.810547 -1.80957 1.80957c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00976562 0.0625 -0.0166016 0.166016 -0.0166016 0.229492\r\n-c0 0.893555 0.725586 1.62012 1.62012 1.62012c0.111328 0 0.288086 -0.0224609 0.396484 -0.0498047h13.6992zM461.3 202.5v7.09961c0 7.90039 -3 11.1006 -10.5 11h-10.2002v-29.1992h10.2002c7.5 0 10.5 3.19922 10.5 11.0996zM259.5 140l7.09961 -0.0996094\r\n-l-5.69922 -4.30078l2.09961 -6.7998l-5.7998 4.10059l-5.7998 -4.10059l2.09961 6.7998l-5.7002 4.30078l7.10059 0.0996094l2.2998 6.7998zM487.1 276.1c122.301 -46.0996 118.401 -132.54 -33.8984 -176.34c13.3994 -49.7002 18.0996 -101.899 0.0996094 -133.8\r\n-c-3.7998 -6.7002 -16.7998 -27.7002 -47.5996 -27.7002c-41.5 0 -110.2 41.6006 -182.101 142c-42.7998 3.5 -72.1992 10.1006 -84.5996 13c-20.5 -82.2998 -6.7998 -125.3 15.5 -137.899c1.2002 -0.700195 38.4004 -27.2002 120.9 52.7998\r\n-c3.39941 -3.5 6.79883 -6.90039 10.1982 -10.2002c-63.0996 -61.2002 -110.199 -71 -138.199 -55.2002c-32.4004 18.2998 -42.8008 72 -22.3008 153.9c-18.8994 5 -121.6 33.2002 -122.1 92.7998c-0.400391 40.9004 49.7998 74.7002 120.3 95\r\n-c-13.3994 49.5996 -18.2002 101.8 -0.0996094 133.8c3.7998 6.74023 16.7998 27.7402 47.5996 27.7402c41.6006 0 110.3 -41.6396 182.2 -142.14c23.6113 -1.88379 61.5127 -7.70801 84.5996 -13c20.5 82 6.90039 125.1 -15.5 137.8\r\n-c-1.2998 0.700195 -38.3994 27.2002 -120.899 -52.7998c-3.40039 3.5 -6.80078 6.89941 -10.2002 10.1992c52.2998 50.9404 103.7 74.6006 138.2 55.2402c33.8994 -19.2002 41.8994 -75.8994 22.2998 -153.899c9.98535 -2.61523 25.9346 -7.67773 35.5996 -11.3008z\r\n-M135.901 411.16c-23.1006 -40.7998 1 -121.562 1.19922 -122.961c22.9912 5.78516 60.8018 12.3262 84.4004 14.5996c12.7793 18.6787 35.4922 47.4404 50.7002 64.2002c3.39941 -3.33301 6.7998 -6.74609 10.2002 -10.2393\r\n-c-12.5371 -13.7451 -31.4434 -37.2207 -42.2002 -52.3994c14.8213 1.11914 38.9141 2.02734 53.7783 2.02734c11.082 0 29.0566 -0.504883 40.1211 -1.12793c-64.5 86.6006 -126.5 126.2 -163.3 126.2c-23 0 -32 -15.2002 -34.8994 -20.2998zM440.701 -27.1406\r\n-c3.2998 6 21.5 38.5996 -1.2002 123c-4.09961 -1.10059 -37.0996 -9.90039 -84.4004 -14.6006c-12.7578 -18.6943 -35.4717 -47.4551 -50.6992 -64.2002c-3.40039 3.2998 -6.80078 6.7002 -10.2002 10.2002c12.5371 13.7461 31.4424 37.2207 42.2002 52.4004\r\n-c-14.7715 -1.14258 -38.7842 -2.06934 -53.5996 -2.06934c-11.1328 0 -29.1875 0.524414 -40.3008 1.16895c64.5996 -86.7998 126.6 -126.2 163.3 -126.2c23.1006 0 32 15.2002 34.9004 20.3008zM449.801 111.459c25.6006 7.2998 85.9004 27.4004 105.7 62.5\r\n-c1.40039 2.5 33.5 50.5 -72.5996 90.4004c-9.36914 3.51562 -24.8252 8.44336 -34.5 11c-3.60059 -12.9004 -7.90039 -26.1006 -12.8008 -39.5c-3.15723 -0.430664 -7.14453 -2.93945 -8.89941 -5.60059l-0.100586 0.100586\r\n-c-1.6416 1.55762 -4.68848 3.48438 -6.7998 4.2998c5.7002 15 10.6006 29.7998 14.6006 44.2002c-7.2002 1.69922 -31.8008 7.59961 -72.2002 11.6992c16.7002 -24.5 27.8994 -44.0996 34.2998 -55.5c-3.50781 -1.14648 -8.16699 -4.46094 -10.4004 -7.39941\r\n-c-13.5996 16.3994 -11 19.8994 -42.5 64.5c-13.752 0.96582 -36.1016 1.75 -49.8877 1.75c-17.2871 0 -45.292 -1.23145 -62.5117 -2.75c-16.9004 -25 -28.2998 -45.2002 -34.7998 -56.9004c-3.49707 -1.49023 -8.06738 -5.25391 -10.2002 -8.39941\r\n-c-0.914062 2.88965 -3.78125 6.47363 -6.40039 8c6.10059 11.3994 16.9004 31 32.7998 55.2998c-39.5996 -4.60059 -65 -11.2002 -72 -13c4.30078 -14.1006 9.40039 -28.6006 15.2002 -43.2998c-0.71582 -0.522461 -1.74609 -1.50781 -2.2998 -2.2002\r\n-c-1.5 1.89941 -4 5.2998 -14.4004 5.2998c-4.69922 12.2998 -8.7998 24.5 -12.3994 36.4004c-138.8 -40.3604 -158.4 -121.36 1.5 -164c3.59961 12.8994 7.7998 26 12.7002 39.3994c0.269531 -0.0146484 0.708008 -0.0273438 0.978516 -0.0273438\r\n-c1.68359 0 4.33594 0.460938 5.9209 1.02734c3 -1.2002 5.2002 -1 8.40039 -1c-5.5 -14.5996 -10.2002 -28.8994 -14.1006 -42.8994c19.7119 -4.56055 52.0576 -9.80176 72.2002 -11.7002c-16.2998 23.8994 -27.5 43.3994 -33.7998 54.5996\r\n-c8.7002 0 10.7002 1.60059 12.5996 3.2002c0.794922 -0.480469 2.13965 -1.15234 3 -1.5c15.3008 -26.7002 28.9004 -46.5996 36.8008 -57.7998c13.751 -0.96582 36.1006 -1.75 49.8857 -1.75c17.2871 0 45.2939 1.23145 62.5137 2.75\r\n-c16.5 24.2998 27.7002 44 33.9004 55.2002c7.2998 0 9.7998 3 10.8994 4.19922c1.5332 -1.11426 4.2207 -2.54785 6 -3.19922c-15 -28 -28.6992 -48.9004 -32.1992 -54.2002c20.1172 2.22656 52.373 8.05078 72 13c-4.10059 13.7998 -9 27.8994 -14.7002 42.2002\r\n-c1.65723 0.743164 4.07617 2.35645 5.39941 3.59961l0.100586 0.0996094c2.07227 -3.14648 6.8125 -5.7002 10.5811 -5.7002c0.0322266 0 0.0859375 0 0.119141 0.000976562c4.69922 -12.3008 8.7998 -24.5 12.3994 -36.4004zM335.401 225.459\r\n-c0.0556641 0.00585938 0.145508 0.0107422 0.201172 0.0107422c1.05566 0 1.95117 -0.856445 1.99805 -1.91113v-51.5c0 -9.5 -5 -14.0996 -15.0996 -14.0996h-0.400391c-10.0996 0 -15.0996 4.5 -15.0996 14.0996v51.5\r\n-c-0.00195312 0.0283203 -0.00292969 0.0732422 -0.00292969 0.100586c0 0.999023 0.810547 1.81055 1.81055 1.81055c0.0527344 0 0.139648 -0.00488281 0.192383 -0.0107422h1.2002c0.0615234 0.00878906 0.162109 0.0146484 0.224609 0.0146484\r\n-c0.933594 0 1.69043 -0.756836 1.69043 -1.68945c0 -0.0625 -0.00683594 -0.163086 -0.015625 -0.225586v-49.7998c0 -8 2.60059 -11.0996 10.1006 -11.0996s10.0996 3.2002 10.0996 11.0996v49.7998c-0.00390625 0.046875 -0.0078125 0.12207 -0.0078125 0.168945\r\n-c0 0.959961 0.779297 1.73926 1.74023 1.73926c0.0458984 0 0.121094 -0.00292969 0.167969 -0.0078125h1.2002zM321.701 139.999l7.09961 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.7998 4.10059l-5.80078 -4.10059l2.10059 6.7998l-5.7002 4.30078\r\n-l7.09961 0.0996094l2.30078 6.7998zM290.601 132.599l7.10059 -0.0996094l-5.7002 -4.2998l2.09961 -6.7998l-5.7998 4.09961l-5.7998 -4.09961l2.09961 6.7998l-5.69922 4.2998l7.09961 0.0996094l2.2998 6.80078zM295.701 163.399\r\n-c0.0507812 0.00488281 0.133789 -0.03125 0.185547 -0.03125c1.00977 0 1.83008 -0.819336 1.83008 -1.83008c0 -0.0664062 -0.00683594 -0.172852 -0.015625 -0.239258v-0.799805c0.00292969 -0.0400391 0.00585938 -0.105469 0.00585938 -0.145508\r\n-c0 -0.977539 -0.792969 -1.77051 -1.77051 -1.77051c-0.0654297 0 -0.170898 0.00683594 -0.235352 0.015625h-22.5c-0.0537109 -0.00488281 -0.139648 -0.00976562 -0.193359 -0.00976562c-0.999023 0 -1.80957 0.810547 -1.80957 1.80957\r\n-c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00195312 0.0273438 -0.00292969 0.0722656 -0.00292969 0.100586c0 0.999023 0.810547 1.80957 1.80957 1.80957c0.0537109 0 0.139648 -0.00488281 0.193359 -0.00976562h22.2002\r\n-c0.0644531 0.00878906 0.169922 0.015625 0.235352 0.015625c0.977539 0 1.77051 -0.792969 1.77051 -1.77051c0 -0.0400391 -0.00292969 -0.105469 -0.00585938 -0.145508v-0.799805c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281\r\n-c0 -1.04395 -0.84668 -1.89062 -1.88965 -1.89062c-0.03125 0 -0.0820312 0.00195312 -0.113281 0.00390625h-19.1006v-25.7998h16.1006c0.03125 0.00195312 0.0820312 0.00292969 0.113281 0.00292969c1.04297 0 1.88965 -0.84668 1.88965 -1.88965\r\n-c0 -0.03125 -0.000976562 -0.0820312 -0.00292969 -0.113281v-0.800781c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-16.1006v-26.6992\r\n-h19.4004zM288.301 262.799l2.2998 -6.7998l7.10059 -0.0996094l-5.7002 -4.30078l2.09961 -6.7998l-5.7998 4.10059l-5.7998 -4.10059l2.09961 6.7998l-5.69922 4.30078l7.09961 0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adobe\" unicode=\"&#xf778;\" horiz-adv-x=\"512\" \r\n-d=\"M315.5 384h170.9v-384zM196.5 384l-170.9 -384v384h170.9zM256 241.9l107.5 -241.9h-73l-30.7002 76.7998h-78.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"artstation\" unicode=\"&#xf77a;\" horiz-adv-x=\"512\" \r\n-d=\"M2 70.5996h315.1l59.2002 -102.6h-285.399h-0.0146484c-17.4814 0 -38.0381 12.6787 -45.8857 28.2998zM501.8 98c19 -29.4004 -0.0996094 -55.9004 -2 -59.0996l-40.7002 -70.5l-257.3 447.6h88.4004h0.0117188c17.0596 0 37.3936 -12.2305 45.3877 -27.2998zM275 143.5\r\n-h-231l115.5 200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"atlassian\" unicode=\"&#xf77b;\" horiz-adv-x=\"512\" \r\n-d=\"M152.2 211.6c66.2998 -70.7998 89.0996 -189.3 51.2002 -267.1c-2.40039 -5.2002 -7.60059 -8.5 -13.4004 -8.40039h-175c-11 0 -18.4004 11.7002 -13.4004 21.7002l125.801 251c5.09961 10.5 17.0996 11 24.7998 2.7998zM244.4 439.9\r\n-c6.7998 10.8994 20.2998 10.6992 25.5996 0.0996094c5.90039 -11.7002 240.4 -482.3 240.4 -482.3c5 -9.90039 -2.2002 -21.7002 -13.4004 -21.7002h-174.2c-5.7002 0 -10.8994 3.2998 -13.3994 8.40039c-73.5 146.899 -187.301 302.1 -65 495.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"canadian-maple-leaf\" unicode=\"&#xf785;\" horiz-adv-x=\"512\" \r\n-d=\"M383.8 96.2998c-5 -5 -10 -7.5 -5 -22.5s10 -35.0996 10 -35.0996s-95.2002 20.0996 -105.2 22.5996c-8.89941 0.900391 -18.3994 -2.39941 -18.3994 -12.5c0 -10.0996 5.7998 -112.8 5.7998 -112.8h-30s5.7998 102.8 5.7998 112.8s-9.59961 13.4004 -18.2998 12.5\r\n-c-10.0996 -2.5 -105.3 -22.5996 -105.3 -22.5996s5 20.0996 10.0996 35.0996c4.90039 15 0 17.5 -5.09961 22.5c-2.60059 2.5 -105.2 92.4004 -105.2 92.4004l17.5 7.59961c10 4.90039 7.40039 11.4004 5 17.4004c-2.5 7.59961 -20.0996 67.2998 -20.0996 67.2998\r\n-s47.5996 -10 57.6992 -12.5c7.5 -2.40039 10 2.5 12.5 7.5s15 32.2998 15 32.2998s52.6006 -59.7998 55.1006 -62.2998c10.0996 -7.5 20.0996 0 17.5996 10c0 10 -27.5996 129.6 -27.5996 129.6s30.0996 -17.3994 40.0996 -22.3994c7.60059 -5 12.6006 -5 17.6006 5\r\n-c5 7.5 42.5 79.7998 42.5 79.7998s37.5996 -72.2998 42.6992 -79.7998c5 -10 10.1006 -10 17.6006 -5c10 5 40.0996 22.3994 40.0996 22.3994s-27.5996 -119.6 -27.5996 -129.6c-2.5 -10 7.59961 -17.5 17.5996 -10c2.5 2.40039 55.1006 62.2998 55.1006 62.2998\r\n-s12.5 -27.3994 15 -32.3994s5 -9.90039 12.5 -7.5c10 2.5 57.6992 12.5 57.6992 12.5s-17.6992 -59.7002 -20.0996 -67.3008c-2.40039 -5.89941 -5 -12.5 5 -17.3994l17.5 -7.5s-102.7 -89.9004 -105.2 -92.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"centos\" unicode=\"&#xf789;\" \r\n-d=\"M289.6 350.5l31.6006 -31.7002l-76.2998 -76.5v108.2h44.6992zM127.2 318.8l31.5996 31.7002h44.7002v-108.2zM168.7 360.4l55.5 55.5996l55.5 -55.5996h-44.7002v-127.9l-10.7998 -10.7998l-10.7998 10.7998v127.9h-44.7002zM194.9 192.3l-10.8008 -10.7998h-128.6\r\n-v-44.7998l-55.5 55.5996l55.5 55.6006v-44.8008h128.6zM274.2 213l76.2998 76.5l31.5996 -31.7002v-44.7998h-107.899zM447.5 192.3l-55.5 -55.5996v44.7998h-127.7l-10.7998 10.7998l10.7998 10.7998h127.7v44.8008zM65.4004 271.8v78.7002h79.3994l-31.5996 -31.7002\r\n-l90.2998 -90.5v-15.2998h-15.2998l-90.2998 90.5zM382.1 350.5v-78.7002l-31.5996 31.7002l-90.2998 -90.5h-15.2998v15.2998l90.2998 90.5l-31.6006 31.7002h78.5zM203.5 34.0996v-0.0996094h-44.7002l-31.5996 31.7002l76.2998 76.5v-108.101zM65.4004 213v44.7998\r\n-l32.5 31.7002l76.2998 -76.5h-108.8zM382.1 112.8v-78.7002h-78.5l31.6006 31.7002l-90.2998 90.5v15.2998h15.2998l90.2998 -90.5zM382.1 171.6v-44.7998l-31.5996 -31.7002l-76.2998 76.5h107.899zM321.2 65.7998l-31.6006 -31.5996h-44.6992v108.1zM97.9004 95.0996\r\n-l-32.5 31.7002v44.7998h108.8zM279.7 24.2002l-55.5 -55.6006l-55.5 55.6006h44.7002v127.899l10.7998 10.8008l10.7998 -10.8008v-127.899h44.7002zM113.2 65.7998l31.5996 -31.7002h-79.3994v78.7002l32.5 -31.7002l90.2998 90.5h15.2998v-15.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"confluence\" unicode=\"&#xf78d;\" horiz-adv-x=\"512\" \r\n-d=\"M2.2998 35.7998c42.2998 66.9004 125.2 233.2 373.101 112.601c39.6992 -19.1006 83.6992 -39.9004 105.899 -50.3008c8 -3.69922 11.7002 -13.1992 8.10059 -21.2998l-50.4004 -114.1c-0.0996094 -0.100586 -0.0996094 -0.299805 -0.200195 -0.400391\r\n-c-3.89941 -8.09961 -13.5996 -11.5996 -21.7002 -7.7002c-200.399 95.2002 -213.8 111.5 -280.899 -0.699219c0 0 -0.100586 -0.100586 -0.100586 -0.200195c-4.69922 -7.7002 -14.6992 -10 -22.3994 -5.2998l-105.9 65.1992c-7.59961 4.7002 -10 14.6006 -5.5 22.2002z\r\n-M509.7 347.9c-42.6006 -67.5 -125.4 -232.9 -373.4 -112.9c-39.7002 19.2002 -83.7998 40 -106 50.4004c-8 3.69922 -11.7002 13.1992 -8.09961 21.2998l50.5 114.1c0.0996094 0.100586 0.0996094 0.299805 0.200195 0.400391\r\n-c3.89941 8.09961 13.5996 11.5996 21.6992 7.7002c199.5 -94.7002 213.301 -111.7 280.601 0.899414c0.200195 0.400391 0.399414 0.700195 0.599609 1c5 7.5 15.1006 9.40039 22.6006 4.40039l105.8 -65.1006c7.59961 -4.69922 10 -14.5996 5.5 -22.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dhl\" unicode=\"&#xf790;\" horiz-adv-x=\"640\" \r\n-d=\"M238 146.8l22.2998 30.2002h58.7002l-22.2998 -30.2002h-58.7002zM0 165.1h86.5l-4.7002 -6.39941h-81.7998v6.39941zM172.9 177h68.1992c-5.69922 -7.7998 -24.0996 -30.2998 -57.1992 -30.2998h-100.101l41.1006 55.7998h51c5.59961 0 5.59961 -2.2002 2.7998 -5.90039\r\n-c-2.7998 -3.69922 -7.60059 -10.2998 -10.4004 -14.0996c-1.39941 -1.90039 -4.09961 -5.5 4.60059 -5.5zM490.4 183.9h-62.2002l39.2998 53.3994h62.2002zM95.2998 177l-4.7002 -6.40039h-90.5996v6.40039h95.2998zM206.3 203.6\r\n-c2.7998 3.7002 2.90039 5.90039 -2.7002 5.90039h-111.399l20.3994 27.7998h117.9c29.9004 0 37.5996 -23.5996 29.2002 -35c-6.2002 -8.39941 -13.5 -18.3994 -13.5 -18.3994h-45.6006c-8.69922 0 -6 3.5 -4.59961 5.5c2.7998 3.7998 7.5 10.3994 10.2998 14.1992zM0 146.8\r\n-v6.40039h77.7998l-4.7002 -6.40039h-73.0996zM323 146.8c0 0 22.2002 30.2002 22.2998 30.2002h58.7002l-22.2998 -30.2002h-58.7002zM545 146.7l4.7002 6.39941h90.2998v-6.39941h-95zM567.3 177h72.7002v-6.40039h-77.4004zM553.8 158.7l4.7002 6.39941h81.5v-6.39941\r\n-h-86.2002zM389.6 237.3h58.7002l-39.2998 -53.3994h-143.6l39.2998 53.3994h58.7002l-22.5 -30.5996h26.1992zM423.1 177h133.4l-22.2998 -30.2998h-94.2998c-24.1006 0 -30.6006 11.5996 -23.2002 21.5996c2.09961 2.7998 6.39941 8.7002 6.39941 8.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"diaspora\" unicode=\"&#xf791;\" horiz-adv-x=\"512\" \r\n-d=\"M251.64 93.4502c-1.39941 0 -88 -119.9 -88.6992 -119.9c-0.700195 0 -86.6006 60.4502 -86.9404 61.2002s86.5996 125.7 86.5996 127.4c0 2.19922 -129.6 44 -137.6 47.0996c-1.2998 0.5 31.4004 101.8 31.7002 102.1c0.599609 0.700195 144.399 -47 145.5 -47\r\n-c0.399414 0 0.899414 0.600586 1 1.30078c0.399414 2 1 148.6 1.7002 149.6c0.799805 1.2002 104.5 0.700195 105.1 0.299805c1.5 -1 3.5 -156.1 6.09961 -156.1c1.40039 0 138.7 47 139.301 46.2998c0.799805 -0.900391 31.8994 -102.2 31.5 -102.6\r\n-c-0.900391 -0.900391 -140.2 -47.1006 -140.601 -48.8008c-0.299805 -1.39941 82.7998 -122.1 82.5 -122.899s-85.5 -63.5 -86.2998 -63.5c-1 0.200195 -89 125.5 -90.9004 125.5h0.0400391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fedex\" unicode=\"&#xf797;\" horiz-adv-x=\"640\" \r\n-d=\"M586 163.5l54 -60.5h-64.4004l-22.2998 25l-22.0996 -25h-212.2v11.9004h-0.5c-7.90039 -11.7002 -20.7998 -18.6006 -34.9004 -18.6006c-32.6992 0 -56.3994 26.4004 -60.0996 56.9004h-85.5c0 -23.5 31.0996 -35.5 45.7998 -14.6006h42\r\n-c-27.5996 -67.6992 -130.2 -49.3994 -130.2 23.7002c0 6.40039 0.800781 12.5 2.30078 18.2002h-48.9004v-77.5h-49v184.4h109v-41.1006h-60v-26.2002h54.7998v-24.1992c24.5 43.5996 103.9 45.3994 121.9 -14c7.5 25.5 28.8994 44.8994 57.2998 44.8994\r\n-c13.9004 0 25.7998 -3.7998 35.4004 -14.7998h0.5v75.5h151.199v-48.0996h-56.0996v-16h118.7l22.5 -24.8008l21.7002 24.8008h62.3994zM139.3 180.1h46.5c-4.7998 25.6006 -40.3994 26.3008 -46.5 0zM292.7 131.2c34.5 0 32.5996 62.7998 0 62.7998\r\n-c-34 0 -34.6006 -62.7998 0 -62.7998zM460.5 112.1v29.6006h-56.0996v44.7002h56.0996v28.0996h-55.5v33.9004h56.0996v30.1992h-95v-166.5h94.4004zM414.6 151.9h56.1006v-45.6006l50.7002 57l-50.7002 57v-44h-56.1006v-24.3994zM553.2 141.6l26.2998 -29.5h40.5\r\n-l-46 51.4004l45.4004 51h-38.5l-25.6006 -29.2998l-26.5996 29.2998h-39.7002l45.5996 -51.2002l-45.5996 -51.2002h38.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fedora\" unicode=\"&#xf798;\" \r\n-d=\"M225 416c123.7 -0.299805 223.7 -100.9 223.4 -224.6c-0.300781 -123.7 -100.9 -223.7 -224.601 -223.4l-170.2 0.400391v0c-29.5879 0 -53.6006 24.0127 -53.6006 53.5996c0 0.0830078 0.000976562 0.216797 0.000976562 0.299805l0.400391 170.3\r\n-c0.399414 123.7 100.899 223.7 224.6 223.4zM394.8 258.8c-0.0771484 6.26953 -1.33203 16.3047 -2.7998 22.4004l-55.2002 56.0996v-1.59961c0 -5.10059 -1.5 -9.60059 -3.7998 -14.2998zM331 353.7c1.65332 -2.31348 3.53516 -6.43555 4.2002 -9.2002l54.2998 -54.5996\r\n-c-8.27539 24.8252 -34.4834 53.4082 -58.5 63.7998zM118.1 200.8c-4.54785 -0.369141 -11.8057 -1.66895 -16.1992 -2.89941l8.5 -8.5c1.68457 3.44336 5.13477 8.55078 7.69922 11.3994zM97 196.6c-3.91211 -1.08984 -10.0498 -3.41895 -13.7002 -5.19922l27 -27.2002\r\n-c-1.30469 3.32617 -2.37988 8.92676 -2.39941 12.5l0.899414 8zM78.7998 189.2c-3.21484 -1.79492 -8.23242 -5.02051 -11.2002 -7.2002l35.3008 -35.9004c3.70801 1.84668 10.0254 3.95215 14.0996 4.7002zM63.5996 179.4\r\n-c-3.06738 -2.29395 -7.5918 -6.50488 -10.0996 -9.40039l34.9004 -34.5996c2.66113 2.6377 7.36523 6.44629 10.5 8.5zM50.2998 167.1c-2.89941 -3.2998 -5.7998 -6.69922 -8.59961 -10.5l35.7998 -35.8994c1.74121 3.40527 5.19141 8.5127 7.7002 11.3994zM39.2998 152.8\r\n-c-2.07715 -3.18457 -5.0791 -8.56055 -6.7002 -12l39.5 -39.7998c0.306641 4.3584 1.91895 11.168 3.60059 15.2002zM30.5 136.5c-1.7998 -4.90039 -3.2998 -9.59961 -4.7002 -14.5l52.7002 -53.5c-3.42578 6.82812 -6.42773 18.5654 -6.7002 26.2002zM22.5996 93.5\r\n-c0.0380859 -6.14551 1.33789 -15.957 2.90039 -21.9004l55.4004 -55.6992v1.09961c0.0341797 4.18848 1.64746 10.5947 3.59961 14.2998zM27.9004 62.7998c8.29785 -24.8047 34.5059 -53.3867 58.5 -63.7998c-1.61816 2.33008 -3.5 6.45117 -4.2002 9.2002zM22.5996 99.7998\r\n-l64.4004 -64.2002c2.30469 2.8877 6.74023 6.78613 9.90039 8.7002l-72.2002 72.5c-1.08105 -4.62988 -2.02148 -12.2461 -2.10059 -17zM275.9 151.6c32.5996 -0.0996094 32.6992 49.2002 0.199219 49.4004l-33.5996 0.0996094\r\n-c-4.91309 0.0224609 -8.90039 4.02734 -8.90039 8.94043v0.0595703l0.100586 47c0.0996094 40.5 38.5996 60.8008 66 54.9004c15.3994 -3.90039 30.2998 8.40039 30.2998 23.9004c0 12.0996 -8.7002 22.1992 -19.9004 24\r\n-c-5.39062 1.26953 -14.2617 2.30078 -19.8008 2.30078c-0.110352 0 -0.289062 -0.000976562 -0.398438 -0.000976562c-0.116211 0 -0.304688 0.000976562 -0.420898 0.000976562c-57.96 0 -105.081 -47.041 -105.18 -105.001l-0.0996094 -56l-42.6006 0.0996094\r\n-c-32.5996 0.100586 -32.6992 -49.2002 -0.0996094 -49.2998l33.5996 -0.0996094c4.40039 0 8.90039 -4.5 8.90039 -9l-0.0996094 -47c-0.00585938 -30.8574 -25.0537 -55.9004 -55.9102 -55.9004h-0.19043c-9.39941 0 -9.39941 1.59961 -15.7002 1.59961\r\n-c-13.3691 -0.208008 -24.3457 -11.2295 -24.5 -24.5996c0 -15.5 14.2002 -24.2002 19.9004 -24.2002c61.2998 -12.8994 125.5 33.6006 125.7 102.9l0.0996094 56zM299.4 151.9c4.50781 0.442383 11.7207 1.74219 16.0996 2.89941l-8.5 8.5\r\n-c-1.48047 -3.55762 -4.88477 -8.66504 -7.59961 -11.3994zM320.4 156.1c3.9248 1.09082 10.0625 3.46484 13.6992 5.30078l-27 27.1992c1.30566 -3.32617 2.38086 -8.92578 2.40039 -12.5l-0.900391 -8.09961zM338.4 163.5c4 2.2002 8.09961 4.7002 11.8994 7.2002\r\n-l-36.2002 35.8994c-4.09961 -2.2998 -8.7998 -3.59961 -13.6992 -4.69922zM353.9 173.3c2.92188 2.33301 7.44727 6.36426 10.0996 9l-34.9004 35c-2.63672 -2.66797 -7.34082 -6.47656 -10.5 -8.5zM367.1 185.6c2.52539 2.77441 6.37793 7.47852 8.60059 10.5\r\n-l-35.7998 35.9004c-1.78125 -3.37891 -5.23047 -8.48633 -7.7002 -11.4004zM378.1 199.9c2.10938 3.16602 5.11133 8.54199 6.7002 12l-39.5 39.7998c-0.305664 -4.3584 -1.91895 -11.168 -3.59961 -15.2002zM391.6 230.8l-53.0996 53.4004\r\n-c3.69434 -6.76172 6.875 -18.499 7.09961 -26.2002l41.3008 -41.5c1.50879 3.87695 3.61426 10.2832 4.69922 14.2998zM392.6 236.4c1.05957 4.52246 2.08984 11.959 2.30078 16.5996l-64.3008 64.7002c-2.18359 -3.12988 -6.61816 -7.25098 -9.89941 -9.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"figma\" unicode=\"&#xf799;\" horiz-adv-x=\"384\" \r\n-d=\"M277 277.3h-85.4004v-256c-0.0273438 -47.085 -38.2637 -85.2998 -85.3496 -85.2998c-47.1133 0 -85.3496 38.2363 -85.3496 85.3496s38.2363 85.3506 85.3496 85.3506h0.0498047c-47.1133 0 -85.3496 38.2363 -85.3496 85.3496s38.2363 85.3506 85.3496 85.3506\r\n-c-47.085 0 -85.2998 38.2139 -85.2998 85.2998c0 47.085 38.2148 85.2998 85.2998 85.2998h170.7c47.1133 0 85.3496 -38.2363 85.3496 -85.3496s-38.2363 -85.3506 -85.3496 -85.3506zM277 277.3c47.0801 -0.00488281 85.2949 -38.2197 85.2998 -85.2998\r\n-c0 -47.0859 -38.2139 -85.2998 -85.2998 -85.2998s-85.2998 38.2139 -85.2998 85.2998s38.2139 85.2998 85.2998 85.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"intercom\" unicode=\"&#xf7af;\" \r\n-d=\"M392 416c30.9004 0 56 -25.0996 56 -56v-336c0 -30.9004 -25.0996 -56 -56 -56h-336c-30.9004 0 -56 25.0996 -56 56v336c0 30.9004 25.0996 56 56 56h336zM283.7 333.9v-199.5c0 -19.8008 29.8994 -19.8008 29.8994 0v199.5c0 19.7998 -29.8994 19.7998 -29.8994 0z\r\n-M209.1 341.4v-216.5c0 -19.8008 29.9004 -19.8008 29.9004 0v216.5c0 19.7998 -29.9004 19.7998 -29.9004 0zM134.4 333.9v-199.5c0 -19.8008 29.8994 -19.8008 29.8994 0v199.5c0 19.7998 -29.8994 19.7998 -29.8994 0zM59.7002 304v-134.3\r\n-c0 -19.7998 29.8994 -19.7998 29.8994 0v134.3c0 19.7998 -29.8994 19.7998 -29.8994 0zM383.1 76.2002c14.9004 12.8994 -4.5 35.5996 -19.3994 22.7002c-63.2002 -53.9004 -213.4 -55.3008 -279.3 0c-15 12.7998 -34.4004 -9.90039 -19.4004 -22.7002\r\n-c76.4004 -65.4004 245.3 -63 318.1 0zM388.3 169.7v134.3c0 19.7998 -29.8994 19.7998 -29.8994 0v-134.3c0 -19.7998 29.8994 -19.7998 29.8994 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"invision\" unicode=\"&#xf7b0;\" \r\n-d=\"M407.4 416c22.3994 0 40.5996 -18.2002 40.5996 -40.5996v-366.801c0 -22.3994 -18.2002 -40.5996 -40.5996 -40.5996h-366.801c-22.3994 0 -40.5996 18.2002 -40.5996 40.5996v366.801c0 22.3994 18.2002 40.5996 40.5996 40.5996h366.801zM176.1 302.4\r\n-c-0.599609 35.0996 -53.5996 34.7998 -53.6992 -0.400391c0 -15 12.1992 -27 27.0996 -27c4.2002 0.0996094 27 4 26.5996 27.4004zM332.8 71c23.7998 0 42.7002 15.2998 53.2002 52l-17.9004 6.7002c-14.2998 -39.5 -31.7998 -32.4004 -31.7998 -16.9004\r\n-c0.299805 8.10059 0.700195 7.7002 14.9004 58.7998c26.0996 85.8008 -61.2998 113.5 -101.8 38l8.89941 40.5h-68.7998l-9.7002 -35.5996h32.2998l-19.7998 -79.4004c-16.5 -36.6992 -57.3994 -44.0996 -57.3994 -23.1992c0.299805 11.2998 -0.700195 4.5 32.8994 138.199\r\n-h-76.3994l-9.7002 -35.5996h31.7998c-22.0996 -90.0996 -22.9004 -89.7998 -23 -104.1c0 -48.7002 63.0996 -56.1006 94.5996 -4.30078l-8.09961 -32.5h45.0996l25.8008 103.301c14.6992 59.6992 74 47.0996 59.8994 0.699219c-9.09961 -32.5996 -40.5996 -106.6 25 -106.6z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jira\" unicode=\"&#xf7b1;\" horiz-adv-x=\"496\" \r\n-d=\"M490 206.3c8 -7.89941 8 -20.7002 0 -28.5996c-225.8 -225 137.9 136.3 -241.5 -241.7c-180.7 180.1 -109.7 109.3 -242.5 241.6c-7.90039 8 -7.90039 20.8008 0 28.7002c0 0 77 76.7998 242.5 241.7c72.0996 -71.7998 168.6 -169 241.5 -241.7zM248.5 116.3l76 75.7002\r\n-l-76 75.7002l-76 -75.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mendeley\" unicode=\"&#xf7b3;\" horiz-adv-x=\"640\" \r\n-d=\"M624.6 122.8c23.1006 -22.7002 17.8008 -73.5 0 -88.2998c-36.1992 -38.9004 -100 -18.2002 -104.899 35.2002c-1 11.7002 1.09961 23 5.7002 33c47.2998 103.7 -185.9 106.1 -146.5 8.2002c0.0996094 -0.100586 0.199219 -0.200195 0.299805 -0.400391\r\n-c26.5996 -42.5996 -6.7002 -97.2998 -58.7998 -95.2002c-52 -2.2002 -85.6006 52.4004 -58.8008 95.2002c0.100586 0.200195 0.200195 0.299805 0.300781 0.400391c39.3994 97.8994 -193.801 95.5 -146.5 -8.2002c20.3994 -44.9004 -14.1006 -93.7002 -61.2002 -87.7998\r\n-c-61.9004 7.7998 -62.5 82.8994 -42.6006 102.6c16 16 31.8008 24.7998 53 22.5c43.3008 1 49.7002 34.9004 37.5 98.7998c-22.6992 57.5 14.5 131.601 87.4004 130.8c76.9004 -0.699219 82.7998 -82 130.9 -82c49.1992 0 53.5 81.3008 130.899 82\r\n-c72.5 0.700195 110.2 -73.2998 87.4004 -130.8c-12.2002 -63.8994 -5.7998 -97.7998 37.5 -98.7998c18.7002 2 36.0996 -4.7998 48.3994 -17.2002zM320.7 141.9c43.5996 0 62.7998 37.7998 62.7998 62.7998c0 34.7002 -28.0996 62.7998 -62.7998 62.7998h-0.600586\r\n-c-34.5996 0 -62.7998 -28.0996 -62.7998 -62.7998c0 -25.2998 19.4004 -62.7998 62.7998 -62.7998h0.600586z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"raspberry-pi\" unicode=\"&#xf7bb;\" horiz-adv-x=\"407\" \r\n-d=\"M372 215.5c28.7002 -17.2002 54.5996 -72.5996 14 -117.7c-2.59961 -14.0996 -7.09961 -24.2002 -11 -35.3994c-5.90039 -45.2002 -44.4004 -66.3008 -54.5996 -68.8008c-14.9004 -11.1992 -30.7002 -21.7998 -52.2002 -29.1992\r\n-c-20.2002 -20.6006 -42.1006 -28.4004 -64.2002 -28.4004h-1c-22 0 -44 7.7998 -64.2998 28.4004c-21.4004 7.39941 -37.2998 18 -52.2002 29.1992c-10.0996 2.5 -48.7002 23.6006 -54.5996 68.8008c-3.90039 11.1992 -8.40039 21.2998 -11 35.3994\r\n-c-40.5 45 -14.6006 100.5 14.1992 117.7l3.7002 6.5c-0.0996094 46.4004 21.4004 65.2998 46.5 79.7002c-7.59961 2 -15.3994 3.7002 -17.5996 13.2002c-13.1006 3.39941 -15.7998 9.39941 -17.1006 15.7998c-3.39941 2.2998 -14.7998 8.7002 -13.5996 19.7002\r\n-c-6.2998 4.39941 -9.90039 10.0996 -8.09961 18.0996c-6.90039 7.5 -8.7002 13.7002 -5.80078 19.4004c-8.2998 10.1992 -4.59961 15.5 -1.09961 20.8994c-6.2002 11.2002 -0.799805 23.2002 16.5 21.2002c6.90039 10.0996 21.9004 7.7998 24.2002 7.7998\r\n-c2.5 3.2998 6 6 16.5 4.7002c6.7998 6.09961 14.3994 5.09961 22.2998 2.09961c3.2002 2.5 6.09961 3.40039 8.7002 3.5c5 0.100586 9.2998 -2.89941 13.8994 -4.2998c11.3008 3.60059 13.8008 -1.39941 19.4004 -3.39941c12.2998 2.59961 16.0996 -3 22 -8.90039\r\n-l6.90039 0.0996094c18.5996 -10.7998 27.7998 -32.7998 31.0996 -44.0996c3.2998 11.2998 12.5 33.2998 31.0996 44.0996l6.90039 -0.0996094c5.90039 5.90039 9.7002 11.5 22 8.90039c5.5 2.09961 8.09961 7 19.4004 3.39941\r\n-c7.09961 2.2002 13.2998 8.10059 22.5996 0.799805c7.90039 2.90039 15.5 4 22.2998 -2.09961c10.5 1.2998 13.9004 -1.5 16.5 -4.7002c2.2998 0 17.2998 2.2998 24.2002 -7.7998c17.2998 2 22.7998 -10 16.5996 -21.2002c3.5 -5.2998 7.2002 -10.5996 -1.09961 -20.8994\r\n-c2.90039 -5.7002 1.09961 -11.9004 -5.7998 -19.4004c1.89941 -8 -1.7002 -13.7002 -8.10059 -18.0996c1.2002 -11 -10.1992 -17.4004 -13.5996 -19.7002c-1.2998 -6.40039 -4 -12.5 -17.0996 -15.7998c-2.2002 -9.60059 -10 -11.2002 -17.6006 -13.2002\r\n-c25.1006 -14.4004 46.6006 -33.2998 46.5 -79.7002zM349.8 223.5c1.5 48.7002 -36.3994 75.4004 -82.0996 67.9004c-16.7998 -2.80078 80.5996 -86.6006 82.0996 -67.9004zM306.8 130.4c24.5 15.7998 28.9004 51.5996 9.90039 80\r\n-c-19 28.3994 -54.2998 38.5996 -78.7998 22.7998s-28.9004 -51.6006 -9.90039 -80c19 -28.4004 54.2998 -38.6006 78.7998 -22.7998zM238.9 418.7c-16.6006 -15.9004 -40.1006 -55.9004 -5.80078 -71.7998c29 23.5 63.6006 40.6992 102 53.5\r\n-c-49.2998 -25.1006 -78 -45.3008 -93.6992 -62.6006c8.09961 -31.7002 50 -33.2002 65.3994 -32.2998c-3.09961 1.40039 -5.7998 3.09961 -6.7002 5.7998c3.80078 2.7002 17.5 0.299805 27 5.60059c-3.69922 0.699219 -5.39941 1.39941 -7.09961 4.09961\r\n-c9 2.90039 18.7002 5.2998 24.4004 10c-3.10059 0 -6 -0.599609 -10 2.09961c8.09961 4.30078 16.6992 7.7002 23.3994 14.2002c-4.2002 0.100586 -8.7002 0.100586 -10 1.60059c7.40039 4.5 13.6006 9.5 18.7998 15c-5.7998 -0.700195 -8.2998 -0.100586 -9.69922 0.899414\r\n-c5.59961 5.60059 12.5996 10.4004 16 17.2998c-4.40039 -1.5 -8.30078 -2.09961 -11.2002 0.100586c1.89941 4.2998 10 6.7002 14.7002 16.5996c-4.60059 -0.399414 -9.40039 -1 -10.4004 0c2.09961 8.5 5.7002 13.2002 9.2998 18.2002\r\n-c-9.7998 0.200195 -24.5996 0 -23.8994 0.799805l6 6.10059c-9.5 2.5 -19.3008 -0.400391 -26.4004 -2.60059c-3.2002 2.5 0 5.60059 3.90039 8.7998c-8.10059 -1 -15.5 -2.89941 -22.1006 -5.39941c-3.59961 3.09961 2.2998 6.2998 5.10059 9.39941\r\n-c-12.5 -2.2998 -17.8008 -5.59961 -23.1006 -8.89941c-3.7998 3.59961 -0.200195 6.7002 2.40039 9.7998c-9.40039 -3.5 -14.2998 -7.90039 -19.4004 -12.2998c-1.7998 2.2998 -4.39941 4 -1.2002 9.59961c-6.69922 -3.7998 -11.7998 -8.2998 -15.5 -13.2998\r\n-c-4.19922 2.59961 -2.5 6.09961 -2.5 9.40039c-7 -5.60059 -11.3994 -11.5 -16.7998 -17.3008c-1.09961 0.800781 -2.09961 3.40039 -2.89941 7.60059zM204.5 304.1c-27.2002 0.700195 -53.4004 -19.8994 -53.4004 -31.7998\r\n-c-0.0996094 -14.5996 21.5 -29.3994 53.6006 -29.7998c32.7998 -0.200195 53.7002 11.9004 53.7998 26.9004c0.0996094 16.8994 -29.7998 35 -54 34.6992zM81.5 316.9c9.59961 -5.2002 23.2002 -2.80078 27.2002 -5.60059\r\n-c-0.900391 -2.59961 -3.60059 -4.39941 -6.7002 -5.7998c15.4004 -0.900391 57.4004 0.5 65.4004 32.2998c-15.7002 17.2998 -44.4004 37.6006 -93.7002 62.6006c38.3994 -12.8008 73 -30 102 -53.5c34.0996 15.8994 10.5996 55.8994 -6 71.7998\r\n-c-0.900391 -4.2002 -1.7998 -6.7998 -2.90039 -7.60059c-5.39941 5.80078 -9.7998 11.7002 -16.7998 17.3008c0 -3.2002 1.59961 -6.80078 -2.5 -9.40039c-3.7002 5 -8.7998 9.5 -15.5 13.2998c3.2002 -5.59961 0.5 -7.2998 -1.2002 -9.59961\r\n-c-5.09961 4.39941 -10 8.89941 -19.3994 12.2998c2.59961 -3.09961 6.19922 -6.2002 2.39941 -9.7998c-5.2998 3.2998 -10.5996 6.59961 -23.0996 8.89941c2.7998 -3.09961 8.59961 -6.2998 5.09961 -9.39941c-6.7002 2.5 -14 4.2998 -22.0996 5.39941\r\n-c3.7998 -3.19922 7.09961 -6.2998 3.89941 -8.7998c-7.09961 2.2002 -16.8994 5.10059 -26.3994 2.60059l6 -6.10059c0.700195 -0.799805 -14.1006 -0.700195 -23.9004 -0.799805c3.5 -4.90039 7.2002 -9.7002 9.2998 -18.2002c-1 -1 -5.7998 -0.399414 -10.3994 0\r\n-c4.7002 -9.89941 12.7998 -12.3994 14.7002 -16.5996c-2.90039 -2.10059 -6.90039 -1.60059 -11.2002 -0.100586c3.2998 -6.89941 10.3994 -11.6992 16 -17.2998c-1.40039 -1 -3.90039 -1.59961 -9.7002 -0.899414c5.2002 -5.5 11.4004 -10.5 18.7998 -15\r\n-c-1.2998 -1.60059 -5.7998 -1.5 -10 -1.60059c6.7002 -6.5 15.2998 -9.89941 23.4004 -14.2002c-4 -2.7998 -6.90039 -2.09961 -10 -2.09961c5.7002 -4.7002 15.3994 -7.2002 24.3994 -10c-1.69922 -2.59961 -3.39941 -3.40039 -7.09961 -4.09961zM141.6 292.8\r\n-c-45.5996 7.60059 -83.5996 -19.2002 -82.0996 -67.8994c1.5 -18.6006 98.9004 65.0996 82.0996 67.8994zM38.2002 106c21.5996 -9.5 39.0996 105.3 12.5996 98.2998c-43.8994 -24.5996 -36.2998 -79.5 -12.5996 -98.2998zM129.2 7.7998\r\n-c14.0996 10.4004 6.39941 45.7002 -10.5 65.7002c-19.4004 22.2002 -44.6006 35.4004 -60.9004 25.5996c-10.8994 -8.19922 -12.8994 -36 2.60059 -63.3994c23 -32.6006 55.5 -35.7998 68.7998 -27.9004zM102.8 127.5c24.4004 -15.7998 59.7002 -5.59961 78.7998 22.7998\r\n-c19 28.4004 14.6006 64.2002 -9.89941 80s-59.7998 5.60059 -78.7998 -22.7998s-14.6006 -64.2002 9.89941 -80zM205 -48c28.4004 -0.5 57.7002 24.4004 57.2002 35.4004c-0.100586 11.3994 -32 19.8994 -55.7002 18.8994c-23.5 0.600586 -59.7002 -9.2998 -59.2998 -22\r\n-c-0.400391 -8.59961 28.3994 -33.5 57.7998 -32.2998zM263.9 76.9004v0.599609c-0.200195 29.5996 -26.8008 53.5996 -59.4004 53.4004c-32.5996 -0.200195 -59 -24.3008 -58.7998 -54v-0.600586c0.200195 -29.5996 26.7998 -53.5996 59.3994 -53.3994\r\n-c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4\r\n-c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"redhat\" unicode=\"&#xf7bc;\" horiz-adv-x=\"512\" \r\n-d=\"M341.52 162.59v-0.149414c33.6504 0 82.3408 6.93945 82.3408 47c0.219727 6.73926 0.859375 1.81934 -20.8799 96.2393c-4.62012 19.1504 -8.68066 27.8398 -42.3105 44.6504c-26.0898 13.3398 -82.9199 35.3701 -99.7295 35.3701\r\n-c-15.6602 0 -20.2002 -20.1699 -38.8701 -20.1699c-18 0 -31.3105 15.0596 -48.1201 15.0596c-16.1406 0 -26.6602 -11 -34.7803 -33.6201c-27.5 -77.5498 -26.2803 -74.2695 -26.1201 -78.2695c0 -24.7998 97.6406 -106.11 228.47 -106.11zM429.07 193.19\r\n-l-0.0703125 -0.0302734c4.65039 -22 4.65039 -24.3506 4.65039 -27.25c0 -37.6602 -42.3301 -58.5605 -98 -58.5605c-125.74 -0.0800781 -235.91 73.6504 -235.91 122.33v0.0771484c0 5.65332 1.81836 14.4531 4.05957 19.6436\r\n-c-45.2402 -2.26074 -103.8 -10.3301 -103.8 -62.0303c0 -84.6699 200.63 -189 359.49 -189c121.79 0 152.51 55.0801 152.51 98.5801c0 34.21 -29.5898 73.0498 -82.9297 96.2402z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sketch\" unicode=\"&#xf7c6;\" horiz-adv-x=\"512\" \r\n-d=\"M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z\r\n-M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sourcetree\" unicode=\"&#xf7d3;\" \r\n-d=\"M427.2 245c-0.0947266 -81.5225 -63.1279 -168.031 -140.7 -193.1v-101.601c0 -7.89355 -6.40625 -14.2998 -14.2998 -14.2998v0h-96.4004c-7.89355 0 -14.2998 6.40625 -14.2998 14.2998v101.7c-77.5566 25.0537 -140.5 111.535 -140.5 193.037v0.363281\r\n-c0.200195 112 91.0996 202.8 203.2 202.6c112.1 0 203 -90.9004 203 -203zM155.6 245c0 -91 137.2 -89.9004 137.301 0c0 90.7998 -137.301 90.7998 -137.301 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"suse\" unicode=\"&#xf7d6;\" horiz-adv-x=\"640\" \r\n-d=\"M471.08 345.34c0 1 1.01953 0.759766 0.919922 0.660156c4.2002 -0.599609 92.2002 -13.7002 129.2 -35.2998c12.0996 -6.90039 20.7002 -21.5 34.5 -69.6006c0.700195 -2.7998 -2.7998 -5.09961 -3.60059 -5.69922\r\n-c-26.8994 -18.8008 -56.7998 -36.6006 -145.199 21.6992c11.0996 -26.6992 10.6992 -25.0996 11 -25.5c5.39941 -2.7998 56.2998 -28.6992 81.5996 -28.1992c20.4004 0.399414 42.2002 10.3994 50.9004 15.5996c0 0 4.5 2.7002 3.19922 -2.40039\r\n-c-0.5 -1.89941 -3.2998 -14.5996 -7 -17.6992c-1 -1 -36.5996 -28.4004 -103.1 -28c-42.7002 1 -76.7998 16.3994 -82.4004 -17.4004c-2.7998 -17.0996 6.10059 -37.5 18.9004 -55.7998h-48.5996c-15.9004 28.3994 -23.1006 68.2998 -79.8008 68.2998\r\n-c-51.5996 0 -48.3994 -50.7002 -42.6992 -68.2998h-45.9004c-18.7998 68.7998 -69.2002 98.5996 -102.4 104.3c-74.2998 12.7998 -113 -49.2002 -87 -98.4004c23.1006 -43.5996 81.4004 -44.0996 99.7002 -20.3994c19.2002 25 3.7998 62.8994 -28.5 65.7002\r\n-c-12.2998 1.09961 -25.2998 -4.60059 -25.5 -16.9004v-0.0595703c0 -10.9004 10 -13.8008 12 -14c7.2998 0.399414 8.90039 1.89941 11.7998 2.39941c5.2002 0.900391 16.8008 -1.7998 16.8008 -13.8994c0 -8.40039 -6.80078 -13.1006 -13.3008 -14.9004\r\n-c-4.2373 -1.46777 -11.3154 -2.67773 -15.7998 -2.7002c-17.2002 0 -41.2002 14.7998 -41.5 42.6006c-0.200195 15.6992 7.7002 30 21.6006 39.1992c15.8994 10.5 43.5996 14.1006 69.1992 -1.59961c31.5 -19.2998 39.7002 -57.0996 31.5 -82.9004\r\n-c-11.8994 -37.2998 -45.5996 -57.1992 -90 -53.2998c-31.5 2.7998 -60.6992 19.4004 -78.0996 44.4004c-6.32715 9.0332 -13.7197 25.0264 -16.5 35.7002c-7.12012 28.0596 0 58.0596 5.48047 71.3994c25.6992 63.6006 80.1992 97.2998 99.5996 109.7\r\n-c100.2 61.5996 171.1 59.0996 223 57.2998c61.2998 -2.2002 126.6 -23.2998 135.7 -26.2998c0 2 0.299805 20.2998 0.299805 20.2998zM531.48 272.54c-1.10059 -33.5 39.0996 -51.5996 63.2998 -28.9004c24.3994 22.9004 9 64 -24.4004 65.2002\r\n-c-0.380859 0.0136719 -0.999023 0.0253906 -1.37988 0.0253906c-20.0615 0 -36.8711 -16.2734 -37.5195 -36.3252zM570.08 297.84c14.0312 -0.413086 25.4199 -12.1406 25.4199 -26.1787c0 -0.282227 -0.00878906 -0.739258 -0.0195312 -1.02148\r\n-c-0.50293 -13.9795 -12.2646 -25.3262 -26.2539 -25.3262c-14.501 0 -26.2695 11.7695 -26.2695 26.2705s11.7686 26.2695 26.2695 26.2695c0.236328 0 0.618164 -0.00585938 0.853516 -0.0136719zM574.38 269.04c15.4004 0 15.4004 15.5996 0 15.5996\r\n-c-15.3994 0 -15.3994 -15.5996 0 -15.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ubuntu\" unicode=\"&#xf7df;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM300.7 347c-8.7998 -15.2002 -3.60059 -34.7002 11.7002 -43.5996c15.1992 -8.80078 34.6992 -3.5 43.5 11.6992c8.7998 15.3008 3.59961 34.8008 -11.7002 43.6006\r\n-c-15.2002 8.7998 -34.7002 3.5 -43.5 -11.7002zM87.4004 160.1c17.5996 0 31.8994 14.3008 31.8994 31.9004s-14.2998 31.9004 -31.8994 31.9004c-17.6006 0 -31.9004 -14.3008 -31.9004 -31.9004s14.2998 -31.9004 31.9004 -31.9004zM115.5 157\r\n-c8.7002 -32.7002 29.0996 -60.7002 56.5 -79l23.7002 39.5996c-51.5 36.3008 -51.5 112.5 0 148.801l-23.7002 39.5996c-27.4004 -18.4004 -47.9004 -46.2998 -56.5 -79.0996c22.4004 -18 22.2998 -52 0 -69.9004zM344.2 25.2998\r\n-c15.2998 8.7998 20.5 28.2998 11.7002 43.6006c-8.80078 15.2998 -28.3008 20.5 -43.5 11.6992c-15.3008 -8.7998 -20.5 -28.2998 -11.7002 -43.5996s28.2002 -20.5 43.5 -11.7002zM344.5 94.7998c23 22.9004 38 53.9004 40.2998 88.4004l-46.0996 0.700195\r\n-c-5.5 -62.7002 -71.9004 -100.9 -128.9 -74.4004l-22.5 -40.2998c47.7998 -23.7002 91.5 -10.7998 96.7002 -9.40039c4.40039 28.4004 33.7998 45.2998 60.5 35zM338.6 200.1l46 0.600586c-2.19922 34.5996 -17.0996 65.5996 -40.1992 88.5\r\n-c-26.7002 -10.2998 -56.1006 6.7002 -60.5 35c-5.2002 1.39941 -48.8008 14.2998 -96.7002 -9.40039l22.5 -40.2998c57.5996 26.7998 123.5 -12.4004 128.899 -74.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ups\" unicode=\"&#xf7e0;\" horiz-adv-x=\"384\" \r\n-d=\"M103.2 145v123h32.5996v-141.6c-17.7002 -12.1006 -97.8994 -35.9004 -97.8994 39v102.6h32.6992v-104c0 -32.0996 27.4004 -22.5996 32.6006 -19zM4 373.18c93.5996 49.6006 259.1 61.6006 375.4 0v-220.899c0 -103.9 -75.3008 -135.2 -187.7 -184.101\r\n-c-112.8 48.9004 -187.7 80.4004 -187.7 184.101v220.899zM362.1 152.28v216.2c-109.3 10.1992 -238.6 4 -340.899 -89.8008v-126.399c0 -86.6006 53 -113.5 170.5 -165.3c117.2 51.6992 170.399 78.6992 170.399 165.3zM152.5 259.68\r\n-c23.7002 15.3203 104.4 31.8008 104.4 -65.5996c0 -75.9004 -47.3008 -85.7998 -71.7002 -78.5v-68.7002h-32.7002v212.8zM185.2 142.38c2 -0.799805 38.3994 -16.8994 38.3994 51c0 62 -30 53.5 -38.3994 49.2998v-100.3zM264.3 228.78\r\n-c-0.200195 41.0996 51.2002 53.8994 79.7002 31.8994v-28.3994c-17.9004 18.2998 -47.9004 18.0996 -48.5 -2.2002c-0.700195 -26.5996 55.0996 -21.7002 53.4004 -73.2002c-1.30078 -41.5996 -47 -55 -83.2002 -33.5v30.1006\r\n-c20.3994 -18.1006 51.3994 -18.6006 50.7998 4.89941c-0.599609 27.9004 -52.0996 23.1006 -52.2002 70.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"usps\" unicode=\"&#xf7e1;\" horiz-adv-x=\"576\" \r\n-d=\"M460.3 206.3c-1.39941 -2.2002 -4.2998 -4.39941 -3.7998 0.100586c2.90039 11.5996 13.9004 30.5 4.40039 32c-17.8008 3.09961 -88.1006 -4.5 -88.1006 0c0 2.39941 26.7002 3.09961 37.9004 8.69922c9.39941 9.40039 10.7998 8 10.8994 8h27\r\n-c26.9004 0 37.5 -7.5 11.7002 -48.7998zM348.2 183.7c-62.2998 -21.2002 -124.8 -54.2002 -321.2 -151.5l52.4004 245.5c185 0 335.199 5.59961 337.899 -22.6006h-196.6l30.7002 -93.2998c35 16.7998 120.899 51.7002 172.6 53.9004\r\n-c21.7998 0.799805 30.5996 -2.90039 26.2002 -5.7998c-4.7002 -2.30078 -38 -4.90039 -102 -26.2002zM94.7002 352h454.3l-67.7002 -319.7h-423.1s402 157.3 406.399 160.2c0 0 35.7002 48 14.6006 67.7002c-6.5 6.59961 -16 6.59961 -52.4004 6.59961\r\n-c-2.09961 19.5 -78.7998 31.5 -332.1 85.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yarn\" unicode=\"&#xf7e3;\" horiz-adv-x=\"496\" \r\n-d=\"M393.9 102.8c-39 -9.2998 -48.4004 -32.0996 -104 -47.3994c0 0 -2.7002 -4 -10.4004 -5.80078c-13.4004 -3.2998 -63.9004 -6 -68.5 -6.09961c-12.4004 -0.0996094 -19.9004 3.2002 -22 8.2002c-6.40039 15.2998 9.2002 22 9.2002 22\r\n-c-8.10059 5 -9 9.89941 -9.7998 8.09961c-2.40039 -5.7998 -3.60059 -20.0996 -10.1006 -26.5c-8.7998 -8.89941 -25.5 -5.89941 -35.2998 -0.799805c-10.7998 5.7002 0.799805 19.2002 0.799805 19.2002s-5.7998 -3.40039 -10.5 3.59961\r\n-c-6 9.2998 -17.0996 37.2998 11.5 62c-1.2998 10.1006 -4.59961 53.7002 40.6006 85.6006c0 0 -20.6006 22.7998 -12.9004 43.2998c5 13.3994 7 13.2998 8.59961 13.8994c5.7002 2.2002 11.3008 4.60059 15.4004 9.10059c20.5996 22.2002 46.7998 18 46.7998 18\r\n-s12.4004 37.7998 23.9004 30.3994c3.5 -2.2998 16.2998 -30.5996 16.2998 -30.5996s13.5996 7.90039 15.0996 5c8.2002 -16 9.2002 -46.5 5.60059 -65.0996c-6.10059 -30.6006 -21.4004 -47.1006 -27.6006 -57.5c-1.39941 -2.40039 16.5 -10 27.8008 -41.3008\r\n-c10.3994 -28.5996 1.09961 -52.6992 2.7998 -55.2998c0.799805 -1.39941 13.7002 -0.799805 36.3994 13.2002c12.8008 7.90039 28.1006 16.9004 45.4004 17c16.7002 0.5 17.5996 -19.2002 4.90039 -22.2002zM496 192c0 -136.9 -111.1 -248 -248 -248s-248 111.1 -248 248\r\n-s111.1 248 248 248s248 -111.1 248 -248zM416.7 116.8c-1.7002 13.6006 -13.2002 23 -28 22.7998c-22 -0.299805 -40.5 -11.6992 -52.7998 -19.1992c-4.80078 -3 -8.90039 -5.2002 -12.4004 -6.80078c3.09961 44.5 -22.5 73.1006 -28.7002 79.4004\r\n-c7.7998 11.2998 18.4004 27.7998 23.4004 53.2002c4.2998 21.7002 3 55.5 -6.90039 74.5c-1.59961 3.09961 -7.39941 11.2002 -21 7.39941c-9.7002 20 -13 22.1006 -15.5996 23.8008c-1.10059 0.699219 -23.6006 16.3994 -41.4004 -28\r\n-c-12.2002 -0.900391 -31.2998 -5.30078 -47.5 -22.8008c-2 -2.19922 -5.89941 -3.7998 -10.0996 -5.39941h0.0996094c-8.39941 -3 -12.2998 -9.90039 -16.8994 -22.2998c-6.5 -17.4004 0.199219 -34.6006 6.7998 -45.7002c-17.7998 -15.9004 -37 -39.7998 -35.7002 -82.5\r\n-c-34 -36 -11.7998 -73 -5.59961 -79.6006c-1.60059 -11.0996 3.69922 -19.3994 12 -23.7998c12.5996 -6.7002 30.2998 -9.59961 43.8994 -2.7998c4.90039 -5.2002 13.7998 -10.0996 30 -10.0996c6.7998 0 58 2.89941 72.6006 6.5c6.7998 1.59961 11.5 4.5 14.5996 7.09961\r\n-c9.7998 3.09961 36.7998 12.2998 62.2002 28.7002c18 11.7002 24.2002 14.2002 37.5996 17.3994c12.9004 3.2002 21 15.1006 19.4004 28.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"airbnb\" unicode=\"&#xf834;\" \r\n-d=\"M224 74.8799h0.0595703c24.71 31.1797 39.5508 58.9297 45 83.1797c22.5508 88 -112.609 88 -90.0596 0c4.91992 -23.75 19.7598 -51.5098 45 -83.1797zM362.15 1.65039c35.6396 15.3496 50.1797 53.5693 37.0098 86.6396\r\n-c-25.4902 61.6104 -78.8398 168.47 -114.84 239.09c-16.9707 33.9297 -28.0303 59.8701 -60.3701 59.8701c-33.8203 0 -43.6299 -27.3301 -59.3799 -57.4004c-4.15039 -10.3799 -100.771 -202.399 -115.87 -241.56c-17.8105 -50.0303 21.2998 -98.5205 71.2998 -91.0898\r\n-c24.5996 2.22949 52.6201 18.8701 85.1504 54.9199c-29.2002 37.1104 -47.5 70.3096 -54.4307 99.5c-11.8799 53.9902 18.3604 100.5 73.2803 100.5c64.96 0 122.75 -69.9297 18.8496 -200c35.6309 -39.5898 77.2402 -68.7803 119.301 -50.4697zM409.15 137.77\r\n-c0 -0.679688 16.8496 -35.6895 16.8301 -39.5791c25.2393 -69.3301 -26.7207 -130.24 -89.6104 -130.19c-11.1104 0 -53.6904 -1.37988 -112.37 62.4004c-51.7598 -56.3408 -90.6602 -62.4004 -112.37 -62.4004c-62.8896 0 -114.85 60.8604 -89.6299 130.19\r\n-c0.889648 2.61914 11.1797 32.71 117.34 245.02c19.79 41.1201 39.1406 72.79 84.6602 72.79c49.1299 0 56.2695 -3.92969 185.15 -278.23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battle-net\" unicode=\"&#xf835;\" horiz-adv-x=\"512\" \r\n-d=\"M448.61 222.38c60.75 -36.25 71.9893 -73.8096 57.3193 -93.6895c-4.70996 -6.88086 -25.1797 -36.2402 -148 -31.6406c-21.8193 -30.3994 -45.25 -53.2695 -67.4697 -69.2695c28.54 -53.7803 54.2998 -85.0303 62.54 -91.7803c0 0 -3.44043 0.160156 -8.58008 3.37012\r\n-c-2.69434 1.61133 -6.61426 4.78809 -8.75 7.08984c-15.6299 16.1797 -35.5195 41.9404 -55.7002 74.1201c-43.9502 -28.1104 -81.1299 -29.0996 -88.4395 -9.4502c-4.83984 10.8301 1.5293 26.5 9.05957 39.3398c-31.3203 -17.5098 -61.7002 -26.8496 -86.7002 -21.1396\r\n-c-6.79004 1.54004 -17.6299 5.50977 -23.1992 18.2598c-4.52051 9.53027 -6.02051 24.2598 -0.150391 47.1406c9.07031 35.3398 37.5801 82.2998 47.3096 97.6992c3.75 -8.62988 -20.7793 40.1904 -26 93.1904c-89.1592 0 -110.56 -8.83984 -111.56 -9.21973\r\n-c1.54004 2.44922 7.86035 7.26953 17.7598 9.71973c22 5.47949 54.6406 9.84961 93 11.2295c-2.38965 52.0703 15.3398 84.7705 36 81.29h0.180664c11.3291 -1.2998 21.2598 -13.5801 28.5 -25.9297c0.669922 35.2002 7.7998 65.54 25 84.0703\r\n-c4.72949 5.14941 13.5693 12.5498 27.3994 11h0.0498047c10.5205 -0.850586 24 -6.91992 40.8398 -23.4707c25.6006 -25.0693 51.54 -71.9893 60.4805 -88.9297c37.25 -3.7002 68.7695 -12.5801 93.7695 -23.7998c32.3506 51.5898 46.4805 89.5303 48.2002 100.05\r\n-c0.640625 -1.25 2.93066 -8.41992 -0.450195 -20.25c-6.22949 -21.6201 -18.5791 -51.7197 -36.3398 -85.2998c45.79 -23.7305 65.3203 -55.0098 52.8506 -71.3301c-3.35059 -4.94043 -12.0498 -12.5498 -38.9199 -12.3701zM370.76 116.16\r\n-c70.4102 4.37988 79.6504 20.5703 78.5098 33.5c-1.87988 21.25 -21.1992 41.2598 -49.0596 58.8301c0.889648 -24.5605 -5.63965 -54.6201 -29.4502 -92.3301zM216.9 60.3096c-19.04 -30.46 9.19922 -39.5596 49.7998 -17.6992\r\n-c-7 12.0898 -13.9199 24.8594 -20.6006 38.1895c-9.66992 -7.37012 -19.4395 -14.2598 -29.1992 -20.4902zM431.9 231.66c36.2598 -1.23047 29.4199 27.8496 -9.64062 51.9502c-5.9707 -10.373 -16.1582 -26.9043 -22.7402 -36.9004\r\n-c11.2207 -4.70996 22.0908 -9.70996 32.3809 -15.0498zM279.18 50c28.3799 18.2002 60.1689 48.1201 84.7695 85.4297c18.46 27.96 26.1494 56.0205 25.4102 79.5703c-30.5801 17.3203 -89.3604 42.7197 -167.23 57.21c0.350586 18.4805 2.08984 19.8799 2.16016 20.3301\r\n-c10.9229 -1.33496 28.5693 -4.04492 39.3896 -6.0498c32.5664 -6.08984 84.2383 -20.2959 115.34 -31.71c-15.6191 33.1494 -41.4092 47.2197 -41.5195 47.2197c1.59961 0.160156 28.1299 -6 48.8604 -43.7197c8.42676 11.2061 16.2031 22.0293 23.3301 32.4697\r\n-c-29.96 15.46 -71.75 28.04 -116.32 30.71c-33.4502 1.99023 -61.6299 -5.38965 -81.6299 -17.8096c0.240234 -35.2607 7.66992 -98.96 34 -173.431c-16.8301 -9.12988 -17.7402 -7.87012 -18.6699 -8.25c-17.1924 40.7627 -37.2041 109.235 -44.6699 152.84\r\n-c-21.0908 -30.3994 -20.1406 -59.5 -20.1406 -59.5693c-0.919922 1.22949 -8.81934 27.4297 13.4707 64.2295c-13.5801 1.70996 -26.5508 2.9707 -38.8506 3.87988c1.57031 -33.6797 11.5703 -76.1494 31.5703 -116.069c14.8701 -29.71 35.1201 -50.3105 55.71 -61.4902\r\n-c30.4102 17.9199 81.0498 55.6504 132.75 115.92c14.9697 -9 16.1494 -11.71 16.5098 -12c-7.91309 -10.5332 -16.2227 -20.9033 -24.9287 -31.1104c-21.542 -25.1426 -59.6494 -62.7744 -85.0605 -84c37.5303 -3.38965 62.5303 12.1807 62.5303 12.25\r\n-c-0.860352 -1.67969 -20.0303 -21.6797 -63.2803 -20.4092c5.5 -12.9404 10.9902 -25.0908 16.5 -36.4404zM306.579 337c-1.58008 2.4502 -39.5801 58.8496 -56.4805 54.6104c-16.8994 1.09961 -36.21 -22.9805 -38.21 -75.2803\r\n-c21.1104 13.2402 50.1299 22.3301 94.6904 20.6699zM175.929 333.9c-3.7998 6.68945 -8.66992 12.4795 -14.4297 13.5693h-0.0898438c-24.79 1.41016 -24.75 -52.8301 -24.6699 -49.5898c13.6602 -0.00976562 27.8496 -0.410156 42.3994 -1.25977\r\n-c-1.62012 12.6602 -2.72949 25.1699 -3.20996 37.2803zM147.869 171.9c-30.7998 -61.5098 -19.8701 -76.6104 -19.6699 -76.8203c7.38965 -15.4902 38.1299 -20.25 84.9199 4.50977c-21.9502 11.7402 -44.4902 32.6104 -65.25 72.3105zM357.929 97.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bootstrap\" unicode=\"&#xf836;\" \r\n-d=\"M292.3 136.07c0 -42.4102 -39.7197 -41.4307 -43.9199 -41.4307h-80.8896v81.6904h80.8896c42.5605 0 43.9199 -31.9004 43.9199 -40.2598zM242.15 209.2h-74.6602v72.1797h74.6602c34.9297 0 38.4395 -20.3496 38.4395 -35.8701\r\n-c0 -37.3096 -37.7695 -36.3096 -38.4395 -36.3096zM448 341.33v-298.66c-0.120117 -41.0977 -33.5723 -74.5498 -74.6699 -74.6699h-298.66c-41.0977 0.120117 -74.5498 33.5723 -74.6699 74.6699v298.66c0.120117 41.0977 33.5723 74.5498 74.6699 74.6699h298.66\r\n-c41.0977 -0.120117 74.5498 -33.5723 74.6699 -74.6699zM338.05 130.14c0 21.5703 -6.64941 58.29 -49.0498 67.3506v0.729492c22.9102 9.78027 37.3398 28.25 37.3398 55.6406c0 7 2 64.7793 -77.5996 64.7793h-127v-261.33c128.229 0 139.87 -1.67969 163.6 5.70996\r\n-c14.21 4.4209 52.71 17.9805 52.71 67.1201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"buffer\" unicode=\"&#xf837;\" \r\n-d=\"M427.84 67.3301l-196.5 -97.8203c-1.93848 -0.832031 -5.22461 -1.50684 -7.33496 -1.50684c-2.10938 0 -5.39551 0.674805 -7.33496 1.50684l-196.51 97.8203c-4 2 -4 5.28027 0 7.29004l47.0596 23.3799c1.94238 0.832031 5.23242 1.50684 7.3457 1.50684\r\n-c2.1123 0 5.40234 -0.674805 7.34473 -1.50684l134.76 -67c1.93848 -0.836914 5.22461 -1.51562 7.33496 -1.51562c2.11133 0 5.39746 0.678711 7.33496 1.51562l134.76 67c1.94043 0.832031 5.22949 1.50781 7.34082 1.50781s5.39941 -0.675781 7.33984 -1.50781\r\n-l47.0596 -23.4297c4.0498 -1.95996 4.0498 -5.24023 0 -7.24023zM427.84 203.86c4.0498 -2.01074 4.0498 -5.29004 0 -7.31055l-196.5 -97.7998c-1.93848 -0.832031 -5.22461 -1.50781 -7.33496 -1.50781c-2.10938 0 -5.39551 0.675781 -7.33496 1.50781l-196.51 97.7998\r\n-c-4 2.02051 -4 5.31055 0 7.31055l47.0596 23.4297c1.94238 0.832031 5.23242 1.50684 7.3457 1.50684c2.1123 0 5.40234 -0.674805 7.34473 -1.50684l134.76 -67.0801c1.93945 -0.828125 5.22559 -1.5 7.33496 -1.5s5.39551 0.671875 7.33496 1.5l134.76 67.0801\r\n-c1.94043 0.832031 5.22949 1.50781 7.34082 1.50781s5.39941 -0.675781 7.33984 -1.50781zM20.1602 317.58c-4.0498 1.86035 -4.0498 4.88965 0 6.74023l196.5 90.2793c1.9502 0.774414 5.23633 1.40332 7.33496 1.40332s5.38477 -0.628906 7.33496 -1.40332\r\n-l196.51 -90.2793c4 -1.85059 4 -4.87988 0 -6.74023l-196.51 -90.29c-1.95215 -0.765625 -5.23828 -1.3877 -7.33496 -1.3877s-5.38281 0.62207 -7.33496 1.3877z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chromecast\" unicode=\"&#xf838;\" horiz-adv-x=\"512\" \r\n-d=\"M447.83 384h0.169922c23.5811 0 42.7197 -19.1387 42.7197 -42.7197v-298.561c0 -23.5811 -19.1387 -42.7197 -42.7197 -42.7197v0h-149.36v42.7197h149.19v298.561h-383.83v-63.9199h-42.7197v63.9199c0 23.5811 19.1387 42.7197 42.7197 42.7197h383.83z\r\n-M21.2803 64.4199c35.2783 0 63.9102 -28.6318 63.9102 -63.9102v-0.00976562h-63.9102v63.9199zM21.2803 149.7l0.0292969 -0.339844h0.330078c82.248 -0.105469 149 -66.9424 149 -149.19v-0.169922h-42.7197v0.339844v0.0302734c0 58.8594 -47.7705 106.63 -106.63 106.63\r\n-h-0.00976562v42.7002zM21.2803 234.97v-0.330078c129.46 -0.370117 234.34 -105.18 234.8 -234.64h-42.7197v0.5c-0.0800781 106 -86.0801 191.85 -192.08 191.75v42.7197z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"evernote\" unicode=\"&#xf839;\" horiz-adv-x=\"384\" \r\n-d=\"M120.82 315.79c1.59961 -22.3096 -17.5508 -21.5898 -21.6104 -21.5898c-68.9297 0 -73.6396 1 -83.5801 -3.33984c-0.55957 -0.220703 -0.740234 0 -0.370117 0.370117l108.53 110.319c0.379883 0.370117 0.599609 0.219727 0.379883 -0.370117\r\n-c-4.34961 -9.98926 -3.34961 -15.0898 -3.34961 -85.3896zM199.82 7.79004c-14.6807 37.0801 13 76.9297 52.5195 76.6201c17.4902 0 22.6006 -23.21 7.9502 -31.4199c-6.19043 -3.2998 -24.9502 -1.74023 -25.1396 -19.2002\r\n-c-0.0507812 -17.0898 19.6699 -25 31.1992 -24.8896h0.0107422c25.1934 0 45.6396 20.4463 45.6396 45.6396v0.00976562v0.0800781c0 11.6299 -7.79004 47.2197 -47.54 55.3398c-7.71973 1.54004 -65 6.35059 -68.3496 50.5205\r\n-c-3.74023 -16.9307 -17.4004 -63.4902 -43.1104 -69.0898c-8.74023 -1.94043 -69.6797 -7.64062 -112.92 36.7695c0 0 -18.5703 15.2305 -28.2305 57.9502c-3.37988 15.75 -9.2793 39.7002 -11.1396 62c0 18 11.1396 30.4502 25.0703 32.2002c81 0 90 -2.32031 101 7.7998\r\n-c9.81934 9.24023 7.7998 15.5 7.7998 102.78c1 8.2998 7.79004 30.8096 53.4102 24.1396c6 -0.860352 31.9102 -4.17969 37.4795 -30.6396l64.2607 -11.1504c20.4297 -3.70996 70.9395 -7 80.5996 -57.9404c22.6602 -121.09 8.91016 -238.46 7.7998 -238.46\r\n-c-15.9795 -114.38 -111.07 -108.85 -111.07 -108.85c-18.9492 0.230469 -54.25 9.40039 -67.2695 39.8301zM280.76 212.63c-1 -1.91992 -2.2002 -6 0.850586 -7c14.0898 -4.92969 39.75 -6.83984 45.8799 -5.53027c3.10938 0.25 3.0498 4.43066 2.47949 6.65039\r\n-c-3.5293 21.8496 -40.8301 26.5 -49.2393 5.91992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"itch-io\" unicode=\"&#xf83a;\" horiz-adv-x=\"512\" \r\n-d=\"M71.9199 413.23c19.2197 1.66992 114.32 2.76953 184.08 2.76953s116.56 -0.400391 184 -2.73047c21.7197 -12.9297 64.5195 -62.0996 64.9199 -75v-21.3398c0 -27.0596 -25.25 -50.8398 -48.25 -50.8398c-27.54 0 -50.54 22.8799 -50.54 50\r\n-c0 -27.1494 -22.2295 -50 -49.7598 -50s-49 22.8799 -49 50c0 -27.1494 -23.5898 -50 -51.1602 -50h-0.5c-27.5703 0 -51.1602 22.8799 -51.1602 50c0 -27.1494 -21.4199 -50 -49 -50s-49.7598 22.8799 -49.7598 50c0 -27.1494 -22.9697 -50 -50.54 -50\r\n-c-22.96 0 -48.25 23.7803 -48.25 50.8398v21.3398c0.400391 12.8906 43.2002 62.0605 64.9199 74.9609zM204.24 278.84c9.14844 -15.9902 31.5527 -28.9785 49.9746 -28.9785c0.498047 0 1.30664 0.0126953 1.80469 0.0283203c28.7109 0 44.6602 16.4502 51.7607 28.9404\r\n-c22 -38.3398 77.8496 -38.7598 99.8496 -0.240234c13.1201 -23.0596 43.0801 -32.0996 56 -27.6602c3.57031 -37.1494 13.9004 -236.88 -17.75 -269.149c-77.6797 -18.1201 -299.76 -18.6699 -379.76 0c-31.4004 32.0195 -21.6006 229 -17.7305 269.149\r\n-c12.8301 -4.41016 42.8301 4.52051 56 27.6602c21.9502 -38.46 77.8506 -38.1494 99.8506 0.25zM162.66 225.07l-0.0205078 -0.0703125c-52.3193 0 -65.21 -77.4502 -83.8799 -144.45c-17.2598 -62.1494 5.52051 -63.6699 33.9404 -63.7295\r\n-c42.1494 1.56934 65.4902 32.1797 65.4902 62.79c53.6191 -8.79004 116.3 -6.43066 155.55 0c0 -30.6104 23.3398 -61.2207 65.4902 -62.79c28.4297 0.0595703 51.21 1.58008 33.9492 63.7295c-18.6494 66.9199 -31.54 144.45 -83.8701 144.45\r\n-c-16.46 0 -31.0898 0 -49.25 -19.71c-12.1377 1.23145 -31.8896 2.23047 -44.0898 2.23047c-12.1992 0 -31.9521 -0.999023 -44.0898 -2.23047c-18.1299 19.7803 -32.75 19.7803 -49.2197 19.7803zM256 177.21l-0.0595703 -0.00976562s44.3496 -40.7598 52.3496 -55.2402\r\n-l-29 1.16992v-25.2803c0 -1.15918 -11.6602 -0.699219 -23.3096 -0.15918c-1.99023 0 -23.3301 -1.39062 -23.3301 0.15918v25.3203l-29 -1.16992c7.96973 14.4404 52.3496 55.21 52.3496 55.21z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"salesforce\" unicode=\"&#xf83b;\" horiz-adv-x=\"640\" \r\n-d=\"M248.89 202.36h-26.3496c0.69043 5.15918 3.32031 14.1201 13.6396 14.1201c6.75 0 11.9707 -3.82031 12.71 -14.1201zM385.55 216.24c0.450195 0 14.1104 1.75977 14.1104 -20c0 -6.45996 -1.11035 -20 -14.1104 -20c-0.479492 0 -14.1094 -1.77051 -14.1094 20\r\n-c0 21.7695 13.6396 20 14.1094 20zM142.33 192.48c4.2002 3.60938 15.6104 2.71973 20.9297 1.64941v-16.9395c-5.85938 -1.1709 -16.2295 -2.75 -20.9297 0.949219c-1.20996 1 -3.29004 2.27051 -3.29004 7.05078\r\n-c-0.0078125 0.137695 -0.0146484 0.361328 -0.0146484 0.499023c0 2.31738 1.48047 5.36035 3.30469 6.79102zM640 216c0 -87.5801 -80 -154.39 -165.36 -136.43c-18.3701 -33 -70.7295 -70.75 -132.199 -41.6299c-41.1602 -96.0508 -177.891 -92.1807 -213.811 5.16992\r\n-c-119.72 -23.8906 -178.82 138.37 -75.2695 199.279c-34.75 79.4307 22.6396 173.61 114.31 173.61c33.834 -0.0214844 77.9883 -21.8389 98.5605 -48.7002c20.6992 21.4004 49.3994 34.8105 81.1494 34.8105c42.3398 0 79 -23.5205 98.7998 -58.5703\r\n-c92.8203 40.6797 193.82 -28.2305 193.82 -127.54zM120.45 184.2c0 11.7598 -11.6904 15.1699 -17.8701 17.1699c-5.27051 2.11035 -13.4102 3.50977 -13.4102 8.93945c0 9.45996 17 6.66016 25.1699 2.12012c0 0 1.16992 -0.709961 1.64062 0.470703\r\n-c0.239258 0.699219 2.35938 6.58008 2.58984 7.29004c0.0292969 0.0927734 0.0537109 0.24707 0.0537109 0.34375c0 0.441406 -0.337891 0.918945 -0.753906 1.06543c-12.3301 7.63086 -40.7002 8.51074 -40.7002 -12.6992c0 -12.46 11.4902 -15.4404 17.8799 -17.1699\r\n-c4.71973 -1.58008 13.1699 -3 13.1699 -8.7002c0 -4 -3.5293 -7.06055 -9.16992 -7.06055c-5.82617 0.00976562 -14.3379 2.85449 -19 6.35059c-0.469727 0.229492 -1.41992 0.709961 -1.64941 -0.709961l-2.40039 -7.4707\r\n-c-0.469727 -0.939453 0.230469 -1.17969 0.230469 -1.40918c1.75 -1.40039 10.2998 -6.59082 22.8193 -6.59082c13.1699 0 21.4004 7.06055 21.4004 18.1104v-0.0498047zM152.45 226.78c-10.1299 0 -18.6602 -3.16992 -21.4004 -5.18066\r\n-c-0.237305 -0.164062 -0.430664 -0.532227 -0.430664 -0.822266c0 -0.178711 0.0859375 -0.442383 0.19043 -0.586914l2.59082 -7.06055c0.114258 -0.399414 0.544922 -0.723633 0.960938 -0.723633c0.0605469 0 0.15918 0.0107422 0.21875 0.0234375\r\n-c0.650391 0 6.7998 4 16.9297 4c4 0 7.06055 -0.709961 9.18066 -2.35938c3.59961 -2.80078 3.05957 -8.29004 3.05957 -10.5801c-4.79004 0.299805 -19.1104 3.43945 -29.4102 -3.75977c-4.05762 -2.7832 -7.34961 -9.03418 -7.34961 -13.9541\r\n-c0 -0.162109 0.00390625 -0.424805 0.00976562 -0.585938c0 -5.90039 1.50977 -10.4004 6.58984 -14.3506c12.2402 -8.16016 36.2803 -2 38.1006 -1.41016c1.5791 0.320312 3.5293 0.660156 3.5293 1.87988v33.8809c0.0400391 4.60938 0.320312 21.6396 -22.7793 21.6396z\r\n-M199 247.76c0.000976562 0.0205078 0.00195312 0.0527344 0.00195312 0.0722656c0 0.613281 -0.49707 1.11035 -1.10938 1.11035c-0.0205078 0 -0.0527344 -0.000976562 -0.0722656 -0.00195312h-9.82031\r\n-c-0.0175781 0.000976562 -0.0449219 0.000976562 -0.0625 0.000976562c-0.612305 0 -1.10938 -0.49707 -1.10938 -1.10938c0 -0.0205078 0.000976562 -0.0527344 0.00195312 -0.0722656v-79c-0.000976562 -0.0195312 -0.00195312 -0.0517578 -0.00195312 -0.0712891\r\n-c0 -0.613281 0.49707 -1.11035 1.10938 -1.11035c0.0175781 0 0.0449219 0.000976562 0.0625 0.00195312h9.87988c0.0205078 -0.000976562 0.0527344 -0.00195312 0.0722656 -0.00195312c0.613281 0 1.11035 0.49707 1.11035 1.10938\r\n-c0 0.0205078 -0.000976562 0.0527344 -0.00292969 0.0722656zM254.75 218.83c-2.09961 2.30957 -6.79004 7.53027 -17.6504 7.53027c-3.50977 0 -14.1592 -0.230469 -20.6992 -8.94043c-6.35059 -7.62988 -6.58008 -18.1104 -6.58008 -21.4102\r\n-c0 -3.12012 0.149414 -14.2598 7.05957 -21.1699c2.63965 -2.91016 9.06055 -8.22949 22.8105 -8.22949c10.8193 0 16.4697 2.34961 18.5791 3.75977c0.470703 0.240234 0.710938 0.709961 0.240234 1.87988l-2.34961 6.83008\r\n-c-0.1875 0.402344 -0.699219 0.728516 -1.14258 0.728516c-0.0751953 0 -0.194336 -0.0126953 -0.267578 -0.0283203c-2.58984 -0.94043 -6.34961 -2.82031 -15.29 -2.82031c-17.4199 0 -16.8496 14.7402 -16.9404 16.7002h37.1709\r\n-c0.522461 0.0107422 1.04688 0.431641 1.16992 0.939453c-0.290039 0 2.06934 14.7002 -6.09082 24.2305h-0.0195312zM291.44 166.14c13.1699 0 21.4092 7.06055 21.4092 18.1104c0 11.7598 -11.6992 15.1699 -17.8799 17.1699\r\n-c-4.13965 1.66016 -13.4102 3.37988 -13.4102 8.94043c0 3.75977 3.29004 6.34961 8.4707 6.34961c4.87988 -0.0976562 12.3613 -1.99316 16.7002 -4.22949c4.33789 -2.2373 1.17969 -0.710938 1.64941 0.469727c0.230469 0.700195 2.35059 6.58008 2.58008 7.29004\r\n-c0.0292969 0.0927734 0.0537109 0.24707 0.0537109 0.34375c0 0.441406 -0.337891 0.918945 -0.753906 1.06641c-7.91016 4.89941 -16.7402 4.93945 -20.2295 4.93945c-12 0 -20.46 -7.29004 -20.46 -17.6396c0 -12.46 11.4795 -15.4404 17.8701 -17.1699\r\n-c6.10938 -2 13.1699 -3.26074 13.1699 -8.7002c0 -4 -3.52051 -7.06055 -9.16992 -7.06055c-5.82617 0.0126953 -14.3379 2.85742 -19 6.35059c-0.155273 0.132812 -0.447266 0.241211 -0.651367 0.241211c-0.526367 0 -0.973633 -0.426758 -0.999023 -0.951172\r\n-l-2.34961 -7.52051c-0.470703 -0.939453 0.229492 -1.17969 0.229492 -1.40918c1.71973 -1.40039 10.3301 -6.59082 22.79 -6.59082h-0.0195312zM357.09 224c0 0.709961 -0.240234 1.17969 -1.17969 1.17969h-11.7598c0 0.140625 0.939453 8.94043 4.46973 12.4707\r\n-c4.16016 4.14941 11.7598 1.63965 12 1.63965c1.16992 -0.469727 1.41016 0 1.63965 0.469727l2.83008 7.77051c0.700195 0.939453 0 1.16992 -0.240234 1.41016c-5.08984 2 -17.3496 2.86914 -24.46 -4.24023c-5.47949 -5.48047 -7 -13.9199 -8 -19.5205h-8.46973\r\n-c-0.600586 -0.0498047 -1.125 -0.578125 -1.16992 -1.17969l-1.41992 -7.75977c0 -0.700195 0.240234 -1.16992 1.17969 -1.16992h8.23047c-8.50977 -47.9004 -8.75 -50.21 -10.3506 -55.5205c-1.08008 -3.62012 -3.29004 -6.89941 -5.87988 -7.75977\r\n-c-0.0898438 0 -3.87988 -1.67969 -9.63965 0.240234c0 0 -0.94043 0.469727 -1.41016 -0.709961c-0.240234 -0.709961 -2.58984 -6.82031 -2.83008 -7.53027s0 -1.41016 0.469727 -1.41016c5.11035 -2 13 -1.76953 17.8809 0\r\n-c6.2793 2.28027 9.71973 7.88965 11.5293 12.9404c2.75 7.70996 2.81055 9.79004 11.7598 59.7393h12.2305c0.601562 0.0498047 1.13086 0.578125 1.17969 1.18066zM410.48 208c-0.560547 1.67969 -5.10059 18.1104 -25.1709 18.1104c-15.25 0 -23 -10 -25.1592 -18.1104\r\n-c-1 -3 -3.18066 -14 0 -23.5195c0.0898438 -0.300781 4.40918 -18.1201 25.1592 -18.1201c14.9502 0 22.9004 9.60938 25.1709 18.1201c3.20996 9.60938 1.00977 20.5195 0 23.5195zM455.88 224.7c-5 1.64941 -16.6201 1.89941 -22.1104 -5.41016v4.46973\r\n-c0.000976562 0.0175781 0.00195312 0.0449219 0.00195312 0.0625c0 0.612305 -0.49707 1.11035 -1.10938 1.11035c-0.0205078 0 -0.0527344 -0.000976562 -0.0722656 -0.00292969h-9.39941c-0.0205078 0.00195312 -0.0527344 0.00292969 -0.0722656 0.00292969\r\n-c-0.612305 0 -1.11035 -0.498047 -1.11035 -1.11035c0 -0.0175781 0.000976562 -0.0449219 0.00195312 -0.0625v-55.2793c-0.000976562 -0.0175781 -0.00195312 -0.0449219 -0.00195312 -0.0625c0 -0.618164 0.501953 -1.12012 1.12012 -1.12012\r\n-c0.0175781 0 0.0449219 0.000976562 0.0625 0.00195312h9.63965c0.0166016 -0.000976562 0.0449219 -0.00195312 0.0615234 -0.00195312c0.618164 0 1.12012 0.501953 1.12012 1.12012c0 0.0175781 -0.000976562 0.0449219 -0.00195312 0.0625v27.7695\r\n-c0 2.91016 0.0498047 11.3701 4.45996 15.0498c4.90039 4.90039 12 3.36035 13.4102 3.06055c0.555664 0.00976562 1.1875 0.430664 1.41016 0.939453c0.972656 2.15918 2.34375 5.74316 3.05957 8c0.0449219 0.113281 0.0800781 0.302734 0.0800781 0.423828\r\n-c0 0.356445 -0.246094 0.798828 -0.549805 0.986328v-0.00976562zM502.69 170.6l-2.12012 7.29004c-0.470703 1.18066 -1.41016 0.709961 -1.41016 0.709961c-4.23047 -1.81934 -10.1504 -1.88965 -11.29 -1.88965c-4.63965 0 -17.1699 1.12988 -17.1699 19.7598\r\n-c0 6.23047 1.84961 19.7607 16.4697 19.7607c0.245117 0.00585938 0.643555 0.0107422 0.888672 0.0107422c3.00586 0 7.76855 -0.744141 10.6318 -1.66113c2.8623 -0.916992 0.939453 -0.469727 1.17969 0.709961c0.939453 2.58984 1.63965 4.46973 2.58984 7.53027\r\n-c0.230469 0.939453 -0.469727 1.16992 -0.709961 1.16992c-11.5898 3.87012 -22.3398 2.5293 -27.7598 0c-1.58984 -0.740234 -16.2305 -6.49023 -16.2305 -27.5205c0 -2.89941 -0.580078 -30.1094 28.9404 -30.1094c4.42383 0.00878906 11.377 1.27637 15.5195 2.83008\r\n-c0.290039 0.214844 0.525391 0.682617 0.525391 1.04395c0 0.105469 -0.0244141 0.274414 -0.0546875 0.375977v-0.0107422zM556.56 210.12c-0.799805 3 -5.36914 16.2295 -22.3496 16.2295c-16 0 -23.5195 -10.1094 -25.6396 -18.5898\r\n-c-0.913086 -3.0166 -1.6543 -8.02441 -1.6543 -11.1768c0 -0.161133 0.00195312 -0.421875 0.00390625 -0.583008c0 -25.8701 18.8398 -29.4004 29.8799 -29.4004c10.8203 0 16.46 2.35059 18.5801 3.76074c0.469727 0.239258 0.709961 0.709961 0.240234 1.87988\r\n-l-2.36035 6.83008c-0.186523 0.402344 -0.698242 0.728516 -1.14258 0.728516c-0.0742188 0 -0.194336 -0.0126953 -0.267578 -0.0292969c-2.58984 -0.939453 -6.34961 -2.81934 -15.29 -2.81934c-17.4199 0 -16.8496 14.7402 -16.9297 16.7002h37.1602\r\n-c0.522461 0.0126953 1.05078 0.433594 1.17969 0.939453c-0.239258 0.00976562 0.94043 7.07031 -1.41016 15.54v-0.00976562zM533.27 216.47c5.11035 0 11.8506 -2.2002 12.7305 -14.1201h-26.3701c0.639648 5.12012 3.31055 14.1201 13.6396 14.1201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"speaker-deck\" unicode=\"&#xf83c;\" horiz-adv-x=\"512\" \r\n-d=\"M213.86 152h-113.86c-55.2002 0 -100 44.7998 -100 100s44.7998 100 100 100h132.84c22.0801 0 40 -17.9199 40 -40s-17.9199 -40 -40 -40h-134.84c-26.4697 0 -26.4502 -40 0 -40h113.82c55.1992 0 100 -44.7998 100 -100s-44.8008 -100 -100 -100h-171.82\r\n-c-22.0801 0 -40 17.9199 -40 40s17.9199 40 40 40h173.86c26.4795 0 26.46 40 0 40zM298 32c23.5957 16.0176 46.4932 51.8574 51.1104 80h64.5498c10.8525 0.0927734 19.6602 8.97656 19.6602 19.8291v0.170898v120v0.170898c0 10.8525 -8.80762 19.7363 -19.6602 19.8291\r\n-h-117.24c8.29199 9.4834 15.0205 27.4033 15.0205 40s-6.72852 30.5166 -15.0205 40h136.93c43.4404 0 78.6504 -35.8203 78.6504 -80v-160c0 -44.1797 -35.21 -80 -78.6504 -80h-135.35z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"symfony\" unicode=\"&#xf83d;\" horiz-adv-x=\"512\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.74 296.46c15.3496 0.540039 19.7695 15.4404 19.5195 23.1299c-0.639648 18.0605 -19.6699 29.46 -44.8301 28.6504\r\n-c-1.89941 -0.0703125 -65.2598 3.46973 -102.43 -105.53c-10.0596 8.29004 -57.7695 65.1602 -110.58 25.8096c-18.9502 -14.1797 -31.4199 -47.9199 -2.9502 -79.6699c16.9502 -18.1396 26.7207 -25.3301 22.25 -39.8496c-9.14941 -29.79 -55.5596 -16.1602 -51 -1.38965\r\n-c1.36035 4.38965 3.49023 4.46973 6.28027 13.0693c7.74023 25.3203 -27.1104 37.75 -34.6201 13.6006c-4.32031 -14.0605 2.37988 -39.5107 38.3799 -50.6201c42.1602 -12.96 77.8203 10.0098 82.8799 39.9395c3.2002 18.75 -5.29004 32.6904 -20.7998 50.6201l-12.6299 14\r\n-c-7.66016 7.7002 -10.29 20.7002 -2.37012 30.7002c6.69043 8.45996 16.2002 12.0605 31.8105 7.83008c22.7695 -6.16992 32.9199 -21.9697 49.8496 -34.7197c-1.23047 -4 -10.04 -32.3398 -18.2305 -82c-12.1094 -63.4902 -21.3496 -98.3506 -45.3496 -118.351\r\n-c-4.83984 -3.48926 -11.7598 -8.63965 -22.1797 -9c-1.94043 -0.0595703 -14.1406 2.83984 -2.0498 12.5508c15.2393 8.3291 7.00977 34.75 -14.8809 34c-9.85938 -0.330078 -24.8691 -9.59082 -24.3096 -26.5908c0.580078 -17.5293 16.9297 -30.6895 41.5801 -29.8398\r\n-c13.1797 0.44043 42.5801 5.7998 71.5801 40.2598c39.8496 46.7207 47.4395 102.2 58.2002 161.721c51.6797 -6.11035 77.2393 17.8398 77.5996 35.7002c0.549805 24.2998 -28 23.46 -32 5.2998c-1.91992 -8.83984 13.4199 -16.8105 1.41992 -24.5605\r\n-c-8.49023 -5.5 -23.71 -9.37012 -45.1396 -6.21973c10.2998 56.8496 19.1094 112.56 58.8896 113.85c2.70996 0.150391 12.6396 -0.119141 12.8701 -6.66992c0.150391 -5.41016 -6.7998 -9.66992 -6.53027 -18.8496c0.370117 -10.4199 8.2998 -17.2803 19.7705 -16.8701z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"waze\" unicode=\"&#xf83f;\" horiz-adv-x=\"512\" \r\n-d=\"M502.17 246.33c14.5205 -85.8604 -30.9395 -167.92 -113.17 -208.13c13 -34.1006 -12.4004 -70.2002 -48.3203 -70.2002c-27.0625 0.0214844 -50.166 21.9736 -51.5693 49c-6.44043 -0.19043 -64.2002 0 -76.3301 0.639648\r\n-c-1.10645 -27.3809 -24.2441 -49.6035 -51.6484 -49.6035c-0.588867 0 -1.54395 0.0195312 -2.13184 0.0439453c-33.8604 1.36035 -57.9502 34.8398 -47 67.9199c-37.21 13.1104 -72.54 34.8701 -99.6201 70.7998c-13 17.2803 -0.479492 41.7998 20.8398 41.7998\r\n-c46.3105 0 32.2207 54.1699 43.1504 110.261c18.4297 93.9395 116.75 157.14 211.72 157.14c102.48 0 197.15 -70.6699 214.08 -169.67zM373.51 59.7197c42 19.1807 81.3301 56.71 96.29 102.141c40.4805 123.09 -64.1494 228 -181.71 228\r\n-c-83.4502 0 -170.32 -55.4199 -186.07 -136c-9.5293 -48.9102 5 -131.351 -68.75 -131.351c24.9404 -33.1094 58.3301 -52.6201 93.7305 -64.0498c24.6602 21.7998 63.8701 15.4697 79.8301 -14.3398c14.2197 -1 79.1895 -1.17969 87.9004 -0.820312\r\n-c7.9502 15.5303 28.5635 28.1348 46.0107 28.1348c10.2002 0 24.8799 -5.24805 32.7686 -11.7148zM205.12 260.87c0 34.7402 50.8398 34.75 50.8398 0s-50.8398 -34.7402 -50.8398 0zM321.69 260.87c0 34.7402 50.8594 34.75 50.8594 0s-50.8594 -34.75 -50.8594 0z\r\n-M199.08 190.18c-3.44043 16.9404 22.1797 22.1807 25.6201 5.20996l0.0595703 -0.279297c4.14062 -21.4199 29.8506 -44 64.1201 -43.0703c35.6797 0.94043 59.25 22.21 64.1104 42.7695c4.45996 16.0508 28.5996 10.3604 25.4697 -6\r\n-c-5.22949 -22.1797 -31.21 -62 -91.46 -62.8994c-42.5498 0 -80.8799 27.8398 -87.9004 64.25z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yammer\" unicode=\"&#xf840;\" horiz-adv-x=\"512\" \r\n-d=\"M421.78 295.83c-48.1602 -26.3896 -118.561 -58.1504 -130.2 -50s91.4395 80.3701 106.689 88.7695c0.920898 0.5 1.80078 0.970703 2.63086 1.40039c1.76562 0.521484 4.69336 0.945312 6.53516 0.945312c12.7295 0 23.0605 -10.3311 23.0605 -23.0596\r\n-c0 -6.14453 -3.90527 -14.2334 -8.71582 -18.0557zM421.78 78.6602c4.76855 -3.82324 8.63965 -11.8877 8.63965 -18c0 -12.7344 -10.335 -23.0703 -23.0703 -23.0703c-1.81641 0 -4.70605 0.412109 -6.44922 0.919922\r\n-c-0.830078 0.410156 -1.70996 0.900391 -2.63086 1.41016c-15.2695 8.38965 -118.25 80.6396 -106.689 88.7402c11.5596 8.09961 82.04 -23.6201 130.2 -50zM464.21 211c10.0947 -2.11328 18.2559 -12.1992 18.2559 -22.5117\r\n-c0 -10.7881 -8.63965 -20.9561 -19.2861 -22.6982c-54.9102 0.0195312 -131.93 6.00977 -138.21 18.7598c-6.2793 12.75 118.84 26.5098 136.24 26.5098c1.0498 0 2.0498 -0.0595703 3 -0.0595703zM31 351.35c-0.699219 2.10742 -1.2666 5.61914 -1.2666 7.83887\r\n-c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195\r\n-c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117\r\n-c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"git-alt\" unicode=\"&#xf841;\" \r\n-d=\"M439.55 211.95c4.66504 -4.66602 8.45117 -13.8076 8.45117 -20.4053s-3.78613 -15.7393 -8.45117 -20.4053l-194.689 -194.689c-4.66602 -4.66211 -13.8047 -8.44629 -20.4004 -8.44629s-15.7344 3.78418 -20.4004 8.44629l-195.609 195.6\r\n-c-4.66504 4.66602 -8.45117 13.8076 -8.45117 20.4053s3.78613 15.7393 8.45117 20.4053l134.12 134.14l50.79 -50.8496c-5.95996 -14.2607 -2.16016 -36.4902 18.6396 -45v-123c-22.3203 -9.09082 -28.8203 -38.4004 -11.25 -56\r\n-c5.55176 -5.54883 16.4268 -10.0518 24.2754 -10.0518c7.84766 0 18.7236 4.50293 24.2744 10.0518c13.1807 13.1494 16.2197 42.46 -9.08008 55v121.85l46.3506 -46.29c-14.21 -34.4697 29.5098 -63.8301 56 -37.3398c25.71 25.6895 -1.24023 68.4902 -35.4707 56.6895\r\n-l-49.6592 49.6602c9.29004 26.9102 -16.3301 52.8203 -43.3906 43.6807l-51.5195 51.5195l40.6602 40.6299c4.66602 4.66309 13.8076 8.44727 20.4043 8.44727s15.7383 -3.78418 20.4053 -8.44727z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stackpath\" unicode=\"&#xf842;\" \r\n-d=\"M244.6 215.6c0 -8.5 -4.25977 -20.4893 -21.3398 -20.4893h-19.6094v41.4697h19.6094c17.1299 0 21.3398 -12.3604 21.3398 -20.9805zM448 416v-448h-448v448h448zM151.3 160.16c0 21.2402 -12.1201 34.54 -46.7197 44.8496c-20.5703 7.41016 -26 10.9102 -26 18.6299\r\n-c0 7.7207 7 14.6104 20.4102 14.6104c14.0898 0 20.79 -8.4502 20.79 -18.3496h30.7002l0.189453 0.569336c0.5 19.5703 -15.0596 41.6504 -51.1201 41.6504c-23.3701 0 -52.5498 -10.75 -52.5498 -38.29c0 -19.4004 9.25 -31.29 50.7402 -44.3701\r\n-c17.2598 -6.15039 21.9102 -10.4004 21.9102 -19.4795c0 -15.2002 -19.1309 -14.2305 -19.4707 -14.2305c-20.3994 0 -25.6494 9.09961 -25.6494 21.9004h-30.7998l-0.180664 -0.560547c-0.679688 -31.3203 28.3799 -45.2197 56.6299 -45.2197\r\n-c29.9805 0 51.1201 13.5498 51.1201 38.29zM276.68 215.79c0 25.2998 -18.4297 45.46 -53.4199 45.46h-51.7793v-138.18h32.1699v47.3594h19.6094c30.25 0 53.4199 15.9502 53.4199 45.3604zM297.94 123l49.0596 138.22h-31.0898l-47.9102 -138.22h29.9404zM404.46 261.22\r\n-h-31.0898l-47.9102 -138.22h29.9404z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cotton-bureau\" unicode=\"&#xf89e;\" horiz-adv-x=\"512\" \r\n-d=\"M474.31 117.59h25.1807c-25.7998 -109.78 -111.4 -173.59 -239.67 -173.59c-154.63 -0.339844 -247.82 92.8604 -247.82 248.18c0 154.63 93 247.82 247.82 247.82c128.399 0 214.06 -63.5098 240.18 -173.61h-25.2598\r\n-c-24.8506 95.6104 -99.9199 148.811 -214.69 148.811c-141.85 0 -223.2 -81.3799 -223.2 -223.2c0 -137.93 76.6699 -218 211.101 -223v49.2002c0 48.1602 -26.5498 74.3896 -74.5498 74.3896c-62.1309 0 -99.4004 37.2803 -99.4004 99.4102\r\n-c0 61.3701 36.5195 98.2803 97.3799 99.0596c30.7402 64.6504 144.24 69.3203 177.24 0c60.8496 -0.779297 97.3799 -37.6895 97.3799 -99.0596c0 -62.0098 -37.2002 -99.21 -99.2002 -99.21c-47.9795 0 -74.3896 -26.3896 -74.3896 -74.3896v-49.1602\r\n-c107.67 3.75977 178.24 56.5 201.899 148.35zM357 265.67c3.7998 -21.0801 11.2695 -104.2 -71.79 -120.75c12.2598 -17.7402 32.9805 -27.3301 61.5898 -27.3301c47.9697 0 74.4004 26.4102 74.4004 74.4102c0 44.6699 -22.8301 70.2197 -64.2002 73.6699zM275.32 168.31\r\n-c72.7803 9.89062 58.5 86.9102 56.2295 97c-72.5596 -10 -58.6895 -86.6592 -56.2295 -97zM260 316l-0.179688 -0.259766c-28.3008 0 -49.1602 -9.66016 -61.5703 -27.3506c28.3701 -5.44922 49.3701 -20.5898 61.5996 -43.4492\r\n-c12.2305 22.8594 33.2305 37.9697 61.5908 43.4492c-12.4404 17.9404 -32.8301 27.6104 -61.4404 27.6104zM188.48 265.28h0.239258c-2.75 -10.0498 -16.1602 -87.1602 56.25 -97c2.41992 10.1895 16.6807 86.4297 -56.4893 97zM173.2 117.59l0.330078 0.0302734\r\n-c28.2998 0 49 9.66992 61.1396 27.2998c-73.0303 14.2197 -78.4004 83.5498 -71.6504 120.75c-41.3594 -3.66992 -64.2197 -29.3096 -64.2197 -73.6699c0 -48.0098 26.4004 -74.4102 74.4004 -74.4102zM226.41 105.2h0.269531\r\n-c14.4902 -7.60059 25.5605 -19.3301 33.5605 -33.8301c6.36523 12.2188 21.4092 27.374 33.5801 33.8301c-14.4902 8.00977 -26.0508 19.0596 -33.8203 33.5498c-6.4248 -12.1094 -21.4736 -27.1396 -33.5898 -33.5498z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"buy-n-large\" unicode=\"&#xf8a6;\" horiz-adv-x=\"576\" \r\n-d=\"M288 416c154.73 0 280.21 -100.32 280.21 -224s-125.479 -224 -280.21 -224s-280.21 100.32 -280.21 224s125.479 224 280.21 224zM202.61 58.8096c61.5498 0.600586 99.4697 24.3604 117.71 61.5205c-35.79 6.4502 -62.9307 37.3096 -62.9307 74.4502\r\n-c0 41.7695 34.3408 75.6494 76.6904 75.6494h0.0341797c4.80078 0 12.4951 -0.864258 17.1758 -1.92969c0.524414 1.86621 1.19629 4.93555 1.5 6.84961c6.92969 44.1904 -14.8496 72.8408 -78 72.8408h-133.44l-77.25 -290.74zM358 240.89l-9.4502 -36.75l-15 36.75\r\n-h-31.3398l-26.6299 -90.3096h37.8301l7.83008 35.6299l11.1895 -35.6299h35.4102l22.1602 90.3096h-32zM503.86 58.8096l21.1992 84.0605h-103.869l53.0498 205.36h-92.5l-21.3301 -82.3506c29.3799 -10.5996 50.3799 -38.4102 50.3799 -71.0596\r\n-c0 -41.7803 -34.3496 -75.6504 -76.6904 -75.6504h-0.0625c-3.16504 0 -8.27539 0.37207 -11.4072 0.830078l-15.8398 -61.1904h197.07zM211.7 178.61c16.1494 0 29.7002 -7.51074 24.1396 -29.8203c-5.83008 -23.4697 -21.7998 -26.6504 -37.9395 -26.6504h-24.7002\r\n-l13.7998 56.4707h24.7002zM233 278c18.0703 0 32.2305 1.29004 27.5801 -17.5703c-3.83008 -15.5 -21.21 -30.1396 -39.21 -30.1396h-21.3701l11.6602 47.71h21.3398z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mdb\" unicode=\"&#xf8ca;\" horiz-adv-x=\"576\" \r\n-d=\"M17.3701 287.59h46.2998l42.3301 -117.33l40.7002 117.33h45.5098l12.79 -191.59h-45.5303l-4.79004 77.4297l-25.54 -77.4297h-44.71l-27.9297 79.8301l-5.58984 -79.8301h-43.9102zM298.37 287.59c0 0 93.4199 -1.58984 94.2002 -95.7998\r\n-c0.799805 -96.5898 -94.2002 -95.79 -94.2002 -95.79h-47.9004v191.59h47.9004zM297.17 141.13c0 0 47.5996 5.21973 46.7998 51.5205c-0.799805 46.2998 -46.7998 50.5693 -46.7998 50.5693v-102.09zM535.46 215.37c0 0 33.54 -11.96 33.54 -55.1006\r\n-c0 -68.6396 -87 -63.8496 -87 -63.8496h-45.5195v191.58h51.8994s49.7402 1.44043 55.0801 -34.3203c0.348633 -2.30371 0.630859 -6.06445 0.630859 -8.39453c0 -8.94336 -3.86621 -22.3457 -8.63086 -29.915zM483.56 247.31v-21.5898h12s5.43066 5.33984 4 12\r\n-c-2.42969 11.1807 -16 9.58984 -16 9.58984zM483.46 137.85c0 0 41.04 -4.92969 41.3701 20.7207c0.389648 27.1602 -41.1904 22.4297 -41.1904 22.4297h-0.0800781v-18.2305z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"orcid\" unicode=\"&#xf8d2;\" horiz-adv-x=\"512\" \r\n-d=\"M294.75 259.81c58.1299 0 84.6699 -35.2598 84.6699 -76.8994c0 -25.5703 -15.5 -76.9102 -83.1201 -76.9102h-47.4697v153.81h45.9199zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM175.21 79.2402v207.5h-29.8398v-207.5\r\n-h29.8398zM160.29 310.38c10.7646 0.0380859 19.5312 8.80566 19.5703 19.5703c0 10.8027 -8.76758 19.5693 -19.5703 19.5693s-19.5703 -8.7666 -19.5703 -19.5693s8.76758 -19.5703 19.5703 -19.5703v0zM300 79c68.3799 0 110 50.6104 110.04 103.89\r\n-c0 49.0205 -33.71 103.851 -110.44 103.851h-80.5996v-207.74h81z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"swift\" unicode=\"&#xf8e1;\" \r\n-d=\"M448 291.91c0 -5.35059 -0.000976562 -10.7002 0.00878906 -16.0498v-183.771c-0.0292969 -4.50977 -0.0800781 -9.00977 -0.200195 -13.5098c-0.0966797 -8.1748 -1.25781 -21.3545 -2.58984 -29.4199c-1.38477 -8.11035 -5.51465 -20.6543 -9.21973 -28\r\n-c-7.66406 -15.0459 -26.0898 -33.4854 -41.1299 -41.1602c-7.34766 -3.69824 -19.8916 -7.82422 -28 -9.20996c-8.07129 -1.32715 -21.2607 -2.4873 -29.4404 -2.58984c-4.51953 -0.120117 -9.00977 -0.200195 -13.5195 -0.200195h-199.79\r\n-c-4.52051 0.0302734 -9.02051 0.0800781 -13.5205 0.200195c-8.17676 0.0976562 -21.3613 1.25781 -29.4297 2.58984c-8.1084 1.38379 -20.6523 5.50977 -28 9.20996c-15.0342 7.67676 -33.4609 26.1113 -41.1299 41.1504c-3.70508 7.3457 -7.83496 19.8896 -9.21973 28\r\n-c-1.3252 8.06543 -2.48145 21.2461 -2.58008 29.4199c-0.129883 4.50977 -0.209961 9 -0.209961 13.5098v199.83c0.0292969 4.51953 0.0800781 9.00977 0.209961 13.5195c0.0888672 8.16797 1.22754 21.3389 2.54004 29.4004c1.38672 8.10938 5.5166 20.6533 9.21973 28\r\n-c3.74121 7.34473 11.5146 18.0293 17.3496 23.8496c1.74023 1.7207 3.55078 3.39062 5.43066 5c4.6748 3.99805 12.9141 9.51758 18.3896 12.3203c2.2334 1.11328 4.50391 2.15332 6.81152 3.12012c5.67188 2.31348 15.1738 5.04688 21.21 6.09961\r\n-c6.04688 1.03516 15.9297 2.07422 22.0596 2.32031c2.45996 0.120117 4.91992 0.200195 7.37012 0.269531c4.51953 0.120117 9.00977 0.200195 13.5195 0.200195h199.75c4.52051 -0.0292969 9.01074 -0.0800781 13.5205 -0.200195\r\n-c8.17676 -0.0976562 21.3613 -1.25781 29.4297 -2.58984c8.11035 -1.38281 20.6543 -5.51367 28 -9.21973c15.0547 -7.66211 33.4941 -26.0977 41.1602 -41.1504c3.70117 -7.34668 7.83105 -19.8906 9.21973 -28c1.3252 -8.06543 2.48047 -21.2461 2.58008 -29.4199\r\n-c0.120117 -4.51953 0.200195 -9.00977 0.200195 -13.5195zM378.119 50.9102c4.91016 -9.58008 15.3604 41.1797 -23.1602 88.5801c0.490234 1.68945 1 3.35938 1.44043 5.08984c18.5996 74.0801 -26.79 161.67 -103.58 207.75\r\n-c33.6494 -45.6201 48.5293 -100.87 35.3096 -149.2c-0.970703 -3.50098 -2.83398 -9.08789 -4.16016 -12.4697c-1.72949 1.14941 -3.84961 2.41992 -6.72949 4c0 0 -76.3906 47.1699 -159.181 130.59c-2.16992 2.2002 44.1504 -66.25 96.7207 -121.74\r\n-c-24.7803 13.9004 -93.7803 64.1201 -137.48 104.12c4.60156 -7.57031 13.0146 -19.1738 18.7803 -25.8994c36.4902 -46.2207 84.0898 -103.37 141.09 -147.221c-40 -24.4902 -96.6396 -26.3994 -153 0c-11.4521 5.37598 -29 15.8457 -39.1699 23.3701\r\n-c21.3398 -33.9365 68.5098 -74.4219 105.29 -90.3701c53.3203 -22.9199 106.35 -21.3799 145.85 -0.379883l0.419922 0.25c1.77051 1 3.53027 2 5.25 3c19.0801 9.7998 56.3105 19.46 76.3105 -19.4697z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"umbraco\" unicode=\"&#xf8e8;\" horiz-adv-x=\"510\" \r\n-d=\"M255.35 440c136.99 -0.169922 247.83 -111.31 247.65 -248.28c-0.179688 -136.97 -111.15 -247.67 -248 -247.67c-137 0.0703125 -248.07 111.271 -248 248.271c0.139648 136.96 111.36 247.85 248.35 247.68zM400.35 174\r\n-c0.296875 4.31738 0.518555 11.3311 0.518555 15.6582c0 4.16406 -0.222656 10.9141 -0.498047 15.0693c-0.354492 12.1631 -1.97168 31.8213 -3.61035 43.8799c-1.87012 13.2197 -3.56934 22.3799 -5.38965 32c-1.02051 4.87988 -1.28027 6.39941 -1.83008 8.44922\r\n-c-0.489258 2.14746 -2.67285 3.89062 -4.875 3.89062h-0.0253906h-0.819336l-32 -5c-2.31934 -0.375977 -4.20117 -2.58691 -4.20117 -4.93555c0 -0.0175781 0.000976562 -0.046875 0.000976562 -0.0644531c-0.00878906 -0.106445 -0.0146484 -0.27832 -0.0146484 -0.384766\r\n-s0.00585938 -0.279297 0.0146484 -0.385742l1.68945 -8.7793c1.60645 -8.86719 3.23633 -20.0938 4.88965 -33.6807c1.35156 -11.5938 2.5166 -30.4775 2.59961 -42.1494c0.266602 -26.9072 -2.44336 -46.834 -8.12988 -59.7803\r\n-c-5.01953 -11.3809 -18.9746 -22.6836 -31.1504 -25.2305c-13.7178 -2.9043 -36.2324 -5.26074 -50.2549 -5.26074c-1.93652 0 -5.0791 0.0449219 -7.01465 0.101562h-10.25c-1.9668 -0.0576172 -5.15918 -0.104492 -7.12695 -0.104492\r\n-c-14.0098 0 -36.5059 2.34863 -50.2129 5.24414c-12.2217 2.49805 -26.248 13.7793 -31.3105 25.1797c-5.60645 12.9336 -8.31641 32.877 -8.12988 59.8301c0.0820312 11.6738 1.26562 30.5576 2.64062 42.1504c1.62012 13.6201 3.2334 24.8467 4.83984 33.6797\r\n-l1.7002 8.78027c0.0078125 0.105469 0.0146484 0.27832 0.0146484 0.384766s-0.00683594 0.279297 -0.0146484 0.384766v0.0126953c0 2.33398 -1.86426 4.56836 -4.16016 4.9873l-32 5h-0.69043c-2.18848 -0.0195312 -4.38379 -1.7627 -4.89941 -3.88965\r\n-c-0.540039 -2.03027 -0.820312 -3.57031 -1.82031 -8.4502c-1.83008 -9.41992 -3.52051 -18.6094 -5.40039 -32c-1.63184 -12.0586 -3.24414 -31.7168 -3.59961 -43.8799c-0.290039 -4.2334 -0.525391 -11.1123 -0.525391 -15.3545\r\n-c0 -4.24316 0.235352 -11.1221 0.525391 -15.3555c0.766602 -27.0928 5.43359 -48.7598 14 -65c8.57324 -16.2061 23.0801 -27.873 43.5195 -35c20.4404 -7.12695 48.9209 -10.6172 85.4414 -10.4697h4.59961c36.5605 -0.15332 65.0439 3.33691 85.4502 10.4707\r\n-c20.4336 7.12012 34.9365 18.7871 43.5098 35.001s13.2402 37.8809 14 65.001z\" \u002F>\r\n-  \u003C\u002Ffont>\r\n-\u003C\u002Fdefs>\u003C\u002Fsvg>\r\n+\u003C?xml version=\"1.0\" standalone=\"no\"?>\n+\u003C!--\n+Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\n+License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n+-->\n+\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\n+\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\n+\u003Cmetadata>\n+Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019\n+ By Robert Madole\n+Copyright (c) Font Awesome\n+\u003C\u002Fmetadata>\n+\u003Cdefs>\n+\u003Cfont id=\"FontAwesome5Brands-Regular\" horiz-adv-x=\"448\" >\n+  \u003Cfont-face \n+    font-family=\"Font Awesome 5 Brands Regular\"\n+    font-weight=\"400\"\n+    font-stretch=\"normal\"\n+    units-per-em=\"512\"\n+    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\n+    ascent=\"448\"\n+    descent=\"-64\"\n+    bbox=\"-0.200195 -66.9505 641.5 448.3\"\n+    underline-thickness=\"25\"\n+    underline-position=\"-50\"\n+    unicode-range=\"U+0020-F8E8\"\n+  \u002F>\n+    \u003Cmissing-glyph \u002F>\n+    \u003Cglyph glyph-name=\"twitter-square\" unicode=\"&#xf081;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM351.1 257.2c12.8008 9.2998 24 20.8994 32.9004 34c-11.7998 -5.10059 -24.5996 -8.7998 -37.7998 -10.2002\n+c13.5996 8.09961 23.8994 20.9004 28.7998 36.0996c-12.5996 -7.5 -26.7998 -13 -41.5996 -15.7998c-12 12.7998 -29 20.7002 -47.9004 20.7002c-40 0 -73.2998 -36.0996 -64 -80.5996c-54.4004 2.7998 -102.9 28.7998 -135.2 68.5996\n+c-5.7002 -9.7002 -8.89941 -20.9004 -8.89941 -33.0996v-0.107422c0 -19.3584 13.0811 -43.7715 29.1992 -54.4932c-10.6992 0.400391 -20.8994 3.40039 -29.5996 8.2998v-0.799805c0 -31.8994 22.5 -58.2998 52.5 -64.3994\n+c-10.4004 -2.7002 -19.5 -2.7002 -29.5996 -1.2002c8.2998 -26 32.5 -44.9004 61.2998 -45.5c-22.5 -17.6006 -50.7002 -28 -81.4004 -28c-5.39941 0 -10.5 0.200195 -15.7998 0.799805c29 -18.5996 63.5 -29.4004 100.7 -29.4004c120.6 0 186.6 99.9004 186.6 186.601\n+c0 2.7998 0 5.7002 -0.200195 8.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook-square\" unicode=\"&#xf082;\" \n+d=\"M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-137.25v152.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4199 38.7305h31.2705v61s-28.3809 4.83984 -55.5205 4.83984\n+c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63v-152.31h-137.25c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"linkedin\" unicode=\"&#xf08c;\" \n+d=\"M416 416c17.5996 0 32 -14.5 32 -32.2998v-383.4c0 -17.7998 -14.4004 -32.2998 -32 -32.2998h-384.1c-17.6006 0 -31.9004 14.5 -31.9004 32.2998v383.4c0 17.7998 14.2998 32.2998 31.9004 32.2998h384.1zM135.4 32h0.0996094v213.8h-66.5v-213.8h66.4004zM102.2 275\n+c21.2998 0 38.5 17.2002 38.5 38.5c0 21.2002 -17.2998 38.5 -38.5 38.5c-21.2998 0 -38.5 -17.2998 -38.5 -38.5s17.2002 -38.5 38.5 -38.5zM384.3 32v117.2c0 57.5996 -12.5 101.899 -79.7002 101.899c-32.2998 0 -54 -17.6992 -62.8994 -34.5h-0.900391v29.2002h-63.7002\n+v-213.8h66.4004v105.8c0 27.9004 5.2998 54.9004 39.9004 54.9004c34 0 34.5 -31.9004 34.5 -56.7002v-104h66.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"github-square\" unicode=\"&#xf092;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM277.3 32.2998c66 22 110.8 84.9004 110.7 158.3c0 91.8008 -74.4004 161.5 -166.2 161.5s-162 -69.6992 -162 -161.5\n+c0 -73.3994 46.2002 -136.199 112.2 -158.3c8.5 -1.5 11.5 3.7002 11.5 8c0 4.10059 -0.200195 26.7002 -0.200195 40.6006c0 0 -46.3994 -10 -56.0996 19.6992c0 0 -7.60059 19.2002 -18.4004 24.2002c0 0 -15.0996 10.4004 1.10059 10.2002\n+c0 0 16.3994 -1.2998 25.5 -17.0996c14.5 -25.6006 38.7998 -18.2002 48.2998 -13.9004c1.5 10.5996 5.7998 18 10.5996 22.2998c-37 4.10059 -74.2998 9.5 -74.2998 73.1006c0 18.1992 5 27.2998 15.5996 39c-1.7998 4.39941 -7.39941 22.0996 1.7002 45\n+c13.9004 4.2998 45.7002 -17.9004 45.7002 -17.9004c13.2002 3.7002 27.5 5.59961 41.5996 5.59961c14.1006 0 28.4004 -1.89941 41.6006 -5.59961c0 0 31.7998 22.2002 45.7002 17.9004c9.09961 -23 3.39941 -40.7002 1.69922 -45\n+c10.6006 -11.7002 17.1006 -20.8008 17.1006 -39c0 -63.9004 -39 -69 -76 -73.1006c6.09961 -5.2002 11.2998 -15.0996 11.2998 -30.7002c0 -22.2998 -0.200195 -49.8994 -0.200195 -55.2998c0 -4.2998 3.10059 -9.5 11.5 -8zM179.2 93.4004\n+c-1.90039 -0.400391 -3.7002 0.399414 -3.90039 1.69922c-0.200195 1.5 1.10059 2.80078 3 3.2002c1.90039 0.200195 3.7002 -0.599609 3.90039 -1.89941c0.299805 -1.30078 -1 -2.60059 -3 -3zM169.7 94.2998c0 1.5 -1.7998 2.60059 -3.7002 2.40039\n+c-2 0 -3.5 -1.10059 -3.5 -2.40039c0 -1.5 1.5 -2.59961 3.7002 -2.39941c2 0 3.5 1.09961 3.5 2.39941zM156 95.4004c-0.400391 -1.30078 -2.40039 -1.90039 -4.09961 -1.30078c-1.90039 0.400391 -3.2002 1.90039 -2.80078 3.2002\n+c0.400391 1.2998 2.40039 1.90039 4.10059 1.5c2 -0.599609 3.2998 -2.09961 2.7998 -3.39941zM143.7 100.8c0.899414 0.799805 0.399414 2.7998 -0.900391 4.10059c-1.5 1.5 -3.39941 1.69922 -4.2998 0.599609c-1 -0.900391 -0.599609 -2.7998 0.900391 -4.09961\n+c1.5 -1.5 3.39941 -1.7002 4.2998 -0.600586zM134.6 109.9c1.10059 0.799805 1.10059 2.59961 0 4.09961c-0.899414 1.5 -2.59961 2.2002 -3.69922 1.2998c-1.10059 -0.700195 -1.10059 -2.39941 0 -3.89941c1.09961 -1.5 2.7998 -2.10059 3.69922 -1.5zM128.1 119.6\n+c0.900391 0.700195 0.700195 2.2002 -0.399414 3.5c-1.10059 1 -2.60059 1.5 -3.5 0.600586c-0.900391 -0.700195 -0.700195 -2.2002 0.399414 -3.5c1.10059 -1 2.60059 -1.5 3.5 -0.600586zM121.4 127c0.399414 0.799805 -0.200195 1.90039 -1.5 2.59961\n+c-1.30078 0.5 -2.40039 0.200195 -2.80078 -0.399414c-0.399414 -0.900391 0.200195 -2 1.5 -2.60059c1.10059 -0.699219 2.40039 -0.5 2.80078 0.400391z\" \u002F>\n+    \u003Cglyph glyph-name=\"twitter\" unicode=\"&#xf099;\" horiz-adv-x=\"512\" \n+d=\"M459.37 296.284c0.325195 -4.54785 0.325195 -9.09766 0.325195 -13.6455c0 -138.72 -105.583 -298.558 -298.559 -298.558c-59.4521 0 -114.68 17.2188 -161.137 47.1055c8.44727 -0.973633 16.5684 -1.29883 25.3398 -1.29883\n+c49.0547 0 94.2129 16.5684 130.274 44.832c-46.1318 0.975586 -84.792 31.1885 -98.1123 72.7725c6.49805 -0.974609 12.9951 -1.62402 19.8184 -1.62402c9.4209 0 18.8428 1.2998 27.6133 3.57324c-48.0811 9.74707 -84.1426 51.9795 -84.1426 102.984v1.29883\n+c13.9688 -7.79688 30.2139 -12.6699 47.4307 -13.3184c-28.2637 18.8428 -46.7803 51.0049 -46.7803 87.3906c0 19.4922 5.19629 37.3604 14.2939 52.9541c51.6543 -63.6748 129.3 -105.258 216.364 -109.807c-1.62402 7.79688 -2.59863 15.918 -2.59863 24.04\n+c0 57.8271 46.7822 104.934 104.934 104.934c30.2139 0 57.502 -12.6699 76.6709 -33.1367c23.7148 4.54785 46.4551 13.3193 66.5986 25.3398c-7.79785 -24.3662 -24.3662 -44.833 -46.1318 -57.8271c21.1172 2.27344 41.584 8.12207 60.4258 16.2432\n+c-14.292 -20.791 -32.1611 -39.3086 -52.6279 -54.2529z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook\" unicode=\"&#xf09a;\" horiz-adv-x=\"512\" \n+d=\"M504 192c0 -123.78 -90.6904 -226.38 -209.25 -245v173.31h57.7803l11 71.6904h-68.7803v46.5498c0 19.6104 9.61035 38.7305 40.4102 38.7305h31.2803v61s-28.3809 4.83984 -55.5205 4.83984c-56.6699 0 -93.6699 -34.3301 -93.6699 -96.4805v-54.6396h-63v-71.6904h63\n+v-173.31c-118.56 18.6201 -209.25 121.22 -209.25 245c0 137 111 248 248 248s248 -111 248 -248z\" \u002F>\n+    \u003Cglyph glyph-name=\"github\" unicode=\"&#xf09b;\" horiz-adv-x=\"496\" \n+d=\"M165.9 50.5996c0 -2 -2.30078 -3.59961 -5.2002 -3.59961c-3.2998 -0.299805 -5.60059 1.2998 -5.60059 3.59961c0 2 2.30078 3.60059 5.2002 3.60059c3 0.299805 5.60059 -1.2998 5.60059 -3.60059zM134.8 55.0996c0.700195 2 3.60059 3 6.2002 2.30078\n+c3 -0.900391 4.90039 -3.2002 4.2998 -5.2002c-0.599609 -2 -3.59961 -3 -6.2002 -2c-3 0.599609 -5 2.89941 -4.2998 4.89941zM179 56.7998c2.90039 0.299805 5.59961 -1 5.90039 -2.89941c0.299805 -2 -1.7002 -3.90039 -4.60059 -4.60059\n+c-3 -0.700195 -5.59961 0.600586 -5.89941 2.60059c-0.300781 2.2998 1.69922 4.19922 4.59961 4.89941zM244.8 440c138.7 0 251.2 -105.3 251.2 -244c0 -110.9 -67.7998 -205.8 -167.8 -239c-12.7002 -2.2998 -17.2998 5.59961 -17.2998 12.0996\n+c0 8.2002 0.299805 49.9004 0.299805 83.6006c0 23.5 -7.7998 38.5 -17 46.3994c55.8994 6.30078 114.8 14 114.8 110.5c0 27.4004 -9.7998 41.2002 -25.7998 58.9004c2.59961 6.5 11.0996 33.2002 -2.60059 67.9004c-20.8994 6.59961 -69 -27 -69 -27\n+c-20 5.59961 -41.5 8.5 -62.7998 8.5s-42.7998 -2.90039 -62.7998 -8.5c0 0 -48.0996 33.5 -69 27c-13.7002 -34.6006 -5.2002 -61.4004 -2.59961 -67.9004c-16 -17.5996 -23.6006 -31.4004 -23.6006 -58.9004c0 -96.1992 56.4004 -104.3 112.3 -110.5\n+c-7.19922 -6.59961 -13.6992 -17.6992 -16 -33.6992c-14.2998 -6.60059 -51 -17.7002 -72.8994 20.8994c-13.7002 23.7998 -38.6006 25.7998 -38.6006 25.7998c-24.5 0.300781 -1.59961 -15.3994 -1.59961 -15.3994c16.4004 -7.5 27.7998 -36.6006 27.7998 -36.6006\n+c14.7002 -44.7998 84.7002 -29.7998 84.7002 -29.7998c0 -21 0.299805 -55.2002 0.299805 -61.3994c0 -6.5 -4.5 -14.4004 -17.2998 -12.1006c-99.7002 33.4004 -169.5 128.3 -169.5 239.2c0 138.7 106.1 244 244.8 244zM97.2002 95.0996\n+c1.2998 1.30078 3.59961 0.600586 5.2002 -1c1.69922 -1.89941 2 -4.19922 0.699219 -5.19922c-1.2998 -1.30078 -3.59961 -0.600586 -5.19922 1c-1.7002 1.89941 -2 4.19922 -0.700195 5.19922zM86.4004 103.2c0.699219 1 2.2998 1.2998 4.2998 0.700195\n+c2 -1 3 -2.60059 2.2998 -3.90039c-0.700195 -1.40039 -2.7002 -1.7002 -4.2998 -0.700195c-2 1 -3 2.60059 -2.2998 3.90039zM118.8 67.5996c1.2998 1.60059 4.2998 1.30078 6.5 -1c2 -1.89941 2.60059 -4.89941 1.2998 -6.19922\n+c-1.2998 -1.60059 -4.19922 -1.30078 -6.5 1c-2.2998 1.89941 -2.89941 4.89941 -1.2998 6.19922zM107.4 82.2998c1.59961 1.2998 4.19922 0.299805 5.59961 -2c1.59961 -2.2998 1.59961 -4.89941 0 -6.2002c-1.2998 -1 -4 0 -5.59961 2.30078\n+c-1.60059 2.2998 -1.60059 4.89941 0 5.89941z\" \u002F>\n+    \u003Cglyph glyph-name=\"pinterest\" unicode=\"&#xf0d2;\" horiz-adv-x=\"496\" \n+d=\"M496 192c0 -137 -111 -248 -248 -248c-25.5996 0 -50.2002 3.90039 -73.4004 11.0996c10.1006 16.5 25.2002 43.5 30.8008 65c3 11.6006 15.3994 59 15.3994 59c8.10059 -15.3994 31.7002 -28.5 56.7998 -28.5c74.8008 0 128.7 68.8008 128.7 154.301\n+c0 81.8994 -66.8994 143.199 -152.899 143.199c-107 0 -163.9 -71.7998 -163.9 -150.1c0 -36.4004 19.4004 -81.7002 50.2998 -96.0996c4.7002 -2.2002 7.2002 -1.2002 8.2998 3.2998c0.800781 3.39941 5 20.2998 6.90039 28.0996\n+c0.599609 2.5 0.299805 4.7002 -1.7002 7.10059c-10.0996 12.5 -18.2998 35.2998 -18.2998 56.5996c0 54.7002 41.4004 107.6 112 107.6c60.9004 0 103.6 -41.5 103.6 -100.899c0 -67.1006 -33.8994 -113.601 -78 -113.601c-24.2998 0 -42.5996 20.1006 -36.6992 44.8008\n+c7 29.5 20.5 61.2998 20.5 82.5996c0 19 -10.2002 34.9004 -31.4004 34.9004c-24.9004 0 -44.9004 -25.7002 -44.9004 -60.2002c0 -22 7.40039 -36.7998 7.40039 -36.7998s-24.5 -103.801 -29 -123.2c-5 -21.4004 -3 -51.6006 -0.900391 -71.2002\n+c-92.1992 36.0996 -157.6 125.9 -157.6 231c0 137 111 248 248 248s248 -111 248 -248z\" \u002F>\n+    \u003Cglyph glyph-name=\"pinterest-square\" unicode=\"&#xf0d3;\" \n+d=\"M448 368v-352c0 -26.5 -21.5 -48 -48 -48h-245.6c9.7998 16.4004 22.3994 40 27.3994 59.2998c3 11.5 15.2998 58.4004 15.2998 58.4004c8 -15.2998 31.4004 -28.2002 56.3008 -28.2002c74.0996 0 127.399 68.0996 127.399 152.7\n+c0 81.0996 -66.2002 141.8 -151.399 141.8c-106 0 -162.2 -71.0996 -162.2 -148.6c0 -36 19.2002 -80.8008 49.7998 -95.1006c4.7002 -2.2002 7.09961 -1.2002 8.2002 3.2998c0.799805 3.40039 5 20.1006 6.7998 27.8008c0.599609 2.5 0.299805 4.59961 -1.7002 7\n+c-10.0996 12.2998 -18.2998 34.8994 -18.2998 56c0 54.1992 41 106.6 110.9 106.6c60.2998 0 102.6 -41.0996 102.6 -99.9004c0 -66.3994 -33.5 -112.399 -77.2002 -112.399c-24.0996 0 -42.0996 19.8994 -36.3994 44.3994c6.89941 29.2002 20.2998 60.7002 20.2998 81.8008\n+c0 53 -75.5 45.6992 -75.5 -25c0 -21.7002 7.2998 -36.5 7.2998 -36.5c-31.4004 -132.801 -36.0996 -134.5 -29.5996 -192.601l2.19922 -0.799805h-88.5996c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-plus-square\" unicode=\"&#xf0d4;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM164 92c57.7002 0 96 40.5 96 97.5996c0 6.5 -0.599609 11.6006 -1.59961 16.6006h-94.4004v-34.4004h56.9004\n+c-2.40039 -14.5996 -17.2002 -43.0996 -56.8008 -43.0996c-34.0996 0 -61.8994 28.2998 -61.8994 63.2002c0 35 27.7998 63.1992 61.8994 63.1992c19.5 0 32.4004 -8.2998 39.8008 -15.3994l27.0996 26.0996c-17.5 16.4004 -40 26.2002 -67 26.2002\n+c-55.2998 0 -100 -44.7002 -100 -100s44.7002 -100 100 -100zM384 173.8v29.2002h-29v29h-29.2002v-29h-29v-29.2002h29v-29h29.2002v29h29z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-plus-g\" unicode=\"&#xf0d5;\" horiz-adv-x=\"640\" \n+d=\"M386.061 219.504c1.83398 -9.69238 3.14355 -19.3838 3.14355 -31.9561c0 -109.753 -73.6055 -187.548 -184.404 -187.548c-106.084 0 -192 85.915 -192 192s85.916 192 192 192c51.8643 0 95.083 -18.8594 128.611 -50.292l-52.126 -50.0303\n+c-14.1455 13.6211 -39.0283 29.5996 -76.4854 29.5996c-65.4834 0 -118.92 -54.2217 -118.92 -121.277s53.4365 -121.277 118.92 -121.277c75.9609 0 104.514 54.7451 108.965 82.7734h-108.965v66.0088h181.261v-0.000976562zM571.467 213.067h55.7334v-56.001h-55.7334\n+v-55.7334h-56.001v55.7334h-55.7324v56.001h55.7324v55.7324h56.001v-55.7324z\" \u002F>\n+    \u003Cglyph glyph-name=\"linkedin-in\" unicode=\"&#xf0e1;\" \n+d=\"M100.28 0h-92.8799v299.1h92.8799v-299.1zM53.79 339.9c-29.7002 0 -53.79 24.5996 -53.79 54.2998c0 29.6914 24.0977 53.79 53.79 53.79s53.79 -24.0986 53.79 -53.79c0 -29.7002 -24.0996 -54.2998 -53.79 -54.2998zM447.9 0h-92.6807v145.6\n+c0 34.7002 -0.700195 79.2002 -48.29 79.2002c-48.29 0 -55.6895 -37.7002 -55.6895 -76.7002v-148.1h-92.7803v299.1h89.0801v-40.7998h1.2998c12.4004 23.5 42.6904 48.2998 87.8799 48.2998c94 0 111.28 -61.8994 111.28 -142.3v-164.3h-0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"github-alt\" unicode=\"&#xf113;\" horiz-adv-x=\"480\" \n+d=\"M186.1 119.3c0 -20.8994 -10.8994 -55.0996 -36.6992 -55.0996c-25.8008 0 -36.7002 34.2002 -36.7002 55.0996c0 20.9004 10.8994 55.1006 36.7002 55.1006c25.7998 0 36.6992 -34.2002 36.6992 -55.1006zM480 169.8c0 -31.8994 -3.2002 -65.7002 -17.5 -95\n+c-37.9004 -76.5996 -142.1 -74.7998 -216.7 -74.7998c-75.7998 0 -186.2 -2.7002 -225.6 74.7998c-14.6006 29 -20.2002 63.1006 -20.2002 95c0 41.9004 13.9004 81.5 41.5 113.601c-5.2002 15.7998 -7.7002 32.3994 -7.7002 48.7998\n+c0 21.5 4.90039 32.2998 14.6006 51.7998c45.2998 0 74.2998 -9 108.8 -36c29 6.90039 58.7998 10 88.7002 10c27 0 54.1992 -2.90039 80.3994 -9.2002c34 26.7002 63 35.2002 107.8 35.2002c9.80078 -19.5 14.6006 -30.2998 14.6006 -51.7998\n+c0 -16.4004 -2.60059 -32.7002 -7.7002 -48.2002c27.5 -32.4004 39 -72.2998 39 -114.2zM415.7 119.3c0 43.9004 -26.7002 82.6006 -73.5 82.6006c-18.9004 0 -37 -3.40039 -56 -6c-14.9004 -2.30078 -29.7998 -3.2002 -45.1006 -3.2002\n+c-15.1992 0 -30.0996 0.899414 -45.0996 3.2002c-18.7002 2.59961 -37 6 -56 6c-46.7998 0 -73.5 -38.7002 -73.5 -82.6006c0 -87.7998 80.4004 -101.3 150.4 -101.3h48.1992c70.3008 0 150.601 13.4004 150.601 101.3zM333.1 174.4\n+c25.8008 0 36.7002 -34.2002 36.7002 -55.1006c0 -20.8994 -10.8994 -55.0996 -36.7002 -55.0996c-25.7998 0 -36.6992 34.2002 -36.6992 55.0996c0 20.9004 10.8994 55.1006 36.6992 55.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"maxcdn\" unicode=\"&#xf136;\" horiz-adv-x=\"512\" \n+d=\"M461.1 5.2998h-97.3994l51.8994 242.7c2.30078 10.2002 0.900391 19.5 -4.39941 25.7002c-5 6.09961 -13.7002 9.59961 -24.2002 9.59961h-49.2998l-59.5 -278h-97.4004l59.5 278h-83.3994l-59.5 -278h-97.4004l59.5 278l-44.5996 95.4004h372.1\n+c39.4004 0 75.2998 -16.2998 98.2998 -44.9004c23.2998 -28.5996 31.7998 -67.3994 23.6006 -105.899z\" \u002F>\n+    \u003Cglyph glyph-name=\"html5\" unicode=\"&#xf13b;\" horiz-adv-x=\"384\" \n+d=\"M0 416h384l-34.9004 -395.8l-157.6 -52.2002l-156.6 52.2002zM308.2 288.1l4.39941 47.7002h-241.1l12.7998 -145.6h166.9l-6 -62.2002l-53.7002 -14.5l-53.5 14.5l-3.5 38.0996h-47.7002l6 -75.7998l98.7002 -27.2998h1.09961v0.299805l97.9004 27l13.5996 148.4h-175.6\n+l-4.09961 49.3994h183.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"css3\" unicode=\"&#xf13c;\" horiz-adv-x=\"512\" \n+d=\"M480 416l-64 -368l-223.3 -80l-192.7 80l19.5996 94.7998h82l-8 -40.5996l116.4 -44.4004l134.1 44.4004l18.8008 97.0996h-333.4l16 82h333.7l10.5 52.7002h-333.4l16.2998 82h407.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"btc\" unicode=\"&#xf15a;\" horiz-adv-x=\"384\" \n+d=\"M310.204 205.362c46.0059 -11.0283 74.9971 -38.4443 69.3262 -99.8906c-7.24805 -76.5723 -61.5967 -97.0547 -142.896 -101.467v-68.0049h-48.5273v66.7451c-12.29 0 -25.21 0 -38.4443 0.314453v-67.0596h-48.5283v68.0049s-8.88867 0.31543 -97.3701 0.31543\n+l9.76758 57.666c34.7305 -0.614258 50.3301 -3.4209 53.2549 16.0703v217.43c-4.60645 24.5664 -24.709 22.1045 -63.0234 21.4268v51.6777c58.748 -0.275391 79.5283 -0.539062 97.3701 0v79.4092h48.5283v-77.833c12.9189 0.31543 25.8389 0.629883 38.4443 0.629883\n+v77.2031h48.5273v-79.4092c62.3926 -5.35547 109.492 -24.5781 114.851 -81.9287c4.09668 -41.9102 -13.5508 -67.1201 -41.2803 -81.2998zM150.608 313.447v-96.7402c27.416 0 113.126 -6.30273 113.126 48.2119c0 57.0352 -85.7109 48.5283 -113.126 48.5283z\n+M150.608 61.6709c32.7715 0 133.126 -6.93262 133.127 53.2529c0 62.3936 -100.355 53.2549 -133.127 53.2549v-106.508z\" \u002F>\n+    \u003Cglyph glyph-name=\"youtube\" unicode=\"&#xf167;\" horiz-adv-x=\"576\" \n+d=\"M549.655 323.917c11.4121 -42.8672 11.4121 -132.305 11.4121 -132.305s0 -89.4385 -11.4121 -132.306c-6.28125 -23.6494 -24.7871 -41.5 -48.2842 -47.8203c-42.5908 -11.4863 -213.371 -11.4863 -213.371 -11.4863s-170.78 0 -213.371 11.4863\n+c-23.4971 6.32031 -42.0029 24.1709 -48.2842 47.8203c-11.4121 42.8672 -11.4121 132.306 -11.4121 132.306s0 89.4375 11.4121 132.305c6.28125 23.6504 24.7871 42.2754 48.2842 48.5967c42.5908 11.4863 213.371 11.4863 213.371 11.4863s170.781 0 213.371 -11.4863\n+c23.4971 -6.32031 42.0029 -24.9463 48.2842 -48.5967zM232.145 110.409l142.739 81.2012l-142.739 81.2051v-162.406z\" \u002F>\n+    \u003Cglyph glyph-name=\"xing\" unicode=\"&#xf168;\" horiz-adv-x=\"384\" \n+d=\"M162.7 238c-1.7998 -3.2998 -25.2002 -44.4004 -70.1006 -123.5c-4.89941 -8.2998 -10.7998 -12.5 -17.6992 -12.5h-65.1006c-7.7002 0 -12.0996 7.5 -8.5 14.4004l69 121.3c0.200195 0 0.200195 0.0996094 0 0.299805l-43.8994 75.5996\n+c-4.30078 7.80078 0.299805 14.1006 8.5 14.1006h65.0996c7.2998 0 13.2998 -4.10059 18 -12.2002zM382.6 401.9l-144 -253v-0.300781l91.6006 -166.6c3.89941 -7.09961 0.200195 -14.0996 -8.5 -14.0996h-65.2002c-7.59961 0 -13.5996 4 -18 12.1992l-92.4004 168.5\n+c3.30078 5.80078 51.5 90.8008 144.801 255.2c4.59961 8.10059 10.3994 12.2002 17.5 12.2002h65.6992c8 0 12.3008 -6.7002 8.5 -14.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"xing-square\" unicode=\"&#xf169;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM140.4 127.8c4.89941 0 9.09961 2.90039 12.5996 9.10059c32.0996 56.5 48.7998 85.8994 50.0996 88.1992l-31.8994 55.3008\n+c-3.40039 5.7998 -7.7002 8.69922 -12.9004 8.69922h-46.5996c-5.7998 0 -9 -4.5 -6 -10.0996l31.3994 -54c0.100586 -0.0996094 0.100586 -0.200195 0 -0.200195l-49.2998 -86.7002c-2.7002 -5 0.5 -10.2998 6 -10.2998h46.6006zM360.1 341.9\n+c2.80078 5.2998 -0.299805 10.0996 -6 10h-46.8994c-5.10059 0 -9.2002 -2.90039 -12.5 -8.7002c-66.6006 -117.4 -101.101 -178.2 -103.4 -182.3l66 -120.301c3.2002 -5.7998 7.40039 -8.69922 12.9004 -8.69922h46.5996c6.10059 0 8.7998 5 6 10.0996l-65.5 119v0.200195z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"dropbox\" unicode=\"&#xf16b;\" horiz-adv-x=\"528\" \n+d=\"M264.4 331.7l-132 -84.2998l132 -84.3008l-132 -84.2998l-132.4 85.1006l132.3 84.2998l-132.3 83.5l132.3 84.2998zM131.6 52.2998l132 84.2998l132 -84.2998l-132 -84.2998zM264.4 163.9l132 84.2998l-132 83.5996l131.3 84.2002l132.3 -84.2998l-132.3 -84.2998\n+l132.3 -84.2002l-132.3 -84.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"stack-overflow\" unicode=\"&#xf16c;\" horiz-adv-x=\"384\" \n+d=\"M290.7 137l-8.2002 -39l-195.7 41l8.2002 39.2998zM341.7 224l-25.5 -30.7998l-153.5 128.3l25.5 30.7998zM310.5 184.3l-16.7998 -36.2998l-181.2 84.5l16.7002 36.5zM262 416l119.3 -160.3l-32 -24l-119.3 160.3zM282.5 88v-39.7002h-200v39.7002h200zM322.2 8v120h40\n+v-160h-359.5v160h40v-120h279.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"instagram\" unicode=\"&#xf16d;\" \n+d=\"M224.1 307c63.6006 0 114.9 -51.2998 114.9 -114.9c0 -63.5996 -51.2998 -114.899 -114.9 -114.899c-63.5996 0 -114.899 51.2998 -114.899 114.899c0 63.6006 51.2998 114.9 114.899 114.9zM224.1 117.4c41.1006 0 74.7002 33.5 74.7002 74.6992\n+c0 41.2002 -33.5 74.7002 -74.7002 74.7002c-41.1992 0 -74.6992 -33.5 -74.6992 -74.7002c0 -41.1992 33.5996 -74.6992 74.6992 -74.6992zM370.5 311.7c0 -14.9004 -12 -26.7998 -26.7998 -26.7998c-14.9004 0 -26.7998 12 -26.7998 26.7998s12 26.7998 26.7998 26.7998\n+s26.7998 -12 26.7998 -26.7998zM446.6 284.5c2.10059 -37 2.10059 -147.8 0 -184.8c-1.7998 -35.9004 -10 -67.7002 -36.1992 -93.9004c-26.2002 -26.2998 -58 -34.5 -93.9004 -36.2002c-37 -2.09961 -147.9 -2.09961 -184.9 0\n+c-35.8994 1.80078 -67.5996 10 -93.8994 36.2002s-34.5 58 -36.2002 93.9004c-2.09961 37 -2.09961 147.899 0 184.899c1.7998 35.9004 9.90039 67.7002 36.2002 93.9004s58.0996 34.4004 93.8994 36.0996c37 2.10059 147.9 2.10059 184.9 0\n+c35.9004 -1.7998 67.7002 -10 93.9004 -36.1992c26.2998 -26.2002 34.5 -58 36.1992 -93.9004zM398.8 60c11.7002 29.4004 9 99.5 9 132.1c0 32.6006 2.7002 102.601 -9 132.101c-7.89941 19.7002 -23 34.7998 -42.5996 42.5996c-29.4004 11.6006 -99.5 9 -132.101 9\n+c-32.5996 0 -102.6 2.7002 -132.1 -9c-19.7002 -7.89941 -34.7998 -23 -42.5996 -42.5996c-11.6006 -29.4004 -9 -99.5 -9 -132.101c0 -32.5996 -2.7002 -102.6 9 -132.1c7.89941 -19.7002 23 -34.7998 42.5996 -42.5996c29.4004 -11.6006 99.5 -9 132.1 -9\n+c32.6006 0 102.601 -2.7002 132.101 9c19.7002 7.89941 34.7998 23 42.5996 42.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"flickr\" unicode=\"&#xf16e;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM144.5 129c35.0996 0 63.5 28.4004 63.5 63.5s-28.4004 63.5 -63.5 63.5s-63.5 -28.4004 -63.5 -63.5s28.4004 -63.5 63.5 -63.5z\n+M303.5 129c35.0996 0 63.5 28.4004 63.5 63.5s-28.4004 63.5 -63.5 63.5s-63.5 -28.4004 -63.5 -63.5s28.4004 -63.5 63.5 -63.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"adn\" unicode=\"&#xf170;\" horiz-adv-x=\"496\" \n+d=\"M248 280.5l64.9004 -98.7998h-129.801zM496 192c0 -136.9 -111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248s248 -111.1 248 -248zM396.2 109.3l-148.2 223.2l-148.2 -223.2h30.4004l33.5996 51.7002h168.601l33.5996 -51.7002h30.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"bitbucket\" unicode=\"&#xf171;\" horiz-adv-x=\"512\" \n+d=\"M22.2002 416l466.8 -0.200195c0.776367 -0.0107422 2.03027 -0.100586 2.7998 -0.200195c7.39648 -1.21875 13.3984 -8.29102 13.3984 -15.7871c0 -0.697266 -0.0888672 -1.82324 -0.198242 -2.5127l-67.9004 -416.8\n+c-1.2168 -7.39746 -8.29004 -13.4014 -15.7871 -13.4014c-0.0585938 0 -0.154297 0.000976562 -0.212891 0.000976562h-325.699c-10.1016 0.0820312 -19.6445 8.23535 -21.3008 18.2002l-67.8994 412.101c-0.0966797 0.769531 -0.186523 2.02344 -0.200195 2.7998\n+c0.108398 8.72168 7.27539 15.8008 15.999 15.8008c0.0556641 0 0.145508 0 0.201172 -0.000976562zM308.1 118.2l25.2002 147h-157.3l28.0996 -147h104z\" \u002F>\n+    \u003Cglyph glyph-name=\"tumblr\" unicode=\"&#xf173;\" horiz-adv-x=\"320\" \n+d=\"M309.8 -32.2998c-13.5996 -14.5 -50 -31.7002 -97.3994 -31.7002c-120.801 0 -147 88.7998 -147 140.6v144h-47.5c-5.5 0 -10 4.5 -10 10v68c0 7.2002 4.5 13.6006 11.2998 16c62 21.8008 81.5 76 84.2998 117.101c0.799805 11 6.5 16.2998 16.0996 16.2998h70.9004\n+c5.5 0 10 -4.5 10 -10v-115.2h83c5.5 0 10 -4.39941 10 -9.89941v-81.7002c0 -5.5 -4.5 -10 -10 -10h-83.4004v-133.2c0 -34.2002 23.7002 -53.5996 68 -35.7998c4.80078 1.89941 9 3.2002 12.7002 2.2002c3.5 -0.900391 5.7998 -3.40039 7.40039 -7.90039l22 -64.2998\n+c1.7998 -5 3.2998 -10.6006 -0.400391 -14.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"tumblr-square\" unicode=\"&#xf174;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM317.7 51.7998c2.2998 2.40039 1.2998 5.90039 0.299805 9.10059l-13.7998 40.1992c-1 2.80078 -2.40039 4.40039 -4.60059 4.90039\n+c-2.39941 0.599609 -5 -0.200195 -8 -1.40039c-27.6992 -11.0996 -42.5 1 -42.5 22.4004v83.2998h52.1006c3.39941 0 6.2002 2.7998 6.2002 6.2002v51.0996c0 3.40039 -2.80078 6.2002 -6.2002 6.2002h-51.9004v72c0 3.40039 -2.7998 6.2002 -6.2002 6.2002h-44.2998\n+c-5.89941 0 -9.5 -3.2998 -10 -10.2002c-1.7998 -25.7002 -13.8994 -59.5 -52.7002 -73.2002c-4.2998 -1.5 -7.09961 -5.5 -7.09961 -10v-42.5c0 -3.39941 2.7998 -6.19922 6.2002 -6.19922h29.7002v-90c0 -32.4004 16.3994 -87.9004 91.8994 -87.9004\n+c29.7002 0 52.4004 10.7002 60.9004 19.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"apple\" unicode=\"&#xf179;\" horiz-adv-x=\"384\" \n+d=\"M318.7 179.3c0 -1.89941 -3.5 -61.2002 61.7002 -91.8994c-12.2002 -36.8008 -54 -118.601 -102.601 -119.301c-28.0996 0 -44.5996 17.9004 -76.3994 17.9004c-32.8008 0 -50.6006 -17.2998 -75.8008 -17.9004c-48.1992 -1.5 -94.3994 88.5 -107.199 125.2\n+c-9.60059 27.9336 -14.4004 55 -14.4004 81.2002c0 88.7002 59.2998 132.3 115.1 133.2c27 0 61.4004 -19.7002 76.4004 -19.7002c14.2002 0 53 23.5 88.5 20.7002c37.5 -2.90039 65.9004 -17.7002 84.7002 -44.6006c-33.6006 -20.3994 -50.2002 -48.0996 -50 -84.7998z\n+M262.1 343.5c-19.5996 -22.9004 -43.3994 -36.2998 -69.5 -34.2998c-2.19922 27.5996 8.10059 52.0996 25.6006 71.8994c15.8994 18.5 43.7998 33.5 67.8994 34.9004c0.800781 -10.5996 3.30078 -40.0996 -24 -72.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"windows\" unicode=\"&#xf17a;\" \n+d=\"M0 354.3l183.6 25.2998v-177.399h-183.6v152.1zM0 29.7002v149.899h183.6v-175.199zM203.8 1.7002v177.899h244.2v-211.6zM203.8 382.3l244.2 33.7002v-213.8h-244.2v180.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"android\" unicode=\"&#xf17b;\" \n+d=\"M89.5996 243.5v-115.8c0 -15.4004 -12.0996 -27.7002 -27.5 -27.7002c-15.2998 0 -30.0996 12.4004 -30.0996 27.7002v115.8c0 15.0996 14.7998 27.5 30.0996 27.5c15.1006 0 27.5 -12.4004 27.5 -27.5zM100.4 86.5v179.4h247.3v-179.4\n+c0 -16.4004 -13.2002 -29.5996 -29.4004 -29.5996h-20.2002v-61.1006c0 -36.7998 -55.5 -36.7002 -55.5 0v61.1006h-37.1992v-61.1006c0 -36.5996 -55.2002 -36.8994 -55.2002 0l-0.299805 61.1006h-19.9004c-16.4004 0 -29.5996 13.1992 -29.5996 29.5996zM348.4 275.6\n+h-249.101c0 42.8008 25.6006 80 63.6006 99.4004l-19.1006 35.2998c-2.7998 4.90039 4.2998 8 6.7002 3.7998l19.4004 -35.5996c34.8994 15.5 75 14.7002 108.3 0l19.2998 35.5c2.5 4.2998 9.5 1.09961 6.7002 -3.7998l-19.1006 -35.2002\n+c37.7002 -19.4004 63.3008 -56.5996 63.3008 -99.4004zM177.7 331.1c0 5.7002 -4.60059 10.5 -10.5 10.5c-5.7002 0 -10.2002 -4.7998 -10.2002 -10.5c0 -5.69922 4.59961 -10.5 10.2002 -10.5c5.89941 0 10.5 4.80078 10.5 10.5zM291.1 331.1\n+c0 5.7002 -4.59961 10.5 -10.1992 10.5c-5.90039 0 -10.5 -4.7998 -10.5 -10.5c0 -5.69922 4.59961 -10.5 10.5 -10.5c5.59961 0 10.1992 4.80078 10.1992 10.5zM385.9 271c15.2998 0 30.0996 -12.0996 30.0996 -27.5v-115.8\n+c0 -15.2998 -14.7002 -27.7002 -30.0996 -27.7002c-15.1006 0 -27.5 12.2998 -27.5 27.7002v115.8c0 15.4004 12.3994 27.5 27.5 27.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"linux\" unicode=\"&#xf17c;\" \n+d=\"M220.8 324.7c-1.09961 0.599609 -3.09961 0.399414 -3.39941 1.7002c-0.200195 0.399414 0.199219 0.899414 0.599609 1.09961c1.59961 0.900391 3.7998 0.599609 5.5 -0.0996094c1.2998 -0.600586 3.40039 -1.5 3.2002 -2.90039\n+c-0.100586 -1.09961 -1.7998 -1.5 -2.90039 -1.5c-1.2002 0 -2 1.2002 -3 1.7002zM198.9 323c-1 -0.0996094 -2.7002 0.400391 -2.80078 1.40039c-0.199219 1.39941 1.90039 2.2998 3.2002 2.89941c1.7002 0.700195 3.90039 1 5.5 0.100586\n+c0.400391 -0.200195 0.799805 -0.700195 0.600586 -1.10059c-0.400391 -1.2002 -2.40039 -1 -3.5 -1.59961c-1 -0.5 -1.80078 -1.7002 -3 -1.7002zM420 44.2002c11.0996 -12.4004 15.9004 -21.5 15.5 -29.7002c-0.5 -8.2002 -6.5 -13.7998 -13.9004 -18.2998\n+c-14.8994 -9 -37.2998 -15.7998 -50.8994 -32.2002c-14.2002 -16.9004 -31.7002 -26.5996 -48.2998 -27.9004c-16.5 -1.2998 -32 6.30078 -40.3008 23v0.100586c-1.09961 2.09961 -1.89941 4.39941 -2.5 6.7002c-21.5 -1.2002 -40.1992 5.2998 -55.0996 4.09961\n+c-22 -1.2002 -35.7998 -6.5 -48.2998 -6.59961c-4.7998 -10.6006 -14.2998 -17.6006 -25.9004 -20.2002c-16 -3.7002 -36.0996 0 -55.8994 10.3994c-18.5 9.80078 -42 8.90039 -59.3008 12.5c-8.69922 1.80078 -16.2998 5 -20.0996 12.3008\n+c-3.7002 7.2998 -3 17.2998 2.2002 31.6992c1.7002 5.10059 0.399414 12.7002 -0.799805 20.8008c-0.600586 3.89941 -1.2002 7.89941 -1.2002 11.7998c0 4.2998 0.700195 8.5 2.7998 12.3994c4.5 8.5 11.7998 12.1006 18.5 14.5c6.7002 2.40039 12.7998 4 17 8.30078\n+c5.2002 5.5 10.0996 14.3994 16.5996 20.1992c-2.59961 17.2002 0.200195 35.4004 6.2002 53.3008c12.6006 37.8994 39.2002 74.1992 58.1006 96.6992c16.0996 22.9004 20.7998 41.3008 22.5 64.7002c1.09961 31.7998 -24.5 135.4 77.8994 135.2\n+c80.9004 -0.0996094 76.2998 -85.4004 75.7998 -131.3c-0.299805 -30.1006 16.3008 -50.5 33.4004 -72c15.2002 -18 35.0996 -44.2998 46.5 -74.4004c9.2998 -24.5996 12.9004 -51.7998 3.7002 -79.0996c1.39941 -0.5 2.7998 -1.2002 4.09961 -2\n+c1.40039 -0.799805 2.7002 -1.7998 4 -2.90039c6.60059 -5.59961 8.7002 -14.2998 10.5 -22.3994c1.90039 -8.10059 3.60059 -15.7002 7.2002 -19.7002zM223.7 360.7c-3.2002 -7.2002 -3.90039 -14.9004 -2.90039 -21.7998c3.60059 -0.900391 8.90039 -2.40039 13 -4.40039\n+c-2.09961 12.2002 4.5 23.5 11.7998 23c8.90039 -0.299805 13.9004 -15.5 9.10059 -27.2998c-0.799805 -1.90039 -2.7998 -3.40039 -3.90039 -4.60059c6.7002 -2.2998 11 -4.09961 12.6006 -4.89941c7.89941 9.5 10.7998 26.2002 4.2998 40.3994\n+c-9.7998 21.4004 -34.2002 21.8008 -44 -0.399414zM183 372.2c-18.9004 0 -24 -37.5 -8.40039 -52.1006c7.80078 5.7002 6.90039 4.7002 5.90039 5.5c-8 6.90039 -6.59961 27.4004 1.7998 28.1006c6.2998 0.5 10.7998 -10.7002 9.60059 -19.6006\n+c3.09961 2.10059 6.69922 3.60059 10.1992 4.60059c1.7002 19.2998 -9 33.5 -19.0996 33.5zM169.4 311.5c-4.2002 -3.2998 -5.60059 -7.40039 -4.2002 -12.2998c1.5 -4.90039 6.09961 -10.5 14.7002 -15.2998c7.7998 -4.60059 12 -11.5 20 -15\n+c2.59961 -1.10059 5.69922 -1.90039 9.59961 -2.10059c18.4004 -1.09961 27.0996 11.2998 38.2002 14.9004c11.7002 3.7002 20.0996 11 22.7002 18.0996c3.19922 8.5 -2.10059 14.7002 -10.5 18.2002c-11.3008 4.90039 -16.3008 5.2002 -22.6006 9.2998\n+c-10.2998 6.60059 -18.7998 8.90039 -25.8994 8.90039c-14.4004 0 -23.2002 -9.7998 -27.9004 -14.2002c-0.5 -0.5 -7.90039 -5.90039 -14.0996 -10.5zM172.7 -22.5c2.09961 20.5 -31.5 49 -41 68.9004l-19.6006 35.5996c-6.7998 9.2002 -13.7998 14.7998 -21.8994 16\n+c-7.7002 1.2002 -12.6006 -1.40039 -17.7002 -6.90039c-4.7998 -5.09961 -8.7998 -12.2998 -14.2998 -18c-7.7998 -6.5 -9.2998 -6.19922 -19.6006 -9.89941c-6.2998 -2.2002 -11.2998 -4.60059 -14.7998 -11.2998c-2.7002 -5 -2.09961 -12.2002 -0.899414 -20\n+c1.19922 -7.90039 3 -16.3008 0.599609 -23.9004v-0.200195c-5 -13.7002 -5 -21.7002 -2.59961 -26.3994c7.89941 -15.4004 46.5996 -6.10059 76.5 -21.9004c31.3994 -16.4004 72.5996 -17.0996 75.2998 18zM171.3 3.40039c37.6006 -25.7002 82.2002 -15.7002 114.3 7.19922\n+c3.2002 11 6.30078 21.3008 6.80078 29c0.799805 15.2002 1.59961 28.7002 4.39941 39.9004c3.10059 12.5996 9.2998 23.0996 21.4004 27.2998c2.2998 21.1006 18.7002 21.1006 38.2998 12.5c18.9004 -8.5 26 -16 22.7998 -26.0996c1 0 2 0.0996094 4.2002 0\n+c5.2002 16.8994 -14.2998 28 -30.7002 34.7998c2.90039 12 2.40039 24.0996 -0.399414 35.7002c-6 25.2998 -22.6006 47.7998 -35.2002 59c-2.2998 0.0996094 -2.10059 -1.90039 2.59961 -6.5c11.6006 -10.7002 37.1006 -49.2002 23.2998 -84.9004\n+c-3.89941 1 -7.59961 1.5 -10.8994 1.40039c-5.2998 29.0996 -17.5 53.2002 -23.6006 64.5996c-11.5 21.4004 -29.5 65.2998 -37.1992 95.7002c-4.5 -6.40039 -12.4004 -11.9004 -22.3008 -15c-4.69922 -1.5 -9.69922 -5.5 -15.8994 -9\n+c-13.9004 -8 -30 -8.7998 -42.4004 1.2002c-4.5 3.59961 -8 7.59961 -12.5996 10.2998c-1.60059 0.900391 -5.10059 3.2998 -6.2002 4.09961c-2 -37.7998 -27.2998 -85.2998 -39.2998 -112.699c-8.2998 -19.7002 -13.2002 -40.8008 -13.7998 -61.5\n+c-21.8008 29.0996 -5.90039 66.2998 2.59961 82.3994c9.5 17.6006 11 22.5 8.7002 20.7998c-8.60059 -14 -22 -36.2998 -27.2002 -59.1992c-2.7002 -11.9004 -3.2002 -24 0.299805 -35.2002s11.1006 -21.5 24.6006 -29.9004c0 0 24.7998 -14.2998 38.2998 -32.5\n+c7.39941 -10 9.7002 -18.7002 7.39941 -24.8994c-2.5 -6.7002 -9.59961 -8.90039 -16.6992 -8.90039c4.7998 -6 10.2998 -13 14.3994 -19.5996zM428.7 14.9004c0.299805 5.09961 -3.10059 13 -13.7002 24.5996c-10 11.2998 -7.2002 33.0996 -17.0996 41.5996\n+c-6.90039 6 -13.6006 5.40039 -22.6006 5.10059c-7.7002 -8.7998 -25.7998 -19.6006 -38.3994 -16.2998c-11.5 2.89941 -18 16.2998 -18.8008 29.5c-0.299805 -0.200195 -0.699219 -0.300781 -1 -0.5c-7.09961 -3.90039 -11.0996 -10.8008 -13.6992 -21.1006\n+c-2.5 -10.2002 -3.40039 -23.5 -4.2002 -38.7002c-0.700195 -11.7998 -6.2002 -26.3994 -9.90039 -40.5996c-3.5 -13.2002 -5.7998 -25.2002 -1.09961 -36.2998c7.2002 -14.5 19.5 -20.4004 33.7002 -19.2998c14.1992 1.09961 30.3994 9.7998 43.5996 25.5\n+c22 26.5996 62.2998 29.6992 63.2002 46.5zM173.3 299.3c-3.5 2.7998 -3.09961 6.60059 -1.7002 6.5c2.40039 -0.299805 2.80078 -3.5 4.30078 -4.89941c2 -1.90039 4.59961 -4.40039 7.69922 -6.90039c6.2002 -4.90039 14.5 -9.7002 24.9004 -9.7002\n+s22.5 6 29.9004 10.2002c4.19922 2.40039 9.5 6.59961 13.8994 9.7998c3.40039 2.5 3.2002 5.40039 6 5.10059c2.7998 -0.300781 0.799805 -3.2002 -3.09961 -6.60059c-3.90039 -3.39941 -9.90039 -7.7998 -14.7998 -10.3994\n+c-9.30078 -4.90039 -20.2002 -10.8008 -31.8008 -10.8008c-11.5 0 -20.6992 5.40039 -27.2998 10.6006c-3.2998 2.59961 -6 5.2002 -8 7.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"dribbble\" unicode=\"&#xf17d;\" horiz-adv-x=\"512\" \n+d=\"M256 440c136.748 0 248 -111.252 248 -248s-111.252 -248 -248 -248s-248 111.252 -248 248s111.252 248 248 248zM419.97 325.634c-4.46582 -6.04102 -39.9629 -51.5459 -118.284 -83.5225c7.43652 -15.2217 12.8652 -27.5732 18.6172 -41.6143\n+c70.4844 8.86426 140.519 -5.34082 147.502 -6.81836c-0.46582 49.998 -18.332 95.9092 -47.835 131.955zM396.421 350.13c-52.0947 46.2188 -122.885 63.6816 -190.061 47.4893c5.85449 -7.83984 44.3281 -60.2324 79.04 -124.008\n+c75.3232 28.2324 107.211 71.0918 111.021 76.5186zM165.941 383.38c-59.2637 -27.9531 -103.562 -82.585 -117.298 -148.318c9.47461 -0.125 96.7471 -0.503906 195.834 25.8096c-35.0986 62.3926 -72.9512 114.85 -78.5361 122.509zM44.1699 191.677\n+c0 -54.4072 20.624 -104.082 54.457 -141.636c34.3369 58.7793 103.932 120.731 180.531 142.306c-5.31738 12.0342 -11.1104 24.0811 -17.1738 35.9492c-105.786 -31.6592 -208.438 -30.3359 -217.706 -30.1455c-0.0654297 -2.15137 -0.108398 -4.30762 -0.108398 -6.47363\n+zM125.977 24.5645c62.7539 -48.9355 144.656 -56.8955 212.769 -27.8828c-3.15039 18.585 -15.4492 83.3555 -45.1895 160.639c-85.4004 -29.1348 -145.452 -87.5234 -167.579 -132.756zM374.357 16.0752c47.5215 32.1338 81.3525 83.0371 90.7949 141.978\n+c-7.24707 2.28711 -65.5674 19.6816 -131.947 9.05566c27.7061 -76.1367 38.9805 -138.147 41.1523 -151.033z\" \u002F>\n+    \u003Cglyph glyph-name=\"skype\" unicode=\"&#xf17e;\" \n+d=\"M424.7 148.2c14.5996 -18.9004 23.2998 -42.5 23.2002 -68.1006c0 -61.7998 -50.2002 -112 -112 -112c-25.6006 0 -49.2002 8.7002 -68.2002 23.3008c-14.1006 -3 -28.9004 -4.7002 -43.7998 -4.7002c-113.4 0 -205.301 91.7998 -205.301 205.3\n+c0 14.9004 1.80078 29.7998 4.7002 43.7998c-14.5996 18.9004 -23.2998 42.5 -23.2998 68.2002c0 61.7998 50.2002 112 112 112c25.7002 0 49.2998 -8.7002 68.2998 -23.4004c14.1006 3 28.9004 4.7002 43.7998 4.7002c113.4 0 205.301 -91.7998 205.301 -205.3\n+c0 -14.9004 -1.80078 -29.7998 -4.7002 -43.7998zM230.1 56.7002c54.9004 0 112 27.3994 112 86.5c0 50.7998 -49.2998 68.2998 -90.6992 77.5996c-48.3008 11.2002 -69.1006 13.2002 -69.1006 33c0 15.5 16.2998 22.5 42 22.5c45.7998 0 46.7002 -33.5 75 -33.5\n+c18.9004 0 30.2998 14.9004 30.2998 31.7998c0 33.5 -55.6992 55.4004 -110.8 55.4004c-50.5 0 -109.1 -21.9004 -109.1 -81.0996c0 -65.2002 55.2998 -71.8008 117.8 -87.2002c26 -6.40039 42 -9.2998 42 -28c0 -14.9004 -16.5996 -26.2998 -42.2998 -26.2998\n+c-54 0 -56.9004 44.8994 -88.1006 44.8994c-20.5 0 -29.5 -14.5996 -29.5 -30.5996c0 -35.7998 54.9004 -65 120.5 -65z\" \u002F>\n+    \u003Cglyph glyph-name=\"foursquare\" unicode=\"&#xf180;\" horiz-adv-x=\"368\" \n+d=\"M323.1 445c40 0 50.7002 -22.7998 42.2002 -65.2002l-48.5996 -243c-3.7002 -14.5 -9.2002 -39.7002 -44.2998 -39.7002h-83.4004c-3.40039 0 -3.7002 0.300781 -6.7998 -3.09961c0 0 -2.2002 -2.5 -131.101 -151.9\n+c-10.0996 -11.6992 -26.6992 -9.59961 -32.8994 -7.09961c-6.10059 2.40039 -18.2002 9.7998 -18.2002 30.0996v433.801c0 17.7998 12.4004 46.0996 49.9004 46.0996h273.199zM306.8 371.2c2.10059 9.7998 -5.2998 17.5 -13.5 17.5h-219\n+c-9.7998 0 -16.5996 -8.90039 -16.5996 -16.6006v-338.8c0 -0.899414 0.899414 -1.2002 1.7998 -0.299805c80.5996 96.9004 89.5 108.3 89.5 108.3c9.2998 10.7998 13 12.6006 26.5 12.6006h73.5c10.0996 0 16 8.59961 16.9004 13.5\n+c0.899414 5 9.59961 49.8994 11.3994 58.7998c1.7998 9 -6.5 18.2002 -14.7998 18.2002h-90.4004c-12 0 -20.5996 8.59961 -20.5996 20.5996v13c0 12 8.59961 20.2998 20.5996 20.2998h106.4c7.40039 0 15.7002 6.7002 16.9004 13.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"trello\" unicode=\"&#xf181;\" \n+d=\"M392.3 416c30.7998 -0.200195 55.7002 -25.2002 55.6006 -56v-336c0 -30.7998 -24.9004 -55.7998 -55.7002 -56h-336.2c-30.9004 0 -56 25.0996 -56 56c0 340 -0.0996094 336 0 336c0 30.9004 25.0996 56 56.0996 56h336.2zM197 76.7002h0.0996094v254.2\n+c0 14.8994 -12.0996 26.8994 -26.8994 26.8994h-82.9004c-14.8994 0 -26.8994 -12.0996 -26.8994 -26.8994v-254.2c0.0996094 -14.7998 12.1992 -26.7002 27 -26.6006h82.6992c14.8008 0 26.7002 11.9004 26.9004 26.6006zM390.1 188.7v142.1\n+c0 14.9004 -12.0996 26.9004 -26.8994 26.9004h-81.1006c-14.7998 0 -26.7998 -12.1006 -26.7998 -26.9004v-142.1c0 -14.9004 12.1006 -26.9004 26.9004 -26.9004h81c14.8994 0 26.8994 12.1006 26.8994 26.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"gratipay\" unicode=\"&#xf184;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM362.6 213.6c8.80078 12 19.1006 50.4004 -13.7998 72c-27.7002 18.1006 -54.2002 4.2002 -68.0996 -11.8994c-15.1006 -16.9004 -45.7998 -17.9004 -61.7002 0\n+c-13.9004 16.0996 -40.4004 30 -68.5 11.8994c-32.7002 -21.5996 -22.2998 -60.0996 -13.5996 -72l112.699 -152.699z\" \u002F>\n+    \u003Cglyph glyph-name=\"vk\" unicode=\"&#xf189;\" horiz-adv-x=\"576\" \n+d=\"M545 330.3c-7.40039 -34.2998 -79.2998 -135.5 -79.4004 -135.6c-6.19922 -10 -8.69922 -15 0 -26.2002c3.40039 -4.7998 79.1006 -76.5996 90.3008 -111.5c4.89941 -16.5996 -3.60059 -25 -20.4004 -25h-58.9004c-22.3994 0 -29 17.9004 -69 57.9004\n+c-35 33.6992 -50 38.0996 -58.6992 38.0996c-18.8008 0 -15.4004 -6.2998 -15.4004 -73.0996c0 -14.5 -4.59961 -22.9004 -42.0996 -22.9004c-62.4004 0 -131 37.9004 -179.7 107.8c-73.1006 102.4 -93.1006 179.9 -93.1006 195.5c0 8.7998 3.40039 16.7002 20.2002 16.7002\n+h58.9004c15.0996 0 20.7998 -6.59961 26.5996 -22.9004c28.7998 -84 77.4004 -157.399 97.4004 -157.399c7.5 0 10.8994 3.5 10.8994 22.5v86.7998c-2.19922 40 -23.3994 43.2998 -23.3994 57.5c0 6.5 5.59961 13.5 15 13.5h92.5996\n+c12.4004 0 16.6006 -6.7002 16.6006 -21.7002v-116.7c0 -12.5 5.69922 -16.8994 9.39941 -16.8994c7.5 0 13.7998 4.39941 27.5 18.0996c42.4004 47.4004 72.4004 120.5 72.4004 120.5c3.7002 8.7998 10.5996 16.7002 25.5996 16.7002h58.9004\n+c17.7998 0 21.5 -9.2002 17.7998 -21.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"weibo\" unicode=\"&#xf18a;\" horiz-adv-x=\"512\" \n+d=\"M407 270.4c7.59961 24 -13.4004 46.7998 -37.4004 41.6992c-22 -4.7998 -28.7998 28.1006 -7.09961 32.8008c50.0996 10.8994 92.2998 -37.1006 76.5 -84.8008c-6.7998 -21.1992 -38.7998 -10.7998 -32 10.3008zM214.8 1.2998c-106.3 0 -214.8 51.4004 -214.8 136.3\n+c0 44.3008 28 95.4004 76.2998 143.7c99.7002 99.7002 203.2 100.9 173.601 5.7002c-4 -13.0996 12.2998 -5.7002 12.2998 -6c79.5 33.5996 140.5 16.7998 114 -51.4004c-3.7002 -9.39941 1.09961 -10.8994 8.2998 -13.0996c135.7 -42.2998 34.7998 -215.2 -169.7 -215.2z\n+M358.5 147.6c-5.40039 55.7002 -78.5 94 -163.4 85.7002c-84.7998 -8.59961 -148.8 -60.2998 -143.399 -116c5.39941 -55.7002 78.5 -94 163.399 -85.7002c84.8008 8.60059 148.801 60.3008 143.4 116zM347.9 412.9c102.3 21.5996 189.3 -74.5 157.399 -174.301\n+c-8.2998 -25 -44.7998 -12.1992 -37.3994 12c23.0996 71.2002 -39.4004 139.2 -111.7 124c-25.1006 -5.39941 -34.2002 32.7002 -8.2998 38.3008zM269.4 101.9c-17.1006 -38.8008 -66.8008 -60 -109.101 -46.3008c-40.7998 13.1006 -58 53.4004 -40.2998 89.7002\n+c17.7002 35.4004 63.0996 55.4004 103.4 45.1006c42 -10.8008 63.0996 -50.2002 46 -88.5zM183.1 131.9c-12.8994 5.39941 -30 -0.300781 -38 -12.9004c-8.2998 -12.9004 -4.2998 -28 8.60059 -34c13.0996 -6 30.7998 -0.299805 39.0996 12.9004\n+c8 13.0996 3.7002 28.2998 -9.7002 34zM215.7 145.3c-5.10059 1.7002 -11.4004 -0.599609 -14.2998 -5.39941c-2.90039 -5.10059 -1.40039 -10.6006 3.69922 -12.9004c5.10059 -2 11.7002 0.299805 14.6006 5.40039c2.7998 5.19922 1.09961 10.8994 -4 12.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"renren\" unicode=\"&#xf18b;\" horiz-adv-x=\"512\" \n+d=\"M214 278.9c0 -110.4 -61 -205.4 -147.6 -247.4c-36.4004 43.2998 -58.4004 98.7998 -58.4004 159.9c0 122.699 89.0996 224.399 206 244.1v-156.6zM255 -56c-42.9004 0 -83.2998 11 -118.5 30.4004c57.2002 36.0996 103.4 90.6992 118.5 154.6\n+c15.5 -63.9004 61.7002 -118.5 118.8 -154.7c-35.0996 -19.2998 -75.5 -30.2998 -118.8 -30.2998zM445.6 31.5c-86.5996 42 -147.6 136.9 -147.6 247.4v156.6c116.9 -19.7002 206 -121.4 206 -244.1c0 -61.1006 -22 -116.601 -58.4004 -159.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"pagelines\" unicode=\"&#xf18c;\" horiz-adv-x=\"384\" \n+d=\"M384 135.3c-55.0996 -136.7 -187.1 -54 -187.1 -54c-40.5 -81.7998 -107.4 -134.399 -184.601 -134.7c-16.0996 0 -16.5996 24.4004 0 24.4004c64.4004 0.299805 120.5 42.7002 157.2 110.1c-41.0996 -15.8994 -118.6 -27.8994 -161.6 82.2002\n+c109 44.9004 159.1 -11.2002 178.3 -45.5c9.89941 24.4004 17 50.9004 21.5996 79.7002c0 0 -139.7 -21.9004 -149.5 98.0996c119.101 47.9004 152.601 -76.6992 152.601 -76.6992c1.59961 16.6992 3.2998 52.5996 3.2998 53.3994c0 0 -106.3 73.7002 -38.1006 165.2\n+c124.601 -43 61.4004 -162.4 61.4004 -162.4c0.5 -1.59961 0.5 -23.7998 0 -33.3994c0 0 45.2002 89 136.4 57.5c-4.2002 -134 -141.9 -106.4 -141.9 -106.4c-4.40039 -27.3994 -11.2002 -53.3994 -20 -77.5c0 0 83 91.7998 172 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"stack-exchange\" unicode=\"&#xf18d;\" \n+d=\"M17.7002 115.7h412.7v-22c0 -37.7002 -29.3008 -68 -65.3008 -68h-19l-86.7998 -89.7002v89.7002h-176.3c-36 0 -65.2998 30.2998 -65.2998 68v22zM17.7002 139.3v85h412.7v-85h-412.7zM17.7002 248.7v85h412.7v-85h-412.7zM365 448\n+c36 0 65.2998 -30.2998 65.4004 -67.7002v-22.2998h-412.7v22.2998c0 37.4004 29.2998 67.7002 65.2998 67.7002h282z\" \u002F>\n+    \u003Cglyph glyph-name=\"vimeo-square\" unicode=\"&#xf194;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM383.8 266.4c1.90039 41.5996 -13.5996 63 -46.5 64c-44.2998 1.39941 -74.3994 -23.6006 -90.0996 -75.1006\n+c19.5996 8.40039 48.5996 10.6006 45.2002 -22.2002c-0.900391 -11.0996 -8.10059 -27.0996 -21.5 -48.2998c-37.2002 -58.7002 -46.3008 -39.0996 -66.8008 90.5c-5.7998 36.5 -21.0996 53.5 -46 51.1006c-22 -2 -57.1992 -38 -94.0996 -70.4004l15 -19.4004\n+c14.2998 10.1006 22.7002 15.1006 25.0996 15.1006c20.8008 0 31.5 -54.1006 56.7002 -146.4c12.9004 -34.3994 28.6006 -51.5996 47.2998 -51.5996c30.1006 0 66.9004 28.2998 110.4 84.7998c42.0996 54.0996 63.9004 96.7998 65.2998 127.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"slack\" unicode=\"&#xf198;\" \n+d=\"M94.1201 132.9c0 -25.9004 -21.1602 -47.0605 -47.0605 -47.0605c-25.8994 0 -47.0596 21.1602 -47.0596 47.0605c0 25.8994 21.1602 47.0596 47.0596 47.0596h47.0605v-47.0596zM117.84 132.9c0 25.8994 21.1602 47.0596 47.0605 47.0596\n+c25.8994 0 47.0596 -21.1602 47.0596 -47.0596v-117.841c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596c-25.9004 0 -47.0605 21.1602 -47.0605 47.0596v117.841zM164.9 321.88c-25.9004 0 -47.0605 21.1602 -47.0605 47.0605c0 25.8994 21.1602 47.0596 47.0605 47.0596\n+c25.8994 0 47.0596 -21.1602 47.0596 -47.0596v-47.0605h-47.0596zM164.9 298.16c25.8994 0 47.0596 -21.1602 47.0596 -47.0605c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596h-117.841c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596\n+c0 25.9004 21.1602 47.0605 47.0596 47.0605h117.841zM353.88 251.1c0 25.9004 21.1602 47.0605 47.0605 47.0605c25.8994 0 47.0596 -21.1602 47.0596 -47.0605c0 -25.8994 -21.1602 -47.0596 -47.0596 -47.0596h-47.0605v47.0596zM330.16 251.1\n+c0 -25.8994 -21.1602 -47.0596 -47.0605 -47.0596c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596v117.841c0 25.8994 21.1602 47.0596 47.0596 47.0596c25.9004 0 47.0605 -21.1602 47.0605 -47.0596v-117.841zM283.1 62.1201c25.9004 0 47.0605 -21.1602 47.0605 -47.0605\n+c0 -25.8994 -21.1602 -47.0596 -47.0605 -47.0596c-25.8994 0 -47.0596 21.1602 -47.0596 47.0596v47.0605h47.0596zM283.1 85.8398c-25.8994 0 -47.0596 21.1602 -47.0596 47.0605c0 25.8994 21.1602 47.0596 47.0596 47.0596h117.841\n+c25.8994 0 47.0596 -21.1602 47.0596 -47.0596c0 -25.9004 -21.1602 -47.0605 -47.0596 -47.0605h-117.841z\" \u002F>\n+    \u003Cglyph glyph-name=\"wordpress\" unicode=\"&#xf19a;\" horiz-adv-x=\"512\" \n+d=\"M61.7002 278.6l101.5 -278c-71 34.4004 -119.9 107.2 -119.9 191.4c0 30.9004 6.60059 60.0996 18.4004 86.5996zM399.6 202.7c0 -18.2002 -7 -39.2998 -16 -68.7002l-21.1992 -70.9004l-76.9004 228.7c12.7998 0.700195 24.2998 2 24.2998 2\n+c11.4004 1.2998 10.1006 18.2002 -1.39941 17.5c0 0 -34.5 -2.7002 -56.7002 -2.7002c-20.9004 0 -56 2.7002 -56 2.7002c-11.4004 0.700195 -12.7998 -16.7998 -1.2998 -17.5c0 0 10.7998 -1.2998 22.2998 -2l33.0996 -90.7998l-46.5996 -139.6l-77.5 230.399\n+c12.7998 0.700195 24.2998 2 24.2998 2c11.4004 1.2998 10.0996 18.2002 -1.40039 17.5c0 0 -34.5 -2.7002 -56.6992 -2.7002c-4 0 -8.7002 0.100586 -13.7002 0.300781c38.0996 57.7998 103.5 95.8994 177.8 95.8994c55.4004 0 105.8 -21.2002 143.7 -55.8994\n+c-1 0.0996094 -1.90039 0.199219 -2.7998 0.199219c-20.9004 0 -35.7002 -18.1992 -35.7002 -37.7998c0 -17.5 10.0996 -32.3994 20.8994 -49.8994c8.10059 -14.2002 17.5 -32.4004 17.5 -58.7002zM259.7 173.4l65.3994 -179.2c0.400391 -1 0.900391 -2 1.5 -2.90039\n+c-22.0996 -7.7998 -45.7998 -12.0996 -70.5996 -12.0996c-20.9004 0 -41 3.09961 -60.0996 8.7002zM442.7 294.1c16.5996 -30.2998 26 -65.0996 26 -102.1c0 -78.5 -42.5 -147 -105.8 -183.9l65 187.9c12.1992 30.4004 16.1992 54.5996 16.1992 76.2002\n+c0 7.89941 -0.5 15.0996 -1.39941 21.8994zM504 192c0 -136.8 -111.3 -248 -248 -248c-136.8 0 -248 111.3 -248 248c0 136.8 111.2 248 248 248c136.7 0 248 -111.2 248 -248zM492.6 192c0 130.5 -106.199 236.6 -236.6 236.6c-130.5 0 -236.6 -106.1 -236.6 -236.6\n+s106.199 -236.6 236.6 -236.6c130.5 0 236.6 106.1 236.6 236.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"openid\" unicode=\"&#xf19b;\" \n+d=\"M271.5 16l-68 -32c-115 10.2998 -203.5 71.5 -203.5 145.8c0 71.5 82.5 131 191.7 144.3v-43c-71.5 -12.5 -124 -53 -124 -101.3c0 -51 58.5 -93.2998 135.7 -103v340l68 33.2002v-384h0.0996094zM448 157l-131.3 28.5l36.7998 20.7002c-19.5 11.5 -43.5 20 -70 24.7998\n+v43c46.2002 -5.5 87.7002 -19.5 120.3 -39.2998l35 19.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"yahoo\" unicode=\"&#xf19e;\" \n+d=\"M252 156l4 -220c-12.7002 2.2002 -23.5 3.90039 -32.2998 3.90039c-8.40039 0 -19.2002 -1.7002 -32.2998 -3.90039l4 220c-55 94.7998 -110.4 196.8 -174 292c11.8994 -3.09961 23 -3.90039 33.1992 -3.90039c9 0 20.4004 0.800781 34.1006 3.90039\n+c40.8994 -72.2002 82.0996 -138.7 135 -225.5c37.2998 61.5996 91.0996 144.1 134.899 225.5c11.1006 -2.90039 22 -3.90039 32.9004 -3.90039c11.5 0 23.2002 1 35 3.90039c-34.4004 -47.9004 -131.6 -216.9 -174.5 -292z\" \u002F>\n+    \u003Cglyph glyph-name=\"google\" unicode=\"&#xf1a0;\" horiz-adv-x=\"488\" \n+d=\"M488 186.2c0 -141.5 -96.9004 -242.2 -240 -242.2c-137.2 0 -248 110.8 -248 248s110.8 248 248 248c66.7998 0 123 -24.5 166.3 -64.9004l-67.5 -64.8994c-88.2998 85.2002 -252.5 21.2002 -252.5 -118.2c0 -86.5 69.1006 -156.6 153.7 -156.6\n+c98.2002 0 135 70.3994 140.8 106.899h-140.8v85.2998h236.1c2.30078 -12.6992 3.90039 -24.8994 3.90039 -41.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"reddit\" unicode=\"&#xf1a1;\" horiz-adv-x=\"512\" \n+d=\"M201.5 142.5c-13.7998 0 -24.9004 11.0996 -24.9004 24.5996c0 13.8008 11.1006 24.9004 24.9004 24.9004c13.5996 0 24.5996 -11.0996 24.5996 -24.9004c0 -13.5996 -11.0996 -24.5996 -24.5996 -24.5996zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248\n+s111 248 248 248s248 -111 248 -248zM371.7 233.2c-9.40039 0 -17.7002 -3.90039 -23.7998 -10c-22.4004 15.5 -52.6006 25.5 -86.1006 26.5996l17.4004 78.2998l55.3994 -12.5c0 -13.5996 11.1006 -24.5996 24.6006 -24.5996c13.7998 0 24.8994 11.2998 24.8994 24.9004\n+c0 13.5996 -11.0996 24.8994 -24.8994 24.8994c-9.7002 0 -18 -5.7998 -22.1006 -13.7998l-61.1992 13.5996c-3 0.800781 -6.10059 -1.39941 -6.90039 -4.39941l-19.0996 -86.4004c-33.2002 -1.39941 -63.1006 -11.2998 -85.5 -26.7998\n+c-6.10059 6.40039 -14.7002 10.2002 -24.1006 10.2002c-34.8994 0 -46.2998 -46.9004 -14.3994 -62.7998c-1.10059 -5 -1.7002 -10.2002 -1.7002 -15.5c0 -52.6006 59.2002 -95.2002 132 -95.2002c73.0996 0 132.3 42.5996 132.3 95.2002\n+c0 5.2998 -0.599609 10.7998 -1.90039 15.7998c31.3008 16 19.8008 62.5 -14.8994 62.5zM302.8 117c2.2002 2.2002 6.10059 2.2002 8.2998 0c2.5 -2.5 2.5 -6.40039 0 -8.59961c-22.8994 -22.8008 -87.3994 -22.8008 -110.199 0c-2.5 2.19922 -2.5 6.09961 0 8.59961\n+c2.19922 2.2002 6.09961 2.2002 8.2998 0c17.5 -17.9004 75.3994 -18.2002 93.5996 0zM310.5 192c13.9004 0 24.9004 -11.0996 24.9004 -24.9004c0 -13.5 -11.1006 -24.5996 -24.9004 -24.5996c-13.5 0 -24.5996 11 -24.5996 24.5996c0 13.8008 11 24.9004 24.5996 24.9004z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"reddit-square\" unicode=\"&#xf1a2;\" \n+d=\"M283.2 102.5c2.7002 -2.7002 2.7002 -6.7998 0 -9.2002c-24.5 -24.5 -93.7998 -24.5996 -118.4 0c-2.7002 2.40039 -2.7002 6.5 0 9.2002c2.40039 2.40039 6.5 2.40039 8.90039 0c18.7002 -19.2002 81 -19.5996 100.5 0c2.39941 2.2998 6.59961 2.2998 9 0zM191.9 156.3\n+c0 -14.5996 -11.9004 -26.5 -26.5 -26.5c-14.9004 0 -26.8008 11.9004 -26.8008 26.5c0 14.9004 11.9004 26.7998 26.8008 26.7998c14.5996 0 26.5 -11.8994 26.5 -26.7998zM282.6 183.1c14.9004 0 26.8008 -11.8994 26.8008 -26.7998\n+c0 -14.5996 -11.9004 -26.5 -26.8008 -26.5c-14.5996 0 -26.5 11.9004 -26.5 26.5c0 14.9004 11.9004 26.7998 26.5 26.7998zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM348.3 227.4\n+c-10.0996 0 -19 -4.2002 -25.5996 -10.7002c-24.1006 16.7002 -56.5 27.3994 -92.5 28.5996l18.7002 84.2002l59.5 -13.4004c0 -14.5996 11.8994 -26.5 26.5 -26.5c14.8994 0 26.7998 12.2002 26.7998 26.8008c0 14.5996 -11.9004 26.7998 -26.7998 26.7998\n+c-10.4004 0 -19.3008 -6.2002 -23.8008 -14.9004l-65.6992 14.6006c-3.30078 0.899414 -6.5 -1.5 -7.40039 -4.80078l-20.5 -92.7998c-35.7002 -1.5 -67.7998 -12.2002 -91.9004 -28.8994c-6.5 6.7998 -15.7998 11 -25.8994 11c-37.5 0 -49.7998 -50.4004 -15.5 -67.5\n+c-1.2002 -5.40039 -1.7998 -11 -1.7998 -16.7002c0 -56.5 63.6992 -102.3 141.899 -102.3c78.5 0 142.2 45.7998 142.2 102.3c0 5.7002 -0.599609 11.5996 -2.09961 17c33.5996 17.2002 21.1992 67.2002 -16.1006 67.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"stumbleupon-circle\" unicode=\"&#xf1a3;\" horiz-adv-x=\"496\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 262.5c9.7998 0 17.7998 -8 17.7002 -17.5996v-20.6006l22.8994 -10.7002l34.1006 10.1006v23.7002c0 40.2998 -34 72.5996 -74.7002 72.5996\n+c-40.5 0 -74.7002 -32.0996 -74.7002 -72.0996v-108.4c0 -9.90039 -8 -17.7998 -17.7998 -17.7998s-17.7998 7.7998 -17.7998 17.7998v45.7998h-57.2998v-46.5c0 -41.3994 33.5 -74.8994 74.8994 -74.8994c41 0 74.9004 33 74.9004 73.8994v106.9\n+c0 9.7998 8 17.7998 17.7998 17.7998zM423.6 138.9c0 0 0 0.5 0.100586 46.3994h-57.2998v-48c0 -9.7002 -8 -17.5996 -17.8008 -17.5996c-9.7998 0 -17.7998 7.7998 -17.7998 17.5996v47.1006l-34.0996 -10.1006l-22.9004 10.7002v-46.7998\n+c0 -41 33.7002 -74.2002 74.9004 -74.2002c41.3994 0 74.8994 33.5 74.8994 74.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"stumbleupon\" unicode=\"&#xf1a4;\" horiz-adv-x=\"512\" \n+d=\"M502.9 182v-69.7002c0 -62.0996 -50.3008 -112.399 -112.4 -112.399c-61.7998 0 -112.4 49.7998 -112.4 111.3v70.2002l34.3008 -16l51.0996 15.1992v-70.5996c0 -14.7002 12 -26.5 26.7002 -26.5s26.7998 11.7998 26.7998 26.5v72h85.9004zM278.2 240.2v30.8994\n+c0 14.7002 -12 26.7002 -26.7002 26.7002s-26.7002 -12 -26.7002 -26.7002v-160.3c0 -61.2998 -50.7998 -110.8 -112.399 -110.8c-62.1006 0 -112.4 50.2998 -112.4 112.3v69.7002h86v-68.5996c0 -14.9004 12 -26.7002 26.7002 -26.7002s26.7002 11.7998 26.7002 26.7002\n+v162.399c0 60 51.2998 108.2 112.1 108.2c61 0 112.1 -48.5 112.1 -109v-35.5996l-51.0996 -15.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"delicious\" unicode=\"&#xf1a5;\" \n+d=\"M446.5 380c1 -3.7998 1.5 -7.90039 1.59961 -12v-352.1c0 -26.5 -21.5 -48 -48 -48h-352c-4.09961 0 -8.19922 0.5 -12 1.5c-7.69922 2 -14.5996 5.7998 -20.2998 11c-1.2002 1.09961 -2.2998 2.19922 -3.2998 3.2998c-5.2002 5.7002 -9 12.5996 -11 20.2998\n+c-1 3.7998 -1.5 7.90039 -1.5 12v352c0 26.5 21.5 48 48 47.9004h352c4.09961 0 8.2002 -0.5 12 -1.5c1.90039 -0.400391 3.7002 -1 5.40039 -1.7002c1.89941 -0.700195 3.69922 -1.5 5.5 -2.5c1.39941 -0.700195 2.69922 -1.5 4 -2.40039\n+c1.09961 -0.799805 2.19922 -1.59961 3.2998 -2.5c2.5 -2 4.7998 -4.2998 6.89941 -6.7998c1.7002 -2.09961 3.30078 -4.5 4.7002 -6.90039c1.2998 -2.2998 2.40039 -4.59961 3.2998 -7.09961c0.5 -1.5 1 -3 1.40039 -4.5zM416 16v176h-192v192h-176\n+c-8.7998 0 -16 -7.2002 -16 -16v-176h192v-192h176c8.7998 0 16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"digg\" unicode=\"&#xf1a6;\" horiz-adv-x=\"512\" \n+d=\"M81.7002 275.7v76.2998h51v-250.7h-132.7v174.4h81.7002zM81.7002 142.3v92.2998h-30.7998v-92.2998h30.7998zM378.9 275.7h133.1v-243.7h-133.1v40.7998h81.7998v28.5h-81.7998v174.4zM460.7 142.3v92.2998h-30.7998v-92.2998h30.7998zM225.1 101.3v174.4h133.301\n+v-243.7h-133.301v40.7998h82.1006v28.5h-82.1006zM276.3 234.6v-92.2998h30.7998v92.2998h-30.7998zM153.3 352h51.2998v-51h-51.2998v51zM153.3 275.7h51.2998v-174.4h-51.2998v174.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"pied-piper-pp\" unicode=\"&#xf1a7;\" \n+d=\"M205.3 273.4c0 -21.1006 -14.2002 -38.1006 -31.7002 -38.1006c-7.09961 0 -12.7998 1.2002 -17.1992 3.7002v68c4.39941 2.7002 10.0996 4.2002 17.1992 4.2002c17.5 0 31.7002 -16.9004 31.7002 -37.7998zM257.9 206.4c17.3994 0 31.6992 -17 31.6992 -38.1006\n+c0 -20.8994 -14.2998 -37.7998 -31.6992 -37.7998c-7.10059 0 -12.8008 1.2002 -17.2002 3.7002v68c4.39941 2.7002 10.0996 4.2002 17.2002 4.2002zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\n+c26.5 0 48 -21.5 48 -48zM185 192.9c41 0 74.2002 35.5996 74.2002 79.5996s-33.2002 79.5996 -74.2002 79.5996c-12 0 -24.0996 -3.19922 -34.5996 -8.7998h-45.7002v-206.3l51.7998 10.0996v50.6006c8.59961 -3.10059 18.0996 -4.7998 28.5 -4.7998zM343.4 167.6\n+c0 44 -33.2002 79.6006 -73.9004 79.6006c-3.2002 0 -6.40039 -0.200195 -9.59961 -0.700195c-3.7002 -12.5 -10.1006 -23.7998 -19.2002 -33.4004c-13.7998 -15 -32.2002 -23.7998 -51.7998 -24.7998v-156.3l51.7998 10.0996v50.6006\n+c8.59961 -3.2002 18.2002 -4.7002 28.7002 -4.7002c40.7998 0 74 35.5996 74 79.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"pied-piper-alt\" unicode=\"&#xf1a8;\" horiz-adv-x=\"576\" \n+d=\"M244 202l-27.7002 -5.7002l-1.7002 4.90039c6.7002 0.5 12.7002 3.7002 19.3008 3.7002c3.7998 0 6.89941 -0.900391 10.0996 -2.90039zM379.9 4.09961c9.5 0 28.1992 -45.0996 33 -55.0996c-35.9004 -13.4004 -70.3008 -15.9004 -106 -9.7998l-6.90039 45.0996\n+c15.7998 10.2998 60.9004 19.7998 79.9004 19.7998zM340.8 271c-7.59961 3.5 -63.8994 6.40039 -98.7998 -10c6.2998 11.7998 13.2002 17 25.9004 21.7998c27.2998 10.2998 40.1992 30.5 58.8994 51.1006c11.9004 -8.40039 12 -24.6006 31.6006 -23v-21.8008\n+l6.2998 -0.299805c37.3994 14.4004 74.7002 30.2002 106.6 54.6006c48.2998 36.7998 52.9004 50 81.2998 100l2 2.59961c-0.599609 -14.0996 -6.2998 -27.2998 -12.3994 -39.9004c-30.5 -63.7998 -78.7002 -100.3 -146.8 -116.699\n+c-12.4004 -2.90039 -26.4004 -3.2002 -37.6006 -8.90039c1.40039 -9.7998 13.2002 -18.0996 13.2002 -23c0 -3.40039 -5.5 -7.2002 -7.5 -8.59961c-11.2002 12.8994 -16.0996 19.2998 -22.7002 22.0996zM555.5 448l-0.299805 -1.40039l-0.600586 -0.599609\n+l0.300781 0.900391zM496.3 65.9004c20.1006 -34.2002 43.7002 -54.3008 72.7002 -79.9004c-31 -19.2998 -70.4004 -32.2002 -103.5 -47.2002c-55.2002 46.2998 -23 229.9 -111.5 229.9c-3.5 -0.700195 -2.40039 -0.299805 -4.59961 -1.7002\n+c1.09961 -1.40039 2.59961 -2.90039 3.69922 -4c23.9004 -20.0996 33.4004 -24.4004 34.8008 -58.5996l0.299805 -9.5c0.799805 -21.6006 -5.5 -42.5 -9.7998 -63.5c-25.9004 0.699219 -51.2002 -11 -77.9004 -2.90039c-0.700195 5.90039 -1.09961 30.9004 0.299805 41.0996\n+c1.40039 9.5 33.6006 29.9004 33 43.7002c-5.5 0.600586 -9.2002 -2.59961 -12.3994 -6.89941c-13.3008 -19.5 -47.2002 -41.9004 -71.3008 -41.9004c-16.5996 0 -56.2998 71.5 -76.3994 85.9004c-3.2002 2.2998 -5.2002 5.39941 -7.7998 8.59961\n+c-16.1006 -3.7998 -139.4 -32.2002 -147.4 -32.2002c-6 0 -11.5 4.90039 -11.5 10.9004c0 5.5 3.40039 10.7002 8.90039 11.7998l139.6 30.4004c-9.5 17.1992 12.2998 17.5 21.5 20.0996c3.2002 0.799805 6.2998 4 9.5 4c6.2998 0 11.7998 -8.90039 13.7998 -14.0996\n+c6.2998 1.39941 45.7002 10.5996 49.4004 10.5996c15.2002 0 15.8994 -20.0996 2.89941 -22.7002l-52.2998 -11.5l-0.299805 -4.59961c-0.299805 -10.1006 45.4004 -60.1006 53.4004 -60.1006c18.0996 0 54.8994 41.7002 54.8994 60.1006\n+c0 30.7002 -42.7998 12.5996 -42.7998 33.5996c0 3.5 1.2002 6.60059 2.90039 9.7998l-19.5 5.5c13.0996 13.6006 13.7998 31.7002 10.8994 50.3008c14.7002 2.89941 26.7002 4.59961 41.4004 4.59961c56.8994 0 45.7002 -8.59961 65.5 -54.2998l14.3994 7.2002\n+c-2.2998 -34.2002 -36.1992 -17.5 -35.0996 -31l0.299805 -6c74.7002 2.89941 116.101 -58.6006 150 -115.5zM300.1 19.7998h8.90039l2.90039 -23.7998l-11.8008 -3.40039v27.2002zM231.4 170.2l13.7998 3.5l31.2998 -50.9004l-21 -13.7998zM315.8 15.2998\n+c22.6006 2.5 32.7002 6.2998 59.5 6.2998c0.299805 -1.39941 0.900391 -3.19922 0.900391 -4.59961c0 -7.5 -49.4004 -12.5996 -58.4004 -14.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"drupal\" unicode=\"&#xf1a9;\" \n+d=\"M319.5 333.3c13.5 -8.2998 96.5 -67 96.5 -179.3c0 -112 -88.5 -186 -190.2 -186c-102 0 -193.8 80.2998 -193.8 189.5c0 109 85 167.5 100.8 175.8c18.7002 10.1006 32.2002 15.2998 53.5 32.2998c10.5 8.30078 19.2998 20.2002 22 49.5\n+c15.2002 -18.2998 33.5 -39.5 46.5 -48.2998c21.2002 -14 42.5 -19.5 64.7002 -33.5zM322 7.7002c4.2002 4.2002 1.90039 13.0996 -4.2002 8.5c-8.5 -6.2998 -27.5 -14 -54.5 -14c-34.5 0 -51.5 13.2998 -51.5 13.2998c-6.2002 0 -11.2998 -7.2002 -6.5 -12\n+c26.6006 -24.5 96.6006 -15.9004 116.7 4.2002zM267.5 60.2998c-6.5 -2.7002 -28.4004 -16.7998 -22.4004 -25c2.40039 -3.2998 5.2002 -1.2998 12.2002 4.7002c7.2002 5.7998 12 11 26.7002 11c25.2998 0 18.0996 -19.9004 26.5 -15.7002\n+c9.90039 4.90039 -2.09961 20.9004 -6.2002 23.7002c-7.7998 5.09961 -28.0996 4.90039 -36.7998 1.2998zM360 43c39.0996 -3.2998 64.5 106 15.7998 106c-20 0 -60.5 -41.5 -81.7998 -41.7998c-24.7002 -0.5 -59 49 -108.5 48.5\n+c-66.4004 -0.400391 -90.5996 -78.6006 -51.7998 -105.2c57.2002 -38.7002 130.399 42.9004 161.3 42c19.5 -0.700195 49.7998 -48.5 65 -49.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"joomla\" unicode=\"&#xf1aa;\" \n+d=\"M0.599609 355.9c0 33.2998 26.8008 60.0996 59.8008 60.0996c30 0 54.5 -21.9004 59.1992 -50.2002c32.6006 7.60059 67.1006 -0.599609 96.5 -30l-44.2998 -44.2998c-20.5 20.5 -42.5996 16.2998 -55.3994 3.5c-14.3008 -14.2998 -14.3008 -37.9004 0 -52.2002\n+l99.5 -99.5l-44 -44.2998c-87.7002 87.2002 -49.7002 49.7002 -99.8008 99.7002c-26.7998 26.5 -35 64.7998 -24.7998 98.8994c-26.8994 5.80078 -46.7002 29.7002 -46.7002 58.3008zM130.1 239.5c28.5 28.4004 81.3008 80.7998 99.6006 99.9004\n+c26.5996 26.5996 64.5 35 98.2998 25.0996c4.09961 29.0996 29.2002 51.5996 59.5 51.5996c33 0 59.7998 -26.8994 59.7998 -60.0996c0 -30.2998 -22.7002 -55.4004 -51.8994 -59.5c9.59961 -33.5996 2.2998 -70 -28.9004 -101.2l-44 44.2998\n+c20.5 20.4004 16.2998 42.6006 3.5 55.4004c-14.2998 14.2998 -37.5996 14.2998 -51.9004 0c-10 -10.0996 -89.6992 -89.7998 -99.6992 -99.7998zM396.4 87.2998c29.0996 -4.09961 51.5996 -28.8994 51.5996 -59.0996c0 -33.2998 -26.7998 -60.1006 -59.7998 -60.1006\n+c-29.2002 0 -53.4004 20.7002 -58.9004 48.1006c-34.7002 -10.7998 -75.0996 -2.2002 -102.7 28l44 44.2998c20.4004 -20.5 42.6006 -16.2998 55.4004 -3.5c14.2998 14.2998 14.2998 37.5996 0 51.9004l-99.7002 99.6992l44.2998 44.3008\n+c104.5 -104.4 87.7002 -87.5 99.5 -99.7002c25.4004 -25.4004 34.5 -61.2002 26.3008 -93.9004zM312.1 140.4c-87.2998 -87.3008 -67.3994 -67.7002 -99.5 -99.7002c-25.6992 -25.4004 -61.5 -34.2002 -94.1992 -26c-6.10059 -26.9004 -30 -46.7002 -58.6006 -46.7002\n+c-33 0 -59.7998 26.7998 -59.7998 60.0996c0 28.3008 19.5 52.2002 46.2002 58.2002c-8.5 33.1006 -0.700195 68.1006 29.5 98.2998l44 -44.2998c-20.1006 -20.0996 -16.2998 -42 -3.2002 -55.3994c14.2998 -14.3008 37.5996 -14.3008 51.9004 0\n+c49.2998 49.3994 12.6992 13.3994 99.6992 99.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"behance\" unicode=\"&#xf1b4;\" horiz-adv-x=\"576\" \n+d=\"M232 210.8c43.5996 -12.2998 64.7002 -45.2002 64.7002 -89.7002c0 -72 -60.5 -102.899 -124.9 -102.899h-171.8v354.399h167.1c60.7002 0 113.301 -17.1992 113.301 -87.7998c0 -35.7998 -16.6006 -58.7998 -48.4004 -74zM77.9004 312.1v-82.6992h79\n+c27.7998 0 47.5 12.0996 47.5 42.1992c0 32.6006 -25.3008 40.5 -53.4004 40.5h-73.0996zM161.2 78.4004c31.7002 0 57.5996 11.1992 57.5996 47c0 36.2998 -21.7002 50.5996 -56 50.5996h-84.8994v-97.5996h83.2998zM519.7 319.1h-143.7v34.9004h143.7v-34.9004zM576 142.8\n+c0 -4.5 -0.299805 -9 -0.599609 -13.2002h-185.101c0 -41.0996 21.7002 -65.2998 63 -65.2998c21.4004 0 49 11.6006 55.7002 33.5h62.2002c-19.1006 -58.7002 -58.7998 -86.2998 -120.101 -86.2998c-81 0 -131.3 54.7998 -131.3 134.7c0 77 53.1006 135.8 131.3 135.8\n+c80.5 0 124.9 -63.2998 124.9 -139.2zM390.4 174h114.699c-3 34 -20.7998 54.7998 -56.1992 54.7998c-33.8008 0 -56.2002 -21.0996 -58.5 -54.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"behance-square\" unicode=\"&#xf1b5;\" \n+d=\"M186.5 155c0 -19.2998 -14 -25.4004 -31.2002 -25.4004h-45.0996v52.9004h46c18.5996 -0.0996094 30.2998 -7.7998 30.2998 -27.5zM178.8 237.3c0 -16.2998 -10.7002 -22.8994 -25.7998 -22.8994h-42.7002v44.7998h39.6006c15.1992 0 28.8994 -4.2002 28.8994 -21.9004z\n+M311.1 214.1c19.2002 0 28.8008 -11.1992 30.5 -29.6992h-62.1992c1.19922 18.2998 13.3994 29.6992 31.6992 29.6992zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM271.7 263h77.7998\n+v18.9004h-77.7998v-18.9004zM228.7 152.7c0 24.0996 -11.4004 44.8994 -35 51.5996c17.2002 8.2002 26.2002 17.7002 26.2002 37c0 38.2002 -28.5 47.5 -61.4004 47.5h-90.5v-192h93.0996c34.9004 0.200195 67.6006 16.9004 67.6006 55.9004zM380 167.5\n+c0 41.0996 -24.0996 75.4004 -67.5996 75.4004c-42.4004 0 -71.1006 -31.8008 -71.1006 -73.6006c0 -43.2998 27.2998 -73 71.1006 -73c33.1992 0 54.6992 14.9004 65.0996 46.7998h-33.7002c-3.7002 -11.8994 -18.5996 -18.0996 -30.2002 -18.0996\n+c-22.3994 0 -34.0996 13.0996 -34.0996 35.2998h100.2c0.0996094 2.2998 0.299805 4.7998 0.299805 7.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"steam\" unicode=\"&#xf1b6;\" horiz-adv-x=\"496\" \n+d=\"M496 192c0 -137 -111.2 -248 -248.4 -248c-113.8 0 -209.6 76.2998 -239 180.4l95.2002 -39.3008c6.40039 -32.0996 34.9004 -56.3994 68.9004 -56.3994c39.2002 0 71.8994 32.3994 70.2002 73.5l84.5 60.2002c52.0996 -1.30078 95.7998 40.8994 95.7998 93.5\n+c0 51.5996 -42 93.5 -93.7002 93.5s-93.7002 -42 -93.7002 -93.5v-1.2002l-59.2002 -85.7002c-15.5 0.900391 -30.6992 -3.40039 -43.5 -12.0996l-133.1 55c10.2002 127.699 117.1 228.1 247.6 228.1c137.2 0 248.4 -111 248.4 -248zM155.7 63.7002\n+c19.7998 -8.2002 42.5 1.09961 50.7998 21c8.2998 19.7998 -1.09961 42.5 -20.9004 50.7002l-31.5 13c12.2002 4.59961 26 4.7998 38.9004 -0.600586c13 -5.39941 23.0996 -15.5996 28.5 -28.5996s5.2998 -27.2998 -0.0996094 -40.2998\n+c-11.2002 -26.8008 -42.1006 -39.6006 -69 -28.4004c-10.2119 4.26953 -22.3975 15.8281 -27.2002 25.7998zM329.5 193.6c-34.4004 0 -62.4004 28 -62.4004 62.3008c0 34.2998 28 62.2998 62.4004 62.2998s62.4004 -28 62.4004 -62.2998\n+c0 -34.3008 -27.9004 -62.3008 -62.4004 -62.3008zM329.6 209.2c25.9004 0 46.9004 21 46.9004 46.7998c0 25.9004 -21 46.7998 -46.9004 46.7998c-25.8994 0 -46.8994 -21 -46.8994 -46.7998c0.0996094 -25.7998 21.0996 -46.7998 46.8994 -46.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"steam-square\" unicode=\"&#xf1b7;\" \n+d=\"M185.2 91.5c7.7002 18.5 -1 39.7002 -19.6006 47.4004l-29.5 12.1992c11.4004 4.30078 24.3008 4.5 36.4004 -0.5c12.2002 -5.09961 21.5996 -14.5996 26.7002 -26.6992c5 -12.2002 5 -25.6006 -0.100586 -37.7002c-10.5 -25.1006 -39.3994 -37 -64.5996 -26.5\n+c-11.5996 4.7998 -20.4004 13.5996 -25.4004 24.2002l28.5 -11.8008c18.6006 -7.7998 39.9004 0.900391 47.6006 19.4004zM400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v112.8l89.0996 -36.8994\n+c6 -30 32.7002 -52.7002 64.5 -52.7002c36.6006 0 67.3008 30.2998 65.7002 68.7998l79 56.2998c48.7002 -1.2002 89.6006 38.2998 89.6006 87.5c0 48.2002 -39.3008 87.5 -87.6006 87.5s-87.5996 -39.2998 -87.5996 -87.5v-1.09961l-55.4004 -80.2002\n+c-14.5 0.799805 -28.7002 -3.09961 -40.7002 -11.2998l-116.6 48.0996v160.7c0 26.5 21.5 48 48 48h352zM300.3 193.5c-32.2002 0 -58.3994 26.0996 -58.3994 58.2998s26.1992 58.2998 58.3994 58.2998s58.4004 -26.1992 58.4004 -58.2998\n+c0 -32.0996 -26.2002 -58.2998 -58.4004 -58.2998zM300.4 208.1c24.1992 0 43.8994 19.6006 43.8994 43.8008c0 24.1992 -19.5996 43.7998 -43.8994 43.7998c-24.2002 0 -43.9004 -19.6006 -43.9004 -43.7998c0 -24.2002 19.7002 -43.8008 43.9004 -43.8008z\" \u002F>\n+    \u003Cglyph glyph-name=\"spotify\" unicode=\"&#xf1bc;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM348.7 75.0996c8.09961 0 15.2002 6.30078 15.2002 15.4004s-3.60059 12.5996 -9.7002 16.5c-71.4004 42.7002 -155.101 44.2998 -237 26.2002\n+c-7.5 -1.60059 -13.6006 -6.5 -13.6006 -16.7998c0 -8.10059 6.10059 -15.8008 15.8008 -15.8008c2.89941 0 8 1.60059 11.8994 2.60059c71.7002 14.7002 144.3 13.0996 206.7 -24.5c3.90039 -2.2998 6.5 -3.60059 10.7002 -3.60059zM375.6 140.7\n+c10.9004 0 19.3008 8.7002 19.4004 19.5c0 8.7002 -3.2002 14.8994 -11.2998 19.7002c-49.4004 29.3994 -112.101 45.5 -177 45.5c-41.6006 0 -70 -5.80078 -97.7998 -13.6006c-10.3008 -2.89941 -15.5 -10 -15.5 -20.7002c0 -10.6992 8.69922 -19.3994 19.3994 -19.3994\n+c4.5 0 7.10059 1.2998 11.9004 2.59961c82.8994 22.5 176.1 7.60059 238.6 -29.3994c3.60059 -1.90039 7.10059 -4.2002 12.2998 -4.2002zM406.6 216.9c12.2002 0 23.2002 9.69922 23.2002 23.2998c0 11.8994 -5.09961 18.0996 -12.8994 22.5996\n+c-55.9004 32.6006 -132.4 47.7998 -205.4 47.7998c-42.9004 0 -82.2998 -4.89941 -117.5 -15.1992c-9 -2.60059 -17.4004 -10.3008 -17.4004 -23.9004c0 -13.2998 10.1006 -23.5996 23.3008 -23.5996c4.7998 0 9.2998 1.59961 12.8994 2.59961\n+c82.4004 23 209.7 12.7998 280.9 -29.7002c4.5 -2.59961 7.7002 -3.89941 12.8994 -3.89941z\" \u002F>\n+    \u003Cglyph glyph-name=\"deviantart\" unicode=\"&#xf1bd;\" horiz-adv-x=\"320\" \n+d=\"M320 354.8l-98.2002 -179.1l7.40039 -9.5h90.7998v-127.7h-160.9l-13.5 -9.2002l-43.6992 -84c-0.300781 0 -8.60059 -8.59961 -9.2002 -9.2002h-92.7002v93.2002l93.2002 179.4l-7.40039 9.2002h-85.7998v127.6h156l13.5 9.2002l43.7002 84\n+c0.299805 0 8.59961 8.59961 9.2002 9.2002h97.5996v-93.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"soundcloud\" unicode=\"&#xf1be;\" horiz-adv-x=\"640\" \n+d=\"M111.4 191.7l5.7998 -65l-5.7998 -68.2998c-0.300781 -2.5 -2.2002 -4.40039 -4.40039 -4.40039s-4.2002 1.90039 -4.2002 4.40039l-5.59961 68.2998l5.59961 65c0 2.2002 1.90039 4.2002 4.2002 4.2002c2.2002 0 4.09961 -2 4.40039 -4.2002zM132.8 237.3\n+c2.5 0 4.7002 -2.2002 4.7002 -5l5.7998 -105.6l-5.7998 -68.2998c0 -2.80078 -2.2002 -5 -4.7002 -5c-2.7998 0 -4.7002 2.19922 -5 5l-5 68.2998l5 105.6c0.299805 2.7998 2.2002 5 5 5zM158.3 261.4c2.7998 0 5.2998 -2.2002 5.2998 -5.30078l5.30078 -130\n+l-5.30078 -67.7998c0 -3.09961 -2.5 -5.2998 -5.2998 -5.2998c-3.09961 0 -5.2998 2.2002 -5.59961 5.2998l-4.40039 67.7998l4.40039 130c0.299805 3.10059 2.5 5.30078 5.59961 5.30078zM7.2002 164.8c1.39941 0 2.2002 -1.09961 2.5 -2.5l5.59961 -35.5996l-5.59961 -35\n+c-0.299805 -1.40039 -1.10059 -2.5 -2.5 -2.5c-1.40039 0 -2.2002 1.09961 -2.5 2.5l-4.7002 35l4.7002 35.5996c0.299805 1.40039 1.09961 2.5 2.5 2.5zM30.7998 186.7c1.40039 0 2.5 -1.10059 2.7998 -2.5l7.2002 -57.5l-7.2002 -56.4004\n+c-0.299805 -1.39941 -1.39941 -2.5 -2.7998 -2.5c-1.39941 0 -2.5 1.10059 -2.5 2.7998l-6.39941 56.1006l6.39941 57.5c0 1.39941 1.10059 2.5 2.5 2.5zM56.0996 198.1c1.7002 0 3.10059 -1.39941 3.10059 -3.2998l6.89941 -68.0996l-6.89941 -65.7998\n+c0 -1.7002 -1.40039 -3.10059 -3.10059 -3.10059c-1.59961 0 -3 1.40039 -3.2998 3.10059l-5.7998 65.7998l5.7998 68.0996c0.200195 1.90039 1.60059 3.2998 3.2998 3.2998zM81.4004 200.3c1.89941 0 3.59961 -1.39941 3.89941 -3.59961l6.40039 -70l-6.40039 -67.7998\n+c-0.299805 -2.2002 -2 -3.60059 -3.89941 -3.60059c-1.90039 0 -3.60059 1.40039 -3.60059 3.60059l-5.7998 67.7998l5.7998 70c0 2.2002 1.7002 3.59961 3.60059 3.59961zM322.8 311.2c2.5 -1.40039 4.10059 -4.2002 4.5 -7.2002l3.90039 -177.5l-3.90039 -64.2002\n+c0 -4.7002 -3.89941 -8.59961 -8.59961 -8.59961s-8.60059 3.89941 -8.90039 8.59961l-1.7002 31.7002l-1.69922 32.5l3.2998 176.7v0.799805c0.200195 2.5 1.39941 5 3.2998 6.7002c1.40039 1.09961 3.40039 1.89941 5.59961 1.89941\n+c1.40039 0 3.10059 -0.599609 4.2002 -1.39941zM296.1 295.9c2.2002 -1.40039 3.60059 -3.90039 3.90039 -6.7002l3.2998 -162.8l-3.09961 -58.6006l-0.299805 -6.7002c0 -2.2998 -0.800781 -4.19922 -2.5 -5.59961c-1.40039 -1.40039 -3.40039 -2.5 -5.60059 -2.5\n+c-2.5 0 -4.7002 1.2002 -6.39941 3.09961c-1.10059 1.40039 -1.7002 3 -1.7002 4.7002v0.299805c-3.10059 65.3008 -3.10059 65.6006 -3.10059 65.6006l2.80078 160.8l0.299805 1.7002c0 2.7998 1.39941 5.2998 3.59961 6.7002\n+c1.2998 0.799805 2.7998 1.39941 4.40039 1.39941c1.59961 0 3 -0.599609 4.39941 -1.39941zM184.7 273.4c3.39941 0 5.89941 -2.80078 6.09961 -6.10059l5 -140.6l-5 -67.2002c-0.299805 -3.2998 -2.7998 -5.7998 -6.09961 -5.7998c-3 0 -5.5 2.5 -5.7998 5.7998\n+l-4.40039 67.2002l4.40039 140.6c0 3.2998 2.69922 6.10059 5.7998 6.10059zM561.4 210.6c43.2998 0 78.5996 -35.2998 78.5 -78.8994c0 -43.2998 -35.3008 -78.2998 -78.6006 -78.2998h-218.3c-4.7002 0.599609 -8.59961 4.19922 -8.59961 9.19922v249.7\n+c0 4.7998 1.69922 7 7.7998 9.2002c15.2998 6.09961 32.5 9.40039 50.2998 9.40039c72.5 0 131.9 -55.6006 138.3 -126.4c9.5 3.90039 19.7998 6.09961 30.6006 6.09961zM264.7 270.9c4.2002 0 7.2002 -3.30078 7.5 -7.80078l3.89941 -136.699l-3.89941 -65.6006\n+c0 -4.2002 -3.2998 -7.5 -7.5 -7.5s-7.5 3.2998 -7.7998 7.5l-3.30078 65.6006l3.30078 136.699c0.299805 4.5 3.59961 7.80078 7.7998 7.80078zM211.1 278.7c3.60059 0 6.40039 -3.10059 6.7002 -6.7002l4.40039 -145.3l-4.40039 -66.9004\n+c-0.299805 -3.59961 -3.09961 -6.39941 -6.7002 -6.39941c-3.2998 0 -6.09961 2.7998 -6.39941 6.39941l-3.90039 66.9004l3.90039 145.3c0 3.59961 3.09961 6.7002 6.39941 6.7002zM237.8 275.3c3.90039 0 6.90039 -3 6.90039 -6.89941l4.2002 -141.7l-4.2002 -66.4004\n+c0 -3.7998 -3.10059 -6.89941 -6.90039 -6.89941s-6.59961 3 -6.89941 6.89941l-3.90039 66.4004l3.90039 141.7c0 3.7998 3 6.89941 6.89941 6.89941z\" \u002F>\n+    \u003Cglyph glyph-name=\"vine\" unicode=\"&#xf1ca;\" horiz-adv-x=\"384\" \n+d=\"M384 193.3v-52.0996c-18.4004 -4.2002 -36.9004 -6.10059 -52.0996 -6.10059c-36.9004 -77.3994 -103 -143.8 -125.101 -156.199c-14 -7.90039 -27.0996 -8.40039 -42.7002 0.799805c-27.0996 16.2998 -129.899 100.6 -164.1 365.6h74.5\n+c18.7002 -159.1 64.5 -240.7 114.8 -301.8c27.9004 27.9004 54.7998 65.0996 75.6006 106.9c-49.8008 25.2998 -80.1006 80.8994 -80.1006 145.6c0 65.5996 37.7002 115.1 102.2 115.1c114.9 0 106.2 -127.899 81.5996 -181.5c0 0 -46.3994 -9.19922 -63.5 20.5\n+c3.40039 11.3008 8.2002 30.8008 8.2002 48.5c0 31.3008 -11.2998 46.6006 -28.3994 46.6006c-18.2002 0 -30.8008 -17.1006 -30.8008 -50c0.100586 -79.2002 59.4004 -118.7 129.9 -101.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"codepen\" unicode=\"&#xf1cb;\" horiz-adv-x=\"512\" \n+d=\"M502.285 288.296c6.00098 -3.99902 9.71484 -11.1426 9.71582 -18.2852v-155.999c0 -7.14258 -3.71484 -14.2871 -9.71484 -18.2861l-234 -156.021c-8.06055 -4.95996 -16.584 -4.91504 -24.5713 0l-234 156.021c-6.00098 4 -9.71484 11.1436 -9.71484 18.2861v155.999\n+c0 7.14258 3.71387 14.2861 9.71387 18.2852l234 156c8.06055 4.95996 16.584 4.91504 24.5713 0zM278 384.869v-102.572l95.4287 -63.7148l76.8574 51.4287zM234 384.869l-172.286 -114.858l76.8574 -51.4287l95.4287 63.7148v102.572zM44 228.868v-73.7139\n+l55.1426 36.8564zM234 -0.84668v102.571l-95.4287 63.7158l-76.8574 -51.4297zM256 140.011l77.7148 52l-77.7148 52l-77.7148 -52zM278 -0.84668l172.286 114.857l-76.8574 51.4297l-95.4287 -63.7158v-102.571zM468 155.154v73.7139l-55.1426 -36.8574z\" \u002F>\n+    \u003Cglyph glyph-name=\"jsfiddle\" unicode=\"&#xf1cc;\" horiz-adv-x=\"576\" \n+d=\"M510.634 210.538c45.6885 -25.334 68.3721 -74.5605 56.832 -122.634c-12.1035 -50.4199 -55.5479 -86.6592 -108.212 -87.293c-84.0303 -1.01172 -168.079 -0.458984 -252.12 -0.480469c-30.3223 -0.00683594 -60.668 -0.492188 -90.959 0.539062\n+c-48.0938 1.63672 -91.7764 35.8643 -105.607 81.4326c-14.1289 46.5508 2.18945 94.623 41.9014 124.615c2.54688 1.92383 4.86914 6.52051 4.51465 9.54492c-3.74609 31.8604 7.14453 57.6709 32.6758 76.4082c26.2822 19.2881 55.2285 21.5879 85.3311 9.16699\n+c2.36621 -0.975586 4.63965 -2.17773 7.82422 -3.68555c16.5215 27.5332 38.1221 48.6523 65.4922 63.9023c92.8594 51.7402 210.954 8.31152 246.85 -91.6455c5.55762 -15.4766 6.74512 -32.6074 9.09668 -49.0947c0.716797 -5.02832 1.6543 -8.15527 6.38086 -10.7764z\n+M531.741 53.6582c39.3135 48.375 22.418 117.668 -35.1426 144.497c-7.43555 3.46582 -9.72559 7.74414 -9.84766 15.8936c-1.87012 125.129 -132.78 187.063 -230.24 132.697c-26.1133 -14.5674 -46.4492 -34.8955 -60.6709 -61.2939\n+c-7.59082 -14.0908 -11.9287 -7.97754 -22.1982 -2.52734c-24.6113 13.0635 -49.0469 12.6406 -72.0332 -3.08301c-21.9678 -15.0244 -31.9102 -36.6201 -26.4199 -62.9805c2.4082 -11.5703 -0.914062 -17.0635 -10.0967 -23.1367\n+c-38.1895 -25.2578 -53.0879 -74.8604 -34.1855 -116.105c18.4355 -40.2295 51.3135 -59.6631 95.1748 -59.9951c0.700195 -0.00488281 163.728 -0.545898 163.728 0.154297c56.8857 0 113.778 -0.551758 170.652 0.229492\n+c28.9375 0.397461 53.0498 13.2178 71.2803 35.6504zM443.952 134.157c-5.84863 -31.1572 -34.6221 -55.0967 -66.666 -55.0957c-16.9531 0.00195312 -32.0586 6.5459 -44.0791 17.7051c-27.6973 25.7139 -71.1406 74.9805 -95.9375 93.3877\n+c-20.0557 14.8877 -41.9893 12.333 -60.2715 -3.78223c-49.9961 -44.0713 15.8594 -121.775 67.0625 -77.1885c4.54883 3.95996 7.84082 9.54297 12.7441 12.8447c8.18457 5.50879 20.7666 0.883789 13.168 -10.6221c-17.3574 -26.2842 -49.3301 -38.1973 -78.8623 -29.3008\n+c-28.8975 8.70312 -48.8408 35.9678 -48.626 70.1787c1.22461 22.4844 12.3633 43.0596 35.4141 55.9648c22.5742 12.6377 46.3682 13.1455 66.9902 -2.47363c50.791 -38.4756 75.5781 -81.7451 107.296 -101.245c24.5586 -15.0996 54.2549 -7.36328 68.8232 17.5059\n+c28.8301 49.209 -34.5918 105.016 -78.8682 63.46c-3.98828 -3.74414 -6.91699 -8.93164 -11.4092 -11.7197c-10.9756 -6.81152 -17.333 4.1123 -12.8096 10.3525c20.7031 28.5537 50.4639 40.4404 83.2715 28.2139c31.4287 -11.7139 49.1074 -44.3662 42.7598 -78.1855z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"rebel\" unicode=\"&#xf1d0;\" horiz-adv-x=\"512\" \n+d=\"M256.5 -56c-139.3 0 -247.5 116.2 -243.3 254.1c2.7998 79.2002 43.2002 152.2 116.5 200.4c0.299805 0 1.89941 0.599609 1.09961 -0.799805c-5.7998 -5.5 -111.3 -129.8 -14.0996 -226.4c49.7998 -49.5 90 -2.5 90 -2.5c38.5 50.1006 -0.600586 125.9 -0.600586 125.9\n+c-10 24.8994 -45.6992 40.0996 -45.6992 40.0996l28.7998 31.7998c24.3994 -10.5 43.2002 -38.6992 43.2002 -38.6992c0.799805 29.5996 -21.9004 61.3994 -21.9004 61.3994l44.5996 50.7002l44.3008 -50.0996c-20.5 -28.8008 -21.9004 -62.6006 -21.9004 -62.6006\n+c13.7998 23 43.5 39.2998 43.5 39.2998l28.5 -31.7998c-27.4004 -8.89941 -45.4004 -39.8994 -45.4004 -39.8994c-15.7998 -28.5 -27.0996 -89.4004 0.600586 -127.301c32.3994 -44.5996 87.7002 2.80078 87.7002 2.80078c102.699 91.8994 -10.5 225 -10.5 225\n+c-6.10059 5.5 0.799805 2.7998 0.799805 2.7998c50.0996 -36.5 114.6 -84.4004 116.2 -204.8c2 -145.601 -99.9004 -249.4 -242.4 -249.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"empire\" unicode=\"&#xf1d1;\" horiz-adv-x=\"496\" \n+d=\"M287.6 393.8c-10.7998 2.2002 -22.0996 3.2998 -33.5 3.60059v18.1992c78.1006 -2.19922 146.101 -44 184.601 -106.6l-15.7998 -9.09961c-6.10059 9.69922 -12.7002 18.7998 -20.2002 27.0996l-18 -15.5c-26 29.5996 -61.4004 50.7002 -101.9 58.4004zM53.4004 125.6\n+c3.89941 -10.7998 8.2998 -21.0996 13.5996 -31.0996l-15.7998 -9.09961c-17.1006 31.5996 -27.1006 68.0996 -27.1006 106.6s9.90039 75 27.1006 106.5l15.7998 -9.09961c-5.2998 -9.7002 -10 -20.2002 -13.5996 -31l22.6992 -7.7002\n+c-6.39941 -18.2998 -9.69922 -38.2002 -9.69922 -58.7002s3.59961 -40.4004 10 -58.7002zM213.1 14l-4.69922 -23.7998c10.7998 -1.90039 22.1992 -3.2998 33.5 -3.60059v-18.2998c-78.1006 2.2998 -146.4 44.2998 -184.9 106.601l16 9.39941\n+c5.7998 -9.7002 12.7002 -18.7998 20.2002 -27.3994l18 15.7998c26.0996 -29.6006 61.5 -50.7002 101.899 -58.7002zM93.2998 327.1c-7.5 -8.2998 -14.0996 -17.5 -20.0996 -27.1992l-15.7998 9.09961c38.5 62.5996 106.5 104.4 184.6 106.6v-18.1992\n+c-11.4004 -0.300781 -22.7002 -1.40039 -33.5 -3.60059l4.7002 -23.7998c-40.5 -7.7002 -75.9004 -28.7998 -101.9 -58.4004zM402.7 56.9004c7.5 8.59961 14.3994 17.6992 20.0996 27.3994l16.1006 -9.39941c-38.5 -62.3008 -106.801 -104.4 -184.9 -106.601v18.2998\n+c11.4004 0.300781 22.7002 1.7002 33.5 3.60059l-4.7002 23.7998c40.5 8 75.9004 29.0996 101.9 58.7002zM496 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM483.8 192c0 130.1 -105.7 235.8 -235.8 235.8\n+s-235.8 -105.7 -235.8 -235.8s105.7 -235.8 235.8 -235.8s235.8 105.7 235.8 235.8zM444.8 298.6c17.2002 -31.5996 27.1006 -68.0996 27.1006 -106.6s-9.90039 -75 -27.1006 -106.4l-15.7998 9.10059c5.2998 10 9.7002 20.2002 13.5996 31l-23 7.7002\n+c6.40039 18.2998 10 38.1992 10 58.6992s-3.2998 40.4004 -9.69922 58.7002l22.6992 7.7002c-3.59961 10.7998 -8.2998 21.2998 -13.5996 31zM261.8 120.9l13.2998 -66.7002c-8.59961 -1.7002 -17.6992 -2.7998 -27.0996 -2.7998s-18.5 1.09961 -27.0996 2.7998\n+l13.2998 66.7002c-16.2998 3.2998 -30.5 11.5996 -40.7002 23.5l-51.2002 -44.8008c-11.8994 13.6006 -21.2998 29.4004 -27.0996 46.8008l64.2002 22.0996c-2.5 7.40039 -3.90039 15.2002 -3.90039 23.5s1.40039 16 3.90039 23.5l-64.5 22.0996\n+c6.09961 17.5 15.5 33.2002 27.3994 46.8008l51.2002 -44.8008c10.2998 11.9004 24.4004 20.5 40.7002 23.8008l-13.2998 66.3994c8.59961 2 17.6992 2.7998 27.0996 2.7998s18.5 -0.899414 27.0996 -2.7998l-13.2998 -66.3994\n+c16.2998 -3.30078 30.5 -11.9004 40.7002 -23.8008l51.2002 44.8008c11.8994 -13.6006 21.2998 -29.4004 27.3994 -46.8008l-64.5 -22.0996c2.5 -7.40039 3.90039 -15.2002 3.90039 -23.5s-1.40039 -16 -3.90039 -23.5l64.2002 -22.0996\n+c-5.7998 -17.5 -15.2002 -33.2002 -27.0996 -46.8008l-51.2002 44.8008c-10.2998 -11.9004 -24.4004 -20.2002 -40.7002 -23.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"git-square\" unicode=\"&#xf1d2;\" \n+d=\"M100.59 113.76c48.5703 -3.30957 58.9502 -2.10938 58.9502 -11.9395c0 -20 -65.5498 -20.0605 -65.5498 -1.52051c0.00976562 5.08984 3.29004 9.40039 6.59961 13.46zM128.54 230.4c30.96 0 31.7598 -44.4707 -0.75 -44.4707c-33 0 -31.54 44.4707 0.75 44.4707z\n+M448 368v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352c26.4961 0 48 -21.5039 48 -48zM221 298.69c0 -14.4902 8.37988 -22.8809 22.8604 -22.8809c14.7393 0 23.1299 8.39062 23.1299 22.8809\n+c0 14.4893 -8.37012 22.3096 -23.1104 22.3096c-14.4795 0 -22.8799 -7.83984 -22.8799 -22.3096zM199.18 253h-49.5498c-25 6.5498 -81.5596 4.84961 -81.5596 -46.75c0 -18.7998 9.39941 -32 21.8496 -38.1104c-15.6895 -14.3701 -23.1201 -21.1396 -23.1201 -30.7393\n+c0 -6.87012 2.79004 -13.2207 11.1807 -16.7607c-8.90039 -8.39941 -14 -14.4795 -14 -25.9199c0.0195312 -20.0693 17.5498 -31.7197 63.5391 -31.7197c44.2207 0 69.8701 16.5098 69.8701 45.7305c0 36.6699 -28.2295 35.3193 -94.7695 39.3799l8.37988 13.4297\n+c17 -4.74023 74.1904 -6.23047 74.1904 42.4297c0 11.6904 -4.83008 19.8203 -9.40039 25.6699l23.3799 1.78027zM283.52 143.16l-13 1.78027c-3.81934 0.509766 -4.06934 1 -4.06934 5.08984v105.45h-52.6006l-2.79004 -20.5703c15.75 -5.5498 17 -4.86035 17 -10.1699\n+v-74.7402c0 -5.62012 -0.30957 -4.58008 -17 -6.87012v-20.0596h72.4209zM384 133l-6.87012 22.3701c-40.9297 -15.3701 -37.8496 12.4102 -37.8496 16.7295v60.7207h37.8496v25.4102h-35.8203c-2.86914 0 -2 -2.52051 -2 38.6299h-24.1797\n+c-2.79004 -27.7002 -11.6797 -38.8799 -34 -41.4199v-22.6201c20.4697 0 19.8203 0.849609 19.8203 -2.54004v-66.5703c0 -28.7197 11.4297 -40.9102 41.6699 -40.9102c14.4502 0 30.4502 4.83008 41.3799 10.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"git\" unicode=\"&#xf1d3;\" horiz-adv-x=\"512\" \n+d=\"M216.29 289.61l0.0400391 -34.5508l-37.4102 -2.83984c7.27051 -9.35938 15 -22.3701 15 -41.0693c0 -77.8906 -91.4297 -75.4707 -118.7 -67.8906l-13.4297 -21.5498c106.47 -6.5 151.63 -4.33984 151.63 -63c0 -46.7598 -41.04 -73.1797 -111.79 -73.1797\n+c-73.5801 0 -101.63 18.71 -101.63 50.8193c0 18.3008 8.12988 28.04 22.4004 41.4502c-13.4199 5.66992 -17.8906 15.8105 -17.8906 26.8105c0 15.3594 11.9004 26.21 37 49.21c-20 9.76953 -35 30.9102 -35 61c0 82.5498 90.4902 85.2793 130.49 74.79h79.29z\n+M152.87 47.71c0 15.7402 -16.6104 13.8096 -94.3203 19.1104c-5.2998 -6.54004 -10.5693 -13.4004 -10.5693 -21.54c0 -29.6699 104.89 -29.6299 104.89 2.42969zM102.06 182.29c52.0205 0 50.7402 71.1602 1.2002 71.1602c-51.6602 0 -54 -71.1602 -1.2002 -71.1602z\n+M235.36 81.7803v32.0996c26.75 3.66016 27.2393 2 27.2393 11v119.51c0 8.5 -2.0498 7.37988 -27.2393 16.2607l4.46973 32.9199h84.1699v-168.71c0 -6.51074 0.400391 -7.32031 6.50977 -8.14062l20.7305 -2.83984v-32.0996h-115.88zM287.81 326.09\n+c-23.1699 0 -36.5898 13.4297 -36.5898 36.6104c0 23.1797 13.4199 35.7695 36.5898 35.7695c23.5801 0 37 -12.6201 37 -35.7695c0 -23.1504 -13.4199 -36.6104 -37 -36.6104zM512 97.54c-17.4902 -8.53027 -43.0996 -16.2598 -66.2803 -16.2598\n+c-48.3799 0 -66.6699 19.5 -66.6699 65.46v106.51c0 5.41992 1.0498 4.05957 -31.71 4.05957v36.1904c35.7803 4.07031 50 22 54.4697 66.2695h38.6309c0 -65.8291 -1.34082 -61.8096 3.25977 -61.8096h57.2998v-40.6504h-60.5596v-97.1494\n+c0 -6.91992 -4.9209 -51.4102 60.5693 -26.8398z\" \u002F>\n+    \u003Cglyph glyph-name=\"hacker-news\" unicode=\"&#xf1d4;\" \n+d=\"M0 416h448v-448h-448v448zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391zM239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6\n+c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"tencent-weibo\" unicode=\"&#xf1d5;\" horiz-adv-x=\"384\" \n+d=\"M72.2998 -47.7998c1.40039 -19.9004 -27.5996 -22.2002 -29.7002 -2.90039c-11.5996 129.9 31.1006 239.5 101.4 313.2c-15.5996 34 9.2002 77.0996 50.5996 77.0996c30.3008 0 55.1006 -24.5996 55.1006 -55.0996c0 -44 -49.5 -70.7998 -86.9004 -45.0996\n+c-65.7002 -71.3008 -101.399 -169.801 -90.5 -287.2zM192 447.9c92 0 166.6 -74.6006 166.6 -166.5c0 -102.301 -93.2998 -185.5 -204 -162.301c-19 4.7002 -12.5 33.2002 6.60059 29.1006c80.7998 -20.7998 167.7 42.2998 167.7 133.1c0 75.5 -61.5 136.9 -136.9 136.9\n+c-101 0 -168.3 -106.601 -122 -199.2c9 -17.9004 -17.5996 -30.7998 -26.2998 -13.4004c-56 108.101 22.3994 242.301 148.3 242.301z\" \u002F>\n+    \u003Cglyph glyph-name=\"qq\" unicode=\"&#xf1d6;\" \n+d=\"M433.754 27.5547c-11.5264 -1.39258 -44.8604 52.7412 -44.8604 52.7412c0 -31.3447 -16.1357 -72.2471 -51.0508 -101.786c16.8418 -5.19141 54.8428 -19.167 45.8037 -34.4209c-7.31641 -12.3428 -125.511 -7.88086 -159.633 -4.03711\n+c-34.1221 -3.84375 -152.315 -8.30566 -159.632 4.03711c-9.04492 15.25 28.918 29.2139 45.7832 34.415c-34.9199 29.5391 -51.0586 70.4453 -51.0586 101.792c0 0 -33.334 -54.1338 -44.8594 -52.7412c-5.37012 0.650391 -12.4238 29.6445 9.34668 99.7041\n+c10.2617 33.0244 21.9951 60.4785 40.1445 105.779c-3.05566 116.898 45.2441 214.956 160.262 214.962c113.737 -0.00585938 163.156 -96.1328 160.264 -214.963c18.1182 -45.2227 29.9121 -72.8506 40.1445 -105.778c21.7676 -70.0596 14.7158 -99.0527 9.3457 -99.7041z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"weixin\" unicode=\"&#xf1d7;\" horiz-adv-x=\"576\" \n+d=\"M385.2 280.4c-92.4004 0 -165.4 -69.1006 -165.3 -154c0 -14.2002 2.19922 -27.9004 6.19922 -40.8008c-6.19922 -0.5 -12.0996 -0.799805 -18.2998 -0.799805c-24.3994 0 -43.7998 4.90039 -68.2002 9.7002l-68 -34.0996l19.3008 58.5996\n+c-48.6006 34.0996 -77.9004 78.2002 -77.9004 131.6c0 92.6006 87.5 165.4 194.7 165.4c95.5996 0 179.7 -58.2998 196.3 -136.7c-6.2002 0.799805 -12.4004 1.10059 -18.7998 1.10059zM280.7 333.3c-14.7002 0 -29.2002 -9.7002 -29.2998 -24.3994\n+c0 -14.5 14.5 -24.2002 29.2998 -24.2002c14.5 0 24.2002 9.7002 24.2002 24.2002c0 14.6992 -9.7002 24.3994 -24.2002 24.3994zM144.3 284.7c14.7998 0 24.4004 9.59961 24.4004 24.2002c0 14.6992 -9.60059 24.3994 -24.4004 24.3994\n+c-14.5 0 -29.2998 -9.59961 -29.2998 -24.3994c0 -14.5 14.7998 -24.2002 29.2998 -24.2002zM563 128.6c0 -43.7998 -29 -82.6992 -68.2002 -112.1l14.7998 -48.5996l-53.3994 29.2998c-19.7002 -4.7998 -39.2998 -9.90039 -58.6006 -9.90039\n+c-92.5996 0 -165.399 63.4004 -165.399 141.3c0 77.9004 72.7002 141.301 165.399 141.301c87.5 0 165.4 -63.4004 165.4 -141.301zM343.9 153.1c14.6992 0 24.3994 9.60059 24.3994 19.6006c0 9.59961 -9.59961 19.2998 -24.3994 19.2998\n+c-9.60059 0 -19.3008 -9.59961 -19.3008 -19.2998c0 -9.90039 9.60059 -19.6006 19.3008 -19.6006zM451 153.1c14.5 0 24.5 9.60059 24.4004 19.6006c0 9.59961 -9.90039 19.2998 -24.4004 19.2998c-9.59961 0 -19.2998 -9.59961 -19.2998 -19.2998\n+c0 -9.90039 9.59961 -19.6006 19.2998 -19.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"slideshare\" unicode=\"&#xf1e7;\" horiz-adv-x=\"512\" \n+d=\"M187.7 294.3c34 0 61.7002 -25.7002 61.7002 -57.7002c0 -31.6992 -27.7002 -57.6992 -61.7002 -57.6992s-61.7002 26 -61.7002 57.6992c0 32 27.7002 57.7002 61.7002 57.7002zM331.1 294.3c34.3008 0 61.8008 -25.7002 61.7002 -57.7002\n+c0 -31.6992 -27.3994 -57.6992 -61.7002 -57.6992c-34 0 -61.6992 26 -61.6992 57.6992c0 32 27.6992 57.7002 61.6992 57.7002zM487.7 204.3c15.2002 10.5 25.2002 -4 16.0996 -17.7998c-18.2998 -22.5996 -53.2002 -50.2998 -106.3 -72\n+c56.2998 -191.7 -137.4 -222.3 -134.3 -124c0 0.700195 -0.299805 53.7998 -0.299805 93.5c-4.30078 0.799805 -8.60059 2 -13.7002 3.09961c0 -40 -0.299805 -95.8994 -0.299805 -96.5996c3.09961 -98.2002 -190.601 -67.5996 -134.301 124.1\n+c-53.1992 21.7002 -88 49.4004 -106.3 72c-9.09961 13.7002 0.900391 28.3008 16 17.7002c2 -1.39941 4.2998 -2.89941 6.2998 -4.2998v198.3c0 27.4004 20.6006 49.7002 46 49.7002h359.101c25.3994 0 46 -22.2998 46 -49.7002v-198.3zM457.2 185.1h0.0996094v190.601\n+c0 32.7998 -10.5996 45.7002 -40.8994 45.7002h-317.7c-31.7002 0 -40.6006 -10.8008 -40.6006 -45.7002v-192.4c67.7002 -35.3994 125.7 -29.0996 157.4 -28c13.4004 0.299805 22 -2.2998 27.0996 -7.7002c1.7002 -1.59961 10 -9.39941 20.3008 -17.0996\n+c1.09961 15.7998 10 25.7998 33.6992 24.9004c32.3008 -1.40039 91.7002 -7.7002 160.601 29.6992z\" \u002F>\n+    \u003Cglyph glyph-name=\"twitch\" unicode=\"&#xf1e8;\" \n+d=\"M40.0996 416h397.9v-274.2l-117 -117h-87l-56.7998 -56.7998h-60.2002v56.7998h-107v314.3zM397.9 161.9v214h-321v-280.9h90.2998v-56.7998l56.7998 56.7998h107zM331 299v-116.9h-40.0996v116.9h40.0996zM224 299v-116.9h-40.0996v116.9h40.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"yelp\" unicode=\"&#xf1e9;\" horiz-adv-x=\"384\" \n+d=\"M42.9004 207.68l99.6191 -48.6094c19.2002 -9.40039 16.2002 -37.5107 -4.5 -42.71l-107.52 -26.8105c-1.51074 -0.379883 -4 -0.6875 -5.55762 -0.6875c-11.2676 0 -21.415 9.08887 -22.6523 20.2881c-0.708984 6.18164 -1.28516 16.25 -1.28516 22.4727\n+c0 17.8105 4.60742 45.9658 10.2852 62.8467c2.88574 8.56836 12.5664 15.5215 21.6074 15.5215c2.9082 0 7.38867 -1.03516 10.0029 -2.31152zM86.9004 -31.5703c-5.48535 3.75195 -9.92773 12.1904 -9.92773 18.8359c0 4.8291 2.61914 11.6631 5.84766 15.2539\n+l74.21 82.4004c14.3096 15.8105 40.5098 5.2002 39.8096 -16.0996l-3.89941 -110.82c-0.412109 -12.1484 -10.6123 -22.0078 -22.7676 -22.0078c-1.07129 0 -2.79688 0.146484 -3.85254 0.328125c-23.8691 4.04199 -59.4492 18.4277 -79.4199 32.1094zM232.24 78.3496\n+c-11.2998 18.1104 6.2002 40.4102 26.5098 33.9102l105.42 -34.2598c8.69043 -2.88965 15.7422 -12.667 15.7422 -21.8252c0 -2.8125 -0.963867 -7.16504 -2.15234 -9.71484c-10.418 -21.8799 -34.0322 -52.1689 -52.71 -67.6104\n+c-3.50586 -2.88867 -10.0391 -5.2334 -14.582 -5.2334c-6.99707 0 -15.6963 4.80859 -19.418 10.7334zM380.57 210.58c1.04688 -2.41602 1.93652 -6.5127 1.93652 -9.14551c0 -9.49805 -7.39551 -19.3828 -16.5068 -22.0645l-106.64 -30.5098\n+c-20.5 -5.90039 -37.1006 17.0098 -25.2002 34.71l62 91.9199c3.75 5.55664 12.2354 10.0654 18.9385 10.0654c4.74512 0 11.4932 -2.53809 15.0615 -5.66602c18.166 -16.0361 40.75 -47.0869 50.4102 -69.3096zM62.1104 417.82\n+c29.4697 14.0293 79.793 27.5137 112.33 30.0996c0.503906 0.0410156 1.32422 0.0742188 1.83008 0.0742188c12.5146 0 22.6709 -10.1562 22.6709 -22.6699c0 -0.0566406 -0.000976562 -0.147461 -0.000976562 -0.204102v-208.34\n+c0 -23.2998 -30.9102 -31.6006 -42.6104 -11.4004l-104.12 180.44c-1.68164 2.92188 -3.0459 8.0293 -3.0459 11.4014c0 7.93066 5.7998 17.1592 12.9463 20.5986z\" \u002F>\n+    \u003Cglyph glyph-name=\"paypal\" unicode=\"&#xf1ed;\" horiz-adv-x=\"384\" \n+d=\"M111.4 152.1c-3.5 -19.1992 -17.4004 -108.699 -21.5 -134c-0.300781 -1.7998 -1 -2.5 -3 -2.5h-74.6006c-7.59961 0 -13.0996 6.60059 -12.0996 13.9004l58.5996 371.9c1.5 9.59961 10.1006 16.8994 20 16.8994c152.3 0 165.101 3.7002 204 -11.3994\n+c60.1006 -23.3008 65.6006 -79.5 44 -140.301c-21.5 -62.5996 -72.5 -89.5 -140.1 -90.2998c-43.4004 -0.700195 -69.5 7 -75.2998 -24.2002zM357.1 296c28.4004 -21.2002 30.3008 -57.7998 23.8008 -92.5996c-16.5 -83.5 -71.9004 -112.301 -142.9 -112.301\n+c-15 0 -24.7002 2.30078 -29.2998 -19.6992c-15.5 -97.4004 -13.7002 -85.9004 -14.4004 -91.3008c-1.7002 -8.59961 -8.7998 -14.8994 -17.3994 -14.8994h-63.5c-7.10059 0 -11.6006 5.7998 -10.6006 12.8994c0 0 4.5 29.3008 27.1006 169.7\n+c0.799805 6.10059 4.7998 9.40039 10.8994 9.40039c54 0 164.601 -9.90039 204.5 103.899c3.7002 11.1006 6.7998 22.2002 8.7998 33.6006c0.5 3.09961 1.2002 2.59961 3 1.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-wallet\" unicode=\"&#xf1ee;\" \n+d=\"M156.8 321.2c37.6006 -60.6006 64.2002 -113.101 84.2998 -162.5c-8.2998 -33.7998 -18.7998 -66.5 -31.2998 -98.2998c-13.2002 52.2998 -26.5 101.3 -56 148.5c6.5 36.3994 2.2998 73.5996 3 112.3zM109.3 248c5 0 10 -2.5 13 -6.5\n+c43.7998 -59.7998 66.2998 -123.8 82.5 -193.5h-103.5c-20 69.5 -49.5 133 -91.7002 187.3c-4 5.2002 0 12.7002 6.5 12.7002h93.2002zM157.1 336h108.7c74.7998 -103 131.2 -230 143.2 -368h-113.7c-8.2002 133.5 -69.7002 260 -138.2 368zM408.9 404.5\n+c19 -67.5 31.0996 -139 31.0996 -212.6c0 -69.5 -9.5 -142.5 -25.2998 -203c-10.9004 92.5 -42.4004 184.6 -90.6006 270.8c-4.19922 50.5 -13.2998 99.5 -26.5 146c-1.19922 5.2998 2.5 10.2998 7.80078 10.2998h88.2998c7 0 13.3994 -4.7002 15.2002 -11.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-visa\" unicode=\"&#xf1f0;\" horiz-adv-x=\"576\" \n+d=\"M470.1 216.7c0 0 7.60059 -37.2002 9.30078 -45h-33.4004c3.2998 8.89941 16 43.5 16 43.5c-0.200195 -0.299805 3.2998 9.09961 5.2998 14.8994zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480\n+c26.5 0 48 -21.5 48 -48zM152.5 116.8l63.2002 155.2h-42.5l-39.2998 -106l-4.30078 21.5l-14 71.4004c-2.2998 9.89941 -9.39941 12.6992 -18.1992 13.0996h-64.7002l-0.700195 -3.09961c15.7998 -4 29.9004 -9.80078 42.2002 -17.1006l35.7998 -135h42.5zM246.9 116.6\n+l25.1992 155.4h-40.1992l-25.1006 -155.4h40.1006zM386.8 167.4c0.200195 17.6992 -10.5996 31.1992 -33.7002 42.2998c-14.0996 7.09961 -22.6992 11.8994 -22.6992 19.2002c0.199219 6.59961 7.2998 13.3994 23.0996 13.3994\n+c13.0996 0.299805 22.7002 -2.7998 29.9004 -5.89941l3.59961 -1.7002l5.5 33.5996c-7.90039 3.10059 -20.5 6.60059 -36 6.60059c-39.7002 0 -67.5996 -21.2002 -67.7998 -51.4004c-0.299805 -22.2998 20 -34.7002 35.2002 -42.2002\n+c15.5 -7.59961 20.7998 -12.5996 20.7998 -19.2998c-0.200195 -10.4004 -12.6006 -15.2002 -24.1006 -15.2002c-16 0 -24.5996 2.5 -37.6992 8.2998l-5.30078 2.5l-5.59961 -34.8994c9.40039 -4.2998 26.7998 -8.10059 44.7998 -8.2998\n+c42.2002 -0.100586 69.7002 20.7998 70 53zM528 116.6l-32.4004 155.4h-31.0996c-9.59961 0 -16.9004 -2.7998 -21 -12.9004l-59.7002 -142.5h42.2002s6.90039 19.2002 8.40039 23.3008h51.5996c1.2002 -5.5 4.7998 -23.3008 4.7998 -23.3008h37.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-mastercard\" unicode=\"&#xf1f1;\" horiz-adv-x=\"576\" \n+d=\"M482.9 37.7002c0 -6.7998 -4.60059 -11.7002 -11.2002 -11.7002c-6.7998 0 -11.2002 5.2002 -11.2002 11.7002s4.40039 11.7002 11.2002 11.7002c6.59961 0 11.2002 -5.2002 11.2002 -11.7002zM172.1 49.4004c6.5 0 10.8008 -5.2002 10.9004 -11.7002\n+c0 -6.7998 -4.40039 -11.7002 -10.9004 -11.7002c-7.09961 0 -11.1992 5.2002 -11.1992 11.7002s4.09961 11.7002 11.1992 11.7002zM289.6 49.7002c5.2002 0 8.7002 -3 9.60059 -8.7002h-19.1006c0.800781 5.2002 4.10059 8.7002 9.5 8.7002zM397.4 49.4004\n+c6.7998 0 11.1992 -5.2002 11.1992 -11.7002c0 -6.7998 -4.39941 -11.7002 -11.1992 -11.7002c-6.80078 0 -10.9004 5.2002 -10.9004 11.7002s4.09961 11.7002 10.9004 11.7002zM503.3 23.2998c0 -0.299805 0.299805 -0.5 0.299805 -1.09961\n+c0 -0.299805 -0.299805 -0.5 -0.299805 -1.10059c-0.299805 -0.299805 -0.299805 -0.5 -0.5 -0.799805c-0.299805 -0.299805 -0.5 -0.5 -1.09961 -0.5c-0.299805 -0.299805 -0.5 -0.299805 -1.10059 -0.299805c-0.299805 0 -0.5 0 -1.09961 0.299805\n+c-0.299805 0 -0.5 0.299805 -0.799805 0.5c-0.299805 0.299805 -0.5 0.5 -0.5 0.799805c-0.299805 0.5 -0.299805 0.800781 -0.299805 1.10059c0 0.5 0 0.799805 0.299805 1.09961c0 0.5 0.299805 0.799805 0.5 1.10059c0.299805 0.299805 0.5 0.299805 0.799805 0.5\n+c0.5 0.299805 0.799805 0.299805 1.09961 0.299805c0.5 0 0.800781 0 1.10059 -0.299805c0.5 -0.300781 0.799805 -0.300781 1.09961 -0.5c0.299805 -0.200195 0.200195 -0.600586 0.5 -1.10059zM501.1 21.9004c0.5 0 0.5 0.299805 0.800781 0.299805\n+c0.299805 0.299805 0.299805 0.5 0.299805 0.799805s0 0.5 -0.299805 0.799805c-0.300781 0 -0.5 0.299805 -1.10059 0.299805h-1.59961v-3.5h0.799805v1.40039h0.299805l1.10059 -1.40039h0.799805zM576 367v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48\n+v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM64 227.4c0 -76.5 62.0996 -138.5 138.5 -138.5c27.2002 0 53.9004 8.19922 76.5 23.0996c-72.9004 59.2998 -72.4004 171.2 0 230.5c-22.5996 15 -49.2998 23.0996 -76.5 23.0996\n+c-76.4004 0.100586 -138.5 -62 -138.5 -138.199zM288 118.6c70.5 55 70.2002 162.2 0 217.5c-70.2002 -55.2998 -70.5 -162.6 0 -217.5zM145.7 42.2998c0 8.7002 -5.7002 14.4004 -14.7002 14.7002c-4.59961 0 -9.5 -1.40039 -12.7998 -6.5\n+c-2.40039 4.09961 -6.5 6.5 -12.2002 6.5c-3.7998 0 -7.59961 -1.40039 -10.5996 -5.40039v4.40039h-8.2002v-36.7002h8.2002c0 18.9004 -2.5 30.2002 9 30.2002c10.1992 0 8.19922 -10.2002 8.19922 -30.2002h7.90039c0 18.2998 -2.5 30.2002 9 30.2002\n+c10.2002 0 8.2002 -10 8.2002 -30.2002h8.2002v23h-0.200195zM190.6 56h-7.89941v-4.40039c-2.7002 3.30078 -6.5 5.40039 -11.7002 5.40039c-10.2998 0 -18.2002 -8.2002 -18.2002 -19.2998c0 -11.2002 7.90039 -19.2998 18.2002 -19.2998\n+c5.2002 0 9 1.89941 11.7002 5.39941v-4.59961h7.89941v36.7998zM231.1 30.4004c0 15 -22.8994 8.19922 -22.8994 15.1992c0 5.7002 11.8994 4.80078 18.5 1.10059l3.2998 6.5c-9.40039 6.09961 -30.2002 6 -30.2002 -8.2002c0 -14.2998 22.9004 -8.2998 22.9004 -15\n+c0 -6.2998 -13.5 -5.7998 -20.7002 -0.799805l-3.5 -6.2998c11.2002 -7.60059 32.5996 -6 32.5996 7.5zM266.5 21.0996l-2.2002 6.80078c-3.7998 -2.10059 -12.2002 -4.40039 -12.2002 4.09961v16.5996h13.1006v7.40039h-13.1006v11.2002h-8.19922v-11.2002h-7.60059\n+v-7.2998h7.60059v-16.7002c0 -17.5996 17.2998 -14.4004 22.5996 -10.9004zM279.8 34.5h27.5c0 16.2002 -7.39941 22.5996 -17.3994 22.5996c-10.6006 0 -18.2002 -7.89941 -18.2002 -19.2998c0 -20.5 22.5996 -23.8994 33.7998 -14.2002l-3.7998 6\n+c-7.7998 -6.39941 -19.6006 -5.7998 -21.9004 4.90039zM338.9 56c-4.60059 2 -11.6006 1.7998 -15.2002 -4.40039v4.40039h-8.2002v-36.7002h8.2002v20.7002c0 11.5996 9.5 10.0996 12.7998 8.40039zM349.5 37.7002c0 11.3994 11.5996 15.0996 20.7002 8.39941l3.7998 6.5\n+c-11.5996 9.10059 -32.7002 4.10059 -32.7002 -15c0 -19.7998 22.4004 -23.7998 32.7002 -15l-3.7998 6.5c-9.2002 -6.5 -20.7002 -2.59961 -20.7002 8.60059zM416.2 56h-8.2002v-4.40039c-8.2998 11 -29.9004 4.80078 -29.9004 -13.8994\n+c0 -19.2002 22.4004 -24.7002 29.9004 -13.9004v-4.59961h8.2002v36.7998zM449.9 56c-2.40039 1.2002 -11 2.90039 -15.2002 -4.40039v4.40039h-7.90039v-36.7002h7.90039v20.7002c0 11 9 10.2998 12.7998 8.40039zM490.2 70.9004h-7.90039v-19.3008\n+c-8.2002 10.9004 -29.8994 5.10059 -29.8994 -13.8994c0 -19.4004 22.5 -24.6006 29.8994 -13.9004v-4.59961h7.90039v51.7002zM497.8 146v-4.59961h0.799805v4.59961h1.90039v0.799805h-4.59961v-0.799805h1.89941zM504.4 22.2002c0 0.5 0 1.09961 -0.300781 1.59961\n+c-0.299805 0.299805 -0.5 0.799805 -0.799805 1.10059c-0.299805 0.299805 -0.799805 0.5 -1.09961 0.799805c-0.5 0 -1.10059 0.299805 -1.60059 0.299805c-0.299805 0 -0.799805 -0.299805 -1.39941 -0.299805c-0.5 -0.299805 -0.799805 -0.5 -1.10059 -0.799805\n+c-0.5 -0.300781 -0.799805 -0.800781 -0.799805 -1.10059c-0.299805 -0.5 -0.299805 -1.09961 -0.299805 -1.59961c0 -0.299805 0 -0.799805 0.299805 -1.40039c0 -0.299805 0.299805 -0.799805 0.799805 -1.09961c0.300781 -0.299805 0.5 -0.5 1.10059 -0.799805\n+c0.5 -0.300781 1.09961 -0.300781 1.39941 -0.300781c0.5 0 1.10059 0 1.60059 0.300781c0.299805 0.299805 0.799805 0.5 1.09961 0.799805s0.5 0.799805 0.799805 1.09961c0.300781 0.600586 0.300781 1.10059 0.300781 1.40039zM507.6 146.9h-1.39941l-1.60059 -3.5\n+l-1.59961 3.5h-1.40039v-5.40039h0.800781v4.09961l1.59961 -3.5h1.09961l1.40039 3.5v-4.09961h1.09961v5.40039zM512 227.4c0 76.1992 -62.0996 138.3 -138.5 138.3c-27.2002 0 -53.9004 -8.2002 -76.5 -23.1006c72.0996 -59.2998 73.2002 -171.5 0 -230.5\n+c22.5996 -15 49.5 -23.0996 76.5 -23.0996c76.4004 -0.0996094 138.5 61.9004 138.5 138.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-discover\" unicode=\"&#xf1f2;\" horiz-adv-x=\"576\" \n+d=\"M520.4 251.9c0 -8.40039 -5.5 -12.8008 -15.8008 -12.8008h-4.69922v24.9004h4.89941c10.1006 0 15.6006 -4.2002 15.6006 -12.0996zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480z\n+M483.9 277.1v-82h16v32.8008h2.19922l22.2002 -32.8008h19.6006l-25.8008 34.4004c12.1006 2.5 18.7002 10.5996 18.7002 23.2002c0 28.5 -30.2998 24.3994 -52.8994 24.3994zM428 277v-82h45.2998v13.7998h-29.2998v22.2002h28.2998v13.7998h-28.2998v18.2002h29.2998v14\n+h-45.2998zM359.3 277h-17.5l35 -84.2002h8.60059l35.5 84.2002h-17.5l-22.2002 -55.2002zM303.4 280c-24.6006 0 -44.6006 -19.9004 -44.6006 -44.5996c0 -24.6006 19.9004 -44.6006 44.6006 -44.6006c24.5996 0 44.5996 19.9004 44.5996 44.6006\n+c0 24.5996 -19.9004 44.5996 -44.5996 44.5996zM254.1 273.9c-30.1992 15 -63.2998 -6.80078 -63.2998 -38c0 -32.5 33.6006 -52.5 63.2998 -38.2002v19c-19.2998 -19.2998 -46.7998 -5.7998 -46.7998 19.2002c0 23.6992 26.7002 39.0996 46.7998 19v19zM156.9 207.6\n+c-7.60059 0 -13.8008 3.7002 -17.5 10.8008l-10.3008 -9.90039c17.8008 -26.0996 56.6006 -18.2002 56.6006 11.2998c0 13.1006 -5.40039 19 -23.6006 25.6006c-9.59961 3.39941 -12.2998 5.89941 -12.2998 10.2998c0 8.7002 14.5 14.0996 24.9004 2.5l8.39941 10.7998\n+c-19.0996 17.0996 -49.6992 8.90039 -49.6992 -14.2998c0 -11.2998 5.19922 -17.2002 20.1992 -22.7002c25.7002 -9.09961 14.7002 -24.4004 3.30078 -24.4004zM55.4004 195c30.8994 0 44.0996 22.4004 44.0996 40.9004c0 24.0996 -18 41.0996 -44.0996 41.0996h-23.4004\n+v-82h23.4004zM122.9 195v82h-16v-82h16zM544 15v145c-33.2998 -20.7998 -226.4 -124.4 -416 -160h401c8.2002 0 15 6.7998 15 15zM74.0996 256.4c5.7002 -5 8.90039 -12.6006 8.90039 -20.5c0 -7.90039 -3.2002 -15.5 -8.90039 -20.7002\n+c-4.89941 -4.40039 -11.5996 -6.40039 -21.8994 -6.40039h-4.2002v54.2002h4.2002c10.2998 0 16.7002 -1.7002 21.8994 -6.59961z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-amex\" unicode=\"&#xf1f3;\" horiz-adv-x=\"576\" \n+d=\"M325.1 280.2c0.100586 -8 -4.2998 -15.7002 -11.6992 -18.7002c9.5 -3.2998 11 -9.2002 11 -18.4004v-13.5h-16.6006c-0.299805 14.8008 3.60059 25.1006 -14.7998 25.1006h-18v-25.1006h-16.4004v69.3008l39.1006 -0.300781c13.2998 0 27.3994 -2 27.3994 -18.3994z\n+M295.7 268.9c5.7002 0 11 1.2998 11 7.89941c0 6.40039 -5.60059 7.40039 -10.7002 7.40039h-21v-15.2998h20.7002zM279 179.4c15.5996 0 27.9004 -5.40039 27.9004 -22.7002c0 -27.9004 -30.4004 -23.2998 -49.3008 -23.2998l-0.0996094 -23.3008h-32.2002l-20.3994 23\n+l-21.3008 -23h-65.3994l0.0996094 69.3008h66.5l20.5 -22.8008l21 22.8008h52.7002zM175.2 124.7l19 20.2002l-17.9004 20.1992h-41.7002v-12.5h36.3008v-14.0996h-36.3008v-13.7998h40.6006zM241 116.5v55.5l-25.2998 -27.4004zM278.8 147.5\n+c5.90039 0 10.5 2.7998 10.5 9.2002c0 6.09961 -4.59961 8.39941 -10.2002 8.39941h-21.5v-17.5996h21.2002zM247.2 284.2h-38.9004v-12.5h37.7998v-14.1006h-37.7998v-13.7998h38.9004v-14.2998h-55.5v69.2998h55.5v-14.5996zM576 192.6h-0.200195h0.200195zM381.4 160.7\n+c-0.100586 -7.60059 -4.2002 -15.2998 -11.9004 -18.4004c9.2002 -3.2998 11 -9.5 11 -18.3994l-0.0996094 -13.8008h-16.6006l0.100586 11.5c0 11.8008 -3.80078 13.8008 -14.8008 13.8008h-17.5996l-0.0996094 -25.3008h-16.6006l0.100586 69.3008h39.3994\n+c13 0 27.1006 -2.30078 27.1006 -18.7002zM352.2 149.5c5.59961 0 11 1.2998 11 8.2002c0 6.39941 -5.60059 7.39941 -10.7002 7.39941h-21v-15.5996h20.7002zM179.4 229.5h-16.8008v54.2002l-24 -54.2002h-14.5996l-24 54.2002v-54.2002h-33.7998l-6.40039 15.2998h-34.5\n+l-6.39941 -15.2998h-17.9004l29.7002 69.2998h24.5l28.0996 -65.7002v65.7002h27.1006l21.6992 -47l19.7002 47h27.6006v-69.2998zM31.2002 259.2h22.7002l-11.5 27.5996zM508.6 100.3c34.8008 0 54.8008 -2.2002 67.5 6.10059v-90.4004c0 -26.5 -21.5 -48 -48 -48h-480.1\n+c-26.5 0 -48 21.5 -48 48v203.7h26.5996c4.2002 10.0996 2.2002 5.2998 6.40039 15.2998h19.2002c4.2002 -10 2.2002 -5.2002 6.39941 -15.2998h52.9004v11.3994c2.2002 -5 1.09961 -2.5 5.09961 -11.3994h29.5c2.40039 5.5 2.60059 5.7998 5.10059 11.3994v-11.3994h135.5\n+v25.0996c6.39941 0 8 0.100586 9.7998 -0.200195c0 0 -0.200195 -10.8994 0.0996094 -24.7998h66.5v8.90039c7.40039 -5.90039 17.4004 -8.90039 29.7002 -8.90039h26.7998c4.2002 10.1006 2.2002 5.2998 6.40039 15.2998h19c6.5 -15 0.200195 -0.5 6.59961 -15.2998\n+h52.8008v21.9004c11.7998 -19.7002 7.7998 -12.9004 13.1992 -21.9004h41.6006v92h-39.9004v-18.3994c-12.2002 20.1992 -6.2998 10.3994 -11.2002 18.3994h-43.2998v-20.5996c-6.2002 14.5996 -4.59961 10.7998 -8.7998 20.5996h-32.4004\n+c-0.399414 0 -2.2998 -0.200195 -2.2998 0.299805h-27.5996c-12.7998 0 -23.1006 -3.19922 -30.7002 -9.2998v9.2998h-39.9004v-5.2998c-10.7998 6.10059 -20.6992 5.10059 -64.3994 5.2998c-0.100586 0 -11.6006 0.100586 -11.6006 0h-103\n+c-2.5 -6.09961 -6.7998 -16.3994 -12.5996 -30c-2.7998 6 -11 23.8008 -13.9004 30h-46v-21.0996c-7.39941 17.4004 -4.69922 11 -9 21.0996h-39.6992c-3.40039 -7.89941 -13.7002 -32 -23.1006 -53.8994v109.8c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48v-175.4\n+c-37.7002 0.200195 -44 0.900391 -54.2998 -5v5c-45.2998 0 -53.5 1.7002 -64.9004 -5.19922v5.19922h-78.1992v-5.09961c-11.4004 6.5 -21.4004 5.09961 -75.7002 5.09961v-5.59961c-6.2998 3.7002 -14.5 5.59961 -24.2998 5.59961h-58\n+c-3.5 -3.7998 -12.5 -13.6992 -15.7002 -17.1992c-12.7002 14.0996 -10.5 11.5996 -15.5 17.1992h-83.1006v-92.2998h82c3.30078 3.5 12.9004 13.9004 16.1006 17.4004c12.7002 -14.2998 10.2998 -11.7002 15.3994 -17.4004h48.9004\n+c0 14.7002 0.0996094 8.2998 0.0996094 23c11.5 -0.200195 24.3008 0.200195 34.3008 6.2002c0 -13.9004 -0.100586 -17.0996 -0.100586 -29.2002h39.6006c0 18.5 0.0996094 7.40039 0.0996094 25.2998c6.2002 0 7.7002 0 9.40039 -0.0996094\n+c0.0996094 -1.2998 0 0 0 -25.2002c152.8 0 145.899 -1.09961 156.699 4.5v-4.5zM544.9 164.8c-4.60059 0 -9.2002 -0.700195 -9.2002 -6.5c0 -12.2002 28.7998 0.299805 39.2998 -13.5v-25.7998c-4.90039 -7.09961 -14.0996 -8.90039 -22.5 -8.90039h-32l0.0996094 14.8008\n+h32c4.10059 0 8.40039 1.2998 8.40039 6.39941c0 14.6006 -42.7002 -5.59961 -42.7002 27.4004c0 14.0996 11 20.7002 23.7998 20.7002h32.9004v-14.6006h-30.0996zM487.9 125c4.09961 0 8.69922 1 8.7998 6.40039c0 14.8994 -42.7002 -5.60059 -42.7002 27.3994\n+c0 14.1006 10.7002 20.7002 23.5 20.7002h33.2002v-14.5996h-30.4004c-4.2998 0 -9.2002 -0.800781 -9.2002 -6.40039c0 -15.0996 42.9004 6.90039 42.9004 -26.2998c0 -16.4004 -11.4004 -22 -26.2002 -22h-32.2002l0.100586 14.7998h32.2002zM445.7 165.1h-38.5v-12.5\n+h37.7998v-14.0996h-37.9004v-13.7998l38.6006 -0.299805l-0.100586 -14.3008h-55.1992l0.0996094 69.3008h55.2002v-14.3008zM389.4 273.2c0.299805 0.299805 1.69922 1 7.2998 1c1 0 2 -0.100586 3.09961 -0.100586l-7.2998 -16.8994\n+c-2.2998 0 -3.2002 0.399414 -3.40039 0.5c-0.199219 0.200195 -1.09961 1.89941 -1.09961 7.89941c0 5.40039 1.09961 7.40039 1.40039 7.60059zM409.8 283.7h-0.0996094h0.0996094zM393.6 298.9h16.1006v-15.2002c-17.4004 0.299805 -33.1006 4.09961 -33.1006 -19.7002\n+c0 -11.7998 2.80078 -19.9004 16.1006 -19.9004h7.39941l23.5 54.5h24.8008l27.8994 -65.3994v65.3994h25.2998l29.1006 -48.0996v48.0996h16.8994v-69h-23.5996l-31.2002 51.9004v-51.9004h-33.7002l-6.59961 15.3008h-34.2998l-6.40039 -15.3008h-19.2002\n+c-22.7998 0 -33 11.8008 -33 34c0 23.3008 10.5 35.3008 34 35.3008zM435.7 286.8l-11.6006 -27.5996h22.8008zM334.6 298.8h16.9004v-69.2998h-16.9004v69.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-paypal\" unicode=\"&#xf1f4;\" horiz-adv-x=\"576\" \n+d=\"M186.3 189.8c0 -12.2002 -9.7002 -21.5 -22 -21.5c-9.2002 0 -16 5.2002 -16 15c0 12.2002 9.5 22 21.7002 22c9.2998 0 16.2998 -5.7002 16.2998 -15.5zM80.5 238.3c11.2998 0 19.7998 -1.5 17.5 -14.8994c-2 -12.7002 -10.5 -14.2002 -21.5 -14.2002l-8.2002 -0.299805\n+l4.2998 26.6992c0.200195 1.7002 1.7002 2.7002 3.2002 2.7002h4.7002zM364.5 238.3c8.5 0 18 -0.5 18.0996 -11.0996c0 -15 -9 -18 -22 -18l-8 -0.299805l4.2002 26.6992c0.200195 1.7002 1.40039 2.7002 3.2002 2.7002h4.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480\n+c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM128.3 232.6c0 21 -16.2002 28 -34.7002 28h-40c-2.5 0 -5 -2 -5.19922 -4.69922l-16.4004 -102.101c-0.299805 -2 1.2002 -4 3.2002 -4h19c2.7002 0 5.2002 2.90039 5.5 5.7002l4.5 26.5996\n+c1 7.2002 13.2002 4.7002 18 4.7002c28.5996 0 46.0996 17 46.0996 45.7998zM212.5 223.8h-19c-3.7998 0 -4 -5.5 -4.2002 -8.2002c-5.7998 8.5 -14.2002 10 -23.7002 10c-24.5 0 -43.1992 -21.5 -43.1992 -45.1992c0 -19.5 12.1992 -32.2002 31.6992 -32.2002\n+c9 0 20.2002 4.89941 26.5 11.8994c-0.5 -1.5 -1 -4.69922 -1 -6.19922c0 -2.30078 1 -4 3.2002 -4h17.2002c2.7002 0 5 2.89941 5.5 5.69922l10.2002 64.3008c0.299805 1.89941 -1.2002 3.89941 -3.2002 3.89941zM253 125.9l63.7002 92.5996c0.5 0.5 0.5 1 0.5 1.7002\n+c0 1.7002 -1.5 3.5 -3.2002 3.5h-19.2002c-1.7002 0 -3.5 -1 -4.5 -2.5l-26.5 -39l-11 37.5c-0.799805 2.2002 -3 4 -5.5 4h-18.7002c-1.69922 0 -3.19922 -1.7998 -3.19922 -3.5c0 -1.2002 19.5 -56.7998 21.1992 -62.1006c-2.69922 -3.7998 -20.5 -28.5996 -20.5 -31.5996\n+c0 -1.7998 1.5 -3.2002 3.2002 -3.2002h19.2002c1.7998 0.100586 3.5 1.10059 4.5 2.60059zM412.3 232.6c0 21 -16.2002 28 -34.7002 28h-39.6992c-2.7002 0 -5.2002 -2 -5.5 -4.69922l-16.2002 -102c-0.200195 -2 1.2998 -4 3.2002 -4h20.5c2 0 3.5 1.5 4 3.19922l4.5 29\n+c1 7.2002 13.1992 4.7002 18 4.7002c28.3994 0 45.8994 17 45.8994 45.7998zM496.5 223.8h-19c-3.7998 0 -4 -5.5 -4.2998 -8.2002c-5.5 8.5 -14 10 -23.7002 10c-24.5 0 -43.2002 -21.5 -43.2002 -45.1992c0 -19.5 12.2002 -32.2002 31.7002 -32.2002\n+c9.2998 0 20.5 4.89941 26.5 11.8994c-0.299805 -1.5 -1 -4.69922 -1 -6.19922c0 -2.30078 1 -4 3.2002 -4h17.2998c2.7002 0 5 2.89941 5.5 5.69922l10.2002 64.3008c0.299805 1.89941 -1.2002 3.89941 -3.2002 3.89941zM544 257.1c0 2 -1.5 3.5 -3.2002 3.5h-18.5\n+c-1.5 0 -3 -1.19922 -3.2002 -2.69922l-16.1992 -104l-0.300781 -0.5c0 -1.80078 1.5 -3.5 3.5 -3.5h16.5c2.5 0 5 2.89941 5.2002 5.69922l16.2002 101.2v0.299805zM454 205.3c9.2998 0 16.2998 -5.7002 16.2002 -15.5c0 -12.2998 -9.7002 -21.5 -21.7002 -21.5\n+c-9.2002 0 -16.2002 5.2998 -16.2002 15c0 12.2998 9.5 22 21.7002 22z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-stripe\" unicode=\"&#xf1f5;\" horiz-adv-x=\"576\" \n+d=\"M492.4 227.2c8.69922 0 18 -6.7002 18 -22.7002h-36.7002c0 16 9.7998 22.7002 18.7002 22.7002zM375 224.6c12.9004 0.100586 21.9004 -14.5 21.9004 -33.0996c0 -19.0996 -8.80078 -33.4004 -21.9004 -33.4004c-8.2998 0 -13.2998 3 -16.7998 6.7002l-0.200195 52.7998\n+c3.7002 4.10059 8.7998 7 17 7zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM122.2 166.9c0 42.2998 -54.2998 34.6992 -54.2998 50.6992c0 5.5 4.59961 7.7002 12.0996 7.7002\n+c10.7998 0 24.5 -3.2998 35.2998 -9.09961v33.3994c-11.7998 4.7002 -23.5 6.5 -35.2998 6.5c-28.7998 0 -48 -15 -48 -40.1992c0 -39.3008 54 -32.9004 54 -49.9004c0 -6.59961 -5.7002 -8.7002 -13.5996 -8.7002c-11.8008 0 -26.9004 4.90039 -38.9004 11.2998v-33.8994\n+c13.2002 -5.7002 26.5996 -8.10059 38.7998 -8.10059c29.6006 0.200195 49.9004 14.7002 49.9004 40.3008zM191 223.5v30.2998h-26.9004v30.7998l-34.6992 -7.39941l-0.200195 -113.9c0 -21 15.7998 -36.5 36.8994 -36.5c11.6006 0 20.2002 2.10059 24.9004 4.7002v28.9004\n+c-4.5 -1.80078 -27 -8.30078 -27 12.5996v50.5h27zM265 221.1v32.7002h-0.0996094c-4.7002 1.7002 -21.3008 4.7998 -29.6006 -10.5l-2.2002 10.5h-30.6992v-124.5h35.5v84.4004c8.39941 11 22.5996 8.89941 27.0996 7.39941zM309.1 129.3v124.5h-35.6992v-124.5h35.6992z\n+M309.1 272.2v28.8994l-35.6992 -7.59961v-28.9004zM383.2 126.7c25.3994 0.0996094 48.5996 20.5 48.5996 65.5996c0 41.2998 -23.5 63.7998 -48.3994 63.7998c-13.9004 0 -22.9004 -6.59961 -27.8008 -11.0996l-1.7998 8.7998h-31.2998v-165.8l35.5 7.5l0.0996094 40.2002\n+c5.10059 -3.7002 12.7002 -9 25.1006 -9zM543.6 178.2c0.100586 2 0.400391 9.39941 0.400391 12.8994c0 36.4004 -17.5996 65.1006 -51.2998 65.1006c-33.7998 0 -54.2998 -28.7002 -54.2998 -64.9004c0 -42.7998 24.1992 -64.5 58.7998 -64.5\n+c17 0 29.7002 3.90039 39.3994 9.2002v28.5996c-9.69922 -4.89941 -20.7998 -7.89941 -34.8994 -7.89941c-13.7998 0 -26 4.89941 -27.6006 21.5h69.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"lastfm\" unicode=\"&#xf202;\" horiz-adv-x=\"512\" \n+d=\"M225.8 80.9004c0 0 -31.7002 -31.1006 -97.8994 -31.1006c-82.2002 0 -127.9 48.1006 -127.9 137.2c0 92.7002 45.7002 147.2 131.8 147.2c117.7 0 129.3 -66.2002 161.3 -163c14 -42.7998 38.7002 -73.9004 97.9004 -73.9004c39.9004 0 61 8.7998 61 30.5\n+c0 31.9004 -34.9004 35.1006 -79.7998 45.7002c-48.6006 11.7002 -68 36.9004 -68 76.7998c0 64 51.5996 83.9004 104.399 83.9004c59.8008 0 96.2002 -21.7002 100.9 -74.5l-58.5996 -7c-2.30078 25.2002 -17.5 35.7998 -45.7002 35.7998\n+c-25.7998 0 -41.6006 -11.7998 -41.6006 -31.7002c0 -17.5996 7.60059 -28.0996 33.4004 -34c52.2998 -11.5 115 -19.2002 115 -92.0996c0 -58.6006 -49.2998 -80.9004 -122 -80.9004c-101.4 0 -136.6 45.7002 -155.4 102.601\n+c-26.0996 81.5996 -34.3994 134.899 -100.899 134.899c-35.7002 0 -72.1006 -25.7998 -72.1006 -97.8994c0 -56.3008 28.7002 -91.5 69.2002 -91.5c45.7002 0 76.2002 34 76.2002 34z\" \u002F>\n+    \u003Cglyph glyph-name=\"lastfm-square\" unicode=\"&#xf203;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM307.8 103.1c45.4004 0 76.2002 13.9004 76.1006 50.6006c0 45.5 -39.1006 50.3994 -71.8008 57.5\n+c-16.0996 3.7002 -20.8994 10.2998 -20.8994 21.2998c0 12.5 9.89941 19.7998 26 19.7998c17.5996 0 27.0996 -6.59961 28.5996 -22.3994l36.7002 4.39941c-2.90039 33 -25.5996 46.6006 -63 46.6006c-32.9004 0 -65.2002 -12.4004 -65.2002 -52.4004\n+c0 -24.9004 12.1006 -40.7002 42.5 -48c28.1006 -6.59961 49.9004 -8.7002 49.9004 -28.5996c0 -13.6006 -13.2002 -19.1006 -38.1006 -19.1006c-37 0 -52.3994 19.4004 -61.1992 46.2002c-20 60.5 -27.3008 101.9 -100.801 101.9c-53.8994 0 -82.5 -34.1006 -82.5 -92\n+c0 -55.7002 28.6006 -85.8008 79.9004 -85.8008c41.4004 0 61.2002 19.4004 61.2002 19.4004l-11.7002 31.9004s-19 -21.3008 -47.5996 -21.3008c-25.3008 0 -43.3008 22 -43.3008 57.2002c0 45.1006 22.7002 61.2002 45.1006 61.2002c41.5 0 46.7002 -33.2998 63 -84.2998\n+c11.7002 -35.5 33.7002 -64.1006 97.0996 -64.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"ioxhost\" unicode=\"&#xf208;\" horiz-adv-x=\"640\" \n+d=\"M616 288c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-52.7002c3.10059 -15.5 4.7002 -31.5996 4.7002 -48c0 -137 -111 -248 -248 -248c-102.9 0 -191.2 62.7002 -228.7 152h-67.2998c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24\n+h52.7002c-3.10059 15.5 -4.7002 31.5996 -4.7002 48c0 137 111 248 248 248c102.9 0 191.2 -62.7002 228.7 -152h67.2998zM520 192c0 16.5996 -2 32.5996 -5.7998 48h-298.2c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24h279.5\n+c-33.9004 62 -99.7998 104 -175.5 104c-110.5 0 -200 -89.5 -200 -200c0 -16.5996 2 -32.5996 5.7998 -48h298.2c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-279.5c33.9004 -62 99.7998 -104 175.5 -104c110.5 0 200 89.5 200 200zM216 216h208\n+c13.2998 0 24 -10.7002 24 -24c0 -13.2002 -10.7002 -24 -24 -24h-208c-13.2998 0 -24 10.7002 -24 24c0 13.2002 10.7002 24 24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"angellist\" unicode=\"&#xf209;\" \n+d=\"M347.1 232.6c48 -11.6992 54.9004 -50.5996 54.9004 -93.6992c0 -114.301 -73.4004 -202.9 -191.4 -202.9c-96.1992 0 -164.6 76.4004 -164.5 148.6c0 37.1006 14.2002 61.7002 51.1006 71.7002c-3.10059 8.2998 -8 20.7998 -8 29.7002\n+c0 23.5 24.8994 52.5996 48.2998 52.5996c6.90039 0 13.7002 -2 20 -4.2998c-12.4004 35.2002 -46.5996 126.7 -46.5996 162c0 28.7998 14.5996 51.7002 45.6992 51.7002c40 0 85.4004 -144 95.1006 -172.5c12.5 31.4004 52.5 163.1 97.0996 163.1\n+c28 0 43.7002 -22.2998 43.7002 -48.8994c0 -30.2002 -33.7002 -124.5 -45.4004 -157.101zM311.7 340l-33.1006 -93.7002l34 -6c8.5 23.4004 47.1006 128.9 47.1006 148c0 7.10059 -2.2998 16 -10.9004 16c-16 0 -33.0996 -52 -37.0996 -64.2998zM142.3 399.7\n+c0 -29.1006 34.6006 -120 45.5 -148.8c7.7002 4.39941 19.7998 2.69922 35.4004 1.39941l-34.6006 100.3c-31.7998 92.8008 -46.2998 59 -46.2998 47.1006zM140 204c-7.7002 0 -20.2998 -13.4004 -20.4004 -21.0996c0 -20.8008 56 -97.7002 76.9004 -97.7002\n+c5.7002 0 10.5996 6.2998 10.5996 11.3994c0 12.8008 -37.7998 107.4 -67.0996 107.4zM324.3 17.7002c55.2998 61.5 49.1006 158.6 31 174.7c-24 21.0996 -106 29.0996 -138.3 29.0996c-17.2998 0 -17.4004 -6.40039 -17.4004 -13.0996\n+c0 -43.7002 92.9004 -39.7002 120.601 -39.7002c11.2002 0 15.7998 -9.90039 16.8994 -21.1006c-7.39941 -7.39941 -17.6992 -11.6992 -27.3994 -15.3994c-9.40039 -3.40039 -19.1006 -7.10059 -27.1006 -13.1006c-22 -16 -43.6992 -43.3994 -43.6992 -71.6992\n+c0 -17.7002 10.5996 -32.9004 10.5996 -50.3008c0 -0.299805 -2 -6.5 -2 -7.39941c-32.5996 2.2998 -40.5996 34.5996 -41.7002 61.7002c-3.39941 -0.900391 -8 -0.600586 -11.7002 -0.600586c5.10059 -17.7998 -11.8994 -42 -38 -42\n+c-37.7998 0 -88 57.2002 -58.2998 86.9004c28.7002 -35.9004 35 -51.4004 51.1006 -51.4004c4 0 11.6992 3.40039 11.6992 8.2998c0 12.8008 -42.8994 73.1006 -54.2998 73.1006c-16.7998 0 -37.7002 -24.9004 -20.5996 -68.2998\n+c22.5996 -55.7002 69.5 -88.3008 128.899 -88.3008c43.4004 0 80.6006 16.6006 109.7 48.6006zM225.7 143.7c3.2002 -8.2998 6.59961 -16.6006 9.39941 -25.1006c6.30078 7.10059 12.9004 13.7002 20.3008 19.1006c-10 2 -20 2.89941 -29.7002 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"buysellads\" unicode=\"&#xf20d;\" \n+d=\"M224 297.3l42.9004 -160.7h-85.8008zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM382.7 42.7002l-94.5 298.7h-128.4l-94.5 -298.7h90.7002l111.7 91.5996l24.2002 -91.5996h90.7998z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"connectdevelop\" unicode=\"&#xf20e;\" horiz-adv-x=\"576\" \n+d=\"M550.5 207c6.69629 -1.33887 11.7861 -7.5 11.7881 -14.7324c0 -7.5 -5.3584 -13.6602 -12.3223 -15l-54.9111 -95.3574c0.536133 -1.60742 0.804688 -3.21387 0.804688 -4.82129c0 -7.23145 -5.09082 -13.3926 -12.0547 -14.7314l-51.6963 -90.2686\n+c0.535156 -1.33887 0.802734 -2.67773 0.802734 -4.28516c0 -8.30371 -6.69727 -15.2676 -15.2686 -15.2676c-4.28516 0 -8.30371 1.875 -10.9814 4.82129h-107.144c-2.67871 -3.21484 -6.96484 -5.35742 -11.5176 -5.35742s-8.83887 2.14258 -11.5166 5.35645h-106.875\n+c-2.67969 -3.21484 -6.69727 -5.35742 -11.5186 -5.35742c-8.30371 0 -15.2676 6.69727 -15.2676 15.2676c0 1.875 0.535156 3.75 1.07031 5.35742l-51.6963 89.7324c-6.96484 1.33887 -12.0547 7.5 -12.0547 14.7314c0 1.875 0.268555 3.21387 0.804688 4.82129\n+l-55.1797 95.3574c-6.96484 1.60742 -12.0537 7.76855 -12.0537 15c0 7.5 5.3584 13.6611 12.5898 15l53.3047 92.1436c0 0.536133 -0.268555 1.07227 -0.268555 1.60645c0 6.16113 3.75098 11.251 9.10742 13.6611l55.9824 97.2334\n+c-0.536133 1.33887 -1.07129 3.21387 -1.07129 4.82129c0 8.57129 6.96484 15.2676 15.2676 15.2676c4.82227 0 8.83887 -2.14258 11.7861 -5.625h106.071c2.67871 3.48242 6.69629 5.625 11.5176 5.625s8.83887 -2.14258 11.5176 -5.62402h106.606\n+c2.94727 3.48242 6.96484 5.625 11.7861 5.625c8.30371 0 15.2676 -6.69727 15.2676 -15.2676c0 -1.60742 -0.535156 -3.21484 -1.07031 -4.82129l55.4463 -95.8936c8.03613 -0.267578 14.7324 -6.96484 14.7324 -15.001c0 -2.67871 -0.803711 -5.08984 -1.875 -7.23145z\n+M153.535 -2.73242v75.8037h-43.6602zM153.535 81.1074v50.624l-44.999 -47.4102c0.535156 -1.07227 1.07129 -2.14355 1.33887 -3.21387h43.6602zM153.535 143.518l0.000976562 92.9463l-50.0889 51.9648c-2.41113 -1.60645 -5.08887 -2.41113 -7.76855 -2.67871\n+l-51.9648 -90c0.268555 -1.07227 0.268555 -2.14258 0.268555 -3.48242c0 -1.33887 0 -2.67871 -0.535156 -4.01758l55.7129 -96.4287c1.33887 -0.267578 2.67871 -1.07129 4.01758 -1.60742zM153.535 245.84v72.0527l-43.9277 -15.8037\n+c0 -0.267578 0.267578 -0.803711 0.267578 -1.07227c0 -2.94531 -0.803711 -5.62402 -2.14258 -7.7666zM153.535 326.465v59.7324l-43.6602 -75.5361zM480.054 287.357l-0.267578 0.267578l-98.0361 -101.518l63.75 -67.2324l35.3584 167.143zM291.75 92.8926\n+l-11.25 -11.7852h22.7676zM291.482 104.143l79.2852 82.2324l-83.0352 87.5889l-79.5537 -84.375zM296.839 98.25l16.875 -17.1426h124.02l5.8916 28.125l-67.5 71.25zM410.411 403.607l-117.053 -124.019l83.0342 -87.5889l97.5 101.25\n+c-1.33984 2.14258 -2.14258 4.82129 -2.14258 7.7666v0.536133l-57.8574 100.714c-1.33984 0.268555 -2.41016 0.804688 -3.48145 1.34082zM401.304 405.75h-4.28711l-166.339 -60l57.0547 -60.2676zM277.821 405.75h-103.929l50.8936 -53.5713l148.393 53.5713h-75\n+c-2.67871 -2.67773 -6.16016 -4.28516 -10.1787 -4.28516s-7.50098 1.60742 -10.1787 4.28516zM161.572 400.125v-70.7148l54.9111 19.8213l-51.1611 53.8398c-0.730469 -0.25293 -1.93066 -0.613281 -2.67969 -0.804688zM161.572 320.839v-83.3037l40.9814 -42.0527\n+l79.5537 84.1064l-59.7324 63.2139zM161.572 228.161v-76.0723l36.4277 38.3037zM161.572 140.303v-59.1953h107.678l17.1426 17.6777l-82.7676 85.9814zM168.536 -21.75h1.33887l91.6074 94.8213h-99.9102v-89.7324l1.07031 -1.60645\n+c2.41113 -0.804688 4.28613 -1.875 5.89355 -3.48242zM298.447 -21.75h104.194l-91.6064 94.8213h-38.3037l-91.6074 -94.8213h96.4287c2.68066 2.41016 6.42871 4.28516 10.4473 4.28516s7.76758 -1.875 10.4473 -4.28516zM418.447 -9.96387l17.4121 83.0361h-114.376\n+l89.1953 -91.875c1.07227 0.536133 2.14355 1.07031 3.48242 1.33887zM431.303 12.2676l34.8223 60.8037h-21.9639zM466.125 81.1074c0.267578 1.07129 0.803711 2.14258 1.33887 2.94531l-17.1426 18.2139l-4.55371 -21.1592h20.3574zM532.286 188.518\n+c-0.268555 1.33984 -0.536133 2.41113 -0.536133 3.75c0 1.60742 0.536133 2.94629 0.802734 4.28516l-45.8027 79.2861l-34.5537 -163.928l20.625 -21.9639c1.33887 0.802734 2.67871 1.33887 4.01758 1.87402z\" \u002F>\n+    \u003Cglyph glyph-name=\"dashcube\" unicode=\"&#xf210;\" \n+d=\"M326.6 344l102.2 104v-427c0 -50.5 -40.0996 -85 -91.2002 -85h-227.199c-51.1006 0 -91.2002 34.5 -91.2002 85v229.5c0 50.2002 40.0996 93.5 91.2002 93.5h216.199zM153.9 31.5v-0.0996094h223.8l-51.1006 52.2998v123.5c0 17.7002 -14.2998 32.5 -32 32.5h-140.699\n+c-17.7002 0 -32.4004 -14.7998 -32.4004 -32.5v-142.9c0 -17.7002 14.7002 -32.7998 32.4004 -32.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"forumbee\" unicode=\"&#xf211;\" \n+d=\"M5.7998 138.3c-3.7998 17 -5.7998 34.2002 -5.7998 51.4004c0 123.3 99.7998 223.3 223.1 223.3c16.6006 0 33.3008 -2 49.3008 -5.5c-123.4 -47 -220.5 -145.5 -266.601 -269.2zM398.7 327.5c-151.101 -44 -269.2 -164.4 -312.3 -315.7\n+c-17.2002 13.4004 -32.7002 30.9004 -45.2002 49c43.3994 149.9 160.1 267.7 309.7 312c18.0996 -12.5996 34.0996 -27.7998 47.7998 -45.2998zM414.5 74.7998c13.0996 -35.2998 24.2002 -73.2998 33.5 -109.8c-36.0996 9.2998 -72 20.5 -107 33.5996\n+c-25.7002 -16 -54.5996 -26.8994 -84.5996 -31.2998c42.5996 79.7002 108.199 147.4 187.6 190.3c-4.09961 -29.0996 -14.2998 -57.6992 -29.5 -82.7998zM444.2 220.3c-113.7 -46.7002 -204.2 -139.399 -250.5 -253.5c-19.6006 2.7002 -38.5 7.60059 -56.6006 15.2002\n+c44.9004 138.5 153.4 249.3 291.301 295.1c7.89941 -18.0996 13.1992 -37.2998 15.7998 -56.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"leanpub\" unicode=\"&#xf212;\" horiz-adv-x=\"576\" \n+d=\"M386.539 336.515l15.0957 -248.955l-10.9785 0.275391c-36.2324 0.824219 -71.6406 -8.7832 -102.657 -27.9971c-31.0156 19.2139 -66.4238 27.9971 -102.657 27.9971c-45.5635 0 -82.0693 -10.7051 -123.516 -27.7227l31.291 258.288\n+c28.5459 11.8027 61.4834 18.1143 92.2256 18.1143c41.1729 0 73.8359 -13.1748 102.657 -42.5439c27.7227 28.2715 59.0127 41.7217 98.5391 42.5439zM569.07 0c-25.5264 0 -47.4854 5.21484 -70.542 15.6445c-34.3105 15.6455 -69.9932 24.9785 -107.871 24.9785\n+c-38.9775 0 -74.9346 -12.9014 -102.657 -40.623c-27.7227 27.7227 -63.6797 40.623 -102.657 40.623c-37.8779 0 -73.5605 -9.33301 -107.871 -24.9785c-22.2324 -9.88086 -44.7402 -15.6445 -69.1689 -15.6445h-1.37305l42.5449 349.141\n+c39.251 22.2334 87.0117 34.8594 132.301 34.8594c37.0547 0 75.209 -7.68457 106.225 -29.0947c31.0156 21.4102 69.1699 29.0947 106.225 29.0947c45.2891 0 93.0498 -12.626 132.301 -34.8594zM525.702 44.7412l-34.0361 280.246\n+c-30.7422 13.999 -67.248 21.4102 -101.009 21.4102c-38.4287 0 -74.3848 -12.0771 -102.657 -38.7021c-28.2725 26.625 -64.2275 38.7021 -102.657 38.7021c-33.7607 0 -70.2666 -7.41113 -101.009 -21.4102l-34.0361 -280.246\n+c47.2109 19.4863 82.8945 33.4854 135.045 33.4854c37.6045 0 70.8174 -9.60547 102.657 -29.6436c31.8398 20.0381 65.0518 29.6436 102.657 29.6436c52.1504 0 87.834 -13.999 135.045 -33.4854z\" \u002F>\n+    \u003Cglyph glyph-name=\"sellsy\" unicode=\"&#xf213;\" horiz-adv-x=\"640\" \n+d=\"M539.71 210.692c55.1572 -13.4834 94.0742 -63.124 94.0732 -119.509c0 -68.0264 -55.4639 -123.184 -123.185 -123.184h-381.197c-67.7217 0 -123.186 55.1572 -123.185 123.185c0 47.4961 27.8848 91.0098 70.7852 111.234\n+c-2.14453 7.35449 -3.06543 15.0146 -3.06543 22.3691c0 46.2705 37.6914 83.9609 83.9629 83.9609c20.2227 0 39.835 -7.35449 55.1562 -20.5303c18.3867 74.7695 85.8008 127.781 163.021 127.781c92.542 0 167.924 -75.3818 167.924 -167.924\n+c0 -12.5635 -1.22559 -25.127 -4.29004 -37.3838zM199.88 46.4463v110.928c0 8.27344 -7.04688 15.3213 -15.3213 15.3213h-30.9482c-8.27344 0 -15.3213 -7.04785 -15.3213 -15.3213v-110.928c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h30.9482\n+c8.27344 0 15.3213 7.04688 15.3213 15.3213zM289.357 46.4463v131.458c0 8.27246 -7.04883 15.3203 -15.3223 15.3203h-30.9492c-8.27246 0 -15.3213 -7.04688 -15.3213 -15.3203v-131.458c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h30.9492\n+c8.27344 0 15.3223 7.04688 15.3223 15.3213zM378.834 46.4463v162.714c0 8.27246 -7.04688 15.3213 -15.3213 15.3213h-30.9482c-8.27441 0 -15.3223 -7.04785 -15.3223 -15.3213v-162.714c0 -8.27344 7.04785 -15.3213 15.3223 -15.3213h30.9482\n+c8.27441 0 15.3213 7.04688 15.3213 15.3213zM465.861 46.4463v224.612c0 8.58008 -7.04785 15.6279 -15.3223 15.6279h-28.4971c-8.27441 0 -15.3213 -7.04883 -15.3213 -15.6279v-224.612c0 -8.27344 7.04688 -15.3213 15.3213 -15.3213h28.4971\n+c8.27441 0 15.3223 7.04688 15.3223 15.3213z\" \u002F>\n+    \u003Cglyph glyph-name=\"shirtsinbulk\" unicode=\"&#xf214;\" \n+d=\"M100 37.7002l4.40039 9.89941l30.5996 -13.3994l-4.40039 -9.90039zM139.4 20.2002l4.39941 9.89941l30.6006 -13.3994l-4.40039 -9.90039zM311.5 34.2002l30.5996 13.3994l4.40039 -9.89941l-30.5996 -13.4004zM179.1 3l4.40039 9.59961l30.2998 -13.3994\n+l-4.39941 -9.90039zM60.4004 55.2002l4.39941 9.89941l30.6006 -13.6992l-4.40039 -9.60059zM271.8 16.7002l30.6006 13.3994l4.39941 -9.89941l-30.5996 -13.4004zM232.5 -0.799805l30.5996 13.3994l4.40039 -9.59961l-30.5996 -13.7002zM350.9 51.4004l30.5996 13.6992\n+l4.40039 -9.89941l-30.6006 -13.4004zM170 401.4v-10.5h-33.5v10.5h33.5zM122.8 401.4l-0.0996094 -10.5h-33.5v10.5h33.5996zM75.5 401.4l0.0996094 -10.5h-33.2998v10.5h33.2002zM217 401.4v-10.5h-33.2002v10.5h33.2002zM311.5 401.4v-10.5h-33.5v10.5h33.5zM358.8 401.4\n+v-10.5h-33.5v10.5h33.5zM264.2 401.4v-10.5h-33.2002v10.5h33.2002zM405.7 401.4v-10.5h-33.2998v10.5h33.2998zM52.7998 96.9004v-33.5h-10.7998v33.5h10.7998zM122.8 312.8l-0.0996094 -10.5h-33.5v10.5h33.5996zM52.7998 302.2v-23h-10.7998v33.5h33.5996v-10.5h-22.7998\n+zM221.7 73.5996c-50.2002 0 -91.2998 40.8008 -91.2998 91.3008c0 50.1992 41.0996 91.2998 91.2998 91.2998c50.5 0 91.2998 -41.1006 91.2998 -91.2998c0 -50.5 -40.7998 -91.3008 -91.2998 -91.3008zM173.5 184.7c0 -44.2998 77.5996 -11.9004 77.5996 -38\n+c0 -13.1006 -24 -14.2998 -32.6992 -14.2998c-12.3008 0 -29.8008 2.69922 -35.9004 14.8994h-0.900391l-9 -18.3994c14.8008 -9.30078 29.1006 -12.2002 47.2002 -12.2002c19.5 0 51 5.7998 51 31.2002c0 48.0996 -78.5 16.2998 -78.5 37.8994\n+c0 13.1006 20.7998 14.9004 29.7998 14.9004c10.8008 0 29.2002 -3.2002 35.6006 -13.1006h0.899414l8.80078 16.9004c-15.1006 6.2002 -27.4004 12 -44.3008 12c-20.0996 0 -49.5996 -6.40039 -49.5996 -31.7998zM52.7998 269.6v-33.5996h-10.7998v33.5996h10.7998z\n+M395.2 63.4004v33.5h10.7998v-33.5h-10.7998zM52.7998 140.1v-33.5h-10.7998v33.5h10.7998zM0 444.3h448v-406l-226.3 -98.5996l-221.7 98.5996v406zM418.8 57.2002h0.100586v270.1h-389.7v-270.1l192.8 -85.7002zM418.8 356.5h0.100586v58.5996h-389.7v-58.5996h389.6z\n+M52.7998 226.4v-33.5h-10.7998v33.5h10.7998zM52.7998 183.2v-33.5h-10.7998v33.5h10.7998zM170 312.8v-10.5h-33.5v10.5h33.5zM395.2 149.7v33.5h10.7998v-33.5h-10.7998zM395.2 192.9v33.5h10.7998v-33.5h-10.7998zM217 312.8v-10.5h-33.2002v10.5h33.2002zM395.2 236\n+v33.5h10.7998v-33.5h-10.7998zM395.2 106.5v33.5h10.7998v-33.5h-10.7998zM264.2 312.8v-10.5h-33.2002v10.5h33.2002zM311.5 312.8v-10.5h-33.5v10.5h33.5zM395.2 279.2l0.0996094 23h-22.7998v10.5h33.5v-33.5h-10.7998zM358.8 312.8v-10.5h-33.5v10.5h33.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"simplybuilt\" unicode=\"&#xf215;\" horiz-adv-x=\"512\" \n+d=\"M481.2 384c14.7002 0 26.5 -11.7998 26.7002 -26.2998v-331.4c0 -14.5 -11.8008 -26.2998 -26.6006 -26.2998h-450.399c-14.8008 0 -26.6006 11.7998 -26.6006 26.2998v331.4c0 14.5 11.7998 26.2998 26.4004 26.2998h106c14.5996 0 26.5996 -11.7998 26.5996 -26.2998\n+v-39.6006h185.3v39.6006c0 14.5 12.1006 26.2998 26.6006 26.2998h106zM149.8 92.2002c36.9004 0 66.6006 29.7002 66.6006 66.3994c0 36.9004 -29.7002 66.6006 -66.6006 66.6006c-36.7002 0 -66.3994 -29.7002 -66.3994 -66.6006\n+c0 -36.6992 29.7998 -66.3994 66.3994 -66.3994zM362.2 92.2002c36.5996 0 66.3994 29.7002 66.3994 66.5996c0 36.7002 -29.7998 66.4004 -66.3994 66.4004c-36.9004 0 -66.6006 -29.7998 -66.6006 -66.4004c0 -36.8994 29.7002 -66.5996 66.6006 -66.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"skyatlas\" unicode=\"&#xf216;\" horiz-adv-x=\"640\" \n+d=\"M640 118.7c0 -65.9004 -52.5 -114.4 -117.5 -114.4c-165.9 0 -196.6 249.7 -359.7 249.7c-146.899 0 -147.1 -212.2 5.60059 -212.2c42.5 0 90.8994 17.7998 125.3 42.5c5.59961 4.10059 16.8994 16.2998 22.7998 16.2998s10.9004 -5 10.9004 -10.8994\n+c0 -7.7998 -13.1006 -19.1006 -18.7002 -24.1006c-40.9004 -35.5996 -100.3 -61.1992 -154.7 -61.1992c-83.4004 -0.100586 -154 59 -154 144.899c0 85.9004 67.5 149.101 152.8 149.101c185.3 0 222.5 -245.9 361.9 -245.9c99.8994 0 94.7998 139.7 3.39941 139.7\n+c-17.5 0 -35 -11.6006 -46.8994 -11.6006c-8.40039 0 -15.9004 7.2002 -15.9004 15.6006c0 11.5996 5.2998 23.7002 5.2998 36.2998c0 66.5996 -50.8994 114.7 -116.899 114.7c-53.1006 0 -80 -36.9004 -88.7998 -36.9004c-6.2002 0 -11.2002 5 -11.2002 11.2002\n+c0 5.59961 4.09961 10.2998 7.7998 14.4004c25.2998 28.7998 64.7002 43.6992 102.8 43.6992c79.4004 0 139.101 -58.3994 139.101 -137.8c0 -6.89941 -0.300781 -13.7002 -1.2002 -20.5996c11.8994 3.09961 24.0996 4.7002 35.8994 4.7002\n+c60.7002 0 111.9 -45.3008 111.9 -107.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"pinterest-p\" unicode=\"&#xf231;\" horiz-adv-x=\"384\" \n+d=\"M204 441.5c94.2002 0 180 -64.7998 180 -164.1c0 -93.3008 -47.7002 -196.801 -153.9 -196.801c-25.1992 0 -57 12.6006 -69.2998 36c-22.7998 -90.2998 -21 -103.8 -71.3994 -172.8c-5.2002 -1.89941 -3.5 -2.2998 -6.90039 1.5c-1.7998 18.9004 -4.5 37.5 -4.5 56.4004\n+c0 61.2002 28.2002 149.7 42 209.1c-7.5 15.2998 -9.59961 33.9004 -9.59961 50.7002c0 80 93.8994 92 93.8994 25.7998c0 -39 -26.3994 -75.5996 -26.3994 -113.399c0 -25.8008 21.2998 -43.8008 46.1992 -43.8008c69 0 90.3008 99.6006 90.3008 152.7\n+c0 71.1006 -50.4004 109.8 -118.5 109.8c-79.2002 0 -140.4 -57 -140.4 -137.399c0 -38.7002 23.7002 -58.5 23.7002 -67.7998c0 -7.80078 -5.7002 -35.4004 -15.6006 -35.4004c-24 0 -63.5996 40 -63.5996 110.4c0 110.699 101.4 179.1 204 179.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"whatsapp\" unicode=\"&#xf232;\" \n+d=\"M380.9 350.9c41.8994 -42 67.0996 -97.7002 67.0996 -157c0 -122.4 -101.8 -222 -224.1 -222h-0.100586c-37.2002 0 -73.7002 9.2998 -106.1 27l-117.7 -30.9004l31.5 115c-19.4004 33.7002 -29.5996 71.9004 -29.5996 111c0 122.4 99.5996 222 222 222\n+c59.2998 0 115.1 -23.0996 157 -65.0996zM223.9 9.2998c101.699 0 186.6 82.7998 186.6 184.601c0.0996094 49.2998 -21.2998 95.5996 -56.0996 130.5c-34.8008 34.8994 -81.1006 54.0996 -130.4 54.0996c-101.8 0 -184.6 -82.7998 -184.6 -184.5\n+c0 -34.9004 9.69922 -68.7998 28.1992 -98.2002l4.40039 -7l-18.5996 -68.0996l69.7998 18.2998l6.7002 -4c28.2998 -16.7998 60.7998 -25.7002 94 -25.7002zM325.1 147.5c5.5 -2.7002 9.2002 -4.09961 10.5 -6.59961c1.40039 -2.30078 1.40039 -13.4004 -3.19922 -26.4004\n+c-4.60059 -13 -26.7002 -24.7998 -37.4004 -26.4004c-17.5996 -2.59961 -31.4004 -1.2998 -66.5996 13.9004c-55.7002 24.0996 -92 80.0996 -94.8008 83.7998c-2.69922 3.7002 -22.5996 30.1006 -22.5996 57.4004s14.2998 40.7002 19.4004 46.2998\n+c5.09961 5.5 11.0996 6.90039 14.7998 6.90039s7.39941 0 10.5996 -0.200195c3.40039 -0.200195 8 1.2998 12.5 -9.5c4.60059 -11.1006 15.7002 -38.4004 17.1006 -41.2002c1.39941 -2.7998 2.2998 -6 0.5 -9.7002c-10.6006 -21.2002 -22 -20.5 -16.3008 -30.2998\n+c21.5 -36.9004 42.9004 -49.7002 75.5 -66c5.5 -2.7998 8.80078 -2.2998 12 1.40039c3.30078 3.7998 13.9004 16.1992 17.6006 21.7998c3.7002 5.59961 7.39941 4.7002 12.5 2.7998c5.09961 -1.7998 32.3994 -15.2002 37.8994 -18z\" \u002F>\n+    \u003Cglyph glyph-name=\"viacoin\" unicode=\"&#xf237;\" horiz-adv-x=\"384\" \n+d=\"M384 416l-48 -112h48v-48h-68.5l-13.7998 -32h82.2998v-48h-102.8l-89.2002 -208l-89.2002 208h-102.8v48h82.2998l-13.7998 32h-68.5v48h48l-48 112h64l80.7998 -192h94.5l80.7002 192h64zM192 112l27 64h-54z\" \u002F>\n+    \u003Cglyph glyph-name=\"medium\" unicode=\"&#xf23a;\" \n+d=\"M0 416h448v-448h-448v448zM372.2 309.9v5h-83.2002l-59.2998 -147.9l-67.4004 148h-87.2998v-5.09961l28.0996 -33.9004c2.80078 -2.5 4.2002 -6.09961 3.80078 -9.7998v-133c0.799805 -4.7998 -0.700195 -9.7002 -4.10059 -13.2002l-31.5996 -38.2998v-5.10059h89.7998\n+v5.10059l-31.5996 38.2998c-3.40039 3.5 -5.10059 8.40039 -4.40039 13.2002v115l78.7002 -171.601h9.09961l67.6006 171.601v-136.9c0 -3.59961 0 -4.2998 -2.40039 -6.7002l-24.2998 -23.5996v-4.90039h118v5.10059l-23.5 23\n+c-2.10059 1.5 -3.10059 4.09961 -2.7002 6.7002v169.3c-0.400391 2.5 0.599609 5.09961 2.7002 6.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"y-combinator\" unicode=\"&#xf23b;\" \n+d=\"M448 416v-448h-448v448h448zM236 160.5l77.5 145.5h-32.7002l-45.7998 -91c-4.7002 -9.2998 -9 -18.2998 -12.7998 -26.7998l-12.2002 26.7998l-45.2002 91h-35l76.7002 -143.8v-94.5h29.5v92.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"optin-monster\" unicode=\"&#xf23c;\" horiz-adv-x=\"576\" \n+d=\"M572.6 26.5996c1 -3.5 1.90039 -7 1.7002 -10.6992c0.799805 -31.6006 -44.2998 -64 -73.5 -65.1006c-17.2998 -0.799805 -34.5996 8.40039 -42.7002 23.5c-113.5 -4.09961 -227 -4.89941 -340.199 0c-8.40039 -15.0996 -25.7002 -24 -43 -23.5\n+c-28.9004 1.10059 -74 33.5 -73.5 65.1006c0.299805 3.7998 0.799805 7.2998 1.89941 10.7998c-5.59961 9.39941 -4.7998 15.2998 5.40039 11.5996c3.2998 5.2002 7 9.5 11.0996 13.7998c-2.5 10.9004 1.2998 14.1006 11.1006 9.2002c4.5 3.2998 10 6.5 15.8994 9.2002\n+c0 15.7998 11.7998 11.2002 17.2998 5.7002c12.5 1.7998 20.2002 -0.700195 26.8008 -5.7002v19.7002c-12.9004 0 -40.6006 11.3994 -45.9004 36.2002c-5 20.7998 2.59961 38.0996 25.0996 47.5996c0.800781 5.90039 8.10059 14 14.9004 15.9004\n+c7.59961 1.89941 12.5 -4.60059 14.0996 -10.3008c7.40039 0 17.8008 -1.5 21.1006 -8.09961c5.39941 0.5 11.0996 1.40039 16.5 1.90039c-2.40039 1.89941 -5.10059 3.5 -8.10059 4.59961c-5.09961 8.90039 -13.7998 11.0996 -24.5996 11.5996\n+c0 0.800781 0 1.60059 0.299805 2.7002c-19.7998 0.5 -44.0996 5.60059 -54.8994 17.7998c-21.3008 23.6006 -15.9004 83.6006 12.1992 103.5c8.40039 5.7002 21.6006 0.800781 22.7002 -9.69922c2.40039 -20.6006 0.400391 -26.8008 26.2002 -25.9004\n+c8.09961 7.7998 16.7998 14.5996 26.5 20c-14.9004 1.2998 -28.9004 -1.59961 -43.7998 -3.7998c12.7002 12.5 23.8994 25.3994 56.7002 42.3994c23.5 11.9004 50 20.8008 76.1992 23.2002c-18.5996 7.90039 -40 11.9004 -59.6992 16.5\n+c76.5 16.2002 174.6 22.1006 244.199 -37.5996c18.1006 -15.4004 32.4004 -36.2002 42.7002 -60c39.7998 -4.90039 36.4004 5.5 38.6006 25.0996c1.09961 10.2998 14.2998 15.4004 22.6992 9.5c14.9004 -10.5 22.2002 -30.7998 24.6006 -48.0996\n+c2.2002 -17.7998 0.299805 -41.2998 -12.4004 -55.1006c-10.7998 -12.1992 -34.2998 -17.5996 -53.7998 -18.0996v-2.7998c-11.0996 -0.200195 -20.2998 -2.40039 -25.7002 -11.6006c-3 -1.09961 -5.7002 -2.69922 -8.39941 -4.59961\n+c5.69922 -0.5 11.3994 -1.40039 16.7998 -1.90039c1.89941 5.60059 12.5996 8.40039 21.0996 8.40039c1.7002 5.40039 6.7998 11.9004 14.1006 10.2998c7.2998 -1.59961 14.0996 -10 14.8994 -15.8994c10.7998 -4.40039 22.1006 -12.2002 25.1006 -25.7002\n+c1.89941 -8.10059 1.69922 -15.1006 0.299805 -21.9004c-5.7002 -25.2002 -33.2998 -36.2002 -45.9004 -36.2002c0 -6.69922 0 -13.1992 -0.299805 -19.6992c8.09961 6 16.4004 7.19922 26.7998 5.69922c6 5.90039 17.6006 9.40039 17.6006 -5.69922\n+c5.59961 -2.7002 11.2998 -6 15.8994 -9.2002c10.1006 5 13.7002 0.5 10.7998 -9.2002c4.10059 -4.2998 8.10059 -8.90039 11.1006 -13.7998c10.0996 3.59961 11 -2.10059 5.39941 -11.6006zM498.8 280.6c17.2998 -6.69922 26.2002 -22.0996 30.2998 -35.6992\n+c1.10059 10.5996 -2.69922 39.5 -13.7998 51.0996c-7.2998 7.2998 -14.0996 5.09961 -14.0996 -0.799805c0 -6.2002 -1.2998 -11.6006 -2.40039 -14.6006zM494.2 273.9c-3.2002 -3.30078 -9.2002 -4.90039 -14.1006 -5.7002c13 -15.7002 17 -41.7002 12.7002 -63\n+c10.7998 2.2002 20.5 6.2998 26.2002 12.2002c1.90039 2.19922 3.7998 4.89941 4.90039 7.59961c-1.10059 21.2998 -10.2002 42.7002 -29.7002 48.9004zM470.1 267.1c-3.69922 0 -8.09961 0 -11.7998 0.300781c7.5 -20.6006 12.4004 -42.7002 14.2998 -64.6006\n+c3.5 0 7.5 0.299805 11.6006 0.799805c5.89941 24.3008 -0.299805 51.6006 -14.1006 63.5zM47.5 245c4.09961 13.5 13 28.9004 30.2998 35.7002c-1 3 -2.39941 8.39941 -2.39941 14.5996c0 5.90039 -7.10059 8.10059 -14.1006 0.799805\n+c-11.3994 -11.5996 -14.8994 -40.5996 -13.7998 -51.0996zM57.2002 217.4c5.7002 -6.2002 15.3994 -10 26.2002 -12.2002c-4.30078 21.3994 -0.300781 47.2998 12.6992 63c-4.89941 0.799805 -10.8994 2.5 -14.0996 5.7002\n+c-19.4004 -6.2002 -28.2998 -27.6006 -29.7002 -48.9004c1.40039 -2.7002 3 -5.40039 4.90039 -7.59961zM105.1 202.8c2.40039 22.2002 9.10059 43.7998 19.8008 63.5c-5.2002 -1.09961 -10 -3 -14.9004 -4.89941l-12.2002 -5.10059v0.299805\n+c-7.2998 -14.0996 -10 -34.3994 -5.39941 -53c4.59961 -0.5 8.59961 -0.799805 12.6992 -0.799805zM289.1 365.5c-41.8994 0 -76.1992 -34.0996 -76.1992 -75.9004c0 -42.1992 34.2998 -76.1992 76.1992 -76.1992c41.9004 0 76.2002 34 76.2002 76.1992\n+c0 41.9004 -34.2998 75.9004 -76.2002 75.9004zM404.7 191.2c-12.9004 0.799805 -26.2002 0.799805 -39.5 1.09961c10 -50.5996 3.2998 -64.7002 16.5 -58.0996c16 8.09961 22.7002 39.2002 23 57zM350.7 192.8c-18.9004 0.299805 -38.1006 0.299805 -57 0v0.299805\n+c-0.299805 -5.19922 0.200195 -38.0996 4.2998 -41.0996c11.0996 -5.40039 39.5 -4.59961 51.0996 -1.09961c5.40039 1.59961 2.40039 37 1.60059 41.8994zM278.3 139c4.60059 2.5 2.40039 45.4004 1.2998 53.7002v0.299805\n+c-19.3994 -0.299805 -38.5996 -0.299805 -57.7998 -0.799805c-1.89941 -9.2002 -4.59961 -48.9004 1.90039 -51.6006c13 -5.69922 41.5996 -5.09961 54.5996 -1.59961zM171.8 190.1c-5.39941 -19.6992 0.299805 -45.0996 22.2002 -54.8994\n+c5.40039 -2.5 8.59961 -2.5 9.7002 4.2998c1.89941 8.7002 2.5 36.7998 4.89941 52.2002c-12.1992 -0.200195 -24.5996 -0.799805 -36.7998 -1.60059zM136.4 158.8c2.39941 -3.7002 1.59961 -9.09961 -8 -12.5c43.7998 -47 92.6992 -85.7002 155.899 -106.5\n+c67.5 19.2002 115.601 60 163.2 107c-11.0996 4.2998 -7.7002 10.2998 -7.2998 11.6006c-8.90039 0.799805 -17.9004 1.89941 -26.5 2.69922c-9.5 -33 -36 -52.8994 -46.7998 -31.5996c-2.7002 5.2002 -3.5 11.7002 -4.60059 16.7998\n+c-3.7998 -8.39941 -13.2998 -8.09961 -24.5996 -8.89941c-13.2002 -1.10059 -31.6006 -1.30078 -44 3c-3 -12.9004 -11.1006 -12.9004 -26.7998 -14.3008c-14.1006 -1.39941 -48.7002 -4.09961 -54.9004 10.8008c-1.09961 -28.7002 -35.0996 -10 -45.0996 7\n+c-3.2002 5.69922 -5.40039 11.3994 -7 17.5996c-7.80078 -0.799805 -15.7002 -1.59961 -23.5 -2.7002zM114.8 -13.7002c0.5 2.5 0.799805 5.2002 0.799805 8.2002c-5.69922 23.2002 -18.5996 49.7002 -33.5 54c-22.3994 6.7002 -68.8994 -23.5 -66.1992 -54.5996\n+c12.6992 -19.5 40 -35.7002 59.1992 -36.5c17.8008 -0.800781 35.9004 11.0996 39.7002 28.8994zM106.1 52.2998c9 -16 15.5 -33.2998 16.7002 -51.8994c33.5 19.3994 69.1006 35.6992 105.9 47c-38.7002 20.5 -68.1006 47.7998 -97.2998 77\n+c-2.10059 -1.30078 -5.10059 -2.40039 -7.80078 -3.5c-1.59961 -4.90039 8.7002 -5.30078 5.40039 -12.4004c-2.09961 -4.09961 -8.59961 -7.59961 -15.0996 -9.2002c-2.10059 -2.7002 -5.10059 -4.89941 -7.80078 -6.5h-0.299805\n+c-0.200195 -13.5 -0.200195 -27 0.299805 -40.5zM443.7 -12.2998c-36.7998 21.2998 -74.1006 41.2998 -115.601 53c-13.7998 -6.2002 -27.8994 -11.2998 -42.1992 -15.4004c-2.10059 -0.799805 -2.10059 -0.799805 -4.30078 0\n+c-11.8994 3.7002 -23.2998 8.10059 -34.8994 13.2002c-40.2002 -11.5996 -77.2998 -29.2002 -112.4 -50.7998h-0.299805v-0.299805c0.299805 0 0.299805 0 0.299805 0.299805c103.2 -4.10059 206.4 -3.5 309.4 0zM454.2 0.0996094c1 14.7002 7.2002 35.8008 16.5 51.7002\n+l-0.299805 -0.299805c0.5 13.7002 0.799805 27.5 0.799805 41.2998c-3 1.7002 -5.7002 4.10059 -8.10059 6.7998c-6.5 1.30078 -12.8994 5.10059 -15.0996 8.90039c-1.90039 4.09961 1.2998 7.59961 5.90039 10.2998c-0.200195 0.5 -0.5 1.60059 -0.5 2.40039\n+c-3 0.799805 -5.40039 1.7998 -7.60059 3.2002c-31.5996 -29.4004 -65.3994 -56.7002 -103.5 -76.7002c38.9004 -11.7002 76 -28.1006 111.9 -47.6006zM560.1 -6.09961c3 31.0996 -43.5 61.3994 -66.1992 54.5c-14.6006 -4.30078 -27.8008 -30.8008 -33.5 -54\n+c0 -23.8008 21.1992 -37.9004 40.5 -37c19.1992 0.799805 46.5 17 59.1992 36.5zM372.9 372.8c-35.7002 39.2002 -81.4004 47.7998 -126 23.5c25.1992 56.2002 122.199 48.6006 126 -23.5zM74.7998 40.9004c14.9004 1.89941 24.6006 -19.2002 18.6006 -30.8008\n+c-4.80078 -9.69922 -23.7002 -24.0996 -35.9004 -27.2998c-16.5 -4.59961 -32.2002 3.2998 -32.2002 14.9004c0 17.7998 33.7998 41.5996 49.5 43.2002zM290.7 217.1c-30.9004 0 -57.6006 25.7002 -50.2998 59.8008c13.1992 -20.7002 46.5 -12 46.5 11.2998\n+c0 10 -7 18.5996 -16.5 21.5996c31.6992 13.7998 72.1992 -8.2002 72.1992 -44.2998c0 -26.7998 -23.2998 -48.4004 -51.8994 -48.4004zM68 -26.0996c-0.5 8.39941 20.2998 23.5 29.2002 25.0996c8.59961 1.59961 12.7002 -11.4004 9.7002 -18.4004\n+c-2.7002 -5.69922 -10.5 -13.5 -17.3008 -16.1992c-9.39941 -3.2002 -21.0996 3 -21.5996 9.5zM501.2 40.9004c15.7002 -1.60059 49.5 -25.4004 49.5 -43.2002c0 -11.7002 -15.7002 -19.5 -32.2002 -14.9004c-12.0996 3.2002 -31.2998 17.6006 -36.2002 27.2998\n+c-5.7002 11.6006 4 32.7002 18.9004 30.8008zM478.8 -1c8.90039 -1.59961 30 -16.7002 29.1006 -25.0996c-0.200195 -6.5 -12.1006 -12.7002 -21.3008 -9.5c-7 2.69922 -14.8994 10.5 -17.2998 16.1992c-2.89941 7.10059 1.10059 20 9.5 18.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"opencart\" unicode=\"&#xf23d;\" horiz-adv-x=\"640\" \n+d=\"M423.3 7.2998c0 -25.2998 -20.2998 -45.5996 -45.5996 -45.5996s-45.7998 20.2998 -45.7998 45.5996s20.5996 45.7998 45.7998 45.7998c25.3994 0 45.5996 -20.5 45.5996 -45.7998zM169.4 53.0996c25.2998 0 45.7998 -20.5 45.7998 -45.7998\n+s-20.5 -45.5996 -45.7998 -45.5996c-25.3008 0 -45.6006 20.3994 -45.6006 45.5996s20.2998 45.7998 45.6006 45.7998zM461.1 323.1c302.2 0 169.5 -67.1992 -17.1992 -233.899c59.1992 102.8 262.5 193.899 -70.8008 188.899c-319.8 -4.69922 -338.699 92.5 -373.1 144.2\n+c81.9004 -86.3994 158.9 -99.2002 461.1 -99.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"expeditedssl\" unicode=\"&#xf23e;\" horiz-adv-x=\"496\" \n+d=\"M248 404.6c117.4 0 212.6 -95.1992 212.6 -212.6s-95.1992 -212.6 -212.6 -212.6s-212.6 95.1992 -212.6 212.6s95.1992 212.6 212.6 212.6zM150.6 271.7h-0.199219v-26.6006c0 -5 3.89941 -8.89941 8.89941 -8.89941h17.7002c5 0 8.90039 3.89941 8.90039 8.89941\n+v26.6006c0 82.0996 124 82.0996 124 0v-26.6006c0 -5 3.89941 -8.89941 8.89941 -8.89941h17.7002c5 0 8.90039 3.89941 8.90039 8.89941v26.6006c0 53.7002 -43.7002 97.3994 -97.4004 97.3994s-97.4004 -43.6992 -97.4004 -97.3994zM389.7 68v141.7\n+c0 9.7002 -8 17.7002 -17.7002 17.7002h-248c-9.7002 0 -17.7002 -8 -17.7002 -17.7002v-141.7c0 -9.7002 8 -17.7002 17.7002 -17.7002h248c9.7002 0 17.7002 8 17.7002 17.7002zM141.7 205.3v-132.899c0 -2.5 -1.90039 -4.40039 -4.40039 -4.40039h-8.89941\n+c-2.5 0 -4.40039 1.90039 -4.40039 4.40039v132.899c0 2.5 1.90039 4.40039 4.40039 4.40039h8.89941c2.5 0 4.40039 -1.90039 4.40039 -4.40039zM283.4 156.6c0 -13 -7.2002 -24.3994 -17.7002 -30.3994v-31.6006c0 -5 -3.90039 -8.89941 -8.90039 -8.89941h-17.7002\n+c-5 0 -8.89941 3.89941 -8.89941 8.89941v31.6006c-10.5 6.09961 -17.7002 17.3994 -17.7002 30.3994c0 19.7002 15.7998 35.4004 35.4004 35.4004c19.5996 0 35.5 -15.7998 35.5 -35.4004zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248\n+s111 248 248 248zM248 -38.2998c127 0 230.3 103.3 230.3 230.3s-103.3 230.3 -230.3 230.3s-230.3 -103.3 -230.3 -230.3s103.3 -230.3 230.3 -230.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-jcb\" unicode=\"&#xf24b;\" horiz-adv-x=\"576\" \n+d=\"M431.5 203.7v32.2998c41.2002 0 38.5 -0.200195 38.5 -0.200195c7.2998 -1.2998 13.2998 -7.2998 13.2998 -16c0 -8.7998 -6 -14.5 -13.2998 -15.7998c-1.2002 -0.400391 -3.2998 -0.299805 -38.5 -0.299805zM474.3 183.5c7.5 -1.5 13.5 -8.2998 13.5 -17\n+c0 -9 -6 -15.5 -13.5 -17c-2.7998 -0.700195 -3.2002 -0.5 -42.7998 -0.5v35c39.5 0 40 0.200195 42.7998 -0.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM182 255.7h-57\n+c0 -67.1006 10.7002 -109.7 -35.7998 -109.7c-19.5 0 -38.7998 5.7002 -57.2002 14.7998v-28c30 -8.2998 68 -8.2998 68 -8.2998c97.9004 0 82 47.7002 82 131.2zM360.5 251.2c-63.4004 16 -165 14.8994 -165 -59.2998c0 -77.1006 108.2 -73.6006 165 -59.2002v28.2998\n+c-47.5996 -24.7002 -107.5 -22 -107.5 31s59.7998 55.5996 107.5 31.2002v28zM544 161.5c0 18.5 -16.5 30.5 -38 32v0.799805c19.5 2.7002 30.2998 15.5 30.2998 30.2002c0 19 -15.7002 30 -37 31c0 0 6.2998 0.299805 -120.3 0.299805v-127.5h122.7\n+c24.2998 -0.0996094 42.2998 12.9004 42.2998 33.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-diners-club\" unicode=\"&#xf24c;\" horiz-adv-x=\"576\" \n+d=\"M239.7 368.1c97.2002 0 175.8 -78.5996 175.8 -175.8c0 -96.8994 -78.5996 -175.8 -175.8 -175.8c-96.9004 0 -175.8 78.9004 -175.8 175.8c0 97.2002 78.8994 175.8 175.8 175.8zM199.8 88.5v207.9c-41.7002 -16.2002 -71.3994 -56.7002 -71.3994 -104.101\n+c0 -47.3994 29.6992 -87.8994 71.3994 -103.8zM279.6 88.2002c41.7002 16.2002 71.4004 56.7002 71.4004 104.1c0 47.4004 -29.7002 87.9004 -71.4004 104.101v-208.2zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h480zM329.7 0c105 0 200.7 85.5 200.7 190.2c0 114.6 -95.7002 193.8 -200.7 193.8h-90.2998c-106.2 0 -193.801 -79.2002 -193.801 -193.8c0 -104.7 87.6006 -190.2 193.801 -190.2h90.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons\" unicode=\"&#xf25e;\" horiz-adv-x=\"496\" \n+d=\"M245.83 233.13l-33.2197 -17.2803c-9.43066 19.5801 -25.2402 19.9307 -27.46 19.9307c-22.1309 0 -33.2207 -14.6104 -33.2207 -43.8398c0 -23.5703 9.20996 -43.8408 33.2207 -43.8408c14.4697 0 24.6494 7.09082 30.5693 21.2607l30.5498 -15.5\n+c-6.16992 -11.5107 -25.6895 -38.9805 -65.0996 -38.9805c-22.5996 0 -73.96 10.3203 -73.96 77.0498c0 58.6904 43 77.0605 72.6299 77.0605c30.7197 0.00976562 52.7002 -11.9502 65.9902 -35.8604zM388.88 233.13l-32.7803 -17.2803\n+c-9.5 19.7705 -25.7197 19.9307 -27.8994 19.9307c-22.1406 0 -33.2197 -14.6104 -33.2197 -43.8398c0 -23.5508 9.22949 -43.8408 33.2197 -43.8408c14.4502 0 24.6494 7.09082 30.54 21.2607l31 -15.5c-2.10059 -3.75 -21.3906 -38.9805 -65.0898 -38.9805\n+c-22.6904 0 -73.96 9.87012 -73.96 77.0498c0 58.6699 42.9697 77.0605 72.6299 77.0605c30.71 0.00976562 52.5801 -11.9502 65.5596 -35.8604zM247.56 439.95c141.82 0 248.44 -110.13 248.44 -248c0 -147.13 -118.51 -248 -248.44 -248\n+c-133.96 0 -247.56 109.51 -247.56 248c0 132.939 104.74 248 247.56 248zM248.43 -10.8604c103.16 0 202.83 81.1299 202.84 202.82c0 113.8 -90.2891 203.26 -202.819 203.26c-118.29 0 -203.72 -97.8496 -203.72 -203.27c0 -109.771 91.1592 -202.811 203.699 -202.811z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"gg\" unicode=\"&#xf260;\" horiz-adv-x=\"512\" \n+d=\"M179.2 217.6l102.399 -102.399l-102.399 -102.4l-179.2 179.2l179.2 179.2l44.7998 -44.7998l-25.5996 -25.6006l-19.2002 19.2002l-128 -128l128 -128l51.5 51.5l-77.1006 76.5zM332.8 371.2l179.2 -179.2l-179.2 -179.2l-44.7998 44.7998l25.5996 25.6006\n+l19.2002 -19.2002l128 128l-128 128l-51.5 -51.5l77.1006 -76.5l-25.6006 -25.5996l-102.399 102.399z\" \u002F>\n+    \u003Cglyph glyph-name=\"gg-circle\" unicode=\"&#xf261;\" horiz-adv-x=\"512\" \n+d=\"M257 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM207.5 65.2002l75 75.2002l-77.2002 77.1992l-24.3994 -24.3994l53.0996 -52.9004l-26.5996 -26.5996l-77.2002 77.2002l77.2002 77.1992l11.0996 -11.0996l24.2002 24.2002\n+l-35.2002 35.3994l-125.7 -125.699zM306.5 67.4004l125.7 125.6l-125.7 125.7l-75 -75l77.2002 -77.2002l24.3994 24.4004l-53.0996 52.8994l26.5 26.5l77.2002 -77.2002l-77.2002 -77.1992l-11.0996 11.0996l-24.1006 -24.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"tripadvisor\" unicode=\"&#xf262;\" horiz-adv-x=\"576\" \n+d=\"M166.4 167.479c0 -13.2354 -10.7305 -23.9658 -23.9668 -23.9658c-13.2354 0 -23.9658 10.7305 -23.9658 23.9658c0 13.2363 10.7305 23.9668 23.9658 23.9668c13.2363 0 23.9668 -10.7295 23.9668 -23.9668zM431.362 191.435\n+c13.2295 0 23.9551 -10.7246 23.9561 -23.9561c0 -13.2305 -10.7266 -23.9551 -23.9561 -23.9551c-13.2314 0 -23.9561 10.7256 -23.9561 23.9551c0 13.2314 10.7256 23.9561 23.9561 23.9561zM520.75 51.9453c-62.667 -49.1045 -153.276 -38.1094 -202.379 24.5586\n+l-30.9795 -46.3252l-30.6826 45.9395c-48.2773 -60.3906 -135.622 -71.8916 -197.885 -26.0547c-64.0586 47.1572 -77.7588 137.315 -30.6016 201.373c-5.05762 17.1221 -17.7021 42.7236 -28.2227 57.1475l90.2861 0.0498047\n+c48.0039 29.8701 132.851 54.1123 189.389 54.1123c2.11914 0 5.55762 -0.0371094 7.67578 -0.0820312c1.72363 0.0302734 4.52246 0.0556641 6.24609 0.0556641c55.5518 0 138.851 -23.9258 185.936 -53.4043l96.2178 -0.0742188\n+c-10.6191 -14.5371 -23.3213 -40.3643 -28.3516 -57.6494c46.793 -62.7471 34.9639 -151.37 -26.6484 -199.646zM259.366 166.239c-0.00683594 63.5566 -51.5352 115.075 -115.092 115.067c-63.5576 -0.00683594 -115.074 -51.5342 -115.068 -115.092\n+c0.00683594 -63.5566 51.5352 -115.075 115.092 -115.067c63.5127 0.0742188 114.984 51.5381 115.068 115.052v0.0400391zM287.957 176.694c5.43262 73.4395 65.5098 130.884 139.12 133.021c-35.5576 15.374 -95.8555 27.8506 -134.594 27.8506\n+c-1.41699 0 -3.7168 -0.0166016 -5.13379 -0.0380859c-0.953125 0.00878906 -2.50098 0.0166016 -3.45508 0.0166016c-39.2324 0 -100.479 -12.2168 -136.709 -27.2695c74.3447 -1.58203 135.3 -59.4248 140.771 -133.581zM539.663 205.461\n+c-21.9922 59.6338 -88.1621 90.1484 -147.795 68.1572c-59.6338 -21.9922 -90.1484 -88.1621 -68.1572 -147.795v-0.0322266c22.0381 -59.6074 88.1982 -90.0908 147.827 -68.1133c59.6152 22.0039 90.1133 88.1621 68.125 147.783zM213.624 167.486v-0.115234\n+c-0.0566406 -39.3281 -31.9863 -71.1631 -71.3145 -71.1064c-39.3271 0.0576172 -71.1621 31.9863 -71.1055 71.3145s31.9863 71.1631 71.3135 71.1055c39.2598 -0.115234 71.042 -31.9395 71.1064 -71.1982zM189.112 167.486v0.0839844\n+c-0.0517578 25.7832 -20.9941 46.6445 -46.7783 46.5938s-46.6445 -20.9941 -46.5938 -46.7773c0.0507812 -25.7842 20.9941 -46.6445 46.7764 -46.5938c25.7266 0.113281 46.5371 20.9678 46.5957 46.6934zM502.535 167.486\n+c-0.0205078 -39.3281 -31.918 -71.2422 -71.2471 -71.2217c-39.3291 0.0214844 -71.1943 31.918 -71.1729 71.2471c0.0195312 39.3281 31.918 71.1943 71.2471 71.1729c39.29 -0.0654297 71.1211 -31.9082 71.1729 -71.1982zM478.031 167.494\n+c-0.00878906 25.7842 -20.918 46.6787 -46.7021 46.6699s-46.6787 -20.918 -46.6699 -46.7021s20.918 -46.6777 46.7021 -46.6699c25.7646 0.0458984 46.6357 20.9277 46.6699 46.6934v0.00878906z\" \u002F>\n+    \u003Cglyph glyph-name=\"odnoklassniki\" unicode=\"&#xf263;\" horiz-adv-x=\"320\" \n+d=\"M275.1 114c-27.3994 -17.4004 -65.0996 -24.2998 -90 -26.9004l20.9004 -20.5996l76.2998 -76.2998c27.9004 -28.6006 -17.5 -73.2998 -45.7002 -45.7002c-19.0996 19.4004 -47.0996 47.4004 -76.2998 76.5996l-76.2998 -76.5\n+c-28.2002 -27.5 -73.5996 17.6006 -45.4004 45.7002c19.4004 19.4004 47.1006 47.4004 76.3008 76.2998l20.5996 20.6006c-24.5996 2.59961 -62.9004 9.09961 -90.5996 26.8994c-32.6006 21 -46.9004 33.3008 -34.3008 59c7.40039 14.6006 27.7002 26.9004 54.6006 5.7002\n+c0 0 36.2998 -28.8994 94.8994 -28.8994c58.6006 0 94.9004 28.8994 94.9004 28.8994c26.9004 21.1006 47.0996 8.90039 54.5996 -5.7002c12.4004 -25.6992 -1.89941 -38 -34.5 -59.0996zM30.2998 318.3c0 71.7002 58.2998 129.7 129.7 129.7s129.7 -58 129.7 -129.7\n+c0 -71.3994 -58.2998 -129.399 -129.7 -129.399s-129.7 58 -129.7 129.399zM96.2998 318.3c0 -35.0996 28.6006 -63.7002 63.7002 -63.7002s63.7002 28.6006 63.7002 63.7002c0 35.4004 -28.6006 64 -63.7002 64s-63.7002 -28.5996 -63.7002 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"odnoklassniki-square\" unicode=\"&#xf264;\" \n+d=\"M184.2 270.9c0 22.0996 17.8994 40 39.7998 40s39.7998 -17.9004 39.7998 -40c0 -22 -17.8994 -39.8008 -39.7998 -39.8008s-39.7998 17.9004 -39.7998 39.8008zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\n+c26.5 0 48 -21.5 48 -48zM142.9 270.9c0 -44.6006 36.3994 -80.9004 81.0996 -80.9004s81.0996 36.2002 81.0996 80.9004c0 44.7998 -36.3994 81.0996 -81.0996 81.0996s-81.0996 -36.2002 -81.0996 -81.0996zM317.4 180.2\n+c-4.60059 9.09961 -17.3008 16.7998 -34.1006 3.59961c0 0 -22.7002 -18 -59.2998 -18s-59.2998 18 -59.2998 18c-16.7998 13.2002 -29.5 5.5 -34.1006 -3.59961c-7.89941 -16.1006 1.10059 -23.7002 21.4004 -37c17.2998 -11.1006 41.2002 -15.2002 56.5996 -16.7998\n+l-12.8994 -12.9004c-18.2002 -18 -35.5 -35.5 -47.7002 -47.7002c-17.5996 -17.5996 10.7002 -45.7998 28.4004 -28.5996l47.6992 47.8994c18.2002 -18.1992 35.7002 -35.6992 47.7002 -47.8994c17.6006 -17.2002 46 10.7002 28.6006 28.5996l-47.7002 47.7002l-13 12.9004\n+c15.5 1.59961 39.0996 5.89941 56.2002 16.7998c20.3994 13.2998 29.2998 21 21.5 37z\" \u002F>\n+    \u003Cglyph glyph-name=\"get-pocket\" unicode=\"&#xf265;\" \n+d=\"M407.6 384c22.7002 0 40.4004 -18.2002 40.4004 -40.5996v-135.2c0 -124.7 -99.7998 -224.2 -223.8 -224.2c-124.5 0 -224.2 99.5 -224.2 224.2v135.2c0 22.0996 18.5 40.5996 40.5996 40.5996h367zM245.6 115.5c111.9 107.5 114.801 105.4 114.801 123.2\n+c0 16.8994 -13.8008 30.7002 -30.7002 30.7002c-16.9004 0 -14.9004 -2.40039 -105.5 -89.3008c-89.1006 85.5 -88.2002 89.3008 -105.2 89.3008c-16.9004 0 -30.7002 -13.8008 -30.7002 -30.7002c0 -18.1006 1.2002 -14.2998 114.9 -123.2\n+c11 -11.0996 30 -11.7998 42.3994 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"wikipedia-w\" unicode=\"&#xf266;\" horiz-adv-x=\"640\" \n+d=\"M640 396.8l-0.299805 -12.2002c-28.1006 -0.799805 -45 -15.7998 -55.7998 -40.2998c-25 -57.7998 -103.301 -240 -155.301 -358.6h-13.5996l-81.9004 193.1c-32.5 -63.5996 -68.2998 -130 -99.1992 -193.1c-0.300781 -0.299805 -15 0 -15 0.299805\n+c-46.9004 109.7 -96.1006 218.6 -143.101 328.6c-11.3994 26.7002 -49.3994 70 -75.5996 69.7002c0 3.10059 -0.299805 10 -0.299805 14.2002h161.899v-13.9004c-19.2002 -1.09961 -52.7998 -13.2998 -43.2998 -34.1992c21.9004 -49.7002 103.6 -240.301 125.6 -288.601\n+c15 29.7002 57.8008 109.2 75.3008 142.8c-13.9004 28.3008 -58.6006 133.9 -72.8008 160c-9.69922 17.8008 -36.0996 19.4004 -55.7998 19.7002v13.9004l142.5 -0.299805v-13.1006c-19.3994 -0.599609 -38.0996 -7.7998 -29.3994 -26.0996\n+c18.8994 -40 30.5996 -68.1006 48.0996 -104.7c5.59961 10.7998 34.7002 69.4004 48.0996 100.8c8.90039 20.6006 -3.89941 28.6006 -38.5996 29.4004c0.299805 3.59961 0 10.2998 0.299805 13.5996c44.4004 0.299805 111.101 0.299805 123.101 0.600586v-13.6006\n+c-22.5 -0.799805 -45.8008 -12.7998 -58.1006 -31.7002l-59.2002 -122.8c6.40039 -16.0996 63.3008 -142.8 69.2002 -156.7l122.4 282.601c-8.60059 23.0996 -36.4004 28.0996 -47.2002 28.2998v13.9004l127.8 -1.10059z\" \u002F>\n+    \u003Cglyph glyph-name=\"safari\" unicode=\"&#xf267;\" horiz-adv-x=\"512\" \n+d=\"M236.9 191.2c0 9.09961 6.59961 17.7002 16.2998 17.7002c8.89941 0 17.3994 -6.40039 17.3994 -16.1006c0 -9.09961 -6.39941 -17.7002 -16.0996 -17.7002c-9 0 -17.5996 6.7002 -17.5996 16.1006zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248\n+s111 248 248 248s248 -111 248 -248zM477.4 192c0 122.3 -99.1006 221.4 -221.4 221.4s-221.4 -99.1006 -221.4 -221.4s99.1006 -221.4 221.4 -221.4s221.4 99.1006 221.4 221.4zM404.9 95.4004c0 -3.60059 13 -10.2002 16.2998 -12.2002\n+c-27.4004 -41.5 -69.7998 -71.4004 -117.9 -83.2998l-4.39941 18.5c-0.300781 2.5 -1.90039 2.7998 -4.2002 2.7998c-1.90039 0 -3 -2.7998 -2.7998 -4.2002l4.39941 -18.7998c-13.2998 -2.7998 -26.7998 -4.2002 -40.3994 -4.2002c-36.3008 0 -72 10.2002 -103 29.0996\n+c1.69922 2.80078 12.1992 18 12.1992 20.2002c0 1.90039 -1.69922 3.60059 -3.59961 3.60059c-3.90039 0 -12.2002 -16.6006 -14.7002 -19.9004c-41.7998 27.7002 -72 70.5996 -83.5996 119.6l19.0996 4.2002c2.2002 0.600586 2.7998 2.2002 2.7998 4.2002\n+c0 1.90039 -2.7998 3 -4.39941 2.7998l-18.7002 -4.2998c-2.5 12.7002 -3.90039 25.5 -3.90039 38.5c0 37.0996 10.5 73.5996 30.2002 104.9c2.7998 -1.7002 16.1006 -10.8008 18.2998 -10.8008c1.90039 0 3.60059 1.40039 3.60059 3.30078\n+c0 3.89941 -14.7002 11.2998 -18 13.5996c28.2002 41.2002 71.0996 70.9004 119.8 81.9004l4.2002 -18.5c0.599609 -2.2002 2.2002 -2.80078 4.2002 -2.80078s3 2.80078 2.7998 4.40039l-4.2002 18.2998c12.2002 2.2002 24.5996 3.60059 37.0996 3.60059\n+c37.1006 0 73.3008 -10.5 104.9 -30.2002c-1.90039 -2.7998 -10.7998 -15.7998 -10.7998 -18c0 -1.90039 1.39941 -3.60059 3.2998 -3.60059c3.90039 0 11.2998 14.4004 13.2998 17.7002c41 -27.7002 70.2998 -70 81.7002 -118.2l-15.5 -3.2998\n+c-2.5 -0.599609 -2.7998 -2.2002 -2.7998 -4.39941c0 -1.90039 2.7998 -3 4.2002 -2.80078l15.7998 3.60059c2.5 -12.7002 3.89941 -25.7002 3.89941 -38.7002c0 -36.2998 -10 -72 -28.7998 -102.7c-2.7998 1.40039 -14.3994 9.7002 -16.5996 9.7002\n+c-2.10059 0 -3.7998 -1.7002 -3.7998 -3.59961zM371.7 337.6c-13 -12.1992 -134.2 -123.699 -137.601 -129.5l-96.5996 -160.5c12.7002 11.9004 134.2 124 137.3 129.301z\" \u002F>\n+    \u003Cglyph glyph-name=\"chrome\" unicode=\"&#xf268;\" horiz-adv-x=\"496\" \n+d=\"M131.5 230.5l-76.4004 117.4c47.6006 59.1992 119 91.7998 192 92.0996c42.3008 0.299805 85.5 -10.5 124.801 -33.2002c43.3994 -25.2002 76.3994 -61.3994 97.3994 -103l-205.3 10.7998c-58.0996 3.40039 -113.4 -29.2998 -132.5 -84.0996zM164.4 192\n+c0 46.2998 37.3994 83.5996 83.5996 83.5996s83.5996 -37.3994 83.5996 -83.5996s-37.3994 -83.5996 -83.5996 -83.5996s-83.5996 37.3994 -83.5996 83.5996zM479.3 281.2c43.5 -111.9 0 -241.9 -107.399 -303.9c-43.4004 -25.2002 -91.3008 -35.3994 -137.801 -32.8994\n+l112.101 172.399c31.8994 49 31.2998 112.9 -6.60059 157.2zM133.7 144.4c26.2998 -51.7002 81.8994 -83.3008 139.5 -72.5l-63.7002 -124.801c-118.7 18.2002 -209.5 120.9 -209.5 244.9c0 50.0996 14.9004 96.9004 40.4004 135.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"firefox\" unicode=\"&#xf269;\" horiz-adv-x=\"480\" \n+d=\"M478.1 212.7c1.30078 -7.10059 1.90039 -14.2998 1.90039 -21.6006v-2.7998c-1.40039 -34 -11.5996 -67 -29.5996 -95.8994c-1 -1.5 -1.80078 -2.90039 -2.7002 -4.30078c2.7002 -7.19922 2.59961 -15.0996 -0.400391 -22.1992\n+c-5 -19.4004 -16.5996 -36.4004 -32.8994 -48.1006c-10.8008 -8.7002 -22.7002 -16.2002 -35.3008 -22.0996l-1.89941 -0.900391l-1 -0.5c-1.7002 -0.700195 -3.2998 -1.39941 -4.90039 -2.09961c-2.39941 -5.10059 -5.7998 -9.60059 -9.89941 -13.2998\n+c-2.5 -3.10059 -30.1006 -35 -113.801 -35c-23.5996 0 -47.1992 3.5 -69.7998 10.2998c0.799805 -0.299805 1.60059 -0.700195 2.40039 -1c-2.60059 0.899414 -5.2002 1.7998 -7.7002 2.7002c-19.0996 5.89941 -37.2002 14.5996 -53.7998 25.7998\n+c-40.7002 24.7002 -72.9004 61.2002 -92.2998 104.7c-14.5 31.3994 -21.1006 65.7998 -19.4004 100.3c-2.7998 -8.2998 -5.2002 -16.7002 -7 -25.2998c0 29.1992 5.5 58.0996 16.2002 85.1992c-5.5 -7.89941 -10.2998 -16.2998 -14.2998 -25.0996\n+c5.69922 23.0996 14.6992 45.2002 26.7998 65.5996c3.7002 6.10059 7.89941 11.9004 12.7002 17.1006v0.200195c-0.100586 2.69922 0.0996094 5.5 0.5 8.2998c1.5 16.2998 5.69922 32.2002 12.3994 47.0996l0.299805 0.700195c0.100586 0.299805 0 -1 0 -1.7002\n+s-0.0996094 -1.2998 0 -1c0.600586 2 1.40039 4 2.30078 5.90039c1 2.09961 2.39941 4.09961 3.89941 5.7998c0.100586 0.0996094 0.200195 0.200195 0.299805 0.400391c0.100586 0.199219 -0.399414 -2 -0.5 -3.10059v-0.5c0.600586 1.2002 1.30078 2.40039 2.2002 4.5\n+c2.10059 5.90039 6 11 11.1006 14.5l0.199219 0.100586c-0.299805 -9 1.2002 -17.9004 4.40039 -26.2002v-0.100586c0.299805 -0.399414 0.5 1.30078 0.900391 1.30078c0.0996094 0 0.199219 -0.100586 0.199219 -0.200195\n+c0.900391 -1.7998 1.80078 -3.60059 2.7002 -5.2002c1.2998 -2.2002 2.5 -4.2002 3.7002 -6l0.400391 -0.200195l0.199219 0.100586c2.60059 -4.2002 5.90039 -7.80078 9.7002 -10.9004h-0.200195l0.200195 -0.0996094c18.2998 3.59961 37.2002 2 54.6006 -4.7002\n+l0.0996094 0.0996094c2.09961 2.60059 4.59961 4.90039 7.2998 6.90039c0 -0.900391 -0.0996094 -1.7998 -0.200195 -2.7002c4 5 9.10059 9 15 11.5c-0.399414 -0.700195 -0.5 -1.40039 -0.5 -2.2002c7.40039 4.2998 15.5 7.40039 23.9004 9\n+c1.09961 0 -3.5 -1.7998 -5.09961 -3.09961c3.69922 1.59961 7.69922 2.59961 11.6992 2.7998c6.60059 0.700195 14 -2.09961 12.6006 -2.7002c-2.7998 -1 -5.5 -2.2002 -8.2002 -3.5c-0.799805 -0.700195 3.2002 0.200195 2.40039 -0.5\n+c-14 -9.2002 -24.8008 -22.5996 -30.8008 -38.2998v-0.0996094c2.5 -11 11.4004 -19.3008 22.5 -21.1006c31.5 -3 37.5 -5.59961 38.4004 -9.09961v-1.5c-0.0996094 -1 -0.200195 -1.90039 -0.299805 -2.7998c-1.2002 -6.90039 -4.90039 -13.2002 -10.2002 -17.7002\n+c-1.40039 -1.2998 -2.90039 -2.5 -4.5 -3.5c-1.09961 -0.700195 -6.40039 -2.7998 -12.7998 -5.60059c-7.90039 -3.19922 -15.5 -7.09961 -22.7002 -11.5996c-1.2998 -0.799805 -2.40039 -1.7002 -3.40039 -2.7002c-0.399414 -0.399414 -1.19922 -1.5 -1.19922 -1.5\n+v-0.0996094c0.5 -1.2002 1 -2.40039 1.19922 -3.7002c-1.39941 1.7002 -2.69922 1.09961 -1.89941 -0.5c0.899414 -2.5 1.2998 -5.2002 1.09961 -7.7998c0.200195 -4.7998 -0.700195 -9.60059 -2.59961 -14c-2.10059 1.5 -4.2998 2.89941 -6.60059 4.09961h-0.199219\n+c2.5 -1.59961 4.2998 -3.89941 5.39941 -6.59961c0.700195 -2.2002 -0.299805 -2.7002 -0.299805 -2.7002c-1.40039 2 -3.09961 3.59961 -5.2002 4.7002c-3.09961 1.7998 -8.7998 4.7002 -11.3994 5.7998c-0.300781 -0.200195 -0.5 -0.0996094 -0.800781 -0.200195\n+c0.800781 -1.2998 2.10059 -3.7998 2.10059 -3.7998s-1.7998 1.09961 -4.7998 2.59961c-3.90039 -1.7998 -7.2002 -4.89941 -9.30078 -8.69922c-3.5 -7.7002 -3.09961 -16.7002 1 -24.1006c4 -6 9.10059 -11.2002 15 -15.2002\n+c0.400391 -0.299805 -3.39941 1.10059 -3.09961 0.800781c4.59961 -3.2002 9.40039 -6.10059 14.4004 -8.60059c1.5 -1 -5 1.2002 -3.40039 0.299805c1.40039 -0.899414 2.7998 -1.69922 4.2998 -2.5c22.9004 -12.0996 38.9004 0.400391 56.4004 2.90039\n+c16.7998 3 33.7998 -3.59961 44.2002 -17c6 -8.5 -0.600586 -16.7002 -9 -14h-0.200195c-8.60059 2.90039 -19.1006 -4.2998 -36.6006 -14c-17.2998 -8.2998 -36.8994 -10.5996 -55.5996 -6.59961c-4.7998 0.899414 -9.40039 2.09961 -14 3.69922l-2 0.700195\n+l0.200195 -0.299805c8.7998 -12.2002 19.8994 -22.5 32.7998 -30.2998c8.7002 -4.40039 17.9004 -7.5 27.4004 -9.2998c8 -1.90039 16.1992 -2.80078 24.5 -2.80078c61 -0.0996094 110.6 49.4004 110.6 110.4c0.0996094 15.9004 -3.09961 31.7998 -9.2998 46.5\n+c20.7002 -12.2998 37.5996 -30.2002 48.7998 -51.5c-13.9004 40.5996 -40.2998 56.4004 -64.7002 76.5996c-19.5996 14.8008 -34.7002 34.9004 -43.3994 57.9004c-25.2002 67.7998 33.0996 132.9 33.0996 132.9s-3.59961 -15.1006 27.4004 -44.3008\n+c6.39941 -5.89941 16.7998 -14.5 28.8994 -26.6992c1.7002 9.2998 4.2002 18.3994 7.40039 27.2998c2.5 -14.7002 7.7998 -28.7998 15.3994 -41.6006c11.7002 -16.6992 21.9004 -25.5996 30.7002 -40c1.90039 -2.5 3.7998 -5.19922 5.60059 -7.89941\n+c5.09961 -7.2002 9.5 -14.7998 13.2998 -22.7998c6 -12 10.7998 -24.5 14.5 -37.4004c3 -10.4004 4.89941 -20.9004 5.7998 -31.5996c2.90039 3.89941 4.7002 5.89941 4.7002 5.89941s0.700195 -2.59961 1.39941 -7.09961zM179.1 310.3\n+c-0.5 -1.2002 -0.899414 -2.2998 -1.2998 -3.5c0.400391 1.2002 0.900391 2.40039 1.2998 3.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"opera\" unicode=\"&#xf26a;\" horiz-adv-x=\"496\" \n+d=\"M313.9 415.3c-170.2 0 -252.601 -223.8 -147.5 -355.1c36.5 -45.4004 88.5996 -75.6006 147.5 -75.6006c36.2998 0 70.2998 11.1006 99.3994 30.4004c-43.7998 -39.2002 -101.899 -63 -165.3 -63c-3.90039 0 -8 0 -11.9004 0.299805\n+c-131.5 6.10059 -236.1 114.601 -236.1 247.7c0 137 111 248 248 248h0.799805c63.1006 -0.299805 120.7 -24.0996 164.4 -63.0996c-29 19.3994 -63.1006 30.3994 -99.2998 30.3994zM415.7 17.5996c-40.9004 -24.6992 -90.7002 -23.5996 -132 5.80078\n+c56.2002 20.5 97.7002 91.5996 97.7002 176.6c0 84.7002 -41.2002 155.8 -97.4004 176.6c41.7998 29.2002 91.2002 30.3008 132.9 5c105.899 -98.6992 105.5 -265.699 -1.2002 -364z\" \u002F>\n+    \u003Cglyph glyph-name=\"internet-explorer\" unicode=\"&#xf26b;\" horiz-adv-x=\"512\" \n+d=\"M483.049 288.294c25.1963 -45.4473 33.2578 -97.5811 26.8516 -141.162h-328.792c0 -100.432 144.31 -136.029 196.818 -47.4355h120.833c-32.5645 -91.7285 -119.689 -146.022 -216.813 -146.022c-35.1367 0 -70.2725 0.143555 -101.695 15.5732\n+c-87.3975 -44.4941 -180.251 -56.5693 -180.251 42.0059c0 45.8066 23.2461 107.096 43.9922 145.022c35.1357 63.7227 81.4121 124.875 135.687 173.168c-43.7061 -18.8604 -91.125 -66.2959 -121.977 -101.158c25.877 112.787 129.466 193.638 237.098 186.457\n+c130.032 59.7939 209.673 34.1445 209.673 -38.5771c0 -27.4326 -10.5684 -63.2959 -21.4238 -87.8711zM64.5586 101.123c-73.001 -152.4 11.5254 -172.244 100.267 -123.304c-46.5635 27.4326 -82.5557 72.1533 -100.267 123.304zM180.536 209.996h207.961\n+c-2 55.1514 -50.5635 94.8711 -103.981 94.8711c-53.7041 0 -101.979 -39.7197 -103.979 -94.8711zM365.072 397.596c46.2764 -18.002 85.9824 -57.2939 112.263 -99.5859c7.1416 18.8604 14.5693 47.8643 14.5693 67.8672c0 32.0049 -22.8525 53.7217 -54.2744 53.7217\n+c-23.9951 0 -51.1328 -11.7158 -72.5576 -22.0029z\" \u002F>\n+    \u003Cglyph glyph-name=\"contao\" unicode=\"&#xf26d;\" horiz-adv-x=\"512\" \n+d=\"M45.4004 143c14.3994 -67.0996 26.3994 -129 68.1992 -175h-79.5996c-18.7002 0 -34 15.2002 -34 34v380c0 18.7002 15.2002 34 34 34h57.7002c-13.7998 -12.5996 -26.1006 -27.2002 -36.9004 -43.5996c-45.3994 -70 -27 -146.801 -9.39941 -229.4zM478 416\n+c18.7998 0 34 -15.2002 34 -34v-380.1c0 -18.8008 -15.2998 -34 -34 -34h-52.0996c38.6992 38.3994 60.5996 92.0996 57.3994 163.6l-137.399 -29.5996c-1.7002 -32.5 -12.9004 -63.8008 -57.4004 -73.2002c-24.9004 -5.2998 -45.4004 0.599609 -58.2998 11.7002\n+c-15.7998 13.5 -28.4004 31 -49.5 131.199c-21.4004 100.5 -17 121.601 -8.2002 140.301c7.2998 15.2998 23.7002 29.2998 48.2998 34.5996c44.7998 9.40039 67.7002 -14.9004 82.6006 -43.9004l137.1 29.3008c-13.5 34.5996 -31.2998 62.6992 -52.7002 84.0996h90.2002z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"500px\" unicode=\"&#xf26e;\" \n+d=\"M103.3 103.7c-6.5 14.2002 -6.89941 18.2998 7.40039 23.0996c25.5996 8 8 -9.2002 43.2002 -49.2002h0.299805v93.9004c1.2002 50.2002 44 92.2002 97.7002 92.2002c53.8994 0 97.6992 -43.5 97.6992 -96.7998c0 -63.4004 -60.7998 -113.2 -128.5 -93.3008\n+c-10.5 4.2002 -2.09961 31.7002 8.5 28.6006c53 0 89.4004 10.0996 89.4004 64.3994c0 61 -77.0996 89.6006 -116.9 44.6006c-23.5 -26.4004 -17.5996 -42.1006 -17.5996 -157.601c50.7002 -31 118.3 -22 160.4 20.1006c24.7998 24.7998 38.5 58 38.5 93\n+c0 35.2002 -13.8008 68.2002 -38.8008 93.2998c-24.7998 24.7998 -57.7998 38.5 -93.2998 38.5s-68.7998 -13.7998 -93.5 -38.5c-0.299805 -0.299805 -16 -16.5 -21.2002 -23.9004l-0.5 -0.599609c-3.2998 -4.7002 -6.2998 -9.09961 -20.0996 -6.09961\n+c-6.90039 1.69922 -14.2998 5.7998 -14.2998 11.7998v186.8c0 5 3.89941 10.5 10.5 10.5h241.3c8.2998 0 8.2998 -11.5996 8.2998 -15.0996c0 -3.90039 0 -15.1006 -8.2998 -15.1006h-223.2v-132.899h0.299805c104.2 109.8 282.801 36 282.801 -108.9\n+c0 -178.1 -244.801 -220.3 -310.101 -62.7998zM166.6 364.5c3.80078 18.7998 145.101 50.7998 238.301 -38.2002c8.5 -7.5 -9.5 -22.7998 -14.3008 -22.7998c-6.59961 0 -84.5996 87.9004 -209.399 40.4004c-10 -3.90039 -15.1006 16.3994 -14.6006 20.5996zM393 33.2998\n+c8.09961 8 27.5996 -12.5996 20.7002 -20.3994c-135.601 -135.601 -357.601 -52.1006 -381.601 121.3c-1.5 10.7002 28.9004 15.5 28.9004 3.2998c33 -165 222 -214.1 332 -104.2zM213.6 141.4c0 3.39941 2.30078 4.69922 20.4004 22.5996l-18.2002 18.2002\n+c-5.59961 5.59961 7.40039 17.2998 12.4004 17.2998c3.09961 0 2.89941 -0.700195 21.5 -19.5l17.8994 17.9004c6.10059 6.09961 22.5 -8.90039 16.2002 -15.7002l-18.2002 -18.2002l17.3008 -17.2998c7.7998 -7.7998 -5.30078 -18.2002 -10.7002 -18.2002\n+c-3.2002 0 -2.7002 0.200195 -22.2998 19.5c-19.7002 -19.7002 -18.5 -19.5 -22.3008 -19.5c-2.39941 0 -5.5 1.40039 -8.5 4.40039c-1.19922 1.19922 -5.5 4.5 -5.5 8.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"amazon\" unicode=\"&#xf270;\" \n+d=\"M257.2 285.3c0 39.2998 5.2002 69.2002 -35.5 69.1006c0 0 -37.9004 0 -54.2002 -49.5l-73.5 6.7998c0 49.2998 46.7002 104.3 134.7 104.3c87.7998 0 112.3 -57 112.3 -82.2998v-147.101c0 -27.5 32.2998 -52.7998 32.2998 -52.7998l-56.7998 -56\n+c-9.90039 9.2998 -38.7998 36.6006 -45.2998 46.7998c-45.2002 -70.7998 -183.5 -66.2998 -183.5 43.2002c0 102 120.8 115.7 169.5 117.5zM257.2 198.5v40.5996c-33.7002 -1.09961 -84.2002 -10.5996 -84.2002 -57.7998c0 -50.7998 84.2002 -62.7998 84.2002 17.2002z\n+M393.2 35c-7.7002 -10 -70 -67 -174.5 -67s-184.5 71.5 -209 101c-6.7998 7.7002 1 11.2998 5.5 8.2998c73.2998 -44.5 187.8 -117.8 372.5 -30.2998c7.5 3.7002 13.2998 -2 5.5 -12zM433 32.7998c-6.5 -15.7998 -16 -26.7998 -21.2002 -31\n+c-5.5 -4.5 -9.5 -2.7002 -6.5 3.7998s19.2998 46.5 12.7002 55c-6.5 8.30078 -37 4.30078 -48 3.2002c-10.7998 -1 -13 -2 -14 0.299805c-2.2998 5.7002 21.7002 15.5 37.5 17.5c15.7002 1.80078 41 0.800781 46 -5.69922c3.7002 -5.10059 0 -27.1006 -6.5 -43.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"houzz\" unicode=\"&#xf27c;\" \n+d=\"M275.9 117.3h-104.601v-149.3h-154.3v448h109.5v-104.5l305.1 -85.5996v-257.9h-155.699v149.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"vimeo-v\" unicode=\"&#xf27d;\" \n+d=\"M447.8 294.4c-2 -43.6006 -32.3994 -103.301 -91.3994 -179.101c-60.9004 -79.2002 -112.4 -118.8 -154.601 -118.8c-26.0996 0 -48.2002 24.0996 -66.2998 72.2998c-35.2002 129.2 -50.2002 204.9 -79.2998 204.9c-3.40039 0 -15.1006 -7.10059 -35.2002 -21.1006\n+l-21 27.2002c51.5996 45.2998 100.9 95.7002 131.8 98.5c34.9004 3.40039 56.2998 -20.5 64.4004 -71.5c28.7002 -181.5 41.3994 -208.899 93.5996 -126.7c18.7002 29.6006 28.7998 52.1006 30.2002 67.6006c4.7998 45.8994 -35.7998 42.7998 -63.2998 31\n+c22 72.0996 64.0996 107.1 126.2 105.1c45.7998 -1.2002 67.5 -31.0996 64.8994 -89.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"black-tie\" unicode=\"&#xf27e;\" \n+d=\"M0 416h448v-448h-448v448zM316.5 90.7998l-64.5 184l64.4004 86.6006h-184.9l64.5 -86.6006l-64.5 -184l92.5 -88.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"fonticons\" unicode=\"&#xf280;\" \n+d=\"M0 416h448v-448h-448v448zM187 275.1c11.9004 0 16.5996 -4.2998 16.2998 -23l50.7002 6.10059c0 44.5996 -30.5996 52.7998 -64.7002 52.7998c-50.7998 0 -77.2998 -20.4004 -77.2998 -70v-21h-28v-37.4004h22.2002c2.89941 0 5.7998 0 5.7998 -2.2998v-111.399\n+c0 -5.60059 -1.5 -7.30078 -6.7002 -7.90039l-21.2998 -2v-25.7002h130.7v25.1006l-43.5 4.09961c-5.2002 0.599609 -3.2002 1.5 -3.2002 7.2998v112.9h55.7002l11.0996 37.2998h-67.3994c-2.90039 0 0.599609 2 0.599609 4.40039v23.2998\n+c0 17.5 0.599609 27.3994 19 27.3994zM261.3 33.2998h102.601v25.1006l-15.7002 2.59961c-5.5 0.900391 -2.90039 1.5 -2.90039 7.2998v151.7h-80.2002l-6.69922 -29.5l24.1992 -6.40039c3.80078 -1.19922 6.7002 -3.7998 6.7002 -7.89941v-107.9\n+c0 -5.59961 -2.39941 -6.7002 -7.59961 -7.2998l-20.4004 -2.59961v-25.1006zM342.1 288.8l21.9004 24.2002l-3.5 9.59961h-27.7002l-15.5 28h-9.2998l-15.5 -28h-27.7002l-3.5 -9.59961l21.7998 -24.2002l-9 -33.2002l7.30078 -7.2998l31.1992 16.6006l31.2002 -16.6006\n+l7.2998 7.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"reddit-alien\" unicode=\"&#xf281;\" horiz-adv-x=\"512\" \n+d=\"M440.3 244.5c55.2998 0 73.7002 -74.0996 23.7998 -99.7002c2.2002 -7.89941 3.10059 -16.7002 3.10059 -25.0996c0 -83.7998 -94.4004 -151.7 -210.8 -151.7c-115.9 0 -210.301 67.9004 -210.301 151.7c0 8.39941 0.800781 16.7998 2.60059 24.7002\n+c-50.9004 25.5 -32.7002 100.1 22.8994 100.1c15 0 28.7002 -6.2002 38.4004 -16.2998c35.7998 24.7002 83.4004 40.5996 136.3 42.7998l30.4004 137.6c1.2998 4.90039 6.09961 8.40039 11 7.10059l97.3994 -21.6006c6.60059 12.7002 19.9004 22 35.3008 22\n+c22.0996 0 39.6992 -18.0996 39.6992 -39.6992c0 -21.6006 -17.6992 -39.7002 -39.6992 -39.7002c-21.6006 0 -39.2002 17.5996 -39.2002 39.2002l-88.2002 19.7998l-27.7002 -124.8c53.2998 -1.7002 101.4 -17.6006 137.101 -42.3008\n+c9.69922 9.7002 22.8994 15.9004 37.8994 15.9004zM129.4 139.1c0 -21.5996 17.6992 -39.2998 39.6992 -39.1992c21.6006 0 39.2002 17.5996 39.2002 39.1992c0 22.1006 -17.5996 39.7002 -39.2002 39.7002c-22.0996 0 -39.6992 -17.7002 -39.6992 -39.7002zM343.7 45.5996\n+c4 3.5 4 9.7002 -0.100586 13.7002c-3.5 3.5 -9.69922 3.5 -13.1992 0c-29 -29 -121.2 -28.5 -149 0c-3.5 3.5 -9.7002 3.5 -13.2002 0c-4 -4 -4 -10.2002 0 -13.7002c36.3994 -36.3994 139.1 -36.3994 175.5 0zM342.9 99.7998c22 0 39.5996 17.7002 39.6992 39.2002\n+c0 22.0996 -17.6992 39.7002 -39.6992 39.7002c-21.6006 0 -39.2002 -17.7002 -39.2002 -39.7002c0 -21.5996 17.5996 -39.2002 39.2002 -39.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"edge\" unicode=\"&#xf282;\" horiz-adv-x=\"512\" \n+d=\"M25.7139 219.837c0.111328 0.162109 0.230469 0.323242 0.341797 0.485352c-0.0205078 -0.162109 -0.0449219 -0.323242 -0.0644531 -0.485352h-0.277344zM486.286 204.329l0.000976562 -52.0645h-314.073c1.38379 -128.497 191.392 -124.065 272.255 -67.5713v-104.404\n+c-47.3555 -28.5244 -156.774 -53.1709 -240.132 -21.3242c-70.6191 27.1406 -119.913 100.528 -120.743 171.977c-1.10742 92.2188 45.6943 153.422 120.742 188.314c-15.7852 -19.9395 -27.9697 -41.54 -34.3389 -78.9258h175.853\n+c10.2471 104.957 -99.4189 104.957 -99.4189 104.957c-103.302 -3.58984 -177.945 -63.6543 -220.375 -124.966c14.5615 114.465 92.9062 219.955 232.837 219.678c85.0195 0 157.605 -39.8779 198.593 -113.265c21.0469 -37.9404 28.8008 -78.373 28.8008 -122.405z\" \u002F>\n+    \u003Cglyph glyph-name=\"codiepie\" unicode=\"&#xf284;\" horiz-adv-x=\"472\" \n+d=\"M422.5 245.1c30.7002 0 33.5 -53.0996 -0.299805 -53.0996h-10.7998v-44.2998h-26.6006v97.3994h37.7002zM472 95.4004c-42.0996 -91.9004 -121.6 -151.4 -224 -151.4c-137 0 -248 111 -248 248s111 248 248 248c97.4004 0 172.8 -53.7002 218.2 -138.4l-186 -108.8z\n+M433.5 82.9004l-60.2998 30.6992c-27.1006 -44.2998 -70.4004 -71.3994 -122.4 -71.3994c-82.5 0 -149.2 66.7002 -149.2 148.899c0 82.5 66.7002 149.2 149.2 149.2c48.4004 0 88.9004 -23.5 116.9 -63.3994l59.5 34.5996c-40.7002 62.5996 -104.7 100 -179.2 100\n+c-121.2 0 -219.5 -98.2998 -219.5 -219.5s98.2998 -219.5 219.5 -219.5c78.5996 0 146.5 42.0996 185.5 110.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"modx\" unicode=\"&#xf285;\" \n+d=\"M356 206.2l36.7002 -23.7002v-214.5l-133 83.7998zM440 373l-83.2002 -134.3l-153.5 96.5l23 37.7998h213.7zM351 230.2l-249.8 -57.7002l-46 29v214.5zM97 153.8l249.7 57.7002l-125 -200.5h-213.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"fort-awesome\" unicode=\"&#xf286;\" horiz-adv-x=\"512\" \n+d=\"M489.2 160.1c2.59961 0 4.59961 -2 4.5 -4.59961v-219.5h-182.9v96c0 72.5996 -109.7 72.5996 -109.7 0v-96h-182.899v219.5c0 2.59961 2 4.59961 4.59961 4.59961h27.4004c2.59961 0 4.59961 -2 4.59961 -4.59961v-32h36.6006v178.3\n+c0 2.60059 2 4.60059 4.59961 4.60059h27.4004c2.59961 0 4.59961 -2 4.59961 -4.60059v-32h36.2998v32c0 2.60059 2 4.60059 4.60059 4.60059h27.3994c2.60059 0 4.60059 -2 4.60059 -4.60059v-32h36.5996v32c0 6 8 4.60059 11.7002 4.60059v111.699\n+c-5.40039 2.60059 -9.10059 8.30078 -9.10059 14.3008c0 20.7998 31.4004 20.6992 31.4004 0c0 -6 -3.7002 -11.7002 -9.09961 -14.3008v-4.89941c7.69922 1.7998 15.6992 2.89941 23.6992 2.89941c11.7002 0 22.9004 -4.2998 32.6006 -4.2998\n+c8.89941 0 18.8994 4.2998 24 4.2998c2.59961 0 4.59961 -2 4.59961 -4.59961v-60c0 -6.90039 -23.0996 -8 -27.7002 -8c-10.5 0 -20.5 4.2998 -31.3994 4.2998c-8.60059 0 -17.4004 -1.39941 -25.7002 -3.39941v-38c3.7002 0 11.7002 1.39941 11.7002 -4.60059v-32h36.5996\n+v32c0 2.60059 2 4.60059 4.60059 4.60059h27.3994c2.60059 0 4.60059 -2 4.60059 -4.60059v-32h36.5996v32c0 2.60059 2 4.60059 4.59961 4.60059h27.4004c2.59961 0 4.59961 -2 4.59961 -4.60059v-178.3h36.6006v32c0 2.59961 2 4.59961 4.59961 4.59961h27.4004z\n+M201.1 164.6v64c0 2.60059 -2 4.60059 -4.59961 4.60059h-27.4004c-2.59961 0 -4.59961 -2 -4.59961 -4.60059v-64c0 -2.59961 2 -4.59961 4.59961 -4.59961h27.4004c2.59961 0 4.59961 2 4.59961 4.59961zM347.5 164.6v64c0 2.60059 -2 4.60059 -4.59961 4.60059h-27.4004\n+c-2.59961 0 -4.59961 -2 -4.59961 -4.60059v-64c0 -2.59961 2 -4.59961 4.59961 -4.59961h27.4004c2.59961 0 4.59961 2 4.59961 4.59961z\" \u002F>\n+    \u003Cglyph glyph-name=\"usb\" unicode=\"&#xf287;\" horiz-adv-x=\"640\" \n+d=\"M641.5 192c0 -3.09961 -1.7002 -6.09961 -4.5 -7.5l-89.0996 -53.5c-1.40039 -0.799805 -2.80078 -1.40039 -4.5 -1.40039c-1.40039 0 -3.10059 0.300781 -4.5 1.10059c-2.80078 1.7002 -4.5 4.5 -4.5 7.7998v35.5996h-238.7\n+c25.2998 -39.5996 40.5 -106.899 69.5996 -106.899h26.7002v26.7998c0 5 3.90039 8.90039 8.90039 8.90039h89.0996c5 0 8.90039 -3.90039 8.90039 -8.90039v-89.0996c0 -5 -3.90039 -8.90039 -8.90039 -8.90039h-89.0996c-5 0 -8.90039 3.90039 -8.90039 8.90039v26.6992\n+h-26.7002c-75.3994 0 -81.0996 142.5 -124.7 142.5h-100.3c-8.09961 -30.5996 -35.8994 -53.5 -69 -53.5c-39.2998 0.100586 -71.2998 32.1006 -71.2998 71.4004s32 71.2998 71.2998 71.2998c33.1006 0 61 -22.7998 69 -53.5c39.1006 0 43.9004 -9.5 74.6006 60.4004\n+c40.0996 89.0996 58.0996 82.0996 108.899 82.0996c7.5 20.9004 27 35.6006 50.4004 35.6006c29.5 0 53.5 -23.9004 53.5 -53.5c0 -29.6006 -23.9004 -53.5 -53.5 -53.5c-23.4004 0 -42.9004 14.7998 -50.4004 35.5996h-29.7998\n+c-29.0996 0 -44.2998 -67.4004 -69.5996 -106.9h310.1v35.6006c0 3.2998 1.7002 6.09961 4.5 7.7998s6.40039 1.40039 8.90039 -0.299805l89.0996 -53.5c2.7998 -1.10059 4.5 -4.10059 4.5 -7.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"product-hunt\" unicode=\"&#xf288;\" horiz-adv-x=\"512\" \n+d=\"M326.3 229.2c0 -20.5 -16.7002 -37.2002 -37.2002 -37.2002h-70.2998v74.4004h70.2998c20.5 0 37.2002 -16.7002 37.2002 -37.2002zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM375.9 229.2\n+c0 47.8994 -38.9004 86.7998 -86.8008 86.7998h-119.899v-248h49.5996v74.4004h70.2998c47.9004 0 86.8008 38.8994 86.8008 86.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"mixcloud\" unicode=\"&#xf289;\" horiz-adv-x=\"640\" \n+d=\"M424.43 228.271c42.3623 -9.1377 74.4805 -47.0693 74.4805 -92.2002c0 -52.3311 -42.6406 -94.6934 -94.9688 -94.6934h-289.614c-62.5752 0 -113.243 50.668 -113.243 112.966c0 56.7598 42.085 103.554 96.6299 111.582\n+c22.9814 67.5586 86.9395 114.074 159.205 114.074c87.2158 0 159.205 -66.7266 167.511 -151.729zM403.941 83.7412c29.0713 0 52.6064 23.5352 52.6064 52.3301c0 22.1494 -14.1211 40.9766 -33.502 48.4531c-1.38477 -8.58301 -3.59961 -17.166 -6.36914 -25.4727\n+c-8.01367 -25.6484 -49.0898 -14.2266 -40.1465 13.29c4.15332 12.7373 6.36914 26.0264 6.36914 39.5938c0 69.2197 -56.4834 125.702 -125.979 125.702c-49.8379 0 -94.6934 -29.626 -114.628 -73.9258c19.3809 -4.98438 37.3779 -14.9512 52.0527 -29.3486\n+c19.9531 -19.9531 -10.2168 -50.1436 -30.1797 -30.1807c-13.29 13.291 -31.0107 20.7666 -49.8379 20.7666c-39.04 0 -70.8809 -31.5645 -70.8809 -70.6045s31.8408 -70.6035 70.8809 -70.6035h289.614zM639.01 136.071c0 -44.0244 -12.7363 -86.3867 -37.1016 -122.657\n+c-4.15332 -6.0918 -10.7979 -9.41406 -17.7197 -9.41406c-16.3174 0 -27.1279 18.8262 -17.4434 32.9492c19.3809 29.3486 29.9033 63.6816 29.9033 99.1221c0 35.4395 -10.5215 69.7725 -29.9033 98.8447c-15.6553 22.8311 19.3613 47.2402 35.1631 23.5342\n+c24.3662 -35.9932 37.1016 -78.3564 37.1016 -122.379zM568.13 136.071c0 -31.5654 -9.13672 -62.0215 -26.8564 -88.3252c-4.15332 -6.09082 -10.7988 -9.13574 -17.7207 -9.13574c-17.2012 0 -27.0215 18.9785 -17.4424 32.9473\n+c13.0127 19.1045 19.6572 41.2559 19.6572 64.5137c0 22.9805 -6.64453 45.4072 -19.6572 64.5117c-15.7617 22.9863 19.0078 47.0947 35.1631 23.5352c17.7188 -26.0264 26.8564 -56.4834 26.8564 -88.0469z\" \u002F>\n+    \u003Cglyph glyph-name=\"scribd\" unicode=\"&#xf28a;\" horiz-adv-x=\"384\" \n+d=\"M42.2998 195.3c-16.0996 19 -24.7002 45.9004 -24.7998 79.9004c0 100.399 75.2002 153.1 167.2 153.1c98.5996 1.60059 156.8 -49 184.3 -70.5996l-50.5 -72.1006l-37.2998 24.6006l26.8994 38.5996c-36.5 24 -79.3994 36.5 -123 35.7998\n+c-50.6992 0.800781 -111.699 -27.1992 -111.699 -76.1992c0 -18.7002 11.1992 -20.7002 28.5996 -15.6006c23.2998 5.2998 41.9004 -0.599609 55.7998 -14c26.4004 -24.2998 23.2002 -67.5996 -0.700195 -91.8994c-29.1992 -29.5 -85.1992 -27.3008 -114.8 8.39941z\n+M360 189.4c33.9004 -40.4004 36.7998 -138.2 -20.2998 -189.601c-39.2002 -33.5996 -82.2002 -44.0996 -133.601 -44.0996c-70.2998 -0.299805 -138.199 25.3994 -190.699 72.2002l-15.4004 13.7998l60.7998 71.7998l35.6006 -27.4004l-33.7002 -39.3994\n+c41.7002 -30.9004 92.2002 -47.5 144.1 -47.2998c61.9004 0 104.7 23.5 121.4 64.3994c0.899414 4.2002 1.39941 8.40039 1.39941 12.7002c0 18.7002 -11.1992 20.7002 -28.5996 15.5996c-23.2998 -5.2998 -42.2002 0.5 -56.2998 14.4004\n+c-12.4004 11.2998 -19.1006 27.5 -18.4004 44.2998c-0.599609 39.2002 32.4004 69.2002 70.5 67.2002c24.2998 0.799805 47.7002 -9.7998 63.2002 -28.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"bluetooth\" unicode=\"&#xf293;\" \n+d=\"M292.6 276.9l-42.8994 -42.9004l-0.299805 86zM249.4 57.0996l0.199219 86l42.9004 -42.8994zM416 188.6c0 -205.6 -71.9004 -252.6 -185.1 -252.6c-113.2 0 -198.9 47 -198.9 252.6c0 205.601 83.4004 259.4 196.6 259.4c113.2 0 187.4 -53.9004 187.4 -259.4z\n+M257.5 188.6l79.4004 88.6006l-125.101 134.3v-176.9l-73.7998 73.8008l-27 -26.9004l92.7002 -93l-92.7002 -93l26.9004 -26.9004l73.7998 73.8008l2.2998 -170l127.4 127.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"bluetooth-b\" unicode=\"&#xf294;\" horiz-adv-x=\"320\" \n+d=\"M196.48 187.977l97.9111 -103.333l-148.552 -148.644l-2.71484 198.284l-86.1113 -86.1113l-31.4053 31.4053l108.061 108.398l-108.061 108.399l31.4053 31.4053l86.1113 -86.1113v206.33l145.981 -156.69zM237.34 290.973l-50.3145 50.3174l0.337891 -100.295z\n+M187.363 134.96l-0.337891 -100.294l50.3145 50.3164z\" \u002F>\n+    \u003Cglyph glyph-name=\"gitlab\" unicode=\"&#xf296;\" horiz-adv-x=\"512\" \n+d=\"M105.2 423.1c0 0 56.5 -174.8 56.5996 -174.8h-132l56.5 174.8c3.2002 8.90039 15.7998 8.90039 18.9004 0zM0.900391 160.3l28.7998 88l226.2 -294l-247.9 184c-6.7998 5.10059 -9.7002 14 -7.09961 22zM161.7 248.3h188.6l-94.2998 -294zM511.1 160.3\n+c2.5 -8 -0.299805 -16.8994 -7.19922 -22l-247.9 -184l226.3 294zM425.7 423.1l56.5 -174.8h-132l56.5996 174.8c3.2002 8.90039 15.7998 8.90039 18.9004 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"wpbeginner\" unicode=\"&#xf297;\" horiz-adv-x=\"512\" \n+d=\"M462.799 125.626c56.2109 -64.3076 4.16211 -157.626 -91.8545 -157.626c-39.6025 0 -78.8242 17.6865 -100.143 50.04c-6.88672 -0.356445 -22.7021 -0.356445 -29.5898 0c-21.3643 -32.4209 -60.624 -50.04 -100.143 -50.04\n+c-95.4902 0 -148.349 92.9961 -91.8555 157.626c-79.1387 131.851 31.2646 290.374 206.792 290.374c175.632 0 285.87 -158.626 206.793 -290.374zM123.152 208.598h41.5283v58.0752h-41.5283v-58.0752zM340.332 122.526v23.8389\n+c-60.5059 -20.915 -132.355 -9.19824 -187.589 33.9707l0.246094 -24.8965c51.1006 -46.3672 131.746 -57.875 187.343 -32.9131zM189.579 208.598h166.058v58.0752h-166.058v-58.0752z\" \u002F>\n+    \u003Cglyph glyph-name=\"wpforms\" unicode=\"&#xf298;\" \n+d=\"M448 372.8v-361.7c0 -24.2998 -19 -43.1992 -43.2002 -43.1992h-361.6c-23.9004 0.0996094 -43.2002 18.6992 -43.2002 43.2998v361.6c0 24.1006 18.7998 43.2002 43.2002 43.2002h361.7c24 0 43.0996 -18.7998 43.0996 -43.2002zM410.7 11.2002v361.6\n+c0 3 -2.60059 5.7998 -5.7998 5.7998h-9.30078l-110.3 -74.5996l-61.2998 49.9004l-61.2002 -49.9004l-110.3 74.7002h-9.2998c-3.2002 0 -5.7998 -2.7998 -5.7998 -5.7998v-361.7c0 -3 2.59961 -5.7998 5.7998 -5.7998h361.7\n+c3.19922 -0.100586 5.7998 2.69922 5.7998 5.7998zM150.2 262v-37h-73.5v37h73.5zM150.2 187.6v-37.2998h-73.5v37.2998h73.5zM161.3 334.9l54 43.6992h-118.5zM371.3 262v-37h-196v37h196zM371.3 187.6v-37.2998h-196v37.2998h196zM286.7 334.9l64.5 43.6992h-118.4z\n+M371.3 113v-37.2998h-99.3994v37.2998h99.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"envira\" unicode=\"&#xf299;\" \n+d=\"M0 416c477.6 0 366.6 -317.3 367.1 -366.3l80.9004 -81.7002h-26l-70.4004 71.2002c-39 -4.2002 -124.399 -34.5 -214.399 37c-90.2002 71.5 -85.2002 157.1 -137.2 339.8zM79.7002 370c-49.7002 23.5 -5.2002 -9.2002 -5.2002 -9.2002\n+c45.2002 -31.2002 66 -73.7002 90.2002 -119.899c31.5 -60.2002 79 -139.7 144.2 -167.7c65 -28 34.1992 -12.5 6 8.5c-28.2002 21.2002 -68.2002 87 -91 130.2c-31.7002 60 -61 118.6 -144.2 158.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"glide\" unicode=\"&#xf2a5;\" \n+d=\"M252.8 299.4c0 -8.80078 -1.59961 -17.7002 -3.39941 -26.4004c-5.80078 -27.7998 -11.6006 -55.7998 -17.3008 -83.5996c-1.39941 -6.30078 -8.2998 -4.90039 -13.6992 -4.90039c-23.8008 0 -30.5 26 -30.5 45.5c0 29.2998 11.1992 68.0996 38.5 83.0996\n+c4.2998 2.5 9.19922 4.2002 14.0996 4.2002c11.4004 0 12.2998 -8.2998 12.2998 -17.8994zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM384 181c0 5.09961 -20.7998 37.7002 -25.5 39.5\n+c-2.2002 0.900391 -7.2002 2.2998 -9.59961 2.2998c-23.1006 0 -38.7002 -10.5 -58.2002 -21.5l-0.5 0.5c4.2998 29.4004 14.5996 57.2002 14.5996 87.4004c0 44.5996 -23.7998 62.7002 -67.5 62.7002c-71.7002 0 -108 -70.8008 -108 -123.5c0 -54.7002 32 -85 86.2998 -85\n+c7.5 0 6.90039 0.599609 6.90039 -2.30078c-10.5 -80.2998 -56.5 -82.8994 -56.5 -58.8994c0 24.3994 28 36.5 28.2998 38c-0.200195 7.59961 -29.2998 17.2002 -36.7002 17.2002c-21.0996 0 -32.6992 -33 -32.6992 -50.6006c0 -32.2998 20.3994 -54.7002 53.2998 -54.7002\n+c48.2002 0 83.3994 49.7002 94.2998 91.7002c9.40039 37.7002 7 39.4004 12.2998 42.1006c20 10.0996 35.7998 16.7998 58.4004 16.7998c11.0996 0 19 -2.2998 36.7002 -5.2002c1.7998 -0.0996094 4.09961 1.7002 4.09961 3.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"glide-g\" unicode=\"&#xf2a6;\" \n+d=\"M407.1 236.8c7.5 -2.89941 40.9004 -55.3994 40.9004 -63.3994c0 -2.90039 -3.7998 -5.80078 -6.7002 -5.80078c-28.3994 4.7002 -41.0996 8.40039 -58.8994 8.40039c-36.3008 0 -61.6006 -10.7998 -93.8008 -27c-8.5 -4.2998 -4.59961 -7.09961 -19.6992 -67.5996\n+c-17.4004 -67.6006 -74 -145.4 -151.4 -145.4c-52.7002 0 -85.5 36 -85.5 87.9004c0 28.0996 18.5 79.1992 52.4004 79.2998c11.8994 0 58.5996 -15.4004 58.8994 -27.6006c-0.5 -2.39941 -45.5 -21.7998 -45.5 -61c0 -38.5 73.9004 -34.2998 90.7998 94.6006\n+c0 4.7998 1 3.7998 -11 3.7998c-87.2998 0 -138.6 48.7002 -138.6 136.6c0 84.7002 58.2998 198.4 173.4 198.4c70.1992 0 108.399 -29.0996 108.399 -100.6c0 -48.5 -16.5 -93.1006 -23.5 -140.4l0.900391 -0.900391c31.2998 17.7002 56.3994 34.5 93.5 34.5\n+c3.7998 0 11.8994 -2.39941 15.3994 -3.7998zM231.8 321.2c2.90039 13.8994 5.5 28.0996 5.60059 42.3994c0 15.4004 -1.40039 28.7002 -20 28.7002c-7.80078 0 -15.6006 -2.59961 -22.6006 -6.7002c-43.7998 -24.0996 -61.7998 -86.3994 -61.7998 -133.399\n+c0 -31.2998 10.7002 -73.1006 49 -73.1006c8.7002 0 19.7002 -2.39941 22 7.80078c9.2002 44.6992 18.5 89.5996 27.7998 134.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"viadeo\" unicode=\"&#xf2a9;\" \n+d=\"M276.2 297.5v-0.700195c-17.9004 52.6006 -42.6006 103.4 -70.7998 151.2c43.2998 -29.2002 67 -100 70.7998 -150.5zM308.9 175.8c15.0996 3.10059 29.5 9 42.1992 17c24.5 -58.5996 20.2002 -139.7 -36.3994 -201c-67.7998 -73.8994 -191.9 -74.5996 -259.8 0\n+c-108.801 117.8 -31.6006 313.7 129.899 313.7c21.2998 0 42.6006 -3.5 62.5 -10.7002c-6.89941 -13.3994 -11.7002 -28.2002 -13.3994 -43.2998c-15.4004 6.5 -32.3008 9.59961 -49.1006 9.59961c-78 0 -135.399 -66.6992 -135.399 -142.3\n+c0 -68.7998 45.5996 -126 111.3 -137.399c98.5 38.3994 116.6 188.199 116.6 280c0 11.6992 0 23.6992 -1 35.3994c12.4004 -36.0996 18.9004 -73.8994 18.9004 -112c0 -86.5 -35.1006 -158.399 -109.3 -205.1l-3.80078 -0.299805\n+c80 -1.60059 137.801 61.6992 137.801 139.399c0 19.5 -3.40039 38.7998 -11 57zM418.1 436.3c52 -74 20.9004 -208.6 -58.0996 -208.6c-21.2998 0 -40.2002 11.3994 -55 25.7998c35.0996 19.2998 79.4004 49.2002 99.7002 84.9004\n+c2.39941 4.7998 6.5 13.6992 7.2002 19.1992c-19.9004 -44.6992 -70.8008 -79.6992 -118.2 -90.6992c-7.5 11.6992 -12 24.6992 -12 38.7998c0 16.5 8.2002 38.5 20.5996 50.5c34.5 32.8994 84.7998 13.5996 115.8 80.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"viadeo-square\" unicode=\"&#xf2aa;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM280.7 66.7998c35.3994 38.2998 38.0996 89 22.7998 125.601c-7.90039 -4.90039 -16.9004 -8.60059 -26.4004 -10.5\n+c4.80078 -11.4004 6.90039 -23.5 6.90039 -35.7002c0 -48.6006 -36.2002 -88.2002 -86.2002 -87.2002l2.40039 0.200195c46.3994 29.2002 68.2998 74.0996 68.2998 128.2c0 23.7998 -4.09961 47.5 -11.7998 70v0.399414c-2.2998 31.6006 -17.1006 75.7998 -44.2002 94.1006\n+c17.5996 -29.9004 33 -61.6006 44.2002 -94.5c0.599609 -7.30078 0.599609 -14.8008 0.599609 -22.1006c0 -57.3994 -11.3994 -151 -72.8994 -175c-41 7.2002 -69.5 42.9004 -69.5 85.9004c0 47.2002 35.7998 88.8994 84.5996 88.8994c10.5 0 21 -1.89941 30.7002 -6\n+c1.09961 9.5 4.09961 18.7002 8.39941 27.1006c-12.5 4.59961 -25.7998 6.7002 -39.0996 6.7002c-101 0 -149.2 -122.5 -81.2002 -196.101c42.4004 -46.5996 120 -46.2002 162.4 0zM309 214.3c49.4004 0 68.7998 84.1006 36.2998 130.3\n+c-19.3994 -41.5 -50.7998 -29.5 -72.3994 -50c-7.7002 -7.5 -12.9004 -21.2998 -12.9004 -31.5996c0 -8.7998 2.7998 -17 7.5 -24.2998c29.7002 6.89941 61.4004 28.7998 73.9004 56.7002c-0.400391 -3.40039 -3 -9 -4.5 -12c-12.7002 -22.3008 -40.4004 -41 -62.3008 -53\n+c9.30078 -9 21.1006 -16.1006 34.4004 -16.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"snapchat\" unicode=\"&#xf2ab;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM417.5 101.1c2.2002 5.30078 -0.900391 9.80078 -4.90039 10.8008c-46.2998 7.59961 -67.0996 55.0996 -68 57.0996\n+c-0.0996094 0.0996094 -0.0996094 0.200195 -0.199219 0.299805c-2.40039 5 -3 9.2002 -1.60059 12.5c2.60059 6.2998 12.5 9.40039 19 11.5c1.7998 0.600586 3.5 1.10059 4.90039 1.7002c11.5 4.5 17.2998 10.0996 17.2002 16.5996\n+c-0.100586 5.10059 -4.10059 9.60059 -10.4004 11.9004c-4 1.59961 -9.59961 1.90039 -13.5996 0c-5.5 -2.59961 -10.4004 -4 -14.7002 -4.2002c-2.7998 0.100586 -4.60059 0.799805 -5.7002 1.40039c1.40039 24 4.7002 58 -3.7998 77.0996\n+c-16.2998 36.5 -49.6006 54.2998 -84.2998 54.2998c-0.600586 0 -6.10059 -0.0996094 -6.7002 -0.0996094c-14 0 -61.6006 -4 -84.1006 -54.2998c-8.5 -19.1006 -5.19922 -53.2002 -3.7998 -77.1006c-1.09961 -0.599609 -3.2998 -1.39941 -6.59961 -1.39941\n+c-4.5 0 -9.7998 1.39941 -15.7002 4.2002c-7.5 3.5 -20.2998 -1.80078 -21.9004 -10.3008c-1 -4.89941 1.2002 -12.0996 17 -18.2998c6.10059 -2.5 20.6006 -5.2998 24 -13.2002c1.40039 -3.2998 0.900391 -7.5 -1.59961 -12.5\n+c-0.0996094 -0.0996094 -0.200195 -0.199219 -0.200195 -0.299805c-0.899414 -2 -21.7002 -49.5 -68 -57.0996c-3.59961 -0.600586 -6.09961 -3.7998 -5.89941 -7.40039c0.699219 -13.8994 31.6992 -19.2998 45.5 -21.3994c1.39941 -1.90039 2.5 -9.90039 4.2998 -16\n+c0.799805 -2.7002 2.89941 -6 8.2998 -6s13.2998 3.09961 25.7998 3.09961c17.6006 0 23.6006 -4 37.4004 -13.7002c9.89941 -7 27.5 -19.7998 48.5 -18.2002c20.7998 -0.899414 34.7002 7.90039 49.2002 18.2002c13.6992 9.7002 19.7998 13.7002 37.3994 13.7002\n+c13 0 19.6006 -2.90039 25.7998 -2.90039h0.200195c4.40039 0 7 2.2002 8.10059 5.90039c1.7998 6.09961 2.89941 14 4.2998 15.9004c26.7002 4.19922 41.2998 10.0996 44.7998 18.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"snapchat-ghost\" unicode=\"&#xf2ac;\" horiz-adv-x=\"512\" \n+d=\"M510.846 55.3271c-5.21094 -12.1572 -27.2383 -21.0889 -67.3594 -27.3184c-2.06445 -2.78613 -3.77539 -14.6855 -6.50781 -23.9561c-1.625 -5.56543 -5.62207 -8.86914 -12.1279 -8.86914l-0.296875 0.00585938c-9.39453 0 -19.2031 4.32227 -38.8516 4.32227\n+c-26.5215 0 -35.6621 -6.04297 -56.2539 -20.5879c-21.832 -15.4375 -42.7715 -28.7637 -74.0273 -27.3984c-31.6455 -2.33398 -58.0244 16.9072 -72.8711 27.4033c-20.7139 14.6436 -29.8281 20.582 -56.2412 20.582c-18.8633 0 -30.7354 -4.71973 -38.8516 -4.71973\n+c-8.07324 0 -11.2129 4.92188 -12.4219 9.04004c-2.70312 9.18848 -4.4043 21.2627 -6.52344 24.1299c-20.6787 3.20898 -67.3096 11.3438 -68.498 32.1504c-0.00878906 0.161133 -0.015625 0.422852 -0.015625 0.583984c0 4.97559 3.98438 9.67285 8.89258 10.4844\n+c69.583 11.4551 100.925 82.9014 102.228 85.9346c0.0742188 0.175781 0.155273 0.34375 0.237305 0.514648c3.71289 7.53711 4.54395 13.8486 2.46289 18.7529c-5.05078 11.8965 -26.8721 16.1641 -36.0537 19.7959c-23.7148 9.36621 -27.0146 20.1279 -25.6113 27.5039\n+c2.43652 12.8359 21.7246 20.7354 33.002 15.4531c8.91895 -4.18066 16.8428 -6.29688 23.5469 -6.29688c5.02148 0 8.21191 1.2041 9.95996 2.1709c-2.04297 35.9365 -7.10156 87.29 5.68652 115.969c33.7734 75.7188 105.356 81.6025 126.478 81.6025\n+c0.943359 0 9.14062 0.0888672 10.1094 0.0888672c52.1484 0 102.255 -26.7803 126.724 -81.6426c12.7764 -28.6504 7.74902 -79.792 5.69434 -116.01c1.58203 -0.87207 4.35742 -1.94141 8.59961 -2.13867c6.39648 0.286133 13.8145 2.38867 22.0693 6.25684\n+c6.08496 2.84668 14.4053 2.46094 20.4795 -0.0576172l0.0292969 -0.00976562c9.47559 -3.38574 15.4385 -10.2158 15.5889 -17.8701c0.183594 -9.74707 -8.52246 -18.165 -25.8779 -25.0186c-2.11816 -0.834961 -4.69434 -1.6543 -7.43457 -2.52441\n+c-9.79688 -3.10645 -24.5996 -7.80566 -28.6152 -17.2715c-2.0791 -4.9043 -1.25684 -11.2109 2.45996 -18.748c0.0869141 -0.167969 0.166016 -0.341797 0.238281 -0.514648c1.30176 -3.03027 32.6152 -74.46 102.23 -85.9346\n+c6.42676 -1.05762 11.1631 -7.87695 7.72461 -15.8584z\" \u002F>\n+    \u003Cglyph glyph-name=\"snapchat-square\" unicode=\"&#xf2ad;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM393.5 101.1c2.2002 5.30078 -0.900391 9.80078 -4.90039 10.8008c-46.2998 7.59961 -67.0996 55.0996 -68 57.0996\n+c-0.0996094 0.0996094 -0.0996094 0.200195 -0.199219 0.299805c-2.40039 5 -3 9.2002 -1.60059 12.5c2.60059 6.2998 12.5 9.40039 19 11.5c1.7998 0.600586 3.5 1.10059 4.90039 1.7002c11.5 4.5 17.2998 10.0996 17.2002 16.5996\n+c-0.100586 5.10059 -4.10059 9.60059 -10.4004 11.9004c-4 1.59961 -9.59961 1.90039 -13.5996 0c-5.5 -2.59961 -10.4004 -4 -14.7002 -4.2002c-2.7998 0.100586 -4.60059 0.799805 -5.7002 1.40039c1.40039 24 4.7002 58 -3.7998 77.0996\n+c-16.2998 36.5 -49.6006 54.2998 -84.2998 54.2998c-0.600586 0 -6.10059 -0.0996094 -6.7002 -0.0996094c-14 0 -61.6006 -4 -84.1006 -54.2998c-8.5 -19.1006 -5.19922 -53.2002 -3.7998 -77.1006c-1.09961 -0.599609 -3.2998 -1.39941 -6.59961 -1.39941\n+c-4.5 0 -9.7998 1.39941 -15.7002 4.2002c-7.5 3.5 -20.2998 -1.80078 -21.9004 -10.3008c-1 -4.89941 1.2002 -12.0996 17 -18.2998c6.10059 -2.5 20.6006 -5.2998 24 -13.2002c1.40039 -3.2998 0.900391 -7.5 -1.59961 -12.5\n+c-0.0996094 -0.0996094 -0.200195 -0.199219 -0.200195 -0.299805c-0.899414 -2 -21.7002 -49.5 -68 -57.0996c-3.59961 -0.600586 -6.09961 -3.7998 -5.89941 -7.40039c0.699219 -13.8994 31.6992 -19.2998 45.5 -21.3994c1.39941 -1.90039 2.5 -9.90039 4.2998 -16\n+c0.799805 -2.7002 2.89941 -6 8.2998 -6s13.2998 3.09961 25.7998 3.09961c17.6006 0 23.6006 -4 37.4004 -13.7002c9.89941 -7 27.5 -19.7998 48.5 -18.2002c20.7998 -0.899414 34.7002 7.90039 49.2002 18.2002c13.6992 9.7002 19.7998 13.7002 37.3994 13.7002\n+c13 0 19.6006 -2.90039 25.7998 -2.90039h0.200195c4.40039 0 7 2.2002 8.10059 5.90039c1.7998 6.09961 2.89941 14 4.2998 15.9004c26.7002 4.19922 41.2998 10.0996 44.7998 18.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"pied-piper\" unicode=\"&#xf2ae;\" \n+d=\"M32 29l-32 -60.2002l0.799805 328c0 65.9004 53.2002 119.2 119.2 119.2h327.2c-93 -28.9004 -189.9 -94.2002 -253.9 -168.6c-70.5996 -81.4004 -110.7 -137.4 -161.3 -218.4zM448 416c0 0 0 -328.8 0.0996094 -328.8c0 -65.9004 -53.2998 -119.2 -119.3 -119.2\n+h-328.399c18.5 25.5 61.6992 54 84.8994 66c35.5 18.0996 76.4004 28.5 105.3 56.2998c42.1006 40.5 47.8008 105 71 158.601c43.6006 100.3 186.4 167.1 186.4 167.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"first-order\" unicode=\"&#xf2b0;\" \n+d=\"M12.9004 218.8c0.0996094 0.100586 0.199219 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.100586 -0.400391h-0.199219zM224 351.4c7.40039 0 14.5996 -0.5 21.7002 -1.7002l-4 -67.7002l22.2998 64.2998c14.2998 -3.7998 27.7002 -9.5 40 -16.8994\n+l-29.4004 -61.1006l45.1006 50.9004c11.5 -8.90039 21.7002 -19.2002 30.5996 -30.9004l-50.5996 -45.3994l60.8994 29.6992c7.5 -12.2998 12.9004 -26 16.6006 -40.2998l-64 -22.2998l67.7002 4c1.09961 -7.09961 1.39941 -14.5996 1.39941 -22\n+s-0.299805 -14.5996 -1.39941 -21.7002l-67.4004 4l64 -22.2998c-3.7002 -14.5996 -9.5 -28 -16.5996 -40.2998l-61.1006 29.3994l50.6006 -45.0996c-8.60059 -11.7998 -18.9004 -22 -30.6006 -30.9004l-44.8994 50.9004l29.3994 -61.2998\n+c-12.2998 -7.5 -25.7002 -12.9004 -40 -16.9004l-22.5996 65.1006l4 -68.6006c-7.10059 -1.09961 -14.2998 -1.7002 -21.7002 -1.7002c-7.09961 0 -14.5996 0.600586 -21.7002 1.7002l4 68l-22.2998 -64.5996c-14.2998 3.7998 -27.7002 9.5 -40 16.8994l29.5 61.4004\n+l-44.9004 -50.9004c-11.7998 8.60059 -22 19.2002 -30.8994 30.9004l50.8994 45.0996l-61.0996 -29.6992c-7.2002 12.5996 -12.9004 26 -16.5996 40.2998l64 22.5996l-67.7002 -4c-0.799805 7.10059 -1.40039 14.2998 -1.40039 21.7002s0.5 14.9004 1.40039 22l68 -4\n+l-64.2998 22.5996c3.69922 14.3008 9.5 27.7002 16.5996 40l61.0996 -29.6992l-50.5996 45.3994c8.90039 11.7998 19.2002 22 30.5996 30.9004l45.1006 -50.9004l-29.4004 61.4004c12.2998 7.2002 25.7002 12.8994 40 16.5996l22 -64l-3.7002 67.4004\n+c6.80078 1.09961 14.3008 1.7002 21.4004 1.7002zM443.4 320v-256l-219.4 -128l-219.4 128v256l219.4 128zM426.3 309.7l-202.3 117.399l-202.3 -117.399v-235.101l202.3 -117.699l202.3 117.699v235.101zM224 410.9l187.7 -109.4v-218.9l-187.7 -109.5l-187.7 109.5\n+v218.801zM224 360c-92.2998 0 -166.9 -75.0996 -166.9 -168c0 -92.5996 74.6006 -167.7 166.9 -167.7c92 0 166.9 75.1006 166.9 167.7c0 92.9004 -74.9004 168 -166.9 168z\" \u002F>\n+    \u003Cglyph glyph-name=\"yoast\" unicode=\"&#xf2b1;\" \n+d=\"M91.2998 372h186l-7 -18.9004h-179c-39.7002 0 -71.8994 -31.5996 -71.8994 -70.2998v-205.399c0 -35.4004 24.8994 -70.3008 84 -70.3008v-19.0996h-12.1006c-50.0996 0 -91.2998 40.2002 -91.2998 89.5v205.3c0 49.2998 40.7002 89.2002 91.2998 89.2002zM320.4 428\n+h66.5c-143.801 -378.1 -145.7 -398.9 -184.7 -439.3c-20.7998 -21.6006 -49.2998 -31.7002 -78.2998 -32.7002v51.0996c49.1992 7.7002 64.5996 49.9004 64.5996 75.3008c0 20.0996 0.599609 12.5996 -82.0996 223.199h61.3994l50.4004 -156.6zM448 286.5v-298.5h-214\n+c6.59961 9.59961 10.7002 16.2998 12.0996 19.4004h182.5v279.1c0 32.5 -17.0996 51.9004 -48.1992 62.9004l6.69922 17.5996c41.7002 -13.5996 60.9004 -43.0996 60.9004 -80.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"themeisle\" unicode=\"&#xf2b2;\" horiz-adv-x=\"512\" \n+d=\"M208 359.714c0 10 6.28613 21.7139 17.7148 21.7139c11.1426 0 17.7139 -11.7139 17.7139 -21.7139c0 -10.2852 -6.57129 -21.7139 -17.7139 -21.7139c-11.4287 0 -17.7148 11.4287 -17.7148 21.7139zM512 199.714c0 -36.001 -11.4287 -102.286 -36.2861 -129.714\n+c-22.8574 -24.8584 -87.4277 -61.1426 -120.856 -70.5723l-1.14355 -0.286133v-32.5703c0 -16.2861 -12.5723 -30.5713 -29.1426 -30.5713c-10 0 -19.4297 5.71387 -24.5723 14.2861c-5.42676 -8.57227 -14.8564 -14.2861 -24.8564 -14.2861\n+s-19.4287 5.71387 -24.8574 14.2861c-5.14258 -8.57227 -14.5713 -14.2861 -24.5703 -14.2861c-10.2861 0 -19.4287 5.71387 -24.8574 14.2861c-5.14355 -8.57227 -14.5713 -14.2861 -24.5713 -14.2861c-18.8574 0 -29.4287 15.7139 -29.4287 32.8574\n+c-16.2861 -12.2852 -35.7158 -19.4287 -56.5713 -19.4287c-22 0 -43.4287 8.28516 -60.2861 22.8574c10.2852 0.286133 20.5713 2.28613 30.2852 5.71387c-20.8574 5.71387 -39.4277 18.8574 -52 36.2861c21.3701 -4.64551 46.209 -1.67285 67.1426 11.1426\n+c-22 22 -56.5703 58.8574 -68.5713 87.4287c-5.71387 13.4287 -6.85645 31.4287 -6.85645 45.7139c0 49.7139 20.2861 160 86.2861 160c10.5713 0 18.8564 -4.8584 23.1426 -14.8574c3.0498 4.46289 8.42578 11.374 12 15.4277c2 2.57227 5.71387 5.42969 7.14355 8.28613\n+c7.99902 12.5713 11.7139 21.1426 21.7139 34c32.2852 41.1445 81.7139 69.4297 134.856 69.4297c6 0 12 -0.285156 17.7148 -1.14355c10.8564 11.7148 26 18.2861 41.7148 18.2861c14.5703 0 29.7139 -6 40 -16.2861c0.856445 -0.857422 1.42773 -2.28613 1.42773 -3.42773\n+c0 -3.71387 -10.2852 -13.4287 -12.8574 -16.2861c4.28613 -1.42871 15.7148 -6.8584 15.7148 -12c0 -2.85742 -2.85742 -5.14258 -4.57129 -7.14258c31.4287 -27.7148 49.4287 -67.1436 56.2861 -108c4.28613 5.14258 10.2852 8.57129 17.1426 8.57129\n+c10.5713 0 20.8574 -7.14355 28.5713 -14.001c20.8564 -18.5703 25.7139 -53.1416 25.7139 -79.7139zM188 358.572c0 -18.2861 12.5713 -37.1436 32.2861 -37.1436c19.7139 0 32.2852 18.8574 32.2852 37.1436c0 18 -12.5713 36.8564 -32.2852 36.8564\n+c-19.7148 0 -32.2861 -18.8574 -32.2861 -36.8564zM237.714 254c0 19.7139 3.71387 39.1426 8.57129 58.2861c-52.0391 -79.5342 -13.5312 -184.571 68.8574 -184.571c21.4287 0 42.5713 7.71387 60 20c2 7.42871 3.71484 14.8574 3.71484 22.5723\n+c0 14.2861 -6.28613 21.4277 -20.5723 21.4277c-4.57129 0 -9.14355 -0.856445 -13.4287 -1.71387c-63.3438 -12.668 -107.143 -3.66895 -107.143 63.999zM196.572 -0.858398c0 11.1436 -8.8584 20.8574 -20.2861 20.8574c-11.4287 0 -20 -9.71484 -20 -20.8574v-32.5703\n+c0 -11.1436 8.57129 -21.1426 20 -21.1426c11.4277 0 20.2861 9.71484 20.2861 21.1426v32.5703zM245.715 -0.858398c0 11.1436 -8.57227 20.8574 -20 20.8574c-11.4287 0 -20.2861 -9.71484 -20.2861 -20.8574v-32.5703c0 -11.1436 8.85742 -21.1426 20.2861 -21.1426\n+c11.4277 0 20 10 20 21.1426v32.5703zM295.428 -0.858398c0 11.1436 -8.85645 20.8574 -20.2852 20.8574s-20.2852 -9.71484 -20.2852 -20.8574v-32.5703c0 -11.1436 8.85645 -21.1426 20.2852 -21.1426s20.2852 9.71484 20.2852 21.1426v32.5703zM345.143 -0.858398\n+c0 11.1436 -8.85645 20.8574 -20.2852 20.8574s-20.2861 -9.71484 -20.2861 -20.8574v-32.5703c0 -11.1436 8.85742 -21.1426 20.2861 -21.1426s20.2852 10 20.2852 21.1426v32.5703zM421.714 162c-30.8564 -59.1416 -90.2852 -102.572 -158.571 -102.572\n+c-96.5703 0 -160.57 84.5723 -160.57 176.572c0 16.8574 2 33.4287 6 49.7139c-20 -33.7148 -29.7139 -72.5723 -29.7139 -111.429c0 -60.2861 24.8564 -121.715 71.4287 -160.857c5.14258 9.71387 14.8564 16.2861 26 16.2861c10 0 19.4277 -5.71387 24.5713 -14.2861\n+c5.42871 8.57129 14.5703 14.2861 24.8574 14.2861c10 0 19.4277 -5.71387 24.5713 -14.2861c5.42871 8.57129 14.8564 14.2861 24.8574 14.2861c10 0 19.4287 -5.71387 24.8574 -14.2861c5.14258 8.57129 14.5713 14.2861 24.5723 14.2861\n+c10.8564 0 20.8564 -6.57227 25.7139 -16c43.4268 36.2861 68.5693 92 71.4258 148.286zM432.286 261.714c0 53.7139 -34.5713 105.714 -92.5723 105.714c-30.2852 0 -58.5713 -15.1426 -78.8564 -36.8564c-19.9951 -66.3828 -27.4473 -136.571 41.4287 -136.571\n+c28.8047 0 97.3564 28.5381 84.2861 -36.8574c28.8564 26 45.7139 65.7148 45.7139 104.571z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-plus\" unicode=\"&#xf2b3;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.9 0 248 -111.1 248 -248s-111.1 -248 -248 -248s-248 111.1 -248 248s111.1 248 248 248zM177.3 68c71.2998 0 118.8 50.4004 118.8 121.2c0 7.09961 -0.599609 13.8994 -1.89941 20.7002h-116.9v-42.6006h70.1006\n+c-5.2002 -34.2002 -37.5 -53.2998 -70.1006 -53.2998c-43 0 -77.2002 35.5 -77.2002 78.0996c0 42.6006 34.3008 78.1006 77.2002 78.1006c18.1006 0 36.2002 -6.2002 49.4004 -19.1006l33.5996 32.6006c-22.8994 21.2998 -51.7002 32.2998 -83 32.2998\n+c-68.7998 0 -124 -55.5 -124 -124s55.2002 -124 124 -124zM407.5 174.2h35.2002v35.5h-35.2002v35.5h-35.5v-35.5h-35.5v-35.5h35.5v-35.5h35.5v35.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"font-awesome\" unicode=\"&#xf2b4;\" \n+d=\"M397.8 416c27.5 0 50.2002 -22.7002 50.2002 -50.2002v-347.6c0 -27.5 -22.7002 -50.2002 -50.2002 -50.2002h-347.6c-27.5 0 -50.2002 22.7002 -50.2002 50.2002v347.6c0 27.5 22.7002 50.2002 50.2002 50.2002h347.6zM352.4 131.7h0.0996094v140.3\n+c0 4.2002 -4.2002 7.7998 -9 7.7998c-6 0 -31.0996 -16.0996 -53.7998 -16.0996c-4.7002 0 -8.90039 0.599609 -13.1006 2.39941c-20.2998 7.7002 -38.1992 13.7002 -60.8994 13.7002c-20.9004 0 -43 -6.5 -61.5 -14.2998\n+c-1.7998 -1.2002 -3.60059 -1.7998 -5.40039 -2.40039v18.5c8.2998 6 13.1006 15.5 13.1006 26.3008c0 18.5996 -15 33.5 -33.5 33.5c-18.6006 0 -33.5 -15 -33.5 -33.5c0 -10.8008 5.2998 -20.3008 13.0996 -26.3008v-218.6c0 -11.2998 9 -20.2998 20.2998 -20.2998\n+c8.90039 0 16.7002 5.89941 19.1006 14.2998v1.2002c0.599609 1.2002 0.599609 3 0.599609 4.7998v45.4004c1.2002 0.599609 2.40039 0.599609 3.59961 1.19922c19.7002 8.90039 44.2002 17.3008 67.5 17.3008c32.3008 0 44.8008 -16.7002 71.7002 -16.7002\n+c19.2002 0 37.1006 6.5 53.7998 13.7002c4.2002 1.7998 7.80078 3.59961 7.80078 7.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"linode\" unicode=\"&#xf2b8;\" \n+d=\"M437.4 221.7c0.599609 -2 -8.80078 -66.2998 -9.7002 -72.7998c0 -0.900391 -0.5 -1.7002 -1.10059 -2l-54.5996 -43.7002c-1.09961 -0.900391 -2.59961 -0.900391 -3.7002 0l-20.2998 14l-2.2998 -33.4004c0 -0.899414 -0.200195 -1.7002 -1.10059 -2.2998\n+l-66.8994 -53.4004c-1.10059 -0.899414 -2.90039 -0.899414 -4 0l-28 23.7002l2 -46c0 -0.899414 -0.200195 -1.7002 -1.10059 -2.2998l-83.6992 -66.9004c-0.600586 -0.299805 -1.10059 -0.599609 -1.7002 -0.599609c-0.900391 0.299805 -1.7002 0.299805 -2.2998 0.900391\n+l-65.1006 69.0996c-1.5 1.40039 -15.5 72 -16.8994 79.0996c-0.300781 1.10059 0.5 2.5 1.39941 3.10059l17.4004 10.5996c-3.40039 3.2002 -26.5 23.4004 -27.1006 26.2998l-20.5996 100.301c-0.299805 1.09961 0.299805 2.5 1.7002 3.39941l26.8994 12.9004\n+c-4.59961 3.5 -37.6992 27.5 -38.5996 30.8994l-27.4004 133.101c-0.299805 1.7002 0.600586 3.09961 2 3.7002l123.7 38.5996c0.600586 0 1.40039 0 2.2998 -0.299805l90.6006 -43.7002c0.799805 -0.599609 1.7002 -1.7002 1.7002 -2.59961l5.69922 -132.301\n+c0 -1.19922 -0.599609 -2.2998 -1.69922 -2.89941l-33.7002 -17.4004l36 -24.2998c0.799805 -0.299805 1.39941 -1.40039 1.39941 -2.2998l1.40039 -35.1006l34.5996 21.2002c0.800781 0.600586 2.2002 0.600586 3.10059 0l24 -16l0.899414 31.4004\n+c0 0.899414 0.5 2 1.40039 2.59961l58.9004 36c1.09961 0.600586 2.19922 0.600586 3.09961 0l70 -38.5996c0.5 -0.600586 1.09961 -1.10059 1.40039 -2zM232.6 216.9l-100.6 -57.2002l14 -96.6006l90.5996 61.2002zM224.9 396.9l-120.9 -46.6006l19.7002 -134.8\n+l106.6 55.4004zM44 274.9l73.0996 -57.2002l-19.3994 132.899l-79.7002 49.4004zM74.5996 127.1l64.8008 -60.7998l-13.7002 93.4004l-70 58.2998zM98.9004 9.40039l57.6992 -61.2002l-9.69922 67.3994l-61.7002 60.9004zM163.4 -55.0996l78.1992 62.2998l-3.09961 70\n+l-85.7002 -61.4004zM245.4 60l27.0996 -22.9004l-0.599609 68.3008l-29.4004 22.5996c0 -2.2998 1.2002 -6.2998 -1.09961 -8l-22.3008 -14.9004l24.3008 -20c2.89941 -2.19922 2 -21.6992 2 -25.0996zM339.7 85.4004l4.2002 66.8994l-65.7002 -46.8994l0.599609 -68.6006z\n+M367.4 111.1l5.7998 66.6006l-64.6006 40.5996l-0.599609 -30l41.2002 -27.2002c0.799805 -0.599609 1.39941 -1.69922 1.09961 -2.59961l-2 -34zM422 150.9l8.5 63.3994l-51.0996 -36.5996l-5.7002 -65.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"quora\" unicode=\"&#xf2c4;\" \n+d=\"M440.5 61.2998c1.7998 -18 -7.2002 -93.2998 -89 -93.2998c-49.5 0 -75.5 28.7002 -95.2002 62.2998c-117.7 -32.5996 -249 54.9004 -249 189c0 117 98 196.7 197.7 196.7c101.8 0 198.5 -79.2002 198.4 -196.7c0 -65.5 -30.5 -118.8 -74.7002 -153\n+c14.2002 -21.5996 29 -35.7998 49.5 -35.7998c22.5 0 31.5 17.2998 33 30.7998h29.2998zM297 118.8c11.2998 24.9004 16.7998 58.7002 16.7002 100.5c0 104.2 -32.5 157.7 -108.7 157.7c-75 0 -107.5 -53.5 -107.5 -157.9c0 -103.699 32.5 -156.699 107.5 -156.699\n+c12 0 22.7002 1.19922 32.7002 4.19922c-15.5 30.5 -33.7002 61.3008 -69.2002 61.3008c-6.7998 0 -13.5996 -1 -19.7998 -4l-12.2002 24.2998c14.7002 12.7998 38.5 22.7998 69 22.7998c47.7998 0 72 -23 91.5 -52.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"free-code-camp\" unicode=\"&#xf2c5;\" horiz-adv-x=\"576\" \n+d=\"M69.2998 303.5c-41 -68.5 -36.3994 -163 1 -227c22.2002 -38.2002 49.7002 -52.4004 49.7002 -66.5c0 -6.7998 -6 -13 -12.7998 -13c-19.5 0 -99.2002 75.5 -99.2002 197.8c0 111.5 78 186 97.0996 186c6 0 14.9004 -4.7998 14.9004 -11.0996\n+c0 -12.7002 -28.2998 -28.6006 -50.7002 -66.2002zM265.1 89.7002c-37.1992 13.5996 -65.5 45.8994 -65.2998 86.2002c0 48 57.7002 90.0996 57.7002 136.199c0 16.8008 -10.4004 32.6006 -19.5996 38.2002c-1.90039 1 -4.60059 2.7002 -4.60059 5.10059\n+c0 9.59961 26.1006 2.7998 36.5 -2.2002c33.6006 -15.9004 40.6006 -40.2998 46.4004 -74.1006c1.39941 -7.89941 4.2998 -33.2998 15.8994 -33.2998c7.5 0 12.3008 5.10059 12.3008 12.2998c0 12.6006 -15.4004 31.2002 -7.2002 31.2002\n+c6.09961 0 18.5996 -12.7998 22.5 -16.8994c23.3994 -24.9004 32.0996 -49 32.0996 -82.6006c0 -42.2002 -23.3994 -74.7002 -53.0996 -89.7998c-9.2002 -5.7998 -12.1006 0.900391 -12.1006 1.90039c0 7 29.5 23.5996 29.5 56c0 10.5996 -2.69922 22.5 -8.5 31.3994\n+c-1.69922 2.40039 -7.69922 10.1006 -11.0996 10.1006c-0.700195 0 -0.700195 -0.5 -0.700195 -1.2002c0 -5.7998 3.60059 -11.4004 3.60059 -17.4004c0 -13 -31.9004 -20.2002 -31.9004 6.7998c0 7.10059 0.700195 14.3008 0.700195 21.3008\n+c0 5.09961 -0.200195 6.5 -2.40039 11.0996c-3.39941 6.5 -14.5 19.7998 -22.5 19.7998c-2.2002 0 -2.89941 0 -2.89941 -2.2002c0 -3.39941 7.69922 -7 7.69922 -19.2998c0 -32.0996 -44.1992 -37.8994 -44.1992 -70c0 -14.3994 1.89941 -26.5 10.0996 -38.5996\n+c5.09961 -7.5 10.5996 -11.7998 19.0996 -15.2002c2.10059 -0.700195 4.30078 -0.900391 4.30078 -3.59961c0 -6.40039 -7.80078 -3 -12.3008 -1.2002zM470.4 381c21.3994 0 97.5996 -78.9004 97.5 -198.2c0 -104.899 -73.4004 -185.7 -98.8008 -185.7\n+c-5 0 -13.1992 6.30078 -13.1992 11.4004c0 8.2002 28.2998 34.5996 35.2998 43.5c61 76.7002 64 205.9 -17.6006 291c-5.5 5.7998 -17.5996 16.7002 -17.5996 25.4004c0 6.09961 8.40039 12.5996 14.4004 12.5996zM428.1 57.9004c8.40039 0 11.9004 -7 11.9004 -15.5\n+c0 -8.90039 -2.5 -16.4004 -11.9004 -16.4004h-261.1c-8.5 0 -15.5 7 -15.5 15.5c0 8.90039 6.09961 16.4004 15.5 16.4004h261.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"telegram\" unicode=\"&#xf2c6;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM369.8 270.1c3.60059 16.8008 -6.09961 23.5 -17.2002 19.5l-239.1 -92.1992c-16.4004 -6.40039 -16.0996 -15.5 -2.7998 -19.7002l61.2002 -19.1006l142 89.4004\n+c6.59961 4.40039 12.6992 1.90039 7.69922 -2.5l-114.899 -103.8l-4.40039 -63.1006c6.40039 0 9.2002 2.80078 12.5 6.10059l29.9004 28.7998l62 -45.7002c11.2998 -6.39941 19.3994 -3.09961 22.3994 10.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"bandcamp\" unicode=\"&#xf2d5;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM296.2 113.9l84.7002 156.1h-181l-84.7002 -156.1h181z\" \u002F>\n+    \u003Cglyph glyph-name=\"grav\" unicode=\"&#xf2d6;\" horiz-adv-x=\"512\" \n+d=\"M301.1 236c4.40039 -4.40039 4.40039 -11.9004 0 -16.2998l-9.69922 -9.7002c-4.40039 -4.7002 -11.9004 -4.7002 -16.6006 0l-10.5 10.5c-4.39941 4.7002 -4.39941 11.9004 0 16.5996l9.7002 9.7002c4.40039 4.40039 11.9004 4.40039 16.5996 0zM270.9 255.7\n+c-2.7002 -2.7998 -7.40039 -2.7998 -10.5 0c-2.80078 3 -2.80078 7.7002 0 10.5c3 3 7.69922 3 10.5 0c3 -2.7002 3 -7.5 0 -10.5zM244.9 250.4c2.7998 3 7.5 3 10.5 0c2.7998 -2.7002 2.7998 -7.40039 0 -10.2002c-3 -3 -7.7002 -3 -10.5 0c-3 2.7002 -3 7.39941 0 10.2002\n+zM317.4 263.7c-19.9004 14.3994 -33.8008 43.2002 -11.9004 68.0996c21.5996 24.9004 40.7002 17.2002 59.7998 -0.799805c11.9004 -11.2998 29.2998 -24.9004 17.2002 -48.2002c-12.5 -23.5 -45.0996 -33.2002 -65.0996 -19.0996zM365.1 308.2\n+c-8.89941 10 -23.2998 -6.90039 -15.5 -16.1006c7.40039 -9 32.1006 -2.39941 15.5 16.1006zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM437.8 149.4c2.5 16.0996 -20.2002 16.5996 -25.2002 25.6992\n+c-13.5996 24.1006 -27.6992 36.8008 -54.5 30.4004c11.6006 8 23.5 6.09961 23.5 6.09961c0.300781 6.40039 0 13 -9.39941 24.9004c3.89941 12.5 0.299805 22.4004 0.299805 22.4004c15.5 8.59961 26.7998 24.3994 29.0996 43.1992\n+c3.60059 31 -18.7998 59.2002 -49.7998 62.8008c-22.0996 2.5 -43.7002 -7.7002 -54.2998 -25.7002c-23.2002 -40.1006 1.40039 -70.9004 22.4004 -81.4004c-14.4004 1.40039 -34.3008 11.9004 -40.1006 34.2998c-6.59961 25.7002 2.7998 49.8008 8.90039 61.4004\n+c0 0 -4.40039 5.7998 -8 8.90039c0 0 -13.7998 0 -24.6006 -5.30078c11.9004 15.2002 25.2002 14.4004 25.2002 14.4004c0 6.40039 -0.599609 14.9004 -3.59961 21.5996c-5.40039 11 -23.7998 12.9004 -31.7002 -2.7998c0.0996094 0.200195 0.299805 0.400391 0.400391 0.5\n+c-5 -11.8994 -1.10059 -55.8994 16.8994 -87.2002c-2.5 -1.39941 -9.09961 -6.09961 -13 -10c-21.5996 -9.69922 -56.2002 -60.2998 -56.2002 -60.2998c-28.1992 -10.7998 -77.1992 -50.8994 -70.5996 -79.7002c0.299805 -3 1.40039 -5.5 3 -7.5\n+c-2.7998 -2.19922 -5.5 -5 -8.2998 -8.2998c-11.9004 -13.7998 -5.2998 -35.2002 17.7002 -24.3994c15.7998 7.19922 29.5996 20.1992 36.2998 30.3994c0 0 -5.5 5 -16.2998 4.40039c27.6992 6.59961 34.2998 9.39941 46.1992 9.09961c8 -3.89941 8 34.2998 8 34.2998\n+c0 14.7002 -2.19922 31 -11.0996 41.5c12.5 -12.1992 29.0996 -32.6992 28 -60.5996c-0.799805 -18.2998 -15.2002 -23 -15.2002 -23c-9.09961 -16.5996 -43.2002 -65.9004 -30.3994 -106c0 0 -9.7002 14.9004 -10.2002 22.0996\n+c-17.4004 -19.3994 -46.5 -52.2998 -24.6006 -64.5c26.6006 -14.6992 108.801 88.6006 126.2 142.301c34.6006 20.7998 55.4004 47.2998 63.9004 65c22 -43.5 95.2998 -94.5 101.1 -59z\" \u002F>\n+    \u003Cglyph glyph-name=\"etsy\" unicode=\"&#xf2d7;\" horiz-adv-x=\"384\" \n+d=\"M384 100c-1.75 -10.75 -13.75 -110 -15.5 -132c-117.879 4.29883 -219.895 4.74316 -368.5 0v25.5c45.457 8.94824 60.627 8.01855 61 35.25c1.79297 72.3223 3.52441 244.143 0 322c-1.0293 28.46 -12.1299 26.7646 -61 36v25.5\n+c73.8857 -2.3584 255.933 -8.55078 362.999 3.75c-3.5 -38.25 -7.75 -126.5 -7.75 -126.5h-23.249c-11.0527 42.835 -18.7588 90.5 -54.75 90.5h-137c-10.25 0 -10.75 -3.5 -10.75 -9.75v-163.75c58 -0.5 88.5 2.5 88.5 2.5c29.7695 0.951172 27.5596 8.50195 40.75 65.251\n+h25.75c-4.40723 -101.351 -3.91016 -61.8291 -1.75 -160.25h-25.75c-9.15527 40.0859 -9.06543 61.0449 -39.501 61.5c0 0 -21.5 2 -88 2v-139c0 -26 14.25 -38.25 44.25 -38.25h89.251c63.6357 0 66.5645 24.9961 98.751 99.75h22.249v-0.000976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"imdb\" unicode=\"&#xf2d8;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM21.2998 218.8h-0.299805c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391v-0.400391zM97 128.2v127.8h-33v-127.8h33z\n+M210.2 128.2v127.8h-43l-7.60059 -59.9004c-2.69922 20 -5.39941 40.1006 -8.69922 59.9004h-42.8008v-127.8h29v84.5l12.2002 -84.5h20.6006l11.5996 86.3994v-86.3994h28.7002zM221.6 128.2c86.1006 -0.100586 75 -6 75 82.5c0 8.09961 0.300781 16.7998 -1.39941 24.3994\n+c-4.2998 22.5 -31.4004 20.9004 -49 20.9004h-24.6006v-127.8zM382.5 157.4v36c0 17.2998 -0.799805 30.0996 -22.2002 30.0996c-8.89941 0 -14.8994 -2.7002 -20.8994 -9.2002v41.7002h-31.7002v-127.8h29.7998l1.90039 8.09961\n+c5.69922 -6.7998 11.8994 -9.7998 20.8994 -9.7998c19.7998 0 22.2002 15.2002 22.2002 30.9004zM265 218.1v-49.2998c0 -9.7002 1.90039 -18.7002 -10.2998 -18.3994v83.6992c11.8994 0 10.2998 -6.2998 10.2998 -16zM350.5 192v-32.7002\n+c0 -5.39941 1.59961 -14.3994 -6.2002 -14.3994c-1.59961 0 -3 0.799805 -3.7998 2.39941c-2.2002 5.10059 -1.09961 44.1006 -1.09961 44.7002c0 3.7998 -1.10059 12.7002 4.89941 12.7002c7.2998 0 6.2002 -7.2998 6.2002 -12.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"ravelry\" unicode=\"&#xf2d9;\" horiz-adv-x=\"512\" \n+d=\"M407.4 386.5c72.6992 -37.9004 112 -117.2 103.3 -199.5c-1.7002 -16.7002 -4.40039 -36.2002 -9.7998 -52.2002c-22.2002 -65.7002 -52.9004 -108.6 -123.101 -147.7c-6.39941 -4.39941 -13.2998 -8.59961 -20.2002 -10.7998\n+c-12.5 -4.39941 -26.0996 -5.39941 -40.0996 -3.89941c-5.90039 -0.5 -11.7998 -0.700195 -18 -0.700195c-93.7002 0 -173 64 -196.9 151.399c-0.699219 0 -1.5 0.200195 -2.19922 0.200195c-5.60059 -44.2998 27.0996 -104.1 27.0996 -104.1s2 -3 13.2998 -20.2002\n+c-62.7998 33.2002 -64.5 131.2 -64.5 131.2c-15 5.59961 -67.2002 23.3994 -76.2998 37.8994c0 0 40.9004 -22.3994 76.2002 -27c-0.200195 0.300781 0.5 7.90039 0.5 7.90039c2.2002 30 12.5 53.4004 23.0996 71.4004c6.90039 33.7998 22.1006 64.2998 43.2998 89.8994\n+c3.7002 15.2998 9.60059 33.5 19.9004 52.7002c4.40039 8.40039 8.59961 13.7998 19.9004 19c74.8994 35 148.699 43.9004 224.5 4.5zM138.8 284.8c-7.59961 -11.2998 -13.7002 -23.5996 -18.8994 -36.3994c8.09961 8.59961 14.7998 14.1992 18.1992 16.6992\n+c-0.5 7.40039 0.700195 19.7002 0.700195 19.7002zM107.6 162.9c0.700195 -9.60059 2 -18.9004 4.2002 -28.1006l41.4004 -6.89941c-14.1006 42.0996 -15.7998 90.0996 -15.7998 90.0996c-16.5 -16 -25.4004 -37.9004 -29.8008 -55.0996zM115.5 120.1\n+c21.4004 -69.6992 81 -122.8 154.1 -134.399c-1 0.299805 -1.69922 0.5 -2.69922 1c0 0 -81 47.5 -108.301 124.3c-9.09961 1.5 -28.2998 5.90039 -43.0996 9.09961zM386 3.90039c63 32 106.6 98 106.8 174c0 107.399 -86.5996 194.5 -193 194.5\n+c-49.2998 0 -94.0996 -18.7002 -128.3 -49.5c-5.2002 -10.1006 -8.59961 -22.9004 -11.0996 -39.4004c52.5 44.5996 146 33.5 146 33.5c23.3994 -1 20.5996 -21.7002 20.3994 -28.0996c-85.2002 7.19922 -127 -17.2002 -168.399 -52.4004\n+c0 0 8.09961 -78.7998 26.7998 -110.8c107.8 -4.90039 189.8 53.7002 189.8 53.7002c10.2998 7.39941 19.4004 8.09961 21.4004 -4.7002c1.5 -10.4004 2.19922 -24.4004 -9.60059 -29.7998c-36 -16.8008 -75.5996 -27.3008 -115 -33\n+c-25.5996 -3.7002 -39.7998 -4.60059 -78 -3.90039c36.4004 -84.7002 127.5 -107.8 127.5 -107.8c28.5 -4.7002 50.2002 -1 64.7002 3.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"sellcast\" unicode=\"&#xf2da;\" \n+d=\"M353.4 416c52.0996 0 94.6992 -42.5996 94.6992 -94.5996v-258.801c0 -52 -42.5996 -94.5996 -94.6992 -94.5996h-258.7c-52.1006 0 -94.7002 42.5996 -94.7002 94.7002v258.7c0 52 42.5996 94.5996 94.7002 94.5996h258.7zM303.4 99.5996\n+c27.8994 48.2002 11.1992 110.5 -37.2002 138.5c-18.6006 10.8008 0.0996094 -0.0996094 -18.5 10.7002c-25 14.4004 -46.2002 -23.2998 -21.6006 -37.5c18 -10.2002 0.800781 -0.399414 18.6006 -10.5996c27.5996 -16 37.2002 -51.7998 21.2998 -79.4004\n+c-16 -27.5996 -51.7998 -37.2002 -79.4004 -21.2998c-18.5996 10.7998 0.100586 -0.0996094 -18.5 10.7002c-10.2998 6 -23.5996 2.39941 -29.5 -7.90039l-15.6992 -27.2002c-12.6006 -21.7998 19.3994 -53 42.2998 -13.1992c48.2998 -27.7002 110.3 -11 138.2 37.1992z\n+M325.2 308.4c14.2998 24.7998 -23.4004 46.3994 -37.7002 21.5l-4.7998 -8.40039c-48.2998 27.7002 -110.3 11 -138.2 -37.2002c-27.7998 -48.2998 -11.0996 -110.6 37.0996 -138.399c18.6006 -10.8008 -0.0996094 0.0996094 18.5 -10.7002\n+c25 -14.4004 46.2002 23.2998 21.6006 37.5c-0.100586 0 -18.6006 10.5996 -18.6006 10.5996c-27.5996 16 -37.2998 51.7998 -21.2998 79.4004c16 27.5996 51.7998 37.2002 79.4004 21.2998c18.5996 -10.7998 -0.100586 0.0996094 18.5 -10.7002\n+c10.2002 -5.09961 20 -2.89941 26.5 3.60059c2.7002 2.69922 2 2 19 31.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"superpowers\" unicode=\"&#xf2dd;\" \n+d=\"M448 416l-87.2002 -87c39.7002 -38.7002 61.2002 -92.7002 57.7002 -148.2c-5.40039 -93 -76.9004 -167.3 -168.7 -179.8c-83.2998 -11 -166.5 -22 -249.8 -33l86.7998 86.7998c-39.7998 38.7002 -61.0996 92.7002 -57.7998 148.2c5.7002 93.2998 77 167.5 169 180\n+c83.2002 11 166.7 22 250 33zM368.3 183.7c4.40039 80 -56.7998 146.3 -136.1 151c-78.7002 4.7998 -148.5 -55.2998 -153 -134.5c-4.40039 -80 56.7998 -146.3 136.3 -151c78.7998 -4.7002 148.6 55 152.8 134.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"wpexplorer\" unicode=\"&#xf2de;\" horiz-adv-x=\"512\" \n+d=\"M512 192c0 -141.2 -114.7 -256 -256 -256c-141.2 0 -256 114.7 -256 256s114.7 256 256 256s256 -114.7 256 -256zM480 192c0 123.2 -100.3 224 -224 224c-123.5 0 -224 -100.5 -224 -224s100.5 -224 224 -224s224 100.5 224 224zM160.9 323.4l86.8994 -37.1006\n+l-37.0996 -86.8994l-86.9004 37.0996zM270.9 154.3l46.5996 -94h-14.5996l-50 100l-48.9004 -100h-14l51.0996 106.9l-22.2998 9.39941l6 14l68.6006 -29.0996l-6 -14.2998zM259.1 270.6l68.6006 -29.3994l-29.4004 -68.2998l-68.2998 29.0996zM339.4 227.7\n+l54.5996 -23.1006l-23.4004 -54.2998l-54.2998 23.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"meetup\" unicode=\"&#xf2e0;\" horiz-adv-x=\"512\" \n+d=\"M99 33.7002c1.09961 -5.7002 -2.2998 -11.1006 -8 -12.2998c-5.40039 -1.10059 -10.9004 2.2998 -12 8c-1.09961 5.39941 2.2998 11.0996 7.7002 12.2998c5.39941 1.2002 11.0996 -2.2998 12.2998 -8zM242.1 -37.7002c6.60059 4.60059 15.5 2.7998 19.7002 -3.7002\n+c4.60059 -6.59961 2.90039 -15.3994 -3.39941 -20c-6.60059 -4.59961 -15.4004 -2.89941 -20 3.7002c-4.30078 6.60059 -2.60059 15.4004 3.69922 20zM156.1 424.6c-6.2998 -1.5 -12.5 2.5 -13.8994 9.10059c-1.2002 6.2998 2.7998 12.5996 9.09961 14\n+c6.2998 1.5 12.6006 -2.5 13.7002 -9.10059c1.40039 -6.2998 -2.59961 -12.5996 -8.90039 -14zM34.4004 221.7c10 -7.10059 12.5996 -20.7998 5.69922 -31.2002c-6.89941 -10.2998 -20.5996 -12.7998 -30.5996 -5.7002c-10 6.90039 -12.5996 20.9004 -5.7002 30.9004\n+c6.90039 10.2998 20.6006 12.8994 30.6006 6zM306.4 392.6c-10.3008 -6.2998 -23.7002 -2.89941 -29.7002 7.40039c-6.2998 10.5996 -2.90039 24.2998 7.39941 30.5996c10.3008 6.30078 23.7002 2.90039 30 -7.69922c6 -10.3008 2.90039 -24 -7.69922 -30.3008zM115.3 334.6\n+c-7.5 -5.19922 -18 -3.5 -23.0996 4.30078c-5.10059 7.69922 -3.40039 18.2998 4.2998 23.6992c7.40039 5.10059 18 3.40039 23.0996 -4.2998c5.10059 -7.7002 3.40039 -18.2998 -4.2998 -23.7002zM487.6 178.6c7.40039 1.40039 14.8008 -3.5 16.3008 -10.8994\n+c1.69922 -7.7002 -3.2002 -15.2002 -10.6006 -16.6006c-7.39941 -1.69922 -14.8994 3.2002 -16.2998 10.6006c-1.7002 7.7998 3.2002 15.2002 10.5996 16.8994zM527.3 235.4c1.40039 -5.7002 -2.2998 -11.1006 -7.7002 -12.6006\n+c-5.69922 -1.09961 -11.1992 2.60059 -12.2998 8c-1.09961 5.7002 2.2998 11.5 8 12.6006c5.40039 1.09961 10.9004 -2.30078 12 -8zM447 309.1c8.2998 6 20 3.80078 25.7002 -4.89941c5.7002 -8.60059 3.7002 -20.2998 -4.60059 -26.2998\n+c-8.59961 -5.7002 -20.2998 -3.7002 -26 4.89941c-5.69922 8.60059 -3.69922 20.2998 4.90039 26.2998zM440.7 169.7c26.2998 -43.1006 15.0996 -100 -26.2998 -129.101c-17.4004 -12.2998 -37.1006 -17.6992 -56.9004 -17.0996\n+c-12 -47.0996 -69.4004 -64.5996 -105.1 -32.5996c-1.10059 -0.900391 -2.60059 -1.7002 -3.7002 -2.90039c-39.1006 -27.0996 -92.2998 -17.4004 -119.4 22.2998c-9.7002 14.2998 -14.5996 30.6006 -15.0996 46.9004c-65.4004 10.8994 -90 94 -41.1006 139.7\n+c-28.2998 46.8994 0.600586 107.399 53.4004 114.899c25.0996 66.2002 107.6 97.6006 163.6 54.2002c67.4004 22.2998 136.301 -29.4004 130.9 -101.1c41.0996 -12.6006 52.7998 -66.9004 19.7002 -95.2002zM370.7 95.4004\n+c-3.10059 20.5996 -40.9004 4.59961 -43.1006 27.0996c-3.09961 32 43.7002 101.1 40 128c-3.39941 24 -19.3994 29.0996 -33.3994 29.4004c-13.4004 0.299805 -16.9004 -2 -21.4004 -4.60059c-2.89941 -1.7002 -6.59961 -4.89941 -11.7002 0.299805\n+c-6.2998 6 -11.0996 11.7002 -19.3994 12.9004c-12.2998 2 -17.7002 -2 -26.6006 -9.7002c-3.39941 -2.89941 -12 -12.8994 -20 -9.09961c-3.39941 1.7002 -15.3994 7.7002 -24 11.3994c-16.2998 7.10059 -40 -4.59961 -48.5996 -20\n+c-12.9004 -22.8994 -38 -113.1 -41.7002 -125.1c-8.59961 -26.5996 10.9004 -48.5996 36.9004 -47.0996c11.0996 0.599609 18.2998 4.59961 25.3994 17.3994c4 7.40039 41.7002 107.7 44.6006 112.601c2 3.39941 8.89941 8 14.5996 5.09961\n+c5.7002 -3.09961 6.90039 -9.40039 6 -15.0996c-1.09961 -9.7002 -28 -70.9004 -28.8994 -77.7002c-3.40039 -22.9004 26.8994 -26.6006 38.5996 -4c3.7002 7.09961 45.7002 92.5996 49.4004 98.2998c4.2998 6.2998 7.39941 8.2998 11.6992 8\n+c3.10059 0 8.30078 -0.900391 7.10059 -10.9004c-1.40039 -9.39941 -35.1006 -72.2998 -38.9004 -87.6992c-4.59961 -20.6006 6.60059 -41.4004 24.9004 -50.6006c11.3994 -5.7002 62.5 -15.7002 58.5 11.1006zM376.4 3.09961c10.5996 7.5 24.8994 4.60059 32.2998 -6\n+c7.09961 -10.5996 4.59961 -25.1992 -6 -32.5996c-10.6006 -7.09961 -24.9004 -4.59961 -32 6c-7.2002 10.5996 -4.60059 25.2002 5.7002 32.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"font-awesome-alt\" unicode=\"&#xf35c;\" \n+d=\"M339.3 276.8c5.40039 0 9.5 -3 7.7002 -7.09961v-134.4c0 -4.2002 -3 -6 -7.2002 -7.7998c-15.5996 -7.09961 -33.5 -13.7002 -52 -13.7002c-26.2998 0 -38.2002 16.1006 -69.2998 16.1006c-22.7002 0 -46 -8.30078 -65.7002 -16.7002\n+c-0.599609 -0.600586 -1.7998 -1.2002 -3 -1.2002v-44.2002c0 -1.7998 0 -3 -0.599609 -4.7998v-1.2998c-2.40039 -7.7002 -9.5 -13.7002 -18.5 -13.7002c-10.7002 0 -19.7002 8.90039 -19.7002 19.7002v212.1c-7.7002 6 -12.5 15.5 -12.5 25.7002\n+c0 18 14.2998 32.2998 32.2998 32.2998s32.2998 -14.3994 32.2998 -32.2998c0 -10.7998 -4.69922 -19.7002 -12.5 -25.7002v-17.8994c1.2002 0.599609 3 1.19922 4.80078 1.7998c17.8994 7.09961 39.3994 13.7002 59.6992 13.7002\n+c22.1006 0 39.4004 -5.90039 59.1006 -13.7002c4.09961 -1.7998 8.2998 -2.40039 12.5 -2.40039c22.7002 0 46.5996 15.5 52.5996 15.5zM397.8 416c27.5 0 50.2002 -22.7002 50.2002 -50.2002v-347.6c0 -27.5 -22.7002 -50.2002 -50.2002 -50.2002h-347.6\n+c-27.5 0 -50.2002 22.7002 -50.2002 50.2002v347.6c0 27.5 22.7002 50.2002 50.2002 50.2002h347.6zM412.1 18.2998v347.601c0 7.69922 -6.5 14.2998 -14.2998 14.2998v-0.100586h-347.6c-7.7002 0 -14.2998 -6.5 -14.2998 -14.2998v-347.5\n+c0 -7.7002 6.5 -14.2998 14.2998 -14.2998h347.6c7.7002 0 14.2998 6.5 14.2998 14.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"accessible-icon\" unicode=\"&#xf368;\" \n+d=\"M423.9 192.2l-12.9004 -157.3c-3.2998 -40.7002 -63.9004 -35.1006 -60.5996 4.89941l10 122.5l-41.1006 -2.2998c10.1006 -20.7002 15.7998 -43.9004 15.7998 -68.5c0 -41.2002 -16.0996 -78.7002 -42.2998 -106.5l-39.2998 39.2998\n+c57.9004 63.7002 13.0996 167.2 -74 167.2c-25.9004 0 -49.5 -9.90039 -67.2002 -26l-39.2998 39.2998c22 20.7002 50.0996 35.1006 81.4004 40.2002l75.2998 85.7002l-42.6006 24.7998l-51.5996 -46c-30 -26.7998 -70.5996 18.5 -40.5 45.4004l68 60.6992\n+c9.7998 8.80078 24.0996 10.2002 35.5 3.60059c0 0 139.3 -80.9004 139.5 -81.1006c16.2002 -10.0996 20.7002 -36 6.09961 -52.5996l-58.3994 -66.5l106.1 5.90039c18.5 1.09961 33.6006 -14.4004 32.1006 -32.7002zM359 346.2\n+c-28.0996 0 -50.9004 22.7998 -50.9004 50.8994c0 28.1006 22.8008 50.9004 50.9004 50.9004s50.9004 -22.7998 50.9004 -50.9004c0 -28.0996 -22.8008 -50.8994 -50.9004 -50.8994zM179.6 -8.5c20.8008 0 40.1006 6.40039 56.1006 17.2998l39.7002 -39.7002\n+c-100.7 -78.8994 -251.4 -8.19922 -251.4 122.5c0 36.1006 12.4004 69.4004 33.2002 95.7002l39.7002 -39.7002c-44.7002 -65.5 2.09961 -156.1 82.6992 -156.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"accusoft\" unicode=\"&#xf369;\" horiz-adv-x=\"640\" \n+d=\"M322.1 196c-1.69922 -1.59961 -89.5996 -82.5 -90.1992 -83.2998l-92.6006 -33.7998c-4.7998 -2 -7.59961 -3.7002 -7 -8.90039c0.200195 -1.5 0.600586 -22.5996 1 -27.7002c-0.700195 -0.5 -0.0996094 0 -0.599609 -0.599609c0 0 -113.7 -36.6006 -114.5 -36.6006\n+c-14.1006 -5.09961 -22.7002 -8.2998 -15.7002 1.7002c1.2998 1.7998 234.4 231.601 243.4 240.9c13 13.5 25 15.0996 25 15.0996l51.1992 -65.7998v-1zM482.2 75.9004c-5.7002 6.89941 -232.2 297.1 -239.9 306.6c-13.7002 17.2002 0 16.7998 19.2002 16.9004\n+c9.7002 0.0996094 106.3 0.599609 116.5 0.599609c24.0996 0.0996094 28.7002 -0.599609 38.4004 -12.7998c2.09961 -2.7002 205.1 -245.8 207.199 -248.3c5.5 -6.7002 15.2002 -19.1006 7.2002 -23.4004c-2.39941 -1.2998 -114.6 -47.7002 -117.8 -48.9004\n+c-10.0996 -4 -17.5 -6.7998 -30.7998 9.30078zM634.9 74.2998c6 -1.39941 7.09961 -4.2002 1.69922 -8.2002c-2 -1.39941 -123.699 -76.5996 -125.8 -77.7998c-15.0996 -8.7998 -38 -1.59961 -53.5996 1.7002c-7.10059 1.5 -305.3 68.2998 -308 69.0996\n+c-2.60059 0.900391 -4.40039 1 -4.60059 3.5c-0.299805 4 6 5.60059 11.1006 7.60059c5 1.89941 145.3 52.5996 150.2 54.7002c4.7998 2.09961 11.2998 2.69922 14.3994 2.89941c4.90039 0.299805 59.9004 -8.39941 65.2998 -9.2998l57.1006 -74\n+c9.7998 -11.4004 20.7002 -21.9004 36.7002 -14.5996c2.5 1.19922 117.5 51.5996 117.5 51.5996c13.3994 -2.5 35.6992 -6.90039 38 -7.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"adversal\" unicode=\"&#xf36a;\" horiz-adv-x=\"512\" \n+d=\"M482.1 416c24.5 0 29.9004 -5.59961 29.9004 -30.2002v-388.1c0 -24.5 -5.5 -29.7002 -29.9004 -29.7002h-453.399c-22.9004 0 -28.7002 5.59961 -28.7002 28.9004v390.199c0 23 5.7998 28.9004 28.7002 28.9004h453.399zM178.4 227.7\n+c9.39941 -7.2002 12.3994 -17.1006 11.2998 -27.2998c-1.7998 -19.1006 -75.7998 -11.4004 -114 -30.9004c-27.2002 -13.9004 -42.7002 -41.7002 -39.6006 -71c6.7002 -64.7002 89.6006 -79.7002 147 -43.2998c4.60059 3.2002 8.30078 4.89941 11.9004 1\n+c2.09961 -2.60059 2 -4 3.90039 -6.2002c7.2998 -9.59961 38.1992 -14.0996 46.5996 -7.40039c3.09961 2.80078 4.59961 6.30078 2.7002 10.7002c-13.6006 30.5 -6.60059 63 -9.2998 88.7998c0 69.3008 6.39941 111.7 -34.5 128.5\n+c-41.9004 17.4004 -84.2002 16.6006 -125.301 -4.7998c-16.2998 -9 -53.6992 -52.8994 -24.8994 -64.2998c5.2998 -2.2998 12.7998 -4 22.5 -5.5c8.2002 -1.2002 13.2002 -2.7998 17.5 8.2998c12.0996 32.1006 56.7002 43.6006 84.2002 23.4004zM465.1 5.7002\n+c0 14.2998 -9.7998 9.89941 -16.5996 9.89941c-132.3 0.400391 -264.5 0.400391 -396.8 0c-6.60059 0 -16.7002 4.80078 -17.1006 -9.09961c-0.399414 -15.5 10.4004 -10.7002 17.8008 -10.7002h394.899c6.7002 0 17.7998 -5.2002 17.7998 9.90039zM468.9 346.2\n+c0 0.200195 0 0.299805 0.0996094 0.5c0 9.89941 -3.5 15.0996 -13.5996 14.2998c-3.10059 -0.400391 -6.60059 0 -9.7002 0c-26.1006 0 -26 0 -26 -26.2002v-71c-79.2002 45.6006 -124.3 -6.59961 -136.101 -30.5c-16.3994 -32.8994 -21.7998 -66.5996 -15.6992 -100\n+c16.2998 -92.2998 91 -114.899 144.399 -85.2002c4.60059 2.80078 6.60059 7.5 12.4004 -1.19922c8.59961 -12.7002 23.7002 -5.2002 36.0996 -5.60059c7.40039 0 8.10059 8.2002 8.10059 13.9004v291zM417.4 113.9c-19.5 -47.6006 -72.9004 -43.3008 -90 -5.2002\n+c-15.1006 33.2998 -15.5 68.2002 0.399414 101.5c16.2998 34.0996 59.7002 35.7002 81.5 4.7998c20.6006 -28.7998 14.9004 -84.5996 8.10059 -101.1zM122.6 78.5996c-7.5 1.30078 -33 3.30078 -33.6992 27.8008c-0.400391 13.8994 7.7998 23 19.7998 25.7998\n+c24.3994 5.89941 49.2998 9.89941 73.7002 14.7002c8.89941 2 7.39941 -4.40039 7.7998 -9.5c1.39941 -33 -26.1006 -59.2002 -67.6006 -58.8008z\" \u002F>\n+    \u003Cglyph glyph-name=\"affiliatetheme\" unicode=\"&#xf36b;\" horiz-adv-x=\"512\" \n+d=\"M159.7 210.6c-51.2998 -70.8994 -116.601 -110.8 -145.7 -89.1992c-29.2002 21.6992 -11.2002 96.5996 40.2002 167.5c51.2998 70.8994 116.6 110.8 145.7 89.1992c29.0996 -21.5996 11.0996 -96.5996 -40.2002 -167.5zM510.9 267.9\n+c0.699219 -8.2002 1.09961 -16.5 1 -25c0 -151.801 -121.601 -274.9 -271.601 -274.9c-82.8994 0 -157.2 37.5996 -207 96.9004c71.2998 19.3994 130.5 68.3994 164.101 133.199c7.69922 -32.5996 24 -58.5996 49 -73.7998c72.5996 -44.0996 190.699 20.2002 264.5 143.601z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"algolia\" unicode=\"&#xf36c;\" \n+d=\"M229.3 265.4c49.2002 0 89.2002 -39.9004 89.2002 -89.2002s-39.9004 -89.2002 -89.2002 -89.2002s-89.2002 39.9004 -89.2002 89.2002s39.9004 89.2002 89.2002 89.2002zM292 208.8c1.2998 0.700195 1.7998 2.40039 1.09961 3.7002\n+c-12.1992 21.4004 -34.8994 36.0996 -61.0996 37.0996c-1.40039 0.100586 -2.7002 -1.09961 -2.7002 -2.59961v-66.5c0 -1.90039 2 -3.2002 3.7998 -2.2998zM389.1 416c32.5 0 58.9004 -26.4004 58.8008 -58.9004v-330.199c0 -32.5 -26.3008 -58.9004 -58.9004 -58.9004\n+h-330.1c-32.5 0 -58.9004 26.4004 -58.9004 59v330.1c0 32.5 26.4004 58.9004 58.9004 58.9004h330.199zM186.5 331.3h0.0996094v-15.7998c0 -1.7002 1.7002 -3 3.40039 -2.5c12.7002 3.7002 25.9004 5.5 39.4004 5.5c13 0 25.7998 -1.7002 38.0996 -5.09961\n+c1.59961 -0.5 3.2998 0.699219 3.2998 2.5v15.3994c0 10.7998 -8.7002 19.5 -19.5 19.5h-45.2998c-10.7998 0 -19.5 -8.7002 -19.5 -19.5zM102.1 294.3c-7.59961 -7.59961 -7.59961 -19.8994 0 -27.3994l7.7002 -7.7002c1.10059 -1.2002 3 -1 4 0.299805\n+c4.40039 6.09961 9.40039 12 14.7998 17.4004c5.5 5.5 11.4004 10.3994 17.6006 14.8994c1.2998 1 1.39941 2.90039 0.299805 4l-7.7002 7.7002c-7.59961 7.59961 -19.8994 7.59961 -27.5 0zM229.3 49.5c69.9004 0 126.601 56.7998 126.601 126.6\n+c0 70 -56.6006 126.601 -126.601 126.601c-69.8994 0 -126.6 -56.7002 -126.6 -126.601c0 -69.8994 56.5996 -126.6 126.6 -126.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"amilia\" unicode=\"&#xf36d;\" \n+d=\"M240.1 416c134.101 0 191.9 -55.7002 192 -136v-296.6c0 -3 -1 -8.10059 -5.09961 -9.10059c-4 -1 -57.2998 -0.700195 -66.5 -0.700195s-56.7998 1 -59.9004 2c-4 0.900391 -6.09961 6.10059 -6.09961 9.10059v25.3994\n+c-39.5996 -21.3994 -105.5 -42.0996 -153.3 -42.0996c-109.7 0 -124.9 85.7002 -124.9 104s-5.09961 95.5 30.4004 111.8c31.5 13.2002 156.3 36.5 243.7 47.7998v38.5c0 44.7002 -1 73.1006 -58.9004 73.1006c-55.7998 0 -119.8 -25.4004 -152.3 -47.7002\n+c-6.10059 -4.09961 -16.2002 -4.09961 -20.2998 6.09961c-5.10059 12.2002 -9.10059 34.5 -10.2002 39.6006c-1.90039 10.2002 2.09961 16.2998 7.2002 19.3994c52.6992 38.5 122.3 55.4004 184.199 55.4004zM290.3 68v106.7c-44.7002 -4.10059 -95.5 -20.2998 -119.8 -33.5\n+c-21.2998 -10.2002 -18.2998 -40.7002 -18.2998 -52.9004c0.0996094 -11.2002 6.2002 -44.7002 59 -44.7002c30.3994 0 57.7002 11.2002 79.0996 24.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"angrycreative\" unicode=\"&#xf36e;\" horiz-adv-x=\"640\" \n+d=\"M640 209.8l-3.2002 -28.2002l-34.5 -2.2998l-2 -18.0996l34.5 2.2998l-3.2002 -28.2002l-34.3994 -2.2002l-2.2998 -20.0996l34.3994 2.2002l-3 -26.1006l-64.7002 -4.09961l12.7002 113.2l-47.2998 -115.4l-31.9004 -2l-23.7998 117.8l30.2998 2l13.6006 -79.3994\n+l31.7002 82.3994zM426.8 76.5l12.7998 120l28.4004 1.90039l-12.9004 -120.101zM162 59.9004l-19.4004 36l-3.5 -37.4004l-28.1992 -1.7002l2.69922 29.1006c-11 -18 -32 -34.3008 -56.8994 -35.8008c-32.7998 -2 -59.7002 20.9004 -56.4004 58.2002\n+c2.60059 29.2998 26.7002 62.7998 67.5 65.4004c37.7002 2.39941 47.6006 -23.2002 51.2998 -28.7998l2.80078 30.7998l38.8994 2.5c20.1006 1.2998 38.7002 -3.7002 42.5 -23.7002l2.60059 26.5996l64.7998 4.2002l-2.7002 -27.8994l-36.4004 -2.40039l-1.69922 -17.9004\n+l36.3994 2.30078l-2.7002 -27.9004l-36.3994 -2.2998l-1.90039 -19.9004l36.2998 2.2998l-2.09961 -20.7998l55 117.2l23.7998 1.59961l32.1006 -110.6l8.89941 85.5996l-22.2998 -1.39941l2.90039 27.8994l75 4.90039l-3 -28l-24.3008 -1.59961l-9.69922 -91.9004\n+l-58 -3.7002l-4.30078 15.6006l-39.3994 -2.5l-8 -16.3008zM117.7 130.1l-26.4004 -1.69922c-6.7002 12.3994 -14.3994 16.5996 -26.2998 15.7998c-19 -1.2002 -33.2998 -17.5 -34.5996 -33.2998c-1.40039 -16 7.2998 -32.5 28.6992 -31.2002\n+c12.8008 0.799805 21.3008 8.59961 28.9004 18.8994l27 1.7002zM173.8 137.8c1.2002 12.9004 -7.59961 13.6006 -26.0996 12.4004l-2.7002 -28.5c14.2002 0.899414 27.5 2.09961 28.7998 16.0996zM194.9 67l5.7998 60c-5 -13.5 -14.7002 -21.0996 -27.9004 -26.5996z\n+M330.3 112l-7.89941 37.7998l-15.8008 -39.2998zM160.2 186.6l-4.2998 17.5l-39.6006 -2.59961l-8.09961 -18.2002l-31.9004 -2.09961l57 121.899l23.9004 1.60059l30.7002 -102l9.89941 104.7l27 1.7998l37.7998 -63.6006l6.5 66.6006l28.5 1.89941l-4 -41.1992\n+c7.40039 13.5 22.9004 44.6992 63.6006 47.5c40.5 2.7998 52.3994 -29.3008 53.3994 -30.3008l3.30078 32l39.2998 2.7002c12.7002 0.900391 27.7998 -0.299805 36.2998 -9.7002l-4.40039 11.9004l32.2002 2.2002l12.9004 -43.2002l23 45.7002l31 2.2002l-43.6006 -78.4004\n+l-4.7998 -44.2998l-28.3994 -1.90039l4.7998 44.2998l-15.7998 43c1 -22.2998 -9.2002 -40.0996 -32 -49.5996l25.1992 -38.7998l-36.3994 -2.40039l-19.2002 36.7998l-4 -38.2998l-28.4004 -1.89941l3.30078 31.5c-6.7002 -9.30078 -19.7002 -35.4004 -59.6006 -38\n+c-26.2002 -1.7002 -45.5996 10.2998 -55.3994 39.1992l-4 -40.2998l-25 -1.59961l-37.6006 63.2998l-6.2998 -66.2002zM436.8 268.7c10.2002 0.700195 17.5 2.09961 21.6006 4.2998c4.5 2.40039 7 6.40039 7.59961 12.0996\n+c0.599609 5.30078 -0.599609 8.80078 -3.40039 10.4004c-3.59961 2.09961 -10.5996 2.7998 -22.8994 2zM327.7 234c5.59961 -5.90039 12.7002 -8.5 21.2998 -7.90039c4.7002 0.300781 9.09961 1.80078 13.2998 4.10059c5.5 3 10.6006 8 15.1006 14.2998l-34.2002 -2.2998\n+l2.39941 23.8994l63.1006 4.30078l1.2002 12l-31.2002 -2.10059c-4.10059 3.7002 -7.7998 6.60059 -11.1006 8.10059c-4 1.69922 -8.09961 2.7998 -12.1992 2.5c-8 -0.5 -15.3008 -3.60059 -22 -9.2002c-7.7002 -6.40039 -12 -14.5 -12.9004 -24.4004\n+c-1.09961 -9.59961 1.40039 -17.2998 7.2002 -23.2998zM126.4 225.8l23.7998 1.60059l-8.2998 37.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"app-store\" unicode=\"&#xf36f;\" horiz-adv-x=\"512\" \n+d=\"M255.9 327.1l9.09961 15.7002c5.59961 9.7998 18.0996 13.1006 27.9004 7.5c9.7998 -5.59961 13.0996 -18.0996 7.5 -27.8994l-87.5 -151.5h63.2998c20.5 0 32 -24.1006 23.0996 -40.8008h-185.5c-11.2998 0 -20.3994 9.10059 -20.3994 20.4004\n+s9.09961 20.4004 20.3994 20.4004h52l66.6006 115.399l-20.8008 36.1006c-5.59961 9.7998 -2.2998 22.1992 7.5 27.8994c9.80078 5.60059 22.2002 2.2998 27.9004 -7.5zM177.2 109.1l-19.6006 -34c-5.59961 -9.7998 -18.0996 -13.0996 -27.8994 -7.5\n+c-9.7998 5.60059 -13.1006 18.1006 -7.5 27.9004l14.5996 25.2002c16.4004 5.09961 29.7998 1.2002 40.4004 -11.6006zM346.1 170.8h53.1006c11.2998 0 20.3994 -9.09961 20.3994 -20.3994c0 -11.3008 -9.09961 -20.4004 -20.3994 -20.4004h-29.5l19.8994 -34.5\n+c5.60059 -9.7998 2.30078 -22.2002 -7.5 -27.9004c-9.7998 -5.59961 -22.1992 -2.2998 -27.8994 7.5c-33.5 58.1006 -58.7002 101.601 -75.4004 130.601c-17.0996 29.5 -4.89941 59.0996 7.2002 69.0996c13.4004 -23 33.4004 -57.7002 60.0996 -104zM256 440\n+c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM472 192c0 119.9 -97.2998 216 -216 216c-119.9 0 -216 -97.2998 -216 -216c0 -119.9 97.2998 -216 216 -216c119.9 0 216 97.2998 216 216z\" \u002F>\n+    \u003Cglyph glyph-name=\"app-store-ios\" unicode=\"&#xf370;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM127 63.5l19.2998 33.2998c-10.2998 12.5 -23.5 16.2998 -39.5996 11.4004l-14.2998 -24.7002\n+c-5.5 -9.5 -2.30078 -21.7998 7.2998 -27.2998c9.5 -5.5 21.7998 -2.2998 27.2998 7.2998zM265.9 117.4c8.7998 16.2998 -2.5 40 -22.7002 40h-62.1006l85.8008 148.6c5.5 9.5 2.2998 21.7998 -7.30078 27.2998c-9.5 5.5 -21.7998 2.2998 -27.2998 -7.2998\n+l-8.89941 -15.4004l-8.90039 15.4004c-5.5 9.5 -17.7002 12.7998 -27.2998 7.2998c-9.5 -5.5 -12.7998 -17.7002 -7.2998 -27.2998l20.5 -35.4004l-65.4004 -113.199h-51c-11 0 -20 -9 -20 -20s9 -20 20 -20h181.9zM364 117.4c11 0 20 8.89941 20 20c0 11 -9 20 -20 20h-52\n+c-26.2002 45.2998 -45.7998 79.2998 -58.9004 102c-11.8994 -9.80078 -23.7998 -38.8008 -7.09961 -67.8008c16.5 -28.3994 41.0996 -71.1992 74 -128.1c5.5 -9.5 17.7002 -12.7998 27.2998 -7.2998c9.5 5.5 12.7998 17.7002 7.2998 27.2998l-19.5996 33.9004h29z\" \u002F>\n+    \u003Cglyph glyph-name=\"apper\" unicode=\"&#xf371;\" horiz-adv-x=\"640\" \n+d=\"M42.0996 208.9c22.2002 0 29 -2.80078 33.5 -14.6006h0.800781v22.9004c0 11.2998 -4.80078 15.3994 -17.9004 15.3994c-11.2998 0 -14.4004 -2.5 -15.0996 -12.7998h-38.6006c0.299805 13.9004 1.5 19.1006 5.7998 24.4004\n+c7.30078 8.7998 18.9004 11.7998 46.1006 11.7998c33 0 47.0996 -5 53.8994 -18.9004c2 -4.2998 4 -15.5996 4 -23.6992v-76.3008h-38.2998l1.2998 19.1006h-1c-5.2998 -15.6006 -13.5996 -20.4004 -35.5 -20.4004c-30.2998 0 -41.0996 10.1006 -41.0996 37.2998\n+c0 25.2002 12.2998 35.8008 42.0996 35.8008zM59.2002 160.8c13.0996 0 16.8994 3 16.8994 13.4004c0 9.09961 -4.2998 11.5996 -19.5996 11.5996c-13.0996 0 -17.9004 -3 -17.9004 -12.0996c-0.0996094 -10.4004 3.7002 -12.9004 20.6006 -12.9004zM137 255.7h38.2998\n+l-1.5 -20.6006h0.799805c9.10059 17.1006 15.9004 20.9004 37.5 20.9004c14.4004 0 24.7002 -3 31.5 -9.09961c9.80078 -8.60059 12.8008 -20.4004 12.8008 -48.1006c0 -30 -3 -43.0996 -12.1006 -52.8994c-6.7998 -7.30078 -16.3994 -10.1006 -33.2002 -10.1006\n+c-20.3994 0 -29.1992 5.5 -33.7998 21.2002h-0.799805v-70.2998h-39.5v169zM217.9 195c0 27.5 -3.30078 32.5 -20.7002 32.5c-16.9004 0 -20.7002 -5 -20.7002 -28.7002c0 -28 3.5 -33.5 21.2002 -33.5c16.3994 0 20.2002 5.60059 20.2002 29.7002zM275.8 255.7h38.2998\n+l-1.5 -20.6006h0.800781c9.09961 17.1006 15.8994 20.9004 37.5 20.9004c14.3994 0 24.6992 -3 31.5 -9.09961c9.7998 -8.60059 12.7998 -20.4004 12.7998 -48.1006c0 -30 -3 -43.0996 -12.1006 -52.8994c-6.7998 -7.30078 -16.3994 -10.1006 -33.2998 -10.1006\n+c-20.3994 0 -29.2002 5.5 -33.7998 21.2002h-0.799805v-70.2998h-39.5v169h0.0996094zM356.7 195c0 27.5 -3.2998 32.5 -20.7002 32.5c-16.9004 0 -20.7002 -5 -20.7002 -28.7002c0 -28 3.5 -33.5 21.2002 -33.5c16.4004 0 20.2002 5.60059 20.2002 29.7002zM410.5 198.8\n+c0 25.4004 3.2998 37.7998 12.2998 45.7998c8.7998 8.10059 22.2002 11.3008 45.1006 11.3008c42.7998 0 55.6992 -12.8008 55.6992 -55.7002v-11.1006h-75.2998c-0.299805 -2 -0.299805 -4 -0.299805 -4.7998c0 -16.8994 4.5 -21.8994 20.0996 -21.8994\n+c13.9004 0 17.9004 3 17.9004 13.8994h37.5v-2.2998c0 -9.7998 -2.5 -18.9004 -6.7998 -24.7002c-7.2998 -9.7998 -19.6006 -13.5996 -44.2998 -13.5996c-27.5 0 -41.6006 3.2998 -50.6006 12.2998c-8.5 8.5 -11.2998 21.2998 -11.2998 50.7998zM486.9 210.4\n+c-0.300781 1.7998 -0.300781 3.2998 -0.300781 3.7998c0 12.2998 -3.2998 14.5996 -19.5996 14.5996c-14.4004 0 -17.0996 -3 -18.0996 -15.0996l-0.300781 -3.2998h38.3008zM542.5 255.7h38.2998l-1.7998 -19.9004h0.700195\n+c6.7998 14.9004 14.3994 20.2002 29.7002 20.2002c10.7998 0 19.0996 -3.2998 23.3994 -9.2998c5.2998 -7.2998 6.7998 -14.4004 6.7998 -34c0 -1.5 0 -5 0.200195 -9.2998h-35c0.299805 1.7998 0.299805 3.2998 0.299805 4c0 15.3994 -2 19.3994 -10.2998 19.3994\n+c-6.2998 0 -10.7998 -3.2998 -13.0996 -9.2998c-1 -3 -1 -4.2998 -1 -12.2998v-68h-38.2998v118.5h0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"asymmetrik\" unicode=\"&#xf372;\" horiz-adv-x=\"576\" \n+d=\"M517.5 138.8c-13.9004 -14.2998 -30.4004 -27.7002 -48.9004 -39.7998l73.4004 -110.4h-101.6l-45.9004 71.8008c-17.5996 -7.2002 -35.9004 -13.4004 -54.5 -18.7002l32.5996 -53.1006h-135.5l22.8008 37.1006c-23.3008 -2.7002 -46.4004 -3.7002 -68.6006 -2.7002\n+l-22 -34.4004h-101.6l34.5 51.7002c-45 17.9004 -68.9004 47.9004 -68.4004 83c0.299805 25.7998 14 54.2998 41.7002 82.9004c38.9004 40 96.5 72.5996 161.6 92.8994c-22.2998 -8.09961 -42 -18.5 -62 -30.6992c-31.1992 -16.2002 -58.6992 -35.9004 -79.5 -58.1006\n+c-57.3994 -61 -46.5 -121.8 19.1006 -151.2l190.2 285.5l150.899 -226.399c13 9.5 24.7998 19.7998 35 30.5996c98 104.2 53.7002 207.9 -98.7998 231.7c-68.2998 10.5996 -146.8 5.7002 -221.3 -14.7998c-60.1006 -10 -118.7 -31.7002 -170.7 -58.2002\n+c118.1 66.9004 277.9 102.1 406.6 82.4004c110 -16.8008 170.2 -69.5 169.4 -135c-0.400391 -36.1006 -19.7002 -76.1006 -58.5 -116.101zM329.9 58.2998c18.3994 5.2998 36.5 11.7998 53.6992 19.2002l-78.6992 123l-101.9 -159.3\n+c22.5 -0.700195 45.7998 0.899414 69.2002 4.39941l32.7002 53.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"audible\" unicode=\"&#xf373;\" horiz-adv-x=\"640\" \n+d=\"M640 248.1v-54l-320 -200l-320 199.9v54l320 -200zM445.5 176.1c-70.7998 94.4004 -200.5 110.7 -290.2 36.3008c-2.59961 -2.2002 -5.2002 -4.40039 -7.7002 -6.7002h-0.299805c37.1006 55.7002 100.601 92.3994 172.601 92.3994s135.5 -36.7998 172.699 -92.5996z\n+M225.4 157.3c21 29.6006 55.5 49 94.3994 49c39.2002 0 73.9004 -19.5996 94.7998 -49.5l-45.3994 -28.3994c-21.2002 29.1992 -52 47.5996 -86.4004 47.5996c-20.8994 0 -40.5 -6.7998 -57.3994 -18.7002zM103.6 286.9c-11.5 -9.10059 -24.2998 -22.1006 -34.1992 -32.6006\n+c53.8994 82.1006 147 135.601 250.5 135.601c104.899 0 197.199 -54 250.699 -135.7l-48.7998 -30.4004l-0.700195 1c-99.2998 138.5 -285.699 166.4 -417.5 62.1006zM570.6 254.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"avianex\" unicode=\"&#xf374;\" horiz-adv-x=\"512\" \n+d=\"M453.1 416c39 0 64.8008 -31.2002 57.8008 -69.7998l-56.7002 -308.5c-7.10059 -38.5 -44.4004 -69.7002 -83.2998 -69.7002h-312c-39 0 -64.8008 31.2002 -57.7002 69.7002l56.5996 308.6c7.10059 38.5 44.4004 69.7002 83.2998 69.7002h312zM394.9 68.7002\n+l6.2998 7.89941l-94.9004 119.4l-4.5 7.2998c19.7998 14.2002 33.5 24.2998 35.2998 25.6006c7.90039 6.59961 6.30078 20.7998 -2.69922 31.2998c-9.2002 10.7998 -23 14.3994 -30.7002 7.89941c0 0 -14.4004 -13.5996 -33.7998 -32.3994l-4.90039 4.5l-103.1 112.399\n+l-8.90039 -4.7998l-18.7998 -28.8994l68.7998 -99.8008l20.5 -29.5996c-12 -12.2998 -23.5 -24.4004 -32.7998 -34.9004l-58 31.1006l-15.7002 -15.4004l52.4004 -48.0996l40.5996 -61l17.9004 12.7002l-22.1006 64.1992c12.5 7.60059 27 17.1006 41.7002 27.1006\n+l115.4 -110z\" \u002F>\n+    \u003Cglyph glyph-name=\"aws\" unicode=\"&#xf375;\" horiz-adv-x=\"640\" \n+d=\"M180.41 244.99c-0.719727 -22.6504 10.5996 -32.6807 10.8799 -39.0498c-0.238281 -2.31543 -2.0752 -5.12402 -4.09961 -6.27051l-12.8008 -8.95996c-1.39941 -0.981445 -3.92188 -1.8418 -5.62988 -1.91992c-0.429688 0.0195312 -8.18945 -1.83008 -20.4795 25.6104\n+c-13.0283 -16.2627 -40.5127 -29.4609 -61.3496 -29.4609c-0.347656 0 -0.913086 0.00488281 -1.26074 0.0107422c-16.2803 -0.890625 -60.4004 9.24023 -58.1299 56.21c-1.58984 38.2803 34.0596 62.0596 70.9297 60.0498\n+c7.10059 -0.0195312 21.6006 -0.370117 46.9902 -6.26953v15.6191c2.69043 26.46 -14.7002 46.9902 -44.8096 43.9102c-2.40039 -0.00976562 -19.4004 0.5 -45.8408 -10.1094c-7.35938 -3.37988 -8.2998 -2.82031 -10.75 -2.82031\n+c-7.40918 0 -4.35938 21.4795 -2.93945 24.2002c5.20996 6.39941 35.8604 18.3496 65.9395 18.1797c1.86523 0.165039 4.89844 0.298828 6.77148 0.298828c15.2451 0 37.1611 -7.875 48.9189 -17.5791c9.87305 -11.0439 17.8867 -32.0303 17.8867 -46.8438\n+c0 -1.52539 -0.0966797 -3.99609 -0.216797 -5.51562zM93.9902 212.6c32.4297 0.470703 46.1602 19.9707 49.29 30.4707c2.45996 10.0498 2.0498 16.4102 2.0498 27.3994c-9.66992 2.32031 -23.5898 4.85059 -39.5605 4.87012\n+c-15.1494 1.14062 -42.8193 -5.62988 -41.7393 -32.2598c-1.24023 -16.79 11.1201 -31.4004 29.96 -30.4805zM264.91 189.55c-7.86035 -0.719727 -11.5205 4.86035 -12.6797 10.3701l-49.8008 164.65c-0.969727 2.7793 -1.60938 5.64941 -1.91992 8.58008\n+c-0.0283203 0.189453 -0.0517578 0.5 -0.0517578 0.692383c0 2.18555 1.75195 4.22656 3.91211 4.55762h22.25c8.78027 0.879883 11.6396 -6.03027 12.5498 -10.3701l35.7197 -140.83l33.1602 140.83c0.530273 3.21973 2.94043 11.0693 12.7998 10.2393h17.1602\n+c2.16992 0.180664 11.1104 0.5 12.6807 -10.3691l33.4199 -142.631l36.8701 142.631c0.479492 2.17969 2.71973 11.3691 12.6797 10.3691h19.7197c0.850586 0.130859 6.15039 0.810547 5.25 -8.5791c-0.429688 -1.85059 3.41016 10.6592 -52.75 -169.9\n+c-1.14941 -5.50977 -4.82031 -11.0898 -12.6797 -10.3701h-18.6904c-10.9395 -1.15039 -12.5098 9.66016 -12.6797 10.75l-33.1602 137.13l-32.7803 -136.99c-0.15918 -1.08984 -1.72949 -11.8994 -12.6797 -10.75h-18.2998v-0.00976562zM538.39 183.92\n+c-5.87988 -0.00976562 -33.9199 0.299805 -57.3594 12.29c-4.31152 1.8252 -7.81055 7.10645 -7.81055 11.7891v0.121094v10.75c0 8.4502 6.2002 6.89941 8.83008 5.88965c10.04 -4.05957 16.4805 -7.13965 28.8105 -9.59961\n+c36.6494 -7.53027 52.7695 2.2998 56.7197 4.47949c13.1504 7.81055 14.1895 25.6807 5.25 34.9502c-10.4805 8.79004 -15.4805 9.12012 -53.1299 21c-4.64062 1.29004 -43.7002 13.6104 -43.79 52.3604c-0.610352 28.2402 25.0498 56.1797 69.5195 55.9502\n+c12.6699 0.00976562 46.4307 -4.13086 55.5703 -15.6201c1.34961 -2.08984 2.01953 -4.5498 1.91992 -7.04004v-10.1104c0 -4.43945 -1.62012 -6.66016 -4.87012 -6.66016c-7.70996 0.860352 -21.3896 11.1699 -49.1602 10.75\n+c-6.88965 0.360352 -39.8896 -0.910156 -38.4092 -24.9697c-0.430664 -18.96 26.6094 -26.0703 29.6992 -26.8896c36.46 -10.9707 48.6504 -12.79 63.1201 -29.5801c17.1406 -22.25 7.90039 -48.2998 4.35059 -55.4404\n+c-19.0801 -37.4902 -68.4199 -34.4395 -69.2607 -34.4199zM578.59 79.0596c-70.0303 -51.7197 -171.689 -79.25 -258.49 -79.25c-0.853516 -0.00488281 -2.23926 -0.00976562 -3.09277 -0.00976562c-99.5195 0 -240.271 54.0918 -314.177 120.74\n+c-6.53027 5.88965 -0.770508 13.96 7.16992 9.46973c81.1748 -46.4336 222.955 -84.1201 316.473 -84.1201h0.407227c69.4072 0.373047 177.64 22.5713 241.59 49.5508c11.7803 5 21.7705 -7.80078 10.1201 -16.3809zM607.78 112.35\n+c-8.95996 11.5205 -59.2803 5.38086 -81.8105 2.69043c-6.79004 -0.770508 -7.93945 5.12012 -1.79004 9.46973c40.0703 28.1699 105.88 20.1006 113.44 10.6299c7.5498 -9.46973 -2.0498 -75.4092 -39.5605 -106.909c-5.75977 -4.87012 -11.2695 -2.30078 -8.70996 4.09961\n+c8.44043 21.25 27.3906 68.4902 18.4307 80.0195z\" \u002F>\n+    \u003Cglyph glyph-name=\"bimobject\" unicode=\"&#xf378;\" \n+d=\"M416 416c17.5996 0 32 -14.4004 32 -32v-384c0 -17.5996 -14.4004 -32 -32 -32h-384c-17.5996 0 -32 14.4004 -32 32v384c0 17.5996 14.4004 32 32 32h384zM352 158.6h-0.0996094v35c0 49.4004 -11.4004 82.5 -103.801 82.5h-17.2998\n+c-30 0 -65.0996 -8.2998 -69.7002 -38.7998h-1.09961v74.7002h-64v-232h64v34.7998h0.900391c8 -23.8994 26.2998 -38.7998 70.3994 -38.7998h16.9004c92.3994 0 103.8 33.2002 103.8 82.5996zM288 187.5v-22.9004c0 -21.6992 -3.40039 -33.7998 -38.4004 -33.7998h-45.2998\n+c-28.8994 0 -44.0996 6.5 -44.0996 35.7002v19c0 29.2998 15.2002 35.7002 44.0996 35.7002h45.2998c35 0.200195 38.4004 -12 38.4004 -33.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"bitcoin\" unicode=\"&#xf379;\" horiz-adv-x=\"512\" \n+d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM362.349 227.33c4.9375 32.999 -20.1904 50.7393 -54.5498 62.5732l11.1465 44.7021l-27.2129 6.78027l-10.8516 -43.5234\n+c-7.1543 1.78223 -14.502 3.46387 -21.8027 5.12988l10.9287 43.8096l-27.1982 6.78125l-11.1523 -44.6855c-5.92188 1.34863 -11.7354 2.68164 -17.377 4.08398l0.0302734 0.139648l-37.5293 9.37012l-7.23926 -29.0625s20.1914 -4.62695 19.7646 -4.91309\n+c11.0225 -2.75098 13.0146 -10.0439 12.6807 -15.8242l-12.6963 -50.9258c0.759766 -0.193359 1.74414 -0.472656 2.8291 -0.90625c-0.907227 0.224609 -1.87598 0.472656 -2.87598 0.712891l-17.7959 -71.3379c-1.34961 -3.34863 -4.76758 -8.37012 -12.4717 -6.46484\n+c0.271484 -0.394531 -19.7793 4.9375 -19.7793 4.9375l-13.5107 -31.1475l35.4141 -8.82617c6.58887 -1.65137 13.0449 -3.37988 19.4004 -5.00684l-11.2617 -45.2129l27.1816 -6.78027l11.1533 44.7324c5.96875 -1.61719 15.6846 -4.13867 21.6865 -5.62695\n+l-11.1152 -44.5225l27.2139 -6.78125l11.2617 45.1279c46.4043 -8.78125 81.2988 -5.23926 95.9863 36.7266c11.8359 33.79 -0.589844 53.2812 -25.0049 65.9912c17.7803 4.09766 31.1748 15.792 34.7471 39.9492zM300.172 140.151\n+c-8.41016 -33.79 -65.3076 -15.5234 -83.7549 -10.9434l14.9443 59.8994c18.4453 -4.60352 77.5996 -13.7178 68.8105 -48.9561zM308.589 227.818c-7.67285 -30.7363 -55.0312 -15.1201 -70.3926 -11.292l13.5479 54.3262\n+c15.3633 -3.82715 64.8359 -10.9727 56.8447 -43.0342z\" \u002F>\n+    \u003Cglyph glyph-name=\"bity\" unicode=\"&#xf37a;\" horiz-adv-x=\"496\" \n+d=\"M78.4004 380.8c95.3994 89.2002 246.1 91.2002 343.1 -3.7998c14.2998 -14.0996 -6.40039 -37.0996 -22.4004 -21.5c-84.7998 82.4004 -215.8 80.2998 -298.899 3.2002c-16.2998 -15.1006 -36.5 8.2998 -21.7998 22.0996zM177.3 -37.7998\n+c-128.7 38.2998 -201.899 170.7 -169.8 298.1c5.2998 21 35.2002 12.5 30.2002 -7.09961c-28.2998 -111.3 35.2998 -227.101 147.5 -261c21.3994 -6.40039 11.3994 -35.7002 -7.90039 -30zM325.4 -35.7998c-19.2002 -6.2998 -30 22.7002 -8.80078 29.7002\n+c106.101 35.5 167.4 145.699 143.2 253.399c-4.89941 21.7002 25.5 27.6006 30 7.90039c28.5 -124.101 -42.5 -250.8 -164.399 -291zM262.5 43.2002c0 -8.2002 -6.59961 -14.7998 -14.7998 -14.7998s-14.7998 6.59961 -14.7998 14.7998l0.199219 71.7998\n+c0 8.09961 6.60059 14.7998 14.8008 14.7998c8.19922 0 14.7998 -6.59961 14.7998 -14.7998zM333.5 312.2c0 21.7998 32.5 19.5996 32.5 0v-71.6006c0 -69.2998 -60.7002 -90.8994 -118 -90.0996c-57.2998 -0.799805 -118 20.7998 -118 90.0996v71.6006\n+c0 19.5996 32.5 21.7998 32.5 0c-1.40039 -88.2002 -7 -131.8 85.5 -132.5c90.2002 0.599609 87.5996 41.5996 85.5 132.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"blackberry\" unicode=\"&#xf37b;\" horiz-adv-x=\"512\" \n+d=\"M166 331.1c0 -23.3994 -16.4004 -49.0996 -72.5 -49.0996h-70.0996l21 88.7998h67.7998c42.0996 0 53.7998 -23.2998 53.7998 -39.7002zM292.2 370.8c42.0996 0 53.7998 -23.2998 53.7002 -39.7002c0 -23.3994 -16.3008 -49.0996 -70.1006 -49.0996h-70.0996\n+l18.7002 88.7998h67.7998zM88.7998 239.9c42.1006 0 53.7998 -23.4004 53.7998 -39.7002c0 -25.7002 -16.3994 -49.1006 -72.5 -49.1006h-70.0996l21 88.8008h67.7998zM268.9 239.9c42 0 53.6992 -23.4004 53.6992 -39.7002c0 -25.7002 -16.2998 -49.1006 -70.0996 -49.1006\n+h-70.0996l18.6992 88.8008h67.8008zM458.2 293.7c42.0996 0 53.7998 -23.4004 53.7002 -39.7002c0 -25.7002 -16.3008 -49.0996 -70.1006 -49.0996h-70.0996l18.7002 88.7998h67.7998zM430.2 155.8c42.0996 0 53.7002 -23.3994 53.7002 -39.7002\n+c0 -25.6992 -14 -49.0996 -70.1006 -49.0996h-70.0996l18.7002 88.7998h67.7998zM240.8 102c42.1006 0 53.7998 -23.4004 53.7002 -39.7002c0 -23.3994 -14 -49.0996 -70.0996 -49.0996h-70.1006l18.7002 88.7998h67.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"blogger\" unicode=\"&#xf37c;\" \n+d=\"M162.4 252c4.7998 4.90039 6.19922 5.09961 36.3994 5.09961c27.2002 0 28.1006 -0.0996094 32.1006 -2.09961c5.7998 -2.90039 8.2998 -7 8.2998 -13.5996c0 -5.90039 -2.40039 -10 -7.60059 -13.4004c-2.7998 -1.7998 -4.5 -1.90039 -31.0996 -2.09961\n+c-16.4004 -0.100586 -29.5 0.199219 -31.5 0.799805c-10.2998 2.89941 -14.0996 17.7002 -6.59961 25.2998zM223.8 157.5c55.4004 0 55.1006 0 60.4004 -4.7002c7.39941 -7 5.89941 -19.2998 -3.10059 -24.3994l-9.19922 -1.5l-47.9004 -0.600586\n+c-42.2002 -0.5 -54.0996 0.200195 -56.2998 1.2002c-4.40039 1.90039 -8.5 7.2998 -9.2002 12c-0.599609 4.5 1.59961 10.7998 5.09961 13.9004c4.40039 3.89941 6.30078 4.09961 60.2002 4.09961zM447.2 27.4004c-3.5 -28.4004 -23 -50.4004 -51.1006 -57.5\n+c-7.19922 -1.80078 -9.69922 -1.90039 -172.899 -1.80078c-157.8 0 -165.9 0.100586 -172 1.80078c-8.40039 2.19922 -15.6006 5.5 -22.2998 10c-5.60059 3.7998 -13.9004 11.7998 -17 16.3994c-3.80078 5.60059 -8.2002 15.2998 -10 22\n+c-1.80078 6.7002 -1.90039 9.40039 -1.90039 173.4c0 163.1 0 166.6 1.7998 173.7c6.2998 24.6992 25.9004 43.5996 51.2002 49.1992c7.2998 1.60059 332.1 1.90039 340 0.300781c21.2002 -4.30078 37.9004 -17.1006 47.5996 -36.4004c7.7002 -15.2998 7 1.5 7.30078 -180.6\n+c0.199219 -115.801 0 -164.5 -0.700195 -170.5zM361.8 212.6c-1.09961 5 -4.2002 9.60059 -7.7002 11.5c-1.09961 0.600586 -8 1.30078 -15.5 1.7002c-12.3994 0.600586 -13.7998 0.799805 -17.7998 3.10059c-6.2002 3.59961 -7.89941 7.59961 -8 18.2998\n+c0 20.3994 -8.5 39.3994 -25.2998 56.5c-12 12.2002 -25.2998 20.5 -40.5996 25.0996c-3.60059 1.10059 -11.8008 1.5 -39.2002 1.7998c-42.9004 0.5 -52.5 -0.399414 -67.1006 -6.19922c-27 -10.7002 -46.2998 -33.4004 -53.3994 -62.4004\n+c-1.2998 -5.40039 -1.60059 -14.2002 -1.90039 -64.2998c-0.399414 -62.7998 0 -72.1006 4 -84.5c9.7002 -30.7002 37.1006 -53.4004 64.6006 -58.4004c9.19922 -1.7002 122.199 -2.09961 133.699 -0.5c20.1006 2.7002 35.9004 10.7998 50.7002 25.9004\n+c10.7002 10.8994 17.4004 22.7998 21.7998 38.5c3.2002 10.8994 2.90039 88.3994 1.7002 93.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"blogger-b\" unicode=\"&#xf37d;\" \n+d=\"M446.6 225.3c2 -8.89941 2.40039 -134.1 -2.5 -151.7c-7.09961 -25.2998 -17.8994 -44.3994 -35.1992 -62.0996c-23.9004 -24.4004 -49.4004 -37.5 -81.9004 -41.9004c-18.7002 -2.5 -201.2 -1.89941 -216 0.800781c-44.5 8 -88.7998 44.6992 -104.4 94.2998\n+c-6.2998 20.0996 -7 35 -6.39941 136.5c0.5 81 1 95.0996 3.09961 103.899c11.4004 46.8008 42.6006 83.4004 86.1006 100.601c23.5996 9.39941 39 10.7998 108.399 10c44.2002 -0.5 57.4004 -1.10059 63.2998 -2.90039c24.6006 -7.5 46.2002 -20.7998 65.5 -40.5\n+c27.1006 -27.5996 40.8008 -58.2998 40.9004 -91.2998c0.0996094 -17.2002 2.7998 -23.5996 12.9004 -29.5c6.39941 -3.7002 8.59961 -4.09961 28.6992 -5c12 -0.5 23.2002 -1.7002 25 -2.7002c5.7002 -3.09961 10.7002 -10.5 12.5 -18.5zM124.5 288.9\n+c-12.2002 -12.3008 -6 -36.1006 10.5996 -40.8008c3.10059 -0.799805 24.3008 -1.39941 50.8008 -1.19922c43 0.199219 45.6992 0.399414 50.2998 3.2998c8.5 5.39941 12.2998 12.0996 12.2998 21.5996c0 10.6006 -4.09961 17.2002 -13.4004 21.9004\n+c-6.39941 3.2998 -7.89941 3.39941 -51.7998 3.39941c-48.7998 0 -51 -0.299805 -58.7998 -8.19922zM316.3 89.0996c14.4004 8.2002 17 28.1006 4.90039 39.4004c-8.5 7.90039 -8 7.90039 -97.6006 7.7998c-87.0996 -0.0996094 -90.1992 -0.299805 -97.2998 -6.7002\n+c-5.59961 -5.09961 -9.2998 -15.0996 -8.2002 -22.3994c1.10059 -7.7002 7.80078 -16.2998 14.9004 -19.4004c3.59961 -1.59961 22.7998 -2.7998 90.9004 -2l77.5 0.900391z\" \u002F>\n+    \u003Cglyph glyph-name=\"buromobelexperte\" unicode=\"&#xf37f;\" \n+d=\"M0 416h128v-128h-128v128zM120 296v112h-112v-112h112zM160 416h128v-128h-128v128zM280 296v112h-112v-112h112zM320 416h128v-128h-128v128zM440 296v112h-112v-112h112zM0 256h128v-128h-128v128zM120 136v112h-112v-112h112zM160 256h128v-128h-128v128zM280 136v112\n+h-112v-112h112zM320 256h128v-128h-128v128zM440 136v112h-112v-112h112zM0 96h128v-128h-128v128zM120 -24v112h-112v-112h112zM160 96h128v-128h-128v128zM280 -24v112h-112v-112h112zM320 96h128v-128h-128v128z\" \u002F>\n+    \u003Cglyph glyph-name=\"centercode\" unicode=\"&#xf380;\" horiz-adv-x=\"512\" \n+d=\"M329.2 179.4c-3.7998 -35.2002 -35.4004 -60.6006 -70.6006 -56.8008c-35.1992 3.80078 -60.5996 35.4004 -56.7998 70.6006s35.4004 60.5996 70.6006 56.7998c35.0996 -3.7998 60.5996 -35.4004 56.7998 -70.5996zM243.4 -55.7002\n+c-146.7 7.7002 -251.601 138.2 -233.301 279.4c11.2002 86.5996 65.8008 156.899 139.101 192c161 77.0996 349.7 -37.4004 354.7 -216.601c4.09961 -147 -118.4 -262.199 -260.5 -254.8zM423.3 124.3c27.9004 118 -160.5 205.9 -237.2 234.2\n+c-57.5 -56.2998 -69.0996 -188.6 -33.7998 -344.4c68.7998 -15.7998 169.101 26.4004 271 110.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloudscale\" unicode=\"&#xf383;\" \n+d=\"M318.1 294c6.2002 6.2998 15.8008 -3.09961 9.5 -9.59961l-75.1992 -88.8008c0.899414 -8.19922 -1.80078 -16.7998 -8.10059 -23.0996c-11.0996 -11 -28.8994 -11 -40 0c-11.0996 11.0996 -11.0996 29 0 40c6.2998 6.2998 14.7998 9 23.1006 8.09961l25.1992 20.4004\n+c-16.3994 15.2998 -38.3994 24.7002 -62.5996 24.7002c-50.7998 0 -94.5996 -41.4004 -92.5996 -97.4004c-1 6.2998 -1.40039 12.7998 -1.40039 19.4004c0 71.5 57.7998 132.3 129.4 132.3c31.7998 0 60.7998 -14.2998 83.2998 -33.5996zM234.3 182.5\n+c5.60059 5.5 5.60059 14.5996 0 20.2002c-5.59961 5.59961 -14.5996 5.59961 -20.2002 0c-5.59961 -5.60059 -5.59961 -14.6006 0 -20.2002c5.60059 -5.5 14.6006 -5.5 20.2002 0zM224 416c123.5 0 224 -100.5 224 -224s-100.5 -224 -224 -224s-224 100.5 -224 224\n+s100.5 224 224 224zM224 32c88.2002 0 160 71.7998 160 160s-71.7998 160 -160 160s-160 -71.7998 -160 -160s71.7998 -160 160 -160z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloudsmith\" unicode=\"&#xf384;\" horiz-adv-x=\"332\" \n+d=\"M332.5 28.0996c0 -46.3994 -37.5996 -84.0996 -84 -84.0996s-84 37.7002 -84 84.0996c0 46.4004 37.5996 84 84 84s84 -37.5996 84 -84zM248.5 272c-46.4004 0 -80 -33.5996 -80 -80s-37.5996 -80 -84 -80s-84 33.5996 -84 80s37.5996 88 84 88s76 29.5996 76 76\n+s41.5996 84 88 84s80 -37.5996 80 -84s-33.5996 -84 -80 -84z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloudversify\" unicode=\"&#xf385;\" horiz-adv-x=\"616\" \n+d=\"M148.6 144v-0.0996094h-48.8994c-6.40039 0 -11.7002 5.39941 -11.7002 11.7998v40.3994c0 7.60059 7 11.9004 10.7998 11.9004h46.7998v-6.59961c0 -10.7002 8.80078 -16.7002 19.5 -16.7002h20.2002c10.7998 0 19.5 8.7998 19.5 19.5v20.3994\n+c0 10.6006 -3.5 19.5 -15.2002 19.5c18.5 15.2002 37.2002 21.4004 45 24.1006c15 56.5 42 92.3994 99.3008 109.7c55.0996 16.5 153.5 3.09961 186.5 -85c73.8994 -22.6006 106.899 -92.6006 92.0996 -155.101c-13 -54.8994 -62.2998 -100.6 -131.5 -99.5\n+c-49.5996 -51.3994 -135.2 -48.8994 -186.4 -5.59961c-78.5996 -4.2002 -137.8 42.7998 -146 111.3zM376 136c8.7002 -54.0996 59.7002 -65.5 91.7998 -59.2002c39.1006 7.7002 70.5 37.5 79.7002 76.5c5.7998 24.4004 2.40039 50 -9.40039 72l-10.5 19.6006\n+c1.2002 -22.5 -12.5 -60.6006 -47.5 -76.9004c65.5 67.7002 2.10059 141.2 -67.6992 150.5c-49.8008 6.59961 -83.3008 -13 -114.2 -43.7002c48 -4.7002 87.7002 -26.7998 101.8 -74.7998c-30.0996 49.2998 -103 56.5996 -133.6 40.7998\n+c-35.5 -18.2002 -60 -54 -57 -93.8994c3.59961 -47.4004 39.5 -67.4004 57.3994 -79.8008c-4.5 21.7002 -4 71.3008 29.2002 92.9004c-36.2998 -60 28.0996 -144.6 135.3 -110.8c-33.5996 14.3994 -66 40.5 -55.2998 86.7998zM128 240h-39.7998\n+c-8.90039 0 -16.2002 7.2998 -16.2002 16.2002v39.5996c0 8.90039 7.2998 16.2002 16.2002 16.2002h39.7998c8.90039 0 16.2002 -7.2998 16.2002 -16.2002v-39.5996c0 -8.90039 -7.2998 -16.2002 -16.2002 -16.2002zM10.0996 280c-5.59961 0 -10.0996 4.5 -10.0996 10.0996\n+v27.8008c0 5.59961 4.5 10.0996 10.0996 10.0996h27.7002c5.5 0 10.1006 -4.5 10.1006 -10.0996v-27.8008c0 -5.59961 -4.5 -10.0996 -10.1006 -10.0996h-27.7002zM168 305.3v21.4004c0 5.09961 4.2002 9.2998 9.2998 9.2998h21.4004\n+c5.09961 0 9.2998 -4.2002 9.2998 -9.2998v-21.4004c0 -5.09961 -4.2002 -9.2998 -9.2998 -9.2998h-21.4004c-5.09961 0 -9.2998 4.2002 -9.2998 9.2998zM56 212.5v-25c0 -6.2998 -5.09961 -11.5 -11.4004 -11.5h-25.1992c-6.30078 0 -11.4004 5.2002 -11.4004 11.5v25\n+c0 6.2998 5.09961 11.5 11.4004 11.5h25.0996c6.40039 0 11.5 -5.2002 11.5 -11.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"cpanel\" unicode=\"&#xf388;\" horiz-adv-x=\"640\" \n+d=\"M210.3 227.8c6.60059 -29.0996 -14.5 -65.2998 -51.7002 -65.2998h-32l6.40039 23.7998c1.7998 6.2002 7.2998 10.7998 14.2998 10.7998h10.2998c12.4004 0 20.8008 11.7002 18.3008 22.6006c-2.10059 9.2002 -9.90039 14.7998 -18.3008 14.7998h-19.7998\n+l-25.7998 -95.7002c-1.90039 -6.2002 -7.40039 -10.7002 -14.2002 -10.7002l-24.7002 -0.0996094l34.9004 130.1c1.7998 6.40039 7.2002 10.9004 14.2998 10.9004h37c24.1006 0 45.4004 -16.4004 51 -41.2002zM53.7998 199.8c-24.8994 0 -24.7002 -37.3994 0 -37.3994\n+h11.2998c4.2002 0 7.60059 -3.90039 6.40039 -8.30078l-7.09961 -26.0996h-12.4004c-33.5 0 -59 31.4004 -50.2998 65.2002c7.2998 27 28.2998 41.0996 51.2002 41.0996h40l-6.2002 -23.5996c-1.90039 -6.5 -7.40039 -10.9004 -14.2998 -10.9004h-18.6006zM301.3 234.6\n+c18.7998 0 33.2998 -17.5996 28.5 -36.7998l-14 -51.7998c-2.7998 -10.5996 -12.2002 -17.7998 -23.3994 -17.7998l-57.5 0.200195c-42.9004 0 -38.5 63.7998 0.699219 63.7998h48.4004l-3.5 -13.2002c-1.90039 -6.2002 -7.40039 -10.7998 -14.2002 -10.7998h-21.5996\n+c-5.2998 0 -5.2998 -7.90039 0 -7.90039h34.8994c4.60059 0 5.10059 3.90039 5.5 5.2998l8.60059 31.8008c0.299805 1 1.89941 5.2998 -2.10059 5.2998h-57.5c-9.69922 0 -16.5996 8.89941 -14.1992 18.5l3.5 13.3994h77.8994zM633.1 269c4.5 0 7.7002 -4 6.5 -8.2998\n+l-26.5 -98.2002c-5.09961 -20.7002 -24.1992 -34.5 -44.8994 -34.5l35.5996 133.1c1.2002 4.7002 5.5 7.90039 10.4004 7.90039h18.8994zM396.8 234.3c34.4004 0 59.2998 -32.2998 50.2998 -65.3994l-8.7998 -33.1006c-1.2002 -4.89941 -5.7002 -7.7998 -10.2998 -7.7998\n+h-19.0996c-4.5 0 -7.60059 4 -6.40039 8.2998l10.5996 40c3.30078 11.6006 -5.59961 23.4004 -18.0996 23.4004h-19.7998l-17.2002 -64c-1.2002 -4.7998 -5.59961 -7.7998 -10.4004 -7.7998h-18.8994c-4.2002 0 -7.60059 3.89941 -6.40039 8.2998l26.2002 98h48.2998\n+v0.0996094zM495.1 159.7h73.3008l-5.7002 -21c-1.90039 -6.2002 -7.40039 -10.7002 -14.2002 -10.7002h-66.7002c-20 0 -33.2998 19 -28.2998 36.7002l10.7998 40c4.7998 17.5996 20.7002 29.5996 38.6006 29.5996h47.2998c19 0 33.2002 -17.7002 28.2998 -36.7998\n+l-3.2002 -12c-2.89941 -11 -12.7002 -17.5996 -23.2002 -17.5996h-53.3994l3.5 13c1.59961 6.19922 7.2002 10.7998 14.2002 10.7998h21.5996c2 0 3.2998 1 3.90039 3l0.699219 2.59961c0.700195 2.7002 -1.2998 5.10059 -3.89941 5.10059h-32.9004\n+c-4.09961 0 -6.89941 -2.10059 -7.7998 -6l-8 -30c-0.900391 -3.30078 1.5 -6.7002 5.09961 -6.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"css3-alt\" unicode=\"&#xf38b;\" horiz-adv-x=\"384\" \n+d=\"M0 416h384l-34.9004 -395.8l-157.1 -52.2002l-157.1 52.2002zM313.1 336h-242.199l5.7998 -47.2998h122.899l-6.5 -2.7002l-112.1 -46.7002l3.59961 -46.2998l0.200195 0.0996094v-0.0996094l166.3 -0.5l-3.69922 -61.5996l-54.7002 -15.4004l-52.6006 13.2998\n+l-3.19922 38.2998h-48.9004l6.40039 -73.8994l98.7998 -29.2002l98.2002 28.7002l12.7998 146.6h-111.5l0.299805 0.100586l115.3 49.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"cuttlefish\" unicode=\"&#xf38c;\" horiz-adv-x=\"440\" \n+d=\"M344 142.5c13.7002 -50.9004 41.7002 -93.2998 87 -117.8c-45.2998 -49.6006 -110.5 -80.7002 -183 -80.7002c-137 0 -248 111 -248 248s111 248 248 248c72.5 0 137.7 -31.0996 183 -80.7002c-45.2998 -24.5 -73.2998 -66.8994 -87 -117.8\n+c-17.5 31.5996 -57.4004 54.5 -96 54.5c-56.5996 0 -104 -47.4004 -104 -104s47.4004 -104 104 -104c38.5996 0 78.5 22.9004 96 54.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"d-and-d\" unicode=\"&#xf38d;\" horiz-adv-x=\"576\" \n+d=\"M82.5 349.1c-0.599609 17.2002 2 33.8008 12.7002 48.2002c0.299805 -7.39941 1.2002 -14.5 4.2002 -21.5996c5.89941 27.5 19.6992 49.2998 42.2998 65.5c-1.90039 -5.90039 -3.5 -11.7998 -3 -17.7002c8.7002 7.40039 18.7998 17.7998 44.3994 22.7002\n+c14.7002 2.7998 29.7002 2 42.1006 -1c38.5 -9.2998 61 -34.2998 69.7002 -72.2998c5.2998 -23.1006 0.699219 -45 -8.30078 -66.4004c-5.19922 -12.4004 -12 -24.4004 -20.6992 -35.0996c-2 1.89941 -3.90039 3.7998 -5.80078 5.59961\n+c-42.7998 40.7998 -26.7998 25.2002 -37.3994 37.4004c-1.10059 1.19922 -1 2.19922 -0.100586 3.59961c8.30078 13.5 11.8008 28.2002 10 44c-1.09961 9.7998 -4.2998 18.9004 -11.2998 26.2002c-14.5 15.2998 -39.2002 15 -53.5 -0.600586\n+c-11.3994 -12.5 -14.0996 -27.3994 -10.8994 -43.5996c0.199219 -1.2998 0.399414 -2.7002 0 -3.90039c-3.40039 -13.6992 -4.60059 -27.5996 -2.5 -41.5996c0.0996094 -0.5 0.0996094 -1.09961 0.0996094 -1.59961c0 -0.300781 -0.0996094 -0.5 -0.200195 -1.10059\n+c-21.7998 11 -36 28.2998 -43.2002 52.2002c-8.2998 -17.7998 -11.0996 -35.5 -6.59961 -54.0996c-15.5996 15.1992 -21.2998 34.2998 -22 55.1992zM552.1 225.9c0.5 -0.600586 1.2002 -1 1.7002 -1.40039v-0.5c-15 3.59961 -29.7998 1.7998 -44.5 -1.2998\n+c-9.2998 -2 -18.2998 -4.7002 -26.7002 -9c-2.89941 -1.5 -5.69922 -3.2998 -8 -4.7002c-5.7998 2.40039 -11.2998 5.5 -17.1992 6.7998c-24.5 5.2998 -45.8008 -1.2002 -62.5 -20c-19.7002 -22.2002 -34.5 -47.5996 -46.7002 -74.5l-1.2002 -2.7002\n+c-0.0996094 -0.199219 -0.200195 -0.299805 -0.400391 -0.399414c-12.0996 8.2998 -21.5996 20.2998 -36.0996 25.5996c0.299805 0.400391 0.400391 0.900391 0.700195 1.2998c20.5996 28.2002 44.8994 52.5 75.0996 70.4004c16 9.5 33 16.0996 51.5 18.5\n+c1.7998 0.200195 3.5 0.400391 5.2998 1.09961c-4.39941 0 -8.7998 0.300781 -13.0996 -0.0996094c-21.2002 -1.90039 -40.5 -9.59961 -58.7002 -20.2002c-13.7998 -8 -26.2002 -17.7002 -36.5996 -29.7998c-0.400391 -0.5 -0.600586 -1.09961 -0.900391 -1.7002\n+c-0.299805 0.299805 -0.700195 0.600586 -1 0.900391c11 30.8994 30.7002 55 57.7002 73.2998c0.200195 -0.200195 0.5 -0.299805 0.700195 -0.5c-1.2002 -1.7002 -2.5 -3.2998 -3.5 -5.09961c-1.7998 -3.30078 -3.7002 -6.5 -5.10059 -10\n+c-1.7998 -4.30078 1.60059 -8.60059 12 -0.5c18.2002 14.0996 29.6006 26.2998 48.9004 29.5996c0.700195 0.0996094 1.2998 0.299805 1.90039 0.299805h2.5c-1 -0.700195 -1.60059 -1.09961 -2.2002 -1.5c-11.6006 -7.7998 -11.7998 -7.39941 -15 -12\n+c-2.60059 -3.7002 -0.200195 -8 4.7002 -6.7998c2.59961 0.599609 5.19922 1.2998 7.69922 2.2002c9.40039 3.2998 19 5.7998 29 6.39941c13.9004 0.800781 27.1006 -1.89941 39.9004 -7.09961c15.0996 -6.2002 28.5 -15 40.0996 -26.5996zM316.7 50.4004\n+c1.5 -1.30078 1.89941 -2.40039 0.899414 -4.2002c-25.2998 -50.2002 -61.0996 -89.1006 -116 -98.7998c-26.7998 -4.7002 -52.8994 -2.7002 -77.8994 8.59961c-18.5 8.2002 -34.6006 19.5996 -47.2002 35.5996c-2 2.60059 -3.7002 5.40039 -5.90039 8.60059\n+c-0.699219 -7.7998 0.100586 -14.9004 1.5 -21.9004c-0.199219 -0.200195 -0.399414 -0.299805 -0.599609 -0.5c-3.2002 3.40039 -6.59961 6.60059 -9.5 10.2998c-12.2002 15.5 -19.5 33.3008 -24.0996 52.3008c-11.8008 48.2998 -0.5 78.7998 7.7998 101.1\n+c-8.7002 -4.7998 -16.2002 -10.2998 -23.6006 -16.2002c11.6006 32.7998 31.9004 59.9004 56.1006 84.6006c2.39941 -2.10059 3.2998 -4.7002 3 -7.40039c-0.200195 -1 -5.90039 -38.9004 -5.60059 -44.7002c18.9004 18.9004 40.5 33.2998 64.8008 43.9004\n+c-7.5 -11.1006 -11 -23.4004 -11.8008 -37.2998c13.4004 12.1992 27.7002 20.0996 46.4004 13.8994c-8.5 -9.09961 -30.7998 -30.5 -38.5996 -64.2998c-5.10059 -21.9004 -3.80078 -43.0996 8.19922 -62.5996c11.2002 -18.3008 27.8008 -27.8008 49.4004 -27.8008\n+c12.5996 0 23.7998 5 34.0996 11.8008c18.5 12.2998 32.8008 28.5 44 47.5996c1.90039 3.2002 1.10059 2.09961 1.90039 3c19.9004 -16.0996 3.2998 -2.59961 42.7002 -35.5996zM488.7 96.7998c20.2002 -6.59961 35.5 -18.7998 43.7998 -38.8994\n+c9.2002 -23.1006 2.09961 -49.4004 -17.4004 -66c-16.3994 -14 -35.6992 -19.2002 -57 -17.4004c-0.599609 0 -1.19922 0 -1.89941 -0.299805c15.0996 -10.7002 31.5996 -15.2002 50.8994 -10.6006c-2.19922 -2.39941 -3.89941 -4.69922 -5.89941 -6.5\n+c-12.2998 -10.8994 -26.9004 -16.8994 -42.9004 -19.7998c-39.5996 -7.2998 -75.5996 12.7998 -85 56.9004c-0.5 2.09961 -0.599609 4.2002 -0.899414 6.39941c-10.8008 -8.19922 -16.4004 -34.0996 -0.700195 -52.2998c-1.60059 0.5 -2.60059 0.700195 -3.60059 1.10059\n+c-21.2998 8.2998 -34.3994 28.2998 -33.5 51.1992c0.900391 23.2002 4.90039 41 -13 56c-16.5 13.8008 -33 27.4004 -49.5 41.1006c-8.09961 6.7002 -14.7998 14.5 -17 25.0996c-1 4.60059 -1.39941 9.40039 -1.7998 14.1006c-0.5 6.09961 -3.2998 11 -7.89941 14.7998\n+c-4.5 3.89941 -9.30078 7.39941 -13.8008 11.2002c-8.89941 7.5 -12.2998 18.8994 -7.2998 29.8994c2.7998 -12.8994 9.60059 -18.8994 22.6006 -20.2998c4.39941 -0.5 8.89941 -0.799805 13.2998 -1.5c8.09961 -1.2002 12.7998 -6.09961 14.2998 -14.2002\n+c0.700195 -3.39941 1.2998 -6.7998 2.2002 -10.2002c1.59961 -5.59961 4.5 -8 10.3994 -8.39941c4.60059 -0.299805 9.30078 -0.5 13.9004 -0.900391c7.59961 -0.599609 14.2002 -3.7998 20.0996 -8.7002c19.4004 -16.1992 39 -32.1992 58.5 -48.2998\n+c5.7002 -4.7002 12 -8.2002 19.6006 -8.5c16.7002 -0.599609 29 15.2002 24.7998 31.7998c-0.200195 0.700195 -0.400391 1.5 -0.0996094 2.80078c2.39941 -2 4.89941 -3.80078 7 -5.90039c14.0996 -14 18.0996 -39.2998 8.69922 -56.0996\n+c-2.09961 -3.80078 -5.2998 -7.10059 -8.09961 -10.8008c0.700195 -0.199219 1.7998 -0.5 3 -0.599609c14 -1.40039 27.2002 1 38.9004 9.09961c15.7998 10.9004 18 31.2002 5.39941 45.6006c-4.7002 5.39941 -8.89941 8 -18.7998 12\n+c6.5 1.2998 19.2002 0.200195 28.7002 -2.90039zM99.4004 268.7c-5.30078 9.2002 -13.2002 15.5996 -22.1006 21.2998c13.7002 0.5 26.6006 -0.200195 39.6006 -3.7002c-7 12.2002 -8.5 24.7002 -5 38.7002c5.2998 -11.9004 13.6992 -20.0996 23.5996 -26.7998\n+c19.7002 -13.2002 35.7002 -19.6006 46.7002 -30.2002c3.39941 -3.2998 6.2998 -7.09961 9.59961 -10.9004c-0.799805 2.10059 -1.39941 4.10059 -2.2002 6c-5 10.6006 -13 18.6006 -22.5996 25c-1.7998 1.2002 -2.7998 2.5 -3.40039 4.5\n+c-3.2998 12.5 -3 25.1006 -0.699219 37.6006c1 5.5 2.7998 10.8994 4.5 16.2998c0.799805 2.40039 2.2998 4.59961 4 6.59961c0.599609 -6.89941 0 -25.5 19.5996 -46c10.7998 -11.2998 22.4004 -21.8994 33.9004 -32.6992c9 -8.5 18.2998 -16.7002 25.5 -26.8008\n+c1.09961 -1.59961 2.19922 -3.2998 3.7998 -4.69922c-5 13 -14.2002 24.0996 -24.2002 33.7998c-9.59961 9.2998 -19.4004 18.3994 -29.2002 27.3994c-3.2998 3 -4.59961 6.7002 -5.09961 10.9004c-1.2002 10.4004 0 20.5996 4.2998 30.2002c0.5 1 1.09961 2 1.90039 3.2998\n+c0.5 -4.2002 0.599609 -7.90039 1.39941 -11.5996c4.7998 -23.1006 20.4004 -36.3008 49.2998 -63.5c10 -9.40039 19.3008 -19.2002 25.6006 -31.6006c4.7998 -9.2998 7.2998 -19 5.7002 -29.5996c-0.100586 -0.600586 0.5 -1.7002 1.09961 -2\n+c6.2002 -2.60059 10 -6.90039 9.7002 -14.2998c7.7002 2.59961 12.5 8 16.3994 14.5c4.2002 -20.2002 -9.09961 -50.3008 -27.1992 -58.7002c0.399414 4.5 5 23.3994 -16.5 27.7002c-6.80078 1.2998 -12.8008 1.2998 -22.9004 2.09961c4.7002 9 10.4004 20.5996 0.5 22.4004\n+c-24.9004 4.59961 -52.7998 -1.90039 -57.7998 -4.60059c8.2002 -0.399414 16.2998 -1 23.5 -3.2998c-2 -6.5 -4 -12.7002 -5.7998 -18.9004c-1.90039 -6.5 2.09961 -14.5996 9.2998 -9.59961c1.2002 0.900391 2.2998 1.90039 3.2998 2.7002\n+c-3.09961 -17.9004 -2.90039 -15.9004 -2.7998 -18.2998c0.299805 -10.2002 9.5 -7.80078 15.7002 -7.30078c-2.5 -11.7998 -29.5 -27.2998 -45.4004 -25.7998c7 4.7002 12.7002 10.2998 15.9004 17.9004c-6.5 -0.799805 -12.9004 -1.60059 -19.2002 -2.40039\n+l-0.299805 0.900391c4.69922 3.39941 8 7.7998 10.1992 13.0996c8.7002 21.1006 -3.59961 38 -25 39.9004c-9.09961 0.799805 -17.7998 -0.799805 -25.8994 -5.5c6.2002 15.5996 17.2002 26.5996 32.5996 34.5c-15.2002 4.2998 -8.89941 2.7002 -24.5996 6.2998\n+c14.5996 9.2998 30.2002 13.2002 46.5 14.5996c-5.2002 3.2002 -48.1006 3.60059 -70.2002 -20.8994c7.90039 -1.40039 15.5 -2.7998 23.2002 -4.2002c-23.7998 -7 -44 -19.7002 -62.4004 -35.5996c1.10059 4.7998 2.7002 9.5 3.2998 14.2998\n+c0.600586 4.5 0.800781 9.2002 0.100586 13.5996c-1.5 9.40039 -8.90039 15.1006 -19.7002 16.2998c-7.90039 0.900391 -15.5996 -0.0996094 -23.2998 -1.2998c-0.900391 -0.0996094 -1.7002 -0.299805 -2.90039 0c15.7998 14.7998 36 21.7002 53.1006 33.5\n+c6 4.5 6.7998 8.2002 3 14.9004zM227.8 241.9c3.2998 -16 12.6006 -25.5 23.7998 -24.3008c-4.59961 11.3008 -12.0996 19.5 -23.7998 24.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"deploydog\" unicode=\"&#xf38e;\" horiz-adv-x=\"512\" \n+d=\"M382.2 312h51.7002v-239.6h-51.7002v20.6992c-19.7998 -24.7998 -52.7998 -24.0996 -73.7998 -14.6992c-26.2002 11.6992 -44.3008 38.0996 -44.3008 71.7998c0 29.7998 14.8008 57.8994 43.3008 70.7998c20.1992 9.09961 52.6992 10.5996 74.7998 -12.9004v103.9z\n+M317.5 150.2c0 -18.2002 13.5996 -33.5 33.2002 -33.5c19.7998 0 33.2002 16.3994 33.2002 32.8994c0 17.1006 -13.7002 33.2002 -33.2002 33.2002c-19.6006 0 -33.2002 -16.3994 -33.2002 -32.5996zM188.5 312h51.7002v-239.6h-51.7002v20.6992\n+c-19.7998 -24.7998 -52.7998 -24.0996 -73.7998 -14.6992c-26.2002 11.6992 -44.2998 38.0996 -44.2998 71.7998c0 29.7998 14.7998 57.8994 43.2998 70.7998c20.2002 9.09961 52.7002 10.5996 74.7998 -12.9004v103.9zM123.8 150.2c0 -18.2002 13.6006 -33.5 33.2002 -33.5\n+c19.7998 0 33.2002 16.3994 33.2002 32.8994c0 17.1006 -13.7002 33.2002 -33.2002 33.2002c-19.7002 0 -33.2002 -16.3994 -33.2002 -32.5996zM448 352h-384c-17.5996 0 -32 -14.5 -32 -32v-256c0 -17.5996 14.5 -32 32 -32h384c17.5996 0 32 14.5 32 32v256\n+c0 17.5996 -14.5 32 -32 32zM448 384c35.2002 0 64 -28.7998 64 -64v-256c0 -35.2002 -28.7998 -64 -64 -64h-384c-35.2002 0 -64 28.7998 -64 64v256c0 35.2002 28.7998 64 64 64h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"deskpro\" unicode=\"&#xf38f;\" horiz-adv-x=\"480\" \n+d=\"M205.9 -64l31.0996 38.4004c12.2998 0.199219 25.5996 1.39941 36.5 6.59961c38.9004 18.5996 38.4004 61.9004 38.2998 63.7998c-0.0996094 5 -0.799805 4.40039 -28.8994 37.4004h79.0996c-0.200195 -50.1006 -7.2998 -68.5 -10.2002 -75.7002\n+c-9.39941 -23.7002 -43.8994 -62.7998 -95.2002 -69.4004c-8.69922 -1.09961 -32.7998 -1.19922 -50.6992 -1.09961zM406.3 103.7l-119.2 -0.100586l17.4004 31.3008l175.5 -0.300781c-15.2002 -17.2998 -35.0996 -30.8994 -73.7002 -30.8994zM362.7 327.6v-168.3h-73.5\n+l-32.7002 -55.5h-6.5c-52.2998 0 -58.0996 56.5 -58.2998 58.9004c-1.2002 13.2002 -21.2998 11.5996 -20.1006 -1.7998c1.40039 -15.8008 8.80078 -40 26.4004 -57.1006h-91c-25.5 0 -110.8 26.7998 -107 114v213.3c0 16 9.7002 16.6006 15 16.8008h82\n+c0.200195 0 0.299805 -0.100586 0.5 -0.100586c4.2998 0.400391 50.0996 2.10059 50.0996 -43.7002c0 -13.2998 20.2002 -13.3994 20.2002 0c0 18.2002 -5.5 32.8008 -15.7998 43.7002h84.2002c108.7 0.400391 126.5 -79.3994 126.5 -120.2zM230.2 271.6l64 -29.2998\n+c13.2998 45.5 -42.2002 71.7002 -64 29.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"digital-ocean\" unicode=\"&#xf391;\" horiz-adv-x=\"512\" \n+d=\"M87 -33.7998v73.5996h73.7002v-73.5996h-73.7002zM25.4004 101.4h61.5996v-61.6006h-61.5996v61.6006zM491.6 271.1c53.2002 -170.3 -73 -327.1 -235.6 -327.1v95.7998h0.299805v0.299805c101.7 0.200195 180.5 101 141.4 208\n+c-14.2998 39.6006 -46.1006 71.4004 -85.7998 85.7002c-107.101 38.7998 -208.101 -39.8994 -208.101 -141.7h-95.7998c0 162.2 156.9 288.7 327 235.601c74.2002 -23.2998 133.6 -82.4004 156.6 -156.601zM256.3 40.0996h-0.299805v-0.299805h-95.2998v95.6006h95.5996\n+v-95.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"discord\" unicode=\"&#xf392;\" \n+d=\"M297.216 204.8c0 -15.6162 -11.5195 -28.416 -26.1123 -28.416c-14.3359 0 -26.1113 12.7998 -26.1113 28.416s11.5195 28.416 26.1113 28.416c14.5928 0 26.1123 -12.7998 26.1123 -28.416zM177.664 233.216c14.5918 0 26.3682 -12.7998 26.1123 -28.416\n+c0 -15.6162 -11.5205 -28.416 -26.1123 -28.416c-14.3359 0 -26.1123 12.7998 -26.1123 28.416s11.5205 28.416 26.1123 28.416zM448 395.264v-459.264c-64.4941 56.9941 -43.8682 38.1279 -118.784 107.776l13.5684 -47.3604h-290.304\n+c-28.9287 0 -52.4805 23.5518 -52.4805 52.7363v346.111c0 29.1846 23.5518 52.7363 52.4805 52.7363h343.039c28.9287 0 52.4805 -23.5518 52.4805 -52.7363zM375.04 152.576c0 82.4316 -36.8643 149.248 -36.8643 149.248\n+c-36.8643 27.6475 -71.9355 26.8799 -71.9355 26.8799l-3.58398 -4.0957c43.5195 -13.3125 63.7441 -32.5127 63.7441 -32.5127c-60.8115 33.3291 -132.244 33.335 -191.232 7.42383c-9.47168 -4.35156 -15.1035 -7.42383 -15.1035 -7.42383\n+s21.2471 20.2246 67.3271 33.5361l-2.55957 3.07227s-35.0723 0.767578 -71.9355 -26.8799c0 0 -36.8643 -66.8164 -36.8643 -149.248c0 0 21.5039 -37.1201 78.0801 -38.9121c0 0 9.47168 11.5195 17.1514 21.248c-32.5117 9.72754 -44.7998 30.208 -44.7998 30.208\n+c3.7666 -2.63574 9.97656 -6.05273 10.4961 -6.40039c43.21 -24.1973 104.588 -32.126 159.744 -8.95996c8.95996 3.32812 18.9443 8.19238 29.4395 15.1045c0 0 -12.7998 -20.9922 -46.3359 -30.4639c7.68066 -9.72852 16.8965 -20.7363 16.8965 -20.7363\n+c56.5762 1.79199 78.3359 38.9121 78.3359 38.9121z\" \u002F>\n+    \u003Cglyph glyph-name=\"discourse\" unicode=\"&#xf393;\" \n+d=\"M225.9 416c122.699 0 222.1 -102.3 222.1 -223.9c0 -121.6 -99.4004 -223.899 -222.1 -223.899l-225.801 -0.200195s-0.0996094 224 -0.0996094 227.9c0 121.6 103.3 220.1 225.9 220.1zM224 64c70.7002 0 128 57.2998 128 128s-57.2998 128 -128 128\n+s-128 -57.2998 -128 -128c0 -22.0996 5.59961 -42.9004 15.4004 -61l-22.9004 -75l81.0996 20.0996c16.5 -7.7998 35 -12.0996 54.4004 -12.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"dochub\" unicode=\"&#xf394;\" horiz-adv-x=\"416\" \n+d=\"M397.9 288h-141.9v140.4zM304 256h96v-126.1c0 -129.301 -70.2998 -193.9 -210.8 -193.9h-189.2v512h189.2c12.2002 0 23.7002 -1.09961 34.5996 -3.2998v-84c-10 1.7002 -21.0996 2.5 -33.0996 2.5h-94.7002v-337.3h94.7002c76.7998 0 113.3 33.2998 113.3 100.1v130z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"docker\" unicode=\"&#xf395;\" horiz-adv-x=\"640\" \n+d=\"M349.9 211.7h-66.1006v59.3994h66.1006v-59.3994zM349.9 416v-60.7002h-66.1006v60.7002h66.1006zM428.1 271.2v-59.4004h-66.0996v59.4004h66.0996zM271.8 343.3v-60.0996h-66.0996v60.0996h66.0996zM349.9 343.3v-60.0996h-66.1006v60.0996h66.1006zM626.7 243.3\n+l13.2998 -8.89941c-1.90039 -3.90039 -7 -14.6006 -8.5 -17.1006c-23.7002 -45.2998 -69.9004 -45.5996 -91.2998 -45.2002c-54.5 -131.699 -171 -204.199 -328.4 -204.199c-72.7002 0 -128.3 22.2998 -165.399 66.1992c-38.2002 45.3008 -52.7002 111.301 -44 162.101\n+h434.699c22.6006 -0.400391 39.7002 6 48.4004 10.7002c-19.7002 30.1992 -14.7002 76 3.7002 103.8l9.2998 14l14 -9.2998c24.4004 -18.8008 37.7998 -39.7002 41.0996 -63.7002c25.5 4.7998 58.7002 1.2998 73.1006 -8.40039zM115.6 271.2h0.100586v-59.4004h-66.1006\n+v59.4004h66zM193.7 271.2v-59.4004h-66.1006v59.4004h66.1006zM271.8 271.2v-59.4004h-66.0996v59.4004h66.0996zM193.7 343.3v-60.0996h-66.1006v60.0996h66.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"draft2digital\" unicode=\"&#xf396;\" horiz-adv-x=\"480\" \n+d=\"M480 49.9004l-144 -81.9004v64.2002l-336 -0.100586c18.2998 19.1006 84.5 87.8008 161.1 174.801c32.6006 37.1992 78 83.2998 69.7002 127.6c-5.2998 28.2998 -42.2002 50.7998 -83.2998 33.5c-8.59961 -3.59961 -24.5 -17.4004 -26.2998 -24.7002\n+c28.2998 -4.7002 48 -29.7002 48 -56.7998c0 -31.7002 -25.6006 -57.4004 -57.2998 -57.4004c-37.3008 0 -62.2002 34.1006 -56.7002 67.1006c1.2002 7.89941 5.09961 26.7998 18.2002 47.7002c14.8994 23.8994 45.1992 54.8994 104.3 67.2998\n+c103.8 21.7002 161.6 -36.6006 166 -41.2002c28.8994 -29.9004 48 -90.7002 12.7998 -153.3c-30 -53.4004 -81 -114.3 -111.8 -149.3h91.2998v64.6992zM369.9 77v-54.4004l47.0996 27.2002zM134.2 286.6c0 12.3008 -10 22.4004 -22.4004 22.4004\n+c-12.3994 0 -22.3994 -10 -22.3994 -22.4004c0 -12.3994 10 -22.3994 22.3994 -22.3994c12.4004 0 22.4004 10 22.4004 22.3994zM82.5 67.5h114.4c17.5996 19.2002 91.5 100.8 128.5 166.7c36.5996 65.0996 -5.80078 113.3 -5.80078 113.3\n+c-14.1992 14.9004 -36.8994 36.2002 -82.1992 38.2998c6.7998 -5.5 16.8994 -16.8994 24.2998 -35.7002c11.8994 -30.2998 6.7002 -69.5996 -28.4004 -112.699c-53.0996 -65.2002 -125.2 -142.5 -150.8 -169.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"dribbble-square\" unicode=\"&#xf397;\" \n+d=\"M90.2002 219.8c8.89941 42.4004 37.3994 77.7002 75.7002 95.7002c3.59961 -4.90039 28 -38.7998 50.6992 -79c-64 -17 -120.3 -16.7998 -126.399 -16.7002zM314.6 294c-2.5 -3.5 -23 -31.0996 -71.5996 -49.4004c-22.4004 41.1006 -47.2002 74.9004 -51 80\n+c43.2998 10.5 89 -0.799805 122.6 -30.5996zM140.1 84c14.3008 29.2002 53 66.7998 108.101 85.5996c19.2002 -49.7998 27.2002 -91.5996 29.2002 -103.6c-44 -18.7002 -96.8008 -13.5996 -137.301 18zM238.9 192.2c-49.4004 -13.9004 -94.3008 -53.9004 -116.5 -91.7998\n+c-21.8008 24.2998 -35.1006 56.2998 -35.1006 91.3994c0 1.40039 0.100586 2.7998 0.100586 4.2002c6 -0.200195 72.1992 -1 140.399 19.4004c3.90039 -7.7002 7.7002 -15.4004 11.1006 -23.2002zM273.8 175.9c42.7998 6.89941 80.5 -4.30078 85.1006 -5.80078\n+c-6.10059 -38 -27.9004 -70.8994 -58.6006 -91.5996c-1.39941 8.2998 -8.59961 48.2998 -26.5 97.4004zM253.5 224.3c50.5 20.7002 73.4004 50 76.2998 53.9004c19.1006 -23.2002 30.6006 -52.7998 30.9004 -85.1006c-4.5 1 -49.7002 10.1006 -95.2002 4.40039\n+c-3.7002 9 -7.2002 17 -12 26.7998zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM384 192c0 88.2002 -71.7998 160 -160 160s-160 -71.7998 -160 -160s71.7998 -160 160 -160\n+s160 71.7998 160 160z\" \u002F>\n+    \u003Cglyph glyph-name=\"dyalog\" unicode=\"&#xf399;\" horiz-adv-x=\"416\" \n+d=\"M0 416h171.2c74.5 0 137.7 -24 182.5 -69.5996c40.2002 -40.9004 62.2998 -95.6006 62.2998 -154.301c0 -111.399 -84.0996 -224.1 -244.8 -224.1h-171.2v64h171.2c122.2 0 180.8 84 180.8 160.1c0 79.7002 -67.4004 159.9 -180.8 159.9h-107.2v-55.2002h-64v119.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"earlybirds\" unicode=\"&#xf39a;\" horiz-adv-x=\"480\" \n+d=\"M313.2 400.5c1.2002 13 21.2998 14 36.5996 8.7002c0.900391 -0.299805 26.2002 -9.7002 19 -15.2002c-27.8994 7.40039 -56.3994 -18.2002 -55.5996 6.5zM112.2 393.6c-7.7998 6.2002 19.8994 16.4004 20.8994 16.7002c16.8008 5.7002 38.9004 4.60059 40.2002 -9.59961\n+c0.900391 -27.1006 -30.3994 1 -61.0996 -7.10059zM319.4 288c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16c-8.80078 0 -16 7.2002 -16 16s7.19922 16 16 16zM159.7 288c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16z\n+M478.2 124.8c-9.90039 -24 -40.7002 -11 -63.9004 1.2002c-13.5 -69.0996 -58.0996 -111.4 -126.3 -124.2c0.299805 -0.899414 -2 0.100586 24 -1c33.5996 -1.39941 63.7998 3.10059 97.4004 8c-19.8008 13.7998 -11.4004 37.1006 -9.80078 38.1006\n+c1.40039 0.899414 14.7002 -1.7002 21.6006 -11.5c8.59961 12.5 28.3994 14.7998 30.2002 13.5996c1.59961 -1.09961 6.59961 -20.9004 -6.90039 -34.5996c4.7002 0.899414 8.2002 1.59961 9.7998 2.09961c2.60059 0.799805 17.7002 -11.2998 3.10059 -13.2998\n+c-14.3008 -2.2998 -22.6006 -5.10059 -47.1006 -10.7998c-45.8994 -10.7002 -85.8994 -11.8008 -117.7 -12.8008l1 -11.5996c3.80078 -18.0996 -23.3994 -24.2998 -27.5996 -6.2002c0.799805 -17.8994 -27.0996 -21.7998 -28.4004 1l-0.5 -5.2998\n+c-0.699219 -18.4004 -28.3994 -17.9004 -28.2998 0.599609c-7.5 -13.5 -28.0996 -6.7998 -26.3994 8.5l1.19922 12.4004c-36.6992 -0.900391 -59.6992 -3.09961 -61.7998 -3.09961c-20.8994 0 -20.8994 31.5996 0 31.5996c2.40039 0 27.7002 -1.2998 63.2002 -2.7998\n+c-61.0996 15.5 -103.7 55 -114.9 118.2c-25 -12.8008 -57.5 -26.8008 -68.1992 -0.800781c-10.5 25.4004 21.5 42.6006 66.7998 73.4004c0.700195 6.59961 1.59961 13.2998 2.7002 19.7998c-14.4004 19.6006 -11.6006 36.2998 -16.1006 60.4004\n+c-16.7998 -2.40039 -23.2002 9.09961 -23.5996 23.0996c0.299805 7.2998 2.09961 14.9004 2.39941 15.4004c1.10059 1.7998 10.1006 2 12.7002 2.59961c6 31.7002 50.6006 33.2002 90.9004 34.5c19.7002 21.7998 45.2002 41.5 80.8994 48.2998\n+c-15.2998 19.4004 -3.39941 39.9004 -2.39941 40.4004c1.7002 0.799805 21.2002 -4.2998 26.2998 -23.2002c5.2002 8.7998 18.2998 11.4004 19.5996 10.7002c1.10059 -0.599609 6.40039 -15 -4.89941 -25.9004c40.2998 -3.5 72.2002 -24.6992 96 -50.6992\n+c36.0996 -1.5 71.7998 -5.90039 77.0996 -34c2.7002 -0.600586 11.6006 -0.800781 12.7002 -2.60059c0.299805 -0.5 2.09961 -8.09961 2.40039 -15.3994c-0.5 -13.9004 -6.80078 -25.4004 -23.6006 -23.1006c-3.2002 -17.2998 -2.7002 -32.8994 -8.7002 -47.7002\n+c2.40039 -11.6992 4 -23.7998 4.80078 -36.3994c37 -25.4004 70.2998 -42.5 60.2998 -66.9004zM207.4 288.1c0.899414 44 -37.9004 42.2002 -78.6006 40.3008c-21.7002 -1 -38.8994 -1.90039 -45.5 -13.9004c-11.3994 -20.9004 5.90039 -92.9004 23.2002 -101.2\n+c9.7998 -4.7002 73.4004 -7.89941 86.2998 7.10059c8.2002 9.39941 15 49.3994 14.6006 67.6992zM259.4 229.8c-4.30078 12.4004 -6 30.1006 -15.3008 32.7002c-2 0.5 -9 0.5 -11 0c-10 -2.7998 -10.7998 -22.0996 -17 -37.2002c15.4004 0 19.3008 -9.7002 23.7002 -9.7002\n+c4.2998 0 6.2998 11.3008 19.6006 14.2002zM395.1 314.5c-6.59961 12.0996 -24.7998 12.9004 -46.5 13.9004c-40.1992 1.89941 -78.1992 3.7998 -77.2998 -40.3008c-0.5 -18.2998 5 -58.2998 13.2002 -67.7998c13 -14.8994 76.5996 -11.7998 86.2998 -7.09961\n+c15.7998 7.59961 36.5 78.8994 24.2998 101.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"erlang\" unicode=\"&#xf39d;\" horiz-adv-x=\"640\" \n+d=\"M87.2002 394.5c-41.5 -50.2002 -65.6006 -116.2 -65.5 -192.9c-0.100586 -86.7998 29 -159.5 78.7002 -212.1h-100.4v405h87.2002zM325.4 384.8c46.1992 -0.0996094 79.5996 -33.5 80.6992 -83.2002h-169.899c4.09961 49.7002 43.2998 83.1006 89.2002 83.2002z\n+M556.1 394.4h0.300781l-0.100586 0.0996094zM556.4 394.4h83.5996v-405h-80.7998c21.3994 23 40.5 49.8994 57.8994 80.7998l-96.3994 48.2002c-33.9004 -55.1006 -83.4004 -105.801 -151.9 -106.101c-99.7002 0.400391 -138.8 85.6006 -138.6 195.3h372.399\n+c0.5 12.4004 0.5 18.1006 0 24.1006c2.5 65.2002 -14.7998 120 -46.1992 162.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook-f\" unicode=\"&#xf39e;\" horiz-adv-x=\"320\" \n+d=\"M279.14 160h-74.6895v-224h-100.17v224h-81.3906v92.6602h81.3906v70.6201c0 80.3398 47.8594 124.72 121.08 124.72c35.0693 0 71.75 -6.25977 71.75 -6.25977v-78.8906h-40.4199c-39.8203 0 -52.2402 -24.71 -52.2402 -50.0596v-60.1299h88.9102z\" \u002F>\n+    \u003Cglyph glyph-name=\"facebook-messenger\" unicode=\"&#xf39f;\" horiz-adv-x=\"512\" \n+d=\"M256.55 440c140.04 0 247.45 -102.34 247.45 -240.57c0 -175.13 -166.15 -273.229 -319.44 -231.04c-8.96973 2.44043 -9.64941 0.600586 -62.5596 -22.6992c-2.10449 -0.918945 -5.67578 -1.66504 -7.97168 -1.66504c-10.624 0 -19.543 8.61719 -19.9082 19.2344\n+c-1.41992 46.3701 0.299805 50.7207 -8.0498 58.2305c-48.3604 43.1602 -78.0703 105.64 -78.0703 177.939c0 138.23 108.52 240.57 248.55 240.57zM405.79 254.87c7.0498 11.0801 -6.65039 23.5996 -17.0898 15.6201l-78.4102 -59.3799\n+c-2.20801 -1.65625 -6.24023 -3 -9 -3s-6.79199 1.34375 -9 3l-58.0596 43.46c-5.48926 4.09961 -15.5049 7.42676 -22.3564 7.42676c-11.3438 0 -25.4805 -7.77637 -31.5537 -17.3574l-73 -115.569c-7.05078 -11.0703 6.64941 -23.6006 17.1094 -15.6699l78.3701 59.4395\n+c2.20801 1.65625 6.24023 3 9 3s6.79199 -1.34375 9 -3l58.0801 -43.4697c5.48926 -4.09766 15.5039 -7.42285 22.3535 -7.42285c11.3428 0 25.4805 7.77441 31.5566 17.3525z\" \u002F>\n+    \u003Cglyph glyph-name=\"firstdraft\" unicode=\"&#xf3a1;\" horiz-adv-x=\"384\" \n+d=\"M384 256h-64v-128h-128v-128h-192v25.5996h166.4v128h128v128h89.5996v-25.5996zM358.4 217.6h25.5996v-153.6h-128v-128h-192v25.5996h166.4v128h128v128zM384 25.5996v-25.5996h-64v-64h-25.5996v89.5996h89.5996zM0 448h384v-128h-128v-128h-128v-128h-128v384z\" \u002F>\n+    \u003Cglyph glyph-name=\"fonticons-fi\" unicode=\"&#xf3a2;\" horiz-adv-x=\"384\" \n+d=\"M114.4 224h92.3994l-15.2002 -51.2002h-76.3994v-157.8c0 -8 -2.7998 -9.2002 4.39941 -10l59.6006 -5.59961v-34.4004h-179.2v35.2002l29.2002 2.7998c7.2002 0.799805 9.2002 3.2002 9.2002 10.7998v155.8c0 3.2002 -4 3.2002 -8 3.2002h-30.4004v51.2002h38.4004\n+v28.7998c0 68 36.3994 96 106 96c46.7998 0 88.7998 -11.2002 88.7998 -72.3994l-69.6006 -8.40039c0.400391 25.5996 -6 31.5996 -22.3994 31.5996c-25.2002 0 -26 -13.5996 -26 -37.5996v-32c0 -3.2002 -4.7998 -6 -0.799805 -6zM384 -35h-140.8v34.4004l28 3.59961\n+c7.2002 0.799805 10.3994 2.40039 10.3994 10v148c0 5.59961 -4 9.2002 -9.19922 10.7998l-33.2002 8.7998l9.2002 40.4004h110v-208c0 -8 -3.60059 -8.7998 4 -10l21.5996 -3.59961v-34.4004zM354 312.2l12.4004 -45.6006l-10 -10l-42.8008 22.8008l-42.7998 -22.8008\n+l-10 10l12.4004 45.6006l-30 36.3994l4.7998 10h38l21.2002 38.4004h12.7998l21.2002 -38.4004h38l4.7998 -13.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"fort-awesome-alt\" unicode=\"&#xf3a3;\" horiz-adv-x=\"512\" \n+d=\"M208 210.6c2.09961 0 3.7002 -1.59961 3.7002 -3.69922v-51.7002c0 -2.10059 -1.60059 -3.7002 -3.7002 -3.7002h-22.2002c-2.09961 0 -3.7002 1.59961 -3.7002 3.7002v51.7002c0 2.09961 1.60059 3.69922 3.7002 3.69922h22.2002zM326.2 210.6\n+c2 0 3.59961 -1.59961 3.7002 -3.69922v-51.7002c0 -2.10059 -1.60059 -3.7002 -3.7002 -3.7002h-22.2002c-2.09961 0 -3.7002 1.59961 -3.7002 3.7002v51.7002c0 2.09961 1.60059 3.69922 3.7002 3.69922h22.2002zM458.2 335.7\n+c28.8994 -40.7002 45.7998 -90.2002 45.7998 -143.7c0 -2 0 -4 -0.0996094 -6c0 -0.700195 0 -1.2998 -0.100586 -2c0 -1.2998 -0.0996094 -2.7002 -0.200195 -4c0 -0.799805 -0.0996094 -1.5 -0.0996094 -2.2998\n+c-0.0996094 -1.2002 -0.0996094 -2.40039 -0.200195 -0.700195c-0.0996094 -0.799805 -0.0996094 -1.59961 -0.200195 -2.40039c-0.0996094 -1.19922 -0.199219 -2.39941 -0.299805 -3.5c-0.0996094 -0.799805 -0.200195 -1.59961 -0.200195 -2.39941\n+c-0.0996094 -1.2002 -0.299805 -2.40039 -0.399414 -3.60059c-0.100586 -0.799805 -0.200195 -1.5 -0.299805 -2.2998c-0.200195 -1.2998 -0.400391 -2.59961 -0.5 -3.89941c-0.100586 -0.600586 -0.200195 -1.30078 -0.300781 -1.90039l-0.899414 -5.7002\n+c-0.100586 -0.599609 -0.200195 -1.09961 -0.299805 -1.7002c-0.200195 -1.2998 -0.5 -2.69922 -0.800781 -4c-0.199219 -0.799805 -0.299805 -1.59961 -0.5 -2.39941c-0.199219 -1.10059 -0.5 -2.2002 -0.699219 -3.2002\n+c-0.200195 -0.900391 -0.400391 -1.7002 -0.600586 -2.59961c-0.200195 -1 -0.5 -2 -0.700195 -3c-0.199219 -0.900391 -0.5 -1.80078 -0.699219 -2.7002c-0.300781 -1 -0.5 -1.90039 -0.800781 -2.90039c-0.199219 -0.899414 -0.5 -1.7998 -0.799805 -2.7002\n+c-0.299805 -0.899414 -0.599609 -1.89941 -0.799805 -2.7998c-0.299805 -0.899414 -0.5 -1.7998 -0.799805 -2.7002c-0.299805 -0.899414 -0.600586 -1.7998 -0.900391 -2.7998c-0.5 -1.59961 -1.09961 -3.2998 -1.7002 -4.89941\n+c-0.299805 -0.900391 -0.599609 -1.80078 -1 -2.80078c-0.399414 -1 -0.699219 -2 -1.09961 -3c-0.299805 -0.799805 -0.599609 -1.5 -0.900391 -2.2998l-1.19922 -3c-0.300781 -0.700195 -0.600586 -1.5 -0.900391 -2.2002c-0.400391 -1 -0.799805 -2 -1.2998 -3\n+l-0.900391 -2.09961c-0.399414 -1 -0.899414 -2 -1.39941 -3c-0.300781 -0.700195 -0.600586 -1.2998 -0.900391 -2c-0.5 -1 -1 -2.09961 -1.5 -3.09961c-0.299805 -0.600586 -0.599609 -1.10059 -0.799805 -1.7002c-0.600586 -1.10059 -1.10059 -2.2002 -1.7002 -3.2998\n+c-0.0996094 -0.200195 -0.200195 -0.300781 -0.299805 -0.5c-2.2002 -4.10059 -4.40039 -8.2002 -6.7998 -12.2002c-0.200195 -0.400391 -0.5 -0.799805 -0.700195 -1.2002c-0.700195 -1.09961 -1.2998 -2.2002 -2 -3.2998\n+c-0.299805 -0.5 -0.600586 -0.900391 -0.900391 -1.40039c-0.700195 -1.09961 -1.39941 -2.09961 -2 -3.2002c-0.299805 -0.5 -0.599609 -0.899414 -0.899414 -1.39941c-0.700195 -1.10059 -1.40039 -2.10059 -2.10059 -3.2002\n+c-0.299805 -0.400391 -0.599609 -0.799805 -0.799805 -1.2002c-0.799805 -1.09961 -1.5 -2.2002 -2.2998 -3.2998c-0.200195 -0.200195 -0.299805 -0.5 -0.5 -0.700195c-37.6006 -54.7002 -94.5 -91.3994 -160.101 -102.399\n+c-0.899414 -0.100586 -1.69922 -0.300781 -2.59961 -0.400391c-1 -0.200195 -2.09961 -0.299805 -3.09961 -0.5c-0.900391 -0.0996094 -1.80078 -0.299805 -2.80078 -0.400391c-1 -0.0996094 -2 -0.299805 -3 -0.399414c-1 -0.100586 -2 -0.200195 -2.89941 -0.299805\n+c-1 -0.100586 -1.90039 -0.200195 -2.90039 -0.300781c-1 -0.0996094 -2.09961 -0.199219 -3.09961 -0.299805c-0.900391 -0.0996094 -1.7998 -0.200195 -2.7002 -0.200195c-1.09961 -0.0996094 -2.2998 -0.0996094 -3.40039 -0.199219\n+c-0.799805 0 -1.69922 -0.100586 -2.5 -0.100586c-1.2998 -0.0996094 -2.59961 -0.0996094 -3.89941 -0.0996094c-0.700195 0 -1.40039 -0.100586 -2.10059 -0.100586c-2 0 -4 -0.0996094 -6 -0.0996094s-4 0 -6 0.0996094c-0.699219 0 -1.39941 0 -2.09961 0.100586\n+c-1.2998 0 -2.59961 0.0996094 -3.90039 0.0996094c-0.799805 0 -1.69922 0.100586 -2.5 0.100586c-1.09961 0.0996094 -2.2998 0.0996094 -3.39941 0.199219c-0.900391 0.100586 -1.7998 0.100586 -2.7002 0.200195c-1 0.100586 -2.09961 0.200195 -3.09961 0.299805\n+c-1 0.100586 -1.90039 0.200195 -2.90039 0.300781c-1 0.0996094 -2 0.199219 -2.90039 0.299805c-1 0.0996094 -2 0.200195 -3 0.399414c-0.899414 0.100586 -1.7998 0.300781 -2.7998 0.400391s-2.09961 0.299805 -3.09961 0.5\n+c-0.900391 0.0996094 -1.7002 0.299805 -2.60059 0.400391c-65.5996 10.8994 -122.5 47.6992 -160 99.3994c-0.199219 0.200195 -0.299805 0.5 -0.5 0.700195c-0.799805 1.09961 -1.59961 2.2002 -2.2998 3.2998c-0.299805 0.400391 -0.599609 0.799805 -0.799805 1.2002\n+c-0.700195 1.09961 -1.40039 2.09961 -2.09961 3.2002c-0.300781 0.5 -0.600586 0.899414 -0.900391 1.39941c-0.700195 1.10059 -1.40039 2.10059 -2 3.2002c-0.299805 0.5 -0.599609 0.900391 -0.900391 1.40039c-0.699219 1.09961 -1.2998 2.2002 -2 3.2998\n+c-0.199219 0.400391 -0.5 0.799805 -0.699219 1.2002c-2.40039 4 -4.60059 8.09961 -6.80078 12.2002c-0.0996094 0.199219 -0.199219 0.299805 -0.299805 0.5c-0.599609 1.09961 -1.09961 2.19922 -1.7002 3.2998c-0.299805 0.599609 -0.599609 1.09961 -0.799805 1.7002\n+c-0.5 1 -1 2.09961 -1.5 3.09961c-0.299805 0.700195 -0.599609 1.2998 -0.899414 2c-0.5 1 -0.900391 2 -1.40039 3l-0.900391 2.09961c-0.399414 1 -0.899414 2 -1.2998 3c-0.299805 0.700195 -0.599609 1.5 -0.899414 2.2002l-1.2002 3\n+c-0.299805 0.799805 -0.600586 1.5 -0.900391 2.2998c-0.399414 1 -0.799805 2 -1.09961 3c-0.299805 0.900391 -0.600586 1.80078 -1 2.80078c-0.600586 1.59961 -1.10059 3.2998 -1.7002 4.89941c-0.299805 0.900391 -0.599609 1.7998 -0.900391 2.7998\n+c-0.299805 0.900391 -0.5 1.80078 -0.799805 2.7002c-0.299805 0.900391 -0.599609 1.90039 -0.799805 2.7998c-0.299805 0.900391 -0.5 1.80078 -0.799805 2.7002c-0.299805 1 -0.5 1.90039 -0.799805 2.90039c-0.200195 0.899414 -0.5 1.7998 -0.700195 2.7002\n+c-0.299805 1 -0.5 2 -0.700195 3c-0.200195 0.899414 -0.400391 1.69922 -0.599609 2.59961c-0.200195 1.09961 -0.5 2.2002 -0.700195 3.2002c-0.200195 0.799805 -0.299805 1.59961 -0.5 2.39941c-0.299805 1.30078 -0.5 2.7002 -0.799805 4\n+c-0.100586 0.600586 -0.200195 1.10059 -0.300781 1.7002l-0.899414 5.7002c-0.100586 0.599609 -0.200195 1.2998 -0.299805 1.90039c-0.200195 1.2998 -0.400391 2.59961 -0.5 3.89941c-0.100586 0.799805 -0.200195 1.5 -0.300781 2.2998\n+c-0.0996094 1.2002 -0.299805 2.40039 -0.399414 3.60059c-0.100586 0.799805 -0.200195 1.59961 -0.200195 2.39941c-0.0996094 1.2002 -0.200195 2.40039 -0.299805 3.5c-0.100586 0.800781 -0.100586 1.60059 -0.200195 2.40039\n+c-0.0996094 1.2002 -0.200195 2.40039 -0.200195 3.7002c0 0.799805 -0.0996094 1.5 -0.0996094 2.2998c-0.100586 1.2998 -0.100586 2.7002 -0.200195 4c0 0.700195 0 1.2998 -0.0996094 2c0 2 -0.100586 4 -0.100586 6c0 53.5 16.9004 103 45.7998 143.6\n+c2.30078 3.2002 4.7002 6.40039 7.10059 9.5c4.89941 6.2002 10.0996 12.3008 15.5996 18c2.7002 2.90039 5.5 5.7002 8.40039 8.40039c2.89941 2.7002 5.7998 5.40039 8.7998 8c4.5 3.90039 9.09961 7.59961 13.9004 11.2002c1.59961 1.2002 3.19922 2.39941 4.7998 3.5\n+c27.2998 19.5996 59 33.7002 93.2998 40.7998c16.0996 3.2998 32.9004 5 50 5s33.7998 -1.7002 50 -5c34.2998 -7 66 -21.0996 93.5996 -40.7002c1.60059 -1.2002 3.2002 -2.2998 4.80078 -3.5c4.7998 -3.59961 9.39941 -7.2998 13.8994 -11.2002\n+c12 -10.3994 23 -21.8994 32.7998 -34.3994c2.5 -3.10059 4.80078 -6.2998 7.10059 -9.5zM448 76.5v71.2998c0 2.10059 -1.59961 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.69922 -1.59961 -3.69922 -3.7002v-25.7998h-29.5v144\n+c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.1006c-2.09961 0 -3.69922 -1.60059 -3.69922 -3.7002v-25.9004h-29.5v25.9004c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-25.9004h-29.5v25.9004\n+c0 4.7998 -6.5 3.7002 -9.5 3.7002v30.7002c6.7002 1.59961 13.7998 2.7998 20.7998 2.7998c8.80078 0 16.8008 -3.5 25.4004 -3.5c3.7002 0 22.4004 0.899414 22.4004 6.5v48.3994c0 2.10059 -1.60059 3.7002 -3.7002 3.7002c-4.2002 0 -12.2002 -3.5 -19.4004 -3.5\n+c-7.89941 0 -16.8994 3.5 -26.2998 3.5c-6.5 0 -12.9004 -0.899414 -19.2002 -2.2998v3.90039c4.40039 2.09961 7.40039 6.69922 7.40039 11.5c0 16.7998 -25.4004 16.7998 -25.4004 0c0 -4.80078 3 -9.5 7.40039 -11.5v-90.2002c-3 0 -9.5 1.09961 -9.5 -3.7002v-25.9004\n+h-29.5v25.9004c0 2.09961 -1.60059 3.7002 -3.7002 3.7002h-22.2002c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-25.9004h-29.5v25.9004c0 2.09961 -1.59961 3.7002 -3.69922 3.7002h-22.1006c-2.09961 0 -3.7002 -1.60059 -3.7002 -3.7002v-144h-29.5996v25.7998\n+c0 2.10059 -1.59961 3.7002 -3.7002 3.7002h-22.0996c-2.10059 0 -3.7002 -1.59961 -3.7002 -3.7002v-71.2998c9.40039 -15.5 20.5996 -29.9004 33.5996 -42.9004c20.6006 -20.5996 44.5 -36.6992 71.2002 -48c13.9004 -5.89941 28.2002 -10.2998 42.9004 -13.1992v75.7998\n+c0 58.5996 88.5996 58.5996 88.5996 0v-75.7998c14.7002 2.89941 29 7.39941 42.9004 13.1992c26.7002 11.3008 50.5996 27.4004 71.2002 48c13 13 24.1992 27.4004 33.5996 42.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"freebsd\" unicode=\"&#xf3a4;\" \n+d=\"M303.7 351.8c11.0996 11.1006 115.5 77 139.2 53.2002c23.6992 -23.7002 -42.1006 -128.1 -53.2002 -139.2c-11.1006 -11.0996 -39.4004 -0.899414 -63.1006 22.9004c-23.7998 23.7002 -34.0996 52 -22.8994 63.0996zM109.9 379.9\n+c-31.6006 -19.4004 -57.9004 -46.5 -76.4004 -78.7002c-20.7998 36.2998 -44.5 89.0996 -27.9004 105.7c16.4004 16.5 68 -6.40039 104.301 -27zM406.7 274c3.2998 5.5 7 11.7998 10.8994 18.7998c17.6006 -31.2998 27.7002 -67.3994 27.7002 -105.8\n+c0 -119.1 -96.5 -215.6 -215.6 -215.6c-119.101 0 -215.601 96.5996 -215.601 215.6c0 119.1 96.5 215.6 215.601 215.6c35.8994 0 69.7002 -8.7998 99.5 -24.2998c-7.2998 -4 -13.9004 -8 -19.6006 -11.5996c-26 4.7002 -32.8994 -16.4004 -14.8994 -48.7002\n+c21.7998 -43.0996 89 -90.4004 109.3 -70.0996c5.40039 5.39941 6 14.7998 2.7002 26.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"gitkraken\" unicode=\"&#xf3a6;\" horiz-adv-x=\"592\" \n+d=\"M565.7 329.9c11.7998 -31.6006 18.2998 -65.7002 18.2998 -101.4c0 -155.1 -122.6 -281.6 -276.3 -287.7v145.8c-8.40039 -0.5 -16.6006 -0.399414 -23.4004 0v-145.899c-153.7 6.2002 -276.3 132.7 -276.3 287.8c0 35.7002 6.5 69.7998 18.2998 101.3\n+c2.2998 6.2002 9.2998 9.2002 15.2998 6.60059c5.7002 -2.40039 8.5 -8.80078 6.30078 -14.6006c-10.9004 -29 -16.9004 -60.5 -16.9004 -93.2998c0 -134.6 100.4 -245.7 230.2 -262.7v123.7c-7.90039 1.59961 -15.4004 3.7002 -23 6.2002v-104\n+c-106.7 26 -185.9 122.1 -185.9 236.8c0 91.7998 50.7998 171.8 125.8 213.3c5.80078 3.2002 13 0.900391 15.9004 -5c2.7002 -5.5 0.700195 -12.0996 -4.7002 -15.0996c-67.8994 -37.7002 -113.899 -110.101 -113.899 -193.2c0 -93.4004 57.8994 -173.2 139.8 -205.4\n+v92.2002c-14.2002 4.5 -24.7998 17.7002 -24.7998 33.5c0 13.1006 6.69922 24.4004 17.2998 30.5c-8.2002 79.6006 -44.5 58.6006 -44.5 83.9004v14.7998c0 38 87.8994 161.7 129.1 164.7c2.60059 0.200195 5.10059 0.200195 7.60059 0\n+c41.0996 -2.90039 129 -126.7 129 -164.7v-14.7002c0 -25.2998 -36.2002 -4.39941 -44.5 -83.8994c10.5 -6.10059 17.2998 -17.4004 17.2998 -30.5c0 -15.8008 -10.7002 -29 -24.9004 -33.5v-92.2002c81.9004 32.2998 139.8 112.1 139.8 205.399\n+c0 83.2002 -46 155.601 -113.899 193.2c-5.2998 2.90039 -7.40039 9.60059 -4.7002 15.1006c2.90039 5.89941 10.2002 8.19922 15.9004 5c75 -41.5 125.8 -121.5 125.8 -213.301c0 -114.699 -79.2002 -210.899 -185.9 -236.8v104\n+c-7.5 -2.59961 -15.0996 -4.7002 -23 -6.2002v-123.699c129.9 17 230.2 128.1 230.2 262.699c0 32.8008 -6 64.3008 -16.9004 93.3008c-2.19922 5.69922 0.600586 12.1992 6.30078 14.5996c6 2.59961 13 -0.5 15.2998 -6.59961zM365.9 172.5\n+c-13.1006 0 -23.7002 -10.5996 -23.7002 -23.7002c0 -13.2002 10.7002 -23.7002 23.7002 -23.7002c13.0996 0 23.6992 10.6006 23.6992 23.7002c0 13.2002 -10.6992 23.7002 -23.6992 23.7002zM226.1 125.2c13.2002 0 23.7002 10.7002 23.7002 23.7002\n+c0 13.0996 -10.5996 23.6992 -23.7002 23.6992c-13.1992 0 -23.6992 -10.6992 -23.6992 -23.6992s10.5 -23.7002 23.6992 -23.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"gofore\" unicode=\"&#xf3a7;\" horiz-adv-x=\"400\" \n+d=\"M324 128.2c54.2998 0 65.7002 -50.1006 67.7002 -77.7002c-46.5 -56.2998 -107.8 -82.5 -171 -82.5c-123.7 0 -220.7 101.5 -220.7 224c0 123.4 98 224 220.7 224c59 0 114.3 -23.2998 156.1 -65.5996l-62.2998 -63.3008c-25 25.4004 -58.2998 39.4004 -93.5996 39.4004\n+c-73.2002 0 -132.4 -60.2998 -132.4 -134.4c0 -74.1992 59.2002 -134.399 132.4 -134.399c33.5996 0 65.3994 12.7002 89.8994 35.7998v34.7002h13.2002zM311.9 240.7c47.6992 0 88.0996 -35 88.0996 -100.2v-30.5996c-15.5 26.6992 -42.5 41.7998 -76 41.7998h-118.4v89\n+h106.301z\" \u002F>\n+    \u003Cglyph glyph-name=\"goodreads\" unicode=\"&#xf3a8;\" \n+d=\"M299.9 256.8c5.09961 -37.2998 -4.7002 -79 -35.9004 -100.7c-22.2998 -15.5 -52.7998 -14.0996 -70.7998 -5.69922c-37.1006 17.2998 -49.5 58.5996 -46.7998 97.1992c4.2998 60.9004 40.8994 87.9004 75.2998 87.5c46.8994 0.200195 71.7998 -31.7998 78.2002 -78.2998\n+zM448 360v-336c0 -30.9004 -25.0996 -56 -56 -56h-336c-30.9004 0 -56 25.0996 -56 56v336c0 30.9004 25.0996 56 56 56h336c30.9004 0 56 -25.0996 56 -56zM330 134.8c0 0 -0.0996094 34 -0.0996094 217.3h-29v-40.2998c-0.800781 -0.299805 -1.2002 0.5 -1.60059 1.2002\n+c-9.59961 20.7002 -35.8994 46.2998 -76 46c-51.8994 -0.400391 -87.2002 -31.2002 -100.6 -77.7998c-4.2998 -14.9004 -5.7998 -30.1006 -5.5 -45.6006c1.7002 -77.8994 45.0996 -117.8 112.399 -115.199c28.9004 1.09961 54.5 17 69 45.1992\n+c0.5 1 1.10059 1.90039 1.7002 2.90039c0.200195 -0.0996094 0.400391 -0.0996094 0.600586 -0.200195c0.299805 -3.7998 0.199219 -30.7002 0.0996094 -34.5c-0.200195 -14.7998 -2 -29.5 -7.2002 -43.5c-7.7998 -21 -22.2998 -34.7002 -44.5 -39.5\n+c-17.7998 -3.89941 -35.5996 -3.7998 -53.2002 1.2002c-21.5 6.09961 -36.5 19 -41.0996 41.7998c-0.299805 1.60059 -1.2998 1.2998 -2.2998 1.2998h-26.7998c0.799805 -10.5996 3.19922 -20.2998 8.5 -29.1992c24.1992 -40.5 82.6992 -48.5 128.199 -37.4004\n+c49.9004 12.2998 67.3008 54.9004 67.4004 106.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"goodreads-g\" unicode=\"&#xf3a9;\" horiz-adv-x=\"384\" \n+d=\"M42.5996 44.7002h2.80078c12.6992 0 25.5 0 38.1992 -0.100586c1.60059 0 3.10059 0.400391 3.60059 -2.09961c7.09961 -34.9004 30 -54.5996 62.8994 -63.9004c26.9004 -7.59961 54.1006 -7.7998 81.3008 -1.7998c33.7998 7.40039 56 28.2998 68 60.4004\n+c8 21.5 10.6992 43.7998 11 66.5c0.0996094 5.7998 0.299805 47 -0.200195 52.7998l-0.900391 0.299805c-0.799805 -1.5 -1.7002 -2.89941 -2.5 -4.39941c-22.0996 -43.1006 -61.2998 -67.4004 -105.399 -69.1006c-103 -4 -169.4 57 -172 176.2\n+c-0.5 23.7002 1.7998 46.9004 8.2998 69.7002c20.5996 71.0996 74.5996 118.2 153.899 118.8c61.3008 0.400391 101.5 -38.7002 116.2 -70.2998c0.5 -1.10059 1.2998 -2.2998 2.40039 -1.90039v61.6006h44.2998c0 -280.301 0.0996094 -332.2 0.0996094 -332.2\n+c-0.0996094 -78.5 -26.6992 -143.7 -103 -162.2c-69.5 -16.9004 -159 -4.7998 -196 57.2002c-8 13.5 -11.7998 28.2998 -13 44.5zM188.9 411.5c-52.5 0.5 -108.5 -40.7002 -115 -133.8c-4.10059 -59 14.7998 -122.2 71.5 -148.601\n+c27.5996 -12.8994 74.2998 -15 108.3 8.7002c47.5996 33.2002 62.7002 97 54.7998 154c-9.7002 71.1006 -47.7998 120 -119.6 119.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-drive\" unicode=\"&#xf3aa;\" horiz-adv-x=\"512\" \n+d=\"M339 133.1l-163.6 282.9h161.199l163.601 -282.9h-161.2zM201.5 109.5h310.5l-80.5996 -141.5h-310.5zM154.1 380.6l82.9004 -141.399l-156.4 -271.2l-80.5996 141.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"google-play\" unicode=\"&#xf3ab;\" horiz-adv-x=\"512\" \n+d=\"M325.3 213.7l-220.7 221.3l280.801 -161.2zM47 448l256.6 -255.9l-256.6 -256c-13 6.80078 -21.7002 19.2002 -21.7002 35.3008v441.3c0 16.0996 8.7002 28.5 21.7002 35.2998zM472.2 222.4c19.2002 -14.3008 19.2002 -46.5 1.2002 -60.8008l-60.1006 -34.0996\n+l-65.7002 64.5l65.7002 64.5zM104.6 -51l220.7 221.3l60.1006 -60.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"gripfire\" unicode=\"&#xf3ac;\" horiz-adv-x=\"384\" \n+d=\"M112.5 146.6c0 -26.8994 16.5996 -47.1992 32.5996 -69.5c22.5 -30.1992 44.2002 -56.8994 44.2002 -86.5c-0.0996094 -14.5 -4.39941 -29.6992 -17.5 -46.3994c0 5.2998 4.7998 12.2002 4.7998 22.2998c0 15.2002 -13 39.9004 -78.0996 86.5996\n+c-34.2998 29.1006 -66.5 58.5 -66.5 108.301c0 114.699 147.1 176.5 147.1 268.6c0 3.2998 -0.199219 6.7002 -0.599609 10c5.09961 -2.40039 39.0996 -43.2998 39.0996 -90.4004c0 -80.5 -105.1 -129.199 -105.1 -203zM317.8 185.6\n+c1.5 -8.39941 2.2002 -16.5996 2.2002 -24.5996c0 -51.7998 -29.4004 -97.5 -67.2998 -136.8c-1 -1 -2.2002 -2.40039 -3.2002 -2.40039c-3.59961 0 -35.5 41.6006 -35.5 53.2002c0 0 41.7998 55.7002 41.7998 96.9004c0 10.7998 -2.7002 21.6992 -9.09961 33.3994\n+c-1.5 -32.2998 -55.7002 -87.7002 -58.1006 -87.7002c-2.69922 0 -17.8994 22 -17.8994 42.1006c0 5.2998 1 10.7002 3.2002 15.7998c2.39941 5.5 56.5996 72 56.5996 116.7c0 6.2002 -1 12 -3.40039 17.0996l-4 7.2002c16.7002 -6.5 82.6006 -64.0996 94.7002 -130.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"grunt\" unicode=\"&#xf3ad;\" horiz-adv-x=\"384\" \n+d=\"M61.2998 258.7c0.5 4.89941 2.7998 10 7 12h0.100586c-4.60059 1.7002 -9.2002 3.09961 -13.5 4.09961c42.1992 10.2002 73.3994 -20.5996 83.0996 -31.7998c16.5996 -19.2002 35.5 -8.7998 35.5 -8.7998c0.299805 -11.1006 -10.2998 -19 -21.0996 -19.5\n+c1.19922 -15.4004 -13.9004 -32.5 -13.9004 -32.5s5.59961 15 2.7002 25.2998c-0.900391 3.2002 -2 6.09961 -3 8.5c-19.2998 -17.2002 -48 -1.5 -54.9004 6.09961c-9.59961 10.6006 -12.3994 23.8008 -12.7998 34.1006c-1.7998 -3.7998 -3.2998 -9.10059 -4 -16.6006\n+c0 0 -6.2998 9.10059 -5.2002 19.1006zM89.5996 260.5c-2.89941 -9.09961 -3.39941 -27.7002 6.90039 -35.2998c16.2998 -12.1006 32.2998 -5 38 -1.7002c-7.5 11.2998 -25.4004 26 -44.9004 37zM231.7 214.7c-10.7998 0.399414 -21.4004 8.39941 -21.2002 19.2998\n+c0 0 18.7998 -10.4004 35.5 8.7998c9.7002 11.2002 40.7998 42 83.0996 31.7998c-4.2998 -0.899414 -8.89941 -2.2998 -13.5 -4.09961h0.100586c4.09961 -1.7998 6.39941 -6.7998 7 -11.7998c1.2002 -10 -5.2002 -19.1006 -5.2002 -19.1006\n+c-0.599609 7.5 -2.2002 12.8008 -4 16.6006c-0.5 -10.2998 -3.2002 -23.5 -12.7998 -34.1006c-6.7998 -7.59961 -35.5 -23.3994 -54.7998 -6.09961c-1 -2.5 -2.10059 -5.2998 -3 -8.5c-2.90039 -10.2998 2.69922 -25.2998 2.69922 -25.2998s-15.0996 17 -13.8994 32.5z\n+M294.4 260.5c-19.5 -11 -37.4004 -25.5996 -44.9004 -37c5.7002 -3.40039 21.5996 -10.5 37.9004 1.59961c10.3994 7.7002 10 26.3008 7 35.4004zM160 29.5c4.09961 0 7 -0.900391 8.7998 -2.7002c2.2002 -2.2998 1.5 -5.2998 0.900391 -6.7998\n+c-1.10059 -2.7002 -5.5 -11.5996 -13 -19.7998c-2.7002 -2.90039 -6.60059 -4.60059 -11 -4.60059c-4.2998 0 -8.7002 1.60059 -11.7998 4.30078c-2.30078 2.09961 -10.2002 9.5 -13.7002 18.5996c-1.2998 3.40039 -1 6.09961 0.899414 8.09961\n+c1.30078 1.30078 4 2.90039 9.5 2.90039h29.4004zM349.2 130.7c0 0 29.2998 -22.5 21.0996 -70.9004c-5.2998 -29.5 -23.2002 -46 -47 -54.7002c-8.7998 -19.0996 -29.3994 -45.6992 -67.2998 -49.5996c-14.5 -11.7998 -34.5 -19.5 -63.5996 -19.5h-0.200195\n+c-29.2002 0 -49.2002 7.7002 -63.6006 19.5c-37.8994 3.90039 -58.5 30.5 -67.2998 49.5996c-23.7998 8.60059 -41.7998 25.2002 -47 54.7002c-8.59961 48.2002 20.6006 70.7998 20.6006 70.7998c2.39941 -17.8994 13 -33.8994 24.5996 -43.7998\n+c3.09961 22.7002 3.7002 55.5 3.7002 62.4004c0 14.7002 -9.5 24.5 -12.2002 26.0996c-2.5 1.5 -5.2998 3 -8.2998 4.60059c-18 9.59961 -40.4004 21.5996 -40.4004 43.6992c0 16.1006 9.2998 23.2002 15.4004 27.8008c0.799805 0.599609 1.5 1.19922 2.2002 1.69922\n+c2.09961 1.7002 3.69922 3 4.2998 4.40039c4.39941 9.7998 3.59961 34.2002 1.7002 37.5996c-0.600586 0.700195 -16.8008 21 -11.8008 39.2002c2 7.40039 6.90039 13.2998 14.1006 17c5.2998 2.7002 11.7998 4.2002 19.5 4.5c0.0996094 2 0.5 4 0.899414 5.90039\n+c0.5 2.59961 1.10059 5.2998 0.900391 8.09961c-0.400391 4.7002 -0.799805 9.10059 -2.2002 11.2998c-8.39941 13.3008 -28.7998 17.6006 -29 17.6006l-12.2998 2.39941l8.09961 9.40039c0.200195 0.200195 17.3008 17.5 46.3008 17.5c7.89941 0 16 -1.2998 23.8994 -3.5\n+c24.2998 -7.7998 42.9004 -30.5 49.4004 -39.2998c2 0.599609 3.89941 1.2002 5.89941 1.7002c-1 26.3994 20.7002 47.3994 28.2002 48.2998c0.5 -4.5 -0.399414 -22.2002 7.2002 -27.6006c2.2002 14.4004 9.59961 30.3008 39.0996 40.7002\n+c-6.2998 -16.7002 -0.799805 -30.7002 1.80078 -37.2002c20.0996 18.2002 33.6992 15.2002 33.6992 15.2002s-13.1992 -22.7002 -9 -38.5c3.30078 -0.799805 6.5 -1.7002 9.60059 -2.7002c6.5 8.80078 25.2002 31.5 49.3994 39.3008\n+c8.10059 2.59961 16.2002 3.89941 24.1006 3.89941c29 0 46.2002 -17.2998 46.2998 -17.5l8.09961 -9.5l-12.2998 -2.39941c-0.200195 0 -20.5996 -4.30078 -29 -17.6006c-1.39941 -2.2998 -1.7998 -6.59961 -2.2002 -11.2998\n+c-0.199219 -2.7998 0.300781 -5.5 0.900391 -8.09961c0.400391 -2 0.799805 -3.90039 0.900391 -5.90039c7.59961 -0.299805 14.1992 -1.7998 19.5 -4.5c7.19922 -3.7002 12.0996 -9.59961 14.0996 -17c4.90039 -18.2998 -11.2002 -38.5996 -11.7998 -39.2002\n+c-1.90039 -3.39941 -2.7002 -27.7998 1.7002 -37.5996c0.599609 -1.40039 2.19922 -2.7002 4.2998 -4.40039c0.700195 -0.599609 1.39941 -1.09961 2.2002 -1.7002c6.09961 -4.59961 15.3994 -11.5996 15.3994 -27.7998c0 -22.0996 -22.3994 -34.0996 -40.3994 -43.7002\n+c-2.90039 -1.59961 -5.80078 -3.09961 -8.30078 -4.59961c-2.69922 -1.59961 -12.1992 -11.4004 -12.1992 -26.0996c0 -6.90039 0.599609 -39.7002 3.69922 -62.4004c11.6006 9.90039 22.2002 25.7998 24.6006 43.7002zM305.7 410.3\n+c-17.7998 -5.7002 -31.6006 -23.0996 -37.7002 -32.2002c1.59961 -0.699219 3.09961 -1.39941 4.7002 -2.19922c2.59961 -1.2002 4.89941 -2.40039 7.09961 -3.7002c2.7002 5.5 8.40039 13.7002 20.7002 22.3994c8.2002 5.80078 18.2002 8.90039 28.7002 8.90039\n+c3.59961 0 6.7998 -0.400391 9.2002 -0.799805c3.2998 2.09961 6.59961 3.89941 9.69922 5.2998c-4.7998 2 -13.6992 5 -24.6992 5c-6.10059 0 -12.1006 -0.900391 -17.7002 -2.7002zM326.7 392.1c-7.40039 -0.299805 -14 -2.69922 -19.6006 -7\n+c-8 -6.39941 -12.0996 -17.6992 -13.5 -22.5c4.90039 -4.19922 8.2002 -8.09961 10.5 -11.1992c3.40039 1 7.30078 1.89941 11.5 2.69922c3.30078 4.5 3.90039 10.6006 4.40039 17c0.5 6.2002 1.09961 12.6006 4.40039 17.8008c0.699219 1.09961 1.5 2.19922 2.2998 3.19922\n+zM45.5996 402.7c2.40039 0.399414 5.60059 0.799805 9 0.899414c10.6006 0 20.5 -3.09961 28.8008 -8.89941c12.3994 -8.7002 18.0996 -17 20.6992 -22.4004c2.2002 1.2002 4.60059 2.5 7.10059 3.7002c1.59961 0.799805 3.2002 1.5 4.7998 2.2002\n+c-6.09961 8.89941 -19.9004 26.2998 -37.7002 32.0996c-5.7002 1.7998 -11.5996 2.7002 -17.7002 2.7002c-11 0 -19.8994 -3 -24.6992 -5c3.09961 -1.2998 6.39941 -3.09961 9.69922 -5.2998zM90.2998 362.6c-1.39941 4.80078 -5.5 16.1006 -13.5 22.4004\n+c-5.5 4.40039 -12.0996 6.7002 -19.5 7c0.799805 -1 1.60059 -2.09961 2.2998 -3.2002c3.30078 -5.2002 3.90039 -11.5996 4.40039 -17.7998c0.5 -6.40039 1 -12.5 4.2998 -16.9004c4.2002 -0.799805 8.10059 -1.7998 11.5 -2.69922c2.2002 3.19922 5.60059 7 10.5 11.1992z\n+M58.0996 188.1c8.7002 -5 18.1006 -16.7998 19 -34.1992c0.900391 -14.7002 -0.899414 -49.9004 -3.39941 -75.9004c12.5 -4.7998 26.7002 -6.40039 39.7002 -6.7998c2 4.09961 3.89941 8.5 5.5 13.0996c0.699219 1.90039 19.5996 51 26.3994 62.2002\n+c-5.39941 -39 -17.5 -73.7002 -23.5 -89.5996c3.40039 0.399414 7.2998 0.699219 11.7002 0.699219h117c4.40039 0 8.2002 -0.199219 11.7002 -0.699219c-6 15.8994 -18 50.5996 -23.5 89.5996c6.7998 -11.0996 25.7002 -60.2002 26.3994 -62.2002\n+c1.60059 -4.59961 3.5 -9 5.5 -13.0996c13 0.399414 27.3008 2 39.7002 6.7998c-2.5 26 -4.2998 61.2998 -3.39941 75.9004c1.09961 17.5 10.3994 29.1992 19.0996 34.1992c2.7002 1.5 5.5 3.10059 8.40039 4.60059c14.7998 8 30.1992 16.2998 30.1992 30.5\n+c0 11.0996 -4.2998 14.5 -8.89941 18.2002l-0.5 0.399414c-0.700195 0.600586 -1.5 1.2002 -2.2002 1.7998c0.900391 -7.19922 1.90039 -13.2998 2.7002 -14.8994c0 0 -12.1006 15 -15.7002 44.2998c-1.40039 11.5 1.09961 34.2002 5.09961 43\n+c-0.199219 -4.90039 0 -9.7998 0.300781 -14.4004c0.399414 0.900391 0.799805 1.60059 1.2998 2.2002c3.2998 4 11.8994 17.5 9.39941 26.6006c-1 3.39941 -3.19922 6 -6.69922 7.7998c-3.80078 1.89941 -8.80078 2.89941 -15.1006 2.89941\n+c-12.2998 0 -25.8994 -3.7998 -32.8994 -6c-25.1006 -7.89941 -55.4004 -30.8994 -64.1006 -37.6992c-0.200195 -0.200195 -0.399414 -0.300781 -0.399414 -0.300781l-5.60059 -3.89941l3.5 5.7998c0.200195 0.299805 19.1006 31.4004 53.1006 46.5\n+c-2 2.90039 -7.40039 8.2002 -21.6006 15.0996c-21.3994 10.5 -46.3994 15.8008 -74.2998 15.8008c-27.7998 0 -52.9004 -5.30078 -74.2998 -15.8008c-14.2002 -7 -19.6006 -12.1992 -21.6006 -15.0996c34.1006 -15.0996 53 -46.2002 53.2002 -46.5l3.5 -5.7998\n+l-5.59961 3.89941s-0.200195 0.100586 -0.400391 0.300781c-8.7002 6.7998 -39 29.6992 -64.0996 37.6992c-7 2.30078 -20.6006 6 -32.9004 6c-6.2998 0 -11.2998 -1 -15.0996 -2.89941c-3.60059 -1.7998 -5.7998 -4.2998 -6.7002 -7.7998\n+c-2.40039 -9.10059 6.2002 -22.6006 9.40039 -26.6006c0.5 -0.599609 0.899414 -1.39941 1.2998 -2.2002c0.299805 4.60059 0.5 9.5 0.299805 14.4004c4 -8.7002 6.5 -31.5 5.09961 -43c-3.59961 -29.2998 -15.6992 -44.2998 -15.6992 -44.2998\n+c0.799805 1.59961 1.7998 7.7002 2.69922 14.8994c-0.799805 -0.599609 -1.5 -1.19922 -2.19922 -1.7998l-0.5 -0.399414c-4.60059 -3.60059 -8.90039 -7.10059 -8.90039 -18.2002c0 -14.2002 15.2998 -22.5 30.2002 -30.5c2.7998 -1.5 5.7002 -3 8.39941 -4.60059z\n+M34.7998 43.4004c11.9004 -19.7002 35.5 -29.4004 58.2002 -29.5c-4.5 13.2998 -3.09961 24 4.09961 31.7998l1.40039 1.39941c1.7998 2.40039 4.2998 5.80078 7 10c-27.2002 1.10059 -63.5 11 -74.4004 45.4004c-5 -5 -8.39941 -39.0996 3.7002 -59.0996zM80.5 -0.0996094\n+c6.5 -9.5 16.5 -19.6006 30.9004 -25.5c-4.90039 7.19922 -8.80078 15.0996 -12.3008 23.0996c-6.39941 0.5 -12.5996 1.2998 -18.5996 2.40039zM192 -50.2002c60.5996 0.100586 78.2998 45.9004 84.9004 64.7002c3.59961 10.5 3.2998 18.2998 -0.900391 23.0996\n+c-2.7998 3.30078 -9.5 7.2002 -24.5996 7.2002h-118.801c-15.0996 0 -21.6992 -3.89941 -24.5996 -7.2002c-4.2998 -4.89941 -4.59961 -12.5996 -0.900391 -23.0996c6.60059 -18.9004 24.3008 -64.5996 84.9004 -64.7002zM272.6 -25.5996\n+c14.4004 5.89941 24.4004 16 30.9004 25.5c-6 -1.10059 -12.2002 -1.90039 -18.5996 -2.40039c-3.5 -8 -7.40039 -15.9004 -12.3008 -23.0996zM349.2 43.4004c12.2002 19.8994 8.7998 54 3.7998 59c-10.9004 -34.4004 -47.2002 -44.2002 -74.4004 -45.4004\n+c2.7002 -4.2002 5.2002 -7.59961 7 -10c0.5 -0.5 1 -1 1.40039 -1.5c7.2002 -7.7002 8.59961 -18.5 4.09961 -31.7998c22.5 0.399414 46.1006 10 58.1006 29.7002zM191.9 260.3c-12.7002 0.200195 -27.2002 17.7998 -27.2002 17.7998\n+c9.89941 -6 18.7998 -8.09961 27.2998 -8.2998c8.5 0.200195 17.4004 2.2998 27.2998 8.2998c0 0 -14.5 -17.6992 -27.2002 -17.7998h-0.199219zM253.6 29.5996c5.40039 -0.0996094 8.10059 -1.69922 9.40039 -3c1.90039 -1.89941 2.2002 -4.59961 0.900391 -7.89941\n+c-3.5 -8.90039 -11.4004 -16.1006 -13.7002 -18.1006c-3.10059 -2.59961 -7.40039 -4.19922 -11.7998 -4.19922c-4.40039 0 -8.30078 1.59961 -11 4.5c-7.5 8 -12 16.6992 -13 19.2998c-0.600586 1.5 -1.30078 4.39941 0.899414 6.7002\n+c1.7002 1.7998 4.7002 2.69922 8.90039 2.69922h29.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"gulp\" unicode=\"&#xf3ae;\" horiz-adv-x=\"256\" \n+d=\"M209.8 56.9004l-14.0996 -24.6006l-4.60059 -80.2002c0 -8.89941 -28.2998 -16.0996 -63.0996 -16.0996s-63.0996 7.2002 -63.0996 16.0996l-5.80078 79.4004l-14.8994 25.4004c41.2002 -17.3008 126 -16.7002 165.6 0zM13.7998 310.2\n+c30.7002 -17 197.8 -16.9004 228.3 0.200195l-14.7998 -136.801c-4.7998 -4.19922 -11.5996 -10.1992 -16.5996 -14.0996c-1.60059 -1.2002 -6 -4.7002 -8 -4.7002c-1.2998 0 -2.2002 0.5 -2.2002 1.7998c0.0996094 1 3.40039 4.5 5 6.40039\n+c4.90039 5.7002 13.7998 16 13.7998 23.4004c0 7 -10.7002 14.0996 -25.7002 0.199219c-1.59961 -1.5 -3.09961 -3 -4.5 -4.5c0.400391 1.10059 1.10059 5.10059 1.10059 6.2002c0 2.7998 -1.40039 4 -4.2002 4c-1 0 -1.90039 -0.599609 -2.7002 -1.59961\n+c-2.59961 -3.10059 -3.89941 -7.5 -5.2998 -11.2998c-0.5 -1.80078 -1.09961 -3.60059 -1.7002 -5.5c-0.399414 -0.200195 -0.700195 -0.300781 -0.899414 -0.600586c-3.80078 -3.89941 -17.7002 -17 -23.1006 -17c-2.2998 0 -1.59961 3.60059 -1 5.7998\n+c1 3.40039 6.7998 17.7002 8.7002 22.3008c4.59961 11.0996 8 19.7998 13.2002 31.8994c3.89941 9.2002 3.7998 8.60059 4.5 10.5c0.700195 2.10059 0.700195 4.90039 -1 6.2002c-1 0.700195 -2 1.09961 -3.2002 1.09961c-2.40039 0 -4.7998 -1.39941 -6.09961 -4.69922\n+c-25.5 -64.4004 -25.2002 -63.3008 -26.4004 -68.2002c-2 -1.7002 -4.40039 -3.40039 -6.7998 -4.5c-3.10059 -1.40039 -6.7998 -2.2002 -6.7998 1.2002c0 3.69922 1.39941 8.19922 2.69922 11.6992c2.2002 6.10059 4.90039 11.1006 6.90039 16.7002\n+c0.900391 2.40039 1.2998 4.7002 -0.400391 6.90039c-0.799805 1 -1.89941 1.5 -3.19922 1.5c-2.60059 0 -4.10059 -2.60059 -5.2002 -5.10059c-0.700195 -1.5 -1.2998 -3.09961 -1.7998 -4.7998c-1.2002 -4 -3.60059 -8.7002 -5.60059 -12.2998\n+c-2.7998 -5 -6.5 -10.0996 -11.0996 -13.5c-2.2002 -1.59961 -4.5 -2.40039 -6.90039 -2.40039c-3.5 0 -2.39941 5.7002 -1.5 9c2.2002 7.80078 5.5 13.3008 9.2998 20.8008c1.30078 2.69922 2.30078 5.39941 -0.299805 7.19922c-0.5 0.300781 -1 0.5 -1.59961 0.700195\n+c-3.40039 0.900391 -6 -1.09961 -7.60059 -4.5c-3.09961 -6.2998 -5.39941 -11.7002 -7.09961 -16.2002c-3.2998 -8.89941 -6.90039 -18.2998 -4.59961 -23.7998c1.5 -3.7002 4.5 -5.09961 8.59961 -5.09961c9.7998 0 17.7998 6.7002 22.4004 14.8994\n+c-4.30078 -19.7998 8.19922 -17.2998 20 -8.09961c0.0996094 -0.400391 0.0996094 -0.799805 0.199219 -1.2002c1.5 -6.7002 8.7002 -6.7002 14.5 -4.09961c3.5 1.59961 8.2002 4.5 14.4004 10.5c0.200195 0.299805 0.799805 1.39941 -0.799805 -2.2998\n+c-7.2002 -16.2002 -13.5 -28.2002 -15 -34.3008c-0.200195 -0.899414 -0.299805 -1.7998 -0.299805 -2.69922c0 -1.80078 0.399414 -3.10059 1.2998 -3.7002c1.59961 -1.2002 4.2002 -1.2998 6.09961 -0.299805c1.7998 1 3.10059 2.59961 4 4.5\n+c1 2.19922 0.200195 0.699219 5.2002 14c5 13.3994 2.90039 7.7998 9.09961 22c1.90039 4.2998 4.2002 9.5 8.5 15.5c2.5 3.39941 5.5 7 8.7002 9.69922c5.7002 4.7002 11.7002 5.40039 11.7002 2.5c0 -2.19922 -3.2998 -6.39941 -4.7002 -8.09961\n+c-5.2998 -6.7002 -14.3994 -16.2998 -14.3994 -21.5c0 -9.5 12 -8 17.3994 -5.7002c7.2998 3.2002 13.9004 9.60059 19.6006 14.7998l-10.9004 -94.5996c-1.90039 -4.90039 -39.0996 -17.0996 -88.2002 -17.0996c-49 0 -86.2002 12.0996 -88.2002 17.0996l-7.59961 79.5996\n+c2.09961 -1.5 4.2998 -2.39941 7.7002 -2.39941c7.39941 0 16.0996 6.7002 21.5 11.7998c2.2998 2.2002 4.39941 4.40039 6.39941 6.59961c-1 -3 -7.09961 -22 -7.2998 -25.1992c-0.0996094 -1 -0.200195 -4.90039 0.799805 -6.30078\n+c0.5 -0.799805 1.40039 -1.19922 2.60059 -1.19922c2.89941 0 5.59961 4.69922 6.2998 7.5c0 0 1.7998 6.2998 7.59961 25.7998c6.30078 21.0996 10 24.5 10 34.7002c0 5.59961 -7.2998 6.7998 -9.89941 0l-5.2002 -15.5c-2.2002 -4.5 -8 -11.5 -12.5 -16\n+c-3.5 -3.5 -10.7998 -10.1006 -15.7998 -10.1006c-2.40039 0 -3.90039 1.40039 -4.90039 3.60059c-2.2998 5.2998 -0.899414 14.2998 0.600586 19.8994c2.59961 9.7002 6.89941 19.4004 12 28.2002c4.19922 7.2998 10.1992 15.7002 17.0996 20.7002\n+c6.59961 4.7998 12.7998 4.5 16.9004 -2.7998c1.5 -2.7002 3.7998 -7.30078 6.7998 -7.30078c2.5 0 5.7002 2.60059 4.5 9.10059c-0.5 2.5 -4.90039 8.7998 -10.1006 11.7998c-6 3.59961 -12.3994 3.59961 -18.6992 0.900391\n+c-19.2002 -8.2002 -34.1006 -35.2002 -40 -55.2002zM243.5 318.7c0 -21 -231.2 -21 -231.2 0c0 8.7998 51.7998 15.8994 115.601 15.8994c9 0 17.7998 -0.0996094 26.2998 -0.399414l12.5996 48.7002l61.2998 64.5c1.40039 1.39941 5.80078 0.199219 9.90039 -3.5\n+c4.09961 -3.7002 6.59961 -7.90039 5.2998 -9.30078l-0.0996094 -0.0996094l-57.2998 -60.5l-10 -40.7002c39.8994 -2.59961 67.5996 -8.09961 67.5996 -14.5996zM174.1 314.1c0 0.800781 -0.899414 1.5 -2.5 2.10059l-0.199219 -0.799805\n+c0 -1.30078 -5 -2.40039 -11.1006 -2.40039c-6.09961 0 -11.0996 1.09961 -11.0996 2.40039c0 0.0996094 0 0.199219 0.0996094 0.299805l0.200195 0.700195c-1.7998 -0.600586 -3 -1.40039 -3 -2.30078c0 -2.09961 6.2002 -3.69922 13.7002 -3.69922\n+c7.7002 -0.100586 13.8994 1.59961 13.8994 3.69922z\" \u002F>\n+    \u003Cglyph glyph-name=\"hacker-news-square\" unicode=\"&#xf3af;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM21.2002 218.8h-0.200195c0.0996094 0.100586 0.200195 0.299805 0.299805 0.400391c0 -0.100586 0 -0.299805 -0.0996094 -0.400391z\n+M239.2 164.9l80.7998 155.1h-34.7998c-54.7998 -101.2 -48.2998 -98.5996 -60.6006 -125.6c-10.0996 24.3994 -6.7998 27.2998 -59.2998 125.6h-37.2998l79.7998 -153.3v-102.7h31.4004v100.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"hire-a-helper\" unicode=\"&#xf3b0;\" horiz-adv-x=\"512\" \n+d=\"M443.1 448c3.90039 -36.4004 32.5 -65.7998 68.9004 -71.7002v-370.5c-35.4004 -4 -64.9004 -33.3994 -67.9004 -69.7998h-372.199c-5.90039 36.4004 -34.5 63.9004 -71.9004 68.7998v371.5c37.4004 3.90039 67.9004 34.4004 71.9004 71.7002h371.199zM406.1 43.0996\n+c7.80078 0 5.80078 10.8008 0 10.8008c-10.2998 3.39941 -13.5 3.59961 -21.6992 13.7998c-7.80078 12.8994 -7.90039 44.3994 -7.90039 127.8v101.2c0 22.0996 12.2002 28.2998 28.5996 32.3994c8.90039 2.2002 3.90039 11.8008 -1 11.8008\n+c-36.5 0 -20.5996 -2 -57.0996 -2c-32.7002 0 -16.5 2 -49.2002 2c-3.2998 0 -8.5 -8.30078 -1 -10.8008c4.90039 -1.59961 27.6006 -3.69922 27.6006 -39.2998c0 -45.5996 0.199219 -55.7998 -1 -68.7998c0 -1.2998 -2.30078 -12.7998 -12.8008 -12.7998h-109.199\n+c-10.5 0 -12.8008 11.5 -12.8008 12.7998c-1.19922 13 -1 23.2002 -1 68.7998c0 35.6006 22.7002 37.7002 27.6006 39.2998c7.5 2.5 2.2998 10.8008 -1 10.8008c-32.7002 0 -16.5 -2 -49.2002 -2c-36.5 0 -20.5996 2 -57.0996 2c-5 0 -9.80078 -9.60059 -1 -11.8008\n+c16.3994 -4.09961 28.5996 -10.1992 28.5996 -32.3994v-101.2c0 -83.4004 -0.200195 -114.9 -7.90039 -127.8c-8.19922 -10.2998 -11.5 -10.4004 -21.6992 -13.7998c-5.80078 0 -7.90039 -10.8008 0 -10.8008c36.2998 0 18.7998 2 55.0996 2c35.7998 0 21 -2 56.0996 -2\n+c6 0 4.90039 8.2002 0 9.80078c-22.7998 7.59961 -22.8994 10.2998 -24.5996 12.7998c-10.4004 15.5996 -5.90039 83 -5.90039 113c0 5.2998 6.40039 12.7998 13.8008 12.7998h111.199c7.40039 0 13.8008 -7.5 13.8008 -12.7998c0 -30 4.5 -97.4004 -5.90039 -113\n+c-1.7002 -2.60059 -1.7998 -5.2002 -24.5996 -12.7998c-4.90039 -1.60059 -5.90039 -9.80078 0 -9.80078c35.0996 0 20.2998 2 56.0996 2c36.2998 0 18.7998 -2 55.0996 -2z\" \u002F>\n+    \u003Cglyph glyph-name=\"hotjar\" unicode=\"&#xf3b1;\" \n+d=\"M414.9 286.5c30 -53 41.7998 -121.6 26.2998 -180.9c-14.7002 -56.6992 -68.2998 -120.3 -148.8 -145.6c54.5 76.9004 43.8994 200.1 -27.1006 215.5c54.2002 -93.9004 -53.7002 -180.3 -110.8 -93.9004c-2.5 -7.19922 -25.0996 -74.5 4.09961 -129.6\n+c-61.0996 9.09961 -117.8 33.5 -144.6 93.4004c-35 78.1992 -2.7002 149.8 79 204.899c129.2 87.2998 28.0996 197.7 28.0996 197.7s219.101 -29 293.801 -161.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"hubspot\" unicode=\"&#xf3b2;\" horiz-adv-x=\"512\" \n+d=\"M267.4 236.4l-163.2 114.699c-7.90039 -4.69922 -17 -7.59961 -26.7998 -7.59961c-28.8008 0 -52.2002 23.4004 -52.2002 52.2998c0 28.7998 23.3994 52.2002 52.2002 52.2002c28.8994 0 52.3994 -23.4004 52.3994 -52.2002c0 -4.7998 -0.799805 -9.39941 -2 -13.7998\n+c51.4004 -39.0996 141.3 -103.9 168.9 -124.8c13.0996 6.89941 27.5 11.5 42.7002 13.5996v61.2002c-17.5 7.40039 -28.2002 23.7998 -28.2002 42.9004c0 26.0996 20.5996 47.8994 46.7002 47.8994c26.0996 0 47 -21.7998 47 -47.8994\n+c0 -19.1006 -10.7002 -35.5 -28.2002 -42.9004v-61.5996c62.5 -9.5 110.2 -63.5 110.2 -128.7c0 -71.9004 -58.1006 -130.2 -130 -130.2c-29.9004 0 -57.3008 10 -79.3008 26.9004l-50 -50.2002c1.30078 -3.90039 1.90039 -7.90039 1.90039 -12.1006\n+c0 -10.6992 -4.2002 -20.8994 -11.7998 -28.5c-7.7002 -7.69922 -17.7998 -11.5996 -28.6006 -11.5996c-10.6992 0 -20.8994 4 -28.5 11.5996c-7.59961 7.60059 -11.7998 17.7002 -11.7998 28.5c0 10.8008 4.2002 21 11.7998 28.6006\n+c7.60059 7.59961 17.7002 11.7998 28.5 11.7998c4.90039 0 9.60059 -0.900391 14 -2.5l49.5 49.7998c-16.2998 21.7002 -26 48.7002 -26 78c0 37.2998 15.7002 70.9004 40.8008 94.6006zM356.9 72.7998c38.0996 0 69 30.9004 69 69c0 38.1006 -30.9004 69 -69 69\n+c-38.1006 0 -69 -30.8994 -69 -69c0 -38.0996 30.8994 -69 69 -69z\" \u002F>\n+    \u003Cglyph glyph-name=\"itunes\" unicode=\"&#xf3b4;\" \n+d=\"M223.6 367.7c94.5 0 171.2 -76.7002 171.2 -171.3c0 -94.5 -76.5996 -171.2 -171.2 -171.2c-94.5996 0 -171.1 76.7998 -171.1 171.3s76.5 171.2 171.1 171.2zM303 127.7c1.40039 6.2002 0.900391 -3 1 167.6c0 5.7002 -3.2998 9.10059 -9 8.7002\n+c-1.7998 0 -14.0996 -2.40039 -115.1 -21.4004c-0.900391 0 -4.60059 -1 -6.7002 -2.69922c-2 -1.60059 -3.10059 -3.80078 -3.5 -6.40039c-1.7002 -6.7002 2.39941 -128 -2.60059 -133.7c-2.09961 -2.5 -4.69922 -3.2002 -7.69922 -3.7002\n+c-17.7002 -3.19922 -29.6006 -4.7998 -38 -12.7998c-14.5 -14.2002 -7 -38.8994 14.3994 -42.8994c8 -1.40039 23.1006 0.599609 31.4004 5.19922c7.2998 3.80078 12.7998 10.6006 14.8994 19.6006c1.7002 7.7002 1.2002 2.39941 1.2002 118.5\n+c0 5.7002 1.7002 7.2002 6.7002 8.2998c0 0 87.9004 16.4004 91.9004 17.0996c5.69922 1 8.39941 -0.5 8.39941 -6.09961c0 -78.7998 1 -77.2002 -2.2002 -80.7998c-2.09961 -2.5 -4.69922 -3.2002 -7.69922 -3.7002c-17.7002 -3.2002 -29.6006 -4.7998 -38 -12.7998\n+c-10.6006 -10.4004 -10.4004 -26.7998 1.39941 -36.7998c9.7002 -7.80078 19.7998 -7.2002 31.9004 -5c13.7998 2.59961 24.0996 10.1992 27.2998 23.7998zM345.2 416c56.8994 0 102.8 -45.9004 102.8 -102.8v-242.4c0 -56.8994 -45.7998 -102.8 -102.8 -102.8h-242.4\n+c-56.8994 0 -102.8 45.9004 -102.8 102.8v242.4c0 56.8994 45.9004 102.8 102.8 102.8h242.4zM223.6 4c106.301 0 192.5 86.2002 192.5 192.5s-86.1992 192.5 -192.5 192.5c-106.3 0 -192.5 -86.2002 -192.5 -192.5s86.2002 -192.5 192.5 -192.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"itunes-note\" unicode=\"&#xf3b5;\" horiz-adv-x=\"384\" \n+d=\"M381.9 59.7998c-6.40039 -27.3994 -27.2002 -42.7998 -55.1006 -48c-24.5 -4.5 -44.8994 -5.59961 -64.5 10.2002c-23.8994 20.0996 -24.2002 53.4004 -2.7002 74.4004c17 16.1992 40.9004 19.5 76.8008 25.7998c6 1.09961 11.1992 2.5 15.5996 7.39941\n+c6.40039 7.2002 4.40039 4.10059 4.40039 163.2c0 11.2002 -5.5 14.2998 -17 12.2998c-8.2002 -1.39941 -185.7 -34.5996 -185.7 -34.5996c-10.2002 -2.2002 -13.4004 -5.2002 -13.4004 -16.7002c0 -234.7 1.10059 -223.899 -2.5 -239.5\n+c-4.2002 -18.2002 -15.3994 -31.8994 -30.2002 -39.5c-16.7998 -9.2998 -47.1992 -13.3994 -63.3994 -10.3994c-43.2002 8.09961 -58.4004 58 -29.1006 86.5996c17 16.2002 40.9004 19.5 76.8008 25.7998c6 1.10059 11.1992 2.5 15.5996 7.40039\n+c10.0996 11.5 1.7998 256.6 5.2002 270.2c0.799805 5.19922 3 9.59961 7.09961 12.8994c4.2002 3.5 11.7998 5.5 13.4004 5.5c204 38.2002 228.899 43.1006 232.399 43.1006c11.5 0.799805 18.1006 -6 18.1006 -17.6006c0.200195 -344.5 1.09961 -326 -1.7998 -338.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"jenkins\" unicode=\"&#xf3b6;\" horiz-adv-x=\"512\" \n+d=\"M487.1 23c1.5 -11.9004 -5.2998 -28.2998 -8.69922 -39.7002c-4.90039 -16.2998 -9.7002 -31.8994 -14.6006 -47.2002h-422c-0.700195 1.90039 -1.39941 4 -2.09961 6c-4.60059 14.2002 -12.6006 31.7002 -14.7002 45.8008\n+c-3.09961 20.8994 16.5996 22.0996 29.2002 31.0996c19.5 14 34.7998 21.7998 55.8994 34.2998c6.30078 3.7998 25.1006 13.2002 27.3008 17.6006c4.2998 8.69922 -7.30078 20.8994 -10.4004 27.6992c-4.90039 10.7002 -7.5 19.8008 -8.2002 30.4004\n+c-17.7002 2.7998 -31.0996 13.2998 -39.2002 25.2002c-13.3994 19.7002 -22.6992 56 -11.0996 83.7002c0.900391 2.19922 5.40039 6.5 6.09961 9.7998c1.40039 6.59961 -2.5 15.3994 -2.69922 22.3994c-1.2002 36 6.09961 67 30.2998 77.8008\n+c9.7998 39.0996 45 52.1992 78.0996 71.5996c12.2998 7.2998 26 11.9004 40.1006 17.0996c50.5 18.7002 128.1 15.1006 170.1 -16.5996c17.7998 -13.5 46.2002 -41.9004 56.4004 -62.5c26.8994 -54.2998 25 -145.1 6.19922 -211.2\n+c-2.5 -8.89941 -6.19922 -21.8994 -11.2998 -32.5996c-3.59961 -7.40039 -14.7002 -22.2998 -13.2998 -28.9004c1.40039 -6.7998 25.2998 -24.8994 30.4004 -29.8994c9.19922 -8.80078 26.7998 -20.7002 28.1992 -31.9004zM205.9 414.3\n+c-33.2002 -9.39941 -75.7002 -33.5 -89.3008 -63.3994c10.6006 1.5 17.9004 6.7998 28.3008 7.5c3.89941 0.299805 9.09961 -1.60059 13.5996 -0.5c9 2.2998 16.5996 22.5 23.4004 30c6.59961 7.39941 14.5996 10.5 20 17.1992c3.5 1.7002 8.69922 1.60059 8.89941 6.80078\n+c-1.5 1.69922 -3.09961 2.89941 -4.89941 2.39941zM101.1 320.7c-14.6992 -16.1006 -11.5996 -46.2998 -9.7998 -67.7998c26.5 16.6992 61.6006 -1.30078 61.2998 -29.6006c12.6006 0.299805 4.7002 15.7998 2.40039 25.7002c-7.5 32.5996 12.5996 67.9004 0.900391 97.5996\n+c-22.7002 -1.7998 -41.3008 -11 -54.8008 -25.8994zM137.8 120.5c4.90039 -20 15.7002 -46 26.2998 -61.4004c13.6006 -19.3994 40.1006 -22.2998 68.7002 -24.1992c5.10059 11 23.9004 10.0996 36.2002 7.19922c-14.7002 5.80078 -28.4004 19.9004 -39.7002 32.4004\n+c-13 14.2998 -26.0996 29.7002 -26.7998 48.4004c24.5 -34 44.7998 -63.8008 89.5 -78.8008c33.7998 -11.2998 73.2002 5.2002 99.2002 23.4004c10.7998 7.59961 17.2002 19.5996 24.8994 30.5996c28.7002 41.2002 42 100.101 39.1006 157.101\n+c-1.2002 23.5 -1.10059 47 -9 62.7998c-8.2998 16.5996 -36.2002 31.2998 -52.5 16.4004c-3 16.0996 13.5996 26.0996 33.0996 20.2998c-13.8994 18 -28.5996 39.5996 -48.2998 50.7002c-34.4004 19.5 -92.7002 34.0996 -129.3 15.7998\n+c-29.6006 -14.7002 -69.5 -39.1006 -83.1006 -70c12.7002 -29.7998 -3.7998 -57.1006 -4.7998 -87.4004c-0.599609 -16.0996 7.60059 -30.2002 8.2002 -47.7002c-4.40039 -7.19922 -17.7002 -8.09961 -26.9004 -7.59961c-3.09961 15.5 -8.5 32.9004 -24.5 34.7002\n+c-22.5 2.39941 -39.0996 -16.2998 -40.0996 -35.7998c-1.2002 -23 17.7002 -61 44.4004 -58.4004c10.2998 1.09961 12.7998 11.4004 24.0996 11.2998c6.09961 -12.2002 -9.40039 -16 -11 -24.7002c-0.400391 -2.19922 1.2998 -11 2.2998 -15.0996zM359.8 -3.59961\n+c-1.59961 -4.40039 0.299805 -10.4004 -0.599609 -16.5c14.8994 -4.2002 31.8994 -6.40039 50.7002 -7c3.69922 4.7998 4.89941 13.7998 4.5 22.7998c-0.600586 10.7998 -3.40039 33.0996 -10.1006 37c-14.0996 8.2002 -39 -16.5 -49.5996 -20.2998\n+c1.2002 -3.40039 3.09961 -6 3.2002 -10.2002c6.2998 1.5 13.8994 0.5 19.2998 -2.2002c-6.2998 -0.700195 -13.2998 -0.599609 -17.4004 -3.59961zM342.6 16.4004c7.60059 5.5 14.3008 12 22.2002 17.0996c-18.2002 -1.59961 -41 -12.9004 -59 -4.90039\n+c-0.0996094 -0.899414 -1.2998 -0.599609 -1.5 -1.39941c12.2998 -9.60059 21.5 -11.6006 38.2998 -10.7998zM330.5 -16.7998c26.9004 -8.40039 22.2002 36.7998 -2.7998 20.2002c-0.700195 -8.2002 1.2002 -10.8008 2.7998 -20.2002zM226 9.40039\n+c0 6.19922 3.59961 12 2.7998 16.3994c-13.7998 2.40039 -31.8994 0.799805 -41.2998 7.2998c-9.59961 -9.69922 26.9004 -23 38.5 -23.6992zM57.7002 -49.0996v-0.100586h180.7c-0.800781 2.5 -1.5 4.90039 -2.2002 7.2002c-4.7998 15.2998 -7.5 26.7002 -8.7002 35.5\n+c-19.2002 9.2002 -39.7002 18.5 -56.2002 30.2002c-3 2.2002 -23.3994 28.7002 -26.2002 27.5996c-36.8994 -14.5996 -71.3994 -39.7002 -102.199 -63.5c5.59961 -11.7998 10.5 -24.2002 14.7998 -36.8994zM298.3 -54.7998h-0.799805\n+c0.299805 0.200195 0.5 0.399414 0.799805 0.5v-0.5zM305.8 -49.0996h9.60059c-1 1.5 -2.10059 2.89941 -3.2002 4.2998c-2.10059 -1.5 -4.2998 -2.90039 -6.40039 -4.2998zM320.9 -24.4004c0.0996094 3.60059 0.299805 7.2002 0.399414 10.6006\n+c-6.5 3.2002 -14 5.5 -23.5 5.89941c6.5 3.30078 15.9004 3.2002 21.7998 7.10059c0.100586 1.5 0.100586 2.89941 0.200195 4.2998c-10.7998 0.900391 -14.7998 5.59961 -21.8994 9.5c-11.6006 6.40039 -29 13.2002 -43.9004 16.0996\n+c-18.5 3.60059 -16.7998 -25.1992 -16 -42.3994c0.700195 -13.6006 7.7002 -28 10.7998 -37c1.5 -4.2002 1.7998 -8.7002 5.40039 -9.5c6.39941 -1.5 27.3994 6.89941 33.3994 10.2002c12.7002 6.89941 22.5 17.8994 33.3008 25.1992zM374.3 -49.0996l0.600586 12.5996\n+c-11.2002 -0.700195 -17.5 10.2002 -25.4004 11c-6.90039 0.700195 -12.7002 -7.90039 -21.7002 -4.2002c-2 -2.2002 -3.89941 -4.7002 -6 -6.89941c3.2002 -3.90039 6.10059 -8.10059 8.90039 -12.5h17.3994c0.200195 3.19922 2.80078 5.7998 6.10059 5.7998\n+s6 -2.60059 6.09961 -5.7998h14zM383 -49.0996h36.2998c-6.7002 10.1992 -20.0996 18.7998 -35.7002 11.5c-0.199219 -3.7002 -0.399414 -7.5 -0.599609 -11.5zM466.4 -12.0996c1.19922 6.19922 4.59961 19.5996 3.7998 25.0996\n+c-1.40039 9.7998 -14.6006 17.0996 -21.4004 23.0996c-12.3994 11.1006 -20.2002 21 -33.2002 31.4004c-5.19922 -7.7998 -16.5 -13 -20.7998 -19.2998c30.7002 14.8994 36.2998 -55.7998 24.2002 -78.5c1.90039 -6.7998 8.2998 -9.40039 10.9004 -15.5\n+c-0.700195 -1.10059 -1.30078 -2.2002 -1.90039 -3.2998h27.9004c0.199219 0 0.399414 0 0.599609 -0.100586c4.09961 13.1006 7.59961 25.9004 9.90039 37.1006zM222.2 317.5c5.39941 14.9004 27.2002 34.7002 45 32c7.7002 -1.2002 18 -8.2002 12.2002 -17.7002\n+c-30.2002 7 -45.2002 -12.5996 -54.4004 -33.0996c-8.09961 2 -4.90039 13.0996 -2.7998 18.7998zM406.3 254.4c8.2002 3.59961 22.4004 0.699219 29.6006 5.2998c-4.2002 11.5 -10.3008 21.3994 -9.30078 37.7002c0.5 0 1 0 1.40039 -0.100586\n+c6.7998 -14.2002 12.7002 -29.2002 21.4004 -41.7002c-5.7002 -13.5 -43.6006 -25.3994 -43.1006 -1.19922zM309.5 251.7c-6.7998 10.8994 -19 32.5 -14.5 45.2998c6.5 -11.9004 8.59961 -24.4004 17.7998 -33.2998c4.10059 -4 12.2002 -9 8.2002 -20.2002\n+c-0.900391 -2.7002 -7.7998 -8.59961 -11.7002 -9.7002c-14.3994 -4.2998 -47.8994 -0.899414 -36.5996 17.1006c11.8994 -0.700195 27.8994 -7.80078 36.7998 0.799805zM336.8 181.7c3.7998 -6.60059 1.40039 -18.7002 12.1006 -20.6006\n+c20.1992 -3.39941 43.5996 12.3008 58.0996 17.8008c9 15.1992 -0.799805 20.6992 -8.90039 30.5c-16.5996 20 -38.7998 44.7998 -38 74.6992c6.7002 4.90039 7.30078 -7.39941 8.2002 -9.69922c8.7002 -20.3008 30.4004 -46.2002 46.2998 -63.5\n+c3.90039 -4.30078 10.3008 -8.40039 11 -11.2002c2.10059 -8.2002 -5.39941 -18 -4.5 -23.5c-21.6992 -13.9004 -45.7998 -29.1006 -81.3994 -25.6006c-7.40039 6.7002 -10.2998 21.4004 -2.90039 31.1006zM135.5 190.9c-6.7998 3.89941 -8.40039 21 -16.4004 21.3994\n+c-11.3994 0.700195 -9.2998 -22.2002 -9.2998 -35.5c-7.7998 7.10059 -9.2002 29.1006 -3.5 40.2998c-6.59961 3.2002 -9.5 -3.59961 -13.0996 -5.89941c4.7002 34.0996 49.7998 15.7998 42.2998 -20.2998zM435.1 162.1c-10.0996 -19.1992 -24.3994 -40.3994 -54 -41\n+c-0.599609 6.2002 -1.09961 15.6006 0 19.4004c22.7002 2.2002 36.6006 13.7002 54 21.5996zM293.2 149.7c18.8994 -9.90039 53.5996 -11 79.2998 -10.2002c1.40039 -5.59961 1.2998 -12.5996 1.40039 -19.4004c-33 -1.7998 -72 6.40039 -80.7002 29.6006zM385.4 103\n+c-1.7002 -4.2998 -5.30078 -9.2998 -9.80078 -11.0996c-12.0996 -4.90039 -45.5996 -8.7002 -62.3994 0.299805c-10.7002 5.7002 -17.5 18.5 -23.4004 26c-2.7998 3.59961 -16.8994 12.8994 -0.200195 12.8994c13.1006 -32.6992 58 -29 95.8008 -28.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"joget\" unicode=\"&#xf3b7;\" horiz-adv-x=\"496\" \n+d=\"M378.1 403c116.601 -71.7998 152.9 -224.6 81 -341.2c-71.8994 -116.5 -224.6 -152.8 -341.199 -80.8994c-116.601 71.8994 -152.9 224.6 -81 341.199c46.8994 76 128.1 117.9 211.3 117.9c44.3994 0 89.3994 -11.9004 129.899 -37zM429.9 79.7998\n+c5.2998 8.7002 9.89941 17.6006 13.8994 26.6006c-32.0996 -1.10059 -157.1 1.5 -208.8 -17.6006c-58.4004 -21.5 -36.9004 -53.3994 -31.2002 -67.0996c3.7998 -9.10059 14.7002 -28.7998 23.7002 -42.4004c6.7998 -0.599609 13.5996 -1 20.4004 -1\n+c71.5996 0 141.6 36 182 101.5zM229.1 166.1c51 -1.2998 205.4 -4.39941 230.301 -4.89941c11.8994 81.7998 -24.5 166.6 -99.3008 212.7c-100.5 61.8994 -232.1 30.6992 -294 -69.8008c-28.5996 -46.3994 -37.2998 -99.3994 -28.5 -149.1\n+c11 40.9004 49.7002 131.5 178.301 140.2c50.8994 4 41.5 -19.2002 23.5996 -29.7002c-17.7998 -10.5 -45.7002 -23.7998 -68.9004 -51.2002c-23.1992 -27.3994 3 -46.7998 58.5 -48.2002zM412.9 220.9c22.6992 -6 19.0996 -15.5 19.0996 -15.5l-46.5 -23.4004\n+l-169.5 -1.59961s33.7998 10.7998 65.2998 31.2998c26 16.8994 49.7002 35.5996 67.5 35.5996c3.7002 0 7.2002 -0.899414 10.4004 -2.7002c18.5 -10.5996 -2.90039 -18.1992 -13.4004 -24.5996s-50.7002 -34.5 -50.7002 -34.5s1.40039 -7.59961 31.1006 8.2002\n+c29.7002 15.8994 64 33.2002 86.7002 27.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"js\" unicode=\"&#xf3b8;\" \n+d=\"M0 416h448v-448h-448v448zM243.8 66.5996v143.7h-42.0996v-143.1c0 -21.1006 -8.7998 -26.5 -22.6006 -26.5c-14.5 0 -20.5 9.89941 -27.0996 21.5996l-34.2998 -20.7002c10 -21.0996 29.5 -38.5 63.2002 -38.5c37.2998 0 62.8994 19.9004 62.8994 63.5zM343.4 3.09961\n+c39.8994 0 69.6992 20.8008 69.6992 58.6006c0 35.2002 -20.0996 50.8994 -55.8994 66.2002l-10.5 4.5c-18.1006 7.89941 -25.9004 13 -25.9004 25.5996c0 10.2002 7.7998 18 20.1006 18c12.0996 0 19.8994 -5.09961 27.0996 -18l32.7998 21\n+c-13.7998 24.4004 -33 33.7002 -59.7998 33.7002c-37.5 0 -61.5996 -24 -61.5996 -55.6006c0 -34.2998 20.0996 -50.5996 50.5 -63.5l10.5 -4.5c19.2998 -8.5 30.6992 -13.5996 30.6992 -28c0 -12.0996 -11.1992 -20.7998 -28.5996 -20.7998\n+c-20.7002 0 -32.5 10.9004 -41.5 25.6006l-34.2998 -19.8008c12.2998 -24.3994 37.5996 -43 76.7002 -43z\" \u002F>\n+    \u003Cglyph glyph-name=\"js-square\" unicode=\"&#xf3b9;\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM243.8 66.5996v143.7h-42.0996v-143.1c0 -21.1006 -8.7998 -26.5 -22.6006 -26.5c-14.5 0 -20.5 9.89941 -27.0996 21.5996\n+l-34.2998 -20.7002c10 -21.0996 29.5 -38.5 63.2002 -38.5c37.2998 0 62.8994 19.9004 62.8994 63.5zM343.4 3.09961c39.8994 0 69.6992 20.8008 69.6992 58.6006c0 35.2002 -20.0996 50.8994 -55.8994 66.2002l-10.5 4.5c-18.1006 7.89941 -25.9004 13 -25.9004 25.5996\n+c0 10.2002 7.7998 18 20.1006 18c12.0996 0 19.8994 -5.09961 27.0996 -18l32.7998 21c-13.7998 24.4004 -33 33.7002 -59.7998 33.7002c-37.5 0 -61.5996 -24 -61.5996 -55.6006c0 -34.2998 20.0996 -50.5996 50.5 -63.5l10.5 -4.5\n+c19.2998 -8.5 30.6992 -13.5996 30.6992 -28c0 -12.0996 -11.1992 -20.7998 -28.5996 -20.7998c-20.7002 0 -32.5 10.9004 -41.5 25.6006l-34.2998 -19.8008c12.2998 -24.3994 37.5996 -43 76.7002 -43z\" \u002F>\n+    \u003Cglyph glyph-name=\"keycdn\" unicode=\"&#xf3ba;\" horiz-adv-x=\"512\" \n+d=\"M63.7998 38.7002l60.5 59c32.1006 -42.7998 71.1006 -66 126.601 -67.4004c30.5 -0.700195 60.2998 7 86.3994 22.4004c5.10059 -5.2998 18.5 -19.5 20.9004 -22c-32.2002 -20.7002 -69.6006 -31.1006 -108.101 -30.2002\n+c-43.2998 1.09961 -84.5996 16.7002 -117.699 44.4004c0.299805 0.599609 -38.2002 -37.5 -38.6006 -37.9004c9.5 -29.7998 -13.0996 -62.4004 -46.2998 -62.4004c-26.7998 0.100586 -47.5 21.7002 -47.5 48.5c0 34.3008 33.0996 56.6006 63.7998 45.6006zM418.7 291.1\n+c19.0996 -31.2998 29.5996 -67.3994 28.7002 -104c-1.10059 -44.7998 -19 -87.5 -48.6006 -121c0.299805 -0.299805 23.7998 -25.1992 24.1006 -25.5c9.59961 1.30078 19.1992 -2 25.8994 -9.09961c11.2998 -12 10.9004 -30.9004 -1.09961 -42.4004\n+c-12 -11.2998 -30.9004 -10.8994 -42.4004 1.10059c-6.7002 7 -9.39941 16.7998 -7.59961 26.2998c-24.9004 26.5996 -44.4004 47.2002 -44.4004 47.2002c42.7002 34.0996 63.2998 79.5996 64.4004 124.2c0.700195 28.8994 -7.2002 57.1992 -21.1006 82.1992zM104 394.9\n+c6.7002 -7 9.40039 -16.8008 7.59961 -26.3008l45.9004 -48.0996c-4.7002 -3.7998 -13.2998 -10.4004 -22.7998 -21.2998c-25.4004 -28.5 -39.6006 -64.7998 -40.7002 -102.9c-0.700195 -28.8994 6.09961 -57.2002 20 -82.3994l-22 -21.5\n+c-19.2998 31.5996 -28.9004 67.6992 -27.7998 104.699c1 44.6006 18.2998 87.6006 47.5 121.101l-25.2998 26.3994c-9.60059 -1.2998 -19.2002 2 -25.9004 9.10059c-11.2998 12 -10.9004 30.8994 1.09961 42.3994c11.9004 11.2002 30.6006 10.9004 42.4004 -1.19922z\n+M464.9 440c26 0 47.0996 -22.4004 47.0996 -48.2998c0 -25.9004 -21.0996 -47.7002 -47.0996 -47.7002c-6.30078 -0.0996094 -14 1.09961 -15.9004 1.7998l-62.9004 -59.7002c-32.6992 43.6006 -76.6992 65.9004 -126.899 67.2002\n+c-30.5 0.700195 -60.2998 -6.7998 -86.2002 -22.3994l-21.0996 22c32.1992 20.7998 69.5996 31.0996 108.1 30.1992c43.2998 -1.09961 84.5996 -16.6992 117.7 -44.5996l41.0996 38.5996c-1.5 4.7002 -2.2002 9.60059 -2.2002 14.5\n+c-0.0996094 26.7002 22.3008 48.4004 48.3008 48.4004zM256.7 334.6c5.5 0 10.8994 -0.399414 16.3994 -1.09961c78.1006 -9.7998 133.4 -81.0996 123.801 -159.1c-9.80078 -78.1006 -81.1006 -133.4 -159.101 -123.801c-78.0996 9.80078 -133.399 81.1006 -123.8 159.2\n+c9.2998 72.4004 70.0996 124.601 142.7 124.8zM197.7 215.2c0.599609 -22.7002 12.2002 -41.7998 32.3994 -52.2002l-11 -51.7002h73.7002l-11 51.7002c20.1006 10.9004 32.1006 29 32.4004 52.2002c-0.400391 32.7998 -25.7998 57.5 -58.2998 58.2998\n+c-32.1006 -0.799805 -57.3008 -24.7998 -58.2002 -58.2998zM256 288z\" \u002F>\n+    \u003Cglyph glyph-name=\"kickstarter\" unicode=\"&#xf3bb;\" \n+d=\"M400 -32h-352c-26.4004 0 -48 21.5996 -48 48v352c0 26.4004 21.5996 48 48 48h352c26.4004 0 48 -21.5996 48 -48v-352c0 -26.4004 -21.5996 -48 -48 -48zM199.6 269.5c0 30.7002 -17.5996 45.0996 -39.6992 45.0996c-25.8008 0 -40 -19.7998 -40 -44.5v-154.8\n+c0 -25.7998 13.6992 -45.5996 40.5 -45.5996c21.5 0 39.1992 14 39.1992 45.5996v41.7998l60.6006 -75.6992c12.2998 -14.9004 39 -16.8008 55.7998 0c14.5996 15.0996 14.7998 36.7998 4 50.3994l-49.0996 62.7998l40.5 58.7002c9.39941 13.5 9.5 34.5 -5.60059 49.1006\n+c-16.3994 15.8994 -44.5996 17.2998 -61.3994 -7l-44.8008 -64.7002v38.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"kickstarter-k\" unicode=\"&#xf3bc;\" horiz-adv-x=\"384\" \n+d=\"M147.3 333.6v-70.5996l82.7998 118.2c31.2002 44.3994 83.3008 41.7998 113.601 12.7998c27.8994 -26.7002 27.7998 -65.0996 10.3994 -89.7998l-74.8994 -107.4l90.7998 -114.8c19.9004 -24.7998 19.5996 -64.5996 -7.40039 -92.2002\n+c-31.0996 -30.7002 -80.5 -27.2002 -103.199 0l-112.101 138.3v-76.5c0 -57.7998 -32.5996 -83.3994 -72.3994 -83.3994c-49.6006 0 -74.9004 36.0996 -74.9004 83.3994v283c0 45.2002 26.2002 81.4004 73.9004 81.4004c40.8994 0 73.3994 -26.2002 73.3994 -82.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"laravel\" unicode=\"&#xf3bd;\" horiz-adv-x=\"512\" \n+d=\"M504.4 332.17c0.131836 -0.549805 0.240234 -1.45605 0.240234 -2.02246c0 -0.0185547 0 -0.0488281 -0.000976562 -0.0673828v-109.85c0.000976562 -0.0205078 0.000976562 -0.0527344 0.000976562 -0.0722656c0 -2.5498 -1.79199 -5.65332 -4.00098 -6.92773\n+l-92.2393 -53.1104v-105.26v-0.0224609c0 -2.54883 -1.79199 -5.65332 -4 -6.92773l-192.561 -110.84c-0.37207 -0.194336 -0.999023 -0.454102 -1.39941 -0.580078c-0.180664 -0.0605469 -0.350586 -0.169922 -0.550781 -0.220703\n+c-0.555664 -0.148438 -1.47363 -0.269531 -2.0498 -0.269531c-0.575195 0 -1.49414 0.121094 -2.0498 0.269531c-0.219727 0.0605469 -0.419922 0.180664 -0.629883 0.260742c-0.378906 0.119141 -0.975586 0.360352 -1.33008 0.540039l-192.5 110.84\n+c-2.20801 1.27441 -4 4.37891 -4 6.92773v0.0224609v329.699c0.00195312 0.589844 0.126953 1.53125 0.280273 2.10059c0.0693359 0.189453 0.199219 0.489258 0.290039 0.669922c0.111328 0.354492 0.339844 0.910156 0.509766 1.24023\n+c0.149414 0.259766 0.370117 0.469727 0.549805 0.719727c0.177734 0.270508 0.496094 0.6875 0.709961 0.929688c0.208008 0.179688 0.561523 0.448242 0.790039 0.600586c0.226562 0.210938 0.621094 0.520508 0.879883 0.689453v0l96.2705 55.4199\n+c1.02441 0.591797 2.81641 1.07227 4 1.07227c1.18262 0 2.97461 -0.480469 4 -1.07227l96.29 -55.4199v0c0.25293 -0.173828 0.647461 -0.478516 0.879883 -0.679688c0.223633 -0.154297 0.573242 -0.422852 0.779297 -0.599609\n+c0.21582 -0.24707 0.538086 -0.667969 0.720703 -0.94043c0.169922 -0.25 0.399414 -0.459961 0.540039 -0.719727c0.170898 -0.331055 0.404297 -0.886719 0.519531 -1.24023c0.0800781 -0.230469 0.219727 -0.44043 0.280273 -0.679688\n+c0.154297 -0.561523 0.280273 -1.48926 0.280273 -2.07129v-0.0195312v-205.93l80.2197 46.1904v105.239c0.00195312 0.584961 0.126953 1.5166 0.280273 2.08008c0.0693359 0.240234 0.199219 0.450195 0.279297 0.680664\n+c0.120117 0.354492 0.352539 0.915039 0.520508 1.25c0.149414 0.259766 0.370117 0.469727 0.540039 0.709961c0.179688 0.270508 0.50293 0.6875 0.719727 0.929688c0.205078 0.179688 0.553711 0.448242 0.780273 0.599609\n+c0.229492 0.208008 0.624023 0.516602 0.879883 0.69043v0l96.2803 55.4502c1.02441 0.591797 2.81641 1.07129 4 1.07129c1.18262 0 2.97461 -0.479492 4 -1.07129l96.2598 -55.4199c0.259766 -0.171875 0.663086 -0.476562 0.899414 -0.680664\n+c0.25 -0.199219 0.540039 -0.379883 0.770508 -0.599609c0.214844 -0.24707 0.538086 -0.667969 0.719727 -0.94043c0.164062 -0.18457 0.40625 -0.50293 0.540039 -0.709961c0.173828 -0.333008 0.411133 -0.892578 0.530273 -1.25\n+c0.0888672 -0.182617 0.214844 -0.487305 0.280273 -0.679688zM111.6 430.72l-80.1895 -46.1602l80.1797 -46.1699l80.2002 46.1807l-80.1904 46.1494v0zM199.85 370.72l-33.6895 -19.4297l-46.5303 -26.79v-201.29l33.6904 19.4004l46.5293 26.79v201.319zM199.85 -42.0596\n+l-0.109375 92.3594l-92.1904 52.1807v0v0c-0.248047 0.166992 -0.633789 0.462891 -0.859375 0.65918c-0.25 0.200195 -0.540039 0.360352 -0.770508 0.580078v0c-0.198242 0.219727 -0.494141 0.595703 -0.660156 0.839844\n+c-0.177734 0.206055 -0.446289 0.555664 -0.599609 0.780273v0c-0.139648 0.266602 -0.328125 0.713867 -0.419922 1c-0.125977 0.240234 -0.295898 0.643555 -0.379883 0.900391v0c-0.0683594 0.322266 -0.140625 0.850586 -0.160156 1.17969\n+c-0.0498047 0.246094 -0.103516 0.649414 -0.120117 0.900391v215.18l-46.5205 26.7998l-33.6895 19.3799v-311.18zM207.85 64.1104l117.62 67.1494l58.7998 33.5605l-80.1299 46.1299l-92.2598 -53.1104l-84.0898 -48.4102zM392.37 59.54v91.4102l-45.7705 -26.1504\n+l-130.72 -74.5996v-92.3105zM392.37 178.67v91.3301l-46.5303 26.8096l-33.6895 19.4004v-91.4199l46.5293 -26.79zM400.37 283.95l80.1797 46.1797l-80.1797 46.1504l-80.2002 -46.1602zM408.37 178.67l80.3096 46.1504v0v91.3896l-33.6797 -19.4004l-46.6299 -26.8096\n+v-91.3301z\" \u002F>\n+    \u003Cglyph glyph-name=\"line\" unicode=\"&#xf3c0;\" \n+d=\"M272.1 243.8v-71.0996c0 -1.7998 -1.39941 -3.2002 -3.19922 -3.2002h-11.4004c-1.09961 0 -2.09961 0.599609 -2.59961 1.2998l-32.6006 44v-42.2002c0 -1.7998 -1.39941 -3.19922 -3.2002 -3.19922h-11.3994c-1.7998 0 -3.2002 1.39941 -3.2002 3.19922v71.1006\n+c0 1.7998 1.40039 3.2002 3.2002 3.2002h11.2998c1 0 2.09961 -0.5 2.59961 -1.40039l32.6006 -44v42.2002c0 1.7998 1.39941 3.2002 3.2002 3.2002h11.3994c1.7998 0.0996094 3.2998 -1.40039 3.2998 -3.10059zM190.1 247c1.80078 0 3.2002 -1.5 3.2002 -3.2002v-71.0996\n+c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-11.3994c-1.7998 0 -3.2002 1.40039 -3.2002 3.2002v71.0996c0 1.7998 1.40039 3.2002 3.2002 3.2002h11.3994zM162.6 187.4c1.7002 0 3.10059 -1.5 3.10059 -3.2002v-11.4004c0 -1.7998 -1.40039 -3.2002 -3.2002 -3.2002\n+h-45.7002c-0.899414 0 -1.59961 0.400391 -2.2002 0.900391c-0.599609 0.599609 -0.899414 1.2998 -0.899414 2.2002v71.0996c0 1.7998 1.39941 3.2002 3.2002 3.2002h11.3994c1.7998 0 3.2002 -1.40039 3.2002 -3.2002v-56.3994h31.0996zM332.1 247\n+c1.7002 0 3.10059 -1.5 3.2002 -3.2002v-11.3994c0 -1.80078 -1.39941 -3.2002 -3.2002 -3.2002h-31.0996v-12h31.0996c1.80078 0 3.2002 -1.40039 3.2002 -3.2002v-11.5c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-31.0996v-12h31.0996\n+c1.80078 0 3.2002 -1.39941 3.2002 -3.2002v-11.3994c0 -1.7998 -1.39941 -3.2002 -3.2002 -3.2002h-45.6992c-1.80078 0 -3.2002 1.5 -3.2002 3.2002v71.0996c0 1.7998 1.5 3.2002 3.2002 3.2002h45.6992zM448 334.3v-285.3\n+c-0.0996094 -44.7998 -36.7998 -81.0996 -81.7002 -81h-285.3c-44.7998 0.0996094 -81.0996 36.9004 -81 81.7002v285.3c0.0996094 44.7998 36.9004 81.0996 81.7002 81h285.3c44.7998 -0.0996094 81.0996 -36.7998 81 -81.7002zM386.4 211.7\n+c0 73 -73.2002 132.399 -163.101 132.399c-89.8994 0 -163.1 -59.3994 -163.1 -132.399c0 -65.4004 58 -120.2 136.399 -130.601c19.1006 -4.09961 16.9004 -11.0996 12.6006 -36.7998c-0.700195 -4.09961 -3.2998 -16.0996 14.0996 -8.7998\n+c17.4004 7.2998 93.9004 55.2998 128.2 94.7002c23.5996 26 34.9004 52.2998 34.9004 81.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"lyft\" unicode=\"&#xf3c3;\" horiz-adv-x=\"512\" \n+d=\"M0 366.9h77.7998v-208.7c0 -33.1006 15 -52.7998 27.2002 -61c-12.7002 -11.1006 -51.2002 -20.9004 -80.2002 2.7998c-17 14 -24.7998 37.2998 -24.7998 59v207.9zM485.9 193.4c0 -14.2002 11.5996 -25.9004 26.0996 -25.9004v-76.5\n+c-56.7002 0 -102.7 46.0996 -102.7 102.7v77.0996c0 34.6006 -52.2002 34.6006 -52.2002 0v-23.2998h38.8008v-76.7998h-38.8008v-6.7002c0 -21.7998 -7.69922 -45 -24.7998 -59c-16.2998 -13.7002 -35.7002 -16.2998 -51.7002 -14v179.2\n+c0 56.7002 46.1006 102.7 102.7 102.7c49.1006 0 90.2002 -34.4004 100.3 -80.7002h26.1006v-76.7998h-23.7998v-22zM191.6 292.4v0.5h77.1006v-178.2c0 -52.4004 -29.7002 -91.7002 -76.7998 -100.8c-26.1006 -5.10059 -52.5 -2.80078 -77.6006 4.69922v70.3008\n+c9.7998 -4.2002 29.5 -9.40039 45 -7.80078c20.4004 2 32.7998 11.9004 34.9004 25.3008c0 0 -21.2002 -20.4004 -58.2002 -10.6006c-37 9.90039 -45 40.1006 -45 63.9004v132.7h76.7998v-113c0 -15.4004 23.7998 -15.4004 23.7998 0v113z\" \u002F>\n+    \u003Cglyph glyph-name=\"magento\" unicode=\"&#xf3c4;\" \n+d=\"M445.7 320.1v-256.1l-63.4004 -36.5v255.8l-158.5 91.6006l-158.6 -91.6006l0.399414 -255.899l-63.2998 36.5996v255.9l221.9 128.1zM255.6 27.5v255.9l63.4004 -36.6006v-256l-95.0996 -54.8994l-94.9004 54.8994l-0.0996094 255.9l63.2998 36.5996v-256\n+l31.7998 -18.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"medapps\" unicode=\"&#xf3c6;\" horiz-adv-x=\"320\" \n+d=\"M118.3 209.6c3.5 12.5 6.90039 33.6006 13.2002 33.6006c8.2998 -1.7998 9.59961 -23.4004 18.5996 -36.6006c4.60059 23.5 5.30078 85.1006 14.1006 86.7002c9 0.700195 19.7002 -66.5 22 -77.5c9.89941 -4.09961 48.8994 -6.59961 48.8994 -6.59961\n+c1.90039 -7.2998 -24 -7.60059 -40 -7.7998c-4.59961 -14.8008 -5.39941 -27.7002 -11.3994 -28c-4.7002 -0.200195 -8.2002 28.7998 -17.5 49.5996l-9.40039 -65.5c-4.39941 -13 -15.5 22.5 -21.8994 39.2998c-3.30078 0.100586 -62.4004 1.60059 -47.6006 7.7998zM228 0\n+h-136c-21.2002 0 -21.2002 32 0 32h136c21.2002 0 21.2002 -32 0 -32zM204 -64h-88c-21.2002 0 -21.2002 32 0 32h88c21.2002 0 21.2002 -32 0 -32zM238.2 77.5c-3.60059 -21.2998 -36 -15.5 -32.6006 5.09961c3.60059 21.2002 5.60059 40.6006 15.3008 58.6006\n+c32.5996 60.2998 66.0996 95.5 66.0996 151.6c0 67.9004 -57 123.2 -127 123.2s-127 -55.2998 -127 -123.2c0 -56.0996 33.5 -91.2998 66.0996 -151.7c9.7002 -17.8994 11.7002 -36.8994 15.3008 -58.5996c3.5 -20.7998 -29.1006 -26.0996 -32.6006 -5.09961\n+c-3.2002 19.0996 -5.2002 36.3994 -11.8994 48.8994c-8 14.7002 -16.1006 28.1006 -24 41c-24.6006 40.4004 -45.9004 75.2998 -45.9004 125.5c0 85.6006 71.7998 155.2 160 155.2s160 -69.5996 160 -155.2c0 -50.2998 -21.2998 -85.0996 -45.9004 -125.5\n+c-7.89941 -12.8994 -16.0996 -26.2998 -24 -41c-6.69922 -12.3994 -8.69922 -29.8994 -11.8994 -48.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"medium-m\" unicode=\"&#xf3c7;\" horiz-adv-x=\"512\" \n+d=\"M71.5 305.7c0.599609 5.89941 -1.7002 11.7998 -6.09961 15.7998l-45.1006 54.4004v8.09961h140.2l108.4 -237.7l95.2998 237.7h133.7v-8.09961l-38.6006 -37c-3.2998 -2.5 -5 -6.7002 -4.2998 -10.8008v-272c-0.700195 -4.09961 1 -8.2998 4.2998 -10.7998l37.7002 -37\n+v-8.09961h-189.7v8.09961l39.1006 37.9004c3.7998 3.7998 3.7998 5 3.7998 10.7998v219.8l-108.7 -275.899h-14.7002l-126.399 275.899v-184.899c-1.10059 -7.80078 1.5 -15.6006 7 -21.2002l50.7998 -61.6006v-8.09961h-144v8l50.7998 61.7002\n+c5.40039 5.59961 7.90039 13.5 6.5 21.2002v213.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"medrt\" unicode=\"&#xf3c8;\" horiz-adv-x=\"544\" \n+d=\"M113.7 192c0 -121.8 83.8994 -222.8 193.5 -241.1c-18.7002 -4.5 -38.2002 -6.90039 -58.2002 -6.90039c-137.6 0 -249 111 -249 248s111.4 248 248.9 248c20.0996 0 39.5996 -2.40039 58.1992 -6.90039c-109.6 -18.2998 -193.399 -119.3 -193.399 -241.1zM411.1 91.7002\n+c77.7002 55.3994 104.4 155.1 67 233.899c11.2002 -9.89941 21.5 -21.2998 30.5 -34.1992c61.6006 -88.3008 40.8008 -210.301 -46.5 -272.601c-87.2998 -62.2998 -208.1 -41.2002 -269.699 47c-9 12.7998 -16.2002 26.4004 -21.7002 40.5\n+c60.7998 -62.0996 162.7 -70 240.399 -14.5996zM192.3 335.7c72.5 54.5996 171.601 45.7002 221.601 -19.7998c45.2998 -59.7002 34.3994 -145.601 -22.3008 -201.801c18.5 51.4004 11.3008 111 -24.3994 158c-43 56.5 -114.601 78.3008 -178.9 60.5\n+c1.2998 1 2.60059 2.10059 4 3.10059zM296 224h40c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-40c-4.40039 0 -8 -3.59961 -8 -8v-40c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v40c0 4.40039 -3.59961 8 -8 8h-40\n+c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h40c4.40039 0 8 3.59961 8 8v40c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-40c0 -4.40039 3.59961 -8 8 -8z\" \u002F>\n+    \u003Cglyph glyph-name=\"microsoft\" unicode=\"&#xf3ca;\" \n+d=\"M0 416h214.6v-214.6h-214.6v214.6zM233.4 416h214.6v-214.6h-214.6v214.6zM0 182.6h214.6v-214.6h-214.6v214.6zM233.4 182.6h214.6v-214.6h-214.6v214.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"mix\" unicode=\"&#xf3cb;\" \n+d=\"M0 384h448v-204.1c0 -56.6006 -88 -59.9004 -88 0v23.7998c0 56.7998 -82.7002 59 -88 4.2998v-116.1c0 -58 -96 -57.9004 -96 0v175.3c0 56.8994 -80.0996 59.3994 -88 6.5v-238.601c0 -58.0996 -88 -56.1992 -88 0v348.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"mizuni\" unicode=\"&#xf3cc;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111.1 248 -248c0 -137 -111 -248 -248 -248s-248 111 -248 248c0 136.9 111 248 248 248zM168 88.0996v223.9c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-272.1c21.2002 20.8994 48.5996 37.5996 80 48.1992zM288 98v214\n+c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-214c13 2 26.4004 3.09961 40.2002 3.09961c13.5996 0 26.8994 -1.09961 39.7998 -3.09961zM408 40.2998v271.7c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-223.7c31.4004 -10.5996 58.7998 -27.2002 80 -48z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"monero\" unicode=\"&#xf3d0;\" horiz-adv-x=\"496\" \n+d=\"M352 64h108.4c-43.4004 -71.9004 -122.301 -120 -212.4 -120s-169 48.0996 -212.4 120h108.4v127.8l104 -104.8l104 105v-128zM88 112h-74.7998c-8.60059 25.0996 -13.2002 52 -13.2002 80c0 137 111 248 248 248s248 -111 248 -248c0 -28 -4.7002 -54.9004 -13.2002 -80\n+h-74.7998v208l-160.6 -159.4l-159.4 159.4v-208z\" \u002F>\n+    \u003Cglyph glyph-name=\"napster\" unicode=\"&#xf3d2;\" horiz-adv-x=\"496\" \n+d=\"M298.3 74.4004c-14.2002 -13.6006 -31.2998 -24.1006 -50.3994 -30.5c-19 6.39941 -36.2002 16.8994 -50.3008 30.5h100.7zM342.3 274c-56.3994 39.7998 -132.1 39.9004 -188.899 -0.0996094c-19.9004 16.7998 -43.6006 29.5 -69.5 36.3994v-161.6\n+c0 -217.3 328 -219.101 328 0.299805v161.2c-26 -7 -49.6006 -19.2998 -69.6006 -36.2002zM133.5 332.5c6.5 -3.2002 14.0996 -7.40039 20.4004 -11.4004c58.6992 30.5 129.199 30.6006 187.899 0.100586c6.7002 4.2002 13.5 8 20.6006 11.5\n+c-64.6006 59.8994 -164.5 59.7998 -228.9 -0.200195zM43.7998 354.8c17.5 -0.5 34.2998 -3.09961 50.6006 -7.5c82 91.6006 225.5 91.6006 307.5 0.100586c16.0996 4.39941 32.7998 6.89941 50.0996 7.39941v-69.2002c58.7002 -36.5 58.5 -121.899 -0.200195 -158.199\n+l-0.299805 -1.7002c-25.9004 -238.8 -381.2 -243.601 -407.6 1.5c-58.5 37.2002 -58.5 121.8 -0.100586 158.3v69.2998zM259.2 96c13.0996 59.2998 33.5 56 113 55.4004c-0.799805 -8.2002 0.0996094 -32.3008 -26.2002 -47.4004c-4.40039 -2.5 -15.2998 -6 -25.5 -6.5\n+c-25.2998 -1.2002 -61.2998 -1.5 -61.2998 -1.5zM123.7 151.3c79.2998 0.700195 99.7998 4 113 -55.3994c0 0 -36 0.399414 -61.2998 1.5c-10.3008 0.5 -21.1006 4 -25.5 6.5c-26.3008 15.0996 -25.4004 39.1992 -26.2002 47.3994zM292.8 27.9004\n+c3 -4.90039 3.2002 -8.80078 3.2998 -8.90039c-29.0996 -17.5996 -67.0996 -17.5996 -96.1992 0c0 0 0.899414 5.5 3.69922 9.59961c3.5 5.10059 6.40039 6.60059 6.40039 6.60059c23.7002 -6.90039 51.0996 -7.2998 75.9004 0c0 0 3.69922 -2 6.89941 -7.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"node-js\" unicode=\"&#xf3d3;\" \n+d=\"M224 -60c-6.7002 0 -13.5 1.7998 -19.4004 5.2002l-61.6992 36.5c-9.2002 5.2002 -4.7002 7 -1.7002 8c12.2998 4.2998 14.7998 5.2002 27.8994 12.7002c1.40039 0.799805 3.2002 0.5 4.60059 -0.400391l47.3994 -28.0996c1.7002 -1 4.10059 -1 5.7002 0l184.7 106.6\n+c1.7002 1 2.7998 3 2.7998 5v213.2c0 2.09961 -1.09961 4 -2.89941 5.09961l-184.601 106.5c-1.7002 1 -4 1 -5.7002 0l-184.5 -106.6c-1.7998 -1 -2.89941 -3 -2.89941 -5.10059v-213.1c0 -2 1.09961 -4 2.89941 -4.90039l50.6006 -29.1992\n+c27.5 -13.7002 44.2998 2.39941 44.2998 18.6992v210.4c0 3 2.40039 5.2998 5.40039 5.2998h23.3994c2.90039 0 5.40039 -2.2998 5.40039 -5.2998v-210.5c0 -36.5996 -20 -57.5996 -54.7002 -57.5996c-10.7002 0 -19.0996 0 -42.5 11.5996l-48.4004 27.9004\n+c-12 6.89941 -19.3994 19.7998 -19.3994 33.6992v213.101c0 13.7998 7.39941 26.7998 19.3994 33.7002l184.5 106.6c11.7002 6.59961 27.2002 6.59961 38.8008 0l184.699 -106.7c12 -6.89941 19.4004 -19.7998 19.4004 -33.7002v-213.1\n+c0 -13.7998 -7.40039 -26.7002 -19.4004 -33.7002l-184.699 -106.6c-5.90039 -3.40039 -12.6006 -5.2002 -19.4004 -5.2002zM373.1 150.1c0 -40.1992 -33.5996 -63.2998 -92 -63.3994c-80.8994 0 -97.7998 37.0996 -97.7998 68.2002c0 2.89941 2.2998 5.2998 5.2998 5.2998\n+h23.9004c2.7002 0 4.90039 -1.90039 5.2998 -4.5c3.60059 -24.2998 14.2998 -36.6006 63.2002 -36.6006c38.9004 0 55.5 8.80078 55.5 29.4004c0 11.9004 -4.7002 20.7998 -65.2002 26.7002c-50.5 5 -81.7998 16.2002 -81.7998 56.5996c0 37.2998 31.4004 59.5 84.0996 59.5\n+c59.2002 0 88.5 -20.5 92.2002 -64.5996c0.100586 -1.5 -0.399414 -3 -1.39941 -4.10059c-1 -1.09961 -2.40039 -1.69922 -3.90039 -1.69922h-24c-2.5 0 -4.7002 1.7998 -5.2002 4.19922c-5.7998 25.6006 -19.7998 33.8008 -57.7002 33.8008\n+c-42.5 0 -47.3994 -14.8008 -47.3994 -25.9004c0 -13.4004 5.7998 -17.2998 63.2002 -24.9004c56.6992 -7.5 83.6992 -18.0996 83.6992 -58z\" \u002F>\n+    \u003Cglyph glyph-name=\"npm\" unicode=\"&#xf3d4;\" horiz-adv-x=\"576\" \n+d=\"M288 160h-32v64h32v-64zM576 288v-192h-288v-32h-128v32h-160v192h576zM160 256h-128v-128h64v96h32v-96h32v128zM320 256h-128v-160h64v32h64v128zM544 256h-192v-128h64v96h32v-96h32v96h32v-96h32v128z\" \u002F>\n+    \u003Cglyph glyph-name=\"ns8\" unicode=\"&#xf3d5;\" horiz-adv-x=\"640\" \n+d=\"M187.1 288.1h44.9004l-48.5 -160.1h-56.9004l-50.5996 106.5l-31.0996 -106.5h-44.9004l49 160.1h49.4004l54.5 -113.699zM639.6 289c4.60059 -28.5996 -36.0996 -44.7002 -65.6992 -50.5996h-0.100586c17.5 -29.3008 22.1006 -69.3008 3.40039 -105.5\n+c-26.4004 -51.2002 -86.5 -79.9004 -135.101 -68c-29.3994 7.19922 -51.3994 29 -56.7998 59.5c-0.700195 3.5 -1 7.09961 -1.2002 10.7998c-5.5 -2.7998 -11.8994 -4.2002 -18.5 -4.90039c-15.5996 -1.7002 -21 -2.2998 -160.899 -2.2998l11.5996 39.5h126.8\n+c9.10059 0 12.2002 3.2002 13.8008 7.40039c1.69922 4.59961 3.39941 10.1992 4.5 14.5996c1.09961 3.90039 0.0996094 6.59961 -7.7002 6.59961h-87.2998c-33.4004 0 -38.2002 9.2002 -32.8008 28.6006c3.2002 11.5 10.8008 37.2002 17.6006 47.0996\n+c7.09961 10.2002 18.2998 13.7002 30.5996 15c15.6006 1.7002 20.4004 1.2002 160.101 1.2002l-9.7002 -31.5h-133.5c-5.5 0 -11.2002 -0.700195 -13.2998 -7.09961c-1.80078 -5.40039 -2.10059 -6.7002 -3.7002 -12.2002c-1.40039 -5.10059 2.2002 -7.40039 11.5 -7.40039\n+h87.5996c20.4004 0 31 -6.7998 34 -16.5996c19.9004 21.3994 50.4004 39.5 94.2002 48.2002v0.0996094c-13.4004 42.5 43.9004 66.5996 88.5 58.7998c18.2002 -3.2002 39.2002 -13.2998 42.0996 -31.2998zM530.7 184.3c3.09961 15.7998 -0.5 33.7002 -7.2002 47.7998\n+c-23.2998 -2.89941 -52.2998 -10.0996 -68.5 -26.8994c-24.4004 -25.2998 -16.7998 -60 14.0996 -64.7998c25 -3.90039 55.7002 14.3994 61.6006 43.8994zM552.5 267.4c10.5996 1.5 23.5 3.5 34.2002 9.59961c14.7998 8.5 10.3994 21 -4.90039 24.4004\n+c-10.8994 2.39941 -25.0996 -0.5 -31.7998 -7.7002c-7.2998 -7.7998 -1.7002 -20.2998 2.5 -26.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"nutritionix\" unicode=\"&#xf3d6;\" horiz-adv-x=\"400\" \n+d=\"M88 439.9c0 0 133.4 8.19922 121 -104.4c0 0 19.0996 74.9004 103 40.5996c0 0 -17.7002 -74 -88 -56c0 0 14.5996 54.6006 66.0996 56.6006c0 0 -39.8994 10.2998 -82.0996 -48.7998c0 0 -19.7998 94.5 -93.5996 99.6992c0 0 75.1992 -19.3994 77.5996 -107.5\n+c0 -0.0996094 -106.4 -7 -104 119.801zM400 124.3c0 -48.5 -9.7002 -95.2998 -32 -132.3c-42.2002 -30.9004 -105 -48 -168 -48c-62.9004 0 -125.8 17.0996 -168 48c-22.2998 37 -32 83.7998 -32 132.3c0 48.4004 17.7002 94.7002 40 131.7\n+c42.2002 30.9004 97.0996 48.5996 160 48.5996c63 0 117.8 -17.5996 160 -48.5996c22.2998 -37 40 -83.2998 40 -131.7zM120 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM120 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\n+s12.5 -28 28 -28s28 12.5 28 28zM120 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM192 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM192 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\n+s12.5 -28 28 -28s28 12.5 28 28zM192 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM264 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM264 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\n+s12.5 -28 28 -28s28 12.5 28 28zM264 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM336 20c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM336 86.2002c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28\n+s12.5 -28 28 -28s28 12.5 28 28zM336 152.4c0 15.5 -12.5 28 -28 28s-28 -12.5 -28 -28s12.5 -28 28 -28s28 12.5 28 28zM360 192c-4.7998 22.2998 -7.40039 36.9004 -16 56c-38.7998 19.9004 -90.5 32 -144 32s-105.2 -12.0996 -144 -32\n+c-8.7998 -19.5 -11.2002 -33.9004 -16 -56c42.2002 7.90039 98.7002 14.7998 160 14.7998s117.8 -6.89941 160 -14.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"page4\" unicode=\"&#xf3d7;\" horiz-adv-x=\"496\" \n+d=\"M248 -56c-137 0 -248 111 -248 248s111 248 248 248c20.9004 0 41.2998 -2.59961 60.7002 -7.5l-266.4 -376.5h205.7v-112zM248 87.5996h-149.4l149.4 213.601v-213.601zM344 56h111.4c-26.9004 -41 -65.7002 -73.5 -111.4 -92.7002v92.7002zM401.4 194.2v-16.7002\n+l-21.2002 8.2998zM381.1 139.7c5.90039 0 8.2002 -4.7002 8.2002 -10.6006v-10h-16.2002v7.7002c0 6.60059 1.30078 12.9004 8 12.9004zM496 192c0 -37.2998 -8.2002 -72.7002 -23 -104.4h-129v333.101c89.2998 -37.5 152 -125.8 152 -228.7zM360.4 304.4h68.1992v47.5996\n+h-13.8994v-32.5996h-13.9004v29.5996h-13.8994v-29.5996h-12.7002v32.5996h-13.9004v-47.5996h0.100586zM428.5 119.1h-26.5v11c0 15.4004 -5.59961 25.2002 -20.9004 25.2002c-15.3994 0 -20.6992 -10.5996 -20.6992 -25.8994v-25.3008h68.1992v15h-0.0996094zM428.5 222.1\n+l-68.2002 -29.6992v-12.4004l68.2002 -29.5v16.5996l-14.4004 5.7002v26.5l14.4004 5.90039v16.8994zM423.7 290.6h-35.6006v-26.5996h13.9004v12.2002h11c8.59961 -15.7998 1.2998 -35.2998 -18.5996 -35.2998c-22.5 0 -28.3008 25.2998 -15.5 37.6992l-11.6006 10.6006\n+c-16.2002 -17.5 -12.2002 -63.9004 27.1006 -63.9004c34 0 44.6992 35.9004 29.2998 65.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"palfed\" unicode=\"&#xf3d8;\" horiz-adv-x=\"576\" \n+d=\"M384.9 254.1c0.0996094 -53.3994 -46.5 -96.1992 -83.3008 -96.1992c-12.5 0 -14.3994 3.39941 -15.0996 6.19922c0.5 39.1006 1.7002 80.4004 3 119.801c40.2002 14.3994 95.4004 17.5996 95.4004 -29.8008zM190.4 181.9\n+c-0.200195 0.599609 -0.400391 2.09961 -0.600586 4.59961c0 25.5996 37 60.9004 58.5 75.9004c-1.2002 -36.4004 -5.5 -198.101 -1.39941 -242.5c3 -32.3008 26.7998 -32.9004 36.3994 -22.3008c5.90039 6.60059 5.5 15.7002 5.2998 19.1006v0.200195\n+c-1.7998 25.5996 -2.7998 60.5996 -2.69922 100c60.7998 -14.4004 140.1 60.2998 140.1 138.199c0 71 -63 94.2002 -135.2 72c-2.89941 14.6006 -18.2998 20.1006 -29.5 11.1006c-7.5 -6.2002 -9.5 -15.7998 -10.5 -28.2002c-57.7998 -30.9004 -100.7 -84.5 -100.7 -126.5\n+c0 -24.9004 15.6006 -43 37.1006 -43c35.0996 0 41 44.0996 14.3994 44.0996c-4.69922 0 -11 -2.69922 -11.1992 -2.69922zM8 266.9c0 38.5996 38.4004 37.3994 38.4004 37.3994h29c15.5 70.1006 120.5 74.2998 120.5 74.2998h28.0996v19.1006\n+c0 18.3994 21.0996 18.3994 21.0996 18.3994h85.8008c18.3994 0 21.0996 -18.3994 21.0996 -18.3994v-19.1006h28c89.2002 0 112.1 -48.6992 119.4 -74.2998h30.0996c38.5 0 38.4004 -37.3994 38.4004 -37.3994c0 -38.6006 -38.4004 -37.4004 -38.4004 -37.4004h-30\n+l-22.4004 -217.2c0 -43.8994 -44.6992 -44.2998 -44.6992 -44.2998h-288.9c-44.7002 0 -44.7002 44.2998 -44.7002 44.2998l-22.3994 217.2h-30c-38.5 0 -38.4004 37.4004 -38.4004 37.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"patreon\" unicode=\"&#xf3d9;\" horiz-adv-x=\"512\" \n+d=\"M512 253.2c0 -101.3 -82.4004 -183.8 -183.8 -183.8c-101.7 0 -184.4 82.3994 -184.4 183.8c0 101.6 82.7002 184.3 184.4 184.3c101.399 0 183.8 -82.7002 183.8 -184.3zM0 -53.5v491h90v-491h-90z\" \u002F>\n+    \u003Cglyph glyph-name=\"periscope\" unicode=\"&#xf3da;\" \n+d=\"M370 384.4c38.4004 -40.7002 59.5 -94.3008 59.5 -150.801c0 -74.2998 -57.4004 -159.5 -82 -192.6c-8 -10.7998 -79.2998 -105 -120.9 -105c-34 0 -88.7998 56.5 -125.399 104.9c-24.9004 32.8994 -82.7002 117.6 -82.7002 192.699c0 118.2 93.4004 214.4 208.1 214.4\n+c53.9004 0 104.801 -22.5996 143.4 -63.5996zM226.6 -45.9004c37.3008 0 184.801 167.301 184.7 279.4c0 107.3 -83.8994 196.3 -184.7 196.3c-106.1 0 -190 -88.8994 -190 -196.3c0 -112.1 147.5 -279.4 190 -279.4zM338 241.2c0 -59.1006 -51.0996 -109.7 -110.8 -109.7\n+c-100.601 0 -150.7 108.2 -92.9004 181.8v-0.399414c0 -24.5 20.1006 -44.4004 44.7998 -44.4004c24.7002 0 44.8008 19.9004 44.8008 44.4004c0 18.1992 -11.1006 33.7998 -26.9004 40.6992c76.5996 19.2002 141 -39.2998 141 -112.399z\" \u002F>\n+    \u003Cglyph glyph-name=\"phabricator\" unicode=\"&#xf3db;\" horiz-adv-x=\"496\" \n+d=\"M323 185.9c0 0 21.5996 -19.6006 20.9004 -20.7002l-8.10059 -19.7998c-0.5 -1.40039 -29.7002 -0.5 -29.7002 -0.5l-9.09961 -9.10059s1.59961 -31.5 0.200195 -32.0996l-20 -7.5c-1.2998 -0.5 -21.7998 23.2998 -21.7998 23.2998l-13.1006 0.200195\n+s-19.2998 -24.1006 -20.7002 -23.5l-20.0996 8.2998c-1.40039 0.5 -1.2002 32.2998 -1.2002 32.2998l-9.39941 9.2998s-28.9004 -0.899414 -29.5 0.5l-9.5 20c-0.600586 1.40039 21.0996 21.2002 21.0996 21.2002l-0.0996094 12.9004s-21.6006 19.5996 -21 21\n+l8.09961 19.7998c0.5 1.2998 29.7002 0.400391 29.7002 0.400391l9.09961 9.09961s-1.59961 28.4004 -0.200195 28.9004l20 8.2998c1.40039 0.599609 21.9004 -20.7998 21.9004 -20.7998l13.0996 -0.200195s19.3008 21.5996 20.7002 21l20.1006 -9.2002\n+c1.39941 -0.599609 1.19922 -29.0996 1.19922 -29.0996l9.40039 -9.30078s28.9004 0.900391 29.5 -0.5l9.5 -20c0.599609 -1.39941 -21.0996 -21.1992 -21.0996 -21.1992zM278.1 194.6c-0.699219 17 -15.5 30.3008 -32.7998 29.5\n+c-17.2998 -0.699219 -30.7998 -15.1992 -30.0996 -32.2998c0.700195 -17.0996 15.5 -30.3994 32.7998 -29.5996s30.7998 15.2998 30.0996 32.3994zM479.3 232.5c22.2998 -22.2998 22.2998 -58.7002 0 -81c-67.3994 -67.4004 -44.2998 -44.4004 -95.2998 -95.2998\n+c-74.4004 -74.5 -194.7 -74.9004 -269.8 -1.60059l-0.100586 -0.0996094c-51 51 -27.5 27.5996 -97.3994 97c-22.2998 22.2998 -22.2998 58.7002 0 81c67.8994 67.4004 44.7998 44.2998 95.7002 95.2998c74.3994 74.4004 194.699 74.9004 269.8 1.60059l0.0996094 0.0996094\n+zM140.4 84.2002c59.5996 -59.5 156 -59.6006 215.6 -0.100586c59.5996 59.6006 59.5 156.101 0 215.601c-59.5996 59.5 -156.1 59.5996 -215.6 0c-59.6006 -59.5 -59.6006 -156 0 -215.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"phoenix-framework\" unicode=\"&#xf3dc;\" horiz-adv-x=\"640\" \n+d=\"M212.9 103.7c-36.7002 -1.2002 -108.7 29.2998 -127.7 106.399c-8.7002 35.3008 -2.7002 51.8008 -8 86.1006c-8.2002 53.3994 -32.1006 72.2002 -55.9004 76.5c-6.2002 1.09961 -12.3994 1.2998 -18.7002 0.299805\n+c-0.799805 -0.0996094 -1.59961 -0.200195 -2.39941 -0.200195c-0.100586 0.200195 -0.100586 0.299805 -0.200195 0.5c0.700195 0.600586 1.40039 1.2002 2.2002 1.7998c36.8994 26.9004 92 38.4004 136.3 35c123.6 -9.5 141.3 -156.6 252.5 -173.1\n+c6.09961 -0.900391 12.2998 -1.09961 18.5 -1.7002c0.700195 -0.0996094 1.40039 -0.0996094 2.5 -0.200195c-2.09961 -2.19922 -21.5996 -11.7998 -36.5 -14.5c-18.4004 -3.39941 -35.7002 -0.0996094 -51.2998 10.3008c-14.5 9.7998 -24.5 23.5 -38.9004 27.3994\n+c-13 3.60059 -34.0996 1.7002 -35.8994 -19.5996c-1.30078 -15.9004 14.1992 -51.7998 51.7998 -74.6006c40.3994 -24.5 101.399 -26.8994 134.7 -14.7998c0.299805 0.100586 0.699219 0.200195 1.09961 0.299805c0.200195 0.100586 0.400391 0 1 -0.0996094\n+c-23.5996 -28.4004 -71.2002 -49.9004 -108.2 -45.4004c-50.3994 6.2002 -77.7002 75.9004 -113.7 97.5c-19.0996 11.5 -49.0996 7 -52 -18.5c-1.09961 -10 2.10059 -19 6.40039 -27.5996c24.4004 -48.5996 65.5996 -47 68 -49.5996\n+c-2.7998 -0.800781 -21.7998 -2.10059 -25.5996 -2.2002zM75.2998 383.1c13.1006 -14.5 34.2002 -7.89941 35.2998 6.80078c-12.3994 -0.700195 -24.5 -2.2002 -36.5996 -4.80078c0.400391 -0.799805 0.400391 -1 1.2998 -2zM272.2 32.5996\n+c-42.7998 -1.19922 -92 26.7002 -123.5 61.4004c-4.60059 5 -16.7998 20.2002 -18.6006 23.4004l0.400391 0.399414c6.59961 -4.09961 25.7002 -18.5996 54.7998 -27c24.2002 -7 48.1006 -6.2998 71.6006 3.2998c22.6992 9.30078 41 0.5 43.0996 -2.89941\n+c-18.5 -3.7998 -20.0996 -4.40039 -24 -7.90039c-5.09961 -4.39941 -4.59961 -11.7002 7 -17.2002c26.2002 -12.3994 63 2.80078 97.2002 -25.3994c2.39941 -2 8.09961 -7.7998 10.0996 -10.7002c-0.0996094 -0.200195 -0.299805 -0.299805 -0.399414 -0.5\n+c-4.80078 1.5 -16.4004 7.5 -40.2002 9.2998c-24.7002 2 -46.2998 -5.2998 -77.5 -6.2002zM447 284.6c16.4004 5.2002 41.2998 13.4004 66.5 3.30078c16.0996 -6.5 26.2002 -18.7002 32.0996 -34.6006c3.5 -9.39941 5.10059 -19.7002 5.10059 -28.7002\n+c-0.200195 0 -0.400391 0 -0.600586 -0.0996094c-0.199219 0.400391 -0.399414 0.900391 -0.5 1.2998c-5 22 -29.8994 43.7998 -67.5996 29.9004c-50.2002 -18.6006 -130.4 -9.7002 -176.9 48c-0.699219 0.899414 -2.39941 1.7002 -1.2998 3.2002\n+c0.100586 0.199219 2.10059 -0.600586 3 -1.30078c18.1006 -13.3994 38.2998 -21.8994 60.2998 -26.1992c30.5 -6.10059 54.6006 -2.90039 79.9004 5.19922zM549.7 167.1c-32.4004 -0.199219 -33.7998 -50.0996 -103.601 -64.3994\n+c-18.1992 -3.7002 -38.6992 -4.60059 -44.8994 -4.2002v0.400391c2.7998 1.5 14.7002 2.59961 29.7002 16.5996c7.89941 7.2998 15.2998 15.0996 22.7998 22.9004c19.5 20.1992 41.3994 42.1992 81.8994 39c23.1006 -1.80078 29.3008 -8.2002 36.1006 -12.7002\n+c0.299805 -0.200195 0.399414 -0.5 0.700195 -0.900391c-0.5 0 -0.700195 -0.0996094 -0.900391 0c-7 2.7002 -14.2998 3.2998 -21.7998 3.2998zM537.4 191.2c-0.100586 -0.200195 -0.100586 -0.400391 -0.200195 -0.600586c-28.9004 4.40039 -48 7.90039 -68.5 -4\n+c-17 -9.89941 -31.4004 -20.5 -62 -24.3994c-27.1006 -3.40039 -45.1006 -2.40039 -66.1006 8c-0.299805 0.200195 -0.599609 0.399414 -1 0.599609c0 0.200195 0.100586 0.299805 0.100586 0.5c24.8994 -3.7998 36.3994 -5.09961 55.5 5.7998\n+c22.2998 12.9004 40.0996 26.6006 71.2998 31c29.5996 4.10059 51.2998 -2.5 70.9004 -16.8994zM268.6 350.7c-0.599609 0.599609 -1.09961 1.2002 -2.09961 2.2998c7.59961 0 29.7002 1.2002 53.4004 -8.40039c19.6992 -8 32.1992 -21 50.1992 -32.8994\n+c11.1006 -7.2998 23.4004 -9.2998 36.4004 -8.10059c4.2998 0.400391 8.5 1.2002 12.7998 1.7002c0.400391 0.100586 0.900391 0 1.5 -0.299805c-0.599609 -0.400391 -1.2002 -0.900391 -1.7998 -1.2002c-8.09961 -4 -16.7002 -6.2998 -25.5996 -7.09961\n+c-26.1006 -2.60059 -50.3008 3.7002 -73.4004 15.3994c-19.2998 9.90039 -36.4004 22.9004 -51.4004 38.6006zM640 112.3c-3.5 -3.09961 -22.7002 -11.5996 -42.7002 -5.2998c-12.2998 3.90039 -19.5 14.9004 -31.5996 24.0996\n+c-10 7.60059 -20.9004 7.90039 -28.1006 8.40039c0.600586 0.799805 0.900391 1.2002 1.2002 1.40039c14.7998 9.19922 30.5 12.1992 47.2998 6.5c12.5 -4.2002 19.2002 -13.5 30.4004 -24.2002c10.7998 -10.4004 21 -9.90039 23.0996 -10.5\n+c0.100586 0.0996094 0.200195 0 0.400391 -0.400391zM427.5 -24.7002c2.2002 -1.2002 1.59961 -1.5 1.5 -2c-18.5 1.40039 -33.9004 7.60059 -46.7998 22.2002c-21.7998 24.7002 -41.7002 27.9004 -48.6006 29.7002c0.5 0.200195 0.800781 0.399414 1.10059 0.399414\n+c13.0996 -0.0996094 26.0996 -0.699219 38.8994 -3.89941c25.3008 -6.40039 35 -25.4004 41.6006 -35.2998c3.2002 -4.80078 7.2998 -8.30078 12.2998 -11.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"playstation\" unicode=\"&#xf3df;\" horiz-adv-x=\"576\" \n+d=\"M570.9 75.7002c-11.3008 -14.2002 -38.8008 -24.2998 -38.8008 -24.2998l-205.1 -73.6006v54.2998l150.9 53.8008c17.0996 6.09961 19.7998 14.7998 5.7998 19.3994c-13.9004 4.60059 -39.1006 3.2998 -56.2002 -2.89941l-100.5 -35.5v56.3994\n+c23.2002 7.7998 47.0996 13.6006 75.7002 16.7998c40.8994 4.5 90.8994 -0.599609 130.2 -15.5c44.1992 -14 49.1992 -34.6992 38 -48.8994zM346.5 168.2v139c0 16.2998 -3 31.2998 -18.2998 35.5996c-11.7002 3.7998 -19 -7.09961 -19 -23.3994v-347.9l-93.7998 29.7998\n+v414.7c39.8994 -7.40039 98 -24.9004 129.199 -35.4004c79.5 -27.2998 106.4 -61.2998 106.4 -137.8c0 -74.5 -46 -102.8 -104.5 -74.5996zM43.2002 37.7998c-45.4004 12.7998 -53 39.5 -32.2998 54.7998c19.0996 14.2002 51.6992 24.9004 51.6992 24.9004l134.5 47.7998\n+v-54.5l-96.7998 -34.5996c-17.0996 -6.10059 -19.7002 -14.7998 -5.7998 -19.4004c13.9004 -4.59961 39.0996 -3.2998 56.2002 2.90039l46.3994 16.8994v-48.7998c-51.5996 -9.2998 -101.399 -7.2998 -153.899 10z\" \u002F>\n+    \u003Cglyph glyph-name=\"pushed\" unicode=\"&#xf3e1;\" horiz-adv-x=\"432\" \n+d=\"M407 336.1c21.7002 -1.89941 33.7998 -28 17.4004 -44.7998l-235.2 -231.3l-35.2998 -80.7998c-11 -17.2002 -41.2002 -14.2998 -47.7002 7l-105.101 348.3c-4.59961 18.2998 6.30078 33.9004 21.4004 36.5996l271.3 44.4004c17.9004 3.40039 39.1006 -13.5 28.7002 -37\n+l-14 -33.4004zM297.6 394.4l-189 -31l177.4 -16.3008l16.7998 39.9004c2.2998 4.90039 -0.0996094 8.09961 -5.2002 7.40039zM22.7002 340.1l157.899 -244.3l96.9004 230.7l-248.7 22.7002c-5.09961 0.899414 -9.2002 -4 -6.09961 -9.10059zM136 -8.40039\n+c0 0 28.2002 64.1006 35.2002 79.1006l-127.7 197.6l83.0996 -275.5c1.5 -4.2998 6.80078 -5.2002 9.40039 -1.2002zM408.8 306.1c3.10059 3.30078 1.40039 7.5 -2.59961 8.60059l-106.4 9.7002l-89.7002 -213.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"python\" unicode=\"&#xf3e2;\" \n+d=\"M439.8 247.5c10.7002 -42.9004 11.2002 -75.0996 0 -108.6c-10.7998 -32.5 -22.2998 -54.2002 -53.3994 -54.2002h-160.2v-13.6006h106.7v-40.6992c0 -30.8008 -26.5 -46.5 -53.4004 -54.3008c-40.5 -11.6992 -73 -9.89941 -106.8 0\n+c-28.2002 8.30078 -53.4004 25.3008 -53.4004 54.3008v101.8c0 29.2998 24.2002 54.2998 53.4004 54.2998h106.8c35.5996 0 66.7998 31 66.7998 67.7998v47.4004h40.1006c31.0996 0 45.6992 -23.2998 53.3994 -54.2002zM286.2 44c-11 0 -20 -9 -20.1006 -20.2998\n+c0 -11.2002 9.10059 -20.4004 20.1006 -20.4004c11.0996 0 20.0996 9.10059 20.0996 20.4004c0 11.2002 -9 20.2998 -20.0996 20.2998zM167.8 199.9c-36.2998 0 -66.7998 -31.1006 -66.7998 -66.4004v-48.7998h-36.7002c-31.0996 0 -49.2002 22.5996 -56.7998 54.2002\n+c-10.2002 42.5 -9.7998 67.8994 0 108.6c8.5 35.5 35.7002 54.2002 66.7998 54.2002h147v13.5996h-106.899v40.7002c0 30.9004 8.19922 47.5996 53.3994 55.5996c32.1006 5.7002 71 6 106.8 0.100586c29 -4.90039 53.4004 -26.6006 53.4004 -55.6006v-101.899\n+c0 -29.7998 -23.7002 -54.2998 -53.4004 -54.2998h-106.8zM161.1 342.5c11.1006 0 20.1006 9.09961 20.1006 20.2998s-9.10059 20.4004 -20.1006 20.4004c-11.0996 0 -20 -9.10059 -20.0996 -20.4004c0 -11.2002 9 -20.2998 20.0996 -20.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"red-river\" unicode=\"&#xf3e3;\" \n+d=\"M353.2 416c52.3994 0 94.7998 -42.4004 94.7998 -94.7998v-258.4c0 -52.3994 -42.4004 -94.7998 -94.7998 -94.7998h-258.4c-52.3994 0 -94.7998 42.4004 -94.7998 94.7998v258.4c0 52.3994 42.4004 94.7998 94.7998 94.7998h258.4zM144.9 247.1\n+c-0.600586 12.4004 11.6992 24.6006 24 24h56.2998c27 0 48.8994 21.9004 48.8994 48.9004h-154.199c-13.2002 0 -23.9004 -10.7002 -23.9004 -23.9004v-154.199c27 0 48.9004 21.8994 48.9004 48.8994v56.2998zM321.2 175.1c27 0 48.8994 21.9004 48.8994 48.9004h-154.199\n+c-13.2002 0 -23.9004 -10.7002 -23.9004 -23.9004v-154.199c27 0 48.9004 21.8994 48.9004 48.8994v56.2998c-0.600586 12.4004 11.6992 24.6006 24 24h56.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"wpressr\" unicode=\"&#xf3e4;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM419.33 281.4c2.41016 5.47949 0.459961 8.2793 -5.62012 8.26953c-104.8 0.00976562 -107.69 -0.0302734 -130.78 0.0302734\n+c-4.31934 0.00976562 -7.10938 -1.82031 -8.83984 -5.78027c-5.70996 -13.0996 -11.5195 -26.1504 -17.2998 -39.21c-2.57031 -5.7998 -1 -8.26953 5.26953 -8.26953c25.2607 0 50.5205 -0.0107422 75.7803 0.0195312\n+c10.0303 0.00976562 8.54004 -13.6602 -3.89941 -13.6396c-26.4307 0.0498047 -52.8604 0 -79.29 0.0498047c-4.91016 0.00976562 -8.33008 -1.88965 -10.3506 -6.5c-4.2998 -9.83008 -32.1494 -73.0801 -32.1895 -73.1602\n+c-3.2002 -7.16016 -16.2607 -6.09961 -11.2803 5.33008c8.26953 18.9902 16.6504 37.9297 24.9795 56.8896c2.25 5.11035 -0.0996094 8.74023 -5.65918 8.75c-15.21 0.0205078 -30.4307 -0.0400391 -45.6406 0.0400391\n+c-3.35938 0.0107422 -5.41016 -1.29004 -6.76953 -4.38965c-31.4307 -71.8701 -29.7803 -67.3203 -30.0098 -67.6904c-3.87012 -6.37012 -14.8604 -3.34961 -10.9502 5.60059c5.66992 13.0098 11.3701 26.0098 17.0898 39c13.5703 30.7793 27.1396 61.5596 40.7402 92.3301\n+c2.54004 5.75 -0.419922 10.5801 -6.66016 10.5898c-14.2402 0.0302734 -28.4805 -0.0498047 -42.7197 0.0498047c-4.26074 0.0302734 -6.84082 -1.76953 -8.54004 -5.65039c-12.8604 -29.3896 -25.8203 -58.7295 -38.75 -88.0791\n+c-8.62012 -19.5605 -17.2305 -39.1201 -25.8906 -58.6602c-1.58008 -3.55078 -1.47949 -6.78027 1.20996 -9.73047c11.2207 -12.3096 22.4707 -24.6094 33.6807 -36.9395c2.08984 -2.30078 4.58984 -3.4502 7.71973 -3.4502c45.9395 0.0195312 91.8701 0.00976562 137.81 0\n+c3.86035 0 6.37988 1.78027 7.91992 5.29004c10.3203 23.5 20.7607 46.9395 30.9502 70.5c2.08984 4.83008 5.21973 6.75 10.3398 6.71973c23.0205 -0.110352 46.0303 -0.0400391 69.0508 -0.0498047c6.0791 0 10.5293 2.72949 12.9697 8.24023\n+c15.2598 34.4795 30.4502 68.9893 45.6299 103.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"replyd\" unicode=\"&#xf3e6;\" \n+d=\"M320 -32h-192c-70.4004 0 -128 57.5996 -128 128v192c0 70.4004 57.5996 128 128 128h192c70.4004 0 128 -57.5996 128 -128v-192c0 -70.4004 -57.5996 -128 -128 -128zM193.4 174.8c-6.10059 2 -11.6006 3.10059 -16.4004 3.10059\n+c-7.2002 0 -13.5 -1.90039 -18.9004 -5.60059c-5.39941 -3.7002 -9.59961 -9 -12.7998 -15.7998h-1.09961l-4.2002 18.2998h-28v-138.899h36.0996v89.6992c1.5 5.40039 4.40039 9.80078 8.7002 13.2002c4.2998 3.40039 9.7998 5.10059 16.2002 5.10059\n+c4.59961 0 9.7998 -1 15.5996 -3.10059zM308.6 71.4004c-3.19922 -2.40039 -7.69922 -4.80078 -13.6992 -7.10059s-12.8008 -3.5 -20.4004 -3.5c-12.2002 0 -21.0996 3 -26.5 8.90039c-5.5 5.89941 -8.5 14.7002 -9 26.3994h83.2998\n+c0.900391 4.80078 1.60059 9.40039 2.10059 13.9004c0.5 4.40039 0.699219 8.59961 0.699219 12.5c0 10.7002 -1.59961 19.7002 -4.69922 26.9004c-3.2002 7.19922 -7.30078 13 -12.5 17.1992c-5.2002 4.30078 -11.1006 7.30078 -17.8008 9.2002\n+c-6.69922 1.7998 -13.5 2.7998 -20.5996 2.7998c-21.0996 0 -37.5 -6.09961 -49.2002 -18.2998s-17.5 -30.5 -17.5 -55c0 -22.7998 5.2002 -40.7002 15.6006 -53.7002c10.3994 -13.0996 26.7998 -19.5996 49.1992 -19.5996c10.7002 0 20.9004 1.5 30.4004 4.59961\n+c9.5 3.10059 17.0996 6.80078 22.5996 11.2002zM286.8 141.7c3.7998 -5.40039 5.2998 -13.1006 4.60059 -23.1006h-51.7002c0.899414 9.40039 3.7002 17 8.2002 22.6006c4.5 5.59961 11.5 8.5 21 8.5c8.19922 0.0996094 14.0996 -2.60059 17.8994 -8zM366.7 139.2\n+c4.09961 -3.90039 9.39941 -5.7998 16.0996 -5.7998c7 0 12.6006 1.89941 16.7002 5.7998c4.09961 3.89941 6.09961 9.09961 6.09961 15.5996s-2 11.6006 -6.09961 15.4004s-9.59961 5.7002 -16.7002 5.7002c-6.7002 0 -12 -1.90039 -16.0996 -5.7002\n+c-4.10059 -3.7998 -6.10059 -8.90039 -6.10059 -15.4004s2 -11.7002 6.10059 -15.5996zM366.7 38.7002c4.09961 -3.90039 9.39941 -5.7998 16.0996 -5.7998c7 0 12.6006 1.89941 16.7002 5.7998c4.09961 3.89941 6.09961 9.09961 6.09961 15.5996\n+s-2 11.6006 -6.09961 15.4004s-9.59961 5.7002 -16.7002 5.7002c-6.7002 0 -12 -1.90039 -16.0996 -5.7002c-4.10059 -3.7998 -6.10059 -8.90039 -6.10059 -15.4004c0 -6.59961 2 -11.7002 6.10059 -15.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"resolving\" unicode=\"&#xf3e7;\" horiz-adv-x=\"496\" \n+d=\"M281.2 169.8l-197.9 -57.2002l-28.5996 98.6006l188.2 54.0996c52.6992 15.2998 65 8.10059 71.0996 -12.7998l11.2002 -39.2998c5.59961 -19.9004 2 -30.1006 -44 -43.4004zM248.5 440c137 0 248.5 -111.4 247.5 -247.7c0 -136.899 -111.5 -248.3 -248.5 -248.3\n+c-46 0 -89.5 12.7002 -126.3 34.7002l-23 80.2002l286.8 -37.3008l48.0996 13.3008l-9.69922 34.1992l-220.4 27.1006l92.5996 26.5996c30.2002 8.7002 42 15.7998 61.4004 33.2002c24.5 23 31.7002 45.5 23.5 73.5996l-10.7002 37.8008\n+c-8.7002 30.1992 -25.0996 49.0996 -61.3994 55.1992c-25.1006 3.5 -44.5 2 -79.3008 -8.19922l-221.899 -63.9004c26 108.8 124.2 189.5 241.3 189.5zM38.2998 59.4004c-24 38.3994 -38.2998 83.2998 -38.2998 131.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"rocketchat\" unicode=\"&#xf3e8;\" horiz-adv-x=\"576\" \n+d=\"M486.41 340.43c119.649 -76.54 119.26 -221 0 -297.14c-77.1201 -50.9199 -179.37 -62.3896 -264.12 -47.1602c-95.5205 -91.1895 -201.72 -49.1602 -222.29 -37c0 0 73.0801 62.1006 61.21 116.49c-45.3896 46.3701 -86.5195 144.57 0 232.77\n+c11.8701 54.3906 -61.21 116.49 -61.21 116.49c20.7695 12.1201 127.26 54.2803 222.29 -37.3799c84.9404 15.3301 187.19 3.75977 264.12 -47.0703zM294.18 43.7803c126.67 0 229.409 66.2197 229.409 148.22s-102.74 148.43 -229.41 148.43\n+s-229.41 -66.4297 -229.41 -148.43c0 -35.79 19.4707 -68.5195 52 -94.1299c9.11426 -29.127 3.78125 -62.0234 -15.999 -98.6904c-0.889648 -1.67969 -1.76953 -3.45996 -2.76953 -5.23926c15.0498 1.33594 38.2158 7.93555 51.71 14.7295\n+c11.0684 6.26562 27.46 18.5361 36.5898 27.3896l19.7705 19.0908c23.6396 -6.27734 62.6758 -11.3721 87.1348 -11.3721c0.269531 0 0.706055 0.000976562 0.974609 0.00195312zM184.119 156.7c-0.133789 -0.00195312 -0.351562 -0.00390625 -0.485352 -0.00390625\n+c-18.6182 0 -33.9912 15.1084 -34.3145 33.7236c-0.700195 45.3896 67.8301 46.3799 68.5195 1.08984v-0.509766c0.000976562 -0.0888672 0.00195312 -0.232422 0.00195312 -0.321289c0 -18.6152 -15.1074 -33.8467 -33.7217 -33.999v0.0205078zM257.889 190.42\n+c-0.790039 45.3896 67.7402 46.4805 68.5303 1.19043v-0.610352c0.389648 -45.0801 -67.7402 -45.5703 -68.5303 -0.580078zM401.269 156.7c-0.133789 -0.00195312 -0.350586 -0.00390625 -0.485352 -0.00390625c-18.6182 0 -33.9951 15.1084 -34.3242 33.7236\n+c-0.69043 45.3896 67.8398 46.3799 68.5303 1.08984v-0.509766c0.000976562 -0.119141 0.00292969 -0.311523 0.00292969 -0.430664c0 -18.6152 -15.1084 -33.7979 -33.7236 -33.8896v0.0205078z\" \u002F>\n+    \u003Cglyph glyph-name=\"rockrms\" unicode=\"&#xf3e9;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM405.4 20.5l-101.5 118.9s73.5996 0.199219 74.1992 0.199219c29.6006 -1.09961 46.6006 33.3008 27.6006 56.1006l-157.7 185.1c-13.2002 17.2998 -40.0996 18.4004 -54.5 0\n+l-147.1 -172.5h90l84.2998 98.9004l84.5996 -99.2998h-75.2998c-30.5 0 -44.5 -35.7002 -26.5996 -56.1006l112 -131.3h90z\" \u002F>\n+    \u003Cglyph glyph-name=\"schlix\" unicode=\"&#xf3ea;\" \n+d=\"M350.5 290.3l-54.2002 46.1006l73.4004 39l78.2998 -44.2002zM192 325.9l45.7002 28.1992l34.7002 -34.5996l-55.4004 -29zM126.9 319.3l31.8994 22.1006l17.2002 -28.4004l-36.7002 -22.5zM103.6 231.1l-8.7998 34.8008l29.6006 18.2998l13.0996 -35.2998z\n+M82.4004 314.8l23.8994 18.1006l8.90039 -24l-26.7002 -18.3008zM59 241.5l-3.59961 28.4004l22.2998 15.5l6.09961 -28.7002zM28.4004 224.9l20.7998 12.7998l3.2998 -33.4004l-22.9004 -12zM1.40039 180l19.1992 10.2002l0.400391 -38.2002l-21 -8.7998zM60.5 120.7\n+l-28.2998 -8.2998l-1.60059 46.7998l25.1006 10.7002zM99 184.8l-31.0996 -13l-5.2002 40.7998l27.3994 14.4004zM123.2 71l-41.6006 -5.90039l-8.09961 63.5l35.2002 10.8008zM151.7 210.9l21.2002 -57.1006l-46.2002 -13.5996l-13.7002 54.0996zM237.4 -19.5996\n+l-70.9004 3.2998l-24.2998 95.7998l55.2002 8.59961zM152.5 260.1l42.2002 22.4004l28 -45.9004l-50.7998 -21.2998zM193.5 165.2l61.2998 18.7002l52.7998 -86.6006l-79.7998 -11.2998zM244.9 250.8l67.2998 28.7998l65.5 -65.3994l-88.6006 -26.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"searchengin\" unicode=\"&#xf3eb;\" horiz-adv-x=\"460\" \n+d=\"M220.6 317.7l-67.1992 -209.3v130.3l-54.7002 -24.2002l54.7002 190.3v-115.3zM137.4 414.4l-1.30078 -4.7002l-15.1992 -52.9004c-40.3008 -15.5 -68.9004 -54.5996 -68.9004 -100.3c0 -52.2998 34.2998 -95.9004 83.4004 -105.5v-53.5996\n+c-77.9004 10.5 -135.4 78.1992 -135.4 159c0 80.5 59.7998 147.199 137.4 158zM448.8 -32.7998c-11.2002 -11.2002 -23.0996 -12.2998 -28.5996 -10.5c-5.40039 1.7998 -27.1006 19.8994 -60.4004 44.3994c-33.2998 24.6006 -33.5996 35.7002 -43 56.7002\n+c-9.39941 20.9004 -30.3994 42.6006 -57.5 52.4004l-9.7002 14.7002c-24.6992 -16.9004 -53 -26.9004 -81.2998 -28.7002l2.10059 6.59961l15.8994 49.5c46.5 11.9004 80.9004 54 80.9004 104.2c0 54.5 -38.4004 102.1 -96 107.1v52.1006\n+c83.2002 -5.10059 148.8 -74.5 148.8 -159.3c0 -33.6006 -11.2002 -64.7002 -29 -90.4004l14.5996 -9.59961c9.80078 -27.1006 31.5 -48 52.4004 -57.4004s32.2002 -9.7002 56.7998 -43c24.6006 -33.2002 42.7002 -54.9004 44.5 -60.2998\n+c1.7998 -5.40039 0.700195 -17.2998 -10.5 -28.5zM438.9 -14.9004c0 4.40039 -3.60059 8 -8 8c-4.40039 0 -8 -3.59961 -8 -8c0 -4.39941 3.59961 -8 8 -8c4.39941 0 8 3.60059 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"servicestack\" unicode=\"&#xf3ec;\" horiz-adv-x=\"496\" \n+d=\"M88 232c81.7002 -10.2002 273.7 -102.3 304 -232h-392c99.5 8.09961 184.5 137 88 232zM120 384c102.8 -15.5 335.3 -167.9 376 -384h-96c-26.2998 126.7 -150.7 216.7 -233.6 250.4c1.2998 49.6992 -14.1006 98 -46.4004 133.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"sistrix\" unicode=\"&#xf3ee;\" \n+d=\"M448 -1l-30.5 -31l-146 148.1c-28.7002 -23.6992 -65.2002 -37.8994 -105 -37.8994c-91.7998 0 -166.5 75.7998 -166.5 168.899c0 93.1006 74.7002 168.9 166.6 168.801c91.8008 0 166.5 -75.8008 166.5 -168.9c0 -37 -11.8994 -71.2998 -31.8994 -99.2002zM166.5 117.2\n+c70.7002 0 128.1 58.2998 128.1 129.899c0 71.6006 -57.5 129.9 -128.1 129.9s-128.1 -58.2998 -128.1 -129.9c0 -71.5996 57.5 -129.899 128.1 -129.899z\" \u002F>\n+    \u003Cglyph glyph-name=\"slack-hash\" unicode=\"&#xf3ef;\" \n+d=\"M446.2 177.6c6.2002 -19 -3.90039 -39.6992 -22.9004 -45.6992l-45.3994 -15.1006l15.6992 -47c6.10059 -19.0996 -3.89941 -39.7002 -23 -45.8994c-21.2998 -6.10059 -40.0996 6 -46 22.8994l-15.6992 47l-93.6006 -31.2998l15.7002 -47\n+c6.09961 -19.0996 -3.90039 -39.7002 -23 -45.9004c-21.2998 -6.09961 -40.0996 6 -46 22.9004l-15.7002 47c-45.7002 -15.2002 -50.8994 -17.7998 -57.7002 -16.7998c-14.5 0.599609 -28.5996 10.0996 -33.5996 24.5996c-6.09961 19 4 39.7002 23 45.9004l45.4004 15.0996\n+l-30.3008 90c-45.6992 -15.2002 -50.8994 -17.7998 -57.6992 -16.7998c-14.5 0.599609 -28.6006 10.0996 -33.6006 24.5996c-6.09961 19.1006 3.90039 39.7002 23 45.9004l45.2998 15l-15.6992 47c-6.10059 19.0996 3.89941 39.7002 23 45.9004\n+c19.0996 6.19922 39.7998 -3.90039 46 -22.9004l15.6992 -47l93.4004 31.2002l-15.7002 47c-6.09961 19.0996 3.90039 39.7002 23 45.8994c19.1006 6.2002 39.7998 -3.89941 46 -22.8994l15.7002 -47l45.4004 15.0996c19.0996 6.2002 39.7998 -3.89941 46 -22.8994\n+c6.09961 -19.1006 -3.90039 -39.7002 -23 -45.9004l-45.4004 -15.0996l30.2998 -90l45.4004 15.0996c19.0996 6.2002 39.7998 -3.90039 46 -22.9004zM192.1 130.4l93.5 31.2998l-30.2998 90.2002l-93.5 -31.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"speakap\" unicode=\"&#xf3f3;\" \n+d=\"M64 56.2197c-79.4102 88.1904 -72 224.36 16.6396 304.141c88.6406 79.7793 224.801 73 304.21 -15.2402c79.4102 -88.2402 72 -224.36 -16.6396 -304.14c-18.7402 -16.8701 64 -43.0908 42 -52.2607c-82.0596 -34.21 -253.91 -35 -346.229 67.5h0.0195312z\n+M277.31 267.82l38.5 40.8594c-9.60938 8.89062 -32 26.8301 -76.1699 27.6006c-52.3301 0.910156 -95.8594 -28.2998 -96.7695 -80c-0.200195 -11.3301 0.290039 -36.7207 29.4199 -54.8301c34.46 -21.4199 86.5195 -21.5098 86 -52.2598\n+c-0.370117 -21.2803 -26.4199 -25.8105 -38.5898 -25.6006c-3 0.0498047 -30.2305 0.459961 -47.6104 24.6201l-40 -42.6104c28.1602 -27 59 -32.6191 83.4902 -33.0498c10.2295 -0.179688 96.4199 -0.330078 97.8398 81\n+c0.280273 15.8105 -2.07031 39.7197 -28.8604 56.5898c-34.3594 21.6406 -85 19.4502 -84.4297 49.75c0.410156 23.25 31 25.3701 37.5303 25.2607c0.429688 0 26.6201 -0.260742 39.6201 -17.3701z\" \u002F>\n+    \u003Cglyph glyph-name=\"staylinked\" unicode=\"&#xf3f5;\" horiz-adv-x=\"440\" \n+d=\"M382.7 155.5l44.2998 -41.2998c3.7002 -3.5 3.2998 -9 -0.700195 -12.2002l-198 -163.9c-9.89941 -7.59961 -17.2998 -0.799805 -17.2998 -0.799805l-208.7 196.101c-3.5 3.5 -3 9 1.2002 12.1992l45.7998 34.9004c4.2002 3.2002 10.4004 3 13.9004 -0.5l151.899 -147.5\n+c3.7002 -3.5 10 -3.7002 14.2002 -0.400391l93.2002 74c4.09961 3.2002 4.5 8.7002 0.900391 12.2002l-84 81.2998c-3.60059 3.5 -9.90039 3.7002 -14 0.5l-0.100586 -0.0996094c-4.09961 -3.2002 -10.3994 -3 -14 0.5l-68.0996 64.2998\n+c-3.5 3.5 -3.10059 9 1.09961 12.2002l57.2998 43.5996c4.10059 3.2002 10.3008 3 13.8008 -0.5l170 -167.3zM437.2 238.9c3.7002 -3.5 3.39941 -9 -0.700195 -12.2002l-45.7998 -35.7998c-4.10059 -3.2002 -10.4004 -3 -14.1006 0.5l-160.399 159\n+c-3.60059 3.5 -9.7998 3.69922 -13.9004 0.5l-92.2002 -71.5c-4.19922 -3.30078 -4.69922 -8.7002 -1.09961 -12.2002l94.5996 -91.7998c3.7002 -3.5 10 -3.60059 14.2002 -0.400391l0.100586 0.0996094c4.19922 3.2002 10.5996 3 14.1992 -0.5l57.1006 -54.3994\n+c3.7002 -3.5 3.2998 -9 -0.900391 -12.2002l-7.7002 -6l0.300781 -0.299805l-50.2002 -38.7998c-4.2002 -3.30078 -10.6006 -3.10059 -14.2998 0.399414l-171.7 165.101l-42.2998 41.6992c-3.60059 3.5 -3 9 1.19922 12.2002l206.801 162.101\n+c8.2998 6.59961 14.7998 2.2998 16.2998 1.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"steam-symbol\" unicode=\"&#xf3f6;\" \n+d=\"M395.5 270.5c0 -33.7998 -27.5 -61 -61 -61c-33.7998 0 -61 27.2998 -61 61s27.2998 61 61 61c33.5 0 61 -27.2002 61 -61zM448 270.3c0 -63 -51 -113.8 -113.7 -113.8l-109.3 -79.7998c-4 -43 -40.5 -76.7998 -84.5 -76.7998c-40.5 0 -74.7002 28.7998 -83 67\n+l-57.5 23.0996v107.3l97.2002 -39.2998c15.0996 9.2002 32.2002 13.2998 52 11.5l71 101.7c0.5 62.2998 51.5 112.8 114 112.8c62.7998 0 113.8 -51 113.8 -113.7zM203 85c0 34.7002 -27.7998 62.5 -62.5 62.5c-4.5 0 -9 -0.5 -13.5 -1.5l26 -10.5\n+c25.5 -10.2002 38 -39 27.7002 -64.5c-10.2002 -25.5 -39.2002 -38 -64.7002 -27.5c-10.2002 4 -20.5 8.2998 -30.7002 12.2002c10.5 -19.7002 31.2002 -33.2002 55.2002 -33.2002c34.7002 0 62.5 27.7998 62.5 62.5zM410.5 270.3c0 42 -34.2998 76.2002 -76.2002 76.2002\n+c-42.2998 0 -76.5 -34.2002 -76.5 -76.2002c0 -42.2002 34.2998 -76.2002 76.5 -76.2002c41.9004 -0.0996094 76.2002 33.9004 76.2002 76.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"sticker-mule\" unicode=\"&#xf3f7;\" horiz-adv-x=\"576\" \n+d=\"M561.7 248.4c-1.2998 -0.300781 0.299805 0 0 0zM555.5 325.8c20.2002 -50.0996 20.5996 -45.2002 20.5996 -52.8994c0 -7.5 -4.09961 -11 -7.19922 -16.5c-1.5 -3 -4.60059 -7.5 -7.2002 -8c-0.400391 0 -3 -0.5 -13.4004 -2.5c-7.2002 -1 -13.3994 4.5 -14.8994 9.5\n+c-1.60059 4.69922 2.7998 10.0996 -11.8008 22.8994c-10.2998 10 -21.0996 11.2998 -31.8994 17c-9.7998 5.7002 -11.9004 -1 -18 -8c-18 -22.8994 -34 -46.8994 -52 -69.7998c-11.7998 -15 -24.2002 -30.4004 -33.5 -47.4004\n+c-3.90039 -6.7998 -9.5 -28.0996 -10.2998 -29.8994c-6.2002 -17.7002 -5.5 -25.7998 -16.5 -68.2998c-3.10059 -10 -5.7002 -21.4004 -8.7002 -32.4004c-2.2002 -6.7998 -7.40039 -49.2998 -0.5 -59.4004c2.09961 -3.5 8.7002 -4.5 11.2998 -8\n+c0.0996094 -0.0996094 9.59961 -18.1992 9.2998 -20c0 -6.09961 -9.39941 -5.59961 -11.2998 -6.5c-4.7998 -2.89941 -3.7998 -5.89941 -6.40039 -7.39941c-5.89941 -2.90039 -32.0996 -3.2002 -36.5 0.5c-4.09961 3 -2.19922 11.8994 -1.5 15\n+c2.2002 15 -2.5 7.89941 -9.7998 11.5c-3.09961 1.5 -4.09961 5.5 -4.59961 10c-0.5 1.5 -1 2.5 -1.5 3.5c-1.7002 10.7002 6.7998 33.5996 8.2002 43.3994c4.89941 23.7002 -0.700195 37.2002 1.5 46.9004c3.69922 16.2002 4.09961 3.5 4.09961 29.9004\n+c-1.40039 25.8994 3.2998 36.8994 0.5 38.8994c-14.7998 0 -64.2998 -10.7002 -112.2 -2c-46.0996 8.90039 -59.3994 29 -65.3994 30.9004c-10.3008 4.5 -23.2002 -0.5 -27.3008 -7c-0.0996094 -0.100586 -35 -70.6006 -39.5996 -87.7998\n+c-6.2002 -20.5 -0.5 -47.4004 4.09961 -66.8008c0 -0.0996094 4.5 -14.5996 10.3008 -19.5c2.09961 -1.5 5.09961 -2.5 7.19922 -4.5c2.80078 -2.69922 9.40039 -15.1992 9.80078 -16c2.59961 -4.5 3.59961 -8 -1.5 -10.5c-3.60059 -2 -9.30078 -2.5 -14.4004 -2.5\n+c-2.59961 -0.5 -1.5 -3.5 -3.09961 -5c-2.90039 -2.7998 -20.7002 -6.09961 -29.9004 -2.5c-2.59961 1 -5.7002 3 -6.2002 5c-1.5 4 2.10059 9 -1 12.5c-4.5 2.90039 -13.0996 2 -17 12c-2.2002 5.40039 -2.59961 7.60059 -2.59961 49.4004\n+c0 9.7002 -5.90039 38.7002 -8.2002 46.9004c-1.5 5.5 -1.5 11.5 0 16c0.299805 0.899414 4.09961 4.59961 4.09961 13c-1 1.5 -4.59961 0.5 -5.09961 1.5c-10.4004 80.5996 -5.90039 79 -7.7002 98.2998c-1.5 16 -10.8994 43.8994 -6.7002 64.2998\n+c0.5 2.40039 3.40039 21 24.2002 38.9004c31 26.6992 48.4004 38.2998 159 11.5c1.10059 -0.400391 66.2998 -21.1006 110.7 9c15.5 11.2998 28.7998 11.2998 35.5 16c0.0996094 0.0996094 61.7002 52.0996 87 65.2998c47.2002 29.3994 69.9004 16.7002 75.0996 18\n+c4.7002 1 13.4004 25.7998 17 25.7998c5.5 0 1.60059 -20.2002 3.60059 -25.9004c0.5 -2 3.59961 -5 6.2002 -5c2.2998 0 1.69922 0.800781 10.2998 5c8.39941 5.40039 14.8994 17.6006 20.5996 17c11.7002 -1.59961 -19 -41.5996 -19 -46.8994\n+c0 -2 0.200195 -0.799805 4.60059 -9.5c2.59961 -5.5 4.59961 -13.5 6.19922 -20c8.30078 -29.7002 5.7002 -14.6006 13.4004 -36.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"studiovinari\" unicode=\"&#xf3f8;\" horiz-adv-x=\"512\" \n+d=\"M480.3 260.3l4.2002 -28v-28l-25.0996 -44.0996l-39.8008 -78.4004l-56.0996 -67.5l-79.0996 -37.7998l-17.7002 -24.5l-7.7002 -12l-9.59961 -4s17.2998 63.5996 19.3994 63.5996c2.10059 0 20.2998 -0.699219 20.2998 -0.699219l66.7002 38.5996l-92.5 -26.0996\n+l-55.8994 -36.8008l-22.8008 -28l-6.59961 -1.39941l20.7998 73.5996l6.90039 5.5l20.7002 -12.8994l88.2998 45.1992l56.7998 51.5l14.7998 68.4004l-125.399 -23.2998l15.1992 18.2002l-173.399 53.2998l81.8994 10.5l-166 122.899l114.9 -18.0996l-101.3 108\n+l252.899 -126.6l-31.5 38l124.4 -74.4004l-143.3 99l18.7002 -38.4004l-49.6006 18.1006l-45.5 84.2998l194.601 -122l-42.9004 55.7998l108 -96.3994l12 8.89941l-21 16.4004l4.2002 37.7998l37.7998 10.4004l29.2002 -24.7002l11.5 -4.2002l-7 -6.2002l8.5 -12\n+l-13.1006 -7.39941l-10.2998 -20.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"supple\" unicode=\"&#xf3f9;\" horiz-adv-x=\"640\" \n+d=\"M640 185.5c0 -64.0996 -109 -116.1 -243.5 -116.1c-24.7998 0 -48.5996 1.7998 -71.0996 5c7.69922 -0.400391 15.5 -0.600586 23.3994 -0.600586c134.5 0 243.5 56.9004 243.5 127.101c0 29.3994 -19.0996 56.3994 -51.2002 78\n+c60 -21.1006 98.9004 -55.1006 98.9004 -93.4004zM47.7002 220.1c0.0996094 -29.3994 19.2998 -56.5 51.5996 -78c-60.2002 21 -99.2002 55 -99.2998 93.3008c-0.0996094 64.0996 108.8 116.3 243.3 116.699c24.7002 0 48.5 -1.69922 71 -4.89941\n+c-7.7002 0.299805 -15.3994 0.5 -23.2998 0.5c-134.5 -0.299805 -243.4 -57.4004 -243.3 -127.601zM107.9 180.2l8.7998 10.8994s8.7998 -10.0996 20.7002 -10.0996c6.5 0 12.2998 3.5 12.2998 10.0996c0 14.5 -40.2002 13.3008 -40.2002 39.9004\n+c0 13.9004 12 24.0996 28.5 24.0996c10 0 25.4004 -4.69922 25.4004 -16.7998v-7.89941h-14.2002v3.89941c0 4 -5.60059 6.60059 -11.2998 6.60059c-7.2002 0 -12.5 -3.7002 -12.5 -9.10059c0 -14.5996 40.1992 -11.7002 40.1992 -39.7002\n+c0 -13.5996 -10.5 -25.0996 -28.3994 -25.0996c-18.7998 0 -29.2998 13.2002 -29.2998 13.2002zM228.7 253.8h15.7002v-55c0 -18.8994 -13.3008 -31.8994 -33.4004 -31.8994c-20.2998 0 -33.7002 13 -33.7002 31.8994v55h15.7998v-54.5\n+c0 -11.2002 7.10059 -17.7002 17.8008 -17.7002c10.6992 0 17.7998 6.5 17.7998 17.8008v54.3994zM263.1 168.4v72h-7.7998v13.3994h39.1006c16 0 27.1992 -11.2002 27.1992 -27.7998s-11.1992 -28.0996 -27.1992 -28.0996h-15.5v-29.5h-15.8008zM278.9 211.4h12.5996\n+c8.90039 0 14 5.7998 14 14.6992c0 8.7002 -5 14.4004 -13.7002 14.4004h-12.8994v-29.0996zM335.9 168.4v72h-7.80078v13.3994h39.1006c16 0 27.2002 -11.2002 27.2002 -27.7998s-11.2002 -28.0996 -27.2002 -28.0996h-15.5v-29.5h-15.7998zM351.6 211.4h12.6006\n+c9 0 14 5.7998 14 14.6992c0 8.7002 -5 14.4004 -13.7002 14.4004h-12.9004v-29.0996zM408.7 176.6h0.0996094v61.2002c0 1.60059 -0.899414 2.60059 -2.59961 2.60059h-5.2002v13.3994h15.4004c5.7998 0 8.19922 -2.5 8.19922 -8.2002v-61.1992\n+c0 -1.60059 0.900391 -2.60059 2.60059 -2.60059h18.5996c1.60059 0 2.60059 0.900391 2.60059 2.60059v5.19922h14.2998v-13c0 -5.7998 -2.40039 -8.19922 -8.2002 -8.19922h-37.5996c-5.80078 0 -8.2002 2.39941 -8.2002 8.19922zM472.1 176.6h-0.0996094v63.9004h-7.7998\n+v13.4004h51.5996c5.7002 0 8.2002 -2.5 8.2002 -8.2002v-13h-14.2002v5.2002c0 1.59961 -0.899414 2.59961 -2.59961 2.59961h-19.2002v-22.4004h27.7002v-13.3994h-27.7002v-20.2998c0 -1.60059 0.900391 -2.60059 2.59961 -2.60059h19.7002\n+c1.60059 0 2.60059 0.900391 2.60059 2.60059v5.19922h14.2998v-13c0 -5.7998 -2.5 -8.19922 -8.2002 -8.19922h-38.7002c-5.7998 0 -8.2002 2.39941 -8.2002 8.19922zM531 252.6h-2.7002v1.2002h7v-1.2002h-2.7002v-5.89941h-1.59961v5.89941zM536.7 253.8h2.39941\n+l2.10059 -5.09961l2.09961 5.09961h2.2998v-7.09961h-1.5v5.7002l-2.2998 -5.7002h-1.2998l-2.2998 5.7002v-5.7002h-1.5v7.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"telegram-plane\" unicode=\"&#xf3fe;\" \n+d=\"M446.7 349.4l-67.6006 -318.801c-5.09961 -22.5 -18.3994 -28.0996 -37.2998 -17.5l-103 75.9004l-49.7002 -47.7998c-5.5 -5.5 -10.0996 -10.1006 -20.6992 -10.1006l7.39941 104.9l190.9 172.5c8.2998 7.40039 -1.7998 11.5 -12.9004 4.09961l-236 -148.6\n+l-101.6 31.7998c-22.1006 6.90039 -22.5 22.1006 4.59961 32.7002l397.4 153.1c18.3994 6.90039 34.5 -4.09961 28.5 -32.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"uber\" unicode=\"&#xf402;\" \n+d=\"M414.1 416c18.7002 0 33.9004 -15.2002 33.8008 -33.9004v-380.199c0 -18.7002 -15.2002 -33.9004 -33.9004 -33.9004h-380.1c-18.7002 0 -33.9004 15.2002 -33.9004 34v380.1c0 18.7002 15.2002 33.9004 33.9004 33.9004h380.199zM237.6 56.9004\n+c74.6006 7.5 129 74.0996 121.5 148.6c-7 69.4004 -65.3994 122.2 -135.1 122.2s-128.1 -52.7998 -135.1 -122.2h94.3994v20.4004c0 3.7998 3.10059 6.7998 6.7998 6.7998h67.9004c3.7998 0 6.7998 -3.10059 6.7998 -6.7998v-67.9004\n+c0 -3.7998 -3.09961 -6.7998 -6.7998 -6.7998h-67.9004c-3.7998 0 -6.7998 3.09961 -6.7998 6.7998v20.4004h-94.3994c7.5 -74.6006 74.0996 -129 148.699 -121.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"uikit\" unicode=\"&#xf403;\" \n+d=\"M443.9 320v-256l-225.9 -128l-218 128v214.3l87.5996 -45.0996v-117l133.5 -75.5l135.801 75.5v151l-101.101 57.5996l87.6006 53.1006zM308.6 398.9l-87.3994 -53l-86 47.2998l88.5996 54.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"uniregistry\" unicode=\"&#xf404;\" horiz-adv-x=\"384\" \n+d=\"M192 -32c-39.5 0 -76.2002 11.7998 -106.7 32.2002h213.5c-30.5996 -20.4004 -67.2998 -32.2002 -106.8 -32.2002zM102.9 161.1c0 -2.5 0.0996094 -5 0.299805 -7.39941h-103.101c-0.0996094 2.39941 -0.0996094 4.89941 -0.0996094 7.39941v12.4004h102.9v-12.4004z\n+M123.4 104.1c8.89941 -10.5996 20.0996 -19.0996 33 -24.7998h-138.301c-3.7998 8 -7 16.2998 -9.59961 24.7998h114.9zM105.7 138.8c2 -7.89941 5.2002 -15.3994 9.2002 -22.2998h-109.7c-1.7002 7.2998 -3 14.7002 -3.90039 22.2998h104.4zM102.9 208.1v-17.2998h-102.9\n+v17.2998h102.9zM102.9 381.3v-4.89941h-102.9v4.89941h102.9zM102.9 416v-2.5h-102.9v2.5h102.9zM102.9 346.7v-7.40039h-102.9v7.40039h102.9zM102.9 242.7v-14.7998h-102.9v14.7998h102.9zM102.9 312v-9.90039h-102.9v9.90039h102.9zM102.9 277.4v-12.4004h-102.9v12.4004\n+h102.9zM269.1 116.5c4 6.90039 7.10059 14.4004 9.2002 22.2998h104.4c-0.799805 -7.59961 -2.10059 -15 -3.90039 -22.2998h-109.7zM281.1 302.2v9.7998h102.9v-9.7998h-102.9zM281.1 265v12.4004h102.9v-12.4004h-102.9zM281.1 339.3v7.40039h102.9v-7.40039h-102.9z\n+M281.1 416h102.9v-2.5h-102.9v2.5zM78.0996 5.09961c-11.7998 8.7002 -23.5996 18.7002 -33.1992 29.7002h293.1c-9.5 -11.0996 -20.4004 -21 -32.2002 -29.7002h-227.7zM281.1 376.4v4.89941h102.9v-4.89941h-102.9zM281.1 227.9v14.7998h102.9v-14.7998h-102.9z\n+M38.7998 42.2998c-6.59961 8.5 -10.5996 17.6006 -15.7998 27.2002h338.9c-5.2002 -9.59961 -11.1006 -18.7002 -17.8008 -27.2002h-305.3zM227.6 79.4004c12.8008 5.59961 24.1006 14.0996 32.9004 24.7998h115c-2.7002 -8.60059 -4.7998 -16.7998 -8.5 -24.7998h-139.4z\n+M281.1 161.1v12.4004h102.9v-12.4004c0 -2.5 -0.0996094 -4.89941 -0.200195 -7.39941h-103.1c0.299805 2.39941 0.399414 4.89941 0.399414 7.39941zM281.1 190.8v17.2998h102.9v-17.2998h-102.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"untappd\" unicode=\"&#xf405;\" horiz-adv-x=\"640\" \n+d=\"M401.3 398.1c-79.7998 -160.1 -84.5996 -152.5 -87.8994 -173.199l-5.2002 -32.8008c-1.90039 -12 -6.60059 -23.5 -13.7002 -33.3994l-148.9 -207.8c-7.59961 -10.6006 -20.3994 -16.2002 -33.3994 -14.6006c-40.2998 5 -77.7998 32.2002 -95.2998 68.5\n+c-5.7002 11.7998 -4.5 25.7998 3.09961 36.4004l148.9 207.899c7.09961 9.90039 16.3994 18 27.1992 23.7002l29.3008 15.5c18.5 9.7998 9.69922 11.9004 135.6 138.9c1 4.7998 1 7.2998 3.59961 8c3 0.700195 6.60059 1 6.30078 4.59961l-0.400391 4.60059\n+c-0.200195 1.89941 1.2998 3.59961 3.2002 3.59961c4.5 0.0996094 13.2002 -1.2002 25.5996 -10c12.2998 -8.90039 16.4004 -16.7998 17.7002 -21.0996c0.599609 -1.80078 -0.599609 -3.7002 -2.40039 -4.2002l-4.5 -1.10059\n+c-3.39941 -0.899414 -2.5 -4.39941 -2.2998 -7.39941c0.100586 -2.7998 -2.2998 -3.60059 -6.5 -6.10059zM230.1 411.6c-3.19922 0.800781 -8.19922 1.2002 -6.7998 5.40039c1.2998 4.2998 5.40039 12.2002 17.7002 21.0996c12.4004 8.90039 21.0996 10.1006 25.5996 10\n+c4.2002 -0.0996094 3.10059 -4.89941 2.80078 -8.19922c-0.300781 -3.60059 3.2998 -3.80078 6.2998 -4.60059c2.59961 -0.700195 2.59961 -3.2998 3.59961 -8c9.10059 -9.2002 17.6006 -17.8994 25.6006 -26.0996c1.2998 -1.40039 1.19922 -3.5 -0.100586 -4.90039\n+c-15.8994 -16.3994 -29.2998 -30.5996 -40.5 -42.5996c-1 -1 -2.59961 -0.799805 -3.2998 0.5c-6.90039 13.5 -14.2998 28.0996 -22.2002 44c-4.2998 2.5 -6.59961 3.2998 -6.39941 6c0.199219 3 1.09961 6.5 -2.30078 7.39941zM620 41.2998\n+c7.7002 -10.7002 8.7998 -24.7002 3.40039 -36.5996c-17.7002 -36.6006 -55.4004 -63.7002 -95.7002 -68.6006c-12.9004 -1.5 -25.5 4.10059 -33.1006 14.7002l-148.899 207.9c-7.10059 9.89941 -11.7998 21.3994 -13.7002 33.3994\n+c-1.59961 9.80078 -2 19.1006 -0.299805 29.8008c1.89941 12 2.7002 6 49 94.7998c0.700195 1.39941 2.59961 1.59961 3.59961 0.5c16.2998 -18 19.2998 -23 30.5 -28.9004c29.7998 -15.7002 43.2002 -20.5996 56.4004 -39.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"ussunnah\" unicode=\"&#xf407;\" horiz-adv-x=\"512\" \n+d=\"M156.8 162.9l5.7002 -14.4004h-8.2002c-1.2998 3.2002 -3.09961 7.7002 -3.7998 9.5c-2.5 6.2998 -1.09961 8.40039 0 10c1.90039 2.7002 3.2002 4.40039 3.59961 5.2002c0 -2.2002 0.800781 -5.7002 2.7002 -10.2998zM454.1 144.1\n+c-2.09961 -13.7998 -5.69922 -27.0996 -10.5 -39.6992l43 -23.4004l-44.7998 18.7998c-5.2998 -13.2002 -12 -25.5996 -19.8994 -37.2002l34.1992 -30.1992l-36.7998 26.3994c-8.39941 -11.7998 -18 -22.5996 -28.7002 -32.2998l24.9004 -34.7002l-28.0996 31.7998\n+c-11 -9.59961 -23.1006 -18 -36.1006 -25.0996l15.7002 -37.2002l-19.2998 35.2998c-13.1006 -6.7998 -27 -12.0996 -41.6006 -15.8994l6.7002 -38.4004l-10.5 37.4004c-14.2998 -3.40039 -29.2002 -5.2998 -44.5 -5.40039l-1.7998 -38.2998l-1.90039 38.4004\n+c-15.2998 0.0996094 -30.1992 2 -44.5 5.2998l-10.5996 -37.2998l6.7002 38.1992c-14.6006 3.7002 -28.6006 9.10059 -41.7002 15.8008l-19.2002 -35.1006l15.6006 37c-13 7 -25.2002 15.4004 -36.2002 25.1006l-27.9004 -31.6006l24.7002 34.4004\n+c-10.7002 9.7002 -20.4004 20.5 -28.7998 32.2998l-36.5 -26.2002l33.8994 29.9004c-7.89941 11.5996 -14.5996 24.0996 -20 37.2998l-44.3994 -18.7002l42.5996 23.2002c-4.7998 12.7002 -8.39941 26.0996 -10.5 39.9004l-51 -9l50.2998 14.1992\n+c-1.09961 8.5 -1.69922 17.1006 -1.69922 25.9004c0 4.7002 0.199219 9.40039 0.5 14.0996l-55.4004 2.90039l56 2.7998c1.2998 13.1006 3.7998 25.7998 7.5 38.1006l-57.0996 16.0996l58.8994 -10.4004c4 12 9.10059 23.5 15.2002 34.4004l-55.0996 30l58.2998 -24.5996\n+c6.2998 10.5996 13.5 20.3994 21.5996 29.5996l-49.5 43.5996l53.9004 -38.6992c8.09961 8.59961 17 16.5 26.5996 23.5996l-40 55.5996l45.6006 -51.5996c9.5 6.59961 19.6992 12.2998 30.2998 17.2002l-27.2998 64.8994l33.7998 -62.0996\n+c10.5 4.40039 21.3994 7.90039 32.7002 10.4004l-12.4004 70.6992l19.5 -69.1992c11 2.09961 22.2998 3.19922 33.7998 3.39941l3.7002 72.2002l3.59961 -72.2002c11.5 -0.200195 22.8008 -1.39941 33.8008 -3.5l19.5996 69.2998l-12.4004 -70.6992\n+c11.3008 -2.60059 22.2002 -6.10059 32.6006 -10.5l33.8994 62.1992l-27.3994 -65.0996c10.5996 -4.90039 20.7002 -10.7002 30.2002 -17.2002l45.7998 51.7998l-40.1006 -55.8994c9.5 -7.10059 18.4004 -15 26.5 -23.6006l54.2002 38.9004l-49.7002 -43.9004\n+c8 -9.09961 15.2002 -18.8994 21.5 -29.3994l58.7002 24.7002l-55.5 -30.2002c6.10059 -10.9004 11.1006 -22.2998 15.1006 -34.2998l59.2998 10.3994l-57.5 -16.2002c3.7002 -12.1992 6.2002 -24.8994 7.5 -37.8994l56.2998 -2.7002l-56 -2.7998\n+c0.299805 -4.60059 0.5 -9.2998 0.5 -14.1006c0 -8.69922 -0.599609 -17.2998 -1.59961 -25.7998l50.6992 -14.2998zM432.3 175.1c0 97.5 -79 176.5 -176.5 176.5s-176.5 -79 -176.5 -176.5s79 -176.5 176.5 -176.5s176.5 79 176.5 176.5zM408.3 175.1\n+c0 -84.2998 -68.2998 -152.6 -152.6 -152.6s-152.601 68.2998 -152.601 152.6c0 84.3008 68.3008 152.601 152.601 152.601s152.6 -68.2998 152.6 -152.601zM195 207c0 -2.09961 1.2998 -3.7998 3.59961 -5.09961c3.30078 -1.90039 6.2002 -4.60059 8.2002 -8.2002\n+c2.7998 5.7002 4.2998 9.5 4.2998 11.2002c0 2.19922 -1.09961 4.39941 -3.19922 7c-2.10059 2.5 -3.2002 5.19922 -3.30078 7.69922c-6.5 -6.7998 -9.59961 -10.8994 -9.59961 -12.5996zM154.3 226c0 -2.09961 1.2998 -3.7998 3.60059 -5.09961\n+c3.5 -1.90039 6.19922 -4.60059 8.19922 -8.2002c2.80078 5.7002 4.30078 9.5 4.30078 11.2002c0 2.19922 -1.10059 4.39941 -3.2002 7c-2.10059 2.5 -3.2002 5.19922 -3.2998 7.69922c-6.5 -6.7998 -9.60059 -10.8994 -9.60059 -12.5996zM135.3 226\n+c0 -2.09961 1.2998 -3.7998 3.60059 -5.09961c3.2998 -1.90039 6.19922 -4.60059 8.19922 -8.2002c2.80078 5.7002 4.30078 9.5 4.30078 11.2002c0 2.19922 -1.10059 4.39941 -3.2002 7c-2.10059 2.5 -3.2002 5.19922 -3.2998 7.69922\n+c-6.40039 -6.7998 -9.60059 -10.8994 -9.60059 -12.5996zM340.2 138.1c-8.40039 3 -8.7002 6.80078 -8.7002 15.6006v112.3c-8.2002 -12.5 -14.2002 -18.5996 -18 -18.5996c6.2998 -14.4004 9.5 -23.9004 9.5 -28.3008v-64.2998c0 -2.2002 -2.2002 -6.5 -4.7002 -6.5h-18\n+c-2.7998 7.5 -10.2002 26.9004 -15.2998 40.2998c-2 -2.5 -7.2002 -9.19922 -10.7002 -13.6992c2.40039 -1.60059 4.10059 -3.60059 5.2002 -6.30078c2.59961 -6.69922 6.40039 -16.5 7.90039 -20.1992h-9.2002c-3.90039 10.3994 -9.60059 25.3994 -11.7998 31.0996\n+c-2 -2.5 -7.2002 -9.2002 -10.7002 -13.7002c2.39941 -1.59961 4.09961 -3.59961 5.2002 -6.2998c0.799805 -2 2.7998 -7.2998 4.2998 -10.9004h-9.2002c-1.5 4.10059 -5.59961 14.6006 -8.40039 22c-2 -2.5 -7.19922 -9.19922 -10.6992 -13.6992\n+c2.5 -1.60059 4.2998 -3.60059 5.19922 -6.30078c0.200195 -0.599609 0.5 -1.39941 0.600586 -1.69922h-17.7002c-4.59961 13.8994 -11.4004 27.6992 -11.4004 34.0996c0 2.2002 0.300781 5.09961 1.10059 8.2002c-8.7998 -10.7998 -14 -15.9004 -14 -25\n+c0 -7.5 10.3994 -28.2998 10.3994 -33.2998c0 -1.7002 -0.5 -3.30078 -1.39941 -4.90039c-9.60059 12.7002 -15.5 20.7002 -18.7998 20.7002h-12l-11.2002 28c-3.7998 9.59961 -5.7002 16 -5.7002 18.7998c0 3.7998 0.5 7.7002 1.7002 12.2002\n+c-1 -1.2998 -3.7002 -4.7002 -5.5 -7.10059c-0.799805 2.10059 -3.10059 7.7002 -4.60059 11.5c-2.09961 -2.5 -7.5 -9.09961 -11.1992 -13.5996c0.899414 -2.2998 3.2998 -8.09961 4.89941 -12.2002c-2.5 -3.2998 -9.09961 -11.7998 -13.5996 -17.7002\n+c-4 -5.2998 -5.7998 -13.2998 -2.7002 -21.7998c2.5 -6.7002 2 -7.89941 -1.7002 -14.0996h61.7002c5.5 0 14.2998 -14 15.5 -22c13.2002 16 15.4004 19.5996 16.7998 21.5996h107c3.90039 0 7.2002 1.90039 9.90039 5.7998zM360.3 164.7v101.6\n+c-9 -12.5 -15.8994 -18.5996 -20.7002 -18.5996c7.10059 -14.4004 10.7002 -23.9004 10.7002 -28.2998v-66.3008c0 -17.5 8.60059 -20.3994 24 -20.3994c8.10059 0 12.5 0.799805 13.7002 2.7002c-4.2998 1.59961 -7.59961 2.5 -9.90039 3.2998\n+c-8.09961 3.2002 -17.7998 7.39941 -17.7998 26z\" \u002F>\n+    \u003Cglyph glyph-name=\"vaadin\" unicode=\"&#xf408;\" \n+d=\"M224.5 307.3c1.5 17.6006 4.90039 52.7002 49.7998 52.7002h98.6006c20.6992 0 32.0996 7.7998 32.0996 21.5996v12.3008c0 12.1992 9.2998 22.0996 21.5 22.0996s21.5 -9.90039 21.5 -22.0996v-36.5c0 -42.9004 -21.5 -62 -66.7998 -62h-100.5\n+c-30.1006 0 -33 -14.7002 -33 -27.1006c0 -1.2998 -0.100586 -2.5 -0.200195 -3.7002c-0.700195 -12.2998 -10.9004 -22.1992 -23.4004 -22.1992s-22.6992 9.7998 -23.3994 22.1992c-0.100586 1.2002 -0.200195 2.40039 -0.200195 3.7002c0 12.2998 -3 27.1006 -33 27.1006\n+h-100.7c-45.2998 0 -66.7998 19.0996 -66.7998 62v36.5c0 12.1992 9.40039 22.0996 21.5996 22.0996c12.2002 0 21.5 -9.90039 21.5 -22.0996v-12.3008c0 -13.7998 11.4004 -21.5996 32.1006 -21.5996h98.5996c44.7998 0 48.2998 -35.0996 49.7998 -52.7002h0.900391z\n+M224 -8c-11.5 0 -21.4004 7 -25.7002 16.2998c-1.09961 1.7998 -97.0996 169.5 -98.2002 171.4c-11.8994 19.7002 3.2002 44.2998 27.2002 44.2998c13.9004 0 23.4004 -6.40039 29.7998 -20.2998l66.9004 -117.7l66.9004 117.7c6.5 13.8994 15.8994 20.2998 29.7998 20.2998\n+c24 0 39.0996 -24.7002 27.2002 -44.2998c-1.10059 -1.7998 -97.1006 -169.601 -98.2002 -171.4c-4.2998 -9.2998 -14.2002 -16.2998 -25.7002 -16.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"viber\" unicode=\"&#xf409;\" horiz-adv-x=\"512\" \n+d=\"M444 398.1c42.2002 -36.6992 65.5996 -117.899 49.7998 -246.5c-15.2002 -124.6 -109.1 -136.6 -125.7 -142c-7.19922 -2.2998 -70.2998 -18.0996 -152.5 -11.1992c-9.09961 -10.5 -21.0996 -24.3008 -29.7998 -33.7002\n+c-15.8994 -17.1006 -25.7002 -33 -42.2998 -27.7998c-13.7998 4.19922 -13 25.0996 -13 25.0996l0.0996094 51.5996h-0.0996094c-120.1 33.8008 -118.4 158.4 -117 224.9s14.2998 120.2 50.9004 156.8c65.7998 60.4004 200.899 52.2998 200.899 52.2998\n+c114.601 -0.5 166 -37.7998 178.7 -49.5zM457.9 161c13.2998 107.3 -4.90039 180.5 -40.6006 211.1c-10.7998 9.80078 -57.2002 39 -154.1 39.4004c0 0 -114.7 7.5 -170.4 -43c-31 -30.5996 -41.5 -76.0996 -42.5996 -131.6\n+c-1.10059 -55.5 -7.10059 -161.601 94.7002 -189.801c-0.100586 0 -0.100586 0 0 0c0 0 -0.400391 -78.7998 -0.400391 -85.6992c-0.0996094 -10.5 5.7002 -11 11 -5.7002c16.2002 16.2998 68.2002 79 68.2002 79c69.7002 -4.5 125.2 9.2998 131.2 11.2002\n+c14 4.5 90.0996 11.0996 103 115.1zM318.9 241.8c0.399414 -8.59961 -12.5 -9.2002 -12.9004 -0.599609c-1.09961 22 -11.4004 32.7002 -32.5996 33.8994c-8.60059 0.5 -7.80078 13.4004 0.699219 12.9004c27.9004 -1.5 43.4004 -17.5 44.8008 -46.2002zM339.2 230.5\n+c1 42.4004 -25.5 75.5996 -75.7998 79.2998c-8.5 0.600586 -7.60059 13.5 0.899414 12.9004c58 -4.2002 88.9004 -44.1006 87.7998 -92.5c-0.0996094 -8.60059 -13.0996 -8.2002 -12.8994 0.299805zM386.2 217.1c0.0996094 -8.59961 -12.9004 -8.69922 -12.9004 -0.0996094\n+c-0.599609 81.5 -54.8994 125.9 -120.8 126.4c-8.5 0.0996094 -8.5 12.8994 0 12.8994c73.7002 -0.5 133 -51.3994 133.7 -139.2zM374.9 119v-0.200195c-10.8008 -19 -31 -40 -51.8008 -33.2998l-0.199219 0.299805c-21.1006 5.90039 -70.8008 31.5 -102.2 56.5\n+c-16.2002 12.7998 -31 27.9004 -42.4004 42.4004c-10.2998 12.8994 -20.7002 28.2002 -30.7998 46.5996c-21.2998 38.5 -26 55.7002 -26 55.7002c-6.7002 20.7998 14.2002 41 33.2998 51.7998h0.200195c9.2002 4.7998 18 3.2002 23.9004 -3.89941\n+c0 0 12.3994 -14.8008 17.6992 -22.1006c5 -6.7998 11.7002 -17.7002 15.2002 -23.7998c6.10059 -10.9004 2.2998 -22 -3.7002 -26.5996l-12 -9.60059c-6.09961 -4.89941 -5.2998 -14 -5.2998 -14s17.7998 -67.2998 84.2998 -84.2998c0 0 9.10059 -0.799805 14 5.2998\n+l9.60059 12c4.59961 6 15.7002 9.7998 26.5996 3.7002c14.7002 -8.2998 33.4004 -21.2002 45.7998 -32.9004c7 -5.69922 8.60059 -14.3994 3.80078 -23.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"vimeo\" unicode=\"&#xf40a;\" \n+d=\"M403.2 416c24.7002 0 44.7998 -20.0996 44.7998 -44.7998v-358.4c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v358.4c0 24.7002 20.0996 44.7998 44.7998 44.7998h358.4zM377 267.2\n+c1.90039 42.2002 -13.7998 63.7998 -47.0996 64.7002c-44.9004 1.39941 -75.3008 -23.9004 -91.2002 -76c19.8994 8.5 49.2998 10.7998 45.7998 -22.4004c-1 -11.2002 -8.2998 -27.5 -21.7998 -48.9004c-37.7002 -59.3994 -46.9004 -39.5996 -67.6006 91.6006\n+c-5.7998 36.8994 -21.2998 54.0996 -46.5 51.7002c-22.2998 -2 -57.8994 -38.4004 -95.1992 -71.2002l15.1992 -19.6006c14.5 10.1006 23 15.2002 25.4004 15.2002c21 0 31.9004 -54.7002 57.4004 -148c13.0996 -34.8994 29 -52.2998 47.8994 -52.2998\n+c30.4004 0 67.7002 28.5996 111.7 85.7998c42.5996 54.7002 64.5996 97.9004 66 129.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"vnv\" unicode=\"&#xf40b;\" horiz-adv-x=\"640\" \n+d=\"M104.9 96c-34.1006 0 -46.4004 30.4004 -46.4004 30.4004l-55.9004 111.5s-10.3994 18.0996 10.4004 18.0996h32.7998c10.4004 0 13.2002 -8.7002 18.7998 -18.0996l36.7002 -74.5s5.2002 -13.1006 21.1006 -13.1006c15.8994 0 21.0996 13.1006 21.0996 13.1006\n+l36.7002 74.5c5.59961 9.5 8.39941 18.0996 18.7998 18.0996h32.7998c20.7998 0 10.4004 -18.0996 10.4004 -18.0996l-55.7998 -111.5s-12.2002 -30.4004 -46.4004 -30.4004h-35.0996zM499.9 96c-34.1006 0 -46.4004 30.4004 -46.4004 30.4004l-55.9004 111.5\n+s-10.3994 18.0996 10.4004 18.0996h32.7998c10.4004 0 13.2002 -8.7002 18.7998 -18.0996l36.7002 -74.5s5.2002 -13.1006 21.1006 -13.1006c15.8994 0 21.0996 13.1006 21.0996 13.1006l36.7998 74.5c5.60059 9.5 8.40039 18.0996 18.7998 18.0996h32.9004\n+c20.7998 0 10.4004 -18.0996 10.4004 -18.0996l-55.9004 -111.5s-12.2002 -30.4004 -46.4004 -30.4004h-35.1992zM337.6 256c34.1006 0 46.4004 -30.4004 46.4004 -30.4004l55.9004 -111.5s10.3994 -18.0996 -10.4004 -18.0996h-32.7998\n+c-10.4004 0 -13.2002 8.7002 -18.7998 18.0996l-36.7002 74.5s-5.2002 13.1006 -21.1006 13.1006c-15.8994 0 -21.0996 -13.1006 -21.0996 -13.1006l-36.7002 -74.5c-5.59961 -9.39941 -8.39941 -18.0996 -18.7998 -18.0996h-32.9004\n+c-20.7998 0 -10.3994 18.0996 -10.3994 18.0996l55.8994 111.5s12.2002 30.4004 46.4004 30.4004h35.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"whatsapp-square\" unicode=\"&#xf40c;\" \n+d=\"M224 325.2c35.2002 0 68.2002 -13.7002 93.2002 -38.7002c24.8994 -24.9004 40.0996 -58 40.0996 -93.2002c0 -72.7002 -60.7002 -131.8 -133.3 -131.8h-0.0996094c-23.7002 0 -46.9004 6.40039 -67.1006 18.4004l-4.7998 2.89941l-49.9004 -13.0996l13.3008 48.5996\n+l-3.10059 5c-13.2002 20.9004 -20.2002 45.2002 -20.2002 70.1006c0.100586 72.6992 59.2002 131.8 131.9 131.8zM301.5 136.8c3.2998 9.2002 3.2998 17.2002 2.40039 19.1006c-1 1.59961 -3.60059 2.59961 -7.60059 4.59961s-23.5 11.5996 -27.0996 12.9004\n+c-3.60059 1.2998 -6.2998 2 -8.90039 -2c-2.59961 -3.90039 -10.2002 -12.9004 -12.5 -15.5c-2.2998 -2.7002 -4.59961 -3 -8.59961 -1c-23.2998 11.6992 -38.6006 20.7998 -53.9004 47.0996c-4.09961 7 4 6.40039 11.6006 21.5996\n+c1.39941 2.60059 0.699219 4.90039 -0.300781 6.90039s-8.89941 21.5 -12.1992 29.4004c-3.2002 7.69922 -6.5 6.69922 -8.90039 6.7998c-2.2998 0.0996094 -5 0.0996094 -7.59961 0.0996094c-2.7002 0 -7 -1 -10.6006 -5c-3.7002 -4 -13.8994 -13.5996 -13.8994 -33.0996\n+s14.1992 -38.4004 16.1992 -41c2 -2.60059 28 -42.6006 67.7002 -59.7998c25.1006 -10.8008 34.9004 -11.8008 47.5 -9.90039c7.60059 1.09961 23.4004 9.5 26.7002 18.7998zM400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48\n+v352c0 26.5 21.5 48 48 48h352zM223.9 34.7998c87.3994 0 160.1 71.1006 160.1 158.5c0 42.4004 -18 82.2002 -47.9004 112.2c-30 30 -69.7998 46.5 -112.199 46.5c-87.4004 0 -158.5 -71.0996 -158.601 -158.5c0 -28 7.2998 -55.2998 21.2002 -79.2998l-22.5 -82.2002\n+l84.0996 22.0996c23.1006 -12.5996 49.2002 -19.2998 75.8008 -19.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"whmcs\" unicode=\"&#xf40d;\" \n+d=\"M448 287l-29.0996 -7l-2.2002 -12.0996l20.8994 -18.8008l-10.2998 -20.0996l-28.7998 8.7998l-7.7998 -8.09961l8.7998 -28l-20.4004 -12.1006l-20.6992 21.6006l-11.6006 -3.5l-6.7002 -28.7998l-22.5996 0.299805l-6.7002 28.5l-11.5996 2.89941l-19.4004 -20.3994\n+l-19.8994 11.5996l8.09961 26.9004l-7.2002 8.59961l-29.5996 -7.5l-10.4004 18.5l20.1006 19.9004l-2.40039 12.0996l-28.7998 7.5l0.299805 21.7002l28.5 7.7998l2.90039 10.4004l-20.7002 21l11 19.0996l28.5 -7.5l8.09961 8.40039l-8.09961 27.7002l19.3994 11\n+l19.7002 -21l12.1006 3.19922l6.19922 26.4004h22.6006l7 -26.4004l10.7002 -3.19922l21.2998 21l19.0996 -11.6006l-7.5 -28.2002l7.2002 -7.5l29 7.5l10.4004 -19.3994l-20.1006 -20.7002l2.2002 -10.4004l28.5 -8.7998v-21.2998zM328.8 241.8\n+c31.4004 0 56.7998 25.2998 56.7998 56.7998c0 31.4004 -25.3994 56.8008 -56.7998 56.8008c-31.3994 0 -56.7998 -25.4004 -56.7998 -56.8008c0 -31.3994 25.5 -56.7998 56.7998 -56.7998zM401.1 225.4l46.9004 -14.5v-39.9004l-55.0996 -13.4004l-4.10059 -22.6992\n+l38.9004 -35.3008l-19.2002 -37.8994l-54 16.7002l-14.5996 -15.2002l16.6992 -52.5l-38.2998 -22.7002l-38.8994 40.5l-21.7002 -6.59961l-12.6006 -54l-42.3994 0.5l-12.6006 53.5996l-21.6992 5.59961l-36.4004 -38.3994l-37.4004 21.7002l15.2002 50.5l-13.7002 16.0996\n+l-55.5 -14.0996l-19.6992 34.7998l37.8994 37.3994l-4.7998 22.8008l-54 14.0996l0.5 40.9004l53.5 14.6992l5.7002 19.7002l-38.9004 39.4004l20.7002 35.7998l53.5996 -14.0996l15.2002 15.6992l-15.2002 52l36.4004 20.7002l36.7998 -39.3994l22.7002 6.09961l11.5996 52\n+h42.4004l11.5996 -45.9004l-22.5996 5.90039l-6.2998 1.7002l-3.2998 -5.7002l-11 -19.0996l-3.30078 -5.60059l4.60059 -4.59961l17.2002 -17.4004l-0.300781 -1l-23.7998 -6.5l-6.2002 -1.7002l-0.0996094 -6.39941l-0.200195 -12.9004\n+c-47.5 -10.3994 -83.2998 -52.7998 -83.2998 -103.5c0 -58.2998 47.2998 -105.7 105.7 -105.7c50.5 0 92.7002 35.4004 103.2 82.8008l13.1992 -0.200195l6.90039 -0.100586l1.59961 6.7002l5.60059 24l1.89941 0.600586l17.1006 -17.8008l4.7002 -4.89941l5.7998 3.39941\n+l20.3994 12.1006l5.80078 3.5l-2 6.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"wordpress-simple\" unicode=\"&#xf411;\" horiz-adv-x=\"512\" \n+d=\"M256 440c136.7 0 248 -111.2 248 -248c0 -136.7 -111.3 -248 -248 -248s-248 111.3 -248 248c0 136.8 111.3 248 248 248zM33 192c0 -88.2002 51.2998 -164.5 125.7 -200.7l-106.4 291.4c-12.3994 -27.7002 -19.2998 -58.4004 -19.2998 -90.7002zM256 -31\n+c26 0 50.9004 4.5 74 12.5996c-0.599609 1 -1.09961 2 -1.59961 3.10059l-68.5 187.8l-66.9004 -194.4c20 -5.89941 41.0996 -9.09961 63 -9.09961zM286.7 296.5l80.7002 -239.6l22.1992 74.2998c9.7002 30.8994 17 53 17 72.0996c0 27.6006 -9.89941 46.7002 -18.3994 61.5\n+c-11.2998 18.4004 -21.9004 33.9004 -21.9004 52.2998c0 20.5 15.5 39.6006 37.4004 39.6006c1 0 1.89941 -0.100586 2.89941 -0.200195c-39.6992 36.2998 -92.5996 58.5 -150.6 58.5c-77.9004 0 -146.4 -40 -186.3 -100.5\n+c5.2998 -0.200195 10.2002 -0.299805 14.3994 -0.299805c23.3008 0 59.4004 2.7998 59.4004 2.7998c12 0.700195 13.4004 -17 1.40039 -18.4004c0 0 -12.1006 -1.39941 -25.5 -2.09961l81.1992 -241.5l48.8008 146.3l-34.7002 95.2002\n+c-12 0.700195 -23.4004 2.09961 -23.4004 2.09961c-12 0.700195 -10.5996 19.1006 1.40039 18.4004c0 0 36.7998 -2.7998 58.7002 -2.7998c23.2998 0 59.3994 2.7998 59.3994 2.7998c12 0.700195 13.4004 -17 1.40039 -18.4004c0 0 -12.1006 -1.39941 -25.5 -2.09961z\n+M368.1 -0.700195c66.3008 38.6006 110.9 110.4 110.9 192.7c0 38.7998 -9.90039 75.2002 -27.2998 107c1 -7.09961 1.5 -14.7002 1.5 -22.9004c0 -22.6992 -4.2998 -48.0996 -17 -79.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"xbox\" unicode=\"&#xf412;\" horiz-adv-x=\"512\" \n+d=\"M369.9 129.8c44.2998 -54.2998 64.6992 -98.7998 54.3994 -118.7c-7.89941 -15.0996 -56.7002 -44.5996 -92.5996 -55.8994c-29.6006 -9.2998 -68.4004 -13.2998 -100.4 -10.2002c-38.2002 3.7002 -76.8994 17.4004 -110.1 39\n+c-27.9004 18.2002 -34.2002 25.7002 -34.2002 40.5996c0 29.9004 32.9004 82.3008 89.2002 142.101c32 33.8994 76.5 73.7002 81.3994 72.5996c9.40039 -2.09961 84.3008 -75.0996 112.301 -109.5zM188.6 304.2c-66.3994 -81.5 -106 -155.4 -120.3 -194.4\n+c-9.7998 -26.5 -13.7002 -53 -9.5 -64c2.7998 -7.39941 0.200195 -4.7002 -9.2998 9.90039c-23.2002 35.5 -34.9004 70.3994 -40.5 120.899c-1.90039 16.7002 -1.2002 26.3008 4.2002 60.5c6.7998 42.7002 31.0996 92 60.2998 122.4\n+c12.4004 12.9004 13.5 13.2002 28.7002 8.09961c28.2998 -9.5 56.7002 -36.5 86.3994 -63.3994zM500.2 240.7c4.7002 -22.6006 5.09961 -70.9004 0.799805 -93.4004c-3.59961 -18.5 -11.2002 -42.5 -18.5996 -58.7002c-5.5 -12.1992 -19.3008 -35.7998 -25.4004 -43.5\n+c-3.09961 -3.89941 -3.09961 -3.89941 -1.40039 4.60059c2.30078 11.2002 -0.599609 31.5996 -7.39941 52.2998c-20.7002 62.9004 -80.5 149 -122.9 202.3c23.2998 21.4004 41 38.2998 64.2998 52.7998c11.8008 7.40039 28.7002 13.9004 36 13.9004\n+c7.10059 0 57.7002 -50.2998 74.6006 -130.3zM141.3 405c-14.5996 -0.700195 -14 0.0996094 9.40039 11.2002c81.2002 38.2998 170 27.5996 233.899 -11.7002c-13.3994 0.599609 -43.5 5.90039 -107.399 -25.2002c-11.2002 -5.5 -20.9004 -9.7998 -21.6006 -9.7002\n+c-4.59961 0.900391 -66.5996 37.9004 -114.3 35.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"yandex\" unicode=\"&#xf413;\" horiz-adv-x=\"256\" \n+d=\"M153.1 132.2l-87.3994 -196.2h-63.7002l96 209.8c-45.0996 22.9004 -75.2002 64.4004 -75.2002 141.101c-0.0996094 107.399 68 161.1 148.9 161.1h82.2998v-512h-55.0996v196.2h-45.8008zM198.9 401.5h-29.4004c-44.4004 0 -87.4004 -29.4004 -87.4004 -114.6\n+c0 -82.3008 39.4004 -108.801 87.4004 -108.801h29.4004v223.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"yandex-international\" unicode=\"&#xf414;\" horiz-adv-x=\"320\" \n+d=\"M129.5 -64v166.1l-111 297.9h55.7998l81.7998 -229.7l94.1006 277.7h51.2998l-120.7 -347.8v-164.2h-51.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"apple-pay\" unicode=\"&#xf415;\" horiz-adv-x=\"640\" \n+d=\"M116.9 289.5c-7.5 -8.90039 -19.5 -15.9004 -31.5 -14.9004c-1.5 12 4.39941 24.8008 11.2998 32.6006c7.5 9.09961 20.5996 15.5996 31.2998 16.0996c1.2002 -12.3994 -3.7002 -24.7002 -11.0996 -33.7998zM127.8 272.3c6.7998 -0.5 26.2998 -2.5 38.7998 -21.0996\n+c-1 -0.799805 -23.1992 -13.5 -22.8994 -40.2998c0.299805 -32 28 -42.6006 28.2998 -42.9004c-0.200195 -0.799805 -4.40039 -15.0996 -14.5 -29.9004c-8.90039 -13 -18 -25.6992 -32.5 -26c-14 -0.199219 -18.7002 8.40039 -34.7998 8.40039\n+c-16 0 -21.2002 -8.09961 -34.5 -8.59961c-14 -0.5 -24.6006 13.7998 -33.5 26.7998c-18.2002 26.2998 -32.1006 74 -13.2998 106.3c9.09961 16.0996 25.6992 26.2002 43.5996 26.5c13.7998 0.299805 26.4004 -9.09961 34.7998 -9.09961\n+c8.2002 0 23.1006 10.8994 40.5 9.89941zM228.2 308.5h73.2002c37.6992 0 64.0996 -26 64.0996 -64s-26.7998 -64.2998 -65.0996 -64.2998h-41.9004v-66.6006h-30.2998v194.9zM258.5 283v-77.4004h34.7998c26.4004 0 41.4004 14.2002 41.4004 38.8008\n+c0 24.5996 -15 38.5996 -41.2998 38.5996h-34.9004zM420.7 112.1c-28.1006 0 -47.7002 16.8008 -47.7998 42c0 25 19 39.4004 54.0996 41.5l37.7998 2.30078v10.7998c0 15.8994 -10.3994 24.5 -28.8994 24.5c-15.2002 0 -26.3008 -7.90039 -28.6006 -19.9004h-27.2998\n+c0.900391 25.2002 24.7002 43.6006 56.7998 43.6006c34.6006 0 57.1006 -18.2002 57.1006 -46.3008v-97h-28v23.4004h-0.600586c-8 -15.2998 -25.5996 -24.9004 -44.5996 -24.9004zM428.9 135.2c20.5 0 36 13 36 31.2002v11l-33.6006 -2.10059\n+c-18.8994 -1.09961 -28.7998 -8.2002 -28.7998 -20.5c0 -11.7998 10.2998 -19.5996 26.4004 -19.5996zM531.4 60.5996c-2.30078 0 -9.80078 0.300781 -11.6006 0.700195v23.4004c1.90039 -0.200195 6.5 -0.5 8.90039 -0.5c13.3994 0 20.8994 5.7002 25.5 20.2998\n+l2.7998 8.59961l-51.2002 141.9h31.6006l35.5996 -115.1h0.599609l35.6006 115.1h30.7998l-53.0996 -149c-12.1006 -34.0996 -26 -45.4004 -55.5 -45.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-apple-pay\" unicode=\"&#xf416;\" horiz-adv-x=\"576\" \n+d=\"M302.2 229.6c0 -17.1992 -10.5 -27.0996 -29 -27.0996h-24.2998v54.2002h24.3994c18.4004 0 28.9004 -9.7998 28.9004 -27.1006zM349.7 167c0 8.59961 6.89941 13.5 20.2002 14.4004l23.5 1.5v-7.7002c0 -12.7998 -10.8008 -21.9004 -25.2002 -21.9004\n+c-11.2998 0 -18.5 5.40039 -18.5 13.7002zM576 369v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM127.8 250.8c8.40039 -0.700195 16.7998 4.2002 22.1006 10.4004\n+c5.19922 6.39941 8.59961 15 7.69922 23.7002c-7.39941 -0.300781 -16.5996 -4.90039 -21.8994 -11.3008c-4.7998 -5.5 -8.90039 -14.3994 -7.90039 -22.7998zM188.4 176.3c-0.200195 0.200195 -19.6006 7.60059 -19.8008 30c-0.199219 18.7002 15.3008 27.7002 16 28.2002\n+c-8.7998 13 -22.3994 14.4004 -27.0996 14.7002c-12.2002 0.700195 -22.5996 -6.90039 -28.4004 -6.90039c-5.89941 0 -14.6992 6.60059 -24.2998 6.40039c-12.5 -0.200195 -24.2002 -7.2998 -30.5 -18.6006c-13.0996 -22.5996 -3.39941 -56 9.2998 -74.3994\n+c6.2002 -9.10059 13.7002 -19.1006 23.5 -18.7002c9.30078 0.400391 13 6 24.2002 6c11.2998 0 14.5 -6 24.2998 -5.90039c10.2002 0.200195 16.5 9.10059 22.8008 18.2002c6.89941 10.4004 9.7998 20.4004 10 21zM323.8 229.7c0 26.5996 -18.5 44.7998 -44.8994 44.7998\n+h-51.2002v-136.4h21.2002v46.6006h29.2998c26.7998 0 45.5996 18.3994 45.5996 45zM413.8 206c0 19.7002 -15.7998 32.4004 -40 32.4004c-22.5 0 -39.0996 -12.9004 -39.7002 -30.5h19.1006c1.59961 8.39941 9.39941 13.8994 20 13.8994c13 0 20.2002 -6 20.2002 -17.2002\n+v-7.5l-26.4004 -1.59961c-24.5996 -1.5 -37.9004 -11.5996 -37.9004 -29.0996c0 -17.7002 13.7002 -29.4004 33.4004 -29.4004c13.2998 0 25.5996 6.7002 31.2002 17.4004h0.399414v-16.4004h19.6006v68h0.0996094zM516 237.1h-21.5l-24.9004 -80.5996h-0.399414\n+l-24.9004 80.5996h-22.2998l35.9004 -99.2998l-1.90039 -6c-3.2002 -10.2002 -8.5 -14.2002 -17.9004 -14.2002c-1.69922 0 -4.89941 0.200195 -6.19922 0.300781v-16.4004c1.19922 -0.400391 6.5 -0.5 8.09961 -0.5c20.7002 0 30.4004 7.90039 38.9004 31.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"fly\" unicode=\"&#xf417;\" horiz-adv-x=\"384\" \n+d=\"M197.8 20.2002c12.9004 -11.7002 33.7002 -33.2998 33.2002 -50.7002c0 -0.799805 -0.0996094 -1.59961 -0.0996094 -2.5c-1.80078 -19.7998 -18.8008 -31.0996 -39.1006 -31c-25 0.0996094 -39.8994 16.7998 -38.7002 35.7998c1 16.2002 20.5 36.7002 32.4004 47.6006\n+c2.2998 2.09961 2.7002 2.69922 5.59961 3.59961c3.40039 0 3.90039 -0.299805 6.7002 -2.7998zM331.9 380.7c23.8994 -40 27.7998 -73.2998 20.7998 -112.5c-15.2002 -69.9004 -103.601 -166.5 -155.9 -215.7c-1.7002 -1.59961 -1.39941 -1.40039 -3.5 -2.09961\n+l-3.2998 0.0996094c-1.7002 0.599609 -4.5 3.5 -6.2002 5.09961c-58.7998 57.8008 -148.7 151.601 -155.8 233.801c-1.5 71.3994 29.2998 113.399 82.9004 141.3c9.89941 4.09961 37 17.2998 81.0996 17.2998c22 0.200195 51.0996 -4.5 76.5996 -15.2002\n+c24.7002 -11.5 47 -26.3994 63.3008 -52.0996zM186.8 96.0996v325.7c-57.8994 -5.5 -72.7002 -89.2002 -69.2998 -136.7c4.09961 -58.2998 41.2998 -137.899 69.2998 -189zM328.7 268c15.7998 54.9004 -10.9004 134.7 -99.7002 153\n+c38.2002 -25.5996 49.5996 -85.5 48 -131.4c-2 -58.5996 -39.4004 -140 -67.2002 -191.899c41.6006 42.2998 102.5 113.5 118.9 170.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"node\" unicode=\"&#xf419;\" horiz-adv-x=\"640\" \n+d=\"M316.3 -4c-2.09961 0 -4.2002 0.599609 -6.09961 1.59961l-19.2002 11.4004c-2.90039 1.59961 -1.5 2.2002 -0.5 2.5c3.7998 1.2998 4.59961 1.59961 8.7002 4c0.399414 0.200195 1 0.0996094 1.39941 -0.0996094l14.8008 -8.80078\n+c0.5 -0.299805 1.2998 -0.299805 1.7998 0l57.7998 33.4004c0.5 0.299805 0.900391 0.900391 0.900391 1.59961v66.7002c0 0.700195 -0.300781 1.2998 -0.900391 1.60059l-57.7998 33.2998c-0.5 0.299805 -1.2002 0.299805 -1.7998 0l-57.8008 -33.2998\n+c-0.599609 -0.300781 -0.899414 -1 -0.899414 -1.60059v-66.7002c0 -0.599609 0.399414 -1.19922 0.899414 -1.5l15.8008 -9.09961c8.59961 -4.2998 13.8994 0.799805 13.8994 5.7998v65.9004c0 0.899414 0.700195 1.7002 1.7002 1.7002h7.2998\n+c0.900391 0 1.7002 -0.700195 1.7002 -1.7002v-65.9004c0 -11.5 -6.2002 -18 -17.0996 -18c-3.30078 0 -6 0 -13.3008 3.60059l-15.1992 8.69922c-3.7002 2.2002 -6.10059 6.2002 -6.10059 10.5v66.7002c0 4.2998 2.2998 8.40039 6.10059 10.5l57.7998 33.4004\n+c3.7002 2.09961 8.5 2.09961 12.0996 0l57.7998 -33.4004c3.7002 -2.2002 6.10059 -6.2002 6.10059 -10.5v-66.7002c0 -4.2998 -2.2998 -8.39941 -6.10059 -10.5l-57.7998 -33.3994c-1.7002 -1.10059 -3.7998 -1.7002 -6 -1.7002zM363 61.7998\n+c0 -12.5996 -10.5 -19.7998 -29 -19.7998c-25.2998 0 -30.5996 11.5996 -30.5996 21.2998c0 1 0.799805 1.7002 1.69922 1.7002h7.5c0.900391 0 1.60059 -0.599609 1.7002 -1.40039c1.10059 -7.59961 4.5 -11.3994 19.7998 -11.3994\n+c12.2002 0 17.4004 2.7002 17.4004 9.2002c0 3.69922 -1.5 6.39941 -20.4004 8.2998c-15.7998 1.59961 -25.5996 5 -25.5996 17.7002c0 11.5996 9.7998 18.5996 26.2998 18.5996c18.5 0 27.6006 -6.40039 28.7998 -20.2002\n+c0.100586 -0.5 -0.0996094 -0.899414 -0.399414 -1.2998c-0.299805 -0.299805 -0.700195 -0.5 -1.2002 -0.5h-7.5c-0.799805 0 -1.40039 0.5 -1.59961 1.2998c-1.80078 8 -6.2002 10.6006 -18.1006 10.6006c-13.2998 0 -14.7998 -4.60059 -14.7998 -8.10059\n+c0 -4.2002 1.7998 -5.39941 19.7998 -7.7998c17.7998 -2.40039 26.2002 -5.7002 26.2002 -18.2002zM417.5 111.9c0 -6.10059 -5 -11.1006 -11.0996 -11.1006c-6.10059 0 -11.1006 5 -11.1006 11.1006c0 6.2998 5.2002 11.0996 11.1006 11.0996\n+c6 0.0996094 11.0996 -4.7998 11.0996 -11.0996zM415.7 111.9c0 5.19922 -4.2002 9.2998 -9.40039 9.2998c-5.09961 0 -9.2998 -4.10059 -9.2998 -9.2998c0 -5.2002 4.2002 -9.40039 9.2998 -9.40039c5.2002 0.0996094 9.40039 4.2998 9.40039 9.40039zM411.2 105.7\n+h-2.60059c-0.0996094 0.599609 -0.5 3.7998 -0.5 3.89941c-0.199219 0.700195 -0.399414 1.10059 -1.2998 1.10059h-2.2002v-5h-2.39941v12.5h4.2998c1.5 0 4.40039 0 4.40039 -3.2998c0 -2.30078 -1.5 -2.80078 -2.40039 -3.10059\n+c1.7002 -0.0996094 1.7998 -1.2002 2.09961 -2.7998c0.100586 -1 0.300781 -2.7002 0.600586 -3.2998zM408.4 114.5c0 1.7002 -1.2002 1.7002 -1.80078 1.7002h-2v-3.5h1.90039c1.59961 0 1.90039 1.09961 1.90039 1.7998zM137.3 257l-0.200195 -95\n+c0 -1.2998 -0.699219 -2.59961 -1.7998 -3.2002c-1.09961 -0.700195 -2.59961 -0.700195 -3.7002 0l-36.3994 20.9004c-2.2998 1.2998 -3.7002 3.7998 -3.7002 6.39941v44.4004c0 2.59961 -1.40039 5.09961 -3.7002 6.40039l-15.5 8.89941\n+c-1.09961 0.700195 -2.39941 1 -3.7002 1c-1.2998 0 -2.5 -0.299805 -3.69922 -1l-15.5 -8.89941c-2.30078 -1.30078 -3.7002 -3.80078 -3.7002 -6.40039v-44.4004c0 -2.59961 -1.40039 -5 -3.7002 -6.39941l-36.4004 -20.9004\n+c-1.19922 -0.700195 -2.59961 -0.700195 -3.69922 0c-1.10059 0.700195 -1.80078 1.90039 -1.80078 3.2002l-0.0996094 95c0 2.59961 1.40039 5.09961 3.7002 6.40039l61.2002 35.2998c1.09961 0.599609 2.19922 1 3.39941 1h0.600586\n+c1.19922 -0.100586 2.39941 -0.400391 3.39941 -1l61.2998 -35.2998c2.30078 -1.30078 3.7002 -3.7002 3.7002 -6.40039zM472.5 360.7v-176.4c0 -2.59961 -1.40039 -5.09961 -3.7002 -6.39941l-61.2998 -35.4004c-2.2998 -1.2998 -5.09961 -1.2998 -7.40039 0\n+l-61.2998 35.4004c-2.2998 1.2998 -3.7002 3.7998 -3.7002 6.39941v70.7998c0 2.60059 1.40039 5.10059 3.7002 6.40039l61.2998 35.4004c2.30078 1.2998 5.10059 1.2998 7.40039 0l15.2998 -8.80078c1.7002 -1 3.90039 0.300781 3.90039 2.2002v94\n+c0 2.7998 3 4.60059 5.5 3.2002l36.5 -20.4004c2.2998 -1.19922 3.7998 -3.69922 3.7998 -6.39941zM426.5 231.8c0 0.700195 -0.400391 1.2998 -0.900391 1.60059l-21 12.1992c-0.599609 0.300781 -1.2998 0.300781 -1.89941 0l-21 -12.1992\n+c-0.600586 -0.300781 -0.900391 -0.900391 -0.900391 -1.60059v-24.2998c0 -0.700195 0.400391 -1.2998 0.900391 -1.59961l21 -12.1006c0.599609 -0.299805 1.2998 -0.299805 1.7998 0l21 12.1006c0.599609 0.299805 0.900391 0.899414 0.900391 1.59961v24.2998h0.0996094\n+zM636.3 232.5l-36.7002 -21.2998c-2.5 -1.40039 -5.59961 0.399414 -5.59961 3.2002v17.3994c0 1.2998 -0.799805 2.5 -1.90039 3.2002l-19.1992 11.0996c-1.10059 0.700195 -2.60059 0.700195 -3.7002 0l-19.2002 -11.0996\n+c-1.2002 -0.700195 -1.90039 -1.90039 -1.90039 -3.2002v-22.2002c0 -1.2998 0.700195 -2.5 1.90039 -3.19922l61.7002 -35.4004c2.5 -1.40039 2.5 -5 0 -6.40039l-36.7998 -20.5c-2.30078 -1.2998 -5.10059 -1.2998 -7.30078 0l-60.8994 34.7002\n+c-2.2998 1.2998 -3.7002 3.7002 -3.7002 6.40039v70.7998c0 2.59961 1.40039 5.09961 3.7002 6.40039l61.2998 35.3994c2.2998 1.2998 5.09961 1.2998 7.40039 0l60.8994 -35.3994c2.2998 -1.30078 3.7002 -3.80078 3.7002 -6.40039v-17.0996\n+c0 -2.60059 -1.40039 -5.10059 -3.7002 -6.40039zM559 229l11.7998 6.7998c0.400391 0.299805 1 0.299805 1.40039 0l11.7998 -6.7998c0.400391 -0.200195 0.700195 -0.700195 0.700195 -1.2002v-13.5996c0 -0.5 -0.299805 -0.900391 -0.700195 -1.2002l-11.7998 -6.7998\n+c-0.400391 -0.299805 -1 -0.299805 -1.40039 0l-11.7998 6.7998c-0.400391 0.200195 -0.700195 0.700195 -0.700195 1.2002v13.5996c0 0.5 0.299805 0.900391 0.700195 1.2002zM304.8 185.5c0 -0.599609 -0.0996094 -1.2002 -0.200195 -1.7002\n+c-0.5 -2 -1.7998 -3.7002 -3.59961 -4.7002l-61 -35.1992c-2.2002 -1.30078 -5 -1.40039 -7.40039 0l-61.1992 35.1992c-2.10059 1.2002 -4 3.60059 -4 6.40039v70.4004c0 2.69922 1.59961 5.09961 3.89941 6.39941l61.1006 35.2002\n+c2.39941 1.40039 5.2998 1.2002 7.39941 0l61.1006 -35.2002c2.2998 -1.2998 3.89941 -3.7998 3.89941 -6.39941v-70.4004zM230.5 310.4l-0.799805 -0.5h1.09961zM306.7 180.2l-0.400391 0.700195v-0.900391z\" \u002F>\n+    \u003Cglyph glyph-name=\"osi\" unicode=\"&#xf41a;\" horiz-adv-x=\"512\" \n+d=\"M8 181.56c2.2998 135.801 97.3994 232.441 213.799 248.102c138.8 18.5996 255.601 -75.7998 278 -201.101c21.2998 -118.8 -44 -230 -151.6 -274c-9.2998 -3.7998 -14.4004 -1.69922 -18 7.7002c-17.7998 46.2998 -35.5996 92.6328 -53.3994 138.999\n+c-3.09961 8.10059 -1 13.2002 7 16.7998c24.2002 11 39.2998 29.4004 43.2998 55.8008c0.469727 3.01562 0.850586 7.94043 0.850586 10.9922c0 36.2061 -29.2764 68.1074 -65.3506 71.207c-39 3.40039 -71.7998 -23.6992 -77.5 -59.6992\n+c-5.19922 -33 11.1006 -63.7002 41.9004 -77.7002c9.59961 -4.40039 11.5 -8.60059 7.7998 -18.4004c-17.8994 -46.5996 -35.7998 -93.2324 -53.7002 -139.899c-2.59961 -6.90039 -8.2998 -9.30078 -15.5 -6.5c-52.5996 20.2998 -101.399 61 -130.8 119\n+c-24.8994 49.1992 -25.2002 87.6992 -26.7998 108.699zM28.8994 183.461c0.399414 -6.59961 0.599609 -14.3008 1.2998 -22.1006c6.2998 -71.9004 49.5996 -143.5 131 -183.101c3.2002 -1.5 4.39941 -0.799805 5.59961 2.2998c14.9004 39.1006 29.9004 78.2012 45 117.302\n+c1.2998 3.2998 0.600586 4.7998 -2.39941 6.69922c-31.6006 19.9004 -47.3008 48.5 -45.6006 86c1 21.6006 9.2998 40.5 23.7998 56.3008c30 32.6992 77 39.7998 115.5 17.5996c25.3174 -14.5977 45.8643 -50.1641 45.8643 -79.3877\n+c0 -3.05078 -0.296875 -7.98438 -0.664062 -11.0127c-3.59961 -30.5996 -19.2998 -53.8994 -45.7002 -69.7998c-2.69922 -1.59961 -3.5 -2.89941 -2.2998 -6c15.2002 -39.2002 30.2666 -78.4336 45.2002 -117.7c1.2002 -3.09961 2.40039 -3.7998 5.59961 -2.2998\n+c35.5 16.6006 65.2002 40.2998 88.1006 72c34.7998 48.2002 49.0996 101.9 42.2998 161c-13.7002 117.5 -119.4 214.8 -255.5 198c-106.1 -13 -195.3 -102.5 -197.1 -225.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"react\" unicode=\"&#xf41b;\" horiz-adv-x=\"512\" \n+d=\"M418.2 270.8c54.3994 -18.7002 93.7998 -48.0996 93.7998 -78.3994c0 -31.7002 -41.7998 -62.6006 -99.5 -81.7002c-3.09961 -1 -6.2002 -2 -9.40039 -2.90039c1.10059 -4.59961 2.10059 -9.09961 3 -13.5c11.4004 -57.5996 2.60059 -104.899 -24.3994 -120.5\n+c-26.1006 -15.0996 -68.4004 -0.200195 -111.2 36.6006c-4.59961 4 -9.2002 8.09961 -13.5996 12.3994c-3.5 -3.39941 -7 -6.59961 -10.5 -9.7002c-44.2002 -38.6992 -89.6006 -54.6992 -116.601 -39.0996c-26.2002 15.0996 -34.3994 59.0996 -23.8994 114.6\n+c1.19922 6.10059 2.5 12 4 18c-4.60059 1.30078 -9.10059 2.80078 -13.6006 4.30078c-55.5 19 -96.2998 50.2998 -96.2998 81.5c0 30.1992 38.2998 59.3994 91.7002 77.8994c5.89941 2.10059 12.2002 4.10059 18.5996 5.90039\n+c-1.39941 5.59961 -2.59961 11.0996 -3.7002 16.7002c-11 56.3994 -3.19922 101.5 23 116.699c27.3008 15.9004 72.9004 -1.09961 118.4 -41.5c2.7998 -2.5 5.59961 -5.09961 8.2998 -7.69922c4 3.89941 8.2002 7.7998 12.5 11.5\n+c43.4004 37.7998 86.2998 53.5 112.601 38.3994c27.2998 -15.7998 35.3994 -63.7002 23.0996 -123.3c-0.799805 -3.7002 -1.59961 -7.40039 -2.5 -11.0996c5.40039 -1.60059 10.7998 -3.30078 16.2002 -5.10059zM282.9 355.7c-4 -3.5 -7.80078 -7 -11.7002 -10.7002\n+c15.3994 -16.7002 29.5996 -34.5 42.5996 -53.0996c22.6006 -2 45.1006 -5.60059 67.2998 -10.6006c0.900391 3.2998 1.60059 6.60059 2.30078 10c10.5996 51.5 4.09961 90.7002 -12.8008 100.4c-15.7998 9.09961 -50.5 -3.60059 -87.6992 -36zM167.2 140.5\n+c-5 8.59961 -9.7002 17.2998 -14.2998 26.0996c-6.40039 -15.1992 -11.9004 -30.0996 -16.3008 -44.5c15.3008 -3.2998 30.8008 -5.7998 46.4004 -7.5c-5.5 8.5 -10.7002 17.2002 -15.7998 25.9004zM136.9 260.8c4.39941 -14.0996 9.69922 -28.7002 16 -43.5996\n+c4.5 8.7998 9.2998 17.5 14.1992 26c4.90039 8.59961 10.1006 17.0996 15.4004 25.3994c-15.9004 -2 -31.2002 -4.59961 -45.5996 -7.7998zM164.3 191.9c6.7002 -13.8008 13.7998 -27.3008 21.5 -40.6006s15.9004 -26.2998 24.6006 -39\n+c14.6992 -0.899414 29.8994 -1.39941 45.5996 -1.39941s31.2002 0.5 46.0996 1.59961c8.5 12.7998 16.6006 25.7002 24.2002 39c7.7002 13.4004 14.9004 27 21.6006 40.7998c-6.80078 13.7002 -14 27.2002 -21.7002 40.4004s-15.7998 26.0996 -24.2998 38.7002\n+c-14.9004 1.09961 -30.3008 1.69922 -45.9004 1.69922s-30.9004 -0.599609 -45.9004 -1.69922c-8.59961 -12.7002 -16.7998 -25.6006 -24.3994 -38.9004c-7.60059 -13.2998 -14.7998 -26.7998 -21.4004 -40.5996zM344.9 140.7c-5 -8.60059 -10.1006 -17.2002 -15.5 -25.6006\n+c15.7998 1.80078 31.5 4.5 47 8c-4.90039 15.1006 -10.5 29.8008 -16.9004 44.3008c-4.7002 -9 -9.5 -17.9004 -14.5996 -26.7002zM359.3 217.2c6.10059 14.2002 11.5 28.5996 16.1006 43.3994c-14.4004 3.30078 -29.8008 6 -45.9004 8\n+c5.2998 -8.2998 10.4004 -16.6992 15.2998 -25.1992c5 -8.60059 9.7998 -17.4004 14.5 -26.2002zM256.2 329.7c-10 -10.9004 -20.1006 -22.9004 -29.9004 -35.7998c19.7998 0.899414 39.7002 0.899414 59.5 0c-9.2002 12.3994 -19.0996 24.3994 -29.5996 35.7998zM140.2 391\n+c-15.7998 -9.09961 -22 -45.5996 -12.6006 -94c1.10059 -5.2002 2.2002 -10.4004 3.5 -15.5c22.2002 4.90039 44.6006 8.40039 67.2002 10.4004c13.1006 18.5996 27.4004 36.3994 42.9004 53.0996c-2.60059 2.40039 -5.10059 4.7998 -7.60059 7\n+c-39.2998 34.7998 -76.5996 48.7998 -93.3994 39zM115.7 127.4c6.89941 22 15.2002 43.5996 24.7998 64.5c-9.5 20.5996 -17.7002 41.8994 -24.5 63.5996c-5.7998 -1.7002 -11.5996 -3.5 -17.2998 -5.5c-45.6006 -15.9004 -77.2002 -39.2998 -77.2002 -57.5996\n+c1.90039 -12.1006 8.7002 -22.9004 18.7998 -29.9004c17.5 -13.9004 41.7002 -24.5 63 -31.2002c4.10059 -1.39941 8.2002 -2.7002 12.4004 -3.89941zM232.3 29.4004c3.2002 2.7998 6.40039 5.7998 9.60059 8.89941c-15.5 16.7998 -30 34.7002 -43.2002 53.4004\n+c-22.9004 1.7002 -45.5 5 -67.9004 9.7998c-1.39941 -5.5 -2.59961 -11.0996 -3.7002 -16.7002c-9 -47.5 -2.39941 -82.7998 13.5 -92c11.4004 -4.5 24.2002 -4 35.3008 1.2998c20.7998 8.2002 39.8994 20.2002 56.3994 35.3008zM256.8 53.7002\n+c10.5 11.5996 20.4004 23.7002 29.6006 36.3994c-10 -0.5 -20.1006 -0.699219 -30.4004 -0.699219c-10 0 -19.9004 0.199219 -29.5 0.599609c9.90039 -13.0996 20.0996 -25.2998 30.2998 -36.2998zM387.5 23.7002c3.2002 22.2002 2.40039 44.7002 -2.5 66.2998\n+c-0.799805 4 -1.7002 8.09961 -2.7002 12.2002c-22.5 -5.10059 -45.2998 -8.60059 -68.2002 -10.5c-12.7998 -18.7998 -26.8994 -36.7002 -42.1992 -53.6006c4.2998 -4 8.5 -7.89941 12.6992 -11.5c36.6006 -31.3994 70.5 -43.3994 86.4004 -34.1992\n+c9.59961 7.69922 15.5996 19.0996 16.5 31.2998zM405.7 131.2c49.8994 16.5 84.7998 41.7998 84.7998 61.3994c0 18.2002 -32.7002 42 -79.2998 58c-4.7998 1.60059 -9.7998 3.2002 -15 4.7002c-6.7998 -21.5 -14.9004 -42.5 -24.5 -62.8994\n+c9.89941 -20.7002 18.5 -42 25.5 -63.8008c2.89941 0.800781 5.7002 1.7002 8.5 2.60059zM256 146.2c-25.2998 0 -45.7998 20.5 -45.7998 45.7998s20.5 45.7998 45.7998 45.7998s45.7998 -20.5 45.7998 -45.7998s-20.5 -45.7998 -45.7998 -45.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"autoprefixer\" unicode=\"&#xf41c;\" horiz-adv-x=\"640\" \n+d=\"M318.4 432l164.1 -480h-77.5l-25.2002 81.4004h-119.5l-25.3994 -81.4004h-77.5zM278.1 90.0996h83.6006l-40.9004 130.4h-1.5zM640 43l-158.5 -9.5l-19.4004 56.5l167.9 -15.5996zM177.9 90l-19.4004 -56.4004l-158.5 9.40039l10 31.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"less\" unicode=\"&#xf41d;\" horiz-adv-x=\"640\" \n+d=\"M612.7 229c0 -11 6.7998 -22.5996 27.2998 -23.2998v-27.2998c-20.5 -1 -27.2998 -12.6006 -27.2998 -23.6006c0 -20.3994 3.2002 -32 3.2002 -54.5996c0 -34.2002 -12.7002 -45.2002 -40.5 -45.2002h-20.5v25.2002h6.2998v0.5c13.5996 0 17.2998 4.7002 17.2998 22.5996\n+c0 17.2998 -1.59961 32.6006 -1.59961 51.5c0 24.2002 7.7998 33.6006 23.5996 37.2998v1.60059c-15.7002 3.7002 -23.5996 13.0996 -23.5996 37.2998c0 18.9004 1.59961 35.2002 1.59961 51.5c0 17.4004 -3.09961 22.0996 -17.2998 22.0996h-6.2998v24.2002h20.5\n+c27.8994 0 40.5 -11 40.5 -45.2002c0 -22 -3.2002 -34.0996 -3.2002 -54.5996zM507.1 197c20.5 -6.7998 43 -18.9004 43 -47.7998c0 -28.9004 -22.5996 -51 -64.5996 -51c-20 0 -44.0996 9 -59.9004 22.0996l21 30.5c14.2002 -11 27.4004 -16.2998 40.5 -16.2998\n+c14.2002 0 20.5 5.2002 20.5 13.0996c0 10.5 -15.7998 15.8008 -32.0996 22.1006c-18.9004 7.2998 -41.5 20.5 -41.5 46.2002c0 28.8994 24.2002 49.3994 59.9004 49.3994c24.1992 0 42.0996 -10.5 55.1992 -20.5l-21 -27.7998c-11.5 8.40039 -22 13.0996 -33.5996 13.0996\n+s-17.9004 -4.69922 -17.9004 -12.5996c0 -10.5 14.7002 -14.2002 30.5 -20.5zM148.2 137.6c1.59961 0 3.09961 0 6.2002 0.800781l5.2998 -34.2002c-5.7002 -2.10059 -13.6006 -3.7002 -23.6006 -3.7002c-32.0996 0 -43.0996 21 -43.0996 53.0996v150.801h-14.0996\n+c-13.6006 0 -17.3008 -4.80078 -17.3008 -22.1006s1.60059 -32.5996 1.60059 -51.5c0 -24.2002 -7.7998 -33.5996 -23.6006 -37.2998v-1.59961c15.7002 -3.7002 23.6006 -13.1006 23.6006 -37.3008c0 -19.3994 -1.60059 -34.1992 -1.60059 -51.5\n+c0 -17.2998 4.2002 -22.5996 17.3008 -22.5996h6.2998v-24.2002h-20.5c-27.9004 0 -40.5 11 -40.5 45.2002c0 22.5996 3.2002 34.2002 3.2002 53.5996c0 11 -6.80078 22.6006 -27.3008 23.1006v27.2998c20.5 1 27.3008 12.5996 27.3008 23.5996\n+c0 19.4004 -3.2002 32 -3.2002 54.6006c0 34.2002 12.5996 45.2002 41 45.2002h74.5996v-178.2c0 -9.90039 4.7002 -13.1006 8.40039 -13.1006zM379.9 197c20.5 -6.7998 43.0996 -18.9004 43 -47.7998c0 -28.9004 -22.6006 -51 -64.6006 -51\n+c-20 0 -44.0996 9 -59.8994 22.0996l20.5 30.5c14.1992 -11 27.3994 -16.2998 40.5 -16.2998c14.1992 0 20.5 5.2002 20.5 13.0996c0 10.5 -15.8008 15.8008 -32.1006 22.1006c-18.8994 7.2998 -41.5 20.5 -41.5 46.2002c0 28.8994 24.2002 49.3994 59.9004 49.3994\n+c24.2002 0 42.0996 -10.5 55.2002 -20.5l-21 -27.7998c-11.5 8.40039 -22 13.0996 -33.6006 13.0996c-11.5996 0 -17.8994 -4.69922 -17.8994 -12.5996c0 -10.5 14.6992 -14.2002 31 -20.5zM224.9 265.8c44.0996 0 67.2998 -33.0996 66.6992 -75.7002\n+c0 -8.39941 -1.09961 -15.6992 -1.59961 -19.3994h-95.2002c4.2002 -24.2002 20.5 -34.2002 41.5 -34.2002c11.6006 0 22.6006 3.2002 34.2002 10l15.7998 -27.7998c-16.2998 -11.1006 -37.2998 -17.9004 -56.2002 -17.9004c-45.0996 0 -79.2998 30.5 -79.2998 82.5\n+c-1 50.4004 35.7002 82.5 74.1006 82.5zM194.9 199.6h56.7998c0 17.9004 -7.40039 31 -26.2998 31c-14.7002 0 -27.3008 -10 -30.5 -31z\" \u002F>\n+    \u003Cglyph glyph-name=\"sass\" unicode=\"&#xf41e;\" horiz-adv-x=\"640\" \n+d=\"M301.84 69.0801c-0.299805 -0.599609 -0.599609 -1.08008 0 0zM550.97 156.08c57.9092 0.300781 90.5703 -37.0801 88.9707 -71.0801c-1.10059 -26.9004 -25.6904 -37.9004 -30.29 -38.7002c-3.30078 -0.599609 -5.10059 -0.700195 -5.60059 1.90039\n+c-0.299805 1.7998 0.900391 2.7002 4.7998 5.09961c3.90039 2.40039 15.6006 10.5 17.7002 25c2.10059 14.5 -8.7998 49.2998 -64.4795 55.7998c-26 3 -46.3906 -0.599609 -62.0898 -7.19922c2.89941 -7.60059 5.09961 -15.5 5.39941 -23.4004\n+c0.799805 -17.5 -11.29 -30.4004 -23.79 -39.5996c-5.48535 -3.98535 -15.1572 -8.95801 -21.5898 -11.1006c-5.2002 -2.2002 -12.2002 -4.5 -17.0996 -3.5c-10.9004 2.2002 -16.7002 11.7998 -9.30078 33.1006c4 11.5 15.5 29 34.0908 44.0996\n+c-4.30078 8.7002 -8.99023 17.5996 -11.3906 25.7002c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998c0 0 -15.2998 -31.7197 -35.0898 -60.6201c-1.09961 -1.7002 -2.2998 -3.39941 -3.39941 -5c3.7998 -9 6.89941 -18.5996 7.2998 -28.2002\n+c0.700195 -17.3994 -6.90039 -30.5996 -19.4004 -39.7998c-5.16211 -3.70605 -14.208 -8.45508 -20.1895 -10.5996c-3.90039 -1.7998 -12 -4.60059 -23.5 -5.40039c-6.29004 -0.5 -12.29 -0.0996094 -15.6904 2.5c-4.59961 3.40039 -5.2002 7.7998 -2.7998 13.7002\n+c2 5 17.21 22.4004 30 37.5996c3.5 4.2002 6.90039 8.5 9.90039 12.5c-0.0498047 0.0449219 -0.09375 0.134766 -0.100586 0.200195c0 0 2.2998 3 6.10059 8.2002c-4.7002 10.0996 -10.6006 20.5 -13.4004 30c-2.18164 7.00781 -4.95898 18.5664 -6.2002 25.7998\n+c0 0 -15.4902 -39.7002 -31.6895 -71.5c-12.4902 -24.5996 -20.79 -39.5 -24.5908 -46v-0.299805s-0.5 -0.900391 -1.5 -2.40039c-0.5 -0.799805 -0.699219 -1.19922 -0.699219 -1.19922v0.0996094c-4.20996 -6.2002 -13.6104 -18.2998 -23 -18.2998\n+c-25.7002 0 -16.3008 52.2002 -16.3008 52.2002s-7.5 -19.3008 -16 -35.9004c-6.88965 -13.5996 -13.0898 -25 -26.8896 -25c-3.90039 0 -10.1904 0.0996094 -15.3896 5c-11.8008 11.2002 -20.9004 39.7002 -19.1006 61.7002c1.5 18.7998 4.40039 31.7998 8.40039 42.5996\n+c-7.10059 -3.89941 -15.2002 -8.39941 -23.4902 -13.2998c-4.2998 -2.5 -8.59961 -5 -12.7998 -7.5c0.0996094 -0.299805 0.299805 -0.5 0.400391 -0.799805c10.5996 -20.4004 13.3896 -65.2002 -9.60059 -99.5s-65.7803 -55.2002 -107.57 -43.6006\n+c-13.3896 3.80078 -33.79 31.6006 -16.29 70.4004c15.4902 34.2002 77.3809 66.5996 93.6709 74.7002c1.39941 0.799805 2.89941 1.59961 4.5 2.5c-32.4902 28.3994 -113.671 66.7998 -125.061 125.7c-3.2002 16.5996 4.58984 56.2998 53.2803 101.899\n+c40.9902 38.2998 97.9697 67.7002 150.66 86.4004c88.4297 31.3994 181.949 12.8994 196.31 -43.5c14.1006 -55.5 -33.9902 -121.8 -95.7695 -145.601c-54.9902 -21.2998 -100.471 -17.8994 -119.17 -11.7998c-21.29 7 -33.79 21 -36.79 28.9004\n+c-1.2002 3.09961 -3.30078 8.2998 0 10.0996c2 1.10059 2.7998 0.799805 8.09961 -5.09961c5.09961 -5.60059 25.4902 -20.6006 64.2803 -16.2998c101.77 11.3994 163.06 90.5 143.66 133c-13.4902 29.7998 -91.8408 43.1992 -189.841 -5.60059\n+c-119.569 -59.5996 -126.069 -108.7 -127.069 -127.399c-2.7998 -51.3008 63.2793 -78.3008 99.0693 -116.5c0.5 -0.5 0.900391 -1 1.40039 -1.5c6.7002 3.69922 13.7998 7.59961 20.7002 11.3994c18 9.90039 35.0996 19.2002 43 23.5\n+c12.5801 18.2998 38.1797 38.5 56.5801 38.5c29.4893 0 19.3896 -42.3994 19.3896 -42.3994s0.599609 2 1.40039 2c0.799805 0 4.09961 5.5 13.1992 2.19922c9.40039 -3.5 7.2002 -10 7.30078 -10.6992c0.0996094 -1.30078 -11 -38.9004 -15.7002 -63.1006\n+c-2.2002 -11.5 -0.900391 -19.8994 -0.299805 -19.8994c0.899414 0 2.7998 2.89941 4.5 6.09961v0.0996094s1.2998 2.40039 3.5 6.7002c0 0.200195 -0.200195 -0.299805 -0.5 -0.799805c0.199219 0.400391 0.5 0.900391 0.899414 1.7002\n+c2.60059 5 6.2002 12.3994 10.4004 21.5996c8.18945 18.1006 39.4795 87.7002 42.0801 95.4004c2.59961 7.7002 4 15.7002 5.2998 19.0996c1.2998 3.40039 12.4102 6 25.2998 5.90039c12.8906 -0.100586 14.1904 -5.60059 14.29 -6.7002\n+c0.100586 -1.09961 -6.2002 -16.4004 -7.59961 -27.2002c-1.40039 -10.7998 -0.100586 -16.2002 1.09961 -25.2998c0.799805 -6 4.5 -13.5 8.90039 -22c13.2998 21.7998 36.79 63.5996 39.0898 75.2998c1.03613 5.38965 3.41016 13.9473 5.2998 19.1006\n+c1.29004 3.39941 12.3896 6 25.29 5.89941c12.9004 -0.0996094 14.2002 -5.59961 14.2998 -6.7002c0.100586 -1.09961 -6.2002 -16.3994 -7.59961 -27.1992c-1.40039 -10.8008 -0.100586 -16.2002 1.09961 -25.3008c1 -7.7998 7.10059 -18.1992 13 -30.0996\n+c15.1289 7.45215 41.0938 13.5 57.958 13.5h0.0419922zM121.79 11.3799c19.4004 21.0996 27.3896 47.9199 19.0996 78.3203c-1 -0.600586 -2 -1.10059 -2.89941 -1.7002c0 0 -0.400391 -0.200195 -1.2002 -0.700195c-4.7998 -2.89941 -8.7002 -5.2998 -11.4004 -6.89941\n+c-11.7998 -7.40039 -29.5898 -19.4004 -43.3896 -32.4004c-22.6904 -21.4199 -27.3896 -51 -15.4902 -57.9199c11.0898 -6.40039 36.8906 1.2002 55.2803 21.2998zM256.15 102.78c4 9.7998 19.6992 53.2998 16.1992 59.2002c-2.59961 4.5 -13.6992 0.899414 -23.79 -10.4004\n+c-6.2998 -7 -16.8994 -25 -21.8994 -40.0996c-9.90039 -30 -5.60059 -60.5 1.39941 -62.3008c8.2002 -2.09961 21.6904 37.9004 28.0908 53.6006zM367.15 49.7803c7.7998 4.7998 24.96 16.8994 25.0898 34.7998c0 0.599609 -0.100586 1.09961 -0.100586 1.59961\n+c-3.98926 -5.19922 -7.68945 -9.89941 -10.8896 -13.8994c-5.5 -6.7998 -19.4004 -21.7002 -19.4004 -21.7002s-2 -1.90039 -1.09961 -2.40039c1.2002 -0.699219 3.7002 0.200195 6.40039 1.60059zM452.73 69.2803c9.68945 3.5 25.7998 11.8994 25.8994 34.3994\n+c-0.0673828 3.06152 -0.918945 7.90039 -1.89941 10.8008c-10.4102 -9.2002 -16.4004 -18.8008 -19 -24.5c-6.7002 -14.6006 -7 -19.3008 -5 -20.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"vuejs\" unicode=\"&#xf41f;\" \n+d=\"M356.9 383.7h91.0996l-224 -383.7l-224 383.7h176l48 -88.6006l56 88.6006h76.9004zM55.7002 351.7l168.3 -288.2l168.2 288.2h-53.7998l-114.4 -198.2l-114.5 198.2h-53.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"angular\" unicode=\"&#xf420;\" \n+d=\"M185.7 179.9l38.0996 91.5996l38.1006 -91.5996h-76.2002zM223.8 416l207.8 -74.4004l-31.7998 -275.699l-176 -97.9004l-176 97.9004l-31.7998 275.699zM354 74.2002l-130.2 292.3l-130.1 -292.3h48.7002l26.1992 65.3994h110.601l26.2002 -65.3994h48.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"aviato\" unicode=\"&#xf421;\" horiz-adv-x=\"640\" \n+d=\"M107.2 164.5l-19 41.7998h-52.1006l-19 -41.7998h-17.0996l62.2002 131.4l62.2002 -131.4h-17.2002zM62.2002 262.6l-19.6006 -42.5h39.2002zM174.9 160.2l-62.2002 131.399h17.0996l45.1006 -96l45.0996 96h17zM255.5 164.5v127.1h15.5v-127.1h-15.5zM464.6 280.1\n+v-115.6h-17.2998v115.6h-41.2002v11.5h99.6006v-11.5h-41.1006zM640 229.2c0 -9.2002 -1.7002 -17.7998 -5.09961 -25.7998c-3.40039 -8 -8.2002 -15.1006 -14.2002 -21.1006s-13.1006 -10.7998 -21.1006 -14.2002c-8 -3.39941 -16.5996 -5.09961 -25.7998 -5.09961\n+s-17.7998 1.7002 -25.7998 5.09961c-8 3.40039 -15.0996 8.2002 -21.0996 14.2002s-10.8008 13 -14.2002 21.1006c-3.40039 8 -5.10059 16.5996 -5.10059 25.7998s1.7002 17.7998 5.10059 25.7998c3.39941 8 8.2002 15.0996 14.2002 21.0996s13 8.40039 21.0996 11.9004\n+c8 3.40039 16.5996 5.09961 25.7998 5.09961s17.7998 -1.69922 25.7998 -5.09961s15.1006 -5.7998 21.1006 -11.9004c6 -6 10.7002 -13.0996 14.2002 -21.0996c3.39941 -8 5.09961 -16.5996 5.09961 -25.7998zM624.5 229.2c0 7.2998 -1.2998 14 -3.90039 20.2998\n+c-2.59961 6.2998 -6.19922 11.7002 -10.7998 16.2998c-4.59961 4.60059 -10 8.2002 -16.2002 10.9004c-6.19922 2.7002 -12.7998 4 -19.7998 4s-13.5996 -1.2998 -19.7998 -4s-11.5996 -6.2998 -16.2002 -10.9004c-4.59961 -4.59961 -8.2002 -10 -10.7998 -16.2998\n+s-3.90039 -13.0996 -3.90039 -20.2998c0 -7.2998 1.30078 -14 3.90039 -20.2998c2.59961 -6.30078 6.2002 -11.7002 10.7998 -16.3008c4.60059 -4.59961 10 -8.19922 16.2002 -10.8994s12.7998 -4 19.7998 -4s13.6006 1.2998 19.7998 4\n+c6.2002 2.7002 11.6006 6.2998 16.2002 10.8994c4.60059 4.60059 8.2002 10 10.7998 16.3008c2.60059 6.2998 3.90039 13.0996 3.90039 20.2998zM529.7 132.5c6 -0.900391 10.5 -6 10.7002 -12.2998c0 -6.7998 -5.60059 -12.4004 -12.4004 -12.4004\n+s-12.4004 5.60059 -12.4004 12.4004c0 6.2002 4.60059 11.2998 10.5 12.2002v5.7998l-80.2998 -9v-5.40039c5.60059 -1.09961 9.90039 -6.09961 9.90039 -12.0996c0 -6.7998 -5.60059 -10.2002 -12.4004 -10.2002s-12.3994 3.40039 -12.3994 10.2002\n+c0 5.89941 4.19922 11 9.89941 12.0996v4.90039l-28.3994 -3.2002v-23.7002h5.89941v-13.7998h-5.89941v6.59961h-5v-6.59961h-5.90039v13.7998h5.90039v23.2002l-38.3008 -4.2998c-8.09961 -11.5 -19 -13.6006 -19 -13.6006l0.100586 -6.69922l5.09961 -0.200195\n+l0.100586 -12.1006h-4.10059l-0.0996094 5h-5.2002l-0.0996094 -5h-4.10059l0.100586 12.1006l5.09961 0.200195l0.0996094 6.69922s-10.8994 2.2002 -19 13.6006l-38.2998 4.2998v-23.2002h5.90039v-13.7998h-5.90039v6.59961h-5v-6.59961h-5.89941v13.9004h5.89941\n+v23.6992l-28.3994 3.2002v-4.89941c5.59961 -1.10059 9.89941 -6.10059 9.89941 -12.1006c0 -6.7998 -5.59961 -10.2002 -12.3994 -10.2002c-6.80078 0 -12.4004 3.40039 -12.4004 10.2002c0 5.90039 4.2002 11 9.90039 12.1006v5.39941l-80.3008 9v-5.7998\n+c5.90039 -0.900391 10.5 -6 10.5 -12.2002c0 -6.7998 -5.59961 -12.3994 -12.3994 -12.3994s-12.4004 5.59961 -12.4004 12.3994c0 6.2002 4.60059 11.2998 10.5 12.2002v6.2998l-88.8994 10l242.899 -13.5c-0.599609 2.2002 -1.09961 4.60059 -1.39941 7.2002\n+c-0.300781 2.09961 -0.5 4.2002 -0.600586 6.5l-64.7998 8.09961l64.9004 -1.89941c0 0.399414 0 0.799805 0.0996094 1.09961c2.7998 17.2002 25.5 23.7002 25.5 23.7002l1.09961 26.4004h-23.5996l-19 -41.8008h-17.0996l62.1992 131.4l62.2002 -131.4h-17.0996\n+l-19 41.8008h-23.7998l1.09961 -26.3008s22.7002 -6.5 25.5 -23.6992c0 -0.400391 0.0996094 -0.700195 0.0996094 -1.10059l64.9004 1.90039l-64.7998 -8.10059c-0.100586 -2.2998 -0.299805 -4.5 -0.600586 -6.5c-0.299805 -2.59961 -0.799805 -5 -1.39941 -7.19922\n+l242.899 13.3994l-88.8994 -10v-6.2998zM328.9 220.1h17.8994l1.7002 40.3008l1.7002 -40.3008h17.8994l-19.5996 42.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ember\" unicode=\"&#xf423;\" horiz-adv-x=\"640\" \n+d=\"M639.9 193.4c1.09961 -10.8008 -5.30078 -14.3008 -5.30078 -14.3008s-26.5996 -19.5996 -47 -13.6992c-20.3994 5.89941 -21.5 43.1992 -21.5 43.1992h-1.89941l-20.7002 -57.1992s-8.2998 -27.9004 -20.7002 -22.8008\n+c-12.3994 5.10059 -12.0996 18.6006 -12.0996 18.6006s-19.2998 -21.2998 -54.7998 -18.6006c-31.1006 2.30078 -41.1006 26.7002 -41.1006 26.7002s-20.7998 -14.3994 -79.0996 -25.8994c-26.1006 -2.90039 -44.6006 12.8994 -44.6006 12.8994\n+c-2.39941 -2.39941 -18 -10.2002 -18 -10.2002s-22.2998 -10.2998 -30.8994 5.30078c-8.60059 15.5996 -3 63.6992 -3 63.6992h-1.60059s-12.8994 -26.2998 -19.5996 -49.8994c-6.7002 -23.6006 -15 -21.2002 -15 -21.2002s-15.2998 -1.40039 -18.7998 11.4004\n+c-3.5 12.8994 5.59961 59.6992 5.59961 59.6992l-1.2998 -0.299805s-0.799805 1.40039 -12.5996 -23.5996c-20.1006 -48.9004 -24.9004 -50 -36.5 -47.9004c-11.6006 2.10059 -12.1006 16.7002 -12.1006 16.7002l-15.8994 -8.7998s-38.6006 -16.6006 -58.8008 -1.2998\n+c-13.3994 10.1992 -18 22.1992 -19.5996 29.6992c0 0 -17 1.80078 -28.0996 6.10059c-11.1006 4.2998 0.0996094 18.2998 0.0996094 18.2998s3.5 5.2998 10 0s18.7998 -2.90039 18.7998 -2.90039c1 8.5 2.5 19.7002 7.7998 31.5c11 24.7002 27.6006 33 41.3008 33.3008\n+c13.6992 0.199219 23.3994 -3.5 31.6992 -15.3008c18.6006 -45.8994 -49.3994 -69.1992 -49.3994 -69.1992s-1.7998 -12.1006 16.7002 -11.8008c18.5996 0.200195 46.7998 20.4004 46.7998 20.4004c1.2998 15.4004 12.0996 63.5 15 70.7002\n+c2.89941 7.2002 14.2002 5.89941 14.2002 5.89941s8.89941 1.90039 10.5 -7.5c1.69922 -9.39941 -6.40039 -47.5996 -6.40039 -47.5996l1.2998 -1.59961c0.799805 3.69922 20.4004 36.5 20.4004 36.5s11.2998 19.5996 28.5 18.7998s-0.799805 -53.5 -0.799805 -53.5\n+l1.2998 -1.60059l1.2998 2.40039c2.2002 5.90039 27.7002 44.5996 27.7002 44.5996s9.59961 11.3008 18.5 8.60059c8.7998 -2.60059 9.39941 -6.7002 9.89941 -14.2002s-7 -52.0996 -7 -52.0996s-4.2998 -29.2002 5.40039 -28.7002s20.2002 10.7002 20.2002 10.7002\n+s7.5 57.5996 12.5996 105.1c5.10059 47.5 27.1006 79.5 27.1006 79.5s6.5 10 23.5 16.7002c11.1992 4 23.3994 1.2998 29.1992 -23.1006c9.5 -41 -23.2998 -87.8994 -36.8994 -105.199c5.89941 5.7998 15.7998 12.0996 27.2002 5.2998\n+c40.2998 -25.2998 7.2998 -80.9004 7.2998 -80.9004c11.7998 3.7998 33 18 33 18s0.5 6.10059 0.700195 7.5c7.19922 41.2998 32 56.2002 36.5996 59.7002c4.7998 3.59961 47.0996 19.7998 49 -24s-52.9004 -59.0996 -52.9004 -59.0996s4.80078 -12.6006 25 -9.40039\n+c20.2002 3.2002 43.3008 22.7998 43.3008 22.7998c0.799805 18 12.5996 61 15 67.2002c2.39941 6.2002 17.1992 6.5 18.7998 3c2.2002 -7 0.299805 -37.5996 0.299805 -37.5996l1.59961 0.5c5.90039 17.5 18.3008 31.1992 18.3008 31.1992s9.89941 9.7002 18 7.30078\n+c8.09961 -2.30078 5.09961 -30.4004 5.09961 -30.4004s-4.2998 -30.7002 9.40039 -32c13.6992 -1.40039 29.2998 10.7002 29.2998 10.7002s9.59961 3.89941 10.7002 -6.7998zM61.9004 188.1c0 0 6.19922 -1.89941 19.8994 7.60059\n+c13.7002 9.39941 16.4004 24.3994 9.10059 31.3994c-7.2002 6.90039 -28.2002 -7 -29 -39zM334.7 311.9c0 0 -15.9004 -54.5 -16.4004 -70.7002c0 0 44.5 72 40 96.2002c-4.5 24.1992 -23.5996 -25.5 -23.5996 -25.5zM357.5 173.5\n+c12.5996 33.0996 -3.59961 45.5 -3.59961 45.5s-23.4004 12.9004 -33.3008 -20.2002c-9.89941 -33.0996 -6.39941 -44.8994 -6.39941 -44.8994s30.7002 -13.4004 43.2998 19.5996zM442.1 188.1c0 0 15.7002 -1.09961 26.4004 14.2002s1.2998 25.5 1.2998 25.5\n+s-8.59961 11.1006 -19.5996 -9.09961c-11.1006 -20.1006 -8.10059 -30.6006 -8.10059 -30.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"font-awesome-flag\" unicode=\"&#xf425;\" \n+d=\"M444.373 88.5762c0 -7.16797 -6.14453 -10.2402 -13.3125 -13.3125c-28.6719 -12.2881 -59.3916 -23.5518 -92.1592 -23.5518c-46.0801 0 -67.584 28.6719 -122.88 28.6719c-39.9365 0 -81.9209 -14.3359 -115.713 -29.6953\n+c-2.04785 -1.02441 -4.0957 -1.02441 -6.14355 -2.04883v-77.8232c0 -21.4053 -16.1221 -34.8164 -33.792 -34.8164c-19.4561 0 -34.8164 15.3604 -34.8164 34.8164v374.783c-13.3115 10.2402 -22.5273 26.624 -22.5273 45.0566c0 31.7441 25.5996 57.3438 57.3438 57.3438\n+s57.3438 -25.5996 57.3438 -57.3438c0 -18.4326 -8.19141 -34.8164 -22.5273 -45.0566v-31.7432c4.12402 1.37402 58.7676 28.6719 114.688 28.6719c65.2705 0 97.6758 -27.6484 126.976 -27.6484c38.9121 0 81.9209 27.6484 92.1602 27.6484\n+c8.19238 0 15.3604 -6.14453 15.3604 -13.3125v-240.64z\" \u002F>\n+    \u003Cglyph glyph-name=\"gitter\" unicode=\"&#xf426;\" horiz-adv-x=\"384\" \n+d=\"M66.4004 125.5h-50.4004v322.5h50.4004v-322.5zM166.9 371.9v-435.9h-50.4004v435.9h50.4004zM267.5 371.9v-435.9h-50.4004v435.9h50.4004zM368 372v-247h-50.4004v247h50.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"hooli\" unicode=\"&#xf427;\" horiz-adv-x=\"640\" \n+d=\"M144.5 96v16c12.2998 -6.59961 25.0996 -12.2002 38.2998 -16.7998zM202.2 101.3c29.5 -10.7002 55.3994 -13.5 75.2998 -13.2998c-24.7998 -7 -58.2002 -5.2998 -94.7002 7.2002l19.4004 0.799805v5.2998zM611.1 216.5c-16 0 -28.8994 13 -28.8994 28.9004\n+c0 15.8994 13 24.5 28.8994 24.5c16 0 28.9004 -8.5 28.9004 -24.5s-13 -28.9004 -28.9004 -28.9004zM582.1 96v110.5h57.9004v-110.5h-57.9004zM508.4 96v168l57.8994 27.2998v-195.3h-57.8994zM477.4 215.4c18.0996 -18.1006 16.6992 -33.8008 16.7998 -52.6006\n+c0 -18.7002 1.39941 -34.2998 -16.7998 -52.5c-18.1006 -18.2002 -50.4004 -17.0996 -50.4004 -17.0996s-32.2002 -1.10059 -50.4004 17.0996c-18.1992 18.2002 -16.7998 33.7998 -16.7998 52.5s-1.39941 34.4004 16.7998 52.6006\n+c18.1006 18.1992 50.4004 17.0996 50.4004 17.0996s32.2002 1.09961 50.4004 -17.0996zM437.6 143.5v40.4004c0 8.7998 -7.2998 10.8994 -10.6992 10.8994c-3.40039 0 -10.7002 -2.2002 -10.7002 -10.8994v-40.4004c0 -3.59961 1.7998 -12.5 10.7002 -12.5\n+c8.89941 0 10.6992 8.90039 10.6992 12.5zM331.4 215.4c18.1992 -18.1006 16.6992 -33.8008 16.6992 -52.3008c0 -18.6992 1.5 -34.2998 -16.6992 -52.5c-18.1006 -18.1992 -50.4004 -17.0996 -50.4004 -17.0996s-32.2002 -1.09961 -50.4004 17.0996\n+c-18.1992 18.2002 -16.7998 33.8008 -16.7998 52.5c0 15.6006 -0.899414 29.1006 9.2998 43.7002c-16 11.7998 -58 37.4004 -99.8994 58.2998v-54.2998c8 13.7002 22.7002 22 38.5 21.9004c27.2002 0 40.5996 -18.7002 40.5996 -37.4004v-93.8994\n+c-20.3994 7.5 -39.7002 17.3994 -57.7002 29.5996v48.7002c0 8.09961 -1.5 15 -10.5996 15s-10.7998 -11.2998 -10.7998 -18.2002v-29.7998l-4.5 3.59961c-22.9004 18.9004 -40.2998 35.6006 -53.4004 50.2998v-31c11 -9.7998 23.6006 -20.1992 38.4004 -31.3994\n+c6.39941 -4.90039 12.8994 -9.40039 19.3994 -13.6006v-28.5996h-57.8994v73.7002c-86.7002 78 -61.7998 110.8 -61.7998 110.8c8.2998 18.2998 42.8994 22.2002 97.2998 0.0996094l22.5 10.6006v-20.7002c29.5996 -14.5996 63.8994 -31.5 102.1 -61.0996\n+c1.60059 2.09961 3.40039 4.09961 5.2998 6c18.2002 18.1992 50.4004 17.0996 50.4004 17.0996s32.2002 1.09961 50.4004 -17.0996zM65.2002 264l29.2002 13.7002c-26.9004 10.0996 -50.9004 13.5 -64.4004 2.09961c-3.7002 -3.09961 -13.5 -24.5996 35.2002 -79.0996\n+v63.2998zM291.7 143.5v40.4004c0 8.7998 -7.2998 10.8994 -10.7002 10.8994s-10.7002 -2.2002 -10.7002 -10.8994v-40.4004c0 -3.59961 1.7998 -12.5 10.7002 -12.5s10.7002 8.90039 10.7002 12.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"strava\" unicode=\"&#xf428;\" horiz-adv-x=\"384\" \n+d=\"M158.4 448l150.199 -292h-88.5l-61.6992 116.1l-62.2002 -116.1h-89.2002zM308.6 156h67.6006l-111.5 -220l-112.2 220h67.5996l44.6006 -88.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"stripe\" unicode=\"&#xf429;\" horiz-adv-x=\"640\" \n+d=\"M165 303.3l0.0996094 -38.5h33.7002v-37.7998h-33.7002v-63.2002c0 -26.2002 28 -18 33.7002 -15.7002v-33.7998c-5.89941 -3.2002 -16.5996 -5.89941 -31.2002 -5.89941c-26.2998 0 -46.0996 17 -46.0996 43.2998l0.200195 142.399zM254.1 251.7\n+c10.4004 19.0996 31.1006 15.2002 37.1006 13.0996v-40.7998c-5.7002 1.7998 -23.4004 4.5 -33.9004 -9.2998v-103.101h-44.2998v153.2h38.4004zM346.4 324v-36.2002l-44.6006 -9.5v36.2002zM44.9004 219.7c0 -20 67.8994 -10.5 67.8994 -63.4004\n+c0 -32 -25.3994 -47.7998 -62.2998 -47.7998c-15.2998 0 -32 3 -48.5 10.0996v40c14.9004 -8.09961 33.9004 -14.1992 48.5996 -14.1992c9.90039 0 17 2.69922 17 10.8994c0 21.2002 -67.5 13.2002 -67.5 62.4004c0 31.3994 24 50.2002 60 50.2002\n+c14.7002 0 29.4004 -2.30078 44.1006 -8.10059v-41.7998c-13.5 7.2998 -30.7002 11.4004 -44.2002 11.4004c-9.2998 -0.100586 -15.0996 -2.80078 -15.0996 -9.7002zM640 186.4c0 -4.30078 -0.400391 -13.6006 -0.599609 -15.9004h-86.9004\n+c2 -20.7998 17.2002 -26.9004 34.5 -26.9004c17.5996 0 31.5 3.7002 43.5996 9.80078v-33.4004c-12.0996 -6.7002 -28 -11.5 -49.1992 -11.5c-43.2002 0 -73.5 24.7002 -73.5 78.2002c0 45.2002 25.6992 81.0996 67.8994 81.0996s64.2002 -35.8994 64.2002 -81.3994z\n+M552.1 203.2h45.9004c0 20 -11.5996 28.3994 -22.5 28.3994c-11.0996 0 -23.4004 -8.39941 -23.4004 -28.3994zM439.2 267.8c31.2002 0 60.5996 -28.0996 60.5 -79.7002c0 -56.3994 -29 -79.5996 -60.7998 -79.5996c-15.5 0 -25 6.5 -31.4004 11.2002l-0.0996094 -50.2002\n+l-44.4004 -9.40039v204.801h39.0996l2.30078 -11c6.19922 5.69922 17.3994 13.8994 34.7998 13.8994zM428.6 145.3c16.5 0 27.5 17.9004 27.4004 41.7998c0 23.2002 -11.2002 41.4004 -27.4004 41.4004c-10.1992 0 -16.5996 -3.7002 -21.1992 -8.7998l0.299805 -66\n+c4.2998 -4.60059 10.5 -8.40039 20.8994 -8.40039zM301.9 111.6v153.2h44.5996v-153.2h-44.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"stripe-s\" unicode=\"&#xf42a;\" horiz-adv-x=\"384\" \n+d=\"M155.3 293.4c0 -64.2002 218 -33.7002 218 -203.9c0 -102.6 -81.7002 -153.6 -200.3 -153.6c-44.8916 0.101562 -114.78 14.6172 -156 32.3994v128.5c47.9004 -26 108.9 -45.5 156.1 -45.5c31.8008 0 54.7002 8.5 54.7002 34.9004c0 68.0996 -216.8 42.5 -216.8 200.399\n+c0 101 77.0996 161.4 192.8 161.4c47.2998 0 94.5 -7.2002 141.8 -26.0996v-134.301c-43.3994 23.4004 -98.5 36.7002 -141.899 36.7002c-29.7998 0 -48.4004 -8.59961 -48.4004 -30.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"typo3\" unicode=\"&#xf42b;\" \n+d=\"M178.7 369.6c0 -66.3994 83.3994 -264.899 140.6 -264.899c6.90039 0 11.5 0 18.5 2.2998c-49.3994 -79.5 -110.399 -139 -146.7 -139c-77.2998 0 -184.1 234 -184.1 337.5c0 16.2998 3.90039 29.4004 9.2998 37.0996c27 32.4004 106.8 57.9004 176.3 66.4004\n+c-8.5 -7 -13.8994 -14.7002 -13.8994 -39.4004zM301.5 416c71.7998 0 138.8 -11.5996 138.8 -52.5c0 -82.5996 -52.5 -182.3 -78.7998 -182.3c-47.9004 0 -101.7 132.1 -101.7 198.5c0 30.8994 11.6006 36.2998 41.7002 36.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"amazon-pay\" unicode=\"&#xf42c;\" horiz-adv-x=\"640\" \n+d=\"M14 122.7c2.2998 4.2002 5.2002 4.89941 9.7002 2.5c10.3994 -5.60059 20.5996 -11.4004 31.2002 -16.7002c33.6992 -16.8047 90.7744 -37.5469 127.399 -46.2998c17.2734 -4.16797 45.5869 -9.4541 63.2002 -11.7998c22.083 -2.96875 58.0898 -5.37793 80.3721 -5.37793\n+c4.03809 0 10.5908 0.0800781 14.6279 0.177734c17.4004 0.399414 34.7998 1.7998 52.0996 3.7998c46.7393 5.44824 119.897 24.623 163.301 42.7998c2.89941 1.2002 5.89941 2 9.09961 1.2002c6.7002 -1.7998 9 -9 4.09961 -13.9004\n+c-2.47168 -2.27246 -6.77246 -5.58789 -9.59961 -7.39941c-30.7002 -21.1006 -64.2002 -36.4004 -99.5996 -47.9004c-20.3311 -6.55176 -53.9756 -14.4365 -75.1006 -17.5996c-14.6006 -2.23633 -38.4346 -4.38672 -53.2002 -4.7998\n+c-0.694336 -0.0419922 -1.81445 -0.176758 -2.5 -0.300781h-21.0996c-0.685547 0.124023 -1.80469 0.258789 -2.5 0.300781c-3.59961 0.199219 -7.2002 0.299805 -10.7002 0.399414c-13.9971 0.634766 -36.5762 3.00879 -50.3994 5.2998\n+c-22.7275 3.7041 -58.7471 13.0674 -80.4004 20.9004c-44.8652 16.1797 -110.094 55.1562 -145.6 87c-1.80078 1.59961 -3 3.7998 -4.40039 5.7002v2zM172 382.9c2.7998 0 5.5 0 8.2998 -0.100586c3.2998 -0.5 6.60059 -0.799805 9.7998 -1.5\n+c21.3008 -4.39941 35.4004 -17.2998 43.9004 -36.8994c6.90039 -15.9004 8.59961 -32.7002 8.09961 -49.8008c-0.399414 -15.3994 -3.2998 -30.1992 -10.2998 -44.0996c-9.2002 -18.4004 -23.3994 -30.9004 -43.7998 -34.9004c-22.5 -4.39941 -43.0996 0.5 -61 15.4004\n+c-0.5 0.5 -1.09961 1 -2.2002 1.90039v-72.4004c0 -1 0 -2 -0.0996094 -3c-0.299805 -3 -2.10059 -5 -5 -5c-7 -0.0996094 -14.1006 -0.0996094 -21.1006 0c-2.89941 0.0996094 -4.69922 2 -4.89941 5c-0.100586 1 -0.100586 2 -0.100586 3v209.3\n+c0 6.90039 1.30078 8.2002 8.2002 8.2002h11.5c4.60059 0 6.90039 -2 7.60059 -6.59961c0.5 -2.7002 0.899414 -5.5 1.2998 -8.2002c0.0439453 -0.405273 0.222656 -1.0332 0.399414 -1.40039c2.5 1.90039 4.7002 3.7002 7.10059 5.40039\n+c9.39941 6.90625 26.4238 13.6709 38 15.0996zM124.6 341c0.100586 -14.0996 0 -28 0 -42.0996c0 -14.1006 0.100586 -28.1006 0 -42.2002c-0.00488281 -0.0703125 -0.00878906 -0.183594 -0.00878906 -0.253906c0 -1.10547 0.765625 -2.46973 1.70898 -3.0459\n+c11.2002 -7.90039 23.4004 -13.3008 37.4004 -13.9004c20.2002 -0.900391 35.7998 7.2002 42.5996 28.5c3.2002 10 4 20.2002 4 30.5996c0 11.2002 -1 22.3008 -4.89941 33c-6.40039 17.5 -18.6006 24.8008 -33.5 25.9004\n+c-16.8008 1.2998 -31.9004 -3.7002 -45.6006 -13.2002c-0.945312 -0.556641 -1.71289 -1.90039 -1.71289 -2.99805c0 -0.0830078 0.00585938 -0.21875 0.0126953 -0.301758zM330.3 382.9c4 0 8 0 11.9004 0.0996094c3.59961 -0.5 7.2002 -0.799805 10.7998 -1.2998\n+c7.7002 -1.10059 15.0996 -3.10059 21.7998 -7.10059c11.6006 -6.89941 17.1006 -17.5 19 -30.3994c0.5 -3.29297 0.905273 -8.66895 0.905273 -12c0 -0.248047 -0.00195312 -0.651367 -0.00488281 -0.900391v-106\n+c0.00195312 -0.128906 0.00390625 -0.336914 0.00390625 -0.46582c0 -0.645508 -0.046875 -1.69141 -0.104492 -2.33398c-0.0742188 -2.57422 -2.22461 -4.67969 -4.7998 -4.7002c-5.39941 -0.0996094 -10.8994 -0.0996094 -16.2998 0\n+c-2.90039 0.100586 -4.7998 2.10059 -5.40039 5.2002c-0.699219 3.59961 -1.19922 7.2002 -1.7998 11c-0.481445 -0.245117 -1.19824 -0.737305 -1.59961 -1.09961c-11.7998 -9.7002 -25.2002 -16.1006 -40.2998 -18.4004c-13.1006 -2 -26 -1.2002 -37.9004 5.40039\n+c-12.4004 6.89941 -19.4004 17.6992 -21.4004 31.6992c-1.5 10.5 -0.799805 20.9004 3.90039 30.7002c6.09961 12.6006 16.5 20.4004 29.4004 24.9004c10.7998 3.7998 22 4.5 33.2998 3.89941c8.95312 -0.556641 23.2891 -2.75195 32 -4.89941\n+c0.399414 -0.100586 0.799805 0 1.2998 -0.100586c0.0898438 0.381836 0.179688 1.00879 0.200195 1.40039c-0.100586 8.2998 0 16.5996 -0.299805 24.9004c-0.200195 5.89941 -1.60059 11.5996 -5.30078 16.3994c-4.19922 5.5 -10.2998 7.40039 -16.7998 8.40039\n+c-12.5 1.89941 -24.8994 0.899414 -37.2002 -1.40039c-7.89941 -1.5 -15.6992 -3.7002 -23.5 -5.7002c-4.69922 -1.19922 -6.69922 0.100586 -6.7998 4.90039c-0.0996094 3.2998 0.100586 6.59961 0 9.90039c-0.0996094 3.89941 1.7002 6.5 5.2998 7.69922\n+c5.90039 2 11.8008 4.2002 17.9004 5.80078c7.86426 1.92188 20.8115 3.75879 28.9004 4.09961c0.899414 0.0996094 1.89941 0.299805 2.89941 0.400391zM365.3 255.2c-0.0996094 4.7002 0.100586 9.2998 0.100586 14.0996s-0.100586 9.5 0 14.2998\n+c0 1.60059 -0.5 2.40039 -2.10059 2.60059c-8.39941 1.09961 -16.5996 2.7002 -25 3.39941c-1.95117 0.227539 -5.12891 0.412109 -7.09375 0.412109c-4.99316 0 -12.9258 -1.16992 -17.7061 -2.61133c-8 -2.60059 -13.9004 -7.30078 -16.4004 -15.6006\n+c-0.779297 -2.57422 -1.41211 -6.84766 -1.41211 -9.53809c0 -2.78613 0.677734 -7.2041 1.5127 -9.86133c1.55762 -5.40918 7.11328 -11.3672 12.3994 -13.3008c5.40039 -2.19922 11.1006 -2.39941 16.8008 -1.7998c13.8994 1.40039 26.1992 6.7998 37.3994 14.9004\n+c0.832031 0.543945 1.50684 1.79199 1.50684 2.78613c0 0.0595703 -0.00292969 0.155273 -0.00683594 0.213867zM625.2 125.8v-17.2998c-0.700195 -3.59961 -1.2998 -7.2998 -2.10059 -10.9004c-4.39941 -20.2998 -11.8994 -39.1992 -24.6992 -55.5996\n+c-3.27148 -3.9209 -8.96094 -9.92383 -12.7002 -13.4004c-1.1416 -1.04102 -3.29199 -2.16113 -4.7998 -2.5c-2.90039 -0.699219 -4.60059 1.2002 -4.10059 4.10059c0.201172 0.852539 0.649414 2.19629 1 3c5.7998 14.7998 11.7002 29.7002 15.7998 45.0996\n+c2.10059 7.60059 3.90039 15.2998 3.5 23.2998c-0.199219 5.2002 -2.5 9 -7.59961 10.4004c-3.89746 1.15332 -10.3486 2.36328 -14.4004 2.7002c-11.3994 0.899414 -22.8994 0.200195 -34.2998 -0.900391c-7.7998 -0.799805 -15.5 -1.7002 -23.2998 -2.5\n+c-0.504883 -0.0576172 -1.32617 -0.103516 -1.83398 -0.103516c-0.100586 0 -0.264648 0.000976562 -0.366211 0.00390625c-1.5 -0.100586 -3.2002 0.299805 -3.59961 1.7998c-0.111328 0.383789 -0.201172 1.01855 -0.201172 1.41797\n+c0 0.764648 0.314453 1.92188 0.701172 2.58203c0.838867 1.1582 2.49609 2.72656 3.7002 3.5c12.0996 8.2998 25.6992 12.9004 40 15.5996c7.29883 1.34375 19.2461 2.43457 26.668 2.43457c3.46484 0 9.0791 -0.239258 12.5312 -0.53418\n+c5.92773 -0.371094 15.335 -2.11816 21 -3.90039c4.30078 -1.39941 8.10059 -3.2998 9.10059 -8.2998zM493.1 249c0.300781 -0.700195 0.501953 -1.2998 0.902344 -2.40039c2.59961 7.7002 5.2002 15 7.7002 22.2002l34.7998 100\n+c0.5 1.40039 1.09961 2.7002 1.59961 4.10059c0.932617 2.87988 4.14648 5.21777 7.17383 5.21777c0.145508 0 0.381836 -0.0078125 0.526367 -0.0185547c6.60059 0 13.2998 0.100586 19.9004 0c2.7998 0 4.09961 -1.59961 3.7002 -4.39941\n+c-0.277344 -1.56641 -0.994141 -4.03027 -1.60059 -5.5c-23.3662 -59.9336 -46.8994 -119.801 -70.5996 -179.601c-2.1416 -5.27734 -6.2627 -13.5205 -9.2002 -18.3994c-8.7998 -14.9004 -22.4004 -21.7998 -39.5 -21.4004c-4.70801 0.18457 -12.2793 1.08008 -16.9004 2\n+c-5.39941 0.900391 -7.2998 3.40039 -7.39941 8.90039c-0.100586 3.2666 -0.100586 6.56641 0 9.89941c0.0996094 3.5 1.7998 5 5.2002 4.80078c2.5 -0.200195 5 -0.800781 7.5 -1c1.30664 -0.148438 3.43359 -0.268555 4.74902 -0.268555\n+c2.98828 0 7.75977 0.612305 10.6504 1.36816c7.2002 1.90039 12.2002 6.7998 15.2002 13.2998c3.40039 7.2998 6 15 9.2998 22.2998c1.90039 4.2002 1.5 7.7002 -0.200195 11.8008c-19.7998 48.5 -39.5 97 -59.1006 145.5\n+c-0.649414 1.64453 -1.50098 4.37695 -1.90039 6.09961c-0.5 2.5 0.700195 4.5 3.2002 4.5c7.7002 0.0996094 15.2998 0 22.9004 -0.0996094c3.2002 0 5.2998 -1.90039 6.39941 -4.80078c2.10059 -5.59961 4.30078 -11.1992 6.30078 -16.8994\n+c12.8994 -35.7666 25.7988 -71.5 38.6982 -107.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"cc-amazon-pay\" unicode=\"&#xf42d;\" horiz-adv-x=\"576\" \n+d=\"M124.7 246.2c0.0996094 11.7998 0 23.5 0 35.2998v35.2998c0 1.2998 0.399414 2 1.39941 2.7002c11.5 8 24.1006 12.0996 38.2002 11.0996c12.5 -0.899414 22.7002 -7 28.1006 -21.6992c3.2998 -8.90039 4.09961 -18.2002 4.09961 -27.7002\n+c0 -8.7002 -0.700195 -17.2998 -3.40039 -25.6006c-5.69922 -17.7998 -18.6992 -24.6992 -35.6992 -23.8994c-11.7002 0.5 -21.9004 5 -31.4004 11.7002c-0.900391 0.799805 -1.40039 1.59961 -1.2998 2.7998zM279.6 231.6c-5.19922 2 -8.7998 5.7002 -10.3994 11.2002\n+c-1.7002 5.40039 -1.7002 10.7998 -0.100586 16.2002c2 6.90039 7 10.9004 13.7002 13.0996c6.7998 2.2002 13.7998 2.5 20.7998 1.90039c7 -0.700195 13.9004 -2 20.9004 -2.90039c1.40039 -0.199219 1.7998 -0.799805 1.7998 -2.19922c-0.0996094 -4 0 -8 0 -12\n+c0 -3.90039 -0.0996094 -7.90039 0 -11.8008c0 -1.19922 -0.399414 -1.89941 -1.2998 -2.5c-9.40039 -6.7998 -19.7002 -11.2998 -31.2998 -12.5c-4.7998 -0.5 -9.5 -0.299805 -14.1006 1.5zM576 368v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48zM368.5 344.1c0.400391 -1.69922 0.900391 -3.39941 1.59961 -5.09961c16.5 -40.5996 32.9004 -81.2998 49.5 -121.9c1.40039 -3.5 1.7002 -6.39941 0.200195 -9.89941\n+c-2.7998 -6.2002 -4.89941 -12.6006 -7.7998 -18.7002c-2.59961 -5.5 -6.7002 -9.5 -12.7002 -11.2002c-4.2002 -1.09961 -8.5 -1.2998 -12.8994 -0.899414c-2.10059 0.199219 -4.2002 0.699219 -6.30078 0.799805c-2.7998 0.200195 -4.19922 -1.10059 -4.2998 -4\n+c-0.0996094 -2.7998 -0.0996094 -5.60059 0 -8.2998c0.100586 -4.60059 1.60059 -6.7002 6.2002 -7.5c4.7002 -0.800781 9.40039 -1.60059 14.2002 -1.7002c14.2998 -0.299805 25.7002 5.39941 33.0996 17.8994c2.90039 4.90039 5.60059 10.1006 7.7002 15.4004\n+c19.7998 50.0996 39.5 100.3 59.2002 150.5c0.599609 1.5 1.09961 3 1.2998 4.59961c0.400391 2.40039 -0.700195 3.60059 -3.09961 3.7002c-5.60059 0.100586 -11.1006 0 -16.7002 0c-3.10059 0 -5.2998 -1.39941 -6.40039 -4.2998\n+c-0.399414 -1.09961 -0.899414 -2.2998 -1.2998 -3.40039l-29.0996 -83.6992c-2.10059 -6.10059 -4.2002 -12.1006 -6.5 -18.6006c-0.400391 0.900391 -0.600586 1.40039 -0.800781 1.90039c-10.7998 29.8994 -21.5996 59.8994 -32.3994 89.7998\n+c-1.7002 4.7002 -3.5 9.5 -5.2998 14.2002c-0.900391 2.5 -2.7002 4 -5.40039 4c-6.40039 0.0996094 -12.7998 0.200195 -19.2002 0.0996094c-2.2002 0 -3.2998 -1.59961 -2.7998 -3.7002zM242.4 242c1.69922 -11.7002 7.59961 -20.7998 18 -26.5996\n+c9.89941 -5.5 20.6992 -6.2002 31.6992 -4.60059c12.7002 1.90039 23.9004 7.2998 33.8008 15.5c0.399414 0.299805 0.799805 0.600586 1.39941 1c0.5 -3.2002 0.900391 -6.2002 1.5 -9.2002c0.5 -2.59961 2.10059 -4.2998 4.5 -4.39941\n+c4.60059 -0.100586 9.10059 -0.100586 13.7002 0c2.2998 0.0996094 3.7998 1.59961 4 3.89941c0.0996094 0.800781 0.0996094 1.60059 0.0996094 2.30078v88.7998c0 3.59961 -0.199219 7.2002 -0.699219 10.7998c-1.60059 10.7998 -6.2002 19.7002 -15.9004 25.4004\n+c-5.59961 3.2998 -11.7998 5 -18.2002 5.89941c-3 0.400391 -6 0.700195 -9.09961 1.10059h-10c-0.799805 -0.100586 -1.60059 -0.300781 -2.5 -0.300781c-8.2002 -0.399414 -16.2998 -1.39941 -24.2002 -3.5c-5.09961 -1.2998 -10 -3.19922 -15 -4.89941\n+c-3 -1 -4.5 -3.2002 -4.40039 -6.5c0.100586 -2.7998 -0.0996094 -5.60059 0 -8.2998c0.100586 -4.10059 1.80078 -5.2002 5.7002 -4.10059c6.5 1.7002 13.1006 3.5 19.7002 4.7998c10.2998 1.90039 20.7002 2.7002 31.0996 1.2002\n+c5.40039 -0.799805 10.5 -2.39941 14.1006 -7c3.09961 -4 4.2002 -8.7998 4.39941 -13.7002c0.300781 -6.89941 0.200195 -13.8994 0.300781 -20.7998c0 -0.399414 -0.100586 -0.700195 -0.200195 -1.2002c-0.400391 0 -0.799805 0 -1.10059 0.100586\n+c-8.7998 2.09961 -17.6992 3.59961 -26.7998 4.09961c-9.5 0.5 -18.8994 -0.0996094 -27.8994 -3.2002c-10.8008 -3.7998 -19.5 -10.2998 -24.6006 -20.7998c-4.09961 -8.2998 -4.59961 -17 -3.39941 -25.7998zM98.7002 341.1v-175.3c0 -0.799805 0 -1.7002 0.0996094 -2.5\n+c0.200195 -2.5 1.7002 -4.09961 4.10059 -4.2002c5.89941 -0.0996094 11.7998 -0.0996094 17.6992 0c2.5 0 4 1.7002 4.10059 4.10059c0.0996094 0.799805 0.0996094 1.7002 0.0996094 2.5v60.7002c0.900391 -0.700195 1.40039 -1.2002 1.90039 -1.60059\n+c15 -12.5 32.2002 -16.5996 51.0996 -12.8994c17.1006 3.39941 28.9004 13.8994 36.7002 29.1992c5.7998 11.6006 8.2998 24.1006 8.7002 37c0.5 14.3008 -1 28.4004 -6.7998 41.7002c-7.10059 16.4004 -18.9004 27.2998 -36.7002 30.9004\n+c-2.7002 0.599609 -5.5 0.799805 -8.2002 1.2002h-7c-1.2002 -0.200195 -2.40039 -0.300781 -3.59961 -0.5c-11.7002 -1.40039 -22.3008 -5.80078 -31.8008 -12.7002c-2 -1.40039 -3.89941 -3 -5.89941 -4.5c-0.100586 0.5 -0.299805 0.799805 -0.400391 1.2002\n+c-0.399414 2.2998 -0.700195 4.59961 -1.09961 6.89941c-0.600586 3.90039 -2.5 5.5 -6.40039 5.60059h-9.7002c-5.89941 0.0996094 -6.89941 -1 -6.89941 -6.80078zM493.6 109c-2.69922 0.700195 -5.09961 0 -7.59961 -1c-43.9004 -18.4004 -89.5 -30.2002 -136.8 -35.7998\n+c-14.5 -1.7002 -29.1006 -2.7998 -43.7002 -3.2002c-26.5996 -0.700195 -53.2002 0.799805 -79.5996 4.2998c-17.8008 2.40039 -35.5 5.7002 -53 9.90039c-37 8.89941 -72.7002 21.7002 -106.7 38.7998c-8.7998 4.40039 -17.4004 9.2998 -26.1006 14\n+c-3.7998 2.09961 -6.19922 1.5 -8.19922 -2.09961v-1.7002c1.19922 -1.60059 2.19922 -3.40039 3.69922 -4.7998c36 -32.2002 76.6006 -56.5 122 -72.9004c21.9004 -7.90039 44.4004 -13.7002 67.3008 -17.5c14 -2.2998 28 -3.7998 42.1992 -4.5\n+c3 -0.0996094 6 -0.200195 9 -0.400391c0.700195 0 1.40039 -0.199219 2.10059 -0.299805h17.7002c0.699219 0.100586 1.39941 0.299805 2.09961 0.299805c14.9004 0.400391 29.7998 1.80078 44.5996 4c21.4004 3.2002 42.4004 8.10059 62.9004 14.7002\n+c29.5996 9.60059 57.7002 22.4004 83.4004 40.1006c2.7998 1.89941 5.69922 3.7998 8 6.19922c4.2998 4.40039 2.2998 10.4004 -3.30078 11.9004zM544 136.7c-0.799805 4.2002 -4 5.7998 -7.59961 7c-5.7002 1.89941 -11.6006 2.7998 -17.6006 3.2998\n+c-11 0.900391 -22 0.400391 -32.7998 -1.59961c-12 -2.2002 -23.4004 -6.10059 -33.5 -13.1006c-1.2002 -0.799805 -2.40039 -1.7998 -3.09961 -3c-0.600586 -0.899414 -0.700195 -2.2998 -0.5 -3.39941c0.299805 -1.30078 1.69922 -1.60059 3 -1.5\n+c0.599609 0 1.19922 0 1.7998 0.0996094l19.5 2.09961c9.59961 0.900391 19.2002 1.5 28.7998 0.800781c4.09961 -0.300781 8.09961 -1.2002 12 -2.2002c4.2998 -1.10059 6.2002 -4.40039 6.40039 -8.7002c0.299805 -6.7002 -1.2002 -13.0996 -2.90039 -19.5\n+c-3.5 -12.9004 -8.2998 -25.4004 -13.2998 -37.7998c-0.299805 -0.799805 -0.700195 -1.7002 -0.799805 -2.5c-0.400391 -2.5 1 -4 3.39941 -3.5c1.40039 0.299805 3 1.09961 4 2.09961c3.7002 3.60059 7.5 7.2002 10.6006 11.2002\n+c10.6992 13.7998 17 29.5996 20.6992 46.5996c0.700195 3 1.2002 6.10059 1.7002 9.10059c0.200195 4.7002 0.200195 9.59961 0.200195 14.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ethereum\" unicode=\"&#xf42e;\" horiz-adv-x=\"320\" \n+d=\"M311.9 187.2l-151.9 -92.7998l-152 92.7998l152 260.8zM160 64.5996l152 92.8008l-152 -221.4l-152 221.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"korvue\" unicode=\"&#xf42f;\" horiz-adv-x=\"446\" \n+d=\"M386.5 414c32.7002 0 59.5 -26.7998 59.5996 -59.5v-327c0 -32.7002 -26.5 -59.5 -59.5 -59.5h-327.1c-32.7002 0 -59.5 26.7998 -59.5 59.4004v327.1c0 32.7002 26.7998 59.5 59.5 59.5h327zM87.0996 327.2v-132h187.5l81.2002 132h-110.899l-61.8008 -116v116h-96z\n+M248.9 55.0996h118.399l-88.5996 130.801h-191.5v-130.801h96v113.601z\" \u002F>\n+    \u003Cglyph glyph-name=\"elementor\" unicode=\"&#xf430;\" \n+d=\"M425.6 416c12.4004 0 22.4004 -10 22.4004 -22.4004v-403.199c0 -12.4004 -10 -22.4004 -22.4004 -22.4004h-403.199c-12.4004 0 -22.4004 10 -22.4004 22.4004v403.199c0 12.4004 10 22.4004 22.4004 22.4004h403.199zM164.3 92.5v199h-39.7998v-199h39.7998z\n+M323.6 92.5v39.7998h-119.5v-39.7998h119.5zM323.6 172.1v39.8008h-119.5v-39.8008h119.5zM323.6 251.8v39.7998h-119.5v-39.7998h119.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"youtube-square\" unicode=\"&#xf431;\" \n+d=\"M186.8 245.9l95.2002 -54.1006l-95.2002 -54.0996v108.2zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM406 191.7c0 0 0 59.5996 -7.59961 88.2002\n+c-4.2002 15.7998 -16.5 28.1992 -32.2002 32.3994c-28.2998 7.7002 -142.2 7.7002 -142.2 7.7002s-113.9 0 -142.2 -7.7002c-15.7002 -4.2002 -28 -16.5996 -32.2002 -32.3994c-7.59961 -28.5 -7.59961 -88.2002 -7.59961 -88.2002s0 -59.6006 7.59961 -88.2002\n+c4.2002 -15.7998 16.5 -27.7002 32.2002 -31.9004c28.2998 -7.59961 142.2 -7.59961 142.2 -7.59961s113.9 0 142.2 7.7002c15.7002 4.2002 28 16.0996 32.2002 31.8994c7.59961 28.5 7.59961 88.1006 7.59961 88.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"flipboard\" unicode=\"&#xf44d;\" \n+d=\"M0 416h448v-448h-448v448zM358.4 236.8v89.6006h-268.801v-268.801h89.6006v89.6006h89.5996v89.5996h89.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"hips\" unicode=\"&#xf452;\" horiz-adv-x=\"640\" \n+d=\"M251.6 290.4v-201.801c0 -1.89941 -0.899414 -2.7998 -2.7998 -2.7998h-40.8994c-1.60059 0 -2.7002 1.40039 -2.7002 2.7998v201.801c0 1.39941 1.09961 2.7998 2.7002 2.7998h40.8994c1.90039 0 2.7998 -0.900391 2.7998 -2.7998zM156.5 280\n+c18.7002 -13.5 28 -31.9004 28 -55.2998v-136.101c0 -1.89941 -0.900391 -2.7998 -2.7002 -2.7998h-27.2998c-9.09961 0 -16.4004 7.2998 -16.4004 16.2998v122.601c0 0.899414 2.7002 27 -45.7998 27c-48.5996 0 -45.7998 -26.2002 -45.7998 -27v-136.101\n+c0 -1.89941 -0.900391 -2.7998 -2.7998 -2.7998h-41c-1.7998 0 -2.7002 0.900391 -2.7002 2.7998v279.2c0 1.7998 0.900391 2.7002 2.7002 2.7002h40.8994c1.90039 0 2.80078 -0.900391 2.80078 -2.7002v-81.2002c15.1992 7.7002 31.6992 11.5 49.7998 11.4004\n+c24 -0.0996094 44.2002 -6.2002 60.2998 -18zM634.9 169.9c5.5 -12.6006 6.59961 -25.6006 3.09961 -39.1006c-9.59961 -36.8994 -44.9004 -45.5 -45.5996 -45.7998c-10.5 -3.09961 -23.6006 -4.2998 -36.3008 -4.2998c-16.5996 0 -32.5996 2.7002 -48.1992 8.2002\n+c-9.7002 3.39941 -14.6006 10.2998 -14.6006 20.6992v34.4004c0 2.09961 2.2998 3.7002 4.40039 2.2998c13.7002 -10.2002 34.0996 -19.0996 58.3994 -19.0996c23.3008 0 32.8008 4.5 36.5 13.5996c3 7.90039 -0.599609 16.1006 -12.1992 21.2002l-53.6006 23.5\n+c-21.3994 9.40039 -33.7998 24 -37.2002 43.5996c-5.69922 33.7002 22.2002 53.3008 22.7002 53.7002c13.2002 9.60059 32 15.4004 58.5 15.4004c19 0 37.4004 -3.2998 55.1006 -9.90039c1.2998 -0.5 1.89941 -1.2998 1.89941 -2.59961v-44.7002\n+c0 -2.09961 -2.2998 -3.40039 -4 -2.40039c-39.7002 20.7002 -76.5996 12.3008 -84 6.80078c-6.59961 -4.90039 -6 -12.5 2.60059 -16.1006l57.5996 -25.2998c16.5 -7.09961 28.0996 -18.4004 34.9004 -34.0996zM376.2 298.2c60.3994 0 108.7 -48.2998 108.6 -108.601\n+c0 -60.1992 -48.2002 -108.699 -108.7 -108.699c-21.8994 0 -41.1992 6.39941 -57.6992 19.0996v-88.7998c0 -1.7998 -0.900391 -2.7002 -2.80078 -2.7002h-40.8994c-2.10059 0 -2.7002 1.90039 -2.7002 2.7002v183.5c0 83.3994 72.5 103.5 104.2 103.5zM376.2 127.3\n+c34.8994 0 62.2998 27.9004 62.2002 62.2002c0 34.5996 -27.7002 62.2002 -62.2002 62.2002c-34.6006 0 -62.2002 -27.7002 -62.2002 -62.2002c0 -17.2002 6 -31.7998 18.2002 -44c12.0996 -12.0996 26.7998 -18.2002 44 -18.2002zM228.3 375.5\n+c15.9004 0 28.9004 -12.7002 28.9004 -28.9004c0 -15.7998 -12.7002 -28.8994 -28.9004 -28.8994s-28.8994 13.2998 -28.8994 28.8994c0.0996094 16 13 28.9004 28.8994 28.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"php\" unicode=\"&#xf457;\" horiz-adv-x=\"640\" \n+d=\"M320 343.5c-171.3 0 -303.2 -72.2002 -303.2 -151.5s131.8 -151.5 303.2 -151.5c171.3 0 303.2 72.2002 303.2 151.5s-131.8 151.5 -303.2 151.5zM320 360.3c176.7 0 320 -75.2998 320 -168.3s-143.3 -168.3 -320 -168.3s-320 75.2998 -320 168.3s143.3 168.3 320 168.3z\n+M218.2 205.5c7.39941 38.4004 -18.4004 34.2998 -56.4004 34.2998l-13.7002 -70.5996c34.3008 0 62.2002 -4.2002 70.1006 36.2998zM97.4004 97.7002l32.6992 168.7h70.7002c21.2002 0 36.7998 -5.5 46.5 -16.7002c18.6006 -21.4004 11.7998 -64.1006 -14.2998 -88.1006\n+c-23.5996 -22.0996 -49.0996 -19.0996 -90.2002 -19.0996l-8.7002 -44.7998h-36.6992zM283.1 311.3h36.5l-8.69922 -44.7998c31.5 0 60.6992 2.2998 74.7998 -10.7002c14.7998 -13.5996 7.7002 -31 -8.2998 -113.1h-37c15.3994 79.3994 18.2998 86 12.6992 92\n+c-5.39941 5.7998 -17.6992 4.59961 -47.3994 4.59961l-18.7998 -96.5996h-36.5zM505 205.5c7.40039 38.4004 -18.2002 34.2998 -56.4004 34.2998l-13.6992 -70.5996c33.3994 0 62.0996 -4.7998 70.0996 36.2998zM384.2 97.7002l32.7998 168.7h70.7002\n+c21.2002 0 36.7998 -5.5 46.5 -16.7002c18.5996 -21.4004 11.7998 -64.1006 -14.2998 -88.1006c-23.1006 -21.5996 -47 -19.0996 -90.2002 -19.0996l-8.7002 -44.7998h-36.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"quinscape\" unicode=\"&#xf459;\" horiz-adv-x=\"512\" \n+d=\"M313.6 -26.5996c4.40039 -4.40039 8.10059 -9 13.3008 -12.5c-18.5029 -5.58008 -49.2031 -10.1074 -68.5283 -10.1074c-0.516602 0 -1.35547 0.00292969 -1.87207 0.00683594c-135 0 -244.5 109.5 -244.5 244.601c0 135.1 109.4 244.6 244.5 244.6\n+s244.6 -109.5 244.6 -244.6c0 -35.3008 -6.89941 -67.4004 -20.2998 -97.7002c-3 5.7002 -7.2002 10.2002 -11.2002 15.2998c11.2002 93.5 -62.0996 176.6 -157 176.6c-87.2705 0 -158.1 -70.8281 -158.1 -158.1s70.8291 -158.1 158.1 -158.1h1zM313.5 -26.5\n+l0.400391 -0.0996094zM391.9 142.4c54.7471 0 99.1992 -44.4326 99.1992 -99.1807v-0.0195312c0 -54.7588 -44.4414 -99.2002 -99.1992 -99.2002c-54.7588 0 -99.2002 44.4414 -99.2002 99.2002c0 54.7578 44.4414 99.2002 99.2002 99.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"readme\" unicode=\"&#xf4d5;\" horiz-adv-x=\"576\" \n+d=\"M528.3 401.5c26.4004 -0.200195 47.7002 -21.7002 47.7002 -48.0996v-245.7c0 -26.5 -21.5 -48 -48 -48h-89.7002c-102.1 0 -132.6 -24.4004 -147.3 -75c-0.799805 -2.7998 -5.2998 -2.7998 -6 0c-14.5996 50.5996 -45.0996 75 -147.3 75h-89.7002\n+c-26.5 0 -48 21.5 -48 48v245.8c0 26.5 21.5 48 48 48h139.7c48.0996 0 89.7998 -33.2998 100.399 -80.2998c10.5 47 52.3008 80.2998 100.4 80.2998h139.8zM242 136.1h0.0996094v22.9004c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.9004\n+c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.60059 3.5 3.5zM242 197h0.0996094v22.9004c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.60059 -3.5 -3.5v-22.9004c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM242 257.9h0.0996094v22.8994\n+c0 2 -1.59961 3.5 -3.5 3.5h-160.399c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.8994c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM501.3 136.2h0.100586v22.8994c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.8994\n+c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5zM501.3 197.1h0.100586v22.9004c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.9004c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.60059 3.5 3.5zM501.3 258h0.100586v22.7998\n+c0 2 -1.60059 3.5 -3.5 3.5h-160.4c-2 0 -3.5 -1.59961 -3.5 -3.5v-22.7998c0 -2 1.59961 -3.5 3.5 -3.5h160.3c2 0 3.5 1.59961 3.5 3.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"java\" unicode=\"&#xf4e4;\" horiz-adv-x=\"384\" \n+d=\"M277.74 135.1c-94.5 -24.8994 -277 -13.2998 -224.5 12.1006c44.5 21.3994 80.5996 19 80.5996 19s-93.0996 -22.1006 -33 -30.1006c25.4004 -3.39941 76 -2.59961 123.101 1.30078c38.5 3.19922 77.1992 10.1992 77.1992 10.1992s-13.5996 -5.7998 -23.3994 -12.5z\n+M192.34 167.2c-48.5 43.7998 -84.0996 82.2998 -60.2002 118.2c35.1006 52.5 132.2 78.0996 110.7 162.6c0 0 53.1602 -53.2002 -50.5 -135c-83.0996 -65.5996 -19 -103.1 0 -145.8zM306.94 343.4c-111.601 -64.7002 -91 -83.5 -64.1006 -121.301\n+c28.7998 -40.5 -33.8994 -72.8994 -33.8994 -72.8994s31.1992 25.5996 6.5 54c-83.7002 96.3994 91.5996 140.2 91.5 140.2zM300.84 72.9004c96.1006 49.8994 51.6006 97.8994 20.6006 91.3994c-3.10352 -0.581055 -8.03125 -1.92578 -11 -3\n+c1.71973 2.44629 5.39258 5.26855 8.19922 6.2998c61.3008 21.6006 108.5 -63.5996 -19.7998 -97.2998c0.649414 0.642578 1.5459 1.80762 2 2.60059zM348 10.5996c53 -23.8994 -115.16 -72 -319.4 -38.7998c-74.8994 12.1006 36.1006 54.5 56.4004 40.2002\n+c0 0 -6.5 0.400391 -17.7002 -2c-10.7998 -2.2998 -45.0996 -13.4004 -26.7998 -21.2998c50.7998 -22.1006 233.7 -16.7998 291.6 0.700195c30.4004 9.2998 15.9004 21.1992 15.9004 21.1992zM124.44 52c0 0 -19.6006 -11.4004 13.8994 -15.2002\n+c40.6006 -4.59961 61.2998 -4 106 4.5c7.46094 -4.46777 20.0938 -10.6504 28.2002 -13.7998c-100.2 -42.9004 -226.8 2.5 -148.1 24.5zM304.24 -45.2002c69.7998 13.2002 76.2002 29.7002 76.2002 29.7002c-3.30078 -43.5996 -144.9 -52.7998 -237.101 -46.9004\n+c-60.5996 3.90039 -72.3994 13.7002 -72.3994 13.6006c57.5 -9.5 154.6 -11.2002 233.3 3.59961zM260.64 95c5.08594 -4.74902 14.5391 -10.4834 21.1006 -12.7998c-121.3 -35.5 -256.3 -2.90039 -169.5 25.8994c0 0 -21.9004 -16.1992 11.5996 -19.6992\n+c43.2998 -4.5 77.6006 -4.80078 136.8 6.59961z\" \u002F>\n+    \u003Cglyph glyph-name=\"pied-piper-hat\" unicode=\"&#xf4e5;\" horiz-adv-x=\"640\" \n+d=\"M640 423.1c-80.7998 -53.5996 -89.4004 -92.5 -96.4004 -104.399c-6.69922 -12.2002 -11.6992 -60.2998 -23.2998 -83.6006c-11.7002 -23.5996 -54.2002 -42.1992 -66.0996 -50c-11.7002 -7.7998 -28.2998 -38.0996 -41.9004 -64.1992\n+c-108.1 4.39941 -167.399 -38.8008 -259.2 -93.6006c29.4004 9.7002 43.3008 16.7002 43.3008 16.7002c94.1992 36 139.3 68.2998 281.1 49.2002c1.09961 0 1.90039 -0.600586 2.7998 -0.799805c3.90039 -2.2002 5.2998 -6.90039 3.10059 -10.8008l-53.9004 -95.7998\n+c-2.5 -4.7002 -7.7998 -7.2002 -13.0996 -6.09961c-126.801 23.7998 -226.9 -17.2998 -318.9 -18.6006c-73.4004 -1.09961 -97.5 33.5 -97.5 35.1006c0 1.09961 0.599609 1.7002 1.7002 1.7002c0 0 38.2998 0 103.1 15.2998c73.6006 140.3 139.2 189.399 210.601 189.399\n+c0 0 71.6992 0 90.5996 -61.8994c22.7998 39.7002 28.2998 49.2002 28.2998 49.2002c5.2998 9.39941 35 77.1992 86.4004 141.399c51.5 64 90.3994 79.9004 119.3 91.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-by\" unicode=\"&#xf4e7;\" horiz-adv-x=\"496\" \n+d=\"M314.9 253.6v-101.399h-28.3008v-120.5h-77.0996v120.399h-28.2998v101.5c0 4.40039 1.59961 8.2002 4.59961 11.3008c3.10059 3.09961 6.90039 4.69922 11.2998 4.69922h101.9c4.09961 0 7.7998 -1.59961 11.0996 -4.69922\n+c3.10059 -3.2002 4.80078 -6.90039 4.80078 -11.3008zM213.4 317.3c0 23.2998 11.5 35 34.5 35s34.5 -11.7002 34.5 -35c0 -23 -11.5 -34.5 -34.5 -34.5s-34.5 11.5 -34.5 34.5zM247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248\n+c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-nc\" unicode=\"&#xf4e8;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c139.801 0 248.4 -107.9 248.4 -248c0 -147.2 -118.5 -248 -248.4 -248c-134.5 0 -247.6 110.8 -247.6 248c0 132.9 104.7 248 247.6 248zM55.7998 258.9c-7.39941 -20.4004 -11.0996 -42.7002 -11.0996 -66.9004c0 -110.9 92.0996 -202.4 203.7 -202.4\n+c122.399 0 177.199 101.801 178.5 104.101l-93.4004 41.5996c-7.7002 -37.0996 -41.2002 -53 -68.2002 -55.3994v-38.1006h-28.7998v38.2002c-27.5 0.299805 -52.5996 10.2002 -75.2998 29.7002l34.0996 34.5c31.7002 -29.4004 86.4004 -31.7998 86.4004 2.2002\n+c0 6.19922 -2.2002 11.1992 -6.60059 15.0996c-14.1992 6 -1.7998 0.0996094 -219.3 97.4004zM248.4 395.7c-38.4004 0 -112.4 -8.7002 -170.5 -93l94.7998 -42.5c10 31.2998 40.3994 42.8994 63.7998 44.2998v38.0996h28.7998v-38.0996\n+c22.7002 -1.2002 43.4004 -8.90039 62 -23l-32.2998 -33.2002c-42.7002 29.9004 -83.5 8 -70 -11.0996c53.4004 -24.1006 43.7998 -19.7998 93 -41.6006l127.1 -56.6992c4.10059 17.3994 6.2002 35.0996 6.2002 53.0996c0 57 -19.7998 105 -59.2998 143.9\n+c-39.2998 39.8994 -87.2002 59.7998 -143.6 59.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-nc-eu\" unicode=\"&#xf4e9;\" horiz-adv-x=\"496\" \n+d=\"M247.7 440c140.7 0 248.3 -109 248.3 -248c0 -147.1 -118.1 -248 -248.3 -248c-136 0 -247.7 111.7 -247.7 248c0 131.2 103.6 248 247.7 248zM248.3 -10.7002c122.601 0 177.3 102.2 178.8 104.3l-128.3 56.8008h-90.2998\n+c9.2002 -39.3008 39.0996 -50.2002 67.2998 -50.2002c19.1006 0 38.6006 6.2002 47.2998 10.7998l10 -46.0996c-14.1992 -7.90039 -38.1992 -15.8008 -64.7998 -15.8008c-57.3994 0 -113.2 34.3008 -124.6 101.301h-27v29.5h22.7998\n+c0 16.2998 0.400391 13.2998 0.400391 19.5h-23.3008v29.5h4.7002l-65.7002 29.0996c-7.19922 -20.7998 -10.8994 -42.7998 -10.8994 -66c0 -110.2 91.5996 -202.7 203.6 -202.7zM231.6 179.9l-0.5 0.399414l0.900391 -0.399414h-0.400391zM308.8 199.4l136.101 -60.5\n+c4.19922 16.5996 6.2998 34.1992 6.2998 52.8994c0 113.2 -90 203.4 -203 203.4c-13 0 -106.101 3.2002 -170.7 -93.6006l81.5996 -36.0996c4.10059 7.2002 8.60059 14 13.9004 20.0996c23.7002 26.5 56.9004 42.3008 95.9004 42.3008\n+c25.2998 0 47.2998 -5.80078 62.2998 -12.4004l-11.6006 -47.2998c-10.7998 4.59961 -27.7998 10 -46.0996 10c-20 0 -38.2002 -6.60059 -51.0996 -22.4004c-3.40039 -3.7998 -6.30078 -8.7998 -8.80078 -14.2998l28.6006 -12.5996h70.2998v-29.5h-3.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-nc-jp\" unicode=\"&#xf4ea;\" horiz-adv-x=\"496\" \n+d=\"M247.7 440c140.8 0 248.3 -109.2 248.3 -248c0 -147.2 -118.1 -248 -248.3 -248c-135.9 0 -247.7 111.6 -247.7 248c0 131.2 103.6 248 247.7 248zM248.3 -10.7002c118.101 0 173.7 96.1006 175.2 98.2998l-81 36.1006v-35.7002h-64.2002v-56h-61.7002v56h-63.7998\n+v38.7002h63.7998v18.7002l-5.69922 11.7998h-58.1006v38.5996h27.9004l-127 56.5c-6 -19.0996 -9 -39.2002 -9 -60.2998c0 -110.2 91.5996 -202.7 203.6 -202.7zM335.9 126.6l-54.7002 24.3008l-2.90039 -5.60059v-18.7002h57.6006zM342.4 178l101 -45.0996\n+c5.19922 18.3994 7.89941 38 7.89941 59c0 113.399 -90.2002 203.399 -203 203.399c-91.0996 0 -145.899 -54 -173.7 -98.0996l81.9004 -36.5l-27.2998 51h65.7998l39.5996 -85.7002l23 -10.2002l43.4004 96h65.7998l-63 -116h38.6006v-17.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-nd\" unicode=\"&#xf4eb;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM342.4 251v-42.5h-180.301v42.5h180.301zM342.4 171.2v-42.5h-180.301v42.5h180.301z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-pd\" unicode=\"&#xf4ec;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111.1 248 -248c0 -137 -111 -248 -248 -248s-248 111 -248 248c0 136.9 111 248 248 248zM248 -9.5c76.0996 0 142.4 42.4004 176.7 104.8c-1.40039 0.299805 12.5 -5.7998 -217.9 96.7998c0.200195 -32 16.1006 -71.8994 53.9004 -71.8994\n+c18.7002 0 30.7998 10.3994 36.2998 16.7002l36.0996 -43.9004c-25.8994 -22.7998 -56.5 -29.5 -79.3994 -29.5c-46.5 0 -120.4 27.9004 -120.4 126.9c0 11.3994 1.2002 22.3994 3.2998 32.8994l-78.7998 35.1006c-45.5996 -129.9 51 -267.9 190.2 -267.9zM442.2 140.5\n+c0.200195 -0.200195 0.299805 -0.299805 0.599609 -0.400391c4.40039 16.6006 6.7998 34 6.7998 52c0 111.101 -90.3994 201.5 -201.5 201.5c-70.3994 0 -132.399 -36.2998 -168.5 -91.1992l74.9004 -33.4004c19.7998 31.0996 53.2998 51.5996 100.7 51.5996\n+c20.0996 0 51 -4.19922 78.0996 -27.5l-40.3994 -41.5996c-19.8008 19.7002 -55.9004 23 -74.7002 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-pd-alt\" unicode=\"&#xf4ed;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 -10.7998c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3\n+c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8zM316.7 262c21.3994 0 70 -5.2002 70 -68.5996c0 -63.5 -48.6006 -68.6006 -70 -68.6006h-53.2002v137.2h53.2002zM317.5 153.5c24 0 34.5 15.2998 34.5 39.9004\n+c0 42 -31.2002 39.8994 -35 39.8994l-19.4004 -0.0996094v-79.7002h19.9004zM203.7 262c33.7002 0 50.5 -15.5 50.5 -46.5c0 -9 -3 -46.5 -57.1006 -46.5h-27v-44.2998h-34.5996v137.3h68.2002zM198.8 194.7c27.9004 0 30 41.5996 -0.899414 41.5996h-28.3008v-41.5996\n+h29.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-remix\" unicode=\"&#xf4ee;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM410.1 187.6l4.90039 -2.19922v-70c-7.2002 -3.60059 -63.4004 -27.5 -67.2998 -28.8008c-6.5 1.80078 -113.7 46.8008 -137.3 56.2002l-64.2002 -26.5996l-63.2998 27.5v63.7998\n+l59.2998 24.7998c-0.700195 0.700195 -0.400391 -5 -0.400391 70.4004l67.2998 29.7002l151.9 -62.9004v-61.5996zM339.7 106.1v43.8008h-0.400391v1.7998l-113.8 46.5v-45.2002l113.8 -46.9004v0.400391zM347.2 163.7l39.8994 16.3994l-36.7998 15.5l-39 -16.3994z\n+M399.5 125.6v43l-44.2998 -18.5996v-43.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-sa\" unicode=\"&#xf4ef;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM137.7 227c13 83.9004 80.5 95.7002 108.899 95.7002c99.8008 0 127.5 -82.5 127.5 -134.2c0 -63.5996 -41 -132.9 -128.899 -132.9c-38.9004 0 -99.1006 20 -109.4 97h62.5\n+c1.5 -30.0996 19.6006 -45.1992 54.5 -45.1992c23.2998 0 58 18.1992 58 82.7998c0 82.5 -49.0996 80.5996 -56.7002 80.5996c-33.0996 0 -51.6992 -14.5996 -55.7998 -43.7998h18.2002l-49.2002 -49.2002l-49 49.2002h19.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-sampling\" unicode=\"&#xf4f0;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM252 342.1c2.7998 0.300781 11.5 -1 11.5 -11.5l6.59961 -107.199l4.90039 59.2998c0 6 4.7002 10.5996 10.5996 10.5996c5.90039 0 10.6006 -4.7002 10.6006 -10.5996\n+c0 -2.5 -0.5 5.7002 5.7002 -81.5l5.7998 64.2002c0.299805 2.89941 2.89941 9.2998 10.2002 9.2998c3.7998 0 9.89941 -2.2998 10.5996 -8.90039l11.5 -96.5l5.2998 12.7998c1.7998 4.40039 5.2002 6.60059 10.2002 6.60059h58v-21.2998h-50.9004l-18.1992 -44.3008\n+c-3.90039 -9.89941 -19.5 -9.09961 -20.8008 3.10059l-4 31.8994l-7.5 -92.5996c-0.299805 -3 -3 -9.2998 -10.1992 -9.2998c-3 0 -9.80078 2.09961 -10.6006 9.2998c0 1.90039 0.600586 -5.7998 -6.2002 77.9004l-5.2998 -72.2002\n+c-1.09961 -4.7998 -4.7998 -9.2998 -10.5996 -9.2998c-2.90039 0 -9.7998 2 -10.6006 9.2998c0 1.89941 0.5 -6.7002 -5.7998 87.7002l-5.7998 -94.8008c0 -6.2998 -3.59961 -12.3994 -10.5996 -12.3994c-5.2002 0 -10.6006 4.09961 -10.6006 12l-5.7998 87.7002\n+c-5.7998 -92.5 -5.2998 -84 -5.2998 -85.9004c-1.10059 -4.7998 -4.7998 -9.2998 -10.6006 -9.2998c-3 0 -9.7998 2.09961 -10.5996 9.2998c0 0.700195 -0.400391 1.09961 -0.400391 2.59961l-6.19922 88.6006l-4.90039 -56.7002\n+c-0.700195 -6.5 -6.7002 -9.2998 -10.5996 -9.2998c-5.80078 0 -9.60059 4.09961 -10.6006 8.89941l-11.0996 76.4004c-2 -4 -3.5 -8.40039 -11.1006 -8.40039h-51.3994v21.3008h44.7998l13.7002 27.8994c4.39941 9.90039 18.2002 7.2002 19.8994 -2.7002l3.10059 -20.3994\n+l8.39941 97.8994c0 6 4.80078 10.6006 10.6006 10.6006c0.5 0 10.5996 0.200195 10.5996 -12.4004l4.90039 -69.0996l6.59961 92.5996c0 10.1006 9.5 10.6006 10.2002 10.6006c0.599609 0 10.5996 -0.700195 10.5996 -10.6006l5.30078 -80.5996l6.19922 97.8994\n+c0.100586 1.10059 -0.599609 10.3008 9.90039 11.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-sampling-plus\" unicode=\"&#xf4f1;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM355.4 189.7l58.3994 0.299805v-23.2002h-50.5l-18 -43.3994c-4.59961 -11 -20.8994 -8.7002 -22.2998 3.09961l-2.7002 22.2998l-6.7998 -83\n+c-1.09961 -14.0996 -22 -14.2002 -23.0996 0.100586l-4.90039 64.3994l-4.59961 -58.5996c-1.10059 -14.2998 -22.3008 -14.1006 -23.2002 0.200195l-4.5 71.7998l-4.90039 -80.5c-0.899414 -14.5 -22.2998 -14.5 -23.2002 -0.100586l-4.7998 73.3008l-4.59961 -70.4004\n+c-0.900391 -14.2998 -22.1006 -14.5 -23.2002 -0.0996094l-5.7002 78.2998l-3.7998 -43.6006c-1.2002 -13.6992 -21.0996 -14.1992 -23.0996 -0.699219l-10.7002 73.0996c-2 -3.90039 -6 -6.40039 -10.4004 -6.40039h-51.2998v23.2002h43.9004l13.1992 27.7002\n+c4.90039 10.2998 20.3008 8.09961 22 -3.2998l1.80078 -12.2002l7.69922 89.7998c1.2002 14.1006 22.1006 14.1006 23.2002 -0.200195l4.10059 -57l5.2998 80.2002c1 14.4004 22.2998 14.4004 23.2002 0l4.2998 -66.2998l5.09961 83.7002\n+c0.900391 14.3994 22.2998 14.5 23.2002 0l5.90039 -94.2998l3.5 44.8994c1.09961 14.2002 22.0996 14.2998 23.1992 0l5.2002 -68.7998l4.2998 51.4004c1.10059 13.7998 21.4004 14.2998 23.1006 0.399414l11 -92.7998l4 9.5c1.7002 4.40039 6 7.2002 10.7002 7.2002z\n+M277.4 184.5c4.09961 0 7.5 3.40039 7.5 7.5c0 4.2002 -3.40039 7.5 -7.5 7.5h-21.9004v21.9004c0 4.19922 -3.40039 7.5 -7.5 7.5s-7.5 -3.40039 -7.5 -7.5v-21.9004h-21.9004c-4.09961 0 -7.5 -3.40039 -7.5 -7.5c0 -4.2002 3.40039 -7.5 7.5 -7.5h21.9004v-21.9004\n+c0 -4.19922 3.40039 -7.5 7.5 -7.5c4.2002 0 7.5 3.40039 7.5 7.5v21.9004h21.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-share\" unicode=\"&#xf4f2;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM349.4 262.9c7.7998 0 13.6992 -6.10059 13.6992 -13.7002v-182.5c0 -7.7002 -6.09961 -13.7002 -13.6992 -13.7002h-135.101c-7.7002 0 -13.7002 6 -13.7002 13.7002v54h-54\n+c-7.7998 0 -13.6992 6 -13.6992 13.7002v182.5c0 8.19922 6.59961 12.6992 12.3994 13.6992h136.4c7.7002 0 13.7002 -6 13.7002 -13.6992v-54h54zM159.9 147.7h40.6992v101.399c0 7.40039 5.80078 12.6006 12 13.7002h55.8008v40.2998h-108.5v-155.399zM336.1 235.8h-108.5\n+v-155.399h108.5v155.399z\" \u002F>\n+    \u003Cglyph glyph-name=\"creative-commons-zero\" unicode=\"&#xf4f3;\" horiz-adv-x=\"496\" \n+d=\"M247.6 440c141.801 0 248.4 -110.1 248.4 -248c0 -147.1 -118.5 -248 -248.4 -248c-134 0 -247.6 109.5 -247.6 248c0 132.9 104.7 248 247.6 248zM248.4 395.3c-118.2 0 -203.7 -97.8994 -203.7 -203.3c0 -109.8 91.2002 -202.8 203.7 -202.8\n+c103.199 0 202.8 81.0996 202.8 202.8c0.0996094 113.8 -90.2002 203.3 -202.8 203.3zM248 334.8c81.9004 0 102.5 -77.2998 102.5 -142.8s-20.5996 -142.8 -102.5 -142.8s-102.5 77.2998 -102.5 142.8s20.5996 142.8 102.5 142.8zM248 280.9\n+c-42.0996 0 -44.0996 -60.1006 -44.0996 -88.9004c0 -9.2998 0.199219 -21.7002 1.89941 -34.4004l54.5 100.2c5.7002 9.7998 2.7998 16.7998 -3.09961 21.9004c-2.7998 0.700195 -5.90039 1.2002 -9.2002 1.2002zM288.8 234.7l-60.8994 -105.2\n+c-12.5 -18.7002 6.59961 -26.4004 20.0996 -26.4004c42.0996 0 44.0996 60 44.0996 88.9004c0 11.2998 -0.399414 27.2998 -3.2998 42.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"ebay\" unicode=\"&#xf4f4;\" horiz-adv-x=\"640\" \n+d=\"M606 258.5h34l-99.2002 -194.8h-35.8994l28.5 54.0996l-61.5 116.101c3.09961 -6.60059 4.7998 -14.5 4.7998 -23.8008v-65.5996c0 -9.2998 0.299805 -18.5996 1 -26.7998h-29.7998c-0.800781 6.89941 -1.10059 13.5996 -1.10059 20.2002\n+c-16.0996 -19.8008 -35.2998 -25.5 -61.8994 -25.5c-39.5 0 -60.6006 20.8994 -60.6006 45c0 3.19922 0.200195 6.19922 0.700195 9c-8.40039 -32.3008 -36.4004 -54.2002 -73.2998 -54.2002c-23.2998 0 -45.1006 8.2998 -58.7002 24.8994\n+c0 -6.59961 -0.400391 -13.1992 -1.09961 -19.5h-31.5c0.5 10.2002 1.09961 22.8008 1.09961 33.1006v169.5h32.0996v-80.6006c15.7002 18.7002 37.4004 24.2002 58.7002 24.2002c35.7002 0 75.4004 -24.0996 75.4004 -76.2002c0 -5.59961 -0.5 -11 -1.5 -16.1992\n+c7.09961 24.3994 34.2998 33.5 76.7002 34.3994c13.6992 0.299805 29 0.400391 41.6992 0.400391v3.39941c0 23.4004 -15 33 -41 33c-19.2998 0 -33.5996 -8 -35 -21.7998h-33.6992c3.59961 34.4004 39.6992 43.1006 71.5 43.1006c27.3994 0 51.7998 -7 63.2998 -26\n+l-10.9004 20.5996h37.5l54.9004 -109.9zM243.7 134.2c29.7998 0 50.2002 21.5 50.2002 53.7998c0 32.4004 -20.4004 53.7998 -50.2002 53.7998c-29.6006 0 -50.2002 -21.3994 -50.2002 -53.7998c0 -32.2998 20.5996 -53.7998 50.2002 -53.7998zM444.6 181.5v3.2998\n+c-11.7998 0 -26.2998 -0.0996094 -39.3994 -0.599609c-29.1006 -0.900391 -47.2002 -6.2002 -47.2002 -25.2998c0 -12.4004 9.90039 -25.8008 35 -25.8008c33.7002 0 51.5996 18.4004 51.5996 48.4004zM32.7002 179.9c3.5 -58.3008 79.2002 -57.4004 91.2002 -21.6006\n+h33.0996c-6.40039 -34.3994 -43 -46.0996 -74.4004 -46.0996c-57.1992 0 -82.5 31.5 -82.5 74c0 46.7998 26.2002 77.5996 83 77.5996c45.3008 0 78.4004 -23.7002 78.4004 -75.3994v-8.5h-128.8zM127.7 201.3c-2.2998 54.7002 -87.5 56.6006 -94.4004 0h94.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"keybase\" unicode=\"&#xf4f5;\" \n+d=\"M286.17 29c9.93652 0 18 -8.06445 18 -18s-8.06348 -18 -18 -18c-9.93555 0 -18 8.06445 -18 18s8.06445 18 18 18zM398.09 176.6c22.9102 -33.46 35.9102 -72.3398 35.9102 -110.92c0 -31.6797 -5 -60.6797 -14.5996 -86.2295\n+c-3.04004 -8.0498 -10.9502 -12.7197 -18.3701 -11.1504c-6.83984 1.24023 -11.1201 9.28027 -8.60059 15.7402c11.1904 28.71 14.8799 58.3398 14.8799 81.6396c-0.0517578 7.91797 -1.30566 20.6543 -2.7998 28.4307\n+c-0.649414 -1.06055 -1.12988 -2.2207 -1.84961 -3.2207c-17.29 -24.5293 -50.54 -33.8896 -84.7402 -23.8398c-78.8701 23.1699 -178.02 3.81055 -236.25 -38.5898l24.6602 74.1104l-46.8203 -59.8301c2.04297 -15.3486 9.10352 -39.1504 15.7598 -53.1299\n+c6.25 -13.1904 0.460938 -18.2402 -3.75 -20.1104c-4.76953 -2.12012 -13.8594 -2.7998 -19.6396 7.33008c-5.43652 9.81641 -11.96 26.6436 -14.5596 37.5596l-23.3203 -29.7998v33.6406c0 55.7695 0 125.109 62.6504 188.409c11.4258 11.5684 32.1631 27.4902 46.29 35.54\n+l-8.93066 0.540039c-27.8799 1.64062 -49.2402 24.8506 -47.6299 51.8506l2.36035 36.6797c0 -6.24023 0.139648 45.8799 50.75 45.8799c2.05957 0 -0.470703 0.120117 41.0596 -2.33008c2.31641 -0.15625 6.03027 -0.71582 8.29004 -1.25\n+c7.41992 11.3398 15.6504 22.8301 24.3398 34.8906l5.48047 7.55957l22.8994 -13.5195c-11.29 -24 -10 -33 -9.39941 -35c9.08008 0.229492 20 -1.6709 32.4102 -5.77051c29.6523 -9.84375 53.7188 -43.1914 53.7188 -74.4355\n+c0 -8.5127 -2.61621 -21.8154 -5.83887 -29.6943c6.18652 -2.13965 12.3135 -4.56348 18.3799 -7.27051c47.8896 -21.2598 77.7598 -59.0898 87.2598 -73.71zM142.37 319.42c1.55664 5.42773 4.69336 14.0156 7 19.1699l-29.1104 1.73047\n+c0.610352 -0.0507812 -12.2598 0.849609 -13.2598 -11.3203l-2.41016 -36.6602c-0.00585938 -0.143555 -0.0107422 -0.376953 -0.0107422 -0.520508c0 -6.50293 5.27344 -12 11.7705 -12.2695l22.3809 -1.33984c-0.380859 3.10645 -0.689453 8.16797 -0.689453 11.2969\n+c0 2.28809 0.165039 5.99414 0.369141 8.27344l-13.1299 0.779297l1.38965 21.79zM290.79 147.24c2.06152 1.58789 3.73438 4.9873 3.73438 7.58887c0 1.80273 -0.893555 4.42383 -1.99414 5.85059l-81.0898 96.3203c-1.71484 1.99023 -5.23828 3.60547 -7.86523 3.60547\n+c-1.99023 0 -4.87305 -1.00098 -6.43555 -2.23535c-2.05957 -1.58398 -3.73242 -4.97949 -3.73242 -7.57812c0 -1.7998 0.892578 -4.41699 1.99316 -5.8418c0.0898438 -0.140625 18.5996 -22.1406 18.5996 -22.1406l-16.9102 -13.29\n+c-1.59473 -1.22266 -2.88867 -3.8457 -2.88867 -5.85547c0 -1.37988 0.680664 -3.38867 1.51855 -4.48438c0.0800781 -0.109375 2.52246 -3.07324 3.7998 -4.5293c1.27832 -1.45703 3.8877 -2.63867 5.8252 -2.63867c1.4707 0 3.60547 0.734375 4.76562 1.63867\n+l17.0898 13.4492l14.1396 -16.7393l-34.5703 -27.1807c-1.58398 -1.22266 -2.86914 -3.83984 -2.86914 -5.84082c0 -1.38574 0.685547 -3.40039 1.5293 -4.49902l15.7803 -18.6396c1.33594 -1.55176 4.08203 -2.81055 6.12988 -2.81055\n+c1.54492 0 3.78516 0.775391 5 1.73047l34.4199 27l9.68066 -11.4902c1.7334 -1.98242 5.27832 -3.5918 7.91211 -3.5918c1.98438 0 4.86816 0.986328 6.4375 2.20215zM187.44 29c9.93555 0 18 -8.06445 18 -18s-8.06445 -18 -18 -18c-9.93652 0 -18 8.06445 -18 18\n+s8.06348 18 18 18z\" \u002F>\n+    \u003Cglyph glyph-name=\"mastodon\" unicode=\"&#xf4f6;\" \n+d=\"M433 268.89c0 0 0.799805 -71.6992 -9 -121.5c-6.23047 -31.5996 -55.1104 -66.1992 -111.23 -72.8994c-20.0996 -2.40039 -93.1191 -14.2002 -178.75 6.7002v-0.339844c0 -3.75977 0.40332 -9.83496 0.900391 -13.5605c6.62988 -49.5996 49.2197 -52.5996 89.6299 -54\n+c40.8105 -1.2998 77.1201 10.0996 77.1201 10.0996l1.7002 -36.8994s-28.5098 -15.2998 -79.3203 -18.1006c-28.0098 -1.59961 -62.8193 0.700195 -103.33 11.4004c-112.229 29.7002 -105.63 173.4 -105.63 289.1c0 97.2002 63.7197 125.7 63.7197 125.7\n+c61.9209 28.4004 227.96 28.7002 290.48 0c0 0 63.71 -28.5 63.71 -125.7zM357.88 143.69c0 122 5.29004 147.71 -18.4199 175.01c-25.71 28.7002 -79.7197 31 -103.83 -6.10059l-11.5996 -19.5l-11.6006 19.5c-24.0098 36.9004 -77.9297 35 -103.83 6.10059\n+c-23.6094 -27.1006 -18.4092 -52.9004 -18.4092 -175h46.7295v114.2c0 49.6992 64 51.5996 64 -6.90039v-62.5098h46.3301v62.5c0 58.5 64 56.5996 64 6.89941v-114.199h46.6299z\" \u002F>\n+    \u003Cglyph glyph-name=\"r-project\" unicode=\"&#xf4f7;\" horiz-adv-x=\"581\" \n+d=\"M581 221.4c0 -54.8008 -33.9004 -104.301 -88.4004 -139.7l67.4004 -113.7h-112l-40.0996 75.4004c-21.8008 -6.5 -45.1006 -11.2002 -69.4004 -13.9004v-61.5h-99.0996v61.9004c-136.101 16.0996 -239.4 95.6992 -239.4 191.5c0 107.5 130.1 194.6 290.5 194.6\n+s290.5 -87.0996 290.5 -194.6zM114.2 206.9c0 -52.8008 51.0996 -98.4004 125.2 -119.9v208.3h199s90.5996 -1.59961 90.5996 -87.8994c0 -86.3008 -86.5996 -92.7002 -86.5996 -92.7002s17.5996 -5.2998 27.7998 -10.5c1.7002 -0.799805 4 -2.10059 6.39941 -3.7002\n+c43.8008 21.4004 70.3008 56.2998 70.3008 106.4c0 92.2998 -90 133 -211.9 133s-220.8 -59.5 -220.8 -133zM339.3 168.6c49.6006 0 87.7998 -8.19922 87.7998 28.3008c0 34.0996 -30 27.2998 -87.7998 27.2998v-55.6006zM338.4 96.0996v-22.0996\n+c17.5996 0.0996094 34.5 1 50.5996 2.90039c-5.09961 7.5 -13.2002 19.1992 -24 19.1992h-26.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"researchgate\" unicode=\"&#xf4f8;\" \n+d=\"M0 416h448v-448h-448v448zM262.2 81.5996v7.30078c-10 0 -20 6.89941 -27.2002 14.6992c-12.2002 13.3008 -28.5996 34.7002 -42.2002 58.9004c22.5 5.2998 39.2002 26.4004 39.2002 47.5c0 31.2002 -24.2002 45.5996 -55.9004 45.5996\n+c-17.7998 0 -45.0996 -1.59961 -70.8994 -0.599609v-8.09961c15.5996 -2.90039 22 -1.30078 22 -23.9004v-109.4c0 -22.5996 -6.5 -21 -22 -23.8994v-8.10059c7.5 0.200195 20.5 0.800781 33.5996 0.800781c12.5 0 28.7002 -0.5 35.6006 -0.800781v8.10059\n+c-19.8008 2.7002 -25.8008 0.399414 -25.8008 23.8994v46.4004c6.7002 -0.599609 12.5 -0.599609 21.4004 -0.599609c16.9004 -30.3008 33 -53 42.2002 -63.6006c16.7998 -20.2002 43.3994 -17.2002 50 -14.2002zM285.1 216.6c38.7002 0 34 29.4004 34 49.9004h-30.3994\n+v-10.7002h17.8994c0 -15.8994 -7.39941 -26.7998 -21.5 -26.7998c-11.2998 0 -17.8994 9.90039 -17.8994 23.2998v26.7998c0 12.4004 11.7998 19.7002 19.7002 19.7002c14.1992 0 19.6992 -12.5 19.6992 -12.5l10.7002 7.2002s-5.2002 17.9004 -30.3994 17.9004\n+c-25.2002 0 -34 -18.2002 -34 -30.4004v-32.2002c0 -16.5 8.89941 -32.2002 32.1992 -32.2002zM168.6 171.9c-9.39941 0 -13.5996 0.299805 -20 0.799805v69.7002c6.40039 0.599609 15 0.599609 22.5 0.599609c23.3008 0 37.2002 -12.2002 37.2002 -34.5\n+c0 -21.9004 -15 -36.5996 -39.7002 -36.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"teamspeak\" unicode=\"&#xf4f9;\" horiz-adv-x=\"512\" \n+d=\"M244.2 101.21c-2.40039 -12.5 -10.6006 -20 -22.5 -24.2998c-9.2002 -3.2002 -50.1006 -1.60059 -61.7002 -1c-18 1.2998 -33.2002 8.5 -43.4004 24c-14.5 22.5 -19.5 47.7002 -14.5 73.8994c4.60059 24.5 24.6006 34.7002 46.3008 22.7002\n+c15.1992 -7.5 42.5 -27.3994 63.3994 -46.5996c20.4004 -18.7002 34.7998 -36.4004 32.4004 -48.7002zM449.2 80.4102c6.7002 -5.41016 11.2002 -22 11.5996 -32.1006c1 -50.3994 -23.8994 -68 -46.5996 -85.3994c-65.1006 -50 -295.101 -16.9004 -145.4 -6.40039\n+c127.4 9 164.101 96.1006 172.101 121.5c0.647461 1.99023 2.87109 3.60547 4.96387 3.60547c1.04102 0 2.53516 -0.540039 3.33594 -1.20508zM511.2 202.81c0 -17.1992 1.89941 -34.5996 -1 -51.6992c-4 -24.7002 -29.1006 -41.7002 -53.2002 -36.7002\n+c-7.2002 1.7002 -9.40039 7.2002 -9.40039 14.2002c0 28.0996 0.800781 56.3994 0 84.5996c-1.89941 75.79 -36.1992 132.79 -102.3 169.4c-111 60.3896 -253.2 -7 -277.8 -131.5c-6.09961 -30.4004 -1.7002 -48.3008 -3.7002 -125.801\n+c-0.299805 -7.19922 -4.2998 -11.1992 -12 -11.5c-30.7998 -1.39941 -51.7998 18.2002 -51.7998 49v20.9004l0.799805 26.4902c2.40039 15.5 10.7002 27 24.9004 34c3.5 1.7998 5.7002 3.5 6.39941 7.7998c6.10059 33.4102 19.5 64 39.3008 91.71\n+c2.2998 3.09961 4 5.2998 1 9.2998c-3.7002 5.40039 -1 10.2002 3 14.5c28.0996 31.7998 61.8994 55.1006 102 67.4004c96 29.4668 180.1 9.29688 252.3 -60.5098c6.7002 -6.40039 15.5 -12.9004 7 -24.4004c-1.2998 -1.7998 1.09961 -3.5 2.2002 -5\n+c17.2246 -23.209 35.3242 -65.1367 40.3994 -93.5898c0.900391 -3.7002 3 -5.10059 5.90039 -6.40039c17.3994 -8.7998 25.7002 -23.2998 26 -42.2002zM351.6 71.3096l-51.5996 7.7002c-22.7998 5.90039 -51 32.7002 22.2002 60.7998\n+c21.5996 8.5 85.7002 37.2002 87.7998 -8c0.900391 -32 -21.9004 -63.2998 -58.4004 -60.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"first-order-alt\" unicode=\"&#xf50a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -48.21c132.66 0 240.21 107.55 240.21 240.21s-107.55 240.21 -240.21 240.21s-240.21 -107.55 -240.21 -240.21s107.55 -240.21 240.21 -240.21z\n+M248 411.71c121.34 0 219.71 -98.3701 219.71 -219.71s-98.3701 -219.71 -219.71 -219.71s-219.71 98.3701 -219.71 219.71s98.3701 219.71 219.71 219.71zM248 -19.5098c116.81 0 211.51 94.7002 211.51 211.51s-94.7002 211.51 -211.51 211.51\n+s-211.51 -94.6895 -211.51 -211.51s94.7002 -211.51 211.51 -211.51zM434.23 143.47c-3.69141 -14.209 -12.709 -36.0225 -20.1309 -48.6895l-74.1299 35.8799l61.4805 -54.8203c-8.85352 -11.7021 -25.5195 -28.4082 -37.2002 -37.29l-54.7998 61.5703l35.8799 -74.2705\n+c-12.6445 -7.45215 -34.4307 -16.5156 -48.6299 -20.2295l-27.29 78.4697l4.79004 -82.9297c-8.61035 -1.17969 -17.4004 -1.7998 -26.3301 -1.7998s-17.7197 0.620117 -26.3301 1.7998l4.75977 82.46l-27.1494 -78.0303c-14.2021 3.70996 -35.998 12.7588 -48.6504 20.2002\n+l35.9297 74.3398l-54.8701 -61.6396c-11.6836 8.87988 -28.3584 25.582 -37.2197 37.2793l61.5898 54.9004l-74.2598 -35.9297c-7.42383 12.667 -16.4463 34.4795 -20.1396 48.6895l77.8398 27.1104l-82.2305 -4.75977c-1.15918 8.56934 -1.7793 17.3193 -1.7793 26.21\n+c0 9 0.629883 17.8398 1.81934 26.5098l82.3799 -4.76953l-77.9395 27.1592c3.71973 14.208 12.7822 36.0127 20.2295 48.6699l74.2207 -35.9199l-61.5205 54.8604c8.88086 11.6836 25.582 28.3584 37.2803 37.2197l54.7598 -61.5293l-35.8301 74.1699\n+c12.6562 7.41895 34.4521 16.4375 48.6504 20.1299l26.8701 -77.25l-4.70996 81.6094c8.60938 1.18066 17.3896 1.80078 26.3193 1.80078c8.93066 0 17.71 -0.620117 26.3203 -1.80078l-4.74023 -82.1592l27.0498 77.7598c17.2705 -4.5 33.6006 -11.3506 48.6309 -20.1699\n+l-35.8203 -74.1201l54.7197 61.4697c11.6924 -8.86133 28.376 -25.54 37.2402 -37.2295l-61.4502 -54.7705l74.1201 35.8604c7.43945 -12.6533 16.4893 -34.4492 20.2002 -48.6504l-77.8105 -27.0996l82.2402 4.75c1.19043 -8.66016 1.82031 -17.5 1.82031 -26.4902\n+c0 -8.87988 -0.610352 -17.6299 -1.78027 -26.1904l-82.1201 4.75z\" \u002F>\n+    \u003Cglyph glyph-name=\"fulcrum\" unicode=\"&#xf50b;\" horiz-adv-x=\"320\" \n+d=\"M95.75 283.86l-35.3799 -43.5508l-35.3701 43.5508l35.3799 43.5498zM144.23 448v-211.11l-41.0801 -44.8896l41.0801 -44.8896v-211.11l-20.5107 198.18l-51 57.8203l50.9707 57.8203zM223.9 283.86l35.3799 43.5498l35.3799 -43.5498l-35.3799 -43.5508zM175.42 236.86\n+v211.14l20.5801 -198.18l51 -57.8203l-51 -57.8203l-20.5801 -198.18v211.11l41.0801 44.8896z\" \u002F>\n+    \u003Cglyph glyph-name=\"galactic-republic\" unicode=\"&#xf50c;\" horiz-adv-x=\"496\" \n+d=\"M248 -56c-136.75 0 -248 111.25 -248 248s111.25 248 248 248s248 -111.25 248 -248s-111.25 -248 -248 -248zM248 423.47c-127.63 0 -231.47 -103.84 -231.47 -231.47s103.84 -231.47 231.47 -231.47s231.47 103.84 231.47 231.47s-103.84 231.47 -231.47 231.47z\n+M275.62 401.66c37.6602 -4.91016 72.21 -19.7402 100.96 -41.7998l-17.3896 -17.3604c-20.6758 15.3154 -58.1152 30.7891 -83.5703 34.54v24.6201zM220.25 401.59v-24.54c-30.9697 -4.60938 -59.4502 -16.8301 -83.5195 -34.6699h-0.0800781l-17.2803 17.3604\n+c28.7197 22.0498 63.2402 36.9102 100.88 41.8496zM232.5 351.42h31v-82.8604c10.0498 -2.0293 19.3701 -6.00977 27.6201 -11.5l58.6699 58.6709l21.9297 -21.9307l-58.6699 -58.6699c5.46973 -8.24023 9.48047 -17.5996 11.5 -27.6201h82.8701v-31h-82.8701\n+c-2.03027 -10.0195 -6.04004 -19.3096 -11.5 -27.54l58.6699 -58.6895l-21.9297 -21.9307l-58.6699 58.6904c-8.25 -5.49023 -17.5703 -9.52051 -27.6201 -11.5498v-82.9004h-31v82.9004c-8.25781 1.66895 -20.6533 6.80762 -27.6699 11.4697l-58.6201 -58.6201\n+l-21.9297 21.9297l58.6699 58.6904c-5.45996 8.23047 -9.4502 17.5205 -11.4697 27.54h-82.9004v31h82.9004c2.01953 10.0303 6 19.3896 11.4697 27.6201l-58.6699 58.6699l21.9297 21.9297l58.6201 -58.5898c8.25 5.48047 17.6299 9.38965 27.6699 11.4199v82.8701z\n+M415.74 320.7c22.0996 -28.7402 36.9795 -63.3398 41.9297 -101.03h-24.6201c-3.7832 25.4902 -19.3154 62.9746 -34.6699 83.6699zM80.1904 320.57l17.3896 -17.3906c-17.8301 -24.0693 -29.9902 -52.5596 -34.5898 -83.5195h-24.6504\n+c4.94043 37.6494 19.79 72.1895 41.8506 100.91zM38.3398 164.33l24.6504 0.00976562c4.58984 -30.9502 16.7002 -59.4502 34.5098 -83.5195l-17.3604 -17.3906c-22.0498 28.7207 -36.8799 63.2607 -41.7998 100.9zM433.04 164.33h24.6201\n+c-4.9502 -37.6699 -19.8506 -72.2197 -41.9297 -100.96l-17.3604 17.3604c17.8701 24.0996 30.0596 52.6094 34.6699 83.5996zM136.66 41.6201c24.0703 -17.8604 52.6094 -30.0205 83.5996 -34.6504v-24.6396c-37.6602 4.9502 -72.2295 19.8398 -100.96 41.9297z\n+M359.19 41.5703h0.0791016l17.3105 -17.3906c-28.75 -22.0596 -63.29 -36.9297 -100.96 -41.8496v24.5703c30.9902 4.58984 59.4795 16.8301 83.5703 34.6699z\" \u002F>\n+    \u003Cglyph glyph-name=\"galactic-senate\" unicode=\"&#xf50d;\" horiz-adv-x=\"512\" \n+d=\"M249.86 414.52h12.2793v-26.0693c13.5801 -20.6201 23.8604 -108.59 24.4902 -215.351c-11.7402 15.6201 -19.1299 33.3301 -19.1299 48.2402v16.8799c0.0302734 5.32031 -0.75 10.5303 -2.19043 15.6504c-0.649414 2.13965 -1.38965 4.07031 -2.61914 5.82031\n+c-1.23047 1.73926 -3.44043 3.79004 -6.68066 3.79004c-3.25 0 -5.4502 -2.04004 -6.67969 -3.79004c-1.23047 -1.74023 -1.96973 -3.68066 -2.62012 -5.82031c-1.44043 -5.12012 -2.21973 -10.3301 -2.19043 -15.6504v-16.8799\n+c0 -14.9102 -7.38965 -32.6201 -19.1299 -48.2402c0.610352 106.761 10.8906 194.73 24.4707 215.351v26.0693zM223.52 266.75c-1.59961 -22.4004 -2.75 -46.5195 -3.47949 -72.0703c-23.2998 -11.2793 -40.7705 -33.1602 -46.3203 -59.5098\n+c-7.71973 -2.25977 -22.71 -3.91992 -40.4893 -4.21973c-7.51074 3.66016 -16.5 5.85938 -26.1807 6.04004c1.90039 14.9102 5.87012 29.1699 11.6504 42.4199c15.4395 -8.10059 30.9297 -8.66016 35.4697 -0.959961c4.57031 7.74023 -3.58984 21.04 -18.3203 30.6602\n+c8.68066 11.7695 18.9805 22.2998 30.5605 31.0898c9.50977 -15.5898 23.3594 -24.4404 31.3594 -19.8203c8.05078 4.65039 7.19043 21.1699 -1.70996 37.29c8.76074 3.88965 17.9404 6.92969 27.46 9.08008zM288.48 266.75\n+c7.82227 -1.75977 20.1201 -5.82812 27.4492 -9.08008c-8.89941 -16.1299 -9.75977 -32.6396 -1.70996 -37.29c8 -4.62012 21.8506 4.23047 31.3604 19.8203c11.5801 -8.79004 21.8799 -19.3203 30.5596 -31.0898c-14.7197 -9.61035 -22.8896 -22.9199 -18.3193 -30.6602\n+c4.54004 -7.7002 20.0293 -7.14062 35.4697 0.959961c5.79004 -13.25 9.75 -27.5098 11.6504 -42.4199c-9.68066 -0.19043 -18.6709 -2.37988 -26.1807 -6.04004c-17.7793 0.299805 -32.7695 1.95996 -40.4902 4.21973c-5.5498 26.3496 -23.0293 48.2305 -46.3193 59.5098\n+c-0.719727 25.5508 -1.87988 49.6699 -3.46973 72.0703zM256 258.15c3.23047 0 5.86035 -8.81055 6.08984 -19.9307h0.0498047v-16.8799c0 -41.4199 49.0107 -95.04 93.4902 -95.04c52 0 122.76 1.4502 156.37 -29.1699v-2.50977\n+c-9.41992 -17.1104 -20.5801 -33.1699 -33.1797 -47.9697c-12.5303 21.0898 -51.5898 40.96 -108.021 41.3496c-45.6797 -1.01953 -79.0195 -20.3301 -90.7598 -40.8701c-0.00976562 -0.00976562 0.00976562 -0.0400391 0 -0.0498047\n+c-7.66992 -2.13965 -15.8496 -3.23047 -24.04 -3.20996c-8.19043 -0.0205078 -16.3701 1.07031 -24.04 3.20996c-0.00976562 0.00976562 0.00976562 0.0400391 0 0.0498047c-11.7295 20.54 -45.0801 39.8506 -90.7598 40.8701\n+c-56.4307 -0.400391 -95.5 -20.2598 -108.021 -41.3496c-12.5996 14.7998 -23.7598 30.8496 -33.1797 47.9697v2.50977c33.6201 30.6201 104.37 29.1699 156.37 29.1699c44.4795 0 93.4902 53.6201 93.4902 95.04v16.8799h0.0498047\n+c0.229492 11.1201 2.85938 19.9307 6.08984 19.9307zM256 161.56c-22.4199 0 -40.5996 -18.1797 -40.5996 -40.5996s18.1797 -40.6504 40.5996 -40.6504s40.5996 18.2305 40.5996 40.6504s-18.1797 40.5996 -40.5996 40.5996zM256 153.92\n+c18.1904 0 32.96 -14.7695 32.96 -32.96s-14.7695 -32.96 -32.96 -32.96s-32.96 14.7695 -32.96 32.96s14.7695 32.96 32.96 32.96zM256 147.78c-14.8096 0 -26.8203 -12.0107 -26.8203 -26.8203s12.0107 -26.8203 26.8203 -26.8203s26.8203 12.0107 26.8203 26.8203\n+s-12.0107 26.8203 -26.8203 26.8203zM141.2 81.1104c18.75 -0.419922 35.1895 -4.18066 48.6094 -9.66992c12.5508 -16.0303 29.1602 -30.04 49.5801 -33.0703c0.100586 -0.00976562 0.169922 -0.0302734 0.270508 -0.0498047\n+c0.0498047 -0.0107422 0.109375 -0.0400391 0.160156 -0.0507812c5.23926 -1.06934 10.6396 -1.59961 16.1895 -1.59961c5.56055 0 10.9502 0.530273 16.1904 1.59961c0.0498047 0.0107422 0.109375 0.0400391 0.160156 0.0507812\n+c0.0996094 0.00976562 0.179688 0.0292969 0.269531 0.0498047c20.4199 3.04004 37.04 17.04 49.5801 33.0703c13.4199 5.5 29.8496 9.25 48.6104 9.66992c10.1797 -0.0800781 21.5996 -0.360352 30.5 -1.66016c-0.430664 -4.41992 -1.51074 -18.6299 -7.11035 -29.7598\n+c-9.11035 2.55957 -18.3604 3.89941 -27.6201 3.89941c-41.2803 -0.939453 -71.4795 -34.3496 -78.2598 -74.4697l-0.110352 -4.7002c-10.3994 -1.91992 -21.1797 -2.93945 -32.21 -2.93945c-11.0195 0 -21.8096 1.0293 -32.21 2.93945l-0.109375 4.7002\n+c-6.78027 40.1201 -36.9805 73.5303 -78.2607 74.4697c-9.25977 0 -18.5098 -1.33984 -27.6201 -3.89941c-5.59961 11.1299 -6.67969 25.3398 -7.10938 29.7598c8.89941 1.2998 20.3096 1.58984 30.5 1.66016z\" \u002F>\n+    \u003Cglyph glyph-name=\"jedi-order\" unicode=\"&#xf50e;\" \n+d=\"M398.5 74.4004c0 0 26.2998 16.1992 49.9004 77.6992c0 0 -17 -183.3 -222 -185.699h-4.10059c-205.1 2.39941 -222 185.699 -222 185.699c23.2002 -61.5996 49.4004 -77.6992 49.4004 -77.6992c-95.9004 122.1 -17.2002 233.1 -17.2002 233.1\n+c-45.4004 -85.7002 41.4004 -170.5 41.4004 -170.5c-105 171.6 60.5 271.5 60.5 271.5c-96.9004 -72.5996 10.0996 -190.7 10.0996 -190.7c-85.7998 -158.399 68.5996 -230.1 68.5996 -230.1s0.400391 16.8994 2.2002 85.7002l-34.5 -36.2002l24.2002 47.3994\n+l-62.5996 9.10059l62.5996 9.09961l-20.2002 55.5l31.4004 -45.8994c2.2998 87.8994 7.89941 305.899 7.89941 306.899v2.40039v-1v1v-2.40039c0.100586 -1.7998 5.7002 -219.2 7.90039 -306.899l31.4004 45.8994l-20.2002 -55.5l62.5996 -9.09961l-62.5996 -9.10059\n+l24.2002 -47.3994s-30.2002 31.7002 -34.5 36.2002c1.7998 -68.8008 2.19922 -85.7002 2.19922 -85.7002s154.4 71.7002 68.6006 230.1c0 0 107 118 10.0996 190.7c0 0 165.5 -100 60.5 -271.5c0 0 86.7998 84.7002 41.4004 170.5c0 0 78.7002 -111 -17.2002 -233.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"mandalorian\" unicode=\"&#xf50f;\" \n+d=\"M232.27 -63.8896c-1 3.25977 -1.68945 15.8301 -1.38965 24.5801c0.549805 15.8896 1 24.7197 1.40039 28.7598c0.639648 6.2002 2.87012 20.7197 3.2793 21.3799c0.600586 1 0.400391 27.8701 -0.239258 33.1299c-0.310547 2.58008 -0.629883 11.9004 -0.69043 20.7305\n+c-0.129883 16.4697 -0.530273 20.1191 -2.72949 24.7598c-1.10059 2.31934 -1.23047 3.83984 -1 11.4297c0.0449219 1.07324 0.0820312 2.81641 0.0820312 3.89062c0 2.43945 -0.189453 6.39062 -0.422852 8.81934c-2 13 -3.45996 27.7002 -3.25 33.9004\n+s0.430664 7.14941 2.06055 9.66992c3.0498 4.70996 6.50977 14 8.62012 23.2695c2.25977 9.86035 3.87988 17.1807 4.58984 20.7402c0.921875 4.24121 2.90137 10.9834 4.41992 15.0498c2.26953 6.25 2.49023 15.3906 0.370117 15.3906\n+c-0.299805 0 -1.37988 -1.2207 -2.41016 -2.70996c-1.03027 -1.49023 -4.75977 -4.80078 -8.29004 -7.36035c-8.37012 -6.08008 -11.7002 -9.38965 -12.6602 -12.5801s-1 -7.22949 -0.160156 -7.75977c0.34082 -0.209961 1.29004 -2.40039 2.11035 -4.87988\n+c0.791992 -2.41602 1.43457 -6.43945 1.43457 -8.98145c0 -1.78223 -0.320312 -4.64062 -0.714844 -6.37891c-0.389648 -1.76953 -1 -5.46973 -1.45996 -8.22949c-0.459961 -2.76074 -1 -6.46094 -1.25 -8.2207c-0.149414 -1.27637 -0.84375 -3.18555 -1.5498 -4.25977\n+c-1 -1 -1.13965 -0.910156 -2.0498 0.530273c-0.619141 1.24316 -1.26465 3.37109 -1.44043 4.75c-0.25 1.73926 -1.62988 7.10938 -3.08008 11.9297c-3.2793 10.9004 -3.51953 16.1504 -1 21c0.683594 1.19141 1.43164 3.25684 1.66992 4.61035\n+c0 2.38965 -2.19922 5.31934 -7.40918 9.88965c-7 6.17969 -8.62988 7.91992 -10.2305 11.2998c-1.70996 3.60059 -3.05957 4.06055 -4.54004 1.54004c-1.78027 -3 -2.59961 -9.10938 -3 -22l-0.339844 -12.1895l2 -2.25c3.20996 -3.7002 12.0703 -16.4502 13.7803 -19.8301\n+c3.41016 -6.74023 4.33984 -11.6904 4.41016 -23.5605c0.0693359 -11.8701 0.949219 -22.75 2 -24.71c0.359375 -0.660156 0.509766 -1.34961 0.339844 -1.51953s0.410156 -2.08984 1.29004 -4.27051c0.871094 -2.41406 1.79395 -6.44629 2.05957 -9\n+c0.306641 -2.88867 1.07227 -7.53516 1.70996 -10.3701c2.23047 -9.55957 2.77051 -14.0801 2.39062 -20.1396c-0.200195 -3.26953 -0.530273 -11.0703 -0.730469 -17.3203c-1.30957 -41.7598 -1.84961 -58 -2 -61.21c-0.120117 -2 -0.389648 -11.5098 -0.599609 -21.0693\n+c-0.360352 -16.3008 -1.30078 -27.3701 -2.41992 -28.6504c-0.640625 -0.729492 -8.07031 4.91016 -12.5205 9.49023c-3.75 3.87012 -4 4.79004 -2.83008 9.9502c0.700195 3 2.25977 18.29 3.33008 32.6191c0.360352 4.78027 0.80957 10.5 1 12.7109\n+c0.830078 9.36914 1.66016 20.3496 2.61035 34.7793c0.55957 8.45996 1.33008 16.4404 1.71973 17.7305s0.889648 9.88965 1.12988 19.1094l0.429688 16.7705l-2.25977 4.2998c-1.71973 3.28027 -4.87012 6.94043 -13.2197 15.3398\n+c-6 6.07031 -11.8398 12.2998 -12.9102 13.8506l-1.9502 2.80957l0.75 10.9004c1.08984 15.71 1.10059 48.5693 0 59.0596l-0.889648 8.7002l-3.28027 4.51953c-5.85938 8.08008 -5.7998 7.75 -6.21973 33.2705c-0.100586 6.07031 -0.379883 11.5 -0.629883 12.0596\n+c-0.830078 1.87012 -3.0498 2.66016 -8.54004 3.05078c-8.86035 0.619141 -11 1.89941 -23.8506 14.5498c-6.14941 6 -12.3398 12 -13.75 13.1895c-2.80957 2.41992 -2.79004 2 -0.55957 9.62988l1.34961 4.65039l-1.68945 3c-0.630859 1.17676 -1.79102 3 -2.58984 4.07031\n+c-1.33008 1.50977 -5.5 10.8896 -6 13.4893c-0.0859375 0.307617 -0.155273 0.816406 -0.155273 1.13574c0 0.868164 0.458984 2.10645 1.02539 2.76465c2.22949 2.86035 3.39941 5.67969 4.44922 10.7305c2.33008 11.1895 7.74023 26.0898 10.6006 29.2197\n+c3.17969 3.46973 7.7002 1 9.41016 -5c1.33984 -4.79004 1.36914 -9.79004 0.0996094 -18.5498c-0.445312 -3.05176 -0.893555 -8.02832 -1 -11.1104c0 -4 0.19043 -4.69043 2.25 -7.38965c3.33008 -4.37012 7.72949 -7.41016 15.2002 -10.5205\n+c1.41992 -0.591797 3.53418 -1.86914 4.71973 -2.84961c11.1699 -10.7207 18.6201 -16.1807 22.9502 -16.8506c5.17969 -0.799805 8 -4.54004 10 -13.3896c1.30957 -5.65039 4 -11.1396 5.45996 -11.1396c0.994141 0.203125 2.48633 0.826172 3.33008 1.38965\n+c2 1.21973 2.25 1.73047 2.25 4.17969c-0.21875 4.96191 -1.11523 12.9541 -2 17.8398c-0.370117 1.66016 -0.780273 4.06055 -0.930664 5.35059c-0.149414 1.29004 -0.609375 3.84961 -1 5.68945c-2.5498 11.1602 -3.64941 15.46 -4.09961 16\n+c-1.5498 2 -4.08008 10.2002 -4.92969 15.9209c-1.64062 11.1094 -4 14.2295 -12.9102 17.3896c-4.0791 1.50293 -10.0547 5.0332 -13.3398 7.87988c-1.15039 1 -4 3.21973 -6.35059 5.05957c-2.34961 1.84082 -4.40918 3.53027 -4.59961 3.76074\n+c-0.701172 0.606445 -1.90625 1.50293 -2.69043 2c-6.23926 4.21973 -8.83984 7 -11.2598 12l-2.43945 5l-0.220703 13l-0.219727 13l6.91016 6.5498c3.9502 3.75 8.47949 7.34961 10.5898 8.42969c3.30957 1.69043 4.4502 1.89062 11.3701 2\n+c8.53027 0.19043 10.1201 0 11.6602 -1.55957c1.54004 -1.56055 1.35938 -6.40039 -0.290039 -8.5c-0.501953 -0.564453 -1.10156 -1.60352 -1.33984 -2.32031c0 -0.580078 -2.61035 -4.91016 -5.41992 -9c-0.879883 -1.80371 -1.94141 -4.85938 -2.37012 -6.82031\n+c20.4395 -13.3896 21.5498 -3.76953 14.0693 -29l11.3604 -2.51953c3.11035 8.66016 6.46973 17.2598 8.61035 26.2197c0.290039 7.62988 -12 4.19043 -15.4004 8.68066c-2.33008 5.92969 3.12988 14.1797 6.05957 19.1992c1.60059 2.33984 6.62012 4.7002 8.82031 4.15039\n+c0.879883 -0.219727 4.16016 0.349609 7.37012 1.28027c2.04395 0.641602 5.42676 1.39453 7.5498 1.67969c1.69336 0.183594 4.38184 0.760742 6 1.29004c3.65039 1.11035 4.5 1.16992 6.35059 0.400391c1.56738 -0.539062 4.1748 -1.14844 5.81934 -1.36035\n+c1.74902 -0.236328 4.43652 -1.0918 6 -1.91016c1.30762 -0.765625 3.54785 -1.73828 5 -2.16992c2.51074 -0.679688 3 -0.570312 7.05078 1.66992l4.34961 2.40039l10.7402 0.389648c10.4395 0.400391 10.8096 0.469727 15.2598 2.67969l4.58008 2.32031l2.45996 -1.42969\n+c1.75977 -1 3.13965 -2.73047 4.84961 -6c2.36035 -4.51074 2.37988 -4.58008 1.37012 -7.37012c-0.879883 -2.44043 -0.889648 -3.2998 -0.0996094 -6.39062c0.435547 -1.68164 1.37695 -4.3291 2.09961 -5.90918c0.535156 -1.04785 1.12207 -2.83984 1.31055 -4\n+c0.30957 -4.33008 0 -5.30078 -2.41016 -6.91992c-2.16992 -1.4707 -7 -7.91016 -7 -9.34082c-0.206055 -0.859375 -0.685547 -2.2041 -1.07031 -3c-5 -11.5098 -6.75977 -13.5596 -14.2598 -17c-9.2002 -4.19922 -12.2998 -5.18945 -16.21 -5.18945\n+c-3.10059 0 -4 -0.25 -4.54004 -1.25977c-0.972656 -1.19629 -2.80566 -2.8584 -4.08984 -3.70996c-1.53223 -1.02344 -3.49512 -3.16504 -4.37988 -4.78027c-0.411133 -1.04004 -1.52734 -2.34375 -2.49023 -2.91016\n+c-0.78125 -0.321289 -1.87891 -1.08789 -2.4502 -1.70996c-1.83496 -1.61133 -4.9707 -4.02148 -7 -5.37988c-3.33008 -2.33984 -6.87012 -5 -7.87012 -6c-0.560547 -0.604492 -1.62695 -1.36621 -2.37988 -1.7002c-0.697266 -0.314453 -1.65137 -1.05273 -2.12988 -1.65039\n+c-1.31055 -1.38965 -1.49023 -2.10938 -1.13965 -4.59961c0.255859 -1.65527 0.892578 -4.29004 1.41992 -5.87988c1.31934 -3.7998 1.30957 -7.86035 0 -10.5703c-1.31055 -2.70996 -0.890625 -6.64941 1.34961 -9.58984c2 -2.62988 2.16016 -4.55957 0.709961 -8.83984\n+c-0.587891 -2.27344 -1.06445 -6.02344 -1.06445 -8.37109c0 -0.148438 0.00195312 -0.390625 0.00488281 -0.539062c0 -4.87988 0.219727 -6.28027 1.45996 -8.37988c1.23926 -2.09961 1.81934 -2.48047 3.23926 -2.32031c2 0.230469 2.30078 1.0498 4.70996 12.1201\n+c2.18066 10 3.70996 11.9199 13.7607 17.0801c2.93945 1.50977 7.45996 4 10 5.44043c2.54004 1.43945 6.79004 3.68945 9.37012 4.90918c4.99414 2.18652 11.8125 7.41504 15.2197 11.6709c7.10938 8.78906 10 16.2197 12.8496 33.2998\n+c0.298828 2.31445 1.58008 5.77832 2.86035 7.72949c1.19434 1.86133 2.48828 5.13574 2.88965 7.31055c1 5.2998 2.85059 9.08008 5.58008 11.5098c4.7002 4.17969 6 1.08984 4.58984 -10.8701c-0.459961 -3.86035 -1.09961 -10.3301 -1.43945 -14.3799l-0.610352 -7.36035\n+l4.4502 -4.08984l4.4502 -4.08984l0.109375 -8.41992c0.0605469 -4.62988 0.470703 -9.53027 0.919922 -10.8896l0.820312 -2.4707l-6.42969 -6.2793c-8.54004 -8.33008 -12.8799 -13.9307 -16.7598 -21.6104c-1.77051 -3.49023 -3.74023 -7.11035 -4.38086 -8\n+c-2.17969 -3.11035 -6.45996 -13 -8.75977 -20.2598l-2.29004 -7.2207l-7 -6.48926c-3.83008 -3.57031 -8 -7.25 -9.16992 -8.16992c-3.0498 -2.32031 -4.25977 -5.15039 -4.25977 -10c-0.00683594 -0.166992 -0.0126953 -0.438477 -0.0126953 -0.605469\n+c0 -1.94336 0.717773 -4.9248 1.60254 -6.65527c0.660156 -1.29688 1.59668 -3.45996 2.08984 -4.83008c0.290039 -0.875 0.993164 -2.16992 1.57031 -2.88965c1.40039 -1.58984 1.91992 -16.1201 0.830078 -23.2197c-0.679688 -4.48047 -3.62988 -12 -4.7002 -12\n+c-1.79004 0 -4.05957 -9.27051 -5.07031 -20.7402c-0.179688 -2 -0.620117 -5.94043 -1 -8.7002s-1 -10 -1.34961 -16.0498c-0.770508 -12.2197 -0.19043 -18.7705 2 -23.1504c3.41016 -6.68945 0.519531 -12.6895 -11 -22.8398l-4 -3.49023l0.0703125 -5.18945\n+c0.0439453 -2.4834 0.554688 -6.45703 1.13965 -8.87012c4.61035 -16 4.73047 -16.9199 4.37988 -37.1299c-0.459961 -26.4004 -0.259766 -40.2705 0.629883 -44.1504c0.410156 -1.91406 0.893555 -5.05078 1.08008 -7c0.169922 -2 0.660156 -5.33008 1.08008 -7.35938\n+c0.469727 -2.26074 0.780273 -11 0.790039 -22.7402v-19.0605l-1.80957 -2.62988c-2.70996 -3.91016 -15.1104 -13.54 -15.4902 -12.29zM261.8 -18.7803c-0.179688 0.299805 -0.330078 6.87012 -0.330078 14.5898c0 14.0605 -0.889648 27.54 -2.25977 34.4502\n+c-0.400391 2 -0.80957 9.7002 -0.900391 17.0605c-0.149414 11.9297 -1.39941 24.3701 -2.63965 26.3799c-0.660156 1.06934 -3 17.6602 -3 21.2998c0 4.23047 1 6 5.28027 9.12988s4.85938 3.13965 5.47949 0.719727c0.280273 -1.09961 1.4502 -5.61914 2.60059 -10\n+c3.92969 -15.1191 4.13965 -16.2695 4.0498 -21.7393c-0.0996094 -5.78027 -0.129883 -6.12988 -1.74023 -17.7305c-1 -7.07031 -1.16992 -12.3896 -1 -28.4297c0.169922 -19.4004 -0.639648 -35.7305 -2 -41.2705c-0.709961 -2.7793 -2.7998 -5.47949 -3.42969 -4.42969z\n+M190.8 18.7998c-0.638672 2.95215 -1.41406 7.78613 -1.72949 10.79s-1.09082 7.83789 -1.73047 10.79c-0.433594 1.76758 -0.880859 4.6748 -1 6.49023c-0.30957 3.18945 -0.910156 7.45996 -1.33008 9.47949c-1 4.79004 -3.34961 19.3506 -3.41992 21.0703\n+c0 0.740234 -0.339844 4.0498 -0.700195 7.36035c-0.669922 6.20996 -0.839844 27.6699 -0.219727 28.29c1 1 6.62988 -2.76074 11.3301 -7.43066l5.28027 -5.25l-0.450195 -6.46973c-0.25 -3.55957 -0.599609 -10.2295 -0.780273 -14.8301\n+c-0.179688 -4.59961 -0.490234 -9.87012 -0.669922 -11.71s-0.610352 -9.36035 -0.939453 -16.7197c-0.790039 -17.4102 -1.94043 -31.29 -2.65039 -32c-0.101562 -0.107422 -0.302734 -0.193359 -0.450195 -0.193359c-0.208008 0 -0.454102 0.149414 -0.549805 0.333008\n+h0.00976562zM103.62 285.39c21.0703 -12.79 17.8398 -14.1494 28.4902 -17.6592c13 -4.29004 18.8701 -7.13086 23.1494 -16.8701c-43.6602 -36.1406 -69.0098 -57.8604 -76.71 -70.8604c-31 -52 -6 -101.59 62.75 -87.21c-14.1797 -29.2305 -78 -28.6299 -98.6797 4.90039\n+c-24.6797 39.9492 -22.0898 118.3 61 187.659v0.0400391zM314.41 106.39c56.6602 -6.87988 82.3203 37.7402 46.54 89.2305c0 0 -26.8701 29.3398 -64.2803 68c3 15.4502 9.49023 32.1201 30.5703 53.8203c89.2002 -63.5107 92 -141.61 92.46 -149.36\n+c4.2998 -70.6396 -78.7002 -91.1797 -105.29 -61.71v0.0195312z\" \u002F>\n+    \u003Cglyph glyph-name=\"old-republic\" unicode=\"&#xf510;\" horiz-adv-x=\"496\" \n+d=\"M235.76 437.77c7.5 0.310547 15 0.280273 22.5 0.0908203c3.61035 -0.140625 7.2002 -0.400391 10.79 -0.730469c4.91992 -0.269531 9.79004 -1.03027 14.6699 -1.62012c2.93066 -0.429688 5.83008 -0.979492 8.75 -1.45996\n+c7.90039 -1.33008 15.6699 -3.28027 23.3906 -5.39941c12.2393 -3.4707 24.1895 -7.91992 35.7598 -13.21c26.5596 -12.2402 50.9395 -29.21 71.6299 -49.8809c20.0303 -20.0898 36.7197 -43.5498 48.8896 -69.1895c1.12988 -2.58984 2.44043 -5.10059 3.4707 -7.74023\n+c2.80957 -6.42969 5.38965 -12.9697 7.58008 -19.6299c4.13965 -12.3301 7.33984 -24.9902 9.41992 -37.8301c0.569336 -3.13965 1.04004 -6.2998 1.39941 -9.46973c0.549805 -3.83008 0.94043 -7.69043 1.18066 -11.5605\n+c0.829102 -8.33984 0.839844 -16.7295 0.769531 -25.0996c-0.0703125 -4.96973 -0.259766 -9.94043 -0.75 -14.8896c-0.240234 -3.38086 -0.509766 -6.76074 -0.979492 -10.1201c-0.390625 -2.7207 -0.630859 -5.45996 -1.11035 -8.16992\n+c-0.900391 -5.15039 -1.7002 -10.3105 -2.87012 -15.4102c-4.09961 -18.5 -10.2998 -36.5498 -18.5098 -53.6299c-15.7705 -32.8301 -38.8301 -62.1699 -67.1201 -85.1201c-14.3926 -11.7676 -39.8887 -27.3848 -56.9102 -34.8604\n+c-6.20996 -2.67969 -12.46 -5.25 -18.8701 -7.41016c-3.50977 -1.16016 -7.00977 -2.37988 -10.5703 -3.38965c-6.61914 -1.87988 -13.2891 -3.63965 -20.0391 -5c-4.66016 -0.910156 -9.34082 -1.73047 -14.0303 -2.48047c-5.25 -0.65918 -10.5 -1.43945 -15.79 -1.73926\n+c-6.69043 -0.660156 -13.4102 -0.839844 -20.1201 -0.810547c-6.82031 -0.0292969 -13.6504 0.120117 -20.4502 0.790039c-3.29004 0.230469 -6.57031 0.5 -9.83008 0.950195c-2.71973 0.389648 -5.45996 0.629883 -8.16992 1.11035\n+c-4.12012 0.719727 -8.25 1.37012 -12.3496 2.21973c-4.25 0.939453 -8.49023 1.88965 -12.6904 3.01953c-8.62988 2.16992 -17.0801 5.01074 -25.4102 8.13086c-10.4893 4.11914 -20.79 8.75 -30.6396 14.25c-2.13965 1.14941 -4.28027 2.28906 -6.34961 3.56934\n+c-11.2207 6.58008 -21.8604 14.1006 -31.9199 22.3398c-34.6807 28.4102 -61.4102 66.4307 -76.3506 108.7c-3.08984 8.74023 -5.70996 17.6504 -7.7998 26.6797c-1.48047 6.16016 -2.52051 12.4209 -3.58008 18.6602\n+c-0.400391 2.35059 -0.610352 4.73047 -0.950195 7.08984c-0.599609 3.96094 -0.75 7.96094 -1.16992 11.9404c-0.799805 9.46973 -0.709961 18.9902 -0.509766 28.4902c0.139648 3.50977 0.339844 7.00977 0.700195 10.5098\n+c0.30957 3.16992 0.459961 6.37012 0.919922 9.52051c0.410156 2.80957 0.649414 5.64941 1.16016 8.43945c0.699219 3.94043 1.2998 7.90039 2.11914 11.8203c3.43066 16.5195 8.4707 32.7295 15.2607 48.1797c1.14941 2.91992 2.58984 5.71973 3.85938 8.58984\n+c8.05078 16.71 17.9004 32.5605 29.4902 47.0605c20 25.3799 45.1006 46.6797 73.2705 62.4697c7.5 4.15039 15.1592 8.0498 23.0693 11.3701c15.8203 6.87988 32.4102 11.9502 49.3105 15.3799c3.50977 0.669922 7.04004 1.24023 10.5596 1.84961\n+c2.62012 0.470703 5.28027 0.700195 7.91016 1.08008c3.53027 0.530273 7.09961 0.680664 10.6504 1.04004c2.45996 0.240234 4.90918 0.360352 7.35938 0.509766zM244.4 413.36c-9.23047 -0.100586 -18.4307 -0.990234 -27.5703 -2.23047\n+c-7.2998 -1.08008 -14.5303 -2.59961 -21.71 -4.2998c-13.9102 -3.5 -27.4805 -8.33984 -40.46 -14.4199c-10.46 -4.99023 -20.5898 -10.7002 -30.1797 -17.2197c-4.18066 -2.9209 -8.40039 -5.80078 -12.3408 -9.03027\n+c-5.08008 -3.96973 -9.97949 -8.16992 -14.6797 -12.5898c-2.50977 -2.24023 -4.80957 -4.7002 -7.21973 -7.06055c-28.2207 -28.79 -48.4404 -65.3896 -57.5 -104.689c-2.04004 -8.44043 -3.54004 -17.0205 -4.44043 -25.6504\n+c-1.09961 -8.88965 -1.43945 -17.8496 -1.41016 -26.7998c0.110352 -7.13965 0.379883 -14.2803 1.2207 -21.3701c0.620117 -7.12012 1.87012 -14.1602 3.19922 -21.1797c1.07031 -4.65039 2.03027 -9.32031 3.33008 -13.9102\n+c6.29004 -23.3799 16.5 -45.7002 30.0703 -65.75c8.63965 -12.9805 18.7803 -24.9297 29.9805 -35.7705c16.2793 -15.8193 35.0498 -29.04 55.3398 -39.2197c7.2793 -3.51953 14.6602 -6.87012 22.2695 -9.62988c5.04004 -1.75977 10.0605 -3.57031 15.2197 -4.98047\n+c11.2607 -3.22949 22.7705 -5.59961 34.3906 -7.05957c2.91016 -0.290039 5.80957 -0.610352 8.71973 -0.900391c13.8203 -1.08008 27.7402 -1 41.54 0.430664c4.4502 0.599609 8.91992 0.989258 13.3496 1.7793c3.63086 0.670898 7.28027 1.25 10.8701 2.10059\n+c4.12988 0.979492 8.28027 1.91016 12.3604 3.07031c26.5 7.33984 51.5801 19.71 73.5801 36.1992c15.7803 11.8203 29.96 25.7607 42.1201 41.2803c3.25977 4.02051 6.16992 8.30957 9.12988 12.5498c3.38965 5.06055 6.58008 10.25 9.59961 15.54\n+c2.40039 4.44043 4.74023 8.91016 6.9502 13.4502c5.69043 12.0498 10.2803 24.6201 13.75 37.4902c2.58984 10.0098 4.75 20.1602 5.90039 30.4502c1.76953 13.4697 1.93945 27.0996 1.29004 40.6494c-0.290039 3.89062 -0.669922 7.77051 -1 11.6602\n+c-2.23047 19.0801 -6.79004 37.9102 -13.8203 55.7998c-5.9502 15.1299 -13.5303 29.6299 -22.6104 43.1299c-12.6895 18.8008 -28.2393 35.6807 -45.9697 49.8301c-25.0498 20 -54.4697 34.5498 -85.6504 42.0801c-7.7793 1.92969 -15.6895 3.33984 -23.6299 4.4502\n+c-3.90918 0.589844 -7.84961 0.820312 -11.7695 1.24023c-7.38965 0.569336 -14.8105 0.719727 -22.2197 0.580078zM139.26 364.47c13.2998 8.89062 28.0801 15.3799 43.2998 20.1807c-3.16992 -1.77051 -6.43945 -3.38086 -9.5293 -5.29004\n+c-11.21 -6.68066 -21.5205 -14.9004 -30.3799 -24.4902c-6.80078 -7.42969 -12.7607 -15.7305 -17.0107 -24.8896c-3.29004 -6.86035 -5.63965 -14.1904 -6.85938 -21.7109c-0.930664 -4.84961 -1.2998 -9.80957 -1.16992 -14.75\n+c0.129883 -13.6592 4.43945 -27.0791 11.29 -38.8193c5.91992 -10.2197 13.6299 -19.3301 22.3594 -27.2598c4.85059 -4.36035 10.2402 -8.09082 14.9502 -12.6006c2.25977 -2.18945 4.49023 -4.41992 6.42969 -6.91016c2.62012 -3.30957 4.89062 -6.98926 5.99023 -11.0996\n+c0.900391 -3.02051 0.660156 -6.2002 0.69043 -9.31055c0.0195312 -4.09961 -0.0400391 -8.19922 0.0292969 -12.2998c0.140625 -3.54004 -0.0195312 -7.08984 0.110352 -10.6299c0.0800781 -2.37988 0.0205078 -4.75977 0.0498047 -7.13965\n+c0.160156 -5.77051 0.0605469 -11.5303 0.150391 -17.2998c0.109375 -2.91016 0.0195312 -5.82031 0.129883 -8.74023c0.0302734 -1.62988 0.129883 -3.28027 -0.0302734 -4.91016c-0.910156 -0.120117 -1.81934 -0.179688 -2.72949 -0.160156\n+c-10.9902 0 -21.8799 2.62988 -31.9502 6.92969c-6 2.7002 -11.8105 5.89062 -17.0898 9.83008c-5.75 4.19043 -11.0898 8.95996 -15.79 14.3105c-6.53027 7.24023 -11.9805 15.3896 -16.6201 23.9502c-1.07031 2.0293 -2.24023 4.01953 -3.17969 6.12012\n+c-1.16016 2.63965 -2.62012 5.13965 -3.66992 7.81934c-4.05078 9.68066 -6.57031 19.9404 -8.08008 30.3105c-0.490234 4.43945 -1.09082 8.87988 -1.2002 13.3496c-0.700195 15.7305 0.839844 31.5498 4.66992 46.8203c2.12012 8.14941 4.76953 16.1797 8.30957 23.8301\n+c6.32031 14.1992 15.3398 27.1797 26.3008 38.1895c6.2793 6.2002 13.1299 11.8398 20.5293 16.6699zM314.63 384.59c2.74023 -0.740234 5.41016 -1.74023 8.08984 -2.67969c6.36035 -2.33008 12.6807 -4.83984 18.71 -7.95996\n+c13.1104 -6.44043 25.3105 -14.8105 35.8203 -24.9697c10.2002 -9.9502 18.7402 -21.6006 25.1396 -34.3408c1.28027 -2.75 2.64062 -5.45996 3.81055 -8.25977c6.30957 -15.0996 10 -31.2598 11.2295 -47.5703c0.410156 -4.54004 0.44043 -9.08984 0.450195 -13.6396\n+c0.0703125 -11.6396 -1.49023 -23.25 -4.2998 -34.5303c-1.96973 -7.26953 -4.34961 -14.4893 -7.86035 -21.1797c-3.17969 -6.63965 -6.67969 -13.1602 -10.8398 -19.2402c-6.93945 -10.4697 -15.5996 -19.8701 -25.8203 -27.2197\n+c-10.4795 -7.63965 -22.6396 -13.0195 -35.3994 -15.3799c-3.50977 -0.69043 -7.08008 -1.08008 -10.6602 -1.20996c-1.84961 -0.0605469 -3.71973 -0.160156 -5.55957 0.0996094c-0.280273 2.15039 0 4.31055 -0.0107422 6.45996\n+c-0.0292969 3.73047 0.140625 7.4502 0.100586 11.1699c0.189453 7.02051 0.0195312 14.0508 0.209961 21.0703c0.0292969 2.37988 -0.0302734 4.75977 0.0292969 7.13965c0.170898 5.07031 -0.0390625 10.1406 0.140625 15.21\n+c0.0996094 2.99023 -0.240234 6.04004 0.509766 8.95996c0.660156 2.5 1.78027 4.86035 3.08984 7.08008c4.45996 7.31055 11.0605 12.96 17.6807 18.2607c5.37988 4.17969 10.4697 8.76953 15.0195 13.8398c7.67969 8.37012 14.1699 17.8799 18.7803 28.2695\n+c2.5 5.93066 4.51953 12.1006 5.5498 18.46c0.860352 4.37012 1.05957 8.83008 1.00977 13.2705c-0.0195312 7.84961 -1.39941 15.6494 -3.63965 23.1699c-1.75 5.72949 -4.27051 11.1797 -7.08984 16.4502c-3.87012 6.92969 -8.65039 13.3096 -13.96 19.1992\n+c-9.94043 10.8506 -21.75 19.9404 -34.6006 27.1006c-1.84961 1.01953 -3.83984 1.82031 -5.62988 2.96973zM213.83 326.14c0.979492 1.18066 1.99023 2.33008 3.12012 3.37988c-0.610352 -0.929688 -1.27051 -1.80957 -1.9502 -2.67969\n+c-3.09961 -3.87988 -5.54004 -8.30957 -7.03027 -13.0596c-0.870117 -3.27051 -1.67969 -6.60059 -1.72949 -10c-0.0703125 -2.52051 -0.0800781 -5.07031 0.319336 -7.57031c1.13086 -7.62988 4.33008 -14.8496 8.77051 -21.1201c2 -2.7002 4.25 -5.26953 6.91992 -7.33008\n+c1.62012 -1.26953 3.53027 -2.08984 5.33984 -3.0498c3.11035 -1.67969 6.32031 -3.22949 9.07031 -5.47949c2.66992 -2.09082 4.5498 -5.33008 4.39941 -8.79004c-0.00976562 -73.6709 0 -147.341 -0.00976562 -221.021c0 -1.34961 -0.0800781 -2.7002 0.0400391 -4.04004\n+c0.129883 -1.47949 0.820312 -2.83008 1.46973 -4.14941c0.860352 -1.66016 1.78027 -3.34082 3.18066 -4.62012c0.849609 -0.770508 1.96973 -1.40039 3.14941 -1.24023c1.5 0.200195 2.66016 1.34961 3.4502 2.57031c0.959961 1.50977 1.67969 3.15918 2.28027 4.84961\n+c0.759766 2.12988 0.439453 4.41992 0.540039 6.62988c0.139648 4.03027 -0.0205078 8.06055 0.139648 12.0898c0.0302734 5.89062 0.0302734 11.7705 0.0605469 17.6602c0.139648 3.62012 0.0292969 7.24023 0.109375 10.8604\n+c0.150391 4.0293 -0.0195312 8.05957 0.140625 12.0898c0.0292969 5.99023 0.0292969 11.9795 0.0693359 17.9697c0.140625 3.62012 0.0205078 7.24023 0.110352 10.8604c0.139648 3.92969 -0.0205078 7.85938 0.139648 11.7803\n+c0.0302734 5.98926 0.0302734 11.9795 0.0605469 17.9697c0.160156 3.93945 -0.00976562 7.87988 0.189453 11.8193c0.290039 -1.43945 0.129883 -2.91992 0.220703 -4.37988c0.189453 -3.60938 0.419922 -7.22949 0.759766 -10.8398\n+c0.320312 -3.43945 0.439453 -6.88965 0.859375 -10.3193c0.370117 -3.10059 0.510742 -6.2207 0.950195 -9.31055c0.570312 -4.08984 0.870117 -8.20996 1.54004 -12.29c1.45996 -9.04004 2.83008 -18.1104 5.08984 -26.9902c1.13086 -4.81934 2.40039 -9.60938 4 -14.2998\n+c2.54004 -7.89941 5.7207 -15.6699 10.3105 -22.6201c1.72949 -2.63965 3.87012 -4.97949 6.09961 -7.20996c0.270508 -0.25 0.549805 -0.509766 0.879883 -0.709961c0.600586 -0.25 1.31055 0.0703125 1.7002 0.570312c0.709961 0.879883 1.16992 1.93945 1.7002 2.92969\n+c4.0498 7.7998 8.17969 15.5605 12.3398 23.3105c0.700195 1.30957 1.44043 2.62012 2.56055 3.60938c1.75 1.57031 3.83984 2.69043 5.97949 3.62988c2.87988 1.2207 5.90039 2.19043 9.03027 2.41992c6.58008 0.620117 13.1094 -0.75 19.5596 -1.84961\n+c3.69043 -0.580078 7.40039 -1.16992 11.1299 -1.41016c3.74023 -0.0996094 7.48047 -0.0498047 11.21 0.280273c8.55078 0.919922 16.9902 2.95996 24.9404 6.25c5.2998 2.24023 10.46 4.83008 15.3096 7.92969c11.46 7.20996 21.46 16.5703 30.04 27.0107\n+c1.16992 1.41992 2.25 2.89941 3.45996 4.2793c-1.19922 -3.24023 -2.66992 -6.37012 -4.15918 -9.47949c-1.25 -2.90039 -2.84082 -5.61035 -4.27051 -8.41992c-5.16016 -9.62988 -11.0195 -18.9102 -17.75 -27.5205\n+c-4.03027 -5.20996 -8.53027 -10.0498 -13.3301 -14.5703c-6.63965 -6.0498 -14.0703 -11.3691 -22.4297 -14.7598c-8.20996 -3.37012 -17.3105 -4.62988 -26.0898 -3.29004c-3.56055 0.580078 -7.01074 1.69043 -10.4102 2.87988\n+c-2.79004 0.970703 -5.39062 2.38086 -8.03027 3.69043c-3.42969 1.70996 -6.63965 3.80957 -9.70996 6.08008c2.70996 -3.06055 5.69043 -5.86035 8.7002 -8.61035c4.26953 -3.75977 8.74023 -7.30957 13.6299 -10.2295c3.98047 -2.4502 8.29004 -4.40039 12.8398 -5.51074\n+c1.45996 -0.369141 2.95996 -0.459961 4.4502 -0.599609c-1.25 -1.09961 -2.62988 -2.04004 -3.99023 -2.97949c-9.60938 -6.54004 -20.0098 -11.8604 -30.6895 -16.4307c-20.8604 -8.7002 -43.1699 -13.9697 -65.7402 -15.3398\n+c-4.66016 -0.240234 -9.32031 -0.360352 -13.9805 -0.360352c-4.97949 0.110352 -9.96973 0.130859 -14.9199 0.650391c-11.2002 0.759766 -22.29 2.73047 -33.1699 5.42969c-10.3496 2.70996 -20.5498 6.12012 -30.2998 10.5508\n+c-8.70996 3.85938 -17.1201 8.41992 -24.9902 13.79c-1.83008 1.30957 -3.74023 2.5293 -5.37012 4.0791c6.60059 1.19043 13.0303 3.39062 18.9902 6.48047c5.74023 2.86035 10.9902 6.66016 15.6299 11.0703c2.24023 2.18945 4.29004 4.58984 6.19043 7.08984\n+c-3.43066 -2.12988 -6.93066 -4.15039 -10.6201 -5.78027c-4.41016 -2.16016 -9.07031 -3.76953 -13.8105 -5.01953c-5.72949 -1.52051 -11.7393 -1.73047 -17.6094 -1.14062c-8.12988 0.950195 -15.8604 4.27051 -22.5098 8.98047\n+c-4.32031 2.93945 -8.2207 6.42969 -11.96 10.0596c-9.93066 10.1602 -18.2002 21.8105 -25.6602 33.8604c-3.94043 6.26953 -7.53027 12.75 -11.1201 19.2197c-1.0498 2.04004 -2.15039 4.0498 -3.17969 6.10059c2.84961 -2.9209 5.56934 -5.9707 8.42969 -8.88086\n+c8.99023 -8.96973 18.5596 -17.4395 29.1602 -24.4795c7.5498 -4.90039 15.6699 -9.23047 24.5596 -11.0303c3.11035 -0.729492 6.32031 -0.469727 9.46973 -0.80957c2.77051 -0.280273 5.56055 -0.200195 8.34082 -0.299805\n+c5.0498 -0.0605469 10.1094 -0.0400391 15.1592 0.15918c3.65039 0.160156 7.27051 0.660156 10.8906 1.09082c2.06934 0.25 4.10938 0.709961 6.13965 1.19922c3.87988 0.950195 8.11035 0.959961 11.8301 -0.609375c4.75977 -1.85059 8.44043 -5.64062 11.3799 -9.70996\n+c2.16016 -3.02051 4.06055 -6.2207 5.66016 -9.58008c1.16016 -2.43066 2.45996 -4.79004 3.5498 -7.26074c1 -2.23926 2.15039 -4.41992 3.41992 -6.51953c0.669922 -1.01953 1.40039 -2.15039 2.62012 -2.5498c1.06055 0.75 1.70996 1.91016 2.28027 3.03027\n+c2.09961 4.15918 3.41992 8.64941 4.88965 13.0498c2.02051 6.58984 3.78027 13.2695 5.19043 20.0195c2.20996 9.25 3.25 18.7197 4.54004 28.1299c0.55957 3.98047 0.830078 7.99023 1.30957 11.9707c0.870117 10.6396 1.90039 21.2695 2.24023 31.9395\n+c0.0800781 1.86035 0.240234 3.70996 0.25 5.57031c0.00976562 4.34961 0.25 8.68945 0.219727 13.0303c-0.00976562 2.37988 -0.00976562 4.75977 0 7.12988c0.0498047 5.06934 -0.200195 10.1396 -0.219727 15.21c-0.200195 6.60938 -0.709961 13.2002 -1.29004 19.7793\n+c-0.730469 5.88086 -1.5498 11.7803 -3.12012 17.5107c-2.0498 7.75 -5.58984 15.0293 -9.7998 21.8193c-3.16016 5.07031 -6.79004 9.87988 -11.0898 14.0303c-3.87988 3.86035 -8.58008 7.08008 -13.9404 8.4502c-1.5 0.410156 -3.05957 0.450195 -4.58984 0.639648\n+c0.0703125 2.99023 0.700195 5.93066 1.25977 8.85059c1.58984 7.70996 3.7998 15.2998 6.76074 22.5996c1.51953 4.03027 3.40918 7.90039 5.38965 11.7197c3.4502 6.56055 7.62012 12.79 12.46 18.46zM245.1 324.44\n+c0.350586 0.0595703 0.709961 0.119141 1.07031 0.189453c0.19043 -1.79004 0.0898438 -3.58008 0.0996094 -5.37012v-38.1299c-0.00976562 -1.74023 0.130859 -3.49023 -0.149414 -5.21973c-0.360352 0.0302734 -0.709961 0.0498047 -1.06055 0.0498047\n+c-0.949219 3.75 -1.71973 7.5498 -2.61914 11.3096c-0.380859 1.53027 -0.580078 3.09082 -1.07031 4.59082c-1.7002 0.239258 -3.42969 0.169922 -5.15039 0.199219c-5.05957 0.0107422 -10.1299 0 -15.1895 0.0107422\n+c-1.66016 0.00976562 -3.32031 -0.0898438 -4.98047 0.0292969c-0.0302734 0.390625 -0.259766 0.910156 0.160156 1.18066c1.28027 0.649414 2.71973 0.879883 4.05957 1.34961c3.43066 1.13965 6.88086 2.16016 10.3105 3.31055\n+c1.38965 0.479492 2.90039 0.719727 4.16016 1.54004c0.0400391 0.55957 0.0195312 1.12988 -0.0498047 1.67969c-1.23047 0.549805 -2.53027 0.870117 -3.81055 1.28027c-3.12988 1.0293 -6.29004 1.95996 -9.41016 3.01953c-1.79004 0.620117 -3.66992 1 -5.41016 1.79004\n+c-0.0292969 0.370117 -0.0693359 0.730469 -0.109375 1.08984c5.08984 0.19043 10.2002 -0.0595703 15.2998 0.120117c3.36035 0.129883 6.73047 -0.0800781 10.0898 0.0703125c0.120117 0.389648 0.259766 0.769531 0.370117 1.16016\n+c1.08008 4.93945 2.33008 9.8291 3.38965 14.75zM251.07 324.64c0.359375 -0.0498047 0.719727 -0.120117 1.08008 -0.199219c0.979492 -3.85059 1.72949 -7.76074 2.70996 -11.6104c0.359375 -1.41992 0.55957 -2.87988 1.0293 -4.27051\n+c2.53027 -0.179688 5.07031 0.0107422 7.61035 -0.0498047c5.16016 -0.120117 10.3301 -0.120117 15.4902 -0.0693359c0.759766 0.00976562 1.51953 -0.0302734 2.2793 -0.0800781c-0.0390625 -0.360352 -0.0693359 -0.720703 -0.0996094 -1.08008\n+c-1.82031 -0.830078 -3.78027 -1.25 -5.66992 -1.89062c-3.73047 -1.22949 -7.48047 -2.38965 -11.2197 -3.56934c-0.570312 -0.169922 -1.12012 -0.419922 -1.66992 -0.640625c-0.150391 -0.549805 -0.180664 -1.12012 -0.120117 -1.68945\n+c0.870117 -0.480469 1.81934 -0.810547 2.76953 -1.08984c4.87988 -1.52051 9.73047 -3.14062 14.6299 -4.60059c0.379883 -0.129883 0.780273 -0.269531 1.12988 -0.490234c0.400391 -0.269531 0.230469 -0.790039 0.150391 -1.17969\n+c-1.66016 -0.129883 -3.30957 -0.0302734 -4.96973 -0.0400391c-5.16992 -0.00976562 -10.3301 0.00976562 -15.5 -0.00976562c-1.61035 -0.0302734 -3.21973 0.0195312 -4.82031 -0.209961c-0.519531 -1.66992 -0.719727 -3.41992 -1.16992 -5.11035\n+c-0.94043 -3.56934 -1.51953 -7.24023 -2.54004 -10.7793c-0.360352 -0.0107422 -0.709961 -0.0205078 -1.05957 -0.0605469c-0.290039 1.73047 -0.150391 3.48047 -0.150391 5.21973v38.1299c0.0205078 1.78027 -0.0800781 3.58008 0.110352 5.37012zM65.0498 279.67\n+c1.12012 2.15039 2.08008 4.40039 3.37012 6.45996c-1.82031 -7.55957 -2.91016 -15.2695 -3.62012 -23c-0.799805 -7.70996 -0.849609 -15.4902 -0.540039 -23.2295c1.0498 -19.9404 5.54004 -39.8301 14.2305 -57.8809c2.99023 -5.98926 6.34961 -11.8291 10.5 -17.1094\n+c6.12012 -7.46973 12.5293 -14.7598 19.8398 -21.0898c4.7998 -4.10059 9.99023 -7.78027 15.54 -10.8008c3.26953 -1.64941 6.50977 -3.38965 9.93945 -4.67969c5.01074 -2.03027 10.1904 -3.60938 15.4209 -4.93945c3.8291 -0.959961 7.7793 -1.41016 11.5195 -2.70996\n+c5 -1.57031 9.46973 -4.61035 13.0303 -8.43066c4.92969 -5.22949 8.08984 -11.8701 10.2002 -18.6699c0.989258 -2.89941 1.58984 -5.91016 2.16992 -8.91992c0.149414 -0.75 0.219727 -1.51953 0.15918 -2.29004c-6.5 -2.78027 -13.2598 -5.05957 -20.2598 -6.17969\n+c-4.10938 -0.780273 -8.29004 -0.990234 -12.46 -1.08008c-10.25 -0.240234 -20.4697 1.75977 -30.1201 5.12012c-3.73926 1.41992 -7.48926 2.84961 -11.0293 4.71973c-8.06055 3.83984 -15.6406 8.7002 -22.46 14.46c-2.9209 2.5498 -5.83008 5.12988 -8.40039 8.03027\n+c-9.16016 9.83008 -16.2998 21.4102 -21.79 33.6494c-2.38965 5.55078 -4.61035 11.1807 -6.37012 16.96c-1.16992 3.94043 -2.36035 7.89062 -3.25977 11.9102c-0.75 2.94043 -1.21973 5.9502 -1.87012 8.91992c-0.459961 2.14062 -0.69043 4.32031 -1.03027 6.48047\n+c-0.849609 5.42969 -1.2793 10.9297 -1.33008 16.4297c0.110352 6.18066 0.25 12.3701 1.07031 18.5c0.400391 2.86035 0.669922 5.74023 1.15039 8.60059c0.979492 5.69922 2.13965 11.3691 3.70996 16.9297c3.08984 11.6504 7.47949 22.9502 12.6895 33.8398z\n+M428.78 286.11c1.09961 -1.66016 1.91016 -3.48047 2.7793 -5.26074c2.10059 -4.44922 4.24023 -8.89941 6.02051 -13.4893c7.61035 -18.7607 12.2998 -38.79 13.04 -59.0508c0.0195312 -1.75977 0.0703125 -3.51953 0.110352 -5.29004\n+c0.129883 -9.56934 -1.27051 -19.0898 -3.18066 -28.4492c-0.729492 -3.58984 -1.54004 -7.16992 -2.58008 -10.6904c-4.04004 -14.7197 -10 -29 -18.4102 -41.7803c-8.20996 -12.5693 -19.0098 -23.5498 -31.8398 -31.4092\n+c-5.72949 -3.59082 -11.79 -6.64062 -18.0498 -9.19043c-5.78027 -2.19043 -11.71 -4.03027 -17.7998 -5.11035c-6.40039 -1.0498 -12.9102 -1.51953 -19.4004 -1.22949c-7.91992 0.479492 -15.7793 2.07031 -23.21 4.84961\n+c-1.93945 0.799805 -3.93945 1.45996 -5.83984 2.33008c-0.209961 1.50977 0.25 2.99023 0.530273 4.45996c1.16016 5.74023 3.03027 11.3604 5.7002 16.5801c2.36914 4.50977 5.51953 8.65039 9.45996 11.9004c2.42969 2.0498 5.23926 3.60938 8.15918 4.83008\n+c3.58008 1.5 7.4707 1.96973 11.2402 2.83008c7.23047 1.70996 14.3701 3.92969 21.1504 7c10.3496 4.64941 19.71 11.3799 27.6494 19.46c1.59082 1.60938 3.23047 3.17969 4.74023 4.86914c3.37012 3.76074 6.70996 7.57031 9.85059 11.5303\n+c7.47949 10.0703 12.8193 21.5898 16.71 33.4805c1.58008 5.2998 3.20996 10.5996 4.20996 16.0498c0.629883 2.87012 1.04004 5.78027 1.51953 8.67969c0.870117 6.08984 1.58984 12.2207 1.67969 18.3799c0.120117 6.65039 0.140625 13.3203 -0.529297 19.9404\n+c-0.730469 7.99023 -1.87012 15.96 -3.70996 23.7803z\" \u002F>\n+    \u003Cglyph glyph-name=\"phoenix-squadron\" unicode=\"&#xf511;\" horiz-adv-x=\"512\" \n+d=\"M96 384.62c46.4902 36.1299 105.55 56.0703 164.51 54.5703c29.5801 0.379883 59.1104 -5.37012 86.9102 -15.3301c-24.1299 4.62988 -49 6.33984 -73.3799 2.44922c-42.8701 -5.30957 -83.04 -27.1494 -111.83 -59.1797c5.66992 1 10.7803 3.66992 16 5.86035\n+c18.1396 7.87012 37.4902 13.2598 57.2305 14.8301c19.7393 2.12988 39.6396 0.429688 59.2793 -1.91992c-14.4199 -2.79004 -29.1201 -4.57031 -43 -9.59082c-34.4297 -11.0693 -65.2695 -33.1592 -86.2998 -62.6299c-13.7998 -19.71 -23.6299 -42.8594 -24.6699 -67.1299\n+c-0.349609 -16.4902 5.21973 -34.8096 19.8301 -44c7.01465 -4.23926 19.3594 -7.67969 27.5547 -7.67969c2.77539 0 7.23926 0.420898 9.96484 0.939453c15.4502 2.45996 30.0703 8.64062 43.6006 16.3301c11.5195 6.82031 22.6699 14.5508 32 24.25\n+c3.79004 3.2207 2.53027 8.4502 2.62012 12.79c-2.12012 0.339844 -4.37988 1.11035 -6.30078 -0.299805c-9.47656 -5.19531 -25.5244 -12.0811 -35.8193 -15.3701c-20 -6.16992 -42.1602 -8.45996 -62.1006 -0.779297c12.79 -1.73047 26.0605 -0.310547 37.7402 5.43945\n+c20.2305 9.71973 36.8105 25.2002 54.4404 38.7705c23.0107 17.7168 62.8379 42.4951 88.8994 55.3096c25.71 12 52.9404 22.7803 81.5703 24.1201c-15.6299 -13.7197 -32.1504 -26.5205 -46.7803 -41.3799c-14.5098 -14 -27.46 -29.5 -40.1094 -45.1807\n+c-3.52051 -4.59961 -8.9502 -6.93945 -13.5801 -10.1592c-18.8516 -12.6768 -42.0986 -39.6016 -51.8906 -60.1006c-9.33008 -19.6797 -14.5 -41.8496 -11.7695 -63.6494c1.93945 -13.6904 8.70996 -27.5908 20.8994 -34.9102c12.9004 -8 29.0508 -8.07031 43.4805 -5.10059\n+c32.7998 7.4502 61.4297 28.8906 81 55.8408c20.4404 27.5195 30.5195 62.1992 29.1602 96.3496c-0.520508 7.5 -1.57031 15 -1.66016 22.4902c8 -19.4805 14.8203 -39.71 16.6504 -60.8301c2 -14.2803 0.75 -28.7598 -1.62012 -42.9004\n+c-1.91016 -11 -5.66992 -21.5098 -7.78027 -32.4297c17.209 19.293 34.833 55.6123 39.3398 81.0703c1.24121 7.8584 2.24902 20.6953 2.24902 28.6514c0 21.957 -7.37305 55.999 -16.459 75.9883c20.7803 -32 32.3398 -69.5801 35.71 -107.48\n+c0.490234 -12.7295 0.490234 -25.5098 0 -38.2295c-2.37305 -28.7334 -15.6289 -72.5254 -29.5898 -97.75c-26.1201 -47.3398 -68 -85.6299 -117.19 -108c-78.29 -36.2305 -174.68 -31.3203 -248 14.6797c-32.9014 20.1289 -73.8711 64.3281 -91.4492 98.6602\n+c-12.291 24.2021 -23.6523 65.8301 -25.3604 92.9199v31.3398c3.92969 69.7402 40.8701 135.92 96 178.36zM318 304.29c4.54688 0.770508 11.7148 2.77734 16 4.47949c5 1.77051 9.24023 5.94043 10.3203 11.2207c-8.95996 -4.99023 -17.9805 -9.91992 -26.3203 -15.7002z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"sith\" unicode=\"&#xf512;\" \n+d=\"M0 416l118.75 -69.71l-11.5195 58.9004l91.0596 -69.8701c8.5 1.50977 17.0996 2.29004 25.71 2.29004s17.21 -0.770508 25.71 -2.29004l91.0596 69.8701l-11.5195 -58.9004l118.75 69.71l-69.71 -118.75l58.8604 11.5195l-69.8408 -91.0293\n+c3.04004 -17.0098 3.03027 -34.4404 0 -51.4502l69.8408 -91.0303l-58.8604 11.5205l69.71 -118.78l-118.75 69.71l11.5195 -58.8604l-91.0293 69.8408c-17.0098 -3.04004 -34.46 -3.04004 -51.4805 0l-91.0293 -69.8408l11.5195 58.8604l-118.75 -69.71l69.71 118.78\n+l-58.8604 -11.5205l69.8408 91.0303c-1.25488 7.04492 -2.27246 18.5693 -2.27246 25.7246c0 7.15625 1.01758 18.6807 2.27246 25.7256l-69.8408 91.0293l58.8604 -11.5195zM224 316.22c-31.7998 0 -63.6104 -12.0898 -87.8496 -36.3398\n+c-48.4902 -48.4902 -48.5 -127.2 0 -175.7c48.5 -48.4893 127.21 -48.5195 175.699 -0.0292969c48.4902 48.4893 48.5 127.199 0 175.699c-24.25 24.25 -56.0498 36.3701 -87.8496 36.3701zM224 279.56c22.4199 0 44.8301 -8.51953 61.9199 -25.6094\n+c34.1904 -34.1904 34.1797 -89.6904 0 -123.87c-34.1895 -34.1797 -89.6504 -34.1904 -123.84 0c-34.1904 34.1895 -34.1797 89.6895 0 123.87c17.0898 17.0898 39.5 25.6094 61.9199 25.6094z\" \u002F>\n+    \u003Cglyph glyph-name=\"trade-federation\" unicode=\"&#xf513;\" horiz-adv-x=\"496\" \n+d=\"M248 439.2c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -43.5996c129.7 0 234.8 105.1 234.8 234.8s-105.1 234.8 -234.8 234.8s-234.8 -105.1 -234.8 -234.8s105.1 -234.8 234.8 -234.8zM403.1 284.9v-0.100586h-145.699\n+v-34.7998h83.2998v-47h-83.2998v-195.8h-48.8008v196.8h-117.699l-36.7002 46h155.1v81.7002h193.8v-46.7998zM329.8 239.8h-82.8994v56.2002h145v24.4004h-171.801v-80.6006h-143.899l20.0996 -23.8994h123.8v-197.4h26.8008v197.4h82.8994v23.8994zM168.5 308.8l22 9.2998\n+l-15.7998 -18.0996l15.7002 -18.0996l-22.2002 9.5l-12.2998 -20.5l2.09961 24l-23.2998 5.39941l23.5 5.40039l-2.10059 23.7998zM138.9 328.5l9.5 -10.2002l-13.8008 5.2998l-6.7998 -12.1992l0.799805 14.6992l-13.6992 2.7002l14.2998 3.7998l-1.7002 13.9004\n+l8 -12.4004l12.7002 5.90039zM304.3 183.3l-9.2998 -10.7998l9.40039 -10.7002l-13.1006 5.5l-7.2998 -12.2002l1.2002 14.2002l-13.9004 3.2002l13.9004 3.2002l-1.2998 14.2002l7.2998 -12.2002zM411.2 260.5l-15 -17.5996l15.0996 -17l-21.2002 8.7998l-11.5 -19.6006\n+l1.80078 22.9004l-22.2002 4.90039l22.2998 5.39941l-2.2002 22.7002l12 -19.5996zM248 418.1c125.3 0 226.9 -101.6 226.9 -226.899s-101.601 -226.9 -226.9 -226.9s-226.9 101.601 -226.9 226.9s101.601 226.899 226.9 226.899zM342.6 252h-83.1992v30.9004h145.699\n+v50.6992h-197.8v-81.5996h-157.399l40 -49.9004h116.699v-196.8h52.7002v195.7h83.2998v51zM248 404.8c-94.5996 0 -174.9 -61.5996 -202.9 -146.8h157.4v81.5996h199.1c-38.7998 40.2002 -93.2998 65.2002 -153.6 65.2002zM248 -22.2998c117.9 0 213.5 95.5996 213.4 213.5\n+c0 51.8994 -18.5 99.5 -49.3008 136.5v-50.7998h-145.6v-19.2002h83.2002v-62.7002h-83.2998v-195.8h-64.6006v196.8h-114.7l-43.7998 56.2998c-5.7998 -19.2998 -8.89941 -39.8994 -8.89941 -61.0996c0 -117.9 95.6992 -213.5 213.6 -213.5zM178.8 173l22.7002 9.2998\n+l-16.9004 -17.0996l15.8008 -18.7998l-21.5 10.7998l-13 -20.9004l3.69922 23.7998l-23.7998 5.90039l23.7002 3.90039l-1.7002 24.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"wolf-pack-battalion\" unicode=\"&#xf514;\" horiz-adv-x=\"512\" \n+d=\"M267.73 -23.5303l-11.4404 -21.1396l-11.4404 21.1104l-10.5596 -15.8408l-5.28027 12.3203l-5.2793 -7v-29.8301c-21.0605 7.91992 -21.1104 66.8604 -25.5107 97.21c-4.62012 31.8799 0.879883 92.8105 -81.3701 149.11c8.88086 23.5996 12 49.4297 2.64062 80.0498\n+c-27.8701 -3.33008 -53.9404 -10.5801 -63.3398 -54.0996l30.3496 -8.36035c-11.2002 -23.04 -17.0195 -46.7598 -13.2002 -72.1396l27.2705 7l6.16016 -33.4307l18.4697 7l8.7998 -33.4297l19.3496 7l-26.4297 -21.0596l-8.7998 28.1494l-24.6299 -5.28027l-7 35.6309\n+l-26.3906 -14.5205c-0.25 20.0205 -6.95996 58.0605 8.80078 84.4502l-26.3906 -5.28027c-3.99023 22.0703 2.37988 39.21 7.91992 56.7402l-22.4297 -9.67969c0.44043 25.0693 29.9404 56.79 61.5898 58.5098c20.2197 1.08984 56.7305 25.1602 54.1006 51.8994\n+c-1.95996 19.8701 -17.4502 42.6201 -43.1104 49.7002c43.9795 -36.5098 9.71973 -67.2998 -5.28027 -73.46c-4.39941 11.4404 -17.54 69.0801 0 130.2c40.4697 -22.8701 89.7002 -65.0996 93.21 -147.86l58.0605 -38.71l3.51953 -93.25l-107.33 59.8203l-7 -7\n+l17.5801 -3.50977l44 -38.71l15.8398 5.2793l28.1504 -49.2598l3.51953 -119.64l-21.1094 -15.8398l32.5498 -15.8398l32.5498 15.8398l-21.1094 15.8398l3.51953 119.64l28.0996 49.25l15.8408 -5.28027l44 38.7109l17.5898 3.51953l-7 7l-107.3 -59.7695l3.51953 93.25\n+l58 38.71c3.5498 82.6895 52.8096 124.92 93.2002 147.79c17.54 -61.1201 4.39941 -118.761 0 -130.2c-14.96 6.16016 -49.2803 36.9502 -5.28027 73.46c-25.6602 -7.08008 -41.1104 -29.8301 -43.1104 -49.7002c-2.63965 -26.7305 33.8809 -50.8096 54.1006 -51.9004\n+c31.6396 -1.70996 61.1396 -33.4297 61.5801 -58.5l-22.4307 9.68066c5.54004 -17.5303 11.9209 -34.6699 7.9209 -56.7402l-26.3906 5.28027c15.7998 -26.3906 9.0498 -64.4502 8.7998 -84.4502l-26.3896 14.5195l-7 -35.6299l-24.5898 5.24023l-8.7998 -28.1504\n+l-26.3906 21.1104l19.3506 -7l8.7998 33.3896l18.4697 -7l6.16016 33.4307l27.2803 -7.05078c3.7998 25.3809 -2.0498 49.1406 -13.2002 72.1406l30.3496 8.35938c-9.42969 43.5205 -35.4297 50.7305 -63.3398 54.1006\n+c-9.35938 -30.6201 -6.24023 -56.4404 2.64062 -80.0498c-82.25 -56.3008 -76.75 -117.221 -81.3701 -149.11c-4.40039 -30.3496 -4.4502 -89.29 -25.5107 -97.21v29.9502l-5.2793 7l-5.28027 -12.3203zM346.9 71.4697l-15.8408 10.5303\n+c7.4707 4.36035 13.7607 8.41992 19.3506 12.3203c-0.600586 -7.2207 -0.270508 -13.8398 -3.50977 -22.8398v-0.0107422zM375.05 120.73c-0.399414 -10.9404 -0.899414 -21.6602 -1.75977 -31.6709c-7.84961 1.86035 -15.5703 3.80078 -21.1104 7\n+c8.24023 7.94043 15.5508 16.3203 22.8701 24.6807v-0.00976562zM399.68 115.45l-23.75 6.16016c5.62695 7.16797 13.9014 19.3848 18.4707 27.2695c3.22949 -9.21973 5.2793 -20 5.2793 -33.4297zM403.2 196.39c19.4395 -12.8096 27.7998 -33.6592 29.9102 -56.2998\n+c-12.3203 4.53027 -24.6299 9.31055 -36.9502 10.5605c5.05957 12 6.64941 28.1396 7 45.7393h0.0400391zM401.44 242.13c18.5596 -2.62988 35.1494 -9.18945 45.7598 -28.1494c-14.2197 -4.36035 -24.7803 -5.9707 -44 -14.0801\n+c0.0800781 13.4092 -0.950195 27.9297 -1.75977 42.2295zM165.68 71.4805c-3.23926 9 -2.91016 15.5791 -3.50977 22.8398c5.58984 -3.90039 11.8799 -7.95996 19.3496 -12.3203zM137.53 120.74c7.31934 -8.36035 14.6299 -16.7402 22.8701 -24.6699\n+c-5.54004 -3.2002 -13.2607 -5.14062 -21.1104 -7c-0.860352 10.0098 -1.36035 20.7295 -1.75977 31.6699zM112.89 115.46c0 13.4297 2 24.21 5.28027 33.4297c4.56934 -7.88477 12.8438 -20.1016 18.4697 -27.2695zM109.37 196.4h0.0898438\n+c0.349609 -17.6006 2 -33.7402 7 -45.7402c-12.3701 -1.25 -24.6797 -6.03027 -37 -10.5605c2.11035 22.6406 10.4697 43.4902 29.9102 56.3008zM111.13 242.14c-0.80957 -14.2998 -1.83984 -28.8193 -1.75977 -42.2295c-19.2197 8.10938 -29.7803 9.71973 -44 14.0801\n+c10.6299 18.9502 27.2295 25.5195 45.7598 28.1494z\" \u002F>\n+    \u003Cglyph glyph-name=\"hornbill\" unicode=\"&#xf592;\" horiz-adv-x=\"512\" \n+d=\"M76.3799 77.7002c0.182617 -1.37207 0.331055 -3.6084 0.331055 -4.99219c0 -20.8662 -16.9346 -37.8008 -37.7998 -37.8008s-37.7998 16.9346 -37.7998 37.8008c0 20.8652 16.9346 37.7998 37.7998 37.7998c1.49805 0 3.91602 -0.173828 5.39844 -0.387695\n+c-78.2793 111.35 52 190.53 52 190.53c-5.85938 -43 -8.23926 -91.1602 -8.23926 -91.1602c-67.3105 -41.4902 0.929688 -64.0605 39.8096 -72.8701c18.6445 -50.7129 77.6279 -91.9023 131.66 -91.9404c1.91992 0 3.76953 0.209961 5.66992 0.280273l0.110352 -18.8604\n+c-99.2207 -1.38965 -158.7 29.1406 -188.94 51.6006zM184.38 405.4c109.75 73.9395 187.601 -54.0605 187.601 -54.0605c-43.04 5.86035 -91.1807 8.24023 -91.1807 8.24023c-43.0996 70.0098 -65.7998 -6.58008 -73.7998 -44.29\n+c-48.4805 -19.5557 -87.8545 -77.8545 -87.8896 -130.13c0 -0.910156 0.139648 -1.78027 0.139648 -2.67969l-21.8398 -0.150391c-1.41016 100.43 29.8701 160.09 52.4199 190c-0.842773 -0.0683594 -2.21191 -0.123047 -3.05664 -0.123047\n+c-20.9482 0 -37.9502 17.001 -37.9502 37.9492c0 20.9492 17.002 37.9502 37.9502 37.9502c13.1934 0 28.5273 -9.65723 34.2266 -21.5566c2.04199 -4.25488 3.7002 -11.5381 3.7002 -16.2578c0 -1.35547 -0.143555 -3.54785 -0.320312 -4.8916zM488.57 271.23\n+c-4.21777 -2.00879 -11.3906 -3.63867 -16.0615 -3.63867c-0.886719 0 -2.32422 0.0625 -3.20898 0.138672c84.4502 -113.45 -49 -194.61 -49 -194.61c5.87012 43.0303 8.20996 91.1602 8.20996 91.1602c66.6006 40.96 0.640625 63.54 -38.46 72.54\n+c-19.3633 48.9775 -77.8232 88.7422 -130.49 88.7598c-2.75 0 -5.43945 -0.259766 -8.13965 -0.410156l-0.139648 22.5c93.6094 1.33008 151.72 -25.7998 183.45 -47.7402c-0.226562 1.52539 -0.40918 4.01465 -0.40918 5.55566c0 20.9434 16.9971 37.9404 37.9395 37.9404\n+c20.9434 0 37.9404 -16.9971 37.9404 -37.9404c0 -13.2236 -9.69043 -28.5703 -21.6309 -34.2549zM374.06 11.7598v-0.0595703c0.0917969 0.000976562 0.239258 0.000976562 0.330078 0.000976562c20.9375 0 37.9297 -16.9922 37.9297 -37.9297\n+s-16.9922 -37.9297 -37.9297 -37.9297c-13.1963 0 -28.5273 9.66211 -34.2197 21.5684c-1.76367 3.66602 -3.39453 9.93848 -3.63965 14c-111.98 -80.3398 -191.9 51 -191.9 51c43.0703 -5.87988 91.1904 -8.21973 91.1904 -8.21973\n+c41.3301 -67.1709 63.9199 0.540039 72.7695 39.4893c50.418 18.7646 91.3604 77.6543 91.3906 131.45c0 2.08008 -0.220703 4.08984 -0.300781 6.15039l19.5205 0.139648c1.28027 -89.9697 -23.71 -147.2 -45.1406 -179.66z\" \u002F>\n+    \u003Cglyph glyph-name=\"mailchimp\" unicode=\"&#xf59e;\" \n+d=\"M330.61 204.48c-2.50977 3.17969 -4.70996 8.31934 -5.9707 14.3193c-2.22949 10.6807 -1.98926 18.4102 4.24023 19.4199c6.23047 1.01074 9.25 -5.45996 11.4805 -16.1299c1.5 -7.17969 1.20996 -13.7803 -0.450195 -17.6094\n+c-1.27832 0.165039 -3.36133 0.299805 -4.65039 0.299805c-1.28809 0 -3.37207 -0.134766 -4.64941 -0.299805zM277.05 196c-4.45996 1.95996 -10.2598 4.13965 -17.2598 3.7002c-12.5996 -0.770508 -21.75 -7.21973 -22.5996 -3.48047\n+c-0.400391 1.83984 2.40918 4.87988 5.40918 7.06055c4.5791 3.35254 12.9014 6.07422 18.5762 6.07422c3.45312 0 8.84473 -1.07324 12.0342 -2.39453c8.63965 -3.7002 14.0098 -11.1504 12.1201 -13.0898c-1.08008 -1.12988 -3.81055 0.129883 -8.28027 2.12988z\n+M268.05 190.87c9.68066 1.14941 16.8604 -4.62988 15.4004 -6.85059c-0.629883 -1.00977 -2.02051 -0.829102 -4.94043 -0.489258c-1.55078 0.239258 -4.08301 0.433594 -5.65234 0.433594c-3.72656 0 -9.58105 -1.06738 -13.0674 -2.38379\n+c-4.04004 -1.62012 -4.30957 -1.15039 -5.20996 -0.810547c-1.53027 3.57031 4.40039 8.68066 13.4697 10.1006zM322.22 173.77c-3.40039 -6.91016 -17.7002 0.0703125 -14.2998 7c3.40039 6.93066 17.6797 -0.129883 14.2998 -7zM337.88 194.24\n+c7.69922 -0.149414 7.42969 -16.0605 -0.259766 -15.9307c-7.69043 0.130859 -7.40039 16.0605 0.259766 15.9307zM119.09 115.34c4.0293 0.910156 3.40039 -1.25 3.37012 -0.359375c0.256836 -0.317383 0.46582 -0.904297 0.46582 -1.3125\n+c0 -0.299805 -0.119141 -0.755859 -0.265625 -1.01758c-3.16016 -7.37012 -20.1904 -7.68066 -21.5801 9c-0.910156 10.8594 9.30957 21.0293 -2.28027 28.6191c-1.77734 1.17773 -4.95117 2.13281 -7.08301 2.13281c-3.84961 0 -8.67285 -2.62207 -10.7666 -5.85254\n+c-3.2998 -5.16016 -3.11035 -12.2002 -7.37988 -11.6299c-3.7207 0.540039 -3.70996 14.4805 5 24.0801c7.22949 8 25.9492 11.9297 35.0498 -5.54004c8.11035 -15.3896 -8.2002 -27.7695 -3 -35.7695c2.46973 -3.80078 7.14941 -2.66016 8.46973 -2.35059zM418.81 132.41\n+c6.44043 0 16.5605 -7.5 16.5605 -25.2705c0 -17.7695 -7.37012 -37.9092 -9.11035 -42.3799c-54.3896 -130.279 -264.56 -130.06 -322.29 3c-31.5293 -0.0400391 -64.1699 26.9805 -67.5293 60.3799c-0.256836 2.25195 -0.463867 5.91992 -0.463867 8.18652\n+c0 7.21289 2.04395 18.5537 4.56348 25.3135l-14.7598 12.5107c-67.5498 57.04 143.72 291.85 211.27 232.93c0.339844 -0.299805 22.9902 -22.5205 23.0498 -22.5703l12.5508 5.33008c59.2695 24.5303 107.359 12.6904 107.42 -26.4697\n+c0.0292969 -20.3604 -12.9404 -44.1006 -33.7305 -65.6504c26.1699 -24.2998 20.0205 -71.6094 21.5205 -83c7.19922 -2 30.6992 -7.62012 41.0996 -18.54c18.3604 -19.25 5.52051 -39.5801 3.07031 -43.25c4.20996 -11.2998 3.42969 -8.79004 6.7793 -20.5195z\n+M102.81 84.25c29.4502 -0.680664 38.6309 28.2002 34.0908 57.8398c-9.74023 62.9404 -90.1699 48.9805 -84 -12.3301c2.44922 -24.3594 27.0898 -44.8994 49.9092 -45.5098zM84.2998 198.45c19.3105 51.8096 51.54 99.5498 94.2002 132.399\n+c31.6504 26.4102 65.7998 45.3506 65.7998 45.3506s-18.3896 21.3193 -23.9395 22.8896c-34.1699 9.23047 -107.94 -41.6494 -155.051 -108.88c-19.0596 -27.21 -46.3096 -75.3604 -33.2998 -100.21c1.58984 -3 10.71 -10.9297 15.5898 -15\n+c8.18066 11.9102 21.54 20.5 36.7002 23.4502zM323.18 97.2998c2.58984 0.259766 0.560547 -2.53027 0.560547 -2.53027s-27.4004 -12.75 -71 0.740234c1.20996 -10.2295 11.1699 -14.8193 15.9395 -16.6699c31.4004 -12.21 86.6904 -2.58008 128.46 26\n+c0.850586 0.589844 1.41992 0 0.730469 -1c-28.9697 -41.3496 -128.73 -54.7598 -151.37 -21.3496c-12.0801 17.8301 -0.599609 43.8594 19.5498 41.1494c6.7998 -0.769531 53.7705 -8 100.48 13.6807c27.4893 12.7598 37.8701 26.79 36.3096 38.1602\n+c-0.447266 3.00293 -2.57031 7.16504 -4.74023 9.28906c-5 4.83008 -12.79 8.60059 -26 12.3105c-4.35938 1.22949 -7.31934 2.00977 -10.5098 3.05957c-5.67969 1.83008 -8.47949 3.33008 -9.10938 14c-0.280273 4.62988 -1.09082 20.9102 -1.38086 27.6299\n+c-0.519531 11.7607 -1.91992 27.8506 -11.9199 34.4902c-2.37305 1.51953 -6.58691 2.75195 -9.40527 2.75195c-1.1748 0 -3.05371 -0.229492 -4.19434 -0.511719c-5.69043 -0.969727 -9.06055 -4.00977 -13.2598 -7.50977\n+c-12.4404 -10.3701 -22.9502 -12.0605 -34.6406 -11.5605c-6.98926 0.290039 -14.3994 1.37988 -22.8799 1.87988l-5 0.290039c-19.5801 1 -40.5693 -15.9092 -44.0693 -39.9092c-4.86035 -33.4307 19.3291 -50.7002 26.3291 -60.8301\n+c0.912109 -1.0918 1.77246 -3.12598 1.9209 -4.54004c0 -1.94043 -1.25 -3.48047 -2.48047 -4.79004c-19.9805 -20.54 -26.3701 -53.1699 -18.8398 -80.3701c0.768555 -2.76562 2.35938 -7.12891 3.5498 -9.74023c17.7002 -41.2598 72.4902 -60.4795 126 -43\n+c5.81152 1.89844 14.9238 5.74219 20.3398 8.58008c9.78906 4.8418 23.7441 15.2852 31.1504 23.3096c14.2002 14.8408 22.6396 30.9707 25.9297 50.8408c2.81055 18.6191 -7.78027 18.7598 -11.4395 18.0996c-1.13477 6.94531 -4.32422 17.8223 -7.12012 24.2803\n+c-15.6299 -12.3506 -35.71 -20.9707 -51 -25.3506c-69.4004 -19.9102 -90.1904 6.35059 -96.4004 -13.8096c33.7705 -12.3701 69.5098 -7.07031 69.5098 -7.07031zM171.31 290.5l0.0605469 0.00976562c-0.0947266 -0.115234 -0.171875 -0.331055 -0.171875 -0.481445\n+c0 -0.418945 0.34082 -0.759766 0.759766 -0.759766c0.124023 0 0.308594 0.0546875 0.412109 0.121094c11.4199 8.30078 64.9502 42.7705 134.5 26.8301c0.860352 -0.189453 1.39941 1.29004 0.639648 1.7207c-11.3398 6.33984 -28.6895 10.6494 -41 10.7393\n+c-0.404297 0.00976562 -0.732422 0.345703 -0.732422 0.75c0 0.134766 0.0634766 0.332031 0.142578 0.44043c1.84668 2.41602 5.30078 5.88379 7.70996 7.74023c0.166992 0.126953 0.302734 0.401367 0.302734 0.611328c0 0.424805 -0.344727 0.770508 -0.770508 0.770508\n+c-0.0146484 0 -0.0380859 -0.000976562 -0.0517578 -0.00195312c-17.5205 -1.08008 -37.5107 -9.4707 -49 -17.2998c-0.107422 -0.0751953 -0.300781 -0.136719 -0.431641 -0.136719c-0.414062 0 -0.75 0.335938 -0.75 0.75\n+c0 0.0498047 0.00976562 0.12793 0.0214844 0.176758c0.899414 4.30957 3.72949 9.98926 5.18945 12.6494c0.0566406 0.0947266 0.102539 0.261719 0.102539 0.37207c0 0.402344 -0.327148 0.729492 -0.730469 0.729492\n+c-0.110352 0 -0.276367 -0.0449219 -0.37207 -0.101562c-18.4697 -9.4502 -39.0898 -26.2803 -55.8301 -45.6299z\" \u002F>\n+    \u003Cglyph glyph-name=\"megaport\" unicode=\"&#xf5a3;\" horiz-adv-x=\"496\" \n+d=\"M214.5 238.4l33.4004 33.3994l33.3994 -33.3994v-66.4004l-33.2998 -33.2998l-33.5 33.5v66.2002zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM393.1 25.5996h0.100586v87.1006l-59.7002 59.7002v87.5996l-59.5 59.5\n+v75.5996l-26.0996 19.2002l-26.1006 -19.2002v-75.5996l-59.5 -59.5v-87.9004l-59.5 -59.5v-87l26.1006 -19.1992l26.0996 19.1992v65.5l33.5 33.4004l33.4004 -33.4004v-65.5l26.0996 -19.1992l26.2002 19.1992v65.5l33.3994 33.4004l33.4004 -33.4004v-65.5l26 -19.1992z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"nimblr\" unicode=\"&#xf5a8;\" horiz-adv-x=\"384\" \n+d=\"M246.6 148.71c15.5703 0 27.1504 -11.46 27.1504 -27s-11.6201 -27 -27.1504 -27c-15.6992 0 -27.1494 11.5703 -27.1494 27s11.5498 27 27.1494 27zM113 121.75c0 15.6104 11.6797 27 27.1504 27c15.4697 0 27.1494 -11.46 27.1494 -27s-11.4697 -27 -27.1494 -27\n+c-15.4404 0 -27.1504 11.3096 -27.1504 27zM191.76 289c98.3701 0 177.76 -78.9102 177.76 -176.48c0 -97.5693 -79.6094 -176.52 -177.76 -176.52c-98.1494 0 -177.76 78.8701 -177.76 176.52v335.48l45.25 -227c30.2002 48.2305 97.75 68 132.51 68zM191.76 -19.1201\n+c73.2402 0 132.51 58.96 132.51 131.64c0 72.6807 -59.2393 131.54 -132.51 131.54c-73.2695 0 -132.51 -58.8994 -132.51 -131.59c0 -72.6895 59.2402 -131.59 132.51 -131.59z\" \u002F>\n+    \u003Cglyph glyph-name=\"rev\" unicode=\"&#xf5b2;\" \n+d=\"M289.67 173.11c0 -36.1943 -29.375 -65.5801 -65.5703 -65.5801c-36.1943 0 -65.5693 29.375 -65.5693 65.5693c0 36.1953 29.375 65.5703 65.5693 65.5703h0.0107422c36.1445 -0.0439453 65.5156 -29.415 65.5596 -65.5596zM429.22 178.16v-210.16h-210.16v0.110352\n+c-110.939 2.70996 -200.06 93.4092 -200.06 205c0 108.569 84.2998 197.319 191 204.569v38.3203l108.77 -62.7803l-108.77 -62.79v39.1201c-80 -7.16016 -143 -74.5498 -143 -156.43c0 -86.6201 70.4902 -157.12 157.11 -157.12s157.09 70.5 157.09 157.12\n+c-0.0224609 47.1709 -32.1934 106.235 -71.8105 131.84l45.3799 26.2002c39.8018 -32.8584 73.0977 -101.402 74.3203 -153h0.129883z\" \u002F>\n+    \u003Cglyph glyph-name=\"shopware\" unicode=\"&#xf5b5;\" horiz-adv-x=\"512\" \n+d=\"M403.5 -7.41016c-36.0898 -26.8223 -101.875 -48.5908 -146.841 -48.5908c-0.181641 0 -0.477539 0.000976562 -0.65918 0.000976562c-137.19 0 -248 111 -248 248c0 137.19 111 248 248 248h0.211914c52.3994 0 126.538 -28.4482 165.488 -63.5\n+c0.643555 -0.585938 1.16602 -1.76855 1.16602 -2.63965c0 -1.9707 -1.59961 -3.56934 -3.57031 -3.56934c-0.125977 0 -0.330078 0.0126953 -0.456055 0.0292969c-15.2227 2.03223 -40.042 3.68164 -55.4004 3.68164\n+c-0.361328 0 -0.948242 -0.000976562 -1.30957 -0.00195312c-129.36 0 -222.399 -53.4697 -222.399 -155.35c0 -109 92.1299 -145.881 176.829 -178.73c33.6406 -13 65.4004 -25.3604 87 -41.5898c0.788086 -0.592773 1.42676 -1.87402 1.42676 -2.86035\n+c0 -0.985352 -0.638672 -2.2666 -1.42676 -2.85938zM503 214.91c0.578125 -6.2832 1.04688 -16.5039 1.04688 -22.8135c0 -25.8613 -7.62793 -66.4043 -17.0273 -90.4971c-0.495117 -1.2373 -1.98047 -2.24316 -3.31348 -2.24316\n+c-0.495117 0 -1.25 0.19043 -1.68652 0.423828c-29.4893 16.3594 -61.6094 28.3398 -92.6797 39.9297c-60.2803 22.4902 -112.34 41.8896 -112.34 84.4902c0 1.45996 -3.87988 53.6299 80.25 53.6299c50.8604 0 92.7197 -17.4805 144.48 -60.4805\n+c0.625 -0.530273 1.19336 -1.62305 1.26953 -2.43945z\" \u002F>\n+    \u003Cglyph glyph-name=\"squarespace\" unicode=\"&#xf5be;\" horiz-adv-x=\"512\" \n+d=\"M186.12 104.66l157.22 157.2c38.5703 38.5898 101.13 38.5898 139.72 0c38.5908 -38.5801 38.5908 -101.13 0 -139.721l-119.25 -119.239l-0.0400391 -0.0400391c-19.2891 -19.2705 -50.5498 -19.25 -69.8193 0.0400391l154.149 154.14\n+c19.29 19.29 19.29 50.5703 0 69.8604s-50.5693 19.29 -69.8594 0l-157.181 -157.181c-9.64941 -9.64941 -25.29 -9.64941 -34.9395 0c-9.65039 9.65039 -9.65039 25.29 0 34.9404zM430.65 209.46c9.63965 -9.63965 9.63965 -25.2803 -0.0107422 -34.9297l-157.199 -157.2\n+c-38.5801 -38.5703 -101.141 -38.5703 -139.721 0l-0.0195312 0.0195312c-9.64062 9.65039 -9.62988 25.29 0.0195312 34.9307l0.0107422 0.00976562c9.64941 9.63965 25.2793 9.62988 34.9199 -0.00976562l0.0498047 -0.0498047\n+c19.29 -19.2607 50.5498 -19.2402 69.8193 0.0498047l157.2 157.18c9.64062 9.65039 25.2803 9.65039 34.9307 0zM168.66 122.13c-38.6006 -38.5801 -101.13 -38.5801 -139.73 0.00976562c-38.5801 38.5801 -38.5801 101.13 0 139.721l119.23 119.25l0.0195312 0.0195312\n+c19.3008 19.2803 50.5703 19.2705 69.8506 -0.0195312l-154.17 -154.17l-0.0302734 -0.0302734c-19.2803 -19.2998 -19.2598 -50.5605 0.0302734 -69.8398l0.00976562 -0.0107422c19.29 -19.29 50.5703 -19.2793 69.8496 0.0107422l157.21 157.18\n+c9.64062 9.63965 25.2705 9.63965 34.9102 0c9.64062 -9.65039 9.64062 -25.29 0 -34.9404zM81.3301 174.53c-9.64062 9.64941 -9.65039 25.29 0 34.9297l157.189 157.19c38.5908 38.5898 101.131 38.5898 139.721 0c9.64941 -9.64062 9.64941 -25.2803 0 -34.9307\n+c-9.64062 -9.64941 -25.2803 -9.64941 -34.9307 0l-0.0195312 0.0205078c-19.29 19.2793 -50.5596 19.2695 -69.8398 -0.0205078l-157.21 -157.189c-9.64062 -9.64062 -25.2705 -9.64062 -34.9102 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"themeco\" unicode=\"&#xf5c6;\" \n+d=\"M202.9 439.57c9.89941 5.72949 26 5.81934 35.9492 0.209961l191.15 -107.63c10 -5.60059 18 -19.4404 18 -30.8604v-217.29c0 -11.4404 -8.05957 -25.29 -18 -31l-191.19 -108.74c-9.92969 -5.66016 -26 -5.56934 -35.8496 0.209961l-185.1 108.41\n+c-9.86035 5.78027 -17.8604 19.7402 -17.8604 31.1201v217.29c0 11.4404 8 25.3604 17.9102 31.0801zM125.5 239.74c-15.9404 0 -31.8896 -0.140625 -47.8301 -0.140625v-101.449h19.1299v29.8496h28.7002c49.71 0 49.5596 71.7402 0 71.7402zM265.64 139.45\n+l-30.7295 34.6396c37 7.50977 34.7998 65.2305 -10.8701 65.5098c-16.0898 0 -32.1699 0.140625 -48.2598 0.140625v-101.59h19.1299v33.9092h18.4102l29.5596 -33.9092h22.7598v1.2998zM224.05 221.77c23.3398 0 23.2598 -32.46 0 -32.46h-29.1299v32.46h29.1299z\n+M128.49 223.37c21.1797 0 21.1094 -38.8506 0 -38.8506h-32.3105v38.8408zM321.14 241.62c-68.46 0 -71 -105.8 0 -105.8c69.4805 0.00976562 69.4102 105.8 0 105.8zM321.14 224.23c44.1201 0 44.8008 -70.8604 0 -70.8604c-44.7998 0 -44.4297 70.8604 0 70.8604z\" \u002F>\n+    \u003Cglyph glyph-name=\"weebly\" unicode=\"&#xf5cc;\" horiz-adv-x=\"512\" \n+d=\"M425.09 382.17c50.9102 0 87.5498 -35.1504 86.9199 -83.4697c0 -21.6201 -0.950195 -18.5498 -77.5 -227.2c-22.3799 -60.5703 -67.7695 -69.6699 -92.7402 -69.6699c-39.2393 0 -70.0391 19.46 -85.9297 54.29c-15.8896 -34.5205 -46.7002 -53.9805 -85.9297 -53.9805\n+c-24.9697 0 -70.3701 8.78027 -92.7402 69.3506c-72.9902 200.21 -77.1699 204.52 -77.1699 233.479c0 43.3105 38.5898 77.2002 87.54 77.2002c40.21 0 73.2803 -25.7295 83.6602 -64.3301c18.4795 58.0498 65.5 64.3301 85.2803 64.3301\n+c19.4492 0 66.7891 -6.26953 84.9492 -64.3301c10.3799 38.6006 43.7803 64.3301 83.6602 64.3301zM451.43 267.36c3.49023 11.1992 7.29004 19.3701 7.61035 27.2393c0 22.3906 -16.1602 35.71 -38.3301 35.71c-18.6904 0 -31.9902 -11.7998 -36.1104 -29.0498\n+l-44.0293 -139.819h-0.950195l-44.6602 136.79c-6.01953 19.9697 -16.4697 32.0791 -38.96 32.0791s-32.9404 -12.4092 -38.96 -32.0791l-44.6602 -136.79h-0.950195l-44.0293 139.819c-4.12012 17.25 -17.4199 29.0498 -36.1104 29.0498\n+c-22.4902 0 -38.3301 -13.0195 -38.3301 -29.3594c0 -10.5898 2.54004 -19.6699 7.91992 -34.5l64.9404 -175.23c7.91016 -21.4795 21.2197 -37.2197 46.2393 -37.2197c23.1201 0 37.0605 12.0996 44.0205 33.5996l39.2803 117.42h0.949219l39.2803 -117.42\n+c6.65039 -21.4893 20.5898 -33.8994 44.0303 -33.8994c25.0195 0 38.3203 15.7295 46.2402 37.2197z\" \u002F>\n+    \u003Cglyph glyph-name=\"wix\" unicode=\"&#xf5cf;\" horiz-adv-x=\"640\" \n+d=\"M393.38 316.31c0 -13.0293 2.08008 -32.6895 -28.6797 -43.8291c-9.52051 -3.4502 -15.9502 -9.66016 -15.9502 -9.66016c0 31 4.71973 42.2197 17.4004 48.8594c9.75 5.11035 27.2295 4.62988 27.2295 4.62988zM277.58 280.77\n+c5.47949 26.3408 30.8799 38.3408 55.2998 35.2705l-65.5703 -247.93s-21.6396 -1.56055 -32.46 3.95996c-14.2197 7.25 -20.9893 12.8398 -29.5898 46.5693c-7.66992 30.0703 -29.1494 118.4 -31.1201 124.7c-4.30957 13.8105 -10.6396 14.9404 -15.3994 0\n+c-2.00977 -6.29004 -23.4502 -94.6299 -31.1201 -124.7c-8.61035 -33.7295 -15.3701 -39.3193 -29.5898 -46.5693c-10.8301 -5.52051 -32.46 -3.95996 -32.46 -3.95996l-65.5703 247.93c23.8604 3 49.7305 -8.5498 55.2803 -35.2705l34.2393 -132.659l28.4805 108.569\n+c7.76953 32.3506 21.0596 48.5303 48.4297 48.5303c27.6201 0 40.7402 -16.54 48.4307 -48.5303l28.4795 -108.569zM393.36 275.56v-8.97949l0.0195312 0.00976562v-150.27c-0.129883 -30.8301 -3.33008 -37.6807 -17.2598 -44.7803\n+c-10.8203 -5.52051 -27.3701 -3.42969 -27.3701 -3.42969v152.069c0 21.25 -1.95996 27.9404 13.1797 35.2002c6.19043 2.96973 11.96 5.25 17.9707 8.61035c9.35938 5.22949 13.46 11.5693 13.46 11.5693zM556.8 191.48l82.9902 -123.36s-35.9297 -4.62012 -53.3203 11.21\n+c-13.9102 12.6602 -23.7393 28.3398 -53.1396 70.7197c-0.5 0.770508 -6.25977 10.5205 -13.0703 0c-34.9297 -50.3496 -41.0195 -60.2598 -52.5098 -70.7197c-17.3799 -15.8301 -53.9502 -11.21 -53.9502 -11.21l82.9697 123.36l-83.1992 123.739\n+s35.1094 5.98047 52.5 -9.84961c13.3799 -12.1797 24.8896 -30.2402 54.1797 -72.4697c6.82031 -10.54 12.5996 -0.730469 13.0703 0c29.7695 42.9199 40.8799 60.3691 54.1797 72.4697c17.3896 15.8301 52.5 9.84961 52.5 9.84961z\" \u002F>\n+    \u003Cglyph glyph-name=\"ello\" unicode=\"&#xf5f1;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM391.84 154.8c2.48047 7.44043 -2.47949 15.71 -9.91992 17.3604c-7.43945 2.47949 -15.71 -2.48047 -17.3604 -9.91992\n+c-14.0498 -52.9102 -62 -90.1104 -116.56 -90.1104s-102.51 37.2002 -116.56 90.1104c-1.65039 7.43945 -9.9209 11.5693 -17.3604 9.91992c-7.44043 -1.65039 -11.5703 -9.91992 -9.91992 -17.3604c16.5303 -65.3096 76.0498 -111.6 143.84 -111.6\n+s127.31 46.29 143.84 111.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"hackerrank\" unicode=\"&#xf5f7;\" horiz-adv-x=\"512\" \n+d=\"M477.5 320c14.5 -25 14.4805 -230.92 -0.00976562 -256s-192.391 -128 -221.33 -128c-28.9404 0 -206.83 102.8 -221.32 128s-14.4102 230.79 0 256s192.351 128 221.32 128s206.84 -103.05 221.34 -128zM316.13 33.7803c3.95996 0 40.4404 35.7793 37.5605 38.6895\n+c-0.870117 0.839844 -8.82031 1.49023 -17.6904 1.83984c0 32.4004 -3 19.0508 0.679688 210.341c0.0703125 3.65918 -1.04004 5.37988 -4.5 5.37988c-11.0801 0.0693359 -22.1602 0.0195312 -33.2295 -0.0605469c-3.25977 -0.0292969 -4.31055 -1.80957 -4.20996 -5.2002\n+c1.58984 -48.8994 1.2002 -79.0898 1.2002 -83.6396h-80.2607c0.629883 25.7998 0.209961 79.6396 2.62988 105.39v3.16016c8.87012 0.350586 15.9004 0.970703 16.7705 1.83984c2.90039 2.91016 -34.3203 38.6904 -38.2705 38.6904\n+c-3.94922 0 -41.4092 -35.7695 -38.4893 -38.6904c0.879883 -0.839844 7.58984 -1.48926 17.2598 -1.83984v-3.16992c3.15039 -128.67 1.07031 -179.229 0.150391 -212.67c-0.130859 -4.58008 1.63965 -6.10938 5.73926 -6.10938\n+c10.1406 0.0292969 20.2803 -0.0800781 30.4102 -0.0800781c4.16016 -0.0605469 5.96973 1.39941 5.74023 5.93945c-1.83008 36.6797 -1.37012 65.7803 -1.37012 72.8799h79.9297c0 -2.41992 0.44043 -3.84961 0.44043 -5.84961\n+c-0.350586 -17.7305 -0.94043 -60.0898 -0.94043 -86.3203c-11.29 -0.349609 -16.6797 -0.959961 -17.5498 -1.83008c-2.91016 -2.91992 34 -38.6895 38 -38.6895z\" \u002F>\n+    \u003Cglyph glyph-name=\"kaggle\" unicode=\"&#xf5fa;\" horiz-adv-x=\"320\" \n+d=\"M304.2 -53.5l1.39941 -7.59961c-0.5 -2 -2.5 -3 -6 -3h-66.8994c-4 0 -7.5 1.7998 -10.5 5.2998l-110.5 140.6l-30.7998 -29.2998v-109c0 -5 -2.5 -7.5 -7.5 -7.5h-51.9004c-5 0 -7.5 2.5 -7.5 7.5v497c0 5 2.5 7.5 7.5 7.5h51.9004c5 0 7.5 -2.5 7.5 -7.5v-306\n+l132.3 133.7c3.5 3.5 7 5.2998 10.5 5.2998h69.2002c7 0 7.89941 -7.7998 5.2998 -10.5l-139.8 -135.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"markdown\" unicode=\"&#xf60f;\" horiz-adv-x=\"640\" \n+d=\"M593.8 388.9c25.5 0 46.2002 -20.7002 46.2002 -46.1006v-301.6c0.0996094 -25.4004 -20.5996 -46.1006 -46.0996 -46.1006h-547.7c-25.5 0 -46.2002 20.7002 -46.2002 46.2002v301.5c0 25.4004 20.7002 46.1006 46.2002 46.1006h547.6zM338.5 87.4004h-0.200195v209.199\n+h-61.5l-61.5 -76.8994l-61.5 76.8994h-61.5v-209.199h61.7002v120l61.5 -76.9004l61.5 76.9004v-120h61.5zM473.8 84.2998l92.2002 107.7h-61.5v104.6h-61.5v-104.6h-61.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"neos\" unicode=\"&#xf612;\" horiz-adv-x=\"512\" \n+d=\"M415.44 -64h-95.1104l-108.21 154.54v-91.0996l-86.4297 -63.4404h-97.6904v482.18l40.4697 29.8203h108.05l123.74 -176.13v112.68l86.4307 63.4502h97.6895v-461.5zM38.7695 412.73v-460.73l72 52.8799v249.12l215.5 -307.64h84.79l52.3506 38.1699h-78.2705\n+l-316.14 450.47zM121.31 -53.8799l80 58.7803v101l-79.7598 114.399v-220.939l-72.5498 -53.25h72.3398zM80.6299 437.23l310.601 -442.57h82.3691v442.57h-79.75v-317.561l-222.939 317.561h-90.2803zM311 256.35l72 -102.81v278.53l-72 -53v-122.721z\" \u002F>\n+    \u003Cglyph glyph-name=\"zhihu\" unicode=\"&#xf63f;\" horiz-adv-x=\"640\" \n+d=\"M170.54 299.87h122.68v-217.55h-49.5293l-42.0107 -26.3701l-7.70996 26.3701l-23.4297 0.00976562v217.54zM268.29 105.94v170.31h-72.8203v-170.31l11.9004 -0.0400391l5.08008 -17.4707l27.8994 17.5107h27.9404zM149.83 200.33\n+c7.5 0 7.58984 -23.6104 7.58984 -23.6104h-61.6504c-0.879883 -13.1201 -3.50977 -26.6895 -7.86914 -40.6699l14.6191 11.6201c8.73047 -8.75 29.2109 -32.8896 36.79 -41.8096c9.15039 -13.1006 1.24023 -39.9902 1.24023 -39.9902l-53.96 64.9395\n+c-12.6094 -48.3496 -35.5898 -69.25 -35.5898 -69.25c-10.0898 -8.96973 -30.5098 -15.75 -51 -9.89941c42.8301 33.2197 66.4502 75.2402 70.8496 125.1h-65.5801s3.82031 23.6201 15.5605 23.6201h52.2695c0.480469 6.56055 1.68066 62.9404 1.68066 73.4404h-28.8701\n+c-2.62988 -7.87012 -3.03027 -8.64062 -5.14062 -14.5303c-11.4697 -21.0303 -30.9492 -21.5703 -36.8398 -22.21c17.4902 34.9795 27.3105 69.2197 30.7002 78.1201c8.2002 21.5693 32.2705 21.5693 32.2705 21.5693c-5.25 -14.0098 -9.63086 -27.5498 -13.1201 -40.6699\n+h88.5c10.5498 0.25 8.58008 -22.3096 8.58008 -22.3096h-51.1602c0 -21.8701 -0.459961 -46.3604 -2.2002 -73.46h52.3301zM561.85 201.93l-19.2295 14.4307s30.8301 40.0498 36.8301 48.1992c8.72949 10.7402 27.3799 -4.05957 27.3799 -4.05957\n+s-24.1504 -32.9297 -44.9805 -58.5703zM411.76 261.02l0.00976562 0.0107422c8.99023 -8.25 34.6602 -45.8604 34.6602 -45.8604l-19.46 -13.7295c-1.59961 2.40918 -41.1201 57.4492 -41.1201 57.4492s16.9004 10.3799 25.9102 2.12988zM640 189.65\n+c0 0 0.950195 -23.79 -8.73047 -23.79h-122.359v-73.3203c0.780273 -28.0303 -15.3301 -45.3096 -44.8906 -45.3096c-9.84961 0 -16.1396 1.75977 -26.0195 6.56934c-12.9805 7.4502 -17.3203 17.8701 -19.3096 21.8398c15.6094 -0.65918 27.6094 -1.91992 41.6895 -1.80957\n+c13.29 -0.870117 24.4805 7.15039 24.4805 21.1201v70.9199h-107.94c-22.6895 0.540039 -25.5098 22.8496 -25.5098 22.8496h133.47v99.8105c-12.8301 0 -31.6797 -0.830078 -56.5098 -2.43066c-26.46 -0.80957 -35.8398 -2.58984 -49.1504 0.890625\n+c-8.16016 2.46973 -14.1797 10.7295 -15.7793 19.5498c67.1396 1.55957 232.359 18.0498 232.359 18.0498s20.1006 5.75977 23.1699 4.58008c12.8105 -6.25 0.589844 -33.4395 0.589844 -33.4395c-17.6396 -0.810547 -46.8896 -2.40039 -87.7695 -4.81055\n+c-10.4297 -0.799805 -18.04 -1.2002 -22.8496 -1.2002v-101c0.149414 0 111.279 0.930664 131.06 0.930664z\" \u002F>\n+    \u003Cglyph glyph-name=\"alipay\" unicode=\"&#xf642;\" \n+d=\"M377.74 416c38.6895 0 70.0898 -31.5703 69.9297 -70.2598v-234.41c-48.6104 16.7002 -99.6895 36.04 -148.62 52.7402c23.1406 44.2998 38.3506 90.9199 38.3506 90.9199h-88.7705v31.2402h109.45v19.0098h-109.44v50.4199h-50.9199v-50.4199h-109.439v-19.0098h109.439\n+v-31.2402h-92.0801v-16.7002h178.2s-9.91992 -30.25 -26.4502 -60.3398c-47.7793 14.71 -91.75 24.96 -127.13 24.96c-84.6396 0 -103.49 -42.4902 -99.5195 -81.5c3.30957 -31.0703 26.4502 -76.3701 97.04 -76.3701c64.4795 0 116.55 37.0303 148.62 81\n+c61.0098 -28.0996 125.64 -62.8203 171.6 -88.4404c-0.5 -38.5195 -31.7402 -69.5996 -70.2598 -69.5996h-307.48c-38.8496 0 -70.2598 31.4102 -70.2598 70.2598v307.48c0 38.8496 31.4102 70.2598 70.2598 70.2598h307.48zM47.2803 125.05\n+c-0.990234 17.5205 10.9102 50.5801 78.3594 50.5801c24.96 0 64.8105 -12.7295 109.44 -31.4102c-25.29 -33.2197 -65.7998 -72.8994 -117.87 -72.8994c-59.6797 0 -68.9404 33.5596 -69.9297 53.7295z\" \u002F>\n+    \u003Cglyph glyph-name=\"the-red-yeti\" unicode=\"&#xf69d;\" horiz-adv-x=\"512\" \n+d=\"M488.23 206.3c2.49805 -3.35254 5.51465 -9.31152 6.76953 -13.2998c3.37793 -9.19922 7.36523 -24.5205 8.90039 -34.2002l-2.5 -0.5l-13 14.2998c-17.9004 -28.0996 -9.90039 -15.3994 -16.7002 -25.0996c0 -124.2 -101.3 -211.5 -223 -211.5\n+c-61.5 0 -113.9 20.2002 -157.5 60.2002c-64.5 60.8994 -64.9004 125 -64.9004 150.5c-0.5 1.7998 -0.700195 3.5 -1.2002 5.2002l-20.1992 -22.4004c-6.80078 43 25.6992 74.2998 33 80.7002c0.5 1 0.699219 2.2002 1.19922 3.2002l-28.7998 1l-3 3.39941\n+c8.5 3.5 25.2998 13.2998 40.2998 14.2998c6.30273 12.0684 18.7568 30.123 27.8008 40.3008c1.2998 6.39941 3.2998 14.1992 6.59961 25.7998l-7.59961 -4.7002l-1.7002 1.7002l1.7002 8.39941c8.87207 21.3857 29.7939 51.5811 46.6992 67.4004l-33 14.2998h3.7002\n+c20.9004 4.90039 33.2002 3.2998 49.2002 0c-2.5 4.10059 -5.40039 10.5 -8.40039 18.9004c-1.16699 3.20996 -2.11426 8.58691 -2.11426 12.0029c0 3.81152 1.1709 9.76855 2.61426 13.2969c8.90039 -7.40039 14.3008 -24.5996 15.2002 -27\n+c0.700195 3.59961 2.10059 21.2998 33.7002 45.5l1.83008 -0.5l-12 -44.2002c30 17.7002 63 21.9004 97.9004 11.7998c-12.7002 -12.1992 -24.3008 -28.8994 -42.5 -33c7.39941 -2.2998 28.6992 -9.69922 34.1992 -15.1992l-24.7998 7.09961\n+c6.5 -6 19.6006 -16.4004 25.1006 -25.0996c19.418 -0.893555 50.0615 -6.85254 68.3994 -13.3008l-0.5 0.5c29.4004 14.7002 37.7002 27.3008 74.7998 3c0 -30.1992 -2.2998 -23.3994 3 -29.7998c6.41602 5.42383 17.75 12.8154 25.3008 16.5\n+c13 6.40039 23.0996 4.7002 30.6992 -5.89941c11.8008 0 17.8008 -15.7002 18.4004 -27c14.7998 -2.90039 2.7002 -30.7002 2.5 -30.7002l-7.09961 -18.2002c7.7998 -7.7998 22.0996 -20.9004 31.6992 -44.7998zM398 336.8c-13.0996 8.90039 -22.7002 11.9004 -28.2998 8.5\n+c8.09961 -7.2002 13 -14.2998 13.5 -20.7002c1.2002 -7.59961 -2.2002 -14.7998 -10.6006 -21.8994l-4.19922 -3.40039c3.60059 -5.90918 7.36328 -16.2578 8.39941 -23.0996h2.5c-2.09961 13.8994 -2.5 11 0.700195 14.7998c11 -6.40039 14.9004 -14.5 16 -19.9004\n+c21.7998 10.1006 29.5 12.7002 54.7998 20.9004l-18.2002 -16c11.4004 0 25.6006 0.299805 46.5 -8.40039c7 24.3008 7.10059 20.7002 2.5 20.7002l-4.69922 -11.2998c-1.7002 10.5 -2.90039 18.9004 -3.40039 25.2998c-0.5 6.7002 -3.90039 9.60059 -9.2998 10.1006\n+c-0.00976562 -0.384766 -0.0175781 -1.00781 -0.0175781 -1.3916c0 -3.87012 0.769531 -10.0566 1.71777 -13.8086l-1.7002 -5.90039c-2.90039 10.6006 -5.90039 20.2002 -9.2998 27.7998c-9.7002 17.7002 -30.2002 -9.19922 -43 -11.2998\n+c3.72266 -0.207031 9.77051 -0.375977 13.5 -0.375977c3.72852 0 9.77637 0.168945 13.5 0.375977l-22.4004 -5.39941l3.40039 -4.7002c-5.5 0 -16.9004 -0.900391 -22.4004 17.2002zM358.4 346.9l-20.3008 -11.8008c11.3008 -7.59961 20.2002 -18.1992 27.8008 -31.1992\n+c6.39941 2.89941 10.0996 5.09961 11.7998 7.59961c2.5 2.7998 2.5 4.7002 3 7.09961c0.599609 1.30078 0.799805 2.7002 -3.40039 11.1006c-7.5 11.7998 -16.2002 15.2998 -18.8994 17.2002zM91 304.9c-7.7998 -24.1006 -11.7002 -49.4004 -13.2002 -74.6006l13.2002 -5\n+l1.2002 27c9.5 -16.3994 11.2002 -23.2998 12.2998 -28.7998c2.7998 2.09961 7.7002 7 22.5996 11.2998l1.2002 -1.7002l-7.59961 -10.5996c10.0996 3.5 19.5 3.5 28.2998 0.5l-10.5996 -8.40039c22.7998 -8.39941 26.5996 -7.59961 38.3994 -26.0996l-11.7998 1.2002\n+c34.9297 -20.5 66 -47.9004 141.2 -63.2002c15.5996 24.0996 14 21.0996 14 22.9004l0.200195 0.199219l-0.200195 0.200195c-0.700195 1.90039 -14.1006 16.6006 -18.2002 20.7002c7.2998 -1.7998 6 -0.900391 10.7998 -3.7002\n+c1.7002 -0.899414 -5.39941 5.40039 -21.8994 20.2002c16.5 -6.7002 27.5996 -15.5 33 -27.7998l1.69922 30.7002l-22.3994 17.6992l6.39941 5.90039c-7.2998 0 -31 3.7002 -49.1992 -16l-2.5 0.5c5.89844 12.1807 13.0664 32.7881 16 46\n+c1.61914 7.72656 2.96289 20.4053 3 28.2998c0 19.5 -4.7002 38.4004 -13.5 56.6006c-6.40039 13.5 -16.5 25.2998 -30 35.3994c-5.4707 4.09961 -14.7441 10.1475 -20.7002 13.5c3 0.700195 1 1.2002 -5.40039 1.2002c-6.39941 0.200195 -13 0.700195 -19.3994 1.2002v-3\n+c-8.67773 -1.375 -20.0127 -8.18457 -25.3008 -15.2002h-1.19922l-5.40039 -3.40039c-1.2002 2.90039 0 6.30078 4.2002 9.30078l10.5996 11.2998l-3.39941 -0.5l2 3.39941c-2.30078 0.200195 -4.2002 0.5 -6.2002 0.700195l-0.5 1.2002l2.5 1.7002\n+c2.2002 -0.200195 4.59961 -0.5 7.09961 -0.700195c2.52539 1.3457 6.89746 2.43848 9.75879 2.43848c1.18359 0 3.08301 -0.196289 4.24121 -0.438477l2.5 -1.2002l0.200195 -0.5c6.50488 0.421875 16.9883 1.7207 23.4004 2.90039\n+c20.6992 2.89941 36.6992 11.2998 48.5 24.7998l-21.1006 0.5c-25.7998 0.5 -49.3994 -5.40039 -71.2998 -18.9004l-2.5 2.5l0.5 4.7002l1.7002 7.10059c1.37695 7.08105 4.24414 18.415 6.39941 25.2998c-1.69922 -0.700195 -4.59961 -4.90039 -9.2998 -11.2998\n+c-4.7002 -6.40039 -8.39941 -13 -10.0996 -19.4004c-0.905273 -4.24512 -3.54785 -10.6514 -5.90039 -14.2998l-13.5 29l8.40039 -35.7998l-0.5 -1.7002h-0.015625c-4.51953 0 -11.6807 1.12012 -15.9844 2.5c-3.40039 0.700195 -10.6006 1.2002 -20.9004 1.2002\n+c0.5 0 -0.700195 0 -3.2002 -0.5c5.40039 -1.30078 13.5 -4.2002 24.8008 -8.40039l6.39941 1.2002c-4.2002 -3.40039 -10.8994 -10.1006 -20.2002 -19.4004c-9.39941 -8.89941 -20.1992 -26.0996 -32.5 -50.2002l4.2002 1.2002l10.1006 9.2998l-5.40039 -4.69922\n+l13 12.2998l-2.5 -3.40039c-5.09961 -7.59961 -8.09961 -12.2998 -9.2998 -15.2002zM367.5 -25.0996c8.2998 40.2998 3.59961 55.1992 -0.700195 89.5c-35.5 -11.8008 -20.2998 -6 -32 -10.8008l10.5 -14.1992l-1.2002 -1.2002c-20.1992 6 -23.1992 10.7998 -27.7998 15\n+c6 -22.2002 13.9004 -26.4004 29.5 -31.7002c-9.5 -9.59961 -25.3994 4 -34.3994 13l2.5 -23.5996l-4.2002 -3c-5 22.0996 -22 39.0996 -25.2998 39.0996c-44 -13 -79.1006 -5.7998 -113.9 10.5996c-1.59961 -0.399414 -70.5996 -18 -120.5 37.1006\n+c13.7002 -35 32.2998 -63.7002 71.2998 -82.6006c-4.13574 8.56934 -13.4102 20.4863 -20.7002 26.6006c0 0 0.700195 3.7002 1.2002 10.0996c19.4004 -19.3994 50.7002 -39.5 93.2002 -60.2002c-59.5996 24.5 -59.9004 24.8008 -69.0996 29l16 -20.6992\n+c-3 -1.30078 -6.7002 -0.5 -10.1006 1.19922c-10.3359 6.03809 -26.1943 17.1484 -35.3994 24.8008c1.89941 -2.2002 80.0996 -98.5 200.899 -74.3008c-43.0996 21.8008 -52.3994 52.4004 -66.5996 73.5l17.7002 -7.59961l-11.8008 23.0996\n+c20.1006 -27.7998 28.6006 -35 38.4004 -44.2998l-30 16.5c12.5996 -27.0996 33.7002 -47 63.5 -58.7998c2.90039 1.5 9.09961 -1.09961 59 23.9004zM482.8 189.3l8.93066 -12.7998l-12.3008 32.5c10.9004 0 10 -0.0996094 21.2002 -3.40039\n+c-6.72168 9.44824 -18.8184 23.7842 -27 32l-26.5996 23.1006l1.2002 3l23.5996 2.5c-9.00293 1.98535 -23.7871 3.86719 -33 4.2002l-17.7002 -0.5l-0.5 2.89941l14.7998 13l-41.7998 -20.2002l-12.2998 18.9004l3.40039 -16l-2.5 -1.2002l-5.90039 4.2002h-10.0996\n+l5.39941 -4.2002v-2l-13.5 -27.7998c-10.0996 -31.2002 -21.8994 -67.9004 -35.3994 -109.7l1.19922 16l-1.19922 -3v-0.5c-6.40039 -16 -13.6006 -29.5 -21.2002 -39.5996l9.2998 21.8994l-46.7002 -20.1992c11.7998 13.5 23.6006 19.3994 34.9004 18.8994\n+c-71.2002 11.4004 -106.2 41 -110.4 46c3.60059 -6.2002 13.2002 -17.7998 16 -40.0996l-1.7002 -1.2002c-4.2998 15.5996 -16.3994 46.5996 -55.7998 69.5996l23.6006 -2.5c-10.5 12.6006 -36.3008 17.8008 -40.8008 16l-2.5 2.5l8.40039 8.40039l-22.2998 -5.7998\n+l5.39941 13.5c-8.09961 -4.40039 -4.2998 -2.40039 -17 -8.90039l-1.69922 0.5c0.599609 0.600586 0.899414 -0.700195 -3 9.2998c-0.600586 -11 -0.400391 -8.59961 -1 -11.7998c-1.07324 -0.355469 -2.73145 -1.11719 -3.7002 -1.7002c-40 20.6006 -57.2002 11 -73 5.2002\n+c36.7998 -6 29.2998 -4 38.3994 -9.2998c-25.7998 -12.2002 -31.8994 -12.5996 -51.3994 -70.0996l22.2695 22.2998l2.5 -16.4004c13.4004 -58 68.7002 -92.5 126.4 -83.3994l-26.1006 22.3994l44.8008 -22.3994l-1.2002 -3c4.59961 -1.7002 9.2998 -3 13.5 -4.2002\n+c16.4727 -4.87598 43.7852 -8.83203 60.9648 -8.83203c8.94727 0 23.3887 1.08887 32.2354 2.43164l-32.5 21.2002c35.7998 -7 50.6992 -31.4004 56.7998 -39.5996l-7.60059 29l1.2002 2.5l19 -27.9004l-9.2998 26.5996l21.9004 -13.5h1.19922l-3.39941 4.2002\n+l7.09961 -4.7002l-14.2998 16l1.2002 3l7.59961 -7.09961c4.2998 1.2002 41.4004 10.5 80.9004 40.2998c47.8994 35.4004 68.0996 73.7998 71.5996 79.7002l-3 9.2998zM476.7 260.6l-18.2002 -1.19922l14.2998 -11.8008zM221.9 253.5\n+c2.69922 -5.09961 5.69922 -12.4004 18.3994 -18.7998c-7.5 -10.9004 -8.2998 -10.5 -20.2002 -16c-7.59961 -7.7002 -13.5 -13.1006 -17.6992 -14.7998l7.09961 13c-4.61914 -1.69336 -12.3604 -3.06641 -17.2793 -3.06641c-2.08789 0 -5.45703 0.25293 -7.52051 0.566406\n+l-0.5 1.19922c19 2.10059 37.2002 9.40039 46.5 16c-4.10059 4.2002 -7.10059 11.3008 -8.7998 21.9004zM225.6 355.8c4.92578 -2.78809 11.3486 -8.9707 14.3008 -13.7998c14.6992 -24.0996 19.1992 -40.0996 11.2998 -47.7002\n+c-7.90039 -7.59961 -16.7998 -7.09961 -26.1006 3c-9.2998 10.1006 -13.5 23.7002 -11.7998 39.6006c1.7002 15.8994 5.90039 22.2998 12.2998 18.8994zM220.9 309.5c7.09961 -21.2998 33.3994 -23.0996 26.8994 4.90039c-3.89941 16.5 -8.7998 27.0996 -15.2002 32.5\n+c-6.59961 5.39941 -10.0996 6.69922 -11.2998 4.19922c-2.5 -2.89941 -3.5 -11.2998 -3 -24.7998c7.5 12.7998 11.6006 5.90039 12.5 4.7002l-0.5 -0.5c-0.799805 -1.7002 -2.59961 -3.09961 1.7002 -6.2002l1.2002 0.5v-4.7002\n+c-1.7998 -12.5 -6.90039 -12.7998 -12.2998 -10.5996zM175.9 315c-2.09375 0.388672 -4.49707 2.27051 -5.40039 4.2002c-3.5 8.5 0 21.2002 8.09961 21.2002c2 -0.5 3.7002 -1.7002 5.40039 -4.7002c-1.5 -0.400391 -4.7002 -4.7998 0.700195 -5.90039h0.5\n+c0 -13.7002 -7.7002 -15.0996 -9.2998 -14.7998zM216 365.1l-3.7002 2.40039l-0.5 2.5c18.2998 0 25.7998 -8.7998 28.2998 -14.2998c-6.0459 3.29688 -16.542 5.97266 -23.4297 5.97266c-0.737305 0 -1.93359 -0.0322266 -2.66992 -0.0732422l-0.5 3zM144.2 315.7\n+c1.59961 -1.60059 0.599609 -0.299805 4.89941 -6.60059c-25.3994 -4.69922 -23.1992 -12.2998 -30 -12.2998c0.300781 0.600586 7.10059 16 23.6006 16l-7.10059 7.60059c9.40039 0.5 15.2002 2.09961 19.9004 -5.90039c0.0175781 6.60938 1.31641 17.1826 2.90039 23.5996\n+c2 7.60059 3.69922 11.8008 5.39941 13.5c1 1.5 16.2998 15.7002 29 22.4004c2.05469 1.48047 5.77637 2.68262 8.30859 2.68262c1.48438 0 3.81055 -0.44043 5.19141 -0.982422c0.285156 -0.345703 0.515625 -0.989258 0.515625 -1.43652\n+c0 -0.0732422 -0.00683594 -0.191406 -0.015625 -0.263672l-13 -7.59961c7.60059 -11.8008 10.5 -25.3008 8.7998 -41.3008c-0.932617 -9.45898 -7.5625 -22.1377 -14.7998 -28.2998l2.90039 -4.7002c-30 2.2002 -24.7998 6.80078 -46.5 23.6006zM162.9 334.4\n+c-1.80078 -7.2002 -2.30078 -16 -3.10059 -26l5.40039 -6.40039l7.09961 -3.40039c2.01465 -0.384766 5.31445 -0.697266 7.36523 -0.697266c1.08887 0 2.85156 0.0888672 3.93457 0.197266c1 1.7002 3.5 4.2002 6.40039 7.60059c5 5.89941 7.90039 13.7998 8.40039 23.0996\n+c0.0703125 1.18262 0.126953 3.10449 0.126953 4.28906c0 5.92773 -1.40137 15.3408 -3.12695 21.0107c-3 8.10059 -5.90039 11 -10.1006 9.30078c-5.39941 -1.7002 -10.5996 -5.40039 -16 -11.8008c-3 -4.19922 -5.2002 -9.59961 -6.39941 -17.1992zM204.9 278.3\n+l-3.10059 -6.5c7.10059 4.2002 13.5 7.2002 19.4004 8.40039l7.09961 0.5l11.7998 -7.60059h-2.5c-8.7998 3.7002 -19.3994 1.2002 -30.6992 -7.59961c-0.5 -4.7002 1.69922 -14.7002 5.89941 -29.5l9.2002 0.5c-21.9004 -6.59961 -37.5996 -8.40039 -48.9004 -5.40039\n+c-24.8994 6.7002 -27.3994 23.6006 -27.5 24.1006c-1.47754 5.69238 -2.67676 15.0869 -2.67676 20.9688c0 3.53418 0.438477 9.23828 0.977539 12.7314c-6.40039 -0.5 -11 -4.2002 -15.2002 -10.6006c-2.90039 5.90039 -5.40039 8.7998 -5.90039 9.2998\n+c1.5 0.700195 12.2998 7.5 32.5 4.90039l0.5 -2.5l-5.89941 -1.2002c-0.100586 -0.399414 -1.90039 -29.5 18.8994 -24.7998c1.40039 0.299805 1.2998 -0.0996094 36.1006 14.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"acquisitions-incorporated\" unicode=\"&#xf6af;\" horiz-adv-x=\"384\" \n+d=\"M357.45 -20.2002c2.2002 -14.2998 4.09961 -28.7002 6.59961 -43.7002h-337.1c-4 0 -6.10059 0.700195 -5.2998 5.7002c2.09961 12.9004 3.5 25.9004 5 38.7998c0.5 4.80078 2.2998 6.80078 7.59961 6.80078c118.1 -1 114.9 -0.300781 121.4 2.39941\n+c9.39941 4 14.8994 12.9004 14.8994 23.1006c-0.0996094 42.8994 -0.299805 85.8994 -0.200195 128.8c0 3.7998 -1.19922 5.89941 -4.59961 6.7998c-15.7002 3.90039 -31.2998 7.7002 -47.5996 11.7002c-5.30078 -12.2998 -10.4004 -24.4004 -15.7002 -36.7002\n+c1.7998 -3.2998 28.3994 -2.90039 35.2998 -2.90039v-27.5996h-114.3c1 8.59961 1.7002 16.7998 3.2002 24.9004c0.299805 1.39941 3.59961 3.09961 5.5 3.19922c8.39941 0.400391 16.8994 0.300781 25.3994 0.100586c4 0 5.90039 1.09961 7.60059 5.2002\n+c16.5996 40.6992 13.5 31.1992 67.2998 161c31.5 76.0996 33 76 32.5996 87.3994c-0.700195 18.6006 -25.3994 22.2998 -37.7002 22.1006c-30 -0.400391 -38.3994 0.5 -101.8 0.5c-7.2002 44.5 -4.2002 32.0996 -6.39941 45.2998c-0.700195 4.2002 1 5.2998 4.59961 5.2998\n+l339.1 -0.200195c-0.799805 -5.39941 -1.59961 -10.7998 -2.39941 -16.0996c-1.2998 -9.7002 -2.7998 -19.4004 -4 -29.2002c-0.299805 -2.90039 -1.2002 -4.2998 -4.2998 -4.2998c-20.6006 -0.100586 -41.2002 -0.100586 -61.8008 -0.5\n+c-18.6992 -0.400391 -37.5996 -0.299805 -56.1992 -2c-13.4004 -1.2002 -23.3008 -12.6006 -18.9004 -26.6006c8.59961 -27.0996 27.7002 -69.0996 36.5 -89.1992c65.7002 -154.2 61.4004 -157 84 -158.601c6.59961 -0.5 13.4004 -0.0996094 20.4004 -0.0996094\n+c1.2998 -9.40039 2.59961 -18 4 -27.5h-116v27c10.3994 0 20.3994 0.0996094 30.3994 -0.100586c3.5 0 5 0.700195 3.40039 4.40039c-4.40039 10.2998 -8.7002 20.5996 -13.2002 30.9004c-1.59961 3.69922 -4.09961 4.7998 -8.40039 3.5\n+c-12.3994 -3.60059 -24.7998 -6.7002 -37.2998 -9.7002c-4.2998 -1.10059 -6 -2.7998 -5.89941 -7.5c0.799805 -57.5 0.899414 -127.5 1 -129.101c0.399414 -12.5996 8.69922 -21.3994 21 -23.0996c0.899414 -0.200195 12.8994 -2.7998 112.699 -2.59961\n+c8.30078 0 8.40039 0.0996094 9.60059 -7.60059zM182.55 185.5c2.46484 -0.869141 6.58691 -1.5752 9.2002 -1.5752s6.73535 0.706055 9.2002 1.5752c13 4.2002 26.2998 7.7998 39.3994 11.7002c1.1123 0.512695 2.86035 1.45312 3.90039 2.09961\n+c-6.7002 17.4004 -13.0996 34.2002 -19.7002 50.9004c-8.89941 22.7002 -17.7002 60.2998 -27 82.7998c-1.5 0.799805 -1.89941 -2.40039 -9.39941 0c-17.1006 -44 -34.1006 -87.7998 -51.3008 -132.1c1.54297 -0.917969 4.1416 -2.2168 5.80078 -2.90039\n+c13.2998 -4.2998 26.5996 -8.2998 39.8994 -12.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"critical-role\" unicode=\"&#xf6c9;\" \n+d=\"M225.82 448c0.259766 -0.150391 216.569 -124.51 217.12 -124.72c3 -1.18066 3.69922 -3.45996 3.69922 -6.56055c-0.0732422 -83.4463 -0.0732422 -166.899 0 -250.359c0.00976562 -0.124023 0.0175781 -0.326172 0.0175781 -0.450195\n+c0 -2.06836 -1.52148 -4.45703 -3.39746 -5.33008c-21.3701 -12 -207.859 -118.29 -218.93 -124.58h-3c-79.3301 45.6602 -218.25 125.44 -218.4 125.52c-1.04297 0.491211 -1.89062 1.8252 -1.89062 2.97754c0 0.0732422 0.00488281 0.19043 0.0107422 0.262695\n+c0 0.870117 0 225.94 -0.0498047 253.101c-0.0078125 0.102539 -0.0136719 0.269531 -0.0136719 0.37207c0 1.78223 1.31836 3.82422 2.94336 4.55762c23.2607 13.0996 209.271 119.21 220.141 125.21h1.75zM215.4 427.58l-0.219727 0.158203\n+c-64.7471 -36.8604 -129.474 -73.7305 -194.18 -110.61c0 -0.120117 0.0800781 -0.229492 0.129883 -0.349609l30.8604 -11.6406c-7.70996 -6 -8.32031 -6 -10.6504 -5.12988c-0.0996094 0 -24.1699 9.28027 -26.7998 10v-230.43\n+c0.879883 1.41016 64.0703 110.91 64.1299 111c1.62012 2.82031 3 1.91992 9.12012 1.51953c1.40039 -0.0898438 1.47949 -0.219727 0.780273 -1.41992c-41.1904 -71.3301 -36.4004 -63 -67.4805 -116.939c-0.80957 -1.40039 -0.609375 -1.12988 1.25 -1.12988h186.5\n+c1.44043 0 1.69043 0.229492 1.7002 1.63965v8.87988c0 1.33984 2.36035 0.810547 -18.3701 1c-7.45996 0.0703125 -14.1396 3.21973 -21.3799 12.7002c-7.37988 9.66016 -14.6201 19.4297 -21.8496 29.21c-2.28027 3.08008 -3.4502 2.37988 -16.7607 2.37988\n+c-1.75 0 -1.7793 0 -1.75977 -1.82031c0.290039 -26.21 0.150391 -25.2695 1 -32.6592c0.520508 -4.37012 2.16016 -4.2002 9.69043 -4.81055c3.13965 -0.259766 3.87988 -4.08008 0.519531 -4.91992c-1.57031 -0.389648 -31.5996 -0.509766 -33.6699 0.0996094\n+c-0.982422 0.269531 -1.78027 1.31543 -1.78027 2.33398c0 1.16016 0.931641 2.2334 2.08008 2.39648c3.29004 0.759766 6.16016 -0.80957 6.66016 4.44043c1.2998 13.6592 1.16992 9 1.09961 79.4199c0 10.8193 -0.349609 12.5801 -5.35938 13.5498\n+c-1.21973 0.240234 -3.54004 0.160156 -4.69043 0.549805c-2.87988 1 -2 4.83984 1.77051 4.84961c33.6699 0 46.0801 1.07031 56.0596 -4.85938c7.74023 -4.61035 12 -11.4805 12.5098 -20.4004c0.880859 -14.5898 -6.50977 -22.3496 -15 -32.5898\n+c-0.282227 -0.241211 -0.510742 -0.738281 -0.510742 -1.11035c0 -0.371094 0.228516 -0.868164 0.510742 -1.10938c2.60059 -3.25 5 -6.62988 7.70996 -9.83008c27.5605 -33.2305 24.1104 -30.54 41.2803 -33.0605c0.890625 -0.129883 1 0.419922 1 1.15039v11\n+c0 1 0.320312 1.42969 1.41016 1.25977c2.98633 -0.454102 7.86133 -0.822266 10.8818 -0.822266c3.53223 0 9.2207 0.50293 12.6982 1.12207c1.08008 0.150391 1.5 -0.199219 1.47949 -1.33008c0 -0.109375 0.880859 -26.6895 0.870117 -26.7998\n+c-0.0498047 -1.51953 0.669922 -1.62012 1.89062 -1.62012h186.71c-27.1533 47.0342 -54.2334 93.9746 -81.2402 140.821c2.25977 0.660156 -0.400391 0 6.69043 1.38965c2 0.390625 2.0498 0.410156 3.10938 -1.43945c7.31055 -12.6396 77.3105 -134 77.3701 -134.061\n+v230.44c-1.71973 -0.5 -103.3 -38.7197 -105.76 -39.6797c-1.08008 -0.419922 -1.5498 -0.200195 -1.91016 0.879883c-0.629883 1.89941 -1.33984 3.75977 -2.08984 5.62012c-0.320312 0.790039 -0.0898438 1.12988 0.649414 1.38965\n+c0.100586 0 95.5303 35.8496 103 38.7705c-65.4199 37.5693 -130.56 75 -196 112.6l86.8203 -150.39l-0.280273 -0.330078c-9.56934 0.899414 -10.46 1.59961 -11.7998 3.93945c-1 1.69043 -73.5 127.71 -82 142.16c-9.09961 -14.6699 -83.5596 -146.21 -85.3701 -146.32\n+c-2.92969 -0.169922 -5.87988 -0.0800781 -9.25 -0.0800781c28.833 49.8271 57.5596 99.4941 86.1797 149.001zM267.331 297.658c1.54688 0.120117 4.02832 0.500977 5.54004 0.849609c1.68945 0.299805 2.53027 -0.200195 2.59961 -1.91992\n+c0 -0.109375 0.0703125 -19.0596 -0.859375 -20.4502c-0.930664 -1.38965 -1.87988 -1.21973 -2.60059 0.19043c-5 9.68945 6.2207 9.66016 -39.1201 12c-0.699219 0 -1 -0.230469 -1 -0.929688c0 -0.130859 3.7207 -122 3.73047 -122.11\n+c0 -0.889648 0.519531 -1.2002 1.20996 -1.50977c2.46484 -0.980469 6.3623 -2.79492 8.7002 -4.0498c7.30957 -4.33008 11.3799 -10.8408 12.4102 -19.3105c1.43945 -11.7998 -2.77051 -35.7695 -32.21 -37.1396c-2.75 -0.129883 -28.2607 -1.08008 -34.1406 23.25\n+c-4.66016 19.2598 8.25977 32.7002 19.8906 36.3994c1.11035 0.202148 2.0127 1.28223 2.0127 2.41113c0 0.0683594 -0.00585938 0.180664 -0.0126953 0.249023c0.0996094 5.62988 3 107.101 3.70996 121.351c0.0498047 1.0791 -0.620117 1.15918 -1.35059 1.14941\n+c-32.3496 -0.519531 -36.75 0.339844 -40.2197 -8.51953c-2.41992 -6.18066 -4.13965 -1.32031 -3.9502 -0.230469c1.05957 6 2.16309 12 3.31055 18c0.399414 2.11035 1.42969 2.61035 3.42969 1.86035c5.58984 -2.11035 6.71973 -1.7002 37.25 -1.91992\n+c1.72949 0 1.78027 0.0800781 1.82031 1.84961c0.679688 27.4902 0.579102 22.5898 1 29.5498c0.00976562 0.0878906 0.0185547 0.231445 0.0185547 0.320312c0 0.986328 -0.738281 2.09766 -1.64941 2.48047c-5.59961 2.90918 -8.75 7.5498 -8.89941 13.8691\n+c-0.350586 14.8105 17.7197 21.6699 27.3799 11.5107c6.83984 -7.19043 5.7998 -18.9102 -2.4502 -24.1504c-1.24316 -0.68457 -2.25195 -2.3916 -2.25195 -3.81055c0 -0.146484 0.0146484 -0.383789 0.0322266 -0.529297c0 -0.589844 -0.110352 4.30957 1 -30.0498\n+c0 -0.900391 0.429688 -1.12012 1.24023 -1.11035c0.0996094 0 23 0.0898438 34.4697 0.370117zM68.2705 306.298c19.8408 4.50977 32.6807 0.560547 52.4902 -1.68945c2.75977 -0.310547 3.74023 -1.2207 3.62012 -4c-0.209961 -5 -1.16016 -22.3301 -1.24023 -23.1504\n+c-0.0371094 -0.932617 -0.767578 -1.98145 -1.62988 -2.33984c-4.05957 -1.7002 -3.60938 4.4502 -4 7.29004c-3.12988 22.4297 -73.8701 32.7002 -74.6299 -25.4004c-0.30957 -23.9199 17 -53.6299 54.0801 -50.8799c27.2402 2 19 20.1904 24.8398 20.4697\n+c0.0996094 0.0136719 0.261719 0.0244141 0.362305 0.0244141c1.50195 0 2.7207 -1.21875 2.7207 -2.71973c0 -0.186523 -0.0371094 -0.483398 -0.0830078 -0.664062c-1.83008 -10.8506 -3.41992 -18.9502 -3.4502 -19.1504\n+c-1.54004 -9.16992 -86.6992 -22.0898 -93.3496 42.0605c-2.70996 25.8496 10.4404 53.3691 40.2695 60.1494zM148.271 218.628h-19.4893c-0.0576172 -0.00488281 -0.151367 -0.00878906 -0.208984 -0.00878906c-1.04102 0 -2.13867 0.805664 -2.45117 1.79883\n+c2.37988 3.75 5.88965 -0.919922 5.86035 6.13965c-0.0800781 25.75 0.209961 38 0.229492 40.1006c0 3.41992 -0.530273 4.64941 -3.32031 4.93945c-7 0.720703 -3.10938 3.37012 -1.10938 3.38086c11.8398 0.0996094 22.6201 0.179688 30.0498 -0.720703\n+c8.76953 -1.06934 16.71 -12.6299 7.92969 -22.6201c-2 -2.25 -4 -4.41992 -6.13965 -6.72949c0.950195 -1.15039 6.89941 -8.82031 17.2803 -19.6797c2.65918 -2.78027 6.14941 -3.51074 9.87988 -3.13086h0.0214844c1.1709 0 2.16016 0.950195 2.20801 2.12012\n+c0.299805 3.41992 0.259766 -4.72949 0.450195 40.5801c0 5.65039 -0.339844 6.58008 -3.22949 6.83008c-3.9502 0.350586 -4 2.25977 -0.69043 3.37012l19.0898 0.0898438c0.320312 0 4.49023 -0.530273 1 -3.37988c0 -0.0498047 -0.160156 0 -0.240234 0\n+c-3.60938 -0.259766 -3.93945 -1 -4 -4.62012c-0.269531 -43.9297 0.0703125 -40.2295 0.410156 -42.8203c0.110352 -0.839844 0.270508 -2.22949 5.10059 -2.13965c2.48926 0 3.85938 -3.37012 0 -3.39941c-10.3701 -0.0800781 -20.7402 0 -31.1104 -0.0703125\n+c-10.6699 0 -13.4697 6.2002 -24.21 20.8203c-1.59961 2.17969 -8.31055 2.35938 -8.2002 0.369141c0.879883 -16.4697 0 -17.7793 4 -17.6699c4.75 0.100586 4.73047 -3.56934 0.830078 -3.5498h0.0595703zM423.271 228.778\n+c-1.20996 -7.12988 0.170898 -10.3799 -5.2998 -10.3398c-61.5498 0.419922 -47.8193 0.219727 -50.7197 0.30957c-1.02246 0.100586 -2.64844 0.426758 -3.62988 0.730469c-2.53027 0.599609 1.47949 1.22949 -0.379883 5.59961\n+c-1.43066 3.37012 -2.78027 6.78027 -4.11035 10.1895c-0.210938 0.797852 -1.05078 1.44434 -1.875 1.44434c-0.0351562 0 -0.0908203 -0.00195312 -0.125 -0.00390625c-1.82812 0.0878906 -4.79785 0.15918 -6.62793 0.15918\n+c-2.19727 0 -5.75879 -0.102539 -7.95215 -0.229492c-0.587891 -0.0771484 -1.31348 -0.551758 -1.62012 -1.05957c-1.58008 -3.62012 -3.06934 -7.29004 -4.50977 -11c-1.26953 -3.23047 7.86035 -1.32031 12.1904 -2.16016c3 -0.570312 4.5293 -3.71973 0.65918 -3.72949\n+h-26.3691c-2.91992 0 -3.09082 3.14941 -0.740234 3.20996c0.0791016 -0.00390625 0.208008 -0.00683594 0.288086 -0.00683594c2.14648 0 4.66992 1.55762 5.63184 3.47656c1.5 3 2.7998 6 4.11035 9.08984c18.1797 42.1396 17.0596 40.1699 18.4199 41.6104\n+c0.300781 0.431641 0.973633 0.78125 1.5 0.78125s1.19824 -0.349609 1.5 -0.78125c2.92969 -3.33984 18.3994 -44.71 23.6201 -51.9199c2 -2.7002 5.73926 -2 6.35938 -2c3.61035 -0.130859 4 1.10938 4.12988 4.29004\n+c0.0898438 1.86914 0.0800781 -1.1709 0.0703125 41.2393c0 4.45996 -2.36035 3.74023 -5.5498 4.27051c-0.259766 0 -2.56055 0.629883 -0.0800781 3.05957c0.209961 0.200195 -0.890625 0.240234 21.7002 0.150391c2.31934 0 5.31934 -2.75 -1.20996 -3.4502\n+c-0.0322266 0.000976562 -0.0830078 0.00292969 -0.115234 0.00292969c-1.41309 0 -2.55957 -1.14746 -2.55957 -2.56055c0 -0.0751953 0.00683594 -0.197266 0.0146484 -0.272461c-0.0703125 -1.62988 -0.19043 -38.8896 0.290039 -41.21\n+c0.27832 -1.34668 1.62109 -2.43848 2.99609 -2.43848c0.0644531 0 0.168945 0.00390625 0.233398 0.00878906c13.25 -0.430664 14.9199 -0.44043 16 3.41016c1.66992 5.7793 4.12988 2.51953 3.73047 0.189453zM318.551 164.408\n+c-4.24023 0 -4.41992 3.38965 -0.609375 3.41016c35.9092 0.160156 28.1094 -0.379883 37.1895 0.649414c1.67969 0.19043 2.37988 -0.239258 2.25 -1.88965c-0.259766 -3.38965 -0.639648 -6.78027 -1 -10.1602c-0.25 -2.16016 -3.2002 -2.61035 -3.39941 0.150391\n+c-0.380859 5.30957 -2.15039 4.44922 -15.6309 5.08008c-1.58008 0.0693359 -1.63965 0 -1.63965 -1.52051v-16.1299c0 -1.65039 0 -1.59961 1.62012 -1.46973c3.12012 0.25 10.3096 -0.339844 15.6895 1.51953c0.470703 0.160156 3.30078 1.79004 3.07031 -1.75977\n+c0 -0.209961 -0.759766 -10.3496 -1.17969 -11.3896c-0.530273 -1.29004 -1.87988 -1.51074 -2.58008 -0.320312c-1.16992 2 0 5.08008 -3.70996 5.2998c-15.4199 0.900391 -12.9102 2.5498 -12.9102 -6c0 -12.25 -0.759766 -16.1104 3.88965 -16.2402\n+c16.6406 -0.479492 14.4004 0 16.4307 5.70996c0.839844 2.37012 3.5 1.77051 3.17969 -0.580078c-0.44043 -3.20996 -0.849609 -6.42969 -1.22949 -9.63965c0 -0.360352 -0.160156 -2.39941 -4.66016 -2.38965c-37.1602 0.0800781 -34.54 0.189453 -35.21 0.30957\n+c-2.7207 0.509766 -2.2002 3 0.219727 3.4502c1.09961 0.19043 4 -0.540039 4.16016 2.55957c2.43945 56.2207 -0.0703125 51.3408 -3.91016 51.3301zM318.141 273.928c2.45996 -0.609375 3.12988 -1.75977 2.9502 -4.64941\n+c-0.330078 -5.2998 -0.339844 -9 -0.549805 -9.69043c-0.660156 -2.22949 -3.15039 -2.12012 -3.33984 0.270508c-0.379883 4.80957 -3.0498 7.81934 -7.57031 9.14941c-26.2803 7.73047 -32.8096 -15.46 -27.1699 -30.2197c5.87988 -15.4102 22 -15.9199 28.8604 -13.7803\n+c5.91992 1.85059 5.87988 6.5 6.91016 7.58008c1.22949 1.2998 2.25 1.83984 3.11914 -1.09961c0 -0.100586 0.570312 -11.8906 -6 -12.75c-1.59961 -0.209961 -19.3799 -3.69043 -32.6797 3.38965c-21 11.1904 -16.7402 35.4697 -6.87988 45.3301\n+c14 14.0596 39.9102 7.05957 42.3203 6.46973h0.0292969zM289.801 167.858c3.28027 0 3.66016 -3 0.160156 -3.43066c-2.61035 -0.319336 -5 0.419922 -5 -5.45996c0 -2 -0.19043 -29.0498 0.400391 -41.4502c0.109375 -2.28906 1.14941 -3.51953 3.43945 -3.64941\n+c22 -1.20996 14.9502 1.64941 18.79 6.33984c1.83008 2.24023 2.75977 -0.839844 2.75977 -1.08008c0.350586 -13.6201 -4 -12.3896 -5.18945 -12.3994l-38.1602 0.189453c-1.92969 0.230469 -2.05957 3 -0.419922 3.37988c2 0.480469 4.93945 -0.399414 5.12988 2.7998\n+c1 15.8701 0.570312 44.6504 0.339844 47.8105c-0.269531 3.76953 -2.7998 3.26953 -5.67969 3.70996c-2.46973 0.379883 -2 3.21973 0.339844 3.21973c1.4502 0.0205078 17.9697 0.0302734 23.0898 0.0205078zM258.171 225.648\n+c0.0703125 -4.08008 2.86035 -3.45996 6 -3.58008c2.61035 -0.100586 2.53027 -3.41016 -0.0703125 -3.43066c-6.47949 0 -13.6992 0 -21.6094 0.0605469c-3.83984 0 -3.37988 3.34961 0 3.37012c4.49023 0 3.24023 -1.61035 3.41016 45.54\n+c0 5.08008 -3.27051 3.54004 -4.7207 4.22949c-2.58008 1.23047 -1.35938 3.08984 0.410156 3.15039c1.29004 0 20.1904 0.410156 21.1699 -0.209961c0.980469 -0.620117 1.87012 -1.65039 -0.419922 -2.86035c-1 -0.519531 -3.85938 0.280273 -4.14941 -2.46973\n+c0 -0.209961 -0.820312 -1.62988 -0.0703125 -43.7998h0.0498047zM221.261 -48.6221c0.408203 -0.273438 1.13867 -0.495117 1.62988 -0.495117c0.492188 0 1.22168 0.22168 1.62988 0.495117c17 9.79004 182 103.57 197.421 112.51\n+c-0.140625 0.430664 11.2598 0.180664 -181.521 0.270508c-1.21973 0 -1.57031 -0.370117 -1.53027 -1.56055c0 -0.0996094 1.25 -44.5098 1.2207 -50.3799c-0.0791016 -2.17969 -0.688477 -5.63379 -1.36035 -7.70996c-0.549805 -1.83008 0.379883 0.5 -13.5 -32.2295\n+c-0.730469 -1.7207 -1 -2.20996 -2 0.0800781c-4.19043 10.3398 -8.28027 20.7197 -12.5703 31c-1.12109 2.52441 -2.03125 6.81543 -2.03125 9.57812c0 0.333984 0.0146484 0.876953 0.03125 1.21191c0.160156 2.45996 0.800781 16.1191 1.51074 48c0 1.94922 0 2 -2 2\n+h-183c2.5791 -1.63086 178.319 -102.57 196 -112.761zM130.361 140.128c0 -2.39941 0.359375 -2.79004 2.75977 -3c11.54 -1.16992 21 -3.74023 25.6396 7.32031c6 14.46 2.66016 34.4102 -12.4795 38.8398c-2 0.589844 -16 2.75977 -15.9404 -1.50977\n+c0.0498047 -8.04004 0.00976562 -11.6104 0.0205078 -41.6504zM236.111 155.178c0 -2.12988 1.06934 -38.6797 1.08984 -39.1299c0.339844 -9.93945 -25.5801 -5.76953 -25.2305 2.58984c0.0800781 2 1.37012 37.4199 1.10059 39.4307\n+c-14.1006 -7.44043 -14.4199 -40.21 6.43945 -48.8008c1.88184 -0.816406 5.0752 -1.47949 7.12695 -1.47949c5.53418 0 12.3721 3.83008 15.2637 8.5498c4.90918 7.75977 6.83984 29.4697 -5.43066 39c-0.0966797 -0.0400391 -0.257812 -0.09375 -0.359375 -0.120117\n+v-0.0400391zM223.831 353.178c-9.83008 0 -9.73047 -14.75 -0.0703125 -14.8701c9.66016 -0.119141 10.1006 14.8809 0.0703125 14.9102v-0.0400391zM143.681 249.348c0 -1.7998 0.410156 -2.39941 2.16992 -2.58008c13.6201 -1.38965 12.5107 11 12.1602 13.3604\n+c-1.68945 11.2197 -14.3799 10.2002 -14.3496 7.81055c0.0498047 -4.5 -0.0302734 -13.6807 0.0195312 -18.5908zM356.001 242.948l-6.09961 15.8398c-2.16016 -5.48047 -4.16016 -10.5703 -6.23047 -15.8398h12.3301z\" \u002F>\n+    \u003Cglyph glyph-name=\"d-and-d-beyond\" unicode=\"&#xf6ca;\" horiz-adv-x=\"640\" \n+d=\"M313.8 206.5c-9.89941 0 -16 7 -15.7002 7.09961c-4.2998 5.7002 -3 -0.299805 -2.39941 -1.89941c-10.9004 10.2998 -5.2998 25.3994 -5.10059 26c0.700195 1.89941 0 2.2002 -0.599609 1.89941c-1 -0.299805 -2.09961 -1.89941 -2.09961 -1.89941\n+c0.799805 9.09961 9.2998 14.7002 9.2998 14.7002l0.200195 -0.200195c1 -1.5 -0.400391 -3.2002 -0.600586 -9c1.60059 2.2998 7.90039 6.59961 11.4004 7.89941c-1.10059 -1.5 -2.10059 -3.59961 -2.10059 -6.59961c3.7002 4.2002 7.5 2.59961 8 2.40039\n+c-12.1992 -11.9004 -7 -26.6006 3.2002 -26.6006c5.7002 0 11.5 6.40039 13.9004 10.7002c2.39941 -2.40039 6.39941 -5.5 7.39941 -6.59961c-3.7998 -7.80078 -11 -17.9004 -24.7998 -17.9004zM366.2 227.6c0 -2.89941 -2.90039 -4.09961 -5.40039 -4.5\n+c0.700195 1.5 1.7998 5.10059 -0.200195 9c0.700195 -0.0996094 5.60059 -0.5 5.60059 -4.5zM376.5 222.4c-0.400391 -6.5 -6.90039 -11.6006 -14.5996 -10.6006c2 -1.7002 6.59961 -3 9 -1.89941c-3.90039 -6.90039 -23.1006 -7.5 -23.1006 6.39941\n+c-2.89941 -2.89941 -2.09961 -7.39941 0 -9.2998c-2.2002 0.700195 -5.7998 3.09961 -6.39941 7.40039c-1.30078 10.0996 4.39941 6.5 -10.4004 18.0996c-4.7998 3.7002 -3 6.59961 -4 8.5c-1.09961 2.2002 -7 4.09961 -4.5 8.5\n+c-0.0996094 -1.59961 1 -2.90039 2.59961 -3.5c1.80078 -0.700195 3.2002 -0.200195 4.80078 -1c1.69922 -1.2002 0.899414 -3.90039 2.19922 -5c1.10059 -0.799805 4.2002 0.299805 6.60059 -1.7998c2.59961 -2 8.2002 -6.7002 10.5996 -8.60059\n+c4.40039 -3.59961 8.7998 0.400391 7.40039 4.60059c4.5 -2.60059 5 -9.90039 1.2998 -12.5c10.5996 -2.40039 13 10.0996 5 11.3994c7.2998 0.700195 13.5 -4.2998 13.5 -10.6992zM337.1 240.8c4.30078 6.10059 13.3008 15.2998 23.8008 15.7998\n+c-5.90039 0.800781 -15.1006 -3.19922 -19.7002 -9c0.899414 3.90039 5.09961 10.1006 10.2002 13c0 0 -2.5 -3.19922 -1.40039 -3.69922c1.59961 -0.800781 5.7998 5.69922 11.2002 5.89941c0 0 -4 -2 -3.2002 -3.39941c0.599609 -0.900391 3.2998 1.2998 8 1.2998\n+c5.7998 0 10.9004 -3.5 13.2998 -6.2002c-4 1.09961 -11.5996 -0.799805 -13.7998 -2.7002c-0.299805 0.200195 -11.7998 9 -22 -15.5c-4.7998 3.7998 -4.40039 3.7002 -6.40039 4.5zM579.6 188.9c37.2002 0 60.4004 -19.6006 60.4004 -48.9004\n+c0 -28.2002 -17 -48.9004 -59.0996 -48.9004c-20.7002 0 -41.2002 1.30078 -51.6006 2.10059l7.40039 8.2002v77.1992l-7.40039 8.2002c10.2998 0.799805 29.6006 2.10059 50.2998 2.10059zM564.5 113.3c25.4004 -3.2002 46.7998 1.40039 46.7998 27\n+c0 22.5 -16.7002 29.6006 -46.7998 26.2998v-53.2998zM301.6 267c0.100586 -0.299805 -2.7998 2.2998 -3.2998 7.5c-0.200195 2.2998 0 19.7998 20 18.9004c11.2002 -0.600586 16.7002 -8.30078 16.7002 -16.5c0 -4.30078 -2.2998 -10.1006 -5.5 -13.8008\n+c-2.2002 2.2002 -5.59961 4.60059 -7.7002 7.80078c3.7998 5.59961 2.2002 14.3994 -4.7002 14.3994c-4.2998 0 -7.7998 -4.5 -6.39941 -9.89941c-0.700195 -2.40039 -1 -5.60059 -0.5 -8c-4.90039 2.59961 -6.5 6 -7.5 9c-1.2998 -2.5 -2.10059 -6 -1.10059 -9.40039z\n+M301.2 261c0.299805 1.7002 -3.10059 4.59961 -4.7998 5.2002c4.7998 0.200195 7 -0.600586 7 -0.600586c-1.30078 1.7002 -1.60059 4.5 -1 6.7002c2.5 -6.09961 11.6992 -7.09961 13.8994 -12.2002c-0.299805 2.30078 -2.39941 4.7002 -4.7998 6.10059\n+c-1.2998 3.2002 -0.299805 9.39941 1.2998 11c-0.5 -8.7998 12 -13.7998 14.6006 -20.2002c-1.40039 5.5 -7.40039 9 -10.1006 12.2002c-1 2.09961 -0.200195 5.7998 0.799805 7.09961c-0.5 -9.7002 15.8008 -14.2998 14.1006 -23.8994\n+c0.899414 -0.400391 2.09961 -1.2002 1.89941 -2.60059c1.30078 0.299805 2.60059 1.7002 2.90039 2.7002c0.700195 -4.5 -1.90039 -9 -4.7998 -10.4004c1.59961 4 -2.7002 5.60059 -6.7002 5.10059c0 0 1.59961 2.2998 1 3.39941\n+c-0.799805 1.5 -8 0.800781 -11.2002 -0.299805c1.10059 0.100586 3.60059 -0.200195 4.60059 -0.5c-2.10059 -2.89941 -1 -7.09961 1.2998 -4.2002c0 0 -1.10059 -3.5 -0.299805 -4.2998c0.799805 -0.799805 2.59961 -0.200195 2.59961 -0.200195\n+c-1.2002 -2.69922 -5.2998 -4.59961 -8.2002 -4.59961c1.10059 0.400391 2.7002 2.2998 3 3.40039c-0.799805 -0.5 -2.7002 -0.700195 -3.5 -0.5c6.10059 3 0 13.1992 -7 8.19922c1 2.7002 3.7002 5.30078 5.7998 6.10059c-1.2998 0.5 -2.69922 0.799805 -4.2998 1.09961\n+c1.7998 1.5 6.2998 2.7998 8.5 2.60059c-3.5 0.799805 -9.89941 -0.300781 -12.7998 -3.7002c0.900391 0 3.2998 -0.5 4.2998 -0.799805c-4 -0.700195 -9.39941 -4.40039 -11 -6.2002c0.299805 2.2002 1 4.2002 0.5 5.59961c-0.799805 2 -3 2.7998 -7.7998 1.7998\n+c3.2002 3.2002 9.7002 5.10059 10.2002 6.90039zM327.1 253.6c0 0 -0.899414 3 -4.19922 4.30078c0.699219 -2.2002 1.5 -4.30078 4.19922 -4.30078zM366 249.9l0.700195 0.699219c0.5 0.400391 1.59961 0.900391 2.7002 1.40039v-18.4004\n+c-1.7002 0.800781 -3.5 1.10059 -5.60059 1.10059c-2.39941 0 -5 -0.5 -5 -0.5c-0.5 0.5 -3.59961 2.89941 -5.09961 3.2002c4.09961 -4.30078 0.5 -9.80078 -3 -7.2002v15.7002c0.700195 0.799805 1.2998 1.7998 2.09961 2.59961\n+c1.7002 2.09961 4.60059 3.40039 7.5 3.40039c1.7998 0 3.60059 -0.400391 4.7002 -1.40039zM79.9004 142.1c22 -6.39941 19.3994 -20.0996 19.3994 -25.1992c0 -7.80078 -3.2002 -13.6006 -9.89941 -17.6006c-12.6006 -7.39941 -24.7002 -5.89941 -86.4004 -5.89941\n+l8.40039 8.59961v32.2998l-11.4004 14.6006h11.2998v29.5l-8.2998 8.59961h56.0996c12.9004 0 37 -4.40039 37 -25c0 -1.90039 1 -15.2998 -16.1992 -19.9004zM38.5996 169.6v-20.8994c10.6006 0 29.6006 -3.2998 29.6006 8.7998v3\n+c0 9.90039 -9.60059 9.09961 -29.6006 9.09961zM38.5996 110.4c20.4004 0 32.9004 -1.90039 32.9004 9.2998h-0.200195v4.5c0 11.0996 -20.5 8.7998 -32.7002 8.7998v-22.5996zM139.8 129.7v-15.4004l60.1006 0.200195l-14.1006 -21.2002h-81.2002l7.40039 8.2002v77.0996\n+l-7.40039 8.2002l73.5 0.200195v-0.200195l14.1006 -21h-52.4004v-14.8994h37.2002l-14.0996 -21.2002v-0.200195zM354.5 189.8c73.7998 0 77.5996 -99.2998 -0.299805 -99.2998c-77.2002 0 -73.6006 99.2998 0.299805 99.2998zM354.2 112.3\n+c39 0 37 55.2002 0.200195 55.2998c-37.1006 0 -37.6006 -55.2998 -0.200195 -55.2998zM262.9 120.6l0.199219 -19l7.2002 -8.19922h-42.5996l7.7002 8.19922l-0.200195 19.4004l-44.1006 65.7998h44.9004l-6.40039 -7.2002l21 -37.1992h0.300781l20.5 37.1992\n+l-6.10059 7.2002h41.7002zM234.5 271.9c-9.09961 6.69922 -9.5 14.0996 -9.59961 14.8994c7.2998 -4.2998 9 -4 39.8994 -4c-5.7998 0 24 3.10059 32.2002 -22.8994c-0.400391 0 -8.40039 -4.80078 -10.4004 -7.90039c5.30078 1.90039 8.90039 1.09961 9 1.09961\n+c-8 -5.09961 -9.59961 -14.7998 -9.59961 -20.5c0.900391 2.10059 2.7002 3.7002 2.7002 3.5c-0.600586 -2.5 -1.40039 -7 -0.799805 -12c-8.60059 -7.09961 -16 -8.59961 -26 -8.59961h-35.1006c0.400391 0.0996094 7.7998 4.5 7.90039 4.59961\n+c1.89941 1.10059 2.7002 2.2002 2.7002 6.40039v38.7998c0 4.2002 -1.30078 5.2998 -2.90039 6.60059zM256 266.4v-34.6006c4.7002 0 23.0996 -3.39941 23.0996 17.2998c0 20.6006 -18.5 17.3008 -23.0996 17.3008zM484.9 186.8l39.1992 -0.0996094l-7.39941 -8.2998\n+v-85.2002h-21.2998c-4 12.7002 -44.8008 45 -48.5 55.5996h-0.300781v-47.3994l7.40039 -8.2002h-39l7.2002 8.2998v76.9004l-7.40039 8.5h31.6006c2.89941 -9.40039 39.7998 -36.5 45.1992 -50.9004h0.300781v42.5zM378.2 282.9\n+c32.7002 -1.60059 33.7998 -29.8008 33.7998 -33.6006c0 -6.7002 -3.2998 -34 -36.7002 -34h-0.299805c3.59961 4.2998 3.5 11.9004 -2.2002 16.2998c1.2002 0 19.7002 -3.19922 19.7002 17.3008c0 20.6992 -18.4004 17.2998 -23.0996 17.2998v-4.2998\n+c-5.40039 0.799805 -7.40039 -0.300781 -7.5 -0.300781c2.09961 1.80078 4.5 2.60059 6.09961 2.90039c-7.09961 1.59961 -13.5996 -2.40039 -14.5996 -3.5c0.799805 1.7998 2.39941 3.40039 3.5 4.5c-2.30078 -0.799805 -4.30078 -1.90039 -6.10059 -3\n+c0 5.2002 0.200195 7.5 -2.89941 9.5c-9.10059 6.59961 -9.5 14.2002 -9.60059 14.9004c7.10059 -4.2002 7.7002 -4 39.9004 -4z\" \u002F>\n+    \u003Cglyph glyph-name=\"dev\" unicode=\"&#xf6cc;\" \n+d=\"M120.12 239.71c3.87012 -2.90039 5.82031 -7.25977 5.83008 -13.0596v-69.6504c0 -5.80957 -1.94043 -10.1602 -5.82031 -13.0596c-3.87988 -2.90039 -7.76953 -4.35059 -11.6494 -4.35059h-17.4502v104.47h17.4395c3.87988 0 7.77051 -1.44922 11.6504 -4.34961z\n+M404.1 416c24.2002 0 43.8408 -19.5898 43.9004 -43.7998v-360.4c-0.0595703 -24.21 -19.6904 -43.7998 -43.9004 -43.7998h-360.199c-24.2002 0 -43.8408 19.5898 -43.9004 43.7998v360.4c0.0595703 24.21 19.7002 43.7998 43.9004 43.7998h360.199zM154.2 156.81\n+l-0.00976562 70.9307c-0.0107422 18.8193 -11.9307 47.2793 -47.3701 47.2793h-47.3799v-165.46h46.3994c36.75 -0.0595703 48.3604 28.4404 48.3604 47.25zM254.88 245.47l0.00976562 29.5205h-63.1895c-11.1504 -0.280273 -19.9805 -9.54004 -19.71 -20.6904v-125.109\n+c0.279297 -11.1602 9.55957 -19.9805 20.7197 -19.6904h62.1797v29.5703h-53.29v38.4102h32.5703v29.5693h-32.5703v38.4199h53.2803zM358.52 130.18l38.4609 144.801h-32.5801l-29.5703 -113.721l-29.71 113.721h-32.5703l38.5303 -144.801\n+c10.5898 -24.6299 34.2402 -30.75 47.4395 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"fantasy-flight-games\" unicode=\"&#xf6dc;\" horiz-adv-x=\"512\" \n+d=\"M256 415.14l223.14 -223.14l-223.14 -223.14l-223.14 223.14zM88.3398 192.17c11.3447 -11.2461 29.7705 -29.4893 41.1299 -40.7197c20.1602 19.8799 40.46 39.8994 61.8506 60.9902c12.0596 -12.5801 24.5195 -25.5703 36.54 -38.1104\n+c12.0293 11.6895 23.7393 23.0596 35.6895 34.6602c-6.99023 7.4502 -32.1494 32.8301 -35.0898 35.7793c-1.91016 1.9209 -2.29004 3.2207 -0.120117 5.35059c15.5801 15.2295 39.21 17.79 56.9805 5.09961c7.98926 -5.70996 14.2998 -11.6396 48.5098 -43.9502\n+c10.8203 11.1504 22.2295 22.8506 33.5 34.6904c0.490234 0.520508 0.0996094 2.63965 -0.580078 3.37988c-0.0898438 0.100586 -37.5195 40.6006 -62.1504 59c-33.5801 25.0801 -78.3193 23.0605 -119.77 -18.6895c-84.5703 -85.1807 -94.5303 -95.4805 -96.4902 -97.4805z\n+M323.16 90.5703c18.8203 18.79 80.3301 80.6396 100.5 101.5c-13.7305 13.4492 -27.1797 26.6299 -40.8604 40.0293c-20.0098 -19.7393 -40.2402 -39.6895 -61.25 -60.4199c-12.3301 12.8301 -24.8799 25.8799 -37.25 38.75\n+c-1.25977 -0.689453 -1.64941 -0.80957 -1.91016 -1.06934c-10.7295 -10.7705 -21.4199 -21.5801 -32.21 -32.29c-2.22949 -2.20996 -0.519531 -3.35059 0.800781 -4.69043c10.5791 -10.7402 21.1797 -21.4502 31.7695 -32.1797\n+c3.5498 -3.60059 3.54004 -3.85059 -0.139648 -7.24023c-16.8008 -15.4697 -40.8408 -16.54 -59.3203 -1.7998c-7.62012 6.08008 -11.6602 10.1797 -44.6797 42.0898c-11.5801 -11.8896 -23.3203 -23.9404 -35.3701 -36.3096\n+c33.5498 -34.7607 50.8496 -53.3408 72.9297 -66.8408c28.9004 -17.6699 71.5 -14.96 106.99 20.4707zM256 448l256 -256l-256 -256l-256 256zM16 192l240 -240l240 240l-240 240z\" \u002F>\n+    \u003Cglyph glyph-name=\"penny-arcade\" unicode=\"&#xf704;\" horiz-adv-x=\"640\" \n+d=\"M421.91 283.73c7.33984 -16.2705 2.29004 -5.07031 24.6299 -54.6807l-39.7305 -10.6094c13.7002 59.2295 10.6104 45.8398 15.1006 65.29zM215.82 232.62c32.5 8.99023 41.9492 -37.6396 -0.350586 -47.4297c-14.2002 -3.77051 -6.64941 -1.75 -34.8193 -9.34082\n+l-4.45996 46.1904c28.3193 7.5498 19.4395 5.17969 39.6299 10.5801zM541.98 258.81c75.7998 -37.9092 98 -76.3193 97.9893 -104.47c2.10059 -78.8496 -183.3 -130.33 -399.89 -84.8301c0.540039 -13 -8.00977 -24.6494 -20.5801 -28.0195\n+c-125.54 -33.54 -117.35 -31.75 -122.53 -31.7598c-14.3701 -0.0107422 -26.4102 10.8896 -27.7998 25.1992l-4.2998 44.4805c-0.0683594 0.724609 -0.125 1.90332 -0.125 2.63184c0 10.5811 8.01758 22.2461 17.8945 26.0381l-1.73926 17.8799\n+c-50.2305 28.2598 -80.9004 61.8701 -80.9004 95.3701c0 72.9199 144.26 113.4 309.41 98.3701c2.68945 7.54395 11.1514 15.3438 18.8896 17.4102c96.8701 25.9092 65.3203 17.4795 135.59 36.2295c13.1602 3.50977 26.9307 -2.95996 32.6201 -15.3301zM255.14 149.7\n+c17.5 4.0498 40.2363 19.1562 50.75 33.7197c21.6006 32.5898 14.1104 105.561 -42.5498 104.43c-16.04 -0.229492 -8.07031 0.890625 -186.22 -46.6494l4.34961 -44.5l20.1201 5.38965l11.1104 -114.64l-20.0205 -5.35059l4.30078 -44.5195l115.31 30.7803\n+l-4.50977 44.5098l-20.5303 -5.50977l-2.45996 23.5498l48.4404 12.9102zM454.32 133.08l108.55 28.96l-4.2998 44.4795l-20.79 -5.55957l-66.6699 145.47c-70.5801 -18.8301 -42.2305 -11.25 -135.591 -36.2393l4.2002 -44.4805l17.1504 4.55957l-33.0801 -126.47\n+l-20.9902 -5.58984l4.45996 -44.4297l112.851 30.0693l-4.05078 39.54l-19.1992 -5.12012l4.09961 17.54l57.7598 15.4209l6.61035 -14.6807l-14.9004 -3.97949z\" \u002F>\n+    \u003Cglyph glyph-name=\"wizards-of-the-coast\" unicode=\"&#xf730;\" horiz-adv-x=\"640\" \n+d=\"M219.19 102.31c7.44922 5.80078 16.2598 0.680664 21.7295 -7.0791c7.08984 -10.1201 6.24023 -18.1602 -0.259766 -23.04c-7.62012 -6.24023 -17.0898 0.129883 -21.7305 6.5498c-10.8096 15.1299 -1.63965 22.1895 0.260742 23.5693zM555.94 26.3701\n+c1.30957 4.4502 3.92969 10.21 3.93945 20.1699c0 34.04 -41.6299 64.4102 -100.03 68.0801c-53.1592 3.39941 -120.46 -15.4502 -184.35 -73.8506l-0.790039 0.260742c1.58008 10.4697 -0.780273 16.2295 -3.40039 21.21l0.260742 1.56934\n+c64.4199 51.3203 134.069 66.5107 188.8 60.4902c61.0098 -6.54004 104.479 -39.54 101.34 -78.0303c-0.790039 -9.68945 -2.88965 -15.71 -4.97949 -19.8994c-1.34082 -1.66992 -1.13086 -1.7002 -0.790039 0zM392.28 207.58\n+c-0.530273 7.07031 3.13965 11.7803 6.7998 15.46c3.66992 3.91992 14.9297 10.4697 14.9297 10.4697s-1.2998 -26.4502 -2.08984 -29.8496c-1.04004 -3.92969 -4.96973 -6.81055 -10.4697 -6.5498c-4.98047 0.259766 -8.37988 3.39941 -9.16992 10.4697zM342.26 358.68\n+c147.17 0 275.48 -86.6797 291.21 -196.939c0 0 -3.66992 -1.31055 -9.68945 -4.4502c0 -0.259766 1.0498 -10.7402 0.259766 -16.5c-0.259766 -1.83008 -1.0498 -1.0498 -1.0498 0c-0.270508 5.24023 -1.57031 11.5303 -2.36035 14.9297\n+c-4.70996 -2.60938 -10.21 -6.54004 -15.9697 -11.7793c0 0 4.70996 -10.21 4.70996 -25.9209c0 -21.21 -8.37988 -32.9893 -16.5 -37.9697l-0.259766 0.520508c9.16992 9.16992 12.5693 21.4795 12.5693 31.9492c0 13.8701 -6.80957 33.25 -14.3994 41.3701\n+c0 0 4.4502 -8.12012 6.80957 -17.8096c0 0 -21.21 -21.4697 -26.9697 -62.3203c0 0 -3.66992 9.16992 -10.7402 16.2402c0 0 12.0498 -15.4502 12.0498 -38.2305c0 -19.3799 -12.8398 -37.4395 -27.5 -48.1797c-0.989258 0 -0.790039 -0.169922 -0.790039 0.790039\n+c15.71 12.8301 22.2607 28.0205 22.2607 46.3506c0 38.2295 -49.2305 80.3896 -130.15 80.3896c-96.1104 0 -181.74 -58.1299 -236.99 -128.05l-1.0498 0.259766c-40.3203 120.979 -135.64 185.66 -196.13 202.16c-2.09961 0.519531 -1.83984 0.790039 -0.790039 1.30957\n+c12.3096 14.4004 136.96 151.88 341.47 151.88zM243.02 69.0596c16.8408 14.5908 4.99023 30.7705 4.71094 31.1602c-4.08008 5.99023 -16.3105 16.8506 -31.1602 5.5c-10.9502 -8.37988 -11.6406 -22.8896 -4.19043 -32.4697\n+c6.44043 -8.26953 19.5801 -13.1797 30.6396 -4.19043zM245.11 205.49l1.83008 -8.11035l-3.6709 4.4502l-14.1396 -26.71l24.6201 -28.7998l12.5703 6.01953l-11.7803 70.96zM263.7 87.9102c3.41016 2.35938 7.33984 4.97949 9.67969 6.57031l-0.259766 0.259766\n+c-1.56055 -0.780273 -3.11035 -1.0498 -12.5703 15.9697v0.259766c6.87012 5.16016 8.45996 4.89062 11.5205 5.5l0.259766 0.260742c-1.31055 3.66992 -1.31055 3.66992 -1.83008 5.5h-0.259766c-3.95996 -3.31055 -1.4707 -1.58008 -11.5205 -7.86035h-0.259766\n+c-1.83008 3.13965 -4.19043 7.33008 -5.75977 9.68945v1.31055c4.4502 3.91992 10.2197 6.7998 12.3096 7.58984c2.87988 1.0498 4.19043 0.520508 5.24023 0.259766l0.259766 0.520508c-1.30957 1.83008 -2.08984 2.87988 -3.39941 4.70996l-0.520508 0.259766\n+c-9.9502 -5.5 -17.54 -9.9502 -25.3994 -15.71l0.259766 -0.519531c1.30957 0.259766 3.13965 -0.260742 4.4502 -2.62012c15.04 -25.0801 19.5898 -27.5908 17.54 -31.6904zM318.96 120.38v0.25c-1.99023 0 -2.34961 -1.37012 -14.6602 30.6396v0.260742\n+c4.95996 1.85938 8.78027 4.37988 12.3105 2.62012l0.259766 0.519531l-3.13965 4.98047l-0.520508 0.259766c-2.22949 -0.929688 -20.4697 -8.00977 -27.7598 -12.5703l-0.259766 -0.519531l1.0498 -5.76074h0.519531c1.0498 3.68066 9.7998 7.33008 9.9502 7.33008\n+l0.259766 -0.259766c12.9404 -29.7598 13.0703 -29.8799 11.7803 -32.4697l0.259766 -0.259766c3.93066 2.09961 6.81055 3.40918 9.9502 4.97949zM363.73 136.88c-0.780273 0.520508 -2.09082 1.31055 -2.63086 3.92969c-1.56934 6.02051 -4.70996 20.1709 -6.2793 26.4502\n+c-0.530273 1.57031 -0.530273 3.14062 0.519531 4.4502l-0.259766 0.259766c-3.41016 -0.529297 -6.29004 -1.30957 -10.7402 -2.35938v-0.260742c1.57031 -0.529297 2.10059 -2.09961 2.62012 -3.92969l2.62012 -9.42969l-0.259766 -0.259766\n+c-3.40039 -1.05078 -8.90039 -2.62012 -12.8301 -3.93066h-0.259766c-0.780273 2.10059 -1.83008 5.75977 -3.14062 9.69043l0.259766 4.70996l-0.259766 0.259766c-4.71973 -1.30957 -7.59961 -2.34961 -10.7402 -3.40039v-0.519531\n+c1.05078 0 2.10059 -1.30957 2.62012 -3.13965c1.0498 -3.40039 8.12012 -24.0908 9.16992 -27.2305c0.790039 -2.09961 0.790039 -3.66992 -0.259766 -4.97949l0.259766 -0.260742c3.14062 1.31055 6.54004 2.87988 10.21 3.93066v0.519531\n+c-1.0498 0.259766 -2.08984 0.780273 -2.87988 3.13965c-1.0498 3.93066 -3.39941 11.2607 -4.18945 13.8809l0.259766 0.259766c3.92969 1.30957 9.42969 3.13965 12.8301 3.92969l0.259766 -0.259766c0.530273 -2.09961 2.62012 -10.2197 3.66992 -13.6201\n+l-0.519531 -4.4502l0.259766 -0.259766c4.4502 1.57031 5.5 1.83008 9.69043 2.87988zM395.94 143.69c0.529297 1.8291 1.0498 3.65918 1.5791 6.04004h-0.259766c-2.0293 -4.06055 -15.0898 -5.09082 -16.2402 -4.71094l-0.259766 0.260742\n+c-0.519531 3.13965 -1.83008 10.4795 -2.08984 12.5693l0.259766 0.260742c8.06055 0.899414 5.40039 1.0293 10.21 0h0.260742c0 3.40918 0.259766 3.66992 0.259766 5.23926h-0.259766c-5.98047 -2.2998 -1.2207 -0.679688 -10.7402 -2.35938l-0.259766 0.259766\n+c-0.520508 3.40039 -1.31055 8.37988 -1.57031 9.9502l0.259766 0.259766c12.9004 2.41016 15.1006 0.349609 16.2402 -0.790039l0.259766 0.259766c-0.780273 2.36035 -1.0498 3.14062 -1.57031 5.5l-0.259766 0.260742\n+c-4.71973 -0.260742 -15.71 -1.05078 -24.8799 -2.62012l-0.790039 -0.520508c1.83008 -0.790039 2.36035 -1.83984 2.62012 -3.66992c1.58008 -7.59961 3.41016 -18.3301 4.98047 -26.1895l-0.790039 -4.19043l0.259766 -0.259766\n+c8.37988 1.83008 17.8096 3.66992 22.5195 4.18945zM406.68 188.2c3.14062 1.56934 7.33008 5.5 7.33008 5.50977c1.95996 -4.58008 0.970703 -2.70996 4.19043 -7.86035c10.1494 -0.459961 8.60938 0.0205078 20.4297 -1.0498l0.790039 4.70996\n+s-4.18945 0 -5.75977 1.83008c-1.0498 1.31055 -1.31055 3.14062 -1.57031 5.5c0 2.36035 0.270508 16.5 0.790039 20.6904c0.259766 4.18945 2.08984 20.4199 2.08984 23.04c0.260742 2.62012 1.0498 8.91016 0.260742 12.0498\n+c-4.82031 19.2803 -24.4307 17.8096 -50.0205 16.2402l-5.24023 -16.2402l2.62012 -2.87988c16.5498 16.5498 37.6201 4.56934 29.5898 -5.75977c-5.18945 -6.9209 -19.7393 -8.90039 -28.54 -17.0205c-6.47949 -6.49023 -12.2393 -20.9004 -5.5 -31.6904\n+c6.12988 -11.0391 17.29 -9.96973 17.54 -9.94922c2.87988 0 6.55078 0.519531 11 2.87988zM443.86 166.99c0 1.83984 0.269531 4.18945 0.269531 5.25l-0.259766 0.519531c-14.3604 8.98047 -26.8604 0.919922 -28.7998 -9.9502\n+c-2.83984 -16.0898 15.3594 -25.46 25.6602 -18.5898l0.519531 0.520508c0 0.259766 1.30957 4.4502 1.83008 6.2793l-0.259766 0.260742c-6.39062 -9.58008 -23.3203 -6.87012 -20.6904 10.21c1.91016 12.6602 15.3799 16.0801 21.7305 5.5zM449.63 254.72\n+c0 0 4.96973 -0.790039 4.99023 -3.66016c0 -2.08984 -4.98047 -55.25 -4.98047 -55.25c-0.109375 -1.48926 -0.339844 -6.80957 -7.58984 -6.80957l-0.790039 -4.70996c18.3906 -2.83008 19.3701 -3.04004 36.9199 -7.33008l0.520508 4.70996\n+c-13.0498 3.91992 -9.74023 7.37012 -4.4502 46.0898c1.09961 0.870117 8.62012 7.14062 20.6904 0.790039l11.2598 11.2598s-9.69043 8.90039 -14.9307 7.33008c-5.23926 -1.30957 -15.4492 -10.7393 -15.4492 -10.7393l1.56934 17.54\n+c-8.10938 4.0498 -27.0693 7.3291 -27.7598 7.3291v-6.5498zM460.62 140.28c9.42969 -2.35059 16.2402 2.62012 18.8496 11.5195c2.08984 7.60059 -1.56934 16.7598 -10.7393 19.3799c-6.54004 2.10059 -15.7109 -0.779297 -18.8506 -10.21\n+c-3.39941 -9.68945 2.62012 -18.5996 10.7402 -20.6895zM502.78 130.59c-0.780273 1.31055 -1.04004 2.10059 -0.799805 3.91016c1.22949 27.0098 1.5293 24.6602 1.0498 25.1396c-2.08984 0.790039 -5.5 2.09082 -7.58984 2.87988l-0.520508 -0.259766v-2.08984\n+c-3.92969 -6.01953 -10.4795 -15.4502 -13.8799 -20.1602l-2.62012 -1.83008v-0.259766c2.08984 -0.259766 4.70996 -1.30957 6.02051 -1.57031v0.260742l0.790039 3.39941c0.789062 1.0498 2.35938 3.66992 3.66992 5.5c0.40918 0 2.25 -0.549805 7.06934 -2.35938\n+c0.330078 -0.320312 0.330078 0.649414 -0.259766 -7.59082l-1.57031 -1.8291v-0.260742c1.57031 -0.519531 6.28027 -2.35938 8.64062 -2.87988zM498.07 220.41c-13.2207 -21.1504 -9.39062 -51.6006 9.66992 -52.9004c5.75977 -0.259766 9.42969 3.93066 9.68945 3.66992\n+l-2.08984 -6.80957c8.91016 -4.21973 11.4404 -5.29004 17.8105 -8.63965l1.83008 4.44922c-6.14062 3.51074 -1.29004 11.25 24.6191 84.3203c-6.13965 6.45996 -10.2998 10.0596 -22.5195 20.4297l-1.83008 -3.66992c1.62988 -1.35938 6.79004 -5.00977 4.4502 -11.2598\n+l-7.58984 -26.1904c-3.28027 12.79 -22.79 14.8701 -34.04 -3.39941zM527.4 141.07l2.35938 3.39941v0.520508c-3.41016 6.83008 -11.9395 7.41992 -14.6602 2.35938c-1.83984 -3.40918 0.260742 -7.06934 1.83008 -9.68945\n+c1.57031 -2.87988 3.14062 -6.29004 2.08984 -8.37988c-2.31934 -4.62988 -8.94922 -0.680664 -8.37988 4.97949l-0.790039 -0.259766c-2.09961 -4.7998 -1.83008 -4.00977 -1.83008 -4.70996c3.05078 -6.09961 12.8105 -7.12988 15.4502 -0.790039\n+c1.57031 3.15039 0.520508 6.80957 -1.0498 9.42969c-1.83008 3.40039 -4.18945 6.29004 -2.87988 8.37988c1.51953 2.65039 7.86035 0.470703 7.86035 -5.23926zM548.61 127.71l1.30957 3.91016l-0.259766 0.259766c-2.36035 2.08984 -8.64062 6.54004 -12.3105 8.90039\n+h-0.259766l-3.13965 -3.40039v-0.259766c4.7998 -0.320312 3.37988 0.149414 6.01953 -1.83008v-0.259766c-2.62012 -4.9707 -6.0293 -11.2607 -9.16992 -17.0205l-2.08984 -1.30957l-0.259766 -0.259766l5.75977 -4.4502l0.259766 0.259766\n+c-0.259766 0.530273 -0.519531 1.57031 0.790039 3.92969c2.87988 5.77051 6.28027 12.0508 8.64062 16.2402h0.259766c3.54004 -2.57031 2.49023 -1.43945 4.4502 -4.70996zM575.84 171.97l7.85059 10.46s-9.4209 18.8604 -23.04 16.5\n+c-20.8408 -4.0293 -3.15039 -34.21 -2.09082 -38.2295c4.33008 -15.1299 -16.3193 -12.5605 -13.3496 5.24023l-2.87988 2.08984l-4.98047 -14.4004s11.7803 -11.2598 20.1602 -10.4697c8.12012 0.790039 13.8799 6.29004 13.8799 16.5\n+c0 8.37988 -7.85938 22.7803 -7.85938 27.7598c0 6.86035 12.2695 4.75977 11.5195 -4.97949c-0.259766 -2.61035 -1.2998 -5.23047 -2.08984 -7.59082zM611.46 182.18c0.780273 -2.35938 1.57031 -1.83008 0.790039 0.270508\n+c-32.4697 98.9795 -132.76 138.78 -199.8 139.83c-50.54 0.779297 -89.5605 -11.79 -131.98 -35.8799l20.6904 61.0098l-33.7803 -65.7305l-8.89941 20.9502c3.13965 1.04004 6.2793 2.08984 6.2793 2.08984l-2.62012 8.64062s-3.13965 -0.780273 -7.33008 -2.09082\n+l-12.0498 28.2803l13.6201 -61.0098c-5.12012 2.55957 -19.0996 6.83008 -6.5498 19.3799l-2.62012 11c-6.97949 -2.21973 -13.2295 -3.62012 -32.21 -9.68945l-23.0801 11.5l59.1797 -42.6807l-4.70996 -2.08984l-17.2793 13.8799\n+c2.23926 -5.13965 3.2998 -12.1699 4.70996 -19.6396l-28.54 -13.0898l-30.1104 36.1396l-17.2803 -9.16992l13.6201 -42.4199l-11.2598 -4.98047l94.2695 29.3301l-3.66992 -10.4697l-0.519531 3.13965l-13.0898 -3.39941l4.97949 -24.6201l-4.4502 -12.3105\n+l-25.6592 30.6406l-39.8008 -10.21l18.8506 -58.9199c-60.1299 62.3994 -67.7002 66.3994 -61.7998 75.6797c2.09961 2.87988 7.85938 7.07031 7.85938 7.07031l-4.18945 7.06934c-26.7803 -18.3496 -27.8398 -19.1494 -58.4004 -42.6797l4.98047 -6.01953\n+s8.12012 5.75977 13.6201 5.5c7.81934 -0.350586 1.76953 2.93945 113.659 -98.7305l11.7803 8.37988l-27.7598 93.4805l35.8799 -42.1602l-4.70996 -13.8799l41.9004 88.5098c34.6699 -80.5098 29.1494 -66.9502 32.9893 -78.8203l-33.5195 67.2998l-2.36035 -4.44922\n+c1.2998 -1.30078 -0.919922 3.05957 22.7803 -59.4404c3.22949 -8.88965 -1.10059 -9.88965 -5.5 -12.8301l2.36035 -4.70996c15.3594 6.79004 22.9395 9.54004 39.0195 14.4004l-1.0498 4.97949c-8.89062 -1.33008 -10.1006 0.169922 -12.0498 4.4502\n+c-1.05078 2.09961 -14.1504 40.0703 -20.4307 58.6602l-10.21 4.97949l-2.35938 8.12012l61.54 -36.6602l-13.0908 -43.21c12.1904 3.26074 27.0303 6.74023 49.4902 9.9502l-0.259766 26.71l-4.98047 -1.0498c-0.669922 -13.7998 -6.0293 -22.0801 -19.6396 -22.7803\n+l22.2598 80.3906c-27.6201 -0.450195 -59.2695 -7.19043 -66.7695 -8.90039l3.92969 -16.5l-25.1396 19.6396l91.3896 20.6904l-85.6299 -9.16992c38.4902 22.5195 79.3398 39.0195 132.76 37.9697c131.46 -2.08984 180.95 -99.2402 191.95 -129.62zM203.48 295.57\n+l2.35938 -8.64062c7.82031 2.61035 10.8604 2.36035 11.2598 2.36035l-9.42969 7.58984c-2.36035 -0.790039 -4.18945 -1.30957 -4.18945 -1.30957zM347.24 257.07l-11.5303 -37.71l-21.7295 17.0195c6.7998 25.5 31.6895 21.29 33.2598 20.6904zM318.43 380.93\n+c224.94 0 321.83 -143.76 321.57 -227.55c0 -11 -0.269531 -17.5498 -0.790039 -19.6396c-0.259766 -2.10059 -1.0498 -0.790039 -1.0498 0.519531v9.9502c0 106.58 -121.51 223.37 -301.67 223.37c-61.2705 0 -103.69 -12.0498 -110.24 -13.8799l-1.57031 0.259766\n+c-6.80957 7.58984 -12.8301 9.69043 -21.21 11.7803v0.790039c8.91016 2.34961 56.5605 14.3994 114.96 14.3994zM529.49 211.25c-8.61035 -34.4502 -13.6504 -35.3496 -18.3301 -35.3604c-7.33008 0 -6.81055 9.43066 -6.02051 14.9307\n+c0.879883 9.72949 7.40039 34.6494 17.0205 33.5195c7.33008 -0.780273 8.63965 -7.33008 7.33008 -13.0898zM467.96 168.3c3.40039 -0.780273 7.84961 -4.4502 5.23047 -14.3896c-2.88086 -11.2598 -8.11035 -11.79 -11.7803 -10.7402\n+c-5.5 1.31055 -7.85059 7.84961 -6.02051 14.6602c3.14062 11.2598 9.9502 11.2598 12.5703 10.4697zM491 147.35v0.270508c1.0498 1.83008 5.5 8.63965 6.5498 9.9502c-0.269531 -3.66992 -0.790039 -10.2207 -0.790039 -12.0508\n+c-2.62012 0.780273 -3.92969 1.31055 -5.75977 1.83008z\" \u002F>\n+    \u003Cglyph glyph-name=\"think-peaks\" unicode=\"&#xf731;\" horiz-adv-x=\"576\" \n+d=\"M465.4 38.5996l-206.2 353.801l-204.2 -352.101l-32 0.299805l236.2 407.4l206.2 -353.9l55.0996 95l32 -0.299805zM110.1 82.7002l149.601 257.899l235.8 -404.6l-32.5 0.0996094l-203.4 349.101l-117.399 -202.5h-32.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"reacteurope\" unicode=\"&#xf75d;\" horiz-adv-x=\"576\" \n+d=\"M250.6 236.26l2 6.7998l-5.69922 4.30078l7.19922 0.0996094l2.30078 6.7998l2.2998 -6.7998l7.09961 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.7998 4.10059zM314.3 236.26l1.90039 6.7998l-5.7002 4.30078l7.2002 0.0996094l2.2998 6.7998l2.2998 -6.7998\n+l7.2002 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.80078 4.10059zM223 185.76c4.90039 0 3.7998 -3.89941 3.7998 -13.7598c0 -10.2998 -6.7002 -14.0996 -16.7998 -14.0996h-0.200195c-10.0996 0 -16.7998 3.69922 -16.7998 14.0996v40.0596\n+c0 9.90039 6.7002 14.1006 16.7998 14.1006h0.200195c10.0996 0 16.7998 -4.2002 16.7998 -14.1006c0 -8.39941 0.900391 -12.1992 -3.7998 -12.2998h-3.40039c-4.5 0 -3.7998 3.2998 -3.7998 10.5c0 4.7002 -2.2998 6.10059 -5.7998 6.10059\n+s-5.7998 -1.40039 -5.7998 -6.10059v-36.5996c0 -4.7002 2.2998 -6.10059 5.7998 -6.10059s5.7998 1.40039 5.7998 6.10059c0 8.09961 -1 12.0996 3.7998 12.0996h3.40039zM142.3 168.36c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961\n+c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-21.8994c-2.5 0 -3.80078 1.2998 -3.80078 3.7998v59.0996c0 2.5 1.30078 3.90039 3.7002 3.80078h21.7002c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-14.4004v-18.2998h11.4004\n+c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-11.4004v-19.2998h14.7002zM100.3 186.86l8.10059 -23.9004c0.799805 -2.59961 -0.400391 -4.40039 -3.2002 -4.40039h-3.2998\n+c-0.0820312 -0.00585938 -0.21582 -0.0107422 -0.297852 -0.0107422c-1.81543 0 -3.6084 1.43848 -4.00293 3.21094l-7.39941 23.5h-5.60059v-22.8994c0 -2.5 -1.2998 -3.80078 -3.7998 -3.80078h-3.39941c-2.5 0 -3.80078 1.30078 -3.80078 3.80078v59.0996\n+c0 2.5 1.30078 3.7998 3.80078 3.7998h13.3994c10.1006 0 16.7998 -4 16.7998 -14.0996v-11.9004c0 -6.39941 -2.69922 -10.3994 -7.2998 -12.3994zM96.5 200.86v8.69922c0 4.80078 -2.5 6.10059 -6.09961 6.10059h-5.80078v-20.9004h5.80078\n+c3.59961 0 6.09961 1.2998 6.09961 6.10059zM176 222l11.2002 -59.2002c0.5 -2.7002 -0.799805 -4.09961 -3.40039 -4.09961h-3.5c-0.100586 -0.00976562 -0.264648 -0.0185547 -0.366211 -0.0185547c-1.94531 0 -3.61816 1.57617 -3.7334 3.51855l-1.7998 11.2998h-12.2002\n+l-1.7998 -11.2998c-0.116211 -1.94238 -1.78809 -3.51855 -3.7334 -3.51855c-0.101562 0 -0.265625 0.00878906 -0.367188 0.0185547h-3c-2.5 0 -3.89941 1.39941 -3.39941 4.09961l11 59.2002c0.135742 1.88477 1.78027 3.41504 3.66992 3.41504\n+c0.0908203 0 0.239258 -0.00683594 0.330078 -0.0146484h6.89941c0.110352 0.0117188 0.290039 0.0205078 0.401367 0.0205078c1.89844 0 3.60059 -1.53223 3.79883 -3.4209zM163.7 182.7h9.39941l-4.69922 29.7002zM253 162.5c0 -2.45996 -1.2998 -3.83984 -3.7998 -3.7998\n+h-3.40039c-2.5 0 -3.7998 1.2998 -3.7998 3.7998v53.2002h-7.2998c-2.5 0 -3.7998 1.2998 -3.7998 3.7998v2.09961c0 2.5 1.2998 3.80078 3.7998 3.80078h25.7998c2.5 0 3.7998 -1.30078 3.7998 -3.80078v-2.09961c0 -2.5 -1.2998 -3.7998 -3.7998 -3.7998h-7.5v-53.2002z\n+M501 163.3c0.0449219 0.00390625 0.119141 -0.0322266 0.164062 -0.0322266c1.01562 0 1.84082 -0.824219 1.84082 -1.83984c0 -0.0351562 -0.00292969 -0.0927734 -0.00488281 -0.12793v-0.799805c0.00195312 -0.0273438 0.00292969 -0.0722656 0.00292969 -0.100586\n+c0 -0.999023 -0.810547 -1.80957 -1.81055 -1.80957c-0.0527344 0 -0.139648 0.00488281 -0.192383 0.00976562h-22.5c-0.0527344 -0.00488281 -0.139648 -0.00976562 -0.192383 -0.00976562c-1 0 -1.81055 0.810547 -1.81055 1.80957\n+c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00878906 0.0625 -0.0166016 0.166016 -0.0166016 0.229492c0 0.893555 0.725586 1.62012 1.62012 1.62012c0.111328 0 0.289062 -0.0224609 0.396484 -0.0498047h22.2002\n+c0.0644531 0.00878906 0.169922 0.015625 0.235352 0.015625c0.977539 0 1.77051 -0.792969 1.77051 -1.76953c0 -0.0400391 -0.00292969 -0.105469 -0.00585938 -0.145508v-0.800781c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281\n+c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-19.1006v-25.7998h16.1006c0.03125 0.00195312 0.0820312 0.00390625 0.113281 0.00390625c1.04297 0 1.88965 -0.84668 1.88965 -1.89062\n+c0 -0.03125 -0.000976562 -0.0820312 -0.00292969 -0.113281v-0.799805c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-16.1006v-26.7002\n+h19.4004zM407.9 226.2c10.0996 0 15.2998 -4.74023 15.2998 -14.1006v-40.0996c0 -9.2998 -5.2002 -14.0996 -15.2998 -14.0996h-0.800781c-10.0996 0 -15.2998 4.7998 -15.2998 14.0996v40.0996c0 9.40039 5.2002 14.1006 15.2998 14.1006h0.800781zM418.1 173.8v36.6006\n+c0 7.89941 -3 11.0996 -10.5 11.0996s-10.5 -3.2002 -10.5 -11.0996v-36.6006c0 -8 3 -11.0996 10.5 -11.0996s10.4004 3.09961 10.5 11.0996zM371.6 188.3l10.6006 -27.2998c0.5 -1.2998 -0.100586 -2.2998 -1.5 -2.2998h-1.5\n+c-0.0351562 -0.00195312 -0.0927734 -0.00390625 -0.128906 -0.00390625c-0.886719 0 -1.85938 0.673828 -2.1709 1.50391l-10.4004 27.2002h-11.5996v-26.9004c0.00390625 -0.0458984 0.0078125 -0.12207 0.0078125 -0.167969\n+c0 -0.960938 -0.779297 -1.74023 -1.74023 -1.74023c-0.0458984 0 -0.12207 0.00390625 -0.167969 0.0078125h-1.2002c-0.0527344 -0.00488281 -0.139648 -0.00976562 -0.192383 -0.00976562c-0.999023 0 -1.81055 0.810547 -1.81055 1.80957\n+c0 0.0283203 0.00195312 0.0732422 0.00292969 0.100586v63c-0.000976562 0.0273438 -0.00292969 0.0722656 -0.00292969 0.100586c0 0.999023 0.811523 1.80957 1.81055 1.80957c0.0527344 0 0.139648 -0.00488281 0.192383 -0.00976562h13.7002\n+c10.0996 0 15.2998 -4.7002 15.2998 -14.1006v-9.7002c0 -7.19922 -3.09961 -11.6992 -9.2002 -13.2998zM365.2 192.2c7.5 0 10.5 3.16016 10.5 11v6.39941c0 8 -3 11.1006 -10.5 11.1006h-10.2002v-28.5h10.2002zM451.1 225.3c10.1006 0 15.3008 -4.7002 15.3008 -14.0996\n+v-10.5c0 -9.2998 -5.2002 -14.1006 -15.3008 -14.1006h-10.5996v-26.0996c0.00488281 -0.0458984 0.0078125 -0.12207 0.0078125 -0.167969c0 -0.960938 -0.779297 -1.74023 -1.73926 -1.74023c-0.046875 0 -0.12207 0.00390625 -0.168945 0.0078125h-1.19922\n+c-0.0537109 -0.00488281 -0.139648 -0.00976562 -0.193359 -0.00976562c-0.999023 0 -1.80957 0.810547 -1.80957 1.80957c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00976562 0.0625 -0.0166016 0.166016 -0.0166016 0.229492\n+c0 0.893555 0.725586 1.62012 1.62012 1.62012c0.111328 0 0.288086 -0.0224609 0.396484 -0.0498047h13.6992zM461.3 202.5v7.09961c0 7.90039 -3 11.1006 -10.5 11h-10.2002v-29.1992h10.2002c7.5 0 10.5 3.19922 10.5 11.0996zM259.5 140l7.09961 -0.0996094\n+l-5.69922 -4.30078l2.09961 -6.7998l-5.7998 4.10059l-5.7998 -4.10059l2.09961 6.7998l-5.7002 4.30078l7.10059 0.0996094l2.2998 6.7998zM487.1 276.1c122.301 -46.0996 118.401 -132.54 -33.8984 -176.34c13.3994 -49.7002 18.0996 -101.899 0.0996094 -133.8\n+c-3.7998 -6.7002 -16.7998 -27.7002 -47.5996 -27.7002c-41.5 0 -110.2 41.6006 -182.101 142c-42.7998 3.5 -72.1992 10.1006 -84.5996 13c-20.5 -82.2998 -6.7998 -125.3 15.5 -137.899c1.2002 -0.700195 38.4004 -27.2002 120.9 52.7998\n+c3.39941 -3.5 6.79883 -6.90039 10.1982 -10.2002c-63.0996 -61.2002 -110.199 -71 -138.199 -55.2002c-32.4004 18.2998 -42.8008 72 -22.3008 153.9c-18.8994 5 -121.6 33.2002 -122.1 92.7998c-0.400391 40.9004 49.7998 74.7002 120.3 95\n+c-13.3994 49.5996 -18.2002 101.8 -0.0996094 133.8c3.7998 6.74023 16.7998 27.7402 47.5996 27.7402c41.6006 0 110.3 -41.6396 182.2 -142.14c23.6113 -1.88379 61.5127 -7.70801 84.5996 -13c20.5 82 6.90039 125.1 -15.5 137.8\n+c-1.2998 0.700195 -38.3994 27.2002 -120.899 -52.7998c-3.40039 3.5 -6.80078 6.89941 -10.2002 10.1992c52.2998 50.9404 103.7 74.6006 138.2 55.2402c33.8994 -19.2002 41.8994 -75.8994 22.2998 -153.899c9.98535 -2.61523 25.9346 -7.67773 35.5996 -11.3008z\n+M135.901 411.16c-23.1006 -40.7998 1 -121.562 1.19922 -122.961c22.9912 5.78516 60.8018 12.3262 84.4004 14.5996c12.7793 18.6787 35.4922 47.4404 50.7002 64.2002c3.39941 -3.33301 6.7998 -6.74609 10.2002 -10.2393\n+c-12.5371 -13.7451 -31.4434 -37.2207 -42.2002 -52.3994c14.8213 1.11914 38.9141 2.02734 53.7783 2.02734c11.082 0 29.0566 -0.504883 40.1211 -1.12793c-64.5 86.6006 -126.5 126.2 -163.3 126.2c-23 0 -32 -15.2002 -34.8994 -20.2998zM440.701 -27.1406\n+c3.2998 6 21.5 38.5996 -1.2002 123c-4.09961 -1.10059 -37.0996 -9.90039 -84.4004 -14.6006c-12.7578 -18.6943 -35.4717 -47.4551 -50.6992 -64.2002c-3.40039 3.2998 -6.80078 6.7002 -10.2002 10.2002c12.5371 13.7461 31.4424 37.2207 42.2002 52.4004\n+c-14.7715 -1.14258 -38.7842 -2.06934 -53.5996 -2.06934c-11.1328 0 -29.1875 0.524414 -40.3008 1.16895c64.5996 -86.7998 126.6 -126.2 163.3 -126.2c23.1006 0 32 15.2002 34.9004 20.3008zM449.801 111.459c25.6006 7.2998 85.9004 27.4004 105.7 62.5\n+c1.40039 2.5 33.5 50.5 -72.5996 90.4004c-9.36914 3.51562 -24.8252 8.44336 -34.5 11c-3.60059 -12.9004 -7.90039 -26.1006 -12.8008 -39.5c-3.15723 -0.430664 -7.14453 -2.93945 -8.89941 -5.60059l-0.100586 0.100586\n+c-1.6416 1.55762 -4.68848 3.48438 -6.7998 4.2998c5.7002 15 10.6006 29.7998 14.6006 44.2002c-7.2002 1.69922 -31.8008 7.59961 -72.2002 11.6992c16.7002 -24.5 27.8994 -44.0996 34.2998 -55.5c-3.50781 -1.14648 -8.16699 -4.46094 -10.4004 -7.39941\n+c-13.5996 16.3994 -11 19.8994 -42.5 64.5c-13.752 0.96582 -36.1016 1.75 -49.8877 1.75c-17.2871 0 -45.292 -1.23145 -62.5117 -2.75c-16.9004 -25 -28.2998 -45.2002 -34.7998 -56.9004c-3.49707 -1.49023 -8.06738 -5.25391 -10.2002 -8.39941\n+c-0.914062 2.88965 -3.78125 6.47363 -6.40039 8c6.10059 11.3994 16.9004 31 32.7998 55.2998c-39.5996 -4.60059 -65 -11.2002 -72 -13c4.30078 -14.1006 9.40039 -28.6006 15.2002 -43.2998c-0.71582 -0.522461 -1.74609 -1.50781 -2.2998 -2.2002\n+c-1.5 1.89941 -4 5.2998 -14.4004 5.2998c-4.69922 12.2998 -8.7998 24.5 -12.3994 36.4004c-138.8 -40.3604 -158.4 -121.36 1.5 -164c3.59961 12.8994 7.7998 26 12.7002 39.3994c0.269531 -0.0146484 0.708008 -0.0273438 0.978516 -0.0273438\n+c1.68359 0 4.33594 0.460938 5.9209 1.02734c3 -1.2002 5.2002 -1 8.40039 -1c-5.5 -14.5996 -10.2002 -28.8994 -14.1006 -42.8994c19.7119 -4.56055 52.0576 -9.80176 72.2002 -11.7002c-16.2998 23.8994 -27.5 43.3994 -33.7998 54.5996\n+c8.7002 0 10.7002 1.60059 12.5996 3.2002c0.794922 -0.480469 2.13965 -1.15234 3 -1.5c15.3008 -26.7002 28.9004 -46.5996 36.8008 -57.7998c13.751 -0.96582 36.1006 -1.75 49.8857 -1.75c17.2871 0 45.2939 1.23145 62.5137 2.75\n+c16.5 24.2998 27.7002 44 33.9004 55.2002c7.2998 0 9.7998 3 10.8994 4.19922c1.5332 -1.11426 4.2207 -2.54785 6 -3.19922c-15 -28 -28.6992 -48.9004 -32.1992 -54.2002c20.1172 2.22656 52.373 8.05078 72 13c-4.10059 13.7998 -9 27.8994 -14.7002 42.2002\n+c1.65723 0.743164 4.07617 2.35645 5.39941 3.59961l0.100586 0.0996094c2.07227 -3.14648 6.8125 -5.7002 10.5811 -5.7002c0.0322266 0 0.0859375 0 0.119141 0.000976562c4.69922 -12.3008 8.7998 -24.5 12.3994 -36.4004zM335.401 225.459\n+c0.0556641 0.00585938 0.145508 0.0107422 0.201172 0.0107422c1.05566 0 1.95117 -0.856445 1.99805 -1.91113v-51.5c0 -9.5 -5 -14.0996 -15.0996 -14.0996h-0.400391c-10.0996 0 -15.0996 4.5 -15.0996 14.0996v51.5\n+c-0.00195312 0.0283203 -0.00292969 0.0732422 -0.00292969 0.100586c0 0.999023 0.810547 1.81055 1.81055 1.81055c0.0527344 0 0.139648 -0.00488281 0.192383 -0.0107422h1.2002c0.0615234 0.00878906 0.162109 0.0146484 0.224609 0.0146484\n+c0.933594 0 1.69043 -0.756836 1.69043 -1.68945c0 -0.0625 -0.00683594 -0.163086 -0.015625 -0.225586v-49.7998c0 -8 2.60059 -11.0996 10.1006 -11.0996s10.0996 3.2002 10.0996 11.0996v49.7998c-0.00390625 0.046875 -0.0078125 0.12207 -0.0078125 0.168945\n+c0 0.959961 0.779297 1.73926 1.74023 1.73926c0.0458984 0 0.121094 -0.00292969 0.167969 -0.0078125h1.2002zM321.701 139.999l7.09961 -0.0996094l-5.7002 -4.30078l2.10059 -6.7998l-5.7998 4.10059l-5.80078 -4.10059l2.10059 6.7998l-5.7002 4.30078\n+l7.09961 0.0996094l2.30078 6.7998zM290.601 132.599l7.10059 -0.0996094l-5.7002 -4.2998l2.09961 -6.7998l-5.7998 4.09961l-5.7998 -4.09961l2.09961 6.7998l-5.69922 4.2998l7.09961 0.0996094l2.2998 6.80078zM295.701 163.399\n+c0.0507812 0.00488281 0.133789 -0.03125 0.185547 -0.03125c1.00977 0 1.83008 -0.819336 1.83008 -1.83008c0 -0.0664062 -0.00683594 -0.172852 -0.015625 -0.239258v-0.799805c0.00292969 -0.0400391 0.00585938 -0.105469 0.00585938 -0.145508\n+c0 -0.977539 -0.792969 -1.77051 -1.77051 -1.77051c-0.0654297 0 -0.170898 0.00683594 -0.235352 0.015625h-22.5c-0.0537109 -0.00488281 -0.139648 -0.00976562 -0.193359 -0.00976562c-0.999023 0 -1.80957 0.810547 -1.80957 1.80957\n+c0 0.0283203 0.000976562 0.0732422 0.00292969 0.100586v63c-0.00195312 0.0273438 -0.00292969 0.0722656 -0.00292969 0.100586c0 0.999023 0.810547 1.80957 1.80957 1.80957c0.0537109 0 0.139648 -0.00488281 0.193359 -0.00976562h22.2002\n+c0.0644531 0.00878906 0.169922 0.015625 0.235352 0.015625c0.977539 0 1.77051 -0.792969 1.77051 -1.77051c0 -0.0400391 -0.00292969 -0.105469 -0.00585938 -0.145508v-0.799805c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281\n+c0 -1.04395 -0.84668 -1.89062 -1.88965 -1.89062c-0.03125 0 -0.0820312 0.00195312 -0.113281 0.00390625h-19.1006v-25.7998h16.1006c0.03125 0.00195312 0.0820312 0.00292969 0.113281 0.00292969c1.04297 0 1.88965 -0.84668 1.88965 -1.88965\n+c0 -0.03125 -0.000976562 -0.0820312 -0.00292969 -0.113281v-0.800781c0.00195312 -0.03125 0.00292969 -0.0820312 0.00292969 -0.113281c0 -1.04297 -0.84668 -1.88965 -1.88965 -1.88965c-0.03125 0 -0.0820312 0.000976562 -0.113281 0.00292969h-16.1006v-26.6992\n+h19.4004zM288.301 262.799l2.2998 -6.7998l7.10059 -0.0996094l-5.7002 -4.30078l2.09961 -6.7998l-5.7998 4.10059l-5.7998 -4.10059l2.09961 6.7998l-5.69922 4.30078l7.09961 0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"adobe\" unicode=\"&#xf778;\" horiz-adv-x=\"512\" \n+d=\"M315.5 384h170.9v-384zM196.5 384l-170.9 -384v384h170.9zM256 241.9l107.5 -241.9h-73l-30.7002 76.7998h-78.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"artstation\" unicode=\"&#xf77a;\" horiz-adv-x=\"512\" \n+d=\"M2 70.5996h315.1l59.2002 -102.6h-285.399h-0.0146484c-17.4814 0 -38.0381 12.6787 -45.8857 28.2998zM501.8 98c19 -29.4004 -0.0996094 -55.9004 -2 -59.0996l-40.7002 -70.5l-257.3 447.6h88.4004h0.0117188c17.0596 0 37.3936 -12.2305 45.3877 -27.2998zM275 143.5\n+h-231l115.5 200z\" \u002F>\n+    \u003Cglyph glyph-name=\"atlassian\" unicode=\"&#xf77b;\" horiz-adv-x=\"512\" \n+d=\"M152.2 211.6c66.2998 -70.7998 89.0996 -189.3 51.2002 -267.1c-2.40039 -5.2002 -7.60059 -8.5 -13.4004 -8.40039h-175c-11 0 -18.4004 11.7002 -13.4004 21.7002l125.801 251c5.09961 10.5 17.0996 11 24.7998 2.7998zM244.4 439.9\n+c6.7998 10.8994 20.2998 10.6992 25.5996 0.0996094c5.90039 -11.7002 240.4 -482.3 240.4 -482.3c5 -9.90039 -2.2002 -21.7002 -13.4004 -21.7002h-174.2c-5.7002 0 -10.8994 3.2998 -13.3994 8.40039c-73.5 146.899 -187.301 302.1 -65 495.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"canadian-maple-leaf\" unicode=\"&#xf785;\" horiz-adv-x=\"512\" \n+d=\"M383.8 96.2998c-5 -5 -10 -7.5 -5 -22.5s10 -35.0996 10 -35.0996s-95.2002 20.0996 -105.2 22.5996c-8.89941 0.900391 -18.3994 -2.39941 -18.3994 -12.5c0 -10.0996 5.7998 -112.8 5.7998 -112.8h-30s5.7998 102.8 5.7998 112.8s-9.59961 13.4004 -18.2998 12.5\n+c-10.0996 -2.5 -105.3 -22.5996 -105.3 -22.5996s5 20.0996 10.0996 35.0996c4.90039 15 0 17.5 -5.09961 22.5c-2.60059 2.5 -105.2 92.4004 -105.2 92.4004l17.5 7.59961c10 4.90039 7.40039 11.4004 5 17.4004c-2.5 7.59961 -20.0996 67.2998 -20.0996 67.2998\n+s47.5996 -10 57.6992 -12.5c7.5 -2.40039 10 2.5 12.5 7.5s15 32.2998 15 32.2998s52.6006 -59.7998 55.1006 -62.2998c10.0996 -7.5 20.0996 0 17.5996 10c0 10 -27.5996 129.6 -27.5996 129.6s30.0996 -17.3994 40.0996 -22.3994c7.60059 -5 12.6006 -5 17.6006 5\n+c5 7.5 42.5 79.7998 42.5 79.7998s37.5996 -72.2998 42.6992 -79.7998c5 -10 10.1006 -10 17.6006 -5c10 5 40.0996 22.3994 40.0996 22.3994s-27.5996 -119.6 -27.5996 -129.6c-2.5 -10 7.59961 -17.5 17.5996 -10c2.5 2.40039 55.1006 62.2998 55.1006 62.2998\n+s12.5 -27.3994 15 -32.3994s5 -9.90039 12.5 -7.5c10 2.5 57.6992 12.5 57.6992 12.5s-17.6992 -59.7002 -20.0996 -67.3008c-2.40039 -5.89941 -5 -12.5 5 -17.3994l17.5 -7.5s-102.7 -89.9004 -105.2 -92.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"centos\" unicode=\"&#xf789;\" \n+d=\"M289.6 350.5l31.6006 -31.7002l-76.2998 -76.5v108.2h44.6992zM127.2 318.8l31.5996 31.7002h44.7002v-108.2zM168.7 360.4l55.5 55.5996l55.5 -55.5996h-44.7002v-127.9l-10.7998 -10.7998l-10.7998 10.7998v127.9h-44.7002zM194.9 192.3l-10.8008 -10.7998h-128.6\n+v-44.7998l-55.5 55.5996l55.5 55.6006v-44.8008h128.6zM274.2 213l76.2998 76.5l31.5996 -31.7002v-44.7998h-107.899zM447.5 192.3l-55.5 -55.5996v44.7998h-127.7l-10.7998 10.7998l10.7998 10.7998h127.7v44.8008zM65.4004 271.8v78.7002h79.3994l-31.5996 -31.7002\n+l90.2998 -90.5v-15.2998h-15.2998l-90.2998 90.5zM382.1 350.5v-78.7002l-31.5996 31.7002l-90.2998 -90.5h-15.2998v15.2998l90.2998 90.5l-31.6006 31.7002h78.5zM203.5 34.0996v-0.0996094h-44.7002l-31.5996 31.7002l76.2998 76.5v-108.101zM65.4004 213v44.7998\n+l32.5 31.7002l76.2998 -76.5h-108.8zM382.1 112.8v-78.7002h-78.5l31.6006 31.7002l-90.2998 90.5v15.2998h15.2998l90.2998 -90.5zM382.1 171.6v-44.7998l-31.5996 -31.7002l-76.2998 76.5h107.899zM321.2 65.7998l-31.6006 -31.5996h-44.6992v108.1zM97.9004 95.0996\n+l-32.5 31.7002v44.7998h108.8zM279.7 24.2002l-55.5 -55.6006l-55.5 55.6006h44.7002v127.899l10.7998 10.8008l10.7998 -10.8008v-127.899h44.7002zM113.2 65.7998l31.5996 -31.7002h-79.3994v78.7002l32.5 -31.7002l90.2998 90.5h15.2998v-15.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"confluence\" unicode=\"&#xf78d;\" horiz-adv-x=\"512\" \n+d=\"M2.2998 35.7998c42.2998 66.9004 125.2 233.2 373.101 112.601c39.6992 -19.1006 83.6992 -39.9004 105.899 -50.3008c8 -3.69922 11.7002 -13.1992 8.10059 -21.2998l-50.4004 -114.1c-0.0996094 -0.100586 -0.0996094 -0.299805 -0.200195 -0.400391\n+c-3.89941 -8.09961 -13.5996 -11.5996 -21.7002 -7.7002c-200.399 95.2002 -213.8 111.5 -280.899 -0.699219c0 0 -0.100586 -0.100586 -0.100586 -0.200195c-4.69922 -7.7002 -14.6992 -10 -22.3994 -5.2998l-105.9 65.1992c-7.59961 4.7002 -10 14.6006 -5.5 22.2002z\n+M509.7 347.9c-42.6006 -67.5 -125.4 -232.9 -373.4 -112.9c-39.7002 19.2002 -83.7998 40 -106 50.4004c-8 3.69922 -11.7002 13.1992 -8.09961 21.2998l50.5 114.1c0.0996094 0.100586 0.0996094 0.299805 0.200195 0.400391\n+c3.89941 8.09961 13.5996 11.5996 21.6992 7.7002c199.5 -94.7002 213.301 -111.7 280.601 0.899414c0.200195 0.400391 0.399414 0.700195 0.599609 1c5 7.5 15.1006 9.40039 22.6006 4.40039l105.8 -65.1006c7.59961 -4.69922 10 -14.5996 5.5 -22.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"dhl\" unicode=\"&#xf790;\" horiz-adv-x=\"640\" \n+d=\"M238 146.8l22.2998 30.2002h58.7002l-22.2998 -30.2002h-58.7002zM0 165.1h86.5l-4.7002 -6.39941h-81.7998v6.39941zM172.9 177h68.1992c-5.69922 -7.7998 -24.0996 -30.2998 -57.1992 -30.2998h-100.101l41.1006 55.7998h51c5.59961 0 5.59961 -2.2002 2.7998 -5.90039\n+c-2.7998 -3.69922 -7.60059 -10.2998 -10.4004 -14.0996c-1.39941 -1.90039 -4.09961 -5.5 4.60059 -5.5zM490.4 183.9h-62.2002l39.2998 53.3994h62.2002zM95.2998 177l-4.7002 -6.40039h-90.5996v6.40039h95.2998zM206.3 203.6\n+c2.7998 3.7002 2.90039 5.90039 -2.7002 5.90039h-111.399l20.3994 27.7998h117.9c29.9004 0 37.5996 -23.5996 29.2002 -35c-6.2002 -8.39941 -13.5 -18.3994 -13.5 -18.3994h-45.6006c-8.69922 0 -6 3.5 -4.59961 5.5c2.7998 3.7998 7.5 10.3994 10.2998 14.1992zM0 146.8\n+v6.40039h77.7998l-4.7002 -6.40039h-73.0996zM323 146.8c0 0 22.2002 30.2002 22.2998 30.2002h58.7002l-22.2998 -30.2002h-58.7002zM545 146.7l4.7002 6.39941h90.2998v-6.39941h-95zM567.3 177h72.7002v-6.40039h-77.4004zM553.8 158.7l4.7002 6.39941h81.5v-6.39941\n+h-86.2002zM389.6 237.3h58.7002l-39.2998 -53.3994h-143.6l39.2998 53.3994h58.7002l-22.5 -30.5996h26.1992zM423.1 177h133.4l-22.2998 -30.2998h-94.2998c-24.1006 0 -30.6006 11.5996 -23.2002 21.5996c2.09961 2.7998 6.39941 8.7002 6.39941 8.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"diaspora\" unicode=\"&#xf791;\" horiz-adv-x=\"512\" \n+d=\"M251.64 93.4502c-1.39941 0 -88 -119.9 -88.6992 -119.9c-0.700195 0 -86.6006 60.4502 -86.9404 61.2002s86.5996 125.7 86.5996 127.4c0 2.19922 -129.6 44 -137.6 47.0996c-1.2998 0.5 31.4004 101.8 31.7002 102.1c0.599609 0.700195 144.399 -47 145.5 -47\n+c0.399414 0 0.899414 0.600586 1 1.30078c0.399414 2 1 148.6 1.7002 149.6c0.799805 1.2002 104.5 0.700195 105.1 0.299805c1.5 -1 3.5 -156.1 6.09961 -156.1c1.40039 0 138.7 47 139.301 46.2998c0.799805 -0.900391 31.8994 -102.2 31.5 -102.6\n+c-0.900391 -0.900391 -140.2 -47.1006 -140.601 -48.8008c-0.299805 -1.39941 82.7998 -122.1 82.5 -122.899s-85.5 -63.5 -86.2998 -63.5c-1 0.200195 -89 125.5 -90.9004 125.5h0.0400391z\" \u002F>\n+    \u003Cglyph glyph-name=\"fedex\" unicode=\"&#xf797;\" horiz-adv-x=\"640\" \n+d=\"M586 163.5l54 -60.5h-64.4004l-22.2998 25l-22.0996 -25h-212.2v11.9004h-0.5c-7.90039 -11.7002 -20.7998 -18.6006 -34.9004 -18.6006c-32.6992 0 -56.3994 26.4004 -60.0996 56.9004h-85.5c0 -23.5 31.0996 -35.5 45.7998 -14.6006h42\n+c-27.5996 -67.6992 -130.2 -49.3994 -130.2 23.7002c0 6.40039 0.800781 12.5 2.30078 18.2002h-48.9004v-77.5h-49v184.4h109v-41.1006h-60v-26.2002h54.7998v-24.1992c24.5 43.5996 103.9 45.3994 121.9 -14c7.5 25.5 28.8994 44.8994 57.2998 44.8994\n+c13.9004 0 25.7998 -3.7998 35.4004 -14.7998h0.5v75.5h151.199v-48.0996h-56.0996v-16h118.7l22.5 -24.8008l21.7002 24.8008h62.3994zM139.3 180.1h46.5c-4.7998 25.6006 -40.3994 26.3008 -46.5 0zM292.7 131.2c34.5 0 32.5996 62.7998 0 62.7998\n+c-34 0 -34.6006 -62.7998 0 -62.7998zM460.5 112.1v29.6006h-56.0996v44.7002h56.0996v28.0996h-55.5v33.9004h56.0996v30.1992h-95v-166.5h94.4004zM414.6 151.9h56.1006v-45.6006l50.7002 57l-50.7002 57v-44h-56.1006v-24.3994zM553.2 141.6l26.2998 -29.5h40.5\n+l-46 51.4004l45.4004 51h-38.5l-25.6006 -29.2998l-26.5996 29.2998h-39.7002l45.5996 -51.2002l-45.5996 -51.2002h38.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"fedora\" unicode=\"&#xf798;\" \n+d=\"M225 416c123.7 -0.299805 223.7 -100.9 223.4 -224.6c-0.300781 -123.7 -100.9 -223.7 -224.601 -223.4l-170.2 0.400391v0c-29.5879 0 -53.6006 24.0127 -53.6006 53.5996c0 0.0830078 0.000976562 0.216797 0.000976562 0.299805l0.400391 170.3\n+c0.399414 123.7 100.899 223.7 224.6 223.4zM394.8 258.8c-0.0771484 6.26953 -1.33203 16.3047 -2.7998 22.4004l-55.2002 56.0996v-1.59961c0 -5.10059 -1.5 -9.60059 -3.7998 -14.2998zM331 353.7c1.65332 -2.31348 3.53516 -6.43555 4.2002 -9.2002l54.2998 -54.5996\n+c-8.27539 24.8252 -34.4834 53.4082 -58.5 63.7998zM118.1 200.8c-4.54785 -0.369141 -11.8057 -1.66895 -16.1992 -2.89941l8.5 -8.5c1.68457 3.44336 5.13477 8.55078 7.69922 11.3994zM97 196.6c-3.91211 -1.08984 -10.0498 -3.41895 -13.7002 -5.19922l27 -27.2002\n+c-1.30469 3.32617 -2.37988 8.92676 -2.39941 12.5l0.899414 8zM78.7998 189.2c-3.21484 -1.79492 -8.23242 -5.02051 -11.2002 -7.2002l35.3008 -35.9004c3.70801 1.84668 10.0254 3.95215 14.0996 4.7002zM63.5996 179.4\n+c-3.06738 -2.29395 -7.5918 -6.50488 -10.0996 -9.40039l34.9004 -34.5996c2.66113 2.6377 7.36523 6.44629 10.5 8.5zM50.2998 167.1c-2.89941 -3.2998 -5.7998 -6.69922 -8.59961 -10.5l35.7998 -35.8994c1.74121 3.40527 5.19141 8.5127 7.7002 11.3994zM39.2998 152.8\n+c-2.07715 -3.18457 -5.0791 -8.56055 -6.7002 -12l39.5 -39.7998c0.306641 4.3584 1.91895 11.168 3.60059 15.2002zM30.5 136.5c-1.7998 -4.90039 -3.2998 -9.59961 -4.7002 -14.5l52.7002 -53.5c-3.42578 6.82812 -6.42773 18.5654 -6.7002 26.2002zM22.5996 93.5\n+c0.0380859 -6.14551 1.33789 -15.957 2.90039 -21.9004l55.4004 -55.6992v1.09961c0.0341797 4.18848 1.64746 10.5947 3.59961 14.2998zM27.9004 62.7998c8.29785 -24.8047 34.5059 -53.3867 58.5 -63.7998c-1.61816 2.33008 -3.5 6.45117 -4.2002 9.2002zM22.5996 99.7998\n+l64.4004 -64.2002c2.30469 2.8877 6.74023 6.78613 9.90039 8.7002l-72.2002 72.5c-1.08105 -4.62988 -2.02148 -12.2461 -2.10059 -17zM275.9 151.6c32.5996 -0.0996094 32.6992 49.2002 0.199219 49.4004l-33.5996 0.0996094\n+c-4.91309 0.0224609 -8.90039 4.02734 -8.90039 8.94043v0.0595703l0.100586 47c0.0996094 40.5 38.5996 60.8008 66 54.9004c15.3994 -3.90039 30.2998 8.40039 30.2998 23.9004c0 12.0996 -8.7002 22.1992 -19.9004 24\n+c-5.39062 1.26953 -14.2617 2.30078 -19.8008 2.30078c-0.110352 0 -0.289062 -0.000976562 -0.398438 -0.000976562c-0.116211 0 -0.304688 0.000976562 -0.420898 0.000976562c-57.96 0 -105.081 -47.041 -105.18 -105.001l-0.0996094 -56l-42.6006 0.0996094\n+c-32.5996 0.100586 -32.6992 -49.2002 -0.0996094 -49.2998l33.5996 -0.0996094c4.40039 0 8.90039 -4.5 8.90039 -9l-0.0996094 -47c-0.00585938 -30.8574 -25.0537 -55.9004 -55.9102 -55.9004h-0.19043c-9.39941 0 -9.39941 1.59961 -15.7002 1.59961\n+c-13.3691 -0.208008 -24.3457 -11.2295 -24.5 -24.5996c0 -15.5 14.2002 -24.2002 19.9004 -24.2002c61.2998 -12.8994 125.5 33.6006 125.7 102.9l0.0996094 56zM299.4 151.9c4.50781 0.442383 11.7207 1.74219 16.0996 2.89941l-8.5 8.5\n+c-1.48047 -3.55762 -4.88477 -8.66504 -7.59961 -11.3994zM320.4 156.1c3.9248 1.09082 10.0625 3.46484 13.6992 5.30078l-27 27.1992c1.30566 -3.32617 2.38086 -8.92578 2.40039 -12.5l-0.900391 -8.09961zM338.4 163.5c4 2.2002 8.09961 4.7002 11.8994 7.2002\n+l-36.2002 35.8994c-4.09961 -2.2998 -8.7998 -3.59961 -13.6992 -4.69922zM353.9 173.3c2.92188 2.33301 7.44727 6.36426 10.0996 9l-34.9004 35c-2.63672 -2.66797 -7.34082 -6.47656 -10.5 -8.5zM367.1 185.6c2.52539 2.77441 6.37793 7.47852 8.60059 10.5\n+l-35.7998 35.9004c-1.78125 -3.37891 -5.23047 -8.48633 -7.7002 -11.4004zM378.1 199.9c2.10938 3.16602 5.11133 8.54199 6.7002 12l-39.5 39.7998c-0.305664 -4.3584 -1.91895 -11.168 -3.59961 -15.2002zM391.6 230.8l-53.0996 53.4004\n+c3.69434 -6.76172 6.875 -18.499 7.09961 -26.2002l41.3008 -41.5c1.50879 3.87695 3.61426 10.2832 4.69922 14.2998zM392.6 236.4c1.05957 4.52246 2.08984 11.959 2.30078 16.5996l-64.3008 64.7002c-2.18359 -3.12988 -6.61816 -7.25098 -9.89941 -9.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"figma\" unicode=\"&#xf799;\" horiz-adv-x=\"384\" \n+d=\"M277 277.3h-85.4004v-256c-0.0273438 -47.085 -38.2637 -85.2998 -85.3496 -85.2998c-47.1133 0 -85.3496 38.2363 -85.3496 85.3496s38.2363 85.3506 85.3496 85.3506h0.0498047c-47.1133 0 -85.3496 38.2363 -85.3496 85.3496s38.2363 85.3506 85.3496 85.3506\n+c-47.085 0 -85.2998 38.2139 -85.2998 85.2998c0 47.085 38.2148 85.2998 85.2998 85.2998h170.7c47.1133 0 85.3496 -38.2363 85.3496 -85.3496s-38.2363 -85.3506 -85.3496 -85.3506zM277 277.3c47.0801 -0.00488281 85.2949 -38.2197 85.2998 -85.2998\n+c0 -47.0859 -38.2139 -85.2998 -85.2998 -85.2998s-85.2998 38.2139 -85.2998 85.2998s38.2139 85.2998 85.2998 85.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"intercom\" unicode=\"&#xf7af;\" \n+d=\"M392 416c30.9004 0 56 -25.0996 56 -56v-336c0 -30.9004 -25.0996 -56 -56 -56h-336c-30.9004 0 -56 25.0996 -56 56v336c0 30.9004 25.0996 56 56 56h336zM283.7 333.9v-199.5c0 -19.8008 29.8994 -19.8008 29.8994 0v199.5c0 19.7998 -29.8994 19.7998 -29.8994 0z\n+M209.1 341.4v-216.5c0 -19.8008 29.9004 -19.8008 29.9004 0v216.5c0 19.7998 -29.9004 19.7998 -29.9004 0zM134.4 333.9v-199.5c0 -19.8008 29.8994 -19.8008 29.8994 0v199.5c0 19.7998 -29.8994 19.7998 -29.8994 0zM59.7002 304v-134.3\n+c0 -19.7998 29.8994 -19.7998 29.8994 0v134.3c0 19.7998 -29.8994 19.7998 -29.8994 0zM383.1 76.2002c14.9004 12.8994 -4.5 35.5996 -19.3994 22.7002c-63.2002 -53.9004 -213.4 -55.3008 -279.3 0c-15 12.7998 -34.4004 -9.90039 -19.4004 -22.7002\n+c76.4004 -65.4004 245.3 -63 318.1 0zM388.3 169.7v134.3c0 19.7998 -29.8994 19.7998 -29.8994 0v-134.3c0 -19.7998 29.8994 -19.7998 29.8994 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"invision\" unicode=\"&#xf7b0;\" \n+d=\"M407.4 416c22.3994 0 40.5996 -18.2002 40.5996 -40.5996v-366.801c0 -22.3994 -18.2002 -40.5996 -40.5996 -40.5996h-366.801c-22.3994 0 -40.5996 18.2002 -40.5996 40.5996v366.801c0 22.3994 18.2002 40.5996 40.5996 40.5996h366.801zM176.1 302.4\n+c-0.599609 35.0996 -53.5996 34.7998 -53.6992 -0.400391c0 -15 12.1992 -27 27.0996 -27c4.2002 0.0996094 27 4 26.5996 27.4004zM332.8 71c23.7998 0 42.7002 15.2998 53.2002 52l-17.9004 6.7002c-14.2998 -39.5 -31.7998 -32.4004 -31.7998 -16.9004\n+c0.299805 8.10059 0.700195 7.7002 14.9004 58.7998c26.0996 85.8008 -61.2998 113.5 -101.8 38l8.89941 40.5h-68.7998l-9.7002 -35.5996h32.2998l-19.7998 -79.4004c-16.5 -36.6992 -57.3994 -44.0996 -57.3994 -23.1992c0.299805 11.2998 -0.700195 4.5 32.8994 138.199\n+h-76.3994l-9.7002 -35.5996h31.7998c-22.0996 -90.0996 -22.9004 -89.7998 -23 -104.1c0 -48.7002 63.0996 -56.1006 94.5996 -4.30078l-8.09961 -32.5h45.0996l25.8008 103.301c14.6992 59.6992 74 47.0996 59.8994 0.699219c-9.09961 -32.5996 -40.5996 -106.6 25 -106.6z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"jira\" unicode=\"&#xf7b1;\" horiz-adv-x=\"496\" \n+d=\"M490 206.3c8 -7.89941 8 -20.7002 0 -28.5996c-225.8 -225 137.9 136.3 -241.5 -241.7c-180.7 180.1 -109.7 109.3 -242.5 241.6c-7.90039 8 -7.90039 20.8008 0 28.7002c0 0 77 76.7998 242.5 241.7c72.0996 -71.7998 168.6 -169 241.5 -241.7zM248.5 116.3l76 75.7002\n+l-76 75.7002l-76 -75.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"mendeley\" unicode=\"&#xf7b3;\" horiz-adv-x=\"640\" \n+d=\"M624.6 122.8c23.1006 -22.7002 17.8008 -73.5 0 -88.2998c-36.1992 -38.9004 -100 -18.2002 -104.899 35.2002c-1 11.7002 1.09961 23 5.7002 33c47.2998 103.7 -185.9 106.1 -146.5 8.2002c0.0996094 -0.100586 0.199219 -0.200195 0.299805 -0.400391\n+c26.5996 -42.5996 -6.7002 -97.2998 -58.7998 -95.2002c-52 -2.2002 -85.6006 52.4004 -58.8008 95.2002c0.100586 0.200195 0.200195 0.299805 0.300781 0.400391c39.3994 97.8994 -193.801 95.5 -146.5 -8.2002c20.3994 -44.9004 -14.1006 -93.7002 -61.2002 -87.7998\n+c-61.9004 7.7998 -62.5 82.8994 -42.6006 102.6c16 16 31.8008 24.7998 53 22.5c43.3008 1 49.7002 34.9004 37.5 98.7998c-22.6992 57.5 14.5 131.601 87.4004 130.8c76.9004 -0.699219 82.7998 -82 130.9 -82c49.1992 0 53.5 81.3008 130.899 82\n+c72.5 0.700195 110.2 -73.2998 87.4004 -130.8c-12.2002 -63.8994 -5.7998 -97.7998 37.5 -98.7998c18.7002 2 36.0996 -4.7998 48.3994 -17.2002zM320.7 141.9c43.5996 0 62.7998 37.7998 62.7998 62.7998c0 34.7002 -28.0996 62.7998 -62.7998 62.7998h-0.600586\n+c-34.5996 0 -62.7998 -28.0996 -62.7998 -62.7998c0 -25.2998 19.4004 -62.7998 62.7998 -62.7998h0.600586z\" \u002F>\n+    \u003Cglyph glyph-name=\"raspberry-pi\" unicode=\"&#xf7bb;\" horiz-adv-x=\"407\" \n+d=\"M372 215.5c28.7002 -17.2002 54.5996 -72.5996 14 -117.7c-2.59961 -14.0996 -7.09961 -24.2002 -11 -35.3994c-5.90039 -45.2002 -44.4004 -66.3008 -54.5996 -68.8008c-14.9004 -11.1992 -30.7002 -21.7998 -52.2002 -29.1992\n+c-20.2002 -20.6006 -42.1006 -28.4004 -64.2002 -28.4004h-1c-22 0 -44 7.7998 -64.2998 28.4004c-21.4004 7.39941 -37.2998 18 -52.2002 29.1992c-10.0996 2.5 -48.7002 23.6006 -54.5996 68.8008c-3.90039 11.1992 -8.40039 21.2998 -11 35.3994\n+c-40.5 45 -14.6006 100.5 14.1992 117.7l3.7002 6.5c-0.0996094 46.4004 21.4004 65.2998 46.5 79.7002c-7.59961 2 -15.3994 3.7002 -17.5996 13.2002c-13.1006 3.39941 -15.7998 9.39941 -17.1006 15.7998c-3.39941 2.2998 -14.7998 8.7002 -13.5996 19.7002\n+c-6.2998 4.39941 -9.90039 10.0996 -8.09961 18.0996c-6.90039 7.5 -8.7002 13.7002 -5.80078 19.4004c-8.2998 10.1992 -4.59961 15.5 -1.09961 20.8994c-6.2002 11.2002 -0.799805 23.2002 16.5 21.2002c6.90039 10.0996 21.9004 7.7998 24.2002 7.7998\n+c2.5 3.2998 6 6 16.5 4.7002c6.7998 6.09961 14.3994 5.09961 22.2998 2.09961c3.2002 2.5 6.09961 3.40039 8.7002 3.5c5 0.100586 9.2998 -2.89941 13.8994 -4.2998c11.3008 3.60059 13.8008 -1.39941 19.4004 -3.39941c12.2998 2.59961 16.0996 -3 22 -8.90039\n+l6.90039 0.0996094c18.5996 -10.7998 27.7998 -32.7998 31.0996 -44.0996c3.2998 11.2998 12.5 33.2998 31.0996 44.0996l6.90039 -0.0996094c5.90039 5.90039 9.7002 11.5 22 8.90039c5.5 2.09961 8.09961 7 19.4004 3.39941\n+c7.09961 2.2002 13.2998 8.10059 22.5996 0.799805c7.90039 2.90039 15.5 4 22.2998 -2.09961c10.5 1.2998 13.9004 -1.5 16.5 -4.7002c2.2998 0 17.2998 2.2998 24.2002 -7.7998c17.2998 2 22.7998 -10 16.5996 -21.2002c3.5 -5.2998 7.2002 -10.5996 -1.09961 -20.8994\n+c2.90039 -5.7002 1.09961 -11.9004 -5.7998 -19.4004c1.89941 -8 -1.7002 -13.7002 -8.10059 -18.0996c1.2002 -11 -10.1992 -17.4004 -13.5996 -19.7002c-1.2998 -6.40039 -4 -12.5 -17.0996 -15.7998c-2.2002 -9.60059 -10 -11.2002 -17.6006 -13.2002\n+c25.1006 -14.4004 46.6006 -33.2998 46.5 -79.7002zM349.8 223.5c1.5 48.7002 -36.3994 75.4004 -82.0996 67.9004c-16.7998 -2.80078 80.5996 -86.6006 82.0996 -67.9004zM306.8 130.4c24.5 15.7998 28.9004 51.5996 9.90039 80\n+c-19 28.3994 -54.2998 38.5996 -78.7998 22.7998s-28.9004 -51.6006 -9.90039 -80c19 -28.4004 54.2998 -38.6006 78.7998 -22.7998zM238.9 418.7c-16.6006 -15.9004 -40.1006 -55.9004 -5.80078 -71.7998c29 23.5 63.6006 40.6992 102 53.5\n+c-49.2998 -25.1006 -78 -45.3008 -93.6992 -62.6006c8.09961 -31.7002 50 -33.2002 65.3994 -32.2998c-3.09961 1.40039 -5.7998 3.09961 -6.7002 5.7998c3.80078 2.7002 17.5 0.299805 27 5.60059c-3.69922 0.699219 -5.39941 1.39941 -7.09961 4.09961\n+c9 2.90039 18.7002 5.2998 24.4004 10c-3.10059 0 -6 -0.599609 -10 2.09961c8.09961 4.30078 16.6992 7.7002 23.3994 14.2002c-4.2002 0.100586 -8.7002 0.100586 -10 1.60059c7.40039 4.5 13.6006 9.5 18.7998 15c-5.7998 -0.700195 -8.2998 -0.100586 -9.69922 0.899414\n+c5.59961 5.60059 12.5996 10.4004 16 17.2998c-4.40039 -1.5 -8.30078 -2.09961 -11.2002 0.100586c1.89941 4.2998 10 6.7002 14.7002 16.5996c-4.60059 -0.399414 -9.40039 -1 -10.4004 0c2.09961 8.5 5.7002 13.2002 9.2998 18.2002\n+c-9.7998 0.200195 -24.5996 0 -23.8994 0.799805l6 6.10059c-9.5 2.5 -19.3008 -0.400391 -26.4004 -2.60059c-3.2002 2.5 0 5.60059 3.90039 8.7998c-8.10059 -1 -15.5 -2.89941 -22.1006 -5.39941c-3.59961 3.09961 2.2998 6.2998 5.10059 9.39941\n+c-12.5 -2.2998 -17.8008 -5.59961 -23.1006 -8.89941c-3.7998 3.59961 -0.200195 6.7002 2.40039 9.7998c-9.40039 -3.5 -14.2998 -7.90039 -19.4004 -12.2998c-1.7998 2.2998 -4.39941 4 -1.2002 9.59961c-6.69922 -3.7998 -11.7998 -8.2998 -15.5 -13.2998\n+c-4.19922 2.59961 -2.5 6.09961 -2.5 9.40039c-7 -5.60059 -11.3994 -11.5 -16.7998 -17.3008c-1.09961 0.800781 -2.09961 3.40039 -2.89941 7.60059zM204.5 304.1c-27.2002 0.700195 -53.4004 -19.8994 -53.4004 -31.7998\n+c-0.0996094 -14.5996 21.5 -29.3994 53.6006 -29.7998c32.7998 -0.200195 53.7002 11.9004 53.7998 26.9004c0.0996094 16.8994 -29.7998 35 -54 34.6992zM81.5 316.9c9.59961 -5.2002 23.2002 -2.80078 27.2002 -5.60059\n+c-0.900391 -2.59961 -3.60059 -4.39941 -6.7002 -5.7998c15.4004 -0.900391 57.4004 0.5 65.4004 32.2998c-15.7002 17.2998 -44.4004 37.6006 -93.7002 62.6006c38.3994 -12.8008 73 -30 102 -53.5c34.0996 15.8994 10.5996 55.8994 -6 71.7998\n+c-0.900391 -4.2002 -1.7998 -6.7998 -2.90039 -7.60059c-5.39941 5.80078 -9.7998 11.7002 -16.7998 17.3008c0 -3.2002 1.59961 -6.80078 -2.5 -9.40039c-3.7002 5 -8.7998 9.5 -15.5 13.2998c3.2002 -5.59961 0.5 -7.2998 -1.2002 -9.59961\n+c-5.09961 4.39941 -10 8.89941 -19.3994 12.2998c2.59961 -3.09961 6.19922 -6.2002 2.39941 -9.7998c-5.2998 3.2998 -10.5996 6.59961 -23.0996 8.89941c2.7998 -3.09961 8.59961 -6.2998 5.09961 -9.39941c-6.7002 2.5 -14 4.2998 -22.0996 5.39941\n+c3.7998 -3.19922 7.09961 -6.2998 3.89941 -8.7998c-7.09961 2.2002 -16.8994 5.10059 -26.3994 2.60059l6 -6.10059c0.700195 -0.799805 -14.1006 -0.700195 -23.9004 -0.799805c3.5 -4.90039 7.2002 -9.7002 9.2998 -18.2002c-1 -1 -5.7998 -0.399414 -10.3994 0\n+c4.7002 -9.89941 12.7998 -12.3994 14.7002 -16.5996c-2.90039 -2.10059 -6.90039 -1.60059 -11.2002 -0.100586c3.2998 -6.89941 10.3994 -11.6992 16 -17.2998c-1.40039 -1 -3.90039 -1.59961 -9.7002 -0.899414c5.2002 -5.5 11.4004 -10.5 18.7998 -15\n+c-1.2998 -1.60059 -5.7998 -1.5 -10 -1.60059c6.7002 -6.5 15.2998 -9.89941 23.4004 -14.2002c-4 -2.7998 -6.90039 -2.09961 -10 -2.09961c5.7002 -4.7002 15.3994 -7.2002 24.3994 -10c-1.69922 -2.59961 -3.39941 -3.40039 -7.09961 -4.09961zM141.6 292.8\n+c-45.5996 7.60059 -83.5996 -19.2002 -82.0996 -67.8994c1.5 -18.6006 98.9004 65.0996 82.0996 67.8994zM38.2002 106c21.5996 -9.5 39.0996 105.3 12.5996 98.2998c-43.8994 -24.5996 -36.2998 -79.5 -12.5996 -98.2998zM129.2 7.7998\n+c14.0996 10.4004 6.39941 45.7002 -10.5 65.7002c-19.4004 22.2002 -44.6006 35.4004 -60.9004 25.5996c-10.8994 -8.19922 -12.8994 -36 2.60059 -63.3994c23 -32.6006 55.5 -35.7998 68.7998 -27.9004zM102.8 127.5c24.4004 -15.7998 59.7002 -5.59961 78.7998 22.7998\n+c19 28.4004 14.6006 64.2002 -9.89941 80s-59.7998 5.60059 -78.7998 -22.7998s-14.6006 -64.2002 9.89941 -80zM205 -48c28.4004 -0.5 57.7002 24.4004 57.2002 35.4004c-0.100586 11.3994 -32 19.8994 -55.7002 18.8994c-23.5 0.600586 -59.7002 -9.2998 -59.2998 -22\n+c-0.400391 -8.59961 28.3994 -33.5 57.7998 -32.2998zM263.9 76.9004v0.599609c-0.200195 29.5996 -26.8008 53.5996 -59.4004 53.4004c-32.5996 -0.200195 -59 -24.3008 -58.7998 -54v-0.600586c0.200195 -29.5996 26.7998 -53.5996 59.3994 -53.3994\n+c32.6006 0.199219 59 24.2998 58.8008 54zM346.1 34.2002c18.4004 23.2002 12.2002 62 1.7002 72.2998c-15.5996 11.9004 -38 -3.2998 -58.8994 -26.5996c-18.3008 -21.1006 -28.4004 -59.6006 -15.1006 -72c12.7002 -9.60059 47 -8.30078 72.2998 26.2998zM369 107.4\n+c23.7002 18.6992 31.2998 73.5996 -12.5996 98.2998c-26.4004 7 -8.90039 -107.7 12.5996 -98.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"redhat\" unicode=\"&#xf7bc;\" horiz-adv-x=\"512\" \n+d=\"M341.52 162.59v-0.149414c33.6504 0 82.3408 6.93945 82.3408 47c0.219727 6.73926 0.859375 1.81934 -20.8799 96.2393c-4.62012 19.1504 -8.68066 27.8398 -42.3105 44.6504c-26.0898 13.3398 -82.9199 35.3701 -99.7295 35.3701\n+c-15.6602 0 -20.2002 -20.1699 -38.8701 -20.1699c-18 0 -31.3105 15.0596 -48.1201 15.0596c-16.1406 0 -26.6602 -11 -34.7803 -33.6201c-27.5 -77.5498 -26.2803 -74.2695 -26.1201 -78.2695c0 -24.7998 97.6406 -106.11 228.47 -106.11zM429.07 193.19\n+l-0.0703125 -0.0302734c4.65039 -22 4.65039 -24.3506 4.65039 -27.25c0 -37.6602 -42.3301 -58.5605 -98 -58.5605c-125.74 -0.0800781 -235.91 73.6504 -235.91 122.33v0.0771484c0 5.65332 1.81836 14.4531 4.05957 19.6436\n+c-45.2402 -2.26074 -103.8 -10.3301 -103.8 -62.0303c0 -84.6699 200.63 -189 359.49 -189c121.79 0 152.51 55.0801 152.51 98.5801c0 34.21 -29.5898 73.0498 -82.9297 96.2402z\" \u002F>\n+    \u003Cglyph glyph-name=\"sketch\" unicode=\"&#xf7c6;\" horiz-adv-x=\"512\" \n+d=\"M27.5 285.8l78.9004 105.8l-6.90039 -130.699h-90.5zM396.3 402.3l7.10059 -133.5l-135.7 147.2zM112.2 229.7l122.6 -239.7l-224.899 261.7h91.0996zM114.2 260.9l142.1 154.1l60.4004 -65.5996l81.5 -88.5h-284zM411.5 251.8v-0.0996094h90.9004l-224.801 -261.7z\n+M415.4 379l87.8994 -118.1h-90.2998l-6.09961 113.399l-0.900391 17.2998zM113.5 354.5l2.59961 47.7998l128.601 13.7002l-135.8 -147.1zM401.2 251.8l-144.9 -283.8l-102.7 200.9l-42.3994 82.8994h290z\" \u002F>\n+    \u003Cglyph glyph-name=\"sourcetree\" unicode=\"&#xf7d3;\" \n+d=\"M427.2 245c-0.0947266 -81.5225 -63.1279 -168.031 -140.7 -193.1v-101.601c0 -7.89355 -6.40625 -14.2998 -14.2998 -14.2998v0h-96.4004c-7.89355 0 -14.2998 6.40625 -14.2998 14.2998v101.7c-77.5566 25.0537 -140.5 111.535 -140.5 193.037v0.363281\n+c0.200195 112 91.0996 202.8 203.2 202.6c112.1 0 203 -90.9004 203 -203zM155.6 245c0 -91 137.2 -89.9004 137.301 0c0 90.7998 -137.301 90.7998 -137.301 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"suse\" unicode=\"&#xf7d6;\" horiz-adv-x=\"640\" \n+d=\"M471.08 345.34c0 1 1.01953 0.759766 0.919922 0.660156c4.2002 -0.599609 92.2002 -13.7002 129.2 -35.2998c12.0996 -6.90039 20.7002 -21.5 34.5 -69.6006c0.700195 -2.7998 -2.7998 -5.09961 -3.60059 -5.69922\n+c-26.8994 -18.8008 -56.7998 -36.6006 -145.199 21.6992c11.0996 -26.6992 10.6992 -25.0996 11 -25.5c5.39941 -2.7998 56.2998 -28.6992 81.5996 -28.1992c20.4004 0.399414 42.2002 10.3994 50.9004 15.5996c0 0 4.5 2.7002 3.19922 -2.40039\n+c-0.5 -1.89941 -3.2998 -14.5996 -7 -17.6992c-1 -1 -36.5996 -28.4004 -103.1 -28c-42.7002 1 -76.7998 16.3994 -82.4004 -17.4004c-2.7998 -17.0996 6.10059 -37.5 18.9004 -55.7998h-48.5996c-15.9004 28.3994 -23.1006 68.2998 -79.8008 68.2998\n+c-51.5996 0 -48.3994 -50.7002 -42.6992 -68.2998h-45.9004c-18.7998 68.7998 -69.2002 98.5996 -102.4 104.3c-74.2998 12.7998 -113 -49.2002 -87 -98.4004c23.1006 -43.5996 81.4004 -44.0996 99.7002 -20.3994c19.2002 25 3.7998 62.8994 -28.5 65.7002\n+c-12.2998 1.09961 -25.2998 -4.60059 -25.5 -16.9004v-0.0595703c0 -10.9004 10 -13.8008 12 -14c7.2998 0.399414 8.90039 1.89941 11.7998 2.39941c5.2002 0.900391 16.8008 -1.7998 16.8008 -13.8994c0 -8.40039 -6.80078 -13.1006 -13.3008 -14.9004\n+c-4.2373 -1.46777 -11.3154 -2.67773 -15.7998 -2.7002c-17.2002 0 -41.2002 14.7998 -41.5 42.6006c-0.200195 15.6992 7.7002 30 21.6006 39.1992c15.8994 10.5 43.5996 14.1006 69.1992 -1.59961c31.5 -19.2998 39.7002 -57.0996 31.5 -82.9004\n+c-11.8994 -37.2998 -45.5996 -57.1992 -90 -53.2998c-31.5 2.7998 -60.6992 19.4004 -78.0996 44.4004c-6.32715 9.0332 -13.7197 25.0264 -16.5 35.7002c-7.12012 28.0596 0 58.0596 5.48047 71.3994c25.6992 63.6006 80.1992 97.2998 99.5996 109.7\n+c100.2 61.5996 171.1 59.0996 223 57.2998c61.2998 -2.2002 126.6 -23.2998 135.7 -26.2998c0 2 0.299805 20.2998 0.299805 20.2998zM531.48 272.54c-1.10059 -33.5 39.0996 -51.5996 63.2998 -28.9004c24.3994 22.9004 9 64 -24.4004 65.2002\n+c-0.380859 0.0136719 -0.999023 0.0253906 -1.37988 0.0253906c-20.0615 0 -36.8711 -16.2734 -37.5195 -36.3252zM570.08 297.84c14.0312 -0.413086 25.4199 -12.1406 25.4199 -26.1787c0 -0.282227 -0.00878906 -0.739258 -0.0195312 -1.02148\n+c-0.50293 -13.9795 -12.2646 -25.3262 -26.2539 -25.3262c-14.501 0 -26.2695 11.7695 -26.2695 26.2705s11.7686 26.2695 26.2695 26.2695c0.236328 0 0.618164 -0.00585938 0.853516 -0.0136719zM574.38 269.04c15.4004 0 15.4004 15.5996 0 15.5996\n+c-15.3994 0 -15.3994 -15.5996 0 -15.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"ubuntu\" unicode=\"&#xf7df;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM300.7 347c-8.7998 -15.2002 -3.60059 -34.7002 11.7002 -43.5996c15.1992 -8.80078 34.6992 -3.5 43.5 11.6992c8.7998 15.3008 3.59961 34.8008 -11.7002 43.6006\n+c-15.2002 8.7998 -34.7002 3.5 -43.5 -11.7002zM87.4004 160.1c17.5996 0 31.8994 14.3008 31.8994 31.9004s-14.2998 31.9004 -31.8994 31.9004c-17.6006 0 -31.9004 -14.3008 -31.9004 -31.9004s14.2998 -31.9004 31.9004 -31.9004zM115.5 157\n+c8.7002 -32.7002 29.0996 -60.7002 56.5 -79l23.7002 39.5996c-51.5 36.3008 -51.5 112.5 0 148.801l-23.7002 39.5996c-27.4004 -18.4004 -47.9004 -46.2998 -56.5 -79.0996c22.4004 -18 22.2998 -52 0 -69.9004zM344.2 25.2998\n+c15.2998 8.7998 20.5 28.2998 11.7002 43.6006c-8.80078 15.2998 -28.3008 20.5 -43.5 11.6992c-15.3008 -8.7998 -20.5 -28.2998 -11.7002 -43.5996s28.2002 -20.5 43.5 -11.7002zM344.5 94.7998c23 22.9004 38 53.9004 40.2998 88.4004l-46.0996 0.700195\n+c-5.5 -62.7002 -71.9004 -100.9 -128.9 -74.4004l-22.5 -40.2998c47.7998 -23.7002 91.5 -10.7998 96.7002 -9.40039c4.40039 28.4004 33.7998 45.2998 60.5 35zM338.6 200.1l46 0.600586c-2.19922 34.5996 -17.0996 65.5996 -40.1992 88.5\n+c-26.7002 -10.2998 -56.1006 6.7002 -60.5 35c-5.2002 1.39941 -48.8008 14.2998 -96.7002 -9.40039l22.5 -40.2998c57.5996 26.7998 123.5 -12.4004 128.899 -74.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"ups\" unicode=\"&#xf7e0;\" horiz-adv-x=\"384\" \n+d=\"M103.2 145v123h32.5996v-141.6c-17.7002 -12.1006 -97.8994 -35.9004 -97.8994 39v102.6h32.6992v-104c0 -32.0996 27.4004 -22.5996 32.6006 -19zM4 373.18c93.5996 49.6006 259.1 61.6006 375.4 0v-220.899c0 -103.9 -75.3008 -135.2 -187.7 -184.101\n+c-112.8 48.9004 -187.7 80.4004 -187.7 184.101v220.899zM362.1 152.28v216.2c-109.3 10.1992 -238.6 4 -340.899 -89.8008v-126.399c0 -86.6006 53 -113.5 170.5 -165.3c117.2 51.6992 170.399 78.6992 170.399 165.3zM152.5 259.68\n+c23.7002 15.3203 104.4 31.8008 104.4 -65.5996c0 -75.9004 -47.3008 -85.7998 -71.7002 -78.5v-68.7002h-32.7002v212.8zM185.2 142.38c2 -0.799805 38.3994 -16.8994 38.3994 51c0 62 -30 53.5 -38.3994 49.2998v-100.3zM264.3 228.78\n+c-0.200195 41.0996 51.2002 53.8994 79.7002 31.8994v-28.3994c-17.9004 18.2998 -47.9004 18.0996 -48.5 -2.2002c-0.700195 -26.5996 55.0996 -21.7002 53.4004 -73.2002c-1.30078 -41.5996 -47 -55 -83.2002 -33.5v30.1006\n+c20.3994 -18.1006 51.3994 -18.6006 50.7998 4.89941c-0.599609 27.9004 -52.0996 23.1006 -52.2002 70.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"usps\" unicode=\"&#xf7e1;\" horiz-adv-x=\"576\" \n+d=\"M460.3 206.3c-1.39941 -2.2002 -4.2998 -4.39941 -3.7998 0.100586c2.90039 11.5996 13.9004 30.5 4.40039 32c-17.8008 3.09961 -88.1006 -4.5 -88.1006 0c0 2.39941 26.7002 3.09961 37.9004 8.69922c9.39941 9.40039 10.7998 8 10.8994 8h27\n+c26.9004 0 37.5 -7.5 11.7002 -48.7998zM348.2 183.7c-62.2998 -21.2002 -124.8 -54.2002 -321.2 -151.5l52.4004 245.5c185 0 335.199 5.59961 337.899 -22.6006h-196.6l30.7002 -93.2998c35 16.7998 120.899 51.7002 172.6 53.9004\n+c21.7998 0.799805 30.5996 -2.90039 26.2002 -5.7998c-4.7002 -2.30078 -38 -4.90039 -102 -26.2002zM94.7002 352h454.3l-67.7002 -319.7h-423.1s402 157.3 406.399 160.2c0 0 35.7002 48 14.6006 67.7002c-6.5 6.59961 -16 6.59961 -52.4004 6.59961\n+c-2.09961 19.5 -78.7998 31.5 -332.1 85.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"yarn\" unicode=\"&#xf7e3;\" horiz-adv-x=\"496\" \n+d=\"M393.9 102.8c-39 -9.2998 -48.4004 -32.0996 -104 -47.3994c0 0 -2.7002 -4 -10.4004 -5.80078c-13.4004 -3.2998 -63.9004 -6 -68.5 -6.09961c-12.4004 -0.0996094 -19.9004 3.2002 -22 8.2002c-6.40039 15.2998 9.2002 22 9.2002 22\n+c-8.10059 5 -9 9.89941 -9.7998 8.09961c-2.40039 -5.7998 -3.60059 -20.0996 -10.1006 -26.5c-8.7998 -8.89941 -25.5 -5.89941 -35.2998 -0.799805c-10.7998 5.7002 0.799805 19.2002 0.799805 19.2002s-5.7998 -3.40039 -10.5 3.59961\n+c-6 9.2998 -17.0996 37.2998 11.5 62c-1.2998 10.1006 -4.59961 53.7002 40.6006 85.6006c0 0 -20.6006 22.7998 -12.9004 43.2998c5 13.3994 7 13.2998 8.59961 13.8994c5.7002 2.2002 11.3008 4.60059 15.4004 9.10059c20.5996 22.2002 46.7998 18 46.7998 18\n+s12.4004 37.7998 23.9004 30.3994c3.5 -2.2998 16.2998 -30.5996 16.2998 -30.5996s13.5996 7.90039 15.0996 5c8.2002 -16 9.2002 -46.5 5.60059 -65.0996c-6.10059 -30.6006 -21.4004 -47.1006 -27.6006 -57.5c-1.39941 -2.40039 16.5 -10 27.8008 -41.3008\n+c10.3994 -28.5996 1.09961 -52.6992 2.7998 -55.2998c0.799805 -1.39941 13.7002 -0.799805 36.3994 13.2002c12.8008 7.90039 28.1006 16.9004 45.4004 17c16.7002 0.5 17.5996 -19.2002 4.90039 -22.2002zM496 192c0 -136.9 -111.1 -248 -248 -248s-248 111.1 -248 248\n+s111.1 248 248 248s248 -111.1 248 -248zM416.7 116.8c-1.7002 13.6006 -13.2002 23 -28 22.7998c-22 -0.299805 -40.5 -11.6992 -52.7998 -19.1992c-4.80078 -3 -8.90039 -5.2002 -12.4004 -6.80078c3.09961 44.5 -22.5 73.1006 -28.7002 79.4004\n+c7.7998 11.2998 18.4004 27.7998 23.4004 53.2002c4.2998 21.7002 3 55.5 -6.90039 74.5c-1.59961 3.09961 -7.39941 11.2002 -21 7.39941c-9.7002 20 -13 22.1006 -15.5996 23.8008c-1.10059 0.699219 -23.6006 16.3994 -41.4004 -28\n+c-12.2002 -0.900391 -31.2998 -5.30078 -47.5 -22.8008c-2 -2.19922 -5.89941 -3.7998 -10.0996 -5.39941h0.0996094c-8.39941 -3 -12.2998 -9.90039 -16.8994 -22.2998c-6.5 -17.4004 0.199219 -34.6006 6.7998 -45.7002c-17.7998 -15.9004 -37 -39.7998 -35.7002 -82.5\n+c-34 -36 -11.7998 -73 -5.59961 -79.6006c-1.60059 -11.0996 3.69922 -19.3994 12 -23.7998c12.5996 -6.7002 30.2998 -9.59961 43.8994 -2.7998c4.90039 -5.2002 13.7998 -10.0996 30 -10.0996c6.7998 0 58 2.89941 72.6006 6.5c6.7998 1.59961 11.5 4.5 14.5996 7.09961\n+c9.7998 3.09961 36.7998 12.2998 62.2002 28.7002c18 11.7002 24.2002 14.2002 37.5996 17.3994c12.9004 3.2002 21 15.1006 19.4004 28.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"airbnb\" unicode=\"&#xf834;\" \n+d=\"M224 74.8799h0.0595703c24.71 31.1797 39.5508 58.9297 45 83.1797c22.5508 88 -112.609 88 -90.0596 0c4.91992 -23.75 19.7598 -51.5098 45 -83.1797zM362.15 1.65039c35.6396 15.3496 50.1797 53.5693 37.0098 86.6396\n+c-25.4902 61.6104 -78.8398 168.47 -114.84 239.09c-16.9707 33.9297 -28.0303 59.8701 -60.3701 59.8701c-33.8203 0 -43.6299 -27.3301 -59.3799 -57.4004c-4.15039 -10.3799 -100.771 -202.399 -115.87 -241.56c-17.8105 -50.0303 21.2998 -98.5205 71.2998 -91.0898\n+c24.5996 2.22949 52.6201 18.8701 85.1504 54.9199c-29.2002 37.1104 -47.5 70.3096 -54.4307 99.5c-11.8799 53.9902 18.3604 100.5 73.2803 100.5c64.96 0 122.75 -69.9297 18.8496 -200c35.6309 -39.5898 77.2402 -68.7803 119.301 -50.4697zM409.15 137.77\n+c0 -0.679688 16.8496 -35.6895 16.8301 -39.5791c25.2393 -69.3301 -26.7207 -130.24 -89.6104 -130.19c-11.1104 0 -53.6904 -1.37988 -112.37 62.4004c-51.7598 -56.3408 -90.6602 -62.4004 -112.37 -62.4004c-62.8896 0 -114.85 60.8604 -89.6299 130.19\n+c0.889648 2.61914 11.1797 32.71 117.34 245.02c19.79 41.1201 39.1406 72.79 84.6602 72.79c49.1299 0 56.2695 -3.92969 185.15 -278.23z\" \u002F>\n+    \u003Cglyph glyph-name=\"battle-net\" unicode=\"&#xf835;\" horiz-adv-x=\"512\" \n+d=\"M448.61 222.38c60.75 -36.25 71.9893 -73.8096 57.3193 -93.6895c-4.70996 -6.88086 -25.1797 -36.2402 -148 -31.6406c-21.8193 -30.3994 -45.25 -53.2695 -67.4697 -69.2695c28.54 -53.7803 54.2998 -85.0303 62.54 -91.7803c0 0 -3.44043 0.160156 -8.58008 3.37012\n+c-2.69434 1.61133 -6.61426 4.78809 -8.75 7.08984c-15.6299 16.1797 -35.5195 41.9404 -55.7002 74.1201c-43.9502 -28.1104 -81.1299 -29.0996 -88.4395 -9.4502c-4.83984 10.8301 1.5293 26.5 9.05957 39.3398c-31.3203 -17.5098 -61.7002 -26.8496 -86.7002 -21.1396\n+c-6.79004 1.54004 -17.6299 5.50977 -23.1992 18.2598c-4.52051 9.53027 -6.02051 24.2598 -0.150391 47.1406c9.07031 35.3398 37.5801 82.2998 47.3096 97.6992c3.75 -8.62988 -20.7793 40.1904 -26 93.1904c-89.1592 0 -110.56 -8.83984 -111.56 -9.21973\n+c1.54004 2.44922 7.86035 7.26953 17.7598 9.71973c22 5.47949 54.6406 9.84961 93 11.2295c-2.38965 52.0703 15.3398 84.7705 36 81.29h0.180664c11.3291 -1.2998 21.2598 -13.5801 28.5 -25.9297c0.669922 35.2002 7.7998 65.54 25 84.0703\n+c4.72949 5.14941 13.5693 12.5498 27.3994 11h0.0498047c10.5205 -0.850586 24 -6.91992 40.8398 -23.4707c25.6006 -25.0693 51.54 -71.9893 60.4805 -88.9297c37.25 -3.7002 68.7695 -12.5801 93.7695 -23.7998c32.3506 51.5898 46.4805 89.5303 48.2002 100.05\n+c0.640625 -1.25 2.93066 -8.41992 -0.450195 -20.25c-6.22949 -21.6201 -18.5791 -51.7197 -36.3398 -85.2998c45.79 -23.7305 65.3203 -55.0098 52.8506 -71.3301c-3.35059 -4.94043 -12.0498 -12.5498 -38.9199 -12.3701zM370.76 116.16\n+c70.4102 4.37988 79.6504 20.5703 78.5098 33.5c-1.87988 21.25 -21.1992 41.2598 -49.0596 58.8301c0.889648 -24.5605 -5.63965 -54.6201 -29.4502 -92.3301zM216.9 60.3096c-19.04 -30.46 9.19922 -39.5596 49.7998 -17.6992\n+c-7 12.0898 -13.9199 24.8594 -20.6006 38.1895c-9.66992 -7.37012 -19.4395 -14.2598 -29.1992 -20.4902zM431.9 231.66c36.2598 -1.23047 29.4199 27.8496 -9.64062 51.9502c-5.9707 -10.373 -16.1582 -26.9043 -22.7402 -36.9004\n+c11.2207 -4.70996 22.0908 -9.70996 32.3809 -15.0498zM279.18 50c28.3799 18.2002 60.1689 48.1201 84.7695 85.4297c18.46 27.96 26.1494 56.0205 25.4102 79.5703c-30.5801 17.3203 -89.3604 42.7197 -167.23 57.21c0.350586 18.4805 2.08984 19.8799 2.16016 20.3301\n+c10.9229 -1.33496 28.5693 -4.04492 39.3896 -6.0498c32.5664 -6.08984 84.2383 -20.2959 115.34 -31.71c-15.6191 33.1494 -41.4092 47.2197 -41.5195 47.2197c1.59961 0.160156 28.1299 -6 48.8604 -43.7197c8.42676 11.2061 16.2031 22.0293 23.3301 32.4697\n+c-29.96 15.46 -71.75 28.04 -116.32 30.71c-33.4502 1.99023 -61.6299 -5.38965 -81.6299 -17.8096c0.240234 -35.2607 7.66992 -98.96 34 -173.431c-16.8301 -9.12988 -17.7402 -7.87012 -18.6699 -8.25c-17.1924 40.7627 -37.2041 109.235 -44.6699 152.84\n+c-21.0908 -30.3994 -20.1406 -59.5 -20.1406 -59.5693c-0.919922 1.22949 -8.81934 27.4297 13.4707 64.2295c-13.5801 1.70996 -26.5508 2.9707 -38.8506 3.87988c1.57031 -33.6797 11.5703 -76.1494 31.5703 -116.069c14.8701 -29.71 35.1201 -50.3105 55.71 -61.4902\n+c30.4102 17.9199 81.0498 55.6504 132.75 115.92c14.9697 -9 16.1494 -11.71 16.5098 -12c-7.91309 -10.5332 -16.2227 -20.9033 -24.9287 -31.1104c-21.542 -25.1426 -59.6494 -62.7744 -85.0605 -84c37.5303 -3.38965 62.5303 12.1807 62.5303 12.25\n+c-0.860352 -1.67969 -20.0303 -21.6797 -63.2803 -20.4092c5.5 -12.9404 10.9902 -25.0908 16.5 -36.4404zM306.579 337c-1.58008 2.4502 -39.5801 58.8496 -56.4805 54.6104c-16.8994 1.09961 -36.21 -22.9805 -38.21 -75.2803\n+c21.1104 13.2402 50.1299 22.3301 94.6904 20.6699zM175.929 333.9c-3.7998 6.68945 -8.66992 12.4795 -14.4297 13.5693h-0.0898438c-24.79 1.41016 -24.75 -52.8301 -24.6699 -49.5898c13.6602 -0.00976562 27.8496 -0.410156 42.3994 -1.25977\n+c-1.62012 12.6602 -2.72949 25.1699 -3.20996 37.2803zM147.869 171.9c-30.7998 -61.5098 -19.8701 -76.6104 -19.6699 -76.8203c7.38965 -15.4902 38.1299 -20.25 84.9199 4.50977c-21.9502 11.7402 -44.4902 32.6104 -65.25 72.3105zM357.929 97.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"bootstrap\" unicode=\"&#xf836;\" \n+d=\"M292.3 136.07c0 -42.4102 -39.7197 -41.4307 -43.9199 -41.4307h-80.8896v81.6904h80.8896c42.5605 0 43.9199 -31.9004 43.9199 -40.2598zM242.15 209.2h-74.6602v72.1797h74.6602c34.9297 0 38.4395 -20.3496 38.4395 -35.8701\n+c0 -37.3096 -37.7695 -36.3096 -38.4395 -36.3096zM448 341.33v-298.66c-0.120117 -41.0977 -33.5723 -74.5498 -74.6699 -74.6699h-298.66c-41.0977 0.120117 -74.5498 33.5723 -74.6699 74.6699v298.66c0.120117 41.0977 33.5723 74.5498 74.6699 74.6699h298.66\n+c41.0977 -0.120117 74.5498 -33.5723 74.6699 -74.6699zM338.05 130.14c0 21.5703 -6.64941 58.29 -49.0498 67.3506v0.729492c22.9102 9.78027 37.3398 28.25 37.3398 55.6406c0 7 2 64.7793 -77.5996 64.7793h-127v-261.33c128.229 0 139.87 -1.67969 163.6 5.70996\n+c14.21 4.4209 52.71 17.9805 52.71 67.1201z\" \u002F>\n+    \u003Cglyph glyph-name=\"buffer\" unicode=\"&#xf837;\" \n+d=\"M427.84 67.3301l-196.5 -97.8203c-1.93848 -0.832031 -5.22461 -1.50684 -7.33496 -1.50684c-2.10938 0 -5.39551 0.674805 -7.33496 1.50684l-196.51 97.8203c-4 2 -4 5.28027 0 7.29004l47.0596 23.3799c1.94238 0.832031 5.23242 1.50684 7.3457 1.50684\n+c2.1123 0 5.40234 -0.674805 7.34473 -1.50684l134.76 -67c1.93848 -0.836914 5.22461 -1.51562 7.33496 -1.51562c2.11133 0 5.39746 0.678711 7.33496 1.51562l134.76 67c1.94043 0.832031 5.22949 1.50781 7.34082 1.50781s5.39941 -0.675781 7.33984 -1.50781\n+l47.0596 -23.4297c4.0498 -1.95996 4.0498 -5.24023 0 -7.24023zM427.84 203.86c4.0498 -2.01074 4.0498 -5.29004 0 -7.31055l-196.5 -97.7998c-1.93848 -0.832031 -5.22461 -1.50781 -7.33496 -1.50781c-2.10938 0 -5.39551 0.675781 -7.33496 1.50781l-196.51 97.7998\n+c-4 2.02051 -4 5.31055 0 7.31055l47.0596 23.4297c1.94238 0.832031 5.23242 1.50684 7.3457 1.50684c2.1123 0 5.40234 -0.674805 7.34473 -1.50684l134.76 -67.0801c1.93945 -0.828125 5.22559 -1.5 7.33496 -1.5s5.39551 0.671875 7.33496 1.5l134.76 67.0801\n+c1.94043 0.832031 5.22949 1.50781 7.34082 1.50781s5.39941 -0.675781 7.33984 -1.50781zM20.1602 317.58c-4.0498 1.86035 -4.0498 4.88965 0 6.74023l196.5 90.2793c1.9502 0.774414 5.23633 1.40332 7.33496 1.40332s5.38477 -0.628906 7.33496 -1.40332\n+l196.51 -90.2793c4 -1.85059 4 -4.87988 0 -6.74023l-196.51 -90.29c-1.95215 -0.765625 -5.23828 -1.3877 -7.33496 -1.3877s-5.38281 0.62207 -7.33496 1.3877z\" \u002F>\n+    \u003Cglyph glyph-name=\"chromecast\" unicode=\"&#xf838;\" horiz-adv-x=\"512\" \n+d=\"M447.83 384h0.169922c23.5811 0 42.7197 -19.1387 42.7197 -42.7197v-298.561c0 -23.5811 -19.1387 -42.7197 -42.7197 -42.7197v0h-149.36v42.7197h149.19v298.561h-383.83v-63.9199h-42.7197v63.9199c0 23.5811 19.1387 42.7197 42.7197 42.7197h383.83z\n+M21.2803 64.4199c35.2783 0 63.9102 -28.6318 63.9102 -63.9102v-0.00976562h-63.9102v63.9199zM21.2803 149.7l0.0292969 -0.339844h0.330078c82.248 -0.105469 149 -66.9424 149 -149.19v-0.169922h-42.7197v0.339844v0.0302734c0 58.8594 -47.7705 106.63 -106.63 106.63\n+h-0.00976562v42.7002zM21.2803 234.97v-0.330078c129.46 -0.370117 234.34 -105.18 234.8 -234.64h-42.7197v0.5c-0.0800781 106 -86.0801 191.85 -192.08 191.75v42.7197z\" \u002F>\n+    \u003Cglyph glyph-name=\"evernote\" unicode=\"&#xf839;\" horiz-adv-x=\"384\" \n+d=\"M120.82 315.79c1.59961 -22.3096 -17.5508 -21.5898 -21.6104 -21.5898c-68.9297 0 -73.6396 1 -83.5801 -3.33984c-0.55957 -0.220703 -0.740234 0 -0.370117 0.370117l108.53 110.319c0.379883 0.370117 0.599609 0.219727 0.379883 -0.370117\n+c-4.34961 -9.98926 -3.34961 -15.0898 -3.34961 -85.3896zM199.82 7.79004c-14.6807 37.0801 13 76.9297 52.5195 76.6201c17.4902 0 22.6006 -23.21 7.9502 -31.4199c-6.19043 -3.2998 -24.9502 -1.74023 -25.1396 -19.2002\n+c-0.0507812 -17.0898 19.6699 -25 31.1992 -24.8896h0.0107422c25.1934 0 45.6396 20.4463 45.6396 45.6396v0.00976562v0.0800781c0 11.6299 -7.79004 47.2197 -47.54 55.3398c-7.71973 1.54004 -65 6.35059 -68.3496 50.5205\n+c-3.74023 -16.9307 -17.4004 -63.4902 -43.1104 -69.0898c-8.74023 -1.94043 -69.6797 -7.64062 -112.92 36.7695c0 0 -18.5703 15.2305 -28.2305 57.9502c-3.37988 15.75 -9.2793 39.7002 -11.1396 62c0 18 11.1396 30.4502 25.0703 32.2002c81 0 90 -2.32031 101 7.7998\n+c9.81934 9.24023 7.7998 15.5 7.7998 102.78c1 8.2998 7.79004 30.8096 53.4102 24.1396c6 -0.860352 31.9102 -4.17969 37.4795 -30.6396l64.2607 -11.1504c20.4297 -3.70996 70.9395 -7 80.5996 -57.9404c22.6602 -121.09 8.91016 -238.46 7.7998 -238.46\n+c-15.9795 -114.38 -111.07 -108.85 -111.07 -108.85c-18.9492 0.230469 -54.25 9.40039 -67.2695 39.8301zM280.76 212.63c-1 -1.91992 -2.2002 -6 0.850586 -7c14.0898 -4.92969 39.75 -6.83984 45.8799 -5.53027c3.10938 0.25 3.0498 4.43066 2.47949 6.65039\n+c-3.5293 21.8496 -40.8301 26.5 -49.2393 5.91992z\" \u002F>\n+    \u003Cglyph glyph-name=\"itch-io\" unicode=\"&#xf83a;\" horiz-adv-x=\"512\" \n+d=\"M71.9199 413.23c19.2197 1.66992 114.32 2.76953 184.08 2.76953s116.56 -0.400391 184 -2.73047c21.7197 -12.9297 64.5195 -62.0996 64.9199 -75v-21.3398c0 -27.0596 -25.25 -50.8398 -48.25 -50.8398c-27.54 0 -50.54 22.8799 -50.54 50\n+c0 -27.1494 -22.2295 -50 -49.7598 -50s-49 22.8799 -49 50c0 -27.1494 -23.5898 -50 -51.1602 -50h-0.5c-27.5703 0 -51.1602 22.8799 -51.1602 50c0 -27.1494 -21.4199 -50 -49 -50s-49.7598 22.8799 -49.7598 50c0 -27.1494 -22.9697 -50 -50.54 -50\n+c-22.96 0 -48.25 23.7803 -48.25 50.8398v21.3398c0.400391 12.8906 43.2002 62.0605 64.9199 74.9609zM204.24 278.84c9.14844 -15.9902 31.5527 -28.9785 49.9746 -28.9785c0.498047 0 1.30664 0.0126953 1.80469 0.0283203c28.7109 0 44.6602 16.4502 51.7607 28.9404\n+c22 -38.3398 77.8496 -38.7598 99.8496 -0.240234c13.1201 -23.0596 43.0801 -32.0996 56 -27.6602c3.57031 -37.1494 13.9004 -236.88 -17.75 -269.149c-77.6797 -18.1201 -299.76 -18.6699 -379.76 0c-31.4004 32.0195 -21.6006 229 -17.7305 269.149\n+c12.8301 -4.41016 42.8301 4.52051 56 27.6602c21.9502 -38.46 77.8506 -38.1494 99.8506 0.25zM162.66 225.07l-0.0205078 -0.0703125c-52.3193 0 -65.21 -77.4502 -83.8799 -144.45c-17.2598 -62.1494 5.52051 -63.6699 33.9404 -63.7295\n+c42.1494 1.56934 65.4902 32.1797 65.4902 62.79c53.6191 -8.79004 116.3 -6.43066 155.55 0c0 -30.6104 23.3398 -61.2207 65.4902 -62.79c28.4297 0.0595703 51.21 1.58008 33.9492 63.7295c-18.6494 66.9199 -31.54 144.45 -83.8701 144.45\n+c-16.46 0 -31.0898 0 -49.25 -19.71c-12.1377 1.23145 -31.8896 2.23047 -44.0898 2.23047c-12.1992 0 -31.9521 -0.999023 -44.0898 -2.23047c-18.1299 19.7803 -32.75 19.7803 -49.2197 19.7803zM256 177.21l-0.0595703 -0.00976562s44.3496 -40.7598 52.3496 -55.2402\n+l-29 1.16992v-25.2803c0 -1.15918 -11.6602 -0.699219 -23.3096 -0.15918c-1.99023 0 -23.3301 -1.39062 -23.3301 0.15918v25.3203l-29 -1.16992c7.96973 14.4404 52.3496 55.21 52.3496 55.21z\" \u002F>\n+    \u003Cglyph glyph-name=\"salesforce\" unicode=\"&#xf83b;\" horiz-adv-x=\"640\" \n+d=\"M248.89 202.36h-26.3496c0.69043 5.15918 3.32031 14.1201 13.6396 14.1201c6.75 0 11.9707 -3.82031 12.71 -14.1201zM385.55 216.24c0.450195 0 14.1104 1.75977 14.1104 -20c0 -6.45996 -1.11035 -20 -14.1104 -20c-0.479492 0 -14.1094 -1.77051 -14.1094 20\n+c0 21.7695 13.6396 20 14.1094 20zM142.33 192.48c4.2002 3.60938 15.6104 2.71973 20.9297 1.64941v-16.9395c-5.85938 -1.1709 -16.2295 -2.75 -20.9297 0.949219c-1.20996 1 -3.29004 2.27051 -3.29004 7.05078\n+c-0.0078125 0.137695 -0.0146484 0.361328 -0.0146484 0.499023c0 2.31738 1.48047 5.36035 3.30469 6.79102zM640 216c0 -87.5801 -80 -154.39 -165.36 -136.43c-18.3701 -33 -70.7295 -70.75 -132.199 -41.6299c-41.1602 -96.0508 -177.891 -92.1807 -213.811 5.16992\n+c-119.72 -23.8906 -178.82 138.37 -75.2695 199.279c-34.75 79.4307 22.6396 173.61 114.31 173.61c33.834 -0.0214844 77.9883 -21.8389 98.5605 -48.7002c20.6992 21.4004 49.3994 34.8105 81.1494 34.8105c42.3398 0 79 -23.5205 98.7998 -58.5703\n+c92.8203 40.6797 193.82 -28.2305 193.82 -127.54zM120.45 184.2c0 11.7598 -11.6904 15.1699 -17.8701 17.1699c-5.27051 2.11035 -13.4102 3.50977 -13.4102 8.93945c0 9.45996 17 6.66016 25.1699 2.12012c0 0 1.16992 -0.709961 1.64062 0.470703\n+c0.239258 0.699219 2.35938 6.58008 2.58984 7.29004c0.0292969 0.0927734 0.0537109 0.24707 0.0537109 0.34375c0 0.441406 -0.337891 0.918945 -0.753906 1.06543c-12.3301 7.63086 -40.7002 8.51074 -40.7002 -12.6992c0 -12.46 11.4902 -15.4404 17.8799 -17.1699\n+c4.71973 -1.58008 13.1699 -3 13.1699 -8.7002c0 -4 -3.5293 -7.06055 -9.16992 -7.06055c-5.82617 0.00976562 -14.3379 2.85449 -19 6.35059c-0.469727 0.229492 -1.41992 0.709961 -1.64941 -0.709961l-2.40039 -7.4707\n+c-0.469727 -0.939453 0.230469 -1.17969 0.230469 -1.40918c1.75 -1.40039 10.2998 -6.59082 22.8193 -6.59082c13.1699 0 21.4004 7.06055 21.4004 18.1104v-0.0498047zM152.45 226.78c-10.1299 0 -18.6602 -3.16992 -21.4004 -5.18066\n+c-0.237305 -0.164062 -0.430664 -0.532227 -0.430664 -0.822266c0 -0.178711 0.0859375 -0.442383 0.19043 -0.586914l2.59082 -7.06055c0.114258 -0.399414 0.544922 -0.723633 0.960938 -0.723633c0.0605469 0 0.15918 0.0107422 0.21875 0.0234375\n+c0.650391 0 6.7998 4 16.9297 4c4 0 7.06055 -0.709961 9.18066 -2.35938c3.59961 -2.80078 3.05957 -8.29004 3.05957 -10.5801c-4.79004 0.299805 -19.1104 3.43945 -29.4102 -3.75977c-4.05762 -2.7832 -7.34961 -9.03418 -7.34961 -13.9541\n+c0 -0.162109 0.00390625 -0.424805 0.00976562 -0.585938c0 -5.90039 1.50977 -10.4004 6.58984 -14.3506c12.2402 -8.16016 36.2803 -2 38.1006 -1.41016c1.5791 0.320312 3.5293 0.660156 3.5293 1.87988v33.8809c0.0400391 4.60938 0.320312 21.6396 -22.7793 21.6396z\n+M199 247.76c0.000976562 0.0205078 0.00195312 0.0527344 0.00195312 0.0722656c0 0.613281 -0.49707 1.11035 -1.10938 1.11035c-0.0205078 0 -0.0527344 -0.000976562 -0.0722656 -0.00195312h-9.82031\n+c-0.0175781 0.000976562 -0.0449219 0.000976562 -0.0625 0.000976562c-0.612305 0 -1.10938 -0.49707 -1.10938 -1.10938c0 -0.0205078 0.000976562 -0.0527344 0.00195312 -0.0722656v-79c-0.000976562 -0.0195312 -0.00195312 -0.0517578 -0.00195312 -0.0712891\n+c0 -0.613281 0.49707 -1.11035 1.10938 -1.11035c0.0175781 0 0.0449219 0.000976562 0.0625 0.00195312h9.87988c0.0205078 -0.000976562 0.0527344 -0.00195312 0.0722656 -0.00195312c0.613281 0 1.11035 0.49707 1.11035 1.10938\n+c0 0.0205078 -0.000976562 0.0527344 -0.00292969 0.0722656zM254.75 218.83c-2.09961 2.30957 -6.79004 7.53027 -17.6504 7.53027c-3.50977 0 -14.1592 -0.230469 -20.6992 -8.94043c-6.35059 -7.62988 -6.58008 -18.1104 -6.58008 -21.4102\n+c0 -3.12012 0.149414 -14.2598 7.05957 -21.1699c2.63965 -2.91016 9.06055 -8.22949 22.8105 -8.22949c10.8193 0 16.4697 2.34961 18.5791 3.75977c0.470703 0.240234 0.710938 0.709961 0.240234 1.87988l-2.34961 6.83008\n+c-0.1875 0.402344 -0.699219 0.728516 -1.14258 0.728516c-0.0751953 0 -0.194336 -0.0126953 -0.267578 -0.0283203c-2.58984 -0.94043 -6.34961 -2.82031 -15.29 -2.82031c-17.4199 0 -16.8496 14.7402 -16.9404 16.7002h37.1709\n+c0.522461 0.0107422 1.04688 0.431641 1.16992 0.939453c-0.290039 0 2.06934 14.7002 -6.09082 24.2305h-0.0195312zM291.44 166.14c13.1699 0 21.4092 7.06055 21.4092 18.1104c0 11.7598 -11.6992 15.1699 -17.8799 17.1699\n+c-4.13965 1.66016 -13.4102 3.37988 -13.4102 8.94043c0 3.75977 3.29004 6.34961 8.4707 6.34961c4.87988 -0.0976562 12.3613 -1.99316 16.7002 -4.22949c4.33789 -2.2373 1.17969 -0.710938 1.64941 0.469727c0.230469 0.700195 2.35059 6.58008 2.58008 7.29004\n+c0.0292969 0.0927734 0.0537109 0.24707 0.0537109 0.34375c0 0.441406 -0.337891 0.918945 -0.753906 1.06641c-7.91016 4.89941 -16.7402 4.93945 -20.2295 4.93945c-12 0 -20.46 -7.29004 -20.46 -17.6396c0 -12.46 11.4795 -15.4404 17.8701 -17.1699\n+c6.10938 -2 13.1699 -3.26074 13.1699 -8.7002c0 -4 -3.52051 -7.06055 -9.16992 -7.06055c-5.82617 0.0126953 -14.3379 2.85742 -19 6.35059c-0.155273 0.132812 -0.447266 0.241211 -0.651367 0.241211c-0.526367 0 -0.973633 -0.426758 -0.999023 -0.951172\n+l-2.34961 -7.52051c-0.470703 -0.939453 0.229492 -1.17969 0.229492 -1.40918c1.71973 -1.40039 10.3301 -6.59082 22.79 -6.59082h-0.0195312zM357.09 224c0 0.709961 -0.240234 1.17969 -1.17969 1.17969h-11.7598c0 0.140625 0.939453 8.94043 4.46973 12.4707\n+c4.16016 4.14941 11.7598 1.63965 12 1.63965c1.16992 -0.469727 1.41016 0 1.63965 0.469727l2.83008 7.77051c0.700195 0.939453 0 1.16992 -0.240234 1.41016c-5.08984 2 -17.3496 2.86914 -24.46 -4.24023c-5.47949 -5.48047 -7 -13.9199 -8 -19.5205h-8.46973\n+c-0.600586 -0.0498047 -1.125 -0.578125 -1.16992 -1.17969l-1.41992 -7.75977c0 -0.700195 0.240234 -1.16992 1.17969 -1.16992h8.23047c-8.50977 -47.9004 -8.75 -50.21 -10.3506 -55.5205c-1.08008 -3.62012 -3.29004 -6.89941 -5.87988 -7.75977\n+c-0.0898438 0 -3.87988 -1.67969 -9.63965 0.240234c0 0 -0.94043 0.469727 -1.41016 -0.709961c-0.240234 -0.709961 -2.58984 -6.82031 -2.83008 -7.53027s0 -1.41016 0.469727 -1.41016c5.11035 -2 13 -1.76953 17.8809 0\n+c6.2793 2.28027 9.71973 7.88965 11.5293 12.9404c2.75 7.70996 2.81055 9.79004 11.7598 59.7393h12.2305c0.601562 0.0498047 1.13086 0.578125 1.17969 1.18066zM410.48 208c-0.560547 1.67969 -5.10059 18.1104 -25.1709 18.1104c-15.25 0 -23 -10 -25.1592 -18.1104\n+c-1 -3 -3.18066 -14 0 -23.5195c0.0898438 -0.300781 4.40918 -18.1201 25.1592 -18.1201c14.9502 0 22.9004 9.60938 25.1709 18.1201c3.20996 9.60938 1.00977 20.5195 0 23.5195zM455.88 224.7c-5 1.64941 -16.6201 1.89941 -22.1104 -5.41016v4.46973\n+c0.000976562 0.0175781 0.00195312 0.0449219 0.00195312 0.0625c0 0.612305 -0.49707 1.11035 -1.10938 1.11035c-0.0205078 0 -0.0527344 -0.000976562 -0.0722656 -0.00292969h-9.39941c-0.0205078 0.00195312 -0.0527344 0.00292969 -0.0722656 0.00292969\n+c-0.612305 0 -1.11035 -0.498047 -1.11035 -1.11035c0 -0.0175781 0.000976562 -0.0449219 0.00195312 -0.0625v-55.2793c-0.000976562 -0.0175781 -0.00195312 -0.0449219 -0.00195312 -0.0625c0 -0.618164 0.501953 -1.12012 1.12012 -1.12012\n+c0.0175781 0 0.0449219 0.000976562 0.0625 0.00195312h9.63965c0.0166016 -0.000976562 0.0449219 -0.00195312 0.0615234 -0.00195312c0.618164 0 1.12012 0.501953 1.12012 1.12012c0 0.0175781 -0.000976562 0.0449219 -0.00195312 0.0625v27.7695\n+c0 2.91016 0.0498047 11.3701 4.45996 15.0498c4.90039 4.90039 12 3.36035 13.4102 3.06055c0.555664 0.00976562 1.1875 0.430664 1.41016 0.939453c0.972656 2.15918 2.34375 5.74316 3.05957 8c0.0449219 0.113281 0.0800781 0.302734 0.0800781 0.423828\n+c0 0.356445 -0.246094 0.798828 -0.549805 0.986328v-0.00976562zM502.69 170.6l-2.12012 7.29004c-0.470703 1.18066 -1.41016 0.709961 -1.41016 0.709961c-4.23047 -1.81934 -10.1504 -1.88965 -11.29 -1.88965c-4.63965 0 -17.1699 1.12988 -17.1699 19.7598\n+c0 6.23047 1.84961 19.7607 16.4697 19.7607c0.245117 0.00585938 0.643555 0.0107422 0.888672 0.0107422c3.00586 0 7.76855 -0.744141 10.6318 -1.66113c2.8623 -0.916992 0.939453 -0.469727 1.17969 0.709961c0.939453 2.58984 1.63965 4.46973 2.58984 7.53027\n+c0.230469 0.939453 -0.469727 1.16992 -0.709961 1.16992c-11.5898 3.87012 -22.3398 2.5293 -27.7598 0c-1.58984 -0.740234 -16.2305 -6.49023 -16.2305 -27.5205c0 -2.89941 -0.580078 -30.1094 28.9404 -30.1094c4.42383 0.00878906 11.377 1.27637 15.5195 2.83008\n+c0.290039 0.214844 0.525391 0.682617 0.525391 1.04395c0 0.105469 -0.0244141 0.274414 -0.0546875 0.375977v-0.0107422zM556.56 210.12c-0.799805 3 -5.36914 16.2295 -22.3496 16.2295c-16 0 -23.5195 -10.1094 -25.6396 -18.5898\n+c-0.913086 -3.0166 -1.6543 -8.02441 -1.6543 -11.1768c0 -0.161133 0.00195312 -0.421875 0.00390625 -0.583008c0 -25.8701 18.8398 -29.4004 29.8799 -29.4004c10.8203 0 16.46 2.35059 18.5801 3.76074c0.469727 0.239258 0.709961 0.709961 0.240234 1.87988\n+l-2.36035 6.83008c-0.186523 0.402344 -0.698242 0.728516 -1.14258 0.728516c-0.0742188 0 -0.194336 -0.0126953 -0.267578 -0.0292969c-2.58984 -0.939453 -6.34961 -2.81934 -15.29 -2.81934c-17.4199 0 -16.8496 14.7402 -16.9297 16.7002h37.1602\n+c0.522461 0.0126953 1.05078 0.433594 1.17969 0.939453c-0.239258 0.00976562 0.94043 7.07031 -1.41016 15.54v-0.00976562zM533.27 216.47c5.11035 0 11.8506 -2.2002 12.7305 -14.1201h-26.3701c0.639648 5.12012 3.31055 14.1201 13.6396 14.1201z\" \u002F>\n+    \u003Cglyph glyph-name=\"speaker-deck\" unicode=\"&#xf83c;\" horiz-adv-x=\"512\" \n+d=\"M213.86 152h-113.86c-55.2002 0 -100 44.7998 -100 100s44.7998 100 100 100h132.84c22.0801 0 40 -17.9199 40 -40s-17.9199 -40 -40 -40h-134.84c-26.4697 0 -26.4502 -40 0 -40h113.82c55.1992 0 100 -44.7998 100 -100s-44.8008 -100 -100 -100h-171.82\n+c-22.0801 0 -40 17.9199 -40 40s17.9199 40 40 40h173.86c26.4795 0 26.46 40 0 40zM298 32c23.5957 16.0176 46.4932 51.8574 51.1104 80h64.5498c10.8525 0.0927734 19.6602 8.97656 19.6602 19.8291v0.170898v120v0.170898c0 10.8525 -8.80762 19.7363 -19.6602 19.8291\n+h-117.24c8.29199 9.4834 15.0205 27.4033 15.0205 40s-6.72852 30.5166 -15.0205 40h136.93c43.4404 0 78.6504 -35.8203 78.6504 -80v-160c0 -44.1797 -35.21 -80 -78.6504 -80h-135.35z\" \u002F>\n+    \u003Cglyph glyph-name=\"symfony\" unicode=\"&#xf83d;\" horiz-adv-x=\"512\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.74 296.46c15.3496 0.540039 19.7695 15.4404 19.5195 23.1299c-0.639648 18.0605 -19.6699 29.46 -44.8301 28.6504\n+c-1.89941 -0.0703125 -65.2598 3.46973 -102.43 -105.53c-10.0596 8.29004 -57.7695 65.1602 -110.58 25.8096c-18.9502 -14.1797 -31.4199 -47.9199 -2.9502 -79.6699c16.9502 -18.1396 26.7207 -25.3301 22.25 -39.8496c-9.14941 -29.79 -55.5596 -16.1602 -51 -1.38965\n+c1.36035 4.38965 3.49023 4.46973 6.28027 13.0693c7.74023 25.3203 -27.1104 37.75 -34.6201 13.6006c-4.32031 -14.0605 2.37988 -39.5107 38.3799 -50.6201c42.1602 -12.96 77.8203 10.0098 82.8799 39.9395c3.2002 18.75 -5.29004 32.6904 -20.7998 50.6201l-12.6299 14\n+c-7.66016 7.7002 -10.29 20.7002 -2.37012 30.7002c6.69043 8.45996 16.2002 12.0605 31.8105 7.83008c22.7695 -6.16992 32.9199 -21.9697 49.8496 -34.7197c-1.23047 -4 -10.04 -32.3398 -18.2305 -82c-12.1094 -63.4902 -21.3496 -98.3506 -45.3496 -118.351\n+c-4.83984 -3.48926 -11.7598 -8.63965 -22.1797 -9c-1.94043 -0.0595703 -14.1406 2.83984 -2.0498 12.5508c15.2393 8.3291 7.00977 34.75 -14.8809 34c-9.85938 -0.330078 -24.8691 -9.59082 -24.3096 -26.5908c0.580078 -17.5293 16.9297 -30.6895 41.5801 -29.8398\n+c13.1797 0.44043 42.5801 5.7998 71.5801 40.2598c39.8496 46.7207 47.4395 102.2 58.2002 161.721c51.6797 -6.11035 77.2393 17.8398 77.5996 35.7002c0.549805 24.2998 -28 23.46 -32 5.2998c-1.91992 -8.83984 13.4199 -16.8105 1.41992 -24.5605\n+c-8.49023 -5.5 -23.71 -9.37012 -45.1396 -6.21973c10.2998 56.8496 19.1094 112.56 58.8896 113.85c2.70996 0.150391 12.6396 -0.119141 12.8701 -6.66992c0.150391 -5.41016 -6.7998 -9.66992 -6.53027 -18.8496c0.370117 -10.4199 8.2998 -17.2803 19.7705 -16.8701z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"waze\" unicode=\"&#xf83f;\" horiz-adv-x=\"512\" \n+d=\"M502.17 246.33c14.5205 -85.8604 -30.9395 -167.92 -113.17 -208.13c13 -34.1006 -12.4004 -70.2002 -48.3203 -70.2002c-27.0625 0.0214844 -50.166 21.9736 -51.5693 49c-6.44043 -0.19043 -64.2002 0 -76.3301 0.639648\n+c-1.10645 -27.3809 -24.2441 -49.6035 -51.6484 -49.6035c-0.588867 0 -1.54395 0.0195312 -2.13184 0.0439453c-33.8604 1.36035 -57.9502 34.8398 -47 67.9199c-37.21 13.1104 -72.54 34.8701 -99.6201 70.7998c-13 17.2803 -0.479492 41.7998 20.8398 41.7998\n+c46.3105 0 32.2207 54.1699 43.1504 110.261c18.4297 93.9395 116.75 157.14 211.72 157.14c102.48 0 197.15 -70.6699 214.08 -169.67zM373.51 59.7197c42 19.1807 81.3301 56.71 96.29 102.141c40.4805 123.09 -64.1494 228 -181.71 228\n+c-83.4502 0 -170.32 -55.4199 -186.07 -136c-9.5293 -48.9102 5 -131.351 -68.75 -131.351c24.9404 -33.1094 58.3301 -52.6201 93.7305 -64.0498c24.6602 21.7998 63.8701 15.4697 79.8301 -14.3398c14.2197 -1 79.1895 -1.17969 87.9004 -0.820312\n+c7.9502 15.5303 28.5635 28.1348 46.0107 28.1348c10.2002 0 24.8799 -5.24805 32.7686 -11.7148zM205.12 260.87c0 34.7402 50.8398 34.75 50.8398 0s-50.8398 -34.7402 -50.8398 0zM321.69 260.87c0 34.7402 50.8594 34.75 50.8594 0s-50.8594 -34.75 -50.8594 0z\n+M199.08 190.18c-3.44043 16.9404 22.1797 22.1807 25.6201 5.20996l0.0595703 -0.279297c4.14062 -21.4199 29.8506 -44 64.1201 -43.0703c35.6797 0.94043 59.25 22.21 64.1104 42.7695c4.45996 16.0508 28.5996 10.3604 25.4697 -6\n+c-5.22949 -22.1797 -31.21 -62 -91.46 -62.8994c-42.5498 0 -80.8799 27.8398 -87.9004 64.25z\" \u002F>\n+    \u003Cglyph glyph-name=\"yammer\" unicode=\"&#xf840;\" horiz-adv-x=\"512\" \n+d=\"M421.78 295.83c-48.1602 -26.3896 -118.561 -58.1504 -130.2 -50s91.4395 80.3701 106.689 88.7695c0.920898 0.5 1.80078 0.970703 2.63086 1.40039c1.76562 0.521484 4.69336 0.945312 6.53516 0.945312c12.7295 0 23.0605 -10.3311 23.0605 -23.0596\n+c0 -6.14453 -3.90527 -14.2334 -8.71582 -18.0557zM421.78 78.6602c4.76855 -3.82324 8.63965 -11.8877 8.63965 -18c0 -12.7344 -10.335 -23.0703 -23.0703 -23.0703c-1.81641 0 -4.70605 0.412109 -6.44922 0.919922\n+c-0.830078 0.410156 -1.70996 0.900391 -2.63086 1.41016c-15.2695 8.38965 -118.25 80.6396 -106.689 88.7402c11.5596 8.09961 82.04 -23.6201 130.2 -50zM464.21 211c10.0947 -2.11328 18.2559 -12.1992 18.2559 -22.5117\n+c0 -10.7881 -8.63965 -20.9561 -19.2861 -22.6982c-54.9102 0.0195312 -131.93 6.00977 -138.21 18.7598c-6.2793 12.75 118.84 26.5098 136.24 26.5098c1.0498 0 2.0498 -0.0595703 3 -0.0595703zM31 351.35c-0.699219 2.10742 -1.2666 5.61914 -1.2666 7.83887\n+c0 13.7334 11.1455 24.8799 24.8799 24.8799c8.72949 0 18.8213 -6.41504 22.5264 -14.3184l81 -205.06h1.20996l77 203.529c3.22559 8.26074 13.041 14.9648 21.9092 14.9648c12.9834 0 23.5205 -10.5371 23.5205 -23.5195\n+c0 -1.89258 -0.438477 -4.90137 -0.979492 -6.71484l-109.6 -273.391c-18.5498 -47.2197 -37.1201 -79.5596 -93.29 -79.5596c-0.151367 -0.000976562 -0.395508 -0.000976562 -0.545898 -0.000976562c-6.4668 0 -16.8887 0.874023 -23.2646 1.95117\n+c-8.52051 2.44238 -15.4365 11.6201 -15.4365 20.4844c0 11.7637 9.54688 21.3105 21.3096 21.3105c0.28418 0 0.744141 -0.0117188 1.02734 -0.0253906c0.660156 -0.0595703 10.9102 -0.660156 13.8604 -0.660156c30.4697 0 43.7393 18.9404 58.0693 59.4102z\" \u002F>\n+    \u003Cglyph glyph-name=\"git-alt\" unicode=\"&#xf841;\" \n+d=\"M439.55 211.95c4.66504 -4.66602 8.45117 -13.8076 8.45117 -20.4053s-3.78613 -15.7393 -8.45117 -20.4053l-194.689 -194.689c-4.66602 -4.66211 -13.8047 -8.44629 -20.4004 -8.44629s-15.7344 3.78418 -20.4004 8.44629l-195.609 195.6\n+c-4.66504 4.66602 -8.45117 13.8076 -8.45117 20.4053s3.78613 15.7393 8.45117 20.4053l134.12 134.14l50.79 -50.8496c-5.95996 -14.2607 -2.16016 -36.4902 18.6396 -45v-123c-22.3203 -9.09082 -28.8203 -38.4004 -11.25 -56\n+c5.55176 -5.54883 16.4268 -10.0518 24.2754 -10.0518c7.84766 0 18.7236 4.50293 24.2744 10.0518c13.1807 13.1494 16.2197 42.46 -9.08008 55v121.85l46.3506 -46.29c-14.21 -34.4697 29.5098 -63.8301 56 -37.3398c25.71 25.6895 -1.24023 68.4902 -35.4707 56.6895\n+l-49.6592 49.6602c9.29004 26.9102 -16.3301 52.8203 -43.3906 43.6807l-51.5195 51.5195l40.6602 40.6299c4.66602 4.66309 13.8076 8.44727 20.4043 8.44727s15.7383 -3.78418 20.4053 -8.44727z\" \u002F>\n+    \u003Cglyph glyph-name=\"stackpath\" unicode=\"&#xf842;\" \n+d=\"M244.6 215.6c0 -8.5 -4.25977 -20.4893 -21.3398 -20.4893h-19.6094v41.4697h19.6094c17.1299 0 21.3398 -12.3604 21.3398 -20.9805zM448 416v-448h-448v448h448zM151.3 160.16c0 21.2402 -12.1201 34.54 -46.7197 44.8496c-20.5703 7.41016 -26 10.9102 -26 18.6299\n+c0 7.7207 7 14.6104 20.4102 14.6104c14.0898 0 20.79 -8.4502 20.79 -18.3496h30.7002l0.189453 0.569336c0.5 19.5703 -15.0596 41.6504 -51.1201 41.6504c-23.3701 0 -52.5498 -10.75 -52.5498 -38.29c0 -19.4004 9.25 -31.29 50.7402 -44.3701\n+c17.2598 -6.15039 21.9102 -10.4004 21.9102 -19.4795c0 -15.2002 -19.1309 -14.2305 -19.4707 -14.2305c-20.3994 0 -25.6494 9.09961 -25.6494 21.9004h-30.7998l-0.180664 -0.560547c-0.679688 -31.3203 28.3799 -45.2197 56.6299 -45.2197\n+c29.9805 0 51.1201 13.5498 51.1201 38.29zM276.68 215.79c0 25.2998 -18.4297 45.46 -53.4199 45.46h-51.7793v-138.18h32.1699v47.3594h19.6094c30.25 0 53.4199 15.9502 53.4199 45.3604zM297.94 123l49.0596 138.22h-31.0898l-47.9102 -138.22h29.9404zM404.46 261.22\n+h-31.0898l-47.9102 -138.22h29.9404z\" \u002F>\n+    \u003Cglyph glyph-name=\"cotton-bureau\" unicode=\"&#xf89e;\" horiz-adv-x=\"512\" \n+d=\"M474.31 117.59h25.1807c-25.7998 -109.78 -111.4 -173.59 -239.67 -173.59c-154.63 -0.339844 -247.82 92.8604 -247.82 248.18c0 154.63 93 247.82 247.82 247.82c128.399 0 214.06 -63.5098 240.18 -173.61h-25.2598\n+c-24.8506 95.6104 -99.9199 148.811 -214.69 148.811c-141.85 0 -223.2 -81.3799 -223.2 -223.2c0 -137.93 76.6699 -218 211.101 -223v49.2002c0 48.1602 -26.5498 74.3896 -74.5498 74.3896c-62.1309 0 -99.4004 37.2803 -99.4004 99.4102\n+c0 61.3701 36.5195 98.2803 97.3799 99.0596c30.7402 64.6504 144.24 69.3203 177.24 0c60.8496 -0.779297 97.3799 -37.6895 97.3799 -99.0596c0 -62.0098 -37.2002 -99.21 -99.2002 -99.21c-47.9795 0 -74.3896 -26.3896 -74.3896 -74.3896v-49.1602\n+c107.67 3.75977 178.24 56.5 201.899 148.35zM357 265.67c3.7998 -21.0801 11.2695 -104.2 -71.79 -120.75c12.2598 -17.7402 32.9805 -27.3301 61.5898 -27.3301c47.9697 0 74.4004 26.4102 74.4004 74.4102c0 44.6699 -22.8301 70.2197 -64.2002 73.6699zM275.32 168.31\n+c72.7803 9.89062 58.5 86.9102 56.2295 97c-72.5596 -10 -58.6895 -86.6592 -56.2295 -97zM260 316l-0.179688 -0.259766c-28.3008 0 -49.1602 -9.66016 -61.5703 -27.3506c28.3701 -5.44922 49.3701 -20.5898 61.5996 -43.4492\n+c12.2305 22.8594 33.2305 37.9697 61.5908 43.4492c-12.4404 17.9404 -32.8301 27.6104 -61.4404 27.6104zM188.48 265.28h0.239258c-2.75 -10.0498 -16.1602 -87.1602 56.25 -97c2.41992 10.1895 16.6807 86.4297 -56.4893 97zM173.2 117.59l0.330078 0.0302734\n+c28.2998 0 49 9.66992 61.1396 27.2998c-73.0303 14.2197 -78.4004 83.5498 -71.6504 120.75c-41.3594 -3.66992 -64.2197 -29.3096 -64.2197 -73.6699c0 -48.0098 26.4004 -74.4102 74.4004 -74.4102zM226.41 105.2h0.269531\n+c14.4902 -7.60059 25.5605 -19.3301 33.5605 -33.8301c6.36523 12.2188 21.4092 27.374 33.5801 33.8301c-14.4902 8.00977 -26.0508 19.0596 -33.8203 33.5498c-6.4248 -12.1094 -21.4736 -27.1396 -33.5898 -33.5498z\" \u002F>\n+    \u003Cglyph glyph-name=\"buy-n-large\" unicode=\"&#xf8a6;\" horiz-adv-x=\"576\" \n+d=\"M288 416c154.73 0 280.21 -100.32 280.21 -224s-125.479 -224 -280.21 -224s-280.21 100.32 -280.21 224s125.479 224 280.21 224zM202.61 58.8096c61.5498 0.600586 99.4697 24.3604 117.71 61.5205c-35.79 6.4502 -62.9307 37.3096 -62.9307 74.4502\n+c0 41.7695 34.3408 75.6494 76.6904 75.6494h0.0341797c4.80078 0 12.4951 -0.864258 17.1758 -1.92969c0.524414 1.86621 1.19629 4.93555 1.5 6.84961c6.92969 44.1904 -14.8496 72.8408 -78 72.8408h-133.44l-77.25 -290.74zM358 240.89l-9.4502 -36.75l-15 36.75\n+h-31.3398l-26.6299 -90.3096h37.8301l7.83008 35.6299l11.1895 -35.6299h35.4102l22.1602 90.3096h-32zM503.86 58.8096l21.1992 84.0605h-103.869l53.0498 205.36h-92.5l-21.3301 -82.3506c29.3799 -10.5996 50.3799 -38.4102 50.3799 -71.0596\n+c0 -41.7803 -34.3496 -75.6504 -76.6904 -75.6504h-0.0625c-3.16504 0 -8.27539 0.37207 -11.4072 0.830078l-15.8398 -61.1904h197.07zM211.7 178.61c16.1494 0 29.7002 -7.51074 24.1396 -29.8203c-5.83008 -23.4697 -21.7998 -26.6504 -37.9395 -26.6504h-24.7002\n+l13.7998 56.4707h24.7002zM233 278c18.0703 0 32.2305 1.29004 27.5801 -17.5703c-3.83008 -15.5 -21.21 -30.1396 -39.21 -30.1396h-21.3701l11.6602 47.71h21.3398z\" \u002F>\n+    \u003Cglyph glyph-name=\"mdb\" unicode=\"&#xf8ca;\" horiz-adv-x=\"576\" \n+d=\"M17.3701 287.59h46.2998l42.3301 -117.33l40.7002 117.33h45.5098l12.79 -191.59h-45.5303l-4.79004 77.4297l-25.54 -77.4297h-44.71l-27.9297 79.8301l-5.58984 -79.8301h-43.9102zM298.37 287.59c0 0 93.4199 -1.58984 94.2002 -95.7998\n+c0.799805 -96.5898 -94.2002 -95.79 -94.2002 -95.79h-47.9004v191.59h47.9004zM297.17 141.13c0 0 47.5996 5.21973 46.7998 51.5205c-0.799805 46.2998 -46.7998 50.5693 -46.7998 50.5693v-102.09zM535.46 215.37c0 0 33.54 -11.96 33.54 -55.1006\n+c0 -68.6396 -87 -63.8496 -87 -63.8496h-45.5195v191.58h51.8994s49.7402 1.44043 55.0801 -34.3203c0.348633 -2.30371 0.630859 -6.06445 0.630859 -8.39453c0 -8.94336 -3.86621 -22.3457 -8.63086 -29.915zM483.56 247.31v-21.5898h12s5.43066 5.33984 4 12\n+c-2.42969 11.1807 -16 9.58984 -16 9.58984zM483.46 137.85c0 0 41.04 -4.92969 41.3701 20.7207c0.389648 27.1602 -41.1904 22.4297 -41.1904 22.4297h-0.0800781v-18.2305z\" \u002F>\n+    \u003Cglyph glyph-name=\"orcid\" unicode=\"&#xf8d2;\" horiz-adv-x=\"512\" \n+d=\"M294.75 259.81c58.1299 0 84.6699 -35.2598 84.6699 -76.8994c0 -25.5703 -15.5 -76.9102 -83.1201 -76.9102h-47.4697v153.81h45.9199zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM175.21 79.2402v207.5h-29.8398v-207.5\n+h29.8398zM160.29 310.38c10.7646 0.0380859 19.5312 8.80566 19.5703 19.5703c0 10.8027 -8.76758 19.5693 -19.5703 19.5693s-19.5703 -8.7666 -19.5703 -19.5693s8.76758 -19.5703 19.5703 -19.5703v0zM300 79c68.3799 0 110 50.6104 110.04 103.89\n+c0 49.0205 -33.71 103.851 -110.44 103.851h-80.5996v-207.74h81z\" \u002F>\n+    \u003Cglyph glyph-name=\"swift\" unicode=\"&#xf8e1;\" \n+d=\"M448 291.91c0 -5.35059 -0.000976562 -10.7002 0.00878906 -16.0498v-183.771c-0.0292969 -4.50977 -0.0800781 -9.00977 -0.200195 -13.5098c-0.0966797 -8.1748 -1.25781 -21.3545 -2.58984 -29.4199c-1.38477 -8.11035 -5.51465 -20.6543 -9.21973 -28\n+c-7.66406 -15.0459 -26.0898 -33.4854 -41.1299 -41.1602c-7.34766 -3.69824 -19.8916 -7.82422 -28 -9.20996c-8.07129 -1.32715 -21.2607 -2.4873 -29.4404 -2.58984c-4.51953 -0.120117 -9.00977 -0.200195 -13.5195 -0.200195h-199.79\n+c-4.52051 0.0302734 -9.02051 0.0800781 -13.5205 0.200195c-8.17676 0.0976562 -21.3613 1.25781 -29.4297 2.58984c-8.1084 1.38379 -20.6523 5.50977 -28 9.20996c-15.0342 7.67676 -33.4609 26.1113 -41.1299 41.1504c-3.70508 7.3457 -7.83496 19.8896 -9.21973 28\n+c-1.3252 8.06543 -2.48145 21.2461 -2.58008 29.4199c-0.129883 4.50977 -0.209961 9 -0.209961 13.5098v199.83c0.0292969 4.51953 0.0800781 9.00977 0.209961 13.5195c0.0888672 8.16797 1.22754 21.3389 2.54004 29.4004c1.38672 8.10938 5.5166 20.6533 9.21973 28\n+c3.74121 7.34473 11.5146 18.0293 17.3496 23.8496c1.74023 1.7207 3.55078 3.39062 5.43066 5c4.6748 3.99805 12.9141 9.51758 18.3896 12.3203c2.2334 1.11328 4.50391 2.15332 6.81152 3.12012c5.67188 2.31348 15.1738 5.04688 21.21 6.09961\n+c6.04688 1.03516 15.9297 2.07422 22.0596 2.32031c2.45996 0.120117 4.91992 0.200195 7.37012 0.269531c4.51953 0.120117 9.00977 0.200195 13.5195 0.200195h199.75c4.52051 -0.0292969 9.01074 -0.0800781 13.5205 -0.200195\n+c8.17676 -0.0976562 21.3613 -1.25781 29.4297 -2.58984c8.11035 -1.38281 20.6543 -5.51367 28 -9.21973c15.0547 -7.66211 33.4941 -26.0977 41.1602 -41.1504c3.70117 -7.34668 7.83105 -19.8906 9.21973 -28c1.3252 -8.06543 2.48047 -21.2461 2.58008 -29.4199\n+c0.120117 -4.51953 0.200195 -9.00977 0.200195 -13.5195zM378.119 50.9102c4.91016 -9.58008 15.3604 41.1797 -23.1602 88.5801c0.490234 1.68945 1 3.35938 1.44043 5.08984c18.5996 74.0801 -26.79 161.67 -103.58 207.75\n+c33.6494 -45.6201 48.5293 -100.87 35.3096 -149.2c-0.970703 -3.50098 -2.83398 -9.08789 -4.16016 -12.4697c-1.72949 1.14941 -3.84961 2.41992 -6.72949 4c0 0 -76.3906 47.1699 -159.181 130.59c-2.16992 2.2002 44.1504 -66.25 96.7207 -121.74\n+c-24.7803 13.9004 -93.7803 64.1201 -137.48 104.12c4.60156 -7.57031 13.0146 -19.1738 18.7803 -25.8994c36.4902 -46.2207 84.0898 -103.37 141.09 -147.221c-40 -24.4902 -96.6396 -26.3994 -153 0c-11.4521 5.37598 -29 15.8457 -39.1699 23.3701\n+c21.3398 -33.9365 68.5098 -74.4219 105.29 -90.3701c53.3203 -22.9199 106.35 -21.3799 145.85 -0.379883l0.419922 0.25c1.77051 1 3.53027 2 5.25 3c19.0801 9.7998 56.3105 19.46 76.3105 -19.4697z\" \u002F>\n+    \u003Cglyph glyph-name=\"umbraco\" unicode=\"&#xf8e8;\" horiz-adv-x=\"510\" \n+d=\"M255.35 440c136.99 -0.169922 247.83 -111.31 247.65 -248.28c-0.179688 -136.97 -111.15 -247.67 -248 -247.67c-137 0.0703125 -248.07 111.271 -248 248.271c0.139648 136.96 111.36 247.85 248.35 247.68zM400.35 174\n+c0.296875 4.31738 0.518555 11.3311 0.518555 15.6582c0 4.16406 -0.222656 10.9141 -0.498047 15.0693c-0.354492 12.1631 -1.97168 31.8213 -3.61035 43.8799c-1.87012 13.2197 -3.56934 22.3799 -5.38965 32c-1.02051 4.87988 -1.28027 6.39941 -1.83008 8.44922\n+c-0.489258 2.14746 -2.67285 3.89062 -4.875 3.89062h-0.0253906h-0.819336l-32 -5c-2.31934 -0.375977 -4.20117 -2.58691 -4.20117 -4.93555c0 -0.0175781 0.000976562 -0.046875 0.000976562 -0.0644531c-0.00878906 -0.106445 -0.0146484 -0.27832 -0.0146484 -0.384766\n+s0.00585938 -0.279297 0.0146484 -0.385742l1.68945 -8.7793c1.60645 -8.86719 3.23633 -20.0938 4.88965 -33.6807c1.35156 -11.5938 2.5166 -30.4775 2.59961 -42.1494c0.266602 -26.9072 -2.44336 -46.834 -8.12988 -59.7803\n+c-5.01953 -11.3809 -18.9746 -22.6836 -31.1504 -25.2305c-13.7178 -2.9043 -36.2324 -5.26074 -50.2549 -5.26074c-1.93652 0 -5.0791 0.0449219 -7.01465 0.101562h-10.25c-1.9668 -0.0576172 -5.15918 -0.104492 -7.12695 -0.104492\n+c-14.0098 0 -36.5059 2.34863 -50.2129 5.24414c-12.2217 2.49805 -26.248 13.7793 -31.3105 25.1797c-5.60645 12.9336 -8.31641 32.877 -8.12988 59.8301c0.0820312 11.6738 1.26562 30.5576 2.64062 42.1504c1.62012 13.6201 3.2334 24.8467 4.83984 33.6797\n+l1.7002 8.78027c0.0078125 0.105469 0.0146484 0.27832 0.0146484 0.384766s-0.00683594 0.279297 -0.0146484 0.384766v0.0126953c0 2.33398 -1.86426 4.56836 -4.16016 4.9873l-32 5h-0.69043c-2.18848 -0.0195312 -4.38379 -1.7627 -4.89941 -3.88965\n+c-0.540039 -2.03027 -0.820312 -3.57031 -1.82031 -8.4502c-1.83008 -9.41992 -3.52051 -18.6094 -5.40039 -32c-1.63184 -12.0586 -3.24414 -31.7168 -3.59961 -43.8799c-0.290039 -4.2334 -0.525391 -11.1123 -0.525391 -15.3545\n+c0 -4.24316 0.235352 -11.1221 0.525391 -15.3555c0.766602 -27.0928 5.43359 -48.7598 14 -65c8.57324 -16.2061 23.0801 -27.873 43.5195 -35c20.4404 -7.12695 48.9209 -10.6172 85.4414 -10.4697h4.59961c36.5605 -0.15332 65.0439 3.33691 85.4502 10.4707\n+c20.4336 7.12012 34.9365 18.7871 43.5098 35.001s13.2402 37.8809 14 65.001z\" \u002F>\n+  \u003C\u002Ffont>\n+\u003C\u002Fdefs>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-regular-400.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,803 +1,803 @@\n-\u003C?xml version=\"1.0\" standalone=\"no\"?>\r\n-\u003C!--\r\n-Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\r\n-License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\r\n--->\r\n-\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\r\n-\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\r\n-\u003Cmetadata>\r\n-Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019\r\n- By Robert Madole\r\n-Copyright (c) Font Awesome\r\n-\u003C\u002Fmetadata>\r\n-\u003Cdefs>\r\n-\u003Cfont id=\"FontAwesome5Free-Regular\" horiz-adv-x=\"512\" >\r\n-  \u003Cfont-face \r\n-    font-family=\"Font Awesome 5 Free Regular\"\r\n-    font-weight=\"400\"\r\n-    font-stretch=\"normal\"\r\n-    units-per-em=\"512\"\r\n-    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\r\n-    ascent=\"448\"\r\n-    descent=\"-64\"\r\n-    bbox=\"-0.0663408 -64.0662 640.01 448.1\"\r\n-    underline-thickness=\"25\"\r\n-    underline-position=\"-50\"\r\n-    unicode-range=\"U+0020-F5C8\"\r\n-  \u002F>\r\n-    \u003Cmissing-glyph \u002F>\r\n-    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" \r\n-d=\"M458.4 383.7c75.2998 -63.4004 64.0996 -166.601 10.5996 -221.3l-175.4 -178.7c-10 -10.2002 -23.2998 -15.7998 -37.5996 -15.7998c-14.2002 0 -27.5996 5.69922 -37.5996 15.8994l-175.4 178.7c-53.5996 54.7002 -64.5996 157.9 10.5996 221.2\r\n-c57.8008 48.7002 147.101 41.2998 202.4 -15c55.2998 56.2998 144.6 63.5996 202.4 15zM434.8 196.2c36.2002 36.8994 43.7998 107.7 -7.2998 150.8c-38.7002 32.5996 -98.7002 27.9004 -136.5 -10.5996l-35 -35.7002l-35 35.7002\r\n-c-37.5996 38.2998 -97.5996 43.1992 -136.5 10.5c-51.2002 -43.1006 -43.7998 -113.5 -7.2998 -150.7l175.399 -178.7c2.40039 -2.40039 4.40039 -2.40039 6.80078 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"576\" \r\n-d=\"M528.1 276.5c26.2002 -3.7998 36.7002 -36.0996 17.7002 -54.5996l-105.7 -103l25 -145.5c4.5 -26.3008 -23.1992 -45.9004 -46.3994 -33.7002l-130.7 68.7002l-130.7 -68.7002c-23.2002 -12.2998 -50.8994 7.39941 -46.3994 33.7002l25 145.5l-105.7 103\r\n-c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2998l65.2998 132.4c11.7998 23.8994 45.7002 23.5996 57.4004 0l65.2998 -132.4zM388.6 135.7l100.601 98l-139 20.2002l-62.2002 126l-62.2002 -126l-139 -20.2002l100.601 -98l-23.7002 -138.4l124.3 65.2998\r\n-l124.3 -65.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"448\" \r\n-d=\"M313.6 144c74.2002 0 134.4 -60.2002 134.4 -134.4v-25.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v25.5996c0 74.2002 60.2002 134.4 134.4 134.4c28.7998 0 42.5 -16 89.5996 -16s60.9004 16 89.5996 16zM400 -16v25.5996\r\n-c0 47.6006 -38.7998 86.4004 -86.4004 86.4004c-14.6992 0 -37.8994 -16 -89.5996 -16c-51.2998 0 -75 16 -89.5996 16c-47.6006 0 -86.4004 -38.7998 -86.4004 -86.4004v-25.5996h352zM224 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144s144 -64.5 144 -144\r\n-s-64.5 -144 -144 -144zM224 400c-52.9004 0 -96 -43.0996 -96 -96s43.0996 -96 96 -96s96 43.0996 96 96s-43.0996 96 -96 96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clock\" unicode=\"&#xf017;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM317.8 96.4004l-84.8994 61.6992\r\n-c-3.10059 2.30078 -4.90039 5.90039 -4.90039 9.7002v164.2c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12v-141.7l66.7998 -48.5996c5.40039 -3.90039 6.5 -11.4004 2.60059 -16.7998l-18.8008 -25.9004c-3.89941 -5.2998 -11.3994 -6.5 -16.7998 -2.59961z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list-alt\" unicode=\"&#xf022;\" \r\n-d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM458 16c3.31152 0 6 2.68848 6 6v340c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-340\r\n-c0 -3.31152 2.68848 -6 6 -6h404zM416 108v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 204v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12\r\n-v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 300v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM164 288c0 -19.8818 -16.1182 -36 -36 -36\r\n-s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 192c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 96c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" \r\n-d=\"M336.174 368c35.4668 0 73.0195 12.6914 108.922 28.1797c31.6406 13.6514 66.9043 -9.65723 66.9043 -44.1162v-239.919c0 -16.1953 -8.1543 -31.3057 -21.7129 -40.1631c-26.5762 -17.3643 -70.0693 -39.9814 -128.548 -39.9814c-68.6084 0 -112.781 32 -161.913 32\r\n-c-56.5674 0 -89.957 -11.2803 -127.826 -28.5566v-83.4434c0 -8.83691 -7.16309 -16 -16 -16h-16c-8.83691 0 -16 7.16309 -16 16v406.438c-14.3428 8.2998 -24 23.7979 -24 41.5615c0 27.5693 23.2422 49.71 51.2012 47.8965\r\n-c22.9658 -1.49023 41.8662 -19.4717 44.4805 -42.3379c0.177734 -1.52441 0.321289 -4.00781 0.321289 -5.54199c0 -4.30176 -1.10352 -11.1035 -2.46289 -15.1846c22.418 8.68555 49.4199 15.168 80.7207 15.168c68.6084 0 112.781 -32 161.913 -32zM464 112v240\r\n-c-31.5059 -14.6338 -84.5547 -32 -127.826 -32c-59.9111 0 -101.968 32 -161.913 32c-41.4365 0 -80.4766 -16.5879 -102.261 -32v-232c31.4473 14.5967 84.4648 24 127.826 24c59.9111 0 101.968 -32 161.913 -32c41.4365 0 80.4775 16.5879 102.261 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"384\" \r\n-d=\"M336 448c26.5098 0 48 -21.4902 48 -48v-464l-192 112l-192 -112v464c0 26.5098 21.4902 48 48 48h288zM336 19.5703v374.434c0 3.31348 -2.68555 5.99609 -6 5.99609h-276c-3.31152 0 -6 -2.68848 -6 -6v-374.43l144 84z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"image\" unicode=\"&#xf03e;\" \r\n-d=\"M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM458 48c3.31152 0 6 2.68848 6 6v276c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-276\r\n-c0 -3.31152 2.68848 -6 6 -6h404zM128 296c22.0908 0 40 -17.9092 40 -40s-17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40zM96 96v48l39.5137 39.5146c4.6875 4.68652 12.2852 4.68652 16.9717 0l39.5146 -39.5146l119.514 119.515\r\n-c4.6875 4.68652 12.2852 4.68652 16.9717 0l87.5146 -87.5146v-80h-320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"576\" \r\n-d=\"M402.3 103.1l32 32c5 5 13.7002 1.5 13.7002 -5.69922v-145.4c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h273.5c7.09961 0 10.7002 -8.59961 5.7002 -13.7002l-32 -32c-1.5 -1.5 -3.5 -2.2998 -5.7002 -2.2998h-241.5v-352h352\r\n-v113.5c0 2.09961 0.799805 4.09961 2.2998 5.59961zM558.9 304.9l-262.601 -262.601l-90.3994 -10c-26.2002 -2.89941 -48.5 19.2002 -45.6006 45.6006l10 90.3994l262.601 262.601c22.8994 22.8994 59.8994 22.8994 82.6992 0l43.2002 -43.2002\r\n-c22.9004 -22.9004 22.9004 -60 0.100586 -82.7998zM460.1 274l-58.0996 58.0996l-185.8 -185.899l-7.2998 -65.2998l65.2998 7.2998zM524.9 353.7l-43.2002 43.2002c-4.10059 4.09961 -10.7998 4.09961 -14.7998 0l-30.9004 -30.9004l58.0996 -58.0996l30.9004 30.8994\r\n-c4 4.2002 4 10.7998 -0.0996094 14.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"times-circle\" unicode=\"&#xf057;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM357.8 254.2l-62.2002 -62.2002l62.2002 -62.2002\r\n-c4.7002 -4.7002 4.7002 -12.2998 0 -17l-22.5996 -22.5996c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-62.2002 62.2002l-62.2002 -62.2002c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-22.5996 22.5996c-4.7002 4.7002 -4.7002 12.2998 0 17l62.2002 62.2002l-62.2002 62.2002\r\n-c-4.7002 4.7002 -4.7002 12.2998 0 17l22.5996 22.5996c4.7002 4.7002 12.2998 4.7002 17 0l62.2002 -62.2002l62.2002 62.2002c4.7002 4.7002 12.2998 4.7002 17 0l22.5996 -22.5996c4.7002 -4.7002 4.7002 -12.2998 0 -17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check-circle\" unicode=\"&#xf058;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200z\r\n-M396.204 261.733c4.66699 -4.70508 4.63672 -12.3037 -0.0673828 -16.9717l-172.589 -171.204c-4.70508 -4.66797 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66797 4.70605 -4.63672 12.3047 0.0683594 16.9717l22.7188 22.5361\r\n-c4.70508 4.66699 12.3027 4.63574 16.9697 -0.0693359l59.792 -60.2773l141.353 140.216c4.70508 4.66797 12.3027 4.6377 16.9697 -0.0673828z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"question-circle\" unicode=\"&#xf059;\" \r\n-d=\"M256 440c136.957 0 248 -111.083 248 -248c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248zM256 -8c110.569 0 200 89.4697 200 200c0 110.529 -89.5088 200 -200 200c-110.528 0 -200 -89.5049 -200 -200\r\n-c0 -110.569 89.4678 -200 200 -200zM363.244 247.2c0 -67.0518 -72.4209 -68.084 -72.4209 -92.8633v-6.33691c0 -6.62695 -5.37305 -12 -12 -12h-45.6475c-6.62695 0 -12 5.37305 -12 12v8.65918c0 35.7451 27.1006 50.0342 47.5791 61.5156\r\n-c17.5615 9.84473 28.3242 16.541 28.3242 29.5791c0 17.2461 -21.999 28.6934 -39.7842 28.6934c-23.1885 0 -33.8936 -10.9775 -48.9424 -29.9697c-4.05664 -5.11914 -11.46 -6.07031 -16.666 -2.12402l-27.8232 21.0986\r\n-c-5.10742 3.87207 -6.25098 11.0654 -2.64453 16.3633c23.627 34.6934 53.7217 54.1846 100.575 54.1846c49.0713 0 101.45 -38.3037 101.45 -88.7998zM298 80c0 -23.1592 -18.8408 -42 -42 -42s-42 18.8408 -42 42s18.8408 42 42 42s42 -18.8408 42 -42z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye\" unicode=\"&#xf06e;\" horiz-adv-x=\"576\" \r\n-d=\"M288 304c0.0927734 0 0.244141 0.000976562 0.336914 0.000976562c61.6641 0 111.71 -50.0469 111.71 -111.711c0 -61.6631 -50.0459 -111.71 -111.71 -111.71s-111.71 50.0469 -111.71 111.71c0 8.71289 1.95898 22.5781 4.37305 30.9502\r\n-c6.93066 -3.94141 19.0273 -7.18457 27 -7.24023c30.9121 0 56 25.0879 56 56c-0.0556641 7.97266 -3.29883 20.0693 -7.24023 27c8.42383 2.62207 22.4189 4.8623 31.2402 5zM572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947\r\n-s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41\r\n-s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye-slash\" unicode=\"&#xf070;\" horiz-adv-x=\"640\" \r\n-d=\"M634 -23c3.31738 -2.65137 6.00977 -8.25098 6.00977 -12.498c0 -3.10449 -1.57715 -7.58984 -3.51953 -10.0117l-10 -12.4902c-2.65234 -3.31152 -8.24707 -6 -12.4902 -6c-3.09961 0 -7.58008 1.57227 -10 3.50977l-598 467.49\r\n-c-3.31738 2.65137 -6.00977 8.25098 -6.00977 12.498c0 3.10449 1.57715 7.58984 3.51953 10.0117l10 12.4902c2.65234 3.31152 8.24707 6 12.4902 6c3.09961 0 7.58008 -1.57227 10 -3.50977zM296.79 301.53c6.33496 1.35059 16.7324 2.45801 23.21 2.46973\r\n-c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-6.33496 -1.34375 -16.7334 -2.44629 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29\r\n-c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c1.91992 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55957 -10.7959 -3.47949 -14.5947c-11.7197 -22.7598 -35.4189 -56.4092 -52.9004 -75.1104l-37.7402 29.5\r\n-c14.333 15.0156 34.0449 41.9854 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4\r\n-c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c11.7168 22.7568 35.4111 56.4014 52.8896 75.1006l37.7402 -29.5c-14.3467 -15.0107 -34.0811 -41.9756 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-alt\" unicode=\"&#xf073;\" horiz-adv-x=\"448\" \r\n-d=\"M148 160h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM256 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40\r\n-c6.59961 0 12 -5.40039 12 -12v-40zM352 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM256 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM160 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM352 76c0 -6.59961 -5.40039 -12 -12 -12h-40\r\n-c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40\r\n-c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" \r\n-d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5c-3.80078 8.7998 -2 19 4.59961 26\r\n-c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004\r\n-l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder\" unicode=\"&#xf07b;\" \r\n-d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h146.74c8.49023 0 16.6299 -3.37012 22.6299 -9.37012l54.6299 -54.6299h192zM464 48v224h-198.62\r\n-c-8.49023 0 -16.6299 3.37012 -22.6299 9.37012l-54.6299 54.6299h-140.12v-288h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder-open\" unicode=\"&#xf07c;\" horiz-adv-x=\"576\" \r\n-d=\"M527.9 224c37.6992 0 60.6992 -41.5 40.6992 -73.4004l-79.8994 -128c-8.7998 -14.0996 -24.2002 -22.5996 -40.7002 -22.5996h-400c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h160l64 -64h160c26.5 0 48 -21.5 48 -48v-48h47.9004zM48 330v-233.4l62.9004 104.2\r\n-c8.69922 14.4004 24.2998 23.2002 41.0996 23.2002h280v42c0 3.2998 -2.7002 6 -6 6h-173.9l-64 64h-134.1c-3.2998 0 -6 -2.7002 -6 -6zM448 48l80 128h-378.8l-77.2002 -128h376z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chart-bar\" unicode=\"&#xf080;\" \r\n-d=\"M396.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v230.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-230.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM204.8 96\r\n-c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v198.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-198.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM300.8 96\r\n-c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v134.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-134.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM496 48c8.83984 0 16 -7.16016 16 -16v-16\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-320h448zM108.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v70.4004c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004\r\n-c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-70.4004c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"576\" \r\n-d=\"M532 61.7998c15.2998 -30.7002 37.4004 -54.5 37.7998 -54.7998c6.2998 -6.7002 8 -16.5 4.40039 -25c-3.7002 -8.5 -12 -14 -21.2002 -14c-53.5996 0 -96.7002 20.2998 -125.2 38.7998c-19 -4.39941 -39 -6.7998 -59.7998 -6.7998\r\n-c-86.2002 0 -159.9 40.4004 -191.3 97.7998c-9.7002 1.2002 -19.2002 2.7998 -28.4004 4.90039c-28.5 -18.6006 -71.7002 -38.7998 -125.2 -38.7998c-9.19922 0 -17.5996 5.5 -21.1992 14c-3.7002 8.5 -1.90039 18.2998 4.39941 25\r\n-c0.400391 0.399414 22.4004 24.1992 37.7002 54.8994c-27.5 27.2002 -44 61.2002 -44 98.2002c0 88.4004 93.0996 160 208 160c86.2998 0 160.3 -40.5 191.8 -98.0996c99.7002 -11.8008 176.2 -77.9004 176.2 -157.9c0 -37.0996 -16.5 -71.0996 -44 -98.2002zM139.2 154.1\r\n-l19.7998 -4.5c16 -3.69922 32.5 -5.59961 49 -5.59961c86.7002 0 160 51.2998 160 112s-73.2998 112 -160 112s-160 -51.2998 -160 -112c0 -28.7002 16.2002 -50.5996 29.7002 -64l24.7998 -24.5l-15.5 -31.0996c-2.59961 -5.10059 -5.2998 -10.1006 -8 -14.8008\r\n-c14.5996 5.10059 29 12.3008 43.0996 21.4004zM498.3 96c13.5 13.4004 29.7002 35.2998 29.7002 64c0 49.2002 -48.2998 91.5 -112.7 106c0.299805 -3.2998 0.700195 -6.59961 0.700195 -10c0 -80.9004 -78 -147.5 -179.3 -158.3\r\n-c29.0996 -29.6006 77.2998 -49.7002 131.3 -49.7002c16.5 0 33 1.90039 49 5.59961l19.9004 4.60059l17.0996 -11.1006c14.0996 -9.09961 28.5 -16.2998 43.0996 -21.3994c-2.69922 4.7002 -5.39941 9.7002 -8 14.7998l-15.5 31.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-half\" unicode=\"&#xf089;\" horiz-adv-x=\"576\" \r\n-d=\"M288 62.7002v-54.2998l-130.7 -68.6006c-23.3994 -12.2998 -50.8994 7.60059 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2002l65.2998 132.4c5.90039 11.8994 17.2998 17.7998 28.7002 17.7998v-68.0996l-62.2002 -126\r\n-l-139 -20.2002l100.601 -98l-23.7002 -138.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \r\n-d=\"M484.112 420.111c28.1221 -28.123 35.9434 -68.0039 19.0215 -97.0547c-23.0576 -39.584 50.1436 -163.384 -82.3311 -295.86c-132.301 -132.298 -256.435 -59.3594 -295.857 -82.3291c-29.0459 -16.917 -68.9219 -9.11426 -97.0576 19.0205\r\n-c-28.1221 28.1221 -35.9434 68.0029 -19.0215 97.0547c23.0566 39.5859 -50.1436 163.386 82.3301 295.86c132.308 132.309 256.407 59.3496 295.862 82.332c29.0498 16.9219 68.9307 9.09863 97.0537 -19.0234zM461.707 347.217\r\n-c13.5166 23.2031 -27.7578 63.7314 -50.4883 50.4912c-66.6025 -38.7939 -165.646 45.5898 -286.081 -74.8457c-120.444 -120.445 -36.0449 -219.472 -74.8447 -286.08c-13.542 -23.2471 27.8145 -63.6953 50.4932 -50.4883\r\n-c66.6006 38.7949 165.636 -45.5996 286.076 74.8428c120.444 120.445 36.0449 219.472 74.8447 286.08zM291.846 338.481c1.37012 -10.96 -6.40332 -20.957 -17.3643 -22.3271c-54.8467 -6.85547 -135.779 -87.7871 -142.636 -142.636\r\n-c-1.37305 -10.9883 -11.3984 -18.7334 -22.3262 -17.3643c-10.9609 1.37012 -18.7344 11.3652 -17.3643 22.3262c9.16211 73.2852 104.167 168.215 177.364 177.364c10.9531 1.36816 20.9561 -6.40234 22.3262 -17.3633z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"credit-card\" unicode=\"&#xf09d;\" horiz-adv-x=\"576\" \r\n-d=\"M527.9 416c26.5996 0 48.0996 -21.5 48.0996 -48v-352c0 -26.5 -21.5 -48 -48.0996 -48h-479.801c-26.5996 0 -48.0996 21.5 -48.0996 48v352c0 26.5 21.5 48 48.0996 48h479.801zM54.0996 368c-3.2998 0 -6 -2.7002 -6 -6v-42h479.801v42c0 3.2998 -2.7002 6 -6 6\r\n-h-467.801zM521.9 16c3.2998 0 6 2.7002 6 6v170h-479.801v-170c0 -3.2998 2.7002 -6 6 -6h467.801zM192 116v-40c0 -6.59961 -5.40039 -12 -12 -12h-72c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h72c6.59961 0 12 -5.40039 12 -12zM384 116v-40\r\n-c0 -6.59961 -5.40039 -12 -12 -12h-136c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h136c6.59961 0 12 -5.40039 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" horiz-adv-x=\"576\" \r\n-d=\"M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 8.30957 3.85156 20.5898 8.59668 27.4121l105.08 151.053\r\n-c7.90625 11.3652 25.5596 20.5889 39.4033 20.5889h0.000976562h269.838h0.000976562c13.8438 0 31.4971 -9.22363 39.4033 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32\r\n-s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-right\" unicode=\"&#xf0a4;\" \r\n-d=\"M428.8 310.4c45.0996 0 83.2002 -38.1016 83.2002 -83.2002c0 -45.6162 -37.7646 -83.2002 -83.2002 -83.2002h-35.6475c-1.41602 -6.36719 -4.96875 -16.252 -7.92969 -22.0645c2.50586 -22.0059 -3.50293 -44.9775 -15.9844 -62.791\r\n-c-1.14062 -52.4863 -37.3984 -91.1445 -99.9404 -91.1445h-21.2988c-60.0635 0 -98.5117 40 -127.2 40h-2.67871c-5.74707 -4.95215 -13.5361 -8 -22.1201 -8h-64c-17.6729 0 -32 12.8936 -32 28.7998v230.4c0 15.9062 14.3271 28.7998 32 28.7998h64.001\r\n-c8.58398 0 16.373 -3.04785 22.1201 -8h2.67871c6.96387 0 14.8623 6.19336 30.1816 23.6689l0.128906 0.148438l0.130859 0.145508c8.85645 9.93652 18.1162 20.8398 25.8506 33.2529c18.7051 30.2471 30.3936 78.7842 75.707 78.7842c56.9277 0 92 -35.2861 92 -83.2002\r\n-v-0.0839844c0 -6.21777 -0.974609 -16.2148 -2.17578 -22.3154h86.1768zM428.8 192c18.9756 0 35.2002 16.2246 35.2002 35.2002c0 18.7002 -16.7754 35.2002 -35.2002 35.2002h-158.399c0 17.3242 26.3994 35.1992 26.3994 70.3994c0 26.4004 -20.625 35.2002 -44 35.2002\r\n-c-8.79395 0 -20.4443 -32.7119 -34.9258 -56.0996c-9.07422 -14.5752 -19.5244 -27.2256 -30.7988 -39.875c-16.1094 -18.374 -33.8359 -36.6328 -59.0752 -39.5967v-176.753c42.79 -3.7627 74.5088 -39.6758 120 -39.6758h21.2988\r\n-c40.5244 0 57.124 22.1973 50.6006 61.3252c14.6113 8.00098 24.1514 33.9785 12.9248 53.625c19.3652 18.2246 17.7871 46.3809 4.9502 61.0498h91.0254zM88 64c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-left\" unicode=\"&#xf0a5;\" \r\n-d=\"M0 227.2c0 45.0986 38.1006 83.2002 83.2002 83.2002h86.1758c-1.3623 6.91016 -2.17578 14.374 -2.17578 22.3994c0 47.9141 35.0723 83.2002 92 83.2002c45.3135 0 57.002 -48.5371 75.7061 -78.7852c7.73438 -12.4121 16.9951 -23.3154 25.8506 -33.2529\r\n-l0.130859 -0.145508l0.128906 -0.148438c15.3213 -17.4746 23.2197 -23.668 30.1836 -23.668h2.67871c5.74707 4.95215 13.5361 8 22.1201 8h64c17.6729 0 32 -12.8936 32 -28.7998v-230.4c0 -15.9062 -14.3271 -28.7998 -32 -28.7998h-64\r\n-c-8.58398 0 -16.373 3.04785 -22.1201 8h-2.67871c-28.6885 0 -67.1367 -40 -127.2 -40h-21.2988c-62.542 0 -98.8008 38.6582 -99.9404 91.1445c-12.4814 17.8135 -18.4922 40.7852 -15.9844 62.791c-2.96094 5.8125 -6.51367 15.6973 -7.92969 22.0645h-35.6465\r\n-c-45.4355 0 -83.2002 37.584 -83.2002 83.2002zM48 227.2c0 -18.9756 16.2246 -35.2002 35.2002 -35.2002h91.0244c-12.8369 -14.6689 -14.415 -42.8252 4.9502 -61.0498c-11.2256 -19.6465 -1.68652 -45.624 12.9248 -53.625\r\n-c-6.52246 -39.1279 10.0771 -61.3252 50.6016 -61.3252h21.2988c45.4912 0 77.21 35.9131 120 39.6768v176.752c-25.2393 2.96289 -42.9658 21.2227 -59.0752 39.5967c-11.2744 12.6494 -21.7246 25.2998 -30.7988 39.875\r\n-c-14.4814 23.3877 -26.1318 56.0996 -34.9258 56.0996c-23.375 0 -44 -8.7998 -44 -35.2002c0 -35.2002 26.3994 -53.0752 26.3994 -70.3994h-158.399c-18.4248 0 -35.2002 -16.5 -35.2002 -35.2002zM448 88c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\r\n-s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-up\" unicode=\"&#xf0a6;\" horiz-adv-x=\"448\" \r\n-d=\"M105.6 364.8c0 45.0996 38.1016 83.2002 83.2002 83.2002c45.6162 0 83.2002 -37.7646 83.2002 -83.2002v-35.6465c6.36719 -1.41602 16.252 -4.96875 22.0645 -7.92969c22.0059 2.50684 44.9775 -3.50293 62.791 -15.9844\r\n-c52.4863 -1.14062 91.1445 -37.3984 91.1445 -99.9404v-21.2988c0 -60.0635 -40 -98.5117 -40 -127.2v-2.67871c4.95215 -5.74707 8 -13.5361 8 -22.1201v-64c0 -17.6729 -12.8936 -32 -28.7998 -32h-230.4c-15.9062 0 -28.7998 14.3271 -28.7998 32v64\r\n-c0 8.58398 3.04785 16.373 8 22.1201v2.67871c0 6.96387 -6.19336 14.8623 -23.6689 30.1816l-0.148438 0.128906l-0.145508 0.130859c-9.93652 8.85645 -20.8398 18.1162 -33.2529 25.8506c-30.2471 18.7051 -78.7842 30.3936 -78.7842 75.707\r\n-c0 56.9277 35.2861 92 83.2002 92h0.0839844c6.21777 0 16.2148 -0.974609 22.3154 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994\r\n-c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988\r\n-c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-down\" unicode=\"&#xf0a7;\" horiz-adv-x=\"448\" \r\n-d=\"M188.8 -64c-45.0986 0 -83.2002 38.1006 -83.2002 83.2002v86.1758c-6.91016 -1.3623 -14.374 -2.17578 -22.3994 -2.17578c-47.9141 0 -83.2002 35.0723 -83.2002 92c0 45.3135 48.5371 57.002 78.7852 75.707c12.4121 7.73438 23.3154 16.9951 33.2529 25.8506\r\n-l0.145508 0.130859l0.148438 0.128906c17.4746 15.3213 23.668 23.2197 23.668 30.1836v2.67871c-4.95215 5.74707 -8 13.5361 -8 22.1201v64c0 17.6729 12.8936 32 28.7998 32h230.4c15.9062 0 28.7998 -14.3271 28.7998 -32v-64.001\r\n-c0 -8.58398 -3.04785 -16.373 -8 -22.1201v-2.67871c0 -28.6885 40 -67.1367 40 -127.2v-21.2988c0 -62.542 -38.6582 -98.8008 -91.1445 -99.9404c-17.8135 -12.4814 -40.7852 -18.4922 -62.791 -15.9844c-5.8125 -2.96094 -15.6973 -6.51367 -22.0645 -7.92969v-35.6465\r\n-c0 -45.4355 -37.584 -83.2002 -83.2002 -83.2002zM188.8 -16c18.9756 0 35.2002 16.2246 35.2002 35.2002v91.0244c14.6689 -12.8369 42.8252 -14.415 61.0498 4.9502c19.6465 -11.2256 45.624 -1.68652 53.625 12.9248c39.1279 -6.52246 61.3252 10.0771 61.3252 50.6016\r\n-v21.2988c0 45.4912 -35.9131 77.21 -39.6768 120h-176.752c-2.96289 -25.2393 -21.2227 -42.9658 -39.5967 -59.0752c-12.6494 -11.2744 -25.2998 -21.7246 -39.875 -30.7988c-23.3877 -14.4814 -56.0996 -26.1318 -56.0996 -34.9258c0 -23.375 8.7998 -44 35.2002 -44\r\n-c35.2002 0 53.0752 26.3994 70.3994 26.3994v-158.399c0 -18.4248 16.5 -35.2002 35.2002 -35.2002zM328 384c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"448\" \r\n-d=\"M433.941 382.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48\r\n-h172.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88\r\n-c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184\r\n-v-64h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" horiz-adv-x=\"448\" \r\n-d=\"M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM272 368h-128v-80h128v80\r\n-zM394 16c3.31152 0 6 2.68848 6 6v259.632v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340\r\n-c0 -3.31152 2.68848 -6 6 -6h340zM224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"square\" unicode=\"&#xf0c8;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM394 16c3.2998 0 6 2.7002 6 6v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf0e0;\" \r\n-d=\"M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM464 336h-416v-40.8047c22.4248 -18.2627 58.1797 -46.6602 134.587 -106.49\r\n-c16.834 -13.2422 50.2051 -45.0762 73.4131 -44.7012c23.2119 -0.371094 56.5723 31.4541 73.4131 44.7012c76.4189 59.8389 112.165 88.2305 134.587 106.49v40.8047zM48 48h416v185.601c-22.915 -18.252 -55.4189 -43.8691 -104.947 -82.6523\r\n-c-22.5439 -17.748 -60.3359 -55.1787 -103.053 -54.9473c-42.9277 -0.231445 -81.2051 37.75 -103.062 54.9551c-49.5293 38.7842 -82.0244 64.3945 -104.938 82.6455v-185.602z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lightbulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"352\" \r\n-d=\"M176 368c8.83984 0 16 -7.16016 16 -16s-7.16016 -16 -16 -16c-35.2803 0 -64 -28.7002 -64 -64c0 -8.83984 -7.16016 -16 -16 -16s-16 7.16016 -16 16c0 52.9404 43.0596 96 96 96zM96.0596 -11.1699l-0.0400391 43.1797h159.961l-0.0507812 -43.1797\r\n-c-0.00976562 -3.13965 -0.939453 -6.21973 -2.67969 -8.83984l-24.5098 -36.8398c-2.95996 -4.45996 -7.95996 -7.14062 -13.3203 -7.14062h-78.8496c-5.35059 0 -10.3506 2.68066 -13.3203 7.14062l-24.5098 36.8398c-1.75 2.62012 -2.68066 5.68945 -2.68066 8.83984z\r\n-M176 448c97.2002 0 176 -78.7998 176 -176c0 -44.3701 -16.4502 -84.8496 -43.5498 -115.79c-16.6406 -18.9795 -42.7402 -58.79 -52.4199 -92.1602v-0.0498047h-48v0.0996094c0.00390625 4.04199 0.999023 10.4482 2.21973 14.3008\r\n-c5.67969 17.9893 22.9902 64.8496 62.0996 109.46c20.4102 23.29 31.6504 53.1699 31.6504 84.1396c0 70.5801 -57.4199 128 -128 128c-68.2803 0 -128.15 -54.3604 -127.95 -128c0.0898438 -30.9902 11.0703 -60.71 31.6104 -84.1396\r\n-c39.3496 -44.9004 56.5801 -91.8604 62.1699 -109.67c1.42969 -4.56055 2.13965 -9.30078 2.15039 -14.0703v-0.120117h-48v0.0595703c-9.68066 33.3604 -35.7803 73.1709 -52.4209 92.1602c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78\r\n-c0 93.0303 73.7197 176 176 176z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0f3;\" horiz-adv-x=\"448\" \r\n-d=\"M439.39 85.71c6 -6.44043 8.66016 -14.1602 8.61035 -21.71c-0.0996094 -16.4004 -12.9805 -32 -32.0996 -32h-383.801c-19.1191 0 -31.9893 15.5996 -32.0996 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c19.3193 20.7598 55.4697 51.9902 55.4697 154.29\r\n-c0 77.7002 54.4795 139.9 127.939 155.16v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -102.3 36.1504 -133.53 55.4697 -154.29zM67.5303 80h312.939\r\n-c-21.2197 27.96 -44.4199 74.3203 -44.5293 159.42c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112s-112 -50.1396 -112 -112c0 -0.200195 0.0595703 -0.379883 0.0595703 -0.580078\r\n-c-0.109375 -85.0898 -23.3096 -131.45 -44.5293 -159.42zM224 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"448\" \r\n-d=\"M128 204v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12zM268 192c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-40zM192 108c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM268 96c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\r\n-c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.62695 5.37305 12 12 12h19.5v378.965c0 11.6172 10.7451 21.0352 24 21.0352h88.5v40c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-40h88.5\r\n-c13.2549 0 24 -9.41797 24 -21.0352v-378.965h19.5c6.62695 0 12 -5.37305 12 -12zM79.5 -15h112.5v67c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-67h112.5v351h-64.5v-24c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v24\r\n-h-64.5v-351zM266 384h-26v26c0 3.31152 -2.68848 6 -6 6h-20c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6v26h26c3.31152 0 6 2.68848 6 6v20\r\n-c0 3.31152 -2.68848 6 -6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus-square\" unicode=\"&#xf0fe;\" horiz-adv-x=\"448\" \r\n-d=\"M352 208v-32c0 -6.59961 -5.40039 -12 -12 -12h-88v-88c0 -6.59961 -5.40039 -12 -12 -12h-32c-6.59961 0 -12 5.40039 -12 12v88h-88c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h88v88c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12\r\n-v-88h88c6.59961 0 12 -5.40039 12 -12zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340\r\n-c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM332 135.4c8.5 10.1992 23.7002 11.5 33.7998 3.09961c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998\r\n-c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.0996 8.40039 25.2998 7.09961 33.7998 -3.09961c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 144c40.2002 0 78 -17.7002 103.8 -48.5996c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008\r\n-c-10.7002 -8.7998 -25.7002 -6.59961 -33.7998 3.10059c-16.6006 20 -41 31.3994 -66.9004 31.3994s-50.2998 -11.5 -66.9004 -31.3994c-8.5 -10.2002 -23.5996 -11.5 -33.7998 -3.10059c-10.2002 8.5 -11.5996 23.6006 -3.09961 33.8008\r\n-c25.7998 30.8994 63.5996 48.5996 103.8 48.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM336 128c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-176c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h176z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"576\" \r\n-d=\"M528 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h480zM536 48v288c0 4.41113 -3.58887 8 -8 8h-480c-4.41113 0 -8 -3.58887 -8 -8v-288c0 -4.41113 3.58887 -8 8 -8\r\n-h480c4.41113 0 8 3.58887 8 8zM170 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM266 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28\r\n-c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM362 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM458 178c0 -6.62695 -5.37305 -12 -12 -12h-28\r\n-c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 96c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 96\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28\r\n-c6.62695 0 12 -5.37305 12 -12v-28zM218 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM314 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28\r\n-c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM410 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 260c0 -6.62695 -5.37305 -12 -12 -12h-28\r\n-c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM408 102c0 -6.62695 -5.37305 -12 -12 -12h-216c-6.62695 0 -12 5.37305 -12 12v16c0 6.62695 5.37305 12 12 12h216c6.62695 0 12 -5.37305 12 -12v-16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf133;\" horiz-adv-x=\"448\" \r\n-d=\"M400 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12\r\n-v-52h48zM394 -16c3.2998 0 6 2.7002 6 6v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play-circle\" unicode=\"&#xf144;\" \r\n-d=\"M371.7 210c16.3994 -9.2002 16.3994 -32.9004 0 -42l-176 -101c-15.9004 -8.7998 -35.7002 2.59961 -35.7002 21v208c0 18.5 19.9004 29.7998 35.7002 21zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192\r\n-c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus-square\" unicode=\"&#xf146;\" horiz-adv-x=\"448\" \r\n-d=\"M108 164c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h232c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12h-232zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\r\n-c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check-square\" unicode=\"&#xf14a;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM400 16v352h-352v-352h352zM364.136 257.724l-172.589 -171.204\r\n-c-4.70508 -4.66699 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66699 4.70508 -4.63672 12.3037 0.0693359 16.9717l22.7188 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l59.792 -60.2773l141.353 140.217\r\n-c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0683594l22.5361 -22.7178c4.66699 -4.70605 4.63672 -12.3047 -0.0683594 -16.9717z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share-square\" unicode=\"&#xf14d;\" horiz-adv-x=\"576\" \r\n-d=\"M561.938 289.94c18.75 -18.7402 18.75 -49.1406 0 -67.8809l-143.998 -144c-29.9727 -29.9727 -81.9404 -9.05273 -81.9404 33.9404v53.7998c-101.266 -7.83691 -99.625 -31.6406 -84.1104 -78.7598c14.2285 -43.0889 -33.4736 -79.248 -71.0195 -55.7402\r\n-c-51.6924 32.3057 -84.8701 83.0635 -84.8701 144.76c0 39.3408 12.2197 72.7402 36.3301 99.3008c19.8398 21.8398 47.7402 38.4697 82.9102 49.4199c36.7295 11.4395 78.3096 16.1094 120.76 17.9893v57.1982c0 42.9355 51.9258 63.9541 81.9404 33.9404zM384 112l144 144\r\n-l-144 144v-104.09c-110.86 -0.90332 -240 -10.5166 -240 -119.851c0 -52.1396 32.79 -85.6094 62.3096 -104.06c-39.8174 120.65 48.999 141.918 177.69 143.84v-103.84zM408.74 27.5068c6.14844 1.75684 15.5449 5.92383 20.9736 9.30273\r\n-c7.97656 4.95215 18.2861 -0.825195 18.2861 -10.2139v-42.5957c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h132c6.62695 0 12 -5.37305 12 -12v-4.48633c0 -4.91699 -2.9873 -9.36914 -7.56934 -11.1514\r\n-c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.59668 -0.974609 -4.41016 -1.77051 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" horiz-adv-x=\"496\" \r\n-d=\"M347.94 318.14c16.6592 7.61035 33.8096 -9.54004 26.1992 -26.1992l-65.9697 -144.341c-2.73047 -5.97363 -9.7959 -13.0391 -15.7695 -15.7695l-144.341 -65.9697c-16.6592 -7.61035 -33.8096 9.5498 -26.1992 26.1992l65.9697 144.341\r\n-c2.73047 5.97363 9.7959 13.0391 15.7695 15.7695zM270.58 169.42c12.4697 12.4697 12.4697 32.6904 0 45.1602s-32.6904 12.4697 -45.1602 0s-12.4697 -32.6904 0 -45.1602s32.6904 -12.4697 45.1602 0zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248\r\n-s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-down\" unicode=\"&#xf150;\" horiz-adv-x=\"448\" \r\n-d=\"M125.1 240h197.801c10.6992 0 16.0996 -13 8.5 -20.5l-98.9004 -98.2998c-4.7002 -4.7002 -12.2002 -4.7002 -16.9004 0l-98.8994 98.2998c-7.7002 7.5 -2.2998 20.5 8.39941 20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-up\" unicode=\"&#xf151;\" horiz-adv-x=\"448\" \r\n-d=\"M322.9 144h-197.801c-10.6992 0 -16.0996 13 -8.5 20.5l98.9004 98.2998c4.7002 4.7002 12.2002 4.7002 16.9004 0l98.8994 -98.2998c7.7002 -7.5 2.2998 -20.5 -8.39941 -20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-right\" unicode=\"&#xf152;\" horiz-adv-x=\"448\" \r\n-d=\"M176 93.0996v197.801c0 10.6992 13 16.0996 20.5 8.5l98.2998 -98.9004c4.7002 -4.7002 4.7002 -12.2002 0 -16.9004l-98.2998 -98.8994c-7.5 -7.7002 -20.5 -2.2998 -20.5 8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-alt\" unicode=\"&#xf15c;\" horiz-adv-x=\"384\" \r\n-d=\"M288 200v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v28c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM276 128c6.59961 0 12 -5.40039 12 -12v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12\r\n-v28c0 6.59961 5.40039 12 12 12h168zM384 316.1v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l83.9004 -83.9004c9 -8.90039 14.0996 -21.2002 14.0996 -33.9004z\r\n-M256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs-up\" unicode=\"&#xf164;\" \r\n-d=\"M466.27 161.31c4.6748 -22.6465 0.864258 -44.5371 -8.98926 -62.9893c2.95898 -23.8682 -4.02148 -48.5654 -17.3398 -66.9902c-0.954102 -55.9072 -35.8232 -95.3301 -112.94 -95.3301c-7 0 -15 0.00976562 -22.2197 0.00976562\r\n-c-102.742 0 -133.293 38.9395 -177.803 39.9404c-3.56934 -13.7764 -16.085 -23.9502 -30.9775 -23.9502h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h98.7598c19.1455 16.9531 46.0137 60.6533 68.7598 83.4004\r\n-c13.667 13.667 10.1533 108.6 71.7607 108.6c57.5801 0 95.2695 -31.9355 95.2695 -104.73c0 -18.4092 -3.92969 -33.7295 -8.84961 -46.5391h36.4795c48.6025 0 85.8203 -41.5654 85.8203 -85.5801c0 -19.1504 -4.95996 -34.9902 -13.7305 -49.8408zM404.52 107.48\r\n-c21.5811 20.3838 18.6992 51.0645 5.21094 65.6191c9.44922 0 22.3594 18.9102 22.2695 37.8105c-0.0898438 18.9102 -16.71 37.8203 -37.8203 37.8203h-103.989c0 37.8193 28.3594 55.3691 28.3594 94.5391c0 23.75 0 56.7305 -47.2695 56.7305\r\n-c-18.9102 -18.9102 -9.45996 -66.1797 -37.8203 -94.54c-26.5596 -26.5703 -66.1797 -97.46 -94.54 -97.46h-10.9199v-186.17c53.6113 0 100.001 -37.8203 171.64 -37.8203h37.8203c35.5117 0 60.8203 17.1201 53.1201 65.9004\r\n-c15.2002 8.16016 26.5 36.4395 13.9395 57.5703zM88 16c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs-down\" unicode=\"&#xf165;\" \r\n-d=\"M466.27 222.69c8.77051 -14.8506 13.7305 -30.6904 13.7305 -49.8408c0 -44.0146 -37.2178 -85.5801 -85.8203 -85.5801h-36.4795c4.91992 -12.8096 8.84961 -28.1299 8.84961 -46.5391c0 -72.7949 -37.6895 -104.73 -95.2695 -104.73\r\n-c-61.6074 0 -58.0938 94.9326 -71.7607 108.6c-22.7461 22.7471 -49.6133 66.4473 -68.7598 83.4004h-7.05176c-5.5332 -9.56152 -15.8662 -16 -27.708 -16h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h64c8.11328 0 15.5146 -3.02539 21.1553 -8\r\n-h10.8447c40.9971 0 73.1953 39.9902 176.78 39.9902c7.21973 0 15.2197 0.00976562 22.2197 0.00976562c77.1172 0 111.986 -39.4229 112.94 -95.3301c13.3184 -18.4248 20.2979 -43.1221 17.3398 -66.9902c9.85352 -18.4521 13.6641 -40.3428 8.98926 -62.9893zM64 152\r\n-c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM394.18 135.27c21.1104 0 37.7305 18.9102 37.8203 37.8203c0.0898438 18.9004 -12.8203 37.8105 -22.2695 37.8105c13.4883 14.5547 16.3701 45.2354 -5.21094 65.6191\r\n-c12.5605 21.1309 1.26074 49.4102 -13.9395 57.5703c7.7002 48.7803 -17.6084 65.9004 -53.1201 65.9004h-37.8203c-71.6387 0 -118.028 -37.8203 -171.64 -37.8203v-186.17h10.9199c28.3604 0 67.9805 -70.8896 94.54 -97.46\r\n-c28.3604 -28.3604 18.9102 -75.6299 37.8203 -94.54c47.2695 0 47.2695 32.9805 47.2695 56.7305c0 39.1699 -28.3594 56.7197 -28.3594 94.5391h103.989z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" \r\n-d=\"M494.2 226.1c11.2002 -7.59961 17.7998 -20.0996 17.8994 -33.6992c0 -13.4004 -6.69922 -26 -17.7998 -33.5l-59.7998 -40.5l13.7002 -71c2.5 -13.2002 -1.60059 -26.8008 -11.1006 -36.3008s-22.8994 -13.7998 -36.2998 -11.0996l-70.8994 13.7002l-40.4004 -59.9004\r\n-c-7.5 -11.0996 -20.0996 -17.7998 -33.5 -17.7998s-26 6.7002 -33.5 17.9004l-40.4004 59.8994l-70.7998 -13.7002c-13.3994 -2.59961 -26.7998 1.60059 -36.2998 11.1006s-13.7002 23.0996 -11.0996 36.2998l13.6992 71l-59.7998 40.5\r\n-c-11.0996 7.5 -17.7998 20 -17.7998 33.5s6.59961 26 17.7998 33.5996l59.7998 40.5l-13.6992 71c-2.60059 13.2002 1.59961 26.7002 11.0996 36.3008c9.5 9.59961 23 13.6992 36.2998 11.1992l70.7998 -13.6992l40.4004 59.8994c15.0996 22.2998 51.9004 22.2998 67 0\r\n-l40.4004 -59.8994l70.8994 13.6992c13 2.60059 26.6006 -1.59961 36.2002 -11.0996c9.5 -9.59961 13.7002 -23.2002 11.0996 -36.4004l-13.6992 -71zM381.3 140.5l76.7998 52.0996l-76.7998 52l17.6006 91.1006l-91 -17.6006l-51.9004 76.9004l-51.7998 -76.7998\r\n-l-91 17.5996l17.5996 -91.2002l-76.7998 -52l76.7998 -52l-17.5996 -91.1992l90.8994 17.5996l51.9004 -77l51.9004 76.9004l91 -17.6006zM256 296c57.2998 0 104 -46.7002 104 -104s-46.7002 -104 -104 -104s-104 46.7002 -104 104s46.7002 104 104 104zM256 136\r\n-c30.9004 0 56 25.0996 56 56s-25.0996 56 -56 56s-56 -25.0996 -56 -56s25.0996 -56 56 -56z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"moon\" unicode=\"&#xf186;\" \r\n-d=\"M279.135 -64c-141.424 0 -256 114.64 -256 256c0 141.425 114.641 256 256 256c13.0068 -0.00195312 33.9443 -1.91797 46.7354 -4.27734c44.0205 -8.13086 53.7666 -66.8691 15.0215 -88.9189c-41.374 -23.5439 -67.4336 -67.4121 -67.4336 -115.836\r\n-c0 -83.5234 75.9238 -146.475 158.272 -130.792c43.6904 8.32129 74.5186 -42.5693 46.248 -77.4004c-47.8613 -58.9717 -120.088 -94.7754 -198.844 -94.7754zM279.135 400c-114.875 0 -208 -93.125 -208 -208s93.125 -208 208 -208\r\n-c65.2314 0 123.439 30.0361 161.575 77.0244c-111.611 -21.2568 -215.252 64.0957 -215.252 177.943c0 67.5127 36.9326 126.392 91.6934 157.555c-12.3271 2.27637 -25.0312 3.47754 -38.0166 3.47754z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-left\" unicode=\"&#xf191;\" horiz-adv-x=\"448\" \r\n-d=\"M272 290.9v-197.801c0 -10.6992 -13 -16.0996 -20.5 -8.5l-98.2998 98.9004c-4.7002 4.7002 -4.7002 12.2002 0 16.9004l98.2998 98.8994c7.5 7.7002 20.5 2.2998 20.5 -8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\r\n-c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dot-circle\" unicode=\"&#xf192;\" \r\n-d=\"M256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200zM256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248z\r\n-M256 272c44.1826 0 80 -35.8174 80 -80s-35.8174 -80 -80 -80s-80 35.8174 -80 80s35.8174 80 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf1ad;\" horiz-adv-x=\"448\" \r\n-d=\"M128 300v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12zM268 288c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40\r\n-c0 -6.59961 -5.40039 -12 -12 -12h-40zM140 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM268 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40\r\n-c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM192 108c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM268 96c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.59961 5.40039 12 12 12h19.5v440c0 13.2998 10.7002 24 24 24h337c13.2998 0 24 -10.7002 24 -24v-440h19.5\r\n-c6.59961 0 12 -5.40039 12 -12zM79.5 -15h112.5v67c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-67h112.5v414l-288.5 1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-pdf\" unicode=\"&#xf1c1;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM298.2 127.7c10.5 -10.5 8 -38.7002 -17.5 -38.7002c-14.7998 0 -36.9004 6.7998 -55.7998 17c-21.6006 -3.59961 -46 -12.7002 -68.4004 -20.0996c-50.0996 -86.4004 -79.4004 -47 -76.0996 -31.2002\r\n-c4 20 31 35.8994 51 46.2002c10.5 18.3994 25.3994 50.5 35.3994 74.3994c-7.39941 28.6006 -11.3994 51 -7 67.1006c4.7998 17.6992 38.4004 20.2998 42.6006 -5.90039c4.69922 -15.4004 -1.5 -39.9004 -5.40039 -56c8.09961 -21.2998 19.5996 -35.7998 36.7998 -46.2998\r\n-c17.4004 2.2002 52.2002 5.5 64.4004 -6.5zM100.1 49.9004c0 -0.700195 11.4004 4.69922 30.4004 35c-5.90039 -5.5 -25.2998 -21.3008 -30.4004 -35zM181.7 240.5c-2.5 0 -2.60059 -26.9004 1.7998 -40.7998c4.90039 8.7002 5.59961 40.7998 -1.7998 40.7998zM157.3 103.9\r\n-c15.9004 6.09961 34 14.8994 54.7998 19.1992c-11.1992 8.30078 -21.7998 20.4004 -30.0996 35.5c-6.7002 -17.6992 -15 -37.7998 -24.7002 -54.6992zM288.9 108.9c3.59961 2.39941 -2.2002 10.3994 -37.3008 7.7998c32.3008 -13.7998 37.3008 -7.7998 37.3008 -7.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-word\" unicode=\"&#xf1c2;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM268.1 192v0.200195h15.8008c7.7998 0 13.5 -7.2998 11.5996 -14.9004c-4.2998 -17 -13.7002 -54.0996 -34.5 -136c-1.2998 -5.39941 -6.09961 -9.09961 -11.5996 -9.09961h-24.7002\r\n-c-5.5 0 -10.2998 3.7998 -11.6006 9.09961c-5.2998 20.9004 -17.7998 71 -17.8994 71.4004l-2.90039 17.2998c-0.5 -5.2998 -1.5 -11.0996 -3 -17.2998l-17.8994 -71.4004c-1.30078 -5.39941 -6.10059 -9.09961 -11.6006 -9.09961h-25.2002\r\n-c-5.59961 0 -10.3994 3.7002 -11.6992 9.09961c-6.5 26.5 -25.2002 103.4 -33.2002 136c-1.7998 7.5 3.89941 14.7998 11.7002 14.7998h16.7998c5.7998 0 10.7002 -4.09961 11.7998 -9.69922c5 -25.7002 18.4004 -93.8008 19.0996 -99\r\n-c0.300781 -1.7002 0.400391 -3.10059 0.5 -4.2002c0.800781 7.5 0.400391 4.7002 24.8008 103.7c1.39941 5.2998 6.19922 9.09961 11.6992 9.09961h13.3008c5.59961 0 10.3994 -3.7998 11.6992 -9.2002c23.9004 -99.7002 22.8008 -94.3994 23.6006 -99.5\r\n-c0.299805 -1.7002 0.5 -3.09961 0.700195 -4.2998c0.599609 8.09961 0.399414 5.7998 21 103.5c1.09961 5.5 6 9.5 11.6992 9.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-excel\" unicode=\"&#xf1c3;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM260 224c9.2002 0 15 -10 10.2998 -18c-16 -27.5 -45.5996 -76.9004 -46.2998 -78l46.4004 -78c4.59961 -8 -1.10059 -18 -10.4004 -18h-28.7998c-4.40039 0 -8.5 2.40039 -10.6006 6.2998\r\n-c-22.6992 41.7998 -13.6992 27.5 -28.5996 57.7002c-5.59961 -12.7002 -6.90039 -17.7002 -28.5996 -57.7002c-2.10059 -3.89941 -6.10059 -6.2998 -10.5 -6.2998h-28.9004c-9.2998 0 -15.0996 10 -10.4004 18l46.3008 78l-46.3008 78c-4.59961 8 1.10059 18 10.4004 18\r\n-h28.9004c4.39941 0 8.5 -2.40039 10.5996 -6.2998c21.7002 -40.4004 14.7002 -28.6006 28.5996 -57.7002c6.40039 15.2998 10.6006 24.5996 28.6006 57.7002c2.09961 3.89941 6.09961 6.2998 10.5 6.2998h28.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-powerpoint\" unicode=\"&#xf1c4;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM120 44v168c0 6.59961 5.40039 12 12 12h69.2002c36.7002 0 62.7998 -27 62.7998 -66.2998c0 -74.2998 -68.7002 -66.5 -95.5 -66.5v-47.2002c0 -6.59961 -5.40039 -12 -12 -12h-24.5c-6.59961 0 -12 5.40039 -12 12z\r\n-M168.5 131.4h23c7.90039 0 13.9004 2.39941 18.0996 7.19922c8.5 9.80078 8.40039 28.5 0.100586 37.8008c-4.10059 4.59961 -9.90039 7 -17.4004 7h-23.8994v-52h0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-image\" unicode=\"&#xf1c5;\" horiz-adv-x=\"384\" \r\n-d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\r\n-h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM80 32v64l39.5 39.5c4.7002 4.7002 12.2998 4.7002 17 0l39.5 -39.5l87.5 87.5c4.7002 4.7002 12.2998 4.7002 17 0l23.5 -23.5v-128h-224zM128 272c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48\r\n-s21.5 48 48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-archive\" unicode=\"&#xf1c6;\" horiz-adv-x=\"384\" \r\n-d=\"M128.3 288h32v-32h-32v32zM192.3 384v-32h-32v32h32zM128.3 352h32v-32h-32v32zM192.3 320v-32h-32v32h32zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1\r\n-c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-48.2998v-16h-32v16h-79.7002v-416h288zM194.2 182.3l17.2998 -87.7002c6.40039 -32.3994 -18.4004 -62.5996 -51.5 -62.5996\r\n-c-33.2002 0 -58 30.4004 -51.4004 62.9004l19.7002 97.0996v32h32v-32h22.1006c5.7998 0 10.6992 -4.09961 11.7998 -9.7002zM160.3 57.9004c17.9004 0 32.4004 12.0996 32.4004 27c0 14.8994 -14.5 27 -32.4004 27c-17.8994 0 -32.3994 -12.1006 -32.3994 -27\r\n-c0 -14.9004 14.5 -27 32.3994 -27zM192.3 256v-32h-32v32h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-audio\" unicode=\"&#xf1c7;\" horiz-adv-x=\"384\" \r\n-d=\"M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320\r\n-l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM192 60.0244c0 -10.6914 -12.9258 -16.0459 -20.4854 -8.48535l-35.5146 35.9746h-28c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h28\r\n-l35.5146 36.9473c7.56055 7.56055 20.4854 2.20605 20.4854 -8.48535v-135.951zM233.201 107.154c9.05078 9.29688 9.05957 24.1328 0.000976562 33.4385c-22.1494 22.752 12.2344 56.2461 34.3945 33.4814c27.1982 -27.9404 27.2119 -72.4443 0.000976562 -100.401\r\n-c-21.793 -22.3857 -56.9463 10.3154 -34.3965 33.4814z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-video\" unicode=\"&#xf1c8;\" horiz-adv-x=\"384\" \r\n-d=\"M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320\r\n-l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM276.687 195.303c10.0049 10.0049 27.3135 2.99707 27.3135 -11.3135v-111.976c0 -14.2939 -17.2959 -21.332 -27.3135 -11.3135l-52.6865 52.6738v-37.374\r\n-c0 -11.0459 -8.9541 -20 -20 -20h-104c-11.0459 0 -20 8.9541 -20 20v104c0 11.0459 8.9541 20 20 20h104c11.0459 0 20 -8.9541 20 -20v-37.374z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-code\" unicode=\"&#xf1c9;\" horiz-adv-x=\"384\" \r\n-d=\"M149.9 98.9004c3.5 -3.30078 3.69922 -8.90039 0.399414 -12.4004l-17.3994 -18.5996c-1.60059 -1.80078 -4 -2.80078 -6.40039 -2.80078c-2.2002 0 -4.40039 0.900391 -6 2.40039l-57.7002 54.0996c-3.7002 3.40039 -3.7002 9.30078 0 12.8008l57.7002 54.0996\r\n-c3.40039 3.2998 9 3.2002 12.4004 -0.400391l17.3994 -18.5996l0.200195 -0.200195c3.2002 -3.59961 2.7998 -9.2002 -0.799805 -12.3994l-32.7998 -28.9004l32.7998 -28.9004zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288\r\n-c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288zM209.6 234l24.4004 -7\r\n-c4.7002 -1.2998 7.40039 -6.2002 6 -10.9004l-54.7002 -188.199c-1.2998 -4.60059 -6.2002 -7.40039 -10.8994 -6l-24.4004 7.09961c-4.7002 1.2998 -7.40039 6.2002 -6 10.9004l54.7002 188.1c1.39941 4.7002 6.2002 7.40039 10.8994 6zM234.1 157.1\r\n-c-3.5 3.30078 -3.69922 8.90039 -0.399414 12.4004l17.3994 18.5996c3.30078 3.60059 8.90039 3.7002 12.4004 0.400391l57.7002 -54.0996c3.7002 -3.40039 3.7002 -9.30078 0 -12.8008l-57.7002 -54.0996c-3.5 -3.2998 -9.09961 -3.09961 -12.4004 0.400391\r\n-l-17.3994 18.5996l-0.200195 0.200195c-3.2002 3.59961 -2.7998 9.2002 0.799805 12.3994l32.7998 28.9004l-32.7998 28.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"life-ring\" unicode=\"&#xf1cd;\" \r\n-d=\"M256 -56c-136.967 0 -248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248s-111.033 -248 -248 -248zM152.602 20.7197c63.2178 -38.3184 143.579 -38.3184 206.797 0l-53.4111 53.4111c-31.8467 -13.5215 -68.168 -13.5059 -99.9746 0zM336 192\r\n-c0 44.1123 -35.8877 80 -80 80s-80 -35.8877 -80 -80s35.8877 -80 80 -80s80 35.8877 80 80zM427.28 88.6016c38.3184 63.2178 38.3184 143.579 0 206.797l-53.4111 -53.4111c13.5215 -31.8467 13.5049 -68.168 0 -99.9746zM359.397 363.28\r\n-c-63.2168 38.3184 -143.578 38.3184 -206.796 0l53.4111 -53.4111c31.8457 13.5215 68.167 13.5049 99.9736 0zM84.7197 295.398c-38.3184 -63.2178 -38.3184 -143.579 0 -206.797l53.4111 53.4111c-13.5215 31.8467 -13.5059 68.168 0 99.9746z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paper-plane\" unicode=\"&#xf1d8;\" \r\n-d=\"M440 441.5c34.5996 19.9004 77.5996 -8.7998 71.5 -48.9004l-59.4004 -387.199c-2.2998 -14.5 -11.0996 -27.3008 -23.8994 -34.5c-7.2998 -4.10059 -15.4004 -6.2002 -23.6006 -6.2002c-6.19922 0 -12.3994 1.2002 -18.2998 3.59961l-111.899 46.2002l-43.8008 -59.0996\r\n-c-27.3994 -36.9004 -86.5996 -17.8008 -86.5996 28.5996v84.4004l-114.3 47.2998c-36.7998 15.0996 -40.1006 66 -5.7002 85.8994zM192 -16l36.5996 49.5l-36.5996 15.0996v-64.5996zM404.6 12.7002l59.4004 387.3l-416 -240l107.8 -44.5996l211.5 184.3\r\n-c14.2002 12.2998 34.4004 -5.7002 23.7002 -21.2002l-140.2 -202.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"futbol\" unicode=\"&#xf1e3;\" horiz-adv-x=\"496\" \r\n-d=\"M483.8 268.6c42.2998 -130.199 -29 -270.1 -159.2 -312.399c-25.5 -8.2998 -51.2998 -12.2002 -76.6992 -12.2002c-104.5 0 -201.7 66.5996 -235.7 171.4c-42.2998 130.199 29 270.1 159.2 312.399c25.5 8.2998 51.2998 12.2002 76.6992 12.2002\r\n-c104.5 0 201.7 -66.5996 235.7 -171.4zM409.3 74.9004c6.10059 8.39941 12.1006 16.8994 16.7998 26.1992c14.3008 28.1006 21.5 58.5 21.7002 89.2002l-38.8994 36.4004l-71.1006 -22.1006l-24.3994 -75.1992l43.6992 -60.9004zM409.3 310.3\r\n-c-24.5 33.4004 -58.7002 58.4004 -97.8994 71.4004l-47.4004 -26.2002v-73.7998l64.2002 -46.5l70.7002 22zM184.9 381.6c-39.9004 -13.2998 -73.5 -38.5 -97.8008 -71.8994l10.1006 -52.5l70.5996 -22l64.2002 46.5v73.7998zM139 68.5l43.5 61.7002l-24.2998 74.2998\r\n-l-71.1006 22.2002l-39 -36.4004c0.5 -55.7002 23.4004 -95.2002 37.8008 -115.3zM187.2 1.5c64.0996 -20.4004 115.5 -1.7998 121.7 0l22.3994 48.0996l-44.2998 61.7002h-78.5996l-43.6006 -61.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"newspaper\" unicode=\"&#xf1ea;\" horiz-adv-x=\"576\" \r\n-d=\"M552 384c13.2549 0 24 -10.7451 24 -24v-336c0 -13.2549 -10.7451 -24 -24 -24h-496c-30.9277 0 -56 25.0723 -56 56v272c0 13.2549 10.7451 24 24 24h42.752c6.60547 18.623 24.3896 32 45.248 32h440zM48 56c0 -4.41113 3.58887 -8 8 -8s8 3.58887 8 8v248h-16v-248z\r\n-M528 48v288h-416v-280c0 -2.7168 -0.204102 -5.38574 -0.578125 -8h416.578zM172 168c-6.62695 0 -12 5.37305 -12 12v96c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-96c0 -6.62695 -5.37305 -12 -12 -12h-136zM200 248v-40h80v40h-80zM160 108v24\r\n-c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-136c-6.62695 0 -12 5.37305 -12 12zM352 108v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104\r\n-c-6.62695 0 -12 5.37305 -12 12zM352 252v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12zM352 180v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell-slash\" unicode=\"&#xf1f6;\" horiz-adv-x=\"640\" \r\n-d=\"M633.99 -23.0195c6.91016 -5.52051 8.01953 -15.5908 2.5 -22.4902l-10 -12.4902c-5.53027 -6.88965 -15.5898 -8.00977 -22.4902 -2.49023l-598 467.51c-6.90039 5.52051 -8.01953 15.5908 -2.49023 22.4902l10 12.4902\r\n-c5.52051 6.90039 15.5898 8.00977 22.4902 2.49023zM163.53 80h182.84l61.3994 -48h-279.659c-19.1201 0 -31.9902 15.5996 -32.1006 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c18.3701 19.7402 51.5703 49.6904 54.8398 140.42l45.4697 -35.5498\r\n-c-6.91992 -54.7803 -24.6895 -88.5498 -41.3994 -110.58zM320 352c-23.3496 0 -45 -7.17969 -62.9404 -19.4004l-38.1699 29.8408c19.6807 15.7793 43.1104 27.3096 69.1299 32.7197v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398\r\n-c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -41.3604 6.03027 -70.7197 14.3398 -92.8496l-59.5293 46.54c-1.63086 13.96 -2.77051 28.8896 -2.79004 45.7295c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112zM320 -64\r\n-c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xf1f9;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z\r\n-M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.13379 -1.96289 3.86523 -5.9082 3.86523 -8.80762\r\n-c0 -1.95508 -0.864258 -4.87402 -1.92969 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924\r\n-c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.28613 -1.74512 2.33008 -4.91992 2.33008 -7.08789c0 -2.72363 -1.56055 -6.5 -3.48242 -8.42969z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"closed-captioning\" unicode=\"&#xf20a;\" \r\n-d=\"M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM458 48c3.2998 0 6 2.7002 6 6v276c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-276c0 -3.2998 2.7002 -6 6 -6h404z\r\n-M246.9 133.7c1.69922 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.6006 -56.7998 -172.801 -32.0996 -172.801 67.9004c0 97.2998 121.7 119.5 172.5 70.0996c2.10059 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.89941 -3.09961 -6.19922 -4 -9.09961 -1.7002\r\n-c-40.7998 32 -94.5996 14.9004 -94.5996 -31.1992c0 -48 51 -70.5 92.1992 -32.6006c2.80078 2.5 7.10059 2.10059 9.2002 -0.899414zM437.3 133.7c1.7002 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.5996 -56.9004 -172.8 -32.0996 -172.8 67.9004\r\n-c0 97.2998 121.7 119.5 172.5 70.0996c2.09961 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.90039 -3.09961 -6.2002 -4 -9.09961 -1.7002c-40.8008 32 -94.6006 14.9004 -94.6006 -31.1992c0 -48 51 -70.5 92.2002 -32.6006c2.7998 2.5 7.09961 2.10059 9.2002 -0.899414z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"object-group\" unicode=\"&#xf247;\" \r\n-d=\"M500 320h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v256h-12\r\n-c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM448 384v-32h32v32h-32zM32 384v-32h32v32h-32zM64 0v32\r\n-h-32v-32h32zM480 0v32h-32v-32h32zM440 64v256h-12c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h12zM404 256c6.62695 0 12 -5.37207 12 -12v-168\r\n-c0 -6.62793 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37207 -12 12v52h-84c-6.62695 0 -12 5.37207 -12 12v168c0 6.62793 5.37305 12 12 12h200c6.62695 0 12 -5.37207 12 -12v-52h84zM136 280v-112h144v112h-144zM376 104v112h-56v-76\r\n-c0 -6.62793 -5.37305 -12 -12 -12h-76v-24h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"object-ungroup\" unicode=\"&#xf248;\" horiz-adv-x=\"576\" \r\n-d=\"M564 224h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v24h-88v-12\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h72\r\n-c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-12v-24h88v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM352 384v-32h32v32h-32zM352 128v-32h32v32h-32zM64 96v32h-32v-32h32zM64 352v32\r\n-h-32v-32h32zM96 136h224v12c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-12zM224 0v32h-32v-32h32zM504 64v160h-12c-6.62695 0 -12 5.37305 -12 12v12\r\n-h-88v-88h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-88v-24h12c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h12zM544 0v32h-32v-32h32zM544 256v32h-32v-32h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sticky-note\" unicode=\"&#xf249;\" horiz-adv-x=\"448\" \r\n-d=\"M448 99.8936c0 -10.9746 -6.29883 -26.1797 -14.0586 -33.9404l-83.8828 -83.8818c-7.75977 -7.76074 -22.9658 -14.0596 -33.9404 -14.0596h-268.118c-26.5098 0 -48 21.4902 -48 48v351.988c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-268.106z\r\n-M320 19.8936l76.1182 76.1182h-76.1182v-76.1182zM400 368h-352v-351.988h224v104c0 13.2549 10.7451 24 24 24h104v223.988z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clone\" unicode=\"&#xf24d;\" \r\n-d=\"M464 448c26.5098 0 48 -21.4902 48 -48v-320c0 -26.5098 -21.4902 -48 -48 -48h-48v-48c0 -26.5098 -21.4902 -48 -48 -48h-320c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h48v48c0 26.5098 21.4902 48 48 48h320zM362 -16c3.31152 0 6 2.68848 6 6\r\n-v42h-224c-26.5098 0 -48 21.4902 -48 48v224h-42c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308zM458 80c3.31152 0 6 2.68848 6 6v308c0 3.31152 -2.68848 6 -6 6h-308c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hourglass\" unicode=\"&#xf254;\" horiz-adv-x=\"384\" \r\n-d=\"M368 400c0 -80.0996 -31.8984 -165.619 -97.1797 -208c64.9912 -42.1934 97.1797 -127.436 97.1797 -208h4c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h4\r\n-c0 80.0996 31.8994 165.619 97.1797 208c-64.9912 42.1934 -97.1797 127.436 -97.1797 208h-4c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-4zM64 400\r\n-c0 -101.621 57.3066 -184 128 -184s128 82.3799 128 184h-256zM320 -16c0 101.62 -57.3076 184 -128 184s-128 -82.3799 -128 -184h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-rock\" unicode=\"&#xf255;\" \r\n-d=\"M408.864 368.948c48.8213 20.751 103.136 -15.0723 103.136 -67.9111v-114.443c0 -15.3955 -3.08887 -30.3906 -9.18262 -44.5674l-42.835 -99.6562c-4.99707 -11.625 -3.98242 -18.8574 -3.98242 -42.3701c0 -17.6729 -14.3271 -32 -32 -32h-252\r\n-c-17.6729 0 -32 14.3271 -32 32c0 27.3301 1.1416 29.2012 -3.11035 32.9033l-97.71 85.0811c-24.8994 21.6797 -39.1797 52.8926 -39.1797 85.6338v56.9531c0 47.4277 44.8457 82.0215 91.0459 71.1807c1.96094 55.751 63.5107 87.8262 110.671 60.8057\r\n-c29.1895 31.0713 78.8604 31.4473 108.334 -0.0214844c32.7051 18.6846 76.4121 10.3096 98.8135 -23.5879zM464 186.594v114.445c0 34.29 -52 33.8232 -52 0.676758c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v26.751\r\n-c0 34.457 -52 33.707 -52 0.676758v-27.4287c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v40.4658c0 34.3525 -52 33.8115 -52 0.677734v-41.1436c0 -8.83594 -7.16406 -16 -16 -16h-7c-8.83594 0 -16 7.16406 -16 16v26.751\r\n-c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83203 -7.16797 -16 -16 -16c-3.30664 0 -8.01367 1.7627 -10.5068 3.93359l-7 6.09473c-3.03223 2.64062 -5.49316 8.04688 -5.49316 12.0674v0v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531\r\n-c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c2.91602 6.75391 5.28223 18.207 5.28223 25.5635v0.0488281z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-paper\" unicode=\"&#xf256;\" horiz-adv-x=\"448\" \r\n-d=\"M372.57 335.359c39.9062 5.63281 75.4297 -25.7393 75.4297 -66.3594v-131.564c-0.00195312 -12.7666 -2.33008 -33.2246 -5.19531 -45.666l-30.1836 -130.958c-3.34668 -14.5234 -16.2783 -24.8125 -31.1816 -24.8125h-222.897\r\n-c-9.10352 0 -20.7793 6.01758 -26.0615 13.4316l-119.97 168.415c-21.2441 29.8203 -14.8047 71.3574 14.5498 93.1533c18.7754 13.9395 42.1309 16.2979 62.083 8.87109v126.13c0 44.0547 41.125 75.5439 82.4053 64.9834c23.8926 48.1963 92.3535 50.2471 117.982 0.74707\r\n-c42.5186 11.1445 83.0391 -21.9346 83.0391 -65.5469v-10.8242zM399.997 137.437l-0.00195312 131.563c0 24.9492 -36.5703 25.5508 -36.5703 -0.691406v-76.3086c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v154.184\r\n-c0 25.501 -36.5703 26.3633 -36.5703 0.691406v-154.875c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v188.309c0 25.501 -36.5703 26.3545 -36.5703 0.691406v-189c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16\r\n-v153.309c0 25.501 -36.5713 26.3359 -36.5713 0.691406v-206.494c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832l-27.1279 38.0791c-14.3711 20.1709 -43.833 -2.33496 -29.3945 -22.6045l115.196 -161.697h201.92l27.3252 118.551\r\n-c2.63086 11.417 3.96484 23.1553 3.96484 34.8857z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-scissors\" unicode=\"&#xf257;\" \r\n-d=\"M256 -32c-44.9561 0 -77.3428 43.2627 -64.0244 85.8535c-21.6484 13.71 -34.0156 38.7617 -30.3408 65.0068h-87.6348c-40.8037 0 -74 32.8105 -74 73.1406c0 40.3291 33.1963 73.1396 74 73.1396l94 -9.14062l-78.8496 18.6787\r\n-c-38.3076 14.7422 -57.04 57.4707 -41.9424 95.1123c15.0303 37.4736 57.7549 55.7803 95.6416 41.2012l144.929 -55.7568c24.9551 30.5566 57.8086 43.9932 92.2178 24.7324l97.999 -54.8525c20.9746 -11.7393 34.0049 -33.8457 34.0049 -57.6904v-205.702\r\n-c0 -30.7422 -21.4404 -57.5576 -51.7979 -64.5537l-118.999 -27.4268c-4.97168 -1.14648 -10.0889 -1.72949 -15.2031 -1.72949zM256 16.0127l70 -0.000976562c1.23633 0 3.21777 0.225586 4.42285 0.501953l119.001 27.4277\r\n-c8.58203 1.97754 14.5762 9.29102 14.5762 17.7812v205.701c0 6.4873 -3.62109 12.542 -9.44922 15.8047l-98 54.8545c-8.13965 4.55566 -18.668 2.61914 -24.4873 -4.50781l-21.7646 -26.6475c-2.65039 -3.24512 -8.20215 -5.87891 -12.3926 -5.87891\r\n-c-1.64062 0 -4.21484 0.477539 -5.74609 1.06738l-166.549 64.0908c-32.6543 12.5664 -50.7744 -34.5771 -19.2227 -46.7168l155.357 -59.7852c5.66016 -2.17773 10.2539 -8.86816 10.2539 -14.9326v0v-11.6328c0 -8.83691 -7.16309 -16 -16 -16h-182\r\n-c-34.375 0 -34.4297 -50.2803 0 -50.2803h182c8.83691 0 16 -7.16309 16 -16v-6.85645c0 -8.83691 -7.16309 -16 -16 -16h-28c-25.1221 0 -25.1592 -36.5674 0 -36.5674h28c8.83691 0 16 -7.16211 16 -16v-6.85547c0 -8.83691 -7.16309 -16 -16 -16\r\n-c-25.1201 0 -25.1602 -36.5674 0 -36.5674z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-lizard\" unicode=\"&#xf258;\" horiz-adv-x=\"576\" \r\n-d=\"M556.686 157.458c12.6357 -19.4863 19.3145 -42.0615 19.3145 -65.2871v-124.171h-224v71.582l-99.751 38.7871c-2.7832 1.08203 -5.70996 1.63086 -8.69727 1.63086h-131.552c-30.8789 0 -56 25.1211 -56 56c0 48.5234 39.4766 88 88 88h113.709l18.333 48h-196.042\r\n-c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709v0.0478516c0 11.7461 -5.19141 29.2734 -11.5879 39.124l-146.358 225.715c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917\r\n-c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8\r\n-h131.552h0.0517578c7.44141 0 19.1074 -2.19238 26.041 -4.89355l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-spock\" unicode=\"&#xf259;\" \r\n-d=\"M21.0957 66.21c-26.9688 25.3818 -28.2471 67.7461 -2.87109 94.707c24.1982 25.7139 64.2881 28.2373 91.4824 5.72168l-31.04 136.509c-9.38379 41.2803 21.4336 81.0127 64.0713 81.8438c1.74414 28.9062 22.2656 54.4912 51.8818 61.2949\r\n-c36.001 8.27539 72.0176 -14.2266 80.3037 -50.2959l21.6748 -131.99l16.9014 105.25c9.02344 36.0947 45.4473 57.7021 81.25 48.75c27.3066 -6.82715 45.7061 -29.1357 49.8496 -53.9922c43.2285 0.212891 75.6436 -40.1133 65.5439 -82.5244l-31.7295 -133.41\r\n-c-0.938477 -3.94141 -1.41406 -7.99414 -1.41406 -12.0449v-36.8389v-0.00683594c0 -9.29102 -2.14355 -24.0596 -4.78516 -32.9668l-31.8145 -107.312c-4.02734 -13.585 -16.5107 -22.9043 -30.6807 -22.9043h-237.6c-7.00586 0 -16.8311 3.89648 -21.9316 8.69824z\r\n-M53.1641 128.021c-7.17969 -7.62891 -6.81543 -19.6777 0.813477 -26.8574l124.487 -117.164h219.311l28.4199 95.8613c1.86133 6.27637 2.80469 12.7793 2.80469 19.3281v36.8389c0.000976562 6.48047 1.21973 16.8574 2.71973 23.1621l31.7549 133.407\r\n-c5.83105 24.4893 -31.1445 33.25 -36.9658 8.80273l-26.9229 -113.105c-1.61523 -6.78711 -8.58887 -12.2949 -15.5645 -12.2949h-9.69434c-10.4072 0 -18.043 9.79199 -15.5225 19.8799l38.127 152.512c6.09766 24.376 -30.7607 33.6396 -36.8643 9.21777l-42.3721 -169.49\r\n-c-1.67285 -6.68945 -8.62695 -12.1191 -15.5225 -12.1191h-13.2168v0c-7.0332 0 -14.0195 5.5625 -15.5938 12.417l-45.2207 196.828c-5.64453 24.5684 -42.6572 15.9609 -37.0342 -8.50781l41.6191 -181.153c2.30078 -10.0156 -5.31738 -19.583 -15.5938 -19.583h-8.60352\r\n-h-0.000976562c-7.0498 0 -14.04 5.5791 -15.6025 12.4541l-30.3984 133.757c-5.55273 24.4395 -42.6504 16.1963 -37.0547 -8.4209l34.1299 -150.172c0.263672 -1.16309 0.397461 -2.35352 0.397461 -3.5459v-69.4795c0 -13.9941 -16.7754 -21.2432 -26.9658 -11.6523\r\n-l-53.0117 49.8936c-7.61523 7.16699 -19.6377 6.85938 -26.8564 -0.8125z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-pointer\" unicode=\"&#xf25a;\" horiz-adv-x=\"448\" \r\n-d=\"M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -4.25 -0.775391 -11.0615 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286c-21.2588 0 -41.3682 10.4102 -53.791 27.8457\r\n-l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289\r\n-c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001\r\n-c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938\r\n-c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832z\r\n-M176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6\r\n-c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-peace\" unicode=\"&#xf25b;\" horiz-adv-x=\"448\" \r\n-d=\"M362.146 256.024c42.5908 13.3184 85.8535 -19.0684 85.8535 -64.0244l-0.0117188 -70.001c-0.000976562 -4.25 -0.775391 -11.0615 -1.72949 -15.2031l-27.4268 -118.999c-6.99707 -30.3564 -33.8105 -51.7969 -64.5547 -51.7969h-205.702\r\n-c-23.8447 0 -45.9502 13.0303 -57.6904 34.0059l-54.8525 97.999c-19.2607 34.4092 -5.82422 67.2617 24.7324 92.2178l-55.7568 144.928c-14.5791 37.8867 3.72754 80.6113 41.2012 95.6416c37.6406 15.0977 80.3691 -3.63477 95.1123 -41.9424l18.6787 -78.8496\r\n-l-9.14062 94c0 40.8037 32.8096 74 73.1396 74s73.1406 -33.1963 73.1406 -74v-87.6348c26.2451 3.6748 51.2959 -8.69238 65.0068 -30.3408zM399.987 122l-0.000976562 70c0 25.1602 -36.5674 25.1201 -36.5674 0c0 -8.83691 -7.16309 -16 -16 -16h-6.85547\r\n-c-8.83789 0 -16 7.16309 -16 16v28c0 25.1592 -36.5674 25.1221 -36.5674 0v-28c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v182c0 34.4297 -50.2803 34.375 -50.2803 0v-182c0 -8.83691 -7.16309 -16 -16 -16h-11.6328v0\r\n-c-6.06445 0 -12.7549 4.59375 -14.9326 10.2539l-59.7842 155.357c-12.1396 31.5518 -59.2842 13.4326 -46.7168 -19.2227l64.0898 -166.549c0.589844 -1.53125 1.06738 -4.10547 1.06738 -5.74609c0 -4.19043 -2.63379 -9.74219 -5.87891 -12.3926l-26.6475 -21.7646\r\n-c-7.12695 -5.81934 -9.06445 -16.3467 -4.50781 -24.4873l54.8535 -98c3.26367 -5.82812 9.31934 -9.44922 15.8057 -9.44922h205.701c8.49121 0 15.8037 5.99414 17.7812 14.5762l27.4277 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xf25d;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z\r\n-M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096h-0.0126953c-3.97559 0 -8.71582 2.84961 -10.5801 6.36035l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304\r\n-c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094c20.9131 0 32.4307 11.5186 32.4316 32.4316\r\n-c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-plus\" unicode=\"&#xf271;\" horiz-adv-x=\"448\" \r\n-d=\"M336 156v-24c0 -6.59961 -5.40039 -12 -12 -12h-76v-76c0 -6.59961 -5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12v76h-76c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h76v76c0 6.59961 5.40039 12 12 12h24c6.59961 0 12 -5.40039 12 -12\r\n-v-76h76c6.59961 0 12 -5.40039 12 -12zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40\r\n-c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-minus\" unicode=\"&#xf272;\" horiz-adv-x=\"448\" \r\n-d=\"M124 120c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h200c6.59961 0 12 -5.40039 12 -12v-24c0 -6.59961 -5.40039 -12 -12 -12h-200zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52\r\n-c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-times\" unicode=\"&#xf273;\" horiz-adv-x=\"448\" \r\n-d=\"M311.7 73.2998l-17 -17c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-53.7002 53.7998l-53.7002 -53.6992c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-17 17c-4.7002 4.69922 -4.7002 12.2998 0 17l53.7002 53.6992l-53.7002 53.7002c-4.7002 4.7002 -4.7002 12.2998 0 17\r\n-l17 17c4.7002 4.7002 12.2998 4.7002 17 0l53.7002 -53.7002l53.7002 53.7002c4.7002 4.7002 12.2998 4.7002 17 0l17 -17c4.7002 -4.7002 4.7002 -12.2998 0 -17l-53.7998 -53.7998l53.6992 -53.7002c4.80078 -4.7002 4.80078 -12.2998 0.100586 -17zM448 336v-352\r\n-c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10\r\n-v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-check\" unicode=\"&#xf274;\" horiz-adv-x=\"448\" \r\n-d=\"M400 384c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h48v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h128v52c0 6.62695 5.37305 12 12 12h40\r\n-c6.62695 0 12 -5.37305 12 -12v-52h48zM394 -16c3.31152 0 6 2.68848 6 6v298h-352v-298c0 -3.31152 2.68848 -6 6 -6h340zM341.151 184.65l-142.31 -141.169c-4.70508 -4.66699 -12.3027 -4.6377 -16.9707 0.0673828l-75.0908 75.6992\r\n-c-4.66699 4.70508 -4.6377 12.3027 0.0673828 16.9707l22.7197 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l44.1035 -44.4609l111.072 110.182c4.70508 4.66699 12.3027 4.63672 16.9707 -0.0683594l22.5361 -22.7178\r\n-c4.66699 -4.70508 4.63672 -12.3027 -0.0683594 -16.9697z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map\" unicode=\"&#xf279;\" horiz-adv-x=\"576\" \r\n-d=\"M560.02 416c8.4502 0 15.9805 -6.83008 15.9805 -16.0195v-346.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-151.83 -52.8105c-5.32617 -1.7334 -14.1953 -3.13965 -19.7969 -3.13965c-5.7373 0 -14.8105 1.47363 -20.2529 3.29004l-172 60.71l-170.05 -62.8398\r\n-c-1.99023 -0.790039 -4 -1.16016 -5.95996 -1.16016c-8.45996 0 -15.9902 6.83008 -15.9902 16.0195v346.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l151.83 52.8105c6.43945 2.08984 13.1201 3.13965 19.8096 3.13965\r\n-c5.73242 -0.00195312 14.8008 -1.47168 20.2402 -3.28027l172 -60.7197h0.00976562l170.05 62.8398c1.98047 0.790039 4 1.16016 5.95996 1.16016zM224 357.58v-285.97l128 -45.1904v285.97zM48 29.9502l127.36 47.0801l0.639648 0.229492v286.2l-128 -44.5303v-288.979z\r\n-M528 65.0801v288.97l-127.36 -47.0693l-0.639648 -0.240234v-286.19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-alt\" unicode=\"&#xf27a;\" \r\n-d=\"M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.5996c-2.19922 -1.7002 -4.69922 -2.40039 -7.09961 -2.40039c-6.2002 0 -12 4.90039 -12 12v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z\r\n-M464 96v288c0 8.7998 -7.2002 16 -16 16h-384c-8.7998 0 -16 -7.2002 -16 -16v-288c0 -8.7998 7.2002 -16 16 -16h144v-60l67.2002 50.4004l12.7998 9.59961h160c8.7998 0 16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pause-circle\" unicode=\"&#xf28b;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48\r\n-c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16zM240 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stop-circle\" unicode=\"&#xf28d;\" \r\n-d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-160\r\n-c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.2002 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"handshake\" unicode=\"&#xf2b5;\" horiz-adv-x=\"640\" \r\n-d=\"M519.2 320.1h120.8v-255.699h-64c-17.5 0 -31.7998 14.1992 -31.9004 31.6992h-57.8994c-1.7998 -8.19922 -5.2998 -16.0996 -10.9004 -23l-26.2002 -32.2998c-15.7998 -19.3994 -41.8994 -25.5 -64 -16.7998c-13.5 -16.5996 -30.5996 -24 -48.7998 -24\r\n-c-15.0996 0 -28.5996 5.09961 -41.0996 15.9004c-31.7998 -21.9004 -74.7002 -21.3008 -105.601 3.7998l-84.5996 76.3994h-9.09961c-0.100586 -17.5 -14.3008 -31.6992 -31.9004 -31.6992h-64v255.699h118l47.5996 47.6006c10.5 10.3994 24.8008 16.2998 39.6006 16.2998\r\n-h226.8v0c12.7812 0 30.5225 -7.30273 39.5996 -16.2998zM48 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM438 103.3c2.7002 3.40039 2.2002 8.5 -1.2002 11.2998l-108.2 87.8008l-8.19922 -7.5\r\n-c-40.3008 -36.8008 -86.7002 -11.8008 -101.5 4.39941c-26.7002 29 -25 74.4004 4.39941 101.3l38.7002 35.5h-56.7002c-2 -0.799805 -3.7002 -1.5 -5.7002 -2.2998l-61.6992 -61.5996h-41.9004v-128.101h27.7002l97.2998 -88\r\n-c16.0996 -13.0996 41.4004 -10.5 55.2998 6.60059l15.6006 19.2002l36.7998 -31.5c3 -2.40039 12 -4.90039 18 2.39941l30 36.5l23.8994 -19.3994c3.5 -2.80078 8.5 -2.2002 11.3008 1.19922zM544 144.1v128h-44.7002l-61.7002 61.6006\r\n-c-1.39941 1.5 -3.39941 2.2998 -5.5 2.2998l-83.6992 -0.200195c-10 0 -19.6006 -3.7002 -27 -10.5l-65.6006 -60.0996c-9.7002 -8.7998 -10.5 -24 -1.2002 -33.9004c8.90039 -9.39941 25.1006 -8.7002 34.6006 0l55.2002 50.6006c6.5 5.89941 16.5996 5.5 22.5996 -1\r\n-l10.9004 -11.7002c6 -6.5 5.5 -16.6006 -1 -22.6006l-12.5 -11.3994l102.699 -83.4004c2.80078 -2.2998 5.40039 -4.89941 7.7002 -7.7002h69.2002zM592 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope-open\" unicode=\"&#xf2b6;\" \r\n-d=\"M494.586 283.484c9.6123 -7.94824 17.4141 -24.5205 17.4141 -36.9932v-262.491c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v262.515c0 12.5166 7.84668 29.1279 17.5146 37.0771c4.08008 3.35449 110.688 89.0996 135.15 108.549\r\n-c22.6992 18.1426 60.1299 55.8594 103.335 55.8594c43.4365 0 81.2314 -38.1914 103.335 -55.8594c23.5283 -18.707 130.554 -104.773 135.251 -108.656zM464 -10v253.632v0.00488281c0 1.5791 -0.996094 3.66602 -2.22363 4.6582\r\n-c-15.8633 12.8232 -108.793 87.5752 -132.366 106.316c-17.5527 14.0195 -49.7168 45.3887 -73.4102 45.3887c-23.6016 0 -55.2451 -30.8799 -73.4102 -45.3887c-23.5713 -18.7393 -116.494 -93.4795 -132.364 -106.293\r\n-c-1.40918 -1.13965 -2.22559 -2.85254 -2.22559 -4.66504v-253.653c0 -3.31152 2.68848 -6 6 -6h404c3.31152 0 6 2.68848 6 6zM432.009 177.704c4.24902 -5.15918 3.46484 -12.7949 -1.74512 -16.9814c-28.9746 -23.2822 -59.2734 -47.5967 -70.9287 -56.8623\r\n-c-22.6992 -18.1436 -60.1299 -55.8604 -103.335 -55.8604c-43.4521 0 -81.2871 38.2373 -103.335 55.8604c-11.2793 8.9668 -41.7441 33.4131 -70.9268 56.8643c-5.20996 4.1875 -5.99316 11.8223 -1.74512 16.9814l15.2578 18.5283\r\n-c4.17773 5.07227 11.6572 5.84277 16.7793 1.72559c28.6182 -23.001 58.5654 -47.0352 70.5596 -56.5713c17.5527 -14.0195 49.7168 -45.3887 73.4102 -45.3887c23.6016 0 55.2461 30.8799 73.4102 45.3887c11.9941 9.53516 41.9434 33.5703 70.5625 56.5684\r\n-c5.12207 4.11621 12.6016 3.3457 16.7783 -1.72656z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"address-book\" unicode=\"&#xf2b9;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48\r\n-h320c26.5 0 48 -21.5 48 -48v-48h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM368 -16v416h-320v-416h320zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM118.4 64\r\n-c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002\r\n-h-179.199z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"address-card\" unicode=\"&#xf2bb;\" horiz-adv-x=\"576\" \r\n-d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v352h-480v-352h480zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z\r\n-M118.4 64c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002\r\n-c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199zM360 128c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 192c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112\r\n-c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 256c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-circle\" unicode=\"&#xf2bd;\" horiz-adv-x=\"496\" \r\n-d=\"M248 344c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96zM248 200c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8\r\n-c49.7002 0 95.0996 18.2998 130.1 48.4004c-14.8994 23 -40.3994 38.5 -69.5996 39.5c-20.7998 -6.5 -40.5996 -9.60059 -60.5 -9.60059s-39.7002 3.2002 -60.5 9.60059c-29.2002 -0.900391 -54.7002 -16.5 -69.5996 -39.5c35 -30.1006 80.3994 -48.4004 130.1 -48.4004z\r\n-M410.7 76.0996c23.3994 32.7002 37.2998 72.7002 37.2998 115.9c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -43.2002 13.9004 -83.2002 37.2998 -115.9c24.5 31.4004 62.2002 51.9004 105.101 51.9004c10.1992 0 26.0996 -9.59961 57.5996 -9.59961\r\n-c31.5996 0 47.4004 9.59961 57.5996 9.59961c43 0 80.7002 -20.5 105.101 -51.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"id-badge\" unicode=\"&#xf2c1;\" horiz-adv-x=\"384\" \r\n-d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM336 -16v416h-288v-416h288zM144 336c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16\r\n-h-96zM192 160c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM102.4 32c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8\r\n-c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"id-card\" unicode=\"&#xf2c2;\" horiz-adv-x=\"576\" \r\n-d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v288h-480v-288h32.7998c-1 4.5 -0.799805 -3.59961 -0.799805 22.4004c0 31.7998 30.0996 57.5996 67.2002 57.5996\r\n-c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996c0 -26 0.0996094 -17.9004 -0.799805 -22.4004h224.8zM360 96c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16\r\n-c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 160c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 224c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112\r\n-c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM192 128c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-maximize\" unicode=\"&#xf2d0;\" \r\n-d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v234h-416v-234c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-minimize\" unicode=\"&#xf2d1;\" \r\n-d=\"M480 -32h-448c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h448c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-restore\" unicode=\"&#xf2d2;\" \r\n-d=\"M464 448c26.5 0 48 -21.5 48 -48v-320c0 -26.5 -21.5 -48 -48 -48h-48v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h48v48c0 26.5 21.5 48 48 48h320zM368 -16v208h-320v-208h320zM464 80v320h-320v-48h224\r\n-c26.5 0 48 -21.5 48 -48v-224h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snowflake\" unicode=\"&#xf2dc;\" horiz-adv-x=\"448\" \r\n-d=\"M440.1 92.7998c7.60059 -4.39941 10.1006 -14.2002 5.5 -21.7002l-7.89941 -13.8994c-4.40039 -7.7002 -14 -10.2998 -21.5 -5.90039l-39.2002 23l9.09961 -34.7002c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.5996l-15.2002 -4.09961\r\n-c-8.39941 -2.30078 -17.0996 2.7998 -19.2998 11.2998l-21.2998 81l-71.9004 42.2002v-84.5l58.2998 -59.3008c6.10059 -6.19922 6.10059 -16.3994 0 -22.5996l-11.0996 -11.2998c-6.09961 -6.2002 -16.0996 -6.2002 -22.2002 0l-24.8994 25.3994v-46.0996\r\n-c0 -8.7998 -7 -16 -15.7002 -16h-15.7002c-8.7002 0 -15.7002 7.2002 -15.7002 16v45.9004l-24.8994 -25.4004c-6.10059 -6.2002 -16.1006 -6.2002 -22.2002 0l-11.1006 11.2998c-6.09961 6.2002 -6.09961 16.4004 0 22.6006l58.3008 59.2998v84.5l-71.9004 -42.2002\r\n-l-21.2998 -81c-2.2998 -8.5 -10.9004 -13.5996 -19.2998 -11.2998l-15.2002 4.09961c-8.40039 2.2998 -13.2998 11.1006 -11.1006 19.6006l9.10059 34.6992l-39.2002 -23c-7.5 -4.39941 -17.2002 -1.7998 -21.5 5.90039l-7.90039 13.9004\r\n-c-4.2998 7.69922 -1.69922 17.5 5.80078 21.8994l39.1992 23l-34.0996 9.2998c-8.40039 2.30078 -13.2998 11.1006 -11.0996 19.6006l4.09961 15.5c2.2998 8.5 10.9004 13.5996 19.2998 11.2998l79.7002 -21.7002l71.9004 42.2002l-71.9004 42.2002l-79.7002 -21.7002\r\n-c-8.39941 -2.2998 -17.0996 2.7998 -19.2998 11.2998l-4.09961 15.5c-2.30078 8.5 2.69922 17.2998 11.0996 19.6006l34.0996 9.09961l-39.1992 23c-7.60059 4.5 -10.1006 14.2002 -5.80078 21.9004l7.90039 13.8994c4.40039 7.7002 14 10.2998 21.5 5.90039l39.2002 -23\r\n-l-9.10059 34.7002c-2.2998 8.5 2.7002 17.2998 11.1006 19.5996l15.2002 4.09961c8.39941 2.30078 17.0996 -2.7998 19.2998 -11.2998l21.2998 -81l71.9004 -42.2002v84.5l-58.3008 59.3008c-6.09961 6.19922 -6.09961 16.3994 0 22.5996l11.5 11.2998\r\n-c6.10059 6.2002 16.1006 6.2002 22.2002 0l24.9004 -25.3994v46.0996c0 8.7998 7 16 15.7002 16h15.6992c8.7002 0 15.7002 -7.2002 15.7002 -16v-45.9004l24.9004 25.4004c6.09961 6.2002 16.0996 6.2002 22.2002 0l11.0996 -11.2998\r\n-c6.09961 -6.2002 6.09961 -16.4004 0 -22.6006l-58.2998 -59.2998v-84.5l71.8994 42.2002l21.3008 81c2.2998 8.5 10.8994 13.5996 19.2998 11.2998l15.2002 -4.09961c8.39941 -2.2998 13.2998 -11.1006 11.0996 -19.6006l-9.09961 -34.6992l39.1992 23\r\n-c7.5 4.39941 17.2002 1.7998 21.5 -5.90039l7.90039 -13.9004c4.2998 -7.69922 1.7002 -17.5 -5.7998 -21.8994l-39.2002 -23l34.0996 -9.2998c8.40039 -2.30078 13.3008 -11.1006 11.1006 -19.6006l-4.10059 -15.5c-2.2998 -8.5 -10.8994 -13.5996 -19.2998 -11.2998\r\n-l-79.7002 21.7002l-71.8994 -42.2002l71.7998 -42.2002l79.7002 21.7002c8.39941 2.2998 17.0996 -2.7998 19.2998 -11.2998l4.09961 -15.5c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.6006l-34.0996 -9.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash-alt\" unicode=\"&#xf2ed;\" horiz-adv-x=\"448\" \r\n-d=\"M268 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24zM432 368c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16h-16v-336\r\n-c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48v336h-16c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h82.4102l34.0195 56.7002c7.71875 12.8613 26.1572 23.2998 41.1572 23.2998h0.00292969h100.82h0.0224609\r\n-c15 0 33.4385 -10.4385 41.1572 -23.2998l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-0.96582 1.60645 -3.26953 2.91016 -5.14355 2.91016h-0.00683594h-94h-0.0166016c-1.87402 0 -4.17871 -1.30371 -5.14355 -2.91016zM368 -16v336\r\n-h-288v-336h288zM156 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"images\" unicode=\"&#xf302;\" horiz-adv-x=\"576\" \r\n-d=\"M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-48h-10c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v10h48zM522 368h-372\r\n-c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v244c0 3.31152 -2.68848 6 -6 6zM528 416c26.5098 0 48 -21.4902 48 -48v-256c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256\r\n-c0 26.5098 21.4902 48 48 48h384zM264 304c0 -22.0908 -17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40s40 -17.9092 40 -40zM192 208l39.5146 39.5146c4.68652 4.68652 12.2842 4.68652 16.9717 0l39.5137 -39.5146l103.515 103.515\r\n-c4.68652 4.68652 12.2842 4.68652 16.9717 0l71.5137 -71.5146v-80h-288v48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clipboard\" unicode=\"&#xf328;\" horiz-adv-x=\"384\" \r\n-d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\r\n-s-10.7002 24 -24 24zM336 -10v340c0 3.2998 -2.7002 6 -6 6h-42v-36c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v36h-42c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h276c3.2998 0 6 2.7002 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-down\" unicode=\"&#xf358;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM224 308c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-116\r\n-h67c10.7002 0 16.0996 -12.9004 8.5 -20.5l-99 -99c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-99 99c-7.5 7.59961 -2.2002 20.5 8.5 20.5h67v116z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-left\" unicode=\"&#xf359;\" \r\n-d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM456 192c0 110.5 -89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200zM384 212v-40c0 -6.59961 -5.40039 -12 -12 -12h-116v-67\r\n-c0 -10.7002 -12.9004 -16 -20.5 -8.5l-99 99c-4.7002 4.7002 -4.7002 12.2998 0 17l99 99c7.59961 7.59961 20.5 2.2002 20.5 -8.5v-67h116c6.59961 0 12 -5.40039 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-right\" unicode=\"&#xf35a;\" \r\n-d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM128 172v40c0 6.59961 5.40039 12 12 12h116v67\r\n-c0 10.7002 12.9004 16 20.5 8.5l99 -99c4.7002 -4.7002 4.7002 -12.2998 0 -17l-99 -99c-7.59961 -7.59961 -20.5 -2.2002 -20.5 8.5v67h-116c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-up\" unicode=\"&#xf35b;\" \r\n-d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM256 392c-110.5 0 -200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200zM276 64h-40c-6.59961 0 -12 5.40039 -12 12v116h-67\r\n-c-10.7002 0 -16 12.9004 -8.5 20.5l99 99c4.7002 4.7002 12.2998 4.7002 17 0l99 -99c7.59961 -7.59961 2.2002 -20.5 -8.5 -20.5h-67v-116c0 -6.59961 -5.40039 -12 -12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gem\" unicode=\"&#xf3a5;\" horiz-adv-x=\"576\" \r\n-d=\"M464 448c4.09961 0 7.7998 -2 10.0996 -5.40039l99.9004 -147.199c2.90039 -4.40039 2.59961 -10.1006 -0.700195 -14.2002l-276 -340.8c-4.7998 -5.90039 -13.7998 -5.90039 -18.5996 0l-276 340.8c-3.2998 4 -3.60059 9.7998 -0.700195 14.2002l100 147.199\r\n-c2.2002 3.40039 6 5.40039 10 5.40039h352zM444.7 400h-56.7998l51.6992 -96h68.4004zM242.6 400l-51.5996 -96h194l-51.7002 96h-90.7002zM131.3 400l-63.2998 -96h68.4004l51.6992 96h-56.7998zM88.2998 256l119.7 -160l-68.2998 160h-51.4004zM191.2 256l96.7998 -243.3\r\n-l96.7998 243.3h-193.6zM368 96l119.6 160h-51.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-bill-alt\" unicode=\"&#xf3d1;\" horiz-adv-x=\"640\" \r\n-d=\"M320 304c53.0195 0 96 -50.1396 96 -112c0 -61.8701 -43 -112 -96 -112c-53.0195 0 -96 50.1504 -96 112c0 61.8604 42.9805 112 96 112zM360 136v16c0 4.41992 -3.58008 8 -8 8h-16v88c0 4.41992 -3.58008 8 -8 8h-13.5801h-0.000976562\r\n-c-4.01074 0 -9.97266 -1.80566 -13.3086 -4.03027l-15.3301 -10.2197c-1.96777 -1.30957 -3.56445 -4.29004 -3.56445 -6.65332c0 -1.33691 0.601562 -3.32422 1.34375 -4.43652l8.88086 -13.3105c1.30859 -1.9668 4.29004 -3.56445 6.65332 -3.56445\r\n-c1.33691 0 3.32422 0.602539 4.43652 1.34473l0.469727 0.310547v-55.4404h-16c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h64c4.41992 0 8 3.58008 8 8zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576\r\n-c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM592 112v160c-35.3496 0 -64 28.6504 -64 64h-416c0 -35.3496 -28.6504 -64 -64 -64v-160c35.3496 0 64 -28.6504 64 -64h416c0 35.3496 28.6504 64 64 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-close\" unicode=\"&#xf410;\" \r\n-d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v340c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z\r\n-M356.5 253.4l-61.4004 -61.4004l61.4004 -61.4004c4.59961 -4.59961 4.59961 -12.0996 0 -16.7998l-22.2998 -22.2998c-4.60059 -4.59961 -12.1006 -4.59961 -16.7998 0l-61.4004 61.4004l-61.4004 -61.4004c-4.59961 -4.59961 -12.0996 -4.59961 -16.7998 0\r\n-l-22.2998 22.2998c-4.59961 4.60059 -4.59961 12.1006 0 16.7998l61.4004 61.4004l-61.4004 61.4004c-4.59961 4.59961 -4.59961 12.0996 0 16.7998l22.2998 22.2998c4.60059 4.59961 12.1006 4.59961 16.7998 0l61.4004 -61.4004l61.4004 61.4004\r\n-c4.59961 4.59961 12.0996 4.59961 16.7998 0l22.2998 -22.2998c4.7002 -4.60059 4.7002 -12.1006 0 -16.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-dots\" unicode=\"&#xf4ad;\" \r\n-d=\"M144 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM256 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM368 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32\r\n-s-32 14.2998 -32 32s14.2998 32 32 32zM256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5\r\n-c-3.80078 8.7998 -2 19 4.59961 26c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160\r\n-c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile-wink\" unicode=\"&#xf4da;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM365.8 138.4c10.2002 -8.5 11.6006 -23.6006 3.10059 -33.8008\r\n-c-30 -36 -74.1006 -56.5996 -120.9 -56.5996s-90.9004 20.5996 -120.9 56.5996c-8.39941 10.2002 -7.09961 25.3008 3.10059 33.8008c10.0996 8.39941 25.2998 7.09961 33.7998 -3.10059c20.7998 -25.0996 51.5 -39.3994 84 -39.3994s63.2002 14.3994 84 39.3994\r\n-c8.5 10.2002 23.5996 11.6006 33.7998 3.10059zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 268c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008l-9.5 8.5\r\n-c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angry\" unicode=\"&#xf556;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 136c33.5996 0 65.2002 -14.7998 86.7998 -40.5996\r\n-c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008c-10.6006 -8.89941 -25.7002 -6.69922 -33.7998 3c-24.8008 29.7002 -75 29.7002 -99.8008 0c-8.5 -10.1992 -23.5996 -11.5 -33.7998 -3s-11.5996 23.6006 -3.09961 33.8008\r\n-c21.5996 25.7998 53.2002 40.5996 86.7998 40.5996zM200 208c0 -17.7002 -14.2998 -32.0996 -32 -32.0996s-32 14.2998 -32 32c0 6.19922 2.2002 11.6992 5.2998 16.5996l-28.2002 8.5c-12.6992 3.7998 -19.8994 17.2002 -16.0996 29.9004\r\n-c3.7998 12.6992 17.0996 20 29.9004 16.0996l80 -24c12.6992 -3.7998 19.8994 -17.2002 16.0996 -29.9004c-3.09961 -10.3994 -12.7002 -17.0996 -23 -17.0996zM399 262.9c3.7998 -12.7002 -3.40039 -26.1006 -16.0996 -29.8008l-28.2002 -8.5\r\n-c3.09961 -4.89941 5.2998 -10.3994 5.2998 -16.5996c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c-10.2998 0 -19.9004 6.7002 -23 17.0996c-3.7998 12.7002 3.40039 26.1006 16.0996 29.9004l80 24c12.8008 3.7998 26.1006 -3.40039 29.9004 -16.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dizzy\" unicode=\"&#xf567;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM214.2 209.9\r\n-c-7.90039 -7.90039 -20.5 -7.90039 -28.4004 -0.200195l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998\r\n-c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.9004c7.7998 7.7998 20.5 7.7998 28.2998 0s7.7998 -20.5 0 -28.2998l-17.9004 -17.9004l17.9004 -17.7998c7.7998 -7.7998 7.7998 -20.5 0 -28.2998zM374.2 302.1\r\n-c7.7002 -7.7998 7.7002 -20.3994 0 -28.1992l-17.9004 -17.9004l17.7998 -18c7.80078 -7.7998 7.80078 -20.5 0 -28.2998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0\r\n-c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.7998c7.7998 7.80078 20.5 7.80078 28.2998 0zM248 176\r\n-c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64s-64 28.7002 -64 64s28.7002 64 64 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flushed\" unicode=\"&#xf579;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM344 304c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80\r\n-s-80 35.7998 -80 80s35.7998 80 80 80zM344 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM344 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM232 224c0 -44.2002 -35.7998 -80 -80 -80\r\n-s-80 35.7998 -80 80s35.7998 80 80 80s80 -35.7998 80 -80zM152 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM152 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM312 104\r\n-c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frown-open\" unicode=\"&#xf57a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32\r\n-s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 160c35.5996 0 88.7998 -21.2998 95.7998 -61.2002c2 -11.7998 -9.09961 -21.5996 -20.5 -18.0996\r\n-c-31.2002 9.59961 -59.3994 15.2998 -75.2998 15.2998s-44.0996 -5.7002 -75.2998 -15.2998c-11.5 -3.40039 -22.5 6.2998 -20.5 18.0996c7 39.9004 60.2002 61.2002 95.7998 61.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grimace\" unicode=\"&#xf57f;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM344 192c26.5 0 48 -21.5 48 -48v-32c0 -26.5 -21.5 -48 -48 -48h-192c-26.5 0 -48 21.5 -48 48v32c0 26.5 21.5 48 48 48\r\n-h192zM176 96v24h-40v-8c0 -8.7998 7.2002 -16 16 -16h24zM176 136v24h-24c-8.7998 0 -16 -7.2002 -16 -16v-8h40zM240 96v24h-48v-24h48zM240 136v24h-48v-24h48zM304 96v24h-48v-24h48zM304 136v24h-48v-24h48zM360 112v8h-40v-24h24c8.7998 0 16 7.2002 16 16zM360 136v8\r\n-c0 8.7998 -7.2002 16 -16 16h-24v-24h40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin\" unicode=\"&#xf580;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\r\n-c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-alt\" unicode=\"&#xf581;\" horiz-adv-x=\"496\" \r\n-d=\"M200.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56\r\n-c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM328.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0\r\n-c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200\r\n-s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006\r\n-s79.7002 4.7998 105.6 13.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-beam\" unicode=\"&#xf582;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\r\n-c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM117.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\r\n-c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996\r\n-l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002zM277.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998\r\n-c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-beam-sweat\" unicode=\"&#xf583;\" horiz-adv-x=\"496\" \r\n-d=\"M440 288c-29.5 0 -53.2998 26.2998 -53.2998 58.7002c0 25 31.7002 75.5 46.2002 97.2998c3.5 5.2998 10.5996 5.2998 14.1992 0c14.5 -21.7998 46.2002 -72.2998 46.2002 -97.2998c0 -32.4004 -23.7998 -58.7002 -53.2998 -58.7002zM248 48\r\n-c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM378.3 216.3\r\n-c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\r\n-c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM483.6 269.2c8 -24.2998 12.4004 -50.2002 12.4004 -77.2002c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248\r\n-c45.7002 0 88.4004 -12.5996 125.2 -34.2002c-10.9004 -21.5996 -15.5 -36.2002 -17.2002 -45.7002c-31.2002 20.1006 -68.2002 31.9004 -108 31.9004c-110.3 0 -200 -89.7002 -200 -200s89.7002 -200 200 -200s200 89.7002 200 200\r\n-c0 22.5 -3.90039 44.0996 -10.7998 64.2998c0.399414 0 21.7998 -2.7998 46.3994 12.9004zM168 258.6c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\r\n-c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-hearts\" unicode=\"&#xf584;\" horiz-adv-x=\"496\" \r\n-d=\"M353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM200.8 192.3\r\n-l-70.2002 18.1006c-20.3994 5.2998 -31.8994 27 -24.1992 47.1992c6.69922 17.7002 26.6992 26.7002 44.8994 22l7.10059 -1.89941l2 7.09961c5.09961 18.1006 22.8994 30.9004 41.5 27.9004c21.3994 -3.40039 34.3994 -24.2002 28.7998 -44.5l-19.4004 -69.9004\r\n-c-1.2998 -4.5 -6 -7.2002 -10.5 -6zM389.6 257.6c7.7002 -20.1992 -3.7998 -41.7998 -24.1992 -47.0996l-70.2002 -18.2002c-4.60059 -1.2002 -9.2998 1.5 -10.5 6l-19.4004 69.9004c-5.59961 20.2998 7.40039 41.0996 28.7998 44.5c18.7002 3 36.5 -9.7998 41.5 -27.9004\r\n-l2 -7.09961l7.10059 1.89941c18.2002 4.7002 38.2002 -4.39941 44.8994 -22zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200\r\n-s89.7002 -200 200 -200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-squint\" unicode=\"&#xf585;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\r\n-c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM118.9 184.2c-3.80078 4.39941 -3.90039 11 -0.100586 15.5l33.6006 40.2998\r\n-l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5c3.89941 4.40039 10.1992 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5zM361.8 181.7\r\n-l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5.10059 2.90039 11.5 1.90039 15.2998 -2.5c3.80078 -4.5 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5\r\n-c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-squint-tears\" unicode=\"&#xf586;\" \r\n-d=\"M117.1 63.9004c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998\r\n-c16.8994 16.9004 75.0996 26.9004 100.899 30.6006zM75.9004 105.6c-19.6006 -3.89941 -35.1006 -8.09961 -47.3008 -12.1992c-39.2998 90.5996 -22.0996 199.899 52 274c48.5 48.3994 111.9 72.5996 175.4 72.5996c38.9004 0 77.7998 -9.2002 113.2 -27.4004\r\n-c-4 -12.1992 -8.2002 -28 -12 -48.2998c-30.4004 17.9004 -65 27.7002 -101.2 27.7002c-53.4004 0 -103.6 -20.7998 -141.4 -58.5996c-61.5996 -61.5 -74.2998 -153.4 -38.6992 -227.801zM428.2 293.2c20.2998 3.89941 36.2002 8 48.5 12\r\n-c47.8994 -93.2002 32.8994 -210.5 -45.2002 -288.601c-48.5 -48.3994 -111.9 -72.5996 -175.4 -72.5996c-33.6992 0 -67.2998 7 -98.6992 20.5996c4.19922 12.2002 8.2998 27.7002 12.1992 47.2002c26.6006 -12.7998 55.9004 -19.7998 86.4004 -19.7998\r\n-c53.4004 0 103.6 20.7998 141.4 58.5996c65.6992 65.7002 75.7998 166 30.7998 242.601zM394.9 320.1c-6.30078 -0.899414 -11.7002 4.5 -10.9004 10.9004c3.7002 25.7998 13.7002 84 30.5996 100.9c22 21.8994 57.9004 21.5 80.3008 -0.900391\r\n-c22.3994 -22.4004 22.7998 -58.4004 0.899414 -80.2998c-16.8994 -16.9004 -75.0996 -26.9004 -100.899 -30.6006zM207.9 211.8c3 -3 4.19922 -7.2998 3.19922 -11.5l-22.5996 -90.5c-1.40039 -5.39941 -6.2002 -9.09961 -11.7002 -9.09961h-0.899414\r\n-c-5.80078 0.5 -10.5 5.09961 -11 10.8994l-4.80078 52.3008l-52.2998 4.7998c-5.7998 0.5 -10.3994 5.2002 -10.8994 11c-0.400391 5.89941 3.39941 11.2002 9.09961 12.5996l90.5 22.7002c4.2002 1 8.40039 -0.200195 11.4004 -3.2002zM247.6 236.9\r\n-c-0.0996094 0 -6.39941 -1.80078 -11.3994 3.19922c-3 3 -4.2002 7.30078 -3.2002 11.4004l22.5996 90.5c1.40039 5.7002 7 9.2002 12.6006 9.09961c5.7998 -0.5 10.5 -5.09961 11 -10.8994l4.7998 -52.2998l52.2998 -4.80078c5.7998 -0.5 10.4004 -5.19922 10.9004 -11\r\n-c0.399414 -5.89941 -3.40039 -11.1992 -9.10059 -12.5996zM299.6 148.4c29.1006 29.0996 53 59.5996 65.3008 83.7998c4.89941 9.2998 17.5996 9.89941 23.3994 1.7002c27.7002 -38.9004 6.10059 -106.9 -30.5996 -143.7s-104.8 -58.2998 -143.7 -30.6006\r\n-c-8.2998 5.90039 -7.5 18.6006 1.7002 23.4004c24.2002 12.5 54.7998 36.2998 83.8994 65.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-stars\" unicode=\"&#xf587;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\r\n-c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM125.7 200.9l6.09961 34.8994l-25.3994 24.6006\r\n-c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006l34.9004 -5c6.19922 -1 8.7998 -8.69922 4.2998 -13.1992l-25.4004 -24.6006l6 -34.8994c1 -6.2002 -5.39941 -11 -11 -7.90039\r\n-l-31.2998 16.2998l-31.2998 -16.2998c-5.60059 -3.09961 -12 1.7002 -11 7.90039zM385.4 273.6c6.19922 -1 8.89941 -8.59961 4.39941 -13.1992l-25.3994 -24.6006l6 -34.8994c1 -6.2002 -5.40039 -11 -11 -7.90039l-31.3008 16.2998l-31.2998 -16.2998\r\n-c-5.59961 -3.09961 -12 1.7002 -11 7.90039l6 34.8994l-25.3994 24.6006c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tears\" unicode=\"&#xf588;\" horiz-adv-x=\"640\" \r\n-d=\"M117.1 191.9c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998c16.8994 16.9004 75.0996 26.9004 100.899 30.6006\r\n-zM623.8 161.3c21.9004 -21.8994 21.5 -57.8994 -0.799805 -80.2002c-22.4004 -22.3994 -58.4004 -22.7998 -80.2998 -0.899414c-16.9004 16.8994 -26.9004 75.0996 -30.6006 100.899c-0.899414 6.30078 4.5 11.7002 10.8008 10.8008\r\n-c25.7998 -3.7002 84 -13.7002 100.899 -30.6006zM497.2 99.5996c12.3994 -37.2998 25.0996 -43.7998 28.2998 -46.5c-44.5996 -65.7998 -120 -109.1 -205.5 -109.1s-160.9 43.2998 -205.5 109.1c3.09961 2.60059 15.7998 9.10059 28.2998 46.5\r\n-c33.4004 -63.8994 100.3 -107.6 177.2 -107.6s143.8 43.7002 177.2 107.6zM122.7 223.5c-2.40039 0.299805 -5 2.5 -49.5 -6.90039c12.3994 125.4 118.1 223.4 246.8 223.4s234.4 -98 246.8 -223.5c-44.2998 9.40039 -47.3994 7.2002 -49.5 7\r\n-c-15.2002 95.2998 -97.7998 168.5 -197.3 168.5s-182.1 -73.2002 -197.3 -168.5zM320 48c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996\r\n-c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM450.3 216.3c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17\r\n-c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM240 258.6\r\n-c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004\r\n-c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue\" unicode=\"&#xf589;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0\r\n-l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200\r\n-s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996\r\n-s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32\r\n-s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue-squint\" unicode=\"&#xf58a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0\r\n-l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200\r\n-s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996\r\n-s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998\r\n-l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 3 11.5 1.90039 15.2998 -2.5zM214.2 250.3\r\n-c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5\r\n-c3.89941 4.5 10.2998 5.5 15.2998 2.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue-wink\" unicode=\"&#xf58b;\" horiz-adv-x=\"496\" \r\n-d=\"M152 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5\r\n-c-3.7998 -3.39941 -9.2998 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM328 320c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80s-80 35.7998 -80 80s35.7998 80 80 80zM328 192\r\n-c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM328 264c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248z\r\n-M312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998\r\n-c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3\r\n-c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998\r\n-c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-wink\" unicode=\"&#xf58c;\" horiz-adv-x=\"496\" \r\n-d=\"M328 268c25.6904 0 55.8799 -16.9199 59.8701 -42.1201c1.72949 -11.0898 -11.3506 -18.2695 -19.8301 -10.8398l-9.5498 8.47949c-14.8105 13.1904 -46.1602 13.1904 -60.9707 0l-9.5498 -8.47949c-8.33008 -7.40039 -21.5801 -0.379883 -19.8301 10.8398\r\n-c3.98047 25.2002 34.1699 42.1201 59.8604 42.1201zM168 208c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32s-14.3301 -32 -32 -32zM353.55 143.36c10.04 3.13965 19.3906 -5.4502 17.71 -15.3408\r\n-c-7.92969 -47.1494 -71.3193 -80.0195 -123.26 -80.0195s-115.33 32.8701 -123.26 80.0195c-1.69043 9.9707 7.76953 18.4707 17.71 15.3408c25.9297 -8.31055 64.3994 -13.0605 105.55 -13.0605s79.6201 4.75977 105.55 13.0605zM248 440c136.97 0 248 -111.03 248 -248\r\n-s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss\" unicode=\"&#xf596;\" horiz-adv-x=\"496\" \r\n-d=\"M168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5\r\n-c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002\r\n-c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM248 440c137 0 248 -111 248 -248\r\n-s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss-beam\" unicode=\"&#xf597;\" horiz-adv-x=\"496\" \r\n-d=\"M168 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17\r\n-c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8\r\n-c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5\r\n-c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002\r\n-c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM328 296\r\n-c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17\r\n-c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss-wink-heart\" unicode=\"&#xf598;\" horiz-adv-x=\"504\" \r\n-d=\"M304 139.5c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002\r\n-c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002\r\n-c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM374.5 223c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-2.5 -2.2998 -7.90039 -4.7002 -13.7002 -1.59961c-4.39941 2.39941 -6.89941 7.39941 -6.09961 12.3994\r\n-c3.89941 25.2002 34.2002 42.1006 59.7998 42.1006s55.7998 -16.9004 59.7998 -42.1006c0.799805 -5 -1.7002 -10 -6.09961 -12.3994c-4.40039 -2.40039 -9.90039 -1.7002 -13.7002 1.59961zM136 239.5c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32\r\n-s-32 14.2998 -32 32zM501.1 45.5c9.2002 -23.9004 -4.39941 -49.4004 -28.5 -55.7002l-83 -21.5c-5.39941 -1.39941 -10.8994 1.7998 -12.3994 7.10059l-22.9004 82.5996c-6.59961 24 8.7998 48.5996 34 52.5996c22 3.5 43.1006 -11.5996 49 -33l2.2998 -8.39941\r\n-l8.40039 2.2002c21.5996 5.59961 45.0996 -5.10059 53.0996 -25.9004zM334 11.7002c17.7002 -64 10.9004 -39.5 13.4004 -46.7998c-30.5 -13.4004 -64 -20.9004 -99.4004 -20.9004c-137 0 -248 111 -248 248s111 248 248 248s248 -111 247.9 -248\r\n-c0 -31.7998 -6.2002 -62.0996 -17.1006 -90c-6 1.5 -12.2002 2.7998 -18.5996 2.90039c-5.60059 9.69922 -13.6006 17.5 -22.6006 23.8994c6.7002 19.9004 10.4004 41.1006 10.4004 63.2002c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200\r\n-c30.7998 0 59.9004 7.2002 86 19.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh\" unicode=\"&#xf599;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\r\n-c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM168 224\r\n-c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-beam\" unicode=\"&#xf59a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\r\n-c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.700195 -8.5 -10.7998 -11.8994 -14.8994 -4.5\r\n-l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006c-12.3008 0 -23.8008 -7.90039 -31.5 -21.6006l-9.5 -17c-4.10059 -7.39941 -15.6006 -4.09961 -14.9004 4.5c3.2998 42.1006 32.2002 71.4004 56 71.4004zM127 220.1c-4.2002 -7.39941 -15.7002 -4 -15.0996 4.5\r\n-c3.2998 42.1006 32.1992 71.4004 56 71.4004c23.7998 0 52.6992 -29.2998 56 -71.4004c0.699219 -8.5 -10.8008 -11.8994 -14.9004 -4.5l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006s-23.7998 -7.90039 -31.5 -21.6006zM362.4 160c8.19922 0 14.5 -7 13.5 -15\r\n-c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-squint\" unicode=\"&#xf59b;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\r\n-c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM343.6 252l33.6006 -40.2998c8.59961 -10.4004 -3.90039 -24.7998 -15.4004 -18l-80 48\r\n-c-7.7998 4.7002 -7.7998 15.8994 0 20.5996l80 48c11.6006 6.7998 24 -7.7002 15.4004 -18zM134.2 193.7c-11.6006 -6.7998 -24.1006 7.59961 -15.4004 18l33.6006 40.2998l-33.6006 40.2998c-8.59961 10.2998 3.7998 24.9004 15.4004 18l80 -48\r\n-c7.7998 -4.7002 7.7998 -15.8994 0 -20.5996zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-wink\" unicode=\"&#xf59c;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\r\n-c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 284c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008\r\n-l-9.5 8.5c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996zM168 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\r\n-M362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh-blank\" unicode=\"&#xf5a4;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32\r\n-s-32 14.2998 -32 32s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh-rolling-eyes\" unicode=\"&#xf5a5;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM336 296c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72\r\n-s-72 32.2002 -72 72s32.2002 72 72 72zM336 184c22.0996 0 40 17.9004 40 40c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998\r\n-c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998c0 -22.0996 17.9004 -40 40 -40zM232 224c0 -39.7998 -32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72s72 -32.2002 72 -72zM120 224c0 -22.0996 17.9004 -40 40 -40s40 17.9004 40 40\r\n-c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998zM312 96\r\n-c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sad-cry\" unicode=\"&#xf5b3;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM392 53.5996c34.5996 35.9004 56 84.7002 56 138.4c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -53.7002 21.4004 -102.4 56 -138.4v114.4\r\n-c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-151.4c28.5 -15.5996 61.2002 -24.5996 96 -24.5996s67.5 9 96 24.5996v151.4c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-114.4zM205.8 213.5c-5.7998 -3.2002 -11.2002 -0.700195 -13.7002 1.59961l-9.5 8.5\r\n-c-14.7998 13.2002 -46.1992 13.2002 -61 0l-9.5 -8.5c-3.7998 -3.39941 -9.2998 -4 -13.6992 -1.59961c-4.40039 2.40039 -6.90039 7.40039 -6.10059 12.4004c3.90039 25.1992 34.2002 42.0996 59.7998 42.0996c25.6006 0 55.8008 -16.9004 59.8008 -42.0996\r\n-c0.799805 -5 -1.7002 -10 -6.10059 -12.4004zM344 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5\r\n-c-3.7998 -3.39941 -9.2002 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM248 176c30.9004 0 56 -28.7002 56 -64s-25.0996 -64 -56 -64s-56 28.7002 -56 64s25.0996 64 56 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sad-tear\" unicode=\"&#xf5b4;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM256 144c38.0996 0 74 -16.7998 98.5 -46.0996\r\n-c8.5 -10.2002 7.09961 -25.3008 -3.09961 -33.8008c-10.6006 -8.7998 -25.7002 -6.69922 -33.8008 3.10059c-15.2998 18.2998 -37.7998 28.7998 -61.5996 28.7998c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM162.4 173.2c2.7998 3.7002 8.39941 3.7002 11.1992 0c11.4004 -15.2998 36.4004 -50.6006 36.4004 -68.1006\r\n-c0 -22.6992 -18.7998 -41.0996 -42 -41.0996s-42 18.4004 -42 41.0996c0 17.5 25 52.8008 36.4004 68.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile-beam\" unicode=\"&#xf5b8;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM332 135.4c8.5 10.1992 23.5996 11.5 33.7998 3.09961\r\n-c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.2002 8.40039 25.2998 7.09961 33.7998 -3.09961\r\n-c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004zM136.5 237l-9.5 -17c-1.90039 -3.2002 -5.90039 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004\r\n-c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996zM328 296c23.7998 0 52.7002 -29.2998 56 -71.4004\r\n-c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002\r\n-c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"surprise\" unicode=\"&#xf5c2;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 168c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64\r\n-s-64 28.7002 -64 64s28.7002 64 64 64zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tired\" unicode=\"&#xf5c8;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5\r\n-l-33.6006 -40.2998l33.6006 -40.2998c3.7998 -4.5 3.7002 -11 -0.100586 -15.5c-3.5 -4.10059 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 2.90039 11.5 1.90039 15.2998 -2.5z\r\n-M220 240c0 -4.2002 -2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7998 -1.60059 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7998 4.5 -3.7002 11 0.100586 15.5\r\n-c3.7998 4.40039 10.2998 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998zM248 176c45.4004 0 100.9 -38.2998 107.8 -93.2998c1.5 -11.9004 -7 -21.6006 -15.5 -17.9004c-22.7002 9.7002 -56.2998 15.2002 -92.2998 15.2002\r\n-s-69.5996 -5.5 -92.2998 -15.2002c-8.60059 -3.7002 -17 6.10059 -15.5 17.9004c6.89941 55 62.3994 93.2998 107.8 93.2998z\" \u002F>\r\n-  \u003C\u002Ffont>\r\n-\u003C\u002Fdefs>\u003C\u002Fsvg>\r\n+\u003C?xml version=\"1.0\" standalone=\"no\"?>\n+\u003C!--\n+Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\n+License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n+-->\n+\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\n+\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\n+\u003Cmetadata>\n+Created by FontForge 20190801 at Mon Sep 23 12:53:49 2019\n+ By Robert Madole\n+Copyright (c) Font Awesome\n+\u003C\u002Fmetadata>\n+\u003Cdefs>\n+\u003Cfont id=\"FontAwesome5Free-Regular\" horiz-adv-x=\"512\" >\n+  \u003Cfont-face \n+    font-family=\"Font Awesome 5 Free Regular\"\n+    font-weight=\"400\"\n+    font-stretch=\"normal\"\n+    units-per-em=\"512\"\n+    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\n+    ascent=\"448\"\n+    descent=\"-64\"\n+    bbox=\"-0.0663408 -64.0662 640.01 448.1\"\n+    underline-thickness=\"25\"\n+    underline-position=\"-50\"\n+    unicode-range=\"U+0020-F5C8\"\n+  \u002F>\n+    \u003Cmissing-glyph \u002F>\n+    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" \n+d=\"M458.4 383.7c75.2998 -63.4004 64.0996 -166.601 10.5996 -221.3l-175.4 -178.7c-10 -10.2002 -23.2998 -15.7998 -37.5996 -15.7998c-14.2002 0 -27.5996 5.69922 -37.5996 15.8994l-175.4 178.7c-53.5996 54.7002 -64.5996 157.9 10.5996 221.2\n+c57.8008 48.7002 147.101 41.2998 202.4 -15c55.2998 56.2998 144.6 63.5996 202.4 15zM434.8 196.2c36.2002 36.8994 43.7998 107.7 -7.2998 150.8c-38.7002 32.5996 -98.7002 27.9004 -136.5 -10.5996l-35 -35.7002l-35 35.7002\n+c-37.5996 38.2998 -97.5996 43.1992 -136.5 10.5c-51.2002 -43.1006 -43.7998 -113.5 -7.2998 -150.7l175.399 -178.7c2.40039 -2.40039 4.40039 -2.40039 6.80078 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"576\" \n+d=\"M528.1 276.5c26.2002 -3.7998 36.7002 -36.0996 17.7002 -54.5996l-105.7 -103l25 -145.5c4.5 -26.3008 -23.1992 -45.9004 -46.3994 -33.7002l-130.7 68.7002l-130.7 -68.7002c-23.2002 -12.2998 -50.8994 7.39941 -46.3994 33.7002l25 145.5l-105.7 103\n+c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2998l65.2998 132.4c11.7998 23.8994 45.7002 23.5996 57.4004 0l65.2998 -132.4zM388.6 135.7l100.601 98l-139 20.2002l-62.2002 126l-62.2002 -126l-139 -20.2002l100.601 -98l-23.7002 -138.4l124.3 65.2998\n+l124.3 -65.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"448\" \n+d=\"M313.6 144c74.2002 0 134.4 -60.2002 134.4 -134.4v-25.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v25.5996c0 74.2002 60.2002 134.4 134.4 134.4c28.7998 0 42.5 -16 89.5996 -16s60.9004 16 89.5996 16zM400 -16v25.5996\n+c0 47.6006 -38.7998 86.4004 -86.4004 86.4004c-14.6992 0 -37.8994 -16 -89.5996 -16c-51.2998 0 -75 16 -89.5996 16c-47.6006 0 -86.4004 -38.7998 -86.4004 -86.4004v-25.5996h352zM224 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144s144 -64.5 144 -144\n+s-64.5 -144 -144 -144zM224 400c-52.9004 0 -96 -43.0996 -96 -96s43.0996 -96 96 -96s96 43.0996 96 96s-43.0996 96 -96 96z\" \u002F>\n+    \u003Cglyph glyph-name=\"clock\" unicode=\"&#xf017;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM317.8 96.4004l-84.8994 61.6992\n+c-3.10059 2.30078 -4.90039 5.90039 -4.90039 9.7002v164.2c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12v-141.7l66.7998 -48.5996c5.40039 -3.90039 6.5 -11.4004 2.60059 -16.7998l-18.8008 -25.9004c-3.89941 -5.2998 -11.3994 -6.5 -16.7998 -2.59961z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"list-alt\" unicode=\"&#xf022;\" \n+d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM458 16c3.31152 0 6 2.68848 6 6v340c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-340\n+c0 -3.31152 2.68848 -6 6 -6h404zM416 108v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 204v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12\n+v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM416 300v-24c0 -6.62695 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h200c6.62695 0 12 -5.37305 12 -12zM164 288c0 -19.8818 -16.1182 -36 -36 -36\n+s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 192c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 96c0 -19.8818 -16.1182 -36 -36 -36s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" \n+d=\"M336.174 368c35.4668 0 73.0195 12.6914 108.922 28.1797c31.6406 13.6514 66.9043 -9.65723 66.9043 -44.1162v-239.919c0 -16.1953 -8.1543 -31.3057 -21.7129 -40.1631c-26.5762 -17.3643 -70.0693 -39.9814 -128.548 -39.9814c-68.6084 0 -112.781 32 -161.913 32\n+c-56.5674 0 -89.957 -11.2803 -127.826 -28.5566v-83.4434c0 -8.83691 -7.16309 -16 -16 -16h-16c-8.83691 0 -16 7.16309 -16 16v406.438c-14.3428 8.2998 -24 23.7979 -24 41.5615c0 27.5693 23.2422 49.71 51.2012 47.8965\n+c22.9658 -1.49023 41.8662 -19.4717 44.4805 -42.3379c0.177734 -1.52441 0.321289 -4.00781 0.321289 -5.54199c0 -4.30176 -1.10352 -11.1035 -2.46289 -15.1846c22.418 8.68555 49.4199 15.168 80.7207 15.168c68.6084 0 112.781 -32 161.913 -32zM464 112v240\n+c-31.5059 -14.6338 -84.5547 -32 -127.826 -32c-59.9111 0 -101.968 32 -161.913 32c-41.4365 0 -80.4766 -16.5879 -102.261 -32v-232c31.4473 14.5967 84.4648 24 127.826 24c59.9111 0 101.968 -32 161.913 -32c41.4365 0 80.4775 16.5879 102.261 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"384\" \n+d=\"M336 448c26.5098 0 48 -21.4902 48 -48v-464l-192 112l-192 -112v464c0 26.5098 21.4902 48 48 48h288zM336 19.5703v374.434c0 3.31348 -2.68555 5.99609 -6 5.99609h-276c-3.31152 0 -6 -2.68848 -6 -6v-374.43l144 84z\" \u002F>\n+    \u003Cglyph glyph-name=\"image\" unicode=\"&#xf03e;\" \n+d=\"M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM458 48c3.31152 0 6 2.68848 6 6v276c0 3.31152 -2.68848 6 -6 6h-404c-3.31152 0 -6 -2.68848 -6 -6v-276\n+c0 -3.31152 2.68848 -6 6 -6h404zM128 296c22.0908 0 40 -17.9092 40 -40s-17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40zM96 96v48l39.5137 39.5146c4.6875 4.68652 12.2852 4.68652 16.9717 0l39.5146 -39.5146l119.514 119.515\n+c4.6875 4.68652 12.2852 4.68652 16.9717 0l87.5146 -87.5146v-80h-320z\" \u002F>\n+    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"576\" \n+d=\"M402.3 103.1l32 32c5 5 13.7002 1.5 13.7002 -5.69922v-145.4c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h273.5c7.09961 0 10.7002 -8.59961 5.7002 -13.7002l-32 -32c-1.5 -1.5 -3.5 -2.2998 -5.7002 -2.2998h-241.5v-352h352\n+v113.5c0 2.09961 0.799805 4.09961 2.2998 5.59961zM558.9 304.9l-262.601 -262.601l-90.3994 -10c-26.2002 -2.89941 -48.5 19.2002 -45.6006 45.6006l10 90.3994l262.601 262.601c22.8994 22.8994 59.8994 22.8994 82.6992 0l43.2002 -43.2002\n+c22.9004 -22.9004 22.9004 -60 0.100586 -82.7998zM460.1 274l-58.0996 58.0996l-185.8 -185.899l-7.2998 -65.2998l65.2998 7.2998zM524.9 353.7l-43.2002 43.2002c-4.10059 4.09961 -10.7998 4.09961 -14.7998 0l-30.9004 -30.9004l58.0996 -58.0996l30.9004 30.8994\n+c4 4.2002 4 10.7998 -0.0996094 14.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"times-circle\" unicode=\"&#xf057;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM357.8 254.2l-62.2002 -62.2002l62.2002 -62.2002\n+c4.7002 -4.7002 4.7002 -12.2998 0 -17l-22.5996 -22.5996c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-62.2002 62.2002l-62.2002 -62.2002c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-22.5996 22.5996c-4.7002 4.7002 -4.7002 12.2998 0 17l62.2002 62.2002l-62.2002 62.2002\n+c-4.7002 4.7002 -4.7002 12.2998 0 17l22.5996 22.5996c4.7002 4.7002 12.2998 4.7002 17 0l62.2002 -62.2002l62.2002 62.2002c4.7002 4.7002 12.2998 4.7002 17 0l22.5996 -22.5996c4.7002 -4.7002 4.7002 -12.2998 0 -17z\" \u002F>\n+    \u003Cglyph glyph-name=\"check-circle\" unicode=\"&#xf058;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200z\n+M396.204 261.733c4.66699 -4.70508 4.63672 -12.3037 -0.0673828 -16.9717l-172.589 -171.204c-4.70508 -4.66797 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66797 4.70605 -4.63672 12.3047 0.0683594 16.9717l22.7188 22.5361\n+c4.70508 4.66699 12.3027 4.63574 16.9697 -0.0693359l59.792 -60.2773l141.353 140.216c4.70508 4.66797 12.3027 4.6377 16.9697 -0.0673828z\" \u002F>\n+    \u003Cglyph glyph-name=\"question-circle\" unicode=\"&#xf059;\" \n+d=\"M256 440c136.957 0 248 -111.083 248 -248c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248zM256 -8c110.569 0 200 89.4697 200 200c0 110.529 -89.5088 200 -200 200c-110.528 0 -200 -89.5049 -200 -200\n+c0 -110.569 89.4678 -200 200 -200zM363.244 247.2c0 -67.0518 -72.4209 -68.084 -72.4209 -92.8633v-6.33691c0 -6.62695 -5.37305 -12 -12 -12h-45.6475c-6.62695 0 -12 5.37305 -12 12v8.65918c0 35.7451 27.1006 50.0342 47.5791 61.5156\n+c17.5615 9.84473 28.3242 16.541 28.3242 29.5791c0 17.2461 -21.999 28.6934 -39.7842 28.6934c-23.1885 0 -33.8936 -10.9775 -48.9424 -29.9697c-4.05664 -5.11914 -11.46 -6.07031 -16.666 -2.12402l-27.8232 21.0986\n+c-5.10742 3.87207 -6.25098 11.0654 -2.64453 16.3633c23.627 34.6934 53.7217 54.1846 100.575 54.1846c49.0713 0 101.45 -38.3037 101.45 -88.7998zM298 80c0 -23.1592 -18.8408 -42 -42 -42s-42 18.8408 -42 42s18.8408 42 42 42s42 -18.8408 42 -42z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye\" unicode=\"&#xf06e;\" horiz-adv-x=\"576\" \n+d=\"M288 304c0.0927734 0 0.244141 0.000976562 0.336914 0.000976562c61.6641 0 111.71 -50.0469 111.71 -111.711c0 -61.6631 -50.0459 -111.71 -111.71 -111.71s-111.71 50.0469 -111.71 111.71c0 8.71289 1.95898 22.5781 4.37305 30.9502\n+c6.93066 -3.94141 19.0273 -7.18457 27 -7.24023c30.9121 0 56 25.0879 56 56c-0.0556641 7.97266 -3.29883 20.0693 -7.24023 27c8.42383 2.62207 22.4189 4.8623 31.2402 5zM572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947\n+s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41\n+s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye-slash\" unicode=\"&#xf070;\" horiz-adv-x=\"640\" \n+d=\"M634 -23c3.31738 -2.65137 6.00977 -8.25098 6.00977 -12.498c0 -3.10449 -1.57715 -7.58984 -3.51953 -10.0117l-10 -12.4902c-2.65234 -3.31152 -8.24707 -6 -12.4902 -6c-3.09961 0 -7.58008 1.57227 -10 3.50977l-598 467.49\n+c-3.31738 2.65137 -6.00977 8.25098 -6.00977 12.498c0 3.10449 1.57715 7.58984 3.51953 10.0117l10 12.4902c2.65234 3.31152 8.24707 6 12.4902 6c3.09961 0 7.58008 -1.57227 10 -3.50977zM296.79 301.53c6.33496 1.35059 16.7324 2.45801 23.21 2.46973\n+c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-6.33496 -1.34375 -16.7334 -2.44629 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29\n+c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c1.91992 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55957 -10.7959 -3.47949 -14.5947c-11.7197 -22.7598 -35.4189 -56.4092 -52.9004 -75.1104l-37.7402 29.5\n+c14.333 15.0156 34.0449 41.9854 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4\n+c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c11.7168 22.7568 35.4111 56.4014 52.8896 75.1006l37.7402 -29.5c-14.3467 -15.0107 -34.0811 -41.9756 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-alt\" unicode=\"&#xf073;\" horiz-adv-x=\"448\" \n+d=\"M148 160h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM256 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40\n+c6.59961 0 12 -5.40039 12 -12v-40zM352 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM256 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM160 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM352 76c0 -6.59961 -5.40039 -12 -12 -12h-40\n+c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40\n+c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" \n+d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5c-3.80078 8.7998 -2 19 4.59961 26\n+c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004\n+l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder\" unicode=\"&#xf07b;\" \n+d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h146.74c8.49023 0 16.6299 -3.37012 22.6299 -9.37012l54.6299 -54.6299h192zM464 48v224h-198.62\n+c-8.49023 0 -16.6299 3.37012 -22.6299 9.37012l-54.6299 54.6299h-140.12v-288h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder-open\" unicode=\"&#xf07c;\" horiz-adv-x=\"576\" \n+d=\"M527.9 224c37.6992 0 60.6992 -41.5 40.6992 -73.4004l-79.8994 -128c-8.7998 -14.0996 -24.2002 -22.5996 -40.7002 -22.5996h-400c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h160l64 -64h160c26.5 0 48 -21.5 48 -48v-48h47.9004zM48 330v-233.4l62.9004 104.2\n+c8.69922 14.4004 24.2998 23.2002 41.0996 23.2002h280v42c0 3.2998 -2.7002 6 -6 6h-173.9l-64 64h-134.1c-3.2998 0 -6 -2.7002 -6 -6zM448 48l80 128h-378.8l-77.2002 -128h376z\" \u002F>\n+    \u003Cglyph glyph-name=\"chart-bar\" unicode=\"&#xf080;\" \n+d=\"M396.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v230.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-230.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM204.8 96\n+c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v198.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-198.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM300.8 96\n+c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v134.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-134.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004zM496 48c8.83984 0 16 -7.16016 16 -16v-16\n+c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-320h448zM108.8 96c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v70.4004c0 6.39941 6.40039 12.7998 12.7998 12.7998h22.4004\n+c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-70.4004c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-22.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"576\" \n+d=\"M532 61.7998c15.2998 -30.7002 37.4004 -54.5 37.7998 -54.7998c6.2998 -6.7002 8 -16.5 4.40039 -25c-3.7002 -8.5 -12 -14 -21.2002 -14c-53.5996 0 -96.7002 20.2998 -125.2 38.7998c-19 -4.39941 -39 -6.7998 -59.7998 -6.7998\n+c-86.2002 0 -159.9 40.4004 -191.3 97.7998c-9.7002 1.2002 -19.2002 2.7998 -28.4004 4.90039c-28.5 -18.6006 -71.7002 -38.7998 -125.2 -38.7998c-9.19922 0 -17.5996 5.5 -21.1992 14c-3.7002 8.5 -1.90039 18.2998 4.39941 25\n+c0.400391 0.399414 22.4004 24.1992 37.7002 54.8994c-27.5 27.2002 -44 61.2002 -44 98.2002c0 88.4004 93.0996 160 208 160c86.2998 0 160.3 -40.5 191.8 -98.0996c99.7002 -11.8008 176.2 -77.9004 176.2 -157.9c0 -37.0996 -16.5 -71.0996 -44 -98.2002zM139.2 154.1\n+l19.7998 -4.5c16 -3.69922 32.5 -5.59961 49 -5.59961c86.7002 0 160 51.2998 160 112s-73.2998 112 -160 112s-160 -51.2998 -160 -112c0 -28.7002 16.2002 -50.5996 29.7002 -64l24.7998 -24.5l-15.5 -31.0996c-2.59961 -5.10059 -5.2998 -10.1006 -8 -14.8008\n+c14.5996 5.10059 29 12.3008 43.0996 21.4004zM498.3 96c13.5 13.4004 29.7002 35.2998 29.7002 64c0 49.2002 -48.2998 91.5 -112.7 106c0.299805 -3.2998 0.700195 -6.59961 0.700195 -10c0 -80.9004 -78 -147.5 -179.3 -158.3\n+c29.0996 -29.6006 77.2998 -49.7002 131.3 -49.7002c16.5 0 33 1.90039 49 5.59961l19.9004 4.60059l17.0996 -11.1006c14.0996 -9.09961 28.5 -16.2998 43.0996 -21.3994c-2.69922 4.7002 -5.39941 9.7002 -8 14.7998l-15.5 31.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-half\" unicode=\"&#xf089;\" horiz-adv-x=\"576\" \n+d=\"M288 62.7002v-54.2998l-130.7 -68.6006c-23.3994 -12.2998 -50.8994 7.60059 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2002l65.2998 132.4c5.90039 11.8994 17.2998 17.7998 28.7002 17.7998v-68.0996l-62.2002 -126\n+l-139 -20.2002l100.601 -98l-23.7002 -138.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \n+d=\"M484.112 420.111c28.1221 -28.123 35.9434 -68.0039 19.0215 -97.0547c-23.0576 -39.584 50.1436 -163.384 -82.3311 -295.86c-132.301 -132.298 -256.435 -59.3594 -295.857 -82.3291c-29.0459 -16.917 -68.9219 -9.11426 -97.0576 19.0205\n+c-28.1221 28.1221 -35.9434 68.0029 -19.0215 97.0547c23.0566 39.5859 -50.1436 163.386 82.3301 295.86c132.308 132.309 256.407 59.3496 295.862 82.332c29.0498 16.9219 68.9307 9.09863 97.0537 -19.0234zM461.707 347.217\n+c13.5166 23.2031 -27.7578 63.7314 -50.4883 50.4912c-66.6025 -38.7939 -165.646 45.5898 -286.081 -74.8457c-120.444 -120.445 -36.0449 -219.472 -74.8447 -286.08c-13.542 -23.2471 27.8145 -63.6953 50.4932 -50.4883\n+c66.6006 38.7949 165.636 -45.5996 286.076 74.8428c120.444 120.445 36.0449 219.472 74.8447 286.08zM291.846 338.481c1.37012 -10.96 -6.40332 -20.957 -17.3643 -22.3271c-54.8467 -6.85547 -135.779 -87.7871 -142.636 -142.636\n+c-1.37305 -10.9883 -11.3984 -18.7334 -22.3262 -17.3643c-10.9609 1.37012 -18.7344 11.3652 -17.3643 22.3262c9.16211 73.2852 104.167 168.215 177.364 177.364c10.9531 1.36816 20.9561 -6.40234 22.3262 -17.3633z\" \u002F>\n+    \u003Cglyph glyph-name=\"credit-card\" unicode=\"&#xf09d;\" horiz-adv-x=\"576\" \n+d=\"M527.9 416c26.5996 0 48.0996 -21.5 48.0996 -48v-352c0 -26.5 -21.5 -48 -48.0996 -48h-479.801c-26.5996 0 -48.0996 21.5 -48.0996 48v352c0 26.5 21.5 48 48.0996 48h479.801zM54.0996 368c-3.2998 0 -6 -2.7002 -6 -6v-42h479.801v42c0 3.2998 -2.7002 6 -6 6\n+h-467.801zM521.9 16c3.2998 0 6 2.7002 6 6v170h-479.801v-170c0 -3.2998 2.7002 -6 6 -6h467.801zM192 116v-40c0 -6.59961 -5.40039 -12 -12 -12h-72c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h72c6.59961 0 12 -5.40039 12 -12zM384 116v-40\n+c0 -6.59961 -5.40039 -12 -12 -12h-136c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h136c6.59961 0 12 -5.40039 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" horiz-adv-x=\"576\" \n+d=\"M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 8.30957 3.85156 20.5898 8.59668 27.4121l105.08 151.053\n+c7.90625 11.3652 25.5596 20.5889 39.4033 20.5889h0.000976562h269.838h0.000976562c13.8438 0 31.4971 -9.22363 39.4033 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32\n+s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-right\" unicode=\"&#xf0a4;\" \n+d=\"M428.8 310.4c45.0996 0 83.2002 -38.1016 83.2002 -83.2002c0 -45.6162 -37.7646 -83.2002 -83.2002 -83.2002h-35.6475c-1.41602 -6.36719 -4.96875 -16.252 -7.92969 -22.0645c2.50586 -22.0059 -3.50293 -44.9775 -15.9844 -62.791\n+c-1.14062 -52.4863 -37.3984 -91.1445 -99.9404 -91.1445h-21.2988c-60.0635 0 -98.5117 40 -127.2 40h-2.67871c-5.74707 -4.95215 -13.5361 -8 -22.1201 -8h-64c-17.6729 0 -32 12.8936 -32 28.7998v230.4c0 15.9062 14.3271 28.7998 32 28.7998h64.001\n+c8.58398 0 16.373 -3.04785 22.1201 -8h2.67871c6.96387 0 14.8623 6.19336 30.1816 23.6689l0.128906 0.148438l0.130859 0.145508c8.85645 9.93652 18.1162 20.8398 25.8506 33.2529c18.7051 30.2471 30.3936 78.7842 75.707 78.7842c56.9277 0 92 -35.2861 92 -83.2002\n+v-0.0839844c0 -6.21777 -0.974609 -16.2148 -2.17578 -22.3154h86.1768zM428.8 192c18.9756 0 35.2002 16.2246 35.2002 35.2002c0 18.7002 -16.7754 35.2002 -35.2002 35.2002h-158.399c0 17.3242 26.3994 35.1992 26.3994 70.3994c0 26.4004 -20.625 35.2002 -44 35.2002\n+c-8.79395 0 -20.4443 -32.7119 -34.9258 -56.0996c-9.07422 -14.5752 -19.5244 -27.2256 -30.7988 -39.875c-16.1094 -18.374 -33.8359 -36.6328 -59.0752 -39.5967v-176.753c42.79 -3.7627 74.5088 -39.6758 120 -39.6758h21.2988\n+c40.5244 0 57.124 22.1973 50.6006 61.3252c14.6113 8.00098 24.1514 33.9785 12.9248 53.625c19.3652 18.2246 17.7871 46.3809 4.9502 61.0498h91.0254zM88 64c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-left\" unicode=\"&#xf0a5;\" \n+d=\"M0 227.2c0 45.0986 38.1006 83.2002 83.2002 83.2002h86.1758c-1.3623 6.91016 -2.17578 14.374 -2.17578 22.3994c0 47.9141 35.0723 83.2002 92 83.2002c45.3135 0 57.002 -48.5371 75.7061 -78.7852c7.73438 -12.4121 16.9951 -23.3154 25.8506 -33.2529\n+l0.130859 -0.145508l0.128906 -0.148438c15.3213 -17.4746 23.2197 -23.668 30.1836 -23.668h2.67871c5.74707 4.95215 13.5361 8 22.1201 8h64c17.6729 0 32 -12.8936 32 -28.7998v-230.4c0 -15.9062 -14.3271 -28.7998 -32 -28.7998h-64\n+c-8.58398 0 -16.373 3.04785 -22.1201 8h-2.67871c-28.6885 0 -67.1367 -40 -127.2 -40h-21.2988c-62.542 0 -98.8008 38.6582 -99.9404 91.1445c-12.4814 17.8135 -18.4922 40.7852 -15.9844 62.791c-2.96094 5.8125 -6.51367 15.6973 -7.92969 22.0645h-35.6465\n+c-45.4355 0 -83.2002 37.584 -83.2002 83.2002zM48 227.2c0 -18.9756 16.2246 -35.2002 35.2002 -35.2002h91.0244c-12.8369 -14.6689 -14.415 -42.8252 4.9502 -61.0498c-11.2256 -19.6465 -1.68652 -45.624 12.9248 -53.625\n+c-6.52246 -39.1279 10.0771 -61.3252 50.6016 -61.3252h21.2988c45.4912 0 77.21 35.9131 120 39.6768v176.752c-25.2393 2.96289 -42.9658 21.2227 -59.0752 39.5967c-11.2744 12.6494 -21.7246 25.2998 -30.7988 39.875\n+c-14.4814 23.3877 -26.1318 56.0996 -34.9258 56.0996c-23.375 0 -44 -8.7998 -44 -35.2002c0 -35.2002 26.3994 -53.0752 26.3994 -70.3994h-158.399c-18.4248 0 -35.2002 -16.5 -35.2002 -35.2002zM448 88c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\n+s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-up\" unicode=\"&#xf0a6;\" horiz-adv-x=\"448\" \n+d=\"M105.6 364.8c0 45.0996 38.1016 83.2002 83.2002 83.2002c45.6162 0 83.2002 -37.7646 83.2002 -83.2002v-35.6465c6.36719 -1.41602 16.252 -4.96875 22.0645 -7.92969c22.0059 2.50684 44.9775 -3.50293 62.791 -15.9844\n+c52.4863 -1.14062 91.1445 -37.3984 91.1445 -99.9404v-21.2988c0 -60.0635 -40 -98.5117 -40 -127.2v-2.67871c4.95215 -5.74707 8 -13.5361 8 -22.1201v-64c0 -17.6729 -12.8936 -32 -28.7998 -32h-230.4c-15.9062 0 -28.7998 14.3271 -28.7998 32v64\n+c0 8.58398 3.04785 16.373 8 22.1201v2.67871c0 6.96387 -6.19336 14.8623 -23.6689 30.1816l-0.148438 0.128906l-0.145508 0.130859c-9.93652 8.85645 -20.8398 18.1162 -33.2529 25.8506c-30.2471 18.7051 -78.7842 30.3936 -78.7842 75.707\n+c0 56.9277 35.2861 92 83.2002 92h0.0839844c6.21777 0 16.2148 -0.974609 22.3154 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994\n+c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988\n+c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-down\" unicode=\"&#xf0a7;\" horiz-adv-x=\"448\" \n+d=\"M188.8 -64c-45.0986 0 -83.2002 38.1006 -83.2002 83.2002v86.1758c-6.91016 -1.3623 -14.374 -2.17578 -22.3994 -2.17578c-47.9141 0 -83.2002 35.0723 -83.2002 92c0 45.3135 48.5371 57.002 78.7852 75.707c12.4121 7.73438 23.3154 16.9951 33.2529 25.8506\n+l0.145508 0.130859l0.148438 0.128906c17.4746 15.3213 23.668 23.2197 23.668 30.1836v2.67871c-4.95215 5.74707 -8 13.5361 -8 22.1201v64c0 17.6729 12.8936 32 28.7998 32h230.4c15.9062 0 28.7998 -14.3271 28.7998 -32v-64.001\n+c0 -8.58398 -3.04785 -16.373 -8 -22.1201v-2.67871c0 -28.6885 40 -67.1367 40 -127.2v-21.2988c0 -62.542 -38.6582 -98.8008 -91.1445 -99.9404c-17.8135 -12.4814 -40.7852 -18.4922 -62.791 -15.9844c-5.8125 -2.96094 -15.6973 -6.51367 -22.0645 -7.92969v-35.6465\n+c0 -45.4355 -37.584 -83.2002 -83.2002 -83.2002zM188.8 -16c18.9756 0 35.2002 16.2246 35.2002 35.2002v91.0244c14.6689 -12.8369 42.8252 -14.415 61.0498 4.9502c19.6465 -11.2256 45.624 -1.68652 53.625 12.9248c39.1279 -6.52246 61.3252 10.0771 61.3252 50.6016\n+v21.2988c0 45.4912 -35.9131 77.21 -39.6768 120h-176.752c-2.96289 -25.2393 -21.2227 -42.9658 -39.5967 -59.0752c-12.6494 -11.2744 -25.2998 -21.7246 -39.875 -30.7988c-23.3877 -14.4814 -56.0996 -26.1318 -56.0996 -34.9258c0 -23.375 8.7998 -44 35.2002 -44\n+c35.2002 0 53.0752 26.3994 70.3994 26.3994v-158.399c0 -18.4248 16.5 -35.2002 35.2002 -35.2002zM328 384c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"448\" \n+d=\"M433.941 382.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48\n+h172.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88\n+c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184\n+v-64h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" horiz-adv-x=\"448\" \n+d=\"M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM272 368h-128v-80h128v80\n+zM394 16c3.31152 0 6 2.68848 6 6v259.632v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340\n+c0 -3.31152 2.68848 -6 6 -6h340zM224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z\" \u002F>\n+    \u003Cglyph glyph-name=\"square\" unicode=\"&#xf0c8;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM394 16c3.2998 0 6 2.7002 6 6v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf0e0;\" \n+d=\"M464 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416zM464 336h-416v-40.8047c22.4248 -18.2627 58.1797 -46.6602 134.587 -106.49\n+c16.834 -13.2422 50.2051 -45.0762 73.4131 -44.7012c23.2119 -0.371094 56.5723 31.4541 73.4131 44.7012c76.4189 59.8389 112.165 88.2305 134.587 106.49v40.8047zM48 48h416v185.601c-22.915 -18.252 -55.4189 -43.8691 -104.947 -82.6523\n+c-22.5439 -17.748 -60.3359 -55.1787 -103.053 -54.9473c-42.9277 -0.231445 -81.2051 37.75 -103.062 54.9551c-49.5293 38.7842 -82.0244 64.3945 -104.938 82.6455v-185.602z\" \u002F>\n+    \u003Cglyph glyph-name=\"lightbulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"352\" \n+d=\"M176 368c8.83984 0 16 -7.16016 16 -16s-7.16016 -16 -16 -16c-35.2803 0 -64 -28.7002 -64 -64c0 -8.83984 -7.16016 -16 -16 -16s-16 7.16016 -16 16c0 52.9404 43.0596 96 96 96zM96.0596 -11.1699l-0.0400391 43.1797h159.961l-0.0507812 -43.1797\n+c-0.00976562 -3.13965 -0.939453 -6.21973 -2.67969 -8.83984l-24.5098 -36.8398c-2.95996 -4.45996 -7.95996 -7.14062 -13.3203 -7.14062h-78.8496c-5.35059 0 -10.3506 2.68066 -13.3203 7.14062l-24.5098 36.8398c-1.75 2.62012 -2.68066 5.68945 -2.68066 8.83984z\n+M176 448c97.2002 0 176 -78.7998 176 -176c0 -44.3701 -16.4502 -84.8496 -43.5498 -115.79c-16.6406 -18.9795 -42.7402 -58.79 -52.4199 -92.1602v-0.0498047h-48v0.0996094c0.00390625 4.04199 0.999023 10.4482 2.21973 14.3008\n+c5.67969 17.9893 22.9902 64.8496 62.0996 109.46c20.4102 23.29 31.6504 53.1699 31.6504 84.1396c0 70.5801 -57.4199 128 -128 128c-68.2803 0 -128.15 -54.3604 -127.95 -128c0.0898438 -30.9902 11.0703 -60.71 31.6104 -84.1396\n+c39.3496 -44.9004 56.5801 -91.8604 62.1699 -109.67c1.42969 -4.56055 2.13965 -9.30078 2.15039 -14.0703v-0.120117h-48v0.0595703c-9.68066 33.3604 -35.7803 73.1709 -52.4209 92.1602c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78\n+c0 93.0303 73.7197 176 176 176z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0f3;\" horiz-adv-x=\"448\" \n+d=\"M439.39 85.71c6 -6.44043 8.66016 -14.1602 8.61035 -21.71c-0.0996094 -16.4004 -12.9805 -32 -32.0996 -32h-383.801c-19.1191 0 -31.9893 15.5996 -32.0996 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c19.3193 20.7598 55.4697 51.9902 55.4697 154.29\n+c0 77.7002 54.4795 139.9 127.939 155.16v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -102.3 36.1504 -133.53 55.4697 -154.29zM67.5303 80h312.939\n+c-21.2197 27.96 -44.4199 74.3203 -44.5293 159.42c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112s-112 -50.1396 -112 -112c0 -0.200195 0.0595703 -0.379883 0.0595703 -0.580078\n+c-0.109375 -85.0898 -23.3096 -131.45 -44.5293 -159.42zM224 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"448\" \n+d=\"M128 204v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12zM268 192c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40\n+c0 -6.62695 -5.37305 -12 -12 -12h-40zM192 108c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM268 96c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\n+c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.62695 5.37305 12 12 12h19.5v378.965c0 11.6172 10.7451 21.0352 24 21.0352h88.5v40c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-40h88.5\n+c13.2549 0 24 -9.41797 24 -21.0352v-378.965h19.5c6.62695 0 12 -5.37305 12 -12zM79.5 -15h112.5v67c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-67h112.5v351h-64.5v-24c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v24\n+h-64.5v-351zM266 384h-26v26c0 3.31152 -2.68848 6 -6 6h-20c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6v26h26c3.31152 0 6 2.68848 6 6v20\n+c0 3.31152 -2.68848 6 -6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus-square\" unicode=\"&#xf0fe;\" horiz-adv-x=\"448\" \n+d=\"M352 208v-32c0 -6.59961 -5.40039 -12 -12 -12h-88v-88c0 -6.59961 -5.40039 -12 -12 -12h-32c-6.59961 0 -12 5.40039 -12 12v88h-88c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h88v88c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12\n+v-88h88c6.59961 0 12 -5.40039 12 -12zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340\n+c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM332 135.4c8.5 10.1992 23.7002 11.5 33.7998 3.09961c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998\n+c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.0996 8.40039 25.2998 7.09961 33.7998 -3.09961c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 144c40.2002 0 78 -17.7002 103.8 -48.5996c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008\n+c-10.7002 -8.7998 -25.7002 -6.59961 -33.7998 3.10059c-16.6006 20 -41 31.3994 -66.9004 31.3994s-50.2998 -11.5 -66.9004 -31.3994c-8.5 -10.2002 -23.5996 -11.5 -33.7998 -3.10059c-10.2002 8.5 -11.5996 23.6006 -3.09961 33.8008\n+c25.7998 30.8994 63.5996 48.5996 103.8 48.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM336 128c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-176c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h176z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"576\" \n+d=\"M528 384c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h480zM536 48v288c0 4.41113 -3.58887 8 -8 8h-480c-4.41113 0 -8 -3.58887 -8 -8v-288c0 -4.41113 3.58887 -8 8 -8\n+h480c4.41113 0 8 3.58887 8 8zM170 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM266 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28\n+c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM362 178c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM458 178c0 -6.62695 -5.37305 -12 -12 -12h-28\n+c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 96c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 96\n+c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM122 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28\n+c6.62695 0 12 -5.37305 12 -12v-28zM218 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM314 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28\n+c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM410 260c0 -6.62695 -5.37305 -12 -12 -12h-28c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM506 260c0 -6.62695 -5.37305 -12 -12 -12h-28\n+c-6.62695 0 -12 5.37305 -12 12v28c0 6.62695 5.37305 12 12 12h28c6.62695 0 12 -5.37305 12 -12v-28zM408 102c0 -6.62695 -5.37305 -12 -12 -12h-216c-6.62695 0 -12 5.37305 -12 12v16c0 6.62695 5.37305 12 12 12h216c6.62695 0 12 -5.37305 12 -12v-16z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf133;\" horiz-adv-x=\"448\" \n+d=\"M400 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12\n+v-52h48zM394 -16c3.2998 0 6 2.7002 6 6v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340z\" \u002F>\n+    \u003Cglyph glyph-name=\"play-circle\" unicode=\"&#xf144;\" \n+d=\"M371.7 210c16.3994 -9.2002 16.3994 -32.9004 0 -42l-176 -101c-15.9004 -8.7998 -35.7002 2.59961 -35.7002 21v208c0 18.5 19.9004 29.7998 35.7002 21zM504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192\n+c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus-square\" unicode=\"&#xf146;\" horiz-adv-x=\"448\" \n+d=\"M108 164c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h232c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12h-232zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352\n+c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"check-square\" unicode=\"&#xf14a;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM400 16v352h-352v-352h352zM364.136 257.724l-172.589 -171.204\n+c-4.70508 -4.66699 -12.3027 -4.63672 -16.9697 0.0683594l-90.7812 91.5156c-4.66699 4.70508 -4.63672 12.3037 0.0693359 16.9717l22.7188 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l59.792 -60.2773l141.353 140.217\n+c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0683594l22.5361 -22.7178c4.66699 -4.70605 4.63672 -12.3047 -0.0683594 -16.9717z\" \u002F>\n+    \u003Cglyph glyph-name=\"share-square\" unicode=\"&#xf14d;\" horiz-adv-x=\"576\" \n+d=\"M561.938 289.94c18.75 -18.7402 18.75 -49.1406 0 -67.8809l-143.998 -144c-29.9727 -29.9727 -81.9404 -9.05273 -81.9404 33.9404v53.7998c-101.266 -7.83691 -99.625 -31.6406 -84.1104 -78.7598c14.2285 -43.0889 -33.4736 -79.248 -71.0195 -55.7402\n+c-51.6924 32.3057 -84.8701 83.0635 -84.8701 144.76c0 39.3408 12.2197 72.7402 36.3301 99.3008c19.8398 21.8398 47.7402 38.4697 82.9102 49.4199c36.7295 11.4395 78.3096 16.1094 120.76 17.9893v57.1982c0 42.9355 51.9258 63.9541 81.9404 33.9404zM384 112l144 144\n+l-144 144v-104.09c-110.86 -0.90332 -240 -10.5166 -240 -119.851c0 -52.1396 32.79 -85.6094 62.3096 -104.06c-39.8174 120.65 48.999 141.918 177.69 143.84v-103.84zM408.74 27.5068c6.14844 1.75684 15.5449 5.92383 20.9736 9.30273\n+c7.97656 4.95215 18.2861 -0.825195 18.2861 -10.2139v-42.5957c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h132c6.62695 0 12 -5.37305 12 -12v-4.48633c0 -4.91699 -2.9873 -9.36914 -7.56934 -11.1514\n+c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.59668 -0.974609 -4.41016 -1.77051 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" horiz-adv-x=\"496\" \n+d=\"M347.94 318.14c16.6592 7.61035 33.8096 -9.54004 26.1992 -26.1992l-65.9697 -144.341c-2.73047 -5.97363 -9.7959 -13.0391 -15.7695 -15.7695l-144.341 -65.9697c-16.6592 -7.61035 -33.8096 9.5498 -26.1992 26.1992l65.9697 144.341\n+c2.73047 5.97363 9.7959 13.0391 15.7695 15.7695zM270.58 169.42c12.4697 12.4697 12.4697 32.6904 0 45.1602s-32.6904 12.4697 -45.1602 0s-12.4697 -32.6904 0 -45.1602s32.6904 -12.4697 45.1602 0zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248\n+s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-down\" unicode=\"&#xf150;\" horiz-adv-x=\"448\" \n+d=\"M125.1 240h197.801c10.6992 0 16.0996 -13 8.5 -20.5l-98.9004 -98.2998c-4.7002 -4.7002 -12.2002 -4.7002 -16.9004 0l-98.8994 98.2998c-7.7002 7.5 -2.2998 20.5 8.39941 20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-up\" unicode=\"&#xf151;\" horiz-adv-x=\"448\" \n+d=\"M322.9 144h-197.801c-10.6992 0 -16.0996 13 -8.5 20.5l98.9004 98.2998c4.7002 4.7002 12.2002 4.7002 16.9004 0l98.8994 -98.2998c7.7002 -7.5 2.2998 -20.5 -8.39941 -20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-right\" unicode=\"&#xf152;\" horiz-adv-x=\"448\" \n+d=\"M176 93.0996v197.801c0 10.6992 13 16.0996 20.5 8.5l98.2998 -98.9004c4.7002 -4.7002 4.7002 -12.2002 0 -16.9004l-98.2998 -98.8994c-7.5 -7.7002 -20.5 -2.2998 -20.5 8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-alt\" unicode=\"&#xf15c;\" horiz-adv-x=\"384\" \n+d=\"M288 200v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v28c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM276 128c6.59961 0 12 -5.40039 12 -12v-28c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12\n+v28c0 6.59961 5.40039 12 12 12h168zM384 316.1v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l83.9004 -83.9004c9 -8.90039 14.0996 -21.2002 14.0996 -33.9004z\n+M256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs-up\" unicode=\"&#xf164;\" \n+d=\"M466.27 161.31c4.6748 -22.6465 0.864258 -44.5371 -8.98926 -62.9893c2.95898 -23.8682 -4.02148 -48.5654 -17.3398 -66.9902c-0.954102 -55.9072 -35.8232 -95.3301 -112.94 -95.3301c-7 0 -15 0.00976562 -22.2197 0.00976562\n+c-102.742 0 -133.293 38.9395 -177.803 39.9404c-3.56934 -13.7764 -16.085 -23.9502 -30.9775 -23.9502h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h98.7598c19.1455 16.9531 46.0137 60.6533 68.7598 83.4004\n+c13.667 13.667 10.1533 108.6 71.7607 108.6c57.5801 0 95.2695 -31.9355 95.2695 -104.73c0 -18.4092 -3.92969 -33.7295 -8.84961 -46.5391h36.4795c48.6025 0 85.8203 -41.5654 85.8203 -85.5801c0 -19.1504 -4.95996 -34.9902 -13.7305 -49.8408zM404.52 107.48\n+c21.5811 20.3838 18.6992 51.0645 5.21094 65.6191c9.44922 0 22.3594 18.9102 22.2695 37.8105c-0.0898438 18.9102 -16.71 37.8203 -37.8203 37.8203h-103.989c0 37.8193 28.3594 55.3691 28.3594 94.5391c0 23.75 0 56.7305 -47.2695 56.7305\n+c-18.9102 -18.9102 -9.45996 -66.1797 -37.8203 -94.54c-26.5596 -26.5703 -66.1797 -97.46 -94.54 -97.46h-10.9199v-186.17c53.6113 0 100.001 -37.8203 171.64 -37.8203h37.8203c35.5117 0 60.8203 17.1201 53.1201 65.9004\n+c15.2002 8.16016 26.5 36.4395 13.9395 57.5703zM88 16c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs-down\" unicode=\"&#xf165;\" \n+d=\"M466.27 222.69c8.77051 -14.8506 13.7305 -30.6904 13.7305 -49.8408c0 -44.0146 -37.2178 -85.5801 -85.8203 -85.5801h-36.4795c4.91992 -12.8096 8.84961 -28.1299 8.84961 -46.5391c0 -72.7949 -37.6895 -104.73 -95.2695 -104.73\n+c-61.6074 0 -58.0938 94.9326 -71.7607 108.6c-22.7461 22.7471 -49.6133 66.4473 -68.7598 83.4004h-7.05176c-5.5332 -9.56152 -15.8662 -16 -27.708 -16h-64c-17.6729 0 -32 14.3271 -32 32v240c0 17.6729 14.3271 32 32 32h64c8.11328 0 15.5146 -3.02539 21.1553 -8\n+h10.8447c40.9971 0 73.1953 39.9902 176.78 39.9902c7.21973 0 15.2197 0.00976562 22.2197 0.00976562c77.1172 0 111.986 -39.4229 112.94 -95.3301c13.3184 -18.4248 20.2979 -43.1221 17.3398 -66.9902c9.85352 -18.4521 13.6641 -40.3428 8.98926 -62.9893zM64 152\n+c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM394.18 135.27c21.1104 0 37.7305 18.9102 37.8203 37.8203c0.0898438 18.9004 -12.8203 37.8105 -22.2695 37.8105c13.4883 14.5547 16.3701 45.2354 -5.21094 65.6191\n+c12.5605 21.1309 1.26074 49.4102 -13.9395 57.5703c7.7002 48.7803 -17.6084 65.9004 -53.1201 65.9004h-37.8203c-71.6387 0 -118.028 -37.8203 -171.64 -37.8203v-186.17h10.9199c28.3604 0 67.9805 -70.8896 94.54 -97.46\n+c28.3604 -28.3604 18.9102 -75.6299 37.8203 -94.54c47.2695 0 47.2695 32.9805 47.2695 56.7305c0 39.1699 -28.3594 56.7197 -28.3594 94.5391h103.989z\" \u002F>\n+    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" \n+d=\"M494.2 226.1c11.2002 -7.59961 17.7998 -20.0996 17.8994 -33.6992c0 -13.4004 -6.69922 -26 -17.7998 -33.5l-59.7998 -40.5l13.7002 -71c2.5 -13.2002 -1.60059 -26.8008 -11.1006 -36.3008s-22.8994 -13.7998 -36.2998 -11.0996l-70.8994 13.7002l-40.4004 -59.9004\n+c-7.5 -11.0996 -20.0996 -17.7998 -33.5 -17.7998s-26 6.7002 -33.5 17.9004l-40.4004 59.8994l-70.7998 -13.7002c-13.3994 -2.59961 -26.7998 1.60059 -36.2998 11.1006s-13.7002 23.0996 -11.0996 36.2998l13.6992 71l-59.7998 40.5\n+c-11.0996 7.5 -17.7998 20 -17.7998 33.5s6.59961 26 17.7998 33.5996l59.7998 40.5l-13.6992 71c-2.60059 13.2002 1.59961 26.7002 11.0996 36.3008c9.5 9.59961 23 13.6992 36.2998 11.1992l70.7998 -13.6992l40.4004 59.8994c15.0996 22.2998 51.9004 22.2998 67 0\n+l40.4004 -59.8994l70.8994 13.6992c13 2.60059 26.6006 -1.59961 36.2002 -11.0996c9.5 -9.59961 13.7002 -23.2002 11.0996 -36.4004l-13.6992 -71zM381.3 140.5l76.7998 52.0996l-76.7998 52l17.6006 91.1006l-91 -17.6006l-51.9004 76.9004l-51.7998 -76.7998\n+l-91 17.5996l17.5996 -91.2002l-76.7998 -52l76.7998 -52l-17.5996 -91.1992l90.8994 17.5996l51.9004 -77l51.9004 76.9004l91 -17.6006zM256 296c57.2998 0 104 -46.7002 104 -104s-46.7002 -104 -104 -104s-104 46.7002 -104 104s46.7002 104 104 104zM256 136\n+c30.9004 0 56 25.0996 56 56s-25.0996 56 -56 56s-56 -25.0996 -56 -56s25.0996 -56 56 -56z\" \u002F>\n+    \u003Cglyph glyph-name=\"moon\" unicode=\"&#xf186;\" \n+d=\"M279.135 -64c-141.424 0 -256 114.64 -256 256c0 141.425 114.641 256 256 256c13.0068 -0.00195312 33.9443 -1.91797 46.7354 -4.27734c44.0205 -8.13086 53.7666 -66.8691 15.0215 -88.9189c-41.374 -23.5439 -67.4336 -67.4121 -67.4336 -115.836\n+c0 -83.5234 75.9238 -146.475 158.272 -130.792c43.6904 8.32129 74.5186 -42.5693 46.248 -77.4004c-47.8613 -58.9717 -120.088 -94.7754 -198.844 -94.7754zM279.135 400c-114.875 0 -208 -93.125 -208 -208s93.125 -208 208 -208\n+c65.2314 0 123.439 30.0361 161.575 77.0244c-111.611 -21.2568 -215.252 64.0957 -215.252 177.943c0 67.5127 36.9326 126.392 91.6934 157.555c-12.3271 2.27637 -25.0312 3.47754 -38.0166 3.47754z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-left\" unicode=\"&#xf191;\" horiz-adv-x=\"448\" \n+d=\"M272 290.9v-197.801c0 -10.6992 -13 -16.0996 -20.5 -8.5l-98.2998 98.9004c-4.7002 4.7002 -4.7002 12.2002 0 16.9004l98.2998 98.8994c7.5 7.7002 20.5 2.2998 20.5 -8.39941zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352\n+c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM400 22v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"dot-circle\" unicode=\"&#xf192;\" \n+d=\"M256 392c-110.549 0 -200 -89.4678 -200 -200c0 -110.549 89.4678 -200 200 -200c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200zM256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248z\n+M256 272c44.1826 0 80 -35.8174 80 -80s-35.8174 -80 -80 -80s-80 35.8174 -80 80s35.8174 80 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf1ad;\" horiz-adv-x=\"448\" \n+d=\"M128 300v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12zM268 288c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40\n+c0 -6.59961 -5.40039 -12 -12 -12h-40zM140 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM268 192c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40\n+c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM192 108c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM268 96c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-40zM448 -28v-36h-448v36c0 6.59961 5.40039 12 12 12h19.5v440c0 13.2998 10.7002 24 24 24h337c13.2998 0 24 -10.7002 24 -24v-440h19.5\n+c6.59961 0 12 -5.40039 12 -12zM79.5 -15h112.5v67c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-67h112.5v414l-288.5 1z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-pdf\" unicode=\"&#xf1c1;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM298.2 127.7c10.5 -10.5 8 -38.7002 -17.5 -38.7002c-14.7998 0 -36.9004 6.7998 -55.7998 17c-21.6006 -3.59961 -46 -12.7002 -68.4004 -20.0996c-50.0996 -86.4004 -79.4004 -47 -76.0996 -31.2002\n+c4 20 31 35.8994 51 46.2002c10.5 18.3994 25.3994 50.5 35.3994 74.3994c-7.39941 28.6006 -11.3994 51 -7 67.1006c4.7998 17.6992 38.4004 20.2998 42.6006 -5.90039c4.69922 -15.4004 -1.5 -39.9004 -5.40039 -56c8.09961 -21.2998 19.5996 -35.7998 36.7998 -46.2998\n+c17.4004 2.2002 52.2002 5.5 64.4004 -6.5zM100.1 49.9004c0 -0.700195 11.4004 4.69922 30.4004 35c-5.90039 -5.5 -25.2998 -21.3008 -30.4004 -35zM181.7 240.5c-2.5 0 -2.60059 -26.9004 1.7998 -40.7998c4.90039 8.7002 5.59961 40.7998 -1.7998 40.7998zM157.3 103.9\n+c15.9004 6.09961 34 14.8994 54.7998 19.1992c-11.1992 8.30078 -21.7998 20.4004 -30.0996 35.5c-6.7002 -17.6992 -15 -37.7998 -24.7002 -54.6992zM288.9 108.9c3.59961 2.39941 -2.2002 10.3994 -37.3008 7.7998c32.3008 -13.7998 37.3008 -7.7998 37.3008 -7.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-word\" unicode=\"&#xf1c2;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM268.1 192v0.200195h15.8008c7.7998 0 13.5 -7.2998 11.5996 -14.9004c-4.2998 -17 -13.7002 -54.0996 -34.5 -136c-1.2998 -5.39941 -6.09961 -9.09961 -11.5996 -9.09961h-24.7002\n+c-5.5 0 -10.2998 3.7998 -11.6006 9.09961c-5.2998 20.9004 -17.7998 71 -17.8994 71.4004l-2.90039 17.2998c-0.5 -5.2998 -1.5 -11.0996 -3 -17.2998l-17.8994 -71.4004c-1.30078 -5.39941 -6.10059 -9.09961 -11.6006 -9.09961h-25.2002\n+c-5.59961 0 -10.3994 3.7002 -11.6992 9.09961c-6.5 26.5 -25.2002 103.4 -33.2002 136c-1.7998 7.5 3.89941 14.7998 11.7002 14.7998h16.7998c5.7998 0 10.7002 -4.09961 11.7998 -9.69922c5 -25.7002 18.4004 -93.8008 19.0996 -99\n+c0.300781 -1.7002 0.400391 -3.10059 0.5 -4.2002c0.800781 7.5 0.400391 4.7002 24.8008 103.7c1.39941 5.2998 6.19922 9.09961 11.6992 9.09961h13.3008c5.59961 0 10.3994 -3.7998 11.6992 -9.2002c23.9004 -99.7002 22.8008 -94.3994 23.6006 -99.5\n+c0.299805 -1.7002 0.5 -3.09961 0.700195 -4.2998c0.599609 8.09961 0.399414 5.7998 21 103.5c1.09961 5.5 6 9.5 11.6992 9.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-excel\" unicode=\"&#xf1c3;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM260 224c9.2002 0 15 -10 10.2998 -18c-16 -27.5 -45.5996 -76.9004 -46.2998 -78l46.4004 -78c4.59961 -8 -1.10059 -18 -10.4004 -18h-28.7998c-4.40039 0 -8.5 2.40039 -10.6006 6.2998\n+c-22.6992 41.7998 -13.6992 27.5 -28.5996 57.7002c-5.59961 -12.7002 -6.90039 -17.7002 -28.5996 -57.7002c-2.10059 -3.89941 -6.10059 -6.2998 -10.5 -6.2998h-28.9004c-9.2998 0 -15.0996 10 -10.4004 18l46.3008 78l-46.3008 78c-4.59961 8 1.10059 18 10.4004 18\n+h28.9004c4.39941 0 8.5 -2.40039 10.5996 -6.2998c21.7002 -40.4004 14.7002 -28.6006 28.5996 -57.7002c6.40039 15.2998 10.6006 24.5996 28.6006 57.7002c2.09961 3.89941 6.09961 6.2998 10.5 6.2998h28.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-powerpoint\" unicode=\"&#xf1c4;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM120 44v168c0 6.59961 5.40039 12 12 12h69.2002c36.7002 0 62.7998 -27 62.7998 -66.2998c0 -74.2998 -68.7002 -66.5 -95.5 -66.5v-47.2002c0 -6.59961 -5.40039 -12 -12 -12h-24.5c-6.59961 0 -12 5.40039 -12 12z\n+M168.5 131.4h23c7.90039 0 13.9004 2.39941 18.0996 7.19922c8.5 9.80078 8.40039 28.5 0.100586 37.8008c-4.10059 4.59961 -9.90039 7 -17.4004 7h-23.8994v-52h0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-image\" unicode=\"&#xf1c5;\" horiz-adv-x=\"384\" \n+d=\"M369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM332.1 320l-76.0996 76.0996v-76.0996h76.0996zM48 -16h288v288\n+h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416zM80 32v64l39.5 39.5c4.7002 4.7002 12.2998 4.7002 17 0l39.5 -39.5l87.5 87.5c4.7002 4.7002 12.2998 4.7002 17 0l23.5 -23.5v-128h-224zM128 272c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48\n+s21.5 48 48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-archive\" unicode=\"&#xf1c6;\" horiz-adv-x=\"384\" \n+d=\"M128.3 288h32v-32h-32v32zM192.3 384v-32h-32v32h32zM128.3 352h32v-32h-32v32zM192.3 320v-32h-32v32h32zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1\n+c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-48.2998v-16h-32v16h-79.7002v-416h288zM194.2 182.3l17.2998 -87.7002c6.40039 -32.3994 -18.4004 -62.5996 -51.5 -62.5996\n+c-33.2002 0 -58 30.4004 -51.4004 62.9004l19.7002 97.0996v32h32v-32h22.1006c5.7998 0 10.6992 -4.09961 11.7998 -9.7002zM160.3 57.9004c17.9004 0 32.4004 12.0996 32.4004 27c0 14.8994 -14.5 27 -32.4004 27c-17.8994 0 -32.3994 -12.1006 -32.3994 -27\n+c0 -14.9004 14.5 -27 32.3994 -27zM192.3 256v-32h-32v32h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-audio\" unicode=\"&#xf1c7;\" horiz-adv-x=\"384\" \n+d=\"M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320\n+l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM192 60.0244c0 -10.6914 -12.9258 -16.0459 -20.4854 -8.48535l-35.5146 35.9746h-28c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h28\n+l35.5146 36.9473c7.56055 7.56055 20.4854 2.20605 20.4854 -8.48535v-135.951zM233.201 107.154c9.05078 9.29688 9.05957 24.1328 0.000976562 33.4385c-22.1494 22.752 12.2344 56.2461 34.3945 33.4814c27.1982 -27.9404 27.2119 -72.4443 0.000976562 -100.401\n+c-21.793 -22.3857 -56.9463 10.3154 -34.3965 33.4814z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-video\" unicode=\"&#xf1c8;\" horiz-adv-x=\"384\" \n+d=\"M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320\n+l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM276.687 195.303c10.0049 10.0049 27.3135 2.99707 27.3135 -11.3135v-111.976c0 -14.2939 -17.2959 -21.332 -27.3135 -11.3135l-52.6865 52.6738v-37.374\n+c0 -11.0459 -8.9541 -20 -20 -20h-104c-11.0459 0 -20 8.9541 -20 20v104c0 11.0459 8.9541 20 20 20h104c11.0459 0 20 -8.9541 20 -20v-37.374z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-code\" unicode=\"&#xf1c9;\" horiz-adv-x=\"384\" \n+d=\"M149.9 98.9004c3.5 -3.30078 3.69922 -8.90039 0.399414 -12.4004l-17.3994 -18.5996c-1.60059 -1.80078 -4 -2.80078 -6.40039 -2.80078c-2.2002 0 -4.40039 0.900391 -6 2.40039l-57.7002 54.0996c-3.7002 3.40039 -3.7002 9.30078 0 12.8008l57.7002 54.0996\n+c3.40039 3.2998 9 3.2002 12.4004 -0.400391l17.3994 -18.5996l0.200195 -0.200195c3.2002 -3.59961 2.7998 -9.2002 -0.799805 -12.3994l-32.7998 -28.9004l32.7998 -28.9004zM369.9 350.1c9 -9 14.0996 -21.2998 14.0996 -34v-332.1c0 -26.5 -21.5 -48 -48 -48h-288\n+c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48.0996h204.1c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -16v288h-104c-13.2998 0 -24 10.7002 -24 24v104h-160v-416h288zM209.6 234l24.4004 -7\n+c4.7002 -1.2998 7.40039 -6.2002 6 -10.9004l-54.7002 -188.199c-1.2998 -4.60059 -6.2002 -7.40039 -10.8994 -6l-24.4004 7.09961c-4.7002 1.2998 -7.40039 6.2002 -6 10.9004l54.7002 188.1c1.39941 4.7002 6.2002 7.40039 10.8994 6zM234.1 157.1\n+c-3.5 3.30078 -3.69922 8.90039 -0.399414 12.4004l17.3994 18.5996c3.30078 3.60059 8.90039 3.7002 12.4004 0.400391l57.7002 -54.0996c3.7002 -3.40039 3.7002 -9.30078 0 -12.8008l-57.7002 -54.0996c-3.5 -3.2998 -9.09961 -3.09961 -12.4004 0.400391\n+l-17.3994 18.5996l-0.200195 0.200195c-3.2002 3.59961 -2.7998 9.2002 0.799805 12.3994l32.7998 28.9004l-32.7998 28.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"life-ring\" unicode=\"&#xf1cd;\" \n+d=\"M256 -56c-136.967 0 -248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248s-111.033 -248 -248 -248zM152.602 20.7197c63.2178 -38.3184 143.579 -38.3184 206.797 0l-53.4111 53.4111c-31.8467 -13.5215 -68.168 -13.5059 -99.9746 0zM336 192\n+c0 44.1123 -35.8877 80 -80 80s-80 -35.8877 -80 -80s35.8877 -80 80 -80s80 35.8877 80 80zM427.28 88.6016c38.3184 63.2178 38.3184 143.579 0 206.797l-53.4111 -53.4111c13.5215 -31.8467 13.5049 -68.168 0 -99.9746zM359.397 363.28\n+c-63.2168 38.3184 -143.578 38.3184 -206.796 0l53.4111 -53.4111c31.8457 13.5215 68.167 13.5049 99.9736 0zM84.7197 295.398c-38.3184 -63.2178 -38.3184 -143.579 0 -206.797l53.4111 53.4111c-13.5215 31.8467 -13.5059 68.168 0 99.9746z\" \u002F>\n+    \u003Cglyph glyph-name=\"paper-plane\" unicode=\"&#xf1d8;\" \n+d=\"M440 441.5c34.5996 19.9004 77.5996 -8.7998 71.5 -48.9004l-59.4004 -387.199c-2.2998 -14.5 -11.0996 -27.3008 -23.8994 -34.5c-7.2998 -4.10059 -15.4004 -6.2002 -23.6006 -6.2002c-6.19922 0 -12.3994 1.2002 -18.2998 3.59961l-111.899 46.2002l-43.8008 -59.0996\n+c-27.3994 -36.9004 -86.5996 -17.8008 -86.5996 28.5996v84.4004l-114.3 47.2998c-36.7998 15.0996 -40.1006 66 -5.7002 85.8994zM192 -16l36.5996 49.5l-36.5996 15.0996v-64.5996zM404.6 12.7002l59.4004 387.3l-416 -240l107.8 -44.5996l211.5 184.3\n+c14.2002 12.2998 34.4004 -5.7002 23.7002 -21.2002l-140.2 -202.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"futbol\" unicode=\"&#xf1e3;\" horiz-adv-x=\"496\" \n+d=\"M483.8 268.6c42.2998 -130.199 -29 -270.1 -159.2 -312.399c-25.5 -8.2998 -51.2998 -12.2002 -76.6992 -12.2002c-104.5 0 -201.7 66.5996 -235.7 171.4c-42.2998 130.199 29 270.1 159.2 312.399c25.5 8.2998 51.2998 12.2002 76.6992 12.2002\n+c104.5 0 201.7 -66.5996 235.7 -171.4zM409.3 74.9004c6.10059 8.39941 12.1006 16.8994 16.7998 26.1992c14.3008 28.1006 21.5 58.5 21.7002 89.2002l-38.8994 36.4004l-71.1006 -22.1006l-24.3994 -75.1992l43.6992 -60.9004zM409.3 310.3\n+c-24.5 33.4004 -58.7002 58.4004 -97.8994 71.4004l-47.4004 -26.2002v-73.7998l64.2002 -46.5l70.7002 22zM184.9 381.6c-39.9004 -13.2998 -73.5 -38.5 -97.8008 -71.8994l10.1006 -52.5l70.5996 -22l64.2002 46.5v73.7998zM139 68.5l43.5 61.7002l-24.2998 74.2998\n+l-71.1006 22.2002l-39 -36.4004c0.5 -55.7002 23.4004 -95.2002 37.8008 -115.3zM187.2 1.5c64.0996 -20.4004 115.5 -1.7998 121.7 0l22.3994 48.0996l-44.2998 61.7002h-78.5996l-43.6006 -61.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"newspaper\" unicode=\"&#xf1ea;\" horiz-adv-x=\"576\" \n+d=\"M552 384c13.2549 0 24 -10.7451 24 -24v-336c0 -13.2549 -10.7451 -24 -24 -24h-496c-30.9277 0 -56 25.0723 -56 56v272c0 13.2549 10.7451 24 24 24h42.752c6.60547 18.623 24.3896 32 45.248 32h440zM48 56c0 -4.41113 3.58887 -8 8 -8s8 3.58887 8 8v248h-16v-248z\n+M528 48v288h-416v-280c0 -2.7168 -0.204102 -5.38574 -0.578125 -8h416.578zM172 168c-6.62695 0 -12 5.37305 -12 12v96c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-96c0 -6.62695 -5.37305 -12 -12 -12h-136zM200 248v-40h80v40h-80zM160 108v24\n+c0 6.62695 5.37305 12 12 12h136c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-136c-6.62695 0 -12 5.37305 -12 12zM352 108v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104\n+c-6.62695 0 -12 5.37305 -12 12zM352 252v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12zM352 180v24c0 6.62695 5.37305 12 12 12h104c6.62695 0 12 -5.37305 12 -12v-24\n+c0 -6.62695 -5.37305 -12 -12 -12h-104c-6.62695 0 -12 5.37305 -12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell-slash\" unicode=\"&#xf1f6;\" horiz-adv-x=\"640\" \n+d=\"M633.99 -23.0195c6.91016 -5.52051 8.01953 -15.5908 2.5 -22.4902l-10 -12.4902c-5.53027 -6.88965 -15.5898 -8.00977 -22.4902 -2.49023l-598 467.51c-6.90039 5.52051 -8.01953 15.5908 -2.49023 22.4902l10 12.4902\n+c5.52051 6.90039 15.5898 8.00977 22.4902 2.49023zM163.53 80h182.84l61.3994 -48h-279.659c-19.1201 0 -31.9902 15.5996 -32.1006 32c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c18.3701 19.7402 51.5703 49.6904 54.8398 140.42l45.4697 -35.5498\n+c-6.91992 -54.7803 -24.6895 -88.5498 -41.3994 -110.58zM320 352c-23.3496 0 -45 -7.17969 -62.9404 -19.4004l-38.1699 29.8408c19.6807 15.7793 43.1104 27.3096 69.1299 32.7197v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398\n+c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -41.3604 6.03027 -70.7197 14.3398 -92.8496l-59.5293 46.54c-1.63086 13.96 -2.77051 28.8896 -2.79004 45.7295c0 0.200195 0.0595703 0.379883 0.0595703 0.580078c0 61.8604 -50.1396 112 -112 112zM320 -64\n+c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xf1f9;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z\n+M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.13379 -1.96289 3.86523 -5.9082 3.86523 -8.80762\n+c0 -1.95508 -0.864258 -4.87402 -1.92969 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924\n+c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.28613 -1.74512 2.33008 -4.91992 2.33008 -7.08789c0 -2.72363 -1.56055 -6.5 -3.48242 -8.42969z\" \u002F>\n+    \u003Cglyph glyph-name=\"closed-captioning\" unicode=\"&#xf20a;\" \n+d=\"M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM458 48c3.2998 0 6 2.7002 6 6v276c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-276c0 -3.2998 2.7002 -6 6 -6h404z\n+M246.9 133.7c1.69922 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.6006 -56.7998 -172.801 -32.0996 -172.801 67.9004c0 97.2998 121.7 119.5 172.5 70.0996c2.10059 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.89941 -3.09961 -6.19922 -4 -9.09961 -1.7002\n+c-40.7998 32 -94.5996 14.9004 -94.5996 -31.1992c0 -48 51 -70.5 92.1992 -32.6006c2.80078 2.5 7.10059 2.10059 9.2002 -0.899414zM437.3 133.7c1.7002 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.5996 -56.9004 -172.8 -32.0996 -172.8 67.9004\n+c0 97.2998 121.7 119.5 172.5 70.0996c2.09961 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.90039 -3.09961 -6.2002 -4 -9.09961 -1.7002c-40.8008 32 -94.6006 14.9004 -94.6006 -31.1992c0 -48 51 -70.5 92.2002 -32.6006c2.7998 2.5 7.09961 2.10059 9.2002 -0.899414z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"object-group\" unicode=\"&#xf247;\" \n+d=\"M500 320h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v256h-12\n+c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM448 384v-32h32v32h-32zM32 384v-32h32v32h-32zM64 0v32\n+h-32v-32h32zM480 0v32h-32v-32h32zM440 64v256h-12c-6.62695 0 -12 5.37305 -12 12v12h-320v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-256h12c6.62695 0 12 -5.37305 12 -12v-12h320v12c0 6.62695 5.37305 12 12 12h12zM404 256c6.62695 0 12 -5.37207 12 -12v-168\n+c0 -6.62793 -5.37305 -12 -12 -12h-200c-6.62695 0 -12 5.37207 -12 12v52h-84c-6.62695 0 -12 5.37207 -12 12v168c0 6.62793 5.37305 12 12 12h200c6.62695 0 12 -5.37207 12 -12v-52h84zM136 280v-112h144v112h-144zM376 104v112h-56v-76\n+c0 -6.62793 -5.37305 -12 -12 -12h-76v-24h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"object-ungroup\" unicode=\"&#xf248;\" horiz-adv-x=\"576\" \n+d=\"M564 224h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v24h-88v-12\n+c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v72c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h72\n+c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-12v-24h88v12c0 6.62695 5.37305 12 12 12h72c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12zM352 384v-32h32v32h-32zM352 128v-32h32v32h-32zM64 96v32h-32v-32h32zM64 352v32\n+h-32v-32h32zM96 136h224v12c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-12zM224 0v32h-32v-32h32zM504 64v160h-12c-6.62695 0 -12 5.37305 -12 12v12\n+h-88v-88h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-88v-24h12c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h12zM544 0v32h-32v-32h32zM544 256v32h-32v-32h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"sticky-note\" unicode=\"&#xf249;\" horiz-adv-x=\"448\" \n+d=\"M448 99.8936c0 -10.9746 -6.29883 -26.1797 -14.0586 -33.9404l-83.8828 -83.8818c-7.75977 -7.76074 -22.9658 -14.0596 -33.9404 -14.0596h-268.118c-26.5098 0 -48 21.4902 -48 48v351.988c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-268.106z\n+M320 19.8936l76.1182 76.1182h-76.1182v-76.1182zM400 368h-352v-351.988h224v104c0 13.2549 10.7451 24 24 24h104v223.988z\" \u002F>\n+    \u003Cglyph glyph-name=\"clone\" unicode=\"&#xf24d;\" \n+d=\"M464 448c26.5098 0 48 -21.4902 48 -48v-320c0 -26.5098 -21.4902 -48 -48 -48h-48v-48c0 -26.5098 -21.4902 -48 -48 -48h-320c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h48v48c0 26.5098 21.4902 48 48 48h320zM362 -16c3.31152 0 6 2.68848 6 6\n+v42h-224c-26.5098 0 -48 21.4902 -48 48v224h-42c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308zM458 80c3.31152 0 6 2.68848 6 6v308c0 3.31152 -2.68848 6 -6 6h-308c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h308z\" \u002F>\n+    \u003Cglyph glyph-name=\"hourglass\" unicode=\"&#xf254;\" horiz-adv-x=\"384\" \n+d=\"M368 400c0 -80.0996 -31.8984 -165.619 -97.1797 -208c64.9912 -42.1934 97.1797 -127.436 97.1797 -208h4c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-360c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h4\n+c0 80.0996 31.8994 165.619 97.1797 208c-64.9912 42.1934 -97.1797 127.436 -97.1797 208h-4c-6.62695 0 -12 5.37305 -12 12v24c0 6.62695 5.37305 12 12 12h360c6.62695 0 12 -5.37305 12 -12v-24c0 -6.62695 -5.37305 -12 -12 -12h-4zM64 400\n+c0 -101.621 57.3066 -184 128 -184s128 82.3799 128 184h-256zM320 -16c0 101.62 -57.3076 184 -128 184s-128 -82.3799 -128 -184h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-rock\" unicode=\"&#xf255;\" \n+d=\"M408.864 368.948c48.8213 20.751 103.136 -15.0723 103.136 -67.9111v-114.443c0 -15.3955 -3.08887 -30.3906 -9.18262 -44.5674l-42.835 -99.6562c-4.99707 -11.625 -3.98242 -18.8574 -3.98242 -42.3701c0 -17.6729 -14.3271 -32 -32 -32h-252\n+c-17.6729 0 -32 14.3271 -32 32c0 27.3301 1.1416 29.2012 -3.11035 32.9033l-97.71 85.0811c-24.8994 21.6797 -39.1797 52.8926 -39.1797 85.6338v56.9531c0 47.4277 44.8457 82.0215 91.0459 71.1807c1.96094 55.751 63.5107 87.8262 110.671 60.8057\n+c29.1895 31.0713 78.8604 31.4473 108.334 -0.0214844c32.7051 18.6846 76.4121 10.3096 98.8135 -23.5879zM464 186.594v114.445c0 34.29 -52 33.8232 -52 0.676758c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v26.751\n+c0 34.457 -52 33.707 -52 0.676758v-27.4287c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v40.4658c0 34.3525 -52 33.8115 -52 0.677734v-41.1436c0 -8.83594 -7.16406 -16 -16 -16h-7c-8.83594 0 -16 7.16406 -16 16v26.751\n+c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83203 -7.16797 -16 -16 -16c-3.30664 0 -8.01367 1.7627 -10.5068 3.93359l-7 6.09473c-3.03223 2.64062 -5.49316 8.04688 -5.49316 12.0674v0v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531\n+c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c2.91602 6.75391 5.28223 18.207 5.28223 25.5635v0.0488281z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-paper\" unicode=\"&#xf256;\" horiz-adv-x=\"448\" \n+d=\"M372.57 335.359c39.9062 5.63281 75.4297 -25.7393 75.4297 -66.3594v-131.564c-0.00195312 -12.7666 -2.33008 -33.2246 -5.19531 -45.666l-30.1836 -130.958c-3.34668 -14.5234 -16.2783 -24.8125 -31.1816 -24.8125h-222.897\n+c-9.10352 0 -20.7793 6.01758 -26.0615 13.4316l-119.97 168.415c-21.2441 29.8203 -14.8047 71.3574 14.5498 93.1533c18.7754 13.9395 42.1309 16.2979 62.083 8.87109v126.13c0 44.0547 41.125 75.5439 82.4053 64.9834c23.8926 48.1963 92.3535 50.2471 117.982 0.74707\n+c42.5186 11.1445 83.0391 -21.9346 83.0391 -65.5469v-10.8242zM399.997 137.437l-0.00195312 131.563c0 24.9492 -36.5703 25.5508 -36.5703 -0.691406v-76.3086c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v154.184\n+c0 25.501 -36.5703 26.3633 -36.5703 0.691406v-154.875c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v188.309c0 25.501 -36.5703 26.3545 -36.5703 0.691406v-189c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16\n+v153.309c0 25.501 -36.5713 26.3359 -36.5713 0.691406v-206.494c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832l-27.1279 38.0791c-14.3711 20.1709 -43.833 -2.33496 -29.3945 -22.6045l115.196 -161.697h201.92l27.3252 118.551\n+c2.63086 11.417 3.96484 23.1553 3.96484 34.8857z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-scissors\" unicode=\"&#xf257;\" \n+d=\"M256 -32c-44.9561 0 -77.3428 43.2627 -64.0244 85.8535c-21.6484 13.71 -34.0156 38.7617 -30.3408 65.0068h-87.6348c-40.8037 0 -74 32.8105 -74 73.1406c0 40.3291 33.1963 73.1396 74 73.1396l94 -9.14062l-78.8496 18.6787\n+c-38.3076 14.7422 -57.04 57.4707 -41.9424 95.1123c15.0303 37.4736 57.7549 55.7803 95.6416 41.2012l144.929 -55.7568c24.9551 30.5566 57.8086 43.9932 92.2178 24.7324l97.999 -54.8525c20.9746 -11.7393 34.0049 -33.8457 34.0049 -57.6904v-205.702\n+c0 -30.7422 -21.4404 -57.5576 -51.7979 -64.5537l-118.999 -27.4268c-4.97168 -1.14648 -10.0889 -1.72949 -15.2031 -1.72949zM256 16.0127l70 -0.000976562c1.23633 0 3.21777 0.225586 4.42285 0.501953l119.001 27.4277\n+c8.58203 1.97754 14.5762 9.29102 14.5762 17.7812v205.701c0 6.4873 -3.62109 12.542 -9.44922 15.8047l-98 54.8545c-8.13965 4.55566 -18.668 2.61914 -24.4873 -4.50781l-21.7646 -26.6475c-2.65039 -3.24512 -8.20215 -5.87891 -12.3926 -5.87891\n+c-1.64062 0 -4.21484 0.477539 -5.74609 1.06738l-166.549 64.0908c-32.6543 12.5664 -50.7744 -34.5771 -19.2227 -46.7168l155.357 -59.7852c5.66016 -2.17773 10.2539 -8.86816 10.2539 -14.9326v0v-11.6328c0 -8.83691 -7.16309 -16 -16 -16h-182\n+c-34.375 0 -34.4297 -50.2803 0 -50.2803h182c8.83691 0 16 -7.16309 16 -16v-6.85645c0 -8.83691 -7.16309 -16 -16 -16h-28c-25.1221 0 -25.1592 -36.5674 0 -36.5674h28c8.83691 0 16 -7.16211 16 -16v-6.85547c0 -8.83691 -7.16309 -16 -16 -16\n+c-25.1201 0 -25.1602 -36.5674 0 -36.5674z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-lizard\" unicode=\"&#xf258;\" horiz-adv-x=\"576\" \n+d=\"M556.686 157.458c12.6357 -19.4863 19.3145 -42.0615 19.3145 -65.2871v-124.171h-224v71.582l-99.751 38.7871c-2.7832 1.08203 -5.70996 1.63086 -8.69727 1.63086h-131.552c-30.8789 0 -56 25.1211 -56 56c0 48.5234 39.4766 88 88 88h113.709l18.333 48h-196.042\n+c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709v0.0478516c0 11.7461 -5.19141 29.2734 -11.5879 39.124l-146.358 225.715c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917\n+c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8\n+h131.552h0.0517578c7.44141 0 19.1074 -2.19238 26.041 -4.89355l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-spock\" unicode=\"&#xf259;\" \n+d=\"M21.0957 66.21c-26.9688 25.3818 -28.2471 67.7461 -2.87109 94.707c24.1982 25.7139 64.2881 28.2373 91.4824 5.72168l-31.04 136.509c-9.38379 41.2803 21.4336 81.0127 64.0713 81.8438c1.74414 28.9062 22.2656 54.4912 51.8818 61.2949\n+c36.001 8.27539 72.0176 -14.2266 80.3037 -50.2959l21.6748 -131.99l16.9014 105.25c9.02344 36.0947 45.4473 57.7021 81.25 48.75c27.3066 -6.82715 45.7061 -29.1357 49.8496 -53.9922c43.2285 0.212891 75.6436 -40.1133 65.5439 -82.5244l-31.7295 -133.41\n+c-0.938477 -3.94141 -1.41406 -7.99414 -1.41406 -12.0449v-36.8389v-0.00683594c0 -9.29102 -2.14355 -24.0596 -4.78516 -32.9668l-31.8145 -107.312c-4.02734 -13.585 -16.5107 -22.9043 -30.6807 -22.9043h-237.6c-7.00586 0 -16.8311 3.89648 -21.9316 8.69824z\n+M53.1641 128.021c-7.17969 -7.62891 -6.81543 -19.6777 0.813477 -26.8574l124.487 -117.164h219.311l28.4199 95.8613c1.86133 6.27637 2.80469 12.7793 2.80469 19.3281v36.8389c0.000976562 6.48047 1.21973 16.8574 2.71973 23.1621l31.7549 133.407\n+c5.83105 24.4893 -31.1445 33.25 -36.9658 8.80273l-26.9229 -113.105c-1.61523 -6.78711 -8.58887 -12.2949 -15.5645 -12.2949h-9.69434c-10.4072 0 -18.043 9.79199 -15.5225 19.8799l38.127 152.512c6.09766 24.376 -30.7607 33.6396 -36.8643 9.21777l-42.3721 -169.49\n+c-1.67285 -6.68945 -8.62695 -12.1191 -15.5225 -12.1191h-13.2168v0c-7.0332 0 -14.0195 5.5625 -15.5938 12.417l-45.2207 196.828c-5.64453 24.5684 -42.6572 15.9609 -37.0342 -8.50781l41.6191 -181.153c2.30078 -10.0156 -5.31738 -19.583 -15.5938 -19.583h-8.60352\n+h-0.000976562c-7.0498 0 -14.04 5.5791 -15.6025 12.4541l-30.3984 133.757c-5.55273 24.4395 -42.6504 16.1963 -37.0547 -8.4209l34.1299 -150.172c0.263672 -1.16309 0.397461 -2.35352 0.397461 -3.5459v-69.4795c0 -13.9941 -16.7754 -21.2432 -26.9658 -11.6523\n+l-53.0117 49.8936c-7.61523 7.16699 -19.6377 6.85938 -26.8564 -0.8125z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-pointer\" unicode=\"&#xf25a;\" horiz-adv-x=\"448\" \n+d=\"M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -4.25 -0.775391 -11.0615 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286c-21.2588 0 -41.3682 10.4102 -53.791 27.8457\n+l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289\n+c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001\n+c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938\n+c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832z\n+M176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6\n+c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-peace\" unicode=\"&#xf25b;\" horiz-adv-x=\"448\" \n+d=\"M362.146 256.024c42.5908 13.3184 85.8535 -19.0684 85.8535 -64.0244l-0.0117188 -70.001c-0.000976562 -4.25 -0.775391 -11.0615 -1.72949 -15.2031l-27.4268 -118.999c-6.99707 -30.3564 -33.8105 -51.7969 -64.5547 -51.7969h-205.702\n+c-23.8447 0 -45.9502 13.0303 -57.6904 34.0059l-54.8525 97.999c-19.2607 34.4092 -5.82422 67.2617 24.7324 92.2178l-55.7568 144.928c-14.5791 37.8867 3.72754 80.6113 41.2012 95.6416c37.6406 15.0977 80.3691 -3.63477 95.1123 -41.9424l18.6787 -78.8496\n+l-9.14062 94c0 40.8037 32.8096 74 73.1396 74s73.1406 -33.1963 73.1406 -74v-87.6348c26.2451 3.6748 51.2959 -8.69238 65.0068 -30.3408zM399.987 122l-0.000976562 70c0 25.1602 -36.5674 25.1201 -36.5674 0c0 -8.83691 -7.16309 -16 -16 -16h-6.85547\n+c-8.83789 0 -16 7.16309 -16 16v28c0 25.1592 -36.5674 25.1221 -36.5674 0v-28c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v182c0 34.4297 -50.2803 34.375 -50.2803 0v-182c0 -8.83691 -7.16309 -16 -16 -16h-11.6328v0\n+c-6.06445 0 -12.7549 4.59375 -14.9326 10.2539l-59.7842 155.357c-12.1396 31.5518 -59.2842 13.4326 -46.7168 -19.2227l64.0898 -166.549c0.589844 -1.53125 1.06738 -4.10547 1.06738 -5.74609c0 -4.19043 -2.63379 -9.74219 -5.87891 -12.3926l-26.6475 -21.7646\n+c-7.12695 -5.81934 -9.06445 -16.3467 -4.50781 -24.4873l54.8535 -98c3.26367 -5.82812 9.31934 -9.44922 15.8057 -9.44922h205.701c8.49121 0 15.8037 5.99414 17.7812 14.5762l27.4277 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285z\" \u002F>\n+    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xf25d;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z\n+M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096h-0.0126953c-3.97559 0 -8.71582 2.84961 -10.5801 6.36035l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304\n+c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094c20.9131 0 32.4307 11.5186 32.4316 32.4316\n+c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-plus\" unicode=\"&#xf271;\" horiz-adv-x=\"448\" \n+d=\"M336 156v-24c0 -6.59961 -5.40039 -12 -12 -12h-76v-76c0 -6.59961 -5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12v76h-76c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h76v76c0 6.59961 5.40039 12 12 12h24c6.59961 0 12 -5.40039 12 -12\n+v-76h76c6.59961 0 12 -5.40039 12 -12zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40\n+c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-minus\" unicode=\"&#xf272;\" horiz-adv-x=\"448\" \n+d=\"M124 120c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h200c6.59961 0 12 -5.40039 12 -12v-24c0 -6.59961 -5.40039 -12 -12 -12h-200zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52\n+c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-times\" unicode=\"&#xf273;\" horiz-adv-x=\"448\" \n+d=\"M311.7 73.2998l-17 -17c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-53.7002 53.7998l-53.7002 -53.6992c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-17 17c-4.7002 4.69922 -4.7002 12.2998 0 17l53.7002 53.6992l-53.7002 53.7002c-4.7002 4.7002 -4.7002 12.2998 0 17\n+l17 17c4.7002 4.7002 12.2998 4.7002 17 0l53.7002 -53.7002l53.7002 53.7002c4.7002 4.7002 12.2998 4.7002 17 0l17 -17c4.7002 -4.7002 4.7002 -12.2998 0 -17l-53.7998 -53.7998l53.6992 -53.7002c4.80078 -4.7002 4.80078 -12.2998 0.100586 -17zM448 336v-352\n+c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48zM400 -10\n+v298h-352v-298c0 -3.2998 2.7002 -6 6 -6h340c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-check\" unicode=\"&#xf274;\" horiz-adv-x=\"448\" \n+d=\"M400 384c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h48v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h128v52c0 6.62695 5.37305 12 12 12h40\n+c6.62695 0 12 -5.37305 12 -12v-52h48zM394 -16c3.31152 0 6 2.68848 6 6v298h-352v-298c0 -3.31152 2.68848 -6 6 -6h340zM341.151 184.65l-142.31 -141.169c-4.70508 -4.66699 -12.3027 -4.6377 -16.9707 0.0673828l-75.0908 75.6992\n+c-4.66699 4.70508 -4.6377 12.3027 0.0673828 16.9707l22.7197 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l44.1035 -44.4609l111.072 110.182c4.70508 4.66699 12.3027 4.63672 16.9707 -0.0683594l22.5361 -22.7178\n+c4.66699 -4.70508 4.63672 -12.3027 -0.0683594 -16.9697z\" \u002F>\n+    \u003Cglyph glyph-name=\"map\" unicode=\"&#xf279;\" horiz-adv-x=\"576\" \n+d=\"M560.02 416c8.4502 0 15.9805 -6.83008 15.9805 -16.0195v-346.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-151.83 -52.8105c-5.32617 -1.7334 -14.1953 -3.13965 -19.7969 -3.13965c-5.7373 0 -14.8105 1.47363 -20.2529 3.29004l-172 60.71l-170.05 -62.8398\n+c-1.99023 -0.790039 -4 -1.16016 -5.95996 -1.16016c-8.45996 0 -15.9902 6.83008 -15.9902 16.0195v346.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l151.83 52.8105c6.43945 2.08984 13.1201 3.13965 19.8096 3.13965\n+c5.73242 -0.00195312 14.8008 -1.47168 20.2402 -3.28027l172 -60.7197h0.00976562l170.05 62.8398c1.98047 0.790039 4 1.16016 5.95996 1.16016zM224 357.58v-285.97l128 -45.1904v285.97zM48 29.9502l127.36 47.0801l0.639648 0.229492v286.2l-128 -44.5303v-288.979z\n+M528 65.0801v288.97l-127.36 -47.0693l-0.639648 -0.240234v-286.19z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-alt\" unicode=\"&#xf27a;\" \n+d=\"M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.5996c-2.19922 -1.7002 -4.69922 -2.40039 -7.09961 -2.40039c-6.2002 0 -12 4.90039 -12 12v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z\n+M464 96v288c0 8.7998 -7.2002 16 -16 16h-384c-8.7998 0 -16 -7.2002 -16 -16v-288c0 -8.7998 7.2002 -16 16 -16h144v-60l67.2002 50.4004l12.7998 9.59961h160c8.7998 0 16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"pause-circle\" unicode=\"&#xf28b;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48\n+c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16zM240 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-48c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h48c8.7998 0 16 -7.2002 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"stop-circle\" unicode=\"&#xf28d;\" \n+d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM352 272v-160c0 -8.7998 -7.2002 -16 -16 -16h-160\n+c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.2002 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"handshake\" unicode=\"&#xf2b5;\" horiz-adv-x=\"640\" \n+d=\"M519.2 320.1h120.8v-255.699h-64c-17.5 0 -31.7998 14.1992 -31.9004 31.6992h-57.8994c-1.7998 -8.19922 -5.2998 -16.0996 -10.9004 -23l-26.2002 -32.2998c-15.7998 -19.3994 -41.8994 -25.5 -64 -16.7998c-13.5 -16.5996 -30.5996 -24 -48.7998 -24\n+c-15.0996 0 -28.5996 5.09961 -41.0996 15.9004c-31.7998 -21.9004 -74.7002 -21.3008 -105.601 3.7998l-84.5996 76.3994h-9.09961c-0.100586 -17.5 -14.3008 -31.6992 -31.9004 -31.6992h-64v255.699h118l47.5996 47.6006c10.5 10.3994 24.8008 16.2998 39.6006 16.2998\n+h226.8v0c12.7812 0 30.5225 -7.30273 39.5996 -16.2998zM48 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM438 103.3c2.7002 3.40039 2.2002 8.5 -1.2002 11.2998l-108.2 87.8008l-8.19922 -7.5\n+c-40.3008 -36.8008 -86.7002 -11.8008 -101.5 4.39941c-26.7002 29 -25 74.4004 4.39941 101.3l38.7002 35.5h-56.7002c-2 -0.799805 -3.7002 -1.5 -5.7002 -2.2998l-61.6992 -61.5996h-41.9004v-128.101h27.7002l97.2998 -88\n+c16.0996 -13.0996 41.4004 -10.5 55.2998 6.60059l15.6006 19.2002l36.7998 -31.5c3 -2.40039 12 -4.90039 18 2.39941l30 36.5l23.8994 -19.3994c3.5 -2.80078 8.5 -2.2002 11.3008 1.19922zM544 144.1v128h-44.7002l-61.7002 61.6006\n+c-1.39941 1.5 -3.39941 2.2998 -5.5 2.2998l-83.6992 -0.200195c-10 0 -19.6006 -3.7002 -27 -10.5l-65.6006 -60.0996c-9.7002 -8.7998 -10.5 -24 -1.2002 -33.9004c8.90039 -9.39941 25.1006 -8.7002 34.6006 0l55.2002 50.6006c6.5 5.89941 16.5996 5.5 22.5996 -1\n+l10.9004 -11.7002c6 -6.5 5.5 -16.6006 -1 -22.6006l-12.5 -11.3994l102.699 -83.4004c2.80078 -2.2998 5.40039 -4.89941 7.7002 -7.7002h69.2002zM592 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope-open\" unicode=\"&#xf2b6;\" \n+d=\"M494.586 283.484c9.6123 -7.94824 17.4141 -24.5205 17.4141 -36.9932v-262.491c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v262.515c0 12.5166 7.84668 29.1279 17.5146 37.0771c4.08008 3.35449 110.688 89.0996 135.15 108.549\n+c22.6992 18.1426 60.1299 55.8594 103.335 55.8594c43.4365 0 81.2314 -38.1914 103.335 -55.8594c23.5283 -18.707 130.554 -104.773 135.251 -108.656zM464 -10v253.632v0.00488281c0 1.5791 -0.996094 3.66602 -2.22363 4.6582\n+c-15.8633 12.8232 -108.793 87.5752 -132.366 106.316c-17.5527 14.0195 -49.7168 45.3887 -73.4102 45.3887c-23.6016 0 -55.2451 -30.8799 -73.4102 -45.3887c-23.5713 -18.7393 -116.494 -93.4795 -132.364 -106.293\n+c-1.40918 -1.13965 -2.22559 -2.85254 -2.22559 -4.66504v-253.653c0 -3.31152 2.68848 -6 6 -6h404c3.31152 0 6 2.68848 6 6zM432.009 177.704c4.24902 -5.15918 3.46484 -12.7949 -1.74512 -16.9814c-28.9746 -23.2822 -59.2734 -47.5967 -70.9287 -56.8623\n+c-22.6992 -18.1436 -60.1299 -55.8604 -103.335 -55.8604c-43.4521 0 -81.2871 38.2373 -103.335 55.8604c-11.2793 8.9668 -41.7441 33.4131 -70.9268 56.8643c-5.20996 4.1875 -5.99316 11.8223 -1.74512 16.9814l15.2578 18.5283\n+c4.17773 5.07227 11.6572 5.84277 16.7793 1.72559c28.6182 -23.001 58.5654 -47.0352 70.5596 -56.5713c17.5527 -14.0195 49.7168 -45.3887 73.4102 -45.3887c23.6016 0 55.2461 30.8799 73.4102 45.3887c11.9941 9.53516 41.9434 33.5703 70.5625 56.5684\n+c5.12207 4.11621 12.6016 3.3457 16.7783 -1.72656z\" \u002F>\n+    \u003Cglyph glyph-name=\"address-book\" unicode=\"&#xf2b9;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48\n+h320c26.5 0 48 -21.5 48 -48v-48h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM368 -16v416h-320v-416h320zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM118.4 64\n+c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002\n+h-179.199z\" \u002F>\n+    \u003Cglyph glyph-name=\"address-card\" unicode=\"&#xf2bb;\" horiz-adv-x=\"576\" \n+d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v352h-480v-352h480zM208 192c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z\n+M118.4 64c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002\n+c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199zM360 128c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 192c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112\n+c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 256c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-circle\" unicode=\"&#xf2bd;\" horiz-adv-x=\"496\" \n+d=\"M248 344c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96zM248 200c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8\n+c49.7002 0 95.0996 18.2998 130.1 48.4004c-14.8994 23 -40.3994 38.5 -69.5996 39.5c-20.7998 -6.5 -40.5996 -9.60059 -60.5 -9.60059s-39.7002 3.2002 -60.5 9.60059c-29.2002 -0.900391 -54.7002 -16.5 -69.5996 -39.5c35 -30.1006 80.3994 -48.4004 130.1 -48.4004z\n+M410.7 76.0996c23.3994 32.7002 37.2998 72.7002 37.2998 115.9c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -43.2002 13.9004 -83.2002 37.2998 -115.9c24.5 31.4004 62.2002 51.9004 105.101 51.9004c10.1992 0 26.0996 -9.59961 57.5996 -9.59961\n+c31.5996 0 47.4004 9.59961 57.5996 9.59961c43 0 80.7002 -20.5 105.101 -51.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"id-badge\" unicode=\"&#xf2c1;\" horiz-adv-x=\"384\" \n+d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM336 -16v416h-288v-416h288zM144 336c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16\n+h-96zM192 160c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM102.4 32c-12.4004 0 -22.4004 8.59961 -22.4004 19.2002v19.2002c0 31.7998 30.0996 57.5996 67.2002 57.5996c11.3994 0 17.8994 -8 44.7998 -8\n+c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996v-19.2002c0 -10.6006 -10 -19.2002 -22.4004 -19.2002h-179.199z\" \u002F>\n+    \u003Cglyph glyph-name=\"id-card\" unicode=\"&#xf2c2;\" horiz-adv-x=\"576\" \n+d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM528 16v288h-480v-288h32.7998c-1 4.5 -0.799805 -3.59961 -0.799805 22.4004c0 31.7998 30.0996 57.5996 67.2002 57.5996\n+c11.3994 0 17.8994 -8 44.7998 -8c26.0996 0 34 8 44.7998 8c37.1006 0 67.2002 -25.7998 67.2002 -57.5996c0 -26 0.0996094 -17.9004 -0.799805 -22.4004h224.8zM360 96c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16\n+c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 160c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM360 224c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h112\n+c4.40039 0 8 -3.59961 8 -8v-16c0 -4.40039 -3.59961 -8 -8 -8h-112zM192 128c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-maximize\" unicode=\"&#xf2d0;\" \n+d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v234h-416v-234c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-minimize\" unicode=\"&#xf2d1;\" \n+d=\"M480 -32h-448c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h448c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-restore\" unicode=\"&#xf2d2;\" \n+d=\"M464 448c26.5 0 48 -21.5 48 -48v-320c0 -26.5 -21.5 -48 -48 -48h-48v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h48v48c0 26.5 21.5 48 48 48h320zM368 -16v208h-320v-208h320zM464 80v320h-320v-48h224\n+c26.5 0 48 -21.5 48 -48v-224h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"snowflake\" unicode=\"&#xf2dc;\" horiz-adv-x=\"448\" \n+d=\"M440.1 92.7998c7.60059 -4.39941 10.1006 -14.2002 5.5 -21.7002l-7.89941 -13.8994c-4.40039 -7.7002 -14 -10.2998 -21.5 -5.90039l-39.2002 23l9.09961 -34.7002c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.5996l-15.2002 -4.09961\n+c-8.39941 -2.30078 -17.0996 2.7998 -19.2998 11.2998l-21.2998 81l-71.9004 42.2002v-84.5l58.2998 -59.3008c6.10059 -6.19922 6.10059 -16.3994 0 -22.5996l-11.0996 -11.2998c-6.09961 -6.2002 -16.0996 -6.2002 -22.2002 0l-24.8994 25.3994v-46.0996\n+c0 -8.7998 -7 -16 -15.7002 -16h-15.7002c-8.7002 0 -15.7002 7.2002 -15.7002 16v45.9004l-24.8994 -25.4004c-6.10059 -6.2002 -16.1006 -6.2002 -22.2002 0l-11.1006 11.2998c-6.09961 6.2002 -6.09961 16.4004 0 22.6006l58.3008 59.2998v84.5l-71.9004 -42.2002\n+l-21.2998 -81c-2.2998 -8.5 -10.9004 -13.5996 -19.2998 -11.2998l-15.2002 4.09961c-8.40039 2.2998 -13.2998 11.1006 -11.1006 19.6006l9.10059 34.6992l-39.2002 -23c-7.5 -4.39941 -17.2002 -1.7998 -21.5 5.90039l-7.90039 13.9004\n+c-4.2998 7.69922 -1.69922 17.5 5.80078 21.8994l39.1992 23l-34.0996 9.2998c-8.40039 2.30078 -13.2998 11.1006 -11.0996 19.6006l4.09961 15.5c2.2998 8.5 10.9004 13.5996 19.2998 11.2998l79.7002 -21.7002l71.9004 42.2002l-71.9004 42.2002l-79.7002 -21.7002\n+c-8.39941 -2.2998 -17.0996 2.7998 -19.2998 11.2998l-4.09961 15.5c-2.30078 8.5 2.69922 17.2998 11.0996 19.6006l34.0996 9.09961l-39.1992 23c-7.60059 4.5 -10.1006 14.2002 -5.80078 21.9004l7.90039 13.8994c4.40039 7.7002 14 10.2998 21.5 5.90039l39.2002 -23\n+l-9.10059 34.7002c-2.2998 8.5 2.7002 17.2998 11.1006 19.5996l15.2002 4.09961c8.39941 2.30078 17.0996 -2.7998 19.2998 -11.2998l21.2998 -81l71.9004 -42.2002v84.5l-58.3008 59.3008c-6.09961 6.19922 -6.09961 16.3994 0 22.5996l11.5 11.2998\n+c6.10059 6.2002 16.1006 6.2002 22.2002 0l24.9004 -25.3994v46.0996c0 8.7998 7 16 15.7002 16h15.6992c8.7002 0 15.7002 -7.2002 15.7002 -16v-45.9004l24.9004 25.4004c6.09961 6.2002 16.0996 6.2002 22.2002 0l11.0996 -11.2998\n+c6.09961 -6.2002 6.09961 -16.4004 0 -22.6006l-58.2998 -59.2998v-84.5l71.8994 42.2002l21.3008 81c2.2998 8.5 10.8994 13.5996 19.2998 11.2998l15.2002 -4.09961c8.39941 -2.2998 13.2998 -11.1006 11.0996 -19.6006l-9.09961 -34.6992l39.1992 23\n+c7.5 4.39941 17.2002 1.7998 21.5 -5.90039l7.90039 -13.9004c4.2998 -7.69922 1.7002 -17.5 -5.7998 -21.8994l-39.2002 -23l34.0996 -9.2998c8.40039 -2.30078 13.3008 -11.1006 11.1006 -19.6006l-4.10059 -15.5c-2.2998 -8.5 -10.8994 -13.5996 -19.2998 -11.2998\n+l-79.7002 21.7002l-71.8994 -42.2002l71.7998 -42.2002l79.7002 21.7002c8.39941 2.2998 17.0996 -2.7998 19.2998 -11.2998l4.09961 -15.5c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.6006l-34.0996 -9.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash-alt\" unicode=\"&#xf2ed;\" horiz-adv-x=\"448\" \n+d=\"M268 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24zM432 368c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16h-16v-336\n+c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48v336h-16c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h82.4102l34.0195 56.7002c7.71875 12.8613 26.1572 23.2998 41.1572 23.2998h0.00292969h100.82h0.0224609\n+c15 0 33.4385 -10.4385 41.1572 -23.2998l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-0.96582 1.60645 -3.26953 2.91016 -5.14355 2.91016h-0.00683594h-94h-0.0166016c-1.87402 0 -4.17871 -1.30371 -5.14355 -2.91016zM368 -16v336\n+h-288v-336h288zM156 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24z\" \u002F>\n+    \u003Cglyph glyph-name=\"images\" unicode=\"&#xf302;\" horiz-adv-x=\"576\" \n+d=\"M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-48h-10c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v10h48zM522 368h-372\n+c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v244c0 3.31152 -2.68848 6 -6 6zM528 416c26.5098 0 48 -21.4902 48 -48v-256c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256\n+c0 26.5098 21.4902 48 48 48h384zM264 304c0 -22.0908 -17.9092 -40 -40 -40s-40 17.9092 -40 40s17.9092 40 40 40s40 -17.9092 40 -40zM192 208l39.5146 39.5146c4.68652 4.68652 12.2842 4.68652 16.9717 0l39.5137 -39.5146l103.515 103.515\n+c4.68652 4.68652 12.2842 4.68652 16.9717 0l71.5137 -71.5146v-80h-288v48z\" \u002F>\n+    \u003Cglyph glyph-name=\"clipboard\" unicode=\"&#xf328;\" horiz-adv-x=\"384\" \n+d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\n+s-10.7002 24 -24 24zM336 -10v340c0 3.2998 -2.7002 6 -6 6h-42v-36c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v36h-42c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h276c3.2998 0 6 2.7002 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-down\" unicode=\"&#xf358;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM256 -8c110.5 0 200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200zM224 308c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-116\n+h67c10.7002 0 16.0996 -12.9004 8.5 -20.5l-99 -99c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-99 99c-7.5 7.59961 -2.2002 20.5 8.5 20.5h67v116z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-left\" unicode=\"&#xf359;\" \n+d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM456 192c0 110.5 -89.5 200 -200 200s-200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200zM384 212v-40c0 -6.59961 -5.40039 -12 -12 -12h-116v-67\n+c0 -10.7002 -12.9004 -16 -20.5 -8.5l-99 99c-4.7002 4.7002 -4.7002 12.2998 0 17l99 99c7.59961 7.59961 20.5 2.2002 20.5 -8.5v-67h116c6.59961 0 12 -5.40039 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-right\" unicode=\"&#xf35a;\" \n+d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM56 192c0 -110.5 89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200s-200 -89.5 -200 -200zM128 172v40c0 6.59961 5.40039 12 12 12h116v67\n+c0 10.7002 12.9004 16 20.5 8.5l99 -99c4.7002 -4.7002 4.7002 -12.2998 0 -17l-99 -99c-7.59961 -7.59961 -20.5 -2.2002 -20.5 8.5v67h-116c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-up\" unicode=\"&#xf35b;\" \n+d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM256 392c-110.5 0 -200 -89.5 -200 -200s89.5 -200 200 -200s200 89.5 200 200s-89.5 200 -200 200zM276 64h-40c-6.59961 0 -12 5.40039 -12 12v116h-67\n+c-10.7002 0 -16 12.9004 -8.5 20.5l99 99c4.7002 4.7002 12.2998 4.7002 17 0l99 -99c7.59961 -7.59961 2.2002 -20.5 -8.5 -20.5h-67v-116c0 -6.59961 -5.40039 -12 -12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"gem\" unicode=\"&#xf3a5;\" horiz-adv-x=\"576\" \n+d=\"M464 448c4.09961 0 7.7998 -2 10.0996 -5.40039l99.9004 -147.199c2.90039 -4.40039 2.59961 -10.1006 -0.700195 -14.2002l-276 -340.8c-4.7998 -5.90039 -13.7998 -5.90039 -18.5996 0l-276 340.8c-3.2998 4 -3.60059 9.7998 -0.700195 14.2002l100 147.199\n+c2.2002 3.40039 6 5.40039 10 5.40039h352zM444.7 400h-56.7998l51.6992 -96h68.4004zM242.6 400l-51.5996 -96h194l-51.7002 96h-90.7002zM131.3 400l-63.2998 -96h68.4004l51.6992 96h-56.7998zM88.2998 256l119.7 -160l-68.2998 160h-51.4004zM191.2 256l96.7998 -243.3\n+l96.7998 243.3h-193.6zM368 96l119.6 160h-51.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-bill-alt\" unicode=\"&#xf3d1;\" horiz-adv-x=\"640\" \n+d=\"M320 304c53.0195 0 96 -50.1396 96 -112c0 -61.8701 -43 -112 -96 -112c-53.0195 0 -96 50.1504 -96 112c0 61.8604 42.9805 112 96 112zM360 136v16c0 4.41992 -3.58008 8 -8 8h-16v88c0 4.41992 -3.58008 8 -8 8h-13.5801h-0.000976562\n+c-4.01074 0 -9.97266 -1.80566 -13.3086 -4.03027l-15.3301 -10.2197c-1.96777 -1.30957 -3.56445 -4.29004 -3.56445 -6.65332c0 -1.33691 0.601562 -3.32422 1.34375 -4.43652l8.88086 -13.3105c1.30859 -1.9668 4.29004 -3.56445 6.65332 -3.56445\n+c1.33691 0 3.32422 0.602539 4.43652 1.34473l0.469727 0.310547v-55.4404h-16c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h64c4.41992 0 8 3.58008 8 8zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576\n+c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM592 112v160c-35.3496 0 -64 28.6504 -64 64h-416c0 -35.3496 -28.6504 -64 -64 -64v-160c35.3496 0 64 -28.6504 64 -64h416c0 35.3496 28.6504 64 64 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-close\" unicode=\"&#xf410;\" \n+d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v340c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z\n+M356.5 253.4l-61.4004 -61.4004l61.4004 -61.4004c4.59961 -4.59961 4.59961 -12.0996 0 -16.7998l-22.2998 -22.2998c-4.60059 -4.59961 -12.1006 -4.59961 -16.7998 0l-61.4004 61.4004l-61.4004 -61.4004c-4.59961 -4.59961 -12.0996 -4.59961 -16.7998 0\n+l-22.2998 22.2998c-4.59961 4.60059 -4.59961 12.1006 0 16.7998l61.4004 61.4004l-61.4004 61.4004c-4.59961 4.59961 -4.59961 12.0996 0 16.7998l22.2998 22.2998c4.60059 4.59961 12.1006 4.59961 16.7998 0l61.4004 -61.4004l61.4004 61.4004\n+c4.59961 4.59961 12.0996 4.59961 16.7998 0l22.2998 -22.2998c4.7002 -4.60059 4.7002 -12.1006 0 -16.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-dots\" unicode=\"&#xf4ad;\" \n+d=\"M144 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM256 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM368 240c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32\n+s-32 14.2998 -32 32s14.2998 32 32 32zM256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-32.7998 0 -64 5.2002 -92.9004 14.2998c-29.0996 -20.5996 -77.5996 -46.2998 -139.1 -46.2998c-9.59961 0 -18.2998 5.7002 -22.0996 14.5\n+c-3.80078 8.7998 -2 19 4.59961 26c0.5 0.400391 31.5 33.7998 46.4004 73.2002c-33 35.0996 -52.9004 78.7002 -52.9004 126.3c0 114.9 114.6 208 256 208zM256 48c114.7 0 208 71.7998 208 160s-93.2998 160 -208 160s-208 -71.7998 -208 -160\n+c0 -42.2002 21.7002 -74.0996 39.7998 -93.4004l20.6006 -21.7998l-10.6006 -28.0996c-5.5 -14.5 -12.5996 -28.1006 -19.8994 -40.2002c23.5996 7.59961 43.1992 18.9004 57.5 29l19.5 13.7998l22.6992 -7.2002c25.3008 -8 51.7002 -12.0996 78.4004 -12.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile-wink\" unicode=\"&#xf4da;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM365.8 138.4c10.2002 -8.5 11.6006 -23.6006 3.10059 -33.8008\n+c-30 -36 -74.1006 -56.5996 -120.9 -56.5996s-90.9004 20.5996 -120.9 56.5996c-8.39941 10.2002 -7.09961 25.3008 3.10059 33.8008c10.0996 8.39941 25.2998 7.09961 33.7998 -3.10059c20.7998 -25.0996 51.5 -39.3994 84 -39.3994s63.2002 14.3994 84 39.3994\n+c8.5 10.2002 23.5996 11.6006 33.7998 3.10059zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 268c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008l-9.5 8.5\n+c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"angry\" unicode=\"&#xf556;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 136c33.5996 0 65.2002 -14.7998 86.7998 -40.5996\n+c8.40039 -10.2002 7.10059 -25.3008 -3.09961 -33.8008c-10.6006 -8.89941 -25.7002 -6.69922 -33.7998 3c-24.8008 29.7002 -75 29.7002 -99.8008 0c-8.5 -10.1992 -23.5996 -11.5 -33.7998 -3s-11.5996 23.6006 -3.09961 33.8008\n+c21.5996 25.7998 53.2002 40.5996 86.7998 40.5996zM200 208c0 -17.7002 -14.2998 -32.0996 -32 -32.0996s-32 14.2998 -32 32c0 6.19922 2.2002 11.6992 5.2998 16.5996l-28.2002 8.5c-12.6992 3.7998 -19.8994 17.2002 -16.0996 29.9004\n+c3.7998 12.6992 17.0996 20 29.9004 16.0996l80 -24c12.6992 -3.7998 19.8994 -17.2002 16.0996 -29.9004c-3.09961 -10.3994 -12.7002 -17.0996 -23 -17.0996zM399 262.9c3.7998 -12.7002 -3.40039 -26.1006 -16.0996 -29.8008l-28.2002 -8.5\n+c3.09961 -4.89941 5.2998 -10.3994 5.2998 -16.5996c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c-10.2998 0 -19.9004 6.7002 -23 17.0996c-3.7998 12.7002 3.40039 26.1006 16.0996 29.9004l80 24c12.8008 3.7998 26.1006 -3.40039 29.9004 -16.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"dizzy\" unicode=\"&#xf567;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM214.2 209.9\n+c-7.90039 -7.90039 -20.5 -7.90039 -28.4004 -0.200195l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998\n+c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.9004c7.7998 7.7998 20.5 7.7998 28.2998 0s7.7998 -20.5 0 -28.2998l-17.9004 -17.9004l17.9004 -17.7998c7.7998 -7.7998 7.7998 -20.5 0 -28.2998zM374.2 302.1\n+c7.7002 -7.7998 7.7002 -20.3994 0 -28.1992l-17.9004 -17.9004l17.7998 -18c7.80078 -7.7998 7.80078 -20.5 0 -28.2998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0l-17.7998 17.7998l-17.7998 -17.7998c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0\n+c-7.80078 7.7998 -7.80078 20.5 0 28.2998l17.8994 17.9004l-17.8994 17.8994c-7.80078 7.7998 -7.80078 20.5 0 28.2998c7.7998 7.80078 20.5 7.80078 28.2998 0l17.7998 -17.7998l17.9004 17.7998c7.7998 7.80078 20.5 7.80078 28.2998 0zM248 176\n+c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64s-64 28.7002 -64 64s28.7002 64 64 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"flushed\" unicode=\"&#xf579;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM344 304c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80\n+s-80 35.7998 -80 80s35.7998 80 80 80zM344 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM344 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM232 224c0 -44.2002 -35.7998 -80 -80 -80\n+s-80 35.7998 -80 80s35.7998 80 80 80s80 -35.7998 80 -80zM152 176c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM152 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM312 104\n+c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"frown-open\" unicode=\"&#xf57a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32\n+s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM248 160c35.5996 0 88.7998 -21.2998 95.7998 -61.2002c2 -11.7998 -9.09961 -21.5996 -20.5 -18.0996\n+c-31.2002 9.59961 -59.3994 15.2998 -75.2998 15.2998s-44.0996 -5.7002 -75.2998 -15.2998c-11.5 -3.40039 -22.5 6.2998 -20.5 18.0996c7 39.9004 60.2002 61.2002 95.7998 61.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"grimace\" unicode=\"&#xf57f;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM344 192c26.5 0 48 -21.5 48 -48v-32c0 -26.5 -21.5 -48 -48 -48h-192c-26.5 0 -48 21.5 -48 48v32c0 26.5 21.5 48 48 48\n+h192zM176 96v24h-40v-8c0 -8.7998 7.2002 -16 16 -16h24zM176 136v24h-24c-8.7998 0 -16 -7.2002 -16 -16v-8h40zM240 96v24h-48v-24h48zM240 136v24h-48v-24h48zM304 96v24h-48v-24h48zM304 136v24h-48v-24h48zM360 112v8h-40v-24h24c8.7998 0 16 7.2002 16 16zM360 136v8\n+c0 8.7998 -7.2002 16 -16 16h-24v-24h40z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin\" unicode=\"&#xf580;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\n+c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-alt\" unicode=\"&#xf581;\" horiz-adv-x=\"496\" \n+d=\"M200.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56\n+c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM328.3 200c-7.5 -11.4004 -24.5996 -12 -32.7002 0c-12.3994 18.7002 -15.1992 37.2998 -15.6992 56c0.599609 18.7002 3.2998 37.2998 15.6992 56c7.60059 11.4004 24.7002 12 32.7002 0\n+c12.4004 -18.7002 15.2002 -37.2998 15.7002 -56c-0.599609 -18.7002 -3.2998 -37.2998 -15.7002 -56zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200\n+s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006\n+s79.7002 4.7998 105.6 13.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-beam\" unicode=\"&#xf582;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\n+c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM117.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\n+c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996\n+l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002zM277.7 216.3c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998\n+c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-beam-sweat\" unicode=\"&#xf583;\" horiz-adv-x=\"496\" \n+d=\"M440 288c-29.5 0 -53.2998 26.2998 -53.2998 58.7002c0 25 31.7002 75.5 46.2002 97.2998c3.5 5.2998 10.5996 5.2998 14.1992 0c14.5 -21.7998 46.2002 -72.2998 46.2002 -97.2998c0 -32.4004 -23.7998 -58.7002 -53.2998 -58.7002zM248 48\n+c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM378.3 216.3\n+c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\n+c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM483.6 269.2c8 -24.2998 12.4004 -50.2002 12.4004 -77.2002c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248\n+c45.7002 0 88.4004 -12.5996 125.2 -34.2002c-10.9004 -21.5996 -15.5 -36.2002 -17.2002 -45.7002c-31.2002 20.1006 -68.2002 31.9004 -108 31.9004c-110.3 0 -200 -89.7002 -200 -200s89.7002 -200 200 -200s200 89.7002 200 200\n+c0 22.5 -3.90039 44.0996 -10.7998 64.2998c0.399414 0 21.7998 -2.7998 46.3994 12.9004zM168 258.6c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998\n+c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-hearts\" unicode=\"&#xf584;\" horiz-adv-x=\"496\" \n+d=\"M353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM200.8 192.3\n+l-70.2002 18.1006c-20.3994 5.2998 -31.8994 27 -24.1992 47.1992c6.69922 17.7002 26.6992 26.7002 44.8994 22l7.10059 -1.89941l2 7.09961c5.09961 18.1006 22.8994 30.9004 41.5 27.9004c21.3994 -3.40039 34.3994 -24.2002 28.7998 -44.5l-19.4004 -69.9004\n+c-1.2998 -4.5 -6 -7.2002 -10.5 -6zM389.6 257.6c7.7002 -20.1992 -3.7998 -41.7998 -24.1992 -47.0996l-70.2002 -18.2002c-4.60059 -1.2002 -9.2998 1.5 -10.5 6l-19.4004 69.9004c-5.59961 20.2998 7.40039 41.0996 28.7998 44.5c18.7002 3 36.5 -9.7998 41.5 -27.9004\n+l2 -7.09961l7.10059 1.89941c18.2002 4.7002 38.2002 -4.39941 44.8994 -22zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200\n+s89.7002 -200 200 -200z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-squint\" unicode=\"&#xf585;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\n+c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.9004 -123.3 80c-1.7002 9.90039 7.7998 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM118.9 184.2c-3.80078 4.39941 -3.90039 11 -0.100586 15.5l33.6006 40.2998\n+l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5c3.89941 4.40039 10.1992 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5zM361.8 181.7\n+l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5.10059 2.90039 11.5 1.90039 15.2998 -2.5c3.80078 -4.5 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5\n+c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-squint-tears\" unicode=\"&#xf586;\" \n+d=\"M117.1 63.9004c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998\n+c16.8994 16.9004 75.0996 26.9004 100.899 30.6006zM75.9004 105.6c-19.6006 -3.89941 -35.1006 -8.09961 -47.3008 -12.1992c-39.2998 90.5996 -22.0996 199.899 52 274c48.5 48.3994 111.9 72.5996 175.4 72.5996c38.9004 0 77.7998 -9.2002 113.2 -27.4004\n+c-4 -12.1992 -8.2002 -28 -12 -48.2998c-30.4004 17.9004 -65 27.7002 -101.2 27.7002c-53.4004 0 -103.6 -20.7998 -141.4 -58.5996c-61.5996 -61.5 -74.2998 -153.4 -38.6992 -227.801zM428.2 293.2c20.2998 3.89941 36.2002 8 48.5 12\n+c47.8994 -93.2002 32.8994 -210.5 -45.2002 -288.601c-48.5 -48.3994 -111.9 -72.5996 -175.4 -72.5996c-33.6992 0 -67.2998 7 -98.6992 20.5996c4.19922 12.2002 8.2998 27.7002 12.1992 47.2002c26.6006 -12.7998 55.9004 -19.7998 86.4004 -19.7998\n+c53.4004 0 103.6 20.7998 141.4 58.5996c65.6992 65.7002 75.7998 166 30.7998 242.601zM394.9 320.1c-6.30078 -0.899414 -11.7002 4.5 -10.9004 10.9004c3.7002 25.7998 13.7002 84 30.5996 100.9c22 21.8994 57.9004 21.5 80.3008 -0.900391\n+c22.3994 -22.4004 22.7998 -58.4004 0.899414 -80.2998c-16.8994 -16.9004 -75.0996 -26.9004 -100.899 -30.6006zM207.9 211.8c3 -3 4.19922 -7.2998 3.19922 -11.5l-22.5996 -90.5c-1.40039 -5.39941 -6.2002 -9.09961 -11.7002 -9.09961h-0.899414\n+c-5.80078 0.5 -10.5 5.09961 -11 10.8994l-4.80078 52.3008l-52.2998 4.7998c-5.7998 0.5 -10.3994 5.2002 -10.8994 11c-0.400391 5.89941 3.39941 11.2002 9.09961 12.5996l90.5 22.7002c4.2002 1 8.40039 -0.200195 11.4004 -3.2002zM247.6 236.9\n+c-0.0996094 0 -6.39941 -1.80078 -11.3994 3.19922c-3 3 -4.2002 7.30078 -3.2002 11.4004l22.5996 90.5c1.40039 5.7002 7 9.2002 12.6006 9.09961c5.7998 -0.5 10.5 -5.09961 11 -10.8994l4.7998 -52.2998l52.2998 -4.80078c5.7998 -0.5 10.4004 -5.19922 10.9004 -11\n+c0.399414 -5.89941 -3.40039 -11.1992 -9.10059 -12.5996zM299.6 148.4c29.1006 29.0996 53 59.5996 65.3008 83.7998c4.89941 9.2998 17.5996 9.89941 23.3994 1.7002c27.7002 -38.9004 6.10059 -106.9 -30.5996 -143.7s-104.8 -58.2998 -143.7 -30.6006\n+c-8.2998 5.90039 -7.5 18.6006 1.7002 23.4004c24.2002 12.5 54.7998 36.2998 83.8994 65.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-stars\" unicode=\"&#xf587;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM353.6 143.4c10 3.09961 19.3008 -5.5 17.7002 -15.3008\n+c-8 -47.0996 -71.2998 -80 -123.3 -80s-115.4 32.8008 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.3008c26 -8.30078 64.3994 -13.1006 105.6 -13.1006s79.7002 4.7998 105.6 13.1006zM125.7 200.9l6.09961 34.8994l-25.3994 24.6006\n+c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006l34.9004 -5c6.19922 -1 8.7998 -8.69922 4.2998 -13.1992l-25.4004 -24.6006l6 -34.8994c1 -6.2002 -5.39941 -11 -11 -7.90039\n+l-31.2998 16.2998l-31.2998 -16.2998c-5.60059 -3.09961 -12 1.7002 -11 7.90039zM385.4 273.6c6.19922 -1 8.89941 -8.59961 4.39941 -13.1992l-25.3994 -24.6006l6 -34.8994c1 -6.2002 -5.40039 -11 -11 -7.90039l-31.3008 16.2998l-31.2998 -16.2998\n+c-5.59961 -3.09961 -12 1.7002 -11 7.90039l6 34.8994l-25.3994 24.6006c-4.60059 4.59961 -1.90039 12.2998 4.2998 13.1992l34.8994 5l15.5 31.6006c2.90039 5.7998 11 5.7998 13.9004 0l15.5 -31.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tears\" unicode=\"&#xf588;\" horiz-adv-x=\"640\" \n+d=\"M117.1 191.9c6.30078 0.899414 11.7002 -4.5 10.9004 -10.9004c-3.7002 -25.7998 -13.7002 -84 -30.5996 -100.9c-22 -21.8994 -57.9004 -21.5 -80.3008 0.900391c-22.3994 22.4004 -22.7998 58.4004 -0.899414 80.2998c16.8994 16.9004 75.0996 26.9004 100.899 30.6006\n+zM623.8 161.3c21.9004 -21.8994 21.5 -57.8994 -0.799805 -80.2002c-22.4004 -22.3994 -58.4004 -22.7998 -80.2998 -0.899414c-16.9004 16.8994 -26.9004 75.0996 -30.6006 100.899c-0.899414 6.30078 4.5 11.7002 10.8008 10.8008\n+c25.7998 -3.7002 84 -13.7002 100.899 -30.6006zM497.2 99.5996c12.3994 -37.2998 25.0996 -43.7998 28.2998 -46.5c-44.5996 -65.7998 -120 -109.1 -205.5 -109.1s-160.9 43.2998 -205.5 109.1c3.09961 2.60059 15.7998 9.10059 28.2998 46.5\n+c33.4004 -63.8994 100.3 -107.6 177.2 -107.6s143.8 43.7002 177.2 107.6zM122.7 223.5c-2.40039 0.299805 -5 2.5 -49.5 -6.90039c12.3994 125.4 118.1 223.4 246.8 223.4s234.4 -98 246.8 -223.5c-44.2998 9.40039 -47.3994 7.2002 -49.5 7\n+c-15.2002 95.2998 -97.7998 168.5 -197.3 168.5s-182.1 -73.2002 -197.3 -168.5zM320 48c-51.9004 0 -115.3 32.9004 -123.3 80c-1.7002 10 7.89941 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996\n+c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-8 -47.0996 -71.3994 -80 -123.3 -80zM450.3 216.3c-3.09961 -0.899414 -7.2002 0.100586 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17\n+c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998zM240 258.6\n+c-12.2998 0 -23.7998 -7.7998 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004\n+c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue\" unicode=\"&#xf589;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0\n+l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200\n+s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996\n+s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32\n+s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue-squint\" unicode=\"&#xf58a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0\n+l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200\n+s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996\n+s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5l-33.6006 -40.2998\n+l33.6006 -40.2998c3.7002 -4.5 3.7002 -11 -0.100586 -15.5c-3.59961 -4.2002 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 3 11.5 1.90039 15.2998 -2.5zM214.2 250.3\n+c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998s-2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7002 -1.7002 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7002 4.5 -3.7002 11 0.100586 15.5\n+c3.89941 4.5 10.2998 5.5 15.2998 2.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue-wink\" unicode=\"&#xf58b;\" horiz-adv-x=\"496\" \n+d=\"M152 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5\n+c-3.7998 -3.39941 -9.2998 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM328 320c44.2002 0 80 -35.7998 80 -80s-35.7998 -80 -80 -80s-80 35.7998 -80 80s35.7998 80 80 80zM328 192\n+c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM328 264c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248z\n+M312 40h0.0996094v43.7998l-17.6992 8.7998c-15.1006 7.60059 -31.5 -1.69922 -34.9004 -16.5l-2.7998 -12.0996c-2.10059 -9.2002 -15.2002 -9.2002 -17.2998 0l-2.80078 12.0996c-3.39941 14.8008 -19.8994 24 -34.8994 16.5l-17.7002 -8.7998v-42.7998\n+c0 -35.2002 28 -64.5 63.0996 -65c35.8008 -0.5 64.9004 28.4004 64.9004 64zM340.2 14.7002c64 33.3994 107.8 100.3 107.8 177.3c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -77 43.7998 -143.9 107.8 -177.3\n+c-2.2002 8.09961 -3.7998 16.5 -3.7998 25.2998v43.5c-14.2002 12.4004 -24.4004 27.5 -27.2998 44.5c-1.7002 10 7.7998 18.4004 17.7002 15.2998c26 -8.2998 64.3994 -13.0996 105.6 -13.0996s79.7002 4.7998 105.6 13.0996c10 3.2002 19.4004 -5.39941 17.7002 -15.2998\n+c-2.89941 -17 -13.0996 -32.0996 -27.2998 -44.5v-43.5c0 -8.7998 -1.59961 -17.2002 -3.7998 -25.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-wink\" unicode=\"&#xf58c;\" horiz-adv-x=\"496\" \n+d=\"M328 268c25.6904 0 55.8799 -16.9199 59.8701 -42.1201c1.72949 -11.0898 -11.3506 -18.2695 -19.8301 -10.8398l-9.5498 8.47949c-14.8105 13.1904 -46.1602 13.1904 -60.9707 0l-9.5498 -8.47949c-8.33008 -7.40039 -21.5801 -0.379883 -19.8301 10.8398\n+c3.98047 25.2002 34.1699 42.1201 59.8604 42.1201zM168 208c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32s-14.3301 -32 -32 -32zM353.55 143.36c10.04 3.13965 19.3906 -5.4502 17.71 -15.3408\n+c-7.92969 -47.1494 -71.3193 -80.0195 -123.26 -80.0195s-115.33 32.8701 -123.26 80.0195c-1.69043 9.9707 7.76953 18.4707 17.71 15.3408c25.9297 -8.31055 64.3994 -13.0605 105.55 -13.0605s79.6201 4.75977 105.55 13.0605zM248 440c136.97 0 248 -111.03 248 -248\n+s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss\" unicode=\"&#xf596;\" horiz-adv-x=\"496\" \n+d=\"M168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5\n+c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002\n+c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM248 440c137 0 248 -111 248 -248\n+s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss-beam\" unicode=\"&#xf597;\" horiz-adv-x=\"496\" \n+d=\"M168 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17\n+c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8\n+c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM304 140c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5\n+c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002\n+c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM328 296\n+c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.299805 -3.7998 -2 -7.19922 -5.59961 -8.2998c-3.10059 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996c-12.3008 0 -23.8008 -7.89941 -31.5 -21.5996l-9.5 -17\n+c-1.80078 -3.2002 -5.80078 -4.7002 -9.30078 -3.7002c-3.59961 1.10059 -5.89941 4.60059 -5.59961 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss-wink-heart\" unicode=\"&#xf598;\" horiz-adv-x=\"504\" \n+d=\"M304 139.5c0 -13 -13.4004 -27.2998 -35.0996 -36.4004c21.7998 -8.69922 35.1992 -23 35.1992 -36c0 -19.1992 -28.6992 -41.5 -71.5 -44h-0.5c-3.69922 0 -7 2.60059 -7.7998 6.2002c-0.899414 3.7998 1.10059 7.7002 4.7002 9.2002l17 7.2002\n+c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.2002c-6 2.59961 -5.7002 12.3994 0 14.7998l17 7.2002c12.9004 5.5 20.7002 13.5 20.7002 21.5s-7.7998 16 -20.7998 21.5l-16.9004 7.19922c-3.59961 1.5 -5.59961 5.40039 -4.7002 9.2002\n+c0.799805 3.7998 4.40039 6.60059 8.2002 6.2002c42.7002 -2.5 71.5 -24.7998 71.5 -44zM374.5 223c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-2.5 -2.2998 -7.90039 -4.7002 -13.7002 -1.59961c-4.39941 2.39941 -6.89941 7.39941 -6.09961 12.3994\n+c3.89941 25.2002 34.2002 42.1006 59.7998 42.1006s55.7998 -16.9004 59.7998 -42.1006c0.799805 -5 -1.7002 -10 -6.09961 -12.3994c-4.40039 -2.40039 -9.90039 -1.7002 -13.7002 1.59961zM136 239.5c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32\n+s-32 14.2998 -32 32zM501.1 45.5c9.2002 -23.9004 -4.39941 -49.4004 -28.5 -55.7002l-83 -21.5c-5.39941 -1.39941 -10.8994 1.7998 -12.3994 7.10059l-22.9004 82.5996c-6.59961 24 8.7998 48.5996 34 52.5996c22 3.5 43.1006 -11.5996 49 -33l2.2998 -8.39941\n+l8.40039 2.2002c21.5996 5.59961 45.0996 -5.10059 53.0996 -25.9004zM334 11.7002c17.7002 -64 10.9004 -39.5 13.4004 -46.7998c-30.5 -13.4004 -64 -20.9004 -99.4004 -20.9004c-137 0 -248 111 -248 248s111 248 248 248s248 -111 247.9 -248\n+c0 -31.7998 -6.2002 -62.0996 -17.1006 -90c-6 1.5 -12.2002 2.7998 -18.5996 2.90039c-5.60059 9.69922 -13.6006 17.5 -22.6006 23.8994c6.7002 19.9004 10.4004 41.1006 10.4004 63.2002c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200\n+c30.7998 0 59.9004 7.2002 86 19.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh\" unicode=\"&#xf599;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\n+c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM168 224\n+c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-beam\" unicode=\"&#xf59a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\n+c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 296c23.7998 0 52.7002 -29.2998 55.7998 -71.4004c0.700195 -8.5 -10.7998 -11.8994 -14.8994 -4.5\n+l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006c-12.3008 0 -23.8008 -7.90039 -31.5 -21.6006l-9.5 -17c-4.10059 -7.39941 -15.6006 -4.09961 -14.9004 4.5c3.2998 42.1006 32.2002 71.4004 56 71.4004zM127 220.1c-4.2002 -7.39941 -15.7002 -4 -15.0996 4.5\n+c3.2998 42.1006 32.1992 71.4004 56 71.4004c23.7998 0 52.6992 -29.2998 56 -71.4004c0.699219 -8.5 -10.8008 -11.8994 -14.9004 -4.5l-9.5 17c-7.7002 13.7002 -19.2002 21.6006 -31.5 21.6006s-23.7998 -7.90039 -31.5 -21.6006zM362.4 160c8.19922 0 14.5 -7 13.5 -15\n+c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-squint\" unicode=\"&#xf59b;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\n+c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM343.6 252l33.6006 -40.2998c8.59961 -10.4004 -3.90039 -24.7998 -15.4004 -18l-80 48\n+c-7.7998 4.7002 -7.7998 15.8994 0 20.5996l80 48c11.6006 6.7998 24 -7.7002 15.4004 -18zM134.2 193.7c-11.6006 -6.7998 -24.1006 7.59961 -15.4004 18l33.6006 40.2998l-33.6006 40.2998c-8.59961 10.2998 3.7998 24.9004 15.4004 18l80 -48\n+c7.7998 -4.7002 7.7998 -15.8994 0 -20.5996zM362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-wink\" unicode=\"&#xf59c;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM389.4 50.5996c37.7998 37.8008 58.5996 88 58.5996 141.4s-20.7998 103.6 -58.5996 141.4c-37.8008 37.7998 -88 58.5996 -141.4 58.5996s-103.6 -20.7998 -141.4 -58.5996\n+c-37.7998 -37.8008 -58.5996 -88 -58.5996 -141.4s20.7998 -103.6 58.5996 -141.4c37.8008 -37.7998 88 -58.5996 141.4 -58.5996s103.6 20.7998 141.4 58.5996zM328 284c25.7002 0 55.9004 -16.9004 59.7002 -42.0996c1.7998 -11.1006 -11.2998 -18.2002 -19.7998 -10.8008\n+l-9.5 8.5c-14.8008 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5c-8.30078 -7.39941 -21.5 -0.399414 -19.8008 10.8008c4 25.1992 34.2002 42.0996 59.9004 42.0996zM168 224c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\n+M362.4 160c8.19922 0 14.5 -7 13.5 -15c-7.5 -59.2002 -58.9004 -105 -121.101 -105h-13.5996c-62.2002 0 -113.601 45.7998 -121.101 105c-1 8 5.30078 15 13.5 15h228.801z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh-blank\" unicode=\"&#xf5a4;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM168 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32\n+s-32 14.2998 -32 32s14.2998 32 32 32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh-rolling-eyes\" unicode=\"&#xf5a5;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM336 296c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72\n+s-72 32.2002 -72 72s32.2002 72 72 72zM336 184c22.0996 0 40 17.9004 40 40c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998\n+c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998c0 -22.0996 17.9004 -40 40 -40zM232 224c0 -39.7998 -32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72s72 -32.2002 72 -72zM120 224c0 -22.0996 17.9004 -40 40 -40s40 17.9004 40 40\n+c0 13.5996 -7.2998 25.0996 -17.7002 32.2998c1 -2.59961 1.7002 -5.39941 1.7002 -8.2998c0 -13.2998 -10.7002 -24 -24 -24s-24 10.7002 -24 24c0 3 0.700195 5.7002 1.7002 8.2998c-10.4004 -7.2002 -17.7002 -18.7002 -17.7002 -32.2998zM312 96\n+c13.2002 0 24 -10.7998 24 -24s-10.7998 -24 -24 -24h-128c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"sad-cry\" unicode=\"&#xf5b3;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM392 53.5996c34.5996 35.9004 56 84.7002 56 138.4c0 110.3 -89.7002 200 -200 200s-200 -89.7002 -200 -200c0 -53.7002 21.4004 -102.4 56 -138.4v114.4\n+c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-151.4c28.5 -15.5996 61.2002 -24.5996 96 -24.5996s67.5 9 96 24.5996v151.4c0 13.2002 10.7998 24 24 24s24 -10.7998 24 -24v-114.4zM205.8 213.5c-5.7998 -3.2002 -11.2002 -0.700195 -13.7002 1.59961l-9.5 8.5\n+c-14.7998 13.2002 -46.1992 13.2002 -61 0l-9.5 -8.5c-3.7998 -3.39941 -9.2998 -4 -13.6992 -1.59961c-4.40039 2.40039 -6.90039 7.40039 -6.10059 12.4004c3.90039 25.1992 34.2002 42.0996 59.7998 42.0996c25.6006 0 55.8008 -16.9004 59.8008 -42.0996\n+c0.799805 -5 -1.7002 -10 -6.10059 -12.4004zM344 268c25.7002 0 55.9004 -16.9004 59.7998 -42.0996c0.799805 -5 -1.7002 -10 -6.09961 -12.4004c-5.7002 -3.09961 -11.2002 -0.599609 -13.7002 1.59961l-9.5 8.5c-14.7998 13.2002 -46.2002 13.2002 -61 0l-9.5 -8.5\n+c-3.7998 -3.39941 -9.2002 -4 -13.7002 -1.59961c-4.39941 2.40039 -6.89941 7.40039 -6.09961 12.4004c3.89941 25.1992 34.0996 42.0996 59.7998 42.0996zM248 176c30.9004 0 56 -28.7002 56 -64s-25.0996 -64 -56 -64s-56 28.7002 -56 64s25.0996 64 56 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"sad-tear\" unicode=\"&#xf5b4;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM256 144c38.0996 0 74 -16.7998 98.5 -46.0996\n+c8.5 -10.2002 7.09961 -25.3008 -3.09961 -33.8008c-10.6006 -8.7998 -25.7002 -6.69922 -33.8008 3.10059c-15.2998 18.2998 -37.7998 28.7998 -61.5996 28.7998c-13.2002 0 -24 10.7998 -24 24s10.7998 24 24 24zM168 208c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM162.4 173.2c2.7998 3.7002 8.39941 3.7002 11.1992 0c11.4004 -15.2998 36.4004 -50.6006 36.4004 -68.1006\n+c0 -22.6992 -18.7998 -41.0996 -42 -41.0996s-42 18.4004 -42 41.0996c0 17.5 25 52.8008 36.4004 68.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile-beam\" unicode=\"&#xf5b8;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM332 135.4c8.5 10.1992 23.5996 11.5 33.7998 3.09961\n+c10.2002 -8.5 11.6006 -23.5996 3.10059 -33.7998c-30 -36 -74.1006 -56.6006 -120.9 -56.6006s-90.9004 20.6006 -120.9 56.6006c-8.39941 10.2002 -7.09961 25.2998 3.10059 33.7998c10.2002 8.40039 25.2998 7.09961 33.7998 -3.09961\n+c20.7998 -25.1006 51.5 -39.4004 84 -39.4004s63.2002 14.4004 84 39.4004zM136.5 237l-9.5 -17c-1.90039 -3.2002 -5.90039 -4.7998 -9.2998 -3.7002c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004s52.7002 -29.2998 56 -71.4004\n+c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996zM328 296c23.7998 0 52.7002 -29.2998 56 -71.4004\n+c0.299805 -3.7998 -2.09961 -7.19922 -5.7002 -8.2998c-3.09961 -1 -7.2002 0 -9.2998 3.7002l-9.5 17c-7.7002 13.7002 -19.2002 21.5996 -31.5 21.5996s-23.7998 -7.89941 -31.5 -21.5996l-9.5 -17c-1.90039 -3.2002 -5.7998 -4.7998 -9.2998 -3.7002\n+c-3.60059 1.10059 -6 4.60059 -5.7002 8.2998c3.2998 42.1006 32.2002 71.4004 56 71.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"surprise\" unicode=\"&#xf5c2;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM248 168c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64\n+s-64 28.7002 -64 64s28.7002 64 64 64zM200 240c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32zM328 272c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"tired\" unicode=\"&#xf5c8;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 -8c110.3 0 200 89.7002 200 200s-89.7002 200 -200 200s-200 -89.7002 -200 -200s89.7002 -200 200 -200zM377.1 295.8c3.80078 -4.39941 3.90039 -11 0.100586 -15.5\n+l-33.6006 -40.2998l33.6006 -40.2998c3.7998 -4.5 3.7002 -11 -0.100586 -15.5c-3.5 -4.10059 -9.89941 -5.7002 -15.2998 -2.5l-80 48c-3.59961 2.2002 -5.7998 6.09961 -5.7998 10.2998s2.2002 8.09961 5.7998 10.2998l80 48c5 2.90039 11.5 1.90039 15.2998 -2.5z\n+M220 240c0 -4.2002 -2.2002 -8.09961 -5.7998 -10.2998l-80 -48c-5.40039 -3.2002 -11.7998 -1.60059 -15.2998 2.5c-3.80078 4.5 -3.90039 11 -0.100586 15.5l33.6006 40.2998l-33.6006 40.2998c-3.7998 4.5 -3.7002 11 0.100586 15.5\n+c3.7998 4.40039 10.2998 5.5 15.2998 2.5l80 -48c3.59961 -2.2002 5.7998 -6.09961 5.7998 -10.2998zM248 176c45.4004 0 100.9 -38.2998 107.8 -93.2998c1.5 -11.9004 -7 -21.6006 -15.5 -17.9004c-22.7002 9.7002 -56.2998 15.2002 -92.2998 15.2002\n+s-69.5996 -5.5 -92.2998 -15.2002c-8.60059 -3.7002 -17 6.10059 -15.5 17.9004c6.89941 55 62.3994 93.2998 107.8 93.2998z\" \u002F>\n+  \u003C\u002Ffont>\n+\u003C\u002Fdefs>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ffonts\u002Fwebfonts\u002Ffa-solid-900.svg\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4667 +1,4667 @@\n-\u003C?xml version=\"1.0\" standalone=\"no\"?>\r\n-\u003C!--\r\n-Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\r\n-License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\r\n--->\r\n-\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\r\n-\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\r\n-\u003Cmetadata>\r\n-Created by FontForge 20190801 at Mon Sep 23 12:53:50 2019\r\n- By Robert Madole\r\n-Copyright (c) Font Awesome\r\n-\u003C\u002Fmetadata>\r\n-\u003Cdefs>\r\n-\u003Cfont id=\"FontAwesome5Free-Solid\" horiz-adv-x=\"512\" >\r\n-  \u003Cfont-face \r\n-    font-family=\"Font Awesome 5 Free Solid\"\r\n-    font-weight=\"900\"\r\n-    font-stretch=\"normal\"\r\n-    units-per-em=\"512\"\r\n-    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\r\n-    ascent=\"448\"\r\n-    descent=\"-64\"\r\n-    bbox=\"-0.983398 -64.9834 640.104 448.427\"\r\n-    underline-thickness=\"25\"\r\n-    underline-position=\"-50\"\r\n-    unicode-range=\"U+0020-F8D9\"\r\n-  \u002F>\r\n-    \u003Cmissing-glyph \u002F>\r\n-    \u003Cglyph glyph-name=\"glass-martini\" unicode=\"&#xf000;\" \r\n-d=\"M502.05 390.4l-214.05 -214.04v-192.36h56c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v192.36l-214.05 214.04c-21.25 21.2598 -6.2002 57.5996 23.8496 57.5996h444.4\r\n-c30.0498 0 45.0996 -36.3398 23.8496 -57.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"music\" unicode=\"&#xf001;\" \r\n-d=\"M470.38 446.49c2.59277 0.816406 6.90234 1.48047 9.62012 1.48047c17.6475 0 31.9834 -14.3232 32 -31.9707v-352c0 -35.3496 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95898 -0.0488281 23.2949 -1.80957 32 -3.92969v184.609l-256 -75v-233.68\r\n-c0 -35.3398 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95801 -0.0507812 23.2939 -1.80664 32 -3.91992v261.41c0.0078125 12.958 10.0479 26.626 22.4102 30.5098z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search\" unicode=\"&#xf002;\" \r\n-d=\"M505 5.2998c9.2998 -9.39941 9.2998 -24.5996 -0.0996094 -34l-28.3008 -28.2998c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0l-99.7002 99.7002c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208\r\n-s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7zM208 112c70.7998 0 128 57.2998 128 128c0 70.7998 -57.2998 128 -128 128c-70.7998 0 -128 -57.2998 -128 -128c0 -70.7998 57.2998 -128 128 -128z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" \r\n-d=\"M462.3 385.4c62.7998 -53.6006 66.1006 -149.801 9.7998 -207.9l-193.5 -199.8c-12.5 -12.9004 -32.7998 -12.9004 -45.2998 0l-193.5 199.8c-56.2002 58.0996 -52.8994 154.3 9.90039 207.9c54.7998 46.6992 136.399 38.2998 186.6 -13.6006l19.7002 -20.2998\r\n-l19.7002 20.2998c50.2998 51.9004 131.8 60.2998 186.6 13.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"576\" \r\n-d=\"M259.3 430.2c11.7998 23.8994 45.7002 23.5996 57.4004 0l65.2998 -132.4l146.1 -21.2998c26.2002 -3.7998 36.7002 -36.0996 17.7002 -54.5996l-105.7 -103l25 -145.5c4.5 -26.3008 -23.1992 -45.9004 -46.3994 -33.7002l-130.7 68.7002l-130.7 -68.7002\r\n-c-23.2002 -12.2998 -50.8994 7.39941 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"448\" \r\n-d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\r\n-c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"film\" unicode=\"&#xf008;\" \r\n-d=\"M488 384c13.2998 0 24 -10.7002 24 -24v-336c0 -13.2998 -10.7002 -24 -24 -24h-8v20c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-20h-320v20c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-20h-8\r\n-c-13.2998 0 -24 10.7002 -24 24v336c0 13.2998 10.7002 24 24 24h8v-20c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v20h320v-20c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v20h8zM96 76v40c0 6.59961 -5.40039 12 -12 12h-40\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM96 172v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM96 268v40\r\n-c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM368 60v96c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-96c0 -6.59961 5.40039 -12 12 -12h200\r\n-c6.59961 0 12 5.40039 12 12zM368 228v96c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-96c0 -6.59961 5.40039 -12 12 -12h200c6.59961 0 12 5.40039 12 12zM480 76v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40\r\n-c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 172v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 268v40c0 6.59961 -5.40039 12 -12 12h-40\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th-large\" unicode=\"&#xf009;\" \r\n-d=\"M296 416h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v160c0 13.2549 10.7451 24 24 24zM216 416c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192\r\n-c-13.2549 0 -24 10.7451 -24 24v160c0 13.2549 10.7451 24 24 24h192zM0 152c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v160zM296 -32c-13.2549 0 -24 10.7451 -24 24v160\r\n-c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th\" unicode=\"&#xf00a;\" \r\n-d=\"M149.333 392v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24zM330.667 152c0 -13.2549 -10.7451 -24 -24.001 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80\r\n-c0 13.2549 10.7451 24 24 24h101.334c13.2549 0 24 -10.7451 24 -24v-80zM362.667 392c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM330.667 312\r\n-c0 -13.2549 -10.7451 -24 -24.001 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.334c13.2549 0 24 -10.7451 24 -24v-80zM125.333 256c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333\r\n-c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333zM0 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM386.667 128\r\n-c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333zM386.667 -32c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24\r\n-v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333zM181.333 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"th-list\" unicode=\"&#xf00b;\" \r\n-d=\"M149.333 232v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24zM0 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80\r\n-c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM125.333 416c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333zM205.333 -32\r\n-c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-282.667zM181.333 392c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80\r\n-c0 -13.2549 -10.7451 -24 -24 -24h-282.667c-13.2549 0 -24 10.7451 -24 24v80zM205.333 128c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-282.667z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check\" unicode=\"&#xf00c;\" \r\n-d=\"M173.898 8.5957l-166.4 166.4c-9.99707 9.99707 -9.99707 26.2061 0 36.2041l36.2031 36.2041c9.99707 9.99805 26.207 9.99805 36.2041 0l112.095 -112.095l240.095 240.095c9.99707 9.99707 26.207 9.99707 36.2041 0l36.2031 -36.2041\r\n-c9.99707 -9.99707 9.99707 -26.2061 0 -36.2041l-294.4 -294.401c-9.99805 -9.99707 -26.207 -9.99707 -36.2031 0.000976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"times\" unicode=\"&#xf00d;\" horiz-adv-x=\"352\" \r\n-d=\"M242.72 192l100.07 -100.07c12.2803 -12.29 12.2803 -32.1992 0 -44.4795l-22.2402 -22.2402c-12.2803 -12.2803 -32.2002 -12.2803 -44.4795 0l-100.07 100.07l-100.07 -100.07c-12.2793 -12.2803 -32.1992 -12.2803 -44.4795 0l-22.2402 22.2402\r\n-c-12.2803 12.29 -12.2803 32.2002 0 44.4795l100.07 100.07l-100.07 100.07c-12.2803 12.29 -12.2803 32.1992 0 44.4795l22.2402 22.2402c12.29 12.2803 32.2002 12.2803 44.4795 0l100.07 -100.07l100.07 100.07c12.29 12.2803 32.1992 12.2803 44.4795 0\r\n-l22.2402 -22.2402c12.2803 -12.29 12.2803 -32.2002 0 -44.4795z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search-plus\" unicode=\"&#xf00e;\" \r\n-d=\"M304 256v-32c0 -6.59961 -5.40039 -12 -12 -12h-56v-56c0 -6.59961 -5.40039 -12 -12 -12h-32c-6.59961 0 -12 5.40039 -12 12v56h-56c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h56v56c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12\r\n-v-56h56c6.59961 0 12 -5.40039 12 -12zM505 -28.7002l-28.2998 -28.2998c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-99.7998 99.7002c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208\r\n-s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7l99.7002 -99.7002c9.2998 -9.39941 9.2998 -24.5996 0 -34zM344 240c0 75.2002 -60.7998 136 -136 136s-136 -60.7998 -136 -136\r\n-s60.7998 -136 136 -136s136 60.7998 136 136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search-minus\" unicode=\"&#xf010;\" \r\n-d=\"M304 256v-32c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM505 -28.7002l-28.2998 -28.2998c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-99.7998 99.7002\r\n-c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7l99.7002 -99.7002\r\n-c9.2998 -9.39941 9.2998 -24.5996 0 -34zM344 240c0 75.2002 -60.7998 136 -136 136s-136 -60.7998 -136 -136s60.7998 -136 136 -136s136 60.7998 136 136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"power-off\" unicode=\"&#xf011;\" \r\n-d=\"M400 393.9c63 -45 104 -118.601 104 -201.9c0 -136.8 -110.8 -247.7 -247.5 -248c-136.5 -0.299805 -248.3 111 -248.5 247.6c-0.0996094 83.3008 40.9004 157.101 103.8 202.2c11.7002 8.2998 28 4.7998 35 -7.7002l15.7998 -28.0996\r\n-c5.90039 -10.5 3.10059 -23.7998 -6.59961 -31c-41.5 -30.7998 -68 -79.5996 -68 -134.9c-0.0996094 -92.2998 74.5 -168.1 168 -168.1c91.5996 0 168.6 74.2002 168 169.1c-0.299805 51.8008 -24.7002 101.801 -68.0996 134c-9.7002 7.2002 -12.4004 20.5 -6.5 30.9004\r\n-l15.7998 28.0996c7 12.4004 23.2002 16.1006 34.7998 7.80078zM296 184c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v240c0 13.2998 10.7002 24 24 24h32c13.2998 0 24 -10.7002 24 -24v-240z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"signal\" unicode=\"&#xf012;\" horiz-adv-x=\"640\" \r\n-d=\"M216 160c8.83984 0 16 -7.16016 16 -16v-192c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v192c0 8.83984 7.16016 16 16 16h48zM88 64c8.83984 0 16 -7.16016 16 -16v-96c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v96\r\n-c0 8.83984 7.16016 16 16 16h48zM344 256c8.83984 0 16 -7.16016 16 -16v-288c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v288c0 8.83984 7.16016 16 16 16h48zM472 352c8.83984 0 16 -7.16016 16 -16v-384c0 -8.83984 -7.16016 -16 -16 -16h-48\r\n-c-8.83984 0 -16 7.16016 -16 16v384c0 8.83984 7.16016 16 16 16h48zM600 448c8.83984 0 16 -7.16016 16 -16v-480c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v480c0 8.83984 7.16016 16 16 16h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cog\" unicode=\"&#xf013;\" \r\n-d=\"M487.4 132.3c4.89941 -2.7998 7.09961 -8.59961 5.59961 -14.0996c-11.0996 -35.7002 -30 -67.9004 -54.7002 -94.6006c-3.7998 -4.19922 -9.89941 -5.09961 -14.7998 -2.2998l-42.5996 24.6006c-18 -15.3008 -38.6006 -27.2002 -60.8008 -35.1006v-49.2002\r\n-c0 -5.59961 -3.89941 -10.5 -9.39941 -11.6992c-34.9004 -7.80078 -72.5 -8.2002 -109.2 0c-5.5 1.19922 -9.40039 6.09961 -9.40039 11.6992v49.2002c-22.2998 7.7998 -42.8994 19.7002 -60.7998 35.1006l-42.5996 -24.6006c-4.7998 -2.7998 -11 -1.7998 -14.7998 2.2998\r\n-c-24.7002 26.8008 -43.6006 59 -54.7002 94.6006c-1.60059 5.39941 0.599609 11.2002 5.5 14l42.5996 24.5996c-4.2998 23.2002 -4.2998 47 0 70.2002l-42.5996 24.5996c-4.90039 2.80078 -7.2002 8.60059 -5.5 14c11.0996 35.7002 30 67.9004 54.7002 94.6006\r\n-c3.7998 4.2002 9.89941 5.09961 14.7998 2.2998l42.5 -24.5996c18 15.2998 38.5996 27.1992 60.7998 35.0996v49.2002c0 5.59961 3.90039 10.5 9.40039 11.7002c34.8994 7.7998 72.5 8.19922 109.199 0c5.5 -1.2002 9.40039 -6.10059 9.40039 -11.7002v-49.1006\r\n-c22.2998 -7.7998 42.9004 -19.6992 60.7998 -35.0996l42.6006 24.5996c4.7998 2.80078 11 1.80078 14.7998 -2.2998c24.7002 -26.7998 43.5996 -59 54.7002 -94.5996c1.59961 -5.40039 -0.600586 -11.2002 -5.5 -14l-42.6006 -24.6006\r\n-c4.2998 -23.1992 4.2998 -47 0 -70.1992zM256 112c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"home\" unicode=\"&#xf015;\" horiz-adv-x=\"576\" \r\n-d=\"M280.37 299.74c1.84863 1.49023 5.27539 2.69922 7.64941 2.69922c2.375 0 5.80176 -1.20898 7.65039 -2.69922l184.33 -151.74v-164c0 -8.83203 -7.16797 -16 -16 -16l-112.02 0.30957h-0.000976562c-8.83203 0 -16 7.16797 -16 16\r\n-c0 0.0146484 0 0.0371094 0.000976562 0.0507812v95.6396c0 8.83203 -7.16895 16 -16 16h-64c-8.83203 0 -16 -7.16797 -16 -16v-95.71v0c0 -8.78809 -7.13281 -15.9561 -15.9209 -16l-112.06 -0.290039c-8.83203 0 -16 7.16797 -16 16v163.89zM571.6 196.53\r\n-c2.44531 -1.98828 4.42969 -6.15918 4.42969 -9.31055c0 -2.37305 -1.22266 -5.78613 -2.72949 -7.62012l-25.5 -31c-1.98633 -2.40332 -6.13086 -4.35449 -9.24902 -4.35449c-2.38574 0 -5.81348 1.23438 -7.65039 2.75488l-235.23 193.74\r\n-c-1.84863 1.49023 -5.27539 2.69922 -7.65039 2.69922c-2.37402 0 -5.80078 -1.20898 -7.64941 -2.69922l-235.22 -193.74c-1.83691 -1.5166 -5.26074 -2.74805 -7.64258 -2.74805c-3.12793 0 -7.28027 1.96191 -9.26758 4.37793l-25.5 31\r\n-c-1.52051 1.83789 -2.75488 5.26562 -2.75488 7.65039c0 3.11914 1.95117 7.2627 4.35449 9.25l253.13 208.47c7.33594 6.03613 21 10.9355 30.5 10.9355c9.50098 0 23.1641 -4.89941 30.5 -10.9355l89.5303 -73.6602v72.6104c0 6.62402 5.37598 12 12 12h56\r\n-c6.62402 0 12 -5.37598 12 -12v-138.51z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clock\" unicode=\"&#xf017;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM313.1 89.9004c5.40039 -3.90039 12.9004 -2.7002 16.8008 2.59961l28.1992 38.7998c3.90039 5.40039 2.80078 12.9004 -2.59961 16.7998l-63.5 46.2002v137.7\r\n-c0 6.59961 -5.40039 12 -12 12h-48c-6.59961 0 -12 -5.40039 -12 -12v-168.3c0 -3.7998 1.7998 -7.40039 4.90039 -9.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"road\" unicode=\"&#xf018;\" horiz-adv-x=\"576\" \r\n-d=\"M573.19 45.3301c9.25977 -21.1904 -5.5 -45.3301 -27.7305 -45.3301h-196.84l-10.3105 97.6797c-0.859375 8.14062 -7.71973 14.3203 -15.9092 14.3203h-68.8008c-8.18945 0 -15.0498 -6.17969 -15.9092 -14.3203l-10.3105 -97.6797h-196.84\r\n-c-22.2305 0 -36.9902 24.1396 -27.7402 45.3301l139.79 320c4.96973 11.3799 15.7998 18.6699 27.7305 18.6699h97.5898l-2.4502 -23.1602c-0.5 -4.71973 3.20996 -8.83984 7.95996 -8.83984h29.1602c4.75 0 8.45996 4.12012 7.95996 8.83984l-2.4502 23.1602h97.5898\r\n-c11.9199 0 22.75 -7.29004 27.7207 -18.6699zM260.4 312.84l-4.59082 -43.5801c-0.75 -7.08984 4.80078 -13.2598 11.9307 -13.2598h40.54c7.12012 0 12.6797 6.16992 11.9297 13.2598l-4.59961 43.5801c-0.430664 4.07031 -3.87012 7.16016 -7.95996 7.16016h-39.29\r\n-h-0.00488281c-3.97363 0 -7.53809 -3.20801 -7.95508 -7.16016zM315.64 144c9.5 0 16.9102 8.23047 15.9102 17.6797l-5.06934 48c-0.860352 8.14062 -7.7207 14.3203 -15.9102 14.3203h-45.1504c-8.18945 0 -15.0498 -6.17969 -15.9102 -14.3203l-5.06934 -48\r\n-c-1 -9.44922 6.40918 -17.6797 15.9092 -17.6797h55.29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"download\" unicode=\"&#xf019;\" \r\n-d=\"M216 448h80c13.2998 0 24 -10.7002 24 -24v-168h87.7002c17.7998 0 26.7002 -21.5 14.0996 -34.0996l-152.1 -152.2c-7.5 -7.5 -19.7998 -7.5 -27.2998 0l-152.301 152.2c-12.5996 12.5996 -3.69922 34.0996 14.1006 34.0996h87.7998v168c0 13.2998 10.7002 24 24 24z\r\n-M512 72v-112c0 -13.2998 -10.7002 -24 -24 -24h-464c-13.2998 0 -24 10.7002 -24 24v112c0 13.2998 10.7002 24 24 24h146.7l49 -49c20.0996 -20.0996 52.5 -20.0996 72.5996 0l49 49h146.7c13.2998 0 24 -10.7002 24 -24zM388 -16c0 11 -9 20 -20 20s-20 -9 -20 -20\r\n-s9 -20 20 -20s20 9 20 20zM452 -16c0 11 -9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20s20 9 20 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"inbox\" unicode=\"&#xf01c;\" horiz-adv-x=\"576\" \r\n-d=\"M567.938 204.092c4.4502 -6.6748 8.06152 -18.6025 8.06152 -26.624v-0.000976562v-129.467c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v129.467v0.000976562c0 8.02148 3.61133 19.9492 8.06152 26.624l105.689 158.534\r\n-c7.86621 11.7988 25.7578 21.374 39.9385 21.374h268.621c14.1807 0 32.0732 -9.57617 39.9395 -21.374zM162.252 320l-85.334 -128h123.082l32 -64h112l32 64h123.082l-85.333 128h-251.497z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"redo\" unicode=\"&#xf01e;\" \r\n-d=\"M500.33 448c6.62402 0 12 -5.37598 12 -12v-200.34c0 -6.62402 -5.37598 -12 -12 -12h-200.33c-6.62402 0 -12 5.37598 -12 12v47.4102v0.0136719c0 6.62402 5.37598 12 12 12c0.157227 0 0.413086 -0.00683594 0.570312 -0.0136719l101.529 -4.87012\r\n-c-28.8721 42.9609 -94.3145 77.8281 -146.076 77.8281c-97.1514 0 -176 -78.8486 -176 -176c0 -97.1523 78.8486 -176 176 -176c36.6543 0 88.7373 19.6504 116.257 43.8613c1.87207 1.63672 5.40918 2.96387 7.89551 2.96387c2.74316 0 6.54395 -1.57422 8.48438 -3.51367\r\n-l34 -34c1.94141 -1.94043 3.51758 -5.74316 3.51758 -8.48828c0 -2.96094 -1.79102 -6.9668 -3.99805 -8.94141c-38.9707 -35.2783 -113.264 -63.9102 -165.831 -63.9102h-0.348633c-136.9 0 -247.9 110.93 -248 247.81c-0.0996094 136.66 111.34 248.19 248 248.19\r\n-h0.272461c63.2246 0 147.739 -39.124 188.647 -87.3301l-4 82.7598c-0.0078125 0.157227 -0.0136719 0.413086 -0.0136719 0.570312c0 6.62402 5.37598 12 12 12h0.0136719h47.4102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sync\" unicode=\"&#xf021;\" \r\n-d=\"M440.65 435.43c-0.0078125 0.157227 -0.0136719 0.413086 -0.0136719 0.570312c0 6.62012 5.37305 11.9961 11.9932 12h47.3701c6.62402 0 12 -5.37598 12 -12v-200.35c0 -6.62402 -5.37598 -12 -12 -12h-200.22c-6.62402 0 -12 5.37598 -12 12v47.4092v0.0136719\r\n-c0 6.62402 5.37598 12 12 12c0.157227 0 0.412109 -0.00585938 0.569336 -0.0136719l101.46 -4.85938c-28.8584 42.9248 -94.2598 77.7627 -145.984 77.7627c-76.4834 0 -153.099 -60.3467 -171.016 -134.703c-1.19727 -5.10547 -6.4248 -9.25391 -11.6699 -9.25977\r\n-h-49.0498c-6.62402 0 -12 5.37598 -12 12c0 0.606445 0.0898438 1.58301 0.200195 2.17969c21.6201 114.9 122.44 201.82 243.54 201.82h0.28418c63.2031 0 147.667 -39.1279 188.536 -87.3398zM255.83 16c76.4971 0 153.144 60.3633 171.03 134.74\r\n-c1.19727 5.10547 6.4248 9.25391 11.6699 9.25977h49.0498c6.62402 0 12 -5.37598 12 -12c0 -0.606445 -0.0898438 -1.58301 -0.200195 -2.17969c-21.6201 -114.9 -122.439 -201.82 -243.55 -201.82h-0.234375c-63.1289 0 -147.53 39.0518 -188.396 87.1699\r\n-l4.14941 -82.5703c0.00878906 -0.165039 0.015625 -0.433594 0.015625 -0.599609c0 -6.62402 -5.37598 -12 -12 -12h-0.015625h-47.3496c-6.62402 0 -12 5.37598 -12 12v200.33c0 6.62402 5.37598 12 12 12h200.2c6.62402 0 12 -5.37598 12 -12v-47.4004v-0.0136719\r\n-c0 -6.62402 -5.37598 -12 -12 -12c-0.157227 0 -0.413086 0.00683594 -0.570312 0.0136719l-101.8 4.87012c28.7998 -42.9453 94.1406 -77.7998 145.85 -77.7998h0.150391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list-alt\" unicode=\"&#xf022;\" \r\n-d=\"M464 -32h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM128 328c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM128 232\r\n-c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM128 136c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM416 272v32c0 6.62695 -5.37305 12 -12 12h-200\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12zM416 176v32c0 6.62695 -5.37305 12 -12 12h-200c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12zM416 80v32\r\n-c0 6.62695 -5.37305 12 -12 12h-200c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lock\" unicode=\"&#xf023;\" horiz-adv-x=\"448\" \r\n-d=\"M400 224c26.5 0 48 -21.5 48 -48v-192c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v192c0 26.5 21.5 48 48 48h24v72c0 83.7998 68.2002 152 152 152s152 -68.2002 152 -152v-72h24zM296 224v72c0 39.7002 -32.2998 72 -72 72s-72 -32.2998 -72 -72v-72h144\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" \r\n-d=\"M349.565 349.217c40.4951 0 82.6113 15.9062 116.949 31.8545c21.2168 9.85352 45.4854 -5.62305 45.4854 -29.0166v-243.1c0 -10.5264 -5.16016 -20.4072 -13.8428 -26.3584c-35.8379 -24.5635 -74.3359 -40.8574 -122.505 -40.8574\r\n-c-67.373 0 -111.629 34.7832 -165.218 34.7832c-50.8525 0 -86.124 -10.0586 -114.435 -22.1221v-94.4004c0 -13.2549 -10.7451 -24 -24 -24h-16c-13.2549 0 -24 10.7451 -24 24v386.055c-14.5029 10.1201 -24 26.9189 -24 45.9453\r\n-c0 31.7041 26.3447 57.2539 58.3379 55.9521c28.4678 -1.1582 51.7793 -23.9668 53.5508 -52.4033c0.0625 -0.980469 0.113281 -2.57324 0.113281 -3.55566c0 -5.71094 -1.65723 -14.6738 -3.69922 -20.0059c20.7363 7.62891 43.0898 12.0127 68.0449 12.0127\r\n-c67.373 0 111.63 -34.7832 165.218 -34.7832z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"headphones\" unicode=\"&#xf025;\" \r\n-d=\"M256 416c141.504 0 256 -114.521 256 -256v-48c0 -10.917 -7.9248 -23.7402 -17.6904 -28.6221l-14.3818 -7.19141c-2.01074 -60.0889 -51.3486 -108.187 -111.928 -108.187h-24c-13.2549 0 -24 10.7451 -24 24v176c0 13.2549 10.7451 24 24 24h24\r\n-c31.3418 0 59.6709 -12.8789 80 -33.627v1.62695c0 105.869 -86.1309 192 -192 192s-192 -86.1309 -192 -192v-1.62695c20.3291 20.748 48.6582 33.627 80 33.627h24c13.2549 0 24 -10.7451 24 -24v-176c0 -13.2549 -10.7451 -24 -24 -24h-24\r\n-c-60.5791 0 -109.917 48.0967 -111.928 108.187l-14.3828 7.19141c-9.76465 4.88184 -17.6895 17.7051 -17.6895 28.6221v0v48c0 141.504 114.52 256 256 256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume-off\" unicode=\"&#xf026;\" horiz-adv-x=\"256\" \r\n-d=\"M215 377c15 15 41 4.46973 41 -17v-336c0 -21.4697 -26 -32 -41 -17l-88.9404 89h-102.06c-13.248 0 -24 10.752 -24 24v144c0 13.248 10.752 24 24 24h102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume-down\" unicode=\"&#xf027;\" horiz-adv-x=\"384\" \r\n-d=\"M215.03 375.96c15.0098 15 40.9697 4.49023 40.9697 -16.9795v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM338.23 267.88\r\n-c28.2393 -15.5498 45.7793 -44.9902 45.7793 -76.8701s-17.54 -61.3301 -45.7695 -76.8799c-11.5605 -6.34961 -26.1807 -2.20996 -32.6104 9.4502c-6.38965 11.6104 -2.16016 26.2002 9.4502 32.6104c12.9004 7.08984 20.9199 20.4297 20.9199 34.8096\r\n-s-8.01953 27.7197 -20.9297 34.8203c-11.6104 6.41016 -15.8398 21 -9.4502 32.6094c6.41992 11.6104 21.0303 15.7803 32.6104 9.4502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume-up\" unicode=\"&#xf028;\" horiz-adv-x=\"576\" \r\n-d=\"M215.03 376.95c15.0098 15.0098 40.9697 4.49023 40.9697 -16.9697v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM448.35 428.03\r\n-c79.9199 -52.46 127.65 -140.7 127.65 -236.03s-47.7305 -183.58 -127.65 -236.04c-11.5801 -7.61035 -26.4697 -3.75977 -33.5098 6.9502c-7.33984 11.1602 -4.21973 26.1797 6.9502 33.5c66.2695 43.4902 105.82 116.6 105.82 195.58\r\n-c0 78.9795 -39.5508 152.09 -105.82 195.58c-11.1699 7.33008 -14.29 22.3398 -6.9502 33.5098c7.33008 11.1895 22.3398 14.2803 33.5098 6.9502zM480 192c0 -63.54 -32.0596 -121.94 -85.7695 -156.24c-12 -7.67969 -26.6104 -2.89941 -33.1201 7.45996\r\n-c-7.09082 11.29 -3.78027 26.2207 7.40918 33.3604c39.75 25.3896 63.4805 68.5303 63.4805 115.42s-23.7305 90.0303 -63.4805 115.42c-11.1895 7.15039 -14.5 22.0801 -7.40918 33.3604c7.08984 11.2793 21.9297 14.5996 33.1201 7.45996\r\n-c53.71 -34.2998 85.7695 -92.71 85.7695 -156.24zM338.23 268.87c28.2393 -15.54 45.7793 -44.9805 45.7793 -76.8604s-17.54 -61.3301 -45.7695 -76.8799c-11.5605 -6.34961 -26.1807 -2.20996 -32.6104 9.4502c-6.38965 11.6104 -2.16016 26.2002 9.4502 32.6104\r\n-c12.9004 7.08984 20.9199 20.4297 20.9199 34.8096c0 14.3701 -8.01953 27.7197 -20.9297 34.8096c-11.6104 6.41016 -15.8398 21 -9.4502 32.6104c6.41992 11.6104 21.0303 15.7803 32.6104 9.4502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"qrcode\" unicode=\"&#xf029;\" horiz-adv-x=\"448\" \r\n-d=\"M0 224v192h192v-192h-192zM64 352v-64h64v64h-64zM256 416h192v-192h-192v192zM384 288v64h-64v-64h64zM0 -32v192h192v-192h-192zM64 96v-64h64v64h-64zM416 160h32v-128h-96v32h-32v-96h-64v192h96v-32h64v32zM416 0h32v-32h-32v32zM352 0h32v-32h-32v32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"barcode\" unicode=\"&#xf02a;\" \r\n-d=\"M0 0v384h18v-384h-18zM26.8574 0.273438v383.727h9.14258v-383.727h-9.14258zM54 0.273438v383.727h8.85742v-383.727h-8.85742zM98.8574 0.273438v383.727h8.85645v-383.727h-8.85645zM134.857 0.273438v383.727h17.7139v-383.727h-17.7139zM179.714 0.273438v383.727\r\n-h8.85742v-383.727h-8.85742zM197.714 0.273438v383.727h8.85742v-383.727h-8.85742zM215.714 0.273438v383.727h8.85742v-383.727h-8.85742zM251.429 0.273438v383.727h18v-383.727h-18zM296.286 0.273438v383.727h18v-383.727h-18zM332.285 0.273438v383.727h18.001\r\n-v-383.727h-18.001zM368.286 0.273438v383.727h18.001v-383.727h-18.001zM395.143 0.273438v383.727h18v-383.727h-18zM440.286 0.273438v383.727h26.8564v-383.727h-26.8564zM476 0.273438v383.727h9.14258v-383.727h-9.14258zM494 0v384h18v-384h-18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tag\" unicode=\"&#xf02b;\" \r\n-d=\"M0 195.882v204.118c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-211.883 211.883\r\n-c-7.75977 7.75977 -14.0586 22.9658 -14.0586 33.9404zM112 384c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tags\" unicode=\"&#xf02c;\" horiz-adv-x=\"640\" \r\n-d=\"M497.941 222.059c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7461 -18.7451 -49.1387 -18.7441 -67.8818 0l-211.883 211.883c-7.75977 7.75977 -14.0586 22.9658 -14.0586 33.9404v204.118c0 26.5098 21.4902 48 48 48h204.118\r\n-c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM112 288c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM625.941 154.177l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-0.360352 0.360352\r\n-l174.059 174.059c16.999 16.999 26.3604 39.6006 26.3604 63.6406s-9.3623 46.6406 -26.3604 63.6396l-196.242 196.242h48.7207c10.9746 0 26.1807 -6.29883 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book\" unicode=\"&#xf02d;\" horiz-adv-x=\"448\" \r\n-d=\"M448 88c0 -7.5 -3.5 -14.2998 -8.90039 -18.5996c-4.19922 -15.4004 -4.19922 -59.3008 0 -74.7002c5.40039 -4.40039 8.90039 -11.2002 8.90039 -18.7002v-16c0 -13.2998 -10.7002 -24 -24 -24h-328c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h328\r\n-c13.2998 0 24 -10.7002 24 -24v-336zM128 314v-20c0 -3.2998 2.7002 -6 6 -6h212c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-212c-3.2998 0 -6 -2.7002 -6 -6zM128 250v-20c0 -3.2998 2.7002 -6 6 -6h212c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-212\r\n-c-3.2998 0 -6 -2.7002 -6 -6zM381.4 0c-1.90039 17.0996 -1.90039 46.9004 0 64h-285.4c-17.5996 0 -32 -14.4004 -32 -32c0 -17.7002 14.2998 -32 32 -32h285.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"384\" \r\n-d=\"M0 -64v464c0 26.5098 21.4902 48 48 48h288c26.5098 0 48 -21.4902 48 -48v-464l-192 112z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"print\" unicode=\"&#xf02f;\" \r\n-d=\"M448 256c35.3496 0 64 -28.6504 64 -64v-112c0 -8.83984 -7.16016 -16 -16 -16h-48v-96c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v96h-48c-8.83984 0 -16 7.16016 -16 16v112c0 35.3496 28.6504 64 64 64v160c0 17.6699 14.3301 32 32 32\r\n-h274.74c8.49023 0 16.6299 -3.37012 22.6299 -9.37012l45.2598 -45.25c6 -6.00977 9.37012 -14.1396 9.37012 -22.6299v-114.75zM384 0v96h-256v-96h256zM384 224v96h-48c-8.83984 0 -16 7.16016 -16 16v48h-192v-160h256zM432 152c13.25 0 24 10.75 24 24\r\n-c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"camera\" unicode=\"&#xf030;\" \r\n-d=\"M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160\r\n-c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"font\" unicode=\"&#xf031;\" horiz-adv-x=\"448\" \r\n-d=\"M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h19.5801l-23.2998 64h-152.561l-23.2998 -64h19.5801c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h23.4102l130.71 362.31c4.07422 11.9736 17.6465 21.6904 30.2939 21.6904h0.00585938h47.1602h0.00585938c12.6475 0 26.2197 -9.7168 30.2939 -21.6904\r\n-l130.71 -362.31h23.4102zM176.85 176h94.3008l-47.1504 129.49z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bold\" unicode=\"&#xf032;\" horiz-adv-x=\"384\" \r\n-d=\"M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h31.8701v288h-31.8701c-8.83203 0 -16 7.16797 -16 16v48\r\n-c0 8.83203 7.16797 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.01367 -20.25 -14.1094 -49.4639 -27 -65.21zM145.66 336v-96h87.7598c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48h-87.7598zM233.42 48c30.9121 0 56 25.0879 56 56\r\n-s-25.0879 56 -56 56h-87.7598v-112h87.7598z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"italic\" unicode=\"&#xf033;\" horiz-adv-x=\"320\" \r\n-d=\"M320 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h62.7598l80 320h-46.7598\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192c8.83203 0 16 -7.16797 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"text-height\" unicode=\"&#xf034;\" horiz-adv-x=\"576\" \r\n-d=\"M304 416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-56v-304h40c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h40v304h-56v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h288zM560 80c15.6396 0 20.6396 -18 11.3096 -27.3096l-80 -80c-2.58594 -2.58496 -7.65332 -4.68262 -11.3096 -4.68262\r\n-s-8.72363 2.09766 -11.3096 4.68262l-80 80c-10.0107 10 -3 27.3096 11.3096 27.3096h48v224h-48c-15.6396 0 -20.6396 18 -11.3096 27.3096l80 80c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -80\r\n-c10.0205 -10 3 -27.3096 -11.3096 -27.3096h-48v-224h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"text-width\" unicode=\"&#xf035;\" horiz-adv-x=\"448\" \r\n-d=\"M432 416c8.83203 0 16 -7.16797 16 -16v-80c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-120v-112h24c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h24v112h-120v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v80c0 8.83203 7.16797 16 16 16h416zM363.31 155.31l80 -80c2.58496 -2.58594 4.68262 -7.65332 4.68262 -11.3096s-2.09766 -8.72363 -4.68262 -11.3096\r\n-l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48\r\n-c0 15.6396 18 20.6396 27.3096 11.3096z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align-left\" unicode=\"&#xf036;\" horiz-adv-x=\"448\" \r\n-d=\"M12.8301 96c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562\r\n-c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM12.8301 352c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562\r\n-c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\r\n-v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align-center\" unicode=\"&#xf037;\" horiz-adv-x=\"448\" \r\n-d=\"M432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\r\n-v32c0 8.83203 7.16797 16 16 16h416zM108.1 352c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105v-0.00976562\r\n-c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0h-231.811zM339.91 96h-231.811c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105\r\n-v-0.00976562c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align-right\" unicode=\"&#xf038;\" horiz-adv-x=\"448\" \r\n-d=\"M16 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\r\n-v32c0 8.83203 7.16797 16 16 16h416zM435.17 416c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203\r\n-v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34\r\n-h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"align-justify\" unicode=\"&#xf039;\" horiz-adv-x=\"448\" \r\n-d=\"M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\r\n-v32c0 8.83203 7.16797 16 16 16h416zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\r\n-h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list\" unicode=\"&#xf03a;\" \r\n-d=\"M80 80c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM80 400c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64\r\n-c0 8.83203 7.16797 16 16 16h64zM80 240c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"outdent\" unicode=\"&#xf03b;\" horiz-adv-x=\"448\" \r\n-d=\"M100.69 84.71l-96 95.9805c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32c8.83203 0 16 -7.16797 16 -16\r\n-v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562\r\n-h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562\r\n-c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16\r\n-v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"indent\" unicode=\"&#xf03c;\" horiz-adv-x=\"448\" \r\n-d=\"M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.58496 -2.58691 4.68262 -7.65332 4.68262 -11.3105c0 -3.65625 -2.09766 -8.72363 -4.68262 -11.3096zM432 32\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562\r\n-c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288\r\n-c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562\r\n-c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"video\" unicode=\"&#xf03d;\" horiz-adv-x=\"576\" \r\n-d=\"M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3\r\n-c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"image\" unicode=\"&#xf03e;\" \r\n-d=\"M464 0h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48zM112 328c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56s56 25.0723 56 56s-25.0723 56 -56 56zM64 64h384\r\n-v112l-87.5146 87.5146c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-135.514 -135.515l-55.5146 55.5146c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-71.5137 -71.5146v-48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-marker\" unicode=\"&#xf041;\" horiz-adv-x=\"384\" \r\n-d=\"M172.268 -53.6699c-145.298 210.639 -172.268 232.257 -172.268 309.67c0 106.039 85.9609 192 192 192s192 -85.9609 192 -192c0 -77.4131 -26.9697 -99.0312 -172.268 -309.67c-9.53516 -13.7744 -29.9307 -13.7734 -39.4648 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"adjust\" unicode=\"&#xf042;\" \r\n-d=\"M8 192c0 136.967 111.034 248 248 248s248 -111.034 248 -248s-111.033 -248 -248 -248s-248 111.034 -248 248zM256 8c101.689 0 184 82.2949 184 184c0 101.689 -82.2949 184 -184 184v-368z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tint\" unicode=\"&#xf043;\" horiz-adv-x=\"352\" \r\n-d=\"M205.22 425.91c46.9902 -158.48 146.78 -200.07 146.78 -311.82c0 -98.4395 -78.7197 -178.09 -176 -178.09s-176 79.6504 -176 178.09c0 111.19 100.01 154.061 146.78 311.82c9 30.1201 50.5 28.7803 58.4395 0zM176 0c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16\r\n-c-44.1104 0 -80 35.8896 -80 80c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16c0 -61.75 50.25 -112 112 -112z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"576\" \r\n-d=\"M402.6 364.8l90.2002 -90.2002c3.7998 -3.7998 3.7998 -10 0 -13.7998l-218.399 -218.399l-92.8008 -10.3008c-12.3994 -1.39941 -22.8994 9.10059 -21.5 21.5l10.3008 92.8008l218.399 218.399c3.7998 3.7998 10 3.7998 13.7998 0zM564.6 387.7\r\n-c15.2002 -15.2002 15.2002 -39.9004 0 -55.2002l-35.3994 -35.4004c-3.7998 -3.7998 -10 -3.7998 -13.7998 0l-90.2002 90.2002c-3.7998 3.7998 -3.7998 10 0 13.7998l35.3994 35.4004c15.3008 15.2002 40 15.2002 55.2002 0zM384 101.8c0 3.2002 1.2998 6.2002 3.5 8.5\r\n-l40 40c7.59961 7.5 20.5 2.2002 20.5 -8.5v-157.8c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h285.8c10.7002 0 16.1006 -12.9004 8.5 -20.5l-40 -40c-2.2998 -2.2002 -5.2998 -3.5 -8.5 -3.5h-229.8v-320h320v101.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"step-backward\" unicode=\"&#xf048;\" horiz-adv-x=\"448\" \r\n-d=\"M64 -20v424c0 6.59961 5.40039 12 12 12h48c6.59961 0 12 -5.40039 12 -12v-176.4l195.5 181c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-384c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996l-195.5 179.899v-175.3c0 -6.59961 -5.40039 -12 -12 -12h-48\r\n-c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fast-backward\" unicode=\"&#xf049;\" \r\n-d=\"M0 12v360c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-151.9l171.5 156.5c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-131.9l171.5 156.5c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996\r\n-l-171.5 155.3v-130.7c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996l-171.5 155.3v-150.7c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"backward\" unicode=\"&#xf04a;\" \r\n-d=\"M11.5 167.4c-15.2998 12.7998 -15.2998 36.3994 0 49.1992l192 160c20.5996 17.2002 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7998 -52.5 -24.5996zM267.5 167.4c-15.2998 12.7998 -15.2998 36.3994 0 49.1992l192 160\r\n-c20.5996 17.2002 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7998 -52.5 -24.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play\" unicode=\"&#xf04b;\" horiz-adv-x=\"448\" \r\n-d=\"M424.4 233.3c31.5 -18.5 31.3994 -64.0996 0 -82.5996l-352 -208c-31.7002 -18.7998 -72.4004 3.7998 -72.4004 41.2998v416.1c0 41.8008 43.7998 58.2002 72.4004 41.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pause\" unicode=\"&#xf04c;\" horiz-adv-x=\"448\" \r\n-d=\"M144 -31h-96c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48zM448 17c0 -26.5 -21.5 -48 -48 -48h-96c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48 -21.5 48 -48v-352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stop\" unicode=\"&#xf04d;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"forward\" unicode=\"&#xf04e;\" \r\n-d=\"M500.5 216.6c15.2998 -12.7998 15.2998 -36.3994 0 -49.1992l-192 -160c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320c0 27.4004 31.9004 41.7002 52.5 24.5996zM244.5 216.6c15.2998 -12.7998 15.2998 -36.3994 0 -49.1992l-192 -160\r\n-c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320c0 27.4004 31.9004 41.7002 52.5 24.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fast-forward\" unicode=\"&#xf050;\" \r\n-d=\"M512 372v-360c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v151.9l-171.5 -156.5c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v131.9l-171.5 -156.5c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320\r\n-c0 27.4004 31.9004 41.7002 52.5 24.5996l171.5 -155.399v130.8c0 27.4004 31.9004 41.7002 52.5 24.5996l171.5 -155.399v150.8c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"step-forward\" unicode=\"&#xf051;\" horiz-adv-x=\"448\" \r\n-d=\"M384 404v-424c0 -6.59961 -5.40039 -12 -12 -12h-48c-6.59961 0 -12 5.40039 -12 12v176.4l-195.5 -181c-20.5996 -17.1006 -52.5 -2.80078 -52.5 24.5996v384c0 27.4004 31.9004 41.7002 52.5 24.5996l195.5 -179.899v175.3c0 6.59961 5.40039 12 12 12h48\r\n-c6.59961 0 12 -5.40039 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eject\" unicode=\"&#xf052;\" horiz-adv-x=\"448\" \r\n-d=\"M448 64v-64c0 -17.6729 -14.3271 -32 -32 -32h-384c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h384c17.6729 0 32 -14.3271 32 -32zM48.0527 128c-41.7285 0 -63.5273 49.7324 -35.3828 80.4346l175.946 192.008\r\n-c19.0156 20.7432 51.7529 20.7422 70.7666 0l175.939 -192.008c28.1973 -30.7607 6.26758 -80.4346 -35.3828 -80.4346h-351.887z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-left\" unicode=\"&#xf053;\" horiz-adv-x=\"320\" \r\n-d=\"M34.5195 208.97l194.351 194.34c9.37012 9.37012 24.5703 9.37012 33.9395 0l22.6709 -22.6699c9.35938 -9.35938 9.36914 -24.5195 0.0390625 -33.8994l-154.029 -154.74l154.02 -154.75c9.33984 -9.37988 9.32031 -24.54 -0.0400391 -33.9004l-22.6699 -22.6699\r\n-c-9.37012 -9.37012 -24.5693 -9.37012 -33.9395 0l-194.341 194.351c-9.36914 9.37012 -9.36914 24.5693 0 33.9395z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-right\" unicode=\"&#xf054;\" horiz-adv-x=\"320\" \r\n-d=\"M285.476 175.029l-194.344 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9404 0l-22.667 22.667c-9.35742 9.35742 -9.375 24.5225 -0.0400391 33.9014l154.021 154.746l-154.021 154.745c-9.33496 9.37891 -9.31738 24.5439 0.0400391 33.9014l22.667 22.667\r\n-c9.37305 9.37207 24.5684 9.37207 33.9404 0l194.343 -194.344c9.37305 -9.37207 9.37305 -24.5674 0.000976562 -33.9404z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus-circle\" unicode=\"&#xf055;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM400 164v56c0 6.59961 -5.40039 12 -12 12h-92v92c0 6.59961 -5.40039 12 -12 12h-56c-6.59961 0 -12 -5.40039 -12 -12v-92h-92c-6.59961 0 -12 -5.40039 -12 -12v-56\r\n-c0 -6.59961 5.40039 -12 12 -12h92v-92c0 -6.59961 5.40039 -12 12 -12h56c6.59961 0 12 5.40039 12 12v92h92c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus-circle\" unicode=\"&#xf056;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM124 152h264c6.59961 0 12 5.40039 12 12v56c0 6.59961 -5.40039 12 -12 12h-264c-6.59961 0 -12 -5.40039 -12 -12v-56c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"times-circle\" unicode=\"&#xf057;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM377.6 126.9l-65.5996 65.0996l65.7002 65c4.7002 4.7002 4.7002 12.2998 0 17l-39.6006 39.5996c-4.69922 4.7002 -12.2998 4.7002 -17 0l-65.0996 -65.5996l-65 65.7002\r\n-c-4.7002 4.7002 -12.2998 4.7002 -17 0l-39.5996 -39.6006c-4.7002 -4.69922 -4.7002 -12.2998 0 -17l65.5996 -65.0996l-65.5996 -65c-4.7002 -4.7002 -4.7002 -12.2998 0 -17l39.5 -39.5996c4.69922 -4.7002 12.2998 -4.7002 17 0l65.0996 65.5996l65 -65.5996\r\n-c4.7002 -4.7002 12.2998 -4.7002 17 0l39.5996 39.5c4.7002 4.69922 4.7002 12.2998 0 17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check-circle\" unicode=\"&#xf058;\" \r\n-d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM227.314 60.6855l184 184c6.24707 6.24805 6.24707 16.3799 0 22.6279l-22.6279 22.627c-6.24707 6.24902 -16.3789 6.24902 -22.6279 0\r\n-l-150.059 -150.059l-70.0586 70.0596c-6.24805 6.24805 -16.3799 6.24805 -22.6279 0l-22.6279 -22.627c-6.24707 -6.24805 -6.24707 -16.3799 0 -22.6279l104 -104c6.24902 -6.24805 16.3799 -6.24805 22.6289 -0.000976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"question-circle\" unicode=\"&#xf059;\" \r\n-d=\"M504 192c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248s248 -111.083 248 -248zM262.655 358c-54.4971 0 -89.2549 -22.957 -116.549 -63.7578c-3.53613 -5.28613 -2.35352 -12.415 2.71484 -16.2578l34.6982 -26.3105\r\n-c5.20508 -3.94727 12.6211 -3.00781 16.665 2.12207c17.8643 22.6582 30.1133 35.7969 57.3037 35.7969c20.4287 0 45.6973 -13.1475 45.6973 -32.958c0 -14.9756 -12.3623 -22.667 -32.5332 -33.9756c-23.5244 -13.1875 -54.6523 -29.6006 -54.6523 -70.6592v-4\r\n-c0 -6.62695 5.37305 -12 12 -12h56c6.62695 0 12 5.37305 12 12v1.33301c0 28.4619 83.1855 29.6475 83.1855 106.667c0 58.002 -60.1641 102 -116.53 102zM256 110c-25.3652 0 -46 -20.6348 -46 -46c0 -25.3643 20.6348 -46 46 -46s46 20.6357 46 46\r\n-c0 25.3652 -20.6348 46 -46 46z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"info-circle\" unicode=\"&#xf05a;\" \r\n-d=\"M256 440c136.957 0 248 -111.083 248 -248c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248zM256 330c-23.1963 0 -42 -18.8037 -42 -42s18.8037 -42 42 -42s42 18.8037 42 42s-18.8037 42 -42 42zM312 76v24\r\n-c0 6.62695 -5.37305 12 -12 12h-12v100c0 6.62695 -5.37305 12 -12 12h-64c-6.62695 0 -12 -5.37305 -12 -12v-24c0 -6.62695 5.37305 -12 12 -12h12v-64h-12c-6.62695 0 -12 -5.37305 -12 -12v-24c0 -6.62695 5.37305 -12 12 -12h88c6.62695 0 12 5.37305 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crosshairs\" unicode=\"&#xf05b;\" \r\n-d=\"M500 224c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-30.3643c-13.9121 -93.6748 -87.9609 -167.724 -181.636 -181.636v-30.3643c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v30.3643\r\n-c-93.6748 13.9121 -167.724 87.9609 -181.636 181.636h-30.3643c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h30.3643c13.9121 93.6748 87.9609 167.724 181.636 181.636v30.3643c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-30.3643\r\n-c93.6748 -13.9121 167.724 -87.9609 181.636 -181.636h30.3643zM288 43.3662c58.2432 12.417 104.232 58.46 116.634 116.634h-40.6338c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40.6338c-12.417 58.2432 -58.46 104.232 -116.634 116.634v-40.6338\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40.6338c-58.2432 -12.417 -104.232 -58.46 -116.634 -116.634h40.6338c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40.6338\r\n-c12.417 -58.2432 58.46 -104.232 116.634 -116.634v40.6338c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40.6338zM288 192c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ban\" unicode=\"&#xf05e;\" \r\n-d=\"M256 440c136.967 0 248 -111.034 248 -248s-111.034 -248 -248 -248s-248 111.033 -248 248s111.034 248 248 248zM386.108 322.108c-65.4121 65.4102 -165.435 70.0312 -235.639 20.6758l256.315 -256.313c49.3232 70.1562 44.7705 170.189 -20.6768 235.638z\r\n-M125.892 61.8916c65.4121 -65.4111 165.436 -70.0312 235.639 -20.6758l-256.315 256.313c-49.3232 -70.1562 -44.7705 -170.189 20.6768 -235.638z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-left\" unicode=\"&#xf060;\" horiz-adv-x=\"448\" \r\n-d=\"M257.5 2.90039l-22.2002 -22.2002c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-194.4 194.3c-9.40039 9.40039 -9.40039 24.5996 0 33.9004l194.4 194.399c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.2002 -22.2002c9.5 -9.5 9.2998 -25 -0.400391 -34.2998\r\n-l-120.5 -114.8h287.4c13.2998 0 24 -10.7002 24 -24v-32c0 -13.2998 -10.7002 -24 -24 -24h-287.4l120.5 -114.8c9.80078 -9.2998 10 -24.7998 0.400391 -34.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-right\" unicode=\"&#xf061;\" horiz-adv-x=\"448\" \r\n-d=\"M190.5 381.1l22.2002 22.2002c9.39941 9.40039 24.5996 9.40039 33.8994 0l194.4 -194.3c9.40039 -9.40039 9.40039 -24.5996 0 -33.9004l-194.4 -194.399c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.2002 22.2002c-9.5 9.5 -9.2998 25 0.400391 34.2998\r\n-l120.5 114.8h-287.4c-13.2998 0 -24 10.7002 -24 24v32c0 13.2998 10.7002 24 24 24h287.4l-120.5 114.8c-9.80078 9.2998 -10 24.7998 -0.400391 34.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-up\" unicode=\"&#xf062;\" horiz-adv-x=\"448\" \r\n-d=\"M34.9004 158.5l-22.2002 22.2002c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l194.3 194.4c9.40039 9.40039 24.5996 9.40039 33.9004 0l194.3 -194.3c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-22.2002 -22.2002c-9.5 -9.5 -25 -9.2998 -34.2998 0.400391\r\n-l-114.7 120.4v-287.4c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v287.4l-114.8 -120.5c-9.2998 -9.80078 -24.7998 -10 -34.2998 -0.400391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-down\" unicode=\"&#xf063;\" horiz-adv-x=\"448\" \r\n-d=\"M413.1 225.5l22.2002 -22.2002c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-194.3 -194.4c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-194.399 194.4c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.2002 22.2002c9.5 9.5 25 9.2998 34.2998 -0.400391\r\n-l114.8 -120.5v287.4c0 13.2998 10.7002 24 24 24h32c13.2998 0 24 -10.7002 24 -24v-287.4l114.8 120.5c9.2998 9.80078 24.7998 10 34.2998 0.400391z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share\" unicode=\"&#xf064;\" \r\n-d=\"M503.691 258.164c11.0859 -9.5752 11.0703 -26.7656 0 -36.3281l-176.005 -152c-15.3867 -13.2891 -39.6865 -2.53613 -39.6865 18.1641v87.915c-155.083 -2.23145 -221.934 -40.7295 -176.59 -185.742c5.03418 -16.0977 -14.4238 -28.5615 -28.0771 -18.6309\r\n-c-43.752 31.8232 -83.333 92.6914 -83.333 154.132c0 152.227 127.371 184.419 288 186.258v80.0537c0 20.668 24.2812 31.4688 39.6865 18.1641z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"expand\" unicode=\"&#xf065;\" horiz-adv-x=\"448\" \r\n-d=\"M0 268v124c0 13.2998 10.7002 24 24 24h124c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84v-84c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12zM288 404c0 6.59961 5.40039 12 12 12h124c13.2998 0 24 -10.7002 24 -24\r\n-v-124c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v84h-84c-6.59961 0 -12 5.40039 -12 12v40zM436 128c6.59961 0 12 -5.40039 12 -12v-124c0 -13.2998 -10.7002 -24 -24 -24h-124c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84\r\n-v84c0 6.59961 5.40039 12 12 12h40zM160 -20c0 -6.59961 -5.40039 -12 -12 -12h-124c-13.2998 0 -24 10.7002 -24 24v124c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-84h84c6.59961 0 12 -5.40039 12 -12v-40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compress\" unicode=\"&#xf066;\" horiz-adv-x=\"448\" \r\n-d=\"M436 256h-124c-13.2998 0 -24 10.7002 -24 24v124c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-84h84c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM160 280c0 -13.2998 -10.7002 -24 -24 -24h-124\r\n-c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84v84c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-124zM160 -20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v84h-84c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h124c13.2998 0 24 -10.7002 24 -24v-124zM352 -20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v124c0 13.2998 10.7002 24 24 24h124c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84v-84z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus\" unicode=\"&#xf067;\" horiz-adv-x=\"448\" \r\n-d=\"M416 240c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-144v-144c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v144h-144c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h144v144\r\n-c0 17.6699 14.3301 32 32 32h32c17.6699 0 32 -14.3301 32 -32v-144h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus\" unicode=\"&#xf068;\" horiz-adv-x=\"448\" \r\n-d=\"M416 240c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"asterisk\" unicode=\"&#xf069;\" \r\n-d=\"M478.21 113.907c11.7949 -6.47754 15.96 -21.3828 9.23242 -33.0361l-19.4805 -33.7412c-6.72754 -11.6533 -21.7207 -15.499 -33.2266 -8.52246l-138.735 84.1104l3.47559 -162.204c0.288086 -13.4531 -10.5391 -24.5137 -23.9941 -24.5137h-38.9619\r\n-c-13.4551 0 -24.2822 11.0605 -23.9941 24.5137l3.47461 162.204l-138.735 -84.1113c-11.5059 -6.97656 -26.499 -3.13086 -33.2266 8.52246l-19.4805 33.7412c-6.72852 11.6533 -2.5625 26.5596 9.23242 33.0371l142.21 78.0928l-142.209 78.0918\r\n-c-11.7949 6.47754 -15.9609 21.3838 -9.2334 33.0371l19.4805 33.7412c6.72754 11.6533 21.7207 15.499 33.2266 8.52246l138.735 -84.1104l-3.47363 162.204c-0.289062 13.4531 10.5381 24.5137 23.9932 24.5137h38.9609c13.4561 0 24.2822 -11.0605 23.9941 -24.5137\r\n-l-3.47461 -162.204l138.735 84.1113c11.5068 6.97656 26.499 3.13086 33.2266 -8.52246l19.4805 -33.7412c6.72852 -11.6533 2.5625 -26.5596 -9.23242 -33.0371l-142.21 -78.0928z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exclamation-circle\" unicode=\"&#xf06a;\" \r\n-d=\"M504 192c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248s248 -111.083 248 -248zM256 142c-25.4053 0 -46 -20.5947 -46 -46s20.5947 -46 46 -46s46 20.5947 46 46s-20.5947 46 -46 46zM212.327 307.346l7.41797 -136\r\n-c0.34668 -6.36328 5.6084 -11.3457 11.9814 -11.3457h48.5469c6.37305 0 11.6348 4.98242 11.9814 11.3457l7.41797 136c0.375 6.87402 -5.09766 12.6543 -11.9814 12.6543h-63.3838c-6.88379 0 -12.3555 -5.78027 -11.9805 -12.6543z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gift\" unicode=\"&#xf06b;\" \r\n-d=\"M32 0v128h192v-160h-160c-17.7002 0 -32 14.2998 -32 32zM288 -32v160h192v-128c0 -17.7002 -14.2998 -32 -32 -32h-160zM480 288c17.7002 0 32 -14.2998 32 -32v-80c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v80c0 17.7002 14.2998 32 32 32\r\n-h44.0996c-6.2998 12.0996 -10.0996 25.5 -10.0996 40c0 48.5 39.5 88 88 88c41.5996 0 68.5 -21.2998 103 -68.2998c34.5 47 61.4004 68.2998 103 68.2998c48.5 0 88 -39.5 88 -88c0 -14.5 -3.90039 -27.9004 -10.0996 -40h42.0996zM153.9 288h86.0996\r\n-c-51.5 76.7002 -66.2002 80 -86.0996 80c-22.1006 0 -40 -17.9004 -40 -40s17.8994 -40 40 -40zM360 288c22.0996 0 40 17.9004 40 40s-17.9004 40 -40 40c-20.4004 0 -34.7002 -3.5 -86.0996 -80h86.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"leaf\" unicode=\"&#xf06c;\" horiz-adv-x=\"576\" \r\n-d=\"M546.2 438.3c19 -42.3994 29.7998 -94.3994 29.7998 -144.6c0 -172.4 -110.5 -313.2 -267.5 -324.601c-80.9004 -8.59961 -142.5 33.3008 -174.9 77.2002c-51 -42.7002 -70.3994 -87 -71.8994 -90.5996c-6.7998 -16.2002 -25.4004 -24.1006 -41.7998 -17.2998\r\n-c-16.3008 6.69922 -24.1006 25.2998 -17.5 41.5996c23.5996 57.9004 130.199 212 381.6 212c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16c-130.6 0 -222.7 -38.7998 -286.5 -84.5c-0.700195 6.7998 -1.5 13.5 -1.5 20.5c0 106 86 192 192 192h80\r\n-c63.4004 0 118.9 33.5996 149.9 87.5c6.69922 11.7998 22.6992 11.2998 28.2998 -1.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fire\" unicode=\"&#xf06d;\" horiz-adv-x=\"384\" \r\n-d=\"M216 424.14c0 -103.14 168 -125.85 168 -296.14c0 -105.87 -86.1299 -192 -192 -192s-192 86.1299 -192 192c0 58.6699 27.7998 106.84 54.5703 134.96c14.96 15.7305 41.4297 5.2002 41.4297 -16.5v-85.5098c0 -35.1699 27.9805 -64.4902 63.1504 -64.9404\r\n-c35.7393 -0.469727 64.8496 28.3604 64.8496 63.9902c0 88 -176 96.1504 -52.1504 277.18c13.5 19.7305 44.1504 10.7607 44.1504 -13.04z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye\" unicode=\"&#xf06e;\" horiz-adv-x=\"576\" \r\n-d=\"M572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947\r\n-s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41s230.29 -71.5898 284.52 -177.4zM288 48h0.0703125c79.4492 0 143.93 64.4805 143.93 143.93v0.0703125c0 79.4883 -64.5117 144 -144 144s-144 -64.5117 -144 -144s64.5117 -144 144 -144z\r\n-M288 288h0.225586c52.8701 0 95.7803 -42.9092 95.7803 -95.7793c0 -52.8711 -42.9102 -95.7803 -95.7803 -95.7803c-52.8711 0 -95.7803 42.9092 -95.7803 95.7803c0 7.04785 1.49805 18.2871 3.34473 25.0889c6.9834 -5.13867 19.6895 -9.30957 28.3604 -9.30957\r\n-c26.4131 0 47.8496 21.4365 47.8496 47.8496c0 8.6709 -4.1709 21.377 -9.30957 28.3604c6.84375 1.99219 18.1826 3.69043 25.3096 3.79004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye-slash\" unicode=\"&#xf070;\" horiz-adv-x=\"640\" \r\n-d=\"M320 48c7.24121 0.0673828 18.8896 1.23633 26 2.61035l51.8896 -40.1504c-25.0195 -6.45996 -50.9795 -10.46 -77.8896 -10.46c-122.93 0 -230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947\r\n-c10.2393 20 22.9297 38.29 36.7197 55.5898l104.899 -81.0693c5.65039 -74.4004 67.0508 -133.11 142.9 -133.11zM633.82 -10.0996c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705\r\n-c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.729c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.0293 1.50879 7.42773 3.36816 9.81934l19.6299 25.2705\r\n-c2.65234 3.41211 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51172 9.82617 -3.37305l127.22 -98.3301c38.0117 20.7578 104.011 37.6475 147.32 37.7002c122.93 0 230.29 -71.5898 284.52 -177.4c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947\r\n-s-1.55859 -10.7959 -3.47949 -14.5947c-16.7666 -32.6758 -53.166 -78.4033 -81.25 -102.07zM450.1 131.9c8.61035 18.3203 13.9004 38.4697 13.9004 60.0996v0.0800781c0 79.4434 -64.4766 143.92 -143.92 143.92h-0.0800781\r\n-c-28.4697 -0.0214844 -69.3047 -14.8545 -91.1504 -33.1104l73.6104 -56.8896c0.726562 2.71387 1.41602 7.19336 1.54004 10c-0.015625 8.62891 -4.18652 21.2666 -9.30957 28.21c7.17969 2.09668 19.0781 3.79785 26.5576 3.79785\r\n-c52.3076 0 94.7598 -42.4521 94.7598 -94.7598c0 -0.344727 -0.00292969 -0.90332 -0.0078125 -1.24805c-0.112305 -8.43457 -2.44238 -21.749 -5.2002 -29.7197z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exclamation-triangle\" unicode=\"&#xf071;\" horiz-adv-x=\"576\" \r\n-d=\"M569.517 7.9873c18.458 -31.9941 -4.71094 -71.9873 -41.5762 -71.9873h-479.887c-36.9365 0 -59.999 40.0547 -41.5771 71.9873l239.946 416.027c18.4668 32.0098 64.7197 31.9512 83.1543 0zM288 94c-25.4053 0 -46 -20.5947 -46 -46s20.5947 -46 46 -46\r\n-s46 20.5947 46 46s-20.5947 46 -46 46zM244.327 259.346l7.41797 -136c0.34668 -6.36328 5.6084 -11.3457 11.9814 -11.3457h48.5469c6.37305 0 11.6348 4.98242 11.9814 11.3457l7.41797 136c0.375 6.87402 -5.09766 12.6543 -11.9814 12.6543h-63.3838\r\n-c-6.88379 0 -12.3555 -5.78027 -11.9805 -12.6543z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plane\" unicode=\"&#xf072;\" horiz-adv-x=\"576\" \r\n-d=\"M480 256c35.3496 0 96 -28.6504 96 -64s-60.6504 -64 -96 -64h-114.29l-105.11 -183.94c-2.84961 -4.97949 -8.14941 -8.05957 -13.8896 -8.05957h-65.5c-10.6299 0 -18.2998 10.1797 -15.3799 20.4004l49.0303 171.6h-102.86l-43.2002 -57.5996\r\n-c-3.01953 -4.03027 -7.75977 -6.40039 -12.7998 -6.40039h-39.9902c-10.4102 0 -18.0498 9.78027 -15.5195 19.8799l31.5098 108.12l-31.5098 108.12c-2.53027 10.0996 5.10938 19.8799 15.5195 19.8799h39.9902c5.03027 0 9.78027 -2.37012 12.7998 -6.40039\r\n-l43.2002 -57.5996h102.86l-49.0303 171.61c-2.91992 10.2197 4.75 20.3896 15.3799 20.3896h65.5h0.000976562c5.12598 0 11.3525 -3.61133 13.8994 -8.05957l105.1 -183.94h114.29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-alt\" unicode=\"&#xf073;\" horiz-adv-x=\"448\" \r\n-d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM320 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM320 52v-40\r\n-c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM192 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40\r\n-c-6.59961 0 -12 -5.40039 -12 -12zM192 52v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM64 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40\r\n-c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM64 52v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM400 384c26.5 0 48 -21.5 48 -48v-48h-448v48\r\n-c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"random\" unicode=\"&#xf074;\" \r\n-d=\"M504.971 88.9707c9.37305 -9.37305 9.37305 -24.5684 0 -33.9404l-80 -79.9844c-15.0098 -15.0098 -40.9707 -4.49023 -40.9707 16.9707v39.9834h-58.7852c-2.87793 0 -6.80859 1.70801 -8.77246 3.81152l-70.5566 75.5967l53.333 57.1426l52.7812 -56.5508h32v39.9814\r\n-c0 21.4375 25.9434 31.9971 40.9707 16.9707zM12 272c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h110.785h0.000976562c2.87793 0 6.80762 -1.70801 8.77148 -3.81152l70.5566 -75.5967l-53.333 -57.1426l-52.7812 56.5508h-84zM384 272h-32\r\n-l-220.442 -236.188c-2.26953 -2.43066 -5.44629 -3.81152 -8.77246 -3.81152h-110.785c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h84l220.442 236.188c1.96387 2.10352 5.89453 3.81152 8.77246 3.81152h58.7852v39.9814\r\n-c0 21.4365 25.9434 31.9971 40.9707 16.9697l80 -79.9814c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-80 -79.9844c-15.0098 -15.0088 -40.9707 -4.48926 -40.9707 16.9707v39.9844z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" \r\n-d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\r\n-c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"magnet\" unicode=\"&#xf076;\" \r\n-d=\"M164.07 299.9h-152.07c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80c0 -0.03125 0.000976562 -0.0800781 0.000976562 -0.110352c0 -6.56348 -5.32715 -11.8896 -11.8906 -11.8896h-0.0400391zM512 311.9\r\n-c0 -6.56348 -5.32715 -11.9014 -11.8896 -11.9014c-0.0302734 0 -0.0800781 0.000976562 -0.110352 0.000976562h-152c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80.0996zM348 267.9h151.85h0.000976562\r\n-c6.62402 0 12 -5.37598 12 -12c0 -0.0283203 0 -0.0732422 -0.000976562 -0.100586c-0.199219 -20.2002 -0.599609 -40.3994 0 -53.2002c0 -150.699 -134.42 -246.699 -255 -246.699s-256.75 96 -256.75 246.6c0.600586 13 0.100586 31.9004 0 53.2998v0.100586\r\n-c0 6.62402 5.37598 12 12 12v0h151.9c6.62402 0 12 -5.37598 12 -12v-52c0 -127.9 160 -128.101 160 0v52c0 6.62402 5.37598 12 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-up\" unicode=\"&#xf077;\" horiz-adv-x=\"448\" \r\n-d=\"M240.971 317.476l194.344 -194.343c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-22.667 -22.667c-9.35742 -9.35742 -24.5225 -9.375 -33.9014 -0.0400391l-154.746 154.02l-154.745 -154.021c-9.37891 -9.33496 -24.5439 -9.31738 -33.9014 0.0400391\r\n-l-22.667 22.667c-9.37207 9.37305 -9.37207 24.5684 0 33.9404l194.344 194.343c9.37207 9.37305 24.5674 9.37305 33.9404 0.000976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-down\" unicode=\"&#xf078;\" horiz-adv-x=\"448\" \r\n-d=\"M207.029 66.5244l-194.344 194.344c-9.37207 9.37305 -9.37207 24.5684 0 33.9404l22.667 22.667c9.35742 9.35742 24.5225 9.375 33.9014 0.0400391l154.746 -154.021l154.745 154.021c9.37891 9.33496 24.5439 9.31738 33.9014 -0.0400391l22.667 -22.667\r\n-c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-194.343 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9414 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"retweet\" unicode=\"&#xf079;\" horiz-adv-x=\"640\" \r\n-d=\"M629.657 104.402l-100.687 -100.687c-9.37305 -9.37207 -24.5674 -9.37207 -33.9404 0l-100.688 100.687c-9.37305 9.37305 -9.37305 24.5684 0 33.9404l10.8232 10.8232c9.56152 9.56152 25.1328 9.33984 34.4189 -0.492188l40.415 -42.792v182.118h-187.549\r\n-c-5.4873 0 -13.0908 3.14941 -16.9707 7.0293l-16 16c-15.1191 15.1201 -4.41113 40.9707 16.9707 40.9707h243.549c13.2549 0 24 -10.7451 24 -24v-222.118l40.416 42.792c9.28516 9.83105 24.8564 10.0537 34.4189 0.492188l10.8232 -10.8232\r\n-c9.37207 -9.37207 9.37207 -24.5684 -0.000976562 -33.9404zM364.519 88.9707l16.001 -16c15.1191 -15.1201 4.41113 -40.9707 -16.9707 -40.9707h-243.549c-13.2549 0 -24 10.7451 -24 24v222.119l-40.416 -42.793c-9.28613 -9.83105 -24.8574 -10.0527 -34.4189 -0.491211\r\n-l-10.8223 10.8223c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l100.688 100.687c9.37207 9.37305 24.5674 9.37305 33.9404 0l100.687 -100.686c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-10.8223 -10.8223c-9.5625 -9.5625 -25.1328 -9.33984 -34.4189 0.491211\r\n-l-40.416 42.792v-182.119h187.548h0.000976562c5.4873 0 13.0898 -3.14941 16.9697 -7.0293z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shopping-cart\" unicode=\"&#xf07a;\" horiz-adv-x=\"576\" \r\n-d=\"M528.12 146.681c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -30.9277 -25.0723 -56 -56 -56\r\n-s-56 25.0723 -56 56c0 15.6738 6.44727 29.835 16.8232 40h-209.647c10.377 -10.165 16.8242 -24.3262 16.8242 -40c0 -30.9277 -25.0723 -56 -56 -56s-56 25.0723 -56 56c0 20.7783 11.3252 38.9004 28.1309 48.5654l-70.248 343.435h-69.8828\r\n-c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2285 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782c15.4004 0 26.8154 -14.3008 23.4023 -29.3193z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder\" unicode=\"&#xf07b;\" \r\n-d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder-open\" unicode=\"&#xf07c;\" horiz-adv-x=\"576\" \r\n-d=\"M572.694 155.907l-72.4248 -124.155c-10.2236 -17.5273 -34.9883 -31.752 -55.2793 -31.752h-0.000976562h-399.964c-18.5234 0 -30.0645 20.0928 -20.7314 36.0928l72.4238 124.155c10.2246 17.5273 34.9902 31.752 55.2822 31.752v0h399.964\r\n-c18.5234 0 30.0645 -20.0928 20.7305 -36.0928zM152 224c-34.0107 0 -65.7861 -18.25 -82.9229 -47.6279l-69.0771 -118.418v278.046c0 26.5098 21.4902 48 48 48h160l64 -64h160c26.5098 0 48 -21.4902 48 -48v-48h-328z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chart-bar\" unicode=\"&#xf080;\" \r\n-d=\"M332.8 128c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v134.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-134.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM428.8 128\r\n-c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v230.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-230.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM140.8 128\r\n-c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v70.4004c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-70.4004c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM236.8 128\r\n-c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v198.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-198.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM496 64c8.83984 0 16 -7.16016 16 -16v-32\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-304h432z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"camera-retro\" unicode=\"&#xf083;\" \r\n-d=\"M48 416h416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48zM48 384c-8.7998 0 -16 -7.2002 -16 -16v-10c0 -3.2998 2.7002 -6 6 -6h116c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-106z\r\n-M474 288c3.2998 0 6 2.7002 6 6v74c0 8.7998 -7.2002 16 -16 16h-252.8c-2 0 -3.90039 -1 -5 -2.7002l-30.2002 -45.2998h-138c-3.2998 0 -6 -2.7002 -6 -6v-36c0 -3.2998 2.7002 -6 6 -6h436zM256 24c66.2002 0 120 53.7998 120 120s-53.7998 120 -120 120\r\n-s-120 -53.7998 -120 -120s53.7998 -120 120 -120zM256 232c48.5 0 88 -39.5 88 -88s-39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88zM208 128c8.7998 0 16 7.2002 16 16c0 17.5996 14.4004 32 32 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\r\n-c-35.2998 0 -64 -28.7002 -64 -64c0 -8.7998 7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"key\" unicode=\"&#xf084;\" \r\n-d=\"M512 271.999c0 -97.2021 -78.7979 -175.999 -176 -175.999c-11.2197 0 -22.1904 1.06152 -32.8271 3.06934l-24.0117 -27.0146c-3.95215 -4.44629 -11.9883 -8.05469 -17.9375 -8.05469h-0.000976562h-37.2227v-40c0 -13.2549 -10.7451 -24 -24 -24h-40v-40\r\n-c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v78.0586c0 6.36523 2.5293 12.4707 7.0293 16.9717l161.802 161.802c-5.72266 17.3535 -8.83105 35.8965 -8.83105 55.168c0 97.2021 78.7969 175.999 175.999 176\r\n-c97.4893 0.000976562 176.001 -78.5107 176.001 -176.001zM336 320c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cogs\" unicode=\"&#xf085;\" horiz-adv-x=\"640\" \r\n-d=\"M512.1 257l-8.19922 -14.2998c-3 -5.2998 -9.40039 -7.5 -15.1006 -5.40039c-11.7998 4.40039 -22.5996 10.7002 -32.0996 18.6006c-4.60059 3.7998 -5.7998 10.5 -2.7998 15.6992l8.19922 14.3008c-6.89941 8 -12.2998 17.2998 -15.8994 27.3994h-16.5\r\n-c-6 0 -11.2002 4.2998 -12.2002 10.2998c-2 12 -2.09961 24.6006 0 37.1006c1 6 6.2002 10.3994 12.2002 10.3994h16.5c3.59961 10.1006 9 19.4004 15.8994 27.4004l-8.19922 14.2998c-3 5.2002 -1.90039 11.9004 2.7998 15.7002\r\n-c9.5 7.90039 20.3994 14.2002 32.0996 18.5996c5.7002 2.10059 12.1006 -0.0996094 15.1006 -5.39941l8.19922 -14.2998c10.5 1.89941 21.2002 1.89941 31.7002 0l8.2002 14.2998c3 5.2998 9.40039 7.5 15.0996 5.39941c11.8008 -4.39941 22.6006 -10.6992 32.1006 -18.5996\r\n-c4.59961 -3.7998 5.7998 -10.5 2.7998 -15.7002l-8.2002 -14.2998c6.90039 -8 12.2998 -17.2998 15.9004 -27.4004h16.5c6 0 11.2002 -4.2998 12.2002 -10.2998c2 -12 2.09961 -24.5996 0 -37.0996c-1 -6 -6.2002 -10.4004 -12.2002 -10.4004h-16.5\r\n-c-3.60059 -10.0996 -9 -19.3994 -15.9004 -27.3994l8.2002 -14.3008c3 -5.19922 1.90039 -11.8994 -2.7998 -15.6992c-9.5 -7.90039 -20.4004 -14.2002 -32.1006 -18.6006c-5.69922 -2.09961 -12.0996 0.100586 -15.0996 5.40039l-8.2002 14.2998\r\n-c-10.3994 -1.90039 -21.2002 -1.90039 -31.7002 0zM501.6 315.8c38.5 -29.5996 82.4004 14.2998 52.8008 52.7998c-38.5 29.7002 -82.4004 -14.2998 -52.8008 -52.7998zM386.3 161.9l33.7002 -16.8008c10.0996 -5.7998 14.5 -18.0996 10.5 -29.0996\r\n-c-8.90039 -24.2002 -26.4004 -46.4004 -42.5996 -65.7998c-7.40039 -8.90039 -20.2002 -11.1006 -30.3008 -5.2998l-29.0996 16.7998c-16 -13.7002 -34.5996 -24.6006 -54.9004 -31.7002v-33.5996c0 -11.6006 -8.2998 -21.6006 -19.6992 -23.6006\r\n-c-24.6006 -4.2002 -50.4004 -4.39941 -75.9004 0c-11.5 2 -20 11.9004 -20 23.6006v33.5996c-20.2998 7.2002 -38.9004 18 -54.9004 31.7002l-29.0996 -16.7002c-10 -5.7998 -22.9004 -3.59961 -30.2998 5.2998c-16.2002 19.4004 -33.2998 41.6006 -42.2002 65.7002\r\n-c-4 10.9004 0.400391 23.2002 10.5 29.0996l33.2998 16.8008c-3.89941 20.8994 -3.89941 42.3994 0 63.3994l-33.2998 16.9004c-10.0996 5.7998 -14.5996 18.0996 -10.5 29c8.90039 24.2002 26 46.3994 42.2002 65.7998c7.39941 8.90039 20.2002 11.0996 30.2998 5.2998\r\n-l29.0996 -16.7998c16 13.7002 34.6006 24.5996 54.9004 31.7002v33.7002c0 11.5 8.2002 21.5 19.5996 23.5c24.6006 4.19922 50.5 4.39941 76 0.0996094c11.5 -2 20 -11.9004 20 -23.5996v-33.6006c20.3008 -7.2002 38.9004 -18 54.9004 -31.7002l29.0996 16.8008\r\n-c10 5.7998 22.9004 3.59961 30.3008 -5.30078c16.1992 -19.3994 33.1992 -41.5996 42.0996 -65.7998c4 -10.8994 0.0996094 -23.2002 -10 -29.0996l-33.7002 -16.7998c3.90039 -21 3.90039 -42.5 0 -63.5zM268.7 140.8c59.2002 77 -28.7002 164.9 -105.7 105.7\r\n-c-59.2002 -77 28.7002 -164.9 105.7 -105.7zM512.1 -41.9004l-8.19922 -14.2998c-3 -5.2998 -9.40039 -7.5 -15.1006 -5.39941c-11.7998 4.39941 -22.5996 10.6992 -32.0996 18.5996c-4.60059 3.7998 -5.7998 10.5 -2.7998 15.7002l8.19922 14.2998\r\n-c-6.89941 8 -12.2998 17.2998 -15.8994 27.4004h-16.5c-6 0 -11.2002 4.2998 -12.2002 10.2998c-2 12 -2.09961 24.5996 0 37.0996c1 6 6.2002 10.4004 12.2002 10.4004h16.5c3.59961 10.0996 9 19.3994 15.8994 27.3994l-8.19922 14.3008\r\n-c-3 5.19922 -1.90039 11.8994 2.7998 15.6992c9.5 7.90039 20.3994 14.2002 32.0996 18.6006c5.7002 2.09961 12.1006 -0.100586 15.1006 -5.40039l8.19922 -14.2998c10.5 1.90039 21.2002 1.90039 31.7002 0l8.2002 14.2998c3 5.2998 9.40039 7.5 15.0996 5.40039\r\n-c11.8008 -4.40039 22.6006 -10.7002 32.1006 -18.6006c4.59961 -3.7998 5.7998 -10.5 2.7998 -15.6992l-8.2002 -14.3008c6.90039 -8 12.2998 -17.2998 15.9004 -27.3994h16.5c6 0 11.2002 -4.2998 12.2002 -10.2998c2 -12 2.09961 -24.6006 0 -37.1006\r\n-c-1 -6 -6.2002 -10.3994 -12.2002 -10.3994h-16.5c-3.60059 -10.1006 -9 -19.4004 -15.9004 -27.4004l8.2002 -14.2998c3 -5.2002 1.90039 -11.9004 -2.7998 -15.7002c-9.5 -7.90039 -20.4004 -14.2002 -32.1006 -18.5996\r\n-c-5.69922 -2.10059 -12.0996 0.0996094 -15.0996 5.39941l-8.2002 14.2998c-10.3994 -1.89941 -21.2002 -1.89941 -31.7002 0zM501.6 17c38.5 -29.5996 82.4004 14.2998 52.8008 52.7998c-38.5 29.6006 -82.4004 -14.2998 -52.8008 -52.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"576\" \r\n-d=\"M416 256c0 -88.4004 -93.0996 -160 -208 -160c-41 0 -79.0996 9.2998 -111.3 25c-21.7998 -12.7002 -52.1006 -25 -88.7002 -25c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002c0.299805 0.299805 22.3994 24.2998 35.7998 54.5\r\n-c-23.9004 26.0996 -38 57.7002 -38 92c0 88.4004 93.0996 160 208 160s208 -71.5996 208 -160zM538 36c13.4004 -30.2998 35.5 -54.2002 35.7998 -54.5c2.2002 -2.40039 2.7998 -5.7998 1.5 -8.7002c-1.2002 -2.89941 -4.09961 -4.7998 -7.2998 -4.7998\r\n-c-36.5996 0 -66.9004 12.2998 -88.7002 25c-32.2002 -15.7998 -70.2998 -25 -111.3 -25c-86.2002 0 -160.2 40.4004 -191.7 97.9004c10.4004 -1.10059 20.9004 -1.90039 31.7002 -1.90039c132.3 0 240 86.0996 240 192c0 6.7998 -0.400391 13.5 -1.2998 20.0996\r\n-c75.7998 -23.8994 129.3 -81.1992 129.3 -148.1c0 -34.2998 -14.0996 -66 -38 -92z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-half\" unicode=\"&#xf089;\" horiz-adv-x=\"576\" \r\n-d=\"M288 448v-439.6l-130.7 -68.6006c-23.3994 -12.2998 -50.8994 7.60059 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2002l65.2998 132.4c5.90039 11.8994 17.2998 17.7998 28.7002 17.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbtack\" unicode=\"&#xf08d;\" horiz-adv-x=\"384\" \r\n-d=\"M298.028 233.733c47.9893 -22.3135 85.9717 -62.5508 85.9727 -113.733c0 -13.2549 -10.7451 -24 -24 -24h-136v-104.007c0 -1.04297 -0.378906 -2.64551 -0.844727 -3.57812l-24 -48c-2.94727 -5.89258 -11.3701 -5.88184 -14.3115 0l-24 48\r\n-c-0.555664 1.11133 -0.844727 2.33594 -0.844727 3.57812v104.007h-136c-13.2549 0 -24 10.7451 -24 24c0 50.7393 37.4648 91.1797 85.9717 113.733l12.2354 118.267h-42.207c-13.2549 0 -24 10.7451 -24 24v48c0 13.2549 10.7451 24 24 24h272\r\n-c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-42.207z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trophy\" unicode=\"&#xf091;\" horiz-adv-x=\"576\" \r\n-d=\"M552 384c13.2998 0 24 -10.7002 24 -24v-56c0 -35.7002 -22.5996 -72.4004 -61.9004 -100.7c-31.3994 -22.7002 -69.6992 -37.0996 -110 -41.7002c-31.3994 -52.0996 -68.0996 -73.5996 -68.0996 -73.5996v-72h48c35.2998 0 64 -20.7002 64 -56v-12\r\n-c0 -6.59961 -5.40039 -12 -12 -12h-296c-6.59961 0 -12 5.40039 -12 12v12c0 35.2998 28.7002 56 64 56h48v72s-36.7002 21.5 -68.0996 73.5996c-40.2002 4.60059 -78.5 19 -110 41.7002c-39.4004 28.2998 -61.9004 65 -61.9004 100.7v56c0 13.2998 10.7002 24 24 24h104v40\r\n-c0 13.2998 10.7002 24 24 24h272c13.2998 0 24 -10.7002 24 -24v-40h104zM99.2998 255.2c12.5 -9 26.6006 -16.2002 41.7002 -21.4004c-7 25 -11.7998 53.6006 -12.7998 86.2002h-64.2002v-16c0 -11.5996 10.9004 -31.2002 35.2998 -48.7998zM512 304v16h-64.2998\r\n-c-1 -32.5996 -5.7998 -61.2002 -12.7998 -86.2002c15.0996 5.2002 29.2998 12.4004 41.7998 21.4004c17.5996 12.7002 35.2998 32.7002 35.2998 48.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"upload\" unicode=\"&#xf093;\" \r\n-d=\"M296 64h-80c-13.2998 0 -24 10.7002 -24 24v168h-87.7002c-17.7998 0 -26.7002 21.5 -14.0996 34.0996l152.1 152.2c7.5 7.5 19.7998 7.5 27.2998 0l152.2 -152.2c12.6006 -12.5996 3.7002 -34.0996 -14.0996 -34.0996h-87.7002v-168c0 -13.2998 -10.7002 -24 -24 -24z\r\n-M512 72v-112c0 -13.2998 -10.7002 -24 -24 -24h-464c-13.2998 0 -24 10.7002 -24 24v112c0 13.2998 10.7002 24 24 24h136v-8c0 -30.9004 25.0996 -56 56 -56h80c30.9004 0 56 25.0996 56 56v8h136c13.2998 0 24 -10.7002 24 -24zM388 -16c0 11 -9 20 -20 20s-20 -9 -20 -20\r\n-s9 -20 20 -20s20 9 20 20zM452 -16c0 11 -9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20s20 9 20 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \r\n-d=\"M489.038 425.037c23.0938 -23.0938 28.8916 -54.3906 16.833 -75.0928c-34.3115 -58.9043 53.0762 -181.249 -86.7461 -321.071s-262.167 -52.4326 -321.068 -86.7432c-20.7031 -12.0586 -52 -6.2627 -75.0947 16.832c-23.0928 23.0938 -28.8916 54.3906 -16.833 75.0928\r\n-c34.3125 58.9043 -53.0781 181.247 86.7451 321.07s262.167 52.4336 321.073 86.7461c20.7012 12.0586 51.9971 6.25879 75.0908 -16.834zM243.881 352.478c8.57227 2.14355 13.7832 10.8291 11.6416 19.4023c-2.14258 8.57324 -10.8281 13.7852 -19.4033 11.6426\r\n-c-69.8027 -17.4521 -154.218 -101.949 -171.643 -171.643c-2.1416 -8.57324 3.07031 -17.2588 11.6426 -19.4033c1.30273 -0.324219 2.6084 -0.480469 3.89258 -0.480469c7.16895 0 13.6943 4.85352 15.5117 12.124c14.5498 58.2031 90.1689 133.811 148.357 148.357z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone\" unicode=\"&#xf095;\" \r\n-d=\"M493.4 423.4c10.8994 -2.5 18.5996 -12.2002 18.5996 -23.4004c0 -256.5 -207.9 -464 -464 -464c-11.2998 0 -20.9004 7.7998 -23.4004 18.5996l-24 104c-2.59961 11.3008 3.30078 22.9004 14 27.6006l112 48c9.80078 4.2002 21.2002 1.39941 28 -6.90039\r\n-l49.6006 -60.5996c78.2998 36.7002 141.2 100.5 177.2 177.2l-60.6006 49.5996c-8.2998 6.7002 -11.0996 18.2002 -6.89941 28l48 112c4.59961 10.5996 16.1992 16.5 27.5 13.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone-square\" unicode=\"&#xf098;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM94 32c160.055 0 290 129.708 290 290v0c0 6.58691 -5.20898 13.1338 -11.6279 14.6143l-65 14.998\r\n-c-0.918945 0.211914 -2.42969 0.383789 -3.37305 0.383789c-5.45996 0 -11.6367 -4.07324 -13.7871 -9.09082l-30 -69.998c-0.668945 -1.5625 -1.21191 -4.20898 -1.21191 -5.9082c0 -3.92383 2.46387 -9.125 5.50098 -11.6104l37.8857 -30.9971\r\n-c-22.4834 -47.9219 -61.8369 -87.8164 -110.78 -110.779l-30.9971 37.8848c-2.48535 3.03711 -7.68652 5.50195 -11.6104 5.50195c-1.69922 0 -4.3457 -0.543945 -5.9082 -1.21289l-69.998 -29.999c-5.01855 -2.15039 -9.09082 -8.32715 -9.09082 -13.7871\r\n-c0 -0.943359 0.171875 -2.4541 0.383789 -3.37305l14.998 -65c1.55957 -6.75391 7.58301 -11.627 14.6162 -11.627z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlock\" unicode=\"&#xf09c;\" horiz-adv-x=\"448\" \r\n-d=\"M400 192c26.5 0 48 -21.5 48 -48v-160c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v160c0 26.5 21.5 48 48 48h24v102.5c0 84 67.5 153.2 151.5 153.5s152.5 -68 152.5 -152v-16c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v16\r\n-c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-103.1h248z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"credit-card\" unicode=\"&#xf09d;\" horiz-adv-x=\"576\" \r\n-d=\"M0 16v176h576v-176c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48zM192 84v-40c0 -6.59961 5.40039 -12 12 -12h136c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-136c-6.59961 0 -12 -5.40039 -12 -12zM64 84v-40\r\n-c0 -6.59961 5.40039 -12 12 -12h72c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-72c-6.59961 0 -12 -5.40039 -12 -12zM576 368v-48h-576v48c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rss\" unicode=\"&#xf09e;\" horiz-adv-x=\"448\" \r\n-d=\"M128.081 32.041c0 -35.3691 -28.6719 -64.041 -64.041 -64.041s-64.04 28.6719 -64.04 64.041s28.6719 64.041 64.041 64.041s64.04 -28.6729 64.04 -64.041zM303.741 -15.209c0.494141 -9.13477 -6.84668 -16.791 -15.9951 -16.79h-48.0693\r\n-c-8.41406 0 -15.4707 6.49023 -16.0176 14.8867c-7.29883 112.07 -96.9404 201.488 -208.772 208.772c-8.39648 0.545898 -14.8867 7.60254 -14.8867 16.0176v48.0693c0 9.14746 7.65625 16.4883 16.791 15.9941c154.765 -8.36328 278.596 -132.351 286.95 -286.95z\r\n-M447.99 -15.4971c0.324219 -9.03027 -6.97168 -16.5029 -16.0049 -16.5039h-48.0684c-8.62598 0 -15.6455 6.83496 -15.999 15.4531c-7.83789 191.148 -161.286 344.626 -352.465 352.465c-8.61816 0.354492 -15.4531 7.37402 -15.4531 15.999v48.0684\r\n-c0 9.03418 7.47266 16.3301 16.5029 16.0059c234.962 -8.43555 423.093 -197.667 431.487 -431.487z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" horiz-adv-x=\"576\" \r\n-d=\"M576 144v-96c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v96c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48zM528 224h-480h-0.0693359c-8.81738 0 -22.5742 -2.76172 -30.708 -6.16504l96.5283 144.791\r\n-c7.86621 11.7988 25.7578 21.374 39.9385 21.374h268.621c14.1807 0 32.0732 -9.57617 39.9395 -21.374l96.5273 -144.791c-8.13379 3.40332 -21.8906 6.16504 -30.708 6.16504h-0.0693359zM480 128c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32\r\n-s-14.3271 32 -32 32zM384 128c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32s-14.3271 32 -32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bullhorn\" unicode=\"&#xf0a1;\" horiz-adv-x=\"576\" \r\n-d=\"M576 208c0 -23.6299 -12.9502 -44.04 -32.0098 -55.1299v-152.87c0 -9.21973 -7.08008 -32 -32 -32c-6.19336 0.00585938 -15.1445 3.15039 -19.9805 7.01953l-85.0293 68.0303c-42.7002 34.1406 -96.3203 52.9502 -150.98 52.9502h-28.0801\r\n-c-2.79004 -10.21 -4.41016 -20.8896 -4.41016 -32c0 -29.0801 9.75 -55.9199 26.1504 -77.4404c15.79 -20.7197 0.149414 -50.5596 -25.9004 -50.5596h-74.2793c-11.8809 0 -23.2109 6.37012 -28.4004 17.0596c-16.2998 33.5908 -25.5605 71.1709 -25.5605 110.94\r\n-c0 10.8604 0.790039 21.5195 2.18066 32h-33.7002c-35.3496 0 -64 28.6504 -64 64v96c0 35.3496 28.6504 64 64 64h192c54.6602 0 108.28 18.8096 150.99 52.9502l85.0293 68.0303c5.79004 4.63965 12.8604 7.01953 19.9805 7.01953c25.0195 0 32 -23.2598 32 -32.0098\r\n-v-152.87c19.0498 -11.0801 32 -31.4902 32 -55.1201zM480 66.5801v282.84l-33.0498 -26.4395c-54 -43.2002 -121.83 -66.9805 -190.95 -66.9805v-96c69.1201 0 136.95 -23.7803 190.95 -66.9805z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"certificate\" unicode=\"&#xf0a3;\" \r\n-d=\"M458.622 192.08l45.9844 -45.0039c13.7012 -12.9727 7.32227 -36.0371 -10.6641 -40.3389l-62.6504 -15.9902l17.6611 -62.0146c4.99023 -17.834 -11.8252 -34.665 -29.6611 -29.6719l-61.9941 17.667l-15.9834 -62.6709\r\n-c-4.33887 -18.1533 -27.8252 -24.1553 -40.3252 -10.668l-44.9893 46.001l-44.9912 -46.001c-12.6289 -13.3496 -35.8857 -7.90625 -40.3252 10.668l-15.9834 62.6709l-61.9941 -17.667c-17.832 -4.99121 -34.6523 11.833 -29.6611 29.6719l17.6611 62.0146\r\n-l-62.6504 15.9902c-17.9795 4.2998 -24.3721 27.3613 -10.6641 40.3389l45.9854 45.0039l-45.9854 45.0049c-13.7012 12.9707 -7.32227 36.0371 10.665 40.3379l62.6504 15.9902l-17.6611 62.0146c-4.99023 17.834 11.8242 34.665 29.6611 29.6709l61.9951 -17.667\r\n-l15.9834 62.6709c4.27832 17.9023 27.6953 24.0195 40.3252 10.6689l44.9893 -46.3418l44.9902 46.3428c12.7744 13.5039 36.0947 7.03027 40.3252 -10.6689l15.9834 -62.6709l61.9941 17.667c17.832 4.99219 34.6523 -11.833 29.6611 -29.6709l-17.6611 -62.0146\r\n-l62.6504 -15.9902c17.9795 -4.2998 24.3721 -27.3623 10.6641 -40.3389z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-right\" unicode=\"&#xf0a4;\" \r\n-d=\"M512 248.348c0 -23.625 -20.6504 -43.8252 -44.7998 -43.8252h-99.8516c16.3408 -17.0488 18.3467 -49.7666 -6.29883 -70.9443c14.2881 -22.8291 2.14746 -53.0176 -16.4502 -62.3154c8.97461 -49.1406 -21.9453 -71.2627 -72.5996 -71.2627\r\n-c-2.74609 0 -13.2764 0.203125 -16 0.195312c-61.9707 -0.167969 -76.8936 31.0645 -123.731 38.3145c-11.6729 1.80762 -20.2686 11.8916 -20.2686 23.7041v171.525l0.00195312 0.000976562c0.0107422 18.3662 10.6074 35.8887 28.4639 43.8447\r\n-c28.8857 12.9941 95.4131 49.0381 107.534 77.3232c7.79688 18.1934 21.3838 29.084 40 29.0918c34.2217 0.0136719 57.752 -35.0977 44.1191 -66.9082c-3.58301 -8.3584 -8.3125 -16.6699 -14.1533 -24.918h149.234c23.4502 0 44.7998 -20.543 44.7998 -43.8262zM96 248\r\n-v-192c0 -13.2549 -10.7451 -24 -24 -24h-48c-13.2549 0 -24 10.7451 -24 24v192c0 13.2549 10.7451 24 24 24h48c13.2549 0 24 -10.7451 24 -24zM68 80c0 11.0459 -8.9541 20 -20 20s-20 -8.9541 -20 -20s8.9541 -20 20 -20s20 8.9541 20 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-left\" unicode=\"&#xf0a5;\" \r\n-d=\"M44.7998 292.174h149.234c-5.84082 8.24805 -10.5703 16.5586 -14.1533 24.918c-13.6328 31.8105 9.89746 66.9219 44.1191 66.9082c18.6162 -0.0078125 32.2031 -10.8975 40 -29.0918c12.1221 -28.2861 78.6484 -64.3291 107.534 -77.3232\r\n-c17.8564 -7.95605 28.4531 -25.4785 28.4639 -43.8447l0.00195312 -0.000976562v-171.526c0 -11.8115 -8.5957 -21.8965 -20.2686 -23.7031c-46.8379 -7.25 -61.7607 -38.4824 -123.731 -38.3145c-2.72363 0.00683594 -13.2539 -0.195312 -16 -0.195312\r\n-c-50.6543 0 -81.5742 22.1221 -72.5996 71.2627c-18.5977 9.29688 -30.7383 39.4863 -16.4502 62.3154c-24.6455 21.1768 -22.6396 53.8955 -6.29883 70.9443h-99.8516c-24.1494 0 -44.7998 20.2002 -44.7998 43.8252c0 23.2832 21.3496 43.8262 44.7998 43.8262zM440 272\r\n-h48c13.2549 0 24 -10.7451 24 -24v-192c0 -13.2549 -10.7451 -24 -24 -24h-48c-13.2549 0 -24 10.7451 -24 24v192c0 13.2549 10.7451 24 24 24zM464 60c11.0459 0 20 8.9541 20 20s-8.9541 20 -20 20s-20 -8.9541 -20 -20s8.9541 -20 20 -20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-up\" unicode=\"&#xf0a6;\" horiz-adv-x=\"384\" \r\n-d=\"M135.652 448c23.625 0 43.8252 -20.6504 43.8252 -44.7998v-99.8516c17.0488 16.3408 49.7666 18.3467 70.9443 -6.29883c22.8291 14.2881 53.0176 2.14746 62.3154 -16.4502c49.1406 8.97461 71.2627 -21.9453 71.2627 -72.5996\r\n-c0 -2.74609 -0.203125 -13.2764 -0.195312 -16c0.167969 -61.9707 -31.0645 -76.8936 -38.3145 -123.731c-1.80762 -11.6729 -11.8916 -20.2686 -23.7041 -20.2686h-171.525l-0.000976562 0.00195312c-18.3662 0.0107422 -35.8887 10.6074 -43.8447 28.4639\r\n-c-12.9941 28.8857 -49.0381 95.4121 -77.3232 107.534c-18.1943 7.79688 -29.084 21.3838 -29.0918 40c-0.0136719 34.2217 35.0977 57.752 66.9082 44.1191c8.3584 -3.58301 16.6699 -8.3125 24.918 -14.1533v149.234c0 23.4502 20.543 44.7998 43.8262 44.7998zM136 32\r\n-h192c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v48c0 13.2549 10.7451 24 24 24zM304 4c-11.0459 0 -20 -8.9541 -20 -20s8.9541 -20 20 -20s20 8.9541 20 20s-8.9541 20 -20 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-point-down\" unicode=\"&#xf0a7;\" horiz-adv-x=\"384\" \r\n-d=\"M91.8262 -19.2002v149.234c-8.24805 -5.84082 -16.5586 -10.5703 -24.918 -14.1533c-31.8105 -13.6328 -66.9219 9.89746 -66.9082 44.1191c0.0078125 18.6162 10.8975 32.2031 29.0918 40c28.2861 12.1221 64.3291 78.6484 77.3232 107.534\r\n-c7.95605 17.8564 25.4785 28.4531 43.8447 28.4639l0.000976562 0.00195312h171.526c11.8115 0 21.8965 -8.5957 23.7031 -20.2686c7.25 -46.8379 38.4824 -61.7607 38.3145 -123.731c-0.00683594 -2.72363 0.195312 -13.2539 0.195312 -16\r\n-c0 -50.6543 -22.1221 -81.5742 -71.2627 -72.5996c-9.29688 -18.5977 -39.4863 -30.7383 -62.3154 -16.4502c-21.1768 -24.6455 -53.8955 -22.6396 -70.9443 -6.29883v-99.8516c0 -24.1494 -20.2002 -44.7998 -43.8252 -44.7998\r\n-c-23.2832 0 -43.8262 21.3496 -43.8262 44.7998zM112 376v48c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24zM324 400c0 11.0459 -8.9541 20 -20 20s-20 -8.9541 -20 -20\r\n-s8.9541 -20 20 -20s20 8.9541 20 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-circle-left\" unicode=\"&#xf0a8;\" \r\n-d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM284.9 87.5996l-75.5 72.4004h182.6c13.2998 0 24 10.7002 24 24v16c0 13.2998 -10.7002 24 -24 24h-182.6l75.5 72.4004c9.69922 9.2998 9.89941 24.7998 0.399414 34.2998\r\n-l-11 10.8994c-9.39941 9.40039 -24.5996 9.40039 -33.8994 0l-132.7 -132.6c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l132.7 -132.699c9.39941 -9.40039 24.5996 -9.40039 33.8994 0l11 10.8994c9.5 9.5 9.2998 25 -0.399414 34.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-circle-right\" unicode=\"&#xf0a9;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM227.1 296.4l75.5 -72.4004h-182.6c-13.2998 0 -24 -10.7002 -24 -24v-16c0 -13.2998 10.7002 -24 24 -24h182.6l-75.5 -72.4004\r\n-c-9.69922 -9.2998 -9.89941 -24.7998 -0.399414 -34.2998l11 -10.8994c9.39941 -9.40039 24.5996 -9.40039 33.8994 0l132.7 132.6c9.40039 9.40039 9.40039 24.5996 0 33.9004l-132.7 132.8c-9.39941 9.39941 -24.5996 9.39941 -33.8994 0l-11 -10.9004\r\n-c-9.5 -9.59961 -9.2998 -25.0996 0.399414 -34.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-circle-up\" unicode=\"&#xf0aa;\" \r\n-d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM151.6 163.1l72.4004 75.5v-182.6c0 -13.2998 10.7002 -24 24 -24h16c13.2998 0 24 10.7002 24 24v182.6l72.4004 -75.5c9.2998 -9.69922 24.7998 -9.89941 34.2998 -0.399414\r\n-l10.8994 11c9.40039 9.39941 9.40039 24.5996 0 33.8994l-132.6 132.7c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-132.8 -132.7c-9.39941 -9.39941 -9.39941 -24.5996 0 -33.8994l10.9004 -11c9.59961 -9.5 25.0996 -9.2998 34.3994 0.399414z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-circle-down\" unicode=\"&#xf0ab;\" \r\n-d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM360.4 220.9l-72.4004 -75.5v182.6c0 13.2998 -10.7002 24 -24 24h-16c-13.2998 0 -24 -10.7002 -24 -24v-182.6l-72.4004 75.5\r\n-c-9.2998 9.69922 -24.7998 9.89941 -34.2998 0.399414l-10.8994 -11c-9.40039 -9.39941 -9.40039 -24.5996 0 -33.8994l132.6 -132.7c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l132.699 132.7c9.40039 9.39941 9.40039 24.5996 0 33.8994l-10.8994 11\r\n-c-9.5 9.5 -25 9.2998 -34.2998 -0.399414z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe\" unicode=\"&#xf0ac;\" horiz-adv-x=\"496\" \r\n-d=\"M336.5 288h-177c14.5 89.2998 48.7002 152 88.5 152s74 -62.7002 88.5 -152zM152 192c0 22.2002 1.2002 43.5 3.2998 64h185.3c2.10059 -20.5 3.30078 -41.7998 3.30078 -64s-1.2002 -43.5 -3.30078 -64h-185.3c-2.09961 20.5 -3.2998 41.7998 -3.2998 64zM476.7 288\r\n-h-108c-8.7998 56.9004 -25.6006 107.8 -50 141.6c71.5 -21.1992 129.399 -73.6992 158 -141.6zM177.2 429.6c-24.4004 -33.7998 -41.2002 -84.6992 -49.9004 -141.6h-108c28.5 67.9004 86.5 120.4 157.9 141.6zM487.4 256c5.39941 -20.5 8.5 -41.7998 8.5 -64\r\n-s-3.10059 -43.5 -8.60059 -64h-114.6c2.09961 21 3.2998 42.5 3.2998 64s-1.2002 43 -3.2998 64h114.7zM120 192c0 -21.5 1.2002 -43 3.2002 -64h-114.601c-5.39941 20.5 -8.59961 41.7998 -8.59961 64s3.2002 43.5 8.59961 64h114.7\r\n-c-2.09961 -21 -3.2998 -42.5 -3.2998 -64zM159.5 96h177c-14.5 -89.2998 -48.7002 -152 -88.5 -152s-74 62.7002 -88.5 152zM318.8 -45.5996c24.4004 33.7998 41.2002 84.6992 50 141.6h108c-28.5996 -67.9004 -86.5996 -120.4 -158 -141.6zM19.2998 96h108\r\n-c8.7998 -56.9004 25.6006 -107.8 50 -141.6c-71.5 21.1992 -129.399 73.6992 -158 141.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wrench\" unicode=\"&#xf0ad;\" \r\n-d=\"M507.73 338.9c11.7891 -47.4102 -0.84082 -99.6602 -37.9102 -136.73c-39.9004 -39.9004 -97.25 -50.9297 -147.37 -34.2197l-213.21 -213.21c-24.9902 -24.9902 -65.5098 -24.9902 -90.5 0s-24.9902 65.5098 0 90.5l213.39 213.39\r\n-c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604\r\n-c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tasks\" unicode=\"&#xf0ae;\" \r\n-d=\"M139.61 412.5l17 -16.5c1.90234 -1.94531 3.44727 -5.7334 3.44727 -8.4541c0 -2.7627 -1.58496 -6.5918 -3.53809 -8.5459l-72.1992 -72.1904l-15.5898 -15.6191c-2.04297 -1.94238 -5.9873 -3.51758 -8.80566 -3.51758c-2.81738 0 -6.7627 1.5752 -8.80469 3.51758\r\n-l-47.5898 47.3994c-1.94824 1.94141 -3.5293 5.75 -3.5293 8.5c0 2.75098 1.58105 6.55859 3.5293 8.5l15.7002 15.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55762 -1.58203 8.5 -3.53027l22.6992 -22.1191l63.6807 63.3096\r\n-c1.94141 1.94824 5.74902 3.5293 8.5 3.5293c2.75 0 6.55859 -1.58105 8.5 -3.5293zM139.61 253.31l16.9795 -17c1.89648 -1.93164 3.43457 -5.69727 3.43457 -8.4043c0 -2.74805 -1.5791 -6.55371 -3.52441 -8.49512l-72.2002 -72.2197l-15.7002 -15.6904\r\n-c-2.04102 -1.94141 -5.9834 -3.5166 -8.7998 -3.5166s-6.75879 1.5752 -8.7998 3.5166l-47.4697 47.5c-1.94824 1.94141 -3.5293 5.74902 -3.5293 8.5s1.58105 6.55859 3.5293 8.5l15.7002 15.6904c1.94141 1.94824 5.74902 3.5293 8.5 3.5293\r\n-c2.75 0 6.55762 -1.58105 8.5 -3.5293l22.6992 -22.1006l63.6807 63.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55859 -1.58203 8.5 -3.53027zM64 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48\r\n-s22.0996 48 48.5898 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"filter\" unicode=\"&#xf0b0;\" \r\n-d=\"M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971\r\n-c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"briefcase\" unicode=\"&#xf0b1;\" \r\n-d=\"M320 112v48h192v-144c0 -25.5996 -22.4004 -48 -48 -48h-416c-25.5996 0 -48 22.4004 -48 48v144h192v-48c0 -8.83984 7.16016 -16 16 -16h96c8.83984 0 16 7.16016 16 16zM464 320c25.5996 0 48 -22.4004 48 -48v-80h-512v80c0 25.5996 22.4004 48 48 48h80v48\r\n-c0 25.5996 22.4004 48 48 48h160c25.5996 0 48 -22.4004 48 -48v-48h80zM320 320v32h-128v-32h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrows-alt\" unicode=\"&#xf0b2;\" \r\n-d=\"M352.201 22.2246l-79.1963 -79.1953c-9.37305 -9.37305 -24.5684 -9.37305 -33.9404 0l-79.1963 79.1953c-15.1191 15.1191 -4.41113 40.9717 16.9707 40.9707h51.1621l-0.000976562 100.805h-100.804v-51.1621c0 -21.3818 -25.8516 -32.0898 -40.9717 -16.9707\r\n-l-79.1953 79.1963c-9.37305 9.37207 -9.37305 24.5684 0 33.9404l79.1953 79.1963c15.1191 15.1191 40.9717 4.41113 40.9717 -16.9717v-51.2285h100.804v100.804h-51.2305c-21.3818 0 -32.0898 25.8516 -16.9707 40.9717l79.1963 79.1953\r\n-c9.37305 9.37305 24.5684 9.37305 33.9404 0l79.1963 -79.1953c15.1191 -15.1191 4.41113 -40.9717 -16.9707 -40.9717h-51.1621v-100.804h100.804v51.1621c0 21.3818 25.8516 32.0898 40.9707 16.9707l79.1953 -79.1963c9.37305 -9.37207 9.37305 -24.5684 0 -33.9404\r\n-l-79.1953 -79.1963c-15.1191 -15.1191 -40.9717 -4.41113 -40.9707 16.9717v51.2285h-100.803v-100.804h51.2305c21.3818 0 32.0898 -25.8516 16.9707 -40.9717z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"users\" unicode=\"&#xf0c0;\" horiz-adv-x=\"640\" \r\n-d=\"M96 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM544 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM576 192c35.2998 0 64 -28.7002 64 -64v-32\r\n-c0 -17.7002 -14.2998 -32 -32 -32h-66c-6.2002 47.4004 -34.7998 87.2998 -75.0996 109.4c11.5996 11.5 27.5 18.5996 45.0996 18.5996h64zM320 192c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM396.8 160\r\n-c63.6006 0 115.2 -51.5996 115.2 -115.2v-28.7998c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v28.7998c0 63.6006 51.5996 115.2 115.2 115.2h8.2998c20.9004 -10 43.9004 -16 68.5 -16s47.7002 6 68.5 16h8.2998zM173.1 173.4\r\n-c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"link\" unicode=\"&#xf0c1;\" \r\n-d=\"M326.612 262.609c59.7471 -59.8096 58.9268 -155.698 0.359375 -214.591c-0.109375 -0.119141 -0.239258 -0.25 -0.359375 -0.369141l-67.2002 -67.2002c-59.2705 -59.2705 -155.699 -59.2627 -214.96 0c-59.2705 59.2598 -59.2705 155.7 0 214.96l37.1055 37.1055\r\n-c9.84082 9.84082 26.7861 3.30078 27.2939 -10.6055c0.648438 -17.7227 3.82617 -35.5273 9.69043 -52.7207c1.98633 -5.82227 0.567383 -12.2627 -3.7832 -16.6123l-13.0869 -13.0869c-28.0254 -28.0264 -28.9053 -73.6602 -1.15527 -101.96\r\n-c28.0244 -28.5791 74.0859 -28.749 102.325 -0.510742l67.2002 67.1904c28.1914 28.1914 28.0732 73.7568 0 101.83c-3.70117 3.69434 -7.42871 6.56348 -10.3408 8.56934c-3.66504 2.51562 -6.77734 8.16309 -6.94727 12.6055\r\n-c-0.395508 10.5674 3.34766 21.4561 11.6982 29.8057l21.0537 21.0557c5.52148 5.52051 14.1826 6.19922 20.584 1.73047c6.08301 -4.24707 15.2764 -11.9512 20.5225 -17.1963zM467.547 403.551c59.2705 -59.2598 59.2705 -155.7 -0.000976562 -214.959l-37.1055 -37.1055\r\n-c-9.84082 -9.83984 -26.7852 -3.30078 -27.2939 10.6055c-0.648438 17.7227 -3.82617 35.5273 -9.69043 52.7217c-1.98633 5.82129 -0.567383 12.2617 3.7832 16.6113l13.0869 13.0869c28.0264 28.0264 28.9053 73.6602 1.15527 101.96\r\n-c-28.0254 28.5791 -74.0869 28.749 -102.325 0.510742l-67.2002 -67.1904c-28.1914 -28.1914 -28.0732 -73.7568 0 -101.83c3.70117 -3.69434 7.42871 -6.56348 10.3408 -8.56934c3.66504 -2.51562 6.77734 -8.16309 6.94727 -12.6055\r\n-c0.395508 -10.5674 -3.34766 -21.4561 -11.6982 -29.8057l-21.0537 -21.0557c-5.52051 -5.51953 -14.1826 -6.19922 -20.584 -1.73047c-6.08203 4.24609 -15.2754 11.9502 -20.5215 17.1953c-59.7471 59.8096 -58.9258 155.698 -0.359375 214.591\r\n-c0.109375 0.119141 0.239258 0.25 0.359375 0.369141l67.2002 67.2002c59.2705 59.2705 155.699 59.2627 214.96 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud\" unicode=\"&#xf0c2;\" horiz-adv-x=\"640\" \r\n-d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\r\n-c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flask\" unicode=\"&#xf0c3;\" horiz-adv-x=\"448\" \r\n-d=\"M437.2 44.5c29.2998 -47 -4.40039 -108.5 -60.1006 -108.5h-306.199c-55.6006 0 -89.4004 61.4004 -60.1006 108.5l117.2 188.5v151h-8c-13.2998 0 -24 10.7002 -24 24v16c0 13.2998 10.7002 24 24 24h208c13.2998 0 24 -10.7002 24 -24v-16\r\n-c0 -13.2998 -10.7002 -24 -24 -24h-8v-151zM137.9 128h172l-48.2002 77.5996c-3.60059 5.2002 -5.7998 11.5 -5.7998 18.4004v160h-64v-160c0 -6.7998 -2.10059 -13.2002 -5.80078 -18.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cut\" unicode=\"&#xf0c4;\" horiz-adv-x=\"448\" \r\n-d=\"M278.06 192l166.421 -166.43c4.68945 -4.69043 4.68945 -12.29 0 -16.9707c-32.8008 -32.7998 -85.9902 -32.7998 -118.79 0l-115.511 115.521l-24.8594 -24.8604c4.30957 -10.9199 6.67969 -22.8096 6.67969 -35.2598c0 -53.0195 -42.9805 -96 -96 -96\r\n-s-96 42.9805 -96 96s42.9805 96 96 96c4.53027 0 8.99023 -0.320312 13.3604 -0.929688l32.9297 32.9297l-32.9297 32.9297c-4.37012 -0.609375 -8.82031 -0.929688 -13.3604 -0.929688c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96\r\n-c0 -12.4502 -2.37012 -24.3398 -6.67969 -35.2598l24.8594 -24.8604l115.511 115.521c32.7998 32.7998 85.9893 32.7998 118.79 0c4.68945 -4.68066 4.68945 -12.2803 0 -16.9707zM96 288c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32\r\n-s14.3604 -32 32 -32zM96 32c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32s14.3604 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"448\" \r\n-d=\"M320 0v-40c0 -13.2549 -10.7451 -24 -24 -24h-272c-13.2549 0 -24 10.7451 -24 24v368c0 13.2549 10.7451 24 24 24h72v-296c0 -30.8789 25.1211 -56 56 -56h168zM320 344c0 -13.2002 10.7998 -24 24 -24h104v-264c0 -13.2549 -10.7451 -24 -24 -24h-272\r\n-c-13.2549 0 -24 10.7451 -24 24v368c0 13.2549 10.7451 24 24 24h168v-104zM440.971 375.029c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9707v-6.05859h-96v96h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paperclip\" unicode=\"&#xf0c6;\" horiz-adv-x=\"448\" \r\n-d=\"M43.2461 -18.1416c-58.4297 60.2891 -57.3408 157.511 1.38574 217.581l209.76 214.561c44.3164 45.332 116.352 45.3359 160.672 0c43.8896 -44.8936 43.9424 -117.329 0 -162.276l-182.85 -186.852c-29.8545 -30.5371 -78.6328 -30.1113 -107.981 0.998047\r\n-c-28.2754 29.9697 -27.3682 77.4727 1.45117 106.953l143.743 146.835c6.18262 6.31348 16.3125 6.42188 22.626 0.241211l22.8613 -22.3799c6.31445 -6.18164 6.42188 -16.3115 0.241211 -22.626l-143.729 -146.82c-4.93164 -5.04492 -5.23535 -13.4287 -0.647461 -18.292\r\n-c4.37207 -4.63379 11.2451 -4.71094 15.6875 -0.165039l182.85 186.851c19.6123 20.0625 19.6123 52.7256 -0.0117188 72.7979c-19.1885 19.627 -49.957 19.6377 -69.1533 0l-209.762 -214.56c-34.7627 -35.5605 -35.2988 -93.1201 -1.19043 -128.313\r\n-c34.0098 -35.0928 88.9844 -35.1367 123.058 -0.285156l172.061 175.999c6.17676 6.31836 16.3066 6.43262 22.626 0.255859l22.877 -22.3643c6.31836 -6.17676 6.43359 -16.3066 0.255859 -22.626l-172.061 -175.998c-59.5752 -60.9385 -155.942 -60.2158 -214.77 0.485352\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" horiz-adv-x=\"448\" \r\n-d=\"M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM224 32\r\n-c35.3457 0 64 28.6543 64 64s-28.6543 64 -64 64s-64 -28.6543 -64 -64s28.6543 -64 64 -64zM320 336.52c0 2.74316 -1.5752 6.5459 -3.51465 8.48535l-3.48047 3.48047c-2.25 2.25098 -5.30176 3.51465 -8.48535 3.51465h-228.52c-6.62695 0 -12 -5.37305 -12 -12v-104\r\n-c0 -6.62695 5.37305 -12 12 -12h232c6.62695 0 12 5.37305 12 12v100.52z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"square\" unicode=\"&#xf0c8;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bars\" unicode=\"&#xf0c9;\" horiz-adv-x=\"448\" \r\n-d=\"M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40\r\n-c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list-ul\" unicode=\"&#xf0ca;\" \r\n-d=\"M48 400c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 240c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48\r\n-s-48 21.5039 -48 48s21.5039 48 48 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\r\n-h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"list-ol\" unicode=\"&#xf0cb;\" \r\n-d=\"M61.7695 47c19.6104 -5.12012 28.7002 -20.5 28.7305 -34.8799c0 -21.3701 -14.3398 -44.1201 -48.5 -44.1201c-16.6201 0 -29.29 4.75 -37 9.44043c-5.82031 4.21973 -6.34961 9.80957 -2.62988 15.9395l5.58984 9.31055c3.86035 6.61914 9.11035 7 15.5996 3.11914\r\n-c4.10352 -1.68652 11.0342 -3.08496 15.4707 -3.11914c10.1602 0 14.3594 3.5 14.3594 8.21973c0 6.64941 -5.60938 9.08984 -15.9395 9.08984h-4.73047c-5.95996 0 -9.25 2.12012 -12.25 7.87988l-1.0498 1.92969c-2.4502 4.75 -1.2002 9.81055 2.7998 14.8809l5.61035 7\r\n-c2.85742 3.55664 7.78516 9.07129 11 12.3096h-22.8301c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h57c7.5 0 11.3398 -4 11.3398 -11.3496v-3.31055c0.0107422 -0.245117 0.0205078 -0.644531 0.0205078 -0.890625\r\n-c0 -4.20801 -2.28027 -10.166 -5.09082 -13.2988zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM16 288\r\n-c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h16v64h-8c-4.4082 0.0078125 -7.98535 3.5918 -7.98535 8c0 1.04297 0.378906 2.64746 0.845703 3.58008l8 16c1.21777 2.43457 4.41699 4.41504 7.13965 4.41992h24c4.41602 0 8 -3.58398 8 -8v-88h16\r\n-c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-64zM12.0898 128c-7.00977 0 -12.0898 4 -12.0898 11.4102v4c0 47.2803 51 56.3994 50.9697 69.1201c0 7.18945 -5.9502 8.75 -9.2793 8.75h-0.0546875c-3.02832 0 -7.24219 -1.7207 -9.40527 -3.83984\r\n-c-5.12012 -4.91016 -10.5107 -7 -16.1201 -2.44043l-8.58008 6.87988c-5.7998 4.53027 -7.16992 9.78027 -2.7998 15.3701c6.65918 8.75 19.0996 18.75 40.46 18.75c19.4697 0 44.4697 -10.5 44.4697 -39.5596c0 -37.7607 -45.0498 -46.1504 -48.3398 -56.4404h38.6797\r\n-c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-67.9102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"strikethrough\" unicode=\"&#xf0cc;\" \r\n-d=\"M496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.319336 3.29297 -0.579102 8.65137 -0.579102 11.96\r\n-c0 68.2158 55.3633 123.624 123.579 123.68h68h0.0117188c43.6865 0 94.9863 -31.7188 114.509 -70.7998l0.529297 -1c0.930664 -1.86328 1.68652 -5.06641 1.68652 -7.14844c0 -5.45898 -3.96289 -11.8711 -8.8457 -14.3115l-42.9404 -21.4707\r\n-c-1.86426 -0.931641 -5.06836 -1.6875 -7.15234 -1.6875c-5.45605 0 -11.8652 3.95996 -14.3076 8.83789c-7.61133 15.2246 -27.6025 27.5801 -44.624 27.5801h-0.0361328h-66.79c-24.0391 -0.000976562 -43.5488 -19.5107 -43.5488 -43.5498\r\n-c0 -17.749 13.7666 -36.3945 30.7295 -41.6201l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.21191 -6.56152 4.60352 -17.4746 5.33984 -24.3604c0.319336 -3.29297 0.579102 -8.65137 0.579102 -11.96c0 -68.2158 -55.3633 -123.624 -123.579 -123.68h-68h-0.0117188\r\n-c-43.6865 0 -94.9863 31.7188 -114.509 70.7998l-0.529297 1c-0.930664 1.86328 -1.68652 5.06641 -1.68652 7.14844c0 5.45898 3.96289 11.8711 8.8457 14.3115l42.9404 21.4707c1.86426 0.931641 5.06836 1.6875 7.15234 1.6875\r\n-c5.45605 0 11.8652 -3.95996 14.3076 -8.83789c7.61133 -15.2246 27.6025 -27.5801 44.624 -27.5801h0.0361328h66.79c24.0176 0.0224609 43.5273 19.5322 43.5498 43.5498c-0.00976562 13.1572 -9.07715 29.4863 -20.2402 36.4502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"underline\" unicode=\"&#xf0cd;\" horiz-adv-x=\"448\" \r\n-d=\"M32 384c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v160h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"table\" unicode=\"&#xf0ce;\" \r\n-d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"magic\" unicode=\"&#xf0d0;\" \r\n-d=\"M224 352l-16 32l-32 16l32 16l16 32l16 -32l32 -16l-32 -16zM80 288l-26.6602 53.3301l-53.3398 26.6699l53.3398 26.6699l26.6602 53.3301l26.6602 -53.3301l53.3398 -26.6699l-53.3398 -26.6699zM432 160l26.6602 -53.3301l53.3398 -26.6699l-53.3398 -26.6699\r\n-l-26.6602 -53.3301l-26.6602 53.3301l-53.3398 26.6699l53.3398 26.6699zM502.62 353.77c12.5 -12.4893 12.5 -32.7598 0 -45.2393l-363.14 -363.15c-6.25 -6.25 -14.4404 -9.37012 -22.6309 -9.37012c-8.17969 0 -16.3691 3.12012 -22.6191 9.37012l-84.8506 84.8506\r\n-c-12.5 12.4893 -12.5 32.75 0 45.25l363.14 363.14c6.25 6.25977 14.4404 9.37988 22.6309 9.37988c8.18945 0 16.3799 -3.12012 22.6191 -9.37988zM359.45 244.54l86.5996 86.5996l-50.9102 50.9102l-86.5996 -86.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck\" unicode=\"&#xf0d1;\" horiz-adv-x=\"640\" \r\n-d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96h-16c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48 -21.5 48 -48v-48h44.0996\r\n-c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM480 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48\r\n-s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-bill\" unicode=\"&#xf0d6;\" horiz-adv-x=\"640\" \r\n-d=\"M608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM48 48h64c0 35.3496 -28.6504 64 -64 64v-64zM48 272c35.3496 0 64 28.6504 64 64h-64v-64zM320 96\r\n-c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96zM592 48v64c-35.3496 0 -64 -28.6504 -64 -64h64zM592 272v64h-64c0 -35.3496 28.6504 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-down\" unicode=\"&#xf0d7;\" horiz-adv-x=\"320\" \r\n-d=\"M31.2998 256h257.3c17.8008 0 26.7002 -21.5 14.1006 -34.0996l-128.601 -128.7c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0l-128.6 128.7c-12.6006 12.5996 -3.7002 34.0996 14.0996 34.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-up\" unicode=\"&#xf0d8;\" horiz-adv-x=\"320\" \r\n-d=\"M288.662 96h-257.324c-17.8184 0 -26.7412 21.543 -14.1416 34.1416l128.662 128.662c7.80957 7.81055 20.4736 7.81055 28.2832 0l128.662 -128.662c12.6006 -12.5986 3.67676 -34.1416 -14.1416 -34.1416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-left\" unicode=\"&#xf0d9;\" horiz-adv-x=\"192\" \r\n-d=\"M192 320.662v-257.324c0 -17.8184 -21.543 -26.7412 -34.1416 -14.1416l-128.662 128.662c-7.81055 7.80957 -7.81055 20.4736 0 28.2832l128.662 128.662c12.5986 12.6006 34.1416 3.67676 34.1416 -14.1416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-right\" unicode=\"&#xf0da;\" horiz-adv-x=\"192\" \r\n-d=\"M0 63.3379v257.324c0 17.8184 21.543 26.7412 34.1416 14.1416l128.662 -128.662c7.81055 -7.80957 7.81055 -20.4736 0 -28.2832l-128.662 -128.662c-12.5986 -12.6006 -34.1416 -3.67676 -34.1416 14.1416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"columns\" unicode=\"&#xf0db;\" \r\n-d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v256h-160v-256h160zM448 32v256h-160v-256h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort\" unicode=\"&#xf0dc;\" horiz-adv-x=\"320\" \r\n-d=\"M41 160h238c21.4004 0 32.0996 -25.9004 17 -41l-119 -119c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-119.1 119c-15.0996 15.0996 -4.40039 41 17 41zM296 265c15.0996 -15.0996 4.40039 -41 -17 -41h-238c-21.4004 0 -32.0996 25.9004 -17 41l119.1 119\r\n-c9.30078 9.40039 24.5 9.40039 33.9004 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-down\" unicode=\"&#xf0dd;\" horiz-adv-x=\"320\" \r\n-d=\"M41 160h238c21.4004 0 32.0996 -25.9004 17 -41l-119 -119c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-119.1 119c-15.0996 15.0996 -4.40039 41 17 41z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-up\" unicode=\"&#xf0de;\" horiz-adv-x=\"320\" \r\n-d=\"M279 224h-238c-21.4004 0 -32.0996 25.9004 -17 41l119 119c9.40039 9.40039 24.5996 9.40039 33.9004 0l119 -119c15.1992 -15.0996 4.5 -41 -16.9004 -41z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf0e0;\" \r\n-d=\"M502.3 257.2c3.90039 3.09961 9.7002 0.200195 9.7002 -4.7002v-204.5c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v204.4c0 5 5.7002 7.7998 9.7002 4.69922c22.3994 -17.3994 52.0996 -39.5 154.1 -113.6\r\n-c21.1006 -15.4004 56.7002 -47.7998 92.2002 -47.5996c35.7002 -0.300781 72 32.7998 92.2998 47.5996c102 74.0996 131.601 96.2998 154 113.7zM256 128c-23.2002 -0.400391 -56.5996 29.2002 -73.4004 41.4004c-132.699 96.2998 -142.8 104.8 -173.399 128.699\r\n-c-5.7998 4.60059 -9.2002 11.5 -9.2002 18.9004v19c0 26.5 21.5 48 48 48h416c26.5 0 48 -21.5 48 -48v-19c0 -7.40039 -3.40039 -14.4004 -9.2002 -18.9004c-30.5996 -24 -40.7002 -32.3994 -173.399 -128.699c-16.8008 -12.2002 -50.2002 -41.8008 -73.4004 -41.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"undo\" unicode=\"&#xf0e2;\" \r\n-d=\"M212.333 223.667h-200.333c-6.62695 0 -12 5.37305 -12 12v200.333c0 6.62695 5.37305 12 12 12h48c6.62695 0 12 -5.37305 12 -12v-78.1123c45.7734 50.833 112.26 82.6426 186.175 82.1055c136.906 -0.994141 246.448 -111.623 246.157 -248.532\r\n-c-0.291016 -136.719 -111.212 -247.461 -247.999 -247.461c-64.0889 0 -122.496 24.3135 -166.51 64.2148c-5.09961 4.62207 -5.33398 12.5537 -0.466797 17.4199l33.9668 33.9668c4.47363 4.47461 11.6621 4.71777 16.4004 0.525391\r\n-c31.0361 -27.4629 71.8564 -44.127 116.609 -44.127c97.2676 0 176 78.7158 176 176c0 97.2666 -78.7158 176 -176 176c-58.4961 0 -110.28 -28.4756 -142.274 -72.333h98.2744c6.62695 0 12 -5.37305 12 -12v-48c0 -6.62695 -5.37305 -12 -12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gavel\" unicode=\"&#xf0e3;\" \r\n-d=\"M504.971 248.638c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-124.451 -124.451c-9.37109 -9.37305 -24.5674 -9.37305 -33.9404 0l-22.627 22.627c-9.37305 9.37207 -9.37305 24.5684 0 33.9414l5.65723 5.65625l-39.5986 39.5986l-81.04 -81.04l5.65723 -5.65723\r\n-c12.4971 -12.4971 12.4971 -32.7578 0 -45.2549l-114.745 -114.745c-12.4971 -12.4971 -32.7578 -12.4971 -45.2549 0l-45.2549 45.2549c-12.4971 12.4971 -12.4971 32.7578 0 45.2549l114.744 114.746c12.4971 12.4971 32.7578 12.4971 45.2549 0l5.65723 -5.65723\r\n-l81.04 81.04l-39.5986 39.5986l-5.65625 -5.65723c-9.37207 -9.37305 -24.5684 -9.37305 -33.9414 0l-22.627 22.627c-9.37305 9.37207 -9.37305 24.5684 0 33.9404l124.451 124.451c9.37207 9.37305 24.5674 9.37305 33.9404 0l22.627 -22.6279\r\n-c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-5.65625 -5.65723l113.138 -113.137l5.65723 5.65625c9.37207 9.37305 24.5674 9.37305 33.9404 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bolt\" unicode=\"&#xf0e7;\" horiz-adv-x=\"320\" \r\n-d=\"M296 288c18.5 0 30 -20.0996 20.7002 -36l-176 -304c-4.40039 -7.59961 -12.4004 -12 -20.7998 -12c-15.3008 0 -26.9004 14.2998 -23.3008 29.5l46.1006 194.5h-118.7c-14.5 0 -25.7002 12.7998 -23.7998 27.2002l32 240\r\n-c1.59961 11.8994 11.7998 20.7998 23.7998 20.7998h144c15.7002 0 27.2002 -15 23.2002 -30.2002l-42.6006 -129.8h115.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sitemap\" unicode=\"&#xf0e8;\" horiz-adv-x=\"640\" \r\n-d=\"M128 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM104 176v-48h-48v57.5898c0 21.1797 17.2305 38.4102 38.4102 38.4102h201.59v64h-40c-17.6699 0 -32 14.3301 -32 32\r\n-v96c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-40v-64h201.59c21.1797 0 38.4102 -17.2402 38.4102 -38.4102v-57.5898h-48v48h-192v-48h-48v48h-192zM368 96c17.6699 0 32 -14.3301 32 -32v-96\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM608 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"umbrella\" unicode=\"&#xf0e9;\" horiz-adv-x=\"576\" \r\n-d=\"M575.7 167.2c2.2002 -10.1006 -8.40039 -21.4004 -18.7002 -11.4004c-51.5 54.4004 -107.6 52.5 -158.6 -37c-5.30078 -9.5 -14.9004 -8.59961 -19.7002 0c-2.5 4.40039 -32.2002 73.2002 -90.7002 73.2002c-45.7998 0 -70.5 -37.7998 -90.7002 -73.2002\r\n-c-4.7998 -8.59961 -14.3994 -9.5 -19.7002 0c-50.8994 89.4004 -106.6 92 -158.6 37c-10.2002 -9.89941 -20.9004 1.2998 -18.7002 11.4004c29.2002 136.3 138 218.2 255.7 230.899v17.9004c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-17.9004\r\n-c117.3 -12.6992 227.1 -94.5996 255.7 -230.899zM256 146.3c9.59961 8.90039 19.7002 13.6006 32 13.7002c12.2002 0 22.9004 -5.7002 32 -13.5996v-130.301c0 -44.0996 -35.9004 -80 -80 -80c-33.7998 0 -64.2002 21.4004 -75.4004 53.3008\r\n-c-5.89941 16.5996 2.80078 34.8994 19.5 40.7998c16.7002 5.89941 34.9004 -2.7998 40.8008 -19.5c1.89941 -5.40039 7.2998 -10.7002 15.0996 -10.7002c8.7998 0 16 7.2002 16 16v130.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paste\" unicode=\"&#xf0ea;\" horiz-adv-x=\"448\" \r\n-d=\"M128 264v-232h-104c-13.2549 0 -24 10.7451 -24 24v336c0 13.2549 10.7451 24 24 24h80.6104c11.084 19.1104 31.7529 32 55.3896 32s44.3057 -12.8896 55.3896 -32h80.6104c13.2549 0 24 -10.7451 24 -24v-72h-136c-30.8779 0 -56 -25.1211 -56 -56zM160 408\r\n-c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM344 160h104v-200c0 -13.2549 -10.7451 -24 -24 -24h-240c-13.2549 0 -24 10.7451 -24 24v304c0 13.2549 10.7451 24 24 24h136v-104c0 -13.2002 10.7998 -24 24 -24z\r\n-M448 198.059v-6.05859h-96v96h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293l65.9404 -65.9404c3.88086 -3.88086 7.03027 -11.4834 7.03027 -16.9717z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lightbulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"352\" \r\n-d=\"M96.0596 -6.34961l-0.0498047 38.3496h159.98l-0.0400391 -38.3496c-0.00585938 -5.3291 -2.40723 -13.2549 -5.36035 -17.6904l-17.0898 -25.6904c-5.24023 -7.88184 -17.1748 -14.2793 -26.6396 -14.2793h-61.71c-9.46582 0 -21.4004 6.39746 -26.6406 14.2793\r\n-l-17.0898 25.6904c-3.49023 5.24023 -5.34961 11.4004 -5.36035 17.6904zM0 272c0 93.0303 73.4404 175.69 175.45 176c97.46 0.299805 176.55 -78.6104 176.55 -176c0 -44.3701 -16.4502 -84.8496 -43.5596 -115.78c-16.5205 -18.8496 -42.3604 -58.2295 -52.21 -91.4502\r\n-c-0.0400391 -0.269531 -0.0703125 -0.519531 -0.110352 -0.779297h-160.24c-0.0400391 0.259766 -0.0703125 0.519531 -0.110352 0.779297c-9.84961 33.2207 -35.6895 72.6006 -52.21 91.4502c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78zM176 352\r\n-c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16c-61.7598 0 -112 -50.2402 -112 -112c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16c0 44.1104 35.8896 80 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-md\" unicode=\"&#xf0f0;\" horiz-adv-x=\"448\" \r\n-d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM104 24c0 13.2998 10.7002 24 24 24s24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24zM320 159.4c71.2002 -3.5 128 -61.8008 128 -133.801\r\n-v-44.7998c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v44.7998c0 66.6006 48.5 121.4 112.1 132.101v-80.4004c-23.0996 -6.89941 -40 -28.0996 -40 -53.3994c0 -30.9004 25.1006 -56 56 -56\r\n-c30.9004 0 56 25.0996 56 56c0 25.2998 -16.8994 46.5 -40 53.3994v81.6006c7.7002 -1 15.2002 -2.60059 22.6006 -5.2002c18 -6.2998 37.2998 -9.7998 57.3994 -9.7998c20.1006 0 39.4004 3.5 57.4004 9.7998c2.2002 0.799805 4.40039 1.2002 6.59961 1.89941v-45.1992\r\n-c-36.5 -7.5 -64 -39.8008 -64 -78.4004v-43.7998c0 -8.10059 5.90039 -14.7998 13.8008 -15.9004l31.1992 -4.2002c4.30078 -0.799805 8.5 2 9.40039 6.30078l3.09961 15.6992c0.800781 4.30078 -2 8.5 -6.2998 9.40039l-19.2998 3.90039v26.6992\r\n-c0 67 96 64.7002 96 1.90039v-28.5l-19.2998 -3.90039c-4.40039 -0.799805 -7.2002 -5.09961 -6.2998 -9.39941l3.09961 -15.7002c0.900391 -4.40039 5.09961 -7.2002 9.40039 -6.2998l32.1992 6.39941c7.5 1.5 12.9004 8.10059 12.9004 15.7002v41.7002\r\n-c0 38.5996 -27.5 71 -64 78.4004v49z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stethoscope\" unicode=\"&#xf0f1;\" \r\n-d=\"M447.1 336c35.7002 0.5 64.9004 -28.2998 64.9004 -64c0 -23.7002 -12.9004 -44.2998 -32 -55.4004v-112.6c0 -92.5996 -79 -168 -176 -168c-95.4004 0 -173.3 72.7998 -175.9 163.2c-73 14.7998 -128.1 79.5 -128.1 156.8v155.4c0 11.5 8.09961 21.2998 19.2998 23.5996\r\n-l62.7998 12.4004c13 2.59961 25.6006 -5.80078 28.2002 -18.8008l3.10059 -15.6992c2.59961 -13 -5.80078 -25.6006 -18.8008 -28.2002l-30.6992 -6.10059v-122.5c0 -53.2998 43.5 -96.5 96.8994 -96c52.9004 0.5 95.1006 44.3008 95.1006 97.2002v121.4l-30.7002 6.09961\r\n-c-13 2.60059 -21.4004 15.2002 -18.7998 28.2002l3.19922 15.7002c2.60059 13 15.2002 21.3994 28.2002 18.7998l62.9004 -12.5996c11.2002 -2.2002 19.2998 -12.1006 19.2998 -23.5v-155.4c0 -77.2002 -55 -141.8 -127.8 -156.8\r\n-c2.7002 -55.1006 51.8994 -99.2002 111.899 -99.2002c61.8008 0 112 46.7002 112 104v112.6c-19.5 11.2002 -32.5 32.5 -32 56.8008c0.700195 34.1992 28.8008 62.0996 63 62.5996zM448 256c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16\r\n-s7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"suitcase\" unicode=\"&#xf0f2;\" \r\n-d=\"M128 -32v400c0 26.5 21.5 48 48 48h160c26.5 0 48 -21.5 48 -48v-400h-256zM192 352v-32h128v32h-128zM512 272v-256c0 -26.5 -21.5 -48 -48 -48h-48v352h48c26.5 0 48 -21.5 48 -48zM96 -32h-48c-26.5 0 -48 21.5 -48 48v256c0 26.5 21.5 48 48 48h48v-352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0f3;\" horiz-adv-x=\"448\" \r\n-d=\"M224 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64zM439.39 85.71c6 -6.44043 8.66016 -14.1602 8.61035 -21.71c-0.0996094 -16.4004 -12.9805 -32 -32.0996 -32h-383.801c-19.1191 0 -31.9893 15.5996 -32.0996 32\r\n-c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c19.3193 20.7598 55.4697 51.9902 55.4697 154.29c0 77.7002 54.4795 139.9 127.939 155.16v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398\r\n-c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -102.3 36.1504 -133.53 55.4697 -154.29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"coffee\" unicode=\"&#xf0f4;\" horiz-adv-x=\"640\" \r\n-d=\"M192 64c-53 0 -96 43 -96 96v232c0 13.2998 10.7002 24 24 24h392c70.5996 0 128 -57.4004 128 -128s-57.4004 -128 -128 -128h-32c0 -53 -43 -96 -96 -96h-192zM512 352h-32v-128h32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64zM559.7 -32h-511.4\r\n-c-47.5996 0 -61 64 -36 64h583.3c25 0 11.8008 -64 -35.8994 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"448\" \r\n-d=\"M448 -44v-20h-448v20c0 6.62695 5.37305 12 12 12h20v360c0 13.2549 10.7451 24 24 24h88v72c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-72h88c13.2549 0 24 -10.7451 24 -24v-360h20c6.62695 0 12 -5.37305 12 -12zM308 256h-40\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12zM140 192h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\r\n-c0 -6.62695 5.37305 -12 12 -12zM244 64h-40c-6.62695 0 -12 -5.37305 -12 -12v-84h64v84c0 6.62695 -5.37305 12 -12 12zM308 160h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12\r\n-zM192 148c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40zM182 352h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6v26h26c3.31152 0 6 2.68848 6 6v20\r\n-c0 3.31152 -2.68848 6 -6 6h-26v26c0 3.31152 -2.68848 6 -6 6h-20c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ambulance\" unicode=\"&#xf0f9;\" horiz-adv-x=\"640\" \r\n-d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96h-16c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48 -21.5 48 -48v-48h44.0996\r\n-c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM304 232v48c0 4.40039 -3.59961 8 -8 8h-56v56\r\n-c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8zM480 -16c26.5 0 48 21.5 48 48\r\n-s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medkit\" unicode=\"&#xf0fa;\" \r\n-d=\"M96 -32v352h32v48c0 26.5098 21.4902 48 48 48h160c26.5098 0 48 -21.4902 48 -48v-48h32v-352h-320zM192 352v-32h128v32h-128zM512 272v-256c0 -26.5098 -21.4902 -48 -48 -48h-16v352h16c26.5098 0 48 -21.4902 48 -48zM64 -32h-16c-26.5098 0 -48 21.4902 -48 48v256\r\n-c0 26.5098 21.4902 48 48 48h16v-352zM352 176c0 8.83691 -7.16309 16 -16 16h-48v48c0 8.83691 -7.16309 16 -16 16h-32c-8.83691 0 -16 -7.16309 -16 -16v-48h-48c-8.83691 0 -16 -7.16309 -16 -16v-32c0 -8.83691 7.16309 -16 16 -16h48v-48\r\n-c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v48h48c8.83691 0 16 7.16309 16 16v32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fighter-jet\" unicode=\"&#xf0fb;\" horiz-adv-x=\"640\" \r\n-d=\"M544 224c96 -21.333 96 -26.583 96 -32s0 -10.667 -96 -32l-128 -16l-48 -16h-24l-116.842 -148h39.5088c11.666 0 21.333 -2.625 21.333 -6s-9.66602 -6 -21.333 -6h-114.667v12h16v164h-48l-66.666 -80h-34.667l-10.667 10.667v69.333h8v16h48v2.66699l-64 8v42.667\r\n-l64 8v2.66602h-48v16h-8v69.333l10.667 10.667h34.666l66.667 -80h48v164h-16v12h114.667c11.666 0 21.333 -2.625 21.333 -6s-9.66699 -6 -21.333 -6h-39.5088l116.842 -148h24l48 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"beer\" unicode=\"&#xf0fc;\" horiz-adv-x=\"448\" \r\n-d=\"M368 352c44.1123 0 80 -35.8877 80 -80v-128.86c0 -31.5273 -18.6035 -60.2031 -47.3936 -73.0527l-80.6064 -35.9766v-42.1104c0 -13.2549 -10.7451 -24 -24 -24h-272c-13.2549 0 -24 10.7451 -24 24v400c0 13.2549 10.7451 24 24 24h272c13.2549 0 24 -10.7451 24 -24\r\n-v-40h48zM384 143.14v128.86c0 8.82227 -7.17773 16 -16 16h-48v-183.805l54.5215 24.334c5.22754 2.33789 9.47461 8.88379 9.47852 14.6104zM208 64c8.83594 0 16 7.16406 16 16v224c0 8.83594 -7.16406 16 -16 16s-16 -7.16406 -16 -16v-224\r\n-c0 -8.83594 7.16406 -16 16 -16zM112 64c8.83594 0 16 7.16406 16 16v224c0 8.83594 -7.16406 16 -16 16s-16 -7.16406 -16 -16v-224c0 -8.83594 7.16406 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"h-square\" unicode=\"&#xf0fd;\" horiz-adv-x=\"448\" \r\n-d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM336 320h-32c-8.83691 0 -16 -7.16309 -16 -16v-80h-128v80c0 8.83691 -7.16309 16 -16 16h-32\r\n-c-8.83691 0 -16 -7.16309 -16 -16v-224c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v80h128v-80c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v224c0 8.83691 -7.16309 16 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plus-square\" unicode=\"&#xf0fe;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM368 164v56c0 6.59961 -5.40039 12 -12 12h-92v92c0 6.59961 -5.40039 12 -12 12h-56c-6.59961 0 -12 -5.40039 -12 -12v-92h-92\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-56c0 -6.59961 5.40039 -12 12 -12h92v-92c0 -6.59961 5.40039 -12 12 -12h56c6.59961 0 12 5.40039 12 12v92h92c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-double-left\" unicode=\"&#xf100;\" horiz-adv-x=\"448\" \r\n-d=\"M223.7 209l136 136c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.6006 -22.5996c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-96.2998 -96.5l96.3994 -96.4004c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.7002\r\n-c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-136 136c-9.5 9.40039 -9.5 24.5996 -0.0996094 34zM31.7002 175c-9.40039 9.40039 -9.40039 24.5996 0.0996094 34l136 136c9.2998 9.40039 24.5 9.40039 33.9004 0l22.5996 -22.7002\r\n-c9.40039 -9.2998 9.40039 -24.5 0 -33.8994l-96.3994 -96.4004l96.2998 -96.5c9.39941 -9.2998 9.39941 -24.5 0 -33.9004l-22.6006 -22.5996c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-double-right\" unicode=\"&#xf101;\" horiz-adv-x=\"448\" \r\n-d=\"M224.3 175l-136 -136c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.6006 22.5996c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l96.4004 96.4004l-96.4004 96.3994c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l22.5 22.7998\r\n-c9.40039 9.40039 24.6006 9.40039 33.9004 0l136 -136c9.5 -9.40039 9.5 -24.5996 0.0996094 -34zM416.3 209c9.40039 -9.40039 9.40039 -24.5996 0 -33.7998l-136 -136c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0l-22.6006 22.5996\r\n-c-9.39941 9.2998 -9.39941 24.5 0 33.9004l96.4004 96.3994l-96.4004 96.4004c-9.39941 9.2998 -9.39941 24.5 0 33.9004l22.6006 22.5996c9.2998 9.40039 24.5 9.40039 33.8994 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-double-up\" unicode=\"&#xf102;\" horiz-adv-x=\"320\" \r\n-d=\"M177 192.3l136 -136c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.6006c-9.40039 -9.39941 -24.6006 -9.39941 -33.9004 0l-96.5 96.2998l-96.4004 -96.3994c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.7002 22.5996\r\n-c-9.40039 9.40039 -9.40039 24.6006 0 33.9004l136 136c9.40039 9.5 24.5996 9.5 34 0.0996094zM143 384.3c9.40039 9.40039 24.5996 9.40039 33.7998 0l136 -136c9.40039 -9.2998 9.40039 -24.5 0 -33.8994l-22.5996 -22.6006c-9.2998 -9.39941 -24.5 -9.39941 -33.9004 0\r\n-l-96.3994 96.4004l-96.4004 -96.4004c-9.2998 -9.39941 -24.5 -9.39941 -33.9004 0l-22.5996 22.6006c-9.40039 9.2998 -9.40039 24.5 0 33.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-double-down\" unicode=\"&#xf103;\" horiz-adv-x=\"320\" \r\n-d=\"M143 191.7l-136 136c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.5996 22.6006c9.40039 9.39941 24.6006 9.39941 33.9004 0l96.4004 -96.4004l96.3994 96.4004c9.40039 9.39941 24.6006 9.39941 33.9004 0l22.7998 -22.5\r\n-c9.40039 -9.40039 9.40039 -24.6006 0 -33.9004l-136 -136c-9.40039 -9.5 -24.5996 -9.5 -34 -0.0996094zM177 -0.299805c-9.40039 -9.40039 -24.5996 -9.40039 -34 0.0996094l-136 136c-9.40039 9.2998 -9.40039 24.5 0 33.9004l22.7002 22.5996\r\n-c9.2998 9.40039 24.5 9.40039 33.8994 0l96.4004 -96.3994l96.5 96.2998c9.2998 9.39941 24.5 9.39941 33.9004 0l22.5996 -22.6006c9.40039 -9.2998 9.40039 -24.5 0 -33.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-left\" unicode=\"&#xf104;\" horiz-adv-x=\"256\" \r\n-d=\"M31.7002 209l136 136c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.6006 -22.5996c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-96.2998 -96.5l96.3994 -96.4004c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.7002\r\n-c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-136 136c-9.5 9.40039 -9.5 24.5996 -0.0996094 34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-right\" unicode=\"&#xf105;\" horiz-adv-x=\"256\" \r\n-d=\"M224.3 175l-136 -136c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.6006 22.5996c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l96.4004 96.4004l-96.4004 96.3994c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l22.5 22.7998\r\n-c9.40039 9.40039 24.6006 9.40039 33.9004 0l136 -136c9.5 -9.40039 9.5 -24.5996 0.0996094 -34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-up\" unicode=\"&#xf106;\" horiz-adv-x=\"320\" \r\n-d=\"M177 288.3l136 -136c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.6006c-9.40039 -9.39941 -24.6006 -9.39941 -33.9004 0l-96.5 96.2998l-96.4004 -96.3994c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.7002 22.5996\r\n-c-9.40039 9.40039 -9.40039 24.6006 0 33.9004l136 136c9.40039 9.5 24.5996 9.5 34 0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angle-down\" unicode=\"&#xf107;\" horiz-adv-x=\"320\" \r\n-d=\"M143 95.7002l-136 136c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.5996 22.6006c9.40039 9.39941 24.6006 9.39941 33.9004 0l96.4004 -96.4004l96.3994 96.4004c9.40039 9.39941 24.6006 9.39941 33.9004 0l22.5996 -22.6006\r\n-c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-136 -136c-9.2002 -9.40039 -24.3994 -9.40039 -33.7998 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"desktop\" unicode=\"&#xf108;\" horiz-adv-x=\"576\" \r\n-d=\"M528 448c26.5 0 48 -21.5 48 -48v-320c0 -26.5 -21.5 -48 -48 -48h-192l16 -48h72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24h-272c-13.2998 0 -24 10.7002 -24 24s10.7002 24 24 24h72l16 48h-192c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h480z\r\n-M512 96v288h-448v-288h448z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laptop\" unicode=\"&#xf109;\" horiz-adv-x=\"640\" \r\n-d=\"M624 32c8.7998 0 16 -7.2002 16 -16v-16c0 -35.2002 -28.7998 -64 -64 -64h-512c-35.2002 0 -64 28.7998 -64 64v16c0 8.7998 7.2002 16 16 16h239.23c-0.25 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46zM576 400v-336h-512v336\r\n-c0 26.4004 21.5996 48 48 48h416c26.4004 0 48 -21.5996 48 -48zM512 128v256h-384v-256h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tablet\" unicode=\"&#xf10a;\" horiz-adv-x=\"448\" \r\n-d=\"M400 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h352zM224 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mobile\" unicode=\"&#xf10b;\" horiz-adv-x=\"320\" \r\n-d=\"M272 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-224c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h224zM160 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quote-left\" unicode=\"&#xf10d;\" \r\n-d=\"M464 192c26.5 0 48 -21.5 48 -48v-128c0 -26.5 -21.5 -48 -48 -48h-128c-26.5 0 -48 21.5 -48 48v240c0 88.4004 71.5996 160 160 160h8c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8c-35.2998 0 -64 -28.7002 -64 -64v-64h80zM176 192\r\n-c26.5 0 48 -21.5 48 -48v-128c0 -26.5 -21.5 -48 -48 -48h-128c-26.5 0 -48 21.5 -48 48v240c0 88.4004 71.5996 160 160 160h8c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8c-35.2998 0 -64 -28.7002 -64 -64v-64h80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quote-right\" unicode=\"&#xf10e;\" \r\n-d=\"M464 416c26.5 0 48 -21.5 48 -48v-240c0 -88.4004 -71.5996 -160 -160 -160h-8c-13.2998 0 -24 10.7002 -24 24v48c0 13.2998 10.7002 24 24 24h8c35.2998 0 64 28.7002 64 64v64h-80c-26.5 0 -48 21.5 -48 48v128c0 26.5 21.5 48 48 48h128zM176 416\r\n-c26.5 0 48 -21.5 48 -48v-240c0 -88.4004 -71.5996 -160 -160 -160h-8c-13.2998 0 -24 10.7002 -24 24v48c0 13.2998 10.7002 24 24 24h8c35.2998 0 64 28.7002 64 64v64h-80c-26.5 0 -48 21.5 -48 48v128c0 26.5 21.5 48 48 48h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spinner\" unicode=\"&#xf110;\" \r\n-d=\"M304 400c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48zM256 32c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48zM464 240c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48\r\n-s-48 21.4902 -48 48s21.4902 48 48 48zM96 192c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48zM108.922 92.9219c26.5088 0 48 -21.4912 48 -48c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48z\r\n-M403.078 92.9219c26.5098 0 48 -21.4912 48 -48c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48zM108.922 387.078c26.5088 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\r\n-s32 14.2998 32 32s-14.2998 32 -32 32zM362.8 101.8c13.5 16.2998 -11.2002 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002s-67.7998 15.3008 -90.2002 42.2002c-13.5996 16.2002 -38.2002 -4.2002 -24.5996 -20.5\r\n-c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\r\n-s32 14.2998 32 32s-14.2998 32 -32 32zM338.2 53.7998c13.5 -16.2998 38.0996 4.2002 24.5 20.4004c-28.4004 34.2002 -70.2998 53.7998 -114.7 53.7998s-86.2998 -19.5996 -114.8 -53.7002c-13.5 -16.2998 11.0996 -36.7998 24.5996 -20.5\r\n-c22.4004 26.7998 55.2998 42.2002 90.2002 42.2002s67.7998 -15.4004 90.2002 -42.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM344 80c21.2002 0 21.2002 32 0 32h-192c-21.2002 0 -21.2002 -32 0 -32\r\n-h192zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gamepad\" unicode=\"&#xf11b;\" horiz-adv-x=\"640\" \r\n-d=\"M480.07 352c88.2939 -0.0263672 159.952 -71.7061 159.952 -160c0 -88.3203 -71.6797 -160 -160 -160c-37.1016 0 -88.291 21.5039 -114.263 48h-91.5195c-25.9717 -26.4961 -77.1611 -48 -114.263 -48c-88.3203 0 -160 71.6797 -160 160s71.6797 160 160 160h0.0224609\r\n-h320.07zM248 180v24c0 6.62402 -5.37598 12 -12 12h-52v52c0 6.62402 -5.37598 12 -12 12h-24c-6.62402 0 -12 -5.37598 -12 -12v-52h-52c-6.62402 0 -12 -5.37598 -12 -12v-24c0 -6.62402 5.37598 -12 12 -12h52v-52c0 -6.62402 5.37598 -12 12 -12h24\r\n-c6.62402 0 12 5.37598 12 12v52h52c6.62402 0 12 5.37598 12 12zM464 104c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40zM528 200c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"576\" \r\n-d=\"M528 0h-480c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48zM128 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\r\n-c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM224 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 268v40c0 6.62695 -5.37305 12 -12 12h-40\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM416 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM512 268v40\r\n-c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM176 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40\r\n-c6.62695 0 12 5.37305 12 12zM272 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM368 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\r\n-c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM464 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM128 76v40c0 6.62695 -5.37305 12 -12 12h-40\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM416 76v40c0 6.62695 -5.37305 12 -12 12h-232c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h232c6.62695 0 12 5.37305 12 12zM512 76v40\r\n-c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag-checkered\" unicode=\"&#xf11e;\" \r\n-d=\"M243.2 258.1c24.2002 -6.69922 47.5996 -16.3994 73.5996 -22.1992v-68.2002c-24.2998 6.7002 -47.5 16.3994 -73.5996 22.2998v68.0996zM466.5 381.1c21.2002 9.80078 45.5 -5.69922 45.4004 -29v-243.1c0 -10.5996 -5.10059 -20.4004 -13.8008 -26.4004\r\n-c-35.7998 -24.5996 -74.2998 -40.8994 -122.5 -40.8994c-67.3994 0 -111.6 34.7998 -165.199 34.7998c-50.8008 0 -86.1006 -10 -114.4 -22.0996v-94.4004c0 -13.2998 -10.7002 -24 -24 -24h-16c-13.2998 0 -24 10.7002 -24 24v386.1c-14.5 10.1006 -24 26.9004 -24 45.9004\r\n-c0 31.7002 26.2998 57.2998 58.2998 56c28.5 -1.2002 51.7998 -24 53.6006 -52.4004c0.5 -8.39941 -0.800781 -16.2998 -3.60059 -23.5996c20.7002 7.59961 43 12 68 12c67.4004 0 111.7 -34.7998 165.2 -34.7998c40.5 0 82.7002 16 117 31.8994zM169.6 122.5v71.2998\r\n-c-26.0996 -2.39941 -47.3994 -8.09961 -73.5996 -17.3994v-70.5c23.5996 8.39941 47.7998 13.8994 73.5996 16.5996zM464 257v70.5c-21.2998 -8.90039 -46.5996 -17.7002 -73.5996 -22.5v-71.9004c-26 -4.19922 -49.9004 -2.59961 -73.6006 2.7002v68.4004\r\n-c-26.3994 4.59961 -49.8994 13.8994 -73.5996 21.2998v-67.4004c-25.2002 7 -46.6006 9.40039 -73.6006 5.7002v71.6006c-23.5 -2.2002 -40.3994 -9.80078 -73.5996 -22v-70.5c29 10.6992 51.2002 17.7998 73.5996 20.8994v-70c32.8008 3 53.9004 0.600586 73.6006 -3.7998\r\n-v-68.5c26.2998 -4.59961 49.7002 -13.9004 73.5996 -21.2998v67.3994c25.7002 -7.09961 46.6006 -9.2998 73.6006 -5.59961v-71.5996c25.0996 2.39941 48.5 11 73.5996 27.0996v70.5c-22.2002 -14.2002 -48.7998 -22.5996 -73.5996 -26v71.0996\r\n-c27.2998 4.40039 50 14.1006 73.5996 23.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"terminal\" unicode=\"&#xf120;\" horiz-adv-x=\"640\" \r\n-d=\"M257.981 175.029l-194.344 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9404 0l-22.668 22.667c-9.35742 9.35742 -9.375 24.5225 -0.0400391 33.9014l154.021 154.746l-154.021 154.745c-9.33496 9.37891 -9.31738 24.5439 0.0400391 33.9014l22.667 22.667\r\n-c9.37305 9.37207 24.5684 9.37207 33.9404 0l194.344 -194.344c9.37207 -9.37207 9.37207 -24.5674 0 -33.9404zM640 -8c0 -13.2549 -10.7451 -24 -24 -24h-304c-13.2549 0 -24 10.7451 -24 24v32c0 13.2549 10.7451 24 24 24h304c13.2549 0 24 -10.7451 24 -24v-32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"code\" unicode=\"&#xf121;\" horiz-adv-x=\"640\" \r\n-d=\"M278.9 -63.5l-61 17.7002c-6.40039 1.7998 -10 8.5 -8.2002 14.8994l136.5 470.2c1.7998 6.40039 8.5 10 14.8994 8.2002l61 -17.7002c6.40039 -1.7998 10 -8.5 8.2002 -14.8994l-136.5 -470.2c-1.89941 -6.40039 -8.5 -10.1006 -14.8994 -8.2002zM164.9 48.7002\r\n-c-4.5 -4.90039 -12.1006 -5.10059 -17 -0.5l-144.101 135.1c-5.09961 4.7002 -5.09961 12.7998 0 17.5l144.101 135c4.89941 4.60059 12.5 4.2998 17 -0.5l43.5 -46.3994c4.69922 -4.90039 4.2998 -12.7002 -0.800781 -17.2002l-90.5996 -79.7002l90.5996 -79.7002\r\n-c5.10059 -4.5 5.40039 -12.2998 0.800781 -17.2002zM492.1 48.0996c-4.89941 -4.5 -12.5 -4.2998 -17 0.600586l-43.5 46.3994c-4.69922 4.90039 -4.2998 12.7002 0.800781 17.2002l90.5996 79.7002l-90.5996 79.7998c-5.10059 4.5 -5.40039 12.2998 -0.800781 17.2002\r\n-l43.5 46.4004c4.60059 4.7998 12.2002 5 17 0.5l144.101 -135.2c5.09961 -4.7002 5.09961 -12.7998 0 -17.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reply-all\" unicode=\"&#xf122;\" horiz-adv-x=\"576\" \r\n-d=\"M136.309 258.164l176.005 151.985c15.4062 13.3047 39.6865 2.50293 39.6865 -18.1641v-82.7637c129.182 -10.2305 224 -52.2119 224 -183.548c0 -61.4404 -39.582 -122.309 -83.333 -154.132c-13.6533 -9.93066 -33.1113 2.5332 -28.0771 18.6309\r\n-c38.5117 123.162 -3.92188 169.482 -112.59 182.016v-84.1758c0 -20.7012 -24.2998 -31.4531 -39.6865 -18.1641l-176.005 151.987c-11.0703 9.56152 -11.0859 26.7529 0 36.3281zM8.30859 221.836c-11.0703 9.56152 -11.0859 26.7529 0 36.3281l176.005 151.985\r\n-c15.4062 13.3047 39.6865 2.50293 39.6865 -18.1641v-15.8174l-108.607 -93.7861c-10.7041 -9.23926 -19.3926 -28.2158 -19.3926 -42.3564v-0.0234375v-0.0244141c0 -14.1416 8.68848 -33.1191 19.3936 -42.3604l108.606 -93.7852v-15.8184\r\n-c0 -20.7002 -24.2998 -31.4531 -39.6865 -18.1641z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"location-arrow\" unicode=\"&#xf124;\" \r\n-d=\"M444.52 444.48c38.3809 16 79.9609 -25.5801 63.9707 -63.9707l-191.9 -415.779c-22.3896 -47.9805 -92.75 -31.9805 -92.75 19.1895v175.91h-175.91c-51.1699 0 -67.1602 70.3604 -19.1895 92.75z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crop\" unicode=\"&#xf125;\" \r\n-d=\"M488 96c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-40v-40c0 -13.25 -10.75 -24 -24 -24h-48c-13.25 0 -24 10.75 -24 24v282.75l-146.75 -146.75h114.75v-96h-232c-13.25 0 -24 10.75 -24 24v264h-40c-13.25 0 -24 10.75 -24 24v48\r\n-c0 13.2598 10.75 24 24 24h40v40c0 13.2598 10.75 24 24 24h48c13.25 0 24 -10.7402 24 -24v-282.75l146.75 146.75h-114.75v96h210.75l59.3096 59.3096c6.25 6.25 16.3809 6.25 22.6309 0l22.6191 -22.6191c6.25 -6.25 6.25 -16.3809 0 -22.6309l-59.3096 -59.3096v-242.75\r\n-h40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"code-branch\" unicode=\"&#xf126;\" horiz-adv-x=\"384\" \r\n-d=\"M384 304c0 -35.2002 -22.7998 -65.0996 -54.4004 -75.9004c-0.5 -28.0996 -7.59961 -50.5 -21.5996 -67.8994c-28.2002 -35 -76 -39.5 -118.2 -43.4004c-25.7002 -2.39941 -49.8994 -4.59961 -66.0996 -12.7998c-7.10059 -3.59961 -11.7998 -8.2002 -14.9004 -13.4004\r\n-c30 -11.5 51.2002 -40.5996 51.2002 -74.5996c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 35.7998 23.5 66.0996 56 76.4004v199.3c-32.5 10.2002 -56 40.5 -56 76.2998c0 44.2002 35.7998 80 80 80s80 -35.7998 80 -80c0 -35.7998 -23.5 -66.0996 -56 -76.2998\r\n-v-144c23.9004 11.5 53.0996 14.2998 81.2998 16.8994c35.9004 3.30078 69.7998 6.5 85.2002 25.7002c6.7998 8.40039 10.4004 20.7998 11 36.9004c-33.2002 9.7002 -57.5 40.3994 -57.5 76.7998c0 44.2002 35.7998 80 80 80s80 -35.7998 80 -80zM80 384\r\n-c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16s16 7.2002 16 16s-7.2002 16 -16 16zM80 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM304 320c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16s16 7.2002 16 16\r\n-s-7.2002 16 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlink\" unicode=\"&#xf127;\" \r\n-d=\"M304.083 42.0928c4.68555 -4.68555 4.68555 -12.2842 0 -16.9707l-44.6738 -44.6738c-59.2627 -59.2627 -155.693 -59.2666 -214.961 0c-59.2646 59.2646 -59.2646 155.695 0 214.96l44.6748 44.6748c4.68555 4.68555 12.2842 4.68555 16.9707 0l39.5986 -39.5977\r\n-c4.68555 -4.68652 4.68555 -12.2842 0 -16.9717l-44.6758 -44.6738c-28.0713 -28.0732 -28.0713 -73.75 0 -101.823c28.0723 -28.0713 73.75 -28.0723 101.824 0l44.6738 44.6748c4.68652 4.68555 12.2842 4.68555 16.9717 0zM247.515 302.309l-39.5967 39.5986\r\n-c-4.68555 4.68652 -4.68555 12.2852 0 16.9707l44.6738 44.6738c59.2666 59.2646 155.695 59.2646 214.961 0s59.2656 -155.694 0 -214.96l-44.6748 -44.6748c-4.68652 -4.68555 -12.2852 -4.68555 -16.9707 0l-39.5986 39.5977c-4.68555 4.6875 -4.68555 12.2852 0 16.9717\r\n-l44.6758 44.6738c28.0713 28.0732 28.0713 73.75 0 101.823c-28.0742 28.0723 -73.752 28.0742 -101.824 0l-44.6738 -44.6748c-4.6875 -4.68555 -12.2852 -4.68555 -16.9717 0zM482.343 -56.9707c-9.37207 -9.37207 -24.5674 -9.37207 -33.9404 0l-441.373 441.373\r\n-c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l22.6279 22.6279c9.37207 9.37305 24.5674 9.37305 33.9404 0l441.372 -441.374c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"question\" unicode=\"&#xf128;\" horiz-adv-x=\"384\" \r\n-d=\"M202.021 448c84.8809 0 175.482 -66.2559 175.481 -153.6c0 -115.982 -125.268 -117.768 -125.268 -160.627v-5.77344c0 -13.2549 -10.7451 -24 -24 -24h-72.4717c-13.2549 0 -24 10.7451 -24 24v9.78809c0 61.8291 46.876 86.5449 82.2998 106.405\r\n-c30.376 17.0293 48.9922 28.6113 48.9922 51.1641c0 29.832 -38.0518 49.6309 -68.8154 49.6309c-39.127 0 -57.708 -18.0684 -82.7568 -49.4492c-8.12109 -10.1738 -22.8809 -12.0127 -33.2529 -4.14844l-43.1387 32.709c-10.2705 7.78809 -12.541 22.2939 -5.17773 32.874\r\n-c40.5889 58.3232 92.2881 91.0264 172.107 91.0264zM192 74.541c38.1963 0 69.2715 -31.0742 69.2715 -69.2695c0 -38.1963 -31.0752 -69.2715 -69.2715 -69.2715s-69.2715 31.0752 -69.2715 69.2695c0 38.1963 31.0752 69.2715 69.2715 69.2715z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"info\" unicode=\"&#xf129;\" horiz-adv-x=\"192\" \r\n-d=\"M20 23.7715h20v144.457h-20c-11.0459 0 -20 8.9541 -20 20v47.7715c0 11.0459 8.9541 20 20 20h112c11.0459 0 20 -8.9541 20 -20v-212.229h20c11.0459 0 20 -8.9541 20 -20v-47.7715c0 -11.0459 -8.9541 -20 -20 -20h-152c-11.0459 0 -20 8.9541 -20 20v47.7715\r\n-c0 11.0459 8.9541 20 20 20zM96 448c39.7637 0 72 -32.2354 72 -72s-32.2354 -72 -72 -72s-72 32.2354 -72 72s32.2354 72 72 72z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exclamation\" unicode=\"&#xf12a;\" horiz-adv-x=\"192\" \r\n-d=\"M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272\r\n-c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"superscript\" unicode=\"&#xf12b;\" \r\n-d=\"M496 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32\r\n-c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16\r\n-h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"subscript\" unicode=\"&#xf12c;\" \r\n-d=\"M496 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32\r\n-c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16\r\n-h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eraser\" unicode=\"&#xf12d;\" \r\n-d=\"M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256\r\n-c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"puzzle-piece\" unicode=\"&#xf12e;\" horiz-adv-x=\"576\" \r\n-d=\"M519.442 159.349c37.5957 0 56.5576 -31.5928 56.5576 -65.792c0 -33.5469 -19.2881 -61.5566 -54.9229 -61.5557c-39.8848 0 -50.3457 36.1523 -86.3086 36.1523c-60.5518 0 -25.8262 -120.102 -25.8262 -120.102c-51.5557 0 -181.23 -35.0732 -181.23 25.7305\r\n-c0 35.8271 36.2881 46.25 36.2881 85.9844c0 35.501 -28.1152 54.7178 -61.7881 54.7178c-34.3271 0 -63.5771 -18.8906 -63.5771 -56.3467c0 -41.3633 40 -58.998 40 -81.4707c0 -69.709 -178.635 -28.6621 -178.635 -28.6621v333.237s175.885 -40.9609 175.884 28.6621\r\n-c0 22.4727 -31.7109 40.3857 -31.7109 81.75c0 37.4551 31.7119 56.3457 66.3662 56.3457c33.3457 0 61.4609 -19.2158 61.4609 -54.7178c0 -39.7354 -36.2881 -50.1582 -36.2881 -85.9854c0 -83.2969 196.288 -3.29688 196.288 -3.29688\r\n-s-54.5908 -176.244 5.38379 -176.244c22.5586 0 40.5391 31.5928 82.0586 31.5928z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone\" unicode=\"&#xf130;\" horiz-adv-x=\"352\" \r\n-d=\"M176 96c-53.0195 0 -96 42.9805 -96 96v160c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96v-160c0 -53.0195 -42.9805 -96 -96 -96zM336 256c8.83984 0 16 -7.16016 16 -16v-48c0 -88.9004 -66.29 -162.47 -152 -174.23v-33.7695h56c8.83984 0 16 -7.16016 16 -16v-16\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v40.1602c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-42.2998\r\n-c0 -66.8105 48.71 -126.59 115.21 -133.08c76.2998 -7.44043 140.79 52.5801 140.79 127.38v48c0 8.83984 7.16016 16 16 16h16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone-slash\" unicode=\"&#xf131;\" horiz-adv-x=\"640\" \r\n-d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\r\n-c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l178.54 -137.99v45.3604c0 53.0195 42.9805 96 96 96c53.0205 0 96 -42.9805 96 -96v-160.01c0 -10.4502 -2.17969 -20.2705 -5.2793 -29.6699l26.5498 -20.5205c6.75977 15.4004 10.7197 32.2803 10.7197 50.2002v48\r\n-c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-48c0 -29.0098 -7.38965 -56.1299 -19.9805 -80.1396zM400 -16c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56\r\n-v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v6.85059l52.0303 -40.2305c12.4395 -53.2197 55.3301 -96.4004 111.18 -101.85c6.94043 -0.669922 13.6396 -0.200195 20.3496 0.199219l50.1104 -38.7295c-10.8203 -3.77051 -22.0098 -6.70996 -33.6699 -8.31055\r\n-v-33.7695h56z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf133;\" horiz-adv-x=\"448\" \r\n-d=\"M12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM448 300c0 -6.59961 -5.40039 -12 -12 -12h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52\r\n-c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fire-extinguisher\" unicode=\"&#xf134;\" horiz-adv-x=\"448\" \r\n-d=\"M434.027 421.671c7.31445 1.21875 13.9727 -4.4209 13.9727 -11.8369v-115.668c0 -7.41602 -6.6582 -13.0557 -13.9727 -11.8369l-168 28c-11.7305 1.95508 -10.0273 14.6973 -10.0273 17.6709h-40v-27.0303c41.4043 -10.6582 72 -48.2383 72 -92.9697v-248\r\n-c0 -13.2549 -10.7451 -24 -24 -24h-144c-13.2549 0 -24 10.7451 -24 24v246.795c0 44.8945 30.457 83.2666 72 94.1289v27.0762c-61.0361 0 -92.9424 7.00977 -121.711 -64.9141c-4.91699 -12.2949 -18.8789 -18.2959 -31.1963 -13.3701\r\n-c-12.3066 4.92285 -18.293 18.8906 -13.3701 31.1973c14.668 36.6709 38.0107 77.833 90.0498 90.8838c-14.1406 36.5273 12.793 76.2031 52.2275 76.2031c37.4463 0 64.3525 -36.1084 53.668 -72h58.332c0 4.2002 -1.30664 15.7822 10.0273 17.6709zM144 376\r\n-c8.82227 0 16 7.17773 16 16s-7.17773 16 -16 16s-16 -7.17773 -16 -16s7.17773 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rocket\" unicode=\"&#xf135;\" \r\n-d=\"M505.05 428.9c6.9502 -32.2002 6.9502 -57.4004 6.85059 -82.6006c0 -102.689 -55.4102 -164.79 -128 -211.09v-104.41v-0.0400391c0 -16.3516 -11.8721 -35.5527 -26.5 -42.8594l-98.7002 -49.3906c-2.79004 -1.38965 -7.58398 -2.5166 -10.7002 -2.5166\r\n-c-13.248 0 -24 10.752 -24 24v0.00683594v103.84l-22.4697 -22.4697c-5.17383 -5.1748 -15.3125 -9.375 -22.6299 -9.375c-7.31836 0 -17.4561 4.2002 -22.6309 9.375l-50.8994 50.9102c-5.17285 5.17285 -9.37012 15.3096 -9.37012 22.625s4.19727 17.4512 9.37012 22.625\r\n-l22.4697 22.4697h-103.77h-0.0126953c-13.248 0 -24 10.752 -24 24c0 3.12012 1.12988 7.91797 2.52246 10.71l49.4199 98.7998c7.32324 14.6094 26.5283 26.4766 42.8701 26.4902h104.2c46.1895 72.7998 108.09 128 211.29 128c25.0996 0 50.29 0 82.4893 -6.90039\r\n-c5.54395 -1.19043 11.0098 -6.65527 12.2002 -12.1992zM384 280c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-circle-left\" unicode=\"&#xf137;\" \r\n-d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM142.1 175l135.5 -135.5c9.40039 -9.40039 24.6006 -9.40039 33.9004 0l17 17c9.40039 9.40039 9.40039 24.5996 0 33.9004l-101.6 101.6l101.6 101.6\r\n-c9.40039 9.40039 9.40039 24.6006 0 33.9004l-17 17c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-135.5 -135.5c-9.39941 -9.40039 -9.39941 -24.5996 0 -34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-circle-right\" unicode=\"&#xf138;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM369.9 209l-135.5 135.5c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-17 -17c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l101.6 -101.6l-101.6 -101.6\r\n-c-9.40039 -9.40039 -9.40039 -24.6006 0 -33.9004l17 -17c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l135.5 135.5c9.39941 9.40039 9.39941 24.5996 0 34z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-circle-up\" unicode=\"&#xf139;\" \r\n-d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM239 305.9l-135.5 -135.5c-9.40039 -9.40039 -9.40039 -24.6006 0 -33.9004l17 -17c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l101.6 101.6l101.6 -101.6\r\n-c9.40039 -9.40039 24.6006 -9.40039 33.9004 0l17 17c9.40039 9.40039 9.40039 24.5996 0 33.9004l-135.5 135.5c-9.40039 9.39941 -24.5996 9.39941 -34 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chevron-circle-down\" unicode=\"&#xf13a;\" \r\n-d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM273 78.0996l135.5 135.5c9.40039 9.40039 9.40039 24.6006 0 33.9004l-17 17c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-101.6 -101.6l-101.6 101.6\r\n-c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-17 -17c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l135.5 -135.5c9.40039 -9.39941 24.5996 -9.39941 34 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"anchor\" unicode=\"&#xf13d;\" horiz-adv-x=\"576\" \r\n-d=\"M12.9707 96c-10.6904 0 -16.0449 12.9258 -8.48535 20.4854l67.0283 67.0283c4.6875 4.68652 12.2852 4.68652 16.9717 0l67.0283 -67.0283c7.56055 -7.55957 2.20605 -20.4854 -8.48438 -20.4854h-35.1465c20.2969 -54.3359 85.1816 -86.6162 144.117 -94.0146v190.015\r\n-h-52c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h52v5.46973c-37.2842 13.1807 -64 48.7324 -64 90.5303c0 53.4746 43.7227 96.7393 97.3701 95.9902c52.2354 -0.728516 94.6348 -43.7627 94.6289 -96.002\r\n-c-0.00488281 -41.793 -26.7188 -77.3398 -64 -90.5186v-5.46973h52c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-52v-190.015c59.1543 7.42676 123.827 39.6973 144.117 94.0146h-35.1465c-10.6904 0 -16.0449 12.9248 -8.48438 20.4854\r\n-l67.0283 67.0283c4.6875 4.68652 12.2852 4.68652 16.9717 0l67.0283 -67.0283c7.56055 -7.55957 2.20605 -20.4854 -8.48438 -20.4854h-32.3945c-21.7822 -102.62 -136.406 -160 -242.635 -160c-106.056 0 -220.828 57.2646 -242.635 160h-32.3945zM288 384\r\n-c-17.6445 0 -32 -14.3555 -32 -32s14.3555 -32 32 -32s32 14.3555 32 32s-14.3555 32 -32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"unlock-alt\" unicode=\"&#xf13e;\" horiz-adv-x=\"448\" \r\n-d=\"M400 192c26.5 0 48 -21.5 48 -48v-160c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v160c0 26.5 21.5 48 48 48h24v102.5c0 84 67.5 153.2 151.5 153.5s152.5 -68 152.5 -152v-16c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v16\r\n-c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-103.1h248zM264 40v48c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-48c0 -22.0996 17.9004 -40 40 -40s40 17.9004 40 40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bullseye\" unicode=\"&#xf140;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 8c101.71 0 184 82.3096 184 184c0 101.71 -82.3096 184 -184 184c-101.71 0 -184 -82.3096 -184 -184c0 -101.71 82.3096 -184 184 -184zM248 320\r\n-c70.6904 0 128 -57.3096 128 -128s-57.3096 -128 -128 -128s-128 57.3096 -128 128s57.3096 128 128 128zM248 128c35.29 0 64 28.71 64 64s-28.71 64 -64 64s-64 -28.71 -64 -64s28.71 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ellipsis-h\" unicode=\"&#xf141;\" \r\n-d=\"M328 192c0 -39.7998 -32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72s72 -32.2002 72 -72zM432 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72zM80 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72\r\n-s-72 32.2002 -72 72s32.2002 72 72 72z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ellipsis-v\" unicode=\"&#xf142;\" horiz-adv-x=\"192\" \r\n-d=\"M96 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72zM24 368c0 39.7998 32.2002 72 72 72s72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72zM24 16c0 39.7998 32.2002 72 72 72s72 -32.2002 72 -72\r\n-s-32.2002 -72 -72 -72s-72 32.2002 -72 72z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rss-square\" unicode=\"&#xf143;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM112 32c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM269.533 32\r\n-c6.53516 0 11.7764 5.46777 11.4248 11.9941c-5.9668 110.428 -94.418 198.99 -204.964 204.964c-6.52637 0.351562 -11.9941 -4.88965 -11.9941 -11.4248v-34.335c0 -6.00977 4.63574 -11.0508 10.6328 -11.4414c79.8799 -5.20312 143.909 -69.0732 149.123 -149.123\r\n-c0.391602 -5.99805 5.43066 -10.6338 11.4424 -10.6338h34.335zM372.56 32c6.4541 0 11.6641 5.33789 11.4326 11.7871c-5.99512 167.014 -140.375 302.18 -308.205 308.205c-6.44922 0.231445 -11.7871 -4.97852 -11.7871 -11.4326v-34.334\r\n-c0 -6.16016 4.88184 -11.1748 11.0391 -11.4277c136.556 -5.59863 246.162 -115.225 251.76 -251.76c0.251953 -6.15625 5.2666 -11.0381 11.4268 -11.0381h34.334z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"play-circle\" unicode=\"&#xf144;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM371.7 168c16.3994 9.09961 16.3994 32.7998 0 42l-176 107c-15.9004 8.7998 -35.7002 -2.59961 -35.7002 -21v-208c0 -18.5 19.9004 -29.7998 35.7002 -21z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"minus-square\" unicode=\"&#xf146;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM92 152h264c6.59961 0 12 5.40039 12 12v56c0 6.59961 -5.40039 12 -12 12h-264c-6.59961 0 -12 -5.40039 -12 -12v-56\r\n-c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check-square\" unicode=\"&#xf14a;\" horiz-adv-x=\"448\" \r\n-d=\"M400 -32h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM195.314 66.0586l184 184c6.24707 6.24805 6.24707 16.3799 0 22.627l-22.6279 22.6279\r\n-c-6.24707 6.24707 -16.3789 6.24805 -22.6279 0l-150.059 -150.059l-70.0586 70.0596c-6.24805 6.24707 -16.3799 6.24707 -22.6279 0l-22.6279 -22.6279c-6.24707 -6.24707 -6.24707 -16.3789 0 -22.627l104 -104c6.24902 -6.25 16.3799 -6.25 22.6289 -0.000976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pen-square\" unicode=\"&#xf14b;\" horiz-adv-x=\"448\" \r\n-d=\"M400 -32h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48zM238.1 270.1l-135.699 -135.699l-6.30078 -57.1006c-0.799805 -7.59961 5.60059 -14.0996 13.3008 -13.2998l57.0996 6.2998l135.7 135.7\r\n-c2.2998 2.2998 2.2998 6.09961 0 8.5l-55.5 55.5c-2.5 2.40039 -6.2998 2.40039 -8.60059 0.0996094zM345 282.9l-30.0996 30.0996c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-23.0996 -23.0996c-2.30078 -2.30078 -2.30078 -6.10059 0 -8.5l55.5 -55.5\r\n-c2.2998 -2.30078 6.09961 -2.30078 8.5 0l23.0996 23.0996c9.2998 9.2998 9.2998 24.5 0 33.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share-square\" unicode=\"&#xf14d;\" horiz-adv-x=\"576\" \r\n-d=\"M568.482 270.552l-144.004 -135.984c-15.1787 -14.335 -40.4785 -3.70703 -40.4785 17.4473v71.9629c-144.575 -0.969727 -205.566 -35.1123 -164.775 -171.353c4.4834 -14.9727 -12.8457 -26.5674 -25.0059 -17.3301\r\n-c-38.9668 29.5996 -74.2188 86.2168 -74.2188 143.366c0 143.937 117.599 172.5 264 173.312v72.0156c0 21.1738 25.3174 31.7676 40.4785 17.4473l144.004 -135.987c10.0195 -9.46289 10.0273 -25.4248 0 -34.8965zM384 68.8721c0 7.34473 6.53027 12.9053 13.7998 11.8594\r\n-c2.81152 -0.405273 7.39844 -0.734375 10.2393 -0.734375c6.80469 0 17.5342 1.8418 23.9502 4.11133c7.81348 2.76367 16.0107 -3.01465 16.0107 -11.3027v-88.8057c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48\r\n-h121.033c12.5508 0 16.6748 -16.8301 5.54492 -22.6309c-18.7773 -9.78613 -36.0615 -22.1084 -51.0137 -37.6758c-1.95312 -2.03711 -5.82715 -3.69141 -8.64844 -3.69336h-50.916v-320h320v68.8721z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" horiz-adv-x=\"496\" \r\n-d=\"M225.38 214.63c12.4902 12.4902 32.75 12.4902 45.25 0s12.5 -32.75 0 -45.25c-12.4902 -12.5 -32.7598 -12.5 -45.25 0c-12.5 12.4902 -12.5 32.75 0 45.25zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248z\r\n-M374.14 291.95c7.61035 16.6494 -9.54004 33.7998 -26.1895 26.2002l-144.34 -65.9707c-5.97461 -2.73047 -13.04 -9.7959 -15.7705 -15.7695l-65.9795 -144.351c-7.61035 -16.6494 9.5498 -33.8096 26.1992 -26.1992l144.341 65.9697\r\n-c5.97363 2.73047 13.0391 9.7959 15.7695 15.7695z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-down\" unicode=\"&#xf150;\" horiz-adv-x=\"448\" \r\n-d=\"M448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM92.5 227.5l123 -123c4.7002 -4.7002 12.2998 -4.7002 17 0l123 123c7.59961 7.59961 2.2002 20.5 -8.5 20.5h-246\r\n-c-10.7002 0 -16.0996 -12.9004 -8.5 -20.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-up\" unicode=\"&#xf151;\" horiz-adv-x=\"448\" \r\n-d=\"M0 16v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48zM355.515 156.485l-123.029 123.029c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-123.028 -123.029\r\n-c-7.56055 -7.56055 -2.20605 -20.4854 8.48438 -20.4854h246.06c10.6904 0 16.0449 12.9258 8.48535 20.4854z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-right\" unicode=\"&#xf152;\" horiz-adv-x=\"448\" \r\n-d=\"M48 416h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48zM188.485 60.4854l123.028 123.028c4.68652 4.68652 4.68652 12.2842 0 16.9717l-123.028 123.029\r\n-c-7.56055 7.56055 -20.4854 2.20605 -20.4854 -8.48438v-246.06c0 -10.6904 12.9258 -16.0449 20.4854 -8.48535z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"euro-sign\" unicode=\"&#xf153;\" horiz-adv-x=\"320\" \r\n-d=\"M310.706 34.2354l8.81836 -44.4902c1.23828 -6.24902 -2.62109 -12.3623 -8.78809 -13.957c-12.5391 -3.24414 -34.8008 -7.78809 -61.1016 -7.78809c-104.371 0 -182.496 65.3076 -207.521 155.64h-30.1143c-6.62695 0 -12 5.37305 -12 12v28.3604\r\n-c0 6.62695 5.37305 12 12 12h21.3877c-1 12.958 -0.828125 28.6377 0.181641 42.2451h-21.5693c-6.62695 0 -12 5.37305 -12 12v29.7549c0 6.62695 5.37305 12 12 12h33.0752c28.9551 83.748 107.376 144 204.56 144c21.0752 0 40.582 -2.91211 52.6865 -5.20703\r\n-c6.86035 -1.30078 11.1475 -8.17578 9.32617 -14.917l-11.9912 -44.3682c-1.65527 -6.125 -7.78613 -9.89062 -14.002 -8.62305c-9.28711 1.89551 -23.3652 4.14551 -37.8516 4.14551c-54.9287 0 -96.9854 -30.0391 -117.619 -75.0303h138.278\r\n-c7.66211 0 13.3613 -7.08203 11.7227 -14.5664l-6.51172 -29.7549c-1.13965 -5.20703 -6.3916 -9.43359 -11.7227 -9.43359v0h-146.593c-1.55176 -13.958 -1.34766 -27.917 -0.137695 -42.2451h134.237c7.68945 0 13.3936 -7.12891 11.708 -14.6309l-6.37305 -28.3604\r\n-c-1.16211 -5.17188 -6.40723 -9.36914 -11.708 -9.36914h-113.689c19.5322 -50.6582 64.6982 -85.4482 121.462 -85.4482c18.0039 0 34.7334 2.97363 45.4258 5.41211c6.58887 1.50391 13.1094 -2.73828 14.4238 -9.36816z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pound-sign\" unicode=\"&#xf154;\" horiz-adv-x=\"320\" \r\n-d=\"M308 96c6.62695 0 12 -5.37305 12 -12v-104c0 -6.62695 -5.37305 -12 -12 -12h-296c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h36v128h-28c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h28v66.0391\r\n-c0 73.2188 58.0264 125.961 139.931 125.961c48.6455 0 85.1934 -22.5596 101.575 -34.9277c5.39844 -4.07617 6.35254 -11.8057 2.11914 -17.0811l-28.4932 -35.5137c-3.7998 -4.73535 -10.5371 -5.89746 -15.6875 -2.68457\r\n-c-11.7744 7.34375 -33.9941 18.8486 -57.6523 18.8486c-37.2305 0 -61.792 -24.8193 -61.792 -57.0859v-63.5557h84c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-84v-126.848h122.505v50.8477c0 6.62695 5.37305 12 12 12h45.4951z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dollar-sign\" unicode=\"&#xf155;\" horiz-adv-x=\"288\" \r\n-d=\"M209.2 214.6c57.8994 -16.8994 94 -80.0996 72.5 -141.699c-15.4004 -44.1006 -59.1006 -71.8008 -105.7 -72.7002v-48.2002c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v48c-31.4004 0.0996094 -62 10.7998 -86.5 30\r\n-c-7.90039 6.09961 -8.90039 17.5996 -1.7998 24.5l34.7998 34c5.2002 5.09961 13.4004 6.09961 19.5 2c10 -6.7998 22 -10.5 34.2002 -10.5h66.2998c16.2998 0 29.5 13.2002 29.5 29.5c0 13 -8.7002 24.5996 -21.2002 28.2998l-102.5 30\r\n-c-44.3994 13 -79.5996 50.5 -83.7998 96.6006c-5.90039 64.8994 45.2998 119.6 109 119.6h2.5v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48c31.4004 -0.0996094 62 -10.7998 86.5 -30c7.90039 -6.09961 8.90039 -17.5996 1.7998 -24.5l-34.7998 -34\r\n-c-5.2002 -5.09961 -13.4004 -6.09961 -19.5 -2c-10 6.7998 -22 10.5 -34.2002 10.5h-66.2998c-16.2998 0 -29.5 -13.2002 -29.5 -29.5c0 -13 8.7002 -24.7002 21.2002 -28.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rupee-sign\" unicode=\"&#xf156;\" horiz-adv-x=\"320\" \r\n-d=\"M308 352h-72.9424c5.97266 -9.75391 10.7666 -20.459 14.252 -32h58.6904c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-52.8105c-7.1748 -74.5107 -61.8193 -125.566 -138.318 -127.906l150.882 -139.275\r\n-c8.02734 -7.41016 2.78516 -20.8184 -8.13867 -20.8184h-82.5625c-2.58984 0 -6.23535 1.42578 -8.13867 3.18164l-165.052 152.356c-2.46094 2.27148 -3.86133 5.46875 -3.86133 8.81836v53.0117c0 6.62695 5.37305 12 12 12h84c41.7959 0 68.54 22.5459 74.7568 58.6318\r\n-h-158.757c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h146.25c-12.709 17.2939 -33.6621 27.252 -60.9697 27.252h-85.2803c-6.62695 0 -12 5.37305 -12 12v44.748c0 6.62695 5.37305 12 12 12h296c6.62695 0 12 -5.37305 12 -12v-40\r\n-c0 -6.62695 -5.37305 -12 -12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yen-sign\" unicode=\"&#xf157;\" horiz-adv-x=\"384\" \r\n-d=\"M351.2 416c9.09961 0 14.8994 -9.7002 10.5996 -17.5996l-80.0996 -150.4h58.2998c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12h-88.2002l-19.7998 -37.2002v-26.7998h108c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12\r\n-h-108v-92c0 -6.59961 -5.40039 -12 -12 -12h-56c-6.59961 0 -12 5.40039 -12 12v92h-108c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h108v26.7998l-19.7998 37.2002h-88.2002c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h58.2998\r\n-l-80.0996 150.4c-4.2002 7.89941 1.5 17.5996 10.5996 17.5996h65.2002c4.59961 0 8.7998 -2.59961 10.7998 -6.7002l55.4004 -113.2c14.5 -34.6992 27.0996 -71.8994 27.0996 -71.8994h1.2998s12.6006 37.2002 27.1006 71.8994l55.3994 113.2\r\n-c2 4.10059 6.2002 6.7002 10.8008 6.7002h65.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ruble-sign\" unicode=\"&#xf158;\" horiz-adv-x=\"384\" \r\n-d=\"M239.36 128h-92.8008v-32h161.44c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-161.44v-52c0 -6.62695 -5.37305 -12 -12 -12h-58.5596c-6.62695 0 -12 5.37305 -12 12v52h-52c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h52\r\n-v32h-52c-6.62695 0 -12 5.37305 -12 12v45.3682c0 6.62695 5.37305 12 12 12h52v206.632c0 6.62695 5.37305 12 12 12h163.36c85.1201 0 144.64 -57.5996 144.64 -143.071c0 -85.4707 -59.5195 -144.929 -144.64 -144.929zM146.56 347.252v-149.884h77.4404\r\n-c48 0 76.1602 29.7285 76.1602 75.5605c0 45.2129 -28.1602 74.3232 -74.8799 74.3232h-78.7207z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"won-sign\" unicode=\"&#xf159;\" horiz-adv-x=\"576\" \r\n-d=\"M564 256h-62.7002l-7.39941 -32h70.0996c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84.9004l-42.0996 -182.7c-1.2998 -5.39941 -6.09961 -9.2998 -11.7002 -9.2998h-56.7998c-5.59961 0 -10.4004 3.90039 -11.7002 9.2998l-42.3994 182.7\r\n-h-55.1006l-42.2998 -182.7c-1.2998 -5.39941 -6.09961 -9.2998 -11.7002 -9.2998h-56.7998c-5.59961 0 -10.5 3.90039 -11.7002 9.40039l-40.8994 182.6h-83.9004c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h69.5l-7.2002 32h-62.2998\r\n-c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h48l-18.0996 80.7002c-1.7002 7.5 4 14.5996 11.6992 14.5996h42.1006c5.7002 0 10.7002 -4 11.7998 -9.59961l17.5 -85.7002h108.7l20 86c1.2998 5.5 6.09961 9.2998 11.7002 9.2998h44\r\n-c5.59961 0 10.3994 -3.7998 11.6992 -9.2998l19.7002 -86h109.9l14.3994 85.7998c1.10059 5.5 6 9.5 11.7002 9.5h46.1006c7.69922 0 13.3994 -7.2002 11.6992 -14.7002l-18.5996 -80.5996h48c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM183.8 106\r\n-l12.6006 54h-38.8008l11 -54c5.10059 -25.2002 6.80078 -47.2002 6.80078 -47.2002h1.09961c0.5 0 1.09961 21.4004 7.2998 47.2002zM211.3 224l7.5 32h-80.7998l6.5 -32h66.7998zM274.2 224h25.3994l-2 8.59961c-1.89941 8 -3.5 16 -4.7998 23.4004h-11.7998\r\n-c-1.2998 -7.40039 -2.90039 -15.4004 -4.7998 -23.4004zM405.1 106l11.5 54h-39.0996l12.4004 -54c6.19922 -25.7998 6.69922 -47.2002 7.2998 -47.2002h1.09961s1.7002 22 6.7998 47.2002zM430.3 224l6.90039 32h-81.6006l7.30078 -32h67.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98\r\n-c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-alt\" unicode=\"&#xf15c;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM288 76v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8\r\n-c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-alpha-down\" unicode=\"&#xf15d;\" horiz-adv-x=\"448\" \r\n-d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\r\n-c8.83203 0 16 -7.16797 16 -16v-304h48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128\r\n-c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\r\n-c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\r\n-c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793\r\n-l-16.3896 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-alpha-up\" unicode=\"&#xf15e;\" horiz-adv-x=\"448\" \r\n-d=\"M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v304h-48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128\r\n-c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\r\n-c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\r\n-c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793\r\n-l-16.3896 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-amount-down\" unicode=\"&#xf160;\" \r\n-d=\"M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96\r\n-c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48zM432 288\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-amount-up\" unicode=\"&#xf161;\" \r\n-d=\"M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM16 288c-14.2305 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262\r\n-s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\r\n-h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-numeric-down\" unicode=\"&#xf162;\" horiz-adv-x=\"448\" \r\n-d=\"M304 352c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM330.15 189.09c53.4502 14.25 101.85 -25.8799 101.869 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132\r\n-c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8496 102.53c6.80762 23.4512 31.4473 47.7197 55 54.1699z\r\n-M352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262\r\n-l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-numeric-up\" unicode=\"&#xf163;\" horiz-adv-x=\"448\" \r\n-d=\"M330.17 189.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408\r\n-c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM304 352\r\n-c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48\r\n-c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs-up\" unicode=\"&#xf164;\" \r\n-d=\"M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548\r\n-c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688\r\n-c8.68164 -25.8945 -0.0683594 -57.7041 -16.3818 -74.7568c4.29785 -17.5977 2.24414 -32.5752 -6.14746 -44.6318c-20.4102 -29.3242 -70.9961 -29.7373 -113.773 -29.7373l-2.84473 0.000976562c-48.2871 0.0166016 -87.8057 17.5977 -119.561 31.7246\r\n-c-15.957 7.09961 -36.8203 15.8877 -52.6504 16.1787c-6.54004 0.120117 -11.7832 5.45703 -11.7832 11.998v213.77c0 3.2002 1.28223 6.27148 3.55762 8.52148c39.6143 39.1436 56.6484 80.5869 89.1172 113.11c14.8037 14.832 20.1885 37.2363 25.3936 58.9023\r\n-c4.44629 18.501 13.749 57.7939 33.9316 57.7939c24 0 72 -8 72 -81.4521z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thumbs-down\" unicode=\"&#xf165;\" \r\n-d=\"M0 392c0 13.2549 10.7451 24 24 24h80c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240zM40 192c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24zM312 -64\r\n-c-20.1826 0 -29.4854 39.293 -33.9307 57.7949c-5.20605 21.666 -10.5889 44.0703 -25.3936 58.9023c-32.4688 32.5234 -49.5029 73.9668 -89.1172 113.11c-1.96387 1.94141 -3.55762 5.75879 -3.55762 8.52051v0.000976562v213.77\r\n-c0 6.54102 5.24316 11.8779 11.7832 11.998c15.8311 0.290039 36.6934 9.0791 52.6504 16.1787c31.7549 14.127 71.2744 31.708 119.561 31.7246h2.84375c42.7773 0 93.3633 -0.413086 113.774 -29.7373c8.3916 -12.0566 10.4453 -27.0342 6.14746 -44.6318\r\n-c16.3125 -17.0527 25.0635 -48.8633 16.3818 -74.7568c17.5439 -23.4316 19.1436 -56.1318 9.30859 -79.4688l0.109375 -0.110352c11.8936 -11.9492 19.5234 -31.2588 19.4395 -49.1973c-0.15625 -30.3516 -26.1572 -58.0977 -59.5527 -58.0977h-101.725\r\n-c7.30762 -28.3398 33.2773 -52.1318 33.2773 -94.5479c0 -73.4521 -48 -81.4521 -72 -81.4521z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"female\" unicode=\"&#xf182;\" horiz-adv-x=\"256\" \r\n-d=\"M128 448c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM247.283 93.8213c3.78809 -15.1504 -7.69238 -29.8213 -23.2832 -29.8213h-56v-104c0 -13.2549 -10.7451 -24 -24 -24h-32c-13.2549 0 -24 10.7451 -24 24v104h-56\r\n-c-15.6172 0 -27.0654 14.6953 -23.2832 29.8213l48 192c2.50879 10.0342 12.9395 18.1787 23.2832 18.1787h11.3604c23.6895 -10.8936 50.5684 -10.4434 73.2793 0h11.3604c10.3438 0 20.7744 -8.14453 23.2832 -18.1787z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"male\" unicode=\"&#xf183;\" horiz-adv-x=\"192\" \r\n-d=\"M96 448c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM144 304c26.5098 0 48 -21.4902 48 -48v-136c0 -13.2549 -10.7451 -24 -24 -24h-16v-136c0 -13.2549 -10.7451 -24 -24 -24h-64c-13.2549 0 -24 10.7451 -24 24v136h-16\r\n-c-13.2549 0 -24 10.7451 -24 24v136c0 26.5098 21.4902 48 48 48h11.3604c23.6895 -10.8936 50.5684 -10.4434 73.2793 0h11.3604z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" \r\n-d=\"M256 288c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM502.4 207.5c12.7998 -6.40039 12.7998 -24.5996 -0.200195 -31.0996l-94.7002 -47.3008l33.5 -100.399c4.59961 -13.5 -8.2998 -26.4004 -21.9004 -21.9004\r\n-l-100.399 33.5l-47.2998 -94.7002c-6.40039 -12.7998 -24.6006 -12.7998 -31 0l-47.3008 94.7002l-100.399 -33.5c-13.5 -4.59961 -26.4004 8.2998 -21.9004 21.9004l33.5 100.5l-94.7002 47.2998c-12.7998 6.40039 -12.7998 24.5996 0 31l94.7002 47.4004l-33.5 100.399\r\n-c-4.59961 13.5 8.2998 26.4004 21.9004 21.9004l100.5 -33.5l47.2998 94.7002c6.40039 12.7998 24.5996 12.7998 31 0l47.4004 -94.8008l100.399 33.5c13.5 4.60059 26.4004 -8.2998 21.9004 -21.8994l-33.5 -100.4zM346.5 101.5c49.9004 49.9004 49.9004 131.1 0 181\r\n-s-131.1 49.9004 -181 0s-49.9004 -131.1 0 -181s131.1 -49.9004 181 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"moon\" unicode=\"&#xf186;\" \r\n-d=\"M283.211 -64c-141.489 0 -256 114.691 -256 256c0 141.489 114.691 256 256 256c13.0176 -0.00195312 33.9727 -1.91895 46.7754 -4.28027c11.0059 -2.0332 13.4414 -16.7178 3.75586 -22.2295c-62.8359 -35.7588 -101.498 -102.172 -101.498 -174.395\r\n-c0 -125.378 114.059 -220.607 238.262 -196.954c10.9229 2.08008 18.6299 -10.6416 11.5625 -19.3496c-47.7783 -58.8672 -119.896 -94.792 -198.857 -94.792z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"archive\" unicode=\"&#xf187;\" \r\n-d=\"M32 0v288h448v-288c0 -17.7002 -14.2998 -32 -32 -32h-384c-17.7002 0 -32 14.2998 -32 32zM192 212v-8c0 -6.59961 5.40039 -12 12 -12h104c6.59961 0 12 5.40039 12 12v8c0 6.59961 -5.40039 12 -12 12h-104c-6.59961 0 -12 -5.40039 -12 -12zM480 416\r\n-c17.7002 0 32 -14.2998 32 -32v-48c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v48c0 17.7002 14.2998 32 32 32h448z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bug\" unicode=\"&#xf188;\" \r\n-d=\"M511.988 159.1c-0.478516 -17.4297 -15.2168 -31.0996 -32.6533 -31.0996h-55.335v-16c0 -21.8643 -4.88184 -42.584 -13.5996 -61.1445l60.2275 -60.2285c12.4961 -12.4971 12.4961 -32.7578 0 -45.2549c-12.498 -12.4971 -32.7588 -12.4961 -45.2559 0\r\n-l-54.7363 54.7363c-24.75 -20.0732 -56.2852 -32.1084 -90.6357 -32.1084v244c0 6.62695 -5.37305 12 -12 12h-24c-6.62695 0 -12 -5.37305 -12 -12v-244c-34.3506 0 -65.8857 12.0352 -90.6357 32.1084l-54.7363 -54.7363c-12.498 -12.4971 -32.7588 -12.4961 -45.2559 0\r\n-c-12.4961 12.4971 -12.4961 32.7578 0 45.2549l60.2275 60.2285c-8.71777 18.5605 -13.5996 39.2803 -13.5996 61.1445v16h-55.334c-17.4355 0 -32.1748 13.6699 -32.6533 31.0996c-0.49707 18.084 14.0156 32.9004 31.9873 32.9004h56v58.7451l-46.6279 46.6279\r\n-c-12.4961 12.4971 -12.4961 32.7578 0 45.2549c12.498 12.4971 32.7578 12.4971 45.2559 0l54.627 -54.6279h229.489l54.627 54.627c12.498 12.4971 32.7578 12.4971 45.2559 0c12.4961 -12.4971 12.4961 -32.7578 0 -45.2549l-46.627 -46.627v-58.7451h56\r\n-c17.9717 0 32.4844 -14.8164 31.9883 -32.9004zM257 448c61.8564 0 112 -50.1436 112 -112h-224c0 61.8564 50.1436 112 112 112z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"caret-square-left\" unicode=\"&#xf191;\" horiz-adv-x=\"448\" \r\n-d=\"M400 -32h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM259.515 323.515l-123.029 -123.029c-4.68652 -4.68652 -4.68652 -12.2842 0 -16.9717l123.028 -123.028\r\n-c7.56055 -7.56055 20.4854 -2.20605 20.4854 8.48438v246.06c0.000976562 10.6904 -12.9248 16.0449 -20.4844 8.48535z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dot-circle\" unicode=\"&#xf192;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM336 192c0 44.1123 -35.8877 80 -80 80s-80 -35.8877 -80 -80s35.8877 -80 80 -80s80 35.8877 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wheelchair\" unicode=\"&#xf193;\" \r\n-d=\"M496.101 62.3311l14.2275 -28.6631c3.92871 -7.91504 0.697266 -17.5156 -7.21777 -21.4453l-65.4658 -32.8857c-16.0488 -7.9668 -35.5557 -1.19434 -43.1885 15.0547l-62.7773 133.608h-139.679c-15.9248 0 -29.4258 11.71 -31.6787 27.4746\r\n-c-33.8887 237.218 -31.9414 222.481 -32.3213 228.525c0 36.3584 30.3184 65.6348 67.0518 63.9287c33.2715 -1.54492 60.0479 -28.9043 60.9248 -62.2012c0.868164 -32.9326 -23.1514 -60.4229 -54.6074 -65.0381l4.66992 -32.6904h129.961c8.83691 0 16 -7.16309 16 -16\r\n-v-32c0 -8.83691 -7.16309 -16 -16 -16h-120.818l4.57227 -32h132.246c11.2168 0 24.1924 -8.24023 28.9619 -18.3916l57.5146 -122.407l36.1787 18.3486c7.91504 3.92871 17.5166 0.697266 21.4453 -7.21777zM311.358 96l25.752 -54.8076\r\n-c-27.3047 -61.8848 -89.2402 -105.192 -161.11 -105.192c-97.0469 0 -176 78.9531 -176 176c0 74.0371 45.9561 137.536 110.836 163.489c2.64453 -18.4736 5.77637 -40.3682 9.48828 -66.333c-33.6299 -19.3477 -56.3242 -55.6514 -56.3242 -97.1562\r\n-c0 -61.7568 50.2432 -112 112 -112c56.3242 0 103.064 41.7959 110.852 96h24.5068z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lira-sign\" unicode=\"&#xf195;\" horiz-adv-x=\"384\" \r\n-d=\"M371.994 192c6.78613 0 12.2578 -5.62598 11.9971 -12.4082c-5.15332 -133.758 -94.3174 -211.592 -228.408 -211.592h-79.583c-6.62695 0 -12 5.37305 -12 12v193.442l-49.3975 -10.9775c-7.49316 -1.66602 -14.6025 4.03711 -14.6025 11.7139v40.9766\r\n-c0 5.31348 4.20996 10.5615 9.39746 11.7139l54.6025 12.1338v30.4395l-49.3975 -10.9775c-7.49316 -1.66602 -14.6025 4.03711 -14.6025 11.7139v40.9766c0 5.31348 4.20996 10.5615 9.39746 11.7139l54.6025 12.1338v68.9971c0 6.62695 5.37305 12 12 12h56\r\n-c6.62695 0 12 -5.37305 12 -12v-51.2188l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139v-40.9756c0 -5.31348 -4.20996 -10.5615 -9.39746 -11.7139l-134.603 -29.9121v-30.4385l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139\r\n-v-40.9766c0 -5.31348 -4.20996 -10.5615 -9.39746 -11.7139l-134.603 -29.9121v-159.219c86.1787 0 168 48 168 148.754c0 6.33398 5.63965 11.2461 11.9746 11.2461h48.0195z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"space-shuttle\" unicode=\"&#xf197;\" horiz-adv-x=\"640\" \r\n-d=\"M592.604 239.756c29.6787 -13.9111 47.3965 -31.7637 47.3965 -47.7559s-17.7178 -33.8447 -47.3965 -47.7559c-32.8682 -15.4082 -76.8262 -24.2441 -120.604 -24.2441h-285.674c-4.95215 -6.55469 -10.585 -11.9775 -16.7197 -16h206.394\r\n-c-146.843 -30.2529 -156.597 -136 -279.997 -136h-0.00292969v128h-16v-128c-26.5098 0 -48 28.6543 -48 64v64c-23.1807 0 -32 10.0166 -32 24v40c0 13.9678 8.80273 24 32 24v16c-23.1807 0 -32 10.0166 -32 24v40c0 13.9678 8.80273 24 32 24v64\r\n-c0 35.3457 21.4902 64 48 64v-128h16v128h0.00292969c123.4 0 133.154 -105.747 279.997 -136h-206.393c6.13477 -4.02246 11.7676 -9.44531 16.7197 -16h285.673c43.7773 0 87.7354 -8.83594 120.604 -24.2441zM488 152c31.9424 0 31.9092 80 0 80\r\n-c-4.41602 0 -8 -3.58398 -8 -8v-64c0 -4.41602 3.58398 -8 8 -8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope-square\" unicode=\"&#xf199;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM178.117 185.896c10.5156 -7.66895 31.3799 -26.1133 45.8828 -25.8955\r\n-c14.4912 -0.225586 35.3828 18.2393 45.8828 25.8936c90.6836 65.8145 89.7461 65.9697 114.117 84.9385v25.167c0 13.2549 -10.7451 24 -24 24h-272c-13.2549 0 -24 -10.7451 -24 -24v-25.167c24.3525 -18.9541 23.4287 -19.1201 114.117 -84.9365zM384 230.225\r\n-c-13.958 -10.793 -33.3252 -25.2334 -95.2832 -70.1982c-13.6826 -9.98438 -37.833 -32.1592 -64.7197 -32.0254c-26.7188 -0.134766 -50.5322 21.6689 -64.6943 32.0098c-61.9736 44.9785 -81.3447 59.4199 -95.3027 70.2139v-142.225c0 -13.2549 10.7451 -24 24 -24h272\r\n-c13.2549 0 24 10.7451 24 24v142.225z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"university\" unicode=\"&#xf19c;\" \r\n-d=\"M496 320v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-12c0 -6.62695 -5.37305 -12 -12 -12h-392c-6.62695 0 -12 5.37305 -12 12v12h-24c-4.41602 0 -8 3.58398 -8 8v16c0 2.95215 2.21387 6.26367 4.94141 7.3916l232 88\r\n-c0.810547 0.335938 2.18066 0.608398 3.05859 0.608398s2.24805 -0.272461 3.05859 -0.608398l232 -88c2.72754 -1.12793 4.94141 -4.43945 4.94141 -7.3916zM472 16c13.2549 0 24 -10.7451 24 -24v-16c0 -4.41602 -3.58398 -8 -8 -8h-464c-4.41602 0 -8 3.58398 -8 8v16\r\n-c0 13.2549 10.7451 24 24 24h432zM96 256h64v-192h64v192h64v-192h64v192h64v-192h36c6.62695 0 12 -5.37305 12 -12v-20h-416v20c0 6.62695 5.37305 12 12 12h36v192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"graduation-cap\" unicode=\"&#xf19d;\" horiz-adv-x=\"640\" \r\n-d=\"M622.34 294.8c23.5498 -7.24023 23.5498 -38.3594 0 -45.5996l-278.95 -85.7002c-20.3496 -6.25 -37.7295 -2.78027 -46.79 0l-195.569 60.0898c-12.25 -8.41992 -19.9307 -21.7002 -20.6904 -36.7197c9.19043 -5.62012 15.6602 -15.2998 15.6602 -26.8701\r\n-c0 -10.7803 -5.67969 -19.8496 -13.8604 -25.6504l25.5303 -114.88c2.21973 -9.98926 -5.37988 -19.4697 -15.6201 -19.4697h-56.1094c-10.2305 0 -17.8301 9.48047 -15.6104 19.4697l25.5303 114.88c-8.18066 5.80078 -13.8604 14.8701 -13.8604 25.6504\r\n-c0 11.8896 6.78027 21.8496 16.4102 27.3701c0.649414 17.6201 7.20996 33.71 17.8799 46.8994l-48.6299 14.9404c-23.54 7.23047 -23.54 38.3604 0 45.5898l278.95 85.7002c15.1895 4.66992 31.5898 4.66992 46.79 0zM352.79 132.91l145.03 44.5596l14.1797 -113.47\r\n-c0 -35.3496 -85.96 -64 -192 -64s-192 28.6504 -192 64l14.1797 113.46l145.021 -44.5498c12.75 -3.91992 37.0596 -8.75977 65.5898 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"language\" unicode=\"&#xf1ab;\" horiz-adv-x=\"640\" \r\n-d=\"M152.1 211.8l10.9004 -37.5h-38.0996l11.0996 37.5c3.5 12.1006 7.7998 33.2002 7.7998 33.2002h0.5s4.2998 -21.0996 7.7998 -33.2002zM616 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-280v320h280zM592 232v16\r\n-c0 6.59961 -5.40039 12 -12 12h-64v16c0 6.59961 -5.40039 12 -12 12h-16c-6.59961 0 -12 -5.40039 -12 -12v-16h-64c-6.59961 0 -12 -5.40039 -12 -12v-16c0 -6.59961 5.40039 -12 12 -12h114.3c-6.2002 -14.2998 -16.5 -29 -30 -43.2002\r\n-c-6.59961 6.90039 -12.3994 13.9004 -17.3994 20.9004c-3.60059 5.09961 -10.6006 6.59961 -16 3.39941l-7.30078 -4.2998l-6.5 -3.89941c-5.89941 -3.5 -7.69922 -11.4004 -3.69922 -17.1006c6.09961 -8.7002 13.0996 -17.2998 21 -25.7002\r\n-c-8.10059 -6.2998 -16.8008 -12.2998 -26.1006 -18c-5.59961 -3.39941 -7.39941 -10.5996 -4.2002 -16.1992l7.90039 -13.9004c3.40039 -5.90039 10.9004 -7.7998 16.7002 -4.2998c12.7002 7.7998 24.5 16.2002 35.3994 24.8994\r\n-c10.9004 -8.7998 22.8008 -17.0996 35.4004 -24.8994c5.7998 -3.5 13.2998 -1.60059 16.7002 4.2998l7.89941 13.9004c3.2002 5.69922 1.40039 12.7998 -4.09961 16.1992c-9 5.5 -17.7002 11.6006 -26.0996 18c21 22.5 35.7998 46.3008 42.6992 69.9004h11.4004\r\n-c6.59961 0 12 5.40039 12 12zM0 328c0 13.2998 10.7002 24 24 24h280v-320h-280c-13.2998 0 -24 10.7002 -24 24v272zM58.9004 111.9c-2.60059 -7.80078 3.19922 -15.9004 11.3994 -15.9004h22.9004c5.2998 0 10 3.59961 11.5 8.7002l9.09961 31.7998h60.2002\r\n-l9.40039 -31.9004c1.40137 -4.74316 6.55273 -8.59668 11.5 -8.59961h22.8994c8.2998 0 14 8.09961 11.4004 15.9004l-57.5 169.1c-1.7002 4.7998 -6.2998 8.09961 -11.4004 8.09961h-32.5c-5.2002 0 -9.7002 -3.19922 -11.3994 -8.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fax\" unicode=\"&#xf1ac;\" \r\n-d=\"M480 288c17.6641 0 32 -14.3359 32 -32v-288c0 -17.6641 -14.3359 -32 -32 -32h-320c-17.6641 0 -32 14.3359 -32 32v448c0 17.6641 14.3359 32 32 32h242.75c7.31348 -0.000976562 17.4473 -4.19922 22.6201 -9.37012l45.25 -45.25\r\n-c5.17676 -5.17285 9.37891 -15.3115 9.37988 -22.6299v-82.75zM288 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM288 144v32c0 8.83203 -7.16797 16 -16 16h-32\r\n-c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 144v32\r\n-c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 256v64h-48c-8.83203 0 -16 7.16797 -16 16v48h-160v-128h224zM64 320c17.6641 0 32 -14.3359 32 -32v-320\r\n-c0 -17.6641 -14.3359 -32 -32 -32h-32c-17.6641 0 -32 14.3359 -32 32v320c0 17.6641 14.3359 32 32 32h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf1ad;\" horiz-adv-x=\"448\" \r\n-d=\"M436 -32c6.62695 0 12 -5.37305 12 -12v-20h-448v20c0 6.62695 5.37305 12 12 12h20v456c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-456h20zM128 372v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40\r\n-c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12zM128 276v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12zM180 128c6.62695 0 12 5.37305 12 12v40\r\n-c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40zM256 -32v84c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-84h64zM320 140v40c0 6.62695 -5.37305 12 -12 12h-40\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 236v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 332v40\r\n-c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"child\" unicode=\"&#xf1ae;\" horiz-adv-x=\"384\" \r\n-d=\"M120 376c0 39.7646 32.2354 72 72 72s72 -32.2354 72 -72c0 -39.7637 -32.2354 -72 -72 -72s-72 32.2363 -72 72zM374.627 374.627c12.4971 -12.4971 12.4971 -32.7568 0 -45.2539l-94.627 -94.627v-266.746c0 -17.6729 -14.3271 -32 -32 -32h-16\r\n-c-17.6729 0 -32 14.3271 -32 32v112h-16v-112c0 -17.6729 -14.3271 -32 -32 -32h-16c-17.6729 0 -32 14.3271 -32 32v266.746l-94.627 94.626c-12.4971 12.4971 -12.4971 32.7578 0 45.2549c12.4961 12.4971 32.7578 12.4971 45.2539 0l86.627 -86.627h101.491\r\n-l86.6279 86.627c12.4961 12.4971 32.7578 12.4971 45.2539 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paw\" unicode=\"&#xf1b0;\" \r\n-d=\"M256 224c79.4102 0 192 -122.76 192 -200.25c0 -34.9004 -26.8096 -55.75 -71.7402 -55.75c-48.4102 0 -80.75 25.0801 -120.26 25.0801c-39.1699 0 -71.4199 -25.0801 -120.26 -25.0801c-44.9307 0 -71.7402 20.8496 -71.7402 55.75c0 77.4902 112.59 200.25 192 200.25\r\n-zM108.72 236.61c10.4004 -34.6504 -4.76953 -68.3799 -33.8896 -75.3408c-29.1201 -6.95996 -61.1602 15.4805 -71.5605 50.1309c-10.3994 34.6494 4.77051 68.3799 33.8906 75.3398s61.1602 -15.4805 71.5596 -50.1299zM193.44 257.39\r\n-c-30.9307 -8.14941 -65.6201 20.4502 -77.46 63.8701c-11.8408 43.4199 3.63965 85.2207 34.5791 93.3604c30.9404 8.13965 65.6201 -20.4502 77.46 -63.8701c11.8408 -43.4199 -3.63965 -85.2197 -34.5791 -93.3604zM474.83 286.73\r\n-c29.1201 -6.96094 44.29 -40.6904 33.8896 -75.3408c-10.4102 -34.6494 -42.4395 -57.0898 -71.5596 -50.1299s-44.29 40.6904 -33.8906 75.3398c10.4102 34.6504 42.4404 57.0908 71.5605 50.1309zM318.56 257.39c-30.9395 8.14062 -46.4199 49.9404 -34.5791 93.3604\r\n-c11.8398 43.4199 46.5195 72.0195 77.46 63.8701c30.9395 -8.15039 46.4199 -49.9404 34.5791 -93.3604c-11.8398 -43.4199 -46.5195 -72.0098 -77.46 -63.8701z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cube\" unicode=\"&#xf1b2;\" \r\n-d=\"M239.1 441.7c10.9004 4.09961 22.9004 4.09961 33.7002 -0.100586l208 -78c18.7002 -7 31.1006 -24.8994 31.1006 -44.8994v-225.101c0 -18.0996 -10.2002 -34.7998 -26.5 -42.8994l-208 -104c-13.5 -6.7998 -29.4004 -6.7998 -42.9004 0l-208 104\r\n-c-16.2002 8.09961 -26.5 24.7002 -26.5 42.8994v225.101c0 20 12.4004 38 31.0996 45zM256 379.6l-192 -72v-1.09961l192 -78l192 78v1.09961zM288 23.5996l160 80v133.9l-160 -65v-148.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cubes\" unicode=\"&#xf1b3;\" \r\n-d=\"M488.6 197.8c14.1006 -5.2998 23.4004 -18.7002 23.4004 -33.7002v-110.1c0 -13.5996 -7.7002 -26.0996 -19.9004 -32.2002l-100 -50c-10.0996 -5.09961 -22.0996 -5.09961 -32.1992 0l-103.9 52l-103.9 -52c-10.0996 -5.09961 -22.0996 -5.09961 -32.1992 0l-100 50\r\n-c-12.2002 6.10059 -19.9004 18.6006 -19.9004 32.2002v110.1c0 15 9.2998 28.4004 23.2998 33.7002l96.6006 36.2002v108.5c0 15 9.2998 28.4004 23.3994 33.7002l100 37.5c8.2002 3.09961 17.2002 3.09961 25.2998 0l100 -37.5\r\n-c14.1006 -5.2998 23.4004 -18.7002 23.4004 -33.7002v-108.5zM358 233.2v73.2998l-85 -37v-68.2002zM154 343.9v-0.600586l102 -41.3994l102 41.3994v0.600586l-102 38.1992zM238 52.7998v75.4004l-85 -38.7998v-79.1006zM238 164.8v0.600586l-102 38.1992l-102 -38.1992\r\n-v-0.600586l102 -41.3994zM478 52.7998v75.4004l-85 -38.7998v-79.1006zM478 164.8v0.600586l-102 38.1992l-102 -38.1992v-0.600586l102 -41.3994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"recycle\" unicode=\"&#xf1b8;\" \r\n-d=\"M184.561 186.097c3.23242 -13.9971 -12.1221 -24.6348 -24.0674 -17.168l-40.7363 25.4551l-50.8672 -81.4014c-13.2832 -21.2559 2.07031 -48.9824 27.1221 -48.9824h51.9883c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-51.8848\r\n-c-75.334 0 -121.302 83.0479 -81.4082 146.88l50.8223 81.3877l-40.7256 25.4482c-12.0811 7.54688 -8.96582 25.9609 4.87891 29.1582l110.237 25.4502c8.61133 1.9873 17.2012 -3.38086 19.1895 -11.9902zM283.122 369.012\r\n-c-12.2842 19.6543 -41.5449 20.3193 -54.2568 -0.0214844l-17.9609 -28.7432c-3.5127 -5.62012 -10.916 -7.3291 -16.5361 -3.81738l-33.9189 21.1953c-5.62012 3.51172 -7.33008 10.9131 -3.82031 16.5332l17.9629 28.7656c37.6074 60.1709 125.295 60.0332 162.816 0\r\n-l41.2627 -66.082l40.6875 25.4238c12.0771 7.55176 27.2646 -3.32324 24.0674 -17.168l-25.4502 -110.236c-1.97363 -8.55273 -10.5166 -13.9893 -19.1885 -11.9902l-110.237 25.4502c-13.8789 3.20508 -16.9297 21.6299 -4.87891 29.1572l40.7402 25.457zM497.288 146.88\r\n-c39.9268 -63.8828 -6.13379 -146.88 -81.4082 -146.88h-95.8799v-47.9893c0 -14.3105 -17.3105 -21.3184 -27.3135 -11.3145l-80 79.9883c-6.24805 6.24805 -6.24805 16.3799 0 22.627l80 79.9814c10.0713 10.0703 27.3135 2.90039 27.3135 -11.3125v-47.9814h95.9844\r\n-c25.0791 0 40.3926 27.749 27.1357 48.96l-27.5645 44.1123c-3.51172 5.62109 -1.80176 13.0234 3.81836 16.5361l33.8613 21.1582c5.62207 3.51367 13.0264 1.80273 16.5381 -3.82031z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"car\" unicode=\"&#xf1b9;\" \r\n-d=\"M499.99 272c7.80957 0 13.54 -7.33984 11.6494 -14.9102l-6 -24c-1.33008 -5.33984 -6.12988 -9.08984 -11.6396 -9.08984h-20.0703c13.4199 -11.7305 22.0703 -28.7803 22.0703 -48v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 19.2197 8.65039 36.2695 22.0801 48h-20.0703\r\n-c-5.50977 0 -10.3096 3.75 -11.6396 9.08984l-6 24c-1.90039 7.57031 3.83008 14.9102 11.6396 14.9102h59.8604l16.6396 41.5996c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.98 -70.4004l16.6396 -41.5996h59.8701z\r\n-M147.93 289.83l-19.9297 -49.8301h256l-19.9297 49.8301c-7.29004 18.2197 -24.9404 30.1699 -44.5703 30.1699h-127c-19.6299 0 -37.2803 -11.9502 -44.5703 -30.1699zM96 128.2c19.2002 0 48 -3.19043 48 15.9502c0 19.1396 -28.7998 47.8496 -48 47.8496\r\n-s-32 -12.7598 -32 -31.9004c0 -19.1396 12.7998 -31.8994 32 -31.8994zM416 128.2c19.2002 0 32 12.7598 32 31.8994c0 19.1406 -12.7998 31.9004 -32 31.9004s-48 -28.71 -48 -47.8496c0 -19.1406 28.7998 -15.9502 48 -15.9502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"taxi\" unicode=\"&#xf1ba;\" \r\n-d=\"M462 206.36c28.5898 -6.40039 50 -31.8301 50 -62.3604v-48c0 -23.6201 -12.9502 -44.0303 -32 -55.1201v-40.8799c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32\r\n-v40.8799c-19.0498 11.0801 -32 31.4902 -32 55.1201v48c0 30.5303 21.4102 55.96 50 62.3604l22 84.8398c9.59961 35.2002 41.5996 60.7998 76.7998 60.7998h11.2002v32c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32v-32h11.2002\r\n-c35.2002 0 67.2002 -25.5996 76.7998 -60.7998zM96 96c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM116.55 208h278.9l-17.3906 67.1396c-2.01953 7.37988 -9.37988 12.8604 -14.8496 12.8604h-214.4\r\n-c-5.46973 0 -12.8291 -5.48047 -15.0596 -13.6396zM416 96c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tree\" unicode=\"&#xf1bb;\" horiz-adv-x=\"384\" \r\n-d=\"M378.31 69.5098c6 -6.79004 7.36035 -16.0898 3.56055 -24.2598c-3.75 -8.0498 -12 -13.25 -21.0098 -13.25h-136.86v-24.4502l30.29 -48.3994c5.32031 -10.6406 -2.41992 -23.1602 -14.3096 -23.1602h-95.9609c-11.8896 0 -19.6299 12.5195 -14.3096 23.1602\r\n-l30.29 48.3994v24.4502h-136.86c-9.00977 0 -17.2598 5.2002 -21.0098 13.25c-3.7998 8.16992 -2.43945 17.4697 3.56055 24.2598l79.8896 90.4902h-30.6299c-9.02051 0 -16.9805 5 -20.7803 13.0498c-3.79004 8.0498 -2.54004 17.2598 3.27051 24.04l78.1396 90.9102\r\n-h-28.8896c-9.10059 0 -17.3105 5.34961 -20.8701 13.6104c-3.51074 8.12988 -1.86035 17.5898 4.23926 24.0801l110.28 117.479c6.04004 6.4502 17.29 6.4502 23.3203 0l110.27 -117.479c6.10059 -6.49023 7.76074 -15.9502 4.24023 -24.0801\r\n-c-3.55957 -8.26074 -11.7598 -13.6104 -20.8604 -13.6104h-28.8896l78.1299 -90.8896c5.83008 -6.79004 7.08008 -16.0107 3.28027 -24.0508c-3.7998 -8.05957 -11.7705 -13.0596 -20.7803 -13.0596h-30.6299z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"database\" unicode=\"&#xf1c0;\" horiz-adv-x=\"448\" \r\n-d=\"M448 374.857v-45.7148c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426v45.7148c0 40.2852 100.333 73.1426 224 73.1426s224 -32.8574 224 -73.1426zM448 272v-102.857c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426\r\n-v102.857c48.125 -33.1426 136.208 -48.5723 224 -48.5723s175.874 15.4297 224 48.5723zM448 112v-102.857c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426v102.857c48.125 -33.1426 136.208 -48.5723 224 -48.5723s175.874 15.4297 224 48.5723z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-pdf\" unicode=\"&#xf1c1;\" horiz-adv-x=\"384\" \r\n-d=\"M181.9 191.9c-5 16 -4.90039 46.8994 -2 46.8994c8.39941 0 7.59961 -36.8994 2 -46.8994zM180.2 144.7c9.59961 -17.4004 21.7998 -31.2002 34.5 -40.7998c-23.9004 -4.7002 -44.6006 -14.9004 -62.9004 -21.9004c11.1006 19.4004 20.7002 42.5 28.4004 62.7002z\r\n-M86.0996 19.9004c5.80078 15.6992 28.2002 33.8994 34.9004 40.1992c-21.7002 -34.7998 -34.9004 -41 -34.9004 -40.1992zM248 288h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136\r\n-c0 -13.2002 10.7998 -24 24 -24zM240 116.2c-20 12.2002 -33.2998 29 -42.7002 53.7998c4.5 18.5 11.6006 46.5996 6.2002 64.2002c-4.7002 29.3994 -42.4004 26.5 -47.7998 6.7998c-5 -18.2998 -0.400391 -44.0996 8.09961 -77\r\n-c-11.5996 -27.5996 -28.7002 -64.5996 -40.7998 -85.7998c-0.0996094 0 -0.0996094 -0.100586 -0.200195 -0.100586c-27.0996 -13.8994 -73.5996 -44.5 -54.5 -68c5.60059 -6.89941 16 -10 21.5 -10c17.9004 0 35.7002 18 61.1006 61.8008\r\n-c25.7998 8.5 54.0996 19.0996 79 23.1992c21.6992 -11.7998 47.0996 -19.5 64 -19.5c29.1992 0 31.1992 32 19.6992 43.4004c-13.8994 13.5996 -54.2998 9.7002 -73.5996 7.2002zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6c6.40039 0 12.5 -2.5 17 -7z\r\n-M302.9 87.7002c0 0 -5.7002 -6.7998 -42.8008 9c40.3008 2.89941 46.9004 -6.2998 42.8008 -9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-word\" unicode=\"&#xf1c2;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM281.1 192c-5.59961 0 -10.5 -3.90039 -11.5 -9.5c-24.1992 -111.4 -21.7998 -118 -21.5996 -129.2\r\n-c-0.799805 5.40039 -5.59961 29 -29.5996 129.4c-1.30078 5.39941 -6.10059 9.2002 -11.7002 9.2002h-29.1006c-5.59961 0 -10.3994 -3.7002 -11.6992 -9.10059c-22.1006 -90 -27.8008 -112.5 -29.4004 -122.7c-0.900391 12.7002 -5.40039 44.2002 -21 122.2\r\n-c-1.09961 5.7002 -6.09961 9.7002 -11.7998 9.7002h-24.5c-7.7002 0 -13.4004 -7.09961 -11.7002 -14.5996l37.7998 -168c1.2002 -5.5 6.10059 -9.40039 11.7002 -9.40039h37.0996c5.5 0 10.3008 3.7998 11.6006 9.09961c23.2002 93.1006 24.5 96.2002 25.5996 110.5h0.5\r\n-c4.7998 -29.2998 -0.200195 -7 25.6006 -110.5c1.2998 -5.2998 6.09961 -9.09961 11.5996 -9.09961h38c5.59961 0 10.5 3.7998 11.7002 9.2998l38 168c1.7002 7.60059 -4 14.7002 -11.7002 14.7002h-23.9004zM384 326.1v-6.09961h-128v128h6.09961\r\n-c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-excel\" unicode=\"&#xf1c3;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM284.1 205.5c5.10059 8 -0.599609 18.5 -10.0996 18.4004h-34.7998\r\n-c-4.40039 0 -8.5 -2.40039 -10.6006 -6.30078c-30.5 -56.7998 -36.5996 -68.5 -36.5996 -68.5c-16.5996 34.9004 -10.5 19.7002 -36.5996 68.5c-2.10059 3.90039 -6.2002 6.30078 -10.6006 6.30078h-34.7998c-9.5 0 -15.2998 -10.5 -10.0996 -18.5l60.2998 -93.5\r\n-l-60.2998 -93.5c-5.10059 -8 0.599609 -18.5 10.0996 -18.5h34.9004c4.39941 0 8.39941 2.39941 10.5 6.2998c26.5996 48.7998 30.1992 54 36.5996 68.7998c0 0 16.9004 -32.5 36.5 -68.7002c2.09961 -3.89941 6.2002 -6.2998 10.5996 -6.2998h34.9004\r\n-c9.5 0 15.2002 10.5 10.0996 18.5l-60.0996 93.5zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-powerpoint\" unicode=\"&#xf1c4;\" horiz-adv-x=\"384\" \r\n-d=\"M193.7 176.8c8.7998 0 15.5 -2.7002 20.2998 -8.09961c9.59961 -10.9004 9.7998 -32.7002 -0.200195 -44.1006c-4.89941 -5.59961 -11.8994 -8.5 -21.0996 -8.5h-26.9004v60.7002h27.9004zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6\r\n-c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM277 146.8c0 44.2002 -28.4004 77 -72.9004 77h-81\r\n-c-6.59961 0 -12 -5.39941 -12 -12v-199.8c0 -6.59961 5.40039 -12 12 -12h30.8008c6.59961 0 12 5.40039 12 12v57.2002c22.2998 0 111.1 -12.7002 111.1 77.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-image\" unicode=\"&#xf1c5;\" horiz-adv-x=\"384\" \r\n-d=\"M384 326.059v-6.05859h-128v128h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293l97.9404 -97.9404c3.88086 -3.88086 7.03027 -11.4834 7.03027 -16.9717zM248 288h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v464\r\n-c0 13.2549 10.7451 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24zM112.545 272c-26.5088 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48zM320.545 32v112l-39.5137 39.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0\r\n-l-103.515 -103.515l-39.5146 39.5146c-4.68652 4.68652 -11.7988 5.1709 -16.4854 0.485352l-39.5146 -39.5146l-0.485352 -48.4854h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-archive\" unicode=\"&#xf1c6;\" horiz-adv-x=\"384\" \r\n-d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM128.4 112c17.8994 0 32.5 -12.0996 32.5 -27s-14.5 -27 -32.4004 -27s-32.5 12 -32.5 27c0 14.9004 14.5 27 32.4004 27zM224 312c0 -13.2002 10.7998 -24 24 -24h136\r\n-v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h104.4v-32h32v32h63.5996v-136zM95.9004 416v-32h32v32h-32zM128.2 32c33 0 57.7998 30.2002 51.3994 62.5996l-17.2998 87.7002\r\n-c-1.09961 5.60059 -6.09961 9.7002 -11.7998 9.7002h-22.0996v32h32v32h-32v32h32v32h-32v32h32v32h-32v-32h-32v-32h32v-32h-32v-32h32v-32h-32v-32l-19.6006 -97.0996c-6.59961 -32.5 18.2002 -62.9004 51.4004 -62.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-audio\" unicode=\"&#xf1c7;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM160 44v136c0 10.7002 -12.9004 16.0996 -20.5 8.5l-35.5 -36.5h-28c-6.59961 0 -12 -5.40039 -12 -12\r\n-v-56c0 -6.59961 5.40039 -12 12 -12h28l35.5 -36.5c7.59961 -7.5 20.5 -2.2002 20.5 8.5zM193.2 91.5996c-22.5 -23.0996 12.5996 -55.7998 34.3994 -33.5c27.2002 28 27.2002 72.5 0 100.4c-22.1992 22.7002 -56.5 -10.7002 -34.3994 -33.5\r\n-c9.09961 -9.2998 9.09961 -24.0996 0 -33.4004zM279.2 208.7c-22.1006 22.7998 -56.5 -10.7002 -34.4004 -33.5c36.2998 -37.2998 36.2002 -96.6006 0 -133.8c-22.5996 -23.2002 12.6006 -55.9004 34.4004 -33.5c54.3994 56 54.3994 144.899 0 200.8zM384 326.1v-6.09961\r\n-h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-video\" unicode=\"&#xf1c8;\" horiz-adv-x=\"384\" \r\n-d=\"M384 326.059v-6.05859h-128v128h6.05859c6.36523 0 12.4707 -2.5293 16.9717 -7.0293l97.9404 -97.9404c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9717zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336\r\n-c-13.2549 0 -24 10.7451 -24 24v464c0 13.2549 10.7451 24 24 24h200v-136zM320 167.984c0 21.4609 -25.96 31.9795 -40.9707 16.9697l-55.0293 -55.0127v38.0586c0 13.2549 -10.7451 24 -24 24h-112c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24\r\n-h112c13.2549 0 24 10.7451 24 24v38.0586l55.0293 -55.0088c15.0273 -15.0264 40.9707 -4.47363 40.9707 16.9717v111.963z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-code\" unicode=\"&#xf1c9;\" horiz-adv-x=\"384\" \r\n-d=\"M384 326.059v-6.05859h-128v128h6.05859c6.36523 0 12.4707 -2.5293 16.9717 -7.0293l97.9404 -97.9404c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9717zM248 288h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v464\r\n-c0 13.2549 10.7451 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24zM123.206 47.4951l19.5791 20.8838c0.805664 0.860352 1.45996 2.51465 1.45996 3.69336c0 1.34766 -0.820312 3.16309 -1.83203 4.05371l-40.7627 35.874l40.7627 35.874\r\n-c1.01172 0.890625 1.83203 2.70605 1.83203 4.05371c0 1.17871 -0.654297 2.83301 -1.45996 3.69336l-19.5791 20.8848c-0.882812 0.942383 -2.64844 1.70703 -3.93945 1.70703c-1.17871 0 -2.83398 -0.654297 -3.69336 -1.46094l-64.8662 -60.8115\r\n-c-0.942383 -0.883789 -1.70703 -2.64844 -1.70703 -3.93945c0 -1.29199 0.764648 -3.05664 1.70703 -3.94043l64.8662 -60.8115c0.859375 -0.806641 2.51465 -1.46094 3.69336 -1.46094c1.29102 0 3.05664 0.764648 3.93945 1.70703zM174.501 -2.98438\r\n-c0.407227 -0.118164 1.08203 -0.213867 1.50586 -0.213867c2.23926 0 4.56152 1.74512 5.18457 3.89551l61.4395 211.626c0.118164 0.407227 0.214844 1.08203 0.214844 1.50586c0 2.23828 -1.74512 4.56152 -3.89453 5.18555l-27.4521 7.9707\r\n-c-0.407227 0.117188 -1.08105 0.213867 -1.50488 0.213867c-2.23828 0 -4.5625 -1.74512 -5.1875 -3.89551l-61.4395 -211.626c-0.118164 -0.40625 -0.213867 -1.08105 -0.213867 -1.50391c0 -2.23926 1.74512 -4.56348 3.89453 -5.1875zM335.293 108.061\r\n-c0.942383 0.883789 1.70703 2.64844 1.70703 3.94043c0 1.29102 -0.764648 3.05566 -1.70605 3.93945l-64.8662 60.8115c-0.859375 0.806641 -2.51465 1.46094 -3.69336 1.46094c-1.29102 0 -3.05566 -0.764648 -3.93945 -1.70703l-19.5801 -20.8848\r\n-c-0.805664 -0.860352 -1.45996 -2.51465 -1.45996 -3.69336c0 -1.34766 0.820312 -3.16309 1.83203 -4.05371l40.7627 -35.874l-40.7637 -35.873c-1.01172 -0.890625 -1.83203 -2.70605 -1.83203 -4.05371c0 -1.17871 0.654297 -2.83301 1.45996 -3.69336l19.5801 -20.8848\r\n-c0.882812 -0.942383 2.64844 -1.70703 3.93945 -1.70703c1.17871 0 2.83398 0.654297 3.69336 1.46094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"life-ring\" unicode=\"&#xf1cd;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM429.696 320.441c-10.6406 14.3398 -30.915 34.6143 -45.2549 45.2549l-63.3994 -63.3994c18.585 -11.0029 34.2676 -26.6963 45.2549 -45.2549zM256 96\r\n-c53.0186 0 96 42.9814 96 96s-42.9814 96 -96 96s-96 -42.9814 -96 -96s42.9814 -96 96 -96zM127.559 365.696c-14.3398 -10.6406 -34.6143 -30.915 -45.2549 -45.2549l63.3994 -63.3994c11.0029 18.585 26.6963 34.2676 45.2549 45.2549zM82.3037 63.5586\r\n-c10.6406 -14.3398 30.915 -34.6143 45.2549 -45.2549l63.3994 63.3994c-18.585 11.0029 -34.2676 26.6963 -45.2549 45.2549zM384.441 18.3037c14.3398 10.6406 34.6143 30.915 45.2549 45.2549l-63.3994 63.3994c-11.0029 -18.585 -26.6963 -34.2676 -45.2549 -45.2549z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"circle-notch\" unicode=\"&#xf1ce;\" \r\n-d=\"M288 408.944c0 15.5996 14.6777 27.167 29.7891 23.292c107.071 -27.457 186.211 -124.604 186.211 -240.236c0 -136.788 -110.745 -247.711 -247.466 -247.999c-137.054 -0.289062 -247.812 109.615 -248.531 246.667c-0.609375 116.126 78.5996 213.85 185.951 241.502\r\n-c15.2119 3.91895 30.0459 -7.52539 30.0459 -23.2344v-16.6475c0 -10.8047 -7.28125 -20.1621 -17.6885 -23.0693c-77.5254 -21.6543 -134.312 -92.749 -134.312 -177.219c0 -101.705 82.3105 -184 184 -184c101.705 0 184 82.3105 184 184\r\n-c0 84.4824 -56.7959 155.566 -134.314 177.219c-10.4043 2.90723 -17.6855 12.2627 -17.6855 23.0664v16.6592z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paper-plane\" unicode=\"&#xf1d8;\" \r\n-d=\"M476 444.8c17.2998 10 39 -4.59961 35.5996 -24.7998l-72 -432c-2.59961 -15.2998 -18.7998 -24.2002 -33 -18.2002l-124.6 52.2002l-63.5 -77.2998c-14 -17.1006 -42.5 -7.7998 -42.5 15.7998v80.5l240.9 293.5c4.69922 5.7002 -3.10059 13.2002 -8.60059 8.2998\r\n-l-287.3 -253.2l-106.3 44.6006c-18 7.59961 -20.2998 32.7998 -2.2002 43.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"history\" unicode=\"&#xf1da;\" \r\n-d=\"M504 192.469c0.25293 -136.64 -111.18 -248.372 -247.82 -248.468c-59.0146 -0.0419922 -113.223 20.5303 -155.821 54.9111c-11.0771 8.93945 -11.9053 25.541 -1.83984 35.6064l11.2676 11.2676c8.6084 8.6084 22.3525 9.55078 31.8906 1.9834\r\n-c31.3848 -24.9043 71.1045 -39.7695 114.323 -39.7695c101.705 0 184 82.3105 184 184c0 101.705 -82.3105 184 -184 184c-48.8145 0 -93.1494 -18.9688 -126.068 -49.9316l50.7539 -50.7539c10.0801 -10.0801 2.94141 -27.3145 -11.3125 -27.3145h-145.373\r\n-c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996\r\n-l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heading\" unicode=\"&#xf1dc;\" \r\n-d=\"M448 352v-320h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v128h-192v-128h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v320h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-128h192v128h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paragraph\" unicode=\"&#xf1dd;\" horiz-adv-x=\"448\" \r\n-d=\"M448 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-48v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v368h-32v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v112h-32c-88.3203 0 -160 71.6797 -160 160\r\n-s71.6797 160 160 160h240c8.83203 0 16 -7.16797 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sliders-h\" unicode=\"&#xf1de;\" \r\n-d=\"M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32\r\n-c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16\r\n-c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-16h80zM496 384c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-208v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-208c-8.7998 0 -16 7.2002 -16 16v32\r\n-c0 8.7998 7.2002 16 16 16h208v16c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-16h208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share-alt\" unicode=\"&#xf1e0;\" horiz-adv-x=\"448\" \r\n-d=\"M352 128c53.0186 0 96 -42.9814 96 -96s-42.9814 -96 -96 -96s-96 42.9814 -96 96v0.0283203c0 5.8125 1.01953 15.1367 2.27637 20.8125l-102.486 64.0537c-16.4033 -13.0752 -37.1816 -20.8945 -59.79 -20.8945c-53.0186 0 -96 42.9814 -96 96s42.9814 96 96 96\r\n-c22.6084 0 43.3867 -7.81934 59.79 -20.8945l102.486 64.0537c-1.48633 6.71094 -2.27637 13.6826 -2.27637 20.8408c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96s-42.9814 -96 -96 -96c-22.6084 0 -43.3867 7.81934 -59.79 20.8965l-102.486 -64.0547\r\n-c1.25684 -5.68359 2.27637 -15.0205 2.27637 -20.8408c0 -5.82129 -1.01953 -15.1582 -2.27637 -20.8418l102.486 -64.0537c16.4033 13.0752 37.1816 20.8945 59.79 20.8945z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"share-alt-square\" unicode=\"&#xf1e1;\" horiz-adv-x=\"448\" \r\n-d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM304 152c-14.5615 0 -27.8232 -5.56055 -37.7832 -14.6709l-67.958 40.7744\r\n-c0.960938 3.77539 1.74121 10.001 1.74121 13.8975c0 3.89551 -0.780273 10.1211 -1.74121 13.8965l67.958 40.7744c9.95996 -9.11133 23.2217 -14.6719 37.7832 -14.6719c30.9277 0 56 25.0723 56 56s-25.0723 56 -56 56s-56 -25.0723 -56 -56\r\n-c0 -4.79688 0.605469 -9.45312 1.74023 -13.8975l-67.958 -40.7744c-9.95898 9.11133 -23.2207 14.6719 -37.7822 14.6719c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56c14.5615 0 27.8232 5.56055 37.7832 14.6709l67.958 -40.7744\r\n-c-0.960938 -3.7666 -1.74023 -9.97656 -1.74023 -13.8623v-0.0351562c0 -30.9277 25.0723 -56 56 -56s56 25.0723 56 56c-0.000976562 30.9287 -25.0732 56.001 -56.001 56.001z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bomb\" unicode=\"&#xf1e2;\" \r\n-d=\"M440.5 359.5l-52 -52l26.5 -26.5c9.40039 -9.40039 9.40039 -24.5996 0 -33.9004l-17.4004 -17.3994c11.8008 -26.1006 18.4004 -55.1006 18.4004 -85.6006c0 -114.899 -93.0996 -208 -208 -208s-208 93 -208 207.9s93.0996 208 208 208\r\n-c30.5 0 59.5 -6.59961 85.5996 -18.4004l17.4004 17.4004c9.40039 9.40039 24.5996 9.40039 33.9004 0l26.5 -26.5l52 52zM500 388c6.59961 0 12 -5.40039 12 -12s-5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12s5.40039 12 12 12h24zM440 448\r\n-c6.59961 0 12 -5.40039 12 -12v-24c0 -6.59961 -5.40039 -12 -12 -12s-12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12zM473.9 393c-4.60059 -4.7002 -12.2002 -4.7002 -17 0c-4.7002 4.7002 -4.7002 12.2998 0 17l17 17c4.69922 4.7002 12.2998 4.7002 17 0\r\n-c4.69922 -4.7002 4.69922 -12.2998 0 -17zM406.1 393l-17 17c-4.69922 4.7002 -4.69922 12.2998 0 17c4.7002 4.7002 12.3008 4.7002 17 0l17 -17c4.7002 -4.7002 4.7002 -12.2998 0 -17c-4.69922 -4.7002 -12.2998 -4.7002 -17 0zM473.9 359l17 -17\r\n-c4.69922 -4.7002 4.69922 -12.2998 0 -17c-4.7002 -4.7002 -12.3008 -4.7002 -17 0l-17 17c-4.7002 4.7002 -4.7002 12.2998 0 17c4.69922 4.7002 12.2998 4.7002 17 0zM112 176c0 35.2998 28.7002 64 64 64c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\r\n-c-52.9004 0 -96 -43.0996 -96 -96c0 -8.7998 7.2002 -16 16 -16s16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"futbol\" unicode=\"&#xf1e3;\" \r\n-d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM456 192l-0.00292969 0.282227l-26.0645 -22.7412l-62.6787 58.5l16.4541 84.3555l34.3027 -3.07227\r\n-c-24.8887 34.2158 -60.0039 60.0889 -100.709 73.1406l13.6514 -31.9385l-74.9531 -41.5264l-74.9531 41.5254l13.6514 31.9385c-40.6309 -13.0283 -75.7803 -38.8701 -100.709 -73.1406l34.5645 3.07324l16.1924 -84.3555l-62.6777 -58.5l-26.0645 22.7412\r\n-l-0.00292969 -0.282227c0 -43.0146 13.4971 -83.9521 38.4717 -117.991l7.7041 33.8975l85.1387 -10.4473l36.3008 -77.8262l-29.9023 -17.7861c40.2021 -13.1221 84.29 -13.1475 124.572 0l-29.9023 17.7861l36.3008 77.8262l85.1387 10.4473l7.7041 -33.8975\r\n-c24.9756 34.0391 38.4727 74.9766 38.4727 117.991zM207.898 122.429l-29.8945 91.3125l77.9961 56.5264l77.9961 -56.5264l-29.6221 -91.3125h-96.4756z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tty\" unicode=\"&#xf1e4;\" \r\n-d=\"M5.37012 344.178c138.532 138.532 362.936 138.326 501.262 0c6.07812 -6.07812 7.07422 -15.4961 2.58301 -22.6807l-43.2139 -69.1377c-2.97266 -4.75684 -9.9375 -8.61719 -15.5459 -8.61719c-1.94922 0 -5 0.587891 -6.81055 1.31152l-86.4219 34.5693\r\n-c-6.36133 2.54492 -11.5244 10.1719 -11.5244 17.0234c0 0.503906 0.0410156 1.32031 0.0908203 1.82227l5.95215 59.5312c-62.1455 22.4541 -130.636 21.9863 -191.483 0l5.95312 -59.5322c0.0507812 -0.501953 0.0908203 -1.32031 0.0908203 -1.8252\r\n-c0 -6.85156 -5.16309 -14.4766 -11.5244 -17.0205l-86.4238 -34.5684c-1.80957 -0.723633 -4.85938 -1.31152 -6.80859 -1.31152c-5.60938 0 -12.5742 3.86035 -15.5469 8.61719l-43.2109 69.1387c-1.53809 2.46094 -2.78711 6.81445 -2.78711 9.7168\r\n-c0 4.19141 2.40625 9.99902 5.37012 12.9629zM96 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM192 140c0 -6.62695 -5.37305 -12 -12 -12h-40\r\n-c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM288 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM384 140\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM480 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\r\n-c6.62695 0 12 -5.37305 12 -12v-40zM144 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM240 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40\r\n-c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM336 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM432 44c0 -6.62695 -5.37305 -12 -12 -12h-40\r\n-c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM96 -52c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM384 -52\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-232c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h232c6.62695 0 12 -5.37305 12 -12v-40zM480 -52c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\r\n-c6.62695 0 12 -5.37305 12 -12v-40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"binoculars\" unicode=\"&#xf1e5;\" \r\n-d=\"M416 400v-48h-96v48c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16zM63.9102 288.01c0.479492 17.6201 14.2998 31.9902 31.9297 31.9902h96.1602v-160h-32v-160c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v44\r\n-c3.45996 129.78 61.4004 150.16 63.9102 244.01zM448.09 288.01c2.50977 -93.8496 60.4502 -114.229 63.9102 -244.01v-44c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v160h-32v160h96.1602c17.6299 0 31.4502 -14.3701 31.9297 -31.9902zM176 416\r\n-c8.83984 0 16 -7.16016 16 -16v-48h-96v48c0 8.83984 7.16016 16 16 16h64zM224 160v160h64v-160h-64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plug\" unicode=\"&#xf1e6;\" horiz-adv-x=\"384\" \r\n-d=\"M256 304v112c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-112h-64zM368 288c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-16v-32c0 -77.4062 -54.9688 -141.971 -128 -156.796v-99.2041h-64v99.2041\r\n-c-73.0312 14.8252 -128 79.3896 -128 156.796v32h-16c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h352zM128 304h-64v112c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-112z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"newspaper\" unicode=\"&#xf1ea;\" horiz-adv-x=\"576\" \r\n-d=\"M552 384c13.2549 0 24 -10.7451 24 -24v-312c0 -26.5098 -21.4902 -48 -48 -48h-472c-30.9277 0 -56 25.0723 -56 56v272c0 13.2549 10.7451 24 24 24h40v8c0 13.2549 10.7451 24 24 24h464zM56 48c4.41602 0 8 3.58398 8 8v248h-16v-248c0 -4.41602 3.58398 -8 8 -8z\r\n-M292 64c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 64c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8\r\n-c0 -6.62695 5.37305 -12 12 -12h152zM292 160c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 160c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152\r\n-c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 256c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-360c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h360z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wifi\" unicode=\"&#xf1eb;\" horiz-adv-x=\"640\" \r\n-d=\"M634.91 293.12c6.66016 -6.16016 6.79004 -16.5898 0.359375 -22.9805l-34.2393 -33.9697c-6.14062 -6.08984 -16.0205 -6.22949 -22.4004 -0.379883c-145.95 133.71 -371.33 133.68 -517.25 0c-6.37988 -5.84961 -16.2598 -5.71973 -22.3994 0.379883l-34.2402 33.9697\r\n-c-6.44043 6.39062 -6.31055 16.8203 0.349609 22.9805c177.101 163.81 452.65 163.87 629.82 0zM320 96c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64s-64 28.6504 -64 64s28.6504 64 64 64zM522.67 179.59c6.88965 -6.08984 7.12012 -16.6895 0.560547 -23.1494\r\n-l-34.4404 -33.9902c-6 -5.93066 -15.6602 -6.32031 -22.0498 -0.799805c-83.75 72.4092 -209.54 72.5693 -293.49 0c-6.38965 -5.52051 -16.0498 -5.12012 -22.0498 0.799805l-34.4404 33.9902c-6.5498 6.45996 -6.33008 17.0498 0.570312 23.1494\r\n-c115.13 101.82 290.08 101.93 405.34 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calculator\" unicode=\"&#xf1ec;\" horiz-adv-x=\"448\" \r\n-d=\"M400 448c25.5996 0 48 -22.4004 48 -48v-416c0 -25.5996 -22.4004 -48 -48 -48h-352c-25.5996 0 -48 22.4004 -48 48v416c0 25.5996 22.4004 48 48 48h352zM128 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM128 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM256 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM256 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM384 12.7998v166.4c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-166.4c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM384 268.8v102.4c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-294.4\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-102.4c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h294.4c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bell-slash\" unicode=\"&#xf1f6;\" horiz-adv-x=\"640\" \r\n-d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.80957 -22.4502l-19.6396 -25.2705c-5.43066 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.351 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\r\n-c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l144.96 -112.04c22.9307 31.5 57.2607 54.1904 97.5898 62.5703v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8301c73.46 -15.2598 127.939 -77.46 127.939 -155.16\r\n-c0 -102.3 36.1504 -133.529 55.4697 -154.29c6 -6.43945 8.66016 -14.1602 8.61035 -21.71c0 -1.39941 -0.610352 -2.67969 -0.799805 -4.05957zM157.23 196.46l212.789 -164.46h-241.92c-19.1191 0 -31.9893 15.5996 -32.0996 32\r\n-c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c16.21 17.4199 44.0098 42.79 52.6201 110.75zM320 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash\" unicode=\"&#xf1f8;\" horiz-adv-x=\"448\" \r\n-d=\"M432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781\r\n-c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120zM53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.55469 -24.8369 -23.0146 -44.9971 -47.8994 -45h-245.801c-24.8848 0.00292969 -46.3447 20.1631 -47.8994 45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xf1f9;\" \r\n-d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM373.134 93.2471c1.58203 1.85645 2.86621 5.34375 2.86621 7.7832c0 2.16309 -1.03613 5.33594 -2.31348 7.08301l-24.5469 33.5713\r\n-c-4.44824 6.08691 -13.376 6.61816 -18.5078 1.05371c-0.263672 -0.287109 -26.8467 -28.625 -65.5439 -28.625c-48.7627 0 -74.2773 40.0898 -74.2773 79.6914c0 42.5068 27.8008 76.082 73.916 76.082c35.3516 0 61.6475 -23.666 61.8809 -23.8799\r\n-c5.45996 -5.05566 14.1846 -3.97168 18.2334 2.29492l22.3799 34.6553c1.05957 1.64062 1.91992 4.55762 1.91992 6.51074c0 2.57812 -1.41504 6.21191 -3.15723 8.1123c-1.45703 1.58887 -36.4658 38.9043 -103.423 38.9043\r\n-c-81.7578 0 -143.762 -62.0986 -143.762 -143.401c0 -82.3066 59.792 -145.567 144.484 -145.567c70.0752 0 108.259 43.8643 109.851 45.7314z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"at\" unicode=\"&#xf1fa;\" \r\n-d=\"M256 440c138.023 0 248 -87.6533 248 -224c0 -75.7979 -41.3906 -147.41 -150.299 -147.41c-30.0977 0 -61.1885 -0.000976562 -70.71 34.1035c-17.6221 -22.6963 -48.0068 -38.333 -74.9912 -38.333c-59.2148 0 -96 40.5664 -96 105.87\r\n-c0 89.2256 63.251 151.46 137.831 151.46c19.5225 0 45.2744 -3.87402 59.9707 -21.7754l0.00976562 0.0917969c0.751953 6.62012 6.76953 11.9932 13.4326 11.9932v0h44.9805c15.083 0 26.4287 -13.75 23.5625 -28.5586l-23.4336 -121.11\r\n-c-3.43359 -17.167 -3.87207 -29.5703 13.4766 -30.0244c37.0771 3.95117 58.1699 44.9072 58.1699 83.6934c0 102.381 -83.8613 160 -184 160c-101.458 0 -184 -82.542 -184 -184s82.542 -184 184 -184c35.3145 0 69.9199 10.2432 99.4102 29.1572\r\n-c10.1934 6.53809 23.7021 4.24219 31.373 -5.12891l10.1768 -12.4336c9.07324 -11.084 6.45312 -27.5566 -5.55176 -35.3721c-40.0664 -26.083 -87.2539 -40.2227 -135.408 -40.2227c-137.081 0 -248 110.941 -248 248c0 137.081 110.941 248 248 248zM234.32 135.57\r\n-c24.2861 0 58.1611 27.6689 58.1611 72.7295c0 25.5293 -13.3096 40.7705 -35.6016 40.7705c-27.8506 0 -58.6299 -27.7363 -58.6299 -72.7295c0 -25.1475 13.8213 -40.7705 36.0703 -40.7705z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"eye-dropper\" unicode=\"&#xf1fb;\" \r\n-d=\"M50.75 114.75l126.63 126.61l128 -128l-126.64 -126.62c-12 -12 -28.2803 -18.7402 -45.25 -18.7402h-45.4902l-56 -32l-32 32l32 56v45.4902c0 16.9795 6.75 33.2598 18.75 45.2598zM483.88 419.88c37.5 -37.4902 37.5 -98.2695 -0.00976562 -135.75l-77.0898 -77.0898\r\n-l13.0996 -13.0996c9.37012 -9.37012 9.37012 -24.5703 0 -33.9404l-40.9697 -40.96c-9.29004 -9.30957 -24.5 -9.44043 -33.9404 0l-161.939 161.94c-9.37012 9.36914 -9.37012 24.5693 0 33.9395l40.9697 40.9697c9.29004 9.31055 24.5 9.44043 33.9404 0l13.0996 -13.0996\r\n-l77.0898 77.0898c37.4697 37.5 98.2803 37.5 135.75 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paint-brush\" unicode=\"&#xf1fc;\" \r\n-d=\"M167.02 138.66l88.0107 -73.3398c0.319336 -3.05078 0.969727 -6.02051 0.969727 -9.12988c0 -76.4209 -52.1396 -120.19 -128 -120.19c-90.0703 0 -128 72.3799 -128.01 154.73c9.79004 -6.68066 44.1396 -34.3506 55.25 -34.3506\r\n-c6.58984 0 12.2402 3.77051 14.5898 9.98047c20.6602 54.4395 57.0703 69.7197 97.1895 72.2998zM457.89 448c28.1104 0 54.1104 -20.6396 54.1104 -49.5498c0 -16.1406 -6.51953 -31.6406 -13.9004 -45.9902c-113.05 -210.99 -149.05 -256.46 -211.159 -256.46\r\n-c-7.75 0 -15.1807 1.23047 -22.3906 3.03027l-63.8193 53.1797c-5.48047 11.9404 -8.73047 25 -8.73047 38.7002c0 53.75 21.2695 58.04 225.68 240.64c10.8398 9.74023 25.0508 16.4502 40.21 16.4502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"birthday-cake\" unicode=\"&#xf1fd;\" horiz-adv-x=\"448\" \r\n-d=\"M448 64c-28.0195 0 -31.2598 32 -74.5 32c-43.4297 0 -46.8252 -32 -74.75 -32c-27.6953 0 -31.4541 32 -74.75 32c-42.8418 0 -47.2178 -32 -74.5 -32c-28.1484 0 -31.2021 32 -74.75 32c-43.5469 0 -46.6533 -32 -74.75 -32v80c0 26.5 21.5 48 48 48h16v144h64v-144h64\r\n-v144h64v-144h64v144h64v-144h16c26.5 0 48 -21.5 48 -48v-80zM448 -64h-448v96c43.3564 0 46.7666 32 74.75 32c27.9512 0 31.2529 -32 74.75 -32c42.8428 0 47.2168 32 74.5 32c28.1484 0 31.2012 -32 74.75 -32c43.3574 0 46.7666 32 74.75 32\r\n-c27.4883 0 31.252 -32 74.5 -32v-96zM96 352c-17.75 0 -32 14.25 -32 32c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40zM224 352c-17.75 0 -32 14.25 -32 32c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40zM352 352c-17.75 0 -32 14.25 -32 32\r\n-c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chart-area\" unicode=\"&#xf1fe;\" \r\n-d=\"M500 64c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-488c-6.59961 0 -12 5.40039 -12 12v360c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-308h436zM372.7 288.5c6 4 14.2002 1.7998 17.3994 -4.7002l89.9004 -187.8h-384v104\r\n-l86.7998 144.7c4.40039 7.2998 14.7998 7.7998 19.9004 1l85.2998 -113.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chart-pie\" unicode=\"&#xf200;\" horiz-adv-x=\"544\" \r\n-d=\"M527.79 160c9.5498 0 17.4004 -8.38965 16.0596 -17.8496c-7.80957 -55.25 -34.4297 -104.4 -73.1299 -140.86c-6.20996 -5.84961 -16.1494 -5.36035 -22.1895 0.679688l-158.03 158.03h237.29zM511.96 224.8c0.629883 -9.12012 -7.0498 -16.7998 -16.1904 -16.7998\r\n-h-223.77v223.76c0 9.14062 7.67969 16.8301 16.7998 16.2002c119.46 -8.24023 214.92 -103.7 223.16 -223.16zM224 160l155.86 -155.87c6.84961 -6.84961 6.33008 -18.4795 -1.57031 -24.0801c-38.29 -27.1602 -84.8604 -43.3994 -135.26 -44.0303\r\n-c-128.2 -1.60938 -238.53 103.471 -242.891 231.61c-4.23926 124.771 86.8506 228.88 206.021 245.72c9.4502 1.34082 17.8398 -6.50977 17.8398 -16.0596v-237.29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chart-line\" unicode=\"&#xf201;\" \r\n-d=\"M496 64c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-304h432zM464 352c8.83984 0 16 -7.16016 15.9902 -16v-118.05\r\n-c0 -21.3799 -25.8506 -32.0898 -40.9707 -16.9697l-32.3994 32.3994l-96 -96c-12.4902 -12.5 -32.75 -12.5 -45.25 0l-73.3701 73.3701l-46.0596 -46.0703c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6191 22.6201c-6.25 6.25 -6.25 16.3799 0 22.6299l68.6895 68.6904\r\n-c12.4902 12.5 32.75 12.5 45.25 0l73.3701 -73.3701l73.3701 73.3799l-32.4004 32.4004c-15.1201 15.1201 -4.41016 40.9697 16.9707 40.9697h118.06z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"toggle-off\" unicode=\"&#xf204;\" horiz-adv-x=\"576\" \r\n-d=\"M384 384c106.039 0 192 -85.9609 192 -192s-85.9609 -192 -192 -192h-192c-106.039 0 -192 85.9609 -192 192s85.9609 192 192 192h192zM64 192c0 -70.751 57.2588 -128 128 -128c70.751 0 128 57.2588 128 128c0 70.751 -57.2588 128 -128 128\r\n-c-70.751 0 -128 -57.2588 -128 -128zM384 64c70.751 0 128 57.2598 128 128c0 70.751 -57.2588 128 -128 128h-48.9053c65.2363 -72.8799 65.2168 -183.142 0 -256h48.9053z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"toggle-on\" unicode=\"&#xf205;\" horiz-adv-x=\"576\" \r\n-d=\"M384 384c106 0 192 -86 192 -192s-86 -192 -192 -192h-192c-106 0 -192 86 -192 192s86 192 192 192h192zM384 64c70.7002 0 128 57.2002 128 128c0 70.7002 -57.2002 128 -128 128c-70.7002 0 -128 -57.2002 -128 -128c0 -70.7002 57.2002 -128 128 -128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bicycle\" unicode=\"&#xf206;\" horiz-adv-x=\"640\" \r\n-d=\"M512.509 255.999c70.9502 -0.276367 128.562 -59.0547 127.477 -129.996c-1.07422 -70.1934 -58.6494 -126.681 -129.255 -125.996c-68.8301 0.667969 -126.584 58.8857 -126.729 127.719c-0.078125 37.3564 15.8516 70.9893 41.3066 94.4375l-14.9375 24.0674\r\n-l-85.9619 -138.863c-3.88477 -6.27441 -13.0264 -11.3672 -20.4062 -11.3672h-52.0332c-14.209 -55.207 -64.3252 -96 -123.967 -96c-70.9473 0 -128.415 57.7207 -128 128.764c0.410156 70.2246 58.0918 127.406 128.317 127.236\r\n-c15.0879 -0.0371094 29.5586 -2.69043 42.9912 -7.51953l29.417 47.5195h-48.7256c-13.1191 0 -23.7627 10.5186 -23.9951 23.5635c-0.241211 13.4375 11.0947 24.4365 24.5361 24.4365h87.459c8.83691 0 16 -7.16309 16 -16v-16h113.544l-14.8955 24h-50.6494\r\n-c-8.83691 0 -16 7.16309 -16 16v16c0 8.83691 7.16309 16 16 16h64h0.000976562c7.36914 0 16.5049 -5.08203 20.3906 -11.3428l77.6807 -125.153c14.4053 5.54004 30.0625 8.55957 46.4355 8.49512zM186.75 182.228l-23.6641 -38.2275h43.3057\r\n-c-2.96875 14.5674 -9.91504 27.6992 -19.6416 38.2275zM128.002 48c32.7383 0 60.9297 19.7754 73.2998 48h-81.2998c-18.7891 0 -30.2871 20.6729 -20.4062 36.6318l45.5049 73.5088c-5.5127 1.20605 -11.2295 1.85938 -17.0986 1.85938c-44.1123 0 -80 -35.8877 -80 -80\r\n-s35.8877 -80 80 -80zM290.632 144l74.2861 120h-127.547l-24.7461 -39.9736c22.8271 -20.1328 38.4229 -48.2705 42.3828 -80.0264h35.624zM507.689 48.1143c46.0605 -2.43164 84.3115 34.3447 84.3125 79.8848c0 44.1123 -35.8877 80 -80 80h-0.0390625\r\n-c-5.55664 0 -14.4355 -1.11914 -19.8193 -2.49707l44.4688 -71.6426c4.66113 -7.50879 2.35156 -17.3721 -5.15625 -22.0322l-13.5938 -8.4375c-7.50879 -4.65918 -17.3721 -2.35156 -22.0322 5.15625l-44.4326 71.5859\r\n-c-12.7021 -14.7451 -20.1475 -34.1416 -19.3359 -55.2627c1.57812 -41.0635 34.5918 -74.5898 75.6279 -76.7549z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bus\" unicode=\"&#xf207;\" \r\n-d=\"M488 320c13.25 0 24 -10.7402 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-8v-166.4c0 -12.7998 -9.59961 -25.5996 -25.5996 -25.5996h-6.40039v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\r\n-c-17.6699 0 -32 14.3301 -32 32v32c-17.6699 0 -32 14.3301 -32 32v160h-8c-13.25 0 -24 10.75 -24 24v80c0 13.2598 10.75 24 24 24h8v48c0 44.7998 99.2002 80 224 80s224 -35.2002 224 -80v-48h8zM112 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 160h256c17.6699 0 32 14.3301 32 32v128c0 17.6699 -14.3301 32 -32 32h-256c-17.6699 0 -32 -14.3301 -32 -32v-128c0 -17.6699 14.3301 -32 32 -32zM400 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"closed-captioning\" unicode=\"&#xf20a;\" \r\n-d=\"M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM218.1 160.3c-41.1992 -37.8994 -92.1992 -15.3994 -92.2998 32.6006c0 46.0996 53.7998 63.1992 94.6006 31.1992\r\n-c2.89941 -2.2998 7.19922 -1.39941 9.09961 1.7002l17.5 30.5c1.5 2.5 1.09961 3.7002 -1 5.7002c-50.7998 49.4004 -172.5 27.2002 -172.5 -70.0996c0 -100 119.2 -124.7 172.8 -67.9004c2 2.09961 2.2002 5.2998 0.5 7.7002l-19.5 27.7002\r\n-c-2.09961 3 -6.39941 3.39941 -9.2002 0.899414zM408.5 160.3c-41.2002 -37.8994 -92.2002 -15.3994 -92.2002 32.6006c0 46.0996 53.7998 63.1992 94.6006 31.1992c2.89941 -2.2998 7.19922 -1.39941 9.09961 1.7002l17.5 30.5c1.5 2.5 1.09961 3.7002 -1 5.7002\r\n-c-50.7998 49.4004 -172.5 27.2002 -172.5 -70.0996c0 -100 119.2 -124.801 172.7 -67.9004c2 2.09961 2.2002 5.2998 0.5 7.7002l-19.5 27.7002c-2.10059 3 -6.40039 3.39941 -9.2002 0.899414z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shekel-sign\" unicode=\"&#xf20b;\" horiz-adv-x=\"448\" \r\n-d=\"M248 280c0 30.9297 -25.0703 56 -56 56h-112v-352c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v408c0 13.2598 10.75 24 24 24h168c75.1104 0 136 -60.8896 136 -136v-168c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16\r\n-v168zM432 416c8.83984 0 16 -7.16016 16 -16v-296c0 -75.1104 -60.8896 -136 -136 -136h-168c-13.25 0 -24 10.75 -24 24v280c0 8.83984 7.16016 16 16 16h48c8.83984 0 16 -7.16016 16 -16v-224h112c30.9297 0 56 25.0703 56 56v296c0 8.83984 7.16016 16 16 16h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cart-plus\" unicode=\"&#xf217;\" horiz-adv-x=\"576\" \r\n-d=\"M504.717 128h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -31.2021 -25.5186 -56.4443 -56.8242 -55.9941\r\n-c-29.8232 0.428711 -54.3496 24.6309 -55.1543 54.4473c-0.44043 16.2871 6.08496 31.0488 16.8027 41.5479h-209.648c10.377 -10.166 16.8242 -24.3271 16.8242 -40.001c0 -31.8135 -26.5283 -57.4307 -58.6699 -55.9385c-28.54 1.3252 -51.751 24.3857 -53.251 52.917\r\n-c-1.1582 22.0342 10.4355 41.4551 28.0508 51.5869l-70.2471 343.435h-69.8828c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2275 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782\r\n-c15.4004 0 26.8154 -14.3008 23.4023 -29.3193l-47.2725 -208c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807zM408 280h-48v40c0 8.83691 -7.16309 16 -16 16h-16c-8.83691 0 -16 -7.16309 -16 -16v-40h-48c-8.83691 0 -16 -7.16309 -16 -16v-16\r\n-c0 -8.83691 7.16309 -16 16 -16h48v-40c0 -8.83691 7.16309 -16 16 -16h16c8.83691 0 16 7.16309 16 16v40h48c8.83691 0 16 7.16309 16 16v16c0 8.83691 -7.16309 16 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cart-arrow-down\" unicode=\"&#xf218;\" horiz-adv-x=\"576\" \r\n-d=\"M504.717 128h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -31.2021 -25.5186 -56.4443 -56.8242 -55.9941\r\n-c-29.8232 0.428711 -54.3496 24.6309 -55.1543 54.4473c-0.44043 16.2871 6.08496 31.0488 16.8027 41.5479h-209.648c10.377 -10.166 16.8242 -24.3271 16.8242 -40.001c0 -31.8135 -26.5283 -57.4307 -58.6699 -55.9385c-28.54 1.3252 -51.751 24.3857 -53.251 52.917\r\n-c-1.1582 22.0342 10.4355 41.4551 28.0508 51.5869l-70.2471 343.435h-69.8828c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2275 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782\r\n-c15.4004 0 26.8154 -14.3008 23.4023 -29.3193l-47.2725 -208c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807zM403.029 256h-43.0293v60c0 6.62695 -5.37305 12 -12 12h-24c-6.62695 0 -12 -5.37305 -12 -12v-60h-43.0293\r\n-c-10.6904 0 -16.0449 -12.9258 -8.48438 -20.4854l67.0283 -67.0283c4.68652 -4.68652 12.2842 -4.68652 16.9717 0l67.0283 67.0283c7.55957 7.55957 2.20508 20.4854 -8.48535 20.4854z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ship\" unicode=\"&#xf21a;\" horiz-adv-x=\"640\" \r\n-d=\"M496.616 75.3613c17.8418 -44.3604 58.5664 -75.3613 119.384 -75.3613c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c-61.0322 0 -107.505 20.6162 -143.258 59.3965c-14.4189 -34.8281 -48.7637 -59.3965 -88.7422 -59.3965h-128\r\n-c-39.9785 0 -74.3232 24.5684 -88.7422 59.3965c-35.7588 -38.7861 -82.2344 -59.3965 -143.258 -59.3965c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c61.5869 0 101.828 31.7129 119.384 75.3613l-70.0117 70.0117\r\n-c-16.918 16.9189 -9.91699 45.7793 12.8359 53.0918l41.792 13.4336v140.102c0 17.6729 14.3271 32 32 32h64v40c0 13.2549 10.7451 24 24 24h144c13.2549 0 24 -10.7451 24 -24v-40h64c17.6729 0 32 -14.3271 32 -32v-140.102l41.792 -13.4336\r\n-c22.7783 -7.32129 29.7354 -36.1914 12.8359 -53.0918zM192 320v-87.5312l118.208 37.9951c2.63574 0.847656 7.02344 1.53516 9.79199 1.53516s7.15625 -0.6875 9.79199 -1.53516l118.208 -37.9951v87.5312h-256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-secret\" unicode=\"&#xf21b;\" horiz-adv-x=\"448\" \r\n-d=\"M383.9 139.7c38.2998 -23.7002 64.0996 -65.7002 64.0996 -114.101v-44.7998c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v44.7998c0 49.7002 27.2998 92.6006 67.4004 115.9l-25.8008 60.2002\r\n-c-4.5 10.5996 3.2002 22.2998 14.7002 22.2998h57.5c-11 18.9004 -17.7998 40.5996 -17.7998 64v0.299805c-39.2002 7.7998 -64 19.1006 -64 31.7002c0 13.2998 27.2998 25.0996 70 33c9.2002 32.7998 27.0996 65.7998 40.5996 82.7998\r\n-c9.5 11.9004 25.9004 15.6006 39.5 8.7998l27.6006 -13.7998c9 -4.5 19.5996 -4.5 28.5996 0l27.6006 13.7998c13.5996 6.80078 30 3.10059 39.5 -8.7998c13.5996 -17 31.3994 -50 40.5996 -82.7998c42.7998 -7.90039 70.0996 -19.7002 70.0996 -33\r\n-c0 -12.5996 -24.7998 -23.9004 -64 -31.7002v-0.299805c0 -23.4004 -6.7998 -45.0996 -17.7998 -64h58.5c11.2998 0 19 -11.2002 15 -21.7002zM176 -32l32 120l-24 40l-49.5996 32zM272 -32l41.5996 192l-49.5996 -32l-24 -40zM313.7 266.5\r\n-c0.799805 2.59961 6.2998 5.7002 6.39941 5.7998v10.7998c-28.2998 -3.69922 -61 -5.7998 -96 -5.7998s-67.6992 2.2002 -96 5.7998v-10.7998c0 -0.0996094 5.5 -3.2998 6.30078 -5.7998c3.7998 -11.9004 7 -24.5996 16.5 -33.4004c8 -7.39941 47 -25.1992 64 25\r\n-c2.89941 8.40039 15.5 8.40039 18.2998 0c16 -47.3994 53.8994 -34.2998 64 -25c9.5 8.80078 12.5996 21.5 16.5 33.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"motorcycle\" unicode=\"&#xf21c;\" horiz-adv-x=\"640\" \r\n-d=\"M512.9 256c69.5996 -0.5 126.5 -57.2998 127.199 -126.9c0.600586 -71.5996 -57.5996 -129.8 -129.199 -129.1c-69.6006 0.599609 -126.301 57.5 -126.801 127.1c-0.299805 39.3008 17.2002 74.5 44.8008 98.2002l-12.5 20.7998\r\n-c-38.7002 -31.2998 -58.3008 -77.8994 -56.2002 -125c0.599609 -13.6992 -10.2998 -25.0996 -24 -25.0996h-84.2002c-14.2998 -55.2002 -64.4004 -96 -124 -96c-71.7002 0 -129.6 58.9004 -128 131c1.59961 67.4004 55.9004 122.5 123.2 124.9\r\n-c14.3994 0.5 28.2998 -1.30078 41.2998 -5.2002l11.2998 20.5c-9.09961 13.8994 -23.2998 24.7998 -47.7998 24.7998h-56c-13.0996 0 -23.7998 10.5 -24 23.5c-0.299805 13.5 11 24.5 24.5 24.5h55.5c55 0 82.2002 -16.9004 99.9004 -40h153.699l-19.1992 32h-66.4004\r\n-c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h80c8.40039 0 16.2002 -4.40039 20.5996 -11.5996l22.8008 -38l37.5 41.6992c4.5 5 11 7.90039 17.7998 7.90039h45.2998c13.2998 0 24 -10.7002 24 -24v-32c0 -13.2998 -10.7002 -24 -24 -24h-82.4004\r\n-l32.9004 -54.9004c13.2998 4.60059 27.5 7 42.4004 6.90039zM128 48c32.7002 0 60.9004 19.7998 73.2998 48h-81.2998c-18.2002 0 -29.7998 19.5996 -21 35.5996l41.5 75.4004c-4.09961 0.700195 -8.2998 1 -12.5 1c-44.0996 0 -80 -35.9004 -80 -80s35.9004 -80 80 -80z\r\n-M591.9 123.6c2.39941 46.1006 -34.3008 84.4004 -79.9004 84.3008c-5.40039 0 -10.7002 -0.5 -15.9004 -1.60059l48.6006 -80.8994c4.5 -7.60059 2.09961 -17.5 -5.5 -22l-13.7002 -8.2002c-7.59961 -4.5 -17.5 -2.10059 -22 5.5l-49.4004 82.3994\r\n-c-13.6992 -14.2998 -22.0996 -33.6992 -22.0996 -55.0996c0 -45.5996 38.2998 -82.4004 84.4004 -79.9004c40.5 2.10059 73.2998 34.9004 75.5 75.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"street-view\" unicode=\"&#xf21d;\" \r\n-d=\"M367.9 118.24c85.2295 -15.5801 144.1 -48.29 144.1 -86.2402c0 -53.0195 -114.62 -96 -256 -96s-256 42.9805 -256 96c0 37.9502 58.8701 70.6602 144.1 86.2402c4.62012 -5.2998 9.78027 -10.1006 15.9004 -13.6504v-22.9395\r\n-c-66.5195 -9.35059 -112 -28.0508 -112 -49.6504c0 -30.9297 93.1201 -56 208 -56s208 25.0703 208 56c0 21.5996 -45.4805 40.3096 -112 49.6504v22.9395c6.12012 3.5498 11.2803 8.35059 15.9004 13.6504zM256 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64\r\n-s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM192 128c-17.6699 0 -32 14.3301 -32 32v96c0 26.5098 21.4902 48 48 48h11.7998c11.0703 -5.03027 23.2598 -8 36.2002 -8s25.1299 2.96973 36.2002 8h11.7998c26.5098 0 48 -21.4902 48 -48v-96\r\n-c0 -17.6699 -14.3301 -32 -32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heartbeat\" unicode=\"&#xf21e;\" \r\n-d=\"M320.2 204.2l22.0996 -44.2002h109.101l-182.601 -186.5c-7.09961 -7.2998 -18.5996 -7.2998 -25.7002 0l-182.5 186.5h94.1006l30 71.7002l56.8994 -126.3c5.5 -12.3008 22.9004 -12.7002 28.9004 -0.600586zM473.7 374.1\r\n-c48.7002 -49.7998 50.7998 -129.1 7.2998 -182.1h-118.9l-27.5996 55.2002c-5.90039 11.7998 -22.7002 11.7998 -28.5996 0l-49 -97.9004l-58.2002 129.3c-5.7998 12.8008 -24 12.5 -29.4004 -0.399414l-35.8994 -86.2002h-102.4c-43.5 53 -41.4004 132.3 7.2998 182.1\r\n-l2.40039 2.40039c51.5 52.7002 135.899 52.7002 187.399 0l27.9004 -28.5l27.9004 28.5996c51.5996 52.6006 135.899 52.6006 187.399 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"venus\" unicode=\"&#xf221;\" horiz-adv-x=\"288\" \r\n-d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM64 272c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mars\" unicode=\"&#xf222;\" horiz-adv-x=\"384\" \r\n-d=\"M372 384c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 144 144\r\n-c28.2002 0 54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 64c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mercury\" unicode=\"&#xf223;\" horiz-adv-x=\"288\" \r\n-d=\"M288 240c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 44.2002 19.9004 83.7002 51.2002 110c-2.5 1.90039 -4.90039 3.7998 -7.2002 5.7998c-24.7998 21.2002 -39.7998 48.7998 -43.2002 78.9004\r\n-c-0.899414 7.09961 4.7002 13.2998 11.9004 13.2998h40.5c5.7002 0 10.5996 -4.09961 11.7002 -9.7998c2.5 -12.5 9.59961 -24.2998 20.6992 -33.7998c15.4004 -13.2002 36.1006 -20.4004 58.4004 -20.4004s43 7.2002 58.2998 20.4004\r\n-c11.1006 9.5 18.2998 21.2998 20.7002 33.7998c1.09961 5.7002 6 9.7998 11.7998 9.7998h40.5c7.2002 0 12.7998 -6.2002 11.9004 -13.2998c-3.40039 -30 -18.5 -57.6006 -43.2002 -78.7998c-2.2998 -2 -4.7002 -4 -7.2002 -5.80078\r\n-c31.2998 -26.3994 51.2002 -65.8994 51.2002 -110.1zM64 240c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"transgender\" unicode=\"&#xf224;\" horiz-adv-x=\"384\" \r\n-d=\"M372 448c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -68.5 -47.9004 -125.8 -112 -140.4v-27.5996h36c6.59961 0 12 -5.40039 12 -12v-40\r\n-c0 -6.59961 -5.40039 -12 -12 -12h-36v-28c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v28h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v27.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144\r\n-c28.2002 0 54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 128c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"transgender-alt\" unicode=\"&#xf225;\" horiz-adv-x=\"480\" \r\n-d=\"M468 448c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -68.5 -47.9004 -125.8 -112 -140.4v-27.5996h36c6.59961 0 12 -5.40039 12 -12v-40\r\n-c0 -6.59961 -5.40039 -12 -12 -12h-36v-28c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v28h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v27.5996c-64.0996 14.5 -112 71.9004 -112 140.4\r\n-c0 28.2002 8.09961 54.5 22.2002 76.5996l-16.5 16.5l-19.7998 -19.7998c-4.7002 -4.7002 -12.3008 -4.7002 -17 0l-28.3008 28.2998c-4.69922 4.7002 -4.69922 12.3008 0 17l19.8008 19.8008l-19 19l-16.9004 -16.9004c-7.59961 -7.5 -20.5 -2.2002 -20.5 8.5v79\r\n-c0 6.59961 5.40039 12 12 12h79c10.7002 0 16.0996 -12.9004 8.40039 -20.4004l-16.9004 -16.8994l19 -19l19.7998 19.7998c4.7002 4.7002 12.2998 4.7002 17 0l28.2998 -28.2998c4.7002 -4.7002 4.7002 -12.2998 0 -17l-19.7998 -19.7998l16.5 -16.5\r\n-c22.2002 14 48.5 22.0996 76.7002 22.0996s54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM240 128c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"venus-double\" unicode=\"&#xf226;\" \r\n-d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\r\n-c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM64 272c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80zM400 131.6v-51.5996h36\r\n-c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v51.5996\r\n-c-21.2002 4.80078 -40.5996 14.3008 -57.2002 27.3008c14 16.6992 25 36 32.1006 57.0996c14.5 -14.7998 34.6992 -24 57.0996 -24c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80c-22.2998 0 -42.5996 -9.2002 -57.0996 -24\r\n-c-7.10059 21.0996 -18 40.4004 -32.1006 57.0996c24.6006 19.3008 55.5 30.9004 89.2002 30.9004c79.5 0 144 -64.5 144 -144c0 -68.5 -47.9004 -125.9 -112 -140.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mars-double\" unicode=\"&#xf227;\" \r\n-d=\"M340 448c6.59961 0 12 -5.40039 12 -12v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-2.90039 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144\r\n-s64.5 144 144 144c28.2002 0 54.5 -8.09961 76.7002 -22.0996l48.7002 48.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 160c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80zM500 288.1\r\n-c6.59961 0 12 -5.39941 12 -12.0996v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-3 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144c-74.4004 0 -135.6 56.4004 -143.2 128.9\r\n-c21.7998 2 43.2998 8.19922 63.2998 18.3994c-0.0996094 -1 -0.0996094 -2.09961 -0.0996094 -3.2002c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80c0 44.1006 -35.9004 80 -80 80c-1 0 -2.09961 -0.0996094 -3.2002 -0.0996094\r\n-c10.2002 20 16.2998 41.5 18.4004 63.2998c22.5 -2.39941 43.2998 -9.89941 61.5 -21.2998l48.7002 48.7002l-16.9004 16.8994c-7.5 7.60059 -2.2002 20.5 8.5 20.5h79z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"venus-mars\" unicode=\"&#xf228;\" horiz-adv-x=\"576\" \r\n-d=\"M564 448c6.59961 0 12 -5.40039 12 -12v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-3 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144\r\n-c-33.7002 0 -64.7002 11.5 -89.2002 30.9004c14.1006 16.6992 25 36 32.1006 57.0996c14.5 -14.7998 34.7998 -24 57.0996 -24c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80c-22.4004 0 -42.5996 -9.2002 -57.0996 -24\r\n-c-7.10059 21.0996 -18.1006 40.4004 -32.1006 57.0996c24.6006 19.3008 55.5 30.9004 89.2002 30.9004c28.2002 0 54.5 -8.09961 76.7002 -22.0996l48.7002 48.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 384c79.5 0 144 -64.5 144 -144\r\n-c0 -68.5 -47.9004 -125.8 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12\r\n-h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144zM144 160c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mars-stroke\" unicode=\"&#xf229;\" horiz-adv-x=\"384\" \r\n-d=\"M372 384c6.59961 0 12 -5.40039 12.0996 -12v-78.9004c0 -10.6992 -12.8994 -16.0996 -20.5 -8.5l-16.8994 16.9004l-17.5 -17.5l14.0996 -14.0996c4.7002 -4.7002 4.7002 -12.3008 0 -17l-28.2998 -28.3008c-4.7002 -4.69922 -12.2998 -4.69922 -17 0l-14.0996 14.1006\r\n-l-18 -18c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 143.9 144c28.1992 0 54.5 -8.09961 76.6992 -22.0996l18 18l-14.0996 14.0996c-4.7002 4.7002 -4.7002 12.2998 0 17l28.2998 28.2002\r\n-c4.7002 4.7002 12.2998 4.7002 17 0l14.1006 -14.1006l17.5 17.5l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 64c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mars-stroke-v\" unicode=\"&#xf22a;\" horiz-adv-x=\"288\" \r\n-d=\"M245.8 213.8c56.2998 -56.2002 56.2998 -147.399 0 -203.6c-56.2002 -56.2002 -147.399 -56.2002 -203.6 0s-56.2002 147.399 0 203.6c19.8994 19.9004 44.2002 32.7998 69.7998 38.6006v25.3994h-20c-6.59961 0 -12 5.40039 -12 12v40c0 6.60059 5.40039 12 12 12h20\r\n-v24.7002h-23.9004c-10.6992 0 -16.0996 12.9004 -8.5 20.5l55.9004 55.9004c4.7002 4.69922 12.2998 4.69922 17 0l55.9004 -55.8008c7.5 -7.59961 2.19922 -20.5 -8.5 -20.5h-23.9004v-24.7998h20c6.59961 0 12 -5.39941 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20\r\n-v-25.3994c25.5996 -5.80078 49.9004 -18.7002 69.7998 -38.6006zM200.6 55.4004c31.2002 31.1992 31.2002 82 0 113.1c-31.1992 31.2002 -81.8994 31.2002 -113.1 0s-31.2002 -81.9004 0 -113.1c31.2002 -31.2002 81.9004 -31.2002 113.1 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mars-stroke-h\" unicode=\"&#xf22b;\" horiz-adv-x=\"480\" \r\n-d=\"M476.2 200.5c4.7002 -4.7002 4.7002 -12.2998 0.0996094 -17l-55.8994 -55.9004c-7.60059 -7.5 -20.5 -2.19922 -20.5 8.5v23.9004h-23.9004v-20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v20h-27.5996\r\n-c-5.80078 -25.5996 -18.7002 -49.9004 -38.6006 -69.7998c-56.2002 -56.2002 -147.399 -56.2002 -203.6 0s-56.2002 147.399 0 203.6s147.399 56.2002 203.6 0c19.9004 -19.8994 32.7998 -44.2002 38.6006 -69.7998h27.5996v20c0 6.59961 5.40039 12 12 12h40\r\n-c6.59961 0 12 -5.40039 12 -12v-20h23.7998v23.9004c0 10.6992 12.9004 16.0996 20.5 8.5zM200.6 135.4c31.2002 31.1992 31.2002 82 0 113.1c-31.1992 31.2002 -81.8994 31.2002 -113.1 0s-31.2002 -81.9004 0 -113.1c31.2002 -31.2002 81.9004 -31.2002 113.1 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"neuter\" unicode=\"&#xf22c;\" horiz-adv-x=\"288\" \r\n-d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-151.6c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v151.6c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM144 192c44.0996 0 80 35.9004 80 80\r\n-s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"genderless\" unicode=\"&#xf22d;\" horiz-adv-x=\"288\" \r\n-d=\"M144 272c-44.0996 0 -80 -35.9004 -80 -80s35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80zM144 336c79.5 0 144 -64.5 144 -144s-64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 144 144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"server\" unicode=\"&#xf233;\" \r\n-d=\"M480 288h-448c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 376c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 376\r\n-c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM480 128h-448c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 216\r\n-c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 216c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM480 -32h-448c-17.6729 0 -32 14.3271 -32 32v64\r\n-c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 56c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 56c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\r\n-s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-plus\" unicode=\"&#xf234;\" horiz-adv-x=\"640\" \r\n-d=\"M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-64v-64c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v64h-64c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h64v64c0 8.7998 7.2002 16 16 16h32\r\n-c8.7998 0 16 -7.2002 16 -16v-64h64zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352\r\n-c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-times\" unicode=\"&#xf235;\" horiz-adv-x=\"640\" \r\n-d=\"M589.6 208l45.6006 -45.5996c6.2998 -6.30078 6.2998 -16.5 0 -22.8008l-22.7998 -22.7998c-6.30078 -6.2998 -16.5 -6.2998 -22.8008 0l-45.5996 45.6006l-45.5996 -45.6006c-6.30078 -6.2998 -16.5 -6.2998 -22.8008 0l-22.7998 22.7998\r\n-c-6.2998 6.30078 -6.2998 16.5 0 22.8008l45.6006 45.5996l-45.6006 45.5996c-6.2998 6.30078 -6.2998 16.5 0 22.8008l22.7998 22.7998c6.30078 6.2998 16.5 6.2998 22.8008 0l45.5996 -45.6006l45.5996 45.6006c6.30078 6.2998 16.5 6.2998 22.8008 0l22.7998 -22.7998\r\n-c6.2998 -6.30078 6.2998 -16.5 0 -22.8008zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352\r\n-c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bed\" unicode=\"&#xf236;\" horiz-adv-x=\"640\" \r\n-d=\"M176 192c-44.1104 0 -80 35.8896 -80 80s35.8896 80 80 80s80 -35.8896 80 -80s-35.8896 -80 -80 -80zM528 320c61.8604 0 112 -50.1396 112 -112v-192c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48h-512v-48c0 -8.83984 -7.16016 -16 -16 -16\r\n-h-32c-8.83984 0 -16 7.16016 -16 16v352c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-208h224v144c0 8.83984 7.16016 16 16 16h224z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"train\" unicode=\"&#xf238;\" horiz-adv-x=\"448\" \r\n-d=\"M448 352v-256c0 -51.8154 -61.624 -96 -130.022 -96l62.9805 -49.7207c5.94727 -4.69629 2.60352 -14.2793 -4.95801 -14.2793h-304c-7.57812 0 -10.8916 9.59375 -4.95703 14.2793l62.9795 49.7207c-68.2021 0 -130.022 44.0459 -130.022 96v256c0 53.0186 64 96 128 96\r\n-h192c65 0 128 -42.9814 128 -96zM400 216v112c0 13.2549 -10.7451 24 -24 24h-304c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24h304c13.2549 0 24 10.7451 24 24zM224 152c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56s56 25.0723 56 56\r\n-s-25.0723 56 -56 56z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"subway\" unicode=\"&#xf239;\" horiz-adv-x=\"448\" \r\n-d=\"M448 352v-256c0 -51.8154 -61.624 -96 -130.022 -96l62.9805 -49.7207c5.94727 -4.69629 2.60352 -14.2793 -4.95801 -14.2793h-304c-7.57812 0 -10.8916 9.59375 -4.95703 14.2793l62.9795 49.7207c-68.2021 0 -130.022 44.0459 -130.022 96v256c0 53.0186 64 96 128 96\r\n-h192c65 0 128 -42.9814 128 -96zM200 216v112c0 13.2549 -10.7451 24 -24 24h-104c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24h104c13.2549 0 24 10.7451 24 24zM400 216v112c0 13.2549 -10.7451 24 -24 24h-104c-13.2549 0 -24 -10.7451 -24 -24\r\n-v-112c0 -13.2549 10.7451 -24 24 -24h104c13.2549 0 24 10.7451 24 24zM352 160c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48zM96 160c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48\r\n-s-21.4902 48 -48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battery-full\" unicode=\"&#xf240;\" horiz-adv-x=\"640\" \r\n-d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\r\n-c0 26.5098 21.4902 48 48 48h512zM512 256v-128h-416v128h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battery-three-quarters\" unicode=\"&#xf241;\" horiz-adv-x=\"640\" \r\n-d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\r\n-c0 26.5098 21.4902 48 48 48h512zM416 256v-128h-320v128h320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battery-half\" unicode=\"&#xf242;\" horiz-adv-x=\"640\" \r\n-d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\r\n-c0 26.5098 21.4902 48 48 48h512zM320 256v-128h-224v128h224z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battery-quarter\" unicode=\"&#xf243;\" horiz-adv-x=\"640\" \r\n-d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\r\n-c0 26.5098 21.4902 48 48 48h512zM224 256v-128h-128v128h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"battery-empty\" unicode=\"&#xf244;\" horiz-adv-x=\"640\" \r\n-d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\r\n-c0 26.5098 21.4902 48 48 48h512z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mouse-pointer\" unicode=\"&#xf245;\" horiz-adv-x=\"320\" \r\n-d=\"M302.189 118.874h-106.084l55.8301 -135.993c3.88965 -9.42773 -0.554688 -19.999 -9.44336 -23.999l-49.165 -21.4268c-9.16504 -4 -19.4434 0.571289 -23.332 9.71387l-53.0527 129.136l-86.6641 -89.1377c-11.5498 -11.877 -30.2783 -2.7207 -30.2783 12.8564v429.678\r\n-c0 16.3994 19.9209 24.3945 30.2773 12.8555l284.412 -292.542c11.4717 -11.1787 3.00684 -31.1406 -12.5 -31.1406z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"i-cursor\" unicode=\"&#xf246;\" horiz-adv-x=\"256\" \r\n-d=\"M256 395.952c0 -6.64648 -5.4043 -12.0098 -12.0498 -11.9922c-27.875 0.0712891 -83.9502 -3.20996 -83.9502 -48.1416v-111.818h36c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-36v-112c0 -44.9395 57.8887 -48.5527 83.8555 -48.2422\r\n-c6.68652 0.0800781 12.1445 -5.31055 12.1445 -11.998v-39.6445c0 -6.5957 -5.31836 -11.957 -11.9131 -12c-35.0654 -0.228516 -78.3525 0.62207 -116.087 37.8447c-38.4688 -37.9482 -83.6211 -38.3027 -116.158 -37.8936\r\n-c-6.56738 0.0820312 -11.8418 5.42969 -11.8418 11.999v39.9824c0 6.64648 5.4043 12.0098 12.0498 11.9932c27.875 -0.0722656 83.9502 3.02734 83.9502 47.959v112h-36c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h36v111.818\r\n-c0 44.9385 -57.8887 48.7344 -83.8555 48.4248c-6.68652 -0.0800781 -12.1445 5.31055 -12.1445 11.998v39.6445c0 6.5957 5.31836 11.957 11.9131 12c35.0654 0.228516 78.3525 -0.62207 116.087 -37.8447c38.4688 37.9482 83.6211 38.3027 116.158 37.8926\r\n-c6.56738 -0.0820312 11.8418 -5.42969 11.8418 -11.999v-39.9824z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"object-group\" unicode=\"&#xf247;\" \r\n-d=\"M480 320v-288h20c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v20h-384v-20c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h20v320h-20\r\n-c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-20h384v20c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-20v-32zM96 172c0 -6.62695 5.37305 -12 12 -12h168\r\n-c6.62695 0 12 5.37305 12 12v136c0 6.62695 -5.37305 12 -12 12h-168c-6.62695 0 -12 -5.37305 -12 -12v-136zM416 76v136c0 6.62695 -5.37305 12 -12 12h-84v-72c0 -13.2549 -10.7451 -24 -24 -24h-72v-52c0 -6.62695 5.37305 -12 12 -12h168c6.62695 0 12 5.37305 12 12z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"object-ungroup\" unicode=\"&#xf248;\" horiz-adv-x=\"576\" \r\n-d=\"M64 128v-26c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h26v192h-26c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h52c3.31152 0 6 -2.68848 6 -6v-26h288v26c0 3.31152 2.68848 6 6 6h52\r\n-c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-26v-192h26c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v26h-288zM544 192v-160h26c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-52\r\n-c-3.31152 0 -6 2.68848 -6 6v26h-288v-26c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h26v72h136v-8c0 -13.2549 10.7451 -24 24 -24h64c13.2549 0 24 10.7451 24 24v64c0 13.2549 -10.7451 24 -24 24h-8v72h104v26\r\n-c0 3.31152 2.68848 6 6 6h52c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-26v-32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sticky-note\" unicode=\"&#xf249;\" horiz-adv-x=\"448\" \r\n-d=\"M312 128c-13.2002 0 -24 -10.7998 -24 -24v-136h-264c-13.2998 0 -24 10.7002 -24 24v400c0 13.2998 10.7002 24 24 24h400c13.2998 0 24 -10.7002 24 -24v-264h-136zM441 73l-98 -98c-4.5 -4.5 -10.5996 -7 -17 -7h-6v128h128v-6.09961\r\n-c0 -6.30078 -2.5 -12.4004 -7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clone\" unicode=\"&#xf24d;\" \r\n-d=\"M464 448c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h288zM176 32h208v-48c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v288\r\n-c0 26.5098 21.4902 48 48 48h48v-208c0 -44.1123 35.8877 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"balance-scale\" unicode=\"&#xf24e;\" horiz-adv-x=\"640\" \r\n-d=\"M256 112c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312zM128 272l-72 -144h144zM639.98 112\r\n-c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 128h144l-72 144zM528 0c8.83984 0 16 -7.16016 16 -16v-32\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v294.75c-23.5195 10.29 -41.1602 31.4902 -46.3896 57.25h-129.61c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h144.36\r\n-c14.5996 19.3203 37.5498 32 63.6396 32s49.04 -12.6797 63.6396 -32h144.36c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-129.61c-5.22949 -25.7695 -22.8799 -46.96 -46.3896 -57.25v-294.75h176z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hourglass-start\" unicode=\"&#xf251;\" horiz-adv-x=\"384\" \r\n-d=\"M360 448c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336\r\n-c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336zM296 0c0 77.4834 -46.2139 144 -104 144\r\n-c-57.7959 0 -104 -66.542 -104 -144h208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hourglass-half\" unicode=\"&#xf252;\" horiz-adv-x=\"384\" \r\n-d=\"M360 448c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336\r\n-c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336zM284.922 64\r\n-c-17.0596 46.8037 -52.1006 80 -92.9219 80c-40.8242 0 -75.8613 -33.2031 -92.9199 -80h185.842zM284.941 320c7.07129 19.4131 11.0586 41.1953 11.0586 64h-208c0 -22.748 3.98828 -44.5479 11.0781 -64h185.863z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hourglass-end\" unicode=\"&#xf253;\" horiz-adv-x=\"384\" \r\n-d=\"M360 384c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24\r\n-c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24zM192 240c57.4902 0 104 66.0547 104 144\r\n-h-208c0 -77.4824 46.2129 -144 104 -144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hourglass\" unicode=\"&#xf254;\" horiz-adv-x=\"384\" \r\n-d=\"M360 384c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24\r\n-c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-rock\" unicode=\"&#xf255;\" \r\n-d=\"M464.8 368c26.2998 -0.400391 47.2002 -22.5 47.2002 -48.7998v-133.5c0 -12.7998 -2.5 -25.5 -7.5 -37.2998l-49 -116.301c-4.90039 -11.7998 -7.5 -24.5 -7.5 -37.2998v-2.89941c0 -13.3008 -10.7002 -24 -24 -24h-240c-13.2998 0 -24 10.6992 -24 24v6.69922\r\n-c0 13.7002 -5.90039 26.8008 -16.0996 35.9004l-111.7 99.2998c-20.5 18.2998 -32.2002 44.4004 -32.2002 71.7998v66.4004c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-48.1006l8 -7.09961v136\r\n-c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-31.2002h8v48c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-47.2002h8v32c0 26.7998 21.9004 48.4004 48.7998 48\r\n-c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-31.2002h8c0 26.7998 21.9004 48.4004 48.7998 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-paper\" unicode=\"&#xf256;\" horiz-adv-x=\"448\" \r\n-d=\"M408.781 319.993c21.7305 -0.416016 39.2188 -18.1621 39.2178 -39.9932v-150.359c0 -12.2998 -2.28711 -32.001 -5.10449 -43.9746l-26.5078 -112.66c-5.10156 -21.6816 -24.4502 -37.0059 -46.7236 -37.0059h-197.59c-13.4922 0 -30.8838 8.85645 -38.8193 19.7676\r\n-l-125.601 172.705c-12.9932 17.8672 -9.04297 42.8838 8.82129 55.877c17.8682 12.9941 42.8848 9.04297 55.877 -8.82227l31.6484 -43.5195v235.992c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-175.21h8v216\r\n-c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-215.21h8v177c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-176.21h8v87.21\r\n-c0 22.4297 18.3564 41.2119 40.7812 40.7832z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-scissors\" unicode=\"&#xf257;\" \r\n-d=\"M216 8c0 22.0918 17.9092 40 40 40v8h-32c-22.0908 0 -40 17.9082 -40 40s17.9092 40 40 40h32v8h-208c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48h208v13.5723l-177.551 69.7393c-24.6738 9.69434 -36.8184 37.5557 -27.125 62.2285\r\n-c9.69238 24.6738 37.5537 36.8174 62.2275 27.124l190.342 -74.7646l24.8721 31.0898c12.3066 15.3809 33.9785 19.5146 51.0811 9.74121l112 -64c11.125 -6.3584 20.1533 -21.917 20.1533 -34.7305v-240c0 -18.5615 -12.7695 -34.6855 -30.8379 -38.9365l-136 -32\r\n-c-2.49414 -0.586914 -6.59668 -1.06348 -9.1582 -1.06348h-0.00390625h-80c-22.0908 0 -40 17.9082 -40 40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-lizard\" unicode=\"&#xf258;\" horiz-adv-x=\"576\" \r\n-d=\"M384 -32v61.4609c0 7.28906 -4.99707 16.3711 -11.1543 20.2734l-111.748 70.8105c-6.49316 4.11523 -18.0029 7.45508 -25.6904 7.45508h-0.000976562h-147.406c-13.2549 0 -24 10.7451 -24 24v8c0 35.3457 28.6543 64 64 64h123.648\r\n-c11.7754 0 25.0088 8.82227 29.5371 19.6924l21.4102 51.3848c4.94141 11.8555 -3.77051 24.9229 -16.6143 24.9229h-229.981c-30.9277 0 -56 25.0723 -56 56v16c0 13.2549 10.7451 24 24 24h333.544c14.6035 0 32.7852 -10.0205 40.583 -22.3682l163.04 -258.146\r\n-c8.1875 -12.9639 14.833 -35.9297 14.833 -51.2627v-0.000976562v-116.222h-192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-spock\" unicode=\"&#xf259;\" \r\n-d=\"M481.3 350.9c21.4004 -5.10059 34.7002 -26.7002 29.7002 -48.2002l-36.2998 -152.5c-1.7002 -7.2002 -2.60059 -14.7002 -2.60059 -22.2002v-42c0 -9.2998 -1.39941 -18.4004 -4 -27.2998l-26.1992 -88.2998c-6 -20.4004 -24.7002 -34.4004 -46 -34.4004h-216.7\r\n-c-12.2002 0 -24 4.59961 -32.9004 13l-133.7 125.9c-16.0996 15.0996 -16.7998 40.3994 -1.69922 56.5c15.0996 16.0996 40.3994 16.7998 56.5 1.69922l60.5996 -57v79.4004l-39 171.6c-4.90039 21.6006 8.59961 43 30.0996 47.9004\r\n-c21.6006 4.90039 43 -8.59961 47.9004 -30.0996l34.7998 -152.801h9.7998l-47.5996 207c-5 21.5 8.5 43 30 47.9004c21.5996 4.90039 43 -8.5 48 -30.0996l51.7002 -224.9h15.0996l48.4004 193.7c5.39941 21.3994 27.0996 34.5 48.5 29.0996\r\n-c21.3994 -5.39941 34.5 -27.0996 29.0996 -48.5l-43.5996 -174.3h11.0996l30.7998 129.3c5.10059 21.4004 26.7002 34.7002 48.2002 29.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-pointer\" unicode=\"&#xf25a;\" horiz-adv-x=\"448\" \r\n-d=\"M448 208v-96c0 -3.08398 -0.356445 -6.15918 -1.06348 -9.16211l-32 -136c-4.25098 -18.0684 -20.375 -30.8379 -38.9365 -30.8379h-208c-11.2432 0 -25.7363 7.37988 -32.3496 16.4727l-127.997 176c-12.9932 17.8662 -9.04297 42.8838 8.82129 55.876\r\n-c17.8672 12.9941 42.8848 9.04297 55.877 -8.82227l31.6484 -43.5186v275.992c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-200h8v40c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-40h8v24c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-24h8\r\n-c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40zM192 128h-8v-96h8v96zM280 128h-8v-96h8v96zM368 128h-8v-96h8v96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-peace\" unicode=\"&#xf25b;\" horiz-adv-x=\"448\" \r\n-d=\"M408 232c22.0918 0 40 -17.9092 40 -40v-80v-0.00488281c0 -2.56152 -0.476562 -6.66406 -1.06348 -9.15723l-32 -136c-4.25098 -18.0684 -20.375 -30.8379 -38.9365 -30.8379h-240h-0.000976562c-12.8125 0 -28.3711 9.0293 -34.7275 20.1543l-64 112\r\n-c-9.77441 17.1025 -5.64062 38.7744 9.74023 51.0811l31.0898 24.8721l-74.7646 190.342c-9.69336 24.6738 2.4502 52.5342 27.124 62.2266c24.6729 9.69434 52.5332 -2.4502 62.2275 -27.125l69.7393 -177.551h13.5723v208c0 26.5098 21.4902 48 48 48s48 -21.4902 48 -48\r\n-v-208h8v32c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-32h8c0 22.0908 17.9082 40 40 40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trademark\" unicode=\"&#xf25c;\" horiz-adv-x=\"640\" \r\n-d=\"M260.6 352c6.60059 0 12 -5.40039 11.9004 -12v-43.0996c0 -6.60059 -5.40039 -12 -12 -12h-85.0996v-240.9c0 -6.59961 -5.40039 -12 -12 -12h-54.3008c-6.59961 0 -12 5.40039 -12 12v240.9h-85.0996c-6.59961 0 -12 5.39941 -12 12v43.0996\r\n-c0 6.59961 5.40039 12 12 12h248.6zM640 45c0.5 -7 -5 -13 -12 -13h-53.9004c-6.2998 0 -11.5996 4.90039 -12 11.2002l-9.09961 132.899c-1.7998 24.2002 0 53.7002 0 53.7002h-0.900391s-10.6992 -33.5996 -17.8994 -53.7002l-30.7002 -84.6992\r\n-c-1.7002 -4.7002 -6.2002 -7.90039 -11.2998 -7.90039h-50.2998c-5.10059 0 -9.60059 3.2002 -11.3008 7.90039l-30.6992 84.6992c-7.2002 20.1006 -17.9004 53.7002 -17.9004 53.7002h-0.900391s1.80078 -29.5 0 -53.7002l-9.09961 -132.899\r\n-c-0.5 -6.2998 -5.7002 -11.2002 -12 -11.2002h-54.5c-7.09961 0 -12.5996 6 -12 13l24.4004 296c0.599609 6.2002 5.7998 11 12 11h65.3994c5.10059 0 9.60059 -3.2998 11.2998 -8.09961l43.8008 -127.101c7.19922 -20.5996 16.0996 -52.7998 16.0996 -52.7998h0.900391\r\n-s8.89941 32.2002 16.0996 52.7998l43.7998 127.101c1.60059 4.7998 6.2002 8.09961 11.2998 8.09961h65.4004c6.2998 0 11.5 -4.7998 12 -11z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xf25d;\" \r\n-d=\"M285.363 240.525c0 -18.6006 -9.83105 -28.4316 -28.4316 -28.4316h-29.876v56.1406h23.3779c28.668 0 34.9297 -8.77344 34.9297 -27.709zM504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248z\r\n-M363.411 87.5859c-46.7295 84.8252 -43.2988 78.6357 -44.7021 80.9805c23.4316 15.1719 37.9453 42.9785 37.9453 74.4854c0 54.2441 -31.5 89.252 -105.498 89.252h-70.667c-13.2549 0 -24 -10.7451 -24 -24v-232.304c0 -13.2549 10.7451 -24 24 -24h22.5664\r\n-c13.2549 0 24 10.7451 24 24v71.6631h25.5566l44.1289 -82.9375c3.73828 -7.02441 13.2305 -12.7266 21.1875 -12.7266h24.4639c18.2617 0.000976562 29.8291 19.5908 21.0186 35.5869z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tv\" unicode=\"&#xf26c;\" horiz-adv-x=\"640\" \r\n-d=\"M592 448c26.4961 0 48 -21.5039 48 -48v-320c0 -26.4961 -21.5039 -48 -48 -48h-240v-32h176c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h176v32h-240\r\n-c-26.4961 0 -48 21.5039 -48 48v320c0 26.4961 21.5039 48 48 48h544zM576 96v288h-512v-288h512z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-plus\" unicode=\"&#xf271;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\r\n-c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM328 116c0 6.59961 -5.40039 12 -12 12h-60v60c0 6.59961 -5.40039 12 -12 12h-40\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-60h-60c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h60v-60c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v60h60c6.59961 0 12 5.40039 12 12v40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-minus\" unicode=\"&#xf272;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\r\n-c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM316 64c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-184\r\n-c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h184z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-times\" unicode=\"&#xf273;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\r\n-c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM269.3 96l48.1006 48.0996c4.69922 4.7002 4.69922 12.3008 0 17l-28.3008 28.3008\r\n-c-4.69922 4.69922 -12.2998 4.69922 -17 0l-48.0996 -48.1006l-48.0996 48.1006c-4.7002 4.69922 -12.3008 4.69922 -17 0l-28.3008 -28.3008c-4.69922 -4.69922 -4.69922 -12.2998 0 -17l48.1006 -48.0996l-48.1006 -48.0996c-4.69922 -4.7002 -4.69922 -12.3008 0 -17\r\n-l28.3008 -28.3008c4.69922 -4.69922 12.2998 -4.69922 17 0l48.0996 48.1006l48.0996 -48.1006c4.7002 -4.69922 12.3008 -4.69922 17 0l28.3008 28.3008c4.69922 4.69922 4.69922 12.2998 0 17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-check\" unicode=\"&#xf274;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-424c-6.62695 0 -12 5.37305 -12 12v36c0 26.5098 21.4902 48 48 48h48v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h128v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h48c26.5098 0 48 -21.4902 48 -48v-36\r\n-c0 -6.62695 -5.37305 -12 -12 -12zM12 256h424c6.62695 0 12 -5.37305 12 -12v-260c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v260c0 6.62695 5.37305 12 12 12zM345.296 160.053l-28.1689 28.3984\r\n-c-4.66699 4.70508 -12.2646 4.73535 -16.9697 0.0673828l-106.037 -105.184l-45.9805 46.3516c-4.66699 4.70508 -12.2656 4.73633 -16.9707 0.0683594l-28.3965 -28.1699c-4.70508 -4.66699 -4.73633 -12.2646 -0.0683594 -16.9697l82.6006 -83.2695\r\n-c4.66699 -4.70508 12.2656 -4.73535 16.9707 -0.0673828l142.952 141.805c4.70508 4.66699 4.73633 12.2646 0.0683594 16.9697z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"industry\" unicode=\"&#xf275;\" \r\n-d=\"M475.115 284.219c15.9541 10.1514 36.8848 -1.33105 36.8848 -20.248v-271.971c0 -13.2549 -10.7451 -24 -24 -24h-464c-13.2549 0 -24 10.7451 -24 24v400c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-196.309l139.115 88.5273\r\n-c15.9541 10.1514 36.8848 -1.33203 36.8848 -20.248v-68.2793z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-pin\" unicode=\"&#xf276;\" horiz-adv-x=\"288\" \r\n-d=\"M112 131.06c10.3896 -1.91992 21.0596 -3.05957 32 -3.05957s21.6104 1.13965 32 3.05957v-156.689l-22.0098 -33.0205c-4.75 -7.11914 -15.2207 -7.11914 -19.9707 0l-22.0195 33.0205v156.689zM144 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144\r\n-s-144 64.4697 -144 144s64.4697 144 144 144zM144 372c6.62012 0 12 5.37988 12 12s-5.37988 12 -12 12c-50.7197 0 -92 -41.2695 -92 -92c0 -6.62012 5.37988 -12 12 -12s12 5.37988 12 12c0 37.5 30.5 68 68 68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-signs\" unicode=\"&#xf277;\" \r\n-d=\"M507.31 363.31c6.25 -6.25 6.25 -16.3691 0 -22.6299l-43.3096 -43.3096c-6.00977 -6 -14.1396 -9.37012 -22.6299 -9.37012h-385.37c-13.25 0 -24 10.75 -24 24v80c0 13.25 10.75 24 24 24h168v16c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-16\r\n-h153.37c8.49023 0 16.6299 -3.37012 22.6299 -9.37012zM224 -48v112h64v-112c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16zM456 224c13.25 0 24 -10.75 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-385.37\r\n-c-8.49023 0 -16.6299 3.37012 -22.6299 9.37012l-43.3096 43.3096c-6.25 6.25 -6.25 16.3799 0 22.6299l43.3096 43.3203c6.00977 6 14.1396 9.37012 22.6299 9.37012h153.37v32h64v-32h168z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map\" unicode=\"&#xf279;\" horiz-adv-x=\"576\" \r\n-d=\"M0 330.34c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l139.88 55.9502v-384l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v346.32zM192 32v384l192 -64v-384zM554.06 414.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-346.32\r\n-c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-alt\" unicode=\"&#xf27a;\" \r\n-d=\"M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.7002c-7.89941 -5.7998 -19.0996 -0.0996094 -19.0996 9.7002v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pause-circle\" unicode=\"&#xf28b;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM240 112v160c0 8.7998 -7.2002 16 -16 16h-48c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16zM352 112v160\r\n-c0 8.7998 -7.2002 16 -16 16h-48c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stop-circle\" unicode=\"&#xf28d;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM352 112v160c0 8.7998 -7.2002 16 -16 16h-160c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h160c8.7998 0 16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shopping-bag\" unicode=\"&#xf290;\" horiz-adv-x=\"448\" \r\n-d=\"M352 288h96v-272c0 -44.1826 -35.8174 -80 -80 -80h-288c-44.1826 0 -80 35.8174 -80 80v272h96v32c0 70.5801 57.4199 128 128 128c70.5791 0 128 -57.4199 128 -128v-32zM160 320v-32h128v32c0 35.29 -28.71 64 -64 64s-64 -28.71 -64 -64zM320 200\r\n-c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM128 200c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shopping-basket\" unicode=\"&#xf291;\" horiz-adv-x=\"576\" \r\n-d=\"M576 232v-16c0 -13.2549 -10.7451 -24 -24 -24h-8l-26.1133 -182.788c-3.37793 -23.6465 -23.6299 -41.2119 -47.5166 -41.2119h-364.74c-23.8867 0 -44.1387 17.5654 -47.5176 41.2119l-26.1123 182.788h-8c-13.2549 0 -24 10.7451 -24 24v16\r\n-c0 13.2549 10.7451 24 24 24h67.3408l106.78 146.821c10.3945 14.292 30.4072 17.4531 44.7012 7.05762c14.293 -10.3945 17.4531 -30.4082 7.05762 -44.7012l-79.4033 -109.178h235.047l-79.4033 109.179c-10.3955 14.292 -7.23438 34.3066 7.05859 44.7012\r\n-c14.291 10.3955 34.3066 7.23535 44.7012 -7.05762l106.779 -146.822h67.3408c13.2549 0 24 -10.7451 24 -24zM312 56v112c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24zM424 56v112\r\n-c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24zM200 56v112c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hashtag\" unicode=\"&#xf292;\" horiz-adv-x=\"448\" \r\n-d=\"M440.667 265.891c-0.974609 -5.45898 -6.2666 -9.89062 -11.8135 -9.89062h-79.0957l-22.8564 -128h74.8096c7.4707 0 13.126 -6.75391 11.8135 -14.1094l-7.14355 -40c-0.974609 -5.45898 -6.2666 -9.89062 -11.8125 -9.89062h-79.0967l-15.377 -86.1094\r\n-c-0.974609 -5.45898 -6.2666 -9.89062 -11.8125 -9.89062h-40.6318c-7.47266 0 -13.127 6.75391 -11.8135 14.1094l14.623 81.8906h-98.6338l-15.3779 -86.1094c-0.974609 -5.45898 -6.26758 -9.89062 -11.8135 -9.89062h-40.6318\r\n-c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l14.623 81.8906h-74.8105c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l7.14258 40c0.974609 5.45898 6.2666 9.89062 11.8135 9.89062h79.0957l22.8564 128h-74.8096c-7.4707 0 -13.126 6.75391 -11.8135 14.1094l7.14355 40\r\n-c0.974609 5.45898 6.2666 9.89062 11.8125 9.89062h79.0967l15.377 86.1094c0.974609 5.45898 6.2666 9.89062 11.8125 9.89062h40.6318c7.47266 0 13.127 -6.75391 11.8135 -14.1094l-14.623 -81.8906h98.6348l15.377 86.1094\r\n-c0.974609 5.45898 6.26758 9.89062 11.8135 9.89062h40.6318c7.4707 0 13.126 -6.75391 11.8125 -14.1094l-14.623 -81.8906h74.8105c7.4707 0 13.126 -6.75391 11.8125 -14.1094zM261.889 128l22.8574 128h-98.6338l-22.8574 -128h98.6338z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"percent\" unicode=\"&#xf295;\" horiz-adv-x=\"448\" \r\n-d=\"M112 224c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM112 384c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48s48 21.5 48 48s-21.5 48 -48 48zM336 160c61.9004 0 112 -50.0996 112 -112\r\n-s-50.0996 -112 -112 -112s-112 50.0996 -112 112s50.0996 112 112 112zM336 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM392.3 447.8l31.6006 0.100586c19.3994 0.0996094 30.8994 -21.8008 19.6992 -37.8008l-366.199 -463.699\r\n-c-3.94629 -5.62793 -12.7275 -10.1973 -19.6006 -10.2002l-33.3994 -0.100586c-19.5 0 -30.9004 21.9004 -19.7002 37.8008l368 463.699c4.5 6.40039 11.7998 10.2002 19.5996 10.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"universal-access\" unicode=\"&#xf29a;\" \r\n-d=\"M256 400c-114.971 0 -208 -93.0469 -208 -208c0 -114.971 93.0469 -208 208 -208c114.971 0 208 93.0469 208 208c0 114.971 -93.0469 208 -208 208zM256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248z\r\n-M256 384c106.039 0 192 -85.9609 192 -192s-85.9609 -192 -192 -192s-192 85.9609 -192 192s85.9609 192 192 192zM256 340c-19.8818 0 -36 -16.1182 -36 -36s16.1182 -36 36 -36s36 16.1182 36 36s-16.1182 36 -36 36zM373.741 241.977\r\n-c8.59961 2.03027 13.9258 10.6484 11.8965 19.249c-2.03027 8.60156 -10.6494 13.9258 -19.249 11.8955c-96.4912 -22.7832 -124.089 -22.8291 -220.774 0c-8.60254 2.03125 -17.2178 -3.29395 -19.249 -11.8955c-2.03125 -8.60059 3.29492 -17.2178 11.8945 -19.249\r\n-c28.7129 -6.7793 55.5127 -12.749 82.1416 -15.8066c-0.852539 -101.08 -12.3242 -123.08 -25.0371 -155.621c-3.61719 -9.25879 0.957031 -19.6982 10.2168 -23.3145c9.26465 -3.61914 19.7002 0.961914 23.3154 10.2168c8.72754 22.3408 17.0947 40.6982 22.2617 78.5488\r\n-h9.68555c5.1748 -37.9131 13.5566 -56.2412 22.2617 -78.5488c3.61621 -9.25977 14.0547 -13.834 23.3154 -10.2168c9.25977 3.61621 13.834 14.0547 10.2168 23.3145c-12.7305 32.5693 -24.1855 54.5986 -25.0371 155.621c26.6299 3.05859 53.4287 9.02832 82.1406 15.8066\r\n-z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blind\" unicode=\"&#xf29d;\" horiz-adv-x=\"384\" \r\n-d=\"M380.15 -62.8369c-1.05664 -0.640625 -2.91602 -1.16113 -4.15137 -1.16113c-2.48438 0 -5.54785 1.72363 -6.83789 3.84766l-125.33 206.428c4.25684 1.68848 10.0615 5.9375 12.958 9.48438l126.048 -207.607c0.641602 -1.05664 1.16211 -2.91699 1.16211 -4.15234\r\n-c0 -2.48535 -1.72461 -5.5498 -3.84863 -6.83887zM142.803 133.662l62.8145 -153.537c6.69141 -16.3584 -1.14453 -35.042 -17.501 -41.7344c-16.3564 -6.69043 -35.04 1.1416 -41.7334 17.501l-36.1201 88.2852zM96 360c-24.3008 0 -44 19.6992 -44 44s19.6992 44 44 44\r\n-s44 -19.6992 44 -44s-19.6992 -44 -44 -44zM250.837 190.872c8.19336 -10.374 6.44434 -25.4922 -3.96582 -33.708c-9.33984 -7.37402 -24.5635 -7.61914 -33.708 3.96484l-102.3 129.217c-0.663086 0.836914 -2.06738 1.51562 -3.13477 1.51562\r\n-c-2.20801 0 -4 -1.79297 -4 -4.00098c0 -0.769531 0.387695 -1.88281 0.865234 -2.48535l31.4062 -39.8164v-107.196l-65.9258 -181.288c-6.04102 -16.6143 -24.4072 -25.1768 -41.0088 -19.1387c-16.6104 6.04004 -25.1787 24.4004 -19.1387 41.0098l54.0732 148.693\r\n-v140.698l-16 -20.5713v-79.7656c0 -13.0996 -10.4951 -23.748 -23.5361 -23.9961c-13.4531 -0.254883 -24.4639 11.0811 -24.4639 24.5361v95.6943l61.0557 78.5c4.72754 6.0791 11.7979 9.23633 18.9443 9.23926v0.0263672h32v-0.015625\r\n-c7.08691 -0.00390625 14.1035 -3.11719 18.8369 -9.1123z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"audio-description\" unicode=\"&#xf29e;\" \r\n-d=\"M162.925 209.291l8.82227 -30.6553h-25.6064l9.04102 30.6523c1.27734 4.4209 2.65137 9.99414 3.87207 15.2451c1.2207 -5.25098 2.59473 -10.8232 3.87109 -15.2422zM329.399 241.39c28.6846 0 46.1748 -16.7656 46.1748 -49.0049\r\n-c0 -32.0977 -16.3994 -49.7754 -46.1748 -49.7754h-14.5234v98.7803h14.5234zM512 336v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48zM245.459 111.861l-57.0967 168\r\n-c-1.52734 4.49219 -6.61719 8.13867 -11.3623 8.13867h-35.8936c-4.74512 0 -9.83594 -3.64648 -11.3623 -8.13867l-57.0967 -168c-2.64453 -7.7832 3.1416 -15.8613 11.3613 -15.8613h29.1328c4.99219 0 10.1602 3.89453 11.5352 8.69336l8.57422 29.9053h51.3672\r\n-l8.79297 -29.9766c1.39648 -4.75977 6.55469 -8.62207 11.5146 -8.62207v0h29.1719c8.2207 0 14.0059 8.07812 11.3613 15.8613zM430.16 192.386c0 58.9775 -37.9189 95.6143 -98.96 95.6143h-57.3662c-6.62695 0 -12 -5.37305 -12 -12v-168c0 -6.62695 5.37305 -12 12 -12\r\n-h57.3662c61.041 0 98.96 36.9326 98.96 96.3857z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone-volume\" unicode=\"&#xf2a0;\" horiz-adv-x=\"384\" \r\n-d=\"M97.333 -58.9658c-129.874 129.874 -129.681 340.252 0 469.933c5.69824 5.69824 14.5273 6.63184 21.2627 2.42188l64.8174 -40.5127c4.45898 -2.78711 8.07812 -9.31641 8.07812 -14.5752c0 -1.82715 -0.550781 -4.68652 -1.22949 -6.38281l-32.4082 -81.0205\r\n-c-2.38477 -5.96484 -9.53418 -10.8047 -15.958 -10.8047c-0.473633 0 -1.23926 0.0380859 -1.71094 0.0849609l-55.8096 5.58008c-21.0508 -58.2607 -20.6123 -122.471 0 -179.515l55.8105 5.58105c0.47168 0.046875 1.2373 0.0849609 1.71094 0.0849609\r\n-c6.42383 0 13.5732 -4.83984 15.959 -10.8037l32.4072 -81.0225c0.678711 -1.69629 1.22949 -4.55566 1.22949 -6.38281c0 -5.25879 -3.61914 -11.7881 -8.07812 -14.5752l-64.8174 -40.5127c-2.30762 -1.44238 -6.38867 -2.6123 -9.10938 -2.6123\r\n-c-3.92969 0 -9.375 2.25488 -12.1543 5.03418zM247.126 352.527c11.832 -20.0469 11.832 -45.0088 0 -65.0557c-3.9502 -6.69238 -13.1084 -7.95898 -18.7178 -2.58105l-5.97559 5.72656c-3.91016 3.74805 -4.79297 9.62207 -2.26074 14.4102\r\n-c2.04883 3.87793 3.71094 10.5859 3.71094 14.9717c0 4.38672 -1.66211 11.0947 -3.71094 14.9727c-2.5332 4.78809 -1.64941 10.6621 2.26074 14.4102l5.97559 5.72656c5.60938 5.37793 14.7676 4.11133 18.7178 -2.58105zM338.913 443.714\r\n-c60.1396 -71.6035 60.0918 -175.882 0 -247.428c-4.47363 -5.32715 -12.5303 -5.74609 -17.5518 -0.933594l-5.79785 5.55762c-4.56055 4.37109 -4.97754 11.5293 -0.930664 16.3789c49.6875 59.5381 49.6465 145.933 0 205.422\r\n-c-4.04688 4.84961 -3.63086 12.0078 0.930664 16.3789l5.79785 5.55762c5.02148 4.8125 13.0781 4.39355 17.5518 -0.933594zM292.941 398.773c36.0498 -46.3223 36.1074 -111.149 0 -157.547c-4.39062 -5.64062 -12.6973 -6.25098 -17.8564 -1.30371l-5.81836 5.5791\r\n-c-4.39941 4.21875 -4.99805 11.0947 -1.28418 15.9307c26.5352 34.5645 26.5332 82.5723 0 117.135c-3.71387 4.83594 -3.11523 11.7109 1.28418 15.9307l5.81836 5.5791c5.15918 4.94727 13.4658 4.33691 17.8564 -1.30371z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"braille\" unicode=\"&#xf2a1;\" horiz-adv-x=\"640\" \r\n-d=\"M128 192c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64s64 -28.6543 64 -64zM64 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM64 416c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64\r\n-s-64 28.6543 -64 64s28.6543 64 64 64zM224 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM224 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM224 416\r\n-c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM448 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM448 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32\r\n-s-32 14.3271 -32 32s14.3271 32 32 32zM448 416c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM608 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM608 64\r\n-c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM608 384c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"assistive-listening-systems\" unicode=\"&#xf2a2;\" \r\n-d=\"M216 188c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 44.1123 35.8877 80 80 80s80 -35.8877 80 -80c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 13.2344 -10.7666 24 -24 24s-24 -10.7656 -24 -24zM240 364c97.0469 0 176 -78.9531 176 -176\r\n-c0 -95.9863 -71.4053 -109.798 -72 -144.226c-0.124023 -59.4463 -48.5254 -107.774 -108 -107.774c-15.4639 0 -28 12.5361 -28 28s12.5361 28 28 28c28.6729 0 52 23.3271 52 52l0.00292969 0.37793c0.988281 73.3115 71.9971 68.458 71.9971 143.622\r\n-c0 66.168 -53.832 120 -120 120s-120 -53.832 -120 -120c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 97.0469 78.9531 176 176 176zM160 128c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM32 0\r\n-c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM512 187.993c0 -15.4639 -12.5371 -28 -28.001 -28s-28 12.5361 -28 28c0 1.12695 -0.00683594 2.24512 -0.0332031 3.36328l-0.00292969 0.1875\r\n-c-1.4668 91.4404 -60.1709 172.599 -146.077 201.953c-14.6318 5.00098 -22.4414 20.917 -17.4414 35.5498c5.00098 14.6328 20.917 22.4404 35.5498 17.4424c108.163 -36.959 182.082 -139.015 183.961 -253.965c0.0332031 -1.50684 0.0449219 -3.01367 0.0449219 -4.53125\r\n-zM152.971 8.9707l-33.9404 -33.9404l-80 80l33.9404 33.9404z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"american-sign-language-interpreting\" unicode=\"&#xf2a3;\" horiz-adv-x=\"640\" \r\n-d=\"M290.547 258.961c-20.2949 10.1494 -44.1465 11.1992 -64.7393 3.88965c42.6064 0 71.208 -20.4746 85.5781 -50.5752c8.57617 -17.8994 -5.14746 -38.0713 -23.6172 -38.0713c18.4297 0 32.2119 -20.1357 23.6172 -38.0713\r\n-c-14.7246 -30.8457 -46.123 -50.8535 -80.2979 -50.8535c-0.556641 0 -94.4707 8.61426 -94.4707 8.61426l-66.4062 -33.3467c-9.38379 -4.69336 -19.8145 -0.378906 -23.8945 7.78125l-44.4561 88.9248c-4.16699 8.61523 -1.11133 18.8975 6.94531 23.6211l58.0723 33.0693\r\n-l41.1221 74.1953c6.38965 57.2451 34.7314 109.768 79.7432 146.727c11.3906 9.44824 28.3408 7.78125 37.5098 -3.61328c9.44629 -11.3936 7.78027 -28.0674 -3.6123 -37.5156c-12.5029 -10.5596 -23.6172 -22.5098 -32.5088 -35.5703\r\n-c21.6719 14.7285 46.6787 24.7324 74.1865 28.0674c14.7246 1.94434 28.0625 -8.33594 29.7295 -23.0654c1.94531 -14.7275 -8.33594 -28.0674 -23.0615 -29.7344c-16.1162 -1.94434 -31.1201 -7.50293 -44.1787 -15.2832c26.1143 5.71289 58.7119 3.1377 88.0791 -11.1152\r\n-c13.3359 -6.66895 18.8936 -22.5088 12.2246 -35.8486c-6.38965 -13.0596 -22.5039 -18.6162 -35.5645 -12.2256zM263.318 189.489c-6.1123 12.5049 -18.3379 20.2861 -32.2314 20.2861h-0.105469c-19.5732 0 -35.46 -15.8867 -35.46 -35.46\r\n-c0 -0.0302734 0 -0.0800781 0.000976562 -0.110352c0 -21.4277 17.8076 -35.5703 35.5645 -35.5703c13.8936 0 26.1191 7.78125 32.2314 20.2861c4.44531 9.44922 13.6133 15.0059 23.3389 15.2842c-9.72559 0.277344 -18.8936 5.83496 -23.3389 15.2842zM638.139 226.726\r\n-c4.16797 -8.61426 1.11133 -18.8965 -6.94531 -23.6201l-58.0713 -33.0693l-41.1221 -74.1963c-6.38965 -57.2451 -34.7314 -109.767 -79.7432 -146.726c-10.9316 -9.1123 -27.7988 -8.14453 -37.5098 3.6123c-9.44629 11.3945 -7.78027 28.0674 3.61328 37.5166\r\n-c12.5029 10.5586 23.6162 22.5088 32.5078 35.5703c-21.6719 -14.7295 -46.6787 -24.7324 -74.1865 -28.0674c-10.0205 -2.50586 -27.5518 5.64258 -29.7295 23.0645c-1.94531 14.7285 8.33594 28.0674 23.0615 29.7344c16.1162 1.94629 31.1201 7.50293 44.1787 15.2842\r\n-c-26.1143 -5.71289 -58.7119 -3.1377 -88.0791 11.1152c-13.3359 6.66895 -18.8936 22.5088 -12.2246 35.8477c6.38965 13.0605 22.5049 18.6191 35.5654 12.2266c20.2949 -10.1484 44.1465 -11.1982 64.7393 -3.88965c-42.6064 0 -71.208 20.4746 -85.5781 50.5762\r\n-c-8.57617 17.8984 5.14746 38.0713 23.6172 38.0713c-18.4297 0 -32.2109 20.1357 -23.6172 38.0703c14.0332 29.3965 44.0391 50.8877 81.9658 50.8545l92.8027 -8.61523l66.4062 33.3467c9.4082 4.7041 19.8281 0.354492 23.8936 -7.78027zM408.912 245.344\r\n-c-13.8936 0 -26.1191 -7.78027 -32.2314 -20.2861c-4.44531 -9.44824 -13.6133 -15.0059 -23.3389 -15.2832c9.72559 -0.27832 18.8936 -5.83594 23.3389 -15.2842c6.1123 -12.5049 18.3379 -20.2861 32.2314 -20.2861h0.105469c19.5732 0 35.46 15.8857 35.46 35.46\r\n-c0 0.0302734 0 0.0791016 -0.000976562 0.110352c0 21.4287 -17.8076 35.5693 -35.5645 35.5693z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"deaf\" unicode=\"&#xf2a4;\" \r\n-d=\"M216 188c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 44.1123 35.8877 80 80 80s80 -35.8877 80 -80c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 13.2344 -10.7666 24 -24 24s-24 -10.7656 -24 -24zM240 364c97.0469 0 176 -78.9531 176 -176\r\n-c0 -95.9863 -71.4053 -109.798 -72 -144.226c-0.124023 -59.4463 -48.5254 -107.774 -108 -107.774c-15.4639 0 -28 12.5361 -28 28s12.5361 28 28 28c28.6729 0 52 23.3271 52 52l0.00292969 0.37793c0.988281 73.3115 71.9971 68.458 71.9971 143.622\r\n-c0 66.168 -53.832 120 -120 120s-120 -53.832 -120 -120c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 97.0469 78.9531 176 176 176zM508.485 416.201c4.68652 -4.68652 4.68652 -12.2842 0 -16.9727l-87.0303 -87.0283\r\n-c-4.68652 -4.68652 -12.2842 -4.68652 -16.9697 0l-28.2852 28.2852c-4.68652 4.68652 -4.68652 12.2842 0 16.9707l87.0283 87.0293c4.6875 4.68555 12.2842 4.68555 16.9717 0zM168.97 133.255l28.2861 -28.2842c4.68652 -4.68652 4.68652 -12.2852 0 -16.9707\r\n-l-148.484 -148.485c-4.6875 -4.68555 -12.2842 -4.68555 -16.9717 0l-28.2852 28.2842c-4.68555 4.6875 -4.68555 12.2852 0 16.9707l148.485 148.485c4.68555 4.68652 12.2842 4.68652 16.9697 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sign-language\" unicode=\"&#xf2a7;\" horiz-adv-x=\"448\" \r\n-d=\"M91.4336 -35.9873c-0.306641 16.0186 13.1094 29.1289 29.1309 29.1289h62.293v5.71484h-125.864c-16.0215 0 -29.4375 13.1104 -29.1299 29.1289c0.296875 15.5234 12.9717 28.0146 28.5645 28.0146h126.43v5.71387h-153.722\r\n-c-16.0205 0 -29.4365 13.1113 -29.1299 29.1289c0.296875 15.5225 12.9727 28.0137 28.5664 28.0137h154.286v5.71387h-125.151c-16.0215 0 -29.4375 13.1104 -29.1299 29.1289c0.296875 15.5215 12.9727 28.0127 28.5654 28.0127h168.566l-31.085 22.6064\r\n-c-12.7617 9.28027 -15.583 27.1484 -6.30176 39.9121c9.28027 12.7607 27.1494 15.5811 39.9121 6.30176l123.36 -89.7148c7.79395 -5.66895 14.1201 -18.0908 14.1201 -27.7285v-141.136c0 -15.9102 -10.9463 -29.7305 -26.4326 -33.374l-80.4717 -18.9346\r\n-c-8.55176 -2.01172 -22.624 -3.64551 -31.4102 -3.64551h-107.4c-15.5928 0.000976562 -28.2686 12.4922 -28.5664 28.0137zM164.683 189.714l-36.3711 46.71c-9.5791 12.3027 -7.51172 29.9795 4.55371 39.75c12.4502 10.083 31.0371 7.55273 40.8799 -5.08789\r\n-l13.0039 -16.7002c-17.1426 -15.6484 -15.4092 -43.0244 3.16992 -56.5361l11.1875 -8.13574h-36.4238zM447.981 191.817c0.00976562 -0.311523 0.0175781 -0.81543 0.0175781 -1.12695c0 -9.24902 -5.92188 -21.3682 -13.2197 -27.0508l-61.0645 -47.5488v16.999\r\n-c0 13.4834 -6.51074 26.2686 -17.415 34.1982l-123.359 89.7139c-12.6357 9.18945 -29.1934 9.16113 -41.6904 0.904297l-52.0527 66.8486c-9.84375 12.6416 -7.74121 31.2822 5.08594 40.8809c12.4297 9.30273 30.0732 6.97559 39.6523 -5.32812l77.6758 -99.7539\r\n-l4.50879 3.51172l-94.4434 121.287c-9.84277 12.6416 -7.74121 31.2822 5.08594 40.8818c12.4307 9.30176 30.0732 6.97461 39.6533 -5.32812l94.79 -121.734l4.50879 3.51074l-76.8887 98.7451c-9.84277 12.6416 -7.74121 31.2822 5.08594 40.8809\r\n-c12.4297 9.30273 30.0732 6.97559 39.6533 -5.32715l103.562 -133.001l-1.26172 38.4141c-0.518555 15.7715 11.8457 28.9756 27.6191 29.4932c15.7705 0.517578 28.9746 -11.8477 29.4922 -27.6191z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"low-vision\" unicode=\"&#xf2a8;\" horiz-adv-x=\"576\" \r\n-d=\"M569.344 216.369c3.67383 -6.22461 6.65625 -17.1416 6.65625 -24.3691s-2.98242 -18.1455 -6.65723 -24.3701c-31.9746 -54.2607 -79.6484 -98.3232 -136.81 -126.301l0.00683594 -0.00878906l43.1201 -58.377c7.60156 -10.8594 4.95996 -25.8252 -5.90039 -33.4268\r\n-l-13.1133 -9.17773c-10.8594 -7.59863 -25.8223 -4.95801 -33.4238 5.90039l-251.836 356.544c-11.1797 -5.09375 -28.5518 -14.7539 -38.7764 -21.5635l189.979 -271.399c-9.52637 -1.00488 -25.0342 -1.82031 -34.6133 -1.82031\r\n-c-12.29 0 -32.1484 1.33984 -44.3262 2.99023l-40.6309 58.04h-0.00976562l-119.399 170.58c-8.64453 -9.25391 -21.3203 -25.3428 -28.2939 -35.9121l124.19 -177.417c-73.1172 25.4863 -134.358 76.0166 -172.858 141.349c-8.96484 15.2109 -8.76562 33.8643 0 48.7393\r\n-c0.0107422 0.0166016 0.0234375 0.0332031 0.0332031 0.0498047c33.5459 56.8984 82.7676 99.8506 136.79 126.242l-43.1309 58.3945c-7.60156 10.8604 -4.95996 25.8252 5.90039 33.4268l13.1143 9.17773c10.8584 7.59961 25.8213 4.95801 33.4229 -5.90039\r\n-l52.7705 -72.1689c26.3496 6.79004 53.9834 10.4092 82.4512 10.4092c119.81 0 224.96 -63.9492 281.344 -159.631zM390.026 102.06c21.1406 23.9658 33.9736 55.4365 33.9736 89.9404c0 75.1738 -60.8379 136 -136 136c-17.5117 0 -34.2422 -3.30566 -49.6084 -9.32324\r\n-l19.0684 -27.2363c25.9883 7.96289 54.7598 5.56836 79.5098 -7.68066h-0.0292969c-23.6504 0 -42.8203 -19.1699 -42.8203 -42.8193c0 -23.4717 18.9922 -42.8203 42.8203 -42.8203c23.6494 0 42.8193 19.1699 42.8193 42.8203v0.0292969\r\n-c18.9111 -35.3271 15.8818 -79.1123 -8.7998 -111.68z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"handshake\" unicode=\"&#xf2b5;\" horiz-adv-x=\"640\" \r\n-d=\"M434.7 384c8.5 0 16.7002 -3.40039 22.5996 -9.40039l54.6006 -54.5996v-193.5c-2.40039 2.7002 -5 5.2998 -7.90039 7.7002l-145.6 118.2l26.0996 23.8994c6.5 6 7 16.1006 1 22.6006c-5.90039 6.5 -16.0996 6.89941 -22.5996 1l-79.9004 -73.2002\r\n-c-0.0996094 -0.100586 -0.299805 -0.100586 -0.400391 -0.200195c-16.6992 -14.9004 -43.3994 -11.2002 -56.0996 2.7002c-14.2002 15.5 -14.5 40.3994 2.09961 56c0.100586 0.0996094 0.200195 0.299805 0.300781 0.399414l98.2998 90\r\n-c5.89941 5.40039 13.5996 8.40039 21.5996 8.40039h85.9004zM544 319.8h96v-255.899h-64c-17.7002 0 -32 14.2998 -32 32v223.899zM592 95.9004c8.7998 0 16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM0 64v255.8h96\r\n-v-223.8c0 -17.7002 -14.2998 -32 -32 -32h-64zM48 127.9c-8.7998 0 -16 -7.10059 -16 -16c0 -8.80078 7.2002 -16 16 -16s16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16zM483.9 109.3c13.6992 -11.2002 15.7998 -31.2998 4.59961 -45.0996l-9.5 -11.7002\r\n-c-11.0996 -13.7998 -31.2998 -15.7998 -45 -4.7002l-5.40039 4.40039l-31.3994 -38.6006c-12.9004 -15.8994 -36.4004 -18.3994 -52.2998 -5.39941l-17.9004 15.5l-0.200195 -0.200195c-22.2998 -27.4004 -62.5996 -31.5996 -90 -9.2998l-90.5 81.8994h-18.2998v223.9\r\n-l54.7002 54.5996c6 6 14.0996 9.40039 22.5996 9.40039h83.7998l-81.7998 -74.9004c-29.2002 -26.7998 -31.2998 -72.2998 -4.39941 -101.699c26.5 -28.9004 72 -31.5 101.699 -4.40039l30 27.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope-open\" unicode=\"&#xf2b6;\" \r\n-d=\"M512 -16c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v263.276c0 12.8955 8.2373 29.8193 18.3867 37.7754c24.9131 19.5293 45.501 35.3652 164.2 121.512c16.8252 12.2666 50.21 41.7832 73.4131 41.4336\r\n-c23.1982 0.353516 56.5957 -29.1719 73.4131 -41.4326c118.687 -86.1377 139.303 -101.995 164.2 -121.513c10.1494 -7.95605 18.3867 -24.8799 18.3867 -37.7754v-263.276zM446.334 180.605c-2.5625 3.72754 -7.7002 4.59473 -11.3389 1.90625\r\n-c-22.8447 -16.873 -55.4619 -40.7051 -105.582 -77.0791c-16.8252 -12.2656 -50.21 -41.7803 -73.4131 -41.4297c-23.2109 -0.34375 -56.5586 29.1436 -73.4131 41.4297c-50.1143 36.3701 -82.7344 60.2041 -105.582 77.0791\r\n-c-3.63867 2.68848 -8.77637 1.82129 -11.3389 -1.90625l-9.07227 -13.1963c-0.777344 -1.13086 -1.4082 -3.16113 -1.4082 -4.5332c0 -2.22754 1.45508 -5.11035 3.24707 -6.43359c22.8877 -16.8994 55.4541 -40.6904 105.304 -76.8682\r\n-c20.2734 -14.7812 56.5234 -47.8135 92.2637 -47.5732c35.7236 -0.242188 71.9609 32.7715 92.2627 47.5732c49.8506 36.1787 82.418 59.9697 105.304 76.8682c1.79199 1.32324 3.24707 4.20605 3.24707 6.43359c0 1.37207 -0.630859 3.40234 -1.4082 4.5332z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"address-book\" unicode=\"&#xf2b9;\" horiz-adv-x=\"448\" \r\n-d=\"M436 288h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48\r\n-h320c26.5 0 48 -21.5 48 -48v-48h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM208 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM320 83.2002v19.2002\r\n-c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\r\n-c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"address-card\" unicode=\"&#xf2bb;\" horiz-adv-x=\"576\" \r\n-d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM176 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM288 83.2002v19.2002\r\n-c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\r\n-c12.4004 0 22.4004 8.59961 22.4004 19.2002zM512 136v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM512 200v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16\r\n-c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM512 264v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-circle\" unicode=\"&#xf2bd;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 344c-48.5996 0 -88 -39.4004 -88 -88s39.4004 -88 88 -88s88 39.4004 88 88s-39.4004 88 -88 88zM248 0c58.7002 0 111.3 26.5996 146.5 68.2002\r\n-c-18.7998 35.3994 -55.5996 59.7998 -98.5 59.7998c-2.40039 0 -4.7998 -0.400391 -7.09961 -1.09961c-12.9004 -4.2002 -26.6006 -6.90039 -40.9004 -6.90039s-27.9004 2.7002 -40.9004 6.90039c-2.2998 0.699219 -4.69922 1.09961 -7.09961 1.09961\r\n-c-42.9004 0 -79.7002 -24.4004 -98.5 -59.7998c35.2002 -41.6006 87.7998 -68.2002 146.5 -68.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"id-badge\" unicode=\"&#xf2c1;\" horiz-adv-x=\"384\" \r\n-d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM144 416c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h96c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16h-96zM192 288\r\n-c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM304 51.2002v19.2002c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5\r\n-c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"id-card\" unicode=\"&#xf2c2;\" horiz-adv-x=\"576\" \r\n-d=\"M528 416c26.5 0 48 -21.5 48 -48v-16h-576v16c0 26.5 21.5 48 48 48h480zM0 16v304h576v-304c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48zM352 248v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-144\r\n-c-4.40039 0 -8 -3.59961 -8 -8zM352 184v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8zM352 120v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16\r\n-c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8zM176 256c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM67.0996 51.7998c-3.19922 -9.7998 5.2002 -19.7998 15.6006 -19.7998h186.6\r\n-c10.4004 0 18.7998 9.90039 15.6006 19.7998c-8.40039 25.7002 -32.5 44.2002 -60.9004 44.2002h-8.2002c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-8.2002c-28.4004 0 -52.5 -18.5 -60.9004 -44.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer-full\" unicode=\"&#xf2c7;\" horiz-adv-x=\"256\" \r\n-d=\"M224 352v-203.347c19.9121 -22.5635 32 -52.1943 32 -84.6533c0 -70.6963 -57.3018 -128 -128 -128c-0.298828 0 -0.610352 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1973 12.2227 61.5771 31.998 83.9863\r\n-v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96zM128 -16c44.1123 0 80 35.8877 80 80c0 34.3379 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7334 -14.4277 -31.8262 -32.0996 -31.999 -66.0801\r\n-c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199zM192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v232.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-232.583c19.124 -11.0684 32 -31.7324 32 -55.417z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer-three-quarters\" unicode=\"&#xf2c8;\" horiz-adv-x=\"256\" \r\n-d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v168.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-168.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\r\n-c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\r\n-M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\r\n-c44.1123 0 80 35.8877 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer-half\" unicode=\"&#xf2c9;\" horiz-adv-x=\"256\" \r\n-d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v104.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-104.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\r\n-c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\r\n-M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\r\n-c44.1123 0 80 35.8877 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer-quarter\" unicode=\"&#xf2ca;\" horiz-adv-x=\"256\" \r\n-d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v40.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-40.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\r\n-c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\r\n-M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\r\n-c44.1123 0 80 35.8877 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer-empty\" unicode=\"&#xf2cb;\" horiz-adv-x=\"256\" \r\n-d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64s64 -28.6543 64 -64zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969\r\n-c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347zM208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48\r\n-s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312c44.1123 0 80 35.8877 80 80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shower\" unicode=\"&#xf2cc;\" \r\n-d=\"M389.66 312.4l-158.061 -158.061c-9.36914 -9.37012 -24.5693 -9.37012 -33.9395 0l-11.3203 11.3203c-9.37012 9.37012 -9.37012 24.5703 0 33.9395l0.110352 0.110352c-34.0303 40.21 -35.1602 98.9404 -3.39062 140.38\r\n-c-11.9697 7.5498 -26.1396 11.9102 -41.2998 11.9102c-42.8799 0 -77.7598 -34.8799 -77.7598 -77.7598v-306.24h-64v306.24c0 78.1699 63.5898 141.76 141.76 141.76c36.9307 0 70.6104 -14.2002 95.8604 -37.4199c35.8994 11.5098 76.5 4.5 106.67 -21.0303\r\n-l0.110352 0.110352c9.36914 9.37012 24.5693 9.37012 33.9395 0l11.3203 -11.3203c9.37012 -9.37012 9.37012 -24.5703 0 -33.9395zM384 240c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM416 240c0 8.83691 7.16309 16 16 16\r\n-s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM512 240c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM352 208c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16z\r\n-M400 224c8.83691 0 16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16zM480 208c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 176c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16\r\n-s7.16309 16 16 16s16 -7.16309 16 -16zM352 176c0 8.83691 7.16309 16 16 16s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM448 176c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 144\r\n-c0 8.83691 7.16309 16 16 16s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM416 144c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 112c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16\r\n-s7.16309 16 16 16s16 -7.16309 16 -16zM384 112c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM352 80c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 48\r\n-c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bath\" unicode=\"&#xf2cd;\" \r\n-d=\"M488 192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-8v-32c0 -28.4297 -12.3623 -53.9688 -32 -71.5469v-32.4531c0 -13.2549 -10.7451 -24 -24 -24h-16c-13.2549 0 -24 10.7451 -24 24v8h-256v-8c0 -13.2549 -10.7451 -24 -24 -24h-16\r\n-c-13.2549 0 -24 10.7451 -24 24v32.4531c-19.6377 17.5781 -32 43.1172 -32 71.5469v32h-8c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h8v144c0 44.1123 35.8877 80 80 80c27.2119 0 51.2812 -13.667 65.7393 -34.4873\r\n-c21.8838 6.06445 46.2285 1.10449 64.1777 -15.3643c4.71289 4.1748 11.916 4.02051 16.4277 -0.491211l11.3145 -11.3145c4.68555 -4.68652 4.68555 -12.2852 0 -16.9707l-95.0303 -95.0293c-4.68652 -4.68555 -12.2852 -4.68555 -16.9707 0l-11.3145 11.3145\r\n-c-4.51172 4.51172 -4.66699 11.7148 -0.491211 16.4277c-21.5244 23.459 -23.3291 57.8281 -6.83789 83.0352c-5.68262 8.93457 -15.6641 14.8799 -27.0146 14.8799c-17.6445 0 -32 -14.3555 -32 -32v-144h408z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"podcast\" unicode=\"&#xf2ce;\" horiz-adv-x=\"448\" \r\n-d=\"M267.429 -40.5635c-5.14258 -19.0098 -24.5703 -23.4365 -43.4287 -23.4365c-18.8574 0 -38.2861 4.42676 -43.4277 23.4365c-7.64551 28.4297 -20.5723 99.665 -20.5723 132.813c0 35.1562 31.1416 43.75 64 43.75s64 -8.59375 64 -43.75\r\n-c0 -32.9492 -12.8711 -104.179 -20.5713 -132.813zM156.867 159.446c2.6748 -2.61914 2.39941 -6.98535 -0.628906 -9.18555c-9.3125 -6.76465 -16.4609 -15.3418 -21.2354 -25.3623c-1.74219 -3.65723 -6.5 -4.6582 -9.45312 -1.8877\r\n-c-28.0176 26.2891 -45.5498 63.6279 -45.5498 104.989c0 80.7852 66.8691 146.247 148.163 143.941c76.1982 -2.16113 137.938 -64.1631 139.793 -140.369c1.04199 -42.7822 -16.6846 -81.5225 -45.5107 -108.565c-2.95215 -2.76855 -7.70801 -1.7627 -9.44922 1.8916\r\n-c-4.77441 10.0195 -11.9219 18.5977 -21.2344 25.3623c-3.02832 2.20117 -3.30273 6.56738 -0.62793 9.1875c17.8018 17.4355 28.8662 41.7246 28.8662 68.5518c0 54.1934 -45.1377 98.042 -99.793 95.9258c-49.7295 -1.9248 -90.0703 -42.1572 -92.124 -91.8809\r\n-c-1.17383 -28.4258 10.0908 -54.291 28.7842 -72.5986zM224 448c123.815 0 224 -100.205 224 -224c0 -90.1865 -52.7734 -165.727 -125.739 -201.407c-4.33203 -2.11914 -9.2666 1.54297 -8.53516 6.31055c2.55566 16.6416 4.625 33.1924 5.62402 47.2295\r\n-c48.4922 31.377 80.6504 85.9355 80.6504 147.867c0 97.2031 -79.207 176.253 -176.468 175.999c-96.2393 -0.250977 -174.938 -78.6621 -175.529 -174.899c-0.376953 -61.3311 30.7871 -115.541 78.1875 -147.347c1.52832 -1.02637 2.53125 -2.67578 2.67773 -4.51172\r\n-c1.06348 -13.3936 3.02344 -28.8271 5.40625 -44.3389c0.731445 -4.7666 -4.20215 -8.42871 -8.53516 -6.31055c-73.1377 35.7607 -125.739 111.416 -125.739 201.408c0 123.815 100.204 224 224 224zM224 288c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64\r\n-s-64 28.6543 -64 64s28.6543 64 64 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-maximize\" unicode=\"&#xf2d0;\" \r\n-d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM448 256v84c0 6.59961 -5.40039 12 -12 12h-360c-6.59961 0 -12 -5.40039 -12 -12v-84h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-minimize\" unicode=\"&#xf2d1;\" \r\n-d=\"M464 96c26.5 0 48 -21.5 48 -48v-32c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v32c0 26.5 21.5 48 48 48h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-restore\" unicode=\"&#xf2d2;\" \r\n-d=\"M512 400v-288c0 -26.5 -21.5 -48 -48 -48h-48v208c0 44.0996 -35.9004 80 -80 80h-208v48c0 26.5 21.5 48 48 48h288c26.5 0 48 -21.5 48 -48zM384 272v-288c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h288\r\n-c26.5 0 48 -21.5 48 -48zM316 244c0 6.59961 -5.40039 12 -12 12h-228c-6.59961 0 -12 -5.40039 -12 -12v-52h252v52z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microchip\" unicode=\"&#xf2db;\" \r\n-d=\"M416 400v-416c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h224c26.5098 0 48 -21.4902 48 -48zM512 342v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42\r\n-c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 246v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 150v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6\r\n-c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 54v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM30 72h42\r\n-v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6zM30 168h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6\r\n-c0 3.31152 2.68848 6 6 6zM30 264h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6zM30 360h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12\r\n-c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snowflake\" unicode=\"&#xf2dc;\" horiz-adv-x=\"448\" \r\n-d=\"M440.3 102.8c7.40039 -4.2002 9.90039 -13.7002 5.60059 -21l-15.5 -26.7998c-4.30078 -7.40039 -13.7002 -10 -21.1006 -5.7002l-33.7998 19.5l7 -26c2.2002 -8.2002 -2.7002 -16.7002 -10.9004 -18.8994l-14.8994 -4\r\n-c-8.2002 -2.2002 -16.7002 2.69922 -18.9004 10.8994l-19 70.7998l-62.7998 36.2002v-77.5l53.4004 -53.7002c6.19922 -6.19922 6.19922 -16.3994 0 -22.5996l-11.3008 -11.2998c-6.19922 -6.2002 -16.3994 -6.2002 -22.5996 0l-19.7002 19.7002v-40.4004\r\n-c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v40.2998l-19.7002 -19.7002c-6.19922 -6.19922 -16.3994 -6.19922 -22.5996 0l-11.2998 11.3008c-6.2998 6.19922 -6.2998 16.3994 0 22.5996l53.7002 53.7002v77.5l-62.8008 -36.2002l-19 -70.7998\r\n-c-2.19922 -8.2002 -10.6992 -13.1006 -18.8994 -10.9004l-14.9004 4c-8.2002 2.2002 -13.0996 10.7002 -10.8994 18.9004l7 26l-33.8008 -19.5c-7.39941 -4.2002 -16.7998 -1.7002 -21.0996 5.7002l-15.5 26.7998c-4.2002 7.39941 -1.7002 16.7998 5.7002 21.0996\r\n-l33.7998 19.6006l-26 7c-8.2002 2.19922 -13.0996 10.6992 -10.9004 18.8994l4 14.9004c2.2002 8.2002 10.7002 13.0996 18.9004 10.8994l70.7998 -19l63.7998 36.9004l-63.7998 36.9004l-70.7998 -19c-8.2002 -2.2002 -16.7002 2.69922 -18.9004 10.8994l-4 14.9004\r\n-c-2.19922 8.2998 2.7002 16.7998 11 19l26 7l-33.7998 19.5c-7.39941 4.2998 -10 13.7002 -5.7002 21.0996l15.5 26.7002c4.30078 7.40039 13.7002 10 21.1006 5.7002l33.7998 -19.5l-7 26c-2.2002 8.2002 2.7002 16.7002 10.9004 18.8994l14.8994 4\r\n-c8.2002 2.2002 16.7002 -2.69922 18.9004 -10.8994l19 -70.7998l62.7998 -36.2002v77.5l-53.7002 53.7002c-6.2998 6.19922 -6.2998 16.3994 0 22.5996l11.4004 11.2998c6.2002 6.2002 16.3994 6.2002 22.5996 0l19.7002 -19.7002v40.4004c0 8.7998 7.2002 16 16 16h32\r\n-c8.7998 0 16 -7.2002 16 -16v-40.4004l19.7998 19.7002c6.2002 6.2002 16.4004 6.2002 22.6006 0l11.2998 -11.2998c6.2002 -6.2002 6.2002 -16.4004 0 -22.5996l-53.7002 -53.7002v-77.5l62.7998 36.2002l19 70.7998c2.2002 8.2002 10.7002 13.0996 18.9004 10.8994\r\n-l14.8994 -4c8.2002 -2.19922 13.1006 -10.6992 10.9004 -18.8994l-7 -26l33.7998 19.5c7.40039 4.2002 16.7998 1.7002 21.1006 -5.7002l15.5 -26.7998c4.19922 -7.40039 1.69922 -16.7998 -5.7002 -21.1006l-33.7998 -19.5l26 -7\r\n-c8.19922 -2.19922 13.0996 -10.6992 10.8994 -18.8994l-4 -14.9004c-2.2002 -8.2002 -10.7002 -13.0996 -18.8994 -10.8994l-70.8008 19l-63.7998 -36.9004l63.9004 -37l70.7998 19c8.2002 2.2002 16.7002 -2.7002 18.9004 -10.9004l4 -14.8994\r\n-c2.19922 -8.2002 -2.7002 -16.7002 -10.9004 -18.9004l-26 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"utensil-spoon\" unicode=\"&#xf2e5;\" \r\n-d=\"M480.1 416.1c55.1006 -55 34.5 -164.899 -28.5 -227.8c-49.2998 -49.2998 -110 -55.0996 -160.399 -28.7998l-192.4 -214.4c-10.3994 -11.5996 -28.5 -12.0996 -39.5 -1.09961l-51.2998 51.2998c-11.0996 11 -10.5996 29 1 39.5l214.5 192.4\r\n-c-26.2998 50.3994 -20.5 111.1 28.7998 160.399c62.9004 63 172.8 83.6006 227.8 28.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"utensils\" unicode=\"&#xf2e7;\" horiz-adv-x=\"416\" \r\n-d=\"M207.9 432.8c0.799805 -4.7002 16.0996 -94.5 16.0996 -128.8c0 -52.2998 -27.7998 -89.5996 -68.9004 -104.6l12.9004 -238.101c0.700195 -13.7002 -10.2002 -25.2998 -24 -25.2998h-64c-13.7002 0 -24.7002 11.5 -24 25.2998l12.9004 238.101\r\n-c-41.2002 15 -68.9004 52.3994 -68.9004 104.6c0 34.4004 15.2998 124.1 16.0996 128.8c3.2002 20.2998 45.3008 20.6006 47.9004 -1.09961v-141.2c1.2998 -3.40039 15.0996 -3.2002 16 0c1.40039 25.2998 7.90039 139.2 8 141.8c3.2998 20.7998 44.7002 20.7998 47.9004 0\r\n-c0.199219 -2.7002 6.59961 -116.5 8 -141.8c0.899414 -3.2002 14.7998 -3.40039 16 0v141.2c2.59961 21.5996 44.7998 21.3994 48 1.09961zM327.1 147.1c-156.5 122.4 -17.5996 300.9 64.9004 300.9c13.2998 0 24 -10.7998 24 -24v-464c0 -13.2998 -10.7002 -24 -24 -24h-56\r\n-c-14 0 -25.0996 12 -23.9004 26z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"undo-alt\" unicode=\"&#xf2ea;\" \r\n-d=\"M255.545 440c136.809 0.245117 248.456 -111.193 248.455 -248.002c-0.000976562 -136.965 -111.034 -247.998 -248 -247.998c-63.9258 0 -122.202 24.1865 -166.178 63.9082c-5.11328 4.61816 -5.35449 12.5605 -0.482422 17.4326l39.6621 39.6621\r\n-c4.46191 4.46094 11.625 4.71387 16.3682 0.552734c30.6328 -26.8779 69.5029 -41.5557 110.63 -41.5557c93.8164 0 167.236 75.9912 167.994 166.552c0.798828 95.4648 -77.0859 170.24 -169.484 169.442c-42.4287 -0.366211 -82.3662 -16.374 -113.229 -45.2734\r\n-l41.75 -41.75c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-134.059c-13.2549 0 -24 10.7451 -24 24v134.059c0 21.3828 25.8506 32.0908 40.9707 16.9707l35.7139 -35.7139c44.4229 42.4512 104.592 68.5654 170.86 68.6846z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash-alt\" unicode=\"&#xf2ed;\" horiz-adv-x=\"448\" \r\n-d=\"M32 -16v336h384v-336c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48zM304 240v-224c0 -8.83203 7.16797 -16 16 -16s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM208 240v-224c0 -8.83203 7.16797 -16 16 -16\r\n-s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM112 240v-224c0 -8.83203 7.16797 -16 16 -16s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM432 416c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002\r\n-h120z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sync-alt\" unicode=\"&#xf2f1;\" \r\n-d=\"M370.72 314.72c-31.2617 29.2725 -71.832 45.3184 -114.872 45.2803c-77.458 -0.0683594 -144.328 -53.1777 -162.791 -126.85c-1.34375 -5.36328 -6.12207 -9.15039 -11.6504 -9.15039h-57.3037c-7.49707 0 -13.1934 6.80664 -11.8066 14.1758\r\n-c21.6367 114.9 122.518 201.824 243.704 201.824c66.4482 0 126.791 -26.1357 171.315 -68.6846l35.7148 35.7148c15.1191 15.1191 40.9697 4.41113 40.9697 -16.9717v-134.059c0 -13.2549 -10.7451 -24 -24 -24h-134.059c-21.3828 0 -32.0908 25.8506 -16.9717 40.9707z\r\n-M32 152h134.059c21.3828 0 32.0908 -25.8506 16.9717 -40.9707l-41.75 -41.75c31.2617 -29.2734 71.835 -45.3193 114.876 -45.2803c77.418 0.0703125 144.314 53.1436 162.787 126.849c1.34375 5.36328 6.12207 9.15039 11.6504 9.15039h57.3047\r\n-c7.49805 0 13.1934 -6.80664 11.8066 -14.1758c-21.6377 -114.898 -122.519 -201.822 -243.705 -201.822c-66.4482 0 -126.791 26.1357 -171.315 68.6846l-35.7148 -35.7148c-15.1191 -15.1191 -40.9697 -4.41113 -40.9697 16.9717v134.059c0 13.2549 10.7451 24 24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stopwatch\" unicode=\"&#xf2f2;\" horiz-adv-x=\"448\" \r\n-d=\"M432 144c0 -114.9 -93.0996 -208 -208 -208s-208 93.0996 -208 208c0 104 76.2998 190.2 176 205.5v34.5h-28c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h120c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-28v-34.5\r\n-c37.5 -5.7998 71.7002 -21.5996 99.7002 -44.5996l27.5 27.5c4.7002 4.69922 12.2998 4.69922 17 0l28.2998 -28.3008c4.7002 -4.69922 4.7002 -12.2998 0 -17l-29.4004 -29.3994l-0.599609 -0.600586c21.2002 -32.3994 33.5 -71.2998 33.5 -113.1zM256 108v151.5\r\n-c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-151.5c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sign-out-alt\" unicode=\"&#xf2f5;\" \r\n-d=\"M497 175l-168 -168c-15 -15 -41 -4.5 -41 17v96h-136c-13.2998 0 -24 10.7002 -24 24v96c0 13.2998 10.7002 24 24 24h136v96c0 21.4004 25.9004 32 41 17l168 -168c9.2998 -9.40039 9.2998 -24.5996 0 -34zM192 12c0 -6.59961 -5.40039 -12 -12 -12h-84\r\n-c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h84c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84c-17.7002 0 -32 -14.2998 -32 -32v-192c0 -17.7002 14.2998 -32 32 -32h84c6.59961 0 12 -5.40039 12 -12v-40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sign-in-alt\" unicode=\"&#xf2f6;\" \r\n-d=\"M416 0h-84c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84c17.7002 0 32 14.2998 32 32v192c0 17.7002 -14.2998 32 -32 32h-84c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84c53 0 96 -43 96 -96v-192c0 -53 -43 -96 -96 -96z\r\n-M369 201c9.2998 -9.40039 9.2998 -24.5996 0 -34l-168 -168c-15 -15 -41 -4.5 -41 17v96h-136c-13.2998 0 -24 10.7002 -24 24v96c0 13.2998 10.7002 24 24 24h136v96c0 21.5 26 32 41 17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"redo-alt\" unicode=\"&#xf2f9;\" \r\n-d=\"M256.455 440c66.2686 -0.119141 126.437 -26.2334 170.859 -68.6846l35.7148 35.7148c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-134.059c0 -13.2549 -10.7451 -24 -24 -24h-134.059c-21.3828 0 -32.0908 25.8506 -16.9717 40.9707l41.75 41.75\r\n-c-30.8633 28.8994 -70.8008 44.9072 -113.229 45.2734c-92.3984 0.797852 -170.283 -73.9775 -169.484 -169.442c0.757812 -90.5605 74.1777 -166.552 167.994 -166.552c41.127 0 79.9971 14.6777 110.629 41.5557c4.74316 4.16113 11.9062 3.9082 16.3682 -0.552734\r\n-l39.6621 -39.6621c4.87207 -4.87207 4.63086 -12.8145 -0.482422 -17.4326c-43.9746 -39.7217 -102.251 -63.9082 -166.177 -63.9082c-136.966 0 -247.999 111.033 -248 247.998c-0.000976562 136.809 111.646 248.247 248.455 248.002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"poo\" unicode=\"&#xf2fe;\" \r\n-d=\"M451.4 78.9004c34.2998 -5.5 60.5996 -35 60.5996 -70.9004c0 -39.7998 -32.2002 -72 -72 -72h-368c-39.7998 0 -72 32.2002 -72 72c0 35.9004 26.2998 65.4004 60.5996 70.9004c-17.2998 13.0996 -28.5996 33.6992 -28.5996 57.0996c0 39.7998 32.2002 72 72 72h14.0996\r\n-c-13.3994 11.7002 -22.0996 28.7998 -22.0996 48c0 35.2998 28.7002 64 64 64h16c44.2002 0 80 35.7998 80 80c0 17.4004 -5.7002 33.4004 -15.0996 46.5c4.89941 0.799805 9.89941 1.5 15.0996 1.5c53 0 96 -43 96 -96c0 -11.2998 -2.2998 -21.9004 -5.90039 -32h5.90039\r\n-c35.2998 0 64 -28.7002 64 -64c0 -19.2002 -8.7002 -36.2998 -22.0996 -48h14.0996c39.7998 0 72 -32.2002 72 -72c0 -23.4004 -11.2998 -44 -28.5996 -57.0996zM192 192c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32z\r\n-M351.5 53c2 5.2998 -2 11 -7.7998 11h-175.4c-5.7998 0 -9.7998 -5.7002 -7.7998 -11c10.5 -27.9004 58.5 -53 95.5 -53s85 25.0996 95.5 53zM320 128c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"images\" unicode=\"&#xf302;\" horiz-adv-x=\"576\" \r\n-d=\"M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-208c0 -44.1123 35.8877 -80 80 -80h336zM576 112c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256\r\n-c0 26.5098 21.4902 48 48 48h384c26.5098 0 48 -21.4902 48 -48v-256zM256 320c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48zM160 176v-48h352v112l-87.5137 87.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0\r\n-l-135.515 -135.515l-39.5137 39.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pencil-alt\" unicode=\"&#xf303;\" \r\n-d=\"M497.9 305.9l-46.1006 -46.1006c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-111 111c-4.7002 4.7002 -4.7002 12.2998 0 17l46.1006 46.1006c18.6992 18.6992 49.0996 18.6992 67.8994 0l60.1006 -60.1006c18.7998 -18.7002 18.7998 -49.0996 0 -67.8994zM284.2 348.2\r\n-c4.7002 4.7002 12.2998 4.7002 17.0996 0l111 -111c4.7002 -4.7002 4.7002 -12.2998 0 -17l-262.6 -262.601l-121.5 -21.2998c-16.4004 -2.7998 -30.7002 11.4004 -27.7998 27.7998l21.1992 121.5zM124.1 108.1c5.5 -5.5 14.3008 -5.5 19.8008 0l154 154\r\n-c5.5 5.5 5.5 14.3008 0 19.8008s-14.3008 5.5 -19.8008 0l-154 -154c-5.5 -5.5 -5.5 -14.3008 0 -19.8008zM88 24v48h-36.2998l-11.2998 -64.5l31.0996 -31.0996l64.5 11.2998v36.2998h-48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pen\" unicode=\"&#xf304;\" \r\n-d=\"M290.74 354.76l128.02 -128.02l-277.99 -277.99l-114.14 -12.5996c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l12.7002 114.22zM497.94 373.82c18.75 -18.75 18.75 -49.1504 0 -67.9102l-56.5508 -56.5498l-128.02 128.02l56.5498 56.5498\r\n-c18.75 18.75 49.1602 18.75 67.9102 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pen-alt\" unicode=\"&#xf305;\" \r\n-d=\"M497.94 373.83c18.75 -18.7598 18.75 -49.1602 0 -67.9102l-56.5508 -56.5498l-128.02 128.02l56.5498 56.5508c18.75 18.75 49.1602 18.75 67.9102 0zM251.14 394.36l84.8506 -84.8506l82.7695 -82.7695l-196.79 -196.79\r\n-c-44.8223 -44.8203 -132.335 -86.8428 -195.34 -93.7998c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l0.0302734 0.229492c7.00195 62.9189 49.0156 150.315 93.7803 195.08l151.56 151.55l-22.6299 22.6201l-101.82 -101.819\r\n-c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6299 22.6299c-6.25 6.24023 -6.25 16.3701 0 22.6201l118.78 118.79c15.6201 15.6201 40.9395 15.6201 56.5596 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long-arrow-alt-down\" unicode=\"&#xf309;\" horiz-adv-x=\"256\" \r\n-d=\"M168 102.059h46.0576c21.3828 0 32.0908 -25.8516 16.9717 -40.9707l-86.0596 -86.0586c-9.37207 -9.37305 -24.5674 -9.37305 -33.9404 0l-86.0596 86.0586c-15.1191 15.1201 -4.41113 40.9707 16.9717 40.9707h46.0586v301.941c0 6.62695 5.37305 12 12 12h56\r\n-c6.62695 0 12 -5.37305 12 -12v-301.941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long-arrow-alt-left\" unicode=\"&#xf30a;\" horiz-adv-x=\"448\" \r\n-d=\"M134.059 152v-46.0576c0 -21.3828 -25.8516 -32.0908 -40.9707 -16.9717l-86.0586 86.0596c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l86.0586 86.0596c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-46.0586h301.941c6.62695 0 12 -5.37305 12 -12v-56\r\n-c0 -6.62695 -5.37305 -12 -12 -12h-301.941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long-arrow-alt-right\" unicode=\"&#xf30b;\" horiz-adv-x=\"448\" \r\n-d=\"M313.941 232v46.0576c0 21.3828 25.8516 32.0908 40.9707 16.9717l86.0586 -86.0596c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-86.0586 -86.0596c-15.1201 -15.1191 -40.9707 -4.41113 -40.9707 16.9717v46.0586h-301.941c-6.62695 0 -12 5.37305 -12 12v56\r\n-c0 6.62695 5.37305 12 12 12h301.941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"long-arrow-alt-up\" unicode=\"&#xf30c;\" horiz-adv-x=\"256\" \r\n-d=\"M88 281.941h-46.0576c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37207 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-301.941c0 -6.62695 -5.37305 -12 -12 -12h-56\r\n-c-6.62695 0 -12 5.37305 -12 12v301.941z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"expand-arrows-alt\" unicode=\"&#xf31e;\" horiz-adv-x=\"448\" \r\n-d=\"M448 104v-112v-0.0605469c0 -13.2148 -10.7246 -23.9395 -23.9395 -23.9395h-0.0605469h-112c-21.3896 0 -32.0898 25.9004 -17 41l36.2002 36.2002l-107.2 107.2l-107.23 -107.301l36.2305 -36.0996c15.0898 -15.0996 4.38965 -41 -17 -41h-112h-0.0605469\r\n-c-13.2148 0 -23.9395 10.7246 -23.9395 23.9395v0.0605469v112c0 21.4004 25.8896 32.0996 41 17l36.1904 -36.2002l107.27 107.2l-107.28 107.3l-36.1797 -36.2998c-15.0996 -15.0996 -41 -4.40039 -41 17v112v0.0605469c0 13.2148 10.7246 23.9395 23.9395 23.9395\r\n-h0.0605469h112c21.3896 0 32.0898 -25.9004 17 -41l-36.2002 -36.2002l107.2 -107.2l107.23 107.301l-36.2305 36.0996c-15.0898 15.0996 -4.38965 41 17 41h112h0.0605469c13.2148 0 23.9395 -10.7246 23.9395 -23.9395v-0.0605469v-112\r\n-c0 -21.4004 -25.8896 -32.0996 -41 -17l-36.1904 36.2002l-107.27 -107.2l107.28 -107.3l36.1797 36.2002c15.0996 15.1992 41 4.5 41 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clipboard\" unicode=\"&#xf328;\" horiz-adv-x=\"384\" \r\n-d=\"M384 336v-352c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h80c0 35.29 28.71 64 64 64s64 -28.71 64 -64h80c26.5098 0 48 -21.4902 48 -48zM192 408c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\r\n-s24 10.7451 24 24s-10.7451 24 -24 24zM288 294v20c0 3.31152 -2.68848 6 -6 6h-180c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h180c3.31152 0 6 2.68848 6 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrows-alt-h\" unicode=\"&#xf337;\" \r\n-d=\"M377.941 278.059c0 21.3828 25.8516 32.0908 40.9707 16.9707l86.0586 -86.0596c9.37305 -9.37305 9.37305 -24.5674 0 -33.9404l-86.0586 -86.0596c-15.1201 -15.1191 -40.9707 -4.41113 -40.9707 16.9717v46.0586h-243.883v-46.0576\r\n-c0 -21.3828 -25.8516 -32.0908 -40.9707 -16.9717l-86.0586 86.0596c-9.37305 9.37305 -9.37305 24.5674 0 33.9404l86.0586 86.0596c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-46.0586h243.883v46.0586z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrows-alt-v\" unicode=\"&#xf338;\" horiz-adv-x=\"256\" \r\n-d=\"M214.059 70.0586c21.3828 0 32.0908 -25.8516 16.9707 -40.9707l-86.0596 -86.0586c-9.37305 -9.37305 -24.5674 -9.37305 -33.9404 0l-86.0596 86.0586c-15.1191 15.1201 -4.41113 40.9707 16.9717 40.9707h46.0586v243.883h-46.0576\r\n-c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37305 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-243.883h46.0586z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-down\" unicode=\"&#xf358;\" \r\n-d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM212 308v-116h-70.9004c-10.6992 0 -16.0996 -13 -8.5 -20.5l114.9 -114.3c4.7002 -4.7002 12.2002 -4.7002 16.9004 0l114.899 114.3c7.60059 7.59961 2.2002 20.5 -8.5 20.5\r\n-h-70.7998v116c0 6.59961 -5.40039 12 -12 12h-64c-6.59961 0 -12 -5.40039 -12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-left\" unicode=\"&#xf359;\" \r\n-d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM372 236h-116v70.9004c0 10.6992 -13 16.0996 -20.5 8.5l-114.3 -114.9c-4.7002 -4.7002 -4.7002 -12.2002 0 -16.9004l114.3 -114.899\r\n-c7.59961 -7.60059 20.5 -2.2002 20.5 8.5v70.7998h116c6.59961 0 12 5.40039 12 12v64c0 6.59961 -5.40039 12 -12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-right\" unicode=\"&#xf35a;\" \r\n-d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM140 148h116v-70.9004c0 -10.6992 13 -16.0996 20.5 -8.5l114.3 114.9c4.7002 4.7002 4.7002 12.2002 0 16.9004l-114.3 115c-7.59961 7.59961 -20.5 2.19922 -20.5 -8.5\r\n-v-70.9004h-116c-6.59961 0 -12 -5.40039 -12 -12v-64c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"arrow-alt-circle-up\" unicode=\"&#xf35b;\" \r\n-d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM300 76v116h70.9004c10.6992 0 16.0996 13 8.5 20.5l-114.9 114.3c-4.7002 4.7002 -12.2002 4.7002 -16.9004 0l-115 -114.3c-7.59961 -7.59961 -2.19922 -20.5 8.5 -20.5\r\n-h70.9004v-116c0 -6.59961 5.40039 -12 12 -12h64c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"external-link-alt\" unicode=\"&#xf35d;\" \r\n-d=\"M432 128c8.83203 0 16 -7.16797 16 -16v-128c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-144v-320h320v112\r\n-c0 8.83203 7.16797 16 16 16h32zM488 448c13.248 0 24 -10.752 24 -24v-128c0 -21.5 -26 -32 -41 -17l-35.7197 35.6797l-243.61 -243.68c-3.88281 -3.89648 -11.499 -7.05859 -17 -7.05859s-13.1172 3.16211 -17 7.05859l-22.6699 22.6299\r\n-c-3.89648 3.88281 -7.05859 11.499 -7.05859 17s3.16211 13.1172 7.05859 17l243.73 243.64l-35.7305 35.7305c-15.0498 15.0898 -4.37012 41 17 41h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"external-link-square-alt\" unicode=\"&#xf360;\" horiz-adv-x=\"448\" \r\n-d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM360 352h-111.971c-21.3135 0 -32.0801 -25.8613 -16.9717 -40.9707l31.9844 -31.9873l-195.527 -195.527\r\n-c-4.68555 -4.68555 -4.68555 -12.2832 0 -16.9707l31.0293 -31.0293c4.6875 -4.68555 12.2852 -4.68555 16.9707 0l195.526 195.526l31.9883 -31.9912c15.0283 -15.0264 40.9707 -4.47461 40.9707 16.9717v111.979c0 13.2549 -10.7451 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"exchange-alt\" unicode=\"&#xf362;\" \r\n-d=\"M0 280v16c0 13.2549 10.7451 24 24 24h360v48c0 21.3672 25.8994 32.042 40.9707 16.9707l80 -80c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-80 -80c-15.0146 -15.0127 -40.9707 -4.48633 -40.9707 16.9697v48h-360c-13.2549 0 -24 10.7451 -24 24zM488 128\r\n-c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-360v-48c0 -21.4365 -25.9434 -31.9971 -40.9707 -16.9697l-80 80c-9.37207 9.37207 -9.37207 24.5674 0 33.9404l80 80c15.1084 15.1094 40.9707 4.34375 40.9707 -16.9707v-48h360z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-download-alt\" unicode=\"&#xf381;\" horiz-adv-x=\"640\" \r\n-d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\r\n-c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996zM404.7 132.7c10.0996 10.0996 2.89941 27.2998 -11.2998 27.2998h-65.4004v112c0 8.7998 -7.2002 16 -16 16\r\n-h-48c-8.7998 0 -16 -7.2002 -16 -16v-112h-65.4004c-14.1992 0 -21.3994 -17.2002 -11.2998 -27.2998l105.4 -105.4c6.2002 -6.2002 16.3994 -6.2002 22.5996 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-upload-alt\" unicode=\"&#xf382;\" horiz-adv-x=\"640\" \r\n-d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\r\n-c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996zM393.4 160c14.1992 0 21.3994 17.2002 11.2998 27.2998l-105.4 105.4\r\n-c-6.2002 6.2002 -16.3994 6.2002 -22.5996 0l-105.4 -105.4c-10.0996 -10.0996 -3 -27.2998 11.2998 -27.2998h65.4004v-112c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16v112h65.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gem\" unicode=\"&#xf3a5;\" horiz-adv-x=\"576\" \r\n-d=\"M485.5 448l90.5 -160h-101.1l-69.2002 160h79.7998zM357.5 448l69.2002 -160h-277.4l69.2002 160h139zM90.5 448h79.7998l-69.2002 -160h-101.1zM0 256h100.7l123 -251.7c1.5 -3.09961 -2.7002 -5.89941 -5 -3.2998zM148.2 256h279.6l-137 -318.2\r\n-c-1 -2.39941 -4.5 -2.39941 -5.5 0zM352.3 4.2998l123 251.7h100.7l-218.7 -254.9c-2.2998 -2.69922 -6.5 0.100586 -5 3.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"level-down-alt\" unicode=\"&#xf3be;\" horiz-adv-x=\"320\" \r\n-d=\"M313.553 55.6689l-103.966 -112.003c-9.48535 -10.2139 -25.6758 -10.2295 -35.1738 0l-103.975 112.003c-14.2061 15.2998 -3.37695 40.3311 17.5869 40.3311h63.9746v272h-83.9756h-0.00195312c-2.74316 0 -6.54395 1.5752 -8.4834 3.51465l-56 56\r\n-c-7.56055 7.55957 -2.20605 20.4854 8.48535 20.4854h195.976c13.2549 0 24 -10.7451 24 -24v-328h63.9658c20.8779 0 31.8516 -24.9688 17.5869 -40.3311z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"level-up-alt\" unicode=\"&#xf3bf;\" horiz-adv-x=\"320\" \r\n-d=\"M313.553 328.331c14.2646 -15.3623 3.29102 -40.3311 -17.5869 -40.3311h-63.9658v-328c0 -13.2549 -10.7451 -24 -24 -24h-195.976c-10.6914 0 -16.0459 12.9258 -8.48535 20.4854l56 56c1.93945 1.93945 5.74023 3.51465 8.4834 3.51465h0.00195312h83.9756v272\r\n-h-63.9746c-20.9639 0 -31.793 25.0312 -17.5869 40.3311l103.975 112.003c9.49805 10.2295 25.6885 10.2139 35.1738 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"lock-open\" unicode=\"&#xf3c1;\" horiz-adv-x=\"576\" \r\n-d=\"M423.5 448c84 0.299805 152.5 -68 152.5 -152v-80c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v80c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-71.0996h48c26.5 0 48 -21.5 48 -48v-192\r\n-c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v192c0 26.5 21.5 48 48 48h224v70.5c0 84 67.5 153.2 151.5 153.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-marker-alt\" unicode=\"&#xf3c5;\" horiz-adv-x=\"384\" \r\n-d=\"M172.268 -53.6699c-145.298 210.639 -172.268 232.257 -172.268 309.67c0 106.039 85.9609 192 192 192s192 -85.9609 192 -192c0 -77.4131 -26.9697 -99.0312 -172.268 -309.67c-9.53516 -13.7744 -29.9307 -13.7734 -39.4648 0zM192 176c44.1826 0 80 35.8174 80 80\r\n-s-35.8174 80 -80 80s-80 -35.8174 -80 -80s35.8174 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone-alt\" unicode=\"&#xf3c9;\" horiz-adv-x=\"352\" \r\n-d=\"M336 256c8.83984 0 16 -7.16016 16 -16v-48c0 -88.9004 -66.29 -162.47 -152 -174.23v-33.7695h56c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56v34.1504\r\n-c-88.0303 12.1396 -152 92.0498 -152 181.689v40.1602c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-42.2998c0 -66.8105 48.71 -126.59 115.21 -133.08c76.2998 -7.44043 140.79 52.5801 140.79 127.38v48c0 8.83984 7.16016 16 16 16h16zM176 96\r\n-c-53.0195 0 -96 42.9805 -96 96v160c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16\r\n-c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301c0 -53.0195 -42.9805 -96 -96 -96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mobile-alt\" unicode=\"&#xf3cd;\" horiz-adv-x=\"320\" \r\n-d=\"M272 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-224c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h224zM160 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM272 76v312\r\n-c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-312c0 -6.59961 5.40039 -12 12 -12h200c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-bill-alt\" unicode=\"&#xf3d1;\" horiz-adv-x=\"640\" \r\n-d=\"M352 160c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-64c-4.41992 0 -8 3.58008 -8 8v16c0 4.41992 3.58008 8 8 8h16v55.4404l-0.469727 -0.310547c-1.1123 -0.741211 -3.09961 -1.34375 -4.43652 -1.34375\r\n-c-2.36328 0 -5.34375 1.59668 -6.65332 3.56348l-8.88086 13.3105c-0.741211 1.1123 -1.34375 3.09961 -1.34375 4.43555c0 2.36328 1.59668 5.34473 3.56445 6.6543l15.3301 10.2197c3.93945 2.62988 8.56934 4.03027 13.3096 4.03027h13.5801c4.41992 0 8 -3.58008 8 -8\r\n-v-88h16zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM48 48h64c0 35.3496 -28.6504 64 -64 64v-64zM48 272c35.3496 0 64 28.6504 64 64h-64v-64zM320 80\r\n-c53 0 96 50.1299 96 112c0 61.8604 -42.9805 112 -96 112s-96 -50.1396 -96 -112c0 -61.8496 42.9805 -112 96 -112zM592 48v64c-35.3496 0 -64 -28.6504 -64 -64h64zM592 272v64h-64c0 -35.3496 28.6504 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone-slash\" unicode=\"&#xf3dd;\" horiz-adv-x=\"640\" \r\n-d=\"M268.2 66.5996c11.5 5.40039 22.7002 11.6006 33.5996 18.1006l80 -61.7998c-76 -54.5 -169 -86.9004 -269.7 -86.9004c-11.2998 0 -20.8994 7.7998 -23.3994 18.5996l-24 104c-2.60059 11.4004 3.2002 22.9004 13.8994 27.5l112 48\r\n-c9.80078 4.2002 21.2002 1.40039 28 -6.89941zM633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002\r\n-c5.5 7 15.5 8.2002 22.5 2.7998l353.9 -273.5c18.0996 22.5 33.7998 46.7002 46 72.8008l-60.6006 49.5996c-8.2998 6.7002 -11.0996 18.2002 -6.89941 28l48 112c4.59961 10.5996 16.1992 16.5 27.5 13.9004l104 -24c10.8994 -2.5 18.5996 -12.2002 18.5996 -23.4004\r\n-c0 -108.9 -38.0996 -208.4 -100.9 -287.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"portrait\" unicode=\"&#xf3e0;\" horiz-adv-x=\"384\" \r\n-d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM192 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM304 83.2002v19.2002\r\n-c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\r\n-c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"reply\" unicode=\"&#xf3e5;\" \r\n-d=\"M8.30859 258.164l176.005 151.985c15.4053 13.3047 39.6865 2.50391 39.6865 -18.1641v-80.0537c160.629 -1.83887 288 -34.0312 288 -186.258c0 -61.4404 -39.5811 -122.309 -83.333 -154.132c-13.6533 -9.93066 -33.1113 2.5332 -28.0771 18.6309\r\n-c45.3438 145.012 -21.5068 183.51 -176.59 185.742v-87.915c0 -20.7002 -24.2998 -31.4531 -39.6865 -18.1641l-176.005 152c-11.0703 9.5625 -11.0859 26.7529 0 36.3281z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shield-alt\" unicode=\"&#xf3ed;\" \r\n-d=\"M466.5 364.3c17.7998 -7.39941 29.5 -24.8994 29.5 -44.2998c0 -221.3 -135.9 -344.6 -221.6 -380.3c-11.8008 -4.90039 -25.1006 -4.90039 -36.9004 0c-107 44.5996 -221.5 181.8 -221.5 380.3c0 19.4004 11.7002 36.9004 29.5996 44.2998l192 80\r\n-c4.89062 2.0293 13.1562 3.6748 18.4502 3.6748c5.29492 0 13.5596 -1.64551 18.4502 -3.6748zM256.1 1.7002c93.7002 46.5996 172.5 156.3 175.801 307.7l-175.9 73.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tablet-alt\" unicode=\"&#xf3fa;\" horiz-adv-x=\"448\" \r\n-d=\"M400 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h352zM224 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM400 76v312\r\n-c0 6.59961 -5.40039 12 -12 12h-328c-6.59961 0 -12 -5.40039 -12 -12v-312c0 -6.59961 5.40039 -12 12 -12h328c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tachometer-alt\" unicode=\"&#xf3fd;\" horiz-adv-x=\"576\" \r\n-d=\"M288 416c159.06 0 288 -128.94 288 -288c0 -52.7998 -14.25 -102.26 -39.0596 -144.8c-5.61035 -9.62012 -16.3008 -15.2002 -27.4404 -15.2002h-443c-11.1396 0 -21.8301 5.58008 -27.4404 15.2002c-24.8096 42.54 -39.0596 92 -39.0596 144.8\r\n-c0 159.06 128.94 288 288 288zM288 352c-17.6699 0 -31.9902 -14.3301 -31.9902 -32s14.3301 -32 32 -32c6.66992 0 12.5098 2.51953 17.6406 6.00977l9.21973 27.6699c0.80957 2.44043 2.33984 4.41016 3.4502 6.66992c-3.74023 13.5205 -15.6104 23.6504 -30.3203 23.6504\r\n-zM96 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM144 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM390.77 296.41c4.18066 12.5703 -2.59961 26.1699 -15.1699 30.3594\r\n-c-12.6299 4.28027 -26.1895 -2.60938 -30.3594 -15.1699l-61.3398 -184.01c-33.4004 -2.16016 -59.9004 -29.6494 -59.9004 -63.5898c0 -11.7197 3.37988 -22.5498 8.87988 -32h110.24c5.5 9.4502 8.87988 20.2803 8.87988 32c0 19.46 -8.87012 36.6699 -22.5596 48.4102z\r\n-M405.43 239.21c5.68066 -8.94043 15.1904 -15.21 26.5703 -15.2197c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32c-3.91992 0 -7.58008 -0.94043 -11.0498 -2.23047zM480 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ticket-alt\" unicode=\"&#xf3ff;\" horiz-adv-x=\"576\" \r\n-d=\"M128 288h320v-192h-320v192zM528 192c0 -26.5098 21.4902 -48 48 -48v-96c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v96c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48v96c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48\r\n-v-96c-26.5098 0 -48 -21.4902 -48 -48zM480 296c0 13.2549 -10.7451 24 -24 24h-336c-13.2549 0 -24 -10.7451 -24 -24v-208c0 -13.2549 10.7451 -24 24 -24h336c13.2549 0 24 10.7451 24 24v208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-alt\" unicode=\"&#xf406;\" \r\n-d=\"M256 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144s144 -64.5 144 -144s-64.5 -144 -144 -144zM384 128c70.7002 0 128 -57.2998 128 -128v-16c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v16c0 70.7002 57.2998 128 128 128h55.0996\r\n-c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h55.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"window-close\" unicode=\"&#xf410;\" \r\n-d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM380.4 125.5l-67.1006 66.5l67.1006 66.5c4.7998 4.7998 4.7998 12.5996 0 17.4004l-40.5 40.5\r\n-c-4.80078 4.7998 -12.6006 4.7998 -17.4004 0l-66.5 -67.1006l-66.5 67.1006c-4.7998 4.7998 -12.5996 4.7998 -17.4004 0l-40.5 -40.5c-4.7998 -4.80078 -4.7998 -12.6006 0 -17.4004l67.1006 -66.5l-67.1006 -66.5c-4.7998 -4.7998 -4.7998 -12.5996 0 -17.4004\r\n-l40.5 -40.5c4.80078 -4.7998 12.6006 -4.7998 17.4004 0l66.5 67.1006l66.5 -67.1006c4.7998 -4.7998 12.5996 -4.7998 17.4004 0l40.5 40.5c4.7998 4.80078 4.7998 12.6006 0 17.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"baseball-ball\" unicode=\"&#xf433;\" horiz-adv-x=\"496\" \r\n-d=\"M368.5 84.0996c12.9004 -26.6992 30.2998 -50.1992 51.4004 -70.5996c-44.6006 -43 -105.101 -69.5 -171.9 -69.5c-66.9004 0 -127.5 26.5996 -172 69.7002c21.2002 20.3994 38.5996 44 51.5 70.7002l-28.7998 13.8994c-11.1006 -23 -26.1006 -43.2998 -44.2998 -61\r\n-c-34 42.4004 -54.4004 96.1006 -54.4004 154.7s20.4004 112.3 54.4004 154.8c17.7998 -17.2998 32.5 -37.0996 43.5 -59.3994l28.6992 14.0996c-12.7998 25.9004 -30 48.9004 -50.6992 68.7998c44.5996 43.1006 105.199 69.7002 172.1 69.7002\r\n-c67 0 127.6 -26.7002 172.2 -69.7998c-20.7998 -20 -38 -43 -50.7998 -69l28.6992 -14.1006c11 22.4004 25.8008 42.2002 43.6006 59.5c33.7998 -42.3994 54.2002 -96.0996 54.2002 -154.6c0 -58.5996 -20.5 -112.4 -54.5 -154.9c-18.1006 17.7002 -33 38 -44.1006 60.9004z\r\n-M140.2 116.1c17.2998 53.9004 14.2998 108.2 -0.700195 153.801l-30.4004 -10c13.3008 -40.2002 15.5 -87.6006 0.600586 -134zM356.5 269.5c-15 -45.5 -18 -99.7998 -0.700195 -153.8l30.5 9.7998c-14.8994 46.5 -12.5996 93.9004 0.600586 134z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"basketball-ball\" unicode=\"&#xf434;\" horiz-adv-x=\"496\" \r\n-d=\"M212.3 437.7c-1.5 -50 -17 -95.4004 -44.7998 -131.2l-77.4004 77.4004c36 29.6992 78.4004 47.5 122.2 53.7998zM248 226l-46.2998 46.2998c37.2002 45.4004 57.5 103.8 58.7002 167.7c51.8994 -2.59961 103.1 -21.0996 145.5 -56.0996zM56.0996 349.9l77.4004 -77.4004\r\n-c-35.7002 -27.7998 -81.2002 -43.2998 -131.2 -44.7998c6.2998 43.7998 24.1006 86.2002 53.7998 122.2zM328.3 145.7l-46.2998 46.2998l157.9 157.9c35 -42.4004 53.5 -93.6006 56.0996 -145.5c-64 -1.30078 -122.4 -21.6006 -167.7 -58.7002zM248 158l46.2998 -46.2998\r\n-c-37.0996 -45.2998 -57.3994 -103.7 -58.7002 -167.7c-51.8994 2.59961 -103.1 21.2002 -145.5 56.0996zM439.9 34.0996l-77.4004 77.4004c35.7002 27.7002 81.0996 43.2002 131.2 44.7998c-6.2998 -43.7998 -24.1006 -86.2002 -53.7998 -122.2zM167.7 238.3\r\n-l46.2998 -46.2998l-157.9 -157.9c-35 42.4004 -53.5 93.6006 -56.0996 145.5c63.9004 1.10059 122.3 21.5 167.7 58.7002zM283.7 -53.7002c1.59961 50 17.0996 95.5 44.7998 131.2l77.4004 -77.4004c-36 -29.6992 -78.4004 -47.5 -122.2 -53.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bowling-ball\" unicode=\"&#xf436;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32\r\n-s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess\" unicode=\"&#xf439;\" \r\n-d=\"M74 240l-33.9102 90.3799c-0.5625 1.5 -1.01953 4.01758 -1.01953 5.62012c0 8.83203 7.16797 16 16 16h0.0195312h56.9102v32h-24c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h24v24c0 4.41602 3.58398 8 8 8h16c4.41602 0 8 -3.58398 8 -8v-24h24\r\n-c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-32h56.8896h0.0195312c8.83203 0 16 -7.16797 16 -16c0 -1.60254 -0.456055 -4.12012 -1.01953 -5.62012l-33.8896 -90.3799h10c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16\r\n-h-15.9404c0.116211 -35.8613 7.25684 -93.2051 15.9404 -128h-128c8.68359 34.7949 15.8242 92.1387 15.9404 128h-15.9404c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h10zM247.16 -11.5801c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086\r\n-v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-224c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-16zM339.93 146.2\r\n-l-24.5693 20.7998c-6.25684 5.28125 -11.3467 16.2119 -11.3604 24.4004v58.5996c0 3.31152 2.68848 6 6 6h26.3896c3.3125 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.68848 6 6 6h53.8105c3.31152 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.6875 6 6 6h26.3799\r\n-c3.31152 0 6 -2.68848 6 -6v-58.54v-0.03125c0 -8.19238 -5.07617 -19.1367 -11.3301 -24.4287l-24.5996 -20.79l3.29004 -82.21h-126.721zM384 144v-32h32v32c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM503.16 -11.5801\r\n-c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h128\r\n-c8.83203 0 16 -7.16797 16 -16v-16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-bishop\" unicode=\"&#xf43a;\" horiz-adv-x=\"320\" \r\n-d=\"M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6641 14.3359 32 32 32h64c17.6641 0 32 -14.3359 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898\r\n-l-107.89 -107.931c-1.29199 -1.29297 -2.34082 -3.82617 -2.34082 -5.6543c0 -1.8291 1.04883 -4.3623 2.34082 -5.65527l11.3105 -11.3105c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082l100.31 100.33\r\n-c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-board\" unicode=\"&#xf43c;\" \r\n-d=\"M255.9 447.8v-64h-64v64h64zM0 383.83h64v-64h-64v64zM128 447.8v-64h-64v64h64zM192 191.9h64v-64h-64v64zM0 255.88h64v-64h-64v64zM383.85 447.8v-64h-64v64h64zM511.85 447.8v-64h-64v64h64zM128 191.9v-64h-64v64h64zM511.8 0h-64v64h64v-64zM511.8 128h-64v64h64\r\n-v-64zM383.85 -64v64h64v-64h-64zM511.85 255.88h-64v64h64v-64zM128 -64v64h64v-64h-64zM0 -64v64h64v-64h-64zM255.9 -64v64h64v-64h-64zM0 127.93h64v-64h-64v64zM319.88 319.85h-64v64h64v-64zM255.88 191.85v64h64v-64h-64zM191.88 63.8496h64v-64h-64v64z\r\n-M319.88 127.85v64h64v-64h-64zM319.88 255.8v64h64v-64h-64zM319.88 63.8701h64v-64h-64v64zM64 63.9502h64v-64h-64v64zM192 319.85h-64v64h64v-64zM383.92 63.9502v64h64v-64h-64zM255.92 255.88h-64v64h64v-64zM383.92 383.83h64v-64h-64v64zM255.92 127.93h64v-64h-64\r\n-v64zM191.92 255.88l0.0800781 -64h-64v64h63.9199zM383.84 191.88v64h64v-64h-64zM128 319.85v-64h-64v64h64zM128 127.93h64v-64h-64v64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-king\" unicode=\"&#xf43f;\" horiz-adv-x=\"448\" \r\n-d=\"M400 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM416 288c17.6504 -0.0136719 31.9756 -14.3496 31.9756 -32c0 -2.69434 -0.652344 -6.96777 -1.45605 -9.54004\r\n-l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.803711 2.57227 -1.45605 6.8457 -1.45605 9.54004c0 17.6504 14.3252 31.9863 31.9756 32h160v48h-40c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h40v40c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8\r\n-v-40h40c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-40v-48h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-knight\" unicode=\"&#xf441;\" horiz-adv-x=\"384\" \r\n-d=\"M19 175.53c-10.4883 4.66211 -19 17.7627 -19 29.2402v0.0195312v137.21v0.0585938c0 5.47461 3.13574 13.0635 7 16.9414l9 9l-14.21 28.4199c-0.988281 1.97266 -1.79004 5.36328 -1.79004 7.56934v0.0107422c0 6.62402 5.37598 12 12 12h147.94\r\n-c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195v0.0224609c0 27.2783 19.7969 59.3271 44.1904 71.5381l57.2197 28.6504c14.6445 7.32324 26.5303 26.5566 26.5303 42.9297v0.00976562v50.3301l-22.1201 -11.0801\r\n-c-5.45117 -2.72559 -11.0732 -9.7373 -12.5508 -15.6504l-9.21973 -30.6494c-2.4502 -8.15332 -10.8545 -17.3379 -18.7598 -20.5l-12.7803 -5.12012c-3.1582 -1.2627 -8.48145 -2.28809 -11.8828 -2.28809c-3.74902 0 -9.57129 1.23535 -12.9971 2.75781zM52 320\r\n-c-11.04 0 -20 -8.95996 -20 -20s8.95996 -20 20 -20s20 8.95996 20 20s-8.95996 20 -20 20zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-pawn\" unicode=\"&#xf443;\" horiz-adv-x=\"320\" \r\n-d=\"M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.4082 46.5918 104 104 104s104 -46.5918 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-5.49023\r\n-c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h25.0996zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-queen\" unicode=\"&#xf445;\" \r\n-d=\"M256 336c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56s56 -25.0879 56 -56s-25.0879 -56 -56 -56zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM504.87 263.84\r\n-c3.93457 -2.62109 7.12891 -8.58691 7.12891 -13.3154c0 -2.08496 -0.756836 -5.29004 -1.68945 -7.1543l-102.55 -211.37h-303.52l-102.55 211.33c-0.932617 1.86426 -1.68945 5.06934 -1.68945 7.1543c0 4.72852 3.19434 10.6943 7.12891 13.3154l28.5703 16\r\n-c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c7.86035 -10.6357 24.9736 -19.2676 38.1992 -19.2676c0.922852 0 2.41992 0.0527344 3.34082 0.118164c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39746 6.00293 13.4004 13.4004 13.4004v0h38.7695\r\n-c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.42969 -21.0361 25.4717 -38.1094 46.9697 -38.1094s42.54 17.0732 46.9697 38.1094c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39746 0 13.4004 -6.00293 13.4004 -13.4004\r\n-c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.48926 -0.484375 6.56738 -0.878906 9.10352 -0.878906c13.166 0 30.2471 8.56152 38.127 19.1094c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chess-rook\" unicode=\"&#xf447;\" horiz-adv-x=\"384\" \r\n-d=\"M368 416c8.83203 0 16 -7.16797 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83203 7.16797 16 16 16h56.0996c8.83203 0 16 -7.16797 16 -16v-48h47.9004v48c0 8.83203 7.16797 16 16 16h80\r\n-c8.83203 0 16 -7.16797 16 -16v-48h48v48c0 8.83203 7.16797 16 16 16h56zM224 128v64c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-64h64zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h352z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dumbbell\" unicode=\"&#xf44b;\" horiz-adv-x=\"640\" \r\n-d=\"M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48\r\n-c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48\r\n-c-13.2998 0 -24 10.7002 -24 24v168h-128v-168c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v400c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-168h128v168c0 13.2998 10.7002 24 24 24h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"football-ball\" unicode=\"&#xf44e;\" horiz-adv-x=\"496\" \r\n-d=\"M481.5 387.7c6.2998 -23.9004 13.7002 -61 14.5 -104.5l-156.6 156.8c43.5996 -0.900391 80.8994 -8.5 104.8 -14.9004c18.2002 -4.89941 32.5 -19.1992 37.2998 -37.3994zM14.5 -3.7002c-6.2998 23.9004 -13.7002 61 -14.5 104.5l156.6 -156.8\r\n-c-43.5996 0.900391 -80.8994 8.5 -104.8 14.9004c-18.2002 4.89941 -32.5 19.1992 -37.2998 37.3994zM4.2002 164.6c22.5996 152.7 138.899 252 271.399 271.4l216.301 -216.6c-22.7002 -152.7 -139 -252 -271.5 -271.4zM321.5 288.2l-28.2998 -28.5l-28.2998 28.2998\r\n-c-3.10059 3.09961 -8.2002 3.09961 -11.3008 0l-11.2998 -11.2998c-3.09961 -3.10059 -3.09961 -8.2002 0 -11.2998l28.2998 -28.3008l-22.5996 -22.5996l-28.2998 28.2998c-3.10059 3.10059 -8.2002 3.10059 -11.2998 0l-11.3008 -11.2998\r\n-c-3.09961 -3.09961 -3.09961 -8.2002 0 -11.2998l28.3008 -28.2998l-22.6006 -22.6006l-28.2998 28.2998c-3.09961 3.10059 -8.2002 3.10059 -11.2998 0l-11.2998 -11.2998c-3.10059 -3.09961 -3.10059 -8.2002 0 -11.2998l28.2998 -28.2002l-28.2998 -28.2998\r\n-c-3.10059 -3.09961 -3.10059 -8.2002 0 -11.2998l11.2998 -11.2998c3.09961 -3.10059 8.2002 -3.10059 11.2998 0l28.2998 28.2998l28.2998 -28.2998c3.10059 -3.10059 8.2002 -3.10059 11.3008 0l11.2998 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998\r\n-l-28.2998 28.2998l22.5996 22.6006l28.2998 -28.3008c3.10059 -3.09961 8.2002 -3.09961 11.2998 0l11.3008 11.3008c3.09961 3.09961 3.09961 8.19922 0 11.2998l-28.3008 28.2998l22.6006 22.7002l28.2998 -28.2998c3.09961 -3.10059 8.2002 -3.10059 11.2998 0\r\n-l11.2998 11.2998c3.10059 3.09961 3.10059 8.2002 0 11.2998l-28.2998 28.2998l28.2998 28.2998c3.10059 3.10059 3.10059 8.2002 0 11.3008l-11.2998 11.2998c-3.09961 3.09961 -8.2002 3.09961 -11.2998 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"golf-ball\" unicode=\"&#xf450;\" horiz-adv-x=\"416\" \r\n-d=\"M96 32h224c0 -17.7002 -14.2998 -32 -32 -32h-16c-17.7002 0 -32 -14.2998 -32 -32v-20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v20c0 17.7002 -14.2998 32 -32 32h-16c-17.7002 0 -32 14.2998 -32 32zM416 240\r\n-c0 -74.2002 -39 -139.2 -97.5 -176h-221c-58.5 36.7998 -97.5 101.8 -97.5 176c0 114.9 93.0996 208 208 208s208 -93.0996 208 -208zM235.9 196.1c18.2998 0 33.0996 14.8008 33.0996 33.1006c0 14.3994 -9.2998 26.2998 -22.0996 30.8994\r\n-c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006zM285 149.2c0 14.3994 -9.2998 26.2998 -22.0996 30.8994c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994\r\n-c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006c18.2998 0 33.0996 14.9004 33.0996 33.1006zM349 213.2c0 14.3994 -9.2998 26.2998 -22.0996 30.8994c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006\r\n-c18.2998 0 33.0996 14.9004 33.0996 33.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hockey-puck\" unicode=\"&#xf453;\" \r\n-d=\"M0 288c0 53 114.6 96 256 96s256 -43 256 -96s-114.6 -96 -256 -96s-256 43 -256 96zM0 205.8c113.5 -82.3994 398.6 -82.2998 512 0v-109.8c0 -53 -114.6 -96 -256 -96s-256 43 -256 96v109.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quidditch\" unicode=\"&#xf458;\" horiz-adv-x=\"640\" \r\n-d=\"M256.5 231.2l86.7002 -109.2s-16.6006 -102.4 -76.6006 -150.1c-59.8994 -47.7002 -266.6 -34.1006 -266.6 -34.1006s3.7998 23.1006 11 55.4004l94.5996 112.2c4 4.69922 -0.899414 11.5996 -6.59961 9.5l-60.4004 -22.1006c14.4004 41.7002 32.7002 80 54.6006 97.5\r\n-c59.8994 47.7998 163.3 40.9004 163.3 40.9004zM494.5 96.2002c44 0 79.7998 -35.7002 79.7998 -79.9004c0 -44.0996 -35.7002 -79.8994 -79.7998 -79.8994s-79.7998 35.7998 -79.7998 79.8994c0 44.1006 35.7998 79.9004 79.7998 79.9004zM636.5 417\r\n-c5.5 -6.90039 4.40039 -17 -2.5 -22.5l-232.5 -177.9l34.0996 -42.8994c5.10059 -6.40039 1.7002 -15.9004 -6.2998 -17.6006l-58.7998 -12.3994l-86.7002 109.2l25.2998 54.5996c3.5 7.40039 13.5 8.59961 18.6006 2.2002l34.0996 -43l232.5 177.899\r\n-c6.90039 5.40039 16.9004 4.30078 22.4004 -2.59961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"square-full\" unicode=\"&#xf45c;\" \r\n-d=\"M512 -64h-512v512h512v-512z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"table-tennis\" unicode=\"&#xf45d;\" \r\n-d=\"M496.2 151.5c-64.1006 43.2002 -149.5 27.9004 -195.601 -34.2002l-211.5 211.5l56 56.1006c83.9004 84.0996 220 84.0996 303.9 0c63 -63.1006 78.7002 -155.601 47.2002 -233.4zM278.3 71.7998c-3.7002 -12.7002 -6.2998 -25.8994 -6.2002 -39.7002\r\n-c0 -19.5 3.90039 -38.0996 11 -55.0996c-25.6992 2.7998 -50.5996 13.5996 -70.2998 33.2998l-35.7002 35.7002l-89.2998 -103.3c-7.5 -8.60059 -20.7002 -9.10059 -28.7002 -1l-53.3994 53.5c-8.10059 8.09961 -7.60059 21.2998 1 28.7998l103 89.4004l-34.5 34.5996\r\n-c-39 39.0996 -44.6006 98.7998 -17.2998 144.1zM416 128c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volleyball-ball\" unicode=\"&#xf45f;\" \r\n-d=\"M231.39 204.52c-60.8945 -37.4102 -126.348 -123.516 -146.1 -192.199c-20.248 19.1953 -45.7393 55.5283 -56.9004 81.0996c22.8008 94.4004 89.5 174.4 180.301 216.8c11.8887 -27.9648 22.0586 -75.3184 22.6992 -105.7zM194.49 338.92\r\n-c-84 -39.5 -149 -108.4 -182.4 -191.5c-19.7998 109.3 34 212.4 125 262.2c19.0098 -16.9424 44.7246 -48.6162 57.4004 -70.7002zM382.09 173.82c-30.1689 3.6709 -76.2686 18.5352 -102.899 33.1797c-1.9541 71.4844 -43.8428 171.263 -93.5 222.72\r\n-c47.2998 14 84.1992 10.2002 98.8994 8.5c70.2002 -66.8994 106.101 -164.6 97.5 -264.399zM257.39 164.32c49.7002 -26.8008 104 -40.8008 158.601 -40.9004c22.6787 0.140625 58.9219 4.7998 80.8994 10.4004c-6.55762 -27.2012 -25.4639 -67.4766 -42.1992 -89.9004\r\n-c-93 -27.2998 -195.5 -9.5 -277.5 47.7998c18.2803 24.2959 54.21 56.8213 80.1992 72.6006zM159.09 64.6201c53.6006 -37.2998 144 -78.2002 256.9 -62.1006c-38.1611 -32.3467 -109.732 -58.5986 -159.758 -58.5986c-38.5156 0 -96.416 16.3516 -129.242 36.499\r\n-c6.39941 29.7998 16.8994 58.2002 32.0996 84.2002zM339.39 425.22c95.9004 -34.2998 164.601 -125.6 164.601 -233.399c0 -2 -0.299805 -4 -0.299805 -6c-23.9658 -7.83887 -63.8799 -14.2012 -89.0947 -14.2012c-0.166992 0 -0.438477 0.000976562 -0.605469 0.000976562\r\n-c7.89941 92.3994 -19.2998 183.2 -74.6006 253.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"allergies\" unicode=\"&#xf461;\" horiz-adv-x=\"448\" \r\n-d=\"M416 336c17.5996 0 32 -14.4004 32 -32v-176.1c-0.200195 -14 -1.90039 -28.6006 -5.09961 -42.3008l-26.5 -112.699c-5.10059 -21.7002 -24.4004 -37 -46.7002 -37h-197.601c-15.2998 0 -29.7998 7.39941 -38.7998 19.7998l-125.6 172.7\r\n-c-13 17.8994 -9.10059 42.8994 8.7998 55.8994s42.9004 9.10059 55.9004 -8.7998l23.5996 -32.5v241c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-152c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v184c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-184\r\n-c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v152c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-152c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v72c0 17.5996 14.4004 32 32 32zM176 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\r\n-s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM176 128c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM240 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM240 96c8.7998 0 16 7.2002 16 16\r\n-s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM304 64c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM336 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM368 128\r\n-c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"band-aid\" unicode=\"&#xf462;\" horiz-adv-x=\"640\" \r\n-d=\"M0 288c0 35.2998 28.7002 64 64 64h96v-320h-96c-35.2998 0 -64 28.7002 -64 64v192zM576 352c35.2998 0 64 -28.7002 64 -64v-192c0 -35.2998 -28.7002 -64 -64 -64h-96v320h96zM192 32v320h256v-320h-256zM368 264c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24\r\n-s24 10.7002 24 24s-10.7002 24 -24 24zM368 168c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 264c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 168\r\n-c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"box\" unicode=\"&#xf466;\" \r\n-d=\"M509.5 263.4c0.799805 -2.40039 0.799805 -4.90039 1.2002 -7.40039h-238.7v192h141.4c20.6992 0 39 -13.2002 45.5 -32.7998zM240 448v-192h-238.7c0.400391 2.5 0.400391 5 1.2002 7.40039l50.5996 151.8c6.5 19.5996 24.8008 32.7998 45.5 32.7998h141.4zM0 224h512\r\n-v-240c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v240z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"boxes\" unicode=\"&#xf468;\" horiz-adv-x=\"576\" \r\n-d=\"M560 160c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96l32 21.2998l32 -21.2998v96h80zM176 224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96\r\n-l32 21.2998l32 -21.2998v96h80c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224zM240 160c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96l32 21.2998\r\n-l32 -21.2998v96h80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"briefcase-medical\" unicode=\"&#xf469;\" \r\n-d=\"M464 320c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h80v48c0 26.5 21.5 48 48 48h160c26.5 0 48 -21.5 48 -48v-48h80zM192 352v-32h128v32h-128zM352 104v48c0 4.40039 -3.59961 8 -8 8h-56v56\r\n-c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"burn\" unicode=\"&#xf46a;\" horiz-adv-x=\"384\" \r\n-d=\"M192 448c111.8 -100.9 192 -220.6 192 -300.5c0 -124.5 -79 -211.5 -192 -211.5s-192 87 -192 211.5c0 79.5996 79.7002 199.2 192 300.5zM192 0c56.5 0 96 39 96 94.7998c0 13.5 -4.59961 61.5 -96 161.2c-91.4004 -99.7002 -96 -147.7 -96 -161.2\r\n-c0 -55.7998 39.5 -94.7998 96 -94.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"capsules\" unicode=\"&#xf46b;\" horiz-adv-x=\"576\" \r\n-d=\"M555.3 147.9c36.2002 -51.7002 23.7002 -123 -28 -159.2c-20 -14 -42.7998 -20.7002 -65.5 -20.7002c-36.0996 0 -71.5996 17 -93.7998 48.7998l-131.2 187.3c-5.5 7.90039 -9.5 16.4004 -12.7998 25v-149.1c0 -61.9004 -50.0996 -112 -112 -112s-112 50.0996 -112 112\r\n-v224c0 61.9004 50.0996 112 112 112c60 0 108.5 -47.2002 111.4 -106.5c7.7998 21 21.7998 40 41.5 53.7998c20 14 42.8994 20.7002 65.5 20.7002c36 0 71.5 -17 93.7998 -48.7998zM160 192v112c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-112h96zM354.8 147.1\r\n-l82.5 57.7002l-65.5996 93.7002c-9.40039 13.5 -24.7998 21.5 -41.2998 21.5c-10.3008 0 -20.3008 -3.09961 -28.8008 -9.09961c-11 -7.7002 -18.3994 -19.3008 -20.6992 -32.5c-2.40039 -13.2002 0.599609 -26.6006 8.2998 -37.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clipboard-check\" unicode=\"&#xf46c;\" horiz-adv-x=\"384\" \r\n-d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\r\n-s-10.7002 24 -24 24zM313.2 176.2c4.7002 4.7002 4.7998 12.2002 0.0996094 17l-28.2002 28.3994c-4.69922 4.7002 -12.2998 4.80078 -17 0.100586l-106 -105.2l-46 46.4004c-4.69922 4.69922 -12.2998 4.7998 -17 0.0996094l-28.3994 -28.2002\r\n-c-4.7002 -4.7002 -4.7998 -12.2998 -0.100586 -17l82.6006 -83.2998c4.7002 -4.7002 12.2998 -4.7998 17 -0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clipboard-list\" unicode=\"&#xf46d;\" horiz-adv-x=\"384\" \r\n-d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM96 24c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24\r\n-s10.7002 -24 24 -24zM96 120c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24zM96 216c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24zM192 408c-13.2998 0 -24 -10.7002 -24 -24\r\n-s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM320 40v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM320 136v16c0 4.40039 -3.59961 8 -8 8h-144\r\n-c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM320 232v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"diagnoses\" unicode=\"&#xf470;\" horiz-adv-x=\"640\" \r\n-d=\"M496 192c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM320 272c-48.5 0 -88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88s-39.5 -88 -88 -88zM59.7998 84l-17.7002 26.7002c-8.7998 13.2998 -7.59961 34.5996 10 45.0996\r\n-c7.40039 4.40039 17.5 10 28.7002 16c31.6006 -27.2998 79 -4.2002 79.2002 36c47.0996 17.7002 103 32.2002 160 32.2002c45.0996 0 89.2998 -9.2002 129.2 -21.7998c-11.7002 -52.9004 59.5996 -81.2002 87.7002 -35.1006\r\n-c21.3994 -10.3994 39.1992 -20.2998 51.0996 -27.3994c17.5996 -10.5 18.7998 -31.9004 10 -45.1006l-17.7998 -26.6992c-10.2002 -15.1006 -29.2998 -17.8008 -42.9004 -9.80078c-16.2002 9.60059 -56.2002 31.8008 -105.3 48.6006v-90.7002h-224v90.7998\r\n-c-49.0996 -16.8994 -89.0996 -39 -105.3 -48.5996c-13.6006 -8 -32.7002 -5.5 -42.9004 9.7998zM368 104c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 200c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24\r\n-s24 10.7002 24 24s-10.7002 24 -24 24zM112 192c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM624 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32\r\n-c0 8.7998 7.2002 16 16 16h608z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dna\" unicode=\"&#xf471;\" horiz-adv-x=\"448\" \r\n-d=\"M0.0996094 -46.0996c5.2002 42.8994 31.4004 153.899 159.9 238.1c-128.6 84.2002 -154.7 195.2 -159.9 238.1c-1.09961 9.5 6.40039 17.8008 16 17.8008l32.3008 0.0996094c8.09961 0.0996094 14.8994 -5.90039 16 -13.9004\r\n-c0.699219 -5 1.7998 -11.0996 3.39941 -18.0996h312.4c1.59961 7 2.7002 13.2002 3.39941 18.0996c1.10059 8 7.90039 13.9004 16 13.9004l32.4004 -0.0996094c9.59961 0 17 -8.30078 15.9004 -17.8008c-5.80078 -47.8994 -37.4004 -181.199 -209.5 -266.699\r\n-c-31.7002 -15.8008 -57.4004 -33.3008 -78.7002 -51.4004h127.6c-5.59961 4.7998 -10.7998 9.59961 -17 14.2002c21.4004 11.2002 40.9004 23 58.5 35.3994c93.2998 -78.6992 114.3 -169.8 118.9 -207.699c1.2002 -9.5 -6.2998 -17.8008 -15.9004 -17.8008\r\n-l-32.2998 -0.0996094c-8.09961 -0.0996094 -14.9004 5.90039 -16 13.9004c-0.599609 4.89941 -1.90039 11.1992 -3.5 18.0996h-312.3c-1.60059 -7 -2.7002 -13.2002 -3.40039 -18.0996c-1.09961 -8 -7.89941 -13.9004 -16 -13.9004l-32.2998 0.0996094\r\n-c-9.59961 0 -17 8.30078 -15.9004 17.8008zM224 228.4c25.0996 13.5996 46.4004 28.3994 64.2002 43.5996h-128.5c17.8994 -15.2002 39.2002 -29.9004 64.2998 -43.5996zM355.1 352h-262.1c5.7002 -10.4004 12.7002 -21.0996 21 -32h220.1\r\n-c8.2002 10.9004 15.2002 21.5996 21 32zM92.9004 32h261.6c-5.7998 10.4004 -12.9004 21.0996 -21.2002 32h-219.399c-8.2002 -10.9004 -15.2002 -21.5996 -21 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dolly\" unicode=\"&#xf472;\" horiz-adv-x=\"576\" \r\n-d=\"M294.2 170.3l-53 159.4c-2.7998 8.2998 1.7002 17.3994 10.0996 20.2002l61.6006 20.5l33.0996 -99.4004l60.7002 20.0996l-33.1006 99.4004l61.1006 20.4004c8.2998 2.7998 17.3994 -1.7002 20.2002 -10.1006l60.3994 -181.2\r\n-c2.7998 -8.2998 -1.7002 -17.3994 -10.0996 -20.1992l-161.5 -53.8008c-14.7998 11.3008 -31.5 19.7002 -49.5 24.7002zM575.2 121.6c2.7998 -8.39941 -1.7998 -17.3994 -10.1006 -20.1992l-213.3 -71.2002c-1.09961 -57.7998 -53.2002 -103.3 -113.399 -92.6006\r\n-c-39.4004 6.90039 -71.2002 39.8008 -77.3008 79.2002c-5.69922 36.9004 9.90039 70.1006 36 90.5l-92.1992 276.7h-88.9004c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h112c13.7998 0 26 -8.7998 30.4004 -21.9004l99.3994 -298.199\r\n-c29.9004 -0.600586 56.2998 -15 73.5 -37l213.5 71.1992c8.2998 2.80078 17.4004 -1.69922 20.2002 -10.0996zM256 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dolly-flatbed\" unicode=\"&#xf474;\" horiz-adv-x=\"640\" \r\n-d=\"M208 128c-8.7998 0 -16 7.2002 -16 16v256c0 8.7998 7.2002 16 16 16h144v-128l48 32l48 -32v128h144c8.7998 0 16 -7.2002 16 -16v-256c0 -8.7998 -7.2002 -16 -16 -16h-384zM624 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-82.7998\r\n-c1.7002 -5 2.89941 -10.4004 2.89941 -16c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 5.59961 1.10059 11 2.90039 16h-197.9c1.7002 -5 2.90039 -10.4004 2.90039 -16c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 5.59961 1.09961 11 2.90039 16h-82.9004\r\n-c-8.7998 0 -16 7.2002 -16 16v368h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h96c8.7998 0 16 -7.2002 16 -16v-368h496z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-medical\" unicode=\"&#xf477;\" horiz-adv-x=\"384\" \r\n-d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136z\r\n-M288 152c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56\r\n-c4.40039 0 8 3.59961 8 8v48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-medical-alt\" unicode=\"&#xf478;\" horiz-adv-x=\"448\" \r\n-d=\"M288 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v168h70.0996l34.8008 -69.5c2.89941 -5.90039 11.3994 -5.90039 14.2998 0l56.7998 113.7l22.0996 -44.2002h89.9004c8.7998 0 16 7.2002 16 16\r\n-s-7.2002 16 -16 16h-70.2002l-34.7002 69.5c-2.89941 5.90039 -11.3994 5.90039 -14.2998 0l-56.7998 -113.7l-19.9004 39.7998c-1.39941 2.7002 -4.19922 4.40039 -7.19922 4.40039h-140.9c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h56v232\r\n-c0 13.2998 10.7002 24 24 24h200v-136zM441 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"first-aid\" unicode=\"&#xf479;\" horiz-adv-x=\"576\" \r\n-d=\"M0 368c0 26.5 21.5 48 48 48h48v-448h-48c-26.5 0 -48 21.5 -48 48v352zM128 -32v448h320v-448h-320zM192 216v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8v48\r\n-c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-48v448h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hospital-alt\" unicode=\"&#xf47d;\" horiz-adv-x=\"576\" \r\n-d=\"M544 352c17.7002 0 32 -14.2998 32 -32v-368c0 -8.7998 -7.2002 -16 -16 -16h-544c-8.7998 0 -16 7.2002 -16 16v368c0 17.7002 14.2998 32 32 32h128v64c0 17.7002 14.2998 32 32 32h192c17.7002 0 32 -14.2998 32 -32v-64h128zM160 12v40c0 6.59961 -5.40039 12 -12 12\r\n-h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM160 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM320 12v40\r\n-c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM320 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40\r\n-c6.59961 0 12 5.40039 12 12zM336 310v20c0 3.2998 -2.7002 6 -6 6h-26v26c0 3.2998 -2.7002 6 -6 6h-20c-3.2998 0 -6 -2.7002 -6 -6v-26h-26c-3.2998 0 -6 -2.7002 -6 -6v-20c0 -3.2998 2.7002 -6 6 -6h26v-26c0 -3.2998 2.7002 -6 6 -6h20c3.2998 0 6 2.7002 6 6v26h26\r\n-c3.2998 0 6 2.7002 6 6zM480 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40\r\n-c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hospital-symbol\" unicode=\"&#xf47e;\" \r\n-d=\"M256 448c141.4 0 256 -114.6 256 -256s-114.6 -256 -256 -256s-256 114.6 -256 256s114.6 256 256 256zM368 72v240c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-88h-96v88c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-240\r\n-c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v88h96v-88c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"id-card-alt\" unicode=\"&#xf47f;\" horiz-adv-x=\"576\" \r\n-d=\"M528 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h144v-96h192v96h144zM288 224c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM381.3 0\r\n-c10.4004 0 18.7998 10 15.6006 19.7998c-8.40039 25.7002 -32.5 44.2002 -60.9004 44.2002h-8.2002c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-8.2002c-28.5 0 -52.5996 -18.5996 -60.9004 -44.2002\r\n-c-3.19922 -9.7998 5.2002 -19.7998 15.6006 -19.7998h186.6zM352 416v-96h-128v96c0 17.7002 14.2998 32 32 32h64c17.7002 0 32 -14.2998 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"notes-medical\" unicode=\"&#xf481;\" horiz-adv-x=\"384\" \r\n-d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\r\n-s-10.7002 24 -24 24zM288 104v48c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8\r\n-v56h56c4.40039 0 8 3.59961 8 8zM288 296v16c0 4.40039 -3.59961 8 -8 8h-176c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h176c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pallet\" unicode=\"&#xf482;\" horiz-adv-x=\"640\" \r\n-d=\"M144 192c-8.7998 0 -16 7.2002 -16 16v224c0 8.7998 7.2002 16 16 16h112v-128l64 32l64 -32v128h112c8.7998 0 16 -7.2002 16 -16v-224c0 -8.7998 -7.2002 -16 -16 -16h-352zM624 64h-48v-64h48c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608\r\n-c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v64h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16zM288 0v64h-160v-64h160zM512 0v64h-160v-64h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pills\" unicode=\"&#xf484;\" horiz-adv-x=\"576\" \r\n-d=\"M112 416c61.9004 0 112 -50.0996 112 -112v-224c0 -61.9004 -50.0996 -112 -112 -112s-112 50.0996 -112 112v224c0 61.9004 50.0996 112 112 112zM160 192v112c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-112h96zM299.7 221.7l210.8 -210.8\r\n-c3.5 -3.5 3.2002 -9.40039 -0.799805 -12.3008c-62.5 -45.2998 -150.101 -40.3994 -206.4 15.9004s-61.2002 143.9 -15.8994 206.4c2.89941 3.89941 8.7998 4.2998 12.2998 0.799805zM529.5 240.7c56.4004 -56.2998 61.2002 -143.8 15.9004 -206.4\r\n-c-2.90039 -3.89941 -8.80078 -4.2998 -12.3008 -0.799805l-210.8 210.8c-3.5 3.5 -3.2002 9.40039 0.799805 12.2998c62.5 45.3008 150.101 40.4004 206.4 -15.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"prescription-bottle\" unicode=\"&#xf485;\" horiz-adv-x=\"384\" \r\n-d=\"M32 256v64h320v-352c0 -17.5996 -14.4004 -32 -32 -32h-256c-17.5996 0 -32 14.4004 -32 32v64h120c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-120v64h120c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-120v64h120c4.40039 0 8 3.59961 8 8v16\r\n-c0 4.40039 -3.59961 8 -8 8h-120zM360 448c13.2002 0 24 -10.7998 24 -24v-48c0 -13.2002 -10.7998 -24 -24 -24h-336c-13.2002 0 -24 10.7998 -24 24v48c0 13.2002 10.7998 24 24 24h336z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"prescription-bottle-alt\" unicode=\"&#xf486;\" horiz-adv-x=\"384\" \r\n-d=\"M360 448c13.2002 0 24 -10.7998 24 -24v-48c0 -13.2002 -10.7998 -24 -24 -24h-336c-13.2002 0 -24 10.7998 -24 24v48c0 13.2002 10.7998 24 24 24h336zM32 -32v352h320v-352c0 -17.5996 -14.4004 -32 -32 -32h-256c-17.5996 0 -32 14.4004 -32 32zM96 152v-48\r\n-c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8v48c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"procedures\" unicode=\"&#xf487;\" horiz-adv-x=\"640\" \r\n-d=\"M528 224c61.9004 0 112 -50.0996 112 -112v-160c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v48h-512v-48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v352c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-240h192\r\n-v144c0 8.7998 7.2002 16 16 16h256zM136 352c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h140.9c3.09961 0 5.7998 -1.7002 7.19922 -4.40039l19.9004 -39.7998l49.7002 99.4004c5.89941 11.7998 22.7002 11.7998 28.5996 0l27.6006 -55.2002h102.1\r\n-c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16h-121.9l-22.0996 44.2002l-49.7002 -99.4004c-5.89941 -11.7998 -22.7002 -11.7998 -28.5996 0l-27.6006 55.2002h-126.1zM160 96c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64\r\n-s-28.7002 -64 -64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shipping-fast\" unicode=\"&#xf48b;\" horiz-adv-x=\"640\" \r\n-d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96v128h152c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-208c-4.40039 0 -8 3.59961 -8 8v16\r\n-c0 4.40039 3.59961 8 8 8h240c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-208c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h240c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-272c-4.40039 0 -8 3.59961 -8 8v16\r\n-c0 4.40039 3.59961 8 8 8h56v48c0 26.5 21.5 48 48 48h256c26.5 0 48 -21.5 48 -48v-48h44.0996c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48\r\n-s-48 -21.5 -48 -48s21.5 -48 48 -48zM480 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smoking\" unicode=\"&#xf48d;\" horiz-adv-x=\"640\" \r\n-d=\"M632 96c4.40039 0 8 -3.59961 8 -8v-144c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v144c0 4.40039 3.59961 8 8 8h48zM553.3 360.9c54.2998 -36.4004 86.7002 -97.1006 86.7002 -162.601v-30.2998c0 -4.40039 -3.59961 -8 -8 -8h-48\r\n-c-4.40039 0 -8 3.59961 -8 8v30.2998c0 50.2002 -25.2002 96.7002 -67.4004 124c-18.3994 12 -28.5996 33.4004 -28.5996 55.4004v62.2998c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-62.2998c0 -6.7998 3.59961 -13 9.2998 -16.7998zM432 96\r\n-c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-384c-26.5 0 -48 21.5 -48 48v64c0 26.5 21.5 48 48 48h384zM400 -16v64h-176v-64h176zM487.7 306.4c35.2998 -24.7002 56.2998 -64.8008 56.2998 -108.101v-30.2998c0 -4.40039 -3.59961 -8 -8 -8h-48\r\n-c-4.40039 0 -8 3.59961 -8 8v30.2998c0 27.4004 -13.2998 52.9004 -35.7002 68.6006c-35.7002 25.0996 -60.2998 63 -60.2998 106.699v66.4004c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-62.2998c0 -29 15.7998 -54.7002 39.7002 -71.2998zM536 96\r\n-c4.40039 0 8 -3.59961 8 -8v-144c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v144c0 4.40039 3.59961 8 8 8h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"syringe\" unicode=\"&#xf48e;\" \r\n-d=\"M201.5 273.2l64.9004 65l135.699 -135.7l-181.899 -181.9c-17.5 -17.5996 -41.5 -25.5996 -65.4004 -23l-63.5996 7.10059l-66.2998 -66.2998c-3.10059 -3.10059 -8.2002 -3.10059 -11.3008 0l-11.2998 11.2998c-3.09961 3.09961 -3.09961 8.2002 0 11.2998\r\n-l66.4004 66.4004l-7.10059 63.5996c-2.59961 24.2998 5.7002 48.0996 23 65.4004l26.4004 26.3994l55.7998 -55.8994c3.10059 -3.10059 8.2002 -3.10059 11.2998 0l11.3008 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998l-55.8008 55.7998l45.3008 45.2998\r\n-l55.6992 -55.7998c3.10059 -3.09961 8.2002 -3.09961 11.3008 0l11.2998 11.2998c3.09961 3.10059 3.09961 8.2002 0 11.3008zM509.7 366.5c3.09961 -3.2002 3.09961 -8.2002 0 -11.4004l-11.2998 -11.2998c-3.10059 -3.09961 -8.2002 -3.09961 -11.3008 0l-28.2998 28.2998\r\n-l-45.2998 -45.2998l73.5 -73.5c3.09961 -3.09961 3.09961 -8.2002 0 -11.2998l-33.9004 -34c-3.09961 -3.09961 -8.19922 -3.09961 -11.2998 0l-17 17l-135.7 135.9l-17 17c-3.09961 3.09961 -3.09961 8.19922 0 11.2998l33.9004 33.8994\r\n-c3.09961 3.10059 8.2002 3.10059 11.2998 0l17 -17l56.6006 -56.5996l45.2998 45.2998l-28.2998 28.2998c-3.10059 3.10059 -3.10059 8.2002 0 11.3008l11.2998 11.2998c3.09961 3.09961 8.2002 3.09961 11.2998 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tablets\" unicode=\"&#xf490;\" horiz-adv-x=\"640\" \r\n-d=\"M160 256c81.0996 0 147.5 -58.5 160 -134.7c0.799805 -4.7998 -3.2998 -9.2998 -8.2998 -9.2998h-303.3c-5 0 -9.10059 4.5 -8.30078 9.2998c12.4004 76.2002 78.8008 134.7 159.9 134.7zM311.6 80c5 0 9.10059 -4.5 8.30078 -9.2998\r\n-c-12.4004 -76.2002 -78.8008 -134.7 -159.9 -134.7s-147.5 58.5 -159.9 134.7c-0.799805 4.7998 3.30078 9.2998 8.30078 9.2998h303.199zM593.4 401.4c56.5 -56.5 61.3994 -144.2 15.8994 -206.9c-2.7998 -4 -8.7998 -4.2998 -12.2998 -0.799805l-211.3 211.399\r\n-c-3.5 3.40039 -3.2002 9.40039 0.799805 12.3008c62.7002 45.3994 150.4 40.5 206.9 -16zM363 382.3l211.3 -211.3c3.5 -3.40039 3.2002 -9.40039 -0.799805 -12.2998c-62.7002 -45.5 -150.4 -40.6006 -206.9 15.8994c-56.3994 56.5 -61.2998 144.2 -15.8994 206.9\r\n-c2.7998 4 8.7998 4.2998 12.2998 0.799805z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"thermometer\" unicode=\"&#xf491;\" \r\n-d=\"M476.8 427.6c49.4004 -40.6992 42.1006 -107.3 7.2002 -142.199l-254.2 -253.301h-99.8994l-89 -89c-9.30078 -9.39941 -24.5 -9.39941 -33.9004 0c-9.40039 9.30078 -9.40039 24.5 0 33.9004l89 89v100.9l45.2998 45.6992l50.1006 -50.1992\r\n-c3.09961 -3.10059 8.19922 -3.10059 11.2998 0l11.2998 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998l-50.0996 50.2002l45.0996 45.3994l50.2998 -50.1992c3.10059 -3.10059 8.2002 -3.10059 11.2998 0l11.3008 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998\r\n-l-50.3008 50.4004l45.1006 45.3994l50.3994 -50.5c3.10059 -3.09961 8.2002 -3.09961 11.3008 0l11.2998 11.2998c3.09961 3.10059 3.09961 8.2002 0 11.3008l-50.5 50.5l45.7002 46c36.3994 36.5 94.3994 40.8994 131.899 10.1992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vial\" unicode=\"&#xf492;\" horiz-adv-x=\"480\" \r\n-d=\"M477.7 261.9c3.09961 -3.10059 3.09961 -8.2002 0 -11.2002l-34 -33.9004c-3.10059 -3.09961 -8.2002 -3.09961 -11.2998 0l-11.2002 11.1006l-246.3 -245.7c-20.1006 -20.1006 -46.5 -30.1006 -72.9004 -30.1006c-28.9004 -0.0996094 -57.7998 11.9004 -78.4004 35.9004\r\n-c-35.6992 41.5 -29.3994 104.8 9.40039 143.5l242.4 241.9l-11.2002 11.0996c-3.10059 3.09961 -3.10059 8.2002 0 11.2998l34 33.9004c3.09961 3.09961 8.2002 3.09961 11.2998 0zM318 192l69.5 69.4004l-78.5 78.2998l-148 -147.7h157z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vials\" unicode=\"&#xf493;\" horiz-adv-x=\"640\" \r\n-d=\"M72 384c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h208c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-24v-240c0 -44.0996 -35.9004 -80 -80 -80s-80 35.9004 -80 80v240h-24zM144 384v-96h64v96h-64zM624 0c8.7998 0 16 -7.2002 16 -16\r\n-v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608zM360 384c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h208c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-24v-240\r\n-c0 -44.0996 -35.9004 -80 -80 -80s-80 35.9004 -80 80v240h-24zM432 384v-96h64v96h-64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"warehouse\" unicode=\"&#xf494;\" horiz-adv-x=\"640\" \r\n-d=\"M504 96c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-367.7c-4.39941 0 -8 3.59961 -8 8l0.100586 48c0 4.40039 3.59961 8 8 8h367.6zM504 0c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-368c-4.40039 0 -8 3.59961 -8 8\r\n-l0.0996094 48c0 4.40039 3.60059 8 8 8h367.9zM504 192c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-367.5c-4.40039 0 -8 3.59961 -8 8l0.0996094 48c0 4.40039 3.60059 8 8 8h367.4zM610.5 331c17.7998 -7.5 29.5 -24.9004 29.5 -44.2998v-342.7\r\n-c0 -4.40039 -3.59961 -8 -8 -8h-80c-4.40039 0 -8 3.59961 -8 8v248c0 17.5996 -14.5996 32 -32.5996 32h-382.801c-18 0 -32.5996 -14.4004 -32.5996 -32v-248c0 -4.40039 -3.59961 -8 -8 -8h-80c-4.40039 0 -8 3.59961 -8 8v342.7c0 19.3994 11.7002 36.7998 29.5 44.2998\r\n-l272 113.3c4.89062 2.0293 13.1553 3.6748 18.4502 3.6748c5.29395 0 13.5596 -1.64551 18.4502 -3.6748z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weight\" unicode=\"&#xf496;\" \r\n-d=\"M448 384c35.29 0 64 -28.71 64 -64v-320c0 -35.29 -28.71 -64 -64 -64h-384c-35.29 0 -64 28.71 -64 64v320c0 35.29 28.71 64 64 64h25.9805c-16.4209 -28.2803 -25.9805 -61.0098 -25.9805 -96c0 -105.87 86.1299 -192 192 -192s192 86.1299 192 192\r\n-c0 34.9902 -9.55957 67.7197 -25.9805 96h25.9805zM256 128c-88.3701 0 -160 71.6299 -160 160s71.6299 160 160 160s160 -71.6299 160 -160s-71.6299 -160 -160 -160zM255.7 279.94c-21.9404 -0.170898 -39.7002 -17.96 -39.7002 -39.9404c0 -22.0898 17.9102 -40 40 -40\r\n-s40 17.9102 40 40c0 10.5498 -4.26953 20 -10.9502 27.1602l33.6699 78.5498c3.4707 8.11035 -0.290039 17.5205 -8.41016 21c-8.08984 3.50977 -17.5293 -0.240234 -21.0293 -8.41016z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"x-ray\" unicode=\"&#xf497;\" horiz-adv-x=\"640\" \r\n-d=\"M240 64c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16zM400 32c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM624 448c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16\r\n-h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608zM624 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v352h512v-352h48zM480 200v16c0 4.40039 -3.59961 8 -8 8\r\n-h-136v32h104c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-104v24c0 4.40039 -3.59961 8 -8 8h-16c-4.40039 0 -8 -3.59961 -8 -8v-24h-104c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h104v-32h-136c-4.40039 0 -8 -3.59961 -8 -8v-16\r\n-c0 -4.40039 3.59961 -8 8 -8h136v-32h-104c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h104v-32h-64c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48s48 21.5 48 48v16h64v-16c0 -26.5 21.5 -48 48 -48s48 21.5 48 48s-21.5 48 -48 48h-64v32h104\r\n-c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-104v32h136c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"box-open\" unicode=\"&#xf49e;\" horiz-adv-x=\"640\" \r\n-d=\"M425.7 192c4.5 0 9 0.599609 13.2998 1.90039l137 39.0996v-178c0 -14.5996 -10 -27.4004 -24.2002 -31l-216.399 -54.0996c-10.1006 -2.5 -20.8008 -2.5 -31 0l-216.2 54.0996c-14.2002 3.5 -24.2002 16.2998 -24.2002 31v178l137 -39.2002\r\n-c4.2998 -1.2998 8.7998 -1.89941 13.2998 -1.89941c16.9004 0 32.7998 9 41.5 23.5l64.2002 106.6l64.2998 -106.6c8.60059 -14.4004 24.5 -23.4004 41.4004 -23.4004zM638.3 304.2c4.5 -9.2002 -0.299805 -20.2002 -10.2002 -23.1006l-197.899 -56.5\r\n-c-7.10059 -2 -14.7002 1 -18.5 7.30078l-91.7002 152.1l250.1 31.9004c6.90039 0.899414 13.6006 -2.7002 16.7002 -8.90039zM53.2002 407c3.09961 6.2002 9.7002 9.7002 16.5996 8.90039l250.2 -31.9004l-91.7998 -152c-3.7998 -6.2998 -11.4004 -9.2998 -18.5 -7.2998\r\n-l-197.9 56.5c-9.7998 2.7998 -14.7002 13.7998 -10.0996 23z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-dots\" unicode=\"&#xf4ad;\" \r\n-d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\r\n-c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208zM128 176c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 176c17.7002 0 32 14.2998 32 32\r\n-s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM384 176c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-slash\" unicode=\"&#xf4b3;\" horiz-adv-x=\"640\" \r\n-d=\"M64 208c0 18.5996 3.2998 36.5 8.90039 53.5996l325.5 -251.6c-24.7002 -6.40039 -51 -10 -78.4004 -10c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.90039 -7.2998 4.7998\r\n-c-1.2998 3 -0.700195 6.40039 1.5 8.7002c0.5 0.599609 42.2002 45.5 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7zM633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7\r\n-c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l105.1 -81.2998c45.2002 32.6006 104.301 52.7002 169.4 52.7002c141.4 0 256 -93.0996 256 -208c0 -49.2002 -21.4004 -94.0996 -56.5996 -129.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"couch\" unicode=\"&#xf4b8;\" horiz-adv-x=\"640\" \r\n-d=\"M160 224c0 35.2998 -28.7002 64 -64 64h-32c0 53 43 96 96 96h320c53 0 96 -43 96 -96h-32c-35.2998 0 -64 -28.7002 -64 -64v-64h-320v64zM576 256c35.2998 0 64 -28.7002 64 -64c0 -23.5996 -13 -44 -32 -55.0996v-120.9c0 -8.7998 -7.2002 -16 -16 -16h-64\r\n-c-8.7998 0 -16 7.2002 -16 16v16h-384v-16c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v120.9c-19 11.0996 -32 31.5 -32 55.0996c0 35.2998 28.7002 64 64 64h32c17.7002 0 32 -14.2998 32 -32v-96h384v96c0 17.7002 14.2998 32 32 32h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"donate\" unicode=\"&#xf4b9;\" \r\n-d=\"M256 32c-114.9 0 -208 93.0996 -208 208s93.0996 208 208 208s208 -93.0996 208 -208s-93.0996 -208 -208 -208zM233.8 350.6c-32.7002 -0.899414 -59 -28.3994 -59.0996 -62.3994c0 -27.7002 18 -52.4004 43.7002 -60.1006l62.2998 -18.6992\r\n-c7.09961 -2.10059 12.0996 -9.40039 12.0996 -17.6006c0 -10.0996 -7.2998 -18.2998 -16.2998 -18.2998h-38.9004c-6.39941 0 -12.3994 1.7002 -17.7998 5.09961c-4.5 2.80078 -10.2002 2.7002 -14 -1l-16.2998 -15.5c-5 -4.7998 -4.40039 -13 1.2002 -17.0996\r\n-c12.5 -9.2998 27.5 -14.5996 43 -15.4004v-17c0 -9.19922 7.39941 -16.5996 16.5996 -16.5996h11.1006c9.19922 0 16.5996 7.40039 16.5996 16.5996v16.8008c32.7002 0.899414 59.0996 28.3994 59.0996 62.3994c0 27.7002 -18 52.4004 -43.6992 60.1006l-62.3008 18.6992\r\n-c-7.09961 2.10059 -12.0996 9.40039 -12.0996 17.6006c0 10.0996 7.2998 18.2998 16.2998 18.2998h38.9004c6.39941 0 12.3994 -1.7002 17.7998 -5.09961c4.5 -2.80078 10.2002 -2.7002 14 1l16.2998 15.5c5 4.7998 4.40039 13 -1.2002 17.0996\r\n-c-12.5 9.2998 -27.5 14.5996 -43 15.4004v17c0 9.19922 -7.39941 16.5996 -16.5996 16.5996h-11.0996c-9.2002 0 -16.6006 -7.40039 -16.6006 -16.5996v-16.8008zM480 96c17.7002 0 32 -14.2998 32 -32v-96c0 -17.7002 -14.2998 -32 -32 -32h-448\r\n-c-17.7002 0 -32 14.2998 -32 32v96c0 17.7002 14.2998 32 32 32h32.4004c19.6992 -26 44.5996 -47.7002 73 -64h-63.8008c-5.2998 0 -9.59961 -3.59961 -9.59961 -8v-16c0 -4.40039 4.2998 -8 9.59961 -8h364.7c5.2998 0 9.60059 3.59961 9.60059 8v16\r\n-c0 4.40039 -4.30078 8 -9.60059 8h-63.7998c28.4004 16.2998 53.4004 38 73 64h32.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dove\" unicode=\"&#xf4ba;\" \r\n-d=\"M288 280.8c-50.7998 10.5 -96.5996 36.7998 -130.8 75.1006c11.2002 32.3994 27.7998 61.5996 48.8994 86.5c8.80078 10.5 25.7002 5.19922 27.8008 -8.30078c7 -45.8994 25.8994 -88.8994 54.0996 -125.199v-28.1006zM400 384h112l-32 -64v-160.1\r\n-c0 -88.4004 -71.5996 -159.9 -160 -159.9h-76.9004l-65.1992 -56.0996c-6.10059 -5.30078 -14.1006 -8.2002 -22.1006 -7.90039c-92.7998 3.7998 -135.8 49.4004 -153.2 76.2998c-6 9.2998 -1.19922 21.7002 9.5 24.4004l143.9 36\r\n-c-12.7998 9.59961 -25.7002 20.0996 -38.9004 32.7998c-51 49 -85.0996 115.1 -85.0996 185.9c0 41.3994 9.40039 80.5996 26 115.699c5.7998 12.3008 23.5 11.6006 29 -0.899414c40 -91.2002 128.6 -155.5 233 -161.7v59.4004c0 44.1992 35.7998 80.0996 80 80.0996z\r\n-M400 287.9c8.7998 0 16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-holding\" unicode=\"&#xf4bd;\" horiz-adv-x=\"576\" \r\n-d=\"M565.3 119.9c15.1006 -13.6006 13.9004 -36.8008 -1.2998 -48.9004l-151.2 -121c-11.3994 -9.09961 -25.5 -14 -40 -14h-356.8c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h55.4004l46.5 37.7002c21 17 47.0996 26.2998 74.0996 26.2998h160\r\n-c19.5 0 34.9004 -17.4004 31.5996 -37.4004c-2.59961 -15.6992 -17.3994 -26.5996 -33.2998 -26.5996h-78.2998c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h118.3c14.6006 0 28.7002 4.90039 40 14l92.4004 73.9004c12.3994 10 30.7998 10.6992 42.5996 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-holding-heart\" unicode=\"&#xf4be;\" horiz-adv-x=\"576\" \r\n-d=\"M275.3 197.5l-108.899 114.2c-31.6006 33.2002 -29.7002 88.2002 5.59961 118.8c30.7998 26.7002 76.7002 21.9004 104.9 -7.7998l11.0996 -11.6006l11.2002 11.7002c28.2002 29.6006 74.0996 34.4004 104.899 7.7002c35.4004 -30.5996 37.2002 -85.5996 5.60059 -118.8\r\n-l-108.9 -114.2c-7.09961 -7.40039 -18.5 -7.40039 -25.5 0zM565.3 119.9c15.1006 -13.6006 13.9004 -36.8008 -1.2998 -48.9004l-151.2 -121c-11.3994 -9.09961 -25.5 -14 -40 -14h-356.8c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h55.4004l46.5 37.7002\r\n-c21 17 47.0996 26.2998 74.0996 26.2998h160c19.5 0 34.9004 -17.4004 31.5996 -37.4004c-2.59961 -15.6992 -17.3994 -26.5996 -33.2998 -26.5996h-78.2998c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h118.3c14.6006 0 28.7002 4.90039 40 14l92.4004 73.9004\r\n-c12.3994 10 30.7998 10.6992 42.5996 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-holding-usd\" unicode=\"&#xf4c0;\" horiz-adv-x=\"576\" \r\n-d=\"M271.06 303.7c-24.0596 6.39941 -43.4297 24.7002 -46.5693 47.7002c-4.33984 32 20.6201 59.3994 53.5098 63v17.5996c0 8.7998 7.82031 16 17.3701 16h17.3701c9.5498 0 17.3701 -7.2002 17.3701 -16v-17.7197c10.2324 -1.05566 25.6982 -6.20801 34.5195 -11.5\r\n-c3.05469 -1.83984 5.53418 -6.22656 5.53418 -9.79199c0 -1.78516 -0.758789 -4.46777 -1.69434 -5.98828c-0.490234 -0.808594 -1.46191 -1.97266 -2.16992 -2.59961l-19 -17.5c-4.01953 -3.7002 -10.0693 -4.2002 -15.2998 -2\r\n-c-2.98145 1.20898 -8.0127 2.19434 -11.2305 2.19922h-35.5996c-5.03027 0 -9.12012 -3.7998 -9.12012 -8.39941c0.112305 -3.6416 3.08301 -7.27051 6.62988 -8.10059l54.2705 -14.2998c24.0996 -6.39941 43.4102 -24.7002 46.5596 -47.7002\r\n-c4.33984 -32 -20.5693 -59.3994 -53.5 -63v-17.5996c0 -8.7998 -7.83008 -16 -17.3799 -16h-17.3701c-9.54004 0 -17.3701 7.2002 -17.3701 16v17.7002c-10.2305 1.05566 -25.6904 6.20703 -34.5098 11.5c-3.06348 1.83594 -5.54883 6.22363 -5.54883 9.79492\r\n-c0 1.77051 0.74707 4.43359 1.66895 5.94531c0.510742 0.827148 1.51855 2.01953 2.25 2.65918l19 17.5c4.01953 3.7002 10.0596 4.2002 15.2998 2c2.9707 -1.20508 7.98438 -2.19043 11.1904 -2.19922h35.5996c5.03027 0 9.12012 3.7998 9.12012 8.39941\r\n-c-0.112305 3.6416 -3.08203 7.27051 -6.62988 8.10059zM565.27 119.9c5.92383 -5.26953 10.7432 -15.9814 10.7432 -23.9102c0 -8.49121 -5.38184 -19.6865 -12.0127 -24.9902l-151.23 -121c-9.67188 -7.72754 -27.5693 -14 -39.9492 -14h-0.0507812h-356.77\r\n-c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h55.4004l46.5 37.71c17.8789 14.5059 51.0762 26.2842 74.0996 26.29h160v0c17.6309 0 31.9668 -14.3096 32 -31.9404v-0.120117c0 -1.48438 -0.206055 -3.87695 -0.459961 -5.33984\r\n-c-2.54004 -15.6992 -17.3496 -26.5996 -33.25 -26.5996h-78.29c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16h118.27h0.176758c12.3496 0 30.1904 6.27148 39.8232 14l92.4004 73.9004c12.4004 10 30.7998 10.6992 42.5996 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hands\" unicode=\"&#xf4c2;\" horiz-adv-x=\"640\" \r\n-d=\"M204.8 217.6l57.6006 -76.7998c16.5996 -22.2002 25.5996 -49.0996 25.5996 -76.7998v-112c0 -8.7998 -7.2002 -16 -16 -16h-131.7c-7.2002 0 -13.5 4.7002 -15.2998 11.5996c-2 7.80078 -5.40039 15.2002 -10.4004 21.7002l-104.1 134.3\r\n-c-6.7998 8.5 -10.5 19.1006 -10.5 30v218.4c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-148.4l89.7998 -107.8c6 -7.2998 16.9004 -7.7998 23.6006 -1.09961l12.7998 12.7998c5.59961 5.59961 6.2998 14.5 1.5 20.9004l-38.1006 50.7998\r\n-c-10.5996 14.0996 -7.69922 34.2002 6.40039 44.7998s34.2002 7.7002 44.7998 -6.40039zM608 384c17.7002 0 32 -14.2998 32 -32v-218.4c0 -10.8994 -3.7002 -21.5 -10.5 -30l-104.1 -134.3c-5 -6.5 -8.40039 -13.8994 -10.4004 -21.7002\r\n-c-1.7998 -6.89941 -8.2002 -11.5996 -15.2998 -11.5996h-131.7c-8.7998 0 -16 7.2002 -16 16v112c0 27.7002 9 54.5996 25.5996 76.7998l57.6006 76.7998c10.5996 14.1006 30.7002 17 44.7998 6.40039s17 -30.7002 6.40039 -44.7998l-38.1006 -50.7998\r\n-c-4.7998 -6.40039 -4.09961 -15.3008 1.5 -20.9004l12.7998 -12.7998c6.60059 -6.60059 17.6006 -6.10059 23.6006 1.09961l89.7998 107.8v148.4c0 17.7002 14.2998 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hands-helping\" unicode=\"&#xf4c4;\" horiz-adv-x=\"640\" \r\n-d=\"M488 256c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8v-64c0 -17.7002 -14.2998 -32 -32 -32h-16c0 -35.2998 -28.7002 -64 -64 -64h-136.6l-103.4 -59.7002c-15.2998 -8.7998 -34.9004 -3.59961 -43.7002 11.7002l-80 138.6\r\n-c-8.89941 15.3008 -3.59961 34.9004 11.7002 43.7002l80 46.2002v47.2998c0 22.4004 11.7998 43.2998 31.0996 54.7998l64.9004 39v-121.6c0 -39.7002 32.2998 -72 72 -72s72 32.2998 72 72v56h152zM635.7 293.4c8.7998 -15.3008 3.59961 -34.8008 -11.7002 -43.7002\r\n-l-80 -46.2002v28.5c0 30.9004 -25.0996 56 -56 56h-184v-88c0 -22.0996 -17.9004 -40 -40 -40s-40 17.9004 -40 40v126.3c0 11 5.59961 21.2998 15 27.1006l33.5 20.8994c10.2002 6.2998 21.9004 9.7002 33.9004 9.7002h102.199l103.4 59.7002\r\n-c15.2998 8.7998 34.9004 3.59961 43.7002 -11.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"parachute-box\" unicode=\"&#xf4cd;\" \r\n-d=\"M511.9 273c1.09961 -9.2002 -6.80078 -17 -16.1006 -17h-8.7002l-136.8 -151.9c0.700195 -2.69922 1.60059 -5.19922 1.60059 -8.09961v-128c0 -17.7002 -14.3008 -32 -32 -32h-128c-17.7002 0 -32 14.2998 -32 32v128c0 2.90039 0.899414 5.5 1.59961 8.09961\r\n-l-136.7 151.9h-8.7002c-9.19922 0 -17.0996 7.90039 -16 17c9.10059 75.5 78.4004 132.3 158.301 158.7c-36.4004 -39.4004 -62.4004 -100.601 -62.4004 -175.7h-28.0996l116.6 -129.5c2.5 0.599609 4.7998 1.5 7.5 1.5h48v128h-112c0 115.2 68.9004 192 128 192\r\n-s128 -76.7998 128 -192h-112v-128h48c2.7002 0 5 -0.900391 7.5 -1.5l116.6 129.5h-28.0996c0 75.0996 -26 136.3 -62.4004 175.7c79.9004 -26.2998 149.2 -83.1006 158.301 -158.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"people-carry\" unicode=\"&#xf4ce;\" horiz-adv-x=\"640\" \r\n-d=\"M128 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM512 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM637.7 -20.0996c6.59961 -16.4004 -1.40039 -35 -17.7998 -41.6006\r\n-c-3.90039 -1.59961 -7.90039 -2.2998 -11.9004 -2.2998c-12.7002 0 -24.7002 7.59961 -29.7002 20.0996l-27.7002 69.2002l2 18.2002l41.1006 46.4004zM603.5 189.7c4.59961 -20 -0.799805 -41.2002 -14.4004 -56.7002l-67.1992 -75.9004l-10.1006 -92.5996\r\n-c-1.7998 -16.4004 -15.7002 -28.5 -31.7998 -28.5c-1.2002 0 -2.2998 0.0996094 -3.5 0.200195c-17.5 1.89941 -30.2002 17.7002 -28.2998 35.2998l10.0996 92.7998c1.5 13 6.90039 25.1006 15.6006 35l43.2998 49l-17.6006 70.2998l-6.7998 -20.3994\r\n-c-4.09961 -12.6006 -11.8994 -23.4004 -24.5 -32.6006l-51.0996 -32.5c-4.60059 -2.89941 -12.1006 -4.59961 -17.2002 -5h-160c-5.09961 0.400391 -12.5996 2.10059 -17.2002 5l-51.0996 32.5c-12.6006 9.2002 -20.4004 20.1006 -24.5 32.6006l-6.7998 20.3994\r\n-l-17.6006 -70.2998l43.2998 -49c8.7002 -9.89941 14.1006 -22 15.6006 -35l10.0996 -92.7998c1.90039 -17.5996 -10.7002 -33.4004 -28.2998 -35.2998c-1.2002 -0.100586 -2.2998 -0.200195 -3.5 -0.200195c-16.2002 0 -30 12.2002 -31.7998 28.5l-10.1006 92.5996\r\n-l-67.1992 75.9004c-13.7002 15.5 -19 36.7002 -14.4004 56.7002l18.4004 80.2002c4.59961 20 18.5996 36.7998 37.5 44.8994c18.5 8 38.8994 6.7002 56.0996 -3.2998c22.7002 -13.4004 39.7998 -34.4004 48.0996 -59.4004l11.3008 -33.8994l16.0996 -10.2002v96\r\n-c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.2002 16 -16v-96l16 10.2002l11.2998 33.8994c8.40039 24.9004 25.4004 46 48.1006 59.4004c17.0996 10 37.5996 11.2998 56.0996 3.2998c18.9004 -8.09961 32.9004 -24.8994 37.5 -44.8994zM46.2998 89.9004l41.1006 -46.4004\r\n-l2 -18.2002l-27.7002 -69.2002c-6.5 -16.0996 -24.7998 -24.3994 -41.6006 -17.7998c-16.3994 6.60059 -24.3994 25.2002 -17.7998 41.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"piggy-bank\" unicode=\"&#xf4d3;\" horiz-adv-x=\"576\" \r\n-d=\"M560 224c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-48.7002c-9 -11.9004 -19.5 -22.4004 -31.2998 -31.2998v-80.7002c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v48h-128v-48c0 -8.7998 -7.2002 -16 -16 -16h-64\r\n-c-8.7998 0 -16 7.2002 -16 16v80.7002c-38.5996 29.2002 -64 75.0996 -64 127.3h-40c-33.2998 0 -59.9004 29.2002 -55.5 63.4004c3.59961 28.1992 29 48.5996 57.5 48.5996c3.2998 0 6 -2.7002 6 -6v-20c0 -3.2998 -2.7002 -6 -6 -6h-1\r\n-c-11.5996 0 -22.2998 -7.7998 -24.5 -19.2002c-3 -15.2998 8.7002 -28.7998 23.5 -28.7998h43.2002c14.8994 73 79.3994 128 156.8 128h128c7.90039 0 15.4004 -1.2002 23 -2.2998c17.5996 20.7998 43.5996 34.2998 73 34.2998h32l-18.9004 -75.5\r\n-c15.8008 -14.7998 28.6006 -32.5 37.4004 -52.5h29.5zM432 160c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 352c-16.4004 0 -32.2002 -2.2998 -47.4004 -6.2002c-0.0996094 2.10059 -0.599609 4.10059 -0.599609 6.2002\r\n-c0 53 43 96 96 96s96 -43 96 -96c0 -0.299805 -0.0996094 -0.5 -0.0996094 -0.799805c-5.2002 0.399414 -10.5 0.799805 -15.9004 0.799805h-128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ribbon\" unicode=\"&#xf4d6;\" horiz-adv-x=\"448\" \r\n-d=\"M6.09961 3.7002l117.2 130l79.2002 -87.9004l-91.7998 -101.899c-8 -8.80078 -21.4004 -10.5 -31.2998 -3.80078l-68.8008 27.9004c-12 8.09961 -14.0996 24.9004 -4.5 35.7002zM441.9 3.7002c9.69922 -10.7998 7.59961 -27.6006 -4.30078 -35.6006l-68.7998 -27.8994\r\n-c-9.89941 -6.7002 -23.2998 -5.10059 -31.2998 3.7998l-248.1 275.3c-48.6006 53.7998 -13 113.5 -11.5 116l43.5996 73.2002c4.2998 7.2002 9.90039 13.2998 16.7998 18c44 29.7002 130.7 27.5996 171.4 0c6.89941 -4.7002 12.5 -10.7998 16.7998 -18l43.7002 -73.5\r\n-c21.8994 -36.9004 17.2998 -83.5996 -11.4004 -115.5l-34.2002 -38l-79.0996 87.7002s52.7002 59 56 64.5996c-15.4004 8.40039 -40.2002 17.9004 -77.5 17.9004s-62.0996 -9.5 -77.5 -17.9004c3.40039 -5.5 295.4 -330.1 295.4 -330.1z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"route\" unicode=\"&#xf4d7;\" \r\n-d=\"M416 128c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96h-277.8c13.5 16.2998 31.2998 39.2002 47.2998 64h230.5c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32h-96c-52.9004 0 -96 43.0996 -96 96s43.0996 96 96 96h45.2998\r\n-c-23.0996 32.5996 -45.2998 70.5 -45.2998 96c0 53 43 96 96 96s96 -43 96 -96s-96 -160 -96 -160h-96c-17.5996 0 -32 -14.4004 -32 -32s14.4004 -32 32 -32h96zM416 384c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM96 192\r\n-c53 0 96 -43 96 -96s-96 -160 -96 -160s-96 107 -96 160s43 96 96 96zM96 64c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"seedling\" unicode=\"&#xf4d8;\" \r\n-d=\"M64 352c123.7 0 224 -100.3 224 -224v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v144c-123.7 0 -224 100.3 -224 224h64zM448 416h64c0 -115.9 -88 -211.1 -200.7 -222.8c-10.7998 40.7002 -31.2998 77.3994 -59 107.6\r\n-c38.2998 68.7002 111.5 115.2 195.7 115.2z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sign\" unicode=\"&#xf4d9;\" \r\n-d=\"M496 384c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-368v-368c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v368h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v48c0 8.7998 7.2002 16 16 16h32\r\n-c8.7998 0 16 -7.2002 16 -16v-48h368zM160 64v224h320v-224h-320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile-wink\" unicode=\"&#xf4da;\" horiz-adv-x=\"496\" \r\n-d=\"M0 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM200 240c0 17.7002 -14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32zM358.5 223.5l9.7002 -8.5c8.39941 -7.5 21.5 -0.299805 19.7998 10.7998\r\n-c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM157.8 122.2c-13.3994 16.2998 -38.0996 -4.10059 -24.5996 -20.4004\r\n-c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7002c13.5 16.2998 -11 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002s-67.7998 15.2998 -90.2002 42.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tape\" unicode=\"&#xf4db;\" horiz-adv-x=\"640\" \r\n-d=\"M224 256c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64s-64 28.7002 -64 64s28.7002 64 64 64zM624 32c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-400c-123.7 0 -224 100.3 -224 224s100.3 224 224 224s224 -100.3 224 -224\r\n-c0 -62.7002 -25.9004 -119.3 -67.4004 -160h243.4zM224 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck-loading\" unicode=\"&#xf4de;\" horiz-adv-x=\"640\" \r\n-d=\"M50.2002 72.4004l-49.6006 185.5c-2.2998 8.5 2.80078 17.2998 11.3008 19.5996l77.2998 20.7002l24.7998 -92.7002l61.7998 16.5l-24.7998 92.7002l77.2002 20.7998c8.5 2.2998 17.2998 -2.7998 19.5996 -11.2998l49.7002 -185.5\r\n-c2.2998 -8.5 -2.7998 -17.2998 -11.2998 -19.6006l-216.4 -58c-8.5 -2.2998 -17.2998 2.80078 -19.5996 11.3008zM384 448h256v-400c0 -61.9004 -50.0996 -112 -112 -112c-60.4004 0 -109.2 47.9004 -111.6 107.7l-393.7 -107.4\r\n-c-4.2002 -1.2002 -8.60059 1.2998 -9.7998 5.60059l-12.6006 46.2998c-1.2002 4.2002 1.2998 8.59961 5.60059 9.7998l346.1 94.4004v323.6c0 17.7002 14.2998 32 32 32zM528 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck-moving\" unicode=\"&#xf4df;\" horiz-adv-x=\"640\" \r\n-d=\"M621.3 210.7c12 -12 18.7002 -28.2002 18.7002 -45.2002v-85.5c0 -8.7998 -7.2002 -16 -16 -16h-17.5996c1 -5.2002 1.59961 -10.5 1.59961 -16c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 5.5 0.5 10.7998 1.59961 16h-163.199\r\n-c1 -5.2002 1.59961 -10.5 1.59961 -16c0 -44.2002 -35.7998 -80 -80 -80c-26.2998 0 -49.4004 12.7998 -64 32.4004c-14.5996 -19.5 -37.7002 -32.4004 -64 -32.4004c-44.2002 0 -80 35.7998 -80 80v336c0 17.7002 14.2998 32 32 32h416c17.7002 0 32 -14.2998 32 -32\r\n-v-96.0996h37.5c17 0 33.2998 -6.7002 45.2998 -18.7002zM80 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM208 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM480 240v-48\r\n-h92.0996l-43.2998 43.2998c-3 3 -7 4.7002 -11.2998 4.7002h-37.5zM528 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"video-slash\" unicode=\"&#xf4e2;\" horiz-adv-x=\"640\" \r\n-d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.7998 -22.4004l-19.5996 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-178.5 138l-373.3 288.6l-36.5 28.2002c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998\r\n-l78.4004 -60.5996h244.3c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-178l32 -24.7002v137.2l109.6 75.5996c21.3008 14.6006 50.4004 -0.299805 50.4004 -25.7998v-257c0 -17.4004 -13.7998 -29.7002 -29.2002 -31.0996zM32 47.7998v245.5l365.8 -282.8\r\n-c-8.2002 -6.5 -18.3994 -10.5 -29.5996 -10.5h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wine-glass\" unicode=\"&#xf4e3;\" horiz-adv-x=\"288\" \r\n-d=\"M216 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-208c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h40v117.18c-68.4697 15.8906 -118.05 79.9102 -111.4 154.16l15.96 178.11c0.730469 8.24023 7.55078 14.5498 15.7002 14.5498h223.48\r\n-c8.16016 0 14.9697 -6.30957 15.71 -14.5498l15.9502 -178.101c6.64941 -74.25 -42.9307 -138.27 -111.4 -154.159v-117.19h40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-alt-slash\" unicode=\"&#xf4fa;\" horiz-adv-x=\"640\" \r\n-d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l135.5 -104.8\r\n-c16 62.1006 71.9004 108.2 139 108.2c79.5 0 144 -64.5 144 -144c0 -54.0996 -30.2002 -100.7 -74.4004 -125.3zM198.4 128h47.3994l248.4 -192h-382.2c-26.5 0 -48 21.5 -48 48v9.59961c0 74.2002 60.2002 134.4 134.4 134.4z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-astronaut\" unicode=\"&#xf4fb;\" horiz-adv-x=\"448\" \r\n-d=\"M64 224c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h13.5c24.7002 56.5 80.9004 96 146.5 96s121.8 -39.5 146.5 -96h13.5c8.7998 0 16 -7.2002 16 -16v-96c0 -8.7998 -7.2002 -16 -16 -16h-13.5c-24.7002 -56.5 -80.9004 -96 -146.5 -96\r\n-s-121.8 39.5 -146.5 96h-13.5zM104 312v-24c0 -53 43 -96 96 -96h48c53 0 96 43 96 96v24c0 22.0996 -21.5 40 -48 40h-144c-26.5 0 -48 -17.9004 -48 -40zM176 240l-12 36l-36 12l36 12l12 36l12 -36l36 -12l-36 -12zM327.6 126.6c67.5 -7.09961 120.4 -63.5996 120.4 -133\r\n-v-9.59961c0 -26.5 -21.5 -48 -48 -48h-80v64c0 17.7002 -14.2998 32 -32 32h-128c-17.7002 0 -32 -14.2998 -32 -32v-64h-80c-26.5 0 -48 21.5 -48 48v9.59961c0 69.4004 52.9004 125.9 120.4 133c29.8994 -19.2998 65.3994 -30.5996 103.6 -30.5996\r\n-s73.7002 11.2998 103.6 30.5996zM272 0c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16zM176 0c8.7998 0 16 -7.2002 16 -16v-48h-32v48c0 8.7998 7.2002 16 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-check\" unicode=\"&#xf4fc;\" horiz-adv-x=\"640\" \r\n-d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\r\n-c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992zM636.6 288.4c4.60059 -4.60059 4.5 -12.1006 -0.0996094 -16.8008l-141.3 -140.199c-4.7002 -4.60059 -12.2002 -4.60059 -16.7998 0.0996094\r\n-l-81.7002 82.2998c-4.60059 4.7002 -4.60059 12.2002 0.0996094 16.7998l28.1006 27.9004c4.69922 4.59961 12.1992 4.59961 16.7998 -0.0996094l45.5 -45.8008l104.8 104c4.7002 4.60059 12.2002 4.60059 16.7998 -0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-clock\" unicode=\"&#xf4fd;\" horiz-adv-x=\"640\" \r\n-d=\"M496 224c79.5996 0 144 -64.4004 144 -144s-64.4004 -144 -144 -144s-144 64.4004 -144 144s64.4004 144 144 144zM560 73.7002v12.5996c0 5.2998 -4.40039 9.7002 -9.7002 9.7002h-38.2998v54.2998c0 5.2998 -4.40039 9.7002 -9.7002 9.7002h-12.5996\r\n-c-5.2998 0 -9.7002 -4.40039 -9.7002 -9.7002v-76.5996c0 -5.2998 4.40039 -9.7002 9.7002 -9.7002h60.5996c5.2998 0 9.7002 4.40039 9.7002 9.7002zM320 80c0 -59.5 29.7998 -112.1 75.0996 -144h-347.1c-26.5 0 -48 21.5 -48 48v41.5996\r\n-c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992c8.40039 0 16.6006 -1 24.6006 -2.5c-11.5 -23.4004 -18.2002 -49.7002 -18.2002 -77.5zM224 192c-70.7002 0 -128 57.2998 -128 128\r\n-s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-cog\" unicode=\"&#xf4fe;\" horiz-adv-x=\"640\" \r\n-d=\"M610.5 74.7002l25.7998 -14.9004c2.90039 -1.7002 4.2998 -5.2002 3.2998 -8.5c-6.69922 -21.5996 -18.1992 -41.2002 -33.1992 -57.3994c-2.30078 -2.5 -6.10059 -3.10059 -9 -1.40039l-25.8008 14.9004c-10.8994 -9.30078 -23.3994 -16.5 -36.8994 -21.3008v-29.7998\r\n-c0 -3.39941 -2.40039 -6.39941 -5.7002 -7.09961c-21.2002 -4.7998 -43.9004 -5 -66.2002 0c-3.2998 0.700195 -5.7002 3.7002 -5.7002 7.09961v29.7998c-13.5 4.80078 -26 12 -36.8994 21.3008l-25.7998 -14.9004c-3 -1.7002 -6.7002 -1.09961 -9 1.40039\r\n-c-15 16.2998 -26.5 35.7998 -33.2002 57.3994c-1 3.2998 0.299805 6.7998 3.2998 8.5l25.7998 14.9004c-2.59961 14.0996 -2.59961 28.5 0 42.5996l-25.7998 14.9004c-2.90039 1.7002 -4.2998 5.2002 -3.2998 8.5c6.7002 21.5996 18.2002 41.2002 33.2002 57.3994\r\n-c2.2998 2.5 6.09961 3.10059 9 1.40039l25.7998 -14.9004c10.8994 9.30078 23.3994 16.5 36.8994 21.3008v29.7998c0 3.39941 2.40039 6.39941 5.7002 7.09961c21.2002 4.7998 43.9004 5 66.2002 0c3.2998 -0.700195 5.7002 -3.7002 5.7002 -7.09961v-29.7998\r\n-c13.5 -4.80078 26 -12 36.8994 -21.3008l25.8008 14.9004c3 1.7002 6.69922 1.09961 9 -1.40039c15 -16.1992 26.5 -35.7998 33.1992 -57.3994c1 -3.2998 -0.299805 -6.7998 -3.2998 -8.5l-25.7998 -14.9004c2.59961 -14.0996 2.59961 -28.5 0 -42.5996zM496 47.5\r\n-c26.7998 0 48.5 21.7998 48.5 48.5s-21.7998 48.5 -48.5 48.5s-48.5 -21.7998 -48.5 -48.5s21.7002 -48.5 48.5 -48.5zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM425.2 -34.5v-9.2002\r\n-c0 -4.09961 0.799805 -8 2 -11.7998c-7.7002 -5.2998 -17.1006 -8.5 -27.2002 -8.5h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992\r\n-c3.90039 0 7.60059 -0.900391 11.4004 -1.2002c-1 -2.89941 -2.2998 -5.7998 -3.2002 -8.7002c-5.5 -17.6992 1.90039 -36.5 17.9004 -45.6992l7.89941 -4.60059c-0.0996094 -2.59961 -0.0996094 -5.2002 0 -7.7998l-7.89941 -4.59961\r\n-c-16 -9.30078 -23.4004 -28 -17.9004 -45.7002c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.6006c7.5 -8 18 -12.5996 28.9004 -12.5996c6.7998 0 13.5996 1.90039 19.5996 5.2998l7.90039 4.60059c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-edit\" unicode=\"&#xf4ff;\" horiz-adv-x=\"640\" \r\n-d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c39.9004 0 75.4004 -17.7998 99.9004 -45.5l-77.2998 -77.2998l-7.90039 -7.90039l-1.2002 -11.0996l-6.7998 -60.9004\r\n-c-0.799805 -7.2998 0.200195 -14.5 2.60059 -21.2998h-274.9c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992zM358.9 14.7002l137.899 137.8l71.7002 -71.7002\r\n-l-137.9 -137.899l-60.8994 -6.80078c-10.1006 -1.19922 -18.7002 7.40039 -17.6006 17.6006zM633 179.1c9.2998 -9.39941 9.2998 -24.5 0 -33.8994l-41.7998 -41.7998l-71.7998 71.6992l4.09961 4.10059l37.7998 37.7998c9.2998 9.2998 24.5 9.2998 33.7998 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-friends\" unicode=\"&#xf500;\" horiz-adv-x=\"640\" \r\n-d=\"M192 192c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM268.8 160c63.6006 0 115.2 -51.5996 115.2 -115.2v-28.7998c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v28.7998\r\n-c0 63.6006 51.5996 115.2 115.2 115.2h8.2998c20.9004 -10 43.9004 -16 68.5 -16s47.7002 6 68.5 16h8.2998zM480 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM528 160c61.9004 0 112 -50.0996 112 -112c0 -26.5 -21.5 -48 -48 -48h-176.6\r\n-c0.0996094 2.09961 0.599609 4.2002 0.599609 6.40039v38.3994c0 38.6006 -15.2998 73.5 -39.7002 99.7998c16.5 9.5 35.2998 15.4004 55.7002 15.4004h3.7998c13.9004 -4.7998 28.6006 -8 44.2002 -8s30.2998 3.2002 44.2002 8h3.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-graduate\" unicode=\"&#xf501;\" horiz-adv-x=\"448\" \r\n-d=\"M319.4 127.4c71.5 -3.10059 128.6 -61.6006 128.6 -133.801v-9.59961c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v9.59961c0 72.2002 57.0996 130.7 128.6 133.801l95.4004 -95.4004zM13.5996 368.2c-18.0996 4.39941 -18.0996 27.2002 0 31.5996\r\n-l190.601 45.9004c13 3.09961 26.7002 3.09961 39.7002 0l190.399 -46c18.2002 -4.40039 18.2002 -27.1006 0 -31.5l-96.2998 -23.2002c8.7002 -17.2002 14 -36.4004 14 -57c0 -70.7002 -57.2998 -128 -128 -128s-128 57.2998 -128 128c0 20.5996 5.40039 39.7998 14 57\r\n-l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998\r\n-c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-lock\" unicode=\"&#xf502;\" horiz-adv-x=\"640\" \r\n-d=\"M224 192c-70.6562 0 -128 57.3438 -128 128s57.3438 128 128 128s128 -57.3438 128 -128s-57.3438 -128 -128 -128zM320 128v-160c0.0644531 -9.49707 4.05176 -23.833 8.90039 -32h-280.9c-26.4961 0 -48 21.5039 -48 48v41.5996\r\n-c0.0166016 74.1729 60.2275 134.384 134.4 134.4h16.6992c19.1514 -8.83203 51.8105 -16 72.9004 -16s53.749 7.16797 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5c-4.41016 -7.84082 -8.03906 -21.5049 -8.09961 -30.5zM608 160c17.6641 0 32 -14.3359 32 -32v-160\r\n-c0 -17.6641 -14.3359 -32 -32 -32h-224c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h32v80c0 44.1602 35.8398 80 80 80s80 -35.8398 80 -80v-80h32zM496 16c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\r\n-M528 160v80c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-80h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-minus\" unicode=\"&#xf503;\" horiz-adv-x=\"640\" \r\n-d=\"M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z\r\n-M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-ninja\" unicode=\"&#xf504;\" horiz-adv-x=\"448\" \r\n-d=\"M325.4 158.8c68.5996 -6.09961 122.6 -63 122.6 -133.2v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 70.2002 54 127.101 122.6 133.2l101.4 -101.399zM32 256c0 33.4004 17.0996 62.7998 43.0996 80\r\n-c-26 17.2002 -43.0996 46.5996 -43.0996 80c32 0 60.0996 -15.7998 77.5 -39.7998c20.9004 42.3994 64.0996 71.7998 114.5 71.7998c70.7002 0 128 -57.2998 128 -128s-57.2998 -128 -128 -128c-58.7998 0 -107.7 39.7998 -122.8 93.7002\r\n-c-17.4004 -18.2002 -41.9004 -29.7002 -69.2002 -29.7002zM176 352c-17.7002 0 -32 -14.2998 -32 -32h160c0 17.7002 -14.2998 32 -32 32h-96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-shield\" unicode=\"&#xf505;\" horiz-adv-x=\"640\" \r\n-d=\"M622.3 176.9c10.7002 -4.2002 17.7002 -14 17.7002 -24.9004c0 -124.5 -81.5996 -193.9 -132.9 -213.9c-4.19922 -1.59961 -12.5996 -3.69922 -22.1992 0c-64.2002 25.1006 -132.9 102.301 -132.9 213.9c0 10.9004 7 20.7002 17.7002 24.9004l115.2 45\r\n-c9.59961 3.69922 18.0996 1.59961 22.1992 0zM496 -14.4004c34.5996 16.4004 89.9004 64.7002 95.5 151.801l-95.5 37.2998v-189.101zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM320 152\r\n-c0 -95.2998 45.2002 -169.1 99.2002 -212c-5.90039 -2.5 -12.4004 -4 -19.2002 -4h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992\r\n-c2.60059 0 5 -0.700195 7.5 -0.799805c-0.299805 -2.40039 -1.09961 -4.7002 -1.09961 -7.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-slash\" unicode=\"&#xf506;\" horiz-adv-x=\"640\" \r\n-d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l147.6 -114\r\n-c5.40039 65.6006 59.8008 117.4 126.9 117.4c70.7002 0 128 -57.2998 128 -128c0 -55.7998 -35.9004 -102.7 -85.7002 -120.3zM96 25.5996c0 66.4004 48.2002 121.101 111.4 132.101l286.8 -221.7h-350.2c-26.5 0 -48 21.5 -48 48v41.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-tag\" unicode=\"&#xf507;\" horiz-adv-x=\"640\" \r\n-d=\"M630.6 83.0996c12.5 -12.5 12.5 -32.6992 -0.0996094 -45.1992l-92.5 -92.5c-12.5 -12.5 -32.7998 -12.5 -45.2998 0l-90.2998 90.1992c-12 12 -18.7002 28.2002 -18.7002 45.2002v79.2002c0 17.7002 14.2998 32 32 32h79.2998c17 0 33.2998 -6.7002 45.2998 -18.7002z\r\n-M447.8 104.1c13.2998 0 24 10.8008 24 24c0 13.3008 -10.7002 24 -24 24s-24 -10.6992 -24 -24c0 -13.2998 10.7002 -24 24 -24zM224 192.1c-70.7002 0 -128 57.3008 -128 127.9c0 70.7002 57.2998 128 128 128s128 -57.2998 128 -127.9c0 -70.6992 -57.2998 -128 -128 -128\r\n-zM351.8 80.9004c0 -25.7002 10 -49.8008 28.1006 -67.9004l58 -58c-8.80078 -11.4004 -22.4004 -18.9004 -37.9004 -18.9004h-352c-26.5 0 -48 21.5 -48 48v41.6006c0 74.2002 60.2002 134.399 134.4 134.5h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16\r\n-s50.7002 5.7998 72.9004 16h16.6992c13.3008 0 26 -2.60059 38.2002 -6.2002v-73.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-tie\" unicode=\"&#xf508;\" horiz-adv-x=\"448\" \r\n-d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM319.8 159.4c71.2998 -3.40039 128.2 -61.7002 128.2 -133.801v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\r\n-c0 72.1006 56.9004 130.4 128.2 133.801l47.7998 -191.4l32 136l-32 56h96l-32 -56l32 -136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"users-cog\" unicode=\"&#xf509;\" horiz-adv-x=\"640\" \r\n-d=\"M610.5 106.7l25.7998 -14.9004c2.90039 -1.7002 4.2998 -5.2002 3.2998 -8.5c-6.69922 -21.5996 -18.1992 -41.2002 -33.1992 -57.3994c-2.30078 -2.5 -6.10059 -3.10059 -9 -1.40039l-25.8008 14.9004c-10.8994 -9.30078 -23.3994 -16.5 -36.8994 -21.3008v-29.7998\r\n-c0 -3.39941 -2.40039 -6.39941 -5.7002 -7.09961c-21.2002 -4.7998 -43.9004 -5 -66.2002 0c-3.2998 0.700195 -5.7002 3.7002 -5.7002 7.09961v29.7998c-13.5 4.80078 -26 12 -36.8994 21.3008l-25.7998 -14.9004c-3 -1.7002 -6.7002 -1.09961 -9 1.40039\r\n-c-15 16.2998 -26.5 35.7998 -33.2002 57.3994c-1 3.2998 0.299805 6.7998 3.2998 8.5l25.7998 14.9004c-2.59961 14.0996 -2.59961 28.5 0 42.5996l-25.7998 14.9004c-2.90039 1.7002 -4.2998 5.2002 -3.2998 8.5c6.7002 21.5996 18.2002 41.2002 33.2002 57.3994\r\n-c2.2998 2.5 6.09961 3.10059 9 1.40039l25.7998 -14.9004c10.8994 9.30078 23.3994 16.5 36.8994 21.3008v29.7998c0 3.39941 2.40039 6.39941 5.7002 7.09961c21.2002 4.7998 43.9004 5 66.2002 0c3.2998 -0.700195 5.7002 -3.7002 5.7002 -7.09961v-29.7998\r\n-c13.5 -4.80078 26 -12 36.8994 -21.3008l25.8008 14.9004c3 1.7002 6.69922 1.09961 9 -1.40039c15 -16.1992 26.5 -35.7998 33.1992 -57.3994c1 -3.2998 -0.299805 -6.7998 -3.2998 -8.5l-25.7998 -14.9004c2.59961 -14.0996 2.59961 -28.5 0 -42.5996zM496 79.5\r\n-c26.7998 0 48.5 21.7998 48.5 48.5s-21.7998 48.5 -48.5 48.5s-48.5 -21.7998 -48.5 -48.5s21.7002 -48.5 48.5 -48.5zM96 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM320 192c-61.9004 0 -112 50.0996 -112 112\r\n-s50 111.9 111.9 111.9c61.8994 0 112 -50.1006 112 -112c0 -17.2002 -4.2002 -33.4004 -11.2002 -48c-0.799805 -0.5 -1.60059 -0.900391 -2.40039 -1.40039l-7.89941 4.59961c-5.90039 3.5 -12.7002 5.30078 -19.6006 5.30078c-11 0 -21.5 -4.60059 -28.8994 -12.6006\r\n-c-15.8008 -17.0996 -28 -37.5 -36.3008 -59.2002c-1.89941 -0.0996094 -3.69922 -0.599609 -5.59961 -0.599609zM425.2 -2.5v-9.2002c0 -7.5 2.5 -14.2998 6.2002 -20.2998h-255.4c-26.5 0 -48 21.5 -48 48v28.7998c0 63.6006 51.5996 115.2 115.3 115.2h8.2998\r\n-c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998\r\n-c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004\r\n-c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"balance-scale-left\" unicode=\"&#xf515;\" horiz-adv-x=\"640\" \r\n-d=\"M528 0c8.83984 0 16 -7.16016 16.0098 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v342.75c-4.55957 2 -8.91992 4.34961 -12.9902 7.12012l-142.05 -47.6299c-8.37988 -2.81055 -17.4502 1.7002 -20.2598 10.0801l-10.1699 30.3398\r\n-c-2.80957 8.37988 1.7002 17.4502 10.0801 20.2598l128.39 43.0498c-0.419922 3.32031 -1.00977 6.60059 -1.00977 10.0303c0 44.1797 35.8203 80 80 80c29.6904 0 55.2998 -16.3604 69.1104 -40.3701l117.92 39.5303c8.37988 2.80957 17.4502 -1.7002 20.2598 -10.0801\r\n-l10.1699 -30.3398c2.80957 -8.37988 -1.7002 -17.4502 -10.0801 -20.2598l-132 -44.2607c-7.28027 -21.25 -22.96 -38.5293 -43.3799 -47.4697v-294.75h176zM639.98 144c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312\r\n-c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 160h144l-72 144zM170.93 197.51c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80\r\n-s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0zM56 32h144l-72 144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"balance-scale-right\" unicode=\"&#xf516;\" horiz-adv-x=\"640\" \r\n-d=\"M96 -16c0 8.83984 7.16016 16 16 16h175.99v294.76c-20.4199 8.93066 -36.1006 26.2207 -43.3799 47.4707l-132 44.2598c-8.37012 2.80957 -12.8906 11.8799 -10.0801 20.2598l10.1699 30.3398c2.80957 8.37012 11.8799 12.8906 20.2598 10.0801l117.93 -39.54\r\n-c13.8105 24.0098 39.4199 40.3701 69.1104 40.3701c44.1797 0 80 -35.8203 80 -80c0 -3.42969 -0.589844 -6.70996 -1.00977 -10.0303l128.399 -43.0498c8.37012 -2.80957 12.8906 -11.8799 10.0801 -20.2598l-10.1699 -30.3398\r\n-c-2.80957 -8.37012 -11.8799 -12.8906 -20.2598 -10.0801l-142.05 47.6299c-4.07031 -2.77051 -8.43066 -5.12012 -12.9902 -7.12012v-342.75c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v32zM0 144c0 16.1797 -1.32031 8.73047 85.0596 181.51\r\n-c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80zM56 160h144l-72 144zM384.02 16c0 16.1797 -1.33984 8.73047 85.04 181.51\r\n-c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312zM440 32h144l-72 144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blender\" unicode=\"&#xf517;\" \r\n-d=\"M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64\r\n-h-256l-8.73047 96h-103.27c-26.5098 0 -48 21.4902 -48 48v160c0 26.5098 21.4902 48 48 48h464l-17.46 -64h-166.54zM64 256h81.46l-11.6396 128h-69.8203v-128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book-open\" unicode=\"&#xf518;\" horiz-adv-x=\"576\" \r\n-d=\"M542.22 415.95c18.4199 1.04004 33.7803 -12.9902 33.7705 -30.7002v-337.84c0 -16.2305 -13.1299 -29.7705 -30.0205 -30.6602c-49.4697 -2.59961 -149.52 -12.0996 -218.7 -46.9199c-10.6494 -5.36035 -23.2793 1.93945 -23.2793 13.4902v363.87\r\n-c0 5.2793 2.62988 10.3291 7.26953 13.1699c67.2402 41.1592 176.16 52.4795 230.96 55.5898zM264.73 360.36c4.64941 -2.85059 7.26953 -7.7002 7.26953 -12.9902v-364.12c0 -11.5195 -12.5898 -18.8096 -23.21 -13.46c-69.1797 34.8398 -169.28 44.3496 -218.771 46.9502\r\n-c-16.8896 0.879883 -30.0195 14.4199 -30.0195 30.6602v337.85c0 17.71 15.3604 31.7402 33.7803 30.7002c54.7998 -3.12012 163.72 -14.4307 230.95 -55.5898z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"broadcast-tower\" unicode=\"&#xf519;\" horiz-adv-x=\"640\" \r\n-d=\"M150.94 256c-7.01074 0 -13.46 4.5 -15.4004 11.2402c-4.90039 16.9697 -7.54004 34.6396 -7.54004 52.7598s2.63965 35.79 7.53027 52.7695c1.9502 6.74023 8.39941 11.2305 15.4102 11.2305h33.7295c11.0098 0 18.6201 -10.8301 14.8604 -21.1797\r\n-c-4.93066 -13.5801 -7.5498 -27.9805 -7.5498 -42.8203s2.61914 -29.2402 7.5498 -42.8203c3.75 -10.3496 -3.85059 -21.1797 -14.8604 -21.1797h-33.7295zM89.9199 424.66c-16.54 -31.1406 -49.6104 -115.97 0.169922 -209.29\r\n-c5.66016 -10.6299 -1.92969 -23.3701 -13.9502 -23.3701h-34.8398c-6.18945 0 -11.9902 3.50977 -14.6094 9.13965c-23.5703 50.5303 -26.6904 94.1104 -26.6904 118.86c0 42.3496 9.40039 82.46 25.8896 118.69c2.60059 5.71973 8.4707 9.30957 14.7402 9.30957h35.3301\r\n-c12.0098 0 19.5996 -12.7197 13.96 -23.3398zM614.06 438.71c16.5205 -36.2295 25.9404 -76.3496 25.9404 -118.71s-9.42969 -82.4805 -25.96 -118.71c-2.59961 -5.70996 -8.45996 -9.29004 -14.7305 -9.29004h-35.2295c-12.1104 0 -19.6299 12.8398 -13.9102 23.5195\r\n-c48.1396 89.8105 17.9902 174.94 -0.280273 209.23c-5.63965 10.5898 2.04004 23.25 14.0205 23.25h35.4199c6.26953 0 12.1299 -3.58008 14.7295 -9.29004zM489.06 384c7.01074 0 13.46 -4.49023 15.4004 -11.2402c4.90039 -16.9697 7.54004 -34.6396 7.54004 -52.7598\r\n-s-2.62988 -35.79 -7.53027 -52.7598c-1.9502 -6.75 -8.38965 -11.2402 -15.4102 -11.2402h-33.7295c-11.0098 0 -18.6201 10.8301 -14.8604 21.1797c4.93066 13.5801 7.5498 27.9805 7.5498 42.8203s-2.61914 29.2402 -7.5498 42.8203\r\n-c-3.75 10.3496 3.85059 21.1797 14.8604 21.1797h33.7295zM372.76 283.88l130.5 -313.41c3.39062 -8.14941 -0.459961 -17.5195 -8.60938 -20.9199l-29.5107 -12.3096c-8.14941 -3.40039 -17.5098 0.450195 -20.9092 8.60938l-49.2002 118.15h-150.07l-49.1904 -118.15\r\n-c-3.38965 -8.14941 -12.7598 -12.0098 -20.9092 -8.60938l-29.5107 12.3096c-8.14941 3.40039 -12.0098 12.7705 -8.60938 20.9199l130.5 313.41c-7.0498 10.29 -11.2002 22.71 -11.2002 36.1201c0 35.3496 28.6396 64 63.96 64c35.3301 0 63.96 -28.6504 63.96 -64\r\n-c0 -13.4102 -4.15039 -25.8301 -11.2002 -36.1201zM271.62 128h96.7598l-48.3799 116.19z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"broom\" unicode=\"&#xf51a;\" horiz-adv-x=\"640\" \r\n-d=\"M256.47 231.23l86.7305 -109.181s-16.6006 -102.359 -76.5703 -150.12c-59.9697 -47.7793 -266.63 -34.1201 -266.63 -34.1201s3.7998 23.1406 11 55.4307l94.6201 112.17c3.96973 4.7002 -0.870117 11.6201 -6.65039 9.5l-60.3994 -22.0898\r\n-c14.4395 41.6602 32.7197 80.04 54.5996 97.4697c59.9697 47.7598 163.3 40.9404 163.3 40.9404zM636.53 416.97c5.48926 -6.91016 4.33984 -16.96 -2.5498 -22.4395l-232.48 -177.8l34.0898 -42.9209c5.08008 -6.39941 1.66016 -15.9092 -6.33984 -17.5996\r\n-l-58.7998 -12.4502l-86.7305 109.181l25.3301 54.5498c3.4502 7.41992 13.5 8.62012 18.5898 2.20996l34.1406 -42.9697l232.479 177.8c6.89062 5.48926 16.9199 4.33984 22.4102 -2.56055z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chalkboard\" unicode=\"&#xf51b;\" horiz-adv-x=\"640\" \r\n-d=\"M96 384v-352h-64v376c0 22.0596 17.9404 40 40 40h496c22.0596 0 40 -17.9404 40 -40v-376h-64v352h-448zM624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h272v64h192v-64\r\n-h144z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chalkboard-teacher\" unicode=\"&#xf51c;\" horiz-adv-x=\"640\" \r\n-d=\"M208 96c62.0596 0 112.33 -50.4805 112 -112.62c-0.139648 -26.2598 -21.7305 -47.3799 -48 -47.3799h-224c-26.2695 0 -47.8604 21.1201 -48 47.3799c-0.330078 62.1396 49.9404 112.62 112 112.62c2.38965 0 4.76953 -0.349609 7.0498 -1.08984\r\n-c12.9697 -4.20996 26.6006 -6.91016 40.9502 -6.91016s27.9805 2.7002 40.9404 6.91016c2.2793 0.740234 4.66992 1.08984 7.05957 1.08984zM160 128c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96s-42.9805 -96 -96 -96zM592 448\r\n-c26.4697 0 48 -22.25 48 -49.5898v-316.82c0 -27.3398 -21.5303 -49.5898 -48 -49.5898h-244.55c-6.57031 25.2695 -20.5898 47.3096 -39.6904 64h76.2402v64h128v-64h64v288h-352v-49.7998c-18.9004 11.0195 -40.5801 17.7998 -64 17.7998v46.4102\r\n-c0 27.3398 21.5303 49.5898 48 49.5898h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"church\" unicode=\"&#xf51d;\" horiz-adv-x=\"640\" \r\n-d=\"M464.46 201.32c9.63965 -5.78027 15.54 -16.2002 15.54 -27.4404v-237.88h-96v96c0 35.3496 -28.6504 64 -64 64s-64 -28.6504 -64 -64v-96h-96v237.88c0 10.0029 6.96191 22.2959 15.54 27.4404l112.46 67.4795v51.2002h-48c-8.83984 0 -16 7.16016 -16 16v32\r\n-c0 8.83984 7.16016 16 16 16h48v48c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-48h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-51.2002zM0 52.04c0.00195312 11.6455 8.68945 24.8252 19.3896 29.4199l108.61 46.54\r\n-v-192h-112c-8.83984 0 -16 7.16016 -16 16v100.04zM620.61 81.46c11.7598 -5.0498 19.3896 -16.6201 19.3896 -29.4199v-100.04c0 -8.83984 -7.16016 -16 -16 -16h-112v192z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"coins\" unicode=\"&#xf51e;\" \r\n-d=\"M0 42.7002c41.2998 -29.1006 116.8 -42.7002 192 -42.7002s150.7 13.5996 192 42.7002v-42.7002c0 -35.2998 -86 -64 -192 -64s-192 28.7002 -192 64v42.7002zM320 320c-106 0 -192 28.7002 -192 64s86 64 192 64s192 -28.7002 192 -64s-86 -64 -192 -64zM0 147.6\r\n-c41.2998 -34 116.9 -51.5996 192 -51.5996s150.7 17.5996 192 51.5996v-51.5996c0 -35.2998 -86 -64 -192 -64s-192 28.7002 -192 64v51.5996zM416 136.6v63.6006c38.7002 6.89941 72.7998 18.0996 96 34.5v-42.7002c0 -23.7002 -38.7002 -44.2998 -96 -55.4004zM192 288\r\n-c106 0 192 -35.7998 192 -80s-86 -80 -192 -80s-192 35.7998 -192 80s86 80 192 80zM411.3 231.7c-8.7998 23.7002 -30.5 42.8994 -60 57.2002c64.2002 3.19922 125.2 16.6992 160.7 41.7998v-42.7002c0 -24.2998 -40.7002 -45.5 -100.7 -56.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compact-disc\" unicode=\"&#xf51f;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM88 192c0 88.2002 71.7998 160 160 160v32c-105.9 0 -192 -86.0996 -192 -192h32zM248 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM248 224\r\n-c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crow\" unicode=\"&#xf520;\" horiz-adv-x=\"640\" \r\n-d=\"M544 416c53.0195 0 96 -28.6504 96 -64l-96 -16v-80c0 -87.2598 -58.2598 -160.8 -137.97 -184.14l41.2393 -111.53c2.27051 -6.23047 -0.939453 -13.1104 -7.16992 -15.3799l-22.5498 -8.20996c-6.22949 -2.27051 -13.1094 0.939453 -15.3799 7.16992l-44.5098 120.38\r\n-c-1.90039 -0.0595703 -3.75 -0.290039 -5.66016 -0.290039h-39.0596l38.3291 -103.68c2.27051 -6.23047 -0.939453 -13.1104 -7.16992 -15.3799l-22.5498 -8.20996c-6.22949 -2.27051 -13.1094 0.939453 -15.3799 7.16992l-44.4102 120.1h-96.4902l-121.539 -60.7695\r\n-c-20.0908 -10.04 -43.7305 4.56934 -43.7305 27.0293c0.00195312 8.33984 5.41797 19.168 12.0898 24.1699l371.91 292.59v20.9805c0 44.1797 35.8203 80 80 80c26.0898 0 49.04 -12.6797 63.6396 -32h16.3604zM464 344c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\r\n-s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crown\" unicode=\"&#xf521;\" horiz-adv-x=\"640\" \r\n-d=\"M528 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-416c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h416zM592 320c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48c-2.59961 0 -5.2002 0.400391 -7.7002 0.799805l-72.2998 -192.8h-384\r\n-l-72.2998 192.8c-2.5 -0.399414 -5.10059 -0.799805 -7.7002 -0.799805c-26.5 0 -48 21.5 -48 48s21.5996 48 48.0996 48s48 -21.5 48 -48c0 -7.09961 -1.69922 -13.7998 -4.39941 -19.7998l72.2998 -43.4004c15.2998 -9.2002 35.2998 -4 44.2002 11.6006l81.5 142.6\r\n-c-10.7002 8.7998 -17.7002 22 -17.7002 37c0 26.5 21.5 48 48 48s48 -21.5 48 -48c0 -15 -7 -28.2002 -17.7002 -37l81.5 -142.6c8.90039 -15.6006 28.7998 -20.8008 44.2002 -11.6006l72.4004 43.4004c-2.80078 6.09961 -4.40039 12.7002 -4.40039 19.7998\r\n-c0 26.5 21.5 48 48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice\" unicode=\"&#xf522;\" horiz-adv-x=\"640\" \r\n-d=\"M592 256c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v46.4199l136.26 136.26c24.1201 24.1201 29.6904 59.7305 17 89.3203h118.74zM480 72c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\r\n-s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM433.63 258.7c19.1602 -19.1602 19.1602 -50.2305 0 -69.4004l-174.939 -174.93c-19.1602 -19.1602 -50.2305 -19.1602 -69.3906 0l-174.93 174.939c-19.1602 19.1602 -19.1602 50.2305 0 69.3906l174.939 174.93\r\n-c19.1602 19.1602 50.2305 19.1602 69.3906 0zM96 200c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM224 72c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\r\n-M224 200c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM224 328c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM352 200c13.25 0 24 10.75 24 24\r\n-c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-five\" unicode=\"&#xf523;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM224 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-four\" unicode=\"&#xf524;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-one\" unicode=\"&#xf525;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM224 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-six\" unicode=\"&#xf526;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 160\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-three\" unicode=\"&#xf527;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM224 160\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-two\" unicode=\"&#xf528;\" horiz-adv-x=\"448\" \r\n-d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"divide\" unicode=\"&#xf529;\" horiz-adv-x=\"448\" \r\n-d=\"M224 96c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64s-64 28.6504 -64 64s28.6504 64 64 64zM224 288c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM416 240c17.6699 0 32 -14.3301 32 -32v-32\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"door-closed\" unicode=\"&#xf52a;\" horiz-adv-x=\"640\" \r\n-d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h111.99v397.2c0 28.0195 21.5293 50.7998 48 50.7998h288.01c26.4697 0 48 -22.7803 48 -50.7998v-397.2h112zM415.99 160\r\n-c17.6797 0 32.0098 14.3301 32 32c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"door-open\" unicode=\"&#xf52b;\" horiz-adv-x=\"640\" \r\n-d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-144v384h-96v64h112c26.4697 0 48 -22.1904 48 -49.4502v-334.55h80zM312.24 446.99c20.2002 5.24023 39.7598 -10.5898 39.7598 -32.1699v-478.82h-336c-8.83984 0 -16 7.16016 -16 16v32\r\n-c0 8.83984 7.16016 16 16 16h80v365.08c0 15.2197 9.99023 28.4795 24.2402 32.1699zM264 160c13.25 0 24 14.3301 24 32s-10.75 32 -24 32s-24 -14.3301 -24 -32s10.75 -32 24 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"equals\" unicode=\"&#xf52c;\" horiz-adv-x=\"448\" \r\n-d=\"M416 144c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384zM416 336c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32\r\n-v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"feather\" unicode=\"&#xf52d;\" \r\n-d=\"M467.14 403.16c50.5703 -50.5205 61.7002 -124.9 16.2607 -199.36l-131.54 -43.7998h97.7793c-9.92969 -10.6797 3.68066 3.07031 -46.3096 -46.8604l-147.57 -49.1396h98.1904c-74.9502 -73.1104 -194.53 -70.6504 -246.83 -54.9404l-66.1006 -66.0293\r\n-c-9.37988 -9.37012 -24.5996 -9.37012 -33.9795 0s-9.37988 24.5693 0 33.9395l259.52 259.25c6.25 6.25 6.25 16.3799 0 22.6299s-16.3896 6.25 -22.6494 0l-178.44 -178.25c-6.75 60.3408 3.18066 150.78 63.6406 211.17c24.7695 24.7402 7.13965 7.14062 85.75 85.6602\r\n-c90.6094 90.5107 189.729 88.21 252.279 25.7305z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frog\" unicode=\"&#xf52e;\" horiz-adv-x=\"576\" \r\n-d=\"M446.53 350.57c0 0 58.4297 -19.0605 98.9893 -41.2803c18.7607 -10.2803 30.4805 -29.8301 30.4805 -51.2305v-0.00292969c0 -18.8037 -13.3105 -41.5283 -29.71 -50.7266l-154.44 -86.6504l98.5205 -104.68h53.6299c17.6699 0 32 -14.3301 32 -32\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-90.3799l-118.53 125.94c5.07031 54.1494 -29.9297 85.0596 -40.7998 93.21c-36.8496 27.6191 -88.29 27.6592 -125.13 0l-34.7803 -26.0908c-7.07031 -5.2998 -8.49023 -15.3291 -3.18945 -22.4092\r\n-c5.31934 -7.10059 15.3496 -8.5 22.4092 -3.19043l32.7607 24.5898c20.6895 15.5303 48.3496 20.8105 72.2393 10.8799c44.0605 -18.3193 57.8506 -70.3701 33.71 -106.6l-35.7998 -48.3301h79.4902c17.6699 0 32 -14.3301 32 -32c0 -8.83984 -7.16016 -16 -16 -16h-304\r\n-c-34.9199 0 -63.8896 28.0996 -64 63.0195c-0.5 166.86 126.75 304.021 289.46 319.44c6.82031 37.25 39.3096 65.54 78.54 65.54c39.1904 0 71.6699 -28.2305 78.5303 -65.4297zM368 312c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\r\n-c-13.2598 0 -24 -10.7402 -24 -24c0 -13.25 10.7402 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gas-pump\" unicode=\"&#xf52f;\" \r\n-d=\"M336 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-320c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h320zM493.2 340.7c12 -12 18.7998 -28.2998 18.7998 -45.2998v-223.4c0 -42.2002 -36.5 -76 -79.5 -71.7002\r\n-c-37.5 3.90039 -64.5 38.2002 -64.5 75.9004v27.7998c0 22.0996 -17.9004 40 -40 40h-8v-112h-288v352c0 35.2998 28.7002 64 64 64h160c35.2998 0 64 -28.7002 64 -64v-192h8c48.5996 0 88 -39.4004 88 -88v-32c0 -13.2002 10.7998 -24 24 -24s24 10.7998 24 24v160.8\r\n-c-27.0996 3.90039 -48 27.1006 -48 55.2002v62.0996l-37.7002 37.7002c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l11.2998 11.2998c6.2002 6.2002 16.4004 6.2002 22.6006 0zM256 256v128h-160v-128h160z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glasses\" unicode=\"&#xf530;\" horiz-adv-x=\"576\" \r\n-d=\"M574.1 167.63c1.26074 -5.07031 1.90039 -10.2695 1.90039 -15.5v-70.25c0 -62.8896 -51.5801 -113.88 -115.2 -113.88h-37.1201c-60.2793 0 -110.37 45.9404 -114.87 105.37l-2.92969 38.6299h-35.75l-2.92969 -38.6299\r\n-c-4.50977 -59.4297 -54.6006 -105.37 -114.88 -105.37h-37.1201c-63.6201 0 -115.2 50.9902 -115.2 113.89v70.25c0.000976562 4.33984 0.852539 11.2793 1.90039 15.4902l45.3398 181.73c5.91016 23.6895 21.5898 44.0293 43 55.7998\r\n-c21.4395 11.7402 46.9697 14.1094 70.1895 6.33008l15.25 -5.08008c8.39062 -2.79004 12.9199 -11.8604 10.1201 -20.2402l-5.05957 -15.1797c-2.79004 -8.37988 -11.8506 -12.9102 -20.2305 -10.1201l-13.1699 4.38965\r\n-c-10.8701 3.62012 -22.9902 3.57031 -33.1494 -1.72949c-10.29 -5.36035 -17.5908 -14.5605 -20.3809 -25.8105l-38.46 -153.83c22.1904 6.81055 49.79 12.46 81.21 12.46c34.7803 0 73.9902 -7.00977 114.86 -26.75h73.1797\r\n-c40.8701 19.7207 80.0801 26.7402 114.851 26.7402c31.4102 0 59.0098 -5.64941 81.2002 -12.46l-38.46 153.82c-2.80078 11.2598 -10.0801 20.4502 -20.3701 25.8193c-10.1602 5.30078 -22.29 5.35059 -33.1602 1.73047l-13.1797 -4.38965\r\n-c-8.38086 -2.79004 -17.4404 1.73926 -20.2305 10.1201l-5.05957 15.1797c-2.80078 8.37988 1.72949 17.4502 10.1191 20.2402l15.25 5.08008c23.2207 7.7793 48.75 5.39941 70.1904 -6.33008c21.4102 -11.7607 37.0898 -32.1104 43 -55.8105zM203.38 78.21l3.12988 41.2197\r\n-c-22.6699 8.58984 -46.0693 12.9199 -69.9297 12.9199c-29.1602 0 -54.46 -6.42969 -72.5801 -12.9199v-37.54c0 -27.5098 22.9697 -49.8896 51.2002 -49.8896h37.1201c26.6602 0 49.0898 20.2998 51.0596 46.21zM512 81.8799l-0.00976562 37.54\r\n-c-18.1201 6.49023 -43.4307 12.9297 -72.5498 12.9297c-23.8701 0 -47.2803 -4.33008 -69.9502 -12.9199l3.12988 -41.2197c1.95996 -25.9102 24.3896 -46.21 51.0596 -46.21h37.1201c28.2305 0 51.2002 22.3701 51.2002 49.8799z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"greater-than\" unicode=\"&#xf531;\" horiz-adv-x=\"384\" \r\n-d=\"M365.52 238.15c11.2803 -5.25 18.4805 -16.5605 18.4902 -29.0107v-34.2295c-0.00195312 -11.2529 -8.28027 -24.2451 -18.4795 -29l-306.471 -142.91c-16.0195 -7.46973 -35.0596 -0.540039 -42.5293 15.4805l-13.5205 29\r\n-c-7.46973 16.0195 -0.540039 35.0596 15.4805 42.5293l218.47 101.891l-218.43 101.85c-16.0605 7.49023 -23.0107 26.5801 -15.5205 42.6396l13.5703 29.0801c7.49023 16.0605 26.5801 23.0107 42.6396 15.5205z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"greater-than-equal\" unicode=\"&#xf532;\" horiz-adv-x=\"448\" \r\n-d=\"M55.2197 340.31c-18.29 6 -27.7393 24.2607 -21.0996 40.79l12.0303 29.9199c6.63965 16.5303 26.8594 25.0605 45.1494 19.0605l301.72 -119.98c13.7705 -4.51953 22.9805 -16.6094 22.9805 -30.1699v-15.96c0 -13.5596 -9.20996 -25.6494 -22.9805 -30.1699\r\n-l-301.409 -119.859c-18.3906 -6.04004 -38.7002 2.54004 -45.3799 19.1494l-12.0908 30.0801c-6.67969 16.6104 2.81055 34.9697 21.2002 41l175.44 68.0498zM424 48c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-400c-13.25 0 -24 10.75 -24 24v48\r\n-c0 13.2598 10.75 24 24 24h400z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"helicopter\" unicode=\"&#xf533;\" horiz-adv-x=\"640\" \r\n-d=\"M304 64c-8.83105 0 -20.3018 5.73438 -25.5996 12.7998l-86.4004 115.2l-160 64l-31.5098 108.12c-2.53027 10.0996 5.10938 19.8799 15.5195 19.8799h39.9902c5.03027 0 9.78027 -2.37012 12.7998 -6.40039l43.2002 -57.5996h208v64h-176c-8.83984 0 -16 7.16016 -16 16\r\n-v32c0 8.83984 7.16016 16 16 16h416c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-176v-64c123.71 0 224 -100.29 224 -224c0 -17.6699 -14.3301 -32 -32 -32h-272zM416 252.49v-124.49h124.79c-12.7598 62.5596 -62.2402 111.7 -124.79 124.49z\r\n-M635.37 -10.8096c6.58984 -6.61035 6.04004 -17.5205 -0.980469 -23.6602c-33.1494 -29.0498 -53.5693 -29.5205 -68.4492 -29.5205h-325.94c-8.83984 0 -16 7.18066 -16 16.0303v32.0596c0 8.85059 7.16016 16.0303 16 16.0303h325.94\r\n-c10.7998 0 17.5498 4.48047 24.6396 11.25c6.40039 6.11035 16.3896 6.27051 22.6396 0.00976562z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"infinity\" unicode=\"&#xf534;\" horiz-adv-x=\"640\" \r\n-d=\"M471.1 352c93.1006 0 168.9 -71.7998 168.9 -160s-75.7998 -160 -168.9 -160c-66.0996 0 -117.8 41.2998 -151.1 78.5996c-33.2998 -37.2998 -85 -78.5996 -151.1 -78.5996c-93.1006 0 -168.9 71.7998 -168.9 160s75.7998 160 168.9 160\r\n-c66.0996 0 117.8 -41.2998 151.1 -78.5996c33.2998 37.2998 85 78.5996 151.1 78.5996zM168.9 128c38.0996 0 73.5996 36.4004 94 64c-20.6006 27.9004 -55.8008 64 -94 64c-40.2002 0 -72.9004 -28.7002 -72.9004 -64s32.7002 -64 72.9004 -64zM471.1 128\r\n-c40.2002 0 72.9004 28.7002 72.9004 64s-32.7002 64 -72.9004 64c-38.0996 0 -73.5996 -36.4004 -94 -64c20.6006 -27.9004 55.8008 -64 94 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiwi-bird\" unicode=\"&#xf535;\" horiz-adv-x=\"576\" \r\n-d=\"M575.81 230.02c0.300781 -5.7793 0.160156 -246.02 0.160156 -246.02c0 -7.30957 -4.95996 -13.7002 -12.0498 -15.5c-1.30957 -0.339844 -2.63965 -0.5 -3.9502 -0.5c-5.75 0 -11.1895 3.11035 -14.0498 8.33984l-74.4102 136.44\r\n-c-7.04004 -0.470703 2.43066 -0.780273 -23.0498 -0.780273c-54.5996 0 -106.39 -19.25 -152.13 -49.0596c-12.46 -8.12012 -26.0996 -14.4502 -40.3398 -19.5107v-59.4297c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v49.1797\r\n-c-5.32031 -0.449219 -10.5605 -1.17969 -16 -1.17969c-16.6006 0 -32.6406 2.2998 -48 6.25977v-54.2598c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v73.9902c-57.3105 33.21 -95.9502 95.0596 -95.9902 166.01\r\n-c-0.0800781 145.76 129.3 182.88 147.31 186.94c57.1709 12.9199 111.221 0.259766 153.21 -28.7002c43.4902 -29.9902 94.9209 -46.2402 147.74 -46.2402h9.37012c60.6504 0 115.01 -45.4102 118.18 -105.98zM463.97 200c13.25 0 24 10.75 24 24\r\n-c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM543.97 46.75v99.0596c-11.1299 -11.3799 -24.7393 -20.1494 -39.8594 -25.9795z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"less-than\" unicode=\"&#xf536;\" horiz-adv-x=\"384\" \r\n-d=\"M365.46 90.2598c16.0703 -7.49023 23.0205 -26.5801 15.5303 -42.6396l-13.5605 -29.0801c-7.48926 -16.0596 -26.5801 -23.0098 -42.6396 -15.5205l-306.31 142.83c-11.2705 5.25 -18.4805 16.5605 -18.4805 29v34.2402c0.00488281 11.252 8.2832 24.2432 18.4805 29\r\n-l306.46 142.91c16.0195 7.46973 35.0596 0.540039 42.5293 -15.4805l13.5205 -29c7.46973 -16.0195 0.540039 -35.0596 -15.4805 -42.5293l-218.47 -101.88z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"less-than-equal\" unicode=\"&#xf537;\" horiz-adv-x=\"448\" \r\n-d=\"M54.9805 233.8c-13.7705 4.52051 -22.9805 16.6104 -22.9805 30.1699v15.96c0 13.5703 9.20996 25.6602 22.9805 30.1807l301.71 119.96c18.29 6 38.5098 -2.53027 45.1494 -19.0605l12.0303 -29.9199c6.63965 -16.5195 -2.81055 -34.79 -21.1006 -40.79\r\n-l-175.56 -68.0898l175.44 -68.0498c18.3896 -6.03027 27.8896 -24.3906 21.21 -41l-12.0908 -30.0801c-6.66992 -16.6104 -26.9893 -25.1797 -45.3799 -19.1504zM424 48c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-400c-13.25 0 -24 10.75 -24 24v48\r\n-c0 13.2598 10.75 24 24 24h400z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"memory\" unicode=\"&#xf538;\" horiz-adv-x=\"640\" \r\n-d=\"M640 317.06c-18.5996 -6.60938 -32 -24.1895 -32 -45.0596s13.4004 -38.4502 32 -45.0596v-98.9404h-640v98.9404c18.5996 6.60938 32 24.1895 32 45.0596s-13.4004 38.4502 -32 45.0596v34.9404c0 17.6699 14.3301 32 32 32h576c17.6699 0 32 -14.3301 32 -32v-34.9404z\r\n-M224 192v128h-64v-128h64zM352 192v128h-64v-128h64zM480 192v128h-64v-128h64zM0 0v96h640v-96h-64v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699\r\n-c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microphone-alt-slash\" unicode=\"&#xf539;\" horiz-adv-x=\"640\" \r\n-d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\r\n-c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l178.53 -138v45.3604c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301\r\n-c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.0596l41.3994 -32h43.6699c0 -10.4502 -2.17969 -20.2705 -5.2793 -29.6699l26.5498 -20.5205c6.75977 15.4004 10.7197 32.2803 10.7197 50.2002v48\r\n-c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-48c0 -28.9805 -7.25977 -56.21 -19.7402 -80.3301zM400 -16c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56\r\n-v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v6.85059l52.0303 -40.2207c12.4395 -53.2197 55.3301 -96.3994 111.18 -101.85c6.94043 -0.669922 13.6396 -0.200195 20.3496 0.200195l50.4004 -38.96c-10.8604 -3.80078 -22.25 -6.45996 -33.96 -8.08008v-33.7803\r\n-h56z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-bill-wave\" unicode=\"&#xf53a;\" horiz-adv-x=\"640\" \r\n-d=\"M621.16 393.54c11.6094 -4.87012 18.8398 -16.8301 18.8496 -29.4697v-317.25c0 -18.4902 -15.04 -31.8105 -32.25 -31.8105c-3.39941 0 -6.87988 0.520508 -10.3496 1.62012c-30.8906 9.7998 -61.7598 13.7197 -92.6504 13.7197\r\n-c-123.17 0 -246.34 -62.3496 -369.51 -62.3496c-38.7998 0 -77.6201 6.19043 -116.41 22.4697c-11.6094 4.86035 -18.8398 16.8301 -18.8398 29.46v317.261c0 18.4893 15.04 31.8096 32.25 31.8096c3.40039 0 6.87988 -0.519531 10.3496 -1.62012\r\n-c30.8906 -9.7998 61.7607 -13.7197 92.6504 -13.7197c123.17 0 246.33 62.3496 369.5 62.3398c38.7998 0 77.6201 -6.19043 116.41 -22.46zM48 315.78v-60.4707c31 0 56.8398 22.1504 62.7197 51.54c-21.5996 1.36035 -42.5996 3.89062 -62.7197 8.93066zM48 30.7803\r\n-c20.1201 -7.31055 41.1797 -11.8105 63.71 -13.6201c-1.53027 34.1299 -29.3398 61.3994 -63.71 61.3994v-47.7793zM320 96c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96zM592 68.2197v57.7207\r\n-c-26.8203 -3.40039 -48.4502 -23.2002 -54.3203 -49.2803c18.6104 -1.58984 36.8008 -4.0498 54.3203 -8.44043zM592 304.33v48.8896c-17.7197 6.43066 -36.2695 10.4902 -55.8096 12.6602c0.949219 -31.8496 24.9199 -57.6396 55.8096 -61.5498z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-bill-wave-alt\" unicode=\"&#xf53b;\" horiz-adv-x=\"640\" \r\n-d=\"M621.16 393.54c11.6094 -4.87012 18.8398 -16.8301 18.8496 -29.4697v-317.25c0 -18.4902 -15.04 -31.8105 -32.25 -31.8105c-3.39941 0 -6.87988 0.520508 -10.3496 1.62012c-30.8906 9.7998 -61.7598 13.7197 -92.6504 13.7197\r\n-c-123.17 0 -246.34 -62.3496 -369.51 -62.3496c-38.7998 0 -77.6201 6.19043 -116.41 22.4697c-11.6094 4.86035 -18.8398 16.8301 -18.8398 29.46v317.261c0 18.4893 15.04 31.8096 32.25 31.8096c3.40039 0 6.87988 -0.519531 10.3496 -1.62012\r\n-c30.8906 -9.7998 61.7607 -13.7197 92.6504 -13.7197c123.17 0 246.33 62.3496 369.5 62.3398c38.7998 0 77.6201 -6.19043 116.41 -22.46zM320 96c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-check\" unicode=\"&#xf53c;\" horiz-adv-x=\"640\" \r\n-d=\"M0 0v320h640v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32zM448 208v-32c0 -8.83984 7.16016 -16 16 -16h96c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-96c-8.83984 0 -16 -7.16016 -16 -16zM448 88v-16\r\n-c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8zM64 184v-16c0 -4.41992 3.58008 -8 8 -8h304c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-304c-4.41992 0 -8 -3.58008 -8 -8z\r\n-M64 88v-16c0 -4.41992 3.58008 -8 8 -8h176c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-176c-4.41992 0 -8 -3.58008 -8 -8zM624 416c8.83984 0 16 -7.16016 16 -16v-48h-640v48c0 8.83984 7.16016 16 16 16h608z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"money-check-alt\" unicode=\"&#xf53d;\" horiz-adv-x=\"640\" \r\n-d=\"M608 416c17.6699 0 32 -14.3301 32 -32v-384c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v384c0 17.6699 14.3301 32 32 32h576zM176 120.12c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896\r\n-l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21\r\n-c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703\r\n-c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973\r\n-c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16.1201zM416 136v16\r\n-c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8zM576 136v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8z\r\n-M576 232v16c0 4.41992 -3.58008 8 -8 8h-272c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h272c4.41992 0 8 3.58008 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"not-equal\" unicode=\"&#xf53e;\" horiz-adv-x=\"448\" \r\n-d=\"M416 240h-98.4199l-74.5303 -96h172.95c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-247.48l-82.0898 -105.73c-5.37012 -7.00977 -15.4102 -8.34961 -22.4297 -2.96973l-25.4102 19.46c-7.00977 5.37988 -8.33984 15.4199 -2.96973 22.4307\r\n-l51.8701 66.8096h-55.4902c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h130.03l74.5293 96h-204.56c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h279.09l82.0801 105.73c5.37988 7.00977 15.4199 8.34961 22.4404 2.96973\r\n-l25.4092 -19.46c7.01074 -5.37012 8.34082 -15.4102 2.9707 -22.4307l-51.8701 -66.8096h23.8799c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"palette\" unicode=\"&#xf53f;\" \r\n-d=\"M204.3 443c163.8 31.9004 307.2 -92.0996 307.7 -249.7c-0.0996094 -35.7002 -29.0996 -65.2998 -64.9004 -65.2998h-79.6992c-51 0 -84 -53 -60.9004 -98.4004c18.9004 -37.0996 -1.2998 -85.2998 -42.5 -91.6992c-127.1 -19.7002 -295.8 119.699 -258.8 306.699\r\n-c19.5996 99.1006 99.7002 179 199.1 198.4zM96 128c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM128 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 320\r\n-c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM384 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"parking\" unicode=\"&#xf540;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM240 128c52.9004 0 96 43.0996 96 96s-43.0996 96 -96 96h-96c-8.7998 0 -16 -7.2002 -16 -16v-224c0 -8.7998 7.2002 -16 16 -16h32\r\n-c8.7998 0 16 7.2002 16 16v48h48zM240 256c17.5996 0 32 -14.4004 32 -32s-14.4004 -32 -32 -32h-48v64h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"percentage\" unicode=\"&#xf541;\" horiz-adv-x=\"384\" \r\n-d=\"M109.25 274.75c-24.9902 -25 -65.5098 -25 -90.5098 0c-24.9902 24.9902 -24.9902 65.5195 0 90.5098s65.5195 24.9902 90.5098 0s24.9902 -65.5195 0 -90.5098zM365.25 109.26c25 -25 25 -65.5195 0 -90.5098c-24.9902 -24.9902 -65.5195 -24.9902 -90.5098 0\r\n-s-24.9902 65.5195 0 90.5098s65.5195 24.9902 90.5098 0zM363.31 340.69c12.5 -12.5 12.5 -32.7607 0 -45.25l-274.75 -274.75c-12.4893 -12.5 -32.75 -12.5 -45.25 0l-22.6191 22.6191c-12.5 12.4902 -12.5 32.75 0 45.25l274.75 274.75c12.4893 12.5 32.75 12.5 45.25 0z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"project-diagram\" unicode=\"&#xf542;\" horiz-adv-x=\"640\" \r\n-d=\"M384 128c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-128c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h128zM192 416v-32h224v-64h-224v-47.5098l64.2803 -112.49h-0.280273c-23.5996 0 -44.0195 -12.9805 -55.1201 -32.04\r\n-l-73.1602 128.04h-95.7197c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32zM608 448c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-128c-17.6699 0 -32 14.3301 -32 32v128\r\n-c0 17.6699 14.3301 32 32 32h128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"receipt\" unicode=\"&#xf543;\" horiz-adv-x=\"384\" \r\n-d=\"M358.4 444.8c10.5996 7.90039 25.5996 0.400391 25.5996 -12.7998v-480c0 -13.2002 -15.0996 -20.7002 -25.5996 -12.7998l-38.4004 44.7998l-54.4004 -44.7998c-2.35059 -1.78027 -6.65137 -3.22559 -9.59961 -3.22559s-7.24902 1.44531 -9.59961 3.22559\r\n-l-54.4004 44.7998l-54.4004 -44.7998c-2.35059 -1.78027 -6.65137 -3.22559 -9.59961 -3.22559s-7.24902 1.44531 -9.59961 3.22559l-54.4004 44.7998l-38.4004 -44.7998c-10.5996 -7.90039 -25.5996 -0.400391 -25.5996 12.7998v480c0 13.2002 15 20.7002 25.5996 12.7998\r\n-l38.4004 -44.7998l54.4004 44.7998c2.35059 1.78027 6.65137 3.22559 9.59961 3.22559s7.24902 -1.44531 9.59961 -3.22559l54.4004 -44.7998l54.4004 44.7998c2.35059 1.78027 6.65137 3.22559 9.59961 3.22559s7.24902 -1.44531 9.59961 -3.22559l54.4004 -44.7998z\r\n-M320 88v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8zM320 184v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240\r\n-c4.40039 0 8 3.59961 8 8zM320 280v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"robot\" unicode=\"&#xf544;\" horiz-adv-x=\"640\" \r\n-d=\"M0 192c0 17.7002 14.2998 32 32 32h32v-192h-32c-17.7002 0 -32 14.2998 -32 32v128zM464 352c44.2002 0 80 -35.7998 80 -80v-272c0 -35.2998 -28.7002 -64 -64 -64h-320c-35.2998 0 -64 28.7002 -64 64v272c0 44.2002 35.7998 80 80 80h112v64\r\n-c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-64h112zM256 32v32h-64v-32h64zM224 152c22.0996 0 40 17.9004 40 40s-17.9004 40 -40 40s-40 -17.9004 -40 -40s17.9004 -40 40 -40zM352 32v32h-64v-32h64zM448 32v32h-64v-32h64zM416 152c22.0996 0 40 17.9004 40 40\r\n-s-17.9004 40 -40 40s-40 -17.9004 -40 -40s17.9004 -40 40 -40zM608 224c17.7002 0 32 -14.2998 32 -32v-128c0 -17.7002 -14.2998 -32 -32 -32h-32v192h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ruler\" unicode=\"&#xf545;\" horiz-adv-x=\"640\" \r\n-d=\"M635.7 280.8c8.7998 -15 3.59961 -34.2002 -11.6006 -42.7998l-496.8 -281.9c-15.2002 -8.59961 -34.7002 -3.5 -43.5 11.5l-79.5996 135.601c-8.7998 15 -3.5 34.0996 11.7002 42.7998l69 39.0996l59.6992 -101.399c2.2002 -3.7998 7.10059 -5.10059 10.9004 -2.90039\r\n-l13.7998 7.7998c3.7998 2.2002 5.10059 7 2.90039 10.7002l-59.7002 101.7l55.2002 31.2998l27.8994 -47.5c2.2002 -3.7998 7.10059 -5.09961 10.9004 -2.89941l13.7998 7.7998c3.7998 2.2002 5.10059 6.89941 2.90039 10.7002l-27.9004 47.3994l55.2002 31.2998\r\n-l59.7002 -101.699c2.2002 -3.80078 7.09961 -5.10059 10.8994 -2.90039l13.8008 7.7998c3.7998 2.2002 5.09961 7 2.89941 10.7002l-59.7998 101.7l55.2002 31.2998l27.8994 -47.2998c2.2002 -3.7998 7.10059 -5.10059 10.9004 -2.90039l13.7998 7.7998\r\n-c3.7998 2.2002 5.10059 6.90039 2.90039 10.7002l-27.9004 47.4004l55.2002 31.2998l59.7002 -101.6c2.2002 -3.80078 7.09961 -5.10059 10.8994 -2.90039l13.8008 7.7998c3.7998 2.2002 5.09961 6.90039 2.89941 10.7002l-59.7002 101.7l69 39.0996\r\n-c15.2002 8.60059 34.7002 3.5 43.5 -11.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ruler-combined\" unicode=\"&#xf546;\" \r\n-d=\"M160 160v-41.3799l-158.43 -158.42c-0.660156 2.55957 -1.57031 5.03027 -1.57031 7.7998v448c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32v-32h-56c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56v-64h-56\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56v-64h-56c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56zM480 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-448\r\n-c-2.75977 0 -5.24023 0.910156 -7.7998 1.57031l158.43 158.43h41.3701v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v56h64v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v56h64v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8\r\n-v56h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ruler-horizontal\" unicode=\"&#xf547;\" horiz-adv-x=\"576\" \r\n-d=\"M544 320c17.6699 0 32 -14.3301 32 -32v-192c0 -17.6699 -14.3301 -32 -32 -32h-512c-17.6699 0 -32 14.3301 -32 32v192c0 17.6699 14.3301 32 32 32h48v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16\r\n-c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ruler-vertical\" unicode=\"&#xf548;\" horiz-adv-x=\"256\" \r\n-d=\"M168 32h88v-64c0 -17.6699 -14.3301 -32 -32 -32h-192c-17.6699 0 -32 14.3301 -32 32v448c0 17.6699 14.3301 32 32 32h192c17.6699 0 32 -14.3301 32 -32v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"school\" unicode=\"&#xf549;\" horiz-adv-x=\"640\" \r\n-d=\"M0 224c0 17.6699 14.3301 32 32 32h64v-320h-80c-8.83984 0 -16 7.16016 -16 16v272zM360 272c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v64c0 4.41992 3.58008 8 8 8h16c4.41992 0 8 -3.58008 8 -8v-40h24z\r\n-M497.75 335.96c8.90039 -5.92969 14.25 -15.9297 14.25 -26.6299v-373.33h-128v144c0 8.83984 -7.16016 16 -16 16h-96c-8.83984 0 -16 -7.16016 -16 -16v-144h-128v373.34c0.00195312 9.45117 6.38574 21.377 14.25 26.6201l160 106.67\r\n-c4.4502 2.96484 12.4023 5.37012 17.75 5.37012s13.2998 -2.40527 17.75 -5.37012zM320 192c44.1797 0 80 35.8203 80 80s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM608 256c17.6699 0 32 -14.3301 32 -32v-272c0 -8.83984 -7.16016 -16 -16 -16h-80\r\n-v320h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"screwdriver\" unicode=\"&#xf54a;\" \r\n-d=\"M448 448l64 -64l-96 -128h-62.0596l-83.0303 -83.0303c-4.25 6.79004 -9.07031 13.2705 -14.8701 19.0703c-5.7998 5.80957 -12.2803 10.6201 -19.0703 14.8701l83.0303 83.0303v62.0596zM128 169.41c29.1104 29.1094 76.2998 29.1094 105.41 0\r\n-c29.1094 -29.1104 29.1094 -76.2998 0 -105.41l-117.08 -117.08c-14.5605 -14.5596 -38.1504 -14.5596 -52.71 0l-52.7002 52.7002c-14.5498 14.5596 -14.5498 38.1602 0 52.71z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shoe-prints\" unicode=\"&#xf54b;\" horiz-adv-x=\"640\" \r\n-d=\"M192 288c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64h32v-128h-32zM0 32c0 35.3496 28.6504 64 64 64h32v-128h-32c-35.3496 0 -64 28.6504 -64 64zM337.46 160c90.3604 0 174.54 -32 174.54 -96c0 -45.2197 -39.0996 -97.2998 -148.58 -120.82\r\n-c-31.9795 -6.87012 -64.8896 -8.50977 -97.5801 -6.19922c-27.2998 1.92969 -54.0996 7.76953 -80.3096 15.0498l-57.5303 15.9697v128c60.21 0 79.9404 15.6201 104.73 32c28.5693 18.8799 69.8193 32 104.729 32zM491.42 440.81\r\n-c109.48 -23.5098 148.58 -75.5898 148.58 -120.81c0 -64 -84.1797 -96 -174.54 -96c-34.9102 0 -76.1602 13.1201 -104.729 32c-24.79 16.3799 -44.5303 32 -104.73 32v128l57.5303 15.9697c26.21 7.27051 53.0098 13.1104 80.3096 15.04\r\n-c32.6904 2.32031 65.6006 0.669922 97.5801 -6.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skull\" unicode=\"&#xf54c;\" \r\n-d=\"M256 448c141.4 0 256 -100.3 256 -224c0 -70.0996 -36.9004 -132.6 -94.5 -173.7c-9.7002 -6.89941 -15.2002 -18.2002 -13.5 -29.8994l9.40039 -66.2002c1.39941 -9.60059 -6 -18.2002 -15.7002 -18.2002h-77.7002v56c0 4.40039 -3.59961 8 -8 8h-16\r\n-c-4.40039 0 -8 -3.59961 -8 -8v-56h-64v56c0 4.40039 -3.59961 8 -8 8h-16c-4.40039 0 -8 -3.59961 -8 -8v-56h-77.7002c-9.7002 0 -17.0996 8.59961 -15.7002 18.2002l9.40039 66.2002c1.7002 11.7998 -3.90039 23 -13.5 29.8994\r\n-c-57.5996 41.1006 -94.5 103.601 -94.5 173.7c0 123.7 114.6 224 256 224zM160 128c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM352 128c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64\r\n-s28.7002 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smoking-ban\" unicode=\"&#xf54d;\" \r\n-d=\"M96 144v64c0 8.7998 7.2002 16 16 16h21.5l96 -96h-117.5c-8.7998 0 -16 7.2002 -16 16zM256 448c141.4 0 256 -114.6 256 -256s-114.6 -256 -256 -256s-256 114.6 -256 256s114.6 256 256 256zM256 0c41.4004 0 79.7002 13.2998 111.1 35.7002l-267.399 267.399\r\n-c-22.4004 -31.3994 -35.7002 -69.6992 -35.7002 -111.1c0 -105.9 86.0996 -192 192 -192zM301.2 192l32 -32h50.7998v32h-82.7998zM412.3 80.9004c22.4004 31.3994 35.7002 69.6992 35.7002 111.1c0 105.9 -86.0996 192 -192 192\r\n-c-41.4004 0 -79.7002 -13.2998 -111.1 -35.7002l124.3 -124.3h130.8c8.7998 0 16 -7.2002 16 -16v-64c0 -8.7998 -7.2002 -16 -16 -16h-34.7998zM320.6 320c32.1006 0 58.7002 -23.7002 63.3008 -54.5996c0.699219 -4.90039 -3 -9.40039 -8 -9.40039h-16.2002\r\n-c-3.7002 0 -7 2.5 -7.7002 6.09961c-2.7998 14.7002 -15.7998 25.9004 -31.4004 25.9004c-32.0996 0 -58.6992 23.7002 -63.2998 54.5996c-0.700195 4.90039 3 9.40039 8 9.40039h16.2002c3.7002 0 7 -2.5 7.7002 -6.09961\r\n-c2.7998 -14.7002 15.7998 -25.9004 31.3994 -25.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"store\" unicode=\"&#xf54e;\" horiz-adv-x=\"616\" \r\n-d=\"M602 329.4c33.5996 -53.6006 3.7998 -128 -59 -136.4c-4.5 -0.599609 -9 -0.900391 -13.7002 -0.900391c-29.5 0 -55.7002 13 -73.7998 33.1006c-18 -20.1006 -44.2002 -33.1006 -73.7998 -33.1006c-29.5 0 -55.7998 13 -73.7998 33.1006\r\n-c-18 -20.1006 -44.2002 -33.1006 -73.8008 -33.1006c-29.5 0 -55.7998 13 -73.7998 33.1006c-18 -20.1006 -44.2002 -33.1006 -73.7998 -33.1006c-4.59961 0 -9.2002 0.300781 -13.7002 0.900391c-62.5996 8.5 -92.2998 82.9004 -58.7998 136.4l64.9004 103.6\r\n-c5.7998 9.2998 16.0996 15 27.0996 15h404c11 0 21.2998 -5.7002 27.0996 -15zM529.5 160c6.09961 0 12.0996 0.400391 18.2002 1.2002c5.59961 0.700195 11 2 16.3994 3.59961v-196.8c0 -17.7002 -14.2998 -32 -32 -32h-448c-17.6992 0 -32 14.2998 -32 32v196.8\r\n-c5.30078 -1.5 10.8008 -2.7998 16.4004 -3.59961c5.90039 -0.799805 12 -1.2002 18 -1.2002c10 0 19.9004 1.59961 29.5 3.7998v-99.7998h384v99.7998c9.59961 -2.2998 19.5 -3.7998 29.5 -3.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"store-alt\" unicode=\"&#xf54f;\" horiz-adv-x=\"640\" \r\n-d=\"M320 64v160h64v-256c0 -17.7002 -14.2998 -32 -32 -32h-256c-17.7002 0 -32 14.2998 -32 32v256h64v-160h192zM634.6 305.8c14.1006 -21.2998 -1.09961 -49.7998 -26.5996 -49.7998h-575.9c-25.5996 0 -40.7998 28.5 -26.5996 49.7998l85.2998 128\r\n-c5.90039 8.90039 15.9004 14.2002 26.6006 14.2002h405.199c10.7002 0 20.7002 -5.2998 26.7002 -14.2002zM512 -48v272h64v-272c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stream\" unicode=\"&#xf550;\" \r\n-d=\"M16 320c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h416c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416zM496 240c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16\r\n-v64c0 8.83984 7.16016 16 16 16h416zM432 64c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h416z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stroopwafel\" unicode=\"&#xf551;\" \r\n-d=\"M188.12 237.26l45.25 -45.2598l-45.2598 -45.25l-45.25 45.25zM301.25 259.88l-45.25 -45.25l-45.25 45.2598l45.25 45.25zM210.75 124.12l45.25 45.25l45.2598 -45.25l-45.2598 -45.2598zM256 448c141.38 0 256 -114.62 256 -256s-114.62 -256 -256 -256\r\n-s-256 114.62 -256 256s114.62 256 256 256zM442.68 152.4c1.29199 1.29492 2.34082 3.83008 2.34082 5.65918c0 1.83008 -1.04883 4.36523 -2.34082 5.66016l-28.29 28.2803l28.2705 28.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096\r\n-c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-28.29 -28.29l-45.25 45.2607l33.9404 33.9395l16.9697 -16.9697c3.12012 -3.12012 8.18945 -3.12012 11.3096 0l11.3105 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-16.9707 16.9697l16.9707 16.9697\r\n-c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096c-3.12012 3.12012 -8.18945 3.12012 -11.3096 0l-16.9697 -16.9697l-16.9707 16.9697c-3.12012 3.12012 -8.18945 3.12012 -11.3096 0l-11.3105 -11.3096c-3.11914 -3.12012 -3.11914 -8.19043 0 -11.3105\r\n-l16.9707 -16.9697l-33.9404 -33.9404l-45.2598 45.25l28.29 28.29c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-28.29 -28.29l-28.3096 28.2705c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0\r\n-l-11.3096 -11.3105c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l28.29 -28.29l-45.2607 -45.25l-33.9395 33.9404l16.9697 16.9697c3.12012 3.12012 3.12012 8.18945 0 11.3096l-11.3096 11.3105c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-16.9697 -16.9707\r\n-l-16.9697 16.9707c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-11.3096 -11.3105c-3.12012 -3.12012 -3.12012 -8.18945 0 -11.3096l16.9697 -16.9697l-16.9697 -16.9707c-3.12012 -3.12012 -3.12012 -8.18945 0 -11.3096l11.3096 -11.3105\r\n-c3.12012 -3.11914 8.19043 -3.11914 11.3105 0l16.9697 16.9707l33.9404 -33.9404l-45.25 -45.2598l-28.29 28.29c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-11.3096 -11.3105c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l28.29 -28.29l-28.29 -28.29\r\n-c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3096l11.3398 -11.3301c3.12012 -3.12012 8.18945 -3.12012 11.3096 0l28.29 28.29l45.25 -45.25l-33.9395 -33.9404l-16.9707 16.9697c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-11.3096 -11.3096\r\n-c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l16.9697 -16.9697l-16.9697 -16.9697c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l11.3096 -11.3096c3.12012 -3.12012 8.19043 -3.12012 11.3096 0l16.9707 16.9697l16.9697 -16.9697\r\n-c3.12012 -3.12012 8.19043 -3.12012 11.3096 0l11.3105 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-16.9697 16.9697l33.9395 33.9404l45.25 -45.2598l-28.29 -28.29c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l11.3105 -11.3096\r\n-c3.11914 -3.12012 8.18945 -3.12012 11.3096 0l28.29 28.29l28.3096 -28.2705c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l11.3096 11.3105c3.12012 3.11914 3.12012 8.18945 0 11.3096l-28.29 28.29l45.2607 45.2598l33.9395 -33.9395l-16.9697 -16.9707\r\n-c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l11.3096 -11.3096c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l16.9697 16.9697l16.9697 -16.9697c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l11.3096 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3096\r\n-l-16.9697 16.9707l16.9697 16.9697c3.12012 3.12012 3.12012 8.19043 0 11.3096l-11.3096 11.3105c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-16.9697 -16.9697l-33.9404 33.9395l45.25 45.25l28.29 -28.29c3.12012 -3.12012 8.19043 -3.12012 11.3105 0zM278.63 192\r\n-l45.2598 45.2598l45.25 -45.2598l-45.25 -45.25z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"toolbox\" unicode=\"&#xf552;\" \r\n-d=\"M502.63 233.37c6 -6 9.37012 -14.1396 9.37012 -22.6201v-82.75h-128v16c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-16h-128v16c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-16h-128v82.7402\r\n-c0 8.49023 3.37012 16.6299 9.37012 22.6299l45.25 45.2598c6.00977 6 14.1396 9.37012 22.6299 9.37012h50.75v80c0 26.5098 21.4902 48 48 48h160c26.5098 0 48 -21.4902 48 -48v-80.0098h50.75c8.49023 0 16.6299 -3.37012 22.6299 -9.37012zM320 288v64h-128v-64h128z\r\n-M384 80v16h128v-96c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v96h128v-16c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v16h128v-16c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tshirt\" unicode=\"&#xf553;\" horiz-adv-x=\"640\" \r\n-d=\"M631.2 351.5c7.89941 -3.90039 11.0996 -13.5996 7.09961 -21.5l-57.2998 -114.4c-4 -8 -13.5996 -11.1992 -21.5 -7.19922l-56.5996 27.6992c-10.6006 5.2002 -23 -2.59961 -23 -14.3994v-253.7c0 -17.7002 -14.3008 -32 -32 -32h-256c-17.7002 0 -32 14.2998 -32 32\r\n-v253.6c0 11.9004 -12.4004 19.6006 -23 14.4004l-56.6006 -27.7002c-7.89941 -3.89941 -17.5 -0.700195 -21.5 7.2002l-57.2002 114.5c-3.89941 7.90039 -0.699219 17.5 7.2002 21.5l194.7 96.5c20.0996 -27.7998 64.5996 -47.2002 116.5 -47.2002\r\n-s96.4004 19.4004 116.5 47.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"walking\" unicode=\"&#xf554;\" horiz-adv-x=\"320\" \r\n-d=\"M208 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM302.5 202.9c15.7002 -7.90039 22 -27.3008 14.2998 -43c-7.89941 -15.8008 -26.8994 -22.2002 -42.5 -14.3008l-23.2998 11.8008c-15 7.59961 -26.4004 20.8994 -31.7002 37\r\n-l-5.5 16.5l-17.2002 -68.7002l45.5 -49.7002c7.2002 -7.7998 12.3008 -17.4004 14.9004 -27.7002l22.2002 -89c4.2998 -17.0996 -6.2002 -34.5 -23.2998 -38.7998c-17.1006 -4.2998 -34.5 6.2002 -38.8008 23.2998l-18.2998 73.2998\r\n-c-2.59961 10.3008 -7.7002 19.8008 -14.8994 27.7002l-59.9004 65.4004c-14.5 15.8994 -20.0996 38 -14.9004 58.7998l15.2002 60.7002l-26.7998 -10.7998c-7.2002 -2.90039 -13 -8.40039 -16.5 -15.4004l-6.7002 -13.5996\r\n-c-7.89941 -15.8008 -26.8994 -22.2002 -42.5 -14.3008c-15.7002 7.90039 -22 27.1006 -14.2002 42.9004l6.7002 13.5996c10.4004 21 28.1006 37.5 49.7002 46.2002c37.4004 15.1006 57.2998 25.2998 93.2998 25.2002c46.5 -0.0996094 87.5 -31.2998 102.2 -75.9004\r\n-l9.7002 -29.3994zM73.5996 62.2002l20.7002 51.5c8.7002 -11.9004 -7.89941 6.59961 47.4004 -53.7002l-13.5 -33.7998c-3.2998 -8.10059 -8.10059 -15.4004 -14.2002 -21.5l-59.4004 -59.4004c-12.5 -12.5 -32.6992 -12.5 -45.1992 0s-12.5 32.7998 0 45.2998l50 50.1006\r\n-c6.19922 6.09961 11 13.3994 14.1992 21.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wallet\" unicode=\"&#xf555;\" \r\n-d=\"M461.2 320c28.0195 0 50.7998 -21.5303 50.7998 -48v-256c0 -26.4697 -22.7803 -48 -50.7998 -48h-397.2c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h368c26.5098 0 48 -21.4902 48 -48c0 -8.83984 -7.16016 -16 -16 -16h-384\r\n-c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h381.2zM416 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"angry\" unicode=\"&#xf556;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 208c0 -17.7002 14.4004 -32 32.0996 -32c17.7002 0 32 14.2998 32 32c0 2.90039 -1 5.5 -1.69922 8.2002c0.599609 0 1.19922 -0.200195 1.69922 -0.200195\r\n-c6.90039 0 13.2002 4.5 15.3008 11.4004c2.59961 8.39941 -2.2002 17.3994 -10.7002 19.8994l-80 24c-8.5 2.5 -17.4004 -2.2002 -19.9004 -10.7002c-2.59961 -8.39941 2.2002 -17.3994 10.7002 -19.8994l31 -9.2998c-6.40039 -5.90039 -10.5 -14.1006 -10.5 -23.4004z\r\n-M304 53.7998c13.4004 -16.0996 38.2998 4 24.5 20.5c-20 24 -49.4004 37.7998 -80.5996 37.7998c-31.2002 0 -60.6006 -13.7998 -80.6006 -37.7998c-13.5996 -16.2998 11.1006 -36.7998 24.6006 -20.5c27.8994 33.4004 84.2998 33.4004 112.1 0zM380.6 240.7\r\n-c8.5 2.5 13.3008 11.3994 10.8008 19.8994c-2.5 8.40039 -11.5 13.2002 -19.9004 10.7002l-80 -24c-8.40039 -2.5 -13.2002 -11.3994 -10.7002 -19.8994c2.10059 -6.90039 8.40039 -11.4004 15.2998 -11.4004c0.600586 0 1.10059 0.0996094 1.7002 0.200195\r\n-c-0.799805 -2.60059 -1.7002 -5.2998 -1.7002 -8.2002c0 -17.7002 14.3008 -32 32 -32c17.7002 0 32 14.2998 32 32c0 9.2998 -4.19922 17.5996 -10.5 23.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"archway\" unicode=\"&#xf557;\" horiz-adv-x=\"576\" \r\n-d=\"M560 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-159.98c-8.83984 0 -16 7.16016 -16 16v16l-0.0195312 160c0 53.0195 -42.9805 96 -96 96s-96 -42.9805 -96 -96v-176c0 -8.83984 -7.16016 -16 -16 -16h-159.98\r\n-c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h15.9805v352h512v-352h16zM560 448c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-544c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h544z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"atlas\" unicode=\"&#xf558;\" horiz-adv-x=\"448\" \r\n-d=\"M318.38 240c-5.28027 -31.2197 -25.5898 -57.1699 -53.2998 -70.4102c7.66992 19.0605 12.7197 43.3799 14.21 70.4102h39.0898zM318.38 272h-39.0898c-1.49023 27.0303 -6.53027 51.3496 -14.21 70.4102c27.71 -13.2402 48.0098 -39.1904 53.2998 -70.4102zM224 350.69\r\n-c7.69043 -7.4502 20.7695 -34.4307 23.4404 -78.6904h-46.8701c2.66016 44.2695 15.7393 71.2402 23.4297 78.6904zM182.92 342.41c-7.67969 -19.0605 -12.7197 -43.3799 -14.21 -70.4102h-39.0898c5.28027 31.2197 25.5898 57.1699 53.2998 70.4102zM182.92 169.59\r\n-c-27.71 13.2402 -48.0195 39.1904 -53.2998 70.4102h39.0898c1.49023 -27.0303 6.53027 -51.3496 14.21 -70.4102zM247.43 240c-2.66016 -44.2598 -15.7393 -71.2402 -23.4395 -78.6904c-7.69043 7.4502 -20.7705 34.4307 -23.4307 78.6904h46.8701zM448 89.5996\r\n-c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320c0 54.4004 41.5996 96 96 96\r\n-h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM224 384c-70.6904 0 -128 -57.3096 -128 -128s57.3096 -128 128 -128s128 57.3096 128 128s-57.3096 128 -128 128zM384 0v64h-288c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"award\" unicode=\"&#xf559;\" horiz-adv-x=\"384\" \r\n-d=\"M97.1201 85.3701c13.79 -13.7803 32.1104 -21.3701 51.6104 -21.3701c12.4395 0 24.4697 3.54004 35.3096 9.58008l-52.0498 -127.62c-4.39062 -10.7695 -18.4307 -13.4004 -26.4307 -4.95996l-36.2393 38.2803l-52.6904 -2.01074\r\n-c-11.6201 -0.439453 -19.8203 11.2607 -15.4297 22.0303l45.3701 111.24c7.55957 -5.87012 15.9199 -10.7705 25.4297 -13.3203c20.96 -5.60938 16.4297 -3.16016 25.1201 -11.8496zM382.8 -0.700195c4.39062 -10.7598 -3.80957 -22.4697 -15.4297 -22.0303\r\n-l-52.6904 2.01074l-36.25 -38.2803c-7.98926 -8.44043 -22.04 -5.80957 -26.4297 4.95996l-52.0498 127.62c10.8398 -6.03027 22.8701 -9.58008 35.3096 -9.58008c19.5 0 37.8301 7.58984 51.6201 21.3701c8.66992 8.66992 4.0498 6.20996 25.1201 11.8496\r\n-c9.50977 2.5498 17.8701 7.44043 25.4297 13.3203zM263 108c-13.2305 -13.4697 -33.8398 -15.8799 -49.7305 -5.82031c-5.37305 3.41211 -14.8994 6.18066 -21.2646 6.18066c-6.36426 0 -15.8916 -2.76855 -21.2646 -6.18066\r\n-c-15.9004 -10.0596 -36.5098 -7.64941 -49.7402 5.82031c-14.7305 15 -16.4004 14.04 -38.7803 20.1396c-13.8896 3.79004 -24.75 14.8408 -28.4697 28.9805c-7.48047 28.3994 -5.54004 24.9697 -25.9502 45.75c-10.1699 10.3604 -14.1396 25.4502 -10.4199 39.5898\r\n-c7.48047 28.4199 7.46973 24.46 0 52.8203c-3.72949 14.1396 0.25 29.2295 10.4199 39.5801c20.4102 20.7793 18.4805 17.3594 25.9502 45.75c3.71973 14.1396 14.5801 25.1895 28.4697 28.9795c27.8906 7.61035 24.5303 5.62988 44.9404 26.4102\r\n-c10.1699 10.3604 25 14.4004 38.8896 10.6104c27.9199 -7.61035 24.0303 -7.60059 51.9004 0c13.8896 3.79004 28.7197 -0.260742 38.8896 -10.6104c20.4297 -20.79 17.0703 -18.7998 44.9502 -26.4102c13.8896 -3.79004 24.75 -14.8398 28.4697 -28.9795\r\n-c7.48047 -28.3906 5.54004 -24.9707 25.9502 -45.75c10.1699 -10.3506 14.1396 -25.4404 10.4199 -39.5801c-7.47949 -28.4102 -7.46973 -24.4502 0 -52.8301c3.71973 -14.1406 -0.25 -29.2305 -10.4199 -39.5801c-20.4102 -20.7803 -18.4697 -17.3506 -25.9502 -45.75\r\n-c-3.71973 -14.1396 -14.5801 -25.1904 -28.4697 -28.9805c-21.7598 -5.92969 -23.5098 -4.58984 -38.79 -20.1396zM97.6602 272.04c0 -53.0303 42.2402 -96.0205 94.3398 -96.0205s94.3398 42.9902 94.3398 96.0205s-42.2402 96.0195 -94.3398 96.0195\r\n-s-94.3398 -42.9893 -94.3398 -96.0195z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"backspace\" unicode=\"&#xf55a;\" horiz-adv-x=\"640\" \r\n-d=\"M576 384c35.3496 0 64 -28.6504 64 -64v-256c0 -35.3496 -28.6504 -64 -64 -64h-370.75c-16.9697 0 -33.25 6.75 -45.25 18.75l-150.63 150.63c-12.5 12.4902 -12.5 32.75 0 45.25l150.63 150.62c10.3438 10.3496 30.6143 18.75 45.2471 18.75h0.0126953h370.74z\r\n-M491.31 129.94l-62.0596 62.0596l62.0596 62.0596c6.25 6.25 6.25 16.3809 0 22.6309l-22.6191 22.6191c-6.25 6.25 -16.3809 6.25 -22.6309 0l-62.0596 -62.0596l-62.0596 62.0596c-6.25 6.25 -16.3809 6.25 -22.6309 0l-22.6191 -22.6191\r\n-c-6.25 -6.25 -6.25 -16.3809 0 -22.6309l62.0596 -62.0596l-62.0596 -62.0596c-6.25 -6.25 -6.25 -16.3809 0 -22.6309l22.6191 -22.6191c6.25 -6.25 16.3809 -6.25 22.6309 0l62.0596 62.0596l62.0596 -62.0596c6.25 -6.25 16.3809 -6.25 22.6309 0l22.6191 22.6191\r\n-c6.25 6.25 6.25 16.3809 0 22.6309z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bezier-curve\" unicode=\"&#xf55b;\" horiz-adv-x=\"640\" \r\n-d=\"M368 416c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM208 360v-72c0 -9.4502 2.17969 -18.3604 5.87988 -26.4404c-34.2695 -24.3496 -59.7402 -59.9492 -71.04 -101.56\r\n-h-49.3994c13.6797 64.6797 54.1699 119.48 109.54 152h-79.7305c-9.5 -23.4404 -32.4102 -40 -59.25 -40c-35.3398 0 -64 28.6504 -64 64s28.6602 64 64 64c26.8398 0 49.75 -16.5596 59.25 -40h84.75zM160 128c17.6699 0 32 -14.3301 32 -32v-96\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM576 400c35.3398 0 64 -28.6504 64 -64s-28.6602 -64 -64 -64c-26.8398 0 -49.75 16.5596 -59.25 40h-79.7305c55.3701 -32.5195 95.8604 -87.3203 109.54 -152\r\n-h-49.3994c-11.2998 41.6104 -36.7705 77.21 -71.04 101.56c3.68945 8.08008 5.87988 16.9902 5.87988 26.4404v72h84.75c9.5 23.4404 32.4102 40 59.25 40zM576 128c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32\r\n-v96c0 17.6699 14.3301 32 32 32h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bong\" unicode=\"&#xf55c;\" horiz-adv-x=\"448\" \r\n-d=\"M302.5 -64h-221c-23.1699 0 -44.4199 12.5801 -56 32.6602c-16.1904 28.0703 -25.5 60.5898 -25.5 95.3398c0 71.0303 38.6699 132.9 96 166.11v153.93l-15.9697 -0.0205078c-8.85059 -0.00976562 -16.0303 7.16016 -16.0205 16.0107l0.0400391 31.7295\r\n-c0.00976562 8.82031 7.16016 15.9707 15.9805 15.9805l223.939 0.259766c8.85059 0.00976562 16.0303 -7.16992 16.0205 -16.0195l-0.0400391 -31.7207c-0.00976562 -8.81934 -7.16016 -15.9697 -15.9805 -15.9795l-15.9697 -0.0205078v-154.16\r\n-c14.1201 -8.17969 27.0898 -18.1396 38.6504 -29.5098l39.4092 39.4102l-9.37988 9.37988c-6.25 6.25 -6.25 16.3799 0 22.6299l11.3105 11.3105c6.25 6.25 16.3799 6.25 22.6299 0l52.6895 -52.6904c6.25 -6.25 6.25 -16.3799 0 -22.6299l-11.2998 -11.3203\r\n-c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-9.37988 9.37988l-43.4404 -43.4395c17.3604 -28.8105 27.4404 -62.5 27.4404 -98.6201c0 -34.75 -9.30957 -67.2598 -25.5 -95.3398c-11.5703 -20.0801 -32.8203 -32.6602 -56 -32.6602zM120.06 188.57\r\n-c-24.8096 -14.3701 -44.1094 -35.7305 -56.5596 -60.5703h257c-12.4404 24.8398 -31.75 46.2002 -56.5596 60.5703l-23.9404 13.8701v181.76l-96 -0.110352v-181.649z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"brush\" unicode=\"&#xf55d;\" horiz-adv-x=\"384\" \r\n-d=\"M352 448c17.6699 0 32 -14.3301 32 -32v-224h-384v224c0 17.6699 14.3301 32 32 32h320zM0 128v32h384v-32c0 -35.3496 -28.6602 -64 -64 -64h-64v-64c0 -35.3496 -28.6602 -64 -64 -64s-64 28.6504 -64 64v64h-64c-35.3398 0 -64 28.6504 -64 64zM192 24\r\n-c-13.25 0 -24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24s24 10.75 24 24c0 13.2598 -10.75 24 -24 24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bus-alt\" unicode=\"&#xf55e;\" \r\n-d=\"M488 320c13.25 0 24 -10.7402 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-8v-166.4c0 -12.7998 -9.59961 -25.5996 -25.5996 -25.5996h-6.40039v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\r\n-c-17.6699 0 -32 14.3301 -32 32v32c-17.6699 0 -32 14.3301 -32 32v160h-8c-13.25 0 -24 10.75 -24 24v80c0 13.2598 10.75 24 24 24h8v48c0 44.7998 99.2002 80 224 80s224 -35.2002 224 -80v-48h8zM160 376v-16c0 -4.41992 3.58008 -8 8 -8h176c4.41992 0 8 3.58008 8 8\r\n-v16c0 4.41992 -3.58008 8 -8 8h-176c-4.41992 0 -8 -3.58008 -8 -8zM112 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM240 160v160h-112c-17.6699 0 -32 -14.3301 -32 -32v-96c0 -17.6699 14.3301 -32 32 -32h112zM272 160\r\n-h112c17.6699 0 32 14.3301 32 32v96c0 17.6699 -14.3301 32 -32 32h-112v-160zM400 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cannabis\" unicode=\"&#xf55f;\" \r\n-d=\"M503.47 87.75c5.24023 -2.75977 8.52051 -8.20996 8.53027 -14.1504c0.00976562 -5.92969 -3.26953 -11.3691 -8.50977 -14.1494c-2.4502 -1.29004 -60.7705 -31.7197 -133.49 -31.7197c-6.12988 0 -11.96 0.0996094 -17.5 0.30957\r\n-c11.3604 -22.2305 16.5195 -38.3096 16.8096 -39.2197c1.80078 -5.68066 0.290039 -11.8906 -3.90918 -16.1104c-2.5918 -2.60059 -7.67578 -4.71094 -11.3467 -4.71094c-1.34277 0 -3.47168 0.322266 -4.75391 0.720703c-1.83008 0.580078 -37.7197 11.9902 -77.2998 39.29\r\n-v-64.0098c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v64.0195c-39.5801 -27.2998 -75.4697 -38.7197 -77.2998 -39.2891c-1.28223 -0.398438 -3.41113 -0.72168 -4.75391 -0.72168c-3.6709 0 -8.75488 2.11035 -11.3467 4.71094\r\n-c-4.19922 4.2207 -5.70996 10.4307 -3.90918 16.1104c0.290039 0.910156 5.43945 16.9902 16.8096 39.2197c-5.54004 -0.209961 -11.3604 -0.30957 -17.5 -0.30957c-72.7305 0 -131.04 30.4297 -133.49 31.7197c-4.69629 2.48926 -8.50879 8.82422 -8.50879 14.1396\r\n-c0 5.32422 3.82129 11.6641 8.5293 14.1504c1.56934 0.820312 32.3896 16.8896 76.7793 25.8096c-64.25 75.1201 -84.0498 161.671 -84.9297 165.641c-0.210938 0.947266 -0.382812 2.50488 -0.382812 3.47559c0 3.65039 2.09375 8.71094 4.67285 11.2939\r\n-c3.03027 3.04004 7.12012 4.7002 11.3203 4.7002c1.14941 0 2.2998 -0.129883 3.43945 -0.379883c3.89062 -0.860352 86.5508 -19.5996 160.58 -79.7598c0 1.45996 -0.00976562 2.92969 -0.00976562 4.39941c0 118.79 59.9805 213.721 62.5303 217.7\r\n-c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598\r\n-c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"check-double\" unicode=\"&#xf560;\" \r\n-d=\"M505 273.2c9.2998 -9.2998 9.2998 -24.5 -0.0996094 -34l-296 -296.2c-9.30078 -9.40039 -24.5 -9.40039 -33.9004 0l-168 168.1c-9.40039 9.40039 -9.40039 24.6006 0 34l39.7002 39.7002c9.2998 9.40039 24.5 9.40039 33.8994 0l111.4 -111.5l239.5 239.5\r\n-c9.2998 9.40039 24.5 9.40039 33.9004 0zM180.7 167.2l-112 112.2c-6.2002 6.19922 -6.2002 16.2998 0 22.5996l45.2998 45.2998c6.2002 6.2998 16.4004 6.2998 22.5996 0l55.4004 -55.5l151.5 151.5c6.2002 6.2998 16.4004 6.2998 22.5996 0l45.2002 -45.2998\r\n-c6.2002 -6.2002 6.2002 -16.2998 0 -22.5996l-208 -208.2c-6.2002 -6.2998 -16.3994 -6.2998 -22.5996 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cocktail\" unicode=\"&#xf561;\" horiz-adv-x=\"576\" \r\n-d=\"M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498\r\n-l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96\r\n-c-35.3701 0 -65.9902 -19.4502 -82.6396 -48h-52.54c19.8301 55.7998 72.5693 96 135.18 96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"concierge-bell\" unicode=\"&#xf562;\" \r\n-d=\"M288 317.46c108.51 -15.5703 192 -108.64 192 -221.46h-448c0 112.82 83.4902 205.89 192 221.46v18.54h-16c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-16v-18.54zM496 64\r\n-c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cookie\" unicode=\"&#xf563;\" \r\n-d=\"M510.37 193.21c4.37988 -27.6602 -0.110352 -56 -12.8203 -80.96l-35.0996 -68.8701c-10.7695 -21.1328 -36.6592 -47.0273 -57.79 -57.7998l-69.1201 -35.21c-24.8301 -12.6396 -53.0098 -17.1104 -80.5205 -12.75l-76.6992 12.1396\r\n-c-23.3896 3.70801 -55.9639 20.3066 -72.71 37.0498l-54.7607 54.75c-16.7959 16.8027 -33.4443 49.4844 -37.1592 72.9502l-12.0801 76.2705c-0.901367 5.68848 -1.63281 14.9805 -1.63281 20.7412c0 17.5723 6.47461 44.541 14.4521 60.1982l35.1006 68.8799\r\n-c10.7666 21.1357 36.6562 47.0303 57.79 57.8008l69.1201 35.21c24.8291 12.6494 53.0098 17.1201 80.5195 12.7598l76.7002 -12.1504c27.5303 -4.34961 52.9795 -17.3301 72.71 -37.0498l54.7598 -54.75c16.7969 -16.8027 33.4443 -49.4844 37.1602 -72.9502zM176 80\r\n-c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM208 240c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM368 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cookie-bite\" unicode=\"&#xf564;\" \r\n-d=\"M510.52 192.18c4.10059 -27.3301 -0.349609 -55.2695 -12.9092 -79.9102l-35.1006 -68.8799c-10.7656 -21.1367 -36.6562 -47.0361 -57.79 -57.8096l-69.1299 -35.21c-24.8301 -12.6504 -53.0195 -17.1201 -80.5303 -12.7598l-76.71 12.1494\r\n-c-23.3916 3.70801 -55.9658 20.3105 -72.71 37.0605l-54.7695 54.7598c-16.7969 16.8057 -33.4443 49.4912 -37.1602 72.96l-12.0801 76.2695c-0.900391 5.68945 -1.63184 14.9824 -1.63184 20.7422c0 17.5752 6.47461 44.5479 14.4521 60.208l35.0996 68.8799\r\n-c10.7646 21.1396 36.6543 47.0391 57.79 57.8105l69.1299 35.2197c24.5898 12.5205 52.46 16.96 79.7207 12.8203c0.859375 -69.96 57.6895 -126.45 127.859 -126.45c0 -70.1699 56.5 -127.01 126.47 -127.86zM176 80c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\r\n-s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM208 240c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM368 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crop-alt\" unicode=\"&#xf565;\" \r\n-d=\"M488 96c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-40v-40c0 -13.25 -10.75 -24 -24 -24h-48c-13.25 0 -24 10.75 -24 24v328h-160v96h224c17.6699 0 32 -14.3301 32 -32v-256h40zM160 424v-328h160v-96h-224c-17.6699 0 -32 14.3301 -32 32v256h-40\r\n-c-13.25 0 -24 10.75 -24 24v48c0 13.2598 10.75 24 24 24h40v40c0 13.2598 10.75 24 24 24h48c13.25 0 24 -10.7402 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"digital-tachograph\" unicode=\"&#xf566;\" horiz-adv-x=\"640\" \r\n-d=\"M608 352c17.6699 0 32 -14.3301 32 -32v-256c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v256c0 17.6699 14.3301 32 32 32h576zM304 96v8c0 4.41992 -3.58008 8 -8 8h-224c-4.41992 0 -8 -3.58008 -8 -8v-8c0 -4.41992 3.58008 -8 8 -8h224\r\n-c4.41992 0 8 3.58008 8 8zM72 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM136 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-16zM200 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM264 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8\r\n-h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM304 224v48c0 8.83984 -7.16016 16 -16 16h-208c-8.83984 0 -16 -7.16016 -16 -16v-48c0 -8.83984 7.16016 -16 16 -16h208c8.83984 0 16 7.16016 16 16zM576 96v8c0 4.41992 -3.58008 8 -8 8h-224c-4.41992 0 -8 -3.58008 -8 -8v-8\r\n-c0 -4.41992 3.58008 -8 8 -8h224c4.41992 0 8 3.58008 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dizzy\" unicode=\"&#xf567;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM152 233.4l28.7002 -28.7002c14.7002 -14.7998 37.7998 7.39941 22.5996 22.5996l-28.7002 28.7002l28.7002 28.7002c15 14.8994 -7.59961 37.5996 -22.5996 22.5996\r\n-l-28.7002 -28.7002l-28.7002 28.7002c-14.8994 15 -37.5996 -7.59961 -22.5996 -22.5996l28.7002 -28.7002l-28.7002 -28.7002c-15.2002 -15.0996 7.7998 -37.3994 22.5996 -22.5996zM248 32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64\r\n-s28.7002 -64 64 -64zM395.3 227.3l-28.7002 28.7002l28.7002 28.7002c15 14.8994 -7.59961 37.5996 -22.5996 22.5996l-28.7002 -28.7002l-28.7002 28.7002c-14.8994 15 -37.5996 -7.59961 -22.5996 -22.5996l28.7002 -28.7002l-28.7002 -28.7002\r\n-c-15.2002 -15.0996 7.7998 -37.3994 22.5996 -22.5996l28.7002 28.7002l28.7002 -28.7002c14.7002 -14.7998 37.7998 7.39941 22.5996 22.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"drafting-compass\" unicode=\"&#xf568;\" \r\n-d=\"M457.01 103.58l54.9805 -95.2305l-7.02051 -58.25c-1.2793 -10.5898 -12.3594 -16.9893 -22.1699 -12.7998l-53.9502 23.04l-54.3799 94.1904c29.9102 11.8701 57.4902 28.7197 82.54 49.0498zM499.5 198.14c-52.6201 -83.1299 -144.45 -134.14 -243.5 -134.14\r\n-c-35.3799 0 -69.8701 6.71973 -102.06 18.96l-70.8008 -122.63l-53.9492 -23.04c-9.81055 -4.19043 -20.8906 2.20996 -22.1709 12.7998l-7.01953 58.25l71.2803 123.46c-21.29 17.8105 -40.4102 38.3799 -55.9805 62.0205\r\n-c-4.99023 7.56934 -2.20996 17.9297 5.64062 22.4697l27.75 16.0703c7.40918 4.29004 16.5898 1.76953 21.3799 -5.33008c9.71973 -14.4102 21.1299 -27.3906 33.6797 -39l68.2998 118.31c-7.43945 13.6299 -12.0498 29.0303 -12.0498 45.6602c0 53.0195 42.9805 96 96 96\r\n-s96 -42.9805 96 -96c0 -16.6299 -4.61035 -32.0303 -12.0596 -45.6602l51.79 -89.71c-23.0508 -23.1699 -51.3809 -39.96 -82.6104 -48.9199l-51.0898 88.5c-0.69043 -0.0195312 -1.33984 -0.209961 -2.04004 -0.209961s-1.33984 0.19043 -2.04004 0.209961\r\n-l-67.3604 -116.68c22.1797 -7.28027 45.4805 -11.5303 69.4102 -11.5303c76.25 0 147.01 38.8496 188.12 102.38c4.64941 7.17969 13.7803 9.87012 21.2598 5.71973l28.0703 -15.5693c7.93945 -4.40039 10.9102 -14.7207 6.0498 -22.3906zM256 384\r\n-c-17.6699 0 -32 -14.3301 -32 -32s14.3301 -32 32 -32s32 14.3301 32 32s-14.3301 32 -32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"drum\" unicode=\"&#xf569;\" \r\n-d=\"M431.34 325.95c44.9004 -16.3398 80.6602 -42.7803 80.6602 -86.1006v-160.229c0 -30.2705 -27.5 -57.6797 -72 -77.8604v101.9c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-118.93c-33.0498 -9.11035 -71.0703 -15.0605 -112 -16.7305v103.61\r\n-c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-103.61c-40.9297 1.66992 -78.9502 7.62012 -112 16.7305v118.93c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-101.9c-44.5 20.1807 -72 47.5898 -72 77.8604v160.229c0 107.601 219.55 112.15 256 112.15\r\n-c15.2197 0 62.4297 -0.910156 112.19 -9.69043l110.06 71c2.22461 1.4834 6.20117 2.6875 8.875 2.6875c4.72852 0 10.6934 -3.19238 13.3154 -7.12695l8.86914 -13.3105c1.4834 -2.22461 2.6875 -6.20117 2.6875 -8.875c0 -4.72754 -3.19238 -10.6924 -7.12695 -13.3145z\r\n-M256 175.76c114.87 0 208 28.6904 208 64.0898c0 21.3105 -33.9102 40.1504 -85.8604 51.75l-118.64 -76.5195c-2.22461 -1.4834 -6.20117 -2.6875 -8.875 -2.6875c-4.72852 0 -10.6934 3.19336 -13.3154 7.12695l-8.86914 13.3105\r\n-c-1.48535 2.22559 -2.69043 6.2041 -2.69043 8.87988c0 4.72461 3.18945 10.6875 7.12012 13.3096l72.8096 47c-15.9492 1.2002 -32.5293 1.91016 -49.6797 1.91016c-114.88 0 -208 -28.6797 -208 -64.0801c0 -35.3994 93.1201 -64.0898 208 -64.0898z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"drum-steelpan\" unicode=\"&#xf56a;\" horiz-adv-x=\"576\" \r\n-d=\"M288 416c159.06 0 288 -57.3096 288 -128v-192c0 -70.6904 -128.94 -128 -288 -128s-288 57.3096 -288 128v192c0 70.6904 128.94 128 288 128zM205.01 257.64c5.11035 19.0605 2.49023 38.96 -7.37012 56.0508l-25.5996 44.3398\r\n-c-73.9297 -13.6406 -124.04 -39.8701 -124.04 -70.0303c0 -30.7803 52.2305 -57.46 128.7 -70.8398c13.7695 9.91016 23.8594 23.8701 28.3096 40.4795zM288 208c21.0801 0 41.4102 1 60.8896 2.7002c-8.05957 26.1299 -32.1494 45.2998 -60.8896 45.2998\r\n-s-52.8301 -19.1699 -60.8896 -45.2998c19.4795 -1.7002 39.8096 -2.7002 60.8896 -2.7002zM352 352v13.04c-20.4004 1.87988 -41.7998 2.95996 -64 2.95996s-43.5996 -1.08008 -64 -2.95996v-13.04c0 -35.29 28.71 -64 64 -64s64 28.71 64 64zM398.93 217.1\r\n-c76.6699 13.3604 129.07 40.0703 129.07 70.9004c0 30.21 -50.2803 56.5 -124.44 70.0996l-25.6494 -44.4199c-9.87012 -17.0801 -12.4902 -36.9795 -7.37988 -56.04c4.45996 -16.6396 14.5898 -30.6299 28.3994 -40.54z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"feather-alt\" unicode=\"&#xf56b;\" \r\n-d=\"M512 448c-1.80957 -26.2598 -11.71 -132.86 -53.6201 -234.79l-106.54 -53.21h81.1406c-9.08008 -16.4102 -19.2002 -32.2305 -30.4502 -47.1201l-146.79 -48.8799h100.95c-35.5605 -30.0703 -79.1006 -51.0996 -132.58 -56.54\r\n-c-41.8105 -4.83008 -83.8701 -7.21973 -125.96 -7.36035l-57.1309 -57.0693c-9.38965 -9.37012 -24.5996 -9.37012 -33.9795 0s-9.37988 24.5693 0 33.9395l259.5 259.24c6.25 6.25 6.25 16.3799 0 22.6299s-16.4004 6.25 -22.6504 0l-178.87 -178.689\r\n-c1.15039 26.7998 2.90039 53.5801 5.99023 80.2393c25.4307 249.41 389.21 284.051 440.99 287.61z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-contract\" unicode=\"&#xf56c;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8\r\n-h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 312v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM256.81 64c-4.19922 0 -8.13965 2.44043 -10.1592 6.5\r\n-c-11.9502 23.8604 -46.2305 30.3496 -66 14.1602l-13.8809 41.6396c-3.28906 9.82031 -12.4297 16.4102 -22.7695 16.4102s-19.4805 -6.59961 -22.7803 -16.4102l-18.1895 -54.6396c-1.53027 -4.58008 -5.81055 -7.66016 -10.6406 -7.66016h-12.3896\r\n-c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h12.3896c18.6201 0 35.1104 11.8701 41 29.5303l10.6104 31.8799l16.8301 -50.46c2.03027 -6.14062 7.58008 -10.4404 14.0303 -10.8906c0.389648 -0.0292969 0.759766 -0.0498047 1.13965 -0.0498047h0.00976562\r\n-c5.45508 0 11.8613 3.96094 14.2998 8.83984l7.6709 15.3408c2.7998 5.59961 7.93945 6.18945 10.0195 6.18945s7.21973 -0.599609 10.1699 -6.51953c7.37012 -14.7207 22.1904 -23.8604 38.6396 -23.8604h47.1904c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16h-47.1904z\r\n-M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-download\" unicode=\"&#xf56d;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM300.45 100.64c10.1299 10.0703 3.00977 27.3604 -11.2705 27.3604h-65.1797v80\r\n-c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-80h-65.1797c-14.2803 0 -21.4004 -17.29 -11.25 -27.3604l96.4199 -95.6992c6.64941 -6.61035 17.3896 -6.61035 24.04 0zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961\r\n-c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-export\" unicode=\"&#xf56e;\" horiz-adv-x=\"576\" \r\n-d=\"M384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004zM571 140c6.59961 -6.59961 6.59961 -17.4004 0 -24l-95.7002 -96.5c-10.0996 -10.0996 -27.3994 -3 -27.3994 11.2998v65.2002h-64v64h64v65.0996\r\n-c0 14.3008 17.2998 21.4004 27.3994 11.3008zM192 112c0 -8.7998 7.2002 -16 16 -16h176v-136c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24h136v-128h-176\r\n-c-8.7998 0 -16 -7.2002 -16 -16v-32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-import\" unicode=\"&#xf56f;\" \r\n-d=\"M16 160h112v-64h-112c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16zM505 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM352 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24\r\n-h-336c-13.2998 0 -24 10.7002 -24 24v136h127.9v-65.0996c0 -14.3008 17.2998 -21.4004 27.3994 -11.3008l95.7002 96.4004c6.59961 6.59961 6.59961 17.2998 0 24l-95.5996 96.5c-10.1006 10.0996 -27.4004 3 -27.4004 -11.2998v-65.2002h-128v264\r\n-c0 13.2998 10.7002 24 24 24h200v-136z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-invoice\" unicode=\"&#xf570;\" horiz-adv-x=\"384\" \r\n-d=\"M288 192v-64h-192v64h192zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464\r\n-c0 13.2998 10.7002 24 24 24h200v-136zM64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 312v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16\r\n-c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM320 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8zM320 208c0 8.83984 -7.16016 16 -16 16h-224\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-96c0 -8.83984 7.16016 -16 16 -16h224c8.83984 0 16 7.16016 16 16v96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-invoice-dollar\" unicode=\"&#xf571;\" horiz-adv-x=\"384\" \r\n-d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136z\r\n-M64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 296c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8\r\n-v-16zM208 32.1201c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104\r\n-c4.55957 0 8.94922 -1.29004 12.8193 -3.71973c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v24.29c0 4.41992 -3.58008 8 -8 8h-16\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-24.1201c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\r\n-c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-24.29c0 -4.41992 3.58008 -8 8 -8h16\r\n-c4.41992 0 8 3.58008 8 8v24.1201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-prescription\" unicode=\"&#xf572;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM292.53 132.52c-6.25 6.25 -16.3799 6.25 -22.6299 0l-29.9004 -29.8994l-33.46 33.46\r\n-c19.8398 10.8701 33.46 31.7002 33.46 55.9199c0 35.3496 -28.6504 64 -64 64h-80c-8.83984 0 -16 -7.16016 -16 -16v-160c0 -8.83984 7.16016 -16 16 -16h16c8.83984 0 16 7.16016 16 16v48h18.7402l59.3193 -59.3096l-30.0596 -30.0605\r\n-c-6.25 -6.25 -6.25 -16.3799 0 -22.6299l11.3096 -11.3096c6.25 -6.25 16.3809 -6.25 22.6309 0l30.0596 30.0596l30.0596 -30.0703c6.25 -6.25 16.3809 -6.25 22.6309 0l11.3096 11.3105c6.25 6.25 6.25 16.3799 0 22.6299l-30.0596 30.0596l29.8994 29.9004\r\n-c6.25 6.25 6.25 16.3799 0 22.6299zM176 176h-48v32h48c8.82031 0 16 -7.17969 16 -16s-7.17969 -16 -16 -16zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-signature\" unicode=\"&#xf573;\" horiz-adv-x=\"576\" \r\n-d=\"M218.17 23.8604c7.25 -14.4707 21.71 -23.4404 37.8301 -23.75l128 -0.110352v-40c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24h136.01v-46.5498l-128 -127.09\r\n-v-82.1201c-3.87012 0.30957 -7.46973 2.47949 -9.35938 6.25977c-11.9404 23.8604 -46.25 30.3496 -66 14.1602l-13.8809 41.6396c-3.28906 9.82031 -12.4297 16.4102 -22.7695 16.4102s-19.4805 -6.59961 -22.7803 -16.4102l-18.1895 -54.6396\r\n-c-1.53027 -4.58008 -5.81055 -7.66016 -10.6406 -7.66016h-12.3896c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h12.3896c18.6201 0 35.1104 11.8701 41 29.5303l10.6104 31.8799l16.8301 -50.4697c4.4502 -13.46 23.1104 -14.8701 29.4795 -2.09082\r\n-l7.6709 15.3408c2.7998 5.59961 7.93945 6.18945 10.0195 6.18945s7.21973 -0.599609 10.1699 -6.51953zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004zM288 101.04l162.79 161.62l67.8799 -67.8799\r\n-l-161.68 -162.78h-68.9902v69.04zM568.54 280.67c9.9502 -9.93945 9.9502 -26.0703 0 -36.0098l-27.25 -27.25l-67.8799 67.8799l27.25 27.25c9.93945 9.94043 26.0703 9.94043 36.0098 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-upload\" unicode=\"&#xf574;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM289.18 95.9902c14.2803 0 21.4004 17.29 11.25 27.3594l-96.4199 95.7002\r\n-c-6.64941 6.61035 -17.3896 6.61035 -24.04 0l-96.4199 -95.7002c-10.1396 -10.0693 -3.00977 -27.3594 11.2705 -27.3594h65.1797v-80c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v80h65.1797zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128\r\n-v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fill\" unicode=\"&#xf575;\" \r\n-d=\"M502.63 230.94c12.4902 -12.5 12.4902 -32.7607 0 -45.2607l-221.57 -221.569c-18.75 -18.75 -43.3096 -28.1201 -67.8799 -28.1201c-24.5596 0 -49.1201 9.37988 -67.8701 28.1201l-117.189 117.189c-37.4902 37.4902 -37.4902 98.2598 0 135.75l94.7598 94.7598\r\n-l-86.1895 86.1807c-6.24023 6.25 -6.24023 16.3799 0 22.6299l22.6191 22.6104c6.24023 6.25 16.3809 6.25 22.6201 0l86.1807 -86.1807l81.5801 81.5801c6.23926 6.25 14.4297 9.37012 22.6191 9.37012c8.19043 0 16.3809 -3.12012 22.6309 -9.37012zM386.41 159.97\r\n-l48.3496 48.3398l-162.45 162.44l-58.9492 -58.9502l58.6094 -58.5996c12.4902 -12.4902 12.4902 -32.75 0 -45.2402c-12.4893 -12.4902 -32.75 -12.4902 -45.2393 0l-58.6104 58.5996l-81.6104 -81.6094l-13.1494 -13.1504\r\n-c-3.86035 -3.84961 -6.07031 -7.99023 -7.43066 -11.8301h320.48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fill-drip\" unicode=\"&#xf576;\" horiz-adv-x=\"576\" \r\n-d=\"M512 128c0 0 64 -92.6504 64 -128s-28.6602 -64 -64 -64s-64 28.6504 -64 64s64 128 64 128zM502.63 230.94c12.4902 -12.5 12.4902 -32.75 -0.00976562 -45.25l-221.57 -221.57c-18.7402 -18.75 -43.2998 -28.1201 -67.8701 -28.1201\r\n-c-24.5596 0 -49.1299 9.37988 -67.8701 28.1201l-117.189 117.189c-37.4902 37.4902 -37.4902 98.2705 0 135.75l94.7598 94.7607l-86.1895 86.1797c-6.24023 6.24023 -6.24023 16.3701 0 22.6201l22.6191 22.6201c6.24023 6.25 16.3701 6.25 22.6201 0l86.1807 -86.1904\r\n-l81.5801 81.5801c6.23926 6.25 14.4297 9.37012 22.6191 9.37012c8.19043 0 16.3809 -3.12012 22.6309 -9.37012zM386.41 159.97l48.3398 48.3398l-162.44 162.44l-58.9492 -58.9502l58.5996 -58.5996c12.4902 -12.4902 12.4902 -32.75 0 -45.2402\r\n-s-32.75 -12.4902 -45.2402 0l-58.5996 58.5996l-81.6104 -81.6094l-13.1494 -13.1504c-3.86035 -3.84961 -6.07031 -7.99023 -7.43066 -11.8301h320.48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fingerprint\" unicode=\"&#xf577;\" \r\n-d=\"M256.12 202.04c13.2598 0 24 -10.75 23.9902 -24c1.55957 -99.1104 -15.9502 -176.61 -29.4805 -224.521c-2.97949 -10.5996 -12.6104 -17.5195 -23.0898 -17.5195c-20.9697 0 -25.8496 20.7695 -23.1201 30.4902c19.5605 69.6494 28.8398 139.3 27.7002 211.55\r\n-c0 13.2598 10.75 24 24 24zM255.26 283.77c56.9707 -0.839844 104.03 -46.9199 104.91 -102.72c0.790039 -50.8994 -2.99023 -102.08 -11.2695 -152.109c-0.770508 -4.6709 -7.61035 -23.1006 -27.5801 -19.7705c-13.0703 2.16016 -21.9307 14.5205 -19.7607 27.5801\r\n-c7.80078 47.2197 11.3809 95.5 10.6104 143.55c-0.469727 30.1299 -26.3096 55 -57.6201 55.4697c-34.5303 0.150391 -54.8594 -26.3896 -54.4502 -52.3398c0.800781 -51.4395 -4.0293 -102.93 -14.3691 -153.02c-2.69043 -12.9805 -15.3105 -21.3105 -28.3604 -18.6406\r\n-c-12.9697 2.6709 -21.3301 15.3809 -18.6396 28.3604c9.61914 46.6396 14.1191 94.6104 13.3691 142.55c-0.849609 54.0205 41.9004 101.16 103.16 101.09zM144.57 303.55c10.2793 -8.37012 11.8398 -23.4795 3.48926 -33.7598\r\n-c-18.7998 -23.0898 -28.4697 -51.0898 -28 -80.9697c0.640625 -40.6699 -2.66992 -81.4902 -9.85938 -121.33c-0.820312 -4.5498 -7.78027 -22.8604 -27.8906 -19.3604c-13.0498 2.36035 -21.6992 14.8398 -19.3594 27.8896c6.63965 36.7803 9.7002 74.4707 9.10938 112.051\r\n-c-0.639648 40.7197 13.1309 80.5 38.75 112c8.39062 10.2793 23.46 11.8193 33.7607 3.47949zM254.04 365.88c101.09 -1.5 184.6 -83.0801 186.16 -181.83c0.0615234 -3.97852 0.111328 -10.4375 0.111328 -14.417c0 -29.1934 -2.68848 -76.4277 -6.00195 -105.433\r\n-c-1.06934 -9.23047 -9.85938 -23.0605 -26.5791 -21.1104c-13.1602 1.5 -22.6104 13.4102 -21.1104 26.5801c4.2998 37.5205 6.16992 75.75 5.58008 113.63c-1.15039 73.0801 -63.4502 133.45 -138.88 134.58c-11.5303 0.0800781 -22.9502 -1.08008 -34 -3.68945\r\n-c-12.8906 -3 -25.8301 4.93945 -28.8906 17.8291c-3.04004 12.9102 4.94043 25.8301 17.8301 28.8906c14.9102 3.53027 30.3701 5.37988 45.7803 4.96973zM506.11 244.43c6.22949 -28.2295 6.00977 -50.1602 5.83008 -72.3398\r\n-c-0.110352 -13.1895 -10.8301 -23.7998 -24 -23.7998h-0.200195c-13.25 0.110352 -23.9102 10.9297 -23.7998 24.2002c0.209961 24.1895 0.00976562 40.1895 -4.7002 61.5996c-2.86035 12.9502 5.31934 25.75 18.2598 28.6104\r\n-c13.0996 2.92969 25.75 -5.35059 28.6104 -18.2705zM465.99 335.15c7.62012 -10.8408 5 -25.8105 -5.83984 -33.4307c-10.8604 -7.58984 -25.8105 -5 -33.4199 5.86035c-39.8906 56.8301 -105.171 91.3604 -174.62 92.3896\r\n-c-56.3408 0.810547 -108.92 -20.0596 -147.681 -58.8594c-37.1201 -37.1406 -57.1094 -86.5 -56.2793 -139l-0.160156 -23.6406c-0.379883 -13 -11.0498 -23.2998 -23.9707 -23.2998c-0.239258 0 -0.489258 0 -0.719727 0.0205078\r\n-c-13.25 0.379883 -23.6699 11.4395 -23.2803 24.6895l0.120117 21.4697c-1.04004 65.6104 23.9502 127.28 70.3203 173.71c48.0098 48.0303 112.56 73.7607 182.35 72.9209c84.79 -1.27051 164.48 -43.4404 213.181 -112.83z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fish\" unicode=\"&#xf578;\" horiz-adv-x=\"576\" \r\n-d=\"M327.1 352c137.46 0 248.9 -128 248.9 -160s-111.44 -160 -248.9 -160c-89.9697 0 -168.55 54.7695 -212.279 101.62l-87.3301 -66.0498c-12.1299 -9.16992 -30.2402 0.599609 -27.1406 14.6602l24.1904 109.77l-24.1797 109.76\r\n-c-3.10059 14.0605 15.0098 23.8398 27.1396 14.6602l87.3301 -66.0498c43.7295 46.8604 122.3 101.63 212.27 101.63zM414.53 168c13.25 0 24 10.75 24 24c0 13.2598 -10.7402 24 -24 24c-13.25 0 -24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flushed\" unicode=\"&#xf579;\" horiz-adv-x=\"496\" \r\n-d=\"M344 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM152 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248\r\n-s-248 111 -248 248s111 248 248 248zM80 224c0 -39.7998 32.2002 -72 72 -72s72 32.2002 72 72s-32.2002 72 -72 72s-72 -32.2002 -72 -72zM312 48c21.2002 0 21.2002 32 0 32h-128c-21.2002 0 -21.2002 -32 0 -32h128zM344 152c39.7998 0 72 32.2002 72 72\r\n-s-32.2002 72 -72 72s-72 -32.2002 -72 -72s32.2002 -72 72 -72z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"frown-open\" unicode=\"&#xf57a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM323.3 56.7002c11.4004 -3.5 22.5 6.2002 20.5 18.0996\r\n-c-7 39.9004 -60.0996 61.2002 -95.7998 61.2002s-88.7998 -21.2002 -95.7998 -61.2002c-2 -11.7998 9 -21.5996 20.5 -18.0996c31.2002 9.59961 59.3994 15.2998 75.2998 15.2998s44.0996 -5.7002 75.2998 -15.2998zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32\r\n-s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glass-martini-alt\" unicode=\"&#xf57b;\" \r\n-d=\"M502.05 390.4l-214.05 -214.04v-192.36h56c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v192.36l-214.05 214.04c-21.25 21.2598 -6.2002 57.5996 23.8496 57.5996h444.4\r\n-c30.0498 0 45.0996 -36.3398 23.8496 -57.5996zM443.77 400h-375.529l48 -48h279.529z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe-africa\" unicode=\"&#xf57c;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM408 224.5c0 8.55957 6.94043 15.5 15.5 15.5h18.4297c-19.0693 76.9805 -82.6992 136.37 -161.92 149.21v-21.7002c0 -8.55957 -6.93945 -15.5 -15.5 -15.5\r\n-h-24.21c-5.17969 0 -10.0195 -2.58984 -12.8896 -6.89941l-8.08008 -12.1104c-2.13965 -3.20996 -5.40039 -5.5 -9.13965 -6.44043l-14.4502 -3.60938c-6.90039 -1.73047 -11.7402 -7.93066 -11.7402 -15.04v-4.40039c0 -8.55957 6.94043 -15.5 15.5 -15.5h90.0498\r\n-h0.00292969c3.54297 0 8.45215 -2.0332 10.957 -4.54004l6.91992 -6.91992c2.91016 -2.91016 6.85059 -4.54004 10.96 -4.54004h10.0908c8.55957 0 15.5 -6.93945 15.5 -15.5c0 -6.66992 -4.27051 -12.5898 -10.6006 -14.7002l-47.3096 -15.7695\r\n-c-3.90039 -1.2998 -8.15039 -1 -11.8301 0.839844l-14.7207 7.36035c-7.5791 3.7998 -15.9492 5.76953 -24.4297 5.76953h-0.889648c-10.0527 -0.00195312 -24.7383 -4.89941 -32.7803 -10.9297l-27.5801 -20.6904c-13.75 -10.3193 -21.8496 -26.5098 -21.8496 -43.6992\r\n-v-14.0605c0.00195312 -12.4902 7.16992 -29.7959 16 -38.6299c10.25 -10.2402 24.1396 -16 38.6299 -16h25.8799c8.55957 0 15.5 -6.94043 15.5 -15.5v-29.8896v-0.00390625c0 -10.2822 3.73145 -26.0898 8.33008 -35.2861\r\n-c4.7002 -9.40039 14.3096 -15.3398 24.8203 -15.3398c8.19824 0.000976562 18.542 5.53809 23.0898 12.3594l13.0293 19.5498c5.9248 8.88477 17.125 21.9482 25 29.1602c2.4707 2.27051 4.14062 5.27051 4.76074 8.56055l4.2998 22.8301\r\n-c0.439453 2.3291 1.41016 4.5293 2.83008 6.42969l18.7402 24.9795c2.00977 2.68066 3.09961 5.9502 3.09961 9.30078v11.3398c0 8.55957 -6.94043 15.5 -15.5 15.5h-8.20996c-5.17969 0 -10.0205 2.58984 -12.8896 6.89941l-13.2402 19.8604\r\n-c-5.66992 8.50977 -1.70996 20.0703 7.99023 23.2998l2.64941 0.879883c1.31641 0.4375 3.50977 0.792969 4.89746 0.792969c2.5918 0 6.44531 -1.16602 8.60254 -2.60254l18.21 -12.1396c2.15527 -1.43945 6.00781 -2.60742 8.59961 -2.60742\r\n-c2.01953 0 5.125 0.733398 6.93066 1.63672l15.3896 7.7002c5.25 2.62012 8.57031 7.99023 8.57031 13.8604v6.92969z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe-americas\" unicode=\"&#xf57d;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM330.29 82.4004c7.56934 7.52832 13.7168 22.3037 13.7197 32.9795v0.00488281c0 6.97266 -4 16.6338 -8.92969 21.5654l-13.6904 13.6895\r\n-c-6.00977 6 -14.1396 9.37012 -22.6299 9.37012h-66.75c-9.41016 4.70996 -21.4795 32 -32 32c-10.5195 0 -20.8994 2.4502 -30.3096 7.16016l-11.0801 5.54004c-4.0498 2.03027 -6.61035 6.16016 -6.61035 10.6904v0.00292969c0 4.75391 3.66016 9.83301 8.16992 11.3369\r\n-l31.1699 10.3896c1.3584 0.452148 3.62305 0.818359 5.05469 0.818359c3.30078 0 8.00293 -1.75488 10.4961 -3.91797l9.2793 -8.06055c1.4502 -1.25977 3.31055 -1.95996 5.24023 -1.95996h5.63965c5.94043 0 9.81055 6.25977 7.15039 11.5801l-15.5898 31.1904\r\n-c-0.464844 0.931641 -0.84082 2.53223 -0.84082 3.57227c0 1.86621 1.08398 4.43555 2.4209 5.7373l9.91992 9.65039c1.5 1.45996 3.5 2.26953 5.58008 2.26953h8.99023h0.00292969c1.82812 0 4.3623 1.04883 5.65625 2.33984l8 8\r\n-c3.12012 3.12012 3.12012 8.19043 0 11.3105l-4.68945 4.68945c-3.12012 3.12012 -3.12012 8.19043 0 11.3105l10.3398 10.3398l4.69043 4.67969c6.25 6.25 6.25 16.3799 0 22.6299l-28.3008 28.3008c-8.26953 -0.310547 -16.3994 -1.12988 -24.3896 -2.41992v-11.3008\r\n-c0 -11.8994 -12.5195 -19.6299 -23.1602 -14.3096l-24.0098 12.0098c-45.8398 -19.8496 -82.7305 -56.3896 -103.2 -101.89c9.92969 -14.7197 25.21 -37.3701 34.5898 -51.1406c4.29395 -6.3252 12.3848 -15.6172 18.0605 -20.7393l0.799805 -0.720703\r\n-c9.5498 -8.60938 20.1699 -15.9697 31.6504 -21.75c14 -7.0498 34.4395 -18.1592 48.8096 -26.1094c10.1904 -5.62988 16.46 -16.3301 16.46 -27.9707v-32.0098c0 -8.49023 3.37012 -16.6299 9.37012 -22.6299c14.9902 -14.9902 24.3203 -38.6299 22.6299 -51.25v-27.3799\r\n-c14.6504 0 28.8896 1.69043 42.6504 4.69043l17.3896 46.8496c2.04004 5.49023 3.25977 11.21 4.76953 16.8701c1.07031 4.00977 3.18066 7.70996 6.1709 10.71c3.31934 3.33008 7.40918 7.39941 11.3096 11.2803zM417 173.75l29.1797 -7.29004\r\n-c1.08008 8.37988 1.82031 16.8701 1.82031 25.54c0 32.1299 -7.7998 62.4102 -21.3203 89.3301l-12.9795 -6.49023c-3.74023 -1.85938 -6.91992 -4.67969 -9.24023 -8.14941l-19.5898 -29.3809c-2.22754 -3.33594 -4.03516 -9.29883 -4.03516 -13.3096\r\n-s1.80762 -9.97363 4.03516 -13.3096l17.9795 -26.9707c3.31055 -4.96973 8.36035 -8.51953 14.1504 -9.96973z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe-asia\" unicode=\"&#xf57e;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM236.66 199.77l17.3701 28.9502c1.7998 2.99023 6.2002 2.82031 7.75977 -0.299805c1.34961 -2.70996 4.12012 -4.41992 7.15039 -4.41992h3.05957\r\n-c4.41992 0 8 3.58008 8 8v78.1201c0 6.05957 -3.41992 11.5996 -8.83984 14.3096l-10.8301 5.41016c-5.49023 2.75 -5.96973 10.4004 -0.860352 13.8105l50.1602 38.5293c-19.4297 6.31055 -40.1201 9.82031 -61.6299 9.82031c-110.28 0 -200 -89.7197 -200 -200\r\n-c0 -10.9199 1.12012 -21.5498 2.80957 -31.9902h62.5703c4.24023 0 8.31055 1.69043 11.3105 4.69043l19.4697 19.46c3.85938 3.85938 10.3701 2.7998 12.8096 -2.08008l22.6201 -45.2305c2.70996 -5.42969 8.25 -8.84961 14.3105 -8.84961h6.10938\r\n-c8.83984 0 16 7.16016 16 16v9.37012c0 4.24023 -1.68945 8.30957 -4.68945 11.3096l-5.66016 5.66016c-3.12012 3.12012 -3.12012 8.19043 0 11.3105l5.66016 5.65918c3 3 7.06934 4.69043 11.3096 4.69043h0.310547c5.61914 0 10.8291 2.9502 13.7197 7.76953z\r\n-M408 89.5703l-0.00976562 24.5996c0 4.24023 -1.69043 8.31055 -4.69043 11.3105l-11.9102 11.9092c-1.5 1.5 -2.33984 3.54004 -2.33984 5.66016v12.9307c0 2.20996 -1.79004 4 -4 4h-6.05957c-1.78027 0 -3.33984 -1.1709 -3.83984 -2.88086l-4.2002 -14.4697\r\n-c-0.490234 -1.7002 -2.06055 -2.87988 -3.83984 -2.87988h-3.80078c-1.4707 0.000976562 -3.12305 1.10254 -3.68945 2.45996l-5.35059 12.8496c-1.23926 2.99023 -4.15918 4.93066 -7.38965 4.93066h-12.0898h-0.0117188c-1.4082 0 -3.48145 -0.663086 -4.62793 -1.48047\r\n-l-23.71 -16.8896c-1.73047 -1.23047 -3.61035 -2.25977 -5.59082 -3.0498l-39.3398 -15.7402c-3.04004 -1.21973 -5.0293 -4.16016 -5.0293 -7.42969v-10.2002v-0.00292969c0 -1.8291 1.04785 -4.36328 2.33984 -5.65723l11.9102 -11.9102\r\n-c3 -3 7.06934 -4.68945 11.3096 -4.68945h10.3398c1.31055 0 2.61035 0.15918 3.87988 0.479492l21.2705 5.32031c1.76465 0.441406 4.67383 0.798828 6.49316 0.798828c6.12012 0 14.5986 -3.51172 18.9268 -7.83887l13.0098 -13.0098\r\n-c3 -3 7.07031 -4.69043 11.3096 -4.69043h15.1602c4.24023 0 8.31055 1.69043 11.3105 4.69043l9.56934 9.56934c3 3 4.69043 7.07031 4.69043 11.3105z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grimace\" unicode=\"&#xf57f;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM144 48v40h-40v-8c0 -17.7002 14.2998 -32 32 -32h8zM144 104v40h-8c-17.7002 0 -32 -14.2998 -32 -32v-8h40zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32\r\n-s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM208 48v40h-48v-40h48zM208 104v40h-48v-40h48zM272 48v40h-48v-40h48zM272 104v40h-48v-40h48zM336 48v40h-48v-40h48zM336 104v40h-48v-40h48zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32\r\n-s14.2998 -32 32 -32zM392 80v8h-40v-40h8c17.7002 0 32 14.2998 32 32zM392 104v8c0 17.7002 -14.2998 32 -32 32h-8v-40h40z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin\" unicode=\"&#xf580;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\r\n-s32 14.2998 32 32s-14.2998 32 -32 32zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.39941 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002\r\n-c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-alt\" unicode=\"&#xf581;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM311.7 311.3c-12.4004 -18.3994 -15.2002 -36.8994 -15.7002 -55.2998c0.599609 -18.4004 3.2998 -36.9004 15.7002 -55.2998c8 -11.7002 25.0996 -11.4004 32.7002 0\r\n-c12.3994 18.3994 15.1992 36.8994 15.6992 55.2998c-0.599609 18.4004 -3.2998 36.9004 -15.6992 55.2998c-8 11.7002 -25.1006 11.4004 -32.7002 0zM151.7 311.3c-12.4004 -18.3994 -15.2002 -36.8994 -15.7002 -55.2998\r\n-c0.599609 -18.4004 3.2998 -36.9004 15.7002 -55.2998c8 -11.7002 25.0996 -11.4004 32.7002 0c12.3994 18.3994 15.1992 36.8994 15.6992 55.2998c-0.599609 18.4004 -3.2998 36.9004 -15.6992 55.2998c-8 11.7002 -25.1006 11.4004 -32.7002 0zM248 16\r\n-c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004\r\n-c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-beam\" unicode=\"&#xf582;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7998 -11.7998 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\r\n-c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM168 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17\r\n-c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\r\n-c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.3008 3.7002 -22.7002 -6 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-beam-sweat\" unicode=\"&#xf583;\" horiz-adv-x=\"504\" \r\n-d=\"M456 320c-26.5 0 -48 21 -48 47c0 20 28.5 60.4004 41.5996 77.7998c3.2002 4.2998 9.60059 4.2998 12.8008 0c13.0996 -17.3994 41.5996 -57.7998 41.5996 -77.7998c0 -26 -21.5 -47 -48 -47zM456 288c6.7998 0 13.2002 1.09961 19.5 2.59961\r\n-c13.0996 -30.1992 20.5 -63.5 20.5 -98.5996c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248c50.2998 0 97 -15.0996 136.1 -40.7998c-7.7998 -18 -8.09961 -27.7998 -8.09961 -32.2002c0 -43.5996 35.9004 -79 80 -79zM328 296\r\n-c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7998 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5\r\n-c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM168 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\r\n-c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7002 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002\r\n-s-92.9004 5.5 -123.1 15.2002c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-hearts\" unicode=\"&#xf584;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM90.4004 264.4c-7.7002 -20.2002 3.7998 -41.8008 24.1992 -47.2002l70.2002 -18.2002c4.60059 -1.2002 9.2998 1.5 10.5 6l19.4004 69.9004\r\n-c5.59961 20.2998 -7.40039 41.0996 -28.7998 44.5c-18.7002 3 -36.5 -9.80078 -41.5 -27.9004l-2 -7.09961l-7.10059 1.89941c-18.2002 4.7998 -38.2002 -4.2998 -44.8994 -21.8994zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\r\n-c1.90039 11.7998 -9.2998 21.5 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998zM381.4 217.3\r\n-c20.3994 5.2998 31.8994 26.9004 24.1992 47.2002c-6.69922 17.5996 -26.6992 26.5996 -44.8994 21.9004l-7.10059 -1.90039l-2 7.09961c-5.09961 18.1006 -22.8994 30.9004 -41.5 27.9004c-21.3994 -3.40039 -34.3994 -24.2002 -28.7998 -44.5l19.4004 -69.9004\r\n-c1.2998 -4.5 6 -7.19922 10.5 -6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-squint\" unicode=\"&#xf585;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 250.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\r\n-c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 280.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM248 16\r\n-c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7002 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.3008 3.7002 -22.7002 -6 -20.7002 -17.9004\r\n-c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-squint-tears\" unicode=\"&#xf586;\" \r\n-d=\"M409.6 336.1c-5.59961 -0.799805 -10.2998 3.90039 -9.5 9.40039c3.30078 22.5996 12 73.5 26.8008 88.2998c19.0996 19.2002 50.6992 18.9004 70.2998 -0.700195c19.5996 -19.5996 19.8994 -51 0.700195 -70.1992\r\n-c-14.8008 -14.8008 -65.7002 -23.6006 -88.3008 -26.8008zM102.4 47.9004c5.59961 0.799805 10.2998 -3.90039 9.5 -9.40039c-3.30078 -22.5996 -12 -73.5 -26.8008 -88.2998c-19.1992 -19.2002 -50.5996 -18.9004 -70.1992 0.700195\r\n-c-19.6006 19.5996 -19.9004 51.0996 -0.800781 70.1992c14.8008 14.8008 65.7002 23.6006 88.3008 26.8008zM414.1 304.4c24 3.5 42.1006 7.39941 56.5 11.5c54.8008 -94.9004 42 -218.2 -39.1992 -299.301c-81.2002 -81.0996 -204.5 -94 -299.301 -39.1992\r\n-c4.10059 14.3994 8.10059 32.5 11.5 56.5c2.90039 20.5 -12.5 49.5996 -45.6992 45.6992c-24.1006 -3.5 -42.1006 -7.39941 -56.5 -11.5c-54.8008 94.9004 -41.9004 218.2 39.1992 299.301c81.2002 81.0996 204.5 94 299.301 39.1992\r\n-c-4.10059 -14.3994 -8.10059 -32.5 -11.5 -56.5c-2.90039 -20.5996 12.6992 -49.5996 45.6992 -45.6992zM255.7 342l-22.5 -90.5996c-2.2002 -8.60059 5.59961 -16.7002 14.5 -14.5l90.5 22.5996c13.0996 3.2998 11.5996 22.4004 -1.7998 23.5996l-52.3008 4.80078\r\n-l-4.7998 52.2998c-1.2002 13.2998 -20.2998 15 -23.5996 1.7998zM164.8 111.7c1.2998 -13.4004 20.4004 -14.9004 23.5 -1.7002l22.6006 90.5c2.19922 8.7002 -5.7002 16.7002 -14.5 14.5l-90.5 -22.5996c-13.1006 -3.30078 -11.6006 -22.4004 1.7998 -23.6006\r\n-l52.2998 -4.7998zM380.5 67.5c42.7998 42.9004 68 122.3 35.7002 167.6c-7.10059 9.90039 -21.9004 8.5 -27.2998 -2c-14.6006 -28.1992 -42.4004 -63.8994 -76.3008 -97.7998c-33.8994 -33.8994 -69.5 -61.7002 -97.7998 -76.2998\r\n-c-10.7002 -5.40039 -11.7998 -20.2998 -2 -27.2002c14.4004 -10.2002 32.1006 -14.7002 51 -14.7002c41 0 87.4004 21.1006 116.7 50.4004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-stars\" unicode=\"&#xf587;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM94.5996 279.1c-6.19922 -1 -8.89941 -8.59961 -4.2998 -13.2998l25.4004 -24.5996l-6 -34.9004c-1 -6.2002 5.2998 -11 11 -7.89941l31.2998 16.2998l31.2002 -16.2002\r\n-c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994l25.3994 24.6006c4.60059 4.59961 1.90039 12.1992 -4.2998 13.1992l-34.8994 5l-15.5 31.6006c-2.90039 5.7998 -11 5.7998 -13.9004 0l-15.5 -31.6006zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\r\n-c1.90039 11.7998 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998zM405.7 265.9\r\n-c4.59961 4.59961 1.89941 12.1992 -4.40039 13.0996l-34.8994 5l-15.5 31.5996c-2.90039 5.80078 -11 5.80078 -13.9004 0l-15.5 -31.5996l-34.9004 -5c-6.19922 -1 -8.7998 -8.59961 -4.2998 -13.2002l25.4004 -24.5996l-6 -34.9004c-1 -6.2002 5.2998 -11 11 -7.89941\r\n-l31.2998 16.2998l31.2998 -16.2002c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tears\" unicode=\"&#xf588;\" horiz-adv-x=\"640\" \r\n-d=\"M102.4 191.9c5.59961 0.799805 10.2998 -3.90039 9.5 -9.40039c-3.30078 -22.5996 -12 -73.5 -26.8008 -88.2998c-19.1992 -19.2002 -50.5996 -18.9004 -70.1992 0.700195c-19.6006 19.5996 -19.9004 51.0996 -0.800781 70.1992\r\n-c14.8008 14.8008 65.7002 23.6006 88.3008 26.8008zM625.8 165.1c19.2002 -19.0996 18.7998 -50.6992 -0.799805 -70.2998c-19.5996 -19.5996 -51 -19.8994 -70.2002 -0.700195c-14.7998 14.8008 -23.5996 65.7002 -26.7998 88.3008c-0.799805 5.59961 4 10.2998 9.5 9.5\r\n-c22.5996 -3.30078 73.5 -12 88.2998 -26.8008zM496.4 177.9c11.7998 -82.3008 29.8994 -100.4 35.7998 -106.301c0.899414 -1 2 -1.59961 3 -2.5c-42.7002 -74.6992 -123 -125.1 -215.2 -125.1s-172.5 50.4004 -215.2 125c1 0.900391 2.10059 1.59961 3 2.5\r\n-c5.90039 6 24 24.0996 35.7998 106.4c2.90039 20.3994 -12.5 49.5996 -45.6992 45.6992c-8.90039 -1.2998 -16.8008 -2.69922 -24.3008 -4.09961c13.7002 124 118.7 220.5 246.4 220.5s232.7 -96.5 246.4 -220.5c-7.5 1.40039 -15.4004 2.7998 -24.3008 4.09961\r\n-c-26.5996 3.80078 -49.5 -19.0996 -45.6992 -45.6992zM400 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\r\n-c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM240 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\r\n-c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM320 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004\r\n-c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.7002 -22.7002 -6.2002 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue\" unicode=\"&#xf589;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5c24.7002 16.2002 43.5 38.0996 47.7998 63.7998c1.90039 11.7998 -9.2998 21.5 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002\r\n-s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM168 208\r\n-c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078v-64\r\n-c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998\r\n-c3.5 15.4004 20.2002 24.1006 34.5996 17.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue-squint\" unicode=\"&#xf58a;\" horiz-adv-x=\"496\" \r\n-d=\"M293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078v-64c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006\r\n-l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998c3.5 15.4004 20.2002 24.1006 34.5996 17.6006zM248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5\r\n-c24.7002 16.2002 43.5 38.0996 47.7998 63.7998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.59961 -22.7002 -6.10059 -20.7002 -17.9004\r\n-c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM214.2 229.7c7.7002 4.7002 7.7002 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18\r\n-l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18zM377.2 199.7l-33.6006 40.2998l33.6006 40.2998c8.5 10.2998 -3.7002 24.9004 -15.4004 18l-80 -48c-7.7998 -4.7002 -7.7998 -15.8994 0 -20.5996l80 -48\r\n-c11.5 -6.7998 24.1006 7.59961 15.4004 18z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-tongue-wink\" unicode=\"&#xf58b;\" horiz-adv-x=\"496\" \r\n-d=\"M344 264c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5c24.7002 16.2002 43.5 38.0996 47.7998 63.7998\r\n-c1.90039 11.7998 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5\r\n-c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM192 215c8.40039 -7.40039 21.5996 -0.299805 20 10.7998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006\r\n-c-1.7998 -11.0996 11.2998 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM344 176c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078\r\n-v-64c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998\r\n-c3.5 15.4004 20.2002 24.1006 34.5996 17.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grin-wink\" unicode=\"&#xf58c;\" horiz-adv-x=\"496\" \r\n-d=\"M0 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM200 240c0 17.7002 -14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32zM368 215c8.5 -7.40039 21.5996 -0.200195 20 10.7998\r\n-c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM124.9 127.2c-11.4004 3.7002 -22.7002 -6 -20.7002 -17.9004\r\n-c9.2998 -55 83.2002 -93.2998 143.8 -93.2998s134.6 38.2998 143.8 93.2998c1.90039 11.9004 -9.39941 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grip-horizontal\" unicode=\"&#xf58d;\" horiz-adv-x=\"448\" \r\n-d=\"M96 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM256 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64\r\n-c0 17.6699 14.3301 32 32 32h64zM416 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM96 352c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64\r\n-c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM256 352c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM416 352c17.6699 0 32 -14.3301 32 -32v-64\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grip-vertical\" unicode=\"&#xf58e;\" horiz-adv-x=\"320\" \r\n-d=\"M96 416c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM96 256c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64\r\n-c0 17.6699 14.3301 32 32 32h64zM96 96c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 416c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64\r\n-c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 256c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 96c17.6699 0 32 -14.3301 32 -32v-64\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"headphones-alt\" unicode=\"&#xf58f;\" \r\n-d=\"M160 160c17.6699 0 32 -14.3496 32 -32.0596v-127.881c0 -17.6992 -14.3301 -32.0596 -32 -32.0596h-16c-35.3496 0 -64 28.71 -64 64.1201v63.7598c0 35.4199 28.6504 64.1201 64 64.1201h16zM368 160c35.3496 0 64 -28.71 64 -64.1201v-63.7598\r\n-c0 -35.4102 -28.6504 -64.1201 -64 -64.1201h-16c-17.6699 0 -32 14.3604 -32 32.0596v127.881c0 17.71 14.3301 32.0596 32 32.0596h16zM256 416c143.09 0 251.43 -119.13 256 -256v-112c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v112\r\n-c0 114.67 -93.3301 207.8 -208 207.82c-114.67 -0.0205078 -208 -93.1504 -208 -207.82v-112c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v112c4.57031 136.87 112.91 256 256 256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"headset\" unicode=\"&#xf590;\" \r\n-d=\"M192 240v-112c0 -17.6699 -14.3301 -32 -32 -32h-16c-35.3496 0 -64 28.6504 -64 64v48c0 35.3496 28.6504 64 64 64h16c17.6699 0 32 -14.3301 32 -32zM368 96h-16c-17.6699 0 -32 14.3301 -32 32v112c0 17.6699 14.3301 32 32 32h16c35.3496 0 64 -28.6504 64 -64v-48\r\n-c0 -35.3496 -28.6504 -64 -64 -64zM256 448c142.82 0 251.42 -118.83 256 -256v-165.72c0 -49.8604 -40.4199 -90.2803 -90.2803 -90.2803h-181.72c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48h32c26.5098 0 48 -21.4902 48 -48h101.72\r\n-c23.3506 0 42.2803 18.9297 42.2803 42.2803c0 0 -0.0400391 163.29 -0.120117 165.72h0.120117c0 114.69 -93.3096 208 -208 208s-208 -93.3096 -208 -208v-16c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v16c4.58008 137.17 113.18 256 256 256z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"highlighter\" unicode=\"&#xf591;\" horiz-adv-x=\"544\" \r\n-d=\"M0 -31.9805l68.3301 70.4707l67.04 -67.04l-35.4502 -35.4502zM124.61 208.03l41.5195 35.4395l173.34 -173.34l-35.5498 -41.6396c-9.5 -10.7705 -24.4199 -14.9805 -38.1504 -10.7803l-42.7393 13.0801l-50.8604 -50.8604l-96.2295 96.2305l50.9297 50.9395\r\n-l-13.0498 42.8301c-0.876953 2.87891 -1.58887 7.65625 -1.58887 10.665c0 9.11328 5.5459 21.4043 12.3789 27.4355zM527.92 368.73c20.5 -20.5 21.5303 -53.3906 2.34961 -75.1309l-169.949 -199.06l-169.771 169.78l199.05 169.96\r\n-c21.7402 19.1699 54.6309 18.1396 75.1201 -2.35059z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hot-tub\" unicode=\"&#xf593;\" \r\n-d=\"M414.21 270.35c-3.15039 25.3906 -14.6104 47.9707 -31.9697 62.1406c-27.7305 22.6299 -45.79 58.0498 -50.1299 97.1602c-1.09082 9.7793 6.48926 18.3496 16 18.3496h16.1201c7.98926 0 14.7295 -6.13965 15.7393 -14.3398\r\n-c3.16016 -25.4004 14.6104 -47.9805 31.9805 -62.1504c27.7295 -22.6299 45.79 -58.0498 50.1299 -97.1602c1.08008 -9.7793 -6.49023 -18.3496 -16 -18.3496h-16.1201c-8 0 -14.7295 6.13965 -15.75 14.3496zM306.21 270.35\r\n-c-3.15039 25.3906 -14.6104 47.9707 -31.9697 62.1406c-27.7305 22.6299 -45.79 58.0498 -50.1299 97.1602c-1.09082 9.7793 6.48926 18.3496 16 18.3496h16.1201c7.98926 0 14.7295 -6.13965 15.7393 -14.3398c3.16016 -25.4004 14.6104 -47.9805 31.9805 -62.1504\r\n-c27.7295 -22.6299 45.79 -58.0498 50.1299 -97.1602c1.08008 -9.7793 -6.49023 -18.3496 -16 -18.3496h-16.1201c-8 0 -14.7295 6.13965 -15.75 14.3496zM480 192c17.6699 0 32 -14.3301 32 -32v-160c0 -35.3496 -28.6504 -64 -64 -64h-384c-35.3496 0 -64 28.6504 -64 64\r\n-v224c0 35.3496 28.6504 64 64 64h42.6699h0.00292969c11.7754 0 28.9775 -5.73438 38.3975 -12.7998l110.93 -83.2002h224zM128 8v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM224 8v112\r\n-c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM320 8v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM416 8\r\n-v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM64 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hotel\" unicode=\"&#xf594;\" horiz-adv-x=\"576\" \r\n-d=\"M560 384h-16v-384h16c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-240v80c0 8.7998 -7.2002 16 -16 16h-32c-8.7998 0 -16 -7.2002 -16 -16v-80h-240c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h15.9805v384h-15.9805\r\n-c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h544c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16zM256 339.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\r\n-c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM256 243.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\r\n-c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM128 339.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\r\n-c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM179.2 192c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004zM192 64h192c0 53.0195 -42.9805 96 -96 96s-96 -42.9805 -96 -96zM448 204.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM448 300.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\r\n-c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"joint\" unicode=\"&#xf595;\" horiz-adv-x=\"640\" \r\n-d=\"M444.34 266.9c-35.7803 25.0693 -60.3398 63.0098 -60.3398 106.699v66.4004c0 4.41992 3.58008 8 8 8h48c4.41992 0 8 -3.58008 8 -8v-62.3096c0 -29.0303 15.8496 -54.71 39.6602 -71.3203c35.3301 -24.6504 56.3398 -64.8203 56.3398 -108.061v-30.3096\r\n-c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v30.3096c0 27.4307 -13.2803 52.9102 -35.6602 68.5908zM194.97 89.0195c22.3701 3.60059 45.0801 -4.30957 59.8203 -21.5098l112.72 -131.51h-88.5693c-98.6406 0 -195.29 27.7197 -278.94 80\r\n-c59.6904 37.3096 126.03 61.9297 194.97 73.0195zM553.28 360.91c54.3096 -36.4102 86.7197 -97.1602 86.7197 -162.601v-30.3096c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v30.3096c0 50.1504 -25.21 96.6504 -67.3604 123.99\r\n-c-18.4697 11.9805 -28.6396 33.3701 -28.6396 55.3906v62.3096c0 4.41992 3.58008 8 8 8h48c4.41992 0 8 -3.58008 8 -8v-62.3096c0 -6.82031 3.61035 -12.9805 9.28027 -16.7803zM360.89 95.9502h0.108398c16.2441 0 38.0049 -10.0127 48.5723 -22.3506l117.949 -137.6\r\n-h-88.4492h-0.00292969c-16.248 0 -38.0146 10.0127 -48.5869 22.3496l-117.801 137.431c1.40039 0.0195312 53.8105 0.109375 88.21 0.169922zM616 96c13.25 0 24 -10.7402 24 -24v-112c0 -13.25 -10.75 -24 -24 -24h-17.4199h-0.00292969\r\n-c-16.248 0 -38.0146 10.0127 -48.5869 22.3496l-117.99 137.65h184z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss\" unicode=\"&#xf596;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM304 52c0 13 -13.4004 27.2998 -35.2002 36.4004\r\n-c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44c-8.40039 1.09961 -12.2002 -11.8008 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002c-6.10059 -2.59961 -6 -12.2998 0 -14.7998\r\n-l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32\r\n-s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss-beam\" unicode=\"&#xf597;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM209 220.1c4.2002 -7.5 15.5996 -4 15.0996 4.5c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004\r\n-c-0.699219 -8.5 10.7002 -11.8994 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006zM304 52c0 13 -13.4004 27.2998 -35.2002 36.4004c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44\r\n-c-8.40039 1.09961 -12.2002 -11.8008 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002c-6.10059 -2.59961 -6 -12.2998 0 -14.7998l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5\r\n-l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM369 220.1c4.2002 -7.5 15.5996 -4 15.0996 4.5c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004\r\n-c-0.699219 -8.5 10.8008 -11.7998 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kiss-wink-heart\" unicode=\"&#xf598;\" horiz-adv-x=\"504\" \r\n-d=\"M501.1 45.5c9.2002 -23.9004 -4.39941 -49.4004 -28.5 -55.7002l-83 -21.5c-5.39941 -1.39941 -10.8994 1.7998 -12.3994 7.10059l-22.9004 82.5996c-6.59961 24 8.7998 48.5996 34 52.5996c22 3.5 43.1006 -11.5996 49 -33l2.2998 -8.39941l8.40039 2.2002\r\n-c21.5996 5.59961 45.0996 -5.10059 53.0996 -25.9004zM323.5 49.5c0 0 23.5996 -83.9004 23.9004 -84.5996c-30.5 -13.4004 -64 -20.9004 -99.4004 -20.9004c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248c0 -31.7998 -6.2002 -62.0996 -17.0996 -90\r\n-c-6 1.5 -12.2002 2.7998 -18.6006 2.90039c-29.0996 49.7998 -98.0996 50.5996 -127.8 4.2998c-11.2998 -17.7002 -14.5996 -39.4004 -9 -59.7002zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM288 52\r\n-c0 13 -13.4004 27.2998 -35.2002 36.4004c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44c-8.2002 1.19922 -12.4004 -11.7002 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002\r\n-c-5.7002 -2.5 -6 -12.2998 0 -14.7998l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM304 231l9.7002 8.5\r\n-c14.7998 13.2002 46.2002 13.2002 61 0l9.5 -8.5c8.5 -7.5 21.5 -0.299805 19.7998 10.7998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh\" unicode=\"&#xf599;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\r\n-s32 14.2998 32 32s-14.2998 32 -32 32zM256 16c73.4004 0 134 55 142.9 126c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-beam\" unicode=\"&#xf59a;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM272 240.6c-0.700195 -8.59961 10.9004 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\r\n-c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM112 240.6c-0.700195 -8.5 10.7998 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\r\n-c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM398.9 142c1.19922 9.59961 -6.30078 18 -15.9004 18h-270\r\n-c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-squint\" unicode=\"&#xf59b;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 278.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\r\n-c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 308.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM398.9 142\r\n-c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laugh-wink\" unicode=\"&#xf59c;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM268.1 241.9c-1.69922 -11.2002 11.5 -18.3008 19.9004 -10.9004l9.59961 8.59961c14.8008 13.2002 46.2002 13.2002 61 0l9.5 -8.5\r\n-c8.40039 -7.5 21.5 -0.299805 19.8008 10.8008c-4 25.1992 -34.2002 42.0996 -59.9004 42.0996s-55.9004 -16.9004 -59.9004 -42.0996zM168 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM398.9 142\r\n-c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"luggage-cart\" unicode=\"&#xf59d;\" horiz-adv-x=\"640\" \r\n-d=\"M224 128c-17.6699 0 -32 14.3301 -32 32v160c0 17.6699 14.3301 32 32 32h32v-224h-32zM576 160c0 -17.6699 -14.3301 -32 -32 -32h-32v224h32c17.6699 0 32 -14.3301 32 -32v-160zM624 64c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-82.9404\r\n-c1.79004 -5.03027 2.94043 -10.3604 2.94043 -16c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48c0 5.63965 1.15039 10.9697 2.94043 16h-197.881c1.79004 -5.03027 2.94043 -10.3604 2.94043 -16c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48\r\n-c0 5.63965 1.15039 10.9697 2.94043 16h-82.9404c-8.83984 0 -16 7.16016 -16 16v368h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-368h496zM480 352v-224h-192v272c0 26.5098 21.4902 48 48 48h96\r\n-c26.5098 0 48 -21.4902 48 -48v-48zM432 352v48h-96v-48h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-marked\" unicode=\"&#xf59f;\" horiz-adv-x=\"576\" \r\n-d=\"M288 448c69.5898 0 126 -56.4102 126 -126c0 -56.2598 -82.3496 -158.8 -113.9 -196.02c-6.37988 -7.54004 -17.8096 -7.54004 -24.1992 0c-31.5508 37.2197 -113.9 139.76 -113.9 196.02c0 69.5898 56.4102 126 126 126zM20.1201 232.05l118.63 47.4502\r\n-c5.17969 -14.8799 12.4102 -30.4404 21.25 -46.4199v-233.08l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v250.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71zM288 88.3301c14.0703 0 27.3799 6.17969 36.5098 16.9502\r\n-c19.6699 23.2002 40.5703 49.6299 59.4902 76.7197v-245.99l-192 64v182c18.9199 -27.0996 39.8301 -53.5195 59.4902 -76.7197c9.12988 -10.7803 22.4395 -16.96 36.5098 -16.96zM554.06 286.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-250.32\r\n-c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"map-marked-alt\" unicode=\"&#xf5a0;\" horiz-adv-x=\"576\" \r\n-d=\"M288 448c69.5898 0 126 -56.4102 126 -126c0 -56.2598 -82.3496 -158.8 -113.9 -196.02c-6.37988 -7.54004 -17.8096 -7.54004 -24.1992 0c-31.5508 37.2197 -113.9 139.76 -113.9 196.02c0 69.5898 56.4102 126 126 126zM288 280c23.2002 0 42 18.7998 42 42\r\n-s-18.7998 42 -42 42s-42 -18.7998 -42 -42s18.7998 -42 42 -42zM20.1201 232.05l118.63 47.4502c5.17969 -14.8799 12.4102 -30.4404 21.25 -46.4199v-233.08l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v250.32\r\n-c0.00292969 11.959 9.0166 25.2686 20.1201 29.71zM288 88.3301c14.0703 0 27.3799 6.17969 36.5098 16.9502c19.6699 23.2002 40.5703 49.6299 59.4902 76.7197v-245.99l-192 64v182c18.9199 -27.0996 39.8301 -53.5195 59.4902 -76.7197\r\n-c9.12988 -10.7803 22.4395 -16.96 36.5098 -16.96zM554.06 286.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-250.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v288z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"marker\" unicode=\"&#xf5a1;\" \r\n-d=\"M93.9502 157.97l75.3994 75.4004l128.021 -128.021l-75.4004 -75.3994c-44.8223 -44.8203 -132.335 -86.8428 -195.34 -93.7998c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l0.0302734 0.229492c7.00195 62.9189 49.0156 150.315 93.7803 195.08z\r\n-M485.49 421.49c35.3496 -35.3604 35.3496 -92.6699 0 -128.021l-165.49 -165.489l-128.02 128.02l98.4795 98.4697l-19.5898 19.5898l-87.1504 -87.1494c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6201 22.6201c-6.25 6.25 -6.25 16.3799 0 22.6299l104.12 104.12\r\n-c15.6104 15.6201 40.9404 15.6201 56.5605 0l36.5596 -36.5498l21.7598 21.7598c35.3506 35.3496 92.6699 35.3496 128.021 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"medal\" unicode=\"&#xf5a2;\" \r\n-d=\"M223.75 317.25c-42.04 -6.55957 -79.8398 -25.6201 -109.56 -53.3896l-111.271 158.96c-7.41992 10.6094 0.160156 25.1797 13.1104 25.1797h111.149c10.0029 0 22.2959 -6.96191 27.4404 -15.54zM495.97 448c12.9502 0 20.5303 -14.5703 13.1104 -25.1797\r\n-l-111.271 -158.95c-29.7197 27.7598 -67.5195 46.8203 -109.56 53.3799l69.1299 115.21c5.78027 9.63965 16.2002 15.54 27.4404 15.54h111.149zM256 288c97.2002 0 176 -78.7998 176 -176s-78.7998 -176 -176 -176s-176 78.7998 -176 176s78.7998 176 176 176z\r\n-M348.52 130.74c6.82031 6.63965 3.05078 18.2295 -6.34961 19.5898l-52.4297 7.63965l-23.4307 47.5205c-2.10938 4.25 -6.21973 6.38965 -10.3291 6.38965c-4.09082 0 -8.1709 -2.11035 -10.2803 -6.38965l-23.4307 -47.5205l-52.4297 -7.63965\r\n-c-9.39941 -1.36035 -13.1699 -12.9502 -6.34961 -19.5898l37.9297 -36.96l-8.96973 -52.2207c-1.60059 -9.34961 8.25 -16.54 16.6494 -12.0898l46.9004 24.6504l46.9102 -24.6504c8.38965 -4.41992 18.25 2.73047 16.6494 12.0898l-8.96973 52.2207z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh-blank\" unicode=\"&#xf5a4;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32\r\n-s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meh-rolling-eyes\" unicode=\"&#xf5a5;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM88 224c0 -35.2998 28.7002 -64 64 -64s64 28.7002 64 64c0 24.2998 -13.7002 45.2002 -33.5996 56c0.699219 -2.59961 1.59961 -5.2002 1.59961 -8\r\n-c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1.59961 8c-19.8994 -10.7998 -33.5996 -31.7002 -33.5996 -56zM312 48c21.2002 0 21.2002 32 0 32h-128c-21.2002 0 -21.2002 -32 0 -32h128zM344 160c35.2998 0 64 28.7002 64 64\r\n-c0 24.2998 -13.7002 45.2002 -33.5996 56c0.699219 -2.59961 1.59961 -5.2002 1.59961 -8c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1.59961 8c-19.8994 -10.7998 -33.5996 -31.7002 -33.5996 -56c0 -35.2998 28.7002 -64 64 -64z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"monument\" unicode=\"&#xf5a6;\" horiz-adv-x=\"384\" \r\n-d=\"M368 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-352c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h352zM289.14 347.26l30.8604 -315.26h-256l30.8701 315.26c0.625 6.27344 4.75098 14.9834 9.20996 19.4404\r\n-l76.5996 76.6094c6.25 6.25 16.3799 6.25 22.6299 0l76.6201 -76.6094c4.45898 -4.45703 8.58496 -13.167 9.20996 -19.4404zM240 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-70.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004\r\n-c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h70.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mortar-pestle\" unicode=\"&#xf5a7;\" \r\n-d=\"M501.54 387.09l-99.0801 -99.0898h-151.37l203.811 152.86c5.25293 3.93848 14.8457 7.13477 21.4121 7.13477c4.64941 0 11.7988 -1.68652 15.957 -3.76465c21.7803 -10.8906 26.4902 -39.9209 9.27051 -57.1406zM496 256c8.83984 0 16 -7.16016 16 -16v-32\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-16c0 -80.9805 -50.2002 -150.11 -121.13 -178.32c12.7695 -16.8701 21.7295 -36.7998 24.9502 -58.6895c1.45996 -9.91992 -6.04004 -18.9805 -16.0703 -18.9805h-223.5c-10.0303 0 -17.5303 9.06055 -16.0703 18.9805\r\n-c3.23047 21.8896 12.1904 41.8193 24.9502 58.6895c-70.9297 28.21 -121.13 97.3398 -121.13 178.32h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"paint-roller\" unicode=\"&#xf5aa;\" \r\n-d=\"M416 320c0 -17.6699 -14.3301 -32 -32 -32h-352c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h352c17.6699 0 32 -14.3301 32 -32v-96zM448 384c35.3496 0 64 -28.6504 64 -64v-64c0 -53.0195 -42.9805 -96 -96 -96h-160v-32\r\n-c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32v32c0 35.3496 28.6504 64 64 64h160c17.6699 0 32 14.3301 32 32v128z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"passport\" unicode=\"&#xf5ab;\" horiz-adv-x=\"448\" \r\n-d=\"M129.62 272c5.28027 31.2197 25.5898 57.1699 53.2998 70.4102c-7.66992 -19.0605 -12.7197 -43.3799 -14.21 -70.4102h-39.0898zM129.62 240h39.0898c1.49023 -27.0303 6.53027 -51.3496 14.21 -70.4102c-27.71 13.2402 -48.0098 39.1904 -53.2998 70.4102zM224 161.31\r\n-c-7.69043 7.4502 -20.7695 34.4307 -23.4404 78.6904h46.8701c-2.66016 -44.2695 -15.7393 -71.2402 -23.4297 -78.6904zM200.57 272c2.66016 44.2598 15.7393 71.2402 23.4395 78.6904c7.69043 -7.4502 20.7705 -34.4307 23.4307 -78.6904h-46.8701zM265.08 169.59\r\n-c7.67969 19.0605 12.7197 43.3799 14.21 70.4102h39.0898c-5.28027 -31.2197 -25.5898 -57.1699 -53.2998 -70.4102zM416 448c17.6699 0 32 -14.3301 32 -32v-448c0 -17.6699 -14.3301 -32 -32 -32h-352c-35.3496 0 -64 28.6504 -64 64v384c0 35.3496 28.6504 64 64 64h352z\r\n-M336 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16h-224c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h224zM224 128c70.6904 0 128 57.3096 128 128s-57.3096 128 -128 128s-128 -57.3096 -128 -128s57.3096 -128 128 -128zM265.08 342.41\r\n-c27.71 -13.2402 48.0195 -39.1904 53.2998 -70.4102h-39.0898c-1.49023 27.0303 -6.53027 51.3496 -14.21 70.4102z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pen-fancy\" unicode=\"&#xf5ac;\" \r\n-d=\"M79.1797 165.06l84.0703 33.0703l98.8799 -98.8799l-33.0703 -84.0703c-2.79102 -8.38086 -11.8584 -17.4482 -20.2393 -20.2393l-176.82 -58.9404l-4.67969 4.67969l92.8896 92.8906c2.55957 -0.660156 5.03027 -1.57031 7.7998 -1.57031c17.6699 0 32 14.3301 32 32\r\n-s-14.3301 32 -32 32s-32 -14.3301 -32 -32c0 -2.76953 0.910156 -5.24023 1.57031 -7.7998l-92.8896 -92.8906l-4.69043 4.69043l58.9404 176.82c2.79297 8.37891 11.8604 17.4463 20.2393 20.2393zM369.25 419.68c74.4805 84.2607 199.15 -39.1602 114.23 -114.229\r\n-l-199.49 -183.11l-97.8506 97.8506z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pen-nib\" unicode=\"&#xf5ad;\" \r\n-d=\"M136.6 309.21l151.4 42.79l128 -128l-42.79 -151.4c-5.08594 -17.9932 -23.6104 -37.3965 -41.3496 -43.3096l-279.86 -93.29l-14.6904 14.6904l150.11 150.109c6.25977 -2.99023 13.1797 -4.7998 20.5801 -4.7998c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48\r\n-s-48 -21.4902 -48 -48c0 -7.40039 1.80957 -14.3203 4.7998 -20.5801l-150.109 -150.11l-14.6904 14.6904l93.29 279.86c5.91309 17.7393 25.3164 36.2637 43.3096 41.3496zM497.94 373.83c18.75 -18.7598 18.75 -49.1602 0 -67.9102l-56.5508 -56.5498l-128.02 128.02\r\n-l56.5498 56.5508c18.75 18.75 49.1602 18.75 67.9102 0z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pencil-ruler\" unicode=\"&#xf5ae;\" \r\n-d=\"M109.46 203.96l-100.17 100.18c-12.3896 12.3906 -12.3799 32.4707 0 44.8604l89.71 89.71c12.3896 12.3896 32.4697 12.3896 44.8604 0l33.6396 -33.6504l-61.6797 -61.6797c-3.10059 -3.08984 -3.10059 -8.11035 0 -11.21l11.21 -11.21\r\n-c1.28027 -1.2832 3.79199 -2.3252 5.60449 -2.3252c1.81348 0 4.32422 1.04199 5.60547 2.3252l61.6797 61.6797l44.1201 -44.1201zM497.93 320.76l-46.0195 -46.0293l-113.2 113.199l46.0205 46.0107c18.7695 18.7598 49.1895 18.7598 67.9492 0l45.25 -45.25\r\n-c18.75 -18.7607 18.7607 -49.1709 0 -67.9307zM316.08 365.29l113.2 -113.19l-296.92 -296.93l-107.45 -18.8398c-14.5 -2.5498 -27.1201 10.0703 -24.5898 24.5596l18.7598 107.44zM502.71 79.8604c12.3896 -12.3906 12.3896 -32.4707 0 -44.8604l-89.71 -89.7002\r\n-c-12.3896 -12.3896 -32.4697 -12.3896 -44.8604 0l-100.21 100.2l134.58 134.56l44.1406 -44.1396l-61.6807 -61.6797c-3.08984 -3.08984 -3.08984 -8.11035 0 -11.21l11.21 -11.21c3.08984 -3.10059 8.11035 -3.10059 11.21 0l61.6807 61.6797z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plane-arrival\" unicode=\"&#xf5af;\" horiz-adv-x=\"640\" \r\n-d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h608zM44.8096 242.34c-6.5498 5.91016 -12.3896 14.3398 -12.5791 23.25l-0.230469 101.78\r\n-c0.19043 10.8799 10.3799 18.7002 20.7197 15.8799l39.7305 -10.8301c5.00977 -1.36035 9.08984 -5.04004 11.0195 -9.92969l27.5898 -67.8799l102.2 -27.8408l-47.9199 164.211c-0.189453 11.1191 10.1504 19.3193 20.71 16.4395l65.0898 -17.7295\r\n-c5.70996 -1.56055 10.1504 -6.10059 11.6602 -11.9102l100.36 -191.851l97.5098 -26.5596c26.4805 -7.20996 51.5498 -20.1797 70.8301 -40c21.6396 -22.25 27.2002 -40.46 23.3701 -54.96c-3.81055 -14.5 -17.5801 -27.4404 -47.25 -35.71\r\n-c-26.4404 -7.36035 -54.5205 -5.85059 -81 1.35938l-287.601 78.3506c-7.94531 2.16895 -19.3564 8.41016 -25.4697 13.9297z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"plane-departure\" unicode=\"&#xf5b0;\" horiz-adv-x=\"640\" \r\n-d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h608zM80.5498 106.73l-76.21 82.9697c-7.62012 8.95996 -4.87012 22.7803 5.57031 28.0801l40.1299 20.3701\r\n-c2.0957 1.0625 5.7041 1.92578 8.05469 1.92578c2.33691 0 5.92773 -0.853516 8.01562 -1.90625l72.3496 -36.4697l103.21 52.3799l-156.22 98.0996c-8.08008 8.87988 -5.5 23.1201 5.16992 28.5303l65.75 33.3701c2.0957 1.06348 5.70508 1.92676 8.05566 1.92676\r\n-c3 0 7.45508 -1.36035 9.94434 -3.03711l218.7 -82.0596l98.5098 49.9902c26.7402 13.5596 56.4297 21.4199 86.2803 19.4795c33.5098 -2.17969 51.04 -12.8799 58.25 -27.4502c7.22949 -14.5596 5.23926 -35.1699 -13.0703 -63.6494\r\n-c-16.3096 -25.3701 -40.2803 -44.7402 -67.0205 -58.3105l-290.96 -147.649c-7.71094 -3.91895 -20.9893 -7.1084 -29.6396 -7.12012l-130.54 -0.180664c-9.22949 -0.00976562 -18.0498 3.87012 -24.3301 10.7109z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"prescription\" unicode=\"&#xf5b1;\" horiz-adv-x=\"384\" \r\n-d=\"M301.26 96l78.0605 -78.0498c6.25 -6.25 6.25 -16.3799 0 -22.6299l-22.6299 -22.6299c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-78.0596 78.0596l-78.0498 -78.0703c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309\r\n-l78.0596 78.0596l-128 128h-18.75v-80c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v256c0 8.83984 7.16016 16 16 16h144c53.0195 0 96 -42.9805 96 -96c0 -48.8896 -36.6904 -88.7998 -83.96 -94.7803l83.96 -83.96l78.0596 78.0605\r\n-c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309zM64 352v-64h96c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32h-96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sad-cry\" unicode=\"&#xf5b3;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248c0 -90 -48.2002 -168.7 -120 -212.1v180.1c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16v-196.7c-29.5 -12.3994 -62 -19.2998 -96 -19.2998s-66.5 6.90039 -96 19.2998v196.7c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16\r\n-v-180.1c-71.7998 43.3994 -120 122 -120 212.1c0 137 111 248 248 248zM182.5 223.5l9.7002 -8.5c2.5 -2.2998 7.89941 -4.7002 13.7002 -1.59961c4.39941 2.39941 6.89941 7.39941 6.09961 12.3994c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006\r\n-c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-0.799805 -5 1.7002 -10 6.09961 -12.3994c4.40039 -2.40039 9.90039 -1.7002 13.7002 1.59961l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM248 32c26.5 0 48 28.7002 48 64s-21.5 64 -48 64s-48 -28.7002 -48 -64\r\n-s21.5 -64 48 -64zM397.8 213.5c4.40039 2.40039 6.7998 7.40039 6.2002 12.2998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-0.799805 -5 1.7002 -10 6.09961 -12.3994\r\n-c4.40039 -2.40039 9.90039 -1.7002 13.7002 1.59961l9.59961 8.59961c14.8008 13.2002 46.2002 13.2002 61 0l9.5 -8.5c2.5 -2.2998 7.90039 -4.69922 13.7002 -1.59961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sad-tear\" unicode=\"&#xf5b4;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM152 32c26.5 0 48 21 48 47c0 20 -28.5 60.4004 -41.5996 77.7998\r\n-c-3.2002 4.2998 -9.60059 4.2998 -12.8008 0c-13.0996 -17.3994 -41.5996 -57.7998 -41.5996 -77.7998c0 -26 21.5 -47 48 -47zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM338.2 53.7998\r\n-c13.2998 -16.0996 38.2998 4 24.5 20.4004c-28.4004 34.2002 -70.2998 53.7998 -114.7 53.7998c-21.2002 0 -21.2002 -32 0 -32c34.9004 0 67.7998 -15.4004 90.2002 -42.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shuttle-van\" unicode=\"&#xf5b6;\" horiz-adv-x=\"640\" \r\n-d=\"M628.88 237.35c7.17969 -8.62988 11.1201 -19.5 11.1201 -30.7295v-110.62c0 -17.6699 -14.3301 -32 -32 -32h-32c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-128c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-32c-17.6699 0 -32 14.3301 -32 32v288\r\n-c0 17.6699 14.3301 32 32 32h425.52c12.4082 -0.00195312 28.9258 -7.73926 36.8701 -17.2695zM64 256h96v96h-96v-96zM160 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM320 256v96h-96v-96h96zM480 16\r\n-c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM384 256h146.02l-80 96h-66.0195v-96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"signature\" unicode=\"&#xf5b7;\" horiz-adv-x=\"640\" \r\n-d=\"M623.2 256c9.09961 0.599609 16.7998 -7.09961 16.5996 -16.2002v-32.0996c0 -8.5 -6.7002 -15.1006 -15.2002 -15.7998c-39.3994 -3.2002 -105.399 -51 -138.399 -65.8008c-34.2998 -15.3994 -66.7002 -30 -102.3 -30c-28.2002 0 -50.2002 8.5 -65.5 25.3008\r\n-c-22.7002 24.8994 -22.8008 55.2998 -20.6006 83.7998c-56.5 -45.1006 -169 -153.601 -211.2 -195.8c-6.09961 -6.2002 -14.2998 -9.40039 -22.5996 -9.40039c-27 0 -36.5 27 -29.7002 43.9004l98.2002 245.6c8 19.9004 -14.2998 38.7998 -32.7002 27.0996l-58 -38.8994\r\n-c-7.5 -4.7998 -17.3994 -2.60059 -22.0996 4.89941l-17.2002 27c-4.7002 7.5 -2.5 17.4004 4.90039 22.1006l54.8994 36.8994c76.5 48.7002 160.101 -26.8994 129.7 -102.8l-41.5 -103.7c105.2 101.2 144.4 124.5 169.5 126\r\n-c54.4004 3.10059 43.7998 -68.0996 42.7002 -76.0996c-4.7002 -35.7002 -1.2998 -51.9004 21.2998 -51.9004c21.9004 0 47 11.3008 76.0996 24.4004c37.4004 16.7998 111.301 68 163.101 71.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smile-beam\" unicode=\"&#xf5b8;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM112 224.6c-0.700195 -8.5 10.7998 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\r\n-c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM362.8 101.8c13.5 16.2002 -11 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002\r\n-s-67.7998 15.3008 -90.2002 42.2002c-13.5996 16.2002 -38.0996 -4.2002 -24.5996 -20.5c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7998zM369 220.1c4.09961 -7.39941 15.7002 -4.09961 15.0996 4.5\r\n-c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004c-0.699219 -8.5 10.8008 -11.7998 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"solar-panel\" unicode=\"&#xf5ba;\" horiz-adv-x=\"640\" \r\n-d=\"M431.98 -0.00976562c8.84961 0.00976562 16.0293 -7.16992 16.0195 -16.0205l-0.0400391 -31.7295c-0.00976562 -8.82031 -7.16016 -15.9707 -15.9795 -15.9805l-223.961 -0.259766c-8.84961 -0.00976562 -16.0293 7.16992 -16.0195 16.0195l0.0498047 31.7305\r\n-c0.00976562 8.83008 7.16016 15.9805 15.9805 15.9902l47.9795 0.0498047v32.21h128v-32.0596zM585.2 421.26c58.1094 -342.42 54.7803 -321.39 54.7598 -325.47c-0.0800781 -17.2305 -14.3604 -31.79 -32.5898 -31.79h-574.74c-18.3096 0 -32.6299 14.6797 -32.5996 32\r\n-c0.00976562 3.91992 -3.35059 -17.1602 54.7598 325.26c2.62012 15.4307 16.21 26.7402 32.1396 26.7402h466.13c15.9307 0 29.5205 -11.3096 32.1406 -26.7402zM259.83 384l-9.77051 -96h139.87l-9.76953 96h-120.33zM184.66 128l11.4102 112h-105.971l-19.0098 -112\r\n-h113.57zM200.95 288l9.76953 96h-96.1895l-16.29 -96h102.71zM233.77 128h172.45l-11.3994 112h-149.65zM429.27 384l9.77051 -96h102.71l-16.29 96h-96.1904zM455.33 128h113.58l-19.0098 112h-105.971z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spa\" unicode=\"&#xf5bb;\" horiz-adv-x=\"576\" \r\n-d=\"M568.25 256c4.41016 0.0195312 7.79004 -3.40039 7.75 -7.82031c-0.230469 -27.9199 -7.12988 -126.13 -88.7695 -199.3c-84.04 -81.8301 -167.23 -80.8799 -199.23 -80.8799s-115.21 -0.94043 -199.23 80.8799c-81.6299 73.1602 -88.5391 171.38 -88.7695 199.3\r\n-c-0.0400391 4.41992 3.33984 7.83984 7.75 7.82031c29.04 -0.129883 135.01 -6.16016 213.84 -83c33.1201 -29.6299 53.3604 -63.2998 66.4102 -94.8604c13.0498 31.5605 33.29 65.2305 66.4102 94.8604c78.8301 76.8398 184.8 82.8701 213.84 83zM287.98 145.4\r\n-c-10.7012 15.7168 -30.8789 38.7705 -45.04 51.46c-18.7207 18.25 -38.8506 32.6895 -59.2207 44.3896c16.4707 70.4404 51.75 132.93 96.7402 172.07c4.12012 3.58008 11.0303 3.58008 15.1396 0c45.0107 -39.1699 80.29 -101.721 96.7305 -172.221\r\n-c-20.6797 -11.8799 -41.1699 -26.5693 -60.2598 -45.1797c-16.4902 -14.7402 -31.2705 -31.6699 -44.0898 -50.5195z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"splotch\" unicode=\"&#xf5bc;\" \r\n-d=\"M472.29 252.11c48.54 -16.6201 53.8301 -73.8301 8.9502 -96.79l-62 -31.7402c-17.8301 -9.12988 -29.2803 -25.2002 -30.6299 -42.9902l-4.7002 -61.8594c-3.41016 -44.79 -65.1299 -66.7803 -104.45 -37.2207l-54.3203 40.8301\r\n-c-15.6201 11.7305 -36.96 16.1201 -57.0693 11.7305l-69.96 -15.2803c-50.6504 -11.0596 -94.0801 32.5596 -73.4902 73.8096l28.4297 56.9805c8.18066 16.3799 6.44043 35.1699 -4.63965 50.2402l-38.54 52.4199c-27.9004 37.9502 6.97949 86.8994 59.0303 82.8301\r\n-l71.8799 -5.62012c20.6602 -1.62012 40.9395 5.59961 54.2002 19.3096l46.1396 47.6699c33.4102 34.5107 98.3994 21.1504 109.979 -22.6201l15.9902 -60.4492c4.60059 -17.3799 18.8604 -31.7002 38.1406 -38.3008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spray-can\" unicode=\"&#xf5bd;\" \r\n-d=\"M224 416v-96h-128v96c0 17.6699 14.3301 32 32 32h64c17.6699 0 32 -14.3301 32 -32zM480 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM224 288c53.0195 0 96 -42.9805 96 -96v-224c0 -17.6699 -14.3301 -32 -32 -32\r\n-h-256c-17.6699 0 -32 14.3301 -32 32v224c0 53.0195 42.9805 96 96 96h128zM160 32c44.1797 0 80 35.8203 80 80s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM480 352c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32\r\n-s-14.3301 -32 -32 -32zM384 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM288 416c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM384 416c17.6699 0 32 -14.3301 32 -32\r\n-s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM480 224c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"stamp\" unicode=\"&#xf5bf;\" \r\n-d=\"M32 -64v64h448v-64h-448zM416 192c53.0195 0 96 -42.9805 96 -96v-32c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v32c0 53.0195 42.9805 96 96 96h66.5596c16.2607 0 29.4404 13.1797 29.4404 29.4404v0.0693359\r\n-c0 31.79 -9.98047 62.0605 -23.3096 90.9102c-5.57031 12.04 -8.69043 25.4199 -8.69043 39.5801c0 58.6699 52.6201 105.04 113.25 94.4902c38.79 -6.75 70.4902 -38.6699 77.2598 -77.4502c3.85059 -22.0303 0.0605469 -42.8096 -9.0498 -60.4199\r\n-c-12.5801 -24.3105 -21.46 -50.3506 -21.46 -77.7197v-9.45996c0 -16.2607 13.1797 -29.4404 29.4404 -29.4404h66.5596z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-half-alt\" unicode=\"&#xf5c0;\" horiz-adv-x=\"536\" \r\n-d=\"M508.55 276.49c26.25 -3.7998 36.7705 -36.1006 17.7305 -54.6006l-105.91 -102.979l25.0303 -145.49c3.55957 -20.79 -13.0605 -37.4004 -31.6602 -37.4004c-4.91016 0 -9.9707 1.16016 -14.8301 3.71094l-130.94 68.6992l-130.95 -68.6797\r\n-c-4.86914 -2.58008 -9.93945 -3.75 -14.8691 -3.75c-18.5801 0 -35.1699 16.6699 -31.6104 37.4502l25.0596 145.479l-105.89 103c-19.0303 18.5 -8.50977 50.79 17.7402 54.5898l146.38 21.29l65.4297 132.381c5.90039 11.9092 17.29 17.8096 28.6904 17.8096\r\n-c11.4697 0 22.9395 -5.98047 28.8193 -17.8096l65.4102 -132.391zM386.81 153.29l82.6504 80.3799l-114.229 16.6299l-25.0107 3.64062l-11.1797 22.6299l-51.0303 103.29l-0.0292969 -317.19l22.3799 -11.7402l102.13 -53.5898l-19.5205 113.45l-4.2793 24.8799z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"suitcase-rolling\" unicode=\"&#xf5c1;\" horiz-adv-x=\"384\" \r\n-d=\"M336 288c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-16v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16h-128v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16h-16\r\n-c-26.5098 0 -48 21.4902 -48 48v224c0 26.5098 21.4902 48 48 48h288zM320 72v16c0 4.41992 -3.58008 8 -8 8h-240c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h240c4.41992 0 8 3.58008 8 8zM320 168v16c0 4.41992 -3.58008 8 -8 8h-240\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h240c4.41992 0 8 3.58008 8 8zM144 400v-80h-48v80c0 26.5098 21.4902 48 48 48h96c26.5098 0 48 -21.4902 48 -48v-80h-48v80h-96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"surprise\" unicode=\"&#xf5c2;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM248 32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64\r\n-s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"swatchbook\" unicode=\"&#xf5c3;\" \r\n-d=\"M434.66 280.29c5.15527 -5.1709 9.33984 -15.293 9.33984 -22.5947s-4.18457 -17.4248 -9.33984 -22.5957l-210.66 -211.1v271.12l75.4297 75.5195l0.0703125 0.0703125v0c5.14258 5.12305 15.2061 9.28027 22.4648 9.28027c7.29102 0 17.3867 -4.18848 22.5352 -9.35059\r\n-l90.1602 -90.3496v0zM480 128c17.6641 0 32 -14.3359 32 -32v-128c0 -17.6641 -14.3359 -32 -32 -32h-300c2.17969 1.91016 4.62012 3.41992 6.67969 5.49023l186.41 186.51h106.91zM192 416v-384c0 -52.9922 -43.0078 -96 -96 -96s-96 43.0078 -96 96v384\r\n-c0 17.6641 14.3359 32 32 32h128c17.6641 0 32 -14.3359 32 -32zM96 8c13.248 0 24 10.752 24 24s-10.752 24 -24 24s-24 -10.752 -24 -24s10.752 -24 24 -24zM128 192v64h-64v-64h64zM128 320v64h-64v-64h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"swimmer\" unicode=\"&#xf5c4;\" horiz-adv-x=\"640\" \r\n-d=\"M189.61 137.42c-5.04004 4.65039 -10.3906 8.34961 -15.8604 11.5801l68.6299 98.04c7.36035 10.5 16.3398 19.5498 26.7197 26.9404l80.0205 57.1699c25.54 18.2598 57.8301 24.96 88.5596 18.3799l100.351 -21.5303c25.9297 -5.55957 42.4297 -31.0801 36.8799 -57\r\n-c-5.56055 -25.9102 -31.0898 -42.4102 -57 -36.8799l-100.351 21.5303c-4.33984 0.90918 -8.97949 -0.0302734 -12.6191 -2.61035l-18 -12.8604l112.84 -80.5996c-17.5107 -1.04004 -34.5303 -8.4502 -49.3906 -22.1602\r\n-c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992s-30.8496 6.16016 -34.3896 9.41992c-16.0107 14.7705 -34.5 22.5801 -53.46 22.5801h-16.3008c-18.96 0 -37.4395 -7.80957 -53.46 -22.5801c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992\r\n-s-30.8496 6.16016 -34.3896 9.41992zM624 96c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16c-38.6201 0 -72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398\r\n-c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16c26.04 0 45.7998 8.41992 56.0703 17.9004\r\n-c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998\r\n-c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996\r\n-c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004h16zM112 192c-44.1797 0 -80 35.8203 -80 80s35.8203 80 80 80s80 -35.8203 80 -80s-35.8203 -80 -80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"swimming-pool\" unicode=\"&#xf5c5;\" horiz-adv-x=\"640\" \r\n-d=\"M624 32c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16c-38.6201 0 -72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398\r\n-s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16c26.04 0 45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998\r\n-c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996\r\n-c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004h16zM224 64\r\n-c-19.1201 0 -30.8604 6.16016 -34.3896 9.42969c-9.16992 8.4502 -19.2002 14.3398 -29.6104 18.0703v228.5c0 52.9404 43.0596 96 96 96s96 -43.0596 96 -96v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16c0 17.6396 -14.3604 32 -32 32\r\n-s-32 -14.3604 -32 -32v-96h192v96c0 52.9404 43.0596 96 96 96s96 -43.0596 96 -96v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16c0 17.6396 -14.3604 32 -32 32s-32 -14.3604 -32 -32v-228.51\r\n-c-10.4102 -3.73047 -20.4404 -9.61035 -29.6104 -18.0703c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992v96h-192v-96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tint-slash\" unicode=\"&#xf5c7;\" horiz-adv-x=\"640\" \r\n-d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\r\n-c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l186.82 -144.399c21.6201 33.7197 42.9697 73.3398 58.4902 125.68c9 30.1201 50.5 28.7803 58.4395 0c46.9902 -158.48 146.78 -200.061 146.78 -311.82c0 -5.70996 -0.509766 -11.2998 -1.03027 -16.8701zM144 114.09\r\n-c0 29.7803 7.30957 54.6299 18.7197 78.1299l273.681 -211.52c-31.0303 -27.7402 -71.6904 -44.7002 -116.4 -44.7002c-97.2803 0 -176 79.6504 -176 178.09z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tired\" unicode=\"&#xf5c8;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 250.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\r\n-c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 280.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM248 160\r\n-c-51.9004 0 -115.3 -43.7998 -123.2 -106.7c-1.7002 -13.3994 7.90039 -24.5996 17.7002 -20.3994c25.9004 11.0996 64.4004 17.3994 105.5 17.3994s79.5996 -6.2998 105.5 -17.3994c9.7002 -4.2002 19.4004 6.7998 17.7002 20.3994\r\n-c-7.90039 62.9004 -71.2998 106.7 -123.2 106.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tooth\" unicode=\"&#xf5c9;\" horiz-adv-x=\"448\" \r\n-d=\"M443.98 351.75c10.1299 -41.6299 0.419922 -80.8203 -21.5303 -110.43c-23.3604 -31.5703 -32.6807 -68.6504 -36.29 -107.351c-4.41016 -47.1602 -10.3301 -94.1699 -20.9404 -140.319l-7.7998 -33.9502c-3.18945 -13.8701 -15.4902 -23.7002 -29.6699 -23.7002\r\n-c-13.9697 0 -26.1504 9.5498 -29.54 23.1602l-34.4697 138.42c-4.56055 18.3096 -20.96 31.1602 -39.7598 31.1602c-18.8008 0 -35.2002 -12.8398 -39.7607 -31.1602l-34.4697 -138.42c-3.38965 -13.6104 -15.5703 -23.1602 -29.54 -23.1602\r\n-c-14.1797 0 -26.4795 9.83008 -29.6699 23.7002l-7.7998 33.9502c-10.6104 46.1592 -16.54 93.1592 -20.9404 140.319c-3.60938 38.6904 -12.9297 75.7803 -36.29 107.351c-21.9199 29.6201 -31.6299 68.8096 -21.5 110.43c11.0098 45.2197 47.1104 82.0498 92.0098 93.7197\r\n-c23.4307 6.08984 46.1104 0.540039 66.8105 -10.3096l100.51 -64.6201c7.83984 -5.05957 17.6504 -2.15039 22.1104 4.7998c4.78027 7.44043 2.62012 17.3398 -4.7998 22.1104l-28.3203 18.21c3.54004 1.75 7.25 3.08984 10.5 5.47949\r\n-c26.1396 19.2305 56.9502 32.6904 89.1396 24.3301c44.9004 -11.6602 81 -48.5 92.0107 -93.7197z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"umbrella-beach\" unicode=\"&#xf5ca;\" horiz-adv-x=\"640\" \r\n-d=\"M115.38 311.1c-10.0801 3.66992 -14.1104 16.3203 -7.41992 24.7207c59.75 74.8398 152.65 116.689 248.53 111.8c-52.79 -29.4102 -103.811 -92.1602 -139 -173.7zM247.63 262.94c44.4902 101.979 114.74 171.14 172.76 171.149c7.95996 0 15.6904 -1.2998 23.0908 -4\r\n-c61.3291 -22.3203 78.3896 -132.6 42.6299 -253.979zM521.48 387.5c76.5293 -57.9199 120.76 -149.67 118.439 -245.36c-0.259766 -10.7393 -11.4795 -17.8398 -21.5703 -14.1699l-102.619 37.3604c17.5293 58.75 24.6895 117.09 18.9492 166.979\r\n-c-2.37012 20.5908 -6.97949 38.8906 -13.1992 55.1904zM560 0.0195312c8.83984 0 16 -7.15918 16 -16v-32.0098c0 -8.83984 -7.16016 -16.0098 -16 -16.0098h-544c-8.83984 0 -16 7.16992 -16 16.0098v32.0098c0 8.85059 7.16016 16.0107 16 16.0107h236.96l72.9004 200.37\r\n-l60.1396 -21.9004l-64.9404 -178.48h238.94z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vector-square\" unicode=\"&#xf5cb;\" \r\n-d=\"M512 320c0 -17.6699 -14.3301 -32 -32 -32v-192c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32h-192c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32v192\r\n-c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32h192c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32v-96zM416 384v-32h32v32h-32zM64 384v-32h32v32h-32zM96 0v32h-32v-32h32zM448 0v32h-32v-32h32zM416 96\r\n-v192h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32v-192h32c17.6699 0 32 -14.3301 32 -32v-32h192v32c0 17.6699 14.3301 32 32 32h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"weight-hanging\" unicode=\"&#xf5cd;\" \r\n-d=\"M510.28 2.13965c8.33008 -33.3096 -14.6602 -66.1396 -46.2998 -66.1396h-415.95c-31.6504 0 -54.6406 32.8301 -46.3105 66.1396l73.0498 292.13c3.79004 15.1807 16.4404 25.7207 30.8701 25.7207h60.25c-3.58008 10.0498 -5.87988 20.7197 -5.87988 32\r\n-c0 53.0195 42.9805 96 96 96c53.0205 0 96 -42.9805 96 -96c0 -11.2803 -2.30957 -21.9502 -5.87988 -32h60.25c14.4297 0 27.0703 -10.5303 30.8701 -25.7207zM256 320c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32s14.3604 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wine-glass-alt\" unicode=\"&#xf5ce;\" horiz-adv-x=\"288\" \r\n-d=\"M216 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-208c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h40v117.18c-68.4697 15.8906 -118.05 79.9102 -111.4 154.16l15.96 178.11c0.730469 8.24023 7.55078 14.5498 15.7002 14.5498h223.48\r\n-c8.16016 0 14.9697 -6.30957 15.71 -14.5498l15.9502 -178.101c6.64941 -74.25 -42.9307 -138.27 -111.4 -154.159v-117.19h40zM61.75 400l-7.16992 -80h178.84l-7.16992 80h-164.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"air-freshener\" unicode=\"&#xf5d0;\" horiz-adv-x=\"384\" \r\n-d=\"M378.94 126.59c11.75 -12.1494 1.71973 -30.5898 -16.6406 -30.5898h-138.3v-32h112c8.83984 0 16 -7.16016 16 -16v-96c0 -8.83984 -7.16016 -16 -16 -16h-288c-8.83984 0 -16 7.16016 -16 16v96c0 8.83984 7.16016 16 16 16h112v32h-138.3\r\n-c-18.3604 0 -28.3906 18.4404 -16.6406 30.5898l94.2402 97.4102h-49.2197c-15.2998 0 -23.6602 16.5996 -13.8604 27.5303l113.33 126.51c-3.42969 6.61035 -5.5498 14 -5.5498 21.96c0 26.5098 21.4902 48 48 48s48 -21.4902 48 -48\r\n-c0 -7.95996 -2.12012 -15.3496 -5.5498 -21.96l113.33 -126.51c9.7998 -10.9307 1.43945 -27.5303 -13.8604 -27.5303h-49.2197zM192 416.02c-8.84961 0 -16.0195 -7.16992 -16.0195 -16.0195c0 -8.83984 7.16992 -16.0195 16.0195 -16.0195\r\n-s16.0195 7.17969 16.0195 16.0195c0 8.84961 -7.16992 16.0195 -16.0195 16.0195zM304 16h-224v-32h224v32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"apple-alt\" unicode=\"&#xf5d1;\" horiz-adv-x=\"448\" \r\n-d=\"M350.85 319c25.9707 -4.66992 47.2705 -18.6699 63.9199 -42c14.6504 -20.6699 24.6406 -46.6699 29.9609 -78c4.66992 -28.6699 4.31934 -57.3301 -1 -86c-7.99023 -47.3301 -23.9707 -87 -47.9404 -119c-28.6396 -38.6699 -64.5898 -58 -107.87 -58\r\n-c-10.6602 0 -22.2998 3.33008 -34.96 10c-8.66016 5.33008 -18.3096 8 -28.9697 8s-20.2998 -2.66992 -28.9707 -8c-12.6592 -6.66992 -24.2998 -10 -34.96 -10c-43.2793 0 -79.2295 19.3301 -107.869 58c-23.9707 32 -39.9502 71.6699 -47.9404 119\r\n-c-5.32031 28.6699 -5.66992 57.3301 -1 86c5.32031 31.3301 15.3096 57.3301 29.96 78c16.6504 23.3301 37.9502 37.3301 63.9199 42c15.9805 2.66992 37.9502 0.330078 65.9199 -7c23.9697 -6.66992 44.2803 -14.6699 60.9307 -24\r\n-c16.6494 9.33008 36.96 17.3301 60.9297 24c27.9795 7.33008 49.96 9.66992 65.9395 7zM295.91 360c-9.32031 -8.66992 -21.6504 -15 -36.96 -19c-10.6602 -3.33008 -22.2998 -5 -34.96 -5l-14.9805 1c-1.33008 9.33008 -1.33008 20 0 32\r\n-c2.66992 24 10.3203 42.3301 22.9707 55c9.31934 8.66992 21.6494 15 36.96 19c10.6592 3.33008 22.2998 5 34.96 5l14.9795 -1l1 -15c0 -12.6699 -1.66992 -24.3301 -4.99023 -35c-3.98926 -15.3301 -10.3096 -27.6699 -18.9795 -37z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"atom\" unicode=\"&#xf5d2;\" horiz-adv-x=\"448\" \r\n-d=\"M413.03 192c40.1396 -54.9102 41.5195 -98.5996 25.1396 -128c-29.2197 -52.3398 -101.689 -43.5801 -116.33 -41.8799c-21.4697 -51.2197 -54.2002 -86.1201 -97.8398 -86.1201s-76.3701 34.9004 -97.8398 86.1201c-14.6504 -1.7002 -87.1201 -10.46 -116.33 41.8799\r\n-c-16.3701 29.3799 -14.9902 73.1104 25.1396 128c-40.1396 54.9102 -41.5195 98.5996 -25.1396 128c10.9004 19.5195 40.5996 50.6602 116.33 41.8799c21.4795 51.2305 54.2002 86.1201 97.8398 86.1201s76.3604 -34.8896 97.8398 -86.1201\r\n-c75.79 8.85059 105.42 -22.3604 116.33 -41.8799c16.3701 -29.3799 14.9902 -73.1104 -25.1396 -128zM63.3799 96c3.69043 -6.59961 19.0205 -11.8604 43.5801 -10.9697c-2.75977 13 -5.0498 26.3701 -6.75977 40.0801c-7.66992 6.29004 -14.9102 12.6494 -21.8701 19.1797\r\n-c-15.1396 -23.4902 -18.9805 -41.0801 -14.9502 -48.29zM100.2 258.88c1.39355 11.1816 4.43555 29.2002 6.79004 40.2197c-1.82031 0.0703125 -3.98047 0.370117 -5.69043 0.370117c-21.5303 0 -34.5098 -5.33008 -37.9199 -11.4697\r\n-c-4.01953 -7.20996 -0.179688 -24.7998 14.9502 -48.2998c6.96973 6.53027 14.21 12.8896 21.8701 19.1797zM224 384c-9.46973 0 -22.2002 -13.5195 -33.8604 -37.2598c11.1904 -3.7002 22.4404 -8 33.8604 -12.8604c11.4199 4.86035 22.6699 9.16016 33.8604 12.8604\r\n-c-11.6602 23.7402 -24.3906 37.2598 -33.8604 37.2598zM224 0c9.46973 0 22.2002 13.5195 33.8604 37.2598c-11.1904 3.7002 -22.4404 8 -33.8604 12.8604c-11.4199 -4.86035 -22.6699 -9.16016 -33.8604 -12.8604c11.6602 -23.7402 24.3906 -37.2598 33.8604 -37.2598z\r\n-M286.5 157.33c1.99023 27.7998 1.98047 41.5498 0 69.3301c-26.6396 19.04 -46.1104 29.3096 -62.5 37.4795c-16.3701 -8.15918 -35.8301 -18.4297 -62.5 -37.4795c-1.99023 -27.79 -1.99023 -41.54 0 -69.3301c26.7002 -19.0703 46.1504 -29.3398 62.5 -37.4805\r\n-c16.3604 8.15039 35.7998 18.4004 62.5 37.4805zM384.62 96c4.01953 7.20996 0.179688 24.7998 -14.9502 48.29c-6.96973 -6.53027 -14.21 -12.8896 -21.8701 -19.1797c-1.70996 -13.6904 -4 -27.0605 -6.75977 -40.0605c24.5801 -0.870117 39.9102 4.33008 43.5801 10.9502\r\n-zM369.67 239.71c15.1299 23.4902 18.9697 41.0801 14.9502 48.2998c-3.41016 6.12988 -16.4004 11.4707 -37.9199 11.4707c-1.71973 0 -3.87012 -0.300781 -5.69043 -0.370117c2.35254 -11.0205 5.39453 -29.0391 6.79004 -40.2207\r\n-c7.66992 -6.29004 14.9102 -12.6494 21.8701 -19.1797zM224 224c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bone\" unicode=\"&#xf5d7;\" horiz-adv-x=\"640\" \r\n-d=\"M598.88 203.44c-9.42969 -4.70996 -9.42969 -18.1709 -0.00976562 -22.8809c25.2002 -12.5996 41.1201 -38.3496 41.1201 -66.5293v-7.64062c0 -41.0898 -33.2998 -74.3896 -74.3799 -74.3896c-32.0107 0 -60.4404 20.4902 -70.5703 50.8604\r\n-c-6.53027 19.5996 -10.7305 45.1396 -38.1104 45.1396h-273.87c-26.5098 0 -30.4297 -22.1104 -38.1094 -45.1396c-10.1299 -30.3701 -38.5498 -50.8604 -70.5703 -50.8604c-41.0801 0 -74.3799 33.2998 -74.3799 74.3896v7.64062\r\n-c0 28.1699 15.9199 53.9297 41.1201 66.5293c9.42969 4.70996 9.42969 18.1709 0 22.8809c-25.2002 12.5996 -41.1201 38.3594 -41.1201 66.5293v7.64062c0 41.0898 33.2998 74.3896 74.3896 74.3896c32.0107 0 60.4404 -20.4902 70.5605 -50.8604\r\n-c6.53027 -19.5996 10.7295 -45.1396 38.1094 -45.1396h273.87c26.5107 0 30.4307 22.1104 38.1104 45.1396c10.1299 30.3701 38.5498 50.8604 70.5703 50.8604c41.0898 0 74.3896 -33.2998 74.3896 -74.3896v-7.64062c0 -28.1699 -15.9199 -53.9297 -41.1201 -66.5293z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book-reader\" unicode=\"&#xf5da;\" \r\n-d=\"M352 352c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96zM233.59 206.9c4.10059 -2.51074 6.41016 -6.79004 6.41992 -11.46v-245.99c0 -10.1602 -11.1094 -16.5898 -20.4795 -11.8701\r\n-c-61.0498 30.75 -149.38 39.1396 -193.04 41.4297c-14.9004 0.770508 -26.4902 12.7207 -26.4902 27.0498v222.801c0 15.6299 13.5498 28.0098 29.7998 27.0898c48.3604 -2.75 144.46 -12.7305 203.79 -49.0498zM482.2 255.95\r\n-c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309\r\n-c59.3203 36.3193 155.43 46.3096 203.78 49.0498z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"brain\" unicode=\"&#xf5dc;\" horiz-adv-x=\"576\" \r\n-d=\"M208 448c35.2998 0 64 -28.7002 64 -64v-376c0 -39.7998 -32.2002 -72 -72 -72c-31.7998 0 -58.4004 20.7002 -68 49.2002c-3.90039 -0.700195 -7.90039 -1.2002 -12 -1.2002c-39.7998 0 -72 32.2002 -72 72c0 4.7998 0.5 9.5 1.40039 14.0996\r\n-c-29 12 -49.4004 40.6006 -49.4004 73.9004c0 29.7002 16.2998 55.2998 40.2998 69.0996c-5.09961 10.6006 -8.2998 22.3008 -8.2998 34.9004c0 33.4004 20.5 62 49.7002 74c-1.10059 4.5 -1.7002 9.2002 -1.7002 14c0 35.2998 28.7002 64 64 64\r\n-c0.799805 0 1.40039 -0.200195 2.2002 -0.200195c7.09961 27.7002 31.8994 48.2002 61.7998 48.2002zM576 144c0 -33.2998 -20.4004 -61.9004 -49.4004 -73.9004c0.900391 -4.59961 1.40039 -9.2998 1.40039 -14.0996c0 -39.7998 -32.2002 -72 -72 -72\r\n-c-4.09961 0 -8.09961 0.5 -12 1.2002c-9.59961 -28.5 -36.2002 -49.2002 -68 -49.2002c-39.7998 0 -72 32.2002 -72 72v376c0 35.4004 28.7002 64 64 64c29.9004 0 54.7002 -20.5 61.7998 -48.2002c0.700195 0 1.40039 0.200195 2.2002 0.200195\r\n-c35.2998 0 64 -28.7002 64 -64c0 -4.7998 -0.700195 -9.5 -1.7002 -14c29.2002 -12 49.7002 -40.5996 49.7002 -74c0 -12.5996 -3.09961 -24.2998 -8.2998 -34.9004c24 -13.7998 40.2998 -39.3994 40.2998 -69.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"car-alt\" unicode=\"&#xf5de;\" horiz-adv-x=\"480\" \r\n-d=\"M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\r\n-c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004\r\n-l19.9297 -49.8301zM131.93 289.83l-19.9297 -49.8301h256l-19.9297 49.8301c-7.29004 18.2197 -24.9404 30.1699 -44.5703 30.1699h-127c-19.6299 0 -37.2803 -11.9502 -44.5703 -30.1699zM80 128.2c19.2002 0 48 -3.19043 48 15.9502\r\n-c0 19.1396 -28.7998 47.8496 -48 47.8496s-32 -12.7598 -32 -31.9004c0 -19.1396 12.7998 -31.8994 32 -31.8994zM400 128.2c19.2002 0 32 12.7598 32 31.8994c0 19.1406 -12.7998 31.9004 -32 31.9004s-48 -28.71 -48 -47.8496c0 -19.1406 28.7998 -15.9502 48 -15.9502z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"car-battery\" unicode=\"&#xf5df;\" \r\n-d=\"M480 320c17.6699 0 32 -14.3301 32 -32v-256c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v256c0 17.6699 14.3301 32 32 32h32v48c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-48h128v48c0 8.83984 7.16016 16 16 16h96\r\n-c8.83984 0 16 -7.16016 16 -16v-48h32zM192 184v16c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8zM448 184v16c0 4.41992 -3.58008 8 -8 8h-40v40c0 4.41992 -3.58008 8 -8 8h-16\r\n-c-4.41992 0 -8 -3.58008 -8 -8v-40h-40c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h40v-40c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v40h40c4.41992 0 8 3.58008 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"car-crash\" unicode=\"&#xf5e1;\" horiz-adv-x=\"640\" \r\n-d=\"M143.25 227.19l-12.4199 -46.3701c-3.00977 -11.25 -3.62988 -22.8906 -2.41016 -34.3906l-35.2002 -28.9795c-6.56934 -5.41016 -16.3096 0.429688 -14.6201 8.76953l15.4404 76.6807c1.05957 5.25977 -2.66016 10.2793 -8 10.79l-77.8604 7.5498\r\n-c-8.46973 0.819336 -11.2295 11.8301 -4.13965 16.54l65.1504 43.2998c4.45996 2.96973 5.37988 9.15039 1.97949 13.29l-49.71 60.4102c-5.41016 6.56934 0.429688 16.2998 8.78027 14.6201l76.6797 -15.4404c5.25977 -1.05957 10.2803 2.66016 10.7998 8l7.5498 77.8604\r\n-c0.820312 8.47949 11.8301 11.2295 16.5508 4.13965l43.2998 -65.1396c2.96973 -4.45996 9.14941 -5.37988 13.29 -1.98047l60.3994 49.71c6.57031 5.41016 16.3008 -0.429688 14.6201 -8.76953l-11.3301 -56.1602c-2.70996 -3.0498 -5.42969 -6.08984 -7.90918 -9.40039\r\n-l-32.1504 -42.9697l-10.71 -14.3203c-32.7305 -8.75977 -59.1797 -34.5293 -68.0801 -67.7393zM637.82 94.6797l-12.4199 -46.3594c-3.13086 -11.6807 -9.38086 -21.6104 -17.5508 -29.3604c-2.25488 -2.13574 -6.17969 -5.27148 -8.75977 -7l-13.9902 -52.2295\r\n-c-1.13965 -4.27051 -3.09961 -8.10059 -5.64941 -11.3809c-7.66992 -9.83984 -20.7402 -14.6797 -33.54 -11.25l-30.9102 8.28027c-17.0703 4.57031 -27.2002 22.1201 -22.6299 39.1904l8.28027 30.9102l-247.28 66.2598l-8.28027 -30.9102\r\n-c-4.57031 -17.0703 -22.1201 -27.2002 -39.1895 -22.6299l-30.9102 8.28027c-12.7998 3.42969 -21.7002 14.1592 -23.4199 26.5098c-0.570312 4.12012 -0.350586 8.41992 0.790039 12.6797l13.9893 52.2305c-1.37207 2.78809 -3.2041 7.46973 -4.08984 10.4492\r\n-c-3.2002 10.79 -3.64941 22.5205 -0.519531 34.2002l12.4199 46.3701c5.30957 19.7998 19.3594 34.8301 36.8896 42.21c4.9082 2.06836 13.1914 4.18262 18.4902 4.71973l18.1299 24.2305l32.1504 42.9697c3.44922 4.61035 7.18945 8.90039 11.1992 12.8398\r\n-c8 7.89062 17.0303 14.4404 26.7402 19.5107c4.86035 2.54004 9.89062 4.70996 15.0498 6.48926c10.3301 3.58008 21.1904 5.62988 32.2402 6.04004s22.3105 -0.819336 33.4307 -3.7998l122.68 -32.8701c11.1201 -2.97949 21.4795 -7.54004 30.8496 -13.4297\r\n-c11.7236 -7.36133 27.2646 -22.8174 34.6904 -34.5c8.81934 -13.8799 14.6396 -29.8398 16.6797 -46.9902l6.36035 -53.29l3.58984 -30.0498c8.79297 -6.34863 18.9805 -19.7568 22.7402 -29.9297c4.38965 -11.8799 5.29004 -25.1904 1.75 -38.3906zM255.58 213.66\r\n-c-18.5498 4.96973 -34.21 -4.04004 -39.1699 -22.5303s4.10938 -34.1201 22.6494 -39.0898c18.5508 -4.96973 45.54 -15.5098 50.4902 2.97949c4.95996 18.4902 -15.4297 53.6709 -33.9697 58.6406zM546.19 185.49l-6.36035 53.29\r\n-c-0.580078 4.87012 -1.88965 9.5293 -3.82031 13.8594c-5.7998 12.9902 -17.2002 23.0107 -31.4199 26.8203l-122.68 32.8701c-3.36914 0.902344 -8.93457 1.63477 -12.4229 1.63477c-13.2676 0 -30.4883 -8.62207 -38.4375 -19.2451l-32.1494 -42.9697l172 -46.0801z\r\n-M564.68 130.84c-18.5498 4.96973 -53.7998 -15.3096 -58.75 -33.79c-4.94922 -18.4902 23.6904 -22.8594 42.2402 -27.8301c18.5498 -4.96973 34.21 4.04004 39.1699 22.5303c4.9502 18.4805 -4.10938 34.1201 -22.6602 39.0898z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"car-side\" unicode=\"&#xf5e4;\" horiz-adv-x=\"640\" \r\n-d=\"M544 256c53.0195 0 96 -42.9805 96 -96v-80c0 -8.83984 -7.16016 -16 -16 -16h-48c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-128c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-48c-8.83984 0 -16 7.16016 -16 16v112\r\n-c0 29.79 20.4404 54.5996 48 61.7402l47.9102 122.029c9.71973 24.3008 33.25 40.2305 59.4199 40.2305h213.91c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l108.78 -135.98h16zM160 16c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48\r\n-s21.5303 -48 48 -48zM232 256v96h-76.6699l-38.4004 -96h115.07zM280 256h166.04l-76.7998 96h-89.2402v-96zM480 16c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48s21.5303 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"charging-station\" unicode=\"&#xf5e7;\" horiz-adv-x=\"576\" \r\n-d=\"M336 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-320c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h320zM544 320h16c8.83984 0 16 -7.16016 16 -16v-32c0 -35.7598 -23.6201 -65.6904 -56 -75.9297v-120.07\r\n-c0 -44.4102 -38.29 -80.0498 -83.5898 -75.6201c-39.4902 3.85059 -68.4102 39.3398 -68.4102 79.0098v24.6104c0 22.0898 -17.9102 40 -40 40h-8v-112h-288v352c0 35.3496 28.6504 64 64 64h160c35.3496 0 64 -28.6504 64 -64v-192h8c48.5996 0 88 -39.4004 88 -88v-28\r\n-c0 -16.9902 15.2197 -30.5 32.7402 -27.6104c13.7598 2.27051 23.2598 15.2402 23.2598 29.1904v118.49c-32.3799 10.2393 -56 40.1699 -56 75.9297v32c0 8.83984 7.16016 16 16 16h16v48c0 8.83984 7.16016 16 16 16s16 -7.16016 16 -16v-48h32v48\r\n-c0 8.83984 7.16016 16 16 16s16 -7.16016 16 -16v-48zM260.09 272.24c4.62012 6.97949 -1.14941 15.7598 -10.3896 15.7598h-57.7002l11.5996 50.79c2.02051 6.66992 -3.71973 13.21 -11.5996 13.21h-68c-6.01953 0 -11.0996 -3.90039 -11.8896 -9.11035l-16 -107\r\n-c-0.959961 -6.2998 4.63965 -11.8896 11.8896 -11.8896h59.3496l-23.0195 -83.0801c-1.7998 -6.63965 4 -12.9199 11.6699 -12.9199c4.17969 0 8.19043 1.91016 10.3896 5.24023z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"directions\" unicode=\"&#xf5eb;\" \r\n-d=\"M502.61 214.68c12.5195 -12.5293 12.5195 -32.8301 0 -45.3594l-223.931 -223.931c-12.5293 -12.5293 -32.8398 -12.5293 -45.3594 0l-223.931 223.931c-12.5195 12.5293 -12.5195 32.8301 0 45.3594l223.931 223.931c12.5293 12.5195 32.8398 12.5195 45.3594 0z\r\n-M401.63 202.12c3.42969 3.16992 3.42969 8.58984 0 11.7598l-84.21 77.7305c-5.12988 4.72949 -13.4297 1.08984 -13.4297 -5.87988v-53.7305h-112c-17.6699 0 -32 -14.3301 -32 -32v-80c0 -4.41992 3.58008 -8 8 -8h32c4.41992 0 8 3.58008 8 8v64h96v-53.7305\r\n-c0 -6.97949 8.30957 -10.6094 13.4297 -5.87988z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"draw-polygon\" unicode=\"&#xf5ee;\" horiz-adv-x=\"448\" \r\n-d=\"M384 96c35.3496 0 64 -28.6504 63.9902 -64c0 -35.3496 -28.6504 -64 -64 -64c-23.6299 0 -44.0303 12.9502 -55.1201 32h-209.75c-11.0801 -19.0498 -31.4902 -32 -55.1201 -32c-35.3496 0 -64 28.6504 -64 64c0 23.6299 12.9502 44.04 32 55.1299v209.75\r\n-c-19.0498 11.0801 -32 31.4902 -32 55.1201c0 35.3496 28.6504 64 64 64c23.6299 0 44.04 -12.9502 55.1201 -32h209.76c11.0801 19.0498 31.4902 32 55.1201 32c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64c-0.349609 0 -0.669922 0.0898438 -1.01953 0.0996094\r\n-l-39.2002 -65.3193c5.08008 -9.16992 8.21973 -19.5605 8.21973 -30.7803s-3.15039 -21.6104 -8.21973 -30.7803l39.2002 -65.3193c0.349609 0 0.669922 0.0996094 1.01953 0.0996094zM96 87.1201c8.07422 -4.68848 18.4316 -15.0459 23.1201 -23.1201h208.36\r\n-l-38.4609 64.0996c-0.349609 0 -0.669922 -0.0996094 -1.01953 -0.0996094c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64c0.349609 0 0.669922 -0.0898438 1.01953 -0.0996094l38.4609 64.0996h-208.36c-4.69043 -8.07227 -15.0479 -18.4297 -23.1201 -23.1201v-209.76z\r\n-M272 192c0 -8.82031 7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16zM400 352c0 8.82031 -7.17969 16 -16 16s-16 -7.17969 -16 -16s7.17969 -16 16 -16s16 7.17969 16 16zM64 368c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16\r\n-s16 7.17969 16 16s-7.17969 16 -16 16zM48 32c0 -8.82031 7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16zM384 16c8.82031 0 16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16s7.17969 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laptop-code\" unicode=\"&#xf5fc;\" horiz-adv-x=\"640\" \r\n-d=\"M255.03 186.35l-58.3506 58.3408c-6.25 6.25 -6.25 16.3799 0 22.6299l58.3398 58.3398c6.25 6.25 16.3809 6.25 22.6309 0l11.3096 -11.3105c6.25 -6.25 6.25 -16.3799 0 -22.6299l-35.71 -35.7197l35.7197 -35.71c6.25 -6.25 6.25 -16.3799 0 -22.6299\r\n-l-11.3096 -11.3105c-6.25 -6.25 -16.3799 -6.25 -22.6299 0zM351.04 197.65c-6.25 6.25 -6.25 16.3799 0 22.6299l35.71 35.7197l-35.71 35.71c-6.25 6.25 -6.25 16.3799 0 22.6299l11.3096 11.3105c6.25 6.25 16.3809 6.25 22.6309 0l58.3398 -58.3408\r\n-c6.25 -6.25 6.25 -16.3799 0 -22.6299l-58.3398 -58.3398c-6.25 -6.25 -16.3809 -6.25 -22.6309 0zM624 32c8.7998 0 16 -7.2002 16 -16v-16c0 -35.2002 -28.7998 -64 -64 -64h-512c-35.2002 0 -64 28.7998 -64 64v16c0 8.7998 7.2002 16 16 16h239.23\r\n-c-0.25 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46zM576 400v-336h-512v336c0 26.4004 21.5996 48 48 48h416c26.4004 0 48 -21.5996 48 -48zM512 128v256h-384v-256h384z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"layer-group\" unicode=\"&#xf5fd;\" \r\n-d=\"M12.4102 299.98c-16.5498 7.50977 -16.5498 32.5293 0 40.0391l232.95 105.671c2.79883 1.2793 7.56738 2.31738 10.6445 2.31738s7.84668 -1.03809 10.6455 -2.31738l232.93 -105.681c16.5498 -7.50977 16.5498 -32.5195 0 -40.0293l-232.94 -105.671\r\n-c-6.7998 -3.08984 -14.4893 -3.08984 -21.29 0zM499.59 211.7c16.5498 -7.5 16.5498 -32.5 0 -40l-232.95 -105.59c-6.7998 -3.08008 -14.4893 -3.08008 -21.29 0l-232.939 105.59c-16.5498 7.5 -16.5498 32.5 0 40l58.0996 26.3301l161.63 -73.2705\r\n-c7.57031 -3.42969 15.5908 -5.16992 23.8604 -5.16992s16.2998 1.74023 23.8604 5.16992l161.64 73.2705zM499.59 83.9004c16.5498 -7.5 16.5498 -32.5 0 -40l-232.95 -105.591c-6.7998 -3.0791 -14.4893 -3.0791 -21.29 0l-232.939 105.591\r\n-c-16.5498 7.5 -16.5498 32.5 0 40l57.8799 26.2295l161.85 -73.3701c7.57031 -3.42969 15.5908 -5.16992 23.8604 -5.16992s16.2998 1.74023 23.8604 5.16992l161.859 73.3701z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"microscope\" unicode=\"&#xf610;\" \r\n-d=\"M160 128c-17.6699 0 -32 14.3301 -32 32v224c0 17.6699 14.3301 32 32 32v16c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16v-16c17.6699 0 32 -14.3301 32 -32v-224c0 -17.6699 -14.3301 -32 -32 -32h-12v-16c0 -8.83984 -7.16016 -16 -16 -16h-40\r\n-c-8.83984 0 -16 7.16016 -16 16v16h-12zM464 0c26.5098 0 48 -21.4902 48 -48c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16c0 26.5098 21.4902 48 48 48h272c70.5801 0 128 57.4199 128 128s-57.4199 128 -128 128v64\r\n-c105.88 0 192 -86.1201 192 -192c0 -49.2002 -18.7598 -93.9902 -49.29 -128h1.29004zM104 32c-4.41992 0 -8 3.58008 -8 8v16c0 4.41992 3.58008 8 8 8h208c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-208z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"oil-can\" unicode=\"&#xf613;\" horiz-adv-x=\"640\" \r\n-d=\"M629.8 287.69c5.11035 1.45996 10.2002 -2.38086 10.1904 -7.69043v-18.0801c0 -2.12012 -0.839844 -4.16016 -2.33984 -5.66016l-212.261 -214.75c-6.00977 -6.08984 -14.21 -9.50977 -22.7598 -9.50977h-274.63c-17.6699 0 -32 14.3301 -32 32v46.54l-69.7197 12.6904\r\n-c-15.2207 2.75977 -26.2803 16.0195 -26.2803 31.4795v94.9502c0 17.9795 14.6699 32.0098 31.9297 32.0098c1.61133 0 4.20605 -0.237305 5.79004 -0.530273l138.28 -25.1396h56v48h-56c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h160\r\n-c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-56v-48h56.8896c8.33984 -0.00292969 21.1611 -3.03125 28.6201 -6.75977l50.4902 -25.2402zM96 159.33v62.4297l-48 8.73047v-62.4307zM549.33 74.6699c0 23.5605 42.6699 85.3301 42.6699 85.3301\r\n-s42.6699 -61.7598 42.6699 -85.3301s-19.0996 -42.6699 -42.6699 -42.6699s-42.6699 19.1104 -42.6699 42.6699z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"poop\" unicode=\"&#xf619;\" \r\n-d=\"M451.36 78.8604c34.3301 -5.48047 60.6396 -34.9805 60.6396 -70.8604c0 -39.7598 -32.2402 -72 -72 -72h-368c-39.7598 0 -72 32.2402 -72 72c0 35.8799 26.3096 65.3799 60.6396 70.8604c-17.2998 13.1494 -28.6396 33.7295 -28.6396 57.1396\r\n-c0 39.7695 32.2402 72 72 72h14.0703c-13.4199 11.7305 -22.0703 28.7803 -22.0703 48c0 35.3496 28.6504 64 64 64h16c44.1797 0 80 35.8203 80 80c0 17.3799 -5.69043 33.3604 -15.1104 46.4805c4.95996 0.779297 9.94043 1.51953 15.1104 1.51953\r\n-c53.0195 0 96 -42.9805 96 -96c0 -11.2803 -2.30957 -21.9502 -5.87988 -32h5.87988c35.3496 0 64 -28.6504 64 -64c0 -19.2197 -8.65039 -36.2695 -22.0703 -48h14.0703c39.7598 0 72 -32.2305 72 -72c0 -23.4102 -11.3398 -43.9902 -28.6396 -57.1396z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"shapes\" unicode=\"&#xf61f;\" \r\n-d=\"M512 128v-160c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v160c0 17.6699 14.3301 32 32 32h160c17.6699 0 32 -14.3301 32 -32zM128 192c70.6904 0 128 -57.3096 128 -128s-57.3096 -128 -128 -128s-128 57.3096 -128 128s57.3096 128 128 128\r\n-zM479.03 224h-190.061c-25.3398 0 -41.1797 26.6699 -28.5098 48l95.0303 160c12.6699 21.3301 44.3496 21.3301 57.0195 0l95.0303 -160c12.6699 -21.3301 -3.16992 -48 -28.5098 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-of-life\" unicode=\"&#xf621;\" horiz-adv-x=\"480\" \r\n-d=\"M471.99 113.57c7.66016 -4.41992 10.2793 -14.2002 5.85938 -21.8506l-32.0195 -55.4297c-4.41992 -7.66016 -14.21 -10.2803 -21.8701 -5.86035l-135.93 78.4307v-156.86c0 -8.83984 -7.16992 -16 -16.0107 -16h-64.0391c-8.84082 0 -16.0107 7.16016 -16.0107 16\r\n-v156.85l-135.93 -78.4297c-7.66016 -4.41016 -17.4502 -1.79004 -21.8701 5.86035l-32.0195 55.4297c-4.41992 7.65039 -1.80078 17.4404 5.85938 21.8604l135.931 78.4297l-135.931 78.4297c-7.66016 4.41992 -10.2793 14.21 -5.85938 21.8604l32.0195 55.4199\r\n-c4.41992 7.65039 14.21 10.2803 21.8701 5.86035l135.93 -78.4307v156.86c0 8.83984 7.16992 16 16.0107 16h64.0391c8.84082 0 16.0107 -7.16016 16.0107 -16v-156.85l135.93 78.4297c7.66016 4.41992 17.4502 1.79004 21.8701 -5.86035l32.0195 -55.4297\r\n-c4.41992 -7.66016 1.80078 -17.4404 -5.85938 -21.8604l-135.931 -78.4297z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"teeth\" unicode=\"&#xf62e;\" horiz-adv-x=\"640\" \r\n-d=\"M544 448c53.0195 0 96 -42.9805 96 -96v-320c0 -53.0195 -42.9805 -96 -96 -96h-448c-53.0195 0 -96 42.9805 -96 96v320c0 53.0195 42.9805 96 96 96h448zM160 80v64c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-64\r\n-c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM160 208v64c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-64c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16zM304 88v56c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-56\r\n-c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM304 208v88c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-88c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM448 88v56c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-56\r\n-c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM448 208v88c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-88c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM576 80v64c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-64\r\n-c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM576 208v64c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-64c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"teeth-open\" unicode=\"&#xf62f;\" horiz-adv-x=\"640\" \r\n-d=\"M544 448c53.0195 0 96 -42.9805 96 -96v-64c0 -35.3496 -28.6602 -64 -64 -64h-512c-35.3398 0 -64 28.6504 -64 64v64c0 53.0195 42.9805 96 96 96h448zM160 272v32c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-32c0 -8.83984 7.16016 -16 16 -16h64\r\n-c8.83984 0 16 7.16016 16 16zM304 272v56c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-56c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM448 272v56c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-56c0 -8.83984 7.16016 -16 16 -16h80\r\n-c8.83984 0 16 7.16016 16 16zM576 272v32c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-32c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16zM576 128c35.3398 0 64 -28.6504 64 -64v-32c0 -53.0195 -42.9805 -96 -96 -96h-448\r\n-c-53.0195 0 -96 42.9805 -96 96v32c0 35.3496 28.6602 64 64 64h512zM160 48v32c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM304 56v24c0 8.83984 -7.16016 16 -16 16h-80\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-24c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM448 56v24c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-24c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM576 48v32c0 8.83984 -7.16016 16 -16 16h-64\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"theater-masks\" unicode=\"&#xf630;\" horiz-adv-x=\"640\" \r\n-d=\"M206.86 202.85l-7.62988 -43.1797c-21.0908 -7.21973 -38.5 -18.2002 -49.9004 -30.9199c-2.41992 32.9004 21.6504 63.6504 57.5303 74.0996zM95.8096 153c5.87012 -33.1699 64.3203 -71.8096 111.931 -84.79c10.5596 -27.0996 25.9795 -50.5 39.5 -67.5801\r\n-c-3.25977 -0.339844 -6.41992 -0.799805 -10.0098 -0.799805c-68.1201 0 -190.221 61.5596 -204.45 142.08l-31.7305 179.51c-4.96973 28.0996 7.98047 56.0996 32.1504 69.5205c67.8193 37.6396 143.46 57.0596 220.12 57.0596c23.9199 0 47.9492 -1.88965 71.8594 -5.7002\r\n-c17.29 -2.76953 31.7803 -13.0498 41.7705 -27c-19.1299 -0.769531 -38.29 -2.2998 -57.1807 -5.31934c-19.8594 -3.1709 -37.6396 -12.5303 -51.5898 -26c-1.62012 0.0195312 -3.23926 0.189453 -4.84961 0.189453c-65.8896 0 -131.25 -16.9502 -189.01 -49.0098\r\n-c0.0400391 -0.0302734 -0.530273 -1.03027 -0.240234 -2.65039zM193.36 290.46c3.83984 -21.7002 -10.6904 -42.4004 -32.4404 -46.2197c-21.7598 -3.82031 -42.5 10.6699 -46.3398 32.3701c-0.730469 4.12012 -0.610352 8.15918 -0.0898438 12.0996\r\n-c10.8096 -5.57031 24.8301 -7.75 39.4795 -5.16992c14.6504 2.57031 27.0703 9.41016 35.3203 18.3203c1.83984 -3.53027 3.33984 -7.28027 4.07031 -11.4004zM606.8 327.1c24.1699 -13.4092 37.1201 -41.4092 32.1504 -69.5195l-31.7305 -179.51\r\n-c-15.3896 -87.0508 -156.83 -151.931 -219.859 -140.84c-63.0303 11.0791 -173.7 120.3 -158.311 207.35l31.7305 179.51c4.95996 28.1006 26.7295 50 54.04 54.3604c100.55 16.0596 203 -1.96973 291.979 -51.3506zM333.56 230.3\r\n-c-0.729492 -4.12012 -0.609375 -8.16016 -0.0791016 -12.1094c10.8096 5.56934 24.8291 7.75 39.4795 5.16992c14.6504 -2.57031 27.0703 -9.41016 35.3203 -18.3203c1.83984 3.53027 3.33984 7.28027 4.06934 11.4004c3.83008 21.6992 -10.6895 42.3896 -32.4492 46.2197\r\n-c-21.7607 3.83008 -42.5 -10.6602 -46.3408 -32.3604zM404.03 31.54c55.6699 -9.79004 108.2 23.7803 122.38 75.7197c-28.1104 -16.9697 -68.6504 -24.21 -111.93 -16.5996c-43.2803 7.60938 -78.8906 28.2402 -99.4902 53.7803\r\n-c-4.48047 -53.6309 33.3594 -103.11 89.04 -112.9zM534.33 182.88c1.83984 3.52051 3.33984 7.27051 4.07031 11.4004c3.83008 21.7002 -10.7002 42.3896 -32.4502 46.2197c-21.7598 3.82031 -42.5 -10.6699 -46.3398 -32.3701\r\n-c-0.730469 -4.12012 -0.610352 -8.16016 -0.0908203 -12.0996c10.8105 5.56934 24.8301 7.75 39.4805 5.16992c14.6504 -2.57031 27.0801 -9.41016 35.3301 -18.3203z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"traffic-light\" unicode=\"&#xf637;\" horiz-adv-x=\"384\" \r\n-d=\"M384 256c0 -41.7402 -26.7998 -76.9004 -64 -90.1201v-37.8799h64c0 -42.8398 -28.25 -78.6904 -66.9902 -91.0498c-12.4297 -57.6699 -63.6094 -100.95 -125.01 -100.95s-112.58 43.2803 -125.01 100.95c-38.7402 12.3594 -66.9902 48.21 -66.9902 91.0498h64v37.8799\r\n-c-37.2002 13.2197 -64 48.3799 -64 90.1201h64v37.8799c-37.2002 13.2197 -64 48.3799 -64 90.1201h64v32c0 17.6699 14.3301 32 32 32h192c17.6699 0 32 -14.3301 32 -32v-32h64c0 -41.7402 -26.7998 -76.9004 -64 -90.1201v-37.8799h64zM192 32\r\n-c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM192 160c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM192 288c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48\r\n-s-48 -21.4902 -48 -48s21.4902 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck-monster\" unicode=\"&#xf63b;\" horiz-adv-x=\"640\" \r\n-d=\"M624 224c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16.71c-29.21 38.6504 -75.0996 64 -127.28 64c-52.1797 0 -98.0693 -25.3496 -127.279 -64h-65.4502c-29.21 38.6504 -75.1006 64 -127.28 64s-98.0703 -25.3496 -127.28 -64h-16.7197\r\n-c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16v80c0 8.83984 7.16016 16 16 16h176v96c0 17.6699 14.3301 32 32 32h113.24c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l83.1807 -103.98h73.5996c17.6699 0 32 -14.3301 32 -32v-64h16z\r\n-M288 320h132.44l-51.2002 64h-81.2402v-64zM592 96c8.83984 0 16 -7.16016 16.0195 -16v-32c0 -8.83984 -7.15918 -16 -16 -16h-5.19922c-1.79688 -6.01074 -5.67188 -15.3691 -8.65039 -20.8896l3.66992 -3.66992c6.25 -6.25 6.25 -16.3809 0 -22.6309l-22.6299 -22.6299\r\n-c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-3.66992 3.66992c-6.62012 -3.58008 -13.5703 -6.44922 -20.9004 -8.64941v-5.2002c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v5.2002c-7.33008 2.2002 -14.29 5.08008 -20.8994 8.64941\r\n-l-3.66992 -3.66992c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309l3.66992 3.66992c-3.58008 6.60938 -6.44922 13.5596 -8.64941 20.8896h-5.2002c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h5.2002\r\n-c1.7959 6.01074 5.6709 15.3691 8.64941 20.8896l-3.66992 3.66992c-6.25 6.25 -6.25 16.3809 0 22.6309l22.6299 22.6299c6.25 6.25 16.3809 6.25 22.6309 0l3.66992 -3.66992c6.60938 3.58008 13.5596 6.44922 20.8896 8.64941v5.2002c0 8.83984 7.16016 16 16 16h32\r\n-c8.83984 0 16 -7.16016 16 -16v-5.2002c6.01074 -1.7959 15.3691 -5.6709 20.8896 -8.64941l3.66992 3.66992c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309l-3.66992 -3.66992\r\n-c3.58008 -6.60938 6.44922 -13.5596 8.64941 -20.8896h5.2002zM480 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM272 96c8.83984 0 16 -7.16016 16.0195 -15.9902v-32c0 -8.83984 -7.15918 -16 -16 -16h-5.19922\r\n-c-1.79688 -6.00977 -5.67188 -15.3691 -8.65039 -20.8896l3.66992 -3.66992c6.25 -6.25 6.25 -16.3799 0 -22.6299l-22.6299 -22.6299c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-3.66992 3.66992c-6.62012 -3.58008 -13.5703 -6.4502 -20.9004 -8.65039v-5.2002\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v5.2002c-7.33008 2.2002 -14.29 5.08008 -20.8994 8.65039l-3.66992 -3.66992c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3799 0 22.6299l3.66992 3.66992\r\n-c-3.58008 6.61035 -6.44922 13.5596 -8.64941 20.8896h-5.2002c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h5.2002c1.7959 6.01074 5.6709 15.3691 8.64941 20.8906l-3.66992 3.66992c-6.25 6.25 -6.25 16.3799 0 22.6299l22.6299 22.6201\r\n-c6.25 6.25 16.3809 6.25 22.6309 0l3.66992 -3.66992c6.60938 3.58008 13.5596 6.44922 20.8896 8.64941v5.2002c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-5.2002c6.01074 -1.7959 15.3691 -5.6709 20.8896 -8.64941l3.66992 3.66992\r\n-c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309l-3.66992 -3.66992c3.58008 -6.60938 6.44922 -13.5596 8.64941 -20.8896h5.2002zM160 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48\r\n-s21.4902 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"truck-pickup\" unicode=\"&#xf63c;\" horiz-adv-x=\"640\" \r\n-d=\"M624 160c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-49.5996c0.759766 -5.26953 1.60938 -10.5195 1.60938 -16c0 -61.8604 -50.1396 -112 -112 -112c-61.8594 0 -112 50.1396 -112 112c0 5.48047 0.850586 10.7305 1.61035 16h-67.2305\r\n-c0.760742 -5.26953 1.61035 -10.5195 1.61035 -16c0 -61.8604 -50.1396 -112 -112 -112s-112 50.1396 -112 112c0 5.48047 0.849609 10.7305 1.61035 16h-49.6104c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16v64c0 17.6699 14.3301 32 32 32h160v128\r\n-c0 17.6699 14.3301 32 32 32h113.24c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l108.78 -135.98h48c17.6699 0 32 -14.3301 32 -32v-64h16zM288 352v-96h158.04l-76.7998 96h-81.2402zM176 32c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48\r\n-s-48 -21.5303 -48 -48s21.5303 -48 48 -48zM464 32c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48s21.5303 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ad\" unicode=\"&#xf641;\" \r\n-d=\"M157.52 176l18.4805 53.2197l18.4805 -53.2197h-36.9609zM352 192c13.2305 0 24 -10.7695 24 -24s-10.7695 -24 -24 -24s-24 10.7695 -24 24s10.7695 24 24 24zM464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288\r\n-c0 26.5 21.5 48 48 48h416zM250.58 96c11 0 18.7197 10.8496 15.1104 21.25l-53.6904 154.62c-3.08789 8.90332 -13.2422 16.1299 -22.666 16.1299h-0.00390625h-26.6602h-0.00390625c-9.41992 0 -19.5742 -7.22168 -22.666 -16.1201l-53.7002 -154.63\r\n-c-3.60938 -10.4004 4.11035 -21.25 15.1201 -21.25h16.9404h0.00585938c6.28125 0 13.0527 4.81641 15.1143 10.75l7.37988 21.25h70.29l7.36914 -21.25c2.24023 -6.42969 8.31055 -10.75 15.1201 -10.75h16.9404zM424 112v160c0 8.83984 -7.16016 16 -16 16h-16\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-36.4199c-7.54004 2.68945 -15.54 4.41992 -24 4.41992c-39.7002 0 -72 -32.2998 -72 -72s32.2998 -72 72 -72c9.92969 0 19.4004 2.01953 28.0195 5.67969c2.94043 -3.41016 7.13086 -5.67969 11.9805 -5.67969h16\r\n-c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ankh\" unicode=\"&#xf644;\" horiz-adv-x=\"320\" \r\n-d=\"M296 192c13.25 0 24 -10.7402 24 -24v-32c0 -13.25 -10.75 -24 -24 -24h-96v-152c0 -13.25 -10.75 -24 -24 -24h-32c-13.25 0 -24 10.75 -24 24v152h-96c-13.25 0 -24 10.75 -24 24v32c0 13.2598 10.75 24 24 24h44.6201c-21.0801 33.9902 -36.6201 74.3496 -36.6201 112\r\n-c0 88.3701 57.3096 144 128 144s128 -55.6299 128 -144c0 -37.6504 -15.54 -78.0098 -36.6201 -112h44.6201zM160 368c-29.6104 0 -48 -24.5195 -48 -64c0 -34.6602 27.1396 -78.1504 48 -100.87c20.8604 22.7305 48 66.21 48 100.87c0 39.4805 -18.3896 64 -48 64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bible\" unicode=\"&#xf647;\" horiz-adv-x=\"448\" \r\n-d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\r\n-c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM144 304v-32c0 -8.83984 7.16016 -16 16 -16h48v-112c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v112h48c8.83984 0 16 7.16016 16 16v32\r\n-c0 8.83984 -7.16016 16 -16 16h-48v48c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-48h-48c-8.83984 0 -16 -7.16016 -16 -16zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"business-time\" unicode=\"&#xf64a;\" horiz-adv-x=\"640\" \r\n-d=\"M496 224c79.5898 0 144 -64.4102 144 -144s-64.4102 -144 -144 -144s-144 64.4102 -144 144s64.4102 144 144 144zM560 73.71v12.5801c0 5.33984 -4.37012 9.70996 -9.70996 9.70996h-38.29v54.2803c0 5.33984 -4.37012 9.70996 -9.70996 9.70996h-12.5703\r\n-c-5.33984 0 -9.70996 -4.37012 -9.70996 -9.70996v-76.5703c0 -5.33984 4.37012 -9.70996 9.70996 -9.70996h60.5703c5.33984 0 9.70996 4.37012 9.70996 9.70996zM496 256c-37.5303 0 -72.2803 -11.9102 -100.88 -32h-395.12v80c0 25.5996 22.4004 48 48 48h80v48\r\n-c0 25.5996 22.4004 48 48 48h160c25.5996 0 48 -22.4004 48 -48v-48h80c25.5996 0 48 -22.4004 48 -48v-48.8096c-5.28027 0.479492 -10.5996 0.80957 -16 0.80957zM320 352v32h-128v-32h128zM326.82 128c-4.33984 -15.2803 -6.82031 -31.3398 -6.82031 -48\r\n-c0 -28.8203 7.09961 -55.96 19.4297 -80h-291.43c-25.5996 0 -48 22.4004 -48 48v144h192v-48c0 -8.83984 7.16016 -16 16 -16h118.82z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"city\" unicode=\"&#xf64f;\" horiz-adv-x=\"640\" \r\n-d=\"M616 256c13.25 0 24 -10.7402 24 -24v-264c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v360c0 13.2598 10.7402 24 24 24h40v80c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-80h64v80c0 8.83984 7.16016 16 16 16h16\r\n-c8.83984 0 16 -7.16016 16 -16v-80h64v72c0 13.2598 10.7402 24 24 24h144c13.2598 0 24 -10.7402 24 -24v-168h136zM128 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12z\r\n-M128 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM128 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40\r\n-c6.62988 0 12 5.37012 12 12zM256 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM256 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40\r\n-c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM256 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 140v40c0 6.62988 -5.37012 12 -12 12h-40\r\n-c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 332v40\r\n-c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM576 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40\r\n-c6.62988 0 12 5.37012 12 12zM576 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-dollar\" unicode=\"&#xf651;\" \r\n-d=\"M256 416c141.38 0 256 -93.1201 256 -208s-114.62 -208 -256 -208c-38.4102 0 -74.71 7.07031 -107.4 19.3799c-24.6094 -19.6299 -74.3398 -51.3799 -140.6 -51.3799h-0.00195312c-4.41309 0 -7.99512 3.58203 -7.99512 7.99512\r\n-c0 1.76172 0.984375 4.22754 2.19727 5.50488c0.5 0.530273 42.2598 45.4502 54.8193 95.7598c-35.6094 35.7305 -57.0195 81.1807 -57.0195 130.74c0 114.88 114.62 208 256 208zM280 113.56c30.29 3.62012 53.3701 30.9805 49.3203 63.04\r\n-c-2.90039 22.96 -20.6602 41.3105 -42.9102 47.6699l-50.0703 14.3008c-3.59961 1.0293 -6.12012 4.35938 -6.12012 8.10938c0 4.64062 3.78027 8.41992 8.44043 8.41992h32.7803h0.0654297c2.94727 0 7.51367 -0.994141 10.1943 -2.21973\r\n-c4.7998 -2.20996 10.3701 -1.70996 14.1094 2.03027l17.5205 17.5195c5.26953 5.27051 4.66992 14.2705 -1.5498 18.3799c-9.5 6.27051 -20.3604 10.1104 -31.7803 11.46v17.7305c0 8.83984 -7.16016 16 -16 16h-16c-8.83984 0 -16 -7.16016 -16 -16v-17.5498\r\n-c-30.29 -3.62012 -53.3701 -30.9805 -49.3203 -63.0498c2.90039 -22.96 20.6602 -41.3203 42.9102 -47.6699l50.0703 -14.3008c3.59961 -1.0293 6.12012 -4.35938 6.12012 -8.10938c0 -4.64062 -3.78027 -8.41992 -8.44043 -8.41992h-32.7803\r\n-c-3.59961 0 -7.0791 0.759766 -10.2598 2.21973c-4.7998 2.20996 -10.3701 1.70996 -14.1094 -2.03027l-17.5205 -17.5195c-5.26953 -5.27051 -4.66992 -14.2705 1.5498 -18.3799c9.5 -6.27051 20.3604 -10.1104 31.7803 -11.46v-17.7305c0 -8.83984 7.16016 -16 16 -16h16\r\n-c8.83984 0 16 7.16016 16 16v17.5596z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comments-dollar\" unicode=\"&#xf653;\" horiz-adv-x=\"576\" \r\n-d=\"M416 256c0 -88.3701 -93.1201 -160 -208 -160c-40.9805 0 -79.0703 9.24023 -111.27 24.9805c-21.8008 -12.7305 -52.1504 -24.9805 -88.7305 -24.9805h-0.00195312c-4.41309 0 -7.99512 3.58203 -7.99512 7.99512c0 1.76172 0.984375 4.22754 2.19727 5.50488\r\n-c0.319336 0.339844 22.4102 24.2803 35.7695 54.5195c-23.8398 26.0303 -37.9697 57.7109 -37.9697 91.9805c0 88.3701 93.1201 160 208 160s208 -71.6299 208 -160zM192 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16.1201\r\n-c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973\r\n-c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201\r\n-c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\r\n-c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29zM538.01 36.0098\r\n-c13.3604 -30.2598 35.4707 -54.1699 35.7803 -54.5c2.20996 -2.33008 2.82031 -5.72949 1.5498 -8.66992c-1.25 -2.92969 -4.13965 -4.83984 -7.33984 -4.83984c-36.5801 0 -66.9297 12.25 -88.7305 24.9805c-32.1992 -15.7402 -70.2891 -24.9805 -111.27 -24.9805\r\n-c-86.2305 0 -160.2 40.3701 -191.73 97.8799c10.4102 -1.11035 20.9502 -1.87988 31.7305 -1.87988c132.34 0 240 86.1299 240 192c0 6.78027 -0.469727 13.4697 -1.33008 20.0703c75.8398 -23.8701 129.33 -81.1299 129.33 -148.07\r\n-c0 -34.2695 -14.1299 -65.96 -37.9902 -91.9902z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cross\" unicode=\"&#xf654;\" horiz-adv-x=\"384\" \r\n-d=\"M352 320c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-96v-224c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v224h-96c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h96v96c0 17.6699 14.3301 32 32 32\r\n-h64c17.6699 0 32 -14.3301 32 -32v-96h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dharmachakra\" unicode=\"&#xf655;\" \r\n-d=\"M495 222.94c9.20996 0.569336 17 -6.74023 17.0098 -15.9707v-29.9395c0 -9.23047 -7.79004 -16.5498 -17 -15.9707l-17.2197 1.08008c-5.28027 -39.4795 -20.7998 -75.6299 -43.8604 -105.83l12.9502 -11.4297c6.91992 -6.09961 7.25977 -16.7803 0.730469 -23.3096\r\n-l-21.1699 -21.1699c-6.52051 -6.52051 -17.2002 -6.19043 -23.3105 0.729492l-11.4297 12.9502c-30.2002 -23.0703 -66.3506 -38.5898 -105.84 -43.8604l1.08008 -17.2197c0.569336 -9.20996 -6.74023 -17 -15.9707 -17h-29.9395c-9.23047 0 -16.5498 7.79004 -15.9707 17\r\n-l1.09082 17.2197c-39.4902 5.28027 -75.6406 20.7998 -105.841 43.8604l-11.4297 -12.9502c-6.09961 -6.91992 -16.7803 -7.25977 -23.3096 -0.729492l-21.1699 21.1699c-6.52051 6.51953 -6.19043 17.1992 0.729492 23.3096l12.9502 11.4297\r\n-c-23.0703 30.1904 -38.5898 66.3408 -43.8604 105.83l-17.2197 -1.08008c-9.20996 -0.569336 -17 6.74023 -17 15.9707v29.9395c0 9.23047 7.79004 16.5498 17 15.9707l17.2197 -1.08008c5.28027 39.4893 20.7998 75.6396 43.8604 105.84l-12.9502 11.4297\r\n-c-6.91992 6.10059 -7.25977 16.7803 -0.729492 23.3105l21.1699 21.1592c6.51953 6.52051 17.1992 6.19043 23.3096 -0.729492l11.4297 -12.9502c30.1904 23.0703 66.3408 38.5898 105.83 43.8604l-1.08008 17.2197c-0.569336 9.20996 6.74023 17 15.9707 17h29.9395\r\n-c9.23047 0 16.5498 -7.79004 15.9707 -17l-1.07031 -17.21c39.4795 -5.28027 75.6299 -20.7998 105.83 -43.8604l11.4297 12.9404c6.10059 6.91992 16.7803 7.25977 23.3105 0.729492l21.1592 -21.1592c6.52051 -6.52051 6.19043 -17.2002 -0.729492 -23.3105\r\n-l-12.9502 -11.4297c23.0703 -30.2002 38.5898 -66.3506 43.8604 -105.84zM281.84 349.39l-4.00977 -64.1201c10.2998 -2.40918 19.8896 -6.50977 28.6201 -11.9492l42.6201 48.29c-19.6006 14.1201 -42.4199 23.71 -67.2305 27.7793zM230.16 349.39\r\n-c-24.8105 -4.06934 -47.6299 -13.6592 -67.2305 -27.7793l42.6201 -48.29c8.73047 5.42969 18.3301 9.54004 28.6201 11.9492zM126.39 285.06c-14.1201 -19.5996 -23.71 -42.4092 -27.7793 -67.2197l64.1201 -4.00977c2.41992 10.29 6.51953 19.8896 11.96 28.6201z\r\n-M98.6104 166.16c4.06934 -24.8105 13.6592 -47.6299 27.7793 -67.2305l48.29 42.6201c-5.42969 8.73047 -9.54004 18.3301 -11.9492 28.6201zM230.16 34.6104l4 64.1201c-10.29 2.41992 -19.8906 6.51953 -28.6201 11.96l-42.6104 -48.3008\r\n-c19.6006 -14.1201 42.4199 -23.71 67.2305 -27.7793zM256 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM281.84 34.6104c24.8105 4.06934 47.6201 13.6592 67.2197 27.7793l-42.6094 48.3008\r\n-c-8.73047 -5.44043 -18.3301 -9.55078 -28.6201 -11.96zM385.61 98.9404c14.1201 19.5898 23.71 42.4092 27.7793 67.2295l-64.1201 4.00977c-2.40918 -10.2998 -6.50977 -19.8896 -11.9492 -28.6201zM349.27 213.83l64.1201 4\r\n-c-4.06934 24.8096 -13.6592 47.6299 -27.7793 67.2295l-48.3008 -42.6094c5.44043 -8.73047 9.55078 -18.3301 11.96 -28.6201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"envelope-open-text\" unicode=\"&#xf658;\" \r\n-d=\"M176 232c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h160c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160zM160 152v16c0 8.83984 7.16016 16 16 16h160c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16\r\n-h-160c-8.83984 0 -16 7.16016 -16 16zM256 30.8701c16.4199 0 32.8398 5.07031 46.8604 15.1895l209.14 151.08v-213.14c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v213.14l209.14 -151.08c14.0205 -10.1299 30.4404 -15.1895 46.8604 -15.1895z\r\n-M493.61 285.05c11.6094 -9.09961 18.3896 -23.0303 18.3896 -37.7695v-10.6504l-96 -69.3496v184.72h-320v-184.72l-96 69.3496v10.6504c0.00195312 12.8945 8.24023 29.8154 18.3896 37.7695c8.85059 6.94043 17.2402 13.4805 29.6104 22.8105v44.1396\r\n-c0 26.5098 21.4902 48 48 48h77.5498c3.04004 2.2002 5.87012 4.25977 9.04004 6.55957c16.8203 12.2705 50.21 41.79 73.4102 41.4404c23.2002 0.349609 56.5996 -29.1699 73.4102 -41.4404c3.16992 -2.2998 6 -4.35938 9.04004 -6.55957h77.5498\r\n-c26.5098 0 48 -21.4902 48 -48v-44.1396c12.3701 -9.34082 20.7598 -15.8701 29.6104 -22.8105z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder-minus\" unicode=\"&#xf65d;\" \r\n-d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192zM368 152v16c0 8.83984 -7.16016 16 -16 16h-192c-8.83984 0 -16 -7.16016 -16 -16v-16\r\n-c0 -8.83984 7.16016 -16 16 -16h192c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"folder-plus\" unicode=\"&#xf65e;\" \r\n-d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192zM368 152v16c0 8.83984 -7.16016 16 -16 16h-72v72c0 8.83984 -7.16016 16 -16 16h-16\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-72h-72c-8.83984 0 -16 -7.16016 -16 -16v-16c0 -8.83984 7.16016 -16 16 -16h72v-72c0 -8.83984 7.16016 -16 16 -16h16c8.83984 0 16 7.16016 16 16v72h72c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"funnel-dollar\" unicode=\"&#xf662;\" horiz-adv-x=\"640\" \r\n-d=\"M433.46 282.06c-83.4102 -20.8896 -145.46 -96.2695 -145.46 -186.06c0 -54.3496 22.7998 -103.38 59.21 -138.35c-10.75 -20.54 -38.3604 -29.21 -59.2197 -13.5703l-79.9902 60c-10.0703 7.55957 -16 19.4102 -16 32v155.92l-182.66 201.93\r\n-c-19.9502 19.9502 -5.82031 54.0703 22.4004 54.0703h480.52c28.2207 0 42.3506 -34.1201 22.4004 -54.0703zM480 256c88.3701 0 160 -71.6299 160 -160s-71.6299 -160 -160 -160s-160 71.6299 -160 160s71.6299 160 160 160zM496 16.1201\r\n-c23.6299 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973\r\n-c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201\r\n-c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\r\n-c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29c0 -4.41992 3.58008 -8 8 -8h16\r\n-c4.41992 0 8 3.58008 8 8v16.1201z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gopuram\" unicode=\"&#xf664;\" \r\n-d=\"M496 96c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-80v160h-32v128h-32v96h-32v-96h32v-128h32v-160h-80v80c0 8.7998 -7.2002 16 -16 16h-64c-8.7998 0 -16 -7.2002 -16 -16v-80h-80v160h32v128h32v96h-32v-96h-32v-128h-32v-160h-80\r\n-c-8.7998 0 -16 7.2002 -16 16v128c0 8.7998 7.2002 16 16 16h16v112c0 8.7998 7.2002 16 16 16h16v80c0 8.7998 7.2002 16 16 16h16v112c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16\r\n-c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-112h16c8.7998 0 16 -7.2002 16 -16v-80h16c8.7998 0 16 -7.2002 16 -16v-112h16zM232 272v-48h48v48c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16z\r\n-M288 96v64c0 8.7998 -7.2002 16 -16 16h-32c-8.7998 0 -16 -7.2002 -16 -16v-64h64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hamsa\" unicode=\"&#xf665;\" \r\n-d=\"M509.34 140.75c1.46875 -3.37012 2.66016 -9.08984 2.66016 -12.7656c0 -6.95703 -3.85254 -16.7295 -8.59961 -21.8145l-102.681 -110.03c-35.6895 -38.2197 -88.4102 -60.1396 -144.72 -60.1396s-109.03 21.9199 -144.71 60.1396l-102.69 110.03\r\n-c-4.74707 5.08496 -8.59961 14.8574 -8.59961 21.8145c0 3.67578 1.19141 9.39551 2.66016 12.7656c5.05957 11.6904 16.5898 19.25 29.3398 19.25h64v208c0 22 18 40 40 40s40 -18 40 -40v-134c0 -5.51953 4.48047 -10 10 -10h20c5.51953 0 10 4.48047 10 10v174\r\n-c0 22 18 40 40 40s40 -18 40 -40v-174c0 -5.51953 4.48047 -10 10 -10h20c5.51953 0 10 4.48047 10 10v134c0 22 18 40 40 40s40 -18 40 -40v-208h64c12.75 0 24.2803 -7.55957 29.3398 -19.25zM256 32c53.0195 0 96 64 96 64s-42.9805 64 -96 64s-96 -64 -96 -64\r\n-s42.9805 -64 96 -64zM256 128c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"haykal\" unicode=\"&#xf666;\" \r\n-d=\"M496.25 245.48c17.54 -2.46094 21.6797 -26.2705 6.04004 -34.6602l-98.1602 -52.6602l74.4805 -83.54c11.8594 -13.29 0.00976562 -34.25 -17.3506 -30.4902l-108.569 23.6504l4.10938 -112.55c0.430664 -11.6504 -8.87012 -19.2207 -18.4102 -19.2207\r\n-c-5.15918 0 -10.3896 2.20996 -14.1992 7.18066l-68.1807 88.8994l-68.1797 -88.8994c-3.81055 -4.9707 -9.0498 -7.18066 -14.2002 -7.18066c-9.54004 0 -18.8398 7.57031 -18.4102 19.2207l4.11035 112.55l-108.57 -23.6504\r\n-c-1.39941 -0.30957 -2.75977 -0.450195 -4.06934 -0.450195c-15.0107 0 -24.21 18.6807 -13.29 30.9307l74.4795 83.54l-98.1602 52.6592c-15.6494 8.40039 -11.5098 32.21 6.03027 34.6709l110 15.4297l-41.8203 104.34c-6.66016 16.6396 11.6006 32.1797 26.5898 22.6299\r\n-l94.04 -59.8896l34.0908 107.189c2.70996 8.55078 10.0293 12.8203 17.3496 12.8203s14.6396 -4.26953 17.3496 -12.8203l34.0908 -107.18l94.04 59.8896c14.9893 9.55078 33.2598 -5.98926 26.5898 -22.6299l-41.8203 -104.34zM338.51 136.32l-35.6094 39.9297\r\n-l46.9199 25.1699l-52.5703 7.37988l19.9902 49.8701l-44.9502 -28.6201l-16.29 51.2305l-16.3096 -51.2305l-44.9502 28.6201l19.9902 -49.8701l-52.5703 -7.37988l46.9199 -25.1699l-35.5996 -39.9297l51.8896 11.2998l-1.95996 -53.79l32.5898 42.4902l32.5898 -42.4902\r\n-l-1.96973 53.79z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"jedi\" unicode=\"&#xf669;\" horiz-adv-x=\"544\" \r\n-d=\"M479.99 96h39.96c-42.6299 -94.1699 -137.641 -160 -247.98 -160c-4.25977 0 -8.5498 0.0898438 -12.8496 0.290039c-103.97 4.76953 -193.851 69.4795 -235.101 159.71h39.9102l-58.5996 58.5996c-2.57031 12.8809 -4.49023 25.9805 -5.11035 39.4102\r\n-c-0.469727 10.0801 -0.129883 20.0703 0.5 29.9902h47.21l-41.3799 41.3799c14.3701 64.7002 52.1006 122.55 107.97 162.07c2.77051 1.95996 5.9707 3 9.27051 3c5.37988 0 10.4297 -2.70996 13.5098 -7.25c3.0498 -4.5 3.64062 -10 1.62012 -15.0898\r\n-c-6.53027 -16.4502 -9.83984 -33.7002 -9.83984 -51.2607c0 -45.1191 21.04 -86.5801 57.71 -113.739c4.00977 -2.9707 6.4502 -7.48047 6.69043 -12.3799c0.239258 -4.90039 -1.76074 -9.65039 -5.48047 -13.0107c-26.5498 -23.9795 -41.1699 -56.5 -41.1699 -91.5801\r\n-c0 -60.0293 42.9502 -110.279 99.8896 -121.92l2.5 65.2607l-27.1602 -18.4805c-2.96973 -2 -7.40918 -1.7002 -10 0.75c-2.72949 2.61035 -3.30957 6.70996 -1.38965 9.94043l20.1299 33.7695l-42.0693 8.71973c-3.71094 0.75 -6.38086 4.05078 -6.38086 7.83008\r\n-c0 3.78027 2.68066 7.08008 6.38086 7.83008l42.0693 8.73047l-20.1094 33.7295c-1.94043 3.27051 -1.36035 7.35059 1.35938 9.94043c2.73047 2.60938 6.86035 2.89941 10 0.779297l30.3906 -20.6592l11.5195 287.97c0.160156 4.29004 3.66992 7.66992 8 7.66992h0.0400391\r\n-c4.25293 0 7.81934 -3.44922 7.95996 -7.7002l11.5303 -287.93l30.3896 20.6699c3.03027 2.08984 7.2998 1.75 10 -0.799805c2.71973 -2.60059 3.2998 -6.68066 1.37988 -9.91016l-20.1299 -33.7705l42.0703 -8.72949c3.68945 -0.770508 6.37988 -4.06055 6.37988 -7.83008\r\n-c0 -3.78027 -2.67969 -7.08008 -6.37988 -7.83008l-42.0703 -8.71973l20.1104 -33.7305c0.631836 -1.05078 1.14453 -2.89844 1.14453 -4.12402c0 -1.89355 -1.11328 -4.49023 -2.48438 -5.7959c-2.63086 -2.49023 -7.04004 -2.85938 -10.0205 -0.799805l-27.1699 18.4697\r\n-l2.5 -65.3398c48.4697 9.40039 87.5703 48.1504 97.3096 96.5c8.78027 43.5605 -5.63965 87.3203 -38.5693 117.07c-3.73047 3.37012 -5.73047 8.10938 -5.49023 13.0303c0.240234 4.89941 2.67969 9.41992 6.7002 12.3994c36.6602 27.1602 57.6895 68.6104 57.6895 113.73\r\n-c0 17.5801 -3.30957 34.8496 -9.85938 51.3096c-2.03027 5.09961 -1.44043 10.5996 1.60938 15.0898c3.08008 4.53027 8.12012 7.24023 13.4902 7.24023c3.28027 0 6.48047 -1.03027 9.25 -2.99023c55.4805 -39.2197 93.4102 -97.4795 107.91 -162.27l-41.25 -41.2402\r\n-h46.9502c0.370117 -5.75977 1.0498 -11.46 1.0498 -17.2695c0 -17.7402 -1.83984 -35.0605 -5.12988 -51.8604z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"journal-whills\" unicode=\"&#xf66a;\" horiz-adv-x=\"448\" \r\n-d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\r\n-c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM133.08 303.61c-2.98047 -10.0908 -5.08008 -20.5605 -5.07031 -31.6201c0 -0.520508 0.140625 -0.990234 0.150391 -1.50977l37.1094 -32.4707\r\n-c3.33008 -2.89941 3.6709 -7.9502 0.75 -11.2793c-1.5791 -1.81055 -3.7998 -2.73047 -6.01953 -2.73047h-0.0175781c-1.65527 0 -4.00879 0.886719 -5.25195 1.98047l-23.5908 20.6396c11.54 -49.5801 55.7705 -86.6201 108.86 -86.6201s97.3203 37.04 108.87 86.6299\r\n-l-23.5898 -20.6396c-1.52051 -1.32031 -3.39062 -1.98047 -5.27051 -1.98047h-0.0146484c-2 0 -4.69043 1.22363 -6.00488 2.73047c-1.09668 1.24707 -1.98633 3.60645 -1.98633 5.2666c0 2.00293 1.22559 4.69727 2.73633 6.0127l37.1094 32.4707\r\n-c0.0107422 0.519531 0.150391 0.990234 0.150391 1.50977c0 11.0498 -2.09961 21.5195 -5.07031 31.5996l-21.2598 -21.2598c-1.57031 -1.55957 -3.61035 -2.33984 -5.66016 -2.33984s-4.09961 0.780273 -5.66016 2.33984c-3.11914 3.12012 -3.11914 8.19043 0 11.3105\r\n-l26.4199 26.4199c-10 20.8994 -26.2393 37.9795 -46.3691 49.2598c5.97949 -9.73047 9.59961 -21.0703 9.59961 -33.3301c0 -19.96 -9.33008 -37.5703 -23.6602 -49.3096c9.65039 -10.0605 15.6602 -23.6504 15.6602 -38.6904c0 -26.9404 -19.04 -49.4004 -44.3701 -54.7402\r\n-l-1.42969 34.2803l12.6797 -8.62012c0.69043 -0.459961 1.46973 -0.689453 2.25 -0.689453c0.980469 0 1.98047 0.369141 2.75 1.08984c1.36035 1.2793 1.63965 3.33984 0.69043 4.94922l-8.54004 14.3105l17.9102 3.71973\r\n-c1.85938 0.390625 3.18945 2.03027 3.18945 3.91992c0 1.89062 -1.33008 3.53027 -3.18945 3.91992l-17.9102 3.7207l8.54004 14.3096c0.308594 0.521484 0.55957 1.43652 0.55957 2.04297c0 0.950195 -0.55957 2.25293 -1.25 2.90723\r\n-c-0.645508 0.59668 -1.88281 1.08105 -2.76172 1.08105c-0.672852 0 -1.67578 -0.300781 -2.23828 -0.670898l-14.2002 -9.65039l-4.67969 112.29c-0.0898438 2.13965 -1.86035 3.83008 -4 3.83008s-3.91016 -1.69043 -4 -3.83008l-4.62012 -110.81l-12.0098 8.15918\r\n-c-1.56055 1.03027 -3.63965 0.890625 -5 -0.40918c-1.36035 -1.28027 -1.63965 -3.34082 -0.69043 -4.9502l8.54004 -14.3105l-17.9102 -3.71973c-1.85938 -0.389648 -3.18945 -2.03027 -3.18945 -3.91992s1.33008 -3.53027 3.18945 -3.91992l17.9102 -3.71973\r\n-l-8.54004 -14.3105c-0.308594 -0.521484 -0.55957 -1.43652 -0.55957 -2.04297c0 -0.950195 0.55957 -2.25293 1.25 -2.90723c0.769531 -0.709961 1.75 -1.08984 2.75 -1.08984c0.780273 0 1.55957 0.240234 2.25 0.69043l10.3701 7.04004l-1.36035 -32.71\r\n-c-25.3398 5.35938 -44.3799 27.8193 -44.3799 54.7598c0 15.04 6.00977 28.6299 15.6602 38.6904c-14.3301 11.7393 -23.6602 29.3496 -23.6602 49.3096c0 12.2598 3.62012 23.5996 9.61035 33.3398c-20.1299 -11.29 -36.3701 -28.3594 -46.3701 -49.2598l26.4199 -26.4199\r\n-c3.12012 -3.12012 3.12012 -8.19043 0 -11.3105c-1.57031 -1.55957 -3.61035 -2.33984 -5.66016 -2.33984s-4.09961 0.780273 -5.66016 2.33984zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"kaaba\" unicode=\"&#xf66b;\" horiz-adv-x=\"576\" \r\n-d=\"M554.12 364.49c13.0703 -4.36035 21.8799 -16.5898 21.8799 -30.3604v-49.0098l-265 79.5098c-15.0596 4.5 -30.9502 4.5 -45.9805 0l-265.02 -79.5098v49.0098c0.000976562 12.7314 9.80273 26.332 21.8799 30.3604l235.771 78.5801\r\n-c8.15723 2.71973 21.7559 4.92676 30.3545 4.92676s22.1982 -2.20703 30.3555 -4.92676zM274.22 333.97c9 2.7207 18.5498 2.7207 27.5898 0l274.2 -82.2598v-228.39c0 -15 -10.4199 -27.9902 -25.0596 -31.2402l-242.12 -53.7998\r\n-c-5.67871 -1.2627 -15.0078 -2.28809 -20.8252 -2.28809s-15.1465 1.02539 -20.8252 2.28809l-242.12 53.7998c-14.6396 3.25977 -25.0596 16.2402 -25.0596 31.2402v228.38zM128 217.89v16.5801c0 5.28027 -5.01953 9.11035 -10.1104 7.7207l-80 -21.8203\r\n-c-3.47949 -0.950195 -5.88965 -4.11035 -5.88965 -7.71973v-16.5801c0 -5.27051 5.01953 -9.10059 10.1104 -7.7207l80 21.8203c3.47949 0.950195 5.88965 4.11035 5.88965 7.71973zM272 257.17v16.5801c0 5.28027 -5.01953 9.11035 -10.1104 7.71973l-96 -26.1797\r\n-c-3.47949 -0.950195 -5.88965 -4.11035 -5.88965 -7.71973v-16.5801c0 -5.28027 5.01953 -9.11035 10.1104 -7.7207l96 26.1807c3.47949 0.950195 5.88965 4.10938 5.88965 7.71973zM448 234.47v-16.5801v-0.00488281c0 -3.37109 2.63867 -6.82715 5.88965 -7.71484\r\n-l80 -21.8203c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5801c0 3.60938 -2.41016 6.76953 -5.88965 7.71973l-80 21.8203c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.7207zM304 273.74v-16.5801v-0.00585938c0 -3.37012 2.63867 -6.82617 5.88965 -7.71387\r\n-l96 -26.1807c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5791c0 3.61035 -2.41016 6.77051 -5.88965 7.7207l-96 26.1797c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.71973z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"khanda\" unicode=\"&#xf66d;\" \r\n-d=\"M415.81 382c73.71 -40.2402 111.78 -123.85 90.1602 -207.51c-7.25 -28.0898 -22.3799 -53.5703 -41.25 -75.5898l-52.5098 -61.3105c-4.87012 -5.67969 -13.04 -7.22949 -19.6504 -3.70996l-79.3496 42.2305l-29.21 -20.3408l47.0801 -32.7793\r\n-c1.66992 0.370117 3.22949 1.00977 5.00977 1.00977c13.25 0 23.9902 -10.7402 23.9902 -24c0 -13.25 -10.7402 -24 -23.9902 -24c-12.0898 0 -21.6797 9.11035 -23.3301 20.7598l-40.9102 28.4805v-30.1504c9.38086 -5.58008 15.9902 -15.3896 15.9902 -27.0996\r\n-c0 -17.6699 -14.3203 -32 -31.9795 -32c-17.6602 0 -31.9805 14.3301 -31.9805 32c0 11.7197 6.60059 21.5293 15.9902 27.0996v29.9502l-40.6299 -28.2803c-1.64062 -11.6494 -11.2305 -20.7598 -23.3301 -20.7598c-13.25 0 -23.9902 10.75 -23.9902 24\r\n-c0 13.2598 10.7402 24 23.9902 24c1.78027 0 3.33984 -0.639648 5.00977 -1.00977l47.0801 32.7793l-29.21 20.3301l-79.3496 -42.2295c-6.61035 -3.52051 -14.7803 -1.96973 -19.6504 3.71973l-55.9697 65.3604c-12.5703 14.6797 -23.3906 31.0693 -30.46 49.0596\r\n-c-35.6602 90.6904 2.95996 186.391 81.4893 229.24c6.34082 3.5 15.0205 2.63965 20.0205 -2.7002c4.99023 -5.30957 6.45996 -12.9199 2.58984 -19.0801c-16.4902 -26.1602 -25.2002 -56.3896 -25.2002 -87.4697c0.180664 -53.1904 26.7598 -102.62 71.0303 -132.18\r\n-l76.5898 -53.3301v19.8994l-44.0498 36.0908c-3.91016 4.20996 -5 10.0996 -2.81055 15.2793l7.85059 17.2402c-33.8506 19.2598 -56.9404 55.2402 -56.9404 96.9902c0 40.79 22.0205 76.1396 54.5898 95.7197l-5.21973 11.4404\r\n-c-2.33008 5.5293 -0.929688 11.8301 3.57031 16.04l58.9902 52.8096l58.9893 -52.8203c4.5 -4.20996 5.91016 -10.5098 3.57031 -16.04l-5.21973 -11.4395c32.5693 -19.5801 54.5898 -54.9199 54.5898 -95.71c0 -41.7402 -23.0996 -77.7305 -56.9404 -96.9902\r\n-l7.85059 -17.2402c2.18945 -5.18945 1.10938 -11.0801 -2.81055 -15.2793l-44.0498 -36.0908v-20.0996l76.6299 53.3496c44.5 29.7207 71.0801 79.1602 71.2705 132.41c0 31.0205 -8.70996 61.25 -25.2002 87.4102c-1.36328 2.15723 -2.46973 5.97949 -2.46973 8.53223\r\n-c0 3.51465 1.96191 8.43652 4.37988 10.9883c4.99023 5.34961 12.9902 6.51953 19.3594 3.01953zM319.82 272c0 21.3203 -10.5801 40.1201 -26.6504 51.7695l-7.83008 -17.1797c-8.75 -24.5195 -8.75 -51.04 0 -75.5596l5.65039 -12.4102\r\n-c17.3398 11.46 28.8301 31.0801 28.8301 53.3799zM191.89 272c0 -22.2998 11.5 -41.9297 28.8408 -53.3896l5.64941 12.4092c8.75 24.5303 8.75 51.04 0 75.5605l-7.83008 17.1797c-16.0801 -11.6396 -26.6602 -30.4395 -26.6602 -51.7598z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"landmark\" unicode=\"&#xf66f;\" \r\n-d=\"M501.62 355.89c6.24023 -2.33984 10.3799 -8.30957 10.3799 -14.9795v-36.9102c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v36.9102c0 6.11914 4.65039 12.8301 10.3799 14.9795l234.39 90.0703\r\n-c2.99902 1.12598 8.03223 2.04004 11.2354 2.04004s8.23633 -0.914062 11.2354 -2.04004zM64 256h64v-160h96v160h64v-160h96v160h64v-160h16c8.83984 0 16 -7.16016 16 -16v-48h-448v48c0 8.83984 7.16016 16 16 16h16v160zM496 0c8.83984 0 16 -7.16016 16 -16v-32\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mail-bulk\" unicode=\"&#xf674;\" horiz-adv-x=\"576\" \r\n-d=\"M160 0c25.5996 0 51.2002 22.4004 64 32c64 44.7998 83.2002 60.7998 96 70.4004v-134.4c0 -17.6699 -14.3301 -32 -32 -32h-256c-17.6699 0 -32 14.3301 -32 32v134.4c12.7998 -9.60059 32 -25.6006 96 -70.4004c12.7998 -9.59961 38.4004 -32 64 -32zM288 192\r\n-c17.6699 0 32 -14.3301 32 -32v-19.2002c-25.5996 -19.2002 -22.4004 -19.2002 -115.2 -86.3994c-9.59961 -3.2002 -28.7998 -22.4004 -44.7998 -22.4004s-35.2002 19.2002 -44.7998 25.5996c-92.7998 67.2002 -89.6006 67.2002 -115.2 86.4004v16\r\n-c0 17.6699 14.3301 32 32 32h256zM544 288c17.6699 0 32 -14.3301 32 -32v-192c0 -17.6699 -14.3301 -32 -32 -32h-192v134.4l-0.290039 -0.220703c-3.12012 32.4004 -30.5 57.8203 -63.71 57.8203h-96v32c0 17.6699 14.3301 32 32 32h320zM512 160v64h-64v-64h64zM160 256\r\n-v-32h-96v192c0 17.6699 14.3301 32 32 32h320c17.6699 0 32 -14.3301 32 -32v-96h-224c-35.29 0 -64 -28.71 -64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"menorah\" unicode=\"&#xf676;\" horiz-adv-x=\"640\" \r\n-d=\"M144 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM240 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM432 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM528 320\r\n-c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM608 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM512 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32\r\n-zM416 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM320 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM224 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64\r\n-s-14.3301 -32 -32 -32zM128 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM32 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM576 160v144c0 8.83984 7.16016 16 16 16h32\r\n-c8.83984 0 16 -7.16016 16 -16v-144c0 -53.0195 -42.9805 -96 -96 -96h-192v-64h176c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v64h-192c-53.0195 0 -96 42.9805 -96 96\r\n-v144c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-144c0 -17.6699 14.3301 -32 32 -32h192v176c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-176h192c17.6699 0 32 14.3301 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mosque\" unicode=\"&#xf678;\" horiz-adv-x=\"640\" \r\n-d=\"M0 -32v320h128v-320c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32zM579.16 160h-358.32c-17.8594 17.3896 -28.8398 37.3398 -28.8398 58.9102c0 52.8594 41.79 93.79 87.9199 122.899c41.9502 26.46 80.6299 57.7705 111.96 96.2207\r\n-l8.12012 9.96973l8.12012 -9.96973c31.3301 -38.4502 70.0195 -69.75 111.96 -96.2207c46.1299 -29.1094 87.9199 -70.04 87.9199 -122.899c0 -21.5703 -10.9805 -41.5205 -28.8398 -58.9102zM608 128c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32\r\n-h-32v64c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32v-64h-64v72c0 48 -48 72 -48 72s-48 -24 -48 -72v-72h-64v64c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32v-64h-32c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h416zM64 448\r\n-c0 0 64 -32 64 -96v-32h-128v32c0 64 64 96 64 96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"om\" unicode=\"&#xf679;\" \r\n-d=\"M360.6 387.06l-21.5801 21.5605c-1.68848 1.68652 -3.05957 4.99316 -3.05957 7.37988s1.37109 5.69336 3.05957 7.37988l21.5703 21.5605c4.08008 4.06934 10.6797 4.06934 14.7598 0l21.5801 -21.5605c1.68945 -1.68652 3.06055 -4.99316 3.06055 -7.37988\r\n-s-1.37109 -5.69336 -3.06055 -7.37988l-21.5693 -21.5605c-1.6875 -1.68848 -4.99316 -3.05957 -7.37988 -3.05957c-2.3877 0 -5.69336 1.37109 -7.38086 3.05957zM412.11 256c55.0898 0 99.8896 -44.7998 99.8896 -99.8799v-100.12c0 -48.5303 -47.4805 -88 -96.0195 -88\r\n-c-96.0205 0 -96.0205 64 -96.0205 64v37.8701c0 7.55957 9.42969 10.8896 14.2002 5.01953c15.1494 -18.6494 42.4199 -42.8896 81.8203 -42.8896c13.2393 0 32.0098 10.7695 32.0098 24v100.12c0 19.79 -16.1006 35.8799 -35.8799 35.8799\r\n-c-9.60059 0 -18.6006 -3.73047 -25.3799 -10.5l-24.25 -24.25c-18.8701 -18.8604 -43.9502 -29.25 -70.6406 -29.25h-21.6895c11.0293 -18.9004 17.8096 -40.5801 17.8096 -64c0 -70.5801 -57.4297 -128 -128.02 -128c-118.811 0 -160.03 96 -159.94 150.81\r\n-c0.0195312 8.80078 10.2598 12.7705 14.79 5.2207c22.7998 -38.0107 49.1299 -92.0303 145.15 -92.0303c35.2998 0 64.0098 28.7002 64.0098 64s-28.71 64 -64.0098 64h-33.0303c-5.57031 0.450195 -10.6406 3.49023 -13.1699 8.5498l-16.0898 32.1699\r\n-c-5.35059 10.7002 2.42969 23.2803 14.3896 23.2803h31.9004c26.4697 0 48.0098 21.5303 48.0098 48s-21.54 48 -48.0098 48c-11.25 0 -21.8203 -3.80957 -30.2705 -10.71c-5.54004 -4.53027 -13.4795 -4.50977 -19.2002 -0.209961l-26.1494 19.6299\r\n-c-8.08984 6.08008 -8.48047 17.9697 -1.12012 24.9297c25.1094 23.7402 59.8594 34.71 96.0098 28.7803c43.1602 -7.08008 79.4199 -40.6396 89.5205 -83.1895c6.43945 -27.1201 2.80957 -53.1309 -7.73047 -75.2305h46.8398c9.60059 0 18.6006 3.73047 25.3799 10.5\r\n-l24.25 24.25c18.8701 18.8604 43.9502 29.25 70.6406 29.25zM454.29 380.73c10.5596 7.95996 25.7002 0.489258 25.7002 -12.7305v-35.5195c0 -2.36035 -0.509766 -4.71094 -1.53027 -6.83008c-2.96973 -6.30078 -21.8301 -37.6602 -101.75 -37.6602\r\n-c-78.4297 0 -117.19 69.3896 -118.8 72.3398c-3.61035 6.62988 -2.08008 14.8799 3.66016 19.7998c5.69922 4.92969 14.1201 5.16992 20.1396 0.549805c3.53027 -2.69922 87.0303 -65.0693 172.58 0.0507812z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pastafarianism\" unicode=\"&#xf67b;\" horiz-adv-x=\"640\" \r\n-d=\"M624.54 100.33c12.4004 -4.71973 18.5996 -18.5801 13.8896 -30.9805c-4.69922 -12.4092 -18.5801 -18.6299 -30.9697 -13.8799c-8.11035 3.08984 -14.3398 0.19043 -31.3896 -11.3594c-13.5508 -9.15039 -30.8301 -20.8408 -52.4199 -20.8408\r\n-c-7.16992 0 -14.8301 1.28027 -22.9707 4.39062c-32.6602 12.4395 -39.9893 41.3301 -45.3301 62.4395c-2.20996 8.7207 -3.98926 14.4902 -5.94922 18.8701c-16.6201 -13.5996 -36.9307 -25.8701 -61.6201 -34.1602c10.0098 -37 32.2793 -90.8096 60.2197 -90.8096\r\n-c13.25 0 24 -10.75 24 -24s-10.75 -24 -24 -24c-66.7402 0 -97.0498 88.6299 -107.42 129.14c-6.69043 -0.599609 -13.4199 -1.13965 -20.5801 -1.13965s-13.8896 0.540039 -20.5801 1.13965c-10.3701 -40.5098 -40.6797 -129.14 -107.42 -129.14c-13.25 0 -24 10.75 -24 24\r\n-s10.75 24 24 24c28.0801 0 50.2998 53.7998 60.2598 90.7998c-24.6895 8.29004 -45.0195 20.5605 -61.6396 34.1699c-1.95996 -4.37988 -3.74023 -10.1494 -5.9502 -18.8701c-5.34961 -21.1094 -12.6699 -50 -45.3301 -62.4395\r\n-c-8.13965 -3.11035 -15.7998 -4.39062 -22.9697 -4.39062c-21.5898 -0.0195312 -38.8701 11.6807 -52.4199 20.8408c-17.0498 11.5498 -23.2305 14.4492 -31.3906 11.3594c-12.3594 -4.72949 -26.25 1.4707 -30.9697 13.8799\r\n-c-4.71973 12.3906 1.48047 26.25 13.8701 30.9707c32.6504 12.4697 57.3398 -4.25 75.3701 -16.4502c17.0801 -11.5303 23.2998 -14.4199 31.4102 -11.3604c8.12012 3.10059 10.8301 9.37988 15.8896 29.3799c3.33008 13.1504 7.44043 29.3203 17.9502 42.6504\r\n-c-2.24023 2.91016 -4.42969 5.78027 -6.37988 8.57031c-10.1699 -9.56055 -23.4102 -17.1104 -41.7002 -17.1104c-33.9502 0 -50.8701 25.7803 -62.0596 42.8301c-10.6006 16.1396 -15 21.1699 -21.9404 21.1699c-13.25 0 -24 10.75 -24 24s10.75 24 24 24\r\n-c33.96 0 50.8799 -25.7803 62.0596 -42.8301c10.6006 -16.1396 15 -21.1699 21.9404 -21.1699c17.1504 0 37.6797 61.5596 97.2695 101.9l-17.25 34.5c-33.46 2.09961 -60.0195 29.6191 -60.0195 63.5996c0 35.3496 28.6504 64 64 64s64 -28.6504 64 -64\r\n-c0 -13.0195 -3.94043 -25.0996 -10.5996 -35.21l18.1494 -36.2998c16.9697 4.59961 35.6006 7.50977 56.46 7.50977c20.8604 0 39.4805 -2.91016 56.46 -7.50977l18.1504 36.2998c-6.67969 10.1104 -10.6201 22.1904 -10.6201 35.21c0 35.3496 28.6504 64 64 64\r\n-s64 -28.6504 64 -64c0 -33.9805 -26.5703 -61.5 -60.0098 -63.5898l-17.25 -34.5c59.7793 -40.4805 79.9502 -101.91 97.2598 -101.91c6.94043 0 11.3398 5.03027 21.9404 21.1699c11.1895 17.0498 28.1094 42.8301 62.0596 42.8301c13.25 0 24 -10.75 24 -24\r\n-s-10.75 -24 -24 -24c-6.94043 0 -11.3496 -5.03027 -21.9404 -21.1699c-11.1895 -17.0498 -28.1094 -42.8301 -62.0596 -42.8301c-18.29 0 -31.5303 7.5498 -41.7002 17.1201c-1.9502 -2.78027 -4.13965 -5.66016 -6.37988 -8.57031\r\n-c10.5098 -13.3301 14.6201 -29.5 17.9502 -42.6494c5.05957 -20 7.76953 -26.29 15.8896 -29.3809c8.16016 -3.05957 14.3506 -0.169922 31.4102 11.3604c18.0098 12.2002 42.6699 28.9697 75.3701 16.4502zM448 400c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16\r\n-s16 7.17969 16 16s-7.17969 16 -16 16zM192 400c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"peace\" unicode=\"&#xf67c;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM432 192c0 90.5303 -65.7695 165.82 -152 181.03v-165.66l129.43 -103.54c14.3701 26.2002 22.5703 56.2402 22.5703 88.1699zM216 10.9697v114.46\r\n-l-89.29 -71.4395c24.7998 -21.8203 55.4297 -37.0498 89.29 -43.0205zM280 125.43v-114.449c33.8604 5.96973 64.4902 21.1992 89.29 43.0195zM216 373.03c-86.2305 -15.21 -152 -90.5 -152 -181.03c0 -31.9297 8.2002 -61.9697 22.5703 -88.1699l129.43 103.54v165.66z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"place-of-worship\" unicode=\"&#xf67f;\" horiz-adv-x=\"640\" \r\n-d=\"M620.61 81.4502c10.7031 -4.58887 19.3896 -17.7646 19.3896 -29.4102v-100.04c0 -8.83984 -7.16016 -16 -16 -16h-112v192zM0 52.04c0 11.6455 8.68652 24.8213 19.3896 29.4102l108.61 46.5498v-192h-112c-8.83984 0 -16 7.16016 -16 16v100.04zM464.46 201.32\r\n-c9.63965 -5.78027 15.54 -16.2002 15.54 -27.4404v-237.88h-96v96c0 35.3496 -28.6602 64 -64 64s-64 -28.6504 -64 -64v-96h-96v237.88c0 10.0029 6.96191 22.2959 15.54 27.4404l48.46 29.0801v114.97c0 8.49023 3.37988 16.6299 9.37988 22.6299l75.3105 75.3096\r\n-c6.23926 6.25 16.3691 6.25 22.6191 0l75.3105 -75.3096c6.00977 -6.00977 9.37988 -14.1396 9.37988 -22.6299v-114.97z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"poll\" unicode=\"&#xf681;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM160 80v128c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-128c0 -8.83984 7.16016 -16 16 -16h32\r\n-c8.83984 0 16 7.16016 16 16zM256 80v224c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-224c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16zM352 80v64c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-64\r\n-c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"poll-h\" unicode=\"&#xf682;\" horiz-adv-x=\"448\" \r\n-d=\"M448 16c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48v-352zM112 256h128c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-128c-8.83984 0 -16 -7.16016 -16 -16v-32\r\n-c0 -8.83984 7.16016 -16 16 -16zM112 160h224c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-224c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16zM112 64h64c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-64\r\n-c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pray\" unicode=\"&#xf683;\" horiz-adv-x=\"384\" \r\n-d=\"M256 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM225.37 150.25l-24.1504 28.7598l-34.7998 -64.8701l109.86 -109.859c25.4893 -25.4902 5.7998 -68.2803 -28.2803 -68.2803h-208c-22.0898 0 -40 17.9102 -40 40\r\n-s17.9102 40 40 40h91.5596l-44.8096 34.8896c-42.8799 27.3799 -57.5898 80.1104 -34.1904 123.75l49.3701 92.0303c11.1201 20.6504 32.1807 34.4404 56.3701 36.9199c24.7803 2.58984 48.5605 -6.93945 64 -25.3301l38.9102 -46.3096l57.4404 47\r\n-c17.1191 13.9697 42.3398 11.4902 56.3096 -5.62012c13.9697 -17.0898 11.4697 -42.2998 -5.62012 -56.2803l-88 -72.0195c-16.9697 -13.8701 -41.9102 -11.5 -55.9697 5.21973z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"praying-hands\" unicode=\"&#xf684;\" horiz-adv-x=\"640\" \r\n-d=\"M272 256.09c17.5996 0 32 -14.3994 32 -32v-128c0 -51.8896 -34.8398 -98.0801 -84.75 -112.35l-179.19 -46.6201c-2.64941 -0.69043 -5.36914 -1.03027 -8.05957 -1.03027c-23.4805 0 -32 21.1797 -32 32v96v0.0117188c0 12.7285 9.80176 26.3203 21.8799 30.3389\r\n-l90.1201 30.04v80.2295c0 18.9805 5.55957 37.3896 16.1201 53.2305l117.26 175.899c0.169922 0.270508 0.589844 0.25 0.790039 0.480469c9.58008 13.5098 27.8496 17.8799 42.2998 9.20996c15.1602 -9.10059 20.0605 -28.75 10.9707 -43.9102l-77.75 -129.59\r\n-c-8.9707 -14.9199 -13.6904 -32 -13.6904 -49.3906v-76.5498c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v80c0 17.6006 14.4004 32 32 32zM618.12 94.3604c13.0703 -4.36035 21.8799 -16.5801 21.8799 -30.3506v-96c0 -10.8193 -8.51953 -32 -32 -32\r\n-c-2.67969 0 -5.40039 0.339844 -8.05957 1.03027l-179.19 46.6201c-49.9102 14.2598 -84.75 60.4502 -84.75 112.34v128c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-80c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v76.5498\r\n-c0 17.3906 -4.71973 34.4697 -13.6904 49.3906l-77.75 129.59c-9.08984 15.1602 -4.18945 34.8193 10.9707 43.9102c14.4502 8.66992 32.7197 4.2998 42.2998 -9.20996c0.200195 -0.240234 0.610352 -0.210938 0.790039 -0.480469l117.26 -175.89\r\n-c10.5605 -15.8408 16.1201 -34.25 16.1201 -53.2305v-80.2295z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"quran\" unicode=\"&#xf687;\" horiz-adv-x=\"448\" \r\n-d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\r\n-c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM301.08 302.18l-11.1904 -22.6494l-24.9893 -3.62988c-2.68066 -0.390625 -3.75 -3.66992 -1.81055 -5.56055l18.0898 -17.6299l-4.26953 -24.8896\r\n-c-0.360352 -2.11035 1.30957 -3.82031 3.20996 -3.82031c0.5 0 1.01953 0.120117 1.51953 0.379883l22.3604 11.75l22.3604 -11.75c0.5 -0.259766 1.01953 -0.379883 1.51953 -0.379883c1.90039 0 3.57031 1.70996 3.20996 3.82031l-4.26953 24.8896l18.0898 17.6299\r\n-c1.92969 1.89062 0.859375 5.16992 -1.81055 5.56055l-25 3.62988l-11.1797 22.6494c-0.599609 1.20996 -1.75977 1.82031 -2.91992 1.82031s-2.32031 -0.610352 -2.91992 -1.82031zM243.19 371.19c-63.5205 0 -115.19 -51.6709 -115.19 -115.19\r\n-c0 -63.5098 51.6699 -115.19 115.18 -115.18c13.6006 0 27.1201 2.46973 40.1904 7.33984c2.67969 0.910156 4.62012 3.43945 4.62012 6.41992c0 3.63965 -2.87012 6.78027 -6.7998 6.78027c-0.650391 0 -3.10059 -0.209961 -4.13086 -0.209961\r\n-c-52.3096 0 -94.8594 42.5596 -94.8594 94.8594c0 52.3105 42.5498 94.8604 94.8594 94.8604c1.04004 0 3.45996 -0.209961 4.13086 -0.209961c0.633789 -0.237305 1.69727 -0.429688 2.375 -0.429688c3.73926 0 6.77441 3.03516 6.77441 6.77441\r\n-c0 3.7373 -3.03223 6.77246 -6.76953 6.77539c-13.1201 4.91992 -26.71 7.41016 -40.3799 7.41016zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search-dollar\" unicode=\"&#xf688;\" \r\n-d=\"M505.04 5.33984c9.2998 -9.39941 9.2998 -24.5898 -0.0996094 -33.9902l-28.3008 -28.2998c-9.2998 -9.39941 -24.5 -9.39941 -33.8994 0l-99.71 99.6904c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.71 -44 -128.011 -44\r\n-c-114.909 0 -208.02 93.0898 -208.02 207.979c0 114.891 93.1201 207.98 208.02 207.98c114.9 0 208.011 -93.0898 208.011 -207.98c0 -48.2998 -16.4004 -92.6895 -44 -127.989h16.2998c6.40039 0 12.5 -2.5 17 -7zM208.02 96.04c79.6504 0 144 64.4502 144 143.979\r\n-c0 79.6406 -64.46 143.98 -144 143.98c-79.6494 0 -144 -64.4502 -144 -143.98c0 -79.6396 64.4609 -143.979 144 -143.979zM235.13 248.58c18.6006 -5.58008 31.5898 -23.4199 31.5898 -43.3896c0 -24.5303 -19.0498 -44.4404 -42.6797 -45.0703v-16.1201\r\n-c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v16.29c-11.29 0.580078 -22.2705 4.51953 -31.3701 11.3496c-3.90039 2.93066 -4.09961 8.77051 -0.570312 12.1406l11.75 11.21c2.77051 2.63965 6.89062 2.75977 10.1309 0.729492\r\n-c3.85938 -2.42969 8.25977 -3.71973 12.8193 -3.71973h28.1006c6.5 0 11.7998 5.91992 11.7998 13.1904c0 5.94922 -3.61035 11.1797 -8.77051 12.7295l-45.0098 13.5c-18.5898 5.58008 -31.5801 23.4199 -31.5801 43.3896c0 24.5205 19.0498 44.4404 42.6797 45.0703\r\n-v16.1201c0 4.41992 3.58008 8 8 8h16c4.4209 0 8 -3.58008 8 -8v-16.29c11.29 -0.580078 22.2705 -4.51953 31.3701 -11.3496c3.90039 -2.93066 4.10059 -8.77051 0.570312 -12.1406l-11.75 -11.21c-2.76953 -2.63965 -6.88965 -2.75977 -10.1299 -0.729492\r\n-c-3.86035 2.42969 -8.25977 3.71973 -12.8203 3.71973h-28.1094c-6.5 0 -11.8008 -5.91992 -11.8008 -13.1904c0 -5.94922 3.61035 -11.1797 8.77051 -12.7295z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"search-location\" unicode=\"&#xf689;\" \r\n-d=\"M505.04 5.33984c9.2998 -9.39941 9.2998 -24.5898 -0.0996094 -33.9902l-28.3008 -28.2998c-9.2998 -9.39941 -24.5 -9.39941 -33.8994 0l-99.71 99.6904c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.71 -44 -128.011 -44\r\n-c-114.909 0 -208.02 93.0898 -208.02 207.979c0 114.891 93.1201 207.98 208.02 207.98c114.9 0 208.011 -93.0898 208.011 -207.98c0 -48.2998 -16.4004 -92.6895 -44 -127.989h16.2998c6.40039 0 12.5 -2.5 17 -7zM208.02 96.04c79.6504 0 144 64.4502 144 143.979\r\n-c0 79.6406 -64.46 143.98 -144 143.98c-79.6494 0 -144 -64.4502 -144 -143.98c0 -79.6396 64.4609 -143.979 144 -143.979zM208.04 336c40.7803 0 73.8398 -33.0498 73.8398 -73.8301c0 -32.9697 -48.2598 -93.0498 -66.75 -114.86\r\n-c-1.5293 -1.8291 -4.70508 -3.31445 -7.08984 -3.31445s-5.56055 1.48535 -7.08984 3.31445c-18.4902 21.8105 -66.75 81.9004 -66.75 114.86c0 40.7803 33.0596 73.8301 73.8398 73.8301zM208.04 240c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\r\n-s-24 -10.7402 -24 -24c0 -13.25 10.7402 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"socks\" unicode=\"&#xf696;\" \r\n-d=\"M214.66 136.99c-52.7402 -39.5605 -69.0498 -110.021 -39.2002 -165.4l-21.8604 -16.3896c-17.2695 -12.9502 -37.4893 -19.2002 -57.5195 -19.2002c-32.8105 0 -65.6904 16.75 -83.9404 48.3301c-24.6494 42.6396 -10.1895 97.5 29.21 127.06l86.6504 64.6104v176h160\r\n-v-160zM288 416v-32h-160v32c0 17.6699 14.3301 32 32 32h128c2.84961 0 5.40039 -0.919922 8.01953 -1.62012c-4.94922 -9.08008 -8.01953 -19.3301 -8.01953 -30.3799zM480 448c17.6699 0 32 -14.3301 32 -32v-32h-192v32c0 17.6699 14.3301 32 32 32h128zM320 176v176h192\r\n-v-208v-0.00195312c0 -35.3271 -22.9375 -81.2021 -51.2002 -102.398l-115.2 -86.3994c-17.2695 -12.9502 -37.4893 -19.2002 -57.5195 -19.2002c-32.8105 0 -65.1699 16.75 -83.4199 48.3301c-24.6504 42.6396 -10.1904 97.5 29.21 127.06z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"square-root-alt\" unicode=\"&#xf698;\" horiz-adv-x=\"576\" \r\n-d=\"M571.31 196.69c6.25 -6.25 6.25 -16.3809 0 -22.6309l-46.0596 -46.0596l46.0596 -46.0596c6.25 -6.25 6.25 -16.3809 0 -22.6309l-22.6191 -22.6191c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-46.0596 46.0596l-46.0596 -46.0596c-6.25 -6.25 -16.3809 -6.25 -22.6309 0\r\n-l-22.6191 22.6191c-6.25 6.25 -6.25 16.3809 0 22.6309l46.0596 46.0596l-46.0596 46.0596c-6.25 6.25 -6.25 16.3809 0 22.6309l22.6191 22.6191c6.25 6.25 16.3809 6.25 22.6309 0l46.0596 -46.0596l46.0596 46.0596c6.25 6.25 16.3809 6.25 22.6309 0zM552 448\r\n-c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-194.97l-97.8105 -374.52c-9.83984 -32.4805 -37.0098 -41.4805 -54.2793 -41.4805c-18.6406 0 -35.9502 8.5 -48.4404 28.2695l-88.8799 163.73h-43.6201c-13.25 0 -24 10.75 -24 24v48\r\n-c0 13.2598 10.75 24 24 24h81.4697c10.4385 -0.00292969 22.9961 -7.42578 28.0303 -16.5703l58.4102 -106.1l84.79 322.8c3.68945 14.0703 16.4102 23.8701 30.9502 23.8701h244.35z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-and-crescent\" unicode=\"&#xf699;\" \r\n-d=\"M340.47 -18.3604c8.74023 0 15.1299 -6.96973 15.1299 -15.0596c0 -6.62012 -4.31934 -12.2402 -10.2793 -14.2598c-29.04 -10.8301 -59.0898 -16.3203 -89.3203 -16.3203c-141.16 0 -256 114.84 -256 256s114.84 256 256 256c30.3896 0 60.5801 -5.54004 89.75 -16.4805\r\n-c6.91992 -2.59961 10.9297 -9.83984 9.46973 -17.0898c-1.41992 -7.04004 -7.62012 -12.0693 -14.75 -12.0693c-1.47949 0 -6.85938 0.459961 -9.17969 0.459961c-116.25 0 -210.82 -94.5703 -210.82 -210.82s94.5703 -210.82 210.82 -210.82\r\n-c2.29004 0 7.72949 0.459961 9.17969 0.459961zM503.46 234.14c8.16992 -1.17969 11.4297 -11.2197 5.52051 -16.9893l-55.2705 -53.8701l13.0498 -76.0703c1.11035 -6.42969 -4.00977 -11.6602 -9.80957 -11.6602c-1.53027 0 -3.11035 0.370117 -4.64062 1.16992\r\n-l-68.3096 35.9102l-68.3301 -35.9102c-1.53027 -0.80957 -3.11035 -1.16992 -4.63965 -1.16992c-5.7998 0 -10.9199 5.21973 -9.81055 11.6602l13.0498 76.0703l-55.2695 53.8701c-5.91016 5.76953 -2.65039 15.8096 5.51953 16.9893l76.3809 11.1006l34.1592 69.21\r\n-c1.83008 3.7002 5.38086 5.5498 8.93066 5.5498s7.09961 -1.84961 8.92969 -5.5498l34.1602 -69.21z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"star-of-david\" unicode=\"&#xf69a;\" horiz-adv-x=\"464\" \r\n-d=\"M405.68 192l53.2207 -89.3896c14.4092 -24.21 -3.41016 -54.6104 -32.0107 -54.6104h-106.93l-55.9502 -93.9805c-7.14941 -12.0098 -19.5801 -18.0195 -32.0098 -18.0195s-24.8604 6.00977 -32.0098 18.0195l-55.9502 93.9805h-106.93\r\n-c-28.6006 0 -46.4199 30.4004 -32.0107 54.6104l53.2207 89.3896l-53.2207 89.3896c-14.4092 24.21 3.41016 54.6104 32.0107 54.6104h106.93l55.9502 93.9805c7.14941 12.0098 19.5801 18.0195 32.0098 18.0195s24.8604 -6.00977 32.0098 -18.0195l55.9502 -93.9805h106.92\r\n-c28.6006 0 46.4199 -30.4004 32.0098 -54.6104zM392.9 280h-39.6006l19.7998 -33.2598zM340.51 192l-52.3896 88h-112.25l-52.3799 -88l52.3896 -88h112.24zM232 374.28l-22.7803 -38.2803h45.5703zM71.0996 280l19.8008 -33.2598l19.7998 33.2598h-39.6006zM71.0996 104\r\n-h39.6006l-19.7998 33.2598zM232 9.71973l22.7803 38.2803h-45.5703zM353.29 104h39.6104l-19.8105 33.2598z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"synagogue\" unicode=\"&#xf69b;\" horiz-adv-x=\"640\" \r\n-d=\"M70 251.49c5.30957 6.00977 14.6904 6.00977 20 0l38 -43.0703v-272.42h-128v226.07v0.00683594c0 5.5625 2.98828 13.4629 6.66992 17.6328zM633.33 179.71c4.2998 -4.87012 6.66992 -11.1396 6.66992 -17.6396v-226.07h-128v272.42l38 43.0703\r\n-c5.30957 6.01953 14.6904 6.01953 20 0zM339.99 440.99l128 -102.4c7.58984 -6.07031 12.0098 -15.2695 12.0098 -24.9902v-377.6h-96v96c0 38.8701 -34.6602 69.6504 -74.75 63.1201c-31.4697 -5.12012 -53.25 -34.6699 -53.25 -66.5498v-92.5703h-96v377.6\r\n-c0 8.49023 5.38086 19.6865 12.0098 24.9902l128 102.4c11.6904 9.34961 28.29 9.34961 39.9805 0zM392.06 225.44l-19.1895 30.5596l19.2002 30.5703c1.97949 3.14941 -0.290039 7.23926 -4 7.23926h-38.9502l-25.1201 39.9805c-1.84961 2.9502 -6.15039 2.9502 -8 0\r\n-l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395\r\n-c3.70996 0 5.98047 4.08984 4 7.24023z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"torah\" unicode=\"&#xf6a0;\" horiz-adv-x=\"640\" \r\n-d=\"M320.05 81.5195l-17.7402 29.6406h35.46zM419.26 247.52l-18.3994 -30.8193l-18.46 30.8193h36.8594zM48 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM220.74 136.5l18.3896 30.8203\r\n-l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.53711 -2.65625 -2.78516 -7.30176 -2.78516 -10.3711c0 -3.20312 1.35059 -8.02246 3.01562 -10.7588l29.3604 -49l-29.21 -48.8398\r\n-c-1.6709 -2.77344 -3.02637 -7.65234 -3.02637 -10.8906c0 -11.6523 9.45703 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.33105 -5.6416 11.3516 -10.2207 17.9023 -10.2207h0.0976562c6.64844 0.0136719 14.7842 4.67285 18.1602 10.4004l29.1299 48.7002\r\n-h59.4697h0.0224609c6.8125 0 15.082 4.80273 18.458 10.7197c1.53418 2.65332 2.7793 7.29297 2.7793 10.3584c0 3.2041 -1.35254 8.02539 -3.01953 10.7617l-29.3701 49l29.2402 48.8496c1.66602 2.77246 3.01758 7.64648 3.01758 10.8809\r\n-c0 11.6562 -9.46094 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.3252 5.63574 -11.3359 10.21 -17.8799 10.21h-0.0703125h-0.0341797c-6.65137 0 -14.7988 -4.64551 -18.1855 -10.3701l-29.1299 -48.71h-59.4502h-0.0458984\r\n-c-6.80469 0 -15.0635 -4.79785 -18.4346 -10.71zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998\r\n-l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"torii-gate\" unicode=\"&#xf6a1;\" \r\n-d=\"M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240\r\n-h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96\r\n-v64h-96zM384 256v64h-96v-64h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vihara\" unicode=\"&#xf6a7;\" horiz-adv-x=\"640\" \r\n-d=\"M632.88 47.29c5.41992 -3.61035 7.7002 -9.62012 6.99023 -15.29c-0.620117 -5.00977 -3.56055 -9.75 -8.71973 -12.3301l-55.1504 -19.6699v-48c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48h-160v-48c0 -8.83984 -7.16016 -16 -16 -16h-32\r\n-c-8.83984 0 -16 7.16016 -16 16v48h-160v-48c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48l-55.1602 19.6699c-5.14941 2.58008 -8.09961 7.32031 -8.71973 12.3301c-0.700195 5.66016 1.58008 11.6699 7 15.29l88.8799 48.71v64\r\n-l-55.1602 17.6904c-11.79 5.89941 -11.79 22.7197 0 28.6191l119.16 49.6904v64l-27.3096 16.3096c-7.7207 7.7207 -5.61035 20.7402 4.15918 25.6201l183.15 86.0703l183.15 -86.0801c9.76953 -4.87988 11.8799 -17.9004 4.15918 -25.6201l-27.3096 -16.2998v-64\r\n-l119.16 -49.6904c11.79 -5.89941 11.79 -22.7197 0 -28.6191l-55.1602 -17.6904v-64zM224 320v-64h192v64h-192zM160 96h320v64h-320v-64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"volume-mute\" unicode=\"&#xf6a9;\" \r\n-d=\"M215.03 376.95c15.0098 15.0098 40.9697 4.49023 40.9697 -16.9697v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM461.64 192l45.6406 -45.6396\r\n-c6.2998 -6.30078 6.2998 -16.5205 0 -22.8203l-22.8203 -22.8203c-6.2998 -6.2998 -16.5195 -6.2998 -22.8203 0l-45.6396 45.6406l-45.6299 -45.6299c-6.2998 -6.30078 -16.5205 -6.30078 -22.8203 0l-22.8193 22.8193c-6.30078 6.2998 -6.30078 16.5205 0 22.8203\r\n-l45.6299 45.6299l-45.6406 45.6396c-6.2998 6.30078 -6.2998 16.5205 0 22.8203l22.8203 22.8203c6.2998 6.2998 16.5195 6.2998 22.8203 0l45.6396 -45.6406l45.6396 45.6406c6.30078 6.2998 16.5205 6.2998 22.8203 0l22.8203 -22.8203\r\n-c6.2998 -6.2998 6.2998 -16.5195 0 -22.8203z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"yin-yang\" unicode=\"&#xf6ad;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM248 192c53.0195 0 96 42.9805 96 96s-42.9805 96 -96 96\r\n-c-106.04 0 -192 -85.96 -192 -192s85.96 -192 192 -192c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96zM248 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blender-phone\" unicode=\"&#xf6b6;\" horiz-adv-x=\"576\" \r\n-d=\"M392 384c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46\r\n-l-17.46 -64h-288v352h384l-17.46 -64h-166.54zM158.8 112.99c3.00977 -7.40039 0.200195 -15.8506 -6.68945 -20.0703l-39.4102 -24.1797c-12.5303 -7.68066 -31.7803 -6 -41.6504 4.7998c-94.0996 102.94 -94.6699 258.89 -2.09961 362.49\r\n-c11.1396 12.4697 29.5596 15.8398 43.8896 7.0498l39.2803 -24.0996c6.87988 -4.2207 9.7002 -12.6807 6.67969 -20.0703l-25.7803 -63.2598c-2.7793 -6.80078 -9.80957 -10.9902 -17.2393 -10.2607l-45.0303 4.41992c-17.6504 -47.9395 -17.2803 -100.779 0 -147.72\r\n-l45.0303 4.41992c7.43945 0.730469 14.46 -3.4502 17.2393 -10.2598zM480 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-352c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h288zM336 -32c17.6699 0 32 14.3301 32 32\r\n-s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book-dead\" unicode=\"&#xf6b7;\" horiz-adv-x=\"448\" \r\n-d=\"M272 312c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16\r\n-c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM240 392c-44.2002 0 -80 -28.7002 -80 -64c0 -20.9004 12.7002 -39.2002 32 -50.9004v-13.0996\r\n-c0 -8.7998 7.2002 -16 16 -16h64c8.7998 0 16 7.2002 16 16v13.0996c19.2998 11.7002 32 30 32 50.9004c0 35.2998 -35.7998 64 -80 64zM124.8 224.7c-1.7002 -4.10059 0.100586 -8.7998 4.2002 -10.5l70.5 -30.2998l-70.4004 -30.1006\r\n-c-4.09961 -1.7002 -5.89941 -6.39941 -4.19922 -10.5l6.2998 -14.7002c1.7002 -4.09961 6.39941 -5.89941 10.5 -4.19922l98.2998 42.1992l98.2998 -42.0996c4.10059 -1.7002 8.7998 0.0996094 10.5 4.2002l6.2998 14.7002c1.7002 4.09961 -0.0996094 8.7998 -4.19922 10.5\r\n-l-70.3008 30.0996l70.3008 30.2002c4.09961 1.7002 5.89941 6.39941 4.19922 10.5l-6.2998 14.7002c-1.7002 4.09961 -6.39941 5.89941 -10.5 4.19922l-98.3994 -42.0996l-98.3008 42.0996c-4.09961 1.7002 -8.7998 -0.0996094 -10.5 -4.19922zM380.8 0v64h-284.8\r\n-c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8zM208 312c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"campground\" unicode=\"&#xf6bb;\" horiz-adv-x=\"640\" \r\n-d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h24.6797l239.79 330.25l-53.4102 73.5498c-5.19922 7.15039 -3.60938 17.1602 3.54004 22.3506l25.8809 18.7998\r\n-c7.14941 5.18945 17.1592 3.59961 22.3496 -3.5498l41.1699 -56.7002l41.1602 56.6895c5.2002 7.16016 15.2002 8.74023 22.3496 3.55078l25.9004 -18.79c7.14941 -5.19043 8.72949 -15.2002 3.54004 -22.3506l-53.4102 -73.5498l239.78 -330.25h24.6797zM320 160\r\n-l-116.36 -160h232.721z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cat\" unicode=\"&#xf6be;\" \r\n-d=\"M290.59 256c11.8906 -58.3496 63.6006 -102.4 125.41 -102.4c11.1104 0 21.71 1.87012 32 4.54004v-206.14c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v144l-128 -96h32c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16\r\n-h-176c-35.2998 0 -64 28.7002 -64 64v256c0 17.6396 -14.3604 32 -32 32c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32c52.9404 0 96 -43.0596 96 -96v-85.9502c55.7695 83.9697 142.41 85.9502 162.59 85.9502zM448 352l64 64v-134.4c0 -53.0195 -42.9805 -96 -96 -96\r\n-s-96 42.9805 -96 96v134.4l64 -64h64zM376 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM456 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"chair\" unicode=\"&#xf6c0;\" horiz-adv-x=\"448\" \r\n-d=\"M112 320v-128h-48v128c0 70.7002 57.2998 128 128 128h64c70.7002 0 128 -57.2998 128 -128v-128h-48v128c0 29.5 -16.2002 55 -40 68.9004v-196.9h-48v208h-48v-208h-48v196.9c-23.7998 -13.9004 -40 -39.4004 -40 -68.9004zM446.3 106.1\r\n-c6.90039 -20.6992 -8.5 -42.0996 -30.2998 -42.0996v-112c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v112h-256v-112c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v112c-21.7998 0 -37.2002 21.4004 -30.4004 42.0996l10.7002 32\r\n-c4.40039 13.1006 16.6006 21.9004 30.4004 21.9004h362.5c13.7998 0 26 -8.7998 30.3994 -21.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-moon\" unicode=\"&#xf6c3;\" horiz-adv-x=\"576\" \r\n-d=\"M342.8 95.2998c40.9004 -3.5 73.2002 -37.3994 73.2002 -79.2998c0 -44.2002 -35.7998 -80 -80 -80h-240c-53 0 -96 43 -96 96c0 41.9004 27.0996 77.2002 64.5996 90.2998c-0.0996094 1.90039 -0.599609 3.7002 -0.599609 5.7002c0 53 43 96 96 96\r\n-c36.2002 0 67.4004 -20.2998 83.7002 -49.9004c11.5 11 27.0996 17.9004 44.2998 17.9004c35.2998 0 64 -28.7002 64 -64c0 -12 -3.5 -23.0996 -9.2002 -32.7002zM565.3 149.6c8.2002 1.60059 14 -8 8.7002 -14.5c-33.4004 -41.0996 -82.7002 -67 -137.1 -70.3994\r\n-c-11.1006 23.0996 -29.9004 41.7998 -53.5 52.5996c0.399414 3.5 0.599609 7.10059 0.599609 10.7002c0 52.9004 -43.0996 96 -96 96c-12.7002 0 -25 -2.5 -36.4004 -7.2002c-5.09961 5.2998 -10.7998 9.90039 -16.6992 14.2002c-1.10059 8.2002 -1.80078 16.5 -1.80078 25\r\n-c0 106.1 86 192 191.9 192c11.7002 0 23.4004 -1.09961 35.0996 -3.2002c8.2002 -1.59961 10.1006 -12.5996 2.80078 -16.7002c-47.1006 -26.7998 -76.1006 -76.5996 -76.1006 -130.8c0 -94 85.4004 -165.399 178.5 -147.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-sun\" unicode=\"&#xf6c4;\" horiz-adv-x=\"640\" \r\n-d=\"M575.2 122.3c37.5996 -13 64.7998 -48.2998 64.7998 -90.3994c0 -53 -43 -96 -96 -96h-272c-53 0 -96 43 -96 96c0 50.5996 39.2998 91.5996 88.9004 95.2998c-0.200195 2.89941 -0.900391 5.7002 -0.900391 8.7002c0 61.8994 50.2002 112 112 112\r\n-c45.4004 0 84.2998 -27.2002 101.9 -66c9.89941 6.19922 21.5 10 34.0996 10c35.2998 0 64 -28.7002 64 -64c0 -1.90039 -0.599609 -3.7002 -0.799805 -5.60059zM144.8 144.9c10.6006 -10.6006 22.9004 -18.6006 36 -24c-9.59961 -9.80078 -17.5 -21.1006 -23.5996 -33.5\r\n-l-76.1006 -25.3008c-11.8994 -3.89941 -23.1992 7.30078 -19.1992 19.2002l29.2998 87.7998l-82.7998 41.4004c-11.2002 5.59961 -11.2002 21.5 0 27.0996l82.7998 41.5l-29.2998 87.8008c-3.90039 11.7998 7.39941 23.0996 19.1992 19.1992l87.9004 -29.2998\r\n-l41.4004 82.7998c5.59961 11.2002 21.5996 11.2002 27.0996 0l41.5 -82.7998l87.7998 29.2998c11.9004 3.90039 23.2002 -7.2998 19.2002 -19.1992l-29.7998 -88.9004c-10.6006 -1.5 -20.9004 -3.7998 -30.7002 -7.5c-5.40039 11.7998 -12.5996 23 -22.2998 32.7002\r\n-c-43.7002 43.7002 -114.7 43.7002 -158.4 0c-43.7002 -43.6006 -43.7002 -114.601 0 -158.3zM140 224.1c0 46.3008 37.7002 83.9004 84 83.9004c34 0 63.2998 -20.4004 76.5 -49.5c-36.4004 -22.5 -62 -60.7002 -67.4004 -105\r\n-c-8.89941 -2.90039 -17.1992 -7 -25.1992 -11.7002c-38.6006 7.5 -67.9004 41.5 -67.9004 82.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-d20\" unicode=\"&#xf6cf;\" horiz-adv-x=\"480\" \r\n-d=\"M106.75 232.94l108.64 -190.101l-208.26 22.0703c-5.83008 0.639648 -9.00977 7.13965 -5.92969 12.1396zM7.41016 132.57c-2.12012 -3.44043 -7.41016 -1.94043 -7.41016 2.08984v162.81c0 3.11035 3.38965 5.03027 6.05957 3.43066l76.6406 -45.9805zM18.25 24.4004\r\n-c-4.03027 1.97949 -2.25 8.06934 2.2002 7.56934l203.55 -22.2998v-65.6699c0 -5.83008 -6.0498 -9.70996 -11.3496 -7.25977zM99.4697 282.18l-81.5293 48.6904c-2.52051 1.51953 -2.60059 5.16016 -0.130859 6.78027l150.811 98.6094\r\n-c7.18945 4.11035 15.1201 -4.08008 10.7803 -11.1396zM240 272h-109.21l95.5801 168.38c3.12988 5.08008 8.37988 7.62012 13.6299 7.62012s10.5 -2.54004 13.6299 -7.62012l95.5801 -168.38h-109.21zM473.94 300.9c2.66992 1.59961 6.05957 -0.320312 6.05957 -3.43066\r\n-v-162.81c0 -4.04004 -5.2998 -5.54004 -7.41016 -2.10059l-75.29 122.351zM380.53 282.18l-79.9307 142.94c-4.33984 7.05957 3.59082 15.25 10.7803 11.1396l150.811 -98.5996c2.46973 -1.62012 2.39941 -5.25977 -0.130859 -6.78027zM459.55 31.9697\r\n-c4.4502 0.5 6.23047 -5.58984 2.2002 -7.55957l-194.4 -87.6602c-5.2998 -2.4502 -11.3496 1.41992 -11.3496 7.25977v65.6699zM373.25 232.94l105.56 -155.891c3.08008 -5 -0.0996094 -11.4902 -5.92969 -12.1396l-208.26 -22.0703zM240 240h100.43l-100.43 -175.75\r\n-l-100.43 175.75h100.43z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dice-d6\" unicode=\"&#xf6d1;\" horiz-adv-x=\"448\" \r\n-d=\"M422.19 338.05c5.3291 -3.24023 5.2998 -11.2695 -0.0507812 -14.46l-198.14 -118.14l-198.13 118.14c-5.35059 3.19043 -5.37988 11.2305 -0.0605469 14.46l165.971 100.88c19.9102 12.1006 44.5195 12.1006 64.4297 0zM436.03 293.42\r\n-c5.33008 3.17969 11.9697 -0.839844 11.9697 -7.25v-197.7c0 -23.7598 -12.1104 -45.7393 -31.79 -57.7002l-152.16 -92.4795c-10.6602 -6.48047 -24.0498 1.5498 -24.0498 14.4297v223.82zM0 286.17c0 6.41016 6.63965 10.4297 11.9697 7.25l196.03 -116.88v-223.81\r\n-c0 -12.8906 -13.3799 -20.9102 -24.0498 -14.4307l-152.16 92.4697c-19.6797 11.9609 -31.79 33.9307 -31.79 57.7002v197.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dog\" unicode=\"&#xf6d3;\" \r\n-d=\"M496 352c8.83984 0 16 -7.16016 16 -16v-32c0 -35.3496 -28.6504 -64 -64 -64h-32v-35.5801l-128 45.71v149.84c0 14.25 17.2305 21.3906 27.3203 11.3105l27.2793 -27.2803h53.6201c10.917 -0.000976562 23.7383 -7.92578 28.6201 -17.6904l7.16016 -14.3096h64z\r\n-M384 304c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM96 224h170.05l149.95 -53.5498v-218.45c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v112h-160v-112c0 -8.83984 -7.16016 -16 -16 -16h-64\r\n-c-8.83984 0 -16 7.16016 -16 16v213.9c-37.1699 13.25 -64 48.4395 -64 90.0996c0 17.6699 14.3301 32 32 32s32 -14.3301 32 -32c0 -17.6396 14.3604 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dragon\" unicode=\"&#xf6d5;\" horiz-adv-x=\"640\" \r\n-d=\"M18.3203 192.22c-15.96 -2.2793 -24.8906 17.8105 -12.5107 28.1406l117.4 116.34c21.7705 18.5996 53.2402 20.4697 77.0596 4.58984l119.73 -87.5996v-42.2705c0 -28.9102 5.29004 -56.9795 14.7305 -83.3799h-222.7c-14.25 0 -21.3906 17.2295 -11.3105 27.3096\r\n-l91.2803 68.6904zM575.19 158.12c41.9092 -20.96 67.1592 -64.0801 64.6396 -111.36c-3.37988 -63.2002 -59.7002 -110.77 -122.99 -110.76h-499.08c-9.80957 0 -17.7598 8 -17.7598 17.7998c0 8.32031 5.78027 15.5303 13.9004 17.3301\r\n-c89.54 19.9004 238.51 54.1006 434.1 60.9102c-59.9697 39.9902 -96 107.3 -96 179.38v108.62l-59.5801 24.8496c-5.90039 2.9502 -5.90039 11.3604 0 14.3105l59.5801 24.8398l-61.6396 50.3496c-5.04004 5.04004 -1.4707 13.6104 5.65918 13.6104h237.45\r\n-c10.0703 0 19.5498 -4.7002 25.6006 -12.7598l74.5293 -99.3799c3.53223 -4.71094 6.39844 -13.3115 6.39844 -19.1992c0 -4.16992 -1.51367 -10.5811 -3.37793 -14.3115l-14.3105 -28.6191c-4.88086 -9.76465 -17.7031 -17.6895 -28.6191 -17.6904h-30.9707\r\n-c-8.48926 0 -16.6299 3.37012 -22.6299 9.37012l-28.0898 22.6299h-64v-36.6904c0.00195312 -16.3701 11.8877 -35.5986 26.5303 -42.9199zM489.18 381.75c-4.33008 -17.1396 8.56055 -28.96 21.5205 -29.6699c11.6602 -0.629883 21.3799 7.34961 24.1299 18.2598z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"drumstick-bite\" unicode=\"&#xf6d7;\" \r\n-d=\"M462.8 398.43c34.3203 -34.2793 50.4307 -79.5996 49.1299 -124.56c-41.9795 22.6602 -94.3594 17.5596 -128.739 -16.7998c-40.8809 -40.8398 -40.6904 -107.181 -1.05078 -151.07c-16.2383 -5.52246 -43.3389 -10.0049 -60.4912 -10.0049\r\n-c-0.385742 0 -1.0127 0.00195312 -1.39844 0.00488281h-85.8896l-40.6104 -40.5596c-9.71973 -9.75 -11.0898 -24.0205 -6 -36.75c2.38477 -5.95898 4.32031 -16.0049 4.32031 -22.4229c0 -33.3135 -27.0371 -60.3496 -60.3506 -60.3496\r\n-c-13.8428 0 -33.0039 7.96191 -42.7695 17.7725c-15.2803 15.2695 -19.6006 36.5 -15.1006 56.0996c-19.6094 -4.49023 -40.8496 -0.179688 -56.1191 15.0703c-9.77148 9.75684 -17.7021 28.8828 -17.7021 42.6914c0 33.3018 27.0273 60.3301 60.3301 60.3301\r\n-c6.40234 0 16.4248 -1.92773 22.3721 -4.30176c12.7793 -5.07031 27.0791 -3.69043 36.7793 6l40.6201 40.5898v85.8301c0 64 27.6904 107 63.1699 142.43c27.3887 27.3604 81.0371 49.5664 119.75 49.5664c38.7139 0 92.3613 -22.2061 119.75 -49.5664z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dungeon\" unicode=\"&#xf6d9;\" \r\n-d=\"M128.73 252.68c6.58984 -4.12012 8.89941 -12.2393 6.33984 -19.5801c-3 -8.60938 -5.15039 -17.6094 -6.24023 -26.9395c-0.929688 -7.91016 -7.0498 -14.1602 -15.0098 -14.1602h-97.1299c-9.10059 0 -16.7402 7.62988 -16.1504 16.7197\r\n-c1.66016 25.7793 11.7178 65.7725 22.4502 89.2705c3.93945 8.62012 14.8896 11.4697 22.9297 6.4502zM319.03 440c9.16992 -2.36035 13.9102 -12.5996 10.3896 -21.3896l-37.4697 -104.03c-2.28027 -6.34961 -8.2998 -10.5801 -15.0498 -10.5801h-41.8008\r\n-c-6.2041 0.00195312 -12.9473 4.74219 -15.0498 10.5801l-37.4697 104.03c-3.52051 8.79004 1.21973 19.04 10.3896 21.3896c20.1699 5.17969 41.2607 8 63.0303 8s42.8604 -2.82031 63.0303 -8zM112 160c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16\r\n-h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM112 32c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM189.31 315.67\r\n-c2.85059 -7.12012 -0.0195312 -14.8799 -6.2998 -19.29c-6 -4.2002 -11.6094 -8.89941 -16.79 -14.0498c-5.4502 -5.41016 -13.5996 -6.86035 -20.1094 -2.79004l-82.9307 51.8301c-8.06934 5.04004 -10.2793 16.2002 -4.21973 23.5195\r\n-c16.7148 20.1758 48.7969 47.0068 71.6104 59.8906c8.29004 4.67969 18.8896 0.519531 22.4199 -8.31055zM398.18 192c-7.95996 0 -14.0801 6.25 -15.0098 14.1602c-1.08984 9.32031 -3.22949 18.3301 -6.24023 26.9395c-2.55957 7.34082 -0.25 15.46 6.33984 19.5801\r\n-l82.8105 51.7607c8.04004 5.01953 18.9902 2.16992 22.9297 -6.4502c10.7334 -23.498 20.791 -63.4902 22.4502 -89.2705c0.589844 -9.08984 -7.0498 -16.7197 -16.1504 -16.7197h-97.1299zM453.03 354.89c6.06934 -7.31934 3.84961 -18.4795 -4.2207 -23.5098\r\n-l-82.9297 -51.8301c-6.50977 -4.06934 -14.6699 -2.62012 -20.1104 2.79004c-5.17969 5.15039 -10.7891 9.85059 -16.7891 14.0498c-6.28027 4.40039 -9.15039 12.1602 -6.30078 19.2803l36.3203 90.7998c3.54004 8.83008 14.1396 12.9902 22.4199 8.31055\r\n-c22.8135 -12.8838 54.8945 -39.7148 71.6104 -59.8906zM496 160c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM496 32c8.83984 0 16 -7.16016 16 -16v-64\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM240 270.38c5.23047 0.889648 10.5195 1.62012 16 1.62012s10.7695 -0.730469 16 -1.62012v-294.38c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8\r\n-v294.38zM176 228.87c8.16016 12.2998 19.2197 22.3203 32 29.7695v-282.64c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v252.87zM304 258.64c12.7803 -7.44922 23.8398 -17.4697 32 -29.7695v-252.87c0 -4.41992 -3.58008 -8 -8 -8h-16\r\n-c-4.41992 0 -8 3.58008 -8 8v282.64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"file-csv\" unicode=\"&#xf6dd;\" horiz-adv-x=\"384\" \r\n-d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM128 168v16c0 4.41992 -3.58008 8 -8 8h-8c-26.5098 0 -48 -21.4902 -48 -48v-32\r\n-c0 -26.5098 21.4902 -48 48 -48h8c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-8c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h8c4.41992 0 8 3.58008 8 8zM172.27 64c23.3906 0 42.4004 17.3301 42.3906 38.6201\r\n-c0 10.6602 -4.86035 20.9199 -13.3301 28.1396l-21.8896 18.7705c-1.37012 1.17969 -2.12012 2.54004 -2.12012 3.83984c0 3.12012 4.45996 6.62012 10.4102 6.62012h12.2695c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-12.25\r\n-c-23.3896 0 -42.4102 -17.3203 -42.4102 -38.6201c0 -10.6602 4.86035 -20.9199 13.3301 -28.1396l21.8896 -18.7705c1.37012 -1.17969 2.12012 -2.54004 2.12012 -3.83984c0 -3.12012 -4.45996 -6.62012 -10.4102 -6.62012h-12.2695c-4.41992 0 -8 -3.58008 -8 -8v-16\r\n-c0 -4.41992 3.58008 -8 8 -8h12.2695zM256 184c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-20.7998c0 -35.4805 12.8799 -68.8906 36.2803 -94.0898c3.01953 -3.25 7.26953 -5.11035 11.7197 -5.11035s8.7002 1.86035 11.7197 5.11035\r\n-c23.4004 25.1992 36.2803 58.6094 36.2803 94.0898v20.7998c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-20.7998c0 -20.2705 -5.7002 -40.1807 -16 -56.8799c-10.2998 16.71 -16 36.6094 -16 56.8799v20.7998zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004\r\n-v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fist-raised\" unicode=\"&#xf6de;\" horiz-adv-x=\"384\" \r\n-d=\"M255.98 288h-48.0303c-5.62988 0 -10.9502 -1.15039 -15.9697 -2.92969v146.93c0 8.83984 7.15918 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-144zM383.98 192.01l0.0195312 -88.2197v-0.0107422c0 -21.9551 -12.5977 -52.373 -28.1201 -67.8994l-35.9102 -35.9199\r\n-v-63.96h-255.979v64l-26.5 26.5098c-24.0098 24.0098 -37.4902 56.5605 -37.4902 90.5098v77.9307c5.03027 -1.7998 10.3604 -2.9502 16 -2.9502h32c12.3301 0 23.4805 4.80957 32 12.4902c8.50977 -7.66992 19.6602 -12.4805 32 -12.4805h32\r\n-c7.91016 0 15.2803 2.11035 21.8701 5.52051c7.46973 -16.3301 21.5996 -28.9404 38.8701 -34.4502c-17.1104 -14.8203 -31.5801 -34.4805 -47.3105 -58.0801l-6.30957 -9.46973c-0.742188 -1.1123 -1.34375 -3.09961 -1.34375 -4.43652\r\n-c0 -2.36328 1.59668 -5.34375 3.56348 -6.65332l13.3105 -8.88086c1.11133 -0.741211 3.09863 -1.34375 4.43555 -1.34375c2.36328 0 5.34473 1.59668 6.6543 3.56445l6.30957 9.46973c31.8906 47.8398 51.5303 70.2695 96.0498 72.5498\r\n-c4.29004 0.219727 7.88086 3.70996 7.88086 8v16.2002c0 4.41992 -3.52051 8 -13.2002 8h-35.2607c-26.2695 0 -47.5693 21.3203 -47.5693 47.5898v0.560547c0 8.7793 7.12012 15.8496 15.8994 15.8496h112.141c35.3301 0 63.9795 -28.6504 63.9902 -63.9902zM351.97 282.1\r\n-c-10.0596 3.59082 -20.7197 5.90039 -32 5.90039h-32v112c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-117.9zM16 224c-8.83984 0 -16 7.16016 -16 16v128c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-128\r\n-c0 -8.83984 -7.16016 -16 -16 -16h-32zM111.99 224c-8.83984 0 -16 7.16016 -16 16v160c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-160c0 -8.83984 -7.16016 -16 -16 -16h-32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ghost\" unicode=\"&#xf6e2;\" horiz-adv-x=\"384\" \r\n-d=\"M186.1 447.91c108.73 3.25977 197.9 -83.9102 197.9 -191.91v-271.97c0 -14.25 -17.2305 -21.3906 -27.3096 -11.3105l-24.9209 18.5303c-6.65918 4.95996 -16 3.99023 -21.5098 -2.20996l-42.9502 -48.3496c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-40.7197 45.8496\r\n-c-6.36035 7.16992 -17.5498 7.16992 -23.9199 0l-40.7197 -45.8496c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-42.9502 48.3496c-5.50977 6.2002 -14.8506 7.16016 -21.5098 2.20996l-24.9209 -18.5303c-10.0791 -10.0801 -27.3096 -2.9502 -27.3096 11.3105v263.92\r\n-c0 105.13 81.0098 196.81 186.1 199.96zM128 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM256 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hammer\" unicode=\"&#xf6e3;\" horiz-adv-x=\"576\" \r\n-d=\"M571.31 254.06c6.25 -6.25 6.25 -16.3799 0.0205078 -22.6191l-90.5098 -90.5107c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6309 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309l11.3105 11.3096l-28.9004 28.9004\r\n-c-21.3096 -5.63086 -44.8994 -0.360352 -61.6094 16.3496l-49.1406 49.1396c-12.0098 12 -18.75 28.2803 -18.75 45.25v18.75l-90.5098 45.25c62.4902 62.4805 163.8 62.4805 226.28 0l45.25 -45.25c16.71 -16.71 21.9795 -40.2998 16.3496 -61.6094l28.9004 -28.9004\r\n-l11.3096 11.3105c6.25 6.25 16.3799 6.25 22.6299 0zM284.59 269.26l49.1406 -49.1396c3.53906 -3.54004 7.47949 -6.5 11.4395 -9.41016l-238.13 -255.07c-23.8799 -25.5801 -64.2002 -26.2695 -88.9297 -1.5293c-24.7305 24.7393 -24.04 65.0498 1.5293 88.9297\r\n-l255.101 238.17c3.00977 -4.16016 6.14941 -8.25 9.84961 -11.9502z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hanukiah\" unicode=\"&#xf6e6;\" horiz-adv-x=\"640\" \r\n-d=\"M232 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM168 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM392 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM456 288h16\r\n-c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM544 280v-120h-32v120c0 4.41992 3.58008 8 8 8h16c4.41992 0 8 -3.58008 8 -8zM104 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM624 288c8.83984 0 16 -7.16016 16 -16\r\n-v-112c0 -53.0195 -42.9805 -96 -96 -96h-192v-64h176c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v64h-192c-53.0195 0 -96 42.9805 -96 96v112c0 8.83984 7.16016 16 16 16\r\n-h32c8.83984 0 16 -7.16016 16 -16v-112c0 -17.6699 14.3301 -32 32 -32h192v192c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-192h192c17.6699 0 32 14.3301 32 32v112c0 8.83984 7.16016 16 16 16h32zM608 320c-13.25 0 -24 11.9502 -24 26.6699\r\n-s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM32 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM320 368\r\n-c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM112 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699z\r\n-M176 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM240 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301\r\n-c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM400 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM464 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301\r\n-s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM528 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hat-wizard\" unicode=\"&#xf6e8;\" \r\n-d=\"M496 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480zM192 64l16 -32h-144l110.96 249.66c9.4043 21.1611 33.3545 47.6611 53.46 59.1494l187.58 107.19l-56.2998 -168.92\r\n-c-1.81543 -5.43945 -3.28809 -14.5078 -3.28809 -20.2412c0 -7.25098 2.31934 -18.5449 5.17773 -25.209l86.4102 -201.63h-208l16 32l64 32l-64 32l-32 64l-32 -64l-64 -32zM256 288l-32 -16l32 -16l16 -32l16 32l32 16l-32 16l-16 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hiking\" unicode=\"&#xf6ec;\" horiz-adv-x=\"384\" \r\n-d=\"M80.9502 -24.2305l34.5596 138.221l52.7803 -52.7803l-25.2402 -100.97c-3.64941 -14.5303 -16.6895 -24.2305 -31.0195 -24.2305c-2.58008 0 -5.19043 0.290039 -7.7998 0.950195c-17.1406 4.28027 -27.5605 21.6504 -23.2803 38.8096zM95.8398 171.89\r\n-c-2.18945 -8.41992 -11.0801 -13.54 -19.8701 -11.4395l-63.5596 15.25c-8.78027 2.10938 -14.1104 10.6396 -11.9199 19.0596l25.2695 98.1299c10.9707 42.1006 55.4404 67.6904 99.3203 57.1699c8.78027 -2.10938 14.1104 -10.6396 11.9199 -19.0596zM368 288\r\n-c8.83984 0 16 -7.16016 15.9902 -16v-320.01c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.48047 0 -16.6201 3.37988 -22.6201 9.37988l-22.4297 22.4297l-19.8906 -79.5693\r\n-c-0.129883 -0.520508 -0.469727 -0.910156 -0.620117 -1.41016l46.8203 -46.8203c12.0898 -12.0898 18.75 -28.1602 18.75 -45.25v-82.75c0 -17.6699 -14.3301 -32 -32 -32s-32 14.3301 -32 32v82.75l-86.6201 86.6201c-5.17383 5.1748 -9.37402 15.3154 -9.37402 22.6338\r\n-c0 2.17285 0.427734 5.64746 0.954102 7.75586l26.9199 107.721c6.56055 26.2197 30.0098 44.5195 57.0303 44.5195c15.7002 0 30.4697 -6.11035 41.5596 -17.2197l46.7803 -46.7803h34.75v16c0 8.83984 7.16016 16 16 16h16zM240 352c-26.5098 0 -48 21.4902 -48 48\r\n-s21.4902 48 48 48s48 -21.4902 48 -48s-21.4902 -48 -48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hippo\" unicode=\"&#xf6ed;\" horiz-adv-x=\"640\" \r\n-d=\"M581.12 351.8c34.0898 -0.189453 58.8799 -33.6895 58.8799 -67.7803v-92.0195c0 -17.6699 -14.3301 -32 -32 -32v-32c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v32h-128v-176c0 -8.83984 -7.16016 -16 -16 -16h-64\r\n-c-8.83984 0 -16 7.16016 -16 16v70.79c-32.3496 -14.3604 -70.7197 -22.79 -112 -22.79s-79.6504 8.42969 -112 22.79v-70.79c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v240c0 88.3604 85.96 160 192 160\r\n-c49.2402 0 94.0098 -15.5801 128 -40.9805v48.9805c0 13.2598 10.75 24 24 24h16c13.25 0 24 -10.7402 24 -24v-13.8799c10.0498 3.58008 20.7197 5.87988 32 5.87988c39.8301 0 73.9805 -24.2695 88.5195 -58.8203c24.1006 9.04004 48.9307 26.7705 76.6006 26.6201z\r\n-M448 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"horse\" unicode=\"&#xf6f0;\" horiz-adv-x=\"576\" \r\n-d=\"M575.92 371.4l0.0605469 -77.71v-0.0292969c0 -11.9609 -9.01465 -25.2715 -20.1201 -29.7109l-32.5508 -13.0205c-15.4395 -6.17969 -33.04 0.5 -40.4893 15.3701l-18.9004 37.7002l-16 7.11035v-102.471c0.00976562 -0.219727 0.0800781 -0.419922 0.0800781 -0.639648\r\n-c0 -30.4697 -12.2598 -58.0303 -32 -78.2197v-177.78c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v150.4l-133.97 22.3301l-23.8398 -63.5908l26.3096 -105.26c2.53027 -10.0996 -5.11035 -19.8799 -15.5195 -19.8799h-65.9609h-0.000976562\r\n-c-6.89453 0 -13.8428 5.42969 -15.5088 12.1201l-24.8496 99.4102c-1.05664 4.2207 -1.91406 11.1777 -1.91406 15.5293c0 6.40332 1.8252 16.4648 4.07422 22.46l25.7197 68.6006c-18.7002 17.5195 -30.54 42.2402 -30.54 69.8799\r\n-c0 2.62988 0.570312 5.09961 0.780273 7.67969c-9.91016 -7.29004 -16.7803 -18.46 -16.7803 -31.6797v-56c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v56c0 48.5303 39.4697 88 88 88v-1.11035c17.5996 20.1299 43.1602 33.1104 72 33.1104\r\n-h159.92c0 70.6904 57.3105 128 128 128h119.98c5.05957 0 8.94922 -4.67969 7.92969 -9.63965c-2.67969 -13.1699 -11.1201 -23.8203 -22.1797 -30.6602c5.10938 -5.37988 9.90918 -10.4697 13.6895 -14.5c5.56055 -5.93066 8.57031 -13.6699 8.58008 -21.7998zM511.92 352\r\n-c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"house-damage\" unicode=\"&#xf6f1;\" horiz-adv-x=\"576\" \r\n-d=\"M288 333.04l218.74 -192.94c1.54004 -1.37988 3.55957 -2.04004 5.25977 -3.19922v-184.9c0 -8.83984 -7.16016 -16 -16 -16h-176.19l-39.9199 55.25l104.11 64l-148.05 136.78l60.1602 -119.221l-104.11 -64l37.2305 -72.8096h-149.23c-8.83984 0 -16 7.16016 -16 16\r\n-v184.94c1.78027 1.20996 3.84961 1.88965 5.46973 3.34961zM570.69 211.72c6.5791 -5.89941 7.11914 -16.0195 1.21973 -22.5898l-21.4004 -23.8203c-5.91016 -6.56934 -16.0293 -7.10938 -22.5996 -1.20996l-229.32 202.271c-6.0498 5.33008 -15.1201 5.33008 -21.1699 0\r\n-l-229.32 -202.28c-6.58008 -5.91016 -16.6992 -5.35938 -22.5996 1.20996l-21.4004 23.8203c-5.90918 6.58008 -5.35938 16.6895 1.20996 22.5996l255.99 226.011c7.60059 6.85938 17.1406 10.2793 26.7002 10.2695s19.1201 -3.4502 26.75 -10.3096l101.25 -89.3809v51.6904\r\n-c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16v-136.45z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hryvnia\" unicode=\"&#xf6f2;\" horiz-adv-x=\"384\" \r\n-d=\"M368 208h-99.7002l-34.6699 -32h134.37c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-203.7l-29.4902 -27.2197c-4.3291 -4 -6.80957 -9.66992 -6.80957 -15.5801c0 -11.6807 9.50977 -21.2002 21.2002 -21.2002h83.6299h0.00195312\r\n-c4.79395 0 11.6748 2.49121 15.3584 5.55957l11.75 9.80078c10.1895 8.48926 25.3193 7.12012 33.8096 -3.07031l20.4902 -24.5898c8.49023 -10.1807 7.10938 -25.3105 -3.07031 -33.7998l-11.7695 -9.81055c-18.6807 -15.5596 -42.2207 -24.0898 -66.54 -24.0898h-78.8203\r\n-c-37.1396 0 -73.3799 17.8496 -92.0498 49.9502c-17.8701 30.7197 -17.54 65.4199 -4.12988 94.0498h-41.8604c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h99.7002l34.6699 32h-134.37c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16\r\n-h203.7l29.4902 27.21c4.3291 4 6.80957 9.66992 6.80957 15.5801c0 11.6797 -9.50977 21.2002 -21.2002 21.2002h-83.6201c-5.62012 0 -11.0693 -1.9707 -15.3896 -5.57031l-11.7305 -9.78027c-10.1895 -8.48926 -25.3193 -7.12012 -33.8096 3.07031l-20.4902 24.5898\r\n-c-8.49023 10.1807 -7.10938 25.3105 3.07031 33.7998l11.7695 9.81055c18.6807 15.5596 42.2207 24.0898 66.54 24.0898h78.8203c37.1396 0 73.3799 -17.8398 92.0498 -49.9502c17.8701 -30.7197 17.54 -65.4199 4.12988 -94.0498h41.8604c8.83984 0 16 -7.16016 16 -16v-32\r\n-c0 -8.83984 -7.16016 -16 -16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mask\" unicode=\"&#xf6fa;\" horiz-adv-x=\"640\" \r\n-d=\"M320.67 384c449.09 0 348.32 -384 158.46 -384c-39.8994 0 -77.4697 20.6904 -101.41 55.8604l-25.7295 37.79c-15.6602 22.9893 -46.9707 22.9893 -62.6299 0l-25.7305 -37.79c-23.9502 -35.1699 -61.5195 -55.8604 -101.42 -55.8604c-199.11 0 -284.14 384 158.46 384z\r\n-M184 139.64c41.0596 0 67.7598 25.6504 80.0801 41.0508c5.22949 6.54004 5.22949 16.0996 0 22.6299c-12.3203 15.3896 -39.0098 41.0498 -80.0801 41.0498s-67.7598 -25.6504 -80.0801 -41.0498c-5.22949 -6.54004 -5.22949 -16.1006 0 -22.6299\r\n-c12.3203 -15.3906 39.0205 -41.0508 80.0801 -41.0508zM456 139.64c41.0596 0 67.7598 25.6504 80.0801 41.0508c5.22949 6.54004 5.22949 16.0996 0 22.6299c-12.3203 15.3896 -39.0098 41.0498 -80.0801 41.0498s-67.7598 -25.6504 -80.0801 -41.0498\r\n-c-5.22949 -6.54004 -5.22949 -16.1006 0 -22.6299c12.3203 -15.3906 39.0205 -41.0508 80.0801 -41.0508z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mountain\" unicode=\"&#xf6fc;\" horiz-adv-x=\"640\" \r\n-d=\"M634.92 -14.7002c2.80566 -4.3623 5.08301 -12.1133 5.08301 -17.3008c0 -4.50586 -1.75293 -11.374 -3.91309 -15.3291c-5.60938 -10.2803 -16.3799 -16.6699 -28.0898 -16.6699h-576h-0.00390625c-10.4795 0 -23.0615 7.46387 -28.0859 16.6602\r\n-c-2.16016 3.95605 -3.91309 10.8262 -3.91309 15.334c0 5.18848 2.27734 12.9414 5.08301 17.3057l288 448c5.88965 9.16016 16.0303 14.7002 26.9199 14.7002s21.0303 -5.54004 26.9199 -14.7002zM320 356.82l-102.06 -158.761l38.0596 -38.0596l64 64h85.3896z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"network-wired\" unicode=\"&#xf6ff;\" horiz-adv-x=\"640\" \r\n-d=\"M640 184c0 -8.83984 -7.16016 -16 -16 -16h-104v-40h56c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h56v40h-304v-40h56c17.6699 0 32 -14.3301 32 -32v-128\r\n-c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h56v40h-104c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h280v40h-72c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h192\r\n-c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-72v-40h280c8.83984 0 16 -7.16016 16 -16v-16zM256 320h128v64h-128v-64zM192 0v64h-96v-64h96zM544 0v64h-96v-64h96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"otter\" unicode=\"&#xf700;\" horiz-adv-x=\"640\" \r\n-d=\"M608 416c17.6699 0 32 -14.3301 32 -32v-32c0 -53.0195 -42.9805 -96 -96 -96h-22.8604l-92.4697 -49.79l55.1104 -110.21h28.2197c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16h-80l-74.5098 144.5l-149.49 -80.5h64\r\n-c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83008 0 -16 -7.16992 -16 -16s7.16992 -16 16 -16h112c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32h-108.47c-39.3799 0 -75.5205 26.9004 -82.2803 65.7002\r\n-c-4.91016 28.1201 5 54.2197 23.1904 71.7998c23.5596 22.75 39.5596 52.1396 39.5596 84.8896v1.61035c0 106.04 85.96 192 192 192h56l153.25 87.5703c9.66992 5.51953 20.6104 8.42969 31.75 8.42969h20.4902h0.0126953c14.6328 0 34.9033 -8.40039 45.2471 -18.75\r\n-l13.25 -13.25h32zM512 400c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16s16 7.16016 16 16s-7.16016 16 -16 16zM544 304c20.8301 0 38.4297 13.4199 45.0498 32h-77.0498l-118.57 -59.29l13.7705 -27.5498l101.84 54.8398h34.96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ring\" unicode=\"&#xf70b;\" \r\n-d=\"M256 384c145.94 0 256 -61.9102 256 -144v-98.1299c0 -78.3506 -114.62 -141.87 -256 -141.87s-256 63.5195 -256 141.87v98.1299c0 82.0898 110.06 144 256 144zM256 320c-106.04 0 -192 -35.8203 -192 -80c0 -9.25977 3.96973 -18.1201 10.9102 -26.3896\r\n-c44.9395 26.1797 108.859 42.3896 181.09 42.3896s136.15 -16.21 181.09 -42.3896c6.94043 8.26953 10.9102 17.1299 10.9102 26.3896c0 44.1797 -85.96 80 -192 80zM120.43 183.36c34.7305 -14.4307 82.6406 -23.3604 135.57 -23.3604s100.84 8.92969 135.57 23.3604\r\n-c-34.6104 14.71 -81.21 24.6396 -135.57 24.6396s-100.96 -9.92969 -135.57 -24.6396z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"running\" unicode=\"&#xf70c;\" horiz-adv-x=\"416\" \r\n-d=\"M272 352c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48s-21.4902 -48 -48 -48zM113.69 130.53c7.92969 -17.2402 20.6699 -32.3799 37.9893 -42.6104l10.6699 -6.2998l-8.79004 -20.5205c-7.5293 -17.6494 -24.8594 -29.0898 -44.1094 -29.0898\r\n-h-77.4502c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32h66.8896zM384 224.01c17.6699 0 32 -14.3193 32 -31.9902c0 -17.6699 -14.3301 -32 -32 -32h-53.9902c-18.1895 0 -35.1094 10.5508 -43.1094 26.8906l-20.2705 41.4297l-31.3096 -78.2803l61.2393 -36.1396\r\n-c18.75 -11.3096 27.5508 -33.6201 21.6406 -54.3896l-31.6406 -101.061c-4.29004 -13.6797 -16.9092 -22.4502 -30.5195 -22.4502c-3.16992 0 -6.38965 0.480469 -9.58008 1.48047c-16.8604 5.28027 -26.25 23.2305 -20.9697 40.0898l27.4697 87.7305l-84.9795 50.1699\r\n-c-27.6104 16.2998 -38.9209 50.8301 -26.3008 80.3096l37.46 87.3906l-14.6992 4.36914c-7.83008 1.86035 -17.6006 -0.25 -25.2705 -6.13965l-39.6895 -30.4102c-14.0205 -10.7402 -34.0908 -8.10938 -44.8604 5.91992c-10.7705 14.0303 -8.11035 34.1104 5.91992 44.8604\r\n-l39.6699 30.4102c23.0703 17.6895 52.54 23.9395 80.8398 17.1396l71.0801 -21.1396c26.3301 -6.70996 49.2803 -25.3906 61.7803 -50.9404l26.0596 -53.25h44.0303z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"scroll\" unicode=\"&#xf70e;\" horiz-adv-x=\"640\" \r\n-d=\"M48 448c26.4697 0 48 -21.5303 48 -48v-80h-80c-8.83984 0 -16 7.16016 -16 16v64c0 26.4697 21.5303 48 48 48zM256 35.4297c0 -31.8896 -21.7803 -61.4297 -53.25 -66.5498c-40.0996 -6.53027 -74.75 24.25 -74.75 63.1201v368c0 18.0801 -6.25977 34.5898 -16.4102 48\r\n-h336.41c52.9404 0 96 -43.0596 96 -96v-256h-288v-60.5703zM288 64h336c8.83984 0 16 -7.16016 16 -16c0 -61.8604 -50.1396 -112 -112 -112h-336c52.9404 0 96 43.0703 96 96v32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skull-crossbones\" unicode=\"&#xf714;\" horiz-adv-x=\"448\" \r\n-d=\"M439.15 -5.05957c7.89941 -3.9502 11.1094 -13.5605 7.15918 -21.4707l-14.3096 -28.6299c-3.95996 -7.89941 -13.5703 -11.0996 -21.4697 -7.14941l-186.53 90.7197l-186.52 -90.7197c-7.91016 -3.95996 -17.5205 -0.75 -21.4707 7.14941l-14.3096 28.6299\r\n-c-3.95996 7.91016 -0.75 17.5205 7.14941 21.4707l141.98 69.0596l-141.99 69.0596c-7.89941 3.9502 -11.0996 13.5605 -7.14941 21.46l14.3096 28.6309c3.95996 7.90918 13.5703 11.1094 21.4697 7.15918l186.53 -90.7197l186.53 90.7197\r\n-c7.91016 3.9502 17.5195 0.740234 21.4697 -7.15918l14.3096 -28.6309c3.95996 -7.89941 0.75 -17.5098 -7.14941 -21.46l-141.99 -69.0596zM150 210.72c-41.7803 22.4102 -70 62.75 -70 109.28c0 70.6904 64.4697 128 144 128s144 -57.3096 144 -128\r\n-c0 -46.5303 -28.2197 -86.8701 -70 -109.28l5.5 -25.8701c2.66992 -12.6191 -5.41992 -24.8496 -16.4502 -24.8496h-126.08c-11.0293 0 -19.1201 12.2305 -16.4502 24.8496zM280 336c-17.6504 0 -32 -14.3496 -32 -32s14.3496 -32 32 -32s32 14.3496 32 32\r\n-s-14.3496 32 -32 32zM168 336c-17.6504 0 -32 -14.3496 -32 -32s14.3496 -32 32 -32s32 14.3496 32 32s-14.3496 32 -32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"slash\" unicode=\"&#xf715;\" horiz-adv-x=\"640\" \r\n-d=\"M594.53 -60.6299l-588.351 454.729c-6.96973 5.41992 -8.22949 15.4707 -2.80957 22.4502l19.6396 25.2705c5.41992 6.97949 15.4805 8.23926 22.46 2.80957l588.351 -454.729c6.96973 -5.41992 8.22949 -15.4707 2.80957 -22.4502l-19.6396 -25.2705\r\n-c-5.41992 -6.97949 -15.4805 -8.22949 -22.46 -2.80957z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spider\" unicode=\"&#xf717;\" horiz-adv-x=\"576\" \r\n-d=\"M151.17 280.65l-27.1504 54.2998c-1.86035 3.72949 -3.37109 10.1387 -3.37109 14.3066c0 2.86719 0.735352 7.40234 1.6416 10.123l25.8896 77.6797c2.79004 8.39062 11.8604 12.9209 20.2402 10.1201l15.1699 -5.05957\r\n-c8.39062 -2.7998 12.9102 -11.8604 10.1201 -20.2402l-23.7998 -71.3896l20.29 -40.5801c-1.41016 -4.20996 -2.49023 -8.20996 -3.20996 -11.79l-5.2207 -26.1201h-4.66992zM573.31 98.6201c4.90039 -7.35059 2.9209 -17.2803 -4.43945 -22.1797l-13.3105 -8.88086\r\n-c-7.34961 -4.89941 -17.29 -2.90918 -22.1895 4.44043l-48 72h-47.0605l60.8301 -97.3301c3.16992 -5.08008 4.86035 -10.96 4.86035 -16.96v-77.71c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v73.1104l-74.0801 118.529\r\n-c1 -14.0498 2.08008 -28.1094 2.08008 -42.21c0 -53.0693 -40.7598 -101.43 -96 -101.43s-96 48.3604 -96 101.43c0 14.1006 1.07031 28.1602 2.08008 42.21l-74.0801 -118.529v-73.1104c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v77.7002\r\n-v0.00976562c0 5.0625 2.17773 12.6562 4.86035 16.9502l60.8301 97.3301h-47.0605l-48 -72c-4.89941 -7.35059 -14.8398 -9.33984 -22.1895 -4.44043l-13.3105 8.87988c-7.36035 4.90039 -9.33984 14.8398 -4.43945 22.1904l52.7393 79.1299\r\n-c5.24707 7.86426 17.1768 14.248 26.6299 14.25h77.9404l-68.9902 24.3496c-5.75 1.91895 -13.1465 7.56738 -16.5098 12.6104l-53.5996 80.4102c-4.90039 7.36035 -2.91016 17.29 4.43945 22.1895l13.3105 8.88086c7.35938 4.89941 17.29 2.90918 22.1895 -4.44043\r\n-l50.5703 -75.8301l60.4902 -20.1699h36.0996l10.3701 51.8496c2.18945 10.9707 17.3701 60.1504 69.6299 60.1504s67.4404 -49.1797 69.6299 -60.1504l10.3701 -51.8496h36.0996l60.5 20.1699l50.5605 75.8301c4.89941 7.34961 14.8398 9.33984 22.1895 4.44043\r\n-l13.3105 -8.88086c7.34961 -4.89941 9.33984 -14.8398 4.43945 -22.1895l-53.5996 -80.4102c-3.36328 -5.04297 -10.7598 -10.6914 -16.5098 -12.6104l-68.9902 -24.3594h77.9404c9.45117 -0.00195312 21.377 -6.38672 26.6191 -14.25zM406.09 350.49l-23.7998 71.3896\r\n-c-2.79004 8.37988 1.74023 17.4404 10.1201 20.2402l15.1699 5.05957c8.37988 2.80078 17.4502 -1.73926 20.2402 -10.1201l25.8896 -77.6797c0.908203 -2.72168 1.64551 -7.25781 1.64551 -10.127c0 -4.16699 -1.5127 -10.5752 -3.375 -14.3027l-27.1504 -54.2998\r\n-l-25.9297 -8.65039h-4.66992l-5.2207 26.1201c-0.719727 3.58008 -1.7998 7.58008 -3.20996 11.79z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"toilet-paper\" unicode=\"&#xf71e;\" horiz-adv-x=\"576\" \r\n-d=\"M128 448h284.44c-36.7705 -38.4805 -60.4404 -108.4 -60.4404 -192v-172.07c0 -53.6494 -11.8799 -87.5693 -24.71 -126.05c-4.36035 -13.0703 -16.5898 -21.8799 -30.3604 -21.8799h-280.92c-10.9199 0 -18.6299 10.7002 -15.1797 21.0596\r\n-c21.3701 64.1006 31.1699 85.75 31.1699 126.87v172.07c0 106.04 42.9805 192 96 192zM96 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM160 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16\r\n-s7.16016 -16 16 -16zM224 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM288 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM480 448c53.0195 0 96 -85.96 96 -192\r\n-s-42.9805 -192 -96 -192s-96 85.96 -96 192s42.9805 192 96 192zM480 192c17.6699 0 32 28.6504 32 64s-14.3301 64 -32 64s-32 -28.6504 -32 -64s14.3301 -64 32 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tractor\" unicode=\"&#xf722;\" horiz-adv-x=\"640\" \r\n-d=\"M528 112c48.5996 0 88 -39.4004 88 -88s-39.4004 -88 -88 -88s-88 39.4004 -88 88s39.4004 88 88 88zM528 0c13.2305 0 24 10.7695 24 24s-10.7695 24 -24 24s-24 -10.7695 -24 -24s10.7695 -24 24 -24zM608 288c17.6699 0 32 -14.3301 31.9902 -32v-50.7598\r\n-c0 -8.49023 -3.37012 -16.6299 -9.37012 -22.6299l-50.8203 -50.8203c-15.7295 7.58984 -33.1602 12.2002 -51.7998 12.2002c-39.1396 0 -73.5498 -19.0098 -95.46 -48h-80.54v-6c0 -12.1504 -9.84961 -22 -22 -22h-7.16016\r\n-c-2.9502 -9.90039 -6.91992 -19.46 -11.9102 -28.7207l5.06055 -5.05957c8.58984 -8.58984 8.58984 -22.5195 0 -31.1104l-31.1104 -31.1094c-8.58984 -8.58984 -22.5195 -8.58984 -31.1104 0l-5.05957 5.05957c-9.25977 -4.99023 -18.8203 -8.95996 -28.7197 -11.9102\r\n-v-7.13965c0 -12.1504 -9.85059 -22 -22 -22h-44c-12.1504 0 -22 9.84961 -22 22v7.15039c-9.90039 2.94922 -19.46 6.91992 -28.7207 11.9092l-5.05957 -5.05957c-8.58984 -8.58984 -22.5195 -8.58984 -31.1104 0l-31.1094 31.1104\r\n-c-8.58984 8.58984 -8.58984 22.5195 0 31.1094l5.05957 5.06055c-4.99023 9.26953 -8.9502 18.8193 -11.9102 28.7295h-7.13965c-12.1504 0 -22 9.85059 -22 22v44c0 12.1504 9.84961 22 22 22h7.15039c2.94922 9.90039 6.91992 19.46 11.9092 28.7207l-5.05957 5.05957\r\n-c-8.58984 8.58984 -8.58984 22.5195 0 31.1104l31.1104 31.1094c7.92969 7.93066 20.2598 8.2002 28.8896 1.4707v146.52c0 26.4697 21.5303 48 48 48h133.45h0.046875c17.4834 0 37.2324 -13.0547 44.083 -29.1396l56.0898 -130.86h102.33v40.2002\r\n-c0 29.9902 10.5801 58.8994 29.5 81.7197c6.37988 7.7002 18.04 8.23047 24.7002 0.780273l21.6299 -24.1699c4.87012 -5.43066 5.74023 -13.6904 1.32031 -19.4902c-8.4502 -11.0801 -13.1504 -24.7197 -13.1504 -38.8398v-40.2002h64zM176 32c44.1797 0 80 35.8203 80 80\r\n-s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM198 288h110.04l-41.1504 96h-106.89v-96h38z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-injured\" unicode=\"&#xf728;\" horiz-adv-x=\"448\" \r\n-d=\"M277.37 436.02l-90.6904 -68.0195h-81.1895c19.0098 46.8701 64.8193 80 118.51 80c19.1104 0 37.0801 -4.46973 53.3701 -11.9805zM342.51 368h-102.52l66.0293 49.5195c15.8203 -13.3193 28.5908 -30.0498 36.4902 -49.5195zM224 192c-70.6904 0 -128 57.3096 -128 128\r\n-c0 5.48047 0.94043 10.7002 1.61035 16h252.779c0.660156 -5.2998 1.61035 -10.5195 1.61035 -16c0 -70.6904 -57.3096 -128 -128 -128zM80 148.3c7.92676 3.51758 21.2812 7.64844 29.8096 9.21973l98.4502 -221.52h-128.26v212.3zM0 -16v41.5996\r\n-c0 41.1406 18.8799 77.5107 48 102.16v-191.76c-26.5098 0 -48 21.4902 -48 48zM256 32c26.4697 0 48 -21.5303 48 -48s-21.5303 -48 -48 -48h-12.71l-42.6699 96h55.3799zM313.6 160c74.2305 0 134.4 -60.1699 134.4 -134.4v-41.5996c0 -26.5098 -21.4902 -48 -48 -48\r\n-h-80.4102c10.1504 13.4102 16.4102 29.9199 16.4102 48c0 44.1104 -35.8896 80 -80 80h-69.5898l-42.6699 96h7.37012c22.2393 -10.1797 46.8799 -16 72.8896 -16s50.6504 5.82031 72.8896 16h16.71z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vr-cardboard\" unicode=\"&#xf729;\" horiz-adv-x=\"640\" \r\n-d=\"M608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-160.22c-25.1807 0 -48.0303 14.7695 -58.3604 37.7402l-27.7402 61.6396c-7.88965 17.54 -24.0293 28.6201 -41.6797 28.6201s-33.79 -11.0801 -41.6797 -28.6201l-27.7402 -61.6396\r\n-c-10.3301 -22.9707 -33.1699 -37.7402 -58.3604 -37.7402h-160.22c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM160 144c35.3496 0 64 28.6504 64 64s-28.6504 64 -64 64s-64 -28.6504 -64 -64s28.6504 -64 64 -64zM480 144\r\n-c35.3496 0 64 28.6504 64 64s-28.6504 64 -64 64s-64 -28.6504 -64 -64s28.6504 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wind\" unicode=\"&#xf72e;\" \r\n-d=\"M156.7 192c48.7002 0 92.2998 -35 98.3994 -83.4004c7.5 -58.5 -38.0996 -108.6 -95.1992 -108.6c-46.6006 0 -85.6006 33.5 -94.2002 77.5996c-1.7998 9.60059 6.09961 18.4004 15.8994 18.4004h32.8008c6.59961 0 13.0996 -3.7998 15.1992 -10.0996\r\n-c4.30078 -12.7002 16.3008 -21.9004 30.4004 -21.9004c19.5 0 34.9004 17.4004 31.5996 37.4004c-2.59961 15.6992 -17.5 26.5996 -33.3994 26.5996h-142.2c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h140.7zM16 224c-8.7998 0 -16 7.2002 -16 16v32\r\n-c0 8.7998 7.2002 16 16 16h334.2c16 0 30.7998 10.9004 33.3994 26.5996c3.30078 20 -12.1992 37.4004 -31.5996 37.4004c-14.0996 0 -26.0996 -9.2002 -30.4004 -21.9004c-2.09961 -6.2998 -8.5 -10.0996 -15.1992 -10.0996h-32.8008\r\n-c-9.69922 0 -17.6992 8.7002 -15.7998 18.2998c9.7998 50.6006 59.5 87.1006 114.9 75.5c36.2002 -7.59961 65.5 -36.8994 73.0996 -73.0996c13 -61.9004 -34.0996 -116.7 -93.7998 -116.7h-336zM400 192c70.5 0 126 -65.5 108.9 -138.7\r\n-c-9.60059 -41.0996 -43.5 -74 -84.7002 -82.7002c-58.9004 -12.5 -111.601 21.7002 -129.4 72.3008c-3.7002 10.2998 4.40039 21.0996 15.2998 21.0996h33.8008c5.7998 0 11.5996 -2.59961 14.5 -7.59961c8.2998 -14.5 23.6992 -24.4004 41.5996 -24.4004\r\n-c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-116.5c-6.59961 25.2002 -20.5 47.4004 -39.7998 64h156.3z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wine-bottle\" unicode=\"&#xf72f;\" \r\n-d=\"M507.31 375.43c6.25 -6.25 6.25 -16.3799 0.0107422 -22.6201l-22.6299 -22.6299c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-76.6699 -76.6699c19.7002 -46.5801 10.7305 -102.41 -27.2295 -140.37l-158.391 -158.39c-24.9893 -24.9902 -65.5195 -24.9902 -90.5098 0\r\n-l-90.5098 90.5098c-24.9902 24.9902 -24.9902 65.5205 0 90.5098l158.38 158.381c37.9697 37.96 93.79 46.9297 140.37 27.2295l76.6699 76.6699c-6.25 6.25 -6.25 16.3799 0 22.6299l22.6299 22.6299c6.25 6.25 16.3799 6.25 22.6299 0zM179.22 24.71l122.04 122.04\r\n-l-90.5098 90.5098l-122.04 -122.04z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-meatball\" unicode=\"&#xf73b;\" \r\n-d=\"M48 96c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM464 96c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM345 84.9004c13.5 -7 23 -20.7002 23 -36.9004s-9.5 -29.9004 -23 -36.9004\r\n-c4.59961 -14.5 1.7002 -30.7998 -9.7998 -42.2998c-8.2002 -8.2002 -18.9004 -12.2998 -29.7002 -12.2998c-4.2998 0 -8.5 1.2002 -12.5996 2.5c-7 -13.5 -20.7002 -23 -36.9004 -23s-29.9004 9.5 -36.9004 23c-4.09961 -1.40039 -8.2998 -2.5 -12.5996 -2.5\r\n-c-10.7998 0 -21.5 4.09961 -29.7002 12.2998c-11.5 11.5 -14.5 27.7998 -9.89941 42.2998c-13.5 7 -23 20.7002 -23 36.9004s9.5 29.9004 23 36.9004c-4.5 14.5 -1.60059 30.7998 9.89941 42.2998s27.7998 14.5 42.2998 9.89941c7 13.5 20.7002 23 36.9004 23\r\n-s29.9004 -9.5 36.9004 -23c14.5 4.5 30.7998 1.60059 42.2998 -9.89941c11.3994 -11.5 14.3994 -27.7998 9.7998 -42.2998zM512 224c0 -53 -43 -96 -96 -96h-43.4004c-3.5 8 -8.39941 15.4004 -14.7998 21.7998c-13.5 13.5 -31.5 21.1006 -50.7998 21.2998\r\n-c-13.5 13.2002 -31.7002 20.9004 -51 20.9004s-37.5 -7.7002 -51 -20.9004c-19.2998 -0.199219 -37.2998 -7.7998 -50.7998 -21.2998c-6.40039 -6.39941 -11.2002 -13.7998 -14.7998 -21.7998h-43.4004c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998\r\n-c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.0996 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80c0 -5.59961 -0.5 -11 -1.59961 -16.2002\r\n-c0.5 0 1 0.200195 1.59961 0.200195c53 0 96 -43 96 -96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-moon-rain\" unicode=\"&#xf73c;\" horiz-adv-x=\"576\" \r\n-d=\"M350.5 222.5c37.2998 -6.7998 65.5 -39.2998 65.5 -78.5c0 -44.2002 -35.7998 -80 -80 -80h-256c-44.2002 0 -80 35.7998 -80 80c0 38.7998 27.5996 71.0996 64.2002 78.4004c0 0.5 -0.200195 1.09961 -0.200195 1.59961c0 53 43 96 96 96\r\n-c32.0996 0 60.2998 -15.9004 77.7002 -40c10.3994 5 22 8 34.2998 8c39.2002 0 71.5996 -28.2998 78.5 -65.5zM567.9 224.2c6.19922 1.2002 10.5996 -6 6.39941 -10.7998c-27 -33.1006 -67.8994 -53.3008 -112.6 -53.3008c-5.2002 0 -10.1006 1 -15.2002 1.5\r\n-c-6.2002 39.4004 -33.0996 72.5 -70.2002 86.8008c-10.7002 27.8994 -32.2002 49.7998 -58.8994 61.6992c3.2998 76.7002 66.5 137.9 144.399 137.9c8.90039 0 17.7998 -0.799805 26.5 -2.40039c6.2002 -1.09961 7.60059 -9.39941 2.10059 -12.5\r\n-c-35.6006 -20.0996 -57.5 -57.5 -57.5 -98.0996c0 -70.5 64.5996 -124.1 135 -110.8zM364.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\r\n-c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM268.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\r\n-c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM172.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64\r\n-c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM76.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008\r\n-l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-rain\" unicode=\"&#xf73d;\" \r\n-d=\"M416 320c53 0 96 -43 96 -96s-43 -96 -96 -96h-320c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.0996 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998\r\n-c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80c0 -5.59961 -0.5 -11 -1.59961 -16.2002c0.5 0 1 0.200195 1.59961 0.200195zM88 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002\r\n-c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996c0 31.3008 27.2002 43.3008 40 87.7002zM248 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996\r\n-c0 31.3008 27.2002 43.3008 40 87.7002zM408 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996c0 31.3008 27.2002 43.3008 40 87.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-showers-heavy\" unicode=\"&#xf740;\" \r\n-d=\"M183.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112\r\n-c4.40039 7.7998 14.2002 10.3994 21.8008 6zM279.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008\r\n-l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM87.9004 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\r\n-c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM471.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\r\n-c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM375.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112\r\n-c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM416 320c53 0 96 -43 96 -96s-43 -96 -96 -96h-320\r\n-c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.2002 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80\r\n-c0 -5.59961 -0.5 -11 -1.59961 -16.2002c0.5 0 1 0.200195 1.59961 0.200195z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cloud-sun-rain\" unicode=\"&#xf743;\" horiz-adv-x=\"576\" \r\n-d=\"M510.5 222.5c37.2998 -6.7998 65.5 -39.2998 65.5 -78.5c0 -44.2002 -35.7998 -80 -80 -80h-256c-44.2002 0 -80 35.7998 -80 80c0 38.7998 27.5996 71 64.2002 78.4004c0 0.5 -0.200195 1.09961 -0.200195 1.59961c0 53 43 96 96 96\r\n-c32.0996 0 60.2998 -15.9004 77.7002 -40c10.3994 5 22 8 34.2998 8c39.2002 0 71.5996 -28.2998 78.5 -65.5zM124.1 188.1c3.10059 -3.09961 6.60059 -5.59961 10.2002 -8.2998c-3.89941 -11.3994 -6.2002 -23.3994 -6.2002 -35.8994c0 -2.5 0.5 -4.80078 0.700195 -7.2002\r\n-l-59.2002 -19.7002c-10.1992 -3.2998 -19.8994 6.2998 -16.5 16.5l25.1006 75.2998l-71 35.5c-9.60059 4.7998 -9.60059 18.5 0 23.2998l71 35.5l-25.1006 75.3008c-3.39941 10.1992 6.2002 19.8994 16.4004 16.5l75.2998 -25.1006l35.5 71\r\n-c4.7998 9.60059 18.5 9.60059 23.2998 0l35.5 -71l75.3008 25.1006c10.1992 3.39941 19.8994 -6.2002 16.5 -16.4004l-8.90039 -26.7002c-0.700195 0 -1.2998 0.200195 -2 0.200195c-25.5996 0 -49.2002 -7.7998 -69.2002 -20.7002\r\n-c-37.5996 29.4004 -92.0996 27.2002 -126.7 -7.39941c-37.3994 -37.5 -37.3994 -98.4004 0 -135.801zM193.9 246.1c-18.2002 -8.2998 -33.5 -21.2998 -44.8008 -37.1992c-12.8994 11.6992 -21.0996 28.3994 -21.0996 47.0996c0 35.2998 28.7002 64 64 64\r\n-c12.4004 0 24 -3.7002 33.7998 -9.90039c-16.0996 -17.5996 -27.5996 -39.5 -31.8994 -64zM524.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\r\n-c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM428.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\r\n-c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM332.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64\r\n-c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM236.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008\r\n-l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"democrat\" unicode=\"&#xf747;\" horiz-adv-x=\"640\" \r\n-d=\"M637.3 191.1c4.90039 -7.39941 2.90039 -17.2998 -4.39941 -22.2998l-26.6006 -17.7002c-7.39941 -4.89941 -17.2998 -3 -22.2002 4.40039c-21.7998 32.7002 -23.8994 38.0996 -40.0996 50.2998v-77.7998h-352l-54 108l-38.0996 -34.5996\r\n-c-6 -6 -14.1006 -9.40039 -22.6006 -9.40039h-31c-12.0996 0 -23.2002 6.90039 -28.5996 17.7002l-14.2998 28.5996c-5.40039 10.7998 -4.30078 23.7998 3 33.5l74.5996 99.2998c1.7002 2.30078 4.2002 3.7002 6.40039 5.40039c-4 2.2002 -8 4.2002 -11.3008 7.5\r\n-c-16.3994 16.4004 -18.3994 41.7998 -6.09961 60.4004c2.7998 4.19922 8.7998 4.7998 12.4004 1.19922l42.8994 -42.7998l41.7998 41.7998c4.40039 4.40039 11.8008 3.7002 15.2002 -1.5c15.1006 -22.7998 12.6006 -53.7998 -7.5 -73.8994l81.2002 -81.2002h235.6\r\n-c50.8008 0 97.9004 -25.2002 126.101 -67.5zM296.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5\r\n-l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM408.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998\r\n-l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002\r\n-l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM520.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998\r\n-c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM192 -48v144h352v-144\r\n-c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v80h-160v-80c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"flag-usa\" unicode=\"&#xf74d;\" \r\n-d=\"M32 448c17.7002 0 32 -14.2998 32 -32v-464c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v464c0 17.7002 14.2998 32 32 32zM299.9 144.4c31.0996 -8.2002 62.5996 -16.5 100 -16.6006c31.8994 0 68.5 6.7998 112.1 24.1006v-36\r\n-c0 -12.3008 -7.09961 -23.8008 -18.5 -28.8008c-175.8 -76.3994 -211.8 69.1006 -397.5 -23.0996v69.2998c92.2002 39.9004 146.7 26.2002 203.9 11.1006zM299.9 240.4c31.0996 -8.2002 62.5996 -16.5 100 -16.5c31.8994 0 68.5 6.7998 112.1 24.0996v-61.5\r\n-c-92.2002 -39.9004 -146.7 -26.2002 -203.9 -11.0996c-57.5 15.0996 -117.3 30 -212.1 -7.60059v61.5c92.2002 39.9004 146.7 26.2002 203.9 11.1006zM309.4 366.3c-7 2.10059 -14.1006 4.2002 -21.3008 6.2002v-33.2002c4 -1.09961 8.10059 -2.2998 12.1006 -3.5\r\n-c26.7002 -8.09961 52.8994 -15.8994 85.7002 -15.8994c32.7998 0 72.5 7.89941 126.1 31.3994v-68.8994c-92.2002 -39.8008 -146.7 -26.1006 -203.9 -11.1006c-57.5 15.1006 -117.3 29.9004 -212.1 -7.59961v151.899c209.4 94.6006 195.3 -59.0996 366.6 28.2002\r\n-c22.6006 11.5 49.4004 -1.5 49.4004 -26.5996v-30.7998c-105.2 -49.1006 -150.8 -35.7002 -202.6 -20.1006zM160 319.9c8.7998 0 16 7.09961 16 16c0 8.89941 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16zM160 375.7c8.7998 0 16 7.2002 16 16\r\n-c0 8.89941 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16zM224 327.8c8.7998 0 16 7.2002 16 16c0 8.90039 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.89941 7.2002 -16 16 -16zM224 383.7c8.7998 0 16 7.2002 16 16c0 8.89941 -7.2002 16 -16 16\r\n-s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"meteor\" unicode=\"&#xf753;\" \r\n-d=\"M491.2 447.3c12.3994 3.7002 23.7998 -7.7002 20.2002 -20.0996c-11.6006 -38.7002 -34.3008 -111.7 -61.3008 -187.7c7 -2.09961 13.4004 -4 18.6006 -5.59961c9.7002 -3 14.2002 -13.9004 9.5 -22.9004c-22.1006 -42.2998 -82.7002 -152.8 -142.5 -214.4\r\n-c-1 -1.09961 -2 -2.5 -3 -3.5c-38.1006 -38.0996 -88 -57.0996 -137.9 -57.0996c-49.8994 -0.0996094 -99.7998 19 -137.8 57c-38 38.0996 -57 88 -57 137.8c0 49.9004 19 99.7998 57.0996 137.8c1 1 2.40039 2 3.5 3c61.6006 59.9004 172 120.4 214.4 142.5\r\n-c9 4.7002 19.9004 0.200195 22.9004 -9.5c1.59961 -5.09961 3.5 -11.5996 5.59961 -18.5996c75.9004 27 149 49.7002 187.7 61.2998zM192 0c70.7002 0 128 57.2998 128 128s-57.2998 128 -128 128s-128 -57.2998 -128 -128s57.2998 -128 128 -128zM160 192\r\n-c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM208 96c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"person-booth\" unicode=\"&#xf756;\" horiz-adv-x=\"576\" \r\n-d=\"M192 -48v176h64v-176c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16zM224 224c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32h-57.5c-12.7998 0 -24.7998 5 -33.9004 14.0996l-20.8994 20.9004v-80.5996l41.2002 -61.3008\r\n-c4.39941 -8.7998 6.69922 -18.6992 6.69922 -28.5996v-56.5c0 -17.7002 -14.2998 -32 -32 -32c-17.6992 0 -32 14.2998 -32 32v56l-29.0996 43c-0.900391 0.400391 -1.59961 1.2002 -2.5 1.7002l-0.0996094 -100.7c0 -17.7002 -14.4004 -32 -32 -32\r\n-c-17.6006 0 -31.9004 14.2998 -31.9004 32l0.200195 160l-0.200195 95.9004c0 17.0996 6.7002 33.1992 18.7002 45.2998c12.0996 12.0996 28.2002 18.7998 45.2998 18.7998h18.7002c17 0 33.0996 -6.59961 45.2002 -18.7002l45.1992 -45.2998h50.9004zM64 320\r\n-c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM288 416v32h192v-416c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 -17.7002 -14.2998 -32 -32 -32c-17.0996 0 -30.7998 13.5 -31.7002 30.4004\r\n-c-4.2998 -21.3008 -17.0996 -30.4004 -32.2998 -30.4004c-18.4004 0 -35.7002 16.7002 -31.4004 38.2998l30.9004 154.601zM192 416c0 17.7002 14.2998 32 32 32h32v-192h-64v160zM544 448c17.7002 0 32 -14.2998 32 -32v-464c0 -8.7998 -7.2002 -16 -16 -16h-32\r\n-c-8.7998 0 -16 7.2002 -16 16v496h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"poo-storm\" unicode=\"&#xf75a;\" horiz-adv-x=\"448\" \r\n-d=\"M308 112c9.2002 0 15 -10 10.4004 -18l-88 -152c-2.2002 -3.7998 -6.2002 -6 -10.4004 -6c-7.7002 0 -13.5 7.2002 -11.7002 14.7998l23 97.2002h-59.2998c-7.2998 0 -12.9004 6.40039 -11.9004 13.5996l16 120c0.800781 5.90039 5.90039 10.4004 11.9004 10.4004h68\r\n-c7.90039 0 13.5996 -7.5 11.5996 -15.0996l-17.2998 -64.9004h57.7002zM374.4 223.3c41 -3.2998 73.5996 -37.5 73.5 -79.2998c0 -44 -36 -80 -80 -80h-30l8.09961 14c7.7998 13.5 7.7998 30.4004 0 44s-22.4004 22 -38.0996 22h-16l6.59961 24.7002\r\n-c3.59961 13.2998 0.799805 27.2002 -7.59961 38.0996c-8.40039 10.9004 -21.1006 17.2002 -34.9004 17.2002h-68c-22 0 -40.7002 -16.4004 -43.7002 -38.2002l-16 -120c0 -0.599609 0.100586 -1.2002 0 -1.7998h-48.2998c-44 0 -80 36 -80 80\r\n-c0 41.7998 32.5996 76 73.5996 79.2998c-5.89941 9.60059 -9.59961 20.6006 -9.59961 32.7002c0 35.2998 28.7002 64 64 64h16c44.2002 0 80 35.7998 80 80c0 17.4004 -5.7002 33.4004 -15.0996 46.5c4.89941 0.799805 9.89941 1.5 15.0996 1.5c53 0 96 -43 96 -96\r\n-c0 -11.2998 -2.2998 -21.9004 -5.90039 -32h5.90039c35.2998 0 64 -28.7002 64 -64c0 -12.0996 -3.7002 -23.0996 -9.59961 -32.7002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"rainbow\" unicode=\"&#xf75b;\" horiz-adv-x=\"576\" \r\n-d=\"M268.3 415.3c167.7 11.2998 307.7 -122 307.7 -287.3v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v136.2c0 113.8 -81.5996 215.399 -194.5 229.899c-136.6 17.6006 -253.5 -88.8994 -253.5 -222.1v-144c0 -8.7998 -7.2002 -16 -16 -16h-32\r\n-c-8.7998 0 -16 7.2002 -16 16v133.8c0 153.3 115.4 287.3 268.3 297.5zM262.7 318.4c117.1 15 217.3 -76.2002 217.3 -190.4v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v138.3c0 66.9004 -48.7002 126.601 -115.2 133.101\r\n-c-76.2998 7.39941 -140.8 -52.6006 -140.8 -127.4v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v137.3c0 97.6006 70 184.7 166.7 197.101zM268.9 222.1c61.2998 11.9004 115.1 -34.8994 115.1 -94.0996v-144c0 -8.7998 -7.2002 -16 -16 -16h-32\r\n-c-8.7998 0 -16 7.2002 -16 16v144c0 17.5996 -14.2998 32 -32 32s-32 -14.4004 -32 -32v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v140.2c0 46.3994 31.2998 89 76.9004 97.8994z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"republican\" unicode=\"&#xf75e;\" horiz-adv-x=\"640\" \r\n-d=\"M544 256v-64h-544v64c0 88.4004 71.5996 160 160 160h224c88.4004 0 160 -71.5996 160 -160zM176.3 277.6c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0l-12.1992 -24.7998l-27.4004 -4\r\n-c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998zM320.3 277.6\r\n-c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0l-12.1992 -24.7998l-27.4004 -4c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998\r\n-c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998zM464.3 277.6c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0\r\n-l-12.1992 -24.7998l-27.4004 -4c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998z\r\n-M624 128c8.7998 0 16 -7.2002 16 -16v-64c0 -46.9004 -40.5996 -84.5 -88.4004 -79.5996c-41.5996 4.19922 -71.5996 42.5 -71.5996 84.2998v43.2998h-32v-112c0 -8.7998 -7.2002 -16 -16 -16h-96c-8.7998 0 -16 7.2002 -16 16v80h-192v-80c0 -8.7998 -7.2002 -16 -16 -16\r\n-h-96c-8.7998 0 -16 7.2002 -16 16v176h544v-112c0 -8.7998 7.2002 -16 16 -16s16 7.2002 16 16v64c0 8.7998 7.2002 16 16 16h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"smog\" unicode=\"&#xf75f;\" horiz-adv-x=\"640\" \r\n-d=\"M624 80c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-544c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h544zM144 -16c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-128c-8.7998 0 -16 7.2002 -16 16v16\r\n-c0 8.7998 7.2002 16 16 16h128zM560 -16c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-336c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h336zM144 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144c41 0 77.7998 -17.2998 104 -44.7998\r\n-c26.2002 27.5 63 44.7998 104 44.7998c54.7998 0 102 -31 126.3 -76.0996c15 7.5 31.7002 12.0996 49.7002 12.0996c61.9004 0 112 -50.0996 112 -112s-50.0996 -112 -112 -112h-60.0996c-22.6006 -19.7002 -51.6006 -32 -83.9004 -32s-61.4004 12.2998 -83.9004 32h-156.1z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"temperature-high\" unicode=\"&#xf769;\" \r\n-d=\"M416 448c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM416 320c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 336v-166.5c19.7002 -24.5996 32 -55.5 32 -89.5\r\n-c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144c0 34 12.2998 64.7998 32 89.5v166.5c0 61.9004 50.0996 112 112 112s112 -50.0996 112 -112zM144 0c44.0996 0 80 35.9004 80 80c0 25.5 -12.2002 49 -32 63.7998v192.2c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-192.2\r\n-c-19.7998 -14.8994 -32 -38.2998 -32 -63.7998c0 -44.0996 35.9004 -80 80 -80zM160 125.1c18.5996 -6.59961 32 -24.1992 32 -45.0996c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 20.9004 13.4004 38.5 32 45.0996v210.9c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16\r\n-v-210.9z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"temperature-low\" unicode=\"&#xf76b;\" \r\n-d=\"M416 448c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM416 320c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 336v-166.5c19.7002 -24.5996 32 -55.5 32 -89.5\r\n-c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144c0 34 12.2998 64.7998 32 89.5v166.5c0 61.9004 50.0996 112 112 112s112 -50.0996 112 -112zM144 0c44.0996 0 80 35.9004 80 80c0 25.5 -12.2002 49 -32 63.7998v192.2c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-192.2\r\n-c-19.7998 -14.8994 -32 -38.2998 -32 -63.7998c0 -44.0996 35.9004 -80 80 -80zM160 125.1c18.5996 -6.59961 32 -24.1992 32 -45.0996c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 20.9004 13.4004 38.5 32 45.0996v18.9004c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16\r\n-v-18.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"vote-yea\" unicode=\"&#xf772;\" horiz-adv-x=\"640\" \r\n-d=\"M608 128c17.7002 0 32 -14.2998 32 -32v-96c0 -17.7002 -14.2998 -32 -32 -32h-576c-17.7002 0 -32 14.2998 -32 32v96c0 17.7002 14.2998 32 32 32h64v-64h-22.4004c-5.2998 0 -9.59961 -3.59961 -9.59961 -8v-16c0 -4.40039 4.2998 -8 9.59961 -8h492.801\r\n-c5.2998 0 9.59961 3.59961 9.59961 8v16c0 4.40039 -4.2998 8 -9.59961 8h-22.4004v64h64zM512 64h-384v319.7c0 17.7998 14.5 32.2998 32.4004 32.2998h319.3c17.7998 0 32.2998 -14.4004 32.2998 -32.2998v-319.7zM211.2 246c-4.2002 -4.2002 -4.2998 -11 0 -15.2002\r\n-l74.0996 -74.7002c4.2002 -4.2998 11 -4.2998 15.2002 -0.0996094l128.3 127.2c4.2998 4.2002 4.2998 11 0.100586 15.2002l-25.3008 25.5c-4.19922 4.2998 -11 4.2998 -15.1992 0.0996094l-95.2002 -94.4004l-41.2998 41.6006\r\n-c-4.2002 4.2998 -11 4.2998 -15.2002 0.0996094z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"water\" unicode=\"&#xf773;\" horiz-adv-x=\"576\" \r\n-d=\"M562.1 64.0996c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\r\n-c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\r\n-c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.5 57.8994 -22.9004zM562.1 208.1\r\n-c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\r\n-c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\r\n-c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.5 57.8994 -22.9004zM562.1 352.1\r\n-c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\r\n-c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\r\n-c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.4004 57.8994 -22.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"baby\" unicode=\"&#xf77c;\" horiz-adv-x=\"384\" \r\n-d=\"M192 288c-44.2002 0 -80 35.7998 -80 80s35.7998 80 80 80s80 -35.7998 80 -80s-35.7998 -80 -80 -80zM138.6 39.2002l29.4004 -39.2002c13.2002 -17.7002 9.7002 -42.7998 -8 -56c-7.2002 -5.40039 -15.7002 -8 -24 -8c-12.0996 0 -24.0996 5.5 -32 16l-48 64\r\n-c-10.9004 14.5996 -10.5996 34.7998 0.799805 49l45.9004 57.4004l61.5 -51.2002zM281.3 122.4l45.9004 -57.4004c11.3994 -14.2002 11.7002 -34.4004 0.799805 -49l-48 -64c-7.7998 -10.5 -19.7998 -16 -32 -16c-8.40039 0 -16.7998 2.59961 -24 8\r\n-c-17.7002 13.2002 -21.2002 38.2998 -8 56l29.4004 39.2002l-25.6006 32zM376.7 303c12.7002 -18.0996 8.39941 -43 -9.7002 -55.7998l-40.5996 -28.5c-17 -11.9004 -35.4004 -20.9004 -54.4004 -27.9004v-30.7998h-160v30.9004c-19 7 -37.4004 16 -54.4004 27.8994\r\n-l-40.5996 28.5c-18 12.7002 -22.4004 37.6006 -9.7002 55.7002c12.7002 18 37.6006 22.4004 55.7002 9.7002l40.5996 -28.4004c52.6006 -37 124.101 -37 176.801 0l40.5996 28.5c18.0996 12.6006 43 8.2998 55.7002 -9.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"baby-carriage\" unicode=\"&#xf77d;\" \r\n-d=\"M144.8 431l111.2 -175h-256c0 74 35.2998 140.1 90.7998 184.4c16.7998 13.3994 42.7002 8.39941 54 -9.40039zM496 352c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48v-64c0 -50.5996 -23 -96.4004 -60.2998 -130.7\r\n-c34.5996 -8.89941 60.2998 -40 60.2998 -77.2998c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 8.90039 1.7002 17.2002 4.40039 25.2002c-21.5 -5.90039 -44.6006 -9.2002 -68.4004 -9.2002s-46.7998 3.2998 -68.4004 9.2002\r\n-c2.60059 -8 4.40039 -16.2998 4.40039 -25.2002c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 37.2998 25.7002 68.4004 60.2998 77.2998c-37.2998 34.2998 -60.2998 80.1006 -60.2998 130.7h384v64c0 35.2998 28.7002 64 64 64h48zM80 -16\r\n-c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM400 16c0 17.5996 -14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32s32 14.4004 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"biohazard\" unicode=\"&#xf780;\" horiz-adv-x=\"576\" \r\n-d=\"M287.9 336c-18.5 0 -36 -3.7998 -52.5 -9.5c-13.3008 10.2998 -23.6006 24.2998 -29.5 40.7002c25.1992 10.8994 53 16.8994 82.0996 16.8994c29.2002 0 57 -6.09961 82.2002 -17c-5.90039 -16.3994 -16.2002 -30.3994 -29.5 -40.6992\r\n-c-16.6006 5.7998 -34.2002 9.59961 -52.7998 9.59961zM163.6 9.2998c-47.5 35.5 -79.1992 90.7002 -83.2998 153.5c7.2998 2.10059 14.9004 3.10059 22.5 3.10059c9.2002 0 17.9004 -1.80078 26.4004 -4.60059c4.09961 -44.2998 26 -83.2002 58.8994 -109.6\r\n-c-4.09961 -16 -12.5 -30.6006 -24.5 -42.4004zM387.8 51.9004c32.7002 26.3994 54.6006 65.0996 58.7002 109.3c8.59961 2.7998 17.4004 4.7002 26.5996 4.7002c7.5 0 15 -1 22.2002 -3c-3.89941 -62.8008 -35.5996 -118 -83 -153.5c-12 11.7998 -20.3994 26.5 -24.5 42.5z\r\n-M501.3 256.9c34.6006 -20.4004 61 -53.3008 74.1006 -92.4004c1.2998 -3.7002 -0.200195 -7.7998 -3.5 -9.7998c-3.30078 -2 -7.5 -1.2998 -10 1.59961c-9.40039 10.7998 -19 19 -29.2002 25.1006c-57.2998 33.8994 -130.8 13.6992 -163.9 -45\r\n-c-33.0996 -58.7002 -13.3994 -134 43.9004 -167.9c10.2002 -6.09961 21.8994 -10.5 35.7998 -13.4004c3.7998 -0.799805 6.40039 -4.19922 6.40039 -8.09961c-0.100586 -4 -2.7002 -7.2998 -6.5 -8c-39.7002 -7.7998 -80.6006 -0.799805 -115.2 19.7002\r\n-c-18 10.5996 -32.9004 24.5 -45.2998 40.0996c-12.4004 -15.5996 -27.3008 -29.5 -45.3008 -40.0996c-34.5996 -20.5 -75.5 -27.5 -115.199 -19.7002c-3.80078 0.700195 -6.40039 4 -6.5 8c0 3.90039 2.69922 7.2998 6.39941 8.09961\r\n-c13.7998 3 25.6006 7.30078 35.7998 13.4004c57.3008 33.9004 77 109.2 43.9004 167.9c-33.0996 58.6992 -106.6 78.8994 -163.9 45c-10.1992 -6 -19.7998 -14.3008 -29.1992 -25.1006c-2.5 -2.89941 -6.7002 -3.59961 -10 -1.59961\r\n-c-3.30078 2.09961 -4.80078 6.09961 -3.5 9.7998c13.2998 39.0996 39.6992 71.9004 74.2998 92.4004c17.5996 10.3994 36.3994 16.5996 55.2998 19.8994c-6.09961 17.7002 -10 36.4004 -10 56.2002c0 41 14.5996 80.7998 41 112.2c2.5 3 6.59961 3.7002 10 1.7998\r\n-c3.2998 -1.90039 4.7998 -6 3.59961 -9.7002c-4.39941 -13.7998 -6.59961 -26.3994 -6.59961 -38.5c0 -67.7998 53.7998 -122.899 120 -122.899s120 55.0996 120 122.899c0 12.2002 -2.09961 24.7002 -6.59961 38.5c-1.2002 3.7002 0.299805 7.7998 3.59961 9.7002\r\n-c3.40039 1.90039 7.5 1.2002 10 -1.7998c26.5 -31.4004 41 -71.2002 41 -112.2c0 -19.7998 -4 -38.5 -10 -56.2002c19 -3.2998 37.7002 -9.5 55.2998 -19.8994zM287.9 127.9c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"blog\" unicode=\"&#xf781;\" \r\n-d=\"M172.2 221.2c75.5 -15 129.899 -89.2998 112.5 -172.2c-11.4004 -54.2998 -55.2998 -98.2998 -109.7 -109.7c-92.9004 -19.5 -175 51.2002 -175 140.7v248c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-248c0 -26.5 21.5 -48 48 -48s48 21.5 48 48\r\n-c0 20.5996 -13.0996 38.2002 -31.2998 45c-9.60059 3.59961 -16.7002 11.7998 -16.7002 22v50.4004c0 14.8994 13.5996 26.6992 28.2002 23.7998zM209 448c163.2 -8.59961 294.4 -139.8 302.9 -303c0.5 -9.2002 -6.80078 -17 -16 -17h-32.1006\r\n-c-8.39941 0 -15.3994 6.59961 -15.8994 15c-7.5 129.5 -111.5 234.5 -240.9 241.5c-8.40039 0.400391 -15 7.40039 -15 15.9004v31.5996c0 9.2002 7.7998 16.5 17 16zM209.3 352c110.101 -8.5 198.2 -96.5996 206.601 -206.7\r\n-c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.0996 6.40039 -15.8994 14.7002c-6.90039 77 -68.1006 138.899 -144.9 145.2c-8.2998 0.599609 -14.7998 7.5 -14.7998 15.8994v32.1006c0 9.39941 8 16.7998 17.2998 16.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-day\" unicode=\"&#xf783;\" horiz-adv-x=\"448\" \r\n-d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM64 176v-96c0 -8.7998 7.2002 -16 16 -16h96c8.7998 0 16 7.2002 16 16v96c0 8.7998 -7.2002 16 -16 16h-96c-8.7998 0 -16 -7.2002 -16 -16zM400 384c26.5 0 48 -21.5 48 -48v-48h-448v48\r\n-c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"calendar-week\" unicode=\"&#xf784;\" horiz-adv-x=\"448\" \r\n-d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM64 176v-64c0 -8.7998 7.2002 -16 16 -16h288c8.7998 0 16 7.2002 16 16v64c0 8.7998 -7.2002 16 -16 16h-288c-8.7998 0 -16 -7.2002 -16 -16zM400 384c26.5 0 48 -21.5 48 -48v-48h-448\r\n-v48c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"candy-cane\" unicode=\"&#xf786;\" \r\n-d=\"M497.5 356c35.7002 -75.5 2.7998 -166.1 -68.9004 -209l-347.3 -206.5c-5.2002 -3 -10.7998 -4.5 -16.3994 -4.5c-10.9004 0 -21.5 5.59961 -27.5 15.5996l-32.8008 54.9004c-9.09961 15.2002 -4.19922 34.7998 11 43.9004l353.601 210.1\r\n-c15.0996 9.09961 20.0996 28.7998 11 43.9004c-6 10 -16.6006 15.5996 -27.5 15.5996c-5.60059 0 -11.2998 -1.40039 -16.4004 -4.5l-27.5 -16.4004c-5.2002 -3 -10.7998 -4.5 -16.3994 -4.5c-10.9004 0 -21.5 5.60059 -27.5 15.6006l-32.8008 54.8994\r\n-c-9.09961 15.2002 -4.19922 34.8008 11 43.9004l27.5 16.4004c25.6006 15.2998 53.9004 22.5996 81.8008 22.5996c59.3994 0 117.199 -33.0996 145.1 -92zM319.8 343c8.5 5.09961 18.1006 7.59961 27.9004 8.40039l-20.6006 61.7998\r\n-c-10.5 -2.10059 -20.5996 -5.5 -30.2998 -10.2002l20.5 -61.5zM145.9 16.2002l30.7998 18.2998l-60.5 38.5l-30.7998 -18.2998zM253.4 80.0996l30.7998 18.3008l-60.5 38.5l-30.7998 -18.3008zM364.3 146l30.7998 18.2998l-60.5 38.5l-30.7998 -18.2998zM384.7 343.3\r\n-c9.2002 -5.39941 17.2002 -13 22.8994 -22.2998l45.7002 45.7002c-6.59961 8.5 -14.2002 16.0996 -22.5996 22.5996zM466.8 235.5c4.60059 9.7998 8 20 10.1006 30.4004l-60.4004 20.0996c-0.0996094 -4.5 -0.700195 -9.09961 -1.7998 -13.5996\r\n-c-1.60059 -6.2002 -4.2002 -11.8008 -7.40039 -17.1006z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"carrot\" unicode=\"&#xf787;\" \r\n-d=\"M298.2 291.4c61.7002 -30.1006 87.2998 -104.5 57.2002 -166.2c-12.6006 -25.7998 -33.1006 -45.4004 -57.1006 -57.1006l-102 -49.7998l-57 57c-6.2002 6.2002 -16.2998 6.2002 -22.5996 0s-6.2998 -16.3994 0 -22.5996l49.2002 -49.2002l-133.601 -65.2002\r\n-c-11.0996 -5.39941 -24.5996 -0.799805 -30 10.2998c-3.09961 6.40039 -2.89941 13.7002 0 19.7002l128.101 262.7l50.1992 -50.2002c3.10059 -3.09961 7.2002 -4.7002 11.3008 -4.7002c4.09961 0 8.19922 1.60059 11.2998 4.7002c6.2998 6.2002 6.2998 16.2998 0 22.6006\r\n-l-55.2002 55.1992c35.7002 43.3008 97.5 58.5 150.2 32.8008zM390.3 326.3c40.7002 19.5 88.7998 9.40039 121.7 -30.2998c-41.5996 -50.2998 -107.5 -52.5 -151.9 -7.90039l-8 8c-44.5996 44.4004 -42.3994 110.2 7.90039 151.9\r\n-c39.7002 -32.9004 49.7998 -81 30.2998 -121.7z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cash-register\" unicode=\"&#xf788;\" \r\n-d=\"M511.1 69.2002c0.600586 -3.5 0.900391 -7 0.800781 -10.5v-90.7002c0 -17.7002 -14.3008 -32 -32 -32h-448c-17.7002 0 -32 14.2998 -32 32v90.7998c0 3.5 0.299805 7 0.899414 10.5l26.7002 160c2.59961 15.4004 16 26.7002 31.5996 26.7002h84.9004v64h-96\r\n-c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h256c8.7998 0 16 -7.2002 16 -16v-96.0996c0 -8.80078 -7.2002 -16 -16 -16h-96v-64h244.8c15.7002 0 29 -11.3008 31.6006 -26.7002zM280 200v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16\r\n-c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16zM248 136c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16zM216 216h-16c-8.7998 0 -16 -7.2002 -16 -16v-16\r\n-c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16zM80 368h192v32h-192v-32zM120 168c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16zM136 104\r\n-c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16zM352 -8v16c0 4.40039 -3.59961 8 -8 8h-176c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h176c4.40039 0 8 3.59961 8 8\r\n-zM376 104v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16zM424 184v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16\r\n-c8.7998 0 16 7.2002 16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"compress-arrows-alt\" unicode=\"&#xf78c;\" \r\n-d=\"M200 160c13.2998 0 24 -10.7002 24 -24v-112c0 -21.4004 -25.7998 -32.0996 -40.9004 -17l-31.0996 33l-99.2998 -99.2998c-6.2002 -6.2002 -16.4004 -6.2002 -22.6006 0l-25.3994 25.3994c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l99.2002 99.2998l-32.9004 31\r\n-c-15.0996 15.2002 -4.40039 41 17 41h112zM312 224c-13.2998 0 -24 10.7002 -24 24v112c0 21.4004 25.7998 32.0996 40.9004 17l31.0996 -33l99.2998 99.2998c6.2002 6.2002 16.4004 6.2002 22.6006 0l25.3994 -25.3994c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006\r\n-l-99.2998 -99.2998l33 -31c15.0996 -15.0996 4.40039 -41 -17 -41h-112zM408 88l99.2998 -99.4004c6.2002 -6.19922 6.2002 -16.3994 0 -22.5996l-25.3994 -25.4004c-6.2002 -6.19922 -16.4004 -6.19922 -22.6006 0l-99.2998 99.3008l-31 -32.9004\r\n-c-15.0996 -15.0996 -41 -4.40039 -41 17v112c0 13.2998 10.7002 24 24 24h112c21.4004 0 32.0996 -25.7998 17 -40.9004zM183 376.9c15.0996 15.0996 41 4.39941 41 -16.9004v-112c0 -13.2998 -10.7002 -24 -24 -24h-112c-21.4004 0 -32.0996 25.7998 -17 40.9004\r\n-l33 31.0996l-99.2998 99.2998c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l25.3994 25.3994c6.2002 6.2002 16.4004 6.2002 22.6006 0l99.2998 -99.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dumpster\" unicode=\"&#xf793;\" horiz-adv-x=\"576\" \r\n-d=\"M560 288h-97.2998l-25.6006 128h98.9004c7.2998 0 13.7002 -5 15.5 -12.0996l24 -96c2.5 -10.1006 -5.09961 -19.9004 -15.5 -19.9004zM272 416v-128h-126.1l25.5996 128h100.5zM404.5 416l25.5996 -128h-126.1v128h100.5zM16 288c-10.4004 0 -18 9.7998 -15.5 19.9004\r\n-l24 96c1.7998 7.09961 8.2002 12.0996 15.5 12.0996h98.9004l-25.6006 -128h-97.2998zM560 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-28l-20 -160v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-320v-16\r\n-c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16l-20 160h-28c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h20l-4 32h512l-4 -32h20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"dumpster-fire\" unicode=\"&#xf794;\" horiz-adv-x=\"640\" \r\n-d=\"M418.7 343.9c-19.7002 -17.6006 -37.7002 -36.5 -53.9004 -55.8008h-60.7998v128h100.5l14.4004 -72zM272 416v-128h-126.1l25.5996 128h100.5zM461.3 343.9l-11.8994 10.5996l-12.3008 61.5h98.9004c7.2998 0 13.7002 -5 15.4004 -12.0996l24 -96\r\n-c0.199219 -0.800781 -0.100586 -1.5 0 -2.30078c-1 1 -2 2.2002 -3.10059 3.10059l-21.2998 19l-21.2998 -19c-5.90039 -5.2002 -11.6006 -10.7002 -17.2998 -16.2998c-15.6006 17.7998 -32.9004 35.1992 -51.1006 51.5zM16 288c-10.4004 0 -18 9.7998 -15.5 19.9004l24 96\r\n-c1.7998 7.09961 8.2002 12.0996 15.5 12.0996h98.9004l-25.6006 -128h-97.2998zM340.6 256c-32.6992 -46.7002 -52.5996 -93.7002 -52.5996 -129.6c0 -48.5 18.5996 -92.7002 48.7998 -126.4h-208.8v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16\r\n-l-20 160h-28c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h20l-4 32h308.6zM551.1 284.8c51.8008 -46.2002 88.9004 -121.8 88.8008 -158.399c0 -87.5 -71.6006 -158.4 -160 -158.4c-88.4004 0 -160 70.9004 -160 158.4c0 49.2998 49.7998 130.899 120 193.6\r\n-c27.3994 -24.4004 51.5 -50.5996 71 -76.4004c11.8994 14 25.2998 27.9004 40.1992 41.2002zM532.5 55.4004c33.4004 24.1992 41.2002 71.0996 22.5996 107.8c-2.2998 4.5 -4.89941 9.2002 -7.69922 14l-39.8008 -47s-62.3994 82.5 -67.0996 88.0996\r\n-c-32.9004 -40.8994 -49.4004 -64.7998 -49.4004 -91.8994c0 -54.5 39.9004 -88 88.9004 -88c19.5996 0 37.7998 6.2998 52.5 17z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ethernet\" unicode=\"&#xf796;\" \r\n-d=\"M496 256c8.7998 0 16 -7.2002 16 -16v-224c0 -8.7998 -7.2002 -16 -16 -16h-80v128h-32v-128h-64v128h-32v-128h-64v128h-32v-128h-64v128h-32v-128h-80c-8.7998 0 -16 7.2002 -16 16v224c0 8.7998 7.2002 16 16 16h48v48c0 8.7998 7.2002 16 16 16h48v48\r\n-c0 8.7998 7.2002 16 16 16h224c8.7998 0 16 -7.2002 16 -16v-48h48c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"gifts\" unicode=\"&#xf79c;\" horiz-adv-x=\"640\" \r\n-d=\"M240.6 253.9c-27.7998 -6.90039 -48.5996 -32 -48.5996 -61.9004v-224c0 -11.7002 3.40039 -22.5 8.90039 -32h-168.9c-17.7002 0 -32 14.2998 -32 32v352c0 17.7002 14.2998 32 32 32h29.4004l-30.7002 22c-7.2002 5.09961 -8.7998 15.0996 -3.7002 22.2998l9.2998 13\r\n-c5.10059 7.2002 15.1006 8.7998 22.2998 3.7002l32.1006 -22.7998l-11.5 30.5996c-3.2002 8.2002 1 17.5 9.2998 20.6006l15 5.59961c8.2998 3.09961 17.5 -1.09961 20.5996 -9.40039l19.9004 -53.0996l19.9004 53c3.09961 8.2998 12.2998 12.5 20.5996 9.40039l15 -5.60059\r\n-c8.2998 -3.09961 12.5 -12.2998 9.40039 -20.5996l-11.5 -30.6006l32 22.9004c7.19922 5.2002 17.1992 3.5 22.2998 -3.7002l9.2998 -13c5.2002 -7.2002 3.5 -17.2002 -3.7002 -22.2998l-30.7002 -22h29.4004c12.7002 0 23.4004 -7.5 28.5996 -18.2998\r\n-c-26.6992 -18.6006 -42.0996 -49 -44 -79.7998zM224 -32v96h192v-128h-160c-17.7002 0 -32 14.2998 -32 32zM448 -64v128h192v-96c0 -17.7002 -14.2998 -32 -32 -32h-160zM608 224c17.7002 0 32 -14.2998 32 -32v-96h-192v128h-15.2998l-0.700195 0.200195\r\n-l-0.700195 -0.200195h-15.2998v-128h-192v96c0 17.7002 14.2998 32 32 32h20.4004c-2.7002 7.59961 -4.40039 15.5 -4.40039 23.7998c0 35.5 27 72.2002 72.0996 72.2002c48 0 75.8008 -47.7002 87.9004 -75.2998c12 27.5996 39.7998 75.2998 87.9004 75.2998\r\n-c45.0996 0 72.0996 -36.7002 72.0996 -72.2002c0 -8.2998 -1.7998 -16.2002 -4.40039 -23.7998h20.4004zM336 224h52.5996c-8.89941 20.5996 -25.7998 48 -44.5 48c-17.6992 0 -24.0996 -14.5 -24.0996 -24.2002c0 -5.2002 1.5 -12.5996 8.7998 -19\r\n-c2.10059 -1.7998 4.5 -3.39941 7.2002 -4.7998zM535.2 228.8c7.2998 6.40039 8.7998 13.7998 8.7998 19c0 9.7002 -6.40039 24.2002 -24.0996 24.2002c-18.7002 0 -35.7002 -27.7002 -44.5 -48h52.5996c2.7002 1.40039 5.09961 3 7.2002 4.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glass-cheers\" unicode=\"&#xf79f;\" horiz-adv-x=\"640\" \r\n-d=\"M639.4 14.4004c1.69922 -4.10059 -0.300781 -8.7002 -4.30078 -10.4004l-162.399 -67.4004c-4 -1.69922 -8.7002 0.200195 -10.4004 4.30078c-8.5 20.3994 1.2002 43.7998 21.6006 52.2998l22.0996 9.2002l-39.2998 103.6\r\n-c-4.40039 -0.5 -8.7998 -1.2998 -13.1006 -1.2998c-51.6992 0 -99.3994 33.0996 -113.399 85.2998l-20.2002 75.4004l-20.2002 -75.4004c-14 -52.2002 -61.7002 -85.2998 -113.399 -85.2998c-4.30078 0 -8.7002 0.799805 -13.1006 1.2998l-39.3994 -103.6l22.0996 -9.2002\r\n-c20.4004 -8.5 30 -31.9004 21.5996 -52.2998c-1.69922 -4.10059 -6.2998 -6 -10.3994 -4.30078l-162.3 67.4004c-4.10059 1.7002 -6 6.40039 -4.30078 10.5c8.5 20.4004 31.8008 30.0996 52.2002 21.5996l22.1006 -9.19922l38.6992 101.899\r\n-c-47.8994 34.9004 -64.6992 100.2 -34.5 152.7l86.6006 150.5c8 13.9004 25.0996 19.7998 40 13.5996l114.3 -47.3994l114.3 47.3994c14.9004 6.10059 32 0.300781 40 -13.5996l86.6006 -150.5c30.2998 -52.5 13.3994 -117.8 -34.5 -152.8l38.6992 -101.9l22.1006 9.2002\r\n-c20.3994 8.5 43.7998 -1.2002 52.2002 -21.5996zM275.9 285.9l18.8994 70.6992l-94.5 39.2002l-36.5 -63.3994zM364.1 285.9l112.101 46.5l-36.5 63.3994l-94.5 -39.2002z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"glass-whiskey\" unicode=\"&#xf7a0;\" \r\n-d=\"M480 416c19.5 0 34.4004 -17.2002 31.7002 -36.5l-55.6006 -356.5c-4.5 -31.5 -31.5996 -54.9004 -63.3994 -54.9004h-273c-31.9004 0 -58.9004 23.4004 -63.4004 54.9004l-56 356.5c-2.7002 19.2998 12.2002 36.5 31.7002 36.5h448zM442.6 352h-373.199l30.1992 -192\r\n-h313z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"globe-europe\" unicode=\"&#xf7a2;\" horiz-adv-x=\"496\" \r\n-d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM448 192c0 110.3 -89.7002 200 -200.2 200c-1.89941 0 -3.7998 -0.200195 -5.7002 -0.299805l-28.8994 -21.7002c-2 -1.5 -3.2002 -3.90039 -3.2002 -6.40039v-20\r\n-c0 -4.39941 3.59961 -8 8 -8h16c4.40039 0 8 3.60059 8 8v8l16 16h20.7002c6.2002 0 11.2998 -5.09961 11.2998 -11.2998c0 -3 -1.2002 -5.89941 -3.2998 -8l-26.7998 -26.7998c-1.2002 -1.2002 -2.7002 -2.09961 -4.40039 -2.7002l-40 -13.2998\r\n-c-3.2998 -1.09961 -5.5 -4.2002 -5.5 -7.59961c0 -6.60059 -2.59961 -12.9004 -7.2002 -17.5l-20.0996 -20.1006c-3 -3 -4.7002 -7.09961 -4.7002 -11.2998v-25.2998c0 -8.7998 7.2002 -16 16 -16h22.0996c6.10059 0 11.6006 3.39941 14.3008 8.7998l9.39941 18.7002\r\n-c1.40039 2.7002 4.2002 4.39941 7.2002 4.39941h3.09961c4.40039 0 8 -3.59961 8 -8c0 -4.39941 3.60059 -8 8 -8h16c4.40039 0 8 3.60059 8 8v2.2002c0 3.5 2.2002 6.5 5.5 7.60059l31.6006 10.5c6.5 2.19922 10.8994 8.2998 10.8994 15.1992v4.5\r\n-c0 8.80078 7.2002 16 16 16h36.7002c6.2002 0 11.2998 -5.09961 11.2998 -11.2998v-9.39941c0 -6.2002 -5.09961 -11.3008 -11.2998 -11.3008h-32c-3 0 -5.89941 -1.19922 -8 -3.2998l-9.39941 -9.39941c-2.10059 -2.10059 -3.30078 -5 -3.30078 -8\r\n-c0 -6.2002 5.10059 -11.3008 11.3008 -11.3008h16c3 0 5.89941 -1.19922 8 -3.2998l9.39941 -9.39941c2.10059 -2.10059 3.2998 -5 3.2998 -8v-8.7002l-12.5 -12.5c-4.59961 -4.60059 -4.59961 -12.1006 -0.0996094 -16.7002l32 -32.5996\r\n-c3 -3.10059 7.09961 -4.80078 11.4004 -4.80078h20.2998c6.89941 20.2002 10.7998 41.9004 10.7998 64.4004zM130.1 298.9c0 -6.2002 5.10059 -11.3008 11.3008 -11.3008h16c3 0 5.89941 1.2002 8 3.30078l9.39941 9.39941c2.10059 2.10059 3.2998 5 3.2998 8v16\r\n-c0 6.2002 -5.09961 11.2998 -11.2998 11.2998c-3 0 -5.89941 -1.19922 -8 -3.2998l-25.3994 -25.3994c-2.10059 -2.10059 -3.30078 -5 -3.30078 -8zM258.1 -7.5c71.1006 3.59961 132.5 44.2002 164.9 103.1h-13.4004c-4.7998 0 -9.5 1.90039 -12.8994 5.30078\r\n-l-17.2998 17.2998c-6 6 -14.1006 9.39941 -22.6006 9.39941h-18.2998l-43.2002 37.1006c-8.2002 7 -18.7002 10.8994 -29.5996 10.8994h-31.2002c-8.2002 0 -16.2998 -2.2998 -23.4004 -6.5l-42.8994 -25.6992c-13.7002 -8.2002 -22.1006 -23 -22.1006 -39v-23.9004\r\n-c0 -14.2998 6.7002 -27.7998 18.2002 -36.4004l22.2002 -16.6992c8.7002 -6.5 24.5996 -11.8008 35.4004 -11.8008h20.1992c8.80078 0 16 -7.19922 16 -16v-7.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grip-lines\" unicode=\"&#xf7a4;\" \r\n-d=\"M496 160c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h480zM496 288c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v32\r\n-c0 8.7998 7.2002 16 16 16h480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"grip-lines-vertical\" unicode=\"&#xf7a5;\" horiz-adv-x=\"256\" \r\n-d=\"M96 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-480zM224 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32\r\n-c8.7998 0 16 -7.2002 16 -16v-480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"guitar\" unicode=\"&#xf7a6;\" \r\n-d=\"M502.63 409c5.15625 -5.1709 9.33984 -15.293 9.33984 -22.5947c0 -7.31543 -4.19727 -17.4521 -9.37012 -22.625l-46.3301 -46.3203c-3.24707 -3.25684 -9.4248 -7.07812 -13.7891 -8.53027l-36.4805 -12.1602l-76.2402 -76.2393\r\n-c8.79004 -12.2002 15.7705 -25.5605 19.1602 -40.2002c7.74023 -33.3896 0.870117 -66.8701 -22 -89.75c-7.87793 -7.8418 -22.877 -16.9141 -33.4795 -20.25c-18.54 -6.00977 -32.6709 -23.29 -34.4307 -42.1396c-2.29004 -23.8105 -11.4502 -45.8301 -28.4502 -62.71\r\n-c-45.5596 -45.4805 -127.5 -37.3809 -182.979 18.0693c-55.4805 55.4502 -63.6904 137.45 -18.0498 182.96c16.8799 16.9902 38.9102 26.1699 62.6094 28.4404c18.9404 1.76953 36.1504 15.8994 42.1504 34.46c3.33105 10.6016 12.3984 25.5957 20.2402 33.4697\r\n-c22.8799 22.8799 56.4297 29.7803 89.8799 22c14.5996 -3.39941 27.9395 -10.3799 40.0996 -19.1396l76.2598 76.2598l12.1602 36.5098c1.45215 4.36426 5.27344 10.542 8.53027 13.79l46.2803 46.3301c5.17383 5.1748 15.3115 9.375 22.6299 9.375\r\n-c7.31738 0 17.4561 -4.2002 22.6299 -9.375zM208 96c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48s-48 -21.5039 -48 -48s21.5039 -48 48 -48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"heart-broken\" unicode=\"&#xf7a9;\" \r\n-d=\"M473.7 374.2c48.7002 -49.7998 50.7998 -129.101 7.2998 -182.101l-212.2 -218.699c-7.09961 -7.30078 -18.5996 -7.30078 -25.7002 0l-212.1 218.6c-43.5 53.0996 -41.4004 132.4 7.2998 182.2l2.40039 2.39941c46.2998 47.4004 119 51.8008 170.7 14l28.5996 -86.5\r\n-l-96 -64l144 -144l-48 128l96 64l-34.2998 103.4c51.5996 36.9004 123.6 32.2002 169.6 -14.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"holly-berry\" unicode=\"&#xf7aa;\" horiz-adv-x=\"448\" \r\n-d=\"M144 256c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM256 304c0 26.5 21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48zM224 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48z\r\n-M207.8 212.9c-0.399414 -39.8008 7.40039 -78.1006 22.9004 -112.301c4 -8.89941 -2 -19.1992 -11.7002 -20.1992c-15.2002 -1.5 -30.4004 -4.60059 -45.2998 -9.10059c-14.9004 -4.5 -23.7998 -19.8994 -20.2002 -35.0996s8.5 -29.9004 14.7002 -43.7998\r\n-c4 -8.90039 -1.90039 -19.3008 -11.6006 -20.2002c-35.8994 -3.40039 -71.5996 -14.9004 -104.8 -33.9004c-12.3994 -7.09961 -27.5 1.60059 -27.5996 16c-0.100586 38.2002 -8 74.9004 -23 107.7c-4 8.90039 2 19.2002 11.7002 20.2002\r\n-c15.1992 1.5 30.3994 4.59961 45.2998 9.09961c14.8994 4.5 23.7998 19.9004 20.2002 35.1006c-3.60059 15.1992 -8.5 29.8994 -14.7002 43.7998c-4 8.89941 1.89941 19.2998 11.5996 20.2002c37.2998 3.5 74.4004 15.8994 108.7 36.1992\r\n-c10.7002 6.40039 23.9004 -1.2998 23.7998 -13.6992zM435 82.4004c9.7002 -1 15.7998 -11.4004 11.5 -20.1006c-15 -32.7002 -22.7998 -69.5 -23 -107.7c0 -14.3994 -15.0996 -23.0996 -27.5996 -16c-33.2002 19 -68.9004 30.5 -104.801 33.9004\r\n-c-9.69922 0.900391 -15.5996 11.2998 -11.5996 20.2002c6.2002 14 11.0996 28.5996 14.7002 43.7998c3.59961 15.2002 -5.2998 30.5996 -20.2002 35.0996c-4.90039 1.5 -9.90039 2.5 -14.7998 3.7002c5.7998 12.2998 6.2998 26.5 0.599609 38.9004\r\n-c-12.8994 28.2998 -19.7002 60.7002 -19.8994 94c0 1.7002 0.199219 3.2998 0.199219 4.89941c-0.0996094 12.3008 13.1006 20 23.8008 13.7002c34.2998 -20.2998 71.3994 -32.7002 108.699 -36.2002c9.7002 -0.899414 15.6006 -11.2998 11.6006 -20.1992\r\n-c-6.2002 -14 -11.1006 -28.6006 -14.7002 -43.8008c-3.59961 -15.1992 5.2998 -30.5996 20.2002 -35.0996c15 -4.40039 30.0996 -7.5 45.2998 -9.09961z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"horse-head\" unicode=\"&#xf7ab;\" \r\n-d=\"M509.8 115.5c4.60059 -11.7998 1.7998 -25.2998 -7.09961 -34.4004l-45.2998 -39.7998c-6 -6 -14.1006 -9.39941 -22.6006 -9.39941h-50.2998c-10.2998 0 -20 4.89941 -26 13.2998l-46 63.8994c-13.7998 -8.09961 -29.5996 -13.1992 -46.7998 -13.1992\r\n-c-39.2002 0 -72.6006 23.6992 -87.4004 57.3994c-2.2998 5.10059 -9 6.2998 -12.8994 2.40039l-12.1006 -12.1006c-2.5 -2.39941 -3.2002 -6.19922 -1.59961 -9.2998c19.7002 -38.8994 58.7002 -66.0996 104.3 -69.5996v-0.700195l40.7998 -81.7002\r\n-c10.7002 -21.2998 -4.7998 -46.2998 -28.5996 -46.2998h-236.2c-17.7002 0 -32 14.2998 -32 32v81.2002c0 159.899 35.9004 275.399 166.9 322.5l202.199 75.7002c4.90039 1.7998 10.7002 -1.10059 12 -6.10059c12.1006 -46.3994 -16.1992 -71.7002 -34.1992 -82.2998\r\n-c42.5996 -8.2002 78.0996 -38 93 -79.2002zM328 224c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"icicles\" unicode=\"&#xf7ad;\" \r\n-d=\"M511.4 410.1l-87.5 -467.699c-1.7002 -8.60059 -14 -8.60059 -15.7002 0l-66.7002 363.8l-45.7998 -172.5c-2.2998 -7.60059 -13 -7.60059 -15.2998 0l-34.1006 133.399l-46.5 -196.899c-1.89941 -8.2998 -13.7002 -8.2998 -15.5996 0l-44.2002 187.3l-36.4004 -124.1\r\n-c-2.39941 -7.2002 -12.5996 -7.2002 -15.0996 0l-87.0996 273.399c-6.2002 20.5 9.19922 41.2002 30.5996 41.2002h448c20 0 35.0996 -18.2002 31.4004 -37.9004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"igloo\" unicode=\"&#xf7ae;\" horiz-adv-x=\"576\" \r\n-d=\"M320 414.1v-126.1h-271.4c51.6006 77.2002 139.601 128 239.4 128c10.7998 0 21.5 -0.700195 32 -1.90039zM96 256v-128h-96c0 46 11.0996 89.4004 30.2998 128h65.7002zM352 408.6c72.7998 -16.5 135.2 -60.5 175.4 -120.6h-175.4v120.6zM480 128v128h65.7002\r\n-c19.2002 -38.5996 30.2998 -82 30.2998 -128h-96zM416 64c0 11.0996 -1.90039 21.7002 -4.5 32h164.5v-96c0 -17.7002 -14.2998 -32 -32 -32h-128v96zM448 256v-128h-49.7998c-22.2002 38.0996 -63 64 -110.2 64s-88 -25.9004 -110.2 -64h-49.7998v128h320zM0 0v96h164.5\r\n-c-2.59961 -10.2998 -4.5 -20.9004 -4.5 -32v-96h-128c-17.7002 0 -32 14.2998 -32 32zM288 160c53 0 96 -43 96 -96v-96h-192v96c0 53 43 96 96 96z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mitten\" unicode=\"&#xf7b5;\" horiz-adv-x=\"448\" \r\n-d=\"M368 32c8.7998 0 16 -7.2002 16 -16v-64c0 -8.7998 -7.2002 -16 -16 -16h-320c-8.7998 0 -16 7.2002 -16 16v64c0 8.7998 7.2002 16 16 16h320zM425 241.1c27.0996 -22.5996 30.7998 -62.8994 8.09961 -90.0996l-72.5 -87h-309l-47.8994 207.6\r\n-c-17.9004 77.5 30.5 154.801 107.899 172.7c77.4004 17.9004 154.801 -30.5 172.801 -108l29.5996 -128.399l20.9004 25c22.5996 27.1992 62.8994 30.7998 90.0996 8.19922z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mug-hot\" unicode=\"&#xf7b6;\" \r\n-d=\"M127.1 301.5c-2.69922 16.5996 -10.3994 31.9004 -22.3994 44.0996c-22.6006 23.1006 -36.7002 52.5 -40.6006 84.4004c-1.09961 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5\r\n-c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM239.1 301.5c-2.69922 16.5996 -10.3994 31.9004 -22.3994 44.0996c-22.6006 23.1006 -36.7002 52.5 -40.6006 84.4004\r\n-c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256\r\n-c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"radiation\" unicode=\"&#xf7b9;\" horiz-adv-x=\"496\" \r\n-d=\"M328.2 192.2c0 28.5996 -15.2002 53.5 -37.7998 67.7998l80.3994 128.4c4.7998 7.69922 15.2998 10.0996 22.7002 4.7998c58.0996 -42 97.4004 -108.4 102.5 -184.2c0.599609 -9.09961 -7.09961 -16.7998 -16.2002 -16.7998h-151.6zM290.4 124.5l80.3994 -128.5\r\n-c4.7998 -7.59961 2.40039 -18.0996 -5.59961 -22.4004c-34.9004 -18.7998 -74.7998 -29.5996 -117.2 -29.5996s-82.2998 10.7998 -117.2 29.5996c-8 4.30078 -10.3994 14.7002 -5.59961 22.4004l80.3994 128.5c12.4004 -7.7002 26.8008 -12.4004 42.4004 -12.4004\r\n-s30.0996 4.7002 42.4004 12.4004zM248 144.2c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM16.2002 192.2c-9.10059 0 -16.7998 7.7002 -16.2002 16.7002c5.09961 75.7998 44.4004 142.199 102.5 184.199\r\n-c7.40039 5.40039 17.9004 2.90039 22.7002 -4.7998l80.3994 -128.399c-22.5996 -14.2002 -37.7998 -39.1006 -37.7998 -67.7002h-151.6z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"radiation-alt\" unicode=\"&#xf7ba;\" horiz-adv-x=\"496\" \r\n-d=\"M312 192c0 22.7998 -12.0996 42.7998 -30.0996 54l41.6992 66.7998c5.2002 8.2998 16.4004 9.90039 24 3.7998c32.5 -26 54.9004 -64.1992 59.5 -107.8c0.900391 -9.09961 -6.7998 -16.7998 -16 -16.7998h-79.0996zM214.2 137.9\r\n-c9.7998 -6.2002 21.5 -9.90039 33.8994 -9.90039c12.4004 0 24 3.7002 33.8008 9.90039l41.7998 -66.9004c4.7998 -7.7998 2.39941 -18.4004 -5.7998 -22.5c-21.2002 -10.4004 -44.8008 -16.5 -69.9004 -16.5s-48.7002 6.09961 -69.7998 16.5\r\n-c-8.2002 4.09961 -10.7002 14.7002 -5.7998 22.5zM104.9 192c-9.2002 0 -17 7.7002 -15.9004 16.9004c4.59961 43.5996 26.9004 81.7998 59.5 107.8c7.59961 6.09961 18.7998 4.5 24 -3.7998l41.7002 -66.8008c-18.1006 -11.2998 -30.2002 -31.2998 -30.2002 -54.0996\r\n-h-79.0996zM248 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM248 376c-101.5 0 -184 -82.5 -184 -184s82.5 -184 184 -184s184 82.5 184 184s-82.5 184 -184 184zM248 160c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\r\n-s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"restroom\" unicode=\"&#xf7bd;\" horiz-adv-x=\"640\" \r\n-d=\"M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5\r\n-h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5\r\n-c14.2998 -1.2002 26.5 -10.7002 29.7998 -24.2002zM336 448c8.7998 0 16 -7.2002 16 -16v-480c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32zM180.1 303.6c24.6006 -2.09961 43.9004 -22.5 43.9004 -47.5996v-136\r\n-c0 -13.2998 -10.7002 -24 -24 -24h-8v-136c0 -13.2998 -10.7002 -24 -24 -24h-80c-13.2998 0 -24 10.7002 -24 24v136h-8c-13.2998 0 -24 10.7002 -24 24v136c0 25.0996 19.2998 45.5 43.9004 47.5996c15 -9.7998 32.8994 -15.5996 52.0996 -15.5996\r\n-s37.0996 5.7998 52.0996 15.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"satellite\" unicode=\"&#xf7bf;\" \r\n-d=\"M502.7 183c12.3994 -12.4004 12.3994 -32.5996 -0.100586 -45l-96.6992 -96.7002c-6.2002 -6.2002 -14.4004 -9.2998 -22.5 -9.2998c-8.10059 0 -16.3008 3.09961 -22.5 9.2998l-80.3008 80.4004l-9.89941 -9.90039c24.2998 -53.7002 22.7002 -116.2 -5.40039 -168.5\r\n-c-4.5 -8.5 -16.3994 -9.59961 -23.2002 -2.7998l-107.5 107.5l-17.7998 -17.7998c0.700195 -2.60059 1.60059 -5 1.60059 -7.7998c0 -17.7002 -14.3008 -32 -32 -32c-17.7002 0 -32 14.2998 -32 32c0 17.6992 14.2998 32 32 32c2.7998 0 5.19922 -0.900391 7.7998 -1.60059\r\n-l17.7998 17.7998l-107.5 107.5c-6.7998 6.80078 -5.7002 18.6006 2.7998 23.2002c52.2998 28.1006 114.8 29.7002 168.5 5.40039l9.7998 9.7998l-80.2998 80.4004c-12.3994 12.5 -12.3994 32.6992 0 45.0996l96.7002 96.7002c6.2002 6.2002 14.2998 9.2998 22.5 9.2998\r\n-s16.2998 -3.09961 22.5996 -9.2998l80.3008 -80.2998l47.7998 47.8994c13.0996 13.1006 34.3994 13.1006 47.5 0l47.5 -47.5c13.0996 -13.0996 13.0996 -34.3994 0 -47.5l-47.7998 -47.8994zM150.7 319.5l68.8994 -68.9004l73.8008 73.8008l-68.9004 68.8994zM383.5 86.7002\r\n-l73.7998 73.7998l-68.8994 68.9004l-73.8008 -73.8008z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"satellite-dish\" unicode=\"&#xf7c0;\" \r\n-d=\"M188.8 102.1l116.601 -116.6c7.39941 -7.2998 6.19922 -20.0996 -3 -25c-77.7002 -41.7998 -176.7 -29.9004 -242.301 35.7002c-65.5996 65.5996 -77.5 164.5 -35.6992 242.3c4.89941 9.09961 17.6992 10.2998 25 3l116.8 -116.8l27.3994 27.3994\r\n-c-0.699219 2.60059 -1.59961 5 -1.59961 7.80078c0 17.6992 14.2998 32 32 32s32 -14.3008 32 -32c0 -17.7002 -14.2998 -32 -32 -32c-2.7998 0 -5.2002 0.899414 -7.7998 1.59961zM209 448c163.2 -8.59961 294.4 -139.8 302.9 -303c0.5 -9.2002 -6.80078 -17 -16 -17\r\n-h-32.1006c-8.39941 0 -15.3994 6.59961 -15.8994 15c-7.5 129.5 -111.5 234.5 -240.9 241.5c-8.40039 0.400391 -15 7.40039 -15 15.9004v31.5996c0 9.2002 7.7998 16.5 17 16zM209.3 352c110.101 -8.5 198.2 -96.5996 206.601 -206.7\r\n-c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.0996 6.40039 -15.8994 14.7002c-6.90039 77 -68.1006 138.899 -144.9 145.2c-8.2998 0.599609 -14.7998 7.5 -14.7998 15.8994v32.1006c0 9.39941 8 16.7998 17.2998 16.0996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sd-card\" unicode=\"&#xf7c2;\" horiz-adv-x=\"384\" \r\n-d=\"M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sim-card\" unicode=\"&#xf7c4;\" horiz-adv-x=\"384\" \r\n-d=\"M0 384c0 35.2998 28.7002 64 64 64h192l128 -128v-320c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v384zM224 192v64h-64v-64h64zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64zM256 64v-64h32c17.7002 0 32 14.2998 32 32v32h-64z\r\n-M160 64v-64h64v64h-64zM64 64v-32c0 -17.7002 14.2998 -32 32 -32h32v64h-64zM64 160v-64h256v64h-256zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skating\" unicode=\"&#xf7c5;\" horiz-adv-x=\"448\" \r\n-d=\"M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961\r\n-c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0\r\n-l67.9004 -67.8994c6.2002 -6.30078 16.3994 -6.2002 22.5996 0zM173.9 171.2c3.7998 -6.10059 8.19922 -11.7998 13.1992 -16.7998l30.2002 -30.2002l-91.8994 -91.9004c-6.2002 -6.2998 -14.4004 -9.39941 -22.6006 -9.39941s-16.3994 3.19922 -22.5996 9.39941\r\n-c-12.5 12.4004 -12.5 32.7002 0 45.2002zM128 288c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h204.6c16.3008 0 30.8008 -9.7002 37 -24.7002c6.2002 -15 2.80078 -32.0996 -8.69922 -43.5996l-82.3008 -82.2998c-0.5 -0.5 -1.19922 -0.700195 -1.69922 -1.10059\r\n-l61 -61c9 -8.89941 14.0996 -21.2998 14.0996 -33.8994v-89.4004c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32v82.7998l-78.2002 78.2002c-12.5996 12.5 -19.3994 29.9004 -18.7002 47.7002c0.700195 17.7002 8.80078 34.5996 22.3008 46.0996l20.0996 17.2002\r\n-h-105.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skiing\" unicode=\"&#xf7c9;\" \r\n-d=\"M432 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM505 -4.09961c9.2998 -9.30078 9.2998 -24.5 0 -33.8008c-17 -17 -39.7998 -26 -63 -26c-12.5996 0 -25.2002 2.60059 -37.0996 8.10059l-391.9 202.5\r\n-c-11.7998 6 -16.4004 20.5 -10.2998 32.2998c6.09961 11.7998 20.5996 16.2998 32.2998 10.2998l197.9 -102.3l45.8994 68.7998l-75.0996 75.2002c-14.2998 14.4004 -20.6006 34.5 -17.7002 54.4004l107 -53.1006l40.4004 -40.5\r\n-c16.1992 -16.0996 18.6992 -41.5996 6 -60.5996l-49.2002 -73.7998l135.8 -70.2002c14.5996 -6.7002 33 -3.40039 45.0996 8.7002c9.30078 9.39941 24.5 9.39941 33.9004 0zM120 356.4l-26.2002 23c-2.2002 1.89941 -2.39941 5.19922 -0.5 7.39941\r\n-c1.2998 1.5 3.2002 2.10059 5 1.7002l34.4004 -7h0.200195l11.0996 21.7002c13.7002 -7 21.2002 -21.1006 20.9004 -35.6006l62.5 -31l81.1992 32.5c43.6006 17.4004 76.4004 -15 84.5 -39.1992l17.1006 -51.2002l52.0996 -26.1006\r\n-c15.7998 -7.89941 22.2002 -27.0996 14.2998 -42.8994c-7.89941 -15.7998 -27 -22.2002 -42.8994 -14.2998l-58.1006 29c-11.3994 5.69922 -20 15.5996 -24 27.6992l-6.39941 19.1006l-32.4004 -13l-114.5 56.7998c0.100586 0.0996094 0.100586 0.200195 0.200195 0.299805\r\n-l-47.2002 23.4004c-11.5996 -9.7002 -28.3994 -12.1006 -42.7998 -4.7998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"skiing-nordic\" unicode=\"&#xf7ca;\" horiz-adv-x=\"576\" \r\n-d=\"M336 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM552 32c13.2002 0 24 -10.7998 24 -24c0 -39.7002 -32.2998 -72 -72 -72h-480c-13.2002 0 -24 10.7002 -24 24s10.7998 24 24 24h42.9004l54.0996 270.8\r\n-c-0.700195 0.799805 -1.7002 1.2002 -2.40039 2.10059c-10.7998 14.0996 -8.09961 34.1992 5.90039 44.8994l39.7002 30.4004c23 17.5996 52.5 23.8994 80.7998 17.0996l71.2002 -21.2002c26.2998 -6.69922 49.2998 -25.3994 61.7998 -50.8994l26.0996 -53.2002h44\r\n-c17.7002 0 32 -14.2998 32 -32c0 -13.4004 -8.39941 -24.9004 -20.0996 -29.5996l-25.5 -178.4h69.5c13.2002 0 24 10.7998 24 24c0 13.2998 10.7998 24 24 24zM291.5 -16l25.5 81.2002l-85 50.2002c-27.5996 16.2998 -38.9004 50.7998 -26.2998 80.2998l37.5 87.3994\r\n-l-14.7002 4.40039c-7.90039 1.90039 -17.5996 -0.200195 -25.2998 -6.09961l-39.7002 -30.4004c-3.59961 -2.7002 -7.59961 -4.59961 -11.7002 -5.59961l-52.2998 -261.4h24.2002l62.5 131.8c7.59961 -10.8994 17.3994 -20.5996 29.5 -27.7998l22 -13l-43.1006 -91h96.9004z\r\n-M402.1 -16l25.2002 176h-33.2998c-18.2002 0 -35.0996 10.5996 -43.0996 26.9004l-20.3008 41.3994l-31.2998 -78.2998l61.2002 -36.0996c18.7002 -11.3008 27.5 -33.6006 21.5996 -54.4004l-23.5996 -75.5h43.5996z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sleigh\" unicode=\"&#xf7cc;\" horiz-adv-x=\"640\" \r\n-d=\"M612.7 97.2998c18.5 -14.7002 28.5996 -37.2002 27.2002 -61c-2.2002 -39 -36.9004 -68.2998 -75.9004 -68.2998h-516c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h519.3c13.6006 0 24.6006 11 24.6006 24.5996c0 7.5 -3.30078 14.5 -9.2002 19.2002\r\n-l-9.2998 7.40039c-6.90039 5.5 -8 15.5996 -2.5 22.5l10 12.5c5.5 6.89941 15.5996 8 22.5 2.5zM32 224v128c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h20.7002c65.7002 0 125.899 -37.2002 155.3 -96s89.5 -96 155.3 -96h20.7002c35.2998 0 64 28.7002 64 64v64h96\r\n-c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32v-96c0 -53 -43 -96 -96 -96v-48h-64v48h-192v-48h-64v52.5c-55.0996 14.2998 -96 63.9004 -96 123.5z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sms\" unicode=\"&#xf7cd;\" \r\n-d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\r\n-c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208zM128.2 144c23.3994 0 42.5 17.2998 42.3994 38.5996c0 10.6006 -4.7998 20.9004 -13.2998 28.1006l-21.8994 18.7998\r\n-c-1.30078 1.09961 -2.10059 2.5 -2.10059 3.7998c0 3.10059 4.40039 6.60059 10.4004 6.60059h12.2998c4.40039 0 8 3.59961 8 8v16c0 4.39941 -3.59961 8 -8 8h-12.2002c-23.3994 0 -42.3994 -17.3008 -42.3994 -38.6006c0 -10.5996 4.7998 -20.8994 13.2998 -28.0996\r\n-l21.8994 -18.7998c1.30078 -1.10059 2.10059 -2.5 2.10059 -3.80078c0 -3.09961 -4.40039 -6.59961 -10.4004 -6.59961h-12.2998c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h12.2002zM320 152v104c0 8.7998 -7.2002 16 -16 16h-16\r\n-c-6 0 -11.5996 -3.40039 -14.2998 -8.7998l-17.7002 -35.4004l-17.7002 35.4004c-2.7002 5.39941 -8.2002 8.7998 -14.2998 8.7998h-16c-8.7998 0 -16 -7.2002 -16 -16v-104c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v68.2002l24.9004 -55.7998\r\n-c2.89941 -5.90039 11.3994 -5.90039 14.2998 0l24.7998 55.7998v-68.2002c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8zM368.3 144c23.4004 0 42.4004 17.2998 42.2998 38.5996c0 10.6006 -4.7998 20.9004 -13.2998 28.1006l-21.8994 18.7998\r\n-c-1.30078 1.09961 -2.10059 2.5 -2.10059 3.7998c0 3.10059 4.40039 6.60059 10.4004 6.60059h12.2998c4.40039 0 8 3.59961 8 8v16c0 4.39941 -3.59961 8 -8 8h-12.2002c-23.3994 0 -42.3994 -17.3008 -42.3994 -38.6006c0 -10.5996 4.7998 -20.8994 13.2998 -28.0996\r\n-l21.8994 -18.7998c1.30078 -1.10059 2.10059 -2.5 2.10059 -3.80078c0 -3.09961 -4.40039 -6.59961 -10.4004 -6.59961h-12.2998c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h12.2998z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snowboarding\" unicode=\"&#xf7ce;\" \r\n-d=\"M432 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM460.8 198.4l-83.5 62.8994l-66 -30.5l52 -39c14.9004 -11.2002 22 -30.2002 18.1006 -48.3994l-21.9004 -102c-2.2002 -10.1006 -9.09961 -17.8008 -17.7998 -21.9004\r\n-l90.7998 -33.0996c9.7002 -3.5 20.2002 -3.10059 29.5 1.2998c12 5.59961 26.2998 0.399414 31.9004 -11.6006c5.59961 -12 0.399414 -26.2998 -11.6006 -31.8994c-11.5996 -5.5 -24 -8.2002 -36.5 -8.2002c-10 0 -20 1.7998 -29.7002 5.2998l-364.8 132.7\r\n-c-21.7998 7.90039 -39.0996 23.7998 -48.8994 44.7998c-5.60059 12 -0.400391 26.2998 11.5996 31.9004c12 5.59961 26.2998 0.399414 31.9004 -11.6006c4.39941 -9.39941 12.0996 -16.5 21.7998 -20l38.7002 -14.0996c-3.80078 3.5 -7 7.7002 -8.7002 12.9004\r\n-c-5.60059 16.7998 3.39941 34.8994 20.2002 40.5l74.0996 24.6992v53.1006c0 24.3994 13.5996 46.2998 35.4004 57.2002l41.1992 20.5996l-16.3994 5.5c-12.1006 4.09961 -22 12.5996 -27.7002 24l-29.0996 58.0996c-7.90039 15.8008 -1.5 35 14.2998 42.9004\r\n-s35 1.5 42.8994 -14.2998l26.1006 -52.1006l63.7002 -21.1992c16.2998 -5.40039 31.5996 -13.5 45.3994 -23.8008l111.4 -83.5c14.2002 -10.5996 17 -30.6992 6.39941 -44.7998c-6.2998 -8.39941 -15.8994 -12.7998 -25.5996 -12.7998\r\n-c-6.7002 0 -13.4004 2.09961 -19.2002 6.40039zM316.4 146.7l-60.5 45.2998v-20.5c0 -20.7002 -13.2002 -39 -32.8008 -45.5l-85 -28.4004c-2.59961 -0.899414 -5.2998 -1.09961 -8 -1.2998l169.4 -61.5996c-2.90039 6.09961 -4.2998 12.8994 -2.7998 20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snowman\" unicode=\"&#xf7d0;\" \r\n-d=\"M510.9 295.7c3.19922 -8.10059 -0.800781 -17.2002 -8.90039 -20.2998l-135.2 -55.2002c0.400391 -4.10059 1.2002 -8 1.2002 -12.2002c0 -10 -1.7002 -19.5 -4.2002 -28.7002c21.1006 -21.3994 36.1006 -48.7998 41.6006 -79\r\n-c11.5 -63.2002 -16.4004 -120.3 -62.9004 -152.6c-10.9004 -7.60059 -23.9004 -11.7002 -37.2002 -11.7002h-99.2002c-11 0 -22 2.2998 -31.2998 8.2002c-42.3994 26.8994 -70.7998 73.7998 -70.7998 127.8c0 41.7998 16.9004 79.5996 44.2998 107.1\r\n-c-2.5 9.30078 -4.2002 18.8008 -4.2002 28.9004c0 4.2002 0.800781 8.2002 1.2002 12.2002l-135.2 55.2002c-8.19922 3.19922 -12.1992 12.2998 -8.89941 20.2998l5.89941 14.5c3.30078 8 12.6006 11.8994 20.8008 8.7002l28.0996 -11.5v29\r\n-c0 8.59961 7.2002 15.5996 16 15.5996h16c8.7998 0 16 -7 15.7998 -15.5996v-46.9004c0 -0.5 -0.200195 -1 -0.299805 -1.5l56.4004 -23c6 10 13.2998 18.9004 22 26.5996c-13.5 16.6006 -22 37.4004 -22 60.5c0 53 43 96 96 96s96 -43 96 -96\r\n-c0 -23.0996 -8.40039 -43.8994 -22 -60.5c8.69922 -7.69922 16.0996 -16.5996 22 -26.5996l56.3994 23c0 0.5 -0.299805 1 -0.299805 1.5v46.9004c0 8.59961 7.2002 15.5996 16 15.5996h16c8.7998 0 16 -7 16 -15.5996v-29l28.2002 11.5\r\n-c8.2002 3.19922 17.5 -0.700195 20.7998 -8.7002zM224 352c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 80c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 144\r\n-c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 208c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 296c0 0 16 23.2002 16 32s-7.2002 16 -16 16s-16 -7.2002 -16 -16s16 -32 16 -32z\r\n-M288 352c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"snowplow\" unicode=\"&#xf7d2;\" horiz-adv-x=\"640\" \r\n-d=\"M120 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM200 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM280 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24\r\n-s-24 10.7002 -24 24s10.7002 24 24 24zM360 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM598.6 22.5996l36.7002 -36.6992c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006l-22.5996 -22.5996\r\n-c-6.2002 -6.2002 -16.4004 -6.2002 -22.6006 0l-36.6992 36.7002c-26.5 26.5 -41.4004 62.3994 -41.4004 99.8994v18.7002h-43.2002c7 -14.5996 11.2002 -30.7002 11.2002 -48c0 -61.9004 -50.0996 -112 -112 -112h-256c-61.9004 0 -112 50.0996 -112 112\r\n-c0 44.5996 26.2998 82.7998 64 100.8v91.2002c0 26.5 21.5 48 48 48h16v112c0 26.5 21.5 48 48 48h144.3c19.2998 0 36.6006 -11.4004 44.2002 -29.0996l78.2998 -182.801c3.40039 -8 5.2002 -16.5 5.2002 -25.1992v-50.9004h64v18.7002\r\n-c0 37.5 14.9004 73.3994 41.4004 99.8994l36.6992 36.7002c6.2002 6.2002 16.4004 6.2002 22.6006 0l22.5996 -22.5996c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006l-36.7002 -36.6992c-14.5 -14.5 -22.5996 -34.1006 -22.5996 -54.6006v-101.6\r\n-c0 -20.5 8.09961 -40.1006 22.5996 -54.6006zM192 384v-96l64 -64h122.4l-68.6006 160h-117.8zM368 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-256c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48h256z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tenge\" unicode=\"&#xf7d7;\" horiz-adv-x=\"384\" \r\n-d=\"M372 288c6.59961 0 12 -5.40039 12 -12v-56c0 -6.59961 -5.40039 -12 -12 -12h-140v-228c0 -6.59961 -5.40039 -12 -12 -12h-56c-6.59961 0 -12 5.40039 -12 12v228h-140c-6.59961 0 -12 5.40039 -12 12v56c0 6.59961 5.40039 12 12 12h360zM372 416\r\n-c6.59961 0 12 -5.40039 12 -12v-56c0 -6.59961 -5.40039 -12 -12 -12h-360c-6.59961 0 -12 5.40039 -12 12v56c0 6.59961 5.40039 12 12 12h360z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"toilet\" unicode=\"&#xf7d8;\" horiz-adv-x=\"384\" \r\n-d=\"M368 400h-16v-156.7c20.2002 -10.0996 32 -22.2002 32 -35.2998c0 -67.2002 -34.5996 -126.2 -86.7998 -160.5l21.3994 -70.2002c6.30078 -20.5 -9.09961 -41.2998 -30.5996 -41.2998h-192c-21.5 0 -36.9004 20.7998 -30.5996 41.2998l21.3994 70.2002\r\n-c-52.2002 34.2998 -86.7998 93.2998 -86.7998 160.5c0 13.0996 11.7998 25.2002 32 35.2998v156.7h-16c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h352c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16zM80 376v-16\r\n-c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8zM192 176c77.0996 0 139.6 14.2998 139.6 32s-62.5 32 -139.6 32s-139.6 -14.2998 -139.6 -32s62.5 -32 139.6 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tools\" unicode=\"&#xf7d9;\" \r\n-d=\"M501.1 52.2998c14.5 -14.5 14.5 -38.0996 0 -52.7002l-52.6992 -52.6992c-14.5 -14.6006 -38.1006 -14.6006 -52.7002 0l-117.101 117.1c-23.0996 23.0996 -27.5 57.5996 -13.8994 85.4004l-106.601 106.6h-62.0996l-96 128l64 64l128 -96v-62.0996l106.6 -106.601\r\n-c27.8008 13.7002 62.3008 9.2002 85.4004 -13.8994zM331.7 223c-8.2002 0 -16.6006 -1 -24.7002 -2.90039l-82.0996 82.1006c-0.700195 37.5 12.6992 75.0996 41.1992 103.6c37 37 89.2002 49.6006 136.601 37.9004c9.09961 -2.2998 12.2998 -13.6006 5.7002 -20.2002\r\n-l-74.4004 -74.4004l11.2998 -67.8994l67.9004 -11.2998l74.3994 74.3994c6.60059 6.60059 17.9004 3.5 20.1006 -5.5c11.7998 -47.3994 -0.799805 -99.5996 -37.9004 -136.7c-13 -13 -28 -22.5996 -43.7998 -29.5l-19.4004 19.4004c-20 20 -46.5996 31 -74.8994 31z\r\n-M227.8 141c-4.89941 -21.0996 -2.59961 -42.7998 5 -62.7002l-123.6 -123.6c-25 -25 -65.5 -25 -90.5 0s-25 65.5 0 90.5l152.399 152.5zM64 -24c13.2998 0 24 10.7998 24 24c0 13.2998 -10.7002 24 -24 24s-24 -10.7002 -24 -24c0 -13.2002 10.7998 -24 24 -24z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"tram\" unicode=\"&#xf7da;\" \r\n-d=\"M288 384c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM511.5 396.1c2.2002 -8.5 -2.7998 -17.2998 -11.4004 -19.5996l-228.1 -60.7998v-91.7002h176c17.7002 0 32 -14.2998 32 -32v-224c0 -17.7002 -14.2998 -32 -32 -32\r\n-h-384c-17.7002 0 -32 14.2998 -32 32v224c0 17.7002 14.2998 32 32 32h176v83.2002l-219.9 -58.7002c-1.2998 -0.299805 -2.69922 -0.5 -4.09961 -0.5c-7.09961 0 -13.5 4.7002 -15.4004 11.7998c-2.2998 8.60059 2.80078 17.2998 11.3008 19.6006l480 128\r\n-c8.59961 2.2998 17.2998 -2.7002 19.5996 -11.3008zM176 64v96h-96v-96h96zM336 160v-96h96v96h-96zM304 160h-96v-96h96v96zM192 352c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fire-alt\" unicode=\"&#xf7e4;\" horiz-adv-x=\"448\" \r\n-d=\"M323.56 396.8c72.46 -67.2598 124.44 -177.13 124.44 -230.399c0 -127.25 -100.29 -230.4 -224 -230.4s-224 103.15 -224 230.4c0 71.6396 69.7402 190.43 168 281.6c38.2803 -35.5303 72.0801 -73.6201 99.3398 -111.17\r\n-c16.6406 20.3799 35.4199 40.6699 56.2197 59.9697zM304.09 56.1504c49.2402 34.4492 60.7803 101.229 33.4297 153.42c-3.35938 6.41992 -7.12988 13.1201 -11.2695 19.9697l-58.6299 -66.8799s-91.9004 117.359 -98.8301 125.34\r\n-c-48.4805 -58.1201 -72.79 -92.1396 -72.79 -130.75c0 -77.5098 58.71 -125.25 130.86 -125.25c28.8594 0 55.5693 8.99023 77.2295 24.1504z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bacon\" unicode=\"&#xf7e5;\" horiz-adv-x=\"576\" \r\n-d=\"M218.92 111.61c-34.8604 -34.8799 -59.6504 -44.1602 -85.9199 -54c-26 -9.76074 -53 -20.1299 -88.1699 -52.7305l-35.7598 35.5098c-12.7002 12.6104 -12.0703 33.6104 1.79004 45.0605c36.3398 29.9795 66.21 41.0996 91.0693 50.3594\r\n-c9.16992 3.41016 68.9707 19.2607 98.7207 98.0908c8.60938 22.8096 46.3496 134.58 188.979 187.72c15.8506 5.91016 27.3604 10.2002 41 20.2998c4.53516 3.35449 12.7939 6.07617 18.4346 6.07617c7.00879 0 16.751 -3.98926 21.7451 -8.90625l37.6709 -37.3896\r\n-c-30.1504 -27.6904 -52.9102 -36.3701 -76.79 -45.3701c-28.3008 -10.6104 -57.5703 -21.5801 -97.3506 -61.3799s-50.7598 -69.0498 -61.3701 -97.3398c-9.84961 -26.3008 -19.1602 -51.1104 -54.0498 -86zM566.92 343.61\r\n-c12.7002 -12.5996 12.0801 -33.6602 -1.80957 -45.0605c-36.3701 -30.0098 -66.2402 -41.1396 -91.1104 -50.4102c-9.2002 -3.43945 -69 -19.3193 -98.7305 -98.1094c-8.93945 -23.5898 -46.7393 -134.69 -188.939 -187.69\r\n-c-15.8496 -5.89941 -27.3398 -10.1797 -40.9404 -20.2402c-4.53613 -3.35645 -12.7969 -6.08008 -18.4395 -6.08008c-7.00586 0 -16.7461 3.9873 -21.7402 8.90039l-37.6797 37.4297c30.1094 27.6699 52.8594 36.3301 76.7197 45.3301\r\n-c28.2998 10.5898 57.5098 21.54 97.2998 61.3203s50.7803 69 61.4199 97.3301c9.81055 26.3096 19.1104 51.1602 54 86c34.8906 34.8398 59.6904 44.1504 85.9502 54c26.0703 9.79004 53.0605 20.1602 88.25 52.79z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"book-medical\" unicode=\"&#xf7e6;\" horiz-adv-x=\"448\" \r\n-d=\"M448 89.5996c0 -9.59961 -3.2002 -15.999 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\r\n-c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM144 280v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8v48c0 4.41602 -3.58398 8 -8 8h-56v56\r\n-c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8v-56h-56c-4.41602 0 -8 -3.58398 -8 -8zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"bread-slice\" unicode=\"&#xf7ec;\" horiz-adv-x=\"576\" \r\n-d=\"M288 448c180 0 288 -93.4004 288 -169.14c0 -30.3008 -24.2402 -54.8604 -64 -54.8604v-256c0 -17.6699 -16.1201 -32 -36 -32h-376c-19.8799 0 -36 14.3301 -36 32v256c-39.7598 0 -64 24.5596 -64 54.8604c0 75.7393 108 169.14 288 169.14z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"cheese\" unicode=\"&#xf7ef;\" \r\n-d=\"M0 160h512v-160c0 -17.6641 -14.3359 -32 -32 -32h-448c-17.6641 0 -32 14.3359 -32 32v160zM299.83 416c118.17 -6.2002 212.17 -104.11 212.17 -224h-512l278.7 217c4.83984 3.875 13.7998 7.01953 20 7.01953c0.311523 0 0.818359 -0.00878906 1.12988 -0.0195312z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"clinic-medical\" unicode=\"&#xf7f2;\" horiz-adv-x=\"576\" \r\n-d=\"M288 333l218.74 -192.9c1.54004 -1.37988 3.55957 -2.04004 5.25977 -3.19922v-184.9c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v184.94c1.78027 1.20996 3.84961 1.88965 5.46973 3.34961zM384 72v48c0 4.41602 -3.58398 8 -8 8h-56v56\r\n-c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8v-56h-56c-4.41602 0 -8 -3.58398 -8 -8v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8zM570.69 211.72\r\n-c2.93066 -2.63184 5.31055 -7.96484 5.31055 -11.9053c0 -3.38086 -1.83301 -8.16797 -4.09082 -10.6846l-21.4004 -23.8203c-2.63184 -2.93066 -7.96484 -5.30957 -11.9043 -5.30957c-3.38574 0 -8.17773 1.83691 -10.6953 4.09961l-229.32 202.271\r\n-c-2.50391 2.20898 -7.24609 4.00195 -10.585 4.00195s-8.08105 -1.79297 -10.585 -4.00195l-229.32 -202.28c-2.51758 -2.2627 -7.30957 -4.09961 -10.6953 -4.09961c-3.93848 0 -9.27246 2.37891 -11.9043 5.30957l-21.4102 23.8203\r\n-c-2.2627 2.51758 -4.09961 7.30957 -4.09961 10.6953c0 3.93945 2.37891 9.27246 5.30957 11.9043l256 226c6.2832 5.68066 18.2559 10.29 26.7256 10.29c8.46875 0 20.4424 -4.60938 26.7246 -10.29z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"comment-medical\" unicode=\"&#xf7f5;\" \r\n-d=\"M256 416c141.39 0 256 -93.1201 256 -208s-114.61 -208 -256 -208h-0.473633c-30.4814 0 -78.3838 8.68164 -106.927 19.3799c-24.5996 -19.6299 -74.3398 -51.3799 -140.6 -51.3799c-4.41113 0.00488281 -7.99023 3.58887 -7.99023 8\r\n-c0 1.75879 0.981445 4.22266 2.19043 5.5c0.5 0.5 42.2598 45.4502 54.7998 95.7598c-35.5898 35.7402 -57 81.1807 -57 130.74c0 114.88 114.62 208 256 208zM352 184v48c0 4.41602 -3.58398 8 -8 8h-56v56c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8\r\n-v-56h-56c-4.41602 0 -8 -3.58398 -8 -8v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"crutch\" unicode=\"&#xf7f7;\" \r\n-d=\"M507.31 262.29c2.56348 -2.58301 4.64355 -7.63184 4.64355 -11.2695c0 -3.66602 -2.10742 -8.74219 -4.70312 -11.3301l-22.6201 -22.6309c-2.58691 -2.58691 -7.65625 -4.6875 -11.3145 -4.6875c-3.65918 0 -8.72852 2.10059 -11.3154 4.6875l-181 181\r\n-c-2.58789 2.58691 -4.6875 7.65625 -4.6875 11.3154s2.09961 8.72852 4.6875 11.3154l22.6904 22.5996c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM327.77 195.88l55.1006 55.1201l45.25 -45.2695l-109.68 -109.681\r\n-c-10.7441 -10.748 -31.4814 -22.2393 -46.29 -25.6494l-120.25 -27.75l-102 -102c-2.58691 -2.58789 -7.65625 -4.6875 -11.3154 -4.6875s-8.72754 2.09961 -11.3154 4.6875l-22.6191 22.6191c-2.58789 2.58789 -4.6875 7.65625 -4.6875 11.3154\r\n-s2.09961 8.72852 4.6875 11.3154l102 102l27.7393 120.26c3.4248 14.8057 14.9248 35.5439 25.6699 46.29l109.671 109.67l45.25 -45.25l-55.1006 -55.1006zM273.2 141.31l9.30957 9.31055l-67.8896 67.8896l-9.31055 -9.30957\r\n-c-3.57715 -3.59082 -7.41211 -10.5127 -8.55957 -15.4502l-18.2998 -79.2998l79.2998 18.3193c4.94043 1.13379 11.8623 4.95996 15.4502 8.54004z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"egg\" unicode=\"&#xf7fb;\" horiz-adv-x=\"384\" \r\n-d=\"M192 448c106 0 192 -214 192 -320s-86 -192 -192 -192s-192 86 -192 192s86 320 192 320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hamburger\" unicode=\"&#xf805;\" \r\n-d=\"M464 192c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48h-416c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48h416zM480 64c8.83203 0 16 -7.16797 16 -16v-16c0 -35.3281 -28.6719 -64 -64 -64h-352c-35.3281 0 -64 28.6719 -64 64v16\r\n-c0 8.83203 7.16797 16 16 16h448zM58.6396 224c-34.5693 0 -54.6396 43.9102 -34.8193 75.8896c40.1797 64.9102 128.64 116.011 232.18 116.11c103.55 -0.0996094 192 -51.2002 232.18 -116.12c19.8008 -31.9795 -0.25 -75.8799 -34.8193 -75.8799h-394.721zM384 336\r\n-c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16s16 7.16797 16 16s-7.16797 16 -16 16zM256 368c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16s16 7.16797 16 16s-7.16797 16 -16 16zM128 336c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16\r\n-s16 7.16797 16 16s-7.16797 16 -16 16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hand-middle-finger\" unicode=\"&#xf806;\" \r\n-d=\"M479.93 130.88l0.0703125 -82.8799v0c0 -61.7969 -50.1533 -111.973 -111.95 -112h-215c-25.6074 0.00292969 -61.084 14.7012 -79.1895 32.8096l-30.9307 30.9307c-6.0332 6.03223 -10.9297 17.8525 -10.9297 26.3838v0.00585938v73.4697v0.00292969\r\n-c0 12.7383 9.24707 27.7002 20.6396 33.3975l27.3604 15v-76c0 -4.41602 3.58398 -8 8 -8s8 3.58398 8 8v147.04c0 15.2598 12.8701 28.3799 30.8701 31.3799l30.6797 5.12012c17.8203 2.96973 34.4502 -8.38965 34.4502 -23.54v-32c0 -4.41602 3.58398 -8 8 -8\r\n-s8 3.58398 8 8v200v0.0224609c0 26.4961 21.5039 48 48 48c0.408203 0 1.07129 -0.00976562 1.48047 -0.0224609c26.2695 -0.799805 46.5195 -23.7197 46.5195 -50v-198c0 -4.41602 3.58398 -8 8 -8s8 3.58398 8 8v32c0 15.1396 16.6299 26.5 34.4502 23.5303\r\n-l38.3994 -6.40039c13.46 -2.25 23.1504 -12.0996 23.1504 -23.54v-49.5898l35.6504 -8.92969c15.5986 -3.89844 28.2686 -20.1113 28.2793 -36.1904z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hard-hat\" unicode=\"&#xf807;\" \r\n-d=\"M480 160v-64h-448v64c0 80.25 49.2803 148.92 119.19 177.62l40.8096 -81.6201v112c0 8.83203 7.16797 16 16 16h96c8.83203 0 16 -7.16797 16 -16v-112l40.8096 81.6201c69.9102 -28.7002 119.19 -97.3701 119.19 -177.62zM496 64c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h480z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hotdog\" unicode=\"&#xf80f;\" \r\n-d=\"M488.56 424.56c12.9297 -12.9326 23.4238 -38.2715 23.4238 -56.5596s-10.4941 -43.627 -23.4238 -56.5596l-352 -352c-13.0205 -13.4824 -38.7998 -24.4238 -57.543 -24.4238c-44.1592 0 -80 35.8408 -80 80c0 18.7432 10.9414 44.5225 24.4238 57.543l352 352\r\n-c12.9326 12.9297 38.2715 23.4238 56.5596 23.4238s43.627 -10.4941 56.5596 -23.4238zM438.63 329.37c2.58691 2.58691 4.68652 7.65625 4.68652 11.3145c0 8.83301 -7.16797 16.002 -16.001 16.002c-3.65918 0 -8.72852 -2.09961 -11.3154 -4.68652\r\n-c-12.4102 -12.4102 -21.7598 -14 -34.71 -16.2305c-14.4004 -2.46973 -32.3203 -5.55957 -51.9199 -25.1494c-19.6006 -19.5898 -22.6699 -37.5205 -25.1396 -51.9199c-2.24023 -12.9502 -3.84082 -22.3105 -16.2402 -34.71\r\n-c-12.4004 -12.4004 -21.7002 -14.0098 -34.7002 -16.2305c-14.4004 -2.46973 -32.3203 -5.5498 -51.9199 -25.1396c-19.6006 -19.5898 -22.6699 -37.5205 -25.1504 -51.9199c-2.21973 -12.9502 -3.80957 -22.29 -16.2197 -34.7002s-21.71 -14.0098 -34.71 -16.2305\r\n-c-14.4004 -2.46973 -32.3203 -5.5498 -51.9199 -25.1396c-2.58691 -2.58691 -4.68652 -7.65625 -4.68652 -11.3145c0 -8.83301 7.16797 -16.002 16.001 -16.002c3.65918 0 8.72852 2.09961 11.3154 4.68652c12.4004 12.4004 21.7598 14 34.7002 16.2305\r\n-c14.3994 2.46973 32.3301 5.55957 51.9297 25.1494c19.6006 19.5898 22.6699 37.5205 25.1396 51.9199c2.23047 12.9502 3.83008 22.2998 16.2305 34.7002s21.75 14 34.7002 16.2197c14.3994 2.48047 32.3193 5.56055 51.9199 25.1504\r\n-c19.5996 19.5898 22.6699 37.5195 25.1494 51.9199c2.23047 12.9502 3.83008 22.3096 16.2305 34.71s21.7598 14 34.7002 16.2305c14.4102 2.46973 32.3301 5.5498 51.9297 25.1396zM31.4404 125.82l-11.5508 11.5498c-24.9893 24.9902 -26.6592 63.8398 -3.71973 86.7803\r\n-l207.68 207.68c22.9404 22.9395 61.79 21.2803 86.79 -3.71973l11.54 -11.5508zM480.56 258.18l11.5508 -11.54c24.9893 -25 26.6592 -63.8496 3.71973 -86.79l-207.68 -207.68c-22.9404 -22.9395 -61.79 -21.2803 -86.79 3.71973l-11.54 11.5508z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"ice-cream\" unicode=\"&#xf810;\" horiz-adv-x=\"448\" \r\n-d=\"M368 288c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48h0.94043c-0.519531 4.51855 -0.94043 11.8779 -0.94043 16.4268c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144\r\n-c0 -4.54883 -0.420898 -11.9082 -0.94043 -16.4268h0.94043zM195.38 -45.6904l-99.3799 205.69h256l-99.3799 -205.69c-4.66504 -10.1084 -17.4863 -18.3135 -28.6201 -18.3135s-23.9551 8.20508 -28.6201 18.3135z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"laptop-medical\" unicode=\"&#xf812;\" horiz-adv-x=\"640\" \r\n-d=\"M232 224c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h56v56c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8v-56h56c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-56v-56c0 -4.41602 -3.58398 -8 -8 -8h-48\r\n-c-4.41602 0 -8 3.58398 -8 8v56h-56zM576 400v-336h-512v336c0.0771484 26.4189 21.5811 47.9229 48 48h416c26.4189 -0.0771484 47.9229 -21.5811 48 -48zM512 128v256h-384v-256h384zM624 32c8.83203 0 16 -7.16797 16 -16v-16\r\n-c-0.104492 -35.2236 -28.7764 -63.8955 -64 -64h-512c-35.2236 0.104492 -63.8955 28.7764 -64 64v16c0 8.83203 7.16797 16 16 16h239.23c-0.230469 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pager\" unicode=\"&#xf815;\" \r\n-d=\"M448 384c35.3281 0 64 -28.6719 64 -64v-256c0 -35.3281 -28.6719 -64 -64 -64h-384c-35.3281 0 -64 28.6719 -64 64v256c0 35.3281 28.6719 64 64 64h384zM160 80v48h-80c-8.83203 0 -16 -7.16797 -16 -16v-16c0 -8.83203 7.16797 -16 16 -16h80zM288 96v16\r\n-c0 8.83203 -7.16797 16 -16 16h-80v-48h80c8.83203 0 16 7.16797 16 16zM448 224v64c0 17.6641 -14.3359 32 -32 32h-320c-17.6641 0 -32 -14.3359 -32 -32v-64c0 -17.6641 14.3359 -32 32 -32h320c17.6641 0 32 14.3359 32 32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pepper-hot\" unicode=\"&#xf816;\" \r\n-d=\"M330.67 184.88h107.46l37.0498 -38.54c-48.5293 -87.4697 -206.54 -210.34 -419.18 -210.34c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56c141.58 0 163.44 181.24 221.92 250.82l52.75 -24.2207v-89.7197zM461.76 313.25\r\n-c27.7324 -25.2861 50.2402 -76.2676 50.2402 -113.798v-0.142578c0 -13.6797 -2.2998 -26.6895 -5.55957 -39.3096l-54.6807 56.8799h-89.0898v78.2402l-74.6699 34.29c22.3398 14.0498 48.3398 22.5898 76.3398 22.5898\r\n-c16.4658 -0.00683594 42.0732 -5.36523 57.1602 -11.96c18.4502 37.2197 8.25977 61.96 1.40039 72.3203c-0.787109 1.14062 -1.42578 3.19043 -1.42578 4.57617c0 1.82227 1.03711 4.35449 2.31543 5.65332l22.9004 23c1.29688 1.31836 3.85156 2.38867 5.70117 2.38867\r\n-c2.1123 0 4.90234 -1.33398 6.22852 -2.97852c18.5596 -23.4805 35.2998 -71.9102 3.13965 -131.75z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"pizza-slice\" unicode=\"&#xf818;\" \r\n-d=\"M158.87 447.85c181.91 -17.1699 332.02 -164.93 352.899 -345.71c1.87012 -16.2197 -7.89941 -31.54 -23.6191 -35.8994l-56.9404 -15.7803c-7.94043 186.39 -134.86 311.51 -322.479 317l14.8096 56.2705c4.12988 15.6992 19.1699 25.6396 35.3301 24.1191z\r\n-M100.4 335.85c176.069 -1.95996 294.88 -119.25 299.149 -294.14l-379 -105.1c-1.1709 -0.324219 -3.1084 -0.587891 -4.32422 -0.587891c-8.94824 0 -16.21 7.26172 -16.21 16.21c0 1.1582 0.239258 3.00781 0.53418 4.12793zM128 32c17.6641 0 32 14.3359 32 32\r\n-s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32zM176 184c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32zM280 80c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash-restore\" unicode=\"&#xf829;\" horiz-adv-x=\"448\" \r\n-d=\"M53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.55469 -24.8369 -23.0146 -44.9971 -47.8994 -45h-245.801c-24.8848 0.00292969 -46.3447 20.1631 -47.8994 45zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112\r\n-c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16v112h57.3701c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.52441 2.72949 -7.5918 4.94336 -11.3096 4.94336s-8.78516 -2.21387 -11.3096 -4.94336zM432 416\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781\r\n-c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"trash-restore-alt\" unicode=\"&#xf82a;\" horiz-adv-x=\"448\" \r\n-d=\"M32 -16v336h384v-336c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16v112h57.3701\r\n-c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.52441 2.72949 -7.5918 4.94336 -11.3096 4.94336s-8.78516 -2.21387 -11.3096 -4.94336zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\r\n-v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"user-nurse\" unicode=\"&#xf82f;\" horiz-adv-x=\"448\" \r\n-d=\"M57.7803 160c-8.82227 0.00976562 -15.9814 7.17773 -15.9814 16c0 2.09277 0.761719 5.30957 1.70117 7.17969c15.2305 29.8203 31.2803 62.2305 42.1699 95.54c7.58008 23.1904 10.3301 47.6904 10.3301 72.0801v49.2002l128 48l128 -48v-49.2002\r\n-c0 -24.3896 2.78027 -48.8896 10.3496 -72.0801c10.8701 -33.3096 26.9199 -65.6895 42.1504 -95.54c0.939453 -1.87012 1.70117 -5.08691 1.70117 -7.17969c0 -8.82227 -7.15918 -15.9902 -15.9814 -16h-82.3594c-22.5107 -19.6797 -51.6201 -32 -83.8604 -32\r\n-s-61.3496 12.3203 -83.8604 32h-82.3594zM184 376.33v-16.6602c0 -2.75977 2.24023 -5 5 -5h21.6699v-21.6699c0 -2.75977 2.24023 -5 5 -5h16.6602c2.75977 0 5 2.24023 5 5v21.6699h21.6699c2.75977 0 5 2.24023 5 5v16.6602c0 2.75977 -2.24023 5 -5 5h-21.6699v21.6699\r\n-c0 2.75977 -2.24023 5 -5 5h-16.6602c-2.75977 0 -5 -2.24023 -5 -5v-21.6699h-21.6699c-2.75977 0 -5 -2.24023 -5 -5zM144 288v-32c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v32h-160zM319.41 128c71.4902 -3.09961 128.59 -61.5996 128.59 -133.79\r\n-c0 -32.1318 -26.0781 -58.21 -58.21 -58.21v0h-331.58c-32.1318 0 -58.21 26.0781 -58.21 58.21c0 72.1904 57.0996 130.69 128.59 133.79l95.4102 -95.3896z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"wave-square\" unicode=\"&#xf83e;\" horiz-adv-x=\"640\" \r\n-d=\"M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156\r\n-c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"biking\" unicode=\"&#xf84a;\" horiz-adv-x=\"640\" \r\n-d=\"M400 352c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48s48 -21.5039 48 -48s-21.5039 -48 -48 -48zM396 231l-41.3604 33.1104l-58.25 -49.9199l41.3604 -27.5703c7.86426 -5.24316 14.248 -17.1689 14.25 -26.6201v-128c0 -17.6641 -14.3359 -32 -32 -32\r\n-s-32 14.3359 -32 32v110.88l-81.7305 54.5205c-7.86621 5.24316 -14.251 17.1719 -14.251 26.626c0 8.12305 5.00488 19.0068 11.1719 24.2939l112 96c4.95508 4.25781 14.2803 7.71289 20.8135 7.71289c6.20215 0 15.1602 -3.15039 19.9961 -7.0332l71.2197 -57h52.7803\r\n-c17.6641 0 32 -14.3359 32 -32s-14.3359 -32 -32 -32h-64h-0.0595703c-6.18262 0 -15.1152 3.13574 -19.9404 7zM512 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM512 0c35.3281 0 64 28.6719 64 64\r\n-s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64zM128 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM128 0c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64\r\n-s28.6719 -64 64 -64z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"border-all\" unicode=\"&#xf84c;\" horiz-adv-x=\"448\" \r\n-d=\"M416 416c17.6641 0 32 -14.3359 32 -32v-384c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v384c0 17.6641 14.3359 32 32 32h384zM384 352h-128v-128h128v128zM192 352h-128v-128h128v128zM64 32h128v128h-128v-128zM256 32h128v128h-128v-128z\r\n-\" \u002F>\r\n-    \u003Cglyph glyph-name=\"border-none\" unicode=\"&#xf850;\" horiz-adv-x=\"448\" \r\n-d=\"M240 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h32zM240 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 416c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h32zM48 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 416c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"border-style\" unicode=\"&#xf853;\" horiz-adv-x=\"448\" \r\n-d=\"M240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\r\n-c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-368v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v400c0 17.6641 14.3359 32 32 32h400z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"fan\" unicode=\"&#xf863;\" \r\n-d=\"M352.57 320c81.79 0 149.3 -61.6299 159.3 -141.33c1.30957 -10.4795 -7.17969 -19.6396 -17.6201 -18.5898l-123.11 12.4102c8.34082 -22.9707 12.8604 -48.9707 12.8604 -77.0605c0 -81.79 -61.6299 -149.3 -141.33 -159.3\r\n-c-10.4795 -1.30957 -19.6396 7.19043 -18.5898 17.6201l12.4102 123.11c-22.9707 -8.34082 -48.9707 -12.8604 -77.0605 -12.8604c-81.79 0 -149.3 61.6299 -159.3 141.33c-1.30957 10.4795 7.17969 19.6699 17.6201 18.5898l123.11 -12.4102\r\n-c-8.34082 22.9707 -12.8604 48.9707 -12.8604 77.0605c0 81.79 61.6299 149.3 141.33 159.3c10.4795 1.30957 19.6699 -7.17969 18.5898 -17.6201l-12.4102 -123.11c22.9707 8.34082 48.9707 12.8604 77.0605 12.8604zM256 160c17.6641 0 32 14.3359 32 32\r\n-s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"icons\" unicode=\"&#xf86d;\" \r\n-d=\"M116.65 228.65l-96.79 99.8301c-28 29.0293 -26.4102 77.0996 5 103.88c27.3896 23.3398 68.1895 19.1396 93.29 -6.80078l9.84961 -10.1396l9.86035 10.1396c25.1396 25.9404 65.8896 30.1406 93.2793 6.80078c31.4102 -26.7803 33.0605 -74.8799 4.91016 -103.88\r\n-l-96.75 -99.8301c-2.55566 -2.66992 -7.62891 -4.83594 -11.3252 -4.83594c-3.69531 0 -8.76855 2.16602 -11.3242 4.83594zM260.57 128.16c15.1406 -0.0107422 27.4297 -12.3086 27.4297 -27.4502v-0.00976562v-137.25v0c0 -15.1416 -12.2891 -27.4395 -27.4297 -27.4502\r\n-h-233.141c-15.1406 0.00585938 -27.4297 12.2988 -27.4297 27.4404v0.00976562v137.25v0.00976562c0 15.1523 12.2979 27.4502 27.4502 27.4502h0.00976562h48l7 14.2402c3.67773 9.81445 15.168 17.7793 25.6484 17.7793h0.0117188h71.71h0.0107422\r\n-c10.4814 0 21.9717 -7.96484 25.6494 -17.7793l7.08008 -14.2402h48zM144 -20c28.7041 0 52 23.2959 52 52s-23.2959 52 -52 52s-52 -23.2959 -52 -52s23.2959 -52 52 -52zM499.4 95.9004c9.70996 0 15.75 -8.79004 10.8691 -15.7002l-92.3994 -138.91\r\n-c-2.19629 -2.90039 -6.93262 -5.25488 -10.5713 -5.25488c-0.0957031 0 -0.25293 0.00195312 -0.348633 0.00488281c-8.03027 0 -14.1201 6.25 -12.2305 12.9004l24.2002 83h-62.3096c-7.62012 0 -13.5 5.58984 -12.5 11.8896l16.7998 106.93\r\n-c0.839844 5.2002 6.2002 9.10059 12.5 9.10059h75.5898c8.25 0 14.2803 -6.56055 12.1797 -13.21l-22.3594 -50.75h60.5801zM478.08 447.67c17.9199 2.75 33.9199 -12.1895 33.9199 -31.6699v-144.26c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602\r\n-c-35.3496 0 -64 21.4795 -64 48c0 26.5195 28.6504 48 64 48c4.46191 -0.0400391 11.6299 -0.801758 16 -1.7002v47.1797l-112 -17.2197v-108.58c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602c-35.3496 0 -64 21.4805 -64 48c0 26.5205 28.6504 48 64 48\r\n-c4.46191 -0.0400391 11.6299 -0.801758 16 -1.69922v106.77c0 15.9102 10.8701 29.4102 25.5098 31.6602z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone-alt\" unicode=\"&#xf879;\" \r\n-d=\"M497.39 86.2002c8.06055 -3.50586 14.6016 -13.4844 14.6016 -22.2744c0 -1.48828 -0.264648 -3.87402 -0.59082 -5.32617l-24 -104c-2.37109 -10.2666 -12.8477 -18.5996 -23.3848 -18.5996h-0.015625c-256.1 0 -464 207.5 -464 464v0.00585938\r\n-c0 10.5371 8.33301 21.0137 18.5996 23.3838l104 24c1.45996 0.332031 3.8584 0.601562 5.35547 0.601562c8.73242 0 18.6533 -6.49707 22.1445 -14.501l48 -112c1.06836 -2.49219 1.93457 -6.71582 1.93457 -9.42773c0 -6.28613 -3.95801 -14.6064 -8.83398 -18.5723\r\n-l-60.6006 -49.6006c31.3398 -66.4688 110.721 -145.85 177.19 -177.189l49.5996 60.5996c3.97559 4.86914 12.3047 8.82129 18.5908 8.82129c2.70508 0 6.9209 -0.860352 9.40918 -1.9209z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"phone-square-alt\" unicode=\"&#xf87b;\" horiz-adv-x=\"448\" \r\n-d=\"M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352zM383.61 108.63c0.198242 0.919922 0.373047 2.42969 0.389648 3.37012\r\n-c-0.262695 5.28613 -4.33496 11.4648 -9.08984 13.79l-70 30c-1.57422 0.613281 -4.22168 1.15527 -5.91016 1.20996c-3.82422 -0.209961 -9.02539 -2.67383 -11.6104 -5.5l-31 -37.8896c-41.5469 19.6025 -91.1768 69.2324 -110.779 110.779l37.8896 31\r\n-c2.82617 2.58496 5.29004 7.78613 5.5 11.6104c-0.0546875 1.68848 -0.597656 4.33594 -1.20996 5.91016l-30 70c-2.32812 4.75098 -8.50586 8.82324 -13.79 9.08984c-0.94043 -0.0205078 -2.4502 -0.195312 -3.37012 -0.389648l-65 -15\r\n-c-6.19238 -1.6582 -11.4033 -8.20312 -11.6299 -14.6104c0 -160.29 130 -290 290 -290c6.58496 0.00292969 13.1309 5.21289 14.6104 11.6299z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"photo-video\" unicode=\"&#xf87c;\" horiz-adv-x=\"640\" \r\n-d=\"M608 448c17.6641 0 32 -14.3359 32 -32v-320c0 -17.6641 -14.3359 -32 -32 -32h-128v320h-192v-64h-160v96c0 17.6641 14.3359 32 32 32h448zM232 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30\r\n-c4.96777 0 9 4.03223 9 9zM584 137v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 241v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30\r\n-c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM416 288c17.6641 0 32 -14.3359 32 -32v-288\r\n-c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v288c0 17.6641 14.3359 32 32 32h384zM96 224c-17.6641 0 -32 -14.3359 -32 -32s14.3359 -32 32 -32s32 14.3359 32 32s-14.3359 32 -32 32zM384 0v96l-96 96l-128 -128l-32 32l-64 -64v-32h320z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"remove-format\" unicode=\"&#xf87d;\" horiz-adv-x=\"640\" \r\n-d=\"M336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32.4902l26.5098 79.5996l67.0898 -51.8301l-9.25977 -27.7695h11.1699zM633.82 -10.0996\r\n-c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.72\r\n-c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.02832 1.50879 7.42773 3.36816 9.81934l19.6299 25.2695c2.65234 3.41309 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51074 9.82617 -3.37207l114.54 -88.5205v43.9004c0 8.83203 7.16797 16 16 16\r\n-h416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-117.83l-49.1699 -147.59zM309.91 240.24l31.9199 95.7598h-117.83v-29.3604z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-alpha-down-alt\" unicode=\"&#xf881;\" horiz-adv-x=\"448\" \r\n-d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\r\n-c8.83203 0 16 -7.16797 16 -16v-304h48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16\r\n-v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\r\n-c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\r\n-c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793\r\n-l-16.3896 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-alpha-up-alt\" unicode=\"&#xf882;\" horiz-adv-x=\"448\" \r\n-d=\"M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32\r\n-c-8.83203 0 -16 7.16797 -16 16v304h-48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16\r\n-v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\r\n-c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\r\n-c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793\r\n-l-16.3896 48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-amount-down-alt\" unicode=\"&#xf884;\" \r\n-d=\"M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96\r\n-c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-amount-up-alt\" unicode=\"&#xf885;\" \r\n-d=\"M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32\r\n-c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192\r\n-c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96\r\n-c10.0801 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-numeric-down-alt\" unicode=\"&#xf886;\" horiz-adv-x=\"448\" \r\n-d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\r\n-c8.83203 0 16 -7.16797 16 -16v-304h48zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16\r\n-c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132\r\n-c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699z\r\n-M352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"sort-numeric-up-alt\" unicode=\"&#xf887;\" horiz-adv-x=\"448\" \r\n-d=\"M107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96\r\n-c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16\r\n-c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695\r\n-c0 -70.3906 -28.25 -107.23 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53\r\n-c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"spell-check\" unicode=\"&#xf891;\" horiz-adv-x=\"576\" \r\n-d=\"M272 192c-8.83203 0 -16 7.16797 -16 16v224c0 8.83203 7.16797 16 16 16h75c42.2998 0 80.9004 -30.5703 84.6699 -72.6797c0.186523 -2.02051 0.337891 -5.30762 0.337891 -7.33691c0 -11.0186 -4.20996 -27.8516 -9.39746 -37.5732\r\n-c14.0186 -13.0674 25.3965 -39.2256 25.3965 -58.3906c0 -1.29199 -0.0615234 -3.38867 -0.136719 -4.67969c-2.50977 -43.1396 -41.3105 -75.3398 -84.5098 -75.3398h-91.3604zM312 392v-48h40c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-40zM312 296v-48h56\r\n-c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-56zM155.12 425.75l68.2998 -213.48c0.320312 -1.15625 0.580078 -3.06934 0.580078 -4.26953c0 -8.83203 -7.16797 -16 -16 -16v0h-24.9297h-0.000976562c-6.71875 0 -13.626 5.25488 -15.4189 11.7305l-11.9404 36.2695\r\n-h-87.4199l-11.9404 -36.2695c-1.79297 -6.47559 -8.7002 -11.7305 -15.4189 -11.7305h-0.000976562h-24.9297c-8.82617 0.00488281 -15.9902 7.17383 -15.9902 16c0 1.2002 0.259766 3.11328 0.580078 4.26953l68.29 213.48c3.92871 12.2822 17.583 22.25 30.4785 22.25\r\n-h0.00195312h25.2793h0.00195312c12.8955 0 26.5498 -9.96777 30.4785 -22.25zM89.3701 304h45.2598l-22.6299 68.7002zM571.37 171.52c2.58203 -2.58594 4.65723 -7.65039 4.65723 -11.3047c0 -3.64551 -2.08594 -8.70117 -4.65723 -11.2852l-208 -208.21\r\n-c-2.5752 -2.60449 -7.6377 -4.71777 -11.2998 -4.71777c-3.66309 0 -8.72559 2.11328 -11.3008 4.71777l-112 112.21c-2.57617 2.58496 -4.66699 7.64551 -4.66699 11.2949c0 3.65039 2.09082 8.70996 4.66699 11.2949l45.3008 45.3008\r\n-c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777l55.4102 -55.5l151.5 151.5c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"voicemail\" unicode=\"&#xf897;\" horiz-adv-x=\"640\" \r\n-d=\"M496 320c79.4883 0 144 -64.5117 144 -144s-64.5117 -144 -144 -144h-352c-79.4844 0.00390625 -143.993 64.5156 -143.993 144c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144c0 -24.1113 -10.8711 -59.9512 -24.2666 -80h112.52\r\n-c-13.3955 20.0488 -24.2666 55.8887 -24.2666 80c0 79.4883 64.5117 144 144 144h0.00683594zM64 176c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80zM496 96c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80\r\n-s-80 -35.8398 -80 -80s35.8398 -80 80 -80z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hat-cowboy\" unicode=\"&#xf8c0;\" horiz-adv-x=\"640\" \r\n-d=\"M490 151.1c-38.7695 -12.5898 -93.7305 -23.0996 -170 -23.0996s-131.19 10.5303 -169.99 23.1201c9.50977 57.4102 39.5098 232.88 97.71 232.88c14 0 26.4902 -6 37 -14c8.62988 -6.57812 24.4395 -11.917 35.29 -11.917s26.6611 5.33887 35.29 11.917\r\n-c10.5098 8.07031 23 14 37 14c58.21 0 88.21 -175.51 97.7002 -232.9zM632.9 188.28c3.90625 -2.625 7.08594 -8.57422 7.08594 -13.2803c0 -1.5752 -0.442383 -4.05273 -0.986328 -5.53027c-0.730469 -2.01953 -77.3203 -201.47 -319 -201.47s-318.27 199.45 -319 201.47\r\n-c-0.537109 1.46973 -0.973633 3.93164 -0.973633 5.49512c0 8.83203 7.16797 16 16 16c3.39844 0 8.20215 -1.84766 10.7236 -4.125c1.01953 -0.899414 102.42 -90.8398 293.24 -90.8398c191.89 0 292.16 89.8799 293.16 90.7803\r\n-c2.53418 2.3291 7.38477 4.21875 10.8262 4.21875c2.69141 0 6.68945 -1.21777 8.92383 -2.71875z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"hat-cowboy-side\" unicode=\"&#xf8c1;\" horiz-adv-x=\"640\" \r\n-d=\"M260.8 156.94l98.0098 -84.4805c78.1904 -67.3896 129.98 -104.46 233.19 -104.46h-546.12c-14.0498 0 -27.1299 7.53027 -35.8799 20.6396c-9 13.4707 -12.1201 30.7002 -8.57031 47.3008c20.04 93.3398 85.5703 156.06 162.971 156.06\r\n-c34.3994 0 67.7695 -12.1201 96.3994 -35.0596zM495.45 175.23c114.95 -7.90039 144.55 -101.841 144.55 -127.23c0 -26.4961 -21.5039 -48 -48 -48c-97.0996 0 -141.24 35.46 -212.31 96.7002l-98 84.4795c-35.29 28.2705 -75.5 42.8203 -117.29 42.8203\r\n-c-7.09082 0 -13.8906 -1.16992 -20.79 -2l6.88965 65.21c2.72852 25.4766 25.2852 50.4707 50.3496 55.79l191.15 40.5898c3.63574 0.773438 9.60254 1.40137 13.3193 1.40137c29.7891 0 58.0498 -23.8301 63.0811 -53.1914z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"mouse\" unicode=\"&#xf8cc;\" horiz-adv-x=\"384\" \r\n-d=\"M0 96v128h384v-128c0 -88.3203 -71.6797 -160 -160 -160h-64c-88.3203 0 -160 71.6797 -160 160zM176 448v-192h-176v32c0 88.3203 71.6797 160 160 160h16zM224 448c88.3203 0 160 -71.6797 160 -160v-32h-176v192h16z\" \u002F>\r\n-    \u003Cglyph glyph-name=\"record-vinyl\" unicode=\"&#xf8d9;\" \r\n-d=\"M256 296c57.4082 0 104 -46.5918 104 -104s-46.5918 -104 -104 -104s-104 46.5918 -104 104s46.5918 104 104 104zM256 168c13.248 0 24 10.752 24 24s-10.752 24 -24 24s-24 -10.752 -24 -24s10.752 -24 24 -24zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248\r\n-s-248 111 -248 248s111 248 248 248zM256 64c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128s-128 -57.3438 -128 -128s57.3438 -128 128 -128z\" \u002F>\r\n-  \u003C\u002Ffont>\r\n-\u003C\u002Fdefs>\u003C\u002Fsvg>\r\n+\u003C?xml version=\"1.0\" standalone=\"no\"?>\n+\u003C!--\n+Font Awesome Free 5.11.2 by @fontawesome - https:\u002F\u002Ffontawesome.com\n+License - https:\u002F\u002Ffontawesome.com\u002Flicense\u002Ffree (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n+-->\n+\u003C!DOCTYPE svg PUBLIC \"-\u002F\u002FW3C\u002F\u002FDTD SVG 1.1\u002F\u002FEN\" \"http:\u002F\u002Fwww.w3.org\u002FGraphics\u002FSVG\u002F1.1\u002FDTD\u002Fsvg11.dtd\" >\n+\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" xmlns:xlink=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\" version=\"1.1\">\n+\u003Cmetadata>\n+Created by FontForge 20190801 at Mon Sep 23 12:53:50 2019\n+ By Robert Madole\n+Copyright (c) Font Awesome\n+\u003C\u002Fmetadata>\n+\u003Cdefs>\n+\u003Cfont id=\"FontAwesome5Free-Solid\" horiz-adv-x=\"512\" >\n+  \u003Cfont-face \n+    font-family=\"Font Awesome 5 Free Solid\"\n+    font-weight=\"900\"\n+    font-stretch=\"normal\"\n+    units-per-em=\"512\"\n+    panose-1=\"2 0 5 3 0 0 0 0 0 0\"\n+    ascent=\"448\"\n+    descent=\"-64\"\n+    bbox=\"-0.983398 -64.9834 640.104 448.427\"\n+    underline-thickness=\"25\"\n+    underline-position=\"-50\"\n+    unicode-range=\"U+0020-F8D9\"\n+  \u002F>\n+    \u003Cmissing-glyph \u002F>\n+    \u003Cglyph glyph-name=\"glass-martini\" unicode=\"&#xf000;\" \n+d=\"M502.05 390.4l-214.05 -214.04v-192.36h56c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v192.36l-214.05 214.04c-21.25 21.2598 -6.2002 57.5996 23.8496 57.5996h444.4\n+c30.0498 0 45.0996 -36.3398 23.8496 -57.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"music\" unicode=\"&#xf001;\" \n+d=\"M470.38 446.49c2.59277 0.816406 6.90234 1.48047 9.62012 1.48047c17.6475 0 31.9834 -14.3232 32 -31.9707v-352c0 -35.3496 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95898 -0.0488281 23.2949 -1.80957 32 -3.92969v184.609l-256 -75v-233.68\n+c0 -35.3398 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95801 -0.0507812 23.2939 -1.80664 32 -3.91992v261.41c0.0078125 12.958 10.0479 26.626 22.4102 30.5098z\" \u002F>\n+    \u003Cglyph glyph-name=\"search\" unicode=\"&#xf002;\" \n+d=\"M505 5.2998c9.2998 -9.39941 9.2998 -24.5996 -0.0996094 -34l-28.3008 -28.2998c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0l-99.7002 99.7002c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208\n+s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7zM208 112c70.7998 0 128 57.2998 128 128c0 70.7998 -57.2998 128 -128 128c-70.7998 0 -128 -57.2998 -128 -128c0 -70.7998 57.2998 -128 128 -128z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"heart\" unicode=\"&#xf004;\" \n+d=\"M462.3 385.4c62.7998 -53.6006 66.1006 -149.801 9.7998 -207.9l-193.5 -199.8c-12.5 -12.9004 -32.7998 -12.9004 -45.2998 0l-193.5 199.8c-56.2002 58.0996 -52.8994 154.3 9.90039 207.9c54.7998 46.6992 136.399 38.2998 186.6 -13.6006l19.7002 -20.2998\n+l19.7002 20.2998c50.2998 51.9004 131.8 60.2998 186.6 13.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"star\" unicode=\"&#xf005;\" horiz-adv-x=\"576\" \n+d=\"M259.3 430.2c11.7998 23.8994 45.7002 23.5996 57.4004 0l65.2998 -132.4l146.1 -21.2998c26.2002 -3.7998 36.7002 -36.0996 17.7002 -54.5996l-105.7 -103l25 -145.5c4.5 -26.3008 -23.1992 -45.9004 -46.3994 -33.7002l-130.7 68.7002l-130.7 -68.7002\n+c-23.2002 -12.2998 -50.8994 7.39941 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"user\" unicode=\"&#xf007;\" horiz-adv-x=\"448\" \n+d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\n+c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\n+    \u003Cglyph glyph-name=\"film\" unicode=\"&#xf008;\" \n+d=\"M488 384c13.2998 0 24 -10.7002 24 -24v-336c0 -13.2998 -10.7002 -24 -24 -24h-8v20c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-20h-320v20c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-20h-8\n+c-13.2998 0 -24 10.7002 -24 24v336c0 13.2998 10.7002 24 24 24h8v-20c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v20h320v-20c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v20h8zM96 76v40c0 6.59961 -5.40039 12 -12 12h-40\n+c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM96 172v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM96 268v40\n+c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM368 60v96c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-96c0 -6.59961 5.40039 -12 12 -12h200\n+c6.59961 0 12 5.40039 12 12zM368 228v96c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-96c0 -6.59961 5.40039 -12 12 -12h200c6.59961 0 12 5.40039 12 12zM480 76v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40\n+c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 172v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 268v40c0 6.59961 -5.40039 12 -12 12h-40\n+c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"th-large\" unicode=\"&#xf009;\" \n+d=\"M296 416h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v160c0 13.2549 10.7451 24 24 24zM216 416c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192\n+c-13.2549 0 -24 10.7451 -24 24v160c0 13.2549 10.7451 24 24 24h192zM0 152c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v160zM296 -32c-13.2549 0 -24 10.7451 -24 24v160\n+c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-160c0 -13.2549 -10.7451 -24 -24 -24h-192z\" \u002F>\n+    \u003Cglyph glyph-name=\"th\" unicode=\"&#xf00a;\" \n+d=\"M149.333 392v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24zM330.667 152c0 -13.2549 -10.7451 -24 -24.001 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80\n+c0 13.2549 10.7451 24 24 24h101.334c13.2549 0 24 -10.7451 24 -24v-80zM362.667 392c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM330.667 312\n+c0 -13.2549 -10.7451 -24 -24.001 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.334c13.2549 0 24 -10.7451 24 -24v-80zM125.333 256c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333\n+c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333zM0 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM386.667 128\n+c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333zM386.667 -32c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24\n+v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333zM181.333 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80z\" \u002F>\n+    \u003Cglyph glyph-name=\"th-list\" unicode=\"&#xf00b;\" \n+d=\"M149.333 232v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24zM0 72c0 13.2549 10.7451 24 24 24h101.333c13.2549 0 24 -10.7451 24 -24v-80\n+c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80zM125.333 416c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-101.333c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h101.333zM205.333 -32\n+c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-282.667zM181.333 392c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80\n+c0 -13.2549 -10.7451 -24 -24 -24h-282.667c-13.2549 0 -24 10.7451 -24 24v80zM205.333 128c-13.2549 0 -24 10.7451 -24 24v80c0 13.2549 10.7451 24 24 24h282.667c13.2549 0 24 -10.7451 24 -24v-80c0 -13.2549 -10.7451 -24 -24 -24h-282.667z\" \u002F>\n+    \u003Cglyph glyph-name=\"check\" unicode=\"&#xf00c;\" \n+d=\"M173.898 8.5957l-166.4 166.4c-9.99707 9.99707 -9.99707 26.2061 0 36.2041l36.2031 36.2041c9.99707 9.99805 26.207 9.99805 36.2041 0l112.095 -112.095l240.095 240.095c9.99707 9.99707 26.207 9.99707 36.2041 0l36.2031 -36.2041\n+c9.99707 -9.99707 9.99707 -26.2061 0 -36.2041l-294.4 -294.401c-9.99805 -9.99707 -26.207 -9.99707 -36.2031 0.000976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"times\" unicode=\"&#xf00d;\" horiz-adv-x=\"352\" \n+d=\"M242.72 192l100.07 -100.07c12.2803 -12.29 12.2803 -32.1992 0 -44.4795l-22.2402 -22.2402c-12.2803 -12.2803 -32.2002 -12.2803 -44.4795 0l-100.07 100.07l-100.07 -100.07c-12.2793 -12.2803 -32.1992 -12.2803 -44.4795 0l-22.2402 22.2402\n+c-12.2803 12.29 -12.2803 32.2002 0 44.4795l100.07 100.07l-100.07 100.07c-12.2803 12.29 -12.2803 32.1992 0 44.4795l22.2402 22.2402c12.29 12.2803 32.2002 12.2803 44.4795 0l100.07 -100.07l100.07 100.07c12.29 12.2803 32.1992 12.2803 44.4795 0\n+l22.2402 -22.2402c12.2803 -12.29 12.2803 -32.2002 0 -44.4795z\" \u002F>\n+    \u003Cglyph glyph-name=\"search-plus\" unicode=\"&#xf00e;\" \n+d=\"M304 256v-32c0 -6.59961 -5.40039 -12 -12 -12h-56v-56c0 -6.59961 -5.40039 -12 -12 -12h-32c-6.59961 0 -12 5.40039 -12 12v56h-56c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h56v56c0 6.59961 5.40039 12 12 12h32c6.59961 0 12 -5.40039 12 -12\n+v-56h56c6.59961 0 12 -5.40039 12 -12zM505 -28.7002l-28.2998 -28.2998c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-99.7998 99.7002c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208\n+s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7l99.7002 -99.7002c9.2998 -9.39941 9.2998 -24.5996 0 -34zM344 240c0 75.2002 -60.7998 136 -136 136s-136 -60.7998 -136 -136\n+s60.7998 -136 136 -136s136 60.7998 136 136z\" \u002F>\n+    \u003Cglyph glyph-name=\"search-minus\" unicode=\"&#xf010;\" \n+d=\"M304 256v-32c0 -6.59961 -5.40039 -12 -12 -12h-168c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h168c6.59961 0 12 -5.40039 12 -12zM505 -28.7002l-28.2998 -28.2998c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-99.7998 99.7002\n+c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.7002 -44 -128 -44c-114.9 0 -208 93.0996 -208 208s93.0996 208 208 208s208 -93.0996 208 -208c0 -48.2998 -16.4004 -92.7002 -44 -128h16.2998c6.40039 0 12.5 -2.5 17 -7l99.7002 -99.7002\n+c9.2998 -9.39941 9.2998 -24.5996 0 -34zM344 240c0 75.2002 -60.7998 136 -136 136s-136 -60.7998 -136 -136s60.7998 -136 136 -136s136 60.7998 136 136z\" \u002F>\n+    \u003Cglyph glyph-name=\"power-off\" unicode=\"&#xf011;\" \n+d=\"M400 393.9c63 -45 104 -118.601 104 -201.9c0 -136.8 -110.8 -247.7 -247.5 -248c-136.5 -0.299805 -248.3 111 -248.5 247.6c-0.0996094 83.3008 40.9004 157.101 103.8 202.2c11.7002 8.2998 28 4.7998 35 -7.7002l15.7998 -28.0996\n+c5.90039 -10.5 3.10059 -23.7998 -6.59961 -31c-41.5 -30.7998 -68 -79.5996 -68 -134.9c-0.0996094 -92.2998 74.5 -168.1 168 -168.1c91.5996 0 168.6 74.2002 168 169.1c-0.299805 51.8008 -24.7002 101.801 -68.0996 134c-9.7002 7.2002 -12.4004 20.5 -6.5 30.9004\n+l15.7998 28.0996c7 12.4004 23.2002 16.1006 34.7998 7.80078zM296 184c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v240c0 13.2998 10.7002 24 24 24h32c13.2998 0 24 -10.7002 24 -24v-240z\" \u002F>\n+    \u003Cglyph glyph-name=\"signal\" unicode=\"&#xf012;\" horiz-adv-x=\"640\" \n+d=\"M216 160c8.83984 0 16 -7.16016 16 -16v-192c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v192c0 8.83984 7.16016 16 16 16h48zM88 64c8.83984 0 16 -7.16016 16 -16v-96c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v96\n+c0 8.83984 7.16016 16 16 16h48zM344 256c8.83984 0 16 -7.16016 16 -16v-288c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v288c0 8.83984 7.16016 16 16 16h48zM472 352c8.83984 0 16 -7.16016 16 -16v-384c0 -8.83984 -7.16016 -16 -16 -16h-48\n+c-8.83984 0 -16 7.16016 -16 16v384c0 8.83984 7.16016 16 16 16h48zM600 448c8.83984 0 16 -7.16016 16 -16v-480c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v480c0 8.83984 7.16016 16 16 16h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"cog\" unicode=\"&#xf013;\" \n+d=\"M487.4 132.3c4.89941 -2.7998 7.09961 -8.59961 5.59961 -14.0996c-11.0996 -35.7002 -30 -67.9004 -54.7002 -94.6006c-3.7998 -4.19922 -9.89941 -5.09961 -14.7998 -2.2998l-42.5996 24.6006c-18 -15.3008 -38.6006 -27.2002 -60.8008 -35.1006v-49.2002\n+c0 -5.59961 -3.89941 -10.5 -9.39941 -11.6992c-34.9004 -7.80078 -72.5 -8.2002 -109.2 0c-5.5 1.19922 -9.40039 6.09961 -9.40039 11.6992v49.2002c-22.2998 7.7998 -42.8994 19.7002 -60.7998 35.1006l-42.5996 -24.6006c-4.7998 -2.7998 -11 -1.7998 -14.7998 2.2998\n+c-24.7002 26.8008 -43.6006 59 -54.7002 94.6006c-1.60059 5.39941 0.599609 11.2002 5.5 14l42.5996 24.5996c-4.2998 23.2002 -4.2998 47 0 70.2002l-42.5996 24.5996c-4.90039 2.80078 -7.2002 8.60059 -5.5 14c11.0996 35.7002 30 67.9004 54.7002 94.6006\n+c3.7998 4.2002 9.89941 5.09961 14.7998 2.2998l42.5 -24.5996c18 15.2998 38.5996 27.1992 60.7998 35.0996v49.2002c0 5.59961 3.90039 10.5 9.40039 11.7002c34.8994 7.7998 72.5 8.19922 109.199 0c5.5 -1.2002 9.40039 -6.10059 9.40039 -11.7002v-49.1006\n+c22.2998 -7.7998 42.9004 -19.6992 60.7998 -35.0996l42.6006 24.5996c4.7998 2.80078 11 1.80078 14.7998 -2.2998c24.7002 -26.7998 43.5996 -59 54.7002 -94.5996c1.59961 -5.40039 -0.600586 -11.2002 -5.5 -14l-42.6006 -24.6006\n+c4.2998 -23.1992 4.2998 -47 0 -70.1992zM256 112c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"home\" unicode=\"&#xf015;\" horiz-adv-x=\"576\" \n+d=\"M280.37 299.74c1.84863 1.49023 5.27539 2.69922 7.64941 2.69922c2.375 0 5.80176 -1.20898 7.65039 -2.69922l184.33 -151.74v-164c0 -8.83203 -7.16797 -16 -16 -16l-112.02 0.30957h-0.000976562c-8.83203 0 -16 7.16797 -16 16\n+c0 0.0146484 0 0.0371094 0.000976562 0.0507812v95.6396c0 8.83203 -7.16895 16 -16 16h-64c-8.83203 0 -16 -7.16797 -16 -16v-95.71v0c0 -8.78809 -7.13281 -15.9561 -15.9209 -16l-112.06 -0.290039c-8.83203 0 -16 7.16797 -16 16v163.89zM571.6 196.53\n+c2.44531 -1.98828 4.42969 -6.15918 4.42969 -9.31055c0 -2.37305 -1.22266 -5.78613 -2.72949 -7.62012l-25.5 -31c-1.98633 -2.40332 -6.13086 -4.35449 -9.24902 -4.35449c-2.38574 0 -5.81348 1.23438 -7.65039 2.75488l-235.23 193.74\n+c-1.84863 1.49023 -5.27539 2.69922 -7.65039 2.69922c-2.37402 0 -5.80078 -1.20898 -7.64941 -2.69922l-235.22 -193.74c-1.83691 -1.5166 -5.26074 -2.74805 -7.64258 -2.74805c-3.12793 0 -7.28027 1.96191 -9.26758 4.37793l-25.5 31\n+c-1.52051 1.83789 -2.75488 5.26562 -2.75488 7.65039c0 3.11914 1.95117 7.2627 4.35449 9.25l253.13 208.47c7.33594 6.03613 21 10.9355 30.5 10.9355c9.50098 0 23.1641 -4.89941 30.5 -10.9355l89.5303 -73.6602v72.6104c0 6.62402 5.37598 12 12 12h56\n+c6.62402 0 12 -5.37598 12 -12v-138.51z\" \u002F>\n+    \u003Cglyph glyph-name=\"clock\" unicode=\"&#xf017;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM313.1 89.9004c5.40039 -3.90039 12.9004 -2.7002 16.8008 2.59961l28.1992 38.7998c3.90039 5.40039 2.80078 12.9004 -2.59961 16.7998l-63.5 46.2002v137.7\n+c0 6.59961 -5.40039 12 -12 12h-48c-6.59961 0 -12 -5.40039 -12 -12v-168.3c0 -3.7998 1.7998 -7.40039 4.90039 -9.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"road\" unicode=\"&#xf018;\" horiz-adv-x=\"576\" \n+d=\"M573.19 45.3301c9.25977 -21.1904 -5.5 -45.3301 -27.7305 -45.3301h-196.84l-10.3105 97.6797c-0.859375 8.14062 -7.71973 14.3203 -15.9092 14.3203h-68.8008c-8.18945 0 -15.0498 -6.17969 -15.9092 -14.3203l-10.3105 -97.6797h-196.84\n+c-22.2305 0 -36.9902 24.1396 -27.7402 45.3301l139.79 320c4.96973 11.3799 15.7998 18.6699 27.7305 18.6699h97.5898l-2.4502 -23.1602c-0.5 -4.71973 3.20996 -8.83984 7.95996 -8.83984h29.1602c4.75 0 8.45996 4.12012 7.95996 8.83984l-2.4502 23.1602h97.5898\n+c11.9199 0 22.75 -7.29004 27.7207 -18.6699zM260.4 312.84l-4.59082 -43.5801c-0.75 -7.08984 4.80078 -13.2598 11.9307 -13.2598h40.54c7.12012 0 12.6797 6.16992 11.9297 13.2598l-4.59961 43.5801c-0.430664 4.07031 -3.87012 7.16016 -7.95996 7.16016h-39.29\n+h-0.00488281c-3.97363 0 -7.53809 -3.20801 -7.95508 -7.16016zM315.64 144c9.5 0 16.9102 8.23047 15.9102 17.6797l-5.06934 48c-0.860352 8.14062 -7.7207 14.3203 -15.9102 14.3203h-45.1504c-8.18945 0 -15.0498 -6.17969 -15.9102 -14.3203l-5.06934 -48\n+c-1 -9.44922 6.40918 -17.6797 15.9092 -17.6797h55.29z\" \u002F>\n+    \u003Cglyph glyph-name=\"download\" unicode=\"&#xf019;\" \n+d=\"M216 448h80c13.2998 0 24 -10.7002 24 -24v-168h87.7002c17.7998 0 26.7002 -21.5 14.0996 -34.0996l-152.1 -152.2c-7.5 -7.5 -19.7998 -7.5 -27.2998 0l-152.301 152.2c-12.5996 12.5996 -3.69922 34.0996 14.1006 34.0996h87.7998v168c0 13.2998 10.7002 24 24 24z\n+M512 72v-112c0 -13.2998 -10.7002 -24 -24 -24h-464c-13.2998 0 -24 10.7002 -24 24v112c0 13.2998 10.7002 24 24 24h146.7l49 -49c20.0996 -20.0996 52.5 -20.0996 72.5996 0l49 49h146.7c13.2998 0 24 -10.7002 24 -24zM388 -16c0 11 -9 20 -20 20s-20 -9 -20 -20\n+s9 -20 20 -20s20 9 20 20zM452 -16c0 11 -9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20s20 9 20 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"inbox\" unicode=\"&#xf01c;\" horiz-adv-x=\"576\" \n+d=\"M567.938 204.092c4.4502 -6.6748 8.06152 -18.6025 8.06152 -26.624v-0.000976562v-129.467c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v129.467v0.000976562c0 8.02148 3.61133 19.9492 8.06152 26.624l105.689 158.534\n+c7.86621 11.7988 25.7578 21.374 39.9385 21.374h268.621c14.1807 0 32.0732 -9.57617 39.9395 -21.374zM162.252 320l-85.334 -128h123.082l32 -64h112l32 64h123.082l-85.333 128h-251.497z\" \u002F>\n+    \u003Cglyph glyph-name=\"redo\" unicode=\"&#xf01e;\" \n+d=\"M500.33 448c6.62402 0 12 -5.37598 12 -12v-200.34c0 -6.62402 -5.37598 -12 -12 -12h-200.33c-6.62402 0 -12 5.37598 -12 12v47.4102v0.0136719c0 6.62402 5.37598 12 12 12c0.157227 0 0.413086 -0.00683594 0.570312 -0.0136719l101.529 -4.87012\n+c-28.8721 42.9609 -94.3145 77.8281 -146.076 77.8281c-97.1514 0 -176 -78.8486 -176 -176c0 -97.1523 78.8486 -176 176 -176c36.6543 0 88.7373 19.6504 116.257 43.8613c1.87207 1.63672 5.40918 2.96387 7.89551 2.96387c2.74316 0 6.54395 -1.57422 8.48438 -3.51367\n+l34 -34c1.94141 -1.94043 3.51758 -5.74316 3.51758 -8.48828c0 -2.96094 -1.79102 -6.9668 -3.99805 -8.94141c-38.9707 -35.2783 -113.264 -63.9102 -165.831 -63.9102h-0.348633c-136.9 0 -247.9 110.93 -248 247.81c-0.0996094 136.66 111.34 248.19 248 248.19\n+h0.272461c63.2246 0 147.739 -39.124 188.647 -87.3301l-4 82.7598c-0.0078125 0.157227 -0.0136719 0.413086 -0.0136719 0.570312c0 6.62402 5.37598 12 12 12h0.0136719h47.4102z\" \u002F>\n+    \u003Cglyph glyph-name=\"sync\" unicode=\"&#xf021;\" \n+d=\"M440.65 435.43c-0.0078125 0.157227 -0.0136719 0.413086 -0.0136719 0.570312c0 6.62012 5.37305 11.9961 11.9932 12h47.3701c6.62402 0 12 -5.37598 12 -12v-200.35c0 -6.62402 -5.37598 -12 -12 -12h-200.22c-6.62402 0 -12 5.37598 -12 12v47.4092v0.0136719\n+c0 6.62402 5.37598 12 12 12c0.157227 0 0.412109 -0.00585938 0.569336 -0.0136719l101.46 -4.85938c-28.8584 42.9248 -94.2598 77.7627 -145.984 77.7627c-76.4834 0 -153.099 -60.3467 -171.016 -134.703c-1.19727 -5.10547 -6.4248 -9.25391 -11.6699 -9.25977\n+h-49.0498c-6.62402 0 -12 5.37598 -12 12c0 0.606445 0.0898438 1.58301 0.200195 2.17969c21.6201 114.9 122.44 201.82 243.54 201.82h0.28418c63.2031 0 147.667 -39.1279 188.536 -87.3398zM255.83 16c76.4971 0 153.144 60.3633 171.03 134.74\n+c1.19727 5.10547 6.4248 9.25391 11.6699 9.25977h49.0498c6.62402 0 12 -5.37598 12 -12c0 -0.606445 -0.0898438 -1.58301 -0.200195 -2.17969c-21.6201 -114.9 -122.439 -201.82 -243.55 -201.82h-0.234375c-63.1289 0 -147.53 39.0518 -188.396 87.1699\n+l4.14941 -82.5703c0.00878906 -0.165039 0.015625 -0.433594 0.015625 -0.599609c0 -6.62402 -5.37598 -12 -12 -12h-0.015625h-47.3496c-6.62402 0 -12 5.37598 -12 12v200.33c0 6.62402 5.37598 12 12 12h200.2c6.62402 0 12 -5.37598 12 -12v-47.4004v-0.0136719\n+c0 -6.62402 -5.37598 -12 -12 -12c-0.157227 0 -0.413086 0.00683594 -0.570312 0.0136719l-101.8 4.87012c28.7998 -42.9453 94.1406 -77.7998 145.85 -77.7998h0.150391z\" \u002F>\n+    \u003Cglyph glyph-name=\"list-alt\" unicode=\"&#xf022;\" \n+d=\"M464 -32h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM128 328c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM128 232\n+c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM128 136c-22.0908 0 -40 -17.9092 -40 -40s17.9092 -40 40 -40s40 17.9092 40 40s-17.9092 40 -40 40zM416 272v32c0 6.62695 -5.37305 12 -12 12h-200\n+c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12zM416 176v32c0 6.62695 -5.37305 12 -12 12h-200c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12zM416 80v32\n+c0 6.62695 -5.37305 12 -12 12h-200c-6.62695 0 -12 -5.37305 -12 -12v-32c0 -6.62695 5.37305 -12 12 -12h200c6.62695 0 12 5.37305 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"lock\" unicode=\"&#xf023;\" horiz-adv-x=\"448\" \n+d=\"M400 224c26.5 0 48 -21.5 48 -48v-192c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v192c0 26.5 21.5 48 48 48h24v72c0 83.7998 68.2002 152 152 152s152 -68.2002 152 -152v-72h24zM296 224v72c0 39.7002 -32.2998 72 -72 72s-72 -32.2998 -72 -72v-72h144\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag\" unicode=\"&#xf024;\" \n+d=\"M349.565 349.217c40.4951 0 82.6113 15.9062 116.949 31.8545c21.2168 9.85352 45.4854 -5.62305 45.4854 -29.0166v-243.1c0 -10.5264 -5.16016 -20.4072 -13.8428 -26.3584c-35.8379 -24.5635 -74.3359 -40.8574 -122.505 -40.8574\n+c-67.373 0 -111.629 34.7832 -165.218 34.7832c-50.8525 0 -86.124 -10.0586 -114.435 -22.1221v-94.4004c0 -13.2549 -10.7451 -24 -24 -24h-16c-13.2549 0 -24 10.7451 -24 24v386.055c-14.5029 10.1201 -24 26.9189 -24 45.9453\n+c0 31.7041 26.3447 57.2539 58.3379 55.9521c28.4678 -1.1582 51.7793 -23.9668 53.5508 -52.4033c0.0625 -0.980469 0.113281 -2.57324 0.113281 -3.55566c0 -5.71094 -1.65723 -14.6738 -3.69922 -20.0059c20.7363 7.62891 43.0898 12.0127 68.0449 12.0127\n+c67.373 0 111.63 -34.7832 165.218 -34.7832z\" \u002F>\n+    \u003Cglyph glyph-name=\"headphones\" unicode=\"&#xf025;\" \n+d=\"M256 416c141.504 0 256 -114.521 256 -256v-48c0 -10.917 -7.9248 -23.7402 -17.6904 -28.6221l-14.3818 -7.19141c-2.01074 -60.0889 -51.3486 -108.187 -111.928 -108.187h-24c-13.2549 0 -24 10.7451 -24 24v176c0 13.2549 10.7451 24 24 24h24\n+c31.3418 0 59.6709 -12.8789 80 -33.627v1.62695c0 105.869 -86.1309 192 -192 192s-192 -86.1309 -192 -192v-1.62695c20.3291 20.748 48.6582 33.627 80 33.627h24c13.2549 0 24 -10.7451 24 -24v-176c0 -13.2549 -10.7451 -24 -24 -24h-24\n+c-60.5791 0 -109.917 48.0967 -111.928 108.187l-14.3828 7.19141c-9.76465 4.88184 -17.6895 17.7051 -17.6895 28.6221v0v48c0 141.504 114.52 256 256 256z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume-off\" unicode=\"&#xf026;\" horiz-adv-x=\"256\" \n+d=\"M215 377c15 15 41 4.46973 41 -17v-336c0 -21.4697 -26 -32 -41 -17l-88.9404 89h-102.06c-13.248 0 -24 10.752 -24 24v144c0 13.248 10.752 24 24 24h102z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume-down\" unicode=\"&#xf027;\" horiz-adv-x=\"384\" \n+d=\"M215.03 375.96c15.0098 15 40.9697 4.49023 40.9697 -16.9795v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM338.23 267.88\n+c28.2393 -15.5498 45.7793 -44.9902 45.7793 -76.8701s-17.54 -61.3301 -45.7695 -76.8799c-11.5605 -6.34961 -26.1807 -2.20996 -32.6104 9.4502c-6.38965 11.6104 -2.16016 26.2002 9.4502 32.6104c12.9004 7.08984 20.9199 20.4297 20.9199 34.8096\n+s-8.01953 27.7197 -20.9297 34.8203c-11.6104 6.41016 -15.8398 21 -9.4502 32.6094c6.41992 11.6104 21.0303 15.7803 32.6104 9.4502z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume-up\" unicode=\"&#xf028;\" horiz-adv-x=\"576\" \n+d=\"M215.03 376.95c15.0098 15.0098 40.9697 4.49023 40.9697 -16.9697v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM448.35 428.03\n+c79.9199 -52.46 127.65 -140.7 127.65 -236.03s-47.7305 -183.58 -127.65 -236.04c-11.5801 -7.61035 -26.4697 -3.75977 -33.5098 6.9502c-7.33984 11.1602 -4.21973 26.1797 6.9502 33.5c66.2695 43.4902 105.82 116.6 105.82 195.58\n+c0 78.9795 -39.5508 152.09 -105.82 195.58c-11.1699 7.33008 -14.29 22.3398 -6.9502 33.5098c7.33008 11.1895 22.3398 14.2803 33.5098 6.9502zM480 192c0 -63.54 -32.0596 -121.94 -85.7695 -156.24c-12 -7.67969 -26.6104 -2.89941 -33.1201 7.45996\n+c-7.09082 11.29 -3.78027 26.2207 7.40918 33.3604c39.75 25.3896 63.4805 68.5303 63.4805 115.42s-23.7305 90.0303 -63.4805 115.42c-11.1895 7.15039 -14.5 22.0801 -7.40918 33.3604c7.08984 11.2793 21.9297 14.5996 33.1201 7.45996\n+c53.71 -34.2998 85.7695 -92.71 85.7695 -156.24zM338.23 268.87c28.2393 -15.54 45.7793 -44.9805 45.7793 -76.8604s-17.54 -61.3301 -45.7695 -76.8799c-11.5605 -6.34961 -26.1807 -2.20996 -32.6104 9.4502c-6.38965 11.6104 -2.16016 26.2002 9.4502 32.6104\n+c12.9004 7.08984 20.9199 20.4297 20.9199 34.8096c0 14.3701 -8.01953 27.7197 -20.9297 34.8096c-11.6104 6.41016 -15.8398 21 -9.4502 32.6104c6.41992 11.6104 21.0303 15.7803 32.6104 9.4502z\" \u002F>\n+    \u003Cglyph glyph-name=\"qrcode\" unicode=\"&#xf029;\" horiz-adv-x=\"448\" \n+d=\"M0 224v192h192v-192h-192zM64 352v-64h64v64h-64zM256 416h192v-192h-192v192zM384 288v64h-64v-64h64zM0 -32v192h192v-192h-192zM64 96v-64h64v64h-64zM416 160h32v-128h-96v32h-32v-96h-64v192h96v-32h64v32zM416 0h32v-32h-32v32zM352 0h32v-32h-32v32z\" \u002F>\n+    \u003Cglyph glyph-name=\"barcode\" unicode=\"&#xf02a;\" \n+d=\"M0 0v384h18v-384h-18zM26.8574 0.273438v383.727h9.14258v-383.727h-9.14258zM54 0.273438v383.727h8.85742v-383.727h-8.85742zM98.8574 0.273438v383.727h8.85645v-383.727h-8.85645zM134.857 0.273438v383.727h17.7139v-383.727h-17.7139zM179.714 0.273438v383.727\n+h8.85742v-383.727h-8.85742zM197.714 0.273438v383.727h8.85742v-383.727h-8.85742zM215.714 0.273438v383.727h8.85742v-383.727h-8.85742zM251.429 0.273438v383.727h18v-383.727h-18zM296.286 0.273438v383.727h18v-383.727h-18zM332.285 0.273438v383.727h18.001\n+v-383.727h-18.001zM368.286 0.273438v383.727h18.001v-383.727h-18.001zM395.143 0.273438v383.727h18v-383.727h-18zM440.286 0.273438v383.727h26.8564v-383.727h-26.8564zM476 0.273438v383.727h9.14258v-383.727h-9.14258zM494 0v384h18v-384h-18z\" \u002F>\n+    \u003Cglyph glyph-name=\"tag\" unicode=\"&#xf02b;\" \n+d=\"M0 195.882v204.118c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-211.883 211.883\n+c-7.75977 7.75977 -14.0586 22.9658 -14.0586 33.9404zM112 384c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"tags\" unicode=\"&#xf02c;\" horiz-adv-x=\"640\" \n+d=\"M497.941 222.059c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818l-204.118 -204.118c-18.7461 -18.7451 -49.1387 -18.7441 -67.8818 0l-211.883 211.883c-7.75977 7.75977 -14.0586 22.9658 -14.0586 33.9404v204.118c0 26.5098 21.4902 48 48 48h204.118\n+c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM112 288c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM625.941 154.177l-204.118 -204.118c-18.7451 -18.7441 -49.1377 -18.7441 -67.8818 0l-0.360352 0.360352\n+l174.059 174.059c16.999 16.999 26.3604 39.6006 26.3604 63.6406s-9.3623 46.6406 -26.3604 63.6396l-196.242 196.242h48.7207c10.9746 0 26.1807 -6.29883 33.9404 -14.0586l211.883 -211.883c18.7441 -18.7441 18.7441 -49.1367 0 -67.8818z\" \u002F>\n+    \u003Cglyph glyph-name=\"book\" unicode=\"&#xf02d;\" horiz-adv-x=\"448\" \n+d=\"M448 88c0 -7.5 -3.5 -14.2998 -8.90039 -18.5996c-4.19922 -15.4004 -4.19922 -59.3008 0 -74.7002c5.40039 -4.40039 8.90039 -11.2002 8.90039 -18.7002v-16c0 -13.2998 -10.7002 -24 -24 -24h-328c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h328\n+c13.2998 0 24 -10.7002 24 -24v-336zM128 314v-20c0 -3.2998 2.7002 -6 6 -6h212c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-212c-3.2998 0 -6 -2.7002 -6 -6zM128 250v-20c0 -3.2998 2.7002 -6 6 -6h212c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-212\n+c-3.2998 0 -6 -2.7002 -6 -6zM381.4 0c-1.90039 17.0996 -1.90039 46.9004 0 64h-285.4c-17.5996 0 -32 -14.4004 -32 -32c0 -17.7002 14.2998 -32 32 -32h285.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"bookmark\" unicode=\"&#xf02e;\" horiz-adv-x=\"384\" \n+d=\"M0 -64v464c0 26.5098 21.4902 48 48 48h288c26.5098 0 48 -21.4902 48 -48v-464l-192 112z\" \u002F>\n+    \u003Cglyph glyph-name=\"print\" unicode=\"&#xf02f;\" \n+d=\"M448 256c35.3496 0 64 -28.6504 64 -64v-112c0 -8.83984 -7.16016 -16 -16 -16h-48v-96c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v96h-48c-8.83984 0 -16 7.16016 -16 16v112c0 35.3496 28.6504 64 64 64v160c0 17.6699 14.3301 32 32 32\n+h274.74c8.49023 0 16.6299 -3.37012 22.6299 -9.37012l45.2598 -45.25c6 -6.00977 9.37012 -14.1396 9.37012 -22.6299v-114.75zM384 0v96h-256v-96h256zM384 224v96h-48c-8.83984 0 -16 7.16016 -16 16v48h-192v-160h256zM432 152c13.25 0 24 10.75 24 24\n+c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"camera\" unicode=\"&#xf030;\" \n+d=\"M512 304v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h88l12.2998 32.9004c7 18.6992 24.9004 31.0996 44.9004 31.0996h125.5c20 0 37.8994 -12.4004 44.8994 -31.0996l12.4004 -32.9004h88c26.5 0 48 -21.5 48 -48zM376 160\n+c0 66.2002 -53.7998 120 -120 120s-120 -53.7998 -120 -120s53.7998 -120 120 -120s120 53.7998 120 120zM344 160c0 -48.5 -39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88z\" \u002F>\n+    \u003Cglyph glyph-name=\"font\" unicode=\"&#xf031;\" horiz-adv-x=\"448\" \n+d=\"M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h19.5801l-23.2998 64h-152.561l-23.2998 -64h19.5801c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h23.4102l130.71 362.31c4.07422 11.9736 17.6465 21.6904 30.2939 21.6904h0.00585938h47.1602h0.00585938c12.6475 0 26.2197 -9.7168 30.2939 -21.6904\n+l130.71 -362.31h23.4102zM176.85 176h94.3008l-47.1504 129.49z\" \u002F>\n+    \u003Cglyph glyph-name=\"bold\" unicode=\"&#xf032;\" horiz-adv-x=\"384\" \n+d=\"M333.49 210c34.4395 -27.54 55.5693 -71.1504 50.8301 -119.6c-6.86035 -70.6504 -70.2002 -122.4 -141 -122.4h-209.32c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h31.8701v288h-31.8701c-8.83203 0 -16 7.16797 -16 16v48\n+c0 8.83203 7.16797 16 16 16h199.42c74.5801 0 134.45 -64.4902 127.07 -140.79c-2.01367 -20.25 -14.1094 -49.4639 -27 -65.21zM145.66 336v-96h87.7598c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48h-87.7598zM233.42 48c30.9121 0 56 25.0879 56 56\n+s-25.0879 56 -56 56h-87.7598v-112h87.7598z\" \u002F>\n+    \u003Cglyph glyph-name=\"italic\" unicode=\"&#xf033;\" horiz-adv-x=\"320\" \n+d=\"M320 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-62.7598l-80 -320h46.7598c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h62.7598l80 320h-46.7598\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192c8.83203 0 16 -7.16797 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"text-height\" unicode=\"&#xf034;\" horiz-adv-x=\"576\" \n+d=\"M304 416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-56v-304h40c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h40v304h-56v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h288zM560 80c15.6396 0 20.6396 -18 11.3096 -27.3096l-80 -80c-2.58594 -2.58496 -7.65332 -4.68262 -11.3096 -4.68262\n+s-8.72363 2.09766 -11.3096 4.68262l-80 80c-10.0107 10 -3 27.3096 11.3096 27.3096h48v224h-48c-15.6396 0 -20.6396 18 -11.3096 27.3096l80 80c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -80\n+c10.0205 -10 3 -27.3096 -11.3096 -27.3096h-48v-224h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"text-width\" unicode=\"&#xf035;\" horiz-adv-x=\"448\" \n+d=\"M432 416c8.83203 0 16 -7.16797 16 -16v-80c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-120v-112h24c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h24v112h-120v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v80c0 8.83203 7.16797 16 16 16h416zM363.31 155.31l80 -80c2.58496 -2.58594 4.68262 -7.65332 4.68262 -11.3096s-2.09766 -8.72363 -4.68262 -11.3096\n+l-80 -80c-10 -10.0205 -27.3096 -3 -27.3096 11.3096v48h-224v-48c0 -15.6396 -18 -20.6396 -27.3096 -11.3096l-80 80c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l80 80c10 10.0107 27.3096 3 27.3096 -11.3096v-48h224v48\n+c0 15.6396 18 20.6396 27.3096 11.3096z\" \u002F>\n+    \u003Cglyph glyph-name=\"align-left\" unicode=\"&#xf036;\" horiz-adv-x=\"448\" \n+d=\"M12.8301 96c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562\n+c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM12.8301 352c-7.07715 0 -12.8301 5.74316 -12.8301 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34h0.00976562\n+c7.07715 0 12.8203 -5.74316 12.8203 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\n+v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"align-center\" unicode=\"&#xf037;\" horiz-adv-x=\"448\" \n+d=\"M432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\n+v32c0 8.83203 7.16797 16 16 16h416zM108.1 352c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105v-0.00976562\n+c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0h-231.811zM339.91 96h-231.811c-6.67871 0 -12.0996 5.4209 -12.0996 12.0996v39.8105c0 6.67383 5.41602 12.0898 12.0898 12.0898h0.00976562h231.811c6.67383 0 12.0898 -5.41602 12.0898 -12.0898v-39.8105\n+v-0.00976562c0 -6.67383 -5.41602 -12.0898 -12.0898 -12.0898v0z\" \u002F>\n+    \u003Cglyph glyph-name=\"align-right\" unicode=\"&#xf038;\" horiz-adv-x=\"448\" \n+d=\"M16 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\n+v32c0 8.83203 7.16797 16 16 16h416zM435.17 416c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203\n+v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-262.34\n+h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h262.34z\" \u002F>\n+    \u003Cglyph glyph-name=\"align-justify\" unicode=\"&#xf039;\" horiz-adv-x=\"448\" \n+d=\"M432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\n+v32c0 8.83203 7.16797 16 16 16h416zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\n+h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"list\" unicode=\"&#xf03a;\" \n+d=\"M80 80c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM80 400c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64\n+c0 8.83203 7.16797 16 16 16h64zM80 240c8.83203 0 16 -7.16797 16 -16v-64c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v64c0 8.83203 7.16797 16 16 16h64zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z\" \u002F>\n+    \u003Cglyph glyph-name=\"outdent\" unicode=\"&#xf03b;\" horiz-adv-x=\"448\" \n+d=\"M100.69 84.71l-96 95.9805c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096s2.09766 8.72363 4.68262 11.3096l96 96c9.97949 10 27.3096 3.01074 27.3096 -11.3096v-191.98c0 -14.2393 -17.3096 -21.3096 -27.3096 -11.3096zM432 32c8.83203 0 16 -7.16797 16 -16\n+v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562\n+h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562\n+c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16\n+v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"indent\" unicode=\"&#xf03c;\" horiz-adv-x=\"448\" \n+d=\"M27.3096 84.7002c-9.97949 -10 -27.3096 -3.00977 -27.3096 11.2998v192c0 14.2197 17.2695 21.3398 27.3096 11.3203l96 -96c2.58496 -2.58691 4.68262 -7.65332 4.68262 -11.3105c0 -3.65625 -2.09766 -8.72363 -4.68262 -11.3096zM432 32\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416zM435.17 160c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562\n+c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM435.17 288\n+c7.07715 0 12.8301 -5.74316 12.8301 -12.8203v-0.00976562v-38.3398v-0.00976562c0 -7.07715 -5.74316 -12.8203 -12.8203 -12.8203h-0.00976562h-230.34h-0.00976562c-7.07715 0 -12.8203 5.74316 -12.8203 12.8203v0.00976562v38.3398v0.00976562\n+c0 7.07715 5.74316 12.8203 12.8203 12.8203h0.00976562h230.34zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"video\" unicode=\"&#xf03d;\" horiz-adv-x=\"576\" \n+d=\"M336.2 384c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-288.4c0 -26.3994 -21.4004 -47.7998 -47.7998 -47.7998h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998v288.4c0 26.3994 21.4004 47.7998 47.7998 47.7998h288.4zM525.6 346.3\n+c21.3008 14.6006 50.4004 -0.399414 50.4004 -25.7998v-256.9c0 -25.5 -29.2002 -40.3994 -50.4004 -25.7998l-109.6 75.5v157.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"image\" unicode=\"&#xf03e;\" \n+d=\"M464 0h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48zM112 328c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56s56 25.0723 56 56s-25.0723 56 -56 56zM64 64h384\n+v112l-87.5146 87.5146c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-135.514 -135.515l-55.5146 55.5146c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-71.5137 -71.5146v-48z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-marker\" unicode=\"&#xf041;\" horiz-adv-x=\"384\" \n+d=\"M172.268 -53.6699c-145.298 210.639 -172.268 232.257 -172.268 309.67c0 106.039 85.9609 192 192 192s192 -85.9609 192 -192c0 -77.4131 -26.9697 -99.0312 -172.268 -309.67c-9.53516 -13.7744 -29.9307 -13.7734 -39.4648 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"adjust\" unicode=\"&#xf042;\" \n+d=\"M8 192c0 136.967 111.034 248 248 248s248 -111.034 248 -248s-111.033 -248 -248 -248s-248 111.034 -248 248zM256 8c101.689 0 184 82.2949 184 184c0 101.689 -82.2949 184 -184 184v-368z\" \u002F>\n+    \u003Cglyph glyph-name=\"tint\" unicode=\"&#xf043;\" horiz-adv-x=\"352\" \n+d=\"M205.22 425.91c46.9902 -158.48 146.78 -200.07 146.78 -311.82c0 -98.4395 -78.7197 -178.09 -176 -178.09s-176 79.6504 -176 178.09c0 111.19 100.01 154.061 146.78 311.82c9 30.1201 50.5 28.7803 58.4395 0zM176 0c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16\n+c-44.1104 0 -80 35.8896 -80 80c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16c0 -61.75 50.25 -112 112 -112z\" \u002F>\n+    \u003Cglyph glyph-name=\"edit\" unicode=\"&#xf044;\" horiz-adv-x=\"576\" \n+d=\"M402.6 364.8l90.2002 -90.2002c3.7998 -3.7998 3.7998 -10 0 -13.7998l-218.399 -218.399l-92.8008 -10.3008c-12.3994 -1.39941 -22.8994 9.10059 -21.5 21.5l10.3008 92.8008l218.399 218.399c3.7998 3.7998 10 3.7998 13.7998 0zM564.6 387.7\n+c15.2002 -15.2002 15.2002 -39.9004 0 -55.2002l-35.3994 -35.4004c-3.7998 -3.7998 -10 -3.7998 -13.7998 0l-90.2002 90.2002c-3.7998 3.7998 -3.7998 10 0 13.7998l35.3994 35.4004c15.3008 15.2002 40 15.2002 55.2002 0zM384 101.8c0 3.2002 1.2998 6.2002 3.5 8.5\n+l40 40c7.59961 7.5 20.5 2.2002 20.5 -8.5v-157.8c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h285.8c10.7002 0 16.1006 -12.9004 8.5 -20.5l-40 -40c-2.2998 -2.2002 -5.2998 -3.5 -8.5 -3.5h-229.8v-320h320v101.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"step-backward\" unicode=\"&#xf048;\" horiz-adv-x=\"448\" \n+d=\"M64 -20v424c0 6.59961 5.40039 12 12 12h48c6.59961 0 12 -5.40039 12 -12v-176.4l195.5 181c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-384c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996l-195.5 179.899v-175.3c0 -6.59961 -5.40039 -12 -12 -12h-48\n+c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"fast-backward\" unicode=\"&#xf049;\" \n+d=\"M0 12v360c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-151.9l171.5 156.5c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-131.9l171.5 156.5c20.5996 17.1006 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996\n+l-171.5 155.3v-130.7c0 -27.4004 -31.9004 -41.7002 -52.5 -24.5996l-171.5 155.3v-150.7c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"backward\" unicode=\"&#xf04a;\" \n+d=\"M11.5 167.4c-15.2998 12.7998 -15.2998 36.3994 0 49.1992l192 160c20.5996 17.2002 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7998 -52.5 -24.5996zM267.5 167.4c-15.2998 12.7998 -15.2998 36.3994 0 49.1992l192 160\n+c20.5996 17.2002 52.5 2.80078 52.5 -24.5996v-320c0 -27.4004 -31.9004 -41.7998 -52.5 -24.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"play\" unicode=\"&#xf04b;\" horiz-adv-x=\"448\" \n+d=\"M424.4 233.3c31.5 -18.5 31.3994 -64.0996 0 -82.5996l-352 -208c-31.7002 -18.7998 -72.4004 3.7998 -72.4004 41.2998v416.1c0 41.8008 43.7998 58.2002 72.4004 41.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"pause\" unicode=\"&#xf04c;\" horiz-adv-x=\"448\" \n+d=\"M144 -31h-96c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48zM448 17c0 -26.5 -21.5 -48 -48 -48h-96c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48 -21.5 48 -48v-352z\" \u002F>\n+    \u003Cglyph glyph-name=\"stop\" unicode=\"&#xf04d;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"forward\" unicode=\"&#xf04e;\" \n+d=\"M500.5 216.6c15.2998 -12.7998 15.2998 -36.3994 0 -49.1992l-192 -160c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320c0 27.4004 31.9004 41.7002 52.5 24.5996zM244.5 216.6c15.2998 -12.7998 15.2998 -36.3994 0 -49.1992l-192 -160\n+c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320c0 27.4004 31.9004 41.7002 52.5 24.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"fast-forward\" unicode=\"&#xf050;\" \n+d=\"M512 372v-360c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v151.9l-171.5 -156.5c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v131.9l-171.5 -156.5c-20.5996 -17.2002 -52.5 -2.80078 -52.5 24.5996v320\n+c0 27.4004 31.9004 41.7002 52.5 24.5996l171.5 -155.399v130.8c0 27.4004 31.9004 41.7002 52.5 24.5996l171.5 -155.399v150.8c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"step-forward\" unicode=\"&#xf051;\" horiz-adv-x=\"448\" \n+d=\"M384 404v-424c0 -6.59961 -5.40039 -12 -12 -12h-48c-6.59961 0 -12 5.40039 -12 12v176.4l-195.5 -181c-20.5996 -17.1006 -52.5 -2.80078 -52.5 24.5996v384c0 27.4004 31.9004 41.7002 52.5 24.5996l195.5 -179.899v175.3c0 6.59961 5.40039 12 12 12h48\n+c6.59961 0 12 -5.40039 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"eject\" unicode=\"&#xf052;\" horiz-adv-x=\"448\" \n+d=\"M448 64v-64c0 -17.6729 -14.3271 -32 -32 -32h-384c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h384c17.6729 0 32 -14.3271 32 -32zM48.0527 128c-41.7285 0 -63.5273 49.7324 -35.3828 80.4346l175.946 192.008\n+c19.0156 20.7432 51.7529 20.7422 70.7666 0l175.939 -192.008c28.1973 -30.7607 6.26758 -80.4346 -35.3828 -80.4346h-351.887z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-left\" unicode=\"&#xf053;\" horiz-adv-x=\"320\" \n+d=\"M34.5195 208.97l194.351 194.34c9.37012 9.37012 24.5703 9.37012 33.9395 0l22.6709 -22.6699c9.35938 -9.35938 9.36914 -24.5195 0.0390625 -33.8994l-154.029 -154.74l154.02 -154.75c9.33984 -9.37988 9.32031 -24.54 -0.0400391 -33.9004l-22.6699 -22.6699\n+c-9.37012 -9.37012 -24.5693 -9.37012 -33.9395 0l-194.341 194.351c-9.36914 9.37012 -9.36914 24.5693 0 33.9395z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-right\" unicode=\"&#xf054;\" horiz-adv-x=\"320\" \n+d=\"M285.476 175.029l-194.344 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9404 0l-22.667 22.667c-9.35742 9.35742 -9.375 24.5225 -0.0400391 33.9014l154.021 154.746l-154.021 154.745c-9.33496 9.37891 -9.31738 24.5439 0.0400391 33.9014l22.667 22.667\n+c9.37305 9.37207 24.5684 9.37207 33.9404 0l194.343 -194.344c9.37305 -9.37207 9.37305 -24.5674 0.000976562 -33.9404z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus-circle\" unicode=\"&#xf055;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM400 164v56c0 6.59961 -5.40039 12 -12 12h-92v92c0 6.59961 -5.40039 12 -12 12h-56c-6.59961 0 -12 -5.40039 -12 -12v-92h-92c-6.59961 0 -12 -5.40039 -12 -12v-56\n+c0 -6.59961 5.40039 -12 12 -12h92v-92c0 -6.59961 5.40039 -12 12 -12h56c6.59961 0 12 5.40039 12 12v92h92c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus-circle\" unicode=\"&#xf056;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM124 152h264c6.59961 0 12 5.40039 12 12v56c0 6.59961 -5.40039 12 -12 12h-264c-6.59961 0 -12 -5.40039 -12 -12v-56c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"times-circle\" unicode=\"&#xf057;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM377.6 126.9l-65.5996 65.0996l65.7002 65c4.7002 4.7002 4.7002 12.2998 0 17l-39.6006 39.5996c-4.69922 4.7002 -12.2998 4.7002 -17 0l-65.0996 -65.5996l-65 65.7002\n+c-4.7002 4.7002 -12.2998 4.7002 -17 0l-39.5996 -39.6006c-4.7002 -4.69922 -4.7002 -12.2998 0 -17l65.5996 -65.0996l-65.5996 -65c-4.7002 -4.7002 -4.7002 -12.2998 0 -17l39.5 -39.5996c4.69922 -4.7002 12.2998 -4.7002 17 0l65.0996 65.5996l65 -65.5996\n+c4.7002 -4.7002 12.2998 -4.7002 17 0l39.5996 39.5c4.7002 4.69922 4.7002 12.2998 0 17z\" \u002F>\n+    \u003Cglyph glyph-name=\"check-circle\" unicode=\"&#xf058;\" \n+d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM227.314 60.6855l184 184c6.24707 6.24805 6.24707 16.3799 0 22.6279l-22.6279 22.627c-6.24707 6.24902 -16.3789 6.24902 -22.6279 0\n+l-150.059 -150.059l-70.0586 70.0596c-6.24805 6.24805 -16.3799 6.24805 -22.6279 0l-22.6279 -22.627c-6.24707 -6.24805 -6.24707 -16.3799 0 -22.6279l104 -104c6.24902 -6.24805 16.3799 -6.24805 22.6289 -0.000976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"question-circle\" unicode=\"&#xf059;\" \n+d=\"M504 192c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248s248 -111.083 248 -248zM262.655 358c-54.4971 0 -89.2549 -22.957 -116.549 -63.7578c-3.53613 -5.28613 -2.35352 -12.415 2.71484 -16.2578l34.6982 -26.3105\n+c5.20508 -3.94727 12.6211 -3.00781 16.665 2.12207c17.8643 22.6582 30.1133 35.7969 57.3037 35.7969c20.4287 0 45.6973 -13.1475 45.6973 -32.958c0 -14.9756 -12.3623 -22.667 -32.5332 -33.9756c-23.5244 -13.1875 -54.6523 -29.6006 -54.6523 -70.6592v-4\n+c0 -6.62695 5.37305 -12 12 -12h56c6.62695 0 12 5.37305 12 12v1.33301c0 28.4619 83.1855 29.6475 83.1855 106.667c0 58.002 -60.1641 102 -116.53 102zM256 110c-25.3652 0 -46 -20.6348 -46 -46c0 -25.3643 20.6348 -46 46 -46s46 20.6357 46 46\n+c0 25.3652 -20.6348 46 -46 46z\" \u002F>\n+    \u003Cglyph glyph-name=\"info-circle\" unicode=\"&#xf05a;\" \n+d=\"M256 440c136.957 0 248 -111.083 248 -248c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248zM256 330c-23.1963 0 -42 -18.8037 -42 -42s18.8037 -42 42 -42s42 18.8037 42 42s-18.8037 42 -42 42zM312 76v24\n+c0 6.62695 -5.37305 12 -12 12h-12v100c0 6.62695 -5.37305 12 -12 12h-64c-6.62695 0 -12 -5.37305 -12 -12v-24c0 -6.62695 5.37305 -12 12 -12h12v-64h-12c-6.62695 0 -12 -5.37305 -12 -12v-24c0 -6.62695 5.37305 -12 12 -12h88c6.62695 0 12 5.37305 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"crosshairs\" unicode=\"&#xf05b;\" \n+d=\"M500 224c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-30.3643c-13.9121 -93.6748 -87.9609 -167.724 -181.636 -181.636v-30.3643c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v30.3643\n+c-93.6748 13.9121 -167.724 87.9609 -181.636 181.636h-30.3643c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h30.3643c13.9121 93.6748 87.9609 167.724 181.636 181.636v30.3643c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-30.3643\n+c93.6748 -13.9121 167.724 -87.9609 181.636 -181.636h30.3643zM288 43.3662c58.2432 12.417 104.232 58.46 116.634 116.634h-40.6338c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40.6338c-12.417 58.2432 -58.46 104.232 -116.634 116.634v-40.6338\n+c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40.6338c-58.2432 -12.417 -104.232 -58.46 -116.634 -116.634h40.6338c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40.6338\n+c12.417 -58.2432 58.46 -104.232 116.634 -116.634v40.6338c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40.6338zM288 192c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"ban\" unicode=\"&#xf05e;\" \n+d=\"M256 440c136.967 0 248 -111.034 248 -248s-111.034 -248 -248 -248s-248 111.033 -248 248s111.034 248 248 248zM386.108 322.108c-65.4121 65.4102 -165.435 70.0312 -235.639 20.6758l256.315 -256.313c49.3232 70.1562 44.7705 170.189 -20.6768 235.638z\n+M125.892 61.8916c65.4121 -65.4111 165.436 -70.0312 235.639 -20.6758l-256.315 256.313c-49.3232 -70.1562 -44.7705 -170.189 20.6768 -235.638z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-left\" unicode=\"&#xf060;\" horiz-adv-x=\"448\" \n+d=\"M257.5 2.90039l-22.2002 -22.2002c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-194.4 194.3c-9.40039 9.40039 -9.40039 24.5996 0 33.9004l194.4 194.399c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.2002 -22.2002c9.5 -9.5 9.2998 -25 -0.400391 -34.2998\n+l-120.5 -114.8h287.4c13.2998 0 24 -10.7002 24 -24v-32c0 -13.2998 -10.7002 -24 -24 -24h-287.4l120.5 -114.8c9.80078 -9.2998 10 -24.7998 0.400391 -34.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-right\" unicode=\"&#xf061;\" horiz-adv-x=\"448\" \n+d=\"M190.5 381.1l22.2002 22.2002c9.39941 9.40039 24.5996 9.40039 33.8994 0l194.4 -194.3c9.40039 -9.40039 9.40039 -24.5996 0 -33.9004l-194.4 -194.399c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.2002 22.2002c-9.5 9.5 -9.2998 25 0.400391 34.2998\n+l120.5 114.8h-287.4c-13.2998 0 -24 10.7002 -24 24v32c0 13.2998 10.7002 24 24 24h287.4l-120.5 114.8c-9.80078 9.2998 -10 24.7998 -0.400391 34.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-up\" unicode=\"&#xf062;\" horiz-adv-x=\"448\" \n+d=\"M34.9004 158.5l-22.2002 22.2002c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l194.3 194.4c9.40039 9.40039 24.5996 9.40039 33.9004 0l194.3 -194.3c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-22.2002 -22.2002c-9.5 -9.5 -25 -9.2998 -34.2998 0.400391\n+l-114.7 120.4v-287.4c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v287.4l-114.8 -120.5c-9.2998 -9.80078 -24.7998 -10 -34.2998 -0.400391z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-down\" unicode=\"&#xf063;\" horiz-adv-x=\"448\" \n+d=\"M413.1 225.5l22.2002 -22.2002c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-194.3 -194.4c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-194.399 194.4c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.2002 22.2002c9.5 9.5 25 9.2998 34.2998 -0.400391\n+l114.8 -120.5v287.4c0 13.2998 10.7002 24 24 24h32c13.2998 0 24 -10.7002 24 -24v-287.4l114.8 120.5c9.2998 9.80078 24.7998 10 34.2998 0.400391z\" \u002F>\n+    \u003Cglyph glyph-name=\"share\" unicode=\"&#xf064;\" \n+d=\"M503.691 258.164c11.0859 -9.5752 11.0703 -26.7656 0 -36.3281l-176.005 -152c-15.3867 -13.2891 -39.6865 -2.53613 -39.6865 18.1641v87.915c-155.083 -2.23145 -221.934 -40.7295 -176.59 -185.742c5.03418 -16.0977 -14.4238 -28.5615 -28.0771 -18.6309\n+c-43.752 31.8232 -83.333 92.6914 -83.333 154.132c0 152.227 127.371 184.419 288 186.258v80.0537c0 20.668 24.2812 31.4688 39.6865 18.1641z\" \u002F>\n+    \u003Cglyph glyph-name=\"expand\" unicode=\"&#xf065;\" horiz-adv-x=\"448\" \n+d=\"M0 268v124c0 13.2998 10.7002 24 24 24h124c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84v-84c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12zM288 404c0 6.59961 5.40039 12 12 12h124c13.2998 0 24 -10.7002 24 -24\n+v-124c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v84h-84c-6.59961 0 -12 5.40039 -12 12v40zM436 128c6.59961 0 12 -5.40039 12 -12v-124c0 -13.2998 -10.7002 -24 -24 -24h-124c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84\n+v84c0 6.59961 5.40039 12 12 12h40zM160 -20c0 -6.59961 -5.40039 -12 -12 -12h-124c-13.2998 0 -24 10.7002 -24 24v124c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-84h84c6.59961 0 12 -5.40039 12 -12v-40z\" \u002F>\n+    \u003Cglyph glyph-name=\"compress\" unicode=\"&#xf066;\" horiz-adv-x=\"448\" \n+d=\"M436 256h-124c-13.2998 0 -24 10.7002 -24 24v124c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-84h84c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM160 280c0 -13.2998 -10.7002 -24 -24 -24h-124\n+c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84v84c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-124zM160 -20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v84h-84c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h124c13.2998 0 24 -10.7002 24 -24v-124zM352 -20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v124c0 13.2998 10.7002 24 24 24h124c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84v-84z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus\" unicode=\"&#xf067;\" horiz-adv-x=\"448\" \n+d=\"M416 240c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-144v-144c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v144h-144c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h144v144\n+c0 17.6699 14.3301 32 32 32h32c17.6699 0 32 -14.3301 32 -32v-144h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus\" unicode=\"&#xf068;\" horiz-adv-x=\"448\" \n+d=\"M416 240c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"asterisk\" unicode=\"&#xf069;\" \n+d=\"M478.21 113.907c11.7949 -6.47754 15.96 -21.3828 9.23242 -33.0361l-19.4805 -33.7412c-6.72754 -11.6533 -21.7207 -15.499 -33.2266 -8.52246l-138.735 84.1104l3.47559 -162.204c0.288086 -13.4531 -10.5391 -24.5137 -23.9941 -24.5137h-38.9619\n+c-13.4551 0 -24.2822 11.0605 -23.9941 24.5137l3.47461 162.204l-138.735 -84.1113c-11.5059 -6.97656 -26.499 -3.13086 -33.2266 8.52246l-19.4805 33.7412c-6.72852 11.6533 -2.5625 26.5596 9.23242 33.0371l142.21 78.0928l-142.209 78.0918\n+c-11.7949 6.47754 -15.9609 21.3838 -9.2334 33.0371l19.4805 33.7412c6.72754 11.6533 21.7207 15.499 33.2266 8.52246l138.735 -84.1104l-3.47363 162.204c-0.289062 13.4531 10.5381 24.5137 23.9932 24.5137h38.9609c13.4561 0 24.2822 -11.0605 23.9941 -24.5137\n+l-3.47461 -162.204l138.735 84.1113c11.5068 6.97656 26.499 3.13086 33.2266 -8.52246l19.4805 -33.7412c6.72852 -11.6533 2.5625 -26.5596 -9.23242 -33.0371l-142.21 -78.0928z\" \u002F>\n+    \u003Cglyph glyph-name=\"exclamation-circle\" unicode=\"&#xf06a;\" \n+d=\"M504 192c0 -136.997 -111.043 -248 -248 -248s-248 111.003 -248 248c0 136.917 111.043 248 248 248s248 -111.083 248 -248zM256 142c-25.4053 0 -46 -20.5947 -46 -46s20.5947 -46 46 -46s46 20.5947 46 46s-20.5947 46 -46 46zM212.327 307.346l7.41797 -136\n+c0.34668 -6.36328 5.6084 -11.3457 11.9814 -11.3457h48.5469c6.37305 0 11.6348 4.98242 11.9814 11.3457l7.41797 136c0.375 6.87402 -5.09766 12.6543 -11.9814 12.6543h-63.3838c-6.88379 0 -12.3555 -5.78027 -11.9805 -12.6543z\" \u002F>\n+    \u003Cglyph glyph-name=\"gift\" unicode=\"&#xf06b;\" \n+d=\"M32 0v128h192v-160h-160c-17.7002 0 -32 14.2998 -32 32zM288 -32v160h192v-128c0 -17.7002 -14.2998 -32 -32 -32h-160zM480 288c17.7002 0 32 -14.2998 32 -32v-80c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v80c0 17.7002 14.2998 32 32 32\n+h44.0996c-6.2998 12.0996 -10.0996 25.5 -10.0996 40c0 48.5 39.5 88 88 88c41.5996 0 68.5 -21.2998 103 -68.2998c34.5 47 61.4004 68.2998 103 68.2998c48.5 0 88 -39.5 88 -88c0 -14.5 -3.90039 -27.9004 -10.0996 -40h42.0996zM153.9 288h86.0996\n+c-51.5 76.7002 -66.2002 80 -86.0996 80c-22.1006 0 -40 -17.9004 -40 -40s17.8994 -40 40 -40zM360 288c22.0996 0 40 17.9004 40 40s-17.9004 40 -40 40c-20.4004 0 -34.7002 -3.5 -86.0996 -80h86.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"leaf\" unicode=\"&#xf06c;\" horiz-adv-x=\"576\" \n+d=\"M546.2 438.3c19 -42.3994 29.7998 -94.3994 29.7998 -144.6c0 -172.4 -110.5 -313.2 -267.5 -324.601c-80.9004 -8.59961 -142.5 33.3008 -174.9 77.2002c-51 -42.7002 -70.3994 -87 -71.8994 -90.5996c-6.7998 -16.2002 -25.4004 -24.1006 -41.7998 -17.2998\n+c-16.3008 6.69922 -24.1006 25.2998 -17.5 41.5996c23.5996 57.9004 130.199 212 381.6 212c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16c-130.6 0 -222.7 -38.7998 -286.5 -84.5c-0.700195 6.7998 -1.5 13.5 -1.5 20.5c0 106 86 192 192 192h80\n+c63.4004 0 118.9 33.5996 149.9 87.5c6.69922 11.7998 22.6992 11.2998 28.2998 -1.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"fire\" unicode=\"&#xf06d;\" horiz-adv-x=\"384\" \n+d=\"M216 424.14c0 -103.14 168 -125.85 168 -296.14c0 -105.87 -86.1299 -192 -192 -192s-192 86.1299 -192 192c0 58.6699 27.7998 106.84 54.5703 134.96c14.96 15.7305 41.4297 5.2002 41.4297 -16.5v-85.5098c0 -35.1699 27.9805 -64.4902 63.1504 -64.9404\n+c35.7393 -0.469727 64.8496 28.3604 64.8496 63.9902c0 88 -176 96.1504 -52.1504 277.18c13.5 19.7305 44.1504 10.7607 44.1504 -13.04z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye\" unicode=\"&#xf06e;\" horiz-adv-x=\"576\" \n+d=\"M572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947\n+s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41s230.29 -71.5898 284.52 -177.4zM288 48h0.0703125c79.4492 0 143.93 64.4805 143.93 143.93v0.0703125c0 79.4883 -64.5117 144 -144 144s-144 -64.5117 -144 -144s64.5117 -144 144 -144z\n+M288 288h0.225586c52.8701 0 95.7803 -42.9092 95.7803 -95.7793c0 -52.8711 -42.9102 -95.7803 -95.7803 -95.7803c-52.8711 0 -95.7803 42.9092 -95.7803 95.7803c0 7.04785 1.49805 18.2871 3.34473 25.0889c6.9834 -5.13867 19.6895 -9.30957 28.3604 -9.30957\n+c26.4131 0 47.8496 21.4365 47.8496 47.8496c0 8.6709 -4.1709 21.377 -9.30957 28.3604c6.84375 1.99219 18.1826 3.69043 25.3096 3.79004z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye-slash\" unicode=\"&#xf070;\" horiz-adv-x=\"640\" \n+d=\"M320 48c7.24121 0.0673828 18.8896 1.23633 26 2.61035l51.8896 -40.1504c-25.0195 -6.45996 -50.9795 -10.46 -77.8896 -10.46c-122.93 0 -230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947\n+c10.2393 20 22.9297 38.29 36.7197 55.5898l104.899 -81.0693c5.65039 -74.4004 67.0508 -133.11 142.9 -133.11zM633.82 -10.0996c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705\n+c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.729c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.0293 1.50879 7.42773 3.36816 9.81934l19.6299 25.2705\n+c2.65234 3.41211 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51172 9.82617 -3.37305l127.22 -98.3301c38.0117 20.7578 104.011 37.6475 147.32 37.7002c122.93 0 230.29 -71.5898 284.52 -177.4c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947\n+s-1.55859 -10.7959 -3.47949 -14.5947c-16.7666 -32.6758 -53.166 -78.4033 -81.25 -102.07zM450.1 131.9c8.61035 18.3203 13.9004 38.4697 13.9004 60.0996v0.0800781c0 79.4434 -64.4766 143.92 -143.92 143.92h-0.0800781\n+c-28.4697 -0.0214844 -69.3047 -14.8545 -91.1504 -33.1104l73.6104 -56.8896c0.726562 2.71387 1.41602 7.19336 1.54004 10c-0.015625 8.62891 -4.18652 21.2666 -9.30957 28.21c7.17969 2.09668 19.0781 3.79785 26.5576 3.79785\n+c52.3076 0 94.7598 -42.4521 94.7598 -94.7598c0 -0.344727 -0.00292969 -0.90332 -0.0078125 -1.24805c-0.112305 -8.43457 -2.44238 -21.749 -5.2002 -29.7197z\" \u002F>\n+    \u003Cglyph glyph-name=\"exclamation-triangle\" unicode=\"&#xf071;\" horiz-adv-x=\"576\" \n+d=\"M569.517 7.9873c18.458 -31.9941 -4.71094 -71.9873 -41.5762 -71.9873h-479.887c-36.9365 0 -59.999 40.0547 -41.5771 71.9873l239.946 416.027c18.4668 32.0098 64.7197 31.9512 83.1543 0zM288 94c-25.4053 0 -46 -20.5947 -46 -46s20.5947 -46 46 -46\n+s46 20.5947 46 46s-20.5947 46 -46 46zM244.327 259.346l7.41797 -136c0.34668 -6.36328 5.6084 -11.3457 11.9814 -11.3457h48.5469c6.37305 0 11.6348 4.98242 11.9814 11.3457l7.41797 136c0.375 6.87402 -5.09766 12.6543 -11.9814 12.6543h-63.3838\n+c-6.88379 0 -12.3555 -5.78027 -11.9805 -12.6543z\" \u002F>\n+    \u003Cglyph glyph-name=\"plane\" unicode=\"&#xf072;\" horiz-adv-x=\"576\" \n+d=\"M480 256c35.3496 0 96 -28.6504 96 -64s-60.6504 -64 -96 -64h-114.29l-105.11 -183.94c-2.84961 -4.97949 -8.14941 -8.05957 -13.8896 -8.05957h-65.5c-10.6299 0 -18.2998 10.1797 -15.3799 20.4004l49.0303 171.6h-102.86l-43.2002 -57.5996\n+c-3.01953 -4.03027 -7.75977 -6.40039 -12.7998 -6.40039h-39.9902c-10.4102 0 -18.0498 9.78027 -15.5195 19.8799l31.5098 108.12l-31.5098 108.12c-2.53027 10.0996 5.10938 19.8799 15.5195 19.8799h39.9902c5.03027 0 9.78027 -2.37012 12.7998 -6.40039\n+l43.2002 -57.5996h102.86l-49.0303 171.61c-2.91992 10.2197 4.75 20.3896 15.3799 20.3896h65.5h0.000976562c5.12598 0 11.3525 -3.61133 13.8994 -8.05957l105.1 -183.94h114.29z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-alt\" unicode=\"&#xf073;\" horiz-adv-x=\"448\" \n+d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM320 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM320 52v-40\n+c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM192 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40\n+c-6.59961 0 -12 -5.40039 -12 -12zM192 52v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM64 180v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40\n+c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM64 52v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12zM400 384c26.5 0 48 -21.5 48 -48v-48h-448v48\n+c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"random\" unicode=\"&#xf074;\" \n+d=\"M504.971 88.9707c9.37305 -9.37305 9.37305 -24.5684 0 -33.9404l-80 -79.9844c-15.0098 -15.0098 -40.9707 -4.49023 -40.9707 16.9707v39.9834h-58.7852c-2.87793 0 -6.80859 1.70801 -8.77246 3.81152l-70.5566 75.5967l53.333 57.1426l52.7812 -56.5508h32v39.9814\n+c0 21.4375 25.9434 31.9971 40.9707 16.9707zM12 272c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h110.785h0.000976562c2.87793 0 6.80762 -1.70801 8.77148 -3.81152l70.5566 -75.5967l-53.333 -57.1426l-52.7812 56.5508h-84zM384 272h-32\n+l-220.442 -236.188c-2.26953 -2.43066 -5.44629 -3.81152 -8.77246 -3.81152h-110.785c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h84l220.442 236.188c1.96387 2.10352 5.89453 3.81152 8.77246 3.81152h58.7852v39.9814\n+c0 21.4365 25.9434 31.9971 40.9707 16.9697l80 -79.9814c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-80 -79.9844c-15.0098 -15.0088 -40.9707 -4.48926 -40.9707 16.9707v39.9844z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment\" unicode=\"&#xf075;\" \n+d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\n+c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208z\" \u002F>\n+    \u003Cglyph glyph-name=\"magnet\" unicode=\"&#xf076;\" \n+d=\"M164.07 299.9h-152.07c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80c0 -0.03125 0.000976562 -0.0800781 0.000976562 -0.110352c0 -6.56348 -5.32715 -11.8896 -11.8906 -11.8896h-0.0400391zM512 311.9\n+c0 -6.56348 -5.32715 -11.9014 -11.8896 -11.9014c-0.0302734 0 -0.0800781 0.000976562 -0.110352 0.000976562h-152c-6.62402 0 -12 5.37598 -12 12v80c0 19.8721 16.1279 36 36 36h104c19.8721 0 36 -16.1279 36 -36v-80.0996zM348 267.9h151.85h0.000976562\n+c6.62402 0 12 -5.37598 12 -12c0 -0.0283203 0 -0.0732422 -0.000976562 -0.100586c-0.199219 -20.2002 -0.599609 -40.3994 0 -53.2002c0 -150.699 -134.42 -246.699 -255 -246.699s-256.75 96 -256.75 246.6c0.600586 13 0.100586 31.9004 0 53.2998v0.100586\n+c0 6.62402 5.37598 12 12 12v0h151.9c6.62402 0 12 -5.37598 12 -12v-52c0 -127.9 160 -128.101 160 0v52c0 6.62402 5.37598 12 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-up\" unicode=\"&#xf077;\" horiz-adv-x=\"448\" \n+d=\"M240.971 317.476l194.344 -194.343c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-22.667 -22.667c-9.35742 -9.35742 -24.5225 -9.375 -33.9014 -0.0400391l-154.746 154.02l-154.745 -154.021c-9.37891 -9.33496 -24.5439 -9.31738 -33.9014 0.0400391\n+l-22.667 22.667c-9.37207 9.37305 -9.37207 24.5684 0 33.9404l194.344 194.343c9.37207 9.37305 24.5674 9.37305 33.9404 0.000976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-down\" unicode=\"&#xf078;\" horiz-adv-x=\"448\" \n+d=\"M207.029 66.5244l-194.344 194.344c-9.37207 9.37305 -9.37207 24.5684 0 33.9404l22.667 22.667c9.35742 9.35742 24.5225 9.375 33.9014 0.0400391l154.746 -154.021l154.745 154.021c9.37891 9.33496 24.5439 9.31738 33.9014 -0.0400391l22.667 -22.667\n+c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-194.343 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9414 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"retweet\" unicode=\"&#xf079;\" horiz-adv-x=\"640\" \n+d=\"M629.657 104.402l-100.687 -100.687c-9.37305 -9.37207 -24.5674 -9.37207 -33.9404 0l-100.688 100.687c-9.37305 9.37305 -9.37305 24.5684 0 33.9404l10.8232 10.8232c9.56152 9.56152 25.1328 9.33984 34.4189 -0.492188l40.415 -42.792v182.118h-187.549\n+c-5.4873 0 -13.0908 3.14941 -16.9707 7.0293l-16 16c-15.1191 15.1201 -4.41113 40.9707 16.9707 40.9707h243.549c13.2549 0 24 -10.7451 24 -24v-222.118l40.416 42.792c9.28516 9.83105 24.8564 10.0537 34.4189 0.492188l10.8232 -10.8232\n+c9.37207 -9.37207 9.37207 -24.5684 -0.000976562 -33.9404zM364.519 88.9707l16.001 -16c15.1191 -15.1201 4.41113 -40.9707 -16.9707 -40.9707h-243.549c-13.2549 0 -24 10.7451 -24 24v222.119l-40.416 -42.793c-9.28613 -9.83105 -24.8574 -10.0527 -34.4189 -0.491211\n+l-10.8223 10.8223c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l100.688 100.687c9.37207 9.37305 24.5674 9.37305 33.9404 0l100.687 -100.686c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-10.8223 -10.8223c-9.5625 -9.5625 -25.1328 -9.33984 -34.4189 0.491211\n+l-40.416 42.792v-182.119h187.548h0.000976562c5.4873 0 13.0898 -3.14941 16.9697 -7.0293z\" \u002F>\n+    \u003Cglyph glyph-name=\"shopping-cart\" unicode=\"&#xf07a;\" horiz-adv-x=\"576\" \n+d=\"M528.12 146.681c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -30.9277 -25.0723 -56 -56 -56\n+s-56 25.0723 -56 56c0 15.6738 6.44727 29.835 16.8232 40h-209.647c10.377 -10.165 16.8242 -24.3262 16.8242 -40c0 -30.9277 -25.0723 -56 -56 -56s-56 25.0723 -56 56c0 20.7783 11.3252 38.9004 28.1309 48.5654l-70.248 343.435h-69.8828\n+c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2285 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782c15.4004 0 26.8154 -14.3008 23.4023 -29.3193z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder\" unicode=\"&#xf07b;\" \n+d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder-open\" unicode=\"&#xf07c;\" horiz-adv-x=\"576\" \n+d=\"M572.694 155.907l-72.4248 -124.155c-10.2236 -17.5273 -34.9883 -31.752 -55.2793 -31.752h-0.000976562h-399.964c-18.5234 0 -30.0645 20.0928 -20.7314 36.0928l72.4238 124.155c10.2246 17.5273 34.9902 31.752 55.2822 31.752v0h399.964\n+c18.5234 0 30.0645 -20.0928 20.7305 -36.0928zM152 224c-34.0107 0 -65.7861 -18.25 -82.9229 -47.6279l-69.0771 -118.418v278.046c0 26.5098 21.4902 48 48 48h160l64 -64h160c26.5098 0 48 -21.4902 48 -48v-48h-328z\" \u002F>\n+    \u003Cglyph glyph-name=\"chart-bar\" unicode=\"&#xf080;\" \n+d=\"M332.8 128c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v134.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-134.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM428.8 128\n+c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v230.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-230.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM140.8 128\n+c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v70.4004c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-70.4004c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM236.8 128\n+c-6.39941 0 -12.7998 6.40039 -12.7998 12.7998v198.4c0 6.39941 6.40039 12.7998 12.7998 12.7998h38.4004c6.39941 0 12.7998 -6.40039 12.7998 -12.7998v-198.4c0 -6.39941 -6.40039 -12.7998 -12.7998 -12.7998h-38.4004zM496 64c8.83984 0 16 -7.16016 16 -16v-32\n+c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-304h432z\" \u002F>\n+    \u003Cglyph glyph-name=\"camera-retro\" unicode=\"&#xf083;\" \n+d=\"M48 416h416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48zM48 384c-8.7998 0 -16 -7.2002 -16 -16v-10c0 -3.2998 2.7002 -6 6 -6h116c3.2998 0 6 2.7002 6 6v20c0 3.2998 -2.7002 6 -6 6h-106z\n+M474 288c3.2998 0 6 2.7002 6 6v74c0 8.7998 -7.2002 16 -16 16h-252.8c-2 0 -3.90039 -1 -5 -2.7002l-30.2002 -45.2998h-138c-3.2998 0 -6 -2.7002 -6 -6v-36c0 -3.2998 2.7002 -6 6 -6h436zM256 24c66.2002 0 120 53.7998 120 120s-53.7998 120 -120 120\n+s-120 -53.7998 -120 -120s53.7998 -120 120 -120zM256 232c48.5 0 88 -39.5 88 -88s-39.5 -88 -88 -88s-88 39.5 -88 88s39.5 88 88 88zM208 128c8.7998 0 16 7.2002 16 16c0 17.5996 14.4004 32 32 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\n+c-35.2998 0 -64 -28.7002 -64 -64c0 -8.7998 7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"key\" unicode=\"&#xf084;\" \n+d=\"M512 271.999c0 -97.2021 -78.7979 -175.999 -176 -175.999c-11.2197 0 -22.1904 1.06152 -32.8271 3.06934l-24.0117 -27.0146c-3.95215 -4.44629 -11.9883 -8.05469 -17.9375 -8.05469h-0.000976562h-37.2227v-40c0 -13.2549 -10.7451 -24 -24 -24h-40v-40\n+c0 -13.2549 -10.7451 -24 -24 -24h-112c-13.2549 0 -24 10.7451 -24 24v78.0586c0 6.36523 2.5293 12.4707 7.0293 16.9717l161.802 161.802c-5.72266 17.3535 -8.83105 35.8965 -8.83105 55.168c0 97.2021 78.7969 175.999 175.999 176\n+c97.4893 0.000976562 176.001 -78.5107 176.001 -176.001zM336 320c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"cogs\" unicode=\"&#xf085;\" horiz-adv-x=\"640\" \n+d=\"M512.1 257l-8.19922 -14.2998c-3 -5.2998 -9.40039 -7.5 -15.1006 -5.40039c-11.7998 4.40039 -22.5996 10.7002 -32.0996 18.6006c-4.60059 3.7998 -5.7998 10.5 -2.7998 15.6992l8.19922 14.3008c-6.89941 8 -12.2998 17.2998 -15.8994 27.3994h-16.5\n+c-6 0 -11.2002 4.2998 -12.2002 10.2998c-2 12 -2.09961 24.6006 0 37.1006c1 6 6.2002 10.3994 12.2002 10.3994h16.5c3.59961 10.1006 9 19.4004 15.8994 27.4004l-8.19922 14.2998c-3 5.2002 -1.90039 11.9004 2.7998 15.7002\n+c9.5 7.90039 20.3994 14.2002 32.0996 18.5996c5.7002 2.10059 12.1006 -0.0996094 15.1006 -5.39941l8.19922 -14.2998c10.5 1.89941 21.2002 1.89941 31.7002 0l8.2002 14.2998c3 5.2998 9.40039 7.5 15.0996 5.39941c11.8008 -4.39941 22.6006 -10.6992 32.1006 -18.5996\n+c4.59961 -3.7998 5.7998 -10.5 2.7998 -15.7002l-8.2002 -14.2998c6.90039 -8 12.2998 -17.2998 15.9004 -27.4004h16.5c6 0 11.2002 -4.2998 12.2002 -10.2998c2 -12 2.09961 -24.5996 0 -37.0996c-1 -6 -6.2002 -10.4004 -12.2002 -10.4004h-16.5\n+c-3.60059 -10.0996 -9 -19.3994 -15.9004 -27.3994l8.2002 -14.3008c3 -5.19922 1.90039 -11.8994 -2.7998 -15.6992c-9.5 -7.90039 -20.4004 -14.2002 -32.1006 -18.6006c-5.69922 -2.09961 -12.0996 0.100586 -15.0996 5.40039l-8.2002 14.2998\n+c-10.3994 -1.90039 -21.2002 -1.90039 -31.7002 0zM501.6 315.8c38.5 -29.5996 82.4004 14.2998 52.8008 52.7998c-38.5 29.7002 -82.4004 -14.2998 -52.8008 -52.7998zM386.3 161.9l33.7002 -16.8008c10.0996 -5.7998 14.5 -18.0996 10.5 -29.0996\n+c-8.90039 -24.2002 -26.4004 -46.4004 -42.5996 -65.7998c-7.40039 -8.90039 -20.2002 -11.1006 -30.3008 -5.2998l-29.0996 16.7998c-16 -13.7002 -34.5996 -24.6006 -54.9004 -31.7002v-33.5996c0 -11.6006 -8.2998 -21.6006 -19.6992 -23.6006\n+c-24.6006 -4.2002 -50.4004 -4.39941 -75.9004 0c-11.5 2 -20 11.9004 -20 23.6006v33.5996c-20.2998 7.2002 -38.9004 18 -54.9004 31.7002l-29.0996 -16.7002c-10 -5.7998 -22.9004 -3.59961 -30.2998 5.2998c-16.2002 19.4004 -33.2998 41.6006 -42.2002 65.7002\n+c-4 10.9004 0.400391 23.2002 10.5 29.0996l33.2998 16.8008c-3.89941 20.8994 -3.89941 42.3994 0 63.3994l-33.2998 16.9004c-10.0996 5.7998 -14.5996 18.0996 -10.5 29c8.90039 24.2002 26 46.3994 42.2002 65.7998c7.39941 8.90039 20.2002 11.0996 30.2998 5.2998\n+l29.0996 -16.7998c16 13.7002 34.6006 24.5996 54.9004 31.7002v33.7002c0 11.5 8.2002 21.5 19.5996 23.5c24.6006 4.19922 50.5 4.39941 76 0.0996094c11.5 -2 20 -11.9004 20 -23.5996v-33.6006c20.3008 -7.2002 38.9004 -18 54.9004 -31.7002l29.0996 16.8008\n+c10 5.7998 22.9004 3.59961 30.3008 -5.30078c16.1992 -19.3994 33.1992 -41.5996 42.0996 -65.7998c4 -10.8994 0.0996094 -23.2002 -10 -29.0996l-33.7002 -16.7998c3.90039 -21 3.90039 -42.5 0 -63.5zM268.7 140.8c59.2002 77 -28.7002 164.9 -105.7 105.7\n+c-59.2002 -77 28.7002 -164.9 105.7 -105.7zM512.1 -41.9004l-8.19922 -14.2998c-3 -5.2998 -9.40039 -7.5 -15.1006 -5.39941c-11.7998 4.39941 -22.5996 10.6992 -32.0996 18.5996c-4.60059 3.7998 -5.7998 10.5 -2.7998 15.7002l8.19922 14.2998\n+c-6.89941 8 -12.2998 17.2998 -15.8994 27.4004h-16.5c-6 0 -11.2002 4.2998 -12.2002 10.2998c-2 12 -2.09961 24.5996 0 37.0996c1 6 6.2002 10.4004 12.2002 10.4004h16.5c3.59961 10.0996 9 19.3994 15.8994 27.3994l-8.19922 14.3008\n+c-3 5.19922 -1.90039 11.8994 2.7998 15.6992c9.5 7.90039 20.3994 14.2002 32.0996 18.6006c5.7002 2.09961 12.1006 -0.100586 15.1006 -5.40039l8.19922 -14.2998c10.5 1.90039 21.2002 1.90039 31.7002 0l8.2002 14.2998c3 5.2998 9.40039 7.5 15.0996 5.40039\n+c11.8008 -4.40039 22.6006 -10.7002 32.1006 -18.6006c4.59961 -3.7998 5.7998 -10.5 2.7998 -15.6992l-8.2002 -14.3008c6.90039 -8 12.2998 -17.2998 15.9004 -27.3994h16.5c6 0 11.2002 -4.2998 12.2002 -10.2998c2 -12 2.09961 -24.6006 0 -37.1006\n+c-1 -6 -6.2002 -10.3994 -12.2002 -10.3994h-16.5c-3.60059 -10.1006 -9 -19.4004 -15.9004 -27.4004l8.2002 -14.2998c3 -5.2002 1.90039 -11.9004 -2.7998 -15.7002c-9.5 -7.90039 -20.4004 -14.2002 -32.1006 -18.5996\n+c-5.69922 -2.10059 -12.0996 0.0996094 -15.0996 5.39941l-8.2002 14.2998c-10.3994 -1.89941 -21.2002 -1.89941 -31.7002 0zM501.6 17c38.5 -29.5996 82.4004 14.2998 52.8008 52.7998c-38.5 29.6006 -82.4004 -14.2998 -52.8008 -52.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"comments\" unicode=\"&#xf086;\" horiz-adv-x=\"576\" \n+d=\"M416 256c0 -88.4004 -93.0996 -160 -208 -160c-41 0 -79.0996 9.2998 -111.3 25c-21.7998 -12.7002 -52.1006 -25 -88.7002 -25c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002c0.299805 0.299805 22.3994 24.2998 35.7998 54.5\n+c-23.9004 26.0996 -38 57.7002 -38 92c0 88.4004 93.0996 160 208 160s208 -71.5996 208 -160zM538 36c13.4004 -30.2998 35.5 -54.2002 35.7998 -54.5c2.2002 -2.40039 2.7998 -5.7998 1.5 -8.7002c-1.2002 -2.89941 -4.09961 -4.7998 -7.2998 -4.7998\n+c-36.5996 0 -66.9004 12.2998 -88.7002 25c-32.2002 -15.7998 -70.2998 -25 -111.3 -25c-86.2002 0 -160.2 40.4004 -191.7 97.9004c10.4004 -1.10059 20.9004 -1.90039 31.7002 -1.90039c132.3 0 240 86.0996 240 192c0 6.7998 -0.400391 13.5 -1.2998 20.0996\n+c75.7998 -23.8994 129.3 -81.1992 129.3 -148.1c0 -34.2998 -14.0996 -66 -38 -92z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-half\" unicode=\"&#xf089;\" horiz-adv-x=\"576\" \n+d=\"M288 448v-439.6l-130.7 -68.6006c-23.3994 -12.2998 -50.8994 7.60059 -46.3994 33.7002l25 145.5l-105.7 103c-19 18.5 -8.5 50.7998 17.7002 54.5996l146.1 21.2002l65.2998 132.4c5.90039 11.8994 17.2998 17.7998 28.7002 17.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbtack\" unicode=\"&#xf08d;\" horiz-adv-x=\"384\" \n+d=\"M298.028 233.733c47.9893 -22.3135 85.9717 -62.5508 85.9727 -113.733c0 -13.2549 -10.7451 -24 -24 -24h-136v-104.007c0 -1.04297 -0.378906 -2.64551 -0.844727 -3.57812l-24 -48c-2.94727 -5.89258 -11.3701 -5.88184 -14.3115 0l-24 48\n+c-0.555664 1.11133 -0.844727 2.33594 -0.844727 3.57812v104.007h-136c-13.2549 0 -24 10.7451 -24 24c0 50.7393 37.4648 91.1797 85.9717 113.733l12.2354 118.267h-42.207c-13.2549 0 -24 10.7451 -24 24v48c0 13.2549 10.7451 24 24 24h272\n+c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-42.207z\" \u002F>\n+    \u003Cglyph glyph-name=\"trophy\" unicode=\"&#xf091;\" horiz-adv-x=\"576\" \n+d=\"M552 384c13.2998 0 24 -10.7002 24 -24v-56c0 -35.7002 -22.5996 -72.4004 -61.9004 -100.7c-31.3994 -22.7002 -69.6992 -37.0996 -110 -41.7002c-31.3994 -52.0996 -68.0996 -73.5996 -68.0996 -73.5996v-72h48c35.2998 0 64 -20.7002 64 -56v-12\n+c0 -6.59961 -5.40039 -12 -12 -12h-296c-6.59961 0 -12 5.40039 -12 12v12c0 35.2998 28.7002 56 64 56h48v72s-36.7002 21.5 -68.0996 73.5996c-40.2002 4.60059 -78.5 19 -110 41.7002c-39.4004 28.2998 -61.9004 65 -61.9004 100.7v56c0 13.2998 10.7002 24 24 24h104v40\n+c0 13.2998 10.7002 24 24 24h272c13.2998 0 24 -10.7002 24 -24v-40h104zM99.2998 255.2c12.5 -9 26.6006 -16.2002 41.7002 -21.4004c-7 25 -11.7998 53.6006 -12.7998 86.2002h-64.2002v-16c0 -11.5996 10.9004 -31.2002 35.2998 -48.7998zM512 304v16h-64.2998\n+c-1 -32.5996 -5.7998 -61.2002 -12.7998 -86.2002c15.0996 5.2002 29.2998 12.4004 41.7998 21.4004c17.5996 12.7002 35.2998 32.7002 35.2998 48.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"upload\" unicode=\"&#xf093;\" \n+d=\"M296 64h-80c-13.2998 0 -24 10.7002 -24 24v168h-87.7002c-17.7998 0 -26.7002 21.5 -14.0996 34.0996l152.1 152.2c7.5 7.5 19.7998 7.5 27.2998 0l152.2 -152.2c12.6006 -12.5996 3.7002 -34.0996 -14.0996 -34.0996h-87.7002v-168c0 -13.2998 -10.7002 -24 -24 -24z\n+M512 72v-112c0 -13.2998 -10.7002 -24 -24 -24h-464c-13.2998 0 -24 10.7002 -24 24v112c0 13.2998 10.7002 24 24 24h136v-8c0 -30.9004 25.0996 -56 56 -56h80c30.9004 0 56 25.0996 56 56v8h136c13.2998 0 24 -10.7002 24 -24zM388 -16c0 11 -9 20 -20 20s-20 -9 -20 -20\n+s9 -20 20 -20s20 9 20 20zM452 -16c0 11 -9 20 -20 20s-20 -9 -20 -20s9 -20 20 -20s20 9 20 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"lemon\" unicode=\"&#xf094;\" \n+d=\"M489.038 425.037c23.0938 -23.0938 28.8916 -54.3906 16.833 -75.0928c-34.3115 -58.9043 53.0762 -181.249 -86.7461 -321.071s-262.167 -52.4326 -321.068 -86.7432c-20.7031 -12.0586 -52 -6.2627 -75.0947 16.832c-23.0928 23.0938 -28.8916 54.3906 -16.833 75.0928\n+c34.3125 58.9043 -53.0781 181.247 86.7451 321.07s262.167 52.4336 321.073 86.7461c20.7012 12.0586 51.9971 6.25879 75.0908 -16.834zM243.881 352.478c8.57227 2.14355 13.7832 10.8291 11.6416 19.4023c-2.14258 8.57324 -10.8281 13.7852 -19.4033 11.6426\n+c-69.8027 -17.4521 -154.218 -101.949 -171.643 -171.643c-2.1416 -8.57324 3.07031 -17.2588 11.6426 -19.4033c1.30273 -0.324219 2.6084 -0.480469 3.89258 -0.480469c7.16895 0 13.6943 4.85352 15.5117 12.124c14.5498 58.2031 90.1689 133.811 148.357 148.357z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone\" unicode=\"&#xf095;\" \n+d=\"M493.4 423.4c10.8994 -2.5 18.5996 -12.2002 18.5996 -23.4004c0 -256.5 -207.9 -464 -464 -464c-11.2998 0 -20.9004 7.7998 -23.4004 18.5996l-24 104c-2.59961 11.3008 3.30078 22.9004 14 27.6006l112 48c9.80078 4.2002 21.2002 1.39941 28 -6.90039\n+l49.6006 -60.5996c78.2998 36.7002 141.2 100.5 177.2 177.2l-60.6006 49.5996c-8.2998 6.7002 -11.0996 18.2002 -6.89941 28l48 112c4.59961 10.5996 16.1992 16.5 27.5 13.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone-square\" unicode=\"&#xf098;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM94 32c160.055 0 290 129.708 290 290v0c0 6.58691 -5.20898 13.1338 -11.6279 14.6143l-65 14.998\n+c-0.918945 0.211914 -2.42969 0.383789 -3.37305 0.383789c-5.45996 0 -11.6367 -4.07324 -13.7871 -9.09082l-30 -69.998c-0.668945 -1.5625 -1.21191 -4.20898 -1.21191 -5.9082c0 -3.92383 2.46387 -9.125 5.50098 -11.6104l37.8857 -30.9971\n+c-22.4834 -47.9219 -61.8369 -87.8164 -110.78 -110.779l-30.9971 37.8848c-2.48535 3.03711 -7.68652 5.50195 -11.6104 5.50195c-1.69922 0 -4.3457 -0.543945 -5.9082 -1.21289l-69.998 -29.999c-5.01855 -2.15039 -9.09082 -8.32715 -9.09082 -13.7871\n+c0 -0.943359 0.171875 -2.4541 0.383789 -3.37305l14.998 -65c1.55957 -6.75391 7.58301 -11.627 14.6162 -11.627z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlock\" unicode=\"&#xf09c;\" horiz-adv-x=\"448\" \n+d=\"M400 192c26.5 0 48 -21.5 48 -48v-160c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v160c0 26.5 21.5 48 48 48h24v102.5c0 84 67.5 153.2 151.5 153.5s152.5 -68 152.5 -152v-16c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v16\n+c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-103.1h248z\" \u002F>\n+    \u003Cglyph glyph-name=\"credit-card\" unicode=\"&#xf09d;\" horiz-adv-x=\"576\" \n+d=\"M0 16v176h576v-176c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48zM192 84v-40c0 -6.59961 5.40039 -12 12 -12h136c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-136c-6.59961 0 -12 -5.40039 -12 -12zM64 84v-40\n+c0 -6.59961 5.40039 -12 12 -12h72c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-72c-6.59961 0 -12 -5.40039 -12 -12zM576 368v-48h-576v48c0 26.5 21.5 48 48 48h480c26.5 0 48 -21.5 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"rss\" unicode=\"&#xf09e;\" horiz-adv-x=\"448\" \n+d=\"M128.081 32.041c0 -35.3691 -28.6719 -64.041 -64.041 -64.041s-64.04 28.6719 -64.04 64.041s28.6719 64.041 64.041 64.041s64.04 -28.6729 64.04 -64.041zM303.741 -15.209c0.494141 -9.13477 -6.84668 -16.791 -15.9951 -16.79h-48.0693\n+c-8.41406 0 -15.4707 6.49023 -16.0176 14.8867c-7.29883 112.07 -96.9404 201.488 -208.772 208.772c-8.39648 0.545898 -14.8867 7.60254 -14.8867 16.0176v48.0693c0 9.14746 7.65625 16.4883 16.791 15.9941c154.765 -8.36328 278.596 -132.351 286.95 -286.95z\n+M447.99 -15.4971c0.324219 -9.03027 -6.97168 -16.5029 -16.0049 -16.5039h-48.0684c-8.62598 0 -15.6455 6.83496 -15.999 15.4531c-7.83789 191.148 -161.286 344.626 -352.465 352.465c-8.61816 0.354492 -15.4531 7.37402 -15.4531 15.999v48.0684\n+c0 9.03418 7.47266 16.3301 16.5029 16.0059c234.962 -8.43555 423.093 -197.667 431.487 -431.487z\" \u002F>\n+    \u003Cglyph glyph-name=\"hdd\" unicode=\"&#xf0a0;\" horiz-adv-x=\"576\" \n+d=\"M576 144v-96c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v96c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48zM528 224h-480h-0.0693359c-8.81738 0 -22.5742 -2.76172 -30.708 -6.16504l96.5283 144.791\n+c7.86621 11.7988 25.7578 21.374 39.9385 21.374h268.621c14.1807 0 32.0732 -9.57617 39.9395 -21.374l96.5273 -144.791c-8.13379 3.40332 -21.8906 6.16504 -30.708 6.16504h-0.0693359zM480 128c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32\n+s-14.3271 32 -32 32zM384 128c-17.6729 0 -32 -14.3271 -32 -32s14.3271 -32 32 -32s32 14.3271 32 32s-14.3271 32 -32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"bullhorn\" unicode=\"&#xf0a1;\" horiz-adv-x=\"576\" \n+d=\"M576 208c0 -23.6299 -12.9502 -44.04 -32.0098 -55.1299v-152.87c0 -9.21973 -7.08008 -32 -32 -32c-6.19336 0.00585938 -15.1445 3.15039 -19.9805 7.01953l-85.0293 68.0303c-42.7002 34.1406 -96.3203 52.9502 -150.98 52.9502h-28.0801\n+c-2.79004 -10.21 -4.41016 -20.8896 -4.41016 -32c0 -29.0801 9.75 -55.9199 26.1504 -77.4404c15.79 -20.7197 0.149414 -50.5596 -25.9004 -50.5596h-74.2793c-11.8809 0 -23.2109 6.37012 -28.4004 17.0596c-16.2998 33.5908 -25.5605 71.1709 -25.5605 110.94\n+c0 10.8604 0.790039 21.5195 2.18066 32h-33.7002c-35.3496 0 -64 28.6504 -64 64v96c0 35.3496 28.6504 64 64 64h192c54.6602 0 108.28 18.8096 150.99 52.9502l85.0293 68.0303c5.79004 4.63965 12.8604 7.01953 19.9805 7.01953c25.0195 0 32 -23.2598 32 -32.0098\n+v-152.87c19.0498 -11.0801 32 -31.4902 32 -55.1201zM480 66.5801v282.84l-33.0498 -26.4395c-54 -43.2002 -121.83 -66.9805 -190.95 -66.9805v-96c69.1201 0 136.95 -23.7803 190.95 -66.9805z\" \u002F>\n+    \u003Cglyph glyph-name=\"certificate\" unicode=\"&#xf0a3;\" \n+d=\"M458.622 192.08l45.9844 -45.0039c13.7012 -12.9727 7.32227 -36.0371 -10.6641 -40.3389l-62.6504 -15.9902l17.6611 -62.0146c4.99023 -17.834 -11.8252 -34.665 -29.6611 -29.6719l-61.9941 17.667l-15.9834 -62.6709\n+c-4.33887 -18.1533 -27.8252 -24.1553 -40.3252 -10.668l-44.9893 46.001l-44.9912 -46.001c-12.6289 -13.3496 -35.8857 -7.90625 -40.3252 10.668l-15.9834 62.6709l-61.9941 -17.667c-17.832 -4.99121 -34.6523 11.833 -29.6611 29.6719l17.6611 62.0146\n+l-62.6504 15.9902c-17.9795 4.2998 -24.3721 27.3613 -10.6641 40.3389l45.9854 45.0039l-45.9854 45.0049c-13.7012 12.9707 -7.32227 36.0371 10.665 40.3379l62.6504 15.9902l-17.6611 62.0146c-4.99023 17.834 11.8242 34.665 29.6611 29.6709l61.9951 -17.667\n+l15.9834 62.6709c4.27832 17.9023 27.6953 24.0195 40.3252 10.6689l44.9893 -46.3418l44.9902 46.3428c12.7744 13.5039 36.0947 7.03027 40.3252 -10.6689l15.9834 -62.6709l61.9941 17.667c17.832 4.99219 34.6523 -11.833 29.6611 -29.6709l-17.6611 -62.0146\n+l62.6504 -15.9902c17.9795 -4.2998 24.3721 -27.3623 10.6641 -40.3389z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-right\" unicode=\"&#xf0a4;\" \n+d=\"M512 248.348c0 -23.625 -20.6504 -43.8252 -44.7998 -43.8252h-99.8516c16.3408 -17.0488 18.3467 -49.7666 -6.29883 -70.9443c14.2881 -22.8291 2.14746 -53.0176 -16.4502 -62.3154c8.97461 -49.1406 -21.9453 -71.2627 -72.5996 -71.2627\n+c-2.74609 0 -13.2764 0.203125 -16 0.195312c-61.9707 -0.167969 -76.8936 31.0645 -123.731 38.3145c-11.6729 1.80762 -20.2686 11.8916 -20.2686 23.7041v171.525l0.00195312 0.000976562c0.0107422 18.3662 10.6074 35.8887 28.4639 43.8447\n+c28.8857 12.9941 95.4131 49.0381 107.534 77.3232c7.79688 18.1934 21.3838 29.084 40 29.0918c34.2217 0.0136719 57.752 -35.0977 44.1191 -66.9082c-3.58301 -8.3584 -8.3125 -16.6699 -14.1533 -24.918h149.234c23.4502 0 44.7998 -20.543 44.7998 -43.8262zM96 248\n+v-192c0 -13.2549 -10.7451 -24 -24 -24h-48c-13.2549 0 -24 10.7451 -24 24v192c0 13.2549 10.7451 24 24 24h48c13.2549 0 24 -10.7451 24 -24zM68 80c0 11.0459 -8.9541 20 -20 20s-20 -8.9541 -20 -20s8.9541 -20 20 -20s20 8.9541 20 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-left\" unicode=\"&#xf0a5;\" \n+d=\"M44.7998 292.174h149.234c-5.84082 8.24805 -10.5703 16.5586 -14.1533 24.918c-13.6328 31.8105 9.89746 66.9219 44.1191 66.9082c18.6162 -0.0078125 32.2031 -10.8975 40 -29.0918c12.1221 -28.2861 78.6484 -64.3291 107.534 -77.3232\n+c17.8564 -7.95605 28.4531 -25.4785 28.4639 -43.8447l0.00195312 -0.000976562v-171.526c0 -11.8115 -8.5957 -21.8965 -20.2686 -23.7031c-46.8379 -7.25 -61.7607 -38.4824 -123.731 -38.3145c-2.72363 0.00683594 -13.2539 -0.195312 -16 -0.195312\n+c-50.6543 0 -81.5742 22.1221 -72.5996 71.2627c-18.5977 9.29688 -30.7383 39.4863 -16.4502 62.3154c-24.6455 21.1768 -22.6396 53.8955 -6.29883 70.9443h-99.8516c-24.1494 0 -44.7998 20.2002 -44.7998 43.8252c0 23.2832 21.3496 43.8262 44.7998 43.8262zM440 272\n+h48c13.2549 0 24 -10.7451 24 -24v-192c0 -13.2549 -10.7451 -24 -24 -24h-48c-13.2549 0 -24 10.7451 -24 24v192c0 13.2549 10.7451 24 24 24zM464 60c11.0459 0 20 8.9541 20 20s-8.9541 20 -20 20s-20 -8.9541 -20 -20s8.9541 -20 20 -20z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-up\" unicode=\"&#xf0a6;\" horiz-adv-x=\"384\" \n+d=\"M135.652 448c23.625 0 43.8252 -20.6504 43.8252 -44.7998v-99.8516c17.0488 16.3408 49.7666 18.3467 70.9443 -6.29883c22.8291 14.2881 53.0176 2.14746 62.3154 -16.4502c49.1406 8.97461 71.2627 -21.9453 71.2627 -72.5996\n+c0 -2.74609 -0.203125 -13.2764 -0.195312 -16c0.167969 -61.9707 -31.0645 -76.8936 -38.3145 -123.731c-1.80762 -11.6729 -11.8916 -20.2686 -23.7041 -20.2686h-171.525l-0.000976562 0.00195312c-18.3662 0.0107422 -35.8887 10.6074 -43.8447 28.4639\n+c-12.9941 28.8857 -49.0381 95.4121 -77.3232 107.534c-18.1943 7.79688 -29.084 21.3838 -29.0918 40c-0.0136719 34.2217 35.0977 57.752 66.9082 44.1191c8.3584 -3.58301 16.6699 -8.3125 24.918 -14.1533v149.234c0 23.4502 20.543 44.7998 43.8262 44.7998zM136 32\n+h192c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24v48c0 13.2549 10.7451 24 24 24zM304 4c-11.0459 0 -20 -8.9541 -20 -20s8.9541 -20 20 -20s20 8.9541 20 20s-8.9541 20 -20 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-point-down\" unicode=\"&#xf0a7;\" horiz-adv-x=\"384\" \n+d=\"M91.8262 -19.2002v149.234c-8.24805 -5.84082 -16.5586 -10.5703 -24.918 -14.1533c-31.8105 -13.6328 -66.9219 9.89746 -66.9082 44.1191c0.0078125 18.6162 10.8975 32.2031 29.0918 40c28.2861 12.1221 64.3291 78.6484 77.3232 107.534\n+c7.95605 17.8564 25.4785 28.4531 43.8447 28.4639l0.000976562 0.00195312h171.526c11.8115 0 21.8965 -8.5957 23.7031 -20.2686c7.25 -46.8379 38.4824 -61.7607 38.3145 -123.731c-0.00683594 -2.72363 0.195312 -13.2539 0.195312 -16\n+c0 -50.6543 -22.1221 -81.5742 -71.2627 -72.5996c-9.29688 -18.5977 -39.4863 -30.7383 -62.3154 -16.4502c-21.1768 -24.6455 -53.8955 -22.6396 -70.9443 -6.29883v-99.8516c0 -24.1494 -20.2002 -44.7998 -43.8252 -44.7998\n+c-23.2832 0 -43.8262 21.3496 -43.8262 44.7998zM112 376v48c0 13.2549 10.7451 24 24 24h192c13.2549 0 24 -10.7451 24 -24v-48c0 -13.2549 -10.7451 -24 -24 -24h-192c-13.2549 0 -24 10.7451 -24 24zM324 400c0 11.0459 -8.9541 20 -20 20s-20 -8.9541 -20 -20\n+s8.9541 -20 20 -20s20 8.9541 20 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-circle-left\" unicode=\"&#xf0a8;\" \n+d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM284.9 87.5996l-75.5 72.4004h182.6c13.2998 0 24 10.7002 24 24v16c0 13.2998 -10.7002 24 -24 24h-182.6l75.5 72.4004c9.69922 9.2998 9.89941 24.7998 0.399414 34.2998\n+l-11 10.8994c-9.39941 9.40039 -24.5996 9.40039 -33.8994 0l-132.7 -132.6c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l132.7 -132.699c9.39941 -9.40039 24.5996 -9.40039 33.8994 0l11 10.8994c9.5 9.5 9.2998 25 -0.399414 34.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-circle-right\" unicode=\"&#xf0a9;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM227.1 296.4l75.5 -72.4004h-182.6c-13.2998 0 -24 -10.7002 -24 -24v-16c0 -13.2998 10.7002 -24 24 -24h182.6l-75.5 -72.4004\n+c-9.69922 -9.2998 -9.89941 -24.7998 -0.399414 -34.2998l11 -10.8994c9.39941 -9.40039 24.5996 -9.40039 33.8994 0l132.7 132.6c9.40039 9.40039 9.40039 24.5996 0 33.9004l-132.7 132.8c-9.39941 9.39941 -24.5996 9.39941 -33.8994 0l-11 -10.9004\n+c-9.5 -9.59961 -9.2998 -25.0996 0.399414 -34.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-circle-up\" unicode=\"&#xf0aa;\" \n+d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM151.6 163.1l72.4004 75.5v-182.6c0 -13.2998 10.7002 -24 24 -24h16c13.2998 0 24 10.7002 24 24v182.6l72.4004 -75.5c9.2998 -9.69922 24.7998 -9.89941 34.2998 -0.399414\n+l10.8994 11c9.40039 9.39941 9.40039 24.5996 0 33.8994l-132.6 132.7c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-132.8 -132.7c-9.39941 -9.39941 -9.39941 -24.5996 0 -33.8994l10.9004 -11c9.59961 -9.5 25.0996 -9.2998 34.3994 0.399414z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-circle-down\" unicode=\"&#xf0ab;\" \n+d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM360.4 220.9l-72.4004 -75.5v182.6c0 13.2998 -10.7002 24 -24 24h-16c-13.2998 0 -24 -10.7002 -24 -24v-182.6l-72.4004 75.5\n+c-9.2998 9.69922 -24.7998 9.89941 -34.2998 0.399414l-10.8994 -11c-9.40039 -9.39941 -9.40039 -24.5996 0 -33.8994l132.6 -132.7c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l132.699 132.7c9.40039 9.39941 9.40039 24.5996 0 33.8994l-10.8994 11\n+c-9.5 9.5 -25 9.2998 -34.2998 -0.399414z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe\" unicode=\"&#xf0ac;\" horiz-adv-x=\"496\" \n+d=\"M336.5 288h-177c14.5 89.2998 48.7002 152 88.5 152s74 -62.7002 88.5 -152zM152 192c0 22.2002 1.2002 43.5 3.2998 64h185.3c2.10059 -20.5 3.30078 -41.7998 3.30078 -64s-1.2002 -43.5 -3.30078 -64h-185.3c-2.09961 20.5 -3.2998 41.7998 -3.2998 64zM476.7 288\n+h-108c-8.7998 56.9004 -25.6006 107.8 -50 141.6c71.5 -21.1992 129.399 -73.6992 158 -141.6zM177.2 429.6c-24.4004 -33.7998 -41.2002 -84.6992 -49.9004 -141.6h-108c28.5 67.9004 86.5 120.4 157.9 141.6zM487.4 256c5.39941 -20.5 8.5 -41.7998 8.5 -64\n+s-3.10059 -43.5 -8.60059 -64h-114.6c2.09961 21 3.2998 42.5 3.2998 64s-1.2002 43 -3.2998 64h114.7zM120 192c0 -21.5 1.2002 -43 3.2002 -64h-114.601c-5.39941 20.5 -8.59961 41.7998 -8.59961 64s3.2002 43.5 8.59961 64h114.7\n+c-2.09961 -21 -3.2998 -42.5 -3.2998 -64zM159.5 96h177c-14.5 -89.2998 -48.7002 -152 -88.5 -152s-74 62.7002 -88.5 152zM318.8 -45.5996c24.4004 33.7998 41.2002 84.6992 50 141.6h108c-28.5996 -67.9004 -86.5996 -120.4 -158 -141.6zM19.2998 96h108\n+c8.7998 -56.9004 25.6006 -107.8 50 -141.6c-71.5 21.1992 -129.399 73.6992 -158 141.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"wrench\" unicode=\"&#xf0ad;\" \n+d=\"M507.73 338.9c11.7891 -47.4102 -0.84082 -99.6602 -37.9102 -136.73c-39.9004 -39.9004 -97.25 -50.9297 -147.37 -34.2197l-213.21 -213.21c-24.9902 -24.9902 -65.5098 -24.9902 -90.5 0s-24.9902 65.5098 0 90.5l213.39 213.39\n+c-16.5 50.1006 -5.58984 107.561 34.0498 147.2c37.0303 37.0195 89.2002 49.6699 136.58 37.9297c9.08984 -2.25977 12.2803 -13.54 5.66016 -20.1602l-74.3604 -74.3594l11.3105 -67.8799l67.8799 -11.3105l74.3604 74.3604\n+c6.58008 6.58008 17.8799 3.51953 20.1201 -5.50977zM64 -24c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"tasks\" unicode=\"&#xf0ae;\" \n+d=\"M139.61 412.5l17 -16.5c1.90234 -1.94531 3.44727 -5.7334 3.44727 -8.4541c0 -2.7627 -1.58496 -6.5918 -3.53809 -8.5459l-72.1992 -72.1904l-15.5898 -15.6191c-2.04297 -1.94238 -5.9873 -3.51758 -8.80566 -3.51758c-2.81738 0 -6.7627 1.5752 -8.80469 3.51758\n+l-47.5898 47.3994c-1.94824 1.94141 -3.5293 5.75 -3.5293 8.5c0 2.75098 1.58105 6.55859 3.5293 8.5l15.7002 15.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55762 -1.58203 8.5 -3.53027l22.6992 -22.1191l63.6807 63.3096\n+c1.94141 1.94824 5.74902 3.5293 8.5 3.5293c2.75 0 6.55859 -1.58105 8.5 -3.5293zM139.61 253.31l16.9795 -17c1.89648 -1.93164 3.43457 -5.69727 3.43457 -8.4043c0 -2.74805 -1.5791 -6.55371 -3.52441 -8.49512l-72.2002 -72.2197l-15.7002 -15.6904\n+c-2.04102 -1.94141 -5.9834 -3.5166 -8.7998 -3.5166s-6.75879 1.5752 -8.7998 3.5166l-47.4697 47.5c-1.94824 1.94141 -3.5293 5.74902 -3.5293 8.5s1.58105 6.55859 3.5293 8.5l15.7002 15.6904c1.94141 1.94824 5.74902 3.5293 8.5 3.5293\n+c2.75 0 6.55762 -1.58105 8.5 -3.5293l22.6992 -22.1006l63.6807 63.7197c1.94141 1.94824 5.74902 3.53027 8.5 3.53027c2.75 0 6.55859 -1.58203 8.5 -3.53027zM64 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48c-26.4697 0 -48.5898 21.5 -48.5898 48\n+s22.0996 48 48.5898 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\n+    \u003Cglyph glyph-name=\"filter\" unicode=\"&#xf0b0;\" \n+d=\"M487.976 448c21.3623 0 32.0459 -25.8965 16.9717 -40.9707l-184.947 -184.971v-262.039c0 -19.5127 -21.9805 -30.71 -37.7627 -19.6611l-80 55.9795c-6.41602 4.49219 -10.2373 11.8311 -10.2373 19.6621v206.059l-184.942 184.971\n+c-15.1045 15.1045 -4.34766 40.9707 16.9707 40.9707h463.947z\" \u002F>\n+    \u003Cglyph glyph-name=\"briefcase\" unicode=\"&#xf0b1;\" \n+d=\"M320 112v48h192v-144c0 -25.5996 -22.4004 -48 -48 -48h-416c-25.5996 0 -48 22.4004 -48 48v144h192v-48c0 -8.83984 7.16016 -16 16 -16h96c8.83984 0 16 7.16016 16 16zM464 320c25.5996 0 48 -22.4004 48 -48v-80h-512v80c0 25.5996 22.4004 48 48 48h80v48\n+c0 25.5996 22.4004 48 48 48h160c25.5996 0 48 -22.4004 48 -48v-48h80zM320 320v32h-128v-32h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrows-alt\" unicode=\"&#xf0b2;\" \n+d=\"M352.201 22.2246l-79.1963 -79.1953c-9.37305 -9.37305 -24.5684 -9.37305 -33.9404 0l-79.1963 79.1953c-15.1191 15.1191 -4.41113 40.9717 16.9707 40.9707h51.1621l-0.000976562 100.805h-100.804v-51.1621c0 -21.3818 -25.8516 -32.0898 -40.9717 -16.9707\n+l-79.1953 79.1963c-9.37305 9.37207 -9.37305 24.5684 0 33.9404l79.1953 79.1963c15.1191 15.1191 40.9717 4.41113 40.9717 -16.9717v-51.2285h100.804v100.804h-51.2305c-21.3818 0 -32.0898 25.8516 -16.9707 40.9717l79.1963 79.1953\n+c9.37305 9.37305 24.5684 9.37305 33.9404 0l79.1963 -79.1953c15.1191 -15.1191 4.41113 -40.9717 -16.9707 -40.9717h-51.1621v-100.804h100.804v51.1621c0 21.3818 25.8516 32.0898 40.9707 16.9707l79.1953 -79.1963c9.37305 -9.37207 9.37305 -24.5684 0 -33.9404\n+l-79.1953 -79.1963c-15.1191 -15.1191 -40.9717 -4.41113 -40.9707 16.9717v51.2285h-100.803v-100.804h51.2305c21.3818 0 32.0898 -25.8516 16.9707 -40.9717z\" \u002F>\n+    \u003Cglyph glyph-name=\"users\" unicode=\"&#xf0c0;\" horiz-adv-x=\"640\" \n+d=\"M96 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM544 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM576 192c35.2998 0 64 -28.7002 64 -64v-32\n+c0 -17.7002 -14.2998 -32 -32 -32h-66c-6.2002 47.4004 -34.7998 87.2998 -75.0996 109.4c11.5996 11.5 27.5 18.5996 45.0996 18.5996h64zM320 192c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM396.8 160\n+c63.6006 0 115.2 -51.5996 115.2 -115.2v-28.7998c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v28.7998c0 63.6006 51.5996 115.2 115.2 115.2h8.2998c20.9004 -10 43.9004 -16 68.5 -16s47.7002 6 68.5 16h8.2998zM173.1 173.4\n+c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"link\" unicode=\"&#xf0c1;\" \n+d=\"M326.612 262.609c59.7471 -59.8096 58.9268 -155.698 0.359375 -214.591c-0.109375 -0.119141 -0.239258 -0.25 -0.359375 -0.369141l-67.2002 -67.2002c-59.2705 -59.2705 -155.699 -59.2627 -214.96 0c-59.2705 59.2598 -59.2705 155.7 0 214.96l37.1055 37.1055\n+c9.84082 9.84082 26.7861 3.30078 27.2939 -10.6055c0.648438 -17.7227 3.82617 -35.5273 9.69043 -52.7207c1.98633 -5.82227 0.567383 -12.2627 -3.7832 -16.6123l-13.0869 -13.0869c-28.0254 -28.0264 -28.9053 -73.6602 -1.15527 -101.96\n+c28.0244 -28.5791 74.0859 -28.749 102.325 -0.510742l67.2002 67.1904c28.1914 28.1914 28.0732 73.7568 0 101.83c-3.70117 3.69434 -7.42871 6.56348 -10.3408 8.56934c-3.66504 2.51562 -6.77734 8.16309 -6.94727 12.6055\n+c-0.395508 10.5674 3.34766 21.4561 11.6982 29.8057l21.0537 21.0557c5.52148 5.52051 14.1826 6.19922 20.584 1.73047c6.08301 -4.24707 15.2764 -11.9512 20.5225 -17.1963zM467.547 403.551c59.2705 -59.2598 59.2705 -155.7 -0.000976562 -214.959l-37.1055 -37.1055\n+c-9.84082 -9.83984 -26.7852 -3.30078 -27.2939 10.6055c-0.648438 17.7227 -3.82617 35.5273 -9.69043 52.7217c-1.98633 5.82129 -0.567383 12.2617 3.7832 16.6113l13.0869 13.0869c28.0264 28.0264 28.9053 73.6602 1.15527 101.96\n+c-28.0254 28.5791 -74.0869 28.749 -102.325 0.510742l-67.2002 -67.1904c-28.1914 -28.1914 -28.0732 -73.7568 0 -101.83c3.70117 -3.69434 7.42871 -6.56348 10.3408 -8.56934c3.66504 -2.51562 6.77734 -8.16309 6.94727 -12.6055\n+c0.395508 -10.5674 -3.34766 -21.4561 -11.6982 -29.8057l-21.0537 -21.0557c-5.52051 -5.51953 -14.1826 -6.19922 -20.584 -1.73047c-6.08203 4.24609 -15.2754 11.9502 -20.5215 17.1953c-59.7471 59.8096 -58.9258 155.698 -0.359375 214.591\n+c0.109375 0.119141 0.239258 0.25 0.359375 0.369141l67.2002 67.2002c59.2705 59.2705 155.699 59.2627 214.96 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud\" unicode=\"&#xf0c2;\" horiz-adv-x=\"640\" \n+d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\n+c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"flask\" unicode=\"&#xf0c3;\" horiz-adv-x=\"448\" \n+d=\"M437.2 44.5c29.2998 -47 -4.40039 -108.5 -60.1006 -108.5h-306.199c-55.6006 0 -89.4004 61.4004 -60.1006 108.5l117.2 188.5v151h-8c-13.2998 0 -24 10.7002 -24 24v16c0 13.2998 10.7002 24 24 24h208c13.2998 0 24 -10.7002 24 -24v-16\n+c0 -13.2998 -10.7002 -24 -24 -24h-8v-151zM137.9 128h172l-48.2002 77.5996c-3.60059 5.2002 -5.7998 11.5 -5.7998 18.4004v160h-64v-160c0 -6.7998 -2.10059 -13.2002 -5.80078 -18.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"cut\" unicode=\"&#xf0c4;\" horiz-adv-x=\"448\" \n+d=\"M278.06 192l166.421 -166.43c4.68945 -4.69043 4.68945 -12.29 0 -16.9707c-32.8008 -32.7998 -85.9902 -32.7998 -118.79 0l-115.511 115.521l-24.8594 -24.8604c4.30957 -10.9199 6.67969 -22.8096 6.67969 -35.2598c0 -53.0195 -42.9805 -96 -96 -96\n+s-96 42.9805 -96 96s42.9805 96 96 96c4.53027 0 8.99023 -0.320312 13.3604 -0.929688l32.9297 32.9297l-32.9297 32.9297c-4.37012 -0.609375 -8.82031 -0.929688 -13.3604 -0.929688c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96\n+c0 -12.4502 -2.37012 -24.3398 -6.67969 -35.2598l24.8594 -24.8604l115.511 115.521c32.7998 32.7998 85.9893 32.7998 118.79 0c4.68945 -4.68066 4.68945 -12.2803 0 -16.9707zM96 288c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32\n+s14.3604 -32 32 -32zM96 32c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32s14.3604 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"copy\" unicode=\"&#xf0c5;\" horiz-adv-x=\"448\" \n+d=\"M320 0v-40c0 -13.2549 -10.7451 -24 -24 -24h-272c-13.2549 0 -24 10.7451 -24 24v368c0 13.2549 10.7451 24 24 24h72v-296c0 -30.8789 25.1211 -56 56 -56h168zM320 344c0 -13.2002 10.7998 -24 24 -24h104v-264c0 -13.2549 -10.7451 -24 -24 -24h-272\n+c-13.2549 0 -24 10.7451 -24 24v368c0 13.2549 10.7451 24 24 24h168v-104zM440.971 375.029c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9707v-6.05859h-96v96h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293z\" \u002F>\n+    \u003Cglyph glyph-name=\"paperclip\" unicode=\"&#xf0c6;\" horiz-adv-x=\"448\" \n+d=\"M43.2461 -18.1416c-58.4297 60.2891 -57.3408 157.511 1.38574 217.581l209.76 214.561c44.3164 45.332 116.352 45.3359 160.672 0c43.8896 -44.8936 43.9424 -117.329 0 -162.276l-182.85 -186.852c-29.8545 -30.5371 -78.6328 -30.1113 -107.981 0.998047\n+c-28.2754 29.9697 -27.3682 77.4727 1.45117 106.953l143.743 146.835c6.18262 6.31348 16.3125 6.42188 22.626 0.241211l22.8613 -22.3799c6.31445 -6.18164 6.42188 -16.3115 0.241211 -22.626l-143.729 -146.82c-4.93164 -5.04492 -5.23535 -13.4287 -0.647461 -18.292\n+c4.37207 -4.63379 11.2451 -4.71094 15.6875 -0.165039l182.85 186.851c19.6123 20.0625 19.6123 52.7256 -0.0117188 72.7979c-19.1885 19.627 -49.957 19.6377 -69.1533 0l-209.762 -214.56c-34.7627 -35.5605 -35.2988 -93.1201 -1.19043 -128.313\n+c34.0098 -35.0928 88.9844 -35.1367 123.058 -0.285156l172.061 175.999c6.17676 6.31836 16.3066 6.43262 22.626 0.255859l22.877 -22.3643c6.31836 -6.17676 6.43359 -16.3066 0.255859 -22.626l-172.061 -175.998c-59.5752 -60.9385 -155.942 -60.2158 -214.77 0.485352\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"save\" unicode=\"&#xf0c7;\" horiz-adv-x=\"448\" \n+d=\"M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM224 32\n+c35.3457 0 64 28.6543 64 64s-28.6543 64 -64 64s-64 -28.6543 -64 -64s28.6543 -64 64 -64zM320 336.52c0 2.74316 -1.5752 6.5459 -3.51465 8.48535l-3.48047 3.48047c-2.25 2.25098 -5.30176 3.51465 -8.48535 3.51465h-228.52c-6.62695 0 -12 -5.37305 -12 -12v-104\n+c0 -6.62695 5.37305 -12 12 -12h232c6.62695 0 12 5.37305 12 12v100.52z\" \u002F>\n+    \u003Cglyph glyph-name=\"square\" unicode=\"&#xf0c8;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"bars\" unicode=\"&#xf0c9;\" horiz-adv-x=\"448\" \n+d=\"M16 316c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 156c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40\n+c0 -8.83691 -7.16309 -16 -16 -16h-416zM16 -4c-8.83691 0 -16 7.16309 -16 16v40c0 8.83691 7.16309 16 16 16h416c8.83691 0 16 -7.16309 16 -16v-40c0 -8.83691 -7.16309 -16 -16 -16h-416z\" \u002F>\n+    \u003Cglyph glyph-name=\"list-ul\" unicode=\"&#xf0ca;\" \n+d=\"M48 400c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 240c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48s-48 21.5039 -48 48s21.5039 48 48 48zM48 80c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48\n+s-48 21.5039 -48 48s21.5039 48 48 48zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\n+h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320z\" \u002F>\n+    \u003Cglyph glyph-name=\"list-ol\" unicode=\"&#xf0cb;\" \n+d=\"M61.7695 47c19.6104 -5.12012 28.7002 -20.5 28.7305 -34.8799c0 -21.3701 -14.3398 -44.1201 -48.5 -44.1201c-16.6201 0 -29.29 4.75 -37 9.44043c-5.82031 4.21973 -6.34961 9.80957 -2.62988 15.9395l5.58984 9.31055c3.86035 6.61914 9.11035 7 15.5996 3.11914\n+c4.10352 -1.68652 11.0342 -3.08496 15.4707 -3.11914c10.1602 0 14.3594 3.5 14.3594 8.21973c0 6.64941 -5.60938 9.08984 -15.9395 9.08984h-4.73047c-5.95996 0 -9.25 2.12012 -12.25 7.87988l-1.0498 1.92969c-2.4502 4.75 -1.2002 9.81055 2.7998 14.8809l5.61035 7\n+c2.85742 3.55664 7.78516 9.07129 11 12.3096h-22.8301c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h57c7.5 0 11.3398 -4 11.3398 -11.3496v-3.31055c0.0107422 -0.245117 0.0205078 -0.644531 0.0205078 -0.890625\n+c0 -4.20801 -2.28027 -10.166 -5.09082 -13.2988zM496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 384c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM496 64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-320c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h320zM16 288\n+c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h16v64h-8c-4.4082 0.0078125 -7.98535 3.5918 -7.98535 8c0 1.04297 0.378906 2.64746 0.845703 3.58008l8 16c1.21777 2.43457 4.41699 4.41504 7.13965 4.41992h24c4.41602 0 8 -3.58398 8 -8v-88h16\n+c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-64zM12.0898 128c-7.00977 0 -12.0898 4 -12.0898 11.4102v4c0 47.2803 51 56.3994 50.9697 69.1201c0 7.18945 -5.9502 8.75 -9.2793 8.75h-0.0546875c-3.02832 0 -7.24219 -1.7207 -9.40527 -3.83984\n+c-5.12012 -4.91016 -10.5107 -7 -16.1201 -2.44043l-8.58008 6.87988c-5.7998 4.53027 -7.16992 9.78027 -2.7998 15.3701c6.65918 8.75 19.0996 18.75 40.46 18.75c19.4697 0 44.4697 -10.5 44.4697 -39.5596c0 -37.7607 -45.0498 -46.1504 -48.3398 -56.4404h38.6797\n+c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-67.9102z\" \u002F>\n+    \u003Cglyph glyph-name=\"strikethrough\" unicode=\"&#xf0cc;\" \n+d=\"M496 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h102.29c-11.6797 16.5303 -19.7803 35.4697 -21.7803 56.3604c-0.319336 3.29297 -0.579102 8.65137 -0.579102 11.96\n+c0 68.2158 55.3633 123.624 123.579 123.68h68h0.0117188c43.6865 0 94.9863 -31.7188 114.509 -70.7998l0.529297 -1c0.930664 -1.86328 1.68652 -5.06641 1.68652 -7.14844c0 -5.45898 -3.96289 -11.8711 -8.8457 -14.3115l-42.9404 -21.4707\n+c-1.86426 -0.931641 -5.06836 -1.6875 -7.15234 -1.6875c-5.45605 0 -11.8652 3.95996 -14.3076 8.83789c-7.61133 15.2246 -27.6025 27.5801 -44.624 27.5801h-0.0361328h-66.79c-24.0391 -0.000976562 -43.5488 -19.5107 -43.5488 -43.5498\n+c0 -17.749 13.7666 -36.3945 30.7295 -41.6201l87.1699 -26.8301h202.1zM315.76 128h94.3906c2.21191 -6.56152 4.60352 -17.4746 5.33984 -24.3604c0.319336 -3.29297 0.579102 -8.65137 0.579102 -11.96c0 -68.2158 -55.3633 -123.624 -123.579 -123.68h-68h-0.0117188\n+c-43.6865 0 -94.9863 31.7188 -114.509 70.7998l-0.529297 1c-0.930664 1.86328 -1.68652 5.06641 -1.68652 7.14844c0 5.45898 3.96289 11.8711 8.8457 14.3115l42.9404 21.4707c1.86426 0.931641 5.06836 1.6875 7.15234 1.6875\n+c5.45605 0 11.8652 -3.95996 14.3076 -8.83789c7.61133 -15.2246 27.6025 -27.5801 44.624 -27.5801h0.0361328h66.79c24.0176 0.0224609 43.5273 19.5322 43.5498 43.5498c-0.00976562 13.1572 -9.07715 29.4863 -20.2402 36.4502z\" \u002F>\n+    \u003Cglyph glyph-name=\"underline\" unicode=\"&#xf0cd;\" horiz-adv-x=\"448\" \n+d=\"M32 384c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v160h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h144c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-160c0 -88.2197 -71.7803 -160 -160 -160s-160 71.7803 -160 160v160h-32zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"table\" unicode=\"&#xf0ce;\" \n+d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v96h-160v-96h160zM224 192v96h-160v-96h160zM448 32v96h-160v-96h160zM448 192v96h-160v-96h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"magic\" unicode=\"&#xf0d0;\" \n+d=\"M224 352l-16 32l-32 16l32 16l16 32l16 -32l32 -16l-32 -16zM80 288l-26.6602 53.3301l-53.3398 26.6699l53.3398 26.6699l26.6602 53.3301l26.6602 -53.3301l53.3398 -26.6699l-53.3398 -26.6699zM432 160l26.6602 -53.3301l53.3398 -26.6699l-53.3398 -26.6699\n+l-26.6602 -53.3301l-26.6602 53.3301l-53.3398 26.6699l53.3398 26.6699zM502.62 353.77c12.5 -12.4893 12.5 -32.7598 0 -45.2393l-363.14 -363.15c-6.25 -6.25 -14.4404 -9.37012 -22.6309 -9.37012c-8.17969 0 -16.3691 3.12012 -22.6191 9.37012l-84.8506 84.8506\n+c-12.5 12.4893 -12.5 32.75 0 45.25l363.14 363.14c6.25 6.25977 14.4404 9.37988 22.6309 9.37988c8.18945 0 16.3799 -3.12012 22.6191 -9.37988zM359.45 244.54l86.5996 86.5996l-50.9102 50.9102l-86.5996 -86.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck\" unicode=\"&#xf0d1;\" horiz-adv-x=\"640\" \n+d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96h-16c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48 -21.5 48 -48v-48h44.0996\n+c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM480 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48\n+s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-bill\" unicode=\"&#xf0d6;\" horiz-adv-x=\"640\" \n+d=\"M608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM48 48h64c0 35.3496 -28.6504 64 -64 64v-64zM48 272c35.3496 0 64 28.6504 64 64h-64v-64zM320 96\n+c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96zM592 48v64c-35.3496 0 -64 -28.6504 -64 -64h64zM592 272v64h-64c0 -35.3496 28.6504 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-down\" unicode=\"&#xf0d7;\" horiz-adv-x=\"320\" \n+d=\"M31.2998 256h257.3c17.8008 0 26.7002 -21.5 14.1006 -34.0996l-128.601 -128.7c-7.7998 -7.7998 -20.5 -7.7998 -28.2998 0l-128.6 128.7c-12.6006 12.5996 -3.7002 34.0996 14.0996 34.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-up\" unicode=\"&#xf0d8;\" horiz-adv-x=\"320\" \n+d=\"M288.662 96h-257.324c-17.8184 0 -26.7412 21.543 -14.1416 34.1416l128.662 128.662c7.80957 7.81055 20.4736 7.81055 28.2832 0l128.662 -128.662c12.6006 -12.5986 3.67676 -34.1416 -14.1416 -34.1416z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-left\" unicode=\"&#xf0d9;\" horiz-adv-x=\"192\" \n+d=\"M192 320.662v-257.324c0 -17.8184 -21.543 -26.7412 -34.1416 -14.1416l-128.662 128.662c-7.81055 7.80957 -7.81055 20.4736 0 28.2832l128.662 128.662c12.5986 12.6006 34.1416 3.67676 34.1416 -14.1416z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-right\" unicode=\"&#xf0da;\" horiz-adv-x=\"192\" \n+d=\"M0 63.3379v257.324c0 17.8184 21.543 26.7412 34.1416 14.1416l128.662 -128.662c7.81055 -7.80957 7.81055 -20.4736 0 -28.2832l-128.662 -128.662c-12.5986 -12.6006 -34.1416 -3.67676 -34.1416 14.1416z\" \u002F>\n+    \u003Cglyph glyph-name=\"columns\" unicode=\"&#xf0db;\" \n+d=\"M464 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h416zM224 32v256h-160v-256h160zM448 32v256h-160v-256h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort\" unicode=\"&#xf0dc;\" horiz-adv-x=\"320\" \n+d=\"M41 160h238c21.4004 0 32.0996 -25.9004 17 -41l-119 -119c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-119.1 119c-15.0996 15.0996 -4.40039 41 17 41zM296 265c15.0996 -15.0996 4.40039 -41 -17 -41h-238c-21.4004 0 -32.0996 25.9004 -17 41l119.1 119\n+c9.30078 9.40039 24.5 9.40039 33.9004 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-down\" unicode=\"&#xf0dd;\" horiz-adv-x=\"320\" \n+d=\"M41 160h238c21.4004 0 32.0996 -25.9004 17 -41l-119 -119c-9.40039 -9.40039 -24.5996 -9.40039 -33.9004 0l-119.1 119c-15.0996 15.0996 -4.40039 41 17 41z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-up\" unicode=\"&#xf0de;\" horiz-adv-x=\"320\" \n+d=\"M279 224h-238c-21.4004 0 -32.0996 25.9004 -17 41l119 119c9.40039 9.40039 24.5996 9.40039 33.9004 0l119 -119c15.1992 -15.0996 4.5 -41 -16.9004 -41z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope\" unicode=\"&#xf0e0;\" \n+d=\"M502.3 257.2c3.90039 3.09961 9.7002 0.200195 9.7002 -4.7002v-204.5c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v204.4c0 5 5.7002 7.7998 9.7002 4.69922c22.3994 -17.3994 52.0996 -39.5 154.1 -113.6\n+c21.1006 -15.4004 56.7002 -47.7998 92.2002 -47.5996c35.7002 -0.300781 72 32.7998 92.2998 47.5996c102 74.0996 131.601 96.2998 154 113.7zM256 128c-23.2002 -0.400391 -56.5996 29.2002 -73.4004 41.4004c-132.699 96.2998 -142.8 104.8 -173.399 128.699\n+c-5.7998 4.60059 -9.2002 11.5 -9.2002 18.9004v19c0 26.5 21.5 48 48 48h416c26.5 0 48 -21.5 48 -48v-19c0 -7.40039 -3.40039 -14.4004 -9.2002 -18.9004c-30.5996 -24 -40.7002 -32.3994 -173.399 -128.699c-16.8008 -12.2002 -50.2002 -41.8008 -73.4004 -41.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"undo\" unicode=\"&#xf0e2;\" \n+d=\"M212.333 223.667h-200.333c-6.62695 0 -12 5.37305 -12 12v200.333c0 6.62695 5.37305 12 12 12h48c6.62695 0 12 -5.37305 12 -12v-78.1123c45.7734 50.833 112.26 82.6426 186.175 82.1055c136.906 -0.994141 246.448 -111.623 246.157 -248.532\n+c-0.291016 -136.719 -111.212 -247.461 -247.999 -247.461c-64.0889 0 -122.496 24.3135 -166.51 64.2148c-5.09961 4.62207 -5.33398 12.5537 -0.466797 17.4199l33.9668 33.9668c4.47363 4.47461 11.6621 4.71777 16.4004 0.525391\n+c31.0361 -27.4629 71.8564 -44.127 116.609 -44.127c97.2676 0 176 78.7158 176 176c0 97.2666 -78.7158 176 -176 176c-58.4961 0 -110.28 -28.4756 -142.274 -72.333h98.2744c6.62695 0 12 -5.37305 12 -12v-48c0 -6.62695 -5.37305 -12 -12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"gavel\" unicode=\"&#xf0e3;\" \n+d=\"M504.971 248.638c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-124.451 -124.451c-9.37109 -9.37305 -24.5674 -9.37305 -33.9404 0l-22.627 22.627c-9.37305 9.37207 -9.37305 24.5684 0 33.9414l5.65723 5.65625l-39.5986 39.5986l-81.04 -81.04l5.65723 -5.65723\n+c12.4971 -12.4971 12.4971 -32.7578 0 -45.2549l-114.745 -114.745c-12.4971 -12.4971 -32.7578 -12.4971 -45.2549 0l-45.2549 45.2549c-12.4971 12.4971 -12.4971 32.7578 0 45.2549l114.744 114.746c12.4971 12.4971 32.7578 12.4971 45.2549 0l5.65723 -5.65723\n+l81.04 81.04l-39.5986 39.5986l-5.65625 -5.65723c-9.37207 -9.37305 -24.5684 -9.37305 -33.9414 0l-22.627 22.627c-9.37305 9.37207 -9.37305 24.5684 0 33.9404l124.451 124.451c9.37207 9.37305 24.5674 9.37305 33.9404 0l22.627 -22.6279\n+c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-5.65625 -5.65723l113.138 -113.137l5.65723 5.65625c9.37207 9.37305 24.5674 9.37305 33.9404 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"bolt\" unicode=\"&#xf0e7;\" horiz-adv-x=\"320\" \n+d=\"M296 288c18.5 0 30 -20.0996 20.7002 -36l-176 -304c-4.40039 -7.59961 -12.4004 -12 -20.7998 -12c-15.3008 0 -26.9004 14.2998 -23.3008 29.5l46.1006 194.5h-118.7c-14.5 0 -25.7002 12.7998 -23.7998 27.2002l32 240\n+c1.59961 11.8994 11.7998 20.7998 23.7998 20.7998h144c15.7002 0 27.2002 -15 23.2002 -30.2002l-42.6006 -129.8h115.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"sitemap\" unicode=\"&#xf0e8;\" horiz-adv-x=\"640\" \n+d=\"M128 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM104 176v-48h-48v57.5898c0 21.1797 17.2305 38.4102 38.4102 38.4102h201.59v64h-40c-17.6699 0 -32 14.3301 -32 32\n+v96c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-40v-64h201.59c21.1797 0 38.4102 -17.2402 38.4102 -38.4102v-57.5898h-48v48h-192v-48h-48v48h-192zM368 96c17.6699 0 32 -14.3301 32 -32v-96\n+c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM608 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"umbrella\" unicode=\"&#xf0e9;\" horiz-adv-x=\"576\" \n+d=\"M575.7 167.2c2.2002 -10.1006 -8.40039 -21.4004 -18.7002 -11.4004c-51.5 54.4004 -107.6 52.5 -158.6 -37c-5.30078 -9.5 -14.9004 -8.59961 -19.7002 0c-2.5 4.40039 -32.2002 73.2002 -90.7002 73.2002c-45.7998 0 -70.5 -37.7998 -90.7002 -73.2002\n+c-4.7998 -8.59961 -14.3994 -9.5 -19.7002 0c-50.8994 89.4004 -106.6 92 -158.6 37c-10.2002 -9.89941 -20.9004 1.2998 -18.7002 11.4004c29.2002 136.3 138 218.2 255.7 230.899v17.9004c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-17.9004\n+c117.3 -12.6992 227.1 -94.5996 255.7 -230.899zM256 146.3c9.59961 8.90039 19.7002 13.6006 32 13.7002c12.2002 0 22.9004 -5.7002 32 -13.5996v-130.301c0 -44.0996 -35.9004 -80 -80 -80c-33.7998 0 -64.2002 21.4004 -75.4004 53.3008\n+c-5.89941 16.5996 2.80078 34.8994 19.5 40.7998c16.7002 5.89941 34.9004 -2.7998 40.8008 -19.5c1.89941 -5.40039 7.2998 -10.7002 15.0996 -10.7002c8.7998 0 16 7.2002 16 16v130.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"paste\" unicode=\"&#xf0ea;\" horiz-adv-x=\"448\" \n+d=\"M128 264v-232h-104c-13.2549 0 -24 10.7451 -24 24v336c0 13.2549 10.7451 24 24 24h80.6104c11.084 19.1104 31.7529 32 55.3896 32s44.3057 -12.8896 55.3896 -32h80.6104c13.2549 0 24 -10.7451 24 -24v-72h-136c-30.8779 0 -56 -25.1211 -56 -56zM160 408\n+c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM344 160h104v-200c0 -13.2549 -10.7451 -24 -24 -24h-240c-13.2549 0 -24 10.7451 -24 24v304c0 13.2549 10.7451 24 24 24h136v-104c0 -13.2002 10.7998 -24 24 -24z\n+M448 198.059v-6.05859h-96v96h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293l65.9404 -65.9404c3.88086 -3.88086 7.03027 -11.4834 7.03027 -16.9717z\" \u002F>\n+    \u003Cglyph glyph-name=\"lightbulb\" unicode=\"&#xf0eb;\" horiz-adv-x=\"352\" \n+d=\"M96.0596 -6.34961l-0.0498047 38.3496h159.98l-0.0400391 -38.3496c-0.00585938 -5.3291 -2.40723 -13.2549 -5.36035 -17.6904l-17.0898 -25.6904c-5.24023 -7.88184 -17.1748 -14.2793 -26.6396 -14.2793h-61.71c-9.46582 0 -21.4004 6.39746 -26.6406 14.2793\n+l-17.0898 25.6904c-3.49023 5.24023 -5.34961 11.4004 -5.36035 17.6904zM0 272c0 93.0303 73.4404 175.69 175.45 176c97.46 0.299805 176.55 -78.6104 176.55 -176c0 -44.3701 -16.4502 -84.8496 -43.5596 -115.78c-16.5205 -18.8496 -42.3604 -58.2295 -52.21 -91.4502\n+c-0.0400391 -0.269531 -0.0703125 -0.519531 -0.110352 -0.779297h-160.24c-0.0400391 0.259766 -0.0703125 0.519531 -0.110352 0.779297c-9.84961 33.2207 -35.6895 72.6006 -52.21 91.4502c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78zM176 352\n+c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16c-61.7598 0 -112 -50.2402 -112 -112c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16c0 44.1104 35.8896 80 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-md\" unicode=\"&#xf0f0;\" horiz-adv-x=\"448\" \n+d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM104 24c0 13.2998 10.7002 24 24 24s24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24zM320 159.4c71.2002 -3.5 128 -61.8008 128 -133.801\n+v-44.7998c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v44.7998c0 66.6006 48.5 121.4 112.1 132.101v-80.4004c-23.0996 -6.89941 -40 -28.0996 -40 -53.3994c0 -30.9004 25.1006 -56 56 -56\n+c30.9004 0 56 25.0996 56 56c0 25.2998 -16.8994 46.5 -40 53.3994v81.6006c7.7002 -1 15.2002 -2.60059 22.6006 -5.2002c18 -6.2998 37.2998 -9.7998 57.3994 -9.7998c20.1006 0 39.4004 3.5 57.4004 9.7998c2.2002 0.799805 4.40039 1.2002 6.59961 1.89941v-45.1992\n+c-36.5 -7.5 -64 -39.8008 -64 -78.4004v-43.7998c0 -8.10059 5.90039 -14.7998 13.8008 -15.9004l31.1992 -4.2002c4.30078 -0.799805 8.5 2 9.40039 6.30078l3.09961 15.6992c0.800781 4.30078 -2 8.5 -6.2998 9.40039l-19.2998 3.90039v26.6992\n+c0 67 96 64.7002 96 1.90039v-28.5l-19.2998 -3.90039c-4.40039 -0.799805 -7.2002 -5.09961 -6.2998 -9.39941l3.09961 -15.7002c0.900391 -4.40039 5.09961 -7.2002 9.40039 -6.2998l32.1992 6.39941c7.5 1.5 12.9004 8.10059 12.9004 15.7002v41.7002\n+c0 38.5996 -27.5 71 -64 78.4004v49z\" \u002F>\n+    \u003Cglyph glyph-name=\"stethoscope\" unicode=\"&#xf0f1;\" \n+d=\"M447.1 336c35.7002 0.5 64.9004 -28.2998 64.9004 -64c0 -23.7002 -12.9004 -44.2998 -32 -55.4004v-112.6c0 -92.5996 -79 -168 -176 -168c-95.4004 0 -173.3 72.7998 -175.9 163.2c-73 14.7998 -128.1 79.5 -128.1 156.8v155.4c0 11.5 8.09961 21.2998 19.2998 23.5996\n+l62.7998 12.4004c13 2.59961 25.6006 -5.80078 28.2002 -18.8008l3.10059 -15.6992c2.59961 -13 -5.80078 -25.6006 -18.8008 -28.2002l-30.6992 -6.10059v-122.5c0 -53.2998 43.5 -96.5 96.8994 -96c52.9004 0.5 95.1006 44.3008 95.1006 97.2002v121.4l-30.7002 6.09961\n+c-13 2.60059 -21.4004 15.2002 -18.7998 28.2002l3.19922 15.7002c2.60059 13 15.2002 21.3994 28.2002 18.7998l62.9004 -12.5996c11.2002 -2.2002 19.2998 -12.1006 19.2998 -23.5v-155.4c0 -77.2002 -55 -141.8 -127.8 -156.8\n+c2.7002 -55.1006 51.8994 -99.2002 111.899 -99.2002c61.8008 0 112 46.7002 112 104v112.6c-19.5 11.2002 -32.5 32.5 -32 56.8008c0.700195 34.1992 28.8008 62.0996 63 62.5996zM448 256c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16\n+s7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"suitcase\" unicode=\"&#xf0f2;\" \n+d=\"M128 -32v400c0 26.5 21.5 48 48 48h160c26.5 0 48 -21.5 48 -48v-400h-256zM192 352v-32h128v32h-128zM512 272v-256c0 -26.5 -21.5 -48 -48 -48h-48v352h48c26.5 0 48 -21.5 48 -48zM96 -32h-48c-26.5 0 -48 21.5 -48 48v256c0 26.5 21.5 48 48 48h48v-352z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell\" unicode=\"&#xf0f3;\" horiz-adv-x=\"448\" \n+d=\"M224 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64zM439.39 85.71c6 -6.44043 8.66016 -14.1602 8.61035 -21.71c-0.0996094 -16.4004 -12.9805 -32 -32.0996 -32h-383.801c-19.1191 0 -31.9893 15.5996 -32.0996 32\n+c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c19.3193 20.7598 55.4697 51.9902 55.4697 154.29c0 77.7002 54.4795 139.9 127.939 155.16v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8398\n+c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -102.3 36.1504 -133.53 55.4697 -154.29z\" \u002F>\n+    \u003Cglyph glyph-name=\"coffee\" unicode=\"&#xf0f4;\" horiz-adv-x=\"640\" \n+d=\"M192 64c-53 0 -96 43 -96 96v232c0 13.2998 10.7002 24 24 24h392c70.5996 0 128 -57.4004 128 -128s-57.4004 -128 -128 -128h-32c0 -53 -43 -96 -96 -96h-192zM512 352h-32v-128h32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64zM559.7 -32h-511.4\n+c-47.5996 0 -61 64 -36 64h583.3c25 0 11.8008 -64 -35.8994 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"hospital\" unicode=\"&#xf0f8;\" horiz-adv-x=\"448\" \n+d=\"M448 -44v-20h-448v20c0 6.62695 5.37305 12 12 12h20v360c0 13.2549 10.7451 24 24 24h88v72c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-72h88c13.2549 0 24 -10.7451 24 -24v-360h20c6.62695 0 12 -5.37305 12 -12zM308 256h-40\n+c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12zM140 192h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\n+c0 -6.62695 5.37305 -12 12 -12zM244 64h-40c-6.62695 0 -12 -5.37305 -12 -12v-84h64v84c0 6.62695 -5.37305 12 -12 12zM308 160h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12\n+zM192 148c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40zM182 352h26v-26c0 -3.31152 2.68848 -6 6 -6h20c3.31152 0 6 2.68848 6 6v26h26c3.31152 0 6 2.68848 6 6v20\n+c0 3.31152 -2.68848 6 -6 6h-26v26c0 3.31152 -2.68848 6 -6 6h-20c-3.31152 0 -6 -2.68848 -6 -6v-26h-26c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6z\" \u002F>\n+    \u003Cglyph glyph-name=\"ambulance\" unicode=\"&#xf0f9;\" horiz-adv-x=\"640\" \n+d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96h-16c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48 -21.5 48 -48v-48h44.0996\n+c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM304 232v48c0 4.40039 -3.59961 8 -8 8h-56v56\n+c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8zM480 -16c26.5 0 48 21.5 48 48\n+s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"medkit\" unicode=\"&#xf0fa;\" \n+d=\"M96 -32v352h32v48c0 26.5098 21.4902 48 48 48h160c26.5098 0 48 -21.4902 48 -48v-48h32v-352h-320zM192 352v-32h128v32h-128zM512 272v-256c0 -26.5098 -21.4902 -48 -48 -48h-16v352h16c26.5098 0 48 -21.4902 48 -48zM64 -32h-16c-26.5098 0 -48 21.4902 -48 48v256\n+c0 26.5098 21.4902 48 48 48h16v-352zM352 176c0 8.83691 -7.16309 16 -16 16h-48v48c0 8.83691 -7.16309 16 -16 16h-32c-8.83691 0 -16 -7.16309 -16 -16v-48h-48c-8.83691 0 -16 -7.16309 -16 -16v-32c0 -8.83691 7.16309 -16 16 -16h48v-48\n+c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v48h48c8.83691 0 16 7.16309 16 16v32z\" \u002F>\n+    \u003Cglyph glyph-name=\"fighter-jet\" unicode=\"&#xf0fb;\" horiz-adv-x=\"640\" \n+d=\"M544 224c96 -21.333 96 -26.583 96 -32s0 -10.667 -96 -32l-128 -16l-48 -16h-24l-116.842 -148h39.5088c11.666 0 21.333 -2.625 21.333 -6s-9.66602 -6 -21.333 -6h-114.667v12h16v164h-48l-66.666 -80h-34.667l-10.667 10.667v69.333h8v16h48v2.66699l-64 8v42.667\n+l64 8v2.66602h-48v16h-8v69.333l10.667 10.667h34.666l66.667 -80h48v164h-16v12h114.667c11.666 0 21.333 -2.625 21.333 -6s-9.66699 -6 -21.333 -6h-39.5088l116.842 -148h24l48 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"beer\" unicode=\"&#xf0fc;\" horiz-adv-x=\"448\" \n+d=\"M368 352c44.1123 0 80 -35.8877 80 -80v-128.86c0 -31.5273 -18.6035 -60.2031 -47.3936 -73.0527l-80.6064 -35.9766v-42.1104c0 -13.2549 -10.7451 -24 -24 -24h-272c-13.2549 0 -24 10.7451 -24 24v400c0 13.2549 10.7451 24 24 24h272c13.2549 0 24 -10.7451 24 -24\n+v-40h48zM384 143.14v128.86c0 8.82227 -7.17773 16 -16 16h-48v-183.805l54.5215 24.334c5.22754 2.33789 9.47461 8.88379 9.47852 14.6104zM208 64c8.83594 0 16 7.16406 16 16v224c0 8.83594 -7.16406 16 -16 16s-16 -7.16406 -16 -16v-224\n+c0 -8.83594 7.16406 -16 16 -16zM112 64c8.83594 0 16 7.16406 16 16v224c0 8.83594 -7.16406 16 -16 16s-16 -7.16406 -16 -16v-224c0 -8.83594 7.16406 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"h-square\" unicode=\"&#xf0fd;\" horiz-adv-x=\"448\" \n+d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM336 320h-32c-8.83691 0 -16 -7.16309 -16 -16v-80h-128v80c0 8.83691 -7.16309 16 -16 16h-32\n+c-8.83691 0 -16 -7.16309 -16 -16v-224c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v80h128v-80c0 -8.83691 7.16309 -16 16 -16h32c8.83691 0 16 7.16309 16 16v224c0 8.83691 -7.16309 16 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"plus-square\" unicode=\"&#xf0fe;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM368 164v56c0 6.59961 -5.40039 12 -12 12h-92v92c0 6.59961 -5.40039 12 -12 12h-56c-6.59961 0 -12 -5.40039 -12 -12v-92h-92\n+c-6.59961 0 -12 -5.40039 -12 -12v-56c0 -6.59961 5.40039 -12 12 -12h92v-92c0 -6.59961 5.40039 -12 12 -12h56c6.59961 0 12 5.40039 12 12v92h92c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-double-left\" unicode=\"&#xf100;\" horiz-adv-x=\"448\" \n+d=\"M223.7 209l136 136c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.6006 -22.5996c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-96.2998 -96.5l96.3994 -96.4004c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.7002\n+c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-136 136c-9.5 9.40039 -9.5 24.5996 -0.0996094 34zM31.7002 175c-9.40039 9.40039 -9.40039 24.5996 0.0996094 34l136 136c9.2998 9.40039 24.5 9.40039 33.9004 0l22.5996 -22.7002\n+c9.40039 -9.2998 9.40039 -24.5 0 -33.8994l-96.3994 -96.4004l96.2998 -96.5c9.39941 -9.2998 9.39941 -24.5 0 -33.9004l-22.6006 -22.5996c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-double-right\" unicode=\"&#xf101;\" horiz-adv-x=\"448\" \n+d=\"M224.3 175l-136 -136c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.6006 22.5996c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l96.4004 96.4004l-96.4004 96.3994c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l22.5 22.7998\n+c9.40039 9.40039 24.6006 9.40039 33.9004 0l136 -136c9.5 -9.40039 9.5 -24.5996 0.0996094 -34zM416.3 209c9.40039 -9.40039 9.40039 -24.5996 0 -33.7998l-136 -136c-9.2998 -9.40039 -24.5 -9.40039 -33.8994 0l-22.6006 22.5996\n+c-9.39941 9.2998 -9.39941 24.5 0 33.9004l96.4004 96.3994l-96.4004 96.4004c-9.39941 9.2998 -9.39941 24.5 0 33.9004l22.6006 22.5996c9.2998 9.40039 24.5 9.40039 33.8994 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-double-up\" unicode=\"&#xf102;\" horiz-adv-x=\"320\" \n+d=\"M177 192.3l136 -136c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.6006c-9.40039 -9.39941 -24.6006 -9.39941 -33.9004 0l-96.5 96.2998l-96.4004 -96.3994c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.7002 22.5996\n+c-9.40039 9.40039 -9.40039 24.6006 0 33.9004l136 136c9.40039 9.5 24.5996 9.5 34 0.0996094zM143 384.3c9.40039 9.40039 24.5996 9.40039 33.7998 0l136 -136c9.40039 -9.2998 9.40039 -24.5 0 -33.8994l-22.5996 -22.6006c-9.2998 -9.39941 -24.5 -9.39941 -33.9004 0\n+l-96.3994 96.4004l-96.4004 -96.4004c-9.2998 -9.39941 -24.5 -9.39941 -33.9004 0l-22.5996 22.6006c-9.40039 9.2998 -9.40039 24.5 0 33.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-double-down\" unicode=\"&#xf103;\" horiz-adv-x=\"320\" \n+d=\"M143 191.7l-136 136c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.5996 22.6006c9.40039 9.39941 24.6006 9.39941 33.9004 0l96.4004 -96.4004l96.3994 96.4004c9.40039 9.39941 24.6006 9.39941 33.9004 0l22.7998 -22.5\n+c9.40039 -9.40039 9.40039 -24.6006 0 -33.9004l-136 -136c-9.40039 -9.5 -24.5996 -9.5 -34 -0.0996094zM177 -0.299805c-9.40039 -9.40039 -24.5996 -9.40039 -34 0.0996094l-136 136c-9.40039 9.2998 -9.40039 24.5 0 33.9004l22.7002 22.5996\n+c9.2998 9.40039 24.5 9.40039 33.8994 0l96.4004 -96.3994l96.5 96.2998c9.2998 9.39941 24.5 9.39941 33.9004 0l22.5996 -22.6006c9.40039 -9.2998 9.40039 -24.5 0 -33.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-left\" unicode=\"&#xf104;\" horiz-adv-x=\"256\" \n+d=\"M31.7002 209l136 136c9.39941 9.40039 24.5996 9.40039 33.8994 0l22.6006 -22.5996c9.39941 -9.40039 9.39941 -24.6006 0 -33.9004l-96.2998 -96.5l96.3994 -96.4004c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.7002\n+c-9.40039 -9.40039 -24.6006 -9.40039 -33.9004 0l-136 136c-9.5 9.40039 -9.5 24.5996 -0.0996094 34z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-right\" unicode=\"&#xf105;\" horiz-adv-x=\"256\" \n+d=\"M224.3 175l-136 -136c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.6006 22.5996c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l96.4004 96.4004l-96.4004 96.3994c-9.39941 9.40039 -9.39941 24.6006 0 33.9004l22.5 22.7998\n+c9.40039 9.40039 24.6006 9.40039 33.9004 0l136 -136c9.5 -9.40039 9.5 -24.5996 0.0996094 -34z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-up\" unicode=\"&#xf106;\" horiz-adv-x=\"320\" \n+d=\"M177 288.3l136 -136c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-22.5996 -22.6006c-9.40039 -9.39941 -24.6006 -9.39941 -33.9004 0l-96.5 96.2998l-96.4004 -96.3994c-9.39941 -9.40039 -24.5996 -9.40039 -33.8994 0l-22.7002 22.5996\n+c-9.40039 9.40039 -9.40039 24.6006 0 33.9004l136 136c9.40039 9.5 24.5996 9.5 34 0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"angle-down\" unicode=\"&#xf107;\" horiz-adv-x=\"320\" \n+d=\"M143 95.7002l-136 136c-9.40039 9.39941 -9.40039 24.5996 0 33.8994l22.5996 22.6006c9.40039 9.39941 24.6006 9.39941 33.9004 0l96.4004 -96.4004l96.3994 96.4004c9.40039 9.39941 24.6006 9.39941 33.9004 0l22.5996 -22.6006\n+c9.40039 -9.39941 9.40039 -24.5996 0 -33.8994l-136 -136c-9.2002 -9.40039 -24.3994 -9.40039 -33.7998 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"desktop\" unicode=\"&#xf108;\" horiz-adv-x=\"576\" \n+d=\"M528 448c26.5 0 48 -21.5 48 -48v-320c0 -26.5 -21.5 -48 -48 -48h-192l16 -48h72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24h-272c-13.2998 0 -24 10.7002 -24 24s10.7002 24 24 24h72l16 48h-192c-26.5 0 -48 21.5 -48 48v320c0 26.5 21.5 48 48 48h480z\n+M512 96v288h-448v-288h448z\" \u002F>\n+    \u003Cglyph glyph-name=\"laptop\" unicode=\"&#xf109;\" horiz-adv-x=\"640\" \n+d=\"M624 32c8.7998 0 16 -7.2002 16 -16v-16c0 -35.2002 -28.7998 -64 -64 -64h-512c-35.2002 0 -64 28.7998 -64 64v16c0 8.7998 7.2002 16 16 16h239.23c-0.25 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46zM576 400v-336h-512v336\n+c0 26.4004 21.5996 48 48 48h416c26.4004 0 48 -21.5996 48 -48zM512 128v256h-384v-256h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"tablet\" unicode=\"&#xf10a;\" horiz-adv-x=\"448\" \n+d=\"M400 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h352zM224 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"mobile\" unicode=\"&#xf10b;\" horiz-adv-x=\"320\" \n+d=\"M272 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-224c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h224zM160 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"quote-left\" unicode=\"&#xf10d;\" \n+d=\"M464 192c26.5 0 48 -21.5 48 -48v-128c0 -26.5 -21.5 -48 -48 -48h-128c-26.5 0 -48 21.5 -48 48v240c0 88.4004 71.5996 160 160 160h8c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8c-35.2998 0 -64 -28.7002 -64 -64v-64h80zM176 192\n+c26.5 0 48 -21.5 48 -48v-128c0 -26.5 -21.5 -48 -48 -48h-128c-26.5 0 -48 21.5 -48 48v240c0 88.4004 71.5996 160 160 160h8c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8c-35.2998 0 -64 -28.7002 -64 -64v-64h80z\" \u002F>\n+    \u003Cglyph glyph-name=\"quote-right\" unicode=\"&#xf10e;\" \n+d=\"M464 416c26.5 0 48 -21.5 48 -48v-240c0 -88.4004 -71.5996 -160 -160 -160h-8c-13.2998 0 -24 10.7002 -24 24v48c0 13.2998 10.7002 24 24 24h8c35.2998 0 64 28.7002 64 64v64h-80c-26.5 0 -48 21.5 -48 48v128c0 26.5 21.5 48 48 48h128zM176 416\n+c26.5 0 48 -21.5 48 -48v-240c0 -88.4004 -71.5996 -160 -160 -160h-8c-13.2998 0 -24 10.7002 -24 24v48c0 13.2998 10.7002 24 24 24h8c35.2998 0 64 28.7002 64 64v64h-80c-26.5 0 -48 21.5 -48 48v128c0 26.5 21.5 48 48 48h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"spinner\" unicode=\"&#xf110;\" \n+d=\"M304 400c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48zM256 32c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48zM464 240c26.5098 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48\n+s-48 21.4902 -48 48s21.4902 48 48 48zM96 192c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48zM108.922 92.9219c26.5088 0 48 -21.4912 48 -48c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48z\n+M403.078 92.9219c26.5098 0 48 -21.4912 48 -48c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48zM108.922 387.078c26.5088 0 48 -21.4902 48 -48s-21.4902 -48 -48 -48s-48 21.4902 -48 48s21.4902 48 48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"circle\" unicode=\"&#xf111;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile\" unicode=\"&#xf118;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\n+s32 14.2998 32 32s-14.2998 32 -32 32zM362.8 101.8c13.5 16.2998 -11.2002 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002s-67.7998 15.3008 -90.2002 42.2002c-13.5996 16.2002 -38.2002 -4.2002 -24.5996 -20.5\n+c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"frown\" unicode=\"&#xf119;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\n+s32 14.2998 32 32s-14.2998 32 -32 32zM338.2 53.7998c13.5 -16.2998 38.0996 4.2002 24.5 20.4004c-28.4004 34.2002 -70.2998 53.7998 -114.7 53.7998s-86.2998 -19.5996 -114.8 -53.7002c-13.5 -16.2998 11.0996 -36.7998 24.5996 -20.5\n+c22.4004 26.7998 55.2998 42.2002 90.2002 42.2002s67.7998 -15.4004 90.2002 -42.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh\" unicode=\"&#xf11a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM344 80c21.2002 0 21.2002 32 0 32h-192c-21.2002 0 -21.2002 -32 0 -32\n+h192zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"gamepad\" unicode=\"&#xf11b;\" horiz-adv-x=\"640\" \n+d=\"M480.07 352c88.2939 -0.0263672 159.952 -71.7061 159.952 -160c0 -88.3203 -71.6797 -160 -160 -160c-37.1016 0 -88.291 21.5039 -114.263 48h-91.5195c-25.9717 -26.4961 -77.1611 -48 -114.263 -48c-88.3203 0 -160 71.6797 -160 160s71.6797 160 160 160h0.0224609\n+h320.07zM248 180v24c0 6.62402 -5.37598 12 -12 12h-52v52c0 6.62402 -5.37598 12 -12 12h-24c-6.62402 0 -12 -5.37598 -12 -12v-52h-52c-6.62402 0 -12 -5.37598 -12 -12v-24c0 -6.62402 5.37598 -12 12 -12h52v-52c0 -6.62402 5.37598 -12 12 -12h24\n+c6.62402 0 12 5.37598 12 12v52h52c6.62402 0 12 5.37598 12 12zM464 104c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40zM528 200c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"keyboard\" unicode=\"&#xf11c;\" horiz-adv-x=\"576\" \n+d=\"M528 0h-480c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48zM128 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\n+c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM224 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 268v40c0 6.62695 -5.37305 12 -12 12h-40\n+c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM416 268v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM512 268v40\n+c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM176 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40\n+c6.62695 0 12 5.37305 12 12zM272 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM368 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40\n+c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM464 172v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM128 76v40c0 6.62695 -5.37305 12 -12 12h-40\n+c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM416 76v40c0 6.62695 -5.37305 12 -12 12h-232c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h232c6.62695 0 12 5.37305 12 12zM512 76v40\n+c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag-checkered\" unicode=\"&#xf11e;\" \n+d=\"M243.2 258.1c24.2002 -6.69922 47.5996 -16.3994 73.5996 -22.1992v-68.2002c-24.2998 6.7002 -47.5 16.3994 -73.5996 22.2998v68.0996zM466.5 381.1c21.2002 9.80078 45.5 -5.69922 45.4004 -29v-243.1c0 -10.5996 -5.10059 -20.4004 -13.8008 -26.4004\n+c-35.7998 -24.5996 -74.2998 -40.8994 -122.5 -40.8994c-67.3994 0 -111.6 34.7998 -165.199 34.7998c-50.8008 0 -86.1006 -10 -114.4 -22.0996v-94.4004c0 -13.2998 -10.7002 -24 -24 -24h-16c-13.2998 0 -24 10.7002 -24 24v386.1c-14.5 10.1006 -24 26.9004 -24 45.9004\n+c0 31.7002 26.2998 57.2998 58.2998 56c28.5 -1.2002 51.7998 -24 53.6006 -52.4004c0.5 -8.39941 -0.800781 -16.2998 -3.60059 -23.5996c20.7002 7.59961 43 12 68 12c67.4004 0 111.7 -34.7998 165.2 -34.7998c40.5 0 82.7002 16 117 31.8994zM169.6 122.5v71.2998\n+c-26.0996 -2.39941 -47.3994 -8.09961 -73.5996 -17.3994v-70.5c23.5996 8.39941 47.7998 13.8994 73.5996 16.5996zM464 257v70.5c-21.2998 -8.90039 -46.5996 -17.7002 -73.5996 -22.5v-71.9004c-26 -4.19922 -49.9004 -2.59961 -73.6006 2.7002v68.4004\n+c-26.3994 4.59961 -49.8994 13.8994 -73.5996 21.2998v-67.4004c-25.2002 7 -46.6006 9.40039 -73.6006 5.7002v71.6006c-23.5 -2.2002 -40.3994 -9.80078 -73.5996 -22v-70.5c29 10.6992 51.2002 17.7998 73.5996 20.8994v-70c32.8008 3 53.9004 0.600586 73.6006 -3.7998\n+v-68.5c26.2998 -4.59961 49.7002 -13.9004 73.5996 -21.2998v67.3994c25.7002 -7.09961 46.6006 -9.2998 73.6006 -5.59961v-71.5996c25.0996 2.39941 48.5 11 73.5996 27.0996v70.5c-22.2002 -14.2002 -48.7998 -22.5996 -73.5996 -26v71.0996\n+c27.2998 4.40039 50 14.1006 73.5996 23.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"terminal\" unicode=\"&#xf120;\" horiz-adv-x=\"640\" \n+d=\"M257.981 175.029l-194.344 -194.344c-9.37305 -9.37207 -24.5684 -9.37207 -33.9404 0l-22.668 22.667c-9.35742 9.35742 -9.375 24.5225 -0.0400391 33.9014l154.021 154.746l-154.021 154.745c-9.33496 9.37891 -9.31738 24.5439 0.0400391 33.9014l22.667 22.667\n+c9.37305 9.37207 24.5684 9.37207 33.9404 0l194.344 -194.344c9.37207 -9.37207 9.37207 -24.5674 0 -33.9404zM640 -8c0 -13.2549 -10.7451 -24 -24 -24h-304c-13.2549 0 -24 10.7451 -24 24v32c0 13.2549 10.7451 24 24 24h304c13.2549 0 24 -10.7451 24 -24v-32z\" \u002F>\n+    \u003Cglyph glyph-name=\"code\" unicode=\"&#xf121;\" horiz-adv-x=\"640\" \n+d=\"M278.9 -63.5l-61 17.7002c-6.40039 1.7998 -10 8.5 -8.2002 14.8994l136.5 470.2c1.7998 6.40039 8.5 10 14.8994 8.2002l61 -17.7002c6.40039 -1.7998 10 -8.5 8.2002 -14.8994l-136.5 -470.2c-1.89941 -6.40039 -8.5 -10.1006 -14.8994 -8.2002zM164.9 48.7002\n+c-4.5 -4.90039 -12.1006 -5.10059 -17 -0.5l-144.101 135.1c-5.09961 4.7002 -5.09961 12.7998 0 17.5l144.101 135c4.89941 4.60059 12.5 4.2998 17 -0.5l43.5 -46.3994c4.69922 -4.90039 4.2998 -12.7002 -0.800781 -17.2002l-90.5996 -79.7002l90.5996 -79.7002\n+c5.10059 -4.5 5.40039 -12.2998 0.800781 -17.2002zM492.1 48.0996c-4.89941 -4.5 -12.5 -4.2998 -17 0.600586l-43.5 46.3994c-4.69922 4.90039 -4.2998 12.7002 0.800781 17.2002l90.5996 79.7002l-90.5996 79.7998c-5.10059 4.5 -5.40039 12.2998 -0.800781 17.2002\n+l43.5 46.4004c4.60059 4.7998 12.2002 5 17 0.5l144.101 -135.2c5.09961 -4.7002 5.09961 -12.7998 0 -17.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"reply-all\" unicode=\"&#xf122;\" horiz-adv-x=\"576\" \n+d=\"M136.309 258.164l176.005 151.985c15.4062 13.3047 39.6865 2.50293 39.6865 -18.1641v-82.7637c129.182 -10.2305 224 -52.2119 224 -183.548c0 -61.4404 -39.582 -122.309 -83.333 -154.132c-13.6533 -9.93066 -33.1113 2.5332 -28.0771 18.6309\n+c38.5117 123.162 -3.92188 169.482 -112.59 182.016v-84.1758c0 -20.7012 -24.2998 -31.4531 -39.6865 -18.1641l-176.005 151.987c-11.0703 9.56152 -11.0859 26.7529 0 36.3281zM8.30859 221.836c-11.0703 9.56152 -11.0859 26.7529 0 36.3281l176.005 151.985\n+c15.4062 13.3047 39.6865 2.50293 39.6865 -18.1641v-15.8174l-108.607 -93.7861c-10.7041 -9.23926 -19.3926 -28.2158 -19.3926 -42.3564v-0.0234375v-0.0244141c0 -14.1416 8.68848 -33.1191 19.3936 -42.3604l108.606 -93.7852v-15.8184\n+c0 -20.7002 -24.2998 -31.4531 -39.6865 -18.1641z\" \u002F>\n+    \u003Cglyph glyph-name=\"location-arrow\" unicode=\"&#xf124;\" \n+d=\"M444.52 444.48c38.3809 16 79.9609 -25.5801 63.9707 -63.9707l-191.9 -415.779c-22.3896 -47.9805 -92.75 -31.9805 -92.75 19.1895v175.91h-175.91c-51.1699 0 -67.1602 70.3604 -19.1895 92.75z\" \u002F>\n+    \u003Cglyph glyph-name=\"crop\" unicode=\"&#xf125;\" \n+d=\"M488 96c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-40v-40c0 -13.25 -10.75 -24 -24 -24h-48c-13.25 0 -24 10.75 -24 24v282.75l-146.75 -146.75h114.75v-96h-232c-13.25 0 -24 10.75 -24 24v264h-40c-13.25 0 -24 10.75 -24 24v48\n+c0 13.2598 10.75 24 24 24h40v40c0 13.2598 10.75 24 24 24h48c13.25 0 24 -10.7402 24 -24v-282.75l146.75 146.75h-114.75v96h210.75l59.3096 59.3096c6.25 6.25 16.3809 6.25 22.6309 0l22.6191 -22.6191c6.25 -6.25 6.25 -16.3809 0 -22.6309l-59.3096 -59.3096v-242.75\n+h40z\" \u002F>\n+    \u003Cglyph glyph-name=\"code-branch\" unicode=\"&#xf126;\" horiz-adv-x=\"384\" \n+d=\"M384 304c0 -35.2002 -22.7998 -65.0996 -54.4004 -75.9004c-0.5 -28.0996 -7.59961 -50.5 -21.5996 -67.8994c-28.2002 -35 -76 -39.5 -118.2 -43.4004c-25.7002 -2.39941 -49.8994 -4.59961 -66.0996 -12.7998c-7.10059 -3.59961 -11.7998 -8.2002 -14.9004 -13.4004\n+c30 -11.5 51.2002 -40.5996 51.2002 -74.5996c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 35.7998 23.5 66.0996 56 76.4004v199.3c-32.5 10.2002 -56 40.5 -56 76.2998c0 44.2002 35.7998 80 80 80s80 -35.7998 80 -80c0 -35.7998 -23.5 -66.0996 -56 -76.2998\n+v-144c23.9004 11.5 53.0996 14.2998 81.2998 16.8994c35.9004 3.30078 69.7998 6.5 85.2002 25.7002c6.7998 8.40039 10.4004 20.7998 11 36.9004c-33.2002 9.7002 -57.5 40.3994 -57.5 76.7998c0 44.2002 35.7998 80 80 80s80 -35.7998 80 -80zM80 384\n+c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16s16 7.2002 16 16s-7.2002 16 -16 16zM80 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM304 320c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16s16 7.2002 16 16\n+s-7.2002 16 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlink\" unicode=\"&#xf127;\" \n+d=\"M304.083 42.0928c4.68555 -4.68555 4.68555 -12.2842 0 -16.9707l-44.6738 -44.6738c-59.2627 -59.2627 -155.693 -59.2666 -214.961 0c-59.2646 59.2646 -59.2646 155.695 0 214.96l44.6748 44.6748c4.68555 4.68555 12.2842 4.68555 16.9707 0l39.5986 -39.5977\n+c4.68555 -4.68652 4.68555 -12.2842 0 -16.9717l-44.6758 -44.6738c-28.0713 -28.0732 -28.0713 -73.75 0 -101.823c28.0723 -28.0713 73.75 -28.0723 101.824 0l44.6738 44.6748c4.68652 4.68555 12.2842 4.68555 16.9717 0zM247.515 302.309l-39.5967 39.5986\n+c-4.68555 4.68652 -4.68555 12.2852 0 16.9707l44.6738 44.6738c59.2666 59.2646 155.695 59.2646 214.961 0s59.2656 -155.694 0 -214.96l-44.6748 -44.6748c-4.68652 -4.68555 -12.2852 -4.68555 -16.9707 0l-39.5986 39.5977c-4.68555 4.6875 -4.68555 12.2852 0 16.9717\n+l44.6758 44.6738c28.0713 28.0732 28.0713 73.75 0 101.823c-28.0742 28.0723 -73.752 28.0742 -101.824 0l-44.6738 -44.6748c-4.6875 -4.68555 -12.2852 -4.68555 -16.9717 0zM482.343 -56.9707c-9.37207 -9.37207 -24.5674 -9.37207 -33.9404 0l-441.373 441.373\n+c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l22.6279 22.6279c9.37207 9.37305 24.5674 9.37305 33.9404 0l441.372 -441.374c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404z\" \u002F>\n+    \u003Cglyph glyph-name=\"question\" unicode=\"&#xf128;\" horiz-adv-x=\"384\" \n+d=\"M202.021 448c84.8809 0 175.482 -66.2559 175.481 -153.6c0 -115.982 -125.268 -117.768 -125.268 -160.627v-5.77344c0 -13.2549 -10.7451 -24 -24 -24h-72.4717c-13.2549 0 -24 10.7451 -24 24v9.78809c0 61.8291 46.876 86.5449 82.2998 106.405\n+c30.376 17.0293 48.9922 28.6113 48.9922 51.1641c0 29.832 -38.0518 49.6309 -68.8154 49.6309c-39.127 0 -57.708 -18.0684 -82.7568 -49.4492c-8.12109 -10.1738 -22.8809 -12.0127 -33.2529 -4.14844l-43.1387 32.709c-10.2705 7.78809 -12.541 22.2939 -5.17773 32.874\n+c40.5889 58.3232 92.2881 91.0264 172.107 91.0264zM192 74.541c38.1963 0 69.2715 -31.0742 69.2715 -69.2695c0 -38.1963 -31.0752 -69.2715 -69.2715 -69.2715s-69.2715 31.0752 -69.2715 69.2695c0 38.1963 31.0752 69.2715 69.2715 69.2715z\" \u002F>\n+    \u003Cglyph glyph-name=\"info\" unicode=\"&#xf129;\" horiz-adv-x=\"192\" \n+d=\"M20 23.7715h20v144.457h-20c-11.0459 0 -20 8.9541 -20 20v47.7715c0 11.0459 8.9541 20 20 20h112c11.0459 0 20 -8.9541 20 -20v-212.229h20c11.0459 0 20 -8.9541 20 -20v-47.7715c0 -11.0459 -8.9541 -20 -20 -20h-152c-11.0459 0 -20 8.9541 -20 20v47.7715\n+c0 11.0459 8.9541 20 20 20zM96 448c39.7637 0 72 -32.2354 72 -72s-32.2354 -72 -72 -72s-72 32.2354 -72 72s32.2354 72 72 72z\" \u002F>\n+    \u003Cglyph glyph-name=\"exclamation\" unicode=\"&#xf12a;\" horiz-adv-x=\"192\" \n+d=\"M176 16c0 -44.1123 -35.8877 -80 -80 -80s-80 35.8877 -80 80s35.8877 80 80 80s80 -35.8877 80 -80zM25.2598 422.801c-0.68457 13.709 10.2441 25.1992 23.9707 25.1992h93.5391c13.7266 0 24.6553 -11.4902 23.9707 -25.1992l-13.6006 -272\n+c-0.638672 -12.7725 -11.1807 -22.8008 -23.9697 -22.8008h-66.3398c-12.7891 0 -23.3311 10.0283 -23.9697 22.8008z\" \u002F>\n+    \u003Cglyph glyph-name=\"superscript\" unicode=\"&#xf12b;\" \n+d=\"M496 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32\n+c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48\n+c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16\n+h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z\" \u002F>\n+    \u003Cglyph glyph-name=\"subscript\" unicode=\"&#xf12c;\" \n+d=\"M496 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v96h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32\n+c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-144h16zM336 384c8.83203 0 16 -7.16797 16 -16v-48c0 -8.83203 -7.16797 -16 -16 -16h-33.4805l-77.8096 -112l77.8096 -112h33.4805c8.83203 0 16 -7.16797 16 -16v-48\n+c0 -8.83203 -7.16797 -16 -16 -16h-67c-4.58984 0.0224609 -10.4404 3.10059 -13.0596 6.87012l-79.9004 115l-79.9004 -115c-2.63477 -3.79199 -8.52148 -6.87012 -13.1387 -6.87012h-0.000976562h-67c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16\n+h33.4805l77.8096 112l-77.8096 112h-33.4805c-8.83203 0 -16 7.16797 -16 16v48c0 8.83203 7.16797 16 16 16h67c4.58984 -0.0224609 10.4404 -3.10059 13.0596 -6.87012l79.9004 -115l79.9004 115c2.63477 3.79199 8.52148 6.87012 13.1387 6.87012h0.000976562h67z\" \u002F>\n+    \u003Cglyph glyph-name=\"eraser\" unicode=\"&#xf12d;\" \n+d=\"M497.941 174.059l-142.059 -142.059h144.117c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-356c-10.9756 0 -26.1816 6.29883 -33.9424 14.0586l-96 96c-18.7441 18.7451 -18.7441 49.1377 0 67.8828l256 256\n+c18.7471 18.7451 49.1387 18.7441 67.8838 0l160 -160c18.7441 -18.7451 18.7441 -49.1377 0 -67.8828zM195.314 236.686l-124.687 -124.686l80 -80h114.745l67.3135 67.3135z\" \u002F>\n+    \u003Cglyph glyph-name=\"puzzle-piece\" unicode=\"&#xf12e;\" horiz-adv-x=\"576\" \n+d=\"M519.442 159.349c37.5957 0 56.5576 -31.5928 56.5576 -65.792c0 -33.5469 -19.2881 -61.5566 -54.9229 -61.5557c-39.8848 0 -50.3457 36.1523 -86.3086 36.1523c-60.5518 0 -25.8262 -120.102 -25.8262 -120.102c-51.5557 0 -181.23 -35.0732 -181.23 25.7305\n+c0 35.8271 36.2881 46.25 36.2881 85.9844c0 35.501 -28.1152 54.7178 -61.7881 54.7178c-34.3271 0 -63.5771 -18.8906 -63.5771 -56.3467c0 -41.3633 40 -58.998 40 -81.4707c0 -69.709 -178.635 -28.6621 -178.635 -28.6621v333.237s175.885 -40.9609 175.884 28.6621\n+c0 22.4727 -31.7109 40.3857 -31.7109 81.75c0 37.4551 31.7119 56.3457 66.3662 56.3457c33.3457 0 61.4609 -19.2158 61.4609 -54.7178c0 -39.7354 -36.2881 -50.1582 -36.2881 -85.9854c0 -83.2969 196.288 -3.29688 196.288 -3.29688\n+s-54.5908 -176.244 5.38379 -176.244c22.5586 0 40.5391 31.5928 82.0586 31.5928z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone\" unicode=\"&#xf130;\" horiz-adv-x=\"352\" \n+d=\"M176 96c-53.0195 0 -96 42.9805 -96 96v160c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96v-160c0 -53.0195 -42.9805 -96 -96 -96zM336 256c8.83984 0 16 -7.16016 16 -16v-48c0 -88.9004 -66.29 -162.47 -152 -174.23v-33.7695h56c8.83984 0 16 -7.16016 16 -16v-16\n+c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v40.1602c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-42.2998\n+c0 -66.8105 48.71 -126.59 115.21 -133.08c76.2998 -7.44043 140.79 52.5801 140.79 127.38v48c0 8.83984 7.16016 16 16 16h16z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone-slash\" unicode=\"&#xf131;\" horiz-adv-x=\"640\" \n+d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\n+c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l178.54 -137.99v45.3604c0 53.0195 42.9805 96 96 96c53.0205 0 96 -42.9805 96 -96v-160.01c0 -10.4502 -2.17969 -20.2705 -5.2793 -29.6699l26.5498 -20.5205c6.75977 15.4004 10.7197 32.2803 10.7197 50.2002v48\n+c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-48c0 -29.0098 -7.38965 -56.1299 -19.9805 -80.1396zM400 -16c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56\n+v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v6.85059l52.0303 -40.2305c12.4395 -53.2197 55.3301 -96.4004 111.18 -101.85c6.94043 -0.669922 13.6396 -0.200195 20.3496 0.199219l50.1104 -38.7295c-10.8203 -3.77051 -22.0098 -6.70996 -33.6699 -8.31055\n+v-33.7695h56z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar\" unicode=\"&#xf133;\" horiz-adv-x=\"448\" \n+d=\"M12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM448 300c0 -6.59961 -5.40039 -12 -12 -12h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52\n+c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36z\" \u002F>\n+    \u003Cglyph glyph-name=\"fire-extinguisher\" unicode=\"&#xf134;\" horiz-adv-x=\"448\" \n+d=\"M434.027 421.671c7.31445 1.21875 13.9727 -4.4209 13.9727 -11.8369v-115.668c0 -7.41602 -6.6582 -13.0557 -13.9727 -11.8369l-168 28c-11.7305 1.95508 -10.0273 14.6973 -10.0273 17.6709h-40v-27.0303c41.4043 -10.6582 72 -48.2383 72 -92.9697v-248\n+c0 -13.2549 -10.7451 -24 -24 -24h-144c-13.2549 0 -24 10.7451 -24 24v246.795c0 44.8945 30.457 83.2666 72 94.1289v27.0762c-61.0361 0 -92.9424 7.00977 -121.711 -64.9141c-4.91699 -12.2949 -18.8789 -18.2959 -31.1963 -13.3701\n+c-12.3066 4.92285 -18.293 18.8906 -13.3701 31.1973c14.668 36.6709 38.0107 77.833 90.0498 90.8838c-14.1406 36.5273 12.793 76.2031 52.2275 76.2031c37.4463 0 64.3525 -36.1084 53.668 -72h58.332c0 4.2002 -1.30664 15.7822 10.0273 17.6709zM144 376\n+c8.82227 0 16 7.17773 16 16s-7.17773 16 -16 16s-16 -7.17773 -16 -16s7.17773 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"rocket\" unicode=\"&#xf135;\" \n+d=\"M505.05 428.9c6.9502 -32.2002 6.9502 -57.4004 6.85059 -82.6006c0 -102.689 -55.4102 -164.79 -128 -211.09v-104.41v-0.0400391c0 -16.3516 -11.8721 -35.5527 -26.5 -42.8594l-98.7002 -49.3906c-2.79004 -1.38965 -7.58398 -2.5166 -10.7002 -2.5166\n+c-13.248 0 -24 10.752 -24 24v0.00683594v103.84l-22.4697 -22.4697c-5.17383 -5.1748 -15.3125 -9.375 -22.6299 -9.375c-7.31836 0 -17.4561 4.2002 -22.6309 9.375l-50.8994 50.9102c-5.17285 5.17285 -9.37012 15.3096 -9.37012 22.625s4.19727 17.4512 9.37012 22.625\n+l22.4697 22.4697h-103.77h-0.0126953c-13.248 0 -24 10.752 -24 24c0 3.12012 1.12988 7.91797 2.52246 10.71l49.4199 98.7998c7.32324 14.6094 26.5283 26.4766 42.8701 26.4902h104.2c46.1895 72.7998 108.09 128 211.29 128c25.0996 0 50.29 0 82.4893 -6.90039\n+c5.54395 -1.19043 11.0098 -6.65527 12.2002 -12.1992zM384 280c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-circle-left\" unicode=\"&#xf137;\" \n+d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM142.1 175l135.5 -135.5c9.40039 -9.40039 24.6006 -9.40039 33.9004 0l17 17c9.40039 9.40039 9.40039 24.5996 0 33.9004l-101.6 101.6l101.6 101.6\n+c9.40039 9.40039 9.40039 24.6006 0 33.9004l-17 17c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-135.5 -135.5c-9.39941 -9.40039 -9.39941 -24.5996 0 -34z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-circle-right\" unicode=\"&#xf138;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM369.9 209l-135.5 135.5c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-17 -17c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l101.6 -101.6l-101.6 -101.6\n+c-9.40039 -9.40039 -9.40039 -24.6006 0 -33.9004l17 -17c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l135.5 135.5c9.39941 9.40039 9.39941 24.5996 0 34z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-circle-up\" unicode=\"&#xf139;\" \n+d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM239 305.9l-135.5 -135.5c-9.40039 -9.40039 -9.40039 -24.6006 0 -33.9004l17 -17c9.40039 -9.40039 24.5996 -9.40039 33.9004 0l101.6 101.6l101.6 -101.6\n+c9.40039 -9.40039 24.6006 -9.40039 33.9004 0l17 17c9.40039 9.40039 9.40039 24.5996 0 33.9004l-135.5 135.5c-9.40039 9.39941 -24.5996 9.39941 -34 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"chevron-circle-down\" unicode=\"&#xf13a;\" \n+d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM273 78.0996l135.5 135.5c9.40039 9.40039 9.40039 24.6006 0 33.9004l-17 17c-9.40039 9.40039 -24.5996 9.40039 -33.9004 0l-101.6 -101.6l-101.6 101.6\n+c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-17 -17c-9.40039 -9.40039 -9.40039 -24.5996 0 -33.9004l135.5 -135.5c9.40039 -9.39941 24.5996 -9.39941 34 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"anchor\" unicode=\"&#xf13d;\" horiz-adv-x=\"576\" \n+d=\"M12.9707 96c-10.6904 0 -16.0449 12.9258 -8.48535 20.4854l67.0283 67.0283c4.6875 4.68652 12.2852 4.68652 16.9717 0l67.0283 -67.0283c7.56055 -7.55957 2.20605 -20.4854 -8.48438 -20.4854h-35.1465c20.2969 -54.3359 85.1816 -86.6162 144.117 -94.0146v190.015\n+h-52c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h52v5.46973c-37.2842 13.1807 -64 48.7324 -64 90.5303c0 53.4746 43.7227 96.7393 97.3701 95.9902c52.2354 -0.728516 94.6348 -43.7627 94.6289 -96.002\n+c-0.00488281 -41.793 -26.7188 -77.3398 -64 -90.5186v-5.46973h52c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-52v-190.015c59.1543 7.42676 123.827 39.6973 144.117 94.0146h-35.1465c-10.6904 0 -16.0449 12.9248 -8.48438 20.4854\n+l67.0283 67.0283c4.6875 4.68652 12.2852 4.68652 16.9717 0l67.0283 -67.0283c7.56055 -7.55957 2.20605 -20.4854 -8.48438 -20.4854h-32.3945c-21.7822 -102.62 -136.406 -160 -242.635 -160c-106.056 0 -220.828 57.2646 -242.635 160h-32.3945zM288 384\n+c-17.6445 0 -32 -14.3555 -32 -32s14.3555 -32 32 -32s32 14.3555 32 32s-14.3555 32 -32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"unlock-alt\" unicode=\"&#xf13e;\" horiz-adv-x=\"448\" \n+d=\"M400 192c26.5 0 48 -21.5 48 -48v-160c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v160c0 26.5 21.5 48 48 48h24v102.5c0 84 67.5 153.2 151.5 153.5s152.5 -68 152.5 -152v-16c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v16\n+c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-103.1h248zM264 40v48c0 22.0996 -17.9004 40 -40 40s-40 -17.9004 -40 -40v-48c0 -22.0996 17.9004 -40 40 -40s40 17.9004 40 40z\" \u002F>\n+    \u003Cglyph glyph-name=\"bullseye\" unicode=\"&#xf140;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 8c101.71 0 184 82.3096 184 184c0 101.71 -82.3096 184 -184 184c-101.71 0 -184 -82.3096 -184 -184c0 -101.71 82.3096 -184 184 -184zM248 320\n+c70.6904 0 128 -57.3096 128 -128s-57.3096 -128 -128 -128s-128 57.3096 -128 128s57.3096 128 128 128zM248 128c35.29 0 64 28.71 64 64s-28.71 64 -64 64s-64 -28.71 -64 -64s28.71 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"ellipsis-h\" unicode=\"&#xf141;\" \n+d=\"M328 192c0 -39.7998 -32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72s72 -32.2002 72 -72zM432 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72zM80 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72\n+s-72 32.2002 -72 72s32.2002 72 72 72z\" \u002F>\n+    \u003Cglyph glyph-name=\"ellipsis-v\" unicode=\"&#xf142;\" horiz-adv-x=\"192\" \n+d=\"M96 264c39.7998 0 72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72s32.2002 72 72 72zM24 368c0 39.7998 32.2002 72 72 72s72 -32.2002 72 -72s-32.2002 -72 -72 -72s-72 32.2002 -72 72zM24 16c0 39.7998 32.2002 72 72 72s72 -32.2002 72 -72\n+s-32.2002 -72 -72 -72s-72 32.2002 -72 72z\" \u002F>\n+    \u003Cglyph glyph-name=\"rss-square\" unicode=\"&#xf143;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM112 32c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM269.533 32\n+c6.53516 0 11.7764 5.46777 11.4248 11.9941c-5.9668 110.428 -94.418 198.99 -204.964 204.964c-6.52637 0.351562 -11.9941 -4.88965 -11.9941 -11.4248v-34.335c0 -6.00977 4.63574 -11.0508 10.6328 -11.4414c79.8799 -5.20312 143.909 -69.0732 149.123 -149.123\n+c0.391602 -5.99805 5.43066 -10.6338 11.4424 -10.6338h34.335zM372.56 32c6.4541 0 11.6641 5.33789 11.4326 11.7871c-5.99512 167.014 -140.375 302.18 -308.205 308.205c-6.44922 0.231445 -11.7871 -4.97852 -11.7871 -11.4326v-34.334\n+c0 -6.16016 4.88184 -11.1748 11.0391 -11.4277c136.556 -5.59863 246.162 -115.225 251.76 -251.76c0.251953 -6.15625 5.2666 -11.0381 11.4268 -11.0381h34.334z\" \u002F>\n+    \u003Cglyph glyph-name=\"play-circle\" unicode=\"&#xf144;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM371.7 168c16.3994 9.09961 16.3994 32.7998 0 42l-176 107c-15.9004 8.7998 -35.7002 -2.59961 -35.7002 -21v-208c0 -18.5 19.9004 -29.7998 35.7002 -21z\" \u002F>\n+    \u003Cglyph glyph-name=\"minus-square\" unicode=\"&#xf146;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM92 152h264c6.59961 0 12 5.40039 12 12v56c0 6.59961 -5.40039 12 -12 12h-264c-6.59961 0 -12 -5.40039 -12 -12v-56\n+c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"check-square\" unicode=\"&#xf14a;\" horiz-adv-x=\"448\" \n+d=\"M400 -32h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM195.314 66.0586l184 184c6.24707 6.24805 6.24707 16.3799 0 22.627l-22.6279 22.6279\n+c-6.24707 6.24707 -16.3789 6.24805 -22.6279 0l-150.059 -150.059l-70.0586 70.0596c-6.24805 6.24707 -16.3799 6.24707 -22.6279 0l-22.6279 -22.6279c-6.24707 -6.24707 -6.24707 -16.3789 0 -22.627l104 -104c6.24902 -6.25 16.3799 -6.25 22.6289 -0.000976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"pen-square\" unicode=\"&#xf14b;\" horiz-adv-x=\"448\" \n+d=\"M400 -32h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48zM238.1 270.1l-135.699 -135.699l-6.30078 -57.1006c-0.799805 -7.59961 5.60059 -14.0996 13.3008 -13.2998l57.0996 6.2998l135.7 135.7\n+c2.2998 2.2998 2.2998 6.09961 0 8.5l-55.5 55.5c-2.5 2.40039 -6.2998 2.40039 -8.60059 0.0996094zM345 282.9l-30.0996 30.0996c-9.40039 9.40039 -24.6006 9.40039 -33.9004 0l-23.0996 -23.0996c-2.30078 -2.30078 -2.30078 -6.10059 0 -8.5l55.5 -55.5\n+c2.2998 -2.30078 6.09961 -2.30078 8.5 0l23.0996 23.0996c9.2998 9.2998 9.2998 24.5 0 33.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"share-square\" unicode=\"&#xf14d;\" horiz-adv-x=\"576\" \n+d=\"M568.482 270.552l-144.004 -135.984c-15.1787 -14.335 -40.4785 -3.70703 -40.4785 17.4473v71.9629c-144.575 -0.969727 -205.566 -35.1123 -164.775 -171.353c4.4834 -14.9727 -12.8457 -26.5674 -25.0059 -17.3301\n+c-38.9668 29.5996 -74.2188 86.2168 -74.2188 143.366c0 143.937 117.599 172.5 264 173.312v72.0156c0 21.1738 25.3174 31.7676 40.4785 17.4473l144.004 -135.987c10.0195 -9.46289 10.0273 -25.4248 0 -34.8965zM384 68.8721c0 7.34473 6.53027 12.9053 13.7998 11.8594\n+c2.81152 -0.405273 7.39844 -0.734375 10.2393 -0.734375c6.80469 0 17.5342 1.8418 23.9502 4.11133c7.81348 2.76367 16.0107 -3.01465 16.0107 -11.3027v-88.8057c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48\n+h121.033c12.5508 0 16.6748 -16.8301 5.54492 -22.6309c-18.7773 -9.78613 -36.0615 -22.1084 -51.0137 -37.6758c-1.95312 -2.03711 -5.82715 -3.69141 -8.64844 -3.69336h-50.916v-320h320v68.8721z\" \u002F>\n+    \u003Cglyph glyph-name=\"compass\" unicode=\"&#xf14e;\" horiz-adv-x=\"496\" \n+d=\"M225.38 214.63c12.4902 12.4902 32.75 12.4902 45.25 0s12.5 -32.75 0 -45.25c-12.4902 -12.5 -32.7598 -12.5 -45.25 0c-12.5 12.4902 -12.5 32.75 0 45.25zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248z\n+M374.14 291.95c7.61035 16.6494 -9.54004 33.7998 -26.1895 26.2002l-144.34 -65.9707c-5.97461 -2.73047 -13.04 -9.7959 -15.7705 -15.7695l-65.9795 -144.351c-7.61035 -16.6494 9.5498 -33.8096 26.1992 -26.1992l144.341 65.9697\n+c5.97363 2.73047 13.0391 9.7959 15.7695 15.7695z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-down\" unicode=\"&#xf150;\" horiz-adv-x=\"448\" \n+d=\"M448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48zM92.5 227.5l123 -123c4.7002 -4.7002 12.2998 -4.7002 17 0l123 123c7.59961 7.59961 2.2002 20.5 -8.5 20.5h-246\n+c-10.7002 0 -16.0996 -12.9004 -8.5 -20.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-up\" unicode=\"&#xf151;\" horiz-adv-x=\"448\" \n+d=\"M0 16v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48zM355.515 156.485l-123.029 123.029c-4.68652 4.68652 -12.2842 4.68652 -16.9717 0l-123.028 -123.029\n+c-7.56055 -7.56055 -2.20605 -20.4854 8.48438 -20.4854h246.06c10.6904 0 16.0449 12.9258 8.48535 20.4854z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-right\" unicode=\"&#xf152;\" horiz-adv-x=\"448\" \n+d=\"M48 416h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48zM188.485 60.4854l123.028 123.028c4.68652 4.68652 4.68652 12.2842 0 16.9717l-123.028 123.029\n+c-7.56055 7.56055 -20.4854 2.20605 -20.4854 -8.48438v-246.06c0 -10.6904 12.9258 -16.0449 20.4854 -8.48535z\" \u002F>\n+    \u003Cglyph glyph-name=\"euro-sign\" unicode=\"&#xf153;\" horiz-adv-x=\"320\" \n+d=\"M310.706 34.2354l8.81836 -44.4902c1.23828 -6.24902 -2.62109 -12.3623 -8.78809 -13.957c-12.5391 -3.24414 -34.8008 -7.78809 -61.1016 -7.78809c-104.371 0 -182.496 65.3076 -207.521 155.64h-30.1143c-6.62695 0 -12 5.37305 -12 12v28.3604\n+c0 6.62695 5.37305 12 12 12h21.3877c-1 12.958 -0.828125 28.6377 0.181641 42.2451h-21.5693c-6.62695 0 -12 5.37305 -12 12v29.7549c0 6.62695 5.37305 12 12 12h33.0752c28.9551 83.748 107.376 144 204.56 144c21.0752 0 40.582 -2.91211 52.6865 -5.20703\n+c6.86035 -1.30078 11.1475 -8.17578 9.32617 -14.917l-11.9912 -44.3682c-1.65527 -6.125 -7.78613 -9.89062 -14.002 -8.62305c-9.28711 1.89551 -23.3652 4.14551 -37.8516 4.14551c-54.9287 0 -96.9854 -30.0391 -117.619 -75.0303h138.278\n+c7.66211 0 13.3613 -7.08203 11.7227 -14.5664l-6.51172 -29.7549c-1.13965 -5.20703 -6.3916 -9.43359 -11.7227 -9.43359v0h-146.593c-1.55176 -13.958 -1.34766 -27.917 -0.137695 -42.2451h134.237c7.68945 0 13.3936 -7.12891 11.708 -14.6309l-6.37305 -28.3604\n+c-1.16211 -5.17188 -6.40723 -9.36914 -11.708 -9.36914h-113.689c19.5322 -50.6582 64.6982 -85.4482 121.462 -85.4482c18.0039 0 34.7334 2.97363 45.4258 5.41211c6.58887 1.50391 13.1094 -2.73828 14.4238 -9.36816z\" \u002F>\n+    \u003Cglyph glyph-name=\"pound-sign\" unicode=\"&#xf154;\" horiz-adv-x=\"320\" \n+d=\"M308 96c6.62695 0 12 -5.37305 12 -12v-104c0 -6.62695 -5.37305 -12 -12 -12h-296c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h36v128h-28c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h28v66.0391\n+c0 73.2188 58.0264 125.961 139.931 125.961c48.6455 0 85.1934 -22.5596 101.575 -34.9277c5.39844 -4.07617 6.35254 -11.8057 2.11914 -17.0811l-28.4932 -35.5137c-3.7998 -4.73535 -10.5371 -5.89746 -15.6875 -2.68457\n+c-11.7744 7.34375 -33.9941 18.8486 -57.6523 18.8486c-37.2305 0 -61.792 -24.8193 -61.792 -57.0859v-63.5557h84c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-84v-126.848h122.505v50.8477c0 6.62695 5.37305 12 12 12h45.4951z\" \u002F>\n+    \u003Cglyph glyph-name=\"dollar-sign\" unicode=\"&#xf155;\" horiz-adv-x=\"288\" \n+d=\"M209.2 214.6c57.8994 -16.8994 94 -80.0996 72.5 -141.699c-15.4004 -44.1006 -59.1006 -71.8008 -105.7 -72.7002v-48.2002c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v48c-31.4004 0.0996094 -62 10.7998 -86.5 30\n+c-7.90039 6.09961 -8.90039 17.5996 -1.7998 24.5l34.7998 34c5.2002 5.09961 13.4004 6.09961 19.5 2c10 -6.7998 22 -10.5 34.2002 -10.5h66.2998c16.2998 0 29.5 13.2002 29.5 29.5c0 13 -8.7002 24.5996 -21.2002 28.2998l-102.5 30\n+c-44.3994 13 -79.5996 50.5 -83.7998 96.6006c-5.90039 64.8994 45.2998 119.6 109 119.6h2.5v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48c31.4004 -0.0996094 62 -10.7998 86.5 -30c7.90039 -6.09961 8.90039 -17.5996 1.7998 -24.5l-34.7998 -34\n+c-5.2002 -5.09961 -13.4004 -6.09961 -19.5 -2c-10 6.7998 -22 10.5 -34.2002 10.5h-66.2998c-16.2998 0 -29.5 -13.2002 -29.5 -29.5c0 -13 8.7002 -24.7002 21.2002 -28.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"rupee-sign\" unicode=\"&#xf156;\" horiz-adv-x=\"320\" \n+d=\"M308 352h-72.9424c5.97266 -9.75391 10.7666 -20.459 14.252 -32h58.6904c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-52.8105c-7.1748 -74.5107 -61.8193 -125.566 -138.318 -127.906l150.882 -139.275\n+c8.02734 -7.41016 2.78516 -20.8184 -8.13867 -20.8184h-82.5625c-2.58984 0 -6.23535 1.42578 -8.13867 3.18164l-165.052 152.356c-2.46094 2.27148 -3.86133 5.46875 -3.86133 8.81836v53.0117c0 6.62695 5.37305 12 12 12h84c41.7959 0 68.54 22.5459 74.7568 58.6318\n+h-158.757c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h146.25c-12.709 17.2939 -33.6621 27.252 -60.9697 27.252h-85.2803c-6.62695 0 -12 5.37305 -12 12v44.748c0 6.62695 5.37305 12 12 12h296c6.62695 0 12 -5.37305 12 -12v-40\n+c0 -6.62695 -5.37305 -12 -12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"yen-sign\" unicode=\"&#xf157;\" horiz-adv-x=\"384\" \n+d=\"M351.2 416c9.09961 0 14.8994 -9.7002 10.5996 -17.5996l-80.0996 -150.4h58.2998c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12h-88.2002l-19.7998 -37.2002v-26.7998h108c6.59961 0 12 -5.40039 12 -12v-32c0 -6.59961 -5.40039 -12 -12 -12\n+h-108v-92c0 -6.59961 -5.40039 -12 -12 -12h-56c-6.59961 0 -12 5.40039 -12 12v92h-108c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h108v26.7998l-19.7998 37.2002h-88.2002c-6.59961 0 -12 5.40039 -12 12v32c0 6.59961 5.40039 12 12 12h58.2998\n+l-80.0996 150.4c-4.2002 7.89941 1.5 17.5996 10.5996 17.5996h65.2002c4.59961 0 8.7998 -2.59961 10.7998 -6.7002l55.4004 -113.2c14.5 -34.6992 27.0996 -71.8994 27.0996 -71.8994h1.2998s12.6006 37.2002 27.1006 71.8994l55.3994 113.2\n+c2 4.10059 6.2002 6.7002 10.8008 6.7002h65.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"ruble-sign\" unicode=\"&#xf158;\" horiz-adv-x=\"384\" \n+d=\"M239.36 128h-92.8008v-32h161.44c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-161.44v-52c0 -6.62695 -5.37305 -12 -12 -12h-58.5596c-6.62695 0 -12 5.37305 -12 12v52h-52c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h52\n+v32h-52c-6.62695 0 -12 5.37305 -12 12v45.3682c0 6.62695 5.37305 12 12 12h52v206.632c0 6.62695 5.37305 12 12 12h163.36c85.1201 0 144.64 -57.5996 144.64 -143.071c0 -85.4707 -59.5195 -144.929 -144.64 -144.929zM146.56 347.252v-149.884h77.4404\n+c48 0 76.1602 29.7285 76.1602 75.5605c0 45.2129 -28.1602 74.3232 -74.8799 74.3232h-78.7207z\" \u002F>\n+    \u003Cglyph glyph-name=\"won-sign\" unicode=\"&#xf159;\" horiz-adv-x=\"576\" \n+d=\"M564 256h-62.7002l-7.39941 -32h70.0996c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84.9004l-42.0996 -182.7c-1.2998 -5.39941 -6.09961 -9.2998 -11.7002 -9.2998h-56.7998c-5.59961 0 -10.4004 3.90039 -11.7002 9.2998l-42.3994 182.7\n+h-55.1006l-42.2998 -182.7c-1.2998 -5.39941 -6.09961 -9.2998 -11.7002 -9.2998h-56.7998c-5.59961 0 -10.5 3.90039 -11.7002 9.40039l-40.8994 182.6h-83.9004c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h69.5l-7.2002 32h-62.2998\n+c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h48l-18.0996 80.7002c-1.7002 7.5 4 14.5996 11.6992 14.5996h42.1006c5.7002 0 10.7002 -4 11.7998 -9.59961l17.5 -85.7002h108.7l20 86c1.2998 5.5 6.09961 9.2998 11.7002 9.2998h44\n+c5.59961 0 10.3994 -3.7998 11.6992 -9.2998l19.7002 -86h109.9l14.3994 85.7998c1.10059 5.5 6 9.5 11.7002 9.5h46.1006c7.69922 0 13.3994 -7.2002 11.6992 -14.7002l-18.5996 -80.5996h48c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM183.8 106\n+l12.6006 54h-38.8008l11 -54c5.10059 -25.2002 6.80078 -47.2002 6.80078 -47.2002h1.09961c0.5 0 1.09961 21.4004 7.2998 47.2002zM211.3 224l7.5 32h-80.7998l6.5 -32h66.7998zM274.2 224h25.3994l-2 8.59961c-1.89941 8 -3.5 16 -4.7998 23.4004h-11.7998\n+c-1.2998 -7.40039 -2.90039 -15.4004 -4.7998 -23.4004zM405.1 106l11.5 54h-39.0996l12.4004 -54c6.19922 -25.7998 6.69922 -47.2002 7.2998 -47.2002h1.09961s1.7002 22 6.7998 47.2002zM430.3 224l6.90039 32h-81.6006l7.30078 -32h67.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"file\" unicode=\"&#xf15b;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98\n+c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-alt\" unicode=\"&#xf15c;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM288 76v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8\n+c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 140v8c0 6.59961 -5.40039 12 -12 12h-168c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12zM288 212c0 6.59961 -5.40039 12 -12 12h-168\n+c-6.59961 0 -12 -5.40039 -12 -12v-8c0 -6.59961 5.40039 -12 12 -12h168c6.59961 0 12 5.40039 12 12v8zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-alpha-down\" unicode=\"&#xf15d;\" horiz-adv-x=\"448\" \n+d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\n+c8.83203 0 16 -7.16797 16 -16v-304h48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128\n+c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\n+c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\n+c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793\n+l-16.3896 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-alpha-up\" unicode=\"&#xf15e;\" horiz-adv-x=\"448\" \n+d=\"M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v304h-48zM416 160c8.83203 0 16 -7.16797 16 -16v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128\n+c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM447.06 245.38c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\n+c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\n+c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 304h32.7793\n+l-16.3896 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-amount-down\" unicode=\"&#xf160;\" \n+d=\"M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96\n+c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48zM432 288\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-amount-up\" unicode=\"&#xf161;\" \n+d=\"M304 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64zM16 288c-14.2305 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262\n+s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48zM432 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16\n+h-192c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192zM368 160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128zM496 416c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-numeric-down\" unicode=\"&#xf162;\" horiz-adv-x=\"448\" \n+d=\"M304 352c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM330.15 189.09c53.4502 14.25 101.85 -25.8799 101.869 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132\n+c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8496 102.53c6.80762 23.4512 31.4473 47.7197 55 54.1699z\n+M352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262\n+l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-numeric-up\" unicode=\"&#xf163;\" horiz-adv-x=\"448\" \n+d=\"M330.17 189.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.24 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408\n+c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 92c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20zM304 352\n+c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16zM107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48\n+c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs-up\" unicode=\"&#xf164;\" \n+d=\"M104 224c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240c0 13.2549 10.7451 24 24 24h80zM64 -24c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM384 366.548\n+c0 -42.416 -25.9697 -66.208 -33.2773 -94.5479h101.724c33.3965 0 59.3965 -27.7461 59.5527 -58.0977c0.0839844 -17.9385 -7.5459 -37.249 -19.4395 -49.1973l-0.109375 -0.110352c9.83594 -23.3369 8.23633 -56.0371 -9.30859 -79.4688\n+c8.68164 -25.8945 -0.0683594 -57.7041 -16.3818 -74.7568c4.29785 -17.5977 2.24414 -32.5752 -6.14746 -44.6318c-20.4102 -29.3242 -70.9961 -29.7373 -113.773 -29.7373l-2.84473 0.000976562c-48.2871 0.0166016 -87.8057 17.5977 -119.561 31.7246\n+c-15.957 7.09961 -36.8203 15.8877 -52.6504 16.1787c-6.54004 0.120117 -11.7832 5.45703 -11.7832 11.998v213.77c0 3.2002 1.28223 6.27148 3.55762 8.52148c39.6143 39.1436 56.6484 80.5869 89.1172 113.11c14.8037 14.832 20.1885 37.2363 25.3936 58.9023\n+c4.44629 18.501 13.749 57.7939 33.9316 57.7939c24 0 72 -8 72 -81.4521z\" \u002F>\n+    \u003Cglyph glyph-name=\"thumbs-down\" unicode=\"&#xf165;\" \n+d=\"M0 392c0 13.2549 10.7451 24 24 24h80c13.2549 0 24 -10.7451 24 -24v-240c0 -13.2549 -10.7451 -24 -24 -24h-80c-13.2549 0 -24 10.7451 -24 24v240zM40 192c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24zM312 -64\n+c-20.1826 0 -29.4854 39.293 -33.9307 57.7949c-5.20605 21.666 -10.5889 44.0703 -25.3936 58.9023c-32.4688 32.5234 -49.5029 73.9668 -89.1172 113.11c-1.96387 1.94141 -3.55762 5.75879 -3.55762 8.52051v0.000976562v213.77\n+c0 6.54102 5.24316 11.8779 11.7832 11.998c15.8311 0.290039 36.6934 9.0791 52.6504 16.1787c31.7549 14.127 71.2744 31.708 119.561 31.7246h2.84375c42.7773 0 93.3633 -0.413086 113.774 -29.7373c8.3916 -12.0566 10.4453 -27.0342 6.14746 -44.6318\n+c16.3125 -17.0527 25.0635 -48.8633 16.3818 -74.7568c17.5439 -23.4316 19.1436 -56.1318 9.30859 -79.4688l0.109375 -0.110352c11.8936 -11.9492 19.5234 -31.2588 19.4395 -49.1973c-0.15625 -30.3516 -26.1572 -58.0977 -59.5527 -58.0977h-101.725\n+c7.30762 -28.3398 33.2773 -52.1318 33.2773 -94.5479c0 -73.4521 -48 -81.4521 -72 -81.4521z\" \u002F>\n+    \u003Cglyph glyph-name=\"female\" unicode=\"&#xf182;\" horiz-adv-x=\"256\" \n+d=\"M128 448c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM247.283 93.8213c3.78809 -15.1504 -7.69238 -29.8213 -23.2832 -29.8213h-56v-104c0 -13.2549 -10.7451 -24 -24 -24h-32c-13.2549 0 -24 10.7451 -24 24v104h-56\n+c-15.6172 0 -27.0654 14.6953 -23.2832 29.8213l48 192c2.50879 10.0342 12.9395 18.1787 23.2832 18.1787h11.3604c23.6895 -10.8936 50.5684 -10.4434 73.2793 0h11.3604c10.3438 0 20.7744 -8.14453 23.2832 -18.1787z\" \u002F>\n+    \u003Cglyph glyph-name=\"male\" unicode=\"&#xf183;\" horiz-adv-x=\"192\" \n+d=\"M96 448c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM144 304c26.5098 0 48 -21.4902 48 -48v-136c0 -13.2549 -10.7451 -24 -24 -24h-16v-136c0 -13.2549 -10.7451 -24 -24 -24h-64c-13.2549 0 -24 10.7451 -24 24v136h-16\n+c-13.2549 0 -24 10.7451 -24 24v136c0 26.5098 21.4902 48 48 48h11.3604c23.6895 -10.8936 50.5684 -10.4434 73.2793 0h11.3604z\" \u002F>\n+    \u003Cglyph glyph-name=\"sun\" unicode=\"&#xf185;\" \n+d=\"M256 288c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM502.4 207.5c12.7998 -6.40039 12.7998 -24.5996 -0.200195 -31.0996l-94.7002 -47.3008l33.5 -100.399c4.59961 -13.5 -8.2998 -26.4004 -21.9004 -21.9004\n+l-100.399 33.5l-47.2998 -94.7002c-6.40039 -12.7998 -24.6006 -12.7998 -31 0l-47.3008 94.7002l-100.399 -33.5c-13.5 -4.59961 -26.4004 8.2998 -21.9004 21.9004l33.5 100.5l-94.7002 47.2998c-12.7998 6.40039 -12.7998 24.5996 0 31l94.7002 47.4004l-33.5 100.399\n+c-4.59961 13.5 8.2998 26.4004 21.9004 21.9004l100.5 -33.5l47.2998 94.7002c6.40039 12.7998 24.5996 12.7998 31 0l47.4004 -94.8008l100.399 33.5c13.5 4.60059 26.4004 -8.2998 21.9004 -21.8994l-33.5 -100.4zM346.5 101.5c49.9004 49.9004 49.9004 131.1 0 181\n+s-131.1 49.9004 -181 0s-49.9004 -131.1 0 -181s131.1 -49.9004 181 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"moon\" unicode=\"&#xf186;\" \n+d=\"M283.211 -64c-141.489 0 -256 114.691 -256 256c0 141.489 114.691 256 256 256c13.0176 -0.00195312 33.9727 -1.91895 46.7754 -4.28027c11.0059 -2.0332 13.4414 -16.7178 3.75586 -22.2295c-62.8359 -35.7588 -101.498 -102.172 -101.498 -174.395\n+c0 -125.378 114.059 -220.607 238.262 -196.954c10.9229 2.08008 18.6299 -10.6416 11.5625 -19.3496c-47.7783 -58.8672 -119.896 -94.792 -198.857 -94.792z\" \u002F>\n+    \u003Cglyph glyph-name=\"archive\" unicode=\"&#xf187;\" \n+d=\"M32 0v288h448v-288c0 -17.7002 -14.2998 -32 -32 -32h-384c-17.7002 0 -32 14.2998 -32 32zM192 212v-8c0 -6.59961 5.40039 -12 12 -12h104c6.59961 0 12 5.40039 12 12v8c0 6.59961 -5.40039 12 -12 12h-104c-6.59961 0 -12 -5.40039 -12 -12zM480 416\n+c17.7002 0 32 -14.2998 32 -32v-48c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v48c0 17.7002 14.2998 32 32 32h448z\" \u002F>\n+    \u003Cglyph glyph-name=\"bug\" unicode=\"&#xf188;\" \n+d=\"M511.988 159.1c-0.478516 -17.4297 -15.2168 -31.0996 -32.6533 -31.0996h-55.335v-16c0 -21.8643 -4.88184 -42.584 -13.5996 -61.1445l60.2275 -60.2285c12.4961 -12.4971 12.4961 -32.7578 0 -45.2549c-12.498 -12.4971 -32.7588 -12.4961 -45.2559 0\n+l-54.7363 54.7363c-24.75 -20.0732 -56.2852 -32.1084 -90.6357 -32.1084v244c0 6.62695 -5.37305 12 -12 12h-24c-6.62695 0 -12 -5.37305 -12 -12v-244c-34.3506 0 -65.8857 12.0352 -90.6357 32.1084l-54.7363 -54.7363c-12.498 -12.4971 -32.7588 -12.4961 -45.2559 0\n+c-12.4961 12.4971 -12.4961 32.7578 0 45.2549l60.2275 60.2285c-8.71777 18.5605 -13.5996 39.2803 -13.5996 61.1445v16h-55.334c-17.4355 0 -32.1748 13.6699 -32.6533 31.0996c-0.49707 18.084 14.0156 32.9004 31.9873 32.9004h56v58.7451l-46.6279 46.6279\n+c-12.4961 12.4971 -12.4961 32.7578 0 45.2549c12.498 12.4971 32.7578 12.4971 45.2559 0l54.627 -54.6279h229.489l54.627 54.627c12.498 12.4971 32.7578 12.4971 45.2559 0c12.4961 -12.4971 12.4961 -32.7578 0 -45.2549l-46.627 -46.627v-58.7451h56\n+c17.9717 0 32.4844 -14.8164 31.9883 -32.9004zM257 448c61.8564 0 112 -50.1436 112 -112h-224c0 61.8564 50.1436 112 112 112z\" \u002F>\n+    \u003Cglyph glyph-name=\"caret-square-left\" unicode=\"&#xf191;\" horiz-adv-x=\"448\" \n+d=\"M400 -32h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48zM259.515 323.515l-123.029 -123.029c-4.68652 -4.68652 -4.68652 -12.2842 0 -16.9717l123.028 -123.028\n+c7.56055 -7.56055 20.4854 -2.20605 20.4854 8.48438v246.06c0.000976562 10.6904 -12.9248 16.0449 -20.4844 8.48535z\" \u002F>\n+    \u003Cglyph glyph-name=\"dot-circle\" unicode=\"&#xf192;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM336 192c0 44.1123 -35.8877 80 -80 80s-80 -35.8877 -80 -80s35.8877 -80 80 -80s80 35.8877 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"wheelchair\" unicode=\"&#xf193;\" \n+d=\"M496.101 62.3311l14.2275 -28.6631c3.92871 -7.91504 0.697266 -17.5156 -7.21777 -21.4453l-65.4658 -32.8857c-16.0488 -7.9668 -35.5557 -1.19434 -43.1885 15.0547l-62.7773 133.608h-139.679c-15.9248 0 -29.4258 11.71 -31.6787 27.4746\n+c-33.8887 237.218 -31.9414 222.481 -32.3213 228.525c0 36.3584 30.3184 65.6348 67.0518 63.9287c33.2715 -1.54492 60.0479 -28.9043 60.9248 -62.2012c0.868164 -32.9326 -23.1514 -60.4229 -54.6074 -65.0381l4.66992 -32.6904h129.961c8.83691 0 16 -7.16309 16 -16\n+v-32c0 -8.83691 -7.16309 -16 -16 -16h-120.818l4.57227 -32h132.246c11.2168 0 24.1924 -8.24023 28.9619 -18.3916l57.5146 -122.407l36.1787 18.3486c7.91504 3.92871 17.5166 0.697266 21.4453 -7.21777zM311.358 96l25.752 -54.8076\n+c-27.3047 -61.8848 -89.2402 -105.192 -161.11 -105.192c-97.0469 0 -176 78.9531 -176 176c0 74.0371 45.9561 137.536 110.836 163.489c2.64453 -18.4736 5.77637 -40.3682 9.48828 -66.333c-33.6299 -19.3477 -56.3242 -55.6514 -56.3242 -97.1562\n+c0 -61.7568 50.2432 -112 112 -112c56.3242 0 103.064 41.7959 110.852 96h24.5068z\" \u002F>\n+    \u003Cglyph glyph-name=\"lira-sign\" unicode=\"&#xf195;\" horiz-adv-x=\"384\" \n+d=\"M371.994 192c6.78613 0 12.2578 -5.62598 11.9971 -12.4082c-5.15332 -133.758 -94.3174 -211.592 -228.408 -211.592h-79.583c-6.62695 0 -12 5.37305 -12 12v193.442l-49.3975 -10.9775c-7.49316 -1.66602 -14.6025 4.03711 -14.6025 11.7139v40.9766\n+c0 5.31348 4.20996 10.5615 9.39746 11.7139l54.6025 12.1338v30.4395l-49.3975 -10.9775c-7.49316 -1.66602 -14.6025 4.03711 -14.6025 11.7139v40.9766c0 5.31348 4.20996 10.5615 9.39746 11.7139l54.6025 12.1338v68.9971c0 6.62695 5.37305 12 12 12h56\n+c6.62695 0 12 -5.37305 12 -12v-51.2188l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139v-40.9756c0 -5.31348 -4.20996 -10.5615 -9.39746 -11.7139l-134.603 -29.9121v-30.4385l129.397 28.7539c7.49316 1.66602 14.6025 -4.03711 14.6025 -11.7139\n+v-40.9766c0 -5.31348 -4.20996 -10.5615 -9.39746 -11.7139l-134.603 -29.9121v-159.219c86.1787 0 168 48 168 148.754c0 6.33398 5.63965 11.2461 11.9746 11.2461h48.0195z\" \u002F>\n+    \u003Cglyph glyph-name=\"space-shuttle\" unicode=\"&#xf197;\" horiz-adv-x=\"640\" \n+d=\"M592.604 239.756c29.6787 -13.9111 47.3965 -31.7637 47.3965 -47.7559s-17.7178 -33.8447 -47.3965 -47.7559c-32.8682 -15.4082 -76.8262 -24.2441 -120.604 -24.2441h-285.674c-4.95215 -6.55469 -10.585 -11.9775 -16.7197 -16h206.394\n+c-146.843 -30.2529 -156.597 -136 -279.997 -136h-0.00292969v128h-16v-128c-26.5098 0 -48 28.6543 -48 64v64c-23.1807 0 -32 10.0166 -32 24v40c0 13.9678 8.80273 24 32 24v16c-23.1807 0 -32 10.0166 -32 24v40c0 13.9678 8.80273 24 32 24v64\n+c0 35.3457 21.4902 64 48 64v-128h16v128h0.00292969c123.4 0 133.154 -105.747 279.997 -136h-206.393c6.13477 -4.02246 11.7676 -9.44531 16.7197 -16h285.673c43.7773 0 87.7354 -8.83594 120.604 -24.2441zM488 152c31.9424 0 31.9092 80 0 80\n+c-4.41602 0 -8 -3.58398 -8 -8v-64c0 -4.41602 3.58398 -8 8 -8z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope-square\" unicode=\"&#xf199;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5098 0 48 -21.4902 48 -48v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352zM178.117 185.896c10.5156 -7.66895 31.3799 -26.1133 45.8828 -25.8955\n+c14.4912 -0.225586 35.3828 18.2393 45.8828 25.8936c90.6836 65.8145 89.7461 65.9697 114.117 84.9385v25.167c0 13.2549 -10.7451 24 -24 24h-272c-13.2549 0 -24 -10.7451 -24 -24v-25.167c24.3525 -18.9541 23.4287 -19.1201 114.117 -84.9365zM384 230.225\n+c-13.958 -10.793 -33.3252 -25.2334 -95.2832 -70.1982c-13.6826 -9.98438 -37.833 -32.1592 -64.7197 -32.0254c-26.7188 -0.134766 -50.5322 21.6689 -64.6943 32.0098c-61.9736 44.9785 -81.3447 59.4199 -95.3027 70.2139v-142.225c0 -13.2549 10.7451 -24 24 -24h272\n+c13.2549 0 24 10.7451 24 24v142.225z\" \u002F>\n+    \u003Cglyph glyph-name=\"university\" unicode=\"&#xf19c;\" \n+d=\"M496 320v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-12c0 -6.62695 -5.37305 -12 -12 -12h-392c-6.62695 0 -12 5.37305 -12 12v12h-24c-4.41602 0 -8 3.58398 -8 8v16c0 2.95215 2.21387 6.26367 4.94141 7.3916l232 88\n+c0.810547 0.335938 2.18066 0.608398 3.05859 0.608398s2.24805 -0.272461 3.05859 -0.608398l232 -88c2.72754 -1.12793 4.94141 -4.43945 4.94141 -7.3916zM472 16c13.2549 0 24 -10.7451 24 -24v-16c0 -4.41602 -3.58398 -8 -8 -8h-464c-4.41602 0 -8 3.58398 -8 8v16\n+c0 13.2549 10.7451 24 24 24h432zM96 256h64v-192h64v192h64v-192h64v192h64v-192h36c6.62695 0 12 -5.37305 12 -12v-20h-416v20c0 6.62695 5.37305 12 12 12h36v192z\" \u002F>\n+    \u003Cglyph glyph-name=\"graduation-cap\" unicode=\"&#xf19d;\" horiz-adv-x=\"640\" \n+d=\"M622.34 294.8c23.5498 -7.24023 23.5498 -38.3594 0 -45.5996l-278.95 -85.7002c-20.3496 -6.25 -37.7295 -2.78027 -46.79 0l-195.569 60.0898c-12.25 -8.41992 -19.9307 -21.7002 -20.6904 -36.7197c9.19043 -5.62012 15.6602 -15.2998 15.6602 -26.8701\n+c0 -10.7803 -5.67969 -19.8496 -13.8604 -25.6504l25.5303 -114.88c2.21973 -9.98926 -5.37988 -19.4697 -15.6201 -19.4697h-56.1094c-10.2305 0 -17.8301 9.48047 -15.6104 19.4697l25.5303 114.88c-8.18066 5.80078 -13.8604 14.8701 -13.8604 25.6504\n+c0 11.8896 6.78027 21.8496 16.4102 27.3701c0.649414 17.6201 7.20996 33.71 17.8799 46.8994l-48.6299 14.9404c-23.54 7.23047 -23.54 38.3604 0 45.5898l278.95 85.7002c15.1895 4.66992 31.5898 4.66992 46.79 0zM352.79 132.91l145.03 44.5596l14.1797 -113.47\n+c0 -35.3496 -85.96 -64 -192 -64s-192 28.6504 -192 64l14.1797 113.46l145.021 -44.5498c12.75 -3.91992 37.0596 -8.75977 65.5898 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"language\" unicode=\"&#xf1ab;\" horiz-adv-x=\"640\" \n+d=\"M152.1 211.8l10.9004 -37.5h-38.0996l11.0996 37.5c3.5 12.1006 7.7998 33.2002 7.7998 33.2002h0.5s4.2998 -21.0996 7.7998 -33.2002zM616 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-280v320h280zM592 232v16\n+c0 6.59961 -5.40039 12 -12 12h-64v16c0 6.59961 -5.40039 12 -12 12h-16c-6.59961 0 -12 -5.40039 -12 -12v-16h-64c-6.59961 0 -12 -5.40039 -12 -12v-16c0 -6.59961 5.40039 -12 12 -12h114.3c-6.2002 -14.2998 -16.5 -29 -30 -43.2002\n+c-6.59961 6.90039 -12.3994 13.9004 -17.3994 20.9004c-3.60059 5.09961 -10.6006 6.59961 -16 3.39941l-7.30078 -4.2998l-6.5 -3.89941c-5.89941 -3.5 -7.69922 -11.4004 -3.69922 -17.1006c6.09961 -8.7002 13.0996 -17.2998 21 -25.7002\n+c-8.10059 -6.2998 -16.8008 -12.2998 -26.1006 -18c-5.59961 -3.39941 -7.39941 -10.5996 -4.2002 -16.1992l7.90039 -13.9004c3.40039 -5.90039 10.9004 -7.7998 16.7002 -4.2998c12.7002 7.7998 24.5 16.2002 35.3994 24.8994\n+c10.9004 -8.7998 22.8008 -17.0996 35.4004 -24.8994c5.7998 -3.5 13.2998 -1.60059 16.7002 4.2998l7.89941 13.9004c3.2002 5.69922 1.40039 12.7998 -4.09961 16.1992c-9 5.5 -17.7002 11.6006 -26.0996 18c21 22.5 35.7998 46.3008 42.6992 69.9004h11.4004\n+c6.59961 0 12 5.40039 12 12zM0 328c0 13.2998 10.7002 24 24 24h280v-320h-280c-13.2998 0 -24 10.7002 -24 24v272zM58.9004 111.9c-2.60059 -7.80078 3.19922 -15.9004 11.3994 -15.9004h22.9004c5.2998 0 10 3.59961 11.5 8.7002l9.09961 31.7998h60.2002\n+l9.40039 -31.9004c1.40137 -4.74316 6.55273 -8.59668 11.5 -8.59961h22.8994c8.2998 0 14 8.09961 11.4004 15.9004l-57.5 169.1c-1.7002 4.7998 -6.2998 8.09961 -11.4004 8.09961h-32.5c-5.2002 0 -9.7002 -3.19922 -11.3994 -8.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"fax\" unicode=\"&#xf1ac;\" \n+d=\"M480 288c17.6641 0 32 -14.3359 32 -32v-288c0 -17.6641 -14.3359 -32 -32 -32h-320c-17.6641 0 -32 14.3359 -32 32v448c0 17.6641 14.3359 32 32 32h242.75c7.31348 -0.000976562 17.4473 -4.19922 22.6201 -9.37012l45.25 -45.25\n+c5.17676 -5.17285 9.37891 -15.3115 9.37988 -22.6299v-82.75zM288 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM288 144v32c0 8.83203 -7.16797 16 -16 16h-32\n+c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 144v32\n+c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 256v64h-48c-8.83203 0 -16 7.16797 -16 16v48h-160v-128h224zM64 320c17.6641 0 32 -14.3359 32 -32v-320\n+c0 -17.6641 -14.3359 -32 -32 -32h-32c-17.6641 0 -32 14.3359 -32 32v320c0 17.6641 14.3359 32 32 32h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"building\" unicode=\"&#xf1ad;\" horiz-adv-x=\"448\" \n+d=\"M436 -32c6.62695 0 12 -5.37305 12 -12v-20h-448v20c0 6.62695 5.37305 12 12 12h20v456c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-456h20zM128 372v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40\n+c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12zM128 276v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12zM180 128c6.62695 0 12 5.37305 12 12v40\n+c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40zM256 -32v84c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-84h64zM320 140v40c0 6.62695 -5.37305 12 -12 12h-40\n+c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 236v40c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12zM320 332v40\n+c0 6.62695 -5.37305 12 -12 12h-40c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h40c6.62695 0 12 5.37305 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"child\" unicode=\"&#xf1ae;\" horiz-adv-x=\"384\" \n+d=\"M120 376c0 39.7646 32.2354 72 72 72s72 -32.2354 72 -72c0 -39.7637 -32.2354 -72 -72 -72s-72 32.2363 -72 72zM374.627 374.627c12.4971 -12.4971 12.4971 -32.7568 0 -45.2539l-94.627 -94.627v-266.746c0 -17.6729 -14.3271 -32 -32 -32h-16\n+c-17.6729 0 -32 14.3271 -32 32v112h-16v-112c0 -17.6729 -14.3271 -32 -32 -32h-16c-17.6729 0 -32 14.3271 -32 32v266.746l-94.627 94.626c-12.4971 12.4971 -12.4971 32.7578 0 45.2549c12.4961 12.4971 32.7578 12.4971 45.2539 0l86.627 -86.627h101.491\n+l86.6279 86.627c12.4961 12.4971 32.7578 12.4971 45.2539 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"paw\" unicode=\"&#xf1b0;\" \n+d=\"M256 224c79.4102 0 192 -122.76 192 -200.25c0 -34.9004 -26.8096 -55.75 -71.7402 -55.75c-48.4102 0 -80.75 25.0801 -120.26 25.0801c-39.1699 0 -71.4199 -25.0801 -120.26 -25.0801c-44.9307 0 -71.7402 20.8496 -71.7402 55.75c0 77.4902 112.59 200.25 192 200.25\n+zM108.72 236.61c10.4004 -34.6504 -4.76953 -68.3799 -33.8896 -75.3408c-29.1201 -6.95996 -61.1602 15.4805 -71.5605 50.1309c-10.3994 34.6494 4.77051 68.3799 33.8906 75.3398s61.1602 -15.4805 71.5596 -50.1299zM193.44 257.39\n+c-30.9307 -8.14941 -65.6201 20.4502 -77.46 63.8701c-11.8408 43.4199 3.63965 85.2207 34.5791 93.3604c30.9404 8.13965 65.6201 -20.4502 77.46 -63.8701c11.8408 -43.4199 -3.63965 -85.2197 -34.5791 -93.3604zM474.83 286.73\n+c29.1201 -6.96094 44.29 -40.6904 33.8896 -75.3408c-10.4102 -34.6494 -42.4395 -57.0898 -71.5596 -50.1299s-44.29 40.6904 -33.8906 75.3398c10.4102 34.6504 42.4404 57.0908 71.5605 50.1309zM318.56 257.39c-30.9395 8.14062 -46.4199 49.9404 -34.5791 93.3604\n+c11.8398 43.4199 46.5195 72.0195 77.46 63.8701c30.9395 -8.15039 46.4199 -49.9404 34.5791 -93.3604c-11.8398 -43.4199 -46.5195 -72.0098 -77.46 -63.8701z\" \u002F>\n+    \u003Cglyph glyph-name=\"cube\" unicode=\"&#xf1b2;\" \n+d=\"M239.1 441.7c10.9004 4.09961 22.9004 4.09961 33.7002 -0.100586l208 -78c18.7002 -7 31.1006 -24.8994 31.1006 -44.8994v-225.101c0 -18.0996 -10.2002 -34.7998 -26.5 -42.8994l-208 -104c-13.5 -6.7998 -29.4004 -6.7998 -42.9004 0l-208 104\n+c-16.2002 8.09961 -26.5 24.7002 -26.5 42.8994v225.101c0 20 12.4004 38 31.0996 45zM256 379.6l-192 -72v-1.09961l192 -78l192 78v1.09961zM288 23.5996l160 80v133.9l-160 -65v-148.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"cubes\" unicode=\"&#xf1b3;\" \n+d=\"M488.6 197.8c14.1006 -5.2998 23.4004 -18.7002 23.4004 -33.7002v-110.1c0 -13.5996 -7.7002 -26.0996 -19.9004 -32.2002l-100 -50c-10.0996 -5.09961 -22.0996 -5.09961 -32.1992 0l-103.9 52l-103.9 -52c-10.0996 -5.09961 -22.0996 -5.09961 -32.1992 0l-100 50\n+c-12.2002 6.10059 -19.9004 18.6006 -19.9004 32.2002v110.1c0 15 9.2998 28.4004 23.2998 33.7002l96.6006 36.2002v108.5c0 15 9.2998 28.4004 23.3994 33.7002l100 37.5c8.2002 3.09961 17.2002 3.09961 25.2998 0l100 -37.5\n+c14.1006 -5.2998 23.4004 -18.7002 23.4004 -33.7002v-108.5zM358 233.2v73.2998l-85 -37v-68.2002zM154 343.9v-0.600586l102 -41.3994l102 41.3994v0.600586l-102 38.1992zM238 52.7998v75.4004l-85 -38.7998v-79.1006zM238 164.8v0.600586l-102 38.1992l-102 -38.1992\n+v-0.600586l102 -41.3994zM478 52.7998v75.4004l-85 -38.7998v-79.1006zM478 164.8v0.600586l-102 38.1992l-102 -38.1992v-0.600586l102 -41.3994z\" \u002F>\n+    \u003Cglyph glyph-name=\"recycle\" unicode=\"&#xf1b8;\" \n+d=\"M184.561 186.097c3.23242 -13.9971 -12.1221 -24.6348 -24.0674 -17.168l-40.7363 25.4551l-50.8672 -81.4014c-13.2832 -21.2559 2.07031 -48.9824 27.1221 -48.9824h51.9883c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-51.8848\n+c-75.334 0 -121.302 83.0479 -81.4082 146.88l50.8223 81.3877l-40.7256 25.4482c-12.0811 7.54688 -8.96582 25.9609 4.87891 29.1582l110.237 25.4502c8.61133 1.9873 17.2012 -3.38086 19.1895 -11.9902zM283.122 369.012\n+c-12.2842 19.6543 -41.5449 20.3193 -54.2568 -0.0214844l-17.9609 -28.7432c-3.5127 -5.62012 -10.916 -7.3291 -16.5361 -3.81738l-33.9189 21.1953c-5.62012 3.51172 -7.33008 10.9131 -3.82031 16.5332l17.9629 28.7656c37.6074 60.1709 125.295 60.0332 162.816 0\n+l41.2627 -66.082l40.6875 25.4238c12.0771 7.55176 27.2646 -3.32324 24.0674 -17.168l-25.4502 -110.236c-1.97363 -8.55273 -10.5166 -13.9893 -19.1885 -11.9902l-110.237 25.4502c-13.8789 3.20508 -16.9297 21.6299 -4.87891 29.1572l40.7402 25.457zM497.288 146.88\n+c39.9268 -63.8828 -6.13379 -146.88 -81.4082 -146.88h-95.8799v-47.9893c0 -14.3105 -17.3105 -21.3184 -27.3135 -11.3145l-80 79.9883c-6.24805 6.24805 -6.24805 16.3799 0 22.627l80 79.9814c10.0713 10.0703 27.3135 2.90039 27.3135 -11.3125v-47.9814h95.9844\n+c25.0791 0 40.3926 27.749 27.1357 48.96l-27.5645 44.1123c-3.51172 5.62109 -1.80176 13.0234 3.81836 16.5361l33.8613 21.1582c5.62207 3.51367 13.0264 1.80273 16.5381 -3.82031z\" \u002F>\n+    \u003Cglyph glyph-name=\"car\" unicode=\"&#xf1b9;\" \n+d=\"M499.99 272c7.80957 0 13.54 -7.33984 11.6494 -14.9102l-6 -24c-1.33008 -5.33984 -6.12988 -9.08984 -11.6396 -9.08984h-20.0703c13.4199 -11.7305 22.0703 -28.7803 22.0703 -48v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703\n+c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 19.2197 8.65039 36.2695 22.0801 48h-20.0703\n+c-5.50977 0 -10.3096 3.75 -11.6396 9.08984l-6 24c-1.90039 7.57031 3.83008 14.9102 11.6396 14.9102h59.8604l16.6396 41.5996c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.98 -70.4004l16.6396 -41.5996h59.8701z\n+M147.93 289.83l-19.9297 -49.8301h256l-19.9297 49.8301c-7.29004 18.2197 -24.9404 30.1699 -44.5703 30.1699h-127c-19.6299 0 -37.2803 -11.9502 -44.5703 -30.1699zM96 128.2c19.2002 0 48 -3.19043 48 15.9502c0 19.1396 -28.7998 47.8496 -48 47.8496\n+s-32 -12.7598 -32 -31.9004c0 -19.1396 12.7998 -31.8994 32 -31.8994zM416 128.2c19.2002 0 32 12.7598 32 31.8994c0 19.1406 -12.7998 31.9004 -32 31.9004s-48 -28.71 -48 -47.8496c0 -19.1406 28.7998 -15.9502 48 -15.9502z\" \u002F>\n+    \u003Cglyph glyph-name=\"taxi\" unicode=\"&#xf1ba;\" \n+d=\"M462 206.36c28.5898 -6.40039 50 -31.8301 50 -62.3604v-48c0 -23.6201 -12.9502 -44.0303 -32 -55.1201v-40.8799c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32\n+v40.8799c-19.0498 11.0801 -32 31.4902 -32 55.1201v48c0 30.5303 21.4102 55.96 50 62.3604l22 84.8398c9.59961 35.2002 41.5996 60.7998 76.7998 60.7998h11.2002v32c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32v-32h11.2002\n+c35.2002 0 67.2002 -25.5996 76.7998 -60.7998zM96 96c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM116.55 208h278.9l-17.3906 67.1396c-2.01953 7.37988 -9.37988 12.8604 -14.8496 12.8604h-214.4\n+c-5.46973 0 -12.8291 -5.48047 -15.0596 -13.6396zM416 96c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"tree\" unicode=\"&#xf1bb;\" horiz-adv-x=\"384\" \n+d=\"M378.31 69.5098c6 -6.79004 7.36035 -16.0898 3.56055 -24.2598c-3.75 -8.0498 -12 -13.25 -21.0098 -13.25h-136.86v-24.4502l30.29 -48.3994c5.32031 -10.6406 -2.41992 -23.1602 -14.3096 -23.1602h-95.9609c-11.8896 0 -19.6299 12.5195 -14.3096 23.1602\n+l30.29 48.3994v24.4502h-136.86c-9.00977 0 -17.2598 5.2002 -21.0098 13.25c-3.7998 8.16992 -2.43945 17.4697 3.56055 24.2598l79.8896 90.4902h-30.6299c-9.02051 0 -16.9805 5 -20.7803 13.0498c-3.79004 8.0498 -2.54004 17.2598 3.27051 24.04l78.1396 90.9102\n+h-28.8896c-9.10059 0 -17.3105 5.34961 -20.8701 13.6104c-3.51074 8.12988 -1.86035 17.5898 4.23926 24.0801l110.28 117.479c6.04004 6.4502 17.29 6.4502 23.3203 0l110.27 -117.479c6.10059 -6.49023 7.76074 -15.9502 4.24023 -24.0801\n+c-3.55957 -8.26074 -11.7598 -13.6104 -20.8604 -13.6104h-28.8896l78.1299 -90.8896c5.83008 -6.79004 7.08008 -16.0107 3.28027 -24.0508c-3.7998 -8.05957 -11.7705 -13.0596 -20.7803 -13.0596h-30.6299z\" \u002F>\n+    \u003Cglyph glyph-name=\"database\" unicode=\"&#xf1c0;\" horiz-adv-x=\"448\" \n+d=\"M448 374.857v-45.7148c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426v45.7148c0 40.2852 100.333 73.1426 224 73.1426s224 -32.8574 224 -73.1426zM448 272v-102.857c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426\n+v102.857c48.125 -33.1426 136.208 -48.5723 224 -48.5723s175.874 15.4297 224 48.5723zM448 112v-102.857c0 -40.2852 -100.333 -73.1426 -224 -73.1426s-224 32.8574 -224 73.1426v102.857c48.125 -33.1426 136.208 -48.5723 224 -48.5723s175.874 15.4297 224 48.5723z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"file-pdf\" unicode=\"&#xf1c1;\" horiz-adv-x=\"384\" \n+d=\"M181.9 191.9c-5 16 -4.90039 46.8994 -2 46.8994c8.39941 0 7.59961 -36.8994 2 -46.8994zM180.2 144.7c9.59961 -17.4004 21.7998 -31.2002 34.5 -40.7998c-23.9004 -4.7002 -44.6006 -14.9004 -62.9004 -21.9004c11.1006 19.4004 20.7002 42.5 28.4004 62.7002z\n+M86.0996 19.9004c5.80078 15.6992 28.2002 33.8994 34.9004 40.1992c-21.7002 -34.7998 -34.9004 -41 -34.9004 -40.1992zM248 288h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136\n+c0 -13.2002 10.7998 -24 24 -24zM240 116.2c-20 12.2002 -33.2998 29 -42.7002 53.7998c4.5 18.5 11.6006 46.5996 6.2002 64.2002c-4.7002 29.3994 -42.4004 26.5 -47.7998 6.7998c-5 -18.2998 -0.400391 -44.0996 8.09961 -77\n+c-11.5996 -27.5996 -28.7002 -64.5996 -40.7998 -85.7998c-0.0996094 0 -0.0996094 -0.100586 -0.200195 -0.100586c-27.0996 -13.8994 -73.5996 -44.5 -54.5 -68c5.60059 -6.89941 16 -10 21.5 -10c17.9004 0 35.7002 18 61.1006 61.8008\n+c25.7998 8.5 54.0996 19.0996 79 23.1992c21.6992 -11.7998 47.0996 -19.5 64 -19.5c29.1992 0 31.1992 32 19.6992 43.4004c-13.8994 13.5996 -54.2998 9.7002 -73.5996 7.2002zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6c6.40039 0 12.5 -2.5 17 -7z\n+M302.9 87.7002c0 0 -5.7002 -6.7998 -42.8008 9c40.3008 2.89941 46.9004 -6.2998 42.8008 -9z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-word\" unicode=\"&#xf1c2;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM281.1 192c-5.59961 0 -10.5 -3.90039 -11.5 -9.5c-24.1992 -111.4 -21.7998 -118 -21.5996 -129.2\n+c-0.799805 5.40039 -5.59961 29 -29.5996 129.4c-1.30078 5.39941 -6.10059 9.2002 -11.7002 9.2002h-29.1006c-5.59961 0 -10.3994 -3.7002 -11.6992 -9.10059c-22.1006 -90 -27.8008 -112.5 -29.4004 -122.7c-0.900391 12.7002 -5.40039 44.2002 -21 122.2\n+c-1.09961 5.7002 -6.09961 9.7002 -11.7998 9.7002h-24.5c-7.7002 0 -13.4004 -7.09961 -11.7002 -14.5996l37.7998 -168c1.2002 -5.5 6.10059 -9.40039 11.7002 -9.40039h37.0996c5.5 0 10.3008 3.7998 11.6006 9.09961c23.2002 93.1006 24.5 96.2002 25.5996 110.5h0.5\n+c4.7998 -29.2998 -0.200195 -7 25.6006 -110.5c1.2998 -5.2998 6.09961 -9.09961 11.5996 -9.09961h38c5.59961 0 10.5 3.7998 11.7002 9.2998l38 168c1.7002 7.60059 -4 14.7002 -11.7002 14.7002h-23.9004zM384 326.1v-6.09961h-128v128h6.09961\n+c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-excel\" unicode=\"&#xf1c3;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM284.1 205.5c5.10059 8 -0.599609 18.5 -10.0996 18.4004h-34.7998\n+c-4.40039 0 -8.5 -2.40039 -10.6006 -6.30078c-30.5 -56.7998 -36.5996 -68.5 -36.5996 -68.5c-16.5996 34.9004 -10.5 19.7002 -36.5996 68.5c-2.10059 3.90039 -6.2002 6.30078 -10.6006 6.30078h-34.7998c-9.5 0 -15.2998 -10.5 -10.0996 -18.5l60.2998 -93.5\n+l-60.2998 -93.5c-5.10059 -8 0.599609 -18.5 10.0996 -18.5h34.9004c4.39941 0 8.39941 2.39941 10.5 6.2998c26.5996 48.7998 30.1992 54 36.5996 68.7998c0 0 16.9004 -32.5 36.5 -68.7002c2.09961 -3.89941 6.2002 -6.2998 10.5996 -6.2998h34.9004\n+c9.5 0 15.2002 10.5 10.0996 18.5l-60.0996 93.5zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-powerpoint\" unicode=\"&#xf1c4;\" horiz-adv-x=\"384\" \n+d=\"M193.7 176.8c8.7998 0 15.5 -2.7002 20.2998 -8.09961c9.59961 -10.9004 9.7998 -32.7002 -0.200195 -44.1006c-4.89941 -5.59961 -11.8994 -8.5 -21.0996 -8.5h-26.9004v60.7002h27.9004zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6\n+c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM277 146.8c0 44.2002 -28.4004 77 -72.9004 77h-81\n+c-6.59961 0 -12 -5.39941 -12 -12v-199.8c0 -6.59961 5.40039 -12 12 -12h30.8008c6.59961 0 12 5.40039 12 12v57.2002c22.2998 0 111.1 -12.7002 111.1 77.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-image\" unicode=\"&#xf1c5;\" horiz-adv-x=\"384\" \n+d=\"M384 326.059v-6.05859h-128v128h6.05859c5.4873 0 13.0898 -3.14941 16.9707 -7.0293l97.9404 -97.9404c3.88086 -3.88086 7.03027 -11.4834 7.03027 -16.9717zM248 288h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v464\n+c0 13.2549 10.7451 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24zM112.545 272c-26.5088 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48zM320.545 32v112l-39.5137 39.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0\n+l-103.515 -103.515l-39.5146 39.5146c-4.68652 4.68652 -11.7988 5.1709 -16.4854 0.485352l-39.5146 -39.5146l-0.485352 -48.4854h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-archive\" unicode=\"&#xf1c6;\" horiz-adv-x=\"384\" \n+d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM128.4 112c17.8994 0 32.5 -12.0996 32.5 -27s-14.5 -27 -32.4004 -27s-32.5 12 -32.5 27c0 14.9004 14.5 27 32.4004 27zM224 312c0 -13.2002 10.7998 -24 24 -24h136\n+v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h104.4v-32h32v32h63.5996v-136zM95.9004 416v-32h32v32h-32zM128.2 32c33 0 57.7998 30.2002 51.3994 62.5996l-17.2998 87.7002\n+c-1.09961 5.60059 -6.09961 9.7002 -11.7998 9.7002h-22.0996v32h32v32h-32v32h32v32h-32v32h32v32h-32v-32h-32v-32h32v-32h-32v-32h32v-32h-32v-32l-19.6006 -97.0996c-6.59961 -32.5 18.2002 -62.9004 51.4004 -62.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-audio\" unicode=\"&#xf1c7;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM160 44v136c0 10.7002 -12.9004 16.0996 -20.5 8.5l-35.5 -36.5h-28c-6.59961 0 -12 -5.40039 -12 -12\n+v-56c0 -6.59961 5.40039 -12 12 -12h28l35.5 -36.5c7.59961 -7.5 20.5 -2.2002 20.5 8.5zM193.2 91.5996c-22.5 -23.0996 12.5996 -55.7998 34.3994 -33.5c27.2002 28 27.2002 72.5 0 100.4c-22.1992 22.7002 -56.5 -10.7002 -34.3994 -33.5\n+c9.09961 -9.2998 9.09961 -24.0996 0 -33.4004zM279.2 208.7c-22.1006 22.7998 -56.5 -10.7002 -34.4004 -33.5c36.2998 -37.2998 36.2002 -96.6006 0 -133.8c-22.5996 -23.2002 12.6006 -55.9004 34.4004 -33.5c54.3994 56 54.3994 144.899 0 200.8zM384 326.1v-6.09961\n+h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-video\" unicode=\"&#xf1c8;\" horiz-adv-x=\"384\" \n+d=\"M384 326.059v-6.05859h-128v128h6.05859c6.36523 0 12.4707 -2.5293 16.9717 -7.0293l97.9404 -97.9404c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9717zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336\n+c-13.2549 0 -24 10.7451 -24 24v464c0 13.2549 10.7451 24 24 24h200v-136zM320 167.984c0 21.4609 -25.96 31.9795 -40.9707 16.9697l-55.0293 -55.0127v38.0586c0 13.2549 -10.7451 24 -24 24h-112c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24\n+h112c13.2549 0 24 10.7451 24 24v38.0586l55.0293 -55.0088c15.0273 -15.0264 40.9707 -4.47363 40.9707 16.9717v111.963z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-code\" unicode=\"&#xf1c9;\" horiz-adv-x=\"384\" \n+d=\"M384 326.059v-6.05859h-128v128h6.05859c6.36523 0 12.4707 -2.5293 16.9717 -7.0293l97.9404 -97.9404c3.87988 -3.88086 7.0293 -11.4834 7.0293 -16.9717zM248 288h136v-328c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v464\n+c0 13.2549 10.7451 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24zM123.206 47.4951l19.5791 20.8838c0.805664 0.860352 1.45996 2.51465 1.45996 3.69336c0 1.34766 -0.820312 3.16309 -1.83203 4.05371l-40.7627 35.874l40.7627 35.874\n+c1.01172 0.890625 1.83203 2.70605 1.83203 4.05371c0 1.17871 -0.654297 2.83301 -1.45996 3.69336l-19.5791 20.8848c-0.882812 0.942383 -2.64844 1.70703 -3.93945 1.70703c-1.17871 0 -2.83398 -0.654297 -3.69336 -1.46094l-64.8662 -60.8115\n+c-0.942383 -0.883789 -1.70703 -2.64844 -1.70703 -3.93945c0 -1.29199 0.764648 -3.05664 1.70703 -3.94043l64.8662 -60.8115c0.859375 -0.806641 2.51465 -1.46094 3.69336 -1.46094c1.29102 0 3.05664 0.764648 3.93945 1.70703zM174.501 -2.98438\n+c0.407227 -0.118164 1.08203 -0.213867 1.50586 -0.213867c2.23926 0 4.56152 1.74512 5.18457 3.89551l61.4395 211.626c0.118164 0.407227 0.214844 1.08203 0.214844 1.50586c0 2.23828 -1.74512 4.56152 -3.89453 5.18555l-27.4521 7.9707\n+c-0.407227 0.117188 -1.08105 0.213867 -1.50488 0.213867c-2.23828 0 -4.5625 -1.74512 -5.1875 -3.89551l-61.4395 -211.626c-0.118164 -0.40625 -0.213867 -1.08105 -0.213867 -1.50391c0 -2.23926 1.74512 -4.56348 3.89453 -5.1875zM335.293 108.061\n+c0.942383 0.883789 1.70703 2.64844 1.70703 3.94043c0 1.29102 -0.764648 3.05566 -1.70605 3.93945l-64.8662 60.8115c-0.859375 0.806641 -2.51465 1.46094 -3.69336 1.46094c-1.29102 0 -3.05566 -0.764648 -3.93945 -1.70703l-19.5801 -20.8848\n+c-0.805664 -0.860352 -1.45996 -2.51465 -1.45996 -3.69336c0 -1.34766 0.820312 -3.16309 1.83203 -4.05371l40.7627 -35.874l-40.7637 -35.873c-1.01172 -0.890625 -1.83203 -2.70605 -1.83203 -4.05371c0 -1.17871 0.654297 -2.83301 1.45996 -3.69336l19.5801 -20.8848\n+c0.882812 -0.942383 2.64844 -1.70703 3.93945 -1.70703c1.17871 0 2.83398 0.654297 3.69336 1.46094z\" \u002F>\n+    \u003Cglyph glyph-name=\"life-ring\" unicode=\"&#xf1cd;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM429.696 320.441c-10.6406 14.3398 -30.915 34.6143 -45.2549 45.2549l-63.3994 -63.3994c18.585 -11.0029 34.2676 -26.6963 45.2549 -45.2549zM256 96\n+c53.0186 0 96 42.9814 96 96s-42.9814 96 -96 96s-96 -42.9814 -96 -96s42.9814 -96 96 -96zM127.559 365.696c-14.3398 -10.6406 -34.6143 -30.915 -45.2549 -45.2549l63.3994 -63.3994c11.0029 18.585 26.6963 34.2676 45.2549 45.2549zM82.3037 63.5586\n+c10.6406 -14.3398 30.915 -34.6143 45.2549 -45.2549l63.3994 63.3994c-18.585 11.0029 -34.2676 26.6963 -45.2549 45.2549zM384.441 18.3037c14.3398 10.6406 34.6143 30.915 45.2549 45.2549l-63.3994 63.3994c-11.0029 -18.585 -26.6963 -34.2676 -45.2549 -45.2549z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"circle-notch\" unicode=\"&#xf1ce;\" \n+d=\"M288 408.944c0 15.5996 14.6777 27.167 29.7891 23.292c107.071 -27.457 186.211 -124.604 186.211 -240.236c0 -136.788 -110.745 -247.711 -247.466 -247.999c-137.054 -0.289062 -247.812 109.615 -248.531 246.667c-0.609375 116.126 78.5996 213.85 185.951 241.502\n+c15.2119 3.91895 30.0459 -7.52539 30.0459 -23.2344v-16.6475c0 -10.8047 -7.28125 -20.1621 -17.6885 -23.0693c-77.5254 -21.6543 -134.312 -92.749 -134.312 -177.219c0 -101.705 82.3105 -184 184 -184c101.705 0 184 82.3105 184 184\n+c0 84.4824 -56.7959 155.566 -134.314 177.219c-10.4043 2.90723 -17.6855 12.2627 -17.6855 23.0664v16.6592z\" \u002F>\n+    \u003Cglyph glyph-name=\"paper-plane\" unicode=\"&#xf1d8;\" \n+d=\"M476 444.8c17.2998 10 39 -4.59961 35.5996 -24.7998l-72 -432c-2.59961 -15.2998 -18.7998 -24.2002 -33 -18.2002l-124.6 52.2002l-63.5 -77.2998c-14 -17.1006 -42.5 -7.7998 -42.5 15.7998v80.5l240.9 293.5c4.69922 5.7002 -3.10059 13.2002 -8.60059 8.2998\n+l-287.3 -253.2l-106.3 44.6006c-18 7.59961 -20.2998 32.7998 -2.2002 43.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"history\" unicode=\"&#xf1da;\" \n+d=\"M504 192.469c0.25293 -136.64 -111.18 -248.372 -247.82 -248.468c-59.0146 -0.0419922 -113.223 20.5303 -155.821 54.9111c-11.0771 8.93945 -11.9053 25.541 -1.83984 35.6064l11.2676 11.2676c8.6084 8.6084 22.3525 9.55078 31.8906 1.9834\n+c31.3848 -24.9043 71.1045 -39.7695 114.323 -39.7695c101.705 0 184 82.3105 184 184c0 101.705 -82.3105 184 -184 184c-48.8145 0 -93.1494 -18.9688 -126.068 -49.9316l50.7539 -50.7539c10.0801 -10.0801 2.94141 -27.3145 -11.3125 -27.3145h-145.373\n+c-8.83691 0 -16 7.16309 -16 16v145.373c0 14.2539 17.2344 21.3926 27.3145 11.3135l49.3711 -49.3711c44.5234 42.5488 104.866 68.6846 171.314 68.6846c136.81 0 247.747 -110.78 248 -247.531zM323.088 113.685c-8.1377 -10.4629 -23.2158 -12.3467 -33.6787 -4.20996\n+l-65.4092 50.874v135.651c0 13.2549 10.7451 24 24 24h16c13.2549 0 24 -10.7451 24 -24v-104.349l40.7012 -31.6572c10.4629 -8.13672 12.3477 -23.2158 4.20996 -33.6787z\" \u002F>\n+    \u003Cglyph glyph-name=\"heading\" unicode=\"&#xf1dc;\" \n+d=\"M448 352v-320h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v128h-192v-128h32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-160\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32v320h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32v-128h192v128h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32z\" \u002F>\n+    \u003Cglyph glyph-name=\"paragraph\" unicode=\"&#xf1dd;\" horiz-adv-x=\"448\" \n+d=\"M448 400v-32c0 -8.83203 -7.16797 -16 -16 -16h-48v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v368h-32v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v112h-32c-88.3203 0 -160 71.6797 -160 160\n+s71.6797 160 160 160h240c8.83203 0 16 -7.16797 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"sliders-h\" unicode=\"&#xf1de;\" \n+d=\"M496 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-336v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-80c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h80v16c0 8.7998 7.2002 16 16 16h32\n+c8.7998 0 16 -7.2002 16 -16v-16h336zM496 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-80v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-336c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h336v16\n+c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-16h80zM496 384c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-208v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-208c-8.7998 0 -16 7.2002 -16 16v32\n+c0 8.7998 7.2002 16 16 16h208v16c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-16h208z\" \u002F>\n+    \u003Cglyph glyph-name=\"share-alt\" unicode=\"&#xf1e0;\" horiz-adv-x=\"448\" \n+d=\"M352 128c53.0186 0 96 -42.9814 96 -96s-42.9814 -96 -96 -96s-96 42.9814 -96 96v0.0283203c0 5.8125 1.01953 15.1367 2.27637 20.8125l-102.486 64.0537c-16.4033 -13.0752 -37.1816 -20.8945 -59.79 -20.8945c-53.0186 0 -96 42.9814 -96 96s42.9814 96 96 96\n+c22.6084 0 43.3867 -7.81934 59.79 -20.8945l102.486 64.0537c-1.48633 6.71094 -2.27637 13.6826 -2.27637 20.8408c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96s-42.9814 -96 -96 -96c-22.6084 0 -43.3867 7.81934 -59.79 20.8965l-102.486 -64.0547\n+c1.25684 -5.68359 2.27637 -15.0205 2.27637 -20.8408c0 -5.82129 -1.01953 -15.1582 -2.27637 -20.8418l102.486 -64.0537c16.4033 13.0752 37.1816 20.8945 59.79 20.8945z\" \u002F>\n+    \u003Cglyph glyph-name=\"share-alt-square\" unicode=\"&#xf1e1;\" horiz-adv-x=\"448\" \n+d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM304 152c-14.5615 0 -27.8232 -5.56055 -37.7832 -14.6709l-67.958 40.7744\n+c0.960938 3.77539 1.74121 10.001 1.74121 13.8975c0 3.89551 -0.780273 10.1211 -1.74121 13.8965l67.958 40.7744c9.95996 -9.11133 23.2217 -14.6719 37.7832 -14.6719c30.9277 0 56 25.0723 56 56s-25.0723 56 -56 56s-56 -25.0723 -56 -56\n+c0 -4.79688 0.605469 -9.45312 1.74023 -13.8975l-67.958 -40.7744c-9.95898 9.11133 -23.2207 14.6719 -37.7822 14.6719c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56c14.5615 0 27.8232 5.56055 37.7832 14.6709l67.958 -40.7744\n+c-0.960938 -3.7666 -1.74023 -9.97656 -1.74023 -13.8623v-0.0351562c0 -30.9277 25.0723 -56 56 -56s56 25.0723 56 56c-0.000976562 30.9287 -25.0732 56.001 -56.001 56.001z\" \u002F>\n+    \u003Cglyph glyph-name=\"bomb\" unicode=\"&#xf1e2;\" \n+d=\"M440.5 359.5l-52 -52l26.5 -26.5c9.40039 -9.40039 9.40039 -24.5996 0 -33.9004l-17.4004 -17.3994c11.8008 -26.1006 18.4004 -55.1006 18.4004 -85.6006c0 -114.899 -93.0996 -208 -208 -208s-208 93 -208 207.9s93.0996 208 208 208\n+c30.5 0 59.5 -6.59961 85.5996 -18.4004l17.4004 17.4004c9.40039 9.40039 24.5996 9.40039 33.9004 0l26.5 -26.5l52 52zM500 388c6.59961 0 12 -5.40039 12 -12s-5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12s5.40039 12 12 12h24zM440 448\n+c6.59961 0 12 -5.40039 12 -12v-24c0 -6.59961 -5.40039 -12 -12 -12s-12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12zM473.9 393c-4.60059 -4.7002 -12.2002 -4.7002 -17 0c-4.7002 4.7002 -4.7002 12.2998 0 17l17 17c4.69922 4.7002 12.2998 4.7002 17 0\n+c4.69922 -4.7002 4.69922 -12.2998 0 -17zM406.1 393l-17 17c-4.69922 4.7002 -4.69922 12.2998 0 17c4.7002 4.7002 12.3008 4.7002 17 0l17 -17c4.7002 -4.7002 4.7002 -12.2998 0 -17c-4.69922 -4.7002 -12.2998 -4.7002 -17 0zM473.9 359l17 -17\n+c4.69922 -4.7002 4.69922 -12.2998 0 -17c-4.7002 -4.7002 -12.3008 -4.7002 -17 0l-17 17c-4.7002 4.7002 -4.7002 12.2998 0 17c4.69922 4.7002 12.2998 4.7002 17 0zM112 176c0 35.2998 28.7002 64 64 64c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\n+c-52.9004 0 -96 -43.0996 -96 -96c0 -8.7998 7.2002 -16 16 -16s16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"futbol\" unicode=\"&#xf1e3;\" \n+d=\"M504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248zM456 192l-0.00292969 0.282227l-26.0645 -22.7412l-62.6787 58.5l16.4541 84.3555l34.3027 -3.07227\n+c-24.8887 34.2158 -60.0039 60.0889 -100.709 73.1406l13.6514 -31.9385l-74.9531 -41.5264l-74.9531 41.5254l13.6514 31.9385c-40.6309 -13.0283 -75.7803 -38.8701 -100.709 -73.1406l34.5645 3.07324l16.1924 -84.3555l-62.6777 -58.5l-26.0645 22.7412\n+l-0.00292969 -0.282227c0 -43.0146 13.4971 -83.9521 38.4717 -117.991l7.7041 33.8975l85.1387 -10.4473l36.3008 -77.8262l-29.9023 -17.7861c40.2021 -13.1221 84.29 -13.1475 124.572 0l-29.9023 17.7861l36.3008 77.8262l85.1387 10.4473l7.7041 -33.8975\n+c24.9756 34.0391 38.4727 74.9766 38.4727 117.991zM207.898 122.429l-29.8945 91.3125l77.9961 56.5264l77.9961 -56.5264l-29.6221 -91.3125h-96.4756z\" \u002F>\n+    \u003Cglyph glyph-name=\"tty\" unicode=\"&#xf1e4;\" \n+d=\"M5.37012 344.178c138.532 138.532 362.936 138.326 501.262 0c6.07812 -6.07812 7.07422 -15.4961 2.58301 -22.6807l-43.2139 -69.1377c-2.97266 -4.75684 -9.9375 -8.61719 -15.5459 -8.61719c-1.94922 0 -5 0.587891 -6.81055 1.31152l-86.4219 34.5693\n+c-6.36133 2.54492 -11.5244 10.1719 -11.5244 17.0234c0 0.503906 0.0410156 1.32031 0.0908203 1.82227l5.95215 59.5312c-62.1455 22.4541 -130.636 21.9863 -191.483 0l5.95312 -59.5322c0.0507812 -0.501953 0.0908203 -1.32031 0.0908203 -1.8252\n+c0 -6.85156 -5.16309 -14.4766 -11.5244 -17.0205l-86.4238 -34.5684c-1.80957 -0.723633 -4.85938 -1.31152 -6.80859 -1.31152c-5.60938 0 -12.5742 3.86035 -15.5469 8.61719l-43.2109 69.1387c-1.53809 2.46094 -2.78711 6.81445 -2.78711 9.7168\n+c0 4.19141 2.40625 9.99902 5.37012 12.9629zM96 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM192 140c0 -6.62695 -5.37305 -12 -12 -12h-40\n+c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM288 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM384 140\n+c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM480 140c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\n+c6.62695 0 12 -5.37305 12 -12v-40zM144 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM240 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40\n+c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM336 44c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM432 44c0 -6.62695 -5.37305 -12 -12 -12h-40\n+c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM96 -52c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40zM384 -52\n+c0 -6.62695 -5.37305 -12 -12 -12h-232c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h232c6.62695 0 12 -5.37305 12 -12v-40zM480 -52c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40\n+c6.62695 0 12 -5.37305 12 -12v-40z\" \u002F>\n+    \u003Cglyph glyph-name=\"binoculars\" unicode=\"&#xf1e5;\" \n+d=\"M416 400v-48h-96v48c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16zM63.9102 288.01c0.479492 17.6201 14.2998 31.9902 31.9297 31.9902h96.1602v-160h-32v-160c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v44\n+c3.45996 129.78 61.4004 150.16 63.9102 244.01zM448.09 288.01c2.50977 -93.8496 60.4502 -114.229 63.9102 -244.01v-44c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v160h-32v160h96.1602c17.6299 0 31.4502 -14.3701 31.9297 -31.9902zM176 416\n+c8.83984 0 16 -7.16016 16 -16v-48h-96v48c0 8.83984 7.16016 16 16 16h64zM224 160v160h64v-160h-64z\" \u002F>\n+    \u003Cglyph glyph-name=\"plug\" unicode=\"&#xf1e6;\" horiz-adv-x=\"384\" \n+d=\"M256 304v112c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-112h-64zM368 288c8.83691 0 16 -7.16309 16 -16v-32c0 -8.83691 -7.16309 -16 -16 -16h-16v-32c0 -77.4062 -54.9688 -141.971 -128 -156.796v-99.2041h-64v99.2041\n+c-73.0312 14.8252 -128 79.3896 -128 156.796v32h-16c-8.83691 0 -16 7.16309 -16 16v32c0 8.83691 7.16309 16 16 16h352zM128 304h-64v112c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-112z\" \u002F>\n+    \u003Cglyph glyph-name=\"newspaper\" unicode=\"&#xf1ea;\" horiz-adv-x=\"576\" \n+d=\"M552 384c13.2549 0 24 -10.7451 24 -24v-312c0 -26.5098 -21.4902 -48 -48 -48h-472c-30.9277 0 -56 25.0723 -56 56v272c0 13.2549 10.7451 24 24 24h40v8c0 13.2549 10.7451 24 24 24h464zM56 48c4.41602 0 8 3.58398 8 8v248h-16v-248c0 -4.41602 3.58398 -8 8 -8z\n+M292 64c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 64c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8\n+c0 -6.62695 5.37305 -12 12 -12h152zM292 160c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 160c6.62695 0 12 5.37305 12 12v8c0 6.62695 -5.37305 12 -12 12h-152\n+c-6.62695 0 -12 -5.37305 -12 -12v-8c0 -6.62695 5.37305 -12 12 -12h152zM500 256c6.62695 0 12 5.37305 12 12v40c0 6.62695 -5.37305 12 -12 12h-360c-6.62695 0 -12 -5.37305 -12 -12v-40c0 -6.62695 5.37305 -12 12 -12h360z\" \u002F>\n+    \u003Cglyph glyph-name=\"wifi\" unicode=\"&#xf1eb;\" horiz-adv-x=\"640\" \n+d=\"M634.91 293.12c6.66016 -6.16016 6.79004 -16.5898 0.359375 -22.9805l-34.2393 -33.9697c-6.14062 -6.08984 -16.0205 -6.22949 -22.4004 -0.379883c-145.95 133.71 -371.33 133.68 -517.25 0c-6.37988 -5.84961 -16.2598 -5.71973 -22.3994 0.379883l-34.2402 33.9697\n+c-6.44043 6.39062 -6.31055 16.8203 0.349609 22.9805c177.101 163.81 452.65 163.87 629.82 0zM320 96c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64s-64 28.6504 -64 64s28.6504 64 64 64zM522.67 179.59c6.88965 -6.08984 7.12012 -16.6895 0.560547 -23.1494\n+l-34.4404 -33.9902c-6 -5.93066 -15.6602 -6.32031 -22.0498 -0.799805c-83.75 72.4092 -209.54 72.5693 -293.49 0c-6.38965 -5.52051 -16.0498 -5.12012 -22.0498 0.799805l-34.4404 33.9902c-6.5498 6.45996 -6.33008 17.0498 0.570312 23.1494\n+c115.13 101.82 290.08 101.93 405.34 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"calculator\" unicode=\"&#xf1ec;\" horiz-adv-x=\"448\" \n+d=\"M400 448c25.5996 0 48 -22.4004 48 -48v-416c0 -25.5996 -22.4004 -48 -48 -48h-352c-25.5996 0 -48 22.4004 -48 48v416c0 25.5996 22.4004 48 48 48h352zM128 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM128 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM256 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM256 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM384 12.7998v166.4c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-166.4c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM384 268.8v102.4c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-294.4\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-102.4c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h294.4c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"bell-slash\" unicode=\"&#xf1f6;\" horiz-adv-x=\"640\" \n+d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.80957 -22.4502l-19.6396 -25.2705c-5.43066 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.351 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\n+c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l144.96 -112.04c22.9307 31.5 57.2607 54.1904 97.5898 62.5703v20.8398c0 17.6699 14.3203 32 31.9805 32s31.9805 -14.3301 31.9805 -32v-20.8301c73.46 -15.2598 127.939 -77.46 127.939 -155.16\n+c0 -102.3 36.1504 -133.529 55.4697 -154.29c6 -6.43945 8.66016 -14.1602 8.61035 -21.71c0 -1.39941 -0.610352 -2.67969 -0.799805 -4.05957zM157.23 196.46l212.789 -164.46h-241.92c-19.1191 0 -31.9893 15.5996 -32.0996 32\n+c-0.0498047 7.5498 2.61035 15.2598 8.61035 21.71c16.21 17.4199 44.0098 42.79 52.6201 110.75zM320 -64c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash\" unicode=\"&#xf1f8;\" horiz-adv-x=\"448\" \n+d=\"M432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781\n+c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120zM53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.55469 -24.8369 -23.0146 -44.9971 -47.8994 -45h-245.801c-24.8848 0.00292969 -46.3447 20.1631 -47.8994 45z\" \u002F>\n+    \u003Cglyph glyph-name=\"copyright\" unicode=\"&#xf1f9;\" \n+d=\"M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM373.134 93.2471c1.58203 1.85645 2.86621 5.34375 2.86621 7.7832c0 2.16309 -1.03613 5.33594 -2.31348 7.08301l-24.5469 33.5713\n+c-4.44824 6.08691 -13.376 6.61816 -18.5078 1.05371c-0.263672 -0.287109 -26.8467 -28.625 -65.5439 -28.625c-48.7627 0 -74.2773 40.0898 -74.2773 79.6914c0 42.5068 27.8008 76.082 73.916 76.082c35.3516 0 61.6475 -23.666 61.8809 -23.8799\n+c5.45996 -5.05566 14.1846 -3.97168 18.2334 2.29492l22.3799 34.6553c1.05957 1.64062 1.91992 4.55762 1.91992 6.51074c0 2.57812 -1.41504 6.21191 -3.15723 8.1123c-1.45703 1.58887 -36.4658 38.9043 -103.423 38.9043\n+c-81.7578 0 -143.762 -62.0986 -143.762 -143.401c0 -82.3066 59.792 -145.567 144.484 -145.567c70.0752 0 108.259 43.8643 109.851 45.7314z\" \u002F>\n+    \u003Cglyph glyph-name=\"at\" unicode=\"&#xf1fa;\" \n+d=\"M256 440c138.023 0 248 -87.6533 248 -224c0 -75.7979 -41.3906 -147.41 -150.299 -147.41c-30.0977 0 -61.1885 -0.000976562 -70.71 34.1035c-17.6221 -22.6963 -48.0068 -38.333 -74.9912 -38.333c-59.2148 0 -96 40.5664 -96 105.87\n+c0 89.2256 63.251 151.46 137.831 151.46c19.5225 0 45.2744 -3.87402 59.9707 -21.7754l0.00976562 0.0917969c0.751953 6.62012 6.76953 11.9932 13.4326 11.9932v0h44.9805c15.083 0 26.4287 -13.75 23.5625 -28.5586l-23.4336 -121.11\n+c-3.43359 -17.167 -3.87207 -29.5703 13.4766 -30.0244c37.0771 3.95117 58.1699 44.9072 58.1699 83.6934c0 102.381 -83.8613 160 -184 160c-101.458 0 -184 -82.542 -184 -184s82.542 -184 184 -184c35.3145 0 69.9199 10.2432 99.4102 29.1572\n+c10.1934 6.53809 23.7021 4.24219 31.373 -5.12891l10.1768 -12.4336c9.07324 -11.084 6.45312 -27.5566 -5.55176 -35.3721c-40.0664 -26.083 -87.2539 -40.2227 -135.408 -40.2227c-137.081 0 -248 110.941 -248 248c0 137.081 110.941 248 248 248zM234.32 135.57\n+c24.2861 0 58.1611 27.6689 58.1611 72.7295c0 25.5293 -13.3096 40.7705 -35.6016 40.7705c-27.8506 0 -58.6299 -27.7363 -58.6299 -72.7295c0 -25.1475 13.8213 -40.7705 36.0703 -40.7705z\" \u002F>\n+    \u003Cglyph glyph-name=\"eye-dropper\" unicode=\"&#xf1fb;\" \n+d=\"M50.75 114.75l126.63 126.61l128 -128l-126.64 -126.62c-12 -12 -28.2803 -18.7402 -45.25 -18.7402h-45.4902l-56 -32l-32 32l32 56v45.4902c0 16.9795 6.75 33.2598 18.75 45.2598zM483.88 419.88c37.5 -37.4902 37.5 -98.2695 -0.00976562 -135.75l-77.0898 -77.0898\n+l13.0996 -13.0996c9.37012 -9.37012 9.37012 -24.5703 0 -33.9404l-40.9697 -40.96c-9.29004 -9.30957 -24.5 -9.44043 -33.9404 0l-161.939 161.94c-9.37012 9.36914 -9.37012 24.5693 0 33.9395l40.9697 40.9697c9.29004 9.31055 24.5 9.44043 33.9404 0l13.0996 -13.0996\n+l77.0898 77.0898c37.4697 37.5 98.2803 37.5 135.75 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"paint-brush\" unicode=\"&#xf1fc;\" \n+d=\"M167.02 138.66l88.0107 -73.3398c0.319336 -3.05078 0.969727 -6.02051 0.969727 -9.12988c0 -76.4209 -52.1396 -120.19 -128 -120.19c-90.0703 0 -128 72.3799 -128.01 154.73c9.79004 -6.68066 44.1396 -34.3506 55.25 -34.3506\n+c6.58984 0 12.2402 3.77051 14.5898 9.98047c20.6602 54.4395 57.0703 69.7197 97.1895 72.2998zM457.89 448c28.1104 0 54.1104 -20.6396 54.1104 -49.5498c0 -16.1406 -6.51953 -31.6406 -13.9004 -45.9902c-113.05 -210.99 -149.05 -256.46 -211.159 -256.46\n+c-7.75 0 -15.1807 1.23047 -22.3906 3.03027l-63.8193 53.1797c-5.48047 11.9404 -8.73047 25 -8.73047 38.7002c0 53.75 21.2695 58.04 225.68 240.64c10.8398 9.74023 25.0508 16.4502 40.21 16.4502z\" \u002F>\n+    \u003Cglyph glyph-name=\"birthday-cake\" unicode=\"&#xf1fd;\" horiz-adv-x=\"448\" \n+d=\"M448 64c-28.0195 0 -31.2598 32 -74.5 32c-43.4297 0 -46.8252 -32 -74.75 -32c-27.6953 0 -31.4541 32 -74.75 32c-42.8418 0 -47.2178 -32 -74.5 -32c-28.1484 0 -31.2021 32 -74.75 32c-43.5469 0 -46.6533 -32 -74.75 -32v80c0 26.5 21.5 48 48 48h16v144h64v-144h64\n+v144h64v-144h64v144h64v-144h16c26.5 0 48 -21.5 48 -48v-80zM448 -64h-448v96c43.3564 0 46.7666 32 74.75 32c27.9512 0 31.2529 -32 74.75 -32c42.8428 0 47.2168 32 74.5 32c28.1484 0 31.2012 -32 74.75 -32c43.3574 0 46.7666 32 74.75 32\n+c27.4883 0 31.252 -32 74.5 -32v-96zM96 352c-17.75 0 -32 14.25 -32 32c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40zM224 352c-17.75 0 -32 14.25 -32 32c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40zM352 352c-17.75 0 -32 14.25 -32 32\n+c0 31 32 23 32 64c12 0 32 -29.5 32 -56s-14.25 -40 -32 -40z\" \u002F>\n+    \u003Cglyph glyph-name=\"chart-area\" unicode=\"&#xf1fe;\" \n+d=\"M500 64c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-488c-6.59961 0 -12 5.40039 -12 12v360c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-308h436zM372.7 288.5c6 4 14.2002 1.7998 17.3994 -4.7002l89.9004 -187.8h-384v104\n+l86.7998 144.7c4.40039 7.2998 14.7998 7.7998 19.9004 1l85.2998 -113.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"chart-pie\" unicode=\"&#xf200;\" horiz-adv-x=\"544\" \n+d=\"M527.79 160c9.5498 0 17.4004 -8.38965 16.0596 -17.8496c-7.80957 -55.25 -34.4297 -104.4 -73.1299 -140.86c-6.20996 -5.84961 -16.1494 -5.36035 -22.1895 0.679688l-158.03 158.03h237.29zM511.96 224.8c0.629883 -9.12012 -7.0498 -16.7998 -16.1904 -16.7998\n+h-223.77v223.76c0 9.14062 7.67969 16.8301 16.7998 16.2002c119.46 -8.24023 214.92 -103.7 223.16 -223.16zM224 160l155.86 -155.87c6.84961 -6.84961 6.33008 -18.4795 -1.57031 -24.0801c-38.29 -27.1602 -84.8604 -43.3994 -135.26 -44.0303\n+c-128.2 -1.60938 -238.53 103.471 -242.891 231.61c-4.23926 124.771 86.8506 228.88 206.021 245.72c9.4502 1.34082 17.8398 -6.50977 17.8398 -16.0596v-237.29z\" \u002F>\n+    \u003Cglyph glyph-name=\"chart-line\" unicode=\"&#xf201;\" \n+d=\"M496 64c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-464c-17.6699 0 -32 14.3301 -32 32v336c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-304h432zM464 352c8.83984 0 16 -7.16016 15.9902 -16v-118.05\n+c0 -21.3799 -25.8506 -32.0898 -40.9707 -16.9697l-32.3994 32.3994l-96 -96c-12.4902 -12.5 -32.75 -12.5 -45.25 0l-73.3701 73.3701l-46.0596 -46.0703c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6191 22.6201c-6.25 6.25 -6.25 16.3799 0 22.6299l68.6895 68.6904\n+c12.4902 12.5 32.75 12.5 45.25 0l73.3701 -73.3701l73.3701 73.3799l-32.4004 32.4004c-15.1201 15.1201 -4.41016 40.9697 16.9707 40.9697h118.06z\" \u002F>\n+    \u003Cglyph glyph-name=\"toggle-off\" unicode=\"&#xf204;\" horiz-adv-x=\"576\" \n+d=\"M384 384c106.039 0 192 -85.9609 192 -192s-85.9609 -192 -192 -192h-192c-106.039 0 -192 85.9609 -192 192s85.9609 192 192 192h192zM64 192c0 -70.751 57.2588 -128 128 -128c70.751 0 128 57.2588 128 128c0 70.751 -57.2588 128 -128 128\n+c-70.751 0 -128 -57.2588 -128 -128zM384 64c70.751 0 128 57.2598 128 128c0 70.751 -57.2588 128 -128 128h-48.9053c65.2363 -72.8799 65.2168 -183.142 0 -256h48.9053z\" \u002F>\n+    \u003Cglyph glyph-name=\"toggle-on\" unicode=\"&#xf205;\" horiz-adv-x=\"576\" \n+d=\"M384 384c106 0 192 -86 192 -192s-86 -192 -192 -192h-192c-106 0 -192 86 -192 192s86 192 192 192h192zM384 64c70.7002 0 128 57.2002 128 128c0 70.7002 -57.2002 128 -128 128c-70.7002 0 -128 -57.2002 -128 -128c0 -70.7002 57.2002 -128 128 -128z\" \u002F>\n+    \u003Cglyph glyph-name=\"bicycle\" unicode=\"&#xf206;\" horiz-adv-x=\"640\" \n+d=\"M512.509 255.999c70.9502 -0.276367 128.562 -59.0547 127.477 -129.996c-1.07422 -70.1934 -58.6494 -126.681 -129.255 -125.996c-68.8301 0.667969 -126.584 58.8857 -126.729 127.719c-0.078125 37.3564 15.8516 70.9893 41.3066 94.4375l-14.9375 24.0674\n+l-85.9619 -138.863c-3.88477 -6.27441 -13.0264 -11.3672 -20.4062 -11.3672h-52.0332c-14.209 -55.207 -64.3252 -96 -123.967 -96c-70.9473 0 -128.415 57.7207 -128 128.764c0.410156 70.2246 58.0918 127.406 128.317 127.236\n+c15.0879 -0.0371094 29.5586 -2.69043 42.9912 -7.51953l29.417 47.5195h-48.7256c-13.1191 0 -23.7627 10.5186 -23.9951 23.5635c-0.241211 13.4375 11.0947 24.4365 24.5361 24.4365h87.459c8.83691 0 16 -7.16309 16 -16v-16h113.544l-14.8955 24h-50.6494\n+c-8.83691 0 -16 7.16309 -16 16v16c0 8.83691 7.16309 16 16 16h64h0.000976562c7.36914 0 16.5049 -5.08203 20.3906 -11.3428l77.6807 -125.153c14.4053 5.54004 30.0625 8.55957 46.4355 8.49512zM186.75 182.228l-23.6641 -38.2275h43.3057\n+c-2.96875 14.5674 -9.91504 27.6992 -19.6416 38.2275zM128.002 48c32.7383 0 60.9297 19.7754 73.2998 48h-81.2998c-18.7891 0 -30.2871 20.6729 -20.4062 36.6318l45.5049 73.5088c-5.5127 1.20605 -11.2295 1.85938 -17.0986 1.85938c-44.1123 0 -80 -35.8877 -80 -80\n+s35.8877 -80 80 -80zM290.632 144l74.2861 120h-127.547l-24.7461 -39.9736c22.8271 -20.1328 38.4229 -48.2705 42.3828 -80.0264h35.624zM507.689 48.1143c46.0605 -2.43164 84.3115 34.3447 84.3125 79.8848c0 44.1123 -35.8877 80 -80 80h-0.0390625\n+c-5.55664 0 -14.4355 -1.11914 -19.8193 -2.49707l44.4688 -71.6426c4.66113 -7.50879 2.35156 -17.3721 -5.15625 -22.0322l-13.5938 -8.4375c-7.50879 -4.65918 -17.3721 -2.35156 -22.0322 5.15625l-44.4326 71.5859\n+c-12.7021 -14.7451 -20.1475 -34.1416 -19.3359 -55.2627c1.57812 -41.0635 34.5918 -74.5898 75.6279 -76.7549z\" \u002F>\n+    \u003Cglyph glyph-name=\"bus\" unicode=\"&#xf207;\" \n+d=\"M488 320c13.25 0 24 -10.7402 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-8v-166.4c0 -12.7998 -9.59961 -25.5996 -25.5996 -25.5996h-6.40039v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\n+c-17.6699 0 -32 14.3301 -32 32v32c-17.6699 0 -32 14.3301 -32 32v160h-8c-13.25 0 -24 10.75 -24 24v80c0 13.2598 10.75 24 24 24h8v48c0 44.7998 99.2002 80 224 80s224 -35.2002 224 -80v-48h8zM112 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 160h256c17.6699 0 32 14.3301 32 32v128c0 17.6699 -14.3301 32 -32 32h-256c-17.6699 0 -32 -14.3301 -32 -32v-128c0 -17.6699 14.3301 -32 32 -32zM400 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"closed-captioning\" unicode=\"&#xf20a;\" \n+d=\"M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM218.1 160.3c-41.1992 -37.8994 -92.1992 -15.3994 -92.2998 32.6006c0 46.0996 53.7998 63.1992 94.6006 31.1992\n+c2.89941 -2.2998 7.19922 -1.39941 9.09961 1.7002l17.5 30.5c1.5 2.5 1.09961 3.7002 -1 5.7002c-50.7998 49.4004 -172.5 27.2002 -172.5 -70.0996c0 -100 119.2 -124.7 172.8 -67.9004c2 2.09961 2.2002 5.2998 0.5 7.7002l-19.5 27.7002\n+c-2.09961 3 -6.39941 3.39941 -9.2002 0.899414zM408.5 160.3c-41.2002 -37.8994 -92.2002 -15.3994 -92.2002 32.6006c0 46.0996 53.7998 63.1992 94.6006 31.1992c2.89941 -2.2998 7.19922 -1.39941 9.09961 1.7002l17.5 30.5c1.5 2.5 1.09961 3.7002 -1 5.7002\n+c-50.7998 49.4004 -172.5 27.2002 -172.5 -70.0996c0 -100 119.2 -124.801 172.7 -67.9004c2 2.09961 2.2002 5.2998 0.5 7.7002l-19.5 27.7002c-2.10059 3 -6.40039 3.39941 -9.2002 0.899414z\" \u002F>\n+    \u003Cglyph glyph-name=\"shekel-sign\" unicode=\"&#xf20b;\" horiz-adv-x=\"448\" \n+d=\"M248 280c0 30.9297 -25.0703 56 -56 56h-112v-352c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16v408c0 13.2598 10.75 24 24 24h168c75.1104 0 136 -60.8896 136 -136v-168c0 -8.83984 -7.16016 -16 -16 -16h-48c-8.83984 0 -16 7.16016 -16 16\n+v168zM432 416c8.83984 0 16 -7.16016 16 -16v-296c0 -75.1104 -60.8896 -136 -136 -136h-168c-13.25 0 -24 10.75 -24 24v280c0 8.83984 7.16016 16 16 16h48c8.83984 0 16 -7.16016 16 -16v-224h112c30.9297 0 56 25.0703 56 56v296c0 8.83984 7.16016 16 16 16h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"cart-plus\" unicode=\"&#xf217;\" horiz-adv-x=\"576\" \n+d=\"M504.717 128h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -31.2021 -25.5186 -56.4443 -56.8242 -55.9941\n+c-29.8232 0.428711 -54.3496 24.6309 -55.1543 54.4473c-0.44043 16.2871 6.08496 31.0488 16.8027 41.5479h-209.648c10.377 -10.166 16.8242 -24.3271 16.8242 -40.001c0 -31.8135 -26.5283 -57.4307 -58.6699 -55.9385c-28.54 1.3252 -51.751 24.3857 -53.251 52.917\n+c-1.1582 22.0342 10.4355 41.4551 28.0508 51.5869l-70.2471 343.435h-69.8828c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2275 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782\n+c15.4004 0 26.8154 -14.3008 23.4023 -29.3193l-47.2725 -208c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807zM408 280h-48v40c0 8.83691 -7.16309 16 -16 16h-16c-8.83691 0 -16 -7.16309 -16 -16v-40h-48c-8.83691 0 -16 -7.16309 -16 -16v-16\n+c0 -8.83691 7.16309 -16 16 -16h48v-40c0 -8.83691 7.16309 -16 16 -16h16c8.83691 0 16 7.16309 16 16v40h48c8.83691 0 16 7.16309 16 16v16c0 8.83691 -7.16309 16 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"cart-arrow-down\" unicode=\"&#xf218;\" horiz-adv-x=\"576\" \n+d=\"M504.717 128h-293.145l6.54492 -32h268.418c15.4004 0 26.8154 -14.3008 23.4033 -29.3193l-5.51758 -24.2754c18.6914 -9.07324 31.5791 -28.2334 31.5791 -50.4053c0 -31.2021 -25.5186 -56.4443 -56.8242 -55.9941\n+c-29.8232 0.428711 -54.3496 24.6309 -55.1543 54.4473c-0.44043 16.2871 6.08496 31.0488 16.8027 41.5479h-209.648c10.377 -10.166 16.8242 -24.3271 16.8242 -40.001c0 -31.8135 -26.5283 -57.4307 -58.6699 -55.9385c-28.54 1.3252 -51.751 24.3857 -53.251 52.917\n+c-1.1582 22.0342 10.4355 41.4551 28.0508 51.5869l-70.2471 343.435h-69.8828c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h102.529c11.4004 0 21.2275 -8.02148 23.5127 -19.1904l9.16602 -44.8096h392.782\n+c15.4004 0 26.8154 -14.3008 23.4023 -29.3193l-47.2725 -208c-2.4834 -10.9268 -12.1973 -18.6807 -23.4033 -18.6807zM403.029 256h-43.0293v60c0 6.62695 -5.37305 12 -12 12h-24c-6.62695 0 -12 -5.37305 -12 -12v-60h-43.0293\n+c-10.6904 0 -16.0449 -12.9258 -8.48438 -20.4854l67.0283 -67.0283c4.68652 -4.68652 12.2842 -4.68652 16.9717 0l67.0283 67.0283c7.55957 7.55957 2.20508 20.4854 -8.48535 20.4854z\" \u002F>\n+    \u003Cglyph glyph-name=\"ship\" unicode=\"&#xf21a;\" horiz-adv-x=\"640\" \n+d=\"M496.616 75.3613c17.8418 -44.3604 58.5664 -75.3613 119.384 -75.3613c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c-61.0322 0 -107.505 20.6162 -143.258 59.3965c-14.4189 -34.8281 -48.7637 -59.3965 -88.7422 -59.3965h-128\n+c-39.9785 0 -74.3232 24.5684 -88.7422 59.3965c-35.7588 -38.7861 -82.2344 -59.3965 -143.258 -59.3965c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c61.5869 0 101.828 31.7129 119.384 75.3613l-70.0117 70.0117\n+c-16.918 16.9189 -9.91699 45.7793 12.8359 53.0918l41.792 13.4336v140.102c0 17.6729 14.3271 32 32 32h64v40c0 13.2549 10.7451 24 24 24h144c13.2549 0 24 -10.7451 24 -24v-40h64c17.6729 0 32 -14.3271 32 -32v-140.102l41.792 -13.4336\n+c22.7783 -7.32129 29.7354 -36.1914 12.8359 -53.0918zM192 320v-87.5312l118.208 37.9951c2.63574 0.847656 7.02344 1.53516 9.79199 1.53516s7.15625 -0.6875 9.79199 -1.53516l118.208 -37.9951v87.5312h-256z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-secret\" unicode=\"&#xf21b;\" horiz-adv-x=\"448\" \n+d=\"M383.9 139.7c38.2998 -23.7002 64.0996 -65.7002 64.0996 -114.101v-44.7998c0 -24.7002 -20.0996 -44.7998 -44.7998 -44.7998h-358.4c-24.7002 0 -44.7998 20.0996 -44.7998 44.7998v44.7998c0 49.7002 27.2998 92.6006 67.4004 115.9l-25.8008 60.2002\n+c-4.5 10.5996 3.2002 22.2998 14.7002 22.2998h57.5c-11 18.9004 -17.7998 40.5996 -17.7998 64v0.299805c-39.2002 7.7998 -64 19.1006 -64 31.7002c0 13.2998 27.2998 25.0996 70 33c9.2002 32.7998 27.0996 65.7998 40.5996 82.7998\n+c9.5 11.9004 25.9004 15.6006 39.5 8.7998l27.6006 -13.7998c9 -4.5 19.5996 -4.5 28.5996 0l27.6006 13.7998c13.5996 6.80078 30 3.10059 39.5 -8.7998c13.5996 -17 31.3994 -50 40.5996 -82.7998c42.7998 -7.90039 70.0996 -19.7002 70.0996 -33\n+c0 -12.5996 -24.7998 -23.9004 -64 -31.7002v-0.299805c0 -23.4004 -6.7998 -45.0996 -17.7998 -64h58.5c11.2998 0 19 -11.2002 15 -21.7002zM176 -32l32 120l-24 40l-49.5996 32zM272 -32l41.5996 192l-49.5996 -32l-24 -40zM313.7 266.5\n+c0.799805 2.59961 6.2998 5.7002 6.39941 5.7998v10.7998c-28.2998 -3.69922 -61 -5.7998 -96 -5.7998s-67.6992 2.2002 -96 5.7998v-10.7998c0 -0.0996094 5.5 -3.2998 6.30078 -5.7998c3.7998 -11.9004 7 -24.5996 16.5 -33.4004c8 -7.39941 47 -25.1992 64 25\n+c2.89941 8.40039 15.5 8.40039 18.2998 0c16 -47.3994 53.8994 -34.2998 64 -25c9.5 8.80078 12.5996 21.5 16.5 33.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"motorcycle\" unicode=\"&#xf21c;\" horiz-adv-x=\"640\" \n+d=\"M512.9 256c69.5996 -0.5 126.5 -57.2998 127.199 -126.9c0.600586 -71.5996 -57.5996 -129.8 -129.199 -129.1c-69.6006 0.599609 -126.301 57.5 -126.801 127.1c-0.299805 39.3008 17.2002 74.5 44.8008 98.2002l-12.5 20.7998\n+c-38.7002 -31.2998 -58.3008 -77.8994 -56.2002 -125c0.599609 -13.6992 -10.2998 -25.0996 -24 -25.0996h-84.2002c-14.2998 -55.2002 -64.4004 -96 -124 -96c-71.7002 0 -129.6 58.9004 -128 131c1.59961 67.4004 55.9004 122.5 123.2 124.9\n+c14.3994 0.5 28.2998 -1.30078 41.2998 -5.2002l11.2998 20.5c-9.09961 13.8994 -23.2998 24.7998 -47.7998 24.7998h-56c-13.0996 0 -23.7998 10.5 -24 23.5c-0.299805 13.5 11 24.5 24.5 24.5h55.5c55 0 82.2002 -16.9004 99.9004 -40h153.699l-19.1992 32h-66.4004\n+c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h80c8.40039 0 16.2002 -4.40039 20.5996 -11.5996l22.8008 -38l37.5 41.6992c4.5 5 11 7.90039 17.7998 7.90039h45.2998c13.2998 0 24 -10.7002 24 -24v-32c0 -13.2998 -10.7002 -24 -24 -24h-82.4004\n+l32.9004 -54.9004c13.2998 4.60059 27.5 7 42.4004 6.90039zM128 48c32.7002 0 60.9004 19.7998 73.2998 48h-81.2998c-18.2002 0 -29.7998 19.5996 -21 35.5996l41.5 75.4004c-4.09961 0.700195 -8.2998 1 -12.5 1c-44.0996 0 -80 -35.9004 -80 -80s35.9004 -80 80 -80z\n+M591.9 123.6c2.39941 46.1006 -34.3008 84.4004 -79.9004 84.3008c-5.40039 0 -10.7002 -0.5 -15.9004 -1.60059l48.6006 -80.8994c4.5 -7.60059 2.09961 -17.5 -5.5 -22l-13.7002 -8.2002c-7.59961 -4.5 -17.5 -2.10059 -22 5.5l-49.4004 82.3994\n+c-13.6992 -14.2998 -22.0996 -33.6992 -22.0996 -55.0996c0 -45.5996 38.2998 -82.4004 84.4004 -79.9004c40.5 2.10059 73.2998 34.9004 75.5 75.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"street-view\" unicode=\"&#xf21d;\" \n+d=\"M367.9 118.24c85.2295 -15.5801 144.1 -48.29 144.1 -86.2402c0 -53.0195 -114.62 -96 -256 -96s-256 42.9805 -256 96c0 37.9502 58.8701 70.6602 144.1 86.2402c4.62012 -5.2998 9.78027 -10.1006 15.9004 -13.6504v-22.9395\n+c-66.5195 -9.35059 -112 -28.0508 -112 -49.6504c0 -30.9297 93.1201 -56 208 -56s208 25.0703 208 56c0 21.5996 -45.4805 40.3096 -112 49.6504v22.9395c6.12012 3.5498 11.2803 8.35059 15.9004 13.6504zM256 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64\n+s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM192 128c-17.6699 0 -32 14.3301 -32 32v96c0 26.5098 21.4902 48 48 48h11.7998c11.0703 -5.03027 23.2598 -8 36.2002 -8s25.1299 2.96973 36.2002 8h11.7998c26.5098 0 48 -21.4902 48 -48v-96\n+c0 -17.6699 -14.3301 -32 -32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v96z\" \u002F>\n+    \u003Cglyph glyph-name=\"heartbeat\" unicode=\"&#xf21e;\" \n+d=\"M320.2 204.2l22.0996 -44.2002h109.101l-182.601 -186.5c-7.09961 -7.2998 -18.5996 -7.2998 -25.7002 0l-182.5 186.5h94.1006l30 71.7002l56.8994 -126.3c5.5 -12.3008 22.9004 -12.7002 28.9004 -0.600586zM473.7 374.1\n+c48.7002 -49.7998 50.7998 -129.1 7.2998 -182.1h-118.9l-27.5996 55.2002c-5.90039 11.7998 -22.7002 11.7998 -28.5996 0l-49 -97.9004l-58.2002 129.3c-5.7998 12.8008 -24 12.5 -29.4004 -0.399414l-35.8994 -86.2002h-102.4c-43.5 53 -41.4004 132.3 7.2998 182.1\n+l2.40039 2.40039c51.5 52.7002 135.899 52.7002 187.399 0l27.9004 -28.5l27.9004 28.5996c51.5996 52.6006 135.899 52.6006 187.399 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"venus\" unicode=\"&#xf221;\" horiz-adv-x=\"288\" \n+d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM64 272c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"mars\" unicode=\"&#xf222;\" horiz-adv-x=\"384\" \n+d=\"M372 384c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 144 144\n+c28.2002 0 54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 64c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"mercury\" unicode=\"&#xf223;\" horiz-adv-x=\"288\" \n+d=\"M288 240c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 44.2002 19.9004 83.7002 51.2002 110c-2.5 1.90039 -4.90039 3.7998 -7.2002 5.7998c-24.7998 21.2002 -39.7998 48.7998 -43.2002 78.9004\n+c-0.899414 7.09961 4.7002 13.2998 11.9004 13.2998h40.5c5.7002 0 10.5996 -4.09961 11.7002 -9.7998c2.5 -12.5 9.59961 -24.2998 20.6992 -33.7998c15.4004 -13.2002 36.1006 -20.4004 58.4004 -20.4004s43 7.2002 58.2998 20.4004\n+c11.1006 9.5 18.2998 21.2998 20.7002 33.7998c1.09961 5.7002 6 9.7998 11.7998 9.7998h40.5c7.2002 0 12.7998 -6.2002 11.9004 -13.2998c-3.40039 -30 -18.5 -57.6006 -43.2002 -78.7998c-2.2998 -2 -4.7002 -4 -7.2002 -5.80078\n+c31.2998 -26.3994 51.2002 -65.8994 51.2002 -110.1zM64 240c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"transgender\" unicode=\"&#xf224;\" horiz-adv-x=\"384\" \n+d=\"M372 448c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -68.5 -47.9004 -125.8 -112 -140.4v-27.5996h36c6.59961 0 12 -5.40039 12 -12v-40\n+c0 -6.59961 -5.40039 -12 -12 -12h-36v-28c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v28h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v27.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144\n+c28.2002 0 54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 128c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"transgender-alt\" unicode=\"&#xf225;\" horiz-adv-x=\"480\" \n+d=\"M468 448c6.59961 0 12 -5.40039 12 -12v-79c0 -10.7002 -12.9004 -16.0996 -20.5 -8.5l-16.9004 16.9004l-80.6992 -80.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -68.5 -47.9004 -125.8 -112 -140.4v-27.5996h36c6.59961 0 12 -5.40039 12 -12v-40\n+c0 -6.59961 -5.40039 -12 -12 -12h-36v-28c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v28h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v27.5996c-64.0996 14.5 -112 71.9004 -112 140.4\n+c0 28.2002 8.09961 54.5 22.2002 76.5996l-16.5 16.5l-19.7998 -19.7998c-4.7002 -4.7002 -12.3008 -4.7002 -17 0l-28.3008 28.2998c-4.69922 4.7002 -4.69922 12.3008 0 17l19.8008 19.8008l-19 19l-16.9004 -16.9004c-7.59961 -7.5 -20.5 -2.2002 -20.5 8.5v79\n+c0 6.59961 5.40039 12 12 12h79c10.7002 0 16.0996 -12.9004 8.40039 -20.4004l-16.9004 -16.8994l19 -19l19.7998 19.7998c4.7002 4.7002 12.2998 4.7002 17 0l28.2998 -28.2998c4.7002 -4.7002 4.7002 -12.2998 0 -17l-19.7998 -19.7998l16.5 -16.5\n+c22.2002 14 48.5 22.0996 76.7002 22.0996s54.5 -8.09961 76.7002 -22.0996l80.7002 80.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM240 128c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"venus-double\" unicode=\"&#xf226;\" \n+d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40\n+c0 6.59961 5.40039 12 12 12h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM64 272c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80zM400 131.6v-51.5996h36\n+c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h36v51.5996\n+c-21.2002 4.80078 -40.5996 14.3008 -57.2002 27.3008c14 16.6992 25 36 32.1006 57.0996c14.5 -14.7998 34.6992 -24 57.0996 -24c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80c-22.2998 0 -42.5996 -9.2002 -57.0996 -24\n+c-7.10059 21.0996 -18 40.4004 -32.1006 57.0996c24.6006 19.3008 55.5 30.9004 89.2002 30.9004c79.5 0 144 -64.5 144 -144c0 -68.5 -47.9004 -125.9 -112 -140.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"mars-double\" unicode=\"&#xf227;\" \n+d=\"M340 448c6.59961 0 12 -5.40039 12 -12v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-2.90039 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144\n+s64.5 144 144 144c28.2002 0 54.5 -8.09961 76.7002 -22.0996l48.7002 48.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 160c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80zM500 288.1\n+c6.59961 0 12 -5.39941 12 -12.0996v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-3 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144c-74.4004 0 -135.6 56.4004 -143.2 128.9\n+c21.7998 2 43.2998 8.19922 63.2998 18.3994c-0.0996094 -1 -0.0996094 -2.09961 -0.0996094 -3.2002c0 -44.0996 35.9004 -80 80 -80s80 35.9004 80 80c0 44.1006 -35.9004 80 -80 80c-1 0 -2.09961 -0.0996094 -3.2002 -0.0996094\n+c10.2002 20 16.2998 41.5 18.4004 63.2998c22.5 -2.39941 43.2998 -9.89941 61.5 -21.2998l48.7002 48.7002l-16.9004 16.8994c-7.5 7.60059 -2.2002 20.5 8.5 20.5h79z\" \u002F>\n+    \u003Cglyph glyph-name=\"venus-mars\" unicode=\"&#xf228;\" horiz-adv-x=\"576\" \n+d=\"M564 448c6.59961 0 12 -5.40039 12 -12v-79c0 -7.2002 -5.90039 -12 -12.0996 -12c-3 0 -6 1.09961 -8.40039 3.5l-16.9004 16.9004l-48.6992 -48.7002c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144\n+c-33.7002 0 -64.7002 11.5 -89.2002 30.9004c14.1006 16.6992 25 36 32.1006 57.0996c14.5 -14.7998 34.7998 -24 57.0996 -24c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80c-22.4004 0 -42.5996 -9.2002 -57.0996 -24\n+c-7.10059 21.0996 -18.1006 40.4004 -32.1006 57.0996c24.6006 19.3008 55.5 30.9004 89.2002 30.9004c28.2002 0 54.5 -8.09961 76.7002 -22.0996l48.7002 48.6992l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 384c79.5 0 144 -64.5 144 -144\n+c0 -68.5 -47.9004 -125.8 -112 -140.4v-51.5996h36c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-36v-36c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v36h-36c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12\n+h36v51.5996c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144zM144 160c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"mars-stroke\" unicode=\"&#xf229;\" horiz-adv-x=\"384\" \n+d=\"M372 384c6.59961 0 12 -5.40039 12.0996 -12v-78.9004c0 -10.6992 -12.8994 -16.0996 -20.5 -8.5l-16.8994 16.9004l-17.5 -17.5l14.0996 -14.0996c4.7002 -4.7002 4.7002 -12.3008 0 -17l-28.2998 -28.3008c-4.7002 -4.69922 -12.2998 -4.69922 -17 0l-14.0996 14.1006\n+l-18 -18c14 -22.2002 22.0996 -48.5 22.0996 -76.7002c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 143.9 144c28.1992 0 54.5 -8.09961 76.6992 -22.0996l18 18l-14.0996 14.0996c-4.7002 4.7002 -4.7002 12.2998 0 17l28.2998 28.2002\n+c4.7002 4.7002 12.2998 4.7002 17 0l14.1006 -14.1006l17.5 17.5l-16.9004 16.9004c-7.5 7.59961 -2.2002 20.5 8.5 20.5h79zM144 64c44.0996 0 80 35.9004 80 80s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"mars-stroke-v\" unicode=\"&#xf22a;\" horiz-adv-x=\"288\" \n+d=\"M245.8 213.8c56.2998 -56.2002 56.2998 -147.399 0 -203.6c-56.2002 -56.2002 -147.399 -56.2002 -203.6 0s-56.2002 147.399 0 203.6c19.8994 19.9004 44.2002 32.7998 69.7998 38.6006v25.3994h-20c-6.59961 0 -12 5.40039 -12 12v40c0 6.60059 5.40039 12 12 12h20\n+v24.7002h-23.9004c-10.6992 0 -16.0996 12.9004 -8.5 20.5l55.9004 55.9004c4.7002 4.69922 12.2998 4.69922 17 0l55.9004 -55.8008c7.5 -7.59961 2.19922 -20.5 -8.5 -20.5h-23.9004v-24.7998h20c6.59961 0 12 -5.39941 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20\n+v-25.3994c25.5996 -5.80078 49.9004 -18.7002 69.7998 -38.6006zM200.6 55.4004c31.2002 31.1992 31.2002 82 0 113.1c-31.1992 31.2002 -81.8994 31.2002 -113.1 0s-31.2002 -81.9004 0 -113.1c31.2002 -31.2002 81.9004 -31.2002 113.1 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"mars-stroke-h\" unicode=\"&#xf22b;\" horiz-adv-x=\"480\" \n+d=\"M476.2 200.5c4.7002 -4.7002 4.7002 -12.2998 0.0996094 -17l-55.8994 -55.9004c-7.60059 -7.5 -20.5 -2.19922 -20.5 8.5v23.9004h-23.9004v-20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v20h-27.5996\n+c-5.80078 -25.5996 -18.7002 -49.9004 -38.6006 -69.7998c-56.2002 -56.2002 -147.399 -56.2002 -203.6 0s-56.2002 147.399 0 203.6s147.399 56.2002 203.6 0c19.9004 -19.8994 32.7998 -44.2002 38.6006 -69.7998h27.5996v20c0 6.59961 5.40039 12 12 12h40\n+c6.59961 0 12 -5.40039 12 -12v-20h23.7998v23.9004c0 10.6992 12.9004 16.0996 20.5 8.5zM200.6 135.4c31.2002 31.1992 31.2002 82 0 113.1c-31.1992 31.2002 -81.8994 31.2002 -113.1 0s-31.2002 -81.9004 0 -113.1c31.2002 -31.2002 81.9004 -31.2002 113.1 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"neuter\" unicode=\"&#xf22c;\" horiz-adv-x=\"288\" \n+d=\"M288 272c0 -68.5 -47.9004 -125.9 -112 -140.4v-151.6c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v151.6c-64.0996 14.5 -112 71.9004 -112 140.4c0 79.5 64.5 144 144 144s144 -64.5 144 -144zM144 192c44.0996 0 80 35.9004 80 80\n+s-35.9004 80 -80 80s-80 -35.9004 -80 -80s35.9004 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"genderless\" unicode=\"&#xf22d;\" horiz-adv-x=\"288\" \n+d=\"M144 272c-44.0996 0 -80 -35.9004 -80 -80s35.9004 -80 80 -80s80 35.9004 80 80s-35.9004 80 -80 80zM144 336c79.5 0 144 -64.5 144 -144s-64.5 -144 -144 -144s-144 64.5 -144 144s64.5 144 144 144z\" \u002F>\n+    \u003Cglyph glyph-name=\"server\" unicode=\"&#xf233;\" \n+d=\"M480 288h-448c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 376c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 376\n+c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM480 128h-448c-17.6729 0 -32 14.3271 -32 32v64c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 216\n+c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 216c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM480 -32h-448c-17.6729 0 -32 14.3271 -32 32v64\n+c0 17.6729 14.3271 32 32 32h448c17.6729 0 32 -14.3271 32 -32v-64c0 -17.6729 -14.3271 -32 -32 -32zM432 56c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24zM368 56c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\n+s24 10.7451 24 24s-10.7451 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-plus\" unicode=\"&#xf234;\" horiz-adv-x=\"640\" \n+d=\"M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-64v-64c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v64h-64c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h64v64c0 8.7998 7.2002 16 16 16h32\n+c8.7998 0 16 -7.2002 16 -16v-64h64zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352\n+c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-times\" unicode=\"&#xf235;\" horiz-adv-x=\"640\" \n+d=\"M589.6 208l45.6006 -45.5996c6.2998 -6.30078 6.2998 -16.5 0 -22.8008l-22.7998 -22.7998c-6.30078 -6.2998 -16.5 -6.2998 -22.8008 0l-45.5996 45.6006l-45.5996 -45.6006c-6.30078 -6.2998 -16.5 -6.2998 -22.8008 0l-22.7998 22.7998\n+c-6.2998 6.30078 -6.2998 16.5 0 22.8008l45.6006 45.5996l-45.6006 45.5996c-6.2998 6.30078 -6.2998 16.5 0 22.8008l22.7998 22.7998c6.30078 6.2998 16.5 6.2998 22.8008 0l45.5996 -45.6006l45.5996 45.6006c6.30078 6.2998 16.5 6.2998 22.8008 0l22.7998 -22.7998\n+c6.2998 -6.30078 6.2998 -16.5 0 -22.8008zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352\n+c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\n+    \u003Cglyph glyph-name=\"bed\" unicode=\"&#xf236;\" horiz-adv-x=\"640\" \n+d=\"M176 192c-44.1104 0 -80 35.8896 -80 80s35.8896 80 80 80s80 -35.8896 80 -80s-35.8896 -80 -80 -80zM528 320c61.8604 0 112 -50.1396 112 -112v-192c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48h-512v-48c0 -8.83984 -7.16016 -16 -16 -16\n+h-32c-8.83984 0 -16 7.16016 -16 16v352c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-208h224v144c0 8.83984 7.16016 16 16 16h224z\" \u002F>\n+    \u003Cglyph glyph-name=\"train\" unicode=\"&#xf238;\" horiz-adv-x=\"448\" \n+d=\"M448 352v-256c0 -51.8154 -61.624 -96 -130.022 -96l62.9805 -49.7207c5.94727 -4.69629 2.60352 -14.2793 -4.95801 -14.2793h-304c-7.57812 0 -10.8916 9.59375 -4.95703 14.2793l62.9795 49.7207c-68.2021 0 -130.022 44.0459 -130.022 96v256c0 53.0186 64 96 128 96\n+h192c65 0 128 -42.9814 128 -96zM400 216v112c0 13.2549 -10.7451 24 -24 24h-304c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24h304c13.2549 0 24 10.7451 24 24zM224 152c-30.9277 0 -56 -25.0723 -56 -56s25.0723 -56 56 -56s56 25.0723 56 56\n+s-25.0723 56 -56 56z\" \u002F>\n+    \u003Cglyph glyph-name=\"subway\" unicode=\"&#xf239;\" horiz-adv-x=\"448\" \n+d=\"M448 352v-256c0 -51.8154 -61.624 -96 -130.022 -96l62.9805 -49.7207c5.94727 -4.69629 2.60352 -14.2793 -4.95801 -14.2793h-304c-7.57812 0 -10.8916 9.59375 -4.95703 14.2793l62.9795 49.7207c-68.2021 0 -130.022 44.0459 -130.022 96v256c0 53.0186 64 96 128 96\n+h192c65 0 128 -42.9814 128 -96zM200 216v112c0 13.2549 -10.7451 24 -24 24h-104c-13.2549 0 -24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24h104c13.2549 0 24 10.7451 24 24zM400 216v112c0 13.2549 -10.7451 24 -24 24h-104c-13.2549 0 -24 -10.7451 -24 -24\n+v-112c0 -13.2549 10.7451 -24 24 -24h104c13.2549 0 24 10.7451 24 24zM352 160c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48s-21.4902 48 -48 48zM96 160c-26.5098 0 -48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48\n+s-21.4902 48 -48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"battery-full\" unicode=\"&#xf240;\" horiz-adv-x=\"640\" \n+d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\n+c0 26.5098 21.4902 48 48 48h512zM512 256v-128h-416v128h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"battery-three-quarters\" unicode=\"&#xf241;\" horiz-adv-x=\"640\" \n+d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\n+c0 26.5098 21.4902 48 48 48h512zM416 256v-128h-320v128h320z\" \u002F>\n+    \u003Cglyph glyph-name=\"battery-half\" unicode=\"&#xf242;\" horiz-adv-x=\"640\" \n+d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\n+c0 26.5098 21.4902 48 48 48h512zM320 256v-128h-224v128h224z\" \u002F>\n+    \u003Cglyph glyph-name=\"battery-quarter\" unicode=\"&#xf243;\" horiz-adv-x=\"640\" \n+d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\n+c0 26.5098 21.4902 48 48 48h512zM224 256v-128h-128v128h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"battery-empty\" unicode=\"&#xf244;\" horiz-adv-x=\"640\" \n+d=\"M544 288h-480v-192h480v64h32v64h-32v64zM560 352c26.5098 0 48 -21.4902 48 -48v-16h8c13.2549 0 24 -10.7451 24 -24v-144c0 -13.2549 -10.7451 -24 -24 -24h-8v-16c0 -26.5098 -21.4902 -48 -48 -48h-512c-26.5098 0 -48 21.4902 -48 48v224\n+c0 26.5098 21.4902 48 48 48h512z\" \u002F>\n+    \u003Cglyph glyph-name=\"mouse-pointer\" unicode=\"&#xf245;\" horiz-adv-x=\"320\" \n+d=\"M302.189 118.874h-106.084l55.8301 -135.993c3.88965 -9.42773 -0.554688 -19.999 -9.44336 -23.999l-49.165 -21.4268c-9.16504 -4 -19.4434 0.571289 -23.332 9.71387l-53.0527 129.136l-86.6641 -89.1377c-11.5498 -11.877 -30.2783 -2.7207 -30.2783 12.8564v429.678\n+c0 16.3994 19.9209 24.3945 30.2773 12.8555l284.412 -292.542c11.4717 -11.1787 3.00684 -31.1406 -12.5 -31.1406z\" \u002F>\n+    \u003Cglyph glyph-name=\"i-cursor\" unicode=\"&#xf246;\" horiz-adv-x=\"256\" \n+d=\"M256 395.952c0 -6.64648 -5.4043 -12.0098 -12.0498 -11.9922c-27.875 0.0712891 -83.9502 -3.20996 -83.9502 -48.1416v-111.818h36c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-36v-112c0 -44.9395 57.8887 -48.5527 83.8555 -48.2422\n+c6.68652 0.0800781 12.1445 -5.31055 12.1445 -11.998v-39.6445c0 -6.5957 -5.31836 -11.957 -11.9131 -12c-35.0654 -0.228516 -78.3525 0.62207 -116.087 37.8447c-38.4688 -37.9482 -83.6211 -38.3027 -116.158 -37.8936\n+c-6.56738 0.0820312 -11.8418 5.42969 -11.8418 11.999v39.9824c0 6.64648 5.4043 12.0098 12.0498 11.9932c27.875 -0.0722656 83.9502 3.02734 83.9502 47.959v112h-36c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h36v111.818\n+c0 44.9385 -57.8887 48.7344 -83.8555 48.4248c-6.68652 -0.0800781 -12.1445 5.31055 -12.1445 11.998v39.6445c0 6.5957 5.31836 11.957 11.9131 12c35.0654 0.228516 78.3525 -0.62207 116.087 -37.8447c38.4688 37.9482 83.6211 38.3027 116.158 37.8926\n+c6.56738 -0.0820312 11.8418 -5.42969 11.8418 -11.999v-39.9824z\" \u002F>\n+    \u003Cglyph glyph-name=\"object-group\" unicode=\"&#xf247;\" \n+d=\"M480 320v-288h20c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v20h-384v-20c0 -6.62695 -5.37305 -12 -12 -12h-40c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h20v320h-20\n+c-6.62695 0 -12 5.37305 -12 12v40c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-20h384v20c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-40c0 -6.62695 -5.37305 -12 -12 -12h-20v-32zM96 172c0 -6.62695 5.37305 -12 12 -12h168\n+c6.62695 0 12 5.37305 12 12v136c0 6.62695 -5.37305 12 -12 12h-168c-6.62695 0 -12 -5.37305 -12 -12v-136zM416 76v136c0 6.62695 -5.37305 12 -12 12h-84v-72c0 -13.2549 -10.7451 -24 -24 -24h-72v-52c0 -6.62695 5.37305 -12 12 -12h168c6.62695 0 12 5.37305 12 12z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"object-ungroup\" unicode=\"&#xf248;\" horiz-adv-x=\"576\" \n+d=\"M64 128v-26c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h26v192h-26c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h52c3.31152 0 6 -2.68848 6 -6v-26h288v26c0 3.31152 2.68848 6 6 6h52\n+c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-26v-192h26c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v26h-288zM544 192v-160h26c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-52\n+c-3.31152 0 -6 2.68848 -6 6v26h-288v-26c0 -3.31152 -2.68848 -6 -6 -6h-52c-3.31152 0 -6 2.68848 -6 6v52c0 3.31152 2.68848 6 6 6h26v72h136v-8c0 -13.2549 10.7451 -24 24 -24h64c13.2549 0 24 10.7451 24 24v64c0 13.2549 -10.7451 24 -24 24h-8v72h104v26\n+c0 3.31152 2.68848 6 6 6h52c3.31152 0 6 -2.68848 6 -6v-52c0 -3.31152 -2.68848 -6 -6 -6h-26v-32z\" \u002F>\n+    \u003Cglyph glyph-name=\"sticky-note\" unicode=\"&#xf249;\" horiz-adv-x=\"448\" \n+d=\"M312 128c-13.2002 0 -24 -10.7998 -24 -24v-136h-264c-13.2998 0 -24 10.7002 -24 24v400c0 13.2998 10.7002 24 24 24h400c13.2998 0 24 -10.7002 24 -24v-264h-136zM441 73l-98 -98c-4.5 -4.5 -10.5996 -7 -17 -7h-6v128h128v-6.09961\n+c0 -6.30078 -2.5 -12.4004 -7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"clone\" unicode=\"&#xf24d;\" \n+d=\"M464 448c26.5098 0 48 -21.4902 48 -48v-288c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h288zM176 32h208v-48c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v288\n+c0 26.5098 21.4902 48 48 48h48v-208c0 -44.1123 35.8877 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"balance-scale\" unicode=\"&#xf24e;\" horiz-adv-x=\"640\" \n+d=\"M256 112c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312zM128 272l-72 -144h144zM639.98 112\n+c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 128h144l-72 144zM528 0c8.83984 0 16 -7.16016 16 -16v-32\n+c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v294.75c-23.5195 10.29 -41.1602 31.4902 -46.3896 57.25h-129.61c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h144.36\n+c14.5996 19.3203 37.5498 32 63.6396 32s49.04 -12.6797 63.6396 -32h144.36c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-129.61c-5.22949 -25.7695 -22.8799 -46.96 -46.3896 -57.25v-294.75h176z\" \u002F>\n+    \u003Cglyph glyph-name=\"hourglass-start\" unicode=\"&#xf251;\" horiz-adv-x=\"384\" \n+d=\"M360 448c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336\n+c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336zM296 0c0 77.4834 -46.2139 144 -104 144\n+c-57.7959 0 -104 -66.542 -104 -144h208z\" \u002F>\n+    \u003Cglyph glyph-name=\"hourglass-half\" unicode=\"&#xf252;\" horiz-adv-x=\"384\" \n+d=\"M360 448c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336\n+c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336zM284.922 64\n+c-17.0596 46.8037 -52.1006 80 -92.9219 80c-40.8242 0 -75.8613 -33.2031 -92.9199 -80h185.842zM284.941 320c7.07129 19.4131 11.0586 41.1953 11.0586 64h-208c0 -22.748 3.98828 -44.5479 11.0781 -64h185.863z\" \u002F>\n+    \u003Cglyph glyph-name=\"hourglass-end\" unicode=\"&#xf253;\" horiz-adv-x=\"384\" \n+d=\"M360 384c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24\n+c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24zM192 240c57.4902 0 104 66.0547 104 144\n+h-208c0 -77.4824 46.2129 -144 104 -144z\" \u002F>\n+    \u003Cglyph glyph-name=\"hourglass\" unicode=\"&#xf254;\" horiz-adv-x=\"384\" \n+d=\"M360 384c0 -90.9648 -51.0156 -167.734 -120.842 -192c69.8262 -24.2656 120.842 -101.035 120.842 -192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-336c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24\n+c0 90.9648 51.0156 167.734 120.842 192c-69.8262 24.2656 -120.842 101.035 -120.842 192c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h336c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-rock\" unicode=\"&#xf255;\" \n+d=\"M464.8 368c26.2998 -0.400391 47.2002 -22.5 47.2002 -48.7998v-133.5c0 -12.7998 -2.5 -25.5 -7.5 -37.2998l-49 -116.301c-4.90039 -11.7998 -7.5 -24.5 -7.5 -37.2998v-2.89941c0 -13.3008 -10.7002 -24 -24 -24h-240c-13.2998 0 -24 10.6992 -24 24v6.69922\n+c0 13.7002 -5.90039 26.8008 -16.0996 35.9004l-111.7 99.2998c-20.5 18.2998 -32.2002 44.4004 -32.2002 71.7998v66.4004c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-48.1006l8 -7.09961v136\n+c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-31.2002h8v48c0 26.7998 21.9004 48.4004 48.7998 48c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-47.2002h8v32c0 26.7998 21.9004 48.4004 48.7998 48\n+c26.2998 -0.5 47.2002 -22.5 47.2002 -48.7998v-31.2002h8c0 26.7998 21.9004 48.4004 48.7998 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-paper\" unicode=\"&#xf256;\" horiz-adv-x=\"448\" \n+d=\"M408.781 319.993c21.7305 -0.416016 39.2188 -18.1621 39.2178 -39.9932v-150.359c0 -12.2998 -2.28711 -32.001 -5.10449 -43.9746l-26.5078 -112.66c-5.10156 -21.6816 -24.4502 -37.0059 -46.7236 -37.0059h-197.59c-13.4922 0 -30.8838 8.85645 -38.8193 19.7676\n+l-125.601 172.705c-12.9932 17.8672 -9.04297 42.8838 8.82129 55.877c17.8682 12.9941 42.8848 9.04297 55.877 -8.82227l31.6484 -43.5195v235.992c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-175.21h8v216\n+c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-215.21h8v177c0 21.8311 17.4883 39.5771 39.2188 39.9932c22.4248 0.428711 40.7812 -18.3535 40.7812 -40.7832v-176.21h8v87.21\n+c0 22.4297 18.3564 41.2119 40.7812 40.7832z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-scissors\" unicode=\"&#xf257;\" \n+d=\"M216 8c0 22.0918 17.9092 40 40 40v8h-32c-22.0908 0 -40 17.9082 -40 40s17.9092 40 40 40h32v8h-208c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48h208v13.5723l-177.551 69.7393c-24.6738 9.69434 -36.8184 37.5557 -27.125 62.2285\n+c9.69238 24.6738 37.5537 36.8174 62.2275 27.124l190.342 -74.7646l24.8721 31.0898c12.3066 15.3809 33.9785 19.5146 51.0811 9.74121l112 -64c11.125 -6.3584 20.1533 -21.917 20.1533 -34.7305v-240c0 -18.5615 -12.7695 -34.6855 -30.8379 -38.9365l-136 -32\n+c-2.49414 -0.586914 -6.59668 -1.06348 -9.1582 -1.06348h-0.00390625h-80c-22.0908 0 -40 17.9082 -40 40z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-lizard\" unicode=\"&#xf258;\" horiz-adv-x=\"576\" \n+d=\"M384 -32v61.4609c0 7.28906 -4.99707 16.3711 -11.1543 20.2734l-111.748 70.8105c-6.49316 4.11523 -18.0029 7.45508 -25.6904 7.45508h-0.000976562h-147.406c-13.2549 0 -24 10.7451 -24 24v8c0 35.3457 28.6543 64 64 64h123.648\n+c11.7754 0 25.0088 8.82227 29.5371 19.6924l21.4102 51.3848c4.94141 11.8555 -3.77051 24.9229 -16.6143 24.9229h-229.981c-30.9277 0 -56 25.0723 -56 56v16c0 13.2549 10.7451 24 24 24h333.544c14.6035 0 32.7852 -10.0205 40.583 -22.3682l163.04 -258.146\n+c8.1875 -12.9639 14.833 -35.9297 14.833 -51.2627v-0.000976562v-116.222h-192z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-spock\" unicode=\"&#xf259;\" \n+d=\"M481.3 350.9c21.4004 -5.10059 34.7002 -26.7002 29.7002 -48.2002l-36.2998 -152.5c-1.7002 -7.2002 -2.60059 -14.7002 -2.60059 -22.2002v-42c0 -9.2998 -1.39941 -18.4004 -4 -27.2998l-26.1992 -88.2998c-6 -20.4004 -24.7002 -34.4004 -46 -34.4004h-216.7\n+c-12.2002 0 -24 4.59961 -32.9004 13l-133.7 125.9c-16.0996 15.0996 -16.7998 40.3994 -1.69922 56.5c15.0996 16.0996 40.3994 16.7998 56.5 1.69922l60.5996 -57v79.4004l-39 171.6c-4.90039 21.6006 8.59961 43 30.0996 47.9004\n+c21.6006 4.90039 43 -8.59961 47.9004 -30.0996l34.7998 -152.801h9.7998l-47.5996 207c-5 21.5 8.5 43 30 47.9004c21.5996 4.90039 43 -8.5 48 -30.0996l51.7002 -224.9h15.0996l48.4004 193.7c5.39941 21.3994 27.0996 34.5 48.5 29.0996\n+c21.3994 -5.39941 34.5 -27.0996 29.0996 -48.5l-43.5996 -174.3h11.0996l30.7998 129.3c5.10059 21.4004 26.7002 34.7002 48.2002 29.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-pointer\" unicode=\"&#xf25a;\" horiz-adv-x=\"448\" \n+d=\"M448 208v-96c0 -3.08398 -0.356445 -6.15918 -1.06348 -9.16211l-32 -136c-4.25098 -18.0684 -20.375 -30.8379 -38.9365 -30.8379h-208c-11.2432 0 -25.7363 7.37988 -32.3496 16.4727l-127.997 176c-12.9932 17.8662 -9.04297 42.8838 8.82129 55.876\n+c17.8672 12.9941 42.8848 9.04297 55.877 -8.82227l31.6484 -43.5186v275.992c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-200h8v40c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-40h8v24c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-24h8\n+c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40zM192 128h-8v-96h8v96zM280 128h-8v-96h8v96zM368 128h-8v-96h8v96z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-peace\" unicode=\"&#xf25b;\" horiz-adv-x=\"448\" \n+d=\"M408 232c22.0918 0 40 -17.9092 40 -40v-80v-0.00488281c0 -2.56152 -0.476562 -6.66406 -1.06348 -9.15723l-32 -136c-4.25098 -18.0684 -20.375 -30.8379 -38.9365 -30.8379h-240h-0.000976562c-12.8125 0 -28.3711 9.0293 -34.7275 20.1543l-64 112\n+c-9.77441 17.1025 -5.64062 38.7744 9.74023 51.0811l31.0898 24.8721l-74.7646 190.342c-9.69336 24.6738 2.4502 52.5342 27.124 62.2266c24.6729 9.69434 52.5332 -2.4502 62.2275 -27.125l69.7393 -177.551h13.5723v208c0 26.5098 21.4902 48 48 48s48 -21.4902 48 -48\n+v-208h8v32c0 22.0908 17.9082 40 40 40s40 -17.9092 40 -40v-32h8c0 22.0908 17.9082 40 40 40z\" \u002F>\n+    \u003Cglyph glyph-name=\"trademark\" unicode=\"&#xf25c;\" horiz-adv-x=\"640\" \n+d=\"M260.6 352c6.60059 0 12 -5.40039 11.9004 -12v-43.0996c0 -6.60059 -5.40039 -12 -12 -12h-85.0996v-240.9c0 -6.59961 -5.40039 -12 -12 -12h-54.3008c-6.59961 0 -12 5.40039 -12 12v240.9h-85.0996c-6.59961 0 -12 5.39941 -12 12v43.0996\n+c0 6.59961 5.40039 12 12 12h248.6zM640 45c0.5 -7 -5 -13 -12 -13h-53.9004c-6.2998 0 -11.5996 4.90039 -12 11.2002l-9.09961 132.899c-1.7998 24.2002 0 53.7002 0 53.7002h-0.900391s-10.6992 -33.5996 -17.8994 -53.7002l-30.7002 -84.6992\n+c-1.7002 -4.7002 -6.2002 -7.90039 -11.2998 -7.90039h-50.2998c-5.10059 0 -9.60059 3.2002 -11.3008 7.90039l-30.6992 84.6992c-7.2002 20.1006 -17.9004 53.7002 -17.9004 53.7002h-0.900391s1.80078 -29.5 0 -53.7002l-9.09961 -132.899\n+c-0.5 -6.2998 -5.7002 -11.2002 -12 -11.2002h-54.5c-7.09961 0 -12.5996 6 -12 13l24.4004 296c0.599609 6.2002 5.7998 11 12 11h65.3994c5.10059 0 9.60059 -3.2998 11.2998 -8.09961l43.8008 -127.101c7.19922 -20.5996 16.0996 -52.7998 16.0996 -52.7998h0.900391\n+s8.89941 32.2002 16.0996 52.7998l43.7998 127.101c1.60059 4.7998 6.2002 8.09961 11.2998 8.09961h65.4004c6.2998 0 11.5 -4.7998 12 -11z\" \u002F>\n+    \u003Cglyph glyph-name=\"registered\" unicode=\"&#xf25d;\" \n+d=\"M285.363 240.525c0 -18.6006 -9.83105 -28.4316 -28.4316 -28.4316h-29.876v56.1406h23.3779c28.668 0 34.9297 -8.77344 34.9297 -27.709zM504 192c0 -136.967 -111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248s248 -111.033 248 -248z\n+M363.411 87.5859c-46.7295 84.8252 -43.2988 78.6357 -44.7021 80.9805c23.4316 15.1719 37.9453 42.9785 37.9453 74.4854c0 54.2441 -31.5 89.252 -105.498 89.252h-70.667c-13.2549 0 -24 -10.7451 -24 -24v-232.304c0 -13.2549 10.7451 -24 24 -24h22.5664\n+c13.2549 0 24 10.7451 24 24v71.6631h25.5566l44.1289 -82.9375c3.73828 -7.02441 13.2305 -12.7266 21.1875 -12.7266h24.4639c18.2617 0.000976562 29.8291 19.5908 21.0186 35.5869z\" \u002F>\n+    \u003Cglyph glyph-name=\"tv\" unicode=\"&#xf26c;\" horiz-adv-x=\"640\" \n+d=\"M592 448c26.4961 0 48 -21.5039 48 -48v-320c0 -26.4961 -21.5039 -48 -48 -48h-240v-32h176c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h176v32h-240\n+c-26.4961 0 -48 21.5039 -48 48v320c0 26.4961 21.5039 48 48 48h544zM576 96v288h-512v-288h512z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-plus\" unicode=\"&#xf271;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\n+c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM328 116c0 6.59961 -5.40039 12 -12 12h-60v60c0 6.59961 -5.40039 12 -12 12h-40\n+c-6.59961 0 -12 -5.40039 -12 -12v-60h-60c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h60v-60c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12v60h60c6.59961 0 12 5.40039 12 12v40z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-minus\" unicode=\"&#xf272;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\n+c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM316 64c6.59961 0 12 5.40039 12 12v40c0 6.59961 -5.40039 12 -12 12h-184\n+c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h184z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-times\" unicode=\"&#xf273;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-424c-6.59961 0 -12 5.40039 -12 12v36c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h48c26.5 0 48 -21.5 48 -48v-36\n+c0 -6.59961 -5.40039 -12 -12 -12zM12 256h424c6.59961 0 12 -5.40039 12 -12v-260c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v260c0 6.59961 5.40039 12 12 12zM269.3 96l48.1006 48.0996c4.69922 4.7002 4.69922 12.3008 0 17l-28.3008 28.3008\n+c-4.69922 4.69922 -12.2998 4.69922 -17 0l-48.0996 -48.1006l-48.0996 48.1006c-4.7002 4.69922 -12.3008 4.69922 -17 0l-28.3008 -28.3008c-4.69922 -4.69922 -4.69922 -12.2998 0 -17l48.1006 -48.0996l-48.1006 -48.0996c-4.69922 -4.7002 -4.69922 -12.3008 0 -17\n+l28.3008 -28.3008c4.69922 -4.69922 12.2998 -4.69922 17 0l48.0996 48.1006l48.0996 -48.1006c4.7002 -4.69922 12.3008 -4.69922 17 0l28.3008 28.3008c4.69922 4.69922 4.69922 12.2998 0 17z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-check\" unicode=\"&#xf274;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-424c-6.62695 0 -12 5.37305 -12 12v36c0 26.5098 21.4902 48 48 48h48v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h128v52c0 6.62695 5.37305 12 12 12h40c6.62695 0 12 -5.37305 12 -12v-52h48c26.5098 0 48 -21.4902 48 -48v-36\n+c0 -6.62695 -5.37305 -12 -12 -12zM12 256h424c6.62695 0 12 -5.37305 12 -12v-260c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v260c0 6.62695 5.37305 12 12 12zM345.296 160.053l-28.1689 28.3984\n+c-4.66699 4.70508 -12.2646 4.73535 -16.9697 0.0673828l-106.037 -105.184l-45.9805 46.3516c-4.66699 4.70508 -12.2656 4.73633 -16.9707 0.0683594l-28.3965 -28.1699c-4.70508 -4.66699 -4.73633 -12.2646 -0.0683594 -16.9697l82.6006 -83.2695\n+c4.66699 -4.70508 12.2656 -4.73535 16.9707 -0.0673828l142.952 141.805c4.70508 4.66699 4.73633 12.2646 0.0683594 16.9697z\" \u002F>\n+    \u003Cglyph glyph-name=\"industry\" unicode=\"&#xf275;\" \n+d=\"M475.115 284.219c15.9541 10.1514 36.8848 -1.33105 36.8848 -20.248v-271.971c0 -13.2549 -10.7451 -24 -24 -24h-464c-13.2549 0 -24 10.7451 -24 24v400c0 13.2549 10.7451 24 24 24h112c13.2549 0 24 -10.7451 24 -24v-196.309l139.115 88.5273\n+c15.9541 10.1514 36.8848 -1.33203 36.8848 -20.248v-68.2793z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-pin\" unicode=\"&#xf276;\" horiz-adv-x=\"288\" \n+d=\"M112 131.06c10.3896 -1.91992 21.0596 -3.05957 32 -3.05957s21.6104 1.13965 32 3.05957v-156.689l-22.0098 -33.0205c-4.75 -7.11914 -15.2207 -7.11914 -19.9707 0l-22.0195 33.0205v156.689zM144 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144\n+s-144 64.4697 -144 144s64.4697 144 144 144zM144 372c6.62012 0 12 5.37988 12 12s-5.37988 12 -12 12c-50.7197 0 -92 -41.2695 -92 -92c0 -6.62012 5.37988 -12 12 -12s12 5.37988 12 12c0 37.5 30.5 68 68 68z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-signs\" unicode=\"&#xf277;\" \n+d=\"M507.31 363.31c6.25 -6.25 6.25 -16.3691 0 -22.6299l-43.3096 -43.3096c-6.00977 -6 -14.1396 -9.37012 -22.6299 -9.37012h-385.37c-13.25 0 -24 10.75 -24 24v80c0 13.25 10.75 24 24 24h168v16c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-16\n+h153.37c8.49023 0 16.6299 -3.37012 22.6299 -9.37012zM224 -48v112h64v-112c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16zM456 224c13.25 0 24 -10.75 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-385.37\n+c-8.49023 0 -16.6299 3.37012 -22.6299 9.37012l-43.3096 43.3096c-6.25 6.25 -6.25 16.3799 0 22.6299l43.3096 43.3203c6.00977 6 14.1396 9.37012 22.6299 9.37012h153.37v32h64v-32h168z\" \u002F>\n+    \u003Cglyph glyph-name=\"map\" unicode=\"&#xf279;\" horiz-adv-x=\"576\" \n+d=\"M0 330.34c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l139.88 55.9502v-384l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v346.32zM192 32v384l192 -64v-384zM554.06 414.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-346.32\n+c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v384z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-alt\" unicode=\"&#xf27a;\" \n+d=\"M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.7002c-7.89941 -5.7998 -19.0996 -0.0996094 -19.0996 9.7002v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"pause-circle\" unicode=\"&#xf28b;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM240 112v160c0 8.7998 -7.2002 16 -16 16h-48c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16zM352 112v160\n+c0 8.7998 -7.2002 16 -16 16h-48c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"stop-circle\" unicode=\"&#xf28d;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM352 112v160c0 8.7998 -7.2002 16 -16 16h-160c-8.7998 0 -16 -7.2002 -16 -16v-160c0 -8.7998 7.2002 -16 16 -16h160c8.7998 0 16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"shopping-bag\" unicode=\"&#xf290;\" horiz-adv-x=\"448\" \n+d=\"M352 288h96v-272c0 -44.1826 -35.8174 -80 -80 -80h-288c-44.1826 0 -80 35.8174 -80 80v272h96v32c0 70.5801 57.4199 128 128 128c70.5791 0 128 -57.4199 128 -128v-32zM160 320v-32h128v32c0 35.29 -28.71 64 -64 64s-64 -28.71 -64 -64zM320 200\n+c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24zM128 200c13.2549 0 24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"shopping-basket\" unicode=\"&#xf291;\" horiz-adv-x=\"576\" \n+d=\"M576 232v-16c0 -13.2549 -10.7451 -24 -24 -24h-8l-26.1133 -182.788c-3.37793 -23.6465 -23.6299 -41.2119 -47.5166 -41.2119h-364.74c-23.8867 0 -44.1387 17.5654 -47.5176 41.2119l-26.1123 182.788h-8c-13.2549 0 -24 10.7451 -24 24v16\n+c0 13.2549 10.7451 24 24 24h67.3408l106.78 146.821c10.3945 14.292 30.4072 17.4531 44.7012 7.05762c14.293 -10.3945 17.4531 -30.4082 7.05762 -44.7012l-79.4033 -109.178h235.047l-79.4033 109.179c-10.3955 14.292 -7.23438 34.3066 7.05859 44.7012\n+c14.291 10.3955 34.3066 7.23535 44.7012 -7.05762l106.779 -146.822h67.3408c13.2549 0 24 -10.7451 24 -24zM312 56v112c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24zM424 56v112\n+c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24zM200 56v112c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24v-112c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"hashtag\" unicode=\"&#xf292;\" horiz-adv-x=\"448\" \n+d=\"M440.667 265.891c-0.974609 -5.45898 -6.2666 -9.89062 -11.8135 -9.89062h-79.0957l-22.8564 -128h74.8096c7.4707 0 13.126 -6.75391 11.8135 -14.1094l-7.14355 -40c-0.974609 -5.45898 -6.2666 -9.89062 -11.8125 -9.89062h-79.0967l-15.377 -86.1094\n+c-0.974609 -5.45898 -6.2666 -9.89062 -11.8125 -9.89062h-40.6318c-7.47266 0 -13.127 6.75391 -11.8135 14.1094l14.623 81.8906h-98.6338l-15.3779 -86.1094c-0.974609 -5.45898 -6.26758 -9.89062 -11.8135 -9.89062h-40.6318\n+c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l14.623 81.8906h-74.8105c-7.4707 0 -13.126 6.75391 -11.8125 14.1094l7.14258 40c0.974609 5.45898 6.2666 9.89062 11.8135 9.89062h79.0957l22.8564 128h-74.8096c-7.4707 0 -13.126 6.75391 -11.8135 14.1094l7.14355 40\n+c0.974609 5.45898 6.2666 9.89062 11.8125 9.89062h79.0967l15.377 86.1094c0.974609 5.45898 6.2666 9.89062 11.8125 9.89062h40.6318c7.47266 0 13.127 -6.75391 11.8135 -14.1094l-14.623 -81.8906h98.6348l15.377 86.1094\n+c0.974609 5.45898 6.26758 9.89062 11.8135 9.89062h40.6318c7.4707 0 13.126 -6.75391 11.8125 -14.1094l-14.623 -81.8906h74.8105c7.4707 0 13.126 -6.75391 11.8125 -14.1094zM261.889 128l22.8574 128h-98.6338l-22.8574 -128h98.6338z\" \u002F>\n+    \u003Cglyph glyph-name=\"percent\" unicode=\"&#xf295;\" horiz-adv-x=\"448\" \n+d=\"M112 224c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM112 384c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48s48 21.5 48 48s-21.5 48 -48 48zM336 160c61.9004 0 112 -50.0996 112 -112\n+s-50.0996 -112 -112 -112s-112 50.0996 -112 112s50.0996 112 112 112zM336 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM392.3 447.8l31.6006 0.100586c19.3994 0.0996094 30.8994 -21.8008 19.6992 -37.8008l-366.199 -463.699\n+c-3.94629 -5.62793 -12.7275 -10.1973 -19.6006 -10.2002l-33.3994 -0.100586c-19.5 0 -30.9004 21.9004 -19.7002 37.8008l368 463.699c4.5 6.40039 11.7998 10.2002 19.5996 10.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"universal-access\" unicode=\"&#xf29a;\" \n+d=\"M256 400c-114.971 0 -208 -93.0469 -208 -208c0 -114.971 93.0469 -208 208 -208c114.971 0 208 93.0469 208 208c0 114.971 -93.0469 208 -208 208zM256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248z\n+M256 384c106.039 0 192 -85.9609 192 -192s-85.9609 -192 -192 -192s-192 85.9609 -192 192s85.9609 192 192 192zM256 340c-19.8818 0 -36 -16.1182 -36 -36s16.1182 -36 36 -36s36 16.1182 36 36s-16.1182 36 -36 36zM373.741 241.977\n+c8.59961 2.03027 13.9258 10.6484 11.8965 19.249c-2.03027 8.60156 -10.6494 13.9258 -19.249 11.8955c-96.4912 -22.7832 -124.089 -22.8291 -220.774 0c-8.60254 2.03125 -17.2178 -3.29395 -19.249 -11.8955c-2.03125 -8.60059 3.29492 -17.2178 11.8945 -19.249\n+c28.7129 -6.7793 55.5127 -12.749 82.1416 -15.8066c-0.852539 -101.08 -12.3242 -123.08 -25.0371 -155.621c-3.61719 -9.25879 0.957031 -19.6982 10.2168 -23.3145c9.26465 -3.61914 19.7002 0.961914 23.3154 10.2168c8.72754 22.3408 17.0947 40.6982 22.2617 78.5488\n+h9.68555c5.1748 -37.9131 13.5566 -56.2412 22.2617 -78.5488c3.61621 -9.25977 14.0547 -13.834 23.3154 -10.2168c9.25977 3.61621 13.834 14.0547 10.2168 23.3145c-12.7305 32.5693 -24.1855 54.5986 -25.0371 155.621c26.6299 3.05859 53.4287 9.02832 82.1406 15.8066\n+z\" \u002F>\n+    \u003Cglyph glyph-name=\"blind\" unicode=\"&#xf29d;\" horiz-adv-x=\"384\" \n+d=\"M380.15 -62.8369c-1.05664 -0.640625 -2.91602 -1.16113 -4.15137 -1.16113c-2.48438 0 -5.54785 1.72363 -6.83789 3.84766l-125.33 206.428c4.25684 1.68848 10.0615 5.9375 12.958 9.48438l126.048 -207.607c0.641602 -1.05664 1.16211 -2.91699 1.16211 -4.15234\n+c0 -2.48535 -1.72461 -5.5498 -3.84863 -6.83887zM142.803 133.662l62.8145 -153.537c6.69141 -16.3584 -1.14453 -35.042 -17.501 -41.7344c-16.3564 -6.69043 -35.04 1.1416 -41.7334 17.501l-36.1201 88.2852zM96 360c-24.3008 0 -44 19.6992 -44 44s19.6992 44 44 44\n+s44 -19.6992 44 -44s-19.6992 -44 -44 -44zM250.837 190.872c8.19336 -10.374 6.44434 -25.4922 -3.96582 -33.708c-9.33984 -7.37402 -24.5635 -7.61914 -33.708 3.96484l-102.3 129.217c-0.663086 0.836914 -2.06738 1.51562 -3.13477 1.51562\n+c-2.20801 0 -4 -1.79297 -4 -4.00098c0 -0.769531 0.387695 -1.88281 0.865234 -2.48535l31.4062 -39.8164v-107.196l-65.9258 -181.288c-6.04102 -16.6143 -24.4072 -25.1768 -41.0088 -19.1387c-16.6104 6.04004 -25.1787 24.4004 -19.1387 41.0098l54.0732 148.693\n+v140.698l-16 -20.5713v-79.7656c0 -13.0996 -10.4951 -23.748 -23.5361 -23.9961c-13.4531 -0.254883 -24.4639 11.0811 -24.4639 24.5361v95.6943l61.0557 78.5c4.72754 6.0791 11.7979 9.23633 18.9443 9.23926v0.0263672h32v-0.015625\n+c7.08691 -0.00390625 14.1035 -3.11719 18.8369 -9.1123z\" \u002F>\n+    \u003Cglyph glyph-name=\"audio-description\" unicode=\"&#xf29e;\" \n+d=\"M162.925 209.291l8.82227 -30.6553h-25.6064l9.04102 30.6523c1.27734 4.4209 2.65137 9.99414 3.87207 15.2451c1.2207 -5.25098 2.59473 -10.8232 3.87109 -15.2422zM329.399 241.39c28.6846 0 46.1748 -16.7656 46.1748 -49.0049\n+c0 -32.0977 -16.3994 -49.7754 -46.1748 -49.7754h-14.5234v98.7803h14.5234zM512 336v-288c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h416c26.5098 0 48 -21.4902 48 -48zM245.459 111.861l-57.0967 168\n+c-1.52734 4.49219 -6.61719 8.13867 -11.3623 8.13867h-35.8936c-4.74512 0 -9.83594 -3.64648 -11.3623 -8.13867l-57.0967 -168c-2.64453 -7.7832 3.1416 -15.8613 11.3613 -15.8613h29.1328c4.99219 0 10.1602 3.89453 11.5352 8.69336l8.57422 29.9053h51.3672\n+l8.79297 -29.9766c1.39648 -4.75977 6.55469 -8.62207 11.5146 -8.62207v0h29.1719c8.2207 0 14.0059 8.07812 11.3613 15.8613zM430.16 192.386c0 58.9775 -37.9189 95.6143 -98.96 95.6143h-57.3662c-6.62695 0 -12 -5.37305 -12 -12v-168c0 -6.62695 5.37305 -12 12 -12\n+h57.3662c61.041 0 98.96 36.9326 98.96 96.3857z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone-volume\" unicode=\"&#xf2a0;\" horiz-adv-x=\"384\" \n+d=\"M97.333 -58.9658c-129.874 129.874 -129.681 340.252 0 469.933c5.69824 5.69824 14.5273 6.63184 21.2627 2.42188l64.8174 -40.5127c4.45898 -2.78711 8.07812 -9.31641 8.07812 -14.5752c0 -1.82715 -0.550781 -4.68652 -1.22949 -6.38281l-32.4082 -81.0205\n+c-2.38477 -5.96484 -9.53418 -10.8047 -15.958 -10.8047c-0.473633 0 -1.23926 0.0380859 -1.71094 0.0849609l-55.8096 5.58008c-21.0508 -58.2607 -20.6123 -122.471 0 -179.515l55.8105 5.58105c0.47168 0.046875 1.2373 0.0849609 1.71094 0.0849609\n+c6.42383 0 13.5732 -4.83984 15.959 -10.8037l32.4072 -81.0225c0.678711 -1.69629 1.22949 -4.55566 1.22949 -6.38281c0 -5.25879 -3.61914 -11.7881 -8.07812 -14.5752l-64.8174 -40.5127c-2.30762 -1.44238 -6.38867 -2.6123 -9.10938 -2.6123\n+c-3.92969 0 -9.375 2.25488 -12.1543 5.03418zM247.126 352.527c11.832 -20.0469 11.832 -45.0088 0 -65.0557c-3.9502 -6.69238 -13.1084 -7.95898 -18.7178 -2.58105l-5.97559 5.72656c-3.91016 3.74805 -4.79297 9.62207 -2.26074 14.4102\n+c2.04883 3.87793 3.71094 10.5859 3.71094 14.9717c0 4.38672 -1.66211 11.0947 -3.71094 14.9727c-2.5332 4.78809 -1.64941 10.6621 2.26074 14.4102l5.97559 5.72656c5.60938 5.37793 14.7676 4.11133 18.7178 -2.58105zM338.913 443.714\n+c60.1396 -71.6035 60.0918 -175.882 0 -247.428c-4.47363 -5.32715 -12.5303 -5.74609 -17.5518 -0.933594l-5.79785 5.55762c-4.56055 4.37109 -4.97754 11.5293 -0.930664 16.3789c49.6875 59.5381 49.6465 145.933 0 205.422\n+c-4.04688 4.84961 -3.63086 12.0078 0.930664 16.3789l5.79785 5.55762c5.02148 4.8125 13.0781 4.39355 17.5518 -0.933594zM292.941 398.773c36.0498 -46.3223 36.1074 -111.149 0 -157.547c-4.39062 -5.64062 -12.6973 -6.25098 -17.8564 -1.30371l-5.81836 5.5791\n+c-4.39941 4.21875 -4.99805 11.0947 -1.28418 15.9307c26.5352 34.5645 26.5332 82.5723 0 117.135c-3.71387 4.83594 -3.11523 11.7109 1.28418 15.9307l5.81836 5.5791c5.15918 4.94727 13.4658 4.33691 17.8564 -1.30371z\" \u002F>\n+    \u003Cglyph glyph-name=\"braille\" unicode=\"&#xf2a1;\" horiz-adv-x=\"640\" \n+d=\"M128 192c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64s64 -28.6543 64 -64zM64 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM64 416c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64\n+s-64 28.6543 -64 64s28.6543 64 64 64zM224 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM224 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM224 416\n+c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM448 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM448 64c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32\n+s-32 14.3271 -32 32s14.3271 32 32 32zM448 416c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64zM608 224c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM608 64\n+c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM608 384c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"assistive-listening-systems\" unicode=\"&#xf2a2;\" \n+d=\"M216 188c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 44.1123 35.8877 80 80 80s80 -35.8877 80 -80c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 13.2344 -10.7666 24 -24 24s-24 -10.7656 -24 -24zM240 364c97.0469 0 176 -78.9531 176 -176\n+c0 -95.9863 -71.4053 -109.798 -72 -144.226c-0.124023 -59.4463 -48.5254 -107.774 -108 -107.774c-15.4639 0 -28 12.5361 -28 28s12.5361 28 28 28c28.6729 0 52 23.3271 52 52l0.00292969 0.37793c0.988281 73.3115 71.9971 68.458 71.9971 143.622\n+c0 66.168 -53.832 120 -120 120s-120 -53.832 -120 -120c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 97.0469 78.9531 176 176 176zM160 128c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM32 0\n+c17.6729 0 32 -14.3271 32 -32s-14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32zM512 187.993c0 -15.4639 -12.5371 -28 -28.001 -28s-28 12.5361 -28 28c0 1.12695 -0.00683594 2.24512 -0.0332031 3.36328l-0.00292969 0.1875\n+c-1.4668 91.4404 -60.1709 172.599 -146.077 201.953c-14.6318 5.00098 -22.4414 20.917 -17.4414 35.5498c5.00098 14.6328 20.917 22.4404 35.5498 17.4424c108.163 -36.959 182.082 -139.015 183.961 -253.965c0.0332031 -1.50684 0.0449219 -3.01367 0.0449219 -4.53125\n+zM152.971 8.9707l-33.9404 -33.9404l-80 80l33.9404 33.9404z\" \u002F>\n+    \u003Cglyph glyph-name=\"american-sign-language-interpreting\" unicode=\"&#xf2a3;\" horiz-adv-x=\"640\" \n+d=\"M290.547 258.961c-20.2949 10.1494 -44.1465 11.1992 -64.7393 3.88965c42.6064 0 71.208 -20.4746 85.5781 -50.5752c8.57617 -17.8994 -5.14746 -38.0713 -23.6172 -38.0713c18.4297 0 32.2119 -20.1357 23.6172 -38.0713\n+c-14.7246 -30.8457 -46.123 -50.8535 -80.2979 -50.8535c-0.556641 0 -94.4707 8.61426 -94.4707 8.61426l-66.4062 -33.3467c-9.38379 -4.69336 -19.8145 -0.378906 -23.8945 7.78125l-44.4561 88.9248c-4.16699 8.61523 -1.11133 18.8975 6.94531 23.6211l58.0723 33.0693\n+l41.1221 74.1953c6.38965 57.2451 34.7314 109.768 79.7432 146.727c11.3906 9.44824 28.3408 7.78125 37.5098 -3.61328c9.44629 -11.3936 7.78027 -28.0674 -3.6123 -37.5156c-12.5029 -10.5596 -23.6172 -22.5098 -32.5088 -35.5703\n+c21.6719 14.7285 46.6787 24.7324 74.1865 28.0674c14.7246 1.94434 28.0625 -8.33594 29.7295 -23.0654c1.94531 -14.7275 -8.33594 -28.0674 -23.0615 -29.7344c-16.1162 -1.94434 -31.1201 -7.50293 -44.1787 -15.2832c26.1143 5.71289 58.7119 3.1377 88.0791 -11.1152\n+c13.3359 -6.66895 18.8936 -22.5088 12.2246 -35.8486c-6.38965 -13.0596 -22.5039 -18.6162 -35.5645 -12.2256zM263.318 189.489c-6.1123 12.5049 -18.3379 20.2861 -32.2314 20.2861h-0.105469c-19.5732 0 -35.46 -15.8867 -35.46 -35.46\n+c0 -0.0302734 0 -0.0800781 0.000976562 -0.110352c0 -21.4277 17.8076 -35.5703 35.5645 -35.5703c13.8936 0 26.1191 7.78125 32.2314 20.2861c4.44531 9.44922 13.6133 15.0059 23.3389 15.2842c-9.72559 0.277344 -18.8936 5.83496 -23.3389 15.2842zM638.139 226.726\n+c4.16797 -8.61426 1.11133 -18.8965 -6.94531 -23.6201l-58.0713 -33.0693l-41.1221 -74.1963c-6.38965 -57.2451 -34.7314 -109.767 -79.7432 -146.726c-10.9316 -9.1123 -27.7988 -8.14453 -37.5098 3.6123c-9.44629 11.3945 -7.78027 28.0674 3.61328 37.5166\n+c12.5029 10.5586 23.6162 22.5088 32.5078 35.5703c-21.6719 -14.7295 -46.6787 -24.7324 -74.1865 -28.0674c-10.0205 -2.50586 -27.5518 5.64258 -29.7295 23.0645c-1.94531 14.7285 8.33594 28.0674 23.0615 29.7344c16.1162 1.94629 31.1201 7.50293 44.1787 15.2842\n+c-26.1143 -5.71289 -58.7119 -3.1377 -88.0791 11.1152c-13.3359 6.66895 -18.8936 22.5088 -12.2246 35.8477c6.38965 13.0605 22.5049 18.6191 35.5654 12.2266c20.2949 -10.1484 44.1465 -11.1982 64.7393 -3.88965c-42.6064 0 -71.208 20.4746 -85.5781 50.5762\n+c-8.57617 17.8984 5.14746 38.0713 23.6172 38.0713c-18.4297 0 -32.2109 20.1357 -23.6172 38.0703c14.0332 29.3965 44.0391 50.8877 81.9658 50.8545l92.8027 -8.61523l66.4062 33.3467c9.4082 4.7041 19.8281 0.354492 23.8936 -7.78027zM408.912 245.344\n+c-13.8936 0 -26.1191 -7.78027 -32.2314 -20.2861c-4.44531 -9.44824 -13.6133 -15.0059 -23.3389 -15.2832c9.72559 -0.27832 18.8936 -5.83594 23.3389 -15.2842c6.1123 -12.5049 18.3379 -20.2861 32.2314 -20.2861h0.105469c19.5732 0 35.46 15.8857 35.46 35.46\n+c0 0.0302734 0 0.0791016 -0.000976562 0.110352c0 21.4287 -17.8076 35.5693 -35.5645 35.5693z\" \u002F>\n+    \u003Cglyph glyph-name=\"deaf\" unicode=\"&#xf2a4;\" \n+d=\"M216 188c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 44.1123 35.8877 80 80 80s80 -35.8877 80 -80c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 13.2344 -10.7666 24 -24 24s-24 -10.7656 -24 -24zM240 364c97.0469 0 176 -78.9531 176 -176\n+c0 -95.9863 -71.4053 -109.798 -72 -144.226c-0.124023 -59.4463 -48.5254 -107.774 -108 -107.774c-15.4639 0 -28 12.5361 -28 28s12.5361 28 28 28c28.6729 0 52 23.3271 52 52l0.00292969 0.37793c0.988281 73.3115 71.9971 68.458 71.9971 143.622\n+c0 66.168 -53.832 120 -120 120s-120 -53.832 -120 -120c0 -15.4639 -12.5361 -28 -28 -28s-28 12.5361 -28 28c0 97.0469 78.9531 176 176 176zM508.485 416.201c4.68652 -4.68652 4.68652 -12.2842 0 -16.9727l-87.0303 -87.0283\n+c-4.68652 -4.68652 -12.2842 -4.68652 -16.9697 0l-28.2852 28.2852c-4.68652 4.68652 -4.68652 12.2842 0 16.9707l87.0283 87.0293c4.6875 4.68555 12.2842 4.68555 16.9717 0zM168.97 133.255l28.2861 -28.2842c4.68652 -4.68652 4.68652 -12.2852 0 -16.9707\n+l-148.484 -148.485c-4.6875 -4.68555 -12.2842 -4.68555 -16.9717 0l-28.2852 28.2842c-4.68555 4.6875 -4.68555 12.2852 0 16.9707l148.485 148.485c4.68555 4.68652 12.2842 4.68652 16.9697 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"sign-language\" unicode=\"&#xf2a7;\" horiz-adv-x=\"448\" \n+d=\"M91.4336 -35.9873c-0.306641 16.0186 13.1094 29.1289 29.1309 29.1289h62.293v5.71484h-125.864c-16.0215 0 -29.4375 13.1104 -29.1299 29.1289c0.296875 15.5234 12.9717 28.0146 28.5645 28.0146h126.43v5.71387h-153.722\n+c-16.0205 0 -29.4365 13.1113 -29.1299 29.1289c0.296875 15.5225 12.9727 28.0137 28.5664 28.0137h154.286v5.71387h-125.151c-16.0215 0 -29.4375 13.1104 -29.1299 29.1289c0.296875 15.5215 12.9727 28.0127 28.5654 28.0127h168.566l-31.085 22.6064\n+c-12.7617 9.28027 -15.583 27.1484 -6.30176 39.9121c9.28027 12.7607 27.1494 15.5811 39.9121 6.30176l123.36 -89.7148c7.79395 -5.66895 14.1201 -18.0908 14.1201 -27.7285v-141.136c0 -15.9102 -10.9463 -29.7305 -26.4326 -33.374l-80.4717 -18.9346\n+c-8.55176 -2.01172 -22.624 -3.64551 -31.4102 -3.64551h-107.4c-15.5928 0.000976562 -28.2686 12.4922 -28.5664 28.0137zM164.683 189.714l-36.3711 46.71c-9.5791 12.3027 -7.51172 29.9795 4.55371 39.75c12.4502 10.083 31.0371 7.55273 40.8799 -5.08789\n+l13.0039 -16.7002c-17.1426 -15.6484 -15.4092 -43.0244 3.16992 -56.5361l11.1875 -8.13574h-36.4238zM447.981 191.817c0.00976562 -0.311523 0.0175781 -0.81543 0.0175781 -1.12695c0 -9.24902 -5.92188 -21.3682 -13.2197 -27.0508l-61.0645 -47.5488v16.999\n+c0 13.4834 -6.51074 26.2686 -17.415 34.1982l-123.359 89.7139c-12.6357 9.18945 -29.1934 9.16113 -41.6904 0.904297l-52.0527 66.8486c-9.84375 12.6416 -7.74121 31.2822 5.08594 40.8809c12.4297 9.30273 30.0732 6.97559 39.6523 -5.32812l77.6758 -99.7539\n+l4.50879 3.51172l-94.4434 121.287c-9.84277 12.6416 -7.74121 31.2822 5.08594 40.8818c12.4307 9.30176 30.0732 6.97461 39.6533 -5.32812l94.79 -121.734l4.50879 3.51074l-76.8887 98.7451c-9.84277 12.6416 -7.74121 31.2822 5.08594 40.8809\n+c12.4297 9.30273 30.0732 6.97559 39.6533 -5.32715l103.562 -133.001l-1.26172 38.4141c-0.518555 15.7715 11.8457 28.9756 27.6191 29.4932c15.7705 0.517578 28.9746 -11.8477 29.4922 -27.6191z\" \u002F>\n+    \u003Cglyph glyph-name=\"low-vision\" unicode=\"&#xf2a8;\" horiz-adv-x=\"576\" \n+d=\"M569.344 216.369c3.67383 -6.22461 6.65625 -17.1416 6.65625 -24.3691s-2.98242 -18.1455 -6.65723 -24.3701c-31.9746 -54.2607 -79.6484 -98.3232 -136.81 -126.301l0.00683594 -0.00878906l43.1201 -58.377c7.60156 -10.8594 4.95996 -25.8252 -5.90039 -33.4268\n+l-13.1133 -9.17773c-10.8594 -7.59863 -25.8223 -4.95801 -33.4238 5.90039l-251.836 356.544c-11.1797 -5.09375 -28.5518 -14.7539 -38.7764 -21.5635l189.979 -271.399c-9.52637 -1.00488 -25.0342 -1.82031 -34.6133 -1.82031\n+c-12.29 0 -32.1484 1.33984 -44.3262 2.99023l-40.6309 58.04h-0.00976562l-119.399 170.58c-8.64453 -9.25391 -21.3203 -25.3428 -28.2939 -35.9121l124.19 -177.417c-73.1172 25.4863 -134.358 76.0166 -172.858 141.349c-8.96484 15.2109 -8.76562 33.8643 0 48.7393\n+c0.0107422 0.0166016 0.0234375 0.0332031 0.0332031 0.0498047c33.5459 56.8984 82.7676 99.8506 136.79 126.242l-43.1309 58.3945c-7.60156 10.8604 -4.95996 25.8252 5.90039 33.4268l13.1143 9.17773c10.8584 7.59961 25.8213 4.95801 33.4229 -5.90039\n+l52.7705 -72.1689c26.3496 6.79004 53.9834 10.4092 82.4512 10.4092c119.81 0 224.96 -63.9492 281.344 -159.631zM390.026 102.06c21.1406 23.9658 33.9736 55.4365 33.9736 89.9404c0 75.1738 -60.8379 136 -136 136c-17.5117 0 -34.2422 -3.30566 -49.6084 -9.32324\n+l19.0684 -27.2363c25.9883 7.96289 54.7598 5.56836 79.5098 -7.68066h-0.0292969c-23.6504 0 -42.8203 -19.1699 -42.8203 -42.8193c0 -23.4717 18.9922 -42.8203 42.8203 -42.8203c23.6494 0 42.8193 19.1699 42.8193 42.8203v0.0292969\n+c18.9111 -35.3271 15.8818 -79.1123 -8.7998 -111.68z\" \u002F>\n+    \u003Cglyph glyph-name=\"handshake\" unicode=\"&#xf2b5;\" horiz-adv-x=\"640\" \n+d=\"M434.7 384c8.5 0 16.7002 -3.40039 22.5996 -9.40039l54.6006 -54.5996v-193.5c-2.40039 2.7002 -5 5.2998 -7.90039 7.7002l-145.6 118.2l26.0996 23.8994c6.5 6 7 16.1006 1 22.6006c-5.90039 6.5 -16.0996 6.89941 -22.5996 1l-79.9004 -73.2002\n+c-0.0996094 -0.100586 -0.299805 -0.100586 -0.400391 -0.200195c-16.6992 -14.9004 -43.3994 -11.2002 -56.0996 2.7002c-14.2002 15.5 -14.5 40.3994 2.09961 56c0.100586 0.0996094 0.200195 0.299805 0.300781 0.399414l98.2998 90\n+c5.89941 5.40039 13.5996 8.40039 21.5996 8.40039h85.9004zM544 319.8h96v-255.899h-64c-17.7002 0 -32 14.2998 -32 32v223.899zM592 95.9004c8.7998 0 16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM0 64v255.8h96\n+v-223.8c0 -17.7002 -14.2998 -32 -32 -32h-64zM48 127.9c-8.7998 0 -16 -7.10059 -16 -16c0 -8.80078 7.2002 -16 16 -16s16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16zM483.9 109.3c13.6992 -11.2002 15.7998 -31.2998 4.59961 -45.0996l-9.5 -11.7002\n+c-11.0996 -13.7998 -31.2998 -15.7998 -45 -4.7002l-5.40039 4.40039l-31.3994 -38.6006c-12.9004 -15.8994 -36.4004 -18.3994 -52.2998 -5.39941l-17.9004 15.5l-0.200195 -0.200195c-22.2998 -27.4004 -62.5996 -31.5996 -90 -9.2998l-90.5 81.8994h-18.2998v223.9\n+l54.7002 54.5996c6 6 14.0996 9.40039 22.5996 9.40039h83.7998l-81.7998 -74.9004c-29.2002 -26.7998 -31.2998 -72.2998 -4.39941 -101.699c26.5 -28.9004 72 -31.5 101.699 -4.40039l30 27.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope-open\" unicode=\"&#xf2b6;\" \n+d=\"M512 -16c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v263.276c0 12.8955 8.2373 29.8193 18.3867 37.7754c24.9131 19.5293 45.501 35.3652 164.2 121.512c16.8252 12.2666 50.21 41.7832 73.4131 41.4336\n+c23.1982 0.353516 56.5957 -29.1719 73.4131 -41.4326c118.687 -86.1377 139.303 -101.995 164.2 -121.513c10.1494 -7.95605 18.3867 -24.8799 18.3867 -37.7754v-263.276zM446.334 180.605c-2.5625 3.72754 -7.7002 4.59473 -11.3389 1.90625\n+c-22.8447 -16.873 -55.4619 -40.7051 -105.582 -77.0791c-16.8252 -12.2656 -50.21 -41.7803 -73.4131 -41.4297c-23.2109 -0.34375 -56.5586 29.1436 -73.4131 41.4297c-50.1143 36.3701 -82.7344 60.2041 -105.582 77.0791\n+c-3.63867 2.68848 -8.77637 1.82129 -11.3389 -1.90625l-9.07227 -13.1963c-0.777344 -1.13086 -1.4082 -3.16113 -1.4082 -4.5332c0 -2.22754 1.45508 -5.11035 3.24707 -6.43359c22.8877 -16.8994 55.4541 -40.6904 105.304 -76.8682\n+c20.2734 -14.7812 56.5234 -47.8135 92.2637 -47.5732c35.7236 -0.242188 71.9609 32.7715 92.2627 47.5732c49.8506 36.1787 82.418 59.9697 105.304 76.8682c1.79199 1.32324 3.24707 4.20605 3.24707 6.43359c0 1.37207 -0.630859 3.40234 -1.4082 4.5332z\" \u002F>\n+    \u003Cglyph glyph-name=\"address-book\" unicode=\"&#xf2b9;\" horiz-adv-x=\"448\" \n+d=\"M436 288h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-64h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-20v-48c0 -26.5 -21.5 -48 -48 -48h-320c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48\n+h320c26.5 0 48 -21.5 48 -48v-48h20c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM208 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM320 83.2002v19.2002\n+c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\n+c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"address-card\" unicode=\"&#xf2bb;\" horiz-adv-x=\"576\" \n+d=\"M528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h480zM176 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM288 83.2002v19.2002\n+c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\n+c12.4004 0 22.4004 8.59961 22.4004 19.2002zM512 136v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM512 200v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16\n+c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM512 264v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-circle\" unicode=\"&#xf2bd;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM248 344c-48.5996 0 -88 -39.4004 -88 -88s39.4004 -88 88 -88s88 39.4004 88 88s-39.4004 88 -88 88zM248 0c58.7002 0 111.3 26.5996 146.5 68.2002\n+c-18.7998 35.3994 -55.5996 59.7998 -98.5 59.7998c-2.40039 0 -4.7998 -0.400391 -7.09961 -1.09961c-12.9004 -4.2002 -26.6006 -6.90039 -40.9004 -6.90039s-27.9004 2.7002 -40.9004 6.90039c-2.2998 0.699219 -4.69922 1.09961 -7.09961 1.09961\n+c-42.9004 0 -79.7002 -24.4004 -98.5 -59.7998c35.2002 -41.6006 87.7998 -68.2002 146.5 -68.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"id-badge\" unicode=\"&#xf2c1;\" horiz-adv-x=\"384\" \n+d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM144 416c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h96c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16h-96zM192 288\n+c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM304 51.2002v19.2002c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5\n+c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"id-card\" unicode=\"&#xf2c2;\" horiz-adv-x=\"576\" \n+d=\"M528 416c26.5 0 48 -21.5 48 -48v-16h-576v16c0 26.5 21.5 48 48 48h480zM0 16v304h576v-304c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48zM352 248v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-144\n+c-4.40039 0 -8 -3.59961 -8 -8zM352 184v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8zM352 120v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8v16\n+c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8zM176 256c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM67.0996 51.7998c-3.19922 -9.7998 5.2002 -19.7998 15.6006 -19.7998h186.6\n+c10.4004 0 18.7998 9.90039 15.6006 19.7998c-8.40039 25.7002 -32.5 44.2002 -60.9004 44.2002h-8.2002c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-8.2002c-28.4004 0 -52.5 -18.5 -60.9004 -44.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer-full\" unicode=\"&#xf2c7;\" horiz-adv-x=\"256\" \n+d=\"M224 352v-203.347c19.9121 -22.5635 32 -52.1943 32 -84.6533c0 -70.6963 -57.3018 -128 -128 -128c-0.298828 0 -0.610352 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1973 12.2227 61.5771 31.998 83.9863\n+v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96zM128 -16c44.1123 0 80 35.8877 80 80c0 34.3379 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7334 -14.4277 -31.8262 -32.0996 -31.999 -66.0801\n+c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199zM192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v232.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-232.583c19.124 -11.0684 32 -31.7324 32 -55.417z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer-three-quarters\" unicode=\"&#xf2c8;\" horiz-adv-x=\"256\" \n+d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v168.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-168.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\n+c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\n+M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\n+c44.1123 0 80 35.8877 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer-half\" unicode=\"&#xf2c9;\" horiz-adv-x=\"256\" \n+d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v104.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-104.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\n+c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\n+M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\n+c44.1123 0 80 35.8877 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer-quarter\" unicode=\"&#xf2ca;\" horiz-adv-x=\"256\" \n+d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64c0 23.6846 12.876 44.3486 32 55.417v40.583c0 17.6729 14.3271 32 32 32s32 -14.3271 32 -32v-40.583c19.124 -11.0684 32 -31.7324 32 -55.417zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533\n+c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347z\n+M208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312\n+c44.1123 0 80 35.8877 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer-empty\" unicode=\"&#xf2cb;\" horiz-adv-x=\"256\" \n+d=\"M192 64c0 -35.3457 -28.6543 -64 -64 -64s-64 28.6543 -64 64s28.6543 64 64 64s64 -28.6543 64 -64zM224 148.653c19.9121 -22.5635 32 -52.1943 32 -84.6533c0 -70.6963 -57.3027 -128 -128 -128c-0.298828 0 -0.609375 0.000976562 -0.90918 0.00292969\n+c-70.3018 0.488281 -127.448 58.3613 -127.089 128.664c0.164062 32.1982 12.2227 61.5781 31.998 83.9863v203.347c0 53.0186 42.9814 96 96 96s96 -42.9814 96 -96v-203.347zM208 64c0 34.3389 -19.3701 52.1904 -32 66.502v221.498c0 26.4668 -21.5332 48 -48 48\n+s-48 -21.5332 -48 -48v-221.498c-12.7324 -14.4277 -31.8252 -32.0996 -31.999 -66.0801c-0.223633 -43.876 35.5635 -80.1162 79.4229 -80.4199l0.576172 -0.00195312c44.1123 0 80 35.8877 80 80z\" \u002F>\n+    \u003Cglyph glyph-name=\"shower\" unicode=\"&#xf2cc;\" \n+d=\"M389.66 312.4l-158.061 -158.061c-9.36914 -9.37012 -24.5693 -9.37012 -33.9395 0l-11.3203 11.3203c-9.37012 9.37012 -9.37012 24.5703 0 33.9395l0.110352 0.110352c-34.0303 40.21 -35.1602 98.9404 -3.39062 140.38\n+c-11.9697 7.5498 -26.1396 11.9102 -41.2998 11.9102c-42.8799 0 -77.7598 -34.8799 -77.7598 -77.7598v-306.24h-64v306.24c0 78.1699 63.5898 141.76 141.76 141.76c36.9307 0 70.6104 -14.2002 95.8604 -37.4199c35.8994 11.5098 76.5 4.5 106.67 -21.0303\n+l0.110352 0.110352c9.36914 9.37012 24.5693 9.37012 33.9395 0l11.3203 -11.3203c9.37012 -9.37012 9.37012 -24.5703 0 -33.9395zM384 240c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM416 240c0 8.83691 7.16309 16 16 16\n+s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM512 240c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM352 208c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16z\n+M400 224c8.83691 0 16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16zM480 208c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 176c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16\n+s7.16309 16 16 16s16 -7.16309 16 -16zM352 176c0 8.83691 7.16309 16 16 16s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM448 176c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 144\n+c0 8.83691 7.16309 16 16 16s16 -7.16309 16 -16s-7.16309 -16 -16 -16s-16 7.16309 -16 16zM416 144c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 112c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16\n+s7.16309 16 16 16s16 -7.16309 16 -16zM384 112c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM352 80c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16zM320 48\n+c0 -8.83691 -7.16309 -16 -16 -16s-16 7.16309 -16 16s7.16309 16 16 16s16 -7.16309 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"bath\" unicode=\"&#xf2cd;\" \n+d=\"M488 192c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-8v-32c0 -28.4297 -12.3623 -53.9688 -32 -71.5469v-32.4531c0 -13.2549 -10.7451 -24 -24 -24h-16c-13.2549 0 -24 10.7451 -24 24v8h-256v-8c0 -13.2549 -10.7451 -24 -24 -24h-16\n+c-13.2549 0 -24 10.7451 -24 24v32.4531c-19.6377 17.5781 -32 43.1172 -32 71.5469v32h-8c-13.2549 0 -24 10.7451 -24 24v16c0 13.2549 10.7451 24 24 24h8v144c0 44.1123 35.8877 80 80 80c27.2119 0 51.2812 -13.667 65.7393 -34.4873\n+c21.8838 6.06445 46.2285 1.10449 64.1777 -15.3643c4.71289 4.1748 11.916 4.02051 16.4277 -0.491211l11.3145 -11.3145c4.68555 -4.68652 4.68555 -12.2852 0 -16.9707l-95.0303 -95.0293c-4.68652 -4.68555 -12.2852 -4.68555 -16.9707 0l-11.3145 11.3145\n+c-4.51172 4.51172 -4.66699 11.7148 -0.491211 16.4277c-21.5244 23.459 -23.3291 57.8281 -6.83789 83.0352c-5.68262 8.93457 -15.6641 14.8799 -27.0146 14.8799c-17.6445 0 -32 -14.3555 -32 -32v-144h408z\" \u002F>\n+    \u003Cglyph glyph-name=\"podcast\" unicode=\"&#xf2ce;\" horiz-adv-x=\"448\" \n+d=\"M267.429 -40.5635c-5.14258 -19.0098 -24.5703 -23.4365 -43.4287 -23.4365c-18.8574 0 -38.2861 4.42676 -43.4277 23.4365c-7.64551 28.4297 -20.5723 99.665 -20.5723 132.813c0 35.1562 31.1416 43.75 64 43.75s64 -8.59375 64 -43.75\n+c0 -32.9492 -12.8711 -104.179 -20.5713 -132.813zM156.867 159.446c2.6748 -2.61914 2.39941 -6.98535 -0.628906 -9.18555c-9.3125 -6.76465 -16.4609 -15.3418 -21.2354 -25.3623c-1.74219 -3.65723 -6.5 -4.6582 -9.45312 -1.8877\n+c-28.0176 26.2891 -45.5498 63.6279 -45.5498 104.989c0 80.7852 66.8691 146.247 148.163 143.941c76.1982 -2.16113 137.938 -64.1631 139.793 -140.369c1.04199 -42.7822 -16.6846 -81.5225 -45.5107 -108.565c-2.95215 -2.76855 -7.70801 -1.7627 -9.44922 1.8916\n+c-4.77441 10.0195 -11.9219 18.5977 -21.2344 25.3623c-3.02832 2.20117 -3.30273 6.56738 -0.62793 9.1875c17.8018 17.4355 28.8662 41.7246 28.8662 68.5518c0 54.1934 -45.1377 98.042 -99.793 95.9258c-49.7295 -1.9248 -90.0703 -42.1572 -92.124 -91.8809\n+c-1.17383 -28.4258 10.0908 -54.291 28.7842 -72.5986zM224 448c123.815 0 224 -100.205 224 -224c0 -90.1865 -52.7734 -165.727 -125.739 -201.407c-4.33203 -2.11914 -9.2666 1.54297 -8.53516 6.31055c2.55566 16.6416 4.625 33.1924 5.62402 47.2295\n+c48.4922 31.377 80.6504 85.9355 80.6504 147.867c0 97.2031 -79.207 176.253 -176.468 175.999c-96.2393 -0.250977 -174.938 -78.6621 -175.529 -174.899c-0.376953 -61.3311 30.7871 -115.541 78.1875 -147.347c1.52832 -1.02637 2.53125 -2.67578 2.67773 -4.51172\n+c1.06348 -13.3936 3.02344 -28.8271 5.40625 -44.3389c0.731445 -4.7666 -4.20215 -8.42871 -8.53516 -6.31055c-73.1377 35.7607 -125.739 111.416 -125.739 201.408c0 123.815 100.204 224 224 224zM224 288c35.3457 0 64 -28.6543 64 -64s-28.6543 -64 -64 -64\n+s-64 28.6543 -64 64s28.6543 64 64 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-maximize\" unicode=\"&#xf2d0;\" \n+d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM448 256v84c0 6.59961 -5.40039 12 -12 12h-360c-6.59961 0 -12 -5.40039 -12 -12v-84h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-minimize\" unicode=\"&#xf2d1;\" \n+d=\"M464 96c26.5 0 48 -21.5 48 -48v-32c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v32c0 26.5 21.5 48 48 48h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-restore\" unicode=\"&#xf2d2;\" \n+d=\"M512 400v-288c0 -26.5 -21.5 -48 -48 -48h-48v208c0 44.0996 -35.9004 80 -80 80h-208v48c0 26.5 21.5 48 48 48h288c26.5 0 48 -21.5 48 -48zM384 272v-288c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h288\n+c26.5 0 48 -21.5 48 -48zM316 244c0 6.59961 -5.40039 12 -12 12h-228c-6.59961 0 -12 -5.40039 -12 -12v-52h252v52z\" \u002F>\n+    \u003Cglyph glyph-name=\"microchip\" unicode=\"&#xf2db;\" \n+d=\"M416 400v-416c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h224c26.5098 0 48 -21.4902 48 -48zM512 342v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42\n+c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 246v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 150v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6\n+c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM512 54v-12c0 -3.31152 -2.68848 -6 -6 -6h-18v-6c0 -3.31152 -2.68848 -6 -6 -6h-42v48h42c3.31152 0 6 -2.68848 6 -6v-6h18c3.31152 0 6 -2.68848 6 -6zM30 72h42\n+v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6zM30 168h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6\n+c0 3.31152 2.68848 6 6 6zM30 264h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6zM30 360h42v-48h-42c-3.31152 0 -6 2.68848 -6 6v6h-18c-3.31152 0 -6 2.68848 -6 6v12\n+c0 3.31152 2.68848 6 6 6h18v6c0 3.31152 2.68848 6 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"snowflake\" unicode=\"&#xf2dc;\" horiz-adv-x=\"448\" \n+d=\"M440.3 102.8c7.40039 -4.2002 9.90039 -13.7002 5.60059 -21l-15.5 -26.7998c-4.30078 -7.40039 -13.7002 -10 -21.1006 -5.7002l-33.7998 19.5l7 -26c2.2002 -8.2002 -2.7002 -16.7002 -10.9004 -18.8994l-14.8994 -4\n+c-8.2002 -2.2002 -16.7002 2.69922 -18.9004 10.8994l-19 70.7998l-62.7998 36.2002v-77.5l53.4004 -53.7002c6.19922 -6.19922 6.19922 -16.3994 0 -22.5996l-11.3008 -11.2998c-6.19922 -6.2002 -16.3994 -6.2002 -22.5996 0l-19.7002 19.7002v-40.4004\n+c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v40.2998l-19.7002 -19.7002c-6.19922 -6.19922 -16.3994 -6.19922 -22.5996 0l-11.2998 11.3008c-6.2998 6.19922 -6.2998 16.3994 0 22.5996l53.7002 53.7002v77.5l-62.8008 -36.2002l-19 -70.7998\n+c-2.19922 -8.2002 -10.6992 -13.1006 -18.8994 -10.9004l-14.9004 4c-8.2002 2.2002 -13.0996 10.7002 -10.8994 18.9004l7 26l-33.8008 -19.5c-7.39941 -4.2002 -16.7998 -1.7002 -21.0996 5.7002l-15.5 26.7998c-4.2002 7.39941 -1.7002 16.7998 5.7002 21.0996\n+l33.7998 19.6006l-26 7c-8.2002 2.19922 -13.0996 10.6992 -10.9004 18.8994l4 14.9004c2.2002 8.2002 10.7002 13.0996 18.9004 10.8994l70.7998 -19l63.7998 36.9004l-63.7998 36.9004l-70.7998 -19c-8.2002 -2.2002 -16.7002 2.69922 -18.9004 10.8994l-4 14.9004\n+c-2.19922 8.2998 2.7002 16.7998 11 19l26 7l-33.7998 19.5c-7.39941 4.2998 -10 13.7002 -5.7002 21.0996l15.5 26.7002c4.30078 7.40039 13.7002 10 21.1006 5.7002l33.7998 -19.5l-7 26c-2.2002 8.2002 2.7002 16.7002 10.9004 18.8994l14.8994 4\n+c8.2002 2.2002 16.7002 -2.69922 18.9004 -10.8994l19 -70.7998l62.7998 -36.2002v77.5l-53.7002 53.7002c-6.2998 6.19922 -6.2998 16.3994 0 22.5996l11.4004 11.2998c6.2002 6.2002 16.3994 6.2002 22.5996 0l19.7002 -19.7002v40.4004c0 8.7998 7.2002 16 16 16h32\n+c8.7998 0 16 -7.2002 16 -16v-40.4004l19.7998 19.7002c6.2002 6.2002 16.4004 6.2002 22.6006 0l11.2998 -11.2998c6.2002 -6.2002 6.2002 -16.4004 0 -22.5996l-53.7002 -53.7002v-77.5l62.7998 36.2002l19 70.7998c2.2002 8.2002 10.7002 13.0996 18.9004 10.8994\n+l14.8994 -4c8.2002 -2.19922 13.1006 -10.6992 10.9004 -18.8994l-7 -26l33.7998 19.5c7.40039 4.2002 16.7998 1.7002 21.1006 -5.7002l15.5 -26.7998c4.19922 -7.40039 1.69922 -16.7998 -5.7002 -21.1006l-33.7998 -19.5l26 -7\n+c8.19922 -2.19922 13.0996 -10.6992 10.8994 -18.8994l-4 -14.9004c-2.2002 -8.2002 -10.7002 -13.0996 -18.8994 -10.8994l-70.8008 19l-63.7998 -36.9004l63.9004 -37l70.7998 19c8.2002 2.2002 16.7002 -2.7002 18.9004 -10.9004l4 -14.8994\n+c2.19922 -8.2002 -2.7002 -16.7002 -10.9004 -18.9004l-26 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"utensil-spoon\" unicode=\"&#xf2e5;\" \n+d=\"M480.1 416.1c55.1006 -55 34.5 -164.899 -28.5 -227.8c-49.2998 -49.2998 -110 -55.0996 -160.399 -28.7998l-192.4 -214.4c-10.3994 -11.5996 -28.5 -12.0996 -39.5 -1.09961l-51.2998 51.2998c-11.0996 11 -10.5996 29 1 39.5l214.5 192.4\n+c-26.2998 50.3994 -20.5 111.1 28.7998 160.399c62.9004 63 172.8 83.6006 227.8 28.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"utensils\" unicode=\"&#xf2e7;\" horiz-adv-x=\"416\" \n+d=\"M207.9 432.8c0.799805 -4.7002 16.0996 -94.5 16.0996 -128.8c0 -52.2998 -27.7998 -89.5996 -68.9004 -104.6l12.9004 -238.101c0.700195 -13.7002 -10.2002 -25.2998 -24 -25.2998h-64c-13.7002 0 -24.7002 11.5 -24 25.2998l12.9004 238.101\n+c-41.2002 15 -68.9004 52.3994 -68.9004 104.6c0 34.4004 15.2998 124.1 16.0996 128.8c3.2002 20.2998 45.3008 20.6006 47.9004 -1.09961v-141.2c1.2998 -3.40039 15.0996 -3.2002 16 0c1.40039 25.2998 7.90039 139.2 8 141.8c3.2998 20.7998 44.7002 20.7998 47.9004 0\n+c0.199219 -2.7002 6.59961 -116.5 8 -141.8c0.899414 -3.2002 14.7998 -3.40039 16 0v141.2c2.59961 21.5996 44.7998 21.3994 48 1.09961zM327.1 147.1c-156.5 122.4 -17.5996 300.9 64.9004 300.9c13.2998 0 24 -10.7998 24 -24v-464c0 -13.2998 -10.7002 -24 -24 -24h-56\n+c-14 0 -25.0996 12 -23.9004 26z\" \u002F>\n+    \u003Cglyph glyph-name=\"undo-alt\" unicode=\"&#xf2ea;\" \n+d=\"M255.545 440c136.809 0.245117 248.456 -111.193 248.455 -248.002c-0.000976562 -136.965 -111.034 -247.998 -248 -247.998c-63.9258 0 -122.202 24.1865 -166.178 63.9082c-5.11328 4.61816 -5.35449 12.5605 -0.482422 17.4326l39.6621 39.6621\n+c4.46191 4.46094 11.625 4.71387 16.3682 0.552734c30.6328 -26.8779 69.5029 -41.5557 110.63 -41.5557c93.8164 0 167.236 75.9912 167.994 166.552c0.798828 95.4648 -77.0859 170.24 -169.484 169.442c-42.4287 -0.366211 -82.3662 -16.374 -113.229 -45.2734\n+l41.75 -41.75c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-134.059c-13.2549 0 -24 10.7451 -24 24v134.059c0 21.3828 25.8506 32.0908 40.9707 16.9707l35.7139 -35.7139c44.4229 42.4512 104.592 68.5654 170.86 68.6846z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash-alt\" unicode=\"&#xf2ed;\" horiz-adv-x=\"448\" \n+d=\"M32 -16v336h384v-336c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48zM304 240v-224c0 -8.83203 7.16797 -16 16 -16s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM208 240v-224c0 -8.83203 7.16797 -16 16 -16\n+s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM112 240v-224c0 -8.83203 7.16797 -16 16 -16s16 7.16797 16 16v224c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM432 416c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002\n+h120z\" \u002F>\n+    \u003Cglyph glyph-name=\"sync-alt\" unicode=\"&#xf2f1;\" \n+d=\"M370.72 314.72c-31.2617 29.2725 -71.832 45.3184 -114.872 45.2803c-77.458 -0.0683594 -144.328 -53.1777 -162.791 -126.85c-1.34375 -5.36328 -6.12207 -9.15039 -11.6504 -9.15039h-57.3037c-7.49707 0 -13.1934 6.80664 -11.8066 14.1758\n+c21.6367 114.9 122.518 201.824 243.704 201.824c66.4482 0 126.791 -26.1357 171.315 -68.6846l35.7148 35.7148c15.1191 15.1191 40.9697 4.41113 40.9697 -16.9717v-134.059c0 -13.2549 -10.7451 -24 -24 -24h-134.059c-21.3828 0 -32.0908 25.8506 -16.9717 40.9707z\n+M32 152h134.059c21.3828 0 32.0908 -25.8506 16.9717 -40.9707l-41.75 -41.75c31.2617 -29.2734 71.835 -45.3193 114.876 -45.2803c77.418 0.0703125 144.314 53.1436 162.787 126.849c1.34375 5.36328 6.12207 9.15039 11.6504 9.15039h57.3047\n+c7.49805 0 13.1934 -6.80664 11.8066 -14.1758c-21.6377 -114.898 -122.519 -201.822 -243.705 -201.822c-66.4482 0 -126.791 26.1357 -171.315 68.6846l-35.7148 -35.7148c-15.1191 -15.1191 -40.9697 -4.41113 -40.9697 16.9717v134.059c0 13.2549 10.7451 24 24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"stopwatch\" unicode=\"&#xf2f2;\" horiz-adv-x=\"448\" \n+d=\"M432 144c0 -114.9 -93.0996 -208 -208 -208s-208 93.0996 -208 208c0 104 76.2998 190.2 176 205.5v34.5h-28c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h120c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-28v-34.5\n+c37.5 -5.7998 71.7002 -21.5996 99.7002 -44.5996l27.5 27.5c4.7002 4.69922 12.2998 4.69922 17 0l28.2998 -28.3008c4.7002 -4.69922 4.7002 -12.2998 0 -17l-29.4004 -29.3994l-0.599609 -0.600586c21.2002 -32.3994 33.5 -71.2998 33.5 -113.1zM256 108v151.5\n+c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-151.5c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"sign-out-alt\" unicode=\"&#xf2f5;\" \n+d=\"M497 175l-168 -168c-15 -15 -41 -4.5 -41 17v96h-136c-13.2998 0 -24 10.7002 -24 24v96c0 13.2998 10.7002 24 24 24h136v96c0 21.4004 25.9004 32 41 17l168 -168c9.2998 -9.40039 9.2998 -24.5996 0 -34zM192 12c0 -6.59961 -5.40039 -12 -12 -12h-84\n+c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h84c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12h-84c-17.7002 0 -32 -14.2998 -32 -32v-192c0 -17.7002 14.2998 -32 32 -32h84c6.59961 0 12 -5.40039 12 -12v-40z\" \u002F>\n+    \u003Cglyph glyph-name=\"sign-in-alt\" unicode=\"&#xf2f6;\" \n+d=\"M416 0h-84c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84c17.7002 0 32 14.2998 32 32v192c0 17.7002 -14.2998 32 -32 32h-84c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h84c53 0 96 -43 96 -96v-192c0 -53 -43 -96 -96 -96z\n+M369 201c9.2998 -9.40039 9.2998 -24.5996 0 -34l-168 -168c-15 -15 -41 -4.5 -41 17v96h-136c-13.2998 0 -24 10.7002 -24 24v96c0 13.2998 10.7002 24 24 24h136v96c0 21.5 26 32 41 17z\" \u002F>\n+    \u003Cglyph glyph-name=\"redo-alt\" unicode=\"&#xf2f9;\" \n+d=\"M256.455 440c66.2686 -0.119141 126.437 -26.2334 170.859 -68.6846l35.7148 35.7148c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-134.059c0 -13.2549 -10.7451 -24 -24 -24h-134.059c-21.3828 0 -32.0908 25.8506 -16.9717 40.9707l41.75 41.75\n+c-30.8633 28.8994 -70.8008 44.9072 -113.229 45.2734c-92.3984 0.797852 -170.283 -73.9775 -169.484 -169.442c0.757812 -90.5605 74.1777 -166.552 167.994 -166.552c41.127 0 79.9971 14.6777 110.629 41.5557c4.74316 4.16113 11.9062 3.9082 16.3682 -0.552734\n+l39.6621 -39.6621c4.87207 -4.87207 4.63086 -12.8145 -0.482422 -17.4326c-43.9746 -39.7217 -102.251 -63.9082 -166.177 -63.9082c-136.966 0 -247.999 111.033 -248 247.998c-0.000976562 136.809 111.646 248.247 248.455 248.002z\" \u002F>\n+    \u003Cglyph glyph-name=\"poo\" unicode=\"&#xf2fe;\" \n+d=\"M451.4 78.9004c34.2998 -5.5 60.5996 -35 60.5996 -70.9004c0 -39.7998 -32.2002 -72 -72 -72h-368c-39.7998 0 -72 32.2002 -72 72c0 35.9004 26.2998 65.4004 60.5996 70.9004c-17.2998 13.0996 -28.5996 33.6992 -28.5996 57.0996c0 39.7998 32.2002 72 72 72h14.0996\n+c-13.3994 11.7002 -22.0996 28.7998 -22.0996 48c0 35.2998 28.7002 64 64 64h16c44.2002 0 80 35.7998 80 80c0 17.4004 -5.7002 33.4004 -15.0996 46.5c4.89941 0.799805 9.89941 1.5 15.0996 1.5c53 0 96 -43 96 -96c0 -11.2998 -2.2998 -21.9004 -5.90039 -32h5.90039\n+c35.2998 0 64 -28.7002 64 -64c0 -19.2002 -8.7002 -36.2998 -22.0996 -48h14.0996c39.7998 0 72 -32.2002 72 -72c0 -23.4004 -11.2998 -44 -28.5996 -57.0996zM192 192c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32z\n+M351.5 53c2 5.2998 -2 11 -7.7998 11h-175.4c-5.7998 0 -9.7998 -5.7002 -7.7998 -11c10.5 -27.9004 58.5 -53 95.5 -53s85 25.0996 95.5 53zM320 128c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"images\" unicode=\"&#xf302;\" horiz-adv-x=\"576\" \n+d=\"M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-208c0 -44.1123 35.8877 -80 80 -80h336zM576 112c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256\n+c0 26.5098 21.4902 48 48 48h384c26.5098 0 48 -21.4902 48 -48v-256zM256 320c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48s48 21.4902 48 48zM160 176v-48h352v112l-87.5137 87.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0\n+l-135.515 -135.515l-39.5137 39.5146c-4.6875 4.68652 -12.2852 4.68652 -16.9717 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"pencil-alt\" unicode=\"&#xf303;\" \n+d=\"M497.9 305.9l-46.1006 -46.1006c-4.7002 -4.7002 -12.2998 -4.7002 -17 0l-111 111c-4.7002 4.7002 -4.7002 12.2998 0 17l46.1006 46.1006c18.6992 18.6992 49.0996 18.6992 67.8994 0l60.1006 -60.1006c18.7998 -18.7002 18.7998 -49.0996 0 -67.8994zM284.2 348.2\n+c4.7002 4.7002 12.2998 4.7002 17.0996 0l111 -111c4.7002 -4.7002 4.7002 -12.2998 0 -17l-262.6 -262.601l-121.5 -21.2998c-16.4004 -2.7998 -30.7002 11.4004 -27.7998 27.7998l21.1992 121.5zM124.1 108.1c5.5 -5.5 14.3008 -5.5 19.8008 0l154 154\n+c5.5 5.5 5.5 14.3008 0 19.8008s-14.3008 5.5 -19.8008 0l-154 -154c-5.5 -5.5 -5.5 -14.3008 0 -19.8008zM88 24v48h-36.2998l-11.2998 -64.5l31.0996 -31.0996l64.5 11.2998v36.2998h-48z\" \u002F>\n+    \u003Cglyph glyph-name=\"pen\" unicode=\"&#xf304;\" \n+d=\"M290.74 354.76l128.02 -128.02l-277.99 -277.99l-114.14 -12.5996c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l12.7002 114.22zM497.94 373.82c18.75 -18.75 18.75 -49.1504 0 -67.9102l-56.5508 -56.5498l-128.02 128.02l56.5498 56.5498\n+c18.75 18.75 49.1602 18.75 67.9102 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"pen-alt\" unicode=\"&#xf305;\" \n+d=\"M497.94 373.83c18.75 -18.7598 18.75 -49.1602 0 -67.9102l-56.5508 -56.5498l-128.02 128.02l56.5498 56.5508c18.75 18.75 49.1602 18.75 67.9102 0zM251.14 394.36l84.8506 -84.8506l82.7695 -82.7695l-196.79 -196.79\n+c-44.8223 -44.8203 -132.335 -86.8428 -195.34 -93.7998c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l0.0302734 0.229492c7.00195 62.9189 49.0156 150.315 93.7803 195.08l151.56 151.55l-22.6299 22.6201l-101.82 -101.819\n+c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6299 22.6299c-6.25 6.24023 -6.25 16.3701 0 22.6201l118.78 118.79c15.6201 15.6201 40.9395 15.6201 56.5596 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"long-arrow-alt-down\" unicode=\"&#xf309;\" horiz-adv-x=\"256\" \n+d=\"M168 102.059h46.0576c21.3828 0 32.0908 -25.8516 16.9717 -40.9707l-86.0596 -86.0586c-9.37207 -9.37305 -24.5674 -9.37305 -33.9404 0l-86.0596 86.0586c-15.1191 15.1201 -4.41113 40.9707 16.9717 40.9707h46.0586v301.941c0 6.62695 5.37305 12 12 12h56\n+c6.62695 0 12 -5.37305 12 -12v-301.941z\" \u002F>\n+    \u003Cglyph glyph-name=\"long-arrow-alt-left\" unicode=\"&#xf30a;\" horiz-adv-x=\"448\" \n+d=\"M134.059 152v-46.0576c0 -21.3828 -25.8516 -32.0908 -40.9707 -16.9717l-86.0586 86.0596c-9.37305 9.37207 -9.37305 24.5674 0 33.9404l86.0586 86.0596c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-46.0586h301.941c6.62695 0 12 -5.37305 12 -12v-56\n+c0 -6.62695 -5.37305 -12 -12 -12h-301.941z\" \u002F>\n+    \u003Cglyph glyph-name=\"long-arrow-alt-right\" unicode=\"&#xf30b;\" horiz-adv-x=\"448\" \n+d=\"M313.941 232v46.0576c0 21.3828 25.8516 32.0908 40.9707 16.9717l86.0586 -86.0596c9.37305 -9.37207 9.37305 -24.5674 0 -33.9404l-86.0586 -86.0596c-15.1201 -15.1191 -40.9707 -4.41113 -40.9707 16.9717v46.0586h-301.941c-6.62695 0 -12 5.37305 -12 12v56\n+c0 6.62695 5.37305 12 12 12h301.941z\" \u002F>\n+    \u003Cglyph glyph-name=\"long-arrow-alt-up\" unicode=\"&#xf30c;\" horiz-adv-x=\"256\" \n+d=\"M88 281.941h-46.0576c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37207 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-301.941c0 -6.62695 -5.37305 -12 -12 -12h-56\n+c-6.62695 0 -12 5.37305 -12 12v301.941z\" \u002F>\n+    \u003Cglyph glyph-name=\"expand-arrows-alt\" unicode=\"&#xf31e;\" horiz-adv-x=\"448\" \n+d=\"M448 104v-112v-0.0605469c0 -13.2148 -10.7246 -23.9395 -23.9395 -23.9395h-0.0605469h-112c-21.3896 0 -32.0898 25.9004 -17 41l36.2002 36.2002l-107.2 107.2l-107.23 -107.301l36.2305 -36.0996c15.0898 -15.0996 4.38965 -41 -17 -41h-112h-0.0605469\n+c-13.2148 0 -23.9395 10.7246 -23.9395 23.9395v0.0605469v112c0 21.4004 25.8896 32.0996 41 17l36.1904 -36.2002l107.27 107.2l-107.28 107.3l-36.1797 -36.2998c-15.0996 -15.0996 -41 -4.40039 -41 17v112v0.0605469c0 13.2148 10.7246 23.9395 23.9395 23.9395\n+h0.0605469h112c21.3896 0 32.0898 -25.9004 17 -41l-36.2002 -36.2002l107.2 -107.2l107.23 107.301l-36.2305 36.0996c-15.0898 15.0996 -4.38965 41 17 41h112h0.0605469c13.2148 0 23.9395 -10.7246 23.9395 -23.9395v-0.0605469v-112\n+c0 -21.4004 -25.8896 -32.0996 -41 -17l-36.1904 36.2002l-107.27 -107.2l107.28 -107.3l36.1797 36.2002c15.0996 15.1992 41 4.5 41 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"clipboard\" unicode=\"&#xf328;\" horiz-adv-x=\"384\" \n+d=\"M384 336v-352c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h80c0 35.29 28.71 64 64 64s64 -28.71 64 -64h80c26.5098 0 48 -21.4902 48 -48zM192 408c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24\n+s24 10.7451 24 24s-10.7451 24 -24 24zM288 294v20c0 3.31152 -2.68848 6 -6 6h-180c-3.31152 0 -6 -2.68848 -6 -6v-20c0 -3.31152 2.68848 -6 6 -6h180c3.31152 0 6 2.68848 6 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrows-alt-h\" unicode=\"&#xf337;\" \n+d=\"M377.941 278.059c0 21.3828 25.8516 32.0908 40.9707 16.9707l86.0586 -86.0596c9.37305 -9.37305 9.37305 -24.5674 0 -33.9404l-86.0586 -86.0596c-15.1201 -15.1191 -40.9707 -4.41113 -40.9707 16.9717v46.0586h-243.883v-46.0576\n+c0 -21.3828 -25.8516 -32.0908 -40.9707 -16.9717l-86.0586 86.0596c-9.37305 9.37305 -9.37305 24.5674 0 33.9404l86.0586 86.0596c15.1201 15.1191 40.9707 4.41113 40.9707 -16.9717v-46.0586h243.883v46.0586z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrows-alt-v\" unicode=\"&#xf338;\" horiz-adv-x=\"256\" \n+d=\"M214.059 70.0586c21.3828 0 32.0908 -25.8516 16.9707 -40.9707l-86.0596 -86.0586c-9.37305 -9.37305 -24.5674 -9.37305 -33.9404 0l-86.0596 86.0586c-15.1191 15.1201 -4.41113 40.9707 16.9717 40.9707h46.0586v243.883h-46.0576\n+c-21.3828 0 -32.0908 25.8516 -16.9717 40.9707l86.0596 86.0586c9.37305 9.37305 24.5674 9.37305 33.9404 0l86.0596 -86.0586c15.1191 -15.1201 4.41113 -40.9707 -16.9717 -40.9707h-46.0586v-243.883h46.0586z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-down\" unicode=\"&#xf358;\" \n+d=\"M504 192c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248s248 -111 248 -248zM212 308v-116h-70.9004c-10.6992 0 -16.0996 -13 -8.5 -20.5l114.9 -114.3c4.7002 -4.7002 12.2002 -4.7002 16.9004 0l114.899 114.3c7.60059 7.59961 2.2002 20.5 -8.5 20.5\n+h-70.7998v116c0 6.59961 -5.40039 12 -12 12h-64c-6.59961 0 -12 -5.40039 -12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-left\" unicode=\"&#xf359;\" \n+d=\"M256 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM372 236h-116v70.9004c0 10.6992 -13 16.0996 -20.5 8.5l-114.3 -114.9c-4.7002 -4.7002 -4.7002 -12.2002 0 -16.9004l114.3 -114.899\n+c7.59961 -7.60059 20.5 -2.2002 20.5 8.5v70.7998h116c6.59961 0 12 5.40039 12 12v64c0 6.59961 -5.40039 12 -12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-right\" unicode=\"&#xf35a;\" \n+d=\"M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM140 148h116v-70.9004c0 -10.6992 13 -16.0996 20.5 -8.5l114.3 114.9c4.7002 4.7002 4.7002 12.2002 0 16.9004l-114.3 115c-7.59961 7.59961 -20.5 2.19922 -20.5 -8.5\n+v-70.9004h-116c-6.59961 0 -12 -5.40039 -12 -12v-64c0 -6.59961 5.40039 -12 12 -12z\" \u002F>\n+    \u003Cglyph glyph-name=\"arrow-alt-circle-up\" unicode=\"&#xf35b;\" \n+d=\"M8 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM300 76v116h70.9004c10.6992 0 16.0996 13 8.5 20.5l-114.9 114.3c-4.7002 4.7002 -12.2002 4.7002 -16.9004 0l-115 -114.3c-7.59961 -7.59961 -2.19922 -20.5 8.5 -20.5\n+h70.9004v-116c0 -6.59961 5.40039 -12 12 -12h64c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"external-link-alt\" unicode=\"&#xf35d;\" \n+d=\"M432 128c8.83203 0 16 -7.16797 16 -16v-128c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h160c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-144v-320h320v112\n+c0 8.83203 7.16797 16 16 16h32zM488 448c13.248 0 24 -10.752 24 -24v-128c0 -21.5 -26 -32 -41 -17l-35.7197 35.6797l-243.61 -243.68c-3.88281 -3.89648 -11.499 -7.05859 -17 -7.05859s-13.1172 3.16211 -17 7.05859l-22.6699 22.6299\n+c-3.89648 3.88281 -7.05859 11.499 -7.05859 17s3.16211 13.1172 7.05859 17l243.73 243.64l-35.7305 35.7305c-15.0498 15.0898 -4.37012 41 17 41h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"external-link-square-alt\" unicode=\"&#xf360;\" horiz-adv-x=\"448\" \n+d=\"M448 368v-352c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48zM360 352h-111.971c-21.3135 0 -32.0801 -25.8613 -16.9717 -40.9707l31.9844 -31.9873l-195.527 -195.527\n+c-4.68555 -4.68555 -4.68555 -12.2832 0 -16.9707l31.0293 -31.0293c4.6875 -4.68555 12.2852 -4.68555 16.9707 0l195.526 195.526l31.9883 -31.9912c15.0283 -15.0264 40.9707 -4.47461 40.9707 16.9717v111.979c0 13.2549 -10.7451 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"exchange-alt\" unicode=\"&#xf362;\" \n+d=\"M0 280v16c0 13.2549 10.7451 24 24 24h360v48c0 21.3672 25.8994 32.042 40.9707 16.9707l80 -80c9.37207 -9.37305 9.37207 -24.5684 0 -33.9404l-80 -80c-15.0146 -15.0127 -40.9707 -4.48633 -40.9707 16.9697v48h-360c-13.2549 0 -24 10.7451 -24 24zM488 128\n+c13.2549 0 24 -10.7451 24 -24v-16c0 -13.2549 -10.7451 -24 -24 -24h-360v-48c0 -21.4365 -25.9434 -31.9971 -40.9707 -16.9697l-80 80c-9.37207 9.37207 -9.37207 24.5674 0 33.9404l80 80c15.1084 15.1094 40.9707 4.34375 40.9707 -16.9707v-48h360z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-download-alt\" unicode=\"&#xf381;\" horiz-adv-x=\"640\" \n+d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\n+c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996zM404.7 132.7c10.0996 10.0996 2.89941 27.2998 -11.2998 27.2998h-65.4004v112c0 8.7998 -7.2002 16 -16 16\n+h-48c-8.7998 0 -16 -7.2002 -16 -16v-112h-65.4004c-14.1992 0 -21.3994 -17.2002 -11.2998 -27.2998l105.4 -105.4c6.2002 -6.2002 16.3994 -6.2002 22.5996 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-upload-alt\" unicode=\"&#xf382;\" horiz-adv-x=\"640\" \n+d=\"M537.6 221.4c58.4004 -11.8008 102.4 -63.5 102.4 -125.4c0 -70.7002 -57.2998 -128 -128 -128h-368c-79.5 0 -144 64.5 -144 144c0 62.7998 40.2002 116.2 96.2002 135.9c-0.100586 2.69922 -0.200195 5.39941 -0.200195 8.09961c0 88.4004 71.5996 160 160 160\n+c59.2998 0 111 -32.2002 138.7 -80.2002c15.2002 10.2002 33.5996 16.2002 53.2998 16.2002c53 0 96 -43 96 -96c0 -12.2002 -2.2998 -23.9004 -6.40039 -34.5996zM393.4 160c14.1992 0 21.3994 17.2002 11.2998 27.2998l-105.4 105.4\n+c-6.2002 6.2002 -16.3994 6.2002 -22.5996 0l-105.4 -105.4c-10.0996 -10.0996 -3 -27.2998 11.2998 -27.2998h65.4004v-112c0 -8.7998 7.2002 -16 16 -16h48c8.7998 0 16 7.2002 16 16v112h65.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"gem\" unicode=\"&#xf3a5;\" horiz-adv-x=\"576\" \n+d=\"M485.5 448l90.5 -160h-101.1l-69.2002 160h79.7998zM357.5 448l69.2002 -160h-277.4l69.2002 160h139zM90.5 448h79.7998l-69.2002 -160h-101.1zM0 256h100.7l123 -251.7c1.5 -3.09961 -2.7002 -5.89941 -5 -3.2998zM148.2 256h279.6l-137 -318.2\n+c-1 -2.39941 -4.5 -2.39941 -5.5 0zM352.3 4.2998l123 251.7h100.7l-218.7 -254.9c-2.2998 -2.69922 -6.5 0.100586 -5 3.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"level-down-alt\" unicode=\"&#xf3be;\" horiz-adv-x=\"320\" \n+d=\"M313.553 55.6689l-103.966 -112.003c-9.48535 -10.2139 -25.6758 -10.2295 -35.1738 0l-103.975 112.003c-14.2061 15.2998 -3.37695 40.3311 17.5869 40.3311h63.9746v272h-83.9756h-0.00195312c-2.74316 0 -6.54395 1.5752 -8.4834 3.51465l-56 56\n+c-7.56055 7.55957 -2.20605 20.4854 8.48535 20.4854h195.976c13.2549 0 24 -10.7451 24 -24v-328h63.9658c20.8779 0 31.8516 -24.9688 17.5869 -40.3311z\" \u002F>\n+    \u003Cglyph glyph-name=\"level-up-alt\" unicode=\"&#xf3bf;\" horiz-adv-x=\"320\" \n+d=\"M313.553 328.331c14.2646 -15.3623 3.29102 -40.3311 -17.5869 -40.3311h-63.9658v-328c0 -13.2549 -10.7451 -24 -24 -24h-195.976c-10.6914 0 -16.0459 12.9258 -8.48535 20.4854l56 56c1.93945 1.93945 5.74023 3.51465 8.4834 3.51465h0.00195312h83.9756v272\n+h-63.9746c-20.9639 0 -31.793 25.0312 -17.5869 40.3311l103.975 112.003c9.49805 10.2295 25.6885 10.2139 35.1738 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"lock-open\" unicode=\"&#xf3c1;\" horiz-adv-x=\"576\" \n+d=\"M423.5 448c84 0.299805 152.5 -68 152.5 -152v-80c0 -13.2998 -10.7002 -24 -24 -24h-32c-13.2998 0 -24 10.7002 -24 24v80c0 39.9004 -32.7002 72.4004 -72.7002 72c-39.5996 -0.400391 -71.2998 -33.2998 -71.2998 -72.9004v-71.0996h48c26.5 0 48 -21.5 48 -48v-192\n+c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v192c0 26.5 21.5 48 48 48h224v70.5c0 84 67.5 153.2 151.5 153.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-marker-alt\" unicode=\"&#xf3c5;\" horiz-adv-x=\"384\" \n+d=\"M172.268 -53.6699c-145.298 210.639 -172.268 232.257 -172.268 309.67c0 106.039 85.9609 192 192 192s192 -85.9609 192 -192c0 -77.4131 -26.9697 -99.0312 -172.268 -309.67c-9.53516 -13.7744 -29.9307 -13.7734 -39.4648 0zM192 176c44.1826 0 80 35.8174 80 80\n+s-35.8174 80 -80 80s-80 -35.8174 -80 -80s35.8174 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone-alt\" unicode=\"&#xf3c9;\" horiz-adv-x=\"352\" \n+d=\"M336 256c8.83984 0 16 -7.16016 16 -16v-48c0 -88.9004 -66.29 -162.47 -152 -174.23v-33.7695h56c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56v34.1504\n+c-88.0303 12.1396 -152 92.0498 -152 181.689v40.1602c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-42.2998c0 -66.8105 48.71 -126.59 115.21 -133.08c76.2998 -7.44043 140.79 52.5801 140.79 127.38v48c0 8.83984 7.16016 16 16 16h16zM176 96\n+c-53.0195 0 -96 42.9805 -96 96v160c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16\n+c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301c0 -53.0195 -42.9805 -96 -96 -96z\" \u002F>\n+    \u003Cglyph glyph-name=\"mobile-alt\" unicode=\"&#xf3cd;\" horiz-adv-x=\"320\" \n+d=\"M272 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-224c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h224zM160 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM272 76v312\n+c0 6.59961 -5.40039 12 -12 12h-200c-6.59961 0 -12 -5.40039 -12 -12v-312c0 -6.59961 5.40039 -12 12 -12h200c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-bill-alt\" unicode=\"&#xf3d1;\" horiz-adv-x=\"640\" \n+d=\"M352 160c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-64c-4.41992 0 -8 3.58008 -8 8v16c0 4.41992 3.58008 8 8 8h16v55.4404l-0.469727 -0.310547c-1.1123 -0.741211 -3.09961 -1.34375 -4.43652 -1.34375\n+c-2.36328 0 -5.34375 1.59668 -6.65332 3.56348l-8.88086 13.3105c-0.741211 1.1123 -1.34375 3.09961 -1.34375 4.43555c0 2.36328 1.59668 5.34473 3.56445 6.6543l15.3301 10.2197c3.93945 2.62988 8.56934 4.03027 13.3096 4.03027h13.5801c4.41992 0 8 -3.58008 8 -8\n+v-88h16zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM48 48h64c0 35.3496 -28.6504 64 -64 64v-64zM48 272c35.3496 0 64 28.6504 64 64h-64v-64zM320 80\n+c53 0 96 50.1299 96 112c0 61.8604 -42.9805 112 -96 112s-96 -50.1396 -96 -112c0 -61.8496 42.9805 -112 96 -112zM592 48v64c-35.3496 0 -64 -28.6504 -64 -64h64zM592 272v64h-64c0 -35.3496 28.6504 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone-slash\" unicode=\"&#xf3dd;\" horiz-adv-x=\"640\" \n+d=\"M268.2 66.5996c11.5 5.40039 22.7002 11.6006 33.5996 18.1006l80 -61.7998c-76 -54.5 -169 -86.9004 -269.7 -86.9004c-11.2998 0 -20.8994 7.7998 -23.3994 18.5996l-24 104c-2.60059 11.4004 3.2002 22.9004 13.8994 27.5l112 48\n+c9.80078 4.2002 21.2002 1.40039 28 -6.89941zM633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002\n+c5.5 7 15.5 8.2002 22.5 2.7998l353.9 -273.5c18.0996 22.5 33.7998 46.7002 46 72.8008l-60.6006 49.5996c-8.2998 6.7002 -11.0996 18.2002 -6.89941 28l48 112c4.59961 10.5996 16.1992 16.5 27.5 13.9004l104 -24c10.8994 -2.5 18.5996 -12.2002 18.5996 -23.4004\n+c0 -108.9 -38.0996 -208.4 -100.9 -287.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"portrait\" unicode=\"&#xf3e0;\" horiz-adv-x=\"384\" \n+d=\"M336 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h288zM192 320c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM304 83.2002v19.2002\n+c0 31.7998 -30.0996 57.5996 -67.2002 57.5996h-5c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-5c-37.1006 0 -67.2002 -25.7998 -67.2002 -57.5996v-19.2002c0 -10.6006 10 -19.2002 22.4004 -19.2002h179.199\n+c12.4004 0 22.4004 8.59961 22.4004 19.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"reply\" unicode=\"&#xf3e5;\" \n+d=\"M8.30859 258.164l176.005 151.985c15.4053 13.3047 39.6865 2.50391 39.6865 -18.1641v-80.0537c160.629 -1.83887 288 -34.0312 288 -186.258c0 -61.4404 -39.5811 -122.309 -83.333 -154.132c-13.6533 -9.93066 -33.1113 2.5332 -28.0771 18.6309\n+c45.3438 145.012 -21.5068 183.51 -176.59 185.742v-87.915c0 -20.7002 -24.2998 -31.4531 -39.6865 -18.1641l-176.005 152c-11.0703 9.5625 -11.0859 26.7529 0 36.3281z\" \u002F>\n+    \u003Cglyph glyph-name=\"shield-alt\" unicode=\"&#xf3ed;\" \n+d=\"M466.5 364.3c17.7998 -7.39941 29.5 -24.8994 29.5 -44.2998c0 -221.3 -135.9 -344.6 -221.6 -380.3c-11.8008 -4.90039 -25.1006 -4.90039 -36.9004 0c-107 44.5996 -221.5 181.8 -221.5 380.3c0 19.4004 11.7002 36.9004 29.5996 44.2998l192 80\n+c4.89062 2.0293 13.1562 3.6748 18.4502 3.6748c5.29492 0 13.5596 -1.64551 18.4502 -3.6748zM256.1 1.7002c93.7002 46.5996 172.5 156.3 175.801 307.7l-175.9 73.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"tablet-alt\" unicode=\"&#xf3fa;\" horiz-adv-x=\"448\" \n+d=\"M400 448c26.5 0 48 -21.5 48 -48v-416c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v416c0 26.5 21.5 48 48 48h352zM224 -32c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM400 76v312\n+c0 6.59961 -5.40039 12 -12 12h-328c-6.59961 0 -12 -5.40039 -12 -12v-312c0 -6.59961 5.40039 -12 12 -12h328c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"tachometer-alt\" unicode=\"&#xf3fd;\" horiz-adv-x=\"576\" \n+d=\"M288 416c159.06 0 288 -128.94 288 -288c0 -52.7998 -14.25 -102.26 -39.0596 -144.8c-5.61035 -9.62012 -16.3008 -15.2002 -27.4404 -15.2002h-443c-11.1396 0 -21.8301 5.58008 -27.4404 15.2002c-24.8096 42.54 -39.0596 92 -39.0596 144.8\n+c0 159.06 128.94 288 288 288zM288 352c-17.6699 0 -31.9902 -14.3301 -31.9902 -32s14.3301 -32 32 -32c6.66992 0 12.5098 2.51953 17.6406 6.00977l9.21973 27.6699c0.80957 2.44043 2.33984 4.41016 3.4502 6.66992c-3.74023 13.5205 -15.6104 23.6504 -30.3203 23.6504\n+zM96 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM144 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM390.77 296.41c4.18066 12.5703 -2.59961 26.1699 -15.1699 30.3594\n+c-12.6299 4.28027 -26.1895 -2.60938 -30.3594 -15.1699l-61.3398 -184.01c-33.4004 -2.16016 -59.9004 -29.6494 -59.9004 -63.5898c0 -11.7197 3.37988 -22.5498 8.87988 -32h110.24c5.5 9.4502 8.87988 20.2803 8.87988 32c0 19.46 -8.87012 36.6699 -22.5596 48.4102z\n+M405.43 239.21c5.68066 -8.94043 15.1904 -15.21 26.5703 -15.2197c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32c-3.91992 0 -7.58008 -0.94043 -11.0498 -2.23047zM480 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"ticket-alt\" unicode=\"&#xf3ff;\" horiz-adv-x=\"576\" \n+d=\"M128 288h320v-192h-320v192zM528 192c0 -26.5098 21.4902 -48 48 -48v-96c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v96c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48v96c0 26.5098 21.4902 48 48 48h480c26.5098 0 48 -21.4902 48 -48\n+v-96c-26.5098 0 -48 -21.4902 -48 -48zM480 296c0 13.2549 -10.7451 24 -24 24h-336c-13.2549 0 -24 -10.7451 -24 -24v-208c0 -13.2549 10.7451 -24 24 -24h336c13.2549 0 24 10.7451 24 24v208z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-alt\" unicode=\"&#xf406;\" \n+d=\"M256 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144s144 -64.5 144 -144s-64.5 -144 -144 -144zM384 128c70.7002 0 128 -57.2998 128 -128v-16c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v16c0 70.7002 57.2998 128 128 128h55.0996\n+c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h55.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"window-close\" unicode=\"&#xf410;\" \n+d=\"M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM380.4 125.5l-67.1006 66.5l67.1006 66.5c4.7998 4.7998 4.7998 12.5996 0 17.4004l-40.5 40.5\n+c-4.80078 4.7998 -12.6006 4.7998 -17.4004 0l-66.5 -67.1006l-66.5 67.1006c-4.7998 4.7998 -12.5996 4.7998 -17.4004 0l-40.5 -40.5c-4.7998 -4.80078 -4.7998 -12.6006 0 -17.4004l67.1006 -66.5l-67.1006 -66.5c-4.7998 -4.7998 -4.7998 -12.5996 0 -17.4004\n+l40.5 -40.5c4.80078 -4.7998 12.6006 -4.7998 17.4004 0l66.5 67.1006l66.5 -67.1006c4.7998 -4.7998 12.5996 -4.7998 17.4004 0l40.5 40.5c4.7998 4.80078 4.7998 12.6006 0 17.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"baseball-ball\" unicode=\"&#xf433;\" horiz-adv-x=\"496\" \n+d=\"M368.5 84.0996c12.9004 -26.6992 30.2998 -50.1992 51.4004 -70.5996c-44.6006 -43 -105.101 -69.5 -171.9 -69.5c-66.9004 0 -127.5 26.5996 -172 69.7002c21.2002 20.3994 38.5996 44 51.5 70.7002l-28.7998 13.8994c-11.1006 -23 -26.1006 -43.2998 -44.2998 -61\n+c-34 42.4004 -54.4004 96.1006 -54.4004 154.7s20.4004 112.3 54.4004 154.8c17.7998 -17.2998 32.5 -37.0996 43.5 -59.3994l28.6992 14.0996c-12.7998 25.9004 -30 48.9004 -50.6992 68.7998c44.5996 43.1006 105.199 69.7002 172.1 69.7002\n+c67 0 127.6 -26.7002 172.2 -69.7998c-20.7998 -20 -38 -43 -50.7998 -69l28.6992 -14.1006c11 22.4004 25.8008 42.2002 43.6006 59.5c33.7998 -42.3994 54.2002 -96.0996 54.2002 -154.6c0 -58.5996 -20.5 -112.4 -54.5 -154.9c-18.1006 17.7002 -33 38 -44.1006 60.9004z\n+M140.2 116.1c17.2998 53.9004 14.2998 108.2 -0.700195 153.801l-30.4004 -10c13.3008 -40.2002 15.5 -87.6006 0.600586 -134zM356.5 269.5c-15 -45.5 -18 -99.7998 -0.700195 -153.8l30.5 9.7998c-14.8994 46.5 -12.5996 93.9004 0.600586 134z\" \u002F>\n+    \u003Cglyph glyph-name=\"basketball-ball\" unicode=\"&#xf434;\" horiz-adv-x=\"496\" \n+d=\"M212.3 437.7c-1.5 -50 -17 -95.4004 -44.7998 -131.2l-77.4004 77.4004c36 29.6992 78.4004 47.5 122.2 53.7998zM248 226l-46.2998 46.2998c37.2002 45.4004 57.5 103.8 58.7002 167.7c51.8994 -2.59961 103.1 -21.0996 145.5 -56.0996zM56.0996 349.9l77.4004 -77.4004\n+c-35.7002 -27.7998 -81.2002 -43.2998 -131.2 -44.7998c6.2998 43.7998 24.1006 86.2002 53.7998 122.2zM328.3 145.7l-46.2998 46.2998l157.9 157.9c35 -42.4004 53.5 -93.6006 56.0996 -145.5c-64 -1.30078 -122.4 -21.6006 -167.7 -58.7002zM248 158l46.2998 -46.2998\n+c-37.0996 -45.2998 -57.3994 -103.7 -58.7002 -167.7c-51.8994 2.59961 -103.1 21.2002 -145.5 56.0996zM439.9 34.0996l-77.4004 77.4004c35.7002 27.7002 81.0996 43.2002 131.2 44.7998c-6.2998 -43.7998 -24.1006 -86.2002 -53.7998 -122.2zM167.7 238.3\n+l46.2998 -46.2998l-157.9 -157.9c-35 42.4004 -53.5 93.6006 -56.0996 145.5c63.9004 1.10059 122.3 21.5 167.7 58.7002zM283.7 -53.7002c1.59961 50 17.0996 95.5 44.7998 131.2l77.4004 -77.4004c-36 -29.6992 -78.4004 -47.5 -122.2 -53.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"bowling-ball\" unicode=\"&#xf436;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM120 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM184 352c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32\n+s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM232 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess\" unicode=\"&#xf439;\" \n+d=\"M74 240l-33.9102 90.3799c-0.5625 1.5 -1.01953 4.01758 -1.01953 5.62012c0 8.83203 7.16797 16 16 16h0.0195312h56.9102v32h-24c-4.41602 0 -8 3.58398 -8 8v16c0 4.41602 3.58398 8 8 8h24v24c0 4.41602 3.58398 8 8 8h16c4.41602 0 8 -3.58398 8 -8v-24h24\n+c4.41602 0 8 -3.58398 8 -8v-16c0 -4.41602 -3.58398 -8 -8 -8h-24v-32h56.8896h0.0195312c8.83203 0 16 -7.16797 16 -16c0 -1.60254 -0.456055 -4.12012 -1.01953 -5.62012l-33.8896 -90.3799h10c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16\n+h-15.9404c0.116211 -35.8613 7.25684 -93.2051 15.9404 -128h-128c8.68359 34.7949 15.8242 92.1387 15.9404 128h-15.9404c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h10zM247.16 -11.5801c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086\n+v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-224c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h160c8.83203 0 16 -7.16797 16 -16v-16zM339.93 146.2\n+l-24.5693 20.7998c-6.25684 5.28125 -11.3467 16.2119 -11.3604 24.4004v58.5996c0 3.31152 2.68848 6 6 6h26.3896c3.3125 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.68848 6 6 6h53.8105c3.31152 0 6 -2.68848 6 -6v-26h24.71v26c0 3.31152 2.6875 6 6 6h26.3799\n+c3.31152 0 6 -2.68848 6 -6v-58.54v-0.03125c0 -8.19238 -5.07617 -19.1367 -11.3301 -24.4287l-24.5996 -20.79l3.29004 -82.21h-126.721zM384 144v-32h32v32c0 8.83203 -7.16797 16 -16 16s-16 -7.16797 -16 -16zM503.16 -11.5801\n+c4.87988 -2.44141 8.83984 -8.85156 8.83984 -14.3086v-0.000976562v-22.1104c0 -8.83203 -7.16797 -16 -16 -16h-192c-8.83203 0 -16 7.16797 -16 16v22.1104c0.000976562 5.45898 3.96582 11.8701 8.84961 14.3096l23.1504 11.5801v16c0 8.83203 7.16797 16 16 16h128\n+c8.83203 0 16 -7.16797 16 -16v-16z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-bishop\" unicode=\"&#xf43a;\" horiz-adv-x=\"320\" \n+d=\"M8 160.12c0 73.3799 59.8096 181.08 112.6 225.37c-14 3.41992 -24.5996 15.5098 -24.5996 30.5098c0 17.6641 14.3359 32 32 32h64c17.6641 0 32 -14.3359 32 -32c0 -15.0498 -10.5996 -27.0898 -24.5996 -30.5098c24.3994 -20.4902 50.0693 -54.6807 70.8691 -92.5898\n+l-107.89 -107.931c-1.29199 -1.29297 -2.34082 -3.82617 -2.34082 -5.6543c0 -1.8291 1.04883 -4.3623 2.34082 -5.65527l11.3105 -11.3105c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082l100.31 100.33\n+c15.96 -35.46 26.6904 -71.9492 26.6904 -102.56c0 -51.6006 -22.1396 -73.8301 -56 -84.6006v-43.5195h-192v43.5195c-33.8604 10.7705 -56 32.9609 -56 84.6006zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-board\" unicode=\"&#xf43c;\" \n+d=\"M255.9 447.8v-64h-64v64h64zM0 383.83h64v-64h-64v64zM128 447.8v-64h-64v64h64zM192 191.9h64v-64h-64v64zM0 255.88h64v-64h-64v64zM383.85 447.8v-64h-64v64h64zM511.85 447.8v-64h-64v64h64zM128 191.9v-64h-64v64h64zM511.8 0h-64v64h64v-64zM511.8 128h-64v64h64\n+v-64zM383.85 -64v64h64v-64h-64zM511.85 255.88h-64v64h64v-64zM128 -64v64h64v-64h-64zM0 -64v64h64v-64h-64zM255.9 -64v64h64v-64h-64zM0 127.93h64v-64h-64v64zM319.88 319.85h-64v64h64v-64zM255.88 191.85v64h64v-64h-64zM191.88 63.8496h64v-64h-64v64z\n+M319.88 127.85v64h64v-64h-64zM319.88 255.8v64h64v-64h-64zM319.88 63.8701h64v-64h-64v64zM64 63.9502h64v-64h-64v64zM192 319.85h-64v64h64v-64zM383.92 63.9502v64h64v-64h-64zM255.92 255.88h-64v64h64v-64zM383.92 383.83h64v-64h-64v64zM255.92 127.93h64v-64h-64\n+v64zM191.92 255.88l0.0800781 -64h-64v64h63.9199zM383.84 191.88v64h64v-64h-64zM128 319.85v-64h-64v64h64zM128 127.93h64v-64h-64v64z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-king\" unicode=\"&#xf43f;\" horiz-adv-x=\"448\" \n+d=\"M400 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM416 288c17.6504 -0.0136719 31.9756 -14.3496 31.9756 -32c0 -2.69434 -0.652344 -6.96777 -1.45605 -9.54004\n+l-73.0791 -214.46h-298.881l-73.0791 214.46c-0.803711 2.57227 -1.45605 6.8457 -1.45605 9.54004c0 17.6504 14.3252 31.9863 31.9756 32h160v48h-40c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h40v40c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8\n+v-40h40c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-40v-48h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-knight\" unicode=\"&#xf441;\" horiz-adv-x=\"384\" \n+d=\"M19 175.53c-10.4883 4.66211 -19 17.7627 -19 29.2402v0.0195312v137.21v0.0585938c0 5.47461 3.13574 13.0635 7 16.9414l9 9l-14.21 28.4199c-0.988281 1.97266 -1.79004 5.36328 -1.79004 7.56934v0.0107422c0 6.62402 5.37598 12 12 12h147.94\n+c106 0 191.92 -86 191.92 -192v-192h-319.86v14.5195v0.0224609c0 27.2783 19.7969 59.3271 44.1904 71.5381l57.2197 28.6504c14.6445 7.32324 26.5303 26.5566 26.5303 42.9297v0.00976562v50.3301l-22.1201 -11.0801\n+c-5.45117 -2.72559 -11.0732 -9.7373 -12.5508 -15.6504l-9.21973 -30.6494c-2.4502 -8.15332 -10.8545 -17.3379 -18.7598 -20.5l-12.7803 -5.12012c-3.1582 -1.2627 -8.48145 -2.28809 -11.8828 -2.28809c-3.74902 0 -9.57129 1.23535 -12.9971 2.75781zM52 320\n+c-11.04 0 -20 -8.95996 -20 -20s8.95996 -20 20 -20s20 8.95996 20 20s-8.95996 20 -20 20zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-pawn\" unicode=\"&#xf443;\" horiz-adv-x=\"320\" \n+d=\"M105.1 224c-29.3896 18.3799 -49.0996 50.7803 -49.0996 88c0 57.4082 46.5918 104 104 104s104 -46.5918 104 -104c0 -37.2197 -19.71 -69.6201 -49.0996 -88h25.0996c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-5.49023\n+c0 -44 4.11035 -86.5996 24 -122.51h-176c19.8604 35.9102 24 78.5098 24 122.51v5.49023h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h25.0996zM304 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-288\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h288z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-queen\" unicode=\"&#xf445;\" \n+d=\"M256 336c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56s56 -25.0879 56 -56s-25.0879 -56 -56 -56zM432 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM504.87 263.84\n+c3.93457 -2.62109 7.12891 -8.58691 7.12891 -13.3154c0 -2.08496 -0.756836 -5.29004 -1.68945 -7.1543l-102.55 -211.37h-303.52l-102.55 211.33c-0.932617 1.86426 -1.68945 5.06934 -1.68945 7.1543c0 4.72852 3.19434 10.6943 7.12891 13.3154l28.5703 16\n+c7.35938 4.91016 16.8096 2.5498 22.0898 -4.54004c7.86035 -10.6357 24.9736 -19.2676 38.1992 -19.2676c0.922852 0 2.41992 0.0527344 3.34082 0.118164c25.6699 1.73926 44.6699 24.7998 44.6699 50.4893c0 7.39746 6.00293 13.4004 13.4004 13.4004v0h38.7695\n+c6.04004 0 11.6104 -3.99023 12.8604 -9.91016c4.42969 -21.0361 25.4717 -38.1094 46.9697 -38.1094s42.54 17.0732 46.9697 38.1094c1.25 5.91016 6.86035 9.91016 12.8604 9.91016h38.7695c7.39746 0 13.4004 -6.00293 13.4004 -13.4004\n+c0 -23.5293 15.7002 -45.46 38.8398 -49.75c2.48926 -0.484375 6.56738 -0.878906 9.10352 -0.878906c13.166 0 30.2471 8.56152 38.127 19.1094c5.37988 7.13965 14.8496 9.67969 22.29 4.67969z\" \u002F>\n+    \u003Cglyph glyph-name=\"chess-rook\" unicode=\"&#xf447;\" horiz-adv-x=\"384\" \n+d=\"M368 416c8.83203 0 16 -7.16797 16 -16v-176l-64 -32c0 -47.7197 1.54004 -95 13.21 -160h-282.42c11.6699 65 13.21 111.67 13.21 160l-64 32v176c0 8.83203 7.16797 16 16 16h56.0996c8.83203 0 16 -7.16797 16 -16v-48h47.9004v48c0 8.83203 7.16797 16 16 16h80\n+c8.83203 0 16 -7.16797 16 -16v-48h48v48c0 8.83203 7.16797 16 16 16h56zM224 128v64c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-64h64zM368 0c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-352c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h352z\" \u002F>\n+    \u003Cglyph glyph-name=\"dumbbell\" unicode=\"&#xf44b;\" horiz-adv-x=\"640\" \n+d=\"M104 352c13.2998 0 24 -10.7002 24 -24v-272c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-24c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h24v104c0 13.2998 10.7002 24 24 24h48zM632 224c4.40039 0 8 -3.59961 8 -8v-48\n+c0 -4.40039 -3.59961 -8 -8 -8h-24v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v272c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-104h24zM456 416c13.2998 0 24 -10.7002 24 -24v-400c0 -13.2998 -10.7002 -24 -24 -24h-48\n+c-13.2998 0 -24 10.7002 -24 24v168h-128v-168c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v400c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-168h128v168c0 13.2998 10.7002 24 24 24h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"football-ball\" unicode=\"&#xf44e;\" horiz-adv-x=\"496\" \n+d=\"M481.5 387.7c6.2998 -23.9004 13.7002 -61 14.5 -104.5l-156.6 156.8c43.5996 -0.900391 80.8994 -8.5 104.8 -14.9004c18.2002 -4.89941 32.5 -19.1992 37.2998 -37.3994zM14.5 -3.7002c-6.2998 23.9004 -13.7002 61 -14.5 104.5l156.6 -156.8\n+c-43.5996 0.900391 -80.8994 8.5 -104.8 14.9004c-18.2002 4.89941 -32.5 19.1992 -37.2998 37.3994zM4.2002 164.6c22.5996 152.7 138.899 252 271.399 271.4l216.301 -216.6c-22.7002 -152.7 -139 -252 -271.5 -271.4zM321.5 288.2l-28.2998 -28.5l-28.2998 28.2998\n+c-3.10059 3.09961 -8.2002 3.09961 -11.3008 0l-11.2998 -11.2998c-3.09961 -3.10059 -3.09961 -8.2002 0 -11.2998l28.2998 -28.3008l-22.5996 -22.5996l-28.2998 28.2998c-3.10059 3.10059 -8.2002 3.10059 -11.2998 0l-11.3008 -11.2998\n+c-3.09961 -3.09961 -3.09961 -8.2002 0 -11.2998l28.3008 -28.2998l-22.6006 -22.6006l-28.2998 28.2998c-3.09961 3.10059 -8.2002 3.10059 -11.2998 0l-11.2998 -11.2998c-3.10059 -3.09961 -3.10059 -8.2002 0 -11.2998l28.2998 -28.2002l-28.2998 -28.2998\n+c-3.10059 -3.09961 -3.10059 -8.2002 0 -11.2998l11.2998 -11.2998c3.09961 -3.10059 8.2002 -3.10059 11.2998 0l28.2998 28.2998l28.2998 -28.2998c3.10059 -3.10059 8.2002 -3.10059 11.3008 0l11.2998 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998\n+l-28.2998 28.2998l22.5996 22.6006l28.2998 -28.3008c3.10059 -3.09961 8.2002 -3.09961 11.2998 0l11.3008 11.3008c3.09961 3.09961 3.09961 8.19922 0 11.2998l-28.3008 28.2998l22.6006 22.7002l28.2998 -28.2998c3.09961 -3.10059 8.2002 -3.10059 11.2998 0\n+l11.2998 11.2998c3.10059 3.09961 3.10059 8.2002 0 11.2998l-28.2998 28.2998l28.2998 28.2998c3.10059 3.10059 3.10059 8.2002 0 11.3008l-11.2998 11.2998c-3.09961 3.09961 -8.2002 3.09961 -11.2998 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"golf-ball\" unicode=\"&#xf450;\" horiz-adv-x=\"416\" \n+d=\"M96 32h224c0 -17.7002 -14.2998 -32 -32 -32h-16c-17.7002 0 -32 -14.2998 -32 -32v-20c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v20c0 17.7002 -14.2998 32 -32 32h-16c-17.7002 0 -32 14.2998 -32 32zM416 240\n+c0 -74.2002 -39 -139.2 -97.5 -176h-221c-58.5 36.7998 -97.5 101.8 -97.5 176c0 114.9 93.0996 208 208 208s208 -93.0996 208 -208zM235.9 196.1c18.2998 0 33.0996 14.8008 33.0996 33.1006c0 14.3994 -9.2998 26.2998 -22.0996 30.8994\n+c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006zM285 149.2c0 14.3994 -9.2998 26.2998 -22.0996 30.8994c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994\n+c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006c18.2998 0 33.0996 14.9004 33.0996 33.1006zM349 213.2c0 14.3994 -9.2998 26.2998 -22.0996 30.8994c9.59961 -26.7998 -15.6006 -51.2998 -41.9004 -41.8994c4.59961 -12.7998 16.5 -22.1006 30.9004 -22.1006\n+c18.2998 0 33.0996 14.9004 33.0996 33.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"hockey-puck\" unicode=\"&#xf453;\" \n+d=\"M0 288c0 53 114.6 96 256 96s256 -43 256 -96s-114.6 -96 -256 -96s-256 43 -256 96zM0 205.8c113.5 -82.3994 398.6 -82.2998 512 0v-109.8c0 -53 -114.6 -96 -256 -96s-256 43 -256 96v109.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"quidditch\" unicode=\"&#xf458;\" horiz-adv-x=\"640\" \n+d=\"M256.5 231.2l86.7002 -109.2s-16.6006 -102.4 -76.6006 -150.1c-59.8994 -47.7002 -266.6 -34.1006 -266.6 -34.1006s3.7998 23.1006 11 55.4004l94.5996 112.2c4 4.69922 -0.899414 11.5996 -6.59961 9.5l-60.4004 -22.1006c14.4004 41.7002 32.7002 80 54.6006 97.5\n+c59.8994 47.7998 163.3 40.9004 163.3 40.9004zM494.5 96.2002c44 0 79.7998 -35.7002 79.7998 -79.9004c0 -44.0996 -35.7002 -79.8994 -79.7998 -79.8994s-79.7998 35.7998 -79.7998 79.8994c0 44.1006 35.7998 79.9004 79.7998 79.9004zM636.5 417\n+c5.5 -6.90039 4.40039 -17 -2.5 -22.5l-232.5 -177.9l34.0996 -42.8994c5.10059 -6.40039 1.7002 -15.9004 -6.2998 -17.6006l-58.7998 -12.3994l-86.7002 109.2l25.2998 54.5996c3.5 7.40039 13.5 8.59961 18.6006 2.2002l34.0996 -43l232.5 177.899\n+c6.90039 5.40039 16.9004 4.30078 22.4004 -2.59961z\" \u002F>\n+    \u003Cglyph glyph-name=\"square-full\" unicode=\"&#xf45c;\" \n+d=\"M512 -64h-512v512h512v-512z\" \u002F>\n+    \u003Cglyph glyph-name=\"table-tennis\" unicode=\"&#xf45d;\" \n+d=\"M496.2 151.5c-64.1006 43.2002 -149.5 27.9004 -195.601 -34.2002l-211.5 211.5l56 56.1006c83.9004 84.0996 220 84.0996 303.9 0c63 -63.1006 78.7002 -155.601 47.2002 -233.4zM278.3 71.7998c-3.7002 -12.7002 -6.2998 -25.8994 -6.2002 -39.7002\n+c0 -19.5 3.90039 -38.0996 11 -55.0996c-25.6992 2.7998 -50.5996 13.5996 -70.2998 33.2998l-35.7002 35.7002l-89.2998 -103.3c-7.5 -8.60059 -20.7002 -9.10059 -28.7002 -1l-53.3994 53.5c-8.10059 8.09961 -7.60059 21.2998 1 28.7998l103 89.4004l-34.5 34.5996\n+c-39 39.0996 -44.6006 98.7998 -17.2998 144.1zM416 128c53 0 96 -43 96 -96s-43 -96 -96 -96s-96 43 -96 96s43 96 96 96z\" \u002F>\n+    \u003Cglyph glyph-name=\"volleyball-ball\" unicode=\"&#xf45f;\" \n+d=\"M231.39 204.52c-60.8945 -37.4102 -126.348 -123.516 -146.1 -192.199c-20.248 19.1953 -45.7393 55.5283 -56.9004 81.0996c22.8008 94.4004 89.5 174.4 180.301 216.8c11.8887 -27.9648 22.0586 -75.3184 22.6992 -105.7zM194.49 338.92\n+c-84 -39.5 -149 -108.4 -182.4 -191.5c-19.7998 109.3 34 212.4 125 262.2c19.0098 -16.9424 44.7246 -48.6162 57.4004 -70.7002zM382.09 173.82c-30.1689 3.6709 -76.2686 18.5352 -102.899 33.1797c-1.9541 71.4844 -43.8428 171.263 -93.5 222.72\n+c47.2998 14 84.1992 10.2002 98.8994 8.5c70.2002 -66.8994 106.101 -164.6 97.5 -264.399zM257.39 164.32c49.7002 -26.8008 104 -40.8008 158.601 -40.9004c22.6787 0.140625 58.9219 4.7998 80.8994 10.4004c-6.55762 -27.2012 -25.4639 -67.4766 -42.1992 -89.9004\n+c-93 -27.2998 -195.5 -9.5 -277.5 47.7998c18.2803 24.2959 54.21 56.8213 80.1992 72.6006zM159.09 64.6201c53.6006 -37.2998 144 -78.2002 256.9 -62.1006c-38.1611 -32.3467 -109.732 -58.5986 -159.758 -58.5986c-38.5156 0 -96.416 16.3516 -129.242 36.499\n+c6.39941 29.7998 16.8994 58.2002 32.0996 84.2002zM339.39 425.22c95.9004 -34.2998 164.601 -125.6 164.601 -233.399c0 -2 -0.299805 -4 -0.299805 -6c-23.9658 -7.83887 -63.8799 -14.2012 -89.0947 -14.2012c-0.166992 0 -0.438477 0.000976562 -0.605469 0.000976562\n+c7.89941 92.3994 -19.2998 183.2 -74.6006 253.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"allergies\" unicode=\"&#xf461;\" horiz-adv-x=\"448\" \n+d=\"M416 336c17.5996 0 32 -14.4004 32 -32v-176.1c-0.200195 -14 -1.90039 -28.6006 -5.09961 -42.3008l-26.5 -112.699c-5.10059 -21.7002 -24.4004 -37 -46.7002 -37h-197.601c-15.2998 0 -29.7998 7.39941 -38.7998 19.7998l-125.6 172.7\n+c-13 17.8994 -9.10059 42.8994 8.7998 55.8994s42.9004 9.10059 55.9004 -8.7998l23.5996 -32.5v241c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-152c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v184c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-184\n+c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v152c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-152c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v72c0 17.5996 14.4004 32 32 32zM176 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16\n+s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM176 128c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM240 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM240 96c8.7998 0 16 7.2002 16 16\n+s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM304 64c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM336 0c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM368 128\n+c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"band-aid\" unicode=\"&#xf462;\" horiz-adv-x=\"640\" \n+d=\"M0 288c0 35.2998 28.7002 64 64 64h96v-320h-96c-35.2998 0 -64 28.7002 -64 64v192zM576 352c35.2998 0 64 -28.7002 64 -64v-192c0 -35.2998 -28.7002 -64 -64 -64h-96v320h96zM192 32v320h256v-320h-256zM368 264c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24\n+s24 10.7002 24 24s-10.7002 24 -24 24zM368 168c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 264c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 168\n+c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"box\" unicode=\"&#xf466;\" \n+d=\"M509.5 263.4c0.799805 -2.40039 0.799805 -4.90039 1.2002 -7.40039h-238.7v192h141.4c20.6992 0 39 -13.2002 45.5 -32.7998zM240 448v-192h-238.7c0.400391 2.5 0.400391 5 1.2002 7.40039l50.5996 151.8c6.5 19.5996 24.8008 32.7998 45.5 32.7998h141.4zM0 224h512\n+v-240c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v240z\" \u002F>\n+    \u003Cglyph glyph-name=\"boxes\" unicode=\"&#xf468;\" horiz-adv-x=\"576\" \n+d=\"M560 160c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96l32 21.2998l32 -21.2998v96h80zM176 224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96\n+l32 21.2998l32 -21.2998v96h80c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224zM240 160c8.7998 0 16 -7.2002 16 -16v-192c0 -8.7998 -7.2002 -16 -16 -16h-224c-8.7998 0 -16 7.2002 -16 16v192c0 8.7998 7.2002 16 16 16h80v-96l32 21.2998\n+l32 -21.2998v96h80z\" \u002F>\n+    \u003Cglyph glyph-name=\"briefcase-medical\" unicode=\"&#xf469;\" \n+d=\"M464 320c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h80v48c0 26.5 21.5 48 48 48h160c26.5 0 48 -21.5 48 -48v-48h80zM192 352v-32h128v32h-128zM352 104v48c0 4.40039 -3.59961 8 -8 8h-56v56\n+c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"burn\" unicode=\"&#xf46a;\" horiz-adv-x=\"384\" \n+d=\"M192 448c111.8 -100.9 192 -220.6 192 -300.5c0 -124.5 -79 -211.5 -192 -211.5s-192 87 -192 211.5c0 79.5996 79.7002 199.2 192 300.5zM192 0c56.5 0 96 39 96 94.7998c0 13.5 -4.59961 61.5 -96 161.2c-91.4004 -99.7002 -96 -147.7 -96 -161.2\n+c0 -55.7998 39.5 -94.7998 96 -94.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"capsules\" unicode=\"&#xf46b;\" horiz-adv-x=\"576\" \n+d=\"M555.3 147.9c36.2002 -51.7002 23.7002 -123 -28 -159.2c-20 -14 -42.7998 -20.7002 -65.5 -20.7002c-36.0996 0 -71.5996 17 -93.7998 48.7998l-131.2 187.3c-5.5 7.90039 -9.5 16.4004 -12.7998 25v-149.1c0 -61.9004 -50.0996 -112 -112 -112s-112 50.0996 -112 112\n+v224c0 61.9004 50.0996 112 112 112c60 0 108.5 -47.2002 111.4 -106.5c7.7998 21 21.7998 40 41.5 53.7998c20 14 42.8994 20.7002 65.5 20.7002c36 0 71.5 -17 93.7998 -48.7998zM160 192v112c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-112h96zM354.8 147.1\n+l82.5 57.7002l-65.5996 93.7002c-9.40039 13.5 -24.7998 21.5 -41.2998 21.5c-10.3008 0 -20.3008 -3.09961 -28.8008 -9.09961c-11 -7.7002 -18.3994 -19.3008 -20.6992 -32.5c-2.40039 -13.2002 0.599609 -26.6006 8.2998 -37.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"clipboard-check\" unicode=\"&#xf46c;\" horiz-adv-x=\"384\" \n+d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\n+s-10.7002 24 -24 24zM313.2 176.2c4.7002 4.7002 4.7998 12.2002 0.0996094 17l-28.2002 28.3994c-4.69922 4.7002 -12.2998 4.80078 -17 0.100586l-106 -105.2l-46 46.4004c-4.69922 4.69922 -12.2998 4.7998 -17 0.0996094l-28.3994 -28.2002\n+c-4.7002 -4.7002 -4.7998 -12.2998 -0.100586 -17l82.6006 -83.2998c4.7002 -4.7002 12.2998 -4.7998 17 -0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"clipboard-list\" unicode=\"&#xf46d;\" horiz-adv-x=\"384\" \n+d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM96 24c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24\n+s10.7002 -24 24 -24zM96 120c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24zM96 216c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24zM192 408c-13.2998 0 -24 -10.7002 -24 -24\n+s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM320 40v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM320 136v16c0 4.40039 -3.59961 8 -8 8h-144\n+c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8zM320 232v16c0 4.40039 -3.59961 8 -8 8h-144c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h144c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"diagnoses\" unicode=\"&#xf470;\" horiz-adv-x=\"640\" \n+d=\"M496 192c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM320 272c-48.5 0 -88 39.5 -88 88s39.5 88 88 88s88 -39.5 88 -88s-39.5 -88 -88 -88zM59.7998 84l-17.7002 26.7002c-8.7998 13.2998 -7.59961 34.5996 10 45.0996\n+c7.40039 4.40039 17.5 10 28.7002 16c31.6006 -27.2998 79 -4.2002 79.2002 36c47.0996 17.7002 103 32.2002 160 32.2002c45.0996 0 89.2998 -9.2002 129.2 -21.7998c-11.7002 -52.9004 59.5996 -81.2002 87.7002 -35.1006\n+c21.3994 -10.3994 39.1992 -20.2998 51.0996 -27.3994c17.5996 -10.5 18.7998 -31.9004 10 -45.1006l-17.7998 -26.6992c-10.2002 -15.1006 -29.2998 -17.8008 -42.9004 -9.80078c-16.2002 9.60059 -56.2002 31.8008 -105.3 48.6006v-90.7002h-224v90.7998\n+c-49.0996 -16.8994 -89.0996 -39 -105.3 -48.5996c-13.6006 -8 -32.7002 -5.5 -42.9004 9.7998zM368 104c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24s-10.7002 24 -24 24zM272 200c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24\n+s24 10.7002 24 24s-10.7002 24 -24 24zM112 192c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM624 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32\n+c0 8.7998 7.2002 16 16 16h608z\" \u002F>\n+    \u003Cglyph glyph-name=\"dna\" unicode=\"&#xf471;\" horiz-adv-x=\"448\" \n+d=\"M0.0996094 -46.0996c5.2002 42.8994 31.4004 153.899 159.9 238.1c-128.6 84.2002 -154.7 195.2 -159.9 238.1c-1.09961 9.5 6.40039 17.8008 16 17.8008l32.3008 0.0996094c8.09961 0.0996094 14.8994 -5.90039 16 -13.9004\n+c0.699219 -5 1.7998 -11.0996 3.39941 -18.0996h312.4c1.59961 7 2.7002 13.2002 3.39941 18.0996c1.10059 8 7.90039 13.9004 16 13.9004l32.4004 -0.0996094c9.59961 0 17 -8.30078 15.9004 -17.8008c-5.80078 -47.8994 -37.4004 -181.199 -209.5 -266.699\n+c-31.7002 -15.8008 -57.4004 -33.3008 -78.7002 -51.4004h127.6c-5.59961 4.7998 -10.7998 9.59961 -17 14.2002c21.4004 11.2002 40.9004 23 58.5 35.3994c93.2998 -78.6992 114.3 -169.8 118.9 -207.699c1.2002 -9.5 -6.2998 -17.8008 -15.9004 -17.8008\n+l-32.2998 -0.0996094c-8.09961 -0.0996094 -14.9004 5.90039 -16 13.9004c-0.599609 4.89941 -1.90039 11.1992 -3.5 18.0996h-312.3c-1.60059 -7 -2.7002 -13.2002 -3.40039 -18.0996c-1.09961 -8 -7.89941 -13.9004 -16 -13.9004l-32.2998 0.0996094\n+c-9.59961 0 -17 8.30078 -15.9004 17.8008zM224 228.4c25.0996 13.5996 46.4004 28.3994 64.2002 43.5996h-128.5c17.8994 -15.2002 39.2002 -29.9004 64.2998 -43.5996zM355.1 352h-262.1c5.7002 -10.4004 12.7002 -21.0996 21 -32h220.1\n+c8.2002 10.9004 15.2002 21.5996 21 32zM92.9004 32h261.6c-5.7998 10.4004 -12.9004 21.0996 -21.2002 32h-219.399c-8.2002 -10.9004 -15.2002 -21.5996 -21 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dolly\" unicode=\"&#xf472;\" horiz-adv-x=\"576\" \n+d=\"M294.2 170.3l-53 159.4c-2.7998 8.2998 1.7002 17.3994 10.0996 20.2002l61.6006 20.5l33.0996 -99.4004l60.7002 20.0996l-33.1006 99.4004l61.1006 20.4004c8.2998 2.7998 17.3994 -1.7002 20.2002 -10.1006l60.3994 -181.2\n+c2.7998 -8.2998 -1.7002 -17.3994 -10.0996 -20.1992l-161.5 -53.8008c-14.7998 11.3008 -31.5 19.7002 -49.5 24.7002zM575.2 121.6c2.7998 -8.39941 -1.7998 -17.3994 -10.1006 -20.1992l-213.3 -71.2002c-1.09961 -57.7998 -53.2002 -103.3 -113.399 -92.6006\n+c-39.4004 6.90039 -71.2002 39.8008 -77.3008 79.2002c-5.69922 36.9004 9.90039 70.1006 36 90.5l-92.1992 276.7h-88.9004c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h112c13.7998 0 26 -8.7998 30.4004 -21.9004l99.3994 -298.199\n+c29.9004 -0.600586 56.2998 -15 73.5 -37l213.5 71.1992c8.2998 2.80078 17.4004 -1.69922 20.2002 -10.0996zM256 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"dolly-flatbed\" unicode=\"&#xf474;\" horiz-adv-x=\"640\" \n+d=\"M208 128c-8.7998 0 -16 7.2002 -16 16v256c0 8.7998 7.2002 16 16 16h144v-128l48 32l48 -32v128h144c8.7998 0 16 -7.2002 16 -16v-256c0 -8.7998 -7.2002 -16 -16 -16h-384zM624 64c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-82.7998\n+c1.7002 -5 2.89941 -10.4004 2.89941 -16c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 5.59961 1.10059 11 2.90039 16h-197.9c1.7002 -5 2.90039 -10.4004 2.90039 -16c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 5.59961 1.09961 11 2.90039 16h-82.9004\n+c-8.7998 0 -16 7.2002 -16 16v368h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h96c8.7998 0 16 -7.2002 16 -16v-368h496z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-medical\" unicode=\"&#xf477;\" horiz-adv-x=\"384\" \n+d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136z\n+M288 152c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56\n+c4.40039 0 8 3.59961 8 8v48z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-medical-alt\" unicode=\"&#xf478;\" horiz-adv-x=\"448\" \n+d=\"M288 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v168h70.0996l34.8008 -69.5c2.89941 -5.90039 11.3994 -5.90039 14.2998 0l56.7998 113.7l22.0996 -44.2002h89.9004c8.7998 0 16 7.2002 16 16\n+s-7.2002 16 -16 16h-70.2002l-34.7002 69.5c-2.89941 5.90039 -11.3994 5.90039 -14.2998 0l-56.7998 -113.7l-19.9004 39.7998c-1.39941 2.7002 -4.19922 4.40039 -7.19922 4.40039h-140.9c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h56v232\n+c0 13.2998 10.7002 24 24 24h200v-136zM441 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"first-aid\" unicode=\"&#xf479;\" horiz-adv-x=\"576\" \n+d=\"M0 368c0 26.5 21.5 48 48 48h48v-448h-48c-26.5 0 -48 21.5 -48 48v352zM128 -32v448h320v-448h-320zM192 216v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8v48\n+c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8zM528 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-48v448h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"hospital-alt\" unicode=\"&#xf47d;\" horiz-adv-x=\"576\" \n+d=\"M544 352c17.7002 0 32 -14.2998 32 -32v-368c0 -8.7998 -7.2002 -16 -16 -16h-544c-8.7998 0 -16 7.2002 -16 16v368c0 17.7002 14.2998 32 32 32h128v64c0 17.7002 14.2998 32 32 32h192c17.7002 0 32 -14.2998 32 -32v-64h128zM160 12v40c0 6.59961 -5.40039 12 -12 12\n+h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM160 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM320 12v40\n+c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM320 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40\n+c6.59961 0 12 5.40039 12 12zM336 310v20c0 3.2998 -2.7002 6 -6 6h-26v26c0 3.2998 -2.7002 6 -6 6h-20c-3.2998 0 -6 -2.7002 -6 -6v-26h-26c-3.2998 0 -6 -2.7002 -6 -6v-20c0 -3.2998 2.7002 -6 6 -6h26v-26c0 -3.2998 2.7002 -6 6 -6h20c3.2998 0 6 2.7002 6 6v26h26\n+c3.2998 0 6 2.7002 6 6zM480 12v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12zM480 140v40c0 6.59961 -5.40039 12 -12 12h-40c-6.59961 0 -12 -5.40039 -12 -12v-40\n+c0 -6.59961 5.40039 -12 12 -12h40c6.59961 0 12 5.40039 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"hospital-symbol\" unicode=\"&#xf47e;\" \n+d=\"M256 448c141.4 0 256 -114.6 256 -256s-114.6 -256 -256 -256s-256 114.6 -256 256s114.6 256 256 256zM368 72v240c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-88h-96v88c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-240\n+c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v88h96v-88c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"id-card-alt\" unicode=\"&#xf47f;\" horiz-adv-x=\"576\" \n+d=\"M528 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-480c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h144v-96h192v96h144zM288 224c-35.2998 0 -64 -28.7002 -64 -64s28.7002 -64 64 -64s64 28.7002 64 64s-28.7002 64 -64 64zM381.3 0\n+c10.4004 0 18.7998 10 15.6006 19.7998c-8.40039 25.7002 -32.5 44.2002 -60.9004 44.2002h-8.2002c-12.2002 -5.09961 -25.7002 -8 -39.7998 -8s-27.5 2.90039 -39.7998 8h-8.2002c-28.5 0 -52.5996 -18.5996 -60.9004 -44.2002\n+c-3.19922 -9.7998 5.2002 -19.7998 15.6006 -19.7998h186.6zM352 416v-96h-128v96c0 17.7002 14.2998 32 32 32h64c17.7002 0 32 -14.2998 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"notes-medical\" unicode=\"&#xf481;\" horiz-adv-x=\"384\" \n+d=\"M336 384c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h80c0 35.2998 28.7002 64 64 64s64 -28.7002 64 -64h80zM192 408c-13.2998 0 -24 -10.7002 -24 -24s10.7002 -24 24 -24s24 10.7002 24 24\n+s-10.7002 24 -24 24zM288 104v48c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8v-48c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8\n+v56h56c4.40039 0 8 3.59961 8 8zM288 296v16c0 4.40039 -3.59961 8 -8 8h-176c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h176c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"pallet\" unicode=\"&#xf482;\" horiz-adv-x=\"640\" \n+d=\"M144 192c-8.7998 0 -16 7.2002 -16 16v224c0 8.7998 7.2002 16 16 16h112v-128l64 32l64 -32v128h112c8.7998 0 16 -7.2002 16 -16v-224c0 -8.7998 -7.2002 -16 -16 -16h-352zM624 64h-48v-64h48c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608\n+c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v64h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16zM288 0v64h-160v-64h160zM512 0v64h-160v-64h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"pills\" unicode=\"&#xf484;\" horiz-adv-x=\"576\" \n+d=\"M112 416c61.9004 0 112 -50.0996 112 -112v-224c0 -61.9004 -50.0996 -112 -112 -112s-112 50.0996 -112 112v224c0 61.9004 50.0996 112 112 112zM160 192v112c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-112h96zM299.7 221.7l210.8 -210.8\n+c3.5 -3.5 3.2002 -9.40039 -0.799805 -12.3008c-62.5 -45.2998 -150.101 -40.3994 -206.4 15.9004s-61.2002 143.9 -15.8994 206.4c2.89941 3.89941 8.7998 4.2998 12.2998 0.799805zM529.5 240.7c56.4004 -56.2998 61.2002 -143.8 15.9004 -206.4\n+c-2.90039 -3.89941 -8.80078 -4.2998 -12.3008 -0.799805l-210.8 210.8c-3.5 3.5 -3.2002 9.40039 0.799805 12.2998c62.5 45.3008 150.101 40.4004 206.4 -15.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"prescription-bottle\" unicode=\"&#xf485;\" horiz-adv-x=\"384\" \n+d=\"M32 256v64h320v-352c0 -17.5996 -14.4004 -32 -32 -32h-256c-17.5996 0 -32 14.4004 -32 32v64h120c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-120v64h120c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-120v64h120c4.40039 0 8 3.59961 8 8v16\n+c0 4.40039 -3.59961 8 -8 8h-120zM360 448c13.2002 0 24 -10.7998 24 -24v-48c0 -13.2002 -10.7998 -24 -24 -24h-336c-13.2002 0 -24 10.7998 -24 24v48c0 13.2002 10.7998 24 24 24h336z\" \u002F>\n+    \u003Cglyph glyph-name=\"prescription-bottle-alt\" unicode=\"&#xf486;\" horiz-adv-x=\"384\" \n+d=\"M360 448c13.2002 0 24 -10.7998 24 -24v-48c0 -13.2002 -10.7998 -24 -24 -24h-336c-13.2002 0 -24 10.7998 -24 24v48c0 13.2002 10.7998 24 24 24h336zM32 -32v352h320v-352c0 -17.5996 -14.4004 -32 -32 -32h-256c-17.5996 0 -32 14.4004 -32 32zM96 152v-48\n+c0 -4.40039 3.59961 -8 8 -8h56v-56c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v56h56c4.40039 0 8 3.59961 8 8v48c0 4.40039 -3.59961 8 -8 8h-56v56c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8v-56h-56c-4.40039 0 -8 -3.59961 -8 -8z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"procedures\" unicode=\"&#xf487;\" horiz-adv-x=\"640\" \n+d=\"M528 224c61.9004 0 112 -50.0996 112 -112v-160c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v48h-512v-48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v352c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-240h192\n+v144c0 8.7998 7.2002 16 16 16h256zM136 352c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h140.9c3.09961 0 5.7998 -1.7002 7.19922 -4.40039l19.9004 -39.7998l49.7002 99.4004c5.89941 11.7998 22.7002 11.7998 28.5996 0l27.6006 -55.2002h102.1\n+c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16h-121.9l-22.0996 44.2002l-49.7002 -99.4004c-5.89941 -11.7998 -22.7002 -11.7998 -28.5996 0l-27.6006 55.2002h-126.1zM160 96c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64\n+s-28.7002 -64 -64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"shipping-fast\" unicode=\"&#xf48b;\" horiz-adv-x=\"640\" \n+d=\"M624 96c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48c0 -53 -43 -96 -96 -96s-96 43 -96 96h-128c0 -53 -43 -96 -96 -96s-96 43 -96 96v128h152c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-208c-4.40039 0 -8 3.59961 -8 8v16\n+c0 4.40039 3.59961 8 8 8h240c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-208c-4.40039 0 -8 3.59961 -8 8v16c0 4.40039 3.59961 8 8 8h240c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-272c-4.40039 0 -8 3.59961 -8 8v16\n+c0 4.40039 3.59961 8 8 8h56v48c0 26.5 21.5 48 48 48h256c26.5 0 48 -21.5 48 -48v-48h44.0996c12.7002 0 24.9004 -5.09961 33.9004 -14.0996l99.9004 -99.9004c9 -9 14.0996 -21.2002 14.0996 -33.9004v-108.1h16zM160 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48\n+s-48 -21.5 -48 -48s21.5 -48 48 -48zM480 -16c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48zM560 192v12.0996l-99.9004 99.9004h-44.0996v-112h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"smoking\" unicode=\"&#xf48d;\" horiz-adv-x=\"640\" \n+d=\"M632 96c4.40039 0 8 -3.59961 8 -8v-144c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v144c0 4.40039 3.59961 8 8 8h48zM553.3 360.9c54.2998 -36.4004 86.7002 -97.1006 86.7002 -162.601v-30.2998c0 -4.40039 -3.59961 -8 -8 -8h-48\n+c-4.40039 0 -8 3.59961 -8 8v30.2998c0 50.2002 -25.2002 96.7002 -67.4004 124c-18.3994 12 -28.5996 33.4004 -28.5996 55.4004v62.2998c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-62.2998c0 -6.7998 3.59961 -13 9.2998 -16.7998zM432 96\n+c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-384c-26.5 0 -48 21.5 -48 48v64c0 26.5 21.5 48 48 48h384zM400 -16v64h-176v-64h176zM487.7 306.4c35.2998 -24.7002 56.2998 -64.8008 56.2998 -108.101v-30.2998c0 -4.40039 -3.59961 -8 -8 -8h-48\n+c-4.40039 0 -8 3.59961 -8 8v30.2998c0 27.4004 -13.2998 52.9004 -35.7002 68.6006c-35.7002 25.0996 -60.2998 63 -60.2998 106.699v66.4004c0 4.40039 3.59961 8 8 8h48c4.40039 0 8 -3.59961 8 -8v-62.2998c0 -29 15.7998 -54.7002 39.7002 -71.2998zM536 96\n+c4.40039 0 8 -3.59961 8 -8v-144c0 -4.40039 -3.59961 -8 -8 -8h-48c-4.40039 0 -8 3.59961 -8 8v144c0 4.40039 3.59961 8 8 8h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"syringe\" unicode=\"&#xf48e;\" \n+d=\"M201.5 273.2l64.9004 65l135.699 -135.7l-181.899 -181.9c-17.5 -17.5996 -41.5 -25.5996 -65.4004 -23l-63.5996 7.10059l-66.2998 -66.2998c-3.10059 -3.10059 -8.2002 -3.10059 -11.3008 0l-11.2998 11.2998c-3.09961 3.09961 -3.09961 8.2002 0 11.2998\n+l66.4004 66.4004l-7.10059 63.5996c-2.59961 24.2998 5.7002 48.0996 23 65.4004l26.4004 26.3994l55.7998 -55.8994c3.10059 -3.10059 8.2002 -3.10059 11.2998 0l11.3008 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998l-55.8008 55.7998l45.3008 45.2998\n+l55.6992 -55.7998c3.10059 -3.09961 8.2002 -3.09961 11.3008 0l11.2998 11.2998c3.09961 3.10059 3.09961 8.2002 0 11.3008zM509.7 366.5c3.09961 -3.2002 3.09961 -8.2002 0 -11.4004l-11.2998 -11.2998c-3.10059 -3.09961 -8.2002 -3.09961 -11.3008 0l-28.2998 28.2998\n+l-45.2998 -45.2998l73.5 -73.5c3.09961 -3.09961 3.09961 -8.2002 0 -11.2998l-33.9004 -34c-3.09961 -3.09961 -8.19922 -3.09961 -11.2998 0l-17 17l-135.7 135.9l-17 17c-3.09961 3.09961 -3.09961 8.19922 0 11.2998l33.9004 33.8994\n+c3.09961 3.10059 8.2002 3.10059 11.2998 0l17 -17l56.6006 -56.5996l45.2998 45.2998l-28.2998 28.2998c-3.10059 3.10059 -3.10059 8.2002 0 11.3008l11.2998 11.2998c3.09961 3.09961 8.2002 3.09961 11.2998 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"tablets\" unicode=\"&#xf490;\" horiz-adv-x=\"640\" \n+d=\"M160 256c81.0996 0 147.5 -58.5 160 -134.7c0.799805 -4.7998 -3.2998 -9.2998 -8.2998 -9.2998h-303.3c-5 0 -9.10059 4.5 -8.30078 9.2998c12.4004 76.2002 78.8008 134.7 159.9 134.7zM311.6 80c5 0 9.10059 -4.5 8.30078 -9.2998\n+c-12.4004 -76.2002 -78.8008 -134.7 -159.9 -134.7s-147.5 58.5 -159.9 134.7c-0.799805 4.7998 3.30078 9.2998 8.30078 9.2998h303.199zM593.4 401.4c56.5 -56.5 61.3994 -144.2 15.8994 -206.9c-2.7998 -4 -8.7998 -4.2998 -12.2998 -0.799805l-211.3 211.399\n+c-3.5 3.40039 -3.2002 9.40039 0.799805 12.3008c62.7002 45.3994 150.4 40.5 206.9 -16zM363 382.3l211.3 -211.3c3.5 -3.40039 3.2002 -9.40039 -0.799805 -12.2998c-62.7002 -45.5 -150.4 -40.6006 -206.9 15.8994c-56.3994 56.5 -61.2998 144.2 -15.8994 206.9\n+c2.7998 4 8.7998 4.2998 12.2998 0.799805z\" \u002F>\n+    \u003Cglyph glyph-name=\"thermometer\" unicode=\"&#xf491;\" \n+d=\"M476.8 427.6c49.4004 -40.6992 42.1006 -107.3 7.2002 -142.199l-254.2 -253.301h-99.8994l-89 -89c-9.30078 -9.39941 -24.5 -9.39941 -33.9004 0c-9.40039 9.30078 -9.40039 24.5 0 33.9004l89 89v100.9l45.2998 45.6992l50.1006 -50.1992\n+c3.09961 -3.10059 8.19922 -3.10059 11.2998 0l11.2998 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998l-50.0996 50.2002l45.0996 45.3994l50.2998 -50.1992c3.10059 -3.10059 8.2002 -3.10059 11.2998 0l11.3008 11.2998c3.09961 3.09961 3.09961 8.2002 0 11.2998\n+l-50.3008 50.4004l45.1006 45.3994l50.3994 -50.5c3.10059 -3.09961 8.2002 -3.09961 11.3008 0l11.2998 11.2998c3.09961 3.10059 3.09961 8.2002 0 11.3008l-50.5 50.5l45.7002 46c36.3994 36.5 94.3994 40.8994 131.899 10.1992z\" \u002F>\n+    \u003Cglyph glyph-name=\"vial\" unicode=\"&#xf492;\" horiz-adv-x=\"480\" \n+d=\"M477.7 261.9c3.09961 -3.10059 3.09961 -8.2002 0 -11.2002l-34 -33.9004c-3.10059 -3.09961 -8.2002 -3.09961 -11.2998 0l-11.2002 11.1006l-246.3 -245.7c-20.1006 -20.1006 -46.5 -30.1006 -72.9004 -30.1006c-28.9004 -0.0996094 -57.7998 11.9004 -78.4004 35.9004\n+c-35.6992 41.5 -29.3994 104.8 9.40039 143.5l242.4 241.9l-11.2002 11.0996c-3.10059 3.09961 -3.10059 8.2002 0 11.2998l34 33.9004c3.09961 3.09961 8.2002 3.09961 11.2998 0zM318 192l69.5 69.4004l-78.5 78.2998l-148 -147.7h157z\" \u002F>\n+    \u003Cglyph glyph-name=\"vials\" unicode=\"&#xf493;\" horiz-adv-x=\"640\" \n+d=\"M72 384c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h208c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-24v-240c0 -44.0996 -35.9004 -80 -80 -80s-80 35.9004 -80 80v240h-24zM144 384v-96h64v96h-64zM624 0c8.7998 0 16 -7.2002 16 -16\n+v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608zM360 384c-4.40039 0 -8 3.59961 -8 8v48c0 4.40039 3.59961 8 8 8h208c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-24v-240\n+c0 -44.0996 -35.9004 -80 -80 -80s-80 35.9004 -80 80v240h-24zM432 384v-96h64v96h-64z\" \u002F>\n+    \u003Cglyph glyph-name=\"warehouse\" unicode=\"&#xf494;\" horiz-adv-x=\"640\" \n+d=\"M504 96c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-367.7c-4.39941 0 -8 3.59961 -8 8l0.100586 48c0 4.40039 3.59961 8 8 8h367.6zM504 0c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-368c-4.40039 0 -8 3.59961 -8 8\n+l0.0996094 48c0 4.40039 3.60059 8 8 8h367.9zM504 192c4.40039 0 8 -3.59961 8 -8v-48c0 -4.40039 -3.59961 -8 -8 -8h-367.5c-4.40039 0 -8 3.59961 -8 8l0.0996094 48c0 4.40039 3.60059 8 8 8h367.4zM610.5 331c17.7998 -7.5 29.5 -24.9004 29.5 -44.2998v-342.7\n+c0 -4.40039 -3.59961 -8 -8 -8h-80c-4.40039 0 -8 3.59961 -8 8v248c0 17.5996 -14.5996 32 -32.5996 32h-382.801c-18 0 -32.5996 -14.4004 -32.5996 -32v-248c0 -4.40039 -3.59961 -8 -8 -8h-80c-4.40039 0 -8 3.59961 -8 8v342.7c0 19.3994 11.7002 36.7998 29.5 44.2998\n+l272 113.3c4.89062 2.0293 13.1553 3.6748 18.4502 3.6748c5.29395 0 13.5596 -1.64551 18.4502 -3.6748z\" \u002F>\n+    \u003Cglyph glyph-name=\"weight\" unicode=\"&#xf496;\" \n+d=\"M448 384c35.29 0 64 -28.71 64 -64v-320c0 -35.29 -28.71 -64 -64 -64h-384c-35.29 0 -64 28.71 -64 64v320c0 35.29 28.71 64 64 64h25.9805c-16.4209 -28.2803 -25.9805 -61.0098 -25.9805 -96c0 -105.87 86.1299 -192 192 -192s192 86.1299 192 192\n+c0 34.9902 -9.55957 67.7197 -25.9805 96h25.9805zM256 128c-88.3701 0 -160 71.6299 -160 160s71.6299 160 160 160s160 -71.6299 160 -160s-71.6299 -160 -160 -160zM255.7 279.94c-21.9404 -0.170898 -39.7002 -17.96 -39.7002 -39.9404c0 -22.0898 17.9102 -40 40 -40\n+s40 17.9102 40 40c0 10.5498 -4.26953 20 -10.9502 27.1602l33.6699 78.5498c3.4707 8.11035 -0.290039 17.5205 -8.41016 21c-8.08984 3.50977 -17.5293 -0.240234 -21.0293 -8.41016z\" \u002F>\n+    \u003Cglyph glyph-name=\"x-ray\" unicode=\"&#xf497;\" horiz-adv-x=\"640\" \n+d=\"M240 64c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16zM400 32c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM624 448c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16\n+h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h608zM624 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-608c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v352h512v-352h48zM480 200v16c0 4.40039 -3.59961 8 -8 8\n+h-136v32h104c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-104v24c0 4.40039 -3.59961 8 -8 8h-16c-4.40039 0 -8 -3.59961 -8 -8v-24h-104c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h104v-32h-136c-4.40039 0 -8 -3.59961 -8 -8v-16\n+c0 -4.40039 3.59961 -8 8 -8h136v-32h-104c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h104v-32h-64c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48s48 21.5 48 48v16h64v-16c0 -26.5 21.5 -48 48 -48s48 21.5 48 48s-21.5 48 -48 48h-64v32h104\n+c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-104v32h136c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"box-open\" unicode=\"&#xf49e;\" horiz-adv-x=\"640\" \n+d=\"M425.7 192c4.5 0 9 0.599609 13.2998 1.90039l137 39.0996v-178c0 -14.5996 -10 -27.4004 -24.2002 -31l-216.399 -54.0996c-10.1006 -2.5 -20.8008 -2.5 -31 0l-216.2 54.0996c-14.2002 3.5 -24.2002 16.2998 -24.2002 31v178l137 -39.2002\n+c4.2998 -1.2998 8.7998 -1.89941 13.2998 -1.89941c16.9004 0 32.7998 9 41.5 23.5l64.2002 106.6l64.2998 -106.6c8.60059 -14.4004 24.5 -23.4004 41.4004 -23.4004zM638.3 304.2c4.5 -9.2002 -0.299805 -20.2002 -10.2002 -23.1006l-197.899 -56.5\n+c-7.10059 -2 -14.7002 1 -18.5 7.30078l-91.7002 152.1l250.1 31.9004c6.90039 0.899414 13.6006 -2.7002 16.7002 -8.90039zM53.2002 407c3.09961 6.2002 9.7002 9.7002 16.5996 8.90039l250.2 -31.9004l-91.7998 -152c-3.7998 -6.2998 -11.4004 -9.2998 -18.5 -7.2998\n+l-197.9 56.5c-9.7998 2.7998 -14.7002 13.7998 -10.0996 23z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-dots\" unicode=\"&#xf4ad;\" \n+d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\n+c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208zM128 176c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 176c17.7002 0 32 14.2998 32 32\n+s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM384 176c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-slash\" unicode=\"&#xf4b3;\" horiz-adv-x=\"640\" \n+d=\"M64 208c0 18.5996 3.2998 36.5 8.90039 53.5996l325.5 -251.6c-24.7002 -6.40039 -51 -10 -78.4004 -10c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.90039 -7.2998 4.7998\n+c-1.2998 3 -0.700195 6.40039 1.5 8.7002c0.5 0.599609 42.2002 45.5 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7zM633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7\n+c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l105.1 -81.2998c45.2002 32.6006 104.301 52.7002 169.4 52.7002c141.4 0 256 -93.0996 256 -208c0 -49.2002 -21.4004 -94.0996 -56.5996 -129.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"couch\" unicode=\"&#xf4b8;\" horiz-adv-x=\"640\" \n+d=\"M160 224c0 35.2998 -28.7002 64 -64 64h-32c0 53 43 96 96 96h320c53 0 96 -43 96 -96h-32c-35.2998 0 -64 -28.7002 -64 -64v-64h-320v64zM576 256c35.2998 0 64 -28.7002 64 -64c0 -23.5996 -13 -44 -32 -55.0996v-120.9c0 -8.7998 -7.2002 -16 -16 -16h-64\n+c-8.7998 0 -16 7.2002 -16 16v16h-384v-16c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v120.9c-19 11.0996 -32 31.5 -32 55.0996c0 35.2998 28.7002 64 64 64h32c17.7002 0 32 -14.2998 32 -32v-96h384v96c0 17.7002 14.2998 32 32 32h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"donate\" unicode=\"&#xf4b9;\" \n+d=\"M256 32c-114.9 0 -208 93.0996 -208 208s93.0996 208 208 208s208 -93.0996 208 -208s-93.0996 -208 -208 -208zM233.8 350.6c-32.7002 -0.899414 -59 -28.3994 -59.0996 -62.3994c0 -27.7002 18 -52.4004 43.7002 -60.1006l62.2998 -18.6992\n+c7.09961 -2.10059 12.0996 -9.40039 12.0996 -17.6006c0 -10.0996 -7.2998 -18.2998 -16.2998 -18.2998h-38.9004c-6.39941 0 -12.3994 1.7002 -17.7998 5.09961c-4.5 2.80078 -10.2002 2.7002 -14 -1l-16.2998 -15.5c-5 -4.7998 -4.40039 -13 1.2002 -17.0996\n+c12.5 -9.2998 27.5 -14.5996 43 -15.4004v-17c0 -9.19922 7.39941 -16.5996 16.5996 -16.5996h11.1006c9.19922 0 16.5996 7.40039 16.5996 16.5996v16.8008c32.7002 0.899414 59.0996 28.3994 59.0996 62.3994c0 27.7002 -18 52.4004 -43.6992 60.1006l-62.3008 18.6992\n+c-7.09961 2.10059 -12.0996 9.40039 -12.0996 17.6006c0 10.0996 7.2998 18.2998 16.2998 18.2998h38.9004c6.39941 0 12.3994 -1.7002 17.7998 -5.09961c4.5 -2.80078 10.2002 -2.7002 14 1l16.2998 15.5c5 4.7998 4.40039 13 -1.2002 17.0996\n+c-12.5 9.2998 -27.5 14.5996 -43 15.4004v17c0 9.19922 -7.39941 16.5996 -16.5996 16.5996h-11.0996c-9.2002 0 -16.6006 -7.40039 -16.6006 -16.5996v-16.8008zM480 96c17.7002 0 32 -14.2998 32 -32v-96c0 -17.7002 -14.2998 -32 -32 -32h-448\n+c-17.7002 0 -32 14.2998 -32 32v96c0 17.7002 14.2998 32 32 32h32.4004c19.6992 -26 44.5996 -47.7002 73 -64h-63.8008c-5.2998 0 -9.59961 -3.59961 -9.59961 -8v-16c0 -4.40039 4.2998 -8 9.59961 -8h364.7c5.2998 0 9.60059 3.59961 9.60059 8v16\n+c0 4.40039 -4.30078 8 -9.60059 8h-63.7998c28.4004 16.2998 53.4004 38 73 64h32.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"dove\" unicode=\"&#xf4ba;\" \n+d=\"M288 280.8c-50.7998 10.5 -96.5996 36.7998 -130.8 75.1006c11.2002 32.3994 27.7998 61.5996 48.8994 86.5c8.80078 10.5 25.7002 5.19922 27.8008 -8.30078c7 -45.8994 25.8994 -88.8994 54.0996 -125.199v-28.1006zM400 384h112l-32 -64v-160.1\n+c0 -88.4004 -71.5996 -159.9 -160 -159.9h-76.9004l-65.1992 -56.0996c-6.10059 -5.30078 -14.1006 -8.2002 -22.1006 -7.90039c-92.7998 3.7998 -135.8 49.4004 -153.2 76.2998c-6 9.2998 -1.19922 21.7002 9.5 24.4004l143.9 36\n+c-12.7998 9.59961 -25.7002 20.0996 -38.9004 32.7998c-51 49 -85.0996 115.1 -85.0996 185.9c0 41.3994 9.40039 80.5996 26 115.699c5.7998 12.3008 23.5 11.6006 29 -0.899414c40 -91.2002 128.6 -155.5 233 -161.7v59.4004c0 44.1992 35.7998 80.0996 80 80.0996z\n+M400 287.9c8.7998 0 16 7.19922 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-holding\" unicode=\"&#xf4bd;\" horiz-adv-x=\"576\" \n+d=\"M565.3 119.9c15.1006 -13.6006 13.9004 -36.8008 -1.2998 -48.9004l-151.2 -121c-11.3994 -9.09961 -25.5 -14 -40 -14h-356.8c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h55.4004l46.5 37.7002c21 17 47.0996 26.2998 74.0996 26.2998h160\n+c19.5 0 34.9004 -17.4004 31.5996 -37.4004c-2.59961 -15.6992 -17.3994 -26.5996 -33.2998 -26.5996h-78.2998c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h118.3c14.6006 0 28.7002 4.90039 40 14l92.4004 73.9004c12.3994 10 30.7998 10.6992 42.5996 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-holding-heart\" unicode=\"&#xf4be;\" horiz-adv-x=\"576\" \n+d=\"M275.3 197.5l-108.899 114.2c-31.6006 33.2002 -29.7002 88.2002 5.59961 118.8c30.7998 26.7002 76.7002 21.9004 104.9 -7.7998l11.0996 -11.6006l11.2002 11.7002c28.2002 29.6006 74.0996 34.4004 104.899 7.7002c35.4004 -30.5996 37.2002 -85.5996 5.60059 -118.8\n+l-108.9 -114.2c-7.09961 -7.40039 -18.5 -7.40039 -25.5 0zM565.3 119.9c15.1006 -13.6006 13.9004 -36.8008 -1.2998 -48.9004l-151.2 -121c-11.3994 -9.09961 -25.5 -14 -40 -14h-356.8c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h55.4004l46.5 37.7002\n+c21 17 47.0996 26.2998 74.0996 26.2998h160c19.5 0 34.9004 -17.4004 31.5996 -37.4004c-2.59961 -15.6992 -17.3994 -26.5996 -33.2998 -26.5996h-78.2998c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h118.3c14.6006 0 28.7002 4.90039 40 14l92.4004 73.9004\n+c12.3994 10 30.7998 10.6992 42.5996 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-holding-usd\" unicode=\"&#xf4c0;\" horiz-adv-x=\"576\" \n+d=\"M271.06 303.7c-24.0596 6.39941 -43.4297 24.7002 -46.5693 47.7002c-4.33984 32 20.6201 59.3994 53.5098 63v17.5996c0 8.7998 7.82031 16 17.3701 16h17.3701c9.5498 0 17.3701 -7.2002 17.3701 -16v-17.7197c10.2324 -1.05566 25.6982 -6.20801 34.5195 -11.5\n+c3.05469 -1.83984 5.53418 -6.22656 5.53418 -9.79199c0 -1.78516 -0.758789 -4.46777 -1.69434 -5.98828c-0.490234 -0.808594 -1.46191 -1.97266 -2.16992 -2.59961l-19 -17.5c-4.01953 -3.7002 -10.0693 -4.2002 -15.2998 -2\n+c-2.98145 1.20898 -8.0127 2.19434 -11.2305 2.19922h-35.5996c-5.03027 0 -9.12012 -3.7998 -9.12012 -8.39941c0.112305 -3.6416 3.08301 -7.27051 6.62988 -8.10059l54.2705 -14.2998c24.0996 -6.39941 43.4102 -24.7002 46.5596 -47.7002\n+c4.33984 -32 -20.5693 -59.3994 -53.5 -63v-17.5996c0 -8.7998 -7.83008 -16 -17.3799 -16h-17.3701c-9.54004 0 -17.3701 7.2002 -17.3701 16v17.7002c-10.2305 1.05566 -25.6904 6.20703 -34.5098 11.5c-3.06348 1.83594 -5.54883 6.22363 -5.54883 9.79492\n+c0 1.77051 0.74707 4.43359 1.66895 5.94531c0.510742 0.827148 1.51855 2.01953 2.25 2.65918l19 17.5c4.01953 3.7002 10.0596 4.2002 15.2998 2c2.9707 -1.20508 7.98438 -2.19043 11.1904 -2.19922h35.5996c5.03027 0 9.12012 3.7998 9.12012 8.39941\n+c-0.112305 3.6416 -3.08203 7.27051 -6.62988 8.10059zM565.27 119.9c5.92383 -5.26953 10.7432 -15.9814 10.7432 -23.9102c0 -8.49121 -5.38184 -19.6865 -12.0127 -24.9902l-151.23 -121c-9.67188 -7.72754 -27.5693 -14 -39.9492 -14h-0.0507812h-356.77\n+c-8.83203 0 -16 7.16797 -16 16v96c0 8.83203 7.16797 16 16 16h55.4004l46.5 37.71c17.8789 14.5059 51.0762 26.2842 74.0996 26.29h160v0c17.6309 0 31.9668 -14.3096 32 -31.9404v-0.120117c0 -1.48438 -0.206055 -3.87695 -0.459961 -5.33984\n+c-2.54004 -15.6992 -17.3496 -26.5996 -33.25 -26.5996h-78.29c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16h118.27h0.176758c12.3496 0 30.1904 6.27148 39.8232 14l92.4004 73.9004c12.4004 10 30.7998 10.6992 42.5996 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"hands\" unicode=\"&#xf4c2;\" horiz-adv-x=\"640\" \n+d=\"M204.8 217.6l57.6006 -76.7998c16.5996 -22.2002 25.5996 -49.0996 25.5996 -76.7998v-112c0 -8.7998 -7.2002 -16 -16 -16h-131.7c-7.2002 0 -13.5 4.7002 -15.2998 11.5996c-2 7.80078 -5.40039 15.2002 -10.4004 21.7002l-104.1 134.3\n+c-6.7998 8.5 -10.5 19.1006 -10.5 30v218.4c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-148.4l89.7998 -107.8c6 -7.2998 16.9004 -7.7998 23.6006 -1.09961l12.7998 12.7998c5.59961 5.59961 6.2998 14.5 1.5 20.9004l-38.1006 50.7998\n+c-10.5996 14.0996 -7.69922 34.2002 6.40039 44.7998s34.2002 7.7002 44.7998 -6.40039zM608 384c17.7002 0 32 -14.2998 32 -32v-218.4c0 -10.8994 -3.7002 -21.5 -10.5 -30l-104.1 -134.3c-5 -6.5 -8.40039 -13.8994 -10.4004 -21.7002\n+c-1.7998 -6.89941 -8.2002 -11.5996 -15.2998 -11.5996h-131.7c-8.7998 0 -16 7.2002 -16 16v112c0 27.7002 9 54.5996 25.5996 76.7998l57.6006 76.7998c10.5996 14.1006 30.7002 17 44.7998 6.40039s17 -30.7002 6.40039 -44.7998l-38.1006 -50.7998\n+c-4.7998 -6.40039 -4.09961 -15.3008 1.5 -20.9004l12.7998 -12.7998c6.60059 -6.60059 17.6006 -6.10059 23.6006 1.09961l89.7998 107.8v148.4c0 17.7002 14.2998 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"hands-helping\" unicode=\"&#xf4c4;\" horiz-adv-x=\"640\" \n+d=\"M488 256c13.2998 0 24 -10.7002 24 -24v-48c0 -13.2998 -10.7002 -24 -24 -24h-8v-64c0 -17.7002 -14.2998 -32 -32 -32h-16c0 -35.2998 -28.7002 -64 -64 -64h-136.6l-103.4 -59.7002c-15.2998 -8.7998 -34.9004 -3.59961 -43.7002 11.7002l-80 138.6\n+c-8.89941 15.3008 -3.59961 34.9004 11.7002 43.7002l80 46.2002v47.2998c0 22.4004 11.7998 43.2998 31.0996 54.7998l64.9004 39v-121.6c0 -39.7002 32.2998 -72 72 -72s72 32.2998 72 72v56h152zM635.7 293.4c8.7998 -15.3008 3.59961 -34.8008 -11.7002 -43.7002\n+l-80 -46.2002v28.5c0 30.9004 -25.0996 56 -56 56h-184v-88c0 -22.0996 -17.9004 -40 -40 -40s-40 17.9004 -40 40v126.3c0 11 5.59961 21.2998 15 27.1006l33.5 20.8994c10.2002 6.2998 21.9004 9.7002 33.9004 9.7002h102.199l103.4 59.7002\n+c15.2998 8.7998 34.9004 3.59961 43.7002 -11.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"parachute-box\" unicode=\"&#xf4cd;\" \n+d=\"M511.9 273c1.09961 -9.2002 -6.80078 -17 -16.1006 -17h-8.7002l-136.8 -151.9c0.700195 -2.69922 1.60059 -5.19922 1.60059 -8.09961v-128c0 -17.7002 -14.3008 -32 -32 -32h-128c-17.7002 0 -32 14.2998 -32 32v128c0 2.90039 0.899414 5.5 1.59961 8.09961\n+l-136.7 151.9h-8.7002c-9.19922 0 -17.0996 7.90039 -16 17c9.10059 75.5 78.4004 132.3 158.301 158.7c-36.4004 -39.4004 -62.4004 -100.601 -62.4004 -175.7h-28.0996l116.6 -129.5c2.5 0.599609 4.7998 1.5 7.5 1.5h48v128h-112c0 115.2 68.9004 192 128 192\n+s128 -76.7998 128 -192h-112v-128h48c2.7002 0 5 -0.900391 7.5 -1.5l116.6 129.5h-28.0996c0 75.0996 -26 136.3 -62.4004 175.7c79.9004 -26.2998 149.2 -83.1006 158.301 -158.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"people-carry\" unicode=\"&#xf4ce;\" horiz-adv-x=\"640\" \n+d=\"M128 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM512 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM637.7 -20.0996c6.59961 -16.4004 -1.40039 -35 -17.7998 -41.6006\n+c-3.90039 -1.59961 -7.90039 -2.2998 -11.9004 -2.2998c-12.7002 0 -24.7002 7.59961 -29.7002 20.0996l-27.7002 69.2002l2 18.2002l41.1006 46.4004zM603.5 189.7c4.59961 -20 -0.799805 -41.2002 -14.4004 -56.7002l-67.1992 -75.9004l-10.1006 -92.5996\n+c-1.7998 -16.4004 -15.7002 -28.5 -31.7998 -28.5c-1.2002 0 -2.2998 0.0996094 -3.5 0.200195c-17.5 1.89941 -30.2002 17.7002 -28.2998 35.2998l10.0996 92.7998c1.5 13 6.90039 25.1006 15.6006 35l43.2998 49l-17.6006 70.2998l-6.7998 -20.3994\n+c-4.09961 -12.6006 -11.8994 -23.4004 -24.5 -32.6006l-51.0996 -32.5c-4.60059 -2.89941 -12.1006 -4.59961 -17.2002 -5h-160c-5.09961 0.400391 -12.5996 2.10059 -17.2002 5l-51.0996 32.5c-12.6006 9.2002 -20.4004 20.1006 -24.5 32.6006l-6.7998 20.3994\n+l-17.6006 -70.2998l43.2998 -49c8.7002 -9.89941 14.1006 -22 15.6006 -35l10.0996 -92.7998c1.90039 -17.5996 -10.7002 -33.4004 -28.2998 -35.2998c-1.2002 -0.100586 -2.2998 -0.200195 -3.5 -0.200195c-16.2002 0 -30 12.2002 -31.7998 28.5l-10.1006 92.5996\n+l-67.1992 75.9004c-13.7002 15.5 -19 36.7002 -14.4004 56.7002l18.4004 80.2002c4.59961 20 18.5996 36.7998 37.5 44.8994c18.5 8 38.8994 6.7002 56.0996 -3.2998c22.7002 -13.4004 39.7998 -34.4004 48.0996 -59.4004l11.3008 -33.8994l16.0996 -10.2002v96\n+c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.2002 16 -16v-96l16 10.2002l11.2998 33.8994c8.40039 24.9004 25.4004 46 48.1006 59.4004c17.0996 10 37.5996 11.2998 56.0996 3.2998c18.9004 -8.09961 32.9004 -24.8994 37.5 -44.8994zM46.2998 89.9004l41.1006 -46.4004\n+l2 -18.2002l-27.7002 -69.2002c-6.5 -16.0996 -24.7998 -24.3994 -41.6006 -17.7998c-16.3994 6.60059 -24.3994 25.2002 -17.7998 41.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"piggy-bank\" unicode=\"&#xf4d3;\" horiz-adv-x=\"576\" \n+d=\"M560 224c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-48.7002c-9 -11.9004 -19.5 -22.4004 -31.2998 -31.2998v-80.7002c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v48h-128v-48c0 -8.7998 -7.2002 -16 -16 -16h-64\n+c-8.7998 0 -16 7.2002 -16 16v80.7002c-38.5996 29.2002 -64 75.0996 -64 127.3h-40c-33.2998 0 -59.9004 29.2002 -55.5 63.4004c3.59961 28.1992 29 48.5996 57.5 48.5996c3.2998 0 6 -2.7002 6 -6v-20c0 -3.2998 -2.7002 -6 -6 -6h-1\n+c-11.5996 0 -22.2998 -7.7998 -24.5 -19.2002c-3 -15.2998 8.7002 -28.7998 23.5 -28.7998h43.2002c14.8994 73 79.3994 128 156.8 128h128c7.90039 0 15.4004 -1.2002 23 -2.2998c17.5996 20.7998 43.5996 34.2998 73 34.2998h32l-18.9004 -75.5\n+c15.8008 -14.7998 28.6006 -32.5 37.4004 -52.5h29.5zM432 160c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 352c-16.4004 0 -32.2002 -2.2998 -47.4004 -6.2002c-0.0996094 2.10059 -0.599609 4.10059 -0.599609 6.2002\n+c0 53 43 96 96 96s96 -43 96 -96c0 -0.299805 -0.0996094 -0.5 -0.0996094 -0.799805c-5.2002 0.399414 -10.5 0.799805 -15.9004 0.799805h-128z\" \u002F>\n+    \u003Cglyph glyph-name=\"ribbon\" unicode=\"&#xf4d6;\" horiz-adv-x=\"448\" \n+d=\"M6.09961 3.7002l117.2 130l79.2002 -87.9004l-91.7998 -101.899c-8 -8.80078 -21.4004 -10.5 -31.2998 -3.80078l-68.8008 27.9004c-12 8.09961 -14.0996 24.9004 -4.5 35.7002zM441.9 3.7002c9.69922 -10.7998 7.59961 -27.6006 -4.30078 -35.6006l-68.7998 -27.8994\n+c-9.89941 -6.7002 -23.2998 -5.10059 -31.2998 3.7998l-248.1 275.3c-48.6006 53.7998 -13 113.5 -11.5 116l43.5996 73.2002c4.2998 7.2002 9.90039 13.2998 16.7998 18c44 29.7002 130.7 27.5996 171.4 0c6.89941 -4.7002 12.5 -10.7998 16.7998 -18l43.7002 -73.5\n+c21.8994 -36.9004 17.2998 -83.5996 -11.4004 -115.5l-34.2002 -38l-79.0996 87.7002s52.7002 59 56 64.5996c-15.4004 8.40039 -40.2002 17.9004 -77.5 17.9004s-62.0996 -9.5 -77.5 -17.9004c3.40039 -5.5 295.4 -330.1 295.4 -330.1z\" \u002F>\n+    \u003Cglyph glyph-name=\"route\" unicode=\"&#xf4d7;\" \n+d=\"M416 128c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96h-277.8c13.5 16.2998 31.2998 39.2002 47.2998 64h230.5c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32h-96c-52.9004 0 -96 43.0996 -96 96s43.0996 96 96 96h45.2998\n+c-23.0996 32.5996 -45.2998 70.5 -45.2998 96c0 53 43 96 96 96s96 -43 96 -96s-96 -160 -96 -160h-96c-17.5996 0 -32 -14.4004 -32 -32s14.4004 -32 32 -32h96zM416 384c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM96 192\n+c53 0 96 -43 96 -96s-96 -160 -96 -160s-96 107 -96 160s43 96 96 96zM96 64c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"seedling\" unicode=\"&#xf4d8;\" \n+d=\"M64 352c123.7 0 224 -100.3 224 -224v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v144c-123.7 0 -224 100.3 -224 224h64zM448 416h64c0 -115.9 -88 -211.1 -200.7 -222.8c-10.7998 40.7002 -31.2998 77.3994 -59 107.6\n+c38.2998 68.7002 111.5 115.2 195.7 115.2z\" \u002F>\n+    \u003Cglyph glyph-name=\"sign\" unicode=\"&#xf4d9;\" \n+d=\"M496 384c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-368v-368c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v368h-48c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h48v48c0 8.7998 7.2002 16 16 16h32\n+c8.7998 0 16 -7.2002 16 -16v-48h368zM160 64v224h320v-224h-320z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile-wink\" unicode=\"&#xf4da;\" horiz-adv-x=\"496\" \n+d=\"M0 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM200 240c0 17.7002 -14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32zM358.5 223.5l9.7002 -8.5c8.39941 -7.5 21.5 -0.299805 19.7998 10.7998\n+c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM157.8 122.2c-13.3994 16.2998 -38.0996 -4.10059 -24.5996 -20.4004\n+c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7002c13.5 16.2998 -11 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002s-67.7998 15.2998 -90.2002 42.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"tape\" unicode=\"&#xf4db;\" horiz-adv-x=\"640\" \n+d=\"M224 256c35.2998 0 64 -28.7002 64 -64s-28.7002 -64 -64 -64s-64 28.7002 -64 64s28.7002 64 64 64zM624 32c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-400c-123.7 0 -224 100.3 -224 224s100.3 224 224 224s224 -100.3 224 -224\n+c0 -62.7002 -25.9004 -119.3 -67.4004 -160h243.4zM224 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck-loading\" unicode=\"&#xf4de;\" horiz-adv-x=\"640\" \n+d=\"M50.2002 72.4004l-49.6006 185.5c-2.2998 8.5 2.80078 17.2998 11.3008 19.5996l77.2998 20.7002l24.7998 -92.7002l61.7998 16.5l-24.7998 92.7002l77.2002 20.7998c8.5 2.2998 17.2998 -2.7998 19.5996 -11.2998l49.7002 -185.5\n+c2.2998 -8.5 -2.7998 -17.2998 -11.2998 -19.6006l-216.4 -58c-8.5 -2.2998 -17.2998 2.80078 -19.5996 11.3008zM384 448h256v-400c0 -61.9004 -50.0996 -112 -112 -112c-60.4004 0 -109.2 47.9004 -111.6 107.7l-393.7 -107.4\n+c-4.2002 -1.2002 -8.60059 1.2998 -9.7998 5.60059l-12.6006 46.2998c-1.2002 4.2002 1.2998 8.59961 5.60059 9.7998l346.1 94.4004v323.6c0 17.7002 14.2998 32 32 32zM528 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck-moving\" unicode=\"&#xf4df;\" horiz-adv-x=\"640\" \n+d=\"M621.3 210.7c12 -12 18.7002 -28.2002 18.7002 -45.2002v-85.5c0 -8.7998 -7.2002 -16 -16 -16h-17.5996c1 -5.2002 1.59961 -10.5 1.59961 -16c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 5.5 0.5 10.7998 1.59961 16h-163.199\n+c1 -5.2002 1.59961 -10.5 1.59961 -16c0 -44.2002 -35.7998 -80 -80 -80c-26.2998 0 -49.4004 12.7998 -64 32.4004c-14.5996 -19.5 -37.7002 -32.4004 -64 -32.4004c-44.2002 0 -80 35.7998 -80 80v336c0 17.7002 14.2998 32 32 32h416c17.7002 0 32 -14.2998 32 -32\n+v-96.0996h37.5c17 0 33.2998 -6.7002 45.2998 -18.7002zM80 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM208 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM480 240v-48\n+h92.0996l-43.2998 43.2998c-3 3 -7 4.7002 -11.2998 4.7002h-37.5zM528 16c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"video-slash\" unicode=\"&#xf4e2;\" horiz-adv-x=\"640\" \n+d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.7998 -22.4004l-19.5996 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-178.5 138l-373.3 288.6l-36.5 28.2002c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998\n+l78.4004 -60.5996h244.3c26.3994 0 47.7998 -21.4004 47.7998 -47.7998v-178l32 -24.7002v137.2l109.6 75.5996c21.3008 14.6006 50.4004 -0.299805 50.4004 -25.7998v-257c0 -17.4004 -13.7998 -29.7002 -29.2002 -31.0996zM32 47.7998v245.5l365.8 -282.8\n+c-8.2002 -6.5 -18.3994 -10.5 -29.5996 -10.5h-288.4c-26.3994 0 -47.7998 21.4004 -47.7998 47.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"wine-glass\" unicode=\"&#xf4e3;\" horiz-adv-x=\"288\" \n+d=\"M216 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-208c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h40v117.18c-68.4697 15.8906 -118.05 79.9102 -111.4 154.16l15.96 178.11c0.730469 8.24023 7.55078 14.5498 15.7002 14.5498h223.48\n+c8.16016 0 14.9697 -6.30957 15.71 -14.5498l15.9502 -178.101c6.64941 -74.25 -42.9307 -138.27 -111.4 -154.159v-117.19h40z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-alt-slash\" unicode=\"&#xf4fa;\" horiz-adv-x=\"640\" \n+d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l135.5 -104.8\n+c16 62.1006 71.9004 108.2 139 108.2c79.5 0 144 -64.5 144 -144c0 -54.0996 -30.2002 -100.7 -74.4004 -125.3zM198.4 128h47.3994l248.4 -192h-382.2c-26.5 0 -48 21.5 -48 48v9.59961c0 74.2002 60.2002 134.4 134.4 134.4z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-astronaut\" unicode=\"&#xf4fb;\" horiz-adv-x=\"448\" \n+d=\"M64 224c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h13.5c24.7002 56.5 80.9004 96 146.5 96s121.8 -39.5 146.5 -96h13.5c8.7998 0 16 -7.2002 16 -16v-96c0 -8.7998 -7.2002 -16 -16 -16h-13.5c-24.7002 -56.5 -80.9004 -96 -146.5 -96\n+s-121.8 39.5 -146.5 96h-13.5zM104 312v-24c0 -53 43 -96 96 -96h48c53 0 96 43 96 96v24c0 22.0996 -21.5 40 -48 40h-144c-26.5 0 -48 -17.9004 -48 -40zM176 240l-12 36l-36 12l36 12l12 36l12 -36l36 -12l-36 -12zM327.6 126.6c67.5 -7.09961 120.4 -63.5996 120.4 -133\n+v-9.59961c0 -26.5 -21.5 -48 -48 -48h-80v64c0 17.7002 -14.2998 32 -32 32h-128c-17.7002 0 -32 -14.2998 -32 -32v-64h-80c-26.5 0 -48 21.5 -48 48v9.59961c0 69.4004 52.9004 125.9 120.4 133c29.8994 -19.2998 65.3994 -30.5996 103.6 -30.5996\n+s73.7002 11.2998 103.6 30.5996zM272 0c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16zM176 0c8.7998 0 16 -7.2002 16 -16v-48h-32v48c0 8.7998 7.2002 16 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-check\" unicode=\"&#xf4fc;\" horiz-adv-x=\"640\" \n+d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\n+c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992zM636.6 288.4c4.60059 -4.60059 4.5 -12.1006 -0.0996094 -16.8008l-141.3 -140.199c-4.7002 -4.60059 -12.2002 -4.60059 -16.7998 0.0996094\n+l-81.7002 82.2998c-4.60059 4.7002 -4.60059 12.2002 0.0996094 16.7998l28.1006 27.9004c4.69922 4.59961 12.1992 4.59961 16.7998 -0.0996094l45.5 -45.8008l104.8 104c4.7002 4.60059 12.2002 4.60059 16.7998 -0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-clock\" unicode=\"&#xf4fd;\" horiz-adv-x=\"640\" \n+d=\"M496 224c79.5996 0 144 -64.4004 144 -144s-64.4004 -144 -144 -144s-144 64.4004 -144 144s64.4004 144 144 144zM560 73.7002v12.5996c0 5.2998 -4.40039 9.7002 -9.7002 9.7002h-38.2998v54.2998c0 5.2998 -4.40039 9.7002 -9.7002 9.7002h-12.5996\n+c-5.2998 0 -9.7002 -4.40039 -9.7002 -9.7002v-76.5996c0 -5.2998 4.40039 -9.7002 9.7002 -9.7002h60.5996c5.2998 0 9.7002 4.40039 9.7002 9.7002zM320 80c0 -59.5 29.7998 -112.1 75.0996 -144h-347.1c-26.5 0 -48 21.5 -48 48v41.5996\n+c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992c8.40039 0 16.6006 -1 24.6006 -2.5c-11.5 -23.4004 -18.2002 -49.7002 -18.2002 -77.5zM224 192c-70.7002 0 -128 57.2998 -128 128\n+s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-cog\" unicode=\"&#xf4fe;\" horiz-adv-x=\"640\" \n+d=\"M610.5 74.7002l25.7998 -14.9004c2.90039 -1.7002 4.2998 -5.2002 3.2998 -8.5c-6.69922 -21.5996 -18.1992 -41.2002 -33.1992 -57.3994c-2.30078 -2.5 -6.10059 -3.10059 -9 -1.40039l-25.8008 14.9004c-10.8994 -9.30078 -23.3994 -16.5 -36.8994 -21.3008v-29.7998\n+c0 -3.39941 -2.40039 -6.39941 -5.7002 -7.09961c-21.2002 -4.7998 -43.9004 -5 -66.2002 0c-3.2998 0.700195 -5.7002 3.7002 -5.7002 7.09961v29.7998c-13.5 4.80078 -26 12 -36.8994 21.3008l-25.7998 -14.9004c-3 -1.7002 -6.7002 -1.09961 -9 1.40039\n+c-15 16.2998 -26.5 35.7998 -33.2002 57.3994c-1 3.2998 0.299805 6.7998 3.2998 8.5l25.7998 14.9004c-2.59961 14.0996 -2.59961 28.5 0 42.5996l-25.7998 14.9004c-2.90039 1.7002 -4.2998 5.2002 -3.2998 8.5c6.7002 21.5996 18.2002 41.2002 33.2002 57.3994\n+c2.2998 2.5 6.09961 3.10059 9 1.40039l25.7998 -14.9004c10.8994 9.30078 23.3994 16.5 36.8994 21.3008v29.7998c0 3.39941 2.40039 6.39941 5.7002 7.09961c21.2002 4.7998 43.9004 5 66.2002 0c3.2998 -0.700195 5.7002 -3.7002 5.7002 -7.09961v-29.7998\n+c13.5 -4.80078 26 -12 36.8994 -21.3008l25.8008 14.9004c3 1.7002 6.69922 1.09961 9 -1.40039c15 -16.1992 26.5 -35.7998 33.1992 -57.3994c1 -3.2998 -0.299805 -6.7998 -3.2998 -8.5l-25.7998 -14.9004c2.59961 -14.0996 2.59961 -28.5 0 -42.5996zM496 47.5\n+c26.7998 0 48.5 21.7998 48.5 48.5s-21.7998 48.5 -48.5 48.5s-48.5 -21.7998 -48.5 -48.5s21.7002 -48.5 48.5 -48.5zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM425.2 -34.5v-9.2002\n+c0 -4.09961 0.799805 -8 2 -11.7998c-7.7002 -5.2998 -17.1006 -8.5 -27.2002 -8.5h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992\n+c3.90039 0 7.60059 -0.900391 11.4004 -1.2002c-1 -2.89941 -2.2998 -5.7998 -3.2002 -8.7002c-5.5 -17.6992 1.90039 -36.5 17.9004 -45.6992l7.89941 -4.60059c-0.0996094 -2.59961 -0.0996094 -5.2002 0 -7.7998l-7.89941 -4.59961\n+c-16 -9.30078 -23.4004 -28 -17.9004 -45.7002c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.6006c7.5 -8 18 -12.5996 28.9004 -12.5996c6.7998 0 13.5996 1.90039 19.5996 5.2998l7.90039 4.60059c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-edit\" unicode=\"&#xf4ff;\" horiz-adv-x=\"640\" \n+d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM313.6 160c39.9004 0 75.4004 -17.7998 99.9004 -45.5l-77.2998 -77.2998l-7.90039 -7.90039l-1.2002 -11.0996l-6.7998 -60.9004\n+c-0.799805 -7.2998 0.200195 -14.5 2.60059 -21.2998h-274.9c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992zM358.9 14.7002l137.899 137.8l71.7002 -71.7002\n+l-137.9 -137.899l-60.8994 -6.80078c-10.1006 -1.19922 -18.7002 7.40039 -17.6006 17.6006zM633 179.1c9.2998 -9.39941 9.2998 -24.5 0 -33.8994l-41.7998 -41.7998l-71.7998 71.6992l4.09961 4.10059l37.7998 37.7998c9.2998 9.2998 24.5 9.2998 33.7998 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-friends\" unicode=\"&#xf500;\" horiz-adv-x=\"640\" \n+d=\"M192 192c-61.9004 0 -112 50.0996 -112 112s50.0996 112 112 112s112 -50.0996 112 -112s-50.0996 -112 -112 -112zM268.8 160c63.6006 0 115.2 -51.5996 115.2 -115.2v-28.7998c0 -26.5 -21.5 -48 -48 -48h-288c-26.5 0 -48 21.5 -48 48v28.7998\n+c0 63.6006 51.5996 115.2 115.2 115.2h8.2998c20.9004 -10 43.9004 -16 68.5 -16s47.7002 6 68.5 16h8.2998zM480 192c-53 0 -96 43 -96 96s43 96 96 96s96 -43 96 -96s-43 -96 -96 -96zM528 160c61.9004 0 112 -50.0996 112 -112c0 -26.5 -21.5 -48 -48 -48h-176.6\n+c0.0996094 2.09961 0.599609 4.2002 0.599609 6.40039v38.3994c0 38.6006 -15.2998 73.5 -39.7002 99.7998c16.5 9.5 35.2998 15.4004 55.7002 15.4004h3.7998c13.9004 -4.7998 28.6006 -8 44.2002 -8s30.2998 3.2002 44.2002 8h3.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-graduate\" unicode=\"&#xf501;\" horiz-adv-x=\"448\" \n+d=\"M319.4 127.4c71.5 -3.10059 128.6 -61.6006 128.6 -133.801v-9.59961c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v9.59961c0 72.2002 57.0996 130.7 128.6 133.801l95.4004 -95.4004zM13.5996 368.2c-18.0996 4.39941 -18.0996 27.2002 0 31.5996\n+l190.601 45.9004c13 3.09961 26.7002 3.09961 39.7002 0l190.399 -46c18.2002 -4.40039 18.2002 -27.1006 0 -31.5l-96.2998 -23.2002c8.7002 -17.2002 14 -36.4004 14 -57c0 -70.7002 -57.2998 -128 -128 -128s-128 57.2998 -128 128c0 20.5996 5.40039 39.7998 14 57\n+l-66 15.9004v-52.6006c7 -4.2002 12 -11.5 12 -20.2998c0 -8.40039 -4.59961 -15.4004 -11.0996 -19.7002l15.5996 -62.2998c1.7002 -6.90039 -2.09961 -14 -7.59961 -14h-41.8008c-5.5 0 -9.2998 7.09961 -7.59961 14l15.5996 62.2998\n+c-6.5 4.2998 -11.0996 11.2998 -11.0996 19.7002c0 8.7998 5 16.0996 12 20.2998v58.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-lock\" unicode=\"&#xf502;\" horiz-adv-x=\"640\" \n+d=\"M224 192c-70.6562 0 -128 57.3438 -128 128s57.3438 128 128 128s128 -57.3438 128 -128s-57.3438 -128 -128 -128zM320 128v-160c0.0644531 -9.49707 4.05176 -23.833 8.90039 -32h-280.9c-26.4961 0 -48 21.5039 -48 48v41.5996\n+c0.0166016 74.1729 60.2275 134.384 134.4 134.4h16.6992c19.1514 -8.83203 51.8105 -16 72.9004 -16s53.749 7.16797 72.9004 16h16.6992c5 0 9.7002 -1 14.5 -1.5c-4.41016 -7.84082 -8.03906 -21.5049 -8.09961 -30.5zM608 160c17.6641 0 32 -14.3359 32 -32v-160\n+c0 -17.6641 -14.3359 -32 -32 -32h-224c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h32v80c0 44.1602 35.8398 80 80 80s80 -35.8398 80 -80v-80h32zM496 16c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\n+M528 160v80c0 17.6641 -14.3359 32 -32 32s-32 -14.3359 -32 -32v-80h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-minus\" unicode=\"&#xf503;\" horiz-adv-x=\"640\" \n+d=\"M624 240c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-192c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h192zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128z\n+M313.6 160c74.2002 0 134.4 -60.2002 134.4 -134.4v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-ninja\" unicode=\"&#xf504;\" horiz-adv-x=\"448\" \n+d=\"M325.4 158.8c68.5996 -6.09961 122.6 -63 122.6 -133.2v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 70.2002 54 127.101 122.6 133.2l101.4 -101.399zM32 256c0 33.4004 17.0996 62.7998 43.0996 80\n+c-26 17.2002 -43.0996 46.5996 -43.0996 80c32 0 60.0996 -15.7998 77.5 -39.7998c20.9004 42.3994 64.0996 71.7998 114.5 71.7998c70.7002 0 128 -57.2998 128 -128s-57.2998 -128 -128 -128c-58.7998 0 -107.7 39.7998 -122.8 93.7002\n+c-17.4004 -18.2002 -41.9004 -29.7002 -69.2002 -29.7002zM176 352c-17.7002 0 -32 -14.2998 -32 -32h160c0 17.7002 -14.2998 32 -32 32h-96z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-shield\" unicode=\"&#xf505;\" horiz-adv-x=\"640\" \n+d=\"M622.3 176.9c10.7002 -4.2002 17.7002 -14 17.7002 -24.9004c0 -124.5 -81.5996 -193.9 -132.9 -213.9c-4.19922 -1.59961 -12.5996 -3.69922 -22.1992 0c-64.2002 25.1006 -132.9 102.301 -132.9 213.9c0 10.9004 7 20.7002 17.7002 24.9004l115.2 45\n+c9.59961 3.69922 18.0996 1.59961 22.1992 0zM496 -14.4004c34.5996 16.4004 89.9004 64.7002 95.5 151.801l-95.5 37.2998v-189.101zM224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM320 152\n+c0 -95.2998 45.2002 -169.1 99.2002 -212c-5.90039 -2.5 -12.4004 -4 -19.2002 -4h-352c-26.5 0 -48 21.5 -48 48v41.5996c0 74.2002 60.2002 134.4 134.4 134.4h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h16.6992\n+c2.60059 0 5 -0.700195 7.5 -0.799805c-0.299805 -2.40039 -1.09961 -4.7002 -1.09961 -7.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-slash\" unicode=\"&#xf506;\" horiz-adv-x=\"640\" \n+d=\"M633.8 -10.0996c7 -5.40039 8.2998 -15.5 2.90039 -22.3008l-19.6006 -25.2998c-5.5 -7 -15.5 -8.2002 -22.5 -2.7998l-588.399 454.7c-7 5.39941 -8.2002 15.3994 -2.7998 22.3994l19.5996 25.2002c5.5 7 15.5 8.2002 22.5 2.7998l147.6 -114\n+c5.40039 65.6006 59.8008 117.4 126.9 117.4c70.7002 0 128 -57.2998 128 -128c0 -55.7998 -35.9004 -102.7 -85.7002 -120.3zM96 25.5996c0 66.4004 48.2002 121.101 111.4 132.101l286.8 -221.7h-350.2c-26.5 0 -48 21.5 -48 48v41.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-tag\" unicode=\"&#xf507;\" horiz-adv-x=\"640\" \n+d=\"M630.6 83.0996c12.5 -12.5 12.5 -32.6992 -0.0996094 -45.1992l-92.5 -92.5c-12.5 -12.5 -32.7998 -12.5 -45.2998 0l-90.2998 90.1992c-12 12 -18.7002 28.2002 -18.7002 45.2002v79.2002c0 17.7002 14.2998 32 32 32h79.2998c17 0 33.2998 -6.7002 45.2998 -18.7002z\n+M447.8 104.1c13.2998 0 24 10.8008 24 24c0 13.3008 -10.7002 24 -24 24s-24 -10.6992 -24 -24c0 -13.2998 10.7002 -24 24 -24zM224 192.1c-70.7002 0 -128 57.3008 -128 127.9c0 70.7002 57.2998 128 128 128s128 -57.2998 128 -127.9c0 -70.6992 -57.2998 -128 -128 -128\n+zM351.8 80.9004c0 -25.7002 10 -49.8008 28.1006 -67.9004l58 -58c-8.80078 -11.4004 -22.4004 -18.9004 -37.9004 -18.9004h-352c-26.5 0 -48 21.5 -48 48v41.6006c0 74.2002 60.2002 134.399 134.4 134.5h16.6992c22.3008 -10.2002 46.9004 -16 72.9004 -16\n+s50.7002 5.7998 72.9004 16h16.6992c13.3008 0 26 -2.60059 38.2002 -6.2002v-73.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-tie\" unicode=\"&#xf508;\" horiz-adv-x=\"448\" \n+d=\"M224 192c-70.7002 0 -128 57.2998 -128 128s57.2998 128 128 128s128 -57.2998 128 -128s-57.2998 -128 -128 -128zM319.8 159.4c71.2998 -3.40039 128.2 -61.7002 128.2 -133.801v-41.5996c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v41.5996\n+c0 72.1006 56.9004 130.4 128.2 133.801l47.7998 -191.4l32 136l-32 56h96l-32 -56l32 -136z\" \u002F>\n+    \u003Cglyph glyph-name=\"users-cog\" unicode=\"&#xf509;\" horiz-adv-x=\"640\" \n+d=\"M610.5 106.7l25.7998 -14.9004c2.90039 -1.7002 4.2998 -5.2002 3.2998 -8.5c-6.69922 -21.5996 -18.1992 -41.2002 -33.1992 -57.3994c-2.30078 -2.5 -6.10059 -3.10059 -9 -1.40039l-25.8008 14.9004c-10.8994 -9.30078 -23.3994 -16.5 -36.8994 -21.3008v-29.7998\n+c0 -3.39941 -2.40039 -6.39941 -5.7002 -7.09961c-21.2002 -4.7998 -43.9004 -5 -66.2002 0c-3.2998 0.700195 -5.7002 3.7002 -5.7002 7.09961v29.7998c-13.5 4.80078 -26 12 -36.8994 21.3008l-25.7998 -14.9004c-3 -1.7002 -6.7002 -1.09961 -9 1.40039\n+c-15 16.2998 -26.5 35.7998 -33.2002 57.3994c-1 3.2998 0.299805 6.7998 3.2998 8.5l25.7998 14.9004c-2.59961 14.0996 -2.59961 28.5 0 42.5996l-25.7998 14.9004c-2.90039 1.7002 -4.2998 5.2002 -3.2998 8.5c6.7002 21.5996 18.2002 41.2002 33.2002 57.3994\n+c2.2998 2.5 6.09961 3.10059 9 1.40039l25.7998 -14.9004c10.8994 9.30078 23.3994 16.5 36.8994 21.3008v29.7998c0 3.39941 2.40039 6.39941 5.7002 7.09961c21.2002 4.7998 43.9004 5 66.2002 0c3.2998 -0.700195 5.7002 -3.7002 5.7002 -7.09961v-29.7998\n+c13.5 -4.80078 26 -12 36.8994 -21.3008l25.8008 14.9004c3 1.7002 6.69922 1.09961 9 -1.40039c15 -16.1992 26.5 -35.7998 33.1992 -57.3994c1 -3.2998 -0.299805 -6.7998 -3.2998 -8.5l-25.7998 -14.9004c2.59961 -14.0996 2.59961 -28.5 0 -42.5996zM496 79.5\n+c26.7998 0 48.5 21.7998 48.5 48.5s-21.7998 48.5 -48.5 48.5s-48.5 -21.7998 -48.5 -48.5s21.7002 -48.5 48.5 -48.5zM96 224c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM320 192c-61.9004 0 -112 50.0996 -112 112\n+s50 111.9 111.9 111.9c61.8994 0 112 -50.1006 112 -112c0 -17.2002 -4.2002 -33.4004 -11.2002 -48c-0.799805 -0.5 -1.60059 -0.900391 -2.40039 -1.40039l-7.89941 4.59961c-5.90039 3.5 -12.7002 5.30078 -19.6006 5.30078c-11 0 -21.5 -4.60059 -28.8994 -12.6006\n+c-15.8008 -17.0996 -28 -37.5 -36.3008 -59.2002c-1.89941 -0.0996094 -3.69922 -0.599609 -5.59961 -0.599609zM425.2 -2.5v-9.2002c0 -7.5 2.5 -14.2998 6.2002 -20.2998h-255.4c-26.5 0 -48 21.5 -48 48v28.7998c0 63.6006 51.5996 115.2 115.3 115.2h8.2998\n+c20.9004 -10 43.9004 -16 68.5 -16c3.30078 0 6.5 0.400391 9.80078 0.599609c2.7998 -3.09961 6 -5.89941 9.7998 -8.09961l7.89941 -4.59961c-0.0996094 -2.60059 -0.0996094 -5.2002 0 -7.80078c-0.899414 -0.599609 -36.5 -15.7998 -25.7998 -50.2998\n+c7.90039 -25.7002 21.9004 -49.7998 40.2002 -69.5996c7.5 -8 18 -12.6006 28.9004 -12.6006c12.1992 0 19.2998 5 27.5 9.80078c2.19922 -1.30078 4.5 -2.7002 6.7998 -3.90039zM173.1 173.4c-40.2998 -22.1006 -68.8994 -62 -75.1992 -109.4h-65.9004\n+c-17.7002 0 -32 14.2998 -32 32v32c0 35.2998 28.7002 64 64 64h64c17.5996 0 33.5 -7.09961 45.0996 -18.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"balance-scale-left\" unicode=\"&#xf515;\" horiz-adv-x=\"640\" \n+d=\"M528 0c8.83984 0 16 -7.16016 16.0098 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v342.75c-4.55957 2 -8.91992 4.34961 -12.9902 7.12012l-142.05 -47.6299c-8.37988 -2.81055 -17.4502 1.7002 -20.2598 10.0801l-10.1699 30.3398\n+c-2.80957 8.37988 1.7002 17.4502 10.0801 20.2598l128.39 43.0498c-0.419922 3.32031 -1.00977 6.60059 -1.00977 10.0303c0 44.1797 35.8203 80 80 80c29.6904 0 55.2998 -16.3604 69.1104 -40.3701l117.92 39.5303c8.37988 2.80957 17.4502 -1.7002 20.2598 -10.0801\n+l10.1699 -30.3398c2.80957 -8.37988 -1.7002 -17.4502 -10.0801 -20.2598l-132 -44.2607c-7.28027 -21.25 -22.96 -38.5293 -43.3799 -47.4697v-294.75h176zM639.98 144c0 -44.1797 -57.29 -80 -127.98 -80s-128 35.8203 -128 80h0.0195312\n+c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51zM440 160h144l-72 144zM170.93 197.51c86.3906 -172.779 85.0508 -165.33 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80\n+s-128 35.8203 -128 80h0.0195312c0 15.6699 -2.0791 7.25 85.04 181.51c17.6807 35.3604 68.2207 35.29 85.8701 0zM56 32h144l-72 144z\" \u002F>\n+    \u003Cglyph glyph-name=\"balance-scale-right\" unicode=\"&#xf516;\" horiz-adv-x=\"640\" \n+d=\"M96 -16c0 8.83984 7.16016 16 16 16h175.99v294.76c-20.4199 8.93066 -36.1006 26.2207 -43.3799 47.4707l-132 44.2598c-8.37012 2.80957 -12.8906 11.8799 -10.0801 20.2598l10.1699 30.3398c2.80957 8.37012 11.8799 12.8906 20.2598 10.0801l117.93 -39.54\n+c13.8105 24.0098 39.4199 40.3701 69.1104 40.3701c44.1797 0 80 -35.8203 80 -80c0 -3.42969 -0.589844 -6.70996 -1.00977 -10.0303l128.399 -43.0498c8.37012 -2.80957 12.8906 -11.8799 10.0801 -20.2598l-10.1699 -30.3398\n+c-2.80957 -8.37012 -11.8799 -12.8906 -20.2598 -10.0801l-142.05 47.6299c-4.07031 -2.77051 -8.43066 -5.12012 -12.9902 -7.12012v-342.75c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83984 0 -16 7.16016 -16 16v32zM0 144c0 16.1797 -1.32031 8.73047 85.0596 181.51\n+c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80zM56 160h144l-72 144zM384.02 16c0 16.1797 -1.33984 8.73047 85.04 181.51\n+c17.6504 35.29 68.1904 35.3604 85.8701 0c87.1299 -174.26 85.0508 -165.84 85.0508 -181.51h0.0195312c0 -44.1797 -57.3096 -80 -128 -80s-128 35.8203 -128 80h0.0195312zM440 32h144l-72 144z\" \u002F>\n+    \u003Cglyph glyph-name=\"blender\" unicode=\"&#xf517;\" \n+d=\"M416 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-320c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h256zM288 -32c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM328 384\n+c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46l-17.46 -64\n+h-256l-8.73047 96h-103.27c-26.5098 0 -48 21.4902 -48 48v160c0 26.5098 21.4902 48 48 48h464l-17.46 -64h-166.54zM64 256h81.46l-11.6396 128h-69.8203v-128z\" \u002F>\n+    \u003Cglyph glyph-name=\"book-open\" unicode=\"&#xf518;\" horiz-adv-x=\"576\" \n+d=\"M542.22 415.95c18.4199 1.04004 33.7803 -12.9902 33.7705 -30.7002v-337.84c0 -16.2305 -13.1299 -29.7705 -30.0205 -30.6602c-49.4697 -2.59961 -149.52 -12.0996 -218.7 -46.9199c-10.6494 -5.36035 -23.2793 1.93945 -23.2793 13.4902v363.87\n+c0 5.2793 2.62988 10.3291 7.26953 13.1699c67.2402 41.1592 176.16 52.4795 230.96 55.5898zM264.73 360.36c4.64941 -2.85059 7.26953 -7.7002 7.26953 -12.9902v-364.12c0 -11.5195 -12.5898 -18.8096 -23.21 -13.46c-69.1797 34.8398 -169.28 44.3496 -218.771 46.9502\n+c-16.8896 0.879883 -30.0195 14.4199 -30.0195 30.6602v337.85c0 17.71 15.3604 31.7402 33.7803 30.7002c54.7998 -3.12012 163.72 -14.4307 230.95 -55.5898z\" \u002F>\n+    \u003Cglyph glyph-name=\"broadcast-tower\" unicode=\"&#xf519;\" horiz-adv-x=\"640\" \n+d=\"M150.94 256c-7.01074 0 -13.46 4.5 -15.4004 11.2402c-4.90039 16.9697 -7.54004 34.6396 -7.54004 52.7598s2.63965 35.79 7.53027 52.7695c1.9502 6.74023 8.39941 11.2305 15.4102 11.2305h33.7295c11.0098 0 18.6201 -10.8301 14.8604 -21.1797\n+c-4.93066 -13.5801 -7.5498 -27.9805 -7.5498 -42.8203s2.61914 -29.2402 7.5498 -42.8203c3.75 -10.3496 -3.85059 -21.1797 -14.8604 -21.1797h-33.7295zM89.9199 424.66c-16.54 -31.1406 -49.6104 -115.97 0.169922 -209.29\n+c5.66016 -10.6299 -1.92969 -23.3701 -13.9502 -23.3701h-34.8398c-6.18945 0 -11.9902 3.50977 -14.6094 9.13965c-23.5703 50.5303 -26.6904 94.1104 -26.6904 118.86c0 42.3496 9.40039 82.46 25.8896 118.69c2.60059 5.71973 8.4707 9.30957 14.7402 9.30957h35.3301\n+c12.0098 0 19.5996 -12.7197 13.96 -23.3398zM614.06 438.71c16.5205 -36.2295 25.9404 -76.3496 25.9404 -118.71s-9.42969 -82.4805 -25.96 -118.71c-2.59961 -5.70996 -8.45996 -9.29004 -14.7305 -9.29004h-35.2295c-12.1104 0 -19.6299 12.8398 -13.9102 23.5195\n+c48.1396 89.8105 17.9902 174.94 -0.280273 209.23c-5.63965 10.5898 2.04004 23.25 14.0205 23.25h35.4199c6.26953 0 12.1299 -3.58008 14.7295 -9.29004zM489.06 384c7.01074 0 13.46 -4.49023 15.4004 -11.2402c4.90039 -16.9697 7.54004 -34.6396 7.54004 -52.7598\n+s-2.62988 -35.79 -7.53027 -52.7598c-1.9502 -6.75 -8.38965 -11.2402 -15.4102 -11.2402h-33.7295c-11.0098 0 -18.6201 10.8301 -14.8604 21.1797c4.93066 13.5801 7.5498 27.9805 7.5498 42.8203s-2.61914 29.2402 -7.5498 42.8203\n+c-3.75 10.3496 3.85059 21.1797 14.8604 21.1797h33.7295zM372.76 283.88l130.5 -313.41c3.39062 -8.14941 -0.459961 -17.5195 -8.60938 -20.9199l-29.5107 -12.3096c-8.14941 -3.40039 -17.5098 0.450195 -20.9092 8.60938l-49.2002 118.15h-150.07l-49.1904 -118.15\n+c-3.38965 -8.14941 -12.7598 -12.0098 -20.9092 -8.60938l-29.5107 12.3096c-8.14941 3.40039 -12.0098 12.7705 -8.60938 20.9199l130.5 313.41c-7.0498 10.29 -11.2002 22.71 -11.2002 36.1201c0 35.3496 28.6396 64 63.96 64c35.3301 0 63.96 -28.6504 63.96 -64\n+c0 -13.4102 -4.15039 -25.8301 -11.2002 -36.1201zM271.62 128h96.7598l-48.3799 116.19z\" \u002F>\n+    \u003Cglyph glyph-name=\"broom\" unicode=\"&#xf51a;\" horiz-adv-x=\"640\" \n+d=\"M256.47 231.23l86.7305 -109.181s-16.6006 -102.359 -76.5703 -150.12c-59.9697 -47.7793 -266.63 -34.1201 -266.63 -34.1201s3.7998 23.1406 11 55.4307l94.6201 112.17c3.96973 4.7002 -0.870117 11.6201 -6.65039 9.5l-60.3994 -22.0898\n+c14.4395 41.6602 32.7197 80.04 54.5996 97.4697c59.9697 47.7598 163.3 40.9404 163.3 40.9404zM636.53 416.97c5.48926 -6.91016 4.33984 -16.96 -2.5498 -22.4395l-232.48 -177.8l34.0898 -42.9209c5.08008 -6.39941 1.66016 -15.9092 -6.33984 -17.5996\n+l-58.7998 -12.4502l-86.7305 109.181l25.3301 54.5498c3.4502 7.41992 13.5 8.62012 18.5898 2.20996l34.1406 -42.9697l232.479 177.8c6.89062 5.48926 16.9199 4.33984 22.4102 -2.56055z\" \u002F>\n+    \u003Cglyph glyph-name=\"chalkboard\" unicode=\"&#xf51b;\" horiz-adv-x=\"640\" \n+d=\"M96 384v-352h-64v376c0 22.0596 17.9404 40 40 40h496c22.0596 0 40 -17.9404 40 -40v-376h-64v352h-448zM624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h272v64h192v-64\n+h144z\" \u002F>\n+    \u003Cglyph glyph-name=\"chalkboard-teacher\" unicode=\"&#xf51c;\" horiz-adv-x=\"640\" \n+d=\"M208 96c62.0596 0 112.33 -50.4805 112 -112.62c-0.139648 -26.2598 -21.7305 -47.3799 -48 -47.3799h-224c-26.2695 0 -47.8604 21.1201 -48 47.3799c-0.330078 62.1396 49.9404 112.62 112 112.62c2.38965 0 4.76953 -0.349609 7.0498 -1.08984\n+c12.9697 -4.20996 26.6006 -6.91016 40.9502 -6.91016s27.9805 2.7002 40.9404 6.91016c2.2793 0.740234 4.66992 1.08984 7.05957 1.08984zM160 128c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96s-42.9805 -96 -96 -96zM592 448\n+c26.4697 0 48 -22.25 48 -49.5898v-316.82c0 -27.3398 -21.5303 -49.5898 -48 -49.5898h-244.55c-6.57031 25.2695 -20.5898 47.3096 -39.6904 64h76.2402v64h128v-64h64v288h-352v-49.7998c-18.9004 11.0195 -40.5801 17.7998 -64 17.7998v46.4102\n+c0 27.3398 21.5303 49.5898 48 49.5898h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"church\" unicode=\"&#xf51d;\" horiz-adv-x=\"640\" \n+d=\"M464.46 201.32c9.63965 -5.78027 15.54 -16.2002 15.54 -27.4404v-237.88h-96v96c0 35.3496 -28.6504 64 -64 64s-64 -28.6504 -64 -64v-96h-96v237.88c0 10.0029 6.96191 22.2959 15.54 27.4404l112.46 67.4795v51.2002h-48c-8.83984 0 -16 7.16016 -16 16v32\n+c0 8.83984 7.16016 16 16 16h48v48c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-48h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-51.2002zM0 52.04c0.00195312 11.6455 8.68945 24.8252 19.3896 29.4199l108.61 46.54\n+v-192h-112c-8.83984 0 -16 7.16016 -16 16v100.04zM620.61 81.46c11.7598 -5.0498 19.3896 -16.6201 19.3896 -29.4199v-100.04c0 -8.83984 -7.16016 -16 -16 -16h-112v192z\" \u002F>\n+    \u003Cglyph glyph-name=\"coins\" unicode=\"&#xf51e;\" \n+d=\"M0 42.7002c41.2998 -29.1006 116.8 -42.7002 192 -42.7002s150.7 13.5996 192 42.7002v-42.7002c0 -35.2998 -86 -64 -192 -64s-192 28.7002 -192 64v42.7002zM320 320c-106 0 -192 28.7002 -192 64s86 64 192 64s192 -28.7002 192 -64s-86 -64 -192 -64zM0 147.6\n+c41.2998 -34 116.9 -51.5996 192 -51.5996s150.7 17.5996 192 51.5996v-51.5996c0 -35.2998 -86 -64 -192 -64s-192 28.7002 -192 64v51.5996zM416 136.6v63.6006c38.7002 6.89941 72.7998 18.0996 96 34.5v-42.7002c0 -23.7002 -38.7002 -44.2998 -96 -55.4004zM192 288\n+c106 0 192 -35.7998 192 -80s-86 -80 -192 -80s-192 35.7998 -192 80s86 80 192 80zM411.3 231.7c-8.7998 23.7002 -30.5 42.8994 -60 57.2002c64.2002 3.19922 125.2 16.6992 160.7 41.7998v-42.7002c0 -24.2998 -40.7002 -45.5 -100.7 -56.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"compact-disc\" unicode=\"&#xf51f;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM88 192c0 88.2002 71.7998 160 160 160v32c-105.9 0 -192 -86.0996 -192 -192h32zM248 96c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM248 224\n+c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"crow\" unicode=\"&#xf520;\" horiz-adv-x=\"640\" \n+d=\"M544 416c53.0195 0 96 -28.6504 96 -64l-96 -16v-80c0 -87.2598 -58.2598 -160.8 -137.97 -184.14l41.2393 -111.53c2.27051 -6.23047 -0.939453 -13.1104 -7.16992 -15.3799l-22.5498 -8.20996c-6.22949 -2.27051 -13.1094 0.939453 -15.3799 7.16992l-44.5098 120.38\n+c-1.90039 -0.0595703 -3.75 -0.290039 -5.66016 -0.290039h-39.0596l38.3291 -103.68c2.27051 -6.23047 -0.939453 -13.1104 -7.16992 -15.3799l-22.5498 -8.20996c-6.22949 -2.27051 -13.1094 0.939453 -15.3799 7.16992l-44.4102 120.1h-96.4902l-121.539 -60.7695\n+c-20.0908 -10.04 -43.7305 4.56934 -43.7305 27.0293c0.00195312 8.33984 5.41797 19.168 12.0898 24.1699l371.91 292.59v20.9805c0 44.1797 35.8203 80 80 80c26.0898 0 49.04 -12.6797 63.6396 -32h16.3604zM464 344c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\n+s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"crown\" unicode=\"&#xf521;\" horiz-adv-x=\"640\" \n+d=\"M528 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-416c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h416zM592 320c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48c-2.59961 0 -5.2002 0.400391 -7.7002 0.799805l-72.2998 -192.8h-384\n+l-72.2998 192.8c-2.5 -0.399414 -5.10059 -0.799805 -7.7002 -0.799805c-26.5 0 -48 21.5 -48 48s21.5996 48 48.0996 48s48 -21.5 48 -48c0 -7.09961 -1.69922 -13.7998 -4.39941 -19.7998l72.2998 -43.4004c15.2998 -9.2002 35.2998 -4 44.2002 11.6006l81.5 142.6\n+c-10.7002 8.7998 -17.7002 22 -17.7002 37c0 26.5 21.5 48 48 48s48 -21.5 48 -48c0 -15 -7 -28.2002 -17.7002 -37l81.5 -142.6c8.90039 -15.6006 28.7998 -20.8008 44.2002 -11.6006l72.4004 43.4004c-2.80078 6.09961 -4.40039 12.7002 -4.40039 19.7998\n+c0 26.5 21.5 48 48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice\" unicode=\"&#xf522;\" horiz-adv-x=\"640\" \n+d=\"M592 256c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v46.4199l136.26 136.26c24.1201 24.1201 29.6904 59.7305 17 89.3203h118.74zM480 72c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\n+s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM433.63 258.7c19.1602 -19.1602 19.1602 -50.2305 0 -69.4004l-174.939 -174.93c-19.1602 -19.1602 -50.2305 -19.1602 -69.3906 0l-174.93 174.939c-19.1602 19.1602 -19.1602 50.2305 0 69.3906l174.939 174.93\n+c19.1602 19.1602 50.2305 19.1602 69.3906 0zM96 200c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM224 72c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\n+M224 200c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM224 328c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM352 200c13.25 0 24 10.75 24 24\n+c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-five\" unicode=\"&#xf523;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM224 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-four\" unicode=\"&#xf524;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-one\" unicode=\"&#xf525;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM224 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-six\" unicode=\"&#xf526;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 160\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-three\" unicode=\"&#xf527;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM224 160\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-two\" unicode=\"&#xf528;\" horiz-adv-x=\"448\" \n+d=\"M384 416c35.3496 0 64 -28.6504 64 -64v-320c0 -35.3496 -28.6504 -64 -64 -64h-320c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h320zM128 256c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM320 64\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"divide\" unicode=\"&#xf529;\" horiz-adv-x=\"448\" \n+d=\"M224 96c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64s-64 28.6504 -64 64s28.6504 64 64 64zM224 288c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM416 240c17.6699 0 32 -14.3301 32 -32v-32\n+c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"door-closed\" unicode=\"&#xf52a;\" horiz-adv-x=\"640\" \n+d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h111.99v397.2c0 28.0195 21.5293 50.7998 48 50.7998h288.01c26.4697 0 48 -22.7803 48 -50.7998v-397.2h112zM415.99 160\n+c17.6797 0 32.0098 14.3301 32 32c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"door-open\" unicode=\"&#xf52b;\" horiz-adv-x=\"640\" \n+d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-144v384h-96v64h112c26.4697 0 48 -22.1904 48 -49.4502v-334.55h80zM312.24 446.99c20.2002 5.24023 39.7598 -10.5898 39.7598 -32.1699v-478.82h-336c-8.83984 0 -16 7.16016 -16 16v32\n+c0 8.83984 7.16016 16 16 16h80v365.08c0 15.2197 9.99023 28.4795 24.2402 32.1699zM264 160c13.25 0 24 14.3301 24 32s-10.75 32 -24 32s-24 -14.3301 -24 -32s10.75 -32 24 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"equals\" unicode=\"&#xf52c;\" horiz-adv-x=\"448\" \n+d=\"M416 144c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h384zM416 336c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-384c-17.6699 0 -32 14.3301 -32 32\n+v32c0 17.6699 14.3301 32 32 32h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"feather\" unicode=\"&#xf52d;\" \n+d=\"M467.14 403.16c50.5703 -50.5205 61.7002 -124.9 16.2607 -199.36l-131.54 -43.7998h97.7793c-9.92969 -10.6797 3.68066 3.07031 -46.3096 -46.8604l-147.57 -49.1396h98.1904c-74.9502 -73.1104 -194.53 -70.6504 -246.83 -54.9404l-66.1006 -66.0293\n+c-9.37988 -9.37012 -24.5996 -9.37012 -33.9795 0s-9.37988 24.5693 0 33.9395l259.52 259.25c6.25 6.25 6.25 16.3799 0 22.6299s-16.3896 6.25 -22.6494 0l-178.44 -178.25c-6.75 60.3408 3.18066 150.78 63.6406 211.17c24.7695 24.7402 7.13965 7.14062 85.75 85.6602\n+c90.6094 90.5107 189.729 88.21 252.279 25.7305z\" \u002F>\n+    \u003Cglyph glyph-name=\"frog\" unicode=\"&#xf52e;\" horiz-adv-x=\"576\" \n+d=\"M446.53 350.57c0 0 58.4297 -19.0605 98.9893 -41.2803c18.7607 -10.2803 30.4805 -29.8301 30.4805 -51.2305v-0.00292969c0 -18.8037 -13.3105 -41.5283 -29.71 -50.7266l-154.44 -86.6504l98.5205 -104.68h53.6299c17.6699 0 32 -14.3301 32 -32\n+c0 -8.83984 -7.16016 -16 -16 -16h-90.3799l-118.53 125.94c5.07031 54.1494 -29.9297 85.0596 -40.7998 93.21c-36.8496 27.6191 -88.29 27.6592 -125.13 0l-34.7803 -26.0908c-7.07031 -5.2998 -8.49023 -15.3291 -3.18945 -22.4092\n+c5.31934 -7.10059 15.3496 -8.5 22.4092 -3.19043l32.7607 24.5898c20.6895 15.5303 48.3496 20.8105 72.2393 10.8799c44.0605 -18.3193 57.8506 -70.3701 33.71 -106.6l-35.7998 -48.3301h79.4902c17.6699 0 32 -14.3301 32 -32c0 -8.83984 -7.16016 -16 -16 -16h-304\n+c-34.9199 0 -63.8896 28.0996 -64 63.0195c-0.5 166.86 126.75 304.021 289.46 319.44c6.82031 37.25 39.3096 65.54 78.54 65.54c39.1904 0 71.6699 -28.2305 78.5303 -65.4297zM368 312c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\n+c-13.2598 0 -24 -10.7402 -24 -24c0 -13.25 10.7402 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"gas-pump\" unicode=\"&#xf52f;\" \n+d=\"M336 0c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-320c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h320zM493.2 340.7c12 -12 18.7998 -28.2998 18.7998 -45.2998v-223.4c0 -42.2002 -36.5 -76 -79.5 -71.7002\n+c-37.5 3.90039 -64.5 38.2002 -64.5 75.9004v27.7998c0 22.0996 -17.9004 40 -40 40h-8v-112h-288v352c0 35.2998 28.7002 64 64 64h160c35.2998 0 64 -28.7002 64 -64v-192h8c48.5996 0 88 -39.4004 88 -88v-32c0 -13.2002 10.7998 -24 24 -24s24 10.7998 24 24v160.8\n+c-27.0996 3.90039 -48 27.1006 -48 55.2002v62.0996l-37.7002 37.7002c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l11.2998 11.2998c6.2002 6.2002 16.4004 6.2002 22.6006 0zM256 256v128h-160v-128h160z\" \u002F>\n+    \u003Cglyph glyph-name=\"glasses\" unicode=\"&#xf530;\" horiz-adv-x=\"576\" \n+d=\"M574.1 167.63c1.26074 -5.07031 1.90039 -10.2695 1.90039 -15.5v-70.25c0 -62.8896 -51.5801 -113.88 -115.2 -113.88h-37.1201c-60.2793 0 -110.37 45.9404 -114.87 105.37l-2.92969 38.6299h-35.75l-2.92969 -38.6299\n+c-4.50977 -59.4297 -54.6006 -105.37 -114.88 -105.37h-37.1201c-63.6201 0 -115.2 50.9902 -115.2 113.89v70.25c0.000976562 4.33984 0.852539 11.2793 1.90039 15.4902l45.3398 181.73c5.91016 23.6895 21.5898 44.0293 43 55.7998\n+c21.4395 11.7402 46.9697 14.1094 70.1895 6.33008l15.25 -5.08008c8.39062 -2.79004 12.9199 -11.8604 10.1201 -20.2402l-5.05957 -15.1797c-2.79004 -8.37988 -11.8506 -12.9102 -20.2305 -10.1201l-13.1699 4.38965\n+c-10.8701 3.62012 -22.9902 3.57031 -33.1494 -1.72949c-10.29 -5.36035 -17.5908 -14.5605 -20.3809 -25.8105l-38.46 -153.83c22.1904 6.81055 49.79 12.46 81.21 12.46c34.7803 0 73.9902 -7.00977 114.86 -26.75h73.1797\n+c40.8701 19.7207 80.0801 26.7402 114.851 26.7402c31.4102 0 59.0098 -5.64941 81.2002 -12.46l-38.46 153.82c-2.80078 11.2598 -10.0801 20.4502 -20.3701 25.8193c-10.1602 5.30078 -22.29 5.35059 -33.1602 1.73047l-13.1797 -4.38965\n+c-8.38086 -2.79004 -17.4404 1.73926 -20.2305 10.1201l-5.05957 15.1797c-2.80078 8.37988 1.72949 17.4502 10.1191 20.2402l15.25 5.08008c23.2207 7.7793 48.75 5.39941 70.1904 -6.33008c21.4102 -11.7607 37.0898 -32.1104 43 -55.8105zM203.38 78.21l3.12988 41.2197\n+c-22.6699 8.58984 -46.0693 12.9199 -69.9297 12.9199c-29.1602 0 -54.46 -6.42969 -72.5801 -12.9199v-37.54c0 -27.5098 22.9697 -49.8896 51.2002 -49.8896h37.1201c26.6602 0 49.0898 20.2998 51.0596 46.21zM512 81.8799l-0.00976562 37.54\n+c-18.1201 6.49023 -43.4307 12.9297 -72.5498 12.9297c-23.8701 0 -47.2803 -4.33008 -69.9502 -12.9199l3.12988 -41.2197c1.95996 -25.9102 24.3896 -46.21 51.0596 -46.21h37.1201c28.2305 0 51.2002 22.3701 51.2002 49.8799z\" \u002F>\n+    \u003Cglyph glyph-name=\"greater-than\" unicode=\"&#xf531;\" horiz-adv-x=\"384\" \n+d=\"M365.52 238.15c11.2803 -5.25 18.4805 -16.5605 18.4902 -29.0107v-34.2295c-0.00195312 -11.2529 -8.28027 -24.2451 -18.4795 -29l-306.471 -142.91c-16.0195 -7.46973 -35.0596 -0.540039 -42.5293 15.4805l-13.5205 29\n+c-7.46973 16.0195 -0.540039 35.0596 15.4805 42.5293l218.47 101.891l-218.43 101.85c-16.0605 7.49023 -23.0107 26.5801 -15.5205 42.6396l13.5703 29.0801c7.49023 16.0605 26.5801 23.0107 42.6396 15.5205z\" \u002F>\n+    \u003Cglyph glyph-name=\"greater-than-equal\" unicode=\"&#xf532;\" horiz-adv-x=\"448\" \n+d=\"M55.2197 340.31c-18.29 6 -27.7393 24.2607 -21.0996 40.79l12.0303 29.9199c6.63965 16.5303 26.8594 25.0605 45.1494 19.0605l301.72 -119.98c13.7705 -4.51953 22.9805 -16.6094 22.9805 -30.1699v-15.96c0 -13.5596 -9.20996 -25.6494 -22.9805 -30.1699\n+l-301.409 -119.859c-18.3906 -6.04004 -38.7002 2.54004 -45.3799 19.1494l-12.0908 30.0801c-6.67969 16.6104 2.81055 34.9697 21.2002 41l175.44 68.0498zM424 48c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-400c-13.25 0 -24 10.75 -24 24v48\n+c0 13.2598 10.75 24 24 24h400z\" \u002F>\n+    \u003Cglyph glyph-name=\"helicopter\" unicode=\"&#xf533;\" horiz-adv-x=\"640\" \n+d=\"M304 64c-8.83105 0 -20.3018 5.73438 -25.5996 12.7998l-86.4004 115.2l-160 64l-31.5098 108.12c-2.53027 10.0996 5.10938 19.8799 15.5195 19.8799h39.9902c5.03027 0 9.78027 -2.37012 12.7998 -6.40039l43.2002 -57.5996h208v64h-176c-8.83984 0 -16 7.16016 -16 16\n+v32c0 8.83984 7.16016 16 16 16h416c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-176v-64c123.71 0 224 -100.29 224 -224c0 -17.6699 -14.3301 -32 -32 -32h-272zM416 252.49v-124.49h124.79c-12.7598 62.5596 -62.2402 111.7 -124.79 124.49z\n+M635.37 -10.8096c6.58984 -6.61035 6.04004 -17.5205 -0.980469 -23.6602c-33.1494 -29.0498 -53.5693 -29.5205 -68.4492 -29.5205h-325.94c-8.83984 0 -16 7.18066 -16 16.0303v32.0596c0 8.85059 7.16016 16.0303 16 16.0303h325.94\n+c10.7998 0 17.5498 4.48047 24.6396 11.25c6.40039 6.11035 16.3896 6.27051 22.6396 0.00976562z\" \u002F>\n+    \u003Cglyph glyph-name=\"infinity\" unicode=\"&#xf534;\" horiz-adv-x=\"640\" \n+d=\"M471.1 352c93.1006 0 168.9 -71.7998 168.9 -160s-75.7998 -160 -168.9 -160c-66.0996 0 -117.8 41.2998 -151.1 78.5996c-33.2998 -37.2998 -85 -78.5996 -151.1 -78.5996c-93.1006 0 -168.9 71.7998 -168.9 160s75.7998 160 168.9 160\n+c66.0996 0 117.8 -41.2998 151.1 -78.5996c33.2998 37.2998 85 78.5996 151.1 78.5996zM168.9 128c38.0996 0 73.5996 36.4004 94 64c-20.6006 27.9004 -55.8008 64 -94 64c-40.2002 0 -72.9004 -28.7002 -72.9004 -64s32.7002 -64 72.9004 -64zM471.1 128\n+c40.2002 0 72.9004 28.7002 72.9004 64s-32.7002 64 -72.9004 64c-38.0996 0 -73.5996 -36.4004 -94 -64c20.6006 -27.9004 55.8008 -64 94 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiwi-bird\" unicode=\"&#xf535;\" horiz-adv-x=\"576\" \n+d=\"M575.81 230.02c0.300781 -5.7793 0.160156 -246.02 0.160156 -246.02c0 -7.30957 -4.95996 -13.7002 -12.0498 -15.5c-1.30957 -0.339844 -2.63965 -0.5 -3.9502 -0.5c-5.75 0 -11.1895 3.11035 -14.0498 8.33984l-74.4102 136.44\n+c-7.04004 -0.470703 2.43066 -0.780273 -23.0498 -0.780273c-54.5996 0 -106.39 -19.25 -152.13 -49.0596c-12.46 -8.12012 -26.0996 -14.4502 -40.3398 -19.5107v-59.4297c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v49.1797\n+c-5.32031 -0.449219 -10.5605 -1.17969 -16 -1.17969c-16.6006 0 -32.6406 2.2998 -48 6.25977v-54.2598c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v73.9902c-57.3105 33.21 -95.9502 95.0596 -95.9902 166.01\n+c-0.0800781 145.76 129.3 182.88 147.31 186.94c57.1709 12.9199 111.221 0.259766 153.21 -28.7002c43.4902 -29.9902 94.9209 -46.2402 147.74 -46.2402h9.37012c60.6504 0 115.01 -45.4102 118.18 -105.98zM463.97 200c13.25 0 24 10.75 24 24\n+c0 13.2598 -10.75 24 -24 24s-24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24zM543.97 46.75v99.0596c-11.1299 -11.3799 -24.7393 -20.1494 -39.8594 -25.9795z\" \u002F>\n+    \u003Cglyph glyph-name=\"less-than\" unicode=\"&#xf536;\" horiz-adv-x=\"384\" \n+d=\"M365.46 90.2598c16.0703 -7.49023 23.0205 -26.5801 15.5303 -42.6396l-13.5605 -29.0801c-7.48926 -16.0596 -26.5801 -23.0098 -42.6396 -15.5205l-306.31 142.83c-11.2705 5.25 -18.4805 16.5605 -18.4805 29v34.2402c0.00488281 11.252 8.2832 24.2432 18.4805 29\n+l306.46 142.91c16.0195 7.46973 35.0596 0.540039 42.5293 -15.4805l13.5205 -29c7.46973 -16.0195 0.540039 -35.0596 -15.4805 -42.5293l-218.47 -101.88z\" \u002F>\n+    \u003Cglyph glyph-name=\"less-than-equal\" unicode=\"&#xf537;\" horiz-adv-x=\"448\" \n+d=\"M54.9805 233.8c-13.7705 4.52051 -22.9805 16.6104 -22.9805 30.1699v15.96c0 13.5703 9.20996 25.6602 22.9805 30.1807l301.71 119.96c18.29 6 38.5098 -2.53027 45.1494 -19.0605l12.0303 -29.9199c6.63965 -16.5195 -2.81055 -34.79 -21.1006 -40.79\n+l-175.56 -68.0898l175.44 -68.0498c18.3896 -6.03027 27.8896 -24.3906 21.21 -41l-12.0908 -30.0801c-6.66992 -16.6104 -26.9893 -25.1797 -45.3799 -19.1504zM424 48c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-400c-13.25 0 -24 10.75 -24 24v48\n+c0 13.2598 10.75 24 24 24h400z\" \u002F>\n+    \u003Cglyph glyph-name=\"memory\" unicode=\"&#xf538;\" horiz-adv-x=\"640\" \n+d=\"M640 317.06c-18.5996 -6.60938 -32 -24.1895 -32 -45.0596s13.4004 -38.4502 32 -45.0596v-98.9404h-640v98.9404c18.5996 6.60938 32 24.1895 32 45.0596s-13.4004 38.4502 -32 45.0596v34.9404c0 17.6699 14.3301 32 32 32h576c17.6699 0 32 -14.3301 32 -32v-34.9404z\n+M224 192v128h-64v-128h64zM352 192v128h-64v-128h64zM480 192v128h-64v-128h64zM0 0v96h640v-96h-64v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699\n+c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-128v26.6699c0 8.83984 -7.16016 16 -16 16s-16 -7.16016 -16 -16v-26.6699h-64z\" \u002F>\n+    \u003Cglyph glyph-name=\"microphone-alt-slash\" unicode=\"&#xf539;\" horiz-adv-x=\"640\" \n+d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\n+c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l178.53 -138v45.3604c0 53.0195 42.9805 96 96 96s96 -42.9805 96 -96h-85.3301c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.3301\n+c-5.88965 0 -10.6699 -3.58008 -10.6699 -8v-16c0 -4.41992 4.78027 -8 10.6699 -8h85.3301v-32h-85.0596l41.3994 -32h43.6699c0 -10.4502 -2.17969 -20.2705 -5.2793 -29.6699l26.5498 -20.5205c6.75977 15.4004 10.7197 32.2803 10.7197 50.2002v48\n+c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-48c0 -28.9805 -7.25977 -56.21 -19.7402 -80.3301zM400 -16c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h56\n+v34.1504c-88.0303 12.1396 -152 92.0498 -152 181.689v6.85059l52.0303 -40.2207c12.4395 -53.2197 55.3301 -96.3994 111.18 -101.85c6.94043 -0.669922 13.6396 -0.200195 20.3496 0.200195l50.4004 -38.96c-10.8604 -3.80078 -22.25 -6.45996 -33.96 -8.08008v-33.7803\n+h56z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-bill-wave\" unicode=\"&#xf53a;\" horiz-adv-x=\"640\" \n+d=\"M621.16 393.54c11.6094 -4.87012 18.8398 -16.8301 18.8496 -29.4697v-317.25c0 -18.4902 -15.04 -31.8105 -32.25 -31.8105c-3.39941 0 -6.87988 0.520508 -10.3496 1.62012c-30.8906 9.7998 -61.7598 13.7197 -92.6504 13.7197\n+c-123.17 0 -246.34 -62.3496 -369.51 -62.3496c-38.7998 0 -77.6201 6.19043 -116.41 22.4697c-11.6094 4.86035 -18.8398 16.8301 -18.8398 29.46v317.261c0 18.4893 15.04 31.8096 32.25 31.8096c3.40039 0 6.87988 -0.519531 10.3496 -1.62012\n+c30.8906 -9.7998 61.7607 -13.7197 92.6504 -13.7197c123.17 0 246.33 62.3496 369.5 62.3398c38.7998 0 77.6201 -6.19043 116.41 -22.46zM48 315.78v-60.4707c31 0 56.8398 22.1504 62.7197 51.54c-21.5996 1.36035 -42.5996 3.89062 -62.7197 8.93066zM48 30.7803\n+c20.1201 -7.31055 41.1797 -11.8105 63.71 -13.6201c-1.53027 34.1299 -29.3398 61.3994 -63.71 61.3994v-47.7793zM320 96c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96zM592 68.2197v57.7207\n+c-26.8203 -3.40039 -48.4502 -23.2002 -54.3203 -49.2803c18.6104 -1.58984 36.8008 -4.0498 54.3203 -8.44043zM592 304.33v48.8896c-17.7197 6.43066 -36.2695 10.4902 -55.8096 12.6602c0.949219 -31.8496 24.9199 -57.6396 55.8096 -61.5498z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-bill-wave-alt\" unicode=\"&#xf53b;\" horiz-adv-x=\"640\" \n+d=\"M621.16 393.54c11.6094 -4.87012 18.8398 -16.8301 18.8496 -29.4697v-317.25c0 -18.4902 -15.04 -31.8105 -32.25 -31.8105c-3.39941 0 -6.87988 0.520508 -10.3496 1.62012c-30.8906 9.7998 -61.7598 13.7197 -92.6504 13.7197\n+c-123.17 0 -246.34 -62.3496 -369.51 -62.3496c-38.7998 0 -77.6201 6.19043 -116.41 22.4697c-11.6094 4.86035 -18.8398 16.8301 -18.8398 29.46v317.261c0 18.4893 15.04 31.8096 32.25 31.8096c3.40039 0 6.87988 -0.519531 10.3496 -1.62012\n+c30.8906 -9.7998 61.7607 -13.7197 92.6504 -13.7197c123.17 0 246.33 62.3496 369.5 62.3398c38.7998 0 77.6201 -6.19043 116.41 -22.46zM320 96c44.1699 0 80 42.9697 80 96c0 53.0195 -35.8203 96 -80 96s-80 -42.9805 -80 -96c0 -53.0098 35.8096 -96 80 -96z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-check\" unicode=\"&#xf53c;\" horiz-adv-x=\"640\" \n+d=\"M0 0v320h640v-320c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32zM448 208v-32c0 -8.83984 7.16016 -16 16 -16h96c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-96c-8.83984 0 -16 -7.16016 -16 -16zM448 88v-16\n+c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8zM64 184v-16c0 -4.41992 3.58008 -8 8 -8h304c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-304c-4.41992 0 -8 -3.58008 -8 -8z\n+M64 88v-16c0 -4.41992 3.58008 -8 8 -8h176c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-176c-4.41992 0 -8 -3.58008 -8 -8zM624 416c8.83984 0 16 -7.16016 16 -16v-48h-640v48c0 8.83984 7.16016 16 16 16h608z\" \u002F>\n+    \u003Cglyph glyph-name=\"money-check-alt\" unicode=\"&#xf53d;\" horiz-adv-x=\"640\" \n+d=\"M608 416c17.6699 0 32 -14.3301 32 -32v-384c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v384c0 17.6699 14.3301 32 32 32h576zM176 120.12c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896\n+l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21\n+c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703\n+c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973\n+c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16.1201zM416 136v16\n+c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8zM576 136v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8z\n+M576 232v16c0 4.41992 -3.58008 8 -8 8h-272c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h272c4.41992 0 8 3.58008 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"not-equal\" unicode=\"&#xf53e;\" horiz-adv-x=\"448\" \n+d=\"M416 240h-98.4199l-74.5303 -96h172.95c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32h-247.48l-82.0898 -105.73c-5.37012 -7.00977 -15.4102 -8.34961 -22.4297 -2.96973l-25.4102 19.46c-7.00977 5.37988 -8.33984 15.4199 -2.96973 22.4307\n+l51.8701 66.8096h-55.4902c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h130.03l74.5293 96h-204.56c-17.6699 0 -32 14.3301 -32 32v32c0 17.6699 14.3301 32 32 32h279.09l82.0801 105.73c5.37988 7.00977 15.4199 8.34961 22.4404 2.96973\n+l25.4092 -19.46c7.01074 -5.37012 8.34082 -15.4102 2.9707 -22.4307l-51.8701 -66.8096h23.8799c17.6699 0 32 -14.3301 32 -32v-32c0 -17.6699 -14.3301 -32 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"palette\" unicode=\"&#xf53f;\" \n+d=\"M204.3 443c163.8 31.9004 307.2 -92.0996 307.7 -249.7c-0.0996094 -35.7002 -29.0996 -65.2998 -64.9004 -65.2998h-79.6992c-51 0 -84 -53 -60.9004 -98.4004c18.9004 -37.0996 -1.2998 -85.2998 -42.5 -91.6992c-127.1 -19.7002 -295.8 119.699 -258.8 306.699\n+c19.5996 99.1006 99.7002 179 199.1 198.4zM96 128c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM128 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 320\n+c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM384 256c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"parking\" unicode=\"&#xf540;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM240 128c52.9004 0 96 43.0996 96 96s-43.0996 96 -96 96h-96c-8.7998 0 -16 -7.2002 -16 -16v-224c0 -8.7998 7.2002 -16 16 -16h32\n+c8.7998 0 16 7.2002 16 16v48h48zM240 256c17.5996 0 32 -14.4004 32 -32s-14.4004 -32 -32 -32h-48v64h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"percentage\" unicode=\"&#xf541;\" horiz-adv-x=\"384\" \n+d=\"M109.25 274.75c-24.9902 -25 -65.5098 -25 -90.5098 0c-24.9902 24.9902 -24.9902 65.5195 0 90.5098s65.5195 24.9902 90.5098 0s24.9902 -65.5195 0 -90.5098zM365.25 109.26c25 -25 25 -65.5195 0 -90.5098c-24.9902 -24.9902 -65.5195 -24.9902 -90.5098 0\n+s-24.9902 65.5195 0 90.5098s65.5195 24.9902 90.5098 0zM363.31 340.69c12.5 -12.5 12.5 -32.7607 0 -45.25l-274.75 -274.75c-12.4893 -12.5 -32.75 -12.5 -45.25 0l-22.6191 22.6191c-12.5 12.4902 -12.5 32.75 0 45.25l274.75 274.75c12.4893 12.5 32.75 12.5 45.25 0z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"project-diagram\" unicode=\"&#xf542;\" horiz-adv-x=\"640\" \n+d=\"M384 128c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-128c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h128zM192 416v-32h224v-64h-224v-47.5098l64.2803 -112.49h-0.280273c-23.5996 0 -44.0195 -12.9805 -55.1201 -32.04\n+l-73.1602 128.04h-95.7197c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h128c17.6699 0 32 -14.3301 32 -32zM608 448c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-128c-17.6699 0 -32 14.3301 -32 32v128\n+c0 17.6699 14.3301 32 32 32h128z\" \u002F>\n+    \u003Cglyph glyph-name=\"receipt\" unicode=\"&#xf543;\" horiz-adv-x=\"384\" \n+d=\"M358.4 444.8c10.5996 7.90039 25.5996 0.400391 25.5996 -12.7998v-480c0 -13.2002 -15.0996 -20.7002 -25.5996 -12.7998l-38.4004 44.7998l-54.4004 -44.7998c-2.35059 -1.78027 -6.65137 -3.22559 -9.59961 -3.22559s-7.24902 1.44531 -9.59961 3.22559\n+l-54.4004 44.7998l-54.4004 -44.7998c-2.35059 -1.78027 -6.65137 -3.22559 -9.59961 -3.22559s-7.24902 1.44531 -9.59961 3.22559l-54.4004 44.7998l-38.4004 -44.7998c-10.5996 -7.90039 -25.5996 -0.400391 -25.5996 12.7998v480c0 13.2002 15 20.7002 25.5996 12.7998\n+l38.4004 -44.7998l54.4004 44.7998c2.35059 1.78027 6.65137 3.22559 9.59961 3.22559s7.24902 -1.44531 9.59961 -3.22559l54.4004 -44.7998l54.4004 44.7998c2.35059 1.78027 6.65137 3.22559 9.59961 3.22559s7.24902 -1.44531 9.59961 -3.22559l54.4004 -44.7998z\n+M320 88v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8zM320 184v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240\n+c4.40039 0 8 3.59961 8 8zM320 280v16c0 4.40039 -3.59961 8 -8 8h-240c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h240c4.40039 0 8 3.59961 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"robot\" unicode=\"&#xf544;\" horiz-adv-x=\"640\" \n+d=\"M0 192c0 17.7002 14.2998 32 32 32h32v-192h-32c-17.7002 0 -32 14.2998 -32 32v128zM464 352c44.2002 0 80 -35.7998 80 -80v-272c0 -35.2998 -28.7002 -64 -64 -64h-320c-35.2998 0 -64 28.7002 -64 64v272c0 44.2002 35.7998 80 80 80h112v64\n+c0 17.7002 14.2998 32 32 32s32 -14.2998 32 -32v-64h112zM256 32v32h-64v-32h64zM224 152c22.0996 0 40 17.9004 40 40s-17.9004 40 -40 40s-40 -17.9004 -40 -40s17.9004 -40 40 -40zM352 32v32h-64v-32h64zM448 32v32h-64v-32h64zM416 152c22.0996 0 40 17.9004 40 40\n+s-17.9004 40 -40 40s-40 -17.9004 -40 -40s17.9004 -40 40 -40zM608 224c17.7002 0 32 -14.2998 32 -32v-128c0 -17.7002 -14.2998 -32 -32 -32h-32v192h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"ruler\" unicode=\"&#xf545;\" horiz-adv-x=\"640\" \n+d=\"M635.7 280.8c8.7998 -15 3.59961 -34.2002 -11.6006 -42.7998l-496.8 -281.9c-15.2002 -8.59961 -34.7002 -3.5 -43.5 11.5l-79.5996 135.601c-8.7998 15 -3.5 34.0996 11.7002 42.7998l69 39.0996l59.6992 -101.399c2.2002 -3.7998 7.10059 -5.10059 10.9004 -2.90039\n+l13.7998 7.7998c3.7998 2.2002 5.10059 7 2.90039 10.7002l-59.7002 101.7l55.2002 31.2998l27.8994 -47.5c2.2002 -3.7998 7.10059 -5.09961 10.9004 -2.89941l13.7998 7.7998c3.7998 2.2002 5.10059 6.89941 2.90039 10.7002l-27.9004 47.3994l55.2002 31.2998\n+l59.7002 -101.699c2.2002 -3.80078 7.09961 -5.10059 10.8994 -2.90039l13.8008 7.7998c3.7998 2.2002 5.09961 7 2.89941 10.7002l-59.7998 101.7l55.2002 31.2998l27.8994 -47.2998c2.2002 -3.7998 7.10059 -5.10059 10.9004 -2.90039l13.7998 7.7998\n+c3.7998 2.2002 5.10059 6.90039 2.90039 10.7002l-27.9004 47.4004l55.2002 31.2998l59.7002 -101.6c2.2002 -3.80078 7.09961 -5.10059 10.8994 -2.90039l13.8008 7.7998c3.7998 2.2002 5.09961 6.90039 2.89941 10.7002l-59.7002 101.7l69 39.0996\n+c15.2002 8.60059 34.7002 3.5 43.5 -11.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"ruler-combined\" unicode=\"&#xf546;\" \n+d=\"M160 160v-41.3799l-158.43 -158.42c-0.660156 2.55957 -1.57031 5.03027 -1.57031 7.7998v448c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32v-32h-56c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56v-64h-56\n+c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56v-64h-56c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h56zM480 96c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-448\n+c-2.75977 0 -5.24023 0.910156 -7.7998 1.57031l158.43 158.43h41.3701v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v56h64v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v56h64v-56c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8\n+v56h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"ruler-horizontal\" unicode=\"&#xf547;\" horiz-adv-x=\"576\" \n+d=\"M544 320c17.6699 0 32 -14.3301 32 -32v-192c0 -17.6699 -14.3301 -32 -32 -32h-512c-17.6699 0 -32 14.3301 -32 32v192c0 17.6699 14.3301 32 32 32h48v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16\n+c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h64v-88c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v88h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"ruler-vertical\" unicode=\"&#xf548;\" horiz-adv-x=\"256\" \n+d=\"M168 32h88v-64c0 -17.6699 -14.3301 -32 -32 -32h-192c-17.6699 0 -32 14.3301 -32 32v448c0 17.6699 14.3301 32 32 32h192c17.6699 0 32 -14.3301 32 -32v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88\n+c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h88v-64h-88c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8z\" \u002F>\n+    \u003Cglyph glyph-name=\"school\" unicode=\"&#xf549;\" horiz-adv-x=\"640\" \n+d=\"M0 224c0 17.6699 14.3301 32 32 32h64v-320h-80c-8.83984 0 -16 7.16016 -16 16v272zM360 272c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v64c0 4.41992 3.58008 8 8 8h16c4.41992 0 8 -3.58008 8 -8v-40h24z\n+M497.75 335.96c8.90039 -5.92969 14.25 -15.9297 14.25 -26.6299v-373.33h-128v144c0 8.83984 -7.16016 16 -16 16h-96c-8.83984 0 -16 -7.16016 -16 -16v-144h-128v373.34c0.00195312 9.45117 6.38574 21.377 14.25 26.6201l160 106.67\n+c4.4502 2.96484 12.4023 5.37012 17.75 5.37012s13.2998 -2.40527 17.75 -5.37012zM320 192c44.1797 0 80 35.8203 80 80s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM608 256c17.6699 0 32 -14.3301 32 -32v-272c0 -8.83984 -7.16016 -16 -16 -16h-80\n+v320h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"screwdriver\" unicode=\"&#xf54a;\" \n+d=\"M448 448l64 -64l-96 -128h-62.0596l-83.0303 -83.0303c-4.25 6.79004 -9.07031 13.2705 -14.8701 19.0703c-5.7998 5.80957 -12.2803 10.6201 -19.0703 14.8701l83.0303 83.0303v62.0596zM128 169.41c29.1104 29.1094 76.2998 29.1094 105.41 0\n+c29.1094 -29.1104 29.1094 -76.2998 0 -105.41l-117.08 -117.08c-14.5605 -14.5596 -38.1504 -14.5596 -52.71 0l-52.7002 52.7002c-14.5498 14.5596 -14.5498 38.1602 0 52.71z\" \u002F>\n+    \u003Cglyph glyph-name=\"shoe-prints\" unicode=\"&#xf54b;\" horiz-adv-x=\"640\" \n+d=\"M192 288c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64h32v-128h-32zM0 32c0 35.3496 28.6504 64 64 64h32v-128h-32c-35.3496 0 -64 28.6504 -64 64zM337.46 160c90.3604 0 174.54 -32 174.54 -96c0 -45.2197 -39.0996 -97.2998 -148.58 -120.82\n+c-31.9795 -6.87012 -64.8896 -8.50977 -97.5801 -6.19922c-27.2998 1.92969 -54.0996 7.76953 -80.3096 15.0498l-57.5303 15.9697v128c60.21 0 79.9404 15.6201 104.73 32c28.5693 18.8799 69.8193 32 104.729 32zM491.42 440.81\n+c109.48 -23.5098 148.58 -75.5898 148.58 -120.81c0 -64 -84.1797 -96 -174.54 -96c-34.9102 0 -76.1602 13.1201 -104.729 32c-24.79 16.3799 -44.5303 32 -104.73 32v128l57.5303 15.9697c26.21 7.27051 53.0098 13.1104 80.3096 15.04\n+c32.6904 2.32031 65.6006 0.669922 97.5801 -6.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"skull\" unicode=\"&#xf54c;\" \n+d=\"M256 448c141.4 0 256 -100.3 256 -224c0 -70.0996 -36.9004 -132.6 -94.5 -173.7c-9.7002 -6.89941 -15.2002 -18.2002 -13.5 -29.8994l9.40039 -66.2002c1.39941 -9.60059 -6 -18.2002 -15.7002 -18.2002h-77.7002v56c0 4.40039 -3.59961 8 -8 8h-16\n+c-4.40039 0 -8 -3.59961 -8 -8v-56h-64v56c0 4.40039 -3.59961 8 -8 8h-16c-4.40039 0 -8 -3.59961 -8 -8v-56h-77.7002c-9.7002 0 -17.0996 8.59961 -15.7002 18.2002l9.40039 66.2002c1.7002 11.7998 -3.90039 23 -13.5 29.8994\n+c-57.5996 41.1006 -94.5 103.601 -94.5 173.7c0 123.7 114.6 224 256 224zM160 128c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM352 128c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64\n+s28.7002 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"smoking-ban\" unicode=\"&#xf54d;\" \n+d=\"M96 144v64c0 8.7998 7.2002 16 16 16h21.5l96 -96h-117.5c-8.7998 0 -16 7.2002 -16 16zM256 448c141.4 0 256 -114.6 256 -256s-114.6 -256 -256 -256s-256 114.6 -256 256s114.6 256 256 256zM256 0c41.4004 0 79.7002 13.2998 111.1 35.7002l-267.399 267.399\n+c-22.4004 -31.3994 -35.7002 -69.6992 -35.7002 -111.1c0 -105.9 86.0996 -192 192 -192zM301.2 192l32 -32h50.7998v32h-82.7998zM412.3 80.9004c22.4004 31.3994 35.7002 69.6992 35.7002 111.1c0 105.9 -86.0996 192 -192 192\n+c-41.4004 0 -79.7002 -13.2998 -111.1 -35.7002l124.3 -124.3h130.8c8.7998 0 16 -7.2002 16 -16v-64c0 -8.7998 -7.2002 -16 -16 -16h-34.7998zM320.6 320c32.1006 0 58.7002 -23.7002 63.3008 -54.5996c0.699219 -4.90039 -3 -9.40039 -8 -9.40039h-16.2002\n+c-3.7002 0 -7 2.5 -7.7002 6.09961c-2.7998 14.7002 -15.7998 25.9004 -31.4004 25.9004c-32.0996 0 -58.6992 23.7002 -63.2998 54.5996c-0.700195 4.90039 3 9.40039 8 9.40039h16.2002c3.7002 0 7 -2.5 7.7002 -6.09961\n+c2.7998 -14.7002 15.7998 -25.9004 31.3994 -25.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"store\" unicode=\"&#xf54e;\" horiz-adv-x=\"616\" \n+d=\"M602 329.4c33.5996 -53.6006 3.7998 -128 -59 -136.4c-4.5 -0.599609 -9 -0.900391 -13.7002 -0.900391c-29.5 0 -55.7002 13 -73.7998 33.1006c-18 -20.1006 -44.2002 -33.1006 -73.7998 -33.1006c-29.5 0 -55.7998 13 -73.7998 33.1006\n+c-18 -20.1006 -44.2002 -33.1006 -73.8008 -33.1006c-29.5 0 -55.7998 13 -73.7998 33.1006c-18 -20.1006 -44.2002 -33.1006 -73.7998 -33.1006c-4.59961 0 -9.2002 0.300781 -13.7002 0.900391c-62.5996 8.5 -92.2998 82.9004 -58.7998 136.4l64.9004 103.6\n+c5.7998 9.2998 16.0996 15 27.0996 15h404c11 0 21.2998 -5.7002 27.0996 -15zM529.5 160c6.09961 0 12.0996 0.400391 18.2002 1.2002c5.59961 0.700195 11 2 16.3994 3.59961v-196.8c0 -17.7002 -14.2998 -32 -32 -32h-448c-17.6992 0 -32 14.2998 -32 32v196.8\n+c5.30078 -1.5 10.8008 -2.7998 16.4004 -3.59961c5.90039 -0.799805 12 -1.2002 18 -1.2002c10 0 19.9004 1.59961 29.5 3.7998v-99.7998h384v99.7998c9.59961 -2.2998 19.5 -3.7998 29.5 -3.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"store-alt\" unicode=\"&#xf54f;\" horiz-adv-x=\"640\" \n+d=\"M320 64v160h64v-256c0 -17.7002 -14.2998 -32 -32 -32h-256c-17.7002 0 -32 14.2998 -32 32v256h64v-160h192zM634.6 305.8c14.1006 -21.2998 -1.09961 -49.7998 -26.5996 -49.7998h-575.9c-25.5996 0 -40.7998 28.5 -26.5996 49.7998l85.2998 128\n+c5.90039 8.90039 15.9004 14.2002 26.6006 14.2002h405.199c10.7002 0 20.7002 -5.2998 26.7002 -14.2002zM512 -48v272h64v-272c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"stream\" unicode=\"&#xf550;\" \n+d=\"M16 320c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h416c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416zM496 240c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16\n+v64c0 8.83984 7.16016 16 16 16h416zM432 64c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h416z\" \u002F>\n+    \u003Cglyph glyph-name=\"stroopwafel\" unicode=\"&#xf551;\" \n+d=\"M188.12 237.26l45.25 -45.2598l-45.2598 -45.25l-45.25 45.25zM301.25 259.88l-45.25 -45.25l-45.25 45.2598l45.25 45.25zM210.75 124.12l45.25 45.25l45.2598 -45.25l-45.2598 -45.2598zM256 448c141.38 0 256 -114.62 256 -256s-114.62 -256 -256 -256\n+s-256 114.62 -256 256s114.62 256 256 256zM442.68 152.4c1.29199 1.29492 2.34082 3.83008 2.34082 5.65918c0 1.83008 -1.04883 4.36523 -2.34082 5.66016l-28.29 28.2803l28.2705 28.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096\n+c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-28.29 -28.29l-45.25 45.2607l33.9404 33.9395l16.9697 -16.9697c3.12012 -3.12012 8.18945 -3.12012 11.3096 0l11.3105 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-16.9707 16.9697l16.9707 16.9697\n+c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096c-3.12012 3.12012 -8.18945 3.12012 -11.3096 0l-16.9697 -16.9697l-16.9707 16.9697c-3.12012 3.12012 -8.18945 3.12012 -11.3096 0l-11.3105 -11.3096c-3.11914 -3.12012 -3.11914 -8.19043 0 -11.3105\n+l16.9707 -16.9697l-33.9404 -33.9404l-45.2598 45.25l28.29 28.29c3.12012 3.12012 3.12012 8.19043 0 11.3105l-11.3105 11.3096c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-28.29 -28.29l-28.3096 28.2705c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0\n+l-11.3096 -11.3105c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l28.29 -28.29l-45.2607 -45.25l-33.9395 33.9404l16.9697 16.9697c3.12012 3.12012 3.12012 8.18945 0 11.3096l-11.3096 11.3105c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-16.9697 -16.9707\n+l-16.9697 16.9707c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-11.3096 -11.3105c-3.12012 -3.12012 -3.12012 -8.18945 0 -11.3096l16.9697 -16.9697l-16.9697 -16.9707c-3.12012 -3.12012 -3.12012 -8.18945 0 -11.3096l11.3096 -11.3105\n+c3.12012 -3.11914 8.19043 -3.11914 11.3105 0l16.9697 16.9707l33.9404 -33.9404l-45.25 -45.2598l-28.29 28.29c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-11.3096 -11.3105c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l28.29 -28.29l-28.29 -28.29\n+c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3096l11.3398 -11.3301c3.12012 -3.12012 8.18945 -3.12012 11.3096 0l28.29 28.29l45.25 -45.25l-33.9395 -33.9404l-16.9707 16.9697c-3.11914 3.12012 -8.18945 3.12012 -11.3096 0l-11.3096 -11.3096\n+c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l16.9697 -16.9697l-16.9697 -16.9697c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l11.3096 -11.3096c3.12012 -3.12012 8.19043 -3.12012 11.3096 0l16.9707 16.9697l16.9697 -16.9697\n+c3.12012 -3.12012 8.19043 -3.12012 11.3096 0l11.3105 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3105l-16.9697 16.9697l33.9395 33.9404l45.25 -45.2598l-28.29 -28.29c-3.12012 -3.12012 -3.12012 -8.19043 0 -11.3105l11.3105 -11.3096\n+c3.11914 -3.12012 8.18945 -3.12012 11.3096 0l28.29 28.29l28.3096 -28.2705c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l11.3096 11.3105c3.12012 3.11914 3.12012 8.18945 0 11.3096l-28.29 28.29l45.2607 45.2598l33.9395 -33.9395l-16.9697 -16.9707\n+c-3.12012 -3.11914 -3.12012 -8.18945 0 -11.3096l11.3096 -11.3096c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l16.9697 16.9697l16.9697 -16.9697c3.12012 -3.12012 8.19043 -3.12012 11.3105 0l11.3096 11.3096c3.12012 3.12012 3.12012 8.19043 0 11.3096\n+l-16.9697 16.9707l16.9697 16.9697c3.12012 3.12012 3.12012 8.19043 0 11.3096l-11.3096 11.3105c-3.12012 3.12012 -8.19043 3.12012 -11.3105 0l-16.9697 -16.9697l-33.9404 33.9395l45.25 45.25l28.29 -28.29c3.12012 -3.12012 8.19043 -3.12012 11.3105 0zM278.63 192\n+l45.2598 45.2598l45.25 -45.2598l-45.25 -45.25z\" \u002F>\n+    \u003Cglyph glyph-name=\"toolbox\" unicode=\"&#xf552;\" \n+d=\"M502.63 233.37c6 -6 9.37012 -14.1396 9.37012 -22.6201v-82.75h-128v16c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-16h-128v16c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-16h-128v82.7402\n+c0 8.49023 3.37012 16.6299 9.37012 22.6299l45.25 45.2598c6.00977 6 14.1396 9.37012 22.6299 9.37012h50.75v80c0 26.5098 21.4902 48 48 48h160c26.5098 0 48 -21.4902 48 -48v-80.0098h50.75c8.49023 0 16.6299 -3.37012 22.6299 -9.37012zM320 288v64h-128v-64h128z\n+M384 80v16h128v-96c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v96h128v-16c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v16h128v-16c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"tshirt\" unicode=\"&#xf553;\" horiz-adv-x=\"640\" \n+d=\"M631.2 351.5c7.89941 -3.90039 11.0996 -13.5996 7.09961 -21.5l-57.2998 -114.4c-4 -8 -13.5996 -11.1992 -21.5 -7.19922l-56.5996 27.6992c-10.6006 5.2002 -23 -2.59961 -23 -14.3994v-253.7c0 -17.7002 -14.3008 -32 -32 -32h-256c-17.7002 0 -32 14.2998 -32 32\n+v253.6c0 11.9004 -12.4004 19.6006 -23 14.4004l-56.6006 -27.7002c-7.89941 -3.89941 -17.5 -0.700195 -21.5 7.2002l-57.2002 114.5c-3.89941 7.90039 -0.699219 17.5 7.2002 21.5l194.7 96.5c20.0996 -27.7998 64.5996 -47.2002 116.5 -47.2002\n+s96.4004 19.4004 116.5 47.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"walking\" unicode=\"&#xf554;\" horiz-adv-x=\"320\" \n+d=\"M208 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM302.5 202.9c15.7002 -7.90039 22 -27.3008 14.2998 -43c-7.89941 -15.8008 -26.8994 -22.2002 -42.5 -14.3008l-23.2998 11.8008c-15 7.59961 -26.4004 20.8994 -31.7002 37\n+l-5.5 16.5l-17.2002 -68.7002l45.5 -49.7002c7.2002 -7.7998 12.3008 -17.4004 14.9004 -27.7002l22.2002 -89c4.2998 -17.0996 -6.2002 -34.5 -23.2998 -38.7998c-17.1006 -4.2998 -34.5 6.2002 -38.8008 23.2998l-18.2998 73.2998\n+c-2.59961 10.3008 -7.7002 19.8008 -14.8994 27.7002l-59.9004 65.4004c-14.5 15.8994 -20.0996 38 -14.9004 58.7998l15.2002 60.7002l-26.7998 -10.7998c-7.2002 -2.90039 -13 -8.40039 -16.5 -15.4004l-6.7002 -13.5996\n+c-7.89941 -15.8008 -26.8994 -22.2002 -42.5 -14.3008c-15.7002 7.90039 -22 27.1006 -14.2002 42.9004l6.7002 13.5996c10.4004 21 28.1006 37.5 49.7002 46.2002c37.4004 15.1006 57.2998 25.2998 93.2998 25.2002c46.5 -0.0996094 87.5 -31.2998 102.2 -75.9004\n+l9.7002 -29.3994zM73.5996 62.2002l20.7002 51.5c8.7002 -11.9004 -7.89941 6.59961 47.4004 -53.7002l-13.5 -33.7998c-3.2998 -8.10059 -8.10059 -15.4004 -14.2002 -21.5l-59.4004 -59.4004c-12.5 -12.5 -32.6992 -12.5 -45.1992 0s-12.5 32.7998 0 45.2998l50 50.1006\n+c6.19922 6.09961 11 13.3994 14.1992 21.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"wallet\" unicode=\"&#xf555;\" \n+d=\"M461.2 320c28.0195 0 50.7998 -21.5303 50.7998 -48v-256c0 -26.4697 -22.7803 -48 -50.7998 -48h-397.2c-35.3496 0 -64 28.6504 -64 64v320c0 35.3496 28.6504 64 64 64h368c26.5098 0 48 -21.4902 48 -48c0 -8.83984 -7.16016 -16 -16 -16h-384\n+c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h381.2zM416 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"angry\" unicode=\"&#xf556;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 208c0 -17.7002 14.4004 -32 32.0996 -32c17.7002 0 32 14.2998 32 32c0 2.90039 -1 5.5 -1.69922 8.2002c0.599609 0 1.19922 -0.200195 1.69922 -0.200195\n+c6.90039 0 13.2002 4.5 15.3008 11.4004c2.59961 8.39941 -2.2002 17.3994 -10.7002 19.8994l-80 24c-8.5 2.5 -17.4004 -2.2002 -19.9004 -10.7002c-2.59961 -8.39941 2.2002 -17.3994 10.7002 -19.8994l31 -9.2998c-6.40039 -5.90039 -10.5 -14.1006 -10.5 -23.4004z\n+M304 53.7998c13.4004 -16.0996 38.2998 4 24.5 20.5c-20 24 -49.4004 37.7998 -80.5996 37.7998c-31.2002 0 -60.6006 -13.7998 -80.6006 -37.7998c-13.5996 -16.2998 11.1006 -36.7998 24.6006 -20.5c27.8994 33.4004 84.2998 33.4004 112.1 0zM380.6 240.7\n+c8.5 2.5 13.3008 11.3994 10.8008 19.8994c-2.5 8.40039 -11.5 13.2002 -19.9004 10.7002l-80 -24c-8.40039 -2.5 -13.2002 -11.3994 -10.7002 -19.8994c2.10059 -6.90039 8.40039 -11.4004 15.2998 -11.4004c0.600586 0 1.10059 0.0996094 1.7002 0.200195\n+c-0.799805 -2.60059 -1.7002 -5.2998 -1.7002 -8.2002c0 -17.7002 14.3008 -32 32 -32c17.7002 0 32 14.2998 32 32c0 9.2998 -4.19922 17.5996 -10.5 23.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"archway\" unicode=\"&#xf557;\" horiz-adv-x=\"576\" \n+d=\"M560 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-159.98c-8.83984 0 -16 7.16016 -16 16v16l-0.0195312 160c0 53.0195 -42.9805 96 -96 96s-96 -42.9805 -96 -96v-176c0 -8.83984 -7.16016 -16 -16 -16h-159.98\n+c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h15.9805v352h512v-352h16zM560 448c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-544c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h544z\" \u002F>\n+    \u003Cglyph glyph-name=\"atlas\" unicode=\"&#xf558;\" horiz-adv-x=\"448\" \n+d=\"M318.38 240c-5.28027 -31.2197 -25.5898 -57.1699 -53.2998 -70.4102c7.66992 19.0605 12.7197 43.3799 14.21 70.4102h39.0898zM318.38 272h-39.0898c-1.49023 27.0303 -6.53027 51.3496 -14.21 70.4102c27.71 -13.2402 48.0098 -39.1904 53.2998 -70.4102zM224 350.69\n+c7.69043 -7.4502 20.7695 -34.4307 23.4404 -78.6904h-46.8701c2.66016 44.2695 15.7393 71.2402 23.4297 78.6904zM182.92 342.41c-7.67969 -19.0605 -12.7197 -43.3799 -14.21 -70.4102h-39.0898c5.28027 31.2197 25.5898 57.1699 53.2998 70.4102zM182.92 169.59\n+c-27.71 13.2402 -48.0195 39.1904 -53.2998 70.4102h39.0898c1.49023 -27.0303 6.53027 -51.3496 14.21 -70.4102zM247.43 240c-2.66016 -44.2598 -15.7393 -71.2402 -23.4395 -78.6904c-7.69043 7.4502 -20.7705 34.4307 -23.4307 78.6904h46.8701zM448 89.5996\n+c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320c0 54.4004 41.5996 96 96 96\n+h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM224 384c-70.6904 0 -128 -57.3096 -128 -128s57.3096 -128 128 -128s128 57.3096 128 128s-57.3096 128 -128 128zM384 0v64h-288c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h288z\" \u002F>\n+    \u003Cglyph glyph-name=\"award\" unicode=\"&#xf559;\" horiz-adv-x=\"384\" \n+d=\"M97.1201 85.3701c13.79 -13.7803 32.1104 -21.3701 51.6104 -21.3701c12.4395 0 24.4697 3.54004 35.3096 9.58008l-52.0498 -127.62c-4.39062 -10.7695 -18.4307 -13.4004 -26.4307 -4.95996l-36.2393 38.2803l-52.6904 -2.01074\n+c-11.6201 -0.439453 -19.8203 11.2607 -15.4297 22.0303l45.3701 111.24c7.55957 -5.87012 15.9199 -10.7705 25.4297 -13.3203c20.96 -5.60938 16.4297 -3.16016 25.1201 -11.8496zM382.8 -0.700195c4.39062 -10.7598 -3.80957 -22.4697 -15.4297 -22.0303\n+l-52.6904 2.01074l-36.25 -38.2803c-7.98926 -8.44043 -22.04 -5.80957 -26.4297 4.95996l-52.0498 127.62c10.8398 -6.03027 22.8701 -9.58008 35.3096 -9.58008c19.5 0 37.8301 7.58984 51.6201 21.3701c8.66992 8.66992 4.0498 6.20996 25.1201 11.8496\n+c9.50977 2.5498 17.8701 7.44043 25.4297 13.3203zM263 108c-13.2305 -13.4697 -33.8398 -15.8799 -49.7305 -5.82031c-5.37305 3.41211 -14.8994 6.18066 -21.2646 6.18066c-6.36426 0 -15.8916 -2.76855 -21.2646 -6.18066\n+c-15.9004 -10.0596 -36.5098 -7.64941 -49.7402 5.82031c-14.7305 15 -16.4004 14.04 -38.7803 20.1396c-13.8896 3.79004 -24.75 14.8408 -28.4697 28.9805c-7.48047 28.3994 -5.54004 24.9697 -25.9502 45.75c-10.1699 10.3604 -14.1396 25.4502 -10.4199 39.5898\n+c7.48047 28.4199 7.46973 24.46 0 52.8203c-3.72949 14.1396 0.25 29.2295 10.4199 39.5801c20.4102 20.7793 18.4805 17.3594 25.9502 45.75c3.71973 14.1396 14.5801 25.1895 28.4697 28.9795c27.8906 7.61035 24.5303 5.62988 44.9404 26.4102\n+c10.1699 10.3604 25 14.4004 38.8896 10.6104c27.9199 -7.61035 24.0303 -7.60059 51.9004 0c13.8896 3.79004 28.7197 -0.260742 38.8896 -10.6104c20.4297 -20.79 17.0703 -18.7998 44.9502 -26.4102c13.8896 -3.79004 24.75 -14.8398 28.4697 -28.9795\n+c7.48047 -28.3906 5.54004 -24.9707 25.9502 -45.75c10.1699 -10.3506 14.1396 -25.4404 10.4199 -39.5801c-7.47949 -28.4102 -7.46973 -24.4502 0 -52.8301c3.71973 -14.1406 -0.25 -29.2305 -10.4199 -39.5801c-20.4102 -20.7803 -18.4697 -17.3506 -25.9502 -45.75\n+c-3.71973 -14.1396 -14.5801 -25.1904 -28.4697 -28.9805c-21.7598 -5.92969 -23.5098 -4.58984 -38.79 -20.1396zM97.6602 272.04c0 -53.0303 42.2402 -96.0205 94.3398 -96.0205s94.3398 42.9902 94.3398 96.0205s-42.2402 96.0195 -94.3398 96.0195\n+s-94.3398 -42.9893 -94.3398 -96.0195z\" \u002F>\n+    \u003Cglyph glyph-name=\"backspace\" unicode=\"&#xf55a;\" horiz-adv-x=\"640\" \n+d=\"M576 384c35.3496 0 64 -28.6504 64 -64v-256c0 -35.3496 -28.6504 -64 -64 -64h-370.75c-16.9697 0 -33.25 6.75 -45.25 18.75l-150.63 150.63c-12.5 12.4902 -12.5 32.75 0 45.25l150.63 150.62c10.3438 10.3496 30.6143 18.75 45.2471 18.75h0.0126953h370.74z\n+M491.31 129.94l-62.0596 62.0596l62.0596 62.0596c6.25 6.25 6.25 16.3809 0 22.6309l-22.6191 22.6191c-6.25 6.25 -16.3809 6.25 -22.6309 0l-62.0596 -62.0596l-62.0596 62.0596c-6.25 6.25 -16.3809 6.25 -22.6309 0l-22.6191 -22.6191\n+c-6.25 -6.25 -6.25 -16.3809 0 -22.6309l62.0596 -62.0596l-62.0596 -62.0596c-6.25 -6.25 -6.25 -16.3809 0 -22.6309l22.6191 -22.6191c6.25 -6.25 16.3809 -6.25 22.6309 0l62.0596 62.0596l62.0596 -62.0596c6.25 -6.25 16.3809 -6.25 22.6309 0l22.6191 22.6191\n+c6.25 6.25 6.25 16.3809 0 22.6309z\" \u002F>\n+    \u003Cglyph glyph-name=\"bezier-curve\" unicode=\"&#xf55b;\" horiz-adv-x=\"640\" \n+d=\"M368 416c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM208 360v-72c0 -9.4502 2.17969 -18.3604 5.87988 -26.4404c-34.2695 -24.3496 -59.7402 -59.9492 -71.04 -101.56\n+h-49.3994c13.6797 64.6797 54.1699 119.48 109.54 152h-79.7305c-9.5 -23.4404 -32.4102 -40 -59.25 -40c-35.3398 0 -64 28.6504 -64 64s28.6602 64 64 64c26.8398 0 49.75 -16.5596 59.25 -40h84.75zM160 128c17.6699 0 32 -14.3301 32 -32v-96\n+c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96zM576 400c35.3398 0 64 -28.6504 64 -64s-28.6602 -64 -64 -64c-26.8398 0 -49.75 16.5596 -59.25 40h-79.7305c55.3701 -32.5195 95.8604 -87.3203 109.54 -152\n+h-49.3994c-11.2998 41.6104 -36.7705 77.21 -71.04 101.56c3.68945 8.08008 5.87988 16.9902 5.87988 26.4404v72h84.75c9.5 23.4404 32.4102 40 59.25 40zM576 128c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32\n+v96c0 17.6699 14.3301 32 32 32h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"bong\" unicode=\"&#xf55c;\" horiz-adv-x=\"448\" \n+d=\"M302.5 -64h-221c-23.1699 0 -44.4199 12.5801 -56 32.6602c-16.1904 28.0703 -25.5 60.5898 -25.5 95.3398c0 71.0303 38.6699 132.9 96 166.11v153.93l-15.9697 -0.0205078c-8.85059 -0.00976562 -16.0303 7.16016 -16.0205 16.0107l0.0400391 31.7295\n+c0.00976562 8.82031 7.16016 15.9707 15.9805 15.9805l223.939 0.259766c8.85059 0.00976562 16.0303 -7.16992 16.0205 -16.0195l-0.0400391 -31.7207c-0.00976562 -8.81934 -7.16016 -15.9697 -15.9805 -15.9795l-15.9697 -0.0205078v-154.16\n+c14.1201 -8.17969 27.0898 -18.1396 38.6504 -29.5098l39.4092 39.4102l-9.37988 9.37988c-6.25 6.25 -6.25 16.3799 0 22.6299l11.3105 11.3105c6.25 6.25 16.3799 6.25 22.6299 0l52.6895 -52.6904c6.25 -6.25 6.25 -16.3799 0 -22.6299l-11.2998 -11.3203\n+c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-9.37988 9.37988l-43.4404 -43.4395c17.3604 -28.8105 27.4404 -62.5 27.4404 -98.6201c0 -34.75 -9.30957 -67.2598 -25.5 -95.3398c-11.5703 -20.0801 -32.8203 -32.6602 -56 -32.6602zM120.06 188.57\n+c-24.8096 -14.3701 -44.1094 -35.7305 -56.5596 -60.5703h257c-12.4404 24.8398 -31.75 46.2002 -56.5596 60.5703l-23.9404 13.8701v181.76l-96 -0.110352v-181.649z\" \u002F>\n+    \u003Cglyph glyph-name=\"brush\" unicode=\"&#xf55d;\" horiz-adv-x=\"384\" \n+d=\"M352 448c17.6699 0 32 -14.3301 32 -32v-224h-384v224c0 17.6699 14.3301 32 32 32h320zM0 128v32h384v-32c0 -35.3496 -28.6602 -64 -64 -64h-64v-64c0 -35.3496 -28.6602 -64 -64 -64s-64 28.6504 -64 64v64h-64c-35.3398 0 -64 28.6504 -64 64zM192 24\n+c-13.25 0 -24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24s24 10.75 24 24c0 13.2598 -10.75 24 -24 24z\" \u002F>\n+    \u003Cglyph glyph-name=\"bus-alt\" unicode=\"&#xf55e;\" \n+d=\"M488 320c13.25 0 24 -10.7402 24 -24v-80c0 -13.25 -10.75 -24 -24 -24h-8v-166.4c0 -12.7998 -9.59961 -25.5996 -25.5996 -25.5996h-6.40039v-32c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\n+c-17.6699 0 -32 14.3301 -32 32v32c-17.6699 0 -32 14.3301 -32 32v160h-8c-13.25 0 -24 10.75 -24 24v80c0 13.2598 10.75 24 24 24h8v48c0 44.7998 99.2002 80 224 80s224 -35.2002 224 -80v-48h8zM160 376v-16c0 -4.41992 3.58008 -8 8 -8h176c4.41992 0 8 3.58008 8 8\n+v16c0 4.41992 -3.58008 8 -8 8h-176c-4.41992 0 -8 -3.58008 -8 -8zM112 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM240 160v160h-112c-17.6699 0 -32 -14.3301 -32 -32v-96c0 -17.6699 14.3301 -32 32 -32h112zM272 160\n+h112c17.6699 0 32 14.3301 32 32v96c0 17.6699 -14.3301 32 -32 32h-112v-160zM400 48c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"cannabis\" unicode=\"&#xf55f;\" \n+d=\"M503.47 87.75c5.24023 -2.75977 8.52051 -8.20996 8.53027 -14.1504c0.00976562 -5.92969 -3.26953 -11.3691 -8.50977 -14.1494c-2.4502 -1.29004 -60.7705 -31.7197 -133.49 -31.7197c-6.12988 0 -11.96 0.0996094 -17.5 0.30957\n+c11.3604 -22.2305 16.5195 -38.3096 16.8096 -39.2197c1.80078 -5.68066 0.290039 -11.8906 -3.90918 -16.1104c-2.5918 -2.60059 -7.67578 -4.71094 -11.3467 -4.71094c-1.34277 0 -3.47168 0.322266 -4.75391 0.720703c-1.83008 0.580078 -37.7197 11.9902 -77.2998 39.29\n+v-64.0098c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v64.0195c-39.5801 -27.2998 -75.4697 -38.7197 -77.2998 -39.2891c-1.28223 -0.398438 -3.41113 -0.72168 -4.75391 -0.72168c-3.6709 0 -8.75488 2.11035 -11.3467 4.71094\n+c-4.19922 4.2207 -5.70996 10.4307 -3.90918 16.1104c0.290039 0.910156 5.43945 16.9902 16.8096 39.2197c-5.54004 -0.209961 -11.3604 -0.30957 -17.5 -0.30957c-72.7305 0 -131.04 30.4297 -133.49 31.7197c-4.69629 2.48926 -8.50879 8.82422 -8.50879 14.1396\n+c0 5.32422 3.82129 11.6641 8.5293 14.1504c1.56934 0.820312 32.3896 16.8896 76.7793 25.8096c-64.25 75.1201 -84.0498 161.671 -84.9297 165.641c-0.210938 0.947266 -0.382812 2.50488 -0.382812 3.47559c0 3.65039 2.09375 8.71094 4.67285 11.2939\n+c3.03027 3.04004 7.12012 4.7002 11.3203 4.7002c1.14941 0 2.2998 -0.129883 3.43945 -0.379883c3.89062 -0.860352 86.5508 -19.5996 160.58 -79.7598c0 1.45996 -0.00976562 2.92969 -0.00976562 4.39941c0 118.79 59.9805 213.721 62.5303 217.7\n+c2.93945 4.58984 8.01953 7.37012 13.4697 7.37012h0.00195312c4.82812 0 10.8574 -3.30176 13.458 -7.37012c2.5498 -3.97949 62.5303 -98.9102 62.5303 -217.7c0 -1.46973 0 -2.93945 -0.00976562 -4.39941c74.0391 60.1699 156.699 78.9102 160.579 79.7598\n+c1.15039 0.259766 2.30078 0.379883 3.44043 0.379883c4.2002 0 8.29004 -1.66016 11.3203 -4.7002c3.85938 -3.87012 5.47949 -9.43945 4.2998 -14.7695c-0.879883 -3.96973 -20.6797 -90.5205 -84.9297 -165.641c44.3896 -8.91992 75.2197 -24.9893 76.7793 -25.8096z\" \u002F>\n+    \u003Cglyph glyph-name=\"check-double\" unicode=\"&#xf560;\" \n+d=\"M505 273.2c9.2998 -9.2998 9.2998 -24.5 -0.0996094 -34l-296 -296.2c-9.30078 -9.40039 -24.5 -9.40039 -33.9004 0l-168 168.1c-9.40039 9.40039 -9.40039 24.6006 0 34l39.7002 39.7002c9.2998 9.40039 24.5 9.40039 33.8994 0l111.4 -111.5l239.5 239.5\n+c9.2998 9.40039 24.5 9.40039 33.9004 0zM180.7 167.2l-112 112.2c-6.2002 6.19922 -6.2002 16.2998 0 22.5996l45.2998 45.2998c6.2002 6.2998 16.4004 6.2998 22.5996 0l55.4004 -55.5l151.5 151.5c6.2002 6.2998 16.4004 6.2998 22.5996 0l45.2002 -45.2998\n+c6.2002 -6.2002 6.2002 -16.2998 0 -22.5996l-208 -208.2c-6.2002 -6.2998 -16.3994 -6.2998 -22.5996 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"cocktail\" unicode=\"&#xf561;\" horiz-adv-x=\"576\" \n+d=\"M296 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v125.22l-168.74 168.73c-15.5195 15.5195 -4.5293 42.0498 17.4199 42.0498h366.641c21.9492 0 32.9395 -26.5303 17.4199 -42.0498\n+l-168.74 -168.73v-125.22h56zM432 448c79.5303 0 144 -64.4697 144 -144s-64.4697 -144 -144 -144c-27.4102 0 -52.7695 8.08008 -74.5801 21.3799l35.2598 35.2598c12.0303 -5.43945 25.2803 -8.63965 39.3203 -8.63965c52.9297 0 96 43.0596 96 96s-43.0703 96 -96 96\n+c-35.3701 0 -65.9902 -19.4502 -82.6396 -48h-52.54c19.8301 55.7998 72.5693 96 135.18 96z\" \u002F>\n+    \u003Cglyph glyph-name=\"concierge-bell\" unicode=\"&#xf562;\" \n+d=\"M288 317.46c108.51 -15.5703 192 -108.64 192 -221.46h-448c0 112.82 83.4902 205.89 192 221.46v18.54h-16c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-16v-18.54zM496 64\n+c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\n+    \u003Cglyph glyph-name=\"cookie\" unicode=\"&#xf563;\" \n+d=\"M510.37 193.21c4.37988 -27.6602 -0.110352 -56 -12.8203 -80.96l-35.0996 -68.8701c-10.7695 -21.1328 -36.6592 -47.0273 -57.79 -57.7998l-69.1201 -35.21c-24.8301 -12.6396 -53.0098 -17.1104 -80.5205 -12.75l-76.6992 12.1396\n+c-23.3896 3.70801 -55.9639 20.3066 -72.71 37.0498l-54.7607 54.75c-16.7959 16.8027 -33.4443 49.4844 -37.1592 72.9502l-12.0801 76.2705c-0.901367 5.68848 -1.63281 14.9805 -1.63281 20.7412c0 17.5723 6.47461 44.541 14.4521 60.1982l35.1006 68.8799\n+c10.7666 21.1357 36.6562 47.0303 57.79 57.8008l69.1201 35.21c24.8291 12.6494 53.0098 17.1201 80.5195 12.7598l76.7002 -12.1504c27.5303 -4.34961 52.9795 -17.3301 72.71 -37.0498l54.7598 -54.75c16.7969 -16.8027 33.4443 -49.4844 37.1602 -72.9502zM176 80\n+c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM208 240c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM368 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"cookie-bite\" unicode=\"&#xf564;\" \n+d=\"M510.52 192.18c4.10059 -27.3301 -0.349609 -55.2695 -12.9092 -79.9102l-35.1006 -68.8799c-10.7656 -21.1367 -36.6562 -47.0361 -57.79 -57.8096l-69.1299 -35.21c-24.8301 -12.6504 -53.0195 -17.1201 -80.5303 -12.7598l-76.71 12.1494\n+c-23.3916 3.70801 -55.9658 20.3105 -72.71 37.0605l-54.7695 54.7598c-16.7969 16.8057 -33.4443 49.4912 -37.1602 72.96l-12.0801 76.2695c-0.900391 5.68945 -1.63184 14.9824 -1.63184 20.7422c0 17.5752 6.47461 44.5479 14.4521 60.208l35.0996 68.8799\n+c10.7646 21.1396 36.6543 47.0391 57.79 57.8105l69.1299 35.2197c24.5898 12.5205 52.46 16.96 79.7207 12.8203c0.859375 -69.96 57.6895 -126.45 127.859 -126.45c0 -70.1699 56.5 -127.01 126.47 -127.86zM176 80c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32\n+s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM208 240c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM368 112c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"crop-alt\" unicode=\"&#xf565;\" \n+d=\"M488 96c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-40v-40c0 -13.25 -10.75 -24 -24 -24h-48c-13.25 0 -24 10.75 -24 24v328h-160v96h224c17.6699 0 32 -14.3301 32 -32v-256h40zM160 424v-328h160v-96h-224c-17.6699 0 -32 14.3301 -32 32v256h-40\n+c-13.25 0 -24 10.75 -24 24v48c0 13.2598 10.75 24 24 24h40v40c0 13.2598 10.75 24 24 24h48c13.25 0 24 -10.7402 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"digital-tachograph\" unicode=\"&#xf566;\" horiz-adv-x=\"640\" \n+d=\"M608 352c17.6699 0 32 -14.3301 32 -32v-256c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v256c0 17.6699 14.3301 32 32 32h576zM304 96v8c0 4.41992 -3.58008 8 -8 8h-224c-4.41992 0 -8 -3.58008 -8 -8v-8c0 -4.41992 3.58008 -8 8 -8h224\n+c4.41992 0 8 3.58008 8 8zM72 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM136 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16\n+c-4.41992 0 -8 -3.58008 -8 -8v-16zM200 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM264 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8\n+h-16c-4.41992 0 -8 -3.58008 -8 -8v-16zM304 224v48c0 8.83984 -7.16016 16 -16 16h-208c-8.83984 0 -16 -7.16016 -16 -16v-48c0 -8.83984 7.16016 -16 16 -16h208c8.83984 0 16 7.16016 16 16zM576 96v8c0 4.41992 -3.58008 8 -8 8h-224c-4.41992 0 -8 -3.58008 -8 -8v-8\n+c0 -4.41992 3.58008 -8 8 -8h224c4.41992 0 8 3.58008 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"dizzy\" unicode=\"&#xf567;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM152 233.4l28.7002 -28.7002c14.7002 -14.7998 37.7998 7.39941 22.5996 22.5996l-28.7002 28.7002l28.7002 28.7002c15 14.8994 -7.59961 37.5996 -22.5996 22.5996\n+l-28.7002 -28.7002l-28.7002 28.7002c-14.8994 15 -37.5996 -7.59961 -22.5996 -22.5996l28.7002 -28.7002l-28.7002 -28.7002c-15.2002 -15.0996 7.7998 -37.3994 22.5996 -22.5996zM248 32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64\n+s28.7002 -64 64 -64zM395.3 227.3l-28.7002 28.7002l28.7002 28.7002c15 14.8994 -7.59961 37.5996 -22.5996 22.5996l-28.7002 -28.7002l-28.7002 28.7002c-14.8994 15 -37.5996 -7.59961 -22.5996 -22.5996l28.7002 -28.7002l-28.7002 -28.7002\n+c-15.2002 -15.0996 7.7998 -37.3994 22.5996 -22.5996l28.7002 28.7002l28.7002 -28.7002c14.7002 -14.7998 37.7998 7.39941 22.5996 22.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"drafting-compass\" unicode=\"&#xf568;\" \n+d=\"M457.01 103.58l54.9805 -95.2305l-7.02051 -58.25c-1.2793 -10.5898 -12.3594 -16.9893 -22.1699 -12.7998l-53.9502 23.04l-54.3799 94.1904c29.9102 11.8701 57.4902 28.7197 82.54 49.0498zM499.5 198.14c-52.6201 -83.1299 -144.45 -134.14 -243.5 -134.14\n+c-35.3799 0 -69.8701 6.71973 -102.06 18.96l-70.8008 -122.63l-53.9492 -23.04c-9.81055 -4.19043 -20.8906 2.20996 -22.1709 12.7998l-7.01953 58.25l71.2803 123.46c-21.29 17.8105 -40.4102 38.3799 -55.9805 62.0205\n+c-4.99023 7.56934 -2.20996 17.9297 5.64062 22.4697l27.75 16.0703c7.40918 4.29004 16.5898 1.76953 21.3799 -5.33008c9.71973 -14.4102 21.1299 -27.3906 33.6797 -39l68.2998 118.31c-7.43945 13.6299 -12.0498 29.0303 -12.0498 45.6602c0 53.0195 42.9805 96 96 96\n+s96 -42.9805 96 -96c0 -16.6299 -4.61035 -32.0303 -12.0596 -45.6602l51.79 -89.71c-23.0508 -23.1699 -51.3809 -39.96 -82.6104 -48.9199l-51.0898 88.5c-0.69043 -0.0195312 -1.33984 -0.209961 -2.04004 -0.209961s-1.33984 0.19043 -2.04004 0.209961\n+l-67.3604 -116.68c22.1797 -7.28027 45.4805 -11.5303 69.4102 -11.5303c76.25 0 147.01 38.8496 188.12 102.38c4.64941 7.17969 13.7803 9.87012 21.2598 5.71973l28.0703 -15.5693c7.93945 -4.40039 10.9102 -14.7207 6.0498 -22.3906zM256 384\n+c-17.6699 0 -32 -14.3301 -32 -32s14.3301 -32 32 -32s32 14.3301 32 32s-14.3301 32 -32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"drum\" unicode=\"&#xf569;\" \n+d=\"M431.34 325.95c44.9004 -16.3398 80.6602 -42.7803 80.6602 -86.1006v-160.229c0 -30.2705 -27.5 -57.6797 -72 -77.8604v101.9c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-118.93c-33.0498 -9.11035 -71.0703 -15.0605 -112 -16.7305v103.61\n+c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-103.61c-40.9297 1.66992 -78.9502 7.62012 -112 16.7305v118.93c0 13.248 -10.752 24 -24 24s-24 -10.752 -24 -24v-101.9c-44.5 20.1807 -72 47.5898 -72 77.8604v160.229c0 107.601 219.55 112.15 256 112.15\n+c15.2197 0 62.4297 -0.910156 112.19 -9.69043l110.06 71c2.22461 1.4834 6.20117 2.6875 8.875 2.6875c4.72852 0 10.6934 -3.19238 13.3154 -7.12695l8.86914 -13.3105c1.4834 -2.22461 2.6875 -6.20117 2.6875 -8.875c0 -4.72754 -3.19238 -10.6924 -7.12695 -13.3145z\n+M256 175.76c114.87 0 208 28.6904 208 64.0898c0 21.3105 -33.9102 40.1504 -85.8604 51.75l-118.64 -76.5195c-2.22461 -1.4834 -6.20117 -2.6875 -8.875 -2.6875c-4.72852 0 -10.6934 3.19336 -13.3154 7.12695l-8.86914 13.3105\n+c-1.48535 2.22559 -2.69043 6.2041 -2.69043 8.87988c0 4.72461 3.18945 10.6875 7.12012 13.3096l72.8096 47c-15.9492 1.2002 -32.5293 1.91016 -49.6797 1.91016c-114.88 0 -208 -28.6797 -208 -64.0801c0 -35.3994 93.1201 -64.0898 208 -64.0898z\" \u002F>\n+    \u003Cglyph glyph-name=\"drum-steelpan\" unicode=\"&#xf56a;\" horiz-adv-x=\"576\" \n+d=\"M288 416c159.06 0 288 -57.3096 288 -128v-192c0 -70.6904 -128.94 -128 -288 -128s-288 57.3096 -288 128v192c0 70.6904 128.94 128 288 128zM205.01 257.64c5.11035 19.0605 2.49023 38.96 -7.37012 56.0508l-25.5996 44.3398\n+c-73.9297 -13.6406 -124.04 -39.8701 -124.04 -70.0303c0 -30.7803 52.2305 -57.46 128.7 -70.8398c13.7695 9.91016 23.8594 23.8701 28.3096 40.4795zM288 208c21.0801 0 41.4102 1 60.8896 2.7002c-8.05957 26.1299 -32.1494 45.2998 -60.8896 45.2998\n+s-52.8301 -19.1699 -60.8896 -45.2998c19.4795 -1.7002 39.8096 -2.7002 60.8896 -2.7002zM352 352v13.04c-20.4004 1.87988 -41.7998 2.95996 -64 2.95996s-43.5996 -1.08008 -64 -2.95996v-13.04c0 -35.29 28.71 -64 64 -64s64 28.71 64 64zM398.93 217.1\n+c76.6699 13.3604 129.07 40.0703 129.07 70.9004c0 30.21 -50.2803 56.5 -124.44 70.0996l-25.6494 -44.4199c-9.87012 -17.0801 -12.4902 -36.9795 -7.37988 -56.04c4.45996 -16.6396 14.5898 -30.6299 28.3994 -40.54z\" \u002F>\n+    \u003Cglyph glyph-name=\"feather-alt\" unicode=\"&#xf56b;\" \n+d=\"M512 448c-1.80957 -26.2598 -11.71 -132.86 -53.6201 -234.79l-106.54 -53.21h81.1406c-9.08008 -16.4102 -19.2002 -32.2305 -30.4502 -47.1201l-146.79 -48.8799h100.95c-35.5605 -30.0703 -79.1006 -51.0996 -132.58 -56.54\n+c-41.8105 -4.83008 -83.8701 -7.21973 -125.96 -7.36035l-57.1309 -57.0693c-9.38965 -9.37012 -24.5996 -9.37012 -33.9795 0s-9.37988 24.5693 0 33.9395l259.5 259.24c6.25 6.25 6.25 16.3799 0 22.6299s-16.4004 6.25 -22.6504 0l-178.87 -178.689\n+c1.15039 26.7998 2.90039 53.5801 5.99023 80.2393c25.4307 249.41 389.21 284.051 440.99 287.61z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-contract\" unicode=\"&#xf56c;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8\n+h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 312v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM256.81 64c-4.19922 0 -8.13965 2.44043 -10.1592 6.5\n+c-11.9502 23.8604 -46.2305 30.3496 -66 14.1602l-13.8809 41.6396c-3.28906 9.82031 -12.4297 16.4102 -22.7695 16.4102s-19.4805 -6.59961 -22.7803 -16.4102l-18.1895 -54.6396c-1.53027 -4.58008 -5.81055 -7.66016 -10.6406 -7.66016h-12.3896\n+c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h12.3896c18.6201 0 35.1104 11.8701 41 29.5303l10.6104 31.8799l16.8301 -50.46c2.03027 -6.14062 7.58008 -10.4404 14.0303 -10.8906c0.389648 -0.0292969 0.759766 -0.0498047 1.13965 -0.0498047h0.00976562\n+c5.45508 0 11.8613 3.96094 14.2998 8.83984l7.6709 15.3408c2.7998 5.59961 7.93945 6.18945 10.0195 6.18945s7.21973 -0.599609 10.1699 -6.51953c7.37012 -14.7207 22.1904 -23.8604 38.6396 -23.8604h47.1904c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16h-47.1904z\n+M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-download\" unicode=\"&#xf56d;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM300.45 100.64c10.1299 10.0703 3.00977 27.3604 -11.2705 27.3604h-65.1797v80\n+c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-80h-65.1797c-14.2803 0 -21.4004 -17.29 -11.25 -27.3604l96.4199 -95.6992c6.64941 -6.61035 17.3896 -6.61035 24.04 0zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961\n+c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-export\" unicode=\"&#xf56e;\" horiz-adv-x=\"576\" \n+d=\"M384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004zM571 140c6.59961 -6.59961 6.59961 -17.4004 0 -24l-95.7002 -96.5c-10.0996 -10.0996 -27.3994 -3 -27.3994 11.2998v65.2002h-64v64h64v65.0996\n+c0 14.3008 17.2998 21.4004 27.3994 11.3008zM192 112c0 -8.7998 7.2002 -16 16 -16h176v-136c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24h136v-128h-176\n+c-8.7998 0 -16 -7.2002 -16 -16v-32z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-import\" unicode=\"&#xf56f;\" \n+d=\"M16 160h112v-64h-112c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16zM505 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM352 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24\n+h-336c-13.2998 0 -24 10.7002 -24 24v136h127.9v-65.0996c0 -14.3008 17.2998 -21.4004 27.3994 -11.3008l95.7002 96.4004c6.59961 6.59961 6.59961 17.2998 0 24l-95.5996 96.5c-10.1006 10.0996 -27.4004 3 -27.4004 -11.2998v-65.2002h-128v264\n+c0 13.2998 10.7002 24 24 24h200v-136z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-invoice\" unicode=\"&#xf570;\" horiz-adv-x=\"384\" \n+d=\"M288 192v-64h-192v64h192zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464\n+c0 13.2998 10.7002 24 24 24h200v-136zM64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 312v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16\n+c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM320 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8zM320 208c0 8.83984 -7.16016 16 -16 16h-224\n+c-8.83984 0 -16 -7.16016 -16 -16v-96c0 -8.83984 7.16016 -16 16 -16h224c8.83984 0 16 7.16016 16 16v96z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-invoice-dollar\" unicode=\"&#xf571;\" horiz-adv-x=\"384\" \n+d=\"M377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7zM224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136z\n+M64 376v-16c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8zM64 296c0 -4.41992 3.58008 -8 8 -8h80c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-80c-4.41992 0 -8 -3.58008 -8 -8\n+v-16zM208 32.1201c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104\n+c4.55957 0 8.94922 -1.29004 12.8193 -3.71973c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v24.29c0 4.41992 -3.58008 8 -8 8h-16\n+c-4.41992 0 -8 -3.58008 -8 -8v-24.1201c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\n+c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-24.29c0 -4.41992 3.58008 -8 8 -8h16\n+c4.41992 0 8 3.58008 8 8v24.1201z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-prescription\" unicode=\"&#xf572;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM292.53 132.52c-6.25 6.25 -16.3799 6.25 -22.6299 0l-29.9004 -29.8994l-33.46 33.46\n+c19.8398 10.8701 33.46 31.7002 33.46 55.9199c0 35.3496 -28.6504 64 -64 64h-80c-8.83984 0 -16 -7.16016 -16 -16v-160c0 -8.83984 7.16016 -16 16 -16h16c8.83984 0 16 7.16016 16 16v48h18.7402l59.3193 -59.3096l-30.0596 -30.0605\n+c-6.25 -6.25 -6.25 -16.3799 0 -22.6299l11.3096 -11.3096c6.25 -6.25 16.3809 -6.25 22.6309 0l30.0596 30.0596l30.0596 -30.0703c6.25 -6.25 16.3809 -6.25 22.6309 0l11.3096 11.3105c6.25 6.25 6.25 16.3799 0 22.6299l-30.0596 30.0596l29.8994 29.9004\n+c6.25 6.25 6.25 16.3799 0 22.6299zM176 176h-48v32h48c8.82031 0 16 -7.17969 16 -16s-7.17969 -16 -16 -16zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-signature\" unicode=\"&#xf573;\" horiz-adv-x=\"576\" \n+d=\"M218.17 23.8604c7.25 -14.4707 21.71 -23.4404 37.8301 -23.75l128 -0.110352v-40c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136c0 -13.2002 10.7998 -24 24 -24h136.01v-46.5498l-128 -127.09\n+v-82.1201c-3.87012 0.30957 -7.46973 2.47949 -9.35938 6.25977c-11.9404 23.8604 -46.25 30.3496 -66 14.1602l-13.8809 41.6396c-3.28906 9.82031 -12.4297 16.4102 -22.7695 16.4102s-19.4805 -6.59961 -22.7803 -16.4102l-18.1895 -54.6396\n+c-1.53027 -4.58008 -5.81055 -7.66016 -10.6406 -7.66016h-12.3896c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16h12.3896c18.6201 0 35.1104 11.8701 41 29.5303l10.6104 31.8799l16.8301 -50.4697c4.4502 -13.46 23.1104 -14.8701 29.4795 -2.09082\n+l7.6709 15.3408c2.7998 5.59961 7.93945 6.18945 10.0195 6.18945s7.21973 -0.599609 10.1699 -6.51953zM384 326.1v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7l97.9004 -98c4.5 -4.5 7 -10.5996 7 -16.9004zM288 101.04l162.79 161.62l67.8799 -67.8799\n+l-161.68 -162.78h-68.9902v69.04zM568.54 280.67c9.9502 -9.93945 9.9502 -26.0703 0 -36.0098l-27.25 -27.25l-67.8799 67.8799l27.25 27.25c9.93945 9.94043 26.0703 9.94043 36.0098 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-upload\" unicode=\"&#xf574;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM289.18 95.9902c14.2803 0 21.4004 17.29 11.25 27.3594l-96.4199 95.7002\n+c-6.64941 6.61035 -17.3896 6.61035 -24.04 0l-96.4199 -95.7002c-10.1396 -10.0693 -3.00977 -27.3594 11.2705 -27.3594h65.1797v-80c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v80h65.1797zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004v-6.09961h-128\n+v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"fill\" unicode=\"&#xf575;\" \n+d=\"M502.63 230.94c12.4902 -12.5 12.4902 -32.7607 0 -45.2607l-221.57 -221.569c-18.75 -18.75 -43.3096 -28.1201 -67.8799 -28.1201c-24.5596 0 -49.1201 9.37988 -67.8701 28.1201l-117.189 117.189c-37.4902 37.4902 -37.4902 98.2598 0 135.75l94.7598 94.7598\n+l-86.1895 86.1807c-6.24023 6.25 -6.24023 16.3799 0 22.6299l22.6191 22.6104c6.24023 6.25 16.3809 6.25 22.6201 0l86.1807 -86.1807l81.5801 81.5801c6.23926 6.25 14.4297 9.37012 22.6191 9.37012c8.19043 0 16.3809 -3.12012 22.6309 -9.37012zM386.41 159.97\n+l48.3496 48.3398l-162.45 162.44l-58.9492 -58.9502l58.6094 -58.5996c12.4902 -12.4902 12.4902 -32.75 0 -45.2402c-12.4893 -12.4902 -32.75 -12.4902 -45.2393 0l-58.6104 58.5996l-81.6104 -81.6094l-13.1494 -13.1504\n+c-3.86035 -3.84961 -6.07031 -7.99023 -7.43066 -11.8301h320.48z\" \u002F>\n+    \u003Cglyph glyph-name=\"fill-drip\" unicode=\"&#xf576;\" horiz-adv-x=\"576\" \n+d=\"M512 128c0 0 64 -92.6504 64 -128s-28.6602 -64 -64 -64s-64 28.6504 -64 64s64 128 64 128zM502.63 230.94c12.4902 -12.5 12.4902 -32.75 -0.00976562 -45.25l-221.57 -221.57c-18.7402 -18.75 -43.2998 -28.1201 -67.8701 -28.1201\n+c-24.5596 0 -49.1299 9.37988 -67.8701 28.1201l-117.189 117.189c-37.4902 37.4902 -37.4902 98.2705 0 135.75l94.7598 94.7607l-86.1895 86.1797c-6.24023 6.24023 -6.24023 16.3701 0 22.6201l22.6191 22.6201c6.24023 6.25 16.3701 6.25 22.6201 0l86.1807 -86.1904\n+l81.5801 81.5801c6.23926 6.25 14.4297 9.37012 22.6191 9.37012c8.19043 0 16.3809 -3.12012 22.6309 -9.37012zM386.41 159.97l48.3398 48.3398l-162.44 162.44l-58.9492 -58.9502l58.5996 -58.5996c12.4902 -12.4902 12.4902 -32.75 0 -45.2402\n+s-32.75 -12.4902 -45.2402 0l-58.5996 58.5996l-81.6104 -81.6094l-13.1494 -13.1504c-3.86035 -3.84961 -6.07031 -7.99023 -7.43066 -11.8301h320.48z\" \u002F>\n+    \u003Cglyph glyph-name=\"fingerprint\" unicode=\"&#xf577;\" \n+d=\"M256.12 202.04c13.2598 0 24 -10.75 23.9902 -24c1.55957 -99.1104 -15.9502 -176.61 -29.4805 -224.521c-2.97949 -10.5996 -12.6104 -17.5195 -23.0898 -17.5195c-20.9697 0 -25.8496 20.7695 -23.1201 30.4902c19.5605 69.6494 28.8398 139.3 27.7002 211.55\n+c0 13.2598 10.75 24 24 24zM255.26 283.77c56.9707 -0.839844 104.03 -46.9199 104.91 -102.72c0.790039 -50.8994 -2.99023 -102.08 -11.2695 -152.109c-0.770508 -4.6709 -7.61035 -23.1006 -27.5801 -19.7705c-13.0703 2.16016 -21.9307 14.5205 -19.7607 27.5801\n+c7.80078 47.2197 11.3809 95.5 10.6104 143.55c-0.469727 30.1299 -26.3096 55 -57.6201 55.4697c-34.5303 0.150391 -54.8594 -26.3896 -54.4502 -52.3398c0.800781 -51.4395 -4.0293 -102.93 -14.3691 -153.02c-2.69043 -12.9805 -15.3105 -21.3105 -28.3604 -18.6406\n+c-12.9697 2.6709 -21.3301 15.3809 -18.6396 28.3604c9.61914 46.6396 14.1191 94.6104 13.3691 142.55c-0.849609 54.0205 41.9004 101.16 103.16 101.09zM144.57 303.55c10.2793 -8.37012 11.8398 -23.4795 3.48926 -33.7598\n+c-18.7998 -23.0898 -28.4697 -51.0898 -28 -80.9697c0.640625 -40.6699 -2.66992 -81.4902 -9.85938 -121.33c-0.820312 -4.5498 -7.78027 -22.8604 -27.8906 -19.3604c-13.0498 2.36035 -21.6992 14.8398 -19.3594 27.8896c6.63965 36.7803 9.7002 74.4707 9.10938 112.051\n+c-0.639648 40.7197 13.1309 80.5 38.75 112c8.39062 10.2793 23.46 11.8193 33.7607 3.47949zM254.04 365.88c101.09 -1.5 184.6 -83.0801 186.16 -181.83c0.0615234 -3.97852 0.111328 -10.4375 0.111328 -14.417c0 -29.1934 -2.68848 -76.4277 -6.00195 -105.433\n+c-1.06934 -9.23047 -9.85938 -23.0605 -26.5791 -21.1104c-13.1602 1.5 -22.6104 13.4102 -21.1104 26.5801c4.2998 37.5205 6.16992 75.75 5.58008 113.63c-1.15039 73.0801 -63.4502 133.45 -138.88 134.58c-11.5303 0.0800781 -22.9502 -1.08008 -34 -3.68945\n+c-12.8906 -3 -25.8301 4.93945 -28.8906 17.8291c-3.04004 12.9102 4.94043 25.8301 17.8301 28.8906c14.9102 3.53027 30.3701 5.37988 45.7803 4.96973zM506.11 244.43c6.22949 -28.2295 6.00977 -50.1602 5.83008 -72.3398\n+c-0.110352 -13.1895 -10.8301 -23.7998 -24 -23.7998h-0.200195c-13.25 0.110352 -23.9102 10.9297 -23.7998 24.2002c0.209961 24.1895 0.00976562 40.1895 -4.7002 61.5996c-2.86035 12.9502 5.31934 25.75 18.2598 28.6104\n+c13.0996 2.92969 25.75 -5.35059 28.6104 -18.2705zM465.99 335.15c7.62012 -10.8408 5 -25.8105 -5.83984 -33.4307c-10.8604 -7.58984 -25.8105 -5 -33.4199 5.86035c-39.8906 56.8301 -105.171 91.3604 -174.62 92.3896\n+c-56.3408 0.810547 -108.92 -20.0596 -147.681 -58.8594c-37.1201 -37.1406 -57.1094 -86.5 -56.2793 -139l-0.160156 -23.6406c-0.379883 -13 -11.0498 -23.2998 -23.9707 -23.2998c-0.239258 0 -0.489258 0 -0.719727 0.0205078\n+c-13.25 0.379883 -23.6699 11.4395 -23.2803 24.6895l0.120117 21.4697c-1.04004 65.6104 23.9502 127.28 70.3203 173.71c48.0098 48.0303 112.56 73.7607 182.35 72.9209c84.79 -1.27051 164.48 -43.4404 213.181 -112.83z\" \u002F>\n+    \u003Cglyph glyph-name=\"fish\" unicode=\"&#xf578;\" horiz-adv-x=\"576\" \n+d=\"M327.1 352c137.46 0 248.9 -128 248.9 -160s-111.44 -160 -248.9 -160c-89.9697 0 -168.55 54.7695 -212.279 101.62l-87.3301 -66.0498c-12.1299 -9.16992 -30.2402 0.599609 -27.1406 14.6602l24.1904 109.77l-24.1797 109.76\n+c-3.10059 14.0605 15.0098 23.8398 27.1396 14.6602l87.3301 -66.0498c43.7295 46.8604 122.3 101.63 212.27 101.63zM414.53 168c13.25 0 24 10.75 24 24c0 13.2598 -10.7402 24 -24 24c-13.25 0 -24 -10.7402 -24 -24c0 -13.25 10.75 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"flushed\" unicode=\"&#xf579;\" horiz-adv-x=\"496\" \n+d=\"M344 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM152 248c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248s-111 -248 -248 -248\n+s-248 111 -248 248s111 248 248 248zM80 224c0 -39.7998 32.2002 -72 72 -72s72 32.2002 72 72s-32.2002 72 -72 72s-72 -32.2002 -72 -72zM312 48c21.2002 0 21.2002 32 0 32h-128c-21.2002 0 -21.2002 -32 0 -32h128zM344 152c39.7998 0 72 32.2002 72 72\n+s-32.2002 72 -72 72s-72 -32.2002 -72 -72s32.2002 -72 72 -72z\" \u002F>\n+    \u003Cglyph glyph-name=\"frown-open\" unicode=\"&#xf57a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM323.3 56.7002c11.4004 -3.5 22.5 6.2002 20.5 18.0996\n+c-7 39.9004 -60.0996 61.2002 -95.7998 61.2002s-88.7998 -21.2002 -95.7998 -61.2002c-2 -11.7998 9 -21.5996 20.5 -18.0996c31.2002 9.59961 59.3994 15.2998 75.2998 15.2998s44.0996 -5.7002 75.2998 -15.2998zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32\n+s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"glass-martini-alt\" unicode=\"&#xf57b;\" \n+d=\"M502.05 390.4l-214.05 -214.04v-192.36h56c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-240c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h56v192.36l-214.05 214.04c-21.25 21.2598 -6.2002 57.5996 23.8496 57.5996h444.4\n+c30.0498 0 45.0996 -36.3398 23.8496 -57.5996zM443.77 400h-375.529l48 -48h279.529z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe-africa\" unicode=\"&#xf57c;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM408 224.5c0 8.55957 6.94043 15.5 15.5 15.5h18.4297c-19.0693 76.9805 -82.6992 136.37 -161.92 149.21v-21.7002c0 -8.55957 -6.93945 -15.5 -15.5 -15.5\n+h-24.21c-5.17969 0 -10.0195 -2.58984 -12.8896 -6.89941l-8.08008 -12.1104c-2.13965 -3.20996 -5.40039 -5.5 -9.13965 -6.44043l-14.4502 -3.60938c-6.90039 -1.73047 -11.7402 -7.93066 -11.7402 -15.04v-4.40039c0 -8.55957 6.94043 -15.5 15.5 -15.5h90.0498\n+h0.00292969c3.54297 0 8.45215 -2.0332 10.957 -4.54004l6.91992 -6.91992c2.91016 -2.91016 6.85059 -4.54004 10.96 -4.54004h10.0908c8.55957 0 15.5 -6.93945 15.5 -15.5c0 -6.66992 -4.27051 -12.5898 -10.6006 -14.7002l-47.3096 -15.7695\n+c-3.90039 -1.2998 -8.15039 -1 -11.8301 0.839844l-14.7207 7.36035c-7.5791 3.7998 -15.9492 5.76953 -24.4297 5.76953h-0.889648c-10.0527 -0.00195312 -24.7383 -4.89941 -32.7803 -10.9297l-27.5801 -20.6904c-13.75 -10.3193 -21.8496 -26.5098 -21.8496 -43.6992\n+v-14.0605c0.00195312 -12.4902 7.16992 -29.7959 16 -38.6299c10.25 -10.2402 24.1396 -16 38.6299 -16h25.8799c8.55957 0 15.5 -6.94043 15.5 -15.5v-29.8896v-0.00390625c0 -10.2822 3.73145 -26.0898 8.33008 -35.2861\n+c4.7002 -9.40039 14.3096 -15.3398 24.8203 -15.3398c8.19824 0.000976562 18.542 5.53809 23.0898 12.3594l13.0293 19.5498c5.9248 8.88477 17.125 21.9482 25 29.1602c2.4707 2.27051 4.14062 5.27051 4.76074 8.56055l4.2998 22.8301\n+c0.439453 2.3291 1.41016 4.5293 2.83008 6.42969l18.7402 24.9795c2.00977 2.68066 3.09961 5.9502 3.09961 9.30078v11.3398c0 8.55957 -6.94043 15.5 -15.5 15.5h-8.20996c-5.17969 0 -10.0205 2.58984 -12.8896 6.89941l-13.2402 19.8604\n+c-5.66992 8.50977 -1.70996 20.0703 7.99023 23.2998l2.64941 0.879883c1.31641 0.4375 3.50977 0.792969 4.89746 0.792969c2.5918 0 6.44531 -1.16602 8.60254 -2.60254l18.21 -12.1396c2.15527 -1.43945 6.00781 -2.60742 8.59961 -2.60742\n+c2.01953 0 5.125 0.733398 6.93066 1.63672l15.3896 7.7002c5.25 2.62012 8.57031 7.99023 8.57031 13.8604v6.92969z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe-americas\" unicode=\"&#xf57d;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM330.29 82.4004c7.56934 7.52832 13.7168 22.3037 13.7197 32.9795v0.00488281c0 6.97266 -4 16.6338 -8.92969 21.5654l-13.6904 13.6895\n+c-6.00977 6 -14.1396 9.37012 -22.6299 9.37012h-66.75c-9.41016 4.70996 -21.4795 32 -32 32c-10.5195 0 -20.8994 2.4502 -30.3096 7.16016l-11.0801 5.54004c-4.0498 2.03027 -6.61035 6.16016 -6.61035 10.6904v0.00292969c0 4.75391 3.66016 9.83301 8.16992 11.3369\n+l31.1699 10.3896c1.3584 0.452148 3.62305 0.818359 5.05469 0.818359c3.30078 0 8.00293 -1.75488 10.4961 -3.91797l9.2793 -8.06055c1.4502 -1.25977 3.31055 -1.95996 5.24023 -1.95996h5.63965c5.94043 0 9.81055 6.25977 7.15039 11.5801l-15.5898 31.1904\n+c-0.464844 0.931641 -0.84082 2.53223 -0.84082 3.57227c0 1.86621 1.08398 4.43555 2.4209 5.7373l9.91992 9.65039c1.5 1.45996 3.5 2.26953 5.58008 2.26953h8.99023h0.00292969c1.82812 0 4.3623 1.04883 5.65625 2.33984l8 8\n+c3.12012 3.12012 3.12012 8.19043 0 11.3105l-4.68945 4.68945c-3.12012 3.12012 -3.12012 8.19043 0 11.3105l10.3398 10.3398l4.69043 4.67969c6.25 6.25 6.25 16.3799 0 22.6299l-28.3008 28.3008c-8.26953 -0.310547 -16.3994 -1.12988 -24.3896 -2.41992v-11.3008\n+c0 -11.8994 -12.5195 -19.6299 -23.1602 -14.3096l-24.0098 12.0098c-45.8398 -19.8496 -82.7305 -56.3896 -103.2 -101.89c9.92969 -14.7197 25.21 -37.3701 34.5898 -51.1406c4.29395 -6.3252 12.3848 -15.6172 18.0605 -20.7393l0.799805 -0.720703\n+c9.5498 -8.60938 20.1699 -15.9697 31.6504 -21.75c14 -7.0498 34.4395 -18.1592 48.8096 -26.1094c10.1904 -5.62988 16.46 -16.3301 16.46 -27.9707v-32.0098c0 -8.49023 3.37012 -16.6299 9.37012 -22.6299c14.9902 -14.9902 24.3203 -38.6299 22.6299 -51.25v-27.3799\n+c14.6504 0 28.8896 1.69043 42.6504 4.69043l17.3896 46.8496c2.04004 5.49023 3.25977 11.21 4.76953 16.8701c1.07031 4.00977 3.18066 7.70996 6.1709 10.71c3.31934 3.33008 7.40918 7.39941 11.3096 11.2803zM417 173.75l29.1797 -7.29004\n+c1.08008 8.37988 1.82031 16.8701 1.82031 25.54c0 32.1299 -7.7998 62.4102 -21.3203 89.3301l-12.9795 -6.49023c-3.74023 -1.85938 -6.91992 -4.67969 -9.24023 -8.14941l-19.5898 -29.3809c-2.22754 -3.33594 -4.03516 -9.29883 -4.03516 -13.3096\n+s1.80762 -9.97363 4.03516 -13.3096l17.9795 -26.9707c3.31055 -4.96973 8.36035 -8.51953 14.1504 -9.96973z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe-asia\" unicode=\"&#xf57e;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM236.66 199.77l17.3701 28.9502c1.7998 2.99023 6.2002 2.82031 7.75977 -0.299805c1.34961 -2.70996 4.12012 -4.41992 7.15039 -4.41992h3.05957\n+c4.41992 0 8 3.58008 8 8v78.1201c0 6.05957 -3.41992 11.5996 -8.83984 14.3096l-10.8301 5.41016c-5.49023 2.75 -5.96973 10.4004 -0.860352 13.8105l50.1602 38.5293c-19.4297 6.31055 -40.1201 9.82031 -61.6299 9.82031c-110.28 0 -200 -89.7197 -200 -200\n+c0 -10.9199 1.12012 -21.5498 2.80957 -31.9902h62.5703c4.24023 0 8.31055 1.69043 11.3105 4.69043l19.4697 19.46c3.85938 3.85938 10.3701 2.7998 12.8096 -2.08008l22.6201 -45.2305c2.70996 -5.42969 8.25 -8.84961 14.3105 -8.84961h6.10938\n+c8.83984 0 16 7.16016 16 16v9.37012c0 4.24023 -1.68945 8.30957 -4.68945 11.3096l-5.66016 5.66016c-3.12012 3.12012 -3.12012 8.19043 0 11.3105l5.66016 5.65918c3 3 7.06934 4.69043 11.3096 4.69043h0.310547c5.61914 0 10.8291 2.9502 13.7197 7.76953z\n+M408 89.5703l-0.00976562 24.5996c0 4.24023 -1.69043 8.31055 -4.69043 11.3105l-11.9102 11.9092c-1.5 1.5 -2.33984 3.54004 -2.33984 5.66016v12.9307c0 2.20996 -1.79004 4 -4 4h-6.05957c-1.78027 0 -3.33984 -1.1709 -3.83984 -2.88086l-4.2002 -14.4697\n+c-0.490234 -1.7002 -2.06055 -2.87988 -3.83984 -2.87988h-3.80078c-1.4707 0.000976562 -3.12305 1.10254 -3.68945 2.45996l-5.35059 12.8496c-1.23926 2.99023 -4.15918 4.93066 -7.38965 4.93066h-12.0898h-0.0117188c-1.4082 0 -3.48145 -0.663086 -4.62793 -1.48047\n+l-23.71 -16.8896c-1.73047 -1.23047 -3.61035 -2.25977 -5.59082 -3.0498l-39.3398 -15.7402c-3.04004 -1.21973 -5.0293 -4.16016 -5.0293 -7.42969v-10.2002v-0.00292969c0 -1.8291 1.04785 -4.36328 2.33984 -5.65723l11.9102 -11.9102\n+c3 -3 7.06934 -4.68945 11.3096 -4.68945h10.3398c1.31055 0 2.61035 0.15918 3.87988 0.479492l21.2705 5.32031c1.76465 0.441406 4.67383 0.798828 6.49316 0.798828c6.12012 0 14.5986 -3.51172 18.9268 -7.83887l13.0098 -13.0098\n+c3 -3 7.07031 -4.69043 11.3096 -4.69043h15.1602c4.24023 0 8.31055 1.69043 11.3105 4.69043l9.56934 9.56934c3 3 4.69043 7.07031 4.69043 11.3105z\" \u002F>\n+    \u003Cglyph glyph-name=\"grimace\" unicode=\"&#xf57f;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM144 48v40h-40v-8c0 -17.7002 14.2998 -32 32 -32h8zM144 104v40h-8c-17.7002 0 -32 -14.2998 -32 -32v-8h40zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32\n+s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM208 48v40h-48v-40h48zM208 104v40h-48v-40h48zM272 48v40h-48v-40h48zM272 104v40h-48v-40h48zM336 48v40h-48v-40h48zM336 104v40h-48v-40h48zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32\n+s14.2998 -32 32 -32zM392 80v8h-40v-40h8c17.7002 0 32 14.2998 32 32zM392 104v8c0 17.7002 -14.2998 32 -32 32h-8v-40h40z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin\" unicode=\"&#xf580;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\n+s32 14.2998 32 32s-14.2998 32 -32 32zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.39941 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002\n+c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-alt\" unicode=\"&#xf581;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM311.7 311.3c-12.4004 -18.3994 -15.2002 -36.8994 -15.7002 -55.2998c0.599609 -18.4004 3.2998 -36.9004 15.7002 -55.2998c8 -11.7002 25.0996 -11.4004 32.7002 0\n+c12.3994 18.3994 15.1992 36.8994 15.6992 55.2998c-0.599609 18.4004 -3.2998 36.9004 -15.6992 55.2998c-8 11.7002 -25.1006 11.4004 -32.7002 0zM151.7 311.3c-12.4004 -18.3994 -15.2002 -36.8994 -15.7002 -55.2998\n+c0.599609 -18.4004 3.2998 -36.9004 15.7002 -55.2998c8 -11.7002 25.0996 -11.4004 32.7002 0c12.3994 18.3994 15.1992 36.8994 15.6992 55.2998c-0.599609 18.4004 -3.2998 36.9004 -15.6992 55.2998c-8 11.7002 -25.1006 11.4004 -32.7002 0zM248 16\n+c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004\n+c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-beam\" unicode=\"&#xf582;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7998 -11.7998 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\n+c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM168 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17\n+c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\n+c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.3008 3.7002 -22.7002 -6 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-beam-sweat\" unicode=\"&#xf583;\" horiz-adv-x=\"504\" \n+d=\"M456 320c-26.5 0 -48 21 -48 47c0 20 28.5 60.4004 41.5996 77.7998c3.2002 4.2998 9.60059 4.2998 12.8008 0c13.0996 -17.3994 41.5996 -57.7998 41.5996 -77.7998c0 -26 -21.5 -47 -48 -47zM456 288c6.7998 0 13.2002 1.09961 19.5 2.59961\n+c13.0996 -30.1992 20.5 -63.5 20.5 -98.5996c0 -137 -111 -248 -248 -248s-248 111 -248 248s111 248 248 248c50.2998 0 97 -15.0996 136.1 -40.7998c-7.7998 -18 -8.09961 -27.7998 -8.09961 -32.2002c0 -43.5996 35.9004 -79 80 -79zM328 296\n+c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7998 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5\n+c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM168 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\n+c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7002 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002\n+s-92.9004 5.5 -123.1 15.2002c-11.4004 3.7002 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-hearts\" unicode=\"&#xf584;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM90.4004 264.4c-7.7002 -20.2002 3.7998 -41.8008 24.1992 -47.2002l70.2002 -18.2002c4.60059 -1.2002 9.2998 1.5 10.5 6l19.4004 69.9004\n+c5.59961 20.2998 -7.40039 41.0996 -28.7998 44.5c-18.7002 3 -36.5 -9.80078 -41.5 -27.9004l-2 -7.09961l-7.10059 1.89941c-18.2002 4.7998 -38.2002 -4.2998 -44.8994 -21.8994zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\n+c1.90039 11.7998 -9.2998 21.5 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998zM381.4 217.3\n+c20.3994 5.2998 31.8994 26.9004 24.1992 47.2002c-6.69922 17.5996 -26.6992 26.5996 -44.8994 21.9004l-7.10059 -1.90039l-2 7.09961c-5.09961 18.1006 -22.8994 30.9004 -41.5 27.9004c-21.3994 -3.40039 -34.3994 -24.2002 -28.7998 -44.5l19.4004 -69.9004\n+c1.2998 -4.5 6 -7.19922 10.5 -6z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-squint\" unicode=\"&#xf585;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 250.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\n+c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 280.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM248 16\n+c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7002 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.3008 3.7002 -22.7002 -6 -20.7002 -17.9004\n+c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-squint-tears\" unicode=\"&#xf586;\" \n+d=\"M409.6 336.1c-5.59961 -0.799805 -10.2998 3.90039 -9.5 9.40039c3.30078 22.5996 12 73.5 26.8008 88.2998c19.0996 19.2002 50.6992 18.9004 70.2998 -0.700195c19.5996 -19.5996 19.8994 -51 0.700195 -70.1992\n+c-14.8008 -14.8008 -65.7002 -23.6006 -88.3008 -26.8008zM102.4 47.9004c5.59961 0.799805 10.2998 -3.90039 9.5 -9.40039c-3.30078 -22.5996 -12 -73.5 -26.8008 -88.2998c-19.1992 -19.2002 -50.5996 -18.9004 -70.1992 0.700195\n+c-19.6006 19.5996 -19.9004 51.0996 -0.800781 70.1992c14.8008 14.8008 65.7002 23.6006 88.3008 26.8008zM414.1 304.4c24 3.5 42.1006 7.39941 56.5 11.5c54.8008 -94.9004 42 -218.2 -39.1992 -299.301c-81.2002 -81.0996 -204.5 -94 -299.301 -39.1992\n+c4.10059 14.3994 8.10059 32.5 11.5 56.5c2.90039 20.5 -12.5 49.5996 -45.6992 45.6992c-24.1006 -3.5 -42.1006 -7.39941 -56.5 -11.5c-54.8008 94.9004 -41.9004 218.2 39.1992 299.301c81.2002 81.0996 204.5 94 299.301 39.1992\n+c-4.10059 -14.3994 -8.10059 -32.5 -11.5 -56.5c-2.90039 -20.5996 12.6992 -49.5996 45.6992 -45.6992zM255.7 342l-22.5 -90.5996c-2.2002 -8.60059 5.59961 -16.7002 14.5 -14.5l90.5 22.5996c13.0996 3.2998 11.5996 22.4004 -1.7998 23.5996l-52.3008 4.80078\n+l-4.7998 52.2998c-1.2002 13.2998 -20.2998 15 -23.5996 1.7998zM164.8 111.7c1.2998 -13.4004 20.4004 -14.9004 23.5 -1.7002l22.6006 90.5c2.19922 8.7002 -5.7002 16.7002 -14.5 14.5l-90.5 -22.5996c-13.1006 -3.30078 -11.6006 -22.4004 1.7998 -23.6006\n+l52.2998 -4.7998zM380.5 67.5c42.7998 42.9004 68 122.3 35.7002 167.6c-7.10059 9.90039 -21.9004 8.5 -27.2998 -2c-14.6006 -28.1992 -42.4004 -63.8994 -76.3008 -97.7998c-33.8994 -33.8994 -69.5 -61.7002 -97.7998 -76.2998\n+c-10.7002 -5.40039 -11.7998 -20.2998 -2 -27.2002c14.4004 -10.2002 32.1006 -14.7002 51 -14.7002c41 0 87.4004 21.1006 116.7 50.4004z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-stars\" unicode=\"&#xf587;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM94.5996 279.1c-6.19922 -1 -8.89941 -8.59961 -4.2998 -13.2998l25.4004 -24.5996l-6 -34.9004c-1 -6.2002 5.2998 -11 11 -7.89941l31.2998 16.2998l31.2002 -16.2002\n+c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994l25.3994 24.6006c4.60059 4.59961 1.90039 12.1992 -4.2998 13.1992l-34.8994 5l-15.5 31.6006c-2.90039 5.7998 -11 5.7998 -13.9004 0l-15.5 -31.6006zM248 16c60.5996 0 134.5 38.2998 143.8 93.2998\n+c1.90039 11.7998 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998zM405.7 265.9\n+c4.59961 4.59961 1.89941 12.1992 -4.40039 13.0996l-34.8994 5l-15.5 31.5996c-2.90039 5.80078 -11 5.80078 -13.9004 0l-15.5 -31.5996l-34.9004 -5c-6.19922 -1 -8.7998 -8.59961 -4.2998 -13.2002l25.4004 -24.5996l-6 -34.9004c-1 -6.2002 5.2998 -11 11 -7.89941\n+l31.2998 16.2998l31.2998 -16.2002c5.7002 -3.09961 12 1.7002 11 7.90039l-6 34.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tears\" unicode=\"&#xf588;\" horiz-adv-x=\"640\" \n+d=\"M102.4 191.9c5.59961 0.799805 10.2998 -3.90039 9.5 -9.40039c-3.30078 -22.5996 -12 -73.5 -26.8008 -88.2998c-19.1992 -19.2002 -50.5996 -18.9004 -70.1992 0.700195c-19.6006 19.5996 -19.9004 51.0996 -0.800781 70.1992\n+c14.8008 14.8008 65.7002 23.6006 88.3008 26.8008zM625.8 165.1c19.2002 -19.0996 18.7998 -50.6992 -0.799805 -70.2998c-19.5996 -19.5996 -51 -19.8994 -70.2002 -0.700195c-14.7998 14.8008 -23.5996 65.7002 -26.7998 88.3008c-0.799805 5.59961 4 10.2998 9.5 9.5\n+c22.5996 -3.30078 73.5 -12 88.2998 -26.8008zM496.4 177.9c11.7998 -82.3008 29.8994 -100.4 35.7998 -106.301c0.899414 -1 2 -1.59961 3 -2.5c-42.7002 -74.6992 -123 -125.1 -215.2 -125.1s-172.5 50.4004 -215.2 125c1 0.900391 2.10059 1.59961 3 2.5\n+c5.90039 6 24 24.0996 35.7998 106.4c2.90039 20.3994 -12.5 49.5996 -45.6992 45.6992c-8.90039 -1.2998 -16.8008 -2.69922 -24.3008 -4.09961c13.7002 124 118.7 220.5 246.4 220.5s232.7 -96.5 246.4 -220.5c-7.5 1.40039 -15.4004 2.7998 -24.3008 4.09961\n+c-26.5996 3.80078 -49.5 -19.0996 -45.6992 -45.6992zM400 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\n+c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM240 296c-23.7998 0 -52.7002 -29.2998 -55.7998 -71.4004c-0.700195 -8.5 10.7002 -11.8994 14.8994 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\n+c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.5 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004zM320 16c60.5996 0 134.5 38.2998 143.8 93.2998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004\n+c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.7002 -22.7002 -6.2002 -20.7002 -17.9004c9.2998 -55 83.2002 -93.2998 143.8 -93.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue\" unicode=\"&#xf589;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5c24.7002 16.2002 43.5 38.0996 47.7998 63.7998c1.90039 11.7998 -9.2998 21.5 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002\n+s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM168 208\n+c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078v-64\n+c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998\n+c3.5 15.4004 20.2002 24.1006 34.5996 17.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue-squint\" unicode=\"&#xf58a;\" horiz-adv-x=\"496\" \n+d=\"M293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078v-64c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006\n+l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998c3.5 15.4004 20.2002 24.1006 34.5996 17.6006zM248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5\n+c24.7002 16.2002 43.5 38.0996 47.7998 63.7998c1.90039 11.7998 -9.2998 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.5 3.59961 -22.7002 -6.10059 -20.7002 -17.9004\n+c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM214.2 229.7c7.7002 4.7002 7.7002 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18\n+l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18zM377.2 199.7l-33.6006 40.2998l33.6006 40.2998c8.5 10.2998 -3.7002 24.9004 -15.4004 18l-80 -48c-7.7998 -4.7002 -7.7998 -15.8994 0 -20.5996l80 -48\n+c11.5 -6.7998 24.1006 7.59961 15.4004 18z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-tongue-wink\" unicode=\"&#xf58b;\" horiz-adv-x=\"496\" \n+d=\"M344 264c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM248 440c137 0 248 -111 248 -248c0 -106.3 -67 -196.7 -161 -232c5.59961 12.2002 9 25.7002 9 40v45.5c24.7002 16.2002 43.5 38.0996 47.7998 63.7998\n+c1.90039 11.7998 -9.2002 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002c-11.4004 3.59961 -22.7002 -6.10059 -20.7002 -17.9004c4.2998 -25.7002 23.0996 -47.5996 47.7998 -63.7998v-45.5\n+c0 -14.2998 3.40039 -27.7998 9 -40c-94 35.2998 -161 125.7 -161 232c0 137 111 248 248 248zM192 215c8.40039 -7.40039 21.5996 -0.299805 20 10.7998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006\n+c-1.7998 -11.0996 11.2998 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM344 176c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM293.1 73.4004c0.800781 -0.400391 -0.5 0.299805 19 -9.30078\n+v-64c0 -35.5996 -29.1992 -64.5 -64.8994 -64c-35.1006 0.400391 -63.1006 29.7002 -63.1006 64.9004v63c19.2002 9.59961 18 9 18.9004 9.40039c14.4004 6.5 31.0996 -2.2002 34.5996 -17.6006l1.80078 -7.7998c2.09961 -9.2002 15.1992 -9.2002 17.2998 0l1.7998 7.7998\n+c3.5 15.4004 20.2002 24.1006 34.5996 17.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"grin-wink\" unicode=\"&#xf58c;\" horiz-adv-x=\"496\" \n+d=\"M0 192c0 137 111 248 248 248s248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248zM200 240c0 17.7002 -14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32zM368 215c8.5 -7.40039 21.5996 -0.200195 20 10.7998\n+c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM124.9 127.2c-11.4004 3.7002 -22.7002 -6 -20.7002 -17.9004\n+c9.2998 -55 83.2002 -93.2998 143.8 -93.2998s134.6 38.2998 143.8 93.2998c1.90039 11.9004 -9.39941 21.6006 -20.7002 17.9004c-30.1992 -9.7002 -75.0996 -15.2002 -123.1 -15.2002s-92.9004 5.5 -123.1 15.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"grip-horizontal\" unicode=\"&#xf58d;\" horiz-adv-x=\"448\" \n+d=\"M96 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM256 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64\n+c0 17.6699 14.3301 32 32 32h64zM416 160c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM96 352c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64\n+c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM256 352c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM416 352c17.6699 0 32 -14.3301 32 -32v-64\n+c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"grip-vertical\" unicode=\"&#xf58e;\" horiz-adv-x=\"320\" \n+d=\"M96 416c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM96 256c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64\n+c0 17.6699 14.3301 32 32 32h64zM96 96c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 416c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64\n+c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 256c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64zM288 96c17.6699 0 32 -14.3301 32 -32v-64\n+c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"headphones-alt\" unicode=\"&#xf58f;\" \n+d=\"M160 160c17.6699 0 32 -14.3496 32 -32.0596v-127.881c0 -17.6992 -14.3301 -32.0596 -32 -32.0596h-16c-35.3496 0 -64 28.71 -64 64.1201v63.7598c0 35.4199 28.6504 64.1201 64 64.1201h16zM368 160c35.3496 0 64 -28.71 64 -64.1201v-63.7598\n+c0 -35.4102 -28.6504 -64.1201 -64 -64.1201h-16c-17.6699 0 -32 14.3604 -32 32.0596v127.881c0 17.71 14.3301 32.0596 32 32.0596h16zM256 416c143.09 0 251.43 -119.13 256 -256v-112c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v112\n+c0 114.67 -93.3301 207.8 -208 207.82c-114.67 -0.0205078 -208 -93.1504 -208 -207.82v-112c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v112c4.57031 136.87 112.91 256 256 256z\" \u002F>\n+    \u003Cglyph glyph-name=\"headset\" unicode=\"&#xf590;\" \n+d=\"M192 240v-112c0 -17.6699 -14.3301 -32 -32 -32h-16c-35.3496 0 -64 28.6504 -64 64v48c0 35.3496 28.6504 64 64 64h16c17.6699 0 32 -14.3301 32 -32zM368 96h-16c-17.6699 0 -32 14.3301 -32 32v112c0 17.6699 14.3301 32 32 32h16c35.3496 0 64 -28.6504 64 -64v-48\n+c0 -35.3496 -28.6504 -64 -64 -64zM256 448c142.82 0 251.42 -118.83 256 -256v-165.72c0 -49.8604 -40.4199 -90.2803 -90.2803 -90.2803h-181.72c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48h32c26.5098 0 48 -21.4902 48 -48h101.72\n+c23.3506 0 42.2803 18.9297 42.2803 42.2803c0 0 -0.0400391 163.29 -0.120117 165.72h0.120117c0 114.69 -93.3096 208 -208 208s-208 -93.3096 -208 -208v-16c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v16c4.58008 137.17 113.18 256 256 256z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"highlighter\" unicode=\"&#xf591;\" horiz-adv-x=\"544\" \n+d=\"M0 -31.9805l68.3301 70.4707l67.04 -67.04l-35.4502 -35.4502zM124.61 208.03l41.5195 35.4395l173.34 -173.34l-35.5498 -41.6396c-9.5 -10.7705 -24.4199 -14.9805 -38.1504 -10.7803l-42.7393 13.0801l-50.8604 -50.8604l-96.2295 96.2305l50.9297 50.9395\n+l-13.0498 42.8301c-0.876953 2.87891 -1.58887 7.65625 -1.58887 10.665c0 9.11328 5.5459 21.4043 12.3789 27.4355zM527.92 368.73c20.5 -20.5 21.5303 -53.3906 2.34961 -75.1309l-169.949 -199.06l-169.771 169.78l199.05 169.96\n+c21.7402 19.1699 54.6309 18.1396 75.1201 -2.35059z\" \u002F>\n+    \u003Cglyph glyph-name=\"hot-tub\" unicode=\"&#xf593;\" \n+d=\"M414.21 270.35c-3.15039 25.3906 -14.6104 47.9707 -31.9697 62.1406c-27.7305 22.6299 -45.79 58.0498 -50.1299 97.1602c-1.09082 9.7793 6.48926 18.3496 16 18.3496h16.1201c7.98926 0 14.7295 -6.13965 15.7393 -14.3398\n+c3.16016 -25.4004 14.6104 -47.9805 31.9805 -62.1504c27.7295 -22.6299 45.79 -58.0498 50.1299 -97.1602c1.08008 -9.7793 -6.49023 -18.3496 -16 -18.3496h-16.1201c-8 0 -14.7295 6.13965 -15.75 14.3496zM306.21 270.35\n+c-3.15039 25.3906 -14.6104 47.9707 -31.9697 62.1406c-27.7305 22.6299 -45.79 58.0498 -50.1299 97.1602c-1.09082 9.7793 6.48926 18.3496 16 18.3496h16.1201c7.98926 0 14.7295 -6.13965 15.7393 -14.3398c3.16016 -25.4004 14.6104 -47.9805 31.9805 -62.1504\n+c27.7295 -22.6299 45.79 -58.0498 50.1299 -97.1602c1.08008 -9.7793 -6.49023 -18.3496 -16 -18.3496h-16.1201c-8 0 -14.7295 6.13965 -15.75 14.3496zM480 192c17.6699 0 32 -14.3301 32 -32v-160c0 -35.3496 -28.6504 -64 -64 -64h-384c-35.3496 0 -64 28.6504 -64 64\n+v224c0 35.3496 28.6504 64 64 64h42.6699h0.00292969c11.7754 0 28.9775 -5.73438 38.3975 -12.7998l110.93 -83.2002h224zM128 8v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM224 8v112\n+c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM320 8v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM416 8\n+v112c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-112c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8zM64 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"hotel\" unicode=\"&#xf594;\" horiz-adv-x=\"576\" \n+d=\"M560 384h-16v-384h16c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-240v80c0 8.7998 -7.2002 16 -16 16h-32c-8.7998 0 -16 -7.2002 -16 -16v-80h-240c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h15.9805v384h-15.9805\n+c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h544c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16zM256 339.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\n+c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM256 243.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\n+c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM128 339.2v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004\n+c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998zM179.2 192c6.39941 0 12.7998 6.40039 12.7998 12.7998v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004zM192 64h192c0 53.0195 -42.9805 96 -96 96s-96 -42.9805 -96 -96zM448 204.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998zM448 300.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-38.4004\n+c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h38.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"joint\" unicode=\"&#xf595;\" horiz-adv-x=\"640\" \n+d=\"M444.34 266.9c-35.7803 25.0693 -60.3398 63.0098 -60.3398 106.699v66.4004c0 4.41992 3.58008 8 8 8h48c4.41992 0 8 -3.58008 8 -8v-62.3096c0 -29.0303 15.8496 -54.71 39.6602 -71.3203c35.3301 -24.6504 56.3398 -64.8203 56.3398 -108.061v-30.3096\n+c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v30.3096c0 27.4307 -13.2803 52.9102 -35.6602 68.5908zM194.97 89.0195c22.3701 3.60059 45.0801 -4.30957 59.8203 -21.5098l112.72 -131.51h-88.5693c-98.6406 0 -195.29 27.7197 -278.94 80\n+c59.6904 37.3096 126.03 61.9297 194.97 73.0195zM553.28 360.91c54.3096 -36.4102 86.7197 -97.1602 86.7197 -162.601v-30.3096c0 -4.41992 -3.58008 -8 -8 -8h-48c-4.41992 0 -8 3.58008 -8 8v30.3096c0 50.1504 -25.21 96.6504 -67.3604 123.99\n+c-18.4697 11.9805 -28.6396 33.3701 -28.6396 55.3906v62.3096c0 4.41992 3.58008 8 8 8h48c4.41992 0 8 -3.58008 8 -8v-62.3096c0 -6.82031 3.61035 -12.9805 9.28027 -16.7803zM360.89 95.9502h0.108398c16.2441 0 38.0049 -10.0127 48.5723 -22.3506l117.949 -137.6\n+h-88.4492h-0.00292969c-16.248 0 -38.0146 10.0127 -48.5869 22.3496l-117.801 137.431c1.40039 0.0195312 53.8105 0.109375 88.21 0.169922zM616 96c13.25 0 24 -10.7402 24 -24v-112c0 -13.25 -10.75 -24 -24 -24h-17.4199h-0.00292969\n+c-16.248 0 -38.0146 10.0127 -48.5869 22.3496l-117.99 137.65h184z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss\" unicode=\"&#xf596;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM304 52c0 13 -13.4004 27.2998 -35.2002 36.4004\n+c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44c-8.40039 1.09961 -12.2002 -11.8008 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002c-6.10059 -2.59961 -6 -12.2998 0 -14.7998\n+l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32\n+s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss-beam\" unicode=\"&#xf597;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM209 220.1c4.2002 -7.5 15.5996 -4 15.0996 4.5c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004\n+c-0.699219 -8.5 10.7002 -11.8994 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006zM304 52c0 13 -13.4004 27.2998 -35.2002 36.4004c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44\n+c-8.40039 1.09961 -12.2002 -11.8008 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002c-6.10059 -2.59961 -6 -12.2998 0 -14.7998l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5\n+l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM369 220.1c4.2002 -7.5 15.5996 -4 15.0996 4.5c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004\n+c-0.699219 -8.5 10.8008 -11.7998 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"kiss-wink-heart\" unicode=\"&#xf598;\" horiz-adv-x=\"504\" \n+d=\"M501.1 45.5c9.2002 -23.9004 -4.39941 -49.4004 -28.5 -55.7002l-83 -21.5c-5.39941 -1.39941 -10.8994 1.7998 -12.3994 7.10059l-22.9004 82.5996c-6.59961 24 8.7998 48.5996 34 52.5996c22 3.5 43.1006 -11.5996 49 -33l2.2998 -8.39941l8.40039 2.2002\n+c21.5996 5.59961 45.0996 -5.10059 53.0996 -25.9004zM323.5 49.5c0 0 23.5996 -83.9004 23.9004 -84.5996c-30.5 -13.4004 -64 -20.9004 -99.4004 -20.9004c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248c0 -31.7998 -6.2002 -62.0996 -17.0996 -90\n+c-6 1.5 -12.2002 2.7998 -18.6006 2.90039c-29.0996 49.7998 -98.0996 50.5996 -127.8 4.2998c-11.2998 -17.7002 -14.5996 -39.4004 -9 -59.7002zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM288 52\n+c0 13 -13.4004 27.2998 -35.2002 36.4004c21.7998 8.69922 35.2002 23 35.2002 36c0 19.1992 -28.7002 41.5 -71.5 44c-8.2002 1.19922 -12.4004 -11.7002 -3.59961 -15.4004l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.2002\n+c-5.7002 -2.5 -6 -12.2998 0 -14.7998l17 -7.2002c13 -5.5 20.7998 -13.5 20.7998 -21.5s-7.7998 -16 -20.7998 -21.5l-17 -7.19922c-8.5 -3.60059 -4.90039 -16.2002 3.59961 -15.4004c42.7998 2.5 71.5 24.7998 71.5 44zM304 231l9.7002 8.5\n+c14.7998 13.2002 46.2002 13.2002 61 0l9.5 -8.5c8.5 -7.5 21.5 -0.299805 19.7998 10.7998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-1.7998 -11.2002 11.5 -18.2002 19.7998 -10.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh\" unicode=\"&#xf599;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM168 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32\n+s32 14.2998 32 32s-14.2998 32 -32 32zM256 16c73.4004 0 134 55 142.9 126c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-beam\" unicode=\"&#xf59a;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM272 240.6c-0.700195 -8.59961 10.9004 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\n+c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM112 240.6c-0.700195 -8.5 10.7998 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006\n+c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM398.9 142c1.19922 9.59961 -6.30078 18 -15.9004 18h-270\n+c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-squint\" unicode=\"&#xf59b;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 278.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\n+c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 308.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM398.9 142\n+c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\n+    \u003Cglyph glyph-name=\"laugh-wink\" unicode=\"&#xf59c;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM268.1 241.9c-1.69922 -11.2002 11.5 -18.3008 19.9004 -10.9004l9.59961 8.59961c14.8008 13.2002 46.2002 13.2002 61 0l9.5 -8.5\n+c8.40039 -7.5 21.5 -0.299805 19.8008 10.8008c-4 25.1992 -34.2002 42.0996 -59.9004 42.0996s-55.9004 -16.9004 -59.9004 -42.0996zM168 288c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM398.9 142\n+c1.19922 9.59961 -6.30078 18 -15.9004 18h-270c-9.59961 0 -17.0996 -8.5 -15.9004 -18c8.90039 -71 69.5 -126 142.9 -126h16c73.4004 0 134 55 142.9 126z\" \u002F>\n+    \u003Cglyph glyph-name=\"luggage-cart\" unicode=\"&#xf59d;\" horiz-adv-x=\"640\" \n+d=\"M224 128c-17.6699 0 -32 14.3301 -32 32v160c0 17.6699 14.3301 32 32 32h32v-224h-32zM576 160c0 -17.6699 -14.3301 -32 -32 -32h-32v224h32c17.6699 0 32 -14.3301 32 -32v-160zM624 64c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-82.9404\n+c1.79004 -5.03027 2.94043 -10.3604 2.94043 -16c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48c0 5.63965 1.15039 10.9697 2.94043 16h-197.881c1.79004 -5.03027 2.94043 -10.3604 2.94043 -16c0 -26.5098 -21.4902 -48 -48 -48s-48 21.4902 -48 48\n+c0 5.63965 1.15039 10.9697 2.94043 16h-82.9404c-8.83984 0 -16 7.16016 -16 16v368h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-368h496zM480 352v-224h-192v272c0 26.5098 21.4902 48 48 48h96\n+c26.5098 0 48 -21.4902 48 -48v-48zM432 352v48h-96v-48h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-marked\" unicode=\"&#xf59f;\" horiz-adv-x=\"576\" \n+d=\"M288 448c69.5898 0 126 -56.4102 126 -126c0 -56.2598 -82.3496 -158.8 -113.9 -196.02c-6.37988 -7.54004 -17.8096 -7.54004 -24.1992 0c-31.5508 37.2197 -113.9 139.76 -113.9 196.02c0 69.5898 56.4102 126 126 126zM20.1201 232.05l118.63 47.4502\n+c5.17969 -14.8799 12.4102 -30.4404 21.25 -46.4199v-233.08l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v250.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71zM288 88.3301c14.0703 0 27.3799 6.17969 36.5098 16.9502\n+c19.6699 23.2002 40.5703 49.6299 59.4902 76.7197v-245.99l-192 64v182c18.9199 -27.0996 39.8301 -53.5195 59.4902 -76.7197c9.12988 -10.7803 22.4395 -16.96 36.5098 -16.96zM554.06 286.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-250.32\n+c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v288z\" \u002F>\n+    \u003Cglyph glyph-name=\"map-marked-alt\" unicode=\"&#xf5a0;\" horiz-adv-x=\"576\" \n+d=\"M288 448c69.5898 0 126 -56.4102 126 -126c0 -56.2598 -82.3496 -158.8 -113.9 -196.02c-6.37988 -7.54004 -17.8096 -7.54004 -24.1992 0c-31.5508 37.2197 -113.9 139.76 -113.9 196.02c0 69.5898 56.4102 126 126 126zM288 280c23.2002 0 42 18.7998 42 42\n+s-18.7998 42 -42 42s-42 -18.7998 -42 -42s18.7998 -42 42 -42zM20.1201 232.05l118.63 47.4502c5.17969 -14.8799 12.4102 -30.4404 21.25 -46.4199v-233.08l-138.06 -62.8398c-10.5107 -4.2002 -21.9404 3.54004 -21.9404 14.8594v250.32\n+c0.00292969 11.959 9.0166 25.2686 20.1201 29.71zM288 88.3301c14.0703 0 27.3799 6.17969 36.5098 16.9502c19.6699 23.2002 40.5703 49.6299 59.4902 76.7197v-245.99l-192 64v182c18.9199 -27.0996 39.8301 -53.5195 59.4902 -76.7197\n+c9.12988 -10.7803 22.4395 -16.96 36.5098 -16.96zM554.06 286.84c10.5107 4.2002 21.9404 -3.54004 21.9404 -14.8594v-250.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-139.88 -55.9502v288z\" \u002F>\n+    \u003Cglyph glyph-name=\"marker\" unicode=\"&#xf5a1;\" \n+d=\"M93.9502 157.97l75.3994 75.4004l128.021 -128.021l-75.4004 -75.3994c-44.8223 -44.8203 -132.335 -86.8428 -195.34 -93.7998c-15.2803 -1.69043 -28.1895 11.2295 -26.4902 26.5098l0.0302734 0.229492c7.00195 62.9189 49.0156 150.315 93.7803 195.08z\n+M485.49 421.49c35.3496 -35.3604 35.3496 -92.6699 0 -128.021l-165.49 -165.489l-128.02 128.02l98.4795 98.4697l-19.5898 19.5898l-87.1504 -87.1494c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6201 22.6201c-6.25 6.25 -6.25 16.3799 0 22.6299l104.12 104.12\n+c15.6104 15.6201 40.9404 15.6201 56.5605 0l36.5596 -36.5498l21.7598 21.7598c35.3506 35.3496 92.6699 35.3496 128.021 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"medal\" unicode=\"&#xf5a2;\" \n+d=\"M223.75 317.25c-42.04 -6.55957 -79.8398 -25.6201 -109.56 -53.3896l-111.271 158.96c-7.41992 10.6094 0.160156 25.1797 13.1104 25.1797h111.149c10.0029 0 22.2959 -6.96191 27.4404 -15.54zM495.97 448c12.9502 0 20.5303 -14.5703 13.1104 -25.1797\n+l-111.271 -158.95c-29.7197 27.7598 -67.5195 46.8203 -109.56 53.3799l69.1299 115.21c5.78027 9.63965 16.2002 15.54 27.4404 15.54h111.149zM256 288c97.2002 0 176 -78.7998 176 -176s-78.7998 -176 -176 -176s-176 78.7998 -176 176s78.7998 176 176 176z\n+M348.52 130.74c6.82031 6.63965 3.05078 18.2295 -6.34961 19.5898l-52.4297 7.63965l-23.4307 47.5205c-2.10938 4.25 -6.21973 6.38965 -10.3291 6.38965c-4.09082 0 -8.1709 -2.11035 -10.2803 -6.38965l-23.4307 -47.5205l-52.4297 -7.63965\n+c-9.39941 -1.36035 -13.1699 -12.9502 -6.34961 -19.5898l37.9297 -36.96l-8.96973 -52.2207c-1.60059 -9.34961 8.25 -16.54 16.6494 -12.0898l46.9004 24.6504l46.9102 -24.6504c8.38965 -4.41992 18.25 2.73047 16.6494 12.0898l-8.96973 52.2207z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh-blank\" unicode=\"&#xf5a4;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32\n+s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"meh-rolling-eyes\" unicode=\"&#xf5a5;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM88 224c0 -35.2998 28.7002 -64 64 -64s64 28.7002 64 64c0 24.2998 -13.7002 45.2002 -33.5996 56c0.699219 -2.59961 1.59961 -5.2002 1.59961 -8\n+c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1.59961 8c-19.8994 -10.7998 -33.5996 -31.7002 -33.5996 -56zM312 48c21.2002 0 21.2002 32 0 32h-128c-21.2002 0 -21.2002 -32 0 -32h128zM344 160c35.2998 0 64 28.7002 64 64\n+c0 24.2998 -13.7002 45.2002 -33.5996 56c0.699219 -2.59961 1.59961 -5.2002 1.59961 -8c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 2.7998 0.900391 5.40039 1.59961 8c-19.8994 -10.7998 -33.5996 -31.7002 -33.5996 -56c0 -35.2998 28.7002 -64 64 -64z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"monument\" unicode=\"&#xf5a6;\" horiz-adv-x=\"384\" \n+d=\"M368 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-352c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h352zM289.14 347.26l30.8604 -315.26h-256l30.8701 315.26c0.625 6.27344 4.75098 14.9834 9.20996 19.4404\n+l76.5996 76.6094c6.25 6.25 16.3799 6.25 22.6299 0l76.6201 -76.6094c4.45898 -4.45703 8.58496 -13.167 9.20996 -19.4404zM240 140.8v38.4004c0 6.39941 -6.40039 12.7998 -12.7998 12.7998h-70.4004c-6.39941 0 -12.7998 -6.40039 -12.7998 -12.7998v-38.4004\n+c0 -6.39941 6.40039 -12.7998 12.7998 -12.7998h70.4004c6.39941 0 12.7998 6.40039 12.7998 12.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"mortar-pestle\" unicode=\"&#xf5a7;\" \n+d=\"M501.54 387.09l-99.0801 -99.0898h-151.37l203.811 152.86c5.25293 3.93848 14.8457 7.13477 21.4121 7.13477c4.64941 0 11.7988 -1.68652 15.957 -3.76465c21.7803 -10.8906 26.4902 -39.9209 9.27051 -57.1406zM496 256c8.83984 0 16 -7.16016 16 -16v-32\n+c0 -8.83984 -7.16016 -16 -16 -16h-16c0 -80.9805 -50.2002 -150.11 -121.13 -178.32c12.7695 -16.8701 21.7295 -36.7998 24.9502 -58.6895c1.45996 -9.91992 -6.04004 -18.9805 -16.0703 -18.9805h-223.5c-10.0303 0 -17.5303 9.06055 -16.0703 18.9805\n+c3.23047 21.8896 12.1904 41.8193 24.9502 58.6895c-70.9297 28.21 -121.13 97.3398 -121.13 178.32h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\n+    \u003Cglyph glyph-name=\"paint-roller\" unicode=\"&#xf5aa;\" \n+d=\"M416 320c0 -17.6699 -14.3301 -32 -32 -32h-352c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h352c17.6699 0 32 -14.3301 32 -32v-96zM448 384c35.3496 0 64 -28.6504 64 -64v-64c0 -53.0195 -42.9805 -96 -96 -96h-160v-32\n+c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32v32c0 35.3496 28.6504 64 64 64h160c17.6699 0 32 14.3301 32 32v128z\" \u002F>\n+    \u003Cglyph glyph-name=\"passport\" unicode=\"&#xf5ab;\" horiz-adv-x=\"448\" \n+d=\"M129.62 272c5.28027 31.2197 25.5898 57.1699 53.2998 70.4102c-7.66992 -19.0605 -12.7197 -43.3799 -14.21 -70.4102h-39.0898zM129.62 240h39.0898c1.49023 -27.0303 6.53027 -51.3496 14.21 -70.4102c-27.71 13.2402 -48.0098 39.1904 -53.2998 70.4102zM224 161.31\n+c-7.69043 7.4502 -20.7695 34.4307 -23.4404 78.6904h46.8701c-2.66016 -44.2695 -15.7393 -71.2402 -23.4297 -78.6904zM200.57 272c2.66016 44.2598 15.7393 71.2402 23.4395 78.6904c7.69043 -7.4502 20.7705 -34.4307 23.4307 -78.6904h-46.8701zM265.08 169.59\n+c7.67969 19.0605 12.7197 43.3799 14.21 70.4102h39.0898c-5.28027 -31.2197 -25.5898 -57.1699 -53.2998 -70.4102zM416 448c17.6699 0 32 -14.3301 32 -32v-448c0 -17.6699 -14.3301 -32 -32 -32h-352c-35.3496 0 -64 28.6504 -64 64v384c0 35.3496 28.6504 64 64 64h352z\n+M336 32c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16h-224c-8.7998 0 -16 -7.2002 -16 -16s7.2002 -16 16 -16h224zM224 128c70.6904 0 128 57.3096 128 128s-57.3096 128 -128 128s-128 -57.3096 -128 -128s57.3096 -128 128 -128zM265.08 342.41\n+c27.71 -13.2402 48.0195 -39.1904 53.2998 -70.4102h-39.0898c-1.49023 27.0303 -6.53027 51.3496 -14.21 70.4102z\" \u002F>\n+    \u003Cglyph glyph-name=\"pen-fancy\" unicode=\"&#xf5ac;\" \n+d=\"M79.1797 165.06l84.0703 33.0703l98.8799 -98.8799l-33.0703 -84.0703c-2.79102 -8.38086 -11.8584 -17.4482 -20.2393 -20.2393l-176.82 -58.9404l-4.67969 4.67969l92.8896 92.8906c2.55957 -0.660156 5.03027 -1.57031 7.7998 -1.57031c17.6699 0 32 14.3301 32 32\n+s-14.3301 32 -32 32s-32 -14.3301 -32 -32c0 -2.76953 0.910156 -5.24023 1.57031 -7.7998l-92.8896 -92.8906l-4.69043 4.69043l58.9404 176.82c2.79297 8.37891 11.8604 17.4463 20.2393 20.2393zM369.25 419.68c74.4805 84.2607 199.15 -39.1602 114.23 -114.229\n+l-199.49 -183.11l-97.8506 97.8506z\" \u002F>\n+    \u003Cglyph glyph-name=\"pen-nib\" unicode=\"&#xf5ad;\" \n+d=\"M136.6 309.21l151.4 42.79l128 -128l-42.79 -151.4c-5.08594 -17.9932 -23.6104 -37.3965 -41.3496 -43.3096l-279.86 -93.29l-14.6904 14.6904l150.11 150.109c6.25977 -2.99023 13.1797 -4.7998 20.5801 -4.7998c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48\n+s-48 -21.4902 -48 -48c0 -7.40039 1.80957 -14.3203 4.7998 -20.5801l-150.109 -150.11l-14.6904 14.6904l93.29 279.86c5.91309 17.7393 25.3164 36.2637 43.3096 41.3496zM497.94 373.83c18.75 -18.7598 18.75 -49.1602 0 -67.9102l-56.5508 -56.5498l-128.02 128.02\n+l56.5498 56.5508c18.75 18.75 49.1602 18.75 67.9102 0z\" \u002F>\n+    \u003Cglyph glyph-name=\"pencil-ruler\" unicode=\"&#xf5ae;\" \n+d=\"M109.46 203.96l-100.17 100.18c-12.3896 12.3906 -12.3799 32.4707 0 44.8604l89.71 89.71c12.3896 12.3896 32.4697 12.3896 44.8604 0l33.6396 -33.6504l-61.6797 -61.6797c-3.10059 -3.08984 -3.10059 -8.11035 0 -11.21l11.21 -11.21\n+c1.28027 -1.2832 3.79199 -2.3252 5.60449 -2.3252c1.81348 0 4.32422 1.04199 5.60547 2.3252l61.6797 61.6797l44.1201 -44.1201zM497.93 320.76l-46.0195 -46.0293l-113.2 113.199l46.0205 46.0107c18.7695 18.7598 49.1895 18.7598 67.9492 0l45.25 -45.25\n+c18.75 -18.7607 18.7607 -49.1709 0 -67.9307zM316.08 365.29l113.2 -113.19l-296.92 -296.93l-107.45 -18.8398c-14.5 -2.5498 -27.1201 10.0703 -24.5898 24.5596l18.7598 107.44zM502.71 79.8604c12.3896 -12.3906 12.3896 -32.4707 0 -44.8604l-89.71 -89.7002\n+c-12.3896 -12.3896 -32.4697 -12.3896 -44.8604 0l-100.21 100.2l134.58 134.56l44.1406 -44.1396l-61.6807 -61.6797c-3.08984 -3.08984 -3.08984 -8.11035 0 -11.21l11.21 -11.21c3.08984 -3.10059 8.11035 -3.10059 11.21 0l61.6807 61.6797z\" \u002F>\n+    \u003Cglyph glyph-name=\"plane-arrival\" unicode=\"&#xf5af;\" horiz-adv-x=\"640\" \n+d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h608zM44.8096 242.34c-6.5498 5.91016 -12.3896 14.3398 -12.5791 23.25l-0.230469 101.78\n+c0.19043 10.8799 10.3799 18.7002 20.7197 15.8799l39.7305 -10.8301c5.00977 -1.36035 9.08984 -5.04004 11.0195 -9.92969l27.5898 -67.8799l102.2 -27.8408l-47.9199 164.211c-0.189453 11.1191 10.1504 19.3193 20.71 16.4395l65.0898 -17.7295\n+c5.70996 -1.56055 10.1504 -6.10059 11.6602 -11.9102l100.36 -191.851l97.5098 -26.5596c26.4805 -7.20996 51.5498 -20.1797 70.8301 -40c21.6396 -22.25 27.2002 -40.46 23.3701 -54.96c-3.81055 -14.5 -17.5801 -27.4404 -47.25 -35.71\n+c-26.4404 -7.36035 -54.5205 -5.85059 -81 1.35938l-287.601 78.3506c-7.94531 2.16895 -19.3564 8.41016 -25.4697 13.9297z\" \u002F>\n+    \u003Cglyph glyph-name=\"plane-departure\" unicode=\"&#xf5b0;\" horiz-adv-x=\"640\" \n+d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h608zM80.5498 106.73l-76.21 82.9697c-7.62012 8.95996 -4.87012 22.7803 5.57031 28.0801l40.1299 20.3701\n+c2.0957 1.0625 5.7041 1.92578 8.05469 1.92578c2.33691 0 5.92773 -0.853516 8.01562 -1.90625l72.3496 -36.4697l103.21 52.3799l-156.22 98.0996c-8.08008 8.87988 -5.5 23.1201 5.16992 28.5303l65.75 33.3701c2.0957 1.06348 5.70508 1.92676 8.05566 1.92676\n+c3 0 7.45508 -1.36035 9.94434 -3.03711l218.7 -82.0596l98.5098 49.9902c26.7402 13.5596 56.4297 21.4199 86.2803 19.4795c33.5098 -2.17969 51.04 -12.8799 58.25 -27.4502c7.22949 -14.5596 5.23926 -35.1699 -13.0703 -63.6494\n+c-16.3096 -25.3701 -40.2803 -44.7402 -67.0205 -58.3105l-290.96 -147.649c-7.71094 -3.91895 -20.9893 -7.1084 -29.6396 -7.12012l-130.54 -0.180664c-9.22949 -0.00976562 -18.0498 3.87012 -24.3301 10.7109z\" \u002F>\n+    \u003Cglyph glyph-name=\"prescription\" unicode=\"&#xf5b1;\" horiz-adv-x=\"384\" \n+d=\"M301.26 96l78.0605 -78.0498c6.25 -6.25 6.25 -16.3799 0 -22.6299l-22.6299 -22.6299c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-78.0596 78.0596l-78.0498 -78.0703c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309\n+l78.0596 78.0596l-128 128h-18.75v-80c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v256c0 8.83984 7.16016 16 16 16h144c53.0195 0 96 -42.9805 96 -96c0 -48.8896 -36.6904 -88.7998 -83.96 -94.7803l83.96 -83.96l78.0596 78.0605\n+c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309zM64 352v-64h96c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32h-96z\" \u002F>\n+    \u003Cglyph glyph-name=\"sad-cry\" unicode=\"&#xf5b3;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248c0 -90 -48.2002 -168.7 -120 -212.1v180.1c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16v-196.7c-29.5 -12.3994 -62 -19.2998 -96 -19.2998s-66.5 6.90039 -96 19.2998v196.7c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16\n+v-180.1c-71.7998 43.3994 -120 122 -120 212.1c0 137 111 248 248 248zM182.5 223.5l9.7002 -8.5c2.5 -2.2998 7.89941 -4.7002 13.7002 -1.59961c4.39941 2.39941 6.89941 7.39941 6.09961 12.3994c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006\n+c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-0.799805 -5 1.7002 -10 6.09961 -12.3994c4.40039 -2.40039 9.90039 -1.7002 13.7002 1.59961l9.5 8.5c14.7998 13.2002 46.2002 13.2002 61 0zM248 32c26.5 0 48 28.7002 48 64s-21.5 64 -48 64s-48 -28.7002 -48 -64\n+s21.5 -64 48 -64zM397.8 213.5c4.40039 2.40039 6.7998 7.40039 6.2002 12.2998c-4 25.2002 -34.2002 42.1006 -59.9004 42.1006c-25.6992 0 -55.8994 -16.9004 -59.8994 -42.1006c-0.799805 -5 1.7002 -10 6.09961 -12.3994\n+c4.40039 -2.40039 9.90039 -1.7002 13.7002 1.59961l9.59961 8.59961c14.8008 13.2002 46.2002 13.2002 61 0l9.5 -8.5c2.5 -2.2998 7.90039 -4.69922 13.7002 -1.59961z\" \u002F>\n+    \u003Cglyph glyph-name=\"sad-tear\" unicode=\"&#xf5b4;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM328 272c-17.7002 0 -32 -14.2998 -32 -32s14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32zM152 32c26.5 0 48 21 48 47c0 20 -28.5 60.4004 -41.5996 77.7998\n+c-3.2002 4.2998 -9.60059 4.2998 -12.8008 0c-13.0996 -17.3994 -41.5996 -57.7998 -41.5996 -77.7998c0 -26 21.5 -47 48 -47zM168 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM338.2 53.7998\n+c13.2998 -16.0996 38.2998 4 24.5 20.4004c-28.4004 34.2002 -70.2998 53.7998 -114.7 53.7998c-21.2002 0 -21.2002 -32 0 -32c34.9004 0 67.7998 -15.4004 90.2002 -42.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"shuttle-van\" unicode=\"&#xf5b6;\" horiz-adv-x=\"640\" \n+d=\"M628.88 237.35c7.17969 -8.62988 11.1201 -19.5 11.1201 -30.7295v-110.62c0 -17.6699 -14.3301 -32 -32 -32h-32c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-128c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-32c-17.6699 0 -32 14.3301 -32 32v288\n+c0 17.6699 14.3301 32 32 32h425.52c12.4082 -0.00195312 28.9258 -7.73926 36.8701 -17.2695zM64 256h96v96h-96v-96zM160 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM320 256v96h-96v-96h96zM480 16\n+c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM384 256h146.02l-80 96h-66.0195v-96z\" \u002F>\n+    \u003Cglyph glyph-name=\"signature\" unicode=\"&#xf5b7;\" horiz-adv-x=\"640\" \n+d=\"M623.2 256c9.09961 0.599609 16.7998 -7.09961 16.5996 -16.2002v-32.0996c0 -8.5 -6.7002 -15.1006 -15.2002 -15.7998c-39.3994 -3.2002 -105.399 -51 -138.399 -65.8008c-34.2998 -15.3994 -66.7002 -30 -102.3 -30c-28.2002 0 -50.2002 8.5 -65.5 25.3008\n+c-22.7002 24.8994 -22.8008 55.2998 -20.6006 83.7998c-56.5 -45.1006 -169 -153.601 -211.2 -195.8c-6.09961 -6.2002 -14.2998 -9.40039 -22.5996 -9.40039c-27 0 -36.5 27 -29.7002 43.9004l98.2002 245.6c8 19.9004 -14.2998 38.7998 -32.7002 27.0996l-58 -38.8994\n+c-7.5 -4.7998 -17.3994 -2.60059 -22.0996 4.89941l-17.2002 27c-4.7002 7.5 -2.5 17.4004 4.90039 22.1006l54.8994 36.8994c76.5 48.7002 160.101 -26.8994 129.7 -102.8l-41.5 -103.7c105.2 101.2 144.4 124.5 169.5 126\n+c54.4004 3.10059 43.7998 -68.0996 42.7002 -76.0996c-4.7002 -35.7002 -1.2998 -51.9004 21.2998 -51.9004c21.9004 0 47 11.3008 76.0996 24.4004c37.4004 16.7998 111.301 68 163.101 71.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"smile-beam\" unicode=\"&#xf5b8;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM112 224.6c-0.700195 -8.5 10.7998 -11.8994 15.0996 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006c12.3008 0 23.8008 -7.90039 31.5 -21.6006l9.5 -17\n+c4.10059 -7.39941 15.6006 -4.09961 14.9004 4.5c-3.2998 42.1006 -32.2002 71.4004 -56 71.4004s-52.7002 -29.2998 -56 -71.4004zM362.8 101.8c13.5 16.2002 -11 36.7002 -24.5996 20.5c-22.4004 -26.7998 -55.2002 -42.2002 -90.2002 -42.2002\n+s-67.7998 15.3008 -90.2002 42.2002c-13.5996 16.2002 -38.0996 -4.2002 -24.5996 -20.5c28.5 -34.2002 70.2998 -53.7998 114.8 -53.7998s86.2998 19.5996 114.8 53.7998zM369 220.1c4.09961 -7.39941 15.7002 -4.09961 15.0996 4.5\n+c-3.2998 42.1006 -32.1992 71.4004 -56 71.4004c-23.7998 0 -52.6992 -29.2998 -56 -71.4004c-0.699219 -8.5 10.8008 -11.7998 14.9004 -4.5l9.5 17c7.7002 13.7002 19.2002 21.6006 31.5 21.6006s23.7998 -7.90039 31.5 -21.6006z\" \u002F>\n+    \u003Cglyph glyph-name=\"solar-panel\" unicode=\"&#xf5ba;\" horiz-adv-x=\"640\" \n+d=\"M431.98 -0.00976562c8.84961 0.00976562 16.0293 -7.16992 16.0195 -16.0205l-0.0400391 -31.7295c-0.00976562 -8.82031 -7.16016 -15.9707 -15.9795 -15.9805l-223.961 -0.259766c-8.84961 -0.00976562 -16.0293 7.16992 -16.0195 16.0195l0.0498047 31.7305\n+c0.00976562 8.83008 7.16016 15.9805 15.9805 15.9902l47.9795 0.0498047v32.21h128v-32.0596zM585.2 421.26c58.1094 -342.42 54.7803 -321.39 54.7598 -325.47c-0.0800781 -17.2305 -14.3604 -31.79 -32.5898 -31.79h-574.74c-18.3096 0 -32.6299 14.6797 -32.5996 32\n+c0.00976562 3.91992 -3.35059 -17.1602 54.7598 325.26c2.62012 15.4307 16.21 26.7402 32.1396 26.7402h466.13c15.9307 0 29.5205 -11.3096 32.1406 -26.7402zM259.83 384l-9.77051 -96h139.87l-9.76953 96h-120.33zM184.66 128l11.4102 112h-105.971l-19.0098 -112\n+h113.57zM200.95 288l9.76953 96h-96.1895l-16.29 -96h102.71zM233.77 128h172.45l-11.3994 112h-149.65zM429.27 384l9.77051 -96h102.71l-16.29 96h-96.1904zM455.33 128h113.58l-19.0098 112h-105.971z\" \u002F>\n+    \u003Cglyph glyph-name=\"spa\" unicode=\"&#xf5bb;\" horiz-adv-x=\"576\" \n+d=\"M568.25 256c4.41016 0.0195312 7.79004 -3.40039 7.75 -7.82031c-0.230469 -27.9199 -7.12988 -126.13 -88.7695 -199.3c-84.04 -81.8301 -167.23 -80.8799 -199.23 -80.8799s-115.21 -0.94043 -199.23 80.8799c-81.6299 73.1602 -88.5391 171.38 -88.7695 199.3\n+c-0.0400391 4.41992 3.33984 7.83984 7.75 7.82031c29.04 -0.129883 135.01 -6.16016 213.84 -83c33.1201 -29.6299 53.3604 -63.2998 66.4102 -94.8604c13.0498 31.5605 33.29 65.2305 66.4102 94.8604c78.8301 76.8398 184.8 82.8701 213.84 83zM287.98 145.4\n+c-10.7012 15.7168 -30.8789 38.7705 -45.04 51.46c-18.7207 18.25 -38.8506 32.6895 -59.2207 44.3896c16.4707 70.4404 51.75 132.93 96.7402 172.07c4.12012 3.58008 11.0303 3.58008 15.1396 0c45.0107 -39.1699 80.29 -101.721 96.7305 -172.221\n+c-20.6797 -11.8799 -41.1699 -26.5693 -60.2598 -45.1797c-16.4902 -14.7402 -31.2705 -31.6699 -44.0898 -50.5195z\" \u002F>\n+    \u003Cglyph glyph-name=\"splotch\" unicode=\"&#xf5bc;\" \n+d=\"M472.29 252.11c48.54 -16.6201 53.8301 -73.8301 8.9502 -96.79l-62 -31.7402c-17.8301 -9.12988 -29.2803 -25.2002 -30.6299 -42.9902l-4.7002 -61.8594c-3.41016 -44.79 -65.1299 -66.7803 -104.45 -37.2207l-54.3203 40.8301\n+c-15.6201 11.7305 -36.96 16.1201 -57.0693 11.7305l-69.96 -15.2803c-50.6504 -11.0596 -94.0801 32.5596 -73.4902 73.8096l28.4297 56.9805c8.18066 16.3799 6.44043 35.1699 -4.63965 50.2402l-38.54 52.4199c-27.9004 37.9502 6.97949 86.8994 59.0303 82.8301\n+l71.8799 -5.62012c20.6602 -1.62012 40.9395 5.59961 54.2002 19.3096l46.1396 47.6699c33.4102 34.5107 98.3994 21.1504 109.979 -22.6201l15.9902 -60.4492c4.60059 -17.3799 18.8604 -31.7002 38.1406 -38.3008z\" \u002F>\n+    \u003Cglyph glyph-name=\"spray-can\" unicode=\"&#xf5bd;\" \n+d=\"M224 416v-96h-128v96c0 17.6699 14.3301 32 32 32h64c17.6699 0 32 -14.3301 32 -32zM480 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM224 288c53.0195 0 96 -42.9805 96 -96v-224c0 -17.6699 -14.3301 -32 -32 -32\n+h-256c-17.6699 0 -32 14.3301 -32 32v224c0 53.0195 42.9805 96 96 96h128zM160 32c44.1797 0 80 35.8203 80 80s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM480 352c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32s32 -14.3301 32 -32\n+s-14.3301 -32 -32 -32zM384 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM288 416c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM384 416c17.6699 0 32 -14.3301 32 -32\n+s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32zM480 224c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"stamp\" unicode=\"&#xf5bf;\" \n+d=\"M32 -64v64h448v-64h-448zM416 192c53.0195 0 96 -42.9805 96 -96v-32c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v32c0 53.0195 42.9805 96 96 96h66.5596c16.2607 0 29.4404 13.1797 29.4404 29.4404v0.0693359\n+c0 31.79 -9.98047 62.0605 -23.3096 90.9102c-5.57031 12.04 -8.69043 25.4199 -8.69043 39.5801c0 58.6699 52.6201 105.04 113.25 94.4902c38.79 -6.75 70.4902 -38.6699 77.2598 -77.4502c3.85059 -22.0303 0.0605469 -42.8096 -9.0498 -60.4199\n+c-12.5801 -24.3105 -21.46 -50.3506 -21.46 -77.7197v-9.45996c0 -16.2607 13.1797 -29.4404 29.4404 -29.4404h66.5596z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-half-alt\" unicode=\"&#xf5c0;\" horiz-adv-x=\"536\" \n+d=\"M508.55 276.49c26.25 -3.7998 36.7705 -36.1006 17.7305 -54.6006l-105.91 -102.979l25.0303 -145.49c3.55957 -20.79 -13.0605 -37.4004 -31.6602 -37.4004c-4.91016 0 -9.9707 1.16016 -14.8301 3.71094l-130.94 68.6992l-130.95 -68.6797\n+c-4.86914 -2.58008 -9.93945 -3.75 -14.8691 -3.75c-18.5801 0 -35.1699 16.6699 -31.6104 37.4502l25.0596 145.479l-105.89 103c-19.0303 18.5 -8.50977 50.79 17.7402 54.5898l146.38 21.29l65.4297 132.381c5.90039 11.9092 17.29 17.8096 28.6904 17.8096\n+c11.4697 0 22.9395 -5.98047 28.8193 -17.8096l65.4102 -132.391zM386.81 153.29l82.6504 80.3799l-114.229 16.6299l-25.0107 3.64062l-11.1797 22.6299l-51.0303 103.29l-0.0292969 -317.19l22.3799 -11.7402l102.13 -53.5898l-19.5205 113.45l-4.2793 24.8799z\" \u002F>\n+    \u003Cglyph glyph-name=\"suitcase-rolling\" unicode=\"&#xf5c1;\" horiz-adv-x=\"384\" \n+d=\"M336 288c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-16v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16h-128v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16h-16\n+c-26.5098 0 -48 21.4902 -48 48v224c0 26.5098 21.4902 48 48 48h288zM320 72v16c0 4.41992 -3.58008 8 -8 8h-240c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h240c4.41992 0 8 3.58008 8 8zM320 168v16c0 4.41992 -3.58008 8 -8 8h-240\n+c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h240c4.41992 0 8 3.58008 8 8zM144 400v-80h-48v80c0 26.5098 21.4902 48 48 48h96c26.5098 0 48 -21.4902 48 -48v-80h-48v80h-96z\" \u002F>\n+    \u003Cglyph glyph-name=\"surprise\" unicode=\"&#xf5c2;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM136 240c0 -17.7002 14.2998 -32 32 -32s32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32zM248 32c35.2998 0 64 28.7002 64 64s-28.7002 64 -64 64\n+s-64 -28.7002 -64 -64s28.7002 -64 64 -64zM328 208c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"swatchbook\" unicode=\"&#xf5c3;\" \n+d=\"M434.66 280.29c5.15527 -5.1709 9.33984 -15.293 9.33984 -22.5947s-4.18457 -17.4248 -9.33984 -22.5957l-210.66 -211.1v271.12l75.4297 75.5195l0.0703125 0.0703125v0c5.14258 5.12305 15.2061 9.28027 22.4648 9.28027c7.29102 0 17.3867 -4.18848 22.5352 -9.35059\n+l90.1602 -90.3496v0zM480 128c17.6641 0 32 -14.3359 32 -32v-128c0 -17.6641 -14.3359 -32 -32 -32h-300c2.17969 1.91016 4.62012 3.41992 6.67969 5.49023l186.41 186.51h106.91zM192 416v-384c0 -52.9922 -43.0078 -96 -96 -96s-96 43.0078 -96 96v384\n+c0 17.6641 14.3359 32 32 32h128c17.6641 0 32 -14.3359 32 -32zM96 8c13.248 0 24 10.752 24 24s-10.752 24 -24 24s-24 -10.752 -24 -24s10.752 -24 24 -24zM128 192v64h-64v-64h64zM128 320v64h-64v-64h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"swimmer\" unicode=\"&#xf5c4;\" horiz-adv-x=\"640\" \n+d=\"M189.61 137.42c-5.04004 4.65039 -10.3906 8.34961 -15.8604 11.5801l68.6299 98.04c7.36035 10.5 16.3398 19.5498 26.7197 26.9404l80.0205 57.1699c25.54 18.2598 57.8301 24.96 88.5596 18.3799l100.351 -21.5303c25.9297 -5.55957 42.4297 -31.0801 36.8799 -57\n+c-5.56055 -25.9102 -31.0898 -42.4102 -57 -36.8799l-100.351 21.5303c-4.33984 0.90918 -8.97949 -0.0302734 -12.6191 -2.61035l-18 -12.8604l112.84 -80.5996c-17.5107 -1.04004 -34.5303 -8.4502 -49.3906 -22.1602\n+c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992s-30.8496 6.16016 -34.3896 9.41992c-16.0107 14.7705 -34.5 22.5801 -53.46 22.5801h-16.3008c-18.96 0 -37.4395 -7.80957 -53.46 -22.5801c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992\n+s-30.8496 6.16016 -34.3896 9.41992zM624 96c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16c-38.6201 0 -72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398\n+c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16c26.04 0 45.7998 8.41992 56.0703 17.9004\n+c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998\n+c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996\n+c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004h16zM112 192c-44.1797 0 -80 35.8203 -80 80s35.8203 80 80 80s80 -35.8203 80 -80s-35.8203 -80 -80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"swimming-pool\" unicode=\"&#xf5c5;\" horiz-adv-x=\"640\" \n+d=\"M624 32c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16c-38.6201 0 -72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398\n+s-72.7197 12.1797 -96 31.8398c-23.2803 -19.6494 -57.3799 -31.8398 -96 -31.8398h-16c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16c26.04 0 45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998\n+c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996\n+c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004s45.7998 8.41992 56.0703 17.9004c8.89941 8.20996 19.6602 14.0996 31.7695 14.0996h16.2998c12.1104 0 22.8701 -5.88965 31.7705 -14.0996c10.29 -9.48047 30.0498 -17.9004 56.0898 -17.9004h16zM224 64\n+c-19.1201 0 -30.8604 6.16016 -34.3896 9.42969c-9.16992 8.4502 -19.2002 14.3398 -29.6104 18.0703v228.5c0 52.9404 43.0596 96 96 96s96 -43.0596 96 -96v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16c0 17.6396 -14.3604 32 -32 32\n+s-32 -14.3604 -32 -32v-96h192v96c0 52.9404 43.0596 96 96 96s96 -43.0596 96 -96v-16c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v16c0 17.6396 -14.3604 32 -32 32s-32 -14.3604 -32 -32v-228.51\n+c-10.4102 -3.73047 -20.4404 -9.61035 -29.6104 -18.0703c-3.5293 -3.25977 -15.2695 -9.41992 -34.3896 -9.41992v96h-192v-96z\" \u002F>\n+    \u003Cglyph glyph-name=\"tint-slash\" unicode=\"&#xf5c7;\" horiz-adv-x=\"640\" \n+d=\"M633.82 -10.0996c6.97949 -5.43066 8.22949 -15.4805 2.81934 -22.4502l-19.6396 -25.2705c-5.42969 -6.97949 -15.4805 -8.23926 -22.46 -2.80957l-588.36 454.729c-6.97949 5.43066 -8.22949 15.4805 -2.80957 22.4502l19.6396 25.2705\n+c5.41992 6.97949 15.4805 8.22949 22.46 2.80957l186.82 -144.399c21.6201 33.7197 42.9697 73.3398 58.4902 125.68c9 30.1201 50.5 28.7803 58.4395 0c46.9902 -158.48 146.78 -200.061 146.78 -311.82c0 -5.70996 -0.509766 -11.2998 -1.03027 -16.8701zM144 114.09\n+c0 29.7803 7.30957 54.6299 18.7197 78.1299l273.681 -211.52c-31.0303 -27.7402 -71.6904 -44.7002 -116.4 -44.7002c-97.2803 0 -176 79.6504 -176 178.09z\" \u002F>\n+    \u003Cglyph glyph-name=\"tired\" unicode=\"&#xf5c8;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM281.8 250.3c-7.7002 -4.7002 -7.7002 -15.8994 0 -20.5996l80 -48c11.5 -6.7998 24.1006 7.59961 15.4004 18l-33.6006 40.2998l33.6006 40.2998\n+c8.59961 10.2998 -3.7998 24.9004 -15.4004 18zM118.8 280.3l33.6006 -40.2998l-33.6006 -40.2998c-8.59961 -10.4004 3.90039 -24.7998 15.4004 -18l80 48c7.7998 4.7002 7.7998 15.8994 0 20.5996l-80 48c-11.6006 6.90039 -24 -7.7002 -15.4004 -18zM248 160\n+c-51.9004 0 -115.3 -43.7998 -123.2 -106.7c-1.7002 -13.3994 7.90039 -24.5996 17.7002 -20.3994c25.9004 11.0996 64.4004 17.3994 105.5 17.3994s79.5996 -6.2998 105.5 -17.3994c9.7002 -4.2002 19.4004 6.7998 17.7002 20.3994\n+c-7.90039 62.9004 -71.2998 106.7 -123.2 106.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"tooth\" unicode=\"&#xf5c9;\" horiz-adv-x=\"448\" \n+d=\"M443.98 351.75c10.1299 -41.6299 0.419922 -80.8203 -21.5303 -110.43c-23.3604 -31.5703 -32.6807 -68.6504 -36.29 -107.351c-4.41016 -47.1602 -10.3301 -94.1699 -20.9404 -140.319l-7.7998 -33.9502c-3.18945 -13.8701 -15.4902 -23.7002 -29.6699 -23.7002\n+c-13.9697 0 -26.1504 9.5498 -29.54 23.1602l-34.4697 138.42c-4.56055 18.3096 -20.96 31.1602 -39.7598 31.1602c-18.8008 0 -35.2002 -12.8398 -39.7607 -31.1602l-34.4697 -138.42c-3.38965 -13.6104 -15.5703 -23.1602 -29.54 -23.1602\n+c-14.1797 0 -26.4795 9.83008 -29.6699 23.7002l-7.7998 33.9502c-10.6104 46.1592 -16.54 93.1592 -20.9404 140.319c-3.60938 38.6904 -12.9297 75.7803 -36.29 107.351c-21.9199 29.6201 -31.6299 68.8096 -21.5 110.43c11.0098 45.2197 47.1104 82.0498 92.0098 93.7197\n+c23.4307 6.08984 46.1104 0.540039 66.8105 -10.3096l100.51 -64.6201c7.83984 -5.05957 17.6504 -2.15039 22.1104 4.7998c4.78027 7.44043 2.62012 17.3398 -4.7998 22.1104l-28.3203 18.21c3.54004 1.75 7.25 3.08984 10.5 5.47949\n+c26.1396 19.2305 56.9502 32.6904 89.1396 24.3301c44.9004 -11.6602 81 -48.5 92.0107 -93.7197z\" \u002F>\n+    \u003Cglyph glyph-name=\"umbrella-beach\" unicode=\"&#xf5ca;\" horiz-adv-x=\"640\" \n+d=\"M115.38 311.1c-10.0801 3.66992 -14.1104 16.3203 -7.41992 24.7207c59.75 74.8398 152.65 116.689 248.53 111.8c-52.79 -29.4102 -103.811 -92.1602 -139 -173.7zM247.63 262.94c44.4902 101.979 114.74 171.14 172.76 171.149c7.95996 0 15.6904 -1.2998 23.0908 -4\n+c61.3291 -22.3203 78.3896 -132.6 42.6299 -253.979zM521.48 387.5c76.5293 -57.9199 120.76 -149.67 118.439 -245.36c-0.259766 -10.7393 -11.4795 -17.8398 -21.5703 -14.1699l-102.619 37.3604c17.5293 58.75 24.6895 117.09 18.9492 166.979\n+c-2.37012 20.5908 -6.97949 38.8906 -13.1992 55.1904zM560 0.0195312c8.83984 0 16 -7.15918 16 -16v-32.0098c0 -8.83984 -7.16016 -16.0098 -16 -16.0098h-544c-8.83984 0 -16 7.16992 -16 16.0098v32.0098c0 8.85059 7.16016 16.0107 16 16.0107h236.96l72.9004 200.37\n+l60.1396 -21.9004l-64.9404 -178.48h238.94z\" \u002F>\n+    \u003Cglyph glyph-name=\"vector-square\" unicode=\"&#xf5cb;\" \n+d=\"M512 320c0 -17.6699 -14.3301 -32 -32 -32v-192c17.6699 0 32 -14.3301 32 -32v-96c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32h-192c0 -17.6699 -14.3301 -32 -32 -32h-96c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32v192\n+c-17.6699 0 -32 14.3301 -32 32v96c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32h192c0 17.6699 14.3301 32 32 32h96c17.6699 0 32 -14.3301 32 -32v-96zM416 384v-32h32v32h-32zM64 384v-32h32v32h-32zM96 0v32h-32v-32h32zM448 0v32h-32v-32h32zM416 96\n+v192h-32c-17.6699 0 -32 14.3301 -32 32v32h-192v-32c0 -17.6699 -14.3301 -32 -32 -32h-32v-192h32c17.6699 0 32 -14.3301 32 -32v-32h192v32c0 17.6699 14.3301 32 32 32h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"weight-hanging\" unicode=\"&#xf5cd;\" \n+d=\"M510.28 2.13965c8.33008 -33.3096 -14.6602 -66.1396 -46.2998 -66.1396h-415.95c-31.6504 0 -54.6406 32.8301 -46.3105 66.1396l73.0498 292.13c3.79004 15.1807 16.4404 25.7207 30.8701 25.7207h60.25c-3.58008 10.0498 -5.87988 20.7197 -5.87988 32\n+c0 53.0195 42.9805 96 96 96c53.0205 0 96 -42.9805 96 -96c0 -11.2803 -2.30957 -21.9502 -5.87988 -32h60.25c14.4297 0 27.0703 -10.5303 30.8701 -25.7207zM256 320c17.6396 0 32 14.3604 32 32s-14.3604 32 -32 32s-32 -14.3604 -32 -32s14.3604 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"wine-glass-alt\" unicode=\"&#xf5ce;\" horiz-adv-x=\"288\" \n+d=\"M216 -16c22.0898 0 40 -17.9102 40 -40c0 -4.41992 -3.58008 -8 -8 -8h-208c-4.41992 0 -8 3.58008 -8 8c0 22.0898 17.9102 40 40 40h40v117.18c-68.4697 15.8906 -118.05 79.9102 -111.4 154.16l15.96 178.11c0.730469 8.24023 7.55078 14.5498 15.7002 14.5498h223.48\n+c8.16016 0 14.9697 -6.30957 15.71 -14.5498l15.9502 -178.101c6.64941 -74.25 -42.9307 -138.27 -111.4 -154.159v-117.19h40zM61.75 400l-7.16992 -80h178.84l-7.16992 80h-164.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"air-freshener\" unicode=\"&#xf5d0;\" horiz-adv-x=\"384\" \n+d=\"M378.94 126.59c11.75 -12.1494 1.71973 -30.5898 -16.6406 -30.5898h-138.3v-32h112c8.83984 0 16 -7.16016 16 -16v-96c0 -8.83984 -7.16016 -16 -16 -16h-288c-8.83984 0 -16 7.16016 -16 16v96c0 8.83984 7.16016 16 16 16h112v32h-138.3\n+c-18.3604 0 -28.3906 18.4404 -16.6406 30.5898l94.2402 97.4102h-49.2197c-15.2998 0 -23.6602 16.5996 -13.8604 27.5303l113.33 126.51c-3.42969 6.61035 -5.5498 14 -5.5498 21.96c0 26.5098 21.4902 48 48 48s48 -21.4902 48 -48\n+c0 -7.95996 -2.12012 -15.3496 -5.5498 -21.96l113.33 -126.51c9.7998 -10.9307 1.43945 -27.5303 -13.8604 -27.5303h-49.2197zM192 416.02c-8.84961 0 -16.0195 -7.16992 -16.0195 -16.0195c0 -8.83984 7.16992 -16.0195 16.0195 -16.0195\n+s16.0195 7.17969 16.0195 16.0195c0 8.84961 -7.16992 16.0195 -16.0195 16.0195zM304 16h-224v-32h224v32z\" \u002F>\n+    \u003Cglyph glyph-name=\"apple-alt\" unicode=\"&#xf5d1;\" horiz-adv-x=\"448\" \n+d=\"M350.85 319c25.9707 -4.66992 47.2705 -18.6699 63.9199 -42c14.6504 -20.6699 24.6406 -46.6699 29.9609 -78c4.66992 -28.6699 4.31934 -57.3301 -1 -86c-7.99023 -47.3301 -23.9707 -87 -47.9404 -119c-28.6396 -38.6699 -64.5898 -58 -107.87 -58\n+c-10.6602 0 -22.2998 3.33008 -34.96 10c-8.66016 5.33008 -18.3096 8 -28.9697 8s-20.2998 -2.66992 -28.9707 -8c-12.6592 -6.66992 -24.2998 -10 -34.96 -10c-43.2793 0 -79.2295 19.3301 -107.869 58c-23.9707 32 -39.9502 71.6699 -47.9404 119\n+c-5.32031 28.6699 -5.66992 57.3301 -1 86c5.32031 31.3301 15.3096 57.3301 29.96 78c16.6504 23.3301 37.9502 37.3301 63.9199 42c15.9805 2.66992 37.9502 0.330078 65.9199 -7c23.9697 -6.66992 44.2803 -14.6699 60.9307 -24\n+c16.6494 9.33008 36.96 17.3301 60.9297 24c27.9795 7.33008 49.96 9.66992 65.9395 7zM295.91 360c-9.32031 -8.66992 -21.6504 -15 -36.96 -19c-10.6602 -3.33008 -22.2998 -5 -34.96 -5l-14.9805 1c-1.33008 9.33008 -1.33008 20 0 32\n+c2.66992 24 10.3203 42.3301 22.9707 55c9.31934 8.66992 21.6494 15 36.96 19c10.6592 3.33008 22.2998 5 34.96 5l14.9795 -1l1 -15c0 -12.6699 -1.66992 -24.3301 -4.99023 -35c-3.98926 -15.3301 -10.3096 -27.6699 -18.9795 -37z\" \u002F>\n+    \u003Cglyph glyph-name=\"atom\" unicode=\"&#xf5d2;\" horiz-adv-x=\"448\" \n+d=\"M413.03 192c40.1396 -54.9102 41.5195 -98.5996 25.1396 -128c-29.2197 -52.3398 -101.689 -43.5801 -116.33 -41.8799c-21.4697 -51.2197 -54.2002 -86.1201 -97.8398 -86.1201s-76.3701 34.9004 -97.8398 86.1201c-14.6504 -1.7002 -87.1201 -10.46 -116.33 41.8799\n+c-16.3701 29.3799 -14.9902 73.1104 25.1396 128c-40.1396 54.9102 -41.5195 98.5996 -25.1396 128c10.9004 19.5195 40.5996 50.6602 116.33 41.8799c21.4795 51.2305 54.2002 86.1201 97.8398 86.1201s76.3604 -34.8896 97.8398 -86.1201\n+c75.79 8.85059 105.42 -22.3604 116.33 -41.8799c16.3701 -29.3799 14.9902 -73.1104 -25.1396 -128zM63.3799 96c3.69043 -6.59961 19.0205 -11.8604 43.5801 -10.9697c-2.75977 13 -5.0498 26.3701 -6.75977 40.0801c-7.66992 6.29004 -14.9102 12.6494 -21.8701 19.1797\n+c-15.1396 -23.4902 -18.9805 -41.0801 -14.9502 -48.29zM100.2 258.88c1.39355 11.1816 4.43555 29.2002 6.79004 40.2197c-1.82031 0.0703125 -3.98047 0.370117 -5.69043 0.370117c-21.5303 0 -34.5098 -5.33008 -37.9199 -11.4697\n+c-4.01953 -7.20996 -0.179688 -24.7998 14.9502 -48.2998c6.96973 6.53027 14.21 12.8896 21.8701 19.1797zM224 384c-9.46973 0 -22.2002 -13.5195 -33.8604 -37.2598c11.1904 -3.7002 22.4404 -8 33.8604 -12.8604c11.4199 4.86035 22.6699 9.16016 33.8604 12.8604\n+c-11.6602 23.7402 -24.3906 37.2598 -33.8604 37.2598zM224 0c9.46973 0 22.2002 13.5195 33.8604 37.2598c-11.1904 3.7002 -22.4404 8 -33.8604 12.8604c-11.4199 -4.86035 -22.6699 -9.16016 -33.8604 -12.8604c11.6602 -23.7402 24.3906 -37.2598 33.8604 -37.2598z\n+M286.5 157.33c1.99023 27.7998 1.98047 41.5498 0 69.3301c-26.6396 19.04 -46.1104 29.3096 -62.5 37.4795c-16.3701 -8.15918 -35.8301 -18.4297 -62.5 -37.4795c-1.99023 -27.79 -1.99023 -41.54 0 -69.3301c26.7002 -19.0703 46.1504 -29.3398 62.5 -37.4805\n+c16.3604 8.15039 35.7998 18.4004 62.5 37.4805zM384.62 96c4.01953 7.20996 0.179688 24.7998 -14.9502 48.29c-6.96973 -6.53027 -14.21 -12.8896 -21.8701 -19.1797c-1.70996 -13.6904 -4 -27.0605 -6.75977 -40.0605c24.5801 -0.870117 39.9102 4.33008 43.5801 10.9502\n+zM369.67 239.71c15.1299 23.4902 18.9697 41.0801 14.9502 48.2998c-3.41016 6.12988 -16.4004 11.4707 -37.9199 11.4707c-1.71973 0 -3.87012 -0.300781 -5.69043 -0.370117c2.35254 -11.0205 5.39453 -29.0391 6.79004 -40.2207\n+c7.66992 -6.29004 14.9102 -12.6494 21.8701 -19.1797zM224 224c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"bone\" unicode=\"&#xf5d7;\" horiz-adv-x=\"640\" \n+d=\"M598.88 203.44c-9.42969 -4.70996 -9.42969 -18.1709 -0.00976562 -22.8809c25.2002 -12.5996 41.1201 -38.3496 41.1201 -66.5293v-7.64062c0 -41.0898 -33.2998 -74.3896 -74.3799 -74.3896c-32.0107 0 -60.4404 20.4902 -70.5703 50.8604\n+c-6.53027 19.5996 -10.7305 45.1396 -38.1104 45.1396h-273.87c-26.5098 0 -30.4297 -22.1104 -38.1094 -45.1396c-10.1299 -30.3701 -38.5498 -50.8604 -70.5703 -50.8604c-41.0801 0 -74.3799 33.2998 -74.3799 74.3896v7.64062\n+c0 28.1699 15.9199 53.9297 41.1201 66.5293c9.42969 4.70996 9.42969 18.1709 0 22.8809c-25.2002 12.5996 -41.1201 38.3594 -41.1201 66.5293v7.64062c0 41.0898 33.2998 74.3896 74.3896 74.3896c32.0107 0 60.4404 -20.4902 70.5605 -50.8604\n+c6.53027 -19.5996 10.7295 -45.1396 38.1094 -45.1396h273.87c26.5107 0 30.4307 22.1104 38.1104 45.1396c10.1299 30.3701 38.5498 50.8604 70.5703 50.8604c41.0898 0 74.3896 -33.2998 74.3896 -74.3896v-7.64062c0 -28.1699 -15.9199 -53.9297 -41.1201 -66.5293z\" \u002F>\n+    \u003Cglyph glyph-name=\"book-reader\" unicode=\"&#xf5da;\" \n+d=\"M352 352c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96s42.9805 96 96 96s96 -42.9805 96 -96zM233.59 206.9c4.10059 -2.51074 6.41016 -6.79004 6.41992 -11.46v-245.99c0 -10.1602 -11.1094 -16.5898 -20.4795 -11.8701\n+c-61.0498 30.75 -149.38 39.1396 -193.04 41.4297c-14.9004 0.770508 -26.4902 12.7207 -26.4902 27.0498v222.801c0 15.6299 13.5498 28.0098 29.7998 27.0898c48.3604 -2.75 144.46 -12.7305 203.79 -49.0498zM482.2 255.95\n+c16.25 0.919922 29.7998 -11.46 29.8096 -27.0898v-222.82c0 -14.3301 -11.5898 -26.2803 -26.4902 -27.0596c-43.6494 -2.29004 -131.93 -10.6807 -192.97 -41.4004c-9.39941 -4.73047 -20.54 1.70996 -20.54 11.9004v245.789c0 4.6709 2.31055 9.12012 6.41016 11.6309\n+c59.3203 36.3193 155.43 46.3096 203.78 49.0498z\" \u002F>\n+    \u003Cglyph glyph-name=\"brain\" unicode=\"&#xf5dc;\" horiz-adv-x=\"576\" \n+d=\"M208 448c35.2998 0 64 -28.7002 64 -64v-376c0 -39.7998 -32.2002 -72 -72 -72c-31.7998 0 -58.4004 20.7002 -68 49.2002c-3.90039 -0.700195 -7.90039 -1.2002 -12 -1.2002c-39.7998 0 -72 32.2002 -72 72c0 4.7998 0.5 9.5 1.40039 14.0996\n+c-29 12 -49.4004 40.6006 -49.4004 73.9004c0 29.7002 16.2998 55.2998 40.2998 69.0996c-5.09961 10.6006 -8.2998 22.3008 -8.2998 34.9004c0 33.4004 20.5 62 49.7002 74c-1.10059 4.5 -1.7002 9.2002 -1.7002 14c0 35.2998 28.7002 64 64 64\n+c0.799805 0 1.40039 -0.200195 2.2002 -0.200195c7.09961 27.7002 31.8994 48.2002 61.7998 48.2002zM576 144c0 -33.2998 -20.4004 -61.9004 -49.4004 -73.9004c0.900391 -4.59961 1.40039 -9.2998 1.40039 -14.0996c0 -39.7998 -32.2002 -72 -72 -72\n+c-4.09961 0 -8.09961 0.5 -12 1.2002c-9.59961 -28.5 -36.2002 -49.2002 -68 -49.2002c-39.7998 0 -72 32.2002 -72 72v376c0 35.4004 28.7002 64 64 64c29.9004 0 54.7002 -20.5 61.7998 -48.2002c0.700195 0 1.40039 0.200195 2.2002 0.200195\n+c35.2998 0 64 -28.7002 64 -64c0 -4.7998 -0.700195 -9.5 -1.7002 -14c29.2002 -12 49.7002 -40.5996 49.7002 -74c0 -12.5996 -3.09961 -24.2998 -8.2998 -34.9004c24 -13.7998 40.2998 -39.3994 40.2998 -69.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"car-alt\" unicode=\"&#xf5de;\" horiz-adv-x=\"480\" \n+d=\"M438.66 235.67c24.1201 -9.16992 41.3398 -32.3301 41.3398 -59.6699v-48c0 -16.1299 -6.16016 -30.6797 -16 -41.9297v-54.0703c0 -17.6699 -14.3301 -32 -32 -32h-32c-17.6699 0 -32 14.3301 -32 32v32h-256v-32c0 -17.6699 -14.3301 -32 -32 -32h-32\n+c-17.6699 0 -32 14.3301 -32 32v54.0703c-9.83984 11.2598 -16 25.8096 -16 41.9297v48c0 27.3398 17.2197 50.5 41.3398 59.6699l11.2402 28.0996l19.9297 49.8301c17.1104 42.7705 57.9307 70.4004 103.99 70.4004h127c46.0703 0 86.8799 -27.6299 103.99 -70.4004\n+l19.9297 -49.8301zM131.93 289.83l-19.9297 -49.8301h256l-19.9297 49.8301c-7.29004 18.2197 -24.9404 30.1699 -44.5703 30.1699h-127c-19.6299 0 -37.2803 -11.9502 -44.5703 -30.1699zM80 128.2c19.2002 0 48 -3.19043 48 15.9502\n+c0 19.1396 -28.7998 47.8496 -48 47.8496s-32 -12.7598 -32 -31.9004c0 -19.1396 12.7998 -31.8994 32 -31.8994zM400 128.2c19.2002 0 32 12.7598 32 31.8994c0 19.1406 -12.7998 31.9004 -32 31.9004s-48 -28.71 -48 -47.8496c0 -19.1406 28.7998 -15.9502 48 -15.9502z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"car-battery\" unicode=\"&#xf5df;\" \n+d=\"M480 320c17.6699 0 32 -14.3301 32 -32v-256c0 -17.6699 -14.3301 -32 -32 -32h-448c-17.6699 0 -32 14.3301 -32 32v256c0 17.6699 14.3301 32 32 32h32v48c0 8.83984 7.16016 16 16 16h96c8.83984 0 16 -7.16016 16 -16v-48h128v48c0 8.83984 7.16016 16 16 16h96\n+c8.83984 0 16 -7.16016 16 -16v-48h32zM192 184v16c0 4.41992 -3.58008 8 -8 8h-112c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h112c4.41992 0 8 3.58008 8 8zM448 184v16c0 4.41992 -3.58008 8 -8 8h-40v40c0 4.41992 -3.58008 8 -8 8h-16\n+c-4.41992 0 -8 -3.58008 -8 -8v-40h-40c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h40v-40c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v40h40c4.41992 0 8 3.58008 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"car-crash\" unicode=\"&#xf5e1;\" horiz-adv-x=\"640\" \n+d=\"M143.25 227.19l-12.4199 -46.3701c-3.00977 -11.25 -3.62988 -22.8906 -2.41016 -34.3906l-35.2002 -28.9795c-6.56934 -5.41016 -16.3096 0.429688 -14.6201 8.76953l15.4404 76.6807c1.05957 5.25977 -2.66016 10.2793 -8 10.79l-77.8604 7.5498\n+c-8.46973 0.819336 -11.2295 11.8301 -4.13965 16.54l65.1504 43.2998c4.45996 2.96973 5.37988 9.15039 1.97949 13.29l-49.71 60.4102c-5.41016 6.56934 0.429688 16.2998 8.78027 14.6201l76.6797 -15.4404c5.25977 -1.05957 10.2803 2.66016 10.7998 8l7.5498 77.8604\n+c0.820312 8.47949 11.8301 11.2295 16.5508 4.13965l43.2998 -65.1396c2.96973 -4.45996 9.14941 -5.37988 13.29 -1.98047l60.3994 49.71c6.57031 5.41016 16.3008 -0.429688 14.6201 -8.76953l-11.3301 -56.1602c-2.70996 -3.0498 -5.42969 -6.08984 -7.90918 -9.40039\n+l-32.1504 -42.9697l-10.71 -14.3203c-32.7305 -8.75977 -59.1797 -34.5293 -68.0801 -67.7393zM637.82 94.6797l-12.4199 -46.3594c-3.13086 -11.6807 -9.38086 -21.6104 -17.5508 -29.3604c-2.25488 -2.13574 -6.17969 -5.27148 -8.75977 -7l-13.9902 -52.2295\n+c-1.13965 -4.27051 -3.09961 -8.10059 -5.64941 -11.3809c-7.66992 -9.83984 -20.7402 -14.6797 -33.54 -11.25l-30.9102 8.28027c-17.0703 4.57031 -27.2002 22.1201 -22.6299 39.1904l8.28027 30.9102l-247.28 66.2598l-8.28027 -30.9102\n+c-4.57031 -17.0703 -22.1201 -27.2002 -39.1895 -22.6299l-30.9102 8.28027c-12.7998 3.42969 -21.7002 14.1592 -23.4199 26.5098c-0.570312 4.12012 -0.350586 8.41992 0.790039 12.6797l13.9893 52.2305c-1.37207 2.78809 -3.2041 7.46973 -4.08984 10.4492\n+c-3.2002 10.79 -3.64941 22.5205 -0.519531 34.2002l12.4199 46.3701c5.30957 19.7998 19.3594 34.8301 36.8896 42.21c4.9082 2.06836 13.1914 4.18262 18.4902 4.71973l18.1299 24.2305l32.1504 42.9697c3.44922 4.61035 7.18945 8.90039 11.1992 12.8398\n+c8 7.89062 17.0303 14.4404 26.7402 19.5107c4.86035 2.54004 9.89062 4.70996 15.0498 6.48926c10.3301 3.58008 21.1904 5.62988 32.2402 6.04004s22.3105 -0.819336 33.4307 -3.7998l122.68 -32.8701c11.1201 -2.97949 21.4795 -7.54004 30.8496 -13.4297\n+c11.7236 -7.36133 27.2646 -22.8174 34.6904 -34.5c8.81934 -13.8799 14.6396 -29.8398 16.6797 -46.9902l6.36035 -53.29l3.58984 -30.0498c8.79297 -6.34863 18.9805 -19.7568 22.7402 -29.9297c4.38965 -11.8799 5.29004 -25.1904 1.75 -38.3906zM255.58 213.66\n+c-18.5498 4.96973 -34.21 -4.04004 -39.1699 -22.5303s4.10938 -34.1201 22.6494 -39.0898c18.5508 -4.96973 45.54 -15.5098 50.4902 2.97949c4.95996 18.4902 -15.4297 53.6709 -33.9697 58.6406zM546.19 185.49l-6.36035 53.29\n+c-0.580078 4.87012 -1.88965 9.5293 -3.82031 13.8594c-5.7998 12.9902 -17.2002 23.0107 -31.4199 26.8203l-122.68 32.8701c-3.36914 0.902344 -8.93457 1.63477 -12.4229 1.63477c-13.2676 0 -30.4883 -8.62207 -38.4375 -19.2451l-32.1494 -42.9697l172 -46.0801z\n+M564.68 130.84c-18.5498 4.96973 -53.7998 -15.3096 -58.75 -33.79c-4.94922 -18.4902 23.6904 -22.8594 42.2402 -27.8301c18.5498 -4.96973 34.21 4.04004 39.1699 22.5303c4.9502 18.4805 -4.10938 34.1201 -22.6602 39.0898z\" \u002F>\n+    \u003Cglyph glyph-name=\"car-side\" unicode=\"&#xf5e4;\" horiz-adv-x=\"640\" \n+d=\"M544 256c53.0195 0 96 -42.9805 96 -96v-80c0 -8.83984 -7.16016 -16 -16 -16h-48c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-128c0 -53.0195 -42.9805 -96 -96 -96s-96 42.9805 -96 96h-48c-8.83984 0 -16 7.16016 -16 16v112\n+c0 29.79 20.4404 54.5996 48 61.7402l47.9102 122.029c9.71973 24.3008 33.25 40.2305 59.4199 40.2305h213.91c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l108.78 -135.98h16zM160 16c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48\n+s21.5303 -48 48 -48zM232 256v96h-76.6699l-38.4004 -96h115.07zM280 256h166.04l-76.7998 96h-89.2402v-96zM480 16c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48s21.5303 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"charging-station\" unicode=\"&#xf5e7;\" horiz-adv-x=\"576\" \n+d=\"M336 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-320c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h320zM544 320h16c8.83984 0 16 -7.16016 16 -16v-32c0 -35.7598 -23.6201 -65.6904 -56 -75.9297v-120.07\n+c0 -44.4102 -38.29 -80.0498 -83.5898 -75.6201c-39.4902 3.85059 -68.4102 39.3398 -68.4102 79.0098v24.6104c0 22.0898 -17.9102 40 -40 40h-8v-112h-288v352c0 35.3496 28.6504 64 64 64h160c35.3496 0 64 -28.6504 64 -64v-192h8c48.5996 0 88 -39.4004 88 -88v-28\n+c0 -16.9902 15.2197 -30.5 32.7402 -27.6104c13.7598 2.27051 23.2598 15.2402 23.2598 29.1904v118.49c-32.3799 10.2393 -56 40.1699 -56 75.9297v32c0 8.83984 7.16016 16 16 16h16v48c0 8.83984 7.16016 16 16 16s16 -7.16016 16 -16v-48h32v48\n+c0 8.83984 7.16016 16 16 16s16 -7.16016 16 -16v-48zM260.09 272.24c4.62012 6.97949 -1.14941 15.7598 -10.3896 15.7598h-57.7002l11.5996 50.79c2.02051 6.66992 -3.71973 13.21 -11.5996 13.21h-68c-6.01953 0 -11.0996 -3.90039 -11.8896 -9.11035l-16 -107\n+c-0.959961 -6.2998 4.63965 -11.8896 11.8896 -11.8896h59.3496l-23.0195 -83.0801c-1.7998 -6.63965 4 -12.9199 11.6699 -12.9199c4.17969 0 8.19043 1.91016 10.3896 5.24023z\" \u002F>\n+    \u003Cglyph glyph-name=\"directions\" unicode=\"&#xf5eb;\" \n+d=\"M502.61 214.68c12.5195 -12.5293 12.5195 -32.8301 0 -45.3594l-223.931 -223.931c-12.5293 -12.5293 -32.8398 -12.5293 -45.3594 0l-223.931 223.931c-12.5195 12.5293 -12.5195 32.8301 0 45.3594l223.931 223.931c12.5293 12.5195 32.8398 12.5195 45.3594 0z\n+M401.63 202.12c3.42969 3.16992 3.42969 8.58984 0 11.7598l-84.21 77.7305c-5.12988 4.72949 -13.4297 1.08984 -13.4297 -5.87988v-53.7305h-112c-17.6699 0 -32 -14.3301 -32 -32v-80c0 -4.41992 3.58008 -8 8 -8h32c4.41992 0 8 3.58008 8 8v64h96v-53.7305\n+c0 -6.97949 8.30957 -10.6094 13.4297 -5.87988z\" \u002F>\n+    \u003Cglyph glyph-name=\"draw-polygon\" unicode=\"&#xf5ee;\" horiz-adv-x=\"448\" \n+d=\"M384 96c35.3496 0 64 -28.6504 63.9902 -64c0 -35.3496 -28.6504 -64 -64 -64c-23.6299 0 -44.0303 12.9502 -55.1201 32h-209.75c-11.0801 -19.0498 -31.4902 -32 -55.1201 -32c-35.3496 0 -64 28.6504 -64 64c0 23.6299 12.9502 44.04 32 55.1299v209.75\n+c-19.0498 11.0801 -32 31.4902 -32 55.1201c0 35.3496 28.6504 64 64 64c23.6299 0 44.04 -12.9502 55.1201 -32h209.76c11.0801 19.0498 31.4902 32 55.1201 32c35.3496 0 64 -28.6504 64 -64s-28.6504 -64 -64 -64c-0.349609 0 -0.669922 0.0898438 -1.01953 0.0996094\n+l-39.2002 -65.3193c5.08008 -9.16992 8.21973 -19.5605 8.21973 -30.7803s-3.15039 -21.6104 -8.21973 -30.7803l39.2002 -65.3193c0.349609 0 0.669922 0.0996094 1.01953 0.0996094zM96 87.1201c8.07422 -4.68848 18.4316 -15.0459 23.1201 -23.1201h208.36\n+l-38.4609 64.0996c-0.349609 0 -0.669922 -0.0996094 -1.01953 -0.0996094c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64c0.349609 0 0.669922 -0.0898438 1.01953 -0.0996094l38.4609 64.0996h-208.36c-4.69043 -8.07227 -15.0479 -18.4297 -23.1201 -23.1201v-209.76z\n+M272 192c0 -8.82031 7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16zM400 352c0 8.82031 -7.17969 16 -16 16s-16 -7.17969 -16 -16s7.17969 -16 16 -16s16 7.17969 16 16zM64 368c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16\n+s16 7.17969 16 16s-7.17969 16 -16 16zM48 32c0 -8.82031 7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16zM384 16c8.82031 0 16 7.17969 16 16s-7.17969 16 -16 16s-16 -7.17969 -16 -16s7.17969 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"laptop-code\" unicode=\"&#xf5fc;\" horiz-adv-x=\"640\" \n+d=\"M255.03 186.35l-58.3506 58.3408c-6.25 6.25 -6.25 16.3799 0 22.6299l58.3398 58.3398c6.25 6.25 16.3809 6.25 22.6309 0l11.3096 -11.3105c6.25 -6.25 6.25 -16.3799 0 -22.6299l-35.71 -35.7197l35.7197 -35.71c6.25 -6.25 6.25 -16.3799 0 -22.6299\n+l-11.3096 -11.3105c-6.25 -6.25 -16.3799 -6.25 -22.6299 0zM351.04 197.65c-6.25 6.25 -6.25 16.3799 0 22.6299l35.71 35.7197l-35.71 35.71c-6.25 6.25 -6.25 16.3799 0 22.6299l11.3096 11.3105c6.25 6.25 16.3809 6.25 22.6309 0l58.3398 -58.3408\n+c6.25 -6.25 6.25 -16.3799 0 -22.6299l-58.3398 -58.3398c-6.25 -6.25 -16.3809 -6.25 -22.6309 0zM624 32c8.7998 0 16 -7.2002 16 -16v-16c0 -35.2002 -28.7998 -64 -64 -64h-512c-35.2002 0 -64 28.7998 -64 64v16c0 8.7998 7.2002 16 16 16h239.23\n+c-0.25 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46zM576 400v-336h-512v336c0 26.4004 21.5996 48 48 48h416c26.4004 0 48 -21.5996 48 -48zM512 128v256h-384v-256h384z\" \u002F>\n+    \u003Cglyph glyph-name=\"layer-group\" unicode=\"&#xf5fd;\" \n+d=\"M12.4102 299.98c-16.5498 7.50977 -16.5498 32.5293 0 40.0391l232.95 105.671c2.79883 1.2793 7.56738 2.31738 10.6445 2.31738s7.84668 -1.03809 10.6455 -2.31738l232.93 -105.681c16.5498 -7.50977 16.5498 -32.5195 0 -40.0293l-232.94 -105.671\n+c-6.7998 -3.08984 -14.4893 -3.08984 -21.29 0zM499.59 211.7c16.5498 -7.5 16.5498 -32.5 0 -40l-232.95 -105.59c-6.7998 -3.08008 -14.4893 -3.08008 -21.29 0l-232.939 105.59c-16.5498 7.5 -16.5498 32.5 0 40l58.0996 26.3301l161.63 -73.2705\n+c7.57031 -3.42969 15.5908 -5.16992 23.8604 -5.16992s16.2998 1.74023 23.8604 5.16992l161.64 73.2705zM499.59 83.9004c16.5498 -7.5 16.5498 -32.5 0 -40l-232.95 -105.591c-6.7998 -3.0791 -14.4893 -3.0791 -21.29 0l-232.939 105.591\n+c-16.5498 7.5 -16.5498 32.5 0 40l57.8799 26.2295l161.85 -73.3701c7.57031 -3.42969 15.5908 -5.16992 23.8604 -5.16992s16.2998 1.74023 23.8604 5.16992l161.859 73.3701z\" \u002F>\n+    \u003Cglyph glyph-name=\"microscope\" unicode=\"&#xf610;\" \n+d=\"M160 128c-17.6699 0 -32 14.3301 -32 32v224c0 17.6699 14.3301 32 32 32v16c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16v-16c17.6699 0 32 -14.3301 32 -32v-224c0 -17.6699 -14.3301 -32 -32 -32h-12v-16c0 -8.83984 -7.16016 -16 -16 -16h-40\n+c-8.83984 0 -16 7.16016 -16 16v16h-12zM464 0c26.5098 0 48 -21.4902 48 -48c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16c0 26.5098 21.4902 48 48 48h272c70.5801 0 128 57.4199 128 128s-57.4199 128 -128 128v64\n+c105.88 0 192 -86.1201 192 -192c0 -49.2002 -18.7598 -93.9902 -49.29 -128h1.29004zM104 32c-4.41992 0 -8 3.58008 -8 8v16c0 4.41992 3.58008 8 8 8h208c4.41992 0 8 -3.58008 8 -8v-16c0 -4.41992 -3.58008 -8 -8 -8h-208z\" \u002F>\n+    \u003Cglyph glyph-name=\"oil-can\" unicode=\"&#xf613;\" horiz-adv-x=\"640\" \n+d=\"M629.8 287.69c5.11035 1.45996 10.2002 -2.38086 10.1904 -7.69043v-18.0801c0 -2.12012 -0.839844 -4.16016 -2.33984 -5.66016l-212.261 -214.75c-6.00977 -6.08984 -14.21 -9.50977 -22.7598 -9.50977h-274.63c-17.6699 0 -32 14.3301 -32 32v46.54l-69.7197 12.6904\n+c-15.2207 2.75977 -26.2803 16.0195 -26.2803 31.4795v94.9502c0 17.9795 14.6699 32.0098 31.9297 32.0098c1.61133 0 4.20605 -0.237305 5.79004 -0.530273l138.28 -25.1396h56v48h-56c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h160\n+c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-56v-48h56.8896c8.33984 -0.00292969 21.1611 -3.03125 28.6201 -6.75977l50.4902 -25.2402zM96 159.33v62.4297l-48 8.73047v-62.4307zM549.33 74.6699c0 23.5605 42.6699 85.3301 42.6699 85.3301\n+s42.6699 -61.7598 42.6699 -85.3301s-19.0996 -42.6699 -42.6699 -42.6699s-42.6699 19.1104 -42.6699 42.6699z\" \u002F>\n+    \u003Cglyph glyph-name=\"poop\" unicode=\"&#xf619;\" \n+d=\"M451.36 78.8604c34.3301 -5.48047 60.6396 -34.9805 60.6396 -70.8604c0 -39.7598 -32.2402 -72 -72 -72h-368c-39.7598 0 -72 32.2402 -72 72c0 35.8799 26.3096 65.3799 60.6396 70.8604c-17.2998 13.1494 -28.6396 33.7295 -28.6396 57.1396\n+c0 39.7695 32.2402 72 72 72h14.0703c-13.4199 11.7305 -22.0703 28.7803 -22.0703 48c0 35.3496 28.6504 64 64 64h16c44.1797 0 80 35.8203 80 80c0 17.3799 -5.69043 33.3604 -15.1104 46.4805c4.95996 0.779297 9.94043 1.51953 15.1104 1.51953\n+c53.0195 0 96 -42.9805 96 -96c0 -11.2803 -2.30957 -21.9502 -5.87988 -32h5.87988c35.3496 0 64 -28.6504 64 -64c0 -19.2197 -8.65039 -36.2695 -22.0703 -48h14.0703c39.7598 0 72 -32.2305 72 -72c0 -23.4102 -11.3398 -43.9902 -28.6396 -57.1396z\" \u002F>\n+    \u003Cglyph glyph-name=\"shapes\" unicode=\"&#xf61f;\" \n+d=\"M512 128v-160c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v160c0 17.6699 14.3301 32 32 32h160c17.6699 0 32 -14.3301 32 -32zM128 192c70.6904 0 128 -57.3096 128 -128s-57.3096 -128 -128 -128s-128 57.3096 -128 128s57.3096 128 128 128\n+zM479.03 224h-190.061c-25.3398 0 -41.1797 26.6699 -28.5098 48l95.0303 160c12.6699 21.3301 44.3496 21.3301 57.0195 0l95.0303 -160c12.6699 -21.3301 -3.16992 -48 -28.5098 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-of-life\" unicode=\"&#xf621;\" horiz-adv-x=\"480\" \n+d=\"M471.99 113.57c7.66016 -4.41992 10.2793 -14.2002 5.85938 -21.8506l-32.0195 -55.4297c-4.41992 -7.66016 -14.21 -10.2803 -21.8701 -5.86035l-135.93 78.4307v-156.86c0 -8.83984 -7.16992 -16 -16.0107 -16h-64.0391c-8.84082 0 -16.0107 7.16016 -16.0107 16\n+v156.85l-135.93 -78.4297c-7.66016 -4.41016 -17.4502 -1.79004 -21.8701 5.86035l-32.0195 55.4297c-4.41992 7.65039 -1.80078 17.4404 5.85938 21.8604l135.931 78.4297l-135.931 78.4297c-7.66016 4.41992 -10.2793 14.21 -5.85938 21.8604l32.0195 55.4199\n+c4.41992 7.65039 14.21 10.2803 21.8701 5.86035l135.93 -78.4307v156.86c0 8.83984 7.16992 16 16.0107 16h64.0391c8.84082 0 16.0107 -7.16016 16.0107 -16v-156.85l135.93 78.4297c7.66016 4.41992 17.4502 1.79004 21.8701 -5.86035l32.0195 -55.4297\n+c4.41992 -7.66016 1.80078 -17.4404 -5.85938 -21.8604l-135.931 -78.4297z\" \u002F>\n+    \u003Cglyph glyph-name=\"teeth\" unicode=\"&#xf62e;\" horiz-adv-x=\"640\" \n+d=\"M544 448c53.0195 0 96 -42.9805 96 -96v-320c0 -53.0195 -42.9805 -96 -96 -96h-448c-53.0195 0 -96 42.9805 -96 96v320c0 53.0195 42.9805 96 96 96h448zM160 80v64c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-64\n+c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM160 208v64c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-64c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16zM304 88v56c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-56\n+c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM304 208v88c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-88c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM448 88v56c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-56\n+c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM448 208v88c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-88c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM576 80v64c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-64\n+c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM576 208v64c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-64c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"teeth-open\" unicode=\"&#xf62f;\" horiz-adv-x=\"640\" \n+d=\"M544 448c53.0195 0 96 -42.9805 96 -96v-64c0 -35.3496 -28.6602 -64 -64 -64h-512c-35.3398 0 -64 28.6504 -64 64v64c0 53.0195 42.9805 96 96 96h448zM160 272v32c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-32c0 -8.83984 7.16016 -16 16 -16h64\n+c8.83984 0 16 7.16016 16 16zM304 272v56c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-56c0 -8.83984 7.16016 -16 16 -16h80c8.83984 0 16 7.16016 16 16zM448 272v56c0 30.9297 -25.0703 56 -56 56s-56 -25.0703 -56 -56v-56c0 -8.83984 7.16016 -16 16 -16h80\n+c8.83984 0 16 7.16016 16 16zM576 272v32c0 26.5098 -21.4902 48 -48 48s-48 -21.4902 -48 -48v-32c0 -8.83984 7.16016 -16 16 -16h64c8.83984 0 16 7.16016 16 16zM576 128c35.3398 0 64 -28.6504 64 -64v-32c0 -53.0195 -42.9805 -96 -96 -96h-448\n+c-53.0195 0 -96 42.9805 -96 96v32c0 35.3496 28.6602 64 64 64h512zM160 48v32c0 8.83984 -7.16016 16 -16 16h-64c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48zM304 56v24c0 8.83984 -7.16016 16 -16 16h-80\n+c-8.83984 0 -16 -7.16016 -16 -16v-24c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM448 56v24c0 8.83984 -7.16016 16 -16 16h-80c-8.83984 0 -16 -7.16016 -16 -16v-24c0 -30.9297 25.0703 -56 56 -56s56 25.0703 56 56zM576 48v32c0 8.83984 -7.16016 16 -16 16h-64\n+c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -26.5098 21.4902 -48 48 -48s48 21.4902 48 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"theater-masks\" unicode=\"&#xf630;\" horiz-adv-x=\"640\" \n+d=\"M206.86 202.85l-7.62988 -43.1797c-21.0908 -7.21973 -38.5 -18.2002 -49.9004 -30.9199c-2.41992 32.9004 21.6504 63.6504 57.5303 74.0996zM95.8096 153c5.87012 -33.1699 64.3203 -71.8096 111.931 -84.79c10.5596 -27.0996 25.9795 -50.5 39.5 -67.5801\n+c-3.25977 -0.339844 -6.41992 -0.799805 -10.0098 -0.799805c-68.1201 0 -190.221 61.5596 -204.45 142.08l-31.7305 179.51c-4.96973 28.0996 7.98047 56.0996 32.1504 69.5205c67.8193 37.6396 143.46 57.0596 220.12 57.0596c23.9199 0 47.9492 -1.88965 71.8594 -5.7002\n+c17.29 -2.76953 31.7803 -13.0498 41.7705 -27c-19.1299 -0.769531 -38.29 -2.2998 -57.1807 -5.31934c-19.8594 -3.1709 -37.6396 -12.5303 -51.5898 -26c-1.62012 0.0195312 -3.23926 0.189453 -4.84961 0.189453c-65.8896 0 -131.25 -16.9502 -189.01 -49.0098\n+c0.0400391 -0.0302734 -0.530273 -1.03027 -0.240234 -2.65039zM193.36 290.46c3.83984 -21.7002 -10.6904 -42.4004 -32.4404 -46.2197c-21.7598 -3.82031 -42.5 10.6699 -46.3398 32.3701c-0.730469 4.12012 -0.610352 8.15918 -0.0898438 12.0996\n+c10.8096 -5.57031 24.8301 -7.75 39.4795 -5.16992c14.6504 2.57031 27.0703 9.41016 35.3203 18.3203c1.83984 -3.53027 3.33984 -7.28027 4.07031 -11.4004zM606.8 327.1c24.1699 -13.4092 37.1201 -41.4092 32.1504 -69.5195l-31.7305 -179.51\n+c-15.3896 -87.0508 -156.83 -151.931 -219.859 -140.84c-63.0303 11.0791 -173.7 120.3 -158.311 207.35l31.7305 179.51c4.95996 28.1006 26.7295 50 54.04 54.3604c100.55 16.0596 203 -1.96973 291.979 -51.3506zM333.56 230.3\n+c-0.729492 -4.12012 -0.609375 -8.16016 -0.0791016 -12.1094c10.8096 5.56934 24.8291 7.75 39.4795 5.16992c14.6504 -2.57031 27.0703 -9.41016 35.3203 -18.3203c1.83984 3.53027 3.33984 7.28027 4.06934 11.4004c3.83008 21.6992 -10.6895 42.3896 -32.4492 46.2197\n+c-21.7607 3.83008 -42.5 -10.6602 -46.3408 -32.3604zM404.03 31.54c55.6699 -9.79004 108.2 23.7803 122.38 75.7197c-28.1104 -16.9697 -68.6504 -24.21 -111.93 -16.5996c-43.2803 7.60938 -78.8906 28.2402 -99.4902 53.7803\n+c-4.48047 -53.6309 33.3594 -103.11 89.04 -112.9zM534.33 182.88c1.83984 3.52051 3.33984 7.27051 4.07031 11.4004c3.83008 21.7002 -10.7002 42.3896 -32.4502 46.2197c-21.7598 3.82031 -42.5 -10.6699 -46.3398 -32.3701\n+c-0.730469 -4.12012 -0.610352 -8.16016 -0.0908203 -12.0996c10.8105 5.56934 24.8301 7.75 39.4805 5.16992c14.6504 -2.57031 27.0801 -9.41016 35.3301 -18.3203z\" \u002F>\n+    \u003Cglyph glyph-name=\"traffic-light\" unicode=\"&#xf637;\" horiz-adv-x=\"384\" \n+d=\"M384 256c0 -41.7402 -26.7998 -76.9004 -64 -90.1201v-37.8799h64c0 -42.8398 -28.25 -78.6904 -66.9902 -91.0498c-12.4297 -57.6699 -63.6094 -100.95 -125.01 -100.95s-112.58 43.2803 -125.01 100.95c-38.7402 12.3594 -66.9902 48.21 -66.9902 91.0498h64v37.8799\n+c-37.2002 13.2197 -64 48.3799 -64 90.1201h64v37.8799c-37.2002 13.2197 -64 48.3799 -64 90.1201h64v32c0 17.6699 14.3301 32 32 32h192c17.6699 0 32 -14.3301 32 -32v-32h64c0 -41.7402 -26.7998 -76.9004 -64 -90.1201v-37.8799h64zM192 32\n+c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM192 160c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM192 288c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48\n+s-48 -21.4902 -48 -48s21.4902 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck-monster\" unicode=\"&#xf63b;\" horiz-adv-x=\"640\" \n+d=\"M624 224c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-16.71c-29.21 38.6504 -75.0996 64 -127.28 64c-52.1797 0 -98.0693 -25.3496 -127.279 -64h-65.4502c-29.21 38.6504 -75.1006 64 -127.28 64s-98.0703 -25.3496 -127.28 -64h-16.7197\n+c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16v80c0 8.83984 7.16016 16 16 16h176v96c0 17.6699 14.3301 32 32 32h113.24c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l83.1807 -103.98h73.5996c17.6699 0 32 -14.3301 32 -32v-64h16z\n+M288 320h132.44l-51.2002 64h-81.2402v-64zM592 96c8.83984 0 16 -7.16016 16.0195 -16v-32c0 -8.83984 -7.15918 -16 -16 -16h-5.19922c-1.79688 -6.01074 -5.67188 -15.3691 -8.65039 -20.8896l3.66992 -3.66992c6.25 -6.25 6.25 -16.3809 0 -22.6309l-22.6299 -22.6299\n+c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-3.66992 3.66992c-6.62012 -3.58008 -13.5703 -6.44922 -20.9004 -8.64941v-5.2002c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v5.2002c-7.33008 2.2002 -14.29 5.08008 -20.8994 8.64941\n+l-3.66992 -3.66992c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309l3.66992 3.66992c-3.58008 6.60938 -6.44922 13.5596 -8.64941 20.8896h-5.2002c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h5.2002\n+c1.7959 6.01074 5.6709 15.3691 8.64941 20.8896l-3.66992 3.66992c-6.25 6.25 -6.25 16.3809 0 22.6309l22.6299 22.6299c6.25 6.25 16.3809 6.25 22.6309 0l3.66992 -3.66992c6.60938 3.58008 13.5596 6.44922 20.8896 8.64941v5.2002c0 8.83984 7.16016 16 16 16h32\n+c8.83984 0 16 -7.16016 16 -16v-5.2002c6.01074 -1.7959 15.3691 -5.6709 20.8896 -8.64941l3.66992 3.66992c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309l-3.66992 -3.66992\n+c3.58008 -6.60938 6.44922 -13.5596 8.64941 -20.8896h5.2002zM480 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48s21.4902 -48 48 -48zM272 96c8.83984 0 16 -7.16016 16.0195 -15.9902v-32c0 -8.83984 -7.15918 -16 -16 -16h-5.19922\n+c-1.79688 -6.00977 -5.67188 -15.3691 -8.65039 -20.8896l3.66992 -3.66992c6.25 -6.25 6.25 -16.3799 0 -22.6299l-22.6299 -22.6299c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-3.66992 3.66992c-6.62012 -3.58008 -13.5703 -6.4502 -20.9004 -8.65039v-5.2002\n+c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v5.2002c-7.33008 2.2002 -14.29 5.08008 -20.8994 8.65039l-3.66992 -3.66992c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-22.6299 22.6299c-6.25 6.25 -6.25 16.3799 0 22.6299l3.66992 3.66992\n+c-3.58008 6.61035 -6.44922 13.5596 -8.64941 20.8896h-5.2002c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h5.2002c1.7959 6.01074 5.6709 15.3691 8.64941 20.8906l-3.66992 3.66992c-6.25 6.25 -6.25 16.3799 0 22.6299l22.6299 22.6201\n+c6.25 6.25 16.3809 6.25 22.6309 0l3.66992 -3.66992c6.60938 3.58008 13.5596 6.44922 20.8896 8.64941v5.2002c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-5.2002c6.01074 -1.7959 15.3691 -5.6709 20.8896 -8.64941l3.66992 3.66992\n+c6.25 6.25 16.3809 6.25 22.6309 0l22.6299 -22.6299c6.25 -6.25 6.25 -16.3809 0 -22.6309l-3.66992 -3.66992c3.58008 -6.60938 6.44922 -13.5596 8.64941 -20.8896h5.2002zM160 16c26.5098 0 48 21.4902 48 48s-21.4902 48 -48 48s-48 -21.4902 -48 -48\n+s21.4902 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"truck-pickup\" unicode=\"&#xf63c;\" horiz-adv-x=\"640\" \n+d=\"M624 160c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-49.5996c0.759766 -5.26953 1.60938 -10.5195 1.60938 -16c0 -61.8604 -50.1396 -112 -112 -112c-61.8594 0 -112 50.1396 -112 112c0 5.48047 0.850586 10.7305 1.61035 16h-67.2305\n+c0.760742 -5.26953 1.61035 -10.5195 1.61035 -16c0 -61.8604 -50.1396 -112 -112 -112s-112 50.1396 -112 112c0 5.48047 0.849609 10.7305 1.61035 16h-49.6104c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h16v64c0 17.6699 14.3301 32 32 32h160v128\n+c0 17.6699 14.3301 32 32 32h113.24c16.9795 -0.00195312 39.3701 -10.7627 49.9795 -24.0195l108.78 -135.98h48c17.6699 0 32 -14.3301 32 -32v-64h16zM288 352v-96h158.04l-76.7998 96h-81.2402zM176 32c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48\n+s-48 -21.5303 -48 -48s21.5303 -48 48 -48zM464 32c26.4697 0 48 21.5303 48 48s-21.5303 48 -48 48s-48 -21.5303 -48 -48s21.5303 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"ad\" unicode=\"&#xf641;\" \n+d=\"M157.52 176l18.4805 53.2197l18.4805 -53.2197h-36.9609zM352 192c13.2305 0 24 -10.7695 24 -24s-10.7695 -24 -24 -24s-24 10.7695 -24 24s10.7695 24 24 24zM464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288\n+c0 26.5 21.5 48 48 48h416zM250.58 96c11 0 18.7197 10.8496 15.1104 21.25l-53.6904 154.62c-3.08789 8.90332 -13.2422 16.1299 -22.666 16.1299h-0.00390625h-26.6602h-0.00390625c-9.41992 0 -19.5742 -7.22168 -22.666 -16.1201l-53.7002 -154.63\n+c-3.60938 -10.4004 4.11035 -21.25 15.1201 -21.25h16.9404h0.00585938c6.28125 0 13.0527 4.81641 15.1143 10.75l7.37988 21.25h70.29l7.36914 -21.25c2.24023 -6.42969 8.31055 -10.75 15.1201 -10.75h16.9404zM424 112v160c0 8.83984 -7.16016 16 -16 16h-16\n+c-8.83984 0 -16 -7.16016 -16 -16v-36.4199c-7.54004 2.68945 -15.54 4.41992 -24 4.41992c-39.7002 0 -72 -32.2998 -72 -72s32.2998 -72 72 -72c9.92969 0 19.4004 2.01953 28.0195 5.67969c2.94043 -3.41016 7.13086 -5.67969 11.9805 -5.67969h16\n+c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"ankh\" unicode=\"&#xf644;\" horiz-adv-x=\"320\" \n+d=\"M296 192c13.25 0 24 -10.7402 24 -24v-32c0 -13.25 -10.75 -24 -24 -24h-96v-152c0 -13.25 -10.75 -24 -24 -24h-32c-13.25 0 -24 10.75 -24 24v152h-96c-13.25 0 -24 10.75 -24 24v32c0 13.2598 10.75 24 24 24h44.6201c-21.0801 33.9902 -36.6201 74.3496 -36.6201 112\n+c0 88.3701 57.3096 144 128 144s128 -55.6299 128 -144c0 -37.6504 -15.54 -78.0098 -36.6201 -112h44.6201zM160 368c-29.6104 0 -48 -24.5195 -48 -64c0 -34.6602 27.1396 -78.1504 48 -100.87c20.8604 22.7305 48 66.21 48 100.87c0 39.4805 -18.3896 64 -48 64z\" \u002F>\n+    \u003Cglyph glyph-name=\"bible\" unicode=\"&#xf647;\" horiz-adv-x=\"448\" \n+d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\n+c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM144 304v-32c0 -8.83984 7.16016 -16 16 -16h48v-112c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16v112h48c8.83984 0 16 7.16016 16 16v32\n+c0 8.83984 -7.16016 16 -16 16h-48v48c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-48h-48c-8.83984 0 -16 -7.16016 -16 -16zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"business-time\" unicode=\"&#xf64a;\" horiz-adv-x=\"640\" \n+d=\"M496 224c79.5898 0 144 -64.4102 144 -144s-64.4102 -144 -144 -144s-144 64.4102 -144 144s64.4102 144 144 144zM560 73.71v12.5801c0 5.33984 -4.37012 9.70996 -9.70996 9.70996h-38.29v54.2803c0 5.33984 -4.37012 9.70996 -9.70996 9.70996h-12.5703\n+c-5.33984 0 -9.70996 -4.37012 -9.70996 -9.70996v-76.5703c0 -5.33984 4.37012 -9.70996 9.70996 -9.70996h60.5703c5.33984 0 9.70996 4.37012 9.70996 9.70996zM496 256c-37.5303 0 -72.2803 -11.9102 -100.88 -32h-395.12v80c0 25.5996 22.4004 48 48 48h80v48\n+c0 25.5996 22.4004 48 48 48h160c25.5996 0 48 -22.4004 48 -48v-48h80c25.5996 0 48 -22.4004 48 -48v-48.8096c-5.28027 0.479492 -10.5996 0.80957 -16 0.80957zM320 352v32h-128v-32h128zM326.82 128c-4.33984 -15.2803 -6.82031 -31.3398 -6.82031 -48\n+c0 -28.8203 7.09961 -55.96 19.4297 -80h-291.43c-25.5996 0 -48 22.4004 -48 48v144h192v-48c0 -8.83984 7.16016 -16 16 -16h118.82z\" \u002F>\n+    \u003Cglyph glyph-name=\"city\" unicode=\"&#xf64f;\" horiz-adv-x=\"640\" \n+d=\"M616 256c13.25 0 24 -10.7402 24 -24v-264c0 -17.6699 -14.3301 -32 -32 -32h-576c-17.6699 0 -32 14.3301 -32 32v360c0 13.2598 10.7402 24 24 24h40v80c0 8.83984 7.16016 16 16 16h16c8.83984 0 16 -7.16016 16 -16v-80h64v80c0 8.83984 7.16016 16 16 16h16\n+c8.83984 0 16 -7.16016 16 -16v-80h64v72c0 13.2598 10.7402 24 24 24h144c13.2598 0 24 -10.7402 24 -24v-168h136zM128 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12z\n+M128 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM128 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40\n+c6.62988 0 12 5.37012 12 12zM256 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM256 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40\n+c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM256 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 140v40c0 6.62988 -5.37012 12 -12 12h-40\n+c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 236v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM416 332v40\n+c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12zM576 44v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40\n+c6.62988 0 12 5.37012 12 12zM576 140v40c0 6.62988 -5.37012 12 -12 12h-40c-6.62988 0 -12 -5.37012 -12 -12v-40c0 -6.62988 5.37012 -12 12 -12h40c6.62988 0 12 5.37012 12 12z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-dollar\" unicode=\"&#xf651;\" \n+d=\"M256 416c141.38 0 256 -93.1201 256 -208s-114.62 -208 -256 -208c-38.4102 0 -74.71 7.07031 -107.4 19.3799c-24.6094 -19.6299 -74.3398 -51.3799 -140.6 -51.3799h-0.00195312c-4.41309 0 -7.99512 3.58203 -7.99512 7.99512\n+c0 1.76172 0.984375 4.22754 2.19727 5.50488c0.5 0.530273 42.2598 45.4502 54.8193 95.7598c-35.6094 35.7305 -57.0195 81.1807 -57.0195 130.74c0 114.88 114.62 208 256 208zM280 113.56c30.29 3.62012 53.3701 30.9805 49.3203 63.04\n+c-2.90039 22.96 -20.6602 41.3105 -42.9102 47.6699l-50.0703 14.3008c-3.59961 1.0293 -6.12012 4.35938 -6.12012 8.10938c0 4.64062 3.78027 8.41992 8.44043 8.41992h32.7803h0.0654297c2.94727 0 7.51367 -0.994141 10.1943 -2.21973\n+c4.7998 -2.20996 10.3701 -1.70996 14.1094 2.03027l17.5205 17.5195c5.26953 5.27051 4.66992 14.2705 -1.5498 18.3799c-9.5 6.27051 -20.3604 10.1104 -31.7803 11.46v17.7305c0 8.83984 -7.16016 16 -16 16h-16c-8.83984 0 -16 -7.16016 -16 -16v-17.5498\n+c-30.29 -3.62012 -53.3701 -30.9805 -49.3203 -63.0498c2.90039 -22.96 20.6602 -41.3203 42.9102 -47.6699l50.0703 -14.3008c3.59961 -1.0293 6.12012 -4.35938 6.12012 -8.10938c0 -4.64062 -3.78027 -8.41992 -8.44043 -8.41992h-32.7803\n+c-3.59961 0 -7.0791 0.759766 -10.2598 2.21973c-4.7998 2.20996 -10.3701 1.70996 -14.1094 -2.03027l-17.5205 -17.5195c-5.26953 -5.27051 -4.66992 -14.2705 1.5498 -18.3799c9.5 -6.27051 20.3604 -10.1104 31.7803 -11.46v-17.7305c0 -8.83984 7.16016 -16 16 -16h16\n+c8.83984 0 16 7.16016 16 16v17.5596z\" \u002F>\n+    \u003Cglyph glyph-name=\"comments-dollar\" unicode=\"&#xf653;\" horiz-adv-x=\"576\" \n+d=\"M416 256c0 -88.3701 -93.1201 -160 -208 -160c-40.9805 0 -79.0703 9.24023 -111.27 24.9805c-21.8008 -12.7305 -52.1504 -24.9805 -88.7305 -24.9805h-0.00195312c-4.41309 0 -7.99512 3.58203 -7.99512 7.99512c0 1.76172 0.984375 4.22754 2.19727 5.50488\n+c0.319336 0.339844 22.4102 24.2803 35.7695 54.5195c-23.8398 26.0303 -37.9697 57.7109 -37.9697 91.9805c0 88.3701 93.1201 160 208 160s208 -71.6299 208 -160zM192 160c0 -4.41992 3.58008 -8 8 -8h16c4.41992 0 8 3.58008 8 8v16.1201\n+c23.6201 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973\n+c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201\n+c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\n+c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29zM538.01 36.0098\n+c13.3604 -30.2598 35.4707 -54.1699 35.7803 -54.5c2.20996 -2.33008 2.82031 -5.72949 1.5498 -8.66992c-1.25 -2.92969 -4.13965 -4.83984 -7.33984 -4.83984c-36.5801 0 -66.9297 12.25 -88.7305 24.9805c-32.1992 -15.7402 -70.2891 -24.9805 -111.27 -24.9805\n+c-86.2305 0 -160.2 40.3701 -191.73 97.8799c10.4102 -1.11035 20.9502 -1.87988 31.7305 -1.87988c132.34 0 240 86.1299 240 192c0 6.78027 -0.469727 13.4697 -1.33008 20.0703c75.8398 -23.8701 129.33 -81.1299 129.33 -148.07\n+c0 -34.2695 -14.1299 -65.96 -37.9902 -91.9902z\" \u002F>\n+    \u003Cglyph glyph-name=\"cross\" unicode=\"&#xf654;\" horiz-adv-x=\"384\" \n+d=\"M352 320c17.6699 0 32 -14.3301 32 -32v-64c0 -17.6699 -14.3301 -32 -32 -32h-96v-224c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32v224h-96c-17.6699 0 -32 14.3301 -32 32v64c0 17.6699 14.3301 32 32 32h96v96c0 17.6699 14.3301 32 32 32\n+h64c17.6699 0 32 -14.3301 32 -32v-96h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"dharmachakra\" unicode=\"&#xf655;\" \n+d=\"M495 222.94c9.20996 0.569336 17 -6.74023 17.0098 -15.9707v-29.9395c0 -9.23047 -7.79004 -16.5498 -17 -15.9707l-17.2197 1.08008c-5.28027 -39.4795 -20.7998 -75.6299 -43.8604 -105.83l12.9502 -11.4297c6.91992 -6.09961 7.25977 -16.7803 0.730469 -23.3096\n+l-21.1699 -21.1699c-6.52051 -6.52051 -17.2002 -6.19043 -23.3105 0.729492l-11.4297 12.9502c-30.2002 -23.0703 -66.3506 -38.5898 -105.84 -43.8604l1.08008 -17.2197c0.569336 -9.20996 -6.74023 -17 -15.9707 -17h-29.9395c-9.23047 0 -16.5498 7.79004 -15.9707 17\n+l1.09082 17.2197c-39.4902 5.28027 -75.6406 20.7998 -105.841 43.8604l-11.4297 -12.9502c-6.09961 -6.91992 -16.7803 -7.25977 -23.3096 -0.729492l-21.1699 21.1699c-6.52051 6.51953 -6.19043 17.1992 0.729492 23.3096l12.9502 11.4297\n+c-23.0703 30.1904 -38.5898 66.3408 -43.8604 105.83l-17.2197 -1.08008c-9.20996 -0.569336 -17 6.74023 -17 15.9707v29.9395c0 9.23047 7.79004 16.5498 17 15.9707l17.2197 -1.08008c5.28027 39.4893 20.7998 75.6396 43.8604 105.84l-12.9502 11.4297\n+c-6.91992 6.10059 -7.25977 16.7803 -0.729492 23.3105l21.1699 21.1592c6.51953 6.52051 17.1992 6.19043 23.3096 -0.729492l11.4297 -12.9502c30.1904 23.0703 66.3408 38.5898 105.83 43.8604l-1.08008 17.2197c-0.569336 9.20996 6.74023 17 15.9707 17h29.9395\n+c9.23047 0 16.5498 -7.79004 15.9707 -17l-1.07031 -17.21c39.4795 -5.28027 75.6299 -20.7998 105.83 -43.8604l11.4297 12.9404c6.10059 6.91992 16.7803 7.25977 23.3105 0.729492l21.1592 -21.1592c6.52051 -6.52051 6.19043 -17.2002 -0.729492 -23.3105\n+l-12.9502 -11.4297c23.0703 -30.2002 38.5898 -66.3506 43.8604 -105.84zM281.84 349.39l-4.00977 -64.1201c10.2998 -2.40918 19.8896 -6.50977 28.6201 -11.9492l42.6201 48.29c-19.6006 14.1201 -42.4199 23.71 -67.2305 27.7793zM230.16 349.39\n+c-24.8105 -4.06934 -47.6299 -13.6592 -67.2305 -27.7793l42.6201 -48.29c8.73047 5.42969 18.3301 9.54004 28.6201 11.9492zM126.39 285.06c-14.1201 -19.5996 -23.71 -42.4092 -27.7793 -67.2197l64.1201 -4.00977c2.41992 10.29 6.51953 19.8896 11.96 28.6201z\n+M98.6104 166.16c4.06934 -24.8105 13.6592 -47.6299 27.7793 -67.2305l48.29 42.6201c-5.42969 8.73047 -9.54004 18.3301 -11.9492 28.6201zM230.16 34.6104l4 64.1201c-10.29 2.41992 -19.8906 6.51953 -28.6201 11.96l-42.6104 -48.3008\n+c19.6006 -14.1201 42.4199 -23.71 67.2305 -27.7793zM256 160c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM281.84 34.6104c24.8105 4.06934 47.6201 13.6592 67.2197 27.7793l-42.6094 48.3008\n+c-8.73047 -5.44043 -18.3301 -9.55078 -28.6201 -11.96zM385.61 98.9404c14.1201 19.5898 23.71 42.4092 27.7793 67.2295l-64.1201 4.00977c-2.40918 -10.2998 -6.50977 -19.8896 -11.9492 -28.6201zM349.27 213.83l64.1201 4\n+c-4.06934 24.8096 -13.6592 47.6299 -27.7793 67.2295l-48.3008 -42.6094c5.44043 -8.73047 9.55078 -18.3301 11.96 -28.6201z\" \u002F>\n+    \u003Cglyph glyph-name=\"envelope-open-text\" unicode=\"&#xf658;\" \n+d=\"M176 232c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h160c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16h-160zM160 152v16c0 8.83984 7.16016 16 16 16h160c8.83984 0 16 -7.16016 16 -16v-16c0 -8.83984 -7.16016 -16 -16 -16\n+h-160c-8.83984 0 -16 7.16016 -16 16zM256 30.8701c16.4199 0 32.8398 5.07031 46.8604 15.1895l209.14 151.08v-213.14c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v213.14l209.14 -151.08c14.0205 -10.1299 30.4404 -15.1895 46.8604 -15.1895z\n+M493.61 285.05c11.6094 -9.09961 18.3896 -23.0303 18.3896 -37.7695v-10.6504l-96 -69.3496v184.72h-320v-184.72l-96 69.3496v10.6504c0.00195312 12.8945 8.24023 29.8154 18.3896 37.7695c8.85059 6.94043 17.2402 13.4805 29.6104 22.8105v44.1396\n+c0 26.5098 21.4902 48 48 48h77.5498c3.04004 2.2002 5.87012 4.25977 9.04004 6.55957c16.8203 12.2705 50.21 41.79 73.4102 41.4404c23.2002 0.349609 56.5996 -29.1699 73.4102 -41.4404c3.16992 -2.2998 6 -4.35938 9.04004 -6.55957h77.5498\n+c26.5098 0 48 -21.4902 48 -48v-44.1396c12.3701 -9.34082 20.7598 -15.8701 29.6104 -22.8105z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder-minus\" unicode=\"&#xf65d;\" \n+d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192zM368 152v16c0 8.83984 -7.16016 16 -16 16h-192c-8.83984 0 -16 -7.16016 -16 -16v-16\n+c0 -8.83984 7.16016 -16 16 -16h192c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"folder-plus\" unicode=\"&#xf65e;\" \n+d=\"M464 320c26.5098 0 48 -21.4902 48 -48v-224c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v288c0 26.5098 21.4902 48 48 48h160l64 -64h192zM368 152v16c0 8.83984 -7.16016 16 -16 16h-72v72c0 8.83984 -7.16016 16 -16 16h-16\n+c-8.83984 0 -16 -7.16016 -16 -16v-72h-72c-8.83984 0 -16 -7.16016 -16 -16v-16c0 -8.83984 7.16016 -16 16 -16h72v-72c0 -8.83984 7.16016 -16 16 -16h16c8.83984 0 16 7.16016 16 16v72h72c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"funnel-dollar\" unicode=\"&#xf662;\" horiz-adv-x=\"640\" \n+d=\"M433.46 282.06c-83.4102 -20.8896 -145.46 -96.2695 -145.46 -186.06c0 -54.3496 22.7998 -103.38 59.21 -138.35c-10.75 -20.54 -38.3604 -29.21 -59.2197 -13.5703l-79.9902 60c-10.0703 7.55957 -16 19.4102 -16 32v155.92l-182.66 201.93\n+c-19.9502 19.9502 -5.82031 54.0703 22.4004 54.0703h480.52c28.2207 0 42.3506 -34.1201 22.4004 -54.0703zM480 256c88.3701 0 160 -71.6299 160 -160s-71.6299 -160 -160 -160s-160 71.6299 -160 160s71.6299 160 160 160zM496 16.1201\n+c23.6299 0.629883 42.6699 20.54 42.6699 45.0703c0 19.9697 -12.9902 37.8096 -31.5801 43.3896l-45 13.5c-5.16016 1.54004 -8.76953 6.78027 -8.76953 12.7295c0 7.27051 5.2998 13.1904 11.7998 13.1904h28.1104c4.55957 0 8.94922 -1.29004 12.8193 -3.71973\n+c3.24023 -2.03027 7.36035 -1.91016 10.1299 0.729492l11.75 11.21c3.53027 3.37012 3.33008 9.20996 -0.569336 12.1406c-9.10059 6.83984 -20.0801 10.7695 -31.3701 11.3496v16.29c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-16.1201\n+c-23.6201 -0.629883 -42.6699 -20.5498 -42.6699 -45.0703c0 -19.9697 12.9893 -37.8096 31.5801 -43.3896l45 -13.5c5.15918 -1.54004 8.76953 -6.78027 8.76953 -12.7295c0 -7.27051 -5.2998 -13.1904 -11.7998 -13.1904h-28.1104\n+c-4.55957 0 -8.9502 1.2998 -12.8193 3.71973c-3.24023 2.03027 -7.36035 1.91016 -10.1309 -0.729492l-11.75 -11.21c-3.5293 -3.37012 -3.3291 -9.20996 0.570312 -12.1406c9.10059 -6.83008 20.0801 -10.7695 31.3701 -11.3496v-16.29c0 -4.41992 3.58008 -8 8 -8h16\n+c4.41992 0 8 3.58008 8 8v16.1201z\" \u002F>\n+    \u003Cglyph glyph-name=\"gopuram\" unicode=\"&#xf664;\" \n+d=\"M496 96c8.7998 0 16 -7.2002 16 -16v-128c0 -8.7998 -7.2002 -16 -16 -16h-80v160h-32v128h-32v96h-32v-96h32v-128h32v-160h-80v80c0 8.7998 -7.2002 16 -16 16h-64c-8.7998 0 -16 -7.2002 -16 -16v-80h-80v160h32v128h32v96h-32v-96h-32v-128h-32v-160h-80\n+c-8.7998 0 -16 7.2002 -16 16v128c0 8.7998 7.2002 16 16 16h16v112c0 8.7998 7.2002 16 16 16h16v80c0 8.7998 7.2002 16 16 16h16v112c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16\n+c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-16h64v16c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16v-112h16c8.7998 0 16 -7.2002 16 -16v-80h16c8.7998 0 16 -7.2002 16 -16v-112h16zM232 272v-48h48v48c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16z\n+M288 96v64c0 8.7998 -7.2002 16 -16 16h-32c-8.7998 0 -16 -7.2002 -16 -16v-64h64z\" \u002F>\n+    \u003Cglyph glyph-name=\"hamsa\" unicode=\"&#xf665;\" \n+d=\"M509.34 140.75c1.46875 -3.37012 2.66016 -9.08984 2.66016 -12.7656c0 -6.95703 -3.85254 -16.7295 -8.59961 -21.8145l-102.681 -110.03c-35.6895 -38.2197 -88.4102 -60.1396 -144.72 -60.1396s-109.03 21.9199 -144.71 60.1396l-102.69 110.03\n+c-4.74707 5.08496 -8.59961 14.8574 -8.59961 21.8145c0 3.67578 1.19141 9.39551 2.66016 12.7656c5.05957 11.6904 16.5898 19.25 29.3398 19.25h64v208c0 22 18 40 40 40s40 -18 40 -40v-134c0 -5.51953 4.48047 -10 10 -10h20c5.51953 0 10 4.48047 10 10v174\n+c0 22 18 40 40 40s40 -18 40 -40v-174c0 -5.51953 4.48047 -10 10 -10h20c5.51953 0 10 4.48047 10 10v134c0 22 18 40 40 40s40 -18 40 -40v-208h64c12.75 0 24.2803 -7.55957 29.3398 -19.25zM256 32c53.0195 0 96 64 96 64s-42.9805 64 -96 64s-96 -64 -96 -64\n+s42.9805 -64 96 -64zM256 128c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"haykal\" unicode=\"&#xf666;\" \n+d=\"M496.25 245.48c17.54 -2.46094 21.6797 -26.2705 6.04004 -34.6602l-98.1602 -52.6602l74.4805 -83.54c11.8594 -13.29 0.00976562 -34.25 -17.3506 -30.4902l-108.569 23.6504l4.10938 -112.55c0.430664 -11.6504 -8.87012 -19.2207 -18.4102 -19.2207\n+c-5.15918 0 -10.3896 2.20996 -14.1992 7.18066l-68.1807 88.8994l-68.1797 -88.8994c-3.81055 -4.9707 -9.0498 -7.18066 -14.2002 -7.18066c-9.54004 0 -18.8398 7.57031 -18.4102 19.2207l4.11035 112.55l-108.57 -23.6504\n+c-1.39941 -0.30957 -2.75977 -0.450195 -4.06934 -0.450195c-15.0107 0 -24.21 18.6807 -13.29 30.9307l74.4795 83.54l-98.1602 52.6592c-15.6494 8.40039 -11.5098 32.21 6.03027 34.6709l110 15.4297l-41.8203 104.34c-6.66016 16.6396 11.6006 32.1797 26.5898 22.6299\n+l94.04 -59.8896l34.0908 107.189c2.70996 8.55078 10.0293 12.8203 17.3496 12.8203s14.6396 -4.26953 17.3496 -12.8203l34.0908 -107.18l94.04 59.8896c14.9893 9.55078 33.2598 -5.98926 26.5898 -22.6299l-41.8203 -104.34zM338.51 136.32l-35.6094 39.9297\n+l46.9199 25.1699l-52.5703 7.37988l19.9902 49.8701l-44.9502 -28.6201l-16.29 51.2305l-16.3096 -51.2305l-44.9502 28.6201l19.9902 -49.8701l-52.5703 -7.37988l46.9199 -25.1699l-35.5996 -39.9297l51.8896 11.2998l-1.95996 -53.79l32.5898 42.4902l32.5898 -42.4902\n+l-1.96973 53.79z\" \u002F>\n+    \u003Cglyph glyph-name=\"jedi\" unicode=\"&#xf669;\" horiz-adv-x=\"544\" \n+d=\"M479.99 96h39.96c-42.6299 -94.1699 -137.641 -160 -247.98 -160c-4.25977 0 -8.5498 0.0898438 -12.8496 0.290039c-103.97 4.76953 -193.851 69.4795 -235.101 159.71h39.9102l-58.5996 58.5996c-2.57031 12.8809 -4.49023 25.9805 -5.11035 39.4102\n+c-0.469727 10.0801 -0.129883 20.0703 0.5 29.9902h47.21l-41.3799 41.3799c14.3701 64.7002 52.1006 122.55 107.97 162.07c2.77051 1.95996 5.9707 3 9.27051 3c5.37988 0 10.4297 -2.70996 13.5098 -7.25c3.0498 -4.5 3.64062 -10 1.62012 -15.0898\n+c-6.53027 -16.4502 -9.83984 -33.7002 -9.83984 -51.2607c0 -45.1191 21.04 -86.5801 57.71 -113.739c4.00977 -2.9707 6.4502 -7.48047 6.69043 -12.3799c0.239258 -4.90039 -1.76074 -9.65039 -5.48047 -13.0107c-26.5498 -23.9795 -41.1699 -56.5 -41.1699 -91.5801\n+c0 -60.0293 42.9502 -110.279 99.8896 -121.92l2.5 65.2607l-27.1602 -18.4805c-2.96973 -2 -7.40918 -1.7002 -10 0.75c-2.72949 2.61035 -3.30957 6.70996 -1.38965 9.94043l20.1299 33.7695l-42.0693 8.71973c-3.71094 0.75 -6.38086 4.05078 -6.38086 7.83008\n+c0 3.78027 2.68066 7.08008 6.38086 7.83008l42.0693 8.73047l-20.1094 33.7295c-1.94043 3.27051 -1.36035 7.35059 1.35938 9.94043c2.73047 2.60938 6.86035 2.89941 10 0.779297l30.3906 -20.6592l11.5195 287.97c0.160156 4.29004 3.66992 7.66992 8 7.66992h0.0400391\n+c4.25293 0 7.81934 -3.44922 7.95996 -7.7002l11.5303 -287.93l30.3896 20.6699c3.03027 2.08984 7.2998 1.75 10 -0.799805c2.71973 -2.60059 3.2998 -6.68066 1.37988 -9.91016l-20.1299 -33.7705l42.0703 -8.72949c3.68945 -0.770508 6.37988 -4.06055 6.37988 -7.83008\n+c0 -3.78027 -2.67969 -7.08008 -6.37988 -7.83008l-42.0703 -8.71973l20.1104 -33.7305c0.631836 -1.05078 1.14453 -2.89844 1.14453 -4.12402c0 -1.89355 -1.11328 -4.49023 -2.48438 -5.7959c-2.63086 -2.49023 -7.04004 -2.85938 -10.0205 -0.799805l-27.1699 18.4697\n+l2.5 -65.3398c48.4697 9.40039 87.5703 48.1504 97.3096 96.5c8.78027 43.5605 -5.63965 87.3203 -38.5693 117.07c-3.73047 3.37012 -5.73047 8.10938 -5.49023 13.0303c0.240234 4.89941 2.67969 9.41992 6.7002 12.3994c36.6602 27.1602 57.6895 68.6104 57.6895 113.73\n+c0 17.5801 -3.30957 34.8496 -9.85938 51.3096c-2.03027 5.09961 -1.44043 10.5996 1.60938 15.0898c3.08008 4.53027 8.12012 7.24023 13.4902 7.24023c3.28027 0 6.48047 -1.03027 9.25 -2.99023c55.4805 -39.2197 93.4102 -97.4795 107.91 -162.27l-41.25 -41.2402\n+h46.9502c0.370117 -5.75977 1.0498 -11.46 1.0498 -17.2695c0 -17.7402 -1.83984 -35.0605 -5.12988 -51.8604z\" \u002F>\n+    \u003Cglyph glyph-name=\"journal-whills\" unicode=\"&#xf66a;\" horiz-adv-x=\"448\" \n+d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\n+c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM133.08 303.61c-2.98047 -10.0908 -5.08008 -20.5605 -5.07031 -31.6201c0 -0.520508 0.140625 -0.990234 0.150391 -1.50977l37.1094 -32.4707\n+c3.33008 -2.89941 3.6709 -7.9502 0.75 -11.2793c-1.5791 -1.81055 -3.7998 -2.73047 -6.01953 -2.73047h-0.0175781c-1.65527 0 -4.00879 0.886719 -5.25195 1.98047l-23.5908 20.6396c11.54 -49.5801 55.7705 -86.6201 108.86 -86.6201s97.3203 37.04 108.87 86.6299\n+l-23.5898 -20.6396c-1.52051 -1.32031 -3.39062 -1.98047 -5.27051 -1.98047h-0.0146484c-2 0 -4.69043 1.22363 -6.00488 2.73047c-1.09668 1.24707 -1.98633 3.60645 -1.98633 5.2666c0 2.00293 1.22559 4.69727 2.73633 6.0127l37.1094 32.4707\n+c0.0107422 0.519531 0.150391 0.990234 0.150391 1.50977c0 11.0498 -2.09961 21.5195 -5.07031 31.5996l-21.2598 -21.2598c-1.57031 -1.55957 -3.61035 -2.33984 -5.66016 -2.33984s-4.09961 0.780273 -5.66016 2.33984c-3.11914 3.12012 -3.11914 8.19043 0 11.3105\n+l26.4199 26.4199c-10 20.8994 -26.2393 37.9795 -46.3691 49.2598c5.97949 -9.73047 9.59961 -21.0703 9.59961 -33.3301c0 -19.96 -9.33008 -37.5703 -23.6602 -49.3096c9.65039 -10.0605 15.6602 -23.6504 15.6602 -38.6904c0 -26.9404 -19.04 -49.4004 -44.3701 -54.7402\n+l-1.42969 34.2803l12.6797 -8.62012c0.69043 -0.459961 1.46973 -0.689453 2.25 -0.689453c0.980469 0 1.98047 0.369141 2.75 1.08984c1.36035 1.2793 1.63965 3.33984 0.69043 4.94922l-8.54004 14.3105l17.9102 3.71973\n+c1.85938 0.390625 3.18945 2.03027 3.18945 3.91992c0 1.89062 -1.33008 3.53027 -3.18945 3.91992l-17.9102 3.7207l8.54004 14.3096c0.308594 0.521484 0.55957 1.43652 0.55957 2.04297c0 0.950195 -0.55957 2.25293 -1.25 2.90723\n+c-0.645508 0.59668 -1.88281 1.08105 -2.76172 1.08105c-0.672852 0 -1.67578 -0.300781 -2.23828 -0.670898l-14.2002 -9.65039l-4.67969 112.29c-0.0898438 2.13965 -1.86035 3.83008 -4 3.83008s-3.91016 -1.69043 -4 -3.83008l-4.62012 -110.81l-12.0098 8.15918\n+c-1.56055 1.03027 -3.63965 0.890625 -5 -0.40918c-1.36035 -1.28027 -1.63965 -3.34082 -0.69043 -4.9502l8.54004 -14.3105l-17.9102 -3.71973c-1.85938 -0.389648 -3.18945 -2.03027 -3.18945 -3.91992s1.33008 -3.53027 3.18945 -3.91992l17.9102 -3.71973\n+l-8.54004 -14.3105c-0.308594 -0.521484 -0.55957 -1.43652 -0.55957 -2.04297c0 -0.950195 0.55957 -2.25293 1.25 -2.90723c0.769531 -0.709961 1.75 -1.08984 2.75 -1.08984c0.780273 0 1.55957 0.240234 2.25 0.69043l10.3701 7.04004l-1.36035 -32.71\n+c-25.3398 5.35938 -44.3799 27.8193 -44.3799 54.7598c0 15.04 6.00977 28.6299 15.6602 38.6904c-14.3301 11.7393 -23.6602 29.3496 -23.6602 49.3096c0 12.2598 3.62012 23.5996 9.61035 33.3398c-20.1299 -11.29 -36.3701 -28.3594 -46.3701 -49.2598l26.4199 -26.4199\n+c3.12012 -3.12012 3.12012 -8.19043 0 -11.3105c-1.57031 -1.55957 -3.61035 -2.33984 -5.66016 -2.33984s-4.09961 0.780273 -5.66016 2.33984zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"kaaba\" unicode=\"&#xf66b;\" horiz-adv-x=\"576\" \n+d=\"M554.12 364.49c13.0703 -4.36035 21.8799 -16.5898 21.8799 -30.3604v-49.0098l-265 79.5098c-15.0596 4.5 -30.9502 4.5 -45.9805 0l-265.02 -79.5098v49.0098c0.000976562 12.7314 9.80273 26.332 21.8799 30.3604l235.771 78.5801\n+c8.15723 2.71973 21.7559 4.92676 30.3545 4.92676s22.1982 -2.20703 30.3555 -4.92676zM274.22 333.97c9 2.7207 18.5498 2.7207 27.5898 0l274.2 -82.2598v-228.39c0 -15 -10.4199 -27.9902 -25.0596 -31.2402l-242.12 -53.7998\n+c-5.67871 -1.2627 -15.0078 -2.28809 -20.8252 -2.28809s-15.1465 1.02539 -20.8252 2.28809l-242.12 53.7998c-14.6396 3.25977 -25.0596 16.2402 -25.0596 31.2402v228.38zM128 217.89v16.5801c0 5.28027 -5.01953 9.11035 -10.1104 7.7207l-80 -21.8203\n+c-3.47949 -0.950195 -5.88965 -4.11035 -5.88965 -7.71973v-16.5801c0 -5.27051 5.01953 -9.10059 10.1104 -7.7207l80 21.8203c3.47949 0.950195 5.88965 4.11035 5.88965 7.71973zM272 257.17v16.5801c0 5.28027 -5.01953 9.11035 -10.1104 7.71973l-96 -26.1797\n+c-3.47949 -0.950195 -5.88965 -4.11035 -5.88965 -7.71973v-16.5801c0 -5.28027 5.01953 -9.11035 10.1104 -7.7207l96 26.1807c3.47949 0.950195 5.88965 4.10938 5.88965 7.71973zM448 234.47v-16.5801v-0.00488281c0 -3.37109 2.63867 -6.82715 5.88965 -7.71484\n+l80 -21.8203c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5801c0 3.60938 -2.41016 6.76953 -5.88965 7.71973l-80 21.8203c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.7207zM304 273.74v-16.5801v-0.00585938c0 -3.37012 2.63867 -6.82617 5.88965 -7.71387\n+l96 -26.1807c5.09082 -1.38965 10.1104 2.44043 10.1104 7.7207v16.5791c0 3.61035 -2.41016 6.77051 -5.88965 7.7207l-96 26.1797c-5.09082 1.38965 -10.1104 -2.44043 -10.1104 -7.71973z\" \u002F>\n+    \u003Cglyph glyph-name=\"khanda\" unicode=\"&#xf66d;\" \n+d=\"M415.81 382c73.71 -40.2402 111.78 -123.85 90.1602 -207.51c-7.25 -28.0898 -22.3799 -53.5703 -41.25 -75.5898l-52.5098 -61.3105c-4.87012 -5.67969 -13.04 -7.22949 -19.6504 -3.70996l-79.3496 42.2305l-29.21 -20.3408l47.0801 -32.7793\n+c1.66992 0.370117 3.22949 1.00977 5.00977 1.00977c13.25 0 23.9902 -10.7402 23.9902 -24c0 -13.25 -10.7402 -24 -23.9902 -24c-12.0898 0 -21.6797 9.11035 -23.3301 20.7598l-40.9102 28.4805v-30.1504c9.38086 -5.58008 15.9902 -15.3896 15.9902 -27.0996\n+c0 -17.6699 -14.3203 -32 -31.9795 -32c-17.6602 0 -31.9805 14.3301 -31.9805 32c0 11.7197 6.60059 21.5293 15.9902 27.0996v29.9502l-40.6299 -28.2803c-1.64062 -11.6494 -11.2305 -20.7598 -23.3301 -20.7598c-13.25 0 -23.9902 10.75 -23.9902 24\n+c0 13.2598 10.7402 24 23.9902 24c1.78027 0 3.33984 -0.639648 5.00977 -1.00977l47.0801 32.7793l-29.21 20.3301l-79.3496 -42.2295c-6.61035 -3.52051 -14.7803 -1.96973 -19.6504 3.71973l-55.9697 65.3604c-12.5703 14.6797 -23.3906 31.0693 -30.46 49.0596\n+c-35.6602 90.6904 2.95996 186.391 81.4893 229.24c6.34082 3.5 15.0205 2.63965 20.0205 -2.7002c4.99023 -5.30957 6.45996 -12.9199 2.58984 -19.0801c-16.4902 -26.1602 -25.2002 -56.3896 -25.2002 -87.4697c0.180664 -53.1904 26.7598 -102.62 71.0303 -132.18\n+l76.5898 -53.3301v19.8994l-44.0498 36.0908c-3.91016 4.20996 -5 10.0996 -2.81055 15.2793l7.85059 17.2402c-33.8506 19.2598 -56.9404 55.2402 -56.9404 96.9902c0 40.79 22.0205 76.1396 54.5898 95.7197l-5.21973 11.4404\n+c-2.33008 5.5293 -0.929688 11.8301 3.57031 16.04l58.9902 52.8096l58.9893 -52.8203c4.5 -4.20996 5.91016 -10.5098 3.57031 -16.04l-5.21973 -11.4395c32.5693 -19.5801 54.5898 -54.9199 54.5898 -95.71c0 -41.7402 -23.0996 -77.7305 -56.9404 -96.9902\n+l7.85059 -17.2402c2.18945 -5.18945 1.10938 -11.0801 -2.81055 -15.2793l-44.0498 -36.0908v-20.0996l76.6299 53.3496c44.5 29.7207 71.0801 79.1602 71.2705 132.41c0 31.0205 -8.70996 61.25 -25.2002 87.4102c-1.36328 2.15723 -2.46973 5.97949 -2.46973 8.53223\n+c0 3.51465 1.96191 8.43652 4.37988 10.9883c4.99023 5.34961 12.9902 6.51953 19.3594 3.01953zM319.82 272c0 21.3203 -10.5801 40.1201 -26.6504 51.7695l-7.83008 -17.1797c-8.75 -24.5195 -8.75 -51.04 0 -75.5596l5.65039 -12.4102\n+c17.3398 11.46 28.8301 31.0801 28.8301 53.3799zM191.89 272c0 -22.2998 11.5 -41.9297 28.8408 -53.3896l5.64941 12.4092c8.75 24.5303 8.75 51.04 0 75.5605l-7.83008 17.1797c-16.0801 -11.6396 -26.6602 -30.4395 -26.6602 -51.7598z\" \u002F>\n+    \u003Cglyph glyph-name=\"landmark\" unicode=\"&#xf66f;\" \n+d=\"M501.62 355.89c6.24023 -2.33984 10.3799 -8.30957 10.3799 -14.9795v-36.9102c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v36.9102c0 6.11914 4.65039 12.8301 10.3799 14.9795l234.39 90.0703\n+c2.99902 1.12598 8.03223 2.04004 11.2354 2.04004s8.23633 -0.914062 11.2354 -2.04004zM64 256h64v-160h96v160h64v-160h96v160h64v-160h16c8.83984 0 16 -7.16016 16 -16v-48h-448v48c0 8.83984 7.16016 16 16 16h16v160zM496 0c8.83984 0 16 -7.16016 16 -16v-32\n+c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480z\" \u002F>\n+    \u003Cglyph glyph-name=\"mail-bulk\" unicode=\"&#xf674;\" horiz-adv-x=\"576\" \n+d=\"M160 0c25.5996 0 51.2002 22.4004 64 32c64 44.7998 83.2002 60.7998 96 70.4004v-134.4c0 -17.6699 -14.3301 -32 -32 -32h-256c-17.6699 0 -32 14.3301 -32 32v134.4c12.7998 -9.60059 32 -25.6006 96 -70.4004c12.7998 -9.59961 38.4004 -32 64 -32zM288 192\n+c17.6699 0 32 -14.3301 32 -32v-19.2002c-25.5996 -19.2002 -22.4004 -19.2002 -115.2 -86.3994c-9.59961 -3.2002 -28.7998 -22.4004 -44.7998 -22.4004s-35.2002 19.2002 -44.7998 25.5996c-92.7998 67.2002 -89.6006 67.2002 -115.2 86.4004v16\n+c0 17.6699 14.3301 32 32 32h256zM544 288c17.6699 0 32 -14.3301 32 -32v-192c0 -17.6699 -14.3301 -32 -32 -32h-192v134.4l-0.290039 -0.220703c-3.12012 32.4004 -30.5 57.8203 -63.71 57.8203h-96v32c0 17.6699 14.3301 32 32 32h320zM512 160v64h-64v-64h64zM160 256\n+v-32h-96v192c0 17.6699 14.3301 32 32 32h320c17.6699 0 32 -14.3301 32 -32v-96h-224c-35.29 0 -64 -28.71 -64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"menorah\" unicode=\"&#xf676;\" horiz-adv-x=\"640\" \n+d=\"M144 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM240 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM432 320c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM528 320\n+c8.83984 0 16 -7.16016 16 -16v-144h-64v144c0 8.83984 7.16016 16 16 16h32zM608 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM512 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32\n+zM416 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM320 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM224 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64\n+s-14.3301 -32 -32 -32zM128 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM32 352c-17.6699 0 -32 14.3301 -32 32s32 64 32 64s32 -46.3301 32 -64s-14.3301 -32 -32 -32zM576 160v144c0 8.83984 7.16016 16 16 16h32\n+c8.83984 0 16 -7.16016 16 -16v-144c0 -53.0195 -42.9805 -96 -96 -96h-192v-64h176c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v64h-192c-53.0195 0 -96 42.9805 -96 96\n+v144c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-144c0 -17.6699 14.3301 -32 32 -32h192v176c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-176h192c17.6699 0 32 14.3301 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"mosque\" unicode=\"&#xf678;\" horiz-adv-x=\"640\" \n+d=\"M0 -32v320h128v-320c0 -17.6699 -14.3301 -32 -32 -32h-64c-17.6699 0 -32 14.3301 -32 32zM579.16 160h-358.32c-17.8594 17.3896 -28.8398 37.3398 -28.8398 58.9102c0 52.8594 41.79 93.79 87.9199 122.899c41.9502 26.46 80.6299 57.7705 111.96 96.2207\n+l8.12012 9.96973l8.12012 -9.96973c31.3301 -38.4502 70.0195 -69.75 111.96 -96.2207c46.1299 -29.1094 87.9199 -70.04 87.9199 -122.899c0 -21.5703 -10.9805 -41.5205 -28.8398 -58.9102zM608 128c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32\n+h-32v64c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32v-64h-64v72c0 48 -48 72 -48 72s-48 -24 -48 -72v-72h-64v64c0 17.6699 -14.3301 32 -32 32s-32 -14.3301 -32 -32v-64h-32c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h416zM64 448\n+c0 0 64 -32 64 -96v-32h-128v32c0 64 64 96 64 96z\" \u002F>\n+    \u003Cglyph glyph-name=\"om\" unicode=\"&#xf679;\" \n+d=\"M360.6 387.06l-21.5801 21.5605c-1.68848 1.68652 -3.05957 4.99316 -3.05957 7.37988s1.37109 5.69336 3.05957 7.37988l21.5703 21.5605c4.08008 4.06934 10.6797 4.06934 14.7598 0l21.5801 -21.5605c1.68945 -1.68652 3.06055 -4.99316 3.06055 -7.37988\n+s-1.37109 -5.69336 -3.06055 -7.37988l-21.5693 -21.5605c-1.6875 -1.68848 -4.99316 -3.05957 -7.37988 -3.05957c-2.3877 0 -5.69336 1.37109 -7.38086 3.05957zM412.11 256c55.0898 0 99.8896 -44.7998 99.8896 -99.8799v-100.12c0 -48.5303 -47.4805 -88 -96.0195 -88\n+c-96.0205 0 -96.0205 64 -96.0205 64v37.8701c0 7.55957 9.42969 10.8896 14.2002 5.01953c15.1494 -18.6494 42.4199 -42.8896 81.8203 -42.8896c13.2393 0 32.0098 10.7695 32.0098 24v100.12c0 19.79 -16.1006 35.8799 -35.8799 35.8799\n+c-9.60059 0 -18.6006 -3.73047 -25.3799 -10.5l-24.25 -24.25c-18.8701 -18.8604 -43.9502 -29.25 -70.6406 -29.25h-21.6895c11.0293 -18.9004 17.8096 -40.5801 17.8096 -64c0 -70.5801 -57.4297 -128 -128.02 -128c-118.811 0 -160.03 96 -159.94 150.81\n+c0.0195312 8.80078 10.2598 12.7705 14.79 5.2207c22.7998 -38.0107 49.1299 -92.0303 145.15 -92.0303c35.2998 0 64.0098 28.7002 64.0098 64s-28.71 64 -64.0098 64h-33.0303c-5.57031 0.450195 -10.6406 3.49023 -13.1699 8.5498l-16.0898 32.1699\n+c-5.35059 10.7002 2.42969 23.2803 14.3896 23.2803h31.9004c26.4697 0 48.0098 21.5303 48.0098 48s-21.54 48 -48.0098 48c-11.25 0 -21.8203 -3.80957 -30.2705 -10.71c-5.54004 -4.53027 -13.4795 -4.50977 -19.2002 -0.209961l-26.1494 19.6299\n+c-8.08984 6.08008 -8.48047 17.9697 -1.12012 24.9297c25.1094 23.7402 59.8594 34.71 96.0098 28.7803c43.1602 -7.08008 79.4199 -40.6396 89.5205 -83.1895c6.43945 -27.1201 2.80957 -53.1309 -7.73047 -75.2305h46.8398c9.60059 0 18.6006 3.73047 25.3799 10.5\n+l24.25 24.25c18.8701 18.8604 43.9502 29.25 70.6406 29.25zM454.29 380.73c10.5596 7.95996 25.7002 0.489258 25.7002 -12.7305v-35.5195c0 -2.36035 -0.509766 -4.71094 -1.53027 -6.83008c-2.96973 -6.30078 -21.8301 -37.6602 -101.75 -37.6602\n+c-78.4297 0 -117.19 69.3896 -118.8 72.3398c-3.61035 6.62988 -2.08008 14.8799 3.66016 19.7998c5.69922 4.92969 14.1201 5.16992 20.1396 0.549805c3.53027 -2.69922 87.0303 -65.0693 172.58 0.0507812z\" \u002F>\n+    \u003Cglyph glyph-name=\"pastafarianism\" unicode=\"&#xf67b;\" horiz-adv-x=\"640\" \n+d=\"M624.54 100.33c12.4004 -4.71973 18.5996 -18.5801 13.8896 -30.9805c-4.69922 -12.4092 -18.5801 -18.6299 -30.9697 -13.8799c-8.11035 3.08984 -14.3398 0.19043 -31.3896 -11.3594c-13.5508 -9.15039 -30.8301 -20.8408 -52.4199 -20.8408\n+c-7.16992 0 -14.8301 1.28027 -22.9707 4.39062c-32.6602 12.4395 -39.9893 41.3301 -45.3301 62.4395c-2.20996 8.7207 -3.98926 14.4902 -5.94922 18.8701c-16.6201 -13.5996 -36.9307 -25.8701 -61.6201 -34.1602c10.0098 -37 32.2793 -90.8096 60.2197 -90.8096\n+c13.25 0 24 -10.75 24 -24s-10.75 -24 -24 -24c-66.7402 0 -97.0498 88.6299 -107.42 129.14c-6.69043 -0.599609 -13.4199 -1.13965 -20.5801 -1.13965s-13.8896 0.540039 -20.5801 1.13965c-10.3701 -40.5098 -40.6797 -129.14 -107.42 -129.14c-13.25 0 -24 10.75 -24 24\n+s10.75 24 24 24c28.0801 0 50.2998 53.7998 60.2598 90.7998c-24.6895 8.29004 -45.0195 20.5605 -61.6396 34.1699c-1.95996 -4.37988 -3.74023 -10.1494 -5.9502 -18.8701c-5.34961 -21.1094 -12.6699 -50 -45.3301 -62.4395\n+c-8.13965 -3.11035 -15.7998 -4.39062 -22.9697 -4.39062c-21.5898 -0.0195312 -38.8701 11.6807 -52.4199 20.8408c-17.0498 11.5498 -23.2305 14.4492 -31.3906 11.3594c-12.3594 -4.72949 -26.25 1.4707 -30.9697 13.8799\n+c-4.71973 12.3906 1.48047 26.25 13.8701 30.9707c32.6504 12.4697 57.3398 -4.25 75.3701 -16.4502c17.0801 -11.5303 23.2998 -14.4199 31.4102 -11.3604c8.12012 3.10059 10.8301 9.37988 15.8896 29.3799c3.33008 13.1504 7.44043 29.3203 17.9502 42.6504\n+c-2.24023 2.91016 -4.42969 5.78027 -6.37988 8.57031c-10.1699 -9.56055 -23.4102 -17.1104 -41.7002 -17.1104c-33.9502 0 -50.8701 25.7803 -62.0596 42.8301c-10.6006 16.1396 -15 21.1699 -21.9404 21.1699c-13.25 0 -24 10.75 -24 24s10.75 24 24 24\n+c33.96 0 50.8799 -25.7803 62.0596 -42.8301c10.6006 -16.1396 15 -21.1699 21.9404 -21.1699c17.1504 0 37.6797 61.5596 97.2695 101.9l-17.25 34.5c-33.46 2.09961 -60.0195 29.6191 -60.0195 63.5996c0 35.3496 28.6504 64 64 64s64 -28.6504 64 -64\n+c0 -13.0195 -3.94043 -25.0996 -10.5996 -35.21l18.1494 -36.2998c16.9697 4.59961 35.6006 7.50977 56.46 7.50977c20.8604 0 39.4805 -2.91016 56.46 -7.50977l18.1504 36.2998c-6.67969 10.1104 -10.6201 22.1904 -10.6201 35.21c0 35.3496 28.6504 64 64 64\n+s64 -28.6504 64 -64c0 -33.9805 -26.5703 -61.5 -60.0098 -63.5898l-17.25 -34.5c59.7793 -40.4805 79.9502 -101.91 97.2598 -101.91c6.94043 0 11.3398 5.03027 21.9404 21.1699c11.1895 17.0498 28.1094 42.8301 62.0596 42.8301c13.25 0 24 -10.75 24 -24\n+s-10.75 -24 -24 -24c-6.94043 0 -11.3496 -5.03027 -21.9404 -21.1699c-11.1895 -17.0498 -28.1094 -42.8301 -62.0596 -42.8301c-18.29 0 -31.5303 7.5498 -41.7002 17.1201c-1.9502 -2.78027 -4.13965 -5.66016 -6.37988 -8.57031\n+c10.5098 -13.3301 14.6201 -29.5 17.9502 -42.6494c5.05957 -20 7.76953 -26.29 15.8896 -29.3809c8.16016 -3.05957 14.3506 -0.169922 31.4102 11.3604c18.0098 12.2002 42.6699 28.9697 75.3701 16.4502zM448 400c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16\n+s16 7.17969 16 16s-7.17969 16 -16 16zM192 400c-8.82031 0 -16 -7.17969 -16 -16s7.17969 -16 16 -16s16 7.17969 16 16s-7.17969 16 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"peace\" unicode=\"&#xf67c;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM432 192c0 90.5303 -65.7695 165.82 -152 181.03v-165.66l129.43 -103.54c14.3701 26.2002 22.5703 56.2402 22.5703 88.1699zM216 10.9697v114.46\n+l-89.29 -71.4395c24.7998 -21.8203 55.4297 -37.0498 89.29 -43.0205zM280 125.43v-114.449c33.8604 5.96973 64.4902 21.1992 89.29 43.0195zM216 373.03c-86.2305 -15.21 -152 -90.5 -152 -181.03c0 -31.9297 8.2002 -61.9697 22.5703 -88.1699l129.43 103.54v165.66z\" \u002F>\n+    \u003Cglyph glyph-name=\"place-of-worship\" unicode=\"&#xf67f;\" horiz-adv-x=\"640\" \n+d=\"M620.61 81.4502c10.7031 -4.58887 19.3896 -17.7646 19.3896 -29.4102v-100.04c0 -8.83984 -7.16016 -16 -16 -16h-112v192zM0 52.04c0 11.6455 8.68652 24.8213 19.3896 29.4102l108.61 46.5498v-192h-112c-8.83984 0 -16 7.16016 -16 16v100.04zM464.46 201.32\n+c9.63965 -5.78027 15.54 -16.2002 15.54 -27.4404v-237.88h-96v96c0 35.3496 -28.6602 64 -64 64s-64 -28.6504 -64 -64v-96h-96v237.88c0 10.0029 6.96191 22.2959 15.54 27.4404l48.46 29.0801v114.97c0 8.49023 3.37988 16.6299 9.37988 22.6299l75.3105 75.3096\n+c6.23926 6.25 16.3691 6.25 22.6191 0l75.3105 -75.3096c6.00977 -6.00977 9.37988 -14.1396 9.37988 -22.6299v-114.97z\" \u002F>\n+    \u003Cglyph glyph-name=\"poll\" unicode=\"&#xf681;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM160 80v128c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-128c0 -8.83984 7.16016 -16 16 -16h32\n+c8.83984 0 16 7.16016 16 16zM256 80v224c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-224c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16zM352 80v64c0 8.83984 -7.16016 16 -16 16h-32c-8.83984 0 -16 -7.16016 -16 -16v-64\n+c0 -8.83984 7.16016 -16 16 -16h32c8.83984 0 16 7.16016 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"poll-h\" unicode=\"&#xf682;\" horiz-adv-x=\"448\" \n+d=\"M448 16c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352c26.5 0 48 -21.5 48 -48v-352zM112 256h128c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-128c-8.83984 0 -16 -7.16016 -16 -16v-32\n+c0 -8.83984 7.16016 -16 16 -16zM112 160h224c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-224c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16zM112 64h64c8.83984 0 16 7.16016 16 16v32c0 8.83984 -7.16016 16 -16 16h-64\n+c-8.83984 0 -16 -7.16016 -16 -16v-32c0 -8.83984 7.16016 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"pray\" unicode=\"&#xf683;\" horiz-adv-x=\"384\" \n+d=\"M256 320c-35.3496 0 -64 28.6504 -64 64s28.6504 64 64 64s64 -28.6504 64 -64s-28.6504 -64 -64 -64zM225.37 150.25l-24.1504 28.7598l-34.7998 -64.8701l109.86 -109.859c25.4893 -25.4902 5.7998 -68.2803 -28.2803 -68.2803h-208c-22.0898 0 -40 17.9102 -40 40\n+s17.9102 40 40 40h91.5596l-44.8096 34.8896c-42.8799 27.3799 -57.5898 80.1104 -34.1904 123.75l49.3701 92.0303c11.1201 20.6504 32.1807 34.4404 56.3701 36.9199c24.7803 2.58984 48.5605 -6.93945 64 -25.3301l38.9102 -46.3096l57.4404 47\n+c17.1191 13.9697 42.3398 11.4902 56.3096 -5.62012c13.9697 -17.0898 11.4697 -42.2998 -5.62012 -56.2803l-88 -72.0195c-16.9697 -13.8701 -41.9102 -11.5 -55.9697 5.21973z\" \u002F>\n+    \u003Cglyph glyph-name=\"praying-hands\" unicode=\"&#xf684;\" horiz-adv-x=\"640\" \n+d=\"M272 256.09c17.5996 0 32 -14.3994 32 -32v-128c0 -51.8896 -34.8398 -98.0801 -84.75 -112.35l-179.19 -46.6201c-2.64941 -0.69043 -5.36914 -1.03027 -8.05957 -1.03027c-23.4805 0 -32 21.1797 -32 32v96v0.0117188c0 12.7285 9.80176 26.3203 21.8799 30.3389\n+l90.1201 30.04v80.2295c0 18.9805 5.55957 37.3896 16.1201 53.2305l117.26 175.899c0.169922 0.270508 0.589844 0.25 0.790039 0.480469c9.58008 13.5098 27.8496 17.8799 42.2998 9.20996c15.1602 -9.10059 20.0605 -28.75 10.9707 -43.9102l-77.75 -129.59\n+c-8.9707 -14.9199 -13.6904 -32 -13.6904 -49.3906v-76.5498c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v80c0 17.6006 14.4004 32 32 32zM618.12 94.3604c13.0703 -4.36035 21.8799 -16.5801 21.8799 -30.3506v-96c0 -10.8193 -8.51953 -32 -32 -32\n+c-2.67969 0 -5.40039 0.339844 -8.05957 1.03027l-179.19 46.6201c-49.9102 14.2598 -84.75 60.4502 -84.75 112.34v128c0 17.5996 14.4004 32 32 32s32 -14.4004 32 -32v-80c0 -8.83984 7.16016 -16 16 -16s16 7.16016 16 16v76.5498\n+c0 17.3906 -4.71973 34.4697 -13.6904 49.3906l-77.75 129.59c-9.08984 15.1602 -4.18945 34.8193 10.9707 43.9102c14.4502 8.66992 32.7197 4.2998 42.2998 -9.20996c0.200195 -0.240234 0.610352 -0.210938 0.790039 -0.480469l117.26 -175.89\n+c10.5605 -15.8408 16.1201 -34.25 16.1201 -53.2305v-80.2295z\" \u002F>\n+    \u003Cglyph glyph-name=\"quran\" unicode=\"&#xf687;\" horiz-adv-x=\"448\" \n+d=\"M448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\n+c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM301.08 302.18l-11.1904 -22.6494l-24.9893 -3.62988c-2.68066 -0.390625 -3.75 -3.66992 -1.81055 -5.56055l18.0898 -17.6299l-4.26953 -24.8896\n+c-0.360352 -2.11035 1.30957 -3.82031 3.20996 -3.82031c0.5 0 1.01953 0.120117 1.51953 0.379883l22.3604 11.75l22.3604 -11.75c0.5 -0.259766 1.01953 -0.379883 1.51953 -0.379883c1.90039 0 3.57031 1.70996 3.20996 3.82031l-4.26953 24.8896l18.0898 17.6299\n+c1.92969 1.89062 0.859375 5.16992 -1.81055 5.56055l-25 3.62988l-11.1797 22.6494c-0.599609 1.20996 -1.75977 1.82031 -2.91992 1.82031s-2.32031 -0.610352 -2.91992 -1.82031zM243.19 371.19c-63.5205 0 -115.19 -51.6709 -115.19 -115.19\n+c0 -63.5098 51.6699 -115.19 115.18 -115.18c13.6006 0 27.1201 2.46973 40.1904 7.33984c2.67969 0.910156 4.62012 3.43945 4.62012 6.41992c0 3.63965 -2.87012 6.78027 -6.7998 6.78027c-0.650391 0 -3.10059 -0.209961 -4.13086 -0.209961\n+c-52.3096 0 -94.8594 42.5596 -94.8594 94.8594c0 52.3105 42.5498 94.8604 94.8594 94.8604c1.04004 0 3.45996 -0.209961 4.13086 -0.209961c0.633789 -0.237305 1.69727 -0.429688 2.375 -0.429688c3.73926 0 6.77441 3.03516 6.77441 6.77441\n+c0 3.7373 -3.03223 6.77246 -6.76953 6.77539c-13.1201 4.91992 -26.71 7.41016 -40.3799 7.41016zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"search-dollar\" unicode=\"&#xf688;\" \n+d=\"M505.04 5.33984c9.2998 -9.39941 9.2998 -24.5898 -0.0996094 -33.9902l-28.3008 -28.2998c-9.2998 -9.39941 -24.5 -9.39941 -33.8994 0l-99.71 99.6904c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.71 -44 -128.011 -44\n+c-114.909 0 -208.02 93.0898 -208.02 207.979c0 114.891 93.1201 207.98 208.02 207.98c114.9 0 208.011 -93.0898 208.011 -207.98c0 -48.2998 -16.4004 -92.6895 -44 -127.989h16.2998c6.40039 0 12.5 -2.5 17 -7zM208.02 96.04c79.6504 0 144 64.4502 144 143.979\n+c0 79.6406 -64.46 143.98 -144 143.98c-79.6494 0 -144 -64.4502 -144 -143.98c0 -79.6396 64.4609 -143.979 144 -143.979zM235.13 248.58c18.6006 -5.58008 31.5898 -23.4199 31.5898 -43.3896c0 -24.5303 -19.0498 -44.4404 -42.6797 -45.0703v-16.1201\n+c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v16.29c-11.29 0.580078 -22.2705 4.51953 -31.3701 11.3496c-3.90039 2.93066 -4.09961 8.77051 -0.570312 12.1406l11.75 11.21c2.77051 2.63965 6.89062 2.75977 10.1309 0.729492\n+c3.85938 -2.42969 8.25977 -3.71973 12.8193 -3.71973h28.1006c6.5 0 11.7998 5.91992 11.7998 13.1904c0 5.94922 -3.61035 11.1797 -8.77051 12.7295l-45.0098 13.5c-18.5898 5.58008 -31.5801 23.4199 -31.5801 43.3896c0 24.5205 19.0498 44.4404 42.6797 45.0703\n+v16.1201c0 4.41992 3.58008 8 8 8h16c4.4209 0 8 -3.58008 8 -8v-16.29c11.29 -0.580078 22.2705 -4.51953 31.3701 -11.3496c3.90039 -2.93066 4.10059 -8.77051 0.570312 -12.1406l-11.75 -11.21c-2.76953 -2.63965 -6.88965 -2.75977 -10.1299 -0.729492\n+c-3.86035 2.42969 -8.25977 3.71973 -12.8203 3.71973h-28.1094c-6.5 0 -11.8008 -5.91992 -11.8008 -13.1904c0 -5.94922 3.61035 -11.1797 8.77051 -12.7295z\" \u002F>\n+    \u003Cglyph glyph-name=\"search-location\" unicode=\"&#xf689;\" \n+d=\"M505.04 5.33984c9.2998 -9.39941 9.2998 -24.5898 -0.0996094 -33.9902l-28.3008 -28.2998c-9.2998 -9.39941 -24.5 -9.39941 -33.8994 0l-99.71 99.6904c-4.5 4.5 -7 10.5996 -7 17v16.2998c-35.2998 -27.5996 -79.71 -44 -128.011 -44\n+c-114.909 0 -208.02 93.0898 -208.02 207.979c0 114.891 93.1201 207.98 208.02 207.98c114.9 0 208.011 -93.0898 208.011 -207.98c0 -48.2998 -16.4004 -92.6895 -44 -127.989h16.2998c6.40039 0 12.5 -2.5 17 -7zM208.02 96.04c79.6504 0 144 64.4502 144 143.979\n+c0 79.6406 -64.46 143.98 -144 143.98c-79.6494 0 -144 -64.4502 -144 -143.98c0 -79.6396 64.4609 -143.979 144 -143.979zM208.04 336c40.7803 0 73.8398 -33.0498 73.8398 -73.8301c0 -32.9697 -48.2598 -93.0498 -66.75 -114.86\n+c-1.5293 -1.8291 -4.70508 -3.31445 -7.08984 -3.31445s-5.56055 1.48535 -7.08984 3.31445c-18.4902 21.8105 -66.75 81.9004 -66.75 114.86c0 40.7803 33.0596 73.8301 73.8398 73.8301zM208.04 240c13.25 0 24 10.75 24 24c0 13.2598 -10.75 24 -24 24\n+s-24 -10.7402 -24 -24c0 -13.25 10.7402 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"socks\" unicode=\"&#xf696;\" \n+d=\"M214.66 136.99c-52.7402 -39.5605 -69.0498 -110.021 -39.2002 -165.4l-21.8604 -16.3896c-17.2695 -12.9502 -37.4893 -19.2002 -57.5195 -19.2002c-32.8105 0 -65.6904 16.75 -83.9404 48.3301c-24.6494 42.6396 -10.1895 97.5 29.21 127.06l86.6504 64.6104v176h160\n+v-160zM288 416v-32h-160v32c0 17.6699 14.3301 32 32 32h128c2.84961 0 5.40039 -0.919922 8.01953 -1.62012c-4.94922 -9.08008 -8.01953 -19.3301 -8.01953 -30.3799zM480 448c17.6699 0 32 -14.3301 32 -32v-32h-192v32c0 17.6699 14.3301 32 32 32h128zM320 176v176h192\n+v-208v-0.00195312c0 -35.3271 -22.9375 -81.2021 -51.2002 -102.398l-115.2 -86.3994c-17.2695 -12.9502 -37.4893 -19.2002 -57.5195 -19.2002c-32.8105 0 -65.1699 16.75 -83.4199 48.3301c-24.6504 42.6396 -10.1904 97.5 29.21 127.06z\" \u002F>\n+    \u003Cglyph glyph-name=\"square-root-alt\" unicode=\"&#xf698;\" horiz-adv-x=\"576\" \n+d=\"M571.31 196.69c6.25 -6.25 6.25 -16.3809 0 -22.6309l-46.0596 -46.0596l46.0596 -46.0596c6.25 -6.25 6.25 -16.3809 0 -22.6309l-22.6191 -22.6191c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-46.0596 46.0596l-46.0596 -46.0596c-6.25 -6.25 -16.3809 -6.25 -22.6309 0\n+l-22.6191 22.6191c-6.25 6.25 -6.25 16.3809 0 22.6309l46.0596 46.0596l-46.0596 46.0596c-6.25 6.25 -6.25 16.3809 0 22.6309l22.6191 22.6191c6.25 6.25 16.3809 6.25 22.6309 0l46.0596 -46.0596l46.0596 46.0596c6.25 6.25 16.3809 6.25 22.6309 0zM552 448\n+c13.25 0 24 -10.7402 24 -24v-48c0 -13.25 -10.75 -24 -24 -24h-194.97l-97.8105 -374.52c-9.83984 -32.4805 -37.0098 -41.4805 -54.2793 -41.4805c-18.6406 0 -35.9502 8.5 -48.4404 28.2695l-88.8799 163.73h-43.6201c-13.25 0 -24 10.75 -24 24v48\n+c0 13.2598 10.75 24 24 24h81.4697c10.4385 -0.00292969 22.9961 -7.42578 28.0303 -16.5703l58.4102 -106.1l84.79 322.8c3.68945 14.0703 16.4102 23.8701 30.9502 23.8701h244.35z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-and-crescent\" unicode=\"&#xf699;\" \n+d=\"M340.47 -18.3604c8.74023 0 15.1299 -6.96973 15.1299 -15.0596c0 -6.62012 -4.31934 -12.2402 -10.2793 -14.2598c-29.04 -10.8301 -59.0898 -16.3203 -89.3203 -16.3203c-141.16 0 -256 114.84 -256 256s114.84 256 256 256c30.3896 0 60.5801 -5.54004 89.75 -16.4805\n+c6.91992 -2.59961 10.9297 -9.83984 9.46973 -17.0898c-1.41992 -7.04004 -7.62012 -12.0693 -14.75 -12.0693c-1.47949 0 -6.85938 0.459961 -9.17969 0.459961c-116.25 0 -210.82 -94.5703 -210.82 -210.82s94.5703 -210.82 210.82 -210.82\n+c2.29004 0 7.72949 0.459961 9.17969 0.459961zM503.46 234.14c8.16992 -1.17969 11.4297 -11.2197 5.52051 -16.9893l-55.2705 -53.8701l13.0498 -76.0703c1.11035 -6.42969 -4.00977 -11.6602 -9.80957 -11.6602c-1.53027 0 -3.11035 0.370117 -4.64062 1.16992\n+l-68.3096 35.9102l-68.3301 -35.9102c-1.53027 -0.80957 -3.11035 -1.16992 -4.63965 -1.16992c-5.7998 0 -10.9199 5.21973 -9.81055 11.6602l13.0498 76.0703l-55.2695 53.8701c-5.91016 5.76953 -2.65039 15.8096 5.51953 16.9893l76.3809 11.1006l34.1592 69.21\n+c1.83008 3.7002 5.38086 5.5498 8.93066 5.5498s7.09961 -1.84961 8.92969 -5.5498l34.1602 -69.21z\" \u002F>\n+    \u003Cglyph glyph-name=\"star-of-david\" unicode=\"&#xf69a;\" horiz-adv-x=\"464\" \n+d=\"M405.68 192l53.2207 -89.3896c14.4092 -24.21 -3.41016 -54.6104 -32.0107 -54.6104h-106.93l-55.9502 -93.9805c-7.14941 -12.0098 -19.5801 -18.0195 -32.0098 -18.0195s-24.8604 6.00977 -32.0098 18.0195l-55.9502 93.9805h-106.93\n+c-28.6006 0 -46.4199 30.4004 -32.0107 54.6104l53.2207 89.3896l-53.2207 89.3896c-14.4092 24.21 3.41016 54.6104 32.0107 54.6104h106.93l55.9502 93.9805c7.14941 12.0098 19.5801 18.0195 32.0098 18.0195s24.8604 -6.00977 32.0098 -18.0195l55.9502 -93.9805h106.92\n+c28.6006 0 46.4199 -30.4004 32.0098 -54.6104zM392.9 280h-39.6006l19.7998 -33.2598zM340.51 192l-52.3896 88h-112.25l-52.3799 -88l52.3896 -88h112.24zM232 374.28l-22.7803 -38.2803h45.5703zM71.0996 280l19.8008 -33.2598l19.7998 33.2598h-39.6006zM71.0996 104\n+h39.6006l-19.7998 33.2598zM232 9.71973l22.7803 38.2803h-45.5703zM353.29 104h39.6104l-19.8105 33.2598z\" \u002F>\n+    \u003Cglyph glyph-name=\"synagogue\" unicode=\"&#xf69b;\" horiz-adv-x=\"640\" \n+d=\"M70 251.49c5.30957 6.00977 14.6904 6.00977 20 0l38 -43.0703v-272.42h-128v226.07v0.00683594c0 5.5625 2.98828 13.4629 6.66992 17.6328zM633.33 179.71c4.2998 -4.87012 6.66992 -11.1396 6.66992 -17.6396v-226.07h-128v272.42l38 43.0703\n+c5.30957 6.01953 14.6904 6.01953 20 0zM339.99 440.99l128 -102.4c7.58984 -6.07031 12.0098 -15.2695 12.0098 -24.9902v-377.6h-96v96c0 38.8701 -34.6602 69.6504 -74.75 63.1201c-31.4697 -5.12012 -53.25 -34.6699 -53.25 -66.5498v-92.5703h-96v377.6\n+c0 8.49023 5.38086 19.6865 12.0098 24.9902l128 102.4c11.6904 9.34961 28.29 9.34961 39.9805 0zM392.06 225.44l-19.1895 30.5596l19.2002 30.5703c1.97949 3.14941 -0.290039 7.23926 -4 7.23926h-38.9502l-25.1201 39.9805c-1.84961 2.9502 -6.15039 2.9502 -8 0\n+l-25.1201 -40h-38.9395c-3.70996 0 -5.98047 -4.08984 -4 -7.24023l19.1992 -30.5596l-19.1992 -30.5605c-1.98047 -3.14941 0.279297 -7.23926 4 -7.23926h38.9395l25.1201 -39.9805c1.84961 -2.9502 6.15039 -2.9502 8 0l25.1201 39.9902h38.9395\n+c3.70996 0 5.98047 4.08984 4 7.24023z\" \u002F>\n+    \u003Cglyph glyph-name=\"torah\" unicode=\"&#xf6a0;\" horiz-adv-x=\"640\" \n+d=\"M320.05 81.5195l-17.7402 29.6406h35.46zM419.26 247.52l-18.3994 -30.8193l-18.46 30.8193h36.8594zM48 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM220.74 136.5l18.3896 30.8203\n+l18.46 -30.8203h-36.8496zM382.45 136.5l18.4102 30.7998l18.4492 -30.7998h-36.8594zM128 -16v416h384v-416h-384zM194.77 262.13c-1.53711 -2.65625 -2.78516 -7.30176 -2.78516 -10.3711c0 -3.20312 1.35059 -8.02246 3.01562 -10.7588l29.3604 -49l-29.21 -48.8398\n+c-1.6709 -2.77344 -3.02637 -7.65234 -3.02637 -10.8906c0 -11.6523 9.45703 -21.1094 21.1104 -21.1094h0.015625h59.5l29.25 -48.8799c3.33105 -5.6416 11.3516 -10.2207 17.9023 -10.2207h0.0976562c6.64844 0.0136719 14.7842 4.67285 18.1602 10.4004l29.1299 48.7002\n+h59.4697h0.0224609c6.8125 0 15.082 4.80273 18.458 10.7197c1.53418 2.65332 2.7793 7.29297 2.7793 10.3584c0 3.2041 -1.35254 8.02539 -3.01953 10.7617l-29.3701 49l29.2402 48.8496c1.66602 2.77246 3.01758 7.64648 3.01758 10.8809\n+c0 11.6562 -9.46094 21.1182 -21.1182 21.1191h-59.5195l-29.25 48.8604c-3.3252 5.63574 -11.3359 10.21 -17.8799 10.21h-0.0703125h-0.0341797c-6.65137 0 -14.7988 -4.64551 -18.1855 -10.3701l-29.1299 -48.71h-59.4502h-0.0458984\n+c-6.80469 0 -15.0635 -4.79785 -18.4346 -10.71zM592 448c26.5098 0 48 -14.3301 48 -32v-448c0 -17.6699 -21.4902 -32 -48 -32s-48 14.3301 -48 32v448c0 17.6699 21.4902 32 48 32zM320 302.47l17.6797 -29.6201h-35.46zM257.55 247.47l-18.3701 -30.7998\n+l-18.4395 30.7998h36.8096zM287.13 136.47l-33.2295 55.5303l33.1699 55.5195h65.79l33.2295 -55.5195l-33.1699 -55.5303h-65.79z\" \u002F>\n+    \u003Cglyph glyph-name=\"torii-gate\" unicode=\"&#xf6a1;\" \n+d=\"M376.45 416c39.4961 0.00195312 100.223 14.3389 135.55 32v-96c0 -17.6699 -14.3301 -32 -32 -32h-32v-64h48c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-48v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240\n+h-256v-240c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h48v64h-32c-17.6699 0 -32 14.3301 -32 32v96c35.3271 -17.6611 96.0537 -31.998 135.55 -32h240.9zM128 320v-64h96\n+v64h-96zM384 256v64h-96v-64h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"vihara\" unicode=\"&#xf6a7;\" horiz-adv-x=\"640\" \n+d=\"M632.88 47.29c5.41992 -3.61035 7.7002 -9.62012 6.99023 -15.29c-0.620117 -5.00977 -3.56055 -9.75 -8.71973 -12.3301l-55.1504 -19.6699v-48c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48h-160v-48c0 -8.83984 -7.16016 -16 -16 -16h-32\n+c-8.83984 0 -16 7.16016 -16 16v48h-160v-48c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v48l-55.1602 19.6699c-5.14941 2.58008 -8.09961 7.32031 -8.71973 12.3301c-0.700195 5.66016 1.58008 11.6699 7 15.29l88.8799 48.71v64\n+l-55.1602 17.6904c-11.79 5.89941 -11.79 22.7197 0 28.6191l119.16 49.6904v64l-27.3096 16.3096c-7.7207 7.7207 -5.61035 20.7402 4.15918 25.6201l183.15 86.0703l183.15 -86.0801c9.76953 -4.87988 11.8799 -17.9004 4.15918 -25.6201l-27.3096 -16.2998v-64\n+l119.16 -49.6904c11.79 -5.89941 11.79 -22.7197 0 -28.6191l-55.1602 -17.6904v-64zM224 320v-64h192v64h-192zM160 96h320v64h-320v-64z\" \u002F>\n+    \u003Cglyph glyph-name=\"volume-mute\" unicode=\"&#xf6a9;\" \n+d=\"M215.03 376.95c15.0098 15.0098 40.9697 4.49023 40.9697 -16.9697v-335.961c0 -21.4395 -25.9404 -32 -40.9697 -16.9697l-88.9707 88.9502h-102.06c-13.2598 0 -24 10.75 -24 24v144c0 13.2598 10.7402 24 24 24h102.06zM461.64 192l45.6406 -45.6396\n+c6.2998 -6.30078 6.2998 -16.5205 0 -22.8203l-22.8203 -22.8203c-6.2998 -6.2998 -16.5195 -6.2998 -22.8203 0l-45.6396 45.6406l-45.6299 -45.6299c-6.2998 -6.30078 -16.5205 -6.30078 -22.8203 0l-22.8193 22.8193c-6.30078 6.2998 -6.30078 16.5205 0 22.8203\n+l45.6299 45.6299l-45.6406 45.6396c-6.2998 6.30078 -6.2998 16.5205 0 22.8203l22.8203 22.8203c6.2998 6.2998 16.5195 6.2998 22.8203 0l45.6396 -45.6406l45.6396 45.6406c6.30078 6.2998 16.5205 6.2998 22.8203 0l22.8203 -22.8203\n+c6.2998 -6.2998 6.2998 -16.5195 0 -22.8203z\" \u002F>\n+    \u003Cglyph glyph-name=\"yin-yang\" unicode=\"&#xf6ad;\" horiz-adv-x=\"496\" \n+d=\"M248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248s-248 111.03 -248 248s111.03 248 248 248zM248 64c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM248 192c53.0195 0 96 42.9805 96 96s-42.9805 96 -96 96\n+c-106.04 0 -192 -85.96 -192 -192s85.96 -192 192 -192c-53.0195 0 -96 42.9805 -96 96s42.9805 96 96 96zM248 320c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32s-32 14.3301 -32 32s14.3301 32 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"blender-phone\" unicode=\"&#xf6b6;\" horiz-adv-x=\"576\" \n+d=\"M392 384c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h157.82l-17.46 -64h-140.36c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h131.64l-17.46 -64h-114.18c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h105.46\n+l-17.46 -64h-288v352h384l-17.46 -64h-166.54zM158.8 112.99c3.00977 -7.40039 0.200195 -15.8506 -6.68945 -20.0703l-39.4102 -24.1797c-12.5303 -7.68066 -31.7803 -6 -41.6504 4.7998c-94.0996 102.94 -94.6699 258.89 -2.09961 362.49\n+c11.1396 12.4697 29.5596 15.8398 43.8896 7.0498l39.2803 -24.0996c6.87988 -4.2207 9.7002 -12.6807 6.67969 -20.0703l-25.7803 -63.2598c-2.7793 -6.80078 -9.80957 -10.9902 -17.2393 -10.2607l-45.0303 4.41992c-17.6504 -47.9395 -17.2803 -100.779 0 -147.72\n+l45.0303 4.41992c7.43945 0.730469 14.46 -3.4502 17.2393 -10.2598zM480 64c35.3496 0 64 -28.6504 64 -64v-32c0 -17.6699 -14.3301 -32 -32 -32h-352c-17.6699 0 -32 14.3301 -32 32v32c0 35.3496 28.6504 64 64 64h288zM336 -32c17.6699 0 32 14.3301 32 32\n+s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"book-dead\" unicode=\"&#xf6b7;\" horiz-adv-x=\"448\" \n+d=\"M272 312c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16zM448 89.5996c0 -9.59961 -3.2002 -16 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16\n+c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM240 392c-44.2002 0 -80 -28.7002 -80 -64c0 -20.9004 12.7002 -39.2002 32 -50.9004v-13.0996\n+c0 -8.7998 7.2002 -16 16 -16h64c8.7998 0 16 7.2002 16 16v13.0996c19.2998 11.7002 32 30 32 50.9004c0 35.2998 -35.7998 64 -80 64zM124.8 224.7c-1.7002 -4.10059 0.100586 -8.7998 4.2002 -10.5l70.5 -30.2998l-70.4004 -30.1006\n+c-4.09961 -1.7002 -5.89941 -6.39941 -4.19922 -10.5l6.2998 -14.7002c1.7002 -4.09961 6.39941 -5.89941 10.5 -4.19922l98.2998 42.1992l98.2998 -42.0996c4.10059 -1.7002 8.7998 0.0996094 10.5 4.2002l6.2998 14.7002c1.7002 4.09961 -0.0996094 8.7998 -4.19922 10.5\n+l-70.3008 30.0996l70.3008 30.2002c4.09961 1.7002 5.89941 6.39941 4.19922 10.5l-6.2998 14.7002c-1.7002 4.09961 -6.39941 5.89941 -10.5 4.19922l-98.3994 -42.0996l-98.3008 42.0996c-4.09961 1.7002 -8.7998 -0.0996094 -10.5 -4.19922zM380.8 0v64h-284.8\n+c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8zM208 312c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16s16 -7.2002 16 -16s-7.2002 -16 -16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"campground\" unicode=\"&#xf6bb;\" horiz-adv-x=\"640\" \n+d=\"M624 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-608c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h24.6797l239.79 330.25l-53.4102 73.5498c-5.19922 7.15039 -3.60938 17.1602 3.54004 22.3506l25.8809 18.7998\n+c7.14941 5.18945 17.1592 3.59961 22.3496 -3.5498l41.1699 -56.7002l41.1602 56.6895c5.2002 7.16016 15.2002 8.74023 22.3496 3.55078l25.9004 -18.79c7.14941 -5.19043 8.72949 -15.2002 3.54004 -22.3506l-53.4102 -73.5498l239.78 -330.25h24.6797zM320 160\n+l-116.36 -160h232.721z\" \u002F>\n+    \u003Cglyph glyph-name=\"cat\" unicode=\"&#xf6be;\" \n+d=\"M290.59 256c11.8906 -58.3496 63.6006 -102.4 125.41 -102.4c11.1104 0 21.71 1.87012 32 4.54004v-206.14c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v144l-128 -96h32c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16\n+h-176c-35.2998 0 -64 28.7002 -64 64v256c0 17.6396 -14.3604 32 -32 32c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32c52.9404 0 96 -43.0596 96 -96v-85.9502c55.7695 83.9697 142.41 85.9502 162.59 85.9502zM448 352l64 64v-134.4c0 -53.0195 -42.9805 -96 -96 -96\n+s-96 42.9805 -96 96v134.4l64 -64h64zM376 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM456 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"chair\" unicode=\"&#xf6c0;\" horiz-adv-x=\"448\" \n+d=\"M112 320v-128h-48v128c0 70.7002 57.2998 128 128 128h64c70.7002 0 128 -57.2998 128 -128v-128h-48v128c0 29.5 -16.2002 55 -40 68.9004v-196.9h-48v208h-48v-208h-48v196.9c-23.7998 -13.9004 -40 -39.4004 -40 -68.9004zM446.3 106.1\n+c6.90039 -20.6992 -8.5 -42.0996 -30.2998 -42.0996v-112c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v112h-256v-112c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v112c-21.7998 0 -37.2002 21.4004 -30.4004 42.0996l10.7002 32\n+c4.40039 13.1006 16.6006 21.9004 30.4004 21.9004h362.5c13.7998 0 26 -8.7998 30.3994 -21.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-moon\" unicode=\"&#xf6c3;\" horiz-adv-x=\"576\" \n+d=\"M342.8 95.2998c40.9004 -3.5 73.2002 -37.3994 73.2002 -79.2998c0 -44.2002 -35.7998 -80 -80 -80h-240c-53 0 -96 43 -96 96c0 41.9004 27.0996 77.2002 64.5996 90.2998c-0.0996094 1.90039 -0.599609 3.7002 -0.599609 5.7002c0 53 43 96 96 96\n+c36.2002 0 67.4004 -20.2998 83.7002 -49.9004c11.5 11 27.0996 17.9004 44.2998 17.9004c35.2998 0 64 -28.7002 64 -64c0 -12 -3.5 -23.0996 -9.2002 -32.7002zM565.3 149.6c8.2002 1.60059 14 -8 8.7002 -14.5c-33.4004 -41.0996 -82.7002 -67 -137.1 -70.3994\n+c-11.1006 23.0996 -29.9004 41.7998 -53.5 52.5996c0.399414 3.5 0.599609 7.10059 0.599609 10.7002c0 52.9004 -43.0996 96 -96 96c-12.7002 0 -25 -2.5 -36.4004 -7.2002c-5.09961 5.2998 -10.7998 9.90039 -16.6992 14.2002c-1.10059 8.2002 -1.80078 16.5 -1.80078 25\n+c0 106.1 86 192 191.9 192c11.7002 0 23.4004 -1.09961 35.0996 -3.2002c8.2002 -1.59961 10.1006 -12.5996 2.80078 -16.7002c-47.1006 -26.7998 -76.1006 -76.5996 -76.1006 -130.8c0 -94 85.4004 -165.399 178.5 -147.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-sun\" unicode=\"&#xf6c4;\" horiz-adv-x=\"640\" \n+d=\"M575.2 122.3c37.5996 -13 64.7998 -48.2998 64.7998 -90.3994c0 -53 -43 -96 -96 -96h-272c-53 0 -96 43 -96 96c0 50.5996 39.2998 91.5996 88.9004 95.2998c-0.200195 2.89941 -0.900391 5.7002 -0.900391 8.7002c0 61.8994 50.2002 112 112 112\n+c45.4004 0 84.2998 -27.2002 101.9 -66c9.89941 6.19922 21.5 10 34.0996 10c35.2998 0 64 -28.7002 64 -64c0 -1.90039 -0.599609 -3.7002 -0.799805 -5.60059zM144.8 144.9c10.6006 -10.6006 22.9004 -18.6006 36 -24c-9.59961 -9.80078 -17.5 -21.1006 -23.5996 -33.5\n+l-76.1006 -25.3008c-11.8994 -3.89941 -23.1992 7.30078 -19.1992 19.2002l29.2998 87.7998l-82.7998 41.4004c-11.2002 5.59961 -11.2002 21.5 0 27.0996l82.7998 41.5l-29.2998 87.8008c-3.90039 11.7998 7.39941 23.0996 19.1992 19.1992l87.9004 -29.2998\n+l41.4004 82.7998c5.59961 11.2002 21.5996 11.2002 27.0996 0l41.5 -82.7998l87.7998 29.2998c11.9004 3.90039 23.2002 -7.2998 19.2002 -19.1992l-29.7998 -88.9004c-10.6006 -1.5 -20.9004 -3.7998 -30.7002 -7.5c-5.40039 11.7998 -12.5996 23 -22.2998 32.7002\n+c-43.7002 43.7002 -114.7 43.7002 -158.4 0c-43.7002 -43.6006 -43.7002 -114.601 0 -158.3zM140 224.1c0 46.3008 37.7002 83.9004 84 83.9004c34 0 63.2998 -20.4004 76.5 -49.5c-36.4004 -22.5 -62 -60.7002 -67.4004 -105\n+c-8.89941 -2.90039 -17.1992 -7 -25.1992 -11.7002c-38.6006 7.5 -67.9004 41.5 -67.9004 82.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-d20\" unicode=\"&#xf6cf;\" horiz-adv-x=\"480\" \n+d=\"M106.75 232.94l108.64 -190.101l-208.26 22.0703c-5.83008 0.639648 -9.00977 7.13965 -5.92969 12.1396zM7.41016 132.57c-2.12012 -3.44043 -7.41016 -1.94043 -7.41016 2.08984v162.81c0 3.11035 3.38965 5.03027 6.05957 3.43066l76.6406 -45.9805zM18.25 24.4004\n+c-4.03027 1.97949 -2.25 8.06934 2.2002 7.56934l203.55 -22.2998v-65.6699c0 -5.83008 -6.0498 -9.70996 -11.3496 -7.25977zM99.4697 282.18l-81.5293 48.6904c-2.52051 1.51953 -2.60059 5.16016 -0.130859 6.78027l150.811 98.6094\n+c7.18945 4.11035 15.1201 -4.08008 10.7803 -11.1396zM240 272h-109.21l95.5801 168.38c3.12988 5.08008 8.37988 7.62012 13.6299 7.62012s10.5 -2.54004 13.6299 -7.62012l95.5801 -168.38h-109.21zM473.94 300.9c2.66992 1.59961 6.05957 -0.320312 6.05957 -3.43066\n+v-162.81c0 -4.04004 -5.2998 -5.54004 -7.41016 -2.10059l-75.29 122.351zM380.53 282.18l-79.9307 142.94c-4.33984 7.05957 3.59082 15.25 10.7803 11.1396l150.811 -98.5996c2.46973 -1.62012 2.39941 -5.25977 -0.130859 -6.78027zM459.55 31.9697\n+c4.4502 0.5 6.23047 -5.58984 2.2002 -7.55957l-194.4 -87.6602c-5.2998 -2.4502 -11.3496 1.41992 -11.3496 7.25977v65.6699zM373.25 232.94l105.56 -155.891c3.08008 -5 -0.0996094 -11.4902 -5.92969 -12.1396l-208.26 -22.0703zM240 240h100.43l-100.43 -175.75\n+l-100.43 175.75h100.43z\" \u002F>\n+    \u003Cglyph glyph-name=\"dice-d6\" unicode=\"&#xf6d1;\" horiz-adv-x=\"448\" \n+d=\"M422.19 338.05c5.3291 -3.24023 5.2998 -11.2695 -0.0507812 -14.46l-198.14 -118.14l-198.13 118.14c-5.35059 3.19043 -5.37988 11.2305 -0.0605469 14.46l165.971 100.88c19.9102 12.1006 44.5195 12.1006 64.4297 0zM436.03 293.42\n+c5.33008 3.17969 11.9697 -0.839844 11.9697 -7.25v-197.7c0 -23.7598 -12.1104 -45.7393 -31.79 -57.7002l-152.16 -92.4795c-10.6602 -6.48047 -24.0498 1.5498 -24.0498 14.4297v223.82zM0 286.17c0 6.41016 6.63965 10.4297 11.9697 7.25l196.03 -116.88v-223.81\n+c0 -12.8906 -13.3799 -20.9102 -24.0498 -14.4307l-152.16 92.4697c-19.6797 11.9609 -31.79 33.9307 -31.79 57.7002v197.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"dog\" unicode=\"&#xf6d3;\" \n+d=\"M496 352c8.83984 0 16 -7.16016 16 -16v-32c0 -35.3496 -28.6504 -64 -64 -64h-32v-35.5801l-128 45.71v149.84c0 14.25 17.2305 21.3906 27.3203 11.3105l27.2793 -27.2803h53.6201c10.917 -0.000976562 23.7383 -7.92578 28.6201 -17.6904l7.16016 -14.3096h64z\n+M384 304c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM96 224h170.05l149.95 -53.5498v-218.45c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v112h-160v-112c0 -8.83984 -7.16016 -16 -16 -16h-64\n+c-8.83984 0 -16 7.16016 -16 16v213.9c-37.1699 13.25 -64 48.4395 -64 90.0996c0 17.6699 14.3301 32 32 32s32 -14.3301 32 -32c0 -17.6396 14.3604 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"dragon\" unicode=\"&#xf6d5;\" horiz-adv-x=\"640\" \n+d=\"M18.3203 192.22c-15.96 -2.2793 -24.8906 17.8105 -12.5107 28.1406l117.4 116.34c21.7705 18.5996 53.2402 20.4697 77.0596 4.58984l119.73 -87.5996v-42.2705c0 -28.9102 5.29004 -56.9795 14.7305 -83.3799h-222.7c-14.25 0 -21.3906 17.2295 -11.3105 27.3096\n+l91.2803 68.6904zM575.19 158.12c41.9092 -20.96 67.1592 -64.0801 64.6396 -111.36c-3.37988 -63.2002 -59.7002 -110.77 -122.99 -110.76h-499.08c-9.80957 0 -17.7598 8 -17.7598 17.7998c0 8.32031 5.78027 15.5303 13.9004 17.3301\n+c89.54 19.9004 238.51 54.1006 434.1 60.9102c-59.9697 39.9902 -96 107.3 -96 179.38v108.62l-59.5801 24.8496c-5.90039 2.9502 -5.90039 11.3604 0 14.3105l59.5801 24.8398l-61.6396 50.3496c-5.04004 5.04004 -1.4707 13.6104 5.65918 13.6104h237.45\n+c10.0703 0 19.5498 -4.7002 25.6006 -12.7598l74.5293 -99.3799c3.53223 -4.71094 6.39844 -13.3115 6.39844 -19.1992c0 -4.16992 -1.51367 -10.5811 -3.37793 -14.3115l-14.3105 -28.6191c-4.88086 -9.76465 -17.7031 -17.6895 -28.6191 -17.6904h-30.9707\n+c-8.48926 0 -16.6299 3.37012 -22.6299 9.37012l-28.0898 22.6299h-64v-36.6904c0.00195312 -16.3701 11.8877 -35.5986 26.5303 -42.9199zM489.18 381.75c-4.33008 -17.1396 8.56055 -28.96 21.5205 -29.6699c11.6602 -0.629883 21.3799 7.34961 24.1299 18.2598z\" \u002F>\n+    \u003Cglyph glyph-name=\"drumstick-bite\" unicode=\"&#xf6d7;\" \n+d=\"M462.8 398.43c34.3203 -34.2793 50.4307 -79.5996 49.1299 -124.56c-41.9795 22.6602 -94.3594 17.5596 -128.739 -16.7998c-40.8809 -40.8398 -40.6904 -107.181 -1.05078 -151.07c-16.2383 -5.52246 -43.3389 -10.0049 -60.4912 -10.0049\n+c-0.385742 0 -1.0127 0.00195312 -1.39844 0.00488281h-85.8896l-40.6104 -40.5596c-9.71973 -9.75 -11.0898 -24.0205 -6 -36.75c2.38477 -5.95898 4.32031 -16.0049 4.32031 -22.4229c0 -33.3135 -27.0371 -60.3496 -60.3506 -60.3496\n+c-13.8428 0 -33.0039 7.96191 -42.7695 17.7725c-15.2803 15.2695 -19.6006 36.5 -15.1006 56.0996c-19.6094 -4.49023 -40.8496 -0.179688 -56.1191 15.0703c-9.77148 9.75684 -17.7021 28.8828 -17.7021 42.6914c0 33.3018 27.0273 60.3301 60.3301 60.3301\n+c6.40234 0 16.4248 -1.92773 22.3721 -4.30176c12.7793 -5.07031 27.0791 -3.69043 36.7793 6l40.6201 40.5898v85.8301c0 64 27.6904 107 63.1699 142.43c27.3887 27.3604 81.0371 49.5664 119.75 49.5664c38.7139 0 92.3613 -22.2061 119.75 -49.5664z\" \u002F>\n+    \u003Cglyph glyph-name=\"dungeon\" unicode=\"&#xf6d9;\" \n+d=\"M128.73 252.68c6.58984 -4.12012 8.89941 -12.2393 6.33984 -19.5801c-3 -8.60938 -5.15039 -17.6094 -6.24023 -26.9395c-0.929688 -7.91016 -7.0498 -14.1602 -15.0098 -14.1602h-97.1299c-9.10059 0 -16.7402 7.62988 -16.1504 16.7197\n+c1.66016 25.7793 11.7178 65.7725 22.4502 89.2705c3.93945 8.62012 14.8896 11.4697 22.9297 6.4502zM319.03 440c9.16992 -2.36035 13.9102 -12.5996 10.3896 -21.3896l-37.4697 -104.03c-2.28027 -6.34961 -8.2998 -10.5801 -15.0498 -10.5801h-41.8008\n+c-6.2041 0.00195312 -12.9473 4.74219 -15.0498 10.5801l-37.4697 104.03c-3.52051 8.79004 1.21973 19.04 10.3896 21.3896c20.1699 5.17969 41.2607 8 63.0303 8s42.8604 -2.82031 63.0303 -8zM112 160c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16\n+h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM112 32c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM189.31 315.67\n+c2.85059 -7.12012 -0.0195312 -14.8799 -6.2998 -19.29c-6 -4.2002 -11.6094 -8.89941 -16.79 -14.0498c-5.4502 -5.41016 -13.5996 -6.86035 -20.1094 -2.79004l-82.9307 51.8301c-8.06934 5.04004 -10.2793 16.2002 -4.21973 23.5195\n+c16.7148 20.1758 48.7969 47.0068 71.6104 59.8906c8.29004 4.67969 18.8896 0.519531 22.4199 -8.31055zM398.18 192c-7.95996 0 -14.0801 6.25 -15.0098 14.1602c-1.08984 9.32031 -3.22949 18.3301 -6.24023 26.9395c-2.55957 7.34082 -0.25 15.46 6.33984 19.5801\n+l82.8105 51.7607c8.04004 5.01953 18.9902 2.16992 22.9297 -6.4502c10.7334 -23.498 20.791 -63.4902 22.4502 -89.2705c0.589844 -9.08984 -7.0498 -16.7197 -16.1504 -16.7197h-97.1299zM453.03 354.89c6.06934 -7.31934 3.84961 -18.4795 -4.2207 -23.5098\n+l-82.9297 -51.8301c-6.50977 -4.06934 -14.6699 -2.62012 -20.1104 2.79004c-5.17969 5.15039 -10.7891 9.85059 -16.7891 14.0498c-6.28027 4.40039 -9.15039 12.1602 -6.30078 19.2803l36.3203 90.7998c3.54004 8.83008 14.1396 12.9902 22.4199 8.31055\n+c22.8135 -12.8838 54.8945 -39.7148 71.6104 -59.8906zM496 160c8.83984 0 16 -7.16016 16 -16v-64c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM496 32c8.83984 0 16 -7.16016 16 -16v-64\n+c0 -8.83984 -7.16016 -16 -16 -16h-96c-8.83984 0 -16 7.16016 -16 16v64c0 8.83984 7.16016 16 16 16h96zM240 270.38c5.23047 0.889648 10.5195 1.62012 16 1.62012s10.7695 -0.730469 16 -1.62012v-294.38c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8\n+v294.38zM176 228.87c8.16016 12.2998 19.2197 22.3203 32 29.7695v-282.64c0 -4.41992 -3.58008 -8 -8 -8h-16c-4.41992 0 -8 3.58008 -8 8v252.87zM304 258.64c12.7803 -7.44922 23.8398 -17.4697 32 -29.7695v-252.87c0 -4.41992 -3.58008 -8 -8 -8h-16\n+c-4.41992 0 -8 3.58008 -8 8v282.64z\" \u002F>\n+    \u003Cglyph glyph-name=\"file-csv\" unicode=\"&#xf6dd;\" horiz-adv-x=\"384\" \n+d=\"M224 312c0 -13.2002 10.7998 -24 24 -24h136v-328c0 -13.2998 -10.7002 -24 -24 -24h-336c-13.2998 0 -24 10.7002 -24 24v464c0 13.2998 10.7002 24 24 24h200v-136zM128 168v16c0 4.41992 -3.58008 8 -8 8h-8c-26.5098 0 -48 -21.4902 -48 -48v-32\n+c0 -26.5098 21.4902 -48 48 -48h8c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-8c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h8c4.41992 0 8 3.58008 8 8zM172.27 64c23.3906 0 42.4004 17.3301 42.3906 38.6201\n+c0 10.6602 -4.86035 20.9199 -13.3301 28.1396l-21.8896 18.7705c-1.37012 1.17969 -2.12012 2.54004 -2.12012 3.83984c0 3.12012 4.45996 6.62012 10.4102 6.62012h12.2695c4.41992 0 8 3.58008 8 8v16c0 4.41992 -3.58008 8 -8 8h-12.25\n+c-23.3896 0 -42.4102 -17.3203 -42.4102 -38.6201c0 -10.6602 4.86035 -20.9199 13.3301 -28.1396l21.8896 -18.7705c1.37012 -1.17969 2.12012 -2.54004 2.12012 -3.83984c0 -3.12012 -4.45996 -6.62012 -10.4102 -6.62012h-12.2695c-4.41992 0 -8 -3.58008 -8 -8v-16\n+c0 -4.41992 3.58008 -8 8 -8h12.2695zM256 184c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-20.7998c0 -35.4805 12.8799 -68.8906 36.2803 -94.0898c3.01953 -3.25 7.26953 -5.11035 11.7197 -5.11035s8.7002 1.86035 11.7197 5.11035\n+c23.4004 25.1992 36.2803 58.6094 36.2803 94.0898v20.7998c0 4.41992 -3.58008 8 -8 8h-16c-4.41992 0 -8 -3.58008 -8 -8v-20.7998c0 -20.2705 -5.7002 -40.1807 -16 -56.8799c-10.2998 16.71 -16 36.6094 -16 56.8799v20.7998zM377 343c4.5 -4.5 7 -10.5996 7 -16.9004\n+v-6.09961h-128v128h6.09961c6.40039 0 12.5 -2.5 17 -7z\" \u002F>\n+    \u003Cglyph glyph-name=\"fist-raised\" unicode=\"&#xf6de;\" horiz-adv-x=\"384\" \n+d=\"M255.98 288h-48.0303c-5.62988 0 -10.9502 -1.15039 -15.9697 -2.92969v146.93c0 8.83984 7.15918 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-144zM383.98 192.01l0.0195312 -88.2197v-0.0107422c0 -21.9551 -12.5977 -52.373 -28.1201 -67.8994l-35.9102 -35.9199\n+v-63.96h-255.979v64l-26.5 26.5098c-24.0098 24.0098 -37.4902 56.5605 -37.4902 90.5098v77.9307c5.03027 -1.7998 10.3604 -2.9502 16 -2.9502h32c12.3301 0 23.4805 4.80957 32 12.4902c8.50977 -7.66992 19.6602 -12.4805 32 -12.4805h32\n+c7.91016 0 15.2803 2.11035 21.8701 5.52051c7.46973 -16.3301 21.5996 -28.9404 38.8701 -34.4502c-17.1104 -14.8203 -31.5801 -34.4805 -47.3105 -58.0801l-6.30957 -9.46973c-0.742188 -1.1123 -1.34375 -3.09961 -1.34375 -4.43652\n+c0 -2.36328 1.59668 -5.34375 3.56348 -6.65332l13.3105 -8.88086c1.11133 -0.741211 3.09863 -1.34375 4.43555 -1.34375c2.36328 0 5.34473 1.59668 6.6543 3.56445l6.30957 9.46973c31.8906 47.8398 51.5303 70.2695 96.0498 72.5498\n+c4.29004 0.219727 7.88086 3.70996 7.88086 8v16.2002c0 4.41992 -3.52051 8 -13.2002 8h-35.2607c-26.2695 0 -47.5693 21.3203 -47.5693 47.5898v0.560547c0 8.7793 7.12012 15.8496 15.8994 15.8496h112.141c35.3301 0 63.9795 -28.6504 63.9902 -63.9902zM351.97 282.1\n+c-10.0596 3.59082 -20.7197 5.90039 -32 5.90039h-32v112c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-117.9zM16 224c-8.83984 0 -16 7.16016 -16 16v128c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-128\n+c0 -8.83984 -7.16016 -16 -16 -16h-32zM111.99 224c-8.83984 0 -16 7.16016 -16 16v160c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-160c0 -8.83984 -7.16016 -16 -16 -16h-32z\" \u002F>\n+    \u003Cglyph glyph-name=\"ghost\" unicode=\"&#xf6e2;\" horiz-adv-x=\"384\" \n+d=\"M186.1 447.91c108.73 3.25977 197.9 -83.9102 197.9 -191.91v-271.97c0 -14.25 -17.2305 -21.3906 -27.3096 -11.3105l-24.9209 18.5303c-6.65918 4.95996 -16 3.99023 -21.5098 -2.20996l-42.9502 -48.3496c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-40.7197 45.8496\n+c-6.36035 7.16992 -17.5498 7.16992 -23.9199 0l-40.7197 -45.8496c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-42.9502 48.3496c-5.50977 6.2002 -14.8506 7.16016 -21.5098 2.20996l-24.9209 -18.5303c-10.0791 -10.0801 -27.3096 -2.9502 -27.3096 11.3105v263.92\n+c0 105.13 81.0098 196.81 186.1 199.96zM128 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32zM256 224c17.6699 0 32 14.3301 32 32s-14.3301 32 -32 32s-32 -14.3301 -32 -32s14.3301 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"hammer\" unicode=\"&#xf6e3;\" horiz-adv-x=\"576\" \n+d=\"M571.31 254.06c6.25 -6.25 6.25 -16.3799 0.0205078 -22.6191l-90.5098 -90.5107c-6.25 -6.25 -16.3799 -6.25 -22.6299 0l-22.6309 22.6299c-6.25 6.25 -6.25 16.3809 0 22.6309l11.3105 11.3096l-28.9004 28.9004\n+c-21.3096 -5.63086 -44.8994 -0.360352 -61.6094 16.3496l-49.1406 49.1396c-12.0098 12 -18.75 28.2803 -18.75 45.25v18.75l-90.5098 45.25c62.4902 62.4805 163.8 62.4805 226.28 0l45.25 -45.25c16.71 -16.71 21.9795 -40.2998 16.3496 -61.6094l28.9004 -28.9004\n+l11.3096 11.3105c6.25 6.25 16.3799 6.25 22.6299 0zM284.59 269.26l49.1406 -49.1396c3.53906 -3.54004 7.47949 -6.5 11.4395 -9.41016l-238.13 -255.07c-23.8799 -25.5801 -64.2002 -26.2695 -88.9297 -1.5293c-24.7305 24.7393 -24.04 65.0498 1.5293 88.9297\n+l255.101 238.17c3.00977 -4.16016 6.14941 -8.25 9.84961 -11.9502z\" \u002F>\n+    \u003Cglyph glyph-name=\"hanukiah\" unicode=\"&#xf6e6;\" horiz-adv-x=\"640\" \n+d=\"M232 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM168 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM392 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM456 288h16\n+c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM544 280v-120h-32v120c0 4.41992 3.58008 8 8 8h16c4.41992 0 8 -3.58008 8 -8zM104 288h16c4.41992 0 8 -3.58008 8 -8v-120h-32v120c0 4.41992 3.58008 8 8 8zM624 288c8.83984 0 16 -7.16016 16 -16\n+v-112c0 -53.0195 -42.9805 -96 -96 -96h-192v-64h176c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-416c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h176v64h-192c-53.0195 0 -96 42.9805 -96 96v112c0 8.83984 7.16016 16 16 16\n+h32c8.83984 0 16 -7.16016 16 -16v-112c0 -17.6699 14.3301 -32 32 -32h192v192c0 8.83984 7.16016 16 16 16h32c8.83984 0 16 -7.16016 16 -16v-192h192c17.6699 0 32 14.3301 32 32v112c0 8.83984 7.16016 16 16 16h32zM608 320c-13.25 0 -24 11.9502 -24 26.6699\n+s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM32 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM320 368\n+c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM112 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699z\n+M176 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM240 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301\n+c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM400 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM464 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301\n+s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699zM528 320c-13.25 0 -24 11.9502 -24 26.6699s24 53.3301 24 53.3301s24 -38.5996 24 -53.3301c0 -14.7295 -10.75 -26.6699 -24 -26.6699z\" \u002F>\n+    \u003Cglyph glyph-name=\"hat-wizard\" unicode=\"&#xf6e8;\" \n+d=\"M496 0c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-480c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h480zM192 64l16 -32h-144l110.96 249.66c9.4043 21.1611 33.3545 47.6611 53.46 59.1494l187.58 107.19l-56.2998 -168.92\n+c-1.81543 -5.43945 -3.28809 -14.5078 -3.28809 -20.2412c0 -7.25098 2.31934 -18.5449 5.17773 -25.209l86.4102 -201.63h-208l16 32l64 32l-64 32l-32 64l-32 -64l-64 -32zM256 288l-32 -16l32 -16l16 -32l16 32l32 16l-32 16l-16 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"hiking\" unicode=\"&#xf6ec;\" horiz-adv-x=\"384\" \n+d=\"M80.9502 -24.2305l34.5596 138.221l52.7803 -52.7803l-25.2402 -100.97c-3.64941 -14.5303 -16.6895 -24.2305 -31.0195 -24.2305c-2.58008 0 -5.19043 0.290039 -7.7998 0.950195c-17.1406 4.28027 -27.5605 21.6504 -23.2803 38.8096zM95.8398 171.89\n+c-2.18945 -8.41992 -11.0801 -13.54 -19.8701 -11.4395l-63.5596 15.25c-8.78027 2.10938 -14.1104 10.6396 -11.9199 19.0596l25.2695 98.1299c10.9707 42.1006 55.4404 67.6904 99.3203 57.1699c8.78027 -2.10938 14.1104 -10.6396 11.9199 -19.0596zM368 288\n+c8.83984 0 16 -7.16016 15.9902 -16v-320.01c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v240h-48c-8.48047 0 -16.6201 3.37988 -22.6201 9.37988l-22.4297 22.4297l-19.8906 -79.5693\n+c-0.129883 -0.520508 -0.469727 -0.910156 -0.620117 -1.41016l46.8203 -46.8203c12.0898 -12.0898 18.75 -28.1602 18.75 -45.25v-82.75c0 -17.6699 -14.3301 -32 -32 -32s-32 14.3301 -32 32v82.75l-86.6201 86.6201c-5.17383 5.1748 -9.37402 15.3154 -9.37402 22.6338\n+c0 2.17285 0.427734 5.64746 0.954102 7.75586l26.9199 107.721c6.56055 26.2197 30.0098 44.5195 57.0303 44.5195c15.7002 0 30.4697 -6.11035 41.5596 -17.2197l46.7803 -46.7803h34.75v16c0 8.83984 7.16016 16 16 16h16zM240 352c-26.5098 0 -48 21.4902 -48 48\n+s21.4902 48 48 48s48 -21.4902 48 -48s-21.4902 -48 -48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"hippo\" unicode=\"&#xf6ed;\" horiz-adv-x=\"640\" \n+d=\"M581.12 351.8c34.0898 -0.189453 58.8799 -33.6895 58.8799 -67.7803v-92.0195c0 -17.6699 -14.3301 -32 -32 -32v-32c0 -8.83984 -7.16016 -16 -16 -16h-32c-8.83984 0 -16 7.16016 -16 16v32h-128v-176c0 -8.83984 -7.16016 -16 -16 -16h-64\n+c-8.83984 0 -16 7.16016 -16 16v70.79c-32.3496 -14.3604 -70.7197 -22.79 -112 -22.79s-79.6504 8.42969 -112 22.79v-70.79c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v240c0 88.3604 85.96 160 192 160\n+c49.2402 0 94.0098 -15.5801 128 -40.9805v48.9805c0 13.2598 10.75 24 24 24h16c13.25 0 24 -10.7402 24 -24v-13.8799c10.0498 3.58008 20.7197 5.87988 32 5.87988c39.8301 0 73.9805 -24.2695 88.5195 -58.8203c24.1006 9.04004 48.9307 26.7705 76.6006 26.6201z\n+M448 272c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"horse\" unicode=\"&#xf6f0;\" horiz-adv-x=\"576\" \n+d=\"M575.92 371.4l0.0605469 -77.71v-0.0292969c0 -11.9609 -9.01465 -25.2715 -20.1201 -29.7109l-32.5508 -13.0205c-15.4395 -6.17969 -33.04 0.5 -40.4893 15.3701l-18.9004 37.7002l-16 7.11035v-102.471c0.00976562 -0.219727 0.0800781 -0.419922 0.0800781 -0.639648\n+c0 -30.4697 -12.2598 -58.0303 -32 -78.2197v-177.78c0 -8.83984 -7.16016 -16 -16 -16h-64c-8.83984 0 -16 7.16016 -16 16v150.4l-133.97 22.3301l-23.8398 -63.5908l26.3096 -105.26c2.53027 -10.0996 -5.11035 -19.8799 -15.5195 -19.8799h-65.9609h-0.000976562\n+c-6.89453 0 -13.8428 5.42969 -15.5088 12.1201l-24.8496 99.4102c-1.05664 4.2207 -1.91406 11.1777 -1.91406 15.5293c0 6.40332 1.8252 16.4648 4.07422 22.46l25.7197 68.6006c-18.7002 17.5195 -30.54 42.2402 -30.54 69.8799\n+c0 2.62988 0.570312 5.09961 0.780273 7.67969c-9.91016 -7.29004 -16.7803 -18.46 -16.7803 -31.6797v-56c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v56c0 48.5303 39.4697 88 88 88v-1.11035c17.5996 20.1299 43.1602 33.1104 72 33.1104\n+h159.92c0 70.6904 57.3105 128 128 128h119.98c5.05957 0 8.94922 -4.67969 7.92969 -9.63965c-2.67969 -13.1699 -11.1201 -23.8203 -22.1797 -30.6602c5.10938 -5.37988 9.90918 -10.4697 13.6895 -14.5c5.56055 -5.93066 8.57031 -13.6699 8.58008 -21.7998zM511.92 352\n+c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"house-damage\" unicode=\"&#xf6f1;\" horiz-adv-x=\"576\" \n+d=\"M288 333.04l218.74 -192.94c1.54004 -1.37988 3.55957 -2.04004 5.25977 -3.19922v-184.9c0 -8.83984 -7.16016 -16 -16 -16h-176.19l-39.9199 55.25l104.11 64l-148.05 136.78l60.1602 -119.221l-104.11 -64l37.2305 -72.8096h-149.23c-8.83984 0 -16 7.16016 -16 16\n+v184.94c1.78027 1.20996 3.84961 1.88965 5.46973 3.34961zM570.69 211.72c6.5791 -5.89941 7.11914 -16.0195 1.21973 -22.5898l-21.4004 -23.8203c-5.91016 -6.56934 -16.0293 -7.10938 -22.5996 -1.20996l-229.32 202.271c-6.0498 5.33008 -15.1201 5.33008 -21.1699 0\n+l-229.32 -202.28c-6.58008 -5.91016 -16.6992 -5.35938 -22.5996 1.20996l-21.4004 23.8203c-5.90918 6.58008 -5.35938 16.6895 1.20996 22.5996l255.99 226.011c7.60059 6.85938 17.1406 10.2793 26.7002 10.2695s19.1201 -3.4502 26.75 -10.3096l101.25 -89.3809v51.6904\n+c0 8.83984 7.16016 16 16 16h64c8.83984 0 16 -7.16016 16 -16v-136.45z\" \u002F>\n+    \u003Cglyph glyph-name=\"hryvnia\" unicode=\"&#xf6f2;\" horiz-adv-x=\"384\" \n+d=\"M368 208h-99.7002l-34.6699 -32h134.37c8.83984 0 16 -7.16016 16 -16v-32c0 -8.83984 -7.16016 -16 -16 -16h-203.7l-29.4902 -27.2197c-4.3291 -4 -6.80957 -9.66992 -6.80957 -15.5801c0 -11.6807 9.50977 -21.2002 21.2002 -21.2002h83.6299h0.00195312\n+c4.79395 0 11.6748 2.49121 15.3584 5.55957l11.75 9.80078c10.1895 8.48926 25.3193 7.12012 33.8096 -3.07031l20.4902 -24.5898c8.49023 -10.1807 7.10938 -25.3105 -3.07031 -33.7998l-11.7695 -9.81055c-18.6807 -15.5596 -42.2207 -24.0898 -66.54 -24.0898h-78.8203\n+c-37.1396 0 -73.3799 17.8496 -92.0498 49.9502c-17.8701 30.7197 -17.54 65.4199 -4.12988 94.0498h-41.8604c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16h99.7002l34.6699 32h-134.37c-8.83984 0 -16 7.16016 -16 16v32c0 8.83984 7.16016 16 16 16\n+h203.7l29.4902 27.21c4.3291 4 6.80957 9.66992 6.80957 15.5801c0 11.6797 -9.50977 21.2002 -21.2002 21.2002h-83.6201c-5.62012 0 -11.0693 -1.9707 -15.3896 -5.57031l-11.7305 -9.78027c-10.1895 -8.48926 -25.3193 -7.12012 -33.8096 3.07031l-20.4902 24.5898\n+c-8.49023 10.1807 -7.10938 25.3105 3.07031 33.7998l11.7695 9.81055c18.6807 15.5596 42.2207 24.0898 66.54 24.0898h78.8203c37.1396 0 73.3799 -17.8398 92.0498 -49.9502c17.8701 -30.7197 17.54 -65.4199 4.12988 -94.0498h41.8604c8.83984 0 16 -7.16016 16 -16v-32\n+c0 -8.83984 -7.16016 -16 -16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"mask\" unicode=\"&#xf6fa;\" horiz-adv-x=\"640\" \n+d=\"M320.67 384c449.09 0 348.32 -384 158.46 -384c-39.8994 0 -77.4697 20.6904 -101.41 55.8604l-25.7295 37.79c-15.6602 22.9893 -46.9707 22.9893 -62.6299 0l-25.7305 -37.79c-23.9502 -35.1699 -61.5195 -55.8604 -101.42 -55.8604c-199.11 0 -284.14 384 158.46 384z\n+M184 139.64c41.0596 0 67.7598 25.6504 80.0801 41.0508c5.22949 6.54004 5.22949 16.0996 0 22.6299c-12.3203 15.3896 -39.0098 41.0498 -80.0801 41.0498s-67.7598 -25.6504 -80.0801 -41.0498c-5.22949 -6.54004 -5.22949 -16.1006 0 -22.6299\n+c12.3203 -15.3906 39.0205 -41.0508 80.0801 -41.0508zM456 139.64c41.0596 0 67.7598 25.6504 80.0801 41.0508c5.22949 6.54004 5.22949 16.0996 0 22.6299c-12.3203 15.3896 -39.0098 41.0498 -80.0801 41.0498s-67.7598 -25.6504 -80.0801 -41.0498\n+c-5.22949 -6.54004 -5.22949 -16.1006 0 -22.6299c12.3203 -15.3906 39.0205 -41.0508 80.0801 -41.0508z\" \u002F>\n+    \u003Cglyph glyph-name=\"mountain\" unicode=\"&#xf6fc;\" horiz-adv-x=\"640\" \n+d=\"M634.92 -14.7002c2.80566 -4.3623 5.08301 -12.1133 5.08301 -17.3008c0 -4.50586 -1.75293 -11.374 -3.91309 -15.3291c-5.60938 -10.2803 -16.3799 -16.6699 -28.0898 -16.6699h-576h-0.00390625c-10.4795 0 -23.0615 7.46387 -28.0859 16.6602\n+c-2.16016 3.95605 -3.91309 10.8262 -3.91309 15.334c0 5.18848 2.27734 12.9414 5.08301 17.3057l288 448c5.88965 9.16016 16.0303 14.7002 26.9199 14.7002s21.0303 -5.54004 26.9199 -14.7002zM320 356.82l-102.06 -158.761l38.0596 -38.0596l64 64h85.3896z\" \u002F>\n+    \u003Cglyph glyph-name=\"network-wired\" unicode=\"&#xf6ff;\" horiz-adv-x=\"640\" \n+d=\"M640 184c0 -8.83984 -7.16016 -16 -16 -16h-104v-40h56c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h56v40h-304v-40h56c17.6699 0 32 -14.3301 32 -32v-128\n+c0 -17.6699 -14.3301 -32 -32 -32h-160c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h56v40h-104c-8.83984 0 -16 7.16016 -16 16v16c0 8.83984 7.16016 16 16 16h280v40h-72c-17.6699 0 -32 14.3301 -32 32v128c0 17.6699 14.3301 32 32 32h192\n+c17.6699 0 32 -14.3301 32 -32v-128c0 -17.6699 -14.3301 -32 -32 -32h-72v-40h280c8.83984 0 16 -7.16016 16 -16v-16zM256 320h128v64h-128v-64zM192 0v64h-96v-64h96zM544 0v64h-96v-64h96z\" \u002F>\n+    \u003Cglyph glyph-name=\"otter\" unicode=\"&#xf700;\" horiz-adv-x=\"640\" \n+d=\"M608 416c17.6699 0 32 -14.3301 32 -32v-32c0 -53.0195 -42.9805 -96 -96 -96h-22.8604l-92.4697 -49.79l55.1104 -110.21h28.2197c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16h-80l-74.5098 144.5l-149.49 -80.5h64\n+c17.6699 0 32 -14.3301 32 -32v-16c0 -8.83984 -7.16016 -16 -16 -16h-224c-8.83008 0 -16 -7.16992 -16 -16s7.16992 -16 16 -16h112c17.6699 0 32 -14.3301 32 -32s-14.3301 -32 -32 -32h-108.47c-39.3799 0 -75.5205 26.9004 -82.2803 65.7002\n+c-4.91016 28.1201 5 54.2197 23.1904 71.7998c23.5596 22.75 39.5596 52.1396 39.5596 84.8896v1.61035c0 106.04 85.96 192 192 192h56l153.25 87.5703c9.66992 5.51953 20.6104 8.42969 31.75 8.42969h20.4902h0.0126953c14.6328 0 34.9033 -8.40039 45.2471 -18.75\n+l13.25 -13.25h32zM512 400c-8.83984 0 -16 -7.16016 -16 -16s7.16016 -16 16 -16s16 7.16016 16 16s-7.16016 16 -16 16zM544 304c20.8301 0 38.4297 13.4199 45.0498 32h-77.0498l-118.57 -59.29l13.7705 -27.5498l101.84 54.8398h34.96z\" \u002F>\n+    \u003Cglyph glyph-name=\"ring\" unicode=\"&#xf70b;\" \n+d=\"M256 384c145.94 0 256 -61.9102 256 -144v-98.1299c0 -78.3506 -114.62 -141.87 -256 -141.87s-256 63.5195 -256 141.87v98.1299c0 82.0898 110.06 144 256 144zM256 320c-106.04 0 -192 -35.8203 -192 -80c0 -9.25977 3.96973 -18.1201 10.9102 -26.3896\n+c44.9395 26.1797 108.859 42.3896 181.09 42.3896s136.15 -16.21 181.09 -42.3896c6.94043 8.26953 10.9102 17.1299 10.9102 26.3896c0 44.1797 -85.96 80 -192 80zM120.43 183.36c34.7305 -14.4307 82.6406 -23.3604 135.57 -23.3604s100.84 8.92969 135.57 23.3604\n+c-34.6104 14.71 -81.21 24.6396 -135.57 24.6396s-100.96 -9.92969 -135.57 -24.6396z\" \u002F>\n+    \u003Cglyph glyph-name=\"running\" unicode=\"&#xf70c;\" horiz-adv-x=\"416\" \n+d=\"M272 352c-26.5098 0 -48 21.4902 -48 48s21.4902 48 48 48s48 -21.4902 48 -48s-21.4902 -48 -48 -48zM113.69 130.53c7.92969 -17.2402 20.6699 -32.3799 37.9893 -42.6104l10.6699 -6.2998l-8.79004 -20.5205c-7.5293 -17.6494 -24.8594 -29.0898 -44.1094 -29.0898\n+h-77.4502c-17.6699 0 -32 14.3301 -32 32s14.3301 32 32 32h66.8896zM384 224.01c17.6699 0 32 -14.3193 32 -31.9902c0 -17.6699 -14.3301 -32 -32 -32h-53.9902c-18.1895 0 -35.1094 10.5508 -43.1094 26.8906l-20.2705 41.4297l-31.3096 -78.2803l61.2393 -36.1396\n+c18.75 -11.3096 27.5508 -33.6201 21.6406 -54.3896l-31.6406 -101.061c-4.29004 -13.6797 -16.9092 -22.4502 -30.5195 -22.4502c-3.16992 0 -6.38965 0.480469 -9.58008 1.48047c-16.8604 5.28027 -26.25 23.2305 -20.9697 40.0898l27.4697 87.7305l-84.9795 50.1699\n+c-27.6104 16.2998 -38.9209 50.8301 -26.3008 80.3096l37.46 87.3906l-14.6992 4.36914c-7.83008 1.86035 -17.6006 -0.25 -25.2705 -6.13965l-39.6895 -30.4102c-14.0205 -10.7402 -34.0908 -8.10938 -44.8604 5.91992c-10.7705 14.0303 -8.11035 34.1104 5.91992 44.8604\n+l39.6699 30.4102c23.0703 17.6895 52.54 23.9395 80.8398 17.1396l71.0801 -21.1396c26.3301 -6.70996 49.2803 -25.3906 61.7803 -50.9404l26.0596 -53.25h44.0303z\" \u002F>\n+    \u003Cglyph glyph-name=\"scroll\" unicode=\"&#xf70e;\" horiz-adv-x=\"640\" \n+d=\"M48 448c26.4697 0 48 -21.5303 48 -48v-80h-80c-8.83984 0 -16 7.16016 -16 16v64c0 26.4697 21.5303 48 48 48zM256 35.4297c0 -31.8896 -21.7803 -61.4297 -53.25 -66.5498c-40.0996 -6.53027 -74.75 24.25 -74.75 63.1201v368c0 18.0801 -6.25977 34.5898 -16.4102 48\n+h336.41c52.9404 0 96 -43.0596 96 -96v-256h-288v-60.5703zM288 64h336c8.83984 0 16 -7.16016 16 -16c0 -61.8604 -50.1396 -112 -112 -112h-336c52.9404 0 96 43.0703 96 96v32z\" \u002F>\n+    \u003Cglyph glyph-name=\"skull-crossbones\" unicode=\"&#xf714;\" horiz-adv-x=\"448\" \n+d=\"M439.15 -5.05957c7.89941 -3.9502 11.1094 -13.5605 7.15918 -21.4707l-14.3096 -28.6299c-3.95996 -7.89941 -13.5703 -11.0996 -21.4697 -7.14941l-186.53 90.7197l-186.52 -90.7197c-7.91016 -3.95996 -17.5205 -0.75 -21.4707 7.14941l-14.3096 28.6299\n+c-3.95996 7.91016 -0.75 17.5205 7.14941 21.4707l141.98 69.0596l-141.99 69.0596c-7.89941 3.9502 -11.0996 13.5605 -7.14941 21.46l14.3096 28.6309c3.95996 7.90918 13.5703 11.1094 21.4697 7.15918l186.53 -90.7197l186.53 90.7197\n+c7.91016 3.9502 17.5195 0.740234 21.4697 -7.15918l14.3096 -28.6309c3.95996 -7.89941 0.75 -17.5098 -7.14941 -21.46l-141.99 -69.0596zM150 210.72c-41.7803 22.4102 -70 62.75 -70 109.28c0 70.6904 64.4697 128 144 128s144 -57.3096 144 -128\n+c0 -46.5303 -28.2197 -86.8701 -70 -109.28l5.5 -25.8701c2.66992 -12.6191 -5.41992 -24.8496 -16.4502 -24.8496h-126.08c-11.0293 0 -19.1201 12.2305 -16.4502 24.8496zM280 336c-17.6504 0 -32 -14.3496 -32 -32s14.3496 -32 32 -32s32 14.3496 32 32\n+s-14.3496 32 -32 32zM168 336c-17.6504 0 -32 -14.3496 -32 -32s14.3496 -32 32 -32s32 14.3496 32 32s-14.3496 32 -32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"slash\" unicode=\"&#xf715;\" horiz-adv-x=\"640\" \n+d=\"M594.53 -60.6299l-588.351 454.729c-6.96973 5.41992 -8.22949 15.4707 -2.80957 22.4502l19.6396 25.2705c5.41992 6.97949 15.4805 8.23926 22.46 2.80957l588.351 -454.729c6.96973 -5.41992 8.22949 -15.4707 2.80957 -22.4502l-19.6396 -25.2705\n+c-5.41992 -6.97949 -15.4805 -8.22949 -22.46 -2.80957z\" \u002F>\n+    \u003Cglyph glyph-name=\"spider\" unicode=\"&#xf717;\" horiz-adv-x=\"576\" \n+d=\"M151.17 280.65l-27.1504 54.2998c-1.86035 3.72949 -3.37109 10.1387 -3.37109 14.3066c0 2.86719 0.735352 7.40234 1.6416 10.123l25.8896 77.6797c2.79004 8.39062 11.8604 12.9209 20.2402 10.1201l15.1699 -5.05957\n+c8.39062 -2.7998 12.9102 -11.8604 10.1201 -20.2402l-23.7998 -71.3896l20.29 -40.5801c-1.41016 -4.20996 -2.49023 -8.20996 -3.20996 -11.79l-5.2207 -26.1201h-4.66992zM573.31 98.6201c4.90039 -7.35059 2.9209 -17.2803 -4.43945 -22.1797l-13.3105 -8.88086\n+c-7.34961 -4.89941 -17.29 -2.90918 -22.1895 4.44043l-48 72h-47.0605l60.8301 -97.3301c3.16992 -5.08008 4.86035 -10.96 4.86035 -16.96v-77.71c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v73.1104l-74.0801 118.529\n+c1 -14.0498 2.08008 -28.1094 2.08008 -42.21c0 -53.0693 -40.7598 -101.43 -96 -101.43s-96 48.3604 -96 101.43c0 14.1006 1.07031 28.1602 2.08008 42.21l-74.0801 -118.529v-73.1104c0 -8.83984 -7.16016 -16 -16 -16h-16c-8.83984 0 -16 7.16016 -16 16v77.7002\n+v0.00976562c0 5.0625 2.17773 12.6562 4.86035 16.9502l60.8301 97.3301h-47.0605l-48 -72c-4.89941 -7.35059 -14.8398 -9.33984 -22.1895 -4.44043l-13.3105 8.87988c-7.36035 4.90039 -9.33984 14.8398 -4.43945 22.1904l52.7393 79.1299\n+c5.24707 7.86426 17.1768 14.248 26.6299 14.25h77.9404l-68.9902 24.3496c-5.75 1.91895 -13.1465 7.56738 -16.5098 12.6104l-53.5996 80.4102c-4.90039 7.36035 -2.91016 17.29 4.43945 22.1895l13.3105 8.88086c7.35938 4.89941 17.29 2.90918 22.1895 -4.44043\n+l50.5703 -75.8301l60.4902 -20.1699h36.0996l10.3701 51.8496c2.18945 10.9707 17.3701 60.1504 69.6299 60.1504s67.4404 -49.1797 69.6299 -60.1504l10.3701 -51.8496h36.0996l60.5 20.1699l50.5605 75.8301c4.89941 7.34961 14.8398 9.33984 22.1895 4.44043\n+l13.3105 -8.88086c7.34961 -4.89941 9.33984 -14.8398 4.43945 -22.1895l-53.5996 -80.4102c-3.36328 -5.04297 -10.7598 -10.6914 -16.5098 -12.6104l-68.9902 -24.3594h77.9404c9.45117 -0.00195312 21.377 -6.38672 26.6191 -14.25zM406.09 350.49l-23.7998 71.3896\n+c-2.79004 8.37988 1.74023 17.4404 10.1201 20.2402l15.1699 5.05957c8.37988 2.80078 17.4502 -1.73926 20.2402 -10.1201l25.8896 -77.6797c0.908203 -2.72168 1.64551 -7.25781 1.64551 -10.127c0 -4.16699 -1.5127 -10.5752 -3.375 -14.3027l-27.1504 -54.2998\n+l-25.9297 -8.65039h-4.66992l-5.2207 26.1201c-0.719727 3.58008 -1.7998 7.58008 -3.20996 11.79z\" \u002F>\n+    \u003Cglyph glyph-name=\"toilet-paper\" unicode=\"&#xf71e;\" horiz-adv-x=\"576\" \n+d=\"M128 448h284.44c-36.7705 -38.4805 -60.4404 -108.4 -60.4404 -192v-172.07c0 -53.6494 -11.8799 -87.5693 -24.71 -126.05c-4.36035 -13.0703 -16.5898 -21.8799 -30.3604 -21.8799h-280.92c-10.9199 0 -18.6299 10.7002 -15.1797 21.0596\n+c21.3701 64.1006 31.1699 85.75 31.1699 126.87v172.07c0 106.04 42.9805 192 96 192zM96 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM160 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16\n+s7.16016 -16 16 -16zM224 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM288 224c8.83984 0 16 7.16016 16 16s-7.16016 16 -16 16s-16 -7.16016 -16 -16s7.16016 -16 16 -16zM480 448c53.0195 0 96 -85.96 96 -192\n+s-42.9805 -192 -96 -192s-96 85.96 -96 192s42.9805 192 96 192zM480 192c17.6699 0 32 28.6504 32 64s-14.3301 64 -32 64s-32 -28.6504 -32 -64s14.3301 -64 32 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"tractor\" unicode=\"&#xf722;\" horiz-adv-x=\"640\" \n+d=\"M528 112c48.5996 0 88 -39.4004 88 -88s-39.4004 -88 -88 -88s-88 39.4004 -88 88s39.4004 88 88 88zM528 0c13.2305 0 24 10.7695 24 24s-10.7695 24 -24 24s-24 -10.7695 -24 -24s10.7695 -24 24 -24zM608 288c17.6699 0 32 -14.3301 31.9902 -32v-50.7598\n+c0 -8.49023 -3.37012 -16.6299 -9.37012 -22.6299l-50.8203 -50.8203c-15.7295 7.58984 -33.1602 12.2002 -51.7998 12.2002c-39.1396 0 -73.5498 -19.0098 -95.46 -48h-80.54v-6c0 -12.1504 -9.84961 -22 -22 -22h-7.16016\n+c-2.9502 -9.90039 -6.91992 -19.46 -11.9102 -28.7207l5.06055 -5.05957c8.58984 -8.58984 8.58984 -22.5195 0 -31.1104l-31.1104 -31.1094c-8.58984 -8.58984 -22.5195 -8.58984 -31.1104 0l-5.05957 5.05957c-9.25977 -4.99023 -18.8203 -8.95996 -28.7197 -11.9102\n+v-7.13965c0 -12.1504 -9.85059 -22 -22 -22h-44c-12.1504 0 -22 9.84961 -22 22v7.15039c-9.90039 2.94922 -19.46 6.91992 -28.7207 11.9092l-5.05957 -5.05957c-8.58984 -8.58984 -22.5195 -8.58984 -31.1104 0l-31.1094 31.1104\n+c-8.58984 8.58984 -8.58984 22.5195 0 31.1094l5.05957 5.06055c-4.99023 9.26953 -8.9502 18.8193 -11.9102 28.7295h-7.13965c-12.1504 0 -22 9.85059 -22 22v44c0 12.1504 9.84961 22 22 22h7.15039c2.94922 9.90039 6.91992 19.46 11.9092 28.7207l-5.05957 5.05957\n+c-8.58984 8.58984 -8.58984 22.5195 0 31.1104l31.1104 31.1094c7.92969 7.93066 20.2598 8.2002 28.8896 1.4707v146.52c0 26.4697 21.5303 48 48 48h133.45h0.046875c17.4834 0 37.2324 -13.0547 44.083 -29.1396l56.0898 -130.86h102.33v40.2002\n+c0 29.9902 10.5801 58.8994 29.5 81.7197c6.37988 7.7002 18.04 8.23047 24.7002 0.780273l21.6299 -24.1699c4.87012 -5.43066 5.74023 -13.6904 1.32031 -19.4902c-8.4502 -11.0801 -13.1504 -24.7197 -13.1504 -38.8398v-40.2002h64zM176 32c44.1797 0 80 35.8203 80 80\n+s-35.8203 80 -80 80s-80 -35.8203 -80 -80s35.8203 -80 80 -80zM198 288h110.04l-41.1504 96h-106.89v-96h38z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-injured\" unicode=\"&#xf728;\" horiz-adv-x=\"448\" \n+d=\"M277.37 436.02l-90.6904 -68.0195h-81.1895c19.0098 46.8701 64.8193 80 118.51 80c19.1104 0 37.0801 -4.46973 53.3701 -11.9805zM342.51 368h-102.52l66.0293 49.5195c15.8203 -13.3193 28.5908 -30.0498 36.4902 -49.5195zM224 192c-70.6904 0 -128 57.3096 -128 128\n+c0 5.48047 0.94043 10.7002 1.61035 16h252.779c0.660156 -5.2998 1.61035 -10.5195 1.61035 -16c0 -70.6904 -57.3096 -128 -128 -128zM80 148.3c7.92676 3.51758 21.2812 7.64844 29.8096 9.21973l98.4502 -221.52h-128.26v212.3zM0 -16v41.5996\n+c0 41.1406 18.8799 77.5107 48 102.16v-191.76c-26.5098 0 -48 21.4902 -48 48zM256 32c26.4697 0 48 -21.5303 48 -48s-21.5303 -48 -48 -48h-12.71l-42.6699 96h55.3799zM313.6 160c74.2305 0 134.4 -60.1699 134.4 -134.4v-41.5996c0 -26.5098 -21.4902 -48 -48 -48\n+h-80.4102c10.1504 13.4102 16.4102 29.9199 16.4102 48c0 44.1104 -35.8896 80 -80 80h-69.5898l-42.6699 96h7.37012c22.2393 -10.1797 46.8799 -16 72.8896 -16s50.6504 5.82031 72.8896 16h16.71z\" \u002F>\n+    \u003Cglyph glyph-name=\"vr-cardboard\" unicode=\"&#xf729;\" horiz-adv-x=\"640\" \n+d=\"M608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-160.22c-25.1807 0 -48.0303 14.7695 -58.3604 37.7402l-27.7402 61.6396c-7.88965 17.54 -24.0293 28.6201 -41.6797 28.6201s-33.79 -11.0801 -41.6797 -28.6201l-27.7402 -61.6396\n+c-10.3301 -22.9707 -33.1699 -37.7402 -58.3604 -37.7402h-160.22c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM160 144c35.3496 0 64 28.6504 64 64s-28.6504 64 -64 64s-64 -28.6504 -64 -64s28.6504 -64 64 -64zM480 144\n+c35.3496 0 64 28.6504 64 64s-28.6504 64 -64 64s-64 -28.6504 -64 -64s28.6504 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"wind\" unicode=\"&#xf72e;\" \n+d=\"M156.7 192c48.7002 0 92.2998 -35 98.3994 -83.4004c7.5 -58.5 -38.0996 -108.6 -95.1992 -108.6c-46.6006 0 -85.6006 33.5 -94.2002 77.5996c-1.7998 9.60059 6.09961 18.4004 15.8994 18.4004h32.8008c6.59961 0 13.0996 -3.7998 15.1992 -10.0996\n+c4.30078 -12.7002 16.3008 -21.9004 30.4004 -21.9004c19.5 0 34.9004 17.4004 31.5996 37.4004c-2.59961 15.6992 -17.5 26.5996 -33.3994 26.5996h-142.2c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h140.7zM16 224c-8.7998 0 -16 7.2002 -16 16v32\n+c0 8.7998 7.2002 16 16 16h334.2c16 0 30.7998 10.9004 33.3994 26.5996c3.30078 20 -12.1992 37.4004 -31.5996 37.4004c-14.0996 0 -26.0996 -9.2002 -30.4004 -21.9004c-2.09961 -6.2998 -8.5 -10.0996 -15.1992 -10.0996h-32.8008\n+c-9.69922 0 -17.6992 8.7002 -15.7998 18.2998c9.7998 50.6006 59.5 87.1006 114.9 75.5c36.2002 -7.59961 65.5 -36.8994 73.0996 -73.0996c13 -61.9004 -34.0996 -116.7 -93.7998 -116.7h-336zM400 192c70.5 0 126 -65.5 108.9 -138.7\n+c-9.60059 -41.0996 -43.5 -74 -84.7002 -82.7002c-58.9004 -12.5 -111.601 21.7002 -129.4 72.3008c-3.7002 10.2998 4.40039 21.0996 15.2998 21.0996h33.8008c5.7998 0 11.5996 -2.59961 14.5 -7.59961c8.2998 -14.5 23.6992 -24.4004 41.5996 -24.4004\n+c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-116.5c-6.59961 25.2002 -20.5 47.4004 -39.7998 64h156.3z\" \u002F>\n+    \u003Cglyph glyph-name=\"wine-bottle\" unicode=\"&#xf72f;\" \n+d=\"M507.31 375.43c6.25 -6.25 6.25 -16.3799 0.0107422 -22.6201l-22.6299 -22.6299c-6.25 -6.25 -16.3809 -6.25 -22.6309 0l-76.6699 -76.6699c19.7002 -46.5801 10.7305 -102.41 -27.2295 -140.37l-158.391 -158.39c-24.9893 -24.9902 -65.5195 -24.9902 -90.5098 0\n+l-90.5098 90.5098c-24.9902 24.9902 -24.9902 65.5205 0 90.5098l158.38 158.381c37.9697 37.96 93.79 46.9297 140.37 27.2295l76.6699 76.6699c-6.25 6.25 -6.25 16.3799 0 22.6299l22.6299 22.6299c6.25 6.25 16.3799 6.25 22.6299 0zM179.22 24.71l122.04 122.04\n+l-90.5098 90.5098l-122.04 -122.04z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-meatball\" unicode=\"&#xf73b;\" \n+d=\"M48 96c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM464 96c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM345 84.9004c13.5 -7 23 -20.7002 23 -36.9004s-9.5 -29.9004 -23 -36.9004\n+c4.59961 -14.5 1.7002 -30.7998 -9.7998 -42.2998c-8.2002 -8.2002 -18.9004 -12.2998 -29.7002 -12.2998c-4.2998 0 -8.5 1.2002 -12.5996 2.5c-7 -13.5 -20.7002 -23 -36.9004 -23s-29.9004 9.5 -36.9004 23c-4.09961 -1.40039 -8.2998 -2.5 -12.5996 -2.5\n+c-10.7998 0 -21.5 4.09961 -29.7002 12.2998c-11.5 11.5 -14.5 27.7998 -9.89941 42.2998c-13.5 7 -23 20.7002 -23 36.9004s9.5 29.9004 23 36.9004c-4.5 14.5 -1.60059 30.7998 9.89941 42.2998s27.7998 14.5 42.2998 9.89941c7 13.5 20.7002 23 36.9004 23\n+s29.9004 -9.5 36.9004 -23c14.5 4.5 30.7998 1.60059 42.2998 -9.89941c11.3994 -11.5 14.3994 -27.7998 9.7998 -42.2998zM512 224c0 -53 -43 -96 -96 -96h-43.4004c-3.5 8 -8.39941 15.4004 -14.7998 21.7998c-13.5 13.5 -31.5 21.1006 -50.7998 21.2998\n+c-13.5 13.2002 -31.7002 20.9004 -51 20.9004s-37.5 -7.7002 -51 -20.9004c-19.2998 -0.199219 -37.2998 -7.7998 -50.7998 -21.2998c-6.40039 -6.39941 -11.2002 -13.7998 -14.7998 -21.7998h-43.4004c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998\n+c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.0996 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80c0 -5.59961 -0.5 -11 -1.59961 -16.2002\n+c0.5 0 1 0.200195 1.59961 0.200195c53 0 96 -43 96 -96z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-moon-rain\" unicode=\"&#xf73c;\" horiz-adv-x=\"576\" \n+d=\"M350.5 222.5c37.2998 -6.7998 65.5 -39.2998 65.5 -78.5c0 -44.2002 -35.7998 -80 -80 -80h-256c-44.2002 0 -80 35.7998 -80 80c0 38.7998 27.5996 71.0996 64.2002 78.4004c0 0.5 -0.200195 1.09961 -0.200195 1.59961c0 53 43 96 96 96\n+c32.0996 0 60.2998 -15.9004 77.7002 -40c10.3994 5 22 8 34.2998 8c39.2002 0 71.5996 -28.2998 78.5 -65.5zM567.9 224.2c6.19922 1.2002 10.5996 -6 6.39941 -10.7998c-27 -33.1006 -67.8994 -53.3008 -112.6 -53.3008c-5.2002 0 -10.1006 1 -15.2002 1.5\n+c-6.2002 39.4004 -33.0996 72.5 -70.2002 86.8008c-10.7002 27.8994 -32.2002 49.7998 -58.8994 61.6992c3.2998 76.7002 66.5 137.9 144.399 137.9c8.90039 0 17.7998 -0.799805 26.5 -2.40039c6.2002 -1.09961 7.60059 -9.39941 2.10059 -12.5\n+c-35.6006 -20.0996 -57.5 -57.5 -57.5 -98.0996c0 -70.5 64.5996 -124.1 135 -110.8zM364.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\n+c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM268.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\n+c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM172.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64\n+c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM76.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008\n+l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-rain\" unicode=\"&#xf73d;\" \n+d=\"M416 320c53 0 96 -43 96 -96s-43 -96 -96 -96h-320c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.0996 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998\n+c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80c0 -5.59961 -0.5 -11 -1.59961 -16.2002c0.5 0 1 0.200195 1.59961 0.200195zM88 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002\n+c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996c0 31.3008 27.2002 43.3008 40 87.7002zM248 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996\n+c0 31.3008 27.2002 43.3008 40 87.7002zM408 73.7998c2.5 8.5 13.7998 8.10059 16 0c12.7998 -44.5996 40 -56.2998 40 -87.7002c0 -27.6992 -21.5 -50.0996 -48 -50.0996s-48 22.4004 -48 50.0996c0 31.3008 27.2002 43.3008 40 87.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-showers-heavy\" unicode=\"&#xf740;\" \n+d=\"M183.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112\n+c4.40039 7.7998 14.2002 10.3994 21.8008 6zM279.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008\n+l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM87.9004 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\n+c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM471.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\n+c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM375.9 77.9004c7.69922 -4.40039 10.3994 -14.2002 6 -21.8008l-64 -112\n+c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.30078 -10.3994 14.1006 -6 21.8008l64 112c4.40039 7.7998 14.2002 10.3994 21.8008 6zM416 320c53 0 96 -43 96 -96s-43 -96 -96 -96h-320\n+c-53 0 -96 43 -96 96c0 42.5 27.7998 78.2002 66.0996 90.7998c-1.2998 6.90039 -2.09961 13.9004 -2.09961 21.2002c0 61.9004 50.2002 112 112 112c43.2998 0 80.4004 -24.7998 99 -60.7998c14.7002 17.5 36.4004 28.7998 61 28.7998c44.2002 0 80 -35.7998 80 -80\n+c0 -5.59961 -0.5 -11 -1.59961 -16.2002c0.5 0 1 0.200195 1.59961 0.200195z\" \u002F>\n+    \u003Cglyph glyph-name=\"cloud-sun-rain\" unicode=\"&#xf743;\" horiz-adv-x=\"576\" \n+d=\"M510.5 222.5c37.2998 -6.7998 65.5 -39.2998 65.5 -78.5c0 -44.2002 -35.7998 -80 -80 -80h-256c-44.2002 0 -80 35.7998 -80 80c0 38.7998 27.5996 71 64.2002 78.4004c0 0.5 -0.200195 1.09961 -0.200195 1.59961c0 53 43 96 96 96\n+c32.0996 0 60.2998 -15.9004 77.7002 -40c10.3994 5 22 8 34.2998 8c39.2002 0 71.5996 -28.2998 78.5 -65.5zM124.1 188.1c3.10059 -3.09961 6.60059 -5.59961 10.2002 -8.2998c-3.89941 -11.3994 -6.2002 -23.3994 -6.2002 -35.8994c0 -2.5 0.5 -4.80078 0.700195 -7.2002\n+l-59.2002 -19.7002c-10.1992 -3.2998 -19.8994 6.2998 -16.5 16.5l25.1006 75.2998l-71 35.5c-9.60059 4.7998 -9.60059 18.5 0 23.2998l71 35.5l-25.1006 75.3008c-3.39941 10.1992 6.2002 19.8994 16.4004 16.5l75.2998 -25.1006l35.5 71\n+c4.7998 9.60059 18.5 9.60059 23.2998 0l35.5 -71l75.3008 25.1006c10.1992 3.39941 19.8994 -6.2002 16.5 -16.4004l-8.90039 -26.7002c-0.700195 0 -1.2998 0.200195 -2 0.200195c-25.5996 0 -49.2002 -7.7998 -69.2002 -20.7002\n+c-37.5996 29.4004 -92.0996 27.2002 -126.7 -7.39941c-37.3994 -37.5 -37.3994 -98.4004 0 -135.801zM193.9 246.1c-18.2002 -8.2998 -33.5 -21.2998 -44.8008 -37.1992c-12.8994 11.6992 -21.0996 28.3994 -21.0996 47.0996c0 35.2998 28.7002 64 64 64\n+c12.4004 0 24 -3.7002 33.7998 -9.90039c-16.0996 -17.5996 -27.5996 -39.5 -31.8994 -64zM524.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961\n+c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM428.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961\n+c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM332.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008l-36.5996 -64\n+c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6zM236.5 29.9004c7.7002 -4.40039 10.2998 -14.1006 6 -21.8008\n+l-36.5996 -64c-3 -5.19922 -8.40039 -8.09961 -13.9004 -8.09961c-2.7002 0 -5.40039 0.700195 -7.90039 2.09961c-7.69922 4.40039 -10.3994 14.1006 -6 21.8008l36.6006 64c4.39941 7.7998 14.2002 10.2998 21.7998 6z\" \u002F>\n+    \u003Cglyph glyph-name=\"democrat\" unicode=\"&#xf747;\" horiz-adv-x=\"640\" \n+d=\"M637.3 191.1c4.90039 -7.39941 2.90039 -17.2998 -4.39941 -22.2998l-26.6006 -17.7002c-7.39941 -4.89941 -17.2998 -3 -22.2002 4.40039c-21.7998 32.7002 -23.8994 38.0996 -40.0996 50.2998v-77.7998h-352l-54 108l-38.0996 -34.5996\n+c-6 -6 -14.1006 -9.40039 -22.6006 -9.40039h-31c-12.0996 0 -23.2002 6.90039 -28.5996 17.7002l-14.2998 28.5996c-5.40039 10.7998 -4.30078 23.7998 3 33.5l74.5996 99.2998c1.7002 2.30078 4.2002 3.7002 6.40039 5.40039c-4 2.2002 -8 4.2002 -11.3008 7.5\n+c-16.3994 16.4004 -18.3994 41.7998 -6.09961 60.4004c2.7998 4.19922 8.7998 4.7998 12.4004 1.19922l42.8994 -42.7998l41.7998 41.7998c4.40039 4.40039 11.8008 3.7002 15.2002 -1.5c15.1006 -22.7998 12.6006 -53.7998 -7.5 -73.8994l81.2002 -81.2002h235.6\n+c50.8008 0 97.9004 -25.2002 126.101 -67.5zM296.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5\n+l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM408.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998\n+l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002\n+l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM520.2 204.7c3 2.89941 1.39941 7.89941 -2.60059 8.5l-22.7998 3.2998l-10.2002 20.7002c-1.89941 3.7002 -7.19922 3.7002 -9 0l-10.1992 -20.7002l-22.8008 -3.2998\n+c-4.09961 -0.600586 -5.7998 -5.60059 -2.7998 -8.5l16.5 -16.1006l-3.89941 -22.6992c-0.700195 -4.10059 3.59961 -7.2002 7.19922 -5.30078l20.4004 10.7002l20.4004 -10.7002c3.59961 -1.89941 7.89941 1.2002 7.19922 5.30078l-3.89941 22.6992zM192 -48v144h352v-144\n+c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16v80h-160v-80c0 -8.7998 -7.2002 -16 -16 -16h-64c-8.7998 0 -16 7.2002 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"flag-usa\" unicode=\"&#xf74d;\" \n+d=\"M32 448c17.7002 0 32 -14.2998 32 -32v-464c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v464c0 17.7002 14.2998 32 32 32zM299.9 144.4c31.0996 -8.2002 62.5996 -16.5 100 -16.6006c31.8994 0 68.5 6.7998 112.1 24.1006v-36\n+c0 -12.3008 -7.09961 -23.8008 -18.5 -28.8008c-175.8 -76.3994 -211.8 69.1006 -397.5 -23.0996v69.2998c92.2002 39.9004 146.7 26.2002 203.9 11.1006zM299.9 240.4c31.0996 -8.2002 62.5996 -16.5 100 -16.5c31.8994 0 68.5 6.7998 112.1 24.0996v-61.5\n+c-92.2002 -39.9004 -146.7 -26.2002 -203.9 -11.0996c-57.5 15.0996 -117.3 30 -212.1 -7.60059v61.5c92.2002 39.9004 146.7 26.2002 203.9 11.1006zM309.4 366.3c-7 2.10059 -14.1006 4.2002 -21.3008 6.2002v-33.2002c4 -1.09961 8.10059 -2.2998 12.1006 -3.5\n+c26.7002 -8.09961 52.8994 -15.8994 85.7002 -15.8994c32.7998 0 72.5 7.89941 126.1 31.3994v-68.8994c-92.2002 -39.8008 -146.7 -26.1006 -203.9 -11.1006c-57.5 15.1006 -117.3 29.9004 -212.1 -7.59961v151.899c209.4 94.6006 195.3 -59.0996 366.6 28.2002\n+c22.6006 11.5 49.4004 -1.5 49.4004 -26.5996v-30.7998c-105.2 -49.1006 -150.8 -35.7002 -202.6 -20.1006zM160 319.9c8.7998 0 16 7.09961 16 16c0 8.89941 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16zM160 375.7c8.7998 0 16 7.2002 16 16\n+c0 8.89941 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16zM224 327.8c8.7998 0 16 7.2002 16 16c0 8.90039 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.89941 7.2002 -16 16 -16zM224 383.7c8.7998 0 16 7.2002 16 16c0 8.89941 -7.2002 16 -16 16\n+s-16 -7.2002 -16 -16c0 -8.90039 7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"meteor\" unicode=\"&#xf753;\" \n+d=\"M491.2 447.3c12.3994 3.7002 23.7998 -7.7002 20.2002 -20.0996c-11.6006 -38.7002 -34.3008 -111.7 -61.3008 -187.7c7 -2.09961 13.4004 -4 18.6006 -5.59961c9.7002 -3 14.2002 -13.9004 9.5 -22.9004c-22.1006 -42.2998 -82.7002 -152.8 -142.5 -214.4\n+c-1 -1.09961 -2 -2.5 -3 -3.5c-38.1006 -38.0996 -88 -57.0996 -137.9 -57.0996c-49.8994 -0.0996094 -99.7998 19 -137.8 57c-38 38.0996 -57 88 -57 137.8c0 49.9004 19 99.7998 57.0996 137.8c1 1 2.40039 2 3.5 3c61.6006 59.9004 172 120.4 214.4 142.5\n+c9 4.7002 19.9004 0.200195 22.9004 -9.5c1.59961 -5.09961 3.5 -11.5996 5.59961 -18.5996c75.9004 27 149 49.7002 187.7 61.2998zM192 0c70.7002 0 128 57.2998 128 128s-57.2998 128 -128 128s-128 -57.2998 -128 -128s57.2998 -128 128 -128zM160 192\n+c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32s-32 14.2998 -32 32s14.2998 32 32 32zM208 96c8.7998 0 16 -7.2002 16 -16s-7.2002 -16 -16 -16s-16 7.2002 -16 16s7.2002 16 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"person-booth\" unicode=\"&#xf756;\" horiz-adv-x=\"576\" \n+d=\"M192 -48v176h64v-176c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16zM224 224c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32h-57.5c-12.7998 0 -24.7998 5 -33.9004 14.0996l-20.8994 20.9004v-80.5996l41.2002 -61.3008\n+c4.39941 -8.7998 6.69922 -18.6992 6.69922 -28.5996v-56.5c0 -17.7002 -14.2998 -32 -32 -32c-17.6992 0 -32 14.2998 -32 32v56l-29.0996 43c-0.900391 0.400391 -1.59961 1.2002 -2.5 1.7002l-0.0996094 -100.7c0 -17.7002 -14.4004 -32 -32 -32\n+c-17.6006 0 -31.9004 14.2998 -31.9004 32l0.200195 160l-0.200195 95.9004c0 17.0996 6.7002 33.1992 18.7002 45.2998c12.0996 12.0996 28.2002 18.7998 45.2998 18.7998h18.7002c17 0 33.0996 -6.59961 45.2002 -18.7002l45.1992 -45.2998h50.9004zM64 320\n+c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM288 416v32h192v-416c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32c0 -17.7002 -14.2998 -32 -32 -32c-17.0996 0 -30.7998 13.5 -31.7002 30.4004\n+c-4.2998 -21.3008 -17.0996 -30.4004 -32.2998 -30.4004c-18.4004 0 -35.7002 16.7002 -31.4004 38.2998l30.9004 154.601zM192 416c0 17.7002 14.2998 32 32 32h32v-192h-64v160zM544 448c17.7002 0 32 -14.2998 32 -32v-464c0 -8.7998 -7.2002 -16 -16 -16h-32\n+c-8.7998 0 -16 7.2002 -16 16v496h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"poo-storm\" unicode=\"&#xf75a;\" horiz-adv-x=\"448\" \n+d=\"M308 112c9.2002 0 15 -10 10.4004 -18l-88 -152c-2.2002 -3.7998 -6.2002 -6 -10.4004 -6c-7.7002 0 -13.5 7.2002 -11.7002 14.7998l23 97.2002h-59.2998c-7.2998 0 -12.9004 6.40039 -11.9004 13.5996l16 120c0.800781 5.90039 5.90039 10.4004 11.9004 10.4004h68\n+c7.90039 0 13.5996 -7.5 11.5996 -15.0996l-17.2998 -64.9004h57.7002zM374.4 223.3c41 -3.2998 73.5996 -37.5 73.5 -79.2998c0 -44 -36 -80 -80 -80h-30l8.09961 14c7.7998 13.5 7.7998 30.4004 0 44s-22.4004 22 -38.0996 22h-16l6.59961 24.7002\n+c3.59961 13.2998 0.799805 27.2002 -7.59961 38.0996c-8.40039 10.9004 -21.1006 17.2002 -34.9004 17.2002h-68c-22 0 -40.7002 -16.4004 -43.7002 -38.2002l-16 -120c0 -0.599609 0.100586 -1.2002 0 -1.7998h-48.2998c-44 0 -80 36 -80 80\n+c0 41.7998 32.5996 76 73.5996 79.2998c-5.89941 9.60059 -9.59961 20.6006 -9.59961 32.7002c0 35.2998 28.7002 64 64 64h16c44.2002 0 80 35.7998 80 80c0 17.4004 -5.7002 33.4004 -15.0996 46.5c4.89941 0.799805 9.89941 1.5 15.0996 1.5c53 0 96 -43 96 -96\n+c0 -11.2998 -2.2998 -21.9004 -5.90039 -32h5.90039c35.2998 0 64 -28.7002 64 -64c0 -12.0996 -3.7002 -23.0996 -9.59961 -32.7002z\" \u002F>\n+    \u003Cglyph glyph-name=\"rainbow\" unicode=\"&#xf75b;\" horiz-adv-x=\"576\" \n+d=\"M268.3 415.3c167.7 11.2998 307.7 -122 307.7 -287.3v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v136.2c0 113.8 -81.5996 215.399 -194.5 229.899c-136.6 17.6006 -253.5 -88.8994 -253.5 -222.1v-144c0 -8.7998 -7.2002 -16 -16 -16h-32\n+c-8.7998 0 -16 7.2002 -16 16v133.8c0 153.3 115.4 287.3 268.3 297.5zM262.7 318.4c117.1 15 217.3 -76.2002 217.3 -190.4v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v138.3c0 66.9004 -48.7002 126.601 -115.2 133.101\n+c-76.2998 7.39941 -140.8 -52.6006 -140.8 -127.4v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v137.3c0 97.6006 70 184.7 166.7 197.101zM268.9 222.1c61.2998 11.9004 115.1 -34.8994 115.1 -94.0996v-144c0 -8.7998 -7.2002 -16 -16 -16h-32\n+c-8.7998 0 -16 7.2002 -16 16v144c0 17.5996 -14.2998 32 -32 32s-32 -14.4004 -32 -32v-144c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v140.2c0 46.3994 31.2998 89 76.9004 97.8994z\" \u002F>\n+    \u003Cglyph glyph-name=\"republican\" unicode=\"&#xf75e;\" horiz-adv-x=\"640\" \n+d=\"M544 256v-64h-544v64c0 88.4004 71.5996 160 160 160h224c88.4004 0 160 -71.5996 160 -160zM176.3 277.6c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0l-12.1992 -24.7998l-27.4004 -4\n+c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998zM320.3 277.6\n+c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0l-12.1992 -24.7998l-27.4004 -4c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998\n+c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998zM464.3 277.6c3.5 3.5 1.60059 9.5 -3.39941 10.2002l-27.4004 4l-12.2002 24.7998c-2.09961 4.40039 -8.5 4.5 -10.7002 0\n+l-12.1992 -24.7998l-27.4004 -4c-4.90039 -0.700195 -6.90039 -6.7002 -3.2998 -10.2002l19.7998 -19.2998l-4.7002 -27.2998c-0.799805 -4.90039 4.40039 -8.59961 8.7002 -6.2998l24.5 12.8994l24.5 -12.8994c4.40039 -2.2998 9.5 1.39941 8.7002 6.2998l-4.7002 27.2998z\n+M624 128c8.7998 0 16 -7.2002 16 -16v-64c0 -46.9004 -40.5996 -84.5 -88.4004 -79.5996c-41.5996 4.19922 -71.5996 42.5 -71.5996 84.2998v43.2998h-32v-112c0 -8.7998 -7.2002 -16 -16 -16h-96c-8.7998 0 -16 7.2002 -16 16v80h-192v-80c0 -8.7998 -7.2002 -16 -16 -16\n+h-96c-8.7998 0 -16 7.2002 -16 16v176h544v-112c0 -8.7998 7.2002 -16 16 -16s16 7.2002 16 16v64c0 8.7998 7.2002 16 16 16h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"smog\" unicode=\"&#xf75f;\" horiz-adv-x=\"640\" \n+d=\"M624 80c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-544c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h544zM144 -16c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-128c-8.7998 0 -16 7.2002 -16 16v16\n+c0 8.7998 7.2002 16 16 16h128zM560 -16c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16h-336c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h336zM144 160c-79.5 0 -144 64.5 -144 144s64.5 144 144 144c41 0 77.7998 -17.2998 104 -44.7998\n+c26.2002 27.5 63 44.7998 104 44.7998c54.7998 0 102 -31 126.3 -76.0996c15 7.5 31.7002 12.0996 49.7002 12.0996c61.9004 0 112 -50.0996 112 -112s-50.0996 -112 -112 -112h-60.0996c-22.6006 -19.7002 -51.6006 -32 -83.9004 -32s-61.4004 12.2998 -83.9004 32h-156.1z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"temperature-high\" unicode=\"&#xf769;\" \n+d=\"M416 448c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM416 320c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 336v-166.5c19.7002 -24.5996 32 -55.5 32 -89.5\n+c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144c0 34 12.2998 64.7998 32 89.5v166.5c0 61.9004 50.0996 112 112 112s112 -50.0996 112 -112zM144 0c44.0996 0 80 35.9004 80 80c0 25.5 -12.2002 49 -32 63.7998v192.2c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-192.2\n+c-19.7998 -14.8994 -32 -38.2998 -32 -63.7998c0 -44.0996 35.9004 -80 80 -80zM160 125.1c18.5996 -6.59961 32 -24.1992 32 -45.0996c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 20.9004 13.4004 38.5 32 45.0996v210.9c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16\n+v-210.9z\" \u002F>\n+    \u003Cglyph glyph-name=\"temperature-low\" unicode=\"&#xf76b;\" \n+d=\"M416 448c52.9004 0 96 -43.0996 96 -96s-43.0996 -96 -96 -96s-96 43.0996 -96 96s43.0996 96 96 96zM416 320c17.7002 0 32 14.2998 32 32s-14.2998 32 -32 32s-32 -14.2998 -32 -32s14.2998 -32 32 -32zM256 336v-166.5c19.7002 -24.5996 32 -55.5 32 -89.5\n+c0 -79.5 -64.5 -144 -144 -144s-144 64.5 -144 144c0 34 12.2998 64.7998 32 89.5v166.5c0 61.9004 50.0996 112 112 112s112 -50.0996 112 -112zM144 0c44.0996 0 80 35.9004 80 80c0 25.5 -12.2002 49 -32 63.7998v192.2c0 26.5 -21.5 48 -48 48s-48 -21.5 -48 -48v-192.2\n+c-19.7998 -14.8994 -32 -38.2998 -32 -63.7998c0 -44.0996 35.9004 -80 80 -80zM160 125.1c18.5996 -6.59961 32 -24.1992 32 -45.0996c0 -26.5 -21.5 -48 -48 -48s-48 21.5 -48 48c0 20.9004 13.4004 38.5 32 45.0996v18.9004c0 8.7998 7.2002 16 16 16s16 -7.2002 16 -16\n+v-18.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"vote-yea\" unicode=\"&#xf772;\" horiz-adv-x=\"640\" \n+d=\"M608 128c17.7002 0 32 -14.2998 32 -32v-96c0 -17.7002 -14.2998 -32 -32 -32h-576c-17.7002 0 -32 14.2998 -32 32v96c0 17.7002 14.2998 32 32 32h64v-64h-22.4004c-5.2998 0 -9.59961 -3.59961 -9.59961 -8v-16c0 -4.40039 4.2998 -8 9.59961 -8h492.801\n+c5.2998 0 9.59961 3.59961 9.59961 8v16c0 4.40039 -4.2998 8 -9.59961 8h-22.4004v64h64zM512 64h-384v319.7c0 17.7998 14.5 32.2998 32.4004 32.2998h319.3c17.7998 0 32.2998 -14.4004 32.2998 -32.2998v-319.7zM211.2 246c-4.2002 -4.2002 -4.2998 -11 0 -15.2002\n+l74.0996 -74.7002c4.2002 -4.2998 11 -4.2998 15.2002 -0.0996094l128.3 127.2c4.2998 4.2002 4.2998 11 0.100586 15.2002l-25.3008 25.5c-4.19922 4.2998 -11 4.2998 -15.1992 0.0996094l-95.2002 -94.4004l-41.2998 41.6006\n+c-4.2002 4.2998 -11 4.2998 -15.2002 0.0996094z\" \u002F>\n+    \u003Cglyph glyph-name=\"water\" unicode=\"&#xf773;\" horiz-adv-x=\"576\" \n+d=\"M562.1 64.0996c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\n+c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\n+c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.5 57.8994 -22.9004zM562.1 208.1\n+c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\n+c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\n+c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.5 57.8994 -22.9004zM562.1 352.1\n+c8.10059 -0.899414 13.9004 -8.2998 13.8008 -16.2998v-31.5996c0 -9.10059 -7.60059 -16.7998 -16.7002 -16c-28.2002 2.5 -55.7998 11.5996 -79.1006 25.7998c-55 -34.0996 -135.5 -34.5996 -192 0c-55 -34.0996 -135.5 -34.5996 -192 0\n+c-23.2998 -14.5 -50.5996 -23.4004 -79.3994 -25.9004c-9.10059 -0.799805 -16.7002 6.90039 -16.7002 16v32.2002c0 7.90039 5.7002 14.9004 13.5996 15.7002c21.7002 2.2998 42.2002 10.2002 57.7002 22.4004c13.7998 10.8994 33.6006 13.1992 47.1006 2\n+c38.2998 -31.7002 107.199 -31.8008 145.199 -1.7002c13.7002 10.8994 33.2002 13 46.7002 1.7998c38.5 -31.9004 107.8 -31.9004 145.7 -1.5c14 11.2998 34.0996 11.0996 48.2002 0c15.7998 -12.4004 36.3994 -20.4004 57.8994 -22.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"baby\" unicode=\"&#xf77c;\" horiz-adv-x=\"384\" \n+d=\"M192 288c-44.2002 0 -80 35.7998 -80 80s35.7998 80 80 80s80 -35.7998 80 -80s-35.7998 -80 -80 -80zM138.6 39.2002l29.4004 -39.2002c13.2002 -17.7002 9.7002 -42.7998 -8 -56c-7.2002 -5.40039 -15.7002 -8 -24 -8c-12.0996 0 -24.0996 5.5 -32 16l-48 64\n+c-10.9004 14.5996 -10.5996 34.7998 0.799805 49l45.9004 57.4004l61.5 -51.2002zM281.3 122.4l45.9004 -57.4004c11.3994 -14.2002 11.7002 -34.4004 0.799805 -49l-48 -64c-7.7998 -10.5 -19.7998 -16 -32 -16c-8.40039 0 -16.7998 2.59961 -24 8\n+c-17.7002 13.2002 -21.2002 38.2998 -8 56l29.4004 39.2002l-25.6006 32zM376.7 303c12.7002 -18.0996 8.39941 -43 -9.7002 -55.7998l-40.5996 -28.5c-17 -11.9004 -35.4004 -20.9004 -54.4004 -27.9004v-30.7998h-160v30.9004c-19 7 -37.4004 16 -54.4004 27.8994\n+l-40.5996 28.5c-18 12.7002 -22.4004 37.6006 -9.7002 55.7002c12.7002 18 37.6006 22.4004 55.7002 9.7002l40.5996 -28.4004c52.6006 -37 124.101 -37 176.801 0l40.5996 28.5c18.0996 12.6006 43 8.2998 55.7002 -9.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"baby-carriage\" unicode=\"&#xf77d;\" \n+d=\"M144.8 431l111.2 -175h-256c0 74 35.2998 140.1 90.7998 184.4c16.7998 13.3994 42.7002 8.39941 54 -9.40039zM496 352c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-48v-64c0 -50.5996 -23 -96.4004 -60.2998 -130.7\n+c34.5996 -8.89941 60.2998 -40 60.2998 -77.2998c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 8.90039 1.7002 17.2002 4.40039 25.2002c-21.5 -5.90039 -44.6006 -9.2002 -68.4004 -9.2002s-46.7998 3.2998 -68.4004 9.2002\n+c2.60059 -8 4.40039 -16.2998 4.40039 -25.2002c0 -44.2002 -35.7998 -80 -80 -80s-80 35.7998 -80 80c0 37.2998 25.7002 68.4004 60.2998 77.2998c-37.2998 34.2998 -60.2998 80.1006 -60.2998 130.7h384v64c0 35.2998 28.7002 64 64 64h48zM80 -16\n+c17.5996 0 32 14.4004 32 32s-14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32zM400 16c0 17.5996 -14.4004 32 -32 32s-32 -14.4004 -32 -32s14.4004 -32 32 -32s32 14.4004 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"biohazard\" unicode=\"&#xf780;\" horiz-adv-x=\"576\" \n+d=\"M287.9 336c-18.5 0 -36 -3.7998 -52.5 -9.5c-13.3008 10.2998 -23.6006 24.2998 -29.5 40.7002c25.1992 10.8994 53 16.8994 82.0996 16.8994c29.2002 0 57 -6.09961 82.2002 -17c-5.90039 -16.3994 -16.2002 -30.3994 -29.5 -40.6992\n+c-16.6006 5.7998 -34.2002 9.59961 -52.7998 9.59961zM163.6 9.2998c-47.5 35.5 -79.1992 90.7002 -83.2998 153.5c7.2998 2.10059 14.9004 3.10059 22.5 3.10059c9.2002 0 17.9004 -1.80078 26.4004 -4.60059c4.09961 -44.2998 26 -83.2002 58.8994 -109.6\n+c-4.09961 -16 -12.5 -30.6006 -24.5 -42.4004zM387.8 51.9004c32.7002 26.3994 54.6006 65.0996 58.7002 109.3c8.59961 2.7998 17.4004 4.7002 26.5996 4.7002c7.5 0 15 -1 22.2002 -3c-3.89941 -62.8008 -35.5996 -118 -83 -153.5c-12 11.7998 -20.3994 26.5 -24.5 42.5z\n+M501.3 256.9c34.6006 -20.4004 61 -53.3008 74.1006 -92.4004c1.2998 -3.7002 -0.200195 -7.7998 -3.5 -9.7998c-3.30078 -2 -7.5 -1.2998 -10 1.59961c-9.40039 10.7998 -19 19 -29.2002 25.1006c-57.2998 33.8994 -130.8 13.6992 -163.9 -45\n+c-33.0996 -58.7002 -13.3994 -134 43.9004 -167.9c10.2002 -6.09961 21.8994 -10.5 35.7998 -13.4004c3.7998 -0.799805 6.40039 -4.19922 6.40039 -8.09961c-0.100586 -4 -2.7002 -7.2998 -6.5 -8c-39.7002 -7.7998 -80.6006 -0.799805 -115.2 19.7002\n+c-18 10.5996 -32.9004 24.5 -45.2998 40.0996c-12.4004 -15.5996 -27.3008 -29.5 -45.3008 -40.0996c-34.5996 -20.5 -75.5 -27.5 -115.199 -19.7002c-3.80078 0.700195 -6.40039 4 -6.5 8c0 3.90039 2.69922 7.2998 6.39941 8.09961\n+c13.7998 3 25.6006 7.30078 35.7998 13.4004c57.3008 33.9004 77 109.2 43.9004 167.9c-33.0996 58.6992 -106.6 78.8994 -163.9 45c-10.1992 -6 -19.7998 -14.3008 -29.1992 -25.1006c-2.5 -2.89941 -6.7002 -3.59961 -10 -1.59961\n+c-3.30078 2.09961 -4.80078 6.09961 -3.5 9.7998c13.2998 39.0996 39.6992 71.9004 74.2998 92.4004c17.5996 10.3994 36.3994 16.5996 55.2998 19.8994c-6.09961 17.7002 -10 36.4004 -10 56.2002c0 41 14.5996 80.7998 41 112.2c2.5 3 6.59961 3.7002 10 1.7998\n+c3.2998 -1.90039 4.7998 -6 3.59961 -9.7002c-4.39941 -13.7998 -6.59961 -26.3994 -6.59961 -38.5c0 -67.7998 53.7998 -122.899 120 -122.899s120 55.0996 120 122.899c0 12.2002 -2.09961 24.7002 -6.59961 38.5c-1.2002 3.7002 0.299805 7.7998 3.59961 9.7002\n+c3.40039 1.90039 7.5 1.2002 10 -1.7998c26.5 -31.4004 41 -71.2002 41 -112.2c0 -19.7998 -4 -38.5 -10 -56.2002c19 -3.2998 37.7002 -9.5 55.2998 -19.8994zM287.9 127.9c26.5 0 48 21.5 48 48s-21.5 48 -48 48s-48 -21.5 -48 -48s21.5 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"blog\" unicode=\"&#xf781;\" \n+d=\"M172.2 221.2c75.5 -15 129.899 -89.2998 112.5 -172.2c-11.4004 -54.2998 -55.2998 -98.2998 -109.7 -109.7c-92.9004 -19.5 -175 51.2002 -175 140.7v248c0 13.2998 10.7002 24 24 24h48c13.2998 0 24 -10.7002 24 -24v-248c0 -26.5 21.5 -48 48 -48s48 21.5 48 48\n+c0 20.5996 -13.0996 38.2002 -31.2998 45c-9.60059 3.59961 -16.7002 11.7998 -16.7002 22v50.4004c0 14.8994 13.5996 26.6992 28.2002 23.7998zM209 448c163.2 -8.59961 294.4 -139.8 302.9 -303c0.5 -9.2002 -6.80078 -17 -16 -17h-32.1006\n+c-8.39941 0 -15.3994 6.59961 -15.8994 15c-7.5 129.5 -111.5 234.5 -240.9 241.5c-8.40039 0.400391 -15 7.40039 -15 15.9004v31.5996c0 9.2002 7.7998 16.5 17 16zM209.3 352c110.101 -8.5 198.2 -96.5996 206.601 -206.7\n+c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.0996 6.40039 -15.8994 14.7002c-6.90039 77 -68.1006 138.899 -144.9 145.2c-8.2998 0.599609 -14.7998 7.5 -14.7998 15.8994v32.1006c0 9.39941 8 16.7998 17.2998 16.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-day\" unicode=\"&#xf783;\" horiz-adv-x=\"448\" \n+d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM64 176v-96c0 -8.7998 7.2002 -16 16 -16h96c8.7998 0 16 7.2002 16 16v96c0 8.7998 -7.2002 16 -16 16h-96c-8.7998 0 -16 -7.2002 -16 -16zM400 384c26.5 0 48 -21.5 48 -48v-48h-448v48\n+c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"calendar-week\" unicode=\"&#xf784;\" horiz-adv-x=\"448\" \n+d=\"M0 -16v272h448v-272c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48zM64 176v-64c0 -8.7998 7.2002 -16 16 -16h288c8.7998 0 16 7.2002 16 16v64c0 8.7998 -7.2002 16 -16 16h-288c-8.7998 0 -16 -7.2002 -16 -16zM400 384c26.5 0 48 -21.5 48 -48v-48h-448\n+v48c0 26.5 21.5 48 48 48h48v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h128v48c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"candy-cane\" unicode=\"&#xf786;\" \n+d=\"M497.5 356c35.7002 -75.5 2.7998 -166.1 -68.9004 -209l-347.3 -206.5c-5.2002 -3 -10.7998 -4.5 -16.3994 -4.5c-10.9004 0 -21.5 5.59961 -27.5 15.5996l-32.8008 54.9004c-9.09961 15.2002 -4.19922 34.7998 11 43.9004l353.601 210.1\n+c15.0996 9.09961 20.0996 28.7998 11 43.9004c-6 10 -16.6006 15.5996 -27.5 15.5996c-5.60059 0 -11.2998 -1.40039 -16.4004 -4.5l-27.5 -16.4004c-5.2002 -3 -10.7998 -4.5 -16.3994 -4.5c-10.9004 0 -21.5 5.60059 -27.5 15.6006l-32.8008 54.8994\n+c-9.09961 15.2002 -4.19922 34.8008 11 43.9004l27.5 16.4004c25.6006 15.2998 53.9004 22.5996 81.8008 22.5996c59.3994 0 117.199 -33.0996 145.1 -92zM319.8 343c8.5 5.09961 18.1006 7.59961 27.9004 8.40039l-20.6006 61.7998\n+c-10.5 -2.10059 -20.5996 -5.5 -30.2998 -10.2002l20.5 -61.5zM145.9 16.2002l30.7998 18.2998l-60.5 38.5l-30.7998 -18.2998zM253.4 80.0996l30.7998 18.3008l-60.5 38.5l-30.7998 -18.3008zM364.3 146l30.7998 18.2998l-60.5 38.5l-30.7998 -18.2998zM384.7 343.3\n+c9.2002 -5.39941 17.2002 -13 22.8994 -22.2998l45.7002 45.7002c-6.59961 8.5 -14.2002 16.0996 -22.5996 22.5996zM466.8 235.5c4.60059 9.7998 8 20 10.1006 30.4004l-60.4004 20.0996c-0.0996094 -4.5 -0.700195 -9.09961 -1.7998 -13.5996\n+c-1.60059 -6.2002 -4.2002 -11.8008 -7.40039 -17.1006z\" \u002F>\n+    \u003Cglyph glyph-name=\"carrot\" unicode=\"&#xf787;\" \n+d=\"M298.2 291.4c61.7002 -30.1006 87.2998 -104.5 57.2002 -166.2c-12.6006 -25.7998 -33.1006 -45.4004 -57.1006 -57.1006l-102 -49.7998l-57 57c-6.2002 6.2002 -16.2998 6.2002 -22.5996 0s-6.2998 -16.3994 0 -22.5996l49.2002 -49.2002l-133.601 -65.2002\n+c-11.0996 -5.39941 -24.5996 -0.799805 -30 10.2998c-3.09961 6.40039 -2.89941 13.7002 0 19.7002l128.101 262.7l50.1992 -50.2002c3.10059 -3.09961 7.2002 -4.7002 11.3008 -4.7002c4.09961 0 8.19922 1.60059 11.2998 4.7002c6.2998 6.2002 6.2998 16.2998 0 22.6006\n+l-55.2002 55.1992c35.7002 43.3008 97.5 58.5 150.2 32.8008zM390.3 326.3c40.7002 19.5 88.7998 9.40039 121.7 -30.2998c-41.5996 -50.2998 -107.5 -52.5 -151.9 -7.90039l-8 8c-44.5996 44.4004 -42.3994 110.2 7.90039 151.9\n+c39.7002 -32.9004 49.7998 -81 30.2998 -121.7z\" \u002F>\n+    \u003Cglyph glyph-name=\"cash-register\" unicode=\"&#xf788;\" \n+d=\"M511.1 69.2002c0.600586 -3.5 0.900391 -7 0.800781 -10.5v-90.7002c0 -17.7002 -14.3008 -32 -32 -32h-448c-17.7002 0 -32 14.2998 -32 32v90.7998c0 3.5 0.299805 7 0.899414 10.5l26.7002 160c2.59961 15.4004 16 26.7002 31.5996 26.7002h84.9004v64h-96\n+c-8.7998 0 -16 7.2002 -16 16v96c0 8.7998 7.2002 16 16 16h256c8.7998 0 16 -7.2002 16 -16v-96.0996c0 -8.80078 -7.2002 -16 -16 -16h-96v-64h244.8c15.7002 0 29 -11.3008 31.6006 -26.7002zM280 200v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16\n+c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16zM248 136c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16zM216 216h-16c-8.7998 0 -16 -7.2002 -16 -16v-16\n+c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16zM80 368h192v32h-192v-32zM120 168c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16zM136 104\n+c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16zM352 -8v16c0 4.40039 -3.59961 8 -8 8h-176c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h176c4.40039 0 8 3.59961 8 8\n+zM376 104v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16c8.7998 0 16 7.2002 16 16zM424 184v16c0 8.7998 -7.2002 16 -16 16h-16c-8.7998 0 -16 -7.2002 -16 -16v-16c0 -8.7998 7.2002 -16 16 -16h16\n+c8.7998 0 16 7.2002 16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"compress-arrows-alt\" unicode=\"&#xf78c;\" \n+d=\"M200 160c13.2998 0 24 -10.7002 24 -24v-112c0 -21.4004 -25.7998 -32.0996 -40.9004 -17l-31.0996 33l-99.2998 -99.2998c-6.2002 -6.2002 -16.4004 -6.2002 -22.6006 0l-25.3994 25.3994c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l99.2002 99.2998l-32.9004 31\n+c-15.0996 15.2002 -4.40039 41 17 41h112zM312 224c-13.2998 0 -24 10.7002 -24 24v112c0 21.4004 25.7998 32.0996 40.9004 17l31.0996 -33l99.2998 99.2998c6.2002 6.2002 16.4004 6.2002 22.6006 0l25.3994 -25.3994c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006\n+l-99.2998 -99.2998l33 -31c15.0996 -15.0996 4.40039 -41 -17 -41h-112zM408 88l99.2998 -99.4004c6.2002 -6.19922 6.2002 -16.3994 0 -22.5996l-25.3994 -25.4004c-6.2002 -6.19922 -16.4004 -6.19922 -22.6006 0l-99.2998 99.3008l-31 -32.9004\n+c-15.0996 -15.0996 -41 -4.40039 -41 17v112c0 13.2998 10.7002 24 24 24h112c21.4004 0 32.0996 -25.7998 17 -40.9004zM183 376.9c15.0996 15.0996 41 4.39941 41 -16.9004v-112c0 -13.2998 -10.7002 -24 -24 -24h-112c-21.4004 0 -32.0996 25.7998 -17 40.9004\n+l33 31.0996l-99.2998 99.2998c-6.2002 6.2002 -6.2002 16.4004 0 22.6006l25.3994 25.3994c6.2002 6.2002 16.4004 6.2002 22.6006 0l99.2998 -99.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"dumpster\" unicode=\"&#xf793;\" horiz-adv-x=\"576\" \n+d=\"M560 288h-97.2998l-25.6006 128h98.9004c7.2998 0 13.7002 -5 15.5 -12.0996l24 -96c2.5 -10.1006 -5.09961 -19.9004 -15.5 -19.9004zM272 416v-128h-126.1l25.5996 128h100.5zM404.5 416l25.5996 -128h-126.1v128h100.5zM16 288c-10.4004 0 -18 9.7998 -15.5 19.9004\n+l24 96c1.7998 7.09961 8.2002 12.0996 15.5 12.0996h98.9004l-25.6006 -128h-97.2998zM560 224c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-28l-20 -160v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16h-320v-16\n+c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16l-20 160h-28c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h20l-4 32h512l-4 -32h20z\" \u002F>\n+    \u003Cglyph glyph-name=\"dumpster-fire\" unicode=\"&#xf794;\" horiz-adv-x=\"640\" \n+d=\"M418.7 343.9c-19.7002 -17.6006 -37.7002 -36.5 -53.9004 -55.8008h-60.7998v128h100.5l14.4004 -72zM272 416v-128h-126.1l25.5996 128h100.5zM461.3 343.9l-11.8994 10.5996l-12.3008 61.5h98.9004c7.2998 0 13.7002 -5 15.4004 -12.0996l24 -96\n+c0.199219 -0.800781 -0.100586 -1.5 0 -2.30078c-1 1 -2 2.2002 -3.10059 3.10059l-21.2998 19l-21.2998 -19c-5.90039 -5.2002 -11.6006 -10.7002 -17.2998 -16.2998c-15.6006 17.7998 -32.9004 35.1992 -51.1006 51.5zM16 288c-10.4004 0 -18 9.7998 -15.5 19.9004l24 96\n+c1.7998 7.09961 8.2002 12.0996 15.5 12.0996h98.9004l-25.6006 -128h-97.2998zM340.6 256c-32.6992 -46.7002 -52.5996 -93.7002 -52.5996 -129.6c0 -48.5 18.5996 -92.7002 48.7998 -126.4h-208.8v-16c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v16\n+l-20 160h-28c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h20l-4 32h308.6zM551.1 284.8c51.8008 -46.2002 88.9004 -121.8 88.8008 -158.399c0 -87.5 -71.6006 -158.4 -160 -158.4c-88.4004 0 -160 70.9004 -160 158.4c0 49.2998 49.7998 130.899 120 193.6\n+c27.3994 -24.4004 51.5 -50.5996 71 -76.4004c11.8994 14 25.2998 27.9004 40.1992 41.2002zM532.5 55.4004c33.4004 24.1992 41.2002 71.0996 22.5996 107.8c-2.2998 4.5 -4.89941 9.2002 -7.69922 14l-39.8008 -47s-62.3994 82.5 -67.0996 88.0996\n+c-32.9004 -40.8994 -49.4004 -64.7998 -49.4004 -91.8994c0 -54.5 39.9004 -88 88.9004 -88c19.5996 0 37.7998 6.2998 52.5 17z\" \u002F>\n+    \u003Cglyph glyph-name=\"ethernet\" unicode=\"&#xf796;\" \n+d=\"M496 256c8.7998 0 16 -7.2002 16 -16v-224c0 -8.7998 -7.2002 -16 -16 -16h-80v128h-32v-128h-64v128h-32v-128h-64v128h-32v-128h-64v128h-32v-128h-80c-8.7998 0 -16 7.2002 -16 16v224c0 8.7998 7.2002 16 16 16h48v48c0 8.7998 7.2002 16 16 16h48v48\n+c0 8.7998 7.2002 16 16 16h224c8.7998 0 16 -7.2002 16 -16v-48h48c8.7998 0 16 -7.2002 16 -16v-48h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"gifts\" unicode=\"&#xf79c;\" horiz-adv-x=\"640\" \n+d=\"M240.6 253.9c-27.7998 -6.90039 -48.5996 -32 -48.5996 -61.9004v-224c0 -11.7002 3.40039 -22.5 8.90039 -32h-168.9c-17.7002 0 -32 14.2998 -32 32v352c0 17.7002 14.2998 32 32 32h29.4004l-30.7002 22c-7.2002 5.09961 -8.7998 15.0996 -3.7002 22.2998l9.2998 13\n+c5.10059 7.2002 15.1006 8.7998 22.2998 3.7002l32.1006 -22.7998l-11.5 30.5996c-3.2002 8.2002 1 17.5 9.2998 20.6006l15 5.59961c8.2998 3.09961 17.5 -1.09961 20.5996 -9.40039l19.9004 -53.0996l19.9004 53c3.09961 8.2998 12.2998 12.5 20.5996 9.40039l15 -5.60059\n+c8.2998 -3.09961 12.5 -12.2998 9.40039 -20.5996l-11.5 -30.6006l32 22.9004c7.19922 5.2002 17.1992 3.5 22.2998 -3.7002l9.2998 -13c5.2002 -7.2002 3.5 -17.2002 -3.7002 -22.2998l-30.7002 -22h29.4004c12.7002 0 23.4004 -7.5 28.5996 -18.2998\n+c-26.6992 -18.6006 -42.0996 -49 -44 -79.7998zM224 -32v96h192v-128h-160c-17.7002 0 -32 14.2998 -32 32zM448 -64v128h192v-96c0 -17.7002 -14.2998 -32 -32 -32h-160zM608 224c17.7002 0 32 -14.2998 32 -32v-96h-192v128h-15.2998l-0.700195 0.200195\n+l-0.700195 -0.200195h-15.2998v-128h-192v96c0 17.7002 14.2998 32 32 32h20.4004c-2.7002 7.59961 -4.40039 15.5 -4.40039 23.7998c0 35.5 27 72.2002 72.0996 72.2002c48 0 75.8008 -47.7002 87.9004 -75.2998c12 27.5996 39.7998 75.2998 87.9004 75.2998\n+c45.0996 0 72.0996 -36.7002 72.0996 -72.2002c0 -8.2998 -1.7998 -16.2002 -4.40039 -23.7998h20.4004zM336 224h52.5996c-8.89941 20.5996 -25.7998 48 -44.5 48c-17.6992 0 -24.0996 -14.5 -24.0996 -24.2002c0 -5.2002 1.5 -12.5996 8.7998 -19\n+c2.10059 -1.7998 4.5 -3.39941 7.2002 -4.7998zM535.2 228.8c7.2998 6.40039 8.7998 13.7998 8.7998 19c0 9.7002 -6.40039 24.2002 -24.0996 24.2002c-18.7002 0 -35.7002 -27.7002 -44.5 -48h52.5996c2.7002 1.40039 5.09961 3 7.2002 4.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"glass-cheers\" unicode=\"&#xf79f;\" horiz-adv-x=\"640\" \n+d=\"M639.4 14.4004c1.69922 -4.10059 -0.300781 -8.7002 -4.30078 -10.4004l-162.399 -67.4004c-4 -1.69922 -8.7002 0.200195 -10.4004 4.30078c-8.5 20.3994 1.2002 43.7998 21.6006 52.2998l22.0996 9.2002l-39.2998 103.6\n+c-4.40039 -0.5 -8.7998 -1.2998 -13.1006 -1.2998c-51.6992 0 -99.3994 33.0996 -113.399 85.2998l-20.2002 75.4004l-20.2002 -75.4004c-14 -52.2002 -61.7002 -85.2998 -113.399 -85.2998c-4.30078 0 -8.7002 0.799805 -13.1006 1.2998l-39.3994 -103.6l22.0996 -9.2002\n+c20.4004 -8.5 30 -31.9004 21.5996 -52.2998c-1.69922 -4.10059 -6.2998 -6 -10.3994 -4.30078l-162.3 67.4004c-4.10059 1.7002 -6 6.40039 -4.30078 10.5c8.5 20.4004 31.8008 30.0996 52.2002 21.5996l22.1006 -9.19922l38.6992 101.899\n+c-47.8994 34.9004 -64.6992 100.2 -34.5 152.7l86.6006 150.5c8 13.9004 25.0996 19.7998 40 13.5996l114.3 -47.3994l114.3 47.3994c14.9004 6.10059 32 0.300781 40 -13.5996l86.6006 -150.5c30.2998 -52.5 13.3994 -117.8 -34.5 -152.8l38.6992 -101.9l22.1006 9.2002\n+c20.3994 8.5 43.7998 -1.2002 52.2002 -21.5996zM275.9 285.9l18.8994 70.6992l-94.5 39.2002l-36.5 -63.3994zM364.1 285.9l112.101 46.5l-36.5 63.3994l-94.5 -39.2002z\" \u002F>\n+    \u003Cglyph glyph-name=\"glass-whiskey\" unicode=\"&#xf7a0;\" \n+d=\"M480 416c19.5 0 34.4004 -17.2002 31.7002 -36.5l-55.6006 -356.5c-4.5 -31.5 -31.5996 -54.9004 -63.3994 -54.9004h-273c-31.9004 0 -58.9004 23.4004 -63.4004 54.9004l-56 356.5c-2.7002 19.2998 12.2002 36.5 31.7002 36.5h448zM442.6 352h-373.199l30.1992 -192\n+h313z\" \u002F>\n+    \u003Cglyph glyph-name=\"globe-europe\" unicode=\"&#xf7a2;\" horiz-adv-x=\"496\" \n+d=\"M248 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM448 192c0 110.3 -89.7002 200 -200.2 200c-1.89941 0 -3.7998 -0.200195 -5.7002 -0.299805l-28.8994 -21.7002c-2 -1.5 -3.2002 -3.90039 -3.2002 -6.40039v-20\n+c0 -4.39941 3.59961 -8 8 -8h16c4.40039 0 8 3.60059 8 8v8l16 16h20.7002c6.2002 0 11.2998 -5.09961 11.2998 -11.2998c0 -3 -1.2002 -5.89941 -3.2998 -8l-26.7998 -26.7998c-1.2002 -1.2002 -2.7002 -2.09961 -4.40039 -2.7002l-40 -13.2998\n+c-3.2998 -1.09961 -5.5 -4.2002 -5.5 -7.59961c0 -6.60059 -2.59961 -12.9004 -7.2002 -17.5l-20.0996 -20.1006c-3 -3 -4.7002 -7.09961 -4.7002 -11.2998v-25.2998c0 -8.7998 7.2002 -16 16 -16h22.0996c6.10059 0 11.6006 3.39941 14.3008 8.7998l9.39941 18.7002\n+c1.40039 2.7002 4.2002 4.39941 7.2002 4.39941h3.09961c4.40039 0 8 -3.59961 8 -8c0 -4.39941 3.60059 -8 8 -8h16c4.40039 0 8 3.60059 8 8v2.2002c0 3.5 2.2002 6.5 5.5 7.60059l31.6006 10.5c6.5 2.19922 10.8994 8.2998 10.8994 15.1992v4.5\n+c0 8.80078 7.2002 16 16 16h36.7002c6.2002 0 11.2998 -5.09961 11.2998 -11.2998v-9.39941c0 -6.2002 -5.09961 -11.3008 -11.2998 -11.3008h-32c-3 0 -5.89941 -1.19922 -8 -3.2998l-9.39941 -9.39941c-2.10059 -2.10059 -3.30078 -5 -3.30078 -8\n+c0 -6.2002 5.10059 -11.3008 11.3008 -11.3008h16c3 0 5.89941 -1.19922 8 -3.2998l9.39941 -9.39941c2.10059 -2.10059 3.2998 -5 3.2998 -8v-8.7002l-12.5 -12.5c-4.59961 -4.60059 -4.59961 -12.1006 -0.0996094 -16.7002l32 -32.5996\n+c3 -3.10059 7.09961 -4.80078 11.4004 -4.80078h20.2998c6.89941 20.2002 10.7998 41.9004 10.7998 64.4004zM130.1 298.9c0 -6.2002 5.10059 -11.3008 11.3008 -11.3008h16c3 0 5.89941 1.2002 8 3.30078l9.39941 9.39941c2.10059 2.10059 3.2998 5 3.2998 8v16\n+c0 6.2002 -5.09961 11.2998 -11.2998 11.2998c-3 0 -5.89941 -1.19922 -8 -3.2998l-25.3994 -25.3994c-2.10059 -2.10059 -3.30078 -5 -3.30078 -8zM258.1 -7.5c71.1006 3.59961 132.5 44.2002 164.9 103.1h-13.4004c-4.7998 0 -9.5 1.90039 -12.8994 5.30078\n+l-17.2998 17.2998c-6 6 -14.1006 9.39941 -22.6006 9.39941h-18.2998l-43.2002 37.1006c-8.2002 7 -18.7002 10.8994 -29.5996 10.8994h-31.2002c-8.2002 0 -16.2998 -2.2998 -23.4004 -6.5l-42.8994 -25.6992c-13.7002 -8.2002 -22.1006 -23 -22.1006 -39v-23.9004\n+c0 -14.2998 6.7002 -27.7998 18.2002 -36.4004l22.2002 -16.6992c8.7002 -6.5 24.5996 -11.8008 35.4004 -11.8008h20.1992c8.80078 0 16 -7.19922 16 -16v-7.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"grip-lines\" unicode=\"&#xf7a4;\" \n+d=\"M496 160c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v32c0 8.7998 7.2002 16 16 16h480zM496 288c8.7998 0 16 -7.2002 16 -16v-32c0 -8.7998 -7.2002 -16 -16 -16h-480c-8.7998 0 -16 7.2002 -16 16v32\n+c0 8.7998 7.2002 16 16 16h480z\" \u002F>\n+    \u003Cglyph glyph-name=\"grip-lines-vertical\" unicode=\"&#xf7a5;\" horiz-adv-x=\"256\" \n+d=\"M96 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-480zM224 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32\n+c8.7998 0 16 -7.2002 16 -16v-480z\" \u002F>\n+    \u003Cglyph glyph-name=\"guitar\" unicode=\"&#xf7a6;\" \n+d=\"M502.63 409c5.15625 -5.1709 9.33984 -15.293 9.33984 -22.5947c0 -7.31543 -4.19727 -17.4521 -9.37012 -22.625l-46.3301 -46.3203c-3.24707 -3.25684 -9.4248 -7.07812 -13.7891 -8.53027l-36.4805 -12.1602l-76.2402 -76.2393\n+c8.79004 -12.2002 15.7705 -25.5605 19.1602 -40.2002c7.74023 -33.3896 0.870117 -66.8701 -22 -89.75c-7.87793 -7.8418 -22.877 -16.9141 -33.4795 -20.25c-18.54 -6.00977 -32.6709 -23.29 -34.4307 -42.1396c-2.29004 -23.8105 -11.4502 -45.8301 -28.4502 -62.71\n+c-45.5596 -45.4805 -127.5 -37.3809 -182.979 18.0693c-55.4805 55.4502 -63.6904 137.45 -18.0498 182.96c16.8799 16.9902 38.9102 26.1699 62.6094 28.4404c18.9404 1.76953 36.1504 15.8994 42.1504 34.46c3.33105 10.6016 12.3984 25.5957 20.2402 33.4697\n+c22.8799 22.8799 56.4297 29.7803 89.8799 22c14.5996 -3.39941 27.9395 -10.3799 40.0996 -19.1396l76.2598 76.2598l12.1602 36.5098c1.45215 4.36426 5.27344 10.542 8.53027 13.79l46.2803 46.3301c5.17383 5.1748 15.3115 9.375 22.6299 9.375\n+c7.31738 0 17.4561 -4.2002 22.6299 -9.375zM208 96c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48s-48 -21.5039 -48 -48s21.5039 -48 48 -48z\" \u002F>\n+    \u003Cglyph glyph-name=\"heart-broken\" unicode=\"&#xf7a9;\" \n+d=\"M473.7 374.2c48.7002 -49.7998 50.7998 -129.101 7.2998 -182.101l-212.2 -218.699c-7.09961 -7.30078 -18.5996 -7.30078 -25.7002 0l-212.1 218.6c-43.5 53.0996 -41.4004 132.4 7.2998 182.2l2.40039 2.39941c46.2998 47.4004 119 51.8008 170.7 14l28.5996 -86.5\n+l-96 -64l144 -144l-48 128l96 64l-34.2998 103.4c51.5996 36.9004 123.6 32.2002 169.6 -14.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"holly-berry\" unicode=\"&#xf7aa;\" horiz-adv-x=\"448\" \n+d=\"M144 256c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM256 304c0 26.5 21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48zM224 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48z\n+M207.8 212.9c-0.399414 -39.8008 7.40039 -78.1006 22.9004 -112.301c4 -8.89941 -2 -19.1992 -11.7002 -20.1992c-15.2002 -1.5 -30.4004 -4.60059 -45.2998 -9.10059c-14.9004 -4.5 -23.7998 -19.8994 -20.2002 -35.0996s8.5 -29.9004 14.7002 -43.7998\n+c4 -8.90039 -1.90039 -19.3008 -11.6006 -20.2002c-35.8994 -3.40039 -71.5996 -14.9004 -104.8 -33.9004c-12.3994 -7.09961 -27.5 1.60059 -27.5996 16c-0.100586 38.2002 -8 74.9004 -23 107.7c-4 8.90039 2 19.2002 11.7002 20.2002\n+c15.1992 1.5 30.3994 4.59961 45.2998 9.09961c14.8994 4.5 23.7998 19.9004 20.2002 35.1006c-3.60059 15.1992 -8.5 29.8994 -14.7002 43.7998c-4 8.89941 1.89941 19.2998 11.5996 20.2002c37.2998 3.5 74.4004 15.8994 108.7 36.1992\n+c10.7002 6.40039 23.9004 -1.2998 23.7998 -13.6992zM435 82.4004c9.7002 -1 15.7998 -11.4004 11.5 -20.1006c-15 -32.7002 -22.7998 -69.5 -23 -107.7c0 -14.3994 -15.0996 -23.0996 -27.5996 -16c-33.2002 19 -68.9004 30.5 -104.801 33.9004\n+c-9.69922 0.900391 -15.5996 11.2998 -11.5996 20.2002c6.2002 14 11.0996 28.5996 14.7002 43.7998c3.59961 15.2002 -5.2998 30.5996 -20.2002 35.0996c-4.90039 1.5 -9.90039 2.5 -14.7998 3.7002c5.7998 12.2998 6.2998 26.5 0.599609 38.9004\n+c-12.8994 28.2998 -19.7002 60.7002 -19.8994 94c0 1.7002 0.199219 3.2998 0.199219 4.89941c-0.0996094 12.3008 13.1006 20 23.8008 13.7002c34.2998 -20.2998 71.3994 -32.7002 108.699 -36.2002c9.7002 -0.899414 15.6006 -11.2998 11.6006 -20.1992\n+c-6.2002 -14 -11.1006 -28.6006 -14.7002 -43.8008c-3.59961 -15.1992 5.2998 -30.5996 20.2002 -35.0996c15 -4.40039 30.0996 -7.5 45.2998 -9.09961z\" \u002F>\n+    \u003Cglyph glyph-name=\"horse-head\" unicode=\"&#xf7ab;\" \n+d=\"M509.8 115.5c4.60059 -11.7998 1.7998 -25.2998 -7.09961 -34.4004l-45.2998 -39.7998c-6 -6 -14.1006 -9.39941 -22.6006 -9.39941h-50.2998c-10.2998 0 -20 4.89941 -26 13.2998l-46 63.8994c-13.7998 -8.09961 -29.5996 -13.1992 -46.7998 -13.1992\n+c-39.2002 0 -72.6006 23.6992 -87.4004 57.3994c-2.2998 5.10059 -9 6.2998 -12.8994 2.40039l-12.1006 -12.1006c-2.5 -2.39941 -3.2002 -6.19922 -1.59961 -9.2998c19.7002 -38.8994 58.7002 -66.0996 104.3 -69.5996v-0.700195l40.7998 -81.7002\n+c10.7002 -21.2998 -4.7998 -46.2998 -28.5996 -46.2998h-236.2c-17.7002 0 -32 14.2998 -32 32v81.2002c0 159.899 35.9004 275.399 166.9 322.5l202.199 75.7002c4.90039 1.7998 10.7002 -1.10059 12 -6.10059c12.1006 -46.3994 -16.1992 -71.7002 -34.1992 -82.2998\n+c42.5996 -8.2002 78.0996 -38 93 -79.2002zM328 224c13.2998 0 24 10.7002 24 24s-10.7002 24 -24 24s-24 -10.7002 -24 -24s10.7002 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"icicles\" unicode=\"&#xf7ad;\" \n+d=\"M511.4 410.1l-87.5 -467.699c-1.7002 -8.60059 -14 -8.60059 -15.7002 0l-66.7002 363.8l-45.7998 -172.5c-2.2998 -7.60059 -13 -7.60059 -15.2998 0l-34.1006 133.399l-46.5 -196.899c-1.89941 -8.2998 -13.7002 -8.2998 -15.5996 0l-44.2002 187.3l-36.4004 -124.1\n+c-2.39941 -7.2002 -12.5996 -7.2002 -15.0996 0l-87.0996 273.399c-6.2002 20.5 9.19922 41.2002 30.5996 41.2002h448c20 0 35.0996 -18.2002 31.4004 -37.9004z\" \u002F>\n+    \u003Cglyph glyph-name=\"igloo\" unicode=\"&#xf7ae;\" horiz-adv-x=\"576\" \n+d=\"M320 414.1v-126.1h-271.4c51.6006 77.2002 139.601 128 239.4 128c10.7998 0 21.5 -0.700195 32 -1.90039zM96 256v-128h-96c0 46 11.0996 89.4004 30.2998 128h65.7002zM352 408.6c72.7998 -16.5 135.2 -60.5 175.4 -120.6h-175.4v120.6zM480 128v128h65.7002\n+c19.2002 -38.5996 30.2998 -82 30.2998 -128h-96zM416 64c0 11.0996 -1.90039 21.7002 -4.5 32h164.5v-96c0 -17.7002 -14.2998 -32 -32 -32h-128v96zM448 256v-128h-49.7998c-22.2002 38.0996 -63 64 -110.2 64s-88 -25.9004 -110.2 -64h-49.7998v128h320zM0 0v96h164.5\n+c-2.59961 -10.2998 -4.5 -20.9004 -4.5 -32v-96h-128c-17.7002 0 -32 14.2998 -32 32zM288 160c53 0 96 -43 96 -96v-96h-192v96c0 53 43 96 96 96z\" \u002F>\n+    \u003Cglyph glyph-name=\"mitten\" unicode=\"&#xf7b5;\" horiz-adv-x=\"448\" \n+d=\"M368 32c8.7998 0 16 -7.2002 16 -16v-64c0 -8.7998 -7.2002 -16 -16 -16h-320c-8.7998 0 -16 7.2002 -16 16v64c0 8.7998 7.2002 16 16 16h320zM425 241.1c27.0996 -22.5996 30.7998 -62.8994 8.09961 -90.0996l-72.5 -87h-309l-47.8994 207.6\n+c-17.9004 77.5 30.5 154.801 107.899 172.7c77.4004 17.9004 154.801 -30.5 172.801 -108l29.5996 -128.399l20.9004 25c22.5996 27.1992 62.8994 30.7998 90.0996 8.19922z\" \u002F>\n+    \u003Cglyph glyph-name=\"mug-hot\" unicode=\"&#xf7b6;\" \n+d=\"M127.1 301.5c-2.69922 16.5996 -10.3994 31.9004 -22.3994 44.0996c-22.6006 23.1006 -36.7002 52.5 -40.6006 84.4004c-1.09961 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5\n+c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM239.1 301.5c-2.69922 16.5996 -10.3994 31.9004 -22.3994 44.0996c-22.6006 23.1006 -36.7002 52.5 -40.6006 84.4004\n+c-1.19922 9.5 6.5 18 16.3008 18h16.3994c8.2002 0 15 -5.90039 16.1006 -13.7998c2.7998 -20.2002 12 -38.7998 26.3994 -53.5c20.2002 -20.5 32.7998 -46.5 36.6006 -74.7002c1.2998 -9.5 -6.5 -18 -16.3008 -18h-16.5c-8 0 -14.6992 5.7998 -16 13.5zM400 256\n+c61.7998 0 112 -50.2002 112 -112s-50.2002 -112 -112 -112h-16c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 17.7002 14.2998 32 32 32h368zM400 96c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-16v-96h16z\" \u002F>\n+    \u003Cglyph glyph-name=\"radiation\" unicode=\"&#xf7b9;\" horiz-adv-x=\"496\" \n+d=\"M328.2 192.2c0 28.5996 -15.2002 53.5 -37.7998 67.7998l80.3994 128.4c4.7998 7.69922 15.2998 10.0996 22.7002 4.7998c58.0996 -42 97.4004 -108.4 102.5 -184.2c0.599609 -9.09961 -7.09961 -16.7998 -16.2002 -16.7998h-151.6zM290.4 124.5l80.3994 -128.5\n+c4.7998 -7.59961 2.40039 -18.0996 -5.59961 -22.4004c-34.9004 -18.7998 -74.7998 -29.5996 -117.2 -29.5996s-82.2998 10.7998 -117.2 29.5996c-8 4.30078 -10.3994 14.7002 -5.59961 22.4004l80.3994 128.5c12.4004 -7.7002 26.8008 -12.4004 42.4004 -12.4004\n+s30.0996 4.7002 42.4004 12.4004zM248 144.2c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM16.2002 192.2c-9.10059 0 -16.7998 7.7002 -16.2002 16.7002c5.09961 75.7998 44.4004 142.199 102.5 184.199\n+c7.40039 5.40039 17.9004 2.90039 22.7002 -4.7998l80.3994 -128.399c-22.5996 -14.2002 -37.7998 -39.1006 -37.7998 -67.7002h-151.6z\" \u002F>\n+    \u003Cglyph glyph-name=\"radiation-alt\" unicode=\"&#xf7ba;\" horiz-adv-x=\"496\" \n+d=\"M312 192c0 22.7998 -12.0996 42.7998 -30.0996 54l41.6992 66.7998c5.2002 8.2998 16.4004 9.90039 24 3.7998c32.5 -26 54.9004 -64.1992 59.5 -107.8c0.900391 -9.09961 -6.7998 -16.7998 -16 -16.7998h-79.0996zM214.2 137.9\n+c9.7998 -6.2002 21.5 -9.90039 33.8994 -9.90039c12.4004 0 24 3.7002 33.8008 9.90039l41.7998 -66.9004c4.7998 -7.7998 2.39941 -18.4004 -5.7998 -22.5c-21.2002 -10.4004 -44.8008 -16.5 -69.9004 -16.5s-48.7002 6.09961 -69.7998 16.5\n+c-8.2002 4.09961 -10.7002 14.7002 -5.7998 22.5zM104.9 192c-9.2002 0 -17 7.7002 -15.9004 16.9004c4.59961 43.5996 26.9004 81.7998 59.5 107.8c7.59961 6.09961 18.7998 4.5 24 -3.7998l41.7002 -66.8008c-18.1006 -11.2998 -30.2002 -31.2998 -30.2002 -54.0996\n+h-79.0996zM248 -56c-137 0 -248 111 -248 248s111 248 248 248s248 -111 248 -248s-111 -248 -248 -248zM248 376c-101.5 0 -184 -82.5 -184 -184s82.5 -184 184 -184s184 82.5 184 184s-82.5 184 -184 184zM248 160c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32\n+s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"restroom\" unicode=\"&#xf7bd;\" horiz-adv-x=\"640\" \n+d=\"M128 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM512 320c-35.2998 0 -64 28.7002 -64 64s28.7002 64 64 64s64 -28.7002 64 -64s-28.7002 -64 -64 -64zM639.3 93.5c3.7002 -15.0996 -8.2998 -29.5 -24.5 -29.5\n+h-54.7998v-104c0 -13.2998 -10.7002 -24 -24 -24h-48c-13.2998 0 -24 10.7002 -24 24v104h-54.7998c-16.2002 0 -28.2002 14.4004 -24.7002 29.5l45.5996 185.8c3.30078 13.5 15.5 23 29.8008 24.2002c15 -9.7002 32.7998 -15.5 52 -15.5c19.1992 0 37 5.7998 52 15.5\n+c14.2998 -1.2002 26.5 -10.7002 29.7998 -24.2002zM336 448c8.7998 0 16 -7.2002 16 -16v-480c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32zM180.1 303.6c24.6006 -2.09961 43.9004 -22.5 43.9004 -47.5996v-136\n+c0 -13.2998 -10.7002 -24 -24 -24h-8v-136c0 -13.2998 -10.7002 -24 -24 -24h-80c-13.2998 0 -24 10.7002 -24 24v136h-8c-13.2998 0 -24 10.7002 -24 24v136c0 25.0996 19.2998 45.5 43.9004 47.5996c15 -9.7998 32.8994 -15.5996 52.0996 -15.5996\n+s37.0996 5.7998 52.0996 15.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"satellite\" unicode=\"&#xf7bf;\" \n+d=\"M502.7 183c12.3994 -12.4004 12.3994 -32.5996 -0.100586 -45l-96.6992 -96.7002c-6.2002 -6.2002 -14.4004 -9.2998 -22.5 -9.2998c-8.10059 0 -16.3008 3.09961 -22.5 9.2998l-80.3008 80.4004l-9.89941 -9.90039c24.2998 -53.7002 22.7002 -116.2 -5.40039 -168.5\n+c-4.5 -8.5 -16.3994 -9.59961 -23.2002 -2.7998l-107.5 107.5l-17.7998 -17.7998c0.700195 -2.60059 1.60059 -5 1.60059 -7.7998c0 -17.7002 -14.3008 -32 -32 -32c-17.7002 0 -32 14.2998 -32 32c0 17.6992 14.2998 32 32 32c2.7998 0 5.19922 -0.900391 7.7998 -1.60059\n+l17.7998 17.7998l-107.5 107.5c-6.7998 6.80078 -5.7002 18.6006 2.7998 23.2002c52.2998 28.1006 114.8 29.7002 168.5 5.40039l9.7998 9.7998l-80.2998 80.4004c-12.3994 12.5 -12.3994 32.6992 0 45.0996l96.7002 96.7002c6.2002 6.2002 14.2998 9.2998 22.5 9.2998\n+s16.2998 -3.09961 22.5996 -9.2998l80.3008 -80.2998l47.7998 47.8994c13.0996 13.1006 34.3994 13.1006 47.5 0l47.5 -47.5c13.0996 -13.0996 13.0996 -34.3994 0 -47.5l-47.7998 -47.8994zM150.7 319.5l68.8994 -68.9004l73.8008 73.8008l-68.9004 68.8994zM383.5 86.7002\n+l73.7998 73.7998l-68.8994 68.9004l-73.8008 -73.8008z\" \u002F>\n+    \u003Cglyph glyph-name=\"satellite-dish\" unicode=\"&#xf7c0;\" \n+d=\"M188.8 102.1l116.601 -116.6c7.39941 -7.2998 6.19922 -20.0996 -3 -25c-77.7002 -41.7998 -176.7 -29.9004 -242.301 35.7002c-65.5996 65.5996 -77.5 164.5 -35.6992 242.3c4.89941 9.09961 17.6992 10.2998 25 3l116.8 -116.8l27.3994 27.3994\n+c-0.699219 2.60059 -1.59961 5 -1.59961 7.80078c0 17.6992 14.2998 32 32 32s32 -14.3008 32 -32c0 -17.7002 -14.2998 -32 -32 -32c-2.7998 0 -5.2002 0.899414 -7.7998 1.59961zM209 448c163.2 -8.59961 294.4 -139.8 302.9 -303c0.5 -9.2002 -6.80078 -17 -16 -17\n+h-32.1006c-8.39941 0 -15.3994 6.59961 -15.8994 15c-7.5 129.5 -111.5 234.5 -240.9 241.5c-8.40039 0.400391 -15 7.40039 -15 15.9004v31.5996c0 9.2002 7.7998 16.5 17 16zM209.3 352c110.101 -8.5 198.2 -96.5996 206.601 -206.7\n+c0.699219 -9.2998 -6.80078 -17.2998 -16.1006 -17.2998h-32.2002c-8.2998 0 -15.0996 6.40039 -15.8994 14.7002c-6.90039 77 -68.1006 138.899 -144.9 145.2c-8.2998 0.599609 -14.7998 7.5 -14.7998 15.8994v32.1006c0 9.39941 8 16.7998 17.2998 16.0996z\" \u002F>\n+    \u003Cglyph glyph-name=\"sd-card\" unicode=\"&#xf7c2;\" horiz-adv-x=\"384\" \n+d=\"M320 448c35.2998 0 64 -28.7002 64 -64v-384c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v320l128 128h192zM160 288v96h-48v-96h48zM240 288v96h-48v-96h48zM320 288v96h-48v-96h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sim-card\" unicode=\"&#xf7c4;\" horiz-adv-x=\"384\" \n+d=\"M0 384c0 35.2998 28.7002 64 64 64h192l128 -128v-320c0 -35.2998 -28.7002 -64 -64 -64h-256c-35.2998 0 -64 28.7002 -64 64v384zM224 192v64h-64v-64h64zM320 192v32c0 17.7002 -14.2998 32 -32 32h-32v-64h64zM256 64v-64h32c17.7002 0 32 14.2998 32 32v32h-64z\n+M160 64v-64h64v64h-64zM64 64v-32c0 -17.7002 14.2998 -32 32 -32h32v64h-64zM64 160v-64h256v64h-256zM64 224v-32h64v64h-32c-17.7002 0 -32 -14.2998 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"skating\" unicode=\"&#xf7c5;\" horiz-adv-x=\"448\" \n+d=\"M400 448c26.5 0 48 -21.5 48 -48s-21.5 -48 -48 -48s-48 21.5 -48 48s21.5 48 48 48zM400 0c8.7998 0 16 -7.2002 16 -16c0 -26.5 -21.5 -48 -48 -48h-96c-8.7998 0 -16 7.2002 -16 16s7.2002 16 16 16h96c8.7998 0 16 7.2002 16 16s7.2002 16 16 16zM117.8 -8.59961\n+c6.2998 6.2998 16.5 6.19922 22.7002 0c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006c-9.2998 -9.2998 -21.5996 -14 -33.9004 -14c-12.2998 0 -24.5996 4.60059 -34 14l-67.8994 67.9004c-6.2002 6.2002 -6.2002 16.3994 0 22.5996s16.3994 6.2002 22.5996 0\n+l67.9004 -67.8994c6.2002 -6.30078 16.3994 -6.2002 22.5996 0zM173.9 171.2c3.7998 -6.10059 8.19922 -11.7998 13.1992 -16.7998l30.2002 -30.2002l-91.8994 -91.9004c-6.2002 -6.2998 -14.4004 -9.39941 -22.6006 -9.39941s-16.3994 3.19922 -22.5996 9.39941\n+c-12.5 12.4004 -12.5 32.7002 0 45.2002zM128 288c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h204.6c16.3008 0 30.8008 -9.7002 37 -24.7002c6.2002 -15 2.80078 -32.0996 -8.69922 -43.5996l-82.3008 -82.2998c-0.5 -0.5 -1.19922 -0.700195 -1.69922 -1.10059\n+l61 -61c9 -8.89941 14.0996 -21.2998 14.0996 -33.8994v-89.4004c0 -17.7002 -14.2998 -32 -32 -32s-32 14.2998 -32 32v82.7998l-78.2002 78.2002c-12.5996 12.5 -19.3994 29.9004 -18.7002 47.7002c0.700195 17.7002 8.80078 34.5996 22.3008 46.0996l20.0996 17.2002\n+h-105.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"skiing\" unicode=\"&#xf7c9;\" \n+d=\"M432 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM505 -4.09961c9.2998 -9.30078 9.2998 -24.5 0 -33.8008c-17 -17 -39.7998 -26 -63 -26c-12.5996 0 -25.2002 2.60059 -37.0996 8.10059l-391.9 202.5\n+c-11.7998 6 -16.4004 20.5 -10.2998 32.2998c6.09961 11.7998 20.5996 16.2998 32.2998 10.2998l197.9 -102.3l45.8994 68.7998l-75.0996 75.2002c-14.2998 14.4004 -20.6006 34.5 -17.7002 54.4004l107 -53.1006l40.4004 -40.5\n+c16.1992 -16.0996 18.6992 -41.5996 6 -60.5996l-49.2002 -73.7998l135.8 -70.2002c14.5996 -6.7002 33 -3.40039 45.0996 8.7002c9.30078 9.39941 24.5 9.39941 33.9004 0zM120 356.4l-26.2002 23c-2.2002 1.89941 -2.39941 5.19922 -0.5 7.39941\n+c1.2998 1.5 3.2002 2.10059 5 1.7002l34.4004 -7h0.200195l11.0996 21.7002c13.7002 -7 21.2002 -21.1006 20.9004 -35.6006l62.5 -31l81.1992 32.5c43.6006 17.4004 76.4004 -15 84.5 -39.1992l17.1006 -51.2002l52.0996 -26.1006\n+c15.7998 -7.89941 22.2002 -27.0996 14.2998 -42.8994c-7.89941 -15.7998 -27 -22.2002 -42.8994 -14.2998l-58.1006 29c-11.3994 5.69922 -20 15.5996 -24 27.6992l-6.39941 19.1006l-32.4004 -13l-114.5 56.7998c0.100586 0.0996094 0.100586 0.200195 0.200195 0.299805\n+l-47.2002 23.4004c-11.5996 -9.7002 -28.3994 -12.1006 -42.7998 -4.7998z\" \u002F>\n+    \u003Cglyph glyph-name=\"skiing-nordic\" unicode=\"&#xf7ca;\" horiz-adv-x=\"576\" \n+d=\"M336 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM552 32c13.2002 0 24 -10.7998 24 -24c0 -39.7002 -32.2998 -72 -72 -72h-480c-13.2002 0 -24 10.7002 -24 24s10.7998 24 24 24h42.9004l54.0996 270.8\n+c-0.700195 0.799805 -1.7002 1.2002 -2.40039 2.10059c-10.7998 14.0996 -8.09961 34.1992 5.90039 44.8994l39.7002 30.4004c23 17.5996 52.5 23.8994 80.7998 17.0996l71.2002 -21.2002c26.2998 -6.69922 49.2998 -25.3994 61.7998 -50.8994l26.0996 -53.2002h44\n+c17.7002 0 32 -14.2998 32 -32c0 -13.4004 -8.39941 -24.9004 -20.0996 -29.5996l-25.5 -178.4h69.5c13.2002 0 24 10.7998 24 24c0 13.2998 10.7998 24 24 24zM291.5 -16l25.5 81.2002l-85 50.2002c-27.5996 16.2998 -38.9004 50.7998 -26.2998 80.2998l37.5 87.3994\n+l-14.7002 4.40039c-7.90039 1.90039 -17.5996 -0.200195 -25.2998 -6.09961l-39.7002 -30.4004c-3.59961 -2.7002 -7.59961 -4.59961 -11.7002 -5.59961l-52.2998 -261.4h24.2002l62.5 131.8c7.59961 -10.8994 17.3994 -20.5996 29.5 -27.7998l22 -13l-43.1006 -91h96.9004z\n+M402.1 -16l25.2002 176h-33.2998c-18.2002 0 -35.0996 10.5996 -43.0996 26.9004l-20.3008 41.3994l-31.2998 -78.2998l61.2002 -36.0996c18.7002 -11.3008 27.5 -33.6006 21.5996 -54.4004l-23.5996 -75.5h43.5996z\" \u002F>\n+    \u003Cglyph glyph-name=\"sleigh\" unicode=\"&#xf7cc;\" horiz-adv-x=\"640\" \n+d=\"M612.7 97.2998c18.5 -14.7002 28.5996 -37.2002 27.2002 -61c-2.2002 -39 -36.9004 -68.2998 -75.9004 -68.2998h-516c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h519.3c13.6006 0 24.6006 11 24.6006 24.5996c0 7.5 -3.30078 14.5 -9.2002 19.2002\n+l-9.2998 7.40039c-6.90039 5.5 -8 15.5996 -2.5 22.5l10 12.5c5.5 6.89941 15.5996 8 22.5 2.5zM32 224v128c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32h20.7002c65.7002 0 125.899 -37.2002 155.3 -96s89.5 -96 155.3 -96h20.7002c35.2998 0 64 28.7002 64 64v64h96\n+c17.7002 0 32 -14.2998 32 -32s-14.2998 -32 -32 -32v-96c0 -53 -43 -96 -96 -96v-48h-64v48h-192v-48h-64v52.5c-55.0996 14.2998 -96 63.9004 -96 123.5z\" \u002F>\n+    \u003Cglyph glyph-name=\"sms\" unicode=\"&#xf7cd;\" \n+d=\"M256 416c141.4 0 256 -93.0996 256 -208s-114.6 -208 -256 -208c-38.4004 0 -74.7002 7.09961 -107.4 19.4004c-24.5996 -19.6006 -74.2998 -51.4004 -140.6 -51.4004c-3.2002 0 -6 1.7998 -7.2998 4.7998s-0.700195 6.40039 1.5 8.7002\n+c0.5 0.5 42.2998 45.4004 54.7998 95.7998c-35.5996 35.7002 -57 81.1006 -57 130.7c0 114.9 114.6 208 256 208zM128.2 144c23.3994 0 42.5 17.2998 42.3994 38.5996c0 10.6006 -4.7998 20.9004 -13.2998 28.1006l-21.8994 18.7998\n+c-1.30078 1.09961 -2.10059 2.5 -2.10059 3.7998c0 3.10059 4.40039 6.60059 10.4004 6.60059h12.2998c4.40039 0 8 3.59961 8 8v16c0 4.39941 -3.59961 8 -8 8h-12.2002c-23.3994 0 -42.3994 -17.3008 -42.3994 -38.6006c0 -10.5996 4.7998 -20.8994 13.2998 -28.0996\n+l21.8994 -18.7998c1.30078 -1.10059 2.10059 -2.5 2.10059 -3.80078c0 -3.09961 -4.40039 -6.59961 -10.4004 -6.59961h-12.2998c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h12.2002zM320 152v104c0 8.7998 -7.2002 16 -16 16h-16\n+c-6 0 -11.5996 -3.40039 -14.2998 -8.7998l-17.7002 -35.4004l-17.7002 35.4004c-2.7002 5.39941 -8.2002 8.7998 -14.2998 8.7998h-16c-8.7998 0 -16 -7.2002 -16 -16v-104c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8v68.2002l24.9004 -55.7998\n+c2.89941 -5.90039 11.3994 -5.90039 14.2998 0l24.7998 55.7998v-68.2002c0 -4.40039 3.59961 -8 8 -8h16c4.40039 0 8 3.59961 8 8zM368.3 144c23.4004 0 42.4004 17.2998 42.2998 38.5996c0 10.6006 -4.7998 20.9004 -13.2998 28.1006l-21.8994 18.7998\n+c-1.30078 1.09961 -2.10059 2.5 -2.10059 3.7998c0 3.10059 4.40039 6.60059 10.4004 6.60059h12.2998c4.40039 0 8 3.59961 8 8v16c0 4.39941 -3.59961 8 -8 8h-12.2002c-23.3994 0 -42.3994 -17.3008 -42.3994 -38.6006c0 -10.5996 4.7998 -20.8994 13.2998 -28.0996\n+l21.8994 -18.7998c1.30078 -1.10059 2.10059 -2.5 2.10059 -3.80078c0 -3.09961 -4.40039 -6.59961 -10.4004 -6.59961h-12.2998c-4.40039 0 -8 -3.59961 -8 -8v-16c0 -4.40039 3.59961 -8 8 -8h12.2998z\" \u002F>\n+    \u003Cglyph glyph-name=\"snowboarding\" unicode=\"&#xf7ce;\" \n+d=\"M432 352c-26.5 0 -48 21.5 -48 48s21.5 48 48 48s48 -21.5 48 -48s-21.5 -48 -48 -48zM460.8 198.4l-83.5 62.8994l-66 -30.5l52 -39c14.9004 -11.2002 22 -30.2002 18.1006 -48.3994l-21.9004 -102c-2.2002 -10.1006 -9.09961 -17.8008 -17.7998 -21.9004\n+l90.7998 -33.0996c9.7002 -3.5 20.2002 -3.10059 29.5 1.2998c12 5.59961 26.2998 0.399414 31.9004 -11.6006c5.59961 -12 0.399414 -26.2998 -11.6006 -31.8994c-11.5996 -5.5 -24 -8.2002 -36.5 -8.2002c-10 0 -20 1.7998 -29.7002 5.2998l-364.8 132.7\n+c-21.7998 7.90039 -39.0996 23.7998 -48.8994 44.7998c-5.60059 12 -0.400391 26.2998 11.5996 31.9004c12 5.59961 26.2998 0.399414 31.9004 -11.6006c4.39941 -9.39941 12.0996 -16.5 21.7998 -20l38.7002 -14.0996c-3.80078 3.5 -7 7.7002 -8.7002 12.9004\n+c-5.60059 16.7998 3.39941 34.8994 20.2002 40.5l74.0996 24.6992v53.1006c0 24.3994 13.5996 46.2998 35.4004 57.2002l41.1992 20.5996l-16.3994 5.5c-12.1006 4.09961 -22 12.5996 -27.7002 24l-29.0996 58.0996c-7.90039 15.8008 -1.5 35 14.2998 42.9004\n+s35 1.5 42.8994 -14.2998l26.1006 -52.1006l63.7002 -21.1992c16.2998 -5.40039 31.5996 -13.5 45.3994 -23.8008l111.4 -83.5c14.2002 -10.5996 17 -30.6992 6.39941 -44.7998c-6.2998 -8.39941 -15.8994 -12.7998 -25.5996 -12.7998\n+c-6.7002 0 -13.4004 2.09961 -19.2002 6.40039zM316.4 146.7l-60.5 45.2998v-20.5c0 -20.7002 -13.2002 -39 -32.8008 -45.5l-85 -28.4004c-2.59961 -0.899414 -5.2998 -1.09961 -8 -1.2998l169.4 -61.5996c-2.90039 6.09961 -4.2998 12.8994 -2.7998 20z\" \u002F>\n+    \u003Cglyph glyph-name=\"snowman\" unicode=\"&#xf7d0;\" \n+d=\"M510.9 295.7c3.19922 -8.10059 -0.800781 -17.2002 -8.90039 -20.2998l-135.2 -55.2002c0.400391 -4.10059 1.2002 -8 1.2002 -12.2002c0 -10 -1.7002 -19.5 -4.2002 -28.7002c21.1006 -21.3994 36.1006 -48.7998 41.6006 -79\n+c11.5 -63.2002 -16.4004 -120.3 -62.9004 -152.6c-10.9004 -7.60059 -23.9004 -11.7002 -37.2002 -11.7002h-99.2002c-11 0 -22 2.2998 -31.2998 8.2002c-42.3994 26.8994 -70.7998 73.7998 -70.7998 127.8c0 41.7998 16.9004 79.5996 44.2998 107.1\n+c-2.5 9.30078 -4.2002 18.8008 -4.2002 28.9004c0 4.2002 0.800781 8.2002 1.2002 12.2002l-135.2 55.2002c-8.19922 3.19922 -12.1992 12.2998 -8.89941 20.2998l5.89941 14.5c3.30078 8 12.6006 11.8994 20.8008 8.7002l28.0996 -11.5v29\n+c0 8.59961 7.2002 15.5996 16 15.5996h16c8.7998 0 16 -7 15.7998 -15.5996v-46.9004c0 -0.5 -0.200195 -1 -0.299805 -1.5l56.4004 -23c6 10 13.2998 18.9004 22 26.5996c-13.5 16.6006 -22 37.4004 -22 60.5c0 53 43 96 96 96s96 -43 96 -96\n+c0 -23.0996 -8.40039 -43.8994 -22 -60.5c8.69922 -7.69922 16.0996 -16.5996 22 -26.5996l56.3994 23c0 0.5 -0.299805 1 -0.299805 1.5v46.9004c0 8.59961 7.2002 15.5996 16 15.5996h16c8.7998 0 16 -7 16 -15.5996v-29l28.2002 11.5\n+c8.2002 3.19922 17.5 -0.700195 20.7998 -8.7002zM224 352c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 80c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 144\n+c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 208c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16zM256 296c0 0 16 23.2002 16 32s-7.2002 16 -16 16s-16 -7.2002 -16 -16s16 -32 16 -32z\n+M288 352c8.7998 0 16 7.2002 16 16s-7.2002 16 -16 16s-16 -7.2002 -16 -16s7.2002 -16 16 -16z\" \u002F>\n+    \u003Cglyph glyph-name=\"snowplow\" unicode=\"&#xf7d2;\" horiz-adv-x=\"640\" \n+d=\"M120 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM200 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM280 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24\n+s-24 10.7002 -24 24s10.7002 24 24 24zM360 72c13.2998 0 24 -10.7002 24 -24s-10.7002 -24 -24 -24s-24 10.7002 -24 24s10.7002 24 24 24zM598.6 22.5996l36.7002 -36.6992c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006l-22.5996 -22.5996\n+c-6.2002 -6.2002 -16.4004 -6.2002 -22.6006 0l-36.6992 36.7002c-26.5 26.5 -41.4004 62.3994 -41.4004 99.8994v18.7002h-43.2002c7 -14.5996 11.2002 -30.7002 11.2002 -48c0 -61.9004 -50.0996 -112 -112 -112h-256c-61.9004 0 -112 50.0996 -112 112\n+c0 44.5996 26.2998 82.7998 64 100.8v91.2002c0 26.5 21.5 48 48 48h16v112c0 26.5 21.5 48 48 48h144.3c19.2998 0 36.6006 -11.4004 44.2002 -29.0996l78.2998 -182.801c3.40039 -8 5.2002 -16.5 5.2002 -25.1992v-50.9004h64v18.7002\n+c0 37.5 14.9004 73.3994 41.4004 99.8994l36.6992 36.7002c6.2002 6.2002 16.4004 6.2002 22.6006 0l22.5996 -22.5996c6.2002 -6.2002 6.2002 -16.4004 0 -22.6006l-36.7002 -36.6992c-14.5 -14.5 -22.5996 -34.1006 -22.5996 -54.6006v-101.6\n+c0 -20.5 8.09961 -40.1006 22.5996 -54.6006zM192 384v-96l64 -64h122.4l-68.6006 160h-117.8zM368 0c26.5 0 48 21.5 48 48s-21.5 48 -48 48h-256c-26.5 0 -48 -21.5 -48 -48s21.5 -48 48 -48h256z\" \u002F>\n+    \u003Cglyph glyph-name=\"tenge\" unicode=\"&#xf7d7;\" horiz-adv-x=\"384\" \n+d=\"M372 288c6.59961 0 12 -5.40039 12 -12v-56c0 -6.59961 -5.40039 -12 -12 -12h-140v-228c0 -6.59961 -5.40039 -12 -12 -12h-56c-6.59961 0 -12 5.40039 -12 12v228h-140c-6.59961 0 -12 5.40039 -12 12v56c0 6.59961 5.40039 12 12 12h360zM372 416\n+c6.59961 0 12 -5.40039 12 -12v-56c0 -6.59961 -5.40039 -12 -12 -12h-360c-6.59961 0 -12 5.40039 -12 12v56c0 6.59961 5.40039 12 12 12h360z\" \u002F>\n+    \u003Cglyph glyph-name=\"toilet\" unicode=\"&#xf7d8;\" horiz-adv-x=\"384\" \n+d=\"M368 400h-16v-156.7c20.2002 -10.0996 32 -22.2002 32 -35.2998c0 -67.2002 -34.5996 -126.2 -86.7998 -160.5l21.3994 -70.2002c6.30078 -20.5 -9.09961 -41.2998 -30.5996 -41.2998h-192c-21.5 0 -36.9004 20.7998 -30.5996 41.2998l21.3994 70.2002\n+c-52.2002 34.2998 -86.7998 93.2998 -86.7998 160.5c0 13.0996 11.7998 25.2002 32 35.2998v156.7h-16c-8.7998 0 -16 7.2002 -16 16v16c0 8.7998 7.2002 16 16 16h352c8.7998 0 16 -7.2002 16 -16v-16c0 -8.7998 -7.2002 -16 -16 -16zM80 376v-16\n+c0 -4.40039 3.59961 -8 8 -8h48c4.40039 0 8 3.59961 8 8v16c0 4.40039 -3.59961 8 -8 8h-48c-4.40039 0 -8 -3.59961 -8 -8zM192 176c77.0996 0 139.6 14.2998 139.6 32s-62.5 32 -139.6 32s-139.6 -14.2998 -139.6 -32s62.5 -32 139.6 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"tools\" unicode=\"&#xf7d9;\" \n+d=\"M501.1 52.2998c14.5 -14.5 14.5 -38.0996 0 -52.7002l-52.6992 -52.6992c-14.5 -14.6006 -38.1006 -14.6006 -52.7002 0l-117.101 117.1c-23.0996 23.0996 -27.5 57.5996 -13.8994 85.4004l-106.601 106.6h-62.0996l-96 128l64 64l128 -96v-62.0996l106.6 -106.601\n+c27.8008 13.7002 62.3008 9.2002 85.4004 -13.8994zM331.7 223c-8.2002 0 -16.6006 -1 -24.7002 -2.90039l-82.0996 82.1006c-0.700195 37.5 12.6992 75.0996 41.1992 103.6c37 37 89.2002 49.6006 136.601 37.9004c9.09961 -2.2998 12.2998 -13.6006 5.7002 -20.2002\n+l-74.4004 -74.4004l11.2998 -67.8994l67.9004 -11.2998l74.3994 74.3994c6.60059 6.60059 17.9004 3.5 20.1006 -5.5c11.7998 -47.3994 -0.799805 -99.5996 -37.9004 -136.7c-13 -13 -28 -22.5996 -43.7998 -29.5l-19.4004 19.4004c-20 20 -46.5996 31 -74.8994 31z\n+M227.8 141c-4.89941 -21.0996 -2.59961 -42.7998 5 -62.7002l-123.6 -123.6c-25 -25 -65.5 -25 -90.5 0s-25 65.5 0 90.5l152.399 152.5zM64 -24c13.2998 0 24 10.7998 24 24c0 13.2998 -10.7002 24 -24 24s-24 -10.7002 -24 -24c0 -13.2002 10.7998 -24 24 -24z\" \u002F>\n+    \u003Cglyph glyph-name=\"tram\" unicode=\"&#xf7da;\" \n+d=\"M288 384c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32zM511.5 396.1c2.2002 -8.5 -2.7998 -17.2998 -11.4004 -19.5996l-228.1 -60.7998v-91.7002h176c17.7002 0 32 -14.2998 32 -32v-224c0 -17.7002 -14.2998 -32 -32 -32\n+h-384c-17.7002 0 -32 14.2998 -32 32v224c0 17.7002 14.2998 32 32 32h176v83.2002l-219.9 -58.7002c-1.2998 -0.299805 -2.69922 -0.5 -4.09961 -0.5c-7.09961 0 -13.5 4.7002 -15.4004 11.7998c-2.2998 8.60059 2.80078 17.2998 11.3008 19.6006l480 128\n+c8.59961 2.2998 17.2998 -2.7002 19.5996 -11.3008zM176 64v96h-96v-96h96zM336 160v-96h96v96h-96zM304 160h-96v-96h96v96zM192 352c-17.7002 0 -32 14.2998 -32 32s14.2998 32 32 32s32 -14.2998 32 -32s-14.2998 -32 -32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"fire-alt\" unicode=\"&#xf7e4;\" horiz-adv-x=\"448\" \n+d=\"M323.56 396.8c72.46 -67.2598 124.44 -177.13 124.44 -230.399c0 -127.25 -100.29 -230.4 -224 -230.4s-224 103.15 -224 230.4c0 71.6396 69.7402 190.43 168 281.6c38.2803 -35.5303 72.0801 -73.6201 99.3398 -111.17\n+c16.6406 20.3799 35.4199 40.6699 56.2197 59.9697zM304.09 56.1504c49.2402 34.4492 60.7803 101.229 33.4297 153.42c-3.35938 6.41992 -7.12988 13.1201 -11.2695 19.9697l-58.6299 -66.8799s-91.9004 117.359 -98.8301 125.34\n+c-48.4805 -58.1201 -72.79 -92.1396 -72.79 -130.75c0 -77.5098 58.71 -125.25 130.86 -125.25c28.8594 0 55.5693 8.99023 77.2295 24.1504z\" \u002F>\n+    \u003Cglyph glyph-name=\"bacon\" unicode=\"&#xf7e5;\" horiz-adv-x=\"576\" \n+d=\"M218.92 111.61c-34.8604 -34.8799 -59.6504 -44.1602 -85.9199 -54c-26 -9.76074 -53 -20.1299 -88.1699 -52.7305l-35.7598 35.5098c-12.7002 12.6104 -12.0703 33.6104 1.79004 45.0605c36.3398 29.9795 66.21 41.0996 91.0693 50.3594\n+c9.16992 3.41016 68.9707 19.2607 98.7207 98.0908c8.60938 22.8096 46.3496 134.58 188.979 187.72c15.8506 5.91016 27.3604 10.2002 41 20.2998c4.53516 3.35449 12.7939 6.07617 18.4346 6.07617c7.00879 0 16.751 -3.98926 21.7451 -8.90625l37.6709 -37.3896\n+c-30.1504 -27.6904 -52.9102 -36.3701 -76.79 -45.3701c-28.3008 -10.6104 -57.5703 -21.5801 -97.3506 -61.3799s-50.7598 -69.0498 -61.3701 -97.3398c-9.84961 -26.3008 -19.1602 -51.1104 -54.0498 -86zM566.92 343.61\n+c12.7002 -12.5996 12.0801 -33.6602 -1.80957 -45.0605c-36.3701 -30.0098 -66.2402 -41.1396 -91.1104 -50.4102c-9.2002 -3.43945 -69 -19.3193 -98.7305 -98.1094c-8.93945 -23.5898 -46.7393 -134.69 -188.939 -187.69\n+c-15.8496 -5.89941 -27.3398 -10.1797 -40.9404 -20.2402c-4.53613 -3.35645 -12.7969 -6.08008 -18.4395 -6.08008c-7.00586 0 -16.7461 3.9873 -21.7402 8.90039l-37.6797 37.4297c30.1094 27.6699 52.8594 36.3301 76.7197 45.3301\n+c28.2998 10.5898 57.5098 21.54 97.2998 61.3203s50.7803 69 61.4199 97.3301c9.81055 26.3096 19.1104 51.1602 54 86c34.8906 34.8398 59.6904 44.1504 85.9502 54c26.0703 9.79004 53.0605 20.1602 88.25 52.79z\" \u002F>\n+    \u003Cglyph glyph-name=\"book-medical\" unicode=\"&#xf7e6;\" horiz-adv-x=\"448\" \n+d=\"M448 89.5996c0 -9.59961 -3.2002 -15.999 -9.59961 -19.1992c-3.2002 -12.8008 -3.2002 -57.6006 0 -73.6006c6.39941 -6.39941 9.59961 -12.7998 9.59961 -19.2002v-16c0 -16 -12.7998 -25.5996 -25.5996 -25.5996h-326.4c-54.4004 0 -96 41.5996 -96 96v320\n+c0 54.4004 41.5996 96 96 96h326.4c16 0 25.5996 -9.59961 25.5996 -25.5996v-332.801zM144 280v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8v48c0 4.41602 -3.58398 8 -8 8h-56v56\n+c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8v-56h-56c-4.41602 0 -8 -3.58398 -8 -8zM380.8 0v64h-284.8c-16 0 -32 -12.7998 -32 -32s12.7998 -32 32 -32h284.8z\" \u002F>\n+    \u003Cglyph glyph-name=\"bread-slice\" unicode=\"&#xf7ec;\" horiz-adv-x=\"576\" \n+d=\"M288 448c180 0 288 -93.4004 288 -169.14c0 -30.3008 -24.2402 -54.8604 -64 -54.8604v-256c0 -17.6699 -16.1201 -32 -36 -32h-376c-19.8799 0 -36 14.3301 -36 32v256c-39.7598 0 -64 24.5596 -64 54.8604c0 75.7393 108 169.14 288 169.14z\" \u002F>\n+    \u003Cglyph glyph-name=\"cheese\" unicode=\"&#xf7ef;\" \n+d=\"M0 160h512v-160c0 -17.6641 -14.3359 -32 -32 -32h-448c-17.6641 0 -32 14.3359 -32 32v160zM299.83 416c118.17 -6.2002 212.17 -104.11 212.17 -224h-512l278.7 217c4.83984 3.875 13.7998 7.01953 20 7.01953c0.311523 0 0.818359 -0.00878906 1.12988 -0.0195312z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"clinic-medical\" unicode=\"&#xf7f2;\" horiz-adv-x=\"576\" \n+d=\"M288 333l218.74 -192.9c1.54004 -1.37988 3.55957 -2.04004 5.25977 -3.19922v-184.9c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v184.94c1.78027 1.20996 3.84961 1.88965 5.46973 3.34961zM384 72v48c0 4.41602 -3.58398 8 -8 8h-56v56\n+c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8v-56h-56c-4.41602 0 -8 -3.58398 -8 -8v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8zM570.69 211.72\n+c2.93066 -2.63184 5.31055 -7.96484 5.31055 -11.9053c0 -3.38086 -1.83301 -8.16797 -4.09082 -10.6846l-21.4004 -23.8203c-2.63184 -2.93066 -7.96484 -5.30957 -11.9043 -5.30957c-3.38574 0 -8.17773 1.83691 -10.6953 4.09961l-229.32 202.271\n+c-2.50391 2.20898 -7.24609 4.00195 -10.585 4.00195s-8.08105 -1.79297 -10.585 -4.00195l-229.32 -202.28c-2.51758 -2.2627 -7.30957 -4.09961 -10.6953 -4.09961c-3.93848 0 -9.27246 2.37891 -11.9043 5.30957l-21.4102 23.8203\n+c-2.2627 2.51758 -4.09961 7.30957 -4.09961 10.6953c0 3.93945 2.37891 9.27246 5.30957 11.9043l256 226c6.2832 5.68066 18.2559 10.29 26.7256 10.29c8.46875 0 20.4424 -4.60938 26.7246 -10.29z\" \u002F>\n+    \u003Cglyph glyph-name=\"comment-medical\" unicode=\"&#xf7f5;\" \n+d=\"M256 416c141.39 0 256 -93.1201 256 -208s-114.61 -208 -256 -208h-0.473633c-30.4814 0 -78.3838 8.68164 -106.927 19.3799c-24.5996 -19.6299 -74.3398 -51.3799 -140.6 -51.3799c-4.41113 0.00488281 -7.99023 3.58887 -7.99023 8\n+c0 1.75879 0.981445 4.22266 2.19043 5.5c0.5 0.5 42.2598 45.4502 54.7998 95.7598c-35.5898 35.7402 -57 81.1807 -57 130.74c0 114.88 114.62 208 256 208zM352 184v48c0 4.41602 -3.58398 8 -8 8h-56v56c0 4.41602 -3.58398 8 -8 8h-48c-4.41602 0 -8 -3.58398 -8 -8\n+v-56h-56c-4.41602 0 -8 -3.58398 -8 -8v-48c0 -4.41602 3.58398 -8 8 -8h56v-56c0 -4.41602 3.58398 -8 8 -8h48c4.41602 0 8 3.58398 8 8v56h56c4.41602 0 8 3.58398 8 8z\" \u002F>\n+    \u003Cglyph glyph-name=\"crutch\" unicode=\"&#xf7f7;\" \n+d=\"M507.31 262.29c2.56348 -2.58301 4.64355 -7.63184 4.64355 -11.2695c0 -3.66602 -2.10742 -8.74219 -4.70312 -11.3301l-22.6201 -22.6309c-2.58691 -2.58691 -7.65625 -4.6875 -11.3145 -4.6875c-3.65918 0 -8.72852 2.10059 -11.3154 4.6875l-181 181\n+c-2.58789 2.58691 -4.6875 7.65625 -4.6875 11.3154s2.09961 8.72852 4.6875 11.3154l22.6904 22.5996c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM327.77 195.88l55.1006 55.1201l45.25 -45.2695l-109.68 -109.681\n+c-10.7441 -10.748 -31.4814 -22.2393 -46.29 -25.6494l-120.25 -27.75l-102 -102c-2.58691 -2.58789 -7.65625 -4.6875 -11.3154 -4.6875s-8.72754 2.09961 -11.3154 4.6875l-22.6191 22.6191c-2.58789 2.58789 -4.6875 7.65625 -4.6875 11.3154\n+s2.09961 8.72852 4.6875 11.3154l102 102l27.7393 120.26c3.4248 14.8057 14.9248 35.5439 25.6699 46.29l109.671 109.67l45.25 -45.25l-55.1006 -55.1006zM273.2 141.31l9.30957 9.31055l-67.8896 67.8896l-9.31055 -9.30957\n+c-3.57715 -3.59082 -7.41211 -10.5127 -8.55957 -15.4502l-18.2998 -79.2998l79.2998 18.3193c4.94043 1.13379 11.8623 4.95996 15.4502 8.54004z\" \u002F>\n+    \u003Cglyph glyph-name=\"egg\" unicode=\"&#xf7fb;\" horiz-adv-x=\"384\" \n+d=\"M192 448c106 0 192 -214 192 -320s-86 -192 -192 -192s-192 86 -192 192s86 320 192 320z\" \u002F>\n+    \u003Cglyph glyph-name=\"hamburger\" unicode=\"&#xf805;\" \n+d=\"M464 192c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48h-416c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48h416zM480 64c8.83203 0 16 -7.16797 16 -16v-16c0 -35.3281 -28.6719 -64 -64 -64h-352c-35.3281 0 -64 28.6719 -64 64v16\n+c0 8.83203 7.16797 16 16 16h448zM58.6396 224c-34.5693 0 -54.6396 43.9102 -34.8193 75.8896c40.1797 64.9102 128.64 116.011 232.18 116.11c103.55 -0.0996094 192 -51.2002 232.18 -116.12c19.8008 -31.9795 -0.25 -75.8799 -34.8193 -75.8799h-394.721zM384 336\n+c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16s16 7.16797 16 16s-7.16797 16 -16 16zM256 368c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16s16 7.16797 16 16s-7.16797 16 -16 16zM128 336c-8.83203 0 -16 -7.16797 -16 -16s7.16797 -16 16 -16\n+s16 7.16797 16 16s-7.16797 16 -16 16z\" \u002F>\n+    \u003Cglyph glyph-name=\"hand-middle-finger\" unicode=\"&#xf806;\" \n+d=\"M479.93 130.88l0.0703125 -82.8799v0c0 -61.7969 -50.1533 -111.973 -111.95 -112h-215c-25.6074 0.00292969 -61.084 14.7012 -79.1895 32.8096l-30.9307 30.9307c-6.0332 6.03223 -10.9297 17.8525 -10.9297 26.3838v0.00585938v73.4697v0.00292969\n+c0 12.7383 9.24707 27.7002 20.6396 33.3975l27.3604 15v-76c0 -4.41602 3.58398 -8 8 -8s8 3.58398 8 8v147.04c0 15.2598 12.8701 28.3799 30.8701 31.3799l30.6797 5.12012c17.8203 2.96973 34.4502 -8.38965 34.4502 -23.54v-32c0 -4.41602 3.58398 -8 8 -8\n+s8 3.58398 8 8v200v0.0224609c0 26.4961 21.5039 48 48 48c0.408203 0 1.07129 -0.00976562 1.48047 -0.0224609c26.2695 -0.799805 46.5195 -23.7197 46.5195 -50v-198c0 -4.41602 3.58398 -8 8 -8s8 3.58398 8 8v32c0 15.1396 16.6299 26.5 34.4502 23.5303\n+l38.3994 -6.40039c13.46 -2.25 23.1504 -12.0996 23.1504 -23.54v-49.5898l35.6504 -8.92969c15.5986 -3.89844 28.2686 -20.1113 28.2793 -36.1904z\" \u002F>\n+    \u003Cglyph glyph-name=\"hard-hat\" unicode=\"&#xf807;\" \n+d=\"M480 160v-64h-448v64c0 80.25 49.2803 148.92 119.19 177.62l40.8096 -81.6201v112c0 8.83203 7.16797 16 16 16h96c8.83203 0 16 -7.16797 16 -16v-112l40.8096 81.6201c69.9102 -28.7002 119.19 -97.3701 119.19 -177.62zM496 64c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h480z\" \u002F>\n+    \u003Cglyph glyph-name=\"hotdog\" unicode=\"&#xf80f;\" \n+d=\"M488.56 424.56c12.9297 -12.9326 23.4238 -38.2715 23.4238 -56.5596s-10.4941 -43.627 -23.4238 -56.5596l-352 -352c-13.0205 -13.4824 -38.7998 -24.4238 -57.543 -24.4238c-44.1592 0 -80 35.8408 -80 80c0 18.7432 10.9414 44.5225 24.4238 57.543l352 352\n+c12.9326 12.9297 38.2715 23.4238 56.5596 23.4238s43.627 -10.4941 56.5596 -23.4238zM438.63 329.37c2.58691 2.58691 4.68652 7.65625 4.68652 11.3145c0 8.83301 -7.16797 16.002 -16.001 16.002c-3.65918 0 -8.72852 -2.09961 -11.3154 -4.68652\n+c-12.4102 -12.4102 -21.7598 -14 -34.71 -16.2305c-14.4004 -2.46973 -32.3203 -5.55957 -51.9199 -25.1494c-19.6006 -19.5898 -22.6699 -37.5205 -25.1396 -51.9199c-2.24023 -12.9502 -3.84082 -22.3105 -16.2402 -34.71\n+c-12.4004 -12.4004 -21.7002 -14.0098 -34.7002 -16.2305c-14.4004 -2.46973 -32.3203 -5.5498 -51.9199 -25.1396c-19.6006 -19.5898 -22.6699 -37.5205 -25.1504 -51.9199c-2.21973 -12.9502 -3.80957 -22.29 -16.2197 -34.7002s-21.71 -14.0098 -34.71 -16.2305\n+c-14.4004 -2.46973 -32.3203 -5.5498 -51.9199 -25.1396c-2.58691 -2.58691 -4.68652 -7.65625 -4.68652 -11.3145c0 -8.83301 7.16797 -16.002 16.001 -16.002c3.65918 0 8.72852 2.09961 11.3154 4.68652c12.4004 12.4004 21.7598 14 34.7002 16.2305\n+c14.3994 2.46973 32.3301 5.55957 51.9297 25.1494c19.6006 19.5898 22.6699 37.5205 25.1396 51.9199c2.23047 12.9502 3.83008 22.2998 16.2305 34.7002s21.75 14 34.7002 16.2197c14.3994 2.48047 32.3193 5.56055 51.9199 25.1504\n+c19.5996 19.5898 22.6699 37.5195 25.1494 51.9199c2.23047 12.9502 3.83008 22.3096 16.2305 34.71s21.7598 14 34.7002 16.2305c14.4102 2.46973 32.3301 5.5498 51.9297 25.1396zM31.4404 125.82l-11.5508 11.5498c-24.9893 24.9902 -26.6592 63.8398 -3.71973 86.7803\n+l207.68 207.68c22.9404 22.9395 61.79 21.2803 86.79 -3.71973l11.54 -11.5508zM480.56 258.18l11.5508 -11.54c24.9893 -25 26.6592 -63.8496 3.71973 -86.79l-207.68 -207.68c-22.9404 -22.9395 -61.79 -21.2803 -86.79 3.71973l-11.54 11.5508z\" \u002F>\n+    \u003Cglyph glyph-name=\"ice-cream\" unicode=\"&#xf810;\" horiz-adv-x=\"448\" \n+d=\"M368 288c26.4961 0 48 -21.5039 48 -48s-21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48h0.94043c-0.519531 4.51855 -0.94043 11.8779 -0.94043 16.4268c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144\n+c0 -4.54883 -0.420898 -11.9082 -0.94043 -16.4268h0.94043zM195.38 -45.6904l-99.3799 205.69h256l-99.3799 -205.69c-4.66504 -10.1084 -17.4863 -18.3135 -28.6201 -18.3135s-23.9551 8.20508 -28.6201 18.3135z\" \u002F>\n+    \u003Cglyph glyph-name=\"laptop-medical\" unicode=\"&#xf812;\" horiz-adv-x=\"640\" \n+d=\"M232 224c-4.41602 0 -8 3.58398 -8 8v48c0 4.41602 3.58398 8 8 8h56v56c0 4.41602 3.58398 8 8 8h48c4.41602 0 8 -3.58398 8 -8v-56h56c4.41602 0 8 -3.58398 8 -8v-48c0 -4.41602 -3.58398 -8 -8 -8h-56v-56c0 -4.41602 -3.58398 -8 -8 -8h-48\n+c-4.41602 0 -8 3.58398 -8 8v56h-56zM576 400v-336h-512v336c0.0771484 26.4189 21.5811 47.9229 48 48h416c26.4189 -0.0771484 47.9229 -21.5811 48 -48zM512 128v256h-384v-256h384zM624 32c8.83203 0 16 -7.16797 16 -16v-16\n+c-0.104492 -35.2236 -28.7764 -63.8955 -64 -64h-512c-35.2236 0.104492 -63.8955 28.7764 -64 64v16c0 8.83203 7.16797 16 16 16h239.23c-0.230469 -14.5303 14.0791 -32 32.7695 -32h60.7998c18.0303 0 32 12.1904 32.7402 32h242.46z\" \u002F>\n+    \u003Cglyph glyph-name=\"pager\" unicode=\"&#xf815;\" \n+d=\"M448 384c35.3281 0 64 -28.6719 64 -64v-256c0 -35.3281 -28.6719 -64 -64 -64h-384c-35.3281 0 -64 28.6719 -64 64v256c0 35.3281 28.6719 64 64 64h384zM160 80v48h-80c-8.83203 0 -16 -7.16797 -16 -16v-16c0 -8.83203 7.16797 -16 16 -16h80zM288 96v16\n+c0 8.83203 -7.16797 16 -16 16h-80v-48h80c8.83203 0 16 7.16797 16 16zM448 224v64c0 17.6641 -14.3359 32 -32 32h-320c-17.6641 0 -32 -14.3359 -32 -32v-64c0 -17.6641 14.3359 -32 32 -32h320c17.6641 0 32 14.3359 32 32z\" \u002F>\n+    \u003Cglyph glyph-name=\"pepper-hot\" unicode=\"&#xf816;\" \n+d=\"M330.67 184.88h107.46l37.0498 -38.54c-48.5293 -87.4697 -206.54 -210.34 -419.18 -210.34c-30.9121 0 -56 25.0879 -56 56s25.0879 56 56 56c141.58 0 163.44 181.24 221.92 250.82l52.75 -24.2207v-89.7197zM461.76 313.25\n+c27.7324 -25.2861 50.2402 -76.2676 50.2402 -113.798v-0.142578c0 -13.6797 -2.2998 -26.6895 -5.55957 -39.3096l-54.6807 56.8799h-89.0898v78.2402l-74.6699 34.29c22.3398 14.0498 48.3398 22.5898 76.3398 22.5898\n+c16.4658 -0.00683594 42.0732 -5.36523 57.1602 -11.96c18.4502 37.2197 8.25977 61.96 1.40039 72.3203c-0.787109 1.14062 -1.42578 3.19043 -1.42578 4.57617c0 1.82227 1.03711 4.35449 2.31543 5.65332l22.9004 23c1.29688 1.31836 3.85156 2.38867 5.70117 2.38867\n+c2.1123 0 4.90234 -1.33398 6.22852 -2.97852c18.5596 -23.4805 35.2998 -71.9102 3.13965 -131.75z\" \u002F>\n+    \u003Cglyph glyph-name=\"pizza-slice\" unicode=\"&#xf818;\" \n+d=\"M158.87 447.85c181.91 -17.1699 332.02 -164.93 352.899 -345.71c1.87012 -16.2197 -7.89941 -31.54 -23.6191 -35.8994l-56.9404 -15.7803c-7.94043 186.39 -134.86 311.51 -322.479 317l14.8096 56.2705c4.12988 15.6992 19.1699 25.6396 35.3301 24.1191z\n+M100.4 335.85c176.069 -1.95996 294.88 -119.25 299.149 -294.14l-379 -105.1c-1.1709 -0.324219 -3.1084 -0.587891 -4.32422 -0.587891c-8.94824 0 -16.21 7.26172 -16.21 16.21c0 1.1582 0.239258 3.00781 0.53418 4.12793zM128 32c17.6641 0 32 14.3359 32 32\n+s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32zM176 184c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32zM280 80c17.6641 0 32 14.3359 32 32s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash-restore\" unicode=\"&#xf829;\" horiz-adv-x=\"448\" \n+d=\"M53.2002 -19l-21.2002 339h384l-21.2002 -339c-1.55469 -24.8369 -23.0146 -44.9971 -47.8994 -45h-245.801c-24.8848 0.00292969 -46.3447 20.1631 -47.8994 45zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112\n+c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16v112h57.3701c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.52441 2.72949 -7.5918 4.94336 -11.3096 4.94336s-8.78516 -2.21387 -11.3096 -4.94336zM432 416\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781\n+c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120z\" \u002F>\n+    \u003Cglyph glyph-name=\"trash-restore-alt\" unicode=\"&#xf82a;\" horiz-adv-x=\"448\" \n+d=\"M32 -16v336h384v-336c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48zM123.31 156.8c-10.0791 -10.6201 -2.93945 -28.7998 11.3203 -28.7998h57.3701v-112c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16v112h57.3701\n+c14.2598 0 21.3994 18.1797 11.3203 28.7998l-89.3809 94.2598c-2.52441 2.72949 -7.5918 4.94336 -11.3096 4.94336s-8.78516 -2.21387 -11.3096 -4.94336zM432 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16\n+v32c0 8.83203 7.16797 16 16 16h120l9.40039 18.7002c3.58984 7.3418 13.1357 13.2998 21.3086 13.2998h0.0908203h114.3h0.0175781c8.20215 0 17.8262 -5.95801 21.4824 -13.2998l9.40039 -18.7002h120z\" \u002F>\n+    \u003Cglyph glyph-name=\"user-nurse\" unicode=\"&#xf82f;\" horiz-adv-x=\"448\" \n+d=\"M57.7803 160c-8.82227 0.00976562 -15.9814 7.17773 -15.9814 16c0 2.09277 0.761719 5.30957 1.70117 7.17969c15.2305 29.8203 31.2803 62.2305 42.1699 95.54c7.58008 23.1904 10.3301 47.6904 10.3301 72.0801v49.2002l128 48l128 -48v-49.2002\n+c0 -24.3896 2.78027 -48.8896 10.3496 -72.0801c10.8701 -33.3096 26.9199 -65.6895 42.1504 -95.54c0.939453 -1.87012 1.70117 -5.08691 1.70117 -7.17969c0 -8.82227 -7.15918 -15.9902 -15.9814 -16h-82.3594c-22.5107 -19.6797 -51.6201 -32 -83.8604 -32\n+s-61.3496 12.3203 -83.8604 32h-82.3594zM184 376.33v-16.6602c0 -2.75977 2.24023 -5 5 -5h21.6699v-21.6699c0 -2.75977 2.24023 -5 5 -5h16.6602c2.75977 0 5 2.24023 5 5v21.6699h21.6699c2.75977 0 5 2.24023 5 5v16.6602c0 2.75977 -2.24023 5 -5 5h-21.6699v21.6699\n+c0 2.75977 -2.24023 5 -5 5h-16.6602c-2.75977 0 -5 -2.24023 -5 -5v-21.6699h-21.6699c-2.75977 0 -5 -2.24023 -5 -5zM144 288v-32c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v32h-160zM319.41 128c71.4902 -3.09961 128.59 -61.5996 128.59 -133.79\n+c0 -32.1318 -26.0781 -58.21 -58.21 -58.21v0h-331.58c-32.1318 0 -58.21 26.0781 -58.21 58.21c0 72.1904 57.0996 130.69 128.59 133.79l95.4102 -95.3896z\" \u002F>\n+    \u003Cglyph glyph-name=\"wave-square\" unicode=\"&#xf83e;\" horiz-adv-x=\"640\" \n+d=\"M476 -32h-152c-19.8721 0 -36 16.1279 -36 36v348h-96v-156c0 -19.8721 -16.1279 -36 -36 -36h-140c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h112v156c0 19.8721 16.1279 36 36 36h152c19.8721 0 36 -16.1279 36 -36v-348h96v156\n+c0 19.8721 16.1279 36 36 36h140c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-112v-156c0 -19.8721 -16.1279 -36 -36 -36z\" \u002F>\n+    \u003Cglyph glyph-name=\"biking\" unicode=\"&#xf84a;\" horiz-adv-x=\"640\" \n+d=\"M400 352c-26.4961 0 -48 21.5039 -48 48s21.5039 48 48 48s48 -21.5039 48 -48s-21.5039 -48 -48 -48zM396 231l-41.3604 33.1104l-58.25 -49.9199l41.3604 -27.5703c7.86426 -5.24316 14.248 -17.1689 14.25 -26.6201v-128c0 -17.6641 -14.3359 -32 -32 -32\n+s-32 14.3359 -32 32v110.88l-81.7305 54.5205c-7.86621 5.24316 -14.251 17.1719 -14.251 26.626c0 8.12305 5.00488 19.0068 11.1719 24.2939l112 96c4.95508 4.25781 14.2803 7.71289 20.8135 7.71289c6.20215 0 15.1602 -3.15039 19.9961 -7.0332l71.2197 -57h52.7803\n+c17.6641 0 32 -14.3359 32 -32s-14.3359 -32 -32 -32h-64h-0.0595703c-6.18262 0 -15.1152 3.13574 -19.9404 7zM512 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM512 0c35.3281 0 64 28.6719 64 64\n+s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64zM128 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM128 0c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64\n+s28.6719 -64 64 -64z\" \u002F>\n+    \u003Cglyph glyph-name=\"border-all\" unicode=\"&#xf84c;\" horiz-adv-x=\"448\" \n+d=\"M416 416c17.6641 0 32 -14.3359 32 -32v-384c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v384c0 17.6641 14.3359 32 32 32h384zM384 352h-128v-128h128v128zM192 352h-128v-128h128v128zM64 32h128v128h-128v-128zM256 32h128v128h-128v-128z\n+\" \u002F>\n+    \u003Cglyph glyph-name=\"border-none\" unicode=\"&#xf850;\" horiz-adv-x=\"448\" \n+d=\"M240 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h32zM240 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM240 416c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM336 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h32zM48 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM48 416c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 416c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32z\" \u002F>\n+    \u003Cglyph glyph-name=\"border-style\" unicode=\"&#xf853;\" horiz-adv-x=\"448\" \n+d=\"M240 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM144 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32\n+c0 8.83203 7.16797 16 16 16h32zM336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 224c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 128c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 32c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 320c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32zM432 416\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-368v-368c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v400c0 17.6641 14.3359 32 32 32h400z\" \u002F>\n+    \u003Cglyph glyph-name=\"fan\" unicode=\"&#xf863;\" \n+d=\"M352.57 320c81.79 0 149.3 -61.6299 159.3 -141.33c1.30957 -10.4795 -7.17969 -19.6396 -17.6201 -18.5898l-123.11 12.4102c8.34082 -22.9707 12.8604 -48.9707 12.8604 -77.0605c0 -81.79 -61.6299 -149.3 -141.33 -159.3\n+c-10.4795 -1.30957 -19.6396 7.19043 -18.5898 17.6201l12.4102 123.11c-22.9707 -8.34082 -48.9707 -12.8604 -77.0605 -12.8604c-81.79 0 -149.3 61.6299 -159.3 141.33c-1.30957 10.4795 7.17969 19.6699 17.6201 18.5898l123.11 -12.4102\n+c-8.34082 22.9707 -12.8604 48.9707 -12.8604 77.0605c0 81.79 61.6299 149.3 141.33 159.3c10.4795 1.30957 19.6699 -7.17969 18.5898 -17.6201l-12.4102 -123.11c22.9707 8.34082 48.9707 12.8604 77.0605 12.8604zM256 160c17.6641 0 32 14.3359 32 32\n+s-14.3359 32 -32 32s-32 -14.3359 -32 -32s14.3359 -32 32 -32z\" \u002F>\n+    \u003Cglyph glyph-name=\"icons\" unicode=\"&#xf86d;\" \n+d=\"M116.65 228.65l-96.79 99.8301c-28 29.0293 -26.4102 77.0996 5 103.88c27.3896 23.3398 68.1895 19.1396 93.29 -6.80078l9.84961 -10.1396l9.86035 10.1396c25.1396 25.9404 65.8896 30.1406 93.2793 6.80078c31.4102 -26.7803 33.0605 -74.8799 4.91016 -103.88\n+l-96.75 -99.8301c-2.55566 -2.66992 -7.62891 -4.83594 -11.3252 -4.83594c-3.69531 0 -8.76855 2.16602 -11.3242 4.83594zM260.57 128.16c15.1406 -0.0107422 27.4297 -12.3086 27.4297 -27.4502v-0.00976562v-137.25v0c0 -15.1416 -12.2891 -27.4395 -27.4297 -27.4502\n+h-233.141c-15.1406 0.00585938 -27.4297 12.2988 -27.4297 27.4404v0.00976562v137.25v0.00976562c0 15.1523 12.2979 27.4502 27.4502 27.4502h0.00976562h48l7 14.2402c3.67773 9.81445 15.168 17.7793 25.6484 17.7793h0.0117188h71.71h0.0107422\n+c10.4814 0 21.9717 -7.96484 25.6494 -17.7793l7.08008 -14.2402h48zM144 -20c28.7041 0 52 23.2959 52 52s-23.2959 52 -52 52s-52 -23.2959 -52 -52s23.2959 -52 52 -52zM499.4 95.9004c9.70996 0 15.75 -8.79004 10.8691 -15.7002l-92.3994 -138.91\n+c-2.19629 -2.90039 -6.93262 -5.25488 -10.5713 -5.25488c-0.0957031 0 -0.25293 0.00195312 -0.348633 0.00488281c-8.03027 0 -14.1201 6.25 -12.2305 12.9004l24.2002 83h-62.3096c-7.62012 0 -13.5 5.58984 -12.5 11.8896l16.7998 106.93\n+c0.839844 5.2002 6.2002 9.10059 12.5 9.10059h75.5898c8.25 0 14.2803 -6.56055 12.1797 -13.21l-22.3594 -50.75h60.5801zM478.08 447.67c17.9199 2.75 33.9199 -12.1895 33.9199 -31.6699v-144.26c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602\n+c-35.3496 0 -64 21.4795 -64 48c0 26.5195 28.6504 48 64 48c4.46191 -0.0400391 11.6299 -0.801758 16 -1.7002v47.1797l-112 -17.2197v-108.58c-0.269531 -26.3398 -28.7998 -47.6602 -64 -47.6602c-35.3496 0 -64 21.4805 -64 48c0 26.5205 28.6504 48 64 48\n+c4.46191 -0.0400391 11.6299 -0.801758 16 -1.69922v106.77c0 15.9102 10.8701 29.4102 25.5098 31.6602z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone-alt\" unicode=\"&#xf879;\" \n+d=\"M497.39 86.2002c8.06055 -3.50586 14.6016 -13.4844 14.6016 -22.2744c0 -1.48828 -0.264648 -3.87402 -0.59082 -5.32617l-24 -104c-2.37109 -10.2666 -12.8477 -18.5996 -23.3848 -18.5996h-0.015625c-256.1 0 -464 207.5 -464 464v0.00585938\n+c0 10.5371 8.33301 21.0137 18.5996 23.3838l104 24c1.45996 0.332031 3.8584 0.601562 5.35547 0.601562c8.73242 0 18.6533 -6.49707 22.1445 -14.501l48 -112c1.06836 -2.49219 1.93457 -6.71582 1.93457 -9.42773c0 -6.28613 -3.95801 -14.6064 -8.83398 -18.5723\n+l-60.6006 -49.6006c31.3398 -66.4688 110.721 -145.85 177.19 -177.189l49.5996 60.5996c3.97559 4.86914 12.3047 8.82129 18.5908 8.82129c2.70508 0 6.9209 -0.860352 9.40918 -1.9209z\" \u002F>\n+    \u003Cglyph glyph-name=\"phone-square-alt\" unicode=\"&#xf87b;\" horiz-adv-x=\"448\" \n+d=\"M400 416c26.4961 0 48 -21.5039 48 -48v-352c0 -26.4961 -21.5039 -48 -48 -48h-352c-26.4961 0 -48 21.5039 -48 48v352c0 26.4961 21.5039 48 48 48h352zM383.61 108.63c0.198242 0.919922 0.373047 2.42969 0.389648 3.37012\n+c-0.262695 5.28613 -4.33496 11.4648 -9.08984 13.79l-70 30c-1.57422 0.613281 -4.22168 1.15527 -5.91016 1.20996c-3.82422 -0.209961 -9.02539 -2.67383 -11.6104 -5.5l-31 -37.8896c-41.5469 19.6025 -91.1768 69.2324 -110.779 110.779l37.8896 31\n+c2.82617 2.58496 5.29004 7.78613 5.5 11.6104c-0.0546875 1.68848 -0.597656 4.33594 -1.20996 5.91016l-30 70c-2.32812 4.75098 -8.50586 8.82324 -13.79 9.08984c-0.94043 -0.0205078 -2.4502 -0.195312 -3.37012 -0.389648l-65 -15\n+c-6.19238 -1.6582 -11.4033 -8.20312 -11.6299 -14.6104c0 -160.29 130 -290 290 -290c6.58496 0.00292969 13.1309 5.21289 14.6104 11.6299z\" \u002F>\n+    \u003Cglyph glyph-name=\"photo-video\" unicode=\"&#xf87c;\" horiz-adv-x=\"640\" \n+d=\"M608 448c17.6641 0 32 -14.3359 32 -32v-320c0 -17.6641 -14.3359 -32 -32 -32h-128v320h-192v-64h-160v96c0 17.6641 14.3359 32 32 32h448zM232 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30\n+c4.96777 0 9 4.03223 9 9zM584 137v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 241v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30\n+c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM584 345v30c0 4.96777 -4.03223 9 -9 9h-30c-4.96777 0 -9 -4.03223 -9 -9v-30c0 -4.96777 4.03223 -9 9 -9h30c4.96777 0 9 4.03223 9 9zM416 288c17.6641 0 32 -14.3359 32 -32v-288\n+c0 -17.6641 -14.3359 -32 -32 -32h-384c-17.6641 0 -32 14.3359 -32 32v288c0 17.6641 14.3359 32 32 32h384zM96 224c-17.6641 0 -32 -14.3359 -32 -32s14.3359 -32 32 -32s32 14.3359 32 32s-14.3359 32 -32 32zM384 0v96l-96 96l-128 -128l-32 32l-64 -64v-32h320z\" \u002F>\n+    \u003Cglyph glyph-name=\"remove-format\" unicode=\"&#xf87d;\" horiz-adv-x=\"640\" \n+d=\"M336 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h32.4902l26.5098 79.5996l67.0898 -51.8301l-9.25977 -27.7695h11.1699zM633.82 -10.0996\n+c3.41309 -2.65234 6.18359 -8.3125 6.18359 -12.6357c0 -3.02734 -1.50684 -7.42383 -3.36426 -9.81445l-19.6396 -25.2705c-2.65234 -3.41211 -8.31152 -6.18262 -12.6338 -6.18262c-3.03125 0 -7.43359 1.51172 -9.82617 3.37305l-588.36 454.72\n+c-3.41016 2.65234 -6.17773 8.31055 -6.17773 12.6309c0 3.02832 1.50879 7.42773 3.36816 9.81934l19.6299 25.2695c2.65234 3.41309 8.31152 6.18262 12.6338 6.18262c3.03125 0 7.43359 -1.51074 9.82617 -3.37207l114.54 -88.5205v43.9004c0 8.83203 7.16797 16 16 16\n+h416c8.83203 0 16 -7.16797 16 -16v-96c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v32h-117.83l-49.1699 -147.59zM309.91 240.24l31.9199 95.7598h-117.83v-29.3604z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-alpha-down-alt\" unicode=\"&#xf881;\" horiz-adv-x=\"448\" \n+d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\n+c8.83203 0 16 -7.16797 16 -16v-304h48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16\n+v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\n+c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\n+c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793\n+l-16.3896 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-alpha-up-alt\" unicode=\"&#xf882;\" horiz-adv-x=\"448\" \n+d=\"M16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32\n+c-8.83203 0 -16 7.16797 -16 16v304h-48zM288 224c-8.83203 0 -16 7.16797 -16 16v17.6299v0.00292969c0 7.93262 4.81152 18.6475 10.7402 23.917l61.2598 70.4502h-56c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16\n+v-17.6299v-0.00292969c0 -7.93262 -4.81152 -18.6475 -10.7402 -23.917l-61.2598 -70.4502h56c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-128zM447.06 -10.6201c0.514648 -1.44043 0.931641 -3.85059 0.931641 -5.37988\n+c0 -8.82715 -7.16406 -15.9951 -15.9912 -16h-24.8398h-0.0449219c-6.42773 0 -13.249 4.96387 -15.2256 11.0801l-4.40918 12.9199h-71l-4.4209 -12.9199c-1.97559 -6.11621 -8.79688 -11.0801 -15.2246 -11.0801h-0.00488281h-24.8301\n+c-8.82715 0.00488281 -15.9912 7.17285 -15.9912 16c0 1.5293 0.416992 3.93945 0.931641 5.37988l59.2695 160c2.09277 5.8623 8.84375 10.6201 15.0684 10.6201h0.00195312h41.4395h0.00195312c6.22461 0 12.9756 -4.75781 15.0684 -10.6201zM335.61 48h32.7793\n+l-16.3896 48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-amount-down-alt\" unicode=\"&#xf884;\" \n+d=\"M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96\n+c-10.0801 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32c8.83203 0 16 -7.16797 16 -16v-304h48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-amount-up-alt\" unicode=\"&#xf885;\" \n+d=\"M240 352c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h64c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-64zM240 224c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h128c8.83203 0 16 -7.16797 16 -16v-32\n+c0 -8.83203 -7.16797 -16 -16 -16h-128zM496 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-256c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h256zM240 96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h192\n+c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-192zM16 288c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262l80 -96\n+c10.0801 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-numeric-down-alt\" unicode=\"&#xf886;\" horiz-adv-x=\"448\" \n+d=\"M176 96c14.2197 0 21.3496 -17.2598 11.3301 -27.3096l-80 -96c-2.58691 -2.58496 -7.65332 -4.68262 -11.3105 -4.68262c-3.65625 0 -8.72266 2.09766 -11.3096 4.68262l-80 96c-10.0703 10.0693 -2.90039 27.3096 11.29 27.3096h48v304c0 8.83203 7.16797 16 16 16h32\n+c8.83203 0 16 -7.16797 16 -16v-304h48zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16\n+c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695c0 -70.3906 -28.25 -107.23 -86.25 -132\n+c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53c6.80762 23.4512 31.4482 47.7197 55 54.1699z\n+M352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z\" \u002F>\n+    \u003Cglyph glyph-name=\"sort-numeric-up-alt\" unicode=\"&#xf887;\" horiz-adv-x=\"448\" \n+d=\"M107.31 411.31l80 -96c10.0703 -10.0693 2.90039 -27.3096 -11.3096 -27.3096h-48v-304c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v304h-48c-14.2197 0 -21.3496 17.2598 -11.3096 27.3096l80 96\n+c2.58594 2.58496 7.65332 4.68262 11.3096 4.68262s8.72363 -2.09766 11.3096 -4.68262zM400 32c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-96c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h16v64h-16\n+c-8.82422 0.0078125 -15.9863 7.17578 -15.9863 16c0 2.08984 0.759766 5.30176 1.69629 7.16992l16 32c2.44141 4.87012 8.84277 8.8252 14.29 8.83008h48c8.83203 0 16 -7.16797 16 -16v-112h16zM330.17 413.09c53.4502 14.25 101.83 -25.8799 101.85 -77.0898v-10.7695\n+c0 -70.3906 -28.25 -107.23 -86.25 -132c-8.36914 -3.58008 -18.0293 1.2793 -20.8994 9.90918l-9.90039 20c-2.62012 7.87012 0.610352 16.9404 8.18066 20.3408c6.2793 2.71387 15.6201 8.49805 20.8496 12.9092c-47.6396 4.76074 -83.0996 51.4805 -68.8301 102.53\n+c6.80762 23.4512 31.4482 47.7197 55 54.1699zM352 316c11.04 0 20 8.95996 20 20s-8.95996 20 -20 20s-20 -8.95996 -20 -20s8.95996 -20 20 -20z\" \u002F>\n+    \u003Cglyph glyph-name=\"spell-check\" unicode=\"&#xf891;\" horiz-adv-x=\"576\" \n+d=\"M272 192c-8.83203 0 -16 7.16797 -16 16v224c0 8.83203 7.16797 16 16 16h75c42.2998 0 80.9004 -30.5703 84.6699 -72.6797c0.186523 -2.02051 0.337891 -5.30762 0.337891 -7.33691c0 -11.0186 -4.20996 -27.8516 -9.39746 -37.5732\n+c14.0186 -13.0674 25.3965 -39.2256 25.3965 -58.3906c0 -1.29199 -0.0615234 -3.38867 -0.136719 -4.67969c-2.50977 -43.1396 -41.3105 -75.3398 -84.5098 -75.3398h-91.3604zM312 392v-48h40c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-40zM312 296v-48h56\n+c13.248 0 24 10.752 24 24s-10.752 24 -24 24h-56zM155.12 425.75l68.2998 -213.48c0.320312 -1.15625 0.580078 -3.06934 0.580078 -4.26953c0 -8.83203 -7.16797 -16 -16 -16v0h-24.9297h-0.000976562c-6.71875 0 -13.626 5.25488 -15.4189 11.7305l-11.9404 36.2695\n+h-87.4199l-11.9404 -36.2695c-1.79297 -6.47559 -8.7002 -11.7305 -15.4189 -11.7305h-0.000976562h-24.9297c-8.82617 0.00488281 -15.9902 7.17383 -15.9902 16c0 1.2002 0.259766 3.11328 0.580078 4.26953l68.29 213.48c3.92871 12.2822 17.583 22.25 30.4785 22.25\n+h0.00195312h25.2793h0.00195312c12.8955 0 26.5498 -9.96777 30.4785 -22.25zM89.3701 304h45.2598l-22.6299 68.7002zM571.37 171.52c2.58203 -2.58594 4.65723 -7.65039 4.65723 -11.3047c0 -3.64551 -2.08594 -8.70117 -4.65723 -11.2852l-208 -208.21\n+c-2.5752 -2.60449 -7.6377 -4.71777 -11.2998 -4.71777c-3.66309 0 -8.72559 2.11328 -11.3008 4.71777l-112 112.21c-2.57617 2.58496 -4.66699 7.64551 -4.66699 11.2949c0 3.65039 2.09082 8.70996 4.66699 11.2949l45.3008 45.3008\n+c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777l55.4102 -55.5l151.5 151.5c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.71777z\" \u002F>\n+    \u003Cglyph glyph-name=\"voicemail\" unicode=\"&#xf897;\" horiz-adv-x=\"640\" \n+d=\"M496 320c79.4883 0 144 -64.5117 144 -144s-64.5117 -144 -144 -144h-352c-79.4844 0.00390625 -143.993 64.5156 -143.993 144c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144c0 -24.1113 -10.8711 -59.9512 -24.2666 -80h112.52\n+c-13.3955 20.0488 -24.2666 55.8887 -24.2666 80c0 79.4883 64.5117 144 144 144h0.00683594zM64 176c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80zM496 96c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80\n+s-80 -35.8398 -80 -80s35.8398 -80 80 -80z\" \u002F>\n+    \u003Cglyph glyph-name=\"hat-cowboy\" unicode=\"&#xf8c0;\" horiz-adv-x=\"640\" \n+d=\"M490 151.1c-38.7695 -12.5898 -93.7305 -23.0996 -170 -23.0996s-131.19 10.5303 -169.99 23.1201c9.50977 57.4102 39.5098 232.88 97.71 232.88c14 0 26.4902 -6 37 -14c8.62988 -6.57812 24.4395 -11.917 35.29 -11.917s26.6611 5.33887 35.29 11.917\n+c10.5098 8.07031 23 14 37 14c58.21 0 88.21 -175.51 97.7002 -232.9zM632.9 188.28c3.90625 -2.625 7.08594 -8.57422 7.08594 -13.2803c0 -1.5752 -0.442383 -4.05273 -0.986328 -5.53027c-0.730469 -2.01953 -77.3203 -201.47 -319 -201.47s-318.27 199.45 -319 201.47\n+c-0.537109 1.46973 -0.973633 3.93164 -0.973633 5.49512c0 8.83203 7.16797 16 16 16c3.39844 0 8.20215 -1.84766 10.7236 -4.125c1.01953 -0.899414 102.42 -90.8398 293.24 -90.8398c191.89 0 292.16 89.8799 293.16 90.7803\n+c2.53418 2.3291 7.38477 4.21875 10.8262 4.21875c2.69141 0 6.68945 -1.21777 8.92383 -2.71875z\" \u002F>\n+    \u003Cglyph glyph-name=\"hat-cowboy-side\" unicode=\"&#xf8c1;\" horiz-adv-x=\"640\" \n+d=\"M260.8 156.94l98.0098 -84.4805c78.1904 -67.3896 129.98 -104.46 233.19 -104.46h-546.12c-14.0498 0 -27.1299 7.53027 -35.8799 20.6396c-9 13.4707 -12.1201 30.7002 -8.57031 47.3008c20.04 93.3398 85.5703 156.06 162.971 156.06\n+c34.3994 0 67.7695 -12.1201 96.3994 -35.0596zM495.45 175.23c114.95 -7.90039 144.55 -101.841 144.55 -127.23c0 -26.4961 -21.5039 -48 -48 -48c-97.0996 0 -141.24 35.46 -212.31 96.7002l-98 84.4795c-35.29 28.2705 -75.5 42.8203 -117.29 42.8203\n+c-7.09082 0 -13.8906 -1.16992 -20.79 -2l6.88965 65.21c2.72852 25.4766 25.2852 50.4707 50.3496 55.79l191.15 40.5898c3.63574 0.773438 9.60254 1.40137 13.3193 1.40137c29.7891 0 58.0498 -23.8301 63.0811 -53.1914z\" \u002F>\n+    \u003Cglyph glyph-name=\"mouse\" unicode=\"&#xf8cc;\" horiz-adv-x=\"384\" \n+d=\"M0 96v128h384v-128c0 -88.3203 -71.6797 -160 -160 -160h-64c-88.3203 0 -160 71.6797 -160 160zM176 448v-192h-176v32c0 88.3203 71.6797 160 160 160h16zM224 448c88.3203 0 160 -71.6797 160 -160v-32h-176v192h16z\" \u002F>\n+    \u003Cglyph glyph-name=\"record-vinyl\" unicode=\"&#xf8d9;\" \n+d=\"M256 296c57.4082 0 104 -46.5918 104 -104s-46.5918 -104 -104 -104s-104 46.5918 -104 104s46.5918 104 104 104zM256 168c13.248 0 24 10.752 24 24s-10.752 24 -24 24s-24 -10.752 -24 -24s10.752 -24 24 -24zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248\n+s-248 111 -248 248s111 248 248 248zM256 64c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128s-128 -57.3438 -128 -128s57.3438 -128 128 -128z\" \u002F>\n+  \u003C\u002Ffont>\n+\u003C\u002Fdefs>\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery.scrollbar.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery.scrollbar.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery.scrollbar.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery.scrollbar.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,187 +1,187 @@\n-.scroll-wrapper {\r\n-    overflow: hidden !important;\r\n-    padding: 0 !important;\r\n-    position: relative\r\n-}\r\n-\r\n-.scroll-wrapper > .scroll-content {\r\n-    border: none !important;\r\n-    box-sizing: content-box !important;\r\n-    height: auto;\r\n-    left: 0;\r\n-    margin: 0;\r\n-    max-height: none;\r\n-    max-width: none !important;\r\n-    overflow: scroll !important;\r\n-    padding: 0;\r\n-    position: relative !important;\r\n-    top: 0;\r\n-    width: auto !important\r\n-}\r\n-\r\n-.scroll-wrapper > .scroll-content::-webkit-scrollbar {\r\n-    height: 0;\r\n-    width: 0\r\n-}\r\n-\r\n-.scroll-element {\r\n-    display: none\r\n-}\r\n-\r\n-.scroll-element, .scroll-element div {\r\n-    box-sizing: content-box\r\n-}\r\n-\r\n-.scroll-element.scroll-x.scroll-scrollx_visible, .scroll-element.scroll-y.scroll-scrolly_visible {\r\n-    display: block\r\n-}\r\n-\r\n-.scroll-element .scroll-arrow, .scroll-element .scroll-bar {\r\n-    cursor: default\r\n-}\r\n-\r\n-.scroll-textarea {\r\n-    border: 1px solid #ccc;\r\n-    border-top-color: #999\r\n-}\r\n-\r\n-.scroll-textarea > .scroll-content {\r\n-    overflow: hidden !important\r\n-}\r\n-\r\n-.scroll-textarea > .scroll-content > textarea {\r\n-    border: none !important;\r\n-    box-sizing: border-box;\r\n-    height: 100% !important;\r\n-    margin: 0;\r\n-    max-height: none !important;\r\n-    max-width: none !important;\r\n-    overflow: scroll !important;\r\n-    outline: 0;\r\n-    padding: 2px;\r\n-    position: relative !important;\r\n-    top: 0;\r\n-    width: 100% !important\r\n-}\r\n-\r\n-.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {\r\n-    height: 0;\r\n-    width: 0\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element, .scrollbar-light > .scroll-element div {\r\n-    border: none;\r\n-    margin: 0;\r\n-    overflow: hidden;\r\n-    padding: 0;\r\n-    position: absolute;\r\n-    z-index: 10\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element {\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element div {\r\n-    display: block;\r\n-    height: 100%;\r\n-    left: 5px;\r\n-    top: 0;\r\n-    width: 1px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element .scroll-element_outer {\r\n-    -webkit-border-radius: 10px;\r\n-    -moz-border-radius: 10px;\r\n-    border-radius: 10px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element .scroll-element_size {\r\n-    background: #dbdbdb;\r\n-    background: url(data:image\u002Fsvg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA\u002FPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\r\n-    background: -moz-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\r\n-    background: -webkit-gradient(linear, left top, right top, color-stop(0, #dbdbdb), color-stop(100%, #e8e8e8));\r\n-    background: -webkit-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\r\n-    background: -o-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\r\n-    background: -ms-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\r\n-    background: linear-gradient(to right, #dbdbdb 0, #e8e8e8 100%);\r\n-    -webkit-border-radius: 10px;\r\n-    -moz-border-radius: 10px;\r\n-    border-radius: 10px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-x {\r\n-    bottom: 0;\r\n-    height: 17px;\r\n-    left: 0;\r\n-    min-width: 100%;\r\n-    width: 100%\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y {\r\n-    height: 100%;\r\n-    min-height: 100%;\r\n-    right: 2px;\r\n-    top: 0;\r\n-    width: 12px;\r\n-    opacity: 0\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element .scroll-bar {\r\n-    background: #fefefe;\r\n-    background: url(data:image\u002Fsvg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA\u002FPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\r\n-    background: -moz-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\r\n-    background: -webkit-gradient(linear, left top, right top, color-stop(0, #fefefe), color-stop(100%, #f5f5f5));\r\n-    background: -webkit-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\r\n-    background: -o-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\r\n-    background: -ms-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\r\n-    background: linear-gradient(to right, #fefefe 0, #f5f5f5 100%);\r\n-    -webkit-border-radius: 10px;\r\n-    -moz-border-radius: 10px;\r\n-    border-radius: 10px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y .scroll-bar {\r\n-    left: 0;\r\n-    min-height: 10px;\r\n-    width: 11px;\r\n-    background: #FFF;\r\n-    opacity: 1;\r\n-    transition: opacity .25s;\r\n-    border:1px solid #DDD;\r\n-    box-sizing: border-box;\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y .scroll-bar:hover {\r\n-    opacity: 1\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-x .scroll-element_size {\r\n-    left: -4px;\r\n-    width: 1px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer {\r\n-    left: 0;\r\n-    top: 2px;\r\n-    width: 12px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y .scroll-element_size {\r\n-    top: -4px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {\r\n-    left: -19px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {\r\n-    top: -19px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {\r\n-    left: -19px\r\n-}\r\n-\r\n-.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {\r\n-    top: -19px\r\n+.scroll-wrapper {\n+    overflow: hidden !important;\n+    padding: 0 !important;\n+    position: relative\n+}\n+\n+.scroll-wrapper > .scroll-content {\n+    border: none !important;\n+    box-sizing: content-box !important;\n+    height: auto;\n+    left: 0;\n+    margin: 0;\n+    max-height: none;\n+    max-width: none !important;\n+    overflow: scroll !important;\n+    padding: 0;\n+    position: relative !important;\n+    top: 0;\n+    width: auto !important\n+}\n+\n+.scroll-wrapper > .scroll-content::-webkit-scrollbar {\n+    height: 0;\n+    width: 0\n+}\n+\n+.scroll-element {\n+    display: none\n+}\n+\n+.scroll-element, .scroll-element div {\n+    box-sizing: content-box\n+}\n+\n+.scroll-element.scroll-x.scroll-scrollx_visible, .scroll-element.scroll-y.scroll-scrolly_visible {\n+    display: block\n+}\n+\n+.scroll-element .scroll-arrow, .scroll-element .scroll-bar {\n+    cursor: default\n+}\n+\n+.scroll-textarea {\n+    border: 1px solid #ccc;\n+    border-top-color: #999\n+}\n+\n+.scroll-textarea > .scroll-content {\n+    overflow: hidden !important\n+}\n+\n+.scroll-textarea > .scroll-content > textarea {\n+    border: none !important;\n+    box-sizing: border-box;\n+    height: 100% !important;\n+    margin: 0;\n+    max-height: none !important;\n+    max-width: none !important;\n+    overflow: scroll !important;\n+    outline: 0;\n+    padding: 2px;\n+    position: relative !important;\n+    top: 0;\n+    width: 100% !important\n+}\n+\n+.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {\n+    height: 0;\n+    width: 0\n+}\n+\n+.scrollbar-light > .scroll-element, .scrollbar-light > .scroll-element div {\n+    border: none;\n+    margin: 0;\n+    overflow: hidden;\n+    padding: 0;\n+    position: absolute;\n+    z-index: 10\n+}\n+\n+.scrollbar-light > .scroll-element {\n+}\n+\n+.scrollbar-light > .scroll-element div {\n+    display: block;\n+    height: 100%;\n+    left: 5px;\n+    top: 0;\n+    width: 1px\n+}\n+\n+.scrollbar-light > .scroll-element .scroll-element_outer {\n+    -webkit-border-radius: 10px;\n+    -moz-border-radius: 10px;\n+    border-radius: 10px\n+}\n+\n+.scrollbar-light > .scroll-element .scroll-element_size {\n+    background: #dbdbdb;\n+    background: url(data:image\u002Fsvg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA\u002FPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\n+    background: -moz-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\n+    background: -webkit-gradient(linear, left top, right top, color-stop(0, #dbdbdb), color-stop(100%, #e8e8e8));\n+    background: -webkit-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\n+    background: -o-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\n+    background: -ms-linear-gradient(left, #dbdbdb 0, #e8e8e8 100%);\n+    background: linear-gradient(to right, #dbdbdb 0, #e8e8e8 100%);\n+    -webkit-border-radius: 10px;\n+    -moz-border-radius: 10px;\n+    border-radius: 10px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-x {\n+    bottom: 0;\n+    height: 17px;\n+    left: 0;\n+    min-width: 100%;\n+    width: 100%\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y {\n+    height: 100%;\n+    min-height: 100%;\n+    right: 2px;\n+    top: 0;\n+    width: 12px;\n+    opacity: 0\n+}\n+\n+.scrollbar-light > .scroll-element .scroll-bar {\n+    background: #fefefe;\n+    background: url(data:image\u002Fsvg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA\u002FPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);\n+    background: -moz-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\n+    background: -webkit-gradient(linear, left top, right top, color-stop(0, #fefefe), color-stop(100%, #f5f5f5));\n+    background: -webkit-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\n+    background: -o-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\n+    background: -ms-linear-gradient(left, #fefefe 0, #f5f5f5 100%);\n+    background: linear-gradient(to right, #fefefe 0, #f5f5f5 100%);\n+    -webkit-border-radius: 10px;\n+    -moz-border-radius: 10px;\n+    border-radius: 10px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y .scroll-bar {\n+    left: 0;\n+    min-height: 10px;\n+    width: 11px;\n+    background: #FFF;\n+    opacity: 1;\n+    transition: opacity .25s;\n+    border:1px solid #DDD;\n+    box-sizing: border-box;\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y .scroll-bar:hover {\n+    opacity: 1\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-x .scroll-element_size {\n+    left: -4px;\n+    width: 1px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer {\n+    left: 0;\n+    top: 2px;\n+    width: 12px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y .scroll-element_size {\n+    top: -4px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {\n+    left: -19px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {\n+    top: -19px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {\n+    left: -19px\n+}\n+\n+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {\n+    top: -19px\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u002F*! jQuery UI - v1.11.4 - 2015-03-11\r\n-* http:\u002F\u002Fjqueryui.com\r\n-* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\r\n-* To view and modify this theme, visit http:\u002F\u002Fjqueryui.com\u002Fthemeroller\u002F?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\r\n-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT *\u002F\r\n-\r\n-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:\"\";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url(\"data:image\u002Fgif;base64,R0lGODlhAQABAIAAAAAAAP\u002F\u002F\u002FyH5BAEAAAAALAAAAAABAAEAAAIBRAA7\")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(\"data:image\u002Fgif;base64,R0lGODlhKAAoAIABAAAAAP\u002F\u002F\u002FyH\u002FC05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH\u002Fynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT\u002FLz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd\u002FiO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb\u002FlCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80\u002FX02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G\u002F+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+\u002FyaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+\u002FQe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2\u002FFu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU\u002FQUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx\u002FoLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2\u002FgF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN\u002FzWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(\"images\u002Fui-bg_flat_75_ffffff_40x100.png\") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(\"images\u002Fui-bg_highlight-soft_75_cccccc_1x100.png\") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(\"images\u002Fui-bg_glass_75_e6e6e6_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(\"images\u002Fui-bg_glass_75_dadada_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(\"images\u002Fui-bg_glass_65_ffffff_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(\"images\u002Fui-bg_glass_55_fbf9ee_1x400.png\") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(\"images\u002Fui-bg_glass_95_fef1ec_1x400.png\") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(\"images\u002Fui-icons_222222_256x240.png\")}.ui-widget-header .ui-icon{background-image:url(\"images\u002Fui-icons_222222_256x240.png\")}.ui-state-default .ui-icon{background-image:url(\"images\u002Fui-icons_888888_256x240.png\")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\"images\u002Fui-icons_454545_256x240.png\")}.ui-state-active .ui-icon{background-image:url(\"images\u002Fui-icons_454545_256x240.png\")}.ui-state-highlight .ui-icon{background-image:url(\"images\u002Fui-icons_2e83ff_256x240.png\")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\"images\u002Fui-icons_cd0a0a_256x240.png\")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(\"images\u002Fui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(\"images\u002Fui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}\r\n+\u002F*! jQuery UI - v1.11.4 - 2015-03-11\n+* http:\u002F\u002Fjqueryui.com\n+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n+* To view and modify this theme, visit http:\u002F\u002Fjqueryui.com\u002Fthemeroller\u002F?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\n+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT *\u002F\n+\n+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:\"\";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url(\"data:image\u002Fgif;base64,R0lGODlhAQABAIAAAAAAAP\u002F\u002F\u002FyH5BAEAAAAALAAAAAABAAEAAAIBRAA7\")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(\"data:image\u002Fgif;base64,R0lGODlhKAAoAIABAAAAAP\u002F\u002F\u002FyH\u002FC05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH\u002Fynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT\u002FLz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd\u002FiO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb\u002FlCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80\u002FX02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G\u002F+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+\u002FyaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+\u002FQe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2\u002FFu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU\u002FQUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx\u002FoLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2\u002FgF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN\u002FzWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{-webkit-filter:inherit;filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(\"images\u002Fui-bg_flat_75_ffffff_40x100.png\") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(\"images\u002Fui-bg_highlight-soft_75_cccccc_1x100.png\") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(\"images\u002Fui-bg_glass_75_e6e6e6_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(\"images\u002Fui-bg_glass_75_dadada_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(\"images\u002Fui-bg_glass_65_ffffff_1x400.png\") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(\"images\u002Fui-bg_glass_55_fbf9ee_1x400.png\") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(\"images\u002Fui-bg_glass_95_fef1ec_1x400.png\") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(\"images\u002Fui-icons_222222_256x240.png\")}.ui-widget-header .ui-icon{background-image:url(\"images\u002Fui-icons_222222_256x240.png\")}.ui-state-default .ui-icon{background-image:url(\"images\u002Fui-icons_888888_256x240.png\")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\"images\u002Fui-icons_454545_256x240.png\")}.ui-state-active .ui-icon{background-image:url(\"images\u002Fui-icons_454545_256x240.png\")}.ui-state-highlight .ui-icon{background-image:url(\"images\u002Fui-icons_2e83ff_256x240.png\")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\"images\u002Fui-icons_cd0a0a_256x240.png\")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(\"images\u002Fui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(\"images\u002Fui-bg_flat_0_aaaaaa_40x100.png\") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\r\n-.ui-timepicker-div dl { text-align: left; }\r\n-.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }\r\n-.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }\r\n-.ui-timepicker-div td { font-size: 90%; }\r\n-.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }\r\n-.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; }\r\n-\r\n-.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { background: none; color: inherit; border: none; outline: none; border-bottom: solid 1px #555; width: 95%; }\r\n-.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { border-bottom-color: #aaa; }\r\n-\r\n-.ui-timepicker-rtl{ direction: rtl; }\r\n-.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }\r\n-.ui-timepicker-rtl dl dt{ float: right; clear: right; }\r\n-.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }\r\n-\r\n-\u002F* Shortened version style *\u002F\r\n-.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,\r\n-.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd,\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,\r\n-.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; }\r\n-.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,\r\n-.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; }\r\n+.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n+.ui-timepicker-div dl { text-align: left; }\n+.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }\n+.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }\n+.ui-timepicker-div td { font-size: 90%; }\n+.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }\n+.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; }\n+\n+.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input { background: none; color: inherit; border: none; outline: none; border-bottom: solid 1px #555; width: 95%; }\n+.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus { border-bottom-color: #aaa; }\n+\n+.ui-timepicker-rtl{ direction: rtl; }\n+.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }\n+.ui-timepicker-rtl dl dt{ float: right; clear: right; }\n+.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }\n+\n+\u002F* Shortened version style *\u002F\n+.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; }\n+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,\n+.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; }\n+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; }\n+.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; }\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd,\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; }\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; }\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,\n+.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; }\n+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,\n+.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; }\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fselect2.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fselect2.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fselect2.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Fselect2.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}\r\n+.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ftom-select.min.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ftom-select.min.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ftom-select.min.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fcss\u002Fvendor\u002Ftom-select.min.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-.focus .ts-control,.ts-control{box-shadow:none}.ts-control,.ts-dropdown{width:100%;box-sizing:border-box}.ts-control{border:1px solid #d0d0d0;padding:8px;overflow:hidden;position:relative;z-index:1;border-radius:3px;display:flex;flex-wrap:wrap}.ts-wrapper.multi.has-items .ts-control{padding:calc(8px - 2px - 0) 8px calc(8px - 2px - 3px - 0)}.full .ts-control{background-color:#fff}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.ts-control>*{vertical-align:baseline;display:inline-block}.ts-wrapper.multi .ts-control>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.ts-wrapper.multi .ts-control>div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{color:#7d7d7d;background:#fff;border:0 solid #fff}.ts-control>input{flex:1 1 auto;min-width:7rem;display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0!important;text-indent:0!important;border:0!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;box-shadow:none!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:0!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl.single .ts-control:after{left:15px;right:auto}.ts-control.rtl .ts-control>input{margin:0 4px 0 -2px!important}.disabled .ts-control{opacity:.5;background-color:#fafafa}.input-hidden .ts-control>input{opacity:0;position:absolute;left:-10000px}.ts-dropdown{position:absolute;top:100%;left:0;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:.25rem 0 0;border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:0 0 3px 3px}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);border-radius:1px}.ts-dropdown .create,.ts-dropdown .no-results,.ts-dropdown .optgroup-header,.ts-dropdown .option{padding:5px 8px}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{opacity:1;cursor:pointer}.ts-dropdown .optgroup:first-child .optgroup-header,.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0}.ts-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.ts-dropdown .active{background-color:#f5fafd;color:#495c68}.ts-dropdown .active.create{color:#495c68}.ts-dropdown .create{color:rgba(48,48,48,.5)}.ts-dropdown .spinner{display:inline-block;width:30px;height:30px;margin:5px 8px}.ts-dropdown .spinner::after{content:\" \";display:block;width:24px;height:24px;margin:3px;border-radius:50%;border:5px solid #d0d0d0;border-color:#d0d0d0 transparent;animation:1.2s linear infinite lds-dual-ring}@keyframes lds-dual-ring{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.ts-dropdown-content{overflow:hidden auto;max-height:200px;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-right:.5rem}.plugin-checkbox_options.rtl .option input{margin-left:.5rem}.plugin-clear_button{--ts-pr-clear-button:1em}.plugin-clear_button .clear-button{opacity:0;position:absolute;top:50%;transform:translateY(-50%);right:calc(8px - 6px);margin-right:0!important;background:0 0!important;transition:opacity .5s;cursor:pointer}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{right:max(var(--ts-pr-caret),8px)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{position:relative;padding:10px 8px;border-bottom:1px solid #d0d0d0;background:color-mix(#fff,#d0d0d0,85%);border-radius:3px 3px 0 0}.plugin-dropdown_input .dropdown-input,.plugin-dropdown_input.focus.dropdown-active .ts-control{border:1px solid #d0d0d0;box-shadow:none}.ts-wrapper .dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input .dropdown-input{border-width:0 0 1px;display:block;padding:8px;width:100%;background:0 0}.plugin-dropdown_input .items-placeholder{border:0!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.dropdown-active .items-placeholder,.plugin-dropdown_input.has-items .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::-ms-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0;flex-grow:1;flex-basis:0;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0}.ts-dropdown.plugin-optgroup_columns .optgroup::before{display:none}.ts-wrapper.plugin-remove_button .item{display:inline-flex;align-items:center}.ts-wrapper.plugin-remove_button .item .remove{color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:0 6px;border-radius:0 2px 2px 0;box-sizing:border-box}.ts-wrapper.plugin-remove_button .item .remove:hover{background:rgba(0,0,0,.05)}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:0 0}.ts-wrapper.plugin-remove_button .remove-single{position:absolute;right:0;top:0;font-size:23px}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-right:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-left:1px solid #d0d0d0;margin-left:6px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-left-color:#cacaca}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-left-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-left:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-right:1px solid #d0d0d0;margin-right:6px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-right-color:#cacaca}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-right-color:#fff}:root{--ts-pr-clear-button:0;--ts-pr-caret:0;--ts-pr-min:.75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{text-align:right;padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-control,.ts-control input,.ts-dropdown{color:#303030;font-family:inherit;font-size:13px;line-height:18px}.ts-control,.ts-wrapper.single.input-active .ts-control{background:#fff;cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}\r\n+.focus .ts-control,.ts-control{box-shadow:none}.ts-control,.ts-dropdown{width:100%;box-sizing:border-box}.ts-control{border:1px solid #d0d0d0;padding:8px;overflow:hidden;position:relative;z-index:1;border-radius:3px;display:flex;flex-wrap:wrap}.ts-wrapper.multi.has-items .ts-control{padding:calc(8px - 2px - 0) 8px calc(8px - 2px - 3px - 0)}.full .ts-control{background-color:#fff}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.ts-control>*{vertical-align:baseline;display:inline-block}.ts-wrapper.multi .ts-control>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.ts-wrapper.multi .ts-control>div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{color:#7d7d7d;background:#fff;border:0 solid #fff}.ts-control>input{flex:1 1 auto;min-width:7rem;display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0!important;text-indent:0!important;border:0!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;box-shadow:none!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:0!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl.single .ts-control:after{left:15px;right:auto}.ts-control.rtl .ts-control>input{margin:0 4px 0 -2px!important}.disabled .ts-control{opacity:.5;background-color:#fafafa}.input-hidden .ts-control>input{opacity:0;position:absolute;left:-10000px}.ts-dropdown{position:absolute;top:100%;left:0;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:.25rem 0 0;border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:0 0 3px 3px}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);border-radius:1px}.ts-dropdown .create,.ts-dropdown .no-results,.ts-dropdown .optgroup-header,.ts-dropdown .option{padding:5px 8px}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{opacity:1;cursor:pointer}.ts-dropdown .optgroup:first-child .optgroup-header,.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0}.ts-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.ts-dropdown .active{background-color:#f5fafd;color:#495c68}.ts-dropdown .active.create{color:#495c68}.ts-dropdown .create{color:rgba(48,48,48,.5)}.ts-dropdown .spinner{display:inline-block;width:30px;height:30px;margin:5px 8px}.ts-dropdown .spinner::after{content:\" \";display:block;width:24px;height:24px;margin:3px;border-radius:50%;border:5px solid #d0d0d0;border-color:#d0d0d0 transparent;animation:1.2s linear infinite lds-dual-ring}@keyframes lds-dual-ring{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.ts-dropdown-content{overflow:hidden auto;max-height:200px;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-right:.5rem}.plugin-checkbox_options.rtl .option input{margin-left:.5rem}.plugin-clear_button{--ts-pr-clear-button:1em}.plugin-clear_button .clear-button{opacity:0;position:absolute;top:50%;transform:translateY(-50%);right:calc(8px - 6px);margin-right:0!important;background:0 0!important;transition:opacity .5s;cursor:pointer}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{right:max(var(--ts-pr-caret),8px)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{position:relative;padding:10px 8px;border-bottom:1px solid #d0d0d0;background:color-mix(#fff,#d0d0d0,85%);border-radius:3px 3px 0 0}.plugin-dropdown_input .dropdown-input,.plugin-dropdown_input.focus.dropdown-active .ts-control{border:1px solid #d0d0d0;box-shadow:none}.ts-wrapper .dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input .dropdown-input{border-width:0 0 1px;display:block;padding:8px;width:100%;background:0 0}.plugin-dropdown_input .items-placeholder{border:0!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.dropdown-active .items-placeholder,.plugin-dropdown_input.has-items .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::-ms-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0;flex-grow:1;flex-basis:0;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0}.ts-dropdown.plugin-optgroup_columns .optgroup::before{display:none}.ts-wrapper.plugin-remove_button .item{display:inline-flex;align-items:center}.ts-wrapper.plugin-remove_button .item .remove{color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:0 6px;border-radius:0 2px 2px 0;box-sizing:border-box}.ts-wrapper.plugin-remove_button .item .remove:hover{background:rgba(0,0,0,.05)}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:0 0}.ts-wrapper.plugin-remove_button .remove-single{position:absolute;right:0;top:0;font-size:23px}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-right:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-left:1px solid #d0d0d0;margin-left:6px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-left-color:#cacaca}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-left-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-left:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-right:1px solid #d0d0d0;margin-right:6px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-right-color:#cacaca}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-right-color:#fff}:root{--ts-pr-clear-button:0;--ts-pr-caret:0;--ts-pr-min:.75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{text-align:right;padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-control,.ts-control input,.ts-dropdown{color:#303030;font-family:inherit;font-size:13px;line-height:18px}.ts-control,.ts-wrapper.single.input-active .ts-control{background:#fff;cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Faddons.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Faddons.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Faddons.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Faddons.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,341 +1,341 @@\n-\u002F**\r\n- * Script handle admin notices.\r\n- *\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.1\r\n- *\u002F\r\n-import API from '..\u002Fapi';\r\n-let elAddonsPage;\r\n-let dataHtml;\r\n-let dataAddons;\r\n-let elLPAddons;\r\n-const queryString = window.location.search;\r\n-const urlParams = new URLSearchParams( queryString );\r\n-const tab = urlParams.get( 'tab' );\r\n-let elNotifyActionWrapper;\r\n-const isHandling = [];\r\n-\r\n-\u002F\u002F API get list addons.\r\n-const getAddons = ( set = '' ) => {\r\n-\tconst params = tab ? `?tab=${ tab }` : `?${ set }`;\r\n-\tfetch( API.admin.apiAddons + params, {\r\n-\t\tmethod: 'GET',\r\n-\t\theaders: {\r\n-\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t},\r\n-\t} ).then( ( res ) =>\r\n-\t\tres.json()\r\n-\t).then( ( res ) => {\r\n-\t\t\u002F\u002F console.log(data);\r\n-\t\tconst { status, message, data } = res;\r\n-\t\tif ( status === 'success' ) {\r\n-\t\t\tdataHtml = data.html;\r\n-\t\t\tdataAddons = data.addons;\r\n-\t\t} else {\r\n-\t\t\tdataHtml = message;\r\n-\t\t}\r\n-\t} ).catch( ( err ) => {\r\n-\t\tconsole.log( err );\r\n-\t} );\r\n-};\r\n-\u002F\u002F API send action install, update, activate, deactivate.\r\n-const addonsAction = ( data, callBack ) => {\r\n-\tconst addonSlug = data.addon.slug;\r\n-\r\n-\tif ( isHandling.indexOf( addonSlug ) !== -1 ) {\r\n-\t\treturn;\r\n-\t}\r\n-\tisHandling.push( addonSlug );\r\n-\r\n-\tfetch( API.admin.apiAddonAction, {\r\n-\t\tmethod: 'POST',\r\n-\t\theaders: {\r\n-\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t},\r\n-\t\tbody: JSON.stringify( { ...data } ),\r\n-\t} ).then( ( res ) =>\r\n-\t\tres.json()\r\n-\t).then( ( res ) => {\r\n-\t\tconst indexAddonHanding = isHandling.indexOf( addonSlug );\r\n-\t\tif ( indexAddonHanding !== -1 ) {\r\n-\t\t\tisHandling.splice( indexAddonHanding, 1 );\r\n-\t\t}\r\n-\r\n-\t\tconst { status, message, data } = res;\r\n-\r\n-\t\tif ( callBack ) {\r\n-\t\t\tcallBack( status, message, data );\r\n-\t\t}\r\n-\r\n-\t\thandleNotify( status, message );\r\n-\t} ).catch( ( err ) => {\r\n-\t\thandleNotify( 'error', `error js: ${ err }` );\r\n-\t\tconsole.log( err );\r\n-\t} );\r\n-};\r\n-\u002F\u002F Show notify.\r\n-const handleNotify = ( status, message ) => {\r\n-\tconst elNotifyAction = elNotifyActionWrapper.querySelector( '.lp-notify-action' );\r\n-\tconst elNotifyActionNew = elNotifyAction.cloneNode( true );\r\n-\telNotifyActionNew.classList.remove( 'clone' );\r\n-\telNotifyActionWrapper.insertBefore( elNotifyActionNew, elNotifyActionWrapper[ 0 ] );\r\n-\tconst elSuccess = elNotifyActionNew.querySelector( `.${ elNotifyActionNew.classList.value }__success` );\r\n-\tconst elFailed = elNotifyActionNew.querySelector( `.${ elNotifyActionNew.classList.value }__error` );\r\n-\r\n-\tif ( status === 'success' ) {\r\n-\t\telSuccess.classList.add( 'show' );\r\n-\t\telSuccess.querySelector( '.message' ).innerHTML = message;\r\n-\t} else {\r\n-\t\telFailed.classList.add( 'show' );\r\n-\t\telFailed.querySelector( '.message' ).innerHTML = message;\r\n-\t}\r\n-\r\n-\telNotifyActionWrapper.classList.add( 'show' );\r\n-\tsetTimeout( () => {\r\n-\t\telNotifyActionNew.remove();\r\n-\r\n-\t\tconst elNotifyAction = elNotifyActionWrapper.querySelectorAll( '.lp-notify-action' );\r\n-\t\tif ( elNotifyAction.length === 1 ) {\r\n-\t\t\telNotifyActionWrapper.classList.remove( 'show' );\r\n-\t\t}\r\n-\t}, status === 'success' ? 3000 : 4000 );\r\n-};\r\n-\u002F\u002F Get addons when js loaded.\r\n-getAddons();\r\n-\u002F\u002F Search Addons.\r\n-const searchAddons = ( name ) => {\r\n-\tconst elAddonItems = elAddonsPage.querySelectorAll( '.lp-addon-item' );\r\n-\tlet totalItems = 0;\r\n-\r\n-\telAddonItems.forEach( ( elAddonItem ) => {\r\n-\t\tconst addonName = elAddonItem.querySelector( 'a' ).textContent;\r\n-\t\tif ( elAddonItem.classList.contains( 'hide' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( addonName.toLowerCase().includes( name.toLowerCase() ) ) {\r\n-\t\t\telAddonItem.classList.remove( 'search-not-found' );\r\n-\t\t\ttotalItems++;\r\n-\t\t} else {\r\n-\t\t\telAddonItem.classList.add( 'search-not-found' );\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tsetGridItems( totalItems );\r\n-};\r\n-\u002F\u002F Set grid style items.\r\n-const setGridItems = ( totalItems ) => {\r\n-\tif ( totalItems \u003C 4 ) {\r\n-\t\telLPAddons.classList.add( 'max-3-items' );\r\n-\t} else {\r\n-\t\telLPAddons.classList.remove( 'max-3-items' );\r\n-\t}\r\n-};\r\n-\u002F\u002F Check element loaded and data API returned.\r\n-const loadElData = setInterval( () => {\r\n-\tif ( ! elAddonsPage || ! elNotifyActionWrapper ) {\r\n-\t\telAddonsPage = document.querySelector( '.lp-addons-page' );\r\n-\t\telNotifyActionWrapper = document.querySelector( '.lp-notify-action-wrapper' );\r\n-\t} else if ( dataHtml && elAddonsPage && elNotifyActionWrapper ) {\r\n-\t\telAddonsPage.innerHTML = dataHtml;\r\n-\t\telLPAddons = elAddonsPage.querySelector( '#lp-addons' );\r\n-\t\tconst elNavTabWrapper = document.querySelector( '.lp-nav-tab-wrapper' );\r\n-\t\tif ( ! elNavTabWrapper ) {\r\n-\t\t\tclearInterval( loadElData );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elNavTabWrapperClone = elNavTabWrapper.cloneNode( true );\r\n-\t\telAddonsPage.insertBefore( elNavTabWrapperClone, elAddonsPage.children[ 0 ] );\r\n-\t\telNavTabWrapperClone.style.display = 'flex';\r\n-\t\telNavTabWrapper.remove();\r\n-\t\tconst elNavActive = elNavTabWrapperClone.querySelector( '.nav-tab.nav-tab-active span' );\r\n-\t\tsetGridItems( parseInt( elNavActive.textContent ) );\r\n-\r\n-\t\tclearInterval( loadElData );\r\n-\t}\r\n-}, 1 );\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', ( e ) => {\r\n-} );\r\n-\r\n-\u002F*** Events ***\u002F\r\n-document.addEventListener( 'click', ( e ) => {\r\n-\tlet el = e.target;\r\n-\tconst tagName = el.tagName.toLowerCase();\r\n-\tif ( tagName === 'span' ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst elBtnAction = el.closest( '.btn-addon-action' );\r\n-\t\tif ( elBtnAction ) {\r\n-\t\t\telBtnAction.click();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Events actions: activate, deactivate.\r\n-\t\u002F*if ( el.classList.contains( 'lp-toggle-switch-label' ) ) {\r\n-\t\t\u002F\u002Fe.preventDefault();\r\n-\r\n-\t\tconst elAddonItem = el.closest( '.lp-addon-item' );\r\n-\t\tconst idLabel = el.getAttribute( 'for' );\r\n-\t\tconst elInput = document.querySelector( `#${ idLabel }` );\r\n-\t\tconst action = elInput.getAttribute( 'data-action' );\r\n-\t\tconst addon = dataAddons[ elAddonItem.dataset.slug ];\r\n-\t\tconst addonSlug = addon.slug;\r\n-\t\tconst parent = el.closest( '.lp-toggle-switch' );\r\n-\t\tconst label = parent.querySelector( `label[for=${ idLabel }]` );\r\n-\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\r\n-\t\tdashicons.style.display = 'inline-block';\r\n-\t\tlabel.style.display = 'none';\r\n-\t\tconst data = { action, addon };\r\n-\t\taddonsAction( data, function( status, message, data ) {\r\n-\t\t\tconst elAddon = document.querySelector( `#${ addonSlug }` );\r\n-\t\t\tif ( elAddon ) {\r\n-\t\t\t\tconst parent = elAddon.closest( '.lp-toggle-switch' );\r\n-\t\t\t\tif ( parent ) {\r\n-\t\t\t\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\r\n-\t\t\t\t\tdashicons.style.display = 'none';\r\n-\t\t\t\t\tif ( action === 'deactivate' ) {\r\n-\t\t\t\t\t\telAddon.setAttribute( 'data-action', 'activate' );\r\n-\t\t\t\t\t} else if ( action === 'activate' ) {\r\n-\t\t\t\t\t\telAddon.setAttribute( 'data-action', 'deactivate' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tconst label = parent.querySelector( `label[for=${ addonSlug }]` );\r\n-\t\t\t\t\tlabel.style.display = 'inline-flex';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\tif ( action === 'deactivate' ) {\r\n-\t\t\t\t\telAddonItem.classList.remove( 'activated' );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( action === 'activate' ) {\r\n-\t\t\t\t\telAddonItem.classList.add( 'activated' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F\u002F Events actions: install, update, delete.\r\n-\tif ( el.closest( '.btn-addon-action' ) ) {\r\n-\t\tel = el.closest( '.btn-addon-action' );\r\n-\t\te.preventDefault();\r\n-\t\tel.classList.add( 'handling' );\r\n-\t\tlet purchaseCode = '';\r\n-\t\tconst elAddonItem = el.closest( '.lp-addon-item' );\r\n-\t\tconst addon = dataAddons[ elAddonItem.dataset.slug ];\r\n-\t\tconst action = el.dataset.action;\r\n-\t\tconst elItemPurchase = elAddonItem.querySelector( '.lp-addon-item__purchase' );\r\n-\t\t\u002F\u002Fconst elToggleSwitchInput = elAddonItem.querySelector( '.lp-toggle-switch-input' );\r\n-\r\n-\t\tif ( action === 'purchase' ) {\r\n-\t\t\telItemPurchase.style.display = 'block';\r\n-\t\t\telItemPurchase.querySelector( '.purchase-install' ).style.display = 'flex';\r\n-\t\t\treturn;\r\n-\t\t} else if ( action === 'update-purchase-code' ) {\r\n-\t\t\telItemPurchase.querySelector( '.purchase-update' ).style.display = 'flex';\r\n-\t\t\telItemPurchase.style.display = 'block';\r\n-\t\t\treturn;\r\n-\t\t} else if ( action === 'buy' ) {\r\n-\t\t\tconst link = el.dataset.link;\r\n-\t\t\twindow.open( link, '_blank' );\r\n-\t\t\treturn;\r\n-\t\t} else if ( action === 'cancel' ) {\r\n-\t\t\telItemPurchase.style.display = 'none';\r\n-\t\t\treturn;\r\n-\t\t} else if ( action === 'install' ) {\r\n-\t\t\tif ( el.dataset.link ) {\r\n-\t\t\t\tel.classList.remove( 'handling' );\r\n-\t\t\t\tconst link = el.dataset.link;\r\n-\t\t\t\twindow.open( link, '_blank' );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Send request to server.\r\n-\t\tif ( elItemPurchase ) {\r\n-\t\t\tpurchaseCode = elItemPurchase.querySelector( 'input[name=purchase-code]' ).value;\r\n-\t\t}\r\n-\r\n-\t\tconst data = { purchase_code: purchaseCode, action, addon };\r\n-\t\taddonsAction( data, function( status, message, data ) {\r\n-\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\tif ( action === 'install' ) {\r\n-\t\t\t\t\telAddonItem.classList.add( 'installed', 'activated' );\r\n-\t\t\t\t\telAddonItem.classList.remove( 'not_installed' );\r\n-\t\t\t\t\telItemPurchase.style.display = 'none';\r\n-\t\t\t\t\t\u002F*elToggleSwitchInput.setAttribute( 'checked', 'checked' );\r\n-\t\t\t\t\telToggleSwitchInput.setAttribute( 'data-action', 'deactivate' );*\u002F\r\n-\t\t\t\t\tconst elNavInstalled = document.querySelector( '.nav-tab[data-tab=installed] span' );\r\n-\t\t\t\t\telNavInstalled.textContent = parseInt( elNavInstalled.textContent ) + 1;\r\n-\t\t\t\t\tconst elNavNoInstalled = document.querySelector( '.nav-tab[data-tab=not_installed] span' );\r\n-\t\t\t\t\telNavNoInstalled.textContent = parseInt( elNavNoInstalled.textContent ) - 1;\r\n-\t\t\t\t\telItemPurchase.querySelector( '.purchase-install' ).style.display = 'none';\r\n-\t\t\t\t\telItemPurchase.querySelector( '.purchase-update' ).querySelector( '.enter-purchase-code' ).value = purchaseCode;\r\n-\t\t\t\t} else if ( action === 'update' ) {\r\n-\t\t\t\t\tconst elAddonVersionCurrent = elAddonItem.querySelector( '.addon-version-current' );\r\n-\t\t\t\t\telAddonVersionCurrent.innerHTML = addon.version;\r\n-\t\t\t\t\telAddonItem.classList.remove( 'update' );\r\n-\t\t\t\t} else if ( action === 'activate' ) {\r\n-\t\t\t\t\telAddonItem.classList.add( 'activated' );\r\n-\t\t\t\t} else if ( action === 'deactivate' ) {\r\n-\t\t\t\t\telAddonItem.classList.remove( 'activated' );\r\n-\t\t\t\t} else if ( action === 'update-purchase' ) {\r\n-\t\t\t\t\telItemPurchase.style.display = 'none';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tel.classList.remove( 'handling' );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tif ( el.classList.contains( 'nav-tab' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst elTabs = document.querySelectorAll( '.nav-tab' );\r\n-\t\telTabs.forEach( function( elTab ) {\r\n-\t\t\telTab.classList.remove( 'nav-tab-active' );\r\n-\t\t} );\r\n-\t\tel.classList.add( 'nav-tab-active' );\r\n-\t\tconst tabName = el.dataset.tab;\r\n-\t\tconst elAddonItems = elAddonsPage.querySelectorAll( '.lp-addon-item' );\r\n-\t\tconst elSearch = elAddonsPage.querySelector( '#lp-search-addons__input' );\r\n-\t\telSearch.value = '';\r\n-\r\n-\t\turlParams.set( 'tab', tabName );\r\n-\t\twindow.history.pushState( {}, '', `${ window.location.pathname }?${ urlParams.toString() }` );\r\n-\t\tlet totalItems = 0;\r\n-\t\telAddonItems.forEach( ( elAddonItem ) => {\r\n-\t\t\telAddonItem.classList.remove( 'search-not-found' );\r\n-\t\t\tif ( 'all' === tabName || elAddonItem.classList.contains( tabName ) ) {\r\n-\t\t\t\telAddonItem.classList.remove( 'hide' );\r\n-\t\t\t\ttotalItems++;\r\n-\t\t\t} else {\r\n-\t\t\t\telAddonItem.classList.add( 'hide' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tsetGridItems( totalItems );\r\n-\t}\r\n-} );\r\n-\r\n-\u002F*** Event search addons. ***\u002F\r\n-document.addEventListener( 'input', ( e ) => {\r\n-\tconst el = e.target;\r\n-\r\n-\tif ( 'lp-search-addons__input' === el.id ) {\r\n-\t\tconst keyword = el.value;\r\n-\t\tsearchAddons( keyword );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Events change input purchase code.\r\n-\tif ( el.classList.contains( 'enter-purchase-code' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst purchaseCode = el.value;\r\n-\t\tconst elItemPurchase = el.closest( '.lp-addon-item__purchase' );\r\n-\r\n-\t\tif ( elItemPurchase ) {\r\n-\t\t\tconst input = elItemPurchase.querySelector( 'input[name=purchase-code]' );\r\n-\t\t\tinput.value = purchaseCode;\r\n-\t\t}\r\n-\t}\r\n-} );\r\n+\u002F**\n+ * Script handle admin notices.\n+ *\n+ * @since 4.1.7.3.2\n+ * @version 1.0.1\n+ *\u002F\n+import API from '..\u002Fapi';\n+let elAddonsPage;\n+let dataHtml;\n+let dataAddons;\n+let elLPAddons;\n+const queryString = window.location.search;\n+const urlParams = new URLSearchParams( queryString );\n+const tab = urlParams.get( 'tab' );\n+let elNotifyActionWrapper;\n+const isHandling = [];\n+\n+\u002F\u002F API get list addons.\n+const getAddons = ( set = '' ) => {\n+\tconst params = tab ? `?tab=${ tab }` : `?${ set }`;\n+\tfetch( API.admin.apiAddons + params, {\n+\t\tmethod: 'GET',\n+\t\theaders: {\n+\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t},\n+\t} ).then( ( res ) =>\n+\t\tres.json()\n+\t).then( ( res ) => {\n+\t\t\u002F\u002F console.log(data);\n+\t\tconst { status, message, data } = res;\n+\t\tif ( status === 'success' ) {\n+\t\t\tdataHtml = data.html;\n+\t\t\tdataAddons = data.addons;\n+\t\t} else {\n+\t\t\tdataHtml = message;\n+\t\t}\n+\t} ).catch( ( err ) => {\n+\t\tconsole.log( err );\n+\t} );\n+};\n+\u002F\u002F API send action install, update, activate, deactivate.\n+const addonsAction = ( data, callBack ) => {\n+\tconst addonSlug = data.addon.slug;\n+\n+\tif ( isHandling.indexOf( addonSlug ) !== -1 ) {\n+\t\treturn;\n+\t}\n+\tisHandling.push( addonSlug );\n+\n+\tfetch( API.admin.apiAddonAction, {\n+\t\tmethod: 'POST',\n+\t\theaders: {\n+\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t},\n+\t\tbody: JSON.stringify( { ...data } ),\n+\t} ).then( ( res ) =>\n+\t\tres.json()\n+\t).then( ( res ) => {\n+\t\tconst indexAddonHanding = isHandling.indexOf( addonSlug );\n+\t\tif ( indexAddonHanding !== -1 ) {\n+\t\t\tisHandling.splice( indexAddonHanding, 1 );\n+\t\t}\n+\n+\t\tconst { status, message, data } = res;\n+\n+\t\tif ( callBack ) {\n+\t\t\tcallBack( status, message, data );\n+\t\t}\n+\n+\t\thandleNotify( status, message );\n+\t} ).catch( ( err ) => {\n+\t\thandleNotify( 'error', `error js: ${ err }` );\n+\t\tconsole.log( err );\n+\t} );\n+};\n+\u002F\u002F Show notify.\n+const handleNotify = ( status, message ) => {\n+\tconst elNotifyAction = elNotifyActionWrapper.querySelector( '.lp-notify-action' );\n+\tconst elNotifyActionNew = elNotifyAction.cloneNode( true );\n+\telNotifyActionNew.classList.remove( 'clone' );\n+\telNotifyActionWrapper.insertBefore( elNotifyActionNew, elNotifyActionWrapper[ 0 ] );\n+\tconst elSuccess = elNotifyActionNew.querySelector( `.${ elNotifyActionNew.classList.value }__success` );\n+\tconst elFailed = elNotifyActionNew.querySelector( `.${ elNotifyActionNew.classList.value }__error` );\n+\n+\tif ( status === 'success' ) {\n+\t\telSuccess.classList.add( 'show' );\n+\t\telSuccess.querySelector( '.message' ).innerHTML = message;\n+\t} else {\n+\t\telFailed.classList.add( 'show' );\n+\t\telFailed.querySelector( '.message' ).innerHTML = message;\n+\t}\n+\n+\telNotifyActionWrapper.classList.add( 'show' );\n+\tsetTimeout( () => {\n+\t\telNotifyActionNew.remove();\n+\n+\t\tconst elNotifyAction = elNotifyActionWrapper.querySelectorAll( '.lp-notify-action' );\n+\t\tif ( elNotifyAction.length === 1 ) {\n+\t\t\telNotifyActionWrapper.classList.remove( 'show' );\n+\t\t}\n+\t}, status === 'success' ? 3000 : 4000 );\n+};\n+\u002F\u002F Get addons when js loaded.\n+getAddons();\n+\u002F\u002F Search Addons.\n+const searchAddons = ( name ) => {\n+\tconst elAddonItems = elAddonsPage.querySelectorAll( '.lp-addon-item' );\n+\tlet totalItems = 0;\n+\n+\telAddonItems.forEach( ( elAddonItem ) => {\n+\t\tconst addonName = elAddonItem.querySelector( 'a' ).textContent;\n+\t\tif ( elAddonItem.classList.contains( 'hide' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( addonName.toLowerCase().includes( name.toLowerCase() ) ) {\n+\t\t\telAddonItem.classList.remove( 'search-not-found' );\n+\t\t\ttotalItems++;\n+\t\t} else {\n+\t\t\telAddonItem.classList.add( 'search-not-found' );\n+\t\t}\n+\t} );\n+\n+\tsetGridItems( totalItems );\n+};\n+\u002F\u002F Set grid style items.\n+const setGridItems = ( totalItems ) => {\n+\tif ( totalItems \u003C 4 ) {\n+\t\telLPAddons.classList.add( 'max-3-items' );\n+\t} else {\n+\t\telLPAddons.classList.remove( 'max-3-items' );\n+\t}\n+};\n+\u002F\u002F Check element loaded and data API returned.\n+const loadElData = setInterval( () => {\n+\tif ( ! elAddonsPage || ! elNotifyActionWrapper ) {\n+\t\telAddonsPage = document.querySelector( '.lp-addons-page' );\n+\t\telNotifyActionWrapper = document.querySelector( '.lp-notify-action-wrapper' );\n+\t} else if ( dataHtml && elAddonsPage && elNotifyActionWrapper ) {\n+\t\telAddonsPage.innerHTML = dataHtml;\n+\t\telLPAddons = elAddonsPage.querySelector( '#lp-addons' );\n+\t\tconst elNavTabWrapper = document.querySelector( '.lp-nav-tab-wrapper' );\n+\t\tif ( ! elNavTabWrapper ) {\n+\t\t\tclearInterval( loadElData );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elNavTabWrapperClone = elNavTabWrapper.cloneNode( true );\n+\t\telAddonsPage.insertBefore( elNavTabWrapperClone, elAddonsPage.children[ 0 ] );\n+\t\telNavTabWrapperClone.style.display = 'flex';\n+\t\telNavTabWrapper.remove();\n+\t\tconst elNavActive = elNavTabWrapperClone.querySelector( '.nav-tab.nav-tab-active span' );\n+\t\tsetGridItems( parseInt( elNavActive.textContent ) );\n+\n+\t\tclearInterval( loadElData );\n+\t}\n+}, 1 );\n+\n+document.addEventListener( 'DOMContentLoaded', ( e ) => {\n+} );\n+\n+\u002F*** Events ***\u002F\n+document.addEventListener( 'click', ( e ) => {\n+\tlet el = e.target;\n+\tconst tagName = el.tagName.toLowerCase();\n+\tif ( tagName === 'span' ) {\n+\t\te.preventDefault();\n+\t\tconst elBtnAction = el.closest( '.btn-addon-action' );\n+\t\tif ( elBtnAction ) {\n+\t\t\telBtnAction.click();\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Events actions: activate, deactivate.\n+\t\u002F*if ( el.classList.contains( 'lp-toggle-switch-label' ) ) {\n+\t\t\u002F\u002Fe.preventDefault();\n+\n+\t\tconst elAddonItem = el.closest( '.lp-addon-item' );\n+\t\tconst idLabel = el.getAttribute( 'for' );\n+\t\tconst elInput = document.querySelector( `#${ idLabel }` );\n+\t\tconst action = elInput.getAttribute( 'data-action' );\n+\t\tconst addon = dataAddons[ elAddonItem.dataset.slug ];\n+\t\tconst addonSlug = addon.slug;\n+\t\tconst parent = el.closest( '.lp-toggle-switch' );\n+\t\tconst label = parent.querySelector( `label[for=${ idLabel }]` );\n+\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\n+\t\tdashicons.style.display = 'inline-block';\n+\t\tlabel.style.display = 'none';\n+\t\tconst data = { action, addon };\n+\t\taddonsAction( data, function( status, message, data ) {\n+\t\t\tconst elAddon = document.querySelector( `#${ addonSlug }` );\n+\t\t\tif ( elAddon ) {\n+\t\t\t\tconst parent = elAddon.closest( '.lp-toggle-switch' );\n+\t\t\t\tif ( parent ) {\n+\t\t\t\t\tconst dashicons = parent.querySelector( '.dashicons-update' );\n+\t\t\t\t\tdashicons.style.display = 'none';\n+\t\t\t\t\tif ( action === 'deactivate' ) {\n+\t\t\t\t\t\telAddon.setAttribute( 'data-action', 'activate' );\n+\t\t\t\t\t} else if ( action === 'activate' ) {\n+\t\t\t\t\t\telAddon.setAttribute( 'data-action', 'deactivate' );\n+\t\t\t\t\t}\n+\t\t\t\t\tconst label = parent.querySelector( `label[for=${ addonSlug }]` );\n+\t\t\t\t\tlabel.style.display = 'inline-flex';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( status === 'success' ) {\n+\t\t\t\tif ( action === 'deactivate' ) {\n+\t\t\t\t\telAddonItem.classList.remove( 'activated' );\n+\t\t\t\t}\n+\t\t\t\tif ( action === 'activate' ) {\n+\t\t\t\t\telAddonItem.classList.add( 'activated' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t}*\u002F\n+\n+\t\u002F\u002F Events actions: install, update, delete.\n+\tif ( el.closest( '.btn-addon-action' ) ) {\n+\t\tel = el.closest( '.btn-addon-action' );\n+\t\te.preventDefault();\n+\t\tel.classList.add( 'handling' );\n+\t\tlet purchaseCode = '';\n+\t\tconst elAddonItem = el.closest( '.lp-addon-item' );\n+\t\tconst addon = dataAddons[ elAddonItem.dataset.slug ];\n+\t\tconst action = el.dataset.action;\n+\t\tconst elItemPurchase = elAddonItem.querySelector( '.lp-addon-item__purchase' );\n+\t\t\u002F\u002Fconst elToggleSwitchInput = elAddonItem.querySelector( '.lp-toggle-switch-input' );\n+\n+\t\tif ( action === 'purchase' ) {\n+\t\t\telItemPurchase.style.display = 'block';\n+\t\t\telItemPurchase.querySelector( '.purchase-install' ).style.display = 'flex';\n+\t\t\treturn;\n+\t\t} else if ( action === 'update-purchase-code' ) {\n+\t\t\telItemPurchase.querySelector( '.purchase-update' ).style.display = 'flex';\n+\t\t\telItemPurchase.style.display = 'block';\n+\t\t\treturn;\n+\t\t} else if ( action === 'buy' ) {\n+\t\t\tconst link = el.dataset.link;\n+\t\t\twindow.open( link, '_blank' );\n+\t\t\treturn;\n+\t\t} else if ( action === 'cancel' ) {\n+\t\t\telItemPurchase.style.display = 'none';\n+\t\t\treturn;\n+\t\t} else if ( action === 'install' ) {\n+\t\t\tif ( el.dataset.link ) {\n+\t\t\t\tel.classList.remove( 'handling' );\n+\t\t\t\tconst link = el.dataset.link;\n+\t\t\t\twindow.open( link, '_blank' );\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Send request to server.\n+\t\tif ( elItemPurchase ) {\n+\t\t\tpurchaseCode = elItemPurchase.querySelector( 'input[name=purchase-code]' ).value;\n+\t\t}\n+\n+\t\tconst data = { purchase_code: purchaseCode, action, addon };\n+\t\taddonsAction( data, function( status, message, data ) {\n+\t\t\tif ( status === 'success' ) {\n+\t\t\t\tif ( action === 'install' ) {\n+\t\t\t\t\telAddonItem.classList.add( 'installed', 'activated' );\n+\t\t\t\t\telAddonItem.classList.remove( 'not_installed' );\n+\t\t\t\t\telItemPurchase.style.display = 'none';\n+\t\t\t\t\t\u002F*elToggleSwitchInput.setAttribute( 'checked', 'checked' );\n+\t\t\t\t\telToggleSwitchInput.setAttribute( 'data-action', 'deactivate' );*\u002F\n+\t\t\t\t\tconst elNavInstalled = document.querySelector( '.nav-tab[data-tab=installed] span' );\n+\t\t\t\t\telNavInstalled.textContent = parseInt( elNavInstalled.textContent ) + 1;\n+\t\t\t\t\tconst elNavNoInstalled = document.querySelector( '.nav-tab[data-tab=not_installed] span' );\n+\t\t\t\t\telNavNoInstalled.textContent = parseInt( elNavNoInstalled.textContent ) - 1;\n+\t\t\t\t\telItemPurchase.querySelector( '.purchase-install' ).style.display = 'none';\n+\t\t\t\t\telItemPurchase.querySelector( '.purchase-update' ).querySelector( '.enter-purchase-code' ).value = purchaseCode;\n+\t\t\t\t} else if ( action === 'update' ) {\n+\t\t\t\t\tconst elAddonVersionCurrent = elAddonItem.querySelector( '.addon-version-current' );\n+\t\t\t\t\telAddonVersionCurrent.innerHTML = addon.version;\n+\t\t\t\t\telAddonItem.classList.remove( 'update' );\n+\t\t\t\t} else if ( action === 'activate' ) {\n+\t\t\t\t\telAddonItem.classList.add( 'activated' );\n+\t\t\t\t} else if ( action === 'deactivate' ) {\n+\t\t\t\t\telAddonItem.classList.remove( 'activated' );\n+\t\t\t\t} else if ( action === 'update-purchase' ) {\n+\t\t\t\t\telItemPurchase.style.display = 'none';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tel.classList.remove( 'handling' );\n+\t\t} );\n+\t}\n+\n+\tif ( el.classList.contains( 'nav-tab' ) ) {\n+\t\te.preventDefault();\n+\t\tconst elTabs = document.querySelectorAll( '.nav-tab' );\n+\t\telTabs.forEach( function( elTab ) {\n+\t\t\telTab.classList.remove( 'nav-tab-active' );\n+\t\t} );\n+\t\tel.classList.add( 'nav-tab-active' );\n+\t\tconst tabName = el.dataset.tab;\n+\t\tconst elAddonItems = elAddonsPage.querySelectorAll( '.lp-addon-item' );\n+\t\tconst elSearch = elAddonsPage.querySelector( '#lp-search-addons__input' );\n+\t\telSearch.value = '';\n+\n+\t\turlParams.set( 'tab', tabName );\n+\t\twindow.history.pushState( {}, '', `${ window.location.pathname }?${ urlParams.toString() }` );\n+\t\tlet totalItems = 0;\n+\t\telAddonItems.forEach( ( elAddonItem ) => {\n+\t\t\telAddonItem.classList.remove( 'search-not-found' );\n+\t\t\tif ( 'all' === tabName || elAddonItem.classList.contains( tabName ) ) {\n+\t\t\t\telAddonItem.classList.remove( 'hide' );\n+\t\t\t\ttotalItems++;\n+\t\t\t} else {\n+\t\t\t\telAddonItem.classList.add( 'hide' );\n+\t\t\t}\n+\t\t} );\n+\n+\t\tsetGridItems( totalItems );\n+\t}\n+} );\n+\n+\u002F*** Event search addons. ***\u002F\n+document.addEventListener( 'input', ( e ) => {\n+\tconst el = e.target;\n+\n+\tif ( 'lp-search-addons__input' === el.id ) {\n+\t\tconst keyword = el.value;\n+\t\tsearchAddons( keyword );\n+\t}\n+\n+\t\u002F\u002F Events change input purchase code.\n+\tif ( el.classList.contains( 'enter-purchase-code' ) ) {\n+\t\te.preventDefault();\n+\t\tconst purchaseCode = el.value;\n+\t\tconst elItemPurchase = el.closest( '.lp-addon-item__purchase' );\n+\n+\t\tif ( elItemPurchase ) {\n+\t\t\tconst input = elItemPurchase.querySelector( 'input[name=purchase-code]' );\n+\t\t\tinput.value = purchaseCode;\n+\t\t}\n+\t}\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-courses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-courses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-courses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-courses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,12 +1,12 @@\n-\u002F**\r\n- * Admin Courses JS\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-import { CreateCourseViaAI } from '.\u002Fcourses\u002Fgenerate-with-ai.js';\r\n-import { ViewStudentsModal } from '.\u002Fcourses\u002Fview-students-modal.js';\r\n-\r\n-new CreateCourseViaAI();\r\n-new ViewStudentsModal();\r\n+\u002F**\n+ * Admin Courses JS\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.1\n+ *\u002F\n+\n+import { CreateCourseViaAI } from '.\u002Fcourses\u002Fgenerate-with-ai.js';\n+import { ViewStudentsModal } from '.\u002Fcourses\u002Fview-students-modal.js';\n+\n+new CreateCourseViaAI();\n+new ViewStudentsModal();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,255 +1,255 @@\n-import { initElsTomSelect, searchUserOnListPost } from '.\u002Finit-tom-select.js';\r\n-import { AdminUtilsFunctions, Api, Utils } from '.\u002Futils-admin.js';\r\n-\r\n-( function( $ ) {\r\n-\t\u002F**\r\n-\t * Callback event for button to creating pages inside error message.\r\n-\t *\r\n-\t * @param {Event} e\r\n-\t *\u002F\r\n-\r\n-\tconst createPages = function createPages( e ) {\r\n-\t\tconst $button = $( this ).addClass( 'disabled' );\r\n-\t\te.preventDefault();\r\n-\t\t$.post( {\r\n-\t\t\turl: $button.attr( 'href' ),\r\n-\t\t\tdata: {\r\n-\t\t\t\t'lp-ajax': 'create-pages',\r\n-\t\t\t},\r\n-\t\t\tdataType: 'text',\r\n-\t\t\tsuccess: function success( res ) {\r\n-\t\t\t\tconst $message = $button.closest( '.lp-notice' ).html( '\u003Cp>' + res + '\u003C\u002Fp>' );\r\n-\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t$message.fadeOut();\r\n-\t\t\t\t}, 2000 );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst lpMetaboxFileInput = () => {\r\n-\t\t$( '.lp-meta-box__file' ).each( ( i, element ) => {\r\n-\t\t\tlet lpImageFrame;\r\n-\r\n-\t\t\tconst imageGalleryIds = $( element ).find( '.lp-meta-box__file_input' );\r\n-\t\t\tconst listImages = $( element ).find( '.lp-meta-box__file_list' );\r\n-\t\t\tconst btnUpload = $( element ).find( '.btn-upload' );\r\n-\t\t\tconst isMultil = !! $( element ).data( 'multil' );\r\n-\r\n-\t\t\t$( btnUpload ).on( 'click', ( event ) => {\r\n-\t\t\t\tevent.preventDefault();\r\n-\r\n-\t\t\t\tif ( lpImageFrame ) {\r\n-\t\t\t\t\tlpImageFrame.open();\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpImageFrame = wp.media( {\r\n-\t\t\t\t\tstates: [\r\n-\t\t\t\t\t\tnew wp.media.controller.Library( {\r\n-\t\t\t\t\t\t\tfilterable: 'all',\r\n-\t\t\t\t\t\t\tmultiple: isMultil,\r\n-\t\t\t\t\t\t} ),\r\n-\t\t\t\t\t],\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tlpImageFrame.on( 'select', function() {\r\n-\t\t\t\t\tconst selection = lpImageFrame.state().get( 'selection' );\r\n-\t\t\t\t\tlet attachmentIds = imageGalleryIds.val();\r\n-\r\n-\t\t\t\t\tselection.forEach( function( attachment ) {\r\n-\t\t\t\t\t\tattachment = attachment.toJSON();\r\n-\r\n-\t\t\t\t\t\tif ( attachment.id ) {\r\n-\t\t\t\t\t\t\tif ( ! isMultil ) {\r\n-\t\t\t\t\t\t\t\tattachmentIds = attachment.id;\r\n-\t\t\t\t\t\t\t\tlistImages.empty();\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tattachmentIds = attachmentIds ? attachmentIds + ',' + attachment.id : attachment.id;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tlistImages.append(\r\n-\t\t\t\t\t\t\t\t'\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' + attachment.id + '\">\u003Cimg class=\"is_file\" src=\"' + attachment.icon +\r\n-\t\t\t\t\t\t'\" \u002F>\u003Cspan>' + attachment.filename + '\u003C\u002Fspan>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tdelImage();\r\n-\r\n-\t\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tlpImageFrame.open();\r\n-\t\t\t} );\r\n-\r\n-\t\t\tif ( isMultil ) {\r\n-\t\t\t\tlistImages.sortable( {\r\n-\t\t\t\t\titems: 'li.image',\r\n-\t\t\t\t\tcursor: 'move',\r\n-\t\t\t\t\tscrollSensitivity: 40,\r\n-\t\t\t\t\tforcePlaceholderSize: true,\r\n-\t\t\t\t\tforceHelperSize: false,\r\n-\t\t\t\t\thelper: 'clone',\r\n-\t\t\t\t\topacity: 0.65,\r\n-\t\t\t\t\tplaceholder: 'lp-metabox-sortable-placeholder',\r\n-\t\t\t\t\tstart( event, ui ) {\r\n-\t\t\t\t\t\tui.item.css( 'background-color', '#f6f6f6' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tstop( event, ui ) {\r\n-\t\t\t\t\t\tui.item.removeAttr( 'style' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdate() {\r\n-\t\t\t\t\t\tlet attachmentIds = '';\r\n-\r\n-\t\t\t\t\t\tlistImages.find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\r\n-\t\t\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\r\n-\t\t\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\r\n-\t\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\t\tdelImage();\r\n-\r\n-\t\t\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst delImage = () => {\r\n-\t\t\t\t$( listImages ).find( 'li.image' ).each( ( i, ele ) => {\r\n-\t\t\t\t\tconst del = $( ele ).find( 'a.delete' );\r\n-\r\n-\t\t\t\t\tdel.on( 'click', function() {\r\n-\t\t\t\t\t\t$( ele ).remove();\r\n-\r\n-\t\t\t\t\t\tif ( isMultil ) {\r\n-\t\t\t\t\t\t\tlet attachmentIds = '';\r\n-\r\n-\t\t\t\t\t\t\t$( listImages ).find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\r\n-\t\t\t\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\r\n-\t\t\t\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\r\n-\t\t\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\timageGalleryIds.val( '' );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t} );\r\n-\t\t\t};\r\n-\r\n-\t\t\tdelImage();\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst onReady = function onReady() {\r\n-\t\tlpMetaboxFileInput();\r\n-\t\t\u002F\u002FupdateDb();\r\n-\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\r\n-\t\t\u002F\u002F$( '.learn-press-advertisement-slider' ).LP( 'Advertisement', 'a', 's' ).appendTo( $( '#wpbody-content' ) );\r\n-\t\t\u002F\u002F$( '.learn-press-toggle-item-preview' ).on( 'change', updateItemPreview );\r\n-\t\t$( '.learn-press-tip' ).LP( 'QuickTip' ); \u002F\u002F$('.learn-press-tabs').LP('AdminTab');\r\n-\r\n-\t\t$( document ).on( 'click', '#learn-press-create-pages', createPages )\r\n-\t\t\t\u002F\u002F.on( 'click', '.lp-upgrade-notice .close-notice', hideUpgradeMessage )\r\n-\t\t\t\u002F\u002F.on( 'click', '.plugin-action-buttons a', pluginActions )\r\n-\t\t\t\u002F\u002F.on( 'click', '[data-remove-confirm]', preventDefault )\r\n-\t\t\t.on( 'mousedown', '.lp-sortable-handle', function( e ) {\r\n-\t\t\t\t$( 'html, body' ).addClass( 'lp-item-moving' );\r\n-\t\t\t\t$( e.target ).closest( '.lp-sortable-handle' ).css( 'cursor', 'inherit' );\r\n-\t\t\t} ).on( 'mouseup', function( e ) {\r\n-\t\t\t\t$( 'html, body' ).removeClass( 'lp-item-moving' );\r\n-\t\t\t\t$( '.lp-sortable-handle' ).css( 'cursor', '' );\r\n-\t\t\t} );\r\n-\r\n-\t\t\u002F\u002F Scroll to Passing grade when click link final Quiz in Course Setting.\r\n-\t\tif ( window.location.hash ) {\r\n-\t\t\tconst hash = window.location.hash;\r\n-\r\n-\t\t\tif ( hash === '#_lp_passing_grade' ) {\r\n-\t\t\t\tconst ele = document.querySelector( hash );\r\n-\r\n-\t\t\t\t$( 'html, body' ).animate( {\r\n-\t\t\t\t\tscrollTop: $( hash ).offset().top,\r\n-\t\t\t\t}, 900, 'swing' );\r\n-\r\n-\t\t\t\tele.parentNode.style.border = '2px solid orangered';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Show\u002Fhide meta-box field with type checkbox\r\n-\t\t\u002F*$( 'input' ).on( 'click', function( e ) {\r\n-\t\t\tconst el = $( e.target );\r\n-\t\t\tif ( ! el.length ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst id = el.attr( 'id' );\r\n-\t\t\tif ( ! id ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst classHide = id.replace( 'learn_press_', '' );\r\n-\t\t\tconst elHide = $( `.show_if_${ classHide }` );\r\n-\r\n-\t\t\tif ( el.is( ':checked' ) ) {\r\n-\t\t\t\telHide.show();\r\n-\t\t\t} else {\r\n-\t\t\t\telHide.hide();\r\n-\t\t\t}\r\n-\t\t} );*\u002F\r\n-\t};\r\n-\r\n-\t$( document ).ready( onReady );\r\n-}( jQuery ) );\r\n-\r\n-const showHideOptionsDependency = ( e, target ) => {\r\n-\tif ( target.tagName === 'INPUT' ) {\r\n-\t\tif ( target.closest( '.forminp ' ) ) {\r\n-\t\t\tconst nameInput = target.name;\r\n-\t\t\tconst classDependency = nameInput.replace( 'learn_press_', '' );\r\n-\r\n-\t\t\tconst elClassDependency = document.querySelectorAll( `.show_if_${ classDependency }` );\r\n-\t\t\tif ( elClassDependency ) {\r\n-\t\t\t\telClassDependency.forEach( ( el ) => {\r\n-\t\t\t\t\tel.classList.toggle( 'lp-option-disabled' );\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} else if ( target.closest( '.lp-meta-box' ) ) {\r\n-\t\t\tconst elLPMetaBox = target.closest( '.lp-meta-box' );\r\n-\t\t\tconst nameInput = target.name;\r\n-\r\n-\t\t\tconst elClassDependency = elLPMetaBox.querySelectorAll( `[data-dependency=\"${ nameInput }\"]` );\r\n-\t\t\tif ( elClassDependency ) {\r\n-\t\t\t\telClassDependency.forEach( ( el ) => {\r\n-\t\t\t\t\tel.classList.toggle( 'lp-option-disabled' );\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'click', ( e ) => {\r\n-\tconst target = e.target;\r\n-\tshowHideOptionsDependency( e, target );\r\n-\t\u002F\u002F For case click add on Widgets of WordPress.\r\n-\tinitElsTomSelect();\r\n-} );\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', () => {\r\n-\tsearchUserOnListPost();\r\n-\t\u002F\u002F Sure that the TomSelect is loaded if listen can't find elements.\r\n-\tinitElsTomSelect();\r\n-} );\r\n-\r\n-\u002F\u002F Listen element select created on DOM.\r\n-Utils.lpOnElementReady( 'select.lp-tom-select', ( e ) => {\r\n-\tinitElsTomSelect();\r\n-} );\r\n-\r\n-Utils.lpOnElementReady( '#posts-filter', ( e ) => {\r\n-\tsearchUserOnListPost();\r\n-} );\r\n-\r\n-window.lpFindTomSelect = initElsTomSelect;\r\n+import { initElsTomSelect, searchUserOnListPost } from '.\u002Finit-tom-select.js';\n+import { AdminUtilsFunctions, Api, Utils } from '.\u002Futils-admin.js';\n+\n+( function( $ ) {\n+\t\u002F**\n+\t * Callback event for button to creating pages inside error message.\n+\t *\n+\t * @param {Event} e\n+\t *\u002F\n+\n+\tconst createPages = function createPages( e ) {\n+\t\tconst $button = $( this ).addClass( 'disabled' );\n+\t\te.preventDefault();\n+\t\t$.post( {\n+\t\t\turl: $button.attr( 'href' ),\n+\t\t\tdata: {\n+\t\t\t\t'lp-ajax': 'create-pages',\n+\t\t\t},\n+\t\t\tdataType: 'text',\n+\t\t\tsuccess: function success( res ) {\n+\t\t\t\tconst $message = $button.closest( '.lp-notice' ).html( '\u003Cp>' + res + '\u003C\u002Fp>' );\n+\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t$message.fadeOut();\n+\t\t\t\t}, 2000 );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst lpMetaboxFileInput = () => {\n+\t\t$( '.lp-meta-box__file' ).each( ( i, element ) => {\n+\t\t\tlet lpImageFrame;\n+\n+\t\t\tconst imageGalleryIds = $( element ).find( '.lp-meta-box__file_input' );\n+\t\t\tconst listImages = $( element ).find( '.lp-meta-box__file_list' );\n+\t\t\tconst btnUpload = $( element ).find( '.btn-upload' );\n+\t\t\tconst isMultil = !! $( element ).data( 'multil' );\n+\n+\t\t\t$( btnUpload ).on( 'click', ( event ) => {\n+\t\t\t\tevent.preventDefault();\n+\n+\t\t\t\tif ( lpImageFrame ) {\n+\t\t\t\t\tlpImageFrame.open();\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tlpImageFrame = wp.media( {\n+\t\t\t\t\tstates: [\n+\t\t\t\t\t\tnew wp.media.controller.Library( {\n+\t\t\t\t\t\t\tfilterable: 'all',\n+\t\t\t\t\t\t\tmultiple: isMultil,\n+\t\t\t\t\t\t} ),\n+\t\t\t\t\t],\n+\t\t\t\t} );\n+\n+\t\t\t\tlpImageFrame.on( 'select', function() {\n+\t\t\t\t\tconst selection = lpImageFrame.state().get( 'selection' );\n+\t\t\t\t\tlet attachmentIds = imageGalleryIds.val();\n+\n+\t\t\t\t\tselection.forEach( function( attachment ) {\n+\t\t\t\t\t\tattachment = attachment.toJSON();\n+\n+\t\t\t\t\t\tif ( attachment.id ) {\n+\t\t\t\t\t\t\tif ( ! isMultil ) {\n+\t\t\t\t\t\t\t\tattachmentIds = attachment.id;\n+\t\t\t\t\t\t\t\tlistImages.empty();\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tattachmentIds = attachmentIds ? attachmentIds + ',' + attachment.id : attachment.id;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tlistImages.append(\n+\t\t\t\t\t\t\t\t'\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' + attachment.id + '\">\u003Cimg class=\"is_file\" src=\"' + attachment.icon +\n+\t\t\t\t\t\t'\" \u002F>\u003Cspan>' + attachment.filename + '\u003C\u002Fspan>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tdelImage();\n+\n+\t\t\t\t\timageGalleryIds.val( attachmentIds );\n+\t\t\t\t} );\n+\n+\t\t\t\tlpImageFrame.open();\n+\t\t\t} );\n+\n+\t\t\tif ( isMultil ) {\n+\t\t\t\tlistImages.sortable( {\n+\t\t\t\t\titems: 'li.image',\n+\t\t\t\t\tcursor: 'move',\n+\t\t\t\t\tscrollSensitivity: 40,\n+\t\t\t\t\tforcePlaceholderSize: true,\n+\t\t\t\t\tforceHelperSize: false,\n+\t\t\t\t\thelper: 'clone',\n+\t\t\t\t\topacity: 0.65,\n+\t\t\t\t\tplaceholder: 'lp-metabox-sortable-placeholder',\n+\t\t\t\t\tstart( event, ui ) {\n+\t\t\t\t\t\tui.item.css( 'background-color', '#f6f6f6' );\n+\t\t\t\t\t},\n+\t\t\t\t\tstop( event, ui ) {\n+\t\t\t\t\t\tui.item.removeAttr( 'style' );\n+\t\t\t\t\t},\n+\t\t\t\t\tupdate() {\n+\t\t\t\t\t\tlet attachmentIds = '';\n+\n+\t\t\t\t\t\tlistImages.find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\n+\t\t\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\n+\t\t\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\n+\t\t\t\t\t\t} );\n+\n+\t\t\t\t\t\tdelImage();\n+\n+\t\t\t\t\t\timageGalleryIds.val( attachmentIds );\n+\t\t\t\t\t},\n+\t\t\t\t} );\n+\t\t\t}\n+\n+\t\t\tconst delImage = () => {\n+\t\t\t\t$( listImages ).find( 'li.image' ).each( ( i, ele ) => {\n+\t\t\t\t\tconst del = $( ele ).find( 'a.delete' );\n+\n+\t\t\t\t\tdel.on( 'click', function() {\n+\t\t\t\t\t\t$( ele ).remove();\n+\n+\t\t\t\t\t\tif ( isMultil ) {\n+\t\t\t\t\t\t\tlet attachmentIds = '';\n+\n+\t\t\t\t\t\t\t$( listImages ).find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\n+\t\t\t\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\n+\t\t\t\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\n+\t\t\t\t\t\t\t} );\n+\n+\t\t\t\t\t\t\timageGalleryIds.val( attachmentIds );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\timageGalleryIds.val( '' );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t} );\n+\t\t\t\t} );\n+\t\t\t};\n+\n+\t\t\tdelImage();\n+\t\t} );\n+\t};\n+\n+\tconst onReady = function onReady() {\n+\t\tlpMetaboxFileInput();\n+\t\t\u002F\u002FupdateDb();\n+\t\t$( '.learn-press-dropdown-pages' ).LP( 'DropdownPages' );\n+\t\t\u002F\u002F$( '.learn-press-advertisement-slider' ).LP( 'Advertisement', 'a', 's' ).appendTo( $( '#wpbody-content' ) );\n+\t\t\u002F\u002F$( '.learn-press-toggle-item-preview' ).on( 'change', updateItemPreview );\n+\t\t$( '.learn-press-tip' ).LP( 'QuickTip' ); \u002F\u002F$('.learn-press-tabs').LP('AdminTab');\n+\n+\t\t$( document ).on( 'click', '#learn-press-create-pages', createPages )\n+\t\t\t\u002F\u002F.on( 'click', '.lp-upgrade-notice .close-notice', hideUpgradeMessage )\n+\t\t\t\u002F\u002F.on( 'click', '.plugin-action-buttons a', pluginActions )\n+\t\t\t\u002F\u002F.on( 'click', '[data-remove-confirm]', preventDefault )\n+\t\t\t.on( 'mousedown', '.lp-sortable-handle', function( e ) {\n+\t\t\t\t$( 'html, body' ).addClass( 'lp-item-moving' );\n+\t\t\t\t$( e.target ).closest( '.lp-sortable-handle' ).css( 'cursor', 'inherit' );\n+\t\t\t} ).on( 'mouseup', function( e ) {\n+\t\t\t\t$( 'html, body' ).removeClass( 'lp-item-moving' );\n+\t\t\t\t$( '.lp-sortable-handle' ).css( 'cursor', '' );\n+\t\t\t} );\n+\n+\t\t\u002F\u002F Scroll to Passing grade when click link final Quiz in Course Setting.\n+\t\tif ( window.location.hash ) {\n+\t\t\tconst hash = window.location.hash;\n+\n+\t\t\tif ( hash === '#_lp_passing_grade' ) {\n+\t\t\t\tconst ele = document.querySelector( hash );\n+\n+\t\t\t\t$( 'html, body' ).animate( {\n+\t\t\t\t\tscrollTop: $( hash ).offset().top,\n+\t\t\t\t}, 900, 'swing' );\n+\n+\t\t\t\tele.parentNode.style.border = '2px solid orangered';\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Show\u002Fhide meta-box field with type checkbox\n+\t\t\u002F*$( 'input' ).on( 'click', function( e ) {\n+\t\t\tconst el = $( e.target );\n+\t\t\tif ( ! el.length ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst id = el.attr( 'id' );\n+\t\t\tif ( ! id ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst classHide = id.replace( 'learn_press_', '' );\n+\t\t\tconst elHide = $( `.show_if_${ classHide }` );\n+\n+\t\t\tif ( el.is( ':checked' ) ) {\n+\t\t\t\telHide.show();\n+\t\t\t} else {\n+\t\t\t\telHide.hide();\n+\t\t\t}\n+\t\t} );*\u002F\n+\t};\n+\n+\t$( document ).ready( onReady );\n+}( jQuery ) );\n+\n+const showHideOptionsDependency = ( e, target ) => {\n+\tif ( target.tagName === 'INPUT' ) {\n+\t\tif ( target.closest( '.forminp ' ) ) {\n+\t\t\tconst nameInput = target.name;\n+\t\t\tconst classDependency = nameInput.replace( 'learn_press_', '' );\n+\n+\t\t\tconst elClassDependency = document.querySelectorAll( `.show_if_${ classDependency }` );\n+\t\t\tif ( elClassDependency ) {\n+\t\t\t\telClassDependency.forEach( ( el ) => {\n+\t\t\t\t\tel.classList.toggle( 'lp-option-disabled' );\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} else if ( target.closest( '.lp-meta-box' ) ) {\n+\t\t\tconst elLPMetaBox = target.closest( '.lp-meta-box' );\n+\t\t\tconst nameInput = target.name;\n+\n+\t\t\tconst elClassDependency = elLPMetaBox.querySelectorAll( `[data-dependency=\"${ nameInput }\"]` );\n+\t\t\tif ( elClassDependency ) {\n+\t\t\t\telClassDependency.forEach( ( el ) => {\n+\t\t\t\t\tel.classList.toggle( 'lp-option-disabled' );\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t}\n+\t}\n+};\n+\n+\u002F\u002F Events\n+document.addEventListener( 'click', ( e ) => {\n+\tconst target = e.target;\n+\tshowHideOptionsDependency( e, target );\n+\t\u002F\u002F For case click add on Widgets of WordPress.\n+\tinitElsTomSelect();\n+} );\n+\n+document.addEventListener( 'DOMContentLoaded', () => {\n+\tsearchUserOnListPost();\n+\t\u002F\u002F Sure that the TomSelect is loaded if listen can't find elements.\n+\tinitElsTomSelect();\n+} );\n+\n+\u002F\u002F Listen element select created on DOM.\n+Utils.lpOnElementReady( 'select.lp-tom-select', ( e ) => {\n+\tinitElsTomSelect();\n+} );\n+\n+Utils.lpOnElementReady( '#posts-filter', ( e ) => {\n+\tsearchUserOnListPost();\n+} );\n+\n+window.lpFindTomSelect = initElsTomSelect;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-notices.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-notices.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-notices.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-notices.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u002F**\r\n- * Script handle admin notices.\r\n- *\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.2\r\n- *\u002F\r\n-import { lpOnElementReady } from '..\u002Futils.js';\r\n-import API from '..\u002Fapi.js';\r\n-let elLPAdminNotices = null;\r\n-let dataHtml = null;\r\n-const queryString = window.location.search;\r\n-const urlParams = new URLSearchParams( queryString );\r\n-const tab = urlParams.get( 'tab' );\r\n-\r\n-const notifyAddonsNewVersion = () => {\r\n-\ttry {\r\n-\t\tconst elAdminMenu = document.querySelector( '#adminmenu' );\r\n-\t\tif ( ! elAdminMenu ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elTabLP = elAdminMenu.querySelector( '#toplevel_page_learn_press' );\r\n-\t\tif ( ! elTabLP ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst elTabLPName = elTabLP.querySelector( '.wp-menu-name' );\r\n-\t\tif ( ! elTabLPName ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst elAddonsNewVerTotal = document.querySelector( 'input[name=lp-addons-new-version-totals]' );\r\n-\t\tif ( ! elAddonsNewVerTotal ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst htmlNotifyLP = `\u003Cspan class=\"tab-lp-admin-notice\">\u003C\u002Fspan>`;\r\n-\t\telTabLPName.insertAdjacentHTML( 'beforeend', htmlNotifyLP );\r\n-\t\tconst elTabLPAddons = elTabLP.querySelector( 'a[href=\"admin.php?page=learn-press-addons\"]' );\r\n-\t\tif ( ! elTabLPAddons ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst total = elAddonsNewVerTotal.value;\r\n-\t\tconst html = `\u003Cspan style=\"margin-left: 5px\" class=\"update-plugins\">${ total }\u003C\u002Fspan>`;\r\n-\t\telTabLPAddons.setAttribute( 'href', 'admin.php?page=learn-press-addons&tab=update' );\r\n-\t\telTabLPAddons.insertAdjacentHTML( 'beforeend', html );\r\n-\t} catch ( e ) {\r\n-\t\tconsole.log( e );\r\n-\t}\r\n-};\r\n-\r\n-const callAdminNotices = ( set = '' ) => {\r\n-\tif ( ! lpGlobalSettings.is_admin ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tlet params = tab ? `?tab=${ tab }` : '';\r\n-\tparams += set ? ( tab ? '&' : '?' ) + `${ set }` : '';\r\n-\r\n-\tfetch( API.admin.apiAdminNotice + params, {\r\n-\t\tmethod: 'POST',\r\n-\t\theaders: {\r\n-\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\r\n-\t\t},\r\n-\t} ).then( ( res ) =>\r\n-\t\tres.json()\r\n-\t).then( ( res ) => {\r\n-\t\t\u002F\u002F console.log(data);\r\n-\r\n-\t\tconst { status, message, data } = res;\r\n-\t\tif ( status === 'success' ) {\r\n-\t\t\tif ( 'Dismissed!' !== message ) {\r\n-\t\t\t\tdataHtml = data.content;\r\n-\r\n-\t\t\t\tif ( dataHtml.length === 0 ) {\r\n-\t\t\t\t\telLPAdminNotices.style.display = 'none';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telLPAdminNotices.innerHTML = dataHtml;\r\n-\t\t\t\t\telLPAdminNotices.style.display = 'block';\r\n-\t\t\t\t\t\u002F\u002F Handle notify addons new version.\r\n-\t\t\t\t\tnotifyAddonsNewVersion();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tdataHtml = message;\r\n-\t\t}\r\n-\t} ).catch( ( err ) => {\r\n-\t\tconsole.log( err );\r\n-\t} );\r\n-};\r\n-\r\n-\u002F\u002F Listen element ready\r\n-lpOnElementReady( '.lp-admin-notices', () => {\r\n-\telLPAdminNotices = document.querySelector( '.lp-admin-notices' );\r\n-\tcallAdminNotices();\r\n-} );\r\n-\r\n-\u002F*** Events ***\u002F\r\n-document.addEventListener( 'click', ( e ) => {\r\n-\tconst el = e.target;\r\n-\r\n-\tif ( el.classList.contains( 'btn-lp-notice-dismiss' ) ) {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\t\u002F\u002F eslint-disable-next-line no-alert\r\n-\t\tif ( confirm( 'Are you sure you want to dismiss this notice?' ) ) {\r\n-\t\t\tconst parent = el.closest( '.lp-notice' );\r\n-\t\t\tcallAdminNotices( `dismiss=${ el.getAttribute( 'data-dismiss' ) }` );\r\n-\t\t\tparent.remove();\r\n-\t\t\tif ( elLPAdminNotices.querySelectorAll( '.lp-notice' ).length === 0 ) {\r\n-\t\t\t\telLPAdminNotices.style.display = 'none';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-} );\r\n+\u002F**\n+ * Script handle admin notices.\n+ *\n+ * @since 4.1.7.3.2\n+ * @version 1.0.2\n+ *\u002F\n+import { lpOnElementReady } from '..\u002Futils.js';\n+import API from '..\u002Fapi.js';\n+let elLPAdminNotices = null;\n+let dataHtml = null;\n+const queryString = window.location.search;\n+const urlParams = new URLSearchParams( queryString );\n+const tab = urlParams.get( 'tab' );\n+\n+const notifyAddonsNewVersion = () => {\n+\ttry {\n+\t\tconst elAdminMenu = document.querySelector( '#adminmenu' );\n+\t\tif ( ! elAdminMenu ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elTabLP = elAdminMenu.querySelector( '#toplevel_page_learn_press' );\n+\t\tif ( ! elTabLP ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst elTabLPName = elTabLP.querySelector( '.wp-menu-name' );\n+\t\tif ( ! elTabLPName ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst elAddonsNewVerTotal = document.querySelector( 'input[name=lp-addons-new-version-totals]' );\n+\t\tif ( ! elAddonsNewVerTotal ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst htmlNotifyLP = `\u003Cspan class=\"tab-lp-admin-notice\">\u003C\u002Fspan>`;\n+\t\telTabLPName.insertAdjacentHTML( 'beforeend', htmlNotifyLP );\n+\t\tconst elTabLPAddons = elTabLP.querySelector( 'a[href=\"admin.php?page=learn-press-addons\"]' );\n+\t\tif ( ! elTabLPAddons ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst total = elAddonsNewVerTotal.value;\n+\t\tconst html = `\u003Cspan style=\"margin-left: 5px\" class=\"update-plugins\">${ total }\u003C\u002Fspan>`;\n+\t\telTabLPAddons.setAttribute( 'href', 'admin.php?page=learn-press-addons&tab=update' );\n+\t\telTabLPAddons.insertAdjacentHTML( 'beforeend', html );\n+\t} catch ( e ) {\n+\t\tconsole.log( e );\n+\t}\n+};\n+\n+const callAdminNotices = ( set = '' ) => {\n+\tif ( ! lpGlobalSettings.is_admin ) {\n+\t\treturn;\n+\t}\n+\n+\tlet params = tab ? `?tab=${ tab }` : '';\n+\tparams += set ? ( tab ? '&' : '?' ) + `${ set }` : '';\n+\n+\tfetch( API.admin.apiAdminNotice + params, {\n+\t\tmethod: 'POST',\n+\t\theaders: {\n+\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\n+\t\t},\n+\t} ).then( ( res ) =>\n+\t\tres.json()\n+\t).then( ( res ) => {\n+\t\t\u002F\u002F console.log(data);\n+\n+\t\tconst { status, message, data } = res;\n+\t\tif ( status === 'success' ) {\n+\t\t\tif ( 'Dismissed!' !== message ) {\n+\t\t\t\tdataHtml = data.content;\n+\n+\t\t\t\tif ( dataHtml.length === 0 ) {\n+\t\t\t\t\telLPAdminNotices.style.display = 'none';\n+\t\t\t\t} else {\n+\t\t\t\t\telLPAdminNotices.innerHTML = dataHtml;\n+\t\t\t\t\telLPAdminNotices.style.display = 'block';\n+\t\t\t\t\t\u002F\u002F Handle notify addons new version.\n+\t\t\t\t\tnotifyAddonsNewVersion();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tdataHtml = message;\n+\t\t}\n+\t} ).catch( ( err ) => {\n+\t\tconsole.log( err );\n+\t} );\n+};\n+\n+\u002F\u002F Listen element ready\n+lpOnElementReady( '.lp-admin-notices', () => {\n+\telLPAdminNotices = document.querySelector( '.lp-admin-notices' );\n+\tcallAdminNotices();\n+} );\n+\n+\u002F*** Events ***\u002F\n+document.addEventListener( 'click', ( e ) => {\n+\tconst el = e.target;\n+\n+\tif ( el.classList.contains( 'btn-lp-notice-dismiss' ) ) {\n+\t\te.preventDefault();\n+\n+\t\t\u002F\u002F eslint-disable-next-line no-alert\n+\t\tif ( confirm( 'Are you sure you want to dismiss this notice?' ) ) {\n+\t\t\tconst parent = el.closest( '.lp-notice' );\n+\t\t\tcallAdminNotices( `dismiss=${ el.getAttribute( 'data-dismiss' ) }` );\n+\t\t\tparent.remove();\n+\t\t\tif ( elLPAdminNotices.querySelectorAll( '.lp-notice' ).length === 0 ) {\n+\t\t\t\telLPAdminNotices.style.display = 'none';\n+\t\t\t}\n+\t\t}\n+\t}\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-order.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-order.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-order.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-order.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-import export_invoice from '.\u002Forder\u002Fexport_invoice';\r\n-\r\n-\u002F\u002Fimport modalSearchCourses from '.\u002Forder\u002Fmodal-search-courses';\r\n-import addCoursesToOrder from '.\u002Forder\u002Fadd-courses-to-order';\r\n-\r\n-export_invoice();\r\n-addCoursesToOrder();\r\n+import export_invoice from '.\u002Forder\u002Fexport_invoice';\n+\n+\u002F\u002Fimport modalSearchCourses from '.\u002Forder\u002Fmodal-search-courses';\n+import addCoursesToOrder from '.\u002Forder\u002Fadd-courses-to-order';\n+\n+export_invoice();\n+addCoursesToOrder();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-orders.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-orders.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-orders.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-orders.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,4 @@\n-import { ExportOrdersToCSV } from \".\u002Forders\u002Fexport-orders\";\r\n-\r\n-ExportOrdersToCSV();\r\n-\r\n+import { ExportOrdersToCSV } from \".\u002Forders\u002Fexport-orders\";\n+\n+ExportOrdersToCSV();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-statistic.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-statistic.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-statistic.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-statistic.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,483 +1,483 @@\n-\u002F**\r\n- * Statistics chart.\r\n- *\r\n- * @since 4.2.5.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-import Chart from 'chart.js\u002Fauto';\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function() {\r\n-\tconst lpStatisticsLoad = () => {\r\n-\t\tconst elementLoad = document.querySelector( 'input.statistics-type' );\r\n-\t\tif ( ! elementLoad ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( elementLoad.value === 'orders-statistics' ) {\r\n-\t\t\torderLoadData();\r\n-\t\t} else if ( elementLoad.value === 'overview-statistics' ) {\r\n-\t\t\toverviewLoadData();\r\n-\t\t} else if ( elementLoad.value === 'courses-statistics' ) {\r\n-\t\t\tcourseLoadData();\r\n-\t\t} else if ( elementLoad.value === 'users-statistics' ) {\r\n-\t\t\tuserLoadData();\r\n-\t\t}\r\n-\t};\r\n-\tconst overviewLoadData = ( filterType = 'today', date = '' ) => {\r\n-\t\twp.apiFetch( {\r\n-\t\t\tpath: wp.url.addQueryArgs(\r\n-\t\t\t\t'lp\u002Fv1\u002Fstatistics\u002Foverviews-statistics',\r\n-\t\t\t\t{\r\n-\t\t\t\t\tfiltertype: filterType,\r\n-\t\t\t\t\tdate,\r\n-\t\t\t\t}\r\n-\t\t\t),\r\n-\t\t\tmethod: 'GET',\r\n-\t\t} )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t\t}\r\n-\t\t\t\tconst configChartOverview = {\r\n-\t\t\t\t\toptions: {\r\n-\t\t\t\t\t\tscales: {\r\n-\t\t\t\t\t\t\ty: {\r\n-\t\t\t\t\t\t\t\tmin: 0,\r\n-\t\t\t\t\t\t\t\tticks: {\r\n-\t\t\t\t\t\t\t\t\tcallback( value, index, ticks ) {\r\n-\t\t\t\t\t\t\t\t\t\treturn '$' + value;\r\n-\t\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\t\t\t\tinitStatisticChart(\r\n-\t\t\t\t\t'net-sales-chart-content',\r\n-\t\t\t\t\tdata.chart_data,\r\n-\t\t\t\t\tconfigChartOverview\r\n-\t\t\t\t);\r\n-\t\t\t\tdocument.querySelector( '.total-sales' ).textContent =\r\n-\t\t\t\t\tdata.total_sales;\r\n-\t\t\t\tdocument.querySelector( '.total-orders' ).textContent =\r\n-\t\t\t\t\tdata.total_orders;\r\n-\t\t\t\tdocument.querySelector( '.total-courses' ).textContent =\r\n-\t\t\t\t\tdata.total_courses;\r\n-\t\t\t\tdocument.querySelector( '.total-instructors' ).textContent =\r\n-\t\t\t\t\tdata.total_instructors;\r\n-\t\t\t\tdocument.querySelector( '.total-students' ).textContent =\r\n-\t\t\t\t\tdata.total_students;\r\n-\t\t\t\tif ( data.top_courses.length > 0 ) {\r\n-\t\t\t\t\tconst topCourses = data.top_courses,\r\n-\t\t\t\t\t\ttopCoursesWrap =\r\n-\t\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' );\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C topCourses.length; i++ ) {\r\n-\t\t\t\t\t\ttopCoursesWrap.insertAdjacentHTML(\r\n-\t\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t\t`\u003Cli>${ topCourses[ i ].course_name } - ${ topCourses[ i ].course_count }\u003C\u002Fli>`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( data.top_categories.length > 0 ) {\r\n-\t\t\t\t\tconst topCategories = data.top_categories,\r\n-\t\t\t\t\t\ttopCategoriesWrap =\r\n-\t\t\t\t\t\t\tdocument.querySelector( '.top-category-sold' );\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C topCategories.length; i++ ) {\r\n-\t\t\t\t\t\ttopCategoriesWrap.insertAdjacentHTML(\r\n-\t\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t\t`\u003Cli>${ topCategories[ i ].term_name } - ${ topCategories[ i ].term_count }\u003C\u002Fli>`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} )\r\n-\t\t\t.catch( ( err ) => {\r\n-\t\t\t\tconsole.log( err );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {} );\r\n-\t};\r\n-\tconst orderLoadData = ( filterType = 'today', date = '' ) => {\r\n-\t\twp.apiFetch( {\r\n-\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Forder-statistics', {\r\n-\t\t\t\tfiltertype: filterType,\r\n-\t\t\t\tdate,\r\n-\t\t\t} ),\r\n-\t\t\tmethod: 'GET',\r\n-\t\t} )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t\t}\r\n-\t\t\t\tinitStatisticChart( 'orders-chart-content', data.chart_data );\r\n-\t\t\t\t\u002F\u002F chartEle.style.display = 'block';\r\n-\t\t\t\tif ( data.statistics.length > 0 ) {\r\n-\t\t\t\t\tlet totalOrder = 0;\r\n-\t\t\t\t\tfor ( let i = data.statistics.length - 1; i >= 0; i-- ) {\r\n-\t\t\t\t\t\tconst v = data.statistics[ i ];\r\n-\t\t\t\t\t\tif ( v.order_status == 'completed' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.completed-order-count'\r\n-\t\t\t\t\t\t\t).textContent = v.count_order;\r\n-\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\r\n-\t\t\t\t\t\t} else if ( v.order_status == 'pending' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.pending-order-count'\r\n-\t\t\t\t\t\t\t).textContent = v.count_order;\r\n-\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\r\n-\t\t\t\t\t\t} else if ( v.order_status == 'processing' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.processing-order-count'\r\n-\t\t\t\t\t\t\t).textContent = v.count_order;\r\n-\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\r\n-\t\t\t\t\t\t} else if ( v.order_status == 'cancelled' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.cancelled-order-count'\r\n-\t\t\t\t\t\t\t).textContent = v.count_order;\r\n-\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\r\n-\t\t\t\t\t\t} else if ( v.order_status == 'failed' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.failed-order-count'\r\n-\t\t\t\t\t\t\t).textContent = v.count_order;\r\n-\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdocument.querySelector( '.total-order-count' ).textContent =\r\n-\t\t\t\t\t\ttotalOrder;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdocument\r\n-\t\t\t\t\t\t.querySelectorAll( '.statistics-item-count' )\r\n-\t\t\t\t\t\t.forEach( ( ele ) => {\r\n-\t\t\t\t\t\t\tele.textContent = 0;\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t} )\r\n-\t\t\t.catch( ( err ) => {\r\n-\t\t\t\tconsole.log( err );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {} );\r\n-\t};\r\n-\tconst courseLoadData = ( filterType = 'today', date = '' ) => {\r\n-\t\twp.apiFetch( {\r\n-\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Fcourse-statistics', {\r\n-\t\t\t\tfiltertype: filterType,\r\n-\t\t\t\tdate,\r\n-\t\t\t} ),\r\n-\t\t\tmethod: 'GET',\r\n-\t\t} )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t\t}\r\n-\t\t\t\tinitStatisticChart( 'course-chart-content', data.chart_data );\r\n-\t\t\t\tif ( data.courses.length > 0 ) {\r\n-\t\t\t\t\tlet totalCourse = 0;\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C data.courses.length; i++ ) {\r\n-\t\t\t\t\t\tconst v = data.courses[ i ];\r\n-\t\t\t\t\t\tif ( v.course_status == 'publish' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-courses.published'\r\n-\t\t\t\t\t\t\t).textContent = v.course_count;\r\n-\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\r\n-\t\t\t\t\t\t} else if ( v.course_status == 'pending' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-courses.pending'\r\n-\t\t\t\t\t\t\t).textContent = v.course_count;\r\n-\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\r\n-\t\t\t\t\t\t} else if ( v.course_status == 'future' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-courses.future'\r\n-\t\t\t\t\t\t\t).textContent = v.course_count;\r\n-\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t'.statistics-courses.total'\r\n-\t\t\t\t\t).textContent = totalCourse;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdocument\r\n-\t\t\t\t\t\t.querySelectorAll( '.statistics-courses' )\r\n-\t\t\t\t\t\t.forEach( ( ele ) => {\r\n-\t\t\t\t\t\t\tele.textContent = 0;\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( data.items.length > 0 ) {\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C data.items.length; i++ ) {\r\n-\t\t\t\t\t\tconst v = data.items[ i ];\r\n-\t\t\t\t\t\tif ( v.item_type == 'lp_lesson' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-items.lessons'\r\n-\t\t\t\t\t\t\t).textContent = v.item_count;\r\n-\t\t\t\t\t\t} else if ( v.item_type == 'lp_quiz' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-items.quizes'\r\n-\t\t\t\t\t\t\t).textContent = v.item_count;\r\n-\t\t\t\t\t\t} else if ( v.item_type == 'lp_assignment' ) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-items.assignment'\r\n-\t\t\t\t\t\t\t).textContent = v.item_count;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdocument\r\n-\t\t\t\t\t\t.querySelectorAll( '.statistics-items' )\r\n-\t\t\t\t\t\t.forEach( ( ele ) => {\r\n-\t\t\t\t\t\t\tele.textContent = 0;\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t} )\r\n-\t\t\t.catch( ( err ) => {\r\n-\t\t\t\tconsole.log( err );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {} );\r\n-\t};\r\n-\tconst userLoadData = ( filterType = 'today', date = '' ) => {\r\n-\t\twp.apiFetch( {\r\n-\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Fuser-statistics', {\r\n-\t\t\t\tfiltertype: filterType,\r\n-\t\t\t\tdate,\r\n-\t\t\t} ),\r\n-\t\t\tmethod: 'GET',\r\n-\t\t} )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( message || 'Error' );\r\n-\t\t\t\t}\r\n-\t\t\t\tinitStatisticChart( 'user-chart-content', data.chart_data );\r\n-\t\t\t\tconst totalUserActived = 0;\r\n-\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t'.statistics-instructors'\r\n-\t\t\t\t).textContent = data.total_instructors;\r\n-\t\t\t\tdocument.querySelector( '.statistics-students' ).textContent =\r\n-\t\t\t\t\tdata.total_students;\r\n-\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t'.statistics-user-actived'\r\n-\t\t\t\t).textContent = data.total_instructors + data.total_students;\r\n-\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t'.statistics-not-started'\r\n-\t\t\t\t).textContent = data.user_not_start_course;\r\n-\t\t\t\tif ( data.user_course_statused.length > 0 ) {\r\n-\t\t\t\t\tlet userGraduration = data.user_course_statused,\r\n-\t\t\t\t\t\tuserFinished = 0;\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C userGraduration.length; i++ ) {\r\n-\t\t\t\t\t\tif (\r\n-\t\t\t\t\t\t\tuserGraduration[ i ].graduation_status ===\r\n-\t\t\t\t\t\t\t'in-progress'\r\n-\t\t\t\t\t\t) {\r\n-\t\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t\t'.statistics-graduration.in-progress'\r\n-\t\t\t\t\t\t\t).textContent = userGraduration[ i ].user_count;\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tuserFinished += parseInt( userGraduration[ i ].user_count );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t'.statistics-graduration.finished'\r\n-\t\t\t\t\t).textContent = userFinished;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdocument\r\n-\t\t\t\t\t\t.querySelectorAll( '.statistics-graduration' )\r\n-\t\t\t\t\t\t.forEach( ( ele ) => {\r\n-\t\t\t\t\t\t\tele.textContent = 0;\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( Object.keys( data.top_enrolled_instructor ).length > 0 ) {\r\n-\t\t\t\t\tconst topInstructor = data.top_enrolled_instructor,\r\n-\t\t\t\t\t\ttopInstructorWrap = document.querySelector(\r\n-\t\t\t\t\t\t\t'.top-intructor-by-student'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\tObject.keys( topInstructor ).forEach( function( key ) {\r\n-\t\t\t\t\t\t\u002F\u002F console.log(key, topInstructor[key]);\r\n-\t\t\t\t\t\ttopInstructorWrap.insertAdjacentHTML(\r\n-\t\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t\t`\u003Cli>${ topInstructor[ key ].name } - ${ topInstructor[ key ].students }\u003C\u002Fli>`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( data.top_enrolled_courses.length > 0 ) {\r\n-\t\t\t\t\tconst topCourse = data.top_enrolled_courses,\r\n-\t\t\t\t\t\ttopCourseWrap = document.querySelector(\r\n-\t\t\t\t\t\t\t'.top-course-by-student'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\tfor ( let i = 0; i \u003C topCourse.length; i++ ) {\r\n-\t\t\t\t\t\ttopCourseWrap.insertAdjacentHTML(\r\n-\t\t\t\t\t\t\t'beforeend',\r\n-\t\t\t\t\t\t\t`\u003Cli>${ topCourse[ i ].course_name } - ${ topCourse[ i ].enrolled_user }\u003C\u002Fli>`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} )\r\n-\t\t\t.catch( ( err ) => {\r\n-\t\t\t\tconsole.log( err );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {} );\r\n-\t};\r\n-\tconst generateChart = ( chartEle = '', data = [], config = {} ) => {\r\n-\t\tconst canvas = document.getElementById( chartEle );\r\n-\t\tconst chart_data = {\r\n-\t\t\tlabels: data.labels,\r\n-\t\t\tdatasets: [\r\n-\t\t\t\t{\r\n-\t\t\t\t\tlabel: data.line_label,\r\n-\t\t\t\t\tborderColor: 'rgb(49 74 199)',\r\n-\t\t\t\t\tborderWidth: 2,\r\n-\t\t\t\t\tdata: data.data,\r\n-\t\t\t\t\tbackgroundColor: 'rgb(49 74 199)',\r\n-\t\t\t\t},\r\n-\t\t\t],\r\n-\t\t};\r\n-\t\tconst configDefault = {\r\n-\t\t\ttype: 'line',\r\n-\t\t\tdata: chart_data,\r\n-\t\t\toptions: {\r\n-\t\t\t\tresponsive: true,\r\n-\t\t\t\tmaintainAspectRatio: false,\r\n-\t\t\t\taspectRatio: 0.8,\r\n-\t\t\t\tplugins: {\r\n-\t\t\t\t\tlegend: {\r\n-\t\t\t\t\t\tdisplay: false,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t},\r\n-\t\t\t\tscales: {\r\n-\t\t\t\t\ty: {\r\n-\t\t\t\t\t\tmin: 0,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tx: {\r\n-\t\t\t\t\t\ttitle: {\r\n-\t\t\t\t\t\t\tdisplay: true,\r\n-\t\t\t\t\t\t\ttext: data.x_label,\r\n-\t\t\t\t\t\t\talign: 'end',\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t},\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst configChart = { ...configDefault, ...config };\r\n-\t\tconfigChart.options = { ...configDefault.options, ...config.options };\r\n-\r\n-\t\t\u002F\u002F console.log( configChart );\r\n-\r\n-\t\tconst chart = new Chart( canvas, configChart );\r\n-\t\treturn chart;\r\n-\t};\r\n-\tconst loadLpSkeletonAnimations = ( show = false ) => {\r\n-\t\tif ( show ) {\r\n-\t\t\tdocument\r\n-\t\t\t\t.querySelectorAll( '.lp-skeleton-animation' )\r\n-\t\t\t\t.forEach( ( animation ) => {\r\n-\t\t\t\t\tanimation.style.display = 'block';\r\n-\t\t\t\t} );\r\n-\t\t} else {\r\n-\t\t\tdocument\r\n-\t\t\t\t.querySelectorAll( '.lp-skeleton-animation' )\r\n-\t\t\t\t.forEach( ( animation ) => {\r\n-\t\t\t\t\tanimation.style.display = 'none';\r\n-\t\t\t\t} );\r\n-\t\t}\r\n-\t};\r\n-\tdocument.querySelectorAll( '.btn-filter-time' ).forEach( ( btn ) => {\r\n-\t\tbtn.addEventListener( 'click', () => {\r\n-\t\t\tdocument\r\n-\t\t\t\t.querySelectorAll( '.btn-filter-time' )\r\n-\t\t\t\t.forEach( ( ele ) => ele.classList.remove( 'active' ) );\r\n-\t\t\tbtn.classList.add( 'active' );\r\n-\t\t\tconst filterType = btn.dataset.filter;\r\n-\t\t\tif ( filterType == 'custom' ) {\r\n-\t\t\t\tdocument.querySelector( '.custom-filter-time' ).style.display =\r\n-\t\t\t\t\t'flex';\r\n-\t\t\t} else {\r\n-\t\t\t\tconst elementLoad = document.querySelector(\r\n-\t\t\t\t\t'input.statistics-type'\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( elementLoad ) {\r\n-\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t'.statistics-content canvas'\r\n-\t\t\t\t\t).style.display = 'none';\r\n-\t\t\t\t\tloadLpSkeletonAnimations( true );\r\n-\t\t\t\t\tif ( elementLoad.value == 'orders-statistics' ) {\r\n-\t\t\t\t\t\torderLoadData( filterType );\r\n-\t\t\t\t\t} else if ( elementLoad.value == 'overview-statistics' ) {\r\n-\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t'.top-category-sold'\r\n-\t\t\t\t\t\t).innerHTML = '';\r\n-\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' ).innerHTML =\r\n-\t\t\t\t\t\t\t'';\r\n-\t\t\t\t\t\toverviewLoadData( filterType );\r\n-\t\t\t\t\t} else if ( elementLoad.value == 'courses-statistics' ) {\r\n-\t\t\t\t\t\tcourseLoadData( filterType );\r\n-\t\t\t\t\t} else if ( elementLoad.value == 'users-statistics' ) {\r\n-\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t'.top-course-by-student'\r\n-\t\t\t\t\t\t).innerHTML = '';\r\n-\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t'.top-intructor-by-student'\r\n-\t\t\t\t\t\t).innerHTML = '';\r\n-\t\t\t\t\t\tuserLoadData( filterType );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-\tdocument\r\n-\t\t.querySelector( '.custom-filter-btn' )\r\n-\t\t.addEventListener( 'click', ( e ) => {\r\n-\t\t\tconst time1 = document.querySelector( '#ct-filter-1' ).value,\r\n-\t\t\t\ttime2 = document.querySelector( '#ct-filter-2' ).value;\r\n-\t\t\tif ( ! time1 || ! time2 ) {\r\n-\t\t\t\talert( 'Choose date' );\r\n-\t\t\t} else {\r\n-\t\t\t\tconst elementLoad = document.querySelector(\r\n-\t\t\t\t\t'input.statistics-type'\r\n-\t\t\t\t);\r\n-\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t'.statistics-content canvas'\r\n-\t\t\t\t).style.display = 'none';\r\n-\t\t\t\tloadLpSkeletonAnimations( true );\r\n-\t\t\t\tif ( elementLoad ) {\r\n-\t\t\t\t\tif ( elementLoad.value === 'orders-statistics' ) {\r\n-\t\t\t\t\t\torderLoadData( 'custom', `${ time1 }+${ time2 }` );\r\n-\t\t\t\t\t} else if ( elementLoad.value === 'overview-statistics' ) {\r\n-\t\t\t\t\t\tdocument.querySelector(\r\n-\t\t\t\t\t\t\t'.top-category-sold'\r\n-\t\t\t\t\t\t).innerHTML = '';\r\n-\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' ).innerHTML =\r\n-\t\t\t\t\t\t\t'';\r\n-\t\t\t\t\t\toverviewLoadData( 'custom', `${ time1 }+${ time2 }` );\r\n-\t\t\t\t\t} else if ( elementLoad.value === 'courses-statistics' ) {\r\n-\t\t\t\t\t\tcourseLoadData( 'custom', `${ time1 }+${ time2 }` );\r\n-\t\t\t\t\t} else if ( elementLoad.value === 'users-statistics' ) {\r\n-\t\t\t\t\t\tuserLoadData( 'custom', `${ time1 }+${ time2 }` );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\tlpStatisticsLoad();\r\n-\tconst initStatisticChart = (\r\n-\t\tchartID = '',\r\n-\t\tchartData = [],\r\n-\t\tchartConfig = false\r\n-\t) => {\r\n-\t\tlet chart = Chart.getChart( chartID );\r\n-\t\tconst chartEle = document.getElementById( chartID );\r\n-\r\n-\t\t\u002F\u002F console.log( data );\r\n-\t\tchartEle.style.display = 'block';\r\n-\t\tloadLpSkeletonAnimations();\r\n-\r\n-\t\tif ( chart === undefined ) {\r\n-\t\t\tif ( chartConfig ) {\r\n-\t\t\t\tchart = generateChart( chartID, chartData, chartConfig );\r\n-\t\t\t} else {\r\n-\t\t\t\tchart = generateChart( chartID, chartData );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tchart.data.labels = chartData.labels;\r\n-\t\t\tchart.data.datasets[ 0 ].data = chartData.data;\r\n-\t\t\tchart.config.options.scales.x.title.text = chartData.x_label;\r\n-\t\t\tchart.update();\r\n-\t\t}\r\n-\t};\r\n-} );\r\n+\u002F**\n+ * Statistics chart.\n+ *\n+ * @since 4.2.5.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+import Chart from 'chart.js\u002Fauto';\n+\n+document.addEventListener( 'DOMContentLoaded', function() {\n+\tconst lpStatisticsLoad = () => {\n+\t\tconst elementLoad = document.querySelector( 'input.statistics-type' );\n+\t\tif ( ! elementLoad ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( elementLoad.value === 'orders-statistics' ) {\n+\t\t\torderLoadData();\n+\t\t} else if ( elementLoad.value === 'overview-statistics' ) {\n+\t\t\toverviewLoadData();\n+\t\t} else if ( elementLoad.value === 'courses-statistics' ) {\n+\t\t\tcourseLoadData();\n+\t\t} else if ( elementLoad.value === 'users-statistics' ) {\n+\t\t\tuserLoadData();\n+\t\t}\n+\t};\n+\tconst overviewLoadData = ( filterType = 'today', date = '' ) => {\n+\t\twp.apiFetch( {\n+\t\t\tpath: wp.url.addQueryArgs(\n+\t\t\t\t'lp\u002Fv1\u002Fstatistics\u002Foverviews-statistics',\n+\t\t\t\t{\n+\t\t\t\t\tfiltertype: filterType,\n+\t\t\t\t\tdate,\n+\t\t\t\t}\n+\t\t\t),\n+\t\t\tmethod: 'GET',\n+\t\t} )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t\t}\n+\t\t\t\tconst configChartOverview = {\n+\t\t\t\t\toptions: {\n+\t\t\t\t\t\tscales: {\n+\t\t\t\t\t\t\ty: {\n+\t\t\t\t\t\t\t\tmin: 0,\n+\t\t\t\t\t\t\t\tticks: {\n+\t\t\t\t\t\t\t\t\tcallback( value, index, ticks ) {\n+\t\t\t\t\t\t\t\t\t\treturn '$' + value;\n+\t\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t},\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\t\t\t\tinitStatisticChart(\n+\t\t\t\t\t'net-sales-chart-content',\n+\t\t\t\t\tdata.chart_data,\n+\t\t\t\t\tconfigChartOverview\n+\t\t\t\t);\n+\t\t\t\tdocument.querySelector( '.total-sales' ).textContent =\n+\t\t\t\t\tdata.total_sales;\n+\t\t\t\tdocument.querySelector( '.total-orders' ).textContent =\n+\t\t\t\t\tdata.total_orders;\n+\t\t\t\tdocument.querySelector( '.total-courses' ).textContent =\n+\t\t\t\t\tdata.total_courses;\n+\t\t\t\tdocument.querySelector( '.total-instructors' ).textContent =\n+\t\t\t\t\tdata.total_instructors;\n+\t\t\t\tdocument.querySelector( '.total-students' ).textContent =\n+\t\t\t\t\tdata.total_students;\n+\t\t\t\tif ( data.top_courses.length > 0 ) {\n+\t\t\t\t\tconst topCourses = data.top_courses,\n+\t\t\t\t\t\ttopCoursesWrap =\n+\t\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' );\n+\t\t\t\t\tfor ( let i = 0; i \u003C topCourses.length; i++ ) {\n+\t\t\t\t\t\ttopCoursesWrap.insertAdjacentHTML(\n+\t\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t\t`\u003Cli>${ topCourses[ i ].course_name } - ${ topCourses[ i ].course_count }\u003C\u002Fli>`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tif ( data.top_categories.length > 0 ) {\n+\t\t\t\t\tconst topCategories = data.top_categories,\n+\t\t\t\t\t\ttopCategoriesWrap =\n+\t\t\t\t\t\t\tdocument.querySelector( '.top-category-sold' );\n+\t\t\t\t\tfor ( let i = 0; i \u003C topCategories.length; i++ ) {\n+\t\t\t\t\t\ttopCategoriesWrap.insertAdjacentHTML(\n+\t\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t\t`\u003Cli>${ topCategories[ i ].term_name } - ${ topCategories[ i ].term_count }\u003C\u002Fli>`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} )\n+\t\t\t.catch( ( err ) => {\n+\t\t\t\tconsole.log( err );\n+\t\t\t} )\n+\t\t\t.finally( () => {} );\n+\t};\n+\tconst orderLoadData = ( filterType = 'today', date = '' ) => {\n+\t\twp.apiFetch( {\n+\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Forder-statistics', {\n+\t\t\t\tfiltertype: filterType,\n+\t\t\t\tdate,\n+\t\t\t} ),\n+\t\t\tmethod: 'GET',\n+\t\t} )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t\t}\n+\t\t\t\tinitStatisticChart( 'orders-chart-content', data.chart_data );\n+\t\t\t\t\u002F\u002F chartEle.style.display = 'block';\n+\t\t\t\tif ( data.statistics.length > 0 ) {\n+\t\t\t\t\tlet totalOrder = 0;\n+\t\t\t\t\tfor ( let i = data.statistics.length - 1; i >= 0; i-- ) {\n+\t\t\t\t\t\tconst v = data.statistics[ i ];\n+\t\t\t\t\t\tif ( v.order_status == 'completed' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.completed-order-count'\n+\t\t\t\t\t\t\t).textContent = v.count_order;\n+\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\n+\t\t\t\t\t\t} else if ( v.order_status == 'pending' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.pending-order-count'\n+\t\t\t\t\t\t\t).textContent = v.count_order;\n+\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\n+\t\t\t\t\t\t} else if ( v.order_status == 'processing' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.processing-order-count'\n+\t\t\t\t\t\t\t).textContent = v.count_order;\n+\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\n+\t\t\t\t\t\t} else if ( v.order_status == 'cancelled' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.cancelled-order-count'\n+\t\t\t\t\t\t\t).textContent = v.count_order;\n+\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\n+\t\t\t\t\t\t} else if ( v.order_status == 'failed' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.failed-order-count'\n+\t\t\t\t\t\t\t).textContent = v.count_order;\n+\t\t\t\t\t\t\ttotalOrder += parseInt( v.count_order );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tdocument.querySelector( '.total-order-count' ).textContent =\n+\t\t\t\t\t\ttotalOrder;\n+\t\t\t\t} else {\n+\t\t\t\t\tdocument\n+\t\t\t\t\t\t.querySelectorAll( '.statistics-item-count' )\n+\t\t\t\t\t\t.forEach( ( ele ) => {\n+\t\t\t\t\t\t\tele.textContent = 0;\n+\t\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t} )\n+\t\t\t.catch( ( err ) => {\n+\t\t\t\tconsole.log( err );\n+\t\t\t} )\n+\t\t\t.finally( () => {} );\n+\t};\n+\tconst courseLoadData = ( filterType = 'today', date = '' ) => {\n+\t\twp.apiFetch( {\n+\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Fcourse-statistics', {\n+\t\t\t\tfiltertype: filterType,\n+\t\t\t\tdate,\n+\t\t\t} ),\n+\t\t\tmethod: 'GET',\n+\t\t} )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t\t}\n+\t\t\t\tinitStatisticChart( 'course-chart-content', data.chart_data );\n+\t\t\t\tif ( data.courses.length > 0 ) {\n+\t\t\t\t\tlet totalCourse = 0;\n+\t\t\t\t\tfor ( let i = 0; i \u003C data.courses.length; i++ ) {\n+\t\t\t\t\t\tconst v = data.courses[ i ];\n+\t\t\t\t\t\tif ( v.course_status == 'publish' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-courses.published'\n+\t\t\t\t\t\t\t).textContent = v.course_count;\n+\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\n+\t\t\t\t\t\t} else if ( v.course_status == 'pending' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-courses.pending'\n+\t\t\t\t\t\t\t).textContent = v.course_count;\n+\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\n+\t\t\t\t\t\t} else if ( v.course_status == 'future' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-courses.future'\n+\t\t\t\t\t\t\t).textContent = v.course_count;\n+\t\t\t\t\t\t\ttotalCourse += parseInt( v.course_count );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t'.statistics-courses.total'\n+\t\t\t\t\t).textContent = totalCourse;\n+\t\t\t\t} else {\n+\t\t\t\t\tdocument\n+\t\t\t\t\t\t.querySelectorAll( '.statistics-courses' )\n+\t\t\t\t\t\t.forEach( ( ele ) => {\n+\t\t\t\t\t\t\tele.textContent = 0;\n+\t\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t\tif ( data.items.length > 0 ) {\n+\t\t\t\t\tfor ( let i = 0; i \u003C data.items.length; i++ ) {\n+\t\t\t\t\t\tconst v = data.items[ i ];\n+\t\t\t\t\t\tif ( v.item_type == 'lp_lesson' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-items.lessons'\n+\t\t\t\t\t\t\t).textContent = v.item_count;\n+\t\t\t\t\t\t} else if ( v.item_type == 'lp_quiz' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-items.quizes'\n+\t\t\t\t\t\t\t).textContent = v.item_count;\n+\t\t\t\t\t\t} else if ( v.item_type == 'lp_assignment' ) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-items.assignment'\n+\t\t\t\t\t\t\t).textContent = v.item_count;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tdocument\n+\t\t\t\t\t\t.querySelectorAll( '.statistics-items' )\n+\t\t\t\t\t\t.forEach( ( ele ) => {\n+\t\t\t\t\t\t\tele.textContent = 0;\n+\t\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t} )\n+\t\t\t.catch( ( err ) => {\n+\t\t\t\tconsole.log( err );\n+\t\t\t} )\n+\t\t\t.finally( () => {} );\n+\t};\n+\tconst userLoadData = ( filterType = 'today', date = '' ) => {\n+\t\twp.apiFetch( {\n+\t\t\tpath: wp.url.addQueryArgs( 'lp\u002Fv1\u002Fstatistics\u002Fuser-statistics', {\n+\t\t\t\tfiltertype: filterType,\n+\t\t\t\tdate,\n+\t\t\t} ),\n+\t\t\tmethod: 'GET',\n+\t\t} )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tthrow new Error( message || 'Error' );\n+\t\t\t\t}\n+\t\t\t\tinitStatisticChart( 'user-chart-content', data.chart_data );\n+\t\t\t\tconst totalUserActived = 0;\n+\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t'.statistics-instructors'\n+\t\t\t\t).textContent = data.total_instructors;\n+\t\t\t\tdocument.querySelector( '.statistics-students' ).textContent =\n+\t\t\t\t\tdata.total_students;\n+\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t'.statistics-user-actived'\n+\t\t\t\t).textContent = data.total_instructors + data.total_students;\n+\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t'.statistics-not-started'\n+\t\t\t\t).textContent = data.user_not_start_course;\n+\t\t\t\tif ( data.user_course_statused.length > 0 ) {\n+\t\t\t\t\tlet userGraduration = data.user_course_statused,\n+\t\t\t\t\t\tuserFinished = 0;\n+\t\t\t\t\tfor ( let i = 0; i \u003C userGraduration.length; i++ ) {\n+\t\t\t\t\t\tif (\n+\t\t\t\t\t\t\tuserGraduration[ i ].graduation_status ===\n+\t\t\t\t\t\t\t'in-progress'\n+\t\t\t\t\t\t) {\n+\t\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t\t'.statistics-graduration.in-progress'\n+\t\t\t\t\t\t\t).textContent = userGraduration[ i ].user_count;\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tuserFinished += parseInt( userGraduration[ i ].user_count );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t'.statistics-graduration.finished'\n+\t\t\t\t\t).textContent = userFinished;\n+\t\t\t\t} else {\n+\t\t\t\t\tdocument\n+\t\t\t\t\t\t.querySelectorAll( '.statistics-graduration' )\n+\t\t\t\t\t\t.forEach( ( ele ) => {\n+\t\t\t\t\t\t\tele.textContent = 0;\n+\t\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t\tif ( Object.keys( data.top_enrolled_instructor ).length > 0 ) {\n+\t\t\t\t\tconst topInstructor = data.top_enrolled_instructor,\n+\t\t\t\t\t\ttopInstructorWrap = document.querySelector(\n+\t\t\t\t\t\t\t'.top-intructor-by-student'\n+\t\t\t\t\t\t);\n+\t\t\t\t\tObject.keys( topInstructor ).forEach( function( key ) {\n+\t\t\t\t\t\t\u002F\u002F console.log(key, topInstructor[key]);\n+\t\t\t\t\t\ttopInstructorWrap.insertAdjacentHTML(\n+\t\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t\t`\u003Cli>${ topInstructor[ key ].name } - ${ topInstructor[ key ].students }\u003C\u002Fli>`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t\tif ( data.top_enrolled_courses.length > 0 ) {\n+\t\t\t\t\tconst topCourse = data.top_enrolled_courses,\n+\t\t\t\t\t\ttopCourseWrap = document.querySelector(\n+\t\t\t\t\t\t\t'.top-course-by-student'\n+\t\t\t\t\t\t);\n+\t\t\t\t\tfor ( let i = 0; i \u003C topCourse.length; i++ ) {\n+\t\t\t\t\t\ttopCourseWrap.insertAdjacentHTML(\n+\t\t\t\t\t\t\t'beforeend',\n+\t\t\t\t\t\t\t`\u003Cli>${ topCourse[ i ].course_name } - ${ topCourse[ i ].enrolled_user }\u003C\u002Fli>`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} )\n+\t\t\t.catch( ( err ) => {\n+\t\t\t\tconsole.log( err );\n+\t\t\t} )\n+\t\t\t.finally( () => {} );\n+\t};\n+\tconst generateChart = ( chartEle = '', data = [], config = {} ) => {\n+\t\tconst canvas = document.getElementById( chartEle );\n+\t\tconst chart_data = {\n+\t\t\tlabels: data.labels,\n+\t\t\tdatasets: [\n+\t\t\t\t{\n+\t\t\t\t\tlabel: data.line_label,\n+\t\t\t\t\tborderColor: 'rgb(49 74 199)',\n+\t\t\t\t\tborderWidth: 2,\n+\t\t\t\t\tdata: data.data,\n+\t\t\t\t\tbackgroundColor: 'rgb(49 74 199)',\n+\t\t\t\t},\n+\t\t\t],\n+\t\t};\n+\t\tconst configDefault = {\n+\t\t\ttype: 'line',\n+\t\t\tdata: chart_data,\n+\t\t\toptions: {\n+\t\t\t\tresponsive: true,\n+\t\t\t\tmaintainAspectRatio: false,\n+\t\t\t\taspectRatio: 0.8,\n+\t\t\t\tplugins: {\n+\t\t\t\t\tlegend: {\n+\t\t\t\t\t\tdisplay: false,\n+\t\t\t\t\t},\n+\t\t\t\t},\n+\t\t\t\tscales: {\n+\t\t\t\t\ty: {\n+\t\t\t\t\t\tmin: 0,\n+\t\t\t\t\t},\n+\t\t\t\t\tx: {\n+\t\t\t\t\t\ttitle: {\n+\t\t\t\t\t\t\tdisplay: true,\n+\t\t\t\t\t\t\ttext: data.x_label,\n+\t\t\t\t\t\t\talign: 'end',\n+\t\t\t\t\t\t},\n+\t\t\t\t\t},\n+\t\t\t\t},\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst configChart = { ...configDefault, ...config };\n+\t\tconfigChart.options = { ...configDefault.options, ...config.options };\n+\n+\t\t\u002F\u002F console.log( configChart );\n+\n+\t\tconst chart = new Chart( canvas, configChart );\n+\t\treturn chart;\n+\t};\n+\tconst loadLpSkeletonAnimations = ( show = false ) => {\n+\t\tif ( show ) {\n+\t\t\tdocument\n+\t\t\t\t.querySelectorAll( '.lp-skeleton-animation' )\n+\t\t\t\t.forEach( ( animation ) => {\n+\t\t\t\t\tanimation.style.display = 'block';\n+\t\t\t\t} );\n+\t\t} else {\n+\t\t\tdocument\n+\t\t\t\t.querySelectorAll( '.lp-skeleton-animation' )\n+\t\t\t\t.forEach( ( animation ) => {\n+\t\t\t\t\tanimation.style.display = 'none';\n+\t\t\t\t} );\n+\t\t}\n+\t};\n+\tdocument.querySelectorAll( '.btn-filter-time' ).forEach( ( btn ) => {\n+\t\tbtn.addEventListener( 'click', () => {\n+\t\t\tdocument\n+\t\t\t\t.querySelectorAll( '.btn-filter-time' )\n+\t\t\t\t.forEach( ( ele ) => ele.classList.remove( 'active' ) );\n+\t\t\tbtn.classList.add( 'active' );\n+\t\t\tconst filterType = btn.dataset.filter;\n+\t\t\tif ( filterType == 'custom' ) {\n+\t\t\t\tdocument.querySelector( '.custom-filter-time' ).style.display =\n+\t\t\t\t\t'flex';\n+\t\t\t} else {\n+\t\t\t\tconst elementLoad = document.querySelector(\n+\t\t\t\t\t'input.statistics-type'\n+\t\t\t\t);\n+\t\t\t\tif ( elementLoad ) {\n+\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t'.statistics-content canvas'\n+\t\t\t\t\t).style.display = 'none';\n+\t\t\t\t\tloadLpSkeletonAnimations( true );\n+\t\t\t\t\tif ( elementLoad.value == 'orders-statistics' ) {\n+\t\t\t\t\t\torderLoadData( filterType );\n+\t\t\t\t\t} else if ( elementLoad.value == 'overview-statistics' ) {\n+\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t'.top-category-sold'\n+\t\t\t\t\t\t).innerHTML = '';\n+\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' ).innerHTML =\n+\t\t\t\t\t\t\t'';\n+\t\t\t\t\t\toverviewLoadData( filterType );\n+\t\t\t\t\t} else if ( elementLoad.value == 'courses-statistics' ) {\n+\t\t\t\t\t\tcourseLoadData( filterType );\n+\t\t\t\t\t} else if ( elementLoad.value == 'users-statistics' ) {\n+\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t'.top-course-by-student'\n+\t\t\t\t\t\t).innerHTML = '';\n+\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t'.top-intructor-by-student'\n+\t\t\t\t\t\t).innerHTML = '';\n+\t\t\t\t\t\tuserLoadData( filterType );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t} );\n+\tdocument\n+\t\t.querySelector( '.custom-filter-btn' )\n+\t\t.addEventListener( 'click', ( e ) => {\n+\t\t\tconst time1 = document.querySelector( '#ct-filter-1' ).value,\n+\t\t\t\ttime2 = document.querySelector( '#ct-filter-2' ).value;\n+\t\t\tif ( ! time1 || ! time2 ) {\n+\t\t\t\talert( 'Choose date' );\n+\t\t\t} else {\n+\t\t\t\tconst elementLoad = document.querySelector(\n+\t\t\t\t\t'input.statistics-type'\n+\t\t\t\t);\n+\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t'.statistics-content canvas'\n+\t\t\t\t).style.display = 'none';\n+\t\t\t\tloadLpSkeletonAnimations( true );\n+\t\t\t\tif ( elementLoad ) {\n+\t\t\t\t\tif ( elementLoad.value === 'orders-statistics' ) {\n+\t\t\t\t\t\torderLoadData( 'custom', `${ time1 }+${ time2 }` );\n+\t\t\t\t\t} else if ( elementLoad.value === 'overview-statistics' ) {\n+\t\t\t\t\t\tdocument.querySelector(\n+\t\t\t\t\t\t\t'.top-category-sold'\n+\t\t\t\t\t\t).innerHTML = '';\n+\t\t\t\t\t\tdocument.querySelector( '.top-course-sold' ).innerHTML =\n+\t\t\t\t\t\t\t'';\n+\t\t\t\t\t\toverviewLoadData( 'custom', `${ time1 }+${ time2 }` );\n+\t\t\t\t\t} else if ( elementLoad.value === 'courses-statistics' ) {\n+\t\t\t\t\t\tcourseLoadData( 'custom', `${ time1 }+${ time2 }` );\n+\t\t\t\t\t} else if ( elementLoad.value === 'users-statistics' ) {\n+\t\t\t\t\t\tuserLoadData( 'custom', `${ time1 }+${ time2 }` );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\tlpStatisticsLoad();\n+\tconst initStatisticChart = (\n+\t\tchartID = '',\n+\t\tchartData = [],\n+\t\tchartConfig = false\n+\t) => {\n+\t\tlet chart = Chart.getChart( chartID );\n+\t\tconst chartEle = document.getElementById( chartID );\n+\n+\t\t\u002F\u002F console.log( data );\n+\t\tchartEle.style.display = 'block';\n+\t\tloadLpSkeletonAnimations();\n+\n+\t\tif ( chart === undefined ) {\n+\t\t\tif ( chartConfig ) {\n+\t\t\t\tchart = generateChart( chartID, chartData, chartConfig );\n+\t\t\t} else {\n+\t\t\t\tchart = generateChart( chartID, chartData );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tchart.data.labels = chartData.labels;\n+\t\t\tchart.data.datasets[ 0 ].data = chartData.data;\n+\t\t\tchart.config.options.scales.x.title.text = chartData.x_label;\n+\t\t\tchart.update();\n+\t\t}\n+\t};\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-tools.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-tools.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-tools.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin-tools.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-import assignUserCourse from '.\u002Ftools\u002Fassign-user-course';\r\n-\r\n-assignUserCourse();\r\n+import assignUserCourse from '.\u002Ftools\u002Fassign-user-course';\n+\n+assignUserCourse();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourse-material.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourse-material.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourse-material.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourse-material.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,301 +1,301 @@\n-document.addEventListener( 'DOMContentLoaded', function() {\r\n-\tconst $ = window.jQuery;\r\n-\tconst postID = document.getElementById( 'current-material-post-id' ).value,\r\n-\t\tmax_file_size = document.getElementById( 'material-max-file-size' ).value,\r\n-\t\taccept_file = document.querySelector( '.lp-material--field-upload' ).getAttribute( 'accept' ).split( ',' ),\r\n-\t\tcan_upload = document.getElementById( 'available-to-upload' ),\r\n-\t\tadd_btn = document.getElementById( 'btn-lp--add-material' ),\r\n-\t\tgroup_template = document.getElementById( 'lp-material--add-material-template' ),\r\n-\t\tmaterial__group_container = document.getElementById( 'lp-material--group-container' ),\r\n-\t\tmaterial_tab = document.getElementById( 'lp-material-container' ),\r\n-\t\tmaterial_save_btn = document.getElementById( 'btn-lp--save-material' );\r\n-\tconst getResponse = async ( ele, postID ) => {\r\n-\t\tconst elementMaterial = document.querySelector( '.lp-material--table tbody' );\r\n-\t\ttry {\r\n-\t\t\tconst url = `${ lpDataAdmin.lp_rest_url }lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`;\r\n-\t\t\tfetch( url, {\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\r\n-\t\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t},\r\n-\t\t\t} )\r\n-\t\t\t\t.then( ( response ) => response.json() )\r\n-\t\t\t\t.then( ( response ) => {\r\n-\t\t\t\t\tconst { data, status } = response;\r\n-\t\t\t\t\tif ( status !== 'success' ) {\r\n-\t\t\t\t\t\tconsole.error( response.message );\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( data && data.items && data.items.length > 0 ) {\r\n-\t\t\t\t\t\tconst materials = data.items;\r\n-\t\t\t\t\t\tif ( ele.querySelector( '.lp-skeleton-animation' ) ) {\r\n-\t\t\t\t\t\t\tele.querySelector( '.lp-skeleton-animation' ).remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tfor ( let i = 0; i \u003C materials.length; i++ ) {\r\n-\t\t\t\t\t\t\tinsertRow( elementMaterial, materials[ i ] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} )\r\n-\t\t\t\t.catch( ( err ) => console.log( err ) );\r\n-\t\t} catch ( error ) {\r\n-\t\t\tconsole.log( error.message );\r\n-\t\t}\r\n-\t};\r\n-\tconst insertRow = ( parent, data ) => {\r\n-\t\tif ( ! parent ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst delete_btn_text = document.getElementById( 'delete-material-row-text' ).value;\r\n-\t\tparent.insertAdjacentHTML(\r\n-\t\t\t'beforeend',\r\n-\t\t\t`\u003Ctr data-id=\"${ data.file_id }\" data-sort=\"${ data.orders }\" >\r\n-              \u003Ctd class=\"sort\">\u003Cspan class=\"dashicons dashicons-menu\">\u003C\u002Fspan> ${ data.file_name }\u003C\u002Ftd>\r\n-              \u003Ctd>${ capitalizeFirstChar( data.method ) }\u003C\u002Ftd>\r\n-              \u003Ctd>\u003Ca href=\"javascript:void(0)\" class=\"delete-material-row\" data-id=\"${ data.file_id }\">${ delete_btn_text }\u003C\u002Fa>\u003C\u002Ftd>\r\n-            \u003C\u002Ftr>`\r\n-\t\t);\r\n-\t};\r\n-\tconst capitalizeFirstChar = ( str ) => str.charAt( 0 ).toUpperCase() + str.substring( 1 );\r\n-\t\u002F\u002Fload material data from API\r\n-\tgetResponse( material_tab, postID );\r\n-\r\n-\t\u002F\u002Fadd material group field\r\n-\tadd_btn.addEventListener( 'click', function( e ) {\r\n-\t\tconst can_upload_data = ~~this.getAttribute( 'can-upload' );\r\n-\t\tconst groups = material__group_container.querySelectorAll( '.lp-material--group' ).length;\r\n-\t\tif ( groups >= can_upload_data ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t\tmaterial__group_container.insertAdjacentHTML( 'afterbegin', group_template.innerHTML );\r\n-\t} );\r\n-\t\u002F\u002Fswitch input when change method between \"upload\" and \"external\"\r\n-\tmaterial_tab.addEventListener( 'change', function( event ) {\r\n-\t\tconst target = event.target;\r\n-\t\tif ( target.classList.contains( 'lp-material--field-method' ) ) {\r\n-\t\t\tconst method = target.value;\r\n-\t\t\tconst upload_field_template = document.getElementById( 'lp-material--upload-field-template' ).innerHTML,\r\n-\t\t\t\texternal_field_template = document.getElementById( 'lp-material--external-field-template' ).innerHTML;\r\n-\t\t\tswitch ( method ) {\r\n-\t\t\tcase 'upload' :\r\n-\t\t\t\ttarget.parentNode.insertAdjacentHTML( 'afterend', upload_field_template );\r\n-\t\t\t\ttarget.closest( '.lp-material--group' ).querySelector( '.lp-material--external-wrap' ).remove();\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'external' :\r\n-\t\t\t\ttarget.parentNode.insertAdjacentHTML( 'afterend', external_field_template );\r\n-\t\t\t\ttarget.closest( '.lp-material--group' ).querySelector( '.lp-material--upload-wrap' ).remove();\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif ( target.classList.contains( 'lp-material--field-upload' ) ) {\r\n-\t\t\tif ( target.value && target.files.length > 0 ) {\r\n-\t\t\t\tif ( ! accept_file.includes( target.files[ 0 ].type ) ) {\r\n-\t\t\t\t\talert( 'This file is not allowed! Please choose another file!' );\r\n-\t\t\t\t\ttarget.value = '';\r\n-\t\t\t\t} else if ( target.files[ 0 ].size > max_file_size * 1024 * 1024 ) {\r\n-\t\t\t\t\talert( `This file size is greater than ${ max_file_size }MB! Please choose another file!` );\r\n-\t\t\t\t\ttarget.value = '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-\t\u002F\u002F Dynamic click action ...\r\n-\tmaterial_tab.addEventListener( 'click', function( event ) {\r\n-\t\tconst target = event.target;\r\n-\t\tif ( target.classList.contains( 'lp-material--delete' ) && target.nodeName == 'BUTTON' ) {\r\n-\t\t\ttarget.closest( '.lp-material--group' ).remove();\r\n-\t\t} else if ( target.classList.contains( 'lp-material-save-field' ) ) {\r\n-\t\t\t\u002F\u002F save a file\r\n-\t\t\tlet material = target.closest( '.lp-material--group' );\r\n-\t\t\tmaterial = singleNode( material );\r\n-\t\t\t\u002F\u002F target.classList.add( 'loading' );\r\n-\t\t\tlpSaveMaterial( material, true, target );\r\n-\t\t\t\u002F\u002F target.classList.remove( 'loading' );\r\n-\t\t}\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t\u002F\u002Fsave all material files\r\n-\tmaterial_save_btn.addEventListener( 'click', function( event ) {\r\n-\t\tconst materials = material__group_container.querySelectorAll( '.lp-material--group' );\r\n-\t\tif ( materials.length > 0 ) {\r\n-\t\t\t\u002F\u002F material_save_btn.classList.add( 'loading' );\r\n-\t\t\tlpSaveMaterial( materials, false, material_save_btn );\r\n-\t\t\t\u002F\u002F material_save_btn.classList.remove( 'loading' );\r\n-\t\t}\r\n-\t} );\r\n-\tfunction lpSaveMaterial( materials, is_single = false, target ) {\r\n-\t\tif ( materials.length > 0 ) {\r\n-\t\t\tlet material_data = [];\r\n-\t\t\tlet formData = new FormData(),\r\n-\t\t\t\tsend_request = true;\r\n-\r\n-\t\t\tmaterials.forEach( function( ele, index ) {\r\n-\t\t\t\tconst label = ele.querySelector( '.lp-material--field-title' ).value,\r\n-\t\t\t\t\tmethod = ele.querySelector( '.lp-material--field-method' ).value,\r\n-\t\t\t\t\texternal_field = ele.querySelector( '.lp-material--field-external-link' ),\r\n-\t\t\t\t\tupload_field = ele.querySelector( '.lp-material--field-upload' );\r\n-\t\t\t\tlet file, link;\r\n-\t\t\t\tif ( ! label ) {\r\n-\t\t\t\t\tsend_request = false;\r\n-\t\t\t\t}\r\n-\t\t\t\tswitch ( method ) {\r\n-\t\t\t\tcase 'upload' :\r\n-\t\t\t\t\tif ( upload_field.value ) {\r\n-\t\t\t\t\t\tfile = upload_field.files[ 0 ].name;\r\n-\t\t\t\t\t\tlink = '';\r\n-\t\t\t\t\t\tformData.append( 'file[]', upload_field.files[ 0 ] );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tsend_request = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'external' :\r\n-\t\t\t\t\tlink = external_field.value;\r\n-\t\t\t\t\tfile = '';\r\n-\t\t\t\t\tif ( ! link ) {\r\n-\t\t\t\t\t\tsend_request = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\tmaterial_data.push( { label, method, file, link } );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tif ( ! send_request ) {\r\n-\t\t\t\talert( 'Enter file title, choose file or enter file link!' );\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F console.log(material_data);\r\n-\t\t\t\tmaterial_data = JSON.stringify( material_data );\r\n-\t\t\t\tconst url = `${ lpGlobalSettings.rest }lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`;\r\n-\t\t\t\tformData.append( 'data', material_data );\r\n-\t\t\t\ttarget.classList.add( 'loading' );\r\n-\r\n-\t\t\t\tfetch( url, {\r\n-\t\t\t\t\tmethod: 'POST',\r\n-\t\t\t\t\theaders: {\r\n-\t\t\t\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tbody: formData,\r\n-\t\t\t\t} ) \u002F\u002F wrapped\r\n-\t\t\t\t\t.then( ( res ) => res.text() )\r\n-\t\t\t\t\t.then( ( resString ) => {\r\n-\t\t\t\t\t\t\u002F\u002F console.log( data );\r\n-\t\t\t\t\t\tif ( ! is_single ) {\r\n-\t\t\t\t\t\t\tmaterial__group_container.innerHTML = '';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tmaterials[ 0 ].remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tconst res = JSON.parse( resString );\r\n-\t\t\t\t\t\tconst { message, data, status } = res;\r\n-\t\t\t\t\t\talert( message );\r\n-\r\n-\t\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\t\tif ( data.length > 0 ) {\r\n-\t\t\t\t\t\t\t\tconst material_table = document.querySelector( '.lp-material--table' );\r\n-\t\t\t\t\t\t\t\tconst thead = material_table.querySelector( 'thead' );\r\n-\t\t\t\t\t\t\t\tconst tbody = material_table.querySelector( 'tbody' );\r\n-\r\n-\t\t\t\t\t\t\t\tthead.classList.remove( 'hidden' );\r\n-\t\t\t\t\t\t\t\tfor ( let i = 0; i \u003C data.length; i++ ) {\r\n-\t\t\t\t\t\t\t\t\tconst row = data[ i ];\r\n-\t\t\t\t\t\t\t\t\tinsertRow( tbody, row );\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\tcan_upload.innerText = parseInt( can_upload.innerText ) - data.length;\r\n-\t\t\t\t\t\t\t\tadd_btn.setAttribute( 'can-upload', can_upload.innerText );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} )\r\n-\t\t\t\t\t.finally( () => {\r\n-\t\t\t\t\t\ttarget.classList.remove( 'loading' );\r\n-\t\t\t\t\t} )\r\n-\t\t\t\t\t.catch( ( err ) => console.log( err ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\t\u002F\u002Fdelete material\r\n-\tdocument.addEventListener( 'click', function( e ) {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target.classList.contains( 'delete-material-row' ) && target.nodeName == 'A' ) {\r\n-\t\t\tconst rowID = target.getAttribute( 'data-id' ), \u002F\u002Fmaterial file ID\r\n-\t\t\t\tmessage = document.getElementById( 'delete-material-message' ).value;\u002F\u002FDelete message content\r\n-\t\t\tif ( confirm( message ) ) {\r\n-\t\t\t\twp.apiFetch( {\r\n-\t\t\t\t\tpath: `lp\u002Fv1\u002Fmaterial\u002F${ rowID }`,\r\n-\t\t\t\t\tmethod: 'DELETE',\r\n-\t\t\t\t\tdata: {\r\n-\t\t\t\t\t\titem_id: postID,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t} ).then( ( res ) => {\r\n-\t\t\t\t\t\u002F\u002F console.log( res );\r\n-\t\t\t\t\tif ( res.status !== 200 || ! res.delete ) {\r\n-\t\t\t\t\t\talert( res.message );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\ttarget.closest( 'tr' ).remove();\r\n-\t\t\t\t\t\tcan_upload.innerText = ~~can_upload.innerText + 1;\r\n-\t\t\t\t\t\tadd_btn.setAttribute( 'can-upload', ~~can_upload.innerText );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} ).catch( ( err ) => {\r\n-\t\t\t\t\tconsole.log( err );\r\n-\t\t\t\t} ).finally( () => {\r\n-\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-\tconst singleNode = ( ( nodeList ) => ( node ) => {\r\n-\t\tconst layer = { \u002F\u002F define our specific case\r\n-\t\t\t0: { value: node, enumerable: true },\r\n-\t\t\tlength: { value: 1 },\r\n-\t\t\titem: {\r\n-\t\t\t\tvalue( i ) {\r\n-\t\t\t\t\treturn this[ +i || 0 ];\r\n-\t\t\t\t},\r\n-\t\t\t\tenumerable: true,\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\treturn Object.create( nodeList, layer ); \u002F\u002F put our case on top of true NodeList\r\n-\t} )( document.createDocumentFragment().childNodes ); \u002F\u002F scope a true NodeList\r\n-\t$( '.lp-material--table tbody' ).sortable( {\r\n-\t\titems: 'tr',\r\n-\t\tcursor: 'move',\r\n-\t\taxis: 'y',\r\n-\t\thandle: 'td.sort',\r\n-\t\tscrollSensitivity: 40,\r\n-\t\tforcePlaceholderSize: true,\r\n-\t\thelper: 'clone',\r\n-\t\topacity: 0.65,\r\n-\t\tupdate( event, ui ) {\r\n-\t\t\t$( this ).sortable( 'option', 'disabled', true );\r\n-\t\t\tupdateSort();\r\n-\t\t\t$( this ).sortable( 'option', 'disabled', false );\r\n-\t\t},\r\n-\t} );\r\n-\tfunction updateSort() {\r\n-\t\tconst items = $( '.lp-material--table tbody tr' ),\r\n-\t\t\tdata = [];\r\n-\t\t\u002F\u002F $( \".lp-material--table tbody tr\" ).sortable( \"option\", \"disabled\", true );\r\n-\t\titems.each( function( i, item ) {\r\n-\t\t\t$( this ).attr( 'data-sort', i + 1 );\r\n-\t\t\tdata.push( { file_id: ~~$( this ).attr( 'data-id' ), orders: i + 1 } );\r\n-\t\t} );\r\n-\t\twp.apiFetch( {\r\n-\t\t\tpath: `lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`,\r\n-\t\t\tmethod: 'PUT',\r\n-\t\t\tdata: {\r\n-\t\t\t\tsort_arr: JSON.stringify( data ),\r\n-\t\t\t},\r\n-\t\t} ).then( ( res ) => {\r\n-\t\t\tif ( res.status == 200 ) {\r\n-\t\t\t\t\u002F\u002F\r\n-\t\t\t} else {\r\n-\t\t\t\talert( 'Sort table fail.' );\r\n-\t\t\t}\r\n-\t\t} ).catch( ( err ) => {\r\n-\t\t\tconsole.log( err );\r\n-\t\t} ).finally( () => {\r\n-\r\n-\t\t} );\r\n-\t\t\u002F\u002F $( \".lp-material--table tbody tr\" ).sortable( \"option\", \"disabled\", false );\r\n-\t\t\u002F\u002F console.log( data );\r\n-\t}\r\n-} );\r\n+document.addEventListener( 'DOMContentLoaded', function() {\n+\tconst $ = window.jQuery;\n+\tconst postID = document.getElementById( 'current-material-post-id' ).value,\n+\t\tmax_file_size = document.getElementById( 'material-max-file-size' ).value,\n+\t\taccept_file = document.querySelector( '.lp-material--field-upload' ).getAttribute( 'accept' ).split( ',' ),\n+\t\tcan_upload = document.getElementById( 'available-to-upload' ),\n+\t\tadd_btn = document.getElementById( 'btn-lp--add-material' ),\n+\t\tgroup_template = document.getElementById( 'lp-material--add-material-template' ),\n+\t\tmaterial__group_container = document.getElementById( 'lp-material--group-container' ),\n+\t\tmaterial_tab = document.getElementById( 'lp-material-container' ),\n+\t\tmaterial_save_btn = document.getElementById( 'btn-lp--save-material' );\n+\tconst getResponse = async ( ele, postID ) => {\n+\t\tconst elementMaterial = document.querySelector( '.lp-material--table tbody' );\n+\t\ttry {\n+\t\t\tconst url = `${ lpDataAdmin.lp_rest_url }lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`;\n+\t\t\tfetch( url, {\n+\t\t\t\tmethod: 'GET',\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\n+\t\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t},\n+\t\t\t} )\n+\t\t\t\t.then( ( response ) => response.json() )\n+\t\t\t\t.then( ( response ) => {\n+\t\t\t\t\tconst { data, status } = response;\n+\t\t\t\t\tif ( status !== 'success' ) {\n+\t\t\t\t\t\tconsole.error( response.message );\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( data && data.items && data.items.length > 0 ) {\n+\t\t\t\t\t\tconst materials = data.items;\n+\t\t\t\t\t\tif ( ele.querySelector( '.lp-skeleton-animation' ) ) {\n+\t\t\t\t\t\t\tele.querySelector( '.lp-skeleton-animation' ).remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tfor ( let i = 0; i \u003C materials.length; i++ ) {\n+\t\t\t\t\t\t\tinsertRow( elementMaterial, materials[ i ] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} )\n+\t\t\t\t.catch( ( err ) => console.log( err ) );\n+\t\t} catch ( error ) {\n+\t\t\tconsole.log( error.message );\n+\t\t}\n+\t};\n+\tconst insertRow = ( parent, data ) => {\n+\t\tif ( ! parent ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst delete_btn_text = document.getElementById( 'delete-material-row-text' ).value;\n+\t\tparent.insertAdjacentHTML(\n+\t\t\t'beforeend',\n+\t\t\t`\u003Ctr data-id=\"${ data.file_id }\" data-sort=\"${ data.orders }\" >\n+              \u003Ctd class=\"sort\">\u003Cspan class=\"dashicons dashicons-menu\">\u003C\u002Fspan> ${ data.file_name }\u003C\u002Ftd>\n+              \u003Ctd>${ capitalizeFirstChar( data.method ) }\u003C\u002Ftd>\n+              \u003Ctd>\u003Ca href=\"javascript:void(0)\" class=\"delete-material-row\" data-id=\"${ data.file_id }\">${ delete_btn_text }\u003C\u002Fa>\u003C\u002Ftd>\n+            \u003C\u002Ftr>`\n+\t\t);\n+\t};\n+\tconst capitalizeFirstChar = ( str ) => str.charAt( 0 ).toUpperCase() + str.substring( 1 );\n+\t\u002F\u002Fload material data from API\n+\tgetResponse( material_tab, postID );\n+\n+\t\u002F\u002Fadd material group field\n+\tadd_btn.addEventListener( 'click', function( e ) {\n+\t\tconst can_upload_data = ~~this.getAttribute( 'can-upload' );\n+\t\tconst groups = material__group_container.querySelectorAll( '.lp-material--group' ).length;\n+\t\tif ( groups >= can_upload_data ) {\n+\t\t\treturn false;\n+\t\t}\n+\t\tmaterial__group_container.insertAdjacentHTML( 'afterbegin', group_template.innerHTML );\n+\t} );\n+\t\u002F\u002Fswitch input when change method between \"upload\" and \"external\"\n+\tmaterial_tab.addEventListener( 'change', function( event ) {\n+\t\tconst target = event.target;\n+\t\tif ( target.classList.contains( 'lp-material--field-method' ) ) {\n+\t\t\tconst method = target.value;\n+\t\t\tconst upload_field_template = document.getElementById( 'lp-material--upload-field-template' ).innerHTML,\n+\t\t\t\texternal_field_template = document.getElementById( 'lp-material--external-field-template' ).innerHTML;\n+\t\t\tswitch ( method ) {\n+\t\t\tcase 'upload' :\n+\t\t\t\ttarget.parentNode.insertAdjacentHTML( 'afterend', upload_field_template );\n+\t\t\t\ttarget.closest( '.lp-material--group' ).querySelector( '.lp-material--external-wrap' ).remove();\n+\t\t\t\tbreak;\n+\t\t\tcase 'external' :\n+\t\t\t\ttarget.parentNode.insertAdjacentHTML( 'afterend', external_field_template );\n+\t\t\t\ttarget.closest( '.lp-material--group' ).querySelector( '.lp-material--upload-wrap' ).remove();\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t\tif ( target.classList.contains( 'lp-material--field-upload' ) ) {\n+\t\t\tif ( target.value && target.files.length > 0 ) {\n+\t\t\t\tif ( ! accept_file.includes( target.files[ 0 ].type ) ) {\n+\t\t\t\t\talert( 'This file is not allowed! Please choose another file!' );\n+\t\t\t\t\ttarget.value = '';\n+\t\t\t\t} else if ( target.files[ 0 ].size > max_file_size * 1024 * 1024 ) {\n+\t\t\t\t\talert( `This file size is greater than ${ max_file_size }MB! Please choose another file!` );\n+\t\t\t\t\ttarget.value = '';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t} );\n+\t\u002F\u002F Dynamic click action ...\n+\tmaterial_tab.addEventListener( 'click', function( event ) {\n+\t\tconst target = event.target;\n+\t\tif ( target.classList.contains( 'lp-material--delete' ) && target.nodeName == 'BUTTON' ) {\n+\t\t\ttarget.closest( '.lp-material--group' ).remove();\n+\t\t} else if ( target.classList.contains( 'lp-material-save-field' ) ) {\n+\t\t\t\u002F\u002F save a file\n+\t\t\tlet material = target.closest( '.lp-material--group' );\n+\t\t\tmaterial = singleNode( material );\n+\t\t\t\u002F\u002F target.classList.add( 'loading' );\n+\t\t\tlpSaveMaterial( material, true, target );\n+\t\t\t\u002F\u002F target.classList.remove( 'loading' );\n+\t\t}\n+\t\treturn false;\n+\t} );\n+\n+\t\u002F\u002Fsave all material files\n+\tmaterial_save_btn.addEventListener( 'click', function( event ) {\n+\t\tconst materials = material__group_container.querySelectorAll( '.lp-material--group' );\n+\t\tif ( materials.length > 0 ) {\n+\t\t\t\u002F\u002F material_save_btn.classList.add( 'loading' );\n+\t\t\tlpSaveMaterial( materials, false, material_save_btn );\n+\t\t\t\u002F\u002F material_save_btn.classList.remove( 'loading' );\n+\t\t}\n+\t} );\n+\tfunction lpSaveMaterial( materials, is_single = false, target ) {\n+\t\tif ( materials.length > 0 ) {\n+\t\t\tlet material_data = [];\n+\t\t\tlet formData = new FormData(),\n+\t\t\t\tsend_request = true;\n+\n+\t\t\tmaterials.forEach( function( ele, index ) {\n+\t\t\t\tconst label = ele.querySelector( '.lp-material--field-title' ).value,\n+\t\t\t\t\tmethod = ele.querySelector( '.lp-material--field-method' ).value,\n+\t\t\t\t\texternal_field = ele.querySelector( '.lp-material--field-external-link' ),\n+\t\t\t\t\tupload_field = ele.querySelector( '.lp-material--field-upload' );\n+\t\t\t\tlet file, link;\n+\t\t\t\tif ( ! label ) {\n+\t\t\t\t\tsend_request = false;\n+\t\t\t\t}\n+\t\t\t\tswitch ( method ) {\n+\t\t\t\tcase 'upload' :\n+\t\t\t\t\tif ( upload_field.value ) {\n+\t\t\t\t\t\tfile = upload_field.files[ 0 ].name;\n+\t\t\t\t\t\tlink = '';\n+\t\t\t\t\t\tformData.append( 'file[]', upload_field.files[ 0 ] );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tsend_request = false;\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'external' :\n+\t\t\t\t\tlink = external_field.value;\n+\t\t\t\t\tfile = '';\n+\t\t\t\t\tif ( ! link ) {\n+\t\t\t\t\t\tsend_request = false;\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\tmaterial_data.push( { label, method, file, link } );\n+\t\t\t} );\n+\n+\t\t\tif ( ! send_request ) {\n+\t\t\t\talert( 'Enter file title, choose file or enter file link!' );\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F console.log(material_data);\n+\t\t\t\tmaterial_data = JSON.stringify( material_data );\n+\t\t\t\tconst url = `${ lpGlobalSettings.rest }lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`;\n+\t\t\t\tformData.append( 'data', material_data );\n+\t\t\t\ttarget.classList.add( 'loading' );\n+\n+\t\t\t\tfetch( url, {\n+\t\t\t\t\tmethod: 'POST',\n+\t\t\t\t\theaders: {\n+\t\t\t\t\t\t'X-WP-Nonce': lpGlobalSettings.nonce,\n+\t\t\t\t\t},\n+\t\t\t\t\tbody: formData,\n+\t\t\t\t} ) \u002F\u002F wrapped\n+\t\t\t\t\t.then( ( res ) => res.text() )\n+\t\t\t\t\t.then( ( resString ) => {\n+\t\t\t\t\t\t\u002F\u002F console.log( data );\n+\t\t\t\t\t\tif ( ! is_single ) {\n+\t\t\t\t\t\t\tmaterial__group_container.innerHTML = '';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tmaterials[ 0 ].remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tconst res = JSON.parse( resString );\n+\t\t\t\t\t\tconst { message, data, status } = res;\n+\t\t\t\t\t\talert( message );\n+\n+\t\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\t\tif ( data.length > 0 ) {\n+\t\t\t\t\t\t\t\tconst material_table = document.querySelector( '.lp-material--table' );\n+\t\t\t\t\t\t\t\tconst thead = material_table.querySelector( 'thead' );\n+\t\t\t\t\t\t\t\tconst tbody = material_table.querySelector( 'tbody' );\n+\n+\t\t\t\t\t\t\t\tthead.classList.remove( 'hidden' );\n+\t\t\t\t\t\t\t\tfor ( let i = 0; i \u003C data.length; i++ ) {\n+\t\t\t\t\t\t\t\t\tconst row = data[ i ];\n+\t\t\t\t\t\t\t\t\tinsertRow( tbody, row );\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\tcan_upload.innerText = parseInt( can_upload.innerText ) - data.length;\n+\t\t\t\t\t\t\t\tadd_btn.setAttribute( 'can-upload', can_upload.innerText );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} )\n+\t\t\t\t\t.finally( () => {\n+\t\t\t\t\t\ttarget.classList.remove( 'loading' );\n+\t\t\t\t\t} )\n+\t\t\t\t\t.catch( ( err ) => console.log( err ) );\n+\t\t\t}\n+\t\t}\n+\t}\n+\t\u002F\u002Fdelete material\n+\tdocument.addEventListener( 'click', function( e ) {\n+\t\tconst target = e.target;\n+\t\tif ( target.classList.contains( 'delete-material-row' ) && target.nodeName == 'A' ) {\n+\t\t\tconst rowID = target.getAttribute( 'data-id' ), \u002F\u002Fmaterial file ID\n+\t\t\t\tmessage = document.getElementById( 'delete-material-message' ).value;\u002F\u002FDelete message content\n+\t\t\tif ( confirm( message ) ) {\n+\t\t\t\twp.apiFetch( {\n+\t\t\t\t\tpath: `lp\u002Fv1\u002Fmaterial\u002F${ rowID }`,\n+\t\t\t\t\tmethod: 'DELETE',\n+\t\t\t\t\tdata: {\n+\t\t\t\t\t\titem_id: postID,\n+\t\t\t\t\t},\n+\t\t\t\t} ).then( ( res ) => {\n+\t\t\t\t\t\u002F\u002F console.log( res );\n+\t\t\t\t\tif ( res.status !== 200 || ! res.delete ) {\n+\t\t\t\t\t\talert( res.message );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\ttarget.closest( 'tr' ).remove();\n+\t\t\t\t\t\tcan_upload.innerText = ~~can_upload.innerText + 1;\n+\t\t\t\t\t\tadd_btn.setAttribute( 'can-upload', ~~can_upload.innerText );\n+\t\t\t\t\t}\n+\t\t\t\t} ).catch( ( err ) => {\n+\t\t\t\t\tconsole.log( err );\n+\t\t\t\t} ).finally( () => {\n+\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t}\n+\t} );\n+\tconst singleNode = ( ( nodeList ) => ( node ) => {\n+\t\tconst layer = { \u002F\u002F define our specific case\n+\t\t\t0: { value: node, enumerable: true },\n+\t\t\tlength: { value: 1 },\n+\t\t\titem: {\n+\t\t\t\tvalue( i ) {\n+\t\t\t\t\treturn this[ +i || 0 ];\n+\t\t\t\t},\n+\t\t\t\tenumerable: true,\n+\t\t\t},\n+\t\t};\n+\t\treturn Object.create( nodeList, layer ); \u002F\u002F put our case on top of true NodeList\n+\t} )( document.createDocumentFragment().childNodes ); \u002F\u002F scope a true NodeList\n+\t$( '.lp-material--table tbody' ).sortable( {\n+\t\titems: 'tr',\n+\t\tcursor: 'move',\n+\t\taxis: 'y',\n+\t\thandle: 'td.sort',\n+\t\tscrollSensitivity: 40,\n+\t\tforcePlaceholderSize: true,\n+\t\thelper: 'clone',\n+\t\topacity: 0.65,\n+\t\tupdate( event, ui ) {\n+\t\t\t$( this ).sortable( 'option', 'disabled', true );\n+\t\t\tupdateSort();\n+\t\t\t$( this ).sortable( 'option', 'disabled', false );\n+\t\t},\n+\t} );\n+\tfunction updateSort() {\n+\t\tconst items = $( '.lp-material--table tbody tr' ),\n+\t\t\tdata = [];\n+\t\t\u002F\u002F $( \".lp-material--table tbody tr\" ).sortable( \"option\", \"disabled\", true );\n+\t\titems.each( function( i, item ) {\n+\t\t\t$( this ).attr( 'data-sort', i + 1 );\n+\t\t\tdata.push( { file_id: ~~$( this ).attr( 'data-id' ), orders: i + 1 } );\n+\t\t} );\n+\t\twp.apiFetch( {\n+\t\t\tpath: `lp\u002Fv1\u002Fmaterial\u002Fitem-materials\u002F${ postID }`,\n+\t\t\tmethod: 'PUT',\n+\t\t\tdata: {\n+\t\t\t\tsort_arr: JSON.stringify( data ),\n+\t\t\t},\n+\t\t} ).then( ( res ) => {\n+\t\t\tif ( res.status == 200 ) {\n+\t\t\t\t\u002F\u002F\n+\t\t\t} else {\n+\t\t\t\talert( 'Sort table fail.' );\n+\t\t\t}\n+\t\t} ).catch( ( err ) => {\n+\t\t\tconsole.log( err );\n+\t\t} ).finally( () => {\n+\n+\t\t} );\n+\t\t\u002F\u002F $( \".lp-material--table tbody tr\" ).sortable( \"option\", \"disabled\", false );\n+\t\t\u002F\u002F console.log( data );\n+\t}\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fgenerate-with-ai.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,376 +1,388 @@\n-\u002F**\r\n- * Create course with AI\r\n- *\u002F\r\n-\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import SweetAlert from 'sweetalert2';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-let lp_structure_course;\r\n-let lp_is_generating_course_data = false;\r\n-const lp_course_ai_setting = JSON.parse( localStorage.getItem( 'lp_course_ai_setting' ) ) || {};\r\n-\r\n-export class CreateCourseViaAI {\r\n-\tconstructor() {\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telGenerateDataAiWrap: '.lp-generate-data-ai-wrap',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tif ( ! lpData?.enable_open_ai ) {\r\n-\t\t\tlpUtils.lpOnElementReady( '.page-title-action', ( el ) => {\r\n-\t\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t\t'afterend',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t\t);\r\n-\t\t\t} );\r\n-\t\t} else {\r\n-\t\t\tlpUtils.lpOnElementReady( '.page-title-action', ( el ) => {\r\n-\t\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t\t'afterend',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t\t);\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tthis.events();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tif ( CreateCourseViaAI._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tCreateCourseViaAI._loadedEvents = true;\r\n-\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-warning-enable-ai',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.showPopupEnableAI.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-generate-course-with-ai',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.showPopupCreateFullCourse.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-step',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.showStep.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-generate-prompt',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.generatePrompt.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-call-open-ai',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.generateDataCourse.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-create-course',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.createCourse.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-close-ai-popup',\r\n-\t\t\t\t\u002F\u002Fclass: this,\r\n-\t\t\t\tcallBack: ( args ) => {\r\n-\t\t\t\t\tconst { e, target } = args;\r\n-\r\n-\t\t\t\t\tconst message = lpData.i18n.confirm_close_ai;\r\n-\r\n-\t\t\t\t\tif ( ! lp_is_generating_course_data ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t} else if ( confirm( message ) ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Testing custom confirm box\r\n-\t\t\t\t\t\u002F*if ( confirm( message ) ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t}*\u002F\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Show popup warning enable AI before using.\r\n-\tshowPopupEnableAI() {\r\n-\t\tconst modalTemplate = document.querySelector( '#lp-tmpl-must-enable-ai' );\r\n-\r\n-\t\tif ( ! modalTemplate ) {\r\n-\t\t\tconsole.error( 'Enable OpenAI Modal Template not found!' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\thtml: modalTemplate.innerHTML,\r\n-\t\t\twidth: '420px',\r\n-\t\t\tshowCloseButton: false,\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tshowPopupCreateFullCourse() {\r\n-\t\tconst modalTemplate = document.querySelector(\r\n-\t\t\t'#lp-tmpl-create-course-ai'\r\n-\t\t);\r\n-\r\n-\t\tif ( ! modalTemplate ) {\r\n-\t\t\tconsole.error( 'AI Create Full Course Modal Template not found!' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\thtml: modalTemplate.innerHTML,\r\n-\t\t\twidth: '60%',\r\n-\t\t\tshowCloseButton: false,\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t\tallowOutsideClick: false,\r\n-\t\t\tallowEscapeKey: false,\r\n-\t\t\tdidOpen: () => {\r\n-\t\t\t\tconst popup = SweetAlert.getPopup();\r\n-\t\t\t\tpopup.click();\r\n-\r\n-\t\t\t\tconst targetAudience = popup.querySelector( 'select[name=\"target_audience\"]' );\r\n-\t\t\t\tif ( targetAudience && lp_course_ai_setting?.target_audience ) {\r\n-\t\t\t\t\ttargetAudience.tomselect.setValue( lp_course_ai_setting.target_audience );\r\n-\t\t\t\t}\r\n-\t\t\t\tconst tone = popup.querySelector( 'select[name=\"tone\"]' );\r\n-\t\t\t\tif ( tone && lp_course_ai_setting?.tone ) {\r\n-\t\t\t\t\ttone.tomselect.setValue( lp_course_ai_setting.tone );\r\n-\t\t\t\t}\r\n-\t\t\t\tconst language = popup.querySelector( 'select[name=\"language\"]' );\r\n-\t\t\t\tif ( language && lp_course_ai_setting?.language ) {\r\n-\t\t\t\t\tlanguage.tomselect.setValue( lp_course_ai_setting.language );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\ttargetAudience.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\tlp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\r\n-\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\ttone.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\tlp_course_ai_setting.tone = tone.tomselect.getValue();\r\n-\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tlanguage.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\tconst value = language.tomselect.getValue();\r\n-\t\t\t\t\tlp_course_ai_setting.language = value ? [ value ] : [];\r\n-\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t} );\r\n-\t\t\t},\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isDismissed ) {\r\n-\t\t\t\tif ( lp_is_generating_course_data ) {\r\n-\t\t\t\t\tlp_is_generating_course_data = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tshowStep( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elBtnActions = target.closest( '.button-actions' );\r\n-\t\tconst elCreateCourseAIWrap = elBtnActions.closest( CreateCourseViaAI.selectors.elGenerateDataAiWrap );\r\n-\t\tlet step = parseInt( elBtnActions.dataset.step );\r\n-\r\n-\t\tconst stepAction = target.dataset.action;\r\n-\t\tif ( stepAction === 'next' ) {\r\n-\t\t\tstep++;\r\n-\t\t} else if ( stepAction === 'prev' ) {\r\n-\t\t\tstep--;\r\n-\t\t}\r\n-\r\n-\t\telBtnActions.dataset.step = step;\r\n-\t\tconst elForm = target.closest( 'form' );\r\n-\t\tconst elContentStep = elForm.querySelector( `.step-content[data-step=\"${ step }\"]` );\r\n-\t\tconst elItemStep = elCreateCourseAIWrap.querySelector( `.step-item[data-step=\"${ step }\"]` );\r\n-\t\telForm.querySelectorAll( '.step-content' ).forEach( ( el ) => el.classList.remove( 'active' ) );\r\n-\t\telContentStep.classList.add( 'active' );\r\n-\t\telCreateCourseAIWrap.querySelectorAll( '.step-item' ).forEach( ( el ) => el.classList.remove( 'active' ) );\r\n-\t\telItemStep.classList.add( 'active' );\r\n-\r\n-\t\t\u002F\u002F Get all buttons step to show\u002Fhide\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tconst elBtnSteps = form.querySelectorAll( 'button[data-step-show]' );\r\n-\t\telBtnSteps.forEach( ( el ) => {\r\n-\t\t\tconst stepsShow = el.dataset.stepShow.split( ',' ).map( ( s ) => parseInt( s.trim() ) );\r\n-\t\t\tif ( stepsShow.includes( step ) ) {\r\n-\t\t\t\tlpUtils.lpShowHideEl( el, 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\tlpUtils.lpShowHideEl( el, 0 );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create prompt from data config\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tgeneratePrompt( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Get dataSend\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\r\n-\t\t\t\t\telBtnNext.click();\r\n-\r\n-\t\t\t\t\tconst elPromptTextarea = form.querySelector( 'textarea[name=lp-openai-prompt-generated-field]' );\r\n-\t\t\t\t\telPromptTextarea.value = data;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Submit prompt to OpenAI to generate course data\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tgenerateDataCourse( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Get dataSend\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\r\n-\r\n-\t\tconst btnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\r\n-\t\tlpUtils.lpShowHideEl( btnPrev, 0 );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( lp_is_generating_course_data ) {\r\n-\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\u002F\u002F Save structure data\r\n-\t\t\t\t\tlp_structure_course = data.lp_structure_course;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set preview HTML\r\n-\t\t\t\t\tconst elResults = form.querySelector( '.lp-ai-generated-results' );\r\n-\t\t\t\t\telResults.innerHTML = data.lp_html_preview;\r\n-\r\n-\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\r\n-\t\t\t\t\telBtnNext.click();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t\tlpUtils.lpShowHideEl( btnPrev, 1 );\r\n-\t\t\t\tlp_is_generating_course_data = false;\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tlp_is_generating_course_data = true;\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create course with data of OpenAI\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tcreateCourse( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Get dataSend\r\n-\t\tconst dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend.lp_structure_course = lp_structure_course;\r\n-\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tconst elBtnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\r\n-\t\tlpUtils.lpShowHideEl( elBtnPrev, 0 );\r\n-\r\n-\t\tconst windowWidth = window.outerWidth;\r\n-\t\tlet alertWidth;\r\n-\t\tif ( windowWidth \u003C 768 ) {\r\n-\t\t\talertWidth = '90%';\r\n-\t\t} else {\r\n-\t\t\talertWidth = '30%';\r\n-\t\t}\r\n-\r\n-\t\tconst creatingCourseAiModal = document.querySelector( '#lp-tmpl-creating-course-ai' );\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\thtml: creatingCourseAiModal.innerHTML,\r\n-\t\t\tshowCloseButton: false,\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t\tallowOutsideClick: false,\r\n-\t\t\twidth: alertWidth,\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tSweetAlert.close();\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tsetTimeout(\r\n-\t\t\t\t\t\t() => {\r\n-\t\t\t\t\t\t\twindow.location.href = data.edit_course_url;\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t2000\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlpUtils.lpShowHideEl( elBtnPrev, 1 );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\tlpUtils.lpShowHideEl( elBtnPrev, 1 );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Create course with AI\n+ *\u002F\n+\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import SweetAlert from 'sweetalert2';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+let lp_structure_course;\n+let lp_is_generating_course_data = false;\n+const lp_course_ai_setting = JSON.parse( localStorage.getItem( 'lp_course_ai_setting' ) ) || {};\n+\n+export class CreateCourseViaAI {\n+\tconstructor( options = {} ) {\n+\t\tthis.options = {\n+\t\t\tautoInsertButton: true,\n+\t\t\tisCourseBuilder: false,\n+\t\t\tredirectDelayMs: 2000,\n+\t\t\t...options,\n+\t\t};\n+\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\telGenerateDataAiWrap: '.lp-generate-data-ai-wrap',\n+\t};\n+\n+\tinit() {\n+\t\tif ( this.options.autoInsertButton ) {\n+\t\t\tif ( ! lpData?.enable_open_ai ) {\n+\t\t\t\tlpUtils.lpOnElementReady( '.page-title-action', ( el ) => {\n+\t\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t\t'afterend',\n+\t\t\t\t\t\t`\u003Cbutton type=\"button\" class=\"lp-btn-warning-enable-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t\t);\n+\t\t\t\t} );\n+\t\t\t} else {\n+\t\t\t\tlpUtils.lpOnElementReady( '.page-title-action', ( el ) => {\n+\t\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t\t'afterend',\n+\t\t\t\t\t\t`\u003Cbutton type=\"button\" class=\"lp-btn-generate-course-with-ai lp-btn-ai-style\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t\t);\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t}\n+\n+\t\tthis.events();\n+\t}\n+\n+\tevents() {\n+\t\tif ( CreateCourseViaAI._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tCreateCourseViaAI._loadedEvents = true;\n+\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-warning-enable-ai',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.showPopupEnableAI.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-generate-course-with-ai',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.showPopupCreateFullCourse.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-step',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.showStep.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-generate-prompt',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.generatePrompt.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-call-open-ai',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.generateDataCourse.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-create-course',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.createCourse.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-close-ai-popup',\n+\t\t\t\t\u002F\u002Fclass: this,\n+\t\t\t\tcallBack: ( args ) => {\n+\t\t\t\t\tconst { e, target } = args;\n+\n+\t\t\t\t\tconst message = lpData?.i18n?.confirm_close_ai || 'Are you sure you want to close? Generate data will stop.';\n+\n+\t\t\t\t\tif ( ! lp_is_generating_course_data ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t} else if ( confirm( message ) ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Testing custom confirm box\n+\t\t\t\t\t\u002F*if ( confirm( message ) ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t}*\u002F\n+\t\t\t\t},\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\t\u002F\u002F Show popup warning enable AI before using.\n+\tshowPopupEnableAI() {\n+\t\tconst modalTemplate = document.querySelector( '#lp-tmpl-must-enable-ai' );\n+\n+\t\tif ( ! modalTemplate ) {\n+\t\t\tconsole.error( 'Enable OpenAI Modal Template not found!' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tSweetAlert.fire( {\n+\t\t\thtml: modalTemplate.innerHTML,\n+\t\t\twidth: '420px',\n+\t\t\tshowCloseButton: false,\n+\t\t\tshowConfirmButton: false,\n+\t\t} );\n+\t}\n+\n+\tshowPopupCreateFullCourse() {\n+\t\tconst modalTemplate = document.querySelector(\n+\t\t\t'#lp-tmpl-create-course-ai'\n+\t\t);\n+\n+\t\tif ( ! modalTemplate ) {\n+\t\t\tconsole.error( 'AI Create Full Course Modal Template not found!' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tSweetAlert.fire( {\n+\t\t\thtml: modalTemplate.innerHTML,\n+\t\t\twidth: '60%',\n+\t\t\tshowCloseButton: false,\n+\t\t\tshowConfirmButton: false,\n+\t\t\tallowOutsideClick: false,\n+\t\t\tallowEscapeKey: false,\n+\t\t\tdidOpen: () => {\n+\t\t\t\tconst popup = SweetAlert.getPopup();\n+\t\t\t\tpopup.click();\n+\n+\t\t\t\tconst targetAudience = popup.querySelector( 'select[name=\"target_audience\"]' );\n+\t\t\t\tif ( targetAudience && lp_course_ai_setting?.target_audience ) {\n+\t\t\t\t\ttargetAudience.tomselect.setValue( lp_course_ai_setting.target_audience );\n+\t\t\t\t}\n+\t\t\t\tconst tone = popup.querySelector( 'select[name=\"tone\"]' );\n+\t\t\t\tif ( tone && lp_course_ai_setting?.tone ) {\n+\t\t\t\t\ttone.tomselect.setValue( lp_course_ai_setting.tone );\n+\t\t\t\t}\n+\t\t\t\tconst language = popup.querySelector( 'select[name=\"language\"]' );\n+\t\t\t\tif ( language && lp_course_ai_setting?.language ) {\n+\t\t\t\t\tlanguage.tomselect.setValue( lp_course_ai_setting.language );\n+\t\t\t\t}\n+\n+\t\t\t\ttargetAudience.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\tlp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\n+\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t} );\n+\n+\t\t\t\ttone.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\tlp_course_ai_setting.tone = tone.tomselect.getValue();\n+\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t} );\n+\n+\t\t\t\tlanguage.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\tconst value = language.tomselect.getValue();\n+\t\t\t\t\tlp_course_ai_setting.language = value ? [ value ] : [];\n+\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t} );\n+\t\t\t},\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isDismissed ) {\n+\t\t\t\tif ( lp_is_generating_course_data ) {\n+\t\t\t\t\tlp_is_generating_course_data = false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\tshowStep( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst elBtnActions = target.closest( '.button-actions' );\n+\t\tconst elCreateCourseAIWrap = elBtnActions.closest( CreateCourseViaAI.selectors.elGenerateDataAiWrap );\n+\t\tlet step = parseInt( elBtnActions.dataset.step );\n+\n+\t\tconst stepAction = target.dataset.action;\n+\t\tif ( stepAction === 'next' ) {\n+\t\t\tstep++;\n+\t\t} else if ( stepAction === 'prev' ) {\n+\t\t\tstep--;\n+\t\t}\n+\n+\t\telBtnActions.dataset.step = step;\n+\t\tconst elForm = target.closest( 'form' );\n+\t\tconst elContentStep = elForm.querySelector( `.step-content[data-step=\"${ step }\"]` );\n+\t\tconst elItemStep = elCreateCourseAIWrap.querySelector( `.step-item[data-step=\"${ step }\"]` );\n+\t\telForm.querySelectorAll( '.step-content' ).forEach( ( el ) => el.classList.remove( 'active' ) );\n+\t\telContentStep.classList.add( 'active' );\n+\t\telCreateCourseAIWrap.querySelectorAll( '.step-item' ).forEach( ( el ) => el.classList.remove( 'active' ) );\n+\t\telItemStep.classList.add( 'active' );\n+\n+\t\t\u002F\u002F Get all buttons step to show\u002Fhide\n+\t\tconst form = target.closest( 'form' );\n+\t\tconst elBtnSteps = form.querySelectorAll( 'button[data-step-show]' );\n+\t\telBtnSteps.forEach( ( el ) => {\n+\t\t\tconst stepsShow = el.dataset.stepShow.split( ',' ).map( ( s ) => parseInt( s.trim() ) );\n+\t\t\tif ( stepsShow.includes( step ) ) {\n+\t\t\t\tlpUtils.lpShowHideEl( el, 1 );\n+\t\t\t} else {\n+\t\t\t\tlpUtils.lpShowHideEl( el, 0 );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F**\n+\t * Create prompt from data config\n+\t * @param args\n+\t *\u002F\n+\tgeneratePrompt( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Get dataSend\n+\t\tconst form = target.closest( 'form' );\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\n+\t\t\t\t\telBtnNext.click();\n+\n+\t\t\t\t\tconst elPromptTextarea = form.querySelector( 'textarea[name=lp-openai-prompt-generated-field]' );\n+\t\t\t\t\telPromptTextarea.value = data;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F**\n+\t * Submit prompt to OpenAI to generate course data\n+\t * @param args\n+\t *\u002F\n+\tgenerateDataCourse( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Get dataSend\n+\t\tconst form = target.closest( 'form' );\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\n+\n+\t\tconst btnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\n+\t\tlpUtils.lpShowHideEl( btnPrev, 0 );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( lp_is_generating_course_data ) {\n+\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\u002F\u002F Save structure data\n+\t\t\t\t\tlp_structure_course = data.lp_structure_course;\n+\n+\t\t\t\t\t\u002F\u002F Set preview HTML\n+\t\t\t\t\tconst elResults = form.querySelector( '.lp-ai-generated-results' );\n+\t\t\t\t\telResults.innerHTML = data.lp_html_preview;\n+\n+\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\n+\t\t\t\t\telBtnNext.click();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t\tlpUtils.lpShowHideEl( btnPrev, 1 );\n+\t\t\t\tlp_is_generating_course_data = false;\n+\t\t\t},\n+\t\t};\n+\n+\t\tlp_is_generating_course_data = true;\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F**\n+\t * Create course with data of OpenAI\n+\t * @param args\n+\t *\u002F\n+\tcreateCourse( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Get dataSend\n+\t\tconst dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend.lp_structure_course = lp_structure_course;\n+\t\tif ( this.options.isCourseBuilder ) {\n+\t\t\tdataSend.is_course_builder = 1;\n+\t\t}\n+\n+\t\tconst form = target.closest( 'form' );\n+\t\tconst elBtnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\n+\t\tlpUtils.lpShowHideEl( elBtnPrev, 0 );\n+\n+\t\tconst windowWidth = window.outerWidth;\n+\t\tlet alertWidth;\n+\t\tif ( windowWidth \u003C 768 ) {\n+\t\t\talertWidth = '90%';\n+\t\t} else {\n+\t\t\talertWidth = '30%';\n+\t\t}\n+\n+\t\tconst creatingCourseAiModal = document.querySelector( '#lp-tmpl-creating-course-ai' );\n+\t\tSweetAlert.fire( {\n+\t\t\thtml: creatingCourseAiModal.innerHTML,\n+\t\t\tshowCloseButton: false,\n+\t\t\tshowConfirmButton: false,\n+\t\t\tallowOutsideClick: false,\n+\t\t\twidth: alertWidth,\n+\t\t} );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tSweetAlert.close();\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tsetTimeout(\n+\t\t\t\t\t\t() => {\n+\t\t\t\t\t\t\twindow.location.href = data.edit_course_url;\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tthis.options.redirectDelayMs\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\tlpUtils.lpShowHideEl( elBtnPrev, 1 );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\tlpUtils.lpShowHideEl( elBtnPrev, 1 );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fview-students-modal.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fview-students-modal.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fview-students-modal.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fcourses\u002Fview-students-modal.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,358 +1,358 @@\n-import SweetAlert from 'sweetalert2';\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-\r\n-export class ViewStudentsModal {\r\n-\tconstructor() {\r\n-\t\tthis.isRequesting = false;\r\n-\t\tthis.activeCourseId = 0;\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\twrap: '#lp-modal-enrolled-wrap',\r\n-\t\tform: '#lp-modal-enrolled-form',\r\n-\t\ttoolbarTemplate: '#lp-tmpl-enrolled-students-toolbar-modal',\r\n-\t\ttargetTemplate: '#lp-tmpl-enrolled-students-target-modal',\r\n-\t\ttoolbar: '.lp-enrolled-students-table-toolbar--modal',\r\n-\t\tcourseTrigger: '.lp-btn-view-students',\r\n-\t\tsearchInput: '#lp-modal-enrolled-search-input',\r\n-\t\tstartDateInput: '#lp-modal-enrolled-filter-start-date',\r\n-\t\tendDateInput: '#lp-modal-enrolled-filter-end-date',\r\n-\t\tsearchBtn: '.lp-enrolled-btn-search-modal',\r\n-\t\tclearBtn: '.lp-enrolled-btn-clear-modal',\r\n-\t\tmodalSearchFields:\r\n-\t\t\t'#lp-modal-enrolled-search-input, #lp-modal-enrolled-filter-start-date, #lp-modal-enrolled-filter-end-date',\r\n-\t};\r\n-\r\n-\tsetButtonLoadingState( btn, isLoading ) {\r\n-\t\tif ( ! btn ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpUtils.lpSetLoadingEl( btn, isLoading ? 1 : 0 );\r\n-\t\tbtn.disabled = !! isLoading;\r\n-\t}\r\n-\r\n-\tinit() {\r\n-\t\tif ( ViewStudentsModal._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tViewStudentsModal._loadedEvents = true;\r\n-\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.courseTrigger,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.handleOpenModal.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.searchBtn,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.handleModalSearch.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.clearBtn,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.handleModalClear.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.modalSearchFields,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.handleModalSearchOnEnter.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\tlpUtils.eventHandlers( 'change', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.startDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkDatesRange.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ViewStudentsModal.selectors.endDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkDatesRange.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\thandleOpenModal( args ) {\r\n-\t\tconst btn = args?.target?.closest(\r\n-\t\t\tViewStudentsModal.selectors.courseTrigger\r\n-\t\t);\r\n-\t\tif (\r\n-\t\t\t! btn ||\r\n-\t\t\tthis.isRequesting ||\r\n-\t\t\tbtn.classList.contains( 'loading' ) ||\r\n-\t\t\tbtn.disabled\r\n-\t\t) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst courseId = parseInt( btn.dataset.courseId, 10 ) || 0;\r\n-\t\tif ( ! courseId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst courseTitle = btn.dataset.courseTitle || '';\r\n-\t\tthis.activeCourseId = courseId;\r\n-\r\n-\t\tthis.setButtonLoadingState( btn, true );\r\n-\t\tthis.openModal( courseId, courseTitle, btn );\r\n-\t}\r\n-\r\n-\thandleModalSearch( args ) {\r\n-\t\tconst btn = args?.target?.closest(\r\n-\t\t\tViewStudentsModal.selectors.searchBtn\r\n-\t\t);\r\n-\t\tif ( ! btn || ! this.activeCourseId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( args?.e ) {\r\n-\t\t\targs.e.preventDefault();\r\n-\t\t}\r\n-\r\n-\t\tif (\r\n-\t\t\tthis.isRequesting ||\r\n-\t\t\tbtn.classList.contains( 'loading' ) ||\r\n-\t\t\tbtn.disabled\r\n-\t\t) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.setButtonLoadingState( btn, true );\r\n-\t\tthis.loadEnrolledStudents(\r\n-\t\t\tthis.activeCourseId,\r\n-\t\t\t1,\r\n-\t\t\tbtn\r\n-\t\t);\r\n-\t}\r\n-\r\n-\thandleModalSearchOnEnter( args ) {\r\n-\t\tif ( args?.e ) {\r\n-\t\t\targs.e.preventDefault();\r\n-\t\t}\r\n-\r\n-\t\tconst form = this.getModalForm();\r\n-\t\tif ( ! form ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst btn = form.querySelector( ViewStudentsModal.selectors.searchBtn );\r\n-\t\tif ( ! btn ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.handleModalSearch( { ...args, target: btn } );\r\n-\t}\r\n-\r\n-\thandleModalClear( args ) {\r\n-\t\tconst btn = args?.target?.closest(\r\n-\t\t\tViewStudentsModal.selectors.clearBtn\r\n-\t\t);\r\n-\t\tconst form = this.getModalForm();\r\n-\t\tif ( ! btn || ! form || ! this.activeCourseId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( args?.e ) {\r\n-\t\t\targs.e.preventDefault();\r\n-\t\t}\r\n-\r\n-\t\tif (\r\n-\t\t\tthis.isRequesting ||\r\n-\t\t\tbtn.classList.contains( 'loading' ) ||\r\n-\t\t\tbtn.disabled\r\n-\t\t) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tform.reset();\r\n-\t\tthis.setButtonLoadingState( btn, true );\r\n-\t\tthis.loadEnrolledStudents(\r\n-\t\t\tthis.activeCourseId,\r\n-\t\t\t1,\r\n-\t\t\tbtn\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tgetModalPopup() {\r\n-\t\treturn SweetAlert.getPopup ? SweetAlert.getPopup() : null;\r\n-\t}\r\n-\r\n-\tgetModalToolbarHtml() {\r\n-\t\tconst template = document.querySelector(\r\n-\t\t\tViewStudentsModal.selectors.toolbarTemplate\r\n-\t\t);\r\n-\r\n-\t\treturn template ? template.innerHTML : '';\r\n-\t}\r\n-\r\n-\tgetModalTargetHtml() {\r\n-\t\tconst template = document.querySelector(\r\n-\t\t\tViewStudentsModal.selectors.targetTemplate\r\n-\t\t);\r\n-\r\n-\t\treturn template ? template.innerHTML : '';\r\n-\t}\r\n-\r\n-\tgetAjaxHandle() {\r\n-\t\tconst ajaxHandle = window.lpAJAXG;\r\n-\t\tif (\r\n-\t\t\t! ajaxHandle ||\r\n-\t\t\ttypeof ajaxHandle.getDataSetCurrent !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.setDataSetCurrent !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.showHideLoading !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.fetchAJAX !== 'function'\r\n-\t\t) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn ajaxHandle;\r\n-\t}\r\n-\r\n-\tgetModalForm() {\r\n-\t\tconst popup = this.getModalPopup();\r\n-\t\tif ( ! popup ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn popup.querySelector( ViewStudentsModal.selectors.form );\r\n-\t}\r\n-\r\n-\tgetModalFilterArgs( dataArgs = {} ) {\r\n-\t\tconst form = this.getModalForm();\r\n-\t\tif ( ! form ) {\r\n-\t\t\treturn dataArgs;\r\n-\t\t}\r\n-\r\n-\t\treturn lpUtils.mergeDataWithDatForm( form, dataArgs );\r\n-\t}\r\n-\r\n-\tloadEnrolledStudents( courseId, paged, elLoading = null ) {\r\n-\t\tconst wrap = document.querySelector( ViewStudentsModal.selectors.wrap );\r\n-\t\tconst elTarget = wrap?.querySelector( '.lp-target' );\r\n-\t\tconst ajaxHandle = this.getAjaxHandle();\r\n-\t\tif ( ! wrap || ! elTarget || ! ajaxHandle || this.isRequesting ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.isRequesting = true;\r\n-\t\tif ( elLoading ) {\r\n-\t\t\tthis.setButtonLoadingState( elLoading, true );\r\n-\t\t}\r\n-\r\n-\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elTarget );\r\n-\t\tdataSend.args = this.getModalFilterArgs( dataSend.args || {} );\r\n-\t\tdataSend.args.course_id = parseInt( courseId, 10 ) || 0;\r\n-\t\tdataSend.args.paged = paged;\r\n-\t\tajaxHandle.setDataSetCurrent( elTarget, dataSend );\r\n-\t\tajaxHandle.showHideLoading( elTarget, 1 );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\telTarget.innerHTML = response.data.content;\r\n-\t\t\t},\r\n-\t\t\terror: ( err ) => {\r\n-\t\t\t\tconsole.error( err );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tthis.isRequesting = false;\r\n-\t\t\t\tajaxHandle.showHideLoading( elTarget, 0 );\r\n-\t\t\t\tif ( elLoading ) {\r\n-\t\t\t\t\tthis.setButtonLoadingState( elLoading, false );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tajaxHandle.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\topenModal( courseId, courseTitle, elTrigger = null ) {\r\n-\t\tconst modalToolbarHtml = this.getModalToolbarHtml();\r\n-\t\tconst modalTargetHtml = this.getModalTargetHtml();\r\n-\r\n-\t\tif ( ! modalToolbarHtml || ! modalTargetHtml ) {\r\n-\t\t\tif ( elTrigger ) {\r\n-\t\t\t\tthis.setButtonLoadingState( elTrigger, false );\r\n-\t\t\t}\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.activeCourseId = parseInt( courseId, 10 ) || 0;\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: `${ courseTitle }`,\r\n-\t\t\thtml: modalToolbarHtml + modalTargetHtml,\r\n-\t\t\twidth: '80%',\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tdidOpen: () => {\r\n-\t\t\t\tthis.loadEnrolledStudents(\r\n-\t\t\t\t\tthis.activeCourseId,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\telTrigger\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\t\t\tdidClose: () => {\r\n-\t\t\t\tthis.activeCourseId = 0;\r\n-\t\t\t\tif ( elTrigger ) {\r\n-\t\t\t\t\tthis.setButtonLoadingState( elTrigger, false );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Ensure start date is not after end date and vice versa. If invalid, adjust the other date to match.\r\n-\tcheckDatesRange( args ) {\r\n-\t\tconst { e } = args;\r\n-\t\tconst elInput = e?.target;\r\n-\t\tif ( ! elInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elForm = elInput.closest( ViewStudentsModal.selectors.form );\r\n-\t\tif ( ! elForm ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst startDateInput = elForm.querySelector(\r\n-\t\t\tViewStudentsModal.selectors.startDateInput,\r\n-\t\t);\r\n-\t\tconst endDateInput = elForm.querySelector(\r\n-\t\t\tViewStudentsModal.selectors.endDateInput,\r\n-\t\t);\r\n-\r\n-\t\tif ( elInput === startDateInput ) {\r\n-\t\t\tif ( startDateInput.value ) {\r\n-\t\t\t\tendDateInput.min = startDateInput.value;\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tendDateInput.value &&\r\n-\t\t\t\t\tendDateInput.value \u003C startDateInput.value\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tendDateInput.value = startDateInput.value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tendDateInput.min = '';\r\n-\t\t\t}\r\n-\t\t} else if ( elInput === endDateInput ) {\r\n-\t\t\tif ( endDateInput.value ) {\r\n-\t\t\t\tstartDateInput.max = endDateInput.value;\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tstartDateInput.value &&\r\n-\t\t\t\t\tstartDateInput.value > endDateInput.value\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tstartDateInput.value = endDateInput.value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tstartDateInput.max = '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+import SweetAlert from 'sweetalert2';\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+\n+export class ViewStudentsModal {\n+\tconstructor() {\n+\t\tthis.isRequesting = false;\n+\t\tthis.activeCourseId = 0;\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\twrap: '#lp-modal-enrolled-wrap',\n+\t\tform: '#lp-modal-enrolled-form',\n+\t\ttoolbarTemplate: '#lp-tmpl-enrolled-students-toolbar-modal',\n+\t\ttargetTemplate: '#lp-tmpl-enrolled-students-target-modal',\n+\t\ttoolbar: '.lp-enrolled-students-table-toolbar--modal',\n+\t\tcourseTrigger: '.lp-btn-view-students',\n+\t\tsearchInput: '#lp-modal-enrolled-search-input',\n+\t\tstartDateInput: '#lp-modal-enrolled-filter-start-date',\n+\t\tendDateInput: '#lp-modal-enrolled-filter-end-date',\n+\t\tsearchBtn: '.lp-enrolled-btn-search-modal',\n+\t\tclearBtn: '.lp-enrolled-btn-clear-modal',\n+\t\tmodalSearchFields:\n+\t\t\t'#lp-modal-enrolled-search-input, #lp-modal-enrolled-filter-start-date, #lp-modal-enrolled-filter-end-date',\n+\t};\n+\n+\tsetButtonLoadingState( btn, isLoading ) {\n+\t\tif ( ! btn ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpUtils.lpSetLoadingEl( btn, isLoading ? 1 : 0 );\n+\t\tbtn.disabled = !! isLoading;\n+\t}\n+\n+\tinit() {\n+\t\tif ( ViewStudentsModal._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tViewStudentsModal._loadedEvents = true;\n+\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.courseTrigger,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.handleOpenModal.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.searchBtn,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.handleModalSearch.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.clearBtn,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.handleModalClear.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.modalSearchFields,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.handleModalSearchOnEnter.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\tlpUtils.eventHandlers( 'change', [\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.startDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkDatesRange.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ViewStudentsModal.selectors.endDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkDatesRange.name,\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\thandleOpenModal( args ) {\n+\t\tconst btn = args?.target?.closest(\n+\t\t\tViewStudentsModal.selectors.courseTrigger\n+\t\t);\n+\t\tif (\n+\t\t\t! btn ||\n+\t\t\tthis.isRequesting ||\n+\t\t\tbtn.classList.contains( 'loading' ) ||\n+\t\t\tbtn.disabled\n+\t\t) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst courseId = parseInt( btn.dataset.courseId, 10 ) || 0;\n+\t\tif ( ! courseId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst courseTitle = btn.dataset.courseTitle || '';\n+\t\tthis.activeCourseId = courseId;\n+\n+\t\tthis.setButtonLoadingState( btn, true );\n+\t\tthis.openModal( courseId, courseTitle, btn );\n+\t}\n+\n+\thandleModalSearch( args ) {\n+\t\tconst btn = args?.target?.closest(\n+\t\t\tViewStudentsModal.selectors.searchBtn\n+\t\t);\n+\t\tif ( ! btn || ! this.activeCourseId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( args?.e ) {\n+\t\t\targs.e.preventDefault();\n+\t\t}\n+\n+\t\tif (\n+\t\t\tthis.isRequesting ||\n+\t\t\tbtn.classList.contains( 'loading' ) ||\n+\t\t\tbtn.disabled\n+\t\t) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.setButtonLoadingState( btn, true );\n+\t\tthis.loadEnrolledStudents(\n+\t\t\tthis.activeCourseId,\n+\t\t\t1,\n+\t\t\tbtn\n+\t\t);\n+\t}\n+\n+\thandleModalSearchOnEnter( args ) {\n+\t\tif ( args?.e ) {\n+\t\t\targs.e.preventDefault();\n+\t\t}\n+\n+\t\tconst form = this.getModalForm();\n+\t\tif ( ! form ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst btn = form.querySelector( ViewStudentsModal.selectors.searchBtn );\n+\t\tif ( ! btn ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.handleModalSearch( { ...args, target: btn } );\n+\t}\n+\n+\thandleModalClear( args ) {\n+\t\tconst btn = args?.target?.closest(\n+\t\t\tViewStudentsModal.selectors.clearBtn\n+\t\t);\n+\t\tconst form = this.getModalForm();\n+\t\tif ( ! btn || ! form || ! this.activeCourseId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( args?.e ) {\n+\t\t\targs.e.preventDefault();\n+\t\t}\n+\n+\t\tif (\n+\t\t\tthis.isRequesting ||\n+\t\t\tbtn.classList.contains( 'loading' ) ||\n+\t\t\tbtn.disabled\n+\t\t) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tform.reset();\n+\t\tthis.setButtonLoadingState( btn, true );\n+\t\tthis.loadEnrolledStudents(\n+\t\t\tthis.activeCourseId,\n+\t\t\t1,\n+\t\t\tbtn\n+\t\t);\n+\t}\n+\n+\tgetModalPopup() {\n+\t\treturn SweetAlert.getPopup ? SweetAlert.getPopup() : null;\n+\t}\n+\n+\tgetModalToolbarHtml() {\n+\t\tconst template = document.querySelector(\n+\t\t\tViewStudentsModal.selectors.toolbarTemplate\n+\t\t);\n+\n+\t\treturn template ? template.innerHTML : '';\n+\t}\n+\n+\tgetModalTargetHtml() {\n+\t\tconst template = document.querySelector(\n+\t\t\tViewStudentsModal.selectors.targetTemplate\n+\t\t);\n+\n+\t\treturn template ? template.innerHTML : '';\n+\t}\n+\n+\tgetAjaxHandle() {\n+\t\tconst ajaxHandle = window.lpAJAXG;\n+\t\tif (\n+\t\t\t! ajaxHandle ||\n+\t\t\ttypeof ajaxHandle.getDataSetCurrent !== 'function' ||\n+\t\t\ttypeof ajaxHandle.setDataSetCurrent !== 'function' ||\n+\t\t\ttypeof ajaxHandle.showHideLoading !== 'function' ||\n+\t\t\ttypeof ajaxHandle.fetchAJAX !== 'function'\n+\t\t) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn ajaxHandle;\n+\t}\n+\n+\tgetModalForm() {\n+\t\tconst popup = this.getModalPopup();\n+\t\tif ( ! popup ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn popup.querySelector( ViewStudentsModal.selectors.form );\n+\t}\n+\n+\tgetModalFilterArgs( dataArgs = {} ) {\n+\t\tconst form = this.getModalForm();\n+\t\tif ( ! form ) {\n+\t\t\treturn dataArgs;\n+\t\t}\n+\n+\t\treturn lpUtils.mergeDataWithDatForm( form, dataArgs );\n+\t}\n+\n+\tloadEnrolledStudents( courseId, paged, elLoading = null ) {\n+\t\tconst wrap = document.querySelector( ViewStudentsModal.selectors.wrap );\n+\t\tconst elTarget = wrap?.querySelector( '.lp-target' );\n+\t\tconst ajaxHandle = this.getAjaxHandle();\n+\t\tif ( ! wrap || ! elTarget || ! ajaxHandle || this.isRequesting ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.isRequesting = true;\n+\t\tif ( elLoading ) {\n+\t\t\tthis.setButtonLoadingState( elLoading, true );\n+\t\t}\n+\n+\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elTarget );\n+\t\tdataSend.args = this.getModalFilterArgs( dataSend.args || {} );\n+\t\tdataSend.args.course_id = parseInt( courseId, 10 ) || 0;\n+\t\tdataSend.args.paged = paged;\n+\t\tajaxHandle.setDataSetCurrent( elTarget, dataSend );\n+\t\tajaxHandle.showHideLoading( elTarget, 1 );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\telTarget.innerHTML = response.data.content;\n+\t\t\t},\n+\t\t\terror: ( err ) => {\n+\t\t\t\tconsole.error( err );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tthis.isRequesting = false;\n+\t\t\t\tajaxHandle.showHideLoading( elTarget, 0 );\n+\t\t\t\tif ( elLoading ) {\n+\t\t\t\t\tthis.setButtonLoadingState( elLoading, false );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tajaxHandle.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\topenModal( courseId, courseTitle, elTrigger = null ) {\n+\t\tconst modalToolbarHtml = this.getModalToolbarHtml();\n+\t\tconst modalTargetHtml = this.getModalTargetHtml();\n+\n+\t\tif ( ! modalToolbarHtml || ! modalTargetHtml ) {\n+\t\t\tif ( elTrigger ) {\n+\t\t\t\tthis.setButtonLoadingState( elTrigger, false );\n+\t\t\t}\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.activeCourseId = parseInt( courseId, 10 ) || 0;\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: `${ courseTitle }`,\n+\t\t\thtml: modalToolbarHtml + modalTargetHtml,\n+\t\t\twidth: '80%',\n+\t\t\tshowConfirmButton: false,\n+\t\t\tshowCloseButton: true,\n+\t\t\tdidOpen: () => {\n+\t\t\t\tthis.loadEnrolledStudents(\n+\t\t\t\t\tthis.activeCourseId,\n+\t\t\t\t\t1,\n+\t\t\t\t\telTrigger\n+\t\t\t\t);\n+\t\t\t},\n+\t\t\tdidClose: () => {\n+\t\t\t\tthis.activeCourseId = 0;\n+\t\t\t\tif ( elTrigger ) {\n+\t\t\t\t\tthis.setButtonLoadingState( elTrigger, false );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Ensure start date is not after end date and vice versa. If invalid, adjust the other date to match.\n+\tcheckDatesRange( args ) {\n+\t\tconst { e } = args;\n+\t\tconst elInput = e?.target;\n+\t\tif ( ! elInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elForm = elInput.closest( ViewStudentsModal.selectors.form );\n+\t\tif ( ! elForm ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst startDateInput = elForm.querySelector(\n+\t\t\tViewStudentsModal.selectors.startDateInput,\n+\t\t);\n+\t\tconst endDateInput = elForm.querySelector(\n+\t\t\tViewStudentsModal.selectors.endDateInput,\n+\t\t);\n+\n+\t\tif ( elInput === startDateInput ) {\n+\t\t\tif ( startDateInput.value ) {\n+\t\t\t\tendDateInput.min = startDateInput.value;\n+\t\t\t\tif (\n+\t\t\t\t\tendDateInput.value &&\n+\t\t\t\t\tendDateInput.value \u003C startDateInput.value\n+\t\t\t\t) {\n+\t\t\t\t\tendDateInput.value = startDateInput.value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tendDateInput.min = '';\n+\t\t\t}\n+\t\t} else if ( elInput === endDateInput ) {\n+\t\t\tif ( endDateInput.value ) {\n+\t\t\t\tstartDateInput.max = endDateInput.value;\n+\t\t\t\tif (\n+\t\t\t\t\tstartDateInput.value &&\n+\t\t\t\t\tstartDateInput.value > endDateInput.value\n+\t\t\t\t) {\n+\t\t\t\t\tstartDateInput.value = endDateInput.value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tstartDateInput.max = '';\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,256 +1,261 @@\n-\u002F**\r\n- * Generate data with OpenAI\r\n- *\u002F\r\n-\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-import SweetAlert from 'sweetalert2';\r\n-import { EditSection } from '.\u002Fedit-section.js';\r\n-import { EditSectionItem } from '.\u002Fedit-section-item.js';\r\n-import { EditCourseCurriculum } from 'lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js';\r\n-\r\n-let editSection = null;\r\n-let editSectionItem = null;\r\n-\r\n-export class EditCurriculumAi {\r\n-\tconstructor() {\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telBtnApplyCurriculum: '.lp-btn-apply-curriculum',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tif ( ! lpData?.enable_open_ai ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpUtils.lpOnElementReady(\r\n-\t\t\tEditCourseCurriculum.selectors.idElEditCurriculum,\r\n-\t\t\t( el ) => {\r\n-\t\t\t\tconst elCountSections = el.querySelector(\r\n-\t\t\t\t\tEditSection.selectors.elCountSections\r\n-\t\t\t\t);\r\n-\t\t\t\telCountSections.insertAdjacentHTML(\r\n-\t\t\t\t\t'afterend',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t);\r\n-\r\n-\t\tthis.events();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tif ( EditCurriculumAi._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tEditCurriculumAi._loadedEvents = true;\r\n-\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditCurriculumAi.selectors.elBtnApplyCurriculum,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.applyData.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\tasync applyData( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm(\r\n-\t\t\ttarget.closest( 'form' ),\r\n-\t\t\tdataSend\r\n-\t\t);\r\n-\r\n-\t\tif ( ! dataSend[ 'lp-openai-generated-data' ] ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst data = JSON.parse( dataSend[ 'lp-openai-generated-data' ] );\r\n-\r\n-\t\t\u002F\u002Fconsole.log( 'Generated Data:', data );\r\n-\r\n-\t\tconst sections = data[ 0 ].sections;\r\n-\t\tif ( ! sections || sections.length === 0 ) {\r\n-\t\t\tlpToastify.show(\r\n-\t\t\t\t'No sections found in the generated data.',\r\n-\t\t\t\t'error'\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tconsole.log( 'Generated Sections:', sections );\r\n-\r\n-\t\tSweetAlert.close();\r\n-\r\n-\t\t\u002F\u002F Wait half second to ensure SweetAlert is closed completely\r\n-\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 500 ) );\r\n-\r\n-\t\t\u002F\u002F New edit section instance\r\n-\t\teditSection = new EditSection();\r\n-\t\teditSection.init();\r\n-\r\n-\t\t\u002F\u002F New edit section item instance\r\n-\t\teditSectionItem = new EditSectionItem();\r\n-\t\teditSectionItem.init();\r\n-\r\n-\t\t\u002F\u002F Scroll to element add section\r\n-\t\tconst elEditCurriculum = document.querySelector(\r\n-\t\t\tEditCourseCurriculum.selectors.idElEditCurriculum\r\n-\t\t);\r\n-\t\tconst elDivAddNewSection = elEditCurriculum.querySelector(\r\n-\t\t\tEditSection.selectors.elDivAddNewSection\r\n-\t\t);\r\n-\t\telDivAddNewSection.scrollIntoView( {\r\n-\t\t\tbehavior: 'smooth',\r\n-\t\t\tblock: 'center',\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Wait 800ms to ensure scroll completely\r\n-\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 800 ) );\r\n-\r\n-\t\tfor ( const sectionData of sections ) {\r\n-\t\t\t\u002F\u002F Set title\r\n-\t\t\tconst elSectionTitleNewInput = elEditCurriculum.querySelector(\r\n-\t\t\t\tEditSection.selectors.elSectionTitleNewInput\r\n-\t\t\t);\r\n-\t\t\tconst elBtnAddSection = elEditCurriculum.querySelector(\r\n-\t\t\t\tEditSection.selectors.elBtnAddSection\r\n-\t\t\t);\r\n-\t\t\telSectionTitleNewInput.value = sectionData.section_title || '';\r\n-\r\n-\t\t\tawait new Promise( ( resolve ) => {\r\n-\t\t\t\teditSection.addSection( {\r\n-\t\t\t\t\te: new PointerEvent( 'click' ),\r\n-\t\t\t\t\ttarget: elBtnAddSection,\r\n-\t\t\t\t\tcallBackNest: this.updateSectionDescription( {\r\n-\t\t\t\t\t\tsectionData,\r\n-\t\t\t\t\t\telEditCurriculum,\r\n-\t\t\t\t\t} ),\r\n-\t\t\t\t\tresolve,\r\n-\t\t\t\t} );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update section description after create new section\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tupdateSectionDescription( args ) {\r\n-\t\tconst { sectionData, elEditCurriculum } = args;\r\n-\r\n-\t\treturn {\r\n-\t\t\tsuccess: async ( args ) => {\r\n-\t\t\t\tconst { elSection } = args;\r\n-\t\t\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 1000 ) );\r\n-\r\n-\t\t\t\t\u002F\u002F Set description for the new section\r\n-\t\t\t\tconst elSectionDesInput = elSection.querySelector(\r\n-\t\t\t\t\tEditSection.selectors.elSectionDesInput\r\n-\t\t\t\t);\r\n-\t\t\t\telSectionDesInput.value = sectionData.section_description || '';\r\n-\r\n-\t\t\t\t\u002F\u002F Call AJAX to save description\r\n-\t\t\t\tawait new Promise( ( resolve ) => {\r\n-\t\t\t\t\teditSection.updateSectionDescription( {\r\n-\t\t\t\t\t\te: new PointerEvent( 'click' ),\r\n-\t\t\t\t\t\ttarget: elSectionDesInput,\r\n-\t\t\t\t\t\tcallBackNest: this.addSectionItems( {\r\n-\t\t\t\t\t\t\tsectionData,\r\n-\t\t\t\t\t\t\telEditCurriculum,\r\n-\t\t\t\t\t\t} ),\r\n-\t\t\t\t\t\tresolve,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tsetTimeout( args.resolve, 1 );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {},\r\n-\t\t\tcompleted: () => {},\r\n-\t\t};\r\n-\t}\r\n-\r\n-\taddSectionItems( args ) {\r\n-\t\tconst { sectionData, elEditCurriculum } = args;\r\n-\t\tconst lessons = sectionData.lessons || [];\r\n-\t\tconst quizzes = sectionData.quizzes || [];\r\n-\r\n-\t\treturn {\r\n-\t\t\tsuccess: async ( args ) => {\r\n-\t\t\t\t\u002F\u002Fawait new Promise( ( resolve ) => setTimeout( resolve, 1000 ) );\r\n-\t\t\t\tconst { elSection } = args;\r\n-\r\n-\t\t\t\tconst elBtnSelectItemTypeLesson = elSection.querySelector(\r\n-\t\t\t\t\t`${ EditSectionItem.selectors.elBtnSelectItemType }[data-item-type=lp_lesson]`\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tconst elBtnSelectItemTypeQuiz = elSection.querySelector(\r\n-\t\t\t\t\t`${ EditSectionItem.selectors.elBtnSelectItemType }[data-item-type=lp_quiz]`\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tfor ( const itemData of lessons ) {\r\n-\t\t\t\t\telBtnSelectItemTypeLesson.click();\r\n-\r\n-\t\t\t\t\tawait this.addItemToSection( {\r\n-\t\t\t\t\t\titemData,\r\n-\t\t\t\t\t\telSection,\r\n-\t\t\t\t\t\telEditCurriculum,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tfor ( const itemData of quizzes ) {\r\n-\t\t\t\t\telBtnSelectItemTypeQuiz.click();\r\n-\r\n-\t\t\t\t\tawait this.addItemToSection( {\r\n-\t\t\t\t\t\titemData,\r\n-\t\t\t\t\t\telSection,\r\n-\t\t\t\t\t\telEditCurriculum,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tsetTimeout( args.resolve, 1 );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {},\r\n-\t\t\tcompleted: () => {},\r\n-\t\t};\r\n-\t}\r\n-\r\n-\tasync addItemToSection( args ) {\r\n-\t\tconst { itemData, elSection, elEditCurriculum } = args;\r\n-\r\n-\t\tconst elBtnAddItem = elSection.querySelector(\r\n-\t\t\tEditSectionItem.selectors.elBtnAddItem\r\n-\t\t);\r\n-\t\tconst elAddItemTypeTitleInput = elSection.querySelector(\r\n-\t\t\tEditSectionItem.selectors.elAddItemTypeTitleInput\r\n-\t\t);\r\n-\t\telAddItemTypeTitleInput.value =\r\n-\t\t\titemData.lesson_title || itemData.quiz_title || '';\r\n-\r\n-\t\t\u002F\u002F Scroll to element add item\r\n-\t\telBtnAddItem.scrollIntoView( { behavior: 'smooth', block: 'center' } );\r\n-\r\n-\t\t\u002F\u002F Call AJAX to add item to section\r\n-\t\tawait new Promise( ( resolve ) => {\r\n-\t\t\teditSectionItem.addItemToSection( {\r\n-\t\t\t\te: new PointerEvent( 'click' ),\r\n-\t\t\t\ttarget: elBtnAddItem,\r\n-\t\t\t\tresolve,\r\n-\t\t\t\tcallBackNest: {\r\n-\t\t\t\t\tcompleted: async ( args ) => {\r\n-\t\t\t\t\t\tsetTimeout( resolve, 1000 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\tsetTimeout( args.resolve, 1 );\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Generate data with OpenAI\n+ *\u002F\n+\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+import SweetAlert from 'sweetalert2';\n+import { EditSection } from '.\u002Fedit-section.js';\n+import { EditSectionItem } from '.\u002Fedit-section-item.js';\n+import { EditCourseCurriculum } from 'lpAssetsJsPath\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js';\n+\n+let editSection = null;\n+let editSectionItem = null;\n+\n+export class EditCurriculumAi {\n+\tconstructor( options = {} ) {\n+\t\tthis.options = {\n+\t\t\tisCourseBuilder: false,\n+\t\t\t...options,\n+\t\t};\n+\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\telBtnApplyCurriculum: '.lp-btn-apply-curriculum',\n+\t};\n+\n+\tinit() {\n+\t\tif ( ! lpData?.enable_open_ai ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( this.options.isCourseBuilder ) {\n+\t\t\tlpUtils.lpOnElementReady( EditCourseCurriculum.selectors.idElEditCurriculum, ( el ) => {\n+\t\t\t\tconst elCountSections = el.querySelector( EditSection.selectors.elCountSections );\n+\t\t\t\telCountSections.insertAdjacentHTML(\n+\t\t\t\t\t'beforebegin',\n+\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tclass=\"cb-course-edit-ai-btn lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t);\n+\t\t\t} );\n+\t\t} else {\n+\t\t\tlpUtils.lpOnElementReady( EditCourseCurriculum.selectors.idElEditCurriculum, ( el ) => {\n+\t\t\t\tconst elCountSections = el.querySelector( EditSection.selectors.elCountSections );\n+\t\t\t\telCountSections.insertAdjacentHTML(\n+\t\t\t\t\t'afterend',\n+\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-course-curriculum-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate with AI\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`,\n+\t\t\t\t);\n+\t\t\t} );\n+\t\t}\n+\n+\t\tthis.events();\n+\t}\n+\n+\tevents() {\n+\t\tif ( EditCurriculumAi._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tEditCurriculumAi._loadedEvents = true;\n+\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: EditCurriculumAi.selectors.elBtnApplyCurriculum,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.applyData.name,\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\tasync applyData( args ) {\n+\t\tconst { e, target } = args;\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( target.closest( 'form' ), dataSend );\n+\n+\t\tif ( ! dataSend[ 'lp-openai-generated-data' ] ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst data = JSON.parse( dataSend[ 'lp-openai-generated-data' ] );\n+\n+\t\t\u002F\u002Fconsole.log( 'Generated Data:', data );\n+\n+\t\tconst sections = data[ 0 ].sections;\n+\t\tif ( ! sections || sections.length === 0 ) {\n+\t\t\tlpToastify.show( 'No sections found in the generated data.', 'error' );\n+\t\t}\n+\n+\t\t\u002F\u002F console.log( 'Generated Sections:', sections );\n+\n+\t\tSweetAlert.close();\n+\n+\t\t\u002F\u002F Wait half second to ensure SweetAlert is closed completely\n+\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 500 ) );\n+\n+\t\t\u002F\u002F New edit section instance\n+\t\teditSection = new EditSection();\n+\t\teditSection.init();\n+\n+\t\t\u002F\u002F New edit section item instance\n+\t\teditSectionItem = new EditSectionItem();\n+\t\teditSectionItem.init();\n+\n+\t\t\u002F\u002F Scroll to element add section\n+\t\tconst elEditCurriculum = document.querySelector(\n+\t\t\tEditCourseCurriculum.selectors.idElEditCurriculum\n+\t\t);\n+\t\tconst elDivAddNewSection = elEditCurriculum.querySelector(\n+\t\t\tEditSection.selectors.elDivAddNewSection\n+\t\t);\n+\t\telDivAddNewSection.scrollIntoView( {\n+\t\t\tbehavior: 'smooth',\n+\t\t\tblock: 'center',\n+\t\t} );\n+\n+\t\t\u002F\u002F Wait 800ms to ensure scroll completely\n+\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 800 ) );\n+\n+\t\tfor ( const sectionData of sections ) {\n+\t\t\t\u002F\u002F Set title\n+\t\t\tconst elSectionTitleNewInput = elEditCurriculum.querySelector(\n+\t\t\t\tEditSection.selectors.elSectionTitleNewInput\n+\t\t\t);\n+\t\t\tconst elBtnAddSection = elEditCurriculum.querySelector(\n+\t\t\t\tEditSection.selectors.elBtnAddSection\n+\t\t\t);\n+\t\t\telSectionTitleNewInput.value = sectionData.section_title || '';\n+\n+\t\t\tawait new Promise( ( resolve ) => {\n+\t\t\t\teditSection.addSection( {\n+\t\t\t\t\te: new PointerEvent( 'click' ),\n+\t\t\t\t\ttarget: elBtnAddSection,\n+\t\t\t\t\tcallBackNest: this.updateSectionDescription( {\n+\t\t\t\t\t\tsectionData,\n+\t\t\t\t\t\telEditCurriculum,\n+\t\t\t\t\t} ),\n+\t\t\t\t\tresolve,\n+\t\t\t\t} );\n+\t\t\t} );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update section description after create new section\n+\t * @param args\n+\t *\u002F\n+\tupdateSectionDescription( args ) {\n+\t\tconst { sectionData, elEditCurriculum } = args;\n+\n+\t\treturn {\n+\t\t\tsuccess: async ( args ) => {\n+\t\t\t\tconst { elSection } = args;\n+\t\t\t\tawait new Promise( ( resolve ) => setTimeout( resolve, 1000 ) );\n+\n+\t\t\t\t\u002F\u002F Set description for the new section\n+\t\t\t\tconst elSectionDesInput = elSection.querySelector(\n+\t\t\t\t\tEditSection.selectors.elSectionDesInput\n+\t\t\t\t);\n+\t\t\t\telSectionDesInput.value = sectionData.section_description || '';\n+\n+\t\t\t\t\u002F\u002F Call AJAX to save description\n+\t\t\t\tawait new Promise( ( resolve ) => {\n+\t\t\t\t\teditSection.updateSectionDescription( {\n+\t\t\t\t\t\te: new PointerEvent( 'click' ),\n+\t\t\t\t\t\ttarget: elSectionDesInput,\n+\t\t\t\t\t\tcallBackNest: this.addSectionItems( {\n+\t\t\t\t\t\t\tsectionData,\n+\t\t\t\t\t\t\telEditCurriculum,\n+\t\t\t\t\t\t} ),\n+\t\t\t\t\t\tresolve,\n+\t\t\t\t\t} );\n+\t\t\t\t} );\n+\n+\t\t\t\tsetTimeout( args.resolve, 1 );\n+\t\t\t},\n+\t\t\terror: ( error ) => {},\n+\t\t\tcompleted: () => {},\n+\t\t};\n+\t}\n+\n+\taddSectionItems( args ) {\n+\t\tconst { sectionData, elEditCurriculum } = args;\n+\t\tconst lessons = sectionData.lessons || [];\n+\t\tconst quizzes = sectionData.quizzes || [];\n+\n+\t\treturn {\n+\t\t\tsuccess: async ( args ) => {\n+\t\t\t\t\u002F\u002Fawait new Promise( ( resolve ) => setTimeout( resolve, 1000 ) );\n+\t\t\t\tconst { elSection } = args;\n+\n+\t\t\t\tconst elBtnSelectItemTypeLesson = elSection.querySelector(\n+\t\t\t\t\t`${ EditSectionItem.selectors.elBtnSelectItemType }[data-item-type=lp_lesson]`\n+\t\t\t\t);\n+\n+\t\t\t\tconst elBtnSelectItemTypeQuiz = elSection.querySelector(\n+\t\t\t\t\t`${ EditSectionItem.selectors.elBtnSelectItemType }[data-item-type=lp_quiz]`\n+\t\t\t\t);\n+\n+\t\t\t\tfor ( const itemData of lessons ) {\n+\t\t\t\t\telBtnSelectItemTypeLesson.click();\n+\n+\t\t\t\t\tawait this.addItemToSection( {\n+\t\t\t\t\t\titemData,\n+\t\t\t\t\t\telSection,\n+\t\t\t\t\t\telEditCurriculum,\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\n+\t\t\t\tfor ( const itemData of quizzes ) {\n+\t\t\t\t\telBtnSelectItemTypeQuiz.click();\n+\n+\t\t\t\t\tawait this.addItemToSection( {\n+\t\t\t\t\t\titemData,\n+\t\t\t\t\t\telSection,\n+\t\t\t\t\t\telEditCurriculum,\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\n+\t\t\t\tsetTimeout( args.resolve, 1 );\n+\t\t\t},\n+\t\t\terror: ( error ) => {},\n+\t\t\tcompleted: () => {},\n+\t\t};\n+\t}\n+\n+\tasync addItemToSection( args ) {\n+\t\tconst { itemData, elSection, elEditCurriculum } = args;\n+\n+\t\tconst elBtnAddItem = elSection.querySelector( EditSectionItem.selectors.elBtnAddItem );\n+\t\tconst elAddItemTypeTitleInput = elSection.querySelector(\n+\t\t\tEditSectionItem.selectors.elAddItemTypeTitleInput\n+\t\t);\n+\t\telAddItemTypeTitleInput.value = itemData.lesson_title || itemData.quiz_title || '';\n+\n+\t\t\u002F\u002F Scroll to element add item\n+\t\telBtnAddItem.scrollIntoView( { behavior: 'smooth', block: 'center' } );\n+\n+\t\t\u002F\u002F Call AJAX to add item to section\n+\t\tawait new Promise( ( resolve ) => {\n+\t\t\teditSectionItem.addItemToSection( {\n+\t\t\t\te: new PointerEvent( 'click' ),\n+\t\t\t\ttarget: elBtnAddItem,\n+\t\t\t\tresolve,\n+\t\t\t\tcallBackNest: {\n+\t\t\t\t\tcompleted: async ( args ) => {\n+\t\t\t\t\t\tsetTimeout( resolve, 1000 );\n+\t\t\t\t\t},\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tsetTimeout( args.resolve, 1 );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section-item.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,819 +1,870 @@\n-\u002F**\r\n- * Edit Section item Script on Curriculum\r\n- *\r\n- * @version 1.0.3\r\n- * @since 4.2.8.6\r\n- *\u002F\r\n-import SweetAlert from 'sweetalert2';\r\n-import Sortable from 'sortablejs';\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-import { EditCourseCurriculum } from '..\u002Fedit-curriculum.js';\r\n-import { EditSection } from '.\u002Fedit-section.js';\r\n-import { LpPopupSelectItemToAdd } from 'lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js';\r\n-\r\n-const idUrlHandle = 'edit-course-curriculum';\r\n-\r\n-const lpPopupSelectItemToAdd = new LpPopupSelectItemToAdd();\r\n-\r\n-export class EditSectionItem {\r\n-\tconstructor() {\r\n-\t\tthis.courseId = null;\r\n-\t\tthis.elCurriculumSections = null;\r\n-\t\tthis.sectionIdSelected = null;\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telSectionListItems: '.section-list-items',\r\n-\t\telItemClone: '.section-item.clone',\r\n-\t\telSectionItem: '.section-item',\r\n-\t\telBtnSelectItemType: '.lp-btn-select-item-type',\r\n-\t\telAddItemTypeClone: '.lp-add-item-type.clone',\r\n-\t\telSectionActions: '.section-actions',\r\n-\t\telAddItemType: '.lp-add-item-type',\r\n-\t\telAddItemTypeTitleInput: '.lp-add-item-type-title-input',\r\n-\t\telBtnAddItemCancel: '.lp-btn-add-item-cancel',\r\n-\t\telBtnAddItem: '.lp-btn-add-item',\r\n-\t\telItemTitleInput: '.lp-item-title-input',\r\n-\t\telBtnUpdateItemTitle: '.lp-btn-update-item-title',\r\n-\t\telBtnCancelUpdateTitle: '.lp-btn-cancel-update-item-title',\r\n-\t\telBtnDeleteItem: '.lp-btn-delete-item',\r\n-\t\telBtnSetPreviewItem: '.lp-btn-set-preview-item',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tthis.elEditCurriculum = document.querySelector(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\r\n-\t\t);\r\n-\t\tthis.elCurriculumSections = this.elEditCurriculum.querySelector(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\r\n-\t\t);\r\n-\t\tconst elLPTarget = this.elEditCurriculum.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.LPTarget }`\r\n-\t\t);\r\n-\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\tthis.courseId = dataSend.args.course_id;\r\n-\r\n-\t\tthis.events();\r\n-\t\tthis.sortAbleItem();\r\n-\t\tlpPopupSelectItemToAdd.init();\r\n-\t}\r\n-\r\n-\t\u002F* Events *\u002F\r\n-\tevents() {\r\n-\t\t\u002F\u002F Check and attach events only once\r\n-\t\tif ( EditSectionItem._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tEditSectionItem._loadedEvents = this;\r\n-\r\n-\t\t\u002F\u002F Click events\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnSelectItemType,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addItemType.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnAddItem,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addItemToSection.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnAddItemCancel,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.cancelAddItemType.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnUpdateItemTitle,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnCancelUpdateTitle,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.cancelUpdateTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnDeleteItem,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.deleteItem.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector:\r\n-\t\t\t\t\tLpPopupSelectItemToAdd.selectors\r\n-\t\t\t\t\t\t.elBtnShowPopupItemsToSelect,\r\n-\t\t\t\tcallBack: ( args ) => {\r\n-\t\t\t\t\tconst { e, target } = args;\r\n-\t\t\t\t\tconst elSection = target.closest(\r\n-\t\t\t\t\t\tEditSection.selectors.elSection\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tthis.sectionIdSelected = elSection.dataset.sectionId;\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector:\r\n-\t\t\t\t\tLpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,\r\n-\t\t\t\tclass: lpPopupSelectItemToAdd,\r\n-\t\t\t\tcallBack: lpPopupSelectItemToAdd.addItemsSelectedToSection.name,\r\n-\t\t\t\tcallBackHandle: this.addItemsSelectedToSection.bind( this ),\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elBtnSetPreviewItem,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updatePreviewItem.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keyup events\r\n-\t\tlpUtils.eventHandlers( 'keyup', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elAddItemTypeTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeTitleAddNew.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keydown events\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elAddItemTypeTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addItemToSection.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateTitle.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Focusin events\r\n-\t\tlpUtils.eventHandlers( 'focusin', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleInput.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Focusout events\r\n-\t\tlpUtils.eventHandlers( 'focusout', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleInput.name,\r\n-\t\t\t\tfocusIn: false,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\t\u002F* Add item type *\u002F\r\n-\taddItemType( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\r\n-\t\tconst elBtnSelectItemType = target;\r\n-\r\n-\t\tconst itemType = elBtnSelectItemType.dataset.itemType;\r\n-\t\tconst itemPlaceholder = elBtnSelectItemType.dataset.placeholder;\r\n-\t\tconst itemBtnAddText = elBtnSelectItemType.dataset.buttonAddText;\r\n-\r\n-\t\tconst elSection = elBtnSelectItemType.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst elSectionActions = elSection.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionActions }`\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Insert input item type to add\r\n-\t\tconst elAddItemTypeClone = elSectionActions.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemTypeClone }`\r\n-\t\t);\r\n-\t\tconst elNewItemByType = elAddItemTypeClone.cloneNode( true );\r\n-\t\tconst elAddItemTypeInput = elNewItemByType.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\r\n-\t\t);\r\n-\t\tconst elBtnAddItem = elNewItemByType.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elBtnAddItem }`\r\n-\t\t);\r\n-\r\n-\t\telNewItemByType.classList.remove( 'clone' );\r\n-\t\telNewItemByType.classList.add( itemType );\r\n-\t\tlpUtils.lpShowHideEl( elNewItemByType, 1 );\r\n-\t\telAddItemTypeInput.setAttribute( 'placeholder', itemPlaceholder );\r\n-\t\telAddItemTypeInput.dataset.itemType = itemType;\r\n-\t\telBtnAddItem.textContent = itemBtnAddText;\r\n-\t\telSectionActions.insertAdjacentElement(\r\n-\t\t\t'beforebegin',\r\n-\t\t\telNewItemByType\r\n-\t\t);\r\n-\t\telAddItemTypeInput.focus();\r\n-\t}\r\n-\r\n-\t\u002F* Cancel add item type *\u002F\r\n-\tcancelAddItemType( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elAddItemType = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemType }`\r\n-\t\t);\r\n-\t\tif ( elAddItemType ) {\r\n-\t\t\telAddItemType.remove();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Add item to section *\u002F\r\n-\taddItemToSection( args ) {\r\n-\t\tconst { e, target, callBackNest } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elAddItemType = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemType }`\r\n-\t\t);\r\n-\t\tconst elSection = elAddItemType.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\t\tconst elAddItemTypeTitleInput = elAddItemType.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\r\n-\t\t);\r\n-\t\tconst titleValue = elAddItemTypeTitleInput.value.trim();\r\n-\t\tconst typeValue = elAddItemTypeTitleInput.dataset.itemType;\r\n-\t\tconst message = elAddItemTypeTitleInput.dataset.messEmptyTitle;\r\n-\r\n-\t\tif ( titleValue.length === 0 ) {\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clone new section item\r\n-\t\tconst elItemClone = elSection.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemClone }`\r\n-\t\t);\r\n-\t\tconst elItemNew = elItemClone.cloneNode( true );\r\n-\t\tconst elItemTitleInput = elItemNew.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t);\r\n-\r\n-\t\telItemNew.classList.remove( 'clone' );\r\n-\t\telItemNew.classList.add( typeValue );\r\n-\t\telItemNew.dataset.itemType = typeValue;\r\n-\t\tlpUtils.lpShowHideEl( elItemNew, 1 );\r\n-\t\tlpUtils.lpSetLoadingEl( elItemNew, 1 );\r\n-\t\telItemTitleInput.value = titleValue;\r\n-\t\telItemTitleInput.dataset.old = titleValue;\r\n-\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemNew );\r\n-\t\telAddItemType.remove();\r\n-\r\n-\t\t\u002F\u002F Call ajax to add item to section\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\telItemNew.remove();\r\n-\t\t\t\t} else if ( status === 'success' ) {\r\n-\t\t\t\t\tconst { section_item, item_link } = data || {};\r\n-\t\t\t\t\telItemNew.dataset.itemId = section_item.item_id || 0;\r\n-\t\t\t\t\telItemNew\r\n-\t\t\t\t\t\t.querySelector( '.edit-link' )\r\n-\t\t\t\t\t\t.setAttribute( 'href', item_link || '' );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Call callback nest if exists\r\n-\t\t\t\t\tif (\r\n-\t\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\t\ttypeof callBackNest.success === 'function'\r\n-\t\t\t\t\t) {\r\n-\t\t\t\t\t\targs.elItemNew = elItemNew;\r\n-\t\t\t\t\t\tcallBackNest.success( args );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\telItemNew.remove();\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elItemNew, 0 );\r\n-\t\t\t\tthis.updateCountItems( elSection );\r\n-\r\n-\t\t\t\t\u002F\u002F Call callback nest if exists\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.completed === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\targs.elItemNew = elItemNew;\r\n-\t\t\t\t\tcallBackNest.completed( args );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\tcourse_id: this.courseId,\r\n-\t\t\taction: 'create_item_add_to_section',\r\n-\t\t\tsection_id: sectionId,\r\n-\t\t\titem_title: titleValue,\r\n-\t\t\titem_type: typeValue,\r\n-\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Typing in title input *\u002F\r\n-\tchangeTitle( args ) {\r\n-\t\tconst { target } = args;\r\n-\t\tconst elItemTitleInput = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elItemTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionItem = elItemTitleInput.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst titleValue = elItemTitleInput.value.trim();\r\n-\t\tconst titleValueOld = elItemTitleInput.dataset.old || '';\r\n-\r\n-\t\tif ( titleValue === titleValueOld ) {\r\n-\t\t\telSectionItem.classList.remove( 'editing' );\r\n-\t\t} else {\r\n-\t\t\telSectionItem.classList.add( 'editing' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Focus in item title input *\u002F\r\n-\tfocusTitleInput( args ) {\r\n-\t\tconst { target, focusIn = true } = args;\r\n-\r\n-\t\tconst elItemTitleInput = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elItemTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionItem = elItemTitleInput.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( focusIn ) {\r\n-\t\t\telSectionItem.classList.add( 'focus' );\r\n-\t\t} else {\r\n-\t\t\telSectionItem.classList.remove( 'focus' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tchangeTitleAddNew( args ) {\r\n-\t\tconst { target } = args;\r\n-\t\tconst elAddItemTypeTitleInput = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elAddItemTypeTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elAddItemType = elAddItemTypeTitleInput.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elAddItemType }`\r\n-\t\t);\r\n-\t\tif ( ! elAddItemType ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnAddItem = elAddItemType.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elBtnAddItem }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnAddItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst titleValue = elAddItemTypeTitleInput.value.trim();\r\n-\t\tif ( titleValue.length === 0 ) {\r\n-\t\t\telBtnAddItem.classList.remove( 'active' );\r\n-\t\t} else {\r\n-\t\t\telBtnAddItem.classList.add( 'active' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Update item title *\u002F\r\n-\tupdateTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elSectionItem = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSection = elSectionItem.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tif ( ! elSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elItemTitleInput = elSectionItem.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elItemTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst itemId = elSectionItem.dataset.itemId;\r\n-\t\tconst itemType = elSectionItem.dataset.itemType;\r\n-\t\tconst itemTitleValue = elItemTitleInput.value.trim();\r\n-\t\tconst titleOld = elItemTitleInput.dataset.old;\r\n-\t\tconst message = elItemTitleInput.dataset.messEmptyTitle;\r\n-\t\tif ( itemTitleValue.length === 0 ) {\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( itemTitleValue === titleOld ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Un-focus input item title\r\n-\t\telItemTitleInput.blur();\r\n-\t\t\u002F\u002F show loading\r\n-\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\r\n-\t\t\u002F\u002F Call ajax to update item title\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\telItemTitleInput.dataset.old = itemTitleValue;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telItemTitleInput.value = titleOld;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\r\n-\t\t\t\telSectionItem.classList.remove( 'editing' );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\tcourse_id: this.courseId,\r\n-\t\t\taction: 'update_item_of_section',\r\n-\t\t\tsection_id: elSection.dataset.sectionId,\r\n-\t\t\titem_id: itemId,\r\n-\t\t\titem_type: itemType,\r\n-\t\t\titem_title: itemTitleValue,\r\n-\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Cancel update item title *\u002F\r\n-\tcancelUpdateTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnCancelUpdateTitle = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elBtnCancelUpdateTitle }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnCancelUpdateTitle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionItem = elBtnCancelUpdateTitle.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tconst elItemTitleInput = elSectionItem.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t);\r\n-\t\telItemTitleInput.value = elItemTitleInput.dataset.old || '';\r\n-\t\telSectionItem.classList.remove( 'editing' );\r\n-\t}\r\n-\r\n-\t\u002F* Delete item from section *\u002F\r\n-\tdeleteItem( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnDeleteItem = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elBtnDeleteItem }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnDeleteItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionItem = elBtnDeleteItem.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst itemId = elSectionItem.dataset.itemId;\r\n-\t\tconst elSection = elSectionItem.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnDeleteItem.dataset.title,\r\n-\t\t\ttext: elBtnDeleteItem.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpDataAdmin.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpDataAdmin.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\r\n-\r\n-\t\t\t\t\u002F\u002F Call ajax to delete item from section\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\t\telSectionItem.remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\r\n-\t\t\t\t\t\tthis.updateCountItems( elSection );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tconst dataSend = {\r\n-\t\t\t\t\tcourse_id: this.courseId,\r\n-\t\t\t\t\taction: 'delete_item_from_section',\r\n-\t\t\t\t\tsection_id: sectionId,\r\n-\t\t\t\t\titem_id: itemId,\r\n-\t\t\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t\t\t};\r\n-\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Sortable items, can drop on multiple sections *\u002F\r\n-\tsortAbleItem() {\r\n-\t\tconst elSectionListItems = this.elCurriculumSections.querySelectorAll(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionListItems }`\r\n-\t\t);\r\n-\t\tlet itemIdChoose = 0;\r\n-\t\tlet elSectionChoose;\r\n-\t\tlet sectionIdChoose = 0;\r\n-\t\tlet sectionIdEnd = 0;\r\n-\t\tlet timeout;\r\n-\t\telSectionListItems.forEach( ( elItem ) => {\r\n-\t\t\tnew Sortable( elItem, {\r\n-\t\t\t\thandle: '.drag',\r\n-\t\t\t\tanimation: 150,\r\n-\t\t\t\tgroup: { name: 'shared' },\r\n-\t\t\t\tonEnd: ( evt ) => {\r\n-\t\t\t\t\tconst dataSectionsItems = [];\r\n-\r\n-\t\t\t\t\tconst elItemDragged = evt.item;\r\n-\t\t\t\t\tsectionIdEnd = elItemDragged.closest(\r\n-\t\t\t\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t\t\t\t).dataset.sectionId;\r\n-\r\n-\t\t\t\t\tconst dataSend = {\r\n-\t\t\t\t\t\tcourse_id: this.courseId,\r\n-\t\t\t\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\t\tdataSend.action = 'update_item_section_and_position';\r\n-\t\t\t\t\tdataSend.item_id_change = itemIdChoose;\r\n-\t\t\t\t\tdataSend.section_id_new_of_item = sectionIdEnd;\r\n-\t\t\t\t\tdataSend.section_id_old_of_item = sectionIdChoose;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Send list items position\r\n-\t\t\t\t\tconst section = this.elCurriculumSections.querySelector(\r\n-\t\t\t\t\t\t`.section[data-section-id=\"${ sectionIdEnd }\"]`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tconst items = section.querySelectorAll(\r\n-\t\t\t\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\titems.forEach( ( elItem ) => {\r\n-\t\t\t\t\t\tconst itemId = parseInt( elItem.dataset.itemId || 0 );\r\n-\t\t\t\t\t\tif ( itemId === 0 ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tdataSectionsItems.push( itemId );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\tdataSend.items_position = dataSectionsItems;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Call ajax to update items position\r\n-\t\t\t\t\tconst callBack = {\r\n-\t\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elItemDragged, 0 );\r\n-\t\t\t\t\t\t\tthis.updateCountItems( section );\r\n-\t\t\t\t\t\t\tif ( sectionIdChoose !== sectionIdEnd ) {\r\n-\t\t\t\t\t\t\t\tthis.updateCountItems( elSectionChoose );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elItemDragged, 1 );\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t},\r\n-\t\t\t\tonMove: ( \u002F*evt*\u002F ) => {},\r\n-\t\t\t\tonChoose: ( evt ) => {\r\n-\t\t\t\t\tconst elChooseItem = evt.item;\r\n-\t\t\t\t\titemIdChoose = elChooseItem.dataset.itemId;\r\n-\t\t\t\t\telSectionChoose = elChooseItem.closest(\r\n-\t\t\t\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tsectionIdChoose = elSectionChoose.dataset.sectionId;\r\n-\t\t\t\t},\r\n-\t\t\t\tonUpdate: ( \u002F*evt*\u002F ) => {},\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Add items selected to section *\u002F\r\n-\taddItemsSelectedToSection( itemsSelectedData ) {\r\n-\t\tconst elSection = document.querySelector(\r\n-\t\t\t`.section[data-section-id=\"${ this.sectionIdSelected }\"]`\r\n-\t\t);\r\n-\t\tconst elItemClone = elSection.querySelector(\r\n-\t\t\t`${ EditSectionItem.selectors.elItemClone }`\r\n-\t\t);\r\n-\r\n-\t\titemsSelectedData.forEach( ( item ) => {\r\n-\t\t\tconst elItemNew = elItemClone.cloneNode( true );\r\n-\t\t\tconst elInputTitleNew = elItemNew.querySelector(\r\n-\t\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\r\n-\t\t\t);\r\n-\r\n-\t\t\telItemNew.dataset.itemId = item.id;\r\n-\t\t\telItemNew.classList.add( item.type );\r\n-\t\t\telItemNew.classList.remove( 'clone' );\r\n-\t\t\telItemNew.dataset.itemType = item.type;\r\n-\t\t\telItemNew\r\n-\t\t\t\t.querySelector( '.edit-link' )\r\n-\t\t\t\t.setAttribute( 'href', item.editLink || '' );\r\n-\t\t\telInputTitleNew.value = item.titleSelected || '';\r\n-\t\t\tlpUtils.lpSetLoadingEl( elItemNew, 1 );\r\n-\t\t\tlpUtils.lpShowHideEl( elItemNew, 1 );\r\n-\t\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemNew );\r\n-\t\t} );\r\n-\r\n-\t\tSweetAlert.close();\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\tcourse_id: this.courseId,\r\n-\t\t\taction: 'add_items_to_section',\r\n-\t\t\tsection_id: this.sectionIdSelected,\r\n-\t\t\titems: itemsSelectedData,\r\n-\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\t\t\t\tconst { html } = data || '';\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\titemsSelectedData.forEach( ( item ) => {\r\n-\t\t\t\t\tconst elItemAdded = elSection.querySelector(\r\n-\t\t\t\t\t\t`${ EditSectionItem.selectors.elSectionItem }[data-item-id=\"${ item.id }\"]`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( elItemAdded ) {\r\n-\t\t\t\t\t\telItemAdded.remove();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\telItemClone.insertAdjacentHTML( 'beforebegin', html );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tthis.updateCountItems( elSection );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Enable\u002Fdisable preview item *\u002F\r\n-\tupdatePreviewItem( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnSetPreviewItem = target.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elBtnSetPreviewItem }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnSetPreviewItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionItem = elBtnSetPreviewItem.closest(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst icon = elBtnSetPreviewItem.querySelector( 'a' );\r\n-\r\n-\t\ticon.classList.toggle( 'lp-icon-eye' );\r\n-\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\r\n-\r\n-\t\tconst enablePreview = ! icon.classList.contains( 'lp-icon-eye-slash' );\r\n-\r\n-\t\tconst itemId = elSectionItem.dataset.itemId;\r\n-\t\tconst itemType = elSectionItem.dataset.itemType;\r\n-\r\n-\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\r\n-\r\n-\t\t\u002F\u002F Call ajax to update item preview\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\ticon.classList.toggle( 'lp-icon-eye' );\r\n-\t\t\t\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\ticon.classList.toggle( 'lp-icon-eye' );\r\n-\t\t\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\tcourse_id: this.courseId,\r\n-\t\t\taction: 'update_item_preview',\r\n-\t\t\titem_id: itemId,\r\n-\t\t\titem_type: itemType,\r\n-\t\t\tenable_preview: enablePreview ? 1 : 0,\r\n-\t\t\targs: { id_url: idUrlHandle },\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Update count items when item add\u002Fdelete or section delete *\u002F\r\n-\tupdateCountItems( elSection ) {\r\n-\t\tconst elEditCurriculum = this.elEditCurriculum;\r\n-\t\tconst elCountItemsAll =\r\n-\t\t\telEditCurriculum.querySelector( '.total-items' );\r\n-\t\tconst elItemsAll = elEditCurriculum.querySelectorAll(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }:not(.clone)`\r\n-\t\t);\r\n-\t\tconst itemsAllCount = elItemsAll.length;\r\n-\r\n-\t\telCountItemsAll.dataset.count = itemsAllCount;\r\n-\t\telCountItemsAll.querySelector( '.count' ).textContent = itemsAllCount;\r\n-\r\n-\t\t\u002F\u002F Count items in section\r\n-\t\tconst elSectionItemsCount = elSection.querySelector(\r\n-\t\t\t'.section-items-counts'\r\n-\t\t);\r\n-\r\n-\t\tconst elItems = elSection.querySelectorAll(\r\n-\t\t\t`${ EditSectionItem.selectors.elSectionItem }:not(.clone)`\r\n-\t\t);\r\n-\t\tconst itemsCount = elItems.length;\r\n-\r\n-\t\telSectionItemsCount.dataset.count = itemsCount;\r\n-\t\telSectionItemsCount.querySelector( '.count' ).textContent = itemsCount;\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Edit Section item Script on Curriculum\n+ *\n+ * @version 1.0.3\n+ * @since 4.2.8.6\n+ *\u002F\n+import SweetAlert from 'sweetalert2';\n+import Sortable from 'sortablejs';\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+import { EditCourseCurriculum } from '..\u002Fedit-curriculum.js';\n+import { EditSection } from '.\u002Fedit-section.js';\n+import { LpPopupSelectItemToAdd } from 'lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js';\n+\n+const idUrlHandle = 'edit-course-curriculum';\n+\n+const lpPopupSelectItemToAdd = new LpPopupSelectItemToAdd();\n+\n+export class EditSectionItem {\n+\tconstructor() {\n+\t\tthis.courseId = null;\n+\t\tthis.elCurriculumSections = null;\n+\t\tthis.sectionIdSelected = null;\n+\t}\n+\n+\tstatic selectors = {\n+\t\telSectionListItems: '.section-list-items',\n+\t\telItemClone: '.section-item.clone',\n+\t\telSectionItem: '.section-item',\n+\t\telBtnSelectItemType: '.lp-btn-select-item-type',\n+\t\telAddItemTypeClone: '.lp-add-item-type.clone',\n+\t\telSectionActions: '.section-actions',\n+\t\telAddItemType: '.lp-add-item-type',\n+\t\telAddItemTypeTitleInput: '.lp-add-item-type-title-input',\n+\t\telBtnAddItemCancel: '.lp-btn-add-item-cancel',\n+\t\telBtnAddItem: '.lp-btn-add-item',\n+\t\telItemTitleInput: '.lp-item-title-input',\n+\t\telBtnUpdateItemTitle: '.lp-btn-update-item-title',\n+\t\telBtnCancelUpdateTitle: '.lp-btn-cancel-update-item-title',\n+\t\telBtnDeleteItem: '.lp-btn-delete-item',\n+\t\telBtnSetPreviewItem: '.lp-btn-set-preview-item',\n+\t};\n+\n+\tinit() {\n+\t\tthis.elEditCurriculum = document.querySelector(\n+\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\n+\t\t);\n+\t\tthis.elCurriculumSections = this.elEditCurriculum.querySelector(\n+\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\n+\t\t);\n+\t\tconst elLPTarget = this.elEditCurriculum.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.LPTarget }`\n+\t\t);\n+\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\tthis.courseId = dataSend.args.course_id;\n+\n+\t\tthis.events();\n+\t\tthis.sortAbleItem();\n+\t\tlpPopupSelectItemToAdd.init();\n+\t}\n+\n+\t\u002F* Events *\u002F\n+\tevents() {\n+\t\t\u002F\u002F Check and attach events only once\n+\t\tif ( EditSectionItem._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tEditSectionItem._loadedEvents = this;\n+\n+\t\t\u002F\u002F Click events\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnSelectItemType,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addItemType.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnAddItem,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addItemToSection.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnAddItemCancel,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.cancelAddItemType.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnUpdateItemTitle,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnCancelUpdateTitle,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.cancelUpdateTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnDeleteItem,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.deleteItem.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.handleShowPopupItemsToSelect.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,\n+\t\t\t\tclass: lpPopupSelectItemToAdd,\n+\t\t\t\tcallBack: lpPopupSelectItemToAdd.addItemsSelectedToSection.name,\n+\t\t\t\tcallBackHandle: this.addItemsSelectedToSection.bind( this ),\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elBtnSetPreviewItem,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updatePreviewItem.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keyup events\n+\t\tlpUtils.eventHandlers( 'keyup', [\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elAddItemTypeTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeTitleAddNew.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keydown events\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elAddItemTypeTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addItemToSection.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateTitle.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Focusin events\n+\t\tlpUtils.eventHandlers( 'focusin', [\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleInput.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Focusout events\n+\t\tlpUtils.eventHandlers( 'focusout', [\n+\t\t\t{\n+\t\t\t\tselector: EditSectionItem.selectors.elItemTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleInput.name,\n+\t\t\t\tfocusIn: false,\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\t\u002F* Handle show popup items to select - set sectionIdSelected *\u002F\n+\thandleShowPopupItemsToSelect( args ) {\n+\t\tconst { e, target } = args;\n+\n+\t\tconst elQuizWrap = target.closest( '.lp-edit-quiz-wrap' );\n+\t\tif ( elQuizWrap ) {\n+\t\t\tthis.sectionIdSelected = null;\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSection = target.closest( EditSection.selectors.elSection );\n+\n+\t\tconst elEditCurriculum =\n+\t\t\ttarget.closest( '#lp-course-edit-curriculum' ) ||\n+\t\t\ttarget.closest( '.lp-edit-curriculum-wrap' );\n+\n+\t\tif ( elSection && elEditCurriculum ) {\n+\t\t\tthis.sectionIdSelected = elSection.dataset.sectionId;\n+\t\t} else {\n+\t\t\tthis.sectionIdSelected = null;\n+\t\t}\n+\t}\n+\n+\t\u002F* Add item type *\u002F\n+\taddItemType( args ) {\n+\t\tconst { e, target } = args;\n+\n+\t\tconst elBtnSelectItemType = target;\n+\n+\t\tconst itemType = elBtnSelectItemType.dataset.itemType;\n+\t\tconst itemPlaceholder = elBtnSelectItemType.dataset.placeholder;\n+\t\tconst itemBtnAddText = elBtnSelectItemType.dataset.buttonAddText;\n+\n+\t\tconst elSection = elBtnSelectItemType.closest( `${ EditSection.selectors.elSection }` );\n+\t\tconst elSectionActions = elSection.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elSectionActions }`\n+\t\t);\n+\n+\t\t\u002F\u002F Insert input item type to add\n+\t\tconst elAddItemTypeClone = elSectionActions.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elAddItemTypeClone }`\n+\t\t);\n+\t\tconst elNewItemByType = elAddItemTypeClone.cloneNode( true );\n+\t\tconst elAddItemTypeInput = elNewItemByType.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\n+\t\t);\n+\t\tconst elBtnAddItem = elNewItemByType.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elBtnAddItem }`\n+\t\t);\n+\n+\t\telNewItemByType.classList.remove( 'clone' );\n+\t\telNewItemByType.classList.add( itemType );\n+\t\tlpUtils.lpShowHideEl( elNewItemByType, 1 );\n+\t\telAddItemTypeInput.setAttribute( 'placeholder', itemPlaceholder );\n+\t\telAddItemTypeInput.dataset.itemType = itemType;\n+\t\telBtnAddItem.textContent = itemBtnAddText;\n+\t\telSectionActions.insertAdjacentElement( 'beforebegin', elNewItemByType );\n+\t\telAddItemTypeInput.focus();\n+\t}\n+\n+\t\u002F* Cancel add item type *\u002F\n+\tcancelAddItemType( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elAddItemType = target.closest( `${ EditSectionItem.selectors.elAddItemType }` );\n+\t\tif ( elAddItemType ) {\n+\t\t\telAddItemType.remove();\n+\t\t}\n+\t}\n+\n+\t\u002F* Add item to section *\u002F\n+\taddItemToSection( args ) {\n+\t\tconst { e, target, callBackNest } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst elAddItemType = target.closest( `${ EditSectionItem.selectors.elAddItemType }` );\n+\t\tconst elSection = elAddItemType.closest( `${ EditSection.selectors.elSection }` );\n+\t\tconst sectionId = elSection.dataset.sectionId;\n+\t\tconst elAddItemTypeTitleInput = elAddItemType.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\n+\t\t);\n+\t\tconst titleValue = elAddItemTypeTitleInput.value.trim();\n+\t\tconst typeValue = elAddItemTypeTitleInput.dataset.itemType;\n+\t\tconst message = elAddItemTypeTitleInput.dataset.messEmptyTitle;\n+\n+\t\tif ( titleValue.length === 0 ) {\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Clone new section item\n+\t\tconst elItemClone = elSection.querySelector( `${ EditSectionItem.selectors.elItemClone }` );\n+\t\tconst elItemNew = elItemClone.cloneNode( true );\n+\t\tconst elItemTitleInput = elItemNew.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\n+\t\t);\n+\n+\t\telItemNew.classList.remove( 'clone' );\n+\t\telItemNew.classList.add( typeValue );\n+\t\telItemNew.dataset.itemType = typeValue;\n+\t\tlpUtils.lpShowHideEl( elItemNew, 1 );\n+\t\tlpUtils.lpSetLoadingEl( elItemNew, 1 );\n+\t\telItemTitleInput.value = titleValue;\n+\t\telItemTitleInput.dataset.old = titleValue;\n+\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemNew );\n+\t\telAddItemType.remove();\n+\n+\t\t\u002F\u002F Call ajax to add item to section\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\telItemNew.remove();\n+\t\t\t\t} else if ( status === 'success' ) {\n+\t\t\t\t\tconst { section_item, item_link } = data || {};\n+\t\t\t\t\tconst itemId = section_item.item_id || 0;\n+\t\t\t\t\telItemNew.dataset.itemId = itemId;\n+\t\t\t\t\telItemNew.querySelector( '.edit-link' ).setAttribute( 'href', item_link || '' );\n+\n+\t\t\t\t\t\u002F\u002F Add popup attributes for Course Builder context\n+\t\t\t\t\tthis.addPopupAttributesToItem( elItemNew, itemId, typeValue );\n+\n+\t\t\t\t\t\u002F\u002F Call callback nest if exists\n+\t\t\t\t\tif ( callBackNest && typeof callBackNest.success === 'function' ) {\n+\t\t\t\t\t\targs.elItemNew = elItemNew;\n+\t\t\t\t\t\tcallBackNest.success( args );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\telItemNew.remove();\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elItemNew, 0 );\n+\t\t\t\tthis.updateCountItems( elSection );\n+\n+\t\t\t\t\u002F\u002F Call callback nest if exists\n+\t\t\t\tif ( callBackNest && typeof callBackNest.completed === 'function' ) {\n+\t\t\t\t\targs.elItemNew = elItemNew;\n+\t\t\t\t\tcallBackNest.completed( args );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\tcourse_id: this.courseId,\n+\t\t\taction: 'create_item_add_to_section',\n+\t\t\tsection_id: sectionId,\n+\t\t\titem_title: titleValue,\n+\t\t\titem_type: typeValue,\n+\t\t\targs: { id_url: idUrlHandle },\n+\t\t};\n+\n+\t\tif ( document.querySelector( '#lp-course-builder' ) ) {\n+\t\t\tdataSend.is_course_builder = 1;\n+\t\t}\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Typing in title input *\u002F\n+\tchangeTitle( args ) {\n+\t\tconst { target } = args;\n+\t\tconst elItemTitleInput = target.closest( `${ EditSectionItem.selectors.elItemTitleInput }` );\n+\t\tif ( ! elItemTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionItem = elItemTitleInput.closest(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\n+\t\t);\n+\t\tif ( ! elSectionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst titleValue = elItemTitleInput.value.trim();\n+\t\tconst titleValueOld = elItemTitleInput.dataset.old || '';\n+\n+\t\tif ( titleValue === titleValueOld ) {\n+\t\t\telSectionItem.classList.remove( 'editing' );\n+\t\t} else {\n+\t\t\telSectionItem.classList.add( 'editing' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Focus in item title input *\u002F\n+\tfocusTitleInput( args ) {\n+\t\tconst { target, focusIn = true } = args;\n+\n+\t\tconst elItemTitleInput = target.closest( `${ EditSectionItem.selectors.elItemTitleInput }` );\n+\t\tif ( ! elItemTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionItem = elItemTitleInput.closest(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\n+\t\t);\n+\t\tif ( ! elSectionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( focusIn ) {\n+\t\t\telSectionItem.classList.add( 'focus' );\n+\t\t} else {\n+\t\t\telSectionItem.classList.remove( 'focus' );\n+\t\t}\n+\t}\n+\n+\tchangeTitleAddNew( args ) {\n+\t\tconst { target } = args;\n+\t\tconst elAddItemTypeTitleInput = target.closest(\n+\t\t\t`${ EditSectionItem.selectors.elAddItemTypeTitleInput }`\n+\t\t);\n+\t\tif ( ! elAddItemTypeTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elAddItemType = elAddItemTypeTitleInput.closest(\n+\t\t\t`${ EditSectionItem.selectors.elAddItemType }`\n+\t\t);\n+\t\tif ( ! elAddItemType ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnAddItem = elAddItemType.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elBtnAddItem }`\n+\t\t);\n+\t\tif ( ! elBtnAddItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst titleValue = elAddItemTypeTitleInput.value.trim();\n+\t\tif ( titleValue.length === 0 ) {\n+\t\t\telBtnAddItem.classList.remove( 'active' );\n+\t\t} else {\n+\t\t\telBtnAddItem.classList.add( 'active' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Update item title *\u002F\n+\tupdateTitle( args ) {\n+\t\tconst { e, target } = args;\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elSectionItem = target.closest( `${ EditSectionItem.selectors.elSectionItem }` );\n+\t\tif ( ! elSectionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSection = elSectionItem.closest( `${ EditSection.selectors.elSection }` );\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elItemTitleInput = elSectionItem.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\n+\t\t);\n+\t\tif ( ! elItemTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst itemId = elSectionItem.dataset.itemId;\n+\t\tconst itemType = elSectionItem.dataset.itemType;\n+\t\tconst itemTitleValue = elItemTitleInput.value.trim();\n+\t\tconst titleOld = elItemTitleInput.dataset.old;\n+\t\tconst message = elItemTitleInput.dataset.messEmptyTitle;\n+\t\tif ( itemTitleValue.length === 0 ) {\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( itemTitleValue === titleOld ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Un-focus input item title\n+\t\telItemTitleInput.blur();\n+\t\t\u002F\u002F show loading\n+\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\n+\t\t\u002F\u002F Call ajax to update item title\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\telItemTitleInput.dataset.old = itemTitleValue;\n+\t\t\t\t} else {\n+\t\t\t\t\telItemTitleInput.value = titleOld;\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\n+\t\t\t\telSectionItem.classList.remove( 'editing' );\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\tcourse_id: this.courseId,\n+\t\t\taction: 'update_item_of_section',\n+\t\t\tsection_id: elSection.dataset.sectionId,\n+\t\t\titem_id: itemId,\n+\t\t\titem_type: itemType,\n+\t\t\titem_title: itemTitleValue,\n+\t\t\targs: { id_url: idUrlHandle },\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Cancel update item title *\u002F\n+\tcancelUpdateTitle( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnCancelUpdateTitle = target.closest(\n+\t\t\t`${ EditSectionItem.selectors.elBtnCancelUpdateTitle }`\n+\t\t);\n+\t\tif ( ! elBtnCancelUpdateTitle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionItem = elBtnCancelUpdateTitle.closest(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\n+\t\t);\n+\t\tconst elItemTitleInput = elSectionItem.querySelector(\n+\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\n+\t\t);\n+\t\telItemTitleInput.value = elItemTitleInput.dataset.old || '';\n+\t\telSectionItem.classList.remove( 'editing' );\n+\t}\n+\n+\t\u002F* Delete item from section *\u002F\n+\tdeleteItem( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnDeleteItem = target.closest( `${ EditSectionItem.selectors.elBtnDeleteItem }` );\n+\t\tif ( ! elBtnDeleteItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionItem = elBtnDeleteItem.closest( `${ EditSectionItem.selectors.elSectionItem }` );\n+\t\tif ( ! elSectionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst itemId = elSectionItem.dataset.itemId;\n+\t\tconst elSection = elSectionItem.closest( `${ EditSection.selectors.elSection }` );\n+\t\tconst sectionId = elSection.dataset.sectionId;\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnDeleteItem.dataset.title,\n+\t\t\ttext: elBtnDeleteItem.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\n+\n+\t\t\t\t\u002F\u002F Call ajax to delete item from section\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\t\telSectionItem.remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\n+\t\t\t\t\t\tthis.updateCountItems( elSection );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tconst dataSend = {\n+\t\t\t\t\tcourse_id: this.courseId,\n+\t\t\t\t\taction: 'delete_item_from_section',\n+\t\t\t\t\tsection_id: sectionId,\n+\t\t\t\t\titem_id: itemId,\n+\t\t\t\t\targs: { id_url: idUrlHandle },\n+\t\t\t\t};\n+\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F* Sortable items, can drop on multiple sections *\u002F\n+\tsortAbleItem() {\n+\t\tconst elSectionListItems = this.elCurriculumSections.querySelectorAll(\n+\t\t\t`${ EditSectionItem.selectors.elSectionListItems }`\n+\t\t);\n+\t\tlet itemIdChoose = 0;\n+\t\tlet elSectionChoose;\n+\t\tlet sectionIdChoose = 0;\n+\t\tlet sectionIdEnd = 0;\n+\t\tlet timeout;\n+\t\telSectionListItems.forEach( ( elItem ) => {\n+\t\t\tnew Sortable( elItem, {\n+\t\t\t\thandle: '.drag',\n+\t\t\t\tanimation: 150,\n+\t\t\t\tgroup: { name: 'shared' },\n+\t\t\t\tonEnd: ( evt ) => {\n+\t\t\t\t\tconst dataSectionsItems = [];\n+\n+\t\t\t\t\tconst elItemDragged = evt.item;\n+\t\t\t\t\tsectionIdEnd = elItemDragged.closest( `${ EditSection.selectors.elSection }` ).dataset\n+\t\t\t\t\t\t.sectionId;\n+\n+\t\t\t\t\tconst dataSend = {\n+\t\t\t\t\t\tcourse_id: this.courseId,\n+\t\t\t\t\t\targs: { id_url: idUrlHandle },\n+\t\t\t\t\t};\n+\n+\t\t\t\t\tdataSend.action = 'update_item_section_and_position';\n+\t\t\t\t\tdataSend.item_id_change = itemIdChoose;\n+\t\t\t\t\tdataSend.section_id_new_of_item = sectionIdEnd;\n+\t\t\t\t\tdataSend.section_id_old_of_item = sectionIdChoose;\n+\n+\t\t\t\t\t\u002F\u002F Send list items position\n+\t\t\t\t\tconst section = this.elCurriculumSections.querySelector(\n+\t\t\t\t\t\t`.section[data-section-id=\"${ sectionIdEnd }\"]`\n+\t\t\t\t\t);\n+\t\t\t\t\tconst items = section.querySelectorAll( `${ EditSectionItem.selectors.elSectionItem }` );\n+\t\t\t\t\titems.forEach( ( elItem ) => {\n+\t\t\t\t\t\tconst itemId = parseInt( elItem.dataset.itemId || 0 );\n+\t\t\t\t\t\tif ( itemId === 0 ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tdataSectionsItems.push( itemId );\n+\t\t\t\t\t} );\n+\t\t\t\t\tdataSend.items_position = dataSectionsItems;\n+\n+\t\t\t\t\t\u002F\u002F Call ajax to update items position\n+\t\t\t\t\tconst callBack = {\n+\t\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elItemDragged, 0 );\n+\t\t\t\t\t\t\tthis.updateCountItems( section );\n+\t\t\t\t\t\t\tif ( sectionIdChoose !== sectionIdEnd ) {\n+\t\t\t\t\t\t\t\tthis.updateCountItems( elSectionChoose );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t};\n+\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elItemDragged, 1 );\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t},\n+\t\t\t\tonMove: ( \u002F*evt*\u002F ) => {},\n+\t\t\t\tonChoose: ( evt ) => {\n+\t\t\t\t\tconst elChooseItem = evt.item;\n+\t\t\t\t\titemIdChoose = elChooseItem.dataset.itemId;\n+\t\t\t\t\telSectionChoose = elChooseItem.closest( `${ EditSection.selectors.elSection }` );\n+\t\t\t\t\tsectionIdChoose = elSectionChoose.dataset.sectionId;\n+\t\t\t\t},\n+\t\t\t\tonUpdate: ( \u002F*evt*\u002F ) => {},\n+\t\t\t} );\n+\t\t} );\n+\t}\n+\n+\t\u002F* Add items selected to section *\u002F\n+\taddItemsSelectedToSection( itemsSelectedData ) {\n+\t\t\u002F\u002F Skip if not in curriculum context (e.g., quiz popup)\n+\t\tif ( ! this.sectionIdSelected ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSection = document.querySelector(\n+\t\t\t`.section[data-section-id=\"${ this.sectionIdSelected }\"]`\n+\t\t);\n+\n+\t\t\u002F\u002F Skip if section element not found\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elItemClone = elSection.querySelector( `${ EditSectionItem.selectors.elItemClone }` );\n+\n+\t\t\u002F\u002F Check if we're in Course Builder context\n+\t\tconst isCourseBuilder = document.querySelector( '#lp-course-builder' ) !== null;\n+\n+\t\titemsSelectedData.forEach( ( item ) => {\n+\t\t\tconst elItemNew = elItemClone.cloneNode( true );\n+\t\t\tconst elInputTitleNew = elItemNew.querySelector(\n+\t\t\t\t`${ EditSectionItem.selectors.elItemTitleInput }`\n+\t\t\t);\n+\n+\t\t\telItemNew.dataset.itemId = item.id;\n+\t\t\telItemNew.classList.add( item.type );\n+\t\t\telItemNew.classList.remove( 'clone' );\n+\t\t\telItemNew.dataset.itemType = item.type;\n+\t\t\telItemNew.querySelector( '.edit-link' ).setAttribute( 'href', item.editLink || '' );\n+\t\t\telInputTitleNew.value = item.titleSelected || '';\n+\n+\t\t\tlpUtils.lpSetLoadingEl( elItemNew, 1 );\n+\t\t\tlpUtils.lpShowHideEl( elItemNew, 1 );\n+\t\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemNew );\n+\t\t} );\n+\n+\t\tSweetAlert.close();\n+\n+\t\tconst dataSend = {\n+\t\t\tcourse_id: this.courseId,\n+\t\t\taction: 'add_items_to_section',\n+\t\t\tsection_id: this.sectionIdSelected,\n+\t\t\titems: itemsSelectedData,\n+\t\t\tis_course_builder: isCourseBuilder ? 1 : 0,\n+\t\t\targs: { id_url: idUrlHandle },\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\t\t\t\tconst { html } = data || '';\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\titemsSelectedData.forEach( ( item ) => {\n+\t\t\t\t\tconst elItemAdded = elSection.querySelector(\n+\t\t\t\t\t\t`${ EditSectionItem.selectors.elSectionItem }[data-item-id=\"${ item.id }\"]`\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( elItemAdded ) {\n+\t\t\t\t\t\telItemAdded.remove();\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\n+\t\t\t\tif ( status === 'success' && html ) {\n+\t\t\t\t\t\u002F\u002F Server returns HTML with popup attributes already included when is_course_builder=1\n+\t\t\t\t\telItemClone.insertAdjacentHTML( 'beforebegin', html );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tthis.updateCountItems( elSection );\n+\t\t\t},\n+\t\t} );\n+\t}\n+\n+\t\u002F* Enable\u002Fdisable preview item *\u002F\n+\tupdatePreviewItem( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnSetPreviewItem = target.closest(\n+\t\t\t`${ EditSectionItem.selectors.elBtnSetPreviewItem }`\n+\t\t);\n+\t\tif ( ! elBtnSetPreviewItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionItem = elBtnSetPreviewItem.closest(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }`\n+\t\t);\n+\t\tif ( ! elSectionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst icon = elBtnSetPreviewItem.querySelector( 'a' );\n+\n+\t\ticon.classList.toggle( 'lp-icon-eye' );\n+\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\n+\n+\t\tconst enablePreview = ! icon.classList.contains( 'lp-icon-eye-slash' );\n+\n+\t\tconst itemId = elSectionItem.dataset.itemId;\n+\t\tconst itemType = elSectionItem.dataset.itemType;\n+\n+\t\tlpUtils.lpSetLoadingEl( elSectionItem, 1 );\n+\n+\t\t\u002F\u002F Call ajax to update item preview\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\ticon.classList.toggle( 'lp-icon-eye' );\n+\t\t\t\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\ticon.classList.toggle( 'lp-icon-eye' );\n+\t\t\t\ticon.classList.toggle( 'lp-icon-eye-slash' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSectionItem, 0 );\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\tcourse_id: this.courseId,\n+\t\t\taction: 'update_item_preview',\n+\t\t\titem_id: itemId,\n+\t\t\titem_type: itemType,\n+\t\t\tenable_preview: enablePreview ? 1 : 0,\n+\t\t\targs: { id_url: idUrlHandle },\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Update count items when item add\u002Fdelete or section delete *\u002F\n+\tupdateCountItems( elSection ) {\n+\t\tconst elEditCurriculum = this.elEditCurriculum;\n+\t\tconst elCountItemsAll = elEditCurriculum.querySelector( '.total-items' );\n+\t\tconst elItemsAll = elEditCurriculum.querySelectorAll(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }:not(.clone)`\n+\t\t);\n+\t\tconst itemsAllCount = elItemsAll.length;\n+\n+\t\telCountItemsAll.dataset.count = itemsAllCount;\n+\t\telCountItemsAll.querySelector( '.count' ).textContent = itemsAllCount;\n+\n+\t\t\u002F\u002F Count items in section\n+\t\tconst elSectionItemsCount = elSection.querySelector( '.section-items-counts' );\n+\n+\t\tconst elItems = elSection.querySelectorAll(\n+\t\t\t`${ EditSectionItem.selectors.elSectionItem }:not(.clone)`\n+\t\t);\n+\t\tconst itemsCount = elItems.length;\n+\n+\t\telSectionItemsCount.dataset.count = itemsCount;\n+\t\telSectionItemsCount.querySelector( '.count' ).textContent = itemsCount;\n+\t}\n+\n+\t\u002F**\n+\t * Add popup attributes to item element for Course Builder context.\n+\t * Only applies when in Course Builder (not admin edit course page).\n+\t *\n+\t * @param {HTMLElement} elItem - The item element\n+\t * @param {number} itemId - The item ID\n+\t * @param {string} itemType - The item type (lp_lesson, lp_quiz, lp_assignment)\n+\t *\u002F\n+\taddPopupAttributesToItem( elItem, itemId, itemType ) {\n+\t\t\u002F\u002F Check if we're in Course Builder context\n+\t\tconst isCourseBuilder = document.querySelector( '#lp-course-builder' ) !== null;\n+\n+\t\tif ( ! isCourseBuilder || ! itemId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst popupType = itemType.replace( \u002F^lp_\u002F, '' );\n+\t\tconst templateSelector = `#lp-tmpl-builder-popup-curriculum-${ popupType }-course-${ this.courseId }`;\n+\n+\t\tif ( ! popupType || ! document.querySelector( templateSelector ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Find the edit link element - it's an \u003Ca> with class 'edit-link' inside .item-actions\n+\t\tconst editLink = elItem.querySelector( '.item-actions .edit-link' );\n+\t\tif ( ! editLink ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Get the parent \u003Cli> element of the edit link\n+\t\tconst editBtn = editLink.closest( 'li' );\n+\t\tif ( ! editBtn ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Add popup data attributes based on item type\n+\t\tif ( itemType === 'lp_lesson' ) {\n+\t\t\teditBtn.setAttribute( 'data-popup-lesson', itemId );\n+\t\t} else if ( itemType === 'lp_quiz' ) {\n+\t\t\teditBtn.setAttribute( 'data-popup-quiz', itemId );\n+\t\t}\n+\n+\t\t\u002F\u002F Add popup class to the \u003Cli> element\n+\t\teditBtn.classList.add( 'lp-btn-edit-item-popup' );\n+\n+\t\t\u002F\u002F Update edit link: remove target=\"_blank\" and update classes for popup behavior\n+\t\teditLink.removeAttribute( 'target' );\n+\t\teditLink.removeAttribute( 'href' );\n+\t\teditLink.classList.add( 'edit-popup-link' );\n+\n+\t\t\u002F\u002F Store additional data for popup on the \u003Cli> element\n+\t\teditBtn.setAttribute( 'data-course-id', this.courseId );\n+\t\teditBtn.setAttribute( 'data-popup-type', popupType );\n+\t\teditBtn.setAttribute( 'data-popup-id', itemId );\n+\t\teditBtn.setAttribute( 'data-template', templateSelector );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum\u002Fedit-section.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,803 +1,803 @@\n-\u002F**\r\n- * Edit Section Script on Curriculum\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.3\r\n- *\u002F\r\n-import SweetAlert from 'sweetalert2';\r\n-import Sortable from 'sortablejs';\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-import { EditSectionItem } from '.\u002Fedit-section-item.js';\r\n-import { EditCourseCurriculum } from '..\u002Fedit-curriculum.js';\r\n-\r\n-export class EditSection {\r\n-\tconstructor() {\r\n-\t\tthis.courseId = null;\r\n-\t\tthis.elEditCurriculum = null;\r\n-\t\tthis.elCurriculumSections = null;\r\n-\t\tthis.editSectionItem = new EditSectionItem();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telSection: '.section',\r\n-\t\telDivAddNewSection: '.add-new-section',\r\n-\t\telSectionClone: '.section.clone',\r\n-\t\telSectionTitleNewInput: '.lp-section-title-new-input',\r\n-\t\telSectionTitleInput: '.lp-section-title-input',\r\n-\t\tetBtnEditTitle: '.lp-btn-edit-section-title',\r\n-\t\telSectionDesInput: '.lp-section-description-input',\r\n-\t\telBtnAddSection: '.lp-btn-add-section',\r\n-\t\telBtnUpdateTitle: '.lp-btn-update-section-title',\r\n-\t\telBtnUpdateDes: '.lp-btn-update-section-description',\r\n-\t\telBtnCancelUpdateTitle: '.lp-btn-cancel-update-section-title',\r\n-\t\telBtnCancelUpdateDes: '.lp-btn-cancel-update-section-description',\r\n-\t\telBtnDeleteSection: '.lp-btn-delete-section',\r\n-\t\telSectionDesc: '.section-description',\r\n-\t\telSectionToggle: '.section-toggle',\r\n-\t\telCountSections: '.count-sections',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tthis.elEditCurriculum = document.querySelector(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\r\n-\t\t);\r\n-\t\tthis.elCurriculumSections = this.elEditCurriculum.querySelector(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\r\n-\t\t);\r\n-\t\tconst elLPTarget = this.elEditCurriculum.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.LPTarget }`\r\n-\t\t);\r\n-\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\tthis.courseId = dataSend.args.course_id;\r\n-\r\n-\t\tthis.editSectionItem.init();\r\n-\r\n-\t\tthis.events();\r\n-\t\tthis.sortAbleSection();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\t\u002F\u002F Check and attach events only once\r\n-\t\tif ( EditSection._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tEditSection._loadedEvents = this;\r\n-\r\n-\t\t\u002F\u002F Click events\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elBtnAddSection,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addSection.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elBtnUpdateDes }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateSectionDescription.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.etBtnEditTitle }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.setFocusTitleInput.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elSectionToggle }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.toggleSection.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elBtnCancelUpdateDes }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.cancelSectionDescription.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elBtnDeleteSection }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.deleteSection.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elBtnUpdateTitle }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateSectionTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elBtnCancelUpdateTitle }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.cancelSectionTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditCourseCurriculum.selectors.elToggleAllSections,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.toggleSectionAll.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keyup events\r\n-\t\tlpUtils.eventHandlers( 'keyup', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeTitleBeforeAdd.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionDesInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeDescription.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keydown events\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addSection.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionDesInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateSectionDescription.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateSectionTitle.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Focusin events\r\n-\t\tlpUtils.eventHandlers( 'focusin', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleNewInput.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleInput.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Focusin events\r\n-\t\tlpUtils.eventHandlers( 'focusout', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleNewInput.name,\r\n-\t\t\t\tfocusIn: false,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditSection.selectors.elSectionTitleInput }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.focusTitleInput.name,\r\n-\t\t\t\tfocusIn: false,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\t\u002F* Typing in new section title input *\u002F\r\n-\tchangeTitleBeforeAdd( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elSectionTitleNewInput = target;\r\n-\r\n-\t\tconst elAddNewSection = elSectionTitleNewInput.closest(\r\n-\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\r\n-\t\t);\r\n-\t\tif ( ! elAddNewSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnAddSection = elAddNewSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elBtnAddSection }`\r\n-\t\t);\r\n-\r\n-\t\tconst titleValue = elSectionTitleNewInput.value.trim();\r\n-\t\tif ( titleValue.length === 0 ) {\r\n-\t\t\telBtnAddSection.classList.remove( 'active' );\r\n-\t\t} else {\r\n-\t\t\telBtnAddSection.classList.add( 'active' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Focus on new section title input *\u002F\r\n-\tfocusTitleNewInput( args ) {\r\n-\t\tconst { e, target, focusIn = true } = args;\r\n-\t\tconst elAddNewSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\r\n-\t\t);\r\n-\t\tif ( ! elAddNewSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( focusIn ) {\r\n-\t\t\telAddNewSection.classList.add( 'focus' );\r\n-\t\t} else {\r\n-\t\t\telAddNewSection.classList.remove( 'focus' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Add new section *\u002F\r\n-\taddSection( args ) {\r\n-\t\tconst { e, target, callBackNest } = args;\r\n-\r\n-\t\tconst elDivAddNewSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\r\n-\t\t);\r\n-\t\tif ( ! elDivAddNewSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elSectionTitleNewInput = elDivAddNewSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionTitleNewInput }`\r\n-\t\t);\r\n-\t\tconst titleValue = elSectionTitleNewInput.value.trim();\r\n-\t\tconst message = elSectionTitleNewInput.dataset.messEmptyTitle;\r\n-\t\tif ( titleValue.length === 0 ) {\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear input after add\r\n-\t\telSectionTitleNewInput.value = '';\r\n-\t\telSectionTitleNewInput.blur();\r\n-\r\n-\t\t\u002F\u002F Add and set data for new section\r\n-\t\tconst elSectionClone = this.elCurriculumSections.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionClone }`\r\n-\t\t);\r\n-\t\tconst newSection = elSectionClone.cloneNode( true );\r\n-\t\tnewSection.classList.remove( 'clone' );\r\n-\t\tlpUtils.lpShowHideEl( newSection, 1 );\r\n-\t\tlpUtils.lpSetLoadingEl( newSection, 1 );\r\n-\t\tconst elSectionTitleInput = newSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\r\n-\t\t);\r\n-\t\telSectionTitleInput.value = titleValue;\r\n-\t\tthis.elCurriculumSections.insertAdjacentElement(\r\n-\t\t\t'beforeend',\r\n-\t\t\tnewSection\r\n-\t\t);\r\n-\t\t\u002F\u002F End\r\n-\r\n-\t\t\u002F\u002F Call ajax to add new section\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tnewSection.remove();\r\n-\t\t\t\t\tthrow message;\r\n-\t\t\t\t} else if ( status === 'success' ) {\r\n-\t\t\t\t\tconst { section } = data;\r\n-\t\t\t\t\tnewSection.dataset.sectionId = section.section_id || '';\r\n-\r\n-\t\t\t\t\t\u002F\u002F Initialize EditSectionItem for the new section to make its items sortable\r\n-\t\t\t\t\tthis.editSectionItem.sortAbleItem();\r\n-\r\n-\t\t\t\t\tif (\r\n-\t\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\t\ttypeof callBackNest.success === 'function'\r\n-\t\t\t\t\t) {\r\n-\t\t\t\t\t\targs.elSection = newSection;\r\n-\t\t\t\t\t\targs.response = response;\r\n-\t\t\t\t\t\tcallBackNest.success( args );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tnewSection.remove();\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.error === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\targs.error = error;\r\n-\t\t\t\t\tcallBackNest.error( args );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( newSection, 0 );\r\n-\t\t\t\tnewSection.classList.remove(\r\n-\t\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elSectionDesInput = newSection.querySelector(\r\n-\t\t\t\t\t`${ EditSection.selectors.elSectionDesInput }`\r\n-\t\t\t\t);\r\n-\t\t\t\telSectionDesInput.focus();\r\n-\t\t\t\tthis.updateCountSections( this.elEditCurriculum );\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.completed === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\targs.elSection = newSection;\r\n-\t\t\t\t\tcallBackNest.completed( args );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = JSON.parse( elSectionTitleNewInput.dataset.send );\r\n-\t\tdataSend.section_name = titleValue;\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Delete section *\u002F\r\n-\tdeleteSection( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnDeleteSection = target;\r\n-\r\n-\t\tconst elEditCurriculum = elBtnDeleteSection.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\r\n-\t\t);\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnDeleteSection.dataset.title,\r\n-\t\t\ttext: elBtnDeleteSection.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpData.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpData.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tconst elSection = elBtnDeleteSection.closest( '.section' );\r\n-\t\t\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\r\n-\r\n-\t\t\t\t\u002F\u002F Call ajax to delete section\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\r\n-\t\t\t\t\t\telSection.remove();\r\n-\t\t\t\t\t\tthis.editSectionItem.updateCountItems( elSection );\r\n-\t\t\t\t\t\tthis.updateCountSections( elEditCurriculum );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tconst dataSend = JSON.parse( elBtnDeleteSection.dataset.send );\r\n-\t\t\t\tdataSend.section_id = sectionId;\r\n-\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Focus on section title input *\u002F\r\n-\tfocusTitleInput( args ) {\r\n-\t\tconst { e, target, focusIn = true } = args;\r\n-\t\tconst elSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tif ( ! elSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( focusIn ) {\r\n-\t\t\telSection.classList.add( 'focus' );\r\n-\t\t} else {\r\n-\t\t\telSection.classList.remove( 'focus' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Set focus on section title input *\u002F\r\n-\tsetFocusTitleInput( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\r\n-\t\tconst elSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tif ( ! elSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionTitleInput = elSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\r\n-\t\t);\r\n-\t\telSectionTitleInput.setSelectionRange(\r\n-\t\t\telSectionTitleInput.value.length,\r\n-\t\t\telSectionTitleInput.value.length\r\n-\t\t);\r\n-\t\telSectionTitleInput.focus();\r\n-\t}\r\n-\r\n-\t\u002F* Typing in section title input *\u002F\r\n-\tchangeTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elSectionTitleInput = target;\r\n-\t\tconst elSection = elSectionTitleInput.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst titleValue = elSectionTitleInput.value.trim();\r\n-\t\tconst titleValueOld = elSectionTitleInput.dataset.old || '';\r\n-\r\n-\t\tif ( titleValue === titleValueOld ) {\r\n-\t\t\telSection.classList.remove( 'editing' );\r\n-\t\t} else {\r\n-\t\t\telSection.classList.add( 'editing' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Update section title to server *\u002F\r\n-\tupdateSectionTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tif ( ! elSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elSectionTitleInput = elSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\t\tconst titleValue = elSectionTitleInput.value.trim();\r\n-\t\tconst titleValueOld = elSectionTitleInput.dataset.old || '';\r\n-\t\tconst message = elSectionTitleInput.dataset.messEmptyTitle;\r\n-\t\tif ( titleValue.length === 0 ) {\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( titleValue === titleValueOld ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\telSectionTitleInput.blur();\r\n-\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\r\n-\r\n-\t\t\u002F\u002F Call ajax to update section title\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\telSectionTitleInput.dataset.old = titleValue;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\r\n-\t\t\t\telSection.classList.remove( 'editing' );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = JSON.parse( elSectionTitleInput.dataset.send );\r\n-\t\tdataSend.section_id = sectionId;\r\n-\t\tdataSend.section_name = titleValue;\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Cancel updating section title *\u002F\r\n-\tcancelSectionTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnCancelUpdateTitle = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elBtnCancelUpdateTitle }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnCancelUpdateTitle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSection = elBtnCancelUpdateTitle.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst elSectionTitleInput = elSection.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\r\n-\t\t);\r\n-\t\telSectionTitleInput.value = elSectionTitleInput.dataset.old || '';\r\n-\t\telSection.classList.remove( 'editing' );\r\n-\t}\r\n-\r\n-\t\u002F* Update section description to server *\u002F\r\n-\tupdateSectionDescription( args ) {\r\n-\t\tconst { e, target, callBackNest } = args;\r\n-\r\n-\t\tconst elSectionDesc = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesc }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionDesc ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionDesInput = elSectionDesc.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesInput }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionDesInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elSection = elSectionDesInput.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\t\tconst descValue = elSectionDesInput.value.trim();\r\n-\t\tconst descValueOld = elSectionDesInput.dataset.old || '';\r\n-\r\n-\t\tif ( descValue === descValueOld ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.success === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\targs.elSection = elSection;\r\n-\t\t\t\t\targs.response = response;\r\n-\t\t\t\t\tcallBackNest.success( args );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.error === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tcallBackNest.error( elSection, error );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\r\n-\t\t\t\tconst elSectionDesc = elSectionDesInput.closest(\r\n-\t\t\t\t\t`${ EditSection.selectors.elSectionDesc }`\r\n-\t\t\t\t);\r\n-\t\t\t\telSectionDesc.classList.remove( 'editing' );\r\n-\t\t\t\telSectionDesInput.dataset.old = descValue;\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackNest &&\r\n-\t\t\t\t\ttypeof callBackNest.completed === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tcallBackNest.completed( elSection );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = JSON.parse( elSectionDesInput.dataset.send );\r\n-\t\tdataSend.section_id = sectionId;\r\n-\t\tdataSend.section_description = descValue;\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F* Cancel updating section description *\u002F\r\n-\tcancelSectionDescription( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elSectionDesc = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesc }`\r\n-\t\t);\r\n-\t\tconst elSectionDesInput = elSectionDesc.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesInput }`\r\n-\t\t);\r\n-\t\telSectionDesInput.value = elSectionDesInput.dataset.old || '';\r\n-\t\telSectionDesc.classList.remove( 'editing' );\r\n-\t}\r\n-\r\n-\t\u002F* Typing in description input *\u002F\r\n-\tchangeDescription( ags ) {\r\n-\t\tconst { e, target } = ags;\r\n-\t\tconst elSectionDesInput = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesInput }`\r\n-\t\t);\r\n-\t\tif ( ! elSectionDesInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSectionDesc = elSectionDesInput.closest(\r\n-\t\t\t`${ EditSection.selectors.elSectionDesc }`\r\n-\t\t);\r\n-\t\tconst descValue = elSectionDesInput.value.trim();\r\n-\t\tconst descValueOld = elSectionDesInput.dataset.old || '';\r\n-\r\n-\t\tif ( descValue === descValueOld ) {\r\n-\t\t\telSectionDesc.classList.remove( 'editing' );\r\n-\t\t} else {\r\n-\t\t\telSectionDesc.classList.add( 'editing' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\ttoggleSectionAll( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elToggleAllSections = target.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elToggleAllSections }`\r\n-\t\t);\r\n-\t\tif ( ! elToggleAllSections ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elEditCurriculum = elToggleAllSections.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\r\n-\t\t);\r\n-\t\tconst elSections = elEditCurriculum.querySelectorAll(\r\n-\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\r\n-\t\t);\r\n-\r\n-\t\telToggleAllSections.classList.toggle(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t);\r\n-\r\n-\t\telSections.forEach( ( el ) => {\r\n-\t\t\tconst shouldCollapse = elToggleAllSections.classList.contains(\r\n-\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t\t);\r\n-\t\t\tel.classList.toggle(\r\n-\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`,\r\n-\t\t\t\tshouldCollapse\r\n-\t\t\t);\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Toggle section *\u002F\r\n-\ttoggleSection( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elSection = target.closest(\r\n-\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t);\r\n-\r\n-\t\tconst elCurriculumSections = elSection.closest(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\r\n-\t\t);\r\n-\t\tif ( ! elCurriculumSections ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Toggle section\r\n-\t\telSection.classList.toggle(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Check all sections collapsed\r\n-\t\tthis.checkAllSectionsCollapsed();\r\n-\t}\r\n-\r\n-\t\u002F* Check if all sections are collapsed *\u002F\r\n-\tcheckAllSectionsCollapsed() {\r\n-\t\tconst elSections = this.elEditCurriculum.querySelectorAll(\r\n-\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\r\n-\t\t);\r\n-\t\tconst elToggleAllSections = this.elEditCurriculum.querySelector(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.elToggleAllSections }`\r\n-\t\t);\r\n-\r\n-\t\tlet isAllExpand = true;\r\n-\t\telSections.forEach( ( el ) => {\r\n-\t\t\tif (\r\n-\t\t\t\tel.classList.contains(\r\n-\t\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t\t\t)\r\n-\t\t\t) {\r\n-\t\t\t\tisAllExpand = false;\r\n-\t\t\t\treturn false; \u002F\u002F Break the loop\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tif ( isAllExpand ) {\r\n-\t\t\telToggleAllSections.classList.remove(\r\n-\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\telToggleAllSections.classList.add(\r\n-\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F* Sortable sections, drag and drop to change section position *\u002F\r\n-\tsortAbleSection() {\r\n-\t\tlet isUpdateSectionPosition = 0;\r\n-\t\tlet timeout;\r\n-\r\n-\t\tnew Sortable( this.elCurriculumSections, {\r\n-\t\t\thandle: '.drag',\r\n-\t\t\tanimation: 150,\r\n-\t\t\tonEnd: ( evt ) => {\r\n-\t\t\t\tconst target = evt.item;\r\n-\t\t\t\tif ( ! isUpdateSectionPosition ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst elSection = target.closest(\r\n-\t\t\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elSections = this.elCurriculumSections.querySelectorAll(\r\n-\t\t\t\t\t`${ EditSection.selectors.elSection }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst sectionIds = [];\r\n-\r\n-\t\t\t\telSections.forEach( ( elSection ) => {\r\n-\t\t\t\t\tconst sectionId = elSection.dataset.sectionId;\r\n-\t\t\t\t\tsectionIds.push( sectionId );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\t\u002F\u002F Call ajax to update section position\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\r\n-\t\t\t\t\t\tisUpdateSectionPosition = 0;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tconst dataSend = {\r\n-\t\t\t\t\taction: 'course_update_section_position',\r\n-\t\t\t\t\tcourse_id: this.courseId,\r\n-\t\t\t\t\tnew_position: sectionIds,\r\n-\t\t\t\t\targs: { id_url: 'course-update-section-position' },\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t\ttimeout = setTimeout( () => {\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t}, 1000 );\r\n-\t\t\t},\r\n-\t\t\tonMove: ( evt ) => {\r\n-\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t},\r\n-\t\t\tonUpdate: ( evt ) => {\r\n-\t\t\t\tisUpdateSectionPosition = 1;\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F* Update count sections, when add or delete section *\u002F\r\n-\tupdateCountSections( elEditCurriculum ) {\r\n-\t\tconst elCountSections = elEditCurriculum.querySelector(\r\n-\t\t\t`${ EditSection.selectors.elCountSections }`\r\n-\t\t);\r\n-\t\tconst elSections = elEditCurriculum.querySelectorAll(\r\n-\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\r\n-\t\t);\r\n-\t\tconst sectionsCount = elSections.length;\r\n-\r\n-\t\telCountSections.dataset.count = sectionsCount;\r\n-\t\telCountSections.querySelector( '.count' ).textContent = sectionsCount;\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Edit Section Script on Curriculum\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.3\n+ *\u002F\n+import SweetAlert from 'sweetalert2';\n+import Sortable from 'sortablejs';\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+import { EditSectionItem } from '.\u002Fedit-section-item.js';\n+import { EditCourseCurriculum } from '..\u002Fedit-curriculum.js';\n+\n+export class EditSection {\n+\tconstructor() {\n+\t\tthis.courseId = null;\n+\t\tthis.elEditCurriculum = null;\n+\t\tthis.elCurriculumSections = null;\n+\t\tthis.editSectionItem = new EditSectionItem();\n+\t}\n+\n+\tstatic selectors = {\n+\t\telSection: '.section',\n+\t\telDivAddNewSection: '.add-new-section',\n+\t\telSectionClone: '.section.clone',\n+\t\telSectionTitleNewInput: '.lp-section-title-new-input',\n+\t\telSectionTitleInput: '.lp-section-title-input',\n+\t\tetBtnEditTitle: '.lp-btn-edit-section-title',\n+\t\telSectionDesInput: '.lp-section-description-input',\n+\t\telBtnAddSection: '.lp-btn-add-section',\n+\t\telBtnUpdateTitle: '.lp-btn-update-section-title',\n+\t\telBtnUpdateDes: '.lp-btn-update-section-description',\n+\t\telBtnCancelUpdateTitle: '.lp-btn-cancel-update-section-title',\n+\t\telBtnCancelUpdateDes: '.lp-btn-cancel-update-section-description',\n+\t\telBtnDeleteSection: '.lp-btn-delete-section',\n+\t\telSectionDesc: '.section-description',\n+\t\telSectionToggle: '.section-toggle',\n+\t\telCountSections: '.count-sections',\n+\t};\n+\n+\tinit() {\n+\t\tthis.elEditCurriculum = document.querySelector(\n+\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\n+\t\t);\n+\t\tthis.elCurriculumSections = this.elEditCurriculum.querySelector(\n+\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\n+\t\t);\n+\t\tconst elLPTarget = this.elEditCurriculum.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.LPTarget }`\n+\t\t);\n+\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\tthis.courseId = dataSend.args.course_id;\n+\n+\t\tthis.editSectionItem.init();\n+\n+\t\tthis.events();\n+\t\tthis.sortAbleSection();\n+\t}\n+\n+\tevents() {\n+\t\t\u002F\u002F Check and attach events only once\n+\t\tif ( EditSection._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tEditSection._loadedEvents = this;\n+\n+\t\t\u002F\u002F Click events\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elBtnAddSection,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addSection.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elBtnUpdateDes }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateSectionDescription.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.etBtnEditTitle }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.setFocusTitleInput.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elSectionToggle }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.toggleSection.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elBtnCancelUpdateDes }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.cancelSectionDescription.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elBtnDeleteSection }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.deleteSection.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elBtnUpdateTitle }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateSectionTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elBtnCancelUpdateTitle }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.cancelSectionTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditCourseCurriculum.selectors.elToggleAllSections,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.toggleSectionAll.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keyup events\n+\t\tlpUtils.eventHandlers( 'keyup', [\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeTitleBeforeAdd.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionDesInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeDescription.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keydown events\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addSection.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionDesInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateSectionDescription.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateSectionTitle.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Focusin events\n+\t\tlpUtils.eventHandlers( 'focusin', [\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleNewInput.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleInput.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Focusin events\n+\t\tlpUtils.eventHandlers( 'focusout', [\n+\t\t\t{\n+\t\t\t\tselector: EditSection.selectors.elSectionTitleNewInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleNewInput.name,\n+\t\t\t\tfocusIn: false,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditSection.selectors.elSectionTitleInput }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.focusTitleInput.name,\n+\t\t\t\tfocusIn: false,\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\t\u002F* Typing in new section title input *\u002F\n+\tchangeTitleBeforeAdd( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elSectionTitleNewInput = target;\n+\n+\t\tconst elAddNewSection = elSectionTitleNewInput.closest(\n+\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\n+\t\t);\n+\t\tif ( ! elAddNewSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnAddSection = elAddNewSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elBtnAddSection }`\n+\t\t);\n+\n+\t\tconst titleValue = elSectionTitleNewInput.value.trim();\n+\t\tif ( titleValue.length === 0 ) {\n+\t\t\telBtnAddSection.classList.remove( 'active' );\n+\t\t} else {\n+\t\t\telBtnAddSection.classList.add( 'active' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Focus on new section title input *\u002F\n+\tfocusTitleNewInput( args ) {\n+\t\tconst { e, target, focusIn = true } = args;\n+\t\tconst elAddNewSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\n+\t\t);\n+\t\tif ( ! elAddNewSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( focusIn ) {\n+\t\t\telAddNewSection.classList.add( 'focus' );\n+\t\t} else {\n+\t\t\telAddNewSection.classList.remove( 'focus' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Add new section *\u002F\n+\taddSection( args ) {\n+\t\tconst { e, target, callBackNest } = args;\n+\n+\t\tconst elDivAddNewSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elDivAddNewSection }`\n+\t\t);\n+\t\tif ( ! elDivAddNewSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elSectionTitleNewInput = elDivAddNewSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionTitleNewInput }`\n+\t\t);\n+\t\tconst titleValue = elSectionTitleNewInput.value.trim();\n+\t\tconst message = elSectionTitleNewInput.dataset.messEmptyTitle;\n+\t\tif ( titleValue.length === 0 ) {\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Clear input after add\n+\t\telSectionTitleNewInput.value = '';\n+\t\telSectionTitleNewInput.blur();\n+\n+\t\t\u002F\u002F Add and set data for new section\n+\t\tconst elSectionClone = this.elCurriculumSections.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionClone }`\n+\t\t);\n+\t\tconst newSection = elSectionClone.cloneNode( true );\n+\t\tnewSection.classList.remove( 'clone' );\n+\t\tlpUtils.lpShowHideEl( newSection, 1 );\n+\t\tlpUtils.lpSetLoadingEl( newSection, 1 );\n+\t\tconst elSectionTitleInput = newSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\n+\t\t);\n+\t\telSectionTitleInput.value = titleValue;\n+\t\tthis.elCurriculumSections.insertAdjacentElement(\n+\t\t\t'beforeend',\n+\t\t\tnewSection\n+\t\t);\n+\t\t\u002F\u002F End\n+\n+\t\t\u002F\u002F Call ajax to add new section\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tnewSection.remove();\n+\t\t\t\t\tthrow message;\n+\t\t\t\t} else if ( status === 'success' ) {\n+\t\t\t\t\tconst { section } = data;\n+\t\t\t\t\tnewSection.dataset.sectionId = section.section_id || '';\n+\n+\t\t\t\t\t\u002F\u002F Initialize EditSectionItem for the new section to make its items sortable\n+\t\t\t\t\tthis.editSectionItem.sortAbleItem();\n+\n+\t\t\t\t\tif (\n+\t\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\t\ttypeof callBackNest.success === 'function'\n+\t\t\t\t\t) {\n+\t\t\t\t\t\targs.elSection = newSection;\n+\t\t\t\t\t\targs.response = response;\n+\t\t\t\t\t\tcallBackNest.success( args );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tnewSection.remove();\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\ttypeof callBackNest.error === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\targs.error = error;\n+\t\t\t\t\tcallBackNest.error( args );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( newSection, 0 );\n+\t\t\t\tnewSection.classList.remove(\n+\t\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t\t\t);\n+\t\t\t\tconst elSectionDesInput = newSection.querySelector(\n+\t\t\t\t\t`${ EditSection.selectors.elSectionDesInput }`\n+\t\t\t\t);\n+\t\t\t\telSectionDesInput.focus();\n+\t\t\t\tthis.updateCountSections( this.elEditCurriculum );\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\ttypeof callBackNest.completed === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\targs.elSection = newSection;\n+\t\t\t\t\tcallBackNest.completed( args );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = JSON.parse( elSectionTitleNewInput.dataset.send );\n+\t\tdataSend.section_name = titleValue;\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Delete section *\u002F\n+\tdeleteSection( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnDeleteSection = target;\n+\n+\t\tconst elEditCurriculum = elBtnDeleteSection.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\n+\t\t);\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnDeleteSection.dataset.title,\n+\t\t\ttext: elBtnDeleteSection.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tconst elSection = elBtnDeleteSection.closest( '.section' );\n+\t\t\t\tconst sectionId = elSection.dataset.sectionId;\n+\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\n+\n+\t\t\t\t\u002F\u002F Call ajax to delete section\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\n+\t\t\t\t\t\telSection.remove();\n+\t\t\t\t\t\tthis.editSectionItem.updateCountItems( elSection );\n+\t\t\t\t\t\tthis.updateCountSections( elEditCurriculum );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tconst dataSend = JSON.parse( elBtnDeleteSection.dataset.send );\n+\t\t\t\tdataSend.section_id = sectionId;\n+\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F* Focus on section title input *\u002F\n+\tfocusTitleInput( args ) {\n+\t\tconst { e, target, focusIn = true } = args;\n+\t\tconst elSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( focusIn ) {\n+\t\t\telSection.classList.add( 'focus' );\n+\t\t} else {\n+\t\t\telSection.classList.remove( 'focus' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Set focus on section title input *\u002F\n+\tsetFocusTitleInput( args ) {\n+\t\tconst { e, target } = args;\n+\n+\t\tconst elSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionTitleInput = elSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\n+\t\t);\n+\t\telSectionTitleInput.setSelectionRange(\n+\t\t\telSectionTitleInput.value.length,\n+\t\t\telSectionTitleInput.value.length\n+\t\t);\n+\t\telSectionTitleInput.focus();\n+\t}\n+\n+\t\u002F* Typing in section title input *\u002F\n+\tchangeTitle( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elSectionTitleInput = target;\n+\t\tconst elSection = elSectionTitleInput.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tconst titleValue = elSectionTitleInput.value.trim();\n+\t\tconst titleValueOld = elSectionTitleInput.dataset.old || '';\n+\n+\t\tif ( titleValue === titleValueOld ) {\n+\t\t\telSection.classList.remove( 'editing' );\n+\t\t} else {\n+\t\t\telSection.classList.add( 'editing' );\n+\t\t}\n+\t}\n+\n+\t\u002F* Update section title to server *\u002F\n+\tupdateSectionTitle( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elSectionTitleInput = elSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\n+\t\t);\n+\t\tif ( ! elSectionTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst sectionId = elSection.dataset.sectionId;\n+\t\tconst titleValue = elSectionTitleInput.value.trim();\n+\t\tconst titleValueOld = elSectionTitleInput.dataset.old || '';\n+\t\tconst message = elSectionTitleInput.dataset.messEmptyTitle;\n+\t\tif ( titleValue.length === 0 ) {\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( titleValue === titleValueOld ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\telSectionTitleInput.blur();\n+\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\n+\n+\t\t\u002F\u002F Call ajax to update section title\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\telSectionTitleInput.dataset.old = titleValue;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\n+\t\t\t\telSection.classList.remove( 'editing' );\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = JSON.parse( elSectionTitleInput.dataset.send );\n+\t\tdataSend.section_id = sectionId;\n+\t\tdataSend.section_name = titleValue;\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Cancel updating section title *\u002F\n+\tcancelSectionTitle( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnCancelUpdateTitle = target.closest(\n+\t\t\t`${ EditSection.selectors.elBtnCancelUpdateTitle }`\n+\t\t);\n+\t\tif ( ! elBtnCancelUpdateTitle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSection = elBtnCancelUpdateTitle.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tconst elSectionTitleInput = elSection.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionTitleInput }`\n+\t\t);\n+\t\telSectionTitleInput.value = elSectionTitleInput.dataset.old || '';\n+\t\telSection.classList.remove( 'editing' );\n+\t}\n+\n+\t\u002F* Update section description to server *\u002F\n+\tupdateSectionDescription( args ) {\n+\t\tconst { e, target, callBackNest } = args;\n+\n+\t\tconst elSectionDesc = target.closest(\n+\t\t\t`${ EditSection.selectors.elSectionDesc }`\n+\t\t);\n+\t\tif ( ! elSectionDesc ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionDesInput = elSectionDesc.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionDesInput }`\n+\t\t);\n+\t\tif ( ! elSectionDesInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elSection = elSectionDesInput.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\t\tconst sectionId = elSection.dataset.sectionId;\n+\t\tconst descValue = elSectionDesInput.value.trim();\n+\t\tconst descValueOld = elSectionDesInput.dataset.old || '';\n+\n+\t\tif ( descValue === descValueOld ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\ttypeof callBackNest.success === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\targs.elSection = elSection;\n+\t\t\t\t\targs.response = response;\n+\t\t\t\t\tcallBackNest.success( args );\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\ttypeof callBackNest.error === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\tcallBackNest.error( elSection, error );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\n+\t\t\t\tconst elSectionDesc = elSectionDesInput.closest(\n+\t\t\t\t\t`${ EditSection.selectors.elSectionDesc }`\n+\t\t\t\t);\n+\t\t\t\telSectionDesc.classList.remove( 'editing' );\n+\t\t\t\telSectionDesInput.dataset.old = descValue;\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackNest &&\n+\t\t\t\t\ttypeof callBackNest.completed === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\tcallBackNest.completed( elSection );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = JSON.parse( elSectionDesInput.dataset.send );\n+\t\tdataSend.section_id = sectionId;\n+\t\tdataSend.section_description = descValue;\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F* Cancel updating section description *\u002F\n+\tcancelSectionDescription( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elSectionDesc = target.closest(\n+\t\t\t`${ EditSection.selectors.elSectionDesc }`\n+\t\t);\n+\t\tconst elSectionDesInput = elSectionDesc.querySelector(\n+\t\t\t`${ EditSection.selectors.elSectionDesInput }`\n+\t\t);\n+\t\telSectionDesInput.value = elSectionDesInput.dataset.old || '';\n+\t\telSectionDesc.classList.remove( 'editing' );\n+\t}\n+\n+\t\u002F* Typing in description input *\u002F\n+\tchangeDescription( ags ) {\n+\t\tconst { e, target } = ags;\n+\t\tconst elSectionDesInput = target.closest(\n+\t\t\t`${ EditSection.selectors.elSectionDesInput }`\n+\t\t);\n+\t\tif ( ! elSectionDesInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSectionDesc = elSectionDesInput.closest(\n+\t\t\t`${ EditSection.selectors.elSectionDesc }`\n+\t\t);\n+\t\tconst descValue = elSectionDesInput.value.trim();\n+\t\tconst descValueOld = elSectionDesInput.dataset.old || '';\n+\n+\t\tif ( descValue === descValueOld ) {\n+\t\t\telSectionDesc.classList.remove( 'editing' );\n+\t\t} else {\n+\t\t\telSectionDesc.classList.add( 'editing' );\n+\t\t}\n+\t}\n+\n+\ttoggleSectionAll( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elToggleAllSections = target.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.elToggleAllSections }`\n+\t\t);\n+\t\tif ( ! elToggleAllSections ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elEditCurriculum = elToggleAllSections.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`\n+\t\t);\n+\t\tconst elSections = elEditCurriculum.querySelectorAll(\n+\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\n+\t\t);\n+\n+\t\telToggleAllSections.classList.toggle(\n+\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t);\n+\n+\t\telSections.forEach( ( el ) => {\n+\t\t\tconst shouldCollapse = elToggleAllSections.classList.contains(\n+\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t\t);\n+\t\t\tel.classList.toggle(\n+\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`,\n+\t\t\t\tshouldCollapse\n+\t\t\t);\n+\t\t} );\n+\t}\n+\n+\t\u002F* Toggle section *\u002F\n+\ttoggleSection( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elSection = target.closest(\n+\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t);\n+\n+\t\tconst elCurriculumSections = elSection.closest(\n+\t\t\t`${ EditCourseCurriculum.selectors.elCurriculumSections }`\n+\t\t);\n+\t\tif ( ! elCurriculumSections ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Toggle section\n+\t\telSection.classList.toggle(\n+\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t);\n+\n+\t\t\u002F\u002F Check all sections collapsed\n+\t\tthis.checkAllSectionsCollapsed();\n+\t}\n+\n+\t\u002F* Check if all sections are collapsed *\u002F\n+\tcheckAllSectionsCollapsed() {\n+\t\tconst elSections = this.elEditCurriculum.querySelectorAll(\n+\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\n+\t\t);\n+\t\tconst elToggleAllSections = this.elEditCurriculum.querySelector(\n+\t\t\t`${ EditCourseCurriculum.selectors.elToggleAllSections }`\n+\t\t);\n+\n+\t\tlet isAllExpand = true;\n+\t\telSections.forEach( ( el ) => {\n+\t\t\tif (\n+\t\t\t\tel.classList.contains(\n+\t\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t\t\t)\n+\t\t\t) {\n+\t\t\t\tisAllExpand = false;\n+\t\t\t\treturn false; \u002F\u002F Break the loop\n+\t\t\t}\n+\t\t} );\n+\n+\t\tif ( isAllExpand ) {\n+\t\t\telToggleAllSections.classList.remove(\n+\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t\t);\n+\t\t} else {\n+\t\t\telToggleAllSections.classList.add(\n+\t\t\t\t`${ EditCourseCurriculum.selectors.elCollapse }`\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F* Sortable sections, drag and drop to change section position *\u002F\n+\tsortAbleSection() {\n+\t\tlet isUpdateSectionPosition = 0;\n+\t\tlet timeout;\n+\n+\t\tnew Sortable( this.elCurriculumSections, {\n+\t\t\thandle: '.drag',\n+\t\t\tanimation: 150,\n+\t\t\tonEnd: ( evt ) => {\n+\t\t\t\tconst target = evt.item;\n+\t\t\t\tif ( ! isUpdateSectionPosition ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst elSection = target.closest(\n+\t\t\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t\t\t);\n+\t\t\t\tconst elSections = this.elCurriculumSections.querySelectorAll(\n+\t\t\t\t\t`${ EditSection.selectors.elSection }`\n+\t\t\t\t);\n+\t\t\t\tconst sectionIds = [];\n+\n+\t\t\t\telSections.forEach( ( elSection ) => {\n+\t\t\t\t\tconst sectionId = elSection.dataset.sectionId;\n+\t\t\t\t\tsectionIds.push( sectionId );\n+\t\t\t\t} );\n+\n+\t\t\t\t\u002F\u002F Call ajax to update section position\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 0 );\n+\t\t\t\t\t\tisUpdateSectionPosition = 0;\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tconst dataSend = {\n+\t\t\t\t\taction: 'course_update_section_position',\n+\t\t\t\t\tcourse_id: this.courseId,\n+\t\t\t\t\tnew_position: sectionIds,\n+\t\t\t\t\targs: { id_url: 'course-update-section-position' },\n+\t\t\t\t};\n+\n+\t\t\t\tclearTimeout( timeout );\n+\t\t\t\ttimeout = setTimeout( () => {\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elSection, 1 );\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t}, 1000 );\n+\t\t\t},\n+\t\t\tonMove: ( evt ) => {\n+\t\t\t\tclearTimeout( timeout );\n+\t\t\t},\n+\t\t\tonUpdate: ( evt ) => {\n+\t\t\t\tisUpdateSectionPosition = 1;\n+\t\t\t},\n+\t\t} );\n+\t}\n+\n+\t\u002F* Update count sections, when add or delete section *\u002F\n+\tupdateCountSections( elEditCurriculum ) {\n+\t\tconst elCountSections = elEditCurriculum.querySelector(\n+\t\t\t`${ EditSection.selectors.elCountSections }`\n+\t\t);\n+\t\tconst elSections = elEditCurriculum.querySelectorAll(\n+\t\t\t`${ EditSection.selectors.elSection }:not(.clone)`\n+\t\t);\n+\t\tconst sectionsCount = elSections.length;\n+\n+\t\telCountSections.dataset.count = sectionsCount;\n+\t\telCountSections.querySelector( '.count' ).textContent = sectionsCount;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course\u002Fedit-curriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u002F**\r\n- * Edit Curriculum JS handler.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.2\r\n- *\u002F\r\n-import { EditSection } from '.\u002Fedit-curriculum\u002Fedit-section.js';\r\n-import { EditSectionItem } from '.\u002Fedit-curriculum\u002Fedit-section-item.js';\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-\r\n-const sectionEdit = new EditSection();\r\n-const sectionItemEdit = new EditSectionItem();\r\n-\r\n-export class EditCourseCurriculum {\r\n-\tconstructor() {\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\tidElEditCurriculum: '#lp-course-edit-curriculum',\r\n-\t\telCurriculumSections: '.curriculum-sections',\r\n-\t\telToggleAllSections: '.course-toggle-all-sections',\r\n-\t\tLPTarget: '.lp-target',\r\n-\t\telCollapse: 'lp-collapse',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tlpUtils.lpOnElementReady(\r\n-\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`,\r\n-\t\t\t( elEditCurriculum ) => {\r\n-\t\t\t\t\u002F\u002F Set variables use for section edit\r\n-\t\t\t\tsectionEdit.init();\r\n-\r\n-\t\t\t\t\u002F\u002F Set variables use for edit section item\r\n-\t\t\t\tsectionItemEdit.init();\r\n-\t\t\t}\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Edit Curriculum JS handler.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.2\n+ *\u002F\n+import { EditSection } from '.\u002Fedit-curriculum\u002Fedit-section.js';\n+import { EditSectionItem } from '.\u002Fedit-curriculum\u002Fedit-section-item.js';\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+\n+const sectionEdit = new EditSection();\n+const sectionItemEdit = new EditSectionItem();\n+\n+export class EditCourseCurriculum {\n+\tconstructor() {\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\tidElEditCurriculum: '#lp-course-edit-curriculum',\n+\t\telCurriculumSections: '.curriculum-sections',\n+\t\telToggleAllSections: '.course-toggle-all-sections',\n+\t\tLPTarget: '.lp-target',\n+\t\telCollapse: 'lp-collapse',\n+\t};\n+\n+\tinit() {\n+\t\tlpUtils.lpOnElementReady(\n+\t\t\t`${ EditCourseCurriculum.selectors.idElEditCurriculum }`,\n+\t\t\t( elEditCurriculum ) => {\n+\t\t\t\t\u002F\u002F Set variables use for section edit\n+\t\t\t\tsectionEdit.init();\n+\n+\t\t\t\t\u002F\u002F Set variables use for edit section item\n+\t\t\t\tsectionItemEdit.init();\n+\t\t\t}\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F**\r\n- * Edit course JS handler.\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-import { EditCourseCurriculum } from '.\u002Fedit-course\u002Fedit-curriculum.js';\r\n-import { GenerateWithOpenai } from '.\u002Fgenerate-with-openai.js';\r\n-import { EditCurriculumAi } from '.\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js';\r\n-\r\n-new EditCourseCurriculum();\r\n-new GenerateWithOpenai();\r\n-new EditCurriculumAi();\r\n+\u002F**\n+ * Edit course JS handler.\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+import { EditCourseCurriculum } from '.\u002Fedit-course\u002Fedit-curriculum.js';\n+import { GenerateWithOpenai } from '.\u002Fgenerate-with-openai.js';\n+import { EditCurriculumAi } from '.\u002Fedit-course\u002Fedit-curriculum\u002Fedit-curriculum-ai.js';\n+\n+new EditCourseCurriculum();\n+new GenerateWithOpenai();\n+new EditCurriculumAi();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-question.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1511 +1,1522 @@\n-\u002F**\r\n- * Edit question JS handler.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify';\r\n-import SweetAlert from 'sweetalert2';\r\n-import Sortable from 'sortablejs';\r\n-\r\n-const idUrlHandle = 'edit-question';\r\n-let fibSelection;\r\n-let timeoutAutoUpdateAnswer, timeoutAutoUpdateFib, timeoutAutoUpdateQuestion;\r\n-\r\n-\u002F\u002F EditQuestion class\r\n-export class EditQuestion {\r\n-\tstatic selectors = {\r\n-\t\telEditQuestionWrap: '.lp-edit-question-wrap',\r\n-\t\telQuestionEditMain: '.lp-question-edit-main',\r\n-\t\telQuestionToggleAll: '.lp-question-toggle-all',\r\n-\t\telEditListQuestions: '.lp-edit-list-questions',\r\n-\t\telQuestionToggle: '.lp-question-toggle',\r\n-\t\telBtnShowPopupItemsToSelect: '.lp-btn-show-popup-items-to-select',\r\n-\t\telPopupItemsToSelectClone: '.lp-popup-items-to-select.clone',\r\n-\t\telBtnAddQuestion: '.lp-btn-add-question',\r\n-\t\telBtnRemoveQuestion: '.lp-btn-remove-question',\r\n-\t\telBtnUpdateQuestionTitle: '.lp-btn-update-question-title',\r\n-\t\telBtnUpdateQuestionDes: '.lp-btn-update-question-des',\r\n-\t\telBtnUpdateQuestionHint: '.lp-btn-update-question-hint',\r\n-\t\telBtnUpdateQuestionExplain: '.lp-btn-update-question-explanation',\r\n-\t\telQuestionTitleNewInput: '.lp-question-title-new-input',\r\n-\t\telQuestionTitleInput: '.lp-question-title-input',\r\n-\t\telQuestionTypeLabel: '.lp-question-type-label',\r\n-\t\telQuestionTypeNew: '.lp-question-type-new',\r\n-\t\telAddNewQuestion: 'add-new-question',\r\n-\t\telQuestionClone: '.lp-question-item.clone',\r\n-\t\telAnswersConfig: '.lp-answers-config',\r\n-\t\telBtnAddAnswer: '.lp-btn-add-question-answer',\r\n-\t\telQuestionAnswerItemAddNew: '.lp-question-answer-item-add-new',\r\n-\t\telQuestionAnswerTitleNewInput: '.lp-question-answer-title-new-input',\r\n-\t\telQuestionAnswerTitleInput: '.lp-question-answer-title-input',\r\n-\t\telBtnDeleteAnswer: '.lp-btn-delete-question-answer',\r\n-\t\telQuestionByType: '.lp-question-by-type',\r\n-\t\telInputAnswerSetTrue: '.lp-input-answer-set-true',\r\n-\t\telQuestionAnswerItem: '.lp-question-answer-item',\r\n-\t\telBtnUpdateQuestionAnswer: '.lp-btn-update-question-answer',\r\n-\t\telBtnFibInsertBlank: '.lp-btn-fib-insert-blank',\r\n-\t\telBtnFibDeleteAllBlanks: '.lp-btn-fib-delete-all-blanks',\r\n-\t\telBtnFibSaveContent: '.lp-btn-fib-save-content',\r\n-\t\telBtnFibClearAllContent: '.lp-btn-fib-clear-all-content',\r\n-\t\telFibOptionTitleInput: '.lp-question-fib-option-title-input',\r\n-\t\telFibBlankOptions: '.lp-question-fib-blank-options',\r\n-\t\telFibBlankOptionItem: '.lp-question-fib-blank-option-item',\r\n-\t\telFibBlankOptionItemClone: '.lp-question-fib-blank-option-item.clone',\r\n-\t\telFibBlankOptionIndex: '.lp-question-fib-option-index',\r\n-\t\telBtnFibOptionDelete: '.lp-btn-fib-option-delete',\r\n-\t\telFibOptionMatchCaseWrap: '.lp-question-fib-option-match-case-wrap',\r\n-\t\telFibOptionMatchCaseInput: '.lp-question-fib-option-match-case-input',\r\n-\t\telQuestionFibOptionDetail: '.lp-question-fib-option-detail',\r\n-\t\telFibOptionComparisonInput: '.lp-question-fib-option-comparison-input',\r\n-\t\telAutoSaveFib: '.lp-auto-save-fib',\r\n-\t\tLPTarget: '.lp-target',\r\n-\t\telCollapse: 'lp-collapse',\r\n-\t\telSectionToggle: '.lp-section-toggle',\r\n-\t\telTriggerToggle: '.lp-trigger-toggle',\r\n-\t\telAutoSaveQuestion: '.lp-auto-save-question',\r\n-\t\telAutoSaveAnswer: '.lp-auto-save-question-answer',\r\n-\t\telQuestionFibInput: 'lp-question-fib-input',\r\n-\t\telBtnQuestionCreateType: '.lp-btn-question-create-type',\r\n-\t};\r\n-\r\n-\tconstructor() {}\r\n-\r\n-\tinit() {\r\n-\t\tthis.events();\r\n-\t\tthis.initTinyMCE().then();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tif ( EditQuestion._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tEditQuestion._loadedEvents = true;\r\n-\r\n-\t\t\u002F\u002F Sortable answers's question\r\n-\t\tconst elQuestionEditMains = document.querySelectorAll(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\telQuestionEditMains.forEach( ( elQuestionEditMain ) => {\r\n-\t\t\tthis.sortAbleQuestionAnswer( elQuestionEditMain );\r\n-\t\t} );\r\n-\t\t\u002F\u002F End sortable\r\n-\r\n-\t\t\u002F\u002F Event click\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnQuestionCreateType,\r\n-\t\t\t\tcallBack: this.createQuestionType.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnAddAnswer,\r\n-\t\t\t\tcallBack: this.addQuestionAnswer.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnDeleteAnswer,\r\n-\t\t\t\tcallBack: this.deleteQuestionAnswer.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnFibInsertBlank,\r\n-\t\t\t\tcallBack: this.fibInsertBlank.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnFibDeleteAllBlanks,\r\n-\t\t\t\tcallBack: this.fibDeleteAllBlanks.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnFibSaveContent,\r\n-\t\t\t\tcallBack: this.fibSaveContent.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnFibClearAllContent,\r\n-\t\t\t\tcallBack: this.fibClearContent.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elBtnFibOptionDelete,\r\n-\t\t\t\tcallBack: this.fibDeleteBlank.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elFibOptionMatchCaseInput,\r\n-\t\t\t\tcallBack: this.fibShowHideMatchCaseOption.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elFibOptionComparisonInput,\r\n-\t\t\t\tcallBack: ( args ) => {\r\n-\t\t\t\t\tconst { e, target } = args;\r\n-\t\t\t\t\tconst elQuestionEditMain = target.closest(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tconst elBtnFibSaveContent =\r\n-\t\t\t\t\t\telQuestionEditMain.querySelector(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\telBtnFibSaveContent.click();\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Toggle collapse\r\n-\t\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\t\tconst target = e.target;\r\n-\t\t\tlpUtils.toggleCollapse(\r\n-\t\t\t\te,\r\n-\t\t\t\ttarget,\r\n-\t\t\t\tEditQuestion.selectors.elTriggerToggle\r\n-\t\t\t);\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Event keyup\r\n-\t\tlpUtils.eventHandlers( 'keyup', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elQuestionAnswerTitleNewInput,\r\n-\t\t\t\tcallBack: this.checkCanAddAnswer.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elFibOptionTitleInput,\r\n-\t\t\t\tcallBack: this.fibOptionTitleInputChange.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elAutoSaveQuestion,\r\n-\t\t\t\tcallBack: this.autoUpdateQuestion.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Event keydown\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elQuestionAnswerTitleNewInput,\r\n-\t\t\t\tcallBack: this.addQuestionAnswer.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Event change\r\n-\t\tlpUtils.eventHandlers( 'change', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuestion.selectors.elAutoSaveAnswer,\r\n-\t\t\t\tcallBack: this.autoUpdateAnswer.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F TinyMCE events\r\n-\t\tthis.eventEditorTinymce();\r\n-\t}\r\n-\r\n-\t\u002F\u002F Run async to re-init all TinyMCE editors, because it slow if have many editors\r\n-\tasync initTinyMCE() {\r\n-\t\tconst elTextareas = document.querySelectorAll( '.lp-editor-tinymce' );\r\n-\r\n-\t\telTextareas.forEach( ( elTextarea ) => {\r\n-\t\t\tconst idTextarea = elTextarea.id;\r\n-\r\n-\t\t\tthis.reInitTinymce( idTextarea );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\treInitTinymce( id ) {\r\n-\t\twindow.tinymce.execCommand( 'mceRemoveEditor', true, id );\r\n-\t\twindow.tinymce.execCommand( 'mceAddEditor', true, id );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Events for TinyMCE editor\r\n-\teventEditorTinymce() {\r\n-\t\twindow.tinymce.on( 'AddEditor', ( eEditor ) => {\r\n-\t\t\tconst id = eEditor.editor.id;\r\n-\t\t\tconst editor = window.tinymce.get( id );\r\n-\t\t\tif ( ! editor ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( id === 'content' ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Active tab visual\r\n-\t\t\tconst wrapEditor = document.querySelector( `#wp-${ id }-wrap` );\r\n-\t\t\tif ( wrapEditor ) {\r\n-\t\t\t\twrapEditor.classList.add( 'tmce-active' );\r\n-\t\t\t\twrapEditor.classList.remove( 'html-active' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elTextarea = document.getElementById( id );\r\n-\t\t\tconst elQuestionEditMain = elTextarea.closest(\r\n-\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t\t);\r\n-\t\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\t\teditor.settings.force_p_newlines = false;\r\n-\t\t\teditor.settings.forced_root_block = '';\r\n-\t\t\teditor.settings.force_br_newlines = true;\r\n-\r\n-\t\t\t\u002F\u002F Config use absolute url\r\n-\t\t\teditor.settings.relative_urls = false;\r\n-\t\t\teditor.settings.remove_script_host = false;\r\n-\t\t\teditor.settings.convert_urls = true;\r\n-\t\t\teditor.settings.document_base_url = lpData.site_url;\r\n-\t\t\t\u002F\u002F End config use absolute url\r\n-\r\n-\t\t\t\u002F\u002F Events focus in TinyMCE editor\r\n-\t\t\teditor.on( 'change keyup', ( e ) => {\r\n-\t\t\t\t\u002F\u002F Auto save if it has class lp-auto-save\r\n-\t\t\t\telTextarea.value = editor.getContent();\r\n-\t\t\t\tthis.autoUpdateQuestion( {\r\n-\t\t\t\t\te,\r\n-\t\t\t\t\ttarget: elTextarea,\r\n-\t\t\t\t} );\r\n-\t\t\t} );\r\n-\r\n-\t\t\teditor.on( 'blur', ( e ) => {\r\n-\t\t\t\t\u002F\u002Fconsole.log( 'Editor blurred:', e.target.id );\r\n-\t\t\t} );\r\n-\t\t\teditor.on( 'focusin', ( e ) => {} );\r\n-\t\t\teditor.on( 'init', () => {\r\n-\t\t\t\t\u002F\u002F Add style\r\n-\t\t\t\teditor.dom.addStyle( `\r\n-\t\t\t\tbody {\r\n-\t\t\t\t\tline-height: 2.2 !important;\r\n-\t\t\t\t}\r\n-\t\t\t\t.${ EditQuestion.selectors.elQuestionFibInput } {\r\n-\t\t\t\t\tborder: 1px dashed rebeccapurple;\r\n-\t\t\t\t\tpadding: 5px;\r\n-\t\t\t\t}\r\n-\t\t\t` );\r\n-\t\t\t} );\r\n-\t\t\teditor.on( 'setcontent', ( e ) => {\r\n-\t\t\t\tconst uniquid = this.randomString();\r\n-\t\t\t\tconst elementg = editor.dom.select(\r\n-\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }[data-id=\"${ uniquid }\"]`\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( elementg[ 0 ] ) {\r\n-\t\t\t\t\telementg[ 0 ].focus();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\teditor.dom.bind( elementg[ 0 ], 'input', ( e ) => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'Input changed:', e.target.value );\r\n-\t\t\t\t} );\r\n-\t\t\t} );\r\n-\t\t\teditor.on( 'selectionchange', ( e ) => {\r\n-\t\t\t\tfibSelection = editor.selection;\r\n-\r\n-\t\t\t\t\u002F\u002F Check selection is blank, check empty blank content\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tfibSelection\r\n-\t\t\t\t\t\t.getNode()\r\n-\t\t\t\t\t\t.classList.contains(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tconst blankId = fibSelection.getNode().dataset.id;\r\n-\t\t\t\t\tconst textBlank = fibSelection.getNode().textContent.trim();\r\n-\t\t\t\t\tif ( textBlank.length === 0 ) {\r\n-\t\t\t\t\t\tconst editorId = editor.id;\r\n-\t\t\t\t\t\tconst questionId = editorId.replace(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-`,\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tconst elQuestionEditMain = document.querySelector(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }[data-question-id=\"${ questionId }\"]`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tconst elQuestionBlankOptions =\r\n-\t\t\t\t\t\t\telQuestionEditMain.querySelector(\r\n-\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tconst elFibBlankOptionItem =\r\n-\t\t\t\t\t\t\telQuestionBlankOptions.querySelector(\r\n-\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tif ( elFibBlankOptionItem ) {\r\n-\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elFibBlankOptionItem, 0 );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tconst elTextarea = document.getElementById( id );\r\n-\t\t\t\t\t\tconst elAnswersConfig = elTextarea.closest(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tconst elFibBlankOptionItem =\r\n-\t\t\t\t\t\t\telAnswersConfig.querySelector(\r\n-\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tif ( elFibBlankOptionItem ) {\r\n-\t\t\t\t\t\t\tconst elFibOptionTitleInput =\r\n-\t\t\t\t\t\t\t\telFibBlankOptionItem.querySelector(\r\n-\t\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\tif ( elFibOptionTitleInput ) {\r\n-\t\t\t\t\t\t\t\telFibOptionTitleInput.value = textBlank;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t\teditor.on( 'Undo', ( e ) => {\r\n-\t\t\t\tconst contentUndo = editor.getContent();\r\n-\t\t\t\tconst selection = editor.selection;\r\n-\t\t\t\tconst nodeUndo = selection.getNode();\r\n-\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tnodeUndo.classList.contains(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\r\n-\t\t\t\t\t)\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tconst blankId = nodeUndo.dataset.id;\r\n-\t\t\t\t\tconst elFibBlankOptionItem = document.querySelector(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( elFibBlankOptionItem ) {\r\n-\t\t\t\t\t\tlpUtils.lpShowHideEl( elFibBlankOptionItem, 1 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t\teditor.on( 'Redo', ( e ) => {} );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tautoUpdateQuestion( args ) {\r\n-\t\tlet { e, target, key, value } = args;\r\n-\t\tconst elAutoSave = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elAutoSaveQuestion }`\r\n-\t\t);\r\n-\t\tif ( ! elAutoSave ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elAutoSave.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\r\n-\t\tclearTimeout( timeoutAutoUpdateQuestion );\r\n-\t\ttimeoutAutoUpdateQuestion = setTimeout( () => {\r\n-\t\t\t\u002F\u002F Call ajax to update question description\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {},\r\n-\t\t\t};\r\n-\r\n-\t\t\tconst dataSend = {\r\n-\t\t\t\taction: 'update_question',\r\n-\t\t\t\tquestion_id: questionId,\r\n-\t\t\t\targs: {\r\n-\t\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\tif ( undefined === key ) {\r\n-\t\t\t\tkey = elAutoSave.dataset.keyAutoSave;\r\n-\t\t\t\tif ( ! key ) {\r\n-\t\t\t\t\tif (\r\n-\t\t\t\t\t\t! elAutoSave.classList.contains( 'lp-editor-tinymce' )\r\n-\t\t\t\t\t) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tconst textAreaId = elAutoSave.id;\r\n-\t\t\t\t\tkey = textAreaId\r\n-\t\t\t\t\t\t.replace( \u002Flp-\u002Fg, '' )\r\n-\t\t\t\t\t\t.replace( `-${ questionId }`, '' )\r\n-\t\t\t\t\t\t.replace( \u002F-\u002Fg, '_' );\r\n-\t\t\t\t\tif ( ! key ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tvalue = elAutoSave.value;\r\n-\t\t\t}\r\n-\r\n-\t\t\tdataSend[ key ] = value;\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t}, 700 );\r\n-\t}\r\n-\t\u002F\u002F Create question type\r\n-\tcreateQuestionType( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnQuestionCreateType = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnQuestionCreateType }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnQuestionCreateType ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnQuestionCreateType.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionEditMain ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst elQuestionTypeNew = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionTypeNew }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionTypeNew ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionType = elQuestionTypeNew.value.trim();\r\n-\t\tif ( ! questionType ) {\r\n-\t\t\tconst message = elQuestionTypeNew.dataset.messEmptyType;\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Call ajax to create new question type\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tconst { html_option_answers } = data;\r\n-\t\t\t\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\telAnswersConfig.outerHTML = html_option_answers;\r\n-\t\t\t\t\tthis.initTinyMCE();\r\n-\t\t\t\t\tthis.sortAbleQuestionAnswer( elQuestionEditMain );\r\n-\r\n-\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\taction: 'update_question',\r\n-\t\t\tquestion_id: questionId,\r\n-\t\t\tquestion_type: questionType,\r\n-\t\t\targs: {\r\n-\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\taddQuestionAnswer( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elQuestionAnswerItemAddNew = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItemAddNew }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionAnswerItemAddNew ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elQuestionAnswerTitleNewInput =\r\n-\t\t\telQuestionAnswerItemAddNew.querySelector(\r\n-\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleNewInput }`\r\n-\t\t\t);\r\n-\r\n-\t\tif ( ! elQuestionAnswerTitleNewInput.value.trim() ) {\r\n-\t\t\tconst message =\r\n-\t\t\t\telQuestionAnswerTitleNewInput.dataset.messEmptyTitle;\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tconst elQuestionAnswerClone = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }.clone`\r\n-\t\t);\r\n-\t\tconst elQuestionAnswerNew = elQuestionAnswerClone.cloneNode( true );\r\n-\t\tconst elQuestionAnswerTitleInputNew = elQuestionAnswerNew.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleInput }`\r\n-\t\t);\r\n-\r\n-\t\telQuestionAnswerNew.classList.remove( 'clone' );\r\n-\t\tlpUtils.lpShowHideEl( elQuestionAnswerNew, 1 );\r\n-\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerNew, 1 );\r\n-\t\telQuestionAnswerClone.insertAdjacentElement(\r\n-\t\t\t'beforebegin',\r\n-\t\t\telQuestionAnswerNew\r\n-\t\t);\r\n-\r\n-\t\tconst answerTitle = elQuestionAnswerTitleNewInput.value.trim();\r\n-\t\telQuestionAnswerTitleInputNew.value = answerTitle;\r\n-\t\telQuestionAnswerTitleNewInput.value = '';\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\r\n-\t\t\u002F\u002F Call ajax to add new question answer\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tconst { question_answer } = data;\r\n-\t\t\t\t\telQuestionAnswerNew.dataset.answerId =\r\n-\t\t\t\t\t\tquestion_answer.question_answer_id;\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerNew, 0 );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set data lp-answers-config\r\n-\t\t\t\t\tconst dataAnswers =\r\n-\t\t\t\t\t\tthis.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\t\t\t\tdataAnswers.push( question_answer );\r\n-\t\t\t\t\tthis.setDataAnswersConfig(\r\n-\t\t\t\t\t\telQuestionEditMain,\r\n-\t\t\t\t\t\tdataAnswers\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\telQuestionAnswerNew.remove();\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\taction: 'add_question_answer',\r\n-\t\t\tquestion_id: questionId,\r\n-\t\t\tanswer_title: answerTitle,\r\n-\t\t\targs: {\r\n-\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Check to enable or disable add new question button\r\n-\tcheckCanAddAnswer( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elTrigger = target.closest(\r\n-\t\t\tEditQuestion.selectors.elQuestionAnswerTitleNewInput\r\n-\t\t);\r\n-\t\tif ( ! elTrigger ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionAnswerItemAddNew = elTrigger.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItemAddNew }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionAnswerItemAddNew ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnAddAnswer = elQuestionAnswerItemAddNew.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnAddAnswer }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnAddAnswer ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst titleValue = elTrigger.value.trim();\r\n-\t\tif ( titleValue ) {\r\n-\t\t\telBtnAddAnswer.classList.add( 'active' );\r\n-\t\t} else {\r\n-\t\t\telBtnAddAnswer.classList.remove( 'active' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Auto update question answer\r\n-\tautoUpdateAnswer( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elAutoSaveAnswer = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elAutoSaveAnswer }`\r\n-\t\t);\r\n-\t\tif ( ! elAutoSaveAnswer ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionAnswerItem = elAutoSaveAnswer.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }`\r\n-\t\t);\r\n-\r\n-\t\tclearTimeout( timeoutAutoUpdateAnswer );\r\n-\t\ttimeoutAutoUpdateAnswer = setTimeout( () => {\r\n-\t\t\tconst elQuestionEditMain = elAutoSaveAnswer.closest(\r\n-\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t\t);\r\n-\r\n-\t\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\r\n-\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F For both radio and checkbox.\r\n-\t\t\tconst dataAnswersOld = structuredClone( dataAnswers );\r\n-\r\n-\t\t\t\u002F\u002F Get position of answers\r\n-\t\t\tconst elQuestionAnswerItems = elAnswersConfig.querySelectorAll(\r\n-\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }:not(.clone)`\r\n-\t\t\t);\r\n-\t\t\tconst answersPosition = {};\r\n-\t\t\telQuestionAnswerItems.forEach( ( elQuestionAnswerItem, index ) => {\r\n-\t\t\t\tanswersPosition[ elQuestionAnswerItem.dataset.answerId ] =\r\n-\t\t\t\t\tindex + 1; \u002F\u002F Start from 1\r\n-\t\t\t} );\r\n-\r\n-\t\t\t\u002F\u002Fconsole.log( 'answersPosition', answersPosition );\r\n-\r\n-\t\t\tdataAnswers.map( ( answer, k ) => {\r\n-\t\t\t\tconst elQuestionAnswerItem = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }[data-answer-id=\"${ answer.question_answer_id }\"]`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elInputAnswerSetTrue = elQuestionAnswerItem.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elInputAnswerSetTrue }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elInputAnswerTitle = elQuestionAnswerItem.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleInput }`\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F\u002F Set title\r\n-\t\t\t\tif ( elInputAnswerTitle ) {\r\n-\t\t\t\t\tanswer.title = elInputAnswerTitle.value.trim();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Set true answer\r\n-\t\t\t\tif ( elInputAnswerSetTrue ) {\r\n-\t\t\t\t\tif ( elInputAnswerSetTrue.checked ) {\r\n-\t\t\t\t\t\tanswer.is_true = 'yes';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tanswer.is_true = '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Set position\r\n-\t\t\t\tif ( answersPosition[ answer.question_answer_id ] ) {\r\n-\t\t\t\t\tanswer.order = answersPosition[ answer.question_answer_id ];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn answer;\r\n-\t\t\t} );\r\n-\r\n-\t\t\t\u002F\u002Fconsole.log( dataAnswers );\r\n-\r\n-\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 1 );\r\n-\r\n-\t\t\t\u002F\u002F Call ajax to update answers config\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\u002F\u002F rollback changes to old data\r\n-\t\t\t\t\tdataAnswersOld.forEach( ( answer ) => {\r\n-\t\t\t\t\t\tconst elAnswerItem = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }[data-answer-id=\"${ answer.question_answer_id }\"]`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tconst inputAnswerSetTrue = elAnswerItem.querySelector(\r\n-\t\t\t\t\t\t\t`${ EditQuestion.selectors.elInputAnswerSetTrue }`\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tif ( answer.is_true === 'yes' ) {\r\n-\t\t\t\t\t\t\tinputAnswerSetTrue.checked = true;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn answer;\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\tconst dataSend = {\r\n-\t\t\t\taction: 'update_question_answers_config',\r\n-\t\t\t\tquestion_id: questionId,\r\n-\t\t\t\tanswers: dataAnswers,\r\n-\t\t\t\targs: {\r\n-\t\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t}, 700 );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Sortable answers's question\r\n-\tsortAbleQuestionAnswer( elQuestionEditMain ) {\r\n-\t\tlet isUpdateSectionPosition = 0;\r\n-\t\tlet timeout;\r\n-\r\n-\t\tconst elQuestionAnswers = elQuestionEditMain.querySelectorAll(\r\n-\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t);\r\n-\r\n-\t\telQuestionAnswers.forEach( ( elAnswersConfig ) => {\r\n-\t\t\tnew Sortable( elAnswersConfig, {\r\n-\t\t\t\thandle: '.drag',\r\n-\t\t\t\tanimation: 150,\r\n-\t\t\t\tonEnd: ( evt ) => {\r\n-\t\t\t\t\tconst elQuestionAnswerItem = evt.item;\r\n-\t\t\t\t\tif ( ! isUpdateSectionPosition ) {\r\n-\t\t\t\t\t\t\u002F\u002F No change in section position, do nothing\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t\t\ttimeout = setTimeout( () => {\r\n-\t\t\t\t\t\tconst elAutoSaveAnswer =\r\n-\t\t\t\t\t\t\telQuestionAnswerItem.querySelector(\r\n-\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elAutoSaveAnswer }`\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tthis.autoUpdateAnswer( {\r\n-\t\t\t\t\t\t\te: null,\r\n-\t\t\t\t\t\t\ttarget: elAutoSaveAnswer,\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t}, 1000 );\r\n-\t\t\t\t},\r\n-\t\t\t\tonMove: ( evt ) => {\r\n-\t\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t\t},\r\n-\t\t\t\tonUpdate: ( evt ) => {\r\n-\t\t\t\t\tisUpdateSectionPosition = 1;\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Delete question answer\r\n-\tdeleteQuestionAnswer( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnDeleteAnswer = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnDeleteAnswer }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnDeleteAnswer ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionAnswerItem = elBtnDeleteAnswer.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionAnswerItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnDeleteAnswer.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst questionAnswerId = elQuestionAnswerItem.dataset.answerId;\r\n-\t\tif ( ! questionId || ! questionAnswerId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnDeleteAnswer.dataset.title || 'Are you sure?',\r\n-\t\t\ttext:\r\n-\t\t\t\telBtnDeleteAnswer.dataset.content ||\r\n-\t\t\t\t'Do you want to delete this answer?',\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpData.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpData.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 1 );\r\n-\r\n-\t\t\t\t\u002F\u002F Call ajax to delete item from section\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\t\tconst elQuestionAnswerId = parseInt(\r\n-\t\t\t\t\t\t\t\telQuestionAnswerItem.dataset.answerId\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\telQuestionAnswerItem.remove();\r\n-\r\n-\t\t\t\t\t\t\tconst dataAnswers =\r\n-\t\t\t\t\t\t\t\tthis.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\t\t\t\t\t\tif ( dataAnswers ) {\r\n-\t\t\t\t\t\t\t\tconst updatedAnswers = dataAnswers.filter(\r\n-\t\t\t\t\t\t\t\t\t( answer ) =>\r\n-\t\t\t\t\t\t\t\t\t\tparseInt(\r\n-\t\t\t\t\t\t\t\t\t\t\tanswer.question_answer_id\r\n-\t\t\t\t\t\t\t\t\t\t) !== elQuestionAnswerId\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t\tthis.setDataAnswersConfig(\r\n-\t\t\t\t\t\t\t\t\telQuestionEditMain,\r\n-\t\t\t\t\t\t\t\t\tupdatedAnswers\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 0 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tconst dataSend = {\r\n-\t\t\t\t\taction: 'delete_question_answer',\r\n-\t\t\t\t\tquestion_id: questionId,\r\n-\t\t\t\t\tquestion_answer_id: questionAnswerId,\r\n-\t\t\t\t\targs: {\r\n-\t\t\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Get data answers config\r\n-\tgetDataAnswersConfig( elQuestionEditMain ) {\r\n-\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t);\r\n-\t\tif ( ! elAnswersConfig ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\tlet dataAnswers = elAnswersConfig.dataset.answers || '[]';\r\n-\t\ttry {\r\n-\t\t\tdataAnswers = JSON.parse( dataAnswers );\r\n-\t\t} catch ( e ) {\r\n-\t\t\tdataAnswers = [];\r\n-\t\t}\r\n-\r\n-\t\tif ( ! dataAnswers.meta_data ) {\r\n-\t\t\tdataAnswers.meta_data = {};\r\n-\t\t}\r\n-\r\n-\t\treturn dataAnswers;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Set data answers config\r\n-\tsetDataAnswersConfig( elQuestionEditMain, dataAnswers ) {\r\n-\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t);\r\n-\t\tif ( ! elAnswersConfig ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! dataAnswers || typeof dataAnswers !== 'object' ) {\r\n-\t\t\tdataAnswers = {};\r\n-\t\t}\r\n-\r\n-\t\telAnswersConfig.dataset.answers = JSON.stringify( dataAnswers );\r\n-\t}\r\n-\r\n-\t\u002F***** Fill in the blank question type *****\u002F\r\n-\t\u002F\u002F For FIB question type\r\n-\tfibInsertBlank = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnFibInsertBlank = target.closest(\r\n-\t\t\tEditQuestion.selectors.elBtnFibInsertBlank\r\n-\t\t);\r\n-\t\tif ( ! elBtnFibInsertBlank ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst textPlaceholder = elBtnFibInsertBlank.dataset.defaultText;\r\n-\t\tconst elQuestionEditMain = elBtnFibInsertBlank.closest(\r\n-\t\t\tEditQuestion.selectors.elQuestionEditMain\r\n-\t\t);\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst messErrInserted = elBtnFibInsertBlank.dataset.messInserted;\r\n-\t\tconst messErrRequireSelectText =\r\n-\t\t\telBtnFibInsertBlank.dataset.messRequireSelectText;\r\n-\t\tconst idEditor = `${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`;\r\n-\r\n-\t\tconst uniquid = this.randomString();\r\n-\t\tlet selectedText;\r\n-\t\tif ( fibSelection ) {\r\n-\t\t\tconst elNode = fibSelection.getNode();\r\n-\t\t\tif ( ! elNode ) {\r\n-\t\t\t\tlpToastify.show(\r\n-\t\t\t\t\t'Event insert blank has error, please try again',\r\n-\t\t\t\t\t'error'\r\n-\t\t\t\t);\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst findParent = elNode.closest(\r\n-\t\t\t\t`body[data-id=\"${ idEditor }\"]`\r\n-\t\t\t);\r\n-\t\t\tif ( ! findParent ) {\r\n-\t\t\t\tlpToastify.show( messErrRequireSelectText, 'error' );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (\r\n-\t\t\t\telNode.classList.contains(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\r\n-\t\t\t\t)\r\n-\t\t\t) {\r\n-\t\t\t\tlpToastify.show( messErrInserted, 'error' );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tselectedText = fibSelection.getContent();\r\n-\t\t\tif ( selectedText.length === 0 ) {\r\n-\t\t\t\tselectedText = textPlaceholder;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elInputNew = `\u003Cspan class=\"${ EditQuestion.selectors.elQuestionFibInput }\" data-id=\"${ uniquid }\">${ selectedText }\u003C\u002Fspan>`;\r\n-\r\n-\t\t\tfibSelection.setContent( elInputNew );\r\n-\t\t} else {\r\n-\t\t\tlpToastify.show( messErrRequireSelectText, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\tdataAnswers.meta_data = dataAnswers.meta_data || {};\r\n-\t\t\u002F\u002F Convert array to object\r\n-\t\tif ( Object.keys( dataAnswers.meta_data ).length === 0 ) {\r\n-\t\t\tdataAnswers.meta_data = {};\r\n-\t\t}\r\n-\r\n-\t\tdataAnswers.meta_data[ uniquid ] = {\r\n-\t\t\tid: uniquid,\r\n-\t\t\tmatch_case: 0,\r\n-\t\t\tcomparison: 'equal',\r\n-\t\t\tfill: selectedText,\r\n-\t\t\tindex: 1,\r\n-\t\t\topen: false,\r\n-\t\t};\r\n-\r\n-\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\r\n-\r\n-\t\t\u002F\u002F Clone blank options\r\n-\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\r\n-\t\t);\r\n-\t\tconst elFibBlankOptionItemClone = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItemClone }`\r\n-\t\t);\r\n-\t\tconst elFibBlankOptionItemNew =\r\n-\t\t\telFibBlankOptionItemClone.cloneNode( true );\r\n-\t\tconst countOptions = elFibBlankOptions.querySelectorAll(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\r\n-\t\t).length;\r\n-\t\tconst elFibBlankOptionIndex = elFibBlankOptionItemNew.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionIndex }`\r\n-\t\t);\r\n-\t\tconst elFibOptionTitleInput = elFibBlankOptionItemNew.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\r\n-\t\t);\r\n-\t\tconst elFibOptionMatchCaseInput = elFibBlankOptionItemNew.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\r\n-\t\t);\r\n-\t\tconst elFibOptionComparisonInput =\r\n-\t\t\telFibBlankOptionItemNew.querySelectorAll(\r\n-\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }`\r\n-\t\t\t);\r\n-\r\n-\t\telFibBlankOptionItemNew.dataset.id = uniquid;\r\n-\t\telFibOptionTitleInput.name = `${ EditQuestion.selectors.elFibOptionTitleInput }-${ uniquid }`;\r\n-\t\telFibOptionTitleInput.value = this.decodeHtml( selectedText );\r\n-\t\telFibBlankOptionIndex.textContent = countOptions + 1 + '.';\r\n-\t\telFibOptionMatchCaseInput.name =\r\n-\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }-${ uniquid }`.replace(\r\n-\t\t\t\t\u002F\\.\u002Fg,\r\n-\t\t\t\t''\r\n-\t\t\t);\r\n-\t\telFibOptionComparisonInput.forEach( ( elInput ) => {\r\n-\t\t\telInput.name =\r\n-\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }-${ uniquid }`.replace(\r\n-\t\t\t\t\t\u002F\\.\u002Fg,\r\n-\t\t\t\t\t''\r\n-\t\t\t\t);\r\n-\t\t\tif ( elInput.value === 'equal' ) {\r\n-\t\t\t\telInput.checked = true;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t\telFibBlankOptionItemClone.insertAdjacentElement(\r\n-\t\t\t'beforebegin',\r\n-\t\t\telFibBlankOptionItemNew\r\n-\t\t);\r\n-\t\telFibBlankOptionItemNew.classList.remove( 'clone' );\r\n-\t\tlpUtils.lpShowHideEl( elFibBlankOptionItemNew, 1 );\r\n-\t\t\u002F\u002F End clone blank options\r\n-\r\n-\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t);\r\n-\t\tlpUtils.lpSetLoadingEl( elBtnFibInsertBlank, 1 );\r\n-\t\tthis.fibSaveContent( {\r\n-\t\t\te: null,\r\n-\t\t\ttarget: elBtnFibSaveContent,\r\n-\t\t\tcallBackCompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibInsertBlank, 0 );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Delete all blanks\r\n-\tfibDeleteAllBlanks( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnFibDeleteAllBlanks = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibDeleteAllBlanks }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnFibDeleteAllBlanks ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnFibDeleteAllBlanks.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionEditMain ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnFibDeleteAllBlanks.dataset.title,\r\n-\t\t\ttext: elBtnFibDeleteAllBlanks.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpData.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpData.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tconst editor = window.tinymce.get(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elBlanks = editor.dom.select(\r\n-\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }`\r\n-\t\t\t\t);\r\n-\t\t\t\telBlanks.forEach( ( elBlank ) => {\r\n-\t\t\t\t\teditor.dom.remove( elBlank, true );\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tdataAnswers.meta_data = {};\r\n-\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\r\n-\r\n-\t\t\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elFibBlankOptionItems =\r\n-\t\t\t\t\telFibBlankOptions.querySelectorAll(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\r\n-\t\t\t\t\t);\r\n-\t\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\r\n-\t\t\t\t\telFibBlankOptionItem.remove();\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t\t\t);\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibDeleteAllBlanks, 1 );\r\n-\t\t\t\tthis.fibSaveContent( {\r\n-\t\t\t\t\te: null,\r\n-\t\t\t\t\ttarget: elBtnFibSaveContent,\r\n-\t\t\t\t\tcallBackCompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibDeleteAllBlanks, 0 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\t\u002F\u002F Clear content FIB question\r\n-\tfibClearContent( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnFibClearAllContent = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibClearAllContent }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnFibClearAllContent ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnFibClearAllContent.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionEditMain ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnFibClearAllContent.dataset.title,\r\n-\t\t\ttext: elBtnFibClearAllContent.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpData.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpData.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tconst editor = window.tinymce.get(\r\n-\t\t\t\t\t`lp-question-fib-input-${ questionId }`\r\n-\t\t\t\t);\r\n-\t\t\t\teditor.setContent( '' );\r\n-\r\n-\t\t\t\tdataAnswers.meta_data = {};\r\n-\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\r\n-\r\n-\t\t\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elFibBlankOptionItems =\r\n-\t\t\t\t\telFibBlankOptions.querySelectorAll(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\r\n-\t\t\t\t\t);\r\n-\t\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\r\n-\t\t\t\t\telFibBlankOptionItem.remove();\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t\t\t);\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibClearAllContent, 1 );\r\n-\t\t\t\tthis.fibSaveContent( {\r\n-\t\t\t\t\te: null,\r\n-\t\t\t\t\ttarget: elBtnFibSaveContent,\r\n-\t\t\t\t\tcallBackCompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibClearAllContent, 0 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Remove blank\r\n-\tfibDeleteBlank( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnFibOptionDelete = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibOptionDelete }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnFibOptionDelete ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnFibOptionDelete.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionEditMain ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\r\n-\t\t);\r\n-\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\tconst elFibBlankOptionItem = elBtnFibOptionDelete.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }`\r\n-\t\t);\r\n-\t\tconst blankId = elFibBlankOptionItem.dataset.id;\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnFibOptionDelete.dataset.title,\r\n-\t\t\ttext: elBtnFibOptionDelete.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpData.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpData.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\t\u002F\u002F Find span with id on editor and remove it\r\n-\t\t\t\tconst editor = window.tinymce.get(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\r\n-\t\t\t\t);\r\n-\t\t\t\tconst elBlank = editor.dom.select(\r\n-\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }[data-id=\"${ blankId }\"]`\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( elBlank[ 0 ] ) {\r\n-\t\t\t\t\t\u002F\u002F Remove tag html but keep content\r\n-\t\t\t\t\teditor.dom.remove( elBlank[ 0 ], true );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\telFibBlankOptionItem.remove();\r\n-\r\n-\t\t\t\tdataAnswers.meta_data = dataAnswers.meta_data || {};\r\n-\t\t\t\tif ( dataAnswers.meta_data[ blankId ] ) {\r\n-\t\t\t\t\tdelete dataAnswers.meta_data[ blankId ];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\r\n-\r\n-\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t\t\t);\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elFibBlankOptionItem, 1 );\r\n-\t\t\t\tthis.fibSaveContent( {\r\n-\t\t\t\t\te: null,\r\n-\t\t\t\t\ttarget: elBtnFibSaveContent,\r\n-\t\t\t\t\tcallBackCompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elFibBlankOptionItem, 0 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Change title of blank option\r\n-\tfibOptionTitleInputChange( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elFibOptionTitleInput = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\r\n-\t\t);\r\n-\t\tif ( ! elFibOptionTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionFibOptionItem = elFibOptionTitleInput.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionFibOptionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elFibOptionTitleInput.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tif ( ! elQuestionEditMain ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst value = elFibOptionTitleInput.value.trim();\r\n-\t\tconst blankId = elQuestionFibOptionItem.dataset.id;\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\t\tconst editor = window.tinymce.get(\r\n-\t\t\t`lp-question-fib-input-${ questionId }`\r\n-\t\t);\r\n-\t\tconst elBlank = editor.dom.select(\r\n-\t\t\t`.lp-question-fib-input[data-id=\"${ blankId }\"]`\r\n-\t\t);\r\n-\t\tif ( elBlank[ 0 ] ) {\r\n-\t\t\t\u002F\u002F Update content of blank\r\n-\t\t\telBlank[ 0 ].textContent = value;\r\n-\t\t}\r\n-\r\n-\t\tclearTimeout( timeoutAutoUpdateFib );\r\n-\t\ttimeoutAutoUpdateFib = setTimeout( () => {\r\n-\t\t\t\u002F\u002F Call ajax to update question description\r\n-\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t\t);\r\n-\t\t\tthis.fibSaveContent( {\r\n-\t\t\t\te: null,\r\n-\t\t\t\ttarget: elBtnFibSaveContent,\r\n-\t\t\t} );\r\n-\t\t}, 700 );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Save content FIB question\r\n-\tfibSaveContent( args ) {\r\n-\t\tconst { e, target, callBackCompleted = null } = args;\r\n-\t\tconst elBtnFibSaveContent = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnFibSaveContent ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elBtnFibSaveContent.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\t\tconst questionId = elQuestionEditMain.dataset.questionId;\r\n-\r\n-\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\r\n-\t\tif ( ! dataAnswers ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst editor = window.tinymce.get(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\r\n-\t\t);\r\n-\t\tdataAnswers.title = editor.getContent();\r\n-\r\n-\t\tconst elFibBlankOptionItems = elQuestionEditMain.querySelectorAll(\r\n-\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\r\n-\t\t);\r\n-\t\tif ( elFibBlankOptionItems ) {\r\n-\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\r\n-\t\t\t\tconst blankId = elFibBlankOptionItem.dataset.id;\r\n-\t\t\t\tconst elFibOptionMatchCaseInput =\r\n-\t\t\t\t\telFibBlankOptionItem.querySelector(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\r\n-\t\t\t\t\t);\r\n-\t\t\t\tconst elFibOptionComparisonInput =\r\n-\t\t\t\t\telFibBlankOptionItem.querySelector(\r\n-\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }:checked`\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\tdataAnswers.meta_data[ blankId ].match_case =\r\n-\t\t\t\t\telFibOptionMatchCaseInput.checked ? 1 : 0;\r\n-\t\t\t\tdataAnswers.meta_data[ blankId ].comparison =\r\n-\t\t\t\t\telFibOptionComparisonInput.value;\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Fconsole.log( 'dataAnswers', dataAnswers );\r\n-\r\n-\t\tif ( ! callBackCompleted ) {\r\n-\t\t\tlpUtils.lpSetLoadingEl( elBtnFibSaveContent, 1 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Call ajax to update answers config\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tthis.setDataAnswersConfig(\r\n-\t\t\t\t\t\telQuestionEditMain,\r\n-\t\t\t\t\t\tdataAnswers\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tif (\r\n-\t\t\t\t\tcallBackCompleted &&\r\n-\t\t\t\t\ttypeof callBackCompleted === 'function'\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tcallBackCompleted();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibSaveContent, 0 );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002Fconsole.log( 'dataAnswers', dataAnswers );\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\taction: 'update_question_answers_config',\r\n-\t\t\tquestion_id: questionId,\r\n-\t\t\tanswers: dataAnswers,\r\n-\t\t\targs: {\r\n-\t\t\t\tid_url: idUrlHandle,\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\t\u002F\u002F Show\u002Fhide match case option\r\n-\tfibShowHideMatchCaseOption( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elFibOptionMatchCaseInput = target.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\r\n-\t\t);\r\n-\t\tif ( ! elFibOptionMatchCaseInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionFibOptionDetail = elFibOptionMatchCaseInput.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionFibOptionDetail }`\r\n-\t\t);\r\n-\t\tconst elFibOptionMatchCaseWrap =\r\n-\t\t\telQuestionFibOptionDetail.querySelector(\r\n-\t\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseWrap }`\r\n-\t\t\t);\r\n-\t\tif ( ! elQuestionFibOptionDetail || ! elFibOptionMatchCaseWrap ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( elFibOptionMatchCaseInput.checked ) {\r\n-\t\t\tlpUtils.lpShowHideEl( elFibOptionMatchCaseWrap, 1 );\r\n-\t\t} else {\r\n-\t\t\tlpUtils.lpShowHideEl( elFibOptionMatchCaseWrap, 0 );\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionEditMain = elFibOptionMatchCaseInput.closest(\r\n-\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\r\n-\t\t);\r\n-\r\n-\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\r\n-\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\r\n-\t\t);\r\n-\r\n-\t\telBtnFibSaveContent.click();\r\n-\t}\r\n-\t\u002F***** End Fill in the blank question type *****\u002F\r\n-\r\n-\t\u002F\u002F Generate a random string of specified length, for set unique id\r\n-\trandomString( length = 10 ) {\r\n-\t\tconst chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\r\n-\t\tlet result = '';\r\n-\t\tfor ( let i = 0; i \u003C length; i++ ) {\r\n-\t\t\tresult += chars.charAt(\r\n-\t\t\t\tMath.floor( Math.random() * chars.length )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn result;\r\n-\t}\r\n-\t\u002F\u002F Decode HTML entities\r\n-\tdecodeHtml( html ) {\r\n-\t\tconst txt = document.createElement( 'textarea' );\r\n-\t\ttxt.innerHTML = html;\r\n-\t\treturn txt.value;\r\n-\t}\r\n-}\r\n-\r\n-const editQuestion = new EditQuestion();\r\n-lpUtils.lpOnElementReady(\r\n-\tEditQuestion.selectors.elEditQuestionWrap,\r\n-\t( elEditQuestionWrap ) => {\r\n-\t\tconst findClass = EditQuestion.selectors.elQuestionEditMain.replace(\r\n-\t\t\t'.',\r\n-\t\t\t''\r\n-\t\t);\r\n-\t\tif ( ! elEditQuestionWrap.classList.contains( findClass ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\teditQuestion.init();\r\n-\t}\r\n-);\r\n+\u002F**\n+ * Edit question JS handler.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n+ *\u002F\n+\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify';\n+import SweetAlert from 'sweetalert2';\n+import Sortable from 'sortablejs';\n+\n+const idUrlHandle = 'edit-question';\n+let fibSelection;\n+let timeoutAutoUpdateAnswer, timeoutAutoUpdateFib, timeoutAutoUpdateQuestion;\n+\n+\u002F\u002F EditQuestion class\n+export class EditQuestion {\n+\tstatic selectors = {\n+\t\telEditQuestionWrap: '.lp-edit-question-wrap',\n+\t\telQuestionEditMain: '.lp-question-edit-main',\n+\t\telQuestionToggleAll: '.lp-question-toggle-all',\n+\t\telEditListQuestions: '.lp-edit-list-questions',\n+\t\telQuestionToggle: '.lp-question-toggle',\n+\t\telBtnShowPopupItemsToSelect: '.lp-btn-show-popup-items-to-select',\n+\t\telPopupItemsToSelectClone: '.lp-popup-items-to-select.clone',\n+\t\telBtnAddQuestion: '.lp-btn-add-question',\n+\t\telBtnRemoveQuestion: '.lp-btn-remove-question',\n+\t\telBtnUpdateQuestionTitle: '.lp-btn-update-question-title',\n+\t\telBtnUpdateQuestionDes: '.lp-btn-update-question-des',\n+\t\telBtnUpdateQuestionHint: '.lp-btn-update-question-hint',\n+\t\telBtnUpdateQuestionExplain: '.lp-btn-update-question-explanation',\n+\t\telQuestionTitleNewInput: '.lp-question-title-new-input',\n+\t\telQuestionTitleInput: '.lp-question-title-input',\n+\t\telQuestionTypeLabel: '.lp-question-type-label',\n+\t\telQuestionTypeNew: '.lp-question-type-new',\n+\t\telAddNewQuestion: 'add-new-question',\n+\t\telQuestionClone: '.lp-question-item.clone',\n+\t\telAnswersConfig: '.lp-answers-config',\n+\t\telBtnAddAnswer: '.lp-btn-add-question-answer',\n+\t\telQuestionAnswerItemAddNew: '.lp-question-answer-item-add-new',\n+\t\telQuestionAnswerTitleNewInput: '.lp-question-answer-title-new-input',\n+\t\telQuestionAnswerTitleInput: '.lp-question-answer-title-input',\n+\t\telBtnDeleteAnswer: '.lp-btn-delete-question-answer',\n+\t\telQuestionByType: '.lp-question-by-type',\n+\t\telInputAnswerSetTrue: '.lp-input-answer-set-true',\n+\t\telQuestionAnswerItem: '.lp-question-answer-item',\n+\t\telBtnUpdateQuestionAnswer: '.lp-btn-update-question-answer',\n+\t\telBtnFibInsertBlank: '.lp-btn-fib-insert-blank',\n+\t\telBtnFibDeleteAllBlanks: '.lp-btn-fib-delete-all-blanks',\n+\t\telBtnFibSaveContent: '.lp-btn-fib-save-content',\n+\t\telBtnFibClearAllContent: '.lp-btn-fib-clear-all-content',\n+\t\telFibOptionTitleInput: '.lp-question-fib-option-title-input',\n+\t\telFibBlankOptions: '.lp-question-fib-blank-options',\n+\t\telFibBlankOptionItem: '.lp-question-fib-blank-option-item',\n+\t\telFibBlankOptionItemClone: '.lp-question-fib-blank-option-item.clone',\n+\t\telFibBlankOptionIndex: '.lp-question-fib-option-index',\n+\t\telBtnFibOptionDelete: '.lp-btn-fib-option-delete',\n+\t\telFibOptionMatchCaseWrap: '.lp-question-fib-option-match-case-wrap',\n+\t\telFibOptionMatchCaseInput: '.lp-question-fib-option-match-case-input',\n+\t\telQuestionFibOptionDetail: '.lp-question-fib-option-detail',\n+\t\telFibOptionComparisonInput: '.lp-question-fib-option-comparison-input',\n+\t\telAutoSaveFib: '.lp-auto-save-fib',\n+\t\tLPTarget: '.lp-target',\n+\t\telCollapse: 'lp-collapse',\n+\t\telSectionToggle: '.lp-section-toggle',\n+\t\telTriggerToggle: '.lp-trigger-toggle',\n+\t\telAutoSaveQuestion: '.lp-auto-save-question',\n+\t\telAutoSaveAnswer: '.lp-auto-save-question-answer',\n+\t\telQuestionFibInput: 'lp-question-fib-input',\n+\t\telBtnQuestionCreateType: '.lp-btn-question-create-type',\n+\t};\n+\n+\tconstructor() {}\n+\n+\tinit() {\n+\t\tthis.events();\n+\t\tthis.initTinyMCE().then();\n+\t}\n+\n+\tevents() {\n+\t\tif ( EditQuestion._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tEditQuestion._loadedEvents = true;\n+\n+\t\t\u002F\u002F Sortable answers's question\n+\t\tconst elQuestionEditMains = document.querySelectorAll(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\telQuestionEditMains.forEach( ( elQuestionEditMain ) => {\n+\t\t\tthis.sortAbleQuestionAnswer( elQuestionEditMain );\n+\t\t} );\n+\t\t\u002F\u002F End sortable\n+\n+\t\t\u002F\u002F Event click\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnQuestionCreateType,\n+\t\t\t\tcallBack: this.createQuestionType.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnAddAnswer,\n+\t\t\t\tcallBack: this.addQuestionAnswer.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnDeleteAnswer,\n+\t\t\t\tcallBack: this.deleteQuestionAnswer.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnFibInsertBlank,\n+\t\t\t\tcallBack: this.fibInsertBlank.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnFibDeleteAllBlanks,\n+\t\t\t\tcallBack: this.fibDeleteAllBlanks.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnFibSaveContent,\n+\t\t\t\tcallBack: this.fibSaveContent.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnFibClearAllContent,\n+\t\t\t\tcallBack: this.fibClearContent.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elBtnFibOptionDelete,\n+\t\t\t\tcallBack: this.fibDeleteBlank.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elFibOptionMatchCaseInput,\n+\t\t\t\tcallBack: this.fibShowHideMatchCaseOption.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elFibOptionComparisonInput,\n+\t\t\t\tcallBack: ( args ) => {\n+\t\t\t\t\tconst { e, target } = args;\n+\t\t\t\t\tconst elQuestionEditMain = target.closest(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tconst elBtnFibSaveContent =\n+\t\t\t\t\t\telQuestionEditMain.querySelector(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\telBtnFibSaveContent.click();\n+\t\t\t\t},\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Toggle collapse\n+\t\tdocument.addEventListener( 'click', ( e ) => {\n+\t\t\tconst target = e.target;\n+\t\t\tlpUtils.toggleCollapse(\n+\t\t\t\te,\n+\t\t\t\ttarget,\n+\t\t\t\tEditQuestion.selectors.elTriggerToggle\n+\t\t\t);\n+\t\t} );\n+\n+\t\t\u002F\u002F Event keyup\n+\t\tlpUtils.eventHandlers( 'keyup', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elQuestionAnswerTitleNewInput,\n+\t\t\t\tcallBack: this.checkCanAddAnswer.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elFibOptionTitleInput,\n+\t\t\t\tcallBack: this.fibOptionTitleInputChange.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elAutoSaveQuestion,\n+\t\t\t\tcallBack: this.autoUpdateQuestion.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Event keydown\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elQuestionAnswerTitleNewInput,\n+\t\t\t\tcallBack: this.addQuestionAnswer.name,\n+\t\t\t\tclass: this,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Event change\n+\t\tlpUtils.eventHandlers( 'change', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuestion.selectors.elAutoSaveAnswer,\n+\t\t\t\tcallBack: this.autoUpdateAnswer.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F TinyMCE events\n+\t\tthis.eventEditorTinymce();\n+\t}\n+\n+\t\u002F\u002F Run async to re-init all TinyMCE editors, because it slow if have many editors\n+\tasync initTinyMCE() {\n+\t\tconst elTextareas = document.querySelectorAll( '.lp-editor-tinymce' );\n+\n+\t\telTextareas.forEach( ( elTextarea ) => {\n+\t\t\tconst idTextarea = elTextarea.id;\n+\n+\t\t\tthis.reInitTinymce( idTextarea );\n+\t\t} );\n+\t}\n+\n+\treInitTinymce( id ) {\n+\t\twindow.tinymce.execCommand( 'mceRemoveEditor', true, id );\n+\t\twindow.tinymce.execCommand( 'mceAddEditor', true, id );\n+\t}\n+\n+\t\u002F\u002F Events for TinyMCE editor\n+\teventEditorTinymce() {\n+\t\twindow.tinymce.on( 'AddEditor', ( eEditor ) => {\n+\t\t\tconst id = eEditor.editor.id;\n+\t\t\tconst editor = window.tinymce.get( id );\n+\t\t\tif ( ! editor ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( id === 'content' ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Active tab visual\n+\t\t\tconst wrapEditor = document.querySelector( `#wp-${ id }-wrap` );\n+\t\t\tif ( wrapEditor ) {\n+\t\t\t\twrapEditor.classList.add( 'tmce-active' );\n+\t\t\t\twrapEditor.classList.remove( 'html-active' );\n+\t\t\t}\n+\n+\t\t\tconst elTextarea = document.getElementById( id );\n+\n+\t\t\tif ( ! elTextarea ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elQuestionEditMain = elTextarea.closest(\n+\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Skip if not in question edit context\n+\t\t\tif ( ! elQuestionEditMain ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\t\teditor.settings.force_p_newlines = false;\n+\t\t\teditor.settings.forced_root_block = '';\n+\t\t\teditor.settings.force_br_newlines = true;\n+\n+\t\t\t\u002F\u002F Config use absolute url\n+\t\t\teditor.settings.relative_urls = false;\n+\t\t\teditor.settings.remove_script_host = false;\n+\t\t\teditor.settings.convert_urls = true;\n+\t\t\teditor.settings.document_base_url = lpData.site_url;\n+\t\t\t\u002F\u002F End config use absolute url\n+\n+\t\t\t\u002F\u002F Events focus in TinyMCE editor\n+\t\t\teditor.on( 'change keyup', ( e ) => {\n+\t\t\t\t\u002F\u002F Auto save if it has class lp-auto-save\n+\t\t\t\telTextarea.value = editor.getContent();\n+\t\t\t\tthis.autoUpdateQuestion( {\n+\t\t\t\t\te,\n+\t\t\t\t\ttarget: elTextarea,\n+\t\t\t\t} );\n+\t\t\t} );\n+\n+\t\t\teditor.on( 'blur', ( e ) => {\n+\t\t\t\t\u002F\u002Fconsole.log( 'Editor blurred:', e.target.id );\n+\t\t\t} );\n+\t\t\teditor.on( 'focusin', ( e ) => {} );\n+\t\t\teditor.on( 'init', () => {\n+\t\t\t\t\u002F\u002F Add style\n+\t\t\t\teditor.dom.addStyle( `\n+\t\t\t\tbody {\n+\t\t\t\t\tline-height: 2.2 !important;\n+\t\t\t\t}\n+\t\t\t\t.${ EditQuestion.selectors.elQuestionFibInput } {\n+\t\t\t\t\tborder: 1px dashed rebeccapurple;\n+\t\t\t\t\tpadding: 5px;\n+\t\t\t\t}\n+\t\t\t` );\n+\t\t\t} );\n+\t\t\teditor.on( 'setcontent', ( e ) => {\n+\t\t\t\tconst uniquid = this.randomString();\n+\t\t\t\tconst elementg = editor.dom.select(\n+\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }[data-id=\"${ uniquid }\"]`\n+\t\t\t\t);\n+\t\t\t\tif ( elementg[ 0 ] ) {\n+\t\t\t\t\telementg[ 0 ].focus();\n+\t\t\t\t}\n+\n+\t\t\t\teditor.dom.bind( elementg[ 0 ], 'input', ( e ) => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'Input changed:', e.target.value );\n+\t\t\t\t} );\n+\t\t\t} );\n+\t\t\teditor.on( 'selectionchange', ( e ) => {\n+\t\t\t\tfibSelection = editor.selection;\n+\n+\t\t\t\t\u002F\u002F Check selection is blank, check empty blank content\n+\t\t\t\tif (\n+\t\t\t\t\tfibSelection\n+\t\t\t\t\t\t.getNode()\n+\t\t\t\t\t\t.classList.contains(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\n+\t\t\t\t\t)\n+\t\t\t\t) {\n+\t\t\t\t\tconst blankId = fibSelection.getNode().dataset.id;\n+\t\t\t\t\tconst textBlank = fibSelection.getNode().textContent.trim();\n+\t\t\t\t\tif ( textBlank.length === 0 ) {\n+\t\t\t\t\t\tconst editorId = editor.id;\n+\t\t\t\t\t\tconst questionId = editorId.replace(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-`,\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tconst elQuestionEditMain = document.querySelector(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }[data-question-id=\"${ questionId }\"]`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tconst elQuestionBlankOptions =\n+\t\t\t\t\t\t\telQuestionEditMain.querySelector(\n+\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\tconst elFibBlankOptionItem =\n+\t\t\t\t\t\t\telQuestionBlankOptions.querySelector(\n+\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\tif ( elFibBlankOptionItem ) {\n+\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elFibBlankOptionItem, 0 );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tconst elTextarea = document.getElementById( id );\n+\t\t\t\t\t\tconst elAnswersConfig = elTextarea.closest(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tconst elFibBlankOptionItem =\n+\t\t\t\t\t\t\telAnswersConfig.querySelector(\n+\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\tif ( elFibBlankOptionItem ) {\n+\t\t\t\t\t\t\tconst elFibOptionTitleInput =\n+\t\t\t\t\t\t\t\telFibBlankOptionItem.querySelector(\n+\t\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\tif ( elFibOptionTitleInput ) {\n+\t\t\t\t\t\t\t\telFibOptionTitleInput.value = textBlank;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t\teditor.on( 'Undo', ( e ) => {\n+\t\t\t\tconst contentUndo = editor.getContent();\n+\t\t\t\tconst selection = editor.selection;\n+\t\t\t\tconst nodeUndo = selection.getNode();\n+\n+\t\t\t\tif (\n+\t\t\t\t\tnodeUndo.classList.contains(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\n+\t\t\t\t\t)\n+\t\t\t\t) {\n+\t\t\t\t\tconst blankId = nodeUndo.dataset.id;\n+\t\t\t\t\tconst elFibBlankOptionItem = document.querySelector(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }[data-id=\"${ blankId }\"]`\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( elFibBlankOptionItem ) {\n+\t\t\t\t\t\tlpUtils.lpShowHideEl( elFibBlankOptionItem, 1 );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t\teditor.on( 'Redo', ( e ) => {} );\n+\t\t} );\n+\t}\n+\n+\tautoUpdateQuestion( args ) {\n+\t\tlet { e, target, key, value } = args;\n+\t\tconst elAutoSave = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elAutoSaveQuestion }`\n+\t\t);\n+\t\tif ( ! elAutoSave ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elAutoSave.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\n+\t\tclearTimeout( timeoutAutoUpdateQuestion );\n+\t\ttimeoutAutoUpdateQuestion = setTimeout( () => {\n+\t\t\t\u002F\u002F Call ajax to update question description\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {},\n+\t\t\t};\n+\n+\t\t\tconst dataSend = {\n+\t\t\t\taction: 'update_question',\n+\t\t\t\tquestion_id: questionId,\n+\t\t\t\targs: {\n+\t\t\t\t\tid_url: idUrlHandle,\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\tif ( undefined === key ) {\n+\t\t\t\tkey = elAutoSave.dataset.keyAutoSave;\n+\t\t\t\tif ( ! key ) {\n+\t\t\t\t\tif (\n+\t\t\t\t\t\t! elAutoSave.classList.contains( 'lp-editor-tinymce' )\n+\t\t\t\t\t) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tconst textAreaId = elAutoSave.id;\n+\t\t\t\t\tkey = textAreaId\n+\t\t\t\t\t\t.replace( \u002Flp-\u002Fg, '' )\n+\t\t\t\t\t\t.replace( `-${ questionId }`, '' )\n+\t\t\t\t\t\t.replace( \u002F-\u002Fg, '_' );\n+\t\t\t\t\tif ( ! key ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tvalue = elAutoSave.value;\n+\t\t\t}\n+\n+\t\t\tdataSend[ key ] = value;\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t}, 700 );\n+\t}\n+\t\u002F\u002F Create question type\n+\tcreateQuestionType( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnQuestionCreateType = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnQuestionCreateType }`\n+\t\t);\n+\t\tif ( ! elBtnQuestionCreateType ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnQuestionCreateType.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tif ( ! elQuestionEditMain ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst elQuestionTypeNew = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elQuestionTypeNew }`\n+\t\t);\n+\t\tif ( ! elQuestionTypeNew ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionType = elQuestionTypeNew.value.trim();\n+\t\tif ( ! questionType ) {\n+\t\t\tconst message = elQuestionTypeNew.dataset.messEmptyType;\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Call ajax to create new question type\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tconst { html_option_answers } = data;\n+\t\t\t\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t\t\t\t);\n+\t\t\t\t\telAnswersConfig.outerHTML = html_option_answers;\n+\t\t\t\t\tthis.initTinyMCE();\n+\t\t\t\t\tthis.sortAbleQuestionAnswer( elQuestionEditMain );\n+\n+\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\taction: 'update_question',\n+\t\t\tquestion_id: questionId,\n+\t\t\tquestion_type: questionType,\n+\t\t\targs: {\n+\t\t\t\tid_url: idUrlHandle,\n+\t\t\t},\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\taddQuestionAnswer( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elQuestionAnswerItemAddNew = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItemAddNew }`\n+\t\t);\n+\t\tif ( ! elQuestionAnswerItemAddNew ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elQuestionAnswerTitleNewInput =\n+\t\t\telQuestionAnswerItemAddNew.querySelector(\n+\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleNewInput }`\n+\t\t\t);\n+\n+\t\tif ( ! elQuestionAnswerTitleNewInput.value.trim() ) {\n+\t\t\tconst message =\n+\t\t\t\telQuestionAnswerTitleNewInput.dataset.messEmptyTitle;\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tconst elQuestionAnswerClone = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }.clone`\n+\t\t);\n+\t\tconst elQuestionAnswerNew = elQuestionAnswerClone.cloneNode( true );\n+\t\tconst elQuestionAnswerTitleInputNew = elQuestionAnswerNew.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleInput }`\n+\t\t);\n+\n+\t\telQuestionAnswerNew.classList.remove( 'clone' );\n+\t\tlpUtils.lpShowHideEl( elQuestionAnswerNew, 1 );\n+\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerNew, 1 );\n+\t\telQuestionAnswerClone.insertAdjacentElement(\n+\t\t\t'beforebegin',\n+\t\t\telQuestionAnswerNew\n+\t\t);\n+\n+\t\tconst answerTitle = elQuestionAnswerTitleNewInput.value.trim();\n+\t\telQuestionAnswerTitleInputNew.value = answerTitle;\n+\t\telQuestionAnswerTitleNewInput.value = '';\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\n+\t\t\u002F\u002F Call ajax to add new question answer\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tconst { question_answer } = data;\n+\t\t\t\t\telQuestionAnswerNew.dataset.answerId =\n+\t\t\t\t\t\tquestion_answer.question_answer_id;\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerNew, 0 );\n+\n+\t\t\t\t\t\u002F\u002F Set data lp-answers-config\n+\t\t\t\t\tconst dataAnswers =\n+\t\t\t\t\t\tthis.getDataAnswersConfig( elQuestionEditMain );\n+\t\t\t\t\tdataAnswers.push( question_answer );\n+\t\t\t\t\tthis.setDataAnswersConfig(\n+\t\t\t\t\t\telQuestionEditMain,\n+\t\t\t\t\t\tdataAnswers\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\telQuestionAnswerNew.remove();\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\taction: 'add_question_answer',\n+\t\t\tquestion_id: questionId,\n+\t\t\tanswer_title: answerTitle,\n+\t\t\targs: {\n+\t\t\t\tid_url: idUrlHandle,\n+\t\t\t},\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F\u002F Check to enable or disable add new question button\n+\tcheckCanAddAnswer( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elTrigger = target.closest(\n+\t\t\tEditQuestion.selectors.elQuestionAnswerTitleNewInput\n+\t\t);\n+\t\tif ( ! elTrigger ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionAnswerItemAddNew = elTrigger.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItemAddNew }`\n+\t\t);\n+\t\tif ( ! elQuestionAnswerItemAddNew ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnAddAnswer = elQuestionAnswerItemAddNew.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elBtnAddAnswer }`\n+\t\t);\n+\t\tif ( ! elBtnAddAnswer ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst titleValue = elTrigger.value.trim();\n+\t\tif ( titleValue ) {\n+\t\t\telBtnAddAnswer.classList.add( 'active' );\n+\t\t} else {\n+\t\t\telBtnAddAnswer.classList.remove( 'active' );\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Auto update question answer\n+\tautoUpdateAnswer( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elAutoSaveAnswer = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elAutoSaveAnswer }`\n+\t\t);\n+\t\tif ( ! elAutoSaveAnswer ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionAnswerItem = elAutoSaveAnswer.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }`\n+\t\t);\n+\n+\t\tclearTimeout( timeoutAutoUpdateAnswer );\n+\t\ttimeoutAutoUpdateAnswer = setTimeout( () => {\n+\t\t\tconst elQuestionEditMain = elAutoSaveAnswer.closest(\n+\t\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t\t);\n+\n+\t\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\t\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\n+\t\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F For both radio and checkbox.\n+\t\t\tconst dataAnswersOld = structuredClone( dataAnswers );\n+\n+\t\t\t\u002F\u002F Get position of answers\n+\t\t\tconst elQuestionAnswerItems = elAnswersConfig.querySelectorAll(\n+\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }:not(.clone)`\n+\t\t\t);\n+\t\t\tconst answersPosition = {};\n+\t\t\telQuestionAnswerItems.forEach( ( elQuestionAnswerItem, index ) => {\n+\t\t\t\tanswersPosition[ elQuestionAnswerItem.dataset.answerId ] =\n+\t\t\t\t\tindex + 1; \u002F\u002F Start from 1\n+\t\t\t} );\n+\n+\t\t\t\u002F\u002Fconsole.log( 'answersPosition', answersPosition );\n+\n+\t\t\tdataAnswers.map( ( answer, k ) => {\n+\t\t\t\tconst elQuestionAnswerItem = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }[data-answer-id=\"${ answer.question_answer_id }\"]`\n+\t\t\t\t);\n+\t\t\t\tconst elInputAnswerSetTrue = elQuestionAnswerItem.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elInputAnswerSetTrue }`\n+\t\t\t\t);\n+\t\t\t\tconst elInputAnswerTitle = elQuestionAnswerItem.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerTitleInput }`\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F\u002F Set title\n+\t\t\t\tif ( elInputAnswerTitle ) {\n+\t\t\t\t\tanswer.title = elInputAnswerTitle.value.trim();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Set true answer\n+\t\t\t\tif ( elInputAnswerSetTrue ) {\n+\t\t\t\t\tif ( elInputAnswerSetTrue.checked ) {\n+\t\t\t\t\t\tanswer.is_true = 'yes';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tanswer.is_true = '';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Set position\n+\t\t\t\tif ( answersPosition[ answer.question_answer_id ] ) {\n+\t\t\t\t\tanswer.order = answersPosition[ answer.question_answer_id ];\n+\t\t\t\t}\n+\n+\t\t\t\treturn answer;\n+\t\t\t} );\n+\n+\t\t\t\u002F\u002Fconsole.log( dataAnswers );\n+\n+\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 1 );\n+\n+\t\t\t\u002F\u002F Call ajax to update answers config\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\u002F\u002F rollback changes to old data\n+\t\t\t\t\tdataAnswersOld.forEach( ( answer ) => {\n+\t\t\t\t\t\tconst elAnswerItem = elQuestionEditMain.querySelector(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }[data-answer-id=\"${ answer.question_answer_id }\"]`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tconst inputAnswerSetTrue = elAnswerItem.querySelector(\n+\t\t\t\t\t\t\t`${ EditQuestion.selectors.elInputAnswerSetTrue }`\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tif ( answer.is_true === 'yes' ) {\n+\t\t\t\t\t\t\tinputAnswerSetTrue.checked = true;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn answer;\n+\t\t\t\t\t} );\n+\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\tconst dataSend = {\n+\t\t\t\taction: 'update_question_answers_config',\n+\t\t\t\tquestion_id: questionId,\n+\t\t\t\tanswers: dataAnswers,\n+\t\t\t\targs: {\n+\t\t\t\t\tid_url: idUrlHandle,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t}, 700 );\n+\t}\n+\n+\t\u002F\u002F Sortable answers's question\n+\tsortAbleQuestionAnswer( elQuestionEditMain ) {\n+\t\tlet isUpdateSectionPosition = 0;\n+\t\tlet timeout;\n+\n+\t\tconst elQuestionAnswers = elQuestionEditMain.querySelectorAll(\n+\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t);\n+\n+\t\telQuestionAnswers.forEach( ( elAnswersConfig ) => {\n+\t\t\tnew Sortable( elAnswersConfig, {\n+\t\t\t\thandle: '.drag',\n+\t\t\t\tanimation: 150,\n+\t\t\t\tonEnd: ( evt ) => {\n+\t\t\t\t\tconst elQuestionAnswerItem = evt.item;\n+\t\t\t\t\tif ( ! isUpdateSectionPosition ) {\n+\t\t\t\t\t\t\u002F\u002F No change in section position, do nothing\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tclearTimeout( timeout );\n+\t\t\t\t\ttimeout = setTimeout( () => {\n+\t\t\t\t\t\tconst elAutoSaveAnswer =\n+\t\t\t\t\t\t\telQuestionAnswerItem.querySelector(\n+\t\t\t\t\t\t\t\t`${ EditQuestion.selectors.elAutoSaveAnswer }`\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\tthis.autoUpdateAnswer( {\n+\t\t\t\t\t\t\te: null,\n+\t\t\t\t\t\t\ttarget: elAutoSaveAnswer,\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t}, 1000 );\n+\t\t\t\t},\n+\t\t\t\tonMove: ( evt ) => {\n+\t\t\t\t\tclearTimeout( timeout );\n+\t\t\t\t},\n+\t\t\t\tonUpdate: ( evt ) => {\n+\t\t\t\t\tisUpdateSectionPosition = 1;\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Delete question answer\n+\tdeleteQuestionAnswer( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnDeleteAnswer = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnDeleteAnswer }`\n+\t\t);\n+\t\tif ( ! elBtnDeleteAnswer ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionAnswerItem = elBtnDeleteAnswer.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionAnswerItem }`\n+\t\t);\n+\t\tif ( ! elQuestionAnswerItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnDeleteAnswer.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst questionAnswerId = elQuestionAnswerItem.dataset.answerId;\n+\t\tif ( ! questionId || ! questionAnswerId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnDeleteAnswer.dataset.title || 'Are you sure?',\n+\t\t\ttext:\n+\t\t\t\telBtnDeleteAnswer.dataset.content ||\n+\t\t\t\t'Do you want to delete this answer?',\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 1 );\n+\n+\t\t\t\t\u002F\u002F Call ajax to delete item from section\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\t\tconst elQuestionAnswerId = parseInt(\n+\t\t\t\t\t\t\t\telQuestionAnswerItem.dataset.answerId\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\telQuestionAnswerItem.remove();\n+\n+\t\t\t\t\t\t\tconst dataAnswers =\n+\t\t\t\t\t\t\t\tthis.getDataAnswersConfig( elQuestionEditMain );\n+\t\t\t\t\t\t\tif ( dataAnswers ) {\n+\t\t\t\t\t\t\t\tconst updatedAnswers = dataAnswers.filter(\n+\t\t\t\t\t\t\t\t\t( answer ) =>\n+\t\t\t\t\t\t\t\t\t\tparseInt(\n+\t\t\t\t\t\t\t\t\t\t\tanswer.question_answer_id\n+\t\t\t\t\t\t\t\t\t\t) !== elQuestionAnswerId\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t\tthis.setDataAnswersConfig(\n+\t\t\t\t\t\t\t\t\telQuestionEditMain,\n+\t\t\t\t\t\t\t\t\tupdatedAnswers\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionAnswerItem, 0 );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tconst dataSend = {\n+\t\t\t\t\taction: 'delete_question_answer',\n+\t\t\t\t\tquestion_id: questionId,\n+\t\t\t\t\tquestion_answer_id: questionAnswerId,\n+\t\t\t\t\targs: {\n+\t\t\t\t\t\tid_url: idUrlHandle,\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Get data answers config\n+\tgetDataAnswersConfig( elQuestionEditMain ) {\n+\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t);\n+\t\tif ( ! elAnswersConfig ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\tlet dataAnswers = elAnswersConfig.dataset.answers || '[]';\n+\t\ttry {\n+\t\t\tdataAnswers = JSON.parse( dataAnswers );\n+\t\t} catch ( e ) {\n+\t\t\tdataAnswers = [];\n+\t\t}\n+\n+\t\tif ( ! dataAnswers.meta_data ) {\n+\t\t\tdataAnswers.meta_data = {};\n+\t\t}\n+\n+\t\treturn dataAnswers;\n+\t}\n+\n+\t\u002F\u002F Set data answers config\n+\tsetDataAnswersConfig( elQuestionEditMain, dataAnswers ) {\n+\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t);\n+\t\tif ( ! elAnswersConfig ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! dataAnswers || typeof dataAnswers !== 'object' ) {\n+\t\t\tdataAnswers = {};\n+\t\t}\n+\n+\t\telAnswersConfig.dataset.answers = JSON.stringify( dataAnswers );\n+\t}\n+\n+\t\u002F***** Fill in the blank question type *****\u002F\n+\t\t\u002F\u002F For FIB question type\n+\tfibInsertBlank = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnFibInsertBlank = target.closest(\n+\t\t\tEditQuestion.selectors.elBtnFibInsertBlank\n+\t\t);\n+\t\tif ( ! elBtnFibInsertBlank ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst textPlaceholder = elBtnFibInsertBlank.dataset.defaultText;\n+\t\tconst elQuestionEditMain = elBtnFibInsertBlank.closest(\n+\t\t\tEditQuestion.selectors.elQuestionEditMain\n+\t\t);\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst messErrInserted = elBtnFibInsertBlank.dataset.messInserted;\n+\t\tconst messErrRequireSelectText =\n+\t\t\telBtnFibInsertBlank.dataset.messRequireSelectText;\n+\t\tconst idEditor = `${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`;\n+\n+\t\tconst uniquid = this.randomString();\n+\t\tlet selectedText;\n+\t\tif ( fibSelection ) {\n+\t\t\tconst elNode = fibSelection.getNode();\n+\t\t\tif ( ! elNode ) {\n+\t\t\t\tlpToastify.show(\n+\t\t\t\t\t'Event insert blank has error, please try again',\n+\t\t\t\t\t'error'\n+\t\t\t\t);\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst findParent = elNode.closest(\n+\t\t\t\t`body[data-id=\"${ idEditor }\"]`\n+\t\t\t);\n+\t\t\tif ( ! findParent ) {\n+\t\t\t\tlpToastify.show( messErrRequireSelectText, 'error' );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif (\n+\t\t\t\telNode.classList.contains(\n+\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }`\n+\t\t\t\t)\n+\t\t\t) {\n+\t\t\t\tlpToastify.show( messErrInserted, 'error' );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tselectedText = fibSelection.getContent();\n+\t\t\tif ( selectedText.length === 0 ) {\n+\t\t\t\tselectedText = textPlaceholder;\n+\t\t\t}\n+\n+\t\t\tconst elInputNew = `\u003Cspan class=\"${ EditQuestion.selectors.elQuestionFibInput }\" data-id=\"${ uniquid }\">${ selectedText }\u003C\u002Fspan>`;\n+\n+\t\t\tfibSelection.setContent( elInputNew );\n+\t\t} else {\n+\t\t\tlpToastify.show( messErrRequireSelectText, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\t\tdataAnswers.meta_data = dataAnswers.meta_data || {};\n+\t\t\u002F\u002F Convert array to object\n+\t\tif ( Object.keys( dataAnswers.meta_data ).length === 0 ) {\n+\t\t\tdataAnswers.meta_data = {};\n+\t\t}\n+\n+\t\tdataAnswers.meta_data[ uniquid ] = {\n+\t\t\tid: uniquid,\n+\t\t\tmatch_case: 0,\n+\t\t\tcomparison: 'equal',\n+\t\t\tfill: selectedText,\n+\t\t\tindex: 1,\n+\t\t\topen: false,\n+\t\t};\n+\n+\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\n+\n+\t\t\u002F\u002F Clone blank options\n+\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\n+\t\t);\n+\t\tconst elFibBlankOptionItemClone = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItemClone }`\n+\t\t);\n+\t\tconst elFibBlankOptionItemNew =\n+\t\t\telFibBlankOptionItemClone.cloneNode( true );\n+\t\tconst countOptions = elFibBlankOptions.querySelectorAll(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\n+\t\t).length;\n+\t\tconst elFibBlankOptionIndex = elFibBlankOptionItemNew.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionIndex }`\n+\t\t);\n+\t\tconst elFibOptionTitleInput = elFibBlankOptionItemNew.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\n+\t\t);\n+\t\tconst elFibOptionMatchCaseInput = elFibBlankOptionItemNew.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\n+\t\t);\n+\t\tconst elFibOptionComparisonInput =\n+\t\t\telFibBlankOptionItemNew.querySelectorAll(\n+\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }`\n+\t\t\t);\n+\n+\t\telFibBlankOptionItemNew.dataset.id = uniquid;\n+\t\telFibOptionTitleInput.name = `${ EditQuestion.selectors.elFibOptionTitleInput }-${ uniquid }`;\n+\t\telFibOptionTitleInput.value = this.decodeHtml( selectedText );\n+\t\telFibBlankOptionIndex.textContent = countOptions + 1 + '.';\n+\t\telFibOptionMatchCaseInput.name =\n+\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }-${ uniquid }`.replace(\n+\t\t\t\t\u002F\\.\u002Fg,\n+\t\t\t\t''\n+\t\t\t);\n+\t\telFibOptionComparisonInput.forEach( ( elInput ) => {\n+\t\t\telInput.name =\n+\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }-${ uniquid }`.replace(\n+\t\t\t\t\t\u002F\\.\u002Fg,\n+\t\t\t\t\t''\n+\t\t\t\t);\n+\t\t\tif ( elInput.value === 'equal' ) {\n+\t\t\t\telInput.checked = true;\n+\t\t\t}\n+\t\t} );\n+\t\telFibBlankOptionItemClone.insertAdjacentElement(\n+\t\t\t'beforebegin',\n+\t\t\telFibBlankOptionItemNew\n+\t\t);\n+\t\telFibBlankOptionItemNew.classList.remove( 'clone' );\n+\t\tlpUtils.lpShowHideEl( elFibBlankOptionItemNew, 1 );\n+\t\t\u002F\u002F End clone blank options\n+\n+\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t);\n+\t\tlpUtils.lpSetLoadingEl( elBtnFibInsertBlank, 1 );\n+\t\tthis.fibSaveContent( {\n+\t\t\te: null,\n+\t\t\ttarget: elBtnFibSaveContent,\n+\t\t\tcallBackCompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibInsertBlank, 0 );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\t\u002F\u002F Delete all blanks\n+\tfibDeleteAllBlanks( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnFibDeleteAllBlanks = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibDeleteAllBlanks }`\n+\t\t);\n+\t\tif ( ! elBtnFibDeleteAllBlanks ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnFibDeleteAllBlanks.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tif ( ! elQuestionEditMain ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnFibDeleteAllBlanks.dataset.title,\n+\t\t\ttext: elBtnFibDeleteAllBlanks.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tconst editor = window.tinymce.get(\n+\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\n+\t\t\t\t);\n+\t\t\t\tconst elBlanks = editor.dom.select(\n+\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }`\n+\t\t\t\t);\n+\t\t\t\telBlanks.forEach( ( elBlank ) => {\n+\t\t\t\t\teditor.dom.remove( elBlank, true );\n+\t\t\t\t} );\n+\n+\t\t\t\tdataAnswers.meta_data = {};\n+\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\n+\n+\t\t\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\n+\t\t\t\t);\n+\t\t\t\tconst elFibBlankOptionItems =\n+\t\t\t\t\telFibBlankOptions.querySelectorAll(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\n+\t\t\t\t\t);\n+\t\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\n+\t\t\t\t\telFibBlankOptionItem.remove();\n+\t\t\t\t} );\n+\n+\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t\t\t);\n+\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibDeleteAllBlanks, 1 );\n+\t\t\t\tthis.fibSaveContent( {\n+\t\t\t\t\te: null,\n+\t\t\t\t\ttarget: elBtnFibSaveContent,\n+\t\t\t\t\tcallBackCompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibDeleteAllBlanks, 0 );\n+\t\t\t\t\t},\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\t\u002F\u002F Clear content FIB question\n+\tfibClearContent( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnFibClearAllContent = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibClearAllContent }`\n+\t\t);\n+\t\tif ( ! elBtnFibClearAllContent ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnFibClearAllContent.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tif ( ! elQuestionEditMain ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnFibClearAllContent.dataset.title,\n+\t\t\ttext: elBtnFibClearAllContent.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tconst editor = window.tinymce.get(\n+\t\t\t\t\t`lp-question-fib-input-${ questionId }`\n+\t\t\t\t);\n+\t\t\t\teditor.setContent( '' );\n+\n+\t\t\t\tdataAnswers.meta_data = {};\n+\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\n+\n+\t\t\t\tconst elFibBlankOptions = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptions }`\n+\t\t\t\t);\n+\t\t\t\tconst elFibBlankOptionItems =\n+\t\t\t\t\telFibBlankOptions.querySelectorAll(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\n+\t\t\t\t\t);\n+\t\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\n+\t\t\t\t\telFibBlankOptionItem.remove();\n+\t\t\t\t} );\n+\n+\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t\t\t);\n+\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibClearAllContent, 1 );\n+\t\t\t\tthis.fibSaveContent( {\n+\t\t\t\t\te: null,\n+\t\t\t\t\ttarget: elBtnFibSaveContent,\n+\t\t\t\t\tcallBackCompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibClearAllContent, 0 );\n+\t\t\t\t\t},\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Remove blank\n+\tfibDeleteBlank( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnFibOptionDelete = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibOptionDelete }`\n+\t\t);\n+\t\tif ( ! elBtnFibOptionDelete ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnFibOptionDelete.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tif ( ! elQuestionEditMain ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst elAnswersConfig = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elAnswersConfig }`\n+\t\t);\n+\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\t\tconst elFibBlankOptionItem = elBtnFibOptionDelete.closest(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }`\n+\t\t);\n+\t\tconst blankId = elFibBlankOptionItem.dataset.id;\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnFibOptionDelete.dataset.title,\n+\t\t\ttext: elBtnFibOptionDelete.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpData.i18n.cancel,\n+\t\t\tconfirmButtonText: lpData.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\t\u002F\u002F Find span with id on editor and remove it\n+\t\t\t\tconst editor = window.tinymce.get(\n+\t\t\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\n+\t\t\t\t);\n+\t\t\t\tconst elBlank = editor.dom.select(\n+\t\t\t\t\t`.${ EditQuestion.selectors.elQuestionFibInput }[data-id=\"${ blankId }\"]`\n+\t\t\t\t);\n+\t\t\t\tif ( elBlank[ 0 ] ) {\n+\t\t\t\t\t\u002F\u002F Remove tag html but keep content\n+\t\t\t\t\teditor.dom.remove( elBlank[ 0 ], true );\n+\t\t\t\t}\n+\n+\t\t\t\telFibBlankOptionItem.remove();\n+\n+\t\t\t\tdataAnswers.meta_data = dataAnswers.meta_data || {};\n+\t\t\t\tif ( dataAnswers.meta_data[ blankId ] ) {\n+\t\t\t\t\tdelete dataAnswers.meta_data[ blankId ];\n+\t\t\t\t}\n+\n+\t\t\t\tthis.setDataAnswersConfig( elQuestionEditMain, dataAnswers );\n+\n+\t\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t\t\t);\n+\t\t\t\tlpUtils.lpSetLoadingEl( elFibBlankOptionItem, 1 );\n+\t\t\t\tthis.fibSaveContent( {\n+\t\t\t\t\te: null,\n+\t\t\t\t\ttarget: elBtnFibSaveContent,\n+\t\t\t\t\tcallBackCompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elFibBlankOptionItem, 0 );\n+\t\t\t\t\t},\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Change title of blank option\n+\tfibOptionTitleInputChange( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elFibOptionTitleInput = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elFibOptionTitleInput }`\n+\t\t);\n+\t\tif ( ! elFibOptionTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionFibOptionItem = elFibOptionTitleInput.closest(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }`\n+\t\t);\n+\t\tif ( ! elQuestionFibOptionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elFibOptionTitleInput.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tif ( ! elQuestionEditMain ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst value = elFibOptionTitleInput.value.trim();\n+\t\tconst blankId = elQuestionFibOptionItem.dataset.id;\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\t\tconst editor = window.tinymce.get(\n+\t\t\t`lp-question-fib-input-${ questionId }`\n+\t\t);\n+\t\tconst elBlank = editor.dom.select(\n+\t\t\t`.lp-question-fib-input[data-id=\"${ blankId }\"]`\n+\t\t);\n+\t\tif ( elBlank[ 0 ] ) {\n+\t\t\t\u002F\u002F Update content of blank\n+\t\t\telBlank[ 0 ].textContent = value;\n+\t\t}\n+\n+\t\tclearTimeout( timeoutAutoUpdateFib );\n+\t\ttimeoutAutoUpdateFib = setTimeout( () => {\n+\t\t\t\u002F\u002F Call ajax to update question description\n+\t\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t\t);\n+\t\t\tthis.fibSaveContent( {\n+\t\t\t\te: null,\n+\t\t\t\ttarget: elBtnFibSaveContent,\n+\t\t\t} );\n+\t\t}, 700 );\n+\t}\n+\n+\t\u002F\u002F Save content FIB question\n+\tfibSaveContent( args ) {\n+\t\tconst { e, target, callBackCompleted = null } = args;\n+\t\tconst elBtnFibSaveContent = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t);\n+\t\tif ( ! elBtnFibSaveContent ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elBtnFibSaveContent.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\t\tconst questionId = elQuestionEditMain.dataset.questionId;\n+\n+\t\tconst dataAnswers = this.getDataAnswersConfig( elQuestionEditMain );\n+\t\tif ( ! dataAnswers ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst editor = window.tinymce.get(\n+\t\t\t`${ EditQuestion.selectors.elQuestionFibInput }-${ questionId }`\n+\t\t);\n+\t\tdataAnswers.title = editor.getContent();\n+\n+\t\tconst elFibBlankOptionItems = elQuestionEditMain.querySelectorAll(\n+\t\t\t`${ EditQuestion.selectors.elFibBlankOptionItem }:not(.clone)`\n+\t\t);\n+\t\tif ( elFibBlankOptionItems ) {\n+\t\t\telFibBlankOptionItems.forEach( ( elFibBlankOptionItem ) => {\n+\t\t\t\tconst blankId = elFibBlankOptionItem.dataset.id;\n+\t\t\t\tconst elFibOptionMatchCaseInput =\n+\t\t\t\t\telFibBlankOptionItem.querySelector(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\n+\t\t\t\t\t);\n+\t\t\t\tconst elFibOptionComparisonInput =\n+\t\t\t\t\telFibBlankOptionItem.querySelector(\n+\t\t\t\t\t\t`${ EditQuestion.selectors.elFibOptionComparisonInput }:checked`\n+\t\t\t\t\t);\n+\n+\t\t\t\tdataAnswers.meta_data[ blankId ].match_case =\n+\t\t\t\t\telFibOptionMatchCaseInput.checked ? 1 : 0;\n+\t\t\t\tdataAnswers.meta_data[ blankId ].comparison =\n+\t\t\t\t\telFibOptionComparisonInput.value;\n+\t\t\t} );\n+\t\t}\n+\n+\t\t\u002F\u002Fconsole.log( 'dataAnswers', dataAnswers );\n+\n+\t\tif ( ! callBackCompleted ) {\n+\t\t\tlpUtils.lpSetLoadingEl( elBtnFibSaveContent, 1 );\n+\t\t}\n+\n+\t\t\u002F\u002F Call ajax to update answers config\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tthis.setDataAnswersConfig(\n+\t\t\t\t\t\telQuestionEditMain,\n+\t\t\t\t\t\tdataAnswers\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tif (\n+\t\t\t\t\tcallBackCompleted &&\n+\t\t\t\t\ttypeof callBackCompleted === 'function'\n+\t\t\t\t) {\n+\t\t\t\t\tcallBackCompleted();\n+\t\t\t\t} else {\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elBtnFibSaveContent, 0 );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\t\u002F\u002Fconsole.log( 'dataAnswers', dataAnswers );\n+\n+\t\tconst dataSend = {\n+\t\t\taction: 'update_question_answers_config',\n+\t\t\tquestion_id: questionId,\n+\t\t\tanswers: dataAnswers,\n+\t\t\targs: {\n+\t\t\t\tid_url: idUrlHandle,\n+\t\t\t},\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\t\u002F\u002F Show\u002Fhide match case option\n+\tfibShowHideMatchCaseOption( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elFibOptionMatchCaseInput = target.closest(\n+\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseInput }`\n+\t\t);\n+\t\tif ( ! elFibOptionMatchCaseInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionFibOptionDetail = elFibOptionMatchCaseInput.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionFibOptionDetail }`\n+\t\t);\n+\t\tconst elFibOptionMatchCaseWrap =\n+\t\t\telQuestionFibOptionDetail.querySelector(\n+\t\t\t\t`${ EditQuestion.selectors.elFibOptionMatchCaseWrap }`\n+\t\t\t);\n+\t\tif ( ! elQuestionFibOptionDetail || ! elFibOptionMatchCaseWrap ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( elFibOptionMatchCaseInput.checked ) {\n+\t\t\tlpUtils.lpShowHideEl( elFibOptionMatchCaseWrap, 1 );\n+\t\t} else {\n+\t\t\tlpUtils.lpShowHideEl( elFibOptionMatchCaseWrap, 0 );\n+\t\t}\n+\n+\t\tconst elQuestionEditMain = elFibOptionMatchCaseInput.closest(\n+\t\t\t`${ EditQuestion.selectors.elQuestionEditMain }`\n+\t\t);\n+\n+\t\tconst elBtnFibSaveContent = elQuestionEditMain.querySelector(\n+\t\t\t`${ EditQuestion.selectors.elBtnFibSaveContent }`\n+\t\t);\n+\n+\t\telBtnFibSaveContent.click();\n+\t}\n+\t\u002F***** End Fill in the blank question type *****\u002F\n+\n+\t\u002F\u002F Generate a random string of specified length, for set unique id\n+\trandomString( length = 10 ) {\n+\t\tconst chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n+\t\tlet result = '';\n+\t\tfor ( let i = 0; i \u003C length; i++ ) {\n+\t\t\tresult += chars.charAt(\n+\t\t\t\tMath.floor( Math.random() * chars.length )\n+\t\t\t);\n+\t\t}\n+\t\treturn result;\n+\t}\n+\t\u002F\u002F Decode HTML entities\n+\tdecodeHtml( html ) {\n+\t\tconst txt = document.createElement( 'textarea' );\n+\t\ttxt.innerHTML = html;\n+\t\treturn txt.value;\n+\t}\n+}\n+\n+const editQuestion = new EditQuestion();\n+lpUtils.lpOnElementReady(\n+\tEditQuestion.selectors.elEditQuestionWrap,\n+\t( elEditQuestionWrap ) => {\n+\t\tconst findClass = EditQuestion.selectors.elQuestionEditMain.replace(\n+\t\t\t'.',\n+\t\t\t''\n+\t\t);\n+\t\tif ( ! elEditQuestionWrap.classList.contains( findClass ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\teditQuestion.init();\n+\t}\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,597 +1,597 @@\n-\u002F**\r\n- * Edit Quiz JS handler as a class.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.3\r\n- *\u002F\r\n-import * as lpUtils from '..\u002Futils.js';\r\n-import SweetAlert from 'sweetalert2';\r\n-import Sortable from 'sortablejs';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-import 'toastify-js\u002Fsrc\u002Ftoastify.css';\r\n-import { EditQuestion } from '.\u002Fedit-question.js';\r\n-import { LpPopupSelectItemToAdd } from 'lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js';\r\n-\r\n-let editQuestion;\r\n-\r\n-const lpPopupSelectItemToAdd = new LpPopupSelectItemToAdd();\r\n-lpPopupSelectItemToAdd.init();\r\n-\r\n-class EditQuiz {\r\n-\tconstructor() {\r\n-\t\tthis.idUrlHandle = 'edit-quiz-questions';\r\n-\t\tthis.elEditQuizWrap = null;\r\n-\t\tthis.elEditListQuestions = null;\r\n-\t\tthis.quizID = null;\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telEditQuizWrap: '.lp-edit-quiz-wrap',\r\n-\t\telQuestionEditMain: '.lp-question-edit-main',\r\n-\t\telQuestionToggleAll: '.lp-question-toggle-all',\r\n-\t\telEditListQuestions: '.lp-edit-list-questions',\r\n-\t\telQuestionItem: '.lp-question-item',\r\n-\t\telQuestionToggle: '.lp-question-toggle',\r\n-\t\telPopupItemsToSelectClone: '.lp-popup-items-to-select.clone',\r\n-\t\telBtnAddQuestion: '.lp-btn-add-question',\r\n-\t\telBtnRemoveQuestion: '.lp-btn-remove-question',\r\n-\t\telBtnUpdateQuestionTitle: '.lp-btn-update-question-title',\r\n-\t\telBtnCancelUpdateQuestionTitle: '.lp-btn-cancel-update-question-title',\r\n-\t\telQuestionTitleNewInput: '.lp-question-title-new-input',\r\n-\t\telQuestionTitleInput: '.lp-question-title-input',\r\n-\t\telQuestionTypeLabel: '.lp-question-type-label',\r\n-\t\telQuestionTypeNew: '.lp-question-type-new',\r\n-\t\telAddNewQuestion: 'add-new-question',\r\n-\t\telQuestionClone: '.lp-question-item.clone',\r\n-\t\tLPTarget: '.lp-target',\r\n-\t\telCollapse: 'lp-collapse',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tlpUtils.lpOnElementReady( EditQuiz.selectors.elEditQuizWrap, ( elEditQuizWrapFound ) => {\r\n-\t\t\tthis.elEditQuizWrap = elEditQuizWrapFound;\r\n-\t\t\tthis.elEditListQuestions = this.elEditQuizWrap.querySelector( EditQuiz.selectors.elEditListQuestions );\r\n-\t\t\tconst elLPTarget = this.elEditQuizWrap.closest( EditQuiz.selectors.LPTarget );\r\n-\t\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\t\tthis.quizID = dataSend.args.quiz_id;\r\n-\r\n-\t\t\tthis.sortAbleQuestion();\r\n-\t\t\teditQuestion = new EditQuestion();\r\n-\t\t\teditQuestion.init();\r\n-\t\t\tconst elQuestionEditMains = elEditQuizWrapFound.querySelectorAll( `${ EditQuiz.selectors.elQuestionEditMain }` );\r\n-\t\t\telQuestionEditMains.forEach( ( elQuestionEditMain ) => {\r\n-\t\t\t\teditQuestion.sortAbleQuestionAnswer( elQuestionEditMain );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tthis.events();\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tif ( EditQuiz._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tEditQuiz._loadedEvents = true;\r\n-\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elQuestionToggleAll,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.toggleQuestionAll.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elBtnAddQuestion,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addQuestion.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elBtnRemoveQuestion,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.removeQuestion.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elBtnUpdateQuestionTitle,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateQuestionTitle.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elBtnCancelUpdateQuestionTitle,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.cancelChangeTitleQuestion.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,\r\n-\t\t\t\tclass: lpPopupSelectItemToAdd,\r\n-\t\t\t\tcallBack: lpPopupSelectItemToAdd.addItemsSelectedToSection.name,\r\n-\t\t\t\tcallBackHandle: this.addQuestionsSelectedToQuiz.bind( this ),\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keydown\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.updateQuestionTitle.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleNewInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.addQuestion.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Keyup\r\n-\t\tlpUtils.eventHandlers( 'keyup', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.changeTitleQuestion.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: `${ EditQuiz.selectors.elQuestionTitleNewInput }, ${ EditQuiz.selectors.elQuestionTypeNew }`,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkCanAddQuestion.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Change\r\n-\t\tlpUtils.eventHandlers( 'change', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: EditQuiz.selectors.elQuestionTypeNew,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkCanAddQuestion.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Click\r\n-\t\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tlpUtils.toggleCollapse( e, target, EditQuiz.selectors.elQuestionToggle, [], () => this.checkAllQuestionsCollapsed() );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Toggle all questions\r\n-\ttoggleQuestionAll( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elQuestionToggleAll = target.closest( `${ EditQuiz.selectors.elQuestionToggleAll }` );\r\n-\t\tif ( ! elQuestionToggleAll ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionItems = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\r\n-\r\n-\t\telQuestionToggleAll.classList.toggle( `${ EditQuiz.selectors.elCollapse }` );\r\n-\r\n-\t\telQuestionItems.forEach( ( el ) => {\r\n-\t\t\tconst shouldCollapse = elQuestionToggleAll.classList.contains( `${ EditQuiz.selectors.elCollapse }` );\r\n-\t\t\tel.classList.toggle( `${ EditQuiz.selectors.elCollapse }`, shouldCollapse );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tcheckAllQuestionsCollapsed() {\r\n-\t\tconst elQuestionItems = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\r\n-\t\tconst elQuestionToggleAll = this.elEditQuizWrap.querySelector( `${ EditQuiz.selectors.elQuestionToggleAll }` );\r\n-\r\n-\t\tlet isAllExpand = true;\r\n-\t\telQuestionItems.forEach( ( el ) => {\r\n-\t\t\tif ( el.classList.contains( `${ EditQuiz.selectors.elCollapse }` ) ) {\r\n-\t\t\t\tisAllExpand = false;\r\n-\t\t\t\treturn false; \u002F\u002F Break\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tif ( isAllExpand ) {\r\n-\t\t\telQuestionToggleAll.classList.remove( `${ EditQuiz.selectors.elCollapse }` );\r\n-\t\t} else {\r\n-\t\t\telQuestionToggleAll.classList.add( `${ EditQuiz.selectors.elCollapse }` );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tupdateCountItems() {\r\n-\t\tconst elCountItemsAll = this.elEditQuizWrap.querySelector( '.total-items' );\r\n-\t\tconst elItemsAll = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\r\n-\t\tconst itemsAllCount = elItemsAll.length;\r\n-\r\n-\t\telCountItemsAll.dataset.count = itemsAllCount;\r\n-\t\telCountItemsAll.querySelector( '.count' ).textContent = itemsAllCount;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Add question to quiz\r\n-\taddQuestion( args ) {\r\n-\t\tconst { e, target, callBackNest } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elAddNewQuestion = target.closest( `.${ EditQuiz.selectors.elAddNewQuestion }` );\r\n-\t\tif ( ! elAddNewQuestion ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionTitleNewInput = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTitleNewInput }` );\r\n-\t\tconst questionTitle = elQuestionTitleNewInput.value.trim();\r\n-\t\tif ( ! questionTitle ) {\r\n-\t\t\tlpToastify.show( elQuestionTitleNewInput.dataset.messEmptyTitle, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionType = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTypeNew }` );\r\n-\t\tconst questionType = elQuestionType.value;\r\n-\t\tif ( ! questionType ) {\r\n-\t\t\tlpToastify.show( elQuestionType.dataset.messEmptyType, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionClone = this.elEditListQuestions.querySelector( `${ EditQuiz.selectors.elQuestionItem }.clone` );\r\n-\t\tconst newQuestionItem = elQuestionClone.cloneNode( true );\r\n-\t\tconst elQuestionTitleInput = newQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\r\n-\r\n-\t\telQuestionTitleInput.value = questionTitle;\r\n-\t\telQuestionTitleNewInput.value = '';\r\n-\t\tnewQuestionItem.classList.remove( 'clone' );\r\n-\t\tlpUtils.lpShowHideEl( newQuestionItem, 1 );\r\n-\t\telQuestionClone.insertAdjacentElement( 'beforebegin', newQuestionItem );\r\n-\t\tlpUtils.lpSetLoadingEl( newQuestionItem, 1 );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\t\t\t\tconst { question, html_edit_question } = data;\r\n-\r\n-\t\t\t\tif ( status === 'error' ) {\r\n-\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t} else if ( status === 'success' ) {\r\n-\t\t\t\t\tnewQuestionItem.dataset.questionId = question.ID;\r\n-\t\t\t\t\tnewQuestionItem.dataset.questionType = question.meta_data._lp_type;\r\n-\t\t\t\t\tnewQuestionItem.outerHTML = html_edit_question;\r\n-\t\t\t\t\tconst elQuestionItemCreated = this.elEditListQuestions.querySelector( `${ EditQuiz.selectors.elQuestionItem }[data-question-id=\"${ question.ID }\"]` );\r\n-\t\t\t\t\telQuestionItemCreated.classList.remove( EditQuiz.selectors.elCollapse );\r\n-\t\t\t\t\tthis.updateCountItems();\r\n-\t\t\t\t\teditQuestion.initTinyMCE();\r\n-\t\t\t\t\tconst elQuestionEditMain = elQuestionItemCreated.querySelector( `${ EditQuiz.selectors.elQuestionEditMain }` );\r\n-\t\t\t\t\teditQuestion.sortAbleQuestionAnswer( elQuestionEditMain );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Callback nest\r\n-\t\t\t\t\tif ( callBackNest && typeof callBackNest.success === 'function' ) {\r\n-\t\t\t\t\t\tcallBackNest.success( { response, elQuestionItemCreated } );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tnewQuestionItem.remove();\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\r\n-\t\t\t\tif ( callBackNest && typeof callBackNest.error === 'function' ) {\r\n-\t\t\t\t\tcallBackNest.error( { error, newQuestionItem } );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( newQuestionItem, 0 );\r\n-\t\t\t\tthis.checkCanAddQuestion( { e, target: elQuestionTitleNewInput } );\r\n-\r\n-\t\t\t\tif ( callBackNest && typeof callBackNest.completed === 'function' ) {\r\n-\t\t\t\t\tcallBackNest.completed( { newQuestionItem } );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tlet dataSend = JSON.parse( elQuestionTitleNewInput.dataset.send );\r\n-\t\tdataSend = { ...dataSend,\r\n-\t\t\tquestion_title: questionTitle,\r\n-\t\t\tquestion_type: questionType,\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Add questions selected from popup to quiz\r\n-\taddQuestionsSelectedToQuiz( itemsSelected ) {\r\n-\t\tconst questionIds = [];\r\n-\t\titemsSelected.forEach( ( item ) => {\r\n-\t\t\tconst elQuestionItemClone = this.elEditQuizWrap.querySelector( `${ EditQuiz.selectors.elQuestionItem }.clone` );\r\n-\t\t\tif ( ! elQuestionItemClone ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tquestionIds.push( item.id );\r\n-\t\t\tconst elQuestionItemNew = elQuestionItemClone.cloneNode( true );\r\n-\t\t\tconst elQuestionItemTitleInput = elQuestionItemNew.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\r\n-\t\t\telQuestionItemNew.classList.remove( 'clone' );\r\n-\t\t\telQuestionItemNew.dataset.questionId = item.id;\r\n-\t\t\telQuestionItemTitleInput.value = item.titleSelected;\r\n-\r\n-\t\t\tlpUtils.lpSetLoadingEl( elQuestionItemNew, 1 );\r\n-\t\t\tlpUtils.lpShowHideEl( elQuestionItemNew, 1 );\r\n-\t\t\telQuestionItemClone.insertAdjacentElement( 'beforebegin', elQuestionItemNew );\r\n-\t\t\tlpUtils.lpSetLoadingEl( elQuestionItemNew, 1 );\r\n-\t\t} );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\t\tconst { html_edit_question } = data;\r\n-\t\t\t\t\tif ( html_edit_question ) {\r\n-\t\t\t\t\t\tObject.entries( html_edit_question ).forEach( ( [ question_id, item_html ] ) => {\r\n-\t\t\t\t\t\t\tconst elQuestionItemNew = this.elEditQuizWrap.querySelector(\r\n-\t\t\t\t\t\t\t\t`${ EditQuiz.selectors.elQuestionItem }[data-question-id=\"${ question_id }\"]`\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\telQuestionItemNew.outerHTML = item_html;\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.updateCountItems();\r\n-\t\t\t\t\teditQuestion.initTinyMCE();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\t\u002F\u002F completed handler intentionally empty\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = { action: 'add_questions_to_quiz', quiz_id: this.quizID, question_ids: questionIds, args: { id_url: this.idUrlHandle } };\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\tcheckCanAddQuestion( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elTrigger = target.closest( EditQuiz.selectors.elQuestionTitleNewInput ) || target.closest( EditQuiz.selectors.elQuestionTypeNew );\r\n-\t\tif ( ! elTrigger ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elAddNewQuestion = elTrigger.closest( `.${ EditQuiz.selectors.elAddNewQuestion }` );\r\n-\t\tif ( ! elAddNewQuestion ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnAddQuestion = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elBtnAddQuestion }` );\r\n-\t\tif ( ! elBtnAddQuestion ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionTitleInput = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTitleNewInput }` );\r\n-\t\tconst elQuestionTypeNew = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTypeNew }` );\r\n-\r\n-\t\tconst questionTitle = elQuestionTitleInput.value.trim();\r\n-\t\tconst questionType = elQuestionTypeNew.value;\r\n-\r\n-\t\tif ( questionTitle && questionType ) {\r\n-\t\t\telBtnAddQuestion.classList.add( 'active' );\r\n-\t\t} else {\r\n-\t\t\telBtnAddQuestion.classList.remove( 'active' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tremoveQuestion( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnRemoveQuestion = target.closest( `${ EditQuiz.selectors.elBtnRemoveQuestion }` );\r\n-\t\tif ( ! elBtnRemoveQuestion ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionItem = elBtnRemoveQuestion.closest( `${ EditQuiz.selectors.elQuestionItem }` );\r\n-\t\tif ( ! elQuestionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionItem.dataset.questionId;\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\ttitle: elBtnRemoveQuestion.dataset.title,\r\n-\t\t\ttext: elBtnRemoveQuestion.dataset.content,\r\n-\t\t\ticon: 'warning',\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\tshowCancelButton: true,\r\n-\t\t\tcancelButtonText: lpDataAdmin.i18n.cancel,\r\n-\t\t\tconfirmButtonText: lpDataAdmin.i18n.yes,\r\n-\t\t\treverseButtons: true,\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isConfirmed ) {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\r\n-\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\t\telQuestionItem.remove();\r\n-\t\t\t\t\t\t\tthis.updateCountItems();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tconst dataSend = {\r\n-\t\t\t\t\tquiz_id: this.quizID,\r\n-\t\t\t\t\taction: 'remove_question_from_quiz',\r\n-\t\t\t\t\tquestion_id: questionId,\r\n-\t\t\t\t\targs: { id_url: this.idUrlHandle },\r\n-\t\t\t\t};\r\n-\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tupdateQuestionTitle( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tlet canHandle = false;\r\n-\r\n-\t\tif ( target.closest( `${ EditQuiz.selectors.elBtnUpdateQuestionTitle }` ) ) {\r\n-\t\t\tcanHandle = true;\r\n-\t\t} else if ( target.closest( `${ EditQuiz.selectors.elQuestionTitleInput }` ) && e.key === 'Enter' ) {\r\n-\t\t\tcanHandle = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! canHandle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elQuestionItem = target.closest( `${ EditQuiz.selectors.elQuestionItem }` );\r\n-\t\tif ( ! elQuestionItem ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionTitleInput = elQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\r\n-\t\tif ( ! elQuestionTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst questionId = elQuestionItem.dataset.questionId;\r\n-\t\tconst questionTitleValue = elQuestionTitleInput.value.trim();\r\n-\t\tconst titleOld = elQuestionTitleInput.dataset.old;\r\n-\t\tconst message = elQuestionTitleInput.dataset.messEmptyTitle;\r\n-\t\tif ( questionTitleValue.length === 0 ) {\r\n-\t\t\tlpToastify.show( message, 'error' );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( questionTitleValue === titleOld ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\telQuestionTitleInput.blur();\r\n-\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\telQuestionTitleInput.dataset.old = questionTitleValue;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telQuestionTitleInput.value = titleOld;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 );\r\n-\t\t\t\telQuestionItem.classList.remove( 'editing' );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\tquiz_id: this.quizID,\r\n-\t\t\taction: 'update_question',\r\n-\t\t\tquestion_id: questionId,\r\n-\t\t\tquestion_title: questionTitleValue,\r\n-\t\t\targs: { id_url: this.idUrlHandle },\r\n-\t\t};\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\tchangeTitleQuestion( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elQuestionTitleInput = target.closest( `${ EditQuiz.selectors.elQuestionTitleInput }` );\r\n-\t\tif ( ! elQuestionTitleInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionItem = elQuestionTitleInput.closest( `${ EditQuiz.selectors.elQuestionItem }` );\r\n-\t\tconst titleValue = elQuestionTitleInput.value.trim();\r\n-\t\tconst titleValueOld = elQuestionTitleInput.dataset.old || '';\r\n-\r\n-\t\tif ( titleValue === titleValueOld ) {\r\n-\t\t\telQuestionItem.classList.remove( 'editing' );\r\n-\t\t} else {\r\n-\t\t\telQuestionItem.classList.add( 'editing' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tcancelChangeTitleQuestion( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnCancelUpdateQuestionTitle = target.closest( `${ EditQuiz.selectors.elBtnCancelUpdateQuestionTitle }` );\r\n-\t\tif ( ! elBtnCancelUpdateQuestionTitle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elQuestionItem = elBtnCancelUpdateQuestionTitle.closest( `${ EditQuiz.selectors.elQuestionItem }` );\r\n-\t\tconst elQuestionTitleInput = elQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\r\n-\t\telQuestionTitleInput.value = elQuestionTitleInput.dataset.old || '';\r\n-\t\telQuestionItem.classList.remove( 'editing' );\r\n-\t}\r\n-\r\n-\tsortAbleQuestion() {\r\n-\t\tlet isUpdateSectionPosition = 0;\r\n-\t\tlet timeout;\r\n-\r\n-\t\tnew Sortable( this.elEditListQuestions, {\r\n-\t\t\thandle: '.drag',\r\n-\t\t\tanimation: 150,\r\n-\t\t\tonEnd: ( evt ) => {\r\n-\t\t\t\tconst elQuestionItem = evt.item;\r\n-\t\t\t\tif ( ! isUpdateSectionPosition ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t\ttimeout = setTimeout( () => {\r\n-\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\r\n-\r\n-\t\t\t\t\tconst questionIds = [];\r\n-\t\t\t\t\tconst elQuestionItems = this.elEditListQuestions.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\r\n-\t\t\t\t\telQuestionItems.forEach( ( elItem ) => {\r\n-\t\t\t\t\t\tconst questionId = elItem.dataset.questionId;\r\n-\t\t\t\t\t\tif ( questionId ) {\r\n-\t\t\t\t\t\t\tquestionIds.push( questionId );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tconst callBack = {\r\n-\t\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\t\tconst { message, status } = response;\r\n-\r\n-\t\t\t\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t\t\t\t\teditQuestion.initTinyMCE();\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthrow `Error: ${ message }`;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 ); isUpdateSectionPosition = 0;\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\t\tconst dataSend = { quiz_id: this.quizID, action: 'update_questions_position', question_ids: questionIds, args: { id_url: this.idUrlHandle } };\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t}, 1000 );\r\n-\t\t\t},\r\n-\t\t\tonMove: () => {\r\n-\t\t\t\tclearTimeout( timeout );\r\n-\t\t\t},\r\n-\t\t\tonUpdate: () => {\r\n-\t\t\t\tisUpdateSectionPosition = 1;\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t}\r\n-}\r\n-\r\n-const editQuiz = new EditQuiz();\r\n-editQuiz.init();\r\n+\u002F**\n+ * Edit Quiz JS handler as a class.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.3\n+ *\u002F\n+import * as lpUtils from '..\u002Futils.js';\n+import SweetAlert from 'sweetalert2';\n+import Sortable from 'sortablejs';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+import 'toastify-js\u002Fsrc\u002Ftoastify.css';\n+import { EditQuestion } from '.\u002Fedit-question.js';\n+import { LpPopupSelectItemToAdd } from 'lpAssetsJsPath\u002FlpPopupSelectItemToAdd.js';\n+\n+let editQuestion;\n+\n+const lpPopupSelectItemToAdd = new LpPopupSelectItemToAdd();\n+lpPopupSelectItemToAdd.init();\n+\n+class EditQuiz {\n+\tconstructor() {\n+\t\tthis.idUrlHandle = 'edit-quiz-questions';\n+\t\tthis.elEditQuizWrap = null;\n+\t\tthis.elEditListQuestions = null;\n+\t\tthis.quizID = null;\n+\t}\n+\n+\tstatic selectors = {\n+\t\telEditQuizWrap: '.lp-edit-quiz-wrap',\n+\t\telQuestionEditMain: '.lp-question-edit-main',\n+\t\telQuestionToggleAll: '.lp-question-toggle-all',\n+\t\telEditListQuestions: '.lp-edit-list-questions',\n+\t\telQuestionItem: '.lp-question-item',\n+\t\telQuestionToggle: '.lp-question-toggle',\n+\t\telPopupItemsToSelectClone: '.lp-popup-items-to-select.clone',\n+\t\telBtnAddQuestion: '.lp-btn-add-question',\n+\t\telBtnRemoveQuestion: '.lp-btn-remove-question',\n+\t\telBtnUpdateQuestionTitle: '.lp-btn-update-question-title',\n+\t\telBtnCancelUpdateQuestionTitle: '.lp-btn-cancel-update-question-title',\n+\t\telQuestionTitleNewInput: '.lp-question-title-new-input',\n+\t\telQuestionTitleInput: '.lp-question-title-input',\n+\t\telQuestionTypeLabel: '.lp-question-type-label',\n+\t\telQuestionTypeNew: '.lp-question-type-new',\n+\t\telAddNewQuestion: 'add-new-question',\n+\t\telQuestionClone: '.lp-question-item.clone',\n+\t\tLPTarget: '.lp-target',\n+\t\telCollapse: 'lp-collapse',\n+\t};\n+\n+\tinit() {\n+\t\tlpUtils.lpOnElementReady( EditQuiz.selectors.elEditQuizWrap, ( elEditQuizWrapFound ) => {\n+\t\t\tthis.elEditQuizWrap = elEditQuizWrapFound;\n+\t\t\tthis.elEditListQuestions = this.elEditQuizWrap.querySelector( EditQuiz.selectors.elEditListQuestions );\n+\t\t\tconst elLPTarget = this.elEditQuizWrap.closest( EditQuiz.selectors.LPTarget );\n+\t\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\t\tthis.quizID = dataSend.args.quiz_id;\n+\n+\t\t\tthis.sortAbleQuestion();\n+\t\t\teditQuestion = new EditQuestion();\n+\t\t\teditQuestion.init();\n+\t\t\tconst elQuestionEditMains = elEditQuizWrapFound.querySelectorAll( `${ EditQuiz.selectors.elQuestionEditMain }` );\n+\t\t\telQuestionEditMains.forEach( ( elQuestionEditMain ) => {\n+\t\t\t\teditQuestion.sortAbleQuestionAnswer( elQuestionEditMain );\n+\t\t\t} );\n+\n+\t\t\tthis.events();\n+\t\t} );\n+\t}\n+\n+\tevents() {\n+\t\tif ( EditQuiz._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tEditQuiz._loadedEvents = true;\n+\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elQuestionToggleAll,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.toggleQuestionAll.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elBtnAddQuestion,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addQuestion.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elBtnRemoveQuestion,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.removeQuestion.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elBtnUpdateQuestionTitle,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateQuestionTitle.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elBtnCancelUpdateQuestionTitle,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.cancelChangeTitleQuestion.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected,\n+\t\t\t\tclass: lpPopupSelectItemToAdd,\n+\t\t\t\tcallBack: lpPopupSelectItemToAdd.addItemsSelectedToSection.name,\n+\t\t\t\tcallBackHandle: this.addQuestionsSelectedToQuiz.bind( this ),\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keydown\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.updateQuestionTitle.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleNewInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.addQuestion.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Keyup\n+\t\tlpUtils.eventHandlers( 'keyup', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elQuestionTitleInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.changeTitleQuestion.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: `${ EditQuiz.selectors.elQuestionTitleNewInput }, ${ EditQuiz.selectors.elQuestionTypeNew }`,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkCanAddQuestion.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Change\n+\t\tlpUtils.eventHandlers( 'change', [\n+\t\t\t{\n+\t\t\t\tselector: EditQuiz.selectors.elQuestionTypeNew,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkCanAddQuestion.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Click\n+\t\tdocument.addEventListener( 'click', ( e ) => {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tlpUtils.toggleCollapse( e, target, EditQuiz.selectors.elQuestionToggle, [], () => this.checkAllQuestionsCollapsed() );\n+\t\t} );\n+\t}\n+\n+\t\u002F\u002F Toggle all questions\n+\ttoggleQuestionAll( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elQuestionToggleAll = target.closest( `${ EditQuiz.selectors.elQuestionToggleAll }` );\n+\t\tif ( ! elQuestionToggleAll ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionItems = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\n+\n+\t\telQuestionToggleAll.classList.toggle( `${ EditQuiz.selectors.elCollapse }` );\n+\n+\t\telQuestionItems.forEach( ( el ) => {\n+\t\t\tconst shouldCollapse = elQuestionToggleAll.classList.contains( `${ EditQuiz.selectors.elCollapse }` );\n+\t\t\tel.classList.toggle( `${ EditQuiz.selectors.elCollapse }`, shouldCollapse );\n+\t\t} );\n+\t}\n+\n+\tcheckAllQuestionsCollapsed() {\n+\t\tconst elQuestionItems = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\n+\t\tconst elQuestionToggleAll = this.elEditQuizWrap.querySelector( `${ EditQuiz.selectors.elQuestionToggleAll }` );\n+\n+\t\tlet isAllExpand = true;\n+\t\telQuestionItems.forEach( ( el ) => {\n+\t\t\tif ( el.classList.contains( `${ EditQuiz.selectors.elCollapse }` ) ) {\n+\t\t\t\tisAllExpand = false;\n+\t\t\t\treturn false; \u002F\u002F Break\n+\t\t\t}\n+\t\t} );\n+\n+\t\tif ( isAllExpand ) {\n+\t\t\telQuestionToggleAll.classList.remove( `${ EditQuiz.selectors.elCollapse }` );\n+\t\t} else {\n+\t\t\telQuestionToggleAll.classList.add( `${ EditQuiz.selectors.elCollapse }` );\n+\t\t}\n+\t}\n+\n+\tupdateCountItems() {\n+\t\tconst elCountItemsAll = this.elEditQuizWrap.querySelector( '.total-items' );\n+\t\tconst elItemsAll = this.elEditQuizWrap.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\n+\t\tconst itemsAllCount = elItemsAll.length;\n+\n+\t\telCountItemsAll.dataset.count = itemsAllCount;\n+\t\telCountItemsAll.querySelector( '.count' ).textContent = itemsAllCount;\n+\t}\n+\n+\t\u002F\u002F Add question to quiz\n+\taddQuestion( args ) {\n+\t\tconst { e, target, callBackNest } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst elAddNewQuestion = target.closest( `.${ EditQuiz.selectors.elAddNewQuestion }` );\n+\t\tif ( ! elAddNewQuestion ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionTitleNewInput = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTitleNewInput }` );\n+\t\tconst questionTitle = elQuestionTitleNewInput.value.trim();\n+\t\tif ( ! questionTitle ) {\n+\t\t\tlpToastify.show( elQuestionTitleNewInput.dataset.messEmptyTitle, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionType = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTypeNew }` );\n+\t\tconst questionType = elQuestionType.value;\n+\t\tif ( ! questionType ) {\n+\t\t\tlpToastify.show( elQuestionType.dataset.messEmptyType, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionClone = this.elEditListQuestions.querySelector( `${ EditQuiz.selectors.elQuestionItem }.clone` );\n+\t\tconst newQuestionItem = elQuestionClone.cloneNode( true );\n+\t\tconst elQuestionTitleInput = newQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\n+\n+\t\telQuestionTitleInput.value = questionTitle;\n+\t\telQuestionTitleNewInput.value = '';\n+\t\tnewQuestionItem.classList.remove( 'clone' );\n+\t\tlpUtils.lpShowHideEl( newQuestionItem, 1 );\n+\t\telQuestionClone.insertAdjacentElement( 'beforebegin', newQuestionItem );\n+\t\tlpUtils.lpSetLoadingEl( newQuestionItem, 1 );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\t\t\t\tconst { question, html_edit_question } = data;\n+\n+\t\t\t\tif ( status === 'error' ) {\n+\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t} else if ( status === 'success' ) {\n+\t\t\t\t\tnewQuestionItem.dataset.questionId = question.ID;\n+\t\t\t\t\tnewQuestionItem.dataset.questionType = question.meta_data._lp_type;\n+\t\t\t\t\tnewQuestionItem.outerHTML = html_edit_question;\n+\t\t\t\t\tconst elQuestionItemCreated = this.elEditListQuestions.querySelector( `${ EditQuiz.selectors.elQuestionItem }[data-question-id=\"${ question.ID }\"]` );\n+\t\t\t\t\telQuestionItemCreated.classList.remove( EditQuiz.selectors.elCollapse );\n+\t\t\t\t\tthis.updateCountItems();\n+\t\t\t\t\teditQuestion.initTinyMCE();\n+\t\t\t\t\tconst elQuestionEditMain = elQuestionItemCreated.querySelector( `${ EditQuiz.selectors.elQuestionEditMain }` );\n+\t\t\t\t\teditQuestion.sortAbleQuestionAnswer( elQuestionEditMain );\n+\n+\t\t\t\t\t\u002F\u002F Callback nest\n+\t\t\t\t\tif ( callBackNest && typeof callBackNest.success === 'function' ) {\n+\t\t\t\t\t\tcallBackNest.success( { response, elQuestionItemCreated } );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tnewQuestionItem.remove();\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\n+\t\t\t\tif ( callBackNest && typeof callBackNest.error === 'function' ) {\n+\t\t\t\t\tcallBackNest.error( { error, newQuestionItem } );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( newQuestionItem, 0 );\n+\t\t\t\tthis.checkCanAddQuestion( { e, target: elQuestionTitleNewInput } );\n+\n+\t\t\t\tif ( callBackNest && typeof callBackNest.completed === 'function' ) {\n+\t\t\t\t\tcallBackNest.completed( { newQuestionItem } );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tlet dataSend = JSON.parse( elQuestionTitleNewInput.dataset.send );\n+\t\tdataSend = { ...dataSend,\n+\t\t\tquestion_title: questionTitle,\n+\t\t\tquestion_type: questionType,\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F\u002F Add questions selected from popup to quiz\n+\taddQuestionsSelectedToQuiz( itemsSelected ) {\n+\t\tconst questionIds = [];\n+\t\titemsSelected.forEach( ( item ) => {\n+\t\t\tconst elQuestionItemClone = this.elEditQuizWrap.querySelector( `${ EditQuiz.selectors.elQuestionItem }.clone` );\n+\t\t\tif ( ! elQuestionItemClone ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tquestionIds.push( item.id );\n+\t\t\tconst elQuestionItemNew = elQuestionItemClone.cloneNode( true );\n+\t\t\tconst elQuestionItemTitleInput = elQuestionItemNew.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\n+\t\t\telQuestionItemNew.classList.remove( 'clone' );\n+\t\t\telQuestionItemNew.dataset.questionId = item.id;\n+\t\t\telQuestionItemTitleInput.value = item.titleSelected;\n+\n+\t\t\tlpUtils.lpSetLoadingEl( elQuestionItemNew, 1 );\n+\t\t\tlpUtils.lpShowHideEl( elQuestionItemNew, 1 );\n+\t\t\telQuestionItemClone.insertAdjacentElement( 'beforebegin', elQuestionItemNew );\n+\t\t\tlpUtils.lpSetLoadingEl( elQuestionItemNew, 1 );\n+\t\t} );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\t\tconst { html_edit_question } = data;\n+\t\t\t\t\tif ( html_edit_question ) {\n+\t\t\t\t\t\tObject.entries( html_edit_question ).forEach( ( [ question_id, item_html ] ) => {\n+\t\t\t\t\t\t\tconst elQuestionItemNew = this.elEditQuizWrap.querySelector(\n+\t\t\t\t\t\t\t\t`${ EditQuiz.selectors.elQuestionItem }[data-question-id=\"${ question_id }\"]`\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\telQuestionItemNew.outerHTML = item_html;\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.updateCountItems();\n+\t\t\t\t\teditQuestion.initTinyMCE();\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\t\u002F\u002F completed handler intentionally empty\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = { action: 'add_questions_to_quiz', quiz_id: this.quizID, question_ids: questionIds, args: { id_url: this.idUrlHandle } };\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\tcheckCanAddQuestion( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elTrigger = target.closest( EditQuiz.selectors.elQuestionTitleNewInput ) || target.closest( EditQuiz.selectors.elQuestionTypeNew );\n+\t\tif ( ! elTrigger ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elAddNewQuestion = elTrigger.closest( `.${ EditQuiz.selectors.elAddNewQuestion }` );\n+\t\tif ( ! elAddNewQuestion ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnAddQuestion = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elBtnAddQuestion }` );\n+\t\tif ( ! elBtnAddQuestion ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionTitleInput = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTitleNewInput }` );\n+\t\tconst elQuestionTypeNew = elAddNewQuestion.querySelector( `${ EditQuiz.selectors.elQuestionTypeNew }` );\n+\n+\t\tconst questionTitle = elQuestionTitleInput.value.trim();\n+\t\tconst questionType = elQuestionTypeNew.value;\n+\n+\t\tif ( questionTitle && questionType ) {\n+\t\t\telBtnAddQuestion.classList.add( 'active' );\n+\t\t} else {\n+\t\t\telBtnAddQuestion.classList.remove( 'active' );\n+\t\t}\n+\t}\n+\n+\tremoveQuestion( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnRemoveQuestion = target.closest( `${ EditQuiz.selectors.elBtnRemoveQuestion }` );\n+\t\tif ( ! elBtnRemoveQuestion ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionItem = elBtnRemoveQuestion.closest( `${ EditQuiz.selectors.elQuestionItem }` );\n+\t\tif ( ! elQuestionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionItem.dataset.questionId;\n+\n+\t\tSweetAlert.fire( {\n+\t\t\ttitle: elBtnRemoveQuestion.dataset.title,\n+\t\t\ttext: elBtnRemoveQuestion.dataset.content,\n+\t\t\ticon: 'warning',\n+\t\t\tshowCloseButton: true,\n+\t\t\tshowCancelButton: true,\n+\t\t\tcancelButtonText: lpDataAdmin.i18n.cancel,\n+\t\t\tconfirmButtonText: lpDataAdmin.i18n.yes,\n+\t\t\treverseButtons: true,\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isConfirmed ) {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\n+\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\t\telQuestionItem.remove();\n+\t\t\t\t\t\t\tthis.updateCountItems();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tconst dataSend = {\n+\t\t\t\t\tquiz_id: this.quizID,\n+\t\t\t\t\taction: 'remove_question_from_quiz',\n+\t\t\t\t\tquestion_id: questionId,\n+\t\t\t\t\targs: { id_url: this.idUrlHandle },\n+\t\t\t\t};\n+\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\tupdateQuestionTitle( args ) {\n+\t\tconst { e, target } = args;\n+\t\tlet canHandle = false;\n+\n+\t\tif ( target.closest( `${ EditQuiz.selectors.elBtnUpdateQuestionTitle }` ) ) {\n+\t\t\tcanHandle = true;\n+\t\t} else if ( target.closest( `${ EditQuiz.selectors.elQuestionTitleInput }` ) && e.key === 'Enter' ) {\n+\t\t\tcanHandle = true;\n+\t\t}\n+\n+\t\tif ( ! canHandle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tconst elQuestionItem = target.closest( `${ EditQuiz.selectors.elQuestionItem }` );\n+\t\tif ( ! elQuestionItem ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionTitleInput = elQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\n+\t\tif ( ! elQuestionTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst questionId = elQuestionItem.dataset.questionId;\n+\t\tconst questionTitleValue = elQuestionTitleInput.value.trim();\n+\t\tconst titleOld = elQuestionTitleInput.dataset.old;\n+\t\tconst message = elQuestionTitleInput.dataset.messEmptyTitle;\n+\t\tif ( questionTitleValue.length === 0 ) {\n+\t\t\tlpToastify.show( message, 'error' );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( questionTitleValue === titleOld ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\telQuestionTitleInput.blur();\n+\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\telQuestionTitleInput.dataset.old = questionTitleValue;\n+\t\t\t\t} else {\n+\t\t\t\t\telQuestionTitleInput.value = titleOld;\n+\t\t\t\t}\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 );\n+\t\t\t\telQuestionItem.classList.remove( 'editing' );\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataSend = {\n+\t\t\tquiz_id: this.quizID,\n+\t\t\taction: 'update_question',\n+\t\t\tquestion_id: questionId,\n+\t\t\tquestion_title: questionTitleValue,\n+\t\t\targs: { id_url: this.idUrlHandle },\n+\t\t};\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\tchangeTitleQuestion( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elQuestionTitleInput = target.closest( `${ EditQuiz.selectors.elQuestionTitleInput }` );\n+\t\tif ( ! elQuestionTitleInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionItem = elQuestionTitleInput.closest( `${ EditQuiz.selectors.elQuestionItem }` );\n+\t\tconst titleValue = elQuestionTitleInput.value.trim();\n+\t\tconst titleValueOld = elQuestionTitleInput.dataset.old || '';\n+\n+\t\tif ( titleValue === titleValueOld ) {\n+\t\t\telQuestionItem.classList.remove( 'editing' );\n+\t\t} else {\n+\t\t\telQuestionItem.classList.add( 'editing' );\n+\t\t}\n+\t}\n+\n+\tcancelChangeTitleQuestion( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnCancelUpdateQuestionTitle = target.closest( `${ EditQuiz.selectors.elBtnCancelUpdateQuestionTitle }` );\n+\t\tif ( ! elBtnCancelUpdateQuestionTitle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elQuestionItem = elBtnCancelUpdateQuestionTitle.closest( `${ EditQuiz.selectors.elQuestionItem }` );\n+\t\tconst elQuestionTitleInput = elQuestionItem.querySelector( `${ EditQuiz.selectors.elQuestionTitleInput }` );\n+\t\telQuestionTitleInput.value = elQuestionTitleInput.dataset.old || '';\n+\t\telQuestionItem.classList.remove( 'editing' );\n+\t}\n+\n+\tsortAbleQuestion() {\n+\t\tlet isUpdateSectionPosition = 0;\n+\t\tlet timeout;\n+\n+\t\tnew Sortable( this.elEditListQuestions, {\n+\t\t\thandle: '.drag',\n+\t\t\tanimation: 150,\n+\t\t\tonEnd: ( evt ) => {\n+\t\t\t\tconst elQuestionItem = evt.item;\n+\t\t\t\tif ( ! isUpdateSectionPosition ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tclearTimeout( timeout );\n+\t\t\t\ttimeout = setTimeout( () => {\n+\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 1 );\n+\n+\t\t\t\t\tconst questionIds = [];\n+\t\t\t\t\tconst elQuestionItems = this.elEditListQuestions.querySelectorAll( `${ EditQuiz.selectors.elQuestionItem }:not(.clone)` );\n+\t\t\t\t\telQuestionItems.forEach( ( elItem ) => {\n+\t\t\t\t\t\tconst questionId = elItem.dataset.questionId;\n+\t\t\t\t\t\tif ( questionId ) {\n+\t\t\t\t\t\t\tquestionIds.push( questionId );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tconst callBack = {\n+\t\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\t\tconst { message, status } = response;\n+\n+\t\t\t\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t\t\t\t\teditQuestion.initTinyMCE();\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthrow `Error: ${ message }`;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\t\tlpUtils.lpSetLoadingEl( elQuestionItem, 0 ); isUpdateSectionPosition = 0;\n+\t\t\t\t\t\t},\n+\t\t\t\t\t};\n+\n+\t\t\t\t\tconst dataSend = { quiz_id: this.quizID, action: 'update_questions_position', question_ids: questionIds, args: { id_url: this.idUrlHandle } };\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t}, 1000 );\n+\t\t\t},\n+\t\t\tonMove: () => {\n+\t\t\t\tclearTimeout( timeout );\n+\t\t\t},\n+\t\t\tonUpdate: () => {\n+\t\t\t\tisUpdateSectionPosition = 1;\n+\t\t\t},\n+\t\t} );\n+\t}\n+}\n+\n+const editQuiz = new EditQuiz();\n+editQuiz.init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fgenerate-with-openai.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,571 +1,642 @@\n-\u002F**\r\n- * Generate data with OpenAI\r\n- *\u002F\r\n-\r\n-import * as lpUtils from '.\u002F..\u002Futils.js';\r\n-import SweetAlert from 'sweetalert2';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-\r\n-let lp_structure_course;\r\n-let popupSweetAlert = null;\r\n-let lp_is_generating_course_data = false;\r\n-const lp_course_ai_setting = JSON.parse( localStorage.getItem( 'lp_course_ai_setting' ) ) || {};\r\n-let isLayoutGutenberg = false;\r\n-\r\n-let selectGutenberg;\r\n-let dispatchGutenberg;\r\n-let editorGutenberg;\r\n-\r\n-export class GenerateWithOpenai {\r\n-\tconstructor() {\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telBtnGenerateWithAi: '.lp-btn-generate-with-ai',\r\n-\t\telGenerateDataAiWrap: '.lp-generate-data-ai-wrap',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tif ( ! lpData?.enable_open_ai ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpUtils.lpOnElementReady( '#titlewrap', ( el ) => {\r\n-\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t'afterend',\r\n-\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t);\r\n-\t\t} );\r\n-\t\tlpUtils.lpOnElementReady( '#wp-content-media-buttons', ( el ) => {\r\n-\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t'beforeend',\r\n-\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t);\r\n-\t\t} );\r\n-\t\tlpUtils.lpOnElementReady( '#postimagediv', ( el ) => {\r\n-\t\t\tconst elInside = el.querySelector( '.postbox-header' );\r\n-\t\t\telInside.insertAdjacentHTML(\r\n-\t\t\t\t'afterend',\r\n-\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tstyle=\"margin: 12px 12px 0 12px;\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t);\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Check is layout Gutenberg\r\n-\t\tif ( wp.data && wp.data.select( 'core\u002Feditor' ) ) {\r\n-\t\t\tisLayoutGutenberg = true;\r\n-\t\t\tselectGutenberg = wp.data.select;\r\n-\t\t\tdispatchGutenberg = wp.data.dispatch;\r\n-\t\t\teditorGutenberg = selectGutenberg( 'core\u002Feditor' );\r\n-\r\n-\t\t\t\u002F\u002F For layout Gutenberg - button for title\r\n-\t\t\tlpUtils.lpOnElementReady( '.editor-document-bar', ( el ) => {\r\n-\t\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t\t'afterend',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tstyle=\"margin-left: 5px\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t\t);\r\n-\t\t\t} );\r\n-\r\n-\t\t\t\u002F\u002F For layout Gutenberg - button for description\r\n-\t\t\tlpUtils.lpOnElementReady( '.editor-post-featured-image', ( el ) => {\r\n-\t\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t\t'beforebegin',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`,\r\n-\t\t\t\t);\r\n-\t\t\t} );\r\n-\r\n-\t\t\t\u002F\u002F For layout Gutenberg - button for image\r\n-\t\t\tlpUtils.lpOnElementReady( '.editor-post-featured-image', ( el ) => {\r\n-\t\t\t\tel.insertAdjacentHTML(\r\n-\t\t\t\t\t'afterend',\r\n-\t\t\t\t\t`\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\r\n-\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fbutton>`\r\n-\t\t\t\t);\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tthis.events();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: GenerateWithOpenai.selectors.elBtnGenerateWithAi,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.showPopup.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-step',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.showStep.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-generate-prompt',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.generatePrompt.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-call-open-ai',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.generateData.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-copy',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.copyGeneratedData.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-apply',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.applyGeneratedData.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-ai-apply-image',\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.applyImageData.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.lp-btn-close-ai-popup',\r\n-\t\t\t\t\u002F\u002Fclass: this,\r\n-\t\t\t\tcallBack: ( args ) => {\r\n-\t\t\t\t\tconst { e, target } = args;\r\n-\r\n-\t\t\t\t\tconst message = lpData.i18n.confirm_close_ai;\r\n-\r\n-\t\t\t\t\tif ( ! lp_is_generating_course_data ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t} else if ( confirm( message ) ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Testing custom confirm box\r\n-\t\t\t\t\t\u002F*if ( confirm( message ) ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t}*\u002F\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\tshowPopup( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst templateId = target.dataset.template || target.closest( '.lp-btn-generate-with-ai' ).dataset.template ||\r\n-\t\t\ttarget.closest( '.lp-generate-data-ai-wrap' ).dataset.template || '';\r\n-\r\n-\t\tconst modalTemplate = document.querySelector( templateId );\r\n-\r\n-\t\tif ( ! modalTemplate ) {\r\n-\t\t\tconsole.error( `Template ${ templateId } not found!` );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\thtml: modalTemplate.innerHTML,\r\n-\t\t\twidth: '60%',\r\n-\t\t\tshowCloseButton: false,\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t\tallowOutsideClick: false,\r\n-\t\t\tallowEscapeKey: false,\r\n-\t\t\tdidOpen: () => {\r\n-\t\t\t\tpopupSweetAlert = SweetAlert.getPopup();\r\n-\t\t\t\t\u002F\u002F Click to show tomSelect style\r\n-\t\t\t\tpopupSweetAlert.click();\r\n-\r\n-\t\t\t\t\u002F\u002F Set post title and post content to hidden fields of form to AI prompt reference\r\n-\t\t\t\tconst elPostTitleInput = document.querySelector( 'input[name=post_title]' );\r\n-\t\t\t\tlet post_title = '';\r\n-\t\t\t\tif ( elPostTitleInput ) {\r\n-\t\t\t\t\tpost_title = elPostTitleInput.value;\r\n-\t\t\t\t} else if ( isLayoutGutenberg ) {\r\n-\t\t\t\t\tconst elGutenbergTitle = document.querySelector( '.editor-post-card-panel__title-name' );\r\n-\t\t\t\t\tif ( elGutenbergTitle ) {\r\n-\t\t\t\t\t\tpost_title = elGutenbergTitle.textContent;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlet post_content = '';\r\n-\t\t\t\tif ( ! isLayoutGutenberg ) {\r\n-\t\t\t\t\tif ( ! window.tinymce || ! window.tinymce.get( 'content' ) ) {\r\n-\t\t\t\t\t\tpost_content = document\r\n-\t\t\t\t\t\t\t.querySelector( '#content' )\r\n-\t\t\t\t\t\t\t.value;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tpost_content = window.tinymce\r\n-\t\t\t\t\t\t\t.get( 'content' )\r\n-\t\t\t\t\t\t\t.getContent( { format: 'text' } );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tconst content = editorGutenberg.getEditedPostContent();\r\n-\t\t\t\t\tpost_content = content\r\n-\t\t\t\t\t\t.replace( \u002F(\u003C([^>]+)>)\u002Fgi, '' ); \u002F\u002F Remove HTML tags\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst form = popupSweetAlert.querySelector( 'form' );\r\n-\t\t\t\tconst elPostTitle = form.querySelector( '[name=post-title]' );\r\n-\t\t\t\tif ( elPostTitle ) {\r\n-\t\t\t\t\telPostTitle.value = post_title;\r\n-\r\n-\t\t\t\t\tif ( ! post_title ) {\r\n-\t\t\t\t\t\tconst elGroup = elPostTitle.closest( '.form-group' );\r\n-\t\t\t\t\t\tconst elReferWarning = elGroup.querySelector( '.lp-ai-warning-refer' );\r\n-\t\t\t\t\t\tif ( elReferWarning ) {\r\n-\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elReferWarning, 1 );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst elPostContent = form.querySelector(\r\n-\t\t\t\t\t'[name=post-content]'\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( elPostContent ) {\r\n-\t\t\t\t\telPostContent.value = post_content;\r\n-\r\n-\t\t\t\t\tif ( post_content.length \u003C 2 ) {\r\n-\t\t\t\t\t\tconst elGroup = elPostContent.closest( '.form-group' );\r\n-\t\t\t\t\t\tconst elReferWarning = elGroup.querySelector( '.lp-ai-warning-refer' );\r\n-\t\t\t\t\t\tif ( elReferWarning ) {\r\n-\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elReferWarning, 1 );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst targetAudience = popupSweetAlert.querySelector( 'select[name=\"target_audience\"]' );\r\n-\t\t\t\tif ( targetAudience ) {\r\n-\t\t\t\t\tif ( lp_course_ai_setting?.target_audience ) {\r\n-\t\t\t\t\t\ttargetAudience.tomselect.setValue( lp_course_ai_setting.target_audience );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\ttargetAudience.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\t\tlp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\r\n-\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst tone = popupSweetAlert.querySelector( 'select[name=\"tone\"]' );\r\n-\t\t\t\tif ( tone ) {\r\n-\t\t\t\t\tif ( lp_course_ai_setting?.tone ) {\r\n-\t\t\t\t\t\ttone.tomselect.setValue( lp_course_ai_setting.tone );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\ttone.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\t\tlp_course_ai_setting.tone = tone.tomselect.getValue();\r\n-\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst language = popupSweetAlert.querySelector( 'select[name=\"language\"]' );\r\n-\t\t\t\tif ( language ) {\r\n-\t\t\t\t\tif ( lp_course_ai_setting?.language ) {\r\n-\t\t\t\t\t\tlanguage.tomselect.setValue( lp_course_ai_setting.language );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tlanguage.addEventListener( 'change', ( event ) => {\r\n-\t\t\t\t\t\tconst value = language.tomselect.getValue();\r\n-\t\t\t\t\t\tlp_course_ai_setting.language = value ? [ value ] : [];\r\n-\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isDismissed ) {\r\n-\t\t\t\tif ( lp_is_generating_course_data ) {\r\n-\t\t\t\t\tlp_is_generating_course_data = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tshowStep( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elBtnActions = target.closest( '.button-actions' );\r\n-\t\tconst elCreateCourseAIWrap = elBtnActions.closest(\r\n-\t\t\tGenerateWithOpenai.selectors.elGenerateDataAiWrap\r\n-\t\t);\r\n-\t\tlet step = parseInt( elBtnActions.dataset.step );\r\n-\r\n-\t\tconst stepAction = target.dataset.action;\r\n-\t\tif ( stepAction === 'next' ) {\r\n-\t\t\tstep++;\r\n-\t\t} else if ( stepAction === 'prev' ) {\r\n-\t\t\tstep--;\r\n-\t\t}\r\n-\r\n-\t\telBtnActions.dataset.step = step;\r\n-\t\tconst elForm = target.closest( 'form' );\r\n-\t\tconst elContentStep = elForm.querySelector(\r\n-\t\t\t`.step-content[data-step=\"${ step }\"]`\r\n-\t\t);\r\n-\t\tconst elItemStep = elCreateCourseAIWrap.querySelector(\r\n-\t\t\t`.step-item[data-step=\"${ step }\"]`\r\n-\t\t);\r\n-\t\telForm\r\n-\t\t\t.querySelectorAll( '.step-content' )\r\n-\t\t\t.forEach( ( el ) => el.classList.remove( 'active' ) );\r\n-\t\telContentStep.classList.add( 'active' );\r\n-\t\telCreateCourseAIWrap\r\n-\t\t\t.querySelectorAll( '.step-item' )\r\n-\t\t\t.forEach( ( el ) => el.classList.remove( 'active' ) );\r\n-\t\telItemStep.classList.add( 'active' );\r\n-\r\n-\t\t\u002F\u002F Get all buttons step to show\u002Fhide\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tconst elBtnSteps = form.querySelectorAll( 'button[data-step-show]' );\r\n-\t\telBtnSteps.forEach( ( el ) => {\r\n-\t\t\tconst stepsShow = el.dataset.stepShow\r\n-\t\t\t\t.split( ',' )\r\n-\t\t\t\t.map( ( s ) => parseInt( s.trim() ) );\r\n-\t\t\tif ( stepsShow.includes( step ) ) {\r\n-\t\t\t\tlpUtils.lpShowHideEl( el, 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\tlpUtils.lpShowHideEl( el, 0 );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create prompt from data config\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tgeneratePrompt( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Get dataSend\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tconst elPromptTextarea = form.querySelector(\r\n-\t\t\t\t\t\t'textarea[name=lp-openai-prompt-generated-field]'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\telPromptTextarea.value = data;\r\n-\t\t\t\t\tconst elBtnNext = form.querySelector(\r\n-\t\t\t\t\t\t'.lp-btn-step[data-action=next]'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\telBtnNext.click();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Submit prompt to OpenAI to generate course data\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tgenerateData( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Get dataSend\r\n-\t\tconst form = target.closest( 'form' );\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\r\n-\r\n-\t\tconst btnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\r\n-\t\tlpUtils.lpShowHideEl( btnPrev, 0 );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\t\t\t\tif ( lp_is_generating_course_data ) {\r\n-\t\t\t\t\tlpToastify.show( message, status );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\t\u002F\u002F Save structure data\r\n-\t\t\t\t\tlp_structure_course = data.lp_structure_course;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set preview HTML\r\n-\t\t\t\t\tconst elResults = form.querySelector(\r\n-\t\t\t\t\t\t'.lp-ai-generated-results'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\telResults.innerHTML = data.lp_html_preview;\r\n-\r\n-\t\t\t\t\tconst elBtnNext = form.querySelector(\r\n-\t\t\t\t\t\t'.lp-btn-step[data-action=next]'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\telBtnNext.click();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t\tlpUtils.lpShowHideEl( btnPrev, 1 );\r\n-\t\t\t\tlp_is_generating_course_data = false;\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tlp_is_generating_course_data = true;\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-\r\n-\tapplyGeneratedData( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst dataApply = target.dataset.apply;\r\n-\t\tconst dataTarget = target.dataset.target;\r\n-\r\n-\t\tif ( dataTarget ) {\r\n-\t\t\tif ( ! isLayoutGutenberg ) {\r\n-\t\t\t\tif ( dataTarget === 'set-wp-editor-content' ) {\r\n-\t\t\t\t\tthis.setWPEditorContent( dataApply );\r\n-\t\t\t\t} else if ( dataTarget === 'set-wp-title' ) {\r\n-\t\t\t\t\tconst elTitleInput = document.querySelector( 'input[name=post_title]' );\r\n-\t\t\t\t\tif ( elTitleInput ) {\r\n-\t\t\t\t\t\telTitleInput.value = dataApply;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else if ( dataTarget === 'set-wp-editor-content' ) {\r\n-\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { content: dataApply } );\r\n-\t\t\t} else if ( dataTarget === 'set-wp-title' ) {\r\n-\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { title: dataApply } );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( popupSweetAlert ) {\r\n-\t\t\tSweetAlert.close();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tcopyGeneratedData( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst dataCopy = target.dataset.copy;\r\n-\r\n-\t\tif ( navigator.clipboard ) {\r\n-\t\t\tnavigator.clipboard\r\n-\t\t\t\t.writeText( dataCopy )\r\n-\t\t\t\t.then( () => {\r\n-\t\t\t\t\tlpToastify.show( 'Copied to clipboard!', 'success' );\r\n-\t\t\t\t} )\r\n-\t\t\t\t.catch( ( err ) => {\r\n-\t\t\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\r\n-\t\t\t\t} );\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Fallback when clipboard API is unavailable\r\n-\t\t\tconst textarea = document.createElement( 'textarea' );\r\n-\t\t\ttextarea.value = dataCopy;\r\n-\t\t\ttextarea.style.position = 'fixed';\r\n-\t\t\ttextarea.style.left = '-9999px';\r\n-\t\t\tdocument.body.appendChild( textarea );\r\n-\t\t\ttextarea.select();\r\n-\t\t\ttry {\r\n-\t\t\t\tconst successful = document.execCommand( 'copy' );\r\n-\t\t\t\tlpToastify.show(\r\n-\t\t\t\t\tsuccessful ? 'Copied to clipboard!' : 'Failed to copy text',\r\n-\t\t\t\t\tsuccessful ? 'success' : 'error'\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( err ) {\r\n-\t\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\r\n-\t\t\t}\r\n-\t\t\tdocument.body.removeChild( textarea );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*navigator.clipboard.writeText( dataCopy ).then( () => {\r\n-\t\t\tlpToastify.show( 'Copied to clipboard!', 'success' );\r\n-\t\t} ).catch( ( err ) => {\r\n-\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\r\n-\t\t} );*\u002F\r\n-\t}\r\n-\r\n-\tsetWPEditorContent( htmlContent ) {\r\n-\t\tconst editor = window.tinymce.get( 'content' );\r\n-\t\teditor.setContent( htmlContent );\r\n-\t}\r\n-\r\n-\tapplyImageData( args ) {\r\n-\t\tconst { e, target } = args;\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\t\tdataSend = lpUtils.mergeDataWithDatForm(\r\n-\t\t\ttarget.closest( 'form' ),\r\n-\t\t\tdataSend\r\n-\t\t);\r\n-\t\t\u002F\u002Fe.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\r\n-\t\t\u002F\u002F Ajax to generate prompt\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tlpToastify.show( message, status );\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tif ( ! isLayoutGutenberg ) {\r\n-\t\t\t\t\t\t\u002F\u002F Set image\r\n-\t\t\t\t\t\tconst elImagePreview = document.querySelector(\r\n-\t\t\t\t\t\t\t'#postimagediv .inside'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\telImagePreview.outerHTML = data.html_image;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { featured_media: data.attachment_id } );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( popupSweetAlert ) {\r\n-\t\t\t\t\t\tSweetAlert.close();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-}\r\n+\u002F**\n+ * Generate data with OpenAI\n+ *\u002F\n+\n+import * as lpUtils from '.\u002F..\u002Futils.js';\n+import SweetAlert from 'sweetalert2';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+\n+let lp_structure_course;\n+let popupSweetAlert = null;\n+let lp_is_generating_course_data = false;\n+const lp_course_ai_setting = JSON.parse( localStorage.getItem( 'lp_course_ai_setting' ) ) || {};\n+let isLayoutGutenberg = false;\n+\n+let selectGutenberg;\n+let dispatchGutenberg;\n+let editorGutenberg;\n+\n+export class GenerateWithOpenai {\n+\tconstructor( options = {} ) {\n+\t\tthis.options = {\n+\t\t\tautoInsertButtons: true,\n+\t\t\tisCourseBuilder: false,\n+\t\t\ttitleInputSelector: 'input[name=post_title]',\n+\t\t\tcourseBuilderTitleInputSelector: 'input[name=course_title]',\n+\t\t\teditorIdClassic: 'content',\n+\t\t\teditorIdCourseBuilder: 'course_description_editor',\n+\t\t\t...options,\n+\t\t};\n+\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\telBtnGenerateWithAi: '.lp-btn-generate-with-ai',\n+\t\telGenerateDataAiWrap: '.lp-generate-data-ai-wrap',\n+\t};\n+\n+\tinit() {\n+\t\tif ( ! lpData?.enable_open_ai ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( this.options.autoInsertButtons ) {\n+\t\t\tlpUtils.lpOnElementReady( '#titlewrap', ( el ) => {\n+\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t'afterend',\n+\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"margin-left: 5px\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t);\n+\t\t\t} );\n+\t\t\tlpUtils.lpOnElementReady( '#wp-content-media-buttons', ( el ) => {\n+\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t'beforeend',\n+\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`,\n+\t\t\t\t);\n+\t\t\t} );\n+\t\t\tlpUtils.lpOnElementReady( '#postimagediv', ( el ) => {\n+\t\t\t\tconst elInside = el.querySelector( '.postbox-header' );\n+\t\t\t\telInside.insertAdjacentHTML(\n+\t\t\t\t\t'afterend',\n+\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\tclass=\"lp-btn-generate-with-ai lp-btn-ai-style\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n+\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t);\n+\t\t\t} );\n+\n+\t\t\t\u002F\u002F Check is layout Gutenberg\n+\t\t\tif ( wp.data && wp.data.select( 'core\u002Feditor' ) ) {\n+\t\t\t\tisLayoutGutenberg = true;\n+\t\t\t\tselectGutenberg = wp.data.select;\n+\t\t\t\tdispatchGutenberg = wp.data.dispatch;\n+\t\t\t\teditorGutenberg = selectGutenberg( 'core\u002Feditor' );\n+\n+\t\t\t\t\u002F\u002F For layout Gutenberg - button for title\n+\t\t\t\tlpUtils.lpOnElementReady( '.editor-document-bar', ( el ) => {\n+\t\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t\t'afterend',\n+\t\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"margin-left: 5px\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-title-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t\t);\n+\t\t\t\t} );\n+\n+\t\t\t\t\u002F\u002F For layout Gutenberg - button for description\n+\t\t\t\tlpUtils.lpOnElementReady( '.editor-post-featured-image', ( el ) => {\n+\t\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t\t'beforebegin',\n+\t\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-description-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>Generate description with AI\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t\t);\n+\t\t\t\t} );\n+\n+\t\t\t\t\u002F\u002F For layout Gutenberg - button for image\n+\t\t\t\tlpUtils.lpOnElementReady( '.editor-post-featured-image', ( el ) => {\n+\t\t\t\t\tel.insertAdjacentHTML(\n+\t\t\t\t\t\t'afterend',\n+\t\t\t\t\t\t`\u003Cbutton type=\"button\"\n+\t\t\t\t\t\tstyle=\"padding: 5px 10px; justify-content: center;\"\n+\t\t\t\t\t\tclass=\"lp-btn-generate-with-ai\"\n+\t\t\t\t\t\tdata-template=\"#lp-tmpl-edit-image-ai\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-ico-ai\">\u003C\u002Fi>\u003Cspan>${ lpData.i18n.generate_with_ai }\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>`\n+\t\t\t\t\t);\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t}\n+\n+\t\tthis.events();\n+\t}\n+\n+\tgetTitleInputSelector() {\n+\t\treturn this.options.isCourseBuilder\n+\t\t\t? this.options.courseBuilderTitleInputSelector\n+\t\t\t: this.options.titleInputSelector;\n+\t}\n+\n+\tgetEditorId() {\n+\t\treturn this.options.isCourseBuilder\n+\t\t\t? this.options.editorIdCourseBuilder\n+\t\t\t: this.options.editorIdClassic;\n+\t}\n+\n+\tsetCourseBuilderPostId( form ) {\n+\t\tif ( ! this.options.isCourseBuilder || ! form ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst postIdInput = form.querySelector( '[name=\"post-id\"]' );\n+\t\tif ( ! postIdInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst courseEditWrap = document.querySelector( '.cb-section__course-edit[data-course-id]' );\n+\t\tconst courseId = courseEditWrap?.dataset?.courseId || '';\n+\t\tif ( courseId ) {\n+\t\t\tpostIdInput.value = courseId;\n+\t\t}\n+\t}\n+\n+\textractImageSourceFromHtml( html ) {\n+\t\tif ( ! html ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tconst tempWrapper = document.createElement( 'div' );\n+\t\ttempWrapper.innerHTML = html;\n+\t\treturn tempWrapper.querySelector( 'img' )?.getAttribute( 'src' ) || '';\n+\t}\n+\n+\tapplyCourseBuilderFeaturedImage( attachmentId, imageSrc ) {\n+\t\tif ( ! attachmentId || ! imageSrc ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tdocument.dispatchEvent(\n+\t\t\tnew CustomEvent( 'lp-course-builder\u002Fai-featured-image-applied', {\n+\t\t\t\tdetail: {\n+\t\t\t\t\tattachmentId,\n+\t\t\t\t\timageSrc,\n+\t\t\t\t},\n+\t\t\t} )\n+\t\t);\n+\n+\t\treturn true;\n+\t}\n+\n+\tevents() {\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: GenerateWithOpenai.selectors.elBtnGenerateWithAi,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.showPopup.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-step',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.showStep.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-generate-prompt',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.generatePrompt.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-call-open-ai',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.generateData.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-copy',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.copyGeneratedData.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-apply',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.applyGeneratedData.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-ai-apply-image',\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.applyImageData.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.lp-btn-close-ai-popup',\n+\t\t\t\t\u002F\u002Fclass: this,\n+\t\t\t\tcallBack: ( args ) => {\n+\t\t\t\t\tconst { e, target } = args;\n+\n+\t\t\t\t\tconst message = lpData.i18n.confirm_close_ai;\n+\n+\t\t\t\t\tif ( ! lp_is_generating_course_data ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t} else if ( confirm( message ) ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Testing custom confirm box\n+\t\t\t\t\t\u002F*if ( confirm( message ) ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t}*\u002F\n+\t\t\t\t},\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\tshowPopup( args ) {\n+\t\tconst { e, target } = args;\n+\t\tconst templateId =\n+\t\t\ttarget.dataset.template ||\n+\t\t\ttarget.closest( '.lp-btn-generate-with-ai' ).dataset.template ||\n+\t\t\ttarget.closest( '.lp-generate-data-ai-wrap' ).dataset.template ||\n+\t\t\t'';\n+\n+\t\tconst modalTemplate = document.querySelector( templateId );\n+\n+\t\tif ( ! modalTemplate ) {\n+\t\t\tconsole.error( `Template ${ templateId } not found!` );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tSweetAlert.fire( {\n+\t\t\thtml: modalTemplate.innerHTML,\n+\t\t\twidth: '60%',\n+\t\t\tshowCloseButton: false,\n+\t\t\tshowConfirmButton: false,\n+\t\t\tallowOutsideClick: false,\n+\t\t\tallowEscapeKey: false,\n+\t\t\tdidOpen: () => {\n+\t\t\t\tpopupSweetAlert = SweetAlert.getPopup();\n+\t\t\t\t\u002F\u002F Click to show tomSelect style\n+\t\t\t\tpopupSweetAlert.click();\n+\n+\t\t\t\t\u002F\u002F Set post title and post content to hidden fields of form to AI prompt reference\n+\t\t\t\tconst elPostTitleInput = document.querySelector( this.getTitleInputSelector() );\n+\t\t\t\tlet post_title = '';\n+\t\t\t\tif ( elPostTitleInput ) {\n+\t\t\t\t\tpost_title = elPostTitleInput.value;\n+\t\t\t\t} else if ( isLayoutGutenberg ) {\n+\t\t\t\t\tconst elGutenbergTitle = document.querySelector( '.editor-post-card-panel__title-name' );\n+\t\t\t\t\tif ( elGutenbergTitle ) {\n+\t\t\t\t\t\tpost_title = elGutenbergTitle.textContent;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tlet post_content = '';\n+\t\t\t\tif ( ! isLayoutGutenberg ) {\n+\t\t\t\t\tconst editorId = this.getEditorId();\n+\t\t\t\t\tif ( ! window.tinymce || ! window.tinymce.get( editorId ) ) {\n+\t\t\t\t\t\tconst editorElement = document.querySelector( `#${ editorId }` );\n+\t\t\t\t\t\tpost_content = editorElement ? editorElement.value : '';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tpost_content = window.tinymce.get( editorId ).getContent( { format: 'text' } );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tconst content = editorGutenberg.getEditedPostContent();\n+\t\t\t\t\tpost_content = content.replace( \u002F(\u003C([^>]+)>)\u002Fgi, '' ); \u002F\u002F Remove HTML tags\n+\t\t\t\t}\n+\n+\t\t\t\tconst form = popupSweetAlert.querySelector( 'form' );\n+\t\t\t\tthis.setCourseBuilderPostId( form );\n+\t\t\t\tconst elPostTitle = form.querySelector( '[name=post-title]' );\n+\t\t\t\tif ( elPostTitle ) {\n+\t\t\t\t\telPostTitle.value = post_title;\n+\n+\t\t\t\t\tif ( ! post_title ) {\n+\t\t\t\t\t\tconst elGroup = elPostTitle.closest( '.form-group' );\n+\t\t\t\t\t\tconst elReferWarning = elGroup.querySelector( '.lp-ai-warning-refer' );\n+\t\t\t\t\t\tif ( elReferWarning ) {\n+\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elReferWarning, 1 );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tconst elPostContent = form.querySelector( '[name=post-content]' );\n+\t\t\t\tif ( elPostContent ) {\n+\t\t\t\t\telPostContent.value = post_content;\n+\n+\t\t\t\t\tif ( post_content.length \u003C 2 ) {\n+\t\t\t\t\t\tconst elGroup = elPostContent.closest( '.form-group' );\n+\t\t\t\t\t\tconst elReferWarning = elGroup.querySelector( '.lp-ai-warning-refer' );\n+\t\t\t\t\t\tif ( elReferWarning ) {\n+\t\t\t\t\t\t\tlpUtils.lpShowHideEl( elReferWarning, 1 );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tconst targetAudience = popupSweetAlert.querySelector( 'select[name=\"target_audience\"]' );\n+\t\t\t\tif ( targetAudience ) {\n+\t\t\t\t\tif ( lp_course_ai_setting?.target_audience ) {\n+\t\t\t\t\t\ttargetAudience.tomselect.setValue( lp_course_ai_setting.target_audience );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\ttargetAudience.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\t\tlp_course_ai_setting.target_audience = targetAudience.tomselect.getValue();\n+\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\n+\t\t\t\tconst tone = popupSweetAlert.querySelector( 'select[name=\"tone\"]' );\n+\t\t\t\tif ( tone ) {\n+\t\t\t\t\tif ( lp_course_ai_setting?.tone ) {\n+\t\t\t\t\t\ttone.tomselect.setValue( lp_course_ai_setting.tone );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\ttone.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\t\tlp_course_ai_setting.tone = tone.tomselect.getValue();\n+\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\n+\t\t\t\tconst language = popupSweetAlert.querySelector( 'select[name=\"language\"]' );\n+\t\t\t\tif ( language ) {\n+\t\t\t\t\tif ( lp_course_ai_setting?.language ) {\n+\t\t\t\t\t\tlanguage.tomselect.setValue( lp_course_ai_setting.language );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tlanguage.addEventListener( 'change', ( event ) => {\n+\t\t\t\t\t\tconst value = language.tomselect.getValue();\n+\t\t\t\t\t\tlp_course_ai_setting.language = value ? [ value ] : [];\n+\t\t\t\t\t\tlocalStorage.setItem( 'lp_course_ai_setting', JSON.stringify( lp_course_ai_setting ) );\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isDismissed ) {\n+\t\t\t\tif ( lp_is_generating_course_data ) {\n+\t\t\t\t\tlp_is_generating_course_data = false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\tshowStep( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst elBtnActions = target.closest( '.button-actions' );\n+\t\tconst elCreateCourseAIWrap = elBtnActions.closest(\n+\t\t\tGenerateWithOpenai.selectors.elGenerateDataAiWrap\n+\t\t);\n+\t\tlet step = parseInt( elBtnActions.dataset.step );\n+\n+\t\tconst stepAction = target.dataset.action;\n+\t\tif ( stepAction === 'next' ) {\n+\t\t\tstep++;\n+\t\t} else if ( stepAction === 'prev' ) {\n+\t\t\tstep--;\n+\t\t}\n+\n+\t\telBtnActions.dataset.step = step;\n+\t\tconst elForm = target.closest( 'form' );\n+\t\tconst elContentStep = elForm.querySelector( `.step-content[data-step=\"${ step }\"]` );\n+\t\tconst elItemStep = elCreateCourseAIWrap.querySelector( `.step-item[data-step=\"${ step }\"]` );\n+\t\telForm.querySelectorAll( '.step-content' ).forEach( ( el ) => el.classList.remove( 'active' ) );\n+\t\telContentStep.classList.add( 'active' );\n+\t\telCreateCourseAIWrap\n+\t\t\t.querySelectorAll( '.step-item' )\n+\t\t\t.forEach( ( el ) => el.classList.remove( 'active' ) );\n+\t\telItemStep.classList.add( 'active' );\n+\n+\t\t\u002F\u002F Get all buttons step to show\u002Fhide\n+\t\tconst form = target.closest( 'form' );\n+\t\tconst elBtnSteps = form.querySelectorAll( 'button[data-step-show]' );\n+\t\telBtnSteps.forEach( ( el ) => {\n+\t\t\tconst stepsShow = el.dataset.stepShow.split( ',' ).map( ( s ) => parseInt( s.trim() ) );\n+\t\t\tif ( stepsShow.includes( step ) ) {\n+\t\t\t\tlpUtils.lpShowHideEl( el, 1 );\n+\t\t\t} else {\n+\t\t\t\tlpUtils.lpShowHideEl( el, 0 );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t\u002F**\n+\t * Create prompt from data config\n+\t * @param args\n+\t *\u002F\n+\tgeneratePrompt( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Get dataSend\n+\t\tconst form = target.closest( 'form' );\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tconst elPromptTextarea = form.querySelector(\n+\t\t\t\t\t\t'textarea[name=lp-openai-prompt-generated-field]'\n+\t\t\t\t\t);\n+\t\t\t\t\telPromptTextarea.value = data;\n+\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\n+\t\t\t\t\telBtnNext.click();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\t\u002F**\n+\t * Submit prompt to OpenAI to generate course data\n+\t * @param args\n+\t *\u002F\n+\tgenerateData( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Get dataSend\n+\t\tconst form = target.closest( 'form' );\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( form, dataSend );\n+\n+\t\tconst btnPrev = form.querySelector( '.lp-btn-step[data-action=prev]' );\n+\t\tlpUtils.lpShowHideEl( btnPrev, 0 );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\t\t\t\tif ( lp_is_generating_course_data ) {\n+\t\t\t\t\tlpToastify.show( message, status );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\t\u002F\u002F Save structure data\n+\t\t\t\t\tlp_structure_course = data.lp_structure_course;\n+\n+\t\t\t\t\t\u002F\u002F Set preview HTML\n+\t\t\t\t\tconst elResults = form.querySelector( '.lp-ai-generated-results' );\n+\t\t\t\t\telResults.innerHTML = data.lp_html_preview;\n+\n+\t\t\t\t\tconst elBtnNext = form.querySelector( '.lp-btn-step[data-action=next]' );\n+\t\t\t\t\telBtnNext.click();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t\tlpUtils.lpShowHideEl( btnPrev, 1 );\n+\t\t\t\tlp_is_generating_course_data = false;\n+\t\t\t},\n+\t\t};\n+\n+\t\tlp_is_generating_course_data = true;\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+\n+\tapplyGeneratedData( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst dataApply = target.dataset.apply;\n+\t\tconst dataTarget = target.dataset.target;\n+\n+\t\tif ( dataTarget ) {\n+\t\t\tif ( ! isLayoutGutenberg ) {\n+\t\t\t\tif ( dataTarget === 'set-wp-editor-content' ) {\n+\t\t\t\t\tthis.setWPEditorContent( dataApply );\n+\t\t\t\t} else if ( dataTarget === 'set-wp-title' ) {\n+\t\t\t\t\tconst elTitleInput = document.querySelector( this.getTitleInputSelector() );\n+\t\t\t\t\tif ( elTitleInput ) {\n+\t\t\t\t\t\telTitleInput.value = dataApply;\n+\t\t\t\t\t\telTitleInput.dispatchEvent( new Event( 'input', { bubbles: true } ) );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else if ( dataTarget === 'set-wp-editor-content' ) {\n+\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { content: dataApply } );\n+\t\t\t} else if ( dataTarget === 'set-wp-title' ) {\n+\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { title: dataApply } );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( popupSweetAlert ) {\n+\t\t\tSweetAlert.close();\n+\t\t}\n+\t}\n+\n+\tcopyGeneratedData( args ) {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\n+\t\tconst dataCopy = target.dataset.copy;\n+\n+\t\tif ( navigator.clipboard ) {\n+\t\t\tnavigator.clipboard\n+\t\t\t\t.writeText( dataCopy )\n+\t\t\t\t.then( () => {\n+\t\t\t\t\tlpToastify.show( 'Copied to clipboard!', 'success' );\n+\t\t\t\t} )\n+\t\t\t\t.catch( ( err ) => {\n+\t\t\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\n+\t\t\t\t} );\n+\t\t} else {\n+\t\t\t\u002F\u002F Fallback when clipboard API is unavailable\n+\t\t\tconst textarea = document.createElement( 'textarea' );\n+\t\t\ttextarea.value = dataCopy;\n+\t\t\ttextarea.style.position = 'fixed';\n+\t\t\ttextarea.style.left = '-9999px';\n+\t\t\tdocument.body.appendChild( textarea );\n+\t\t\ttextarea.select();\n+\t\t\ttry {\n+\t\t\t\tconst successful = document.execCommand( 'copy' );\n+\t\t\t\tlpToastify.show(\n+\t\t\t\t\tsuccessful ? 'Copied to clipboard!' : 'Failed to copy text',\n+\t\t\t\t\tsuccessful ? 'success' : 'error'\n+\t\t\t\t);\n+\t\t\t} catch ( err ) {\n+\t\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\n+\t\t\t}\n+\t\t\tdocument.body.removeChild( textarea );\n+\t\t}\n+\n+\t\t\u002F*navigator.clipboard.writeText( dataCopy ).then( () => {\n+\t\t\tlpToastify.show( 'Copied to clipboard!', 'success' );\n+\t\t} ).catch( ( err ) => {\n+\t\t\tlpToastify.show( 'Failed to copy text: ' + err, 'error' );\n+\t\t} );*\u002F\n+\t}\n+\n+\tsetWPEditorContent( htmlContent ) {\n+\t\tconst editorId = this.getEditorId();\n+\t\tconst editor = window.tinymce?.get( editorId );\n+\n+\t\tif ( editor ) {\n+\t\t\teditor.setContent( htmlContent );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst editorElement = document.querySelector( `#${ editorId }` );\n+\t\tif ( editorElement ) {\n+\t\t\teditorElement.value = htmlContent;\n+\t\t\teditorElement.dispatchEvent( new Event( 'input', { bubbles: true } ) );\n+\t\t}\n+\t}\n+\n+\tapplyImageData( args ) {\n+\t\tconst { e, target } = args;\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\t\tdataSend = lpUtils.mergeDataWithDatForm( target.closest( 'form' ), dataSend );\n+\t\t\u002F\u002Fe.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\n+\t\t\u002F\u002F Ajax to generate prompt\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tlpToastify.show( message, status );\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tif ( this.options.isCourseBuilder ) {\n+\t\t\t\t\t\tconst attachmentId = parseInt( data?.attachment_id || 0, 10 );\n+\t\t\t\t\t\tconst imageSrc = this.extractImageSourceFromHtml( data?.html_image || '' );\n+\t\t\t\t\t\tconst applied = this.applyCourseBuilderFeaturedImage( attachmentId, imageSrc );\n+\n+\t\t\t\t\t\tif ( ! applied ) {\n+\t\t\t\t\t\t\tlpToastify.show( 'Failed to apply image to course featured image.', 'error' );\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else if ( ! isLayoutGutenberg ) {\n+\t\t\t\t\t\t\u002F\u002F Set image\n+\t\t\t\t\t\tconst elImagePreview = document.querySelector( '#postimagediv .inside' );\n+\t\t\t\t\t\telImagePreview.outerHTML = data.html_image;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tdispatchGutenberg( 'core\u002Feditor' ).editPost( { featured_media: data.attachment_id } );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( popupSweetAlert ) {\n+\t\t\t\t\t\tSweetAlert.close();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Finit-tom-select.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,273 +1,292 @@\n-import { AdminUtilsFunctions, Api, Utils } from '.\u002Futils-admin.js';\r\n-\r\n-\u002F**\r\n- * Handle data response from API for tom-select\r\n- *\r\n- * @param {*} response\r\n- * @param {*} tomSelectEl\r\n- * @param     dataStruct\r\n- * @param     fetchAPI\r\n- * @param     customOptions\r\n- * @param {*} callBack\r\n- *\u002F\r\n-const handleResponse = ( response, tomSelectEl, dataStruct, fetchAPI, customOptions = {}, callBack ) => {\r\n-\tif ( ! response || ! tomSelectEl || ! dataStruct || ! fetchAPI || ! callBack ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F\u002FFunction format render data\r\n-\tconst getTextOption = ( data ) => {\r\n-\t\tif ( ! dataStruct.keyGetValue?.text || ! dataStruct.keyGetValue.key_render ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlet text = dataStruct.keyGetValue.text;\r\n-\t\tfor ( const [ key, value ] of Object.entries( dataStruct.keyGetValue.key_render ) ) {\r\n-\t\t\ttext = text.replace( new RegExp( `{{${ value }}}`, 'g' ), data[ value ] );\r\n-\t\t}\r\n-\t\treturn text;\r\n-\t};\r\n-\r\n-\t\u002F\u002F Get default item tom-select\r\n-\tconst defaultIds = tomSelectEl.dataset?.saved ? JSON.parse( tomSelectEl.dataset.saved ) : 0;\r\n-\tlet options = [];\r\n-\r\n-\t\u002F\u002F Format response data set option tom-select\r\n-\tif ( response.data[ dataStruct.dataType ].length > 0 ) {\r\n-\t\toptions = response.data[ dataStruct.dataType ].map( ( item ) => ( {\r\n-\t\t\tvalue: item[ dataStruct.keyGetValue.value ],\r\n-\t\t\ttext: getTextOption( item ),\r\n-\t\t} ) );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Setting option tom-select\r\n-\tconst settingOption = {\r\n-\t\titems: defaultIds,\r\n-\t\trender: {\r\n-\t\t\titem( data, escape ) {\r\n-\t\t\t\treturn `` +\r\n-\t\t\t\t\t`\u003Cli data-id=\"${ data.value }\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"item\">${ data.text }\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fli>`;\r\n-\t\t\t},\r\n-\t\t},\r\n-\t\tonChange: ( data ) => {\r\n-\t\t\tif ( data.length \u003C 1 ) {\r\n-\t\t\t\ttomSelectEl.value = '';\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t...customOptions,\r\n-\t\toptions,\r\n-\t};\r\n-\r\n-\tif ( null != tomSelectEl.tomSelectInstance ) {\r\n-\t\ttomSelectEl.tomSelectInstance.addOptions( options );\r\n-\t\treturn options;\r\n-\t}\r\n-\r\n-\ttomSelectEl.tomSelectInstance = AdminUtilsFunctions.buildTomSelect(\r\n-\t\ttomSelectEl,\r\n-\t\tsettingOption,\r\n-\t\tfetchAPI,\r\n-\t\t{},\r\n-\t\tcallBack\r\n-\t);\r\n-\r\n-\treturn options;\r\n-};\r\n-\r\n-\u002F\u002FInit Tom-select with available options\r\n-const initTomSelectWithOption = ( tomSelectEl, settingTomSelect = {} ) => {\r\n-\tif ( ! tomSelectEl ) {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\tif ( null != tomSelectEl.tomSelectInstance ) {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\ttomSelectEl.tomSelectInstance = AdminUtilsFunctions.buildTomSelect( tomSelectEl, settingTomSelect );\r\n-};\r\n-\r\n-\u002F\u002F Init Tom-select\r\n-const initTomSelect = ( tomSelectEl, customOptions = {}, customParams = {} ) => {\r\n-\tif ( ! tomSelectEl ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( tomSelectEl.classList.contains( 'loaded' ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\ttomSelectEl.classList.add( 'loaded' );\r\n-\r\n-\tconst defaultIds = tomSelectEl.dataset?.saved ? JSON.parse( tomSelectEl.dataset.saved ) : 0;\r\n-\tconst dataStruct = tomSelectEl?.dataset?.struct ? JSON.parse( tomSelectEl.dataset.struct ) : '';\r\n-\r\n-\tif ( ! dataStruct ) {\r\n-\t\tinitTomSelectWithOption( tomSelectEl );\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst getParentElByTagName = ( tag, el ) => {\r\n-\t\tconst newEl = el.parentElement;\r\n-\r\n-\t\tif ( newEl.tagName.toLowerCase() === tag ) {\r\n-\t\t\treturn newEl;\r\n-\t\t}\r\n-\r\n-\t\tif ( newEl.tagName.toLowerCase() === 'html' ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn getParentElByTagName( tag, newEl );\r\n-\t};\r\n-\r\n-\tconst formParent = getParentElByTagName( 'form', tomSelectEl );\r\n-\r\n-\tif ( formParent ) {\r\n-\t\tconst elInput = formParent.querySelector( 'input[name=\"' + tomSelectEl.getAttribute( 'name' ) + '\"]' );\r\n-\t\tif ( elInput ) {\r\n-\t\t\telInput.remove();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tconst dataSendApi = dataStruct.dataSendApi ?? '';\r\n-\tconst urlApi = dataStruct.urlApi ?? '';\r\n-\r\n-\tconst settingTomSelect = {\r\n-\t\t...dataStruct.setting,\r\n-\t\t...customOptions,\r\n-\t};\r\n-\r\n-\tif ( ! urlApi ) {\r\n-\t\tinitTomSelectWithOption( tomSelectEl, settingTomSelect );\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst fetchFunction = ( keySearch = '', customParams, callback ) => {\r\n-\t\tconst url = urlApi;\r\n-\t\tconst dataSend = { current_ids: defaultIds, ...dataSendApi, ...customParams };\r\n-\t\tdataSend.search = keySearch;\r\n-\t\tconst params = {\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t\t},\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( dataSend ),\r\n-\t\t};\r\n-\t\tUtils.lpFetchAPI( url, params, callback );\r\n-\t};\r\n-\r\n-\tconst callBackApi = {\r\n-\t\tsuccess: ( response ) => {\r\n-\t\t\thandleResponse( response, tomSelectEl, dataStruct, fetchFunction, settingTomSelect, callBackApi );\r\n-\t\t},\r\n-\t};\r\n-\r\n-\t\u002F\u002F Fetch data for first load tom-select\r\n-\t\u002F\u002F Get ids selected, and show list without ids selected with limit.\r\n-\tlet idNotIn = [];\r\n-\tif ( typeof defaultIds === 'object' ) {\r\n-\t\tidNotIn = Object.entries( defaultIds ).map( ( [ key, value ] ) => ( { key, value } ) );\r\n-\t}\r\n-\r\n-\tif ( dataSendApi?.id_not_in ) {\r\n-\t\tidNotIn = [ ...idNotIn, ...dataSendApi.id_not_in ];\r\n-\t}\r\n-\r\n-\tcustomParams.id_not_in = idNotIn.join( ',' );\r\n-\r\n-\tfetchFunction( '', customParams, callBackApi );\r\n-};\r\n-\r\n-\u002F\u002F Init Tom-select user in admin\r\n-const searchUserOnListPost = () => {\r\n-\tif ( lpDataAdmin.show_search_author_field === '0' ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst elPostFilter = document.querySelector( '#posts-filter' );\r\n-\tif ( ! elPostFilter ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tlet elSearchPost = elPostFilter.querySelector( '.search-box' );\r\n-\tif ( ! elSearchPost ) {\r\n-\t\telPostFilter.insertAdjacentHTML( 'afterbegin', lpDataAdmin.show_search_author_field );\r\n-\t\telSearchPost = elPostFilter.querySelector( '.search-box' );\r\n-\t}\r\n-\r\n-\tif ( ! elSearchPost ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst selectNew = elSearchPost.querySelector( 'select#author' );\r\n-\tif ( selectNew ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst createSelectUserHtml = () => {\r\n-\t\tlet defaultId = '';\r\n-\t\tconst authorIdFilter = lpDataAdmin.urlParams.author;\r\n-\t\tif ( authorIdFilter ) {\r\n-\t\t\tdefaultId = JSON.stringify( authorIdFilter );\r\n-\t\t}\r\n-\t\tconst dataStruct = {\r\n-\t\t\turlApi: Api.admin.apiSearchUsers,\r\n-\t\t\tdataType: 'users',\r\n-\t\t\tkeyGetValue: {\r\n-\t\t\t\tvalue: 'ID',\r\n-\t\t\t\ttext: '{{display_name}}(#{{ID}}) - {{user_email}}',\r\n-\t\t\t\tkey_render: {\r\n-\t\t\t\t\tdisplay_name: 'display_name',\r\n-\t\t\t\t\tuser_email: 'user_email',\r\n-\t\t\t\t\tID: 'ID',\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t\tsetting: {\r\n-\t\t\t\tplaceholder: 'Choose user',\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst dataStructJson = JSON.stringify( dataStruct );\r\n-\r\n-\t\tconst htmlSelectUser = `` +\r\n-\t\t\t`\u003Cselect data-struct='${ dataStructJson }' style='display:none;' data-saved='${ defaultId }'\r\n-\t\t\t\t\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">` +\r\n-\t\t\t`\u003C\u002Fselect>`;\r\n-\r\n-\t\tconst elInputSearch = elSearchPost.querySelector( 'input[name=\"s\"]' );\r\n-\t\tif ( elInputSearch ) {\r\n-\t\t\telInputSearch.insertAdjacentHTML( 'afterend', htmlSelectUser );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Remove input hide default of WP.\r\n-\t\tconst elInputAuthor = elPostFilter.querySelector( 'input[name=\"author\"]' );\r\n-\t\tif ( elInputAuthor ) {\r\n-\t\t\telInputAuthor.remove();\r\n-\t\t}\r\n-\t};\r\n-\tcreateSelectUserHtml();\r\n-};\r\n-\r\n-const initElsTomSelect = () => {\r\n-\tconst tomSelectEls = document.querySelectorAll( 'select.lp-tom-select:not(.loaded)' );\r\n-\r\n-\tif ( tomSelectEls.length ) {\r\n-\t\ttomSelectEls.forEach( ( tomSelectEl ) => {\r\n-\t\t\t\u002F\u002F Not build elements tom-select in Widget left classic of WordPress.\r\n-\t\t\tif ( tomSelectEl.closest( '.widget-liquid-left' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tinitTomSelect( tomSelectEl );\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-export {\r\n-\tinitTomSelect,\r\n-\tsearchUserOnListPost,\r\n-\tinitElsTomSelect,\r\n-};\r\n+import { AdminUtilsFunctions, Api, Utils } from '.\u002Futils-admin.js';\n+\n+\u002F**\n+ * Handle data response from API for tom-select\n+ *\n+ * @param {*} response\n+ * @param {*} tomSelectEl\n+ * @param     dataStruct\n+ * @param     fetchAPI\n+ * @param     customOptions\n+ * @param {*} callBack\n+ *\u002F\n+const handleResponse = (\n+\tresponse,\n+\ttomSelectEl,\n+\tdataStruct,\n+\tfetchAPI,\n+\tcustomOptions = {},\n+\tcallBack\n+) => {\n+\tif ( ! response || ! tomSelectEl || ! dataStruct || ! fetchAPI || ! callBack ) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F\u002FFunction format render data\n+\tconst getTextOption = ( data ) => {\n+\t\tif ( ! dataStruct.keyGetValue?.text || ! dataStruct.keyGetValue.key_render ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlet text = dataStruct.keyGetValue.text;\n+\t\tfor ( const [ key, value ] of Object.entries( dataStruct.keyGetValue.key_render ) ) {\n+\t\t\ttext = text.replace( new RegExp( `{{${ value }}}`, 'g' ), data[ value ] );\n+\t\t}\n+\t\treturn text;\n+\t};\n+\n+\t\u002F\u002F Get default item tom-select\n+\tconst defaultIds = tomSelectEl.dataset?.saved ? JSON.parse( tomSelectEl.dataset.saved ) : 0;\n+\tlet options = [];\n+\n+\t\u002F\u002F Format response data set option tom-select\n+\tif ( response.data[ dataStruct.dataType ].length > 0 ) {\n+\t\toptions = response.data[ dataStruct.dataType ].map( ( item ) => ( {\n+\t\t\tvalue: item[ dataStruct.keyGetValue.value ],\n+\t\t\ttext: getTextOption( item ),\n+\t\t} ) );\n+\t}\n+\n+\t\u002F\u002F Setting option tom-select\n+\tconst settingOption = {\n+\t\titems: defaultIds,\n+\t\trender: {\n+\t\t\titem( data, escape ) {\n+\t\t\t\treturn (\n+\t\t\t\t\t`` +\n+\t\t\t\t\t`\u003Cli data-id=\"${ data.value }\">\n+\t\t\t\t\t\t\u003Cdiv class=\"item\">${ data.text }\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fli>`\n+\t\t\t\t);\n+\t\t\t},\n+\t\t},\n+\t\tonChange: ( data ) => {\n+\t\t\tif ( data.length \u003C 1 ) {\n+\t\t\t\ttomSelectEl.value = '';\n+\t\t\t}\n+\t\t},\n+\t\t...customOptions,\n+\t\toptions,\n+\t};\n+\n+\tif ( null != tomSelectEl.tomSelectInstance ) {\n+\t\ttomSelectEl.tomSelectInstance.addOptions( options );\n+\t\treturn options;\n+\t}\n+\n+\ttomSelectEl.tomSelectInstance = AdminUtilsFunctions.buildTomSelect(\n+\t\ttomSelectEl,\n+\t\tsettingOption,\n+\t\tfetchAPI,\n+\t\t{},\n+\t\tcallBack\n+\t);\n+\n+\treturn options;\n+};\n+\n+\u002F\u002FInit Tom-select with available options\n+const initTomSelectWithOption = ( tomSelectEl, settingTomSelect = {} ) => {\n+\tif ( ! tomSelectEl ) {\n+\t\treturn null;\n+\t}\n+\n+\tif ( null != tomSelectEl.tomSelectInstance ) {\n+\t\treturn null;\n+\t}\n+\n+\ttomSelectEl.tomSelectInstance = AdminUtilsFunctions.buildTomSelect(\n+\t\ttomSelectEl,\n+\t\tsettingTomSelect\n+\t);\n+};\n+\n+\u002F\u002F Init Tom-select\n+const initTomSelect = ( tomSelectEl, customOptions = {}, customParams = {} ) => {\n+\tif ( ! tomSelectEl ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( tomSelectEl.classList.contains( 'loaded' ) ) {\n+\t\treturn;\n+\t}\n+\n+\ttomSelectEl.classList.add( 'loaded' );\n+\n+\tconst defaultIds = tomSelectEl.dataset?.saved ? JSON.parse( tomSelectEl.dataset.saved ) : 0;\n+\tconst dataStruct = tomSelectEl?.dataset?.struct ? JSON.parse( tomSelectEl.dataset.struct ) : '';\n+\n+\tif ( ! dataStruct ) {\n+\t\tinitTomSelectWithOption( tomSelectEl );\n+\t\treturn;\n+\t}\n+\n+\tconst getParentElByTagName = ( tag, el ) => {\n+\t\tconst newEl = el.parentElement;\n+\n+\t\tif ( newEl.tagName.toLowerCase() === tag ) {\n+\t\t\treturn newEl;\n+\t\t}\n+\n+\t\tif ( newEl.tagName.toLowerCase() === 'html' ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn getParentElByTagName( tag, newEl );\n+\t};\n+\n+\tconst formParent = getParentElByTagName( 'form', tomSelectEl );\n+\n+\tif ( formParent ) {\n+\t\tconst elInput = formParent.querySelector(\n+\t\t\t'input[name=\"' + tomSelectEl.getAttribute( 'name' ) + '\"]'\n+\t\t);\n+\t\tif ( elInput ) {\n+\t\t\telInput.remove();\n+\t\t}\n+\t}\n+\n+\tconst dataSendApi = dataStruct.dataSendApi ?? '';\n+\tconst urlApi = dataStruct.urlApi ?? '';\n+\n+\tconst settingTomSelect = {\n+\t\t...dataStruct.setting,\n+\t\t...customOptions,\n+\t};\n+\n+\tif ( ! urlApi ) {\n+\t\tinitTomSelectWithOption( tomSelectEl, settingTomSelect );\n+\t\treturn;\n+\t}\n+\n+\tconst fetchFunction = ( keySearch = '', customParams, callback ) => {\n+\t\tconst url = urlApi;\n+\t\tconst dataSend = { current_ids: defaultIds, ...dataSendApi, ...customParams };\n+\t\tdataSend.search = keySearch;\n+\t\tconst params = {\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t},\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( dataSend ),\n+\t\t};\n+\t\tUtils.lpFetchAPI( url, params, callback );\n+\t};\n+\n+\tconst callBackApi = {\n+\t\tsuccess: ( response ) => {\n+\t\t\thandleResponse(\n+\t\t\t\tresponse,\n+\t\t\t\ttomSelectEl,\n+\t\t\t\tdataStruct,\n+\t\t\t\tfetchFunction,\n+\t\t\t\tsettingTomSelect,\n+\t\t\t\tcallBackApi\n+\t\t\t);\n+\t\t},\n+\t};\n+\n+\t\u002F\u002F Fetch data for first load tom-select\n+\t\u002F\u002F Get ids selected, and show list without ids selected with limit.\n+\tlet idNotIn = [];\n+\tif ( typeof defaultIds === 'object' ) {\n+\t\tidNotIn = Object.entries( defaultIds ).map( ( [ key, value ] ) => ( { key, value } ) );\n+\t}\n+\n+\tif ( dataSendApi?.id_not_in ) {\n+\t\tidNotIn = [ ...idNotIn, ...dataSendApi.id_not_in ];\n+\t}\n+\n+\tcustomParams.id_not_in = idNotIn.join( ',' );\n+\n+\tfetchFunction( '', customParams, callBackApi );\n+};\n+\n+\u002F\u002F Init Tom-select user in admin\n+const searchUserOnListPost = () => {\n+\tif ( lpData.show_search_author_field === '0' ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elPostFilter = document.querySelector( '#posts-filter' );\n+\tif ( ! elPostFilter ) {\n+\t\treturn;\n+\t}\n+\n+\tlet elSearchPost = elPostFilter.querySelector( '.search-box' );\n+\tif ( ! elSearchPost ) {\n+\t\telPostFilter.insertAdjacentHTML( 'afterbegin', lpData.show_search_author_field );\n+\t\telSearchPost = elPostFilter.querySelector( '.search-box' );\n+\t}\n+\n+\tif ( ! elSearchPost ) {\n+\t\treturn;\n+\t}\n+\n+\tconst selectNew = elSearchPost.querySelector( 'select#author' );\n+\tif ( selectNew ) {\n+\t\treturn;\n+\t}\n+\n+\tconst createSelectUserHtml = () => {\n+\t\tlet defaultId = '';\n+\t\tconst authorIdFilter = lpData.urlParams.author;\n+\t\tif ( authorIdFilter ) {\n+\t\t\tdefaultId = JSON.stringify( authorIdFilter );\n+\t\t}\n+\n+\t\tconst dataStruct = {\n+\t\t\turlApi: Api.admin.apiSearchUsers,\n+\t\t\tdataType: 'users',\n+\t\t\tkeyGetValue: {\n+\t\t\t\tvalue: 'ID',\n+\t\t\t\ttext: '{{display_name}}(#{{ID}}) - {{user_email}}',\n+\t\t\t\tkey_render: {\n+\t\t\t\t\tdisplay_name: 'display_name',\n+\t\t\t\t\tuser_email: 'user_email',\n+\t\t\t\t\tID: 'ID',\n+\t\t\t\t},\n+\t\t\t},\n+\t\t\tsetting: {\n+\t\t\t\tplaceholder: 'Choose user',\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst dataStructJson = JSON.stringify( dataStruct );\n+\n+\t\tconst htmlSelectUser =\n+\t\t\t`` +\n+\t\t\t`\u003Cselect data-struct='${ dataStructJson }' style='display:none;' data-saved='${ defaultId }'\n+\t\t\t\t\tid=\"author\" name=\"author\" class=\"select lp-tom-select\">` +\n+\t\t\t`\u003C\u002Fselect>`;\n+\n+\t\tconst elInputSearch = elSearchPost.querySelector( 'input[name=\"s\"]' );\n+\t\tif ( elInputSearch ) {\n+\t\t\telInputSearch.insertAdjacentHTML( 'afterend', htmlSelectUser );\n+\t\t}\n+\n+\t\t\u002F\u002F Remove input hide default of WP.\n+\t\tconst elInputAuthor = elPostFilter.querySelector( 'input[name=\"author\"]' );\n+\t\tif ( elInputAuthor ) {\n+\t\t\telInputAuthor.remove();\n+\t\t}\n+\t};\n+\tcreateSelectUserHtml();\n+};\n+\n+const initElsTomSelect = () => {\n+\tconst tomSelectEls = document.querySelectorAll( 'select.lp-tom-select:not(.loaded)' );\n+\n+\tif ( tomSelectEls.length ) {\n+\t\ttomSelectEls.forEach( ( tomSelectEl ) => {\n+\t\t\t\u002F\u002F Not build elements tom-select in Widget left classic of WordPress.\n+\t\t\tif ( tomSelectEl.closest( '.widget-liquid-left' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tinitTomSelect( tomSelectEl );\n+\t\t} );\n+\t}\n+};\n+\n+export { initTomSelect, searchUserOnListPost, initElsTomSelect };\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flearnpress.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flearnpress.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flearnpress.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flearnpress.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,887 +1,887 @@\n-import { lpAjaxParseJsonOld } from '..\u002Futils';\r\n-const $ = jQuery;\r\n-const $doc = $( document );\r\n-\r\n-const makePaymentsSortable = function makePaymentsSortable() {\r\n-\t\u002F\u002F Make payments sortable\r\n-\t$( '.learn-press-payments.sortable tbody' ).sortable( {\r\n-\t\thandle: '.dashicons-menu',\r\n-\t\thelper( e, ui ) {\r\n-\t\t\tui.children().each( function() {\r\n-\t\t\t\t$( this ).width( $( this ).width() );\r\n-\t\t\t} );\r\n-\t\t\treturn ui;\r\n-\t\t},\r\n-\t\taxis: 'y',\r\n-\t\tstart( event, ui ) {\r\n-\r\n-\t\t},\r\n-\t\tstop( event, ui ) {\r\n-\r\n-\t\t},\r\n-\t\tupdate( event, ui ) {\r\n-\t\t\tconst order = $( this ).children().map( function() {\r\n-\t\t\t\treturn $( this ).find( 'input[name=\"payment-order\"]' ).val();\r\n-\t\t\t} ).get();\r\n-\r\n-\t\t\t$.post( {\r\n-\t\t\t\turl: '',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\t'lp-ajax': 'update-payment-order',\r\n-\t\t\t\t\torder,\r\n-\t\t\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess( response ) {\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t},\r\n-\t} );\r\n-};\r\n-\r\n-\u002F** Start Nhamdv code *\u002F\r\n-\r\n-const lpMetaboxCustomFields = () => {\r\n-\t$( '.lp-metabox__custom-fields' ).on( 'click', '.lp-metabox-custom-field-button', function() {\r\n-\t\tconst row = $( this ).data( 'row' ).replace( \u002Flp_metabox_custom_fields_key\u002Fgi, Math.floor( Math.random() * 1000 ) + 1 );\r\n-\r\n-\t\t$( this ).closest( 'table' ).find( 'tbody' ).append( row );\r\n-\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp-metabox__custom-fields' ).on( 'click', 'a.delete', function() {\r\n-\t\t$( this ).closest( 'tr' ).remove();\r\n-\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp-metabox__custom-fields tbody' ).sortable( {\r\n-\t\titems: 'tr',\r\n-\t\tcursor: 'move',\r\n-\t\taxis: 'y',\r\n-\t\thandle: 'td.sort',\r\n-\t\tscrollSensitivity: 40,\r\n-\t\tforcePlaceholderSize: true,\r\n-\t\thelper: 'clone',\r\n-\t\topacity: 0.65,\r\n-\t\tupdate( event, ui ) {\r\n-\t\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\r\n-\t\t},\r\n-\t} );\r\n-\r\n-\tconst updateSort = ( element ) => {\r\n-\t\tconst items = element.find( 'tbody tr' );\r\n-\r\n-\t\titems.each( function( i, item ) {\r\n-\t\t\t$( this ).find( '.sort .count' ).val( i );\r\n-\t\t} );\r\n-\t};\r\n-};\r\n-\r\n-const lpMetaboxRepeaterField = () => {\r\n-\tconst updateSort = ( element ) => {\r\n-\t\tconst items = element.find( '.lp_repeater_meta_box__field' );\r\n-\r\n-\t\titems.each( function( i, item ) {\r\n-\t\t\t$( this ).find( '.lp_repeater_meta_box__field__count' ).val( i );\r\n-\t\t\t$( this ).find( '.lp_repeater_meta_box__title__title > span' ).text( i + 1 );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t$( '.lp_repeater_meta_box__add' ).on( 'click', function() {\r\n-\t\tconst row = $( this ).data( 'add' ).replace( \u002Flp_metabox_repeater_key\u002Fgi, Math.floor( Math.random() * 1000 ) + 1 );\r\n-\t\t$( this ).closest( '.lp_repeater_meta_box__wrapper' ).find( '.lp_repeater_meta_box__fields' ).append( row );\r\n-\r\n-\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\r\n-\t\t$( this ).closest( '.lp_repeater_meta_box__wrapper' ).find( '.lp_repeater_meta_box__fields' ).last().find( 'input' ).trigger( 'focus' );\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp_repeater_meta_box__wrapper' ).on( 'click', 'a.lp_repeater_meta_box__title__delete', function() {\r\n-\t\t$( this ).closest( '.lp_repeater_meta_box__field' ).remove();\r\n-\r\n-\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp_repeater_meta_box__fields' ).on( 'click', '.lp_repeater_meta_box__title__toggle, .lp_repeater_meta_box__title__title', function() {\r\n-\t\tconst field = $( this ).closest( '.lp_repeater_meta_box__field' );\r\n-\r\n-\t\tif ( field.hasClass( 'lp_repeater_meta_box__field_active' ) ) {\r\n-\t\t\tfield.removeClass( 'lp_repeater_meta_box__field_active' );\r\n-\t\t} else {\r\n-\t\t\tfield.addClass( 'lp_repeater_meta_box__field_active' );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp_repeater_meta_box__fields' ).sortable( {\r\n-\t\titems: '.lp_repeater_meta_box__field',\r\n-\t\tcursor: 'grab',\r\n-\t\taxis: 'y',\r\n-\t\thandle: '.lp_repeater_meta_box__title__sort',\r\n-\t\tscrollSensitivity: 40,\r\n-\t\tforcePlaceholderSize: true,\r\n-\t\thelper: 'clone',\r\n-\t\topacity: 0.65,\r\n-\t\tupdate( event, ui ) {\r\n-\t\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\r\n-\t\t},\r\n-\t} );\r\n-};\r\n-\r\n-const lpMetaboxExtraInfo = () => {\r\n-\t$( '.lp_course_extra_meta_box__add' ).on( 'click', function() {\r\n-\t\t$( this ).closest( '.lp_course_extra_meta_box__content' ).find( '.lp_course_extra_meta_box__fields' ).append( $( this ).data( 'add' ) );\r\n-\t\t$( this ).closest( '.lp_course_extra_meta_box__content' ).find( '.lp_course_extra_meta_box__field' ).last().find( 'input' ).trigger( 'focus' );\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t\u002F*document.querySelectorAll( '.lp_course_extra_meta_box__fields' ).forEach( ( ele ) => {\r\n-\t\tele.addEventListener( 'keydown', ( e ) => {\r\n-\t\t\tconst inputs = ele.querySelectorAll( '.lp_course_extra_meta_box__input' );\r\n-\r\n-\t\t\tif ( e.keyCode === 13 ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tinputs.forEach( ( input ) => {\r\n-\t\t\t\t\tinput.blur();\r\n-\t\t\t\t} );\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );*\u002F\r\n-\r\n-\t$( '.lp_course_extra_meta_box__fields' ).on( 'click', 'a.delete', function() {\r\n-\t\t$( this ).closest( '.lp_course_extra_meta_box__field' ).remove();\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp_course_extra_meta_box__fields' ).sortable( {\r\n-\t\titems: '.lp_course_extra_meta_box__field',\r\n-\t\tcursor: 'grab',\r\n-\t\taxis: 'y',\r\n-\t\thandle: '.sort',\r\n-\t\tscrollSensitivity: 40,\r\n-\t\tforcePlaceholderSize: true,\r\n-\t\thelper: 'clone',\r\n-\t\topacity: 0.65,\r\n-\t} );\r\n-\r\n-\t\u002F\u002F FAQs metabox.\r\n-\t$( '.lp_course_faq_meta_box__add' ).on( 'click', function() {\r\n-\t\t$( this ).closest( '.lp_course_faq_meta_box__content' ).find( '.lp_course_faq_meta_box__fields' ).append( $( this ).data( 'add' ) );\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t\u002F*document.querySelectorAll( '.lp_course_faq_meta_box__fields' ).forEach( ( ele ) => {\r\n-\t\tele.addEventListener( 'keydown', ( e ) => {\r\n-\t\t\tconst inputs = ele.querySelectorAll( '.lp_course_faq_meta_box__field input' );\r\n-\t\t\tconst textareas = ele.querySelectorAll( '.lp_course_faq_meta_box__field textarea' );\r\n-\r\n-\t\t\tif ( e.keyCode === 13 ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\t[ ...inputs, ...textareas ].forEach( ( input ) => {\r\n-\t\t\t\t\tinput.blur();\r\n-\t\t\t\t} );\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );*\u002F\r\n-\r\n-\t$( '.lp_course_faq_meta_box__fields' ).on( 'click', 'a.delete', function() {\r\n-\t\t$( this ).closest( '.lp_course_faq_meta_box__field' ).remove();\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp_course_faq_meta_box__fields' ).sortable( {\r\n-\t\titems: '.lp_course_faq_meta_box__field',\r\n-\t\tcursor: 'grab',\r\n-\t\taxis: 'y',\r\n-\t\thandle: '.sort',\r\n-\t\tscrollSensitivity: 40,\r\n-\t\tforcePlaceholderSize: true,\r\n-\t\thelper: 'clone',\r\n-\t\topacity: 0.65,\r\n-\t} );\r\n-};\r\n-\r\n-\u002F\u002F Nhamdv.\r\n-const lpGetFinalQuiz = () => {\r\n-\tconst btns = document.querySelectorAll( '.lp-metabox-get-final-quiz' );\r\n-\r\n-\t[ ...btns ].map( ( btn ) => {\r\n-\t\tbtn.addEventListener( 'click', ( e ) => {\r\n-\t\t\te.preventDefault();\r\n-\r\n-\t\t\tconst text = btn.textContent,\r\n-\t\t\t\tloading = btn.dataset.loading,\r\n-\t\t\t\tmessage = document.querySelector( '.lp-metabox-evaluate-final_quiz' );\r\n-\r\n-\t\t\tif ( message ) {\r\n-\t\t\t\tmessage.remove();\r\n-\t\t\t}\r\n-\r\n-\t\t\tbtn.textContent = loading;\r\n-\r\n-\t\t\tgetResponse( btn )\r\n-\t\t\t\t.then( ( data ) => {\r\n-\t\t\t\t\tconst { message, data: responseData } = data;\r\n-\r\n-\t\t\t\t\tbtn.textContent = text;\r\n-\r\n-\t\t\t\t\tconst newNode = document.createElement( 'div' );\r\n-\t\t\t\t\tnewNode.className = 'lp-metabox-evaluate-final_quiz';\r\n-\t\t\t\t\tnewNode.innerHTML = responseData || message;\r\n-\r\n-\t\t\t\t\tbtn.parentNode.insertBefore( newNode, btn.nextSibling );\r\n-\t\t\t\t} );\r\n-\t\t} );\r\n-\t} );\r\n-\r\n-\tconst getResponse = async ( btn ) => {\r\n-\t\tconst response = await wp.apiFetch( {\r\n-\t\t\tpath: 'lp\u002Fv1\u002Fadmin\u002Fcourse\u002Fget_final_quiz',\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tdata: {\r\n-\t\t\t\tcourseId: btn.dataset.postid || '',\r\n-\t\t\t},\r\n-\t\t} );\r\n-\r\n-\t\treturn response;\r\n-\t};\r\n-};\r\n-\r\n-const lpMetaboxColorPicker = () => {\r\n-\t$( '.lp-metabox__colorpick' )\r\n-\t\t.iris( {\r\n-\t\t\tchange( event, ui ) {\r\n-\t\t\t\t$( this ).parent().find( '.colorpickpreview' ).css( { backgroundColor: ui.color.toString() } );\r\n-\t\t\t},\r\n-\t\t\thide: true,\r\n-\t\t\tborder: true,\r\n-\t\t} )\r\n-\r\n-\t\t.on( 'click focus', function( event ) {\r\n-\t\t\tevent.stopPropagation();\r\n-\t\t\t$( '.iris-picker' ).hide();\r\n-\t\t\t$( this ).closest( 'td' ).find( '.iris-picker' ).show();\r\n-\t\t\t$( this ).data( 'original-value', $( this ).val() );\r\n-\t\t} )\r\n-\r\n-\t\t.on( 'change', function() {\r\n-\t\t\tif ( $( this ).is( '.iris-error' ) ) {\r\n-\t\t\t\tconst originalValue = $( this ).data( 'original-value' );\r\n-\r\n-\t\t\t\tif ( originalValue.match( \u002F^\\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$\u002F ) ) {\r\n-\t\t\t\t\t$( this ).val( $( this ).data( 'original-value' ) ).trigger( 'change' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$( this ).val( '' ).trigger( 'change' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t$( 'body' ).on( 'click', function() {\r\n-\t\t$( '.iris-picker' ).hide();\r\n-\t} );\r\n-};\r\n-\r\n-const lpMetaboxImage = () => {\r\n-\t$( '.lp-metabox-field__image' ).each( ( i, ele ) => {\r\n-\t\tlet lpImageFrame;\r\n-\r\n-\t\tconst addImage = $( ele ).find( '.lp-metabox-field__image--add' );\r\n-\t\tconst delImage = $( ele ).find( '.lp-metabox-field__image--delete' );\r\n-\r\n-\t\tconst image = $( ele ).find( '.lp-metabox-field__image--image' );\r\n-\t\tconst inputVal = $( ele ).find( '.lp-metabox-field__image--id' );\r\n-\r\n-\t\tif ( ! inputVal.val() ) {\r\n-\t\t\taddImage.show();\r\n-\t\t\tdelImage.hide();\r\n-\t\t} else {\r\n-\t\t\taddImage.hide();\r\n-\t\t\tdelImage.show();\r\n-\t\t}\r\n-\r\n-\t\taddImage.on( 'click', ( event ) => {\r\n-\t\t\tevent.preventDefault();\r\n-\r\n-\t\t\tif ( lpImageFrame ) {\r\n-\t\t\t\tlpImageFrame.open();\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlpImageFrame = wp.media( {\r\n-\t\t\t\ttitle: addImage.data( 'choose' ),\r\n-\t\t\t\tbutton: {\r\n-\t\t\t\t\ttext: addImage.data( 'update' ),\r\n-\t\t\t\t},\r\n-\t\t\t\tmultiple: false,\r\n-\t\t\t} );\r\n-\r\n-\t\t\tlpImageFrame.on( 'select', function() {\r\n-\t\t\t\tconst attachment = lpImageFrame.state().get( 'selection' ).first().toJSON();\r\n-\t\t\t\tconst attachmentImage = attachment.sizes && attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;\r\n-\r\n-\t\t\t\timage.append( '\u003Cdiv class=\"lp-metabox-field__image--inner\">\u003Cimg src=\"' + attachmentImage + '\" alt=\"\" style=\"max-width:100%;\"\u002F>\u003C\u002Fdiv>' );\r\n-\r\n-\t\t\t\tinputVal.val( attachment.id );\r\n-\r\n-\t\t\t\taddImage.hide();\r\n-\r\n-\t\t\t\tdelImage.show();\r\n-\t\t\t} );\r\n-\r\n-\t\t\tlpImageFrame.open();\r\n-\t\t} );\r\n-\r\n-\t\tdelImage.on( 'click', ( event ) => {\r\n-\t\t\tevent.preventDefault();\r\n-\r\n-\t\t\timage.html( '' );\r\n-\r\n-\t\t\taddImage.show();\r\n-\r\n-\t\t\tdelImage.hide();\r\n-\r\n-\t\t\tinputVal.val( '' );\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n-\r\n-const lpMetaboxImageAdvanced = () => {\r\n-\t$( '.lp-metabox-field__image-advanced' ).each( ( i, element ) => {\r\n-\t\tlet lpImageFrame;\r\n-\r\n-\t\tconst imageGalleryIds = $( element ).find( '#lp-gallery-images-ids' );\r\n-\t\tconst listImages = $( element ).find( '.lp-metabox-field__image-advanced-images' );\r\n-\t\tconst btnUpload = $( element ).find( '.lp-metabox-field__image-advanced-upload > a' );\r\n-\r\n-\t\t$( btnUpload ).on( 'click', ( event ) => {\r\n-\t\t\tevent.preventDefault();\r\n-\r\n-\t\t\tif ( lpImageFrame ) {\r\n-\t\t\t\tlpImageFrame.open();\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlpImageFrame = wp.media( {\r\n-\t\t\t\ttitle: btnUpload.data( 'choose' ),\r\n-\t\t\t\tbutton: {\r\n-\t\t\t\t\ttext: btnUpload.data( 'update' ),\r\n-\t\t\t\t},\r\n-\t\t\t\tstates: [\r\n-\t\t\t\t\tnew wp.media.controller.Library( {\r\n-\t\t\t\t\t\ttitle: btnUpload.data( 'choose' ),\r\n-\t\t\t\t\t\tfilterable: 'all',\r\n-\t\t\t\t\t\tmultiple: true,\r\n-\t\t\t\t\t} ),\r\n-\t\t\t\t],\r\n-\t\t\t} );\r\n-\r\n-\t\t\tlpImageFrame.on( 'select', function() {\r\n-\t\t\t\tconst selection = lpImageFrame.state().get( 'selection' );\r\n-\t\t\t\tlet attachmentIds = imageGalleryIds.val();\r\n-\r\n-\t\t\t\tselection.forEach( function( attachment ) {\r\n-\t\t\t\t\tattachment = attachment.toJSON();\r\n-\r\n-\t\t\t\t\tif ( attachment.id ) {\r\n-\t\t\t\t\t\tattachmentIds = attachmentIds ? attachmentIds + ',' + attachment.id : attachment.id;\r\n-\t\t\t\t\t\tconst attachmentImage = attachment.sizes && attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;\r\n-\r\n-\t\t\t\t\t\tlistImages.append(\r\n-\t\t\t\t\t\t\t'\u003Cli class=\"image\" data-attachment_id=\"' + attachment.id + '\">\u003Cimg src=\"' + attachmentImage +\r\n-\t\t\t\t\t\t'\" \u002F>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\" title=\"' + btnUpload.data( 'delete' ) + '\">' +\r\n-\t\t\t\t\t\tbtnUpload.data( 'text' ) + '\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tlpImageFrame.open();\r\n-\t\t} );\r\n-\r\n-\t\tlistImages.sortable( {\r\n-\t\t\titems: 'li.image',\r\n-\t\t\tcursor: 'move',\r\n-\t\t\tscrollSensitivity: 40,\r\n-\t\t\tforcePlaceholderSize: true,\r\n-\t\t\tforceHelperSize: false,\r\n-\t\t\thelper: 'clone',\r\n-\t\t\topacity: 0.65,\r\n-\t\t\tplaceholder: 'lp-metabox-sortable-placeholder',\r\n-\t\t\tstart( event, ui ) {\r\n-\t\t\t\tui.item.css( 'background-color', '#f6f6f6' );\r\n-\t\t\t},\r\n-\t\t\tstop( event, ui ) {\r\n-\t\t\t\tui.item.removeAttr( 'style' );\r\n-\t\t\t},\r\n-\t\t\tupdate() {\r\n-\t\t\t\tlet attachmentIds = '';\r\n-\r\n-\t\t\t\tlistImages.find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\r\n-\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\r\n-\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\r\n-\t\t$( listImages ).find( 'li.image' ).each( ( i, ele ) => {\r\n-\t\t\tconst del = $( ele ).find( 'a.delete' );\r\n-\r\n-\t\t\tdel.on( 'click', () => {\r\n-\t\t\t\t$( ele ).remove();\r\n-\r\n-\t\t\t\tlet attachmentIds = '';\r\n-\r\n-\t\t\t\t$( listImages ).find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\r\n-\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\r\n-\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\t\timageGalleryIds.val( attachmentIds );\r\n-\r\n-\t\t\t\treturn false;\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n-\r\n-const lpMetaboxCourseTabs = () => {\r\n-\t$( document.body ).on( 'lp-metabox-course-tab-panels', function() {\r\n-\t\t$( 'ul.lp-meta-box__course-tab__tabs' ).show();\r\n-\r\n-\t\t$( 'ul.lp-meta-box__course-tab__tabs a' ).on( 'click', function( e ) {\r\n-\t\t\te.preventDefault();\r\n-\r\n-\t\t\tconst panelWrap = $( this ).closest( 'div.lp-meta-box__course-tab' );\r\n-\r\n-\t\t\t$( 'ul.lp-meta-box__course-tab__tabs li', panelWrap ).removeClass( 'active' );\r\n-\r\n-\t\t\t$( this ).parent().addClass( 'active' );\r\n-\r\n-\t\t\t$( 'div.lp-meta-box-course-panels', panelWrap ).hide();\r\n-\r\n-\t\t\t$( $( this ).attr( 'href' ) ).show();\r\n-\t\t} );\r\n-\r\n-\t\t$( 'div.lp-meta-box__course-tab' ).each( function() {\r\n-\t\t\t$( this ).find( 'ul.lp-meta-box__course-tab__tabs li' ).eq( 0 ).find( 'a' ).trigger( 'click' );\r\n-\t\t} );\r\n-\t} ).trigger( 'lp-metabox-course-tab-panels' );\r\n-};\r\n-\r\n-\u002F\u002F use to show and hide field condition logic metabox.\r\n-\u002F*const lpMetaboxCondition = () => {\r\n-\tconst fields = document.querySelectorAll( '.lp-meta-box .form-field' );\r\n-\r\n-\tfields.forEach( ( field ) => {\r\n-\t\tif ( field.hasAttribute( 'data-show' ) && field.dataset.show ) {\r\n-\t\t\tlpMetaboxConditionType( field, field.dataset.show, 'show' );\r\n-\t\t} else if ( field.hasAttribute( 'data-hide' ) && field.dataset.hide ) {\r\n-\t\t\tlpMetaboxConditionType( field, field.dataset.hide, 'hide' );\r\n-\t\t}\r\n-\t} );\r\n-};*\u002F\r\n-\r\n-\u002F*const lpMetaboxConditionType = ( field, conditions, typeCondition = 'show' ) => {\r\n-\tconst condition = JSON.parse( conditions ),\r\n-\t\teles = document.querySelectorAll( `input[id^=\"${ condition[ 0 ] }\"]` ),\r\n-\t\tlogic = condition[ 1 ] === '=' ? '=' : '!=',\r\n-\t\tdataLogic = condition[ 2 ];\r\n-\r\n-\tconst switchCase = ( type, ele, target ) => {\r\n-\t\tswitch ( type ) {\r\n-\t\tcase 'checkbox':\r\n-\t\t\tlet val = dataLogic;\r\n-\r\n-\t\t\tif ( dataLogic === 'yes' || dataLogic === '1' || dataLogic === 1 || dataLogic === 'true' ) {\r\n-\t\t\t\tval = true;\r\n-\t\t\t} else if ( dataLogic === 'no' || dataLogic === '0' || dataLogic === 0 || dataLogic === 'false' ) {\r\n-\t\t\t\tval = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( logic == '!=' && val !== Boolean( target ? target.checked : ele.checked ) ) {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\r\n-\t\t\t} else if ( logic == '=' && val == Boolean( target ? target.checked : ele.checked ) ) {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\r\n-\t\t\t} else {\r\n-\t\t\t\tfield.style.display = typeCondition === 'show' ? 'none' : '';\r\n-\t\t\t}\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\t};\r\n-\r\n-\teles.forEach( ( ele ) => {\r\n-\t\tconst type = ele.getAttribute( 'type' );\r\n-\r\n-\t\tswitchCase( type, ele );\r\n-\r\n-\t\tele.addEventListener( 'change', ( e ) => {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tswitchCase( type, ele, target );\r\n-\t\t} );\r\n-\t} );\r\n-};*\u002F\r\n-\r\n-\u002F** End Nhamdv code *\u002F\r\n-\r\n-const initTooltips = function initTooltips() {\r\n-\t$( '.learn-press-tooltip' ).each( function() {\r\n-\t\tconst $el = $( this ),\r\n-\t\t\targs = $.extend( { title: 'data-tooltip', offset: 10, gravity: 's' }, $el.data() );\r\n-\t\t$el.tipsy( args );\r\n-\t} );\r\n-};\r\n-\r\n-const initSelect2 = function initSelect2() {\r\n-\tif ( $.fn.select2 ) {\r\n-\t\tconst elSelect2 = $( '.lp-select-2 select' );\r\n-\t\telSelect2.select2( {\r\n-\t\t\tplaceholder: 'Select a value',\r\n-\t\t} );\r\n-\t\telSelect2.on( 'change.select2', function( e ) {\r\n-\t\t\tconst el = $( e.target );\r\n-\t\t\tconst val = el.val();\r\n-\r\n-\t\t\tif ( ! val.length ) {\r\n-\t\t\t\tel.val( null );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\t$( '.lp_autocomplete_metabox_field' ).each( function() {\r\n-\t\t\tconst dataAtts = $( this ).data( 'atts' );\r\n-\t\t\tlet action = dataAtts.action;\r\n-\r\n-\t\t\tif ( ! action ) {\r\n-\t\t\t\tswitch ( dataAtts.data ) {\r\n-\t\t\t\tcase 'users':\r\n-\t\t\t\t\taction = dataAtts.rest_url + 'wp\u002Fv2\u002Fusers';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\taction = dataAtts.rest_url + 'wp\u002Fv2\u002F' + dataAtts.data;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$( this ).find( 'select' ).select2( {\r\n-\t\t\t\tplaceholder: dataAtts.placeholder ? dataAtts.placeholder : 'Select',\r\n-\t\t\t\tajax: {\r\n-\t\t\t\t\turl: action,\r\n-\t\t\t\t\tdataType: 'json',\r\n-\t\t\t\t\tdelay: 250,\r\n-\t\t\t\t\tbeforeSend( xhr ) {\r\n-\t\t\t\t\t\txhr.setRequestHeader( 'X-WP-Nonce', dataAtts.nonce );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tdata( params ) {\r\n-\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\tsearch: params.term,\r\n-\t\t\t\t\t\t};\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tprocessResults( data ) {\r\n-\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\tresults: data.map( ( item ) => {\r\n-\t\t\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\t\t\tid: item.id,\r\n-\t\t\t\t\t\t\t\t\ttext: item.title && item.title.rendered ? item.title.rendered : item.name,\r\n-\t\t\t\t\t\t\t\t};\r\n-\t\t\t\t\t\t\t} ),\r\n-\t\t\t\t\t\t};\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcache: true,\r\n-\t\t\t\t},\r\n-\t\t\t\tminimumInputLength: 2,\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-const initSingleCoursePermalink = function initSingleCoursePermalink() {\r\n-\t$doc\r\n-\t\t.on( 'change', '.learn-press-single-course-permalink input[type=\"radio\"]', function() {\r\n-\t\t\tconst $check = $( this ),\r\n-\t\t\t\t$row = $check.closest( '.learn-press-single-course-permalink' );\r\n-\t\t\tif ( $row.hasClass( 'custom-base' ) ) {\r\n-\t\t\t\t$row.find( 'input[type=\"text\"]' ).prop( 'readonly', false );\r\n-\t\t\t} else {\r\n-\t\t\t\t$row.siblings( '.custom-base' ).find( 'input[type=\"text\"]' ).prop( 'readonly', true );\r\n-\t\t\t}\r\n-\t\t} )\r\n-\t\t.on( 'change', 'input.learn-press-course-base', function() {\r\n-\t\t\t$( '#course_permalink_structure' ).val( $( this ).val() );\r\n-\t\t} )\r\n-\t\t.on( 'focus', '#course_permalink_structure', function() {\r\n-\t\t\t$( '#learn_press_custom_permalink' ).click();\r\n-\t\t} )\r\n-\t\t.on( 'change', '#learn_press_courses_page_id', function() {\r\n-\t\t\t$( 'tr.learn-press-courses-page-id' ).toggleClass( 'hide-if-js', ! parseInt( this.value ) );\r\n-\t\t} );\r\n-};\r\n-\r\n-const togglePaymentStatus = function togglePaymentStatus( e ) {\r\n-\te.preventDefault();\r\n-\tconst $row = $( this ).closest( 'tr' ),\r\n-\t\t$button = $( this ),\r\n-\t\tstatus = $row.find( '.status' ).hasClass( 'enabled' ) ? 'no' : 'yes';\r\n-\r\n-\t$.ajax( {\r\n-\t\turl: '',\r\n-\t\tdata: {\r\n-\t\t\t'lp-ajax': 'update-payment-status',\r\n-\t\t\tstatus,\r\n-\t\t\tid: $row.data( 'payment' ),\r\n-\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\r\n-\t\t},\r\n-\t\tsuccess( response ) {\r\n-\t\t\tresponse = lpAjaxParseJsonOld( response );\r\n-\t\t\tfor ( const i in response ) {\r\n-\t\t\t\t$( '#payment-' + i + ' .status' ).toggleClass( 'enabled', response[ i ] );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t} );\r\n-};\r\n-\r\n-const updateEmailStatus = function updateEmailStatus() {\r\n-\t( function() {\r\n-\t\t$.post( {\r\n-\t\t\turl: window.location.href,\r\n-\t\t\tdata: {\r\n-\t\t\t\t'lp-ajax': 'update_email_status',\r\n-\t\t\t\tstatus: $( this ).parent().hasClass( 'enabled' ) ? 'no' : 'yes',\r\n-\t\t\t\tid: $( this ).data( 'id' ),\r\n-\t\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\r\n-\t\t\t},\r\n-\t\t\tdataType: 'text',\r\n-\t\t\tsuccess: $.proxy( function( res ) {\r\n-\t\t\t\tres = lpAjaxParseJsonOld( res );\r\n-\t\t\t\tfor ( const i in res ) {\r\n-\t\t\t\t\t$( '#email-' + i + ' .status' ).toggleClass( 'enabled', res[ i ] );\r\n-\t\t\t\t}\r\n-\t\t\t}, this ),\r\n-\t\t} );\r\n-\t} ).apply( this );\r\n-};\r\n-\r\n-const lpMetaboxsalePriceDate = () => {\r\n-\t\u002F\u002F Don't run in LearnPress Frontend Editor Add-on.\r\n-\tif ( ! $( '#course-settings' ).length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$( '.lp_sale_dates_fields' ).each( function() {\r\n-\t\tconst wrap = $( this ).closest( '#price_course_data' );\r\n-\t\tlet saleScheduleSet = false;\r\n-\r\n-\t\t$( this ).find( 'input' ).each( function() {\r\n-\t\t\tif ( '' !== $( this ).val() ) {\r\n-\t\t\t\tsaleScheduleSet = true;\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tif ( saleScheduleSet ) {\r\n-\t\t\twrap.find( '.lp_sale_price_schedule' ).hide();\r\n-\t\t\twrap.find( '.lp_sale_dates_fields' ).show();\r\n-\t\t} else {\r\n-\t\t\twrap.find( '.lp_sale_price_schedule' ).show();\r\n-\t\t\twrap.find( '.lp_sale_dates_fields' ).hide();\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\t$( '.lp-meta-box-course-panels' ).on( 'click', '.lp_sale_price_schedule', function() {\r\n-\t\tconst wrap = $( this ).closest( '#price_course_data' );\r\n-\r\n-\t\t$( this ).hide();\r\n-\r\n-\t\twrap.find( '.lp_cancel_sale_schedule' ).show();\r\n-\t\twrap.find( '.lp_sale_dates_fields' ).show();\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( '.lp-meta-box-course-panels' ).on( 'click', '.lp_cancel_sale_schedule', function() {\r\n-\t\tconst wrap = $( this ).closest( 'div.lp-meta-box-course-panels' );\r\n-\r\n-\t\t$( this ).hide();\r\n-\r\n-\t\twrap.find( '.lp_sale_price_schedule' ).show();\r\n-\t\twrap.find( '.lp_sale_dates_fields' ).hide();\r\n-\t\twrap.find( '.lp_sale_dates_fields' ).find( 'input' ).val( '' );\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\t$( document ).on( 'input', '#price_course_data', function( e ) {\r\n-\t\tconst $this = $( this ),\r\n-\t\t\tregularPrice = $( '.lp_meta_box_regular_price' ),\r\n-\t\t\tsalePrice = $( '.lp_meta_box_sale_price' ),\r\n-\t\t\t$target = $( e.target ).attr( 'id' );\r\n-\r\n-\t\t$this.find( '.learn-press-tip-floating' ).remove();\r\n-\r\n-\t\tif ( parseInt( salePrice.val() ) > parseInt( regularPrice.val() ) ) {\r\n-\t\t\tif ( $target === '_lp_price' ) {\r\n-\t\t\t\tregularPrice.parent( '.form-field' ).append( '\u003Cdiv class=\"learn-press-tip-floating\">' + lpAdminCourseEditorSettings.i18n.notice_price + '\u003C\u002Fdiv>' );\r\n-\t\t\t} else if ( $target === '_lp_sale_price' ) {\r\n-\t\t\t\tsalePrice.parent( '.form-field' ).append( '\u003Cdiv class=\"learn-press-tip-floating\">' + lpAdminCourseEditorSettings.i18n.notice_sale_price + '\u003C\u002Fdiv>' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\t\u002F*const datePickerSelect = function( datepicker ) {\r\n-\t\tconst option = $( datepicker ).is( '#_lp_sale_start' ) ? 'minDate' : 'maxDate',\r\n-\t\t\totherDateField = 'minDate' === option ? $( '#_lp_sale_end' ) : $( '#_lp_sale_start' ),\r\n-\t\t\tdate = $( datepicker ).datetimepicker( 'getDate' );\r\n-\r\n-\t\t$( otherDateField ).datetimepicker( 'option', option, date );\r\n-\t\t$( datepicker ).trigger( 'change' );\r\n-\t};\r\n-\r\n-\t$( '.lp_sale_dates_fields' ).each( function() {\r\n-\t\t$( this ).find( 'input' ).datetimepicker( {\r\n-\t\t\ttimeFormat: 'HH:mm',\r\n-\t\t\tseparator: ' ',\r\n-\t\t\tdateFormat: 'yy-mm-dd',\r\n-\t\t\tshowButtonPanel: true,\r\n-\t\t\tonSelect() {\r\n-\t\t\t\tdatePickerSelect( $( this ) );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\r\n-\t\t$( this ).find( 'input' ).each( function() {\r\n-\t\t\tdatePickerSelect( $( this ) );\r\n-\t\t} );\r\n-\t} );*\u002F\r\n-};\r\n-\r\n-const lpHidePassingGrade = () => {\r\n-\tconst listHides = [ 'evaluate_final_quiz', 'evaluate_final_assignment' ];\r\n-\tconst inputLists = document.querySelectorAll( 'input[type=radio][name=_lp_course_result]' );\r\n-\r\n-\t[ ...inputLists ].map( ( ele, i ) => {\r\n-\t\tif ( ele.checked && listHides.includes( ele.value ) ) {\r\n-\t\t\t$( '._lp_passing_condition_field' ).hide();\r\n-\t\t}\r\n-\r\n-\t\treturn null;\r\n-\t} );\r\n-\r\n-\t$( 'input[type=radio][name=_lp_course_result]' ).on( 'change', function( e ) {\r\n-\t\tif ( listHides.includes( e.target.value ) ) {\r\n-\t\t\t$( '._lp_passing_condition_field' ).hide();\r\n-\t\t} else {\r\n-\t\t\t$( '._lp_passing_condition_field' ).show();\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-const callbackFilterTemplates = function callbackFilterTemplates() {\r\n-\tconst $link = $( this );\r\n-\r\n-\tif ( $link.hasClass( 'current' ) ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tconst $templatesList = $( '#learn-press-template-files' ),\r\n-\t\t$templates = $templatesList.find( 'tr[data-template]' ),\r\n-\t\ttemplate = $link.data( 'template' ),\r\n-\t\tfilter = $link.data( 'filter' );\r\n-\r\n-\t$link.addClass( 'current' ).siblings( 'a' ).removeClass( 'current' );\r\n-\r\n-\tif ( ! template ) {\r\n-\t\tif ( ! filter ) {\r\n-\t\t\t$templates.removeClass( 'hide-if-js' );\r\n-\t\t} else {\r\n-\t\t\t$templates.map( function() {\r\n-\t\t\t\t$( this ).toggleClass( 'hide-if-js', $( this ).data( 'filter-' + filter ) !== 'yes' );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$templates.map( function() {\r\n-\t\t\t$( this ).toggleClass( 'hide-if-js', $( this ).data( 'template' ) !== template );\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t$( '#learn-press-no-templates' ).toggleClass( 'hide-if-js', !! $templatesList.find( 'tr.template-row:not(.hide-if-js):first' ).length );\r\n-\r\n-\treturn false;\r\n-};\r\n-\r\n-const toggleEmails = function toggleEmails( e ) {\r\n-\te.preventDefault();\r\n-\tconst $button = $( this ),\r\n-\t\tstatus = $button.data( 'status' );\r\n-\r\n-\t$.ajax( {\r\n-\t\turl: '',\r\n-\t\tdata: {\r\n-\t\t\t'lp-ajax': 'update_email_status',\r\n-\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\r\n-\t\t\tstatus,\r\n-\t\t},\r\n-\t\tsuccess( response ) {\r\n-\t\t\tresponse = lpAjaxParseJsonOld( response );\r\n-\t\t\tfor ( const i in response ) {\r\n-\t\t\t\t$( '#email-' + i + ' .status' ).toggleClass( 'enabled', response[ i ] );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t} );\r\n-};\r\n-\r\n-const onReady = function onReady() {\r\n-\tmakePaymentsSortable();\r\n-\tinitSelect2();\r\n-\tinitTooltips();\r\n-\tinitSingleCoursePermalink();\r\n-\r\n-\t\u002F\u002F lp Metabox in LP4.\r\n-\tlpMetaboxCourseTabs();\r\n-\tlpMetaboxCustomFields();\r\n-\tlpMetaboxColorPicker();\r\n-\tlpMetaboxImageAdvanced();\r\n-\tlpMetaboxImage();\r\n-\tlpMetaboxsalePriceDate();\r\n-\tlpMetaboxExtraInfo();\r\n-\tlpHidePassingGrade();\r\n-\tlpGetFinalQuiz();\r\n-\t\u002F\u002FlpMetaboxCondition();\r\n-\tlpMetaboxRepeaterField();\r\n-\r\n-\t$( document )\r\n-\t\t.on( 'click', '.learn-press-payments .status .dashicons', togglePaymentStatus )\r\n-\t\t.on( 'click', '.change-email-status', updateEmailStatus )\r\n-\t\t.on( 'click', '.learn-press-filter-template', callbackFilterTemplates )\r\n-\t\t.on( 'click', '#learn-press-enable-emails, #learn-press-disable-emails', toggleEmails );\r\n-};\r\n-\r\n-$( document ).ready( onReady );\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'keydown', function( e ) {\r\n-\tconst target = e.target;\r\n-\tif ( e.key === 'Enter' || e.keyCode === 13 ) {\r\n-\t\t\u002F\u002F When enter on input on Extra information Options, blur it.\r\n-\t\tif ( target.classList.contains( 'lp_course_extra_meta_box__input' ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\ttarget.blur();\r\n-\t\t} else if ( target.tagName === 'INPUT' ) {\r\n-\t\t\tif ( target.closest( '.lp_course_faq_meta_box__field' ) ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\ttarget.blur();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-} );\r\n+import { lpAjaxParseJsonOld } from '..\u002Futils';\n+const $ = jQuery;\n+const $doc = $( document );\n+\n+const makePaymentsSortable = function makePaymentsSortable() {\n+\t\u002F\u002F Make payments sortable\n+\t$( '.learn-press-payments.sortable tbody' ).sortable( {\n+\t\thandle: '.dashicons-menu',\n+\t\thelper( e, ui ) {\n+\t\t\tui.children().each( function() {\n+\t\t\t\t$( this ).width( $( this ).width() );\n+\t\t\t} );\n+\t\t\treturn ui;\n+\t\t},\n+\t\taxis: 'y',\n+\t\tstart( event, ui ) {\n+\n+\t\t},\n+\t\tstop( event, ui ) {\n+\n+\t\t},\n+\t\tupdate( event, ui ) {\n+\t\t\tconst order = $( this ).children().map( function() {\n+\t\t\t\treturn $( this ).find( 'input[name=\"payment-order\"]' ).val();\n+\t\t\t} ).get();\n+\n+\t\t\t$.post( {\n+\t\t\t\turl: '',\n+\t\t\t\tdata: {\n+\t\t\t\t\t'lp-ajax': 'update-payment-order',\n+\t\t\t\t\torder,\n+\t\t\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\n+\t\t\t\t},\n+\t\t\t\tsuccess( response ) {\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t},\n+\t} );\n+};\n+\n+\u002F** Start Nhamdv code *\u002F\n+\n+const lpMetaboxCustomFields = () => {\n+\t$( '.lp-metabox__custom-fields' ).on( 'click', '.lp-metabox-custom-field-button', function() {\n+\t\tconst row = $( this ).data( 'row' ).replace( \u002Flp_metabox_custom_fields_key\u002Fgi, Math.floor( Math.random() * 1000 ) + 1 );\n+\n+\t\t$( this ).closest( 'table' ).find( 'tbody' ).append( row );\n+\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp-metabox__custom-fields' ).on( 'click', 'a.delete', function() {\n+\t\t$( this ).closest( 'tr' ).remove();\n+\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp-metabox__custom-fields tbody' ).sortable( {\n+\t\titems: 'tr',\n+\t\tcursor: 'move',\n+\t\taxis: 'y',\n+\t\thandle: 'td.sort',\n+\t\tscrollSensitivity: 40,\n+\t\tforcePlaceholderSize: true,\n+\t\thelper: 'clone',\n+\t\topacity: 0.65,\n+\t\tupdate( event, ui ) {\n+\t\t\tupdateSort( $( this ).closest( '.lp-metabox__custom-fields' ) );\n+\t\t},\n+\t} );\n+\n+\tconst updateSort = ( element ) => {\n+\t\tconst items = element.find( 'tbody tr' );\n+\n+\t\titems.each( function( i, item ) {\n+\t\t\t$( this ).find( '.sort .count' ).val( i );\n+\t\t} );\n+\t};\n+};\n+\n+const lpMetaboxRepeaterField = () => {\n+\tconst updateSort = ( element ) => {\n+\t\tconst items = element.find( '.lp_repeater_meta_box__field' );\n+\n+\t\titems.each( function( i, item ) {\n+\t\t\t$( this ).find( '.lp_repeater_meta_box__field__count' ).val( i );\n+\t\t\t$( this ).find( '.lp_repeater_meta_box__title__title > span' ).text( i + 1 );\n+\t\t} );\n+\t};\n+\n+\t$( '.lp_repeater_meta_box__add' ).on( 'click', function() {\n+\t\tconst row = $( this ).data( 'add' ).replace( \u002Flp_metabox_repeater_key\u002Fgi, Math.floor( Math.random() * 1000 ) + 1 );\n+\t\t$( this ).closest( '.lp_repeater_meta_box__wrapper' ).find( '.lp_repeater_meta_box__fields' ).append( row );\n+\n+\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\n+\t\t$( this ).closest( '.lp_repeater_meta_box__wrapper' ).find( '.lp_repeater_meta_box__fields' ).last().find( 'input' ).trigger( 'focus' );\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp_repeater_meta_box__wrapper' ).on( 'click', 'a.lp_repeater_meta_box__title__delete', function() {\n+\t\t$( this ).closest( '.lp_repeater_meta_box__field' ).remove();\n+\n+\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp_repeater_meta_box__fields' ).on( 'click', '.lp_repeater_meta_box__title__toggle, .lp_repeater_meta_box__title__title', function() {\n+\t\tconst field = $( this ).closest( '.lp_repeater_meta_box__field' );\n+\n+\t\tif ( field.hasClass( 'lp_repeater_meta_box__field_active' ) ) {\n+\t\t\tfield.removeClass( 'lp_repeater_meta_box__field_active' );\n+\t\t} else {\n+\t\t\tfield.addClass( 'lp_repeater_meta_box__field_active' );\n+\t\t}\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp_repeater_meta_box__fields' ).sortable( {\n+\t\titems: '.lp_repeater_meta_box__field',\n+\t\tcursor: 'grab',\n+\t\taxis: 'y',\n+\t\thandle: '.lp_repeater_meta_box__title__sort',\n+\t\tscrollSensitivity: 40,\n+\t\tforcePlaceholderSize: true,\n+\t\thelper: 'clone',\n+\t\topacity: 0.65,\n+\t\tupdate( event, ui ) {\n+\t\t\tupdateSort( $( this ).closest( '.lp_repeater_meta_box__wrapper' ) );\n+\t\t},\n+\t} );\n+};\n+\n+const lpMetaboxExtraInfo = () => {\n+\t$( '.lp_course_extra_meta_box__add' ).on( 'click', function() {\n+\t\t$( this ).closest( '.lp_course_extra_meta_box__content' ).find( '.lp_course_extra_meta_box__fields' ).append( $( this ).data( 'add' ) );\n+\t\t$( this ).closest( '.lp_course_extra_meta_box__content' ).find( '.lp_course_extra_meta_box__field' ).last().find( 'input' ).trigger( 'focus' );\n+\n+\t\treturn false;\n+\t} );\n+\n+\t\u002F*document.querySelectorAll( '.lp_course_extra_meta_box__fields' ).forEach( ( ele ) => {\n+\t\tele.addEventListener( 'keydown', ( e ) => {\n+\t\t\tconst inputs = ele.querySelectorAll( '.lp_course_extra_meta_box__input' );\n+\n+\t\t\tif ( e.keyCode === 13 ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\tinputs.forEach( ( input ) => {\n+\t\t\t\t\tinput.blur();\n+\t\t\t\t} );\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t} );\n+\t} );*\u002F\n+\n+\t$( '.lp_course_extra_meta_box__fields' ).on( 'click', 'a.delete', function() {\n+\t\t$( this ).closest( '.lp_course_extra_meta_box__field' ).remove();\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp_course_extra_meta_box__fields' ).sortable( {\n+\t\titems: '.lp_course_extra_meta_box__field',\n+\t\tcursor: 'grab',\n+\t\taxis: 'y',\n+\t\thandle: '.sort',\n+\t\tscrollSensitivity: 40,\n+\t\tforcePlaceholderSize: true,\n+\t\thelper: 'clone',\n+\t\topacity: 0.65,\n+\t} );\n+\n+\t\u002F\u002F FAQs metabox.\n+\t$( '.lp_course_faq_meta_box__add' ).on( 'click', function() {\n+\t\t$( this ).closest( '.lp_course_faq_meta_box__content' ).find( '.lp_course_faq_meta_box__fields' ).append( $( this ).data( 'add' ) );\n+\n+\t\treturn false;\n+\t} );\n+\n+\t\u002F*document.querySelectorAll( '.lp_course_faq_meta_box__fields' ).forEach( ( ele ) => {\n+\t\tele.addEventListener( 'keydown', ( e ) => {\n+\t\t\tconst inputs = ele.querySelectorAll( '.lp_course_faq_meta_box__field input' );\n+\t\t\tconst textareas = ele.querySelectorAll( '.lp_course_faq_meta_box__field textarea' );\n+\n+\t\t\tif ( e.keyCode === 13 ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\t[ ...inputs, ...textareas ].forEach( ( input ) => {\n+\t\t\t\t\tinput.blur();\n+\t\t\t\t} );\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t} );\n+\t} );*\u002F\n+\n+\t$( '.lp_course_faq_meta_box__fields' ).on( 'click', 'a.delete', function() {\n+\t\t$( this ).closest( '.lp_course_faq_meta_box__field' ).remove();\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp_course_faq_meta_box__fields' ).sortable( {\n+\t\titems: '.lp_course_faq_meta_box__field',\n+\t\tcursor: 'grab',\n+\t\taxis: 'y',\n+\t\thandle: '.sort',\n+\t\tscrollSensitivity: 40,\n+\t\tforcePlaceholderSize: true,\n+\t\thelper: 'clone',\n+\t\topacity: 0.65,\n+\t} );\n+};\n+\n+\u002F\u002F Nhamdv.\n+const lpGetFinalQuiz = () => {\n+\tconst btns = document.querySelectorAll( '.lp-metabox-get-final-quiz' );\n+\n+\t[ ...btns ].map( ( btn ) => {\n+\t\tbtn.addEventListener( 'click', ( e ) => {\n+\t\t\te.preventDefault();\n+\n+\t\t\tconst text = btn.textContent,\n+\t\t\t\tloading = btn.dataset.loading,\n+\t\t\t\tmessage = document.querySelector( '.lp-metabox-evaluate-final_quiz' );\n+\n+\t\t\tif ( message ) {\n+\t\t\t\tmessage.remove();\n+\t\t\t}\n+\n+\t\t\tbtn.textContent = loading;\n+\n+\t\t\tgetResponse( btn )\n+\t\t\t\t.then( ( data ) => {\n+\t\t\t\t\tconst { message, data: responseData } = data;\n+\n+\t\t\t\t\tbtn.textContent = text;\n+\n+\t\t\t\t\tconst newNode = document.createElement( 'div' );\n+\t\t\t\t\tnewNode.className = 'lp-metabox-evaluate-final_quiz';\n+\t\t\t\t\tnewNode.innerHTML = responseData || message;\n+\n+\t\t\t\t\tbtn.parentNode.insertBefore( newNode, btn.nextSibling );\n+\t\t\t\t} );\n+\t\t} );\n+\t} );\n+\n+\tconst getResponse = async ( btn ) => {\n+\t\tconst response = await wp.apiFetch( {\n+\t\t\tpath: 'lp\u002Fv1\u002Fadmin\u002Fcourse\u002Fget_final_quiz',\n+\t\t\tmethod: 'POST',\n+\t\t\tdata: {\n+\t\t\t\tcourseId: btn.dataset.postid || '',\n+\t\t\t},\n+\t\t} );\n+\n+\t\treturn response;\n+\t};\n+};\n+\n+const lpMetaboxColorPicker = () => {\n+\t$( '.lp-metabox__colorpick' )\n+\t\t.iris( {\n+\t\t\tchange( event, ui ) {\n+\t\t\t\t$( this ).parent().find( '.colorpickpreview' ).css( { backgroundColor: ui.color.toString() } );\n+\t\t\t},\n+\t\t\thide: true,\n+\t\t\tborder: true,\n+\t\t} )\n+\n+\t\t.on( 'click focus', function( event ) {\n+\t\t\tevent.stopPropagation();\n+\t\t\t$( '.iris-picker' ).hide();\n+\t\t\t$( this ).closest( 'td' ).find( '.iris-picker' ).show();\n+\t\t\t$( this ).data( 'original-value', $( this ).val() );\n+\t\t} )\n+\n+\t\t.on( 'change', function() {\n+\t\t\tif ( $( this ).is( '.iris-error' ) ) {\n+\t\t\t\tconst originalValue = $( this ).data( 'original-value' );\n+\n+\t\t\t\tif ( originalValue.match( \u002F^\\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$\u002F ) ) {\n+\t\t\t\t\t$( this ).val( $( this ).data( 'original-value' ) ).trigger( 'change' );\n+\t\t\t\t} else {\n+\t\t\t\t\t$( this ).val( '' ).trigger( 'change' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\n+\t$( 'body' ).on( 'click', function() {\n+\t\t$( '.iris-picker' ).hide();\n+\t} );\n+};\n+\n+const lpMetaboxImage = () => {\n+\t$( '.lp-metabox-field__image' ).each( ( i, ele ) => {\n+\t\tlet lpImageFrame;\n+\n+\t\tconst addImage = $( ele ).find( '.lp-metabox-field__image--add' );\n+\t\tconst delImage = $( ele ).find( '.lp-metabox-field__image--delete' );\n+\n+\t\tconst image = $( ele ).find( '.lp-metabox-field__image--image' );\n+\t\tconst inputVal = $( ele ).find( '.lp-metabox-field__image--id' );\n+\n+\t\tif ( ! inputVal.val() ) {\n+\t\t\taddImage.show();\n+\t\t\tdelImage.hide();\n+\t\t} else {\n+\t\t\taddImage.hide();\n+\t\t\tdelImage.show();\n+\t\t}\n+\n+\t\taddImage.on( 'click', ( event ) => {\n+\t\t\tevent.preventDefault();\n+\n+\t\t\tif ( lpImageFrame ) {\n+\t\t\t\tlpImageFrame.open();\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tlpImageFrame = wp.media( {\n+\t\t\t\ttitle: addImage.data( 'choose' ),\n+\t\t\t\tbutton: {\n+\t\t\t\t\ttext: addImage.data( 'update' ),\n+\t\t\t\t},\n+\t\t\t\tmultiple: false,\n+\t\t\t} );\n+\n+\t\t\tlpImageFrame.on( 'select', function() {\n+\t\t\t\tconst attachment = lpImageFrame.state().get( 'selection' ).first().toJSON();\n+\t\t\t\tconst attachmentImage = attachment.sizes && attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;\n+\n+\t\t\t\timage.append( '\u003Cdiv class=\"lp-metabox-field__image--inner\">\u003Cimg src=\"' + attachmentImage + '\" alt=\"\" style=\"max-width:100%;\"\u002F>\u003C\u002Fdiv>' );\n+\n+\t\t\t\tinputVal.val( attachment.id );\n+\n+\t\t\t\taddImage.hide();\n+\n+\t\t\t\tdelImage.show();\n+\t\t\t} );\n+\n+\t\t\tlpImageFrame.open();\n+\t\t} );\n+\n+\t\tdelImage.on( 'click', ( event ) => {\n+\t\t\tevent.preventDefault();\n+\n+\t\t\timage.html( '' );\n+\n+\t\t\taddImage.show();\n+\n+\t\t\tdelImage.hide();\n+\n+\t\t\tinputVal.val( '' );\n+\t\t} );\n+\t} );\n+};\n+\n+const lpMetaboxImageAdvanced = () => {\n+\t$( '.lp-metabox-field__image-advanced' ).each( ( i, element ) => {\n+\t\tlet lpImageFrame;\n+\n+\t\tconst imageGalleryIds = $( element ).find( '#lp-gallery-images-ids' );\n+\t\tconst listImages = $( element ).find( '.lp-metabox-field__image-advanced-images' );\n+\t\tconst btnUpload = $( element ).find( '.lp-metabox-field__image-advanced-upload > a' );\n+\n+\t\t$( btnUpload ).on( 'click', ( event ) => {\n+\t\t\tevent.preventDefault();\n+\n+\t\t\tif ( lpImageFrame ) {\n+\t\t\t\tlpImageFrame.open();\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tlpImageFrame = wp.media( {\n+\t\t\t\ttitle: btnUpload.data( 'choose' ),\n+\t\t\t\tbutton: {\n+\t\t\t\t\ttext: btnUpload.data( 'update' ),\n+\t\t\t\t},\n+\t\t\t\tstates: [\n+\t\t\t\t\tnew wp.media.controller.Library( {\n+\t\t\t\t\t\ttitle: btnUpload.data( 'choose' ),\n+\t\t\t\t\t\tfilterable: 'all',\n+\t\t\t\t\t\tmultiple: true,\n+\t\t\t\t\t} ),\n+\t\t\t\t],\n+\t\t\t} );\n+\n+\t\t\tlpImageFrame.on( 'select', function() {\n+\t\t\t\tconst selection = lpImageFrame.state().get( 'selection' );\n+\t\t\t\tlet attachmentIds = imageGalleryIds.val();\n+\n+\t\t\t\tselection.forEach( function( attachment ) {\n+\t\t\t\t\tattachment = attachment.toJSON();\n+\n+\t\t\t\t\tif ( attachment.id ) {\n+\t\t\t\t\t\tattachmentIds = attachmentIds ? attachmentIds + ',' + attachment.id : attachment.id;\n+\t\t\t\t\t\tconst attachmentImage = attachment.sizes && attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;\n+\n+\t\t\t\t\t\tlistImages.append(\n+\t\t\t\t\t\t\t'\u003Cli class=\"image\" data-attachment_id=\"' + attachment.id + '\">\u003Cimg src=\"' + attachmentImage +\n+\t\t\t\t\t\t'\" \u002F>\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\" title=\"' + btnUpload.data( 'delete' ) + '\">' +\n+\t\t\t\t\t\tbtnUpload.data( 'text' ) + '\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>'\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\n+\t\t\t\timageGalleryIds.val( attachmentIds );\n+\t\t\t} );\n+\n+\t\t\tlpImageFrame.open();\n+\t\t} );\n+\n+\t\tlistImages.sortable( {\n+\t\t\titems: 'li.image',\n+\t\t\tcursor: 'move',\n+\t\t\tscrollSensitivity: 40,\n+\t\t\tforcePlaceholderSize: true,\n+\t\t\tforceHelperSize: false,\n+\t\t\thelper: 'clone',\n+\t\t\topacity: 0.65,\n+\t\t\tplaceholder: 'lp-metabox-sortable-placeholder',\n+\t\t\tstart( event, ui ) {\n+\t\t\t\tui.item.css( 'background-color', '#f6f6f6' );\n+\t\t\t},\n+\t\t\tstop( event, ui ) {\n+\t\t\t\tui.item.removeAttr( 'style' );\n+\t\t\t},\n+\t\t\tupdate() {\n+\t\t\t\tlet attachmentIds = '';\n+\n+\t\t\t\tlistImages.find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\n+\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\n+\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\n+\t\t\t\t} );\n+\n+\t\t\t\timageGalleryIds.val( attachmentIds );\n+\t\t\t},\n+\t\t} );\n+\n+\t\t$( listImages ).find( 'li.image' ).each( ( i, ele ) => {\n+\t\t\tconst del = $( ele ).find( 'a.delete' );\n+\n+\t\t\tdel.on( 'click', () => {\n+\t\t\t\t$( ele ).remove();\n+\n+\t\t\t\tlet attachmentIds = '';\n+\n+\t\t\t\t$( listImages ).find( 'li.image' ).css( 'cursor', 'default' ).each( function() {\n+\t\t\t\t\tconst attachmentId = $( this ).attr( 'data-attachment_id' );\n+\t\t\t\t\tattachmentIds = attachmentIds + attachmentId + ',';\n+\t\t\t\t} );\n+\n+\t\t\t\timageGalleryIds.val( attachmentIds );\n+\n+\t\t\t\treturn false;\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+};\n+\n+const lpMetaboxCourseTabs = () => {\n+\t$( document.body ).on( 'lp-metabox-course-tab-panels', function() {\n+\t\t$( 'ul.lp-meta-box__course-tab__tabs' ).show();\n+\n+\t\t$( 'ul.lp-meta-box__course-tab__tabs a' ).on( 'click', function( e ) {\n+\t\t\te.preventDefault();\n+\n+\t\t\tconst panelWrap = $( this ).closest( 'div.lp-meta-box__course-tab' );\n+\n+\t\t\t$( 'ul.lp-meta-box__course-tab__tabs li', panelWrap ).removeClass( 'active' );\n+\n+\t\t\t$( this ).parent().addClass( 'active' );\n+\n+\t\t\t$( 'div.lp-meta-box-course-panels', panelWrap ).hide();\n+\n+\t\t\t$( $( this ).attr( 'href' ) ).show();\n+\t\t} );\n+\n+\t\t$( 'div.lp-meta-box__course-tab' ).each( function() {\n+\t\t\t$( this ).find( 'ul.lp-meta-box__course-tab__tabs li' ).eq( 0 ).find( 'a' ).trigger( 'click' );\n+\t\t} );\n+\t} ).trigger( 'lp-metabox-course-tab-panels' );\n+};\n+\n+\u002F\u002F use to show and hide field condition logic metabox.\n+\u002F*const lpMetaboxCondition = () => {\n+\tconst fields = document.querySelectorAll( '.lp-meta-box .form-field' );\n+\n+\tfields.forEach( ( field ) => {\n+\t\tif ( field.hasAttribute( 'data-show' ) && field.dataset.show ) {\n+\t\t\tlpMetaboxConditionType( field, field.dataset.show, 'show' );\n+\t\t} else if ( field.hasAttribute( 'data-hide' ) && field.dataset.hide ) {\n+\t\t\tlpMetaboxConditionType( field, field.dataset.hide, 'hide' );\n+\t\t}\n+\t} );\n+};*\u002F\n+\n+\u002F*const lpMetaboxConditionType = ( field, conditions, typeCondition = 'show' ) => {\n+\tconst condition = JSON.parse( conditions ),\n+\t\teles = document.querySelectorAll( `input[id^=\"${ condition[ 0 ] }\"]` ),\n+\t\tlogic = condition[ 1 ] === '=' ? '=' : '!=',\n+\t\tdataLogic = condition[ 2 ];\n+\n+\tconst switchCase = ( type, ele, target ) => {\n+\t\tswitch ( type ) {\n+\t\tcase 'checkbox':\n+\t\t\tlet val = dataLogic;\n+\n+\t\t\tif ( dataLogic === 'yes' || dataLogic === '1' || dataLogic === 1 || dataLogic === 'true' ) {\n+\t\t\t\tval = true;\n+\t\t\t} else if ( dataLogic === 'no' || dataLogic === '0' || dataLogic === 0 || dataLogic === 'false' ) {\n+\t\t\t\tval = false;\n+\t\t\t}\n+\n+\t\t\tif ( logic == '!=' && val !== Boolean( target ? target.checked : ele.checked ) ) {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\n+\t\t\t} else if ( logic == '=' && val == Boolean( target ? target.checked : ele.checked ) ) {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? '' : 'none';\n+\t\t\t} else {\n+\t\t\t\tfield.style.display = typeCondition === 'show' ? 'none' : '';\n+\t\t\t}\n+\t\t\tbreak;\n+\t\t}\n+\t};\n+\n+\teles.forEach( ( ele ) => {\n+\t\tconst type = ele.getAttribute( 'type' );\n+\n+\t\tswitchCase( type, ele );\n+\n+\t\tele.addEventListener( 'change', ( e ) => {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tswitchCase( type, ele, target );\n+\t\t} );\n+\t} );\n+};*\u002F\n+\n+\u002F** End Nhamdv code *\u002F\n+\n+const initTooltips = function initTooltips() {\n+\t$( '.learn-press-tooltip' ).each( function() {\n+\t\tconst $el = $( this ),\n+\t\t\targs = $.extend( { title: 'data-tooltip', offset: 10, gravity: 's' }, $el.data() );\n+\t\t$el.tipsy( args );\n+\t} );\n+};\n+\n+const initSelect2 = function initSelect2() {\n+\tif ( $.fn.select2 ) {\n+\t\tconst elSelect2 = $( '.lp-select-2 select' );\n+\t\telSelect2.select2( {\n+\t\t\tplaceholder: 'Select a value',\n+\t\t} );\n+\t\telSelect2.on( 'change.select2', function( e ) {\n+\t\t\tconst el = $( e.target );\n+\t\t\tconst val = el.val();\n+\n+\t\t\tif ( ! val.length ) {\n+\t\t\t\tel.val( null );\n+\t\t\t}\n+\t\t} );\n+\n+\t\t$( '.lp_autocomplete_metabox_field' ).each( function() {\n+\t\t\tconst dataAtts = $( this ).data( 'atts' );\n+\t\t\tlet action = dataAtts.action;\n+\n+\t\t\tif ( ! action ) {\n+\t\t\t\tswitch ( dataAtts.data ) {\n+\t\t\t\tcase 'users':\n+\t\t\t\t\taction = dataAtts.rest_url + 'wp\u002Fv2\u002Fusers';\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\taction = dataAtts.rest_url + 'wp\u002Fv2\u002F' + dataAtts.data;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$( this ).find( 'select' ).select2( {\n+\t\t\t\tplaceholder: dataAtts.placeholder ? dataAtts.placeholder : 'Select',\n+\t\t\t\tajax: {\n+\t\t\t\t\turl: action,\n+\t\t\t\t\tdataType: 'json',\n+\t\t\t\t\tdelay: 250,\n+\t\t\t\t\tbeforeSend( xhr ) {\n+\t\t\t\t\t\txhr.setRequestHeader( 'X-WP-Nonce', dataAtts.nonce );\n+\t\t\t\t\t},\n+\t\t\t\t\tdata( params ) {\n+\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\tsearch: params.term,\n+\t\t\t\t\t\t};\n+\t\t\t\t\t},\n+\t\t\t\t\tprocessResults( data ) {\n+\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\tresults: data.map( ( item ) => {\n+\t\t\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\t\t\tid: item.id,\n+\t\t\t\t\t\t\t\t\ttext: item.title && item.title.rendered ? item.title.rendered : item.name,\n+\t\t\t\t\t\t\t\t};\n+\t\t\t\t\t\t\t} ),\n+\t\t\t\t\t\t};\n+\t\t\t\t\t},\n+\t\t\t\t\tcache: true,\n+\t\t\t\t},\n+\t\t\t\tminimumInputLength: 2,\n+\t\t\t} );\n+\t\t} );\n+\t}\n+};\n+\n+const initSingleCoursePermalink = function initSingleCoursePermalink() {\n+\t$doc\n+\t\t.on( 'change', '.learn-press-single-course-permalink input[type=\"radio\"]', function() {\n+\t\t\tconst $check = $( this ),\n+\t\t\t\t$row = $check.closest( '.learn-press-single-course-permalink' );\n+\t\t\tif ( $row.hasClass( 'custom-base' ) ) {\n+\t\t\t\t$row.find( 'input[type=\"text\"]' ).prop( 'readonly', false );\n+\t\t\t} else {\n+\t\t\t\t$row.siblings( '.custom-base' ).find( 'input[type=\"text\"]' ).prop( 'readonly', true );\n+\t\t\t}\n+\t\t} )\n+\t\t.on( 'change', 'input.learn-press-course-base', function() {\n+\t\t\t$( '#course_permalink_structure' ).val( $( this ).val() );\n+\t\t} )\n+\t\t.on( 'focus', '#course_permalink_structure', function() {\n+\t\t\t$( '#learn_press_custom_permalink' ).click();\n+\t\t} )\n+\t\t.on( 'change', '#learn_press_courses_page_id', function() {\n+\t\t\t$( 'tr.learn-press-courses-page-id' ).toggleClass( 'hide-if-js', ! parseInt( this.value ) );\n+\t\t} );\n+};\n+\n+const togglePaymentStatus = function togglePaymentStatus( e ) {\n+\te.preventDefault();\n+\tconst $row = $( this ).closest( 'tr' ),\n+\t\t$button = $( this ),\n+\t\tstatus = $row.find( '.status' ).hasClass( 'enabled' ) ? 'no' : 'yes';\n+\n+\t$.ajax( {\n+\t\turl: '',\n+\t\tdata: {\n+\t\t\t'lp-ajax': 'update-payment-status',\n+\t\t\tstatus,\n+\t\t\tid: $row.data( 'payment' ),\n+\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\n+\t\t},\n+\t\tsuccess( response ) {\n+\t\t\tresponse = lpAjaxParseJsonOld( response );\n+\t\t\tfor ( const i in response ) {\n+\t\t\t\t$( '#payment-' + i + ' .status' ).toggleClass( 'enabled', response[ i ] );\n+\t\t\t}\n+\t\t},\n+\t} );\n+};\n+\n+const updateEmailStatus = function updateEmailStatus() {\n+\t( function() {\n+\t\t$.post( {\n+\t\t\turl: window.location.href,\n+\t\t\tdata: {\n+\t\t\t\t'lp-ajax': 'update_email_status',\n+\t\t\t\tstatus: $( this ).parent().hasClass( 'enabled' ) ? 'no' : 'yes',\n+\t\t\t\tid: $( this ).data( 'id' ),\n+\t\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\n+\t\t\t},\n+\t\t\tdataType: 'text',\n+\t\t\tsuccess: $.proxy( function( res ) {\n+\t\t\t\tres = lpAjaxParseJsonOld( res );\n+\t\t\t\tfor ( const i in res ) {\n+\t\t\t\t\t$( '#email-' + i + ' .status' ).toggleClass( 'enabled', res[ i ] );\n+\t\t\t\t}\n+\t\t\t}, this ),\n+\t\t} );\n+\t} ).apply( this );\n+};\n+\n+const lpMetaboxsalePriceDate = () => {\n+\t\u002F\u002F Don't run in LearnPress Frontend Editor Add-on.\n+\tif ( ! $( '#course-settings' ).length ) {\n+\t\treturn;\n+\t}\n+\n+\t$( '.lp_sale_dates_fields' ).each( function() {\n+\t\tconst wrap = $( this ).closest( '#price_course_data' );\n+\t\tlet saleScheduleSet = false;\n+\n+\t\t$( this ).find( 'input' ).each( function() {\n+\t\t\tif ( '' !== $( this ).val() ) {\n+\t\t\t\tsaleScheduleSet = true;\n+\t\t\t}\n+\t\t} );\n+\n+\t\tif ( saleScheduleSet ) {\n+\t\t\twrap.find( '.lp_sale_price_schedule' ).hide();\n+\t\t\twrap.find( '.lp_sale_dates_fields' ).show();\n+\t\t} else {\n+\t\t\twrap.find( '.lp_sale_price_schedule' ).show();\n+\t\t\twrap.find( '.lp_sale_dates_fields' ).hide();\n+\t\t}\n+\t} );\n+\n+\t$( '.lp-meta-box-course-panels' ).on( 'click', '.lp_sale_price_schedule', function() {\n+\t\tconst wrap = $( this ).closest( '#price_course_data' );\n+\n+\t\t$( this ).hide();\n+\n+\t\twrap.find( '.lp_cancel_sale_schedule' ).show();\n+\t\twrap.find( '.lp_sale_dates_fields' ).show();\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( '.lp-meta-box-course-panels' ).on( 'click', '.lp_cancel_sale_schedule', function() {\n+\t\tconst wrap = $( this ).closest( 'div.lp-meta-box-course-panels' );\n+\n+\t\t$( this ).hide();\n+\n+\t\twrap.find( '.lp_sale_price_schedule' ).show();\n+\t\twrap.find( '.lp_sale_dates_fields' ).hide();\n+\t\twrap.find( '.lp_sale_dates_fields' ).find( 'input' ).val( '' );\n+\n+\t\treturn false;\n+\t} );\n+\n+\t$( document ).on( 'input', '#price_course_data', function( e ) {\n+\t\tconst $this = $( this ),\n+\t\t\tregularPrice = $( '.lp_meta_box_regular_price' ),\n+\t\t\tsalePrice = $( '.lp_meta_box_sale_price' ),\n+\t\t\t$target = $( e.target ).attr( 'id' );\n+\n+\t\t$this.find( '.learn-press-tip-floating' ).remove();\n+\n+\t\tif ( parseInt( salePrice.val() ) > parseInt( regularPrice.val() ) ) {\n+\t\t\tif ( $target === '_lp_price' ) {\n+\t\t\t\tregularPrice.parent( '.form-field' ).append( '\u003Cdiv class=\"learn-press-tip-floating\">' + lpAdminCourseEditorSettings.i18n.notice_price + '\u003C\u002Fdiv>' );\n+\t\t\t} else if ( $target === '_lp_sale_price' ) {\n+\t\t\t\tsalePrice.parent( '.form-field' ).append( '\u003Cdiv class=\"learn-press-tip-floating\">' + lpAdminCourseEditorSettings.i18n.notice_sale_price + '\u003C\u002Fdiv>' );\n+\t\t\t}\n+\t\t}\n+\t} );\n+\n+\t\u002F*const datePickerSelect = function( datepicker ) {\n+\t\tconst option = $( datepicker ).is( '#_lp_sale_start' ) ? 'minDate' : 'maxDate',\n+\t\t\totherDateField = 'minDate' === option ? $( '#_lp_sale_end' ) : $( '#_lp_sale_start' ),\n+\t\t\tdate = $( datepicker ).datetimepicker( 'getDate' );\n+\n+\t\t$( otherDateField ).datetimepicker( 'option', option, date );\n+\t\t$( datepicker ).trigger( 'change' );\n+\t};\n+\n+\t$( '.lp_sale_dates_fields' ).each( function() {\n+\t\t$( this ).find( 'input' ).datetimepicker( {\n+\t\t\ttimeFormat: 'HH:mm',\n+\t\t\tseparator: ' ',\n+\t\t\tdateFormat: 'yy-mm-dd',\n+\t\t\tshowButtonPanel: true,\n+\t\t\tonSelect() {\n+\t\t\t\tdatePickerSelect( $( this ) );\n+\t\t\t},\n+\t\t} );\n+\n+\t\t$( this ).find( 'input' ).each( function() {\n+\t\t\tdatePickerSelect( $( this ) );\n+\t\t} );\n+\t} );*\u002F\n+};\n+\n+const lpHidePassingGrade = () => {\n+\tconst listHides = [ 'evaluate_final_quiz', 'evaluate_final_assignment' ];\n+\tconst inputLists = document.querySelectorAll( 'input[type=radio][name=_lp_course_result]' );\n+\n+\t[ ...inputLists ].map( ( ele, i ) => {\n+\t\tif ( ele.checked && listHides.includes( ele.value ) ) {\n+\t\t\t$( '._lp_passing_condition_field' ).hide();\n+\t\t}\n+\n+\t\treturn null;\n+\t} );\n+\n+\t$( 'input[type=radio][name=_lp_course_result]' ).on( 'change', function( e ) {\n+\t\tif ( listHides.includes( e.target.value ) ) {\n+\t\t\t$( '._lp_passing_condition_field' ).hide();\n+\t\t} else {\n+\t\t\t$( '._lp_passing_condition_field' ).show();\n+\t\t}\n+\t} );\n+};\n+\n+const callbackFilterTemplates = function callbackFilterTemplates() {\n+\tconst $link = $( this );\n+\n+\tif ( $link.hasClass( 'current' ) ) {\n+\t\treturn false;\n+\t}\n+\n+\tconst $templatesList = $( '#learn-press-template-files' ),\n+\t\t$templates = $templatesList.find( 'tr[data-template]' ),\n+\t\ttemplate = $link.data( 'template' ),\n+\t\tfilter = $link.data( 'filter' );\n+\n+\t$link.addClass( 'current' ).siblings( 'a' ).removeClass( 'current' );\n+\n+\tif ( ! template ) {\n+\t\tif ( ! filter ) {\n+\t\t\t$templates.removeClass( 'hide-if-js' );\n+\t\t} else {\n+\t\t\t$templates.map( function() {\n+\t\t\t\t$( this ).toggleClass( 'hide-if-js', $( this ).data( 'filter-' + filter ) !== 'yes' );\n+\t\t\t} );\n+\t\t}\n+\t} else {\n+\t\t$templates.map( function() {\n+\t\t\t$( this ).toggleClass( 'hide-if-js', $( this ).data( 'template' ) !== template );\n+\t\t} );\n+\t}\n+\n+\t$( '#learn-press-no-templates' ).toggleClass( 'hide-if-js', !! $templatesList.find( 'tr.template-row:not(.hide-if-js):first' ).length );\n+\n+\treturn false;\n+};\n+\n+const toggleEmails = function toggleEmails( e ) {\n+\te.preventDefault();\n+\tconst $button = $( this ),\n+\t\tstatus = $button.data( 'status' );\n+\n+\t$.ajax( {\n+\t\turl: '',\n+\t\tdata: {\n+\t\t\t'lp-ajax': 'update_email_status',\n+\t\t\tnonce: $( 'input[name=lp-settings-nonce]' ).val(),\n+\t\t\tstatus,\n+\t\t},\n+\t\tsuccess( response ) {\n+\t\t\tresponse = lpAjaxParseJsonOld( response );\n+\t\t\tfor ( const i in response ) {\n+\t\t\t\t$( '#email-' + i + ' .status' ).toggleClass( 'enabled', response[ i ] );\n+\t\t\t}\n+\t\t},\n+\t} );\n+};\n+\n+const onReady = function onReady() {\n+\tmakePaymentsSortable();\n+\tinitSelect2();\n+\tinitTooltips();\n+\tinitSingleCoursePermalink();\n+\n+\t\u002F\u002F lp Metabox in LP4.\n+\tlpMetaboxCourseTabs();\n+\tlpMetaboxCustomFields();\n+\tlpMetaboxColorPicker();\n+\tlpMetaboxImageAdvanced();\n+\tlpMetaboxImage();\n+\tlpMetaboxsalePriceDate();\n+\tlpMetaboxExtraInfo();\n+\tlpHidePassingGrade();\n+\tlpGetFinalQuiz();\n+\t\u002F\u002FlpMetaboxCondition();\n+\tlpMetaboxRepeaterField();\n+\n+\t$( document )\n+\t\t.on( 'click', '.learn-press-payments .status .dashicons', togglePaymentStatus )\n+\t\t.on( 'click', '.change-email-status', updateEmailStatus )\n+\t\t.on( 'click', '.learn-press-filter-template', callbackFilterTemplates )\n+\t\t.on( 'click', '#learn-press-enable-emails, #learn-press-disable-emails', toggleEmails );\n+};\n+\n+$( document ).ready( onReady );\n+\n+\u002F\u002F Events\n+document.addEventListener( 'keydown', function( e ) {\n+\tconst target = e.target;\n+\tif ( e.key === 'Enter' || e.keyCode === 13 ) {\n+\t\t\u002F\u002F When enter on input on Extra information Options, blur it.\n+\t\tif ( target.classList.contains( 'lp_course_extra_meta_box__input' ) ) {\n+\t\t\te.preventDefault();\n+\t\t\ttarget.blur();\n+\t\t} else if ( target.tagName === 'INPUT' ) {\n+\t\t\tif ( target.closest( '.lp_course_faq_meta_box__field' ) ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\ttarget.blur();\n+\t\t\t}\n+\t\t}\n+\t}\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flist-students-enrolled.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,371 +1,371 @@\n-\u002F**\r\n- * List Students Enrolled Script\r\n- *\r\n- * Handles filter and search interactions for the enrolled students table.\r\n- * Pagination is handled by loadAJAX.js clickNumberPage (via .page-numbers class).\r\n- *\r\n- * @since 4.3.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-\r\n-export class ListStudentsEnrolled {\r\n-\tconstructor() {\r\n-\t\tthis.instructorId = null;\r\n-\t\tthis.elContainer = null;\r\n-\t\tthis.isRequesting = false;\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telContainer: '#lp-enrolled-students',\r\n-\t\telForm: '.lp-enrolled-students-form',\r\n-\t\telLPTarget: '.lp-target',\r\n-\t\telCourseNameInput: '.lp-enrolled-filter-course-name',\r\n-\t\telCourseIdInput: '#lp-enrolled-filter-course-id',\r\n-\t\telCourseList: '#lp-enrolled-course-list',\r\n-\t\telSearchInput: '.lp-enrolled-search-input',\r\n-\t\telStartDateInput: '.lp-enrolled-filter-start-date',\r\n-\t\telEndDateInput: '.lp-enrolled-filter-end-date',\r\n-\t\telBtnSearch: '.lp-enrolled-btn-search',\r\n-\t\telBtnClear: '.lp-enrolled-btn-clear',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tthis.elContainer = document.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elContainer\r\n-\t\t);\r\n-\t\tif ( ! this.elContainer ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elLPTarget = this.elContainer.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elLPTarget\r\n-\t\t);\r\n-\t\tconst ajaxHandle = this.getAjaxHandle();\r\n-\t\tif ( elLPTarget && ajaxHandle ) {\r\n-\t\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\r\n-\t\t\tif ( dataSend && dataSend.args ) {\r\n-\t\t\t\tthis.instructorId = dataSend.args.instructor_id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tthis.events();\r\n-\t}\r\n-\r\n-\tevents() {\r\n-\t\tif ( ListStudentsEnrolled._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tListStudentsEnrolled._loadedEvents = this;\r\n-\r\n-\t\t\u002F\u002F Search\u002FClear button click.\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elBtnSearch,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.searchStudents.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elBtnClear,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.clearFilters.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\t\u002F\u002F Search on Enter key.\r\n-\t\tlpUtils.eventHandlers( 'keydown', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elSearchInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.triggerBtnSearch.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elCourseNameInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.triggerBtnSearch.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elStartDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.triggerBtnSearch.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elEndDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.triggerBtnSearch.name,\r\n-\t\t\t\tcheckIsEventEnter: true,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\tlpUtils.eventHandlers( 'change', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elStartDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkDatesRange.name,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: ListStudentsEnrolled.selectors.elEndDateInput,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t\tcallBack: this.checkDatesRange.name,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Click button search.\r\n-\ttriggerBtnSearch() {\r\n-\t\tconst buttonSearch = this.elContainer.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elBtnSearch\r\n-\t\t);\r\n-\t\tif ( buttonSearch ) {\r\n-\t\t\tbuttonSearch.click();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Ensure start date is not after end date and vice versa. If invalid, adjust the other date to match.\r\n-\tcheckDatesRange( args ) {\r\n-\t\tconst { e } = args;\r\n-\t\tconst elInput = e?.target;\r\n-\t\tif ( ! elInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elForm = elInput.closest( ListStudentsEnrolled.selectors.elForm );\r\n-\t\tif ( ! elForm ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst startDateInput = elForm.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elStartDateInput,\r\n-\t\t);\r\n-\t\tconst endDateInput = elForm.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elEndDateInput,\r\n-\t\t);\r\n-\r\n-\t\tif ( elInput === startDateInput ) {\r\n-\t\t\tif ( startDateInput.value ) {\r\n-\t\t\t\tendDateInput.min = startDateInput.value;\r\n-\t\t\t\tif ( endDateInput.value && endDateInput.value \u003C startDateInput.value ) {\r\n-\t\t\t\t\tendDateInput.value = startDateInput.value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tendDateInput.min = '';\r\n-\t\t\t}\r\n-\t\t} else if ( elInput === endDateInput ) {\r\n-\t\t\tif ( endDateInput.value ) {\r\n-\t\t\t\tstartDateInput.max = endDateInput.value;\r\n-\t\t\t\tif ( startDateInput.value && startDateInput.value > endDateInput.value ) {\r\n-\t\t\t\t\tstartDateInput.value = endDateInput.value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tstartDateInput.max = '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tsetButtonLoadingState( btn, isLoading ) {\r\n-\t\tif ( ! btn ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpUtils.lpSetLoadingEl( btn, isLoading ? 1 : 0 );\r\n-\t\tbtn.disabled = !! isLoading;\r\n-\t}\r\n-\r\n-\tgetAjaxHandle() {\r\n-\t\tconst ajaxHandle = window.lpAJAXG;\r\n-\t\tif (\r\n-\t\t\t! ajaxHandle ||\r\n-\t\t\ttypeof ajaxHandle.getDataSetCurrent !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.setDataSetCurrent !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.showHideLoading !== 'function' ||\r\n-\t\t\ttypeof ajaxHandle.fetchAJAX !== 'function'\r\n-\t\t) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn ajaxHandle;\r\n-\t}\r\n-\r\n-\tsyncCourseIdFromName( elForm ) {\r\n-\t\tconst courseIdInput = elForm?.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elCourseIdInput\r\n-\t\t);\r\n-\t\tif ( ! courseIdInput ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tcourseIdInput.value = '0';\r\n-\r\n-\t\tconst courseNameInput = elForm.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elCourseNameInput\r\n-\t\t);\r\n-\t\tconst datalist = elForm.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elCourseList\r\n-\t\t);\r\n-\t\tconst courseName = courseNameInput?.value.trim() || '';\r\n-\t\tif ( ! courseName || ! datalist ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst selectedOption = Array.from( datalist.options || [] ).find(\r\n-\t\t\t( option ) => option.value.trim() === courseName\r\n-\t\t);\r\n-\t\tif ( selectedOption ) {\r\n-\t\t\tcourseIdInput.value = selectedOption.dataset.courseId || '0';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tgetFilterArgsFromForm( elForm, dataArgs = {} ) {\r\n-\t\tthis.syncCourseIdFromName( elForm );\r\n-\t\treturn lpUtils.mergeDataWithDatForm( elForm, dataArgs );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Search students: update args.search, re-fetch.\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tsearchStudents( args ) {\r\n-\t\tconst { e } = args;\r\n-\t\tif ( e ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t}\r\n-\t\tconst btn = args?.target?.closest(\r\n-\t\t\tListStudentsEnrolled.selectors.elBtnSearch\r\n-\t\t);\r\n-\t\tif ( btn ) {\r\n-\t\t\tif (\r\n-\t\t\t\tthis.isRequesting ||\r\n-\t\t\t\tbtn.classList.contains( 'loading' ) ||\r\n-\t\t\t\tbtn.disabled\r\n-\t\t\t) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t} else if ( this.isRequesting ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elForm = btn.closest( ListStudentsEnrolled.selectors.elForm );\r\n-\t\tconst elLPTarget = this.elContainer.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elLPTarget\r\n-\t\t);\r\n-\t\tif ( ! elLPTarget || ! elForm ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst ajaxHandle = this.getAjaxHandle();\r\n-\t\tif ( ! ajaxHandle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.setButtonLoadingState( btn, true );\r\n-\r\n-\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\r\n-\t\tdataSend.args = this.getFilterArgsFromForm(\r\n-\t\t\telForm,\r\n-\t\t\tdataSend.args || {}\r\n-\t\t);\r\n-\t\tdataSend.args.paged = 1;\r\n-\t\tajaxHandle.setDataSetCurrent( elLPTarget, dataSend );\r\n-\r\n-\t\tthis.reloadContent( elLPTarget, dataSend, btn );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear all filters and reload default data.\r\n-\t * @param args\r\n-\t *\u002F\r\n-\tclearFilters( args ) {\r\n-\t\tconst { e } = args;\r\n-\t\tif ( e ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t}\r\n-\t\tconst btn = args?.target?.closest(\r\n-\t\t\tListStudentsEnrolled.selectors.elBtnClear\r\n-\t\t);\r\n-\t\tif ( btn ) {\r\n-\t\t\tif (\r\n-\t\t\t\tthis.isRequesting ||\r\n-\t\t\t\tbtn.classList.contains( 'loading' ) ||\r\n-\t\t\t\tbtn.disabled\r\n-\t\t\t) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t} else if ( this.isRequesting ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elForm = btn.closest( ListStudentsEnrolled.selectors.elForm );\r\n-\t\tconst elLPTarget = this.elContainer.querySelector(\r\n-\t\t\tListStudentsEnrolled.selectors.elLPTarget\r\n-\t\t);\r\n-\t\tif ( ! elLPTarget || ! elForm ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst ajaxHandle = this.getAjaxHandle();\r\n-\t\tif ( ! ajaxHandle ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.setButtonLoadingState( btn, true );\r\n-\r\n-\t\telForm.reset();\r\n-\t\tthis.syncCourseIdFromName( elForm );\r\n-\r\n-\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\r\n-\t\tdataSend.args = lpUtils.mergeDataWithDatForm(\r\n-\t\t\telForm,\r\n-\t\t\tdataSend.args || {}\r\n-\t\t);\r\n-\t\tdataSend.args.paged = 1;\r\n-\t\tajaxHandle.setDataSetCurrent( elLPTarget, dataSend );\r\n-\r\n-\t\tthis.reloadContent( elLPTarget, dataSend, btn );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Shared reload helper: loading indicator + AJAX fetch.\r\n-\t * @param elLPTarget\r\n-\t * @param dataSend\r\n-\t * @param btn\r\n-\t *\u002F\r\n-\treloadContent( elLPTarget, dataSend, btn = null ) {\r\n-\t\tconst ajaxHandle = this.getAjaxHandle();\r\n-\t\tif ( ! ajaxHandle ) {\r\n-\t\t\tthis.isRequesting = false;\r\n-\t\t\tthis.setButtonLoadingState( btn, false );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tthis.isRequesting = true;\r\n-\t\tajaxHandle.showHideLoading( elLPTarget, 1 );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { status, data } = response;\r\n-\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\telLPTarget.innerHTML = data.content;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => console.error( error ),\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tthis.isRequesting = false;\r\n-\t\t\t\tajaxHandle.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\tthis.setButtonLoadingState( btn, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tajaxHandle.fetchAJAX( dataSend, callBack );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F Auto-initialize when DOM is available (for standalone page load).\r\n-const listStudentsEnrolled = new ListStudentsEnrolled();\r\n-\r\n-lpUtils.lpOnElementReady( ListStudentsEnrolled.selectors.elContainer, () => {\r\n-\tlistStudentsEnrolled.init();\r\n-} );\r\n+\u002F**\n+ * List Students Enrolled Script\n+ *\n+ * Handles filter and search interactions for the enrolled students table.\n+ * Pagination is handled by loadAJAX.js clickNumberPage (via .page-numbers class).\n+ *\n+ * @since 4.3.3\n+ * @version 1.0.0\n+ *\u002F\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+\n+export class ListStudentsEnrolled {\n+\tconstructor() {\n+\t\tthis.instructorId = null;\n+\t\tthis.elContainer = null;\n+\t\tthis.isRequesting = false;\n+\t}\n+\n+\tstatic selectors = {\n+\t\telContainer: '#lp-enrolled-students',\n+\t\telForm: '.lp-enrolled-students-form',\n+\t\telLPTarget: '.lp-target',\n+\t\telCourseNameInput: '.lp-enrolled-filter-course-name',\n+\t\telCourseIdInput: '#lp-enrolled-filter-course-id',\n+\t\telCourseList: '#lp-enrolled-course-list',\n+\t\telSearchInput: '.lp-enrolled-search-input',\n+\t\telStartDateInput: '.lp-enrolled-filter-start-date',\n+\t\telEndDateInput: '.lp-enrolled-filter-end-date',\n+\t\telBtnSearch: '.lp-enrolled-btn-search',\n+\t\telBtnClear: '.lp-enrolled-btn-clear',\n+\t};\n+\n+\tinit() {\n+\t\tthis.elContainer = document.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elContainer\n+\t\t);\n+\t\tif ( ! this.elContainer ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elLPTarget = this.elContainer.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elLPTarget\n+\t\t);\n+\t\tconst ajaxHandle = this.getAjaxHandle();\n+\t\tif ( elLPTarget && ajaxHandle ) {\n+\t\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\n+\t\t\tif ( dataSend && dataSend.args ) {\n+\t\t\t\tthis.instructorId = dataSend.args.instructor_id;\n+\t\t\t}\n+\t\t}\n+\n+\t\tthis.events();\n+\t}\n+\n+\tevents() {\n+\t\tif ( ListStudentsEnrolled._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tListStudentsEnrolled._loadedEvents = this;\n+\n+\t\t\u002F\u002F Search\u002FClear button click.\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elBtnSearch,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.searchStudents.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elBtnClear,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.clearFilters.name,\n+\t\t\t},\n+\t\t] );\n+\n+\t\t\u002F\u002F Search on Enter key.\n+\t\tlpUtils.eventHandlers( 'keydown', [\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elSearchInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.triggerBtnSearch.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elCourseNameInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.triggerBtnSearch.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elStartDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.triggerBtnSearch.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elEndDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.triggerBtnSearch.name,\n+\t\t\t\tcheckIsEventEnter: true,\n+\t\t\t},\n+\t\t] );\n+\n+\t\tlpUtils.eventHandlers( 'change', [\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elStartDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkDatesRange.name,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: ListStudentsEnrolled.selectors.elEndDateInput,\n+\t\t\t\tclass: this,\n+\t\t\t\tcallBack: this.checkDatesRange.name,\n+\t\t\t},\n+\t\t] );\n+\t}\n+\n+\t\u002F\u002F Click button search.\n+\ttriggerBtnSearch() {\n+\t\tconst buttonSearch = this.elContainer.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elBtnSearch\n+\t\t);\n+\t\tif ( buttonSearch ) {\n+\t\t\tbuttonSearch.click();\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Ensure start date is not after end date and vice versa. If invalid, adjust the other date to match.\n+\tcheckDatesRange( args ) {\n+\t\tconst { e } = args;\n+\t\tconst elInput = e?.target;\n+\t\tif ( ! elInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elForm = elInput.closest( ListStudentsEnrolled.selectors.elForm );\n+\t\tif ( ! elForm ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst startDateInput = elForm.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elStartDateInput,\n+\t\t);\n+\t\tconst endDateInput = elForm.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elEndDateInput,\n+\t\t);\n+\n+\t\tif ( elInput === startDateInput ) {\n+\t\t\tif ( startDateInput.value ) {\n+\t\t\t\tendDateInput.min = startDateInput.value;\n+\t\t\t\tif ( endDateInput.value && endDateInput.value \u003C startDateInput.value ) {\n+\t\t\t\t\tendDateInput.value = startDateInput.value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tendDateInput.min = '';\n+\t\t\t}\n+\t\t} else if ( elInput === endDateInput ) {\n+\t\t\tif ( endDateInput.value ) {\n+\t\t\t\tstartDateInput.max = endDateInput.value;\n+\t\t\t\tif ( startDateInput.value && startDateInput.value > endDateInput.value ) {\n+\t\t\t\t\tstartDateInput.value = endDateInput.value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tstartDateInput.max = '';\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tsetButtonLoadingState( btn, isLoading ) {\n+\t\tif ( ! btn ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpUtils.lpSetLoadingEl( btn, isLoading ? 1 : 0 );\n+\t\tbtn.disabled = !! isLoading;\n+\t}\n+\n+\tgetAjaxHandle() {\n+\t\tconst ajaxHandle = window.lpAJAXG;\n+\t\tif (\n+\t\t\t! ajaxHandle ||\n+\t\t\ttypeof ajaxHandle.getDataSetCurrent !== 'function' ||\n+\t\t\ttypeof ajaxHandle.setDataSetCurrent !== 'function' ||\n+\t\t\ttypeof ajaxHandle.showHideLoading !== 'function' ||\n+\t\t\ttypeof ajaxHandle.fetchAJAX !== 'function'\n+\t\t) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn ajaxHandle;\n+\t}\n+\n+\tsyncCourseIdFromName( elForm ) {\n+\t\tconst courseIdInput = elForm?.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elCourseIdInput\n+\t\t);\n+\t\tif ( ! courseIdInput ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tcourseIdInput.value = '0';\n+\n+\t\tconst courseNameInput = elForm.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elCourseNameInput\n+\t\t);\n+\t\tconst datalist = elForm.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elCourseList\n+\t\t);\n+\t\tconst courseName = courseNameInput?.value.trim() || '';\n+\t\tif ( ! courseName || ! datalist ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst selectedOption = Array.from( datalist.options || [] ).find(\n+\t\t\t( option ) => option.value.trim() === courseName\n+\t\t);\n+\t\tif ( selectedOption ) {\n+\t\t\tcourseIdInput.value = selectedOption.dataset.courseId || '0';\n+\t\t}\n+\t}\n+\n+\tgetFilterArgsFromForm( elForm, dataArgs = {} ) {\n+\t\tthis.syncCourseIdFromName( elForm );\n+\t\treturn lpUtils.mergeDataWithDatForm( elForm, dataArgs );\n+\t}\n+\n+\t\u002F**\n+\t * Search students: update args.search, re-fetch.\n+\t * @param args\n+\t *\u002F\n+\tsearchStudents( args ) {\n+\t\tconst { e } = args;\n+\t\tif ( e ) {\n+\t\t\te.preventDefault();\n+\t\t}\n+\t\tconst btn = args?.target?.closest(\n+\t\t\tListStudentsEnrolled.selectors.elBtnSearch\n+\t\t);\n+\t\tif ( btn ) {\n+\t\t\tif (\n+\t\t\t\tthis.isRequesting ||\n+\t\t\t\tbtn.classList.contains( 'loading' ) ||\n+\t\t\t\tbtn.disabled\n+\t\t\t) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t} else if ( this.isRequesting ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elForm = btn.closest( ListStudentsEnrolled.selectors.elForm );\n+\t\tconst elLPTarget = this.elContainer.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elLPTarget\n+\t\t);\n+\t\tif ( ! elLPTarget || ! elForm ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst ajaxHandle = this.getAjaxHandle();\n+\t\tif ( ! ajaxHandle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.setButtonLoadingState( btn, true );\n+\n+\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\n+\t\tdataSend.args = this.getFilterArgsFromForm(\n+\t\t\telForm,\n+\t\t\tdataSend.args || {}\n+\t\t);\n+\t\tdataSend.args.paged = 1;\n+\t\tajaxHandle.setDataSetCurrent( elLPTarget, dataSend );\n+\n+\t\tthis.reloadContent( elLPTarget, dataSend, btn );\n+\t}\n+\n+\t\u002F**\n+\t * Clear all filters and reload default data.\n+\t * @param args\n+\t *\u002F\n+\tclearFilters( args ) {\n+\t\tconst { e } = args;\n+\t\tif ( e ) {\n+\t\t\te.preventDefault();\n+\t\t}\n+\t\tconst btn = args?.target?.closest(\n+\t\t\tListStudentsEnrolled.selectors.elBtnClear\n+\t\t);\n+\t\tif ( btn ) {\n+\t\t\tif (\n+\t\t\t\tthis.isRequesting ||\n+\t\t\t\tbtn.classList.contains( 'loading' ) ||\n+\t\t\t\tbtn.disabled\n+\t\t\t) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t} else if ( this.isRequesting ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elForm = btn.closest( ListStudentsEnrolled.selectors.elForm );\n+\t\tconst elLPTarget = this.elContainer.querySelector(\n+\t\t\tListStudentsEnrolled.selectors.elLPTarget\n+\t\t);\n+\t\tif ( ! elLPTarget || ! elForm ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst ajaxHandle = this.getAjaxHandle();\n+\t\tif ( ! ajaxHandle ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.setButtonLoadingState( btn, true );\n+\n+\t\telForm.reset();\n+\t\tthis.syncCourseIdFromName( elForm );\n+\n+\t\tconst dataSend = ajaxHandle.getDataSetCurrent( elLPTarget );\n+\t\tdataSend.args = lpUtils.mergeDataWithDatForm(\n+\t\t\telForm,\n+\t\t\tdataSend.args || {}\n+\t\t);\n+\t\tdataSend.args.paged = 1;\n+\t\tajaxHandle.setDataSetCurrent( elLPTarget, dataSend );\n+\n+\t\tthis.reloadContent( elLPTarget, dataSend, btn );\n+\t}\n+\n+\t\u002F**\n+\t * Shared reload helper: loading indicator + AJAX fetch.\n+\t * @param elLPTarget\n+\t * @param dataSend\n+\t * @param btn\n+\t *\u002F\n+\treloadContent( elLPTarget, dataSend, btn = null ) {\n+\t\tconst ajaxHandle = this.getAjaxHandle();\n+\t\tif ( ! ajaxHandle ) {\n+\t\t\tthis.isRequesting = false;\n+\t\t\tthis.setButtonLoadingState( btn, false );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tthis.isRequesting = true;\n+\t\tajaxHandle.showHideLoading( elLPTarget, 1 );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { status, data } = response;\n+\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\telLPTarget.innerHTML = data.content;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => console.error( error ),\n+\t\t\tcompleted: () => {\n+\t\t\t\tthis.isRequesting = false;\n+\t\t\t\tajaxHandle.showHideLoading( elLPTarget, 0 );\n+\t\t\t\tthis.setButtonLoadingState( btn, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\tajaxHandle.fetchAJAX( dataSend, callBack );\n+\t}\n+}\n+\n+\u002F\u002F Auto-initialize when DOM is available (for standalone page load).\n+const listStudentsEnrolled = new ListStudentsEnrolled();\n+\n+lpUtils.lpOnElementReady( ListStudentsEnrolled.selectors.elContainer, () => {\n+\tlistStudentsEnrolled.init();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flp-duplicate-post.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flp-duplicate-post.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flp-duplicate-post.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Flp-duplicate-post.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-( function( $ ) {\r\n-\tconst duplicatePost = function duplicatePost( e ) {\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst _self = $( this ),\r\n-\t\t\t_id = _self.data( 'post-id' );\r\n-\r\n-\t\t$.ajax( {\r\n-\t\t\turl: '',\r\n-\t\t\tdata: {\r\n-\t\t\t\t'lp-ajax': 'duplicator',\r\n-\t\t\t\tid: _id,\r\n-\t\t\t\tnonce: lpGlobalSettings.nonce,\r\n-\t\t\t},\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\tresponse = LP.parseJSON( response );\r\n-\r\n-\t\t\t\tif ( response.success ) {\r\n-\t\t\t\t\twindow.location.href = response.data;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\talert( response.data );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t$( function() {\r\n-\t\t$( document ).on( 'click', '.lp-duplicate-row-action .lp-duplicate-post', duplicatePost );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\tconst duplicatePost = function duplicatePost( e ) {\n+\t\te.preventDefault();\n+\n+\t\tconst _self = $( this ),\n+\t\t\t_id = _self.data( 'post-id' );\n+\n+\t\t$.ajax( {\n+\t\t\turl: '',\n+\t\t\tdata: {\n+\t\t\t\t'lp-ajax': 'duplicator',\n+\t\t\t\tid: _id,\n+\t\t\t\tnonce: lpGlobalSettings.nonce,\n+\t\t\t},\n+\t\t\tsuccess( response ) {\n+\t\t\t\tresponse = LP.parseJSON( response );\n+\n+\t\t\t\tif ( response.success ) {\n+\t\t\t\t\twindow.location.href = response.data;\n+\t\t\t\t} else {\n+\t\t\t\t\talert( response.data );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\t$( function() {\n+\t\t$( document ).on( 'click', '.lp-duplicate-row-action .lp-duplicate-post', duplicatePost );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,199 +1,199 @@\n-( function() {\r\n-\t'use strict';\r\n-\r\n-\tconst cfg = window.lpMcpApiKeysSettings || {};\r\n-\tif ( ! cfg.is_mcp_keys_section ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst ajaxHandle = window.lpAJAXG;\r\n-\tif ( ! ajaxHandle || typeof ajaxHandle.fetchAJAX !== 'function' ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst elSubmit = document.getElementById( 'lp-mcp-key-submit' );\r\n-\tconst elStatus = document.getElementById( 'lp-mcp-key-status' );\r\n-\tconst elReveal = document.getElementById( 'lp-mcp-key-reveal' );\r\n-\tconst elConsumerKey = document.getElementById( 'lp-mcp-consumer-key' );\r\n-\tconst elConsumerSecret = document.getElementById( 'lp-mcp-consumer-secret' );\r\n-\r\n-\tconst lpDataAdmin = window.lpDataAdmin || {};\r\n-\tconst i18n = cfg.i18n || lpDataAdmin.i18n || {};\r\n-\tconst actions = cfg.actions || {};\r\n-\r\n-\tconst setStatus = ( message = '', isError = false ) => {\r\n-\t\tif ( ! elStatus ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\telStatus.textContent = message;\r\n-\t\telStatus.style.color = isError ? '#b32d2e' : '#1e1e1e';\r\n-\t};\r\n-\r\n-\tconst setLoadingState = ( el, isLoading ) => {\r\n-\t\tif ( ! el ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tel.disabled = !! isLoading;\r\n-\t\tel.classList.toggle( 'loading', !! isLoading );\r\n-\t};\r\n-\r\n-\tconst refreshKeysTable = async () => {\r\n-\t\tconst currentList = document.querySelector( '.lp-mcp-key-list' );\r\n-\t\tif ( ! currentList ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\tconst response = await fetch( window.location.href, {\r\n-\t\t\t\tmethod: 'GET',\r\n-\t\t\t\tcredentials: 'same-origin',\r\n-\t\t\t\tcache: 'no-store',\r\n-\t\t\t} );\r\n-\t\t\tif ( ! response.ok ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst html = await response.text();\r\n-\t\t\tconst parser = new DOMParser();\r\n-\t\t\tconst doc = parser.parseFromString( html, 'text\u002Fhtml' );\r\n-\t\t\tconst newList = doc.querySelector( '.lp-mcp-key-list' );\r\n-\r\n-\t\t\tif ( newList && currentList.parentNode ) {\r\n-\t\t\t\tcurrentList.replaceWith( newList );\r\n-\t\t\t}\r\n-\t\t} catch ( e ) {\r\n-\t\t\t\u002F\u002F Keep current UI state when table refresh fails.\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tconst renderCredentials = ( keyData ) => {\r\n-\t\tif (\r\n-\t\t\t! keyData ||\r\n-\t\t\t! keyData.consumer_key ||\r\n-\t\t\t! keyData.consumer_secret ||\r\n-\t\t\t! elConsumerKey ||\r\n-\t\t\t! elConsumerSecret ||\r\n-\t\t\t! elReveal\r\n-\t\t) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\telConsumerKey.value = keyData.consumer_key;\r\n-\t\telConsumerSecret.value = keyData.consumer_secret;\r\n-\t\telReveal.style.display = 'block';\r\n-\t};\r\n-\r\n-\tconst runRequest = ( dataSend, callbacks = {} ) => {\r\n-\t\tajaxHandle.fetchAJAX( dataSend, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tif ( typeof callbacks.success === 'function' ) {\r\n-\t\t\t\t\tcallbacks.success( response );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tif ( typeof callbacks.error === 'function' ) {\r\n-\t\t\t\t\tcallbacks.error( error );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tif ( typeof callbacks.completed === 'function' ) {\r\n-\t\t\t\t\tcallbacks.completed();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst onSubmitKey = () => {\r\n-\t\tif ( ! elSubmit ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elUser = document.getElementById( 'lp-mcp-key-user' );\r\n-\t\tconst elDescription = document.getElementById( 'lp-mcp-key-description' );\r\n-\t\tconst elPermissions = document.getElementById( 'lp-mcp-key-permissions' );\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\taction: actions.create || 'mcp_create_api_key',\r\n-\t\t\tuser_id: elUser ? elUser.value : '',\r\n-\t\t\tdescription: elDescription ? elDescription.value : '',\r\n-\t\t\tpermissions: elPermissions ? elPermissions.value : 'read',\r\n-\t\t};\r\n-\r\n-\t\tsetLoadingState( elSubmit, true );\r\n-\t\tsetStatus( i18n.processing || 'Processing...', false );\r\n-\r\n-\t\trunRequest( dataSend, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst status = response && response.status ? response.status : '';\r\n-\t\t\t\tconst message =\r\n-\t\t\t\t\tresponse && response.message\r\n-\t\t\t\t\t\t? response.message\r\n-\t\t\t\t\t\t: i18n.request_failed || 'Request failed.';\r\n-\r\n-\t\t\t\tif ( status !== 'success' ) {\r\n-\t\t\t\t\tsetStatus( message, true );\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tsetStatus( message, false );\r\n-\t\t\t\trenderCredentials(\r\n-\t\t\t\t\tresponse && response.data && response.data.key\r\n-\t\t\t\t\t\t? response.data.key\r\n-\t\t\t\t\t\t: null\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\trefreshKeysTable();\r\n-\t\t\t},\r\n-\t\t\terror: () => setStatus( i18n.request_failed || 'Request failed.', true ),\r\n-\t\t\tcompleted: () => setLoadingState( elSubmit, false ),\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst onCopy = async ( elCopy ) => {\r\n-\t\tconst targetId =\r\n-\t\t\telCopy && elCopy.dataset && elCopy.dataset.target\r\n-\t\t\t\t? elCopy.dataset.target\r\n-\t\t\t\t: '';\r\n-\t\tif ( ! targetId ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst input = document.getElementById( targetId );\r\n-\t\tif ( ! input ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( navigator.clipboard && navigator.clipboard.writeText ) {\r\n-\t\t\t\tawait navigator.clipboard.writeText( input.value );\r\n-\t\t\t} else {\r\n-\t\t\t\tinput.select();\r\n-\t\t\t\tinput.setSelectionRange( 0, 99999 );\r\n-\t\t\t\tdocument.execCommand( 'copy' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tsetStatus( i18n.copy_success || 'Copied.', false );\r\n-\t\t} catch ( e ) {\r\n-\t\t\tsetStatus( i18n.copy_fallback || 'Copy this value manually.', false );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( ! target ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elCopy = target.closest( '.lp-mcp-copy' );\r\n-\t\tif ( elCopy ) {\r\n-\t\t\tonCopy( elCopy );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( elSubmit && target.closest( '#lp-mcp-key-submit' ) ) {\r\n-\t\t\tonSubmitKey();\r\n-\t\t}\r\n-\t} );\r\n-} )();\r\n+( function() {\n+\t'use strict';\n+\n+\tconst cfg = window.lpMcpApiKeysSettings || {};\n+\tif ( ! cfg.is_mcp_keys_section ) {\n+\t\treturn;\n+\t}\n+\n+\tconst ajaxHandle = window.lpAJAXG;\n+\tif ( ! ajaxHandle || typeof ajaxHandle.fetchAJAX !== 'function' ) {\n+\t\treturn;\n+\t}\n+\n+\tconst elSubmit = document.getElementById( 'lp-mcp-key-submit' );\n+\tconst elStatus = document.getElementById( 'lp-mcp-key-status' );\n+\tconst elReveal = document.getElementById( 'lp-mcp-key-reveal' );\n+\tconst elConsumerKey = document.getElementById( 'lp-mcp-consumer-key' );\n+\tconst elConsumerSecret = document.getElementById( 'lp-mcp-consumer-secret' );\n+\n+\tconst lpDataAdmin = window.lpDataAdmin || {};\n+\tconst i18n = cfg.i18n || lpDataAdmin.i18n || {};\n+\tconst actions = cfg.actions || {};\n+\n+\tconst setStatus = ( message = '', isError = false ) => {\n+\t\tif ( ! elStatus ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\telStatus.textContent = message;\n+\t\telStatus.style.color = isError ? '#b32d2e' : '#1e1e1e';\n+\t};\n+\n+\tconst setLoadingState = ( el, isLoading ) => {\n+\t\tif ( ! el ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tel.disabled = !! isLoading;\n+\t\tel.classList.toggle( 'loading', !! isLoading );\n+\t};\n+\n+\tconst refreshKeysTable = async () => {\n+\t\tconst currentList = document.querySelector( '.lp-mcp-key-list' );\n+\t\tif ( ! currentList ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\tconst response = await fetch( window.location.href, {\n+\t\t\t\tmethod: 'GET',\n+\t\t\t\tcredentials: 'same-origin',\n+\t\t\t\tcache: 'no-store',\n+\t\t\t} );\n+\t\t\tif ( ! response.ok ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst html = await response.text();\n+\t\t\tconst parser = new DOMParser();\n+\t\t\tconst doc = parser.parseFromString( html, 'text\u002Fhtml' );\n+\t\t\tconst newList = doc.querySelector( '.lp-mcp-key-list' );\n+\n+\t\t\tif ( newList && currentList.parentNode ) {\n+\t\t\t\tcurrentList.replaceWith( newList );\n+\t\t\t}\n+\t\t} catch ( e ) {\n+\t\t\t\u002F\u002F Keep current UI state when table refresh fails.\n+\t\t}\n+\t};\n+\n+\tconst renderCredentials = ( keyData ) => {\n+\t\tif (\n+\t\t\t! keyData ||\n+\t\t\t! keyData.consumer_key ||\n+\t\t\t! keyData.consumer_secret ||\n+\t\t\t! elConsumerKey ||\n+\t\t\t! elConsumerSecret ||\n+\t\t\t! elReveal\n+\t\t) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\telConsumerKey.value = keyData.consumer_key;\n+\t\telConsumerSecret.value = keyData.consumer_secret;\n+\t\telReveal.style.display = 'block';\n+\t};\n+\n+\tconst runRequest = ( dataSend, callbacks = {} ) => {\n+\t\tajaxHandle.fetchAJAX( dataSend, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tif ( typeof callbacks.success === 'function' ) {\n+\t\t\t\t\tcallbacks.success( response );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tif ( typeof callbacks.error === 'function' ) {\n+\t\t\t\t\tcallbacks.error( error );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tif ( typeof callbacks.completed === 'function' ) {\n+\t\t\t\t\tcallbacks.completed();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst onSubmitKey = () => {\n+\t\tif ( ! elSubmit ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elUser = document.getElementById( 'lp-mcp-key-user' );\n+\t\tconst elDescription = document.getElementById( 'lp-mcp-key-description' );\n+\t\tconst elPermissions = document.getElementById( 'lp-mcp-key-permissions' );\n+\n+\t\tconst dataSend = {\n+\t\t\taction: actions.create || 'mcp_create_api_key',\n+\t\t\tuser_id: elUser ? elUser.value : '',\n+\t\t\tdescription: elDescription ? elDescription.value : '',\n+\t\t\tpermissions: elPermissions ? elPermissions.value : 'read',\n+\t\t};\n+\n+\t\tsetLoadingState( elSubmit, true );\n+\t\tsetStatus( i18n.processing || 'Processing...', false );\n+\n+\t\trunRequest( dataSend, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst status = response && response.status ? response.status : '';\n+\t\t\t\tconst message =\n+\t\t\t\t\tresponse && response.message\n+\t\t\t\t\t\t? response.message\n+\t\t\t\t\t\t: i18n.request_failed || 'Request failed.';\n+\n+\t\t\t\tif ( status !== 'success' ) {\n+\t\t\t\t\tsetStatus( message, true );\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tsetStatus( message, false );\n+\t\t\t\trenderCredentials(\n+\t\t\t\t\tresponse && response.data && response.data.key\n+\t\t\t\t\t\t? response.data.key\n+\t\t\t\t\t\t: null\n+\t\t\t\t);\n+\n+\t\t\t\trefreshKeysTable();\n+\t\t\t},\n+\t\t\terror: () => setStatus( i18n.request_failed || 'Request failed.', true ),\n+\t\t\tcompleted: () => setLoadingState( elSubmit, false ),\n+\t\t} );\n+\t};\n+\n+\tconst onCopy = async ( elCopy ) => {\n+\t\tconst targetId =\n+\t\t\telCopy && elCopy.dataset && elCopy.dataset.target\n+\t\t\t\t? elCopy.dataset.target\n+\t\t\t\t: '';\n+\t\tif ( ! targetId ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst input = document.getElementById( targetId );\n+\t\tif ( ! input ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\tif ( navigator.clipboard && navigator.clipboard.writeText ) {\n+\t\t\t\tawait navigator.clipboard.writeText( input.value );\n+\t\t\t} else {\n+\t\t\t\tinput.select();\n+\t\t\t\tinput.setSelectionRange( 0, 99999 );\n+\t\t\t\tdocument.execCommand( 'copy' );\n+\t\t\t}\n+\n+\t\t\tsetStatus( i18n.copy_success || 'Copied.', false );\n+\t\t} catch ( e ) {\n+\t\t\tsetStatus( i18n.copy_fallback || 'Copy this value manually.', false );\n+\t\t}\n+\t};\n+\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\t\tif ( ! target ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elCopy = target.closest( '.lp-mcp-copy' );\n+\t\tif ( elCopy ) {\n+\t\t\tonCopy( elCopy );\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( elSubmit && target.closest( '#lp-mcp-key-submit' ) ) {\n+\t\t\tonSubmitKey();\n+\t\t}\n+\t} );\n+} )();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fadd-courses-to-order.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fadd-courses-to-order.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fadd-courses-to-order.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fadd-courses-to-order.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,424 +1,424 @@\n-import { AdminUtilsFunctions, Api, Utils } from '..\u002Futils-admin.js';\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-\r\n-const addCoursesToOrder = () => {\r\n-\tlet elModalSearchCourses;\r\n-\tlet elSearchCoursesResult;\r\n-\tlet elOrderDetails, modalSearchItemsTemplate, modalContainer;\r\n-\tlet elOrderModalFooter, elOrderModalBtnAdd;\r\n-\tlet elListOrderItems;\r\n-\tlet timeOutSearch;\r\n-\tconst idModalSearchItems = '#modal-search-items';\r\n-\tconst idOrderDetails = '#learn-press-order';\r\n-\tlet dataSend = {\r\n-\t\tsearch: '',\r\n-\t\tid_not_in: '',\r\n-\t\tpaged: 1,\r\n-\t};\r\n-\tconst courseIdsNewSelected = [];\r\n-\tlet courseIdsAdded = [];\r\n-\r\n-\tconst getAllElements = () => {\r\n-\t\telOrderDetails = document.querySelector( '#learn-press-order' );\r\n-\t\tmodalSearchItemsTemplate = document.querySelector( '#learn-press-modal-search-items' );\r\n-\t\tmodalContainer = document.querySelector( '#container-modal-search-items' );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Fetch courses from API.\r\n-\t *\r\n-\t * @param keySearch\r\n-\t * @param course_ids_exclude\r\n-\t * @param paged\r\n-\t *\u002F\r\n-\tconst fetchCoursesAPI = ( keySearch = '', course_ids_exclude = [], paged = 1 ) => {\r\n-\t\tlet id_not_in = '';\r\n-\t\tif ( course_ids_exclude.length > 0 ) {\r\n-\t\t\tid_not_in = course_ids_exclude.join( ',' );\r\n-\t\t}\r\n-\r\n-\t\tdataSend = {\r\n-\t\t\tsearch: keySearch,\r\n-\t\t\tid_not_in,\r\n-\t\t\tpaged,\r\n-\t\t};\r\n-\r\n-\t\tAdminUtilsFunctions.fetchCourses( keySearch, dataSend, {\r\n-\t\t\tbefore() {\r\n-\t\t\t\telModalSearchCourses.classList.add( 'loading' );\r\n-\t\t\t},\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\tconst { data, status, message } = response;\r\n-\t\t\t\tconst { courses, total_pages } = data;\r\n-\r\n-\t\t\t\tif ( 'success' !== status ) {\r\n-\t\t\t\t\tconsole.error( message );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( ! courses.length ) {\r\n-\t\t\t\t\t\telSearchCoursesResult.innerHTML = '\u003Cli class=\"lp-result-item\">No courses found\u003C\u002Fli>';\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\telSearchCoursesResult.innerHTML = renderSearchResult( courses );\r\n-\t\t\t\t\tconst paginationHtml = renderPagination( paged, total_pages );\r\n-\t\t\t\t\tconst searchNav = elModalSearchCourses.querySelector( '.search-nav' );\r\n-\t\t\t\t\tsearchNav.innerHTML = paginationHtml;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror( err ) {\r\n-\t\t\t\tconsole.error( err );\r\n-\t\t\t},\r\n-\t\t\tcompleted() {\r\n-\t\t\t\telModalSearchCourses.classList.remove( 'loading' );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Get list course ids added.\r\n-\t *\u002F\r\n-\tconst getCoursesAdded = () => {\r\n-\t\tcourseIdsAdded = [];\r\n-\t\tconst orderItems = document.querySelectorAll( '#learn-press-order .list-order-items tbody .order-item-row' );\r\n-\t\torderItems.forEach( ( orderItem ) => {\r\n-\t\t\tconst orderItemId = parseInt( orderItem.getAttribute( 'data-id' ) );\r\n-\t\t\tcourseIdsAdded.push( orderItemId );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Add courses to order.\r\n-\t * @param e\r\n-\t * @param target\r\n-\t *\u002F\r\n-\tconst addCourses = ( e, target ) => {\r\n-\t\tif ( ! target.classList.contains( 'add' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! target.closest( idModalSearchItems ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\telListOrderItems = elOrderDetails.querySelector( '.list-order-items' );\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\ttarget.disabled = true;\r\n-\t\tconst dataSend = {\r\n-\t\t\t'lp-ajax': 'add_items_to_order',\r\n-\t\t\torder_id: document.querySelector( '#post_ID' ).value,\r\n-\t\t\titems: courseIdsNewSelected,\r\n-\t\t\tnonce: lpDataAdmin.nonce,\r\n-\t\t};\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\tconst { data, messages, status } = response;\r\n-\t\t\t\tif ( 'error' === status ) {\r\n-\t\t\t\t\tconsole.error( messages );\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst { item_html, order_data } = data;\r\n-\t\t\t\tconst elNoItem = elListOrderItems.querySelector( '.no-order-items' );\r\n-\t\t\t\tlpUtils.lpShowHideEl( elNoItem, 0 );\r\n-\t\t\t\telNoItem.insertAdjacentHTML( 'beforebegin', item_html );\r\n-\t\t\t\telOrderDetails.querySelector( '.order-subtotal' ).innerHTML = order_data.subtotal_html;\r\n-\t\t\t\telOrderDetails.querySelector( '.order-total' ).innerHTML = order_data.total_html;\r\n-\t\t\t\t\u002F\u002FcourseIdsAdded.push( ...courseIdsNewSelected );\r\n-\t\t\t\tcourseIdsNewSelected.splice( 0, courseIdsNewSelected.length );\r\n-\t\t\t},\r\n-\t\t\terror( err ) {\r\n-\t\t\t\tconsole.error( err );\r\n-\t\t\t},\r\n-\t\t\tcompleted() {\r\n-\t\t\t\ttarget.disabled = false;\r\n-\t\t\t\tmodalContainer.style.display = 'none';\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tUtils.lpFetchAPI( Utils.lpAddQueryArgs( Utils.lpGetCurrentURLNoParam(), dataSend ), {}, callBack );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Remove course from order.\r\n-\t *\r\n-\t * @param e\r\n-\t * @param target\r\n-\t *\u002F\r\n-\tconst removeCourse = ( e, target ) => {\r\n-\t\tif ( target.tagName !== 'SPAN' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! target.closest( '.remove-order-item' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tif ( ! confirm( 'Are you sure you want to remove this item?' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttarget.disabled = true;\r\n-\t\ttarget.classList.add( 'dashicons-update' );\r\n-\t\tconst elItemRow = target.closest( '.order-item-row' );\r\n-\t\tconst elListOrderItems = target.closest( '.list-order-items' );\r\n-\t\tconst orderItemId = parseInt( elItemRow.getAttribute( 'data-item_id' ) );\r\n-\t\tconst courseId = parseInt( elItemRow.getAttribute( 'data-id' ) );\r\n-\r\n-\t\tconst dataSend = {\r\n-\t\t\t'lp-ajax': 'remove_items_from_order',\r\n-\t\t\torder_id: document.querySelector( '#post_ID' ).value,\r\n-\t\t\titems: orderItemId,\r\n-\t\t\tnonce: lpDataAdmin.nonce,\r\n-\t\t};\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess( response ) {\r\n-\t\t\t\tconst { data, messages, status } = response;\r\n-\t\t\t\tif ( 'error' === status ) {\r\n-\t\t\t\t\tconsole.error( messages );\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst { item_html, order_data } = data;\r\n-\t\t\t\tconst elNoItem = elListOrderItems.querySelector( '.no-order-items' );\r\n-\t\t\t\tconst orderItems = elListOrderItems.querySelectorAll( '.order-item-row' );\r\n-\t\t\t\torderItems.forEach( ( orderItem ) => {\r\n-\t\t\t\t\torderItem.remove();\r\n-\t\t\t\t} );\r\n-\t\t\t\tif ( item_html.length ) {\r\n-\t\t\t\t\telNoItem.insertAdjacentHTML( 'beforebegin', item_html );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlpUtils.lpShowHideEl( elNoItem, 1 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tcourseIdsNewSelected.splice( courseIdsNewSelected.indexOf( courseId ), 1 );\r\n-\t\t\t\t\u002F\u002FcourseIdsAdded.splice( courseIdsNewSelected.indexOf( courseId ), 1 );\r\n-\t\t\t\telOrderDetails.querySelector( '.order-subtotal' ).innerHTML = order_data.subtotal_html;\r\n-\t\t\t\telOrderDetails.querySelector( '.order-total' ).innerHTML = order_data.total_html;\r\n-\t\t\t},\r\n-\t\t\terror( err ) {\r\n-\t\t\t\tconsole.error( err );\r\n-\t\t\t},\r\n-\t\t\tcompleted() {\r\n-\r\n-\t\t\t},\r\n-\t\t};\r\n-\t\tUtils.lpFetchAPI( Utils.lpAddQueryArgs( Utils.lpGetCurrentURLNoParam(), dataSend ), {}, callBack );\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Search courses before add Order.\r\n-\t *\r\n-\t * @param e\r\n-\t * @param target\r\n-\t *\u002F\r\n-\tconst searchCourse = ( e, target ) => {\r\n-\t\tif ( 'search' !== target.name ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elLPTarget = target.closest( idModalSearchItems );\r\n-\t\tif ( ! elLPTarget ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\t\tconst keyword = target.value;\r\n-\r\n-\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\r\n-\t\t\tif ( undefined !== timeOutSearch ) {\r\n-\t\t\t\tclearTimeout( timeOutSearch );\r\n-\t\t\t}\r\n-\r\n-\t\t\ttimeOutSearch = setTimeout( function() {\r\n-\t\t\t\tfetchCoursesAPI( keyword, courseIdsAdded, 1 );\r\n-\t\t\t}, 800 );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Display list courses when search done.\r\n-\t *\r\n-\t * @param courses\r\n-\t *\u002F\r\n-\tconst renderSearchResult = ( courses ) => {\r\n-\t\tlet html = '';\r\n-\r\n-\t\tcourses.forEach( ( course ) => {\r\n-\t\t\tconst courseId = parseInt( course.ID );\r\n-\t\t\tconst checked = courseIdsNewSelected.includes( courseId ) ? 'checked' : '';\r\n-\r\n-\t\t\thtml += `\r\n-\t\t\t\u003Cli class=\"lp-result-item\" data-id=\"${ courseId }\" data-type=\"lp_course\" data-text=\"${ course.post_title }\">\r\n-\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" value=\"${ courseId }\" name=\"selectedItems[]\" ${ checked }>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-item-text\">${ course.post_title } (#${ courseId })\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fli>`;\r\n-\t\t} );\r\n-\r\n-\t\treturn html;\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Render pagination.\r\n-\t *\r\n-\t * @param currentPage\r\n-\t * @param maxPage\r\n-\t *\u002F\r\n-\tconst renderPagination = ( currentPage, maxPage ) => {\r\n-\t\tcurrentPage = parseInt( currentPage );\r\n-\t\tmaxPage = parseInt( maxPage );\r\n-\r\n-\t\tlet html = '';\r\n-\t\tif ( maxPage \u003C= 1 ) {\r\n-\t\t\treturn html;\r\n-\t\t}\r\n-\t\tconst nextPage = currentPage + 1;\r\n-\t\tconst prevPage = currentPage - 1;\r\n-\r\n-\t\tlet pages = [];\r\n-\r\n-\t\tif ( maxPage \u003C= 9 ) {\r\n-\t\t\tfor ( let i = 1; i \u003C= maxPage; i++ ) {\r\n-\t\t\t\tpages.push( i );\r\n-\t\t\t}\r\n-\t\t} else if ( currentPage \u003C= 3 ) {\r\n-\t\t\t\u002F\u002F x is ...\r\n-\t\t\tpages = [ 1, 2, 3, 4, 5, 'x', maxPage ];\r\n-\t\t} else if ( currentPage \u003C= 5 ) {\r\n-\t\t\tfor ( let i = 1; i \u003C= currentPage; i++ ) {\r\n-\t\t\t\tpages.push( i );\r\n-\t\t\t}\r\n-\t\t\tfor ( let j = 1; j \u003C= 2; j++ ) {\r\n-\t\t\t\tconst tempPage = currentPage + j;\r\n-\t\t\t\tpages.push( tempPage );\r\n-\t\t\t}\r\n-\t\t\tpages.push( 'x' );\r\n-\t\t\tpages.push( maxPage );\r\n-\t\t} else {\r\n-\t\t\tpages = [ 1, 'x' ];\r\n-\r\n-\t\t\tfor ( let k = 2; k >= 0; k-- ) {\r\n-\t\t\t\tconst tempPage = currentPage - k;\r\n-\t\t\t\tpages.push( tempPage );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst currentToLast = maxPage - currentPage;\r\n-\r\n-\t\t\tif ( currentToLast \u003C= 5 ) {\r\n-\t\t\t\tfor ( let m = currentPage + 1; m \u003C= maxPage; m++\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tpages.push( m );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tfor ( let n = 1; n \u003C= 2; n++ ) {\r\n-\t\t\t\t\tconst tempPage = currentPage + n;\r\n-\t\t\t\t\tpages.push( tempPage );\r\n-\t\t\t\t}\r\n-\t\t\t\tpages.push( 'x' );\r\n-\t\t\t\tpages.push( maxPage );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tconst maximum = pages.length;\r\n-\r\n-\t\tif ( currentPage !== 1 ) {\r\n-\t\t\thtml += `\u003Ca class=\"prev page-numbers button\" href=\"#\" data-page=\"${ prevPage }\">\u003C\u003C\u002Fa>`;\r\n-\t\t}\r\n-\t\tfor ( let i = 0; i \u003C maximum; i++ ) {\r\n-\t\t\tif ( currentPage === parseInt( pages[ i ] ) ) {\r\n-\t\t\t\thtml += `\u003Ca aria-current=\"page\" class=\"page-numbers current button disabled\" data-page=\"${ pages[ i ] }\">\r\n-\t\t\t\t${ pages[ i ] }\r\n-\t\t\t\u003C\u002Fa>`;\r\n-\t\t\t} else if ( pages[ i ] === 'x' ) {\r\n-\t\t\t\thtml += `\u003Cspan class=\"page-numbers dots button disabled\">...\u003C\u002Fspan>`;\r\n-\t\t\t} else {\r\n-\t\t\t\thtml += `\u003Ca class=\"page-numbers button\" href=\"#\" data-page=\"${ pages[ i ] }\">${ pages[ i ] } \u003C\u002Fa>`;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( currentPage !== maxPage ) {\r\n-\t\t\thtml += `\u003Ca class=\"next page-numbers button\" href=\"#\" data-page=\"${ nextPage }\">>\u003C\u002Fa>`;\r\n-\t\t}\r\n-\r\n-\t\treturn html;\r\n-\t};\r\n-\r\n-\tconst showPopupSearchCourses = () => {\r\n-\t\tgetCoursesAdded();\r\n-\t\tmodalContainer.style.display = 'block';\r\n-\t\telOrderModalBtnAdd.style.display = 'none';\r\n-\t\telSearchCoursesResult.innerHTML = '';\r\n-\t\tfetchCoursesAPI( dataSend.search, courseIdsAdded, dataSend.paged );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Events.\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\t\u002F\u002Fconsole.dir( target );\r\n-\t\tif ( target.id === 'learn-press-add-order-item' ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tshowPopupSearchCourses();\r\n-\t\t}\r\n-\r\n-\t\tif ( target.classList.contains( 'close' ) && target.closest( idModalSearchItems ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\telModalSearchCourses.querySelector( 'input[name=\"search\"]' ).value = '';\r\n-\t\t\tdataSend.search = '';\r\n-\t\t\tdataSend.paged = 1;\r\n-\t\t\tmodalContainer.style.display = 'none';\r\n-\t\t}\r\n-\r\n-\t\tif ( target.classList.contains( 'page-numbers' ) ) {\r\n-\t\t\tif ( target.closest( idModalSearchItems ) ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tconst paged = target.getAttribute( 'data-page' );\r\n-\t\t\t\tfetchCoursesAPI( dataSend.search, dataSend.id_not_in, paged );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( target.name === 'selectedItems[]' ) {\r\n-\t\t\tif ( target.closest( idModalSearchItems ) ) {\r\n-\t\t\t\tconst courseId = parseInt( target.value );\r\n-\t\t\t\tif ( target.checked ) {\r\n-\t\t\t\t\tcourseIdsNewSelected.push( courseId );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tconst index = courseIdsNewSelected.indexOf( courseId );\r\n-\t\t\t\t\tif ( index > -1 ) {\r\n-\t\t\t\t\t\tcourseIdsNewSelected.splice( index, 1 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\telOrderModalBtnAdd.style.display = courseIdsNewSelected.length > 0 ? 'block' : 'none';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\taddCourses( e, target );\r\n-\t\tremoveCourse( e, target );\r\n-\t} );\r\n-\tdocument.addEventListener( 'keyup', function( e ) {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\tsearchCourse( e, target );\r\n-\t} );\r\n-\r\n-\tlpUtils.lpOnElementReady( '.lp-order-detail-items', ( el ) => {\r\n-\t\tgetAllElements();\r\n-\t\tif ( ! elOrderDetails ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tmodalContainer.innerHTML = modalSearchItemsTemplate.innerHTML;\r\n-\t\telModalSearchCourses = modalContainer.querySelector( idModalSearchItems );\r\n-\t\telSearchCoursesResult = elModalSearchCourses.querySelector( '.search-results' );\r\n-\t\telOrderModalFooter = elModalSearchCourses.querySelector( 'footer' );\r\n-\t\telOrderModalBtnAdd = elOrderModalFooter.querySelector( '.add' );\r\n-\t\tmodalContainer.style.display = 'none';\r\n-\t} );\r\n-};\r\n-\r\n-export default addCoursesToOrder;\r\n+import { AdminUtilsFunctions, Api, Utils } from '..\u002Futils-admin.js';\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+\n+const addCoursesToOrder = () => {\n+\tlet elModalSearchCourses;\n+\tlet elSearchCoursesResult;\n+\tlet elOrderDetails, modalSearchItemsTemplate, modalContainer;\n+\tlet elOrderModalFooter, elOrderModalBtnAdd;\n+\tlet elListOrderItems;\n+\tlet timeOutSearch;\n+\tconst idModalSearchItems = '#modal-search-items';\n+\tconst idOrderDetails = '#learn-press-order';\n+\tlet dataSend = {\n+\t\tsearch: '',\n+\t\tid_not_in: '',\n+\t\tpaged: 1,\n+\t};\n+\tconst courseIdsNewSelected = [];\n+\tlet courseIdsAdded = [];\n+\n+\tconst getAllElements = () => {\n+\t\telOrderDetails = document.querySelector( '#learn-press-order' );\n+\t\tmodalSearchItemsTemplate = document.querySelector( '#learn-press-modal-search-items' );\n+\t\tmodalContainer = document.querySelector( '#container-modal-search-items' );\n+\t};\n+\n+\t\u002F**\n+\t * Fetch courses from API.\n+\t *\n+\t * @param keySearch\n+\t * @param course_ids_exclude\n+\t * @param paged\n+\t *\u002F\n+\tconst fetchCoursesAPI = ( keySearch = '', course_ids_exclude = [], paged = 1 ) => {\n+\t\tlet id_not_in = '';\n+\t\tif ( course_ids_exclude.length > 0 ) {\n+\t\t\tid_not_in = course_ids_exclude.join( ',' );\n+\t\t}\n+\n+\t\tdataSend = {\n+\t\t\tsearch: keySearch,\n+\t\t\tid_not_in,\n+\t\t\tpaged,\n+\t\t};\n+\n+\t\tAdminUtilsFunctions.fetchCourses( keySearch, dataSend, {\n+\t\t\tbefore() {\n+\t\t\t\telModalSearchCourses.classList.add( 'loading' );\n+\t\t\t},\n+\t\t\tsuccess( response ) {\n+\t\t\t\tconst { data, status, message } = response;\n+\t\t\t\tconst { courses, total_pages } = data;\n+\n+\t\t\t\tif ( 'success' !== status ) {\n+\t\t\t\t\tconsole.error( message );\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( ! courses.length ) {\n+\t\t\t\t\t\telSearchCoursesResult.innerHTML = '\u003Cli class=\"lp-result-item\">No courses found\u003C\u002Fli>';\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\telSearchCoursesResult.innerHTML = renderSearchResult( courses );\n+\t\t\t\t\tconst paginationHtml = renderPagination( paged, total_pages );\n+\t\t\t\t\tconst searchNav = elModalSearchCourses.querySelector( '.search-nav' );\n+\t\t\t\t\tsearchNav.innerHTML = paginationHtml;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror( err ) {\n+\t\t\t\tconsole.error( err );\n+\t\t\t},\n+\t\t\tcompleted() {\n+\t\t\t\telModalSearchCourses.classList.remove( 'loading' );\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\t\u002F**\n+\t * Get list course ids added.\n+\t *\u002F\n+\tconst getCoursesAdded = () => {\n+\t\tcourseIdsAdded = [];\n+\t\tconst orderItems = document.querySelectorAll( '#learn-press-order .list-order-items tbody .order-item-row' );\n+\t\torderItems.forEach( ( orderItem ) => {\n+\t\t\tconst orderItemId = parseInt( orderItem.getAttribute( 'data-id' ) );\n+\t\t\tcourseIdsAdded.push( orderItemId );\n+\t\t} );\n+\t};\n+\n+\t\u002F**\n+\t * Add courses to order.\n+\t * @param e\n+\t * @param target\n+\t *\u002F\n+\tconst addCourses = ( e, target ) => {\n+\t\tif ( ! target.classList.contains( 'add' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! target.closest( idModalSearchItems ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\telListOrderItems = elOrderDetails.querySelector( '.list-order-items' );\n+\n+\t\te.preventDefault();\n+\n+\t\ttarget.disabled = true;\n+\t\tconst dataSend = {\n+\t\t\t'lp-ajax': 'add_items_to_order',\n+\t\t\torder_id: document.querySelector( '#post_ID' ).value,\n+\t\t\titems: courseIdsNewSelected,\n+\t\t\tnonce: lpDataAdmin.nonce,\n+\t\t};\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess( response ) {\n+\t\t\t\tconst { data, messages, status } = response;\n+\t\t\t\tif ( 'error' === status ) {\n+\t\t\t\t\tconsole.error( messages );\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst { item_html, order_data } = data;\n+\t\t\t\tconst elNoItem = elListOrderItems.querySelector( '.no-order-items' );\n+\t\t\t\tlpUtils.lpShowHideEl( elNoItem, 0 );\n+\t\t\t\telNoItem.insertAdjacentHTML( 'beforebegin', item_html );\n+\t\t\t\telOrderDetails.querySelector( '.order-subtotal' ).innerHTML = order_data.subtotal_html;\n+\t\t\t\telOrderDetails.querySelector( '.order-total' ).innerHTML = order_data.total_html;\n+\t\t\t\t\u002F\u002FcourseIdsAdded.push( ...courseIdsNewSelected );\n+\t\t\t\tcourseIdsNewSelected.splice( 0, courseIdsNewSelected.length );\n+\t\t\t},\n+\t\t\terror( err ) {\n+\t\t\t\tconsole.error( err );\n+\t\t\t},\n+\t\t\tcompleted() {\n+\t\t\t\ttarget.disabled = false;\n+\t\t\t\tmodalContainer.style.display = 'none';\n+\t\t\t},\n+\t\t};\n+\n+\t\tUtils.lpFetchAPI( Utils.lpAddQueryArgs( Utils.lpGetCurrentURLNoParam(), dataSend ), {}, callBack );\n+\t};\n+\n+\t\u002F**\n+\t * Remove course from order.\n+\t *\n+\t * @param e\n+\t * @param target\n+\t *\u002F\n+\tconst removeCourse = ( e, target ) => {\n+\t\tif ( target.tagName !== 'SPAN' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! target.closest( '.remove-order-item' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tif ( ! confirm( 'Are you sure you want to remove this item?' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttarget.disabled = true;\n+\t\ttarget.classList.add( 'dashicons-update' );\n+\t\tconst elItemRow = target.closest( '.order-item-row' );\n+\t\tconst elListOrderItems = target.closest( '.list-order-items' );\n+\t\tconst orderItemId = parseInt( elItemRow.getAttribute( 'data-item_id' ) );\n+\t\tconst courseId = parseInt( elItemRow.getAttribute( 'data-id' ) );\n+\n+\t\tconst dataSend = {\n+\t\t\t'lp-ajax': 'remove_items_from_order',\n+\t\t\torder_id: document.querySelector( '#post_ID' ).value,\n+\t\t\titems: orderItemId,\n+\t\t\tnonce: lpDataAdmin.nonce,\n+\t\t};\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess( response ) {\n+\t\t\t\tconst { data, messages, status } = response;\n+\t\t\t\tif ( 'error' === status ) {\n+\t\t\t\t\tconsole.error( messages );\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst { item_html, order_data } = data;\n+\t\t\t\tconst elNoItem = elListOrderItems.querySelector( '.no-order-items' );\n+\t\t\t\tconst orderItems = elListOrderItems.querySelectorAll( '.order-item-row' );\n+\t\t\t\torderItems.forEach( ( orderItem ) => {\n+\t\t\t\t\torderItem.remove();\n+\t\t\t\t} );\n+\t\t\t\tif ( item_html.length ) {\n+\t\t\t\t\telNoItem.insertAdjacentHTML( 'beforebegin', item_html );\n+\t\t\t\t} else {\n+\t\t\t\t\tlpUtils.lpShowHideEl( elNoItem, 1 );\n+\t\t\t\t}\n+\n+\t\t\t\tcourseIdsNewSelected.splice( courseIdsNewSelected.indexOf( courseId ), 1 );\n+\t\t\t\t\u002F\u002FcourseIdsAdded.splice( courseIdsNewSelected.indexOf( courseId ), 1 );\n+\t\t\t\telOrderDetails.querySelector( '.order-subtotal' ).innerHTML = order_data.subtotal_html;\n+\t\t\t\telOrderDetails.querySelector( '.order-total' ).innerHTML = order_data.total_html;\n+\t\t\t},\n+\t\t\terror( err ) {\n+\t\t\t\tconsole.error( err );\n+\t\t\t},\n+\t\t\tcompleted() {\n+\n+\t\t\t},\n+\t\t};\n+\t\tUtils.lpFetchAPI( Utils.lpAddQueryArgs( Utils.lpGetCurrentURLNoParam(), dataSend ), {}, callBack );\n+\t};\n+\n+\t\u002F**\n+\t * Search courses before add Order.\n+\t *\n+\t * @param e\n+\t * @param target\n+\t *\u002F\n+\tconst searchCourse = ( e, target ) => {\n+\t\tif ( 'search' !== target.name ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elLPTarget = target.closest( idModalSearchItems );\n+\t\tif ( ! elLPTarget ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\t\tconst keyword = target.value;\n+\n+\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\n+\t\t\tif ( undefined !== timeOutSearch ) {\n+\t\t\t\tclearTimeout( timeOutSearch );\n+\t\t\t}\n+\n+\t\t\ttimeOutSearch = setTimeout( function() {\n+\t\t\t\tfetchCoursesAPI( keyword, courseIdsAdded, 1 );\n+\t\t\t}, 800 );\n+\t\t}\n+\t};\n+\n+\t\u002F**\n+\t * Display list courses when search done.\n+\t *\n+\t * @param courses\n+\t *\u002F\n+\tconst renderSearchResult = ( courses ) => {\n+\t\tlet html = '';\n+\n+\t\tcourses.forEach( ( course ) => {\n+\t\t\tconst courseId = parseInt( course.ID );\n+\t\t\tconst checked = courseIdsNewSelected.includes( courseId ) ? 'checked' : '';\n+\n+\t\t\thtml += `\n+\t\t\t\u003Cli class=\"lp-result-item\" data-id=\"${ courseId }\" data-type=\"lp_course\" data-text=\"${ course.post_title }\">\n+\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" value=\"${ courseId }\" name=\"selectedItems[]\" ${ checked }>\n+\t\t\t\t\t\u003Cspan class=\"lp-item-text\">${ course.post_title } (#${ courseId })\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fli>`;\n+\t\t} );\n+\n+\t\treturn html;\n+\t};\n+\n+\t\u002F**\n+\t * Render pagination.\n+\t *\n+\t * @param currentPage\n+\t * @param maxPage\n+\t *\u002F\n+\tconst renderPagination = ( currentPage, maxPage ) => {\n+\t\tcurrentPage = parseInt( currentPage );\n+\t\tmaxPage = parseInt( maxPage );\n+\n+\t\tlet html = '';\n+\t\tif ( maxPage \u003C= 1 ) {\n+\t\t\treturn html;\n+\t\t}\n+\t\tconst nextPage = currentPage + 1;\n+\t\tconst prevPage = currentPage - 1;\n+\n+\t\tlet pages = [];\n+\n+\t\tif ( maxPage \u003C= 9 ) {\n+\t\t\tfor ( let i = 1; i \u003C= maxPage; i++ ) {\n+\t\t\t\tpages.push( i );\n+\t\t\t}\n+\t\t} else if ( currentPage \u003C= 3 ) {\n+\t\t\t\u002F\u002F x is ...\n+\t\t\tpages = [ 1, 2, 3, 4, 5, 'x', maxPage ];\n+\t\t} else if ( currentPage \u003C= 5 ) {\n+\t\t\tfor ( let i = 1; i \u003C= currentPage; i++ ) {\n+\t\t\t\tpages.push( i );\n+\t\t\t}\n+\t\t\tfor ( let j = 1; j \u003C= 2; j++ ) {\n+\t\t\t\tconst tempPage = currentPage + j;\n+\t\t\t\tpages.push( tempPage );\n+\t\t\t}\n+\t\t\tpages.push( 'x' );\n+\t\t\tpages.push( maxPage );\n+\t\t} else {\n+\t\t\tpages = [ 1, 'x' ];\n+\n+\t\t\tfor ( let k = 2; k >= 0; k-- ) {\n+\t\t\t\tconst tempPage = currentPage - k;\n+\t\t\t\tpages.push( tempPage );\n+\t\t\t}\n+\n+\t\t\tconst currentToLast = maxPage - currentPage;\n+\n+\t\t\tif ( currentToLast \u003C= 5 ) {\n+\t\t\t\tfor ( let m = currentPage + 1; m \u003C= maxPage; m++\n+\t\t\t\t) {\n+\t\t\t\t\tpages.push( m );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tfor ( let n = 1; n \u003C= 2; n++ ) {\n+\t\t\t\t\tconst tempPage = currentPage + n;\n+\t\t\t\t\tpages.push( tempPage );\n+\t\t\t\t}\n+\t\t\t\tpages.push( 'x' );\n+\t\t\t\tpages.push( maxPage );\n+\t\t\t}\n+\t\t}\n+\n+\t\tconst maximum = pages.length;\n+\n+\t\tif ( currentPage !== 1 ) {\n+\t\t\thtml += `\u003Ca class=\"prev page-numbers button\" href=\"#\" data-page=\"${ prevPage }\">\u003C\u003C\u002Fa>`;\n+\t\t}\n+\t\tfor ( let i = 0; i \u003C maximum; i++ ) {\n+\t\t\tif ( currentPage === parseInt( pages[ i ] ) ) {\n+\t\t\t\thtml += `\u003Ca aria-current=\"page\" class=\"page-numbers current button disabled\" data-page=\"${ pages[ i ] }\">\n+\t\t\t\t${ pages[ i ] }\n+\t\t\t\u003C\u002Fa>`;\n+\t\t\t} else if ( pages[ i ] === 'x' ) {\n+\t\t\t\thtml += `\u003Cspan class=\"page-numbers dots button disabled\">...\u003C\u002Fspan>`;\n+\t\t\t} else {\n+\t\t\t\thtml += `\u003Ca class=\"page-numbers button\" href=\"#\" data-page=\"${ pages[ i ] }\">${ pages[ i ] } \u003C\u002Fa>`;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( currentPage !== maxPage ) {\n+\t\t\thtml += `\u003Ca class=\"next page-numbers button\" href=\"#\" data-page=\"${ nextPage }\">>\u003C\u002Fa>`;\n+\t\t}\n+\n+\t\treturn html;\n+\t};\n+\n+\tconst showPopupSearchCourses = () => {\n+\t\tgetCoursesAdded();\n+\t\tmodalContainer.style.display = 'block';\n+\t\telOrderModalBtnAdd.style.display = 'none';\n+\t\telSearchCoursesResult.innerHTML = '';\n+\t\tfetchCoursesAPI( dataSend.search, courseIdsAdded, dataSend.paged );\n+\t};\n+\n+\t\u002F\u002F Events.\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\t\t\u002F\u002Fconsole.dir( target );\n+\t\tif ( target.id === 'learn-press-add-order-item' ) {\n+\t\t\te.preventDefault();\n+\t\t\tshowPopupSearchCourses();\n+\t\t}\n+\n+\t\tif ( target.classList.contains( 'close' ) && target.closest( idModalSearchItems ) ) {\n+\t\t\te.preventDefault();\n+\t\t\telModalSearchCourses.querySelector( 'input[name=\"search\"]' ).value = '';\n+\t\t\tdataSend.search = '';\n+\t\t\tdataSend.paged = 1;\n+\t\t\tmodalContainer.style.display = 'none';\n+\t\t}\n+\n+\t\tif ( target.classList.contains( 'page-numbers' ) ) {\n+\t\t\tif ( target.closest( idModalSearchItems ) ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\tconst paged = target.getAttribute( 'data-page' );\n+\t\t\t\tfetchCoursesAPI( dataSend.search, dataSend.id_not_in, paged );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( target.name === 'selectedItems[]' ) {\n+\t\t\tif ( target.closest( idModalSearchItems ) ) {\n+\t\t\t\tconst courseId = parseInt( target.value );\n+\t\t\t\tif ( target.checked ) {\n+\t\t\t\t\tcourseIdsNewSelected.push( courseId );\n+\t\t\t\t} else {\n+\t\t\t\t\tconst index = courseIdsNewSelected.indexOf( courseId );\n+\t\t\t\t\tif ( index > -1 ) {\n+\t\t\t\t\t\tcourseIdsNewSelected.splice( index, 1 );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\telOrderModalBtnAdd.style.display = courseIdsNewSelected.length > 0 ? 'block' : 'none';\n+\t\t\t}\n+\t\t}\n+\n+\t\taddCourses( e, target );\n+\t\tremoveCourse( e, target );\n+\t} );\n+\tdocument.addEventListener( 'keyup', function( e ) {\n+\t\tconst target = e.target;\n+\n+\t\tsearchCourse( e, target );\n+\t} );\n+\n+\tlpUtils.lpOnElementReady( '.lp-order-detail-items', ( el ) => {\n+\t\tgetAllElements();\n+\t\tif ( ! elOrderDetails ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tmodalContainer.innerHTML = modalSearchItemsTemplate.innerHTML;\n+\t\telModalSearchCourses = modalContainer.querySelector( idModalSearchItems );\n+\t\telSearchCoursesResult = elModalSearchCourses.querySelector( '.search-results' );\n+\t\telOrderModalFooter = elModalSearchCourses.querySelector( 'footer' );\n+\t\telOrderModalBtnAdd = elOrderModalFooter.querySelector( '.add' );\n+\t\tmodalContainer.style.display = 'none';\n+\t} );\n+};\n+\n+export default addCoursesToOrder;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fexport_invoice.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fexport_invoice.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fexport_invoice.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forder\u002Fexport_invoice.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,116 +1,116 @@\n-\u002F**\r\n- * Export invoice to PDF\r\n- *\u002F\r\n-export default function export_invoice() {\r\n-\tlet html2pdf_obj, modal;\r\n-\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\tif ( target.id === 'lp-invoice__export' ) {\r\n-\t\t\thtml2pdf_obj.save();\r\n-\t\t} else if ( target.id === 'lp-invoice__update' ) {\r\n-\t\t\tconst elOption = document.querySelector( '.export-options__content' );\r\n-\t\t\tconst fields = elOption.querySelectorAll( 'input' );\r\n-\t\t\tconst fieldNameUnChecked = [];\r\n-\t\t\tfields.forEach( ( field ) => {\r\n-\t\t\t\tif ( ! field.checked ) {\r\n-\t\t\t\t\tfieldNameUnChecked.push( field.name );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\r\n-\t\t\twindow.localStorage.setItem( 'lp_invoice_un_fields', JSON.stringify( fieldNameUnChecked ) );\r\n-\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 1 );\r\n-\t\t\twindow.location.reload();\r\n-\t\t}\r\n-\t} );\r\n-\tconst exportPDF = () => {\r\n-\t\tconst pdfOptions = {\r\n-\t\t\tmargin: [ 0, 0, 0, 5 ],\r\n-\t\t\tfilename: document.title,\r\n-\t\t\timage: { type: 'webp' },\r\n-\t\t\thtml2canvas: { scale: 2.5 },\r\n-\t\t\tjsPDF: { format: 'a4', orientation: 'p' },\r\n-\t\t};\r\n-\t\tconst html = document.querySelector( '#lp-invoice__content' );\r\n-\t\thtml2pdf_obj = html2pdf().set( pdfOptions ).from( html );\r\n-\t};\r\n-\tconst showInfoFields = () => {\r\n-\t\t\u002F\u002F Get fields name checked\r\n-\t\tconst fieldsChecked = window.localStorage.getItem( 'lp_invoice_un_fields' );\r\n-\t\tconst elOptions = document.querySelector( '.export-options__content' );\r\n-\t\tconst elInvoiceFields = document.querySelectorAll( '.invoice-field' );\r\n-\t\telInvoiceFields.forEach( ( field ) => {\r\n-\t\t\tconst nameClass = field.classList[ 1 ];\r\n-\t\t\tif ( fieldsChecked && fieldsChecked.includes( nameClass ) ) {\r\n-\t\t\t\tfield.remove();\r\n-\t\t\t\tconst elOption = elOptions.querySelector( `[name=${ nameClass }]` );\r\n-\t\t\t\tif ( elOption ) {\r\n-\t\t\t\t\telOption.checked = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t\tconst showInvoice = parseInt( window.localStorage.getItem( 'lp_invoice_show' ) );\r\n-\t\tif ( showInvoice === 1 ) {\r\n-\t\t\tmodal.style.display = 'block';\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tdocument.addEventListener( 'DOMContentLoaded', () => {\r\n-\t\tconst elExportSection = document.querySelector( '#order-export__section' );\r\n-\t\tif ( ! elExportSection.length ) {\r\n-\t\t\tconst tabs = document.querySelectorAll( '.tabs' );\r\n-\t\t\tconst tab = document.querySelectorAll( '.tab' );\r\n-\t\t\tconst panel = document.querySelectorAll( '.panel' );\r\n-\r\n-\t\t\tfunction onTabClick( event ) {\r\n-\t\t\t\t\u002F\u002F deactivate existing active tabs and panel\r\n-\r\n-\t\t\t\tfor ( let i = 0; i \u003C tab.length; i++ ) {\r\n-\t\t\t\t\ttab[ i ].classList.remove( 'active' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tfor ( let i = 0; i \u003C panel.length; i++ ) {\r\n-\t\t\t\t\tpanel[ i ].classList.remove( 'active' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F activate new tabs and panel\r\n-\t\t\t\tevent.target.classList.add( 'active' );\r\n-\t\t\t\tconst classString = event.target.getAttribute( 'data-target' );\r\n-\t\t\t\tdocument.getElementById( 'panels' ).getElementsByClassName( classString )[ 0 ].classList.add( 'active' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tfor ( let i = 0; i \u003C tab.length; i++ ) {\r\n-\t\t\t\ttab[ i ].addEventListener( 'click', onTabClick, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get the modal\r\n-\t\t\tmodal = document.getElementById( 'myModal' );\r\n-\t\t\t\u002F\u002F Get the button that opens the modal\r\n-\t\t\tconst btn = document.getElementById( 'order-export__button' );\r\n-\t\t\t\u002F\u002F Get the \u003Cspan> element that closes the modal\r\n-\t\t\tconst span = document.getElementsByClassName( 'close' )[ 0 ];\r\n-\t\t\t\u002F\u002F When the user clicks on the button, open the modal\r\n-\t\t\tbtn.onclick = function() {\r\n-\t\t\t\tmodal.style.display = 'block';\r\n-\t\t\t};\r\n-\r\n-\t\t\t\u002F\u002F When the user clicks on \u003Cspan> (x), close the modal\r\n-\t\t\tspan.onclick = function() {\r\n-\t\t\t\tmodal.style.display = 'none';\r\n-\t\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 0 );\r\n-\t\t\t};\r\n-\r\n-\t\t\t\u002F\u002F When the user clicks anywhere outside the modal, close it\r\n-\t\t\twindow.onclick = function( event ) {\r\n-\t\t\t\tif ( event.target === modal ) {\r\n-\t\t\t\t\tmodal.style.display = 'none';\r\n-\t\t\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 0 );\r\n-\t\t\t\t}\r\n-\t\t\t};\r\n-\r\n-\t\t\tshowInfoFields();\r\n-\t\t\texportPDF();\r\n-\t\t}\r\n-\t} );\r\n-}\r\n+\u002F**\n+ * Export invoice to PDF\n+ *\u002F\n+export default function export_invoice() {\n+\tlet html2pdf_obj, modal;\n+\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\n+\t\tif ( target.id === 'lp-invoice__export' ) {\n+\t\t\thtml2pdf_obj.save();\n+\t\t} else if ( target.id === 'lp-invoice__update' ) {\n+\t\t\tconst elOption = document.querySelector( '.export-options__content' );\n+\t\t\tconst fields = elOption.querySelectorAll( 'input' );\n+\t\t\tconst fieldNameUnChecked = [];\n+\t\t\tfields.forEach( ( field ) => {\n+\t\t\t\tif ( ! field.checked ) {\n+\t\t\t\t\tfieldNameUnChecked.push( field.name );\n+\t\t\t\t}\n+\t\t\t} );\n+\n+\t\t\twindow.localStorage.setItem( 'lp_invoice_un_fields', JSON.stringify( fieldNameUnChecked ) );\n+\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 1 );\n+\t\t\twindow.location.reload();\n+\t\t}\n+\t} );\n+\tconst exportPDF = () => {\n+\t\tconst pdfOptions = {\n+\t\t\tmargin: [ 0, 0, 0, 5 ],\n+\t\t\tfilename: document.title,\n+\t\t\timage: { type: 'webp' },\n+\t\t\thtml2canvas: { scale: 2.5 },\n+\t\t\tjsPDF: { format: 'a4', orientation: 'p' },\n+\t\t};\n+\t\tconst html = document.querySelector( '#lp-invoice__content' );\n+\t\thtml2pdf_obj = html2pdf().set( pdfOptions ).from( html );\n+\t};\n+\tconst showInfoFields = () => {\n+\t\t\u002F\u002F Get fields name checked\n+\t\tconst fieldsChecked = window.localStorage.getItem( 'lp_invoice_un_fields' );\n+\t\tconst elOptions = document.querySelector( '.export-options__content' );\n+\t\tconst elInvoiceFields = document.querySelectorAll( '.invoice-field' );\n+\t\telInvoiceFields.forEach( ( field ) => {\n+\t\t\tconst nameClass = field.classList[ 1 ];\n+\t\t\tif ( fieldsChecked && fieldsChecked.includes( nameClass ) ) {\n+\t\t\t\tfield.remove();\n+\t\t\t\tconst elOption = elOptions.querySelector( `[name=${ nameClass }]` );\n+\t\t\t\tif ( elOption ) {\n+\t\t\t\t\telOption.checked = false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t\tconst showInvoice = parseInt( window.localStorage.getItem( 'lp_invoice_show' ) );\n+\t\tif ( showInvoice === 1 ) {\n+\t\t\tmodal.style.display = 'block';\n+\t\t}\n+\t};\n+\n+\tdocument.addEventListener( 'DOMContentLoaded', () => {\n+\t\tconst elExportSection = document.querySelector( '#order-export__section' );\n+\t\tif ( ! elExportSection.length ) {\n+\t\t\tconst tabs = document.querySelectorAll( '.tabs' );\n+\t\t\tconst tab = document.querySelectorAll( '.tab' );\n+\t\t\tconst panel = document.querySelectorAll( '.panel' );\n+\n+\t\t\tfunction onTabClick( event ) {\n+\t\t\t\t\u002F\u002F deactivate existing active tabs and panel\n+\n+\t\t\t\tfor ( let i = 0; i \u003C tab.length; i++ ) {\n+\t\t\t\t\ttab[ i ].classList.remove( 'active' );\n+\t\t\t\t}\n+\n+\t\t\t\tfor ( let i = 0; i \u003C panel.length; i++ ) {\n+\t\t\t\t\tpanel[ i ].classList.remove( 'active' );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F activate new tabs and panel\n+\t\t\t\tevent.target.classList.add( 'active' );\n+\t\t\t\tconst classString = event.target.getAttribute( 'data-target' );\n+\t\t\t\tdocument.getElementById( 'panels' ).getElementsByClassName( classString )[ 0 ].classList.add( 'active' );\n+\t\t\t}\n+\n+\t\t\tfor ( let i = 0; i \u003C tab.length; i++ ) {\n+\t\t\t\ttab[ i ].addEventListener( 'click', onTabClick, false );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get the modal\n+\t\t\tmodal = document.getElementById( 'myModal' );\n+\t\t\t\u002F\u002F Get the button that opens the modal\n+\t\t\tconst btn = document.getElementById( 'order-export__button' );\n+\t\t\t\u002F\u002F Get the \u003Cspan> element that closes the modal\n+\t\t\tconst span = document.getElementsByClassName( 'close' )[ 0 ];\n+\t\t\t\u002F\u002F When the user clicks on the button, open the modal\n+\t\t\tbtn.onclick = function() {\n+\t\t\t\tmodal.style.display = 'block';\n+\t\t\t};\n+\n+\t\t\t\u002F\u002F When the user clicks on \u003Cspan> (x), close the modal\n+\t\t\tspan.onclick = function() {\n+\t\t\t\tmodal.style.display = 'none';\n+\t\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 0 );\n+\t\t\t};\n+\n+\t\t\t\u002F\u002F When the user clicks anywhere outside the modal, close it\n+\t\t\twindow.onclick = function( event ) {\n+\t\t\t\tif ( event.target === modal ) {\n+\t\t\t\t\tmodal.style.display = 'none';\n+\t\t\t\t\twindow.localStorage.setItem( 'lp_invoice_show', 0 );\n+\t\t\t\t}\n+\t\t\t};\n+\n+\t\t\tshowInfoFields();\n+\t\t\texportPDF();\n+\t\t}\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forders\u002Fexport-orders.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forders\u002Fexport-orders.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forders\u002Fexport-orders.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Forders\u002Fexport-orders.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify';\r\n-\r\n-export const ExportOrdersToCSV = () => {\r\n-\tconst handleExport = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\te.preventDefault();\r\n-\t\tlpUtils.lpSetLoadingEl( target, true );\r\n-\t\tlet dataSend = JSON.parse( target.dataset.send );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { message, status, data } = response;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tconst maxPage = data?.max_page;\r\n-\t\t\t\t\tconst nextPage = data?.next_page;\r\n-\t\t\t\t\tconst done = data?.done;\r\n-\t\t\t\t\tconst downloadUrl = data?.download_url;\r\n-\r\n-\t\t\t\t\tif ( !! maxPage && !! nextPage && nextPage \u003C= maxPage ) {\r\n-\t\t\t\t\t\tdataSend = { ...dataSend, paged: nextPage };\r\n-\t\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t\t} else if ( !! done ) {\r\n-\t\t\t\t\t\tlpToastify.show( message, 'success' );\r\n-\r\n-\t\t\t\t\t\tconst link = document.createElement( 'a' );\r\n-\t\t\t\t\t\tlink.href = downloadUrl;\r\n-\t\t\t\t\t\tlink.target = '_self';\r\n-\t\t\t\t\t\tdocument.body.appendChild( link );\r\n-\t\t\t\t\t\tlink.click();\r\n-\t\t\t\t\t\tdocument.body.removeChild( link );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow message;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t};\r\n-\r\n-\tlpUtils.eventHandlers( 'click', [\r\n-\t\t{\r\n-\t\t\tselector: '.lp-btn-export-order-to-csv',\r\n-\t\t\tclass: this,\r\n-\t\t\tcallBack: handleExport,\r\n-\t\t},\r\n-\t] );\r\n-};\r\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify';\n+\n+export const ExportOrdersToCSV = () => {\n+\tconst handleExport = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\te.preventDefault();\n+\t\tlpUtils.lpSetLoadingEl( target, true );\n+\t\tlet dataSend = JSON.parse( target.dataset.send );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { message, status, data } = response;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tconst maxPage = data?.max_page;\n+\t\t\t\t\tconst nextPage = data?.next_page;\n+\t\t\t\t\tconst done = data?.done;\n+\t\t\t\t\tconst downloadUrl = data?.download_url;\n+\n+\t\t\t\t\tif ( !! maxPage && !! nextPage && nextPage \u003C= maxPage ) {\n+\t\t\t\t\t\tdataSend = { ...dataSend, paged: nextPage };\n+\t\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t\t} else if ( !! done ) {\n+\t\t\t\t\t\tlpToastify.show( message, 'success' );\n+\n+\t\t\t\t\t\tconst link = document.createElement( 'a' );\n+\t\t\t\t\t\tlink.href = downloadUrl;\n+\t\t\t\t\t\tlink.target = '_self';\n+\t\t\t\t\t\tdocument.body.appendChild( link );\n+\t\t\t\t\t\tlink.click();\n+\t\t\t\t\t\tdocument.body.removeChild( link );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow message;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tlpUtils.lpSetLoadingEl( target, false );\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t};\n+\n+\tlpUtils.eventHandlers( 'click', [\n+\t\t{\n+\t\t\tselector: '.lp-btn-export-order-to-csv',\n+\t\t\tclass: this,\n+\t\t\tcallBack: handleExport,\n+\t\t},\n+\t] );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fpartial\u002Fmeta-box-order.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fpartial\u002Fmeta-box-order.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fpartial\u002Fmeta-box-order.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fpartial\u002Fmeta-box-order.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-( function( $ ) {\r\n-\t'use strict';\r\n-\tjQuery( function() {\r\n-\t\t\u002F\u002F eslint-disable-next-line no-var\r\n-\t\t$( '.order-date.date-picker-backendorder' ).on( 'change', function() {\r\n-\t\t\tconst m = this.value.split( '-' );\r\n-\t\t\t[ 'aa', 'mm', 'jj' ].forEach( function( v, k ) {\r\n-\t\t\t\t$( 'input[name=\"' + v + '\"]' ).val( m[ k ] );\r\n-\t\t\t} );\r\n-\t\t} ).datepicker( {\r\n-\t\t\tdateFormat: 'yy-mm-dd',\r\n-\t\t\tnumberOfMonths: 1,\r\n-\t\t\tshowButtonPanel: true,\r\n-\t\t\tselect() {\r\n-\t\t\t\tconsole.log( arguments );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\t'use strict';\n+\tjQuery( function() {\n+\t\t\u002F\u002F eslint-disable-next-line no-var\n+\t\t$( '.order-date.date-picker-backendorder' ).on( 'change', function() {\n+\t\t\tconst m = this.value.split( '-' );\n+\t\t\t[ 'aa', 'mm', 'jj' ].forEach( function( v, k ) {\n+\t\t\t\t$( 'input[name=\"' + v + '\"]' ).val( m[ k ] );\n+\t\t\t} );\n+\t\t} ).datepicker( {\n+\t\t\tdateFormat: 'yy-mm-dd',\n+\t\t\tnumberOfMonths: 1,\n+\t\t\tshowButtonPanel: true,\n+\t\t\tselect() {\n+\t\t\t\tconsole.log( arguments );\n+\t\t\t},\n+\t\t} );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,141 +1,141 @@\n-( function( $ ) {\r\n-\tfunction DropdownPages( el, options ) {\r\n-\t\tthis.options = $.extend( {\r\n-\t\t\tID: '',\r\n-\t\t\tname: 'Add new page',\r\n-\t\t}, options || {} );\r\n-\t\tconst $element = $( el ),\r\n-\t\t\t$select = $element.find( 'select' ),\r\n-\t\t\t$listWrap = $element.find( '.list-pages-wrapper' ),\r\n-\t\t\t$actions = $element.find( '.quick-add-page-actions' ),\r\n-\t\t\t$form = $element.find( '.quick-add-page-inline' );\r\n-\r\n-\t\tfunction addNewPageToList( args ) {\r\n-\t\t\tconst $new_option = $( '\u003Coption value=\"' + args.ID + '\">' + args.name + '\u003C\u002Foption>' );\r\n-\t\t\tconst position = $.inArray( args.ID + '', args.positions );\r\n-\r\n-\t\t\t$( '.learn-press-dropdown-pages select' ).each( function() {\r\n-\t\t\t\tconst $sel = $( this ),\r\n-\t\t\t\t\t$option = $new_option.clone();\r\n-\t\t\t\tif ( position === 0 ) {\r\n-\t\t\t\t\t$( 'option', $sel ).each( function() {\r\n-\t\t\t\t\t\tif ( parseInt( $( this ).val() ) ) {\r\n-\t\t\t\t\t\t\t$option.insertBefore( $( this ) );\r\n-\t\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t} else if ( position === args.positions.length - 1 ) {\r\n-\t\t\t\t\t$sel.append( $option );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$option.insertAfter( $( 'option[value=\"' + args.positions[ position - 1 ] + '\"]', $sel ) );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\t$select.on( 'change', function() {\r\n-\t\t\t$actions.addClass( 'hide-if-js' );\r\n-\t\t\tif ( this.value !== 'add_new_page' ) {\r\n-\t\t\t\tif ( parseInt( this.value ) ) {\r\n-\t\t\t\t\t$actions.find( 'a.edit-page' ).attr( 'href', 'post.php?post=' + this.value + '&action=edit' );\r\n-\t\t\t\t\t$actions.find( 'a.view-page' ).attr( 'href', lpGlobalSettings.siteurl + '?page_id=' + this.value );\r\n-\t\t\t\t\t$actions.removeClass( 'hide-if-js' );\r\n-\t\t\t\t\t$select.attr( 'data-selected', this.value );\r\n-\t\t\t\t}\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t$listWrap.addClass( 'hide-if-js' );\r\n-\t\t\t$form.removeClass( 'hide-if-js' ).find( 'input' ).trigger( 'focus' ).val( '' );\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Select 2\r\n-\t\t\u002F\u002F $select\r\n-\t\t\u002F\u002F \t.css( 'width', $select.width() + 50 )\r\n-\t\t\u002F\u002F \t.find( 'option' ).each( function() {\r\n-\t\t\u002F\u002F \t\t$( this ).html( $( this ).html().replace( \u002F&nbsp;&nbsp;&nbsp;\u002Fg, '' ) );\r\n-\t\t\u002F\u002F \t} );\r\n-\r\n-\t\t\u002F\u002F $select.select2( {\r\n-\t\t\u002F\u002F \tallowClear: true,\r\n-\t\t\u002F\u002F \tplaceholder: lpDataAdmin.i18n.select_page,\r\n-\t\t\u002F\u002F } );\r\n-\r\n-\t\t\u002F\u002F $select.on( 'select2:select', function( e ) {\r\n-\t\t\u002F\u002F \tconst data = e.params.data;\r\n-\t\t\u002F\u002F } );\r\n-\t\t\u002F\u002Fend\r\n-\r\n-\t\t$element.on( 'click', '.quick-add-page-inline button', function() {\r\n-\t\t\tconst $button = $( this ),\r\n-\t\t\t\t$input = $form.find( 'input' ),\r\n-\t\t\t\tpage_name = $input.val();\r\n-\t\t\tif ( ! page_name ) {\r\n-\t\t\t\talert( 'Please enter the name of page' );\r\n-\t\t\t\t$input.trigger( 'focus' );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t$button.prop( 'disabled', true );\r\n-\r\n-\t\t\tconst tr = $button.closest( 'tr' );\r\n-\t\t\tlet field_name = '';\r\n-\t\t\tif ( tr.length ) {\r\n-\t\t\t\tfield_name = tr.find( '.field_name' ).attr( 'name' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$.ajax( {\r\n-\t\t\t\turl: lpGlobalSettings.ajax,\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\taction: 'learnpress_create_page',\r\n-\t\t\t\t\tpage_name,\r\n-\t\t\t\t\tfield_name,\r\n-\t\t\t\t\tnonce: lpDataAdmin.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t\ttype: 'post',\r\n-\t\t\t\tdataType: 'html',\r\n-\t\t\t\tsuccess( response ) {\r\n-\t\t\t\t\tresponse = LP.parseJSON( response );\r\n-\t\t\t\t\tif ( response.page ) {\r\n-\t\t\t\t\t\taddNewPageToList( {\r\n-\t\t\t\t\t\t\tID: response.page.ID,\r\n-\t\t\t\t\t\t\tname: response.page.post_title,\r\n-\t\t\t\t\t\t\tpositions: response.positions,\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t\u002F*$select.val( response.page.ID ).trigger( 'focus' );\r\n-\t\t\t\t\t\t$select.val( response.page.ID ).trigger( 'change' );*\u002F\r\n-\t\t\t\t\t\twindow.location.reload();\r\n-\t\t\t\t\t\t$form.addClass( 'hide-if-js' );\r\n-\t\t\t\t\t} else if ( response.error ) {\r\n-\t\t\t\t\t\talert( response.error );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$button.prop( 'disabled', false );\r\n-\t\t\t\t\t$listWrap.removeClass( 'hide-if-js' );\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t} ).on( 'click', '.quick-add-page-inline a', function( e ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\t$form.addClass( 'hide-if-js' );\r\n-\t\t\t$select.val( $select.attr( 'data-selected' ) + '' ).removeAttr( 'disabled' ).trigger( 'change' );\r\n-\t\t\t$listWrap.removeClass( 'hide-if-js' );\r\n-\t\t} ).on( 'click', '.button-quick-add-page', function( e ) {\r\n-\t\t\t$select.val( 'add_new_page' ).trigger( 'change' );\r\n-\t\t} ).on( 'keypress keydown', '.quick-add-page-inline input[type=\"text\"]', function( e ) {\r\n-\t\t\tif ( e.key == 'Enter' && e.type == 'keypress' ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\t$( this ).siblings( 'button' ).trigger( 'click' );\r\n-\t\t\t} else if ( e.key == 'Escape' && e.type == 'keydown' ) {\r\n-\t\t\t\t$( this ).siblings( 'a' ).trigger( 'click' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t$.fn.LP( 'DropdownPages', function() {\r\n-\t\treturn $.each( this, function() {\r\n-\t\t\tlet $instance = $( this ).data( 'DropdownPages' );\r\n-\t\t\tif ( ! $instance ) {\r\n-\t\t\t\t$instance = new DropdownPages( this, {} );\r\n-\t\t\t\t$( this ).data( 'DropdownPages', $instance );\r\n-\t\t\t}\r\n-\t\t\treturn $instance;\r\n-\t\t} );\r\n-\t} );\r\n-}( jQuery ) );\r\n-\r\n+( function( $ ) {\n+\tfunction DropdownPages( el, options ) {\n+\t\tthis.options = $.extend( {\n+\t\t\tID: '',\n+\t\t\tname: 'Add new page',\n+\t\t}, options || {} );\n+\t\tconst $element = $( el ),\n+\t\t\t$select = $element.find( 'select' ),\n+\t\t\t$listWrap = $element.find( '.list-pages-wrapper' ),\n+\t\t\t$actions = $element.find( '.quick-add-page-actions' ),\n+\t\t\t$form = $element.find( '.quick-add-page-inline' );\n+\n+\t\tfunction addNewPageToList( args ) {\n+\t\t\tconst $new_option = $( '\u003Coption value=\"' + args.ID + '\">' + args.name + '\u003C\u002Foption>' );\n+\t\t\tconst position = $.inArray( args.ID + '', args.positions );\n+\n+\t\t\t$( '.learn-press-dropdown-pages select' ).each( function() {\n+\t\t\t\tconst $sel = $( this ),\n+\t\t\t\t\t$option = $new_option.clone();\n+\t\t\t\tif ( position === 0 ) {\n+\t\t\t\t\t$( 'option', $sel ).each( function() {\n+\t\t\t\t\t\tif ( parseInt( $( this ).val() ) ) {\n+\t\t\t\t\t\t\t$option.insertBefore( $( this ) );\n+\t\t\t\t\t\t\treturn false;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\t\t\t\t} else if ( position === args.positions.length - 1 ) {\n+\t\t\t\t\t$sel.append( $option );\n+\t\t\t\t} else {\n+\t\t\t\t\t$option.insertAfter( $( 'option[value=\"' + args.positions[ position - 1 ] + '\"]', $sel ) );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t}\n+\n+\t\t$select.on( 'change', function() {\n+\t\t\t$actions.addClass( 'hide-if-js' );\n+\t\t\tif ( this.value !== 'add_new_page' ) {\n+\t\t\t\tif ( parseInt( this.value ) ) {\n+\t\t\t\t\t$actions.find( 'a.edit-page' ).attr( 'href', 'post.php?post=' + this.value + '&action=edit' );\n+\t\t\t\t\t$actions.find( 'a.view-page' ).attr( 'href', lpGlobalSettings.siteurl + '?page_id=' + this.value );\n+\t\t\t\t\t$actions.removeClass( 'hide-if-js' );\n+\t\t\t\t\t$select.attr( 'data-selected', this.value );\n+\t\t\t\t}\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t$listWrap.addClass( 'hide-if-js' );\n+\t\t\t$form.removeClass( 'hide-if-js' ).find( 'input' ).trigger( 'focus' ).val( '' );\n+\t\t} );\n+\n+\t\t\u002F\u002F Select 2\n+\t\t\u002F\u002F $select\n+\t\t\u002F\u002F \t.css( 'width', $select.width() + 50 )\n+\t\t\u002F\u002F \t.find( 'option' ).each( function() {\n+\t\t\u002F\u002F \t\t$( this ).html( $( this ).html().replace( \u002F&nbsp;&nbsp;&nbsp;\u002Fg, '' ) );\n+\t\t\u002F\u002F \t} );\n+\n+\t\t\u002F\u002F $select.select2( {\n+\t\t\u002F\u002F \tallowClear: true,\n+\t\t\u002F\u002F \tplaceholder: lpDataAdmin.i18n.select_page,\n+\t\t\u002F\u002F } );\n+\n+\t\t\u002F\u002F $select.on( 'select2:select', function( e ) {\n+\t\t\u002F\u002F \tconst data = e.params.data;\n+\t\t\u002F\u002F } );\n+\t\t\u002F\u002Fend\n+\n+\t\t$element.on( 'click', '.quick-add-page-inline button', function() {\n+\t\t\tconst $button = $( this ),\n+\t\t\t\t$input = $form.find( 'input' ),\n+\t\t\t\tpage_name = $input.val();\n+\t\t\tif ( ! page_name ) {\n+\t\t\t\talert( 'Please enter the name of page' );\n+\t\t\t\t$input.trigger( 'focus' );\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t$button.prop( 'disabled', true );\n+\n+\t\t\tconst tr = $button.closest( 'tr' );\n+\t\t\tlet field_name = '';\n+\t\t\tif ( tr.length ) {\n+\t\t\t\tfield_name = tr.find( '.field_name' ).attr( 'name' );\n+\t\t\t}\n+\n+\t\t\t$.ajax( {\n+\t\t\t\turl: lpGlobalSettings.ajax,\n+\t\t\t\tdata: {\n+\t\t\t\t\taction: 'learnpress_create_page',\n+\t\t\t\t\tpage_name,\n+\t\t\t\t\tfield_name,\n+\t\t\t\t\tnonce: lpDataAdmin.nonce,\n+\t\t\t\t},\n+\t\t\t\ttype: 'post',\n+\t\t\t\tdataType: 'html',\n+\t\t\t\tsuccess( response ) {\n+\t\t\t\t\tresponse = LP.parseJSON( response );\n+\t\t\t\t\tif ( response.page ) {\n+\t\t\t\t\t\taddNewPageToList( {\n+\t\t\t\t\t\t\tID: response.page.ID,\n+\t\t\t\t\t\t\tname: response.page.post_title,\n+\t\t\t\t\t\t\tpositions: response.positions,\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t\t\u002F*$select.val( response.page.ID ).trigger( 'focus' );\n+\t\t\t\t\t\t$select.val( response.page.ID ).trigger( 'change' );*\u002F\n+\t\t\t\t\t\twindow.location.reload();\n+\t\t\t\t\t\t$form.addClass( 'hide-if-js' );\n+\t\t\t\t\t} else if ( response.error ) {\n+\t\t\t\t\t\talert( response.error );\n+\t\t\t\t\t}\n+\t\t\t\t\t$button.prop( 'disabled', false );\n+\t\t\t\t\t$listWrap.removeClass( 'hide-if-js' );\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t} ).on( 'click', '.quick-add-page-inline a', function( e ) {\n+\t\t\te.preventDefault();\n+\t\t\t$form.addClass( 'hide-if-js' );\n+\t\t\t$select.val( $select.attr( 'data-selected' ) + '' ).removeAttr( 'disabled' ).trigger( 'change' );\n+\t\t\t$listWrap.removeClass( 'hide-if-js' );\n+\t\t} ).on( 'click', '.button-quick-add-page', function( e ) {\n+\t\t\t$select.val( 'add_new_page' ).trigger( 'change' );\n+\t\t} ).on( 'keypress keydown', '.quick-add-page-inline input[type=\"text\"]', function( e ) {\n+\t\t\tif ( e.key == 'Enter' && e.type == 'keypress' ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\t$( this ).siblings( 'button' ).trigger( 'click' );\n+\t\t\t} else if ( e.key == 'Escape' && e.type == 'keydown' ) {\n+\t\t\t\t$( this ).siblings( 'a' ).trigger( 'click' );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\t$.fn.LP( 'DropdownPages', function() {\n+\t\treturn $.each( this, function() {\n+\t\t\tlet $instance = $( this ).data( 'DropdownPages' );\n+\t\t\tif ( ! $instance ) {\n+\t\t\t\t$instance = new DropdownPages( this, {} );\n+\t\t\t\t$( this ).data( 'DropdownPages', $instance );\n+\t\t\t}\n+\t\t\treturn $instance;\n+\t\t} );\n+\t} );\n+}( jQuery ) );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Ftools\u002Fassign-user-course.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Ftools\u002Fassign-user-course.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Ftools\u002Fassign-user-course.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Ftools\u002Fassign-user-course.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,228 +1,228 @@\n-\u002F**\r\n- * Assign user to course\r\n- *\r\n- * @since 4.2.5.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-import * as AdminUtils from '..\u002Futils-admin.js';\r\n-\r\n-export default function assignUserCourse() {\r\n-\tlet elFormAssignUserCourse;\r\n-\tlet elFormUnAssignUserCourse;\r\n-\tlet elUserUnAssign, elCourseUnAssign, elUserAssign, elCourseAssign;\r\n-\tconst limitHandle = 5;\r\n-\r\n-\tconst getAllElements = () => {\r\n-\t\telFormAssignUserCourse = document.querySelector( '#lp-assign-user-course-form' );\r\n-\t\telFormUnAssignUserCourse = document.querySelector( '#lp-unassign-user-course-form' );\r\n-\r\n-\t\tif ( elFormAssignUserCourse ) {\r\n-\t\t\telUserUnAssign = elFormUnAssignUserCourse.querySelector( '[name=user_ids]' );\r\n-\t\t\telCourseUnAssign = elFormUnAssignUserCourse.querySelector( '[name=course_ids]' );\r\n-\t\t}\r\n-\r\n-\t\tif ( elFormUnAssignUserCourse ) {\r\n-\t\t\telUserAssign = elFormAssignUserCourse.querySelector( '[name=user_ids]' );\r\n-\t\t\telCourseAssign = elFormAssignUserCourse.querySelector( '[name=course_ids]' );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tconst events = () => {\r\n-\t\tconst elForm = document.querySelector( 'form' );\r\n-\t\tif ( ! elForm ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tdocument.addEventListener( 'submit', ( e ) => {\r\n-\t\t\tconst elForm = e.target;\r\n-\t\t\tconst formData = new FormData( e.target ); \u002F\u002F Create a FormData object from the form\r\n-\r\n-\t\t\t\u002F\u002F get values of form.\r\n-\t\t\tconst obj = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\r\n-\t\t\t\tconst val = formData.getAll( key );\r\n-\t\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\r\n-\t\t\t} ) );\r\n-\r\n-\t\t\tif ( elForm.id === 'lp-assign-user-course-form' ) {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tif ( ! confirm( 'Are you sure you want to Assign?' ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst { packages, data, totalPage } = handleDataBeforeSend( obj );\r\n-\t\t\t\tfetchAPIAssignCourse( packages, data, 1, totalPage );\r\n-\t\t\t} else if ( elForm.id === 'lp-unassign-user-course-form' ) {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tif ( ! confirm( 'Are you sure you want to Unassign?' ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst { packages, data, totalPage } = handleDataBeforeSend( obj );\r\n-\t\t\t\tfetchAPIUnAssignCourse( packages, data, 1, totalPage );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst handleDataBeforeSend = ( dataRaw ) => {\r\n-\t\t\u002F\u002F Cut to packages to send, 1 packages has 5 items.\r\n-\t\tlet arrCourseIds = [];\r\n-\t\tlet arrUserIds = [];\r\n-\t\tif ( typeof dataRaw.course_ids === 'string' ) {\r\n-\t\t\tarrCourseIds.push( dataRaw.course_ids );\r\n-\t\t} else if ( typeof dataRaw.course_ids === 'object' ) {\r\n-\t\t\tarrCourseIds = dataRaw.course_ids;\r\n-\t\t}\r\n-\r\n-\t\tif ( typeof dataRaw.user_ids === 'string' ) {\r\n-\t\t\tarrUserIds.push( dataRaw.user_ids );\r\n-\t\t} else if ( typeof dataRaw.user_ids === 'object' ) {\r\n-\t\t\tarrUserIds = dataRaw.user_ids;\r\n-\t\t}\r\n-\r\n-\t\tconst packages = [];\r\n-\t\tarrCourseIds.map( ( courseId, indexCourse ) => {\r\n-\t\t\tconst item = {};\r\n-\r\n-\t\t\titem.course_id = courseId;\r\n-\t\t\tarrUserIds.map( ( userID, indexUser ) => {\r\n-\t\t\t\tconst newItem = { ...item, user_id: userID };\r\n-\t\t\t\tpackages.push( newItem );\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\tconst data = packages.slice( 0, limitHandle );\r\n-\t\tconst totalPage = Math.ceil( packages.length \u002F limitHandle );\r\n-\r\n-\t\treturn { packages, data, totalPage };\r\n-\t};\r\n-\r\n-\tconst fetchAPIAssignCourse = ( packages, data, page, totalPage ) => {\r\n-\t\tconst url = AdminUtils.Api.admin.apiAssignUserCourse;\r\n-\t\tconst params = {\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t\t},\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( { data, page, totalPage } ),\r\n-\t\t};\r\n-\t\tconst elProgress = elFormAssignUserCourse.querySelector( '.percent' );\r\n-\t\tconst elButtonAssign = elFormAssignUserCourse.querySelector( '.lp-button-assign-course' );\r\n-\t\tconst elMessage = elFormAssignUserCourse.querySelector( '.message' );\r\n-\t\telButtonAssign.disabled = true;\r\n-\r\n-\t\tAdminUtils.Utils.lpFetchAPI( url, params, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { status, message } = response;\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tlet page = parseInt( response.data.page );\r\n-\t\t\t\t\tconst begin = page * limitHandle;\r\n-\t\t\t\t\tconst end = begin + limitHandle;\r\n-\t\t\t\t\tdata = packages.slice( begin, end );\r\n-\t\t\t\t\telProgress.innerHTML = response.data.percent;\r\n-\t\t\t\t\tfetchAPIAssignCourse( packages, data, ++page, totalPage );\r\n-\t\t\t\t} else if ( status === 'finished' ) {\r\n-\t\t\t\t\telProgress.innerHTML = '';\r\n-\t\t\t\t\telMessage.style.color = 'green';\r\n-\t\t\t\t\telMessage.innerHTML = message;\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\telMessage.innerHTML = '';\r\n-\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\t\t\u002F\u002F Clear data selected on Tom Select.\r\n-\t\t\t\t\tif ( ! elUserAssign.tomselect || ! elCourseAssign.tomselect ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\telUserAssign.tomselect.clear();\r\n-\t\t\t\t\telCourseAssign.tomselect.clear();\r\n-\t\t\t\t} else if ( status === 'error' ) {\r\n-\t\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\t\telMessage.style.color = 'red';\r\n-\t\t\t\t\telMessage.innerHTML = message;\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\telMessage.innerHTML = '';\r\n-\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( err ) => {\r\n-\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\telMessage.innerHTML = err.message;\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tconst fetchAPIUnAssignCourse = ( packages, data, page, totalPage ) => {\r\n-\t\tconst url = AdminUtils.Api.admin.apiUnAssignUserCourse;\r\n-\t\tconst params = {\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t\t},\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( { data, page, totalPage } ),\r\n-\t\t};\r\n-\t\tconst elProgress = elFormUnAssignUserCourse.querySelector( '.percent' );\r\n-\t\tconst elButtonAssign = elFormUnAssignUserCourse.querySelector( '.lp-button-unassign-course' );\r\n-\t\tconst elMessage = elFormUnAssignUserCourse.querySelector( '.message' );\r\n-\t\telButtonAssign.disabled = true;\r\n-\r\n-\t\tAdminUtils.Utils.lpFetchAPI( url, params, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { status, message } = response;\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\tlet page = parseInt( response.data.page );\r\n-\t\t\t\t\tconst begin = page * limitHandle;\r\n-\t\t\t\t\tconst end = begin + limitHandle;\r\n-\t\t\t\t\tdata = packages.slice( begin, end );\r\n-\t\t\t\t\telProgress.innerHTML = response.data.percent;\r\n-\t\t\t\t\tfetchAPIUnAssignCourse( packages, data, ++page, totalPage );\r\n-\t\t\t\t} else if ( status === 'finished' ) {\r\n-\t\t\t\t\telProgress.innerHTML = '';\r\n-\t\t\t\t\telMessage.style.color = 'green';\r\n-\t\t\t\t\telMessage.innerHTML = message;\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\telMessage.innerHTML = '';\r\n-\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\t\t\u002F\u002F Clear data selected on Tom Select.\r\n-\t\t\t\t\tif ( ! elUserUnAssign.tomselect || ! elCourseUnAssign.tomselect ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\telUserUnAssign.tomselect.clear();\r\n-\t\t\t\t\telCourseUnAssign.tomselect.clear();\r\n-\t\t\t\t} else if ( status === 'error' ) {\r\n-\t\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\t\telMessage.style.color = 'red';\r\n-\t\t\t\t\telMessage.innerHTML = message;\r\n-\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\telMessage.innerHTML = '';\r\n-\t\t\t\t\t}, 2000 );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( err ) => {\r\n-\t\t\t\telButtonAssign.disabled = false;\r\n-\t\t\t\telMessage.innerHTML = err.message;\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F\u002F DOMContentLoaded.\r\n-\tdocument.addEventListener( 'DOMContentLoaded', () => {\r\n-\t\tgetAllElements();\r\n-\t\tif ( ! elFormAssignUserCourse ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tevents();\r\n-\t} );\r\n-}\r\n+\u002F**\n+ * Assign user to course\n+ *\n+ * @since 4.2.5.6\n+ * @version 1.0.1\n+ *\u002F\n+import * as AdminUtils from '..\u002Futils-admin.js';\n+\n+export default function assignUserCourse() {\n+\tlet elFormAssignUserCourse;\n+\tlet elFormUnAssignUserCourse;\n+\tlet elUserUnAssign, elCourseUnAssign, elUserAssign, elCourseAssign;\n+\tconst limitHandle = 5;\n+\n+\tconst getAllElements = () => {\n+\t\telFormAssignUserCourse = document.querySelector( '#lp-assign-user-course-form' );\n+\t\telFormUnAssignUserCourse = document.querySelector( '#lp-unassign-user-course-form' );\n+\n+\t\tif ( elFormAssignUserCourse ) {\n+\t\t\telUserUnAssign = elFormUnAssignUserCourse.querySelector( '[name=user_ids]' );\n+\t\t\telCourseUnAssign = elFormUnAssignUserCourse.querySelector( '[name=course_ids]' );\n+\t\t}\n+\n+\t\tif ( elFormUnAssignUserCourse ) {\n+\t\t\telUserAssign = elFormAssignUserCourse.querySelector( '[name=user_ids]' );\n+\t\t\telCourseAssign = elFormAssignUserCourse.querySelector( '[name=course_ids]' );\n+\t\t}\n+\t};\n+\n+\tconst events = () => {\n+\t\tconst elForm = document.querySelector( 'form' );\n+\t\tif ( ! elForm ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tdocument.addEventListener( 'submit', ( e ) => {\n+\t\t\tconst elForm = e.target;\n+\t\t\tconst formData = new FormData( e.target ); \u002F\u002F Create a FormData object from the form\n+\n+\t\t\t\u002F\u002F get values of form.\n+\t\t\tconst obj = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\n+\t\t\t\tconst val = formData.getAll( key );\n+\t\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\n+\t\t\t} ) );\n+\n+\t\t\tif ( elForm.id === 'lp-assign-user-course-form' ) {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tif ( ! confirm( 'Are you sure you want to Assign?' ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst { packages, data, totalPage } = handleDataBeforeSend( obj );\n+\t\t\t\tfetchAPIAssignCourse( packages, data, 1, totalPage );\n+\t\t\t} else if ( elForm.id === 'lp-unassign-user-course-form' ) {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tif ( ! confirm( 'Are you sure you want to Unassign?' ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst { packages, data, totalPage } = handleDataBeforeSend( obj );\n+\t\t\t\tfetchAPIUnAssignCourse( packages, data, 1, totalPage );\n+\t\t\t}\n+\t\t} );\n+\t};\n+\n+\tconst handleDataBeforeSend = ( dataRaw ) => {\n+\t\t\u002F\u002F Cut to packages to send, 1 packages has 5 items.\n+\t\tlet arrCourseIds = [];\n+\t\tlet arrUserIds = [];\n+\t\tif ( typeof dataRaw.course_ids === 'string' ) {\n+\t\t\tarrCourseIds.push( dataRaw.course_ids );\n+\t\t} else if ( typeof dataRaw.course_ids === 'object' ) {\n+\t\t\tarrCourseIds = dataRaw.course_ids;\n+\t\t}\n+\n+\t\tif ( typeof dataRaw.user_ids === 'string' ) {\n+\t\t\tarrUserIds.push( dataRaw.user_ids );\n+\t\t} else if ( typeof dataRaw.user_ids === 'object' ) {\n+\t\t\tarrUserIds = dataRaw.user_ids;\n+\t\t}\n+\n+\t\tconst packages = [];\n+\t\tarrCourseIds.map( ( courseId, indexCourse ) => {\n+\t\t\tconst item = {};\n+\n+\t\t\titem.course_id = courseId;\n+\t\t\tarrUserIds.map( ( userID, indexUser ) => {\n+\t\t\t\tconst newItem = { ...item, user_id: userID };\n+\t\t\t\tpackages.push( newItem );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tconst data = packages.slice( 0, limitHandle );\n+\t\tconst totalPage = Math.ceil( packages.length \u002F limitHandle );\n+\n+\t\treturn { packages, data, totalPage };\n+\t};\n+\n+\tconst fetchAPIAssignCourse = ( packages, data, page, totalPage ) => {\n+\t\tconst url = AdminUtils.Api.admin.apiAssignUserCourse;\n+\t\tconst params = {\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t\t},\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( { data, page, totalPage } ),\n+\t\t};\n+\t\tconst elProgress = elFormAssignUserCourse.querySelector( '.percent' );\n+\t\tconst elButtonAssign = elFormAssignUserCourse.querySelector( '.lp-button-assign-course' );\n+\t\tconst elMessage = elFormAssignUserCourse.querySelector( '.message' );\n+\t\telButtonAssign.disabled = true;\n+\n+\t\tAdminUtils.Utils.lpFetchAPI( url, params, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { status, message } = response;\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tlet page = parseInt( response.data.page );\n+\t\t\t\t\tconst begin = page * limitHandle;\n+\t\t\t\t\tconst end = begin + limitHandle;\n+\t\t\t\t\tdata = packages.slice( begin, end );\n+\t\t\t\t\telProgress.innerHTML = response.data.percent;\n+\t\t\t\t\tfetchAPIAssignCourse( packages, data, ++page, totalPage );\n+\t\t\t\t} else if ( status === 'finished' ) {\n+\t\t\t\t\telProgress.innerHTML = '';\n+\t\t\t\t\telMessage.style.color = 'green';\n+\t\t\t\t\telMessage.innerHTML = message;\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\telMessage.innerHTML = '';\n+\t\t\t\t\t}, 2000 );\n+\t\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\t\t\u002F\u002F Clear data selected on Tom Select.\n+\t\t\t\t\tif ( ! elUserAssign.tomselect || ! elCourseAssign.tomselect ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\telUserAssign.tomselect.clear();\n+\t\t\t\t\telCourseAssign.tomselect.clear();\n+\t\t\t\t} else if ( status === 'error' ) {\n+\t\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\t\telMessage.style.color = 'red';\n+\t\t\t\t\telMessage.innerHTML = message;\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\telMessage.innerHTML = '';\n+\t\t\t\t\t}, 2000 );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( err ) => {\n+\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\telMessage.innerHTML = err.message;\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\tconst fetchAPIUnAssignCourse = ( packages, data, page, totalPage ) => {\n+\t\tconst url = AdminUtils.Api.admin.apiUnAssignUserCourse;\n+\t\tconst params = {\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t\t},\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( { data, page, totalPage } ),\n+\t\t};\n+\t\tconst elProgress = elFormUnAssignUserCourse.querySelector( '.percent' );\n+\t\tconst elButtonAssign = elFormUnAssignUserCourse.querySelector( '.lp-button-unassign-course' );\n+\t\tconst elMessage = elFormUnAssignUserCourse.querySelector( '.message' );\n+\t\telButtonAssign.disabled = true;\n+\n+\t\tAdminUtils.Utils.lpFetchAPI( url, params, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { status, message } = response;\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\tlet page = parseInt( response.data.page );\n+\t\t\t\t\tconst begin = page * limitHandle;\n+\t\t\t\t\tconst end = begin + limitHandle;\n+\t\t\t\t\tdata = packages.slice( begin, end );\n+\t\t\t\t\telProgress.innerHTML = response.data.percent;\n+\t\t\t\t\tfetchAPIUnAssignCourse( packages, data, ++page, totalPage );\n+\t\t\t\t} else if ( status === 'finished' ) {\n+\t\t\t\t\telProgress.innerHTML = '';\n+\t\t\t\t\telMessage.style.color = 'green';\n+\t\t\t\t\telMessage.innerHTML = message;\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\telMessage.innerHTML = '';\n+\t\t\t\t\t}, 2000 );\n+\t\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\t\t\u002F\u002F Clear data selected on Tom Select.\n+\t\t\t\t\tif ( ! elUserUnAssign.tomselect || ! elCourseUnAssign.tomselect ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\telUserUnAssign.tomselect.clear();\n+\t\t\t\t\telCourseUnAssign.tomselect.clear();\n+\t\t\t\t} else if ( status === 'error' ) {\n+\t\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\t\telMessage.style.color = 'red';\n+\t\t\t\t\telMessage.innerHTML = message;\n+\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\telMessage.innerHTML = '';\n+\t\t\t\t\t}, 2000 );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( err ) => {\n+\t\t\t\telButtonAssign.disabled = false;\n+\t\t\t\telMessage.innerHTML = err.message;\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\t\u002F\u002F DOMContentLoaded.\n+\tdocument.addEventListener( 'DOMContentLoaded', () => {\n+\t\tgetAllElements();\n+\t\tif ( ! elFormAssignUserCourse ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tevents();\n+\t} );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fadmin\u002Futils-admin.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,120 +1,120 @@\n-\u002F**\r\n- * Library run on Admin\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-import * as Utils from '..\u002Futils.js';\r\n-import TomSelect from 'tom-select';\r\n-import Api from '..\u002Fapi.js';\r\n-\r\n-const AdminUtilsFunctions = {\r\n-\tbuildTomSelect( elTomSelect, options, fetchAPI, dataSend, callBackHandleData ) {\r\n-\t\tif ( ! elTomSelect ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst optionDefault = {\r\n-\t\t\tplugins: {\r\n-\t\t\t\tremove_button: {\r\n-\t\t\t\t\ttitle: 'Remove this item',\r\n-\t\t\t\t},\r\n-\t\t\t\tdropdown_input: {},\r\n-\t\t\t},\r\n-\t\t\tonInitialize() {\r\n-\t\t\t},\r\n-\t\t\tonItemAdd( e ) {\r\n-\t\t\t\t\u002F\u002F Get list without current item.\r\n-\t\t\t\tif ( fetchAPI ) {\r\n-\t\t\t\t\tconst selectedOptions = Array.from( elTomSelect.selectedOptions );\r\n-\t\t\t\t\tconst selectedValues = selectedOptions.map( ( option ) => option.value );\r\n-\t\t\t\t\tselectedValues.push( e );\r\n-\t\t\t\t\tdataSend.id_not_in = selectedValues.join( ',' );\r\n-\r\n-\t\t\t\t\tfetchAPI( '', dataSend, callBackHandleData );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tif ( fetchAPI ) {\r\n-\t\t\toptionDefault.load = ( keySearch, callbackTom ) => {\r\n-\t\t\t\tconst selectedOptions = Array.from( elTomSelect.selectedOptions );\r\n-\t\t\t\tconst selectedValues = selectedOptions.map( ( option ) => option.value );\r\n-\t\t\t\tdataSend.id_not_in = selectedValues.join( ',' );\r\n-\r\n-\t\t\t\tfetchAPI(\r\n-\t\t\t\t\tkeySearch,\r\n-\t\t\t\t\tdataSend,\r\n-\t\t\t\t\tAdminUtilsFunctions.callBackTomSelectSearchAPI( callbackTom, callBackHandleData )\r\n-\t\t\t\t);\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\toptions = { ...optionDefault, ...options };\r\n-\t\tconst items_selected = options.options;\r\n-\t\t\u002F*if ( options?.options?.length > 20 ) {\r\n-\t\t\tconst chunkSize = 20;\r\n-\t\t\tconst length = options.options.length;\r\n-\t\t\tlet i = 0;\r\n-\t\t\tconst chunkedOptions = { ...options };\r\n-\t\t\tchunkedOptions.options = items_selected.slice( i, chunkSize );\r\n-\r\n-\t\t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\r\n-\t\t\ti += chunkSize;\r\n-\r\n-\t\t\tconst interval = setInterval( () => {\r\n-\t\t\t\tif ( i > ( length - 1 ) ) {\r\n-\t\t\t\t\tclearInterval( interval );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\r\n-\t\t\t\ti += chunkSize;\r\n-\t\t\t\ttomSelect.addOptions( optionsSlice );\r\n-\t\t\t\ttomSelect.setValue( options.items );\r\n-\t\t\t}, 200 );\r\n-\r\n-\t\t\treturn tomSelect;\r\n-\t\t}*\u002F\r\n-\r\n-\t\treturn new TomSelect( elTomSelect, options );\r\n-\t},\r\n-\tcallBackTomSelectSearchAPI( callbackTom, callBackHandleData ) {\r\n-\t\treturn {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst options = callBackHandleData.success( response );\r\n-\t\t\t\tcallbackTom( options );\r\n-\t\t\t},\r\n-\t\t};\r\n-\t},\r\n-\tfetchCourses( keySearch = '', dataSend = {}, callback ) {\r\n-\t\tconst url = Api.admin.apiSearchCourses;\r\n-\t\tdataSend.search = keySearch;\r\n-\t\tconst params = {\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t\t},\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( dataSend ),\r\n-\t\t};\r\n-\r\n-\t\tUtils.lpFetchAPI( url, params, callback );\r\n-\t},\r\n-\tfetchUsers( keySearch = '', dataSend = {}, callback ) {\r\n-\t\tconst url = Api.admin.apiSearchUsers;\r\n-\t\tdataSend.search = keySearch;\r\n-\t\tconst params = {\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\r\n-\t\t\t},\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( dataSend ),\r\n-\t\t};\r\n-\r\n-\t\tUtils.lpFetchAPI( url, params, callback );\r\n-\t},\r\n-};\r\n-\r\n-export { Utils, AdminUtilsFunctions, Api };\r\n-\r\n+\u002F**\n+ * Library run on Admin\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.1\n+ *\u002F\n+import * as Utils from '..\u002Futils.js';\n+import TomSelect from 'tom-select';\n+import Api from '..\u002Fapi.js';\n+\n+const AdminUtilsFunctions = {\n+\tbuildTomSelect( elTomSelect, options, fetchAPI, dataSend, callBackHandleData ) {\n+\t\tif ( ! elTomSelect ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst optionDefault = {\n+\t\t\tplugins: {\n+\t\t\t\tremove_button: {\n+\t\t\t\t\ttitle: 'Remove this item',\n+\t\t\t\t},\n+\t\t\t\tdropdown_input: {},\n+\t\t\t},\n+\t\t\tonInitialize() {\n+\t\t\t},\n+\t\t\tonItemAdd( e ) {\n+\t\t\t\t\u002F\u002F Get list without current item.\n+\t\t\t\tif ( fetchAPI ) {\n+\t\t\t\t\tconst selectedOptions = Array.from( elTomSelect.selectedOptions );\n+\t\t\t\t\tconst selectedValues = selectedOptions.map( ( option ) => option.value );\n+\t\t\t\t\tselectedValues.push( e );\n+\t\t\t\t\tdataSend.id_not_in = selectedValues.join( ',' );\n+\n+\t\t\t\t\tfetchAPI( '', dataSend, callBackHandleData );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tif ( fetchAPI ) {\n+\t\t\toptionDefault.load = ( keySearch, callbackTom ) => {\n+\t\t\t\tconst selectedOptions = Array.from( elTomSelect.selectedOptions );\n+\t\t\t\tconst selectedValues = selectedOptions.map( ( option ) => option.value );\n+\t\t\t\tdataSend.id_not_in = selectedValues.join( ',' );\n+\n+\t\t\t\tfetchAPI(\n+\t\t\t\t\tkeySearch,\n+\t\t\t\t\tdataSend,\n+\t\t\t\t\tAdminUtilsFunctions.callBackTomSelectSearchAPI( callbackTom, callBackHandleData )\n+\t\t\t\t);\n+\t\t\t};\n+\t\t}\n+\n+\t\toptions = { ...optionDefault, ...options };\n+\t\tconst items_selected = options.options;\n+\t\t\u002F*if ( options?.options?.length > 20 ) {\n+\t\t\tconst chunkSize = 20;\n+\t\t\tconst length = options.options.length;\n+\t\t\tlet i = 0;\n+\t\t\tconst chunkedOptions = { ...options };\n+\t\t\tchunkedOptions.options = items_selected.slice( i, chunkSize );\n+\n+\t\t\tconst tomSelect = new TomSelect( elTomSelect, chunkedOptions );\n+\t\t\ti += chunkSize;\n+\n+\t\t\tconst interval = setInterval( () => {\n+\t\t\t\tif ( i > ( length - 1 ) ) {\n+\t\t\t\t\tclearInterval( interval );\n+\t\t\t\t}\n+\n+\t\t\t\tconst optionsSlice = items_selected.slice( i, i + chunkSize );\n+\t\t\t\ti += chunkSize;\n+\t\t\t\ttomSelect.addOptions( optionsSlice );\n+\t\t\t\ttomSelect.setValue( options.items );\n+\t\t\t}, 200 );\n+\n+\t\t\treturn tomSelect;\n+\t\t}*\u002F\n+\n+\t\treturn new TomSelect( elTomSelect, options );\n+\t},\n+\tcallBackTomSelectSearchAPI( callbackTom, callBackHandleData ) {\n+\t\treturn {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst options = callBackHandleData.success( response );\n+\t\t\t\tcallbackTom( options );\n+\t\t\t},\n+\t\t};\n+\t},\n+\tfetchCourses( keySearch = '', dataSend = {}, callback ) {\n+\t\tconst url = Api.admin.apiSearchCourses;\n+\t\tdataSend.search = keySearch;\n+\t\tconst params = {\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t\t},\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( dataSend ),\n+\t\t};\n+\n+\t\tUtils.lpFetchAPI( url, params, callback );\n+\t},\n+\tfetchUsers( keySearch = '', dataSend = {}, callback ) {\n+\t\tconst url = Api.admin.apiSearchUsers;\n+\t\tdataSend.search = keySearch;\n+\t\tconst params = {\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t\t'X-WP-Nonce': lpDataAdmin.nonce,\n+\t\t\t},\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( dataSend ),\n+\t\t};\n+\n+\t\tUtils.lpFetchAPI( url, params, callback );\n+\t},\n+};\n+\n+export { Utils, AdminUtilsFunctions, Api };\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fapi.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u002F**\r\n- * List API on backend\r\n- *\r\n- * @since 4.2.6\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-const lplistAPI = {};\r\n-let lp_rest_url;\r\n-\r\n-if ( 'undefined' !== typeof lpDataAdmin ) {\r\n-\tlp_rest_url = lpDataAdmin.lp_rest_url;\r\n-\tlplistAPI.admin = {\r\n-\t\tapiAdminNotice: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices',\r\n-\t\tapiAddons: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Fall',\r\n-\t\tapiAddonAction: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Faction-n',\r\n-\t\tapiAddonsPurchase: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Finfo-addons-purchase',\r\n-\t\tapiSearchCourses: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course',\r\n-\t\tapiSearchUsers: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user',\r\n-\t\tapiAssignUserCourse: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fassign-user-course',\r\n-\t\tapiUnAssignUserCourse: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Funassign-user-course',\r\n-\t};\r\n-}\r\n-\r\n-if ( 'undefined' !== typeof lpData ) {\r\n-\tlp_rest_url = lpData.lp_rest_url;\r\n-\tlplistAPI.frontend = {\r\n-\t\tapiWidgets: lp_rest_url + 'lp\u002Fv1\u002Fwidgets\u002Fapi',\r\n-\t\tapiCourses: lp_rest_url + 'lp\u002Fv1\u002Fcourses\u002Farchive-course',\r\n-\t\tapiAJAX: lp_rest_url + 'lp\u002Fv1\u002Fload_content_via_ajax\u002F', \u002F\u002F Deprecated since 4.3.0\r\n-\t\tapiProfileCoverImage: lp_rest_url + 'lp\u002Fv1\u002Fprofile\u002Fcover-image',\r\n-\t};\r\n-}\r\n-\r\n-if ( lp_rest_url ) {\r\n-\tlplistAPI.apiCourses = lp_rest_url + 'lp\u002Fv1\u002Fcourses\u002F';\r\n-}\r\n-\r\n-export default lplistAPI;\r\n+\u002F**\n+ * List API on backend\n+ *\n+ * @since 4.2.6\n+ * @version 1.0.2\n+ *\u002F\n+\n+const lplistAPI = {};\n+let lp_rest_url;\n+\n+if ( 'undefined' !== typeof lpDataAdmin ) {\n+\tlp_rest_url = lpDataAdmin.lp_rest_url;\n+\tlplistAPI.admin = {\n+\t\tapiAdminNotice: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fadmin-notices',\n+\t\tapiAddons: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Fall',\n+\t\tapiAddonAction: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Faction-n',\n+\t\tapiAddonsPurchase: lp_rest_url + 'lp\u002Fv1\u002Faddon\u002Finfo-addons-purchase',\n+\t\tapiSearchCourses: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course',\n+\t\tapiSearchUsers: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user',\n+\t\tapiAssignUserCourse: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fassign-user-course',\n+\t\tapiUnAssignUserCourse: lp_rest_url + 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Funassign-user-course',\n+\t};\n+}\n+\n+if ( 'undefined' !== typeof lpData ) {\n+\tlp_rest_url = lpData.lp_rest_url;\n+\tlplistAPI.frontend = {\n+\t\tapiWidgets: lp_rest_url + 'lp\u002Fv1\u002Fwidgets\u002Fapi',\n+\t\tapiCourses: lp_rest_url + 'lp\u002Fv1\u002Fcourses\u002Farchive-course',\n+\t\tapiAJAX: lp_rest_url + 'lp\u002Fv1\u002Fload_content_via_ajax\u002F', \u002F\u002F Deprecated since 4.3.0\n+\t\tapiProfileCoverImage: lp_rest_url + 'lp\u002Fv1\u002Fprofile\u002Fcover-image',\n+\t};\n+}\n+\n+if ( lp_rest_url ) {\n+\tlplistAPI.apiCourses = lp_rest_url + 'lp\u002Fv1\u002Fcourses\u002F';\n+}\n+\n+export default lplistAPI;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourse-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourse-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourse-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourse-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,81 +1,81 @@\n-const classCourseFilter = 'lp-form-course-filter';\r\n-\r\n-\u002F\u002F Click element\r\n-document.addEventListener( 'click', function( e ) {\r\n-    const target = e.target;\r\n-\r\n-\tif ( target.classList.contains( 'course-filter-reset' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\twindow.lpCourseFilterEl.resetList( target );\r\n-\t}\r\n-\r\n-    if ( target.classList.contains( 'lp-button-popup' ) || target.classList.contains( 'icon-align-right' ) || target.classList.contains( 'icon-align-left' ) || target.classList.contains( 'selected-filter' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst elLpCourseFilter = target.closest( '.elementor-widget-learnpress_filter_course' );\r\n-\t\tif ( ! elLpCourseFilter ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\telLpCourseFilter.classList.toggle(\"filter-popup-show\");\r\n-\t}\r\n-\r\n-\tif ( target.classList.contains( 'icon-toggle-filter' )) {\r\n-\t\te.preventDefault();\r\n-\t\tconst toggleContent = target.closest( '.toggle-content' );\r\n-\t\tif ( ! toggleContent ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst toggleOn = target.closest( '.toggle-on' );\r\n-\t\t\r\n-\t\tif (  ! toggleOn ) {\r\n-\t\t\ttoggleContent.classList.add(\"toggle-on\");\r\n-\t\t}else {\r\n-\t\t\ttoggleContent.classList.remove(\"toggle-on\");\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( target.classList.contains( 'filter-bg' ) ) {\r\n-\t\tconst elLpCourseFilter = target.closest( '.elementor-widget-learnpress_filter_course' );\r\n-\t\tif ( ! elLpCourseFilter ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\telLpCourseFilter.classList.remove(\"filter-popup-show\");\r\n-\t}\r\n-\r\n-\tif ( target.classList.contains( 'icon-remove-selected' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\twindow.lpCourseFilterEl.resetSelected( target );\r\n-\t}\r\n-});\r\n-\r\n-window.lpCourseFilterEl = {\r\n-\tresetList: ( btnReset ) => {\r\n-\t\tconst elSelectedList = document.querySelector( '.selected-list' );\r\n-\t\tif ( elSelectedList ) {\r\n-\t\t\telSelectedList.remove();\r\n-\t\t}\r\n-\t},\r\n-    resetSelected: ( target ) => {\r\n-\t\tconst form = document.querySelector( `.${ classCourseFilter }` );\r\n-\t\tconst btnSubmit = form.querySelector( '.course-filter-submit' );\r\n-\t\tconst lpSelected = target.closest( '.selected-item' );\r\n-\t\tconst lpSelectedName = lpSelected.getAttribute( 'data-name' ); \r\n-\t\tconst lpSelectedID = lpSelected.getAttribute( 'data-value' );\r\n-\r\n-\t\tif ( ! lpSelected ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tfor ( let i = 0; i \u003C form.elements.length; i++ ) {\r\n-\t\t\tif(form.elements[ i ].getAttribute('name') ==  lpSelectedName && form.elements[ i ].getAttribute('value') == lpSelectedID){\r\n-\t\t\t\tform.elements[ i ].removeAttribute( 'checked' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif ( lpGlobalSettings.is_course_archive ) {\r\n-\t\t\tbtnSubmit.click();\r\n-\t\t}\r\n-\t\tif ( lpSelected ) {\r\n-\t\t\tlpSelected.remove();\r\n-\t\t}\r\n-\t\t\u002F\u002F Load AJAX widget by params\r\n-\t\twindow.lpCourseFilter.loadWidgetFilterREST( form );\r\n-\t},\r\n+const classCourseFilter = 'lp-form-course-filter';\n+\n+\u002F\u002F Click element\n+document.addEventListener( 'click', function( e ) {\n+    const target = e.target;\n+\n+\tif ( target.classList.contains( 'course-filter-reset' ) ) {\n+\t\te.preventDefault();\n+\t\twindow.lpCourseFilterEl.resetList( target );\n+\t}\n+\n+    if ( target.classList.contains( 'lp-button-popup' ) || target.classList.contains( 'icon-align-right' ) || target.classList.contains( 'icon-align-left' ) || target.classList.contains( 'selected-filter' ) ) {\n+\t\te.preventDefault();\n+\t\tconst elLpCourseFilter = target.closest( '.elementor-widget-learnpress_filter_course' );\n+\t\tif ( ! elLpCourseFilter ) {\n+\t\t\treturn;\n+\t\t}\n+\t\telLpCourseFilter.classList.toggle(\"filter-popup-show\");\n+\t}\n+\n+\tif ( target.classList.contains( 'icon-toggle-filter' )) {\n+\t\te.preventDefault();\n+\t\tconst toggleContent = target.closest( '.toggle-content' );\n+\t\tif ( ! toggleContent ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst toggleOn = target.closest( '.toggle-on' );\n+\t\t\n+\t\tif (  ! toggleOn ) {\n+\t\t\ttoggleContent.classList.add(\"toggle-on\");\n+\t\t}else {\n+\t\t\ttoggleContent.classList.remove(\"toggle-on\");\n+\t\t}\n+\t}\n+\n+\tif ( target.classList.contains( 'filter-bg' ) ) {\n+\t\tconst elLpCourseFilter = target.closest( '.elementor-widget-learnpress_filter_course' );\n+\t\tif ( ! elLpCourseFilter ) {\n+\t\t\treturn;\n+\t\t}\n+\t\telLpCourseFilter.classList.remove(\"filter-popup-show\");\n+\t}\n+\n+\tif ( target.classList.contains( 'icon-remove-selected' ) ) {\n+\t\te.preventDefault();\n+\t\twindow.lpCourseFilterEl.resetSelected( target );\n+\t}\n+});\n+\n+window.lpCourseFilterEl = {\n+\tresetList: ( btnReset ) => {\n+\t\tconst elSelectedList = document.querySelector( '.selected-list' );\n+\t\tif ( elSelectedList ) {\n+\t\t\telSelectedList.remove();\n+\t\t}\n+\t},\n+    resetSelected: ( target ) => {\n+\t\tconst form = document.querySelector( `.${ classCourseFilter }` );\n+\t\tconst btnSubmit = form.querySelector( '.course-filter-submit' );\n+\t\tconst lpSelected = target.closest( '.selected-item' );\n+\t\tconst lpSelectedName = lpSelected.getAttribute( 'data-name' ); \n+\t\tconst lpSelectedID = lpSelected.getAttribute( 'data-value' );\n+\n+\t\tif ( ! lpSelected ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tfor ( let i = 0; i \u003C form.elements.length; i++ ) {\n+\t\t\tif(form.elements[ i ].getAttribute('name') ==  lpSelectedName && form.elements[ i ].getAttribute('value') == lpSelectedID){\n+\t\t\t\tform.elements[ i ].removeAttribute( 'checked' );\n+\t\t\t}\n+\t\t}\n+\t\tif ( lpGlobalSettings.is_course_archive ) {\n+\t\t\tbtnSubmit.click();\n+\t\t}\n+\t\tif ( lpSelected ) {\n+\t\t\tlpSelected.remove();\n+\t\t}\n+\t\t\u002F\u002F Load AJAX widget by params\n+\t\twindow.lpCourseFilter.loadWidgetFilterREST( form );\n+\t},\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Felementor\u002Fcourses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,413 +1,413 @@\n-import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '..\u002F..\u002Fapps\u002Fjs\u002Futils\u002Futils';\r\n-import Cookie from '..\u002Futils\u002Fcookie';\r\n-\r\n-window.lpElWidgetCoursesByPage = ( () => {\r\n-\tconst classCoursesWrapper = 'list-courses-elm-wrapper';\r\n-\tconst classListCourse = 'list-courses-elm';\r\n-\tconst classPaginationCourse = 'learn-press-pagination';\r\n-\tconst classCoursesPageResult = 'courses-page-result';\r\n-\tconst classSkeleton = 'lp-skeleton-animation';\r\n-\tlet filterCourses = {};\r\n-\tconst currentUrl = lpGetCurrentURLNoParam();\r\n-\tlet urlAPI;\r\n-\tlet typePagination = 'number';\r\n-\tlet firstLoad = true;\r\n-\tlet timeOutSearch;\r\n-\tlet isLoadingInfinite = false;\r\n-\tconst isLoadRest = false;\r\n-\tconst fetchAPI = ( args, callBack = {} ) => {\r\n-\t\t\u002F\u002Fconsole.log( 'Fetch API Courses' );\r\n-\t\tconst paramsFetch = {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: JSON.stringify( args ),\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson', \u002F\u002F Set the content type to JSON\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tif ( 'undefined' !== typeof args.nonce ) {\r\n-\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = args.nonce;\r\n-\t\t}\r\n-\r\n-\t\tlpFetchAPI( urlAPI + 'lp\u002Fv1\u002Fcourses\u002Fcourses-widget-by-page', paramsFetch, callBack );\r\n-\t};\r\n-\tconst callBackFilter = ( elCoursesWrapper ) => {\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\r\n-\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\r\n-\t\tconst elPagination = elCoursesWrapper.querySelector( `.${ classPaginationCourse }` );\r\n-\t\tconst elCoursesPageResult = elCoursesWrapper.querySelector( `.${ classCoursesPageResult }` );\r\n-\r\n-\t\treturn {\r\n-\t\t\tbefore: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst divTmp = document.createElement( 'div' );\r\n-\t\t\t\tdivTmp.innerHTML = res.data.content || '';\r\n-\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\r\n-\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\r\n-\t\t\t\tconst elCoursesPageResultTmp = divTmp.querySelector( `.${ classCoursesPageResult }` );\r\n-\r\n-\t\t\t\tif ( elListCourse ) {\r\n-\t\t\t\t\telListCourse.innerHTML = elListCourseTmp.innerHTML;\r\n-\r\n-\t\t\t\t\tif ( elPagination ) {\r\n-\t\t\t\t\t\telPagination.innerHTML = elPaginationTmp.innerHTML;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( elCoursesPageResult ) {\r\n-\t\t\t\t\t\telCoursesPageResult.innerHTML = elCoursesPageResultTmp.innerHTML;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Scroll to el\r\n-\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\r\n-\t\t\t\t\telListCourse.scrollIntoView( optionScroll );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( res.data.pagination ) {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\t};\r\n-\tconst callBackPaginationTypeLoadMore = ( elCoursesWrapper ) => {\r\n-\t\tconst btnLoadMore = elCoursesWrapper.querySelector( '.courses-btn-load-more' );\r\n-\t\tlet elLoading;\r\n-\t\tif ( btnLoadMore ) {\r\n-\t\t\telLoading = btnLoadMore.querySelector( '.lp-loading-circle' );\r\n-\t\t}\r\n-\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\r\n-\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\r\n-\r\n-\t\treturn {\r\n-\t\t\tbefore: () => {\r\n-\t\t\t\tif ( btnLoadMore ) {\r\n-\t\t\t\t\telLoading.classList.remove( 'hide' );\r\n-\t\t\t\t\tbtnLoadMore.setAttribute( 'disabled', 'disabled' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst divTmp = document.createElement( 'div' );\r\n-\t\t\t\tdivTmp.innerHTML = res.data.content || '';\r\n-\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\r\n-\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\r\n-\r\n-\t\t\t\tif ( elListCourse ) {\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );\r\n-\t\t\t\t\tif ( ! elPaginationTmp ) {\r\n-\t\t\t\t\t\tbtnLoadMore.remove();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( res.data.pagination ) {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( btnLoadMore ) {\r\n-\t\t\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t\t\t\tbtnLoadMore.removeAttribute( 'disabled' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\t};\r\n-\tconst callBackPaginationTypeInfinite = ( elCoursesWrapper ) => {\r\n-\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\r\n-\t\tconst elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );\r\n-\t\tlet loading;\r\n-\t\tif ( elInfinite ) {\r\n-\t\t\tloading = elInfinite.querySelector( '.lp-loading-circle' );\r\n-\t\t}\r\n-\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\r\n-\r\n-\t\treturn {\r\n-\t\t\tbefore: () => {\r\n-\t\t\t\tisLoadingInfinite = true;\r\n-\t\t\t\tif ( loading ) {\r\n-\t\t\t\t\tloading.classList.remove( 'hide' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst divTmp = document.createElement( 'div' );\r\n-\t\t\t\tdivTmp.innerHTML = res.data.content || '';\r\n-\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\r\n-\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\r\n-\r\n-\t\t\t\tif ( elListCourse ) {\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );\r\n-\t\t\t\t\tif ( ! elPaginationTmp ) {\r\n-\t\t\t\t\t\telInfinite.remove();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( res.data.pagination ) {\r\n-\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tisLoadingInfinite = false;\r\n-\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( elInfinite ) {\r\n-\t\t\t\t\tloading.classList.add( 'hide' );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\t};\r\n-\tconst callApiCoursesOfWidget = ( elCoursesWrapper, args = {} ) => {\r\n-\t\tconsole.log( '\u002F*** loadApiCoursesOfWidget ***\u002F' );\r\n-\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\r\n-\t\tlet settingsWidget = window[ `lpWidget_${ idWidget }` ];\r\n-\r\n-\t\tif ( ! settingsWidget ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( 'yes' !== settingsWidget.courses_rest ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( 'yes' === settingsWidget.courses_rest_no_load_page && firstLoad ) {\r\n-\t\t\tfirstLoad = false;\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tsettingsWidget = { ...settingsWidget, ...args };\r\n-\r\n-\t\turlAPI = settingsWidget.lp_rest_url ?? '';\r\n-\t\ttypePagination = settingsWidget.courses_rest_pagination_type ?? 'number';\r\n-\r\n-\t\tlet callBack;\r\n-\t\tswitch ( typePagination ) {\r\n-\t\tcase 'load-more':\r\n-\t\t\tcallBack = callBackPaginationTypeLoadMore( elCoursesWrapper );\r\n-\t\t\tbreak;\r\n-\t\tcase 'infinite':\r\n-\t\t\tcallBack = callBackPaginationTypeInfinite( elCoursesWrapper );\r\n-\t\t\tbreak;\r\n-\t\tdefault: \u002F\u002F number\r\n-\t\t\tcallBack = callBackFilter( elCoursesWrapper );\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! callBack ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tfetchAPI( settingsWidget, callBack );\r\n-\t};\r\n-\tconst findAllWidgetCoursesByPage = () => {\r\n-\t\tconst elCoursesWrappers = document.querySelectorAll( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrappers ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\telCoursesWrappers.forEach( ( el ) => {\r\n-\t\t\tcallApiCoursesOfWidget( el );\r\n-\t\t} );\r\n-\t};\r\n-\tconst onChangeSortBy = ( e, target ) => {\r\n-\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\r\n-\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\r\n-\t\tfilterCourses.order_by = target.value;\r\n-\t\tfilterCourses.paged = 1;\r\n-\r\n-\t\tif ( 'yes' !== settingsWidget.courses_rest ) {\r\n-\t\t\twindow.location.href = lpAddQueryArgs( currentUrl, filterCourses );\r\n-\t\t} else {\r\n-\t\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\r\n-\t\t}\r\n-\t};\r\n-\tconst onChangeLayout = ( e, target ) => {\r\n-\t\tif ( ! target.classList.contains( 'courses-layout' ) ) {\r\n-\t\t\tif ( ! target.closest( '.courses-layout' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\ttarget = target.closest( '.courses-layout' );\r\n-\t\t}\r\n-\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\te.preventDefault();\r\n-\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\r\n-\t\tconst elUlLayouts = target.closest( '.courses-layouts-display-list' );\r\n-\t\tconst widgetId = elCoursesWrapper.dataset.widgetId;\r\n-\t\tconst elLayouts = elUlLayouts.querySelectorAll( 'li' );\r\n-\t\telLayouts.forEach( ( el ) => {\r\n-\t\t\tel.classList.remove( 'active' );\r\n-\t\t} );\r\n-\t\tconst layout = target.dataset.layout;\r\n-\t\ttarget.classList.add( 'active' );\r\n-\t\telListCourse.classList.remove( 'grid', 'list' );\r\n-\t\telListCourse.classList.add( layout );\r\n-\t\tCookie.set( `layout_widget_${ widgetId }`, layout, 7 );\r\n-\t};\r\n-\tconst events = () => {\r\n-\t\tdocument.addEventListener( 'change', function( e ) {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tonChangeSortBy( e, target );\r\n-\t\t} );\r\n-\t\tdocument.addEventListener( 'click', function( e ) {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tclickLoadMore( e, target );\r\n-\t\t\tclickNumberPage( e, target );\r\n-\t\t\tonChangeLayout( e, target );\r\n-\t\t} );\r\n-\t\tdocument.addEventListener( 'scroll', function( e ) {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tscrollInfinite( e, target );\r\n-\t\t} );\r\n-\t\tdocument.addEventListener( 'keyup', function( e ) {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\r\n-\t\t} );\r\n-\t\tdocument.addEventListener( 'submit', function( e ) {\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\r\n-\t\t} );\r\n-\t};\r\n-\tconst clickNumberPage = ( e, target ) => {\r\n-\t\tif ( ! target.classList.contains( 'page-numbers' ) ) {\r\n-\t\t\tif ( ! target.closest( '.page-numbers' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\ttarget = target.closest( '.page-numbers' );\r\n-\t\t}\r\n-\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\r\n-\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\r\n-\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\t\tconst pageCurrent = filterCourses.paged;\r\n-\t\tif ( target.classList.contains( 'prev' ) ) {\r\n-\t\t\tfilterCourses.paged = pageCurrent - 1;\r\n-\t\t} else if ( target.classList.contains( 'next' ) ) {\r\n-\t\t\tfilterCourses.paged = pageCurrent + 1;\r\n-\t\t} else {\r\n-\t\t\tfilterCourses.paged = parseInt( target.textContent );\r\n-\t\t}\r\n-\r\n-\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\r\n-\t};\r\n-\tconst clickLoadMore = ( e, target ) => {\r\n-\t\tif ( ! target.classList.contains( 'courses-btn-load-more' ) ) {\r\n-\t\t\tif ( ! target.closest( '.courses-btn-load-more' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\ttarget = target.closest( '.courses-btn-load-more' );\r\n-\t\t}\r\n-\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\r\n-\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\r\n-\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\t\t++filterCourses.paged;\r\n-\r\n-\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\r\n-\t};\r\n-\tconst scrollInfinite = ( e, target ) => {\r\n-\t\tconst elCoursesWrapper = document.querySelector( `.${ classCoursesWrapper }` );\r\n-\t\tif ( ! elCoursesWrapper ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );\r\n-\t\tif ( ! elInfinite ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\r\n-\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\r\n-\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create an IntersectionObserver object.\r\n-\t\tconst observer = new IntersectionObserver( function( entries ) {\r\n-\t\t\tfor ( const entry of entries ) {\r\n-\t\t\t\t\u002F\u002F If the entry is intersecting, load the image.\r\n-\t\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\t\tif ( isLoadingInfinite ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t++filterCourses.paged;\r\n-\t\t\t\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\r\n-\t\t\t\t\tobserver.unobserve( entry.target );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tobserver.observe( elInfinite );\r\n-\t};\r\n-\treturn {\r\n-\t\tinit: () => {\r\n-\t\t\tconst urlParams = {};\r\n-\t\t\tconst urlQueryString = window.location.search;\r\n-\t\t\tconst urlSearchParams = new URLSearchParams( urlQueryString );\r\n-\t\t\tfor ( const [ key, val ] of urlSearchParams.entries() ) {\r\n-\t\t\t\turlParams[ key ] = val;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002FfilterCourses = { ...lpArchiveSkeletonParam, ...urlParams };\r\n-\t\t\tfilterCourses = { ...urlParams };\r\n-\t\t\tfilterCourses.paged = parseInt( filterCourses.paged || 1 );\r\n-\t\t\tfindAllWidgetCoursesByPage();\r\n-\t\t\tevents();\r\n-\t\t},\r\n-\t};\r\n-} )();\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function() {\r\n-\twindow.lpElWidgetCoursesByPage.init();\r\n-} );\r\n+import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '..\u002F..\u002Fapps\u002Fjs\u002Futils\u002Futils';\n+import Cookie from '..\u002Futils\u002Fcookie';\n+\n+window.lpElWidgetCoursesByPage = ( () => {\n+\tconst classCoursesWrapper = 'list-courses-elm-wrapper';\n+\tconst classListCourse = 'list-courses-elm';\n+\tconst classPaginationCourse = 'learn-press-pagination';\n+\tconst classCoursesPageResult = 'courses-page-result';\n+\tconst classSkeleton = 'lp-skeleton-animation';\n+\tlet filterCourses = {};\n+\tconst currentUrl = lpGetCurrentURLNoParam();\n+\tlet urlAPI;\n+\tlet typePagination = 'number';\n+\tlet firstLoad = true;\n+\tlet timeOutSearch;\n+\tlet isLoadingInfinite = false;\n+\tconst isLoadRest = false;\n+\tconst fetchAPI = ( args, callBack = {} ) => {\n+\t\t\u002F\u002Fconsole.log( 'Fetch API Courses' );\n+\t\tconst paramsFetch = {\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: JSON.stringify( args ),\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson', \u002F\u002F Set the content type to JSON\n+\t\t\t},\n+\t\t};\n+\n+\t\tif ( 'undefined' !== typeof args.nonce ) {\n+\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = args.nonce;\n+\t\t}\n+\n+\t\tlpFetchAPI( urlAPI + 'lp\u002Fv1\u002Fcourses\u002Fcourses-widget-by-page', paramsFetch, callBack );\n+\t};\n+\tconst callBackFilter = ( elCoursesWrapper ) => {\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\n+\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\n+\t\tconst elPagination = elCoursesWrapper.querySelector( `.${ classPaginationCourse }` );\n+\t\tconst elCoursesPageResult = elCoursesWrapper.querySelector( `.${ classCoursesPageResult }` );\n+\n+\t\treturn {\n+\t\t\tbefore: () => {\n+\n+\t\t\t},\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst divTmp = document.createElement( 'div' );\n+\t\t\t\tdivTmp.innerHTML = res.data.content || '';\n+\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\n+\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\n+\t\t\t\tconst elCoursesPageResultTmp = divTmp.querySelector( `.${ classCoursesPageResult }` );\n+\n+\t\t\t\tif ( elListCourse ) {\n+\t\t\t\t\telListCourse.innerHTML = elListCourseTmp.innerHTML;\n+\n+\t\t\t\t\tif ( elPagination ) {\n+\t\t\t\t\t\telPagination.innerHTML = elPaginationTmp.innerHTML;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( elCoursesPageResult ) {\n+\t\t\t\t\t\telCoursesPageResult.innerHTML = elCoursesPageResultTmp.innerHTML;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Scroll to el\n+\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\n+\t\t\t\t\telListCourse.scrollIntoView( optionScroll );\n+\t\t\t\t} else {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( res.data.pagination ) {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\t};\n+\tconst callBackPaginationTypeLoadMore = ( elCoursesWrapper ) => {\n+\t\tconst btnLoadMore = elCoursesWrapper.querySelector( '.courses-btn-load-more' );\n+\t\tlet elLoading;\n+\t\tif ( btnLoadMore ) {\n+\t\t\telLoading = btnLoadMore.querySelector( '.lp-loading-circle' );\n+\t\t}\n+\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\n+\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\n+\n+\t\treturn {\n+\t\t\tbefore: () => {\n+\t\t\t\tif ( btnLoadMore ) {\n+\t\t\t\t\telLoading.classList.remove( 'hide' );\n+\t\t\t\t\tbtnLoadMore.setAttribute( 'disabled', 'disabled' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst divTmp = document.createElement( 'div' );\n+\t\t\t\tdivTmp.innerHTML = res.data.content || '';\n+\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\n+\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\n+\n+\t\t\t\tif ( elListCourse ) {\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );\n+\t\t\t\t\tif ( ! elPaginationTmp ) {\n+\t\t\t\t\t\tbtnLoadMore.remove();\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( res.data.pagination ) {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t}\n+\t\t\t\tif ( btnLoadMore ) {\n+\t\t\t\t\telLoading.classList.add( 'hide' );\n+\t\t\t\t\tbtnLoadMore.removeAttribute( 'disabled' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\t};\n+\tconst callBackPaginationTypeInfinite = ( elCoursesWrapper ) => {\n+\t\tconst skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );\n+\t\tconst elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );\n+\t\tlet loading;\n+\t\tif ( elInfinite ) {\n+\t\t\tloading = elInfinite.querySelector( '.lp-loading-circle' );\n+\t\t}\n+\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\n+\n+\t\treturn {\n+\t\t\tbefore: () => {\n+\t\t\t\tisLoadingInfinite = true;\n+\t\t\t\tif ( loading ) {\n+\t\t\t\t\tloading.classList.remove( 'hide' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst divTmp = document.createElement( 'div' );\n+\t\t\t\tdivTmp.innerHTML = res.data.content || '';\n+\t\t\t\tconst elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );\n+\t\t\t\tconst elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );\n+\n+\t\t\t\tif ( elListCourse ) {\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );\n+\t\t\t\t\tif ( ! elPaginationTmp ) {\n+\t\t\t\t\t\telInfinite.remove();\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( res.data.pagination ) {\n+\t\t\t\t\telCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tisLoadingInfinite = false;\n+\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t}\n+\t\t\t\tif ( elInfinite ) {\n+\t\t\t\t\tloading.classList.add( 'hide' );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\t};\n+\tconst callApiCoursesOfWidget = ( elCoursesWrapper, args = {} ) => {\n+\t\tconsole.log( '\u002F*** loadApiCoursesOfWidget ***\u002F' );\n+\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\n+\t\tlet settingsWidget = window[ `lpWidget_${ idWidget }` ];\n+\n+\t\tif ( ! settingsWidget ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( 'yes' !== settingsWidget.courses_rest ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( 'yes' === settingsWidget.courses_rest_no_load_page && firstLoad ) {\n+\t\t\tfirstLoad = false;\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tsettingsWidget = { ...settingsWidget, ...args };\n+\n+\t\turlAPI = settingsWidget.lp_rest_url ?? '';\n+\t\ttypePagination = settingsWidget.courses_rest_pagination_type ?? 'number';\n+\n+\t\tlet callBack;\n+\t\tswitch ( typePagination ) {\n+\t\tcase 'load-more':\n+\t\t\tcallBack = callBackPaginationTypeLoadMore( elCoursesWrapper );\n+\t\t\tbreak;\n+\t\tcase 'infinite':\n+\t\t\tcallBack = callBackPaginationTypeInfinite( elCoursesWrapper );\n+\t\t\tbreak;\n+\t\tdefault: \u002F\u002F number\n+\t\t\tcallBack = callBackFilter( elCoursesWrapper );\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tif ( ! callBack ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tfetchAPI( settingsWidget, callBack );\n+\t};\n+\tconst findAllWidgetCoursesByPage = () => {\n+\t\tconst elCoursesWrappers = document.querySelectorAll( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrappers ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\telCoursesWrappers.forEach( ( el ) => {\n+\t\t\tcallApiCoursesOfWidget( el );\n+\t\t} );\n+\t};\n+\tconst onChangeSortBy = ( e, target ) => {\n+\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\n+\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\n+\t\tfilterCourses.order_by = target.value;\n+\t\tfilterCourses.paged = 1;\n+\n+\t\tif ( 'yes' !== settingsWidget.courses_rest ) {\n+\t\t\twindow.location.href = lpAddQueryArgs( currentUrl, filterCourses );\n+\t\t} else {\n+\t\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\n+\t\t}\n+\t};\n+\tconst onChangeLayout = ( e, target ) => {\n+\t\tif ( ! target.classList.contains( 'courses-layout' ) ) {\n+\t\t\tif ( ! target.closest( '.courses-layout' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\ttarget = target.closest( '.courses-layout' );\n+\t\t}\n+\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\t\te.preventDefault();\n+\t\tconst elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );\n+\t\tconst elUlLayouts = target.closest( '.courses-layouts-display-list' );\n+\t\tconst widgetId = elCoursesWrapper.dataset.widgetId;\n+\t\tconst elLayouts = elUlLayouts.querySelectorAll( 'li' );\n+\t\telLayouts.forEach( ( el ) => {\n+\t\t\tel.classList.remove( 'active' );\n+\t\t} );\n+\t\tconst layout = target.dataset.layout;\n+\t\ttarget.classList.add( 'active' );\n+\t\telListCourse.classList.remove( 'grid', 'list' );\n+\t\telListCourse.classList.add( layout );\n+\t\tCookie.set( `layout_widget_${ widgetId }`, layout, 7 );\n+\t};\n+\tconst events = () => {\n+\t\tdocument.addEventListener( 'change', function( e ) {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tonChangeSortBy( e, target );\n+\t\t} );\n+\t\tdocument.addEventListener( 'click', function( e ) {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tclickLoadMore( e, target );\n+\t\t\tclickNumberPage( e, target );\n+\t\t\tonChangeLayout( e, target );\n+\t\t} );\n+\t\tdocument.addEventListener( 'scroll', function( e ) {\n+\t\t\tconst target = e.target;\n+\n+\t\t\tscrollInfinite( e, target );\n+\t\t} );\n+\t\tdocument.addEventListener( 'keyup', function( e ) {\n+\t\t\tconst target = e.target;\n+\n+\t\t\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\n+\t\t} );\n+\t\tdocument.addEventListener( 'submit', function( e ) {\n+\t\t\tconst target = e.target;\n+\n+\t\t\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\n+\t\t} );\n+\t};\n+\tconst clickNumberPage = ( e, target ) => {\n+\t\tif ( ! target.classList.contains( 'page-numbers' ) ) {\n+\t\t\tif ( ! target.closest( '.page-numbers' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\ttarget = target.closest( '.page-numbers' );\n+\t\t}\n+\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\n+\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\n+\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\t\tconst pageCurrent = filterCourses.paged;\n+\t\tif ( target.classList.contains( 'prev' ) ) {\n+\t\t\tfilterCourses.paged = pageCurrent - 1;\n+\t\t} else if ( target.classList.contains( 'next' ) ) {\n+\t\t\tfilterCourses.paged = pageCurrent + 1;\n+\t\t} else {\n+\t\t\tfilterCourses.paged = parseInt( target.textContent );\n+\t\t}\n+\n+\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\n+\t};\n+\tconst clickLoadMore = ( e, target ) => {\n+\t\tif ( ! target.classList.contains( 'courses-btn-load-more' ) ) {\n+\t\t\tif ( ! target.closest( '.courses-btn-load-more' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\ttarget = target.closest( '.courses-btn-load-more' );\n+\t\t}\n+\t\tconst elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\n+\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\n+\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\t\t++filterCourses.paged;\n+\n+\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\n+\t};\n+\tconst scrollInfinite = ( e, target ) => {\n+\t\tconst elCoursesWrapper = document.querySelector( `.${ classCoursesWrapper }` );\n+\t\tif ( ! elCoursesWrapper ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );\n+\t\tif ( ! elInfinite ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tconst idWidget = elCoursesWrapper.dataset.widgetId;\n+\t\tconst settingsWidget = window[ `lpWidget_${ idWidget }` ];\n+\t\tif ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Create an IntersectionObserver object.\n+\t\tconst observer = new IntersectionObserver( function( entries ) {\n+\t\t\tfor ( const entry of entries ) {\n+\t\t\t\t\u002F\u002F If the entry is intersecting, load the image.\n+\t\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\t\tif ( isLoadingInfinite ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t++filterCourses.paged;\n+\t\t\t\t\tcallApiCoursesOfWidget( elCoursesWrapper, filterCourses );\n+\t\t\t\t\tobserver.unobserve( entry.target );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\n+\t\tobserver.observe( elInfinite );\n+\t};\n+\treturn {\n+\t\tinit: () => {\n+\t\t\tconst urlParams = {};\n+\t\t\tconst urlQueryString = window.location.search;\n+\t\t\tconst urlSearchParams = new URLSearchParams( urlQueryString );\n+\t\t\tfor ( const [ key, val ] of urlSearchParams.entries() ) {\n+\t\t\t\turlParams[ key ] = val;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002FfilterCourses = { ...lpArchiveSkeletonParam, ...urlParams };\n+\t\t\tfilterCourses = { ...urlParams };\n+\t\t\tfilterCourses.paged = parseInt( filterCourses.paged || 1 );\n+\t\t\tfindAllWidgetCoursesByPage();\n+\t\t\tevents();\n+\t\t},\n+\t};\n+} )();\n+\n+document.addEventListener( 'DOMContentLoaded', function() {\n+\twindow.lpElWidgetCoursesByPage.init();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fbecome-teacher.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fbecome-teacher.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fbecome-teacher.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fbecome-teacher.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-\u002F**\r\n- * Become a Teacher form handler js\r\n- *\r\n- * @author ThimPress\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-import { lpAjaxParseJsonOld } from '..\u002Futils.js';\r\n-jQuery( function( $ ) {\r\n-\t$( 'form[name=\"become-teacher-form\"]' ).each( function() {\r\n-\t\tconst $form = $( this ),\r\n-\t\t\t$submit = $form.find( 'button[type=\"submit\"]' ),\r\n-\t\t\thideMessages = function() {\r\n-\t\t\t\t$( '.learn-press-error, .learn-press-message' ).fadeOut( 'fast', function() {\r\n-\t\t\t\t\t$( this ).remove();\r\n-\t\t\t\t} );\r\n-\t\t\t},\r\n-\t\t\tshowMessages = function( messages ) {\r\n-\t\t\t\tlet m = [];\r\n-\t\t\t\tif ( $.isPlainObject( messages ) ) {\r\n-\t\t\t\t\tfor ( const i in messages ) {\r\n-\t\t\t\t\t\tm.push( $( messages[ i ] ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else if ( $.isArray( messages ) ) {\r\n-\t\t\t\t\tm = messages.reverse();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tm = [ messages ];\r\n-\t\t\t\t}\r\n-\t\t\t\tfor ( let i = 0; i \u003C m.length; i++ ) {\r\n-\t\t\t\t\t$( m[ i ] ).insertBefore( $form );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tblockForm = function( block ) {\r\n-\t\t\t\treturn $form.find( 'input, select, button, textarea' )\r\n-\t\t\t\t\t.prop( 'disabled', !! block );\r\n-\t\t\t},\r\n-\t\t\tbeforeSend = function() {\r\n-\t\t\t\thideMessages();\r\n-\r\n-\t\t\t\tblockForm( true )\r\n-\t\t\t\t\t.filter( $submit )\r\n-\t\t\t\t\t.data( 'origin-text', $submit.text() )\r\n-\t\t\t\t\t.html( $submit.data( 'text' ) );\r\n-\t\t\t},\r\n-\t\t\tajaxSuccess = function( response ) {\r\n-\t\t\t\tresponse = lpAjaxParseJsonOld( response );\r\n-\t\t\t\tif ( response.message ) {\r\n-\t\t\t\t\tshowMessages( response.message );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tblockForm().filter( $submit ).html( $submit.data( 'origin-text' ) );\r\n-\r\n-\t\t\t\tif ( response.result === 'success' ) {\r\n-\t\t\t\t\t$form.remove();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$submit.prop( 'disabled', false );\r\n-\t\t\t\t\t$submit.html( $submit.data( 'text' ) );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tajaxError = function( response ) {\r\n-\t\t\t\tresponse = LP.parseJSON( response );\r\n-\r\n-\t\t\t\tif ( response.message ) {\r\n-\t\t\t\t\tshowMessages( response.message );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tblockForm().filter( $submit ).html( $submit.data( 'origin-text' ) );\r\n-\t\t\t};\r\n-\r\n-\t\t$form.on( 'submit', function( e ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tif ( $form.triggerHandler( 'become_teacher_send' ) !== false ) {\r\n-\t\t\t\tconst url = new URL( window.location.href );\r\n-\t\t\t\turl.searchParams.set( 'lp-ajax', 'request-become-a-teacher' );\r\n-\r\n-\t\t\t\t$.ajax( {\r\n-\t\t\t\t\turl,\r\n-\t\t\t\t\tdata: $form.serialize(),\r\n-\t\t\t\t\tdataType: 'text',\r\n-\t\t\t\t\ttype: 'POST',\r\n-\t\t\t\t\tbeforeSend,\r\n-\t\t\t\t\tsuccess: ajaxSuccess,\r\n-\t\t\t\t\terror: ajaxError,\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t\treturn false;\r\n-\t\t} );\r\n-\t} );\r\n-} );\r\n-\r\n+\u002F**\n+ * Become a Teacher form handler js\n+ *\n+ * @author ThimPress\n+ * @version 3.0.0\n+ *\u002F\n+\n+import { lpAjaxParseJsonOld } from '..\u002Futils.js';\n+jQuery( function( $ ) {\n+\t$( 'form[name=\"become-teacher-form\"]' ).each( function() {\n+\t\tconst $form = $( this ),\n+\t\t\t$submit = $form.find( 'button[type=\"submit\"]' ),\n+\t\t\thideMessages = function() {\n+\t\t\t\t$( '.learn-press-error, .learn-press-message' ).fadeOut( 'fast', function() {\n+\t\t\t\t\t$( this ).remove();\n+\t\t\t\t} );\n+\t\t\t},\n+\t\t\tshowMessages = function( messages ) {\n+\t\t\t\tlet m = [];\n+\t\t\t\tif ( $.isPlainObject( messages ) ) {\n+\t\t\t\t\tfor ( const i in messages ) {\n+\t\t\t\t\t\tm.push( $( messages[ i ] ) );\n+\t\t\t\t\t}\n+\t\t\t\t} else if ( $.isArray( messages ) ) {\n+\t\t\t\t\tm = messages.reverse();\n+\t\t\t\t} else {\n+\t\t\t\t\tm = [ messages ];\n+\t\t\t\t}\n+\t\t\t\tfor ( let i = 0; i \u003C m.length; i++ ) {\n+\t\t\t\t\t$( m[ i ] ).insertBefore( $form );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tblockForm = function( block ) {\n+\t\t\t\treturn $form.find( 'input, select, button, textarea' )\n+\t\t\t\t\t.prop( 'disabled', !! block );\n+\t\t\t},\n+\t\t\tbeforeSend = function() {\n+\t\t\t\thideMessages();\n+\n+\t\t\t\tblockForm( true )\n+\t\t\t\t\t.filter( $submit )\n+\t\t\t\t\t.data( 'origin-text', $submit.text() )\n+\t\t\t\t\t.html( $submit.data( 'text' ) );\n+\t\t\t},\n+\t\t\tajaxSuccess = function( response ) {\n+\t\t\t\tresponse = lpAjaxParseJsonOld( response );\n+\t\t\t\tif ( response.message ) {\n+\t\t\t\t\tshowMessages( response.message );\n+\t\t\t\t}\n+\n+\t\t\t\tblockForm().filter( $submit ).html( $submit.data( 'origin-text' ) );\n+\n+\t\t\t\tif ( response.result === 'success' ) {\n+\t\t\t\t\t$form.remove();\n+\t\t\t\t} else {\n+\t\t\t\t\t$submit.prop( 'disabled', false );\n+\t\t\t\t\t$submit.html( $submit.data( 'text' ) );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tajaxError = function( response ) {\n+\t\t\t\tresponse = LP.parseJSON( response );\n+\n+\t\t\t\tif ( response.message ) {\n+\t\t\t\t\tshowMessages( response.message );\n+\t\t\t\t}\n+\n+\t\t\t\tblockForm().filter( $submit ).html( $submit.data( 'origin-text' ) );\n+\t\t\t};\n+\n+\t\t$form.on( 'submit', function( e ) {\n+\t\t\te.preventDefault();\n+\t\t\tif ( $form.triggerHandler( 'become_teacher_send' ) !== false ) {\n+\t\t\t\tconst url = new URL( window.location.href );\n+\t\t\t\turl.searchParams.set( 'lp-ajax', 'request-become-a-teacher' );\n+\n+\t\t\t\t$.ajax( {\n+\t\t\t\t\turl,\n+\t\t\t\t\tdata: $form.serialize(),\n+\t\t\t\t\tdataType: 'text',\n+\t\t\t\t\ttype: 'POST',\n+\t\t\t\t\tbeforeSend,\n+\t\t\t\t\tsuccess: ajaxSuccess,\n+\t\t\t\t\terror: ajaxError,\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t\treturn false;\n+\t\t} );\n+\t} );\n+} );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcheckout.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcheckout.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcheckout.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcheckout.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,199 +1,199 @@\n-\u002F**\r\n- * File JS handling checkout page.\r\n- *\u002F\r\n-\r\n-import { lpAddQueryArgs, lpFetchAPI, lpAjaxParseJsonOld } from '..\u002Futils.js';\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'submit', ( e ) => {\r\n-\twindow.lpCheckout.submit( e );\r\n-} );\r\n-document.addEventListener( 'change', ( e ) => {\r\n-\twindow.lpCheckout.paymentSelect( e );\r\n-} );\r\n-document.addEventListener( 'keyup', ( e ) => {\r\n-\twindow.lpCheckout.checkEmailGuest( e );\r\n-} );\r\n-\r\n-window.lpCheckout = {\r\n-\tidFormCheckout: 'learn-press-checkout-form',\r\n-\tidBtnPlaceOrder: 'learn-press-checkout-place-order',\r\n-\tclassPaymentMethod: 'lp-payment-method',\r\n-\tclassPaymentMethodForm: 'payment-method-form',\r\n-\ttimeOutCheckEmail: null,\r\n-\tfetchAPI: ( url, params, callBack ) => {\r\n-\t\tconst option = { headers: {} };\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\toption.headers[ 'X-WP-Nonce' ] = lpData.nonce;\r\n-\t\t}\r\n-\r\n-\t\tconst searchParams = new URLSearchParams();\r\n-\t\tObject.keys( params ).forEach( ( key ) => {\r\n-\t\t\tsearchParams.append( key, params[ key ] );\r\n-\t\t} );\r\n-\r\n-\t\toption.method = 'POST';\r\n-\t\toption.body = searchParams;\r\n-\r\n-\t\tfetch( url, option )\r\n-\t\t\t.then( ( res ) => res.text() )\r\n-\t\t\t.then( ( data ) => {\r\n-\t\t\t\tdata = lpAjaxParseJsonOld( data );\r\n-\t\t\t\tcallBack.success( data );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {\r\n-\t\t\t\tcallBack.completed();\r\n-\t\t\t} )\r\n-\t\t\t.catch( ( err ) => callBack.error( err ) );\r\n-\t},\r\n-\tsubmit: ( e ) => {\r\n-\t\tconst formCheckout = e.target;\r\n-\t\tif ( formCheckout.id !== window.lpCheckout.idFormCheckout ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( formCheckout.classList.contains( 'processing' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tformCheckout.classList.add( 'processing' );\r\n-\t\tconst btnSubmit = formCheckout.querySelector( 'button[type=\"submit\"]' );\r\n-\t\tbtnSubmit.disabled = true;\r\n-\r\n-\t\twindow.lpCheckout.removeMessage();\r\n-\t\tconst elBtnPlaceOrder = document.getElementById( window.lpCheckout.idBtnPlaceOrder );\r\n-\r\n-\t\tconst urlHandle = new URL( lpCheckoutSettings.ajaxurl );\r\n-\t\turlHandle.searchParams.set( 'lp-ajax', 'checkout' );\r\n-\r\n-\t\t\u002F\u002F get values from FormData\r\n-\t\tconst formData = new FormData( formCheckout );\r\n-\t\tconst dataSend = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\r\n-\t\t\tconst val = formData.getAll( key );\r\n-\r\n-\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\r\n-\t\t} ) );\r\n-\r\n-\t\telBtnPlaceOrder.classList.add( 'loading' );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tresponse = lpAjaxParseJsonOld( response );\r\n-\t\t\t\tconst { message, result } = response;\r\n-\r\n-\t\t\t\tif ( response.redirect ) {\r\n-\t\t\t\t\twindow.location.href = response.redirect;\r\n-\t\t\t\t} else if ( 'success' !== result ) {\r\n-\t\t\t\t\twindow.lpCheckout.showErrors( formCheckout, 'error', message );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\twindow.lpCheckout.showErrors( formCheckout, 'error', error );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\telBtnPlaceOrder.classList.remove( 'loading' );\r\n-\t\t\t\tformCheckout.classList.remove( 'processing' );\r\n-\t\t\t\tbtnSubmit.disabled = false;\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\twindow.lpCheckout.fetchAPI( urlHandle, dataSend, callBack );\r\n-\t},\r\n-\tpaymentSelect: ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tconst elPaymentMethod = target.closest( `.${ window.lpCheckout.classPaymentMethod }` );\r\n-\t\tif ( ! elPaymentMethod ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elUlPaymentMethods = elPaymentMethod.closest( '.payment-methods' );\r\n-\t\tif ( ! elUlPaymentMethods ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elPaymentMethods = elUlPaymentMethods.querySelectorAll( `.${ window.lpCheckout.classPaymentMethod }` );\r\n-\t\telPaymentMethods.forEach( ( el ) => {\r\n-\t\t\tconst elPaymentMethodForm = el.querySelector( `.${ window.lpCheckout.classPaymentMethodForm }` );\r\n-\t\t\tif ( ! elPaymentMethodForm ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( elPaymentMethod !== el ) {\r\n-\t\t\t\telPaymentMethodForm.style.display = 'none';\r\n-\t\t\t} else {\r\n-\t\t\t\telPaymentMethodForm.style.display = 'block';\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tcheckEmailGuest: ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target.id !== 'guest_email' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! window.lpCheckout.isEmail( target.value ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttarget.classList.add( 'loading' );\r\n-\r\n-\t\tif ( window.lpCheckout.timeOutCheckEmail !== null ) {\r\n-\t\t\tclearTimeout( window.lpCheckout.timeOutCheckEmail );\r\n-\t\t}\r\n-\r\n-\t\twindow.lpCheckout.timeOutCheckEmail = setTimeout( () => {\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { message, data, status } = response;\r\n-\t\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\t\tconst content = data.content || '';\r\n-\t\t\t\t\t\tconst elGuestOutput = document.querySelector( '.lp-guest-checkout-output' );\r\n-\t\t\t\t\t\tif ( elGuestOutput ) {\r\n-\t\t\t\t\t\t\telGuestOutput.remove();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\ttarget.insertAdjacentHTML( 'afterend', content );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\twindow.lpCheckout.showErrors( target.closest( 'form' ), status, message );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\twindow.lpCheckout.showErrors( target.closest( 'form' ), 'error', error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\ttarget.classList.remove( 'loading' );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpCheckout.fetchAPI(\r\n-\t\t\t\twindow.location.href,\r\n-\t\t\t\t{\r\n-\t\t\t\t\t'lp-ajax': 'checkout-user-email-exists',\r\n-\t\t\t\t\temail: target.value,\r\n-\t\t\t\t},\r\n-\t\t\t\tcallBack,\r\n-\t\t\t);\r\n-\t\t}, 500 );\r\n-\t},\r\n-\tremoveMessage: () => {\r\n-\t\tconst lpMessages = document.querySelectorAll( '.learn-press-message' );\r\n-\r\n-\t\tif ( ! lpMessages ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpMessages.forEach( ( el ) => {\r\n-\t\t\tel.remove();\r\n-\t\t} );\r\n-\t},\r\n-\tshowErrors: ( form, status, message ) => {\r\n-\t\tconst mesHtml = `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\r\n-\t\tform.insertAdjacentHTML( 'afterbegin', mesHtml );\r\n-\t\tform.scrollIntoView();\r\n-\t},\r\n-\tisEmail: ( email ) => {\r\n-\t\treturn new RegExp( '^[-!#$%&\\'*+\\\\.\u002F0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\\'*+\\\\\u002F0-9=?A-Z^_`a-z{|}~]+\\.[-!#$%&\\'*+\\\\.\u002F0-9=?A-Z^_`a-z{|}~]+$' ).test( email );\r\n-\t},\r\n-};\r\n+\u002F**\n+ * File JS handling checkout page.\n+ *\u002F\n+\n+import { lpAddQueryArgs, lpFetchAPI, lpAjaxParseJsonOld } from '..\u002Futils.js';\n+\n+\u002F\u002F Events\n+document.addEventListener( 'submit', ( e ) => {\n+\twindow.lpCheckout.submit( e );\n+} );\n+document.addEventListener( 'change', ( e ) => {\n+\twindow.lpCheckout.paymentSelect( e );\n+} );\n+document.addEventListener( 'keyup', ( e ) => {\n+\twindow.lpCheckout.checkEmailGuest( e );\n+} );\n+\n+window.lpCheckout = {\n+\tidFormCheckout: 'learn-press-checkout-form',\n+\tidBtnPlaceOrder: 'learn-press-checkout-place-order',\n+\tclassPaymentMethod: 'lp-payment-method',\n+\tclassPaymentMethodForm: 'payment-method-form',\n+\ttimeOutCheckEmail: null,\n+\tfetchAPI: ( url, params, callBack ) => {\n+\t\tconst option = { headers: {} };\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\toption.headers[ 'X-WP-Nonce' ] = lpData.nonce;\n+\t\t}\n+\n+\t\tconst searchParams = new URLSearchParams();\n+\t\tObject.keys( params ).forEach( ( key ) => {\n+\t\t\tsearchParams.append( key, params[ key ] );\n+\t\t} );\n+\n+\t\toption.method = 'POST';\n+\t\toption.body = searchParams;\n+\n+\t\tfetch( url, option )\n+\t\t\t.then( ( res ) => res.text() )\n+\t\t\t.then( ( data ) => {\n+\t\t\t\tdata = lpAjaxParseJsonOld( data );\n+\t\t\t\tcallBack.success( data );\n+\t\t\t} )\n+\t\t\t.finally( () => {\n+\t\t\t\tcallBack.completed();\n+\t\t\t} )\n+\t\t\t.catch( ( err ) => callBack.error( err ) );\n+\t},\n+\tsubmit: ( e ) => {\n+\t\tconst formCheckout = e.target;\n+\t\tif ( formCheckout.id !== window.lpCheckout.idFormCheckout ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( formCheckout.classList.contains( 'processing' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\n+\t\tformCheckout.classList.add( 'processing' );\n+\t\tconst btnSubmit = formCheckout.querySelector( 'button[type=\"submit\"]' );\n+\t\tbtnSubmit.disabled = true;\n+\n+\t\twindow.lpCheckout.removeMessage();\n+\t\tconst elBtnPlaceOrder = document.getElementById( window.lpCheckout.idBtnPlaceOrder );\n+\n+\t\tconst urlHandle = new URL( lpCheckoutSettings.ajaxurl );\n+\t\turlHandle.searchParams.set( 'lp-ajax', 'checkout' );\n+\n+\t\t\u002F\u002F get values from FormData\n+\t\tconst formData = new FormData( formCheckout );\n+\t\tconst dataSend = Object.fromEntries( Array.from( formData.keys(), ( key ) => {\n+\t\t\tconst val = formData.getAll( key );\n+\n+\t\t\treturn [ key, val.length > 1 ? val : val.pop() ];\n+\t\t} ) );\n+\n+\t\telBtnPlaceOrder.classList.add( 'loading' );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tresponse = lpAjaxParseJsonOld( response );\n+\t\t\t\tconst { message, result } = response;\n+\n+\t\t\t\tif ( response.redirect ) {\n+\t\t\t\t\twindow.location.href = response.redirect;\n+\t\t\t\t} else if ( 'success' !== result ) {\n+\t\t\t\t\twindow.lpCheckout.showErrors( formCheckout, 'error', message );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\twindow.lpCheckout.showErrors( formCheckout, 'error', error );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\telBtnPlaceOrder.classList.remove( 'loading' );\n+\t\t\t\tformCheckout.classList.remove( 'processing' );\n+\t\t\t\tbtnSubmit.disabled = false;\n+\t\t\t},\n+\t\t};\n+\n+\t\twindow.lpCheckout.fetchAPI( urlHandle, dataSend, callBack );\n+\t},\n+\tpaymentSelect: ( e ) => {\n+\t\tconst target = e.target;\n+\t\tconst elPaymentMethod = target.closest( `.${ window.lpCheckout.classPaymentMethod }` );\n+\t\tif ( ! elPaymentMethod ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elUlPaymentMethods = elPaymentMethod.closest( '.payment-methods' );\n+\t\tif ( ! elUlPaymentMethods ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elPaymentMethods = elUlPaymentMethods.querySelectorAll( `.${ window.lpCheckout.classPaymentMethod }` );\n+\t\telPaymentMethods.forEach( ( el ) => {\n+\t\t\tconst elPaymentMethodForm = el.querySelector( `.${ window.lpCheckout.classPaymentMethodForm }` );\n+\t\t\tif ( ! elPaymentMethodForm ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( elPaymentMethod !== el ) {\n+\t\t\t\telPaymentMethodForm.style.display = 'none';\n+\t\t\t} else {\n+\t\t\t\telPaymentMethodForm.style.display = 'block';\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tcheckEmailGuest: ( e ) => {\n+\t\tconst target = e.target;\n+\t\tif ( target.id !== 'guest_email' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! window.lpCheckout.isEmail( target.value ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttarget.classList.add( 'loading' );\n+\n+\t\tif ( window.lpCheckout.timeOutCheckEmail !== null ) {\n+\t\t\tclearTimeout( window.lpCheckout.timeOutCheckEmail );\n+\t\t}\n+\n+\t\twindow.lpCheckout.timeOutCheckEmail = setTimeout( () => {\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { message, data, status } = response;\n+\t\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\t\tconst content = data.content || '';\n+\t\t\t\t\t\tconst elGuestOutput = document.querySelector( '.lp-guest-checkout-output' );\n+\t\t\t\t\t\tif ( elGuestOutput ) {\n+\t\t\t\t\t\t\telGuestOutput.remove();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\ttarget.insertAdjacentHTML( 'afterend', content );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\twindow.lpCheckout.showErrors( target.closest( 'form' ), status, message );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\twindow.lpCheckout.showErrors( target.closest( 'form' ), 'error', error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\ttarget.classList.remove( 'loading' );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpCheckout.fetchAPI(\n+\t\t\t\twindow.location.href,\n+\t\t\t\t{\n+\t\t\t\t\t'lp-ajax': 'checkout-user-email-exists',\n+\t\t\t\t\temail: target.value,\n+\t\t\t\t},\n+\t\t\t\tcallBack,\n+\t\t\t);\n+\t\t}, 500 );\n+\t},\n+\tremoveMessage: () => {\n+\t\tconst lpMessages = document.querySelectorAll( '.learn-press-message' );\n+\n+\t\tif ( ! lpMessages ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpMessages.forEach( ( el ) => {\n+\t\t\tel.remove();\n+\t\t} );\n+\t},\n+\tshowErrors: ( form, status, message ) => {\n+\t\tconst mesHtml = `\u003Cdiv class=\"learn-press-message ${ status }\">${ message }\u003C\u002Fdiv>`;\n+\t\tform.insertAdjacentHTML( 'afterbegin', mesHtml );\n+\t\tform.scrollIntoView();\n+\t},\n+\tisEmail: ( email ) => {\n+\t\treturn new RegExp( '^[-!#$%&\\'*+\\\\.\u002F0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\\'*+\\\\\u002F0-9=?A-Z^_`a-z{|}~]+\\.[-!#$%&\\'*+\\\\.\u002F0-9=?A-Z^_`a-z{|}~]+$' ).test( email );\n+\t},\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcopy-to-clipboard.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,94 +1,94 @@\n-function LPClick( element, iconBtn, inner ) {\r\n-\tconst wrappers = document.querySelectorAll( element );\r\n-\r\n-\tif ( ! wrappers.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twrappers.forEach( ( wrapper ) => {\r\n-\t\tconst clickBtn = wrapper.querySelector( iconBtn );\r\n-\t\tconst class_open = element.replace( '.', '' ) + '__open';\r\n-\t\tconst closeElement = wrapper.querySelector( element + '__close' );\r\n-\r\n-\t\tconst isOpenElement = () => wrapper.classList.contains( class_open );\r\n-\r\n-\t\tconst showElement = () => {\r\n-\t\t\tif ( ! isOpenElement() ) {\r\n-\t\t\t\twrapper.classList.add( class_open );\r\n-\t\t\t}\r\n-\t\t};\r\n-\r\n-\t\tconst hideElement = () => {\r\n-\t\t\tif ( isOpenElement() ) {\r\n-\t\t\t\twrapper.classList.remove( class_open );\r\n-\t\t\t}\r\n-\t\t};\r\n-\r\n-\t\tconst toggleElement = () => {\r\n-\t\t\tif ( isOpenElement() ) {\r\n-\t\t\t\thideElement();\r\n-\t\t\t} else {\r\n-\t\t\t\tshowElement();\r\n-\t\t\t}\r\n-\t\t};\r\n-\r\n-\t\tconst onKeyDown = ( e ) => {\r\n-\t\t\tif ( e.keyCode === 27 ) {\r\n-\t\t\t\thideElement();\r\n-\t\t\t}\r\n-\t\t};\r\n-\r\n-\t\tif ( clickBtn ) {\r\n-\t\t\tclickBtn.onclick = function ( e ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\ttoggleElement();\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\t\tif ( ! isOpenElement() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst target = e.target;\r\n-\r\n-\t\t\tif ( target.closest( inner ) || target.closest( iconBtn ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\thideElement();\r\n-\t\t} );\r\n-\r\n-\t\tif ( closeElement ) {\r\n-\t\t\tcloseElement.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\thideElement();\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tdocument.addEventListener( 'keydown', onKeyDown, false );\r\n-\t} );\r\n-}\r\n-\r\n-export default function CopyToClipboard() {\r\n-\tLPClick(\r\n-\t\t'.social-share-toggle',\r\n-\t\t'.share-toggle-icon',\r\n-\t\t'.content-widget-social-share'\r\n-\t);\r\n-\r\n-\tvar copyTextareaBtn = document.querySelector( '.btn-clipboard' );\r\n-\tif ( copyTextareaBtn ) {\r\n-\t\tcopyTextareaBtn.addEventListener( 'click', function ( event ) {\r\n-\t\t\tvar copyTextarea = document.querySelector( '.clipboard-value' );\r\n-\t\t\tcopyTextarea.focus();\r\n-\t\t\tcopyTextarea.select();\r\n-\t\t\ttry {\r\n-\t\t\t\tvar successful = document.execCommand( 'copy' );\r\n-\t\t\t\tvar msg = copyTextareaBtn.getAttribute( 'data-copied' );\r\n-\t\t\t\tcopyTextareaBtn.innerHTML =\r\n-\t\t\t\t\tmsg + '\u003Cspan class=\"tooltip\">' + msg + '\u003C\u002Fspan>';\r\n-\t\t\t} catch ( err ) {}\r\n-\t\t} );\r\n-\t}\r\n-}\r\n+function LPClick( element, iconBtn, inner ) {\n+\tconst wrappers = document.querySelectorAll( element );\n+\n+\tif ( ! wrappers.length ) {\n+\t\treturn;\n+\t}\n+\n+\twrappers.forEach( ( wrapper ) => {\n+\t\tconst clickBtn = wrapper.querySelector( iconBtn );\n+\t\tconst class_open = element.replace( '.', '' ) + '__open';\n+\t\tconst closeElement = wrapper.querySelector( element + '__close' );\n+\n+\t\tconst isOpenElement = () => wrapper.classList.contains( class_open );\n+\n+\t\tconst showElement = () => {\n+\t\t\tif ( ! isOpenElement() ) {\n+\t\t\t\twrapper.classList.add( class_open );\n+\t\t\t}\n+\t\t};\n+\n+\t\tconst hideElement = () => {\n+\t\t\tif ( isOpenElement() ) {\n+\t\t\t\twrapper.classList.remove( class_open );\n+\t\t\t}\n+\t\t};\n+\n+\t\tconst toggleElement = () => {\n+\t\t\tif ( isOpenElement() ) {\n+\t\t\t\thideElement();\n+\t\t\t} else {\n+\t\t\t\tshowElement();\n+\t\t\t}\n+\t\t};\n+\n+\t\tconst onKeyDown = ( e ) => {\n+\t\t\tif ( e.keyCode === 27 ) {\n+\t\t\t\thideElement();\n+\t\t\t}\n+\t\t};\n+\n+\t\tif ( clickBtn ) {\n+\t\t\tclickBtn.onclick = function ( e ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\ttoggleElement();\n+\t\t\t};\n+\t\t}\n+\n+\t\tdocument.addEventListener( 'click', ( e ) => {\n+\t\t\tif ( ! isOpenElement() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst target = e.target;\n+\n+\t\t\tif ( target.closest( inner ) || target.closest( iconBtn ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\thideElement();\n+\t\t} );\n+\n+\t\tif ( closeElement ) {\n+\t\t\tcloseElement.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\t\t\t\thideElement();\n+\t\t\t} );\n+\t\t}\n+\n+\t\tdocument.addEventListener( 'keydown', onKeyDown, false );\n+\t} );\n+}\n+\n+export default function CopyToClipboard() {\n+\tLPClick(\n+\t\t'.social-share-toggle',\n+\t\t'.share-toggle-icon',\n+\t\t'.content-widget-social-share'\n+\t);\n+\n+\tvar copyTextareaBtn = document.querySelector( '.btn-clipboard' );\n+\tif ( copyTextareaBtn ) {\n+\t\tcopyTextareaBtn.addEventListener( 'click', function ( event ) {\n+\t\t\tvar copyTextarea = document.querySelector( '.clipboard-value' );\n+\t\t\tcopyTextarea.focus();\n+\t\t\tcopyTextarea.select();\n+\t\t\ttry {\n+\t\t\t\tvar successful = document.execCommand( 'copy' );\n+\t\t\t\tvar msg = copyTextareaBtn.getAttribute( 'data-copied' );\n+\t\t\t\tcopyTextareaBtn.innerHTML =\n+\t\t\t\t\tmsg + '\u003Cspan class=\"tooltip\">' + msg + '\u003C\u002Fspan>';\n+\t\t\t} catch ( err ) {}\n+\t\t} );\n+\t}\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend: course-builder\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend: course-builder.js\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-filter.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-filter.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-filter.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-filter.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,468 +1,468 @@\n-import API from '..\u002Fapi';\r\n-import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam, lpShowHideEl } from '..\u002Futils.js';\r\n-\r\n-const classCourseFilter = 'lp-form-course-filter';\r\n-const classProcessing = 'processing';\r\n-const classShowCourseFilterMobile = 'show-lp-course-filter-mobile';\r\n-const withHandleForMobile = 991;\r\n-\r\n-\u002F\u002F Events\r\n-\u002F\u002F Submit form filter\r\n-document.addEventListener( 'submit', function( e ) {\r\n-\tconst target = e.target;\r\n-\tif ( ! target.classList.contains( classCourseFilter ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\te.preventDefault();\r\n-\r\n-\twindow.lpCourseFilter.submit( target );\r\n-} );\r\n-\r\n-\u002F\u002F Click element\r\n-document.addEventListener( 'click', function( e ) {\r\n-\tconst target = e.target;\r\n-\tif ( target.classList.contains( 'course-filter-reset' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\twindow.lpCourseFilter.reset( target );\r\n-\t}\r\n-\r\n-\tif ( target.closest( '.lp-form-course-filter__close' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\tconst body = document.querySelector( 'body' );\r\n-\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Show\u002Fhide search suggest result\r\n-\twindow.lpCourseFilter.showHideSearchResult( target );\r\n-\r\n-\t\u002F\u002F Click field\r\n-\twindow.lpCourseFilter.triggerInputChoice( target );\r\n-\r\n-\t\u002F\u002F Click btn filter mobile\r\n-\twindow.lpCourseFilter.clickBtnFilterMobile( target );\r\n-\r\n-\t\u002F\u002F Out click courses filter.\r\n-\tif ( ! target.closest( `.${ classCourseFilter }` ) &&\r\n-\t\t! target.closest( '.course-filter-btn-mobile' ) ) {\r\n-\t\tconst body = document.querySelector( 'body' );\r\n-\t\tif ( window.outerWidth \u003C= withHandleForMobile &&\r\n-\t\t\tbody.classList.contains( `${ classShowCourseFilterMobile }` ) ) {\r\n-\t\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\r\n-\t\t}\r\n-\t}\r\n-} );\r\n-\r\n-\u002F\u002F Search course suggest\r\n-document.addEventListener( 'keyup', function( e ) {\r\n-\te.preventDefault();\r\n-\tconst target = e.target;\r\n-\r\n-\tif ( target.classList.contains( 'lp-course-filter-search' ) ) {\r\n-\t\twindow.lpCourseFilter.searchSuggestion( target );\r\n-\t}\r\n-} );\r\n-\r\n-let timeOutSearch;\r\n-let controller;\r\n-let signal;\r\n-window.lpCourseFilter = {\r\n-\tsearchSuggestion: ( inputSearch ) => {\r\n-\t\tconst enable = parseInt( inputSearch.dataset.searchSuggest || 1 );\r\n-\t\tif ( 1 !== enable ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst keyword = inputSearch.value.trim();\r\n-\t\tconst form = inputSearch.closest( `.${ classCourseFilter }` );\r\n-\t\tconst elLoading = form.querySelector( '.lp-loading-circle' );\r\n-\r\n-\t\tif ( undefined !== timeOutSearch ) {\r\n-\t\t\tclearTimeout( timeOutSearch );\r\n-\t\t}\r\n-\r\n-\t\tif ( keyword && keyword.length > 2 ) {\r\n-\t\t\telLoading.classList.remove( 'hide' );\r\n-\t\t\ttimeOutSearch = setTimeout( function() {\r\n-\t\t\t\tconst callBackDone = ( response ) => {\r\n-\t\t\t\t\tconst elResult = document.querySelector( '.lp-course-filter-search-result' );\r\n-\t\t\t\t\telResult.innerHTML = response.data.content;\r\n-\t\t\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t\t\t};\r\n-\t\t\t\twindow.lpCourseFilter.callAPICourseSuggest( keyword, callBackDone );\r\n-\t\t\t}, 500 );\r\n-\t\t} else {\r\n-\t\t\tconst elResult = form.querySelector( '.lp-course-filter-search-result' );\r\n-\t\t\telResult.innerHTML = '';\r\n-\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t}\r\n-\t},\r\n-\tcallAPICourseSuggest: ( keyword, callBackDone, callBackFinally ) => {\r\n-\t\tif ( undefined !== controller ) {\r\n-\t\t\tcontroller.abort();\r\n-\t\t}\r\n-\t\tcontroller = new AbortController();\r\n-\t\tsignal = controller.signal;\r\n-\r\n-\t\tlet url = API.frontend.apiCourses + '?c_search=' + keyword + '&c_suggest=1';\r\n-\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\r\n-\t\t\turl += '&lang=' + lpData.urlParams.lang;\r\n-\t\t}\r\n-\r\n-\t\tlet paramsFetch = {\r\n-\t\t\tmethod: 'GET',\r\n-\t\t};\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch = {\r\n-\t\t\t\t...paramsFetch,\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tfetch( url, { ...paramsFetch, signal } )\r\n-\t\t\t.then( ( response ) => response.json() )\r\n-\t\t\t.then( ( response ) => {\r\n-\t\t\t\tif ( undefined !== callBackDone ) {\r\n-\t\t\t\t\tcallBackDone( response );\r\n-\t\t\t\t}\r\n-\t\t\t} ).catch( ( error ) => {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t} )\r\n-\t\t\t.finally( () => {\r\n-\t\t\t\tif ( undefined !== callBackFinally ) {\r\n-\t\t\t\t\tcallBackFinally();\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t},\r\n-\tloadWidgetFilterREST: ( widgetForm ) => {\r\n-\t\tconst parent = widgetForm.closest( `.learnpress-widget-wrapper:not(.${ classProcessing })` );\r\n-\t\tif ( ! parent ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tparent.classList.add( classProcessing );\r\n-\r\n-\t\tconst elOptionWidget = widgetForm.closest( 'div[data-widget]' );\r\n-\t\tlet elListCourseTarget = null;\r\n-\t\tif ( elOptionWidget ) {\r\n-\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\r\n-\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\r\n-\r\n-\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\r\n-\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\r\n-\t\t}\r\n-\r\n-\t\tconst widgetData = parent.dataset.widget ? JSON.parse( parent.dataset.widget ) : '';\r\n-\t\tconst lang = lpData.urlParams.lang ? `?lang=${ lpData.urlParams.lang }` : '';\r\n-\t\tconst url = API.frontend.apiWidgets + lang;\r\n-\t\tconst formData = new FormData( widgetForm );\r\n-\t\tconst filterCourses = { paged: 1 };\r\n-\t\tconst elLoadingChange = parent.querySelector( '.lp-widget-loading-change' );\r\n-\r\n-\t\telLoadingChange.style.display = 'block';\r\n-\r\n-\t\tfor ( const pair of formData.entries() ) {\r\n-\t\t\tconst key = pair[ 0 ];\r\n-\t\t\tconst value = formData.getAll( key );\r\n-\t\t\tif ( ! filterCourses.hasOwnProperty( key ) ) {\r\n-\t\t\t\tfilterCourses[ key ] = value.join( ',' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( 'undefined' !== typeof lpData.urlParams.page_term_id_current ) {\r\n-\t\t\tfilterCourses.page_term_id_current = lpData.urlParams.page_term_id_current;\r\n-\t\t} else if ( 'undefined' !== typeof lpData.urlParams.page_tag_id_current ) {\r\n-\t\t\tfilterCourses.page_tag_id_current = lpData.urlParams.page_tag_id_current;\r\n-\t\t}\r\n-\r\n-\t\tconst filterParamsUrl = { params_url: filterCourses };\r\n-\t\t\u002F\u002F Send lang to API if exist for multiple lang.\r\n-\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\r\n-\t\t\tfilterParamsUrl.params_url.lang = lpData.urlParams.lang;\r\n-\t\t} else if ( lpData.urlParams.hasOwnProperty( 'pll-current-lang' ) ) {\r\n-\t\t\tfilterParamsUrl.params_url[ 'pll-current-lang' ] = lpData.urlParams[ 'pll-current-lang' ];\r\n-\t\t}\r\n-\r\n-\t\tconst paramsFetch = {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t},\r\n-\t\t\tbody: JSON.stringify( { ...widgetData, ...filterParamsUrl } ),\r\n-\t\t};\r\n-\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = lpData.nonce;\r\n-\t\t}\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tbefore: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\r\n-\t\t\t\tif ( data && status === 'success' ) {\r\n-\t\t\t\t\twidgetForm.innerHTML = data;\r\n-\r\n-\t\t\t\t\tconst elBtnDone = widgetForm.querySelector( '.course-filter-submit.lp-btn-done' );\r\n-\t\t\t\t\tif ( elBtnDone ) {\r\n-\t\t\t\t\t\tif ( window.outerWidth \u003C= 991 ) {\r\n-\t\t\t\t\t\t\tlpShowHideEl( elBtnDone, 1 );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tlpShowHideEl( elBtnDone, 0 );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else if ( message ) {\r\n-\t\t\t\t\tconsole.error( message );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tconst timeOutDone = setInterval( () => {\r\n-\t\t\t\t\tif ( elListCourseTarget && ! elListCourseTarget.classList.contains( classProcessing ) ) {\r\n-\t\t\t\t\t\tclearInterval( timeOutDone );\r\n-\t\t\t\t\t\telLoadingChange.style.display = 'none';\r\n-\t\t\t\t\t\tparent.classList.remove( classProcessing );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}, 1 );\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002F Call API load widget\r\n-\t\tlpFetchAPI( url, paramsFetch, callBack );\r\n-\t},\r\n-\tsubmit: ( form ) => {\r\n-\t\tconst formData = new FormData( form ); \u002F\u002F Create a FormData object from the form\r\n-\t\tconst elListCourse = document.querySelector( '.learn-press-courses' );\r\n-\t\tconst elOptionWidget = form.closest( 'div[data-widget]' );\r\n-\r\n-\t\tlet elListCourseTarget = null;\r\n-\t\tif ( elOptionWidget ) {\r\n-\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\r\n-\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\r\n-\r\n-\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\r\n-\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Fconst skeleton = elListCourse.querySelector( '.lp-archive-course-skeleton' );\r\n-\t\tconst filterCourses = { paged: 1 };\r\n-\r\n-\t\tif ( 'undefined' !== typeof window.lpCourseList ) {\r\n-\t\t\twindow.lpCourseList.updateEventTypeBeforeFetch( 'filter' );\r\n-\t\t}\r\n-\r\n-\t\tfor ( const pair of formData.entries() ) {\r\n-\t\t\tconst key = pair[ 0 ];\r\n-\t\t\tconst value = formData.getAll( key );\r\n-\t\t\tif ( ! filterCourses.hasOwnProperty( key ) ) {\r\n-\t\t\t\t\u002F\u002F Convert value array to string.\r\n-\t\t\t\tfilterCourses[ key ] = value.join( ',' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( 'undefined' !== typeof lpData.urlParams.page_term_id_current ) {\r\n-\t\t\tfilterCourses.page_term_id_current = lpData.urlParams.page_term_id_current;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'undefined' !== typeof lpData.urlParams.page_tag_id_current ) {\r\n-\t\t\tfilterCourses.page_tag_id_current = lpData.urlParams.page_tag_id_current;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Send lang to API if exist for multiple lang.\r\n-\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\r\n-\t\t\tfilterCourses.lang = lpData.urlParams.lang;\r\n-\t\t} else if ( lpData.urlParams.hasOwnProperty( 'pll-current-lang' ) ) {\r\n-\t\t\tfilterCourses[ 'pll-current-lang' ] = lpData.urlParams[ 'pll-current-lang' ];\r\n-\t\t}\r\n-\r\n-\t\tif ( 'undefined' !== typeof lpSettingCourses && \u002F\u002F Old version.\r\n-\t\t\tlpData.is_course_archive &&\r\n-\t\t\tlpSettingCourses.lpArchiveLoadAjax &&\r\n-\t\t\telListCourse && ! elListCourseTarget &&\r\n-\t\t\t'undefined' !== typeof window.lpCourseList ) {\r\n-\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\t\t} else if ( elListCourseTarget ) {\r\n-\t\t\tif ( elListCourseTarget.classList.contains( classProcessing ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\telListCourseTarget.classList.add( classProcessing );\r\n-\t\t\tconst elLPTarget = elListCourseTarget.querySelector( '.lp-target' );\r\n-\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\tconst dataSend = { ...dataObj };\r\n-\r\n-\t\t\t\u002F\u002F Show loading list courses\r\n-\t\t\twindow.lpAJAXG.showHideLoading( elListCourseTarget, 1 );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\u002F\u002F Get all fields in form.\r\n-\t\t\tconst fields = form.elements;\r\n-\t\t\t\u002F\u002F If field not selected on form, will remove value on dataSend.\r\n-\t\t\tfor ( let i = 0; i \u003C fields.length; i++ ) {\r\n-\t\t\t\tif ( ! filterCourses.hasOwnProperty( fields[ i ].name ) ) {\r\n-\t\t\t\t\tdelete dataSend.args[ fields[ i ].name ];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdataSend.args[ fields[ i ].name ] = filterCourses[ fields[ i ].name ];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t\u002F\u002F Set count fields selected\r\n-\t\t\tdataSend.args.count_fields_selected = window.lpCourseFilter.countFieldsSelected( form );\r\n-\r\n-\t\t\tdataSend.args.paged = 1;\r\n-\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\r\n-\t\t\t\u002F\u002F Set url params to reload page.\r\n-\t\t\t\u002F\u002F Todo: need check allow set url params.\r\n-\t\t\tlpData.urlParams = filterCourses;\r\n-\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( lpGetCurrentURLNoParam(), lpData.urlParams ) );\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t\u002F\u002F Load AJAX widget by params\r\n-\t\t\twindow.lpCourseFilter.loadWidgetFilterREST( form );\r\n-\r\n-\t\t\t\u002F\u002F Load list courses by AJAX.\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\r\n-\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\telListCourseTarget.classList.remove( classProcessing );\r\n-\t\t\t\t\twindow.lpAJAXG.showHideLoading( elListCourseTarget, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\r\n-\t\t\t\u002F\u002F Scroll to archive element\r\n-\t\t\tif ( window.outerWidth \u003C= withHandleForMobile ) {\r\n-\t\t\t\telListCourseTarget.scrollIntoView( { behavior: 'smooth' } );\r\n-\r\n-\t\t\t\t\u002F\u002F Hide widget course filter\r\n-\t\t\t\tconst body = document.querySelector( 'body' );\r\n-\t\t\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tconst courseUrl = lpData.urlParams.page_term_url || lpData.courses_url || '';\r\n-\t\t\tconst url = new URL( courseUrl );\r\n-\t\t\tObject.keys( filterCourses ).forEach( ( arg ) => {\r\n-\t\t\t\turl.searchParams.set( arg, filterCourses[ arg ] );\r\n-\t\t\t} );\r\n-\r\n-\t\t\tdocument.location.href = url.href;\r\n-\t\t}\r\n-\t},\r\n-\treset: ( btnReset ) => {\r\n-\t\tconst form = btnReset.closest( `.${ classCourseFilter }` );\r\n-\t\tif ( ! form ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst btnSubmit = form.querySelector( '.course-filter-submit' );\r\n-\t\tconst elResult = form.querySelector( '.lp-course-filter-search-result' );\r\n-\t\tconst elSearch = form.querySelector( '.lp-course-filter-search' );\r\n-\r\n-\t\tform.reset();\r\n-\t\tif ( elResult ) {\r\n-\t\t\telResult.innerHTML = '';\r\n-\t\t}\r\n-\t\tif ( elSearch ) {\r\n-\t\t\telSearch.value = '';\r\n-\t\t}\r\n-\t\t\u002F\u002F Uncheck value with case set default from params url.\r\n-\t\tfor ( let i = 0; i \u003C form.elements.length; i++ ) {\r\n-\t\t\tform.elements[ i ].removeAttribute( 'checked' );\r\n-\t\t}\r\n-\r\n-\t\tbtnSubmit.click();\r\n-\r\n-\t\t\u002F\u002F Load AJAX widget by params\r\n-\t\t\u002F\u002Fwindow.lpCourseFilter.loadWidgetFilterREST( form );\r\n-\t},\r\n-\tshowHideSearchResult: ( target ) => {\r\n-\t\tconst elResult = document.querySelector( '.lp-course-filter-search-result' );\r\n-\t\tif ( ! elResult ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst parent = target.closest( '.lp-course-filter-search-result' );\r\n-\t\tif ( ! parent && ! target.classList.contains( 'lp-course-filter-search-result' ) && ! target.classList.contains( 'lp-course-filter-search' ) ) {\r\n-\t\t\telResult.style.display = 'none';\r\n-\t\t} else {\r\n-\t\t\telResult.style.display = 'block';\r\n-\t\t}\r\n-\t},\r\n-\tcountFieldsSelected: ( form ) => {\r\n-\t\tconst elCountFieldsSelected = document.querySelector( '.course-filter-count-fields-selected' );\r\n-\r\n-\t\tif ( ! elCountFieldsSelected ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst fieldsSelected = form.querySelectorAll( 'input:checked' );\r\n-\r\n-\t\tlet countStr = '';\r\n-\t\tif ( fieldsSelected.length ) {\r\n-\t\t\tcountStr = `(${ fieldsSelected.length })`;\r\n-\t\t}\r\n-\r\n-\t\telCountFieldsSelected.innerHTML = countStr;\r\n-\r\n-\t\treturn countStr;\r\n-\t},\r\n-\ttriggerInputChoice: ( target ) => {\r\n-\t\tconst elField = target.closest( `.lp-course-filter__field` );\r\n-\t\tif ( ! elField ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elForm = elField.closest( `.${ classCourseFilter }` );\r\n-\r\n-\t\tif ( target.tagName === 'INPUT' ) {\r\n-\t\t\tconst elOptionWidget = elField.closest( 'div[data-widget]' );\r\n-\r\n-\t\t\tlet elListCourseTarget = null;\r\n-\t\t\tif ( elOptionWidget ) {\r\n-\t\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\r\n-\t\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\r\n-\r\n-\t\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\r\n-\t\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\r\n-\t\t\t\tif ( ! elListCourseTarget ) {\r\n-\t\t\t\t\t\u002F\u002Freturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Filter courses\r\n-\t\t\t\t\u002F\u002F Check on mobile will not filter when click field\r\n-\t\t\t\tif ( window.outerWidth > withHandleForMobile ) {\r\n-\t\t\t\t\tconst form = elField.closest( `.${ classCourseFilter }` );\r\n-\t\t\t\t\twindow.lpCourseFilter.submit( form );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\telField.querySelector( 'input' ).click();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set count fields selected\r\n-\t\twindow.lpCourseFilter.countFieldsSelected( elForm );\r\n-\t},\r\n-\tclickBtnFilterMobile: ( target ) => {\r\n-\t\tconst elBtnFilterMobile = target.closest( '.course-filter-btn-mobile' );\r\n-\t\tif ( ! elBtnFilterMobile ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst body = document.querySelector( 'body' );\r\n-\t\tbody.classList.toggle( `${ classShowCourseFilterMobile }` );\r\n-\t},\r\n-};\r\n+import API from '..\u002Fapi';\n+import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam, lpShowHideEl } from '..\u002Futils.js';\n+\n+const classCourseFilter = 'lp-form-course-filter';\n+const classProcessing = 'processing';\n+const classShowCourseFilterMobile = 'show-lp-course-filter-mobile';\n+const withHandleForMobile = 991;\n+\n+\u002F\u002F Events\n+\u002F\u002F Submit form filter\n+document.addEventListener( 'submit', function( e ) {\n+\tconst target = e.target;\n+\tif ( ! target.classList.contains( classCourseFilter ) ) {\n+\t\treturn;\n+\t}\n+\te.preventDefault();\n+\n+\twindow.lpCourseFilter.submit( target );\n+} );\n+\n+\u002F\u002F Click element\n+document.addEventListener( 'click', function( e ) {\n+\tconst target = e.target;\n+\tif ( target.classList.contains( 'course-filter-reset' ) ) {\n+\t\te.preventDefault();\n+\t\twindow.lpCourseFilter.reset( target );\n+\t}\n+\n+\tif ( target.closest( '.lp-form-course-filter__close' ) ) {\n+\t\te.preventDefault();\n+\t\tconst body = document.querySelector( 'body' );\n+\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\n+\t}\n+\n+\t\u002F\u002F Show\u002Fhide search suggest result\n+\twindow.lpCourseFilter.showHideSearchResult( target );\n+\n+\t\u002F\u002F Click field\n+\twindow.lpCourseFilter.triggerInputChoice( target );\n+\n+\t\u002F\u002F Click btn filter mobile\n+\twindow.lpCourseFilter.clickBtnFilterMobile( target );\n+\n+\t\u002F\u002F Out click courses filter.\n+\tif ( ! target.closest( `.${ classCourseFilter }` ) &&\n+\t\t! target.closest( '.course-filter-btn-mobile' ) ) {\n+\t\tconst body = document.querySelector( 'body' );\n+\t\tif ( window.outerWidth \u003C= withHandleForMobile &&\n+\t\t\tbody.classList.contains( `${ classShowCourseFilterMobile }` ) ) {\n+\t\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\n+\t\t}\n+\t}\n+} );\n+\n+\u002F\u002F Search course suggest\n+document.addEventListener( 'keyup', function( e ) {\n+\te.preventDefault();\n+\tconst target = e.target;\n+\n+\tif ( target.classList.contains( 'lp-course-filter-search' ) ) {\n+\t\twindow.lpCourseFilter.searchSuggestion( target );\n+\t}\n+} );\n+\n+let timeOutSearch;\n+let controller;\n+let signal;\n+window.lpCourseFilter = {\n+\tsearchSuggestion: ( inputSearch ) => {\n+\t\tconst enable = parseInt( inputSearch.dataset.searchSuggest || 1 );\n+\t\tif ( 1 !== enable ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst keyword = inputSearch.value.trim();\n+\t\tconst form = inputSearch.closest( `.${ classCourseFilter }` );\n+\t\tconst elLoading = form.querySelector( '.lp-loading-circle' );\n+\n+\t\tif ( undefined !== timeOutSearch ) {\n+\t\t\tclearTimeout( timeOutSearch );\n+\t\t}\n+\n+\t\tif ( keyword && keyword.length > 2 ) {\n+\t\t\telLoading.classList.remove( 'hide' );\n+\t\t\ttimeOutSearch = setTimeout( function() {\n+\t\t\t\tconst callBackDone = ( response ) => {\n+\t\t\t\t\tconst elResult = document.querySelector( '.lp-course-filter-search-result' );\n+\t\t\t\t\telResult.innerHTML = response.data.content;\n+\t\t\t\t\telLoading.classList.add( 'hide' );\n+\t\t\t\t};\n+\t\t\t\twindow.lpCourseFilter.callAPICourseSuggest( keyword, callBackDone );\n+\t\t\t}, 500 );\n+\t\t} else {\n+\t\t\tconst elResult = form.querySelector( '.lp-course-filter-search-result' );\n+\t\t\telResult.innerHTML = '';\n+\t\t\telLoading.classList.add( 'hide' );\n+\t\t}\n+\t},\n+\tcallAPICourseSuggest: ( keyword, callBackDone, callBackFinally ) => {\n+\t\tif ( undefined !== controller ) {\n+\t\t\tcontroller.abort();\n+\t\t}\n+\t\tcontroller = new AbortController();\n+\t\tsignal = controller.signal;\n+\n+\t\tlet url = API.frontend.apiCourses + '?c_search=' + keyword + '&c_suggest=1';\n+\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\n+\t\t\turl += '&lang=' + lpData.urlParams.lang;\n+\t\t}\n+\n+\t\tlet paramsFetch = {\n+\t\t\tmethod: 'GET',\n+\t\t};\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch = {\n+\t\t\t\t...paramsFetch,\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t}\n+\n+\t\tfetch( url, { ...paramsFetch, signal } )\n+\t\t\t.then( ( response ) => response.json() )\n+\t\t\t.then( ( response ) => {\n+\t\t\t\tif ( undefined !== callBackDone ) {\n+\t\t\t\t\tcallBackDone( response );\n+\t\t\t\t}\n+\t\t\t} ).catch( ( error ) => {\n+\t\t\t\tconsole.log( error );\n+\t\t\t} )\n+\t\t\t.finally( () => {\n+\t\t\t\tif ( undefined !== callBackFinally ) {\n+\t\t\t\t\tcallBackFinally();\n+\t\t\t\t}\n+\t\t\t} );\n+\t},\n+\tloadWidgetFilterREST: ( widgetForm ) => {\n+\t\tconst parent = widgetForm.closest( `.learnpress-widget-wrapper:not(.${ classProcessing })` );\n+\t\tif ( ! parent ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tparent.classList.add( classProcessing );\n+\n+\t\tconst elOptionWidget = widgetForm.closest( 'div[data-widget]' );\n+\t\tlet elListCourseTarget = null;\n+\t\tif ( elOptionWidget ) {\n+\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\n+\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\n+\n+\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\n+\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\n+\t\t}\n+\n+\t\tconst widgetData = parent.dataset.widget ? JSON.parse( parent.dataset.widget ) : '';\n+\t\tconst lang = lpData.urlParams.lang ? `?lang=${ lpData.urlParams.lang }` : '';\n+\t\tconst url = API.frontend.apiWidgets + lang;\n+\t\tconst formData = new FormData( widgetForm );\n+\t\tconst filterCourses = { paged: 1 };\n+\t\tconst elLoadingChange = parent.querySelector( '.lp-widget-loading-change' );\n+\n+\t\telLoadingChange.style.display = 'block';\n+\n+\t\tfor ( const pair of formData.entries() ) {\n+\t\t\tconst key = pair[ 0 ];\n+\t\t\tconst value = formData.getAll( key );\n+\t\t\tif ( ! filterCourses.hasOwnProperty( key ) ) {\n+\t\t\t\tfilterCourses[ key ] = value.join( ',' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( 'undefined' !== typeof lpData.urlParams.page_term_id_current ) {\n+\t\t\tfilterCourses.page_term_id_current = lpData.urlParams.page_term_id_current;\n+\t\t} else if ( 'undefined' !== typeof lpData.urlParams.page_tag_id_current ) {\n+\t\t\tfilterCourses.page_tag_id_current = lpData.urlParams.page_tag_id_current;\n+\t\t}\n+\n+\t\tconst filterParamsUrl = { params_url: filterCourses };\n+\t\t\u002F\u002F Send lang to API if exist for multiple lang.\n+\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\n+\t\t\tfilterParamsUrl.params_url.lang = lpData.urlParams.lang;\n+\t\t} else if ( lpData.urlParams.hasOwnProperty( 'pll-current-lang' ) ) {\n+\t\t\tfilterParamsUrl.params_url[ 'pll-current-lang' ] = lpData.urlParams[ 'pll-current-lang' ];\n+\t\t}\n+\n+\t\tconst paramsFetch = {\n+\t\t\tmethod: 'POST',\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t},\n+\t\t\tbody: JSON.stringify( { ...widgetData, ...filterParamsUrl } ),\n+\t\t};\n+\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = lpData.nonce;\n+\t\t}\n+\n+\t\tconst callBack = {\n+\t\t\tbefore: () => {\n+\n+\t\t\t},\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\n+\t\t\t\tif ( data && status === 'success' ) {\n+\t\t\t\t\twidgetForm.innerHTML = data;\n+\n+\t\t\t\t\tconst elBtnDone = widgetForm.querySelector( '.course-filter-submit.lp-btn-done' );\n+\t\t\t\t\tif ( elBtnDone ) {\n+\t\t\t\t\t\tif ( window.outerWidth \u003C= 991 ) {\n+\t\t\t\t\t\t\tlpShowHideEl( elBtnDone, 1 );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tlpShowHideEl( elBtnDone, 0 );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} else if ( message ) {\n+\t\t\t\t\tconsole.error( message );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tconst timeOutDone = setInterval( () => {\n+\t\t\t\t\tif ( elListCourseTarget && ! elListCourseTarget.classList.contains( classProcessing ) ) {\n+\t\t\t\t\t\tclearInterval( timeOutDone );\n+\t\t\t\t\t\telLoadingChange.style.display = 'none';\n+\t\t\t\t\t\tparent.classList.remove( classProcessing );\n+\t\t\t\t\t}\n+\t\t\t\t}, 1 );\n+\t\t\t},\n+\t\t};\n+\n+\t\t\u002F\u002F Call API load widget\n+\t\tlpFetchAPI( url, paramsFetch, callBack );\n+\t},\n+\tsubmit: ( form ) => {\n+\t\tconst formData = new FormData( form ); \u002F\u002F Create a FormData object from the form\n+\t\tconst elListCourse = document.querySelector( '.learn-press-courses' );\n+\t\tconst elOptionWidget = form.closest( 'div[data-widget]' );\n+\n+\t\tlet elListCourseTarget = null;\n+\t\tif ( elOptionWidget ) {\n+\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\n+\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\n+\n+\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\n+\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\n+\t\t}\n+\n+\t\t\u002F\u002Fconst skeleton = elListCourse.querySelector( '.lp-archive-course-skeleton' );\n+\t\tconst filterCourses = { paged: 1 };\n+\n+\t\tif ( 'undefined' !== typeof window.lpCourseList ) {\n+\t\t\twindow.lpCourseList.updateEventTypeBeforeFetch( 'filter' );\n+\t\t}\n+\n+\t\tfor ( const pair of formData.entries() ) {\n+\t\t\tconst key = pair[ 0 ];\n+\t\t\tconst value = formData.getAll( key );\n+\t\t\tif ( ! filterCourses.hasOwnProperty( key ) ) {\n+\t\t\t\t\u002F\u002F Convert value array to string.\n+\t\t\t\tfilterCourses[ key ] = value.join( ',' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( 'undefined' !== typeof lpData.urlParams.page_term_id_current ) {\n+\t\t\tfilterCourses.page_term_id_current = lpData.urlParams.page_term_id_current;\n+\t\t}\n+\n+\t\tif ( 'undefined' !== typeof lpData.urlParams.page_tag_id_current ) {\n+\t\t\tfilterCourses.page_tag_id_current = lpData.urlParams.page_tag_id_current;\n+\t\t}\n+\n+\t\t\u002F\u002F Send lang to API if exist for multiple lang.\n+\t\tif ( lpData.urlParams.hasOwnProperty( 'lang' ) ) {\n+\t\t\tfilterCourses.lang = lpData.urlParams.lang;\n+\t\t} else if ( lpData.urlParams.hasOwnProperty( 'pll-current-lang' ) ) {\n+\t\t\tfilterCourses[ 'pll-current-lang' ] = lpData.urlParams[ 'pll-current-lang' ];\n+\t\t}\n+\n+\t\tif ( 'undefined' !== typeof lpSettingCourses && \u002F\u002F Old version.\n+\t\t\tlpData.is_course_archive &&\n+\t\t\tlpSettingCourses.lpArchiveLoadAjax &&\n+\t\t\telListCourse && ! elListCourseTarget &&\n+\t\t\t'undefined' !== typeof window.lpCourseList ) {\n+\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\t\t} else if ( elListCourseTarget ) {\n+\t\t\tif ( elListCourseTarget.classList.contains( classProcessing ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\telListCourseTarget.classList.add( classProcessing );\n+\t\t\tconst elLPTarget = elListCourseTarget.querySelector( '.lp-target' );\n+\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\tconst dataSend = { ...dataObj };\n+\n+\t\t\t\u002F\u002F Show loading list courses\n+\t\t\twindow.lpAJAXG.showHideLoading( elListCourseTarget, 1 );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\t\u002F\u002F Get all fields in form.\n+\t\t\tconst fields = form.elements;\n+\t\t\t\u002F\u002F If field not selected on form, will remove value on dataSend.\n+\t\t\tfor ( let i = 0; i \u003C fields.length; i++ ) {\n+\t\t\t\tif ( ! filterCourses.hasOwnProperty( fields[ i ].name ) ) {\n+\t\t\t\t\tdelete dataSend.args[ fields[ i ].name ];\n+\t\t\t\t} else {\n+\t\t\t\t\tdataSend.args[ fields[ i ].name ] = filterCourses[ fields[ i ].name ];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t\u002F\u002F Set count fields selected\n+\t\t\tdataSend.args.count_fields_selected = window.lpCourseFilter.countFieldsSelected( form );\n+\n+\t\t\tdataSend.args.paged = 1;\n+\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\n+\t\t\t\u002F\u002F Set url params to reload page.\n+\t\t\t\u002F\u002F Todo: need check allow set url params.\n+\t\t\tlpData.urlParams = filterCourses;\n+\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( lpGetCurrentURLNoParam(), lpData.urlParams ) );\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t\u002F\u002F Load AJAX widget by params\n+\t\t\twindow.lpCourseFilter.loadWidgetFilterREST( form );\n+\n+\t\t\t\u002F\u002F Load list courses by AJAX.\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\n+\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\telListCourseTarget.classList.remove( classProcessing );\n+\t\t\t\t\twindow.lpAJAXG.showHideLoading( elListCourseTarget, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\n+\t\t\t\u002F\u002F Scroll to archive element\n+\t\t\tif ( window.outerWidth \u003C= withHandleForMobile ) {\n+\t\t\t\telListCourseTarget.scrollIntoView( { behavior: 'smooth' } );\n+\n+\t\t\t\t\u002F\u002F Hide widget course filter\n+\t\t\t\tconst body = document.querySelector( 'body' );\n+\t\t\t\tbody.classList.remove( `${ classShowCourseFilterMobile }` );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tconst courseUrl = lpData.urlParams.page_term_url || lpData.courses_url || '';\n+\t\t\tconst url = new URL( courseUrl );\n+\t\t\tObject.keys( filterCourses ).forEach( ( arg ) => {\n+\t\t\t\turl.searchParams.set( arg, filterCourses[ arg ] );\n+\t\t\t} );\n+\n+\t\t\tdocument.location.href = url.href;\n+\t\t}\n+\t},\n+\treset: ( btnReset ) => {\n+\t\tconst form = btnReset.closest( `.${ classCourseFilter }` );\n+\t\tif ( ! form ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst btnSubmit = form.querySelector( '.course-filter-submit' );\n+\t\tconst elResult = form.querySelector( '.lp-course-filter-search-result' );\n+\t\tconst elSearch = form.querySelector( '.lp-course-filter-search' );\n+\n+\t\tform.reset();\n+\t\tif ( elResult ) {\n+\t\t\telResult.innerHTML = '';\n+\t\t}\n+\t\tif ( elSearch ) {\n+\t\t\telSearch.value = '';\n+\t\t}\n+\t\t\u002F\u002F Uncheck value with case set default from params url.\n+\t\tfor ( let i = 0; i \u003C form.elements.length; i++ ) {\n+\t\t\tform.elements[ i ].removeAttribute( 'checked' );\n+\t\t}\n+\n+\t\tbtnSubmit.click();\n+\n+\t\t\u002F\u002F Load AJAX widget by params\n+\t\t\u002F\u002Fwindow.lpCourseFilter.loadWidgetFilterREST( form );\n+\t},\n+\tshowHideSearchResult: ( target ) => {\n+\t\tconst elResult = document.querySelector( '.lp-course-filter-search-result' );\n+\t\tif ( ! elResult ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst parent = target.closest( '.lp-course-filter-search-result' );\n+\t\tif ( ! parent && ! target.classList.contains( 'lp-course-filter-search-result' ) && ! target.classList.contains( 'lp-course-filter-search' ) ) {\n+\t\t\telResult.style.display = 'none';\n+\t\t} else {\n+\t\t\telResult.style.display = 'block';\n+\t\t}\n+\t},\n+\tcountFieldsSelected: ( form ) => {\n+\t\tconst elCountFieldsSelected = document.querySelector( '.course-filter-count-fields-selected' );\n+\n+\t\tif ( ! elCountFieldsSelected ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst fieldsSelected = form.querySelectorAll( 'input:checked' );\n+\n+\t\tlet countStr = '';\n+\t\tif ( fieldsSelected.length ) {\n+\t\t\tcountStr = `(${ fieldsSelected.length })`;\n+\t\t}\n+\n+\t\telCountFieldsSelected.innerHTML = countStr;\n+\n+\t\treturn countStr;\n+\t},\n+\ttriggerInputChoice: ( target ) => {\n+\t\tconst elField = target.closest( `.lp-course-filter__field` );\n+\t\tif ( ! elField ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elForm = elField.closest( `.${ classCourseFilter }` );\n+\n+\t\tif ( target.tagName === 'INPUT' ) {\n+\t\t\tconst elOptionWidget = elField.closest( 'div[data-widget]' );\n+\n+\t\t\tlet elListCourseTarget = null;\n+\t\t\tif ( elOptionWidget ) {\n+\t\t\t\tconst dataWidgetObj = JSON.parse( elOptionWidget.dataset.widget );\n+\t\t\t\tconst dataWidgetObjInstance = JSON.parse( dataWidgetObj.instance );\n+\n+\t\t\t\tconst classListCourseTarget = dataWidgetObjInstance.class_list_courses_target || '.lp-list-courses-default';\n+\t\t\t\telListCourseTarget = document.querySelector( classListCourseTarget );\n+\t\t\t\tif ( ! elListCourseTarget ) {\n+\t\t\t\t\t\u002F\u002Freturn;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Filter courses\n+\t\t\t\t\u002F\u002F Check on mobile will not filter when click field\n+\t\t\t\tif ( window.outerWidth > withHandleForMobile ) {\n+\t\t\t\t\tconst form = elField.closest( `.${ classCourseFilter }` );\n+\t\t\t\t\twindow.lpCourseFilter.submit( form );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\telField.querySelector( 'input' ).click();\n+\t\t}\n+\n+\t\t\u002F\u002F Set count fields selected\n+\t\twindow.lpCourseFilter.countFieldsSelected( elForm );\n+\t},\n+\tclickBtnFilterMobile: ( target ) => {\n+\t\tconst elBtnFilterMobile = target.closest( '.course-filter-btn-mobile' );\n+\t\tif ( ! elBtnFilterMobile ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst body = document.querySelector( 'body' );\n+\t\tbody.classList.toggle( `${ classShowCourseFilterMobile }` );\n+\t},\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,587 +1,587 @@\n-\u002F**\r\n- * @deprecated 4.2.5.8\r\n- * But still support for theme has html old, override.\r\n- * Todo: if want remove file, need to check theme override file archive, can via remove hook override file.\r\n- *\u002F\r\n-\r\n-import API from '..\u002Fapi';\r\n-import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '..\u002Futils';\r\n-import Cookies from '..\u002Futils\u002Fcookies';\r\n-\r\n-const elListCoursesIdNewDefault = '.lp-list-courses-default';\r\n-\r\n-if ( 'undefined' === typeof lpData || 'undefined' === typeof lpSettingCourses ) {\r\n-\tconsole.log( 'lpData || lpSettingCourses is undefined' );\r\n-}\r\n-\r\n-\u002F\u002F Call API load courses.\r\n-\u002F\u002F When LP v4.2.3.3 release a long time, we will remove this function on theme Eduma.\r\n-\u002F\u002F assets\u002Fjs\u002Fthim-course-filter-v2.js\r\n-window.lpArchiveRequestCourse = ( args ) => {\r\n-\twindow.lpCourseList.updateEventTypeBeforeFetch( 'filter' );\r\n-\twindow.lpCourseList.triggerFetchAPI( args );\r\n-};\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'change', function( e ) {\r\n-\tconst target = e.target;\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.onChangeSortBy( e, target );\r\n-\twindow.lpCourseList.onChangeTypeLayout( e, target );\r\n-} );\r\n-document.addEventListener( 'click', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.clickLoadMore( e, target );\r\n-\twindow.lpCourseList.clickNumberPage( e, target );\r\n-} );\r\n-document.addEventListener( 'scroll', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.scrollInfinite( e, target );\r\n-} );\r\n-document.addEventListener( 'keyup', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.searchCourse( e, target );\r\n-} );\r\n-document.addEventListener( 'submit', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.searchCourse( e, target );\r\n-} );\r\n-\r\n-window.lpCourseList = ( () => {\r\n-\tconst classArchiveCourse = 'lp-archive-courses';\r\n-\tconst classListCourse = 'learn-press-courses';\r\n-\tconst classPaginationCourse = 'learn-press-pagination';\r\n-\tconst classSkeletonArchiveCourse = 'lp-archive-course-skeleton';\r\n-\tconst classCoursesPageResult = 'courses-page-result';\r\n-\tconst lpArchiveLoadAjax = parseInt( lpSettingCourses.lpArchiveLoadAjax || 0 );\r\n-\tconst lpArchiveNoLoadAjaxFirst = parseInt( lpSettingCourses.lpArchiveNoLoadAjaxFirst ) === 1;\r\n-\tconst lpArchiveSkeletonParam = lpData.urlParams || [];\r\n-\tconst currentUrl = lpGetCurrentURLNoParam();\r\n-\tlet filterCourses = {};\r\n-\tconst typePagination = lpSettingCourses.lpArchivePaginationType || 'number';\r\n-\tlet typeEventBeforeFetch;\r\n-\tlet timeOutSearch;\r\n-\tlet isLoadingInfinite = false;\r\n-\tconst fetchAPI = ( args, callBack = {} ) => {\r\n-\t\t\u002F\u002Fconsole.log( 'Fetch API Courses' );\r\n-\t\tconst url = lpAddQueryArgs( API.frontend.apiCourses, args );\r\n-\t\tlet paramsFetch = {};\r\n-\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch = {\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tlpFetchAPI( url, paramsFetch, callBack );\r\n-\t};\r\n-\treturn {\r\n-\t\tinit: () => {\r\n-\t\t\tconst urlParams = {};\r\n-\t\t\tconst urlQueryString = window.location.search;\r\n-\t\t\tconst urlSearchParams = new URLSearchParams( urlQueryString );\r\n-\t\t\tfor ( const [ key, val ] of urlSearchParams.entries() ) {\r\n-\t\t\t\turlParams[ key ] = val;\r\n-\t\t\t}\r\n-\r\n-\t\t\tfilterCourses = { ...lpArchiveSkeletonParam, ...urlParams };\r\n-\t\t\tfilterCourses.paged = parseInt( filterCourses.paged || 1 );\r\n-\t\t\tif ( isNaN( filterCourses.paged ) ) {\r\n-\t\t\t\tfilterCourses.paged = 1;\r\n-\t\t\t}\r\n-\t\t\tif ( lpArchiveNoLoadAjaxFirst && typePagination !== 'number' ) {\r\n-\t\t\t\tfilterCourses.paged = 1;\r\n-\t\t\t}\r\n-\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( filterCourses ) );\r\n-\t\t},\r\n-\t\tupdateEventTypeBeforeFetch: ( type ) => {\r\n-\t\t\ttypeEventBeforeFetch = type;\r\n-\t\t},\r\n-\t\tonChangeSortBy: ( e, target ) => {\r\n-\t\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\r\n-\t\t\tconst filterCourses = JSON.parse( window.localStorage.getItem( 'lp_filter_courses' ) ) || {};\r\n-\t\t\tfilterCourses.order_by = target.value || '';\r\n-\r\n-\t\t\tif ( 'undefined' !== typeof lpSettingCourses &&\r\n-\t\t\t\tlpData.is_course_archive &&\r\n-\t\t\t\tlpSettingCourses.lpArchiveLoadAjax ) {\r\n-\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\t\t\t} else {\r\n-\t\t\t\twindow.location.href = lpAddQueryArgs( currentUrl, filterCourses );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tonChangeTypeLayout: ( e, target ) => {\r\n-\t\t\tif ( 'lp-switch-layout-btn' !== target.getAttribute( 'name' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elArchive = target.closest( `.${ classArchiveCourse }` );\r\n-\t\t\tif ( ! elArchive ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst layout = target.value;\r\n-\t\t\tif ( layout ) {\r\n-\t\t\t\telListCourse.dataset.layout = layout;\r\n-\t\t\t\tCookies.set( 'courses-layout', layout );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tclickNumberPage: ( e, target ) => {\r\n-\t\t\tif ( ! lpArchiveLoadAjax || parseInt( lpSettingCourses.noLoadCoursesJs ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( target.classList.contains( 'page-numbers' ) ) {\r\n-\t\t\t\tconst parentArchive = target.closest( `.${ classArchiveCourse }` );\r\n-\t\t\t\tif ( ! parentArchive ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tconst pageCurrent = filterCourses.paged;\r\n-\t\t\t\tif ( target.classList.contains( 'prev' ) ) {\r\n-\t\t\t\t\tfilterCourses.paged = pageCurrent - 1;\r\n-\t\t\t\t} else if ( target.classList.contains( 'next' ) ) {\r\n-\t\t\t\t\tfilterCourses.paged = pageCurrent + 1;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tfilterCourses.paged = parseInt( target.textContent );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\ttypeEventBeforeFetch = 'number';\r\n-\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst parent = target.closest( '.page-numbers' );\r\n-\t\t\tif ( parent ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tparent.click();\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tclickLoadMore: ( e, target ) => {\r\n-\t\t\tif ( ! target.classList.contains( 'courses-btn-load-more' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elArchive = target.closest( `.${ classArchiveCourse }` );\r\n-\t\t\tif ( ! elArchive ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\t\t\t++filterCourses.paged;\r\n-\t\t\ttypeEventBeforeFetch = 'load-more';\r\n-\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\t\t},\r\n-\t\tscrollInfinite: ( e, target ) => {\r\n-\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\r\n-\t\t\tif ( ! elArchive ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elInfinite = elArchive.querySelector( '.courses-load-infinite' );\r\n-\t\t\tif ( ! elInfinite ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Create an IntersectionObserver object.\r\n-\t\t\tconst observer = new IntersectionObserver( function( entries ) {\r\n-\t\t\t\tfor ( const entry of entries ) {\r\n-\t\t\t\t\t\u002F\u002F If the entry is intersecting, load the image.\r\n-\t\t\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\t\t\tif ( isLoadingInfinite ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t++filterCourses.paged;\r\n-\t\t\t\t\t\ttypeEventBeforeFetch = 'infinite';\r\n-\t\t\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\r\n-\t\t\t\t\t\t\u002F\u002Fobserver.unobserve( entry.target );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\r\n-\t\t\tobserver.observe( elInfinite );\r\n-\t\t},\r\n-\t\ttriggerFetchAPI: ( args ) => { \u002F\u002F For case, click on pagination, filter.\r\n-\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\r\n-\t\t\tif ( ! elArchive ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tfilterCourses = args;\r\n-\t\t\tlet callBack;\r\n-\t\t\tswitch ( typeEventBeforeFetch ) {\r\n-\t\t\tcase 'load-more':\r\n-\t\t\t\tcallBack = window.lpCourseList.callBackPaginationTypeLoadMore( elArchive, elListCourse );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'infinite':\r\n-\t\t\t\tcallBack = window.lpCourseList.callBackPaginationTypeInfinite( elArchive, elListCourse );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'custom':\r\n-\t\t\t\tcallBack = args.customCallBack || false;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'filter':\r\n-\t\t\tdefault: \u002F\u002F number\r\n-\t\t\t\t\u002F\u002F Change url by params filter courses\r\n-\t\t\t\t\u002F\u002FcallBack = window.lpCourseList.callBackPaginationTypeNumber( elListCourse );\r\n-\t\t\t\tcallBack = window.lpCourseList.callBackFilter( args, elArchive, elListCourse );\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! callBack ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002Fconsole.log( 'Args', args );\r\n-\r\n-\t\t\tfetchAPI( args, callBack );\r\n-\t\t},\r\n-\t\tcallBackFilter: ( args, elArchive, elListCourse ) => {\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\r\n-\r\n-\t\t\treturn {\r\n-\t\t\t\tbefore: () => {\r\n-\t\t\t\t\twindow.history.pushState( '', '', lpAddQueryArgs( currentUrl, args ) );\r\n-\t\t\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\r\n-\t\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'block';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\t\u002F\u002F Remove all items before insert new items.\r\n-\t\t\t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\r\n-\t\t\t\t\telLis.forEach( ( elLi ) => {\r\n-\t\t\t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\r\n-\t\t\t\t\t\tif ( parent ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telLi.remove();\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Insert new items.\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check if Pagination exists will remove.\r\n-\t\t\t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\r\n-\t\t\t\t\tif ( elPagination ) {\r\n-\t\t\t\t\t\telPagination.remove();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Insert Pagination.\r\n-\t\t\t\t\tconst pagination = res.data.pagination || '';\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set showing results page.\r\n-\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\r\n-\t\t\t\t\tif ( elCoursesPageResult ) {\r\n-\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F\u002F Scroll to archive element\r\n-\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\r\n-\t\t\t\t\telListCourse.closest( `.${ classArchiveCourse }` ).scrollIntoView( optionScroll );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t},\r\n-\t\t\u002F*callBackPaginationTypeNumber: ( elListCourse ) => {\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\r\n-\r\n-\t\t\treturn {\r\n-\t\t\t\tbefore: () => {\r\n-\t\t\t\t\tconst urlPush = lpAddQueryArgs( currentUrl, args );\r\n-\t\t\t\t\twindow.history.pushState( '', '', urlPush );\r\n-\t\t\t\t\t\u002F\u002F Save filter courses to Storage\r\n-\t\t\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\r\n-\t\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'block';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\t\u002F\u002F Remove all items before insert new items.\r\n-\t\t\t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\r\n-\t\t\t\t\telLis.forEach( ( elLi ) => {\r\n-\t\t\t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\r\n-\t\t\t\t\t\tif ( parent ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telLi.remove();\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Insert new items.\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check if Pagination exists will remove.\r\n-\t\t\t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\r\n-\t\t\t\t\tif ( elPagination ) {\r\n-\t\t\t\t\t\telPagination.remove();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Insert Pagination.\r\n-\t\t\t\t\tconst pagination = res.data.pagination || '';\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\tif ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Scroll to archive element\r\n-\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\r\n-\t\t\t\t\telListCourse.closest( '.lp-archive-courses' ).scrollIntoView( optionScroll );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t},*\u002F\r\n-\t\tcallBackPaginationTypeLoadMore: ( elArchive, elListCourse ) => {\r\n-\t\t\t\u002F\u002Fconsole.log( 'callBackPaginationTypeLoadMore' );\r\n-\t\t\tif ( ! elListCourse || ! elArchive ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t\tconst btnLoadMore = elArchive.querySelector( '.courses-btn-load-more' );\r\n-\t\t\tlet elLoading;\r\n-\t\t\tif ( btnLoadMore ) {\r\n-\t\t\t\telLoading = btnLoadMore.querySelector( '.lp-loading-circle' );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002Fconst skeleton = document.querySelector( `.${ classSkeletonArchiveCourse }` );\r\n-\r\n-\t\t\treturn {\r\n-\t\t\t\tbefore: () => {\r\n-\t\t\t\t\tif ( btnLoadMore ) {\r\n-\t\t\t\t\t\telLoading.classList.remove( 'hide' );\r\n-\t\t\t\t\t\tbtnLoadMore.setAttribute( 'disabled', 'disabled' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F*if ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'block';\r\n-\t\t\t\t\t}*\u002F\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', res.data.content || '' );\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', res.data.pagination || '' );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set showing results page.\r\n-\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\r\n-\t\t\t\t\tif ( elCoursesPageResult ) {\r\n-\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\tif ( btnLoadMore ) {\r\n-\t\t\t\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t\t\t\t\tbtnLoadMore.remove();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F*if ( skeleton ) {\r\n-\t\t\t\t\t\tskeleton.style.display = 'none';\r\n-\t\t\t\t\t}*\u002F\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t},\r\n-\t\tcallBackPaginationTypeInfinite: ( elArchive, elListCourse ) => {\r\n-\t\t\t\u002F\u002Fconsole.log( 'callBackPaginationTypeInfinite' );\r\n-\t\t\tif ( ! elListCourse || ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elInfinite = elArchive.querySelector( '.courses-load-infinite' );\r\n-\t\t\tif ( ! elInfinite ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst loading = elInfinite.querySelector( '.lp-loading-circle' );\r\n-\r\n-\t\t\tisLoadingInfinite = true;\r\n-\r\n-\t\t\telInfinite.classList.remove( 'courses-load-infinite' );\r\n-\r\n-\t\t\treturn {\r\n-\t\t\t\tbefore: () => {\r\n-\t\t\t\t\tloading.classList.remove( 'hide' );\r\n-\t\t\t\t},\r\n-\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', res.data.content || '' );\r\n-\r\n-\t\t\t\t\tif ( res.data.pagination ) {\r\n-\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', res.data.pagination || '' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set showing results page.\r\n-\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\r\n-\t\t\t\t\tif ( elCoursesPageResult ) {\r\n-\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\telInfinite.remove();\r\n-\t\t\t\t\tisLoadingInfinite = false;\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t},\r\n-\t\tsearchCourse: ( e, target ) => {\r\n-\t\t\tif ( 'c_search' === target.name ) {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tconst parentFormSearch = target.closest( 'form.search-courses' );\r\n-\t\t\t\tif ( ! parentFormSearch ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst btnSearch = parentFormSearch.querySelector( 'button[type=\"submit\"]' );\r\n-\t\t\t\tbtnSearch.click();\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! target.classList.contains( 'search-courses' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst formSearchCourses = target;\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst elArchive = formSearchCourses.closest( `.${ classArchiveCourse }` );\r\n-\t\t\tif ( ! elArchive ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elInputSearch = formSearchCourses.querySelector( 'input[name=c_search]' );\r\n-\t\t\tconst keyword = elInputSearch.value;\r\n-\r\n-\t\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\r\n-\t\t\t\tif ( undefined !== timeOutSearch ) {\r\n-\t\t\t\t\tclearTimeout( timeOutSearch );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\ttimeOutSearch = setTimeout( function() {\r\n-\t\t\t\t\ttypeEventBeforeFetch = 'filter';\r\n-\t\t\t\t\tfilterCourses.c_search = keyword;\r\n-\t\t\t\t\tfilterCourses.paged = 1;\r\n-\r\n-\t\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\r\n-\t\t\t\t}, 800 );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tajaxEnableLoadPage: () => { \u002F\u002F For case enable AJAX when load page.\r\n-\t\t\tlet countTime = 0;\r\n-\t\t\tif ( ! lpArchiveNoLoadAjaxFirst ) {\r\n-\t\t\t\tlet detectedElArchive;\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\t\t\tdetectedElArchive = setInterval( function() {\r\n-\t\t\t\t\t\t\tconst skeleton = document.querySelector( `.${ classSkeletonArchiveCourse }` );\r\n-\t\t\t\t\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\r\n-\t\t\t\t\t\t\tlet elListCourse;\r\n-\t\t\t\t\t\t\tif ( elArchive ) {\r\n-\t\t\t\t\t\t\t\telListCourse = elArchive.querySelector( `.${ classListCourse }` );\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t++countTime;\r\n-\t\t\t\t\t\t\tif ( countTime > 5000 ) {\r\n-\t\t\t\t\t\t\t\tclearInterval( detectedElArchive );\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tif ( elListCourse && skeleton ) {\r\n-\t\t\t\t\t\t\t\tclearInterval( detectedElArchive );\r\n-\t\t\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\r\n-\t\t\t\t\t\t\t\tskeleton.style.display = 'none';\r\n-\r\n-\t\t\t\t\t\t\t\tconst pagination = res.data.pagination || '';\r\n-\t\t\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\r\n-\r\n-\t\t\t\t\t\t\t\t\u002F\u002F Set showing results page.\r\n-\t\t\t\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\r\n-\t\t\t\t\t\t\t\tif ( elCoursesPageResult ) {\r\n-\t\t\t\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}, 1 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\tif ( 'number' !== typePagination ) {\r\n-\t\t\t\t\tfilterCourses.paged = 1;\r\n-\t\t\t\t}\r\n-\t\t\t\tfetchAPI( filterCourses, callBack );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tgetFilterParams: () => {\r\n-\t\t\treturn filterCourses;\r\n-\t\t},\r\n-\t\t\u002F\u002F Check has exists new list courses.\r\n-\t\tcheckIsNewListCourses: () => {\r\n-\t\t\tconst elListCoursesNew = document.querySelector( elListCoursesIdNewDefault );\r\n-\t\t\treturn !! elListCoursesNew;\r\n-\t\t},\r\n-\t};\r\n-} )();\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function() {\r\n-\tif ( window.lpCourseList.checkIsNewListCourses() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\twindow.lpCourseList.init();\r\n-\twindow.lpCourseList.ajaxEnableLoadPage();\r\n-} );\r\n+\u002F**\n+ * @deprecated 4.2.5.8\n+ * But still support for theme has html old, override.\n+ * Todo: if want remove file, need to check theme override file archive, can via remove hook override file.\n+ *\u002F\n+\n+import API from '..\u002Fapi';\n+import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '..\u002Futils';\n+import Cookies from '..\u002Futils\u002Fcookies';\n+\n+const elListCoursesIdNewDefault = '.lp-list-courses-default';\n+\n+if ( 'undefined' === typeof lpData || 'undefined' === typeof lpSettingCourses ) {\n+\tconsole.log( 'lpData || lpSettingCourses is undefined' );\n+}\n+\n+\u002F\u002F Call API load courses.\n+\u002F\u002F When LP v4.2.3.3 release a long time, we will remove this function on theme Eduma.\n+\u002F\u002F assets\u002Fjs\u002Fthim-course-filter-v2.js\n+window.lpArchiveRequestCourse = ( args ) => {\n+\twindow.lpCourseList.updateEventTypeBeforeFetch( 'filter' );\n+\twindow.lpCourseList.triggerFetchAPI( args );\n+};\n+\n+\u002F\u002F Events\n+document.addEventListener( 'change', function( e ) {\n+\tconst target = e.target;\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.onChangeSortBy( e, target );\n+\twindow.lpCourseList.onChangeTypeLayout( e, target );\n+} );\n+document.addEventListener( 'click', function( e ) {\n+\tconst target = e.target;\n+\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.clickLoadMore( e, target );\n+\twindow.lpCourseList.clickNumberPage( e, target );\n+} );\n+document.addEventListener( 'scroll', function( e ) {\n+\tconst target = e.target;\n+\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.scrollInfinite( e, target );\n+} );\n+document.addEventListener( 'keyup', function( e ) {\n+\tconst target = e.target;\n+\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.searchCourse( e, target );\n+} );\n+document.addEventListener( 'submit', function( e ) {\n+\tconst target = e.target;\n+\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.searchCourse( e, target );\n+} );\n+\n+window.lpCourseList = ( () => {\n+\tconst classArchiveCourse = 'lp-archive-courses';\n+\tconst classListCourse = 'learn-press-courses';\n+\tconst classPaginationCourse = 'learn-press-pagination';\n+\tconst classSkeletonArchiveCourse = 'lp-archive-course-skeleton';\n+\tconst classCoursesPageResult = 'courses-page-result';\n+\tconst lpArchiveLoadAjax = parseInt( lpSettingCourses.lpArchiveLoadAjax || 0 );\n+\tconst lpArchiveNoLoadAjaxFirst = parseInt( lpSettingCourses.lpArchiveNoLoadAjaxFirst ) === 1;\n+\tconst lpArchiveSkeletonParam = lpData.urlParams || [];\n+\tconst currentUrl = lpGetCurrentURLNoParam();\n+\tlet filterCourses = {};\n+\tconst typePagination = lpSettingCourses.lpArchivePaginationType || 'number';\n+\tlet typeEventBeforeFetch;\n+\tlet timeOutSearch;\n+\tlet isLoadingInfinite = false;\n+\tconst fetchAPI = ( args, callBack = {} ) => {\n+\t\t\u002F\u002Fconsole.log( 'Fetch API Courses' );\n+\t\tconst url = lpAddQueryArgs( API.frontend.apiCourses, args );\n+\t\tlet paramsFetch = {};\n+\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch = {\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t}\n+\n+\t\tlpFetchAPI( url, paramsFetch, callBack );\n+\t};\n+\treturn {\n+\t\tinit: () => {\n+\t\t\tconst urlParams = {};\n+\t\t\tconst urlQueryString = window.location.search;\n+\t\t\tconst urlSearchParams = new URLSearchParams( urlQueryString );\n+\t\t\tfor ( const [ key, val ] of urlSearchParams.entries() ) {\n+\t\t\t\turlParams[ key ] = val;\n+\t\t\t}\n+\n+\t\t\tfilterCourses = { ...lpArchiveSkeletonParam, ...urlParams };\n+\t\t\tfilterCourses.paged = parseInt( filterCourses.paged || 1 );\n+\t\t\tif ( isNaN( filterCourses.paged ) ) {\n+\t\t\t\tfilterCourses.paged = 1;\n+\t\t\t}\n+\t\t\tif ( lpArchiveNoLoadAjaxFirst && typePagination !== 'number' ) {\n+\t\t\t\tfilterCourses.paged = 1;\n+\t\t\t}\n+\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( filterCourses ) );\n+\t\t},\n+\t\tupdateEventTypeBeforeFetch: ( type ) => {\n+\t\t\ttypeEventBeforeFetch = type;\n+\t\t},\n+\t\tonChangeSortBy: ( e, target ) => {\n+\t\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\n+\t\t\tconst filterCourses = JSON.parse( window.localStorage.getItem( 'lp_filter_courses' ) ) || {};\n+\t\t\tfilterCourses.order_by = target.value || '';\n+\n+\t\t\tif ( 'undefined' !== typeof lpSettingCourses &&\n+\t\t\t\tlpData.is_course_archive &&\n+\t\t\t\tlpSettingCourses.lpArchiveLoadAjax ) {\n+\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\t\t\t} else {\n+\t\t\t\twindow.location.href = lpAddQueryArgs( currentUrl, filterCourses );\n+\t\t\t}\n+\t\t},\n+\t\tonChangeTypeLayout: ( e, target ) => {\n+\t\t\tif ( 'lp-switch-layout-btn' !== target.getAttribute( 'name' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elArchive = target.closest( `.${ classArchiveCourse }` );\n+\t\t\tif ( ! elArchive ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\te.preventDefault();\n+\t\t\tconst layout = target.value;\n+\t\t\tif ( layout ) {\n+\t\t\t\telListCourse.dataset.layout = layout;\n+\t\t\t\tCookies.set( 'courses-layout', layout );\n+\t\t\t}\n+\t\t},\n+\t\tclickNumberPage: ( e, target ) => {\n+\t\t\tif ( ! lpArchiveLoadAjax || parseInt( lpSettingCourses.noLoadCoursesJs ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( target.classList.contains( 'page-numbers' ) ) {\n+\t\t\t\tconst parentArchive = target.closest( `.${ classArchiveCourse }` );\n+\t\t\t\tif ( ! parentArchive ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\te.preventDefault();\n+\t\t\t\tconst pageCurrent = filterCourses.paged;\n+\t\t\t\tif ( target.classList.contains( 'prev' ) ) {\n+\t\t\t\t\tfilterCourses.paged = pageCurrent - 1;\n+\t\t\t\t} else if ( target.classList.contains( 'next' ) ) {\n+\t\t\t\t\tfilterCourses.paged = pageCurrent + 1;\n+\t\t\t\t} else {\n+\t\t\t\t\tfilterCourses.paged = parseInt( target.textContent );\n+\t\t\t\t}\n+\n+\t\t\t\ttypeEventBeforeFetch = 'number';\n+\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst parent = target.closest( '.page-numbers' );\n+\t\t\tif ( parent ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\tparent.click();\n+\t\t\t}\n+\t\t},\n+\t\tclickLoadMore: ( e, target ) => {\n+\t\t\tif ( ! target.classList.contains( 'courses-btn-load-more' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elArchive = target.closest( `.${ classArchiveCourse }` );\n+\t\t\tif ( ! elArchive ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\t\t\t++filterCourses.paged;\n+\t\t\ttypeEventBeforeFetch = 'load-more';\n+\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\t\t},\n+\t\tscrollInfinite: ( e, target ) => {\n+\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\n+\t\t\tif ( ! elArchive ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elInfinite = elArchive.querySelector( '.courses-load-infinite' );\n+\t\t\tif ( ! elInfinite ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Create an IntersectionObserver object.\n+\t\t\tconst observer = new IntersectionObserver( function( entries ) {\n+\t\t\t\tfor ( const entry of entries ) {\n+\t\t\t\t\t\u002F\u002F If the entry is intersecting, load the image.\n+\t\t\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\t\t\tif ( isLoadingInfinite ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t++filterCourses.paged;\n+\t\t\t\t\t\ttypeEventBeforeFetch = 'infinite';\n+\t\t\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\n+\t\t\t\t\t\t\u002F\u002Fobserver.unobserve( entry.target );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} );\n+\n+\t\t\tobserver.observe( elInfinite );\n+\t\t},\n+\t\ttriggerFetchAPI: ( args ) => { \u002F\u002F For case, click on pagination, filter.\n+\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\n+\t\t\tif ( ! elArchive ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tfilterCourses = args;\n+\t\t\tlet callBack;\n+\t\t\tswitch ( typeEventBeforeFetch ) {\n+\t\t\tcase 'load-more':\n+\t\t\t\tcallBack = window.lpCourseList.callBackPaginationTypeLoadMore( elArchive, elListCourse );\n+\t\t\t\tbreak;\n+\t\t\tcase 'infinite':\n+\t\t\t\tcallBack = window.lpCourseList.callBackPaginationTypeInfinite( elArchive, elListCourse );\n+\t\t\t\tbreak;\n+\t\t\tcase 'custom':\n+\t\t\t\tcallBack = args.customCallBack || false;\n+\t\t\t\tbreak;\n+\t\t\tcase 'filter':\n+\t\t\tdefault: \u002F\u002F number\n+\t\t\t\t\u002F\u002F Change url by params filter courses\n+\t\t\t\t\u002F\u002FcallBack = window.lpCourseList.callBackPaginationTypeNumber( elListCourse );\n+\t\t\t\tcallBack = window.lpCourseList.callBackFilter( args, elArchive, elListCourse );\n+\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ( ! callBack ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002Fconsole.log( 'Args', args );\n+\n+\t\t\tfetchAPI( args, callBack );\n+\t\t},\n+\t\tcallBackFilter: ( args, elArchive, elListCourse ) => {\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\n+\n+\t\t\treturn {\n+\t\t\t\tbefore: () => {\n+\t\t\t\t\twindow.history.pushState( '', '', lpAddQueryArgs( currentUrl, args ) );\n+\t\t\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\n+\t\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'block';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\t\u002F\u002F Remove all items before insert new items.\n+\t\t\t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\n+\t\t\t\t\telLis.forEach( ( elLi ) => {\n+\t\t\t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\n+\t\t\t\t\t\tif ( parent ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telLi.remove();\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\t\u002F\u002F Insert new items.\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\n+\n+\t\t\t\t\t\u002F\u002F Check if Pagination exists will remove.\n+\t\t\t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\n+\t\t\t\t\tif ( elPagination ) {\n+\t\t\t\t\t\telPagination.remove();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Insert Pagination.\n+\t\t\t\t\tconst pagination = res.data.pagination || '';\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\n+\n+\t\t\t\t\t\u002F\u002F Set showing results page.\n+\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\n+\t\t\t\t\tif ( elCoursesPageResult ) {\n+\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t\t}\n+\t\t\t\t\t\u002F\u002F Scroll to archive element\n+\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\n+\t\t\t\t\telListCourse.closest( `.${ classArchiveCourse }` ).scrollIntoView( optionScroll );\n+\t\t\t\t},\n+\t\t\t};\n+\t\t},\n+\t\t\u002F*callBackPaginationTypeNumber: ( elListCourse ) => {\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst skeleton = elListCourse.querySelector( `.${ classSkeletonArchiveCourse }` );\n+\n+\t\t\treturn {\n+\t\t\t\tbefore: () => {\n+\t\t\t\t\tconst urlPush = lpAddQueryArgs( currentUrl, args );\n+\t\t\t\t\twindow.history.pushState( '', '', urlPush );\n+\t\t\t\t\t\u002F\u002F Save filter courses to Storage\n+\t\t\t\t\twindow.localStorage.setItem( 'lp_filter_courses', JSON.stringify( args ) );\n+\t\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'block';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\t\u002F\u002F Remove all items before insert new items.\n+\t\t\t\t\tconst elLis = elListCourse.querySelectorAll( `:not(.${ classSkeletonArchiveCourse })` );\n+\t\t\t\t\telLis.forEach( ( elLi ) => {\n+\t\t\t\t\t\tconst parent = elLi.closest( `.${ classSkeletonArchiveCourse }` );\n+\t\t\t\t\t\tif ( parent ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telLi.remove();\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\t\u002F\u002F Insert new items.\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\n+\n+\t\t\t\t\t\u002F\u002F Check if Pagination exists will remove.\n+\t\t\t\t\tconst elPagination = document.querySelector( `.${ classPaginationCourse }` );\n+\t\t\t\t\tif ( elPagination ) {\n+\t\t\t\t\t\telPagination.remove();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Insert Pagination.\n+\t\t\t\t\tconst pagination = res.data.pagination || '';\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\tif ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Scroll to archive element\n+\t\t\t\t\tconst optionScroll = { behavior: 'smooth' };\n+\t\t\t\t\telListCourse.closest( '.lp-archive-courses' ).scrollIntoView( optionScroll );\n+\t\t\t\t},\n+\t\t\t};\n+\t\t},*\u002F\n+\t\tcallBackPaginationTypeLoadMore: ( elArchive, elListCourse ) => {\n+\t\t\t\u002F\u002Fconsole.log( 'callBackPaginationTypeLoadMore' );\n+\t\t\tif ( ! elListCourse || ! elArchive ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t\tconst btnLoadMore = elArchive.querySelector( '.courses-btn-load-more' );\n+\t\t\tlet elLoading;\n+\t\t\tif ( btnLoadMore ) {\n+\t\t\t\telLoading = btnLoadMore.querySelector( '.lp-loading-circle' );\n+\t\t\t}\n+\t\t\t\u002F\u002Fconst skeleton = document.querySelector( `.${ classSkeletonArchiveCourse }` );\n+\n+\t\t\treturn {\n+\t\t\t\tbefore: () => {\n+\t\t\t\t\tif ( btnLoadMore ) {\n+\t\t\t\t\t\telLoading.classList.remove( 'hide' );\n+\t\t\t\t\t\tbtnLoadMore.setAttribute( 'disabled', 'disabled' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F*if ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'block';\n+\t\t\t\t\t}*\u002F\n+\t\t\t\t},\n+\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', res.data.content || '' );\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', res.data.pagination || '' );\n+\n+\t\t\t\t\t\u002F\u002F Set showing results page.\n+\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\n+\t\t\t\t\tif ( elCoursesPageResult ) {\n+\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\tif ( btnLoadMore ) {\n+\t\t\t\t\t\telLoading.classList.add( 'hide' );\n+\t\t\t\t\t\tbtnLoadMore.remove();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F*if ( skeleton ) {\n+\t\t\t\t\t\tskeleton.style.display = 'none';\n+\t\t\t\t\t}*\u002F\n+\t\t\t\t},\n+\t\t\t};\n+\t\t},\n+\t\tcallBackPaginationTypeInfinite: ( elArchive, elListCourse ) => {\n+\t\t\t\u002F\u002Fconsole.log( 'callBackPaginationTypeInfinite' );\n+\t\t\tif ( ! elListCourse || ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elInfinite = elArchive.querySelector( '.courses-load-infinite' );\n+\t\t\tif ( ! elInfinite ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst loading = elInfinite.querySelector( '.lp-loading-circle' );\n+\n+\t\t\tisLoadingInfinite = true;\n+\n+\t\t\telInfinite.classList.remove( 'courses-load-infinite' );\n+\n+\t\t\treturn {\n+\t\t\t\tbefore: () => {\n+\t\t\t\t\tloading.classList.remove( 'hide' );\n+\t\t\t\t},\n+\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', res.data.content || '' );\n+\n+\t\t\t\t\tif ( res.data.pagination ) {\n+\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', res.data.pagination || '' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Set showing results page.\n+\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\n+\t\t\t\t\tif ( elCoursesPageResult ) {\n+\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\telListCourse.innerHTML += `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ error.message || 'Error' }\u003C\u002Fdiv>`;\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\telInfinite.remove();\n+\t\t\t\t\tisLoadingInfinite = false;\n+\t\t\t\t},\n+\t\t\t};\n+\t\t},\n+\t\tsearchCourse: ( e, target ) => {\n+\t\t\tif ( 'c_search' === target.name ) {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tconst parentFormSearch = target.closest( 'form.search-courses' );\n+\t\t\t\tif ( ! parentFormSearch ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst btnSearch = parentFormSearch.querySelector( 'button[type=\"submit\"]' );\n+\t\t\t\tbtnSearch.click();\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! target.classList.contains( 'search-courses' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst formSearchCourses = target;\n+\t\t\te.preventDefault();\n+\t\t\tconst elArchive = formSearchCourses.closest( `.${ classArchiveCourse }` );\n+\t\t\tif ( ! elArchive ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tconst elListCourse = elArchive.querySelector( `.${ classListCourse }` );\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elInputSearch = formSearchCourses.querySelector( 'input[name=c_search]' );\n+\t\t\tconst keyword = elInputSearch.value;\n+\n+\t\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\n+\t\t\t\tif ( undefined !== timeOutSearch ) {\n+\t\t\t\t\tclearTimeout( timeOutSearch );\n+\t\t\t\t}\n+\n+\t\t\t\ttimeOutSearch = setTimeout( function() {\n+\t\t\t\t\ttypeEventBeforeFetch = 'filter';\n+\t\t\t\t\tfilterCourses.c_search = keyword;\n+\t\t\t\t\tfilterCourses.paged = 1;\n+\n+\t\t\t\t\twindow.lpCourseList.triggerFetchAPI( filterCourses );\n+\t\t\t\t}, 800 );\n+\t\t\t}\n+\t\t},\n+\t\tajaxEnableLoadPage: () => { \u002F\u002F For case enable AJAX when load page.\n+\t\t\tlet countTime = 0;\n+\t\t\tif ( ! lpArchiveNoLoadAjaxFirst ) {\n+\t\t\t\tlet detectedElArchive;\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( res ) => {\n+\t\t\t\t\t\tdetectedElArchive = setInterval( function() {\n+\t\t\t\t\t\t\tconst skeleton = document.querySelector( `.${ classSkeletonArchiveCourse }` );\n+\t\t\t\t\t\t\tconst elArchive = document.querySelector( `.${ classArchiveCourse }` );\n+\t\t\t\t\t\t\tlet elListCourse;\n+\t\t\t\t\t\t\tif ( elArchive ) {\n+\t\t\t\t\t\t\t\telListCourse = elArchive.querySelector( `.${ classListCourse }` );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t++countTime;\n+\t\t\t\t\t\t\tif ( countTime > 5000 ) {\n+\t\t\t\t\t\t\t\tclearInterval( detectedElArchive );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tif ( elListCourse && skeleton ) {\n+\t\t\t\t\t\t\t\tclearInterval( detectedElArchive );\n+\t\t\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterbegin', res.data.content || '' );\n+\t\t\t\t\t\t\t\tskeleton.style.display = 'none';\n+\n+\t\t\t\t\t\t\t\tconst pagination = res.data.pagination || '';\n+\t\t\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'afterend', pagination );\n+\n+\t\t\t\t\t\t\t\t\u002F\u002F Set showing results page.\n+\t\t\t\t\t\t\t\tconst elCoursesPageResult = document.querySelector( `.${ classCoursesPageResult }` );\n+\t\t\t\t\t\t\t\tif ( elCoursesPageResult ) {\n+\t\t\t\t\t\t\t\t\telCoursesPageResult.innerHTML = res.data.from_to || '';\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}, 1 );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\tif ( 'number' !== typePagination ) {\n+\t\t\t\t\tfilterCourses.paged = 1;\n+\t\t\t\t}\n+\t\t\t\tfetchAPI( filterCourses, callBack );\n+\t\t\t}\n+\t\t},\n+\t\tgetFilterParams: () => {\n+\t\t\treturn filterCourses;\n+\t\t},\n+\t\t\u002F\u002F Check has exists new list courses.\n+\t\tcheckIsNewListCourses: () => {\n+\t\t\tconst elListCoursesNew = document.querySelector( elListCoursesIdNewDefault );\n+\t\t\treturn !! elListCoursesNew;\n+\t\t},\n+\t};\n+} )();\n+\n+document.addEventListener( 'DOMContentLoaded', function() {\n+\tif ( window.lpCourseList.checkIsNewListCourses() ) {\n+\t\treturn;\n+\t}\n+\n+\twindow.lpCourseList.init();\n+\twindow.lpCourseList.ajaxEnableLoadPage();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses-v2.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses-v2.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses-v2.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourses-v2.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,316 +1,316 @@\n-\u002F**\r\n- * Handle events for courses list.\r\n- *\r\n- * @since 4.2.5.8\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-import API from '..\u002Fapi';\r\n-import {\r\n-\tlpAddQueryArgs,\r\n-\tlpGetCurrentURLNoParam,\r\n-\tlistenElementViewed,\r\n-\tlistenElementCreated,\r\n-\tlpOnElementReady,\r\n-} from '..\u002Futils.js';\r\n-\r\n-if ( 'undefined' === typeof lpData ) {\r\n-\tconsole.log( 'lpData is undefined' );\r\n-}\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'change', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\twindow.lpCoursesList.onChangeSortBy( e, target );\r\n-\twindow.lpCoursesList.onChangeTypeLayout( e, target );\r\n-} );\r\n-document.addEventListener( 'click', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\twindow.lpCoursesList.LoadMore( e, target );\r\n-} );\r\n-\r\n-document.addEventListener( 'keyup', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\twindow.lpCoursesList.searchCourse( e, target );\r\n-} );\r\n-document.addEventListener( 'submit', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\r\n-} );\r\n-\r\n-lpOnElementReady( '.course-filter-btn-mobile', function( el ) {\r\n-\tconst widgetCourseFilter = document.querySelector( '.widget_course_filter' );\r\n-\tif ( ! widgetCourseFilter ) {\r\n-\t\tel.remove();\r\n-\t}\r\n-} );\r\n-\r\n-let timeOutSearch;\r\n-window.lpCoursesList = ( () => {\r\n-\tconst classListCourse = '.lp-list-courses-no-css';\r\n-\tconst classLPTarget = '.lp-target';\r\n-\tconst classLoadMore = 'courses-btn-load-more-no-css';\r\n-\tconst classPageResult = '.courses-page-result';\r\n-\tconst classLoading = '.lp-loading-no-css';\r\n-\tconst urlCurrent = lpGetCurrentURLNoParam();\r\n-\treturn {\r\n-\t\tLoadMore: ( e, target ) => {\r\n-\t\t\tconst btnLoadMore = target.closest( `.${ classLoadMore + ':not(.disabled)' }` );\r\n-\t\t\tif ( ! btnLoadMore ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elLPTarget = btnLoadMore.closest( `${ classLPTarget }` );\r\n-\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\t\t\tbtnLoadMore.classList.add( 'disabled' );\r\n-\r\n-\t\t\tconst elLoading = btnLoadMore.querySelector( classLoading );\r\n-\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\tconst dataSend = { ...dataObj };\r\n-\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\r\n-\t\t\t\tdataSend.args.paged = 1;\r\n-\t\t\t}\r\n-\r\n-\t\t\tdataSend.args.paged++;\r\n-\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\t\t\tif ( elLoading ) {\r\n-\t\t\t\telLoading.classList.remove( 'hide' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\tconst paged = parseInt( data.paged );\r\n-\t\t\t\t\tconst totalPages = parseInt( data.total_pages );\r\n-\r\n-\t\t\t\t\tconst newEl = document.createElement( 'div' );\r\n-\t\t\t\t\tnewEl.innerHTML = data.content || '';\r\n-\t\t\t\t\tconst elListCourse = elLPTarget.querySelector( classListCourse );\r\n-\t\t\t\t\tconst elPageResult = elLPTarget.querySelector( classPageResult );\r\n-\t\t\t\t\tconst elPageResultNew = newEl.querySelector( classPageResult );\r\n-\r\n-\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', newEl.querySelector( classListCourse ).innerHTML );\r\n-\t\t\t\t\tif ( elPageResult && elPageResultNew ) {\r\n-\t\t\t\t\t\telPageResult.innerHTML = elPageResultNew.innerHTML;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( paged >= totalPages ) {\r\n-\t\t\t\t\t\tbtnLoadMore.remove();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\tif ( elLoading ) {\r\n-\t\t\t\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbtnLoadMore.classList.remove( 'disabled' );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t},\r\n-\t\tLoadInfinite: () => {\r\n-\t\t\t\u002F\u002F When see element, will call API to load more items.\r\n-\t\t\tconst callBackAfterSeeItem = ( entry ) => {\r\n-\t\t\t\tconst elInfinite = entry.target;\r\n-\t\t\t\tconst elLoading = elInfinite.querySelector( `${ classLoading }:not(.disabled)` );\r\n-\t\t\t\tif ( ! elLoading ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t\telLoading.classList.remove( 'hide' );\r\n-\t\t\t\telLoading.classList.add( 'disabled' );\r\n-\r\n-\t\t\t\tconst elLPTarget = elInfinite.closest( classLPTarget );\r\n-\t\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\t\tconst dataSend = { ...dataObj }; \u002F\u002F Clone object\r\n-\r\n-\t\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\r\n-\t\t\t\t\tdataSend.args.paged = 1;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Handle set data send to call API\r\n-\t\t\t\tdataSend.args.paged++;\r\n-\t\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\t\t\t\tconst callBack = {\r\n-\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\tconst { status, message, data } = response;\r\n-\r\n-\t\t\t\t\t\tconst newEl = document.createElement( 'div' );\r\n-\t\t\t\t\t\tnewEl.innerHTML = data.content || '';\r\n-\t\t\t\t\t\tconst elListCourse = elLPTarget.querySelector( classListCourse );\r\n-\t\t\t\t\t\tconst elPageResult = elLPTarget.querySelector( classPageResult );\r\n-\t\t\t\t\t\tconst elPageResultNew = newEl.querySelector( classPageResult );\r\n-\r\n-\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', newEl.querySelector( classListCourse ).innerHTML );\r\n-\t\t\t\t\t\tif ( elPageResult && elPageResultNew ) {\r\n-\t\t\t\t\t\t\telPageResult.innerHTML = elPageResultNew.innerHTML;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( data.total_pages === data.paged ) {\r\n-\t\t\t\t\t\t\telInfinite.remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\t\telLoading.classList.add( 'hide' );\r\n-\t\t\t\t\t\telLoading.classList.remove( 'disabled' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t};\r\n-\r\n-\t\t\t\u002F\u002F Listen el courses load infinite have just created.\r\n-\t\t\tlistenElementCreated( ( node ) => {\r\n-\t\t\t\tif ( node.classList.contains( 'courses-load-infinite-no-css' ) ) {\r\n-\t\t\t\t\tlistenElementViewed( node, callBackAfterSeeItem );\r\n-\t\t\t\t} else if ( node.classList.contains( 'wp-block-learnpress-list-courses' ) ) { \u002F\u002F For block Gutenberg\r\n-\t\t\t\t\tconst elInfinite = node.querySelector( '.courses-load-infinite-no-css' );\r\n-\t\t\t\t\tif ( elInfinite ) {\r\n-\t\t\t\t\t\tlistenElementViewed( elInfinite, callBackAfterSeeItem );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\r\n-\t\t\t\u002F\u002F If el created on DOMContentLoaded.\r\n-\t\t\tconst elInfinite = document.querySelector( '.courses-load-infinite-no-css' );\r\n-\t\t\tif ( elInfinite ) {\r\n-\t\t\t\tlistenElementViewed( elInfinite, callBackAfterSeeItem );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tonChangeSortBy: ( e, target ) => {\r\n-\t\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elLPTarget = target.closest( classLPTarget );\r\n-\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\tlpData.urlParams.paged = 1;\r\n-\t\t\t\tlpData.urlParams.order_by = target.value || '';\r\n-\t\t\t\twindow.location.href = lpAddQueryArgs( urlCurrent, lpData.urlParams );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\r\n-\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\tconst dataSend = { ...dataObj };\r\n-\t\t\tdataSend.args.paged = 1;\r\n-\t\t\tdataSend.args.order_by = target.value || '';\r\n-\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\r\n-\t\t\t\u002F\u002F Set url params to reload page.\r\n-\t\t\t\u002F\u002F Todo: need check allow set url params.\r\n-\t\t\tlpData.urlParams.paged = dataSend.args.paged;\r\n-\t\t\tlpData.urlParams.order_by = dataSend.args.order_by;\r\n-\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( urlCurrent, lpData.urlParams ) );\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t\u002F\u002F Show loading\r\n-\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\r\n-\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t},\r\n-\t\tonChangeTypeLayout: ( e, target ) => {\r\n-\t\t\tif ( 'lp-switch-layout-btn' !== target.getAttribute( 'name' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elListCourse = document.querySelector( classListCourse );\r\n-\t\t\tif ( ! elListCourse ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst layout = target.value;\r\n-\t\t\tif ( layout ) {\r\n-\t\t\t\telListCourse.dataset.layout = layout;\r\n-\t\t\t\twindow.wpCookies.set( 'courses-layout', layout, 24 * 60 * 60, '\u002F' );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tsearchCourse: ( e, target ) => {\r\n-\t\t\tif ( 'c_search' !== target.name ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elLPTarget = target.closest( classLPTarget );\r\n-\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\tconst dataSend = { ...dataObj };\r\n-\r\n-\t\t\tconst keyword = target.value;\r\n-\t\t\tdataSend.args.c_search = keyword || '';\r\n-\t\t\tdataSend.args.paged = 1;\r\n-\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\r\n-\t\t\t\u002F\u002F Set url params to reload page.\r\n-\t\t\t\u002F\u002F Todo: need check allow set url params.\r\n-\t\t\tlpData.urlParams.paged = dataSend.args.paged;\r\n-\t\t\tlpData.urlParams.c_search = dataSend.args.c_search;\r\n-\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( lpGetCurrentURLNoParam(), lpData.urlParams ) );\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\r\n-\t\t\t\tif ( undefined !== timeOutSearch ) {\r\n-\t\t\t\t\tclearTimeout( timeOutSearch );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\ttimeOutSearch = setTimeout( function() {\r\n-\t\t\t\t\tconst callBack = {\r\n-\t\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\r\n-\t\t\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t}, 800 );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t};\r\n-} )();\r\n-window.lpCoursesList.LoadInfinite();\r\n+\u002F**\n+ * Handle events for courses list.\n+ *\n+ * @since 4.2.5.8\n+ * @version 1.0.1\n+ *\u002F\n+\n+import API from '..\u002Fapi';\n+import {\n+\tlpAddQueryArgs,\n+\tlpGetCurrentURLNoParam,\n+\tlistenElementViewed,\n+\tlistenElementCreated,\n+\tlpOnElementReady,\n+} from '..\u002Futils.js';\n+\n+if ( 'undefined' === typeof lpData ) {\n+\tconsole.log( 'lpData is undefined' );\n+}\n+\n+\u002F\u002F Events\n+document.addEventListener( 'change', function( e ) {\n+\tconst target = e.target;\n+\n+\twindow.lpCoursesList.onChangeSortBy( e, target );\n+\twindow.lpCoursesList.onChangeTypeLayout( e, target );\n+} );\n+document.addEventListener( 'click', function( e ) {\n+\tconst target = e.target;\n+\n+\twindow.lpCoursesList.LoadMore( e, target );\n+} );\n+\n+document.addEventListener( 'keyup', function( e ) {\n+\tconst target = e.target;\n+\n+\twindow.lpCoursesList.searchCourse( e, target );\n+} );\n+document.addEventListener( 'submit', function( e ) {\n+\tconst target = e.target;\n+\n+\t\u002F\u002Fwindow.lpCourseList.searchCourse( e, target );\n+} );\n+\n+lpOnElementReady( '.course-filter-btn-mobile', function( el ) {\n+\tconst widgetCourseFilter = document.querySelector( '.widget_course_filter' );\n+\tif ( ! widgetCourseFilter ) {\n+\t\tel.remove();\n+\t}\n+} );\n+\n+let timeOutSearch;\n+window.lpCoursesList = ( () => {\n+\tconst classListCourse = '.lp-list-courses-no-css';\n+\tconst classLPTarget = '.lp-target';\n+\tconst classLoadMore = 'courses-btn-load-more-no-css';\n+\tconst classPageResult = '.courses-page-result';\n+\tconst classLoading = '.lp-loading-no-css';\n+\tconst urlCurrent = lpGetCurrentURLNoParam();\n+\treturn {\n+\t\tLoadMore: ( e, target ) => {\n+\t\t\tconst btnLoadMore = target.closest( `.${ classLoadMore + ':not(.disabled)' }` );\n+\t\t\tif ( ! btnLoadMore ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elLPTarget = btnLoadMore.closest( `${ classLPTarget }` );\n+\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\t\t\tbtnLoadMore.classList.add( 'disabled' );\n+\n+\t\t\tconst elLoading = btnLoadMore.querySelector( classLoading );\n+\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\tconst dataSend = { ...dataObj };\n+\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\n+\t\t\t\tdataSend.args.paged = 1;\n+\t\t\t}\n+\n+\t\t\tdataSend.args.paged++;\n+\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\t\t\tif ( elLoading ) {\n+\t\t\t\telLoading.classList.remove( 'hide' );\n+\t\t\t}\n+\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\tconst paged = parseInt( data.paged );\n+\t\t\t\t\tconst totalPages = parseInt( data.total_pages );\n+\n+\t\t\t\t\tconst newEl = document.createElement( 'div' );\n+\t\t\t\t\tnewEl.innerHTML = data.content || '';\n+\t\t\t\t\tconst elListCourse = elLPTarget.querySelector( classListCourse );\n+\t\t\t\t\tconst elPageResult = elLPTarget.querySelector( classPageResult );\n+\t\t\t\t\tconst elPageResultNew = newEl.querySelector( classPageResult );\n+\n+\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', newEl.querySelector( classListCourse ).innerHTML );\n+\t\t\t\t\tif ( elPageResult && elPageResultNew ) {\n+\t\t\t\t\t\telPageResult.innerHTML = elPageResultNew.innerHTML;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( paged >= totalPages ) {\n+\t\t\t\t\t\tbtnLoadMore.remove();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\tif ( elLoading ) {\n+\t\t\t\t\t\telLoading.classList.add( 'hide' );\n+\t\t\t\t\t}\n+\t\t\t\t\tbtnLoadMore.classList.remove( 'disabled' );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t},\n+\t\tLoadInfinite: () => {\n+\t\t\t\u002F\u002F When see element, will call API to load more items.\n+\t\t\tconst callBackAfterSeeItem = ( entry ) => {\n+\t\t\t\tconst elInfinite = entry.target;\n+\t\t\t\tconst elLoading = elInfinite.querySelector( `${ classLoading }:not(.disabled)` );\n+\t\t\t\tif ( ! elLoading ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t\telLoading.classList.remove( 'hide' );\n+\t\t\t\telLoading.classList.add( 'disabled' );\n+\n+\t\t\t\tconst elLPTarget = elInfinite.closest( classLPTarget );\n+\t\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\t\tconst dataSend = { ...dataObj }; \u002F\u002F Clone object\n+\n+\t\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\n+\t\t\t\t\tdataSend.args.paged = 1;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Handle set data send to call API\n+\t\t\t\tdataSend.args.paged++;\n+\t\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\t\t\t\tconst callBack = {\n+\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\tconst { status, message, data } = response;\n+\n+\t\t\t\t\t\tconst newEl = document.createElement( 'div' );\n+\t\t\t\t\t\tnewEl.innerHTML = data.content || '';\n+\t\t\t\t\t\tconst elListCourse = elLPTarget.querySelector( classListCourse );\n+\t\t\t\t\t\tconst elPageResult = elLPTarget.querySelector( classPageResult );\n+\t\t\t\t\t\tconst elPageResultNew = newEl.querySelector( classPageResult );\n+\n+\t\t\t\t\t\telListCourse.insertAdjacentHTML( 'beforeend', newEl.querySelector( classListCourse ).innerHTML );\n+\t\t\t\t\t\tif ( elPageResult && elPageResultNew ) {\n+\t\t\t\t\t\t\telPageResult.innerHTML = elPageResultNew.innerHTML;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( data.total_pages === data.paged ) {\n+\t\t\t\t\t\t\telInfinite.remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\tconsole.log( error );\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\t\telLoading.classList.add( 'hide' );\n+\t\t\t\t\t\telLoading.classList.remove( 'disabled' );\n+\t\t\t\t\t},\n+\t\t\t\t};\n+\n+\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t};\n+\n+\t\t\t\u002F\u002F Listen el courses load infinite have just created.\n+\t\t\tlistenElementCreated( ( node ) => {\n+\t\t\t\tif ( node.classList.contains( 'courses-load-infinite-no-css' ) ) {\n+\t\t\t\t\tlistenElementViewed( node, callBackAfterSeeItem );\n+\t\t\t\t} else if ( node.classList.contains( 'wp-block-learnpress-list-courses' ) ) { \u002F\u002F For block Gutenberg\n+\t\t\t\t\tconst elInfinite = node.querySelector( '.courses-load-infinite-no-css' );\n+\t\t\t\t\tif ( elInfinite ) {\n+\t\t\t\t\t\tlistenElementViewed( elInfinite, callBackAfterSeeItem );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} );\n+\n+\t\t\t\u002F\u002F If el created on DOMContentLoaded.\n+\t\t\tconst elInfinite = document.querySelector( '.courses-load-infinite-no-css' );\n+\t\t\tif ( elInfinite ) {\n+\t\t\t\tlistenElementViewed( elInfinite, callBackAfterSeeItem );\n+\t\t\t}\n+\t\t},\n+\t\tonChangeSortBy: ( e, target ) => {\n+\t\t\tif ( ! target.classList.contains( 'courses-order-by' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elLPTarget = target.closest( classLPTarget );\n+\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\tlpData.urlParams.paged = 1;\n+\t\t\t\tlpData.urlParams.order_by = target.value || '';\n+\t\t\t\twindow.location.href = lpAddQueryArgs( urlCurrent, lpData.urlParams );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\n+\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\tconst dataSend = { ...dataObj };\n+\t\t\tdataSend.args.paged = 1;\n+\t\t\tdataSend.args.order_by = target.value || '';\n+\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\n+\t\t\t\u002F\u002F Set url params to reload page.\n+\t\t\t\u002F\u002F Todo: need check allow set url params.\n+\t\t\tlpData.urlParams.paged = dataSend.args.paged;\n+\t\t\tlpData.urlParams.order_by = dataSend.args.order_by;\n+\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( urlCurrent, lpData.urlParams ) );\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t\u002F\u002F Show loading\n+\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\n+\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t},\n+\t\tonChangeTypeLayout: ( e, target ) => {\n+\t\t\tif ( 'lp-switch-layout-btn' !== target.getAttribute( 'name' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elListCourse = document.querySelector( classListCourse );\n+\t\t\tif ( ! elListCourse ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\te.preventDefault();\n+\t\t\tconst layout = target.value;\n+\t\t\tif ( layout ) {\n+\t\t\t\telListCourse.dataset.layout = layout;\n+\t\t\t\twindow.wpCookies.set( 'courses-layout', layout, 24 * 60 * 60, '\u002F' );\n+\t\t\t}\n+\t\t},\n+\t\tsearchCourse: ( e, target ) => {\n+\t\t\tif ( 'c_search' !== target.name ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elLPTarget = target.closest( classLPTarget );\n+\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\tconst dataSend = { ...dataObj };\n+\n+\t\t\tconst keyword = target.value;\n+\t\t\tdataSend.args.c_search = keyword || '';\n+\t\t\tdataSend.args.paged = 1;\n+\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\n+\t\t\t\u002F\u002F Set url params to reload page.\n+\t\t\t\u002F\u002F Todo: need check allow set url params.\n+\t\t\tlpData.urlParams.paged = dataSend.args.paged;\n+\t\t\tlpData.urlParams.c_search = dataSend.args.c_search;\n+\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( lpGetCurrentURLNoParam(), lpData.urlParams ) );\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\tif ( ! keyword || ( keyword && keyword.length > 2 ) ) {\n+\t\t\t\tif ( undefined !== timeOutSearch ) {\n+\t\t\t\t\tclearTimeout( timeOutSearch );\n+\t\t\t\t}\n+\n+\t\t\t\ttimeOutSearch = setTimeout( function() {\n+\t\t\t\t\tconst callBack = {\n+\t\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\n+\t\t\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\t\tconsole.log( error );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t};\n+\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t}, 800 );\n+\t\t\t}\n+\t\t},\n+\t};\n+} )();\n+window.lpCoursesList.LoadInfinite();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcurriculum.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcurriculum.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcurriculum.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcurriculum.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,202 +1,202 @@\n-\u002F**\r\n- * Handle curriculum\r\n- *\r\n- * @version 1.0.1\r\n- * @since 4.2.7.6\r\n- *\u002F\r\n-\r\n-import { lpShowHideEl, lpOnElementReady } from '..\u002Futils.js';\r\n-\r\n-\u002F\u002F Events\r\n-\u002F**\r\n- * 1. Handle click section header\r\n- *\u002F\r\n-document.addEventListener( 'click', ( e ) => {\r\n-\tconst target = e.target;\r\n-\r\n-\tconst elSectionHeader = target.closest( '.course-section-header' );\r\n-\tif ( elSectionHeader ) {\r\n-\t\tconst elSection = elSectionHeader.closest( '.course-section' );\r\n-\t\tif ( ! elSection ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\te.preventDefault();\r\n-\t\ttoggleSection( elSection );\r\n-\t}\r\n-\r\n-\tif ( target.classList.contains( 'course-toggle-all-sections' ) ) {\r\n-\t\te.preventDefault();\r\n-\t\ttoggleSectionAll( target );\r\n-\t}\r\n-} );\r\n-\r\n-\u002F**\r\n- * 1. Handle search title course\r\n- *\u002F\r\n-document.addEventListener( 'keyup', ( e ) => {\r\n-\tconst target = e.target;\r\n-\r\n-\t\u002F\u002F code compare html with name = search\r\n-\tif ( target.name === 's' && target.closest( 'form.search-course' ) ) {\r\n-\t\tconst value = target.value;\r\n-\t\tsearchItemCourse( value );\r\n-\t}\r\n-} );\r\n-\r\n-\u002F**\r\n- * 1. Handle submit form search\r\n- *\u002F\r\n-document.addEventListener( 'submit', ( e ) => {\r\n-\tconst target = e.target;\r\n-\r\n-\t\u002F\u002F Stop enter form search\r\n-\tif ( target.closest( 'form.search-course' ) ) {\r\n-\t\te.preventDefault();\r\n-\t}\r\n-} );\r\n-\u002F\u002F End events\r\n-\r\n-const toggleSectionAll = ( elToggleAllSections ) => {\r\n-\tconst elCurriculum = elToggleAllSections.closest( '.lp-course-curriculum' );\r\n-\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\r\n-\tconst elExpand = elCurriculum.querySelector( '.course-toggle-all-sections' );\r\n-\tconst elCollapse = elCurriculum.querySelector( '.course-toggle-all-sections.lp-collapse' );\r\n-\r\n-\tif ( elToggleAllSections.classList.contains( 'lp-collapse' ) ) {\r\n-\t\tlpShowHideEl( elExpand, 1 );\r\n-\t\tlpShowHideEl( elCollapse, 0 );\r\n-\r\n-\t\telSections.forEach( ( el ) => {\r\n-\t\t\tif ( ! el.classList.contains( 'lp-collapse' ) ) {\r\n-\t\t\t\tel.classList.add( 'lp-collapse' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} else {\r\n-\t\telSections.forEach( ( el ) => {\r\n-\t\t\tlpShowHideEl( elExpand, 0 );\r\n-\t\t\tlpShowHideEl( elCollapse, 1 );\r\n-\r\n-\t\t\tif ( el.classList.contains( 'lp-collapse' ) ) {\r\n-\t\t\t\tel.classList.remove( 'lp-collapse' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-};\r\n-\r\n-const toggleSection = ( elSection ) => {\r\n-\tconst elCurriculum = elSection.closest( '.lp-course-curriculum' );\r\n-\r\n-\t\u002F\u002F Toggle section\r\n-\telSection.classList.toggle( 'lp-collapse' );\r\n-\r\n-\t\u002F\u002F Check all sections collapsed\r\n-\tcheckAllSectionsCollapsed( elCurriculum );\r\n-};\r\n-\r\n-const checkAllSectionsCollapsed = ( elCurriculum ) => {\r\n-\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\r\n-\tconst elExpand = elCurriculum.querySelector( '.course-toggle-all-sections' );\r\n-\tconst elCollapse = elCurriculum.querySelector( '.course-toggle-all-sections.lp-collapse' );\r\n-\r\n-\tlet isAllCollapsed = false;\r\n-\telSections.forEach( ( el ) => {\r\n-\t\tif ( el.classList.contains( 'lp-collapse' ) ) {\r\n-\t\t\tisAllCollapsed = true;\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tif ( isAllCollapsed ) {\r\n-\t\tlpShowHideEl( elExpand, 1 );\r\n-\t\tlpShowHideEl( elCollapse, 0 );\r\n-\t} else {\r\n-\t\tlpShowHideEl( elExpand, 0 );\r\n-\t\tlpShowHideEl( elCollapse, 1 );\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F Search title item of course by text\r\n-const searchItemCourse = ( text ) => {\r\n-\tconst elCurriculum = document.querySelector( '.lp-course-curriculum' );\r\n-\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\r\n-\r\n-\telSections.forEach( ( elSection ) => {\r\n-\t\tlet found = false;\r\n-\r\n-\t\telSection.querySelectorAll( '.course-item' ).forEach( ( elItem ) => {\r\n-\t\t\tconst elSection = elItem.closest( '.course-section' );\r\n-\t\t\tconst titleItem = elItem.querySelector( '.course-item-title' ).textContent;\r\n-\r\n-\t\t\tif ( ! searchText( titleItem, text ) ) {\r\n-\t\t\t\tlpShowHideEl( elItem, 0 );\r\n-\t\t\t\telItem.classList.add( 'lp-hide' );\r\n-\t\t\t} else {\r\n-\t\t\t\tfound = true;\r\n-\t\t\t\tlpShowHideEl( elItem, 1 );\r\n-\t\t\t\telSection.classList.remove( 'lp-collapse' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\r\n-\t\tif ( ! found ) {\r\n-\t\t\tlpShowHideEl( elSection, 0 );\r\n-\t\t} else {\r\n-\t\t\tlpShowHideEl( elSection, 1 );\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-const normalizeVietnamese = ( str ) => {\r\n-\treturn str.normalize( 'NFD' ).replace( \u002F[\\u0300-\\u036f]\u002Fg, '' );\r\n-};\r\n-\r\n-\u002F**\r\n- * Search string on text\r\n- * Logic:\r\n- * User enter text: \"11 lesson\"\r\n- * JS will search string has word \"lesson\" and \"11\"\r\n- * Result: \"Lesson 11: Introduction\"\r\n- * Result: \"11 lesson: Introduction\"\r\n- *\r\n- * @param text\r\n- * @param searchTerm\r\n- *\u002F\r\n-const searchText = ( text, searchTerm ) => {\r\n-\tconst normalizedText = normalizeVietnamese( text.toLowerCase() );\r\n-\tconst searchTermArr = searchTerm.trim().split( ' ' );\r\n-\tconst length = searchTermArr.length;\r\n-\r\n-\tlet found = 0;\r\n-\tsearchTermArr.forEach( ( term ) => {\r\n-\t\tconst normalizedSearchTerm = normalizeVietnamese( term.toLowerCase() );\r\n-\t\tconst regex = new RegExp( normalizedSearchTerm, 'gi' );\r\n-\t\tif ( regex.test( normalizedText ) ) {\r\n-\t\t\tfound++;\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\treturn found === length;\r\n-};\r\n-\r\n-\u002F\u002F Scroll to item viewing\r\n-const scrollToItemViewing = ( elCurriculum ) => {\r\n-\tconst elItemCurrent = elCurriculum.querySelector( 'li.current' );\r\n-\tif ( ! elItemCurrent ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\telItemCurrent.scrollIntoView( {\r\n-\t\tbehavior: 'smooth',\r\n-\t} );\r\n-};\r\n-\r\n-lpOnElementReady( '.lp-course-curriculum', ( elCurriculum ) => {\r\n-\tcheckAllSectionsCollapsed( elCurriculum );\r\n-\r\n-\t\u002F\u002F Set interval to check if item viewing is changed\r\n-\tconst interval = setInterval( () => {\r\n-\t\tif ( document.readyState === 'complete' ) {\r\n-\t\t\tclearInterval( interval );\r\n-\t\t\tscrollToItemViewing( elCurriculum );\r\n-\t\t}\r\n-\t}, 300 );\r\n-} );\r\n+\u002F**\n+ * Handle curriculum\n+ *\n+ * @version 1.0.1\n+ * @since 4.2.7.6\n+ *\u002F\n+\n+import { lpShowHideEl, lpOnElementReady } from '..\u002Futils.js';\n+\n+\u002F\u002F Events\n+\u002F**\n+ * 1. Handle click section header\n+ *\u002F\n+document.addEventListener( 'click', ( e ) => {\n+\tconst target = e.target;\n+\n+\tconst elSectionHeader = target.closest( '.course-section-header' );\n+\tif ( elSectionHeader ) {\n+\t\tconst elSection = elSectionHeader.closest( '.course-section' );\n+\t\tif ( ! elSection ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\te.preventDefault();\n+\t\ttoggleSection( elSection );\n+\t}\n+\n+\tif ( target.classList.contains( 'course-toggle-all-sections' ) ) {\n+\t\te.preventDefault();\n+\t\ttoggleSectionAll( target );\n+\t}\n+} );\n+\n+\u002F**\n+ * 1. Handle search title course\n+ *\u002F\n+document.addEventListener( 'keyup', ( e ) => {\n+\tconst target = e.target;\n+\n+\t\u002F\u002F code compare html with name = search\n+\tif ( target.name === 's' && target.closest( 'form.search-course' ) ) {\n+\t\tconst value = target.value;\n+\t\tsearchItemCourse( value );\n+\t}\n+} );\n+\n+\u002F**\n+ * 1. Handle submit form search\n+ *\u002F\n+document.addEventListener( 'submit', ( e ) => {\n+\tconst target = e.target;\n+\n+\t\u002F\u002F Stop enter form search\n+\tif ( target.closest( 'form.search-course' ) ) {\n+\t\te.preventDefault();\n+\t}\n+} );\n+\u002F\u002F End events\n+\n+const toggleSectionAll = ( elToggleAllSections ) => {\n+\tconst elCurriculum = elToggleAllSections.closest( '.lp-course-curriculum' );\n+\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\n+\tconst elExpand = elCurriculum.querySelector( '.course-toggle-all-sections' );\n+\tconst elCollapse = elCurriculum.querySelector( '.course-toggle-all-sections.lp-collapse' );\n+\n+\tif ( elToggleAllSections.classList.contains( 'lp-collapse' ) ) {\n+\t\tlpShowHideEl( elExpand, 1 );\n+\t\tlpShowHideEl( elCollapse, 0 );\n+\n+\t\telSections.forEach( ( el ) => {\n+\t\t\tif ( ! el.classList.contains( 'lp-collapse' ) ) {\n+\t\t\t\tel.classList.add( 'lp-collapse' );\n+\t\t\t}\n+\t\t} );\n+\t} else {\n+\t\telSections.forEach( ( el ) => {\n+\t\t\tlpShowHideEl( elExpand, 0 );\n+\t\t\tlpShowHideEl( elCollapse, 1 );\n+\n+\t\t\tif ( el.classList.contains( 'lp-collapse' ) ) {\n+\t\t\t\tel.classList.remove( 'lp-collapse' );\n+\t\t\t}\n+\t\t} );\n+\t}\n+};\n+\n+const toggleSection = ( elSection ) => {\n+\tconst elCurriculum = elSection.closest( '.lp-course-curriculum' );\n+\n+\t\u002F\u002F Toggle section\n+\telSection.classList.toggle( 'lp-collapse' );\n+\n+\t\u002F\u002F Check all sections collapsed\n+\tcheckAllSectionsCollapsed( elCurriculum );\n+};\n+\n+const checkAllSectionsCollapsed = ( elCurriculum ) => {\n+\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\n+\tconst elExpand = elCurriculum.querySelector( '.course-toggle-all-sections' );\n+\tconst elCollapse = elCurriculum.querySelector( '.course-toggle-all-sections.lp-collapse' );\n+\n+\tlet isAllCollapsed = false;\n+\telSections.forEach( ( el ) => {\n+\t\tif ( el.classList.contains( 'lp-collapse' ) ) {\n+\t\t\tisAllCollapsed = true;\n+\t\t}\n+\t} );\n+\n+\tif ( isAllCollapsed ) {\n+\t\tlpShowHideEl( elExpand, 1 );\n+\t\tlpShowHideEl( elCollapse, 0 );\n+\t} else {\n+\t\tlpShowHideEl( elExpand, 0 );\n+\t\tlpShowHideEl( elCollapse, 1 );\n+\t}\n+};\n+\n+\u002F\u002F Search title item of course by text\n+const searchItemCourse = ( text ) => {\n+\tconst elCurriculum = document.querySelector( '.lp-course-curriculum' );\n+\tconst elSections = elCurriculum.querySelectorAll( '.course-section' );\n+\n+\telSections.forEach( ( elSection ) => {\n+\t\tlet found = false;\n+\n+\t\telSection.querySelectorAll( '.course-item' ).forEach( ( elItem ) => {\n+\t\t\tconst elSection = elItem.closest( '.course-section' );\n+\t\t\tconst titleItem = elItem.querySelector( '.course-item-title' ).textContent;\n+\n+\t\t\tif ( ! searchText( titleItem, text ) ) {\n+\t\t\t\tlpShowHideEl( elItem, 0 );\n+\t\t\t\telItem.classList.add( 'lp-hide' );\n+\t\t\t} else {\n+\t\t\t\tfound = true;\n+\t\t\t\tlpShowHideEl( elItem, 1 );\n+\t\t\t\telSection.classList.remove( 'lp-collapse' );\n+\t\t\t}\n+\t\t} );\n+\n+\t\tif ( ! found ) {\n+\t\t\tlpShowHideEl( elSection, 0 );\n+\t\t} else {\n+\t\t\tlpShowHideEl( elSection, 1 );\n+\t\t}\n+\t} );\n+};\n+\n+const normalizeVietnamese = ( str ) => {\n+\treturn str.normalize( 'NFD' ).replace( \u002F[\\u0300-\\u036f]\u002Fg, '' );\n+};\n+\n+\u002F**\n+ * Search string on text\n+ * Logic:\n+ * User enter text: \"11 lesson\"\n+ * JS will search string has word \"lesson\" and \"11\"\n+ * Result: \"Lesson 11: Introduction\"\n+ * Result: \"11 lesson: Introduction\"\n+ *\n+ * @param text\n+ * @param searchTerm\n+ *\u002F\n+const searchText = ( text, searchTerm ) => {\n+\tconst normalizedText = normalizeVietnamese( text.toLowerCase() );\n+\tconst searchTermArr = searchTerm.trim().split( ' ' );\n+\tconst length = searchTermArr.length;\n+\n+\tlet found = 0;\n+\tsearchTermArr.forEach( ( term ) => {\n+\t\tconst normalizedSearchTerm = normalizeVietnamese( term.toLowerCase() );\n+\t\tconst regex = new RegExp( normalizedSearchTerm, 'gi' );\n+\t\tif ( regex.test( normalizedText ) ) {\n+\t\t\tfound++;\n+\t\t}\n+\t} );\n+\n+\treturn found === length;\n+};\n+\n+\u002F\u002F Scroll to item viewing\n+const scrollToItemViewing = ( elCurriculum ) => {\n+\tconst elItemCurrent = elCurriculum.querySelector( 'li.current' );\n+\tif ( ! elItemCurrent ) {\n+\t\treturn;\n+\t}\n+\n+\telItemCurrent.scrollIntoView( {\n+\t\tbehavior: 'smooth',\n+\t} );\n+};\n+\n+lpOnElementReady( '.lp-course-curriculum', ( elCurriculum ) => {\n+\tcheckAllSectionsCollapsed( elCurriculum );\n+\n+\t\u002F\u002F Set interval to check if item viewing is changed\n+\tconst interval = setInterval( () => {\n+\t\tif ( document.readyState === 'complete' ) {\n+\t\t\tclearInterval( interval );\n+\t\t\tscrollToItemViewing( elCurriculum );\n+\t\t}\n+\t}, 300 );\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Favatar.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Favatar.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Favatar.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Favatar.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,180 +1,180 @@\n-import 'cropperjs\u002Fdist\u002Fcropper.css';\r\n-import Cropper from 'cropperjs';\r\n-import * as Util from '..\u002F..\u002Futils.js';\r\n-\u002F\u002F import API from '..\u002F..\u002Fapi.js';\r\n-import Toastify from 'toastify-js';\r\n-import 'toastify-js\u002Fsrc\u002Ftoastify.css';\r\n-\r\n-const profileAvatarImage = () => {\r\n-\tconst lpAvatarWrapper = document.querySelector( '#learnpress-avatar-upload' );\r\n-\tif ( ! lpAvatarWrapper ) {\r\n-\t\treturn;\r\n-\t}\r\n-\tlet cropper, avatarPreviewSrc, imgUrlOriginal;\r\n-\tlet avatarForm = lpAvatarWrapper.querySelector( '.lp_avatar__form' );\r\n-\tconst btnRemove = lpAvatarWrapper.querySelector( '.lp-btn-remove-avatar' ),\r\n-\t\tbtnReplace = lpAvatarWrapper.querySelector( '.lp-btn-choose-avatar' ),\r\n-\t\tbtnSave = lpAvatarWrapper.querySelector( '.lp-btn-save-avatar' ),\r\n-\t\tbtnCancel = lpAvatarWrapper.querySelector( '.lp-btn-cancel-avatar' ),\r\n-\t\tavatarPreviewImage = lpAvatarWrapper.querySelector( '.lp-avatar-image' ),\r\n-\t\tavatarInputFile = lpAvatarWrapper.querySelector( '#avatar-file' ),\r\n-\t\tprofileAvatar = document.querySelector( '.wrapper-profile-header .user-avatar img' );\r\n-\tconst avatarRatio = parseFloat( ( lpProfileSettings.avatar_dimensions.width \u002F lpProfileSettings.avatar_dimensions.height ).toFixed( 2 ) );\r\n-\r\n-\tlpAvatarWrapper.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target === btnReplace ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tavatarInputFile.click();\r\n-\t\t} else if ( target === btnSave ) {\r\n-\t\t\tUtil.lpSetLoadingEl( btnSave, 1 );\r\n-\t\t\tbtnSave.disabled = true;\r\n-\t\t\tif ( undefined !== cropper ) {\r\n-\t\t\t\tconst canvas = cropper.getCroppedCanvas( {\r\n-\t\t\t\t\twidth: lpProfileSettings.avatar_dimensions.width,\r\n-\t\t\t\t\theight: lpProfileSettings.avatar_dimensions.height,\r\n-\t\t\t\t} );\r\n-\t\t\t\tconst newCropSrc = canvas.toDataURL( 'image\u002Fpng' );\r\n-\t\t\t\tif ( profileAvatar ) {\r\n-\t\t\t\t\tprofileAvatar.src = newCropSrc;\r\n-\t\t\t\t}\r\n-\t\t\t\tavatarPreviewImage.src = newCropSrc;\r\n-\t\t\t\tconst formData = new FormData();\r\n-\t\t\t\tformData.append( 'file', newCropSrc );\r\n-\t\t\t\tuploadAvatar( formData );\r\n-\t\t\t}\r\n-\t\t} else if ( target === btnCancel ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tcropper.destroy();\r\n-\t\t\tavatarPreviewImage.src = imgUrlOriginal;\r\n-\t\t\tif ( imgUrlOriginal === window.location.href ) {\r\n-\t\t\t\tUtil.lpShowHideEl( avatarForm, 1 );\r\n-\t\t\t\tUtil.lpShowHideEl( btnReplace, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 0 );\r\n-\t\t\t} else {\r\n-\t\t\t\tUtil.lpShowHideEl( btnRemove, 1 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tUtil.lpShowHideEl( btnSave, 0 );\r\n-\t\t\tUtil.lpShowHideEl( btnCancel, 0 );\r\n-\t\t} else if ( target === btnRemove ) {\r\n-\t\t\tbtnRemove.disabled = true;\r\n-\t\t\tUtil.lpSetLoadingEl( btnRemove, 1 );\r\n-\t\t\tremoveAvatar();\r\n-\t\t}\r\n-\t} );\r\n-\tlpAvatarWrapper.addEventListener( 'change', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target === avatarInputFile ) {\r\n-\t\t\tconst file = avatarInputFile.files[ 0 ];\r\n-\t\t\tif ( ! file ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst allowType = [ 'image\u002Fpng', 'image\u002Fjpeg', 'image\u002Fwebp' ];\r\n-\t\t\tif ( allowType.indexOf( file.type ) \u003C 0 ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst reader = new FileReader();\r\n-\t\t\treader.onload = function( e ) {\r\n-\t\t\t\tavatarPreviewImage.src = e.target.result;\r\n-\t\t\t\t\u002F\u002F Destroy previous cropper instance if any\r\n-\t\t\t\tif ( cropper ) {\r\n-\t\t\t\t\tcropper.destroy();\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F Initialize cropper\r\n-\t\t\t\tcropper = new Cropper( avatarPreviewImage, {\r\n-\t\t\t\t\taspectRatio: avatarRatio,\r\n-\t\t\t\t\tviewMode: 1,\r\n-\t\t\t\t\tzoomOnWheel: false,\r\n-\t\t\t\t} );\r\n-\t\t\t};\r\n-\r\n-\t\t\treader.readAsDataURL( file );\r\n-\t\t\tif ( ! avatarPreviewImage.classList.contains( 'lp-hidden' ) ) {\r\n-\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 1 );\r\n-\t\t\t}\r\n-\t\t\tUtil.lpShowHideEl( avatarForm, 0 );\r\n-\t\t\tUtil.lpShowHideEl( btnSave, 1 );\r\n-\t\t\tUtil.lpShowHideEl( btnReplace, 1 );\r\n-\t\t\tUtil.lpShowHideEl( btnCancel, 1 );\r\n-\t\t\tUtil.lpShowHideEl( btnRemove, 0 );\r\n-\t\t}\r\n-\t} );\r\n-\tconst uploadAvatar = ( formData ) => {\r\n-\t\tfetch( `${ lpData.lp_rest_url }lp\u002Fv1\u002Fprofile\u002Fupload-avatar`, {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\theaders: {\r\n-\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t},\r\n-\t\t\tbody: formData,\r\n-\t\t} ) \u002F\u002F wrapped\r\n-\t\t\t.then( ( res ) => res.json() )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tif ( res.status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( res.message );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 1 );\r\n-\t\t\t\tshowMessage( 'success', res.message );\r\n-\t\t\t\tif ( undefined !== cropper ) {\r\n-\t\t\t\t\tcropper.destroy();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\timgUrlOriginal = avatarPreviewImage.src;\r\n-\t\t\t} ).finally( () => {\r\n-\t\t\t\tUtil.lpShowHideEl( btnSave, 0 );\r\n-\t\t\t\tbtnSave.disabled = false;\r\n-\t\t\t\tUtil.lpSetLoadingEl( btnSave, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( btnCancel, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( btnRemove, 1 );\r\n-\t\t\t} ).catch( ( err ) => console.log( err ) );\r\n-\t};\r\n-\tconst removeAvatar = () => {\r\n-\t\tfetch( `${ lpData.lp_rest_url }lp\u002Fv1\u002Fprofile\u002Fremove-avatar`, {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\theaders: {\r\n-\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t},\r\n-\t\t} ) \u002F\u002F wrapped\r\n-\t\t\t.then( ( res ) => res.json() )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tif ( res.status === 'error' ) {\r\n-\t\t\t\t\tthrow new Error( res.message );\r\n-\t\t\t\t}\r\n-\t\t\t\tshowMessage( 'success', res.message );\r\n-\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( avatarForm, 1 );\r\n-\t\t\t\timgUrlOriginal = avatarPreviewSrc = '';\r\n-\t\t\t\tprofileAvatar.src = lpProfileSettings.default_avatar;\r\n-\t\t\t\t\u002F\u002F window.location.href = window.location.href;\r\n-\t\t\t} ).finally( () => {\r\n-\t\t\t\tbtnRemove.disabled = false;\r\n-\t\t\t\tUtil.lpShowHideEl( btnRemove, 0 );\r\n-\t\t\t\tUtil.lpSetLoadingEl( btnRemove, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( btnReplace, 0 );\r\n-\t\t\t} ).catch( ( err ) => console.log( err ) );\r\n-\t};\r\n-\r\n-\tconst showMessage = ( status, message ) => {\r\n-\t\tToastify( {\r\n-\t\t\ttext: message,\r\n-\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\r\n-\t\t\tclose: lpData.toast.close == 1,\r\n-\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\t\t\tduration: lpData.toast.duration,\r\n-\t\t} ).showToast();\r\n-\t};\r\n-\r\n-\tUtil.lpOnElementReady( '.lp-avatar-image', () => {\r\n-\t\timgUrlOriginal = avatarPreviewImage.src;\r\n-\t} );\r\n-\r\n-\tUtil.lpOnElementReady( '#learnpress-avatar-upload', ( e ) => {\r\n-\t\te.scrollIntoView( { behavior: 'smooth', block: 'center' } );\r\n-\t} );\r\n-};\r\n-export default profileAvatarImage;\r\n+import 'cropperjs\u002Fdist\u002Fcropper.css';\n+import Cropper from 'cropperjs';\n+import * as Util from '..\u002F..\u002Futils.js';\n+\u002F\u002F import API from '..\u002F..\u002Fapi.js';\n+import Toastify from 'toastify-js';\n+import 'toastify-js\u002Fsrc\u002Ftoastify.css';\n+\n+const profileAvatarImage = () => {\n+\tconst lpAvatarWrapper = document.querySelector( '#learnpress-avatar-upload' );\n+\tif ( ! lpAvatarWrapper ) {\n+\t\treturn;\n+\t}\n+\tlet cropper, avatarPreviewSrc, imgUrlOriginal;\n+\tlet avatarForm = lpAvatarWrapper.querySelector( '.lp_avatar__form' );\n+\tconst btnRemove = lpAvatarWrapper.querySelector( '.lp-btn-remove-avatar' ),\n+\t\tbtnReplace = lpAvatarWrapper.querySelector( '.lp-btn-choose-avatar' ),\n+\t\tbtnSave = lpAvatarWrapper.querySelector( '.lp-btn-save-avatar' ),\n+\t\tbtnCancel = lpAvatarWrapper.querySelector( '.lp-btn-cancel-avatar' ),\n+\t\tavatarPreviewImage = lpAvatarWrapper.querySelector( '.lp-avatar-image' ),\n+\t\tavatarInputFile = lpAvatarWrapper.querySelector( '#avatar-file' ),\n+\t\tprofileAvatar = document.querySelector( '.wrapper-profile-header .user-avatar img' );\n+\tconst avatarRatio = parseFloat( ( lpProfileSettings.avatar_dimensions.width \u002F lpProfileSettings.avatar_dimensions.height ).toFixed( 2 ) );\n+\n+\tlpAvatarWrapper.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\t\tif ( target === btnReplace ) {\n+\t\t\te.preventDefault();\n+\t\t\tavatarInputFile.click();\n+\t\t} else if ( target === btnSave ) {\n+\t\t\tUtil.lpSetLoadingEl( btnSave, 1 );\n+\t\t\tbtnSave.disabled = true;\n+\t\t\tif ( undefined !== cropper ) {\n+\t\t\t\tconst canvas = cropper.getCroppedCanvas( {\n+\t\t\t\t\twidth: lpProfileSettings.avatar_dimensions.width,\n+\t\t\t\t\theight: lpProfileSettings.avatar_dimensions.height,\n+\t\t\t\t} );\n+\t\t\t\tconst newCropSrc = canvas.toDataURL( 'image\u002Fpng' );\n+\t\t\t\tif ( profileAvatar ) {\n+\t\t\t\t\tprofileAvatar.src = newCropSrc;\n+\t\t\t\t}\n+\t\t\t\tavatarPreviewImage.src = newCropSrc;\n+\t\t\t\tconst formData = new FormData();\n+\t\t\t\tformData.append( 'file', newCropSrc );\n+\t\t\t\tuploadAvatar( formData );\n+\t\t\t}\n+\t\t} else if ( target === btnCancel ) {\n+\t\t\te.preventDefault();\n+\t\t\tcropper.destroy();\n+\t\t\tavatarPreviewImage.src = imgUrlOriginal;\n+\t\t\tif ( imgUrlOriginal === window.location.href ) {\n+\t\t\t\tUtil.lpShowHideEl( avatarForm, 1 );\n+\t\t\t\tUtil.lpShowHideEl( btnReplace, 0 );\n+\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 0 );\n+\t\t\t} else {\n+\t\t\t\tUtil.lpShowHideEl( btnRemove, 1 );\n+\t\t\t}\n+\n+\t\t\tUtil.lpShowHideEl( btnSave, 0 );\n+\t\t\tUtil.lpShowHideEl( btnCancel, 0 );\n+\t\t} else if ( target === btnRemove ) {\n+\t\t\tbtnRemove.disabled = true;\n+\t\t\tUtil.lpSetLoadingEl( btnRemove, 1 );\n+\t\t\tremoveAvatar();\n+\t\t}\n+\t} );\n+\tlpAvatarWrapper.addEventListener( 'change', ( e ) => {\n+\t\tconst target = e.target;\n+\t\tif ( target === avatarInputFile ) {\n+\t\t\tconst file = avatarInputFile.files[ 0 ];\n+\t\t\tif ( ! file ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst allowType = [ 'image\u002Fpng', 'image\u002Fjpeg', 'image\u002Fwebp' ];\n+\t\t\tif ( allowType.indexOf( file.type ) \u003C 0 ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst reader = new FileReader();\n+\t\t\treader.onload = function( e ) {\n+\t\t\t\tavatarPreviewImage.src = e.target.result;\n+\t\t\t\t\u002F\u002F Destroy previous cropper instance if any\n+\t\t\t\tif ( cropper ) {\n+\t\t\t\t\tcropper.destroy();\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F Initialize cropper\n+\t\t\t\tcropper = new Cropper( avatarPreviewImage, {\n+\t\t\t\t\taspectRatio: avatarRatio,\n+\t\t\t\t\tviewMode: 1,\n+\t\t\t\t\tzoomOnWheel: false,\n+\t\t\t\t} );\n+\t\t\t};\n+\n+\t\t\treader.readAsDataURL( file );\n+\t\t\tif ( ! avatarPreviewImage.classList.contains( 'lp-hidden' ) ) {\n+\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 1 );\n+\t\t\t}\n+\t\t\tUtil.lpShowHideEl( avatarForm, 0 );\n+\t\t\tUtil.lpShowHideEl( btnSave, 1 );\n+\t\t\tUtil.lpShowHideEl( btnReplace, 1 );\n+\t\t\tUtil.lpShowHideEl( btnCancel, 1 );\n+\t\t\tUtil.lpShowHideEl( btnRemove, 0 );\n+\t\t}\n+\t} );\n+\tconst uploadAvatar = ( formData ) => {\n+\t\tfetch( `${ lpData.lp_rest_url }lp\u002Fv1\u002Fprofile\u002Fupload-avatar`, {\n+\t\t\tmethod: 'POST',\n+\t\t\theaders: {\n+\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t},\n+\t\t\tbody: formData,\n+\t\t} ) \u002F\u002F wrapped\n+\t\t\t.then( ( res ) => res.json() )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tif ( res.status === 'error' ) {\n+\t\t\t\t\tthrow new Error( res.message );\n+\t\t\t\t}\n+\n+\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 1 );\n+\t\t\t\tshowMessage( 'success', res.message );\n+\t\t\t\tif ( undefined !== cropper ) {\n+\t\t\t\t\tcropper.destroy();\n+\t\t\t\t}\n+\n+\t\t\t\timgUrlOriginal = avatarPreviewImage.src;\n+\t\t\t} ).finally( () => {\n+\t\t\t\tUtil.lpShowHideEl( btnSave, 0 );\n+\t\t\t\tbtnSave.disabled = false;\n+\t\t\t\tUtil.lpSetLoadingEl( btnSave, 0 );\n+\t\t\t\tUtil.lpShowHideEl( btnCancel, 0 );\n+\t\t\t\tUtil.lpShowHideEl( btnRemove, 1 );\n+\t\t\t} ).catch( ( err ) => console.log( err ) );\n+\t};\n+\tconst removeAvatar = () => {\n+\t\tfetch( `${ lpData.lp_rest_url }lp\u002Fv1\u002Fprofile\u002Fremove-avatar`, {\n+\t\t\tmethod: 'POST',\n+\t\t\theaders: {\n+\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t},\n+\t\t} ) \u002F\u002F wrapped\n+\t\t\t.then( ( res ) => res.json() )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tif ( res.status === 'error' ) {\n+\t\t\t\t\tthrow new Error( res.message );\n+\t\t\t\t}\n+\t\t\t\tshowMessage( 'success', res.message );\n+\t\t\t\tUtil.lpShowHideEl( avatarPreviewImage, 0 );\n+\t\t\t\tUtil.lpShowHideEl( avatarForm, 1 );\n+\t\t\t\timgUrlOriginal = avatarPreviewSrc = '';\n+\t\t\t\tprofileAvatar.src = lpProfileSettings.default_avatar;\n+\t\t\t\t\u002F\u002F window.location.href = window.location.href;\n+\t\t\t} ).finally( () => {\n+\t\t\t\tbtnRemove.disabled = false;\n+\t\t\t\tUtil.lpShowHideEl( btnRemove, 0 );\n+\t\t\t\tUtil.lpSetLoadingEl( btnRemove, 0 );\n+\t\t\t\tUtil.lpShowHideEl( btnReplace, 0 );\n+\t\t\t} ).catch( ( err ) => console.log( err ) );\n+\t};\n+\n+\tconst showMessage = ( status, message ) => {\n+\t\tToastify( {\n+\t\t\ttext: message,\n+\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\n+\t\t\tclose: lpData.toast.close == 1,\n+\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\t\t\tduration: lpData.toast.duration,\n+\t\t} ).showToast();\n+\t};\n+\n+\tUtil.lpOnElementReady( '.lp-avatar-image', () => {\n+\t\timgUrlOriginal = avatarPreviewImage.src;\n+\t} );\n+\n+\tUtil.lpOnElementReady( '#learnpress-avatar-upload', ( e ) => {\n+\t\te.scrollIntoView( { behavior: 'smooth', block: 'center' } );\n+\t} );\n+};\n+export default profileAvatarImage;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcourse-tab.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcourse-tab.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcourse-tab.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcourse-tab.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,142 +1,142 @@\n-import { lpAddQueryArgs, lpFetchAPI } from '..\u002F..\u002Futils.js';\r\n-\r\n-\u002F\u002F Rest API load content course enrolled, created - Nhamdv.\r\n-const courseTab = () => {\r\n-\tconst elements = document.querySelectorAll( '.learn-press-course-tab__filter__content' );\r\n-\r\n-\tconst getResponse = ( ele, dataset, append = false, viewMoreEle = false ) => {\r\n-\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Fprofile\u002Fcourse-tab';\r\n-\t\turl = lpAddQueryArgs( url, dataset );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst skeleton = ele.querySelector( '.lp-skeleton-animation' );\r\n-\t\t\t\tskeleton && skeleton.remove();\r\n-\r\n-\t\t\t\tif ( response.status === 'success' && response.data ) {\r\n-\t\t\t\t\tif ( append ) {\r\n-\t\t\t\t\t\tele.innerHTML += response.data;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tele.innerHTML = response.data;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else if ( append ) {\r\n-\t\t\t\t\tele.innerHTML += `\u003Cdiv class=\"lp-ajax-message\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tele.innerHTML = `\u003Cdiv class=\"lp-ajax-message\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( viewMoreEle ) {\r\n-\t\t\t\t\tviewMoreEle.classList.remove( 'loading' );\r\n-\r\n-\t\t\t\t\tconst paged = parseInt( viewMoreEle.dataset.paged );\r\n-\t\t\t\t\tconst numberPage = parseInt( viewMoreEle.dataset.number );\r\n-\r\n-\t\t\t\t\tif ( numberPage \u003C= paged ) {\r\n-\t\t\t\t\t\tviewMoreEle.remove();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tviewMoreEle.dataset.paged = paged + 1;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tviewMore( ele, dataset );\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tlet paramsFetch = {};\r\n-\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch = {\r\n-\t\t\t\theaders: {\r\n-\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tlpFetchAPI( url, paramsFetch, callBack );\r\n-\t};\r\n-\r\n-\tif ( 'IntersectionObserver' in window ) {\r\n-\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\r\n-\t\t\tentries.forEach( ( entry ) => {\r\n-\t\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\t\tconst ele = entry.target;\r\n-\r\n-\t\t\t\t\tconst params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );\r\n-\t\t\t\t\tconst data = { ...JSON.parse( params.value ), status: ele.dataset.tab || '' };\r\n-\r\n-\t\t\t\t\tgetResponse( ele, data );\r\n-\r\n-\t\t\t\t\teleObserver.unobserve( ele );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\r\n-\t\t[ ...elements ].map( ( ele ) => {\r\n-\t\t\tif ( ele.dataset.tab !== 'all' ) {\r\n-\t\t\t\teleObserver.observe( ele );\r\n-\t\t\t} else {\r\n-\t\t\t\tconst params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );\r\n-\t\t\t\tconst data = { ...JSON.parse( params.value ), status: ele.dataset.tab === 'all' ? '' : ele.dataset.tab || '' };\r\n-\r\n-\t\t\t\tgetResponse( ele, data );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\tconst changeFilter = () => {\r\n-\t\tconst tabs = document.querySelectorAll( '.learn-press-course-tab-filters' );\r\n-\r\n-\t\ttabs.forEach( ( tab ) => {\r\n-\t\t\tconst filters = tab.querySelectorAll( '.learn-press-filters a' );\r\n-\r\n-\t\t\tfilters.forEach( ( filter ) => {\r\n-\t\t\t\tfilter.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\t\tconst tabName = filter.dataset.tab;\r\n-\r\n-\t\t\t\t\t[ ...filters ].map( ( ele ) => {\r\n-\t\t\t\t\t\tele.classList.remove( 'active' );\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tfilter.classList.add( 'active' );\r\n-\r\n-\t\t\t\t\t[ ...tab.querySelectorAll( '.learn-press-course-tab__filter__content' ) ].map( ( ele ) => {\r\n-\t\t\t\t\t\tele.style.display = 'none';\r\n-\r\n-\t\t\t\t\t\tif ( ele.dataset.tab === tabName ) {\r\n-\t\t\t\t\t\t\tele.style.display = '';\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t} );\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\tchangeFilter();\r\n-\r\n-\tconst viewMore = ( ele, dataset ) => {\r\n-\t\tconst viewMoreEle = ele.querySelector( 'button[data-paged]' );\r\n-\r\n-\t\tif ( viewMoreEle ) {\r\n-\t\t\tviewMoreEle.addEventListener( 'click', ( e ) => {\r\n-\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\tconst paged = viewMoreEle && viewMoreEle.dataset.paged;\r\n-\r\n-\t\t\t\tviewMoreEle.classList.add( 'loading' );\r\n-\r\n-\t\t\t\tconst element = dataset.layout === 'list' ? '.lp_profile_course_progress' : '.learn-press-courses';\r\n-\r\n-\t\t\t\tgetResponse( ele.querySelector( element ), { ...dataset, ...{ paged } }, true, viewMoreEle );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\t};\r\n-};\r\n-export default courseTab;\r\n+import { lpAddQueryArgs, lpFetchAPI } from '..\u002F..\u002Futils.js';\n+\n+\u002F\u002F Rest API load content course enrolled, created - Nhamdv.\n+const courseTab = () => {\n+\tconst elements = document.querySelectorAll( '.learn-press-course-tab__filter__content' );\n+\n+\tconst getResponse = ( ele, dataset, append = false, viewMoreEle = false ) => {\n+\t\tlet url = lpData.lp_rest_url + 'lp\u002Fv1\u002Fprofile\u002Fcourse-tab';\n+\t\turl = lpAddQueryArgs( url, dataset );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst skeleton = ele.querySelector( '.lp-skeleton-animation' );\n+\t\t\t\tskeleton && skeleton.remove();\n+\n+\t\t\t\tif ( response.status === 'success' && response.data ) {\n+\t\t\t\t\tif ( append ) {\n+\t\t\t\t\t\tele.innerHTML += response.data;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tele.innerHTML = response.data;\n+\t\t\t\t\t}\n+\t\t\t\t} else if ( append ) {\n+\t\t\t\t\tele.innerHTML += `\u003Cdiv class=\"lp-ajax-message\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\n+\t\t\t\t} else {\n+\t\t\t\t\tele.innerHTML = `\u003Cdiv class=\"lp-ajax-message\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( viewMoreEle ) {\n+\t\t\t\t\tviewMoreEle.classList.remove( 'loading' );\n+\n+\t\t\t\t\tconst paged = parseInt( viewMoreEle.dataset.paged );\n+\t\t\t\t\tconst numberPage = parseInt( viewMoreEle.dataset.number );\n+\n+\t\t\t\t\tif ( numberPage \u003C= paged ) {\n+\t\t\t\t\t\tviewMoreEle.remove();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tviewMoreEle.dataset.paged = paged + 1;\n+\t\t\t\t}\n+\n+\t\t\t\tviewMore( ele, dataset );\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tconsole.log( error );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t};\n+\n+\t\tlet paramsFetch = {};\n+\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch = {\n+\t\t\t\theaders: {\n+\t\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t\t},\n+\t\t\t};\n+\t\t}\n+\n+\t\tlpFetchAPI( url, paramsFetch, callBack );\n+\t};\n+\n+\tif ( 'IntersectionObserver' in window ) {\n+\t\tconst eleObserver = new IntersectionObserver( ( entries, observer ) => {\n+\t\t\tentries.forEach( ( entry ) => {\n+\t\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\t\tconst ele = entry.target;\n+\n+\t\t\t\t\tconst params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );\n+\t\t\t\t\tconst data = { ...JSON.parse( params.value ), status: ele.dataset.tab || '' };\n+\n+\t\t\t\t\tgetResponse( ele, data );\n+\n+\t\t\t\t\teleObserver.unobserve( ele );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t} );\n+\n+\t\t[ ...elements ].map( ( ele ) => {\n+\t\t\tif ( ele.dataset.tab !== 'all' ) {\n+\t\t\t\teleObserver.observe( ele );\n+\t\t\t} else {\n+\t\t\t\tconst params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );\n+\t\t\t\tconst data = { ...JSON.parse( params.value ), status: ele.dataset.tab === 'all' ? '' : ele.dataset.tab || '' };\n+\n+\t\t\t\tgetResponse( ele, data );\n+\t\t\t}\n+\t\t} );\n+\t}\n+\n+\tconst changeFilter = () => {\n+\t\tconst tabs = document.querySelectorAll( '.learn-press-course-tab-filters' );\n+\n+\t\ttabs.forEach( ( tab ) => {\n+\t\t\tconst filters = tab.querySelectorAll( '.learn-press-filters a' );\n+\n+\t\t\tfilters.forEach( ( filter ) => {\n+\t\t\t\tfilter.addEventListener( 'click', ( e ) => {\n+\t\t\t\t\te.preventDefault();\n+\n+\t\t\t\t\tconst tabName = filter.dataset.tab;\n+\n+\t\t\t\t\t[ ...filters ].map( ( ele ) => {\n+\t\t\t\t\t\tele.classList.remove( 'active' );\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tfilter.classList.add( 'active' );\n+\n+\t\t\t\t\t[ ...tab.querySelectorAll( '.learn-press-course-tab__filter__content' ) ].map( ( ele ) => {\n+\t\t\t\t\t\tele.style.display = 'none';\n+\n+\t\t\t\t\t\tif ( ele.dataset.tab === tabName ) {\n+\t\t\t\t\t\t\tele.style.display = '';\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\t\t\t\t} );\n+\t\t\t} );\n+\t\t} );\n+\t};\n+\n+\tchangeFilter();\n+\n+\tconst viewMore = ( ele, dataset ) => {\n+\t\tconst viewMoreEle = ele.querySelector( 'button[data-paged]' );\n+\n+\t\tif ( viewMoreEle ) {\n+\t\t\tviewMoreEle.addEventListener( 'click', ( e ) => {\n+\t\t\t\te.preventDefault();\n+\n+\t\t\t\tconst paged = viewMoreEle && viewMoreEle.dataset.paged;\n+\n+\t\t\t\tviewMoreEle.classList.add( 'loading' );\n+\n+\t\t\t\tconst element = dataset.layout === 'list' ? '.lp_profile_course_progress' : '.learn-press-courses';\n+\n+\t\t\t\tgetResponse( ele.querySelector( element ), { ...dataset, ...{ paged } }, true, viewMoreEle );\n+\t\t\t} );\n+\t\t}\n+\t};\n+};\n+export default courseTab;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcover-image.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcover-image.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcover-image.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fcover-image.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,257 +1,257 @@\n-import 'cropperjs\u002Fdist\u002Fcropper.css';\r\n-import Cropper from 'cropperjs';\r\n-import * as Util from '..\u002F..\u002Futils.js';\r\n-import API from '..\u002F..\u002Fapi.js';\r\n-import Toastify from 'toastify-js';\r\n-import 'toastify-js\u002Fsrc\u002Ftoastify.css';\r\n-\r\n-const profileCoverImage = () => {\r\n-\tconst lpSet = new Set();\r\n-\tlet cropper;\r\n-\tlet elBtnSave, elBtnRemove, elBtnChoose, elBtnCancel,\r\n-\t\telImagePreview, elCoverImageBackground, elImgCoverImageBackground, elImageEmpty,\r\n-\t\tformCoverImage, elInputFile, elAction, imgUrlOriginal;\r\n-\tconst className = {\r\n-\t\tformCoverImage: 'lp-user-cover-image',\r\n-\t\tBtnChooseCoverImage: 'lp-btn-choose-cover-image',\r\n-\t\tBtnSaveCoverImage: 'lp-btn-save-cover-image',\r\n-\t\tBtnRemoveCoverImage: 'lp-btn-remove-cover-image',\r\n-\t\tBtnCancelCoverImage: 'lp-btn-cancel-cover-image',\r\n-\t\tBtnToEditCoverImage: 'lp-btn-to-edit-cover-image',\r\n-\t\tCoverImagePreview: 'lp-cover-image-preview',\r\n-\t\tCoverImageEmpty: 'lp-cover-image-empty',\r\n-\t\tCoverImageBackground: 'lp-user-cover-image_background',\r\n-\t\tInputFile: 'lp-cover-image-file',\r\n-\t\tloading: 'loading',\r\n-\t\thidden: 'lp-hidden',\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Get elements to use.\r\n-\t *\u002F\r\n-\tconst getElements = () => {\r\n-\t\telBtnSave = formCoverImage.querySelector( `.${ className.BtnSaveCoverImage }` );\r\n-\t\telBtnChoose = formCoverImage.querySelector( `.${ className.BtnChooseCoverImage }` );\r\n-\t\telBtnRemove = formCoverImage.querySelector( `.${ className.BtnRemoveCoverImage }` );\r\n-\t\telBtnCancel = formCoverImage.querySelector( `.${ className.BtnCancelCoverImage }` );\r\n-\t\telImagePreview = formCoverImage.querySelector( `.${ className.CoverImagePreview }` );\r\n-\t\telCoverImageBackground = document.querySelector( `.${ className.CoverImageBackground }` );\r\n-\t\telImgCoverImageBackground = elCoverImageBackground.querySelector( `img` );\r\n-\t\telImageEmpty = formCoverImage.querySelector( `.${ className.CoverImageEmpty }` );\r\n-\t\telAction = formCoverImage.querySelector( 'input[name=action]' );\r\n-\t\telInputFile = formCoverImage.querySelector( 'input[name=lp-cover-image-file]' );\r\n-\r\n-\t\tif ( ! lpSet.has( 'everClick' ) ) {\r\n-\t\t\timgUrlOriginal = elImagePreview.src;\r\n-\t\t\tlpSet.add( 'everClick' );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tconst fetchAPI = ( formData ) => {\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { status, message, data } = response;\r\n-\r\n-\t\t\t\tToastify( {\r\n-\t\t\t\t\ttext: message,\r\n-\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\r\n-\t\t\t\t\tclose: lpData.toast.close == 1,\r\n-\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\t\t\t\t\tduration: lpData.toast.duration,\r\n-\t\t\t\t} ).showToast();\r\n-\r\n-\t\t\t\tif ( 'remove' === data.action ) {\r\n-\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\r\n-\t\t\t\t\tUtil.lpShowHideEl( elBtnChoose, 0 );\r\n-\t\t\t\t\telImagePreview.src = '';\r\n-\t\t\t\t\tUtil.lpShowHideEl( elImagePreview, 0 );\r\n-\t\t\t\t\tUtil.lpShowHideEl( elImageEmpty, 1 );\r\n-\t\t\t\t\tif ( elCoverImageBackground ) {\r\n-\t\t\t\t\t\tUtil.lpShowHideEl( elCoverImageBackground, 0 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else if ( 'upload' === data.action ) {\r\n-\t\t\t\t\tUtil.lpShowHideEl( elImagePreview, 1 );\r\n-\t\t\t\t\telImagePreview.src = data.url;\r\n-\t\t\t\t\timgUrlOriginal = data.url;\r\n-\t\t\t\t\tcropper.destroy();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\timgUrlOriginal = elImagePreview.src;\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\tUtil.lpShowHideEl( elBtnSave, 0 );\r\n-\t\t\t\tUtil.lpSetLoadingEl( elBtnSave, 0 );\r\n-\t\t\t\tUtil.lpSetLoadingEl( elBtnRemove, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( elBtnCancel, 0 );\r\n-\r\n-\t\t\t\tif ( ! elImagePreview.src || elImagePreview.src === window.location.href ) {\r\n-\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 1 );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tconst url = API.frontend.apiProfileCoverImage;\r\n-\t\tconst option = { headers: {} };\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\toption.headers[ 'X-WP-Nonce' ] = lpData.nonce;\r\n-\t\t}\r\n-\r\n-\t\toption.method = 'POST';\r\n-\t\toption.body = formData;\r\n-\r\n-\t\tUtil.lpFetchAPI( url, option, callBack );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Events\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\tif ( target.classList.contains( className.BtnToEditCoverImage ) ) {\r\n-\t\t\tformCoverImage = document.querySelector( `.${ className.formCoverImage }` );\r\n-\t\t\tif ( ! formCoverImage ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst isCorrectSection = target.dataset.sectionCorrect == 1;\r\n-\t\t\tif ( isCorrectSection ) {\r\n-\t\t\t\te.preventDefault();\r\n-\t\t\t\tformCoverImage.scrollIntoView( { behavior: 'smooth', block: 'center' } );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tformCoverImage = target.closest( `.${ className.formCoverImage }` );\r\n-\t\tif ( ! formCoverImage ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tgetElements();\r\n-\t\tif ( target.classList.contains( className.BtnChooseCoverImage ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\telInputFile.click();\r\n-\t\t}\r\n-\t\tif ( target.classList.contains( className.BtnSaveCoverImage ) ) {\r\n-\t\t\tUtil.lpSetLoadingEl( elBtnSave, 1 );\r\n-\t\t}\r\n-\t\tif ( target.classList.contains( className.BtnCancelCoverImage ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tcropper.destroy();\r\n-\t\t\telImagePreview.src = imgUrlOriginal;\r\n-\t\t\tif ( imgUrlOriginal === window.location.href ) {\r\n-\t\t\t\tUtil.lpShowHideEl( elImageEmpty, 1 );\r\n-\t\t\t\tUtil.lpShowHideEl( elBtnChoose, 0 );\r\n-\t\t\t\tUtil.lpShowHideEl( elImagePreview, 0 );\r\n-\t\t\t} else {\r\n-\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 1 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tUtil.lpShowHideEl( elBtnSave, 0 );\r\n-\t\t\tUtil.lpShowHideEl( elBtnCancel, 0 );\r\n-\t\t}\r\n-\t\tif ( target.classList.contains( className.BtnRemoveCoverImage ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\ttarget.classList.add( 'loading' );\r\n-\t\t\tif ( cropper ) {\r\n-\t\t\t\tcropper.destroy();\r\n-\t\t\t\tcropper = undefined;\r\n-\t\t\t}\r\n-\t\t\telAction.value = 'remove';\r\n-\t\t\telBtnSave.click();\r\n-\t\t}\r\n-\t\tif ( target.classList.contains( className.CoverImageEmpty ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\telInputFile.click();\r\n-\t\t}\r\n-\t} );\r\n-\tdocument.addEventListener( 'change', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\tformCoverImage = target.closest( `.${ className.formCoverImage }` );\r\n-\t\tif ( ! formCoverImage ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tgetElements();\r\n-\t\tif ( target.classList.contains( className.InputFile ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst file = target.files[ 0 ];\r\n-\t\t\tif ( ! file ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst allowType = [ 'image\u002Fpng', 'image\u002Fjpeg', 'image\u002Fwebp' ];\r\n-\t\t\tif ( allowType.indexOf( file.type ) \u003C 0 ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\telAction.value = 'upload';\r\n-\t\t\tUtil.lpShowHideEl( elImagePreview, 1 );\r\n-\t\t\tUtil.lpShowHideEl( elImageEmpty, 0 );\r\n-\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\r\n-\t\t\tUtil.lpShowHideEl( elBtnSave, 1 );\r\n-\t\t\tUtil.lpShowHideEl( elBtnChoose, 1 );\r\n-\t\t\tUtil.lpShowHideEl( elBtnCancel, 1 );\r\n-\r\n-\t\t\tconst reader = new FileReader();\r\n-\t\t\treader.onload = function( e ) {\r\n-\t\t\t\telImagePreview.src = e.target.result;\r\n-\t\t\t\t\u002F\u002F Destroy previous cropper instance if any\r\n-\t\t\t\tif ( cropper ) {\r\n-\t\t\t\t\tcropper.destroy();\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F Initialize cropper\r\n-\t\t\t\tcropper = new Cropper( elImagePreview, {\r\n-\t\t\t\t\taspectRatio: lpData.coverImageRatio,\r\n-\t\t\t\t\tviewMode: 1,\r\n-\t\t\t\t\tzoomOnWheel: false,\r\n-\t\t\t\t} );\r\n-\t\t\t};\r\n-\t\t\treader.readAsDataURL( file );\r\n-\t\t}\r\n-\t} );\r\n-\tdocument.addEventListener( 'submit', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\tif ( target.classList.contains( className.formCoverImage ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tconst formData = new FormData( target );\r\n-\r\n-\t\t\tif ( undefined !== cropper ) {\r\n-\t\t\t\tconst canvas = cropper.getCroppedCanvas( {} );\r\n-\t\t\t\tif ( elCoverImageBackground ) {\r\n-\t\t\t\t\tconst dataUrl = canvas.toDataURL( 'image\u002Fpng' );\r\n-\t\t\t\t\telCoverImageBackground.style.backgroundImage = `url(${ dataUrl })`;\r\n-\t\t\t\t\telImgCoverImageBackground.src = dataUrl;\r\n-\t\t\t\t\tUtil.lpShowHideEl( elCoverImageBackground, 1 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tcanvas.toBlob( ( blob ) => {\r\n-\t\t\t\t\tformData.append( 'image', blob, 'cover.png' );\r\n-\r\n-\t\t\t\t\tfetchAPI( formData );\r\n-\t\t\t\t}, 'image\u002Fpng' );\r\n-\t\t\t} else {\r\n-\t\t\t\tfetchAPI( formData );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-\tdocument.addEventListener( 'DOMContentLoaded', ( e ) => {\r\n-\t\tconst elBtnToEditCoverImage = document.querySelector( `.${ className.BtnToEditCoverImage }` );\r\n-\t\tconst formCoverImage = document.querySelector( `.${ className.formCoverImage }` );\r\n-\r\n-\t\tif ( elBtnToEditCoverImage && formCoverImage ) {\r\n-\t\t\tconst isCorrectSection = elBtnToEditCoverImage.dataset.sectionCorrect == 1;\r\n-\t\t\tif ( isCorrectSection ) {\r\n-\t\t\t\tformCoverImage.scrollIntoView( { behavior: 'smooth', block: 'center' } );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-export default profileCoverImage;\r\n+import 'cropperjs\u002Fdist\u002Fcropper.css';\n+import Cropper from 'cropperjs';\n+import * as Util from '..\u002F..\u002Futils.js';\n+import API from '..\u002F..\u002Fapi.js';\n+import Toastify from 'toastify-js';\n+import 'toastify-js\u002Fsrc\u002Ftoastify.css';\n+\n+const profileCoverImage = () => {\n+\tconst lpSet = new Set();\n+\tlet cropper;\n+\tlet elBtnSave, elBtnRemove, elBtnChoose, elBtnCancel,\n+\t\telImagePreview, elCoverImageBackground, elImgCoverImageBackground, elImageEmpty,\n+\t\tformCoverImage, elInputFile, elAction, imgUrlOriginal;\n+\tconst className = {\n+\t\tformCoverImage: 'lp-user-cover-image',\n+\t\tBtnChooseCoverImage: 'lp-btn-choose-cover-image',\n+\t\tBtnSaveCoverImage: 'lp-btn-save-cover-image',\n+\t\tBtnRemoveCoverImage: 'lp-btn-remove-cover-image',\n+\t\tBtnCancelCoverImage: 'lp-btn-cancel-cover-image',\n+\t\tBtnToEditCoverImage: 'lp-btn-to-edit-cover-image',\n+\t\tCoverImagePreview: 'lp-cover-image-preview',\n+\t\tCoverImageEmpty: 'lp-cover-image-empty',\n+\t\tCoverImageBackground: 'lp-user-cover-image_background',\n+\t\tInputFile: 'lp-cover-image-file',\n+\t\tloading: 'loading',\n+\t\thidden: 'lp-hidden',\n+\t};\n+\n+\t\u002F**\n+\t * Get elements to use.\n+\t *\u002F\n+\tconst getElements = () => {\n+\t\telBtnSave = formCoverImage.querySelector( `.${ className.BtnSaveCoverImage }` );\n+\t\telBtnChoose = formCoverImage.querySelector( `.${ className.BtnChooseCoverImage }` );\n+\t\telBtnRemove = formCoverImage.querySelector( `.${ className.BtnRemoveCoverImage }` );\n+\t\telBtnCancel = formCoverImage.querySelector( `.${ className.BtnCancelCoverImage }` );\n+\t\telImagePreview = formCoverImage.querySelector( `.${ className.CoverImagePreview }` );\n+\t\telCoverImageBackground = document.querySelector( `.${ className.CoverImageBackground }` );\n+\t\telImgCoverImageBackground = elCoverImageBackground.querySelector( `img` );\n+\t\telImageEmpty = formCoverImage.querySelector( `.${ className.CoverImageEmpty }` );\n+\t\telAction = formCoverImage.querySelector( 'input[name=action]' );\n+\t\telInputFile = formCoverImage.querySelector( 'input[name=lp-cover-image-file]' );\n+\n+\t\tif ( ! lpSet.has( 'everClick' ) ) {\n+\t\t\timgUrlOriginal = elImagePreview.src;\n+\t\t\tlpSet.add( 'everClick' );\n+\t\t}\n+\t};\n+\n+\tconst fetchAPI = ( formData ) => {\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { status, message, data } = response;\n+\n+\t\t\t\tToastify( {\n+\t\t\t\t\ttext: message,\n+\t\t\t\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\t\t\t\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\t\t\t\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\n+\t\t\t\t\tclose: lpData.toast.close == 1,\n+\t\t\t\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\t\t\t\t\tduration: lpData.toast.duration,\n+\t\t\t\t} ).showToast();\n+\n+\t\t\t\tif ( 'remove' === data.action ) {\n+\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\n+\t\t\t\t\tUtil.lpShowHideEl( elBtnChoose, 0 );\n+\t\t\t\t\telImagePreview.src = '';\n+\t\t\t\t\tUtil.lpShowHideEl( elImagePreview, 0 );\n+\t\t\t\t\tUtil.lpShowHideEl( elImageEmpty, 1 );\n+\t\t\t\t\tif ( elCoverImageBackground ) {\n+\t\t\t\t\t\tUtil.lpShowHideEl( elCoverImageBackground, 0 );\n+\t\t\t\t\t}\n+\t\t\t\t} else if ( 'upload' === data.action ) {\n+\t\t\t\t\tUtil.lpShowHideEl( elImagePreview, 1 );\n+\t\t\t\t\telImagePreview.src = data.url;\n+\t\t\t\t\timgUrlOriginal = data.url;\n+\t\t\t\t\tcropper.destroy();\n+\t\t\t\t}\n+\n+\t\t\t\timgUrlOriginal = elImagePreview.src;\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tconsole.log( error );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\tUtil.lpShowHideEl( elBtnSave, 0 );\n+\t\t\t\tUtil.lpSetLoadingEl( elBtnSave, 0 );\n+\t\t\t\tUtil.lpSetLoadingEl( elBtnRemove, 0 );\n+\t\t\t\tUtil.lpShowHideEl( elBtnCancel, 0 );\n+\n+\t\t\t\tif ( ! elImagePreview.src || elImagePreview.src === window.location.href ) {\n+\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\n+\t\t\t\t} else {\n+\t\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 1 );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\tconst url = API.frontend.apiProfileCoverImage;\n+\t\tconst option = { headers: {} };\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\toption.headers[ 'X-WP-Nonce' ] = lpData.nonce;\n+\t\t}\n+\n+\t\toption.method = 'POST';\n+\t\toption.body = formData;\n+\n+\t\tUtil.lpFetchAPI( url, option, callBack );\n+\t};\n+\n+\t\u002F\u002F Events\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\n+\t\tif ( target.classList.contains( className.BtnToEditCoverImage ) ) {\n+\t\t\tformCoverImage = document.querySelector( `.${ className.formCoverImage }` );\n+\t\t\tif ( ! formCoverImage ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst isCorrectSection = target.dataset.sectionCorrect == 1;\n+\t\t\tif ( isCorrectSection ) {\n+\t\t\t\te.preventDefault();\n+\t\t\t\tformCoverImage.scrollIntoView( { behavior: 'smooth', block: 'center' } );\n+\t\t\t}\n+\t\t}\n+\n+\t\tformCoverImage = target.closest( `.${ className.formCoverImage }` );\n+\t\tif ( ! formCoverImage ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tgetElements();\n+\t\tif ( target.classList.contains( className.BtnChooseCoverImage ) ) {\n+\t\t\te.preventDefault();\n+\t\t\telInputFile.click();\n+\t\t}\n+\t\tif ( target.classList.contains( className.BtnSaveCoverImage ) ) {\n+\t\t\tUtil.lpSetLoadingEl( elBtnSave, 1 );\n+\t\t}\n+\t\tif ( target.classList.contains( className.BtnCancelCoverImage ) ) {\n+\t\t\te.preventDefault();\n+\t\t\tcropper.destroy();\n+\t\t\telImagePreview.src = imgUrlOriginal;\n+\t\t\tif ( imgUrlOriginal === window.location.href ) {\n+\t\t\t\tUtil.lpShowHideEl( elImageEmpty, 1 );\n+\t\t\t\tUtil.lpShowHideEl( elBtnChoose, 0 );\n+\t\t\t\tUtil.lpShowHideEl( elImagePreview, 0 );\n+\t\t\t} else {\n+\t\t\t\tUtil.lpShowHideEl( elBtnRemove, 1 );\n+\t\t\t}\n+\n+\t\t\tUtil.lpShowHideEl( elBtnSave, 0 );\n+\t\t\tUtil.lpShowHideEl( elBtnCancel, 0 );\n+\t\t}\n+\t\tif ( target.classList.contains( className.BtnRemoveCoverImage ) ) {\n+\t\t\te.preventDefault();\n+\t\t\ttarget.classList.add( 'loading' );\n+\t\t\tif ( cropper ) {\n+\t\t\t\tcropper.destroy();\n+\t\t\t\tcropper = undefined;\n+\t\t\t}\n+\t\t\telAction.value = 'remove';\n+\t\t\telBtnSave.click();\n+\t\t}\n+\t\tif ( target.classList.contains( className.CoverImageEmpty ) ) {\n+\t\t\te.preventDefault();\n+\t\t\telInputFile.click();\n+\t\t}\n+\t} );\n+\tdocument.addEventListener( 'change', ( e ) => {\n+\t\tconst target = e.target;\n+\n+\t\tformCoverImage = target.closest( `.${ className.formCoverImage }` );\n+\t\tif ( ! formCoverImage ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tgetElements();\n+\t\tif ( target.classList.contains( className.InputFile ) ) {\n+\t\t\te.preventDefault();\n+\t\t\tconst file = target.files[ 0 ];\n+\t\t\tif ( ! file ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst allowType = [ 'image\u002Fpng', 'image\u002Fjpeg', 'image\u002Fwebp' ];\n+\t\t\tif ( allowType.indexOf( file.type ) \u003C 0 ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\telAction.value = 'upload';\n+\t\t\tUtil.lpShowHideEl( elImagePreview, 1 );\n+\t\t\tUtil.lpShowHideEl( elImageEmpty, 0 );\n+\t\t\tUtil.lpShowHideEl( elBtnRemove, 0 );\n+\t\t\tUtil.lpShowHideEl( elBtnSave, 1 );\n+\t\t\tUtil.lpShowHideEl( elBtnChoose, 1 );\n+\t\t\tUtil.lpShowHideEl( elBtnCancel, 1 );\n+\n+\t\t\tconst reader = new FileReader();\n+\t\t\treader.onload = function( e ) {\n+\t\t\t\telImagePreview.src = e.target.result;\n+\t\t\t\t\u002F\u002F Destroy previous cropper instance if any\n+\t\t\t\tif ( cropper ) {\n+\t\t\t\t\tcropper.destroy();\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F Initialize cropper\n+\t\t\t\tcropper = new Cropper( elImagePreview, {\n+\t\t\t\t\taspectRatio: lpData.coverImageRatio,\n+\t\t\t\t\tviewMode: 1,\n+\t\t\t\t\tzoomOnWheel: false,\n+\t\t\t\t} );\n+\t\t\t};\n+\t\t\treader.readAsDataURL( file );\n+\t\t}\n+\t} );\n+\tdocument.addEventListener( 'submit', ( e ) => {\n+\t\tconst target = e.target;\n+\n+\t\tif ( target.classList.contains( className.formCoverImage ) ) {\n+\t\t\te.preventDefault();\n+\t\t\tconst formData = new FormData( target );\n+\n+\t\t\tif ( undefined !== cropper ) {\n+\t\t\t\tconst canvas = cropper.getCroppedCanvas( {} );\n+\t\t\t\tif ( elCoverImageBackground ) {\n+\t\t\t\t\tconst dataUrl = canvas.toDataURL( 'image\u002Fpng' );\n+\t\t\t\t\telCoverImageBackground.style.backgroundImage = `url(${ dataUrl })`;\n+\t\t\t\t\telImgCoverImageBackground.src = dataUrl;\n+\t\t\t\t\tUtil.lpShowHideEl( elCoverImageBackground, 1 );\n+\t\t\t\t}\n+\n+\t\t\t\tcanvas.toBlob( ( blob ) => {\n+\t\t\t\t\tformData.append( 'image', blob, 'cover.png' );\n+\n+\t\t\t\t\tfetchAPI( formData );\n+\t\t\t\t}, 'image\u002Fpng' );\n+\t\t\t} else {\n+\t\t\t\tfetchAPI( formData );\n+\t\t\t}\n+\t\t}\n+\t} );\n+\tdocument.addEventListener( 'DOMContentLoaded', ( e ) => {\n+\t\tconst elBtnToEditCoverImage = document.querySelector( `.${ className.BtnToEditCoverImage }` );\n+\t\tconst formCoverImage = document.querySelector( `.${ className.formCoverImage }` );\n+\n+\t\tif ( elBtnToEditCoverImage && formCoverImage ) {\n+\t\t\tconst isCorrectSection = elBtnToEditCoverImage.dataset.sectionCorrect == 1;\n+\t\t\tif ( isCorrectSection ) {\n+\t\t\t\tformCoverImage.scrollIntoView( { behavior: 'smooth', block: 'center' } );\n+\t\t\t}\n+\t\t}\n+\t} );\n+};\n+\n+export default profileCoverImage;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Forder-recover.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Forder-recover.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Forder-recover.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Forder-recover.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-import { lpSetLoadingEl } from '..\u002F..\u002Futils.js';\r\n-import Toastify from 'toastify-js';\r\n-\r\n-\u002F**\r\n- * JS Recover order\r\n- *\r\n- * @since 4.0.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-const recoverOrder = () => {\r\n-\tconst toastify = Toastify( {\r\n-\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\t\tclose: lpData.toast.close == 1,\r\n-\t\tclassName: `${ lpData.toast.classPrefix }`,\r\n-\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\t\tduration: lpData.toast.duration,\r\n-\t} );\r\n-\r\n-\t\u002F\u002F Events\r\n-\tdocument.addEventListener( 'submit', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tif ( target.classList.contains( 'lp-order-recover' ) ) {\r\n-\t\t\te.preventDefault();\r\n-\t\t\tajaxRecover( target );\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tconst ajaxRecover = ( form ) => {\r\n-\t\tconst status = 'error';\r\n-\t\tconst btnSubmit = form.querySelector( '.button-recover-order' );\r\n-\t\tif ( ! btnSubmit ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlpSetLoadingEl( btnSubmit, 1 );\r\n-\r\n-\t\tconst url = new URL( window.location.href );\r\n-\t\tfetch( url, {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\tbody: new FormData( form ),\r\n-\t\t} )\r\n-\t\t\t.then( ( response ) => {\r\n-\t\t\t\treturn response.json();\r\n-\t\t\t} )\r\n-\t\t\t.then( ( res ) => {\r\n-\t\t\t\tconst { status, data: { redirect }, message } = res;\r\n-\r\n-\t\t\t\tif ( status === 'success' ) {\r\n-\t\t\t\t\ttoastify.options.text = message;\r\n-\t\t\t\t\ttoastify.options.className += ` ${ status }`;\r\n-\t\t\t\t\ttoastify.showToast();\r\n-\t\t\t\t\tif ( redirect ) {\r\n-\t\t\t\t\t\twindow.location.href = redirect;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbtnSubmit.remove();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlpSetLoadingEl( btnSubmit, 0 );\r\n-\t\t\t\t\tthrow new Error( message );\r\n-\t\t\t\t}\r\n-\t\t\t} ).finally( () => {\r\n-\r\n-\t\t\t} ).catch( ( err ) => {\r\n-\t\t\t\ttoastify.options.text = err.message;\r\n-\t\t\t\ttoastify.options.className += ` ${ status }`;\r\n-\t\t\t\ttoastify.showToast();\r\n-\t\t\t} );\r\n-\t};\r\n-};\r\n-\r\n-export default recoverOrder;\r\n-\r\n+import { lpSetLoadingEl } from '..\u002F..\u002Futils.js';\n+import Toastify from 'toastify-js';\n+\n+\u002F**\n+ * JS Recover order\n+ *\n+ * @since 4.0.0\n+ * @version 1.0.1\n+ *\u002F\n+const recoverOrder = () => {\n+\tconst toastify = Toastify( {\n+\t\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\t\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\t\tclose: lpData.toast.close == 1,\n+\t\tclassName: `${ lpData.toast.classPrefix }`,\n+\t\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\t\tduration: lpData.toast.duration,\n+\t} );\n+\n+\t\u002F\u002F Events\n+\tdocument.addEventListener( 'submit', ( e ) => {\n+\t\tconst target = e.target;\n+\t\tif ( target.classList.contains( 'lp-order-recover' ) ) {\n+\t\t\te.preventDefault();\n+\t\t\tajaxRecover( target );\n+\t\t}\n+\t} );\n+\n+\tconst ajaxRecover = ( form ) => {\n+\t\tconst status = 'error';\n+\t\tconst btnSubmit = form.querySelector( '.button-recover-order' );\n+\t\tif ( ! btnSubmit ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlpSetLoadingEl( btnSubmit, 1 );\n+\n+\t\tconst url = new URL( window.location.href );\n+\t\tfetch( url, {\n+\t\t\tmethod: 'POST',\n+\t\t\tbody: new FormData( form ),\n+\t\t} )\n+\t\t\t.then( ( response ) => {\n+\t\t\t\treturn response.json();\n+\t\t\t} )\n+\t\t\t.then( ( res ) => {\n+\t\t\t\tconst { status, data: { redirect }, message } = res;\n+\n+\t\t\t\tif ( status === 'success' ) {\n+\t\t\t\t\ttoastify.options.text = message;\n+\t\t\t\t\ttoastify.options.className += ` ${ status }`;\n+\t\t\t\t\ttoastify.showToast();\n+\t\t\t\t\tif ( redirect ) {\n+\t\t\t\t\t\twindow.location.href = redirect;\n+\t\t\t\t\t}\n+\t\t\t\t\tbtnSubmit.remove();\n+\t\t\t\t} else {\n+\t\t\t\t\tlpSetLoadingEl( btnSubmit, 0 );\n+\t\t\t\t\tthrow new Error( message );\n+\t\t\t\t}\n+\t\t\t} ).finally( () => {\n+\n+\t\t\t} ).catch( ( err ) => {\n+\t\t\t\ttoastify.options.text = err.message;\n+\t\t\t\ttoastify.options.className += ` ${ status }`;\n+\t\t\t\ttoastify.showToast();\n+\t\t\t} );\n+\t};\n+};\n+\n+export default recoverOrder;\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fquiz.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fquiz.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fquiz.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fquiz.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u002F**\r\n- * Handle click tab call API\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-const profileQuizTab = () => {\r\n-\tconst handleClickTab = ( e, target ) => {\r\n-\t\tif ( target.closest( 'span' ) ) {\r\n-\t\t\tconst elParent = target.closest( '#profile-content-quizzes' );\r\n-\t\t\tif ( ! elParent ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elLPTarget = target.closest( '.lp-target' );\r\n-\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\r\n-\t\t\tconst dataSendJson = elLPTarget?.dataset?.send || {};\r\n-\t\t\tconst dataSend = JSON.parse( dataSendJson );\r\n-\r\n-\t\t\tconst elTabChoice = target?.dataset?.filter || 'all';\r\n-\r\n-\t\t\tconst liActive = elParent.querySelector( 'li.active' );\r\n-\t\t\tif ( liActive.classList.contains( elTabChoice ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tliActive.classList.remove( 'active' );\r\n-\t\t\tconst liTarget = target.closest( 'li' );\r\n-\t\t\tliTarget.classList.add( 'active' );\r\n-\r\n-\t\t\tdataSend.args.type = elTabChoice;\r\n-\r\n-\t\t\t\u002F\u002F Load list courses by AJAX.\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { data, message, status } = response;\r\n-\r\n-\t\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t}\r\n-\t};\r\n-\r\n-\tdocument.addEventListener( 'click', ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\r\n-\t\thandleClickTab( e, target );\r\n-\t} );\r\n-};\r\n-\r\n-export default profileQuizTab;\r\n+\u002F**\n+ * Handle click tab call API\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.0\n+ *\u002F\n+const profileQuizTab = () => {\n+\tconst handleClickTab = ( e, target ) => {\n+\t\tif ( target.closest( 'span' ) ) {\n+\t\t\tconst elParent = target.closest( '#profile-content-quizzes' );\n+\t\t\tif ( ! elParent ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elLPTarget = target.closest( '.lp-target' );\n+\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\n+\t\t\tconst dataSendJson = elLPTarget?.dataset?.send || {};\n+\t\t\tconst dataSend = JSON.parse( dataSendJson );\n+\n+\t\t\tconst elTabChoice = target?.dataset?.filter || 'all';\n+\n+\t\t\tconst liActive = elParent.querySelector( 'li.active' );\n+\t\t\tif ( liActive.classList.contains( elTabChoice ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tliActive.classList.remove( 'active' );\n+\t\t\tconst liTarget = target.closest( 'li' );\n+\t\t\tliTarget.classList.add( 'active' );\n+\n+\t\t\tdataSend.args.type = elTabChoice;\n+\n+\t\t\t\u002F\u002F Load list courses by AJAX.\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { data, message, status } = response;\n+\n+\t\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t}\n+\t};\n+\n+\tdocument.addEventListener( 'click', ( e ) => {\n+\t\tconst target = e.target;\n+\n+\t\thandleClickTab( e, target );\n+\t} );\n+};\n+\n+export default profileQuizTab;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fstatistic.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fstatistic.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fstatistic.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile\u002Fstatistic.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-import { lpAddQueryArgs, lpFetchAPI, lpOnElementReady } from '..\u002F..\u002Futils.js';\r\n-\r\n-\u002F\u002F Rest API load content course progress - Nhamdv.\r\n-const courseStatistics = () => {\r\n-\tconst loadAPICourseStatistic = ( elCourseStatistic ) => {\r\n-\t\tlet apiUrl = 'lp\u002Fv1\u002Fprofile\u002Fstudent\u002Fstatistic';\r\n-\t\tconst tabActive = document.querySelector( '.lp-profile-nav-tabs li.active' );\r\n-\t\tif ( ! tabActive ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( tabActive.classList.contains( 'courses' ) ) {\r\n-\t\t\tapiUrl = 'lp\u002Fv1\u002Fprofile\u002Finstructor\u002Fstatistic';\r\n-\t\t}\r\n-\r\n-\t\tconst elArgStatistic = elCourseStatistic.querySelector( '[name=\"args_query_user_courses_statistic\"]' );\r\n-\t\tif ( ! elArgStatistic ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst data = JSON.parse( elArgStatistic.value );\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tif ( response.status === 'success' && response.data ) {\r\n-\t\t\t\t\telCourseStatistic.innerHTML = response.data;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\telCourseStatistic.innerHTML = `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tconsole.log( error );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\tapiUrl = lpAddQueryArgs( lpData.lp_rest_url + apiUrl, data );\r\n-\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tdata.headers = {\r\n-\t\t\t\t'X-WP-Nonce': lpData.nonce,\r\n-\t\t\t};\r\n-\t\t}\r\n-\t\tlpFetchAPI( apiUrl, data, callBack );\r\n-\t};\r\n-\r\n-\tlpOnElementReady( '.learn-press-profile-course__statistic', ( elCourseStatistic ) => {\r\n-\t\tloadAPICourseStatistic( elCourseStatistic );\r\n-\t} );\r\n-};\r\n-\r\n-export default courseStatistics;\r\n+import { lpAddQueryArgs, lpFetchAPI, lpOnElementReady } from '..\u002F..\u002Futils.js';\n+\n+\u002F\u002F Rest API load content course progress - Nhamdv.\n+const courseStatistics = () => {\n+\tconst loadAPICourseStatistic = ( elCourseStatistic ) => {\n+\t\tlet apiUrl = 'lp\u002Fv1\u002Fprofile\u002Fstudent\u002Fstatistic';\n+\t\tconst tabActive = document.querySelector( '.lp-profile-nav-tabs li.active' );\n+\t\tif ( ! tabActive ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( tabActive.classList.contains( 'courses' ) ) {\n+\t\t\tapiUrl = 'lp\u002Fv1\u002Fprofile\u002Finstructor\u002Fstatistic';\n+\t\t}\n+\n+\t\tconst elArgStatistic = elCourseStatistic.querySelector( '[name=\"args_query_user_courses_statistic\"]' );\n+\t\tif ( ! elArgStatistic ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst data = JSON.parse( elArgStatistic.value );\n+\n+\t\tconst callBack = {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tif ( response.status === 'success' && response.data ) {\n+\t\t\t\t\telCourseStatistic.innerHTML = response.data;\n+\t\t\t\t} else {\n+\t\t\t\t\telCourseStatistic.innerHTML = `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ response.message && response.message }\u003C\u002Fdiv>`;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tconsole.log( error );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\n+\t\t\t},\n+\t\t};\n+\n+\t\tapiUrl = lpAddQueryArgs( lpData.lp_rest_url + apiUrl, data );\n+\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tdata.headers = {\n+\t\t\t\t'X-WP-Nonce': lpData.nonce,\n+\t\t\t};\n+\t\t}\n+\t\tlpFetchAPI( apiUrl, data, callBack );\n+\t};\n+\n+\tlpOnElementReady( '.learn-press-profile-course__statistic', ( elCourseStatistic ) => {\n+\t\tloadAPICourseStatistic( elCourseStatistic );\n+\t} );\n+};\n+\n+export default courseStatistics;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fprofile.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-import courseTab from '.\u002Fprofile\u002Fcourse-tab';\r\n-import courseStatistics from '.\u002Fprofile\u002Fstatistic';\r\n-import recoverOrder from '.\u002Fprofile\u002Forder-recover';\r\n-import profileCoverImage from '.\u002Fprofile\u002Fcover-image';\r\n-import profileAvatarImage from '.\u002Fprofile\u002Favatar';\r\n-import profileQuizTab from '.\u002Fprofile\u002Fquiz';\r\n-import { ViewStudentsModal } from '..\u002Fadmin\u002Fcourses\u002Fview-students-modal';\r\n-\r\n-profileCoverImage();\r\n-profileQuizTab();\r\n-courseStatistics();\r\n-recoverOrder();\r\n-new ViewStudentsModal();\r\n-\r\n-document.addEventListener( 'DOMContentLoaded', function( event ) {\r\n-\tcourseTab();\r\n-} );\r\n-\r\n-if ( document.getElementById( 'learnpress-avatar-upload' ) ) {\r\n-\tprofileAvatarImage();\r\n-}\r\n+import courseTab from '.\u002Fprofile\u002Fcourse-tab';\n+import courseStatistics from '.\u002Fprofile\u002Fstatistic';\n+import recoverOrder from '.\u002Fprofile\u002Forder-recover';\n+import profileCoverImage from '.\u002Fprofile\u002Fcover-image';\n+import profileAvatarImage from '.\u002Fprofile\u002Favatar';\n+import profileQuizTab from '.\u002Fprofile\u002Fquiz';\n+import { ViewStudentsModal } from '..\u002Fadmin\u002Fcourses\u002Fview-students-modal';\n+\n+profileCoverImage();\n+profileQuizTab();\n+courseStatistics();\n+recoverOrder();\n+new ViewStudentsModal();\n+\n+document.addEventListener( 'DOMContentLoaded', function( event ) {\n+\tcourseTab();\n+} );\n+\n+if ( document.getElementById( 'learnpress-avatar-upload' ) ) {\n+\tprofileAvatarImage();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fwidgets.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fwidgets.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fwidgets.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fwidgets.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-import { lpFetchAPI, lpShowHideEl } from '..\u002Futils.js';\r\n-import API from '..\u002Fapi';\r\n-\r\n-function widgetRestAPI() {\r\n-\tconst widgets = document.querySelectorAll( '.learnpress-widget-wrapper:not(.loaded)' );\r\n-\r\n-\tif ( ! widgets.length ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst getResponse = ( ele ) => {\r\n-\t\tconst lang = lpData.urlParams.lang ? `?lang=${ lpData.urlParams.lang }` : '';\r\n-\t\tconst widgetData = ele.dataset.widget ? JSON.parse( ele.dataset.widget ) : '';\r\n-\t\tconst url = API.frontend.apiWidgets + lang;\r\n-\t\tconst paramsFetch = {\r\n-\t\t\tmethod: 'POST',\r\n-\t\t\theaders: {\r\n-\t\t\t\t'Content-Type': 'application\u002Fjson',\r\n-\t\t\t},\r\n-\t\t\tbody: JSON.stringify( { ...widgetData, ...{ params_url: lpData.urlParams } } ),\r\n-\t\t};\r\n-\r\n-\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\r\n-\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = lpData.nonce;\r\n-\t\t}\r\n-\r\n-\t\tconst callBack = {\r\n-\t\t\tbefore: () => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tsuccess: ( res ) => {\r\n-\t\t\t\tconst { data, status, message } = res;\r\n-\r\n-\t\t\t\tif ( data && status === 'success' ) {\r\n-\t\t\t\t\tele.insertAdjacentHTML( 'afterbegin', data );\r\n-\t\t\t\t} else if ( message ) {\r\n-\t\t\t\t\tele.insertAdjacentHTML( 'afterbegin', `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ message }\u003C\u002Fdiv>` );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tconst elBtnDone = ele.querySelector( '.course-filter-submit.lp-btn-done' );\r\n-\t\t\t\tif ( elBtnDone ) {\r\n-\t\t\t\t\tif ( window.outerWidth \u003C= 991 ) {\r\n-\t\t\t\t\t\tlpShowHideEl( elBtnDone, 1 );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tlpShowHideEl( elBtnDone, 0 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\t\u002F\u002Fdelete ele.dataset.widget;\r\n-\t\t\t\tconst elSkeleton = ele.querySelector( '.lp-skeleton-animation' );\r\n-\t\t\t\tif ( elSkeleton ) {\r\n-\t\t\t\t\telSkeleton.remove();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Set temporary count course fields filter selected\r\n-\t\t\t\tconst classCourseFilter = 'lp-form-course-filter';\r\n-\t\t\t\tconst courseFilter = document.querySelector( `.${ classCourseFilter }` );\r\n-\t\t\t\tif ( courseFilter ) {\r\n-\t\t\t\t\twindow.lpCourseFilter.countFieldsSelected( courseFilter );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002F Call API load widget\r\n-\t\tlpFetchAPI( url, paramsFetch, callBack );\r\n-\t};\r\n-\r\n-\twidgets.forEach( ( ele ) => {\r\n-\t\tele.classList.add( 'loaded' );\r\n-\t\tif ( ele.classList.contains( 'learnpress-widget-wrapper__restapi' ) ) {\r\n-\t\t\tgetResponse( ele );\r\n-\t\t}\r\n-\t} );\r\n-}\r\n-\r\n-widgetRestAPI();\r\n-\r\n-\u002F\u002F Case 2: readystatechange, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\r\n-document.addEventListener( 'readystatechange', ( event ) => {\r\n-\twidgetRestAPI();\r\n-} );\r\n-\r\n-\u002F\u002F Case 3: DOMContentLoaded, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\r\n-document.addEventListener( 'DOMContentLoaded', () => {\r\n-\twidgetRestAPI();\r\n-} );\r\n+import { lpFetchAPI, lpShowHideEl } from '..\u002Futils.js';\n+import API from '..\u002Fapi';\n+\n+function widgetRestAPI() {\n+\tconst widgets = document.querySelectorAll( '.learnpress-widget-wrapper:not(.loaded)' );\n+\n+\tif ( ! widgets.length ) {\n+\t\treturn;\n+\t}\n+\n+\tconst getResponse = ( ele ) => {\n+\t\tconst lang = lpData.urlParams.lang ? `?lang=${ lpData.urlParams.lang }` : '';\n+\t\tconst widgetData = ele.dataset.widget ? JSON.parse( ele.dataset.widget ) : '';\n+\t\tconst url = API.frontend.apiWidgets + lang;\n+\t\tconst paramsFetch = {\n+\t\t\tmethod: 'POST',\n+\t\t\theaders: {\n+\t\t\t\t'Content-Type': 'application\u002Fjson',\n+\t\t\t},\n+\t\t\tbody: JSON.stringify( { ...widgetData, ...{ params_url: lpData.urlParams } } ),\n+\t\t};\n+\n+\t\tif ( 0 !== parseInt( lpData.user_id ) ) {\n+\t\t\tparamsFetch.headers[ 'X-WP-Nonce' ] = lpData.nonce;\n+\t\t}\n+\n+\t\tconst callBack = {\n+\t\t\tbefore: () => {\n+\n+\t\t\t},\n+\t\t\tsuccess: ( res ) => {\n+\t\t\t\tconst { data, status, message } = res;\n+\n+\t\t\t\tif ( data && status === 'success' ) {\n+\t\t\t\t\tele.insertAdjacentHTML( 'afterbegin', data );\n+\t\t\t\t} else if ( message ) {\n+\t\t\t\t\tele.insertAdjacentHTML( 'afterbegin', `\u003Cdiv class=\"lp-ajax-message error\" style=\"display:block\">${ message }\u003C\u002Fdiv>` );\n+\t\t\t\t}\n+\n+\t\t\t\tconst elBtnDone = ele.querySelector( '.course-filter-submit.lp-btn-done' );\n+\t\t\t\tif ( elBtnDone ) {\n+\t\t\t\t\tif ( window.outerWidth \u003C= 991 ) {\n+\t\t\t\t\t\tlpShowHideEl( elBtnDone, 1 );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlpShowHideEl( elBtnDone, 0 );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\t\u002F\u002Fdelete ele.dataset.widget;\n+\t\t\t\tconst elSkeleton = ele.querySelector( '.lp-skeleton-animation' );\n+\t\t\t\tif ( elSkeleton ) {\n+\t\t\t\t\telSkeleton.remove();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Set temporary count course fields filter selected\n+\t\t\t\tconst classCourseFilter = 'lp-form-course-filter';\n+\t\t\t\tconst courseFilter = document.querySelector( `.${ classCourseFilter }` );\n+\t\t\t\tif ( courseFilter ) {\n+\t\t\t\t\twindow.lpCourseFilter.countFieldsSelected( courseFilter );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t};\n+\n+\t\t\u002F\u002F Call API load widget\n+\t\tlpFetchAPI( url, paramsFetch, callBack );\n+\t};\n+\n+\twidgets.forEach( ( ele ) => {\n+\t\tele.classList.add( 'loaded' );\n+\t\tif ( ele.classList.contains( 'learnpress-widget-wrapper__restapi' ) ) {\n+\t\t\tgetResponse( ele );\n+\t\t}\n+\t} );\n+}\n+\n+widgetRestAPI();\n+\n+\u002F\u002F Case 2: readystatechange, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\n+document.addEventListener( 'readystatechange', ( event ) => {\n+\twidgetRestAPI();\n+} );\n+\n+\u002F\u002F Case 3: DOMContentLoaded, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\n+document.addEventListener( 'DOMContentLoaded', () => {\n+\twidgetRestAPI();\n+} );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FloadAJAX.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FloadAJAX.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FloadAJAX.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FloadAJAX.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,256 +1,261 @@\n-\u002F**\r\n- * Load all you need via AJAX\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.1.0\r\n- *\u002F\r\n-\r\n-import {\r\n-\tlpAddQueryArgs,\r\n-\tlpFetchAPI,\r\n-\tlistenElementCreated,\r\n-\tlpOnElementReady,\r\n-\tlpGetCurrentURLNoParam,\r\n-\tlpShowHideEl,\r\n-} from '.\u002Futils.js';\r\n-\r\n-\u002F\u002F Handle general parameter in the Frontend and Backend\r\n-let lpSettings = {};\r\n-if ( 'undefined' !== typeof lpDataAdmin ) {\r\n-\tlpSettings = lpDataAdmin;\r\n-} else if ( 'undefined' !== typeof lpData ) {\r\n-\tlpSettings = lpData;\r\n-}\r\n-\u002F\u002F End Handle general parameter in the Frontend and Backend\r\n-\r\n-const lpAJAX = ( () => {\r\n-\tconst classLPTarget = '.lp-target';\r\n-\tconst urlCurrent = lpGetCurrentURLNoParam();\r\n-\r\n-\treturn {\r\n-\t\tautoLoadAPIs: () => {\r\n-\t\t\tconsole.log( 'autoLoadAPIs' );\r\n-\t\t},\r\n-\t\tfetchAPI: ( url, params, callBack ) => {\r\n-\t\t\tconst option = { headers: {} };\r\n-\t\t\tif ( 0 !== parseInt( lpSettings.user_id ) ) {\r\n-\t\t\t\toption.headers[ 'X-WP-Nonce' ] = lpSettings.nonce;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 'undefined' !== typeof params.args.method_request ) {\r\n-\t\t\t\toption.method = params.args.method_request;\r\n-\t\t\t} else {\r\n-\t\t\t\toption.method = 'POST';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002Fparams.args = { ...params.args, ...lpData.urlParams };\r\n-\r\n-\t\t\tif ( 'POST' === option.method ) {\r\n-\t\t\t\toption.body = JSON.stringify( params );\r\n-\t\t\t\toption.headers[ 'Content-Type' ] = 'application\u002Fjson';\r\n-\t\t\t} else {\r\n-\t\t\t\tparams.args = JSON.stringify( params.args );\r\n-\t\t\t\tparams.callback = JSON.stringify( params.callback );\r\n-\t\t\t\turl = lpAddQueryArgs( url, params );\r\n-\t\t\t}\r\n-\r\n-\t\t\tlpFetchAPI( url, option, callBack );\r\n-\t\t},\r\n-\t\tfetchAJAX: ( params, callBack ) => {\r\n-\t\t\tlet urlAjax = lpSettings.lpAjaxUrl;\r\n-\r\n-\t\t\t\u002F\u002F Set param id_url for identify.\r\n-\t\t\tif ( params.hasOwnProperty( 'args' ) && params.args.hasOwnProperty( 'id_url' ) ) {\r\n-\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { id_url: params.args.id_url } );\r\n-\t\t\t} else if ( params.hasOwnProperty( 'id_url' ) ) {\r\n-\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { id_url: params.id_url } );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Set param lang here if exits, for detect translate\r\n-\t\t\tif ( lpSettings.urlParams.hasOwnProperty( 'lang' ) ) {\r\n-\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { lang: lpSettings.urlParams.lang } );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst formData = new FormData();\r\n-\t\t\tconst action = params.hasOwnProperty( 'action' ) ? params.action : 'load_content_via_ajax';\r\n-\t\t\tformData.append( 'nonce', lpSettings.nonce );\r\n-\t\t\tformData.append( 'lp-load-ajax', action );\r\n-\t\t\tformData.append( 'data', JSON.stringify( params ) );\r\n-\t\t\tconst dataSend = {\r\n-\t\t\t\tmethod: 'POST',\r\n-\t\t\t\theaders: {},\r\n-\t\t\t\tbody: formData,\r\n-\t\t\t};\r\n-\r\n-\t\t\tif ( 0 !== parseInt( lpSettings.user_id ) ) {\r\n-\t\t\t\tdataSend.headers[ 'X-WP-Nonce' ] = lpSettings.nonce;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlpFetchAPI( urlAjax, dataSend, callBack );\r\n-\t\t},\r\n-\t\tgetElements: () => {\r\n-\t\t\t\u002F\u002F Finds all elements with the class '.lp-load-ajax-element'\r\n-\t\t\tconst elements = document.querySelectorAll( '.lp-load-ajax-element:not(.loaded)' );\r\n-\t\t\t\u002F\u002Fconsole.log( 'getElements', elements );\r\n-\t\t\tif ( elements.length ) {\r\n-\t\t\t\telements.forEach( ( element ) => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'Element handing', element );\r\n-\t\t\t\t\tconst elTarget = element.querySelector( `${ classLPTarget }` );\r\n-\t\t\t\t\tif ( ! elTarget ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tconst dataObj = JSON.parse( elTarget.dataset.send );\r\n-\t\t\t\t\tconst dataSend = { ...dataObj };\r\n-\t\t\t\t\tconst elLoadingFirst = element.querySelector( '.loading-first' );\r\n-\r\n-\t\t\t\t\tconst callBack = {\r\n-\t\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\t\tconst { status, message, data } = response;\r\n-\r\n-\t\t\t\t\t\t\tif ( 'success' === status ) {\r\n-\t\t\t\t\t\t\t\telTarget.innerHTML = data.content;\r\n-\t\t\t\t\t\t\t} else if ( 'error' === status ) {\r\n-\t\t\t\t\t\t\t\telTarget.innerHTML = message;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\t\twp.hooks.doAction( 'lp-ajax-completed', element, dataSend );\r\n-\t\t\t\t\t\t\twindow.lpAJAXG.getElements();\r\n-\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\t\t\tif ( elLoadingFirst ) {\r\n-\t\t\t\t\t\t\t\telLoadingFirst.remove();\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\t\t\u002F\u002F Call via AJAX\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t\t\t\telement.classList.add( 'loaded' );\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\tclickNumberPage: ( e, target ) => {\r\n-\t\t\tconst btnNumber = target.closest( '.page-numbers:not(.disabled)' );\r\n-\t\t\tif ( ! btnNumber ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst elLPTarget = btnNumber.closest( `${ classLPTarget }` );\r\n-\t\t\tif ( ! elLPTarget ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\te.preventDefault();\r\n-\r\n-\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\r\n-\t\t\tconst dataSend = { ...dataObj };\r\n-\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\r\n-\t\t\t\tdataSend.args.paged = 1;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( btnNumber.classList.contains( 'prev' ) ) {\r\n-\t\t\t\tdataSend.args.paged--;\r\n-\t\t\t} else if ( btnNumber.classList.contains( 'next' ) ) {\r\n-\t\t\t\tdataSend.args.paged++;\r\n-\t\t\t} else {\r\n-\t\t\t\tconst pagedNumber = parseInt( btnNumber.textContent );\r\n-\t\t\t\tif ( isNaN( pagedNumber ) || pagedNumber \u003C 1 ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdataSend.args.paged = pagedNumber;\r\n-\t\t\t}\r\n-\r\n-\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\r\n-\t\t\t\u002F\u002F Set url params to reload page.\r\n-\t\t\tif ( ! dataSend.args.hasOwnProperty( 'enableUpdateParamsUrl' ) ||\r\n-\t\t\t\tdataSend.args.enableUpdateParamsUrl ) {\r\n-\t\t\t\tlpSettings.urlParams.paged = dataSend.args.paged;\r\n-\t\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( urlCurrent, lpSettings.urlParams ) );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t\u002F\u002F Show loading\r\n-\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\u002F\u002F Scroll to archive element\r\n-\t\t\tif ( ! dataSend.args.hasOwnProperty( 'enableScrollToView' ) ||\r\n-\t\t\t\tdataSend.args.enableScrollToView ) {\r\n-\t\t\t\tconst elLPTargetY = elLPTarget.getBoundingClientRect().top + window.scrollY - 100;\r\n-\t\t\t\twindow.scrollTo( { top: elLPTargetY } );\r\n-\t\t\t}\r\n-\r\n-\t\t\tconst callBack = {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\r\n-\t\t\t\t\tconst { status, message, data } = response;\r\n-\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tconsole.log( error );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\r\n-\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t};\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\r\n-\t\t},\r\n-\t\tgetDataSetCurrent: ( elLPTarget ) => {\r\n-\t\t\treturn JSON.parse( elLPTarget.dataset.send );\r\n-\t\t},\r\n-\t\tsetDataSetCurrent: ( elLPTarget, dataSend ) => {\r\n-\t\t\treturn elLPTarget.dataset.send = JSON.stringify( dataSend );\r\n-\t\t},\r\n-\t\tshowHideLoading: ( elLPTarget, status ) => {\r\n-\t\t\tconst elLoading = elLPTarget.nextElementSibling?.querySelector( '.lp-loading-change' );\r\n-\t\t\tif ( elLoading ) {\r\n-\t\t\t\tlpShowHideEl( elLoading, status );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t};\r\n-} );\r\n-\r\n-window.lpAJAXG = lpAJAX();\r\n-window.lpAJAXG.getElements();\r\n-\r\n-\u002F\u002F Events\r\n-document.addEventListener( 'click', function( e ) {\r\n-\tconst target = e.target;\r\n-\r\n-\twindow.lpAJAXG.clickNumberPage( e, target );\r\n-} );\r\n-\r\n-\u002F\u002F Listen element created\r\n-listenElementCreated( ( node ) => {\r\n-\tif ( node.classList.contains( 'lp-load-ajax-element' ) ) {\r\n-\t\t\u002F\u002Fconsole.log( 'Element created', node );\r\n-\t\twindow.lpAJAXG.getElements();\r\n-\t}\r\n-} );\r\n-\r\n-\u002F\u002F Listen element ready\r\n-lpOnElementReady( '.lp-load-ajax-element', ( element ) => {\r\n-\t\u002F\u002Fconsole.log( 'Element ready', element );\r\n-\twindow.lpAJAXG.getElements();\r\n-} );\r\n-\r\n-\u002F\u002F Case 2: readystatechange, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\r\n-document.addEventListener( 'readystatechange', ( event ) => {\r\n-\t\u002F\u002Fconsole.log( 'readystatechange' );\r\n-\twindow.lpAJAXG.getElements();\r\n-} );\r\n-\r\n-\u002F\u002F Case 3: DOMContentLoaded, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\r\n-document.addEventListener( 'DOMContentLoaded', () => {\r\n-\t\u002F\u002Fconsole.log( 'DOMContentLoaded' );\r\n-\twindow.lpAJAXG.getElements();\r\n-} );\r\n-\r\n-export default lpAJAX;\r\n+\u002F**\n+ * Load all you need via AJAX\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.1.0\n+ *\u002F\n+\n+import {\n+\tlpAddQueryArgs,\n+\tlpFetchAPI,\n+\tlistenElementCreated,\n+\tlpOnElementReady,\n+\tlpGetCurrentURLNoParam,\n+\tlpShowHideEl,\n+} from '.\u002Futils.js';\n+\n+\u002F\u002F Handle general parameter in the Frontend and Backend\n+let lpSettings = {};\n+if ( 'undefined' !== typeof lpDataAdmin ) {\n+\tlpSettings = lpDataAdmin;\n+} else if ( 'undefined' !== typeof lpData ) {\n+\tlpSettings = lpData;\n+}\n+\u002F\u002F End Handle general parameter in the Frontend and Backend\n+\n+const lpAJAX = () => {\n+\tconst classLPTarget = '.lp-target';\n+\tconst urlCurrent = lpGetCurrentURLNoParam();\n+\n+\treturn {\n+\t\tautoLoadAPIs: () => {\n+\t\t\tconsole.log( 'autoLoadAPIs' );\n+\t\t},\n+\t\tfetchAPI: ( url, params, callBack ) => {\n+\t\t\tconst option = { headers: {} };\n+\t\t\tif ( 0 !== parseInt( lpSettings.user_id ) ) {\n+\t\t\t\toption.headers[ 'X-WP-Nonce' ] = lpSettings.nonce;\n+\t\t\t}\n+\n+\t\t\tif ( 'undefined' !== typeof params.args.method_request ) {\n+\t\t\t\toption.method = params.args.method_request;\n+\t\t\t} else {\n+\t\t\t\toption.method = 'POST';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002Fparams.args = { ...params.args, ...lpData.urlParams };\n+\n+\t\t\tif ( 'POST' === option.method ) {\n+\t\t\t\toption.body = JSON.stringify( params );\n+\t\t\t\toption.headers[ 'Content-Type' ] = 'application\u002Fjson';\n+\t\t\t} else {\n+\t\t\t\tparams.args = JSON.stringify( params.args );\n+\t\t\t\tparams.callback = JSON.stringify( params.callback );\n+\t\t\t\turl = lpAddQueryArgs( url, params );\n+\t\t\t}\n+\n+\t\t\tlpFetchAPI( url, option, callBack );\n+\t\t},\n+\t\tfetchAJAX: ( params, callBack ) => {\n+\t\t\tlet urlAjax = lpSettings.lpAjaxUrl;\n+\n+\t\t\t\u002F\u002F Set param id_url for identify.\n+\t\t\tif ( params.hasOwnProperty( 'args' ) && params.args.hasOwnProperty( 'id_url' ) ) {\n+\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { id_url: params.args.id_url } );\n+\t\t\t} else if ( params.hasOwnProperty( 'id_url' ) ) {\n+\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { id_url: params.id_url } );\n+\t\t\t}\n+\t\t\t\u002F\u002F Set param lang here if exits, for detect translate\n+\t\t\tif ( lpSettings.urlParams.hasOwnProperty( 'lang' ) ) {\n+\t\t\t\turlAjax = lpAddQueryArgs( urlAjax, { lang: lpSettings.urlParams.lang } );\n+\t\t\t}\n+\n+\t\t\tconst formData = new FormData();\n+\t\t\tconst action = params.hasOwnProperty( 'action' ) ? params.action : 'load_content_via_ajax';\n+\t\t\tformData.append( 'nonce', lpSettings.nonce );\n+\t\t\tformData.append( 'lp-load-ajax', action );\n+\t\t\tformData.append( 'data', JSON.stringify( params ) );\n+\t\t\tconst dataSend = {\n+\t\t\t\tmethod: 'POST',\n+\t\t\t\theaders: {},\n+\t\t\t\tbody: formData,\n+\t\t\t};\n+\n+\t\t\tif ( 0 !== parseInt( lpSettings.user_id ) ) {\n+\t\t\t\tdataSend.headers[ 'X-WP-Nonce' ] = lpSettings.nonce;\n+\t\t\t}\n+\n+\t\t\tlpFetchAPI( urlAjax, dataSend, callBack );\n+\t\t},\n+\t\tgetElements: () => {\n+\t\t\t\u002F\u002F Finds all elements with the class '.lp-load-ajax-element'\n+\t\t\tconst elements = document.querySelectorAll( '.lp-load-ajax-element:not(.loaded)' );\n+\t\t\t\u002F\u002Fconsole.log( 'getElements', elements );\n+\t\t\tif ( elements.length ) {\n+\t\t\t\telements.forEach( ( element ) => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'Element handing', element );\n+\t\t\t\t\tconst elTarget = element.querySelector( `${ classLPTarget }` );\n+\t\t\t\t\tif ( ! elTarget ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tconst dataObj = JSON.parse( elTarget.dataset.send );\n+\t\t\t\t\tconst dataSend = { ...dataObj };\n+\t\t\t\t\tconst elLoadingFirst = element.querySelector( '.loading-first' );\n+\n+\t\t\t\t\tconst callBack = {\n+\t\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\t\tconst { status, message, data } = response;\n+\n+\t\t\t\t\t\t\tif ( 'success' === status ) {\n+\t\t\t\t\t\t\t\telTarget.innerHTML = data.content;\n+\t\t\t\t\t\t\t} else if ( 'error' === status ) {\n+\t\t\t\t\t\t\t\telTarget.innerHTML = message;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\terror: ( error ) => {\n+\t\t\t\t\t\t\tconsole.log( error );\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\t\tif ( typeof wp !== 'undefined' && wp.hooks ) {\n+\t\t\t\t\t\t\t\twp.hooks.doAction( 'lp-ajax-completed', element, dataSend );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\twindow.lpAJAXG.getElements();\n+\t\t\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\t\t\tif ( elLoadingFirst ) {\n+\t\t\t\t\t\t\t\telLoadingFirst.remove();\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t},\n+\t\t\t\t\t};\n+\n+\t\t\t\t\t\u002F\u002F Call via AJAX\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t\t\t\telement.classList.add( 'loaded' );\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t},\n+\t\tclickNumberPage: ( e, target ) => {\n+\t\t\tconst btnNumber = target.closest( '.page-numbers:not(.disabled)' );\n+\t\t\tif ( ! btnNumber ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tconst elLPTarget = btnNumber.closest( `${ classLPTarget }` );\n+\t\t\tif ( ! elLPTarget ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\te.preventDefault();\n+\n+\t\t\tconst dataObj = JSON.parse( elLPTarget.dataset.send );\n+\t\t\tconst dataSend = { ...dataObj };\n+\t\t\tif ( ! dataSend.args.hasOwnProperty( 'paged' ) ) {\n+\t\t\t\tdataSend.args.paged = 1;\n+\t\t\t}\n+\n+\t\t\tif ( btnNumber.classList.contains( 'prev' ) ) {\n+\t\t\t\tdataSend.args.paged--;\n+\t\t\t} else if ( btnNumber.classList.contains( 'next' ) ) {\n+\t\t\t\tdataSend.args.paged++;\n+\t\t\t} else {\n+\t\t\t\tconst pagedNumber = parseInt( btnNumber.textContent );\n+\t\t\t\tif ( isNaN( pagedNumber ) || pagedNumber \u003C 1 ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tdataSend.args.paged = pagedNumber;\n+\t\t\t}\n+\n+\t\t\telLPTarget.dataset.send = JSON.stringify( dataSend );\n+\n+\t\t\t\u002F\u002F Set url params to reload page.\n+\t\t\tif ( ! dataSend.args.hasOwnProperty( 'enableUpdateParamsUrl' ) ||\n+\t\t\t\tdataSend.args.enableUpdateParamsUrl ) {\n+\t\t\t\tlpSettings.urlParams.paged = dataSend.args.paged;\n+\t\t\t\twindow.history.pushState( {}, '', lpAddQueryArgs( urlCurrent, lpSettings.urlParams ) );\n+\t\t\t}\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t\u002F\u002F Show loading\n+\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\t\u002F\u002F Scroll to archive element\n+\t\t\tif (\n+\t\t\t\t! dataSend.args.hasOwnProperty( 'enableScrollToView' ) ||\n+\t\t\t\tdataSend.args.enableScrollToView\n+\t\t\t) {\n+\t\t\t\tconst elLPTargetY = elLPTarget.getBoundingClientRect().top + window.scrollY - 100;\n+\t\t\t\twindow.scrollTo( { top: elLPTargetY } );\n+\t\t\t}\n+\n+\t\t\tconst callBack = {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'response', response );\n+\t\t\t\t\tconst { status, message, data } = response;\n+\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tconsole.log( error );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\t\u002F\u002Fconsole.log( 'completed' );\n+\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\n+\t\t\t\t},\n+\t\t\t};\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, callBack );\n+\t\t},\n+\t\tgetDataSetCurrent: ( elLPTarget ) => {\n+\t\t\treturn JSON.parse( elLPTarget.dataset.send );\n+\t\t},\n+\t\tsetDataSetCurrent: ( elLPTarget, dataSend ) => {\n+\t\t\treturn ( elLPTarget.dataset.send = JSON.stringify( dataSend ) );\n+\t\t},\n+\t\tshowHideLoading: ( elLPTarget, status ) => {\n+\t\t\tconst elLoading = elLPTarget.nextElementSibling?.querySelector( '.lp-loading-change' );\n+\t\t\tif ( elLoading ) {\n+\t\t\t\tlpShowHideEl( elLoading, status );\n+\t\t\t}\n+\t\t},\n+\t};\n+};\n+\n+window.lpAJAXG = lpAJAX();\n+window.lpAJAXG.getElements();\n+\n+\u002F\u002F Events\n+document.addEventListener( 'click', function ( e ) {\n+\tconst target = e.target;\n+\n+\twindow.lpAJAXG.clickNumberPage( e, target );\n+} );\n+\n+\u002F\u002F Listen element created\n+listenElementCreated( ( node ) => {\n+\tif ( node.classList.contains( 'lp-load-ajax-element' ) ) {\n+\t\t\u002F\u002Fconsole.log( 'Element created', node );\n+\t\twindow.lpAJAXG.getElements();\n+\t}\n+} );\n+\n+\u002F\u002F Listen element ready\n+lpOnElementReady( '.lp-load-ajax-element', ( element ) => {\n+\t\u002F\u002Fconsole.log( 'Element ready', element );\n+\twindow.lpAJAXG.getElements();\n+} );\n+\n+\u002F\u002F Case 2: readystatechange, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\n+document.addEventListener( 'readystatechange', ( event ) => {\n+\t\u002F\u002Fconsole.log( 'readystatechange' );\n+\twindow.lpAJAXG.getElements();\n+} );\n+\n+\u002F\u002F Case 3: DOMContentLoaded, find all elements with the class '.lp-load-ajax-element' not have class 'loaded'\n+document.addEventListener( 'DOMContentLoaded', () => {\n+\t\u002F\u002Fconsole.log( 'DOMContentLoaded' );\n+\twindow.lpAJAXG.getElements();\n+} );\n+\n+export default lpAJAX;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FlpPopupSelectItemToAdd.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,472 +1,475 @@\n-\u002F**\r\n- *  LearnPress Popup Select Item\r\n- *\r\n- *  Handles load(search) item from API, show in popup and select item.\r\n- *\u002F\r\n-\r\n-import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\r\n-import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\r\n-import SweetAlert from 'sweetalert2';\r\n-\r\n-let itemsSelectedData = [];\r\n-let elPopup;\r\n-let timeSearchTitleItem;\r\n-\r\n-export class LpPopupSelectItemToAdd {\r\n-\tconstructor() {\r\n-\t\tthis.init();\r\n-\t}\r\n-\r\n-\tstatic selectors = {\r\n-\t\telBtnShowPopupItemsToSelect: '.lp-btn-show-popup-items-to-select',\r\n-\t\telBtnAddItemsSelected: '.lp-btn-add-items-selected',\r\n-\t\telBtnCountItemsSelected: '.lp-btn-count-items-selected',\r\n-\t\telHeaderCountItemSelected: '.header-count-items-selected',\r\n-\t\telSelectItem: '.lp-select-item',\r\n-\t\telListItems: '.list-items',\r\n-\t\telPopupItemsToSelect: '.lp-popup-items-to-select',\r\n-\t\telSearchTitleItem: '.lp-search-title-item',\r\n-\t\telBtnBackListItems: '.lp-btn-back-to-select-items',\r\n-\t\telListItemsWrap: '.list-items-wrap',\r\n-\t\telListItemsSelected: '.list-items-selected',\r\n-\t\telItemSelectedClone: '.li-item-selected.clone',\r\n-\t\telItemSelected: '.li-item-selected',\r\n-\t\tLPTarget: '.lp-target',\r\n-\t};\r\n-\r\n-\tinit() {\r\n-\t\tthis.events();\r\n-\t}\r\n-\r\n-\tevents = () => {\r\n-\t\tif ( LpPopupSelectItemToAdd._loadedEvents ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tLpPopupSelectItemToAdd._loadedEvents = true;\r\n-\r\n-\t\tlpUtils.eventHandlers( 'click', [\r\n-\t\t\t{\r\n-\t\t\t\tselector:\r\n-\t\t\t\t\tLpPopupSelectItemToAdd.selectors\r\n-\t\t\t\t\t\t.elBtnShowPopupItemsToSelect,\r\n-\t\t\t\tcallBack: this.showPopupItemsToSelect.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elSelectItem,\r\n-\t\t\t\tcallBack: this.selectItemsFromList.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector:\r\n-\t\t\t\t\tLpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected,\r\n-\t\t\t\tcallBack: this.showItemsSelected.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnBackListItems,\r\n-\t\t\t\tcallBack: this.backToSelectItems.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elItemSelected,\r\n-\t\t\t\tcallBack: this.removeItemSelected.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t\t{\r\n-\t\t\t\tselector: '.tabs .tab',\r\n-\t\t\t\tcallBack: this.chooseTabItemsType.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\r\n-\t\tlpUtils.eventHandlers( 'keyup', [\r\n-\t\t\t{\r\n-\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elSearchTitleItem,\r\n-\t\t\t\tcallBack: this.searchTitleItemToSelect.name,\r\n-\t\t\t\tclass: this,\r\n-\t\t\t},\r\n-\t\t] );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Show popup items to select\r\n-\tshowPopupItemsToSelect = ( args ) => {\r\n-\t\tconst { e, target = false, callBack } = args;\r\n-\t\tconst elBtnShowPopupItemsToSelect = target.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnShowPopupItemsToSelect ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst templateId = target.dataset.template || '';\r\n-\t\tconst modalTemplate = document.querySelector( templateId );\r\n-\r\n-\t\tSweetAlert.fire( {\r\n-\t\t\thtml: modalTemplate.innerHTML,\r\n-\t\t\tshowConfirmButton: false,\r\n-\t\t\tshowCloseButton: true,\r\n-\t\t\twidth: '60%',\r\n-\t\t\tcustomClass: {\r\n-\t\t\t\tpopup: 'lp-select-items-popup',\r\n-\t\t\t\thtmlContainer: 'lp-select-items-html-container',\r\n-\t\t\t\tcontainer: 'lp-select-items-container',\r\n-\t\t\t},\r\n-\t\t\twillOpen: () => {\r\n-\t\t\t\telPopup = SweetAlert.getPopup();\r\n-\r\n-\t\t\t\tconst elLPTarget = elPopup.querySelector(\r\n-\t\t\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( elLPTarget ) {\r\n-\t\t\t\t\tconst dataSend =\r\n-\t\t\t\t\t\twindow.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\t\t\t\tdataSend.args.paged = 1;\r\n-\t\t\t\t\tdataSend.args.item_selecting = itemsSelectedData || [];\r\n-\t\t\t\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSend );\r\n-\r\n-\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\r\n-\t\t\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\t\t\tconst { data } = response;\r\n-\t\t\t\t\t\t\tconst elSkeleton = elPopup.querySelector(\r\n-\t\t\t\t\t\t\t\t'.lp-skeleton-animation'\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\telSkeleton.remove();\r\n-\t\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\r\n-\t\t\t\t\t\t\tthis.watchItemsSelectedDataChange();\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t} ).then( ( result ) => {\r\n-\t\t\tif ( result.isDismissed ) {\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Choose tab items type\r\n-\tchooseTabItemsType = ( args ) => {\r\n-\t\tconst { e, target, callBack } = args;\r\n-\t\tconst elTabType = target.closest( '.tab' );\r\n-\t\tif ( ! elTabType ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\te.preventDefault();\r\n-\r\n-\t\tconst elTabs = elTabType.closest( '.tabs' );\r\n-\t\tif ( ! elTabs ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elSelectItemsToAdd = elTabs.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elPopupItemsToSelect }`\r\n-\t\t);\r\n-\t\tconst elInputSearch = elSelectItemsToAdd.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elSearchTitleItem }`\r\n-\t\t);\r\n-\r\n-\t\tconst itemType = elTabType.dataset.type;\r\n-\t\tconst elTabLis = elTabs.querySelectorAll( '.tab' );\r\n-\t\telTabLis.forEach( ( elTabLi ) => {\r\n-\t\t\tif ( elTabLi.classList.contains( 'active' ) ) {\r\n-\t\t\t\telTabLi.classList.remove( 'active' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t\telTabType.classList.add( 'active' );\r\n-\t\t\u002F\u002F Reset search input\r\n-\t\telInputSearch.value = '';\r\n-\r\n-\t\tconst elLPTarget = elSelectItemsToAdd.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\r\n-\t\t);\r\n-\r\n-\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\tdataSend.args.item_type = itemType;\r\n-\t\tdataSend.args.paged = 1;\r\n-\t\tdataSend.args.item_selecting = itemsSelectedData || [];\r\n-\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSend );\r\n-\r\n-\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\r\n-\r\n-\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\r\n-\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\tconst { data } = response;\r\n-\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t},\r\n-\t\t\terror: ( error ) => {\r\n-\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t},\r\n-\t\t\tcompleted: () => {\r\n-\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\tthis.watchItemsSelectedDataChange();\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Choice items to add list items selected before adding to section\r\n-\tselectItemsFromList = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elItemAttend = target.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elSelectItem }`\r\n-\t\t);\r\n-\t\tif ( ! elItemAttend ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elInput = elItemAttend.querySelector( 'input[type=\"checkbox\"]' );\r\n-\t\tif ( target.tagName !== 'INPUT' ) {\r\n-\t\t\telInput.click();\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elUl = elItemAttend.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItems }`\r\n-\t\t);\r\n-\t\tif ( ! elUl ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst itemSelected = { ...elInput.dataset };\r\n-\t\t\u002F\u002Fconsole.log( 'itemSelected', itemSelected );\r\n-\r\n-\t\tif ( elInput.checked ) {\r\n-\t\t\tconst exists = itemsSelectedData.some(\r\n-\t\t\t\t( item ) => item.id === itemSelected.id\r\n-\t\t\t);\r\n-\t\t\tif ( ! exists ) {\r\n-\t\t\t\titemsSelectedData.push( itemSelected );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tconst index = itemsSelectedData.findIndex(\r\n-\t\t\t\t( item ) => item.id === itemSelected.id\r\n-\t\t\t);\r\n-\t\t\tif ( index !== -1 ) {\r\n-\t\t\t\titemsSelectedData.splice( index, 1 );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tthis.watchItemsSelectedDataChange();\r\n-\t};\r\n-\r\n-\t\u002F\u002F Search title item\r\n-\tsearchTitleItemToSelect = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elInputSearch = target.closest(\r\n-\t\t\tLpPopupSelectItemToAdd.selectors.elSearchTitleItem\r\n-\t\t);\r\n-\t\tif ( ! elInputSearch ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elLPTarget = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\r\n-\t\t);\r\n-\r\n-\t\tclearTimeout( timeSearchTitleItem );\r\n-\r\n-\t\ttimeSearchTitleItem = setTimeout( () => {\r\n-\t\t\tconst dataSet = window.lpAJAXG.getDataSetCurrent( elLPTarget );\r\n-\t\t\tdataSet.args.search_title = elInputSearch.value.trim();\r\n-\t\t\tdataSet.args.item_selecting = itemsSelectedData;\r\n-\t\t\tdataSet.args.paged = 1;\r\n-\t\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSet );\r\n-\r\n-\t\t\t\u002F\u002F Show loading\r\n-\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\r\n-\r\n-\t\t\twindow.lpAJAXG.fetchAJAX( dataSet, {\r\n-\t\t\t\tsuccess: ( response ) => {\r\n-\t\t\t\t\tconst { data } = response;\r\n-\t\t\t\t\telLPTarget.innerHTML = data.content || '';\r\n-\t\t\t\t},\r\n-\t\t\t\terror: ( error ) => {\r\n-\t\t\t\t\tlpToastify.show( error, 'error' );\r\n-\t\t\t\t},\r\n-\t\t\t\tcompleted: () => {\r\n-\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\r\n-\t\t\t\t},\r\n-\t\t\t} );\r\n-\t\t}, 800 );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Show list of items, to choose items to add to section\r\n-\tshowItemsSelected = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnCountItemsSelected = target.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnCountItemsSelected ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnBack = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnBackListItems }`\r\n-\t\t);\r\n-\t\tconst elTabs = elPopup.querySelector( '.tabs' );\r\n-\t\tconst elListItemsWrap = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsWrap }`\r\n-\t\t);\r\n-\t\tconst elHeaderItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\r\n-\t\t);\r\n-\t\tconst elListItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsSelected }`\r\n-\t\t);\r\n-\t\tconst elItemClone = elListItemsSelected.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelectedClone }`\r\n-\t\t);\r\n-\t\telHeaderItemsSelected.innerHTML = elBtnCountItemsSelected.innerHTML;\r\n-\r\n-\t\tlpUtils.lpShowHideEl( elListItemsWrap, 0 );\r\n-\t\tlpUtils.lpShowHideEl( elBtnCountItemsSelected, 0 );\r\n-\t\tlpUtils.lpShowHideEl( elTabs, 0 );\r\n-\t\tlpUtils.lpShowHideEl( elBtnBack, 1 );\r\n-\t\tlpUtils.lpShowHideEl( elHeaderItemsSelected, 1 );\r\n-\t\tlpUtils.lpShowHideEl( elListItemsSelected, 1 );\r\n-\r\n-\t\telListItemsSelected\r\n-\t\t\t.querySelectorAll(\r\n-\t\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelected }:not(.clone)`\r\n-\t\t\t)\r\n-\t\t\t.forEach( ( elItem ) => {\r\n-\t\t\t\telItem.remove();\r\n-\t\t\t} );\r\n-\t\titemsSelectedData.forEach( ( item ) => {\r\n-\t\t\tconst elItemSelected = elItemClone.cloneNode( true );\r\n-\t\t\telItemSelected.classList.remove( 'clone' );\r\n-\t\t\tObject.entries( item ).forEach( ( [ key, value ] ) => {\r\n-\t\t\t\telItemSelected.dataset[ key ] = value;\r\n-\t\t\t} );\r\n-\t\t\tconst elTitleDisplay =\r\n-\t\t\t\telItemSelected.querySelector( '.title-display' );\r\n-\t\t\telTitleDisplay.innerHTML = item.title;\r\n-\r\n-\t\t\tlpUtils.lpShowHideEl( elItemSelected, 1 );\r\n-\r\n-\t\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemSelected );\r\n-\t\t} );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Back to list of items\r\n-\tbackToSelectItems = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elBtnBack = target.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnBackListItems }`\r\n-\t\t);\r\n-\t\tif ( ! elBtnBack ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst elBtnCountItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\r\n-\t\t);\r\n-\t\tconst elTabs = elPopup.querySelector( '.tabs' );\r\n-\t\tconst elListItemsWrap = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsWrap }`\r\n-\t\t);\r\n-\t\tconst elHeaderCountItemSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\r\n-\t\t);\r\n-\t\tconst elListItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsSelected }`\r\n-\t\t);\r\n-\t\tlpUtils.lpShowHideEl( elBtnCountItemsSelected, 1 );\r\n-\t\tlpUtils.lpShowHideEl( elListItemsWrap, 1 );\r\n-\t\tlpUtils.lpShowHideEl( elTabs, 1 );\r\n-\t\tlpUtils.lpShowHideEl( elBtnBack, 0 );\r\n-\t\tlpUtils.lpShowHideEl( elHeaderCountItemSelected, 0 );\r\n-\t\tlpUtils.lpShowHideEl( elListItemsSelected, 0 );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Remove item selected from list items selected\r\n-\tremoveItemSelected = ( args ) => {\r\n-\t\tconst { e, target } = args;\r\n-\t\tconst elRemoveItemSelected = target.closest(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelected }`\r\n-\t\t);\r\n-\t\tif ( ! elRemoveItemSelected ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tconst itemRemove = elRemoveItemSelected.dataset;\r\n-\t\tconst index = itemsSelectedData.findIndex(\r\n-\t\t\t( item ) => item.id === itemRemove.id\r\n-\t\t);\r\n-\t\tif ( index !== -1 ) {\r\n-\t\t\titemsSelectedData.splice( index, 1 );\r\n-\t\t}\r\n-\r\n-\t\telRemoveItemSelected.remove();\r\n-\r\n-\t\tthis.watchItemsSelectedDataChange();\r\n-\t};\r\n-\r\n-\t\u002F\u002F Watch items selected when data change\r\n-\twatchItemsSelectedDataChange = () => {\r\n-\t\t\u002F\u002F Update count items selected, disable\u002Fenable buttons\r\n-\t\tconst elBtnAddItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected }`\r\n-\t\t);\r\n-\t\tconst elBtnCountItemsSelected = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\r\n-\t\t);\r\n-\t\tconst elSpanCount = elBtnCountItemsSelected.querySelector( 'span' );\r\n-\t\tconst elHeaderCount = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\r\n-\t\t);\r\n-\t\tconst elTarget = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\r\n-\t\t);\r\n-\r\n-\t\tif ( itemsSelectedData.length !== 0 ) {\r\n-\t\t\telBtnCountItemsSelected.disabled = false;\r\n-\t\t\telBtnAddItemsSelected.disabled = false;\r\n-\t\t\telBtnAddItemsSelected.classList.add( 'active' );\r\n-\t\t\telSpanCount.textContent = `(${ itemsSelectedData.length })`;\r\n-\t\t\telHeaderCount.innerHTML = elBtnCountItemsSelected.innerHTML;\r\n-\t\t} else {\r\n-\t\t\telBtnCountItemsSelected.disabled = true;\r\n-\t\t\telBtnAddItemsSelected.disabled = true;\r\n-\t\t\telBtnAddItemsSelected.classList.remove( 'active' );\r\n-\t\t\telSpanCount.textContent = '';\r\n-\t\t\telHeaderCount.textContent = '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Update list input checked, when items removed, or change tab type\r\n-\t\tconst elListItems = elPopup.querySelector(\r\n-\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItems }`\r\n-\t\t);\r\n-\t\tconst elInputs = elListItems.querySelectorAll(\r\n-\t\t\t'input[type=\"checkbox\"]'\r\n-\t\t);\r\n-\t\telInputs.forEach( ( elInputItem ) => {\r\n-\t\t\tconst itemSelected = elInputItem.dataset;\r\n-\t\t\tconst exists = itemsSelectedData.some(\r\n-\t\t\t\t( item ) => item.id === itemSelected.id\r\n-\t\t\t);\r\n-\t\t\telInputItem.checked = exists;\r\n-\t\t} );\r\n-\r\n-\t\t\u002F\u002F Set item selecting data to dataset for query.\r\n-\t\tconst dataSet = window.lpAJAXG.getDataSetCurrent( elTarget );\r\n-\t\tdataSet.args.item_selecting = itemsSelectedData;\r\n-\t\twindow.lpAJAXG.setDataSetCurrent( elTarget, dataSet );\r\n-\t};\r\n-\r\n-\t\u002F\u002F Add items selected to section\r\n-\taddItemsSelectedToSection = ( args ) => {\r\n-\t\tconst { e, target, callBackHandle } = args;\r\n-\r\n-\t\tif ( ! elPopup ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tSweetAlert.close();\r\n-\r\n-\t\tif ( typeof callBackHandle === 'function' ) {\r\n-\t\t\tcallBackHandle( itemsSelectedData );\r\n-\t\t\titemsSelectedData = [];\r\n-\t\t}\r\n-\t};\r\n-}\r\n+\u002F**\n+ *  LearnPress Popup Select Item\n+ *\n+ *  Handles load(search) item from API, show in popup and select item.\n+ *\u002F\n+\n+import * as lpUtils from 'lpAssetsJsPath\u002Futils.js';\n+import * as lpToastify from 'lpAssetsJsPath\u002FlpToastify.js';\n+import SweetAlert from 'sweetalert2';\n+\n+let itemsSelectedData = [];\n+let elPopup;\n+let timeSearchTitleItem;\n+\n+export class LpPopupSelectItemToAdd {\n+\tconstructor() {\n+\t\tthis.init();\n+\t}\n+\n+\tstatic selectors = {\n+\t\telBtnShowPopupItemsToSelect: '.lp-btn-show-popup-items-to-select',\n+\t\telBtnAddItemsSelected: '.lp-btn-add-items-selected',\n+\t\telBtnCountItemsSelected: '.lp-btn-count-items-selected',\n+\t\telHeaderCountItemSelected: '.header-count-items-selected',\n+\t\telSelectItem: '.lp-select-item',\n+\t\telListItems: '.list-items',\n+\t\telPopupItemsToSelect: '.lp-popup-items-to-select',\n+\t\telSearchTitleItem: '.lp-search-title-item',\n+\t\telBtnBackListItems: '.lp-btn-back-to-select-items',\n+\t\telListItemsWrap: '.list-items-wrap',\n+\t\telListItemsSelected: '.list-items-selected',\n+\t\telItemSelectedClone: '.li-item-selected.clone',\n+\t\telItemSelected: '.li-item-selected',\n+\t\tLPTarget: '.lp-target',\n+\t};\n+\n+\tinit() {\n+\t\tthis.events();\n+\t}\n+\n+\tevents = () => {\n+\t\tif ( LpPopupSelectItemToAdd._loadedEvents ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tLpPopupSelectItemToAdd._loadedEvents = true;\n+\n+\t\tlpUtils.eventHandlers( 'click', [\n+\t\t\t{\n+\t\t\t\tselector:\n+\t\t\t\t\tLpPopupSelectItemToAdd.selectors\n+\t\t\t\t\t\t.elBtnShowPopupItemsToSelect,\n+\t\t\t\tcallBack: this.showPopupItemsToSelect.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elSelectItem,\n+\t\t\t\tcallBack: this.selectItemsFromList.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector:\n+\t\t\t\t\tLpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected,\n+\t\t\t\tcallBack: this.showItemsSelected.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elBtnBackListItems,\n+\t\t\t\tcallBack: this.backToSelectItems.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elItemSelected,\n+\t\t\t\tcallBack: this.removeItemSelected.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t\t{\n+\t\t\t\tselector: '.tabs .tab',\n+\t\t\t\tcallBack: this.chooseTabItemsType.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t] );\n+\n+\t\tlpUtils.eventHandlers( 'keyup', [\n+\t\t\t{\n+\t\t\t\tselector: LpPopupSelectItemToAdd.selectors.elSearchTitleItem,\n+\t\t\t\tcallBack: this.searchTitleItemToSelect.name,\n+\t\t\t\tclass: this,\n+\t\t\t},\n+\t\t] );\n+\t};\n+\n+\t\u002F\u002F Show popup items to select\n+\tshowPopupItemsToSelect = ( args ) => {\n+\t\tconst { e, target = false, callBack } = args;\n+\t\tconst elBtnShowPopupItemsToSelect = target.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnShowPopupItemsToSelect }`\n+\t\t);\n+\t\tif ( ! elBtnShowPopupItemsToSelect ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Reset items selected data when opening popup\n+\t\titemsSelectedData = [];\n+\n+\t\tconst templateId = target.dataset.template || '';\n+\t\tconst modalTemplate = document.querySelector( templateId );\n+\n+\t\tSweetAlert.fire( {\n+\t\t\thtml: modalTemplate.innerHTML,\n+\t\t\tshowConfirmButton: false,\n+\t\t\tshowCloseButton: true,\n+\t\t\twidth: '60%',\n+\t\t\tcustomClass: {\n+\t\t\t\tpopup: 'lp-select-items-popup',\n+\t\t\t\thtmlContainer: 'lp-select-items-html-container',\n+\t\t\t\tcontainer: 'lp-select-items-container',\n+\t\t\t},\n+\t\t\twillOpen: () => {\n+\t\t\t\telPopup = SweetAlert.getPopup();\n+\n+\t\t\t\tconst elLPTarget = elPopup.querySelector(\n+\t\t\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\n+\t\t\t\t);\n+\t\t\t\tif ( elLPTarget ) {\n+\t\t\t\t\tconst dataSend =\n+\t\t\t\t\t\twindow.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\t\t\t\tdataSend.args.paged = 1;\n+\t\t\t\t\tdataSend.args.item_selecting = itemsSelectedData || [];\n+\t\t\t\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSend );\n+\n+\t\t\t\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\n+\t\t\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\t\t\tconst { data } = response;\n+\t\t\t\t\t\t\tconst elSkeleton = elPopup.querySelector(\n+\t\t\t\t\t\t\t\t'.lp-skeleton-animation'\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\telSkeleton.remove();\n+\t\t\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\n+\t\t\t\t\t\t\tthis.watchItemsSelectedDataChange();\n+\t\t\t\t\t\t},\n+\t\t\t\t\t} );\n+\t\t\t\t}\n+\t\t\t},\n+\t\t} ).then( ( result ) => {\n+\t\t\tif ( result.isDismissed ) {\n+\t\t\t}\n+\t\t} );\n+\t};\n+\n+\t\u002F\u002F Choose tab items type\n+\tchooseTabItemsType = ( args ) => {\n+\t\tconst { e, target, callBack } = args;\n+\t\tconst elTabType = target.closest( '.tab' );\n+\t\tif ( ! elTabType ) {\n+\t\t\treturn;\n+\t\t}\n+\t\te.preventDefault();\n+\n+\t\tconst elTabs = elTabType.closest( '.tabs' );\n+\t\tif ( ! elTabs ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elSelectItemsToAdd = elTabs.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elPopupItemsToSelect }`\n+\t\t);\n+\t\tconst elInputSearch = elSelectItemsToAdd.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elSearchTitleItem }`\n+\t\t);\n+\n+\t\tconst itemType = elTabType.dataset.type;\n+\t\tconst elTabLis = elTabs.querySelectorAll( '.tab' );\n+\t\telTabLis.forEach( ( elTabLi ) => {\n+\t\t\tif ( elTabLi.classList.contains( 'active' ) ) {\n+\t\t\t\telTabLi.classList.remove( 'active' );\n+\t\t\t}\n+\t\t} );\n+\t\telTabType.classList.add( 'active' );\n+\t\t\u002F\u002F Reset search input\n+\t\telInputSearch.value = '';\n+\n+\t\tconst elLPTarget = elSelectItemsToAdd.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\n+\t\t);\n+\n+\t\tconst dataSend = window.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\tdataSend.args.item_type = itemType;\n+\t\tdataSend.args.paged = 1;\n+\t\tdataSend.args.item_selecting = itemsSelectedData || [];\n+\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSend );\n+\n+\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\n+\n+\t\twindow.lpAJAXG.fetchAJAX( dataSend, {\n+\t\t\tsuccess: ( response ) => {\n+\t\t\t\tconst { data } = response;\n+\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t},\n+\t\t\terror: ( error ) => {\n+\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t},\n+\t\t\tcompleted: () => {\n+\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\n+\t\t\t\tthis.watchItemsSelectedDataChange();\n+\t\t\t},\n+\t\t} );\n+\t};\n+\n+\t\u002F\u002F Choice items to add list items selected before adding to section\n+\tselectItemsFromList = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elItemAttend = target.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elSelectItem }`\n+\t\t);\n+\t\tif ( ! elItemAttend ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elInput = elItemAttend.querySelector( 'input[type=\"checkbox\"]' );\n+\t\tif ( target.tagName !== 'INPUT' ) {\n+\t\t\telInput.click();\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elUl = elItemAttend.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItems }`\n+\t\t);\n+\t\tif ( ! elUl ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst itemSelected = { ...elInput.dataset };\n+\t\t\u002F\u002Fconsole.log( 'itemSelected', itemSelected );\n+\n+\t\tif ( elInput.checked ) {\n+\t\t\tconst exists = itemsSelectedData.some(\n+\t\t\t\t( item ) => item.id === itemSelected.id\n+\t\t\t);\n+\t\t\tif ( ! exists ) {\n+\t\t\t\titemsSelectedData.push( itemSelected );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tconst index = itemsSelectedData.findIndex(\n+\t\t\t\t( item ) => item.id === itemSelected.id\n+\t\t\t);\n+\t\t\tif ( index !== -1 ) {\n+\t\t\t\titemsSelectedData.splice( index, 1 );\n+\t\t\t}\n+\t\t}\n+\n+\t\tthis.watchItemsSelectedDataChange();\n+\t};\n+\n+\t\u002F\u002F Search title item\n+\tsearchTitleItemToSelect = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elInputSearch = target.closest(\n+\t\t\tLpPopupSelectItemToAdd.selectors.elSearchTitleItem\n+\t\t);\n+\t\tif ( ! elInputSearch ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elLPTarget = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\n+\t\t);\n+\n+\t\tclearTimeout( timeSearchTitleItem );\n+\n+\t\ttimeSearchTitleItem = setTimeout( () => {\n+\t\t\tconst dataSet = window.lpAJAXG.getDataSetCurrent( elLPTarget );\n+\t\t\tdataSet.args.search_title = elInputSearch.value.trim();\n+\t\t\tdataSet.args.item_selecting = itemsSelectedData;\n+\t\t\tdataSet.args.paged = 1;\n+\t\t\twindow.lpAJAXG.setDataSetCurrent( elLPTarget, dataSet );\n+\n+\t\t\t\u002F\u002F Show loading\n+\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 1 );\n+\n+\t\t\twindow.lpAJAXG.fetchAJAX( dataSet, {\n+\t\t\t\tsuccess: ( response ) => {\n+\t\t\t\t\tconst { data } = response;\n+\t\t\t\t\telLPTarget.innerHTML = data.content || '';\n+\t\t\t\t},\n+\t\t\t\terror: ( error ) => {\n+\t\t\t\t\tlpToastify.show( error, 'error' );\n+\t\t\t\t},\n+\t\t\t\tcompleted: () => {\n+\t\t\t\t\twindow.lpAJAXG.showHideLoading( elLPTarget, 0 );\n+\t\t\t\t},\n+\t\t\t} );\n+\t\t}, 800 );\n+\t};\n+\n+\t\u002F\u002F Show list of items, to choose items to add to section\n+\tshowItemsSelected = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnCountItemsSelected = target.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\n+\t\t);\n+\t\tif ( ! elBtnCountItemsSelected ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnBack = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnBackListItems }`\n+\t\t);\n+\t\tconst elTabs = elPopup.querySelector( '.tabs' );\n+\t\tconst elListItemsWrap = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsWrap }`\n+\t\t);\n+\t\tconst elHeaderItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\n+\t\t);\n+\t\tconst elListItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsSelected }`\n+\t\t);\n+\t\tconst elItemClone = elListItemsSelected.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelectedClone }`\n+\t\t);\n+\t\telHeaderItemsSelected.innerHTML = elBtnCountItemsSelected.innerHTML;\n+\n+\t\tlpUtils.lpShowHideEl( elListItemsWrap, 0 );\n+\t\tlpUtils.lpShowHideEl( elBtnCountItemsSelected, 0 );\n+\t\tlpUtils.lpShowHideEl( elTabs, 0 );\n+\t\tlpUtils.lpShowHideEl( elBtnBack, 1 );\n+\t\tlpUtils.lpShowHideEl( elHeaderItemsSelected, 1 );\n+\t\tlpUtils.lpShowHideEl( elListItemsSelected, 1 );\n+\n+\t\telListItemsSelected\n+\t\t\t.querySelectorAll(\n+\t\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelected }:not(.clone)`\n+\t\t\t)\n+\t\t\t.forEach( ( elItem ) => {\n+\t\t\t\telItem.remove();\n+\t\t\t} );\n+\t\titemsSelectedData.forEach( ( item ) => {\n+\t\t\tconst elItemSelected = elItemClone.cloneNode( true );\n+\t\t\telItemSelected.classList.remove( 'clone' );\n+\t\t\tObject.entries( item ).forEach( ( [ key, value ] ) => {\n+\t\t\t\telItemSelected.dataset[ key ] = value;\n+\t\t\t} );\n+\t\t\tconst elTitleDisplay =\n+\t\t\t\telItemSelected.querySelector( '.title-display' );\n+\t\t\telTitleDisplay.innerHTML = item.title;\n+\n+\t\t\tlpUtils.lpShowHideEl( elItemSelected, 1 );\n+\n+\t\t\telItemClone.insertAdjacentElement( 'beforebegin', elItemSelected );\n+\t\t} );\n+\t};\n+\n+\t\u002F\u002F Back to list of items\n+\tbackToSelectItems = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elBtnBack = target.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnBackListItems }`\n+\t\t);\n+\t\tif ( ! elBtnBack ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst elBtnCountItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\n+\t\t);\n+\t\tconst elTabs = elPopup.querySelector( '.tabs' );\n+\t\tconst elListItemsWrap = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsWrap }`\n+\t\t);\n+\t\tconst elHeaderCountItemSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\n+\t\t);\n+\t\tconst elListItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItemsSelected }`\n+\t\t);\n+\t\tlpUtils.lpShowHideEl( elBtnCountItemsSelected, 1 );\n+\t\tlpUtils.lpShowHideEl( elListItemsWrap, 1 );\n+\t\tlpUtils.lpShowHideEl( elTabs, 1 );\n+\t\tlpUtils.lpShowHideEl( elBtnBack, 0 );\n+\t\tlpUtils.lpShowHideEl( elHeaderCountItemSelected, 0 );\n+\t\tlpUtils.lpShowHideEl( elListItemsSelected, 0 );\n+\t};\n+\n+\t\u002F\u002F Remove item selected from list items selected\n+\tremoveItemSelected = ( args ) => {\n+\t\tconst { e, target } = args;\n+\t\tconst elRemoveItemSelected = target.closest(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elItemSelected }`\n+\t\t);\n+\t\tif ( ! elRemoveItemSelected ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tconst itemRemove = elRemoveItemSelected.dataset;\n+\t\tconst index = itemsSelectedData.findIndex(\n+\t\t\t( item ) => item.id === itemRemove.id\n+\t\t);\n+\t\tif ( index !== -1 ) {\n+\t\t\titemsSelectedData.splice( index, 1 );\n+\t\t}\n+\n+\t\telRemoveItemSelected.remove();\n+\n+\t\tthis.watchItemsSelectedDataChange();\n+\t};\n+\n+\t\u002F\u002F Watch items selected when data change\n+\twatchItemsSelectedDataChange = () => {\n+\t\t\u002F\u002F Update count items selected, disable\u002Fenable buttons\n+\t\tconst elBtnAddItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnAddItemsSelected }`\n+\t\t);\n+\t\tconst elBtnCountItemsSelected = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elBtnCountItemsSelected }`\n+\t\t);\n+\t\tconst elSpanCount = elBtnCountItemsSelected.querySelector( 'span' );\n+\t\tconst elHeaderCount = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elHeaderCountItemSelected }`\n+\t\t);\n+\t\tconst elTarget = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.LPTarget }`\n+\t\t);\n+\n+\t\tif ( itemsSelectedData.length !== 0 ) {\n+\t\t\telBtnCountItemsSelected.disabled = false;\n+\t\t\telBtnAddItemsSelected.disabled = false;\n+\t\t\telBtnAddItemsSelected.classList.add( 'active' );\n+\t\t\telSpanCount.textContent = `(${ itemsSelectedData.length })`;\n+\t\t\telHeaderCount.innerHTML = elBtnCountItemsSelected.innerHTML;\n+\t\t} else {\n+\t\t\telBtnCountItemsSelected.disabled = true;\n+\t\t\telBtnAddItemsSelected.disabled = true;\n+\t\t\telBtnAddItemsSelected.classList.remove( 'active' );\n+\t\t\telSpanCount.textContent = '';\n+\t\t\telHeaderCount.textContent = '';\n+\t\t}\n+\n+\t\t\u002F\u002F Update list input checked, when items removed, or change tab type\n+\t\tconst elListItems = elPopup.querySelector(\n+\t\t\t`${ LpPopupSelectItemToAdd.selectors.elListItems }`\n+\t\t);\n+\t\tconst elInputs = elListItems.querySelectorAll(\n+\t\t\t'input[type=\"checkbox\"]'\n+\t\t);\n+\t\telInputs.forEach( ( elInputItem ) => {\n+\t\t\tconst itemSelected = elInputItem.dataset;\n+\t\t\tconst exists = itemsSelectedData.some(\n+\t\t\t\t( item ) => item.id === itemSelected.id\n+\t\t\t);\n+\t\t\telInputItem.checked = exists;\n+\t\t} );\n+\n+\t\t\u002F\u002F Set item selecting data to dataset for query.\n+\t\tconst dataSet = window.lpAJAXG.getDataSetCurrent( elTarget );\n+\t\tdataSet.args.item_selecting = itemsSelectedData;\n+\t\twindow.lpAJAXG.setDataSetCurrent( elTarget, dataSet );\n+\t};\n+\n+\t\u002F\u002F Add items selected to section\n+\taddItemsSelectedToSection = ( args ) => {\n+\t\tconst { e, target, callBackHandle } = args;\n+\n+\t\tif ( ! elPopup ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tSweetAlert.close();\n+\n+\t\tif ( typeof callBackHandle === 'function' ) {\n+\t\t\tcallBackHandle( itemsSelectedData );\n+\t\t\titemsSelectedData = [];\n+\t\t}\n+\t};\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002FlpToastify.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-import Toastify from 'toastify-js';\r\n-import 'toastify-js\u002Fsrc\u002Ftoastify.css';\r\n-\r\n-const argsToastify = {\r\n-\ttext: '',\r\n-\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\r\n-\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\r\n-\tclassName: `${ lpData.toast.classPrefix }`,\r\n-\tclose: lpData.toast.close == 1,\r\n-\tstopOnFocus: lpData.toast.stopOnFocus == 1,\r\n-\tduration: lpData.toast.duration,\r\n-};\r\n-export const show = ( message, status = 'success', argsCustom ) => {\r\n-\tlet args = argsToastify;\r\n-\tif ( argsCustom ) {\r\n-\t\targs = { ...args, ...argsCustom };\r\n-\t}\r\n-\r\n-\tconst toastify = new Toastify( {\r\n-\t\t...args,\r\n-\t\ttext: message,\r\n-\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\r\n-\t} );\r\n-\ttoastify.showToast();\r\n-};\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+import Toastify from 'toastify-js';\n+import 'toastify-js\u002Fsrc\u002Ftoastify.css';\n+\n+const argsToastify = {\n+\ttext: '',\n+\tgravity: lpData.toast.gravity, \u002F\u002F `top` or `bottom`\n+\tposition: lpData.toast.position, \u002F\u002F `left`, `center` or `right`\n+\tclassName: `${ lpData.toast.classPrefix }`,\n+\tclose: lpData.toast.close == 1,\n+\tstopOnFocus: lpData.toast.stopOnFocus == 1,\n+\tduration: lpData.toast.duration,\n+};\n+export const show = ( message, status = 'success', argsCustom ) => {\n+\tlet args = argsToastify;\n+\tif ( argsCustom ) {\n+\t\targs = { ...args, ...argsCustom };\n+\t}\n+\n+\tconst toastify = new Toastify( {\n+\t\t...args,\n+\t\ttext: message,\n+\t\tclassName: `${ lpData.toast.classPrefix } ${ status }`,\n+\t} );\n+\ttoastify.showToast();\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookie.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookie.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookie.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookie.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u002F**\r\n- * Cookie\r\n- *\r\n- * @since 4.2.3.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-const Cookie = {\r\n-\tset: ( cname, cvalue, exdays ) => {\r\n-\t\tconst d = new Date();\r\n-\t\td.setTime( d.getTime() + ( exdays * 24 * 60 * 60 * 1000 ) );\r\n-\t\tconst expires = 'expires=' + d.toUTCString();\r\n-\t\tdocument.cookie = cname + '=' + cvalue + ';' + expires + ';path=\u002F';\r\n-\t},\r\n-\tget: ( cname ) => {\r\n-\t\tconst name = cname + '=';\r\n-\t\tconst decodedCookie = decodeURIComponent( document.cookie );\r\n-\t\tconst ca = decodedCookie.split( ';' );\r\n-\t\tfor ( let i = 0; i \u003C ca.length; i++ ) {\r\n-\t\t\tlet c = ca[ i ];\r\n-\t\t\twhile ( c.charAt( 0 ) === ' ' ) {\r\n-\t\t\t\tc = c.substring( 1 );\r\n-\t\t\t}\r\n-\t\t\tif ( c.indexOf( name ) === 0 ) {\r\n-\t\t\t\treturn c.substring( name.length, c.length );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn '';\r\n-\t},\r\n-};\r\n-\r\n-export default Cookie;\r\n-\r\n+\u002F**\n+ * Cookie\n+ *\n+ * @since 4.2.3.4\n+ * @version 1.0.0\n+ *\u002F\n+const Cookie = {\n+\tset: ( cname, cvalue, exdays ) => {\n+\t\tconst d = new Date();\n+\t\td.setTime( d.getTime() + ( exdays * 24 * 60 * 60 * 1000 ) );\n+\t\tconst expires = 'expires=' + d.toUTCString();\n+\t\tdocument.cookie = cname + '=' + cvalue + ';' + expires + ';path=\u002F';\n+\t},\n+\tget: ( cname ) => {\n+\t\tconst name = cname + '=';\n+\t\tconst decodedCookie = decodeURIComponent( document.cookie );\n+\t\tconst ca = decodedCookie.split( ';' );\n+\t\tfor ( let i = 0; i \u003C ca.length; i++ ) {\n+\t\t\tlet c = ca[ i ];\n+\t\t\twhile ( c.charAt( 0 ) === ' ' ) {\n+\t\t\t\tc = c.substring( 1 );\n+\t\t\t}\n+\t\t\tif ( c.indexOf( name ) === 0 ) {\n+\t\t\t\treturn c.substring( name.length, c.length );\n+\t\t\t}\n+\t\t}\n+\t\treturn '';\n+\t},\n+};\n+\n+export default Cookie;\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookies.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookies.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookies.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fcookies.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-const Cookies = {\r\n-\tget: ( name, def, global ) => {\r\n-\t\tlet ret;\r\n-\r\n-\t\tif ( global ) {\r\n-\t\t\tret = wpCookies.get( name );\r\n-\t\t} else {\r\n-\t\t\tlet ck = wpCookies.get( 'LP' );\r\n-\t\t\tif ( ck ) {\r\n-\t\t\t\tck = JSON.parse( ck );\r\n-\t\t\t\tret = name ? ck[ name ] : ck;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! ret && ret !== def ) {\r\n-\t\t\tret = def;\r\n-\t\t}\r\n-\r\n-\t\treturn ret;\r\n-\t},\r\n-\r\n-\tset( name, value, expires, path, domain, secure ) {\r\n-\t\tif ( arguments.length > 2 ) {\r\n-\t\t\twpCookies.set( name, value, expires, path, domain, secure );\r\n-\t\t} else if ( arguments.length == 2 ) {\r\n-\t\t\tlet ck = wpCookies.get( 'LP' );\r\n-\r\n-\t\t\tif ( ck ) {\r\n-\t\t\t\tck = JSON.parse( ck );\r\n-\t\t\t} else {\r\n-\t\t\t\tck = {};\r\n-\t\t\t}\r\n-\r\n-\t\t\tck[ name ] = value;\r\n-\r\n-\t\t\twpCookies.set( 'LP', JSON.stringify( ck ), '', '\u002F' );\r\n-\t\t} else {\r\n-\t\t\twpCookies.set( 'LP', JSON.stringify( name ), '', '\u002F' );\r\n-\t\t}\r\n-\t},\r\n-\r\n-\tremove( name ) {\r\n-\t\tconst allCookies = Cookies.get();\r\n-\t\tconst reg = new RegExp( name, 'g' );\r\n-\t\tconst newCookies = {};\r\n-\t\tconst useRegExp = name.match( \u002F\\*\u002F );\r\n-\r\n-\t\tfor ( const i in allCookies ) {\r\n-\t\t\tif ( useRegExp ) {\r\n-\t\t\t\tif ( ! i.match( reg ) ) {\r\n-\t\t\t\t\tnewCookies[ i ] = allCookies[ i ];\r\n-\t\t\t\t}\r\n-\t\t\t} else if ( name != i ) {\r\n-\t\t\t\tnewCookies[ i ] = allCookies[ i ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tCookies.set( newCookies );\r\n-\t},\r\n-};\r\n-\r\n-export default Cookies;\r\n+const Cookies = {\n+\tget: ( name, def, global ) => {\n+\t\tlet ret;\n+\n+\t\tif ( global ) {\n+\t\t\tret = wpCookies.get( name );\n+\t\t} else {\n+\t\t\tlet ck = wpCookies.get( 'LP' );\n+\t\t\tif ( ck ) {\n+\t\t\t\tck = JSON.parse( ck );\n+\t\t\t\tret = name ? ck[ name ] : ck;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! ret && ret !== def ) {\n+\t\t\tret = def;\n+\t\t}\n+\n+\t\treturn ret;\n+\t},\n+\n+\tset( name, value, expires, path, domain, secure ) {\n+\t\tif ( arguments.length > 2 ) {\n+\t\t\twpCookies.set( name, value, expires, path, domain, secure );\n+\t\t} else if ( arguments.length == 2 ) {\n+\t\t\tlet ck = wpCookies.get( 'LP' );\n+\n+\t\t\tif ( ck ) {\n+\t\t\t\tck = JSON.parse( ck );\n+\t\t\t} else {\n+\t\t\t\tck = {};\n+\t\t\t}\n+\n+\t\t\tck[ name ] = value;\n+\n+\t\t\twpCookies.set( 'LP', JSON.stringify( ck ), '', '\u002F' );\n+\t\t} else {\n+\t\t\twpCookies.set( 'LP', JSON.stringify( name ), '', '\u002F' );\n+\t\t}\n+\t},\n+\n+\tremove( name ) {\n+\t\tconst allCookies = Cookies.get();\n+\t\tconst reg = new RegExp( name, 'g' );\n+\t\tconst newCookies = {};\n+\t\tconst useRegExp = name.match( \u002F\\*\u002F );\n+\n+\t\tfor ( const i in allCookies ) {\n+\t\t\tif ( useRegExp ) {\n+\t\t\t\tif ( ! i.match( reg ) ) {\n+\t\t\t\t\tnewCookies[ i ] = allCookies[ i ];\n+\t\t\t\t}\n+\t\t\t} else if ( name != i ) {\n+\t\t\t\tnewCookies[ i ] = allCookies[ i ];\n+\t\t\t}\n+\t\t}\n+\n+\t\tCookies.set( newCookies );\n+\t},\n+};\n+\n+export default Cookies;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Femail-validator.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Femail-validator.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Femail-validator.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Femail-validator.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\u002F**\r\n- * Validate is an email.\r\n- *\r\n- * @param email\r\n- * @return {boolean}\r\n- *\u002F\r\n-export default function isEmail( email ) {\r\n-\tconst re = \u002F^(([^\u003C>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^\u003C>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\u002F;\r\n-\treturn re.test( email );\r\n-}\r\n+\u002F**\n+ * Validate is an email.\n+ *\n+ * @param email\n+ * @return {boolean}\n+ *\u002F\n+export default function isEmail( email ) {\n+\tconst re = \u002F^(([^\u003C>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^\u003C>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\u002F;\n+\treturn re.test( email );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fevent-callback.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fevent-callback.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fevent-callback.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fevent-callback.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,100 +1,100 @@\n-\u002F**\r\n- * Manage event callbacks.\r\n-Allow add\u002Fremove a callback function into custom event of an object.\r\n- *\r\n- * @class\r\n- * @param self\r\n- *\u002F\r\n-const Event_Callback = function Event_Callback( self ) {\r\n-\tconst callbacks = {};\r\n-\tconst $ = window.jQuery;\r\n-\r\n-\tthis.on = function( event, callback ) {\r\n-\t\tlet namespaces = event.split( '.' ),\r\n-\t\t\tnamespace = '';\r\n-\r\n-\t\tif ( namespaces.length > 1 ) {\r\n-\t\t\tevent = namespaces[ 0 ];\r\n-\t\t\tnamespace = namespaces[ 1 ];\r\n-\t\t}\r\n-\r\n-\t\tif ( ! callbacks[ event ] ) {\r\n-\t\t\tcallbacks[ event ] = [ [], {} ];\r\n-\t\t}\r\n-\r\n-\t\tif ( namespace ) {\r\n-\t\t\tif ( ! callbacks[ event ][ 1 ][ namespace ] ) {\r\n-\t\t\t\tcallbacks[ event ][ 1 ][ namespace ] = [];\r\n-\t\t\t}\r\n-\t\t\tcallbacks[ event ][ 1 ][ namespace ].push( callback );\r\n-\t\t} else {\r\n-\t\t\tcallbacks[ event ][ 0 ].push( callback );\r\n-\t\t}\r\n-\r\n-\t\treturn self;\r\n-\t};\r\n-\r\n-\tthis.off = function( event, callback ) {\r\n-\t\tlet namespaces = event.split( '.' ),\r\n-\t\t\tnamespace = '';\r\n-\r\n-\t\tif ( namespaces.length > 1 ) {\r\n-\t\t\tevent = namespaces[ 0 ];\r\n-\t\t\tnamespace = namespaces[ 1 ];\r\n-\t\t}\r\n-\r\n-\t\tif ( ! callbacks[ event ] ) {\r\n-\t\t\treturn self;\r\n-\t\t}\r\n-\t\tlet at = -1;\r\n-\t\tif ( ! namespace ) {\r\n-\t\t\tif ( typeof callback === 'function' ) {\r\n-\t\t\t\tat = callbacks[ event ][ 0 ].indexOf( callback );\r\n-\t\t\t\tif ( at \u003C 0 ) {\r\n-\t\t\t\t\treturn self;\r\n-\t\t\t\t}\r\n-\t\t\t\tcallbacks[ event ][ 0 ].splice( at, 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\tcallbacks[ event ][ 0 ] = [];\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( ! callbacks[ event ][ 1 ][ namespace ] ) {\r\n-\t\t\t\treturn self;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( typeof callback === 'function' ) {\r\n-\t\t\t\tat = callbacks[ event ][ 1 ][ namespace ].indexOf( callback );\r\n-\t\t\t\tif ( at \u003C 0 ) {\r\n-\t\t\t\t\treturn self;\r\n-\t\t\t\t}\r\n-\t\t\t\tcallbacks[ event ][ 1 ][ namespace ].splice( at, 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\tcallbacks[ event ][ 1 ][ namespace ] = [];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn self;\r\n-\t};\r\n-\r\n-\tthis.callEvent = function( event, callbackArgs ) {\r\n-\t\tif ( ! callbacks[ event ] ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( callbacks[ event ][ 0 ] ) {\r\n-\t\t\tfor ( var i = 0; i \u003C callbacks[ event ][ 0 ].length; i++ ) {\r\n-\t\t\t\ttypeof ( callbacks[ event ][ 0 ][ i ] ) === 'function' && callbacks[ event ][ i ][ 0 ].apply( self, callbackArgs );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( callbacks[ event ][ 1 ] ) {\r\n-\t\t\tfor ( var i in callbacks[ event ][ 1 ] ) {\r\n-\t\t\t\tfor ( let j = 0; j \u003C callbacks[ event ][ 1 ][ i ].length; j++ ) {\r\n-\t\t\t\t\ttypeof ( callbacks[ event ][ 1 ][ i ][ j ] ) === 'function' && callbacks[ event ][ 1 ][ i ][ j ].apply( self, callbackArgs );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t};\r\n-};\r\n-\r\n-export default Event_Callback;\r\n+\u002F**\n+ * Manage event callbacks.\n+Allow add\u002Fremove a callback function into custom event of an object.\n+ *\n+ * @class\n+ * @param self\n+ *\u002F\n+const Event_Callback = function Event_Callback( self ) {\n+\tconst callbacks = {};\n+\tconst $ = window.jQuery;\n+\n+\tthis.on = function( event, callback ) {\n+\t\tlet namespaces = event.split( '.' ),\n+\t\t\tnamespace = '';\n+\n+\t\tif ( namespaces.length > 1 ) {\n+\t\t\tevent = namespaces[ 0 ];\n+\t\t\tnamespace = namespaces[ 1 ];\n+\t\t}\n+\n+\t\tif ( ! callbacks[ event ] ) {\n+\t\t\tcallbacks[ event ] = [ [], {} ];\n+\t\t}\n+\n+\t\tif ( namespace ) {\n+\t\t\tif ( ! callbacks[ event ][ 1 ][ namespace ] ) {\n+\t\t\t\tcallbacks[ event ][ 1 ][ namespace ] = [];\n+\t\t\t}\n+\t\t\tcallbacks[ event ][ 1 ][ namespace ].push( callback );\n+\t\t} else {\n+\t\t\tcallbacks[ event ][ 0 ].push( callback );\n+\t\t}\n+\n+\t\treturn self;\n+\t};\n+\n+\tthis.off = function( event, callback ) {\n+\t\tlet namespaces = event.split( '.' ),\n+\t\t\tnamespace = '';\n+\n+\t\tif ( namespaces.length > 1 ) {\n+\t\t\tevent = namespaces[ 0 ];\n+\t\t\tnamespace = namespaces[ 1 ];\n+\t\t}\n+\n+\t\tif ( ! callbacks[ event ] ) {\n+\t\t\treturn self;\n+\t\t}\n+\t\tlet at = -1;\n+\t\tif ( ! namespace ) {\n+\t\t\tif ( typeof callback === 'function' ) {\n+\t\t\t\tat = callbacks[ event ][ 0 ].indexOf( callback );\n+\t\t\t\tif ( at \u003C 0 ) {\n+\t\t\t\t\treturn self;\n+\t\t\t\t}\n+\t\t\t\tcallbacks[ event ][ 0 ].splice( at, 1 );\n+\t\t\t} else {\n+\t\t\t\tcallbacks[ event ][ 0 ] = [];\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( ! callbacks[ event ][ 1 ][ namespace ] ) {\n+\t\t\t\treturn self;\n+\t\t\t}\n+\n+\t\t\tif ( typeof callback === 'function' ) {\n+\t\t\t\tat = callbacks[ event ][ 1 ][ namespace ].indexOf( callback );\n+\t\t\t\tif ( at \u003C 0 ) {\n+\t\t\t\t\treturn self;\n+\t\t\t\t}\n+\t\t\t\tcallbacks[ event ][ 1 ][ namespace ].splice( at, 1 );\n+\t\t\t} else {\n+\t\t\t\tcallbacks[ event ][ 1 ][ namespace ] = [];\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn self;\n+\t};\n+\n+\tthis.callEvent = function( event, callbackArgs ) {\n+\t\tif ( ! callbacks[ event ] ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( callbacks[ event ][ 0 ] ) {\n+\t\t\tfor ( var i = 0; i \u003C callbacks[ event ][ 0 ].length; i++ ) {\n+\t\t\t\ttypeof ( callbacks[ event ][ 0 ][ i ] ) === 'function' && callbacks[ event ][ i ][ 0 ].apply( self, callbackArgs );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( callbacks[ event ][ 1 ] ) {\n+\t\t\tfor ( var i in callbacks[ event ][ 1 ] ) {\n+\t\t\t\tfor ( let j = 0; j \u003C callbacks[ event ][ 1 ][ i ].length; j++ ) {\n+\t\t\t\t\ttypeof ( callbacks[ event ][ 1 ][ i ][ j ] ) === 'function' && callbacks[ event ][ 1 ][ i ][ j ].apply( self, callbackArgs );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t};\n+};\n+\n+export default Event_Callback;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fextend.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fextend.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fextend.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fextend.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-export default function() {\r\n-\twindow.LP = window.LP || {};\r\n-\r\n-\tif ( typeof arguments[ 0 ] === 'string' ) {\r\n-\t\tLP[ arguments[ 0 ] ] = LP[ arguments[ 0 ] ] || {};\r\n-\t\tLP[ arguments[ 0 ] ] = jQuery.extend( LP[ arguments[ 0 ] ], arguments[ 1 ] );\r\n-\t} else {\r\n-\t\tLP = jQuery.extend( LP, arguments[ 0 ] );\r\n-\t}\r\n-}\r\n+export default function() {\n+\twindow.LP = window.LP || {};\n+\n+\tif ( typeof arguments[ 0 ] === 'string' ) {\n+\t\tLP[ arguments[ 0 ] ] = LP[ arguments[ 0 ] ] || {};\n+\t\tLP[ arguments[ 0 ] ] = jQuery.extend( LP[ arguments[ 0 ] ], arguments[ 1 ] );\n+\t} else {\n+\t\tLP = jQuery.extend( LP, arguments[ 0 ] );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Ffn.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Ffn.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Ffn.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Ffn.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u002F**\r\n- * Auto prepend `LP` prefix for jQuery fn plugin name.\r\n- *\r\n- * Create : $.fn.LP( 'PLUGIN_NAME', func) \u003C=> $.fn.LP_PLUGIN_NAME\r\n- * Usage: $(selector).LP('PLUGIN_NAME') \u003C=> $(selector).LP_PLUGIN_NAME()\r\n- *\r\n- * @version 3.2.6\r\n- *\u002F\r\n-\r\n-const $ = window.jQuery;\r\n-let exp;\r\n-\r\n-( function() {\r\n-\tif ( $ === undefined ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$.fn.LP = exp = function( widget, fn ) {\r\n-\t\tif ( typeof fn === 'function' ) {\r\n-\t\t\t$.fn[ 'LP_' + widget ] = fn;\r\n-\t\t} else if ( widget ) {\r\n-\t\t\tconst args = [];\r\n-\t\t\tif ( arguments.length > 1 ) {\r\n-\t\t\t\tfor ( let i = 1; i \u003C arguments.length; i++ ) {\r\n-\t\t\t\t\targs.push( arguments[ i ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn typeof ( $( this )[ 'LP_' + widget ] ) === 'function' ? $( this )[ 'LP_' + widget ].apply( this, args ) : this;\r\n-\t\t}\r\n-\t\treturn this;\r\n-\t};\r\n-}() );\r\n-\r\n-export default exp;\r\n+\u002F**\n+ * Auto prepend `LP` prefix for jQuery fn plugin name.\n+ *\n+ * Create : $.fn.LP( 'PLUGIN_NAME', func) \u003C=> $.fn.LP_PLUGIN_NAME\n+ * Usage: $(selector).LP('PLUGIN_NAME') \u003C=> $(selector).LP_PLUGIN_NAME()\n+ *\n+ * @version 3.2.6\n+ *\u002F\n+\n+const $ = window.jQuery;\n+let exp;\n+\n+( function() {\n+\tif ( $ === undefined ) {\n+\t\treturn;\n+\t}\n+\n+\t$.fn.LP = exp = function( widget, fn ) {\n+\t\tif ( typeof fn === 'function' ) {\n+\t\t\t$.fn[ 'LP_' + widget ] = fn;\n+\t\t} else if ( widget ) {\n+\t\t\tconst args = [];\n+\t\t\tif ( arguments.length > 1 ) {\n+\t\t\t\tfor ( let i = 1; i \u003C arguments.length; i++ ) {\n+\t\t\t\t\targs.push( arguments[ i ] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn typeof ( $( this )[ 'LP_' + widget ] ) === 'function' ? $( this )[ 'LP_' + widget ].apply( this, args ) : this;\n+\t\t}\n+\t\treturn this;\n+\t};\n+}() );\n+\n+export default exp;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhandle-ajax-api.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhandle-ajax-api.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-const handleAjax = function( url, params, functions ) {\r\n-\twp.apiFetch( {\r\n-\t\tpath: url,\r\n-\t\tmethod: 'POST',\r\n-\t\tdata: params,\r\n-\t} ).then( ( res ) => {\r\n-\t\tif ( 'function' === typeof functions.success ) {\r\n-\t\t\tfunctions.success( res );\r\n-\t\t}\r\n-\t} ).catch( ( err ) => {\r\n-\t\tif ( 'function' === typeof functions.error ) {\r\n-\t\t\tfunctions.error( err );\r\n-\t\t}\r\n-\t} ).then( () => {\r\n-\t\tif ( 'function' === typeof functions.completed ) {\r\n-\t\t\tfunctions.completed();\r\n-\t\t}\r\n-\t} );\r\n-};\r\n-\r\n-export default handleAjax;\r\n+const handleAjax = function( url, params, functions ) {\n+\twp.apiFetch( {\n+\t\tpath: url,\n+\t\tmethod: 'POST',\n+\t\tdata: params,\n+\t} ).then( ( res ) => {\n+\t\tif ( 'function' === typeof functions.success ) {\n+\t\t\tfunctions.success( res );\n+\t\t}\n+\t} ).catch( ( err ) => {\n+\t\tif ( 'function' === typeof functions.error ) {\n+\t\t\tfunctions.error( err );\n+\t\t}\n+\t} ).then( () => {\n+\t\tif ( 'function' === typeof functions.completed ) {\n+\t\t\tfunctions.completed();\n+\t\t}\n+\t} );\n+};\n+\n+export default handleAjax;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhook.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhook.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhook.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fhook.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,79 +1,79 @@\n-const Hook = {\r\n-\thooks: { action: {}, filter: {} },\r\n-\taddAction( action, callable, priority, tag ) {\r\n-\t\tthis.addHook( 'action', action, callable, priority, tag );\r\n-\t\treturn this;\r\n-\t},\r\n-\taddFilter( action, callable, priority, tag ) {\r\n-\t\tthis.addHook( 'filter', action, callable, priority, tag );\r\n-\t\treturn this;\r\n-\t},\r\n-\tdoAction( action ) {\r\n-\t\treturn this.doHook( 'action', action, arguments );\r\n-\t},\r\n-\tapplyFilters( action ) {\r\n-\t\treturn this.doHook( 'filter', action, arguments );\r\n-\t},\r\n-\tremoveAction( action, tag ) {\r\n-\t\tthis.removeHook( 'action', action, tag );\r\n-\t\treturn this;\r\n-\t},\r\n-\tremoveFilter( action, priority, tag ) {\r\n-\t\tthis.removeHook( 'filter', action, priority, tag );\r\n-\t\treturn this;\r\n-\t},\r\n-\taddHook( hookType, action, callable, priority, tag ) {\r\n-\t\tif ( undefined === this.hooks[ hookType ][ action ] ) {\r\n-\t\t\tthis.hooks[ hookType ][ action ] = [];\r\n-\t\t}\r\n-\t\tconst hooks = this.hooks[ hookType ][ action ];\r\n-\t\tif ( undefined === tag ) {\r\n-\t\t\ttag = action + '_' + hooks.length;\r\n-\t\t}\r\n-\t\tthis.hooks[ hookType ][ action ].push( { tag, callable, priority } );\r\n-\t\treturn this;\r\n-\t},\r\n-\tdoHook( hookType, action, args ) {\r\n-\t\targs = Array.prototype.slice.call( args, 1 );\r\n-\r\n-\t\tif ( undefined !== this.hooks[ hookType ][ action ] ) {\r\n-\t\t\tlet hooks = this.hooks[ hookType ][ action ],\r\n-\t\t\t\thook;\r\n-\r\n-\t\t\thooks.sort( function( a, b ) {\r\n-\t\t\t\treturn a.priority - b.priority;\r\n-\t\t\t} );\r\n-\r\n-\t\t\tfor ( let i = 0; i \u003C hooks.length; i++ ) {\r\n-\t\t\t\thook = hooks[ i ].callable;\r\n-\t\t\t\tif ( typeof hook !== 'function' ) {\r\n-\t\t\t\t\thook = window[ hook ];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( 'action' === hookType ) {\r\n-\t\t\t\t\targs[ i ] = hook.apply( null, args );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\targs[ 0 ] = hook.apply( null, args );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( 'filter' === hookType ) {\r\n-\t\t\treturn args[ 0 ];\r\n-\t\t}\r\n-\t\treturn args;\r\n-\t},\r\n-\tremoveHook( hookType, action, priority, tag ) {\r\n-\t\tif ( undefined !== this.hooks[ hookType ][ action ] ) {\r\n-\t\t\tconst hooks = this.hooks[ hookType ][ action ];\r\n-\t\t\tfor ( let i = hooks.length - 1; i >= 0; i-- ) {\r\n-\t\t\t\tif ( ( undefined === tag || tag === hooks[ i ].tag ) && ( undefined === priority || priority === hooks[ i ].priority ) ) {\r\n-\t\t\t\t\thooks.splice( i, 1 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn this;\r\n-\t},\r\n-};\r\n-\r\n-export default Hook;\r\n+const Hook = {\n+\thooks: { action: {}, filter: {} },\n+\taddAction( action, callable, priority, tag ) {\n+\t\tthis.addHook( 'action', action, callable, priority, tag );\n+\t\treturn this;\n+\t},\n+\taddFilter( action, callable, priority, tag ) {\n+\t\tthis.addHook( 'filter', action, callable, priority, tag );\n+\t\treturn this;\n+\t},\n+\tdoAction( action ) {\n+\t\treturn this.doHook( 'action', action, arguments );\n+\t},\n+\tapplyFilters( action ) {\n+\t\treturn this.doHook( 'filter', action, arguments );\n+\t},\n+\tremoveAction( action, tag ) {\n+\t\tthis.removeHook( 'action', action, tag );\n+\t\treturn this;\n+\t},\n+\tremoveFilter( action, priority, tag ) {\n+\t\tthis.removeHook( 'filter', action, priority, tag );\n+\t\treturn this;\n+\t},\n+\taddHook( hookType, action, callable, priority, tag ) {\n+\t\tif ( undefined === this.hooks[ hookType ][ action ] ) {\n+\t\t\tthis.hooks[ hookType ][ action ] = [];\n+\t\t}\n+\t\tconst hooks = this.hooks[ hookType ][ action ];\n+\t\tif ( undefined === tag ) {\n+\t\t\ttag = action + '_' + hooks.length;\n+\t\t}\n+\t\tthis.hooks[ hookType ][ action ].push( { tag, callable, priority } );\n+\t\treturn this;\n+\t},\n+\tdoHook( hookType, action, args ) {\n+\t\targs = Array.prototype.slice.call( args, 1 );\n+\n+\t\tif ( undefined !== this.hooks[ hookType ][ action ] ) {\n+\t\t\tlet hooks = this.hooks[ hookType ][ action ],\n+\t\t\t\thook;\n+\n+\t\t\thooks.sort( function( a, b ) {\n+\t\t\t\treturn a.priority - b.priority;\n+\t\t\t} );\n+\n+\t\t\tfor ( let i = 0; i \u003C hooks.length; i++ ) {\n+\t\t\t\thook = hooks[ i ].callable;\n+\t\t\t\tif ( typeof hook !== 'function' ) {\n+\t\t\t\t\thook = window[ hook ];\n+\t\t\t\t}\n+\n+\t\t\t\tif ( 'action' === hookType ) {\n+\t\t\t\t\targs[ i ] = hook.apply( null, args );\n+\t\t\t\t} else {\n+\t\t\t\t\targs[ 0 ] = hook.apply( null, args );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( 'filter' === hookType ) {\n+\t\t\treturn args[ 0 ];\n+\t\t}\n+\t\treturn args;\n+\t},\n+\tremoveHook( hookType, action, priority, tag ) {\n+\t\tif ( undefined !== this.hooks[ hookType ][ action ] ) {\n+\t\t\tconst hooks = this.hooks[ hookType ][ action ];\n+\t\t\tfor ( let i = hooks.length - 1; i >= 0; i-- ) {\n+\t\t\t\tif ( ( undefined === tag || tag === hooks[ i ].tag ) && ( undefined === priority || priority === hooks[ i ].priority ) ) {\n+\t\t\t\t\thooks.splice( i, 1 );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\treturn this;\n+\t},\n+};\n+\n+export default Hook;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fiframe-submit.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fiframe-submit.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fiframe-submit.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fiframe-submit.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-let iframeCounter = 1;\r\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const IframeSubmit = function( form ) {\r\n-\tconst iframeId = 'ajax-iframe-' + iframeCounter;\r\n-\tlet $iframe = $( 'form[name=\"' + iframeId + '\"]' );\r\n-\r\n-\tif ( ! $iframe.length ) {\r\n-\t\t$iframe = $( '\u003Ciframe \u002F>' ).appendTo( document.body ).attr( {\r\n-\t\t\tname: iframeId,\r\n-\t\t\tsrc: '#',\r\n-\t\t} );\r\n-\t}\r\n-\r\n-\t$( form ).on( 'submit', function() {\r\n-\t\tconst $form = $( form ).clone().appendTo( document.body );\r\n-\r\n-\t\t$form.attr( 'target', iframeId );\r\n-\t\t$form.find( '#submit' ).remove();\r\n-\r\n-\t\treturn false;\r\n-\t} );\r\n-\r\n-\tiframeCounter++;\r\n-};\r\n-\r\n-export default IframeSubmit;\r\n+let iframeCounter = 1;\n+const $ = window.jQuery || jQuery;\n+\n+const IframeSubmit = function( form ) {\n+\tconst iframeId = 'ajax-iframe-' + iframeCounter;\n+\tlet $iframe = $( 'form[name=\"' + iframeId + '\"]' );\n+\n+\tif ( ! $iframe.length ) {\n+\t\t$iframe = $( '\u003Ciframe \u002F>' ).appendTo( document.body ).attr( {\n+\t\t\tname: iframeId,\n+\t\t\tsrc: '#',\n+\t\t} );\n+\t}\n+\n+\t$( form ).on( 'submit', function() {\n+\t\tconst $form = $( form ).clone().appendTo( document.body );\n+\n+\t\t$form.attr( 'target', iframeId );\n+\t\t$form.find( '#submit' ).remove();\n+\n+\t\treturn false;\n+\t} );\n+\n+\tiframeCounter++;\n+};\n+\n+export default IframeSubmit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,567 +1,567 @@\n-\u002F**\r\n- * Utility functions may use for both admin and frontend.\r\n- *\r\n- * @version 3.2.6\r\n- *\u002F\r\n-\r\n-import extend from '.\u002Fextend';\r\n-import fn from '.\u002Ffn';\r\n-import QuickTip from '.\u002Fquick-tip';\r\n-import MessageBox from '.\u002Fmessage-box';\r\n-import Event_Callback from '.\u002Fevent-callback';\r\n-import Hook from '.\u002Fhook';\r\n-import Cookies from '.\u002Fcookies';\r\n-import _localStorage from '.\u002Flocal-storage';\r\n-import * as jplugins from '.\u002Fjquery.plugins';\r\n-import IframeSubmit from '.\u002Fiframe-submit';\r\n-import showPass from '.\u002Fshow-password';\r\n-\r\n-const $ = jQuery;\r\n-\r\n-String.prototype.getQueryVar = function( name ) {\r\n-\tname = name.replace( \u002F[\\[]\u002F, '\\\\[' ).replace( \u002F[\\]]\u002F, '\\\\]' );\r\n-\tconst regex = new RegExp( '[\\\\?&]' + name + '=([^&#]*)' ),\r\n-\t\tresults = regex.exec( this );\r\n-\treturn results === null ? '' : decodeURIComponent( results[ 1 ].replace( \u002F\\+\u002Fg, ' ' ) );\r\n-};\r\n-\r\n-String.prototype.addQueryVar = function( name, value ) {\r\n-\tlet url = this,\r\n-\t\tm = url.split( '#' );\r\n-\turl = m[ 0 ];\r\n-\tif ( name.match( \u002F\\[\u002F ) ) {\r\n-\t\turl += url.match( \u002F\\?\u002F ) ? '&' : '?';\r\n-\t\turl += name + '=' + value;\r\n-\t} else if ( ( url.indexOf( '&' + name + '=' ) != -1 ) || ( url.indexOf( '?' + name + '=' ) != -1 ) ) {\r\n-\t\turl = url.replace( new RegExp( name + '=([^&#]*)', 'g' ), name + '=' + value );\r\n-\t} else {\r\n-\t\turl += url.match( \u002F\\?\u002F ) ? '&' : '?';\r\n-\t\turl += name + '=' + value;\r\n-\t}\r\n-\treturn url + ( m[ 1 ] ? '#' + m[ 1 ] : '' );\r\n-};\r\n-\r\n-String.prototype.removeQueryVar = function( name ) {\r\n-\tlet url = this;\r\n-\tconst m = url.split( '#' );\r\n-\turl = m[ 0 ];\r\n-\tname = name.replace( \u002F[\\[]\u002F, '\\\\[' ).replace( \u002F[\\]]\u002F, '\\\\]' );\r\n-\tconst regex = new RegExp( '[\\\\?&]' + name + '([\\[][^=]*)?=([^&#]*)', 'g' );\r\n-\turl = url.replace( regex, '' );\r\n-\treturn url + ( m[ 1 ] ? '#' + m[ 1 ] : '' );\r\n-};\r\n-\r\n-\u002F\u002F if ( $.isEmptyObject( '' ) == false ) {\r\n-\u002F\u002F \t$.isEmptyObject = function( a ) {\r\n-\u002F\u002F \t\tlet prop;\r\n-\u002F\u002F \t\tfor ( prop in a ) {\r\n-\u002F\u002F \t\t\tif ( a.hasOwnProperty( prop ) ) {\r\n-\u002F\u002F \t\t\t\treturn false;\r\n-\u002F\u002F \t\t\t}\r\n-\u002F\u002F \t\t}\r\n-\u002F\u002F \t\treturn true;\r\n-\u002F\u002F \t};\r\n-\u002F\u002F }\r\n-\r\n-const _default = {\r\n-\tHook,\r\n-\tsetUrl( url, ember, title ) {\r\n-\t\tif ( url ) {\r\n-\t\t\thistory.pushState( {}, title, url );\r\n-\t\t\tLP.Hook.doAction( 'learn_press_set_location_url', url );\r\n-\t\t}\r\n-\t},\r\n-\ttoggleGroupSection( el, target ) {\r\n-\t\tconst $el = $( el ),\r\n-\t\t\tisHide = $el.hasClass( 'hide-if-js' );\r\n-\t\tif ( isHide ) {\r\n-\t\t\t$el.hide().removeClass( 'hide-if-js' );\r\n-\t\t}\r\n-\t\t$el.removeClass( 'hide-if-js' ).slideToggle( function() {\r\n-\t\t\tconst $this = $( this );\r\n-\t\t\tif ( $this.is( ':visible' ) ) {\r\n-\t\t\t\t$( target ).addClass( 'toggle-on' ).removeClass( 'toggle-off' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$( target ).addClass( 'toggle-off' ).removeClass( 'toggle-on' );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\toverflow( el, v ) {\r\n-\t\tconst $el = $( el ),\r\n-\t\t\toverflow = $el.css( 'overflow' );\r\n-\t\tif ( v ) {\r\n-\t\t\t$el.css( 'overflow', v ).data( 'overflow', overflow );\r\n-\t\t} else {\r\n-\t\t\t$el.css( 'overflow', $el.data( 'overflow' ) );\r\n-\t\t}\r\n-\t},\r\n-\tgetUrl() {\r\n-\t\treturn window.location.href;\r\n-\t},\r\n-\taddQueryVar( name, value, url ) {\r\n-\t\treturn ( url === undefined ? window.location.href : url ).addQueryVar( name, value );\r\n-\t},\r\n-\tremoveQueryVar( name, url ) {\r\n-\t\treturn ( url === undefined ? window.location.href : url ).removeQueryVar( name );\r\n-\t},\r\n-\treload( url ) {\r\n-\t\tif ( ! url ) {\r\n-\t\t\turl = window.location.href;\r\n-\t\t}\r\n-\t\twindow.location.href = url;\r\n-\t},\r\n-\r\n-\tparseResponse( response, type ) {\r\n-\t\tconst m = response.match( \u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs );\r\n-\t\tif ( m ) {\r\n-\t\t\tresponse = m[ 1 ];\r\n-\t\t}\r\n-\t\treturn ( type || 'json' ) === 'json' ? this.parseJSON( response ) : response;\r\n-\t},\r\n-\tparseJSON( data ) {\r\n-\t\tif ( typeof data !== 'string' ) {\r\n-\t\t\treturn data;\r\n-\t\t}\r\n-\r\n-\t\tconst m = String.raw( { raw: data } ).match( \u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs );\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( m ) {\r\n-\t\t\t\tdata = JSON.parse( m[ 1 ].replace( \u002F(?:\\r\\n|\\r|\\n)\u002Fg, '' ) );\r\n-\t\t\t} else {\r\n-\t\t\t\tdata = JSON.parse( data );\r\n-\t\t\t}\r\n-\t\t} catch ( e ) {\r\n-\t\t\tdata = {};\r\n-\t\t}\r\n-\t\treturn data;\r\n-\t},\r\n-\tajax( args ) {\r\n-\t\tconst type = args.type || 'post',\r\n-\t\t\tdataType = args.dataType || 'json',\r\n-\t\t\tdata = args.action ? $.extend( args.data, { 'lp-ajax': args.action } ) : args.data,\r\n-\t\t\tbeforeSend = args.beforeSend || function() {\r\n-\t\t\t},\r\n-\t\t\turl = args.url || window.location.href;\r\n-\t\t\u002F\u002F                        console.debug( beforeSend );\r\n-\t\t$.ajax( {\r\n-\t\t\tdata,\r\n-\t\t\turl,\r\n-\t\t\ttype,\r\n-\t\t\tdataType: 'html',\r\n-\t\t\tbeforeSend: beforeSend.apply( null, args ),\r\n-\t\t\tsuccess( raw ) {\r\n-\t\t\t\tconst response = LP.parseResponse( raw, dataType );\r\n-\t\t\t\ttypeof ( args.success ) === 'function' && args.success( response, raw );\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t\ttypeof ( args.error ) === 'function' && args.error.apply( null, LP.funcArgs2Array() );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t},\r\n-\tdoAjax( args ) {\r\n-\t\tconst type = args.type || 'post',\r\n-\t\t\tdataType = args.dataType || 'json',\r\n-\t\t\taction = ( ( args.prefix === undefined ) || 'learnpress_' ) + args.action,\r\n-\t\t\tdata = args.action ? $.extend( args.data, { action } ) : args.data;\r\n-\r\n-\t\t$.ajax( {\r\n-\t\t\tdata,\r\n-\t\t\turl: ( args.url || window.location.href ),\r\n-\t\t\ttype,\r\n-\t\t\tdataType: 'html',\r\n-\t\t\tsuccess( raw ) {\r\n-\t\t\t\tconst response = LP.parseResponse( raw, dataType );\r\n-\t\t\t\ttypeof ( args.success ) === 'function' && args.success( response, raw );\r\n-\t\t\t},\r\n-\t\t\terror() {\r\n-\t\t\t\ttypeof ( args.error ) === 'function' && args.error.apply( null, LP.funcArgs2Array() );\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t},\r\n-\r\n-\tfuncArgs2Array( args ) {\r\n-\t\tconst arr = [];\r\n-\t\tfor ( let i = 0; i \u003C args.length; i++ ) {\r\n-\t\t\tarr.push( args[ i ] );\r\n-\t\t}\r\n-\t\treturn arr;\r\n-\t},\r\n-\taddFilter( action, callback ) {\r\n-\t\tconst $doc = $( document ),\r\n-\t\t\tevent = 'LP.' + action;\r\n-\t\t$doc.on( event, callback );\r\n-\t\tLP.log( $doc.data( 'events' ) );\r\n-\t\treturn this;\r\n-\t},\r\n-\tapplyFilters() {\r\n-\t\tconst $doc = $( document ),\r\n-\t\t\taction = arguments[ 0 ],\r\n-\t\t\targs = this.funcArgs2Array( arguments );\r\n-\t\tif ( $doc.hasEvent( action ) ) {\r\n-\t\t\targs[ 0 ] = 'LP.' + action;\r\n-\t\t\treturn $doc.triggerHandler.apply( $doc, args );\r\n-\t\t}\r\n-\t\treturn args[ 1 ];\r\n-\t},\r\n-\taddAction( action, callback ) {\r\n-\t\treturn this.addFilter( action, callback );\r\n-\t},\r\n-\tdoAction() {\r\n-\t\tconst $doc = $( document ),\r\n-\t\t\taction = arguments[ 0 ],\r\n-\t\t\targs = this.funcArgs2Array( arguments );\r\n-\t\tif ( $doc.hasEvent( action ) ) {\r\n-\t\t\targs[ 0 ] = 'LP.' + action;\r\n-\t\t\t$doc.trigger.apply( $doc, args );\r\n-\t\t}\r\n-\t},\r\n-\ttoElement( element, args ) {\r\n-\t\tif ( $( element ).length === 0 ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\targs = $.extend( {\r\n-\t\t\tdelay: 300,\r\n-\t\t\tduration: 'slow',\r\n-\t\t\toffset: 50,\r\n-\t\t\tcontainer: null,\r\n-\t\t\tcallback: null,\r\n-\t\t\tinvisible: false,\r\n-\t\t}, args || {} );\r\n-\t\tlet $container = $( args.container ),\r\n-\t\t\trootTop = 0;\r\n-\t\tif ( $container.length === 0 ) {\r\n-\t\t\t$container = $( 'body, html' );\r\n-\t\t}\r\n-\t\trootTop = $container.offset().top;\r\n-\t\tconst to = ( $( element ).offset().top + $container.scrollTop() ) - rootTop - args.offset;\r\n-\r\n-\t\tfunction isElementInView( element, fullyInView ) {\r\n-\t\t\tconst pageTop = $container.scrollTop();\r\n-\t\t\tconst pageBottom = pageTop + $container.height();\r\n-\t\t\tconst elementTop = $( element ).offset().top - $container.offset().top;\r\n-\t\t\tconst elementBottom = elementTop + $( element ).height();\r\n-\r\n-\t\t\tif ( fullyInView === true ) {\r\n-\t\t\t\treturn ( ( pageTop \u003C elementTop ) && ( pageBottom > elementBottom ) );\r\n-\t\t\t}\r\n-\t\t\treturn ( ( elementTop \u003C= pageBottom ) && ( elementBottom >= pageTop ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( args.invisible && isElementInView( element, true ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$container.fadeIn( 10 )\r\n-\t\t\t.delay( args.delay )\r\n-\t\t\t.animate( {\r\n-\t\t\t\tscrollTop: to,\r\n-\t\t\t}, args.duration, args.callback );\r\n-\t},\r\n-\tuniqueId( prefix, more_entropy ) {\r\n-\t\tif ( typeof prefix === 'undefined' ) {\r\n-\t\t\tprefix = '';\r\n-\t\t}\r\n-\r\n-\t\tlet retId;\r\n-\t\tconst formatSeed = function( seed, reqWidth ) {\r\n-\t\t\tseed = parseInt( seed, 10 )\r\n-\t\t\t\t.toString( 16 ); \u002F\u002F to hex str\r\n-\t\t\tif ( reqWidth \u003C seed.length ) { \u002F\u002F so long we split\r\n-\t\t\t\treturn seed.slice( seed.length - reqWidth );\r\n-\t\t\t}\r\n-\t\t\tif ( reqWidth > seed.length ) { \u002F\u002F so short we pad\r\n-\t\t\t\treturn new Array( 1 + ( reqWidth - seed.length ) )\r\n-\t\t\t\t\t.join( '0' ) + seed;\r\n-\t\t\t}\r\n-\t\t\treturn seed;\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002F BEGIN REDUNDANT\r\n-\t\tif ( ! this.php_js ) {\r\n-\t\t\tthis.php_js = {};\r\n-\t\t}\r\n-\t\t\u002F\u002F END REDUNDANT\r\n-\t\tif ( ! this.php_js.uniqidSeed ) { \u002F\u002F init seed with big random int\r\n-\t\t\tthis.php_js.uniqidSeed = Math.floor( Math.random() * 0x75bcd15 );\r\n-\t\t}\r\n-\t\tthis.php_js.uniqidSeed++;\r\n-\r\n-\t\tretId = prefix; \u002F\u002F start with prefix, add current milliseconds hex string\r\n-\t\tretId += formatSeed( parseInt( new Date()\r\n-\t\t\t.getTime() \u002F 1000, 10 ), 8 );\r\n-\t\tretId += formatSeed( this.php_js.uniqidSeed, 5 ); \u002F\u002F add seed hex string\r\n-\t\tif ( more_entropy ) {\r\n-\t\t\t\u002F\u002F for more entropy we add a float lower to 10\r\n-\t\t\tretId += ( Math.random() * 10 )\r\n-\t\t\t\t.toFixed( 8 )\r\n-\t\t\t\t.toString();\r\n-\t\t}\r\n-\r\n-\t\treturn retId;\r\n-\t},\r\n-\tlog() {\r\n-\t\t\u002F\u002Fif (typeof LEARN_PRESS_DEBUG != 'undefined' && LEARN_PRESS_DEBUG && console) {\r\n-\t\tfor ( let i = 0, n = arguments.length; i \u003C n; i++ ) {\r\n-\t\t\tconsole.log( arguments[ i ] );\r\n-\t\t}\r\n-\t\t\u002F\u002F}\r\n-\t},\r\n-\tblockContent() {\r\n-\t\tif ( $( '#learn-press-block-content' ).length === 0 ) {\r\n-\t\t\t$( LP.template( 'learn-press-template-block-content', {} ) ).appendTo( $( 'body' ) );\r\n-\t\t}\r\n-\t\tLP.hideMainScrollbar().addClass( 'block-content' );\r\n-\t\t$( document ).trigger( 'learn_press_block_content' );\r\n-\t},\r\n-\tunblockContent() {\r\n-\t\tsetTimeout( function() {\r\n-\t\t\tLP.showMainScrollbar().removeClass( 'block-content' );\r\n-\t\t\t$( document ).trigger( 'learn_press_unblock_content' );\r\n-\t\t}, 350 );\r\n-\t},\r\n-\thideMainScrollbar( el ) {\r\n-\t\tif ( ! el ) {\r\n-\t\t\tel = 'html, body';\r\n-\t\t}\r\n-\t\tconst $el = $( el );\r\n-\t\t$el.each( function() {\r\n-\t\t\tconst $root = $( this ),\r\n-\t\t\t\toverflow = $root.css( 'overflow' );\r\n-\t\t\t$root.css( 'overflow', 'hidden' ).attr( 'overflow', overflow );\r\n-\t\t} );\r\n-\t\treturn $el;\r\n-\t},\r\n-\tshowMainScrollbar( el ) {\r\n-\t\tif ( ! el ) {\r\n-\t\t\tel = 'html, body';\r\n-\t\t}\r\n-\t\tconst $el = $( el );\r\n-\t\t$el.each( function() {\r\n-\t\t\tconst $root = $( this ),\r\n-\t\t\t\toverflow = $root.attr( 'overflow' );\r\n-\t\t\t$root.css( 'overflow', overflow ).removeAttr( 'overflow' );\r\n-\t\t} );\r\n-\t\treturn $el;\r\n-\t},\r\n-\ttemplate: typeof _ !== 'undefined' ? _.memoize( function( id, data ) {\r\n-\t\tlet compiled,\r\n-\t\t\toptions = {\r\n-\t\t\t\tevaluate: \u002F\u003C#([\\s\\S]+?)#>\u002Fg,\r\n-\t\t\t\tinterpolate: \u002F\\{\\{\\{([\\s\\S]+?)\\}\\}\\}\u002Fg,\r\n-\t\t\t\tescape: \u002F\\{\\{([^\\}]+?)\\}\\}(?!\\})\u002Fg,\r\n-\t\t\t\tvariable: 'data',\r\n-\t\t\t};\r\n-\r\n-\t\tconst tmpl = function( data ) {\r\n-\t\t\tcompiled = compiled || _.template( $( '#' + id ).html(), null, options );\r\n-\t\t\treturn compiled( data );\r\n-\t\t};\r\n-\t\treturn data ? tmpl( data ) : tmpl;\r\n-\t}, function( a, b ) {\r\n-\t\treturn a + '-' + JSON.stringify( b );\r\n-\t} ) : function() {\r\n-\t\treturn '';\r\n-\t},\r\n-\talert( localize, callback ) {\r\n-\t\tlet title = '',\r\n-\t\t\tmessage = '';\r\n-\t\tif ( typeof localize === 'string' ) {\r\n-\t\t\tmessage = localize;\r\n-\t\t} else {\r\n-\t\t\tif ( typeof localize.title !== 'undefined' ) {\r\n-\t\t\t\ttitle = localize.title;\r\n-\t\t\t}\r\n-\t\t\tif ( typeof localize.message !== 'undefined' ) {\r\n-\t\t\t\tmessage = localize.message;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$.alerts.alert( message, title, function( e ) {\r\n-\t\t\tLP._on_alert_hide();\r\n-\t\t\tcallback && callback( e );\r\n-\t\t} );\r\n-\t\tthis._on_alert_show();\r\n-\t},\r\n-\tconfirm( localize, callback ) {\r\n-\t\tlet title = '',\r\n-\t\t\tmessage = '';\r\n-\r\n-\t\tif ( typeof localize === 'string' ) {\r\n-\t\t\tmessage = localize;\r\n-\t\t} else {\r\n-\t\t\tif ( typeof localize.title !== 'undefined' ) {\r\n-\t\t\t\ttitle = localize.title;\r\n-\t\t\t}\r\n-\t\t\tif ( typeof localize.message !== 'undefined' ) {\r\n-\t\t\t\tmessage = localize.message;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$.alerts.confirm( message, title, function( e ) {\r\n-\t\t\tLP._on_alert_hide();\r\n-\t\t\tcallback && callback( e );\r\n-\t\t} );\r\n-\t\tthis._on_alert_show();\r\n-\t},\r\n-\t_on_alert_show() {\r\n-\t\tconst $container = $( '#popup_container' ),\r\n-\t\t\t$placeholder = $( '\u003Cspan id=\"popup_container_placeholder\" \u002F>' ).insertAfter( $container ).data( 'xxx', $container );\r\n-\t\t$container.stop().css( 'top', '-=50' ).css( 'opacity', '0' ).animate( {\r\n-\t\t\ttop: '+=50',\r\n-\t\t\topacity: 1,\r\n-\t\t}, 250 );\r\n-\t},\r\n-\t_on_alert_hide() {\r\n-\t\tconst $holder = $( '#popup_container_placeholder' ),\r\n-\t\t\t$container = $holder.data( 'xxx' );\r\n-\t\tif ( $container ) {\r\n-\t\t\t$container.replaceWith( $holder );\r\n-\t\t}\r\n-\t\t$container.appendTo( $( document.body ) );\r\n-\t\t$container.stop().animate( {\r\n-\t\t\ttop: '+=50',\r\n-\t\t\topacity: 0,\r\n-\t\t}, 250, function() {\r\n-\t\t\t$( this ).remove();\r\n-\t\t} );\r\n-\t},\r\n-\tsendMessage( data, object, targetOrigin, transfer ) {\r\n-\t\tif ( $.isPlainObject( data ) ) {\r\n-\t\t\tdata = JSON.stringify( data );\r\n-\t\t}\r\n-\t\tobject = object || window;\r\n-\t\ttargetOrigin = targetOrigin || '*';\r\n-\t\tobject.postMessage( data, targetOrigin, transfer );\r\n-\t},\r\n-\treceiveMessage( event, b ) {\r\n-\t\tlet target = event.origin || event.originalEvent.origin,\r\n-\t\t\tdata = event.data || event.originalEvent.data || '';\r\n-\t\tif ( typeof data === 'string' || data instanceof String ) {\r\n-\t\t\tif ( data.indexOf( '{' ) === 0 ) {\r\n-\t\t\t\tdata = LP.parseJSON( data );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tLP.Hook.doAction( 'learn_press_receive_message', data, target );\r\n-\t},\r\n-\r\n-\tcamelCaseDashObjectKeys( obj, deep = true ) {\r\n-\t\tconst self = LP;\r\n-\t\tconst isArray = function( a ) {\r\n-\t\t\treturn Array.isArray( a );\r\n-\t\t};\r\n-\t\tconst isObject = function( o ) {\r\n-\t\t\treturn o === Object( o ) && ! isArray( o ) && typeof o !== 'function';\r\n-\t\t};\r\n-\t\tconst toCamel = ( s ) => {\r\n-\t\t\treturn s.replace( \u002F([-_][a-z])\u002Fig, ( $1 ) => {\r\n-\t\t\t\treturn $1.toUpperCase()\r\n-\t\t\t\t\t.replace( '-', '' )\r\n-\t\t\t\t\t.replace( '_', '' );\r\n-\t\t\t} );\r\n-\t\t};\r\n-\r\n-\t\tif ( isObject( obj ) ) {\r\n-\t\t\tconst n = {};\r\n-\r\n-\t\t\tObject.keys( obj )\r\n-\t\t\t\t.forEach( ( k ) => {\r\n-\t\t\t\t\tn[ toCamel( k ) ] = deep ? self.camelCaseDashObjectKeys( obj[ k ] ) : obj[ k ];\r\n-\t\t\t\t} );\r\n-\r\n-\t\t\treturn n;\r\n-\t\t} else if ( isArray( obj ) ) {\r\n-\t\t\treturn obj.map( ( i ) => {\r\n-\t\t\t\treturn self.camelCaseDashObjectKeys( i );\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\treturn obj;\r\n-\t},\r\n-\tIframeSubmit,\r\n-};\r\n-\r\n-$( document ).ready( function() {\r\n-\tif ( typeof $.alerts !== 'undefined' ) {\r\n-\t\t$.alerts.overlayColor = '#000';\r\n-\t\t$.alerts.overlayOpacity = 0.5;\r\n-\t\t$.alerts.okButton = lpGlobalSettings.localize.button_ok;\r\n-\t\t$.alerts.cancelButton = lpGlobalSettings.localize.button_cancel;\r\n-\t}\r\n-\r\n-\t$( '.learn-press-message.fixed' ).each( function() {\r\n-\t\tconst $el = $( this ),\r\n-\t\t\toptions = $el.data();\r\n-\t\t( function( $el, options ) {\r\n-\t\t\tif ( options.delayIn ) {\r\n-\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t$el.show().hide().fadeIn();\r\n-\t\t\t\t}, options.delayIn );\r\n-\t\t\t}\r\n-\t\t\tif ( options.delayOut ) {\r\n-\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t$el.fadeOut();\r\n-\t\t\t\t}, options.delayOut + ( options.delayIn || 0 ) );\r\n-\t\t\t}\r\n-\t\t}( $el, options ) );\r\n-\t} );\r\n-\r\n-\tsetTimeout( function() {\r\n-\t\t$( '.learn-press-nav-tabs li.active:not(.default) a' ).trigger( 'click' );\r\n-\t}, 300 );\r\n-\r\n-\t\u002F\u002F$( 'body.course-item-popup' ).parent().css( 'overflow', 'hidden' );\r\n-\r\n-\t( function() {\r\n-\t\tlet timer = null,\r\n-\t\t\tcallback = function() {\r\n-\t\t\t\t$( '.auto-check-lines' ).checkLines( function( r ) {\r\n-\t\t\t\t\tif ( r > 1 ) {\r\n-\t\t\t\t\t\t$( this ).removeClass( 'single-lines' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$( this ).addClass( 'single-lines' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$( this ).attr( 'rows', r );\r\n-\t\t\t\t} );\r\n-\t\t\t};\r\n-\t\t$( window ).on( 'resize.check-lines', function() {\r\n-\t\t\tif ( timer ) {\r\n-\t\t\t\ttimer && clearTimeout( timer );\r\n-\t\t\t\ttimer = setTimeout( callback, 300 );\r\n-\t\t\t} else {\r\n-\t\t\t\tcallback();\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t}() );\r\n-\r\n-\t$( '.learn-press-tooltip, .lp-passing-conditional' ).LP_Tooltip( { offset: [ 24, 24 ] } );\r\n-\r\n-\t$( '.learn-press-icon' ).LP_Tooltip( { offset: [ 30, 30 ] } );\r\n-\r\n-\t$( '.learn-press-message[data-autoclose]' ).each( function() {\r\n-\t\tconst $el = $( this ),\r\n-\t\t\tdelay = parseInt( $el.data( 'autoclose' ) );\r\n-\t\tif ( delay ) {\r\n-\t\t\tsetTimeout( function( $el ) {\r\n-\t\t\t\t$el.fadeOut();\r\n-\t\t\t}, delay, $el );\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\t$( document ).on( 'click', function() {\r\n-\t\t$( document ).trigger( 'learn-press\u002Fclose-all-quick-tip' );\r\n-\t} );\r\n-} );\r\n-\r\n-extend( {\r\n-\tEvent_Callback,\r\n-\tMessageBox,\r\n-\tCookies,\r\n-\tlocalStorage: _localStorage,\r\n-\t..._default,\r\n-} );\r\n-\r\n-export default {\r\n-\tfn,\r\n-\tQuickTip,\r\n-\tCookies,\r\n-\tlocalStorage: _localStorage,\r\n-\tshowPass,\r\n-};\r\n+\u002F**\n+ * Utility functions may use for both admin and frontend.\n+ *\n+ * @version 3.2.6\n+ *\u002F\n+\n+import extend from '.\u002Fextend';\n+import fn from '.\u002Ffn';\n+import QuickTip from '.\u002Fquick-tip';\n+import MessageBox from '.\u002Fmessage-box';\n+import Event_Callback from '.\u002Fevent-callback';\n+import Hook from '.\u002Fhook';\n+import Cookies from '.\u002Fcookies';\n+import _localStorage from '.\u002Flocal-storage';\n+import * as jplugins from '.\u002Fjquery.plugins';\n+import IframeSubmit from '.\u002Fiframe-submit';\n+import showPass from '.\u002Fshow-password';\n+\n+const $ = jQuery;\n+\n+String.prototype.getQueryVar = function( name ) {\n+\tname = name.replace( \u002F[\\[]\u002F, '\\\\[' ).replace( \u002F[\\]]\u002F, '\\\\]' );\n+\tconst regex = new RegExp( '[\\\\?&]' + name + '=([^&#]*)' ),\n+\t\tresults = regex.exec( this );\n+\treturn results === null ? '' : decodeURIComponent( results[ 1 ].replace( \u002F\\+\u002Fg, ' ' ) );\n+};\n+\n+String.prototype.addQueryVar = function( name, value ) {\n+\tlet url = this,\n+\t\tm = url.split( '#' );\n+\turl = m[ 0 ];\n+\tif ( name.match( \u002F\\[\u002F ) ) {\n+\t\turl += url.match( \u002F\\?\u002F ) ? '&' : '?';\n+\t\turl += name + '=' + value;\n+\t} else if ( ( url.indexOf( '&' + name + '=' ) != -1 ) || ( url.indexOf( '?' + name + '=' ) != -1 ) ) {\n+\t\turl = url.replace( new RegExp( name + '=([^&#]*)', 'g' ), name + '=' + value );\n+\t} else {\n+\t\turl += url.match( \u002F\\?\u002F ) ? '&' : '?';\n+\t\turl += name + '=' + value;\n+\t}\n+\treturn url + ( m[ 1 ] ? '#' + m[ 1 ] : '' );\n+};\n+\n+String.prototype.removeQueryVar = function( name ) {\n+\tlet url = this;\n+\tconst m = url.split( '#' );\n+\turl = m[ 0 ];\n+\tname = name.replace( \u002F[\\[]\u002F, '\\\\[' ).replace( \u002F[\\]]\u002F, '\\\\]' );\n+\tconst regex = new RegExp( '[\\\\?&]' + name + '([\\[][^=]*)?=([^&#]*)', 'g' );\n+\turl = url.replace( regex, '' );\n+\treturn url + ( m[ 1 ] ? '#' + m[ 1 ] : '' );\n+};\n+\n+\u002F\u002F if ( $.isEmptyObject( '' ) == false ) {\n+\u002F\u002F \t$.isEmptyObject = function( a ) {\n+\u002F\u002F \t\tlet prop;\n+\u002F\u002F \t\tfor ( prop in a ) {\n+\u002F\u002F \t\t\tif ( a.hasOwnProperty( prop ) ) {\n+\u002F\u002F \t\t\t\treturn false;\n+\u002F\u002F \t\t\t}\n+\u002F\u002F \t\t}\n+\u002F\u002F \t\treturn true;\n+\u002F\u002F \t};\n+\u002F\u002F }\n+\n+const _default = {\n+\tHook,\n+\tsetUrl( url, ember, title ) {\n+\t\tif ( url ) {\n+\t\t\thistory.pushState( {}, title, url );\n+\t\t\tLP.Hook.doAction( 'learn_press_set_location_url', url );\n+\t\t}\n+\t},\n+\ttoggleGroupSection( el, target ) {\n+\t\tconst $el = $( el ),\n+\t\t\tisHide = $el.hasClass( 'hide-if-js' );\n+\t\tif ( isHide ) {\n+\t\t\t$el.hide().removeClass( 'hide-if-js' );\n+\t\t}\n+\t\t$el.removeClass( 'hide-if-js' ).slideToggle( function() {\n+\t\t\tconst $this = $( this );\n+\t\t\tif ( $this.is( ':visible' ) ) {\n+\t\t\t\t$( target ).addClass( 'toggle-on' ).removeClass( 'toggle-off' );\n+\t\t\t} else {\n+\t\t\t\t$( target ).addClass( 'toggle-off' ).removeClass( 'toggle-on' );\n+\t\t\t}\n+\t\t} );\n+\t},\n+\toverflow( el, v ) {\n+\t\tconst $el = $( el ),\n+\t\t\toverflow = $el.css( 'overflow' );\n+\t\tif ( v ) {\n+\t\t\t$el.css( 'overflow', v ).data( 'overflow', overflow );\n+\t\t} else {\n+\t\t\t$el.css( 'overflow', $el.data( 'overflow' ) );\n+\t\t}\n+\t},\n+\tgetUrl() {\n+\t\treturn window.location.href;\n+\t},\n+\taddQueryVar( name, value, url ) {\n+\t\treturn ( url === undefined ? window.location.href : url ).addQueryVar( name, value );\n+\t},\n+\tremoveQueryVar( name, url ) {\n+\t\treturn ( url === undefined ? window.location.href : url ).removeQueryVar( name );\n+\t},\n+\treload( url ) {\n+\t\tif ( ! url ) {\n+\t\t\turl = window.location.href;\n+\t\t}\n+\t\twindow.location.href = url;\n+\t},\n+\n+\tparseResponse( response, type ) {\n+\t\tconst m = response.match( \u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs );\n+\t\tif ( m ) {\n+\t\t\tresponse = m[ 1 ];\n+\t\t}\n+\t\treturn ( type || 'json' ) === 'json' ? this.parseJSON( response ) : response;\n+\t},\n+\tparseJSON( data ) {\n+\t\tif ( typeof data !== 'string' ) {\n+\t\t\treturn data;\n+\t\t}\n+\n+\t\tconst m = String.raw( { raw: data } ).match( \u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs );\n+\n+\t\ttry {\n+\t\t\tif ( m ) {\n+\t\t\t\tdata = JSON.parse( m[ 1 ].replace( \u002F(?:\\r\\n|\\r|\\n)\u002Fg, '' ) );\n+\t\t\t} else {\n+\t\t\t\tdata = JSON.parse( data );\n+\t\t\t}\n+\t\t} catch ( e ) {\n+\t\t\tdata = {};\n+\t\t}\n+\t\treturn data;\n+\t},\n+\tajax( args ) {\n+\t\tconst type = args.type || 'post',\n+\t\t\tdataType = args.dataType || 'json',\n+\t\t\tdata = args.action ? $.extend( args.data, { 'lp-ajax': args.action } ) : args.data,\n+\t\t\tbeforeSend = args.beforeSend || function() {\n+\t\t\t},\n+\t\t\turl = args.url || window.location.href;\n+\t\t\u002F\u002F                        console.debug( beforeSend );\n+\t\t$.ajax( {\n+\t\t\tdata,\n+\t\t\turl,\n+\t\t\ttype,\n+\t\t\tdataType: 'html',\n+\t\t\tbeforeSend: beforeSend.apply( null, args ),\n+\t\t\tsuccess( raw ) {\n+\t\t\t\tconst response = LP.parseResponse( raw, dataType );\n+\t\t\t\ttypeof ( args.success ) === 'function' && args.success( response, raw );\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t\ttypeof ( args.error ) === 'function' && args.error.apply( null, LP.funcArgs2Array() );\n+\t\t\t},\n+\t\t} );\n+\t},\n+\tdoAjax( args ) {\n+\t\tconst type = args.type || 'post',\n+\t\t\tdataType = args.dataType || 'json',\n+\t\t\taction = ( ( args.prefix === undefined ) || 'learnpress_' ) + args.action,\n+\t\t\tdata = args.action ? $.extend( args.data, { action } ) : args.data;\n+\n+\t\t$.ajax( {\n+\t\t\tdata,\n+\t\t\turl: ( args.url || window.location.href ),\n+\t\t\ttype,\n+\t\t\tdataType: 'html',\n+\t\t\tsuccess( raw ) {\n+\t\t\t\tconst response = LP.parseResponse( raw, dataType );\n+\t\t\t\ttypeof ( args.success ) === 'function' && args.success( response, raw );\n+\t\t\t},\n+\t\t\terror() {\n+\t\t\t\ttypeof ( args.error ) === 'function' && args.error.apply( null, LP.funcArgs2Array() );\n+\t\t\t},\n+\t\t} );\n+\t},\n+\n+\tfuncArgs2Array( args ) {\n+\t\tconst arr = [];\n+\t\tfor ( let i = 0; i \u003C args.length; i++ ) {\n+\t\t\tarr.push( args[ i ] );\n+\t\t}\n+\t\treturn arr;\n+\t},\n+\taddFilter( action, callback ) {\n+\t\tconst $doc = $( document ),\n+\t\t\tevent = 'LP.' + action;\n+\t\t$doc.on( event, callback );\n+\t\tLP.log( $doc.data( 'events' ) );\n+\t\treturn this;\n+\t},\n+\tapplyFilters() {\n+\t\tconst $doc = $( document ),\n+\t\t\taction = arguments[ 0 ],\n+\t\t\targs = this.funcArgs2Array( arguments );\n+\t\tif ( $doc.hasEvent( action ) ) {\n+\t\t\targs[ 0 ] = 'LP.' + action;\n+\t\t\treturn $doc.triggerHandler.apply( $doc, args );\n+\t\t}\n+\t\treturn args[ 1 ];\n+\t},\n+\taddAction( action, callback ) {\n+\t\treturn this.addFilter( action, callback );\n+\t},\n+\tdoAction() {\n+\t\tconst $doc = $( document ),\n+\t\t\taction = arguments[ 0 ],\n+\t\t\targs = this.funcArgs2Array( arguments );\n+\t\tif ( $doc.hasEvent( action ) ) {\n+\t\t\targs[ 0 ] = 'LP.' + action;\n+\t\t\t$doc.trigger.apply( $doc, args );\n+\t\t}\n+\t},\n+\ttoElement( element, args ) {\n+\t\tif ( $( element ).length === 0 ) {\n+\t\t\treturn;\n+\t\t}\n+\t\targs = $.extend( {\n+\t\t\tdelay: 300,\n+\t\t\tduration: 'slow',\n+\t\t\toffset: 50,\n+\t\t\tcontainer: null,\n+\t\t\tcallback: null,\n+\t\t\tinvisible: false,\n+\t\t}, args || {} );\n+\t\tlet $container = $( args.container ),\n+\t\t\trootTop = 0;\n+\t\tif ( $container.length === 0 ) {\n+\t\t\t$container = $( 'body, html' );\n+\t\t}\n+\t\trootTop = $container.offset().top;\n+\t\tconst to = ( $( element ).offset().top + $container.scrollTop() ) - rootTop - args.offset;\n+\n+\t\tfunction isElementInView( element, fullyInView ) {\n+\t\t\tconst pageTop = $container.scrollTop();\n+\t\t\tconst pageBottom = pageTop + $container.height();\n+\t\t\tconst elementTop = $( element ).offset().top - $container.offset().top;\n+\t\t\tconst elementBottom = elementTop + $( element ).height();\n+\n+\t\t\tif ( fullyInView === true ) {\n+\t\t\t\treturn ( ( pageTop \u003C elementTop ) && ( pageBottom > elementBottom ) );\n+\t\t\t}\n+\t\t\treturn ( ( elementTop \u003C= pageBottom ) && ( elementBottom >= pageTop ) );\n+\t\t}\n+\n+\t\tif ( args.invisible && isElementInView( element, true ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$container.fadeIn( 10 )\n+\t\t\t.delay( args.delay )\n+\t\t\t.animate( {\n+\t\t\t\tscrollTop: to,\n+\t\t\t}, args.duration, args.callback );\n+\t},\n+\tuniqueId( prefix, more_entropy ) {\n+\t\tif ( typeof prefix === 'undefined' ) {\n+\t\t\tprefix = '';\n+\t\t}\n+\n+\t\tlet retId;\n+\t\tconst formatSeed = function( seed, reqWidth ) {\n+\t\t\tseed = parseInt( seed, 10 )\n+\t\t\t\t.toString( 16 ); \u002F\u002F to hex str\n+\t\t\tif ( reqWidth \u003C seed.length ) { \u002F\u002F so long we split\n+\t\t\t\treturn seed.slice( seed.length - reqWidth );\n+\t\t\t}\n+\t\t\tif ( reqWidth > seed.length ) { \u002F\u002F so short we pad\n+\t\t\t\treturn new Array( 1 + ( reqWidth - seed.length ) )\n+\t\t\t\t\t.join( '0' ) + seed;\n+\t\t\t}\n+\t\t\treturn seed;\n+\t\t};\n+\n+\t\t\u002F\u002F BEGIN REDUNDANT\n+\t\tif ( ! this.php_js ) {\n+\t\t\tthis.php_js = {};\n+\t\t}\n+\t\t\u002F\u002F END REDUNDANT\n+\t\tif ( ! this.php_js.uniqidSeed ) { \u002F\u002F init seed with big random int\n+\t\t\tthis.php_js.uniqidSeed = Math.floor( Math.random() * 0x75bcd15 );\n+\t\t}\n+\t\tthis.php_js.uniqidSeed++;\n+\n+\t\tretId = prefix; \u002F\u002F start with prefix, add current milliseconds hex string\n+\t\tretId += formatSeed( parseInt( new Date()\n+\t\t\t.getTime() \u002F 1000, 10 ), 8 );\n+\t\tretId += formatSeed( this.php_js.uniqidSeed, 5 ); \u002F\u002F add seed hex string\n+\t\tif ( more_entropy ) {\n+\t\t\t\u002F\u002F for more entropy we add a float lower to 10\n+\t\t\tretId += ( Math.random() * 10 )\n+\t\t\t\t.toFixed( 8 )\n+\t\t\t\t.toString();\n+\t\t}\n+\n+\t\treturn retId;\n+\t},\n+\tlog() {\n+\t\t\u002F\u002Fif (typeof LEARN_PRESS_DEBUG != 'undefined' && LEARN_PRESS_DEBUG && console) {\n+\t\tfor ( let i = 0, n = arguments.length; i \u003C n; i++ ) {\n+\t\t\tconsole.log( arguments[ i ] );\n+\t\t}\n+\t\t\u002F\u002F}\n+\t},\n+\tblockContent() {\n+\t\tif ( $( '#learn-press-block-content' ).length === 0 ) {\n+\t\t\t$( LP.template( 'learn-press-template-block-content', {} ) ).appendTo( $( 'body' ) );\n+\t\t}\n+\t\tLP.hideMainScrollbar().addClass( 'block-content' );\n+\t\t$( document ).trigger( 'learn_press_block_content' );\n+\t},\n+\tunblockContent() {\n+\t\tsetTimeout( function() {\n+\t\t\tLP.showMainScrollbar().removeClass( 'block-content' );\n+\t\t\t$( document ).trigger( 'learn_press_unblock_content' );\n+\t\t}, 350 );\n+\t},\n+\thideMainScrollbar( el ) {\n+\t\tif ( ! el ) {\n+\t\t\tel = 'html, body';\n+\t\t}\n+\t\tconst $el = $( el );\n+\t\t$el.each( function() {\n+\t\t\tconst $root = $( this ),\n+\t\t\t\toverflow = $root.css( 'overflow' );\n+\t\t\t$root.css( 'overflow', 'hidden' ).attr( 'overflow', overflow );\n+\t\t} );\n+\t\treturn $el;\n+\t},\n+\tshowMainScrollbar( el ) {\n+\t\tif ( ! el ) {\n+\t\t\tel = 'html, body';\n+\t\t}\n+\t\tconst $el = $( el );\n+\t\t$el.each( function() {\n+\t\t\tconst $root = $( this ),\n+\t\t\t\toverflow = $root.attr( 'overflow' );\n+\t\t\t$root.css( 'overflow', overflow ).removeAttr( 'overflow' );\n+\t\t} );\n+\t\treturn $el;\n+\t},\n+\ttemplate: typeof _ !== 'undefined' ? _.memoize( function( id, data ) {\n+\t\tlet compiled,\n+\t\t\toptions = {\n+\t\t\t\tevaluate: \u002F\u003C#([\\s\\S]+?)#>\u002Fg,\n+\t\t\t\tinterpolate: \u002F\\{\\{\\{([\\s\\S]+?)\\}\\}\\}\u002Fg,\n+\t\t\t\tescape: \u002F\\{\\{([^\\}]+?)\\}\\}(?!\\})\u002Fg,\n+\t\t\t\tvariable: 'data',\n+\t\t\t};\n+\n+\t\tconst tmpl = function( data ) {\n+\t\t\tcompiled = compiled || _.template( $( '#' + id ).html(), null, options );\n+\t\t\treturn compiled( data );\n+\t\t};\n+\t\treturn data ? tmpl( data ) : tmpl;\n+\t}, function( a, b ) {\n+\t\treturn a + '-' + JSON.stringify( b );\n+\t} ) : function() {\n+\t\treturn '';\n+\t},\n+\talert( localize, callback ) {\n+\t\tlet title = '',\n+\t\t\tmessage = '';\n+\t\tif ( typeof localize === 'string' ) {\n+\t\t\tmessage = localize;\n+\t\t} else {\n+\t\t\tif ( typeof localize.title !== 'undefined' ) {\n+\t\t\t\ttitle = localize.title;\n+\t\t\t}\n+\t\t\tif ( typeof localize.message !== 'undefined' ) {\n+\t\t\t\tmessage = localize.message;\n+\t\t\t}\n+\t\t}\n+\t\t$.alerts.alert( message, title, function( e ) {\n+\t\t\tLP._on_alert_hide();\n+\t\t\tcallback && callback( e );\n+\t\t} );\n+\t\tthis._on_alert_show();\n+\t},\n+\tconfirm( localize, callback ) {\n+\t\tlet title = '',\n+\t\t\tmessage = '';\n+\n+\t\tif ( typeof localize === 'string' ) {\n+\t\t\tmessage = localize;\n+\t\t} else {\n+\t\t\tif ( typeof localize.title !== 'undefined' ) {\n+\t\t\t\ttitle = localize.title;\n+\t\t\t}\n+\t\t\tif ( typeof localize.message !== 'undefined' ) {\n+\t\t\t\tmessage = localize.message;\n+\t\t\t}\n+\t\t}\n+\t\t$.alerts.confirm( message, title, function( e ) {\n+\t\t\tLP._on_alert_hide();\n+\t\t\tcallback && callback( e );\n+\t\t} );\n+\t\tthis._on_alert_show();\n+\t},\n+\t_on_alert_show() {\n+\t\tconst $container = $( '#popup_container' ),\n+\t\t\t$placeholder = $( '\u003Cspan id=\"popup_container_placeholder\" \u002F>' ).insertAfter( $container ).data( 'xxx', $container );\n+\t\t$container.stop().css( 'top', '-=50' ).css( 'opacity', '0' ).animate( {\n+\t\t\ttop: '+=50',\n+\t\t\topacity: 1,\n+\t\t}, 250 );\n+\t},\n+\t_on_alert_hide() {\n+\t\tconst $holder = $( '#popup_container_placeholder' ),\n+\t\t\t$container = $holder.data( 'xxx' );\n+\t\tif ( $container ) {\n+\t\t\t$container.replaceWith( $holder );\n+\t\t}\n+\t\t$container.appendTo( $( document.body ) );\n+\t\t$container.stop().animate( {\n+\t\t\ttop: '+=50',\n+\t\t\topacity: 0,\n+\t\t}, 250, function() {\n+\t\t\t$( this ).remove();\n+\t\t} );\n+\t},\n+\tsendMessage( data, object, targetOrigin, transfer ) {\n+\t\tif ( $.isPlainObject( data ) ) {\n+\t\t\tdata = JSON.stringify( data );\n+\t\t}\n+\t\tobject = object || window;\n+\t\ttargetOrigin = targetOrigin || '*';\n+\t\tobject.postMessage( data, targetOrigin, transfer );\n+\t},\n+\treceiveMessage( event, b ) {\n+\t\tlet target = event.origin || event.originalEvent.origin,\n+\t\t\tdata = event.data || event.originalEvent.data || '';\n+\t\tif ( typeof data === 'string' || data instanceof String ) {\n+\t\t\tif ( data.indexOf( '{' ) === 0 ) {\n+\t\t\t\tdata = LP.parseJSON( data );\n+\t\t\t}\n+\t\t}\n+\t\tLP.Hook.doAction( 'learn_press_receive_message', data, target );\n+\t},\n+\n+\tcamelCaseDashObjectKeys( obj, deep = true ) {\n+\t\tconst self = LP;\n+\t\tconst isArray = function( a ) {\n+\t\t\treturn Array.isArray( a );\n+\t\t};\n+\t\tconst isObject = function( o ) {\n+\t\t\treturn o === Object( o ) && ! isArray( o ) && typeof o !== 'function';\n+\t\t};\n+\t\tconst toCamel = ( s ) => {\n+\t\t\treturn s.replace( \u002F([-_][a-z])\u002Fig, ( $1 ) => {\n+\t\t\t\treturn $1.toUpperCase()\n+\t\t\t\t\t.replace( '-', '' )\n+\t\t\t\t\t.replace( '_', '' );\n+\t\t\t} );\n+\t\t};\n+\n+\t\tif ( isObject( obj ) ) {\n+\t\t\tconst n = {};\n+\n+\t\t\tObject.keys( obj )\n+\t\t\t\t.forEach( ( k ) => {\n+\t\t\t\t\tn[ toCamel( k ) ] = deep ? self.camelCaseDashObjectKeys( obj[ k ] ) : obj[ k ];\n+\t\t\t\t} );\n+\n+\t\t\treturn n;\n+\t\t} else if ( isArray( obj ) ) {\n+\t\t\treturn obj.map( ( i ) => {\n+\t\t\t\treturn self.camelCaseDashObjectKeys( i );\n+\t\t\t} );\n+\t\t}\n+\n+\t\treturn obj;\n+\t},\n+\tIframeSubmit,\n+};\n+\n+$( document ).ready( function() {\n+\tif ( typeof $.alerts !== 'undefined' ) {\n+\t\t$.alerts.overlayColor = '#000';\n+\t\t$.alerts.overlayOpacity = 0.5;\n+\t\t$.alerts.okButton = lpGlobalSettings.localize.button_ok;\n+\t\t$.alerts.cancelButton = lpGlobalSettings.localize.button_cancel;\n+\t}\n+\n+\t$( '.learn-press-message.fixed' ).each( function() {\n+\t\tconst $el = $( this ),\n+\t\t\toptions = $el.data();\n+\t\t( function( $el, options ) {\n+\t\t\tif ( options.delayIn ) {\n+\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t$el.show().hide().fadeIn();\n+\t\t\t\t}, options.delayIn );\n+\t\t\t}\n+\t\t\tif ( options.delayOut ) {\n+\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t$el.fadeOut();\n+\t\t\t\t}, options.delayOut + ( options.delayIn || 0 ) );\n+\t\t\t}\n+\t\t}( $el, options ) );\n+\t} );\n+\n+\tsetTimeout( function() {\n+\t\t$( '.learn-press-nav-tabs li.active:not(.default) a' ).trigger( 'click' );\n+\t}, 300 );\n+\n+\t\u002F\u002F$( 'body.course-item-popup' ).parent().css( 'overflow', 'hidden' );\n+\n+\t( function() {\n+\t\tlet timer = null,\n+\t\t\tcallback = function() {\n+\t\t\t\t$( '.auto-check-lines' ).checkLines( function( r ) {\n+\t\t\t\t\tif ( r > 1 ) {\n+\t\t\t\t\t\t$( this ).removeClass( 'single-lines' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$( this ).addClass( 'single-lines' );\n+\t\t\t\t\t}\n+\t\t\t\t\t$( this ).attr( 'rows', r );\n+\t\t\t\t} );\n+\t\t\t};\n+\t\t$( window ).on( 'resize.check-lines', function() {\n+\t\t\tif ( timer ) {\n+\t\t\t\ttimer && clearTimeout( timer );\n+\t\t\t\ttimer = setTimeout( callback, 300 );\n+\t\t\t} else {\n+\t\t\t\tcallback();\n+\t\t\t}\n+\t\t} );\n+\t}() );\n+\n+\t$( '.learn-press-tooltip, .lp-passing-conditional' ).LP_Tooltip( { offset: [ 24, 24 ] } );\n+\n+\t$( '.learn-press-icon' ).LP_Tooltip( { offset: [ 30, 30 ] } );\n+\n+\t$( '.learn-press-message[data-autoclose]' ).each( function() {\n+\t\tconst $el = $( this ),\n+\t\t\tdelay = parseInt( $el.data( 'autoclose' ) );\n+\t\tif ( delay ) {\n+\t\t\tsetTimeout( function( $el ) {\n+\t\t\t\t$el.fadeOut();\n+\t\t\t}, delay, $el );\n+\t\t}\n+\t} );\n+\n+\t$( document ).on( 'click', function() {\n+\t\t$( document ).trigger( 'learn-press\u002Fclose-all-quick-tip' );\n+\t} );\n+} );\n+\n+extend( {\n+\tEvent_Callback,\n+\tMessageBox,\n+\tCookies,\n+\tlocalStorage: _localStorage,\n+\t..._default,\n+} );\n+\n+export default {\n+\tfn,\n+\tQuickTip,\n+\tCookies,\n+\tlocalStorage: _localStorage,\n+\tshowPass,\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fjquery.plugins.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fjquery.plugins.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fjquery.plugins.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fjquery.plugins.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,220 +1,220 @@\n-const $ = window.jQuery || jQuery;\r\n-\r\n-const serializeJSON = function serializeJSON( path ) {\r\n-\tconst isInput = $( this ).is( 'input' ) || $( this ).is( 'select' ) || $( this ).is( 'textarea' );\r\n-\tlet unIndexed = isInput ? $( this ).serializeArray() : $( this ).find( 'input, select, textarea' ).serializeArray(),\r\n-\t\tindexed = {},\r\n-\t\tvalidate = \u002F(\\[([a-zA-Z0-9_-]+)?\\]?)\u002Fg,\r\n-\t\tarrayKeys = {},\r\n-\t\tend = false;\r\n-\t$.each( unIndexed, function() {\r\n-\t\tconst that = this,\r\n-\t\t\tmatch = this.name.match( \u002F^([0-9a-zA-Z_-]+)\u002F );\r\n-\t\tif ( ! match ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tlet keys = this.name.match( validate ),\r\n-\t\t\tobjPath = \"indexed['\" + match[ 0 ] + \"']\";\r\n-\r\n-\t\tif ( keys ) {\r\n-\t\t\tif ( typeof indexed[ match[ 0 ] ] != 'object' ) {\r\n-\t\t\t\tindexed[ match[ 0 ] ] = {};\r\n-\t\t\t}\r\n-\r\n-\t\t\t$.each( keys, function( i, prop ) {\r\n-\t\t\t\tprop = prop.replace( \u002F\\]|\\[\u002Fg, '' );\r\n-\t\t\t\tlet rawPath = objPath.replace( \u002F'|\\[|\\]\u002Fg, '' ),\r\n-\t\t\t\t\tobjExp = '',\r\n-\t\t\t\t\tpreObjPath = objPath;\r\n-\r\n-\t\t\t\tif ( prop == '' ) {\r\n-\t\t\t\t\tif ( arrayKeys[ rawPath ] == undefined ) {\r\n-\t\t\t\t\t\tarrayKeys[ rawPath ] = 0;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tarrayKeys[ rawPath ]++;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tobjPath += \"['\" + arrayKeys[ rawPath ] + \"']\";\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( ! isNaN( prop ) ) {\r\n-\t\t\t\t\t\tarrayKeys[ rawPath ] = prop;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tobjPath += \"['\" + prop + \"']\";\r\n-\t\t\t\t}\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tif ( i == keys.length - 1 ) {\r\n-\t\t\t\t\t\tobjExp = objPath + '=that.value;';\r\n-\t\t\t\t\t\tend = true;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tobjExp = objPath + '={}';\r\n-\t\t\t\t\t\tend = false;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tconst evalString = '' +\r\n-                        'if( typeof ' + objPath + \" == 'undefined'){\" + objExp + ';' +\r\n-                        '}else{' +\r\n-                        'if(end){' +\r\n-                        'if(typeof ' + preObjPath + \"!='object'){\" + preObjPath + '={};}' +\r\n-                        objExp +\r\n-                        '}' +\r\n-                        '}';\r\n-\t\t\t\t\teval( evalString );\r\n-\t\t\t\t} catch ( e ) {\r\n-\t\t\t\t\tconsole.log( 'Error:' + e + '\\n' + objExp );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t} else {\r\n-\t\t\tindexed[ match[ 0 ] ] = this.value;\r\n-\t\t}\r\n-\t} );\r\n-\tif ( path ) {\r\n-\t\tpath = \"['\" + path.replace( '.', \"']['\" ) + \"']\";\r\n-\t\tconst c = 'try{indexed = indexed' + path + '}catch(ex){console.log(c, ex);}';\r\n-\t\teval( c );\r\n-\t}\r\n-\treturn indexed;\r\n-};\r\n-\r\n-const LP_Tooltip = ( options ) => {\r\n-\toptions = $.extend( {}, { offset: [ 0, 0 ] }, options || {} );\r\n-\r\n-\treturn $.each( this, function() {\r\n-\t\tconst $el = $( this ),\r\n-\t\t\tcontent = $el.data( 'content' );\r\n-\r\n-\t\tif ( ! content || ( $el.data( 'LP_Tooltip' ) !== undefined ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlet $tooltip = null;\r\n-\r\n-\t\t$el.on( 'mouseenter', function( e ) {\r\n-\t\t\t$tooltip = $( '\u003Cdiv class=\"learn-press-tooltip-bubble\"\u002F>' ).html( content ).appendTo( $( 'body' ) ).hide();\r\n-\t\t\tconst position = $el.offset();\r\n-\r\n-\t\t\tif ( Array.isArray( options.offset ) ) {\r\n-\t\t\t\tconst top = options.offset[ 1 ],\r\n-\t\t\t\t\tleft = options.offset[ 0 ];\r\n-\r\n-\t\t\t\tif ( $.isNumeric( left ) ) {\r\n-\t\t\t\t\tposition.left += left;\r\n-\t\t\t\t} else {\r\n-\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( $.isNumeric( top ) ) {\r\n-\t\t\t\t\tposition.top += top;\r\n-\t\t\t\t} else {\r\n-\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tooltip.css( {\r\n-\t\t\t\ttop: position.top,\r\n-\t\t\t\tleft: position.left,\r\n-\t\t\t} );\r\n-\r\n-\t\t\t$tooltip.fadeIn();\r\n-\t\t} );\r\n-\r\n-\t\t$el.on( 'mouseleave', function( e ) {\r\n-\t\t\t$tooltip && $tooltip.remove();\r\n-\t\t} );\r\n-\r\n-\t\t$el.data( 'tooltip', true );\r\n-\t} );\r\n-};\r\n-\r\n-const hasEvent = function hasEvent( name ) {\r\n-\tconst events = $( this ).data( 'events' );\r\n-\tif ( typeof events.LP == 'undefined' ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\tfor ( i = 0; i \u003C events.LP.length; i++ ) {\r\n-\t\tif ( events.LP[ i ].namespace == name ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\t}\r\n-\treturn false;\r\n-};\r\n-\r\n-const dataToJSON = function dataToJSON() {\r\n-\tconst json = {};\r\n-\t$.each( this[ 0 ].attributes, function() {\r\n-\t\tconst m = this.name.match( \u002F^data-(.*)\u002F );\r\n-\t\tif ( m ) {\r\n-\t\t\tjson[ m[ 1 ] ] = this.value;\r\n-\t\t}\r\n-\t} );\r\n-\treturn json;\r\n-};\r\n-\r\n-const rows = function rows() {\r\n-\tconst h = $( this ).height();\r\n-\tconst lh = $( this ).css( 'line-height' ).replace( 'px', '' );\r\n-\t$( this ).attr( { height: h, 'line-height': lh } );\r\n-\r\n-\treturn Math.floor( h \u002F parseInt( lh ) );\r\n-};\r\n-\r\n-const checkLines = function checkLines( p ) {\r\n-\treturn this.each( function() {\r\n-\t\tconst $e = $( this ),\r\n-\t\t\trows = $e.rows();\r\n-\r\n-\t\tp.call( this, rows );\r\n-\t} );\r\n-};\r\n-\r\n-const findNext = function findNext( selector ) {\r\n-\tconst $selector = $( selector ),\r\n-\t\t$root = this.first(),\r\n-\t\tindex = $selector.index( $root ),\r\n-\t\t$next = $selector.eq( index + 1 );\r\n-\treturn $next.length ? $next : false;\r\n-};\r\n-\r\n-const findPrev = function findPrev( selector ) {\r\n-\tconst $selector = $( selector ),\r\n-\t\t$root = this.first(),\r\n-\t\tindex = $selector.index( $root ),\r\n-\t\t$prev = $selector.eq( index - 1 );\r\n-\treturn $prev.length ? $prev : false;\r\n-};\r\n-\r\n-const progress = function progress( v ) {\r\n-\treturn this.each( function() {\r\n-\t\tconst t = parseInt( v \u002F 100 * 360 ),\r\n-\t\t\ttimer = null,\r\n-\t\t\t$this = $( this );\r\n-\r\n-\t\tif ( t \u003C 180 ) {\r\n-\t\t\t$this.find( '.progress-circle' ).removeClass( 'gt-50' );\r\n-\t\t} else {\r\n-\t\t\t$this.find( '.progress-circle' ).addClass( 'gt-50' );\r\n-\t\t}\r\n-\t\t$this.find( '.fill' ).css( {\r\n-\t\t\ttransform: 'rotate(' + t + 'deg)',\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n-\r\n-$.fn.serializeJSON = serializeJSON;\r\n-$.fn.LP_Tooltip = LP_Tooltip;\r\n-$.fn.hasEvent = hasEvent;\r\n-$.fn.dataToJSON = dataToJSON;\r\n-$.fn.rows = rows;\r\n-$.fn.checkLines = checkLines;\r\n-$.fn.findNext = findNext;\r\n-$.fn.findPrev = findPrev;\r\n-$.fn.progress = progress;\r\n-\r\n-export default {\r\n-\tserializeJSON,\r\n-\tLP_Tooltip,\r\n-\thasEvent,\r\n-\tdataToJSON,\r\n-\trows,\r\n-\tcheckLines,\r\n-\tfindNext,\r\n-\tfindPrev,\r\n-\tprogress,\r\n-};\r\n+const $ = window.jQuery || jQuery;\n+\n+const serializeJSON = function serializeJSON( path ) {\n+\tconst isInput = $( this ).is( 'input' ) || $( this ).is( 'select' ) || $( this ).is( 'textarea' );\n+\tlet unIndexed = isInput ? $( this ).serializeArray() : $( this ).find( 'input, select, textarea' ).serializeArray(),\n+\t\tindexed = {},\n+\t\tvalidate = \u002F(\\[([a-zA-Z0-9_-]+)?\\]?)\u002Fg,\n+\t\tarrayKeys = {},\n+\t\tend = false;\n+\t$.each( unIndexed, function() {\n+\t\tconst that = this,\n+\t\t\tmatch = this.name.match( \u002F^([0-9a-zA-Z_-]+)\u002F );\n+\t\tif ( ! match ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tlet keys = this.name.match( validate ),\n+\t\t\tobjPath = \"indexed['\" + match[ 0 ] + \"']\";\n+\n+\t\tif ( keys ) {\n+\t\t\tif ( typeof indexed[ match[ 0 ] ] != 'object' ) {\n+\t\t\t\tindexed[ match[ 0 ] ] = {};\n+\t\t\t}\n+\n+\t\t\t$.each( keys, function( i, prop ) {\n+\t\t\t\tprop = prop.replace( \u002F\\]|\\[\u002Fg, '' );\n+\t\t\t\tlet rawPath = objPath.replace( \u002F'|\\[|\\]\u002Fg, '' ),\n+\t\t\t\t\tobjExp = '',\n+\t\t\t\t\tpreObjPath = objPath;\n+\n+\t\t\t\tif ( prop == '' ) {\n+\t\t\t\t\tif ( arrayKeys[ rawPath ] == undefined ) {\n+\t\t\t\t\t\tarrayKeys[ rawPath ] = 0;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tarrayKeys[ rawPath ]++;\n+\t\t\t\t\t}\n+\t\t\t\t\tobjPath += \"['\" + arrayKeys[ rawPath ] + \"']\";\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( ! isNaN( prop ) ) {\n+\t\t\t\t\t\tarrayKeys[ rawPath ] = prop;\n+\t\t\t\t\t}\n+\t\t\t\t\tobjPath += \"['\" + prop + \"']\";\n+\t\t\t\t}\n+\t\t\t\ttry {\n+\t\t\t\t\tif ( i == keys.length - 1 ) {\n+\t\t\t\t\t\tobjExp = objPath + '=that.value;';\n+\t\t\t\t\t\tend = true;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tobjExp = objPath + '={}';\n+\t\t\t\t\t\tend = false;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tconst evalString = '' +\n+                        'if( typeof ' + objPath + \" == 'undefined'){\" + objExp + ';' +\n+                        '}else{' +\n+                        'if(end){' +\n+                        'if(typeof ' + preObjPath + \"!='object'){\" + preObjPath + '={};}' +\n+                        objExp +\n+                        '}' +\n+                        '}';\n+\t\t\t\t\teval( evalString );\n+\t\t\t\t} catch ( e ) {\n+\t\t\t\t\tconsole.log( 'Error:' + e + '\\n' + objExp );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t} else {\n+\t\t\tindexed[ match[ 0 ] ] = this.value;\n+\t\t}\n+\t} );\n+\tif ( path ) {\n+\t\tpath = \"['\" + path.replace( '.', \"']['\" ) + \"']\";\n+\t\tconst c = 'try{indexed = indexed' + path + '}catch(ex){console.log(c, ex);}';\n+\t\teval( c );\n+\t}\n+\treturn indexed;\n+};\n+\n+const LP_Tooltip = ( options ) => {\n+\toptions = $.extend( {}, { offset: [ 0, 0 ] }, options || {} );\n+\n+\treturn $.each( this, function() {\n+\t\tconst $el = $( this ),\n+\t\t\tcontent = $el.data( 'content' );\n+\n+\t\tif ( ! content || ( $el.data( 'LP_Tooltip' ) !== undefined ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlet $tooltip = null;\n+\n+\t\t$el.on( 'mouseenter', function( e ) {\n+\t\t\t$tooltip = $( '\u003Cdiv class=\"learn-press-tooltip-bubble\"\u002F>' ).html( content ).appendTo( $( 'body' ) ).hide();\n+\t\t\tconst position = $el.offset();\n+\n+\t\t\tif ( Array.isArray( options.offset ) ) {\n+\t\t\t\tconst top = options.offset[ 1 ],\n+\t\t\t\t\tleft = options.offset[ 0 ];\n+\n+\t\t\t\tif ( $.isNumeric( left ) ) {\n+\t\t\t\t\tposition.left += left;\n+\t\t\t\t} else {\n+\n+\t\t\t\t}\n+\t\t\t\tif ( $.isNumeric( top ) ) {\n+\t\t\t\t\tposition.top += top;\n+\t\t\t\t} else {\n+\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$tooltip.css( {\n+\t\t\t\ttop: position.top,\n+\t\t\t\tleft: position.left,\n+\t\t\t} );\n+\n+\t\t\t$tooltip.fadeIn();\n+\t\t} );\n+\n+\t\t$el.on( 'mouseleave', function( e ) {\n+\t\t\t$tooltip && $tooltip.remove();\n+\t\t} );\n+\n+\t\t$el.data( 'tooltip', true );\n+\t} );\n+};\n+\n+const hasEvent = function hasEvent( name ) {\n+\tconst events = $( this ).data( 'events' );\n+\tif ( typeof events.LP == 'undefined' ) {\n+\t\treturn false;\n+\t}\n+\tfor ( i = 0; i \u003C events.LP.length; i++ ) {\n+\t\tif ( events.LP[ i ].namespace == name ) {\n+\t\t\treturn true;\n+\t\t}\n+\t}\n+\treturn false;\n+};\n+\n+const dataToJSON = function dataToJSON() {\n+\tconst json = {};\n+\t$.each( this[ 0 ].attributes, function() {\n+\t\tconst m = this.name.match( \u002F^data-(.*)\u002F );\n+\t\tif ( m ) {\n+\t\t\tjson[ m[ 1 ] ] = this.value;\n+\t\t}\n+\t} );\n+\treturn json;\n+};\n+\n+const rows = function rows() {\n+\tconst h = $( this ).height();\n+\tconst lh = $( this ).css( 'line-height' ).replace( 'px', '' );\n+\t$( this ).attr( { height: h, 'line-height': lh } );\n+\n+\treturn Math.floor( h \u002F parseInt( lh ) );\n+};\n+\n+const checkLines = function checkLines( p ) {\n+\treturn this.each( function() {\n+\t\tconst $e = $( this ),\n+\t\t\trows = $e.rows();\n+\n+\t\tp.call( this, rows );\n+\t} );\n+};\n+\n+const findNext = function findNext( selector ) {\n+\tconst $selector = $( selector ),\n+\t\t$root = this.first(),\n+\t\tindex = $selector.index( $root ),\n+\t\t$next = $selector.eq( index + 1 );\n+\treturn $next.length ? $next : false;\n+};\n+\n+const findPrev = function findPrev( selector ) {\n+\tconst $selector = $( selector ),\n+\t\t$root = this.first(),\n+\t\tindex = $selector.index( $root ),\n+\t\t$prev = $selector.eq( index - 1 );\n+\treturn $prev.length ? $prev : false;\n+};\n+\n+const progress = function progress( v ) {\n+\treturn this.each( function() {\n+\t\tconst t = parseInt( v \u002F 100 * 360 ),\n+\t\t\ttimer = null,\n+\t\t\t$this = $( this );\n+\n+\t\tif ( t \u003C 180 ) {\n+\t\t\t$this.find( '.progress-circle' ).removeClass( 'gt-50' );\n+\t\t} else {\n+\t\t\t$this.find( '.progress-circle' ).addClass( 'gt-50' );\n+\t\t}\n+\t\t$this.find( '.fill' ).css( {\n+\t\t\ttransform: 'rotate(' + t + 'deg)',\n+\t\t} );\n+\t} );\n+};\n+\n+$.fn.serializeJSON = serializeJSON;\n+$.fn.LP_Tooltip = LP_Tooltip;\n+$.fn.hasEvent = hasEvent;\n+$.fn.dataToJSON = dataToJSON;\n+$.fn.rows = rows;\n+$.fn.checkLines = checkLines;\n+$.fn.findNext = findNext;\n+$.fn.findPrev = findPrev;\n+$.fn.progress = progress;\n+\n+export default {\n+\tserializeJSON,\n+\tLP_Tooltip,\n+\thasEvent,\n+\tdataToJSON,\n+\trows,\n+\tcheckLines,\n+\tfindNext,\n+\tfindPrev,\n+\tprogress,\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flocal-storage.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flocal-storage.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flocal-storage.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flocal-storage.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-const _localStorage = {\r\n-\t__key: 'LP',\r\n-\tset( name, value ) {\r\n-\t\tconst data = _localStorage.get();\r\n-\t\tconst { set } = lodash;\r\n-\r\n-\t\tset( data, name, value );\r\n-\r\n-\t\tlocalStorage.setItem( _localStorage.__key, JSON.stringify( data ) );\r\n-\t},\r\n-\r\n-\tget( name, def ) {\r\n-\t\tconst data = JSON.parse( localStorage.getItem( _localStorage.__key ) || '{}' );\r\n-\t\tconst { get } = lodash;\r\n-\t\tconst value = get( data, name );\r\n-\r\n-\t\treturn ! name ? data : ( value !== undefined ? value : def );\r\n-\t},\r\n-\r\n-\texists( name ) {\r\n-\t\tconst data = _localStorage.get();\r\n-\r\n-\t\t\u002F\u002F return data.hasOwnProperty( name );\r\n-\t\treturn name in data;\r\n-\t},\r\n-\r\n-\tremove( name ) {\r\n-\t\tconst data = _localStorage.get();\r\n-\t\tconst newData = lodash.omit( data, name );\r\n-\r\n-\t\t_localStorage.__set( newData );\r\n-\t},\r\n-\t__get() {\r\n-\t\treturn localStorage.getItem( _localStorage.__key );\r\n-\t},\r\n-\t__set( data ) {\r\n-\t\tlocalStorage.setItem( _localStorage.__key, JSON.stringify( data || '{}' ) );\r\n-\t},\r\n-};\r\n-\r\n-export default _localStorage;\r\n+const _localStorage = {\n+\t__key: 'LP',\n+\tset( name, value ) {\n+\t\tconst data = _localStorage.get();\n+\t\tconst { set } = lodash;\n+\n+\t\tset( data, name, value );\n+\n+\t\tlocalStorage.setItem( _localStorage.__key, JSON.stringify( data ) );\n+\t},\n+\n+\tget( name, def ) {\n+\t\tconst data = JSON.parse( localStorage.getItem( _localStorage.__key ) || '{}' );\n+\t\tconst { get } = lodash;\n+\t\tconst value = get( data, name );\n+\n+\t\treturn ! name ? data : ( value !== undefined ? value : def );\n+\t},\n+\n+\texists( name ) {\n+\t\tconst data = _localStorage.get();\n+\n+\t\t\u002F\u002F return data.hasOwnProperty( name );\n+\t\treturn name in data;\n+\t},\n+\n+\tremove( name ) {\n+\t\tconst data = _localStorage.get();\n+\t\tconst newData = lodash.omit( data, name );\n+\n+\t\t_localStorage.__set( newData );\n+\t},\n+\t__get() {\n+\t\treturn localStorage.getItem( _localStorage.__key );\n+\t},\n+\t__set( data ) {\n+\t\tlocalStorage.setItem( _localStorage.__key, JSON.stringify( data || '{}' ) );\n+\t},\n+};\n+\n+export default _localStorage;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flp-modal-overlay.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flp-modal-overlay.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flp-modal-overlay.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Flp-modal-overlay.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-const $ = jQuery;\r\n-\r\n-const elLPOverlay = $( '.lp-overlay' );\r\n-\r\n-const lpModalOverlay = {\r\n-\telMainContent: null,\r\n-\telTitle: null,\r\n-\telBtnYes: null,\r\n-\telBtnNo: null,\r\n-\telFooter: null,\r\n-\telCalledModal: null,\r\n-\tcallBackYes: null,\r\n-\tinstance: null,\r\n-\tinit() {\r\n-\t\tthis.instance = this;\r\n-\t\tthis.elMainContent = elLPOverlay.find( '.main-content' );\r\n-\t\tthis.elTitle = elLPOverlay.find( '.modal-title' );\r\n-\t\tthis.elBtnYes = elLPOverlay.find( '.btn-yes' );\r\n-\t\tthis.elBtnNo = elLPOverlay.find( '.btn-no' );\r\n-\t\tthis.elFooter = elLPOverlay.find( '.lp-modal-footer' );\r\n-\r\n-\t\t$( document ).on( 'click', '.close, .btn-no', function() {\r\n-\t\t\telLPOverlay.hide();\r\n-\t\t} );\r\n-\r\n-\t\t$( document ).on( 'click', '.btn-yes', function() {\r\n-\t\t\tif ( 'function' === typeof lpModalOverlay.callBackYes ) {\r\n-\t\t\t\tlpModalOverlay.callBackYes();\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t},\r\n-\tsetElCalledModal( elCalledModal ) {\r\n-\t\tthis.elCalledModal = elCalledModal;\r\n-\t},\r\n-\tsetContentModal( content, event ) {\r\n-\t\tthis.elMainContent.html( content );\r\n-\t\tif ( 'function' === typeof event ) {\r\n-\t\t\tevent();\r\n-\t\t}\r\n-\t},\r\n-\tsetTitleModal( content ) {\r\n-\t\tthis.elTitle.html( content );\r\n-\t},\r\n-};\r\n-\r\n-export {\r\n-\tlpModalOverlay,\r\n-\telLPOverlay,\r\n-};\r\n+const $ = jQuery;\n+\n+const elLPOverlay = $( '.lp-overlay' );\n+\n+const lpModalOverlay = {\n+\telMainContent: null,\n+\telTitle: null,\n+\telBtnYes: null,\n+\telBtnNo: null,\n+\telFooter: null,\n+\telCalledModal: null,\n+\tcallBackYes: null,\n+\tinstance: null,\n+\tinit() {\n+\t\tthis.instance = this;\n+\t\tthis.elMainContent = elLPOverlay.find( '.main-content' );\n+\t\tthis.elTitle = elLPOverlay.find( '.modal-title' );\n+\t\tthis.elBtnYes = elLPOverlay.find( '.btn-yes' );\n+\t\tthis.elBtnNo = elLPOverlay.find( '.btn-no' );\n+\t\tthis.elFooter = elLPOverlay.find( '.lp-modal-footer' );\n+\n+\t\t$( document ).on( 'click', '.close, .btn-no', function() {\n+\t\t\telLPOverlay.hide();\n+\t\t} );\n+\n+\t\t$( document ).on( 'click', '.btn-yes', function() {\n+\t\t\tif ( 'function' === typeof lpModalOverlay.callBackYes ) {\n+\t\t\t\tlpModalOverlay.callBackYes();\n+\t\t\t}\n+\t\t} );\n+\t},\n+\tsetElCalledModal( elCalledModal ) {\n+\t\tthis.elCalledModal = elCalledModal;\n+\t},\n+\tsetContentModal( content, event ) {\n+\t\tthis.elMainContent.html( content );\n+\t\tif ( 'function' === typeof event ) {\n+\t\t\tevent();\n+\t\t}\n+\t},\n+\tsetTitleModal( content ) {\n+\t\tthis.elTitle.html( content );\n+\t},\n+};\n+\n+export {\n+\tlpModalOverlay,\n+\telLPOverlay,\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fmessage-box.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fmessage-box.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fmessage-box.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fmessage-box.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,249 +1,249 @@\n-const $ = window.jQuery;\r\n-const MessageBox = {\r\n-\t$block: null,\r\n-\t$window: null,\r\n-\tevents: {},\r\n-\tinstances: [],\r\n-\tinstance: null,\r\n-\tquickConfirm( elem, args ) {\r\n-\t\tconst $e = $( elem );\r\n-\t\t$( '[learn-press-quick-confirm]' ).each( function() {\r\n-\t\t\tlet $ins;\r\n-\t\t\t( $ins = $( this ).data( 'quick-confirm' ) ) && ( console.log( $ins ), $ins.destroy() );\r\n-\t\t} );\r\n-\t\t! $e.attr( 'learn-press-quick-confirm' ) && $e.attr( 'learn-press-quick-confirm', 'true' ).data( 'quick-confirm',\r\n-\t\t\tnew ( function( elem, args ) {\r\n-\t\t\t\tvar $elem = $( elem ),\r\n-\t\t\t\t\t$div = $( '\u003Cspan class=\"learn-press-quick-confirm\">\u003C\u002Fspan>' ).insertAfter( $elem ), \u002F\u002F($(document.body)),\r\n-\t\t\t\t\toffset = $( elem ).position() || { left: 0, top: 0 },\r\n-\t\t\t\t\ttimerOut = null,\r\n-\t\t\t\t\ttimerHide = null,\r\n-\t\t\t\t\tn = 3,\r\n-\t\t\t\t\thide = function() {\r\n-\t\t\t\t\t\t$div.fadeOut( 'fast', function() {\r\n-\t\t\t\t\t\t\t$( this ).remove();\r\n-\t\t\t\t\t\t\t$div.parent().css( 'position', '' );\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\t$elem.removeAttr( 'learn-press-quick-confirm' ).data( 'quick-confirm', undefined );\r\n-\t\t\t\t\t\tstop();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tstop = function() {\r\n-\t\t\t\t\t\ttimerHide && clearInterval( timerHide );\r\n-\t\t\t\t\t\ttimerOut && clearInterval( timerOut );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tstart = function() {\r\n-\t\t\t\t\t\ttimerOut = setInterval( function() {\r\n-\t\t\t\t\t\t\tif ( --n == 0 ) {\r\n-\t\t\t\t\t\t\t\thide.call( $div[ 0 ] );\r\n-\t\t\t\t\t\t\t\ttypeof ( args.onCancel ) === 'function' && args.onCancel( args.data );\r\n-\t\t\t\t\t\t\t\tstop();\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t$div.find( 'span' ).html( ' (' + n + ')' );\r\n-\t\t\t\t\t\t}, 1000 );\r\n-\r\n-\t\t\t\t\t\ttimerHide = setInterval( function() {\r\n-\t\t\t\t\t\t\tif ( ! $elem.is( ':visible' ) || $elem.css( 'visibility' ) == 'hidden' ) {\r\n-\t\t\t\t\t\t\t\tstop();\r\n-\t\t\t\t\t\t\t\t$div.remove();\r\n-\t\t\t\t\t\t\t\t$div.parent().css( 'position', '' );\r\n-\t\t\t\t\t\t\t\ttypeof ( args.onCancel ) === 'function' && args.onCancel( args.data );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}, 350 );\r\n-\t\t\t\t\t};\r\n-\t\t\t\targs = $.extend( {\r\n-\t\t\t\t\tmessage: '',\r\n-\t\t\t\t\tdata: null,\r\n-\t\t\t\t\tonOk: null,\r\n-\t\t\t\t\tonCancel: null,\r\n-\t\t\t\t\toffset: { top: 0, left: 0 },\r\n-\t\t\t\t}, args || {} );\r\n-\t\t\t\t$div.html( args.message || $elem.attr( 'data-confirm-remove' ) || 'Are you sure?' ).append( '\u003Cspan> (' + n + ')\u003C\u002Fspan>' ).css( {} );\r\n-\t\t\t\t$div.click( function() {\r\n-\t\t\t\t\ttypeof ( args.onOk ) === 'function' && args.onOk( args.data );\r\n-\t\t\t\t\thide();\r\n-\t\t\t\t} ).hover( function() {\r\n-\t\t\t\t\tstop();\r\n-\t\t\t\t}, function() {\r\n-\t\t\t\t\tstart();\r\n-\t\t\t\t} );\r\n-\t\t\t\t\u002F\u002F$div.parent().css('position', 'relative');\r\n-\t\t\t\t$div.css( {\r\n-\t\t\t\t\tleft: ( ( offset.left + $elem.outerWidth() ) - $div.outerWidth() ) + args.offset.left,\r\n-\t\t\t\t\ttop: offset.top + $elem.outerHeight() + args.offset.top + 5,\r\n-\t\t\t\t} ).hide().fadeIn( 'fast' );\r\n-\t\t\t\tstart();\r\n-\r\n-\t\t\t\tthis.destroy = function() {\r\n-\t\t\t\t\t$div.remove();\r\n-\t\t\t\t\t$elem.removeAttr( 'learn-press-quick-confirm' ).data( 'quick-confirm', undefined );\r\n-\t\t\t\t\tstop();\r\n-\t\t\t\t};\r\n-\t\t\t} )( elem, args )\r\n-\t\t);\r\n-\t},\r\n-\tshow( message, args ) {\r\n-\t\t\u002F\u002Fthis.hide();\r\n-\t\t$.proxy( function() {\r\n-\t\t\targs = $.extend( {\r\n-\t\t\t\ttitle: '',\r\n-\t\t\t\tbuttons: '',\r\n-\t\t\t\tevents: false,\r\n-\t\t\t\tautohide: false,\r\n-\t\t\t\tmessage,\r\n-\t\t\t\tdata: false,\r\n-\t\t\t\tid: LP.uniqueId(),\r\n-\t\t\t\tonHide: null,\r\n-\t\t\t}, args || {} );\r\n-\r\n-\t\t\tthis.instances.push( args );\r\n-\t\t\tthis.instance = args;\r\n-\r\n-\t\t\tconst $doc = $( document ),\r\n-\t\t\t\t$body = $( document.body );\r\n-\t\t\tif ( ! this.$block ) {\r\n-\t\t\t\tthis.$block = $( '\u003Cdiv id=\"learn-press-message-box-block\">\u003C\u002Fdiv>' ).appendTo( $body );\r\n-\t\t\t}\r\n-\t\t\tif ( ! this.$window ) {\r\n-\t\t\t\tthis.$window = $( '\u003Cdiv id=\"learn-press-message-box-window\">\u003Cdiv id=\"message-box-wrap\">\u003C\u002Fdiv> \u003C\u002Fdiv>' ).insertAfter( this.$block );\r\n-\t\t\t\tthis.$window.click( function() {\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002Fthis.events = args.events || {};\r\n-\t\t\tthis._createWindow( message, args.title, args.buttons );\r\n-\t\t\tthis.$block.show();\r\n-\t\t\tthis.$window.show().attr( 'instance', args.id );\r\n-\t\t\t$( window )\r\n-\t\t\t\t.bind( 'resize.message-box', $.proxy( this.update, this ) )\r\n-\t\t\t\t.bind( 'scroll.message-box', $.proxy( this.update, this ) );\r\n-\t\t\tthis.update( true );\r\n-\t\t\tif ( args.autohide ) {\r\n-\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\tLP.MessageBox.hide();\r\n-\t\t\t\t\ttypeof ( args.onHide ) === 'function' && args.onHide.call( LP.MessageBox, args );\r\n-\t\t\t\t}, args.autohide );\r\n-\t\t\t}\r\n-\t\t}, this )();\r\n-\t},\r\n-\tblockUI( message ) {\r\n-\t\tmessage = ( message !== false ? ( message ? message : 'Wait a moment' ) : '' ) + '\u003Cdiv class=\"message-box-animation\">\u003C\u002Fdiv>';\r\n-\t\tthis.show( message );\r\n-\t},\r\n-\thide( delay, instance ) {\r\n-\t\tif ( instance ) {\r\n-\t\t\tthis._removeInstance( instance.id );\r\n-\t\t} else if ( this.instance ) {\r\n-\t\t\tthis._removeInstance( this.instance.id );\r\n-\t\t}\r\n-\t\tif ( this.instances.length === 0 ) {\r\n-\t\t\tif ( this.$block ) {\r\n-\t\t\t\tthis.$block.hide();\r\n-\t\t\t}\r\n-\t\t\tif ( this.$window ) {\r\n-\t\t\t\tthis.$window.hide();\r\n-\t\t\t}\r\n-\t\t\t$( window )\r\n-\t\t\t\t.unbind( 'resize.message-box', this.update )\r\n-\t\t\t\t.unbind( 'scroll.message-box', this.update );\r\n-\t\t} else if ( this.instance ) {\r\n-\t\t\tthis._createWindow( this.instance.message, this.instance.title, this.instance.buttons );\r\n-\t\t}\r\n-\t},\r\n-\tupdate( force ) {\r\n-\t\tlet that = this,\r\n-\t\t\t$wrap = this.$window.find( '#message-box-wrap' ),\r\n-\t\t\ttimer = $wrap.data( 'timer' ),\r\n-\t\t\t_update = function() {\r\n-\t\t\t\tLP.Hook.doAction( 'learn_press_message_box_before_resize', that );\r\n-\t\t\t\tlet $content = $wrap.find( '.message-box-content' ).css( 'height', '' ).css( 'overflow', 'hidden' ),\r\n-\t\t\t\t\twidth = $wrap.outerWidth(),\r\n-\t\t\t\t\theight = $wrap.outerHeight(),\r\n-\t\t\t\t\tcontentHeight = $content.height(),\r\n-\t\t\t\t\twindowHeight = $( window ).height(),\r\n-\t\t\t\t\ttop = $wrap.offset().top;\r\n-\t\t\t\tif ( contentHeight > windowHeight - 50 ) {\r\n-\t\t\t\t\t$content.css( {\r\n-\t\t\t\t\t\theight: windowHeight - 25,\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\theight = $wrap.outerHeight();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$content.css( 'height', '' ).css( 'overflow', '' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$wrap.css( {\r\n-\t\t\t\t\tmarginTop: ( $( window ).height() - height ) \u002F 2,\r\n-\t\t\t\t} );\r\n-\t\t\t\tLP.Hook.doAction( 'learn_press_message_box_resize', height, that );\r\n-\t\t\t};\r\n-\t\tif ( force ) {\r\n-\t\t\t_update();\r\n-\t\t}\r\n-\t\ttimer && clearTimeout( timer );\r\n-\t\ttimer = setTimeout( _update, 250 );\r\n-\t},\r\n-\t_removeInstance( id ) {\r\n-\t\tfor ( let i = 0; i \u003C this.instances.length; i++ ) {\r\n-\t\t\tif ( this.instances[ i ].id === id ) {\r\n-\t\t\t\tthis.instances.splice( i, 1 );\r\n-\r\n-\t\t\t\tconst len = this.instances.length;\r\n-\t\t\t\tif ( len ) {\r\n-\t\t\t\t\tthis.instance = this.instances[ len - 1 ];\r\n-\t\t\t\t\tthis.$window.attr( 'instance', this.instance.id );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis.instance = false;\r\n-\t\t\t\t\tthis.$window.removeAttr( 'instance' );\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t_getInstance( id ) {\r\n-\t\tfor ( let i = 0; i \u003C this.instances.length; i++ ) {\r\n-\t\t\tif ( this.instances[ i ].id === id ) {\r\n-\t\t\t\treturn this.instances[ i ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t},\r\n-\t_createWindow( message, title, buttons ) {\r\n-\t\tconst $wrap = this.$window.find( '#message-box-wrap' ).html( '' );\r\n-\t\tif ( title ) {\r\n-\t\t\t$wrap.append( '\u003Ch3 class=\"message-box-title\">' + title + '\u003C\u002Fh3>' );\r\n-\t\t}\r\n-\t\t$wrap.append( $( '\u003Cdiv class=\"message-box-content\">\u003C\u002Fdiv>' ).html( message ) );\r\n-\t\tif ( buttons ) {\r\n-\t\t\tconst $buttons = $( '\u003Cdiv class=\"message-box-buttons\">\u003C\u002Fdiv>' );\r\n-\t\t\tswitch ( buttons ) {\r\n-\t\t\tcase 'yesNo':\r\n-\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_yes, 'yes' ) );\r\n-\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_no, 'no' ) );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'okCancel':\r\n-\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_ok, 'ok' ) );\r\n-\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_cancel, 'cancel' ) );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_ok, 'ok' ) );\r\n-\t\t\t}\r\n-\t\t\t$wrap.append( $buttons );\r\n-\t\t}\r\n-\t},\r\n-\t_createButton( title, type ) {\r\n-\t\tconst $button = $( '\u003Cbutton type=\"button\" class=\"button message-box-button message-box-button-' + type + '\">' + title + '\u003C\u002Fbutton>' ),\r\n-\t\t\tcallback = 'on' + ( type.substr( 0, 1 ).toUpperCase() + type.substr( 1 ) );\r\n-\t\t$button.data( 'callback', callback ).click( function() {\r\n-\t\t\tconst instance = $( this ).data( 'instance' ),\r\n-\t\t\t\tcallback = instance.events[ $( this ).data( 'callback' ) ];\r\n-\t\t\tif ( $.type( callback ) === 'function' ) {\r\n-\t\t\t\tif ( callback.apply( LP.MessageBox, [ instance ] ) === false ) {\r\n-\t\t\t\t\t\u002F\u002F return;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tLP.MessageBox.hide( null, instance );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tLP.MessageBox.hide( null, instance );\r\n-\t\t\t}\r\n-\t\t} ).data( 'instance', this.instance );\r\n-\t\treturn $button;\r\n-\t},\r\n-};\r\n-\r\n-export default MessageBox;\r\n+const $ = window.jQuery;\n+const MessageBox = {\n+\t$block: null,\n+\t$window: null,\n+\tevents: {},\n+\tinstances: [],\n+\tinstance: null,\n+\tquickConfirm( elem, args ) {\n+\t\tconst $e = $( elem );\n+\t\t$( '[learn-press-quick-confirm]' ).each( function() {\n+\t\t\tlet $ins;\n+\t\t\t( $ins = $( this ).data( 'quick-confirm' ) ) && ( console.log( $ins ), $ins.destroy() );\n+\t\t} );\n+\t\t! $e.attr( 'learn-press-quick-confirm' ) && $e.attr( 'learn-press-quick-confirm', 'true' ).data( 'quick-confirm',\n+\t\t\tnew ( function( elem, args ) {\n+\t\t\t\tvar $elem = $( elem ),\n+\t\t\t\t\t$div = $( '\u003Cspan class=\"learn-press-quick-confirm\">\u003C\u002Fspan>' ).insertAfter( $elem ), \u002F\u002F($(document.body)),\n+\t\t\t\t\toffset = $( elem ).position() || { left: 0, top: 0 },\n+\t\t\t\t\ttimerOut = null,\n+\t\t\t\t\ttimerHide = null,\n+\t\t\t\t\tn = 3,\n+\t\t\t\t\thide = function() {\n+\t\t\t\t\t\t$div.fadeOut( 'fast', function() {\n+\t\t\t\t\t\t\t$( this ).remove();\n+\t\t\t\t\t\t\t$div.parent().css( 'position', '' );\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t\t$elem.removeAttr( 'learn-press-quick-confirm' ).data( 'quick-confirm', undefined );\n+\t\t\t\t\t\tstop();\n+\t\t\t\t\t},\n+\t\t\t\t\tstop = function() {\n+\t\t\t\t\t\ttimerHide && clearInterval( timerHide );\n+\t\t\t\t\t\ttimerOut && clearInterval( timerOut );\n+\t\t\t\t\t},\n+\t\t\t\t\tstart = function() {\n+\t\t\t\t\t\ttimerOut = setInterval( function() {\n+\t\t\t\t\t\t\tif ( --n == 0 ) {\n+\t\t\t\t\t\t\t\thide.call( $div[ 0 ] );\n+\t\t\t\t\t\t\t\ttypeof ( args.onCancel ) === 'function' && args.onCancel( args.data );\n+\t\t\t\t\t\t\t\tstop();\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t$div.find( 'span' ).html( ' (' + n + ')' );\n+\t\t\t\t\t\t}, 1000 );\n+\n+\t\t\t\t\t\ttimerHide = setInterval( function() {\n+\t\t\t\t\t\t\tif ( ! $elem.is( ':visible' ) || $elem.css( 'visibility' ) == 'hidden' ) {\n+\t\t\t\t\t\t\t\tstop();\n+\t\t\t\t\t\t\t\t$div.remove();\n+\t\t\t\t\t\t\t\t$div.parent().css( 'position', '' );\n+\t\t\t\t\t\t\t\ttypeof ( args.onCancel ) === 'function' && args.onCancel( args.data );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}, 350 );\n+\t\t\t\t\t};\n+\t\t\t\targs = $.extend( {\n+\t\t\t\t\tmessage: '',\n+\t\t\t\t\tdata: null,\n+\t\t\t\t\tonOk: null,\n+\t\t\t\t\tonCancel: null,\n+\t\t\t\t\toffset: { top: 0, left: 0 },\n+\t\t\t\t}, args || {} );\n+\t\t\t\t$div.html( args.message || $elem.attr( 'data-confirm-remove' ) || 'Are you sure?' ).append( '\u003Cspan> (' + n + ')\u003C\u002Fspan>' ).css( {} );\n+\t\t\t\t$div.click( function() {\n+\t\t\t\t\ttypeof ( args.onOk ) === 'function' && args.onOk( args.data );\n+\t\t\t\t\thide();\n+\t\t\t\t} ).hover( function() {\n+\t\t\t\t\tstop();\n+\t\t\t\t}, function() {\n+\t\t\t\t\tstart();\n+\t\t\t\t} );\n+\t\t\t\t\u002F\u002F$div.parent().css('position', 'relative');\n+\t\t\t\t$div.css( {\n+\t\t\t\t\tleft: ( ( offset.left + $elem.outerWidth() ) - $div.outerWidth() ) + args.offset.left,\n+\t\t\t\t\ttop: offset.top + $elem.outerHeight() + args.offset.top + 5,\n+\t\t\t\t} ).hide().fadeIn( 'fast' );\n+\t\t\t\tstart();\n+\n+\t\t\t\tthis.destroy = function() {\n+\t\t\t\t\t$div.remove();\n+\t\t\t\t\t$elem.removeAttr( 'learn-press-quick-confirm' ).data( 'quick-confirm', undefined );\n+\t\t\t\t\tstop();\n+\t\t\t\t};\n+\t\t\t} )( elem, args )\n+\t\t);\n+\t},\n+\tshow( message, args ) {\n+\t\t\u002F\u002Fthis.hide();\n+\t\t$.proxy( function() {\n+\t\t\targs = $.extend( {\n+\t\t\t\ttitle: '',\n+\t\t\t\tbuttons: '',\n+\t\t\t\tevents: false,\n+\t\t\t\tautohide: false,\n+\t\t\t\tmessage,\n+\t\t\t\tdata: false,\n+\t\t\t\tid: LP.uniqueId(),\n+\t\t\t\tonHide: null,\n+\t\t\t}, args || {} );\n+\n+\t\t\tthis.instances.push( args );\n+\t\t\tthis.instance = args;\n+\n+\t\t\tconst $doc = $( document ),\n+\t\t\t\t$body = $( document.body );\n+\t\t\tif ( ! this.$block ) {\n+\t\t\t\tthis.$block = $( '\u003Cdiv id=\"learn-press-message-box-block\">\u003C\u002Fdiv>' ).appendTo( $body );\n+\t\t\t}\n+\t\t\tif ( ! this.$window ) {\n+\t\t\t\tthis.$window = $( '\u003Cdiv id=\"learn-press-message-box-window\">\u003Cdiv id=\"message-box-wrap\">\u003C\u002Fdiv> \u003C\u002Fdiv>' ).insertAfter( this.$block );\n+\t\t\t\tthis.$window.click( function() {\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t\t\u002F\u002Fthis.events = args.events || {};\n+\t\t\tthis._createWindow( message, args.title, args.buttons );\n+\t\t\tthis.$block.show();\n+\t\t\tthis.$window.show().attr( 'instance', args.id );\n+\t\t\t$( window )\n+\t\t\t\t.bind( 'resize.message-box', $.proxy( this.update, this ) )\n+\t\t\t\t.bind( 'scroll.message-box', $.proxy( this.update, this ) );\n+\t\t\tthis.update( true );\n+\t\t\tif ( args.autohide ) {\n+\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\tLP.MessageBox.hide();\n+\t\t\t\t\ttypeof ( args.onHide ) === 'function' && args.onHide.call( LP.MessageBox, args );\n+\t\t\t\t}, args.autohide );\n+\t\t\t}\n+\t\t}, this )();\n+\t},\n+\tblockUI( message ) {\n+\t\tmessage = ( message !== false ? ( message ? message : 'Wait a moment' ) : '' ) + '\u003Cdiv class=\"message-box-animation\">\u003C\u002Fdiv>';\n+\t\tthis.show( message );\n+\t},\n+\thide( delay, instance ) {\n+\t\tif ( instance ) {\n+\t\t\tthis._removeInstance( instance.id );\n+\t\t} else if ( this.instance ) {\n+\t\t\tthis._removeInstance( this.instance.id );\n+\t\t}\n+\t\tif ( this.instances.length === 0 ) {\n+\t\t\tif ( this.$block ) {\n+\t\t\t\tthis.$block.hide();\n+\t\t\t}\n+\t\t\tif ( this.$window ) {\n+\t\t\t\tthis.$window.hide();\n+\t\t\t}\n+\t\t\t$( window )\n+\t\t\t\t.unbind( 'resize.message-box', this.update )\n+\t\t\t\t.unbind( 'scroll.message-box', this.update );\n+\t\t} else if ( this.instance ) {\n+\t\t\tthis._createWindow( this.instance.message, this.instance.title, this.instance.buttons );\n+\t\t}\n+\t},\n+\tupdate( force ) {\n+\t\tlet that = this,\n+\t\t\t$wrap = this.$window.find( '#message-box-wrap' ),\n+\t\t\ttimer = $wrap.data( 'timer' ),\n+\t\t\t_update = function() {\n+\t\t\t\tLP.Hook.doAction( 'learn_press_message_box_before_resize', that );\n+\t\t\t\tlet $content = $wrap.find( '.message-box-content' ).css( 'height', '' ).css( 'overflow', 'hidden' ),\n+\t\t\t\t\twidth = $wrap.outerWidth(),\n+\t\t\t\t\theight = $wrap.outerHeight(),\n+\t\t\t\t\tcontentHeight = $content.height(),\n+\t\t\t\t\twindowHeight = $( window ).height(),\n+\t\t\t\t\ttop = $wrap.offset().top;\n+\t\t\t\tif ( contentHeight > windowHeight - 50 ) {\n+\t\t\t\t\t$content.css( {\n+\t\t\t\t\t\theight: windowHeight - 25,\n+\t\t\t\t\t} );\n+\t\t\t\t\theight = $wrap.outerHeight();\n+\t\t\t\t} else {\n+\t\t\t\t\t$content.css( 'height', '' ).css( 'overflow', '' );\n+\t\t\t\t}\n+\t\t\t\t$wrap.css( {\n+\t\t\t\t\tmarginTop: ( $( window ).height() - height ) \u002F 2,\n+\t\t\t\t} );\n+\t\t\t\tLP.Hook.doAction( 'learn_press_message_box_resize', height, that );\n+\t\t\t};\n+\t\tif ( force ) {\n+\t\t\t_update();\n+\t\t}\n+\t\ttimer && clearTimeout( timer );\n+\t\ttimer = setTimeout( _update, 250 );\n+\t},\n+\t_removeInstance( id ) {\n+\t\tfor ( let i = 0; i \u003C this.instances.length; i++ ) {\n+\t\t\tif ( this.instances[ i ].id === id ) {\n+\t\t\t\tthis.instances.splice( i, 1 );\n+\n+\t\t\t\tconst len = this.instances.length;\n+\t\t\t\tif ( len ) {\n+\t\t\t\t\tthis.instance = this.instances[ len - 1 ];\n+\t\t\t\t\tthis.$window.attr( 'instance', this.instance.id );\n+\t\t\t\t} else {\n+\t\t\t\t\tthis.instance = false;\n+\t\t\t\t\tthis.$window.removeAttr( 'instance' );\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t},\n+\t_getInstance( id ) {\n+\t\tfor ( let i = 0; i \u003C this.instances.length; i++ ) {\n+\t\t\tif ( this.instances[ i ].id === id ) {\n+\t\t\t\treturn this.instances[ i ];\n+\t\t\t}\n+\t\t}\n+\t},\n+\t_createWindow( message, title, buttons ) {\n+\t\tconst $wrap = this.$window.find( '#message-box-wrap' ).html( '' );\n+\t\tif ( title ) {\n+\t\t\t$wrap.append( '\u003Ch3 class=\"message-box-title\">' + title + '\u003C\u002Fh3>' );\n+\t\t}\n+\t\t$wrap.append( $( '\u003Cdiv class=\"message-box-content\">\u003C\u002Fdiv>' ).html( message ) );\n+\t\tif ( buttons ) {\n+\t\t\tconst $buttons = $( '\u003Cdiv class=\"message-box-buttons\">\u003C\u002Fdiv>' );\n+\t\t\tswitch ( buttons ) {\n+\t\t\tcase 'yesNo':\n+\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_yes, 'yes' ) );\n+\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_no, 'no' ) );\n+\t\t\t\tbreak;\n+\t\t\tcase 'okCancel':\n+\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_ok, 'ok' ) );\n+\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_cancel, 'cancel' ) );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$buttons.append( this._createButton( LP_Settings.localize.button_ok, 'ok' ) );\n+\t\t\t}\n+\t\t\t$wrap.append( $buttons );\n+\t\t}\n+\t},\n+\t_createButton( title, type ) {\n+\t\tconst $button = $( '\u003Cbutton type=\"button\" class=\"button message-box-button message-box-button-' + type + '\">' + title + '\u003C\u002Fbutton>' ),\n+\t\t\tcallback = 'on' + ( type.substr( 0, 1 ).toUpperCase() + type.substr( 1 ) );\n+\t\t$button.data( 'callback', callback ).click( function() {\n+\t\t\tconst instance = $( this ).data( 'instance' ),\n+\t\t\t\tcallback = instance.events[ $( this ).data( 'callback' ) ];\n+\t\t\tif ( $.type( callback ) === 'function' ) {\n+\t\t\t\tif ( callback.apply( LP.MessageBox, [ instance ] ) === false ) {\n+\t\t\t\t\t\u002F\u002F return;\n+\t\t\t\t} else {\n+\t\t\t\t\tLP.MessageBox.hide( null, instance );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tLP.MessageBox.hide( null, instance );\n+\t\t\t}\n+\t\t} ).data( 'instance', this.instance );\n+\t\treturn $button;\n+\t},\n+};\n+\n+export default MessageBox;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fquick-tip.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fquick-tip.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fquick-tip.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fquick-tip.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,134 +1,134 @@\n-( function( $ ) {\r\n-\tfunction QuickTip( el, options ) {\r\n-\t\tconst $el = $( el ),\r\n-\t\t\tuniId = $el.attr( 'data-id' ) || LP.uniqueId();\r\n-\r\n-\t\toptions = $.extend( {\r\n-\t\t\tevent: 'hover',\r\n-\t\t\tautoClose: true,\r\n-\t\t\tsingle: true,\r\n-\t\t\tcloseInterval: 1000,\r\n-\t\t\tarrowOffset: null,\r\n-\t\t\ttipClass: '',\r\n-\t\t}, options, $el.data() );\r\n-\r\n-\t\t$el.attr( 'data-id', uniId );\r\n-\r\n-\t\tlet content = $el.attr( 'data-content-tip' ) || $el.html(),\r\n-\t\t\t$tip = $( '\u003Cdiv class=\"learn-press-tip-floating\">' + content + '\u003C\u002Fdiv>' ),\r\n-\t\t\tt = null,\r\n-\t\t\tcloseInterval = 0,\r\n-\t\t\tuseData = false,\r\n-\t\t\tarrowOffset = options.arrowOffset === 'el' ? $el.outerWidth() \u002F 2 : 8,\r\n-\t\t\t$content = $( '#__' + uniId );\r\n-\r\n-\t\tif ( $content.length === 0 ) {\r\n-\t\t\t$( document.body ).append( $( '\u003Cdiv \u002F>' ).attr( 'id', '__' + uniId ).html( content ).css( 'display', 'none' ) );\r\n-\t\t}\r\n-\r\n-\t\tcontent = $content.html();\r\n-\r\n-\t\t$tip.addClass( options.tipClass );\r\n-\r\n-\t\t$el.data( 'content-tip', content );\r\n-\t\tif ( $el.attr( 'data-content-tip' ) ) {\r\n-\t\t\t\u002F\u002F$el.removeAttr('data-content-tip');\r\n-\t\t\tuseData = true;\r\n-\t\t}\r\n-\r\n-\t\tcloseInterval = options.closeInterval;\r\n-\r\n-\t\tif ( options.autoClose === false ) {\r\n-\t\t\t$tip.append( '\u003Ca class=\"close\">\u003C\u002Fa>' );\r\n-\t\t\t$tip.on( 'click', '.close', function() {\r\n-\t\t\t\tclose();\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tfunction show() {\r\n-\t\t\tif ( t ) {\r\n-\t\t\t\tclearTimeout( t );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( options.single ) {\r\n-\t\t\t\t$( '.learn-press-tip' ).not( $el ).LP( 'QuickTip', 'close' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tip.appendTo( document.body );\r\n-\t\t\tconst pos = $el.offset();\r\n-\r\n-\t\t\t$tip.css( {\r\n-\t\t\t\ttop: pos.top - $tip.outerHeight() - 8,\r\n-\t\t\t\tleft: pos.left - $tip.outerWidth() \u002F 2 + arrowOffset,\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\tfunction hide() {\r\n-\t\t\tt && clearTimeout( t );\r\n-\t\t\tt = setTimeout( function() {\r\n-\t\t\t\t$tip.detach();\r\n-\t\t\t\tt = null;\r\n-\t\t\t}, closeInterval );\r\n-\t\t}\r\n-\r\n-\t\tfunction close() {\r\n-\t\t\tcloseInterval = 0;\r\n-\t\t\thide();\r\n-\t\t\tcloseInterval = options.closeInterval;\r\n-\t\t}\r\n-\r\n-\t\tfunction open() {\r\n-\t\t\tshow();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! useData ) {\r\n-\t\t\t$el.html( '' );\r\n-\t\t}\r\n-\r\n-\t\tif ( options.event === 'click' ) {\r\n-\t\t\t$el.on( 'click', function( e ) {\r\n-\t\t\t\te.stopPropagation();\r\n-\t\t\t\tshow();\r\n-\t\t\t} );\r\n-\t\t}\r\n-\r\n-\t\t$( document ).on( 'learn-press\u002Fclose-all-quick-tip', function() {\r\n-\t\t\tclose();\r\n-\t\t} );\r\n-\t\t$el.hover(\r\n-\t\t\tfunction( e ) {\r\n-\t\t\t\te.stopPropagation();\r\n-\t\t\t\tif ( options.event !== 'click' ) {\r\n-\t\t\t\t\tshow();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tfunction( e ) {\r\n-\t\t\t\te.stopPropagation();\r\n-\t\t\t\tif ( options.autoClose ) {\r\n-\t\t\t\t\thide();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t).addClass( 'ready' );\r\n-\t\treturn {\r\n-\t\t\tclose,\r\n-\t\t\topen,\r\n-\t\t};\r\n-\t}\r\n-\r\n-\t$.fn.LP( 'QuickTip', function( options ) {\r\n-\t\treturn $.each( this, function() {\r\n-\t\t\tlet $tip = $( this ).data( 'quick-tip' );\r\n-\r\n-\t\t\tif ( ! $tip ) {\r\n-\t\t\t\t$tip = new QuickTip( this, options );\r\n-\t\t\t\t$( this ).data( 'quick-tip', $tip );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( typeof options === 'string' ) {\r\n-\t\t\t\t$tip[ options ] && $tip[ options ].apply( $tip );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-}\r\n-( jQuery ) );\r\n+( function( $ ) {\n+\tfunction QuickTip( el, options ) {\n+\t\tconst $el = $( el ),\n+\t\t\tuniId = $el.attr( 'data-id' ) || LP.uniqueId();\n+\n+\t\toptions = $.extend( {\n+\t\t\tevent: 'hover',\n+\t\t\tautoClose: true,\n+\t\t\tsingle: true,\n+\t\t\tcloseInterval: 1000,\n+\t\t\tarrowOffset: null,\n+\t\t\ttipClass: '',\n+\t\t}, options, $el.data() );\n+\n+\t\t$el.attr( 'data-id', uniId );\n+\n+\t\tlet content = $el.attr( 'data-content-tip' ) || $el.html(),\n+\t\t\t$tip = $( '\u003Cdiv class=\"learn-press-tip-floating\">' + content + '\u003C\u002Fdiv>' ),\n+\t\t\tt = null,\n+\t\t\tcloseInterval = 0,\n+\t\t\tuseData = false,\n+\t\t\tarrowOffset = options.arrowOffset === 'el' ? $el.outerWidth() \u002F 2 : 8,\n+\t\t\t$content = $( '#__' + uniId );\n+\n+\t\tif ( $content.length === 0 ) {\n+\t\t\t$( document.body ).append( $( '\u003Cdiv \u002F>' ).attr( 'id', '__' + uniId ).html( content ).css( 'display', 'none' ) );\n+\t\t}\n+\n+\t\tcontent = $content.html();\n+\n+\t\t$tip.addClass( options.tipClass );\n+\n+\t\t$el.data( 'content-tip', content );\n+\t\tif ( $el.attr( 'data-content-tip' ) ) {\n+\t\t\t\u002F\u002F$el.removeAttr('data-content-tip');\n+\t\t\tuseData = true;\n+\t\t}\n+\n+\t\tcloseInterval = options.closeInterval;\n+\n+\t\tif ( options.autoClose === false ) {\n+\t\t\t$tip.append( '\u003Ca class=\"close\">\u003C\u002Fa>' );\n+\t\t\t$tip.on( 'click', '.close', function() {\n+\t\t\t\tclose();\n+\t\t\t} );\n+\t\t}\n+\n+\t\tfunction show() {\n+\t\t\tif ( t ) {\n+\t\t\t\tclearTimeout( t );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( options.single ) {\n+\t\t\t\t$( '.learn-press-tip' ).not( $el ).LP( 'QuickTip', 'close' );\n+\t\t\t}\n+\n+\t\t\t$tip.appendTo( document.body );\n+\t\t\tconst pos = $el.offset();\n+\n+\t\t\t$tip.css( {\n+\t\t\t\ttop: pos.top - $tip.outerHeight() - 8,\n+\t\t\t\tleft: pos.left - $tip.outerWidth() \u002F 2 + arrowOffset,\n+\t\t\t} );\n+\t\t}\n+\n+\t\tfunction hide() {\n+\t\t\tt && clearTimeout( t );\n+\t\t\tt = setTimeout( function() {\n+\t\t\t\t$tip.detach();\n+\t\t\t\tt = null;\n+\t\t\t}, closeInterval );\n+\t\t}\n+\n+\t\tfunction close() {\n+\t\t\tcloseInterval = 0;\n+\t\t\thide();\n+\t\t\tcloseInterval = options.closeInterval;\n+\t\t}\n+\n+\t\tfunction open() {\n+\t\t\tshow();\n+\t\t}\n+\n+\t\tif ( ! useData ) {\n+\t\t\t$el.html( '' );\n+\t\t}\n+\n+\t\tif ( options.event === 'click' ) {\n+\t\t\t$el.on( 'click', function( e ) {\n+\t\t\t\te.stopPropagation();\n+\t\t\t\tshow();\n+\t\t\t} );\n+\t\t}\n+\n+\t\t$( document ).on( 'learn-press\u002Fclose-all-quick-tip', function() {\n+\t\t\tclose();\n+\t\t} );\n+\t\t$el.hover(\n+\t\t\tfunction( e ) {\n+\t\t\t\te.stopPropagation();\n+\t\t\t\tif ( options.event !== 'click' ) {\n+\t\t\t\t\tshow();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tfunction( e ) {\n+\t\t\t\te.stopPropagation();\n+\t\t\t\tif ( options.autoClose ) {\n+\t\t\t\t\thide();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t).addClass( 'ready' );\n+\t\treturn {\n+\t\t\tclose,\n+\t\t\topen,\n+\t\t};\n+\t}\n+\n+\t$.fn.LP( 'QuickTip', function( options ) {\n+\t\treturn $.each( this, function() {\n+\t\t\tlet $tip = $( this ).data( 'quick-tip' );\n+\n+\t\t\tif ( ! $tip ) {\n+\t\t\t\t$tip = new QuickTip( this, options );\n+\t\t\t\t$( this ).data( 'quick-tip', $tip );\n+\t\t\t}\n+\n+\t\t\tif ( typeof options === 'string' ) {\n+\t\t\t\t$tip[ options ] && $tip[ options ].apply( $tip );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+}\n+( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fshow-password.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fshow-password.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fshow-password.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils\u002Fshow-password.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-const $ = jQuery;\r\n-\r\n-$( function() {\r\n-\t$( '.form-field input[type=\"password\"]' ).wrap( '\u003Cspan class=\"lp-password-input\">\u003C\u002Fspan>' );\r\n-\t$( '.lp-password-input' ).append( '\u003Cspan class=\"lp-show-password-input\">\u003C\u002Fspan>' );\r\n-\r\n-\t$( '.lp-show-password-input' ).on( 'click', function() {\r\n-\t\t$( this ).toggleClass( 'display-password' );\r\n-\t\tif ( $( this ).hasClass( 'display-password' ) ) {\r\n-\t\t\t$( this ).siblings( [ 'input[type=\"password\"]' ] ).prop( 'type', 'text' );\r\n-\t\t} else {\r\n-\t\t\t$( this ).siblings( 'input[type=\"text\"]' ).prop( 'type', 'password' );\r\n-\t\t}\r\n-\t} );\r\n-} );\r\n-\r\n+const $ = jQuery;\n+\n+$( function() {\n+\t$( '.form-field input[type=\"password\"]' ).wrap( '\u003Cspan class=\"lp-password-input\">\u003C\u002Fspan>' );\n+\t$( '.lp-password-input' ).append( '\u003Cspan class=\"lp-show-password-input\">\u003C\u002Fspan>' );\n+\n+\t$( '.lp-show-password-input' ).on( 'click', function() {\n+\t\t$( this ).toggleClass( 'display-password' );\n+\t\tif ( $( this ).hasClass( 'display-password' ) ) {\n+\t\t\t$( this ).siblings( [ 'input[type=\"password\"]' ] ).prop( 'type', 'text' );\n+\t\t} else {\n+\t\t\t$( this ).siblings( 'input[type=\"text\"]' ).prop( 'type', 'password' );\n+\t\t}\n+\t} );\n+} );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Futils.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,323 +1,323 @@\n-\u002F**\r\n- * Utils functions\r\n- *\r\n- * @param url\r\n- * @param data\r\n- * @param functions\r\n- * @since 4.2.5.1\r\n- * @version 1.0.5\r\n- *\u002F\r\n-export const lpClassName = {\r\n-\thidden: 'lp-hidden',\r\n-\tloading: 'loading',\r\n-\telCollapse: 'lp-collapse',\r\n-\telSectionToggle: '.lp-section-toggle',\r\n-\telTriggerToggle: '.lp-trigger-toggle',\r\n-};\r\n-\r\n-export const lpFetchAPI = ( url, data = {}, functions = {} ) => {\r\n-\tif ( 'function' === typeof functions.before ) {\r\n-\t\tfunctions.before();\r\n-\t}\r\n-\r\n-\tfetch( url, { method: 'GET', ...data } )\r\n-\t\t.then( ( response ) => response.json() )\r\n-\t\t.then( ( response ) => {\r\n-\t\t\tif ( 'function' === typeof functions.success ) {\r\n-\t\t\t\tfunctions.success( response );\r\n-\t\t\t}\r\n-\t\t} )\r\n-\t\t.catch( ( err ) => {\r\n-\t\t\tif ( 'function' === typeof functions.error ) {\r\n-\t\t\t\tfunctions.error( err );\r\n-\t\t\t}\r\n-\t\t} )\r\n-\t\t.finally( () => {\r\n-\t\t\tif ( 'function' === typeof functions.completed ) {\r\n-\t\t\t\tfunctions.completed();\r\n-\t\t\t}\r\n-\t\t} );\r\n-};\r\n-\r\n-\u002F**\r\n- * Get current URL without params.\r\n- *\r\n- * @since 4.2.5.1\r\n- *\u002F\r\n-export const lpGetCurrentURLNoParam = () => {\r\n-\tlet currentUrl = window.location.href;\r\n-\tconst hasParams = currentUrl.includes( '?' );\r\n-\tif ( hasParams ) {\r\n-\t\tcurrentUrl = currentUrl.split( '?' )[ 0 ];\r\n-\t}\r\n-\r\n-\treturn currentUrl;\r\n-};\r\n-\r\n-export const lpAddQueryArgs = ( endpoint, args ) => {\r\n-\tconst url = new URL( endpoint );\r\n-\r\n-\tObject.keys( args ).forEach( ( arg ) => {\r\n-\t\turl.searchParams.set( arg, args[ arg ] );\r\n-\t} );\r\n-\r\n-\treturn url;\r\n-};\r\n-\r\n-\u002F**\r\n- * Listen element viewed.\r\n- *\r\n- * @param el\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n- *\u002F\r\n-export const listenElementViewed = ( el, callback ) => {\r\n-\tconst observerSeeItem = new IntersectionObserver( function( entries ) {\r\n-\t\tfor ( const entry of entries ) {\r\n-\t\t\tif ( entry.isIntersecting ) {\r\n-\t\t\t\tcallback( entry );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tobserverSeeItem.observe( el );\r\n-};\r\n-\r\n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param callback\r\n- * @since 4.2.5.8\r\n- *\u002F\r\n-export const listenElementCreated = ( callback ) => {\r\n-\tconst observerCreateItem = new MutationObserver( function( mutations ) {\r\n-\t\tmutations.forEach( function( mutation ) {\r\n-\t\t\tif ( mutation.addedNodes ) {\r\n-\t\t\t\tmutation.addedNodes.forEach( function( node ) {\r\n-\t\t\t\t\tif ( node.nodeType === 1 ) {\r\n-\t\t\t\t\t\tcallback( node );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} );\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-\r\n-\tobserverCreateItem.observe( document, { childList: true, subtree: true } );\r\n-\t\u002F\u002F End.\r\n-};\r\n-\r\n-\u002F**\r\n- * Listen element created.\r\n- *\r\n- * @param selector\r\n- * @param callback\r\n- * @since 4.2.7.1\r\n- *\u002F\r\n-export const lpOnElementReady = ( selector, callback ) => {\r\n-\tconst element = document.querySelector( selector );\r\n-\tif ( element ) {\r\n-\t\tcallback( element );\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tconst observer = new MutationObserver( ( mutations, obs ) => {\r\n-\t\tconst element = document.querySelector( selector );\r\n-\t\tif ( element ) {\r\n-\t\t\tobs.disconnect();\r\n-\t\t\tcallback( element );\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tobserver.observe( document.documentElement, {\r\n-\t\tchildList: true,\r\n-\t\tsubtree: true,\r\n-\t} );\r\n-};\r\n-\r\n-\u002F\u002F Parse JSON from string with content include LP_AJAX_START.\r\n-export const lpAjaxParseJsonOld = ( data ) => {\r\n-\tif ( typeof data !== 'string' ) {\r\n-\t\treturn data;\r\n-\t}\r\n-\r\n-\tconst m = String.raw( { raw: data } ).match(\r\n-\t\t\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs\r\n-\t);\r\n-\r\n-\ttry {\r\n-\t\tif ( m ) {\r\n-\t\t\tdata = JSON.parse( m[ 1 ].replace( \u002F(?:\\r\\n|\\r|\\n)\u002Fg, '' ) );\r\n-\t\t} else {\r\n-\t\t\tdata = JSON.parse( data );\r\n-\t\t}\r\n-\t} catch ( e ) {\r\n-\t\tdata = {};\r\n-\t}\r\n-\r\n-\treturn data;\r\n-};\r\n-\r\n-\u002F\u002F status 0: hide, 1: show\r\n-export const lpShowHideEl = ( el, status = 0 ) => {\r\n-\tif ( ! el ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( ! status ) {\r\n-\t\tel.classList.add( lpClassName.hidden );\r\n-\t} else {\r\n-\t\tel.classList.remove( lpClassName.hidden );\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F status 0: hide, 1: show\r\n-export const lpSetLoadingEl = ( el, status ) => {\r\n-\tif ( ! el ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( ! status ) {\r\n-\t\tel.classList.remove( lpClassName.loading );\r\n-\t} else {\r\n-\t\tel.classList.add( lpClassName.loading );\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F Toggle collapse section\r\n-export const toggleCollapse = (\r\n-\te,\r\n-\ttarget,\r\n-\telTriggerClassName = '',\r\n-\telsExclude = [],\r\n-\tcallback\r\n-) => {\r\n-\tif ( ! elTriggerClassName ) {\r\n-\t\telTriggerClassName = lpClassName.elTriggerToggle;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Exclude elements, which should not trigger the collapse toggle\r\n-\tif ( elsExclude && elsExclude.length > 0 ) {\r\n-\t\tfor ( const elExclude of elsExclude ) {\r\n-\t\t\tif ( target.closest( elExclude ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tconst elTrigger = target.closest( elTriggerClassName );\r\n-\tif ( ! elTrigger ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F\u002Fconsole.log( 'elTrigger', elTrigger );\r\n-\r\n-\tconst elSectionToggle = elTrigger.closest(\r\n-\t\t`${ lpClassName.elSectionToggle }`\r\n-\t);\r\n-\tif ( ! elSectionToggle ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\telSectionToggle.classList.toggle( `${ lpClassName.elCollapse }` );\r\n-\r\n-\tif ( 'function' === typeof callback ) {\r\n-\t\tcallback( elSectionToggle );\r\n-\t}\r\n-};\r\n-\r\n-\u002F\u002F Get data of form\r\n-export const getDataOfForm = ( form ) => {\r\n-\tconst dataSend = {};\r\n-\tconst formData = new FormData( form );\r\n-\tfor ( const pair of formData.entries() ) {\r\n-\t\tconst key = pair[ 0 ];\r\n-\t\tconst value = formData.getAll( key );\r\n-\t\tif ( ! dataSend.hasOwnProperty( key ) ) {\r\n-\t\t\t\u002F\u002F Convert value array to string.\r\n-\t\t\tdataSend[ key ] = value.join( ',' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn dataSend;\r\n-};\r\n-\r\n-\u002F\u002F Get field keys of form\r\n-export const getFieldKeysOfForm = ( form ) => {\r\n-\tconst keys = [];\r\n-\tconst elements = form.elements;\r\n-\tfor ( let i = 0; i \u003C elements.length; i++ ) {\r\n-\t\tconst name = elements[ i ].name;\r\n-\t\tif ( name && ! keys.includes( name ) ) {\r\n-\t\t\tkeys.push( name );\r\n-\t\t}\r\n-\t}\r\n-\treturn keys;\r\n-};\r\n-\r\n-\u002F\u002F Merge data handle with data form.\r\n-export const mergeDataWithDatForm = ( elForm, dataHandle ) => {\r\n-\tconst dataForm = getDataOfForm( elForm );\r\n-\tconst keys = getFieldKeysOfForm( elForm );\r\n-\tkeys.forEach( ( key ) => {\r\n-\t\tif ( ! dataForm.hasOwnProperty( key ) ) {\r\n-\t\t\tdelete dataHandle[ key ];\r\n-\t\t} else if ( dataForm[ key ][ 0 ] === '' ) {\r\n-\t\t\tdelete dataForm[ key ];\r\n-\t\t\tdelete dataHandle[ key ];\r\n-\t\t}\r\n-\t} );\r\n-\r\n-\tdataHandle = { ...dataHandle, ...dataForm };\r\n-\r\n-\treturn dataHandle;\r\n-};\r\n-\r\n-\u002F**\r\n- * Event trigger\r\n- * For each list of event handlers, listen event on document.\r\n- *\r\n- * eventName: 'click', 'change', ...\r\n- * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\r\n- *\r\n- * @param eventName\r\n- * @param eventHandlers\r\n- *\u002F\r\n-export const eventHandlers = ( eventName, eventHandlers ) => {\r\n-\tdocument.addEventListener( eventName, ( e ) => {\r\n-\t\tconst target = e.target;\r\n-\t\tlet args = {\r\n-\t\t\te,\r\n-\t\t\ttarget,\r\n-\t\t};\r\n-\r\n-\t\teventHandlers.forEach( ( eventHandler ) => {\r\n-\t\t\targs = { ...args, ...eventHandler };\r\n-\r\n-\t\t\t\u002F\u002Fconsole.log( args );\r\n-\r\n-\t\t\t\u002F\u002F Check condition before call back\r\n-\t\t\tif ( eventHandler.conditionBeforeCallBack ) {\r\n-\t\t\t\tif ( eventHandler.conditionBeforeCallBack( args ) !== true ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Special check for keydown event with checkIsEventEnter = true\r\n-\t\t\tif ( eventName === 'keydown' && eventHandler.checkIsEventEnter ) {\r\n-\t\t\t\tif ( e.key !== 'Enter' ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( target.closest( eventHandler.selector ) ) {\r\n-\t\t\t\tif ( eventHandler.class ) {\r\n-\t\t\t\t\t\u002F\u002F Call method of class, function callBack will understand exactly {this} is class object.\r\n-\t\t\t\t\teventHandler.class[ eventHandler.callBack ]( args );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F For send args is objected, {this} is eventHandler object, not class object.\r\n-\t\t\t\t\teventHandler.callBack( args );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} );\r\n-\t} );\r\n-};\r\n+\u002F**\n+ * Utils functions\n+ *\n+ * @param url\n+ * @param data\n+ * @param functions\n+ * @since 4.2.5.1\n+ * @version 1.0.5\n+ *\u002F\n+export const lpClassName = {\n+\thidden: 'lp-hidden',\n+\tloading: 'loading',\n+\telCollapse: 'lp-collapse',\n+\telSectionToggle: '.lp-section-toggle',\n+\telTriggerToggle: '.lp-trigger-toggle',\n+};\n+\n+export const lpFetchAPI = ( url, data = {}, functions = {} ) => {\n+\tif ( 'function' === typeof functions.before ) {\n+\t\tfunctions.before();\n+\t}\n+\n+\tfetch( url, { method: 'GET', ...data } )\n+\t\t.then( ( response ) => response.json() )\n+\t\t.then( ( response ) => {\n+\t\t\tif ( 'function' === typeof functions.success ) {\n+\t\t\t\tfunctions.success( response );\n+\t\t\t}\n+\t\t} )\n+\t\t.catch( ( err ) => {\n+\t\t\tif ( 'function' === typeof functions.error ) {\n+\t\t\t\tfunctions.error( err );\n+\t\t\t}\n+\t\t} )\n+\t\t.finally( () => {\n+\t\t\tif ( 'function' === typeof functions.completed ) {\n+\t\t\t\tfunctions.completed();\n+\t\t\t}\n+\t\t} );\n+};\n+\n+\u002F**\n+ * Get current URL without params.\n+ *\n+ * @since 4.2.5.1\n+ *\u002F\n+export const lpGetCurrentURLNoParam = () => {\n+\tlet currentUrl = window.location.href;\n+\tconst hasParams = currentUrl.includes( '?' );\n+\tif ( hasParams ) {\n+\t\tcurrentUrl = currentUrl.split( '?' )[ 0 ];\n+\t}\n+\n+\treturn currentUrl;\n+};\n+\n+export const lpAddQueryArgs = ( endpoint, args ) => {\n+\tconst url = new URL( endpoint );\n+\n+\tObject.keys( args ).forEach( ( arg ) => {\n+\t\turl.searchParams.set( arg, args[ arg ] );\n+\t} );\n+\n+\treturn url;\n+};\n+\n+\u002F**\n+ * Listen element viewed.\n+ *\n+ * @param el\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+export const listenElementViewed = ( el, callback ) => {\n+\tconst observerSeeItem = new IntersectionObserver( function( entries ) {\n+\t\tfor ( const entry of entries ) {\n+\t\t\tif ( entry.isIntersecting ) {\n+\t\t\t\tcallback( entry );\n+\t\t\t}\n+\t\t}\n+\t} );\n+\n+\tobserverSeeItem.observe( el );\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param callback\n+ * @since 4.2.5.8\n+ *\u002F\n+export const listenElementCreated = ( callback ) => {\n+\tconst observerCreateItem = new MutationObserver( function( mutations ) {\n+\t\tmutations.forEach( function( mutation ) {\n+\t\t\tif ( mutation.addedNodes ) {\n+\t\t\t\tmutation.addedNodes.forEach( function( node ) {\n+\t\t\t\t\tif ( node.nodeType === 1 ) {\n+\t\t\t\t\t\tcallback( node );\n+\t\t\t\t\t}\n+\t\t\t\t} );\n+\t\t\t}\n+\t\t} );\n+\t} );\n+\n+\tobserverCreateItem.observe( document, { childList: true, subtree: true } );\n+\t\u002F\u002F End.\n+};\n+\n+\u002F**\n+ * Listen element created.\n+ *\n+ * @param selector\n+ * @param callback\n+ * @since 4.2.7.1\n+ *\u002F\n+export const lpOnElementReady = ( selector, callback ) => {\n+\tconst element = document.querySelector( selector );\n+\tif ( element ) {\n+\t\tcallback( element );\n+\t\treturn;\n+\t}\n+\n+\tconst observer = new MutationObserver( ( mutations, obs ) => {\n+\t\tconst element = document.querySelector( selector );\n+\t\tif ( element ) {\n+\t\t\tobs.disconnect();\n+\t\t\tcallback( element );\n+\t\t}\n+\t} );\n+\n+\tobserver.observe( document.documentElement, {\n+\t\tchildList: true,\n+\t\tsubtree: true,\n+\t} );\n+};\n+\n+\u002F\u002F Parse JSON from string with content include LP_AJAX_START.\n+export const lpAjaxParseJsonOld = ( data ) => {\n+\tif ( typeof data !== 'string' ) {\n+\t\treturn data;\n+\t}\n+\n+\tconst m = String.raw( { raw: data } ).match(\n+\t\t\u002F\u003C-- LP_AJAX_START -->(.*)\u003C-- LP_AJAX_END -->\u002Fs\n+\t);\n+\n+\ttry {\n+\t\tif ( m ) {\n+\t\t\tdata = JSON.parse( m[ 1 ].replace( \u002F(?:\\r\\n|\\r|\\n)\u002Fg, '' ) );\n+\t\t} else {\n+\t\t\tdata = JSON.parse( data );\n+\t\t}\n+\t} catch ( e ) {\n+\t\tdata = {};\n+\t}\n+\n+\treturn data;\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+export const lpShowHideEl = ( el, status = 0 ) => {\n+\tif ( ! el ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( ! status ) {\n+\t\tel.classList.add( lpClassName.hidden );\n+\t} else {\n+\t\tel.classList.remove( lpClassName.hidden );\n+\t}\n+};\n+\n+\u002F\u002F status 0: hide, 1: show\n+export const lpSetLoadingEl = ( el, status ) => {\n+\tif ( ! el ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( ! status ) {\n+\t\tel.classList.remove( lpClassName.loading );\n+\t} else {\n+\t\tel.classList.add( lpClassName.loading );\n+\t}\n+};\n+\n+\u002F\u002F Toggle collapse section\n+export const toggleCollapse = (\n+\te,\n+\ttarget,\n+\telTriggerClassName = '',\n+\telsExclude = [],\n+\tcallback\n+) => {\n+\tif ( ! elTriggerClassName ) {\n+\t\telTriggerClassName = lpClassName.elTriggerToggle;\n+\t}\n+\n+\t\u002F\u002F Exclude elements, which should not trigger the collapse toggle\n+\tif ( elsExclude && elsExclude.length > 0 ) {\n+\t\tfor ( const elExclude of elsExclude ) {\n+\t\t\tif ( target.closest( elExclude ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tconst elTrigger = target.closest( elTriggerClassName );\n+\tif ( ! elTrigger ) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F\u002Fconsole.log( 'elTrigger', elTrigger );\n+\n+\tconst elSectionToggle = elTrigger.closest(\n+\t\t`${ lpClassName.elSectionToggle }`\n+\t);\n+\tif ( ! elSectionToggle ) {\n+\t\treturn;\n+\t}\n+\n+\telSectionToggle.classList.toggle( `${ lpClassName.elCollapse }` );\n+\n+\tif ( 'function' === typeof callback ) {\n+\t\tcallback( elSectionToggle );\n+\t}\n+};\n+\n+\u002F\u002F Get data of form\n+export const getDataOfForm = ( form ) => {\n+\tconst dataSend = {};\n+\tconst formData = new FormData( form );\n+\tfor ( const pair of formData.entries() ) {\n+\t\tconst key = pair[ 0 ];\n+\t\tconst value = formData.getAll( key );\n+\t\tif ( ! dataSend.hasOwnProperty( key ) ) {\n+\t\t\t\u002F\u002F Convert value array to string.\n+\t\t\tdataSend[ key ] = value.join( ',' );\n+\t\t}\n+\t}\n+\n+\treturn dataSend;\n+};\n+\n+\u002F\u002F Get field keys of form\n+export const getFieldKeysOfForm = ( form ) => {\n+\tconst keys = [];\n+\tconst elements = form.elements;\n+\tfor ( let i = 0; i \u003C elements.length; i++ ) {\n+\t\tconst name = elements[ i ].name;\n+\t\tif ( name && ! keys.includes( name ) ) {\n+\t\t\tkeys.push( name );\n+\t\t}\n+\t}\n+\treturn keys;\n+};\n+\n+\u002F\u002F Merge data handle with data form.\n+export const mergeDataWithDatForm = ( elForm, dataHandle ) => {\n+\tconst dataForm = getDataOfForm( elForm );\n+\tconst keys = getFieldKeysOfForm( elForm );\n+\tkeys.forEach( ( key ) => {\n+\t\tif ( ! dataForm.hasOwnProperty( key ) ) {\n+\t\t\tdelete dataHandle[ key ];\n+\t\t} else if ( dataForm[ key ][ 0 ] === '' ) {\n+\t\t\tdelete dataForm[ key ];\n+\t\t\tdelete dataHandle[ key ];\n+\t\t}\n+\t} );\n+\n+\tdataHandle = { ...dataHandle, ...dataForm };\n+\n+\treturn dataHandle;\n+};\n+\n+\u002F**\n+ * Event trigger\n+ * For each list of event handlers, listen event on document.\n+ *\n+ * eventName: 'click', 'change', ...\n+ * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]\n+ *\n+ * @param eventName\n+ * @param eventHandlers\n+ *\u002F\n+export const eventHandlers = ( eventName, eventHandlers ) => {\n+\tdocument.addEventListener( eventName, ( e ) => {\n+\t\tconst target = e.target;\n+\t\tlet args = {\n+\t\t\te,\n+\t\t\ttarget,\n+\t\t};\n+\n+\t\teventHandlers.forEach( ( eventHandler ) => {\n+\t\t\targs = { ...args, ...eventHandler };\n+\n+\t\t\t\u002F\u002Fconsole.log( args );\n+\n+\t\t\t\u002F\u002F Check condition before call back\n+\t\t\tif ( eventHandler.conditionBeforeCallBack ) {\n+\t\t\t\tif ( eventHandler.conditionBeforeCallBack( args ) !== true ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Special check for keydown event with checkIsEventEnter = true\n+\t\t\tif ( eventName === 'keydown' && eventHandler.checkIsEventEnter ) {\n+\t\t\t\tif ( e.key !== 'Enter' ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( target.closest( eventHandler.selector ) ) {\n+\t\t\t\tif ( eventHandler.class ) {\n+\t\t\t\t\t\u002F\u002F Call method of class, function callBack will understand exactly {this} is class object.\n+\t\t\t\t\teventHandler.class[ eventHandler.callBack ]( args );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F For send args is objected, {this} is eventHandler object, not class object.\n+\t\t\t\t\teventHandler.callBack( args );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} );\n+\t} );\n+};\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fchart.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fchart.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fchart.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fchart.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u002F*!\r\n- * Chart.js v3.2.1\r\n- * https:\u002F\u002Fwww.chartjs.org\r\n- * (c) 2021 Chart.js Contributors\r\n- * Released under the MIT License\r\n- *\u002F\r\n-!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){\"use strict\";const t=\"undefined\"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,n){const o=n||(t=>Array.prototype.slice.call(t));let s=!1,a=[];return function(...n){a=o(n),s||(s=!0,t.call(window,(()=>{s=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(){return e?(clearTimeout(i),i=setTimeout(t,e)):t(),e}}const n=t=>\"start\"===t?\"left\":\"end\"===t?\"right\":\"center\",o=(t,e,i)=>\"start\"===t?e:\"end\"===t?i:(e+i)\u002F2,s=(t,e,i)=>\"right\"===t?i:\"center\"===t?(e+i)\u002F2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,n){const o=e.listeners[n],s=e.duration;o.forEach((n=>n({chart:t,initial:e.initial,numSteps:s,currentStep:Math.min(i-e.start,s)})))}_refresh(){const e=this;e._request||(e._running=!0,e._request=t.call(window,(()=>{e._update(),e._request=null,e._running&&e._refresh()})))}_update(t=Date.now()){const e=this;let i=0;e._charts.forEach(((n,o)=>{if(!n.running||!n.items.length)return;const s=n.items;let a,r=s.length-1,l=!1;for(;r>=0;--r)a=s[r],a._active?(a._total>n.duration&&(n.duration=a._total),a.tick(t),l=!0):(s[r]=s[s.length-1],s.pop());l&&(o.draw(),e._notify(o,n,t,\"progress\")),s.length||(n.running=!1,e._notify(o,n,t,\"complete\"),n.initial=!1),i+=s.length})),e._lastDate=t,0===i&&(e._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}};\r\n-\u002F*!\r\n- * @kurkle\u002Fcolor v0.1.9\r\n- * https:\u002F\u002Fgithub.com\u002Fkurkle\u002Fcolor#readme\r\n- * (c) 2020 Jukka Kurkela\r\n- * Released under the MIT License\r\n- *\u002Fconst r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l=\"0123456789ABCDEF\",c=t=>l[15&t],h=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?c:h;return t?\"#\"+e(t.r)+e(t.g)+e(t.b)+(t.a\u003C255?e(t.a):\"\"):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t\u002F2.55)\u002F100,0,1)}function b(t){return g(f(100*t),0,100)}const _=\u002F^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,\u002F]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;const y=\u002F^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;function v(t,e,i){const n=e*Math.min(i,1-i),o=(e,o=(e+t\u002F30)%12)=>i-n*Math.max(Math.min(o-3,9-o,1),-1);return[o(0),o(8),o(4)]}function w(t,e,i){const n=(n,o=(n+t\u002F60)%6)=>i-i*e*Math.max(Math.min(o,4-o,1),0);return[n(5),n(3),n(1)]}function M(t,e,i){const n=v(t,1,.5);let o;for(e+i>1&&(o=1\u002F(e+i),e*=o,i*=o),o=0;o\u003C3;o++)n[o]*=1-e-i,n[o]+=e;return n}function k(t){const e=t.r\u002F255,i=t.g\u002F255,n=t.b\u002F255,o=Math.max(e,i,n),s=Math.min(e,i,n),a=(o+s)\u002F2;let r,l,c;return o!==s&&(c=o-s,l=a>.5?c\u002F(2-o-s):c\u002F(o+s),r=o===e?(i-n)\u002Fc+(i\u003Cn?6:0):o===i?(n-e)\u002Fc+2:(e-i)\u002Fc+4,r=60*r+.5),[0|r,l||0,a]}function S(t,e,i,n){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,n)).map(m)}function P(t,e,i){return S(v,t,e,i)}function D(t){return(t%360+360)%360}function C(t){const e=y.exec(t);let i,n=255;if(!e)return;e[5]!==i&&(n=e[6]?p(+e[5]):m(+e[5]));const o=D(+e[2]),s=+e[3]\u002F100,a=+e[4]\u002F100;return i=\"hwb\"===e[1]?function(t,e,i){return S(M,t,e,i)}(o,s,a):\"hsv\"===e[1]?function(t,e,i){return S(w,t,e,i)}(o,s,a):P(o,s,a),{r:i[0],g:i[1],b:i[2],a:n}}const O={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},A={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};let T;function R(t){T||(T=function(){const t={},e=Object.keys(A),i=Object.keys(O);let n,o,s,a,r;for(n=0;n\u003Ce.length;n++){for(a=r=e[n],o=0;o\u003Ci.length;o++)s=i[o],r=r.replace(s,O[s]);s=parseInt(A[a],16),t[r]=[s>>16&255,s>>8&255,255&s]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function L(t,e,i){if(t){let n=k(t);n[e]=Math.max(0,Math.min(n[e]+n[e]*i,0===e?360:1)),n=P(n),t.r=n[0],t.g=n[1],t.b=n[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=E(t,{r:0,g:0,b:0,a:1})).a=m(e.a),e}function z(t){return\"r\"===t.charAt(0)?function(t){const e=_.exec(t);let i,n,o,s=255;if(e){if(e[7]!==i){const t=+e[7];s=255&(e[8]?p(t):255*t)}return i=+e[1],n=+e[3],o=+e[5],i=255&(e[2]?p(i):i),n=255&(e[4]?p(n):n),o=255&(e[6]?p(o):o),{r:i,g:n,b:o,a:s}}}(t):C(t)}class F{constructor(t){if(t instanceof F)return t;const e=typeof t;let i;var n,o,s;\"object\"===e?i=I(t):\"string\"===e&&(s=(n=t).length,\"#\"===n[0]&&(4===s||5===s?o={r:255&17*r[n[1]],g:255&17*r[n[2]],b:255&17*r[n[3]],a:5===s?17*r[n[4]]:255}:7!==s&&9!==s||(o={r:r[n[1]]\u003C\u003C4|r[n[2]],g:r[n[3]]\u003C\u003C4|r[n[4]],b:r[n[5]]\u003C\u003C4|r[n[6]],a:9===s?r[n[7]]\u003C\u003C4|r[n[8]]:255})),i=o||R(t)||z(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=E(this._rgb);return t&&(t.a=x(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a\u003C255?`rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):this._rgb;var t}hexString(){return this._valid?u(this._rgb):this._rgb}hslString(){return this._valid?function(t){if(!t)return;const e=k(t),i=e[0],n=b(e[1]),o=b(e[2]);return t.a\u003C255?`hsla(${i}, ${n}%, ${o}%, ${x(t.a)})`:`hsl(${i}, ${n}%, ${o}%)`}(this._rgb):this._rgb}mix(t,e){const i=this;if(t){const n=i.rgb,o=t.rgb;let s;const a=e===s?.5:e,r=2*a-1,l=n.a-o.a,c=((r*l==-1?r:(r+l)\u002F(1+r*l))+1)\u002F2;s=1-c,n.r=255&c*n.r+s*o.r+.5,n.g=255&c*n.g+s*o.g+.5,n.b=255&c*n.b+s*o.b+.5,n.a=a*n.a+(1-a)*o.a,i.rgb=n}return i}clone(){return new F(this.rgb)}alpha(t){return this._rgb.a=m(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=f(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return L(this._rgb,2,t),this}darken(t){return L(this._rgb,2,-t),this}saturate(t){return L(this._rgb,1,t),this}desaturate(t){return L(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=k(t);i[0]=D(i[0]+e),i=P(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function V(t){return new F(t)}const B=t=>t instanceof CanvasGradient||t instanceof CanvasPattern;function W(t){return B(t)?t:V(t)}function H(t){return B(t)?t:V(t).saturate(.5).darken(.1).hexString()}function N(){}const j=function(){let t=0;return function(){return t++}}();function $(t){return null==t}function Y(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return\"[object\"===e.substr(0,7)&&\"Array]\"===e.substr(-6)}function U(t){return null!==t&&\"[object Object]\"===Object.prototype.toString.call(t)}const X=t=>(\"number\"==typeof t||t instanceof Number)&&isFinite(+t);function q(t,e){return X(t)?t:e}function K(t,e){return void 0===t?e:t}const G=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100:t\u002Fe,Z=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100*e:+t;function Q(t,e,i){if(t&&\"function\"==typeof t.call)return t.apply(i,e)}function J(t,e,i,n){let o,s,a;if(Y(t))if(s=t.length,n)for(o=s-1;o>=0;o--)e.call(i,t[o],o);else for(o=0;o\u003Cs;o++)e.call(i,t[o],o);else if(U(t))for(a=Object.keys(t),s=a.length,o=0;o\u003Cs;o++)e.call(i,t[a[o]],a[o])}function tt(t,e){let i,n,o,s;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i\u003Cn;++i)if(o=t[i],s=e[i],o.datasetIndex!==s.datasetIndex||o.index!==s.index)return!1;return!0}function et(t){if(Y(t))return t.map(et);if(U(t)){const e=Object.create(null),i=Object.keys(t),n=i.length;let o=0;for(;o\u003Cn;++o)e[i[o]]=et(t[i[o]]);return e}return t}function it(t){return-1===[\"__proto__\",\"prototype\",\"constructor\"].indexOf(t)}function nt(t,e,i,n){if(!it(t))return;const o=e[t],s=i[t];U(o)&&U(s)?ot(o,s,n):e[t]=et(s)}function ot(t,e,i){const n=Y(e)?e:[e],o=n.length;if(!U(t))return t;const s=(i=i||{}).merger||nt;for(let a=0;a\u003Co;++a){if(!U(e=n[a]))continue;const o=Object.keys(e);for(let n=0,a=o.length;n\u003Ca;++n)s(o[n],t,e,i)}return t}function st(t,e){return ot(t,e,{merger:at})}function at(t,e,i){if(!it(t))return;const n=e[t],o=i[t];U(n)&&U(o)?st(n,o):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=et(o))}function rt(t,e){const i=t.indexOf(\".\",e);return-1===i?t.length:i}function lt(t,e){if(\"\"===e)return t;let i=0,n=rt(e,i);for(;t&&n>i;)t=t[e.substr(i,n-i)],i=n+1,n=rt(e,i);return t}function ct(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ht=t=>void 0!==t,dt=t=>\"function\"==typeof t,ut=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0},ft=Object.create(null),gt=Object.create(null);function pt(t,e){if(!e)return t;const i=e.split(\".\");for(let e=0,n=i.length;e\u003Cn;++e){const n=i[e];t=t[n]||(t[n]=Object.create(null))}return t}function mt(t,e,i){return\"string\"==typeof e?ot(pt(t,e),i):ot(pt(t,\"\"),e)}var xt=new class{constructor(t){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>H(e.backgroundColor),this.hoverBorderColor=(t,e)=>H(e.borderColor),this.hoverColor=(t,e)=>H(e.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.describe(t)}set(t,e){return mt(this,t,e)}get(t){return pt(this,t)}describe(t,e){return mt(gt,t,e)}override(t,e){return mt(ft,t,e)}route(t,e,i,n){const o=pt(this,t),s=pt(this,i),a=\"_\"+e;Object.defineProperties(o,{[a]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=s[n];return U(t)?Object.assign({},e,t):K(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith(\"on\"),_indexable:t=>\"events\"!==t,hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}});const bt=Math.PI,_t=2*bt,yt=_t+bt,vt=Number.POSITIVE_INFINITY,wt=bt\u002F180,Mt=bt\u002F2,kt=bt\u002F4,St=2*bt\u002F3,Pt=Math.log10,Dt=Math.sign;function Ct(t){const e=Math.pow(10,Math.floor(Pt(t))),i=t\u002Fe;return(i\u003C=1?1:i\u003C=2?2:i\u003C=5?5:10)*e}function Ot(t){const e=[],i=Math.sqrt(t);let n;for(n=1;n\u003Ci;n++)t%n==0&&(e.push(n),e.push(t\u002Fn));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function At(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Tt(t,e,i){return Math.abs(t-e)\u003Ci}function Rt(t,e){const i=Math.round(t);return i-e\u003C=t&&i+e>=t}function Lt(t,e,i){let n,o,s;for(n=0,o=t.length;n\u003Co;n++)s=t[n][i],isNaN(s)||(e.min=Math.min(e.min,s),e.max=Math.max(e.max,s))}function Et(t){return t*(bt\u002F180)}function It(t){return t*(180\u002Fbt)}function zt(t){if(!X(t))return;let e=1,i=0;for(;Math.round(t*e)\u002Fe!==t;)e*=10,i++;return i}function Ft(t,e){const i=e.x-t.x,n=e.y-t.y,o=Math.sqrt(i*i+n*n);let s=Math.atan2(n,i);return s\u003C-.5*bt&&(s+=_t),{angle:s,distance:o}}function Vt(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function Bt(t,e){return(t-e+yt)%_t-bt}function Wt(t){return(t%_t+_t)%_t}function Ht(t,e,i){const n=Wt(t),o=Wt(e),s=Wt(i),a=Wt(o-n),r=Wt(s-n),l=Wt(n-o),c=Wt(n-s);return n===o||n===s||a>r&&l\u003Cc}function Nt(t,e,i){return Math.max(e,Math.min(i,t))}function jt(t){return Nt(t,-32768,32767)}function $t(t){return!t||$(t.size)||$(t.family)?null:(t.style?t.style+\" \":\"\")+(t.weight?t.weight+\" \":\"\")+t.size+\"px \"+t.family}function Yt(t,e,i,n,o){let s=e[o];return s||(s=e[o]=t.measureText(o).width,i.push(o)),s>n&&(n=s),n}function Ut(t,e,i,n){let o=(n=n||{}).data=n.data||{},s=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(o=n.data={},s=n.garbageCollect=[],n.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,c,h,d,u;for(l=0;l\u003Cr;l++)if(d=i[l],null!=d&&!0!==Y(d))a=Yt(t,o,s,a,d);else if(Y(d))for(c=0,h=d.length;c\u003Ch;c++)u=d[c],null==u||Y(u)||(a=Yt(t,o,s,a,u));t.restore();const f=s.length\u002F2;if(f>i.length){for(l=0;l\u003Cf;l++)delete o[s[l]];s.splice(0,f)}return a}function Xt(t,e,i){const n=t.currentDevicePixelRatio,o=0!==i?Math.max(i\u002F2,.5):0;return Math.round((e-o)*n)\u002Fn+o}function qt(t,e){(e=e||t.getContext(\"2d\")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Kt(t,e,i,n){let o,s,a,r,l;const c=e.pointStyle,h=e.rotation,d=e.radius;let u=(h||0)*wt;if(c&&\"object\"==typeof c&&(o=c.toString(),\"[object HTMLImageElement]\"===o||\"[object HTMLCanvasElement]\"===o))return t.save(),t.translate(i,n),t.rotate(u),t.drawImage(c,-c.width\u002F2,-c.height\u002F2,c.width,c.height),void t.restore();if(!(isNaN(d)||d\u003C=0)){switch(t.beginPath(),c){default:t.arc(i,n,d,0,_t),t.closePath();break;case\"triangle\":t.moveTo(i+Math.sin(u)*d,n-Math.cos(u)*d),u+=St,t.lineTo(i+Math.sin(u)*d,n-Math.cos(u)*d),u+=St,t.lineTo(i+Math.sin(u)*d,n-Math.cos(u)*d),t.closePath();break;case\"rectRounded\":l=.516*d,r=d-l,s=Math.cos(u+kt)*r,a=Math.sin(u+kt)*r,t.arc(i-s,n-a,l,u-bt,u-Mt),t.arc(i+a,n-s,l,u-Mt,u),t.arc(i+s,n+a,l,u,u+Mt),t.arc(i-a,n+s,l,u+Mt,u+bt),t.closePath();break;case\"rect\":if(!h){r=Math.SQRT1_2*d,t.rect(i-r,n-r,2*r,2*r);break}u+=kt;case\"rectRot\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+a,n-s),t.lineTo(i+s,n+a),t.lineTo(i-a,n+s),t.closePath();break;case\"crossRot\":u+=kt;case\"cross\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s);break;case\"star\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s),u+=kt,s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s);break;case\"line\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a);break;case\"dash\":t.moveTo(i,n),t.lineTo(i+Math.cos(u)*d,n+Math.sin(u)*d)}t.fill(),e.borderWidth>0&&t.stroke()}}function Gt(t,e,i){return i=i||.5,t&&t.x>e.left-i&&t.x\u003Ce.right+i&&t.y>e.top-i&&t.y\u003Ce.bottom+i}function Zt(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function Qt(t){t.restore()}function Jt(t,e,i,n,o){if(!e)return t.lineTo(i.x,i.y);if(\"middle\"===o){const n=(e.x+i.x)\u002F2;t.lineTo(n,e.y),t.lineTo(n,i.y)}else\"after\"===o!=!!n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function te(t,e,i,n){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(n?e.cp1x:e.cp2x,n?e.cp1y:e.cp2y,n?i.cp2x:i.cp1x,n?i.cp2y:i.cp1y,i.x,i.y)}function ee(t,e,i,n,o,s={}){const a=Y(e)?e:[e],r=s.strokeWidth>0&&\"\"!==s.strokeColor;let l,c;for(t.save(),s.translation&&t.translate(s.translation[0],s.translation[1]),$(s.rotation)||t.rotate(s.rotation),t.font=o.string,s.color&&(t.fillStyle=s.color),s.textAlign&&(t.textAlign=s.textAlign),s.textBaseline&&(t.textBaseline=s.textBaseline),l=0;l\u003Ca.length;++l){if(c=a[l],r&&(s.strokeColor&&(t.strokeStyle=s.strokeColor),$(s.strokeWidth)||(t.lineWidth=s.strokeWidth),t.strokeText(c,i,n,s.maxWidth)),t.fillText(c,i,n,s.maxWidth),s.strikethrough||s.underline){const e=t.measureText(c),o=i-e.actualBoundingBoxLeft,a=i+e.actualBoundingBoxRight,r=n-e.actualBoundingBoxAscent,l=n+e.actualBoundingBoxDescent,h=s.strikethrough?(r+l)\u002F2:l;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=s.decorationWidth||2,t.moveTo(o,h),t.lineTo(a,h),t.stroke()}n+=o.lineHeight}t.restore()}function ie(t,e){const{x:i,y:n,w:o,h:s,radius:a}=e;t.arc(i+a.topLeft,n+a.topLeft,a.topLeft,-Mt,bt,!0),t.lineTo(i,n+s-a.bottomLeft),t.arc(i+a.bottomLeft,n+s-a.bottomLeft,a.bottomLeft,bt,Mt,!0),t.lineTo(i+o-a.bottomRight,n+s),t.arc(i+o-a.bottomRight,n+s-a.bottomRight,a.bottomRight,Mt,0,!0),t.lineTo(i+o,n+a.topRight),t.arc(i+o-a.topRight,n+a.topRight,a.topRight,0,-Mt,!0),t.lineTo(i+a.topLeft,n)}function ne(t,e,i){i=i||(i=>t[i]\u003Ce);let n,o=t.length-1,s=0;for(;o-s>1;)n=s+o>>1,i(n)?s=n:o=n;return{lo:s,hi:o}}const oe=(t,e,i)=>ne(t,i,(n=>t[n][e]\u003Ci)),se=(t,e,i)=>ne(t,i,(n=>t[n][e]>=i));function ae(t,e,i){let n=0,o=t.length;for(;n\u003Co&&t[n]\u003Ce;)n++;for(;o>n&&t[o-1]>i;)o--;return n>0||o\u003Ct.length?t.slice(n,o):t}const re=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function le(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),re.forEach((e=>{const i=\"_onData\"+ct(e),n=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const o=n.apply(this,e);return t._chartjs.listeners.forEach((t=>{\"function\"==typeof t[i]&&t[i](...e)})),o}})})))}function ce(t,e){const i=t._chartjs;if(!i)return;const n=i.listeners,o=n.indexOf(e);-1!==o&&n.splice(o,1),n.length>0||(re.forEach((e=>{delete t[e]})),delete t._chartjs)}function he(t){const e=new Set;let i,n;for(i=0,n=t.length;i\u003Cn;++i)e.add(t[i]);if(e.size===n)return t;const o=[];return e.forEach((t=>{o.push(t)})),o}function de(t){let e=t.parentNode;return e&&\"[object ShadowRoot]\"===e.toString()&&(e=e.host),e}function ue(t,e,i){let n;return\"string\"==typeof t?(n=parseInt(t,10),-1!==t.indexOf(\"%\")&&(n=n\u002F100*e.parentNode[i])):n=t,n}const fe=t=>window.getComputedStyle(t,null);function ge(t,e){return fe(t).getPropertyValue(e)}const pe=[\"top\",\"right\",\"bottom\",\"left\"];function me(t,e,i){const n={};i=i?\"-\"+i:\"\";for(let o=0;o\u003C4;o++){const s=pe[o];n[s]=parseFloat(t[e+\"-\"+s+i])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}function xe(t,e){const{canvas:i,currentDevicePixelRatio:n}=e,o=fe(i),s=\"border-box\"===o.boxSizing,a=me(o,\"padding\"),r=me(o,\"border\",\"width\"),{x:l,y:c,box:h}=function(t,e){const i=t.native||t,n=i.touches,o=n&&n.length?n[0]:i,{offsetX:s,offsetY:a}=o;let r,l,c=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(s,a,i.target))r=s,l=a;else{const t=e.getBoundingClientRect();r=o.clientX-t.left,l=o.clientY-t.top,c=!0}return{x:r,y:l,box:c}}(t,i),d=a.left+(h&&r.left),u=a.top+(h&&r.top);let{width:f,height:g}=e;return s&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)\u002Ff*i.width\u002Fn),y:Math.round((c-u)\u002Fg*i.height\u002Fn)}}const be=t=>Math.round(10*t)\u002F10;function _e(t,e,i,n){const o=fe(t),s=me(o,\"margin\"),a=ue(o.maxWidth,t,\"clientWidth\")||vt,r=ue(o.maxHeight,t,\"clientHeight\")||vt,l=function(t,e,i){let n,o;if(void 0===e||void 0===i){const s=de(t);if(s){const t=s.getBoundingClientRect(),a=fe(s),r=me(a,\"border\",\"width\"),l=me(a,\"padding\");e=t.width-l.width-r.width,i=t.height-l.height-r.height,n=ue(a.maxWidth,s,\"clientWidth\"),o=ue(a.maxHeight,s,\"clientHeight\")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:n||vt,maxHeight:o||vt}}(t,e,i);let{width:c,height:h}=l;if(\"content-box\"===o.boxSizing){const t=me(o,\"border\",\"width\"),e=me(o,\"padding\");c-=e.width+t.width,h-=e.height+t.height}return c=Math.max(0,c-s.width),h=Math.max(0,n?Math.floor(c\u002Fn):h-s.height),c=be(Math.min(c,a,l.maxWidth)),h=be(Math.min(h,r,l.maxHeight)),c&&!h&&(h=be(c\u002F2)),{width:c,height:h}}function ye(t,e,i){const n=t.currentDevicePixelRatio=e||1,{canvas:o,width:s,height:a}=t;o.height=a*n,o.width=s*n,t.ctx.setTransform(n,0,0,n,0,0),o.style&&(i||!o.style.height&&!o.style.width)&&(o.style.height=a+\"px\",o.style.width=s+\"px\")}const ve=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(t){}return t}();function we(t,e){const i=ge(t,e),n=i&&i.match(\u002F^(\\d+)(\\.\\d+)?px$\u002F);return n?+n[1]:void 0}function Me(t,e){return\"native\"in t?{x:t.x,y:t.y}:xe(t,e)}function ke(t,e,i,n){const{controller:o,data:s,_sorted:a}=t,r=o._cachedMeta.iScale;if(r&&e===r.axis&&a&&s.length){const t=r._reversePixels?se:oe;if(!n)return t(s,e,i);if(o._sharedOptions){const n=s[0],o=\"function\"==typeof n.getRange&&n.getRange(e);if(o){const n=t(s,e,i-o),a=t(s,e,i+o);return{lo:n.lo,hi:a.hi}}}}return{lo:0,hi:s.length-1}}function Se(t,e,i,n,o){const s=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=s.length;t\u003Ci;++t){const{index:i,data:r}=s[t],{lo:l,hi:c}=ke(s[t],e,a,o);for(let t=l;t\u003C=c;++t){const e=r[t];e.skip||n(e,i,t)}}}function Pe(t,e,i,n){const o=[];if(!Gt(e,t.chartArea,t._minPadding))return o;return Se(t,i,e,(function(t,i,s){t.inRange(e.x,e.y,n)&&o.push({element:t,datasetIndex:i,index:s})}),!0),o}function De(t,e,i,n,o){const s=function(t){const e=-1!==t.indexOf(\"x\"),i=-1!==t.indexOf(\"y\");return function(t,n){const o=e?Math.abs(t.x-n.x):0,s=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}}(i);let a=Number.POSITIVE_INFINITY,r=[];if(!Gt(e,t.chartArea,t._minPadding))return r;return Se(t,i,e,(function(t,i,l){if(n&&!t.inRange(e.x,e.y,o))return;const c=t.getCenterPoint(o),h=s(e,c);h\u003Ca?(r=[{element:t,datasetIndex:i,index:l}],a=h):h===a&&r.push({element:t,datasetIndex:i,index:l})})),r}function Ce(t,e,i,n){const o=Me(e,t),s=[],a=i.axis,r=\"x\"===a?\"inXRange\":\"inYRange\";let l=!1;return function(t,e){const i=t.getSortedVisibleDatasetMetas();let n,o,s;for(let t=0,a=i.length;t\u003Ca;++t){({index:n,data:o}=i[t]);for(let t=0,i=o.length;t\u003Ci;++t)s=o[t],s.skip||e(s,n,t)}}(t,((t,e,i)=>{t[r](o[a],n)&&s.push({element:t,datasetIndex:e,index:i}),t.inRange(o.x,o.y,n)&&(l=!0)})),i.intersect&&!l?[]:s}var Oe={modes:{index(t,e,i,n){const o=Me(e,t),s=i.axis||\"x\",a=i.intersect?Pe(t,o,s,n):De(t,o,s,!1,n),r=[];return a.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=a[0].index,i=t.data[e];i&&!i.skip&&r.push({element:i,datasetIndex:t.index,index:e})})),r):[]},dataset(t,e,i,n){const o=Me(e,t),s=i.axis||\"xy\";let a=i.intersect?Pe(t,o,s,n):De(t,o,s,!1,n);if(a.length>0){const e=a[0].datasetIndex,i=t.getDatasetMeta(e).data;a=[];for(let t=0;t\u003Ci.length;++t)a.push({element:i[t],datasetIndex:e,index:t})}return a},point:(t,e,i,n)=>Pe(t,Me(e,t),i.axis||\"xy\",n),nearest:(t,e,i,n)=>De(t,Me(e,t),i.axis||\"xy\",i.intersect,n),x:(t,e,i,n)=>(i.axis=\"x\",Ce(t,e,i,n)),y:(t,e,i,n)=>(i.axis=\"y\",Ce(t,e,i,n))}};const Ae=new RegExp(\u002F^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$\u002F),Te=new RegExp(\u002F^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$\u002F);function Re(t,e){const i=(\"\"+t).match(Ae);if(!i||\"normal\"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case\"px\":return t;case\"%\":t\u002F=100}return e*t}function Le(t,e){const i={},n=U(e),o=n?Object.keys(e):e,s=U(t)?n?i=>K(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of o)i[t]=+s(t)||0;return i}function Ee(t){return Le(t,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function Ie(t){return Le(t,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function ze(t){const e=Ee(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Fe(t,e){t=t||{},e=e||xt.font;let i=K(t.size,e.size);\"string\"==typeof i&&(i=parseInt(i,10));let n=K(t.style,e.style);n&&!(\"\"+n).match(Te)&&(console.warn('Invalid font style specified: \"'+n+'\"'),n=\"\");const o={family:K(t.family,e.family),lineHeight:Re(K(t.lineHeight,e.lineHeight),i),size:i,style:n,weight:K(t.weight,e.weight),string:\"\"};return o.string=$t(o),o}function Ve(t,e,i,n){let o,s,a,r=!0;for(o=0,s=t.length;o\u003Cs;++o)if(a=t[o],void 0!==a&&(void 0!==e&&\"function\"==typeof a&&(a=a(e),r=!1),void 0!==i&&Y(a)&&(a=a[i%a.length],r=!1),void 0!==a))return n&&!r&&(n.cacheable=!1),a}function Be(t,e){const{min:i,max:n}=t;return{min:i-Math.abs(Z(e,i)),max:n+Z(e,n)}}const We=[\"left\",\"top\",\"right\",\"bottom\"];function He(t,e){return t.filter((t=>t.pos===e))}function Ne(t,e){return t.filter((t=>-1===We.indexOf(t.pos)&&t.box.axis===e))}function je(t,e){return t.sort(((t,i)=>{const n=e?i:t,o=e?t:i;return n.weight===o.weight?n.index-o.index:n.weight-o.weight}))}function $e(t,e,i,n){return Math.max(t[i],e[i])+Math.max(t[n],e[n])}function Ye(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Ue(t,e,i){const n=i.box,o=t.maxPadding;U(i.pos)||(i.size&&(t[i.pos]-=i.size),i.size=i.horizontal?n.height:n.width,t[i.pos]+=i.size),n.getPadding&&Ye(o,n.getPadding());const s=Math.max(0,e.outerWidth-$e(o,t,\"left\",\"right\")),a=Math.max(0,e.outerHeight-$e(o,t,\"top\",\"bottom\")),r=s!==t.w,l=a!==t.h;return t.w=s,t.h=a,i.horizontal?{same:r,other:l}:{same:l,other:r}}function Xe(t,e){const i=e.maxPadding;function n(t){const n={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{n[t]=Math.max(e[t],i[t])})),n}return n(t?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function qe(t,e,i){const n=[];let o,s,a,r,l,c;for(o=0,s=t.length,l=0;o\u003Cs;++o){a=t[o],r=a.box,r.update(a.width||e.w,a.height||e.h,Xe(a.horizontal,e));const{same:s,other:h}=Ue(e,i,a);l|=s&&n.length,c=c||h,r.fullSize||n.push(a)}return l&&qe(n,e,i)||c}function Ke(t,e,i){const n=i.padding;let o,s,a,r,l=e.x,c=e.y;for(o=0,s=t.length;o\u003Cs;++o)a=t[o],r=a.box,a.horizontal?(r.left=r.fullSize?n.left:e.left,r.right=r.fullSize?i.outerWidth-n.right:e.left+e.w,r.top=c,r.bottom=c+r.height,r.width=r.right-r.left,c=r.bottom):(r.left=l,r.right=l+r.width,r.top=r.fullSize?n.top:e.top,r.bottom=r.fullSize?i.outerHeight-n.right:e.top+e.h,r.height=r.bottom-r.top,l=r.right);e.x=l,e.y=c}xt.set(\"layout\",{padding:{top:0,right:0,bottom:0,left:0}});var Ge={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||\"top\",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,n){if(!t)return;const o=ze(t.options.layout.padding),s=e-o.width,a=i-o.height,r=function(t){const e=function(t){const e=[];let i,n,o;for(i=0,n=(t||[]).length;i\u003Cn;++i)o=t[i],e.push({index:i,box:o,pos:o.position,horizontal:o.isHorizontal(),weight:o.weight});return e}(t),i=je(e.filter((t=>t.box.fullSize)),!0),n=je(He(e,\"left\"),!0),o=je(He(e,\"right\")),s=je(He(e,\"top\"),!0),a=je(He(e,\"bottom\")),r=Ne(e,\"x\"),l=Ne(e,\"y\");return{fullSize:i,leftAndTop:n.concat(s),rightAndBottom:o.concat(l).concat(a).concat(r),chartArea:He(e,\"chartArea\"),vertical:n.concat(o).concat(l),horizontal:s.concat(a).concat(r)}}(t.boxes),l=r.vertical,c=r.horizontal;J(t.boxes,(t=>{\"function\"==typeof t.beforeLayout&&t.beforeLayout()}));const h=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:o,availableWidth:s,availableHeight:a,vBoxMaxWidth:s\u002F2\u002Fh,hBoxMaxHeight:a\u002F2}),u=Object.assign({},o);Ye(u,ze(n));const f=Object.assign({maxPadding:u,w:s,h:a,x:o.left,y:o.top},o);!function(t,e){let i,n,o;for(i=0,n=t.length;i\u003Cn;++i)o=t[i],o.horizontal?(o.width=o.box.fullSize&&e.availableWidth,o.height=e.hBoxMaxHeight):(o.width=e.vBoxMaxWidth,o.height=o.box.fullSize&&e.availableHeight)}(l.concat(c),d),qe(r.fullSize,f,d),qe(l,f,d),qe(c,f,d)&&qe(l,f,d),function(t){const e=t.maxPadding;function i(i){const n=Math.max(e[i]-t[i],0);return t[i]+=n,n}t.y+=i(\"top\"),t.x+=i(\"left\"),i(\"right\"),i(\"bottom\")}(f),Ke(r.leftAndTop,f,d),f.x+=f.w,f.y+=f.h,Ke(r.rightAndBottom,f,d),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},J(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h)}))}};class Ze{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e\u002Fn):i)}}isAttached(t){return!0}}class Qe extends Ze{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}}const Je={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},ti=t=>null===t||\"\"===t;const ei=!!ve&&{passive:!0};function ii(t,e,i){t.canvas.removeEventListener(e,i,ei)}function ni(t,e,i){const n=t.canvas,o=n&&de(n)||n,s=new MutationObserver((t=>{const e=de(o);t.forEach((t=>{for(let n=0;n\u003Ct.addedNodes.length;n++){const s=t.addedNodes[n];s!==o&&s!==e||i(t.target)}}))}));return s.observe(document,{childList:!0,subtree:!0}),s}function oi(t,e,i){const n=t.canvas,o=n&&de(n);if(!o)return;const s=new MutationObserver((t=>{t.forEach((t=>{for(let e=0;e\u003Ct.removedNodes.length;e++)if(t.removedNodes[e]===n){i();break}}))}));return s.observe(o,{childList:!0}),s}const si=new Map;let ai=0;function ri(){const t=window.devicePixelRatio;t!==ai&&(ai=t,si.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function li(t,i,n){const o=t.canvas,s=o&&de(o);if(!s)return;const a=e(((t,e)=>{const i=s.clientWidth;n(t,e),i\u003Cs.clientWidth&&n()}),window),r=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,n=e.contentRect.height;0===i&&0===n||a(i,n)}));return r.observe(s),function(t,e){si.size||window.addEventListener(\"resize\",ri),si.set(t,e)}(t,a),r}function ci(t,e,i){i&&i.disconnect(),\"resize\"===e&&function(t){si.delete(t),si.size||window.removeEventListener(\"resize\",ri)}(t)}function hi(t,i,n){const o=t.canvas,s=e((e=>{null!==t.ctx&&n(function(t,e){const i=Je[t.type]||t.type,{x:n,y:o}=xe(t,e);return{type:i,chart:e,native:t,x:void 0!==n?n:null,y:void 0!==o?o:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,ei)}(o,i,s),s}class di extends Ze{acquireContext(t,e){const i=t&&t.getContext&&t.getContext(\"2d\");return i&&i.canvas===t?(function(t,e){const i=t.style,n=t.getAttribute(\"height\"),o=t.getAttribute(\"width\");if(t.$chartjs={initial:{height:n,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||\"block\",i.boxSizing=i.boxSizing||\"border-box\",ti(o)){const e=we(t,\"width\");void 0!==e&&(t.width=e)}if(ti(n))if(\"\"===t.style.height)t.height=t.width\u002F(e||2);else{const e=we(t,\"height\");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;[\"height\",\"width\"].forEach((t=>{const n=i[t];$(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),o={attach:ni,detach:oi,resize:li}[e]||hi;n[e]=o(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:ci,detach:ci,resize:ci}[e]||ii)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return _e(t,e,i,n)}isAttached(t){const e=de(t);return!(!e||!de(e))}}var ui=Object.freeze({__proto__:null,BasePlatform:Ze,BasicPlatform:Qe,DomPlatform:di});const fi=t=>0===t||1===t,gi=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*_t\u002Fi),pi=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*_t\u002Fi)+1,mi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t\u002F=.5)\u003C1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t\u002F=.5)\u003C1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*Mt),easeOutSine:t=>Math.sin(t*Mt),easeInOutSine:t=>-.5*(Math.cos(bt*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>fi(t)?t:t\u003C.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t\u002F=.5)\u003C1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>fi(t)?t:gi(t,.075,.3),easeOutElastic:t=>fi(t)?t:pi(t,.075,.3),easeInOutElastic(t){const e=.1125;return fi(t)?t:t\u003C.5?.5*gi(2*t,e,.45):.5+.5*pi(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t\u002F=.5)\u003C1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-mi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t\u003C1\u002Fi?e*t*t:t\u003C2\u002Fi?e*(t-=1.5\u002Fi)*t+.75:t\u003C2.5\u002Fi?e*(t-=2.25\u002Fi)*t+.9375:e*(t-=2.625\u002Fi)*t+.984375},easeInOutBounce:t=>t\u003C.5?.5*mi.easeInBounce(2*t):.5*mi.easeOutBounce(2*t-1)+.5},xi=\"transparent\",bi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const n=W(t||xi),o=n.valid&&W(e||xi);return o&&o.valid?o.mix(n,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class _i{constructor(t,e,i,n){const o=e[i];n=Ve([t.to,n,o,t.from]);const s=Ve([t.from,o,n]);this._active=!0,this._fn=t.fn||bi[t.type||typeof s],this._easing=mi[t.easing]||mi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=s,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){const n=this;if(n._active){n._notify(!1);const o=n._target[n._prop],s=i-n._start,a=n._duration-s;n._start=i,n._duration=Math.floor(Math.max(a,t.duration)),n._total+=s,n._loop=!!t.loop,n._to=Ve([t.to,e,o,t.from]),n._from=Ve([t.from,o,e])}}cancel(){const t=this;t._active&&(t.tick(Date.now()),t._active=!1,t._notify(!1))}tick(t){const e=this,i=t-e._start,n=e._duration,o=e._prop,s=e._from,a=e._loop,r=e._to;let l;if(e._active=s!==r&&(a||i\u003Cn),!e._active)return e._target[o]=r,void e._notify(!0);i\u003C0?e._target[o]=s:(l=i\u002Fn%2,l=a&&l>1?2-l:l,l=e._easing(Math.min(1,Math.max(0,l))),e._target[o]=e._fn(s,r,l))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?\"res\":\"rej\",i=this._promises||[];for(let t=0;t\u003Ci.length;t++)i[t][e]()}}xt.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const yi=Object.keys(xt.animation);xt.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>\"onProgress\"!==t&&\"onComplete\"!==t&&\"fn\"!==t}),xt.set(\"animations\",{colors:{type:\"color\",properties:[\"color\",\"borderColor\",\"backgroundColor\"]},numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"]}}),xt.describe(\"animations\",{_fallback:\"animation\"}),xt.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>0|t}}}});class vi{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!U(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const n=t[i];if(!U(n))return;const o={};for(const t of yi)o[t]=n[t];(Y(n.properties)&&n.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,n=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!n)return[];const o=this._createAnimations(n,i);return i.$shared&&function(t,e){const i=[],n=Object.keys(e);for(let e=0;e\u003Cn.length;e++){const o=t[n[e]];o&&o.active()&&i.push(o.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),o}_createAnimations(t,e){const i=this._properties,n=[],o=t.$animations||(t.$animations={}),s=Object.keys(e),a=Date.now();let r;for(r=s.length-1;r>=0;--r){const l=s[r];if(\"$\"===l.charAt(0))continue;if(\"options\"===l){n.push(...this._animateOptions(t,e));continue}const c=e[l];let h=o[l];const d=i.get(l);if(h){if(d&&h.active()){h.update(d,c,a);continue}h.cancel()}d&&d.duration?(o[l]=h=new _i(d,t,l,c),n.push(h)):t[l]=c}return n}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function wi(t,e){const i=t&&t.options||{},n=i.reverse,o=void 0===i.min?e:0,s=void 0===i.max?e:0;return{start:n?s:o,end:n?o:s}}function Mi(t,e){const i=[],n=t._getSortedDatasetMetas(e);let o,s;for(o=0,s=n.length;o\u003Cs;++o)i.push(n[o].index);return i}function ki(t,e,i,n){const o=t.keys,s=\"single\"===n.mode;let a,r,l,c;if(null!==e){for(a=0,r=o.length;a\u003Cr;++a){if(l=+o[a],l===i){if(n.all)continue;break}c=t.values[l],X(c)&&(s||0===e||Dt(e)===Dt(c))&&(e+=c)}return e}}function Si(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function Pi(t,e,i){const n=t[e]||(t[e]={});return n[i]||(n[i]={})}function Di(t,e,i){for(const n of e.getMatchingVisibleMetas(\"bar\").reverse()){const e=t[n.index];if(i&&e>0||!i&&e\u003C0)return n.index}return null}function Ci(t,e){const{chart:i,_cachedMeta:n}=t,o=i._stacks||(i._stacks={}),{iScale:s,vScale:a,index:r}=n,l=s.axis,c=a.axis,h=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(s,a,n),d=e.length;let u;for(let t=0;t\u003Cd;++t){const i=e[t],{[l]:n,[c]:s}=i;u=(i._stacks||(i._stacks={}))[c]=Pi(o,h,n),u[r]=s,u._top=Di(u,a,!0),u._bottom=Di(u,a,!1)}}function Oi(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ai(t,e){e=e||t._parsed;for(const i of e){const e=i._stacks;if(!e||void 0===e[t.vScale.id]||void 0===e[t.vScale.id][t.index])return;delete e[t.vScale.id][t.index]}}const Ti=t=>\"reset\"===t||\"none\"===t,Ri=(t,e)=>e?t:Object.assign({},t);class Li{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.$context=void 0,this.initialize()}initialize(){const t=this,e=t._cachedMeta;t.configure(),t.linkScales(),e._stacked=Si(e.vScale,e),t.addElements()}updateIndex(t){this.index=t}linkScales(){const t=this,e=t.chart,i=t._cachedMeta,n=t.getDataset(),o=(t,e,i,n)=>\"x\"===t?e:\"r\"===t?n:i,s=i.xAxisID=K(n.xAxisID,Oi(e,\"x\")),a=i.yAxisID=K(n.yAxisID,Oi(e,\"y\")),r=i.rAxisID=K(n.rAxisID,Oi(e,\"r\")),l=i.indexAxis,c=i.iAxisID=o(l,s,a,r),h=i.vAxisID=o(l,a,s,r);i.xScale=t.getScaleForId(s),i.yScale=t.getScaleForId(a),i.rScale=t.getScaleForId(r),i.iScale=t.getScaleForId(c),i.vScale=t.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){const t=this._cachedMeta;this._data&&ce(this._data,this),t._stacked&&Ai(t)}_dataCheck(){const t=this,e=t.getDataset(),i=e.data||(e.data=[]);U(i)?t._data=function(t){const e=Object.keys(t),i=new Array(e.length);let n,o,s;for(n=0,o=e.length;n\u003Co;++n)s=e[n],i[n]={x:s,y:t[s]};return i}(i):t._data!==i&&(t._data&&(ce(t._data,t),Ai(t._cachedMeta)),i&&Object.isExtensible(i)&&le(i,t),t._data=i)}addElements(){const t=this,e=t._cachedMeta;t._dataCheck(),t.datasetElementType&&(e.dataset=new t.datasetElementType)}buildOrUpdateElements(t){const e=this,i=e._cachedMeta,n=e.getDataset();let o=!1;e._dataCheck(),i._stacked=Si(i.vScale,i),i.stack!==n.stack&&(o=!0,Ai(i),i.stack=n.stack),e._resyncElements(t),o&&Ci(e,i._parsed)}configure(){const t=this,e=t.chart.config,i=e.datasetScopeKeys(t._type),n=e.getOptionScopes(t.getDataset(),i,!0);t.options=e.createResolver(n,t.getContext()),t._parsing=t.options.parsing}parse(t,e){const i=this,{_cachedMeta:n,_data:o}=i,{iScale:s,_stacked:a}=n,r=s.axis;let l,c,h,d=0===t&&e===o.length||n._sorted,u=t>0&&n._parsed[t-1];if(!1===i._parsing)n._parsed=o,n._sorted=!0,h=o;else{h=Y(o[t])?i.parseArrayData(n,o,t,e):U(o[t])?i.parseObjectData(n,o,t,e):i.parsePrimitiveData(n,o,t,e);const s=()=>null===c[r]||u&&c[r]\u003Cu[r];for(l=0;l\u003Ce;++l)n._parsed[l+t]=c=h[l],d&&(s()&&(d=!1),u=c);n._sorted=d}a&&Ci(i,h)}parsePrimitiveData(t,e,i,n){const{iScale:o,vScale:s}=t,a=o.axis,r=s.axis,l=o.getLabels(),c=o===s,h=new Array(n);let d,u,f;for(d=0,u=n;d\u003Cu;++d)f=d+i,h[d]={[a]:c||o.parse(l[f],f),[r]:s.parse(e[f],f)};return h}parseArrayData(t,e,i,n){const{xScale:o,yScale:s}=t,a=new Array(n);let r,l,c,h;for(r=0,l=n;r\u003Cl;++r)c=r+i,h=e[c],a[r]={x:o.parse(h[0],c),y:s.parse(h[1],c)};return a}parseObjectData(t,e,i,n){const{xScale:o,yScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=new Array(n);let c,h,d,u;for(c=0,h=n;c\u003Ch;++c)d=c+i,u=e[d],l[c]={x:o.parse(lt(u,a),d),y:s.parse(lt(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const n=this.chart,o=this._cachedMeta,s=e[t.axis];return ki({keys:Mi(n,!0),values:e._stacks[t.axis]},s,o.index,{mode:i})}updateRangeFromParsed(t,e,i,n){const o=i[e.axis];let s=null===o?NaN:o;const a=n&&i._stacks[e.axis];n&&a&&(n.values=a,t.min=Math.min(t.min,s),t.max=Math.max(t.max,s),s=ki(n,o,this._cachedMeta.index,{all:!0})),t.min=Math.min(t.min,s),t.max=Math.max(t.max,s)}getMinMax(t,e){const i=this,n=i._cachedMeta,o=n._parsed,s=n._sorted&&t===n.iScale,a=o.length,r=i._getOtherScale(t),l=e&&n._stacked&&{keys:Mi(i.chart,!0),values:null},c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:d}=function(t){const{min:e,max:i,minDefined:n,maxDefined:o}=t.getUserBounds();return{min:n?e:Number.NEGATIVE_INFINITY,max:o?i:Number.POSITIVE_INFINITY}}(r);let u,f,g,p;function m(){return g=o[u],f=g[t.axis],p=g[r.axis],!X(f)||h>p||d\u003Cp}for(u=0;u\u003Ca&&(m()||(i.updateRangeFromParsed(c,t,g,l),!s));++u);if(s)for(u=a-1;u>=0;--u)if(!m()){i.updateRangeFromParsed(c,t,g,l);break}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let n,o,s;for(n=0,o=e.length;n\u003Co;++n)s=e[n][t.axis],X(s)&&i.push(s);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,n=e.vScale,o=this.getParsed(t);return{label:i?\"\"+i.getLabelForValue(o[i.axis]):\"\",value:n?\"\"+n.getLabelForValue(o[n.axis]):\"\"}}_update(t){const e=this,i=e._cachedMeta;e.configure(),e._cachedDataOpts={},e.update(t||\"default\"),i._clip=function(t){let e,i,n,o;return U(t)?(e=t.top,i=t.right,n=t.bottom,o=t.left):e=i=n=o=t,{top:e,right:i,bottom:n,left:o}}(K(e.options.clip,function(t,e,i){if(!1===i)return!1;const n=wi(t,i),o=wi(e,i);return{top:o.end,right:n.end,bottom:o.start,left:n.start}}(i.xScale,i.yScale,e.getMaxOverflow())))}update(t){}draw(){const t=this,e=t._ctx,i=t.chart,n=t._cachedMeta,o=n.data||[],s=i.chartArea,a=[],r=t._drawStart||0,l=t._drawCount||o.length-r;let c;for(n.dataset&&n.dataset.draw(e,s,r,l),c=r;c\u003Cr+l;++c){const t=o[c];t.active?a.push(t):t.draw(e,s)}for(c=0;c\u003Ca.length;++c)a[c].draw(e,s)}getStyle(t,e){const i=e?\"active\":\"default\";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const n=this,o=n.getDataset();let s;if(t>=0&&t\u003Cn._cachedMeta.data.length){const e=n._cachedMeta.data[t];s=e.$context||(e.$context=function(t,e,i){return Object.assign(Object.create(t),{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:\"default\",type:\"data\"})}(n.getContext(),t,e)),s.parsed=n.getParsed(t),s.raw=o.data[t]}else s=n.$context||(n.$context=function(t,e){return Object.assign(Object.create(t),{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:\"default\",type:\"dataset\"})}(n.chart.getContext(),n.index)),s.dataset=o;return s.active=!!e,s.mode=i,s}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",i){const n=this,o=\"active\"===e,s=n._cachedDataOpts,a=t+\"-\"+e,r=s[a],l=n.enableOptionSharing&&ht(i);if(r)return Ri(r,l);const c=n.chart.config,h=c.datasetElementScopeKeys(n._type,t),d=o?[t+\"Hover\",\"hover\",t,\"\"]:[t,\"\"],u=c.getOptionScopes(n.getDataset(),h),f=Object.keys(xt.elements[t]),g=c.resolveNamedOptions(u,f,(()=>n.getContext(i,o)),d);return g.$shared&&(g.$shared=l,s[a]=Object.freeze(Ri(g,l))),g}_resolveAnimations(t,e,i){const n=this,o=n.chart,s=n._cachedDataOpts,a=\"animation-\"+e,r=s[a];if(r)return r;let l;if(!1!==o.options.animation){const o=n.chart.config,s=o.datasetAnimationScopeKeys(n._type,e),a=o.getOptionScopes(n.getDataset(),s);l=o.createResolver(a,n.getContext(t,i,e))}const c=new vi(o,l&&l.animations);return l&&l._cacheable&&(s[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ti(t)||this.chart._animationsDisabled}updateElement(t,e,i,n){Ti(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!Ti(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){const e=this,i=e._cachedMeta.data.length,n=e._data.length;n>i?e._insertElements(i,n-i,t):n\u003Ci&&e._removeElements(n,i-n);const o=Math.min(n,i);o&&e.parse(0,o)}_insertElements(t,e,i=!0){const n=this,o=n._cachedMeta,s=o.data,a=t+e;let r;const l=t=>{for(t.length+=e,r=t.length-1;r>=a;r--)t[r]=t[r-e]};for(l(s),r=t;r\u003Ca;++r)s[r]=new n.dataElementType;n._parsing&&l(o._parsed),n.parse(t,e),i&&n.updateElements(s,t,e,\"reset\")}updateElements(t,e,i,n){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const n=i._parsed.splice(t,e);i._stacked&&Ai(i,n)}i.data.splice(t,e)}_onDataPush(){const t=arguments.length;this._insertElements(this.getDataset().data.length-t,t)}_onDataPop(){this._removeElements(this._cachedMeta.data.length-1,1)}_onDataShift(){this._removeElements(0,1)}_onDataSplice(t,e){this._removeElements(t,e),this._insertElements(t,arguments.length-2)}_onDataUnshift(){this._insertElements(0,arguments.length)}}Li.defaults={},Li.prototype.datasetElementType=null,Li.prototype.dataElementType=null;class Ei{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}hasValue(){return At(this.x)&&At(this.y)}getProps(t,e){const i=this,n=this.$animations;if(!e||!n)return i;const o={};return t.forEach((t=>{o[t]=n[t]&&n[t].active()?n[t]._to:i[t]})),o}}Ei.defaults={},Ei.defaultRoutes=void 0;const Ii=new Map;function zi(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let n=Ii.get(i);return n||(n=new Intl.NumberFormat(t,e),Ii.set(i,n)),n}(e,i).format(t)}const Fi={values:t=>Y(t)?t:\"\"+t,numeric(t,e,i){if(0===t)return\"0\";const n=this.chart.options.locale;let o,s=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e\u003C1e-4||e>1e15)&&(o=\"scientific\"),s=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Pt(Math.abs(s)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:o,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),zi(t,n,l)},logarithmic(t,e,i){if(0===t)return\"0\";const n=t\u002FMath.pow(10,Math.floor(Pt(t)));return 1===n||2===n||5===n?Fi.numeric.call(this,t,e,i):\"\"}};var Vi={formatters:Fi};function Bi(t,e){const i=t.options.ticks,n=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),n=t._length\u002Fi+(e?0:1),o=t._maxLength\u002Fi;return Math.floor(Math.min(n,o))}(t),o=i.major.enabled?function(t){const e=[];let i,n;for(i=0,n=t.length;i\u003Cn;i++)t[i].major&&e.push(i);return e}(e):[],s=o.length,a=o[0],r=o[s-1],l=[];if(s>n)return function(t,e,i,n){let o,s=0,a=i[0];for(n=Math.ceil(n),o=0;o\u003Ct.length;o++)o===a&&(e.push(t[o]),s++,a=i[s*n])}(e,l,o,s\u002Fn),l;const c=function(t,e,i){const n=function(t){const e=t.length;let i,n;if(e\u003C2)return!1;for(n=t[0],i=1;i\u003Ce;++i)if(t[i]-t[i-1]!==n)return!1;return n}(t),o=e.length\u002Fi;if(!n)return Math.max(o,1);const s=Ot(n);for(let t=0,e=s.length-1;t\u003Ce;t++){const e=s[t];if(e>o)return e}return Math.max(o,1)}(o,e,n);if(s>0){let t,i;const n=s>1?Math.round((r-a)\u002F(s-1)):null;for(Wi(e,l,c,$(n)?0:a-n,a),t=0,i=s-1;t\u003Ci;t++)Wi(e,l,c,o[t],o[t+1]);return Wi(e,l,c,r,$(n)?e.length:r+n),l}return Wi(e,l,c),l}function Wi(t,e,i,n,o){const s=K(n,0),a=Math.min(K(o,t.length),t.length);let r,l,c,h=0;for(i=Math.ceil(i),o&&(r=o-n,i=r\u002FMath.floor(r\u002Fi)),c=s;c\u003C0;)h++,c=Math.round(s+h*i);for(l=Math.max(s,0);l\u003Ca;l++)l===c&&(e.push(t[l]),h++,c=Math.round(s+h*i))}xt.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Vi.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),xt.route(\"scale.ticks\",\"color\",\"\",\"color\"),xt.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),xt.route(\"scale.grid\",\"borderColor\",\"\",\"borderColor\"),xt.route(\"scale.title\",\"color\",\"\",\"color\"),xt.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&\"callback\"!==t&&\"parser\"!==t,_indexable:t=>\"borderDash\"!==t&&\"tickBorderDash\"!==t}),xt.describe(\"scales\",{_fallback:\"scale\"});const Hi=(t,e,i)=>\"top\"===e||\"left\"===e?t[e]+i:t[e]-i;function Ni(t,e){const i=[],n=t.length\u002Fe,o=t.length;let s=0;for(;s\u003Co;s+=n)i.push(t[Math.floor(s)]);return i}function ji(t,e,i){const n=t.ticks.length,o=Math.min(e,n-1),s=t._startPixel,a=t._endPixel,r=1e-6;let l,c=t.getPixelForTick(o);if(!(i&&(l=1===n?Math.max(c-s,a-c):0===e?(t.getPixelForTick(1)-c)\u002F2:(c-t.getPixelForTick(o-1))\u002F2,c+=o\u003Ce?l:-l,c\u003Cs-r||c>a+r)))return c}function $i(t){return t.drawTicks?t.tickLength:0}function Yi(t,e){if(!t.display)return 0;const i=Fe(t.font,e),n=ze(t.padding);return(Y(t.text)?t.text.length:1)*i.lineHeight+n.height}function Ui(t,e,i){let o=n(t);return(i&&\"right\"!==e||!i&&\"right\"===e)&&(o=(t=>\"left\"===t?\"right\":\"right\"===t?\"left\":t)(o)),o}class Xi extends Ei{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){const e=this;e.options=t.setContext(e.getContext()),e.axis=t.axis,e._userMin=e.parse(t.min),e._userMax=e.parse(t.max),e._suggestedMin=e.parse(t.suggestedMin),e._suggestedMax=e.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:n}=this;return t=q(t,Number.POSITIVE_INFINITY),e=q(e,Number.NEGATIVE_INFINITY),i=q(i,Number.POSITIVE_INFINITY),n=q(n,Number.NEGATIVE_INFINITY),{min:q(t,i),max:q(e,n),minDefined:X(t),maxDefined:X(e)}}getMinMax(t){const e=this;let i,{min:n,max:o,minDefined:s,maxDefined:a}=e.getUserBounds();if(s&&a)return{min:n,max:o};const r=e.getMatchingVisibleMetas();for(let l=0,c=r.length;l\u003Cc;++l)i=r[l].controller.getMinMax(e,t),s||(n=Math.min(n,i.min)),a||(o=Math.max(o,i.max));return{min:q(n,q(o,n)),max:q(o,q(n,o))}}getPadding(){const t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Q(this.options.beforeUpdate,[this])}update(t,e,i){const n=this,o=n.options.ticks,s=o.sampleSize;n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),n.ticks=null,n._labelSizes=null,n._gridLineItems=null,n._labelItems=null,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n._maxLength=n.isHorizontal()?n.width+i.left+i.right:n.height+i.top+i.bottom,n._dataLimitsCached||(n.beforeDataLimits(),n.determineDataLimits(),n.afterDataLimits(),n._range=Be(n,n.options.grace),n._dataLimitsCached=!0),n.beforeBuildTicks(),n.ticks=n.buildTicks()||[],n.afterBuildTicks();const a=s\u003Cn.ticks.length;n._convertTicksToLabels(a?Ni(n.ticks,s):n.ticks),n.configure(),n.beforeCalculateLabelRotation(),n.calculateLabelRotation(),n.afterCalculateLabelRotation(),o.display&&(o.autoSkip||\"auto\"===o.source)&&(n.ticks=Bi(n,n.ticks),n._labelSizes=null),a&&n._convertTicksToLabels(n.ticks),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate()}configure(){const t=this;let e,i,n=t.options.reverse;t.isHorizontal()?(e=t.left,i=t.right):(e=t.top,i=t.bottom,n=!n),t._startPixel=e,t._endPixel=i,t._reversePixels=n,t._length=i-e,t._alignToPixels=t.options.alignToPixels}afterUpdate(){Q(this.options.afterUpdate,[this])}beforeSetDimensions(){Q(this.options.beforeSetDimensions,[this])}setDimensions(){const t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0}afterSetDimensions(){Q(this.options.afterSetDimensions,[this])}_callHooks(t){const e=this;e.chart.notifyPlugins(t,e.getContext()),Q(e.options[t],[e])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){Q(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this,i=e.options.ticks;let n,o,s;for(n=0,o=t.length;n\u003Co;n++)s=t[n],s.label=Q(i.callback,[s.value,n,t],e);for(n=0;n\u003Co;n++)$(t[n].label)&&(t.splice(n,1),o--,n--)}afterTickToLabelConversion(){Q(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){Q(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this,e=t.options,i=e.ticks,n=t.ticks.length,o=i.minRotation||0,s=i.maxRotation;let a,r,l,c=o;if(!t._isVisible()||!i.display||o>=s||n\u003C=1||!t.isHorizontal())return void(t.labelRotation=o);const h=t._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Nt(t.chart.width-d,0,t.maxWidth);a=e.offset?t.maxWidth\u002Fn:f\u002F(n-1),d+6>a&&(a=f\u002F(n-(e.offset?.5:1)),r=t.maxHeight-$i(e.grid)-i.padding-Yi(e.title,t.chart.options.font),l=Math.sqrt(d*d+u*u),c=It(Math.min(Math.asin(Math.min((h.highest.height+6)\u002Fa,1)),Math.asin(Math.min(r\u002Fl,1))-Math.asin(u\u002Fl))),c=Math.max(o,Math.min(s,c))),t.labelRotation=c}afterCalculateLabelRotation(){Q(this.options.afterCalculateLabelRotation,[this])}beforeFit(){Q(this.options.beforeFit,[this])}fit(){const t=this,e={width:0,height:0},{chart:i,options:{ticks:n,title:o,grid:s}}=t,a=t._isVisible(),r=t.isHorizontal();if(a){const a=Yi(o,i.options.font);if(r?(e.width=t.maxWidth,e.height=$i(s)+a):(e.height=t.maxHeight,e.width=$i(s)+a),n.display&&t.ticks.length){const{first:i,last:o,widest:s,highest:a}=t._getLabelSizes(),l=2*n.padding,c=Et(t.labelRotation),h=Math.cos(c),d=Math.sin(c);if(r){const i=n.mirror?0:d*s.width+h*a.height;e.height=Math.min(t.maxHeight,e.height+i+l)}else{const i=n.mirror?0:h*s.width+d*a.height;e.width=Math.min(t.maxWidth,e.width+i+l)}t._calculatePadding(i,o,d,h)}}t._handleMargins(),r?(t.width=t._length=i.width-t._margins.left-t._margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=i.height-t._margins.top-t._margins.bottom)}_calculatePadding(t,e,i,n){const o=this,{ticks:{align:s,padding:a},position:r}=o.options,l=0!==o.labelRotation,c=\"top\"!==r&&\"x\"===o.axis;if(o.isHorizontal()){const r=o.getPixelForTick(0)-o.left,h=o.right-o.getPixelForTick(o.ticks.length-1);let d=0,u=0;l?c?(d=n*t.width,u=i*e.height):(d=i*t.height,u=n*e.width):\"start\"===s?u=e.width:\"end\"===s?d=t.width:(d=t.width\u002F2,u=e.width\u002F2),o.paddingLeft=Math.max((d-r+a)*o.width\u002F(o.width-r),0),o.paddingRight=Math.max((u-h+a)*o.width\u002F(o.width-h),0)}else{let i=e.height\u002F2,n=t.height\u002F2;\"start\"===s?(i=0,n=t.height):\"end\"===s&&(i=e.height,n=0),o.paddingTop=i+a,o.paddingBottom=n+a}}_handleMargins(){const t=this;t._margins&&(t._margins.left=Math.max(t.paddingLeft,t._margins.left),t._margins.top=Math.max(t.paddingTop,t._margins.top),t._margins.right=Math.max(t.paddingRight,t._margins.right),t._margins.bottom=Math.max(t.paddingBottom,t._margins.bottom))}afterFit(){Q(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return\"top\"===e||\"bottom\"===e||\"x\"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){const e=this;e.beforeTickToLabelConversion(),e.generateTickLabels(t),e.afterTickToLabelConversion()}_getLabelSizes(){const t=this;let e=t._labelSizes;if(!e){const i=t.options.ticks.sampleSize;let n=t.ticks;i\u003Cn.length&&(n=Ni(n,i)),t._labelSizes=e=t._computeLabelSizes(n,n.length)}return e}_computeLabelSizes(t,e){const{ctx:i,_longestTextCache:n}=this,o=[],s=[];let a,r,l,c,h,d,u,f,g,p,m,x=0,b=0;for(a=0;a\u003Ce;++a){if(c=t[a].label,h=this._resolveTickFontOptions(a),i.font=d=h.string,u=n[d]=n[d]||{data:{},gc:[]},f=h.lineHeight,g=p=0,$(c)||Y(c)){if(Y(c))for(r=0,l=c.length;r\u003Cl;++r)m=c[r],$(m)||Y(m)||(g=Yt(i,u.data,u.gc,g,m),p+=f)}else g=Yt(i,u.data,u.gc,g,c),p=f;o.push(g),s.push(p),x=Math.max(g,x),b=Math.max(p,b)}!function(t,e){J(t,(t=>{const i=t.gc,n=i.length\u002F2;let o;if(n>e){for(o=0;o\u003Cn;++o)delete t.data[i[o]];i.splice(0,n)}}))}(n,e);const _=o.indexOf(x),y=s.indexOf(b),v=t=>({width:o[t]||0,height:s[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:o,heights:s}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){const e=this;e._reversePixels&&(t=1-t);const i=e._startPixel+t*e._length;return jt(e._alignToPixels?Xt(e.chart,i,0):i)}getDecimalForPixel(t){const e=(t-this._startPixel)\u002Fthis._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t\u003C0&&e\u003C0?e:t>0&&e>0?t:0}getContext(t){const e=this,i=e.ticks||[];if(t>=0&&t\u003Ci.length){const n=i[t];return n.$context||(n.$context=function(t,e,i){return Object.assign(Object.create(t),{tick:i,index:e,type:\"tick\"})}(e.getContext(),t,n))}return e.$context||(e.$context=(n=e.chart.getContext(),o=e,Object.assign(Object.create(n),{scale:o,type:\"scale\"})));var n,o}_tickSize(){const t=this,e=t.options.ticks,i=Et(t.labelRotation),n=Math.abs(Math.cos(i)),o=Math.abs(Math.sin(i)),s=t._getLabelSizes(),a=e.autoSkipPadding||0,r=s?s.widest.width+a:0,l=s?s.highest.height+a:0;return t.isHorizontal()?l*n>r*o?r\u002Fn:l\u002Fo:l*o\u003Cr*n?l\u002Fn:r\u002Fo}_isVisible(){const t=this.options.display;return\"auto\"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this,i=e.axis,n=e.chart,o=e.options,{grid:s,position:a}=o,r=s.offset,l=e.isHorizontal(),c=e.ticks.length+(r?1:0),h=$i(s),d=[],u=s.setContext(e.getContext()),f=u.drawBorder?u.borderWidth:0,g=f\u002F2,p=function(t){return Xt(n,t,f)};let m,x,b,_,y,v,w,M,k,S,P,D;if(\"top\"===a)m=p(e.bottom),v=e.bottom-h,M=m-g,S=p(t.top)+g,D=t.bottom;else if(\"bottom\"===a)m=p(e.top),S=t.top,D=p(t.bottom)-g,v=m+g,M=e.top+h;else if(\"left\"===a)m=p(e.right),y=e.right-h,w=m-g,k=p(t.left)+g,P=t.right;else if(\"right\"===a)m=p(e.left),k=t.left,P=p(t.right)-g,y=m+g,w=e.left+h;else if(\"x\"===i){if(\"center\"===a)m=p((t.top+t.bottom)\u002F2+.5);else if(U(a)){const t=Object.keys(a)[0],i=a[t];m=p(e.chart.scales[t].getPixelForValue(i))}S=t.top,D=t.bottom,v=m+g,M=v+h}else if(\"y\"===i){if(\"center\"===a)m=p((t.left+t.right)\u002F2);else if(U(a)){const t=Object.keys(a)[0],i=a[t];m=p(e.chart.scales[t].getPixelForValue(i))}y=m-g,w=y-h,k=t.left,P=t.right}for(x=0;x\u003Cc;++x){const t=s.setContext(e.getContext(x)),i=t.lineWidth,o=t.color,a=s.borderDash||[],c=t.borderDashOffset,h=t.tickWidth,u=t.tickColor,f=t.tickBorderDash||[],g=t.tickBorderDashOffset;b=ji(e,x,r),void 0!==b&&(_=Xt(n,b,i),l?y=w=k=P=_:v=M=S=D=_,d.push({tx1:y,ty1:v,tx2:w,ty2:M,x1:k,y1:S,x2:P,y2:D,width:i,color:o,borderDash:a,borderDashOffset:c,tickWidth:h,tickColor:u,tickBorderDash:f,tickBorderDashOffset:g}))}return e._ticksLength=c,e._borderValue=m,d}_computeLabelItems(t){const e=this,i=e.axis,n=e.options,{position:o,ticks:s}=n,a=e.isHorizontal(),r=e.ticks,{align:l,crossAlign:c,padding:h,mirror:d}=s,u=$i(n.grid),f=u+h,g=d?-h:f,p=-Et(e.labelRotation),m=[];let x,b,_,y,v,w,M,k,S,P,D,C,O=\"middle\";if(\"top\"===o)w=e.bottom-g,M=e._getXAxisLabelAlignment();else if(\"bottom\"===o)w=e.top+g,M=e._getXAxisLabelAlignment();else if(\"left\"===o){const t=e._getYAxisLabelAlignment(u);M=t.textAlign,v=t.x}else if(\"right\"===o){const t=e._getYAxisLabelAlignment(u);M=t.textAlign,v=t.x}else if(\"x\"===i){if(\"center\"===o)w=(t.top+t.bottom)\u002F2+f;else if(U(o)){const t=Object.keys(o)[0],i=o[t];w=e.chart.scales[t].getPixelForValue(i)+f}M=e._getXAxisLabelAlignment()}else if(\"y\"===i){if(\"center\"===o)v=(t.left+t.right)\u002F2-f;else if(U(o)){const t=Object.keys(o)[0],i=o[t];v=e.chart.scales[t].getPixelForValue(i)}M=e._getYAxisLabelAlignment(u).textAlign}\"y\"===i&&(\"start\"===l?O=\"top\":\"end\"===l&&(O=\"bottom\"));const A=e._getLabelSizes();for(x=0,b=r.length;x\u003Cb;++x){_=r[x],y=_.label;const t=s.setContext(e.getContext(x));k=e.getPixelForTick(x)+s.labelOffset,S=e._resolveTickFontOptions(x),P=S.lineHeight,D=Y(y)?y.length:1;const i=D\u002F2,n=t.color,l=t.textStrokeColor,h=t.textStrokeWidth;let u;if(a?(v=k,C=\"top\"===o?\"near\"===c||0!==p?-D*P+P\u002F2:\"center\"===c?-A.highest.height\u002F2-i*P+P:-A.highest.height+P\u002F2:\"near\"===c||0!==p?P\u002F2:\"center\"===c?A.highest.height\u002F2-i*P:A.highest.height-D*P,d&&(C*=-1)):(w=k,C=(1-D)*P\u002F2),t.showLabelBackdrop){const e=ze(t.backdropPadding),i=A.heights[x],n=A.widths[x];let o=w+C-e.top,s=v-e.left;switch(O){case\"middle\":o-=i\u002F2;break;case\"bottom\":o-=i}switch(M){case\"center\":s-=n\u002F2;break;case\"right\":s-=n}u={left:s,top:o,width:n+e.width,height:i+e.height,color:t.backdropColor}}m.push({rotation:p,label:y,font:S,color:n,strokeColor:l,strokeWidth:h,textOffset:C,textAlign:M,textBaseline:O,translation:[v,w],backdrop:u})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-Et(this.labelRotation))return\"top\"===t?\"left\":\"right\";let i=\"center\";return\"start\"===e.align?i=\"left\":\"end\"===e.align&&(i=\"right\"),i}_getYAxisLabelAlignment(t){const e=this,{position:i,ticks:{crossAlign:n,mirror:o,padding:s}}=e.options,a=t+s,r=e._getLabelSizes().widest.width;let l,c;return\"left\"===i?o?(l=\"left\",c=e.right+s):(c=e.right-a,\"near\"===n?l=\"right\":\"center\"===n?(l=\"center\",c-=r\u002F2):(l=\"left\",c=e.left)):\"right\"===i?o?(l=\"right\",c=e.left+s):(c=e.left+a,\"near\"===n?l=\"left\":\"center\"===n?(l=\"center\",c+=r\u002F2):(l=\"right\",c=e.right)):l=\"right\",{textAlign:l,x:c}}_computeLabelArea(){const t=this;if(t.options.ticks.mirror)return;const e=t.chart,i=t.options.position;return\"left\"===i||\"right\"===i?{top:0,left:t.left,bottom:e.height,right:t.right}:\"top\"===i||\"bottom\"===i?{top:t.top,left:0,bottom:t.bottom,right:e.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:n,width:o,height:s}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,n,o,s),t.restore())}getLineWidthForValue(t){const e=this,i=e.options.grid;if(!e._isVisible()||!i.display)return 0;const n=e.ticks.findIndex((e=>e.value===t));if(n>=0){return i.setContext(e.getContext(n)).lineWidth}return 0}drawGrid(t){const e=this,i=e.options.grid,n=e.ctx,o=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));let s,a;const r=(t,e,i)=>{i.width&&i.color&&(n.save(),n.lineWidth=i.width,n.strokeStyle=i.color,n.setLineDash(i.borderDash||[]),n.lineDashOffset=i.borderDashOffset,n.beginPath(),n.moveTo(t.x,t.y),n.lineTo(e.x,e.y),n.stroke(),n.restore())};if(i.display)for(s=0,a=o.length;s\u003Ca;++s){const t=o[s];i.drawOnChartArea&&r({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),i.drawTicks&&r({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const t=this,{chart:e,ctx:i,options:{grid:n}}=t,o=n.setContext(t.getContext()),s=n.drawBorder?o.borderWidth:0;if(!s)return;const a=n.setContext(t.getContext(0)).lineWidth,r=t._borderValue;let l,c,h,d;t.isHorizontal()?(l=Xt(e,t.left,s)-s\u002F2,c=Xt(e,t.right,a)+a\u002F2,h=d=r):(h=Xt(e,t.top,s)-s\u002F2,d=Xt(e,t.bottom,a)+a\u002F2,l=c=r),i.save(),i.lineWidth=o.borderWidth,i.strokeStyle=o.borderColor,i.beginPath(),i.moveTo(l,h),i.lineTo(c,d),i.stroke(),i.restore()}drawLabels(t){const e=this;if(!e.options.ticks.display)return;const i=e.ctx,n=e._computeLabelArea();n&&Zt(i,n);const o=e._labelItems||(e._labelItems=e._computeLabelItems(t));let s,a;for(s=0,a=o.length;s\u003Ca;++s){const t=o[s],e=t.font,n=t.label;t.backdrop&&(i.fillStyle=t.backdrop.color,i.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),ee(i,n,0,t.textOffset,e,t)}n&&Qt(i)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:n}}=this;if(!i.display)return;const s=Fe(i.font),a=ze(i.padding),r=i.align;let l=s.lineHeight\u002F2;\"bottom\"===e?(l+=a.bottom,Y(i.text)&&(l+=s.lineHeight*(i.text.length-1))):l+=a.top;const{titleX:c,titleY:h,maxWidth:d,rotation:u}=function(t,e,i,n){const{top:s,left:a,bottom:r,right:l}=t;let c,h,d,u=0;return t.isHorizontal()?(h=o(n,a,l),d=Hi(t,i,e),c=l-a):(h=Hi(t,i,e),d=o(n,r,s),u=\"left\"===i?-Mt:Mt),{titleX:h,titleY:d,maxWidth:c,rotation:u}}(this,l,e,r);ee(t,i.text,0,0,s,{color:i.color,maxWidth:d,rotation:u,textAlign:Ui(r,e,n),textBaseline:\"middle\",translation:[c,h]})}draw(t){const e=this;e._isVisible()&&(e.drawBackground(),e.drawGrid(t),e.drawBorder(),e.drawTitle(),e.drawLabels(t))}_layers(){const t=this,e=t.options,i=e.ticks&&e.ticks.z||0,n=e.grid&&e.grid.z||0;return t._isVisible()&&t.draw===Xi.prototype.draw?[{z:n,draw(e){t.drawBackground(),t.drawGrid(e),t.drawTitle()}},{z:n+1,draw(){t.drawBorder()}},{z:i,draw(e){t.drawLabels(e)}}]:[{z:i,draw(e){t.draw(e)}}]}getMatchingVisibleMetas(t){const e=this,i=e.chart.getSortedVisibleDatasetMetas(),n=e.axis+\"AxisID\",o=[];let s,a;for(s=0,a=i.length;s\u003Ca;++s){const a=i[s];a[n]!==e.id||t&&a.type!==t||o.push(a)}return o}_resolveTickFontOptions(t){return Fe(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this,e=t._resolveTickFontOptions(0).lineHeight;return t.isHorizontal()?t.width\u002Fe\u002F.7:t.height\u002Fe}}function qi(t,e=[\"\"],i=t,n,o=(()=>t[0])){ht(n)||(n=an(\"_fallback\",t));const s={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:n,_getTarget:o,override:o=>qi([o,...t],e,i,n)};return new Proxy(s,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,n)=>Ji(i,n,(()=>function(t,e,i,n){let o;for(const s of e)if(o=an(Zi(s,t),i),ht(o))return Qi(t,o)?on(i,n,t,o):o}(n,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>rn(t).includes(e),ownKeys:t=>rn(t),set:(t,e,i)=>((t._storage||(t._storage=o()))[e]=i,delete t[e],delete t._keys,!0)})}function Ki(t,e,i,n){const o={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Gi(t,n),setContext:e=>Ki(t,e,i,n),override:o=>Ki(t.override(o),e,i,n)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ji(t,e,(()=>function(t,e,i){const{_proxy:n,_context:o,_subProxy:s,_descriptors:a}=t;let r=n[e];dt(r)&&a.isScriptable(e)&&(r=function(t,e,i,n){const{_proxy:o,_context:s,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error(\"Recursion detected: \"+[...r].join(\"->\")+\"->\"+t);r.add(t),e=e(s,a||n),r.delete(t),U(e)&&(e=on(o._scopes,o,t,e));return e}(e,r,t,i));Y(r)&&r.length&&(r=function(t,e,i,n){const{_proxy:o,_context:s,_subProxy:a,_descriptors:r}=i;if(ht(s.index)&&n(t))e=e[s.index%e.length];else if(U(e[0])){const i=e,n=o._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=on(n,o,t,l);e.push(Ki(i,s,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Qi(e,r)&&(r=Ki(r,o,s&&s[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,n)=>(t[i]=n,delete e[i],!0)})}function Gi(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:n=e.indexable,_allKeys:o=e.allKeys}=t;return{allKeys:o,scriptable:i,indexable:n,isScriptable:dt(i)?i:()=>i,isIndexable:dt(n)?n:()=>n}}const Zi=(t,e)=>t?t+ct(e):e,Qi=(t,e)=>U(e)&&\"adapters\"!==t;function Ji(t,e,i){let n=t[e];return ht(n)||(n=i(),ht(n)&&(t[e]=n)),n}function tn(t,e,i){return dt(t)?t(e,i):t}const en=(t,e)=>!0===t?e:\"string\"==typeof t?lt(e,t):void 0;function nn(t,e,i,n){for(const o of e){const e=en(i,o);if(e){t.add(e);const o=tn(e._fallback,i,e);if(ht(o)&&o!==i&&o!==n)return o}else if(!1===e&&ht(n)&&i!==n)return null}return!1}function on(t,e,i,n){const o=e._rootScopes,s=tn(e._fallback,i,n),a=[...t,...o],r=new Set;r.add(n);let l=sn(r,a,i,s||i);return null!==l&&((!ht(s)||s===i||(l=sn(r,a,s,l),null!==l))&&qi([...r],[\"\"],o,s,(()=>{const t=e._getTarget();return i in t||(t[i]={}),t[i]})))}function sn(t,e,i,n){for(;i;)i=nn(t,e,i,n);return i}function an(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ht(e))return e}}function rn(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith(\"_\"))))e.add(t);return[...e]}(t._scopes)),e}const ln=Number.EPSILON||1e-14,cn=(t,e)=>e\u003Ct.length&&!t[e].skip&&t[e];function hn(t,e,i,n){const o=t.skip?e:t,s=e,a=i.skip?e:i,r=Vt(s,o),l=Vt(a,s);let c=r\u002F(r+l),h=l\u002F(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;const d=n*c,u=n*h;return{previous:{x:s.x-d*(a.x-o.x),y:s.y-d*(a.y-o.y)},next:{x:s.x+u*(a.x-o.x),y:s.y+u*(a.y-o.y)}}}function dn(t){const e=t.length,i=Array(e).fill(0),n=Array(e);let o,s,a,r=cn(t,0);for(o=0;o\u003Ce;++o)if(s=a,a=r,r=cn(t,o+1),a){if(r){const t=r.x-a.x;i[o]=0!==t?(r.y-a.y)\u002Ft:0}n[o]=s?r?Dt(i[o-1])!==Dt(i[o])?0:(i[o-1]+i[o])\u002F2:i[o-1]:i[o]}!function(t,e,i){const n=t.length;let o,s,a,r,l,c=cn(t,0);for(let h=0;h\u003Cn-1;++h)l=c,c=cn(t,h+1),l&&c&&(Tt(e[h],0,ln)?i[h]=i[h+1]=0:(o=i[h]\u002Fe[h],s=i[h+1]\u002Fe[h],r=Math.pow(o,2)+Math.pow(s,2),r\u003C=9||(a=3\u002FMath.sqrt(r),i[h]=o*a*e[h],i[h+1]=s*a*e[h])))}(t,i,n),function(t,e){const i=t.length;let n,o,s,a=cn(t,0);for(let r=0;r\u003Ci;++r){if(o=s,s=a,a=cn(t,r+1),!s)continue;const{x:i,y:l}=s;o&&(n=(i-o.x)\u002F3,s.cp1x=i-n,s.cp1y=l-n*e[r]),a&&(n=(a.x-i)\u002F3,s.cp2x=i+n,s.cp2y=l+n*e[r])}}(t,n)}function un(t,e,i){return Math.max(Math.min(t,i),e)}function fn(t,e,i,n){let o,s,a,r;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),\"monotone\"===e.cubicInterpolationMode)dn(t);else{let i=n?t[t.length-1]:t[0];for(o=0,s=t.length;o\u003Cs;++o)a=t[o],r=hn(i,a,t[Math.min(o+1,s-(n?0:1))%s],e.tension),a.cp1x=r.previous.x,a.cp1y=r.previous.y,a.cp2x=r.next.x,a.cp2y=r.next.y,i=a}e.capBezierPoints&&function(t,e){let i,n,o,s,a,r=Gt(t[0],e);for(i=0,n=t.length;i\u003Cn;++i)a=s,s=r,r=i\u003Cn-1&&Gt(t[i+1],e),s&&(o=t[i],a&&(o.cp1x=un(o.cp1x,e.left,e.right),o.cp1y=un(o.cp1y,e.top,e.bottom)),r&&(o.cp2x=un(o.cp2x,e.left,e.right),o.cp2y=un(o.cp2y,e.top,e.bottom)))}(t,i)}function gn(t,e,i,n){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pn(t,e,i,n){return{x:t.x+i*(e.x-t.x),y:\"middle\"===n?i\u003C.5?t.y:e.y:\"after\"===n?i\u003C1?t.y:e.y:i>0?e.y:t.y}}function mn(t,e,i,n){const o={x:t.cp2x,y:t.cp2y},s={x:e.cp1x,y:e.cp1y},a=gn(t,o,i),r=gn(o,s,i),l=gn(s,e,i),c=gn(a,r,i),h=gn(r,l,i);return gn(c,h,i)}function xn(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>\"center\"===t?t:\"right\"===t?\"left\":\"right\",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function bn(t,e){let i,n;\"ltr\"!==e&&\"rtl\"!==e||(i=t.canvas.style,n=[i.getPropertyValue(\"direction\"),i.getPropertyPriority(\"direction\")],i.setProperty(\"direction\",e,\"important\"),t.prevTextDirection=n)}function _n(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty(\"direction\",e[0],e[1]))}function yn(t){return\"angle\"===t?{between:Ht,compare:Bt,normalize:Wt}:{between:(t,e,i)=>t>=Math.min(e,i)&&t\u003C=Math.max(i,e),compare:(t,e)=>t-e,normalize:t=>t}}function vn({start:t,end:e,count:i,loop:n,style:o}){return{start:t%i,end:e%i,loop:n&&(e-t+1)%i==0,style:o}}function wn(t,e,i){if(!i)return[t];const{property:n,start:o,end:s}=i,a=e.length,{compare:r,between:l,normalize:c}=yn(n),{start:h,end:d,loop:u,style:f}=function(t,e,i){const{property:n,start:o,end:s}=i,{between:a,normalize:r}=yn(n),l=e.length;let c,h,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,c=0,h=l;c\u003Ch&&a(r(e[d%l][n]),o,s);++c)d--,u--;d%=l,u%=l}return u\u003Cd&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,x,b=!1,_=null;const y=()=>b||l(o,x,p)&&0!==r(o,x),v=()=>!b||0===r(s,p)||l(s,x,p);for(let t=h,i=h;t\u003C=d;++t)m=e[t%a],m.skip||(p=c(m[n]),b=l(p,o,s),null===_&&y()&&(_=0===r(p,o)?t:i),null!==_&&v()&&(g.push(vn({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p);return null!==_&&g.push(vn({start:_,end:d,loop:u,count:a,style:f})),g}function Mn(t,e){const i=[],n=t.segments;for(let o=0;o\u003Cn.length;o++){const s=wn(n[o],t.points,e);s.length&&i.push(...s)}return i}function kn(t,e){const i=t.points,n=t.options.spanGaps,o=i.length;if(!o)return[];const s=!!t._loop,{start:a,end:r}=function(t,e,i,n){let o=0,s=e-1;if(i&&!n)for(;o\u003Ce&&!t[o].skip;)o++;for(;o\u003Ce&&t[o].skip;)o++;for(o%=e,i&&(s+=o);s>o&&t[s%e].skip;)s--;return s%=e,{start:o,end:s}}(i,o,s,n);if(!0===n)return Sn([{start:a,end:r,loop:s}],i,e);return Sn(function(t,e,i,n){const o=t.length,s=[];let a,r=e,l=t[e];for(a=e+1;a\u003C=i;++a){const i=t[a%o];i.skip||i.stop?l.skip||(n=!1,s.push({start:e%o,end:(a-1)%o,loop:n}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&s.push({start:e%o,end:r%o,loop:n}),s}(i,a,r\u003Ca?r+o:r,!!t._fullLoop&&0===a&&r===o-1),i,e)}function Sn(t,e,i){return i&&i.setContext&&e?function(t,e,i){const n=e.length,o=[];let s=t[0].start,a=s;for(const r of t){let t,l,c=e[s%n];for(a=s+1;a\u003C=r.end;a++){const h=e[a%n];l=Pn(i.setContext({type:\"segment\",p0:c,p1:h})),Dn(l,t)&&(o.push({start:s,end:a-1,loop:r.loop,style:t}),t=l,s=a-1),c=h,t=l}s\u003Ca-1&&(o.push({start:s,end:a-1,loop:r.loop,style:l}),s=a-1)}return o}(t,e,i):t}function Pn(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Dn(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Cn=Object.freeze({__proto__:null,easingEffects:mi,color:W,getHoverColor:H,noop:N,uid:j,isNullOrUndef:$,isArray:Y,isObject:U,isFinite:X,finiteOrDefault:q,valueOrDefault:K,toPercentage:G,toDimension:Z,callback:Q,each:J,_elementsEqual:tt,clone:et,_merger:nt,merge:ot,mergeIf:st,_mergerIf:at,_deprecated:function(t,e,i,n){void 0!==e&&console.warn(t+': \"'+i+'\" is deprecated. Please use \"'+n+'\" instead')},resolveObjectKey:lt,_capitalize:ct,defined:ht,isFunction:dt,setsEqual:ut,toFontString:$t,_measureText:Yt,_longestText:Ut,_alignPixel:Xt,clearCanvas:qt,drawPoint:Kt,_isPointInArea:Gt,clipArea:Zt,unclipArea:Qt,_steppedLineTo:Jt,_bezierCurveTo:te,renderText:ee,addRoundedRectPath:ie,_lookup:ne,_lookupByKey:oe,_rlookupByKey:se,_filterBetween:ae,listenArrayEvents:le,unlistenArrayEvents:ce,_arrayUnique:he,_createResolver:qi,_attachContext:Ki,_descriptors:Gi,splineCurve:hn,splineCurveMonotone:dn,_updateBezierControlPoints:fn,_getParentNode:de,getStyle:ge,getRelativePosition:xe,getMaximumSize:_e,retinaScale:ye,supportsEventListenerOptions:ve,readUsedSize:we,fontString:function(t,e,i){return e+\" \"+t+\"px \"+i},requestAnimFrame:t,throttled:e,debounce:i,_toLeftRightCenter:n,_alignStartEnd:o,_textX:s,_pointInLine:gn,_steppedInterpolation:pn,_bezierInterpolation:mn,formatNumber:zi,toLineHeight:Re,_readValueToProps:Le,toTRBL:Ee,toTRBLCorners:Ie,toPadding:ze,toFont:Fe,resolve:Ve,_addGrace:Be,PI:bt,TAU:_t,PITAU:yt,INFINITY:vt,RAD_PER_DEG:wt,HALF_PI:Mt,QUARTER_PI:kt,TWO_THIRDS_PI:St,log10:Pt,sign:Dt,niceNum:Ct,_factorize:Ot,isNumber:At,almostEquals:Tt,almostWhole:Rt,_setMinAndMaxByKey:Lt,toRadians:Et,toDegrees:It,_decimalPlaces:zt,getAngleFromPoint:Ft,distanceBetweenPoints:Vt,_angleDiff:Bt,_normalizeAngle:Wt,_angleBetween:Ht,_limitValue:Nt,_int16Range:jt,getRtlAdapter:xn,overrideTextDirection:bn,restoreTextDirection:_n,_boundSegment:wn,_boundSegments:Mn,_computeSegments:kn});class On{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=this,i=Object.getPrototypeOf(t);let n;(function(t){return\"id\"in t&&\"defaults\"in t})(i)&&(n=e.register(i));const o=e.items,s=t.id,a=e.scope+\".\"+s;if(!s)throw new Error(\"class does not have id: \"+t);return s in o||(o[s]=t,function(t,e,i){const n=ot(Object.create(null),[i?xt.get(i):{},xt.get(e),t.defaults]);xt.set(e,n),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const n=i.split(\".\"),o=n.pop(),s=[t].concat(n).join(\".\"),a=e[i].split(\".\"),r=a.pop(),l=a.join(\".\");xt.route(s,o,l,r)}))}(e,t.defaultRoutes);t.descriptors&&xt.describe(e,t.descriptors)}(t,a,n),e.override&&xt.override(t.id,t.overrides)),a}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,n=this.scope;i in e&&delete e[i],n&&i in xt[n]&&(delete xt[n][i],this.override&&delete ft[i])}}var An=new class{constructor(){this.controllers=new On(Li,\"datasets\",!0),this.elements=new On(Ei,\"elements\"),this.plugins=new On(Object,\"plugins\"),this.scales=new On(Xi,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,i){const n=this;[...e].forEach((e=>{const o=i||n._getRegistryForType(e);i||o.isForType(e)||o===n.plugins&&e.id?n._exec(t,o,e):J(e,(e=>{const o=i||n._getRegistryForType(e);n._exec(t,o,e)}))}))}_exec(t,e,i){const n=ct(t);Q(i[\"before\"+n],[],i),e[t](i),Q(i[\"after\"+n],[],i)}_getRegistryForType(t){for(let e=0;e\u003Cthis._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const n=e.get(t);if(void 0===n)throw new Error('\"'+t+'\" is not a registered '+i+\".\");return n}};class Tn{constructor(){this._init=[]}notify(t,e,i,n){const o=this;\"beforeInit\"===e&&(o._init=o._createDescriptors(t,!0),o._notify(o._init,t,\"install\"));const s=n?o._descriptors(t).filter(n):o._descriptors(t),a=o._notify(s,t,e,i);return\"destroy\"===e&&(o._notify(s,t,\"stop\"),o._notify(o._init,t,\"uninstall\")),a}_notify(t,e,i,n){n=n||{};for(const o of t){const t=o.plugin;if(!1===Q(t[i],[e,n,o.options],t)&&n.cancelable)return!1}return!0}invalidate(){$(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,n=K(i.options&&i.options.plugins,{}),o=function(t){const e=[],i=Object.keys(An.plugins.items);for(let t=0;t\u003Ci.length;t++)e.push(An.getPlugin(i[t]));const n=t.plugins||[];for(let t=0;t\u003Cn.length;t++){const i=n[t];-1===e.indexOf(i)&&e.push(i)}return e}(i);return!1!==n||e?function(t,e,i,n){const o=[],s=t.getContext();for(let a=0;a\u003Ce.length;a++){const r=e[a],l=Rn(i[r.id],n);null!==l&&o.push({plugin:r,options:Ln(t.config,r,l,s)})}return o}(t,o,n,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,n=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(n(e,i),t,\"stop\"),this._notify(n(i,e),t,\"start\")}}function Rn(t,e){return e||!1!==t?!0===t?{}:t:null}function Ln(t,e,i,n){const o=t.pluginScopeKeys(e),s=t.getOptionScopes(i,o);return t.createResolver(s,n,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function En(t,e){const i=xt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||\"x\"}function In(t,e){return\"x\"===t||\"y\"===t?t:e.axis||(\"top\"===(i=e.position)||\"bottom\"===i?\"x\":\"left\"===i||\"right\"===i?\"y\":void 0)||t.charAt(0).toLowerCase();var i}function zn(t){const e=t.options||(t.options={});e.plugins=K(e.plugins,{}),e.scales=function(t,e){const i=ft[t.type]||{scales:{}},n=e.scales||{},o=En(t.type,e),s=Object.create(null),a=Object.create(null);return Object.keys(n).forEach((t=>{const e=n[t],r=In(t,e),l=function(t,e){return t===e?\"_index_\":\"_value_\"}(r,o),c=i.scales||{};s[r]=s[r]||t,a[t]=st(Object.create(null),[{axis:r},e,c[r],c[l]])})),t.data.datasets.forEach((i=>{const o=i.type||t.type,r=i.indexAxis||En(o,e),l=(ft[o]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return\"_index_\"===t?i=e:\"_value_\"===t&&(i=\"x\"===e?\"y\":\"x\"),i}(t,r),o=i[e+\"AxisID\"]||s[e]||e;a[o]=a[o]||Object.create(null),st(a[o],[{axis:e},n[o],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];st(e,[xt.scales[e.type],xt.scale])})),a}(t,e)}function Fn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Vn=new Map,Bn=new Set;function Wn(t,e){let i=Vn.get(t);return i||(i=e(),Vn.set(t,i),Bn.add(i)),i}const Hn=(t,e,i)=>{const n=lt(e,i);void 0!==n&&t.add(n)};class Nn{constructor(t){this._config=function(t){return(t=t||{}).data=Fn(t.data),zn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),zn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Wn(t,(()=>[[\"datasets.\"+t,\"\"]]))}datasetAnimationScopeKeys(t,e){return Wn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,\"transitions.\"+e],[\"datasets.\"+t,\"\"]]))}datasetElementScopeKeys(t,e){return Wn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,\"datasets.\"+t,\"elements.\"+e,\"\"]]))}pluginScopeKeys(t){const e=t.id;return Wn(`${this.type}-plugin-${e}`,(()=>[[\"plugins.\"+e,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let n=i.get(t);return n&&!e||(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){const{options:n,type:o}=this,s=this._cachedScopes(t,i),a=s.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Hn(r,t,e)))),e.forEach((t=>Hn(r,n,t))),e.forEach((t=>Hn(r,ft[o]||{},t))),e.forEach((t=>Hn(r,xt,t))),e.forEach((t=>Hn(r,gt,t)))}));const l=[...r];return Bn.has(e)&&s.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,ft[e]||{},xt.datasets[e]||{},{type:e},xt,gt]}resolveNamedOptions(t,e,i,n=[\"\"]){const o={$shared:!0},{resolver:s,subPrefixes:a}=jn(this._resolverCache,t,n);let r=s;if(function(t,e){const{isScriptable:i,isIndexable:n}=Gi(t);for(const o of e)if(i(o)&&dt(t[o])||n(o)&&Y(t[o]))return!0;return!1}(s,e)){o.$shared=!1;r=Ki(s,i=dt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)o[t]=r[t];return o}createResolver(t,e,i=[\"\"],n){const{resolver:o}=jn(this._resolverCache,t,i);return U(e)?Ki(o,e,void 0,n):o}}function jn(t,e,i){let n=t.get(e);n||(n=new Map,t.set(e,n));const o=i.join();let s=n.get(o);if(!s){s={resolver:qi(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes(\"hover\")))},n.set(o,s)}return s}const $n=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function Yn(t,e){return\"top\"===t||\"bottom\"===t||-1===$n.indexOf(t)&&\"x\"===e}function Un(t,e){return function(i,n){return i[t]===n[t]?i[e]-n[e]:i[t]-n[t]}}function Xn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins(\"afterRender\"),Q(i&&i.onComplete,[t],e)}function qn(t){const e=t.chart,i=e.options.animation;Q(i&&i.onProgress,[t],e)}function Kn(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document}function Gn(t){return Kn()&&\"string\"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Zn={},Qn=t=>{const e=Gn(t);return Object.values(Zn).filter((t=>t.canvas===e)).pop()};class Jn{constructor(t,e){const n=this;this.config=e=new Nn(e);const o=Gn(t),s=Qn(o);if(s)throw new Error(\"Canvas is already in use. Chart with ID '\"+s.id+\"' must be destroyed before the canvas can be reused.\");const r=e.createResolver(e.chartOptionScopes(),n.getContext());this.platform=n._initializePlatform(o,e);const l=n.platform.acquireContext(o,r.aspectRatio),c=l&&l.canvas,h=c&&c.height,d=c&&c.width;this.id=j(),this.ctx=l,this.canvas=c,this.width=d,this.height=h,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._sortedMetasets=[],this.scales={},this.scale=void 0,this._plugins=new Tn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((()=>this.update(\"resize\")),r.resizeDelay||0),Zn[n.id]=n,l&&c?(a.listen(n,\"complete\",Xn),a.listen(n,\"progress\",qn),n._initialize(),n.attached&&n.update()):console.error(\"Failed to create chart: can't acquire context from the given item\")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return $(t)?e&&o?o:n?i\u002Fn:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){const t=this;return t.notifyPlugins(\"beforeInit\"),t.options.responsive?t.resize():ye(t,t.options.devicePixelRatio),t.bindEvents(),t.notifyPlugins(\"afterInit\"),t}_initializePlatform(t,e){return e.platform?new e.platform:!Kn()||\"undefined\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?new Qe:new di}clear(){return qt(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this,n=i.options,o=i.canvas,s=n.maintainAspectRatio&&i.aspectRatio,a=i.platform.getMaximumSize(o,t,e,s),r=i.currentDevicePixelRatio,l=n.devicePixelRatio||i.platform.getDevicePixelRatio();i.width===a.width&&i.height===a.height&&r===l||(i.width=a.width,i.height=a.height,i._aspectRatio=i.aspectRatio,ye(i,l,!0),i.notifyPlugins(\"resize\",{size:a}),Q(n.onResize,[i,a],i),i.attached&&i._doResize()&&i.render())}ensureScalesHaveIDs(){J(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this,e=t.options,i=e.scales,n=t.scales,o=Object.keys(n).reduce(((t,e)=>(t[e]=!1,t)),{});let s=[];i&&(s=s.concat(Object.keys(i).map((t=>{const e=i[t],n=In(t,e),o=\"r\"===n,s=\"x\"===n;return{options:e,dposition:o?\"chartArea\":s?\"bottom\":\"left\",dtype:o?\"radialLinear\":s?\"category\":\"linear\"}})))),J(s,(i=>{const s=i.options,a=s.id,r=In(a,s),l=K(s.type,i.dtype);void 0!==s.position&&Yn(s.position,r)===Yn(i.dposition)||(s.position=i.dposition),o[a]=!0;let c=null;if(a in n&&n[a].type===l)c=n[a];else{c=new(An.getScale(l))({id:a,type:l,ctx:t.ctx,chart:t}),n[c.id]=c}c.init(s,e)})),J(o,((t,e)=>{t||delete n[e]})),J(n,(e=>{Ge.configure(t,e,e.options),Ge.addBox(t,e)}))}_updateMetasetIndex(t,e){const i=this._metasets,n=t.index;n!==e&&(i[n]=i[e],i[e]=t,t.index=e)}_updateMetasets(){const t=this,e=t._metasets,i=t.data.datasets.length,n=e.length;if(n>i){for(let e=i;e\u003Cn;++e)t._destroyDatasetMeta(e);e.splice(i,n-i)}t._sortedMetasets=e.slice(0).sort(Un(\"order\",\"index\"))}_removeUnreferencedMetasets(){const t=this,{_metasets:e,data:{datasets:i}}=t;e.length>i.length&&delete t._stacks,e.forEach(((e,n)=>{0===i.filter((t=>t===e._dataset)).length&&t._destroyDatasetMeta(n)}))}buildOrUpdateControllers(){const t=this,e=[],i=t.data.datasets;let n,o;for(t._removeUnreferencedMetasets(),n=0,o=i.length;n\u003Co;n++){const o=i[n];let s=t.getDatasetMeta(n);const a=o.type||t.config.type;if(s.type&&s.type!==a&&(t._destroyDatasetMeta(n),s=t.getDatasetMeta(n)),s.type=a,s.indexAxis=o.indexAxis||En(a,t.options),s.order=o.order||0,t._updateMetasetIndex(s,n),s.label=\"\"+o.label,s.visible=t.isDatasetVisible(n),s.controller)s.controller.updateIndex(n),s.controller.linkScales();else{const i=An.getController(a),{datasetElementType:o,dataElementType:r}=xt.datasets[a];Object.assign(i.prototype,{dataElementType:An.getElement(r),datasetElementType:o&&An.getElement(o)}),s.controller=new i(t,n),e.push(s.controller)}}return t._updateMetasets(),e}_resetElements(){const t=this;J(t.data.datasets,((e,i)=>{t.getDatasetMeta(i).controller.reset()}),t)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){const e=this,i=e.config;i.update(),e._options=i.createResolver(i.chartOptionScopes(),e.getContext()),J(e.scales,(t=>{Ge.removeBox(e,t)}));const n=e._animationsDisabled=!e.options.animation;e.ensureScalesHaveIDs(),e.buildOrUpdateScales();const o=new Set(Object.keys(e._listeners)),s=new Set(e.options.events);if(ut(o,s)||(e.unbindEvents(),e.bindEvents()),e._plugins.invalidate(),!1===e.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0}))return;const a=e.buildOrUpdateControllers();e.notifyPlugins(\"beforeElementsUpdate\");let r=0;for(let t=0,i=e.data.datasets.length;t\u003Ci;t++){const{controller:i}=e.getDatasetMeta(t),o=!n&&-1===a.indexOf(i);i.buildOrUpdateElements(o),r=Math.max(+i.getMaxOverflow(),r)}e._minPadding=r,e._updateLayout(r),n||J(a,(t=>{t.reset()})),e._updateDatasets(t),e.notifyPlugins(\"afterUpdate\",{mode:t}),e._layers.sort(Un(\"z\",\"_idx\")),e._lastEvent&&e._eventHandler(e._lastEvent,!0),e.render()}_updateLayout(t){const e=this;if(!1===e.notifyPlugins(\"beforeLayout\",{cancelable:!0}))return;Ge.update(e,e.width,e.height,t);const i=e.chartArea,n=i.width\u003C=0||i.height\u003C=0;e._layers=[],J(e.boxes,(t=>{n&&\"chartArea\"===t.position||(t.configure&&t.configure(),e._layers.push(...t._layers()))}),e),e._layers.forEach(((t,e)=>{t._idx=e})),e.notifyPlugins(\"afterLayout\")}_updateDatasets(t){const e=this,i=\"function\"==typeof t;if(!1!==e.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})){for(let n=0,o=e.data.datasets.length;n\u003Co;++n)e._updateDataset(n,i?t({datasetIndex:n}):t);e.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){const i=this,n=i.getDatasetMeta(t),o={meta:n,index:t,mode:e,cancelable:!0};!1!==i.notifyPlugins(\"beforeDatasetUpdate\",o)&&(n.controller._update(e),o.cancelable=!1,i.notifyPlugins(\"afterDatasetUpdate\",o))}render(){const t=this;!1!==t.notifyPlugins(\"beforeRender\",{cancelable:!0})&&(a.has(t)?t.attached&&!a.running(t)&&a.start(t):(t.draw(),Xn({chart:t})))}draw(){const t=this;let e;if(t._resizeBeforeDraw){const{width:e,height:i}=t._resizeBeforeDraw;t._resize(e,i),t._resizeBeforeDraw=null}if(t.clear(),t.width\u003C=0||t.height\u003C=0)return;if(!1===t.notifyPlugins(\"beforeDraw\",{cancelable:!0}))return;const i=t._layers;for(e=0;e\u003Ci.length&&i[e].z\u003C=0;++e)i[e].draw(t.chartArea);for(t._drawDatasets();e\u003Ci.length;++e)i[e].draw(t.chartArea);t.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let n,o;for(n=0,o=e.length;n\u003Co;++n){const o=e[n];t&&!o.visible||i.push(o)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){const t=this;if(!1===t.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0}))return;const e=t.getSortedVisibleDatasetMetas();for(let i=e.length-1;i>=0;--i)t._drawDataset(e[i]);t.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){const e=this,i=e.ctx,n=t._clip,o=e.chartArea,s={meta:t,index:t.index,cancelable:!0};!1!==e.notifyPlugins(\"beforeDatasetDraw\",s)&&(Zt(i,{left:!1===n.left?0:o.left-n.left,right:!1===n.right?e.width:o.right+n.right,top:!1===n.top?0:o.top-n.top,bottom:!1===n.bottom?e.height:o.bottom+n.bottom}),t.controller.draw(),Qt(i),s.cancelable=!1,e.notifyPlugins(\"afterDatasetDraw\",s))}getElementsAtEventForMode(t,e,i,n){const o=Oe.modes[e];return\"function\"==typeof o?o(this,t,i,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let n=i.filter((t=>t&&t._dataset===e)).pop();return n||(n=i[t]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1}),n}getContext(){return this.$context||(this.$context={chart:this,type:\"chart\"})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return\"boolean\"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateDatasetVisibility(t,e){const i=this,n=e?\"show\":\"hide\",o=i.getDatasetMeta(t),s=o.controller._resolveAnimations(void 0,n);i.setDatasetVisibility(t,e),s.update(o,{visible:e}),i.update((e=>e.datasetIndex===t?n:void 0))}hide(t){this._updateDatasetVisibility(t,!1)}show(t){this._updateDatasetVisibility(t,!0)}_destroyDatasetMeta(t){const e=this,i=e._metasets&&e._metasets[t];i&&i.controller&&(i.controller._destroy(),delete e._metasets[t])}destroy(){const t=this,{canvas:e,ctx:i}=t;let n,o;for(t.stop(),a.remove(t),n=0,o=t.data.datasets.length;n\u003Co;++n)t._destroyDatasetMeta(n);t.config.clearCache(),e&&(t.unbindEvents(),qt(e,i),t.platform.releaseContext(i),t.canvas=null,t.ctx=null),t.notifyPlugins(\"destroy\"),delete Zn[t.id]}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){const t=this,e=t._listeners,i=t.platform,n=(n,o)=>{i.addEventListener(t,n,o),e[n]=o},o=(n,o)=>{e[n]&&(i.removeEventListener(t,n,o),delete e[n])};let s=function(e,i,n){e.offsetX=i,e.offsetY=n,t._eventHandler(e)};if(J(t.options.events,(t=>n(t,s))),t.options.responsive){let e;s=(e,i)=>{t.canvas&&t.resize(e,i)};const a=()=>{o(\"attach\",a),t.attached=!0,t.resize(),n(\"resize\",s),n(\"detach\",e)};e=()=>{t.attached=!1,o(\"resize\",s),n(\"attach\",a)},i.isAttached(t.canvas)?a():e()}else t.attached=!0}unbindEvents(){const t=this,e=t._listeners;e&&(t._listeners={},J(e,((e,i)=>{t.platform.removeEventListener(t,i,e)})))}updateHoverStyle(t,e,i){const n=i?\"set\":\"remove\";let o,s,a,r;for(\"dataset\"===e&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller[\"_\"+n+\"DatasetHoverStyle\"]()),a=0,r=t.length;a\u003Cr;++a){s=t[a];const e=s&&this.getDatasetMeta(s.datasetIndex).controller;e&&e[n+\"HoverStyle\"](s.element,s.datasetIndex,s.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this,i=e._active||[],n=t.map((({datasetIndex:t,index:i})=>{const n=e.getDatasetMeta(t);if(!n)throw new Error(\"No dataset found at index \"+t);return{datasetIndex:t,element:n.data[i],index:i}}));!tt(n,i)&&(e._active=n,e._updateHoverStyles(n,i))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const n=this,o=n.options.hover,s=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),a=s(e,t),r=i?t:s(t,e);a.length&&n.updateHoverStyle(a,o.mode,!1),r.length&&o.mode&&n.updateHoverStyle(r,o.mode,!0)}_eventHandler(t,e){const i=this,n={event:t,replay:e,cancelable:!0},o=e=>(e.options.events||this.options.events).includes(t.type);if(!1===i.notifyPlugins(\"beforeEvent\",n,o))return;const s=i._handleEvent(t,e);return n.cancelable=!1,i.notifyPlugins(\"afterEvent\",n,o),(s||n.changed)&&i.render(),i}_handleEvent(t,e){const i=this,{_active:n=[],options:o}=i,s=o.hover,a=e;let r=[],l=!1,c=null;return\"mouseout\"!==t.type&&(r=i.getElementsAtEventForMode(t,s.mode,s,a),c=\"click\"===t.type?i._lastEvent:t),i._lastEvent=null,Gt(t,i.chartArea,i._minPadding)&&(Q(o.onHover,[t,r,i],i),\"mouseup\"!==t.type&&\"click\"!==t.type&&\"contextmenu\"!==t.type||Q(o.onClick,[t,r,i],i)),l=!tt(r,n),(l||e)&&(i._active=r,i._updateHoverStyles(r,n,e)),i._lastEvent=c,l}}const to=()=>J(Jn.instances,(t=>t._plugins.invalidate())),eo=!0;function io(){throw new Error(\"This method is not implemented: either no adapter can be found or an incomplete integration was provided.\")}Object.defineProperties(Jn,{defaults:{enumerable:eo,value:xt},instances:{enumerable:eo,value:Zn},overrides:{enumerable:eo,value:ft},registry:{enumerable:eo,value:An},version:{enumerable:eo,value:\"3.2.1\"},getChart:{enumerable:eo,value:Qn},register:{enumerable:eo,value:(...t)=>{An.add(...t),to()}},unregister:{enumerable:eo,value:(...t)=>{An.remove(...t),to()}}});class no{constructor(t){this.options=t||{}}formats(){return io()}parse(t,e){return io()}format(t,e){return io()}add(t,e,i){return io()}diff(t,e,i){return io()}startOf(t,e,i){return io()}endOf(t,e){return io()}}no.override=function(t){Object.assign(no.prototype,t)};var oo={_date:no};function so(t){const e=function(t){if(!t._cache.$bar){const e=t.getMatchingVisibleMetas(\"bar\");let i=[];for(let n=0,o=e.length;n\u003Co;n++)i=i.concat(e[n].controller.getAllParsedValues(t));t._cache.$bar=he(i.sort(((t,e)=>t-e)))}return t._cache.$bar}(t);let i,n,o,s,a=t._length;const r=()=>{32767!==o&&-32768!==o&&(ht(s)&&(a=Math.min(a,Math.abs(o-s)||a)),s=o)};for(i=0,n=e.length;i\u003Cn;++i)o=t.getPixelForValue(e[i]),r();for(s=void 0,i=0,n=t.ticks.length;i\u003Cn;++i)o=t.getPixelForTick(i),r();return a}function ao(t,e,i,n){return Y(t)?function(t,e,i,n){const o=i.parse(t[0],n),s=i.parse(t[1],n),a=Math.min(o,s),r=Math.max(o,s);let l=a,c=r;Math.abs(a)>Math.abs(r)&&(l=r,c=a),e[i.axis]=c,e._custom={barStart:l,barEnd:c,start:o,end:s,min:a,max:r}}(t,e,i,n):e[i.axis]=i.parse(t,n),e}function ro(t,e,i,n){const o=t.iScale,s=t.vScale,a=o.getLabels(),r=o===s,l=[];let c,h,d,u;for(c=i,h=i+n;c\u003Ch;++c)u=e[c],d={},d[o.axis]=r||o.parse(a[c],c),l.push(ao(u,d,s,c));return l}function lo(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}class co extends Li{parsePrimitiveData(t,e,i,n){return ro(t,e,i,n)}parseArrayData(t,e,i,n){return ro(t,e,i,n)}parseObjectData(t,e,i,n){const{iScale:o,vScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=\"x\"===o.axis?a:r,c=\"x\"===s.axis?a:r,h=[];let d,u,f,g;for(d=i,u=i+n;d\u003Cu;++d)g=e[d],f={},f[o.axis]=o.parse(lt(g,l),d),h.push(ao(lt(g,c),f,s,d));return h}updateRangeFromParsed(t,e,i,n){super.updateRangeFromParsed(t,e,i,n);const o=i._custom;o&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:n}=e,o=this.getParsed(t),s=o._custom,a=lo(s)?\"[\"+s.start+\", \"+s.end+\"]\":\"\"+n.getLabelForValue(o[n.axis]);return{label:\"\"+i.getLabelForValue(o[i.axis]),value:a}}initialize(){const t=this;t.enableOptionSharing=!0,super.initialize();t._cachedMeta.stack=t.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o._cachedMeta.vScale,r=a.getBasePixel(),l=a.isHorizontal(),c=o._getRuler(),h=o.resolveDataElementOptions(e,n),d=o.getSharedOptions(h),u=o.includeOptions(n,d);o.updateSharedOptions(d,n,h);for(let h=e;h\u003Ce+i;h++){const e=o.getParsed(h),i=s||$(e[a.axis])?{base:r,head:r}:o._calculateBarValuePixels(h),f=o._calculateBarIndexPixels(h,c),g=(e._stacks||{})[a.axis],p={horizontal:l,base:i.base,enableBorderRadius:!g||lo(e._custom)||o.index===g._top||o.index===g._bottom,x:l?i.head:f.center,y:l?f.center:i.head,height:l?f.size:void 0,width:l?void 0:f.size};u&&(p.options=d||o.resolveDataElementOptions(h,n)),o.updateElement(t[h],h,p,n)}}_getStacks(t,e){const i=this._cachedMeta.iScale,n=i.getMatchingVisibleMetas(this._type),o=i.options.stacked,s=n.length,a=[];let r,l;for(r=0;r\u003Cs;++r){if(l=n[r],void 0!==e){const t=l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];if($(t)||isNaN(t))continue}if((!1===o||-1===a.indexOf(l.stack)||void 0===o&&void 0===l.stack)&&a.push(l.stack),l.index===t)break}return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const n=this._getStacks(t,i),o=void 0!==e?n.indexOf(e):-1;return-1===o?n.length-1:o}_getRuler(){const t=this,e=t.options,i=t._cachedMeta,n=i.iScale,o=[];let s,a;for(s=0,a=i.data.length;s\u003Ca;++s)o.push(n.getPixelForValue(t.getParsed(s)[n.axis],s));const r=e.barThickness;return{min:r||so(n),pixels:o,start:n._startPixel,end:n._endPixel,stackCount:t._getStackCount(),scale:n,grouped:e.grouped,ratio:r?1:e.categoryPercentage*e.barPercentage}}_calculateBarValuePixels(t){const e=this,{vScale:i,_stacked:n}=e._cachedMeta,{base:o,minBarLength:s}=e.options,a=e.getParsed(t),r=a._custom,l=lo(r);let c,h,d=a[i.axis],u=0,f=n?e.applyStack(i,a,n):d;f!==d&&(u=f-d,f=d),l&&(d=r.barStart,f=r.barEnd-r.barStart,0!==d&&Dt(d)!==Dt(r.barEnd)&&(u=0),u+=d);const g=$(o)||l?u:o;let p=i.getPixelForValue(g);c=this.chart.getDataVisibility(t)?i.getPixelForValue(u+f):p,h=c-p,void 0!==s&&Math.abs(h)\u003Cs&&(h=h\u003C0?-s:s,0===d&&(p-=h\u002F2),c=p+h);const m=o||0;if(p===i.getPixelForValue(m)){const t=i.getLineWidthForValue(m)\u002F2;h>0?(p+=t,h-=t):h\u003C0&&(p-=t,h+=t)}return{size:h,base:p,head:c,center:c+h\u002F2}}_calculateBarIndexPixels(t,e){const i=this,n=e.scale,o=i.options,s=o.skipNull,a=K(o.maxBarThickness,1\u002F0);let r,l;if(e.grouped){const n=s?i._getStackCount(t):e.stackCount,c=\"flex\"===o.barThickness?function(t,e,i,n){const o=e.pixels,s=o[t];let a=t>0?o[t-1]:null,r=t\u003Co.length-1?o[t+1]:null;const l=i.categoryPercentage;null===a&&(a=s-(null===r?e.end-e.start:r-s)),null===r&&(r=s+s-a);const c=s-(s-Math.min(a,r))\u002F2*l;return{chunk:Math.abs(r-a)\u002F2*l\u002Fn,ratio:i.barPercentage,start:c}}(t,e,o,n):function(t,e,i,n){const o=i.barThickness;let s,a;return $(o)?(s=e.min*i.categoryPercentage,a=i.barPercentage):(s=o*n,a=1),{chunk:s\u002Fn,ratio:a,start:e.pixels[t]-s\u002F2}}(t,e,o,n),h=i._getStackIndex(i.index,i._cachedMeta.stack,s?t:void 0);r=c.start+c.chunk*h+c.chunk\u002F2,l=Math.min(a,c.chunk*c.ratio)}else r=n.getPixelForValue(i.getParsed(t)[n.axis],t),l=Math.min(a,e.min*e.ratio);return{base:r-l\u002F2,head:r+l\u002F2,center:r,size:l}}draw(){const t=this,e=t.chart,i=t._cachedMeta,n=i.vScale,o=i.data,s=o.length;let a=0;for(Zt(e.ctx,e.chartArea);a\u003Cs;++a)null!==t.getParsed(a)[n.axis]&&o[a].draw(t._ctx);Qt(e.ctx)}}co.id=\"bar\",co.defaults={datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}},co.overrides={interaction:{mode:\"index\"},scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}};class ho extends Li{initialize(){this.enableOptionSharing=!0,super.initialize()}parseObjectData(t,e,i,n){const{xScale:o,yScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=[];let c,h,d;for(c=i,h=i+n;c\u003Ch;++c)d=e[c],l.push({x:o.parse(lt(d,a),c),y:s.parse(lt(d,r),c),_custom:d&&d.r&&+d.r});return l}getMaxOverflow(){const{data:t,_parsed:e}=this._cachedMeta;let i=0;for(let n=t.length-1;n>=0;--n)i=Math.max(i,t[n].size()\u002F2,e[n]._custom);return i>0&&i}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:n}=e,o=this.getParsed(t),s=i.getLabelForValue(o.x),a=n.getLabelForValue(o.y),r=o._custom;return{label:e.label,value:\"(\"+s+\", \"+a+(r?\", \"+r:\"\")+\")\"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,{xScale:a,yScale:r}=o._cachedMeta,l=o.resolveDataElementOptions(e,n),c=o.getSharedOptions(l),h=o.includeOptions(n,c);for(let l=e;l\u003Ce+i;l++){const e=t[l],i=!s&&o.getParsed(l),c=s?a.getPixelForDecimal(.5):a.getPixelForValue(i.x),d=s?r.getBasePixel():r.getPixelForValue(i.y),u={x:c,y:d,skip:isNaN(c)||isNaN(d)};h&&(u.options=o.resolveDataElementOptions(l,n),s&&(u.options.radius=0)),o.updateElement(e,l,u,n)}o.updateSharedOptions(c,n,l)}resolveDataElementOptions(t,e){const i=this.getParsed(t);let n=super.resolveDataElementOptions(t,e);n.$shared&&(n=Object.assign({},n,{$shared:!1}));const o=n.radius;return\"active\"!==e&&(n.radius=0),n.radius+=K(i&&i._custom,o),n}}ho.id=\"bubble\",ho.defaults={datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}},ho.overrides={scales:{x:{type:\"linear\"},y:{type:\"linear\"}},plugins:{tooltip:{callbacks:{title:()=>\"\"}}}};class uo extends Li{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,n=this._cachedMeta;let o,s;for(o=t,s=t+e;o\u003Cs;++o)n._parsed[o]=+i[o]}_getRotation(){return Et(this.options.rotation-90)}_getCircumference(){return Et(this.options.circumference)}_getRotationExtents(){let t=_t,e=-_t;const i=this;for(let n=0;n\u003Ci.chart.data.datasets.length;++n)if(i.chart.isDatasetVisible(n)){const o=i.chart.getDatasetMeta(n).controller,s=o._getRotation(),a=o._getCircumference();t=Math.min(t,s),e=Math.max(e,s+a)}return{rotation:t,circumference:e-t}}update(t){const e=this,i=e.chart,{chartArea:n}=i,o=e._cachedMeta,s=o.data,a=e.getMaxBorderWidth()+e.getMaxOffset(s),r=Math.max((Math.min(n.width,n.height)-a)\u002F2,0),l=Math.min(G(e.options.cutout,r),1),c=e._getRingWeight(e.index),{circumference:h,rotation:d}=e._getRotationExtents(),{ratioX:u,ratioY:f,offsetX:g,offsetY:p}=function(t,e,i){let n=1,o=1,s=0,a=0;if(e\u003C_t){const r=t,l=r+e,c=Math.cos(r),h=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,n)=>Ht(t,r,l)?1:Math.max(e,e*i,n,n*i),g=(t,e,n)=>Ht(t,r,l)?-1:Math.min(e,e*i,n,n*i),p=f(0,c,d),m=f(Mt,h,u),x=g(bt,c,d),b=g(bt+Mt,h,u);n=(p-x)\u002F2,o=(m-b)\u002F2,s=-(p+x)\u002F2,a=-(m+b)\u002F2}return{ratioX:n,ratioY:o,offsetX:s,offsetY:a}}(d,h,l),m=(n.width-a)\u002Fu,x=(n.height-a)\u002Ff,b=Math.max(Math.min(m,x)\u002F2,0),_=Z(e.options.radius,b),y=(_-Math.max(_*l,0))\u002Fe._getVisibleDatasetWeightTotal();e.offsetX=g*_,e.offsetY=p*_,o.total=e.calculateTotal(),e.outerRadius=_-y*e._getRingWeightOffset(e.index),e.innerRadius=Math.max(e.outerRadius-y*c,0),e.updateElements(s,0,s.length,t)}_circumference(t,e){const i=this,n=i.options,o=i._cachedMeta,s=i._getCircumference();return e&&n.animation.animateRotate||!this.chart.getDataVisibility(t)||null===o._parsed[t]?0:i.calculateCircumference(o._parsed[t]*s\u002F_t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o.chart,r=a.chartArea,l=a.options.animation,c=(r.left+r.right)\u002F2,h=(r.top+r.bottom)\u002F2,d=s&&l.animateScale,u=d?0:o.innerRadius,f=d?0:o.outerRadius,g=o.resolveDataElementOptions(e,n),p=o.getSharedOptions(g),m=o.includeOptions(n,p);let x,b=o._getRotation();for(x=0;x\u003Ce;++x)b+=o._circumference(x,s);for(x=e;x\u003Ce+i;++x){const e=o._circumference(x,s),i=t[x],a={x:c+o.offsetX,y:h+o.offsetY,startAngle:b,endAngle:b+e,circumference:e,outerRadius:f,innerRadius:u};m&&(a.options=p||o.resolveDataElementOptions(x,n)),b+=e,o.updateElement(i,x,a,n)}o.updateSharedOptions(p,n,g)}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,n=0;for(i=0;i\u003Ce.length;i++){const e=t._parsed[i];null!==e&&!isNaN(e)&&this.chart.getDataVisibility(i)&&(n+=Math.abs(e))}return n}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?_t*(Math.abs(t)\u002Fe):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,n=i.data.labels||[],o=zi(e._parsed[t],i.options.locale);return{label:n[t]||\"\",value:o}}getMaxBorderWidth(t){const e=this;let i=0;const n=e.chart;let o,s,a,r,l;if(!t)for(o=0,s=n.data.datasets.length;o\u003Cs;++o)if(n.isDatasetVisible(o)){a=n.getDatasetMeta(o),t=a.data,r=a.controller,r!==e&&r.configure();break}if(!t)return 0;for(o=0,s=t.length;o\u003Cs;++o)l=r.resolveDataElementOptions(o),\"inner\"!==l.borderAlign&&(i=Math.max(i,l.borderWidth||0,l.hoverBorderWidth||0));return i}getMaxOffset(t){let e=0;for(let i=0,n=t.length;i\u003Cn;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i\u003Ct;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(K(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}uo.id=\"doughnut\",uo.defaults={datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",indexAxis:\"r\"},uo.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(((e,i)=>{const n=t.getDatasetMeta(0).controller.getStyle(i);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,hidden:!t.getDataVisibility(i),index:i}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label(t){let e=t.label;const i=\": \"+t.formattedValue;return Y(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class fo extends Li{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this,i=e._cachedMeta,{dataset:n,data:o=[],_dataset:s}=i,a=e.chart._animationsDisabled;let{start:r,count:l}=function(t,e,i){const n=e.length;let o=0,s=n;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:c,max:h,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(o=Nt(Math.min(oe(r,a.axis,c).lo,i?n:oe(e,l,a.getPixelForValue(c)).lo),0,n-1)),s=u?Nt(Math.max(oe(r,a.axis,h).hi+1,i?0:oe(e,l,a.getPixelForValue(h)).hi+1),o,n)-o:n-o}return{start:o,count:s}}(i,o,a);e._drawStart=r,e._drawCount=l,function(t){const{xScale:e,yScale:i,_scaleRanges:n}=t,o={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!n)return t._scaleRanges=o,!0;const s=n.xmin!==e.min||n.xmax!==e.max||n.ymin!==i.min||n.ymax!==i.max;return Object.assign(n,o),s}(i)&&(r=0,l=o.length),n._decimated=!!s._decimated,n.points=o;const c=e.resolveDatasetElementOptions(t);e.options.showLine||(c.borderWidth=0),c.segment=e.options.segment,e.updateElement(n,void 0,{animated:!a,options:c},t),e.updateElements(o,r,l,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,{xScale:a,yScale:r,_stacked:l}=o._cachedMeta,c=o.resolveDataElementOptions(e,n),h=o.getSharedOptions(c),d=o.includeOptions(n,h),u=o.options.spanGaps,f=At(u)?u:Number.POSITIVE_INFINITY,g=o.chart._animationsDisabled||s||\"none\"===n;let p=e>0&&o.getParsed(e-1);for(let c=e;c\u003Ce+i;++c){const e=t[c],i=o.getParsed(c),u=g?e:{},m=$(i.y),x=u.x=a.getPixelForValue(i.x,c),b=u.y=s||m?r.getBasePixel():r.getPixelForValue(l?o.applyStack(r,i,l):i.y,c);u.skip=isNaN(x)||isNaN(b)||m,u.stop=c>0&&i.x-p.x>f,u.parsed=i,d&&(u.options=h||o.resolveDataElementOptions(c,n)),g||o.updateElement(e,c,u,n),p=i}o.updateSharedOptions(h,n,c)}getMaxOverflow(){const t=this,e=t._cachedMeta,i=e.dataset,n=i.options&&i.options.borderWidth||0,o=e.data||[];if(!o.length)return n;const s=o[0].size(t.resolveDataElementOptions(0)),a=o[o.length-1].size(t.resolveDataElementOptions(o.length-1));return Math.max(n,s,a)\u002F2}draw(){this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea),super.draw()}}fo.id=\"line\",fo.defaults={datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1},fo.overrides={scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}};class go extends Li{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}_updateRadius(){const t=this,e=t.chart,i=e.chartArea,n=e.options,o=Math.min(i.right-i.left,i.bottom-i.top),s=Math.max(o\u002F2,0),a=(s-Math.max(n.cutoutPercentage?s\u002F100*n.cutoutPercentage:1,0))\u002Fe.getVisibleDatasetCount();t.outerRadius=s-a*t.index,t.innerRadius=t.outerRadius-a}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o.chart,r=o.getDataset(),l=a.options.animation,c=o._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*bt;let f,g=u;const p=360\u002Fo.countVisibleElements();for(f=0;f\u003Ce;++f)g+=o._computeAngle(f,n,p);for(f=e;f\u003Ce+i;f++){const e=t[f];let i=g,m=g+o._computeAngle(f,n,p),x=a.getDataVisibility(f)?c.getDistanceFromCenterForValue(r.data[f]):0;g=m,s&&(l.animateScale&&(x=0),l.animateRotate&&(i=m=u));const b={x:h,y:d,innerRadius:0,outerRadius:x,startAngle:i,endAngle:m,options:o.resolveDataElementOptions(f,n)};o.updateElement(e,f,b,n)}}countVisibleElements(){const t=this.getDataset(),e=this._cachedMeta;let i=0;return e.data.forEach(((e,n)=>{!isNaN(t.data[n])&&this.chart.getDataVisibility(n)&&i++})),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?Et(this.resolveDataElementOptions(t,e).angle||i):0}}go.id=\"polarArea\",go.defaults={dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0},go.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(((e,i)=>{const n=t.getDatasetMeta(0).controller.getStyle(i);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,hidden:!t.getDataVisibility(i),index:i}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label:t=>t.chart.data.labels[t.dataIndex]+\": \"+t.formattedValue}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class po extends uo{}po.id=\"pie\",po.defaults={cutout:0,rotation:0,circumference:360,radius:\"100%\"};class mo extends Li{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(i[e.axis])}}update(t){const e=this,i=e._cachedMeta,n=i.dataset,o=i.data||[],s=i.iScale.getLabels();if(n.points=o,\"resize\"!==t){const i=e.resolveDatasetElementOptions(t);e.options.showLine||(i.borderWidth=0);const a={_loop:!0,_fullLoop:s.length===o.length,options:i};e.updateElement(n,void 0,a,t)}e.updateElements(o,0,o.length,t)}updateElements(t,e,i,n){const o=this,s=o.getDataset(),a=o._cachedMeta.rScale,r=\"reset\"===n;for(let l=e;l\u003Ce+i;l++){const e=t[l],i=o.resolveDataElementOptions(l,n),c=a.getPointPositionForValue(l,s.data[l]),h=r?a.xCenter:c.x,d=r?a.yCenter:c.y,u={x:h,y:d,angle:c.angle,skip:isNaN(h)||isNaN(d),options:i};o.updateElement(e,l,u,n)}}}mo.id=\"radar\",mo.defaults={datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}},mo.overrides={aspectRatio:1,scales:{r:{type:\"radialLinear\"}}};class xo extends fo{}xo.id=\"scatter\",xo.defaults={showLine:!1,fill:!1},xo.overrides={interaction:{mode:\"point\"},plugins:{tooltip:{callbacks:{title:()=>\"\",label:t=>\"(\"+t.label+\", \"+t.formattedValue+\")\"}}},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};var bo=Object.freeze({__proto__:null,BarController:co,BubbleController:ho,DoughnutController:uo,LineController:fo,PolarAreaController:go,PieController:po,RadarController:mo,ScatterController:xo});function _o(t,e){const{startAngle:i,endAngle:n,pixelMargin:o,x:s,y:a,outerRadius:r,innerRadius:l}=e;let c=o\u002Fr;t.beginPath(),t.arc(s,a,r,i-c,n+c),l>o?(c=o\u002Fl,t.arc(s,a,l,n+c,i-c,!0)):t.arc(s,a,o,n+Mt,i-Mt),t.closePath(),t.clip()}function yo(t,e,i,n){const o=Le(t.options.borderRadius,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"]);const s=(i-e)\u002F2,a=Math.min(s,n*e\u002F2),r=t=>{const e=(i-Math.min(s,t))*n\u002F2;return Nt(t,0,Math.min(s,e))};return{outerStart:r(o.outerStart),outerEnd:r(o.outerEnd),innerStart:Nt(o.innerStart,0,a),innerEnd:Nt(o.innerEnd,0,a)}}function vo(t,e,i,n){return{x:i+t*Math.cos(e),y:n+t*Math.sin(e)}}function wo(t,e){const{x:i,y:n,startAngle:o,endAngle:s,pixelMargin:a}=e,r=Math.max(e.outerRadius-a,0),l=e.innerRadius+a,{outerStart:c,outerEnd:h,innerStart:d,innerEnd:u}=yo(e,l,r,s-o),f=r-c,g=r-h,p=o+c\u002Ff,m=s-h\u002Fg,x=l+d,b=l+u,_=o+d\u002Fx,y=s-u\u002Fb;if(t.beginPath(),t.arc(i,n,r,p,m),h>0){const e=vo(g,m,i,n);t.arc(e.x,e.y,h,m,s+Mt)}const v=vo(b,s,i,n);if(t.lineTo(v.x,v.y),u>0){const e=vo(b,y,i,n);t.arc(e.x,e.y,u,s+Mt,y+Math.PI)}if(t.arc(i,n,l,s-u\u002Fl,o+d\u002Fl,!0),d>0){const e=vo(x,_,i,n);t.arc(e.x,e.y,d,_+Math.PI,o-Mt)}const w=vo(f,o,i,n);if(t.lineTo(w.x,w.y),c>0){const e=vo(f,p,i,n);t.arc(e.x,e.y,c,o-Mt,p)}t.closePath()}function Mo(t,e){const{options:i}=e,n=\"inner\"===i.borderAlign;i.borderWidth&&(n?(t.lineWidth=2*i.borderWidth,t.lineJoin=\"round\"):(t.lineWidth=i.borderWidth,t.lineJoin=\"bevel\"),e.fullCircles&&function(t,e,i){const{x:n,y:o,startAngle:s,endAngle:a,pixelMargin:r}=e,l=Math.max(e.outerRadius-r,0),c=e.innerRadius+r;let h;for(i&&(e.endAngle=e.startAngle+_t,_o(t,e),e.endAngle=a,e.endAngle===e.startAngle&&(e.endAngle+=_t,e.fullCircles--)),t.beginPath(),t.arc(n,o,c,s+_t,s,!0),h=0;h\u003Ce.fullCircles;++h)t.stroke();for(t.beginPath(),t.arc(n,o,l,s,s+_t),h=0;h\u003Ce.fullCircles;++h)t.stroke()}(t,e,n),n&&_o(t,e),wo(t,e),t.stroke())}class ko extends Ei{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const n=this.getProps([\"x\",\"y\"],i),{angle:o,distance:s}=Ft(n,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:c,circumference:h}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],i);return(h>=_t||Ht(o,a,r))&&(s>=l&&s\u003C=c)}getCenterPoint(t){const{x:e,y:i,startAngle:n,endAngle:o,innerRadius:s,outerRadius:a}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"],t),r=(n+o)\u002F2,l=(s+a)\u002F2;return{x:e+Math.cos(r)*l,y:i+Math.sin(r)*l}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const e=this,i=e.options,n=i.offset||0;if(e.pixelMargin=\"inner\"===i.borderAlign?.33:0,e.fullCircles=Math.floor(e.circumference\u002F_t),!(0===e.circumference||e.innerRadius\u003C0||e.outerRadius\u003C0)){if(t.save(),n&&e.circumference\u003C_t){const i=(e.startAngle+e.endAngle)\u002F2;t.translate(Math.cos(i)*n,Math.sin(i)*n)}t.fillStyle=i.backgroundColor,t.strokeStyle=i.borderColor,function(t,e){if(e.fullCircles){e.endAngle=e.startAngle+_t,wo(t,e);for(let i=0;i\u003Ce.fullCircles;++i)t.fill()}isNaN(e.circumference)||(e.endAngle=e.startAngle+e.circumference%_t),wo(t,e),t.fill()}(t,e),Mo(t,e),t.restore()}}}function So(t,e,i=e){t.lineCap=K(i.borderCapStyle,e.borderCapStyle),t.setLineDash(K(i.borderDash,e.borderDash)),t.lineDashOffset=K(i.borderDashOffset,e.borderDashOffset),t.lineJoin=K(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=K(i.borderWidth,e.borderWidth),t.strokeStyle=K(i.borderColor,e.borderColor)}function Po(t,e,i){t.lineTo(i.x,i.y)}function Do(t,e,i={}){const n=t.length,{start:o=0,end:s=n-1}=i,{start:a,end:r}=e,l=Math.max(o,a),c=Math.min(s,r),h=o\u003Ca&&s\u003Ca||o>r&&s>r;return{count:n,start:l,loop:e.loop,ilen:c\u003Cl&&!h?n+c-l:c-l}}function Co(t,e,i,n){const{points:o,options:s}=e,{count:a,start:r,loop:l,ilen:c}=Do(o,i,n),h=function(t){return t.stepped?Jt:t.tension||\"monotone\"===t.cubicInterpolationMode?te:Po}(s);let d,u,f,{move:g=!0,reverse:p}=n||{};for(d=0;d\u003C=c;++d)u=o[(r+(p?c-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):h(t,f,u,p,s.stepped),f=u);return l&&(u=o[(r+(p?c:0))%a],h(t,f,u,p,s.stepped)),!!l}function Oo(t,e,i,n){const o=e.points,{count:s,start:a,ilen:r}=Do(o,i,n),{move:l=!0,reverse:c}=n||{};let h,d,u,f,g,p,m=0,x=0;const b=t=>(a+(c?r-t:t))%s,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=o[b(0)],t.moveTo(d.x,d.y)),h=0;h\u003C=r;++h){if(d=o[b(h)],d.skip)continue;const e=d.x,i=d.y,n=0|e;n===u?(i\u003Cf?f=i:i>g&&(g=i),m=(x*m+e)\u002F++x):(_(),t.lineTo(e,i),u=n,x=0,f=g=i),p=i}_()}function Ao(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||\"monotone\"===e.cubicInterpolationMode||e.stepped||i)?Oo:Co}ko.id=\"arc\",ko.defaults={borderAlign:\"center\",borderColor:\"#fff\",borderRadius:0,borderWidth:2,offset:0,angle:void 0},ko.defaultRoutes={backgroundColor:\"backgroundColor\"};const To=\"function\"==typeof Path2D;function Ro(t,e,i,n){To&&1===e.segments.length?function(t,e,i,n){let o=e._path;o||(o=e._path=new Path2D,e.path(o,i,n)&&o.closePath()),So(t,e.options),t.stroke(o)}(t,e,i,n):function(t,e,i,n){const{segments:o,options:s}=e,a=Ao(e);for(const r of o)So(t,s,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+n-1})&&t.closePath(),t.stroke()}(t,e,i,n)}class Lo extends Ei{constructor(t){super(),this.animated=!0,this.options=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,t&&Object.assign(this,t)}updateControlPoints(t){const e=this,i=e.options;if((i.tension||\"monotone\"===i.cubicInterpolationMode)&&!i.stepped&&!e._pointsUpdated){const n=i.spanGaps?e._loop:e._fullLoop;fn(e._points,i,t,n),e._pointsUpdated=!0}}set points(t){const e=this;e._points=t,delete e._segments,delete e._path,e._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=kn(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this,n=i.options,o=t[e],s=i.points,a=Mn(i,{property:e,start:o,end:o});if(!a.length)return;const r=[],l=function(t){return t.stepped?pn:t.tension||\"monotone\"===t.cubicInterpolationMode?mn:gn}(n);let c,h;for(c=0,h=a.length;c\u003Ch;++c){const{start:i,end:h}=a[c],d=s[i],u=s[h];if(d===u){r.push(d);continue}const f=l(d,u,Math.abs((o-d[e])\u002F(u[e]-d[e])),n.stepped);f[e]=t[e],r.push(f)}return 1===r.length?r[0]:r}pathSegment(t,e,i){return Ao(this)(t,this,e,i)}path(t,e,i){const n=this,o=n.segments,s=Ao(n);let a=n._loop;e=e||0,i=i||n.points.length-e;for(const r of o)a&=s(t,n,r,{start:e,end:e+i-1});return!!a}draw(t,e,i,n){const o=this,s=o.options||{};(o.points||[]).length&&s.borderWidth&&(t.save(),Ro(t,o,i,n),t.restore(),o.animated&&(o._pointsUpdated=!1,o._path=void 0))}}function Eo(t,e,i,n){const o=t.options,{[i]:s}=t.getProps([i],n);return Math.abs(e-s)\u003Co.radius+o.hitRadius}Lo.id=\"line\",Lo.defaults={borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0},Lo.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"},Lo.descriptors={_scriptable:!0,_indexable:t=>\"borderDash\"!==t&&\"fill\"!==t};class Io extends Ei{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const n=this.options,{x:o,y:s}=this.getProps([\"x\",\"y\"],i);return Math.pow(t-o,2)+Math.pow(e-s,2)\u003CMath.pow(n.hitRadius+n.radius,2)}inXRange(t,e){return Eo(this,t,\"x\",e)}inYRange(t,e){return Eo(this,t,\"y\",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t){const e=this,i=e.options;e.skip||i.radius\u003C.1||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Kt(t,i,e.x,e.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function zo(t,e){const{x:i,y:n,base:o,width:s,height:a}=t.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],e);let r,l,c,h,d;return t.horizontal?(d=a\u002F2,r=Math.min(i,o),l=Math.max(i,o),c=n-d,h=n+d):(d=s\u002F2,r=i-d,l=i+d,c=Math.min(n,o),h=Math.max(n,o)),{left:r,top:c,right:l,bottom:h}}function Fo(t){let e=t.options.borderSkipped;const i={};return e?(e=t.horizontal?Vo(e,\"left\",\"right\",t.base>t.x):Vo(e,\"bottom\",\"top\",t.base\u003Ct.y),i[e]=!0,i):i}function Vo(t,e,i,n){var o,s,a;return n?(a=i,t=Bo(t=(o=t)===(s=e)?a:o===a?s:o,i,e)):t=Bo(t,e,i),t}function Bo(t,e,i){return\"start\"===t?e:\"end\"===t?i:t}function Wo(t,e,i,n){return t?0:Math.max(Math.min(e,n),i)}function Ho(t){const e=zo(t),i=e.right-e.left,n=e.bottom-e.top,o=function(t,e,i){const n=t.options.borderWidth,o=Fo(t),s=Ee(n);return{t:Wo(o.top,s.top,0,i),r:Wo(o.right,s.right,0,e),b:Wo(o.bottom,s.bottom,0,i),l:Wo(o.left,s.left,0,e)}}(t,i\u002F2,n\u002F2),s=function(t,e,i){const{enableBorderRadius:n}=t.getProps([\"enableBorderRadius\"]),o=t.options.borderRadius,s=Ie(o),a=Math.min(e,i),r=Fo(t),l=n||U(o);return{topLeft:Wo(!l||r.top||r.left,s.topLeft,0,a),topRight:Wo(!l||r.top||r.right,s.topRight,0,a),bottomLeft:Wo(!l||r.bottom||r.left,s.bottomLeft,0,a),bottomRight:Wo(!l||r.bottom||r.right,s.bottomRight,0,a)}}(t,i\u002F2,n\u002F2);return{outer:{x:e.left,y:e.top,w:i,h:n,radius:s},inner:{x:e.left+o.l,y:e.top+o.t,w:i-o.l-o.r,h:n-o.t-o.b,radius:{topLeft:Math.max(0,s.topLeft-Math.max(o.t,o.l)),topRight:Math.max(0,s.topRight-Math.max(o.t,o.r)),bottomLeft:Math.max(0,s.bottomLeft-Math.max(o.b,o.l)),bottomRight:Math.max(0,s.bottomRight-Math.max(o.b,o.r))}}}}function No(t,e,i,n){const o=null===e,s=null===i,a=t&&!(o&&s)&&zo(t,n);return a&&(o||e>=a.left&&e\u003C=a.right)&&(s||i>=a.top&&i\u003C=a.bottom)}function jo(t,e){t.rect(e.x,e.y,e.w,e.h)}Io.id=\"point\",Io.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0},Io.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};class $o extends Ei{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this.options,{inner:i,outer:n}=Ho(this),o=(s=n.radius).topLeft||s.topRight||s.bottomLeft||s.bottomRight?ie:jo;var s;t.save(),n.w===i.w&&n.h===i.h||(t.beginPath(),o(t,n),t.clip(),o(t,i),t.fillStyle=e.borderColor,t.fill(\"evenodd\")),t.beginPath(),o(t,i),t.fillStyle=e.backgroundColor,t.fill(),t.restore()}inRange(t,e,i){return No(this,t,e,i)}inXRange(t,e){return No(this,t,null,e)}inYRange(t,e){return No(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:n,horizontal:o}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:o?(e+n)\u002F2:e,y:o?i:(i+n)\u002F2}}getRange(t){return\"x\"===t?this.width\u002F2:this.height\u002F2}}$o.id=\"bar\",$o.defaults={borderSkipped:\"start\",borderWidth:0,borderRadius:0,enableBorderRadius:!0,pointStyle:void 0},$o.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};var Yo=Object.freeze({__proto__:null,ArcElement:ko,LineElement:Lo,PointElement:Io,BarElement:$o});function Uo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,\"data\",{value:e})}}function Xo(t){t.data.datasets.forEach((t=>{Uo(t)}))}var qo={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Xo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:s,indexAxis:a}=e,r=t.getDatasetMeta(o),l=s||e.data;if(\"y\"===Ve([a,t.options.indexAxis]))return;if(\"line\"!==r.type)return;const c=t.scales[r.xAxisID];if(\"linear\"!==c.type&&\"time\"!==c.type)return;if(t.options.parsing)return;let h,{start:d,count:u}=function(t,e){const i=e.length;let n,o=0;const{iScale:s}=t,{min:a,max:r,minDefined:l,maxDefined:c}=s.getUserBounds();return l&&(o=Nt(oe(e,s.axis,a).lo,0,i-1)),n=c?Nt(oe(e,s.axis,r).hi+1,o,i)-o:i-o,{start:o,count:n}}(r,l);if(u\u003C=4*n)Uo(e);else{switch($(s)&&(e._data=l,delete e.data,Object.defineProperty(e,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case\"lttb\":h=function(t,e,i,n,o){const s=o.samples||n;if(s>=i)return t.slice(e,e+i);const a=[],r=(i-2)\u002F(s-2);let l=0;const c=e+i-1;let h,d,u,f,g,p=e;for(a[l++]=t[p],h=0;h\u003Cs-2;h++){let n,o=0,s=0;const c=Math.floor((h+1)*r)+1+e,m=Math.min(Math.floor((h+2)*r)+1,i)+e,x=m-c;for(n=c;n\u003Cm;n++)o+=t[n].x,s+=t[n].y;o\u002F=x,s\u002F=x;const b=Math.floor(h*r)+1+e,_=Math.floor((h+1)*r)+1+e,{x:y,y:v}=t[p];for(u=f=-1,n=b;n\u003C_;n++)f=.5*Math.abs((y-o)*(t[n].y-v)-(y-t[n].x)*(s-v)),f>u&&(u=f,d=t[n],g=n);a[l++]=d,p=g}return a[l++]=t[c],a}(l,d,u,n,i);break;case\"min-max\":h=function(t,e,i,n){let o,s,a,r,l,c,h,d,u,f,g=0,p=0;const m=[],x=e+i-1,b=t[e].x,_=t[x].x-b;for(o=e;o\u003Ce+i;++o){s=t[o],a=(s.x-b)\u002F_*n,r=s.y;const e=0|a;if(e===l)r\u003Cu?(u=r,c=o):r>f&&(f=r,h=o),g=(p*g+s.x)\u002F++p;else{const i=o-1;if(!$(c)&&!$(h)){const e=Math.min(c,h),n=Math.max(c,h);e!==d&&e!==i&&m.push({...t[e],x:g}),n!==d&&n!==i&&m.push({...t[n],x:g})}o>0&&i!==d&&m.push(t[i]),m.push(s),l=e,p=0,u=f=r,c=h=d=o}}return m}(l,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=h}}))},destroy(t){Xo(t)}};function Ko(t,e,i){const n=function(t){const e=t.options,i=e.fill;let n=K(i&&i.target,i);return void 0===n&&(n=!!e.backgroundColor),!1!==n&&null!==n&&(!0===n?\"origin\":n)}(t);if(U(n))return!isNaN(n.value)&&n;let o=parseFloat(n);return X(o)&&Math.floor(o)===o?(\"-\"!==n[0]&&\"+\"!==n[0]||(o=e+o),!(o===e||o\u003C0||o>=i)&&o):[\"origin\",\"start\",\"end\",\"stack\"].indexOf(n)>=0&&n}class Go{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:n,y:o,radius:s}=this;return e=e||{start:0,end:_t},t.arc(n,o,s,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:n}=this,o=t.angle;return{x:e+Math.cos(o)*n,y:i+Math.sin(o)*n,angle:o}}}function Zo(t){return(t.scale||{}).getPointPositionForValue?function(t){const{scale:e,fill:i}=t,n=e.options,o=e.getLabels().length,s=[],a=n.reverse?e.max:e.min,r=n.reverse?e.min:e.max;let l,c,h;if(h=\"start\"===i?a:\"end\"===i?r:U(i)?i.value:e.getBaseValue(),n.grid.circular)return c=e.getPointPositionForValue(0,a),new Go({x:c.x,y:c.y,radius:e.getDistanceFromCenterForValue(h)});for(l=0;l\u003Co;++l)s.push(e.getPointPositionForValue(l,h));return s}(t):function(t){const{scale:e={},fill:i}=t;let n,o=null;return\"start\"===i?o=e.bottom:\"end\"===i?o=e.top:U(i)?o=e.getPixelForValue(i.value):e.getBasePixel&&(o=e.getBasePixel()),X(o)?(n=e.isHorizontal(),{x:n?o:null,y:n?null:o}):null}(t)}function Qo(t){const{chart:e,scale:i,index:n,line:o}=t,s=[],a=o.segments,r=o.points,l=function(t,e){const i=[],n=t.getSortedVisibleDatasetMetas();for(let t=0;t\u003Cn.length;t++){const o=n[t];if(o.index===e)break;Jo(o)&&i.unshift(o.dataset)}return i}(e,n);l.push(is({x:null,y:i.bottom},o));for(let t=0;t\u003Ca.length;t++){const e=a[t];for(let t=e.start;t\u003C=e.end;t++)ts(s,r[t],l)}return new Lo({points:s,options:{}})}const Jo=t=>\"line\"===t.type&&!t.hidden;function ts(t,e,i){const n=[];for(let o=0;o\u003Ci.length;o++){const s=i[o],{first:a,last:r,point:l}=es(s,e,\"x\");if(!(!l||a&&r))if(a)n.unshift(l);else if(t.push(l),!r)break}t.push(...n)}function es(t,e,i){const n=t.interpolate(e,i);if(!n)return{};const o=n[i],s=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t\u003Cs.length;t++){const e=s[t],n=a[e.start][i],c=a[e.end][i];if(o>=n&&o\u003C=c){r=o===n,l=o===c;break}}return{first:r,last:l,point:n}}function is(t,e){let i=[],n=!1;return Y(t)?(n=!0,i=t):i=function(t,e){const{x:i=null,y:n=null}=t||{},o=e.points,s=[];return e.segments.forEach((t=>{const e=o[t.start],a=o[t.end];null!==n?(s.push({x:e.x,y:n}),s.push({x:a.x,y:n})):null!==i&&(s.push({x:i,y:e.y}),s.push({x:i,y:a.y}))})),s}(t,e),i.length?new Lo({points:i,options:{tension:0},_loop:n,_fullLoop:n}):null}function ns(t,e,i){let n=t[e].fill;const o=[e];let s;if(!i)return n;for(;!1!==n&&-1===o.indexOf(n);){if(!X(n))return n;if(s=t[n],!s)return!1;if(s.visible)return n;o.push(n),n=s.fill}return!1}function os(t,e,i){t.beginPath(),e.path(t),t.lineTo(e.last().x,i),t.lineTo(e.first().x,i),t.closePath(),t.clip()}function ss(t,e,i,n){if(n)return;let o=e[t],s=i[t];return\"angle\"===t&&(o=Wt(o),s=Wt(s)),{property:t,start:o,end:s}}function as(t,e,i,n){return t&&e?n(t[i],e[i]):t?t[i]:e?e[i]:0}function rs(t,e,i){const{top:n,bottom:o}=e.chart.chartArea,{property:s,start:a,end:r}=i||{};\"x\"===s&&(t.beginPath(),t.rect(a,n,r-a,o-n),t.clip())}function ls(t,e,i,n){const o=e.interpolate(i,n);o&&t.lineTo(o.x,o.y)}function cs(t,e){const{line:i,target:n,property:o,color:s,scale:a}=e,r=function(t,e,i){const n=t.segments,o=t.points,s=e.points,a=[];for(const t of n){const n=ss(i,o[t.start],o[t.end],t.loop);if(!e.segments){a.push({source:t,target:n,start:o[t.start],end:o[t.end]});continue}const r=Mn(e,n);for(const e of r){const r=ss(i,s[e.start],s[e.end],e.loop),l=wn(t,o,r);for(const t of l)a.push({source:t,target:e,start:{[i]:as(n,r,\"start\",Math.max)},end:{[i]:as(n,r,\"end\",Math.min)}})}}return a}(i,n,o);for(const{source:e,target:l,start:c,end:h}of r){const{style:{backgroundColor:r=s}={}}=e;t.save(),t.fillStyle=r,rs(t,a,ss(o,c,h)),t.beginPath();const d=!!i.pathSegment(t,e);d?t.closePath():ls(t,n,h,o);const u=!!n.pathSegment(t,l,{move:d,reverse:!0}),f=d&&u;f||ls(t,n,c,o),t.closePath(),t.fill(f?\"evenodd\":\"nonzero\"),t.restore()}}function hs(t,e,i){const n=function(t){const{chart:e,fill:i,line:n}=t;if(X(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if(\"stack\"===i)return Qo(t);const o=Zo(t);return o instanceof Go?o:is(o,n)}(e),{line:o,scale:s,axis:a}=e,r=o.options,l=r.fill,c=r.backgroundColor,{above:h=c,below:d=c}=l||{};n&&o.points.length&&(Zt(t,i),function(t,e){const{line:i,target:n,above:o,below:s,area:a,scale:r}=e,l=i._loop?\"angle\":e.axis;t.save(),\"x\"===l&&s!==o&&(os(t,n,a.top),cs(t,{line:i,target:n,color:o,scale:r,property:l}),t.restore(),t.save(),os(t,n,a.bottom)),cs(t,{line:i,target:n,color:s,scale:r,property:l}),t.restore()}(t,{line:o,target:n,above:h,below:d,area:i,scale:s,axis:a}),Qt(t))}var ds={id:\"filler\",afterDatasetsUpdate(t,e,i){const n=(t.data.datasets||[]).length,o=[];let s,a,r,l;for(a=0;a\u003Cn;++a)s=t.getDatasetMeta(a),r=s.dataset,l=null,r&&r.options&&r instanceof Lo&&(l={visible:t.isDatasetVisible(a),index:a,fill:Ko(r,a,n),chart:t,axis:s.controller.options.indexAxis,scale:s.vScale,line:r}),s.$filler=l,o.push(l);for(a=0;a\u003Cn;++a)l=o[a],l&&!1!==l.fill&&(l.fill=ns(o,a,i.propagate))},beforeDraw(t,e,i){const n=\"beforeDraw\"===i.drawTime,o=t.getSortedVisibleDatasetMetas(),s=t.chartArea;for(let e=o.length-1;e>=0;--e){const i=o[e].$filler;i&&(i.line.updateControlPoints(s),n&&hs(t.ctx,i,s))}},beforeDatasetsDraw(t,e,i){if(\"beforeDatasetsDraw\"!==i.drawTime)return;const n=t.getSortedVisibleDatasetMetas();for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&hs(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const n=e.meta.$filler;n&&!1!==n.fill&&\"beforeDatasetDraw\"===i.drawTime&&hs(t.ctx,n,t.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}};const us=(t,e)=>{let{boxHeight:i=e,boxWidth:n=e}=t;return t.usePointStyle&&(i=Math.min(i,e),n=Math.min(n,e)),{boxWidth:n,boxHeight:i,itemHeight:Math.max(e,i)}};class fs extends Ei{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){const n=this;n.maxWidth=t,n.maxHeight=e,n._margins=i,n.setDimensions(),n.buildLabels(),n.fit()}setDimensions(){const t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height)}buildLabels(){const t=this,e=t.options.labels||{};let i=Q(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter((i=>e.filter(i,t.chart.data)))),e.sort&&(i=i.sort(((i,n)=>e.sort(i,n,t.chart.data)))),t.options.reverse&&i.reverse(),t.legendItems=i}fit(){const t=this,{options:e,ctx:i}=t;if(!e.display)return void(t.width=t.height=0);const n=e.labels,o=Fe(n.font),s=o.size,a=t._computeTitleHeight(),{boxWidth:r,itemHeight:l}=us(n,s);let c,h;i.font=o.string,t.isHorizontal()?(c=t.maxWidth,h=t._fitRows(a,s,r,l)+10):(h=t.maxHeight,c=t._fitCols(a,s,r,l)+10),t.width=Math.min(c,e.maxWidth||t.maxWidth),t.height=Math.min(h,e.maxHeight||t.maxHeight)}_fitRows(t,e,i,n){const o=this,{ctx:s,maxWidth:a,options:{labels:{padding:r}}}=o,l=o.legendHitBoxes=[],c=o.lineWidths=[0],h=n+r;let d=t;s.textAlign=\"left\",s.textBaseline=\"middle\";let u=-1,f=-h;return o.legendItems.forEach(((t,o)=>{const g=i+e\u002F2+s.measureText(t.text).width;(0===o||c[c.length-1]+g+2*r>a)&&(d+=h,c[c.length-(o>0?0:1)]=0,f+=h,u++),l[o]={left:0,top:f,row:u,width:g,height:n},c[c.length-1]+=g+r})),d}_fitCols(t,e,i,n){const o=this,{ctx:s,maxHeight:a,options:{labels:{padding:r}}}=o,l=o.legendHitBoxes=[],c=o.columnSizes=[],h=a-t;let d=r,u=0,f=0,g=0,p=0,m=0;return o.legendItems.forEach(((t,o)=>{const a=i+e\u002F2+s.measureText(t.text).width;o>0&&f+e+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,m++,p=0,u=f=0),u=Math.max(u,a),f+=e+r,l[o]={left:g,top:p,col:m,width:a,height:n},p+=n+r})),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){const t=this;if(!t.options.display)return;const e=t._computeTitleHeight(),{legendHitBoxes:i,options:{align:n,labels:{padding:s}}}=t;if(this.isHorizontal()){let a=0,r=o(n,t.left+s,t.right-t.lineWidths[a]);for(const l of i)a!==l.row&&(a=l.row,r=o(n,t.left+s,t.right-t.lineWidths[a])),l.top+=t.top+e+s,l.left=r,r+=l.width+s}else{let a=0,r=o(n,t.top+e+s,t.bottom-t.columnSizes[a].height);for(const l of i)l.col!==a&&(a=l.col,r=o(n,t.top+e+s,t.bottom-t.columnSizes[a].height)),l.top=r,l.left+=t.left+s,r+=l.height+s}}isHorizontal(){return\"top\"===this.options.position||\"bottom\"===this.options.position}draw(){const t=this;if(t.options.display){const e=t.ctx;Zt(e,t),t._draw(),Qt(e)}}_draw(){const t=this,{options:e,columnSizes:i,lineWidths:n,ctx:a}=t,{align:r,labels:l}=e,c=xt.color,h=xn(e.rtl,t.left,t.width),d=Fe(l.font),{color:u,padding:f}=l,g=d.size,p=g\u002F2;let m;t.drawTitle(),a.textAlign=h.textAlign(\"left\"),a.textBaseline=\"middle\",a.lineWidth=.5,a.font=d.string;const{boxWidth:x,boxHeight:b,itemHeight:_}=us(l,g),y=t.isHorizontal(),v=this._computeTitleHeight();m=y?{x:o(r,t.left+f,t.right-n[0]),y:t.top+f+v,line:0}:{x:t.left+f,y:o(r,t.top+v+f,t.bottom-i[0].height),line:0},bn(t.ctx,e.textDirection);const w=_+f;t.legendItems.forEach(((e,M)=>{a.strokeStyle=e.fontColor||u,a.fillStyle=e.fontColor||u;const k=a.measureText(e.text).width,S=h.textAlign(e.textAlign||(e.textAlign=l.textAlign)),P=x+g\u002F2+k;let D=m.x,C=m.y;h.setWidth(t.width),y?M>0&&D+P+f>t.right&&(C=m.y+=w,m.line++,D=m.x=o(r,t.left+f,t.right-n[m.line])):M>0&&C+w>t.bottom&&(D=m.x=D+i[m.line].width+f,m.line++,C=m.y=o(r,t.top+v+f,t.bottom-i[m.line].height));!function(t,e,i){if(isNaN(x)||x\u003C=0||isNaN(b)||b\u003C0)return;a.save();const n=K(i.lineWidth,1);if(a.fillStyle=K(i.fillStyle,c),a.lineCap=K(i.lineCap,\"butt\"),a.lineDashOffset=K(i.lineDashOffset,0),a.lineJoin=K(i.lineJoin,\"miter\"),a.lineWidth=n,a.strokeStyle=K(i.strokeStyle,c),a.setLineDash(K(i.lineDash,[])),l.usePointStyle){const o={radius:x*Math.SQRT2\u002F2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},s=h.xPlus(t,x\u002F2);Kt(a,o,s,e+p)}else{const o=e+Math.max((g-b)\u002F2,0),s=h.leftForLtr(t,x),r=Ie(i.borderRadius);a.beginPath(),Object.values(r).some((t=>0!==t))?ie(a,{x:s,y:o,w:x,h:b,radius:r}):a.rect(s,o,x,b),a.fill(),0!==n&&a.stroke()}a.restore()}(h.x(D),C,e),D=s(S,D+x+p,t.right),function(t,e,i){ee(a,i.text,t,e+_\u002F2,d,{strikethrough:i.hidden,textAlign:i.textAlign})}(h.x(D),C,e),y?m.x+=P+f:m.y+=w})),_n(t.ctx,e.textDirection)}drawTitle(){const t=this,e=t.options,i=e.title,s=Fe(i.font),a=ze(i.padding);if(!i.display)return;const r=xn(e.rtl,t.left,t.width),l=t.ctx,c=i.position,h=s.size\u002F2,d=a.top+h;let u,f=t.left,g=t.width;if(this.isHorizontal())g=Math.max(...t.lineWidths),u=t.top+d,f=o(e.align,f,t.right-g);else{const i=t.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);u=d+o(e.align,t.top,t.bottom-i-e.labels.padding-t._computeTitleHeight())}const p=o(c,f,f+g);l.textAlign=r.textAlign(n(c)),l.textBaseline=\"middle\",l.strokeStyle=i.color,l.fillStyle=i.color,l.font=s.string,ee(l,i.text,p,u,s)}_computeTitleHeight(){const t=this.options.title,e=Fe(t.font),i=ze(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){const i=this;let n,o,s;if(t>=i.left&&t\u003C=i.right&&e>=i.top&&e\u003C=i.bottom)for(s=i.legendHitBoxes,n=0;n\u003Cs.length;++n)if(o=s[n],t>=o.left&&t\u003C=o.left+o.width&&e>=o.top&&e\u003C=o.top+o.height)return i.legendItems[n];return null}handleEvent(t){const e=this,i=e.options;if(!function(t,e){if(\"mousemove\"===t&&(e.onHover||e.onLeave))return!0;if(e.onClick&&(\"click\"===t||\"mouseup\"===t))return!0;return!1}(t.type,i))return;const n=e._getLegendItemAt(t.x,t.y);if(\"mousemove\"===t.type){const a=e._hoveredItem,r=(s=n,null!==(o=a)&&null!==s&&o.datasetIndex===s.datasetIndex&&o.index===s.index);a&&!r&&Q(i.onLeave,[t,a,e],e),e._hoveredItem=n,n&&!r&&Q(i.onHover,[t,n,e],e)}else n&&Q(i.onClick,[t,n,e],e);var o,s}}var gs={id:\"legend\",_element:fs,start(t,e,i){const n=t.legend=new fs({ctx:t.ctx,options:i,chart:t});Ge.configure(t,n,i),Ge.addBox(t,n)},stop(t){Ge.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const n=t.legend;Ge.configure(t,n,i),n.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const n=e.datasetIndex,o=i.chart;o.isDatasetVisible(n)?(o.hide(n),e.hidden=!0):(o.show(n),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:n,textAlign:o,color:s}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=ze(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:s,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)\u002F4,strokeStyle:a.borderColor,pointStyle:n||a.pointStyle,rotation:a.rotation,textAlign:o||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:t=>!t.startsWith(\"on\"),labels:{_scriptable:t=>![\"generateLabels\",\"filter\",\"sort\"].includes(t)}}};class ps extends Ei{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this,n=i.options;if(i.left=0,i.top=0,!n.display)return void(i.width=i.height=i.right=i.bottom=0);i.width=i.right=t,i.height=i.bottom=e;const o=Y(n.text)?n.text.length:1;i._padding=ze(n.padding);const s=o*Fe(n.font).lineHeight+i._padding.height;i.isHorizontal()?i.height=s:i.width=s}isHorizontal(){const t=this.options.position;return\"top\"===t||\"bottom\"===t}_drawArgs(t){const{top:e,left:i,bottom:n,right:s,options:a}=this,r=a.align;let l,c,h,d=0;return this.isHorizontal()?(c=o(r,i,s),h=e+t,l=s-i):(\"left\"===a.position?(c=i+t,h=o(r,n,e),d=-.5*bt):(c=s-t,h=o(r,e,n),d=.5*bt),l=n-e),{titleX:c,titleY:h,maxWidth:l,rotation:d}}draw(){const t=this,e=t.ctx,i=t.options;if(!i.display)return;const o=Fe(i.font),s=o.lineHeight\u002F2+t._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=t._drawArgs(s);ee(e,i.text,0,0,o,{color:i.color,maxWidth:l,rotation:c,textAlign:n(i.align),textBaseline:\"middle\",translation:[a,r]})}}var ms={id:\"title\",_element:ps,start(t,e,i){!function(t,e){const i=new ps({ctx:t.ctx,options:e,chart:t});Ge.configure(t,i,e),Ge.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Ge.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const n=t.titleBlock;Ge.configure(t,n,i),n.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const xs={average(t){if(!t.length)return!1;let e,i,n=0,o=0,s=0;for(e=0,i=t.length;e\u003Ci;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();n+=t.x,o+=t.y,++s}}return{x:n\u002Fs,y:o\u002Fs}},nearest(t,e){if(!t.length)return!1;let i,n,o,s=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i\u003Cn;++i){const n=t[i].element;if(n&&n.hasValue()){const t=Vt(e,n.getCenterPoint());t\u003Cr&&(r=t,o=n)}}if(o){const t=o.tooltipPosition();s=t.x,a=t.y}return{x:s,y:a}}};function bs(t,e){return e&&(Y(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function _s(t){return(\"string\"==typeof t||t instanceof String)&&t.indexOf(\"\\n\")>-1?t.split(\"\\n\"):t}function ys(t,e){const{element:i,datasetIndex:n,index:o}=e,s=t.getDatasetMeta(n).controller,{label:a,value:r}=s.getLabelAndValue(o);return{chart:t,label:a,parsed:s.getParsed(o),raw:t.data.datasets[n].data[o],formattedValue:r,dataset:s.getDataset(),dataIndex:o,datasetIndex:n,element:i}}function vs(t,e){const i=t._chart.ctx,{body:n,footer:o,title:s}=t,{boxWidth:a,boxHeight:r}=e,l=Fe(e.bodyFont),c=Fe(e.titleFont),h=Fe(e.footerFont),d=s.length,u=o.length,f=n.length,g=ze(e.padding);let p=g.height,m=0,x=n.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-f)*l.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*h.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=c.string,J(t.title,_),i.font=l.string,J(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2:0,J(n,(t=>{J(t.before,_),J(t.lines,_),J(t.after,_)})),b=0,i.font=h.string,J(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function ws(t,e,i,n){const{x:o,width:s}=i,{width:a,chartArea:{left:r,right:l}}=t;let c=\"center\";return\"center\"===n?c=o\u003C=(r+l)\u002F2?\"left\":\"right\":o\u003C=s\u002F2?c=\"left\":o>=a-s\u002F2&&(c=\"right\"),function(t,e,i,n){const{x:o,width:s}=n,a=i.caretSize+i.caretPadding;return\"left\"===t&&o+s+a>e.width||\"right\"===t&&o-s-a\u003C0||void 0}(c,t,e,i)&&(c=\"center\"),c}function Ms(t,e,i){const n=e.yAlign||function(t,e){const{y:i,height:n}=e;return i\u003Cn\u002F2?\"top\":i>t.height-n\u002F2?\"bottom\":\"center\"}(t,i);return{xAlign:e.xAlign||ws(t,e,i,n),yAlign:n}}function ks(t,e,i,n){const{caretSize:o,caretPadding:s,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,c=o+s,h=a+s;let d=function(t,e){let{x:i,width:n}=t;return\"right\"===e?i-=n:\"center\"===e&&(i-=n\u002F2),i}(e,r);const u=function(t,e,i){let{y:n,height:o}=t;return\"top\"===e?n+=i:n-=\"bottom\"===e?o+i:o\u002F2,n}(e,l,c);return\"center\"===l?\"left\"===r?d+=c:\"right\"===r&&(d-=c):\"left\"===r?d-=h:\"right\"===r&&(d+=h),{x:Nt(d,0,n.width-e.width),y:Nt(u,0,n.height-e.height)}}function Ss(t,e,i){const n=ze(i.padding);return\"center\"===e?t.x+t.width\u002F2:\"right\"===e?t.x+t.width-n.right:t.x+n.left}function Ps(t){return bs([],_s(t))}function Ds(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class Cs extends Ei{constructor(t){super(),this.opacity=0,this._active=[],this._chart=t._chart,this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this,e=t._cachedAnimations;if(e)return e;const i=t._chart,n=t.options.setContext(t.getContext()),o=n.enabled&&i.options.animation&&n.animations,s=new vi(t._chart,o);return o._cacheable&&(t._cachedAnimations=Object.freeze(s)),s}getContext(){const t=this;return t.$context||(t.$context=(e=t._chart.getContext(),i=t,n=t._tooltipItems,Object.assign(Object.create(e),{tooltip:i,tooltipItems:n,type:\"tooltip\"})));var e,i,n}getTitle(t,e){const i=this,{callbacks:n}=e,o=n.beforeTitle.apply(i,[t]),s=n.title.apply(i,[t]),a=n.afterTitle.apply(i,[t]);let r=[];return r=bs(r,_s(o)),r=bs(r,_s(s)),r=bs(r,_s(a)),r}getBeforeBody(t,e){return Ps(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const i=this,{callbacks:n}=e,o=[];return J(t,(t=>{const e={before:[],lines:[],after:[]},s=Ds(n,t);bs(e.before,_s(s.beforeLabel.call(i,t))),bs(e.lines,s.label.call(i,t)),bs(e.after,_s(s.afterLabel.call(i,t))),o.push(e)})),o}getAfterBody(t,e){return Ps(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const i=this,{callbacks:n}=e,o=n.beforeFooter.apply(i,[t]),s=n.footer.apply(i,[t]),a=n.afterFooter.apply(i,[t]);let r=[];return r=bs(r,_s(o)),r=bs(r,_s(s)),r=bs(r,_s(a)),r}_createItems(t){const e=this,i=e._active,n=e._chart.data,o=[],s=[],a=[];let r,l,c=[];for(r=0,l=i.length;r\u003Cl;++r)c.push(ys(e._chart,i[r]));return t.filter&&(c=c.filter(((e,i,o)=>t.filter(e,i,o,n)))),t.itemSort&&(c=c.sort(((e,i)=>t.itemSort(e,i,n)))),J(c,(i=>{const n=Ds(t.callbacks,i);o.push(n.labelColor.call(e,i)),s.push(n.labelPointStyle.call(e,i)),a.push(n.labelTextColor.call(e,i))})),e.labelColors=o,e.labelPointStyles=s,e.labelTextColors=a,e.dataPoints=c,c}update(t,e){const i=this,n=i.options.setContext(i.getContext()),o=i._active;let s,a=[];if(o.length){const t=xs[n.position].call(i,o,i._eventPosition);a=i._createItems(n),i.title=i.getTitle(a,n),i.beforeBody=i.getBeforeBody(a,n),i.body=i.getBody(a,n),i.afterBody=i.getAfterBody(a,n),i.footer=i.getFooter(a,n);const e=i._size=vs(i,n),r=Object.assign({},t,e),l=Ms(i._chart,n,r),c=ks(n,r,l,i._chart);i.xAlign=l.xAlign,i.yAlign=l.yAlign,s={opacity:1,x:c.x,y:c.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==i.opacity&&(s={opacity:0});i._tooltipItems=a,i.$context=void 0,s&&i._resolveAnimations().update(i,s),t&&n.external&&n.external.call(i,{chart:i._chart,tooltip:i,replay:e})}drawCaret(t,e,i,n){const o=this.getCaretPosition(t,i,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){const{xAlign:n,yAlign:o}=this,{cornerRadius:s,caretSize:a}=i,{x:r,y:l}=t,{width:c,height:h}=e;let d,u,f,g,p,m;return\"center\"===o?(p=l+h\u002F2,\"left\"===n?(d=r,u=d-a,g=p+a,m=p-a):(d=r+c,u=d+a,g=p-a,m=p+a),f=d):(u=\"left\"===n?r+s+a:\"right\"===n?r+c-s-a:this.caretX,\"top\"===o?(g=l,p=g-a,d=u-a,f=u+a):(g=l+h,p=g+a,d=u+a,f=u-a),m=g),{x1:d,x2:u,x3:f,y1:g,y2:p,y3:m}}drawTitle(t,e,i){const n=this,o=n.title,s=o.length;let a,r,l;if(s){const c=xn(i.rtl,n.x,n.width);for(t.x=Ss(n,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline=\"middle\",a=Fe(i.titleFont),r=i.titleSpacing,e.fillStyle=i.titleColor,e.font=a.string,l=0;l\u003Cs;++l)e.fillText(o[l],c.x(t.x),t.y+a.lineHeight\u002F2),t.y+=a.lineHeight+r,l+1===s&&(t.y+=i.titleMarginBottom-r)}}_drawColorBox(t,e,i,n,o){const s=this,a=s.labelColors[i],r=s.labelPointStyles[i],{boxHeight:l,boxWidth:c}=o,h=Fe(o.bodyFont),d=Ss(s,\"left\",o),u=n.x(d),f=l\u003Ch.lineHeight?(h.lineHeight-l)\u002F2:0,g=e.y+f;if(o.usePointStyle){const e={radius:Math.min(c,l)\u002F2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},i=n.leftForLtr(u,c)+c\u002F2,s=g+l\u002F2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Kt(t,e,i,s),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Kt(t,e,i,s)}else{t.lineWidth=a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;const e=n.leftForLtr(u,c),i=n.leftForLtr(n.xPlus(u,1),c-2),s=Ie(a.borderRadius);Object.values(s).some((t=>0!==t))?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ie(t,{x:e,y:g,w:c,h:l,radius:s}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ie(t,{x:i,y:g+1,w:c-2,h:l-2,radius:s}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(e,g,c,l),t.strokeRect(e,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,c-2,l-2))}t.fillStyle=s.labelTextColors[i]}drawBody(t,e,i){const n=this,{body:o}=n,{bodySpacing:s,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c}=i,h=Fe(i.bodyFont);let d=h.lineHeight,u=0;const f=xn(i.rtl,n.x,n.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d\u002F2),t.y+=d+s},p=f.textAlign(a);let m,x,b,_,y,v,w;for(e.textAlign=a,e.textBaseline=\"middle\",e.font=h.string,t.x=Ss(n,p,i),e.fillStyle=i.bodyColor,J(n.beforeBody,g),u=r&&\"right\"!==p?\"center\"===a?c\u002F2+1:c+2:0,_=0,v=o.length;_\u003Cv;++_){for(m=o[_],x=n.labelTextColors[_],e.fillStyle=x,J(m.before,g),b=m.lines,r&&b.length&&(n._drawColorBox(e,t,_,f,i),d=Math.max(h.lineHeight,l)),y=0,w=b.length;y\u003Cw;++y)g(b[y]),d=h.lineHeight;J(m.after,g)}u=0,d=h.lineHeight,J(n.afterBody,g),t.y-=s}drawFooter(t,e,i){const n=this,o=n.footer,s=o.length;let a,r;if(s){const l=xn(i.rtl,n.x,n.width);for(t.x=Ss(n,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=l.textAlign(i.footerAlign),e.textBaseline=\"middle\",a=Fe(i.footerFont),e.fillStyle=i.footerColor,e.font=a.string,r=0;r\u003Cs;++r)e.fillText(o[r],l.x(t.x),t.y+a.lineHeight\u002F2),t.y+=a.lineHeight+i.footerSpacing}}drawBackground(t,e,i,n){const{xAlign:o,yAlign:s}=this,{x:a,y:r}=t,{width:l,height:c}=i,h=n.cornerRadius;e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.beginPath(),e.moveTo(a+h,r),\"top\"===s&&this.drawCaret(t,e,i,n),e.lineTo(a+l-h,r),e.quadraticCurveTo(a+l,r,a+l,r+h),\"center\"===s&&\"right\"===o&&this.drawCaret(t,e,i,n),e.lineTo(a+l,r+c-h),e.quadraticCurveTo(a+l,r+c,a+l-h,r+c),\"bottom\"===s&&this.drawCaret(t,e,i,n),e.lineTo(a+h,r+c),e.quadraticCurveTo(a,r+c,a,r+c-h),\"center\"===s&&\"left\"===o&&this.drawCaret(t,e,i,n),e.lineTo(a,r+h),e.quadraticCurveTo(a,r,a+h,r),e.closePath(),e.fill(),n.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this,i=e._chart,n=e.$animations,o=n&&n.x,s=n&&n.y;if(o||s){const n=xs[t.position].call(e,e._active,e._eventPosition);if(!n)return;const a=e._size=vs(e,t),r=Object.assign({},n,e._size),l=Ms(i,t,r),c=ks(t,r,l,i);o._to===c.x&&s._to===c.y||(e.xAlign=l.xAlign,e.yAlign=l.yAlign,e.width=a.width,e.height=a.height,e.caretX=n.x,e.caretY=n.y,e._resolveAnimations().update(e,c))}}draw(t){const e=this,i=e.options.setContext(e.getContext());let n=e.opacity;if(!n)return;e._updateAnimationTarget(i);const o={width:e.width,height:e.height},s={x:e.x,y:e.y};n=Math.abs(n)\u003C.001?0:n;const a=ze(i.padding),r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;i.enabled&&r&&(t.save(),t.globalAlpha=n,e.drawBackground(s,t,o,i),bn(t,i.textDirection),s.y+=a.top,e.drawTitle(s,t,i),e.drawBody(s,t,i),e.drawFooter(s,t,i),_n(t,i.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this,n=i._active,o=t.map((({datasetIndex:t,index:e})=>{const n=i._chart.getDatasetMeta(t);if(!n)throw new Error(\"Cannot find a dataset at index \"+t);return{datasetIndex:t,element:n.data[e],index:e}})),s=!tt(n,o),a=i._positionChanged(o,e);(s||a)&&(i._active=o,i._eventPosition=e,i.update(!0))}handleEvent(t,e){const i=this,n=i.options,o=i._active||[];let s=!1,a=[];\"mouseout\"!==t.type&&(a=i._chart.getElementsAtEventForMode(t,n.mode,n,e),n.reverse&&a.reverse());const r=i._positionChanged(a,t);return s=e||!tt(a,o)||r,s&&(i._active=a,(n.enabled||n.external)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0,e))),s}_positionChanged(t,e){const{caretX:i,caretY:n,options:o}=this,s=xs[o.position].call(this,t,e);return!1!==s&&(i!==s.x||n!==s.y)}}Cs.positioners=xs;var Os={id:\"tooltip\",_element:Cs,positioners:xs,afterInit(t,e,i){i&&(t.tooltip=new Cs({_chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip,i={tooltip:e};!1!==t.notifyPlugins(\"beforeTooltipDraw\",i)&&(e&&e.draw(t.ctx),t.notifyPlugins(\"afterTooltipDraw\",i))},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:{beforeTitle:N,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,n=i?i.length:0;if(this&&this.options&&\"dataset\"===this.options.mode)return e.dataset.label||\"\";if(e.label)return e.label;if(n>0&&e.dataIndex\u003Cn)return i[e.dataIndex]}return\"\"},afterTitle:N,beforeBody:N,beforeLabel:N,label(t){if(this&&this.options&&\"dataset\"===this.options.mode)return t.label+\": \"+t.formattedValue||t.formattedValue;let e=t.dataset.label||\"\";e&&(e+=\": \");const i=t.formattedValue;return $(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:N,afterBody:N,beforeFooter:N,footer:N,afterFooter:N}},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:t=>\"filter\"!==t&&\"itemSort\"!==t&&\"external\"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},As=Object.freeze({__proto__:null,Decimation:qo,Filler:ds,Legend:gs,Title:ms,Tooltip:Os});function Ts(t,e,i){const n=t.indexOf(e);if(-1===n)return((t,e,i)=>\"string\"==typeof e?t.push(e)-1:isNaN(e)?null:i)(t,e,i);return n!==t.lastIndexOf(e)?i:n}class Rs extends Xi{constructor(t){super(t),this._startValue=void 0,this._valueRange=0}parse(t,e){if($(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Nt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Ts(i,t,K(e,t)),i.length-1)}determineDataLimits(){const t=this,{minDefined:e,maxDefined:i}=t.getUserBounds();let{min:n,max:o}=t.getMinMax(!0);\"ticks\"===t.options.bounds&&(e||(n=0),i||(o=t.getLabels().length-1)),t.min=n,t.max=o}buildTicks(){const t=this,e=t.min,i=t.max,n=t.options.offset,o=[];let s=t.getLabels();s=0===e&&i===s.length-1?s:s.slice(e,i+1),t._valueRange=Math.max(s.length-(n?0:1),1),t._startValue=t.min-(n?.5:0);for(let t=e;t\u003C=i;t++)o.push({value:t});return o}getLabelForValue(t){const e=this.getLabels();return t>=0&&t\u003Ce.length?e[t]:t}configure(){const t=this;super.configure(),t.isHorizontal()||(t._reversePixels=!t._reversePixels)}getPixelForValue(t){const e=this;return\"number\"!=typeof t&&(t=e.parse(t)),null===t?NaN:e.getPixelForDecimal((t-e._startValue)\u002Fe._valueRange)}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){const e=this;return Math.round(e._startValue+e.getDecimalForPixel(t)*e._valueRange)}getBasePixel(){return this.bottom}}Rs.id=\"category\",Rs.defaults={ticks:{callback:Rs.prototype.getLabelForValue}};class Ls extends Xi{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return $(t)||(\"number\"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const t=this,{beginAtZero:e,stacked:i}=t.options,{minDefined:n,maxDefined:o}=t.getUserBounds();let{min:s,max:a}=t;const r=t=>s=n?s:t,l=t=>a=o?a:t;if(e||i){const t=Dt(s),e=Dt(a);t\u003C0&&e\u003C0?l(0):t>0&&e>0&&r(0)}s===a&&(l(a+1),e||r(s-1)),t.min=s,t.max=a}getTickLimit(){const t=this,e=t.options.ticks;let i,{maxTicksLimit:n,stepSize:o}=e;return o?i=Math.ceil(t.max\u002Fo)-Math.floor(t.min\u002Fo)+1:(i=t.computeTickLimit(),n=n||11),n&&(i=Math.min(n,i)),i}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this,e=t.options,i=e.ticks;let n=t.getTickLimit();n=Math.max(2,n);const o=function(t,e){const i=[],{step:n,min:o,max:s,precision:a,count:r,maxTicks:l,maxDigits:c,horizontal:h}=t,d=n||1,u=l-1,{min:f,max:g}=e,p=!$(o),m=!$(s),x=!$(r),b=(g-f)\u002Fc;let _,y,v,w,M=Ct((g-f)\u002Fu\u002Fd)*d;if(M\u003C1e-14&&!p&&!m)return[{value:f},{value:g}];w=Math.ceil(g\u002FM)-Math.floor(f\u002FM),w>u&&(M=Ct(w*M\u002Fu\u002Fd)*d),$(a)||(_=Math.pow(10,a),M=Math.ceil(M*_)\u002F_),y=Math.floor(f\u002FM)*M,v=Math.ceil(g\u002FM)*M,p&&m&&n&&Rt((s-o)\u002Fn,M\u002F1e3)?(w=Math.min((s-o)\u002FM,l),M=(s-o)\u002Fw,y=o,v=s):x?(y=p?o:y,v=m?s:v,w=r-1,M=(v-y)\u002Fw):(w=(v-y)\u002FM,w=Tt(w,Math.round(w),M\u002F1e3)?Math.round(w):Math.ceil(w)),_=Math.pow(10,$(a)?zt(M):a),y=Math.round(y*_)\u002F_,v=Math.round(v*_)\u002F_;let k=0;for(p&&(i.push({value:o}),y\u003C=o&&k++,Tt(Math.round((y+k*M)*_)\u002F_,o,b*(h?(\"\"+o).length:1))&&k++);k\u003Cw;++k)i.push({value:Math.round((y+k*M)*_)\u002F_});return m?Tt(i[i.length-1].value,s,b*(h?(\"\"+s).length:1))?i[i.length-1].value=s:i.push({value:s}):i.push({value:v}),i}({maxTicks:n,min:e.min,max:e.max,precision:i.precision,step:i.stepSize,count:i.count,maxDigits:t._maxDigits(),horizontal:t.isHorizontal()},t._range||t);return\"ticks\"===e.bounds&&Lt(o,t,\"value\"),e.reverse?(o.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),o}configure(){const t=this,e=t.ticks;let i=t.min,n=t.max;if(super.configure(),t.options.offset&&e.length){const t=(n-i)\u002FMath.max(e.length-1,1)\u002F2;i-=t,n+=t}t._startValue=i,t._endValue=n,t._valueRange=n-i}getLabelForValue(t){return zi(t,this.chart.options.locale)}}class Es extends Ls{determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!0);t.min=X(e)?e:0,t.max=X(i)?i:1,t.handleTickRangeOptions()}computeTickLimit(){const t=this;if(t.isHorizontal())return Math.ceil(t.width\u002F40);const e=t._resolveTickFontOptions(0);return Math.ceil(t.height\u002Fe.lineHeight)}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function Is(t){return 1===t\u002FMath.pow(10,Math.floor(Pt(t)))}Es.id=\"linear\",Es.defaults={ticks:{callback:Vi.formatters.numeric}};class zs extends Xi{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Ls.prototype.parse.apply(this,[t,e]);if(0!==i)return X(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!0);t.min=X(e)?Math.max(0,e):null,t.max=X(i)?Math.max(0,i):null,t.options.beginAtZero&&(t._zero=!0),t.handleTickRangeOptions()}handleTickRangeOptions(){const t=this,{minDefined:e,maxDefined:i}=t.getUserBounds();let n=t.min,o=t.max;const s=t=>n=e?n:t,a=t=>o=i?o:t,r=(t,e)=>Math.pow(10,Math.floor(Pt(t))+e);n===o&&(n\u003C=0?(s(1),a(10)):(s(r(n,-1)),a(r(o,1)))),n\u003C=0&&s(r(o,-1)),o\u003C=0&&a(r(n,1)),t._zero&&t.min!==t._suggestedMin&&n===r(t.min,0)&&s(r(n,-1)),t.min=n,t.max=o}buildTicks(){const t=this,e=t.options,i=function(t,e){const i=Math.floor(Pt(e.max)),n=Math.ceil(e.max\u002FMath.pow(10,i)),o=[];let s=q(t.min,Math.pow(10,Math.floor(Pt(e.min)))),a=Math.floor(Pt(s)),r=Math.floor(s\u002FMath.pow(10,a)),l=a\u003C0?Math.pow(10,Math.abs(a)):1;do{o.push({value:s,major:Is(s)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),s=Math.round(r*Math.pow(10,a)*l)\u002Fl}while(a\u003Ci||a===i&&r\u003Cn);const c=q(t.max,s);return o.push({value:c,major:Is(s)}),o}({min:t._userMin,max:t._userMax},t);return\"ticks\"===e.bounds&&Lt(i,t,\"value\"),e.reverse?(i.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i}getLabelForValue(t){return void 0===t?\"0\":zi(t,this.chart.options.locale)}configure(){const t=this,e=t.min;super.configure(),t._startValue=Pt(e),t._valueRange=Pt(t.max)-Pt(e)}getPixelForValue(t){const e=this;return void 0!==t&&0!==t||(t=e.min),null===t||isNaN(t)?NaN:e.getPixelForDecimal(t===e.min?0:(Pt(t)-e._startValue)\u002Fe._valueRange)}getValueForPixel(t){const e=this,i=e.getDecimalForPixel(t);return Math.pow(10,e._startValue+i*e._valueRange)}}function Fs(t){const e=t.ticks;if(e.display&&t.display){const t=ze(e.backdropPadding);return K(e.font&&e.font.size,xt.font.size)+t.height}return 0}function Vs(t,e,i,n,o){return t===n||t===o?{start:e-i\u002F2,end:e+i\u002F2}:t\u003Cn||t>o?{start:e-i,end:e}:{start:e,end:e+i}}function Bs(t){return 0===t||180===t?\"center\":t\u003C180?\"left\":\"right\"}function Ws(t,e,i){90===t||270===t?i.y-=e.h\u002F2:(t>270||t\u003C90)&&(i.y-=e.h)}function Hs(t,e,i,n){const{ctx:o}=t;if(i)o.arc(t.xCenter,t.yCenter,e,0,_t);else{let i=t.getPointPosition(0,e);o.moveTo(i.x,i.y);for(let s=1;s\u003Cn;s++)i=t.getPointPosition(s,e),o.lineTo(i.x,i.y)}}function Ns(t){return At(t)?t:0}zs.id=\"logarithmic\",zs.defaults={ticks:{callback:Vi.formatters.logarithmic,major:{enabled:!0}}};class js extends Ls{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Fs(t.options)\u002F2,t.xCenter=Math.floor(t.width\u002F2),t.yCenter=Math.floor((t.height-t.paddingTop)\u002F2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)\u002F2}determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!1);t.min=X(e)&&!isNaN(e)?e:0,t.max=X(i)&&!isNaN(i)?i:0,t.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea\u002FFs(this.options))}generateTickLabels(t){const e=this;Ls.prototype.generateTickLabels.call(e,t),e._pointLabels=e.getLabels().map(((t,i)=>{const n=Q(e.options.pointLabels.callback,[t,i],e);return n||0===n?n:\"\"}))}fit(){const t=this,e=t.options;e.display&&e.pointLabels.display?function(t){const e={l:0,r:t.width,t:0,b:t.height-t.paddingTop},i={};let n,o,s;const a=[],r=[],l=t.getLabels().length;for(n=0;n\u003Cl;n++){const l=t.options.pointLabels.setContext(t.getContext(n));r[n]=l.padding,s=t.getPointPosition(n,t.drawingArea+r[n]);const u=Fe(l.font);t.ctx.font=u.string,c=t.ctx,h=u.lineHeight,o=Y(d=t._pointLabels[n])?{w:Ut(c,c.font,d),h:d.length*h}:{w:c.measureText(d).width,h:h},a[n]=o;const f=t.getIndexAngle(n),g=It(f),p=Vs(g,s.x,o.w,0,180),m=Vs(g,s.y,o.h,90,270);p.start\u003Ce.l&&(e.l=p.start,i.l=f),p.end>e.r&&(e.r=p.end,i.r=f),m.start\u003Ce.t&&(e.t=m.start,i.t=f),m.end>e.b&&(e.b=m.end,i.b=f)}var c,h,d;t._setReductions(t.drawingArea,e,i),t._pointLabelItems=[];const u=t.options,f=Fs(u),g=t.getDistanceFromCenterForValue(u.ticks.reverse?t.min:t.max);for(n=0;n\u003Cl;n++){const e=0===n?f\u002F2:0,i=t.getPointPosition(n,g+e+r[n]),o=It(t.getIndexAngle(n)),s=a[n];Ws(o,s,i);const l=Bs(o);let c;c=\"left\"===l?i.x:\"center\"===l?i.x-s.w\u002F2:i.x-s.w;const h=c+s.w;t._pointLabelItems[n]={x:i.x,y:i.y,textAlign:l,left:c,top:i.y,right:h,bottom:i.y+s.h}}}(t):t.setCenterPoint(0,0,0,0)}_setReductions(t,e,i){const n=this;let o=e.l\u002FMath.sin(i.l),s=Math.max(e.r-n.width,0)\u002FMath.sin(i.r),a=-e.t\u002FMath.cos(i.t),r=-Math.max(e.b-(n.height-n.paddingTop),0)\u002FMath.cos(i.b);o=Ns(o),s=Ns(s),a=Ns(a),r=Ns(r),n.drawingArea=Math.max(t\u002F2,Math.min(Math.floor(t-(o+s)\u002F2),Math.floor(t-(a+r)\u002F2))),n.setCenterPoint(o,s,a,r)}setCenterPoint(t,e,i,n){const o=this,s=o.width-e-o.drawingArea,a=t+o.drawingArea,r=i+o.drawingArea,l=o.height-o.paddingTop-n-o.drawingArea;o.xCenter=Math.floor((a+s)\u002F2+o.left),o.yCenter=Math.floor((r+l)\u002F2+o.top+o.paddingTop)}getIndexAngle(t){return Wt(t*(_t\u002Fthis.getLabels().length)+Et(this.options.startAngle||0))}getDistanceFromCenterForValue(t){const e=this;if($(t))return NaN;const i=e.drawingArea\u002F(e.max-e.min);return e.options.reverse?(e.max-t)*i:(t-e.min)*i}getValueForDistanceFromCenter(t){if($(t))return NaN;const e=this,i=t\u002F(e.drawingArea\u002F(e.max-e.min));return e.options.reverse?e.max-i:e.min+i}getPointPosition(t,e){const i=this,n=i.getIndexAngle(t)-Mt;return{x:Math.cos(n)*e+i.xCenter,y:Math.sin(n)*e+i.yCenter,angle:n}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:n,bottom:o}=this._pointLabelItems[t];return{left:e,top:i,right:n,bottom:o}}drawBackground(){const t=this,{backgroundColor:e,grid:{circular:i}}=t.options;if(e){const n=t.ctx;n.save(),n.beginPath(),Hs(t,t.getDistanceFromCenterForValue(t._endValue),i,t.getLabels().length),n.closePath(),n.fillStyle=e,n.fill(),n.restore()}}drawGrid(){const t=this,e=t.ctx,i=t.options,{angleLines:n,grid:o}=i,s=t.getLabels().length;let a,r,l;if(i.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:n}}=t;for(let o=e-1;o>=0;o--){const e=n.setContext(t.getContext(o)),s=Fe(e.font),{x:a,y:r,textAlign:l,left:c,top:h,right:d,bottom:u}=t._pointLabelItems[o],{backdropColor:f}=e;if(!$(f)){const t=ze(e.backdropPadding);i.fillStyle=f,i.fillRect(c-t.left,h-t.top,d-c+t.width,u-h+t.height)}ee(i,t._pointLabels[o],a,r+s.lineHeight\u002F2,s,{color:e.color,textAlign:l,textBaseline:\"middle\"})}}(t,s),o.display&&t.ticks.forEach(((e,i)=>{if(0!==i){r=t.getDistanceFromCenterForValue(e.value);const n=o.setContext(t.getContext(i-1));!function(t,e,i,n){const o=t.ctx,s=e.circular,{color:a,lineWidth:r}=e;!s&&!n||!a||!r||i\u003C0||(o.save(),o.strokeStyle=a,o.lineWidth=r,o.setLineDash(e.borderDash),o.lineDashOffset=e.borderDashOffset,o.beginPath(),Hs(t,i,s,n),o.closePath(),o.stroke(),o.restore())}(t,n,r,s)}})),n.display){for(e.save(),a=t.getLabels().length-1;a>=0;a--){const o=n.setContext(t.getContext(a)),{color:s,lineWidth:c}=o;c&&s&&(e.lineWidth=c,e.strokeStyle=s,e.setLineDash(o.borderDash),e.lineDashOffset=o.borderDashOffset,r=t.getDistanceFromCenterForValue(i.ticks.reverse?t.min:t.max),l=t.getPointPosition(a,r),e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(l.x,l.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const t=this,e=t.ctx,i=t.options,n=i.ticks;if(!n.display)return;const o=t.getIndexAngle(0);let s,a;e.save(),e.translate(t.xCenter,t.yCenter),e.rotate(o),e.textAlign=\"center\",e.textBaseline=\"middle\",t.ticks.forEach(((o,r)=>{if(0===r&&!i.reverse)return;const l=n.setContext(t.getContext(r)),c=Fe(l.font);if(s=t.getDistanceFromCenterForValue(t.ticks[r].value),l.showLabelBackdrop){a=e.measureText(o.label).width,e.fillStyle=l.backdropColor;const t=ze(l.backdropPadding);e.fillRect(-a\u002F2-t.left,-s-c.size\u002F2-t.top,a+t.width,c.size+t.height)}ee(e,o.label,0,-s,c,{color:l.color})})),e.restore()}drawTitle(){}}js.id=\"radialLinear\",js.defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Vi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5}},js.defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"},js.descriptors={angleLines:{_fallback:\"grid\"}};const $s={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ys=Object.keys($s);function Us(t,e){return t-e}function Xs(t,e){if($(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:s}=t._parseOpts;let a=e;return\"function\"==typeof n&&(a=n(a)),X(a)||(a=\"string\"==typeof n?i.parse(a,n):i.parse(a)),null===a?null:(o&&(a=\"week\"!==o||!At(s)&&!0!==s?i.startOf(a,o):i.startOf(a,\"isoWeek\",s)),+a)}function qs(t,e,i,n){const o=Ys.length;for(let s=Ys.indexOf(t);s\u003Co-1;++s){const t=$s[Ys[s]],o=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)\u002F(o*t.size))\u003C=n)return Ys[s]}return Ys[o-1]}function Ks(t,e,i){if(i){if(i.length){const{lo:n,hi:o}=ne(i,e);t[i[n]>=e?i[n]:i[o]]=!0}}else t[e]=!0}function Gs(t,e,i){const n=[],o={},s=e.length;let a,r;for(a=0;a\u003Cs;++a)r=e[a],o[r]=a,n.push({value:r,major:!1});return 0!==s&&i?function(t,e,i,n){const o=t._adapter,s=+o.startOf(e[0].value,n),a=e[e.length-1].value;let r,l;for(r=s;r\u003C=a;r=+o.add(r,1,n))l=i[r],l>=0&&(e[l].major=!0);return e}(t,n,o,i):n}class Zs extends Xi{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),n=this._adapter=new oo._date(t.adapters.date);st(i.displayFormats,n.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Xs(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this,e=t.options,i=t._adapter,n=e.time.unit||\"day\";let{min:o,max:s,minDefined:a,maxDefined:r}=t.getUserBounds();function l(t){a||isNaN(t.min)||(o=Math.min(o,t.min)),r||isNaN(t.max)||(s=Math.max(s,t.max))}a&&r||(l(t._getLabelBounds()),\"ticks\"===e.bounds&&\"labels\"===e.ticks.source||l(t.getMinMax(!1))),o=X(o)&&!isNaN(o)?o:+i.startOf(Date.now(),n),s=X(s)&&!isNaN(s)?s:+i.endOf(Date.now(),n)+1,t.min=Math.min(o,s-1),t.max=Math.max(o+1,s)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this,e=t.options,i=e.time,n=e.ticks,o=\"labels\"===n.source?t.getLabelTimestamps():t._generate();\"ticks\"===e.bounds&&o.length&&(t.min=t._userMin||o[0],t.max=t._userMax||o[o.length-1]);const s=t.min,a=ae(o,s,t.max);return t._unit=i.unit||(n.autoSkip?qs(i.minUnit,t.min,t.max,t._getLabelCapacity(s)):function(t,e,i,n,o){for(let s=Ys.length-1;s>=Ys.indexOf(i);s--){const i=Ys[s];if($s[i].common&&t._adapter.diff(o,n,i)>=e-1)return i}return Ys[i?Ys.indexOf(i):0]}(t,a.length,i.minUnit,t.min,t.max)),t._majorUnit=n.major.enabled&&\"year\"!==t._unit?function(t){for(let e=Ys.indexOf(t)+1,i=Ys.length;e\u003Ci;++e)if($s[Ys[e]].common)return Ys[e]}(t._unit):void 0,t.initOffsets(o),e.reverse&&a.reverse(),Gs(t,a,t._majorUnit)}initOffsets(t){const e=this;let i,n,o=0,s=0;e.options.offset&&t.length&&(i=e.getDecimalForValue(t[0]),o=1===t.length?1-i:(e.getDecimalForValue(t[1])-i)\u002F2,n=e.getDecimalForValue(t[t.length-1]),s=1===t.length?n:(n-e.getDecimalForValue(t[t.length-2]))\u002F2);const a=t.length\u003C3?.5:.25;o=Nt(o,0,a),s=Nt(s,0,a),e._offsets={start:o,end:s,factor:1\u002F(o+1+s)}}_generate(){const t=this,e=t._adapter,i=t.min,n=t.max,o=t.options,s=o.time,a=s.unit||qs(s.minUnit,i,n,t._getLabelCapacity(i)),r=K(s.stepSize,1),l=\"week\"===a&&s.isoWeekday,c=At(l)||!0===l,h={};let d,u,f=i;if(c&&(f=+e.startOf(f,\"isoWeek\",l)),f=+e.startOf(f,c?\"day\":a),e.diff(n,i,a)>1e5*r)throw new Error(i+\" and \"+n+\" are too far apart with stepSize of \"+r+\" \"+a);const g=\"data\"===o.ticks.source&&t.getDataTimestamps();for(d=f,u=0;d\u003Cn;d=+e.add(d,r,a),u++)Ks(h,d,g);return d!==n&&\"ticks\"!==o.bounds&&1!==u||Ks(h,d,g),Object.keys(h).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,n){const o=this,s=o.options,a=s.time.displayFormats,r=o._unit,l=o._majorUnit,c=r&&a[r],h=l&&a[l],d=i[e],u=l&&h&&d&&d.major,f=o._adapter.format(t,n||(u?h:c)),g=s.ticks.callback;return g?Q(g,[f,e,i],o):f}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e\u003Ci;++e)n=t[e],n.label=this._tickFormatFunction(n.value,e,t)}getDecimalForValue(t){const e=this;return null===t?NaN:(t-e.min)\u002F(e.max-e.min)}getPixelForValue(t){const e=this,i=e._offsets,n=e.getDecimalForValue(t);return e.getPixelForDecimal((i.start+n)*i.factor)}getValueForPixel(t){const e=this,i=e._offsets,n=e.getDecimalForPixel(t)\u002Fi.factor-i.end;return e.min+n*(e.max-e.min)}_getLabelSize(t){const e=this,i=e.options.ticks,n=e.ctx.measureText(t).width,o=Et(e.isHorizontal()?i.maxRotation:i.minRotation),s=Math.cos(o),a=Math.sin(o),r=e._resolveTickFontOptions(0).size;return{w:n*s+r*a,h:n*a+r*s}}_getLabelCapacity(t){const e=this,i=e.options.time,n=i.displayFormats,o=n[i.unit]||n.millisecond,s=e._tickFormatFunction(t,0,Gs(e,[t],e._majorUnit),o),a=e._getLabelSize(s),r=Math.floor(e.isHorizontal()?e.width\u002Fa.w:e.height\u002Fa.h)-1;return r>0?r:1}getDataTimestamps(){const t=this;let e,i,n=t._cache.data||[];if(n.length)return n;const o=t.getMatchingVisibleMetas();if(t._normalized&&o.length)return t._cache.data=o[0].controller.getAllParsedValues(t);for(e=0,i=o.length;e\u003Ci;++e)n=n.concat(o[e].controller.getAllParsedValues(t));return t._cache.data=t.normalize(n)}getLabelTimestamps(){const t=this,e=t._cache.labels||[];let i,n;if(e.length)return e;const o=t.getLabels();for(i=0,n=o.length;i\u003Cn;++i)e.push(Xs(t,o[i]));return t._cache.labels=t._normalized?e:t.normalize(e)}normalize(t){return he(t.sort(Us))}}function Qs(t,e,i){let n,o,s,a;if(i)n=Math.floor(e),o=Math.ceil(e),s=t[n],a=t[o];else{const i=ne(t,e);s=i.lo,a=i.hi,n=t[s],o=t[a]}const r=o-n;return r?s+(a-s)*(e-n)\u002Fr:s}Zs.id=\"time\",Zs.defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",major:{enabled:!1}}};class Js extends Zs{constructor(t){super(t),this._table=[],this._maxIndex=void 0}initOffsets(){const t=this,e=t._getTimestampsForTable();t._table=t.buildLookupTable(e),t._maxIndex=t._table.length-1,super.initOffsets(e)}buildLookupTable(t){const{min:e,max:i}=this;if(!t.length)return[{time:e,pos:0},{time:i,pos:1}];const n=[e];let o,s,a;for(o=0,s=t.length;o\u003Cs;++o)a=t[o],a>e&&a\u003Ci&&n.push(a);return n.push(i),n}_getTimestampsForTable(){const t=this;let e=t._cache.all||[];if(e.length)return e;const i=t.getDataTimestamps(),n=t.getLabelTimestamps();return e=i.length&&n.length?t.normalize(i.concat(n)):i.length?i:n,e=t._cache.all=e,e}getPixelForValue(t,e){const i=this,n=i._offsets,o=i._normalized&&i._maxIndex>0&&!$(e)?e\u002Fi._maxIndex:i.getDecimalForValue(t);return i.getPixelForDecimal((n.start+o)*n.factor)}getDecimalForValue(t){return Qs(this._table,t)\u002Fthis._maxIndex}getValueForPixel(t){const e=this,i=e._offsets,n=e.getDecimalForPixel(t)\u002Fi.factor-i.end;return Qs(e._table,n*this._maxIndex,!0)}}Js.id=\"timeseries\",Js.defaults=Zs.defaults;var ta=Object.freeze({__proto__:null,CategoryScale:Rs,LinearScale:Es,LogarithmicScale:zs,RadialLinearScale:js,TimeScale:Zs,TimeSeriesScale:Js});return Jn.register(bo,ta,Yo,As),Jn.helpers={...Cn},Jn._adapters=oo,Jn.Animation=_i,Jn.Animations=vi,Jn.animator=a,Jn.controllers=An.controllers.items,Jn.DatasetController=Li,Jn.Element=Ei,Jn.elements=Yo,Jn.Interaction=Oe,Jn.layouts=Ge,Jn.platforms=ui,Jn.Scale=Xi,Jn.Ticks=Vi,Object.assign(Jn,bo,ta,Yo,As,ui),Jn.Chart=Jn,\"undefined\"!=typeof window&&(window.Chart=Jn),Jn}));\r\n+\u002F*!\n+ * Chart.js v3.2.1\n+ * https:\u002F\u002Fwww.chartjs.org\n+ * (c) 2021 Chart.js Contributors\n+ * Released under the MIT License\n+ *\u002F\n+!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){\"use strict\";const t=\"undefined\"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,n){const o=n||(t=>Array.prototype.slice.call(t));let s=!1,a=[];return function(...n){a=o(n),s||(s=!0,t.call(window,(()=>{s=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(){return e?(clearTimeout(i),i=setTimeout(t,e)):t(),e}}const n=t=>\"start\"===t?\"left\":\"end\"===t?\"right\":\"center\",o=(t,e,i)=>\"start\"===t?e:\"end\"===t?i:(e+i)\u002F2,s=(t,e,i)=>\"right\"===t?i:\"center\"===t?(e+i)\u002F2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,n){const o=e.listeners[n],s=e.duration;o.forEach((n=>n({chart:t,initial:e.initial,numSteps:s,currentStep:Math.min(i-e.start,s)})))}_refresh(){const e=this;e._request||(e._running=!0,e._request=t.call(window,(()=>{e._update(),e._request=null,e._running&&e._refresh()})))}_update(t=Date.now()){const e=this;let i=0;e._charts.forEach(((n,o)=>{if(!n.running||!n.items.length)return;const s=n.items;let a,r=s.length-1,l=!1;for(;r>=0;--r)a=s[r],a._active?(a._total>n.duration&&(n.duration=a._total),a.tick(t),l=!0):(s[r]=s[s.length-1],s.pop());l&&(o.draw(),e._notify(o,n,t,\"progress\")),s.length||(n.running=!1,e._notify(o,n,t,\"complete\"),n.initial=!1),i+=s.length})),e._lastDate=t,0===i&&(e._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let n=i.length-1;for(;n>=0;--n)i[n].cancel();e.items=[],this._notify(t,e,Date.now(),\"complete\")}remove(t){return this._charts.delete(t)}};\n+\u002F*!\n+ * @kurkle\u002Fcolor v0.1.9\n+ * https:\u002F\u002Fgithub.com\u002Fkurkle\u002Fcolor#readme\n+ * (c) 2020 Jukka Kurkela\n+ * Released under the MIT License\n+ *\u002Fconst r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l=\"0123456789ABCDEF\",c=t=>l[15&t],h=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?c:h;return t?\"#\"+e(t.r)+e(t.g)+e(t.b)+(t.a\u003C255?e(t.a):\"\"):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t\u002F2.55)\u002F100,0,1)}function b(t){return g(f(100*t),0,100)}const _=\u002F^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,\u002F]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;const y=\u002F^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$\u002F;function v(t,e,i){const n=e*Math.min(i,1-i),o=(e,o=(e+t\u002F30)%12)=>i-n*Math.max(Math.min(o-3,9-o,1),-1);return[o(0),o(8),o(4)]}function w(t,e,i){const n=(n,o=(n+t\u002F60)%6)=>i-i*e*Math.max(Math.min(o,4-o,1),0);return[n(5),n(3),n(1)]}function M(t,e,i){const n=v(t,1,.5);let o;for(e+i>1&&(o=1\u002F(e+i),e*=o,i*=o),o=0;o\u003C3;o++)n[o]*=1-e-i,n[o]+=e;return n}function k(t){const e=t.r\u002F255,i=t.g\u002F255,n=t.b\u002F255,o=Math.max(e,i,n),s=Math.min(e,i,n),a=(o+s)\u002F2;let r,l,c;return o!==s&&(c=o-s,l=a>.5?c\u002F(2-o-s):c\u002F(o+s),r=o===e?(i-n)\u002Fc+(i\u003Cn?6:0):o===i?(n-e)\u002Fc+2:(e-i)\u002Fc+4,r=60*r+.5),[0|r,l||0,a]}function S(t,e,i,n){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,n)).map(m)}function P(t,e,i){return S(v,t,e,i)}function D(t){return(t%360+360)%360}function C(t){const e=y.exec(t);let i,n=255;if(!e)return;e[5]!==i&&(n=e[6]?p(+e[5]):m(+e[5]));const o=D(+e[2]),s=+e[3]\u002F100,a=+e[4]\u002F100;return i=\"hwb\"===e[1]?function(t,e,i){return S(M,t,e,i)}(o,s,a):\"hsv\"===e[1]?function(t,e,i){return S(w,t,e,i)}(o,s,a):P(o,s,a),{r:i[0],g:i[1],b:i[2],a:n}}const O={x:\"dark\",Z:\"light\",Y:\"re\",X:\"blu\",W:\"gr\",V:\"medium\",U:\"slate\",A:\"ee\",T:\"ol\",S:\"or\",B:\"ra\",C:\"lateg\",D:\"ights\",R:\"in\",Q:\"turquois\",E:\"hi\",P:\"ro\",O:\"al\",N:\"le\",M:\"de\",L:\"yello\",F:\"en\",K:\"ch\",G:\"arks\",H:\"ea\",I:\"ightg\",J:\"wh\"},A={OiceXe:\"f0f8ff\",antiquewEte:\"faebd7\",aqua:\"ffff\",aquamarRe:\"7fffd4\",azuY:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"0\",blanKedOmond:\"ffebcd\",Xe:\"ff\",XeviTet:\"8a2be2\",bPwn:\"a52a2a\",burlywood:\"deb887\",caMtXe:\"5f9ea0\",KartYuse:\"7fff00\",KocTate:\"d2691e\",cSO:\"ff7f50\",cSnflowerXe:\"6495ed\",cSnsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"ffff\",xXe:\"8b\",xcyan:\"8b8b\",xgTMnPd:\"b8860b\",xWay:\"a9a9a9\",xgYF:\"6400\",xgYy:\"a9a9a9\",xkhaki:\"bdb76b\",xmagFta:\"8b008b\",xTivegYF:\"556b2f\",xSange:\"ff8c00\",xScEd:\"9932cc\",xYd:\"8b0000\",xsOmon:\"e9967a\",xsHgYF:\"8fbc8f\",xUXe:\"483d8b\",xUWay:\"2f4f4f\",xUgYy:\"2f4f4f\",xQe:\"ced1\",xviTet:\"9400d3\",dAppRk:\"ff1493\",dApskyXe:\"bfff\",dimWay:\"696969\",dimgYy:\"696969\",dodgerXe:\"1e90ff\",fiYbrick:\"b22222\",flSOwEte:\"fffaf0\",foYstWAn:\"228b22\",fuKsia:\"ff00ff\",gaRsbSo:\"dcdcdc\",ghostwEte:\"f8f8ff\",gTd:\"ffd700\",gTMnPd:\"daa520\",Way:\"808080\",gYF:\"8000\",gYFLw:\"adff2f\",gYy:\"808080\",honeyMw:\"f0fff0\",hotpRk:\"ff69b4\",RdianYd:\"cd5c5c\",Rdigo:\"4b0082\",ivSy:\"fffff0\",khaki:\"f0e68c\",lavFMr:\"e6e6fa\",lavFMrXsh:\"fff0f5\",lawngYF:\"7cfc00\",NmoncEffon:\"fffacd\",ZXe:\"add8e6\",ZcSO:\"f08080\",Zcyan:\"e0ffff\",ZgTMnPdLw:\"fafad2\",ZWay:\"d3d3d3\",ZgYF:\"90ee90\",ZgYy:\"d3d3d3\",ZpRk:\"ffb6c1\",ZsOmon:\"ffa07a\",ZsHgYF:\"20b2aa\",ZskyXe:\"87cefa\",ZUWay:\"778899\",ZUgYy:\"778899\",ZstAlXe:\"b0c4de\",ZLw:\"ffffe0\",lime:\"ff00\",limegYF:\"32cd32\",lRF:\"faf0e6\",magFta:\"ff00ff\",maPon:\"800000\",VaquamarRe:\"66cdaa\",VXe:\"cd\",VScEd:\"ba55d3\",VpurpN:\"9370db\",VsHgYF:\"3cb371\",VUXe:\"7b68ee\",VsprRggYF:\"fa9a\",VQe:\"48d1cc\",VviTetYd:\"c71585\",midnightXe:\"191970\",mRtcYam:\"f5fffa\",mistyPse:\"ffe4e1\",moccasR:\"ffe4b5\",navajowEte:\"ffdead\",navy:\"80\",Tdlace:\"fdf5e6\",Tive:\"808000\",TivedBb:\"6b8e23\",Sange:\"ffa500\",SangeYd:\"ff4500\",ScEd:\"da70d6\",pOegTMnPd:\"eee8aa\",pOegYF:\"98fb98\",pOeQe:\"afeeee\",pOeviTetYd:\"db7093\",papayawEp:\"ffefd5\",pHKpuff:\"ffdab9\",peru:\"cd853f\",pRk:\"ffc0cb\",plum:\"dda0dd\",powMrXe:\"b0e0e6\",purpN:\"800080\",YbeccapurpN:\"663399\",Yd:\"ff0000\",Psybrown:\"bc8f8f\",PyOXe:\"4169e1\",saddNbPwn:\"8b4513\",sOmon:\"fa8072\",sandybPwn:\"f4a460\",sHgYF:\"2e8b57\",sHshell:\"fff5ee\",siFna:\"a0522d\",silver:\"c0c0c0\",skyXe:\"87ceeb\",UXe:\"6a5acd\",UWay:\"708090\",UgYy:\"708090\",snow:\"fffafa\",sprRggYF:\"ff7f\",stAlXe:\"4682b4\",tan:\"d2b48c\",teO:\"8080\",tEstN:\"d8bfd8\",tomato:\"ff6347\",Qe:\"40e0d0\",viTet:\"ee82ee\",JHt:\"f5deb3\",wEte:\"ffffff\",wEtesmoke:\"f5f5f5\",Lw:\"ffff00\",LwgYF:\"9acd32\"};let T;function R(t){T||(T=function(){const t={},e=Object.keys(A),i=Object.keys(O);let n,o,s,a,r;for(n=0;n\u003Ce.length;n++){for(a=r=e[n],o=0;o\u003Ci.length;o++)s=i[o],r=r.replace(s,O[s]);s=parseInt(A[a],16),t[r]=[s>>16&255,s>>8&255,255&s]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function L(t,e,i){if(t){let n=k(t);n[e]=Math.max(0,Math.min(n[e]+n[e]*i,0===e?360:1)),n=P(n),t.r=n[0],t.g=n[1],t.b=n[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=E(t,{r:0,g:0,b:0,a:1})).a=m(e.a),e}function z(t){return\"r\"===t.charAt(0)?function(t){const e=_.exec(t);let i,n,o,s=255;if(e){if(e[7]!==i){const t=+e[7];s=255&(e[8]?p(t):255*t)}return i=+e[1],n=+e[3],o=+e[5],i=255&(e[2]?p(i):i),n=255&(e[4]?p(n):n),o=255&(e[6]?p(o):o),{r:i,g:n,b:o,a:s}}}(t):C(t)}class F{constructor(t){if(t instanceof F)return t;const e=typeof t;let i;var n,o,s;\"object\"===e?i=I(t):\"string\"===e&&(s=(n=t).length,\"#\"===n[0]&&(4===s||5===s?o={r:255&17*r[n[1]],g:255&17*r[n[2]],b:255&17*r[n[3]],a:5===s?17*r[n[4]]:255}:7!==s&&9!==s||(o={r:r[n[1]]\u003C\u003C4|r[n[2]],g:r[n[3]]\u003C\u003C4|r[n[4]],b:r[n[5]]\u003C\u003C4|r[n[6]],a:9===s?r[n[7]]\u003C\u003C4|r[n[8]]:255})),i=o||R(t)||z(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=E(this._rgb);return t&&(t.a=x(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a\u003C255?`rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):this._rgb;var t}hexString(){return this._valid?u(this._rgb):this._rgb}hslString(){return this._valid?function(t){if(!t)return;const e=k(t),i=e[0],n=b(e[1]),o=b(e[2]);return t.a\u003C255?`hsla(${i}, ${n}%, ${o}%, ${x(t.a)})`:`hsl(${i}, ${n}%, ${o}%)`}(this._rgb):this._rgb}mix(t,e){const i=this;if(t){const n=i.rgb,o=t.rgb;let s;const a=e===s?.5:e,r=2*a-1,l=n.a-o.a,c=((r*l==-1?r:(r+l)\u002F(1+r*l))+1)\u002F2;s=1-c,n.r=255&c*n.r+s*o.r+.5,n.g=255&c*n.g+s*o.g+.5,n.b=255&c*n.b+s*o.b+.5,n.a=a*n.a+(1-a)*o.a,i.rgb=n}return i}clone(){return new F(this.rgb)}alpha(t){return this._rgb.a=m(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=f(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return L(this._rgb,2,t),this}darken(t){return L(this._rgb,2,-t),this}saturate(t){return L(this._rgb,1,t),this}desaturate(t){return L(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=k(t);i[0]=D(i[0]+e),i=P(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function V(t){return new F(t)}const B=t=>t instanceof CanvasGradient||t instanceof CanvasPattern;function W(t){return B(t)?t:V(t)}function H(t){return B(t)?t:V(t).saturate(.5).darken(.1).hexString()}function N(){}const j=function(){let t=0;return function(){return t++}}();function $(t){return null==t}function Y(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return\"[object\"===e.substr(0,7)&&\"Array]\"===e.substr(-6)}function U(t){return null!==t&&\"[object Object]\"===Object.prototype.toString.call(t)}const X=t=>(\"number\"==typeof t||t instanceof Number)&&isFinite(+t);function q(t,e){return X(t)?t:e}function K(t,e){return void 0===t?e:t}const G=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100:t\u002Fe,Z=(t,e)=>\"string\"==typeof t&&t.endsWith(\"%\")?parseFloat(t)\u002F100*e:+t;function Q(t,e,i){if(t&&\"function\"==typeof t.call)return t.apply(i,e)}function J(t,e,i,n){let o,s,a;if(Y(t))if(s=t.length,n)for(o=s-1;o>=0;o--)e.call(i,t[o],o);else for(o=0;o\u003Cs;o++)e.call(i,t[o],o);else if(U(t))for(a=Object.keys(t),s=a.length,o=0;o\u003Cs;o++)e.call(i,t[a[o]],a[o])}function tt(t,e){let i,n,o,s;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i\u003Cn;++i)if(o=t[i],s=e[i],o.datasetIndex!==s.datasetIndex||o.index!==s.index)return!1;return!0}function et(t){if(Y(t))return t.map(et);if(U(t)){const e=Object.create(null),i=Object.keys(t),n=i.length;let o=0;for(;o\u003Cn;++o)e[i[o]]=et(t[i[o]]);return e}return t}function it(t){return-1===[\"__proto__\",\"prototype\",\"constructor\"].indexOf(t)}function nt(t,e,i,n){if(!it(t))return;const o=e[t],s=i[t];U(o)&&U(s)?ot(o,s,n):e[t]=et(s)}function ot(t,e,i){const n=Y(e)?e:[e],o=n.length;if(!U(t))return t;const s=(i=i||{}).merger||nt;for(let a=0;a\u003Co;++a){if(!U(e=n[a]))continue;const o=Object.keys(e);for(let n=0,a=o.length;n\u003Ca;++n)s(o[n],t,e,i)}return t}function st(t,e){return ot(t,e,{merger:at})}function at(t,e,i){if(!it(t))return;const n=e[t],o=i[t];U(n)&&U(o)?st(n,o):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=et(o))}function rt(t,e){const i=t.indexOf(\".\",e);return-1===i?t.length:i}function lt(t,e){if(\"\"===e)return t;let i=0,n=rt(e,i);for(;t&&n>i;)t=t[e.substr(i,n-i)],i=n+1,n=rt(e,i);return t}function ct(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ht=t=>void 0!==t,dt=t=>\"function\"==typeof t,ut=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0},ft=Object.create(null),gt=Object.create(null);function pt(t,e){if(!e)return t;const i=e.split(\".\");for(let e=0,n=i.length;e\u003Cn;++e){const n=i[e];t=t[n]||(t[n]=Object.create(null))}return t}function mt(t,e,i){return\"string\"==typeof e?ot(pt(t,e),i):ot(pt(t,\"\"),e)}var xt=new class{constructor(t){this.animation=void 0,this.backgroundColor=\"rgba(0,0,0,0.1)\",this.borderColor=\"rgba(0,0,0,0.1)\",this.color=\"#666\",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=[\"mousemove\",\"mouseout\",\"click\",\"touchstart\",\"touchmove\"],this.font={family:\"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",size:12,style:\"normal\",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>H(e.backgroundColor),this.hoverBorderColor=(t,e)=>H(e.borderColor),this.hoverColor=(t,e)=>H(e.color),this.indexAxis=\"x\",this.interaction={mode:\"nearest\",intersect:!0},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.describe(t)}set(t,e){return mt(this,t,e)}get(t){return pt(this,t)}describe(t,e){return mt(gt,t,e)}override(t,e){return mt(ft,t,e)}route(t,e,i,n){const o=pt(this,t),s=pt(this,i),a=\"_\"+e;Object.defineProperties(o,{[a]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=s[n];return U(t)?Object.assign({},e,t):K(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith(\"on\"),_indexable:t=>\"events\"!==t,hover:{_fallback:\"interaction\"},interaction:{_scriptable:!1,_indexable:!1}});const bt=Math.PI,_t=2*bt,yt=_t+bt,vt=Number.POSITIVE_INFINITY,wt=bt\u002F180,Mt=bt\u002F2,kt=bt\u002F4,St=2*bt\u002F3,Pt=Math.log10,Dt=Math.sign;function Ct(t){const e=Math.pow(10,Math.floor(Pt(t))),i=t\u002Fe;return(i\u003C=1?1:i\u003C=2?2:i\u003C=5?5:10)*e}function Ot(t){const e=[],i=Math.sqrt(t);let n;for(n=1;n\u003Ci;n++)t%n==0&&(e.push(n),e.push(t\u002Fn));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function At(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Tt(t,e,i){return Math.abs(t-e)\u003Ci}function Rt(t,e){const i=Math.round(t);return i-e\u003C=t&&i+e>=t}function Lt(t,e,i){let n,o,s;for(n=0,o=t.length;n\u003Co;n++)s=t[n][i],isNaN(s)||(e.min=Math.min(e.min,s),e.max=Math.max(e.max,s))}function Et(t){return t*(bt\u002F180)}function It(t){return t*(180\u002Fbt)}function zt(t){if(!X(t))return;let e=1,i=0;for(;Math.round(t*e)\u002Fe!==t;)e*=10,i++;return i}function Ft(t,e){const i=e.x-t.x,n=e.y-t.y,o=Math.sqrt(i*i+n*n);let s=Math.atan2(n,i);return s\u003C-.5*bt&&(s+=_t),{angle:s,distance:o}}function Vt(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function Bt(t,e){return(t-e+yt)%_t-bt}function Wt(t){return(t%_t+_t)%_t}function Ht(t,e,i){const n=Wt(t),o=Wt(e),s=Wt(i),a=Wt(o-n),r=Wt(s-n),l=Wt(n-o),c=Wt(n-s);return n===o||n===s||a>r&&l\u003Cc}function Nt(t,e,i){return Math.max(e,Math.min(i,t))}function jt(t){return Nt(t,-32768,32767)}function $t(t){return!t||$(t.size)||$(t.family)?null:(t.style?t.style+\" \":\"\")+(t.weight?t.weight+\" \":\"\")+t.size+\"px \"+t.family}function Yt(t,e,i,n,o){let s=e[o];return s||(s=e[o]=t.measureText(o).width,i.push(o)),s>n&&(n=s),n}function Ut(t,e,i,n){let o=(n=n||{}).data=n.data||{},s=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(o=n.data={},s=n.garbageCollect=[],n.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,c,h,d,u;for(l=0;l\u003Cr;l++)if(d=i[l],null!=d&&!0!==Y(d))a=Yt(t,o,s,a,d);else if(Y(d))for(c=0,h=d.length;c\u003Ch;c++)u=d[c],null==u||Y(u)||(a=Yt(t,o,s,a,u));t.restore();const f=s.length\u002F2;if(f>i.length){for(l=0;l\u003Cf;l++)delete o[s[l]];s.splice(0,f)}return a}function Xt(t,e,i){const n=t.currentDevicePixelRatio,o=0!==i?Math.max(i\u002F2,.5):0;return Math.round((e-o)*n)\u002Fn+o}function qt(t,e){(e=e||t.getContext(\"2d\")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Kt(t,e,i,n){let o,s,a,r,l;const c=e.pointStyle,h=e.rotation,d=e.radius;let u=(h||0)*wt;if(c&&\"object\"==typeof c&&(o=c.toString(),\"[object HTMLImageElement]\"===o||\"[object HTMLCanvasElement]\"===o))return t.save(),t.translate(i,n),t.rotate(u),t.drawImage(c,-c.width\u002F2,-c.height\u002F2,c.width,c.height),void t.restore();if(!(isNaN(d)||d\u003C=0)){switch(t.beginPath(),c){default:t.arc(i,n,d,0,_t),t.closePath();break;case\"triangle\":t.moveTo(i+Math.sin(u)*d,n-Math.cos(u)*d),u+=St,t.lineTo(i+Math.sin(u)*d,n-Math.cos(u)*d),u+=St,t.lineTo(i+Math.sin(u)*d,n-Math.cos(u)*d),t.closePath();break;case\"rectRounded\":l=.516*d,r=d-l,s=Math.cos(u+kt)*r,a=Math.sin(u+kt)*r,t.arc(i-s,n-a,l,u-bt,u-Mt),t.arc(i+a,n-s,l,u-Mt,u),t.arc(i+s,n+a,l,u,u+Mt),t.arc(i-a,n+s,l,u+Mt,u+bt),t.closePath();break;case\"rect\":if(!h){r=Math.SQRT1_2*d,t.rect(i-r,n-r,2*r,2*r);break}u+=kt;case\"rectRot\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+a,n-s),t.lineTo(i+s,n+a),t.lineTo(i-a,n+s),t.closePath();break;case\"crossRot\":u+=kt;case\"cross\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s);break;case\"star\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s),u+=kt,s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a),t.moveTo(i+a,n-s),t.lineTo(i-a,n+s);break;case\"line\":s=Math.cos(u)*d,a=Math.sin(u)*d,t.moveTo(i-s,n-a),t.lineTo(i+s,n+a);break;case\"dash\":t.moveTo(i,n),t.lineTo(i+Math.cos(u)*d,n+Math.sin(u)*d)}t.fill(),e.borderWidth>0&&t.stroke()}}function Gt(t,e,i){return i=i||.5,t&&t.x>e.left-i&&t.x\u003Ce.right+i&&t.y>e.top-i&&t.y\u003Ce.bottom+i}function Zt(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function Qt(t){t.restore()}function Jt(t,e,i,n,o){if(!e)return t.lineTo(i.x,i.y);if(\"middle\"===o){const n=(e.x+i.x)\u002F2;t.lineTo(n,e.y),t.lineTo(n,i.y)}else\"after\"===o!=!!n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function te(t,e,i,n){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(n?e.cp1x:e.cp2x,n?e.cp1y:e.cp2y,n?i.cp2x:i.cp1x,n?i.cp2y:i.cp1y,i.x,i.y)}function ee(t,e,i,n,o,s={}){const a=Y(e)?e:[e],r=s.strokeWidth>0&&\"\"!==s.strokeColor;let l,c;for(t.save(),s.translation&&t.translate(s.translation[0],s.translation[1]),$(s.rotation)||t.rotate(s.rotation),t.font=o.string,s.color&&(t.fillStyle=s.color),s.textAlign&&(t.textAlign=s.textAlign),s.textBaseline&&(t.textBaseline=s.textBaseline),l=0;l\u003Ca.length;++l){if(c=a[l],r&&(s.strokeColor&&(t.strokeStyle=s.strokeColor),$(s.strokeWidth)||(t.lineWidth=s.strokeWidth),t.strokeText(c,i,n,s.maxWidth)),t.fillText(c,i,n,s.maxWidth),s.strikethrough||s.underline){const e=t.measureText(c),o=i-e.actualBoundingBoxLeft,a=i+e.actualBoundingBoxRight,r=n-e.actualBoundingBoxAscent,l=n+e.actualBoundingBoxDescent,h=s.strikethrough?(r+l)\u002F2:l;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=s.decorationWidth||2,t.moveTo(o,h),t.lineTo(a,h),t.stroke()}n+=o.lineHeight}t.restore()}function ie(t,e){const{x:i,y:n,w:o,h:s,radius:a}=e;t.arc(i+a.topLeft,n+a.topLeft,a.topLeft,-Mt,bt,!0),t.lineTo(i,n+s-a.bottomLeft),t.arc(i+a.bottomLeft,n+s-a.bottomLeft,a.bottomLeft,bt,Mt,!0),t.lineTo(i+o-a.bottomRight,n+s),t.arc(i+o-a.bottomRight,n+s-a.bottomRight,a.bottomRight,Mt,0,!0),t.lineTo(i+o,n+a.topRight),t.arc(i+o-a.topRight,n+a.topRight,a.topRight,0,-Mt,!0),t.lineTo(i+a.topLeft,n)}function ne(t,e,i){i=i||(i=>t[i]\u003Ce);let n,o=t.length-1,s=0;for(;o-s>1;)n=s+o>>1,i(n)?s=n:o=n;return{lo:s,hi:o}}const oe=(t,e,i)=>ne(t,i,(n=>t[n][e]\u003Ci)),se=(t,e,i)=>ne(t,i,(n=>t[n][e]>=i));function ae(t,e,i){let n=0,o=t.length;for(;n\u003Co&&t[n]\u003Ce;)n++;for(;o>n&&t[o-1]>i;)o--;return n>0||o\u003Ct.length?t.slice(n,o):t}const re=[\"push\",\"pop\",\"shift\",\"splice\",\"unshift\"];function le(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,\"_chartjs\",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),re.forEach((e=>{const i=\"_onData\"+ct(e),n=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const o=n.apply(this,e);return t._chartjs.listeners.forEach((t=>{\"function\"==typeof t[i]&&t[i](...e)})),o}})})))}function ce(t,e){const i=t._chartjs;if(!i)return;const n=i.listeners,o=n.indexOf(e);-1!==o&&n.splice(o,1),n.length>0||(re.forEach((e=>{delete t[e]})),delete t._chartjs)}function he(t){const e=new Set;let i,n;for(i=0,n=t.length;i\u003Cn;++i)e.add(t[i]);if(e.size===n)return t;const o=[];return e.forEach((t=>{o.push(t)})),o}function de(t){let e=t.parentNode;return e&&\"[object ShadowRoot]\"===e.toString()&&(e=e.host),e}function ue(t,e,i){let n;return\"string\"==typeof t?(n=parseInt(t,10),-1!==t.indexOf(\"%\")&&(n=n\u002F100*e.parentNode[i])):n=t,n}const fe=t=>window.getComputedStyle(t,null);function ge(t,e){return fe(t).getPropertyValue(e)}const pe=[\"top\",\"right\",\"bottom\",\"left\"];function me(t,e,i){const n={};i=i?\"-\"+i:\"\";for(let o=0;o\u003C4;o++){const s=pe[o];n[s]=parseFloat(t[e+\"-\"+s+i])||0}return n.width=n.left+n.right,n.height=n.top+n.bottom,n}function xe(t,e){const{canvas:i,currentDevicePixelRatio:n}=e,o=fe(i),s=\"border-box\"===o.boxSizing,a=me(o,\"padding\"),r=me(o,\"border\",\"width\"),{x:l,y:c,box:h}=function(t,e){const i=t.native||t,n=i.touches,o=n&&n.length?n[0]:i,{offsetX:s,offsetY:a}=o;let r,l,c=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(s,a,i.target))r=s,l=a;else{const t=e.getBoundingClientRect();r=o.clientX-t.left,l=o.clientY-t.top,c=!0}return{x:r,y:l,box:c}}(t,i),d=a.left+(h&&r.left),u=a.top+(h&&r.top);let{width:f,height:g}=e;return s&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)\u002Ff*i.width\u002Fn),y:Math.round((c-u)\u002Fg*i.height\u002Fn)}}const be=t=>Math.round(10*t)\u002F10;function _e(t,e,i,n){const o=fe(t),s=me(o,\"margin\"),a=ue(o.maxWidth,t,\"clientWidth\")||vt,r=ue(o.maxHeight,t,\"clientHeight\")||vt,l=function(t,e,i){let n,o;if(void 0===e||void 0===i){const s=de(t);if(s){const t=s.getBoundingClientRect(),a=fe(s),r=me(a,\"border\",\"width\"),l=me(a,\"padding\");e=t.width-l.width-r.width,i=t.height-l.height-r.height,n=ue(a.maxWidth,s,\"clientWidth\"),o=ue(a.maxHeight,s,\"clientHeight\")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:n||vt,maxHeight:o||vt}}(t,e,i);let{width:c,height:h}=l;if(\"content-box\"===o.boxSizing){const t=me(o,\"border\",\"width\"),e=me(o,\"padding\");c-=e.width+t.width,h-=e.height+t.height}return c=Math.max(0,c-s.width),h=Math.max(0,n?Math.floor(c\u002Fn):h-s.height),c=be(Math.min(c,a,l.maxWidth)),h=be(Math.min(h,r,l.maxHeight)),c&&!h&&(h=be(c\u002F2)),{width:c,height:h}}function ye(t,e,i){const n=t.currentDevicePixelRatio=e||1,{canvas:o,width:s,height:a}=t;o.height=a*n,o.width=s*n,t.ctx.setTransform(n,0,0,n,0,0),o.style&&(i||!o.style.height&&!o.style.width)&&(o.style.height=a+\"px\",o.style.width=s+\"px\")}const ve=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(t){}return t}();function we(t,e){const i=ge(t,e),n=i&&i.match(\u002F^(\\d+)(\\.\\d+)?px$\u002F);return n?+n[1]:void 0}function Me(t,e){return\"native\"in t?{x:t.x,y:t.y}:xe(t,e)}function ke(t,e,i,n){const{controller:o,data:s,_sorted:a}=t,r=o._cachedMeta.iScale;if(r&&e===r.axis&&a&&s.length){const t=r._reversePixels?se:oe;if(!n)return t(s,e,i);if(o._sharedOptions){const n=s[0],o=\"function\"==typeof n.getRange&&n.getRange(e);if(o){const n=t(s,e,i-o),a=t(s,e,i+o);return{lo:n.lo,hi:a.hi}}}}return{lo:0,hi:s.length-1}}function Se(t,e,i,n,o){const s=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=s.length;t\u003Ci;++t){const{index:i,data:r}=s[t],{lo:l,hi:c}=ke(s[t],e,a,o);for(let t=l;t\u003C=c;++t){const e=r[t];e.skip||n(e,i,t)}}}function Pe(t,e,i,n){const o=[];if(!Gt(e,t.chartArea,t._minPadding))return o;return Se(t,i,e,(function(t,i,s){t.inRange(e.x,e.y,n)&&o.push({element:t,datasetIndex:i,index:s})}),!0),o}function De(t,e,i,n,o){const s=function(t){const e=-1!==t.indexOf(\"x\"),i=-1!==t.indexOf(\"y\");return function(t,n){const o=e?Math.abs(t.x-n.x):0,s=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}}(i);let a=Number.POSITIVE_INFINITY,r=[];if(!Gt(e,t.chartArea,t._minPadding))return r;return Se(t,i,e,(function(t,i,l){if(n&&!t.inRange(e.x,e.y,o))return;const c=t.getCenterPoint(o),h=s(e,c);h\u003Ca?(r=[{element:t,datasetIndex:i,index:l}],a=h):h===a&&r.push({element:t,datasetIndex:i,index:l})})),r}function Ce(t,e,i,n){const o=Me(e,t),s=[],a=i.axis,r=\"x\"===a?\"inXRange\":\"inYRange\";let l=!1;return function(t,e){const i=t.getSortedVisibleDatasetMetas();let n,o,s;for(let t=0,a=i.length;t\u003Ca;++t){({index:n,data:o}=i[t]);for(let t=0,i=o.length;t\u003Ci;++t)s=o[t],s.skip||e(s,n,t)}}(t,((t,e,i)=>{t[r](o[a],n)&&s.push({element:t,datasetIndex:e,index:i}),t.inRange(o.x,o.y,n)&&(l=!0)})),i.intersect&&!l?[]:s}var Oe={modes:{index(t,e,i,n){const o=Me(e,t),s=i.axis||\"x\",a=i.intersect?Pe(t,o,s,n):De(t,o,s,!1,n),r=[];return a.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=a[0].index,i=t.data[e];i&&!i.skip&&r.push({element:i,datasetIndex:t.index,index:e})})),r):[]},dataset(t,e,i,n){const o=Me(e,t),s=i.axis||\"xy\";let a=i.intersect?Pe(t,o,s,n):De(t,o,s,!1,n);if(a.length>0){const e=a[0].datasetIndex,i=t.getDatasetMeta(e).data;a=[];for(let t=0;t\u003Ci.length;++t)a.push({element:i[t],datasetIndex:e,index:t})}return a},point:(t,e,i,n)=>Pe(t,Me(e,t),i.axis||\"xy\",n),nearest:(t,e,i,n)=>De(t,Me(e,t),i.axis||\"xy\",i.intersect,n),x:(t,e,i,n)=>(i.axis=\"x\",Ce(t,e,i,n)),y:(t,e,i,n)=>(i.axis=\"y\",Ce(t,e,i,n))}};const Ae=new RegExp(\u002F^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$\u002F),Te=new RegExp(\u002F^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$\u002F);function Re(t,e){const i=(\"\"+t).match(Ae);if(!i||\"normal\"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case\"px\":return t;case\"%\":t\u002F=100}return e*t}function Le(t,e){const i={},n=U(e),o=n?Object.keys(e):e,s=U(t)?n?i=>K(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of o)i[t]=+s(t)||0;return i}function Ee(t){return Le(t,{top:\"y\",right:\"x\",bottom:\"y\",left:\"x\"})}function Ie(t){return Le(t,[\"topLeft\",\"topRight\",\"bottomLeft\",\"bottomRight\"])}function ze(t){const e=Ee(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Fe(t,e){t=t||{},e=e||xt.font;let i=K(t.size,e.size);\"string\"==typeof i&&(i=parseInt(i,10));let n=K(t.style,e.style);n&&!(\"\"+n).match(Te)&&(console.warn('Invalid font style specified: \"'+n+'\"'),n=\"\");const o={family:K(t.family,e.family),lineHeight:Re(K(t.lineHeight,e.lineHeight),i),size:i,style:n,weight:K(t.weight,e.weight),string:\"\"};return o.string=$t(o),o}function Ve(t,e,i,n){let o,s,a,r=!0;for(o=0,s=t.length;o\u003Cs;++o)if(a=t[o],void 0!==a&&(void 0!==e&&\"function\"==typeof a&&(a=a(e),r=!1),void 0!==i&&Y(a)&&(a=a[i%a.length],r=!1),void 0!==a))return n&&!r&&(n.cacheable=!1),a}function Be(t,e){const{min:i,max:n}=t;return{min:i-Math.abs(Z(e,i)),max:n+Z(e,n)}}const We=[\"left\",\"top\",\"right\",\"bottom\"];function He(t,e){return t.filter((t=>t.pos===e))}function Ne(t,e){return t.filter((t=>-1===We.indexOf(t.pos)&&t.box.axis===e))}function je(t,e){return t.sort(((t,i)=>{const n=e?i:t,o=e?t:i;return n.weight===o.weight?n.index-o.index:n.weight-o.weight}))}function $e(t,e,i,n){return Math.max(t[i],e[i])+Math.max(t[n],e[n])}function Ye(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Ue(t,e,i){const n=i.box,o=t.maxPadding;U(i.pos)||(i.size&&(t[i.pos]-=i.size),i.size=i.horizontal?n.height:n.width,t[i.pos]+=i.size),n.getPadding&&Ye(o,n.getPadding());const s=Math.max(0,e.outerWidth-$e(o,t,\"left\",\"right\")),a=Math.max(0,e.outerHeight-$e(o,t,\"top\",\"bottom\")),r=s!==t.w,l=a!==t.h;return t.w=s,t.h=a,i.horizontal?{same:r,other:l}:{same:l,other:r}}function Xe(t,e){const i=e.maxPadding;function n(t){const n={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{n[t]=Math.max(e[t],i[t])})),n}return n(t?[\"left\",\"right\"]:[\"top\",\"bottom\"])}function qe(t,e,i){const n=[];let o,s,a,r,l,c;for(o=0,s=t.length,l=0;o\u003Cs;++o){a=t[o],r=a.box,r.update(a.width||e.w,a.height||e.h,Xe(a.horizontal,e));const{same:s,other:h}=Ue(e,i,a);l|=s&&n.length,c=c||h,r.fullSize||n.push(a)}return l&&qe(n,e,i)||c}function Ke(t,e,i){const n=i.padding;let o,s,a,r,l=e.x,c=e.y;for(o=0,s=t.length;o\u003Cs;++o)a=t[o],r=a.box,a.horizontal?(r.left=r.fullSize?n.left:e.left,r.right=r.fullSize?i.outerWidth-n.right:e.left+e.w,r.top=c,r.bottom=c+r.height,r.width=r.right-r.left,c=r.bottom):(r.left=l,r.right=l+r.width,r.top=r.fullSize?n.top:e.top,r.bottom=r.fullSize?i.outerHeight-n.right:e.top+e.h,r.height=r.bottom-r.top,l=r.right);e.x=l,e.y=c}xt.set(\"layout\",{padding:{top:0,right:0,bottom:0,left:0}});var Ge={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||\"top\",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,n){if(!t)return;const o=ze(t.options.layout.padding),s=e-o.width,a=i-o.height,r=function(t){const e=function(t){const e=[];let i,n,o;for(i=0,n=(t||[]).length;i\u003Cn;++i)o=t[i],e.push({index:i,box:o,pos:o.position,horizontal:o.isHorizontal(),weight:o.weight});return e}(t),i=je(e.filter((t=>t.box.fullSize)),!0),n=je(He(e,\"left\"),!0),o=je(He(e,\"right\")),s=je(He(e,\"top\"),!0),a=je(He(e,\"bottom\")),r=Ne(e,\"x\"),l=Ne(e,\"y\");return{fullSize:i,leftAndTop:n.concat(s),rightAndBottom:o.concat(l).concat(a).concat(r),chartArea:He(e,\"chartArea\"),vertical:n.concat(o).concat(l),horizontal:s.concat(a).concat(r)}}(t.boxes),l=r.vertical,c=r.horizontal;J(t.boxes,(t=>{\"function\"==typeof t.beforeLayout&&t.beforeLayout()}));const h=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:o,availableWidth:s,availableHeight:a,vBoxMaxWidth:s\u002F2\u002Fh,hBoxMaxHeight:a\u002F2}),u=Object.assign({},o);Ye(u,ze(n));const f=Object.assign({maxPadding:u,w:s,h:a,x:o.left,y:o.top},o);!function(t,e){let i,n,o;for(i=0,n=t.length;i\u003Cn;++i)o=t[i],o.horizontal?(o.width=o.box.fullSize&&e.availableWidth,o.height=e.hBoxMaxHeight):(o.width=e.vBoxMaxWidth,o.height=o.box.fullSize&&e.availableHeight)}(l.concat(c),d),qe(r.fullSize,f,d),qe(l,f,d),qe(c,f,d)&&qe(l,f,d),function(t){const e=t.maxPadding;function i(i){const n=Math.max(e[i]-t[i],0);return t[i]+=n,n}t.y+=i(\"top\"),t.x+=i(\"left\"),i(\"right\"),i(\"bottom\")}(f),Ke(r.leftAndTop,f,d),f.x+=f.w,f.y+=f.h,Ke(r.rightAndBottom,f,d),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},J(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h)}))}};class Ze{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,n){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,n?Math.floor(e\u002Fn):i)}}isAttached(t){return!0}}class Qe extends Ze{acquireContext(t){return t&&t.getContext&&t.getContext(\"2d\")||null}}const Je={touchstart:\"mousedown\",touchmove:\"mousemove\",touchend:\"mouseup\",pointerenter:\"mouseenter\",pointerdown:\"mousedown\",pointermove:\"mousemove\",pointerup:\"mouseup\",pointerleave:\"mouseout\",pointerout:\"mouseout\"},ti=t=>null===t||\"\"===t;const ei=!!ve&&{passive:!0};function ii(t,e,i){t.canvas.removeEventListener(e,i,ei)}function ni(t,e,i){const n=t.canvas,o=n&&de(n)||n,s=new MutationObserver((t=>{const e=de(o);t.forEach((t=>{for(let n=0;n\u003Ct.addedNodes.length;n++){const s=t.addedNodes[n];s!==o&&s!==e||i(t.target)}}))}));return s.observe(document,{childList:!0,subtree:!0}),s}function oi(t,e,i){const n=t.canvas,o=n&&de(n);if(!o)return;const s=new MutationObserver((t=>{t.forEach((t=>{for(let e=0;e\u003Ct.removedNodes.length;e++)if(t.removedNodes[e]===n){i();break}}))}));return s.observe(o,{childList:!0}),s}const si=new Map;let ai=0;function ri(){const t=window.devicePixelRatio;t!==ai&&(ai=t,si.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function li(t,i,n){const o=t.canvas,s=o&&de(o);if(!s)return;const a=e(((t,e)=>{const i=s.clientWidth;n(t,e),i\u003Cs.clientWidth&&n()}),window),r=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,n=e.contentRect.height;0===i&&0===n||a(i,n)}));return r.observe(s),function(t,e){si.size||window.addEventListener(\"resize\",ri),si.set(t,e)}(t,a),r}function ci(t,e,i){i&&i.disconnect(),\"resize\"===e&&function(t){si.delete(t),si.size||window.removeEventListener(\"resize\",ri)}(t)}function hi(t,i,n){const o=t.canvas,s=e((e=>{null!==t.ctx&&n(function(t,e){const i=Je[t.type]||t.type,{x:n,y:o}=xe(t,e);return{type:i,chart:e,native:t,x:void 0!==n?n:null,y:void 0!==o?o:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,ei)}(o,i,s),s}class di extends Ze{acquireContext(t,e){const i=t&&t.getContext&&t.getContext(\"2d\");return i&&i.canvas===t?(function(t,e){const i=t.style,n=t.getAttribute(\"height\"),o=t.getAttribute(\"width\");if(t.$chartjs={initial:{height:n,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||\"block\",i.boxSizing=i.boxSizing||\"border-box\",ti(o)){const e=we(t,\"width\");void 0!==e&&(t.width=e)}if(ti(n))if(\"\"===t.style.height)t.height=t.width\u002F(e||2);else{const e=we(t,\"height\");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;[\"height\",\"width\"].forEach((t=>{const n=i[t];$(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),o={attach:ni,detach:oi,resize:li}[e]||hi;n[e]=o(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),n=i[e];if(!n)return;({attach:ci,detach:ci,resize:ci}[e]||ii)(t,e,n),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,n){return _e(t,e,i,n)}isAttached(t){const e=de(t);return!(!e||!de(e))}}var ui=Object.freeze({__proto__:null,BasePlatform:Ze,BasicPlatform:Qe,DomPlatform:di});const fi=t=>0===t||1===t,gi=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*_t\u002Fi),pi=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*_t\u002Fi)+1,mi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t\u002F=.5)\u003C1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t\u002F=.5)\u003C1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t\u002F=.5)\u003C1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*Mt),easeOutSine:t=>Math.sin(t*Mt),easeInOutSine:t=>-.5*(Math.cos(bt*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>fi(t)?t:t\u003C.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t\u002F=.5)\u003C1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>fi(t)?t:gi(t,.075,.3),easeOutElastic:t=>fi(t)?t:pi(t,.075,.3),easeInOutElastic(t){const e=.1125;return fi(t)?t:t\u003C.5?.5*gi(2*t,e,.45):.5+.5*pi(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t\u002F=.5)\u003C1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-mi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t\u003C1\u002Fi?e*t*t:t\u003C2\u002Fi?e*(t-=1.5\u002Fi)*t+.75:t\u003C2.5\u002Fi?e*(t-=2.25\u002Fi)*t+.9375:e*(t-=2.625\u002Fi)*t+.984375},easeInOutBounce:t=>t\u003C.5?.5*mi.easeInBounce(2*t):.5*mi.easeOutBounce(2*t-1)+.5},xi=\"transparent\",bi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const n=W(t||xi),o=n.valid&&W(e||xi);return o&&o.valid?o.mix(n,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class _i{constructor(t,e,i,n){const o=e[i];n=Ve([t.to,n,o,t.from]);const s=Ve([t.from,o,n]);this._active=!0,this._fn=t.fn||bi[t.type||typeof s],this._easing=mi[t.easing]||mi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=s,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,i){const n=this;if(n._active){n._notify(!1);const o=n._target[n._prop],s=i-n._start,a=n._duration-s;n._start=i,n._duration=Math.floor(Math.max(a,t.duration)),n._total+=s,n._loop=!!t.loop,n._to=Ve([t.to,e,o,t.from]),n._from=Ve([t.from,o,e])}}cancel(){const t=this;t._active&&(t.tick(Date.now()),t._active=!1,t._notify(!1))}tick(t){const e=this,i=t-e._start,n=e._duration,o=e._prop,s=e._from,a=e._loop,r=e._to;let l;if(e._active=s!==r&&(a||i\u003Cn),!e._active)return e._target[o]=r,void e._notify(!0);i\u003C0?e._target[o]=s:(l=i\u002Fn%2,l=a&&l>1?2-l:l,l=e._easing(Math.min(1,Math.max(0,l))),e._target[o]=e._fn(s,r,l))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?\"res\":\"rej\",i=this._promises||[];for(let t=0;t\u003Ci.length;t++)i[t][e]()}}xt.set(\"animation\",{delay:void 0,duration:1e3,easing:\"easeOutQuart\",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const yi=Object.keys(xt.animation);xt.describe(\"animation\",{_fallback:!1,_indexable:!1,_scriptable:t=>\"onProgress\"!==t&&\"onComplete\"!==t&&\"fn\"!==t}),xt.set(\"animations\",{colors:{type:\"color\",properties:[\"color\",\"borderColor\",\"backgroundColor\"]},numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\",\"tension\"]}}),xt.describe(\"animations\",{_fallback:\"animation\"}),xt.set(\"transitions\",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:\"transparent\"},visible:{type:\"boolean\",duration:0}}},hide:{animations:{colors:{to:\"transparent\"},visible:{type:\"boolean\",easing:\"linear\",fn:t=>0|t}}}});class vi{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!U(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const n=t[i];if(!U(n))return;const o={};for(const t of yi)o[t]=n[t];(Y(n.properties)&&n.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,n=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!n)return[];const o=this._createAnimations(n,i);return i.$shared&&function(t,e){const i=[],n=Object.keys(e);for(let e=0;e\u003Cn.length;e++){const o=t[n[e]];o&&o.active()&&i.push(o.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),o}_createAnimations(t,e){const i=this._properties,n=[],o=t.$animations||(t.$animations={}),s=Object.keys(e),a=Date.now();let r;for(r=s.length-1;r>=0;--r){const l=s[r];if(\"$\"===l.charAt(0))continue;if(\"options\"===l){n.push(...this._animateOptions(t,e));continue}const c=e[l];let h=o[l];const d=i.get(l);if(h){if(d&&h.active()){h.update(d,c,a);continue}h.cancel()}d&&d.duration?(o[l]=h=new _i(d,t,l,c),n.push(h)):t[l]=c}return n}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function wi(t,e){const i=t&&t.options||{},n=i.reverse,o=void 0===i.min?e:0,s=void 0===i.max?e:0;return{start:n?s:o,end:n?o:s}}function Mi(t,e){const i=[],n=t._getSortedDatasetMetas(e);let o,s;for(o=0,s=n.length;o\u003Cs;++o)i.push(n[o].index);return i}function ki(t,e,i,n){const o=t.keys,s=\"single\"===n.mode;let a,r,l,c;if(null!==e){for(a=0,r=o.length;a\u003Cr;++a){if(l=+o[a],l===i){if(n.all)continue;break}c=t.values[l],X(c)&&(s||0===e||Dt(e)===Dt(c))&&(e+=c)}return e}}function Si(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function Pi(t,e,i){const n=t[e]||(t[e]={});return n[i]||(n[i]={})}function Di(t,e,i){for(const n of e.getMatchingVisibleMetas(\"bar\").reverse()){const e=t[n.index];if(i&&e>0||!i&&e\u003C0)return n.index}return null}function Ci(t,e){const{chart:i,_cachedMeta:n}=t,o=i._stacks||(i._stacks={}),{iScale:s,vScale:a,index:r}=n,l=s.axis,c=a.axis,h=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(s,a,n),d=e.length;let u;for(let t=0;t\u003Cd;++t){const i=e[t],{[l]:n,[c]:s}=i;u=(i._stacks||(i._stacks={}))[c]=Pi(o,h,n),u[r]=s,u._top=Di(u,a,!0),u._bottom=Di(u,a,!1)}}function Oi(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Ai(t,e){e=e||t._parsed;for(const i of e){const e=i._stacks;if(!e||void 0===e[t.vScale.id]||void 0===e[t.vScale.id][t.index])return;delete e[t.vScale.id][t.index]}}const Ti=t=>\"reset\"===t||\"none\"===t,Ri=(t,e)=>e?t:Object.assign({},t);class Li{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.$context=void 0,this.initialize()}initialize(){const t=this,e=t._cachedMeta;t.configure(),t.linkScales(),e._stacked=Si(e.vScale,e),t.addElements()}updateIndex(t){this.index=t}linkScales(){const t=this,e=t.chart,i=t._cachedMeta,n=t.getDataset(),o=(t,e,i,n)=>\"x\"===t?e:\"r\"===t?n:i,s=i.xAxisID=K(n.xAxisID,Oi(e,\"x\")),a=i.yAxisID=K(n.yAxisID,Oi(e,\"y\")),r=i.rAxisID=K(n.rAxisID,Oi(e,\"r\")),l=i.indexAxis,c=i.iAxisID=o(l,s,a,r),h=i.vAxisID=o(l,a,s,r);i.xScale=t.getScaleForId(s),i.yScale=t.getScaleForId(a),i.rScale=t.getScaleForId(r),i.iScale=t.getScaleForId(c),i.vScale=t.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update(\"reset\")}_destroy(){const t=this._cachedMeta;this._data&&ce(this._data,this),t._stacked&&Ai(t)}_dataCheck(){const t=this,e=t.getDataset(),i=e.data||(e.data=[]);U(i)?t._data=function(t){const e=Object.keys(t),i=new Array(e.length);let n,o,s;for(n=0,o=e.length;n\u003Co;++n)s=e[n],i[n]={x:s,y:t[s]};return i}(i):t._data!==i&&(t._data&&(ce(t._data,t),Ai(t._cachedMeta)),i&&Object.isExtensible(i)&&le(i,t),t._data=i)}addElements(){const t=this,e=t._cachedMeta;t._dataCheck(),t.datasetElementType&&(e.dataset=new t.datasetElementType)}buildOrUpdateElements(t){const e=this,i=e._cachedMeta,n=e.getDataset();let o=!1;e._dataCheck(),i._stacked=Si(i.vScale,i),i.stack!==n.stack&&(o=!0,Ai(i),i.stack=n.stack),e._resyncElements(t),o&&Ci(e,i._parsed)}configure(){const t=this,e=t.chart.config,i=e.datasetScopeKeys(t._type),n=e.getOptionScopes(t.getDataset(),i,!0);t.options=e.createResolver(n,t.getContext()),t._parsing=t.options.parsing}parse(t,e){const i=this,{_cachedMeta:n,_data:o}=i,{iScale:s,_stacked:a}=n,r=s.axis;let l,c,h,d=0===t&&e===o.length||n._sorted,u=t>0&&n._parsed[t-1];if(!1===i._parsing)n._parsed=o,n._sorted=!0,h=o;else{h=Y(o[t])?i.parseArrayData(n,o,t,e):U(o[t])?i.parseObjectData(n,o,t,e):i.parsePrimitiveData(n,o,t,e);const s=()=>null===c[r]||u&&c[r]\u003Cu[r];for(l=0;l\u003Ce;++l)n._parsed[l+t]=c=h[l],d&&(s()&&(d=!1),u=c);n._sorted=d}a&&Ci(i,h)}parsePrimitiveData(t,e,i,n){const{iScale:o,vScale:s}=t,a=o.axis,r=s.axis,l=o.getLabels(),c=o===s,h=new Array(n);let d,u,f;for(d=0,u=n;d\u003Cu;++d)f=d+i,h[d]={[a]:c||o.parse(l[f],f),[r]:s.parse(e[f],f)};return h}parseArrayData(t,e,i,n){const{xScale:o,yScale:s}=t,a=new Array(n);let r,l,c,h;for(r=0,l=n;r\u003Cl;++r)c=r+i,h=e[c],a[r]={x:o.parse(h[0],c),y:s.parse(h[1],c)};return a}parseObjectData(t,e,i,n){const{xScale:o,yScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=new Array(n);let c,h,d,u;for(c=0,h=n;c\u003Ch;++c)d=c+i,u=e[d],l[c]={x:o.parse(lt(u,a),d),y:s.parse(lt(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const n=this.chart,o=this._cachedMeta,s=e[t.axis];return ki({keys:Mi(n,!0),values:e._stacks[t.axis]},s,o.index,{mode:i})}updateRangeFromParsed(t,e,i,n){const o=i[e.axis];let s=null===o?NaN:o;const a=n&&i._stacks[e.axis];n&&a&&(n.values=a,t.min=Math.min(t.min,s),t.max=Math.max(t.max,s),s=ki(n,o,this._cachedMeta.index,{all:!0})),t.min=Math.min(t.min,s),t.max=Math.max(t.max,s)}getMinMax(t,e){const i=this,n=i._cachedMeta,o=n._parsed,s=n._sorted&&t===n.iScale,a=o.length,r=i._getOtherScale(t),l=e&&n._stacked&&{keys:Mi(i.chart,!0),values:null},c={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:d}=function(t){const{min:e,max:i,minDefined:n,maxDefined:o}=t.getUserBounds();return{min:n?e:Number.NEGATIVE_INFINITY,max:o?i:Number.POSITIVE_INFINITY}}(r);let u,f,g,p;function m(){return g=o[u],f=g[t.axis],p=g[r.axis],!X(f)||h>p||d\u003Cp}for(u=0;u\u003Ca&&(m()||(i.updateRangeFromParsed(c,t,g,l),!s));++u);if(s)for(u=a-1;u>=0;--u)if(!m()){i.updateRangeFromParsed(c,t,g,l);break}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let n,o,s;for(n=0,o=e.length;n\u003Co;++n)s=e[n][t.axis],X(s)&&i.push(s);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,n=e.vScale,o=this.getParsed(t);return{label:i?\"\"+i.getLabelForValue(o[i.axis]):\"\",value:n?\"\"+n.getLabelForValue(o[n.axis]):\"\"}}_update(t){const e=this,i=e._cachedMeta;e.configure(),e._cachedDataOpts={},e.update(t||\"default\"),i._clip=function(t){let e,i,n,o;return U(t)?(e=t.top,i=t.right,n=t.bottom,o=t.left):e=i=n=o=t,{top:e,right:i,bottom:n,left:o}}(K(e.options.clip,function(t,e,i){if(!1===i)return!1;const n=wi(t,i),o=wi(e,i);return{top:o.end,right:n.end,bottom:o.start,left:n.start}}(i.xScale,i.yScale,e.getMaxOverflow())))}update(t){}draw(){const t=this,e=t._ctx,i=t.chart,n=t._cachedMeta,o=n.data||[],s=i.chartArea,a=[],r=t._drawStart||0,l=t._drawCount||o.length-r;let c;for(n.dataset&&n.dataset.draw(e,s,r,l),c=r;c\u003Cr+l;++c){const t=o[c];t.active?a.push(t):t.draw(e,s)}for(c=0;c\u003Ca.length;++c)a[c].draw(e,s)}getStyle(t,e){const i=e?\"active\":\"default\";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const n=this,o=n.getDataset();let s;if(t>=0&&t\u003Cn._cachedMeta.data.length){const e=n._cachedMeta.data[t];s=e.$context||(e.$context=function(t,e,i){return Object.assign(Object.create(t),{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:\"default\",type:\"data\"})}(n.getContext(),t,e)),s.parsed=n.getParsed(t),s.raw=o.data[t]}else s=n.$context||(n.$context=function(t,e){return Object.assign(Object.create(t),{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:\"default\",type:\"dataset\"})}(n.chart.getContext(),n.index)),s.dataset=o;return s.active=!!e,s.mode=i,s}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e=\"default\",i){const n=this,o=\"active\"===e,s=n._cachedDataOpts,a=t+\"-\"+e,r=s[a],l=n.enableOptionSharing&&ht(i);if(r)return Ri(r,l);const c=n.chart.config,h=c.datasetElementScopeKeys(n._type,t),d=o?[t+\"Hover\",\"hover\",t,\"\"]:[t,\"\"],u=c.getOptionScopes(n.getDataset(),h),f=Object.keys(xt.elements[t]),g=c.resolveNamedOptions(u,f,(()=>n.getContext(i,o)),d);return g.$shared&&(g.$shared=l,s[a]=Object.freeze(Ri(g,l))),g}_resolveAnimations(t,e,i){const n=this,o=n.chart,s=n._cachedDataOpts,a=\"animation-\"+e,r=s[a];if(r)return r;let l;if(!1!==o.options.animation){const o=n.chart.config,s=o.datasetAnimationScopeKeys(n._type,e),a=o.getOptionScopes(n.getDataset(),s);l=o.createResolver(a,n.getContext(t,i,e))}const c=new vi(o,l&&l.animations);return l&&l._cacheable&&(s[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ti(t)||this.chart._animationsDisabled}updateElement(t,e,i,n){Ti(n)?Object.assign(t,i):this._resolveAnimations(e,n).update(t,i)}updateSharedOptions(t,e,i){t&&!Ti(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,i,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,\"active\",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,\"active\",!0)}_resyncElements(t){const e=this,i=e._cachedMeta.data.length,n=e._data.length;n>i?e._insertElements(i,n-i,t):n\u003Ci&&e._removeElements(n,i-n);const o=Math.min(n,i);o&&e.parse(0,o)}_insertElements(t,e,i=!0){const n=this,o=n._cachedMeta,s=o.data,a=t+e;let r;const l=t=>{for(t.length+=e,r=t.length-1;r>=a;r--)t[r]=t[r-e]};for(l(s),r=t;r\u003Ca;++r)s[r]=new n.dataElementType;n._parsing&&l(o._parsed),n.parse(t,e),i&&n.updateElements(s,t,e,\"reset\")}updateElements(t,e,i,n){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const n=i._parsed.splice(t,e);i._stacked&&Ai(i,n)}i.data.splice(t,e)}_onDataPush(){const t=arguments.length;this._insertElements(this.getDataset().data.length-t,t)}_onDataPop(){this._removeElements(this._cachedMeta.data.length-1,1)}_onDataShift(){this._removeElements(0,1)}_onDataSplice(t,e){this._removeElements(t,e),this._insertElements(t,arguments.length-2)}_onDataUnshift(){this._insertElements(0,arguments.length)}}Li.defaults={},Li.prototype.datasetElementType=null,Li.prototype.dataElementType=null;class Ei{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}hasValue(){return At(this.x)&&At(this.y)}getProps(t,e){const i=this,n=this.$animations;if(!e||!n)return i;const o={};return t.forEach((t=>{o[t]=n[t]&&n[t].active()?n[t]._to:i[t]})),o}}Ei.defaults={},Ei.defaultRoutes=void 0;const Ii=new Map;function zi(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let n=Ii.get(i);return n||(n=new Intl.NumberFormat(t,e),Ii.set(i,n)),n}(e,i).format(t)}const Fi={values:t=>Y(t)?t:\"\"+t,numeric(t,e,i){if(0===t)return\"0\";const n=this.chart.options.locale;let o,s=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e\u003C1e-4||e>1e15)&&(o=\"scientific\"),s=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Pt(Math.abs(s)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:o,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),zi(t,n,l)},logarithmic(t,e,i){if(0===t)return\"0\";const n=t\u002FMath.pow(10,Math.floor(Pt(t)));return 1===n||2===n||5===n?Fi.numeric.call(this,t,e,i):\"\"}};var Vi={formatters:Fi};function Bi(t,e){const i=t.options.ticks,n=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),n=t._length\u002Fi+(e?0:1),o=t._maxLength\u002Fi;return Math.floor(Math.min(n,o))}(t),o=i.major.enabled?function(t){const e=[];let i,n;for(i=0,n=t.length;i\u003Cn;i++)t[i].major&&e.push(i);return e}(e):[],s=o.length,a=o[0],r=o[s-1],l=[];if(s>n)return function(t,e,i,n){let o,s=0,a=i[0];for(n=Math.ceil(n),o=0;o\u003Ct.length;o++)o===a&&(e.push(t[o]),s++,a=i[s*n])}(e,l,o,s\u002Fn),l;const c=function(t,e,i){const n=function(t){const e=t.length;let i,n;if(e\u003C2)return!1;for(n=t[0],i=1;i\u003Ce;++i)if(t[i]-t[i-1]!==n)return!1;return n}(t),o=e.length\u002Fi;if(!n)return Math.max(o,1);const s=Ot(n);for(let t=0,e=s.length-1;t\u003Ce;t++){const e=s[t];if(e>o)return e}return Math.max(o,1)}(o,e,n);if(s>0){let t,i;const n=s>1?Math.round((r-a)\u002F(s-1)):null;for(Wi(e,l,c,$(n)?0:a-n,a),t=0,i=s-1;t\u003Ci;t++)Wi(e,l,c,o[t],o[t+1]);return Wi(e,l,c,r,$(n)?e.length:r+n),l}return Wi(e,l,c),l}function Wi(t,e,i,n,o){const s=K(n,0),a=Math.min(K(o,t.length),t.length);let r,l,c,h=0;for(i=Math.ceil(i),o&&(r=o-n,i=r\u002FMath.floor(r\u002Fi)),c=s;c\u003C0;)h++,c=Math.round(s+h*i);for(l=Math.max(s,0);l\u003Ca;l++)l===c&&(e.push(t[l]),h++,c=Math.round(s+h*i))}xt.set(\"scale\",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:\"ticks\",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:\"\",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:\"\",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Vi.formatters.values,minor:{},major:{},align:\"center\",crossAlign:\"near\",showLabelBackdrop:!1,backdropColor:\"rgba(255, 255, 255, 0.75)\",backdropPadding:2}}),xt.route(\"scale.ticks\",\"color\",\"\",\"color\"),xt.route(\"scale.grid\",\"color\",\"\",\"borderColor\"),xt.route(\"scale.grid\",\"borderColor\",\"\",\"borderColor\"),xt.route(\"scale.title\",\"color\",\"\",\"color\"),xt.describe(\"scale\",{_fallback:!1,_scriptable:t=>!t.startsWith(\"before\")&&!t.startsWith(\"after\")&&\"callback\"!==t&&\"parser\"!==t,_indexable:t=>\"borderDash\"!==t&&\"tickBorderDash\"!==t}),xt.describe(\"scales\",{_fallback:\"scale\"});const Hi=(t,e,i)=>\"top\"===e||\"left\"===e?t[e]+i:t[e]-i;function Ni(t,e){const i=[],n=t.length\u002Fe,o=t.length;let s=0;for(;s\u003Co;s+=n)i.push(t[Math.floor(s)]);return i}function ji(t,e,i){const n=t.ticks.length,o=Math.min(e,n-1),s=t._startPixel,a=t._endPixel,r=1e-6;let l,c=t.getPixelForTick(o);if(!(i&&(l=1===n?Math.max(c-s,a-c):0===e?(t.getPixelForTick(1)-c)\u002F2:(c-t.getPixelForTick(o-1))\u002F2,c+=o\u003Ce?l:-l,c\u003Cs-r||c>a+r)))return c}function $i(t){return t.drawTicks?t.tickLength:0}function Yi(t,e){if(!t.display)return 0;const i=Fe(t.font,e),n=ze(t.padding);return(Y(t.text)?t.text.length:1)*i.lineHeight+n.height}function Ui(t,e,i){let o=n(t);return(i&&\"right\"!==e||!i&&\"right\"===e)&&(o=(t=>\"left\"===t?\"right\":\"right\"===t?\"left\":t)(o)),o}class Xi extends Ei{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){const e=this;e.options=t.setContext(e.getContext()),e.axis=t.axis,e._userMin=e.parse(t.min),e._userMax=e.parse(t.max),e._suggestedMin=e.parse(t.suggestedMin),e._suggestedMax=e.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:n}=this;return t=q(t,Number.POSITIVE_INFINITY),e=q(e,Number.NEGATIVE_INFINITY),i=q(i,Number.POSITIVE_INFINITY),n=q(n,Number.NEGATIVE_INFINITY),{min:q(t,i),max:q(e,n),minDefined:X(t),maxDefined:X(e)}}getMinMax(t){const e=this;let i,{min:n,max:o,minDefined:s,maxDefined:a}=e.getUserBounds();if(s&&a)return{min:n,max:o};const r=e.getMatchingVisibleMetas();for(let l=0,c=r.length;l\u003Cc;++l)i=r[l].controller.getMinMax(e,t),s||(n=Math.min(n,i.min)),a||(o=Math.max(o,i.max));return{min:q(n,q(o,n)),max:q(o,q(n,o))}}getPadding(){const t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Q(this.options.beforeUpdate,[this])}update(t,e,i){const n=this,o=n.options.ticks,s=o.sampleSize;n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),n.ticks=null,n._labelSizes=null,n._gridLineItems=null,n._labelItems=null,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n._maxLength=n.isHorizontal()?n.width+i.left+i.right:n.height+i.top+i.bottom,n._dataLimitsCached||(n.beforeDataLimits(),n.determineDataLimits(),n.afterDataLimits(),n._range=Be(n,n.options.grace),n._dataLimitsCached=!0),n.beforeBuildTicks(),n.ticks=n.buildTicks()||[],n.afterBuildTicks();const a=s\u003Cn.ticks.length;n._convertTicksToLabels(a?Ni(n.ticks,s):n.ticks),n.configure(),n.beforeCalculateLabelRotation(),n.calculateLabelRotation(),n.afterCalculateLabelRotation(),o.display&&(o.autoSkip||\"auto\"===o.source)&&(n.ticks=Bi(n,n.ticks),n._labelSizes=null),a&&n._convertTicksToLabels(n.ticks),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate()}configure(){const t=this;let e,i,n=t.options.reverse;t.isHorizontal()?(e=t.left,i=t.right):(e=t.top,i=t.bottom,n=!n),t._startPixel=e,t._endPixel=i,t._reversePixels=n,t._length=i-e,t._alignToPixels=t.options.alignToPixels}afterUpdate(){Q(this.options.afterUpdate,[this])}beforeSetDimensions(){Q(this.options.beforeSetDimensions,[this])}setDimensions(){const t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0}afterSetDimensions(){Q(this.options.afterSetDimensions,[this])}_callHooks(t){const e=this;e.chart.notifyPlugins(t,e.getContext()),Q(e.options[t],[e])}beforeDataLimits(){this._callHooks(\"beforeDataLimits\")}determineDataLimits(){}afterDataLimits(){this._callHooks(\"afterDataLimits\")}beforeBuildTicks(){this._callHooks(\"beforeBuildTicks\")}buildTicks(){return[]}afterBuildTicks(){this._callHooks(\"afterBuildTicks\")}beforeTickToLabelConversion(){Q(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this,i=e.options.ticks;let n,o,s;for(n=0,o=t.length;n\u003Co;n++)s=t[n],s.label=Q(i.callback,[s.value,n,t],e);for(n=0;n\u003Co;n++)$(t[n].label)&&(t.splice(n,1),o--,n--)}afterTickToLabelConversion(){Q(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){Q(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this,e=t.options,i=e.ticks,n=t.ticks.length,o=i.minRotation||0,s=i.maxRotation;let a,r,l,c=o;if(!t._isVisible()||!i.display||o>=s||n\u003C=1||!t.isHorizontal())return void(t.labelRotation=o);const h=t._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Nt(t.chart.width-d,0,t.maxWidth);a=e.offset?t.maxWidth\u002Fn:f\u002F(n-1),d+6>a&&(a=f\u002F(n-(e.offset?.5:1)),r=t.maxHeight-$i(e.grid)-i.padding-Yi(e.title,t.chart.options.font),l=Math.sqrt(d*d+u*u),c=It(Math.min(Math.asin(Math.min((h.highest.height+6)\u002Fa,1)),Math.asin(Math.min(r\u002Fl,1))-Math.asin(u\u002Fl))),c=Math.max(o,Math.min(s,c))),t.labelRotation=c}afterCalculateLabelRotation(){Q(this.options.afterCalculateLabelRotation,[this])}beforeFit(){Q(this.options.beforeFit,[this])}fit(){const t=this,e={width:0,height:0},{chart:i,options:{ticks:n,title:o,grid:s}}=t,a=t._isVisible(),r=t.isHorizontal();if(a){const a=Yi(o,i.options.font);if(r?(e.width=t.maxWidth,e.height=$i(s)+a):(e.height=t.maxHeight,e.width=$i(s)+a),n.display&&t.ticks.length){const{first:i,last:o,widest:s,highest:a}=t._getLabelSizes(),l=2*n.padding,c=Et(t.labelRotation),h=Math.cos(c),d=Math.sin(c);if(r){const i=n.mirror?0:d*s.width+h*a.height;e.height=Math.min(t.maxHeight,e.height+i+l)}else{const i=n.mirror?0:h*s.width+d*a.height;e.width=Math.min(t.maxWidth,e.width+i+l)}t._calculatePadding(i,o,d,h)}}t._handleMargins(),r?(t.width=t._length=i.width-t._margins.left-t._margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=i.height-t._margins.top-t._margins.bottom)}_calculatePadding(t,e,i,n){const o=this,{ticks:{align:s,padding:a},position:r}=o.options,l=0!==o.labelRotation,c=\"top\"!==r&&\"x\"===o.axis;if(o.isHorizontal()){const r=o.getPixelForTick(0)-o.left,h=o.right-o.getPixelForTick(o.ticks.length-1);let d=0,u=0;l?c?(d=n*t.width,u=i*e.height):(d=i*t.height,u=n*e.width):\"start\"===s?u=e.width:\"end\"===s?d=t.width:(d=t.width\u002F2,u=e.width\u002F2),o.paddingLeft=Math.max((d-r+a)*o.width\u002F(o.width-r),0),o.paddingRight=Math.max((u-h+a)*o.width\u002F(o.width-h),0)}else{let i=e.height\u002F2,n=t.height\u002F2;\"start\"===s?(i=0,n=t.height):\"end\"===s&&(i=e.height,n=0),o.paddingTop=i+a,o.paddingBottom=n+a}}_handleMargins(){const t=this;t._margins&&(t._margins.left=Math.max(t.paddingLeft,t._margins.left),t._margins.top=Math.max(t.paddingTop,t._margins.top),t._margins.right=Math.max(t.paddingRight,t._margins.right),t._margins.bottom=Math.max(t.paddingBottom,t._margins.bottom))}afterFit(){Q(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return\"top\"===e||\"bottom\"===e||\"x\"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){const e=this;e.beforeTickToLabelConversion(),e.generateTickLabels(t),e.afterTickToLabelConversion()}_getLabelSizes(){const t=this;let e=t._labelSizes;if(!e){const i=t.options.ticks.sampleSize;let n=t.ticks;i\u003Cn.length&&(n=Ni(n,i)),t._labelSizes=e=t._computeLabelSizes(n,n.length)}return e}_computeLabelSizes(t,e){const{ctx:i,_longestTextCache:n}=this,o=[],s=[];let a,r,l,c,h,d,u,f,g,p,m,x=0,b=0;for(a=0;a\u003Ce;++a){if(c=t[a].label,h=this._resolveTickFontOptions(a),i.font=d=h.string,u=n[d]=n[d]||{data:{},gc:[]},f=h.lineHeight,g=p=0,$(c)||Y(c)){if(Y(c))for(r=0,l=c.length;r\u003Cl;++r)m=c[r],$(m)||Y(m)||(g=Yt(i,u.data,u.gc,g,m),p+=f)}else g=Yt(i,u.data,u.gc,g,c),p=f;o.push(g),s.push(p),x=Math.max(g,x),b=Math.max(p,b)}!function(t,e){J(t,(t=>{const i=t.gc,n=i.length\u002F2;let o;if(n>e){for(o=0;o\u003Cn;++o)delete t.data[i[o]];i.splice(0,n)}}))}(n,e);const _=o.indexOf(x),y=s.indexOf(b),v=t=>({width:o[t]||0,height:s[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:o,heights:s}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){const e=this;e._reversePixels&&(t=1-t);const i=e._startPixel+t*e._length;return jt(e._alignToPixels?Xt(e.chart,i,0):i)}getDecimalForPixel(t){const e=(t-this._startPixel)\u002Fthis._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t\u003C0&&e\u003C0?e:t>0&&e>0?t:0}getContext(t){const e=this,i=e.ticks||[];if(t>=0&&t\u003Ci.length){const n=i[t];return n.$context||(n.$context=function(t,e,i){return Object.assign(Object.create(t),{tick:i,index:e,type:\"tick\"})}(e.getContext(),t,n))}return e.$context||(e.$context=(n=e.chart.getContext(),o=e,Object.assign(Object.create(n),{scale:o,type:\"scale\"})));var n,o}_tickSize(){const t=this,e=t.options.ticks,i=Et(t.labelRotation),n=Math.abs(Math.cos(i)),o=Math.abs(Math.sin(i)),s=t._getLabelSizes(),a=e.autoSkipPadding||0,r=s?s.widest.width+a:0,l=s?s.highest.height+a:0;return t.isHorizontal()?l*n>r*o?r\u002Fn:l\u002Fo:l*o\u003Cr*n?l\u002Fn:r\u002Fo}_isVisible(){const t=this.options.display;return\"auto\"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this,i=e.axis,n=e.chart,o=e.options,{grid:s,position:a}=o,r=s.offset,l=e.isHorizontal(),c=e.ticks.length+(r?1:0),h=$i(s),d=[],u=s.setContext(e.getContext()),f=u.drawBorder?u.borderWidth:0,g=f\u002F2,p=function(t){return Xt(n,t,f)};let m,x,b,_,y,v,w,M,k,S,P,D;if(\"top\"===a)m=p(e.bottom),v=e.bottom-h,M=m-g,S=p(t.top)+g,D=t.bottom;else if(\"bottom\"===a)m=p(e.top),S=t.top,D=p(t.bottom)-g,v=m+g,M=e.top+h;else if(\"left\"===a)m=p(e.right),y=e.right-h,w=m-g,k=p(t.left)+g,P=t.right;else if(\"right\"===a)m=p(e.left),k=t.left,P=p(t.right)-g,y=m+g,w=e.left+h;else if(\"x\"===i){if(\"center\"===a)m=p((t.top+t.bottom)\u002F2+.5);else if(U(a)){const t=Object.keys(a)[0],i=a[t];m=p(e.chart.scales[t].getPixelForValue(i))}S=t.top,D=t.bottom,v=m+g,M=v+h}else if(\"y\"===i){if(\"center\"===a)m=p((t.left+t.right)\u002F2);else if(U(a)){const t=Object.keys(a)[0],i=a[t];m=p(e.chart.scales[t].getPixelForValue(i))}y=m-g,w=y-h,k=t.left,P=t.right}for(x=0;x\u003Cc;++x){const t=s.setContext(e.getContext(x)),i=t.lineWidth,o=t.color,a=s.borderDash||[],c=t.borderDashOffset,h=t.tickWidth,u=t.tickColor,f=t.tickBorderDash||[],g=t.tickBorderDashOffset;b=ji(e,x,r),void 0!==b&&(_=Xt(n,b,i),l?y=w=k=P=_:v=M=S=D=_,d.push({tx1:y,ty1:v,tx2:w,ty2:M,x1:k,y1:S,x2:P,y2:D,width:i,color:o,borderDash:a,borderDashOffset:c,tickWidth:h,tickColor:u,tickBorderDash:f,tickBorderDashOffset:g}))}return e._ticksLength=c,e._borderValue=m,d}_computeLabelItems(t){const e=this,i=e.axis,n=e.options,{position:o,ticks:s}=n,a=e.isHorizontal(),r=e.ticks,{align:l,crossAlign:c,padding:h,mirror:d}=s,u=$i(n.grid),f=u+h,g=d?-h:f,p=-Et(e.labelRotation),m=[];let x,b,_,y,v,w,M,k,S,P,D,C,O=\"middle\";if(\"top\"===o)w=e.bottom-g,M=e._getXAxisLabelAlignment();else if(\"bottom\"===o)w=e.top+g,M=e._getXAxisLabelAlignment();else if(\"left\"===o){const t=e._getYAxisLabelAlignment(u);M=t.textAlign,v=t.x}else if(\"right\"===o){const t=e._getYAxisLabelAlignment(u);M=t.textAlign,v=t.x}else if(\"x\"===i){if(\"center\"===o)w=(t.top+t.bottom)\u002F2+f;else if(U(o)){const t=Object.keys(o)[0],i=o[t];w=e.chart.scales[t].getPixelForValue(i)+f}M=e._getXAxisLabelAlignment()}else if(\"y\"===i){if(\"center\"===o)v=(t.left+t.right)\u002F2-f;else if(U(o)){const t=Object.keys(o)[0],i=o[t];v=e.chart.scales[t].getPixelForValue(i)}M=e._getYAxisLabelAlignment(u).textAlign}\"y\"===i&&(\"start\"===l?O=\"top\":\"end\"===l&&(O=\"bottom\"));const A=e._getLabelSizes();for(x=0,b=r.length;x\u003Cb;++x){_=r[x],y=_.label;const t=s.setContext(e.getContext(x));k=e.getPixelForTick(x)+s.labelOffset,S=e._resolveTickFontOptions(x),P=S.lineHeight,D=Y(y)?y.length:1;const i=D\u002F2,n=t.color,l=t.textStrokeColor,h=t.textStrokeWidth;let u;if(a?(v=k,C=\"top\"===o?\"near\"===c||0!==p?-D*P+P\u002F2:\"center\"===c?-A.highest.height\u002F2-i*P+P:-A.highest.height+P\u002F2:\"near\"===c||0!==p?P\u002F2:\"center\"===c?A.highest.height\u002F2-i*P:A.highest.height-D*P,d&&(C*=-1)):(w=k,C=(1-D)*P\u002F2),t.showLabelBackdrop){const e=ze(t.backdropPadding),i=A.heights[x],n=A.widths[x];let o=w+C-e.top,s=v-e.left;switch(O){case\"middle\":o-=i\u002F2;break;case\"bottom\":o-=i}switch(M){case\"center\":s-=n\u002F2;break;case\"right\":s-=n}u={left:s,top:o,width:n+e.width,height:i+e.height,color:t.backdropColor}}m.push({rotation:p,label:y,font:S,color:n,strokeColor:l,strokeWidth:h,textOffset:C,textAlign:M,textBaseline:O,translation:[v,w],backdrop:u})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-Et(this.labelRotation))return\"top\"===t?\"left\":\"right\";let i=\"center\";return\"start\"===e.align?i=\"left\":\"end\"===e.align&&(i=\"right\"),i}_getYAxisLabelAlignment(t){const e=this,{position:i,ticks:{crossAlign:n,mirror:o,padding:s}}=e.options,a=t+s,r=e._getLabelSizes().widest.width;let l,c;return\"left\"===i?o?(l=\"left\",c=e.right+s):(c=e.right-a,\"near\"===n?l=\"right\":\"center\"===n?(l=\"center\",c-=r\u002F2):(l=\"left\",c=e.left)):\"right\"===i?o?(l=\"right\",c=e.left+s):(c=e.left+a,\"near\"===n?l=\"left\":\"center\"===n?(l=\"center\",c+=r\u002F2):(l=\"right\",c=e.right)):l=\"right\",{textAlign:l,x:c}}_computeLabelArea(){const t=this;if(t.options.ticks.mirror)return;const e=t.chart,i=t.options.position;return\"left\"===i||\"right\"===i?{top:0,left:t.left,bottom:e.height,right:t.right}:\"top\"===i||\"bottom\"===i?{top:t.top,left:0,bottom:t.bottom,right:e.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:n,width:o,height:s}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,n,o,s),t.restore())}getLineWidthForValue(t){const e=this,i=e.options.grid;if(!e._isVisible()||!i.display)return 0;const n=e.ticks.findIndex((e=>e.value===t));if(n>=0){return i.setContext(e.getContext(n)).lineWidth}return 0}drawGrid(t){const e=this,i=e.options.grid,n=e.ctx,o=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));let s,a;const r=(t,e,i)=>{i.width&&i.color&&(n.save(),n.lineWidth=i.width,n.strokeStyle=i.color,n.setLineDash(i.borderDash||[]),n.lineDashOffset=i.borderDashOffset,n.beginPath(),n.moveTo(t.x,t.y),n.lineTo(e.x,e.y),n.stroke(),n.restore())};if(i.display)for(s=0,a=o.length;s\u003Ca;++s){const t=o[s];i.drawOnChartArea&&r({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),i.drawTicks&&r({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const t=this,{chart:e,ctx:i,options:{grid:n}}=t,o=n.setContext(t.getContext()),s=n.drawBorder?o.borderWidth:0;if(!s)return;const a=n.setContext(t.getContext(0)).lineWidth,r=t._borderValue;let l,c,h,d;t.isHorizontal()?(l=Xt(e,t.left,s)-s\u002F2,c=Xt(e,t.right,a)+a\u002F2,h=d=r):(h=Xt(e,t.top,s)-s\u002F2,d=Xt(e,t.bottom,a)+a\u002F2,l=c=r),i.save(),i.lineWidth=o.borderWidth,i.strokeStyle=o.borderColor,i.beginPath(),i.moveTo(l,h),i.lineTo(c,d),i.stroke(),i.restore()}drawLabels(t){const e=this;if(!e.options.ticks.display)return;const i=e.ctx,n=e._computeLabelArea();n&&Zt(i,n);const o=e._labelItems||(e._labelItems=e._computeLabelItems(t));let s,a;for(s=0,a=o.length;s\u003Ca;++s){const t=o[s],e=t.font,n=t.label;t.backdrop&&(i.fillStyle=t.backdrop.color,i.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),ee(i,n,0,t.textOffset,e,t)}n&&Qt(i)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:n}}=this;if(!i.display)return;const s=Fe(i.font),a=ze(i.padding),r=i.align;let l=s.lineHeight\u002F2;\"bottom\"===e?(l+=a.bottom,Y(i.text)&&(l+=s.lineHeight*(i.text.length-1))):l+=a.top;const{titleX:c,titleY:h,maxWidth:d,rotation:u}=function(t,e,i,n){const{top:s,left:a,bottom:r,right:l}=t;let c,h,d,u=0;return t.isHorizontal()?(h=o(n,a,l),d=Hi(t,i,e),c=l-a):(h=Hi(t,i,e),d=o(n,r,s),u=\"left\"===i?-Mt:Mt),{titleX:h,titleY:d,maxWidth:c,rotation:u}}(this,l,e,r);ee(t,i.text,0,0,s,{color:i.color,maxWidth:d,rotation:u,textAlign:Ui(r,e,n),textBaseline:\"middle\",translation:[c,h]})}draw(t){const e=this;e._isVisible()&&(e.drawBackground(),e.drawGrid(t),e.drawBorder(),e.drawTitle(),e.drawLabels(t))}_layers(){const t=this,e=t.options,i=e.ticks&&e.ticks.z||0,n=e.grid&&e.grid.z||0;return t._isVisible()&&t.draw===Xi.prototype.draw?[{z:n,draw(e){t.drawBackground(),t.drawGrid(e),t.drawTitle()}},{z:n+1,draw(){t.drawBorder()}},{z:i,draw(e){t.drawLabels(e)}}]:[{z:i,draw(e){t.draw(e)}}]}getMatchingVisibleMetas(t){const e=this,i=e.chart.getSortedVisibleDatasetMetas(),n=e.axis+\"AxisID\",o=[];let s,a;for(s=0,a=i.length;s\u003Ca;++s){const a=i[s];a[n]!==e.id||t&&a.type!==t||o.push(a)}return o}_resolveTickFontOptions(t){return Fe(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this,e=t._resolveTickFontOptions(0).lineHeight;return t.isHorizontal()?t.width\u002Fe\u002F.7:t.height\u002Fe}}function qi(t,e=[\"\"],i=t,n,o=(()=>t[0])){ht(n)||(n=an(\"_fallback\",t));const s={[Symbol.toStringTag]:\"Object\",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:n,_getTarget:o,override:o=>qi([o,...t],e,i,n)};return new Proxy(s,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,n)=>Ji(i,n,(()=>function(t,e,i,n){let o;for(const s of e)if(o=an(Zi(s,t),i),ht(o))return Qi(t,o)?on(i,n,t,o):o}(n,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>rn(t).includes(e),ownKeys:t=>rn(t),set:(t,e,i)=>((t._storage||(t._storage=o()))[e]=i,delete t[e],delete t._keys,!0)})}function Ki(t,e,i,n){const o={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Gi(t,n),setContext:e=>Ki(t,e,i,n),override:o=>Ki(t.override(o),e,i,n)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ji(t,e,(()=>function(t,e,i){const{_proxy:n,_context:o,_subProxy:s,_descriptors:a}=t;let r=n[e];dt(r)&&a.isScriptable(e)&&(r=function(t,e,i,n){const{_proxy:o,_context:s,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error(\"Recursion detected: \"+[...r].join(\"->\")+\"->\"+t);r.add(t),e=e(s,a||n),r.delete(t),U(e)&&(e=on(o._scopes,o,t,e));return e}(e,r,t,i));Y(r)&&r.length&&(r=function(t,e,i,n){const{_proxy:o,_context:s,_subProxy:a,_descriptors:r}=i;if(ht(s.index)&&n(t))e=e[s.index%e.length];else if(U(e[0])){const i=e,n=o._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=on(n,o,t,l);e.push(Ki(i,s,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Qi(e,r)&&(r=Ki(r,o,s&&s[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,n)=>(t[i]=n,delete e[i],!0)})}function Gi(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:n=e.indexable,_allKeys:o=e.allKeys}=t;return{allKeys:o,scriptable:i,indexable:n,isScriptable:dt(i)?i:()=>i,isIndexable:dt(n)?n:()=>n}}const Zi=(t,e)=>t?t+ct(e):e,Qi=(t,e)=>U(e)&&\"adapters\"!==t;function Ji(t,e,i){let n=t[e];return ht(n)||(n=i(),ht(n)&&(t[e]=n)),n}function tn(t,e,i){return dt(t)?t(e,i):t}const en=(t,e)=>!0===t?e:\"string\"==typeof t?lt(e,t):void 0;function nn(t,e,i,n){for(const o of e){const e=en(i,o);if(e){t.add(e);const o=tn(e._fallback,i,e);if(ht(o)&&o!==i&&o!==n)return o}else if(!1===e&&ht(n)&&i!==n)return null}return!1}function on(t,e,i,n){const o=e._rootScopes,s=tn(e._fallback,i,n),a=[...t,...o],r=new Set;r.add(n);let l=sn(r,a,i,s||i);return null!==l&&((!ht(s)||s===i||(l=sn(r,a,s,l),null!==l))&&qi([...r],[\"\"],o,s,(()=>{const t=e._getTarget();return i in t||(t[i]={}),t[i]})))}function sn(t,e,i,n){for(;i;)i=nn(t,e,i,n);return i}function an(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ht(e))return e}}function rn(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith(\"_\"))))e.add(t);return[...e]}(t._scopes)),e}const ln=Number.EPSILON||1e-14,cn=(t,e)=>e\u003Ct.length&&!t[e].skip&&t[e];function hn(t,e,i,n){const o=t.skip?e:t,s=e,a=i.skip?e:i,r=Vt(s,o),l=Vt(a,s);let c=r\u002F(r+l),h=l\u002F(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;const d=n*c,u=n*h;return{previous:{x:s.x-d*(a.x-o.x),y:s.y-d*(a.y-o.y)},next:{x:s.x+u*(a.x-o.x),y:s.y+u*(a.y-o.y)}}}function dn(t){const e=t.length,i=Array(e).fill(0),n=Array(e);let o,s,a,r=cn(t,0);for(o=0;o\u003Ce;++o)if(s=a,a=r,r=cn(t,o+1),a){if(r){const t=r.x-a.x;i[o]=0!==t?(r.y-a.y)\u002Ft:0}n[o]=s?r?Dt(i[o-1])!==Dt(i[o])?0:(i[o-1]+i[o])\u002F2:i[o-1]:i[o]}!function(t,e,i){const n=t.length;let o,s,a,r,l,c=cn(t,0);for(let h=0;h\u003Cn-1;++h)l=c,c=cn(t,h+1),l&&c&&(Tt(e[h],0,ln)?i[h]=i[h+1]=0:(o=i[h]\u002Fe[h],s=i[h+1]\u002Fe[h],r=Math.pow(o,2)+Math.pow(s,2),r\u003C=9||(a=3\u002FMath.sqrt(r),i[h]=o*a*e[h],i[h+1]=s*a*e[h])))}(t,i,n),function(t,e){const i=t.length;let n,o,s,a=cn(t,0);for(let r=0;r\u003Ci;++r){if(o=s,s=a,a=cn(t,r+1),!s)continue;const{x:i,y:l}=s;o&&(n=(i-o.x)\u002F3,s.cp1x=i-n,s.cp1y=l-n*e[r]),a&&(n=(a.x-i)\u002F3,s.cp2x=i+n,s.cp2y=l+n*e[r])}}(t,n)}function un(t,e,i){return Math.max(Math.min(t,i),e)}function fn(t,e,i,n){let o,s,a,r;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),\"monotone\"===e.cubicInterpolationMode)dn(t);else{let i=n?t[t.length-1]:t[0];for(o=0,s=t.length;o\u003Cs;++o)a=t[o],r=hn(i,a,t[Math.min(o+1,s-(n?0:1))%s],e.tension),a.cp1x=r.previous.x,a.cp1y=r.previous.y,a.cp2x=r.next.x,a.cp2y=r.next.y,i=a}e.capBezierPoints&&function(t,e){let i,n,o,s,a,r=Gt(t[0],e);for(i=0,n=t.length;i\u003Cn;++i)a=s,s=r,r=i\u003Cn-1&&Gt(t[i+1],e),s&&(o=t[i],a&&(o.cp1x=un(o.cp1x,e.left,e.right),o.cp1y=un(o.cp1y,e.top,e.bottom)),r&&(o.cp2x=un(o.cp2x,e.left,e.right),o.cp2y=un(o.cp2y,e.top,e.bottom)))}(t,i)}function gn(t,e,i,n){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pn(t,e,i,n){return{x:t.x+i*(e.x-t.x),y:\"middle\"===n?i\u003C.5?t.y:e.y:\"after\"===n?i\u003C1?t.y:e.y:i>0?e.y:t.y}}function mn(t,e,i,n){const o={x:t.cp2x,y:t.cp2y},s={x:e.cp1x,y:e.cp1y},a=gn(t,o,i),r=gn(o,s,i),l=gn(s,e,i),c=gn(a,r,i),h=gn(r,l,i);return gn(c,h,i)}function xn(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>\"center\"===t?t:\"right\"===t?\"left\":\"right\",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function bn(t,e){let i,n;\"ltr\"!==e&&\"rtl\"!==e||(i=t.canvas.style,n=[i.getPropertyValue(\"direction\"),i.getPropertyPriority(\"direction\")],i.setProperty(\"direction\",e,\"important\"),t.prevTextDirection=n)}function _n(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty(\"direction\",e[0],e[1]))}function yn(t){return\"angle\"===t?{between:Ht,compare:Bt,normalize:Wt}:{between:(t,e,i)=>t>=Math.min(e,i)&&t\u003C=Math.max(i,e),compare:(t,e)=>t-e,normalize:t=>t}}function vn({start:t,end:e,count:i,loop:n,style:o}){return{start:t%i,end:e%i,loop:n&&(e-t+1)%i==0,style:o}}function wn(t,e,i){if(!i)return[t];const{property:n,start:o,end:s}=i,a=e.length,{compare:r,between:l,normalize:c}=yn(n),{start:h,end:d,loop:u,style:f}=function(t,e,i){const{property:n,start:o,end:s}=i,{between:a,normalize:r}=yn(n),l=e.length;let c,h,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,c=0,h=l;c\u003Ch&&a(r(e[d%l][n]),o,s);++c)d--,u--;d%=l,u%=l}return u\u003Cd&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,x,b=!1,_=null;const y=()=>b||l(o,x,p)&&0!==r(o,x),v=()=>!b||0===r(s,p)||l(s,x,p);for(let t=h,i=h;t\u003C=d;++t)m=e[t%a],m.skip||(p=c(m[n]),b=l(p,o,s),null===_&&y()&&(_=0===r(p,o)?t:i),null!==_&&v()&&(g.push(vn({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p);return null!==_&&g.push(vn({start:_,end:d,loop:u,count:a,style:f})),g}function Mn(t,e){const i=[],n=t.segments;for(let o=0;o\u003Cn.length;o++){const s=wn(n[o],t.points,e);s.length&&i.push(...s)}return i}function kn(t,e){const i=t.points,n=t.options.spanGaps,o=i.length;if(!o)return[];const s=!!t._loop,{start:a,end:r}=function(t,e,i,n){let o=0,s=e-1;if(i&&!n)for(;o\u003Ce&&!t[o].skip;)o++;for(;o\u003Ce&&t[o].skip;)o++;for(o%=e,i&&(s+=o);s>o&&t[s%e].skip;)s--;return s%=e,{start:o,end:s}}(i,o,s,n);if(!0===n)return Sn([{start:a,end:r,loop:s}],i,e);return Sn(function(t,e,i,n){const o=t.length,s=[];let a,r=e,l=t[e];for(a=e+1;a\u003C=i;++a){const i=t[a%o];i.skip||i.stop?l.skip||(n=!1,s.push({start:e%o,end:(a-1)%o,loop:n}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&s.push({start:e%o,end:r%o,loop:n}),s}(i,a,r\u003Ca?r+o:r,!!t._fullLoop&&0===a&&r===o-1),i,e)}function Sn(t,e,i){return i&&i.setContext&&e?function(t,e,i){const n=e.length,o=[];let s=t[0].start,a=s;for(const r of t){let t,l,c=e[s%n];for(a=s+1;a\u003C=r.end;a++){const h=e[a%n];l=Pn(i.setContext({type:\"segment\",p0:c,p1:h})),Dn(l,t)&&(o.push({start:s,end:a-1,loop:r.loop,style:t}),t=l,s=a-1),c=h,t=l}s\u003Ca-1&&(o.push({start:s,end:a-1,loop:r.loop,style:l}),s=a-1)}return o}(t,e,i):t}function Pn(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Dn(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Cn=Object.freeze({__proto__:null,easingEffects:mi,color:W,getHoverColor:H,noop:N,uid:j,isNullOrUndef:$,isArray:Y,isObject:U,isFinite:X,finiteOrDefault:q,valueOrDefault:K,toPercentage:G,toDimension:Z,callback:Q,each:J,_elementsEqual:tt,clone:et,_merger:nt,merge:ot,mergeIf:st,_mergerIf:at,_deprecated:function(t,e,i,n){void 0!==e&&console.warn(t+': \"'+i+'\" is deprecated. Please use \"'+n+'\" instead')},resolveObjectKey:lt,_capitalize:ct,defined:ht,isFunction:dt,setsEqual:ut,toFontString:$t,_measureText:Yt,_longestText:Ut,_alignPixel:Xt,clearCanvas:qt,drawPoint:Kt,_isPointInArea:Gt,clipArea:Zt,unclipArea:Qt,_steppedLineTo:Jt,_bezierCurveTo:te,renderText:ee,addRoundedRectPath:ie,_lookup:ne,_lookupByKey:oe,_rlookupByKey:se,_filterBetween:ae,listenArrayEvents:le,unlistenArrayEvents:ce,_arrayUnique:he,_createResolver:qi,_attachContext:Ki,_descriptors:Gi,splineCurve:hn,splineCurveMonotone:dn,_updateBezierControlPoints:fn,_getParentNode:de,getStyle:ge,getRelativePosition:xe,getMaximumSize:_e,retinaScale:ye,supportsEventListenerOptions:ve,readUsedSize:we,fontString:function(t,e,i){return e+\" \"+t+\"px \"+i},requestAnimFrame:t,throttled:e,debounce:i,_toLeftRightCenter:n,_alignStartEnd:o,_textX:s,_pointInLine:gn,_steppedInterpolation:pn,_bezierInterpolation:mn,formatNumber:zi,toLineHeight:Re,_readValueToProps:Le,toTRBL:Ee,toTRBLCorners:Ie,toPadding:ze,toFont:Fe,resolve:Ve,_addGrace:Be,PI:bt,TAU:_t,PITAU:yt,INFINITY:vt,RAD_PER_DEG:wt,HALF_PI:Mt,QUARTER_PI:kt,TWO_THIRDS_PI:St,log10:Pt,sign:Dt,niceNum:Ct,_factorize:Ot,isNumber:At,almostEquals:Tt,almostWhole:Rt,_setMinAndMaxByKey:Lt,toRadians:Et,toDegrees:It,_decimalPlaces:zt,getAngleFromPoint:Ft,distanceBetweenPoints:Vt,_angleDiff:Bt,_normalizeAngle:Wt,_angleBetween:Ht,_limitValue:Nt,_int16Range:jt,getRtlAdapter:xn,overrideTextDirection:bn,restoreTextDirection:_n,_boundSegment:wn,_boundSegments:Mn,_computeSegments:kn});class On{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=this,i=Object.getPrototypeOf(t);let n;(function(t){return\"id\"in t&&\"defaults\"in t})(i)&&(n=e.register(i));const o=e.items,s=t.id,a=e.scope+\".\"+s;if(!s)throw new Error(\"class does not have id: \"+t);return s in o||(o[s]=t,function(t,e,i){const n=ot(Object.create(null),[i?xt.get(i):{},xt.get(e),t.defaults]);xt.set(e,n),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const n=i.split(\".\"),o=n.pop(),s=[t].concat(n).join(\".\"),a=e[i].split(\".\"),r=a.pop(),l=a.join(\".\");xt.route(s,o,l,r)}))}(e,t.defaultRoutes);t.descriptors&&xt.describe(e,t.descriptors)}(t,a,n),e.override&&xt.override(t.id,t.overrides)),a}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,n=this.scope;i in e&&delete e[i],n&&i in xt[n]&&(delete xt[n][i],this.override&&delete ft[i])}}var An=new class{constructor(){this.controllers=new On(Li,\"datasets\",!0),this.elements=new On(Ei,\"elements\"),this.plugins=new On(Object,\"plugins\"),this.scales=new On(Xi,\"scales\"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each(\"register\",t)}remove(...t){this._each(\"unregister\",t)}addControllers(...t){this._each(\"register\",t,this.controllers)}addElements(...t){this._each(\"register\",t,this.elements)}addPlugins(...t){this._each(\"register\",t,this.plugins)}addScales(...t){this._each(\"register\",t,this.scales)}getController(t){return this._get(t,this.controllers,\"controller\")}getElement(t){return this._get(t,this.elements,\"element\")}getPlugin(t){return this._get(t,this.plugins,\"plugin\")}getScale(t){return this._get(t,this.scales,\"scale\")}removeControllers(...t){this._each(\"unregister\",t,this.controllers)}removeElements(...t){this._each(\"unregister\",t,this.elements)}removePlugins(...t){this._each(\"unregister\",t,this.plugins)}removeScales(...t){this._each(\"unregister\",t,this.scales)}_each(t,e,i){const n=this;[...e].forEach((e=>{const o=i||n._getRegistryForType(e);i||o.isForType(e)||o===n.plugins&&e.id?n._exec(t,o,e):J(e,(e=>{const o=i||n._getRegistryForType(e);n._exec(t,o,e)}))}))}_exec(t,e,i){const n=ct(t);Q(i[\"before\"+n],[],i),e[t](i),Q(i[\"after\"+n],[],i)}_getRegistryForType(t){for(let e=0;e\u003Cthis._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const n=e.get(t);if(void 0===n)throw new Error('\"'+t+'\" is not a registered '+i+\".\");return n}};class Tn{constructor(){this._init=[]}notify(t,e,i,n){const o=this;\"beforeInit\"===e&&(o._init=o._createDescriptors(t,!0),o._notify(o._init,t,\"install\"));const s=n?o._descriptors(t).filter(n):o._descriptors(t),a=o._notify(s,t,e,i);return\"destroy\"===e&&(o._notify(s,t,\"stop\"),o._notify(o._init,t,\"uninstall\")),a}_notify(t,e,i,n){n=n||{};for(const o of t){const t=o.plugin;if(!1===Q(t[i],[e,n,o.options],t)&&n.cancelable)return!1}return!0}invalidate(){$(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,n=K(i.options&&i.options.plugins,{}),o=function(t){const e=[],i=Object.keys(An.plugins.items);for(let t=0;t\u003Ci.length;t++)e.push(An.getPlugin(i[t]));const n=t.plugins||[];for(let t=0;t\u003Cn.length;t++){const i=n[t];-1===e.indexOf(i)&&e.push(i)}return e}(i);return!1!==n||e?function(t,e,i,n){const o=[],s=t.getContext();for(let a=0;a\u003Ce.length;a++){const r=e[a],l=Rn(i[r.id],n);null!==l&&o.push({plugin:r,options:Ln(t.config,r,l,s)})}return o}(t,o,n,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,n=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(n(e,i),t,\"stop\"),this._notify(n(i,e),t,\"start\")}}function Rn(t,e){return e||!1!==t?!0===t?{}:t:null}function Ln(t,e,i,n){const o=t.pluginScopeKeys(e),s=t.getOptionScopes(i,o);return t.createResolver(s,n,[\"\"],{scriptable:!1,indexable:!1,allKeys:!0})}function En(t,e){const i=xt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||\"x\"}function In(t,e){return\"x\"===t||\"y\"===t?t:e.axis||(\"top\"===(i=e.position)||\"bottom\"===i?\"x\":\"left\"===i||\"right\"===i?\"y\":void 0)||t.charAt(0).toLowerCase();var i}function zn(t){const e=t.options||(t.options={});e.plugins=K(e.plugins,{}),e.scales=function(t,e){const i=ft[t.type]||{scales:{}},n=e.scales||{},o=En(t.type,e),s=Object.create(null),a=Object.create(null);return Object.keys(n).forEach((t=>{const e=n[t],r=In(t,e),l=function(t,e){return t===e?\"_index_\":\"_value_\"}(r,o),c=i.scales||{};s[r]=s[r]||t,a[t]=st(Object.create(null),[{axis:r},e,c[r],c[l]])})),t.data.datasets.forEach((i=>{const o=i.type||t.type,r=i.indexAxis||En(o,e),l=(ft[o]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return\"_index_\"===t?i=e:\"_value_\"===t&&(i=\"x\"===e?\"y\":\"x\"),i}(t,r),o=i[e+\"AxisID\"]||s[e]||e;a[o]=a[o]||Object.create(null),st(a[o],[{axis:e},n[o],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];st(e,[xt.scales[e.type],xt.scale])})),a}(t,e)}function Fn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const Vn=new Map,Bn=new Set;function Wn(t,e){let i=Vn.get(t);return i||(i=e(),Vn.set(t,i),Bn.add(i)),i}const Hn=(t,e,i)=>{const n=lt(e,i);void 0!==n&&t.add(n)};class Nn{constructor(t){this._config=function(t){return(t=t||{}).data=Fn(t.data),zn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),zn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Wn(t,(()=>[[\"datasets.\"+t,\"\"]]))}datasetAnimationScopeKeys(t,e){return Wn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,\"transitions.\"+e],[\"datasets.\"+t,\"\"]]))}datasetElementScopeKeys(t,e){return Wn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,\"datasets.\"+t,\"elements.\"+e,\"\"]]))}pluginScopeKeys(t){const e=t.id;return Wn(`${this.type}-plugin-${e}`,(()=>[[\"plugins.\"+e,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let n=i.get(t);return n&&!e||(n=new Map,i.set(t,n)),n}getOptionScopes(t,e,i){const{options:n,type:o}=this,s=this._cachedScopes(t,i),a=s.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Hn(r,t,e)))),e.forEach((t=>Hn(r,n,t))),e.forEach((t=>Hn(r,ft[o]||{},t))),e.forEach((t=>Hn(r,xt,t))),e.forEach((t=>Hn(r,gt,t)))}));const l=[...r];return Bn.has(e)&&s.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,ft[e]||{},xt.datasets[e]||{},{type:e},xt,gt]}resolveNamedOptions(t,e,i,n=[\"\"]){const o={$shared:!0},{resolver:s,subPrefixes:a}=jn(this._resolverCache,t,n);let r=s;if(function(t,e){const{isScriptable:i,isIndexable:n}=Gi(t);for(const o of e)if(i(o)&&dt(t[o])||n(o)&&Y(t[o]))return!0;return!1}(s,e)){o.$shared=!1;r=Ki(s,i=dt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)o[t]=r[t];return o}createResolver(t,e,i=[\"\"],n){const{resolver:o}=jn(this._resolverCache,t,i);return U(e)?Ki(o,e,void 0,n):o}}function jn(t,e,i){let n=t.get(e);n||(n=new Map,t.set(e,n));const o=i.join();let s=n.get(o);if(!s){s={resolver:qi(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes(\"hover\")))},n.set(o,s)}return s}const $n=[\"top\",\"bottom\",\"left\",\"right\",\"chartArea\"];function Yn(t,e){return\"top\"===t||\"bottom\"===t||-1===$n.indexOf(t)&&\"x\"===e}function Un(t,e){return function(i,n){return i[t]===n[t]?i[e]-n[e]:i[t]-n[t]}}function Xn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins(\"afterRender\"),Q(i&&i.onComplete,[t],e)}function qn(t){const e=t.chart,i=e.options.animation;Q(i&&i.onProgress,[t],e)}function Kn(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document}function Gn(t){return Kn()&&\"string\"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Zn={},Qn=t=>{const e=Gn(t);return Object.values(Zn).filter((t=>t.canvas===e)).pop()};class Jn{constructor(t,e){const n=this;this.config=e=new Nn(e);const o=Gn(t),s=Qn(o);if(s)throw new Error(\"Canvas is already in use. Chart with ID '\"+s.id+\"' must be destroyed before the canvas can be reused.\");const r=e.createResolver(e.chartOptionScopes(),n.getContext());this.platform=n._initializePlatform(o,e);const l=n.platform.acquireContext(o,r.aspectRatio),c=l&&l.canvas,h=c&&c.height,d=c&&c.width;this.id=j(),this.ctx=l,this.canvas=c,this.width=d,this.height=h,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._sortedMetasets=[],this.scales={},this.scale=void 0,this._plugins=new Tn,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((()=>this.update(\"resize\")),r.resizeDelay||0),Zn[n.id]=n,l&&c?(a.listen(n,\"complete\",Xn),a.listen(n,\"progress\",qn),n._initialize(),n.attached&&n.update()):console.error(\"Failed to create chart: can't acquire context from the given item\")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return $(t)?e&&o?o:n?i\u002Fn:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){const t=this;return t.notifyPlugins(\"beforeInit\"),t.options.responsive?t.resize():ye(t,t.options.devicePixelRatio),t.bindEvents(),t.notifyPlugins(\"afterInit\"),t}_initializePlatform(t,e){return e.platform?new e.platform:!Kn()||\"undefined\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?new Qe:new di}clear(){return qt(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this,n=i.options,o=i.canvas,s=n.maintainAspectRatio&&i.aspectRatio,a=i.platform.getMaximumSize(o,t,e,s),r=i.currentDevicePixelRatio,l=n.devicePixelRatio||i.platform.getDevicePixelRatio();i.width===a.width&&i.height===a.height&&r===l||(i.width=a.width,i.height=a.height,i._aspectRatio=i.aspectRatio,ye(i,l,!0),i.notifyPlugins(\"resize\",{size:a}),Q(n.onResize,[i,a],i),i.attached&&i._doResize()&&i.render())}ensureScalesHaveIDs(){J(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this,e=t.options,i=e.scales,n=t.scales,o=Object.keys(n).reduce(((t,e)=>(t[e]=!1,t)),{});let s=[];i&&(s=s.concat(Object.keys(i).map((t=>{const e=i[t],n=In(t,e),o=\"r\"===n,s=\"x\"===n;return{options:e,dposition:o?\"chartArea\":s?\"bottom\":\"left\",dtype:o?\"radialLinear\":s?\"category\":\"linear\"}})))),J(s,(i=>{const s=i.options,a=s.id,r=In(a,s),l=K(s.type,i.dtype);void 0!==s.position&&Yn(s.position,r)===Yn(i.dposition)||(s.position=i.dposition),o[a]=!0;let c=null;if(a in n&&n[a].type===l)c=n[a];else{c=new(An.getScale(l))({id:a,type:l,ctx:t.ctx,chart:t}),n[c.id]=c}c.init(s,e)})),J(o,((t,e)=>{t||delete n[e]})),J(n,(e=>{Ge.configure(t,e,e.options),Ge.addBox(t,e)}))}_updateMetasetIndex(t,e){const i=this._metasets,n=t.index;n!==e&&(i[n]=i[e],i[e]=t,t.index=e)}_updateMetasets(){const t=this,e=t._metasets,i=t.data.datasets.length,n=e.length;if(n>i){for(let e=i;e\u003Cn;++e)t._destroyDatasetMeta(e);e.splice(i,n-i)}t._sortedMetasets=e.slice(0).sort(Un(\"order\",\"index\"))}_removeUnreferencedMetasets(){const t=this,{_metasets:e,data:{datasets:i}}=t;e.length>i.length&&delete t._stacks,e.forEach(((e,n)=>{0===i.filter((t=>t===e._dataset)).length&&t._destroyDatasetMeta(n)}))}buildOrUpdateControllers(){const t=this,e=[],i=t.data.datasets;let n,o;for(t._removeUnreferencedMetasets(),n=0,o=i.length;n\u003Co;n++){const o=i[n];let s=t.getDatasetMeta(n);const a=o.type||t.config.type;if(s.type&&s.type!==a&&(t._destroyDatasetMeta(n),s=t.getDatasetMeta(n)),s.type=a,s.indexAxis=o.indexAxis||En(a,t.options),s.order=o.order||0,t._updateMetasetIndex(s,n),s.label=\"\"+o.label,s.visible=t.isDatasetVisible(n),s.controller)s.controller.updateIndex(n),s.controller.linkScales();else{const i=An.getController(a),{datasetElementType:o,dataElementType:r}=xt.datasets[a];Object.assign(i.prototype,{dataElementType:An.getElement(r),datasetElementType:o&&An.getElement(o)}),s.controller=new i(t,n),e.push(s.controller)}}return t._updateMetasets(),e}_resetElements(){const t=this;J(t.data.datasets,((e,i)=>{t.getDatasetMeta(i).controller.reset()}),t)}reset(){this._resetElements(),this.notifyPlugins(\"reset\")}update(t){const e=this,i=e.config;i.update(),e._options=i.createResolver(i.chartOptionScopes(),e.getContext()),J(e.scales,(t=>{Ge.removeBox(e,t)}));const n=e._animationsDisabled=!e.options.animation;e.ensureScalesHaveIDs(),e.buildOrUpdateScales();const o=new Set(Object.keys(e._listeners)),s=new Set(e.options.events);if(ut(o,s)||(e.unbindEvents(),e.bindEvents()),e._plugins.invalidate(),!1===e.notifyPlugins(\"beforeUpdate\",{mode:t,cancelable:!0}))return;const a=e.buildOrUpdateControllers();e.notifyPlugins(\"beforeElementsUpdate\");let r=0;for(let t=0,i=e.data.datasets.length;t\u003Ci;t++){const{controller:i}=e.getDatasetMeta(t),o=!n&&-1===a.indexOf(i);i.buildOrUpdateElements(o),r=Math.max(+i.getMaxOverflow(),r)}e._minPadding=r,e._updateLayout(r),n||J(a,(t=>{t.reset()})),e._updateDatasets(t),e.notifyPlugins(\"afterUpdate\",{mode:t}),e._layers.sort(Un(\"z\",\"_idx\")),e._lastEvent&&e._eventHandler(e._lastEvent,!0),e.render()}_updateLayout(t){const e=this;if(!1===e.notifyPlugins(\"beforeLayout\",{cancelable:!0}))return;Ge.update(e,e.width,e.height,t);const i=e.chartArea,n=i.width\u003C=0||i.height\u003C=0;e._layers=[],J(e.boxes,(t=>{n&&\"chartArea\"===t.position||(t.configure&&t.configure(),e._layers.push(...t._layers()))}),e),e._layers.forEach(((t,e)=>{t._idx=e})),e.notifyPlugins(\"afterLayout\")}_updateDatasets(t){const e=this,i=\"function\"==typeof t;if(!1!==e.notifyPlugins(\"beforeDatasetsUpdate\",{mode:t,cancelable:!0})){for(let n=0,o=e.data.datasets.length;n\u003Co;++n)e._updateDataset(n,i?t({datasetIndex:n}):t);e.notifyPlugins(\"afterDatasetsUpdate\",{mode:t})}}_updateDataset(t,e){const i=this,n=i.getDatasetMeta(t),o={meta:n,index:t,mode:e,cancelable:!0};!1!==i.notifyPlugins(\"beforeDatasetUpdate\",o)&&(n.controller._update(e),o.cancelable=!1,i.notifyPlugins(\"afterDatasetUpdate\",o))}render(){const t=this;!1!==t.notifyPlugins(\"beforeRender\",{cancelable:!0})&&(a.has(t)?t.attached&&!a.running(t)&&a.start(t):(t.draw(),Xn({chart:t})))}draw(){const t=this;let e;if(t._resizeBeforeDraw){const{width:e,height:i}=t._resizeBeforeDraw;t._resize(e,i),t._resizeBeforeDraw=null}if(t.clear(),t.width\u003C=0||t.height\u003C=0)return;if(!1===t.notifyPlugins(\"beforeDraw\",{cancelable:!0}))return;const i=t._layers;for(e=0;e\u003Ci.length&&i[e].z\u003C=0;++e)i[e].draw(t.chartArea);for(t._drawDatasets();e\u003Ci.length;++e)i[e].draw(t.chartArea);t.notifyPlugins(\"afterDraw\")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let n,o;for(n=0,o=e.length;n\u003Co;++n){const o=e[n];t&&!o.visible||i.push(o)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){const t=this;if(!1===t.notifyPlugins(\"beforeDatasetsDraw\",{cancelable:!0}))return;const e=t.getSortedVisibleDatasetMetas();for(let i=e.length-1;i>=0;--i)t._drawDataset(e[i]);t.notifyPlugins(\"afterDatasetsDraw\")}_drawDataset(t){const e=this,i=e.ctx,n=t._clip,o=e.chartArea,s={meta:t,index:t.index,cancelable:!0};!1!==e.notifyPlugins(\"beforeDatasetDraw\",s)&&(Zt(i,{left:!1===n.left?0:o.left-n.left,right:!1===n.right?e.width:o.right+n.right,top:!1===n.top?0:o.top-n.top,bottom:!1===n.bottom?e.height:o.bottom+n.bottom}),t.controller.draw(),Qt(i),s.cancelable=!1,e.notifyPlugins(\"afterDatasetDraw\",s))}getElementsAtEventForMode(t,e,i,n){const o=Oe.modes[e];return\"function\"==typeof o?o(this,t,i,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let n=i.filter((t=>t&&t._dataset===e)).pop();return n||(n=i[t]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1}),n}getContext(){return this.$context||(this.$context={chart:this,type:\"chart\"})}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return\"boolean\"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateDatasetVisibility(t,e){const i=this,n=e?\"show\":\"hide\",o=i.getDatasetMeta(t),s=o.controller._resolveAnimations(void 0,n);i.setDatasetVisibility(t,e),s.update(o,{visible:e}),i.update((e=>e.datasetIndex===t?n:void 0))}hide(t){this._updateDatasetVisibility(t,!1)}show(t){this._updateDatasetVisibility(t,!0)}_destroyDatasetMeta(t){const e=this,i=e._metasets&&e._metasets[t];i&&i.controller&&(i.controller._destroy(),delete e._metasets[t])}destroy(){const t=this,{canvas:e,ctx:i}=t;let n,o;for(t.stop(),a.remove(t),n=0,o=t.data.datasets.length;n\u003Co;++n)t._destroyDatasetMeta(n);t.config.clearCache(),e&&(t.unbindEvents(),qt(e,i),t.platform.releaseContext(i),t.canvas=null,t.ctx=null),t.notifyPlugins(\"destroy\"),delete Zn[t.id]}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){const t=this,e=t._listeners,i=t.platform,n=(n,o)=>{i.addEventListener(t,n,o),e[n]=o},o=(n,o)=>{e[n]&&(i.removeEventListener(t,n,o),delete e[n])};let s=function(e,i,n){e.offsetX=i,e.offsetY=n,t._eventHandler(e)};if(J(t.options.events,(t=>n(t,s))),t.options.responsive){let e;s=(e,i)=>{t.canvas&&t.resize(e,i)};const a=()=>{o(\"attach\",a),t.attached=!0,t.resize(),n(\"resize\",s),n(\"detach\",e)};e=()=>{t.attached=!1,o(\"resize\",s),n(\"attach\",a)},i.isAttached(t.canvas)?a():e()}else t.attached=!0}unbindEvents(){const t=this,e=t._listeners;e&&(t._listeners={},J(e,((e,i)=>{t.platform.removeEventListener(t,i,e)})))}updateHoverStyle(t,e,i){const n=i?\"set\":\"remove\";let o,s,a,r;for(\"dataset\"===e&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller[\"_\"+n+\"DatasetHoverStyle\"]()),a=0,r=t.length;a\u003Cr;++a){s=t[a];const e=s&&this.getDatasetMeta(s.datasetIndex).controller;e&&e[n+\"HoverStyle\"](s.element,s.datasetIndex,s.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this,i=e._active||[],n=t.map((({datasetIndex:t,index:i})=>{const n=e.getDatasetMeta(t);if(!n)throw new Error(\"No dataset found at index \"+t);return{datasetIndex:t,element:n.data[i],index:i}}));!tt(n,i)&&(e._active=n,e._updateHoverStyles(n,i))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const n=this,o=n.options.hover,s=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),a=s(e,t),r=i?t:s(t,e);a.length&&n.updateHoverStyle(a,o.mode,!1),r.length&&o.mode&&n.updateHoverStyle(r,o.mode,!0)}_eventHandler(t,e){const i=this,n={event:t,replay:e,cancelable:!0},o=e=>(e.options.events||this.options.events).includes(t.type);if(!1===i.notifyPlugins(\"beforeEvent\",n,o))return;const s=i._handleEvent(t,e);return n.cancelable=!1,i.notifyPlugins(\"afterEvent\",n,o),(s||n.changed)&&i.render(),i}_handleEvent(t,e){const i=this,{_active:n=[],options:o}=i,s=o.hover,a=e;let r=[],l=!1,c=null;return\"mouseout\"!==t.type&&(r=i.getElementsAtEventForMode(t,s.mode,s,a),c=\"click\"===t.type?i._lastEvent:t),i._lastEvent=null,Gt(t,i.chartArea,i._minPadding)&&(Q(o.onHover,[t,r,i],i),\"mouseup\"!==t.type&&\"click\"!==t.type&&\"contextmenu\"!==t.type||Q(o.onClick,[t,r,i],i)),l=!tt(r,n),(l||e)&&(i._active=r,i._updateHoverStyles(r,n,e)),i._lastEvent=c,l}}const to=()=>J(Jn.instances,(t=>t._plugins.invalidate())),eo=!0;function io(){throw new Error(\"This method is not implemented: either no adapter can be found or an incomplete integration was provided.\")}Object.defineProperties(Jn,{defaults:{enumerable:eo,value:xt},instances:{enumerable:eo,value:Zn},overrides:{enumerable:eo,value:ft},registry:{enumerable:eo,value:An},version:{enumerable:eo,value:\"3.2.1\"},getChart:{enumerable:eo,value:Qn},register:{enumerable:eo,value:(...t)=>{An.add(...t),to()}},unregister:{enumerable:eo,value:(...t)=>{An.remove(...t),to()}}});class no{constructor(t){this.options=t||{}}formats(){return io()}parse(t,e){return io()}format(t,e){return io()}add(t,e,i){return io()}diff(t,e,i){return io()}startOf(t,e,i){return io()}endOf(t,e){return io()}}no.override=function(t){Object.assign(no.prototype,t)};var oo={_date:no};function so(t){const e=function(t){if(!t._cache.$bar){const e=t.getMatchingVisibleMetas(\"bar\");let i=[];for(let n=0,o=e.length;n\u003Co;n++)i=i.concat(e[n].controller.getAllParsedValues(t));t._cache.$bar=he(i.sort(((t,e)=>t-e)))}return t._cache.$bar}(t);let i,n,o,s,a=t._length;const r=()=>{32767!==o&&-32768!==o&&(ht(s)&&(a=Math.min(a,Math.abs(o-s)||a)),s=o)};for(i=0,n=e.length;i\u003Cn;++i)o=t.getPixelForValue(e[i]),r();for(s=void 0,i=0,n=t.ticks.length;i\u003Cn;++i)o=t.getPixelForTick(i),r();return a}function ao(t,e,i,n){return Y(t)?function(t,e,i,n){const o=i.parse(t[0],n),s=i.parse(t[1],n),a=Math.min(o,s),r=Math.max(o,s);let l=a,c=r;Math.abs(a)>Math.abs(r)&&(l=r,c=a),e[i.axis]=c,e._custom={barStart:l,barEnd:c,start:o,end:s,min:a,max:r}}(t,e,i,n):e[i.axis]=i.parse(t,n),e}function ro(t,e,i,n){const o=t.iScale,s=t.vScale,a=o.getLabels(),r=o===s,l=[];let c,h,d,u;for(c=i,h=i+n;c\u003Ch;++c)u=e[c],d={},d[o.axis]=r||o.parse(a[c],c),l.push(ao(u,d,s,c));return l}function lo(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}class co extends Li{parsePrimitiveData(t,e,i,n){return ro(t,e,i,n)}parseArrayData(t,e,i,n){return ro(t,e,i,n)}parseObjectData(t,e,i,n){const{iScale:o,vScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=\"x\"===o.axis?a:r,c=\"x\"===s.axis?a:r,h=[];let d,u,f,g;for(d=i,u=i+n;d\u003Cu;++d)g=e[d],f={},f[o.axis]=o.parse(lt(g,l),d),h.push(ao(lt(g,c),f,s,d));return h}updateRangeFromParsed(t,e,i,n){super.updateRangeFromParsed(t,e,i,n);const o=i._custom;o&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,o.min),t.max=Math.max(t.max,o.max))}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:n}=e,o=this.getParsed(t),s=o._custom,a=lo(s)?\"[\"+s.start+\", \"+s.end+\"]\":\"\"+n.getLabelForValue(o[n.axis]);return{label:\"\"+i.getLabelForValue(o[i.axis]),value:a}}initialize(){const t=this;t.enableOptionSharing=!0,super.initialize();t._cachedMeta.stack=t.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o._cachedMeta.vScale,r=a.getBasePixel(),l=a.isHorizontal(),c=o._getRuler(),h=o.resolveDataElementOptions(e,n),d=o.getSharedOptions(h),u=o.includeOptions(n,d);o.updateSharedOptions(d,n,h);for(let h=e;h\u003Ce+i;h++){const e=o.getParsed(h),i=s||$(e[a.axis])?{base:r,head:r}:o._calculateBarValuePixels(h),f=o._calculateBarIndexPixels(h,c),g=(e._stacks||{})[a.axis],p={horizontal:l,base:i.base,enableBorderRadius:!g||lo(e._custom)||o.index===g._top||o.index===g._bottom,x:l?i.head:f.center,y:l?f.center:i.head,height:l?f.size:void 0,width:l?void 0:f.size};u&&(p.options=d||o.resolveDataElementOptions(h,n)),o.updateElement(t[h],h,p,n)}}_getStacks(t,e){const i=this._cachedMeta.iScale,n=i.getMatchingVisibleMetas(this._type),o=i.options.stacked,s=n.length,a=[];let r,l;for(r=0;r\u003Cs;++r){if(l=n[r],void 0!==e){const t=l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis];if($(t)||isNaN(t))continue}if((!1===o||-1===a.indexOf(l.stack)||void 0===o&&void 0===l.stack)&&a.push(l.stack),l.index===t)break}return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const n=this._getStacks(t,i),o=void 0!==e?n.indexOf(e):-1;return-1===o?n.length-1:o}_getRuler(){const t=this,e=t.options,i=t._cachedMeta,n=i.iScale,o=[];let s,a;for(s=0,a=i.data.length;s\u003Ca;++s)o.push(n.getPixelForValue(t.getParsed(s)[n.axis],s));const r=e.barThickness;return{min:r||so(n),pixels:o,start:n._startPixel,end:n._endPixel,stackCount:t._getStackCount(),scale:n,grouped:e.grouped,ratio:r?1:e.categoryPercentage*e.barPercentage}}_calculateBarValuePixels(t){const e=this,{vScale:i,_stacked:n}=e._cachedMeta,{base:o,minBarLength:s}=e.options,a=e.getParsed(t),r=a._custom,l=lo(r);let c,h,d=a[i.axis],u=0,f=n?e.applyStack(i,a,n):d;f!==d&&(u=f-d,f=d),l&&(d=r.barStart,f=r.barEnd-r.barStart,0!==d&&Dt(d)!==Dt(r.barEnd)&&(u=0),u+=d);const g=$(o)||l?u:o;let p=i.getPixelForValue(g);c=this.chart.getDataVisibility(t)?i.getPixelForValue(u+f):p,h=c-p,void 0!==s&&Math.abs(h)\u003Cs&&(h=h\u003C0?-s:s,0===d&&(p-=h\u002F2),c=p+h);const m=o||0;if(p===i.getPixelForValue(m)){const t=i.getLineWidthForValue(m)\u002F2;h>0?(p+=t,h-=t):h\u003C0&&(p-=t,h+=t)}return{size:h,base:p,head:c,center:c+h\u002F2}}_calculateBarIndexPixels(t,e){const i=this,n=e.scale,o=i.options,s=o.skipNull,a=K(o.maxBarThickness,1\u002F0);let r,l;if(e.grouped){const n=s?i._getStackCount(t):e.stackCount,c=\"flex\"===o.barThickness?function(t,e,i,n){const o=e.pixels,s=o[t];let a=t>0?o[t-1]:null,r=t\u003Co.length-1?o[t+1]:null;const l=i.categoryPercentage;null===a&&(a=s-(null===r?e.end-e.start:r-s)),null===r&&(r=s+s-a);const c=s-(s-Math.min(a,r))\u002F2*l;return{chunk:Math.abs(r-a)\u002F2*l\u002Fn,ratio:i.barPercentage,start:c}}(t,e,o,n):function(t,e,i,n){const o=i.barThickness;let s,a;return $(o)?(s=e.min*i.categoryPercentage,a=i.barPercentage):(s=o*n,a=1),{chunk:s\u002Fn,ratio:a,start:e.pixels[t]-s\u002F2}}(t,e,o,n),h=i._getStackIndex(i.index,i._cachedMeta.stack,s?t:void 0);r=c.start+c.chunk*h+c.chunk\u002F2,l=Math.min(a,c.chunk*c.ratio)}else r=n.getPixelForValue(i.getParsed(t)[n.axis],t),l=Math.min(a,e.min*e.ratio);return{base:r-l\u002F2,head:r+l\u002F2,center:r,size:l}}draw(){const t=this,e=t.chart,i=t._cachedMeta,n=i.vScale,o=i.data,s=o.length;let a=0;for(Zt(e.ctx,e.chartArea);a\u003Cs;++a)null!==t.getParsed(a)[n.axis]&&o[a].draw(t._ctx);Qt(e.ctx)}}co.id=\"bar\",co.defaults={datasetElementType:!1,dataElementType:\"bar\",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"base\",\"width\",\"height\"]}}},co.overrides={interaction:{mode:\"index\"},scales:{_index_:{type:\"category\",offset:!0,grid:{offset:!0}},_value_:{type:\"linear\",beginAtZero:!0}}};class ho extends Li{initialize(){this.enableOptionSharing=!0,super.initialize()}parseObjectData(t,e,i,n){const{xScale:o,yScale:s}=t,{xAxisKey:a=\"x\",yAxisKey:r=\"y\"}=this._parsing,l=[];let c,h,d;for(c=i,h=i+n;c\u003Ch;++c)d=e[c],l.push({x:o.parse(lt(d,a),c),y:s.parse(lt(d,r),c),_custom:d&&d.r&&+d.r});return l}getMaxOverflow(){const{data:t,_parsed:e}=this._cachedMeta;let i=0;for(let n=t.length-1;n>=0;--n)i=Math.max(i,t[n].size()\u002F2,e[n]._custom);return i>0&&i}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:n}=e,o=this.getParsed(t),s=i.getLabelForValue(o.x),a=n.getLabelForValue(o.y),r=o._custom;return{label:e.label,value:\"(\"+s+\", \"+a+(r?\", \"+r:\"\")+\")\"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,{xScale:a,yScale:r}=o._cachedMeta,l=o.resolveDataElementOptions(e,n),c=o.getSharedOptions(l),h=o.includeOptions(n,c);for(let l=e;l\u003Ce+i;l++){const e=t[l],i=!s&&o.getParsed(l),c=s?a.getPixelForDecimal(.5):a.getPixelForValue(i.x),d=s?r.getBasePixel():r.getPixelForValue(i.y),u={x:c,y:d,skip:isNaN(c)||isNaN(d)};h&&(u.options=o.resolveDataElementOptions(l,n),s&&(u.options.radius=0)),o.updateElement(e,l,u,n)}o.updateSharedOptions(c,n,l)}resolveDataElementOptions(t,e){const i=this.getParsed(t);let n=super.resolveDataElementOptions(t,e);n.$shared&&(n=Object.assign({},n,{$shared:!1}));const o=n.radius;return\"active\"!==e&&(n.radius=0),n.radius+=K(i&&i._custom,o),n}}ho.id=\"bubble\",ho.defaults={datasetElementType:!1,dataElementType:\"point\",animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"borderWidth\",\"radius\"]}}},ho.overrides={scales:{x:{type:\"linear\"},y:{type:\"linear\"}},plugins:{tooltip:{callbacks:{title:()=>\"\"}}}};class uo extends Li{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,n=this._cachedMeta;let o,s;for(o=t,s=t+e;o\u003Cs;++o)n._parsed[o]=+i[o]}_getRotation(){return Et(this.options.rotation-90)}_getCircumference(){return Et(this.options.circumference)}_getRotationExtents(){let t=_t,e=-_t;const i=this;for(let n=0;n\u003Ci.chart.data.datasets.length;++n)if(i.chart.isDatasetVisible(n)){const o=i.chart.getDatasetMeta(n).controller,s=o._getRotation(),a=o._getCircumference();t=Math.min(t,s),e=Math.max(e,s+a)}return{rotation:t,circumference:e-t}}update(t){const e=this,i=e.chart,{chartArea:n}=i,o=e._cachedMeta,s=o.data,a=e.getMaxBorderWidth()+e.getMaxOffset(s),r=Math.max((Math.min(n.width,n.height)-a)\u002F2,0),l=Math.min(G(e.options.cutout,r),1),c=e._getRingWeight(e.index),{circumference:h,rotation:d}=e._getRotationExtents(),{ratioX:u,ratioY:f,offsetX:g,offsetY:p}=function(t,e,i){let n=1,o=1,s=0,a=0;if(e\u003C_t){const r=t,l=r+e,c=Math.cos(r),h=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,n)=>Ht(t,r,l)?1:Math.max(e,e*i,n,n*i),g=(t,e,n)=>Ht(t,r,l)?-1:Math.min(e,e*i,n,n*i),p=f(0,c,d),m=f(Mt,h,u),x=g(bt,c,d),b=g(bt+Mt,h,u);n=(p-x)\u002F2,o=(m-b)\u002F2,s=-(p+x)\u002F2,a=-(m+b)\u002F2}return{ratioX:n,ratioY:o,offsetX:s,offsetY:a}}(d,h,l),m=(n.width-a)\u002Fu,x=(n.height-a)\u002Ff,b=Math.max(Math.min(m,x)\u002F2,0),_=Z(e.options.radius,b),y=(_-Math.max(_*l,0))\u002Fe._getVisibleDatasetWeightTotal();e.offsetX=g*_,e.offsetY=p*_,o.total=e.calculateTotal(),e.outerRadius=_-y*e._getRingWeightOffset(e.index),e.innerRadius=Math.max(e.outerRadius-y*c,0),e.updateElements(s,0,s.length,t)}_circumference(t,e){const i=this,n=i.options,o=i._cachedMeta,s=i._getCircumference();return e&&n.animation.animateRotate||!this.chart.getDataVisibility(t)||null===o._parsed[t]?0:i.calculateCircumference(o._parsed[t]*s\u002F_t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o.chart,r=a.chartArea,l=a.options.animation,c=(r.left+r.right)\u002F2,h=(r.top+r.bottom)\u002F2,d=s&&l.animateScale,u=d?0:o.innerRadius,f=d?0:o.outerRadius,g=o.resolveDataElementOptions(e,n),p=o.getSharedOptions(g),m=o.includeOptions(n,p);let x,b=o._getRotation();for(x=0;x\u003Ce;++x)b+=o._circumference(x,s);for(x=e;x\u003Ce+i;++x){const e=o._circumference(x,s),i=t[x],a={x:c+o.offsetX,y:h+o.offsetY,startAngle:b,endAngle:b+e,circumference:e,outerRadius:f,innerRadius:u};m&&(a.options=p||o.resolveDataElementOptions(x,n)),b+=e,o.updateElement(i,x,a,n)}o.updateSharedOptions(p,n,g)}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,n=0;for(i=0;i\u003Ce.length;i++){const e=t._parsed[i];null!==e&&!isNaN(e)&&this.chart.getDataVisibility(i)&&(n+=Math.abs(e))}return n}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?_t*(Math.abs(t)\u002Fe):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,n=i.data.labels||[],o=zi(e._parsed[t],i.options.locale);return{label:n[t]||\"\",value:o}}getMaxBorderWidth(t){const e=this;let i=0;const n=e.chart;let o,s,a,r,l;if(!t)for(o=0,s=n.data.datasets.length;o\u003Cs;++o)if(n.isDatasetVisible(o)){a=n.getDatasetMeta(o),t=a.data,r=a.controller,r!==e&&r.configure();break}if(!t)return 0;for(o=0,s=t.length;o\u003Cs;++o)l=r.resolveDataElementOptions(o),\"inner\"!==l.borderAlign&&(i=Math.max(i,l.borderWidth||0,l.hoverBorderWidth||0));return i}getMaxOffset(t){let e=0;for(let i=0,n=t.length;i\u003Cn;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i\u003Ct;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(K(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}uo.id=\"doughnut\",uo.defaults={datasetElementType:!1,dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:\"number\",properties:[\"circumference\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"startAngle\",\"x\",\"y\",\"offset\",\"borderWidth\"]}},cutout:\"50%\",rotation:0,circumference:360,radius:\"100%\",indexAxis:\"r\"},uo.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(((e,i)=>{const n=t.getDatasetMeta(0).controller.getStyle(i);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,hidden:!t.getDataVisibility(i),index:i}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label(t){let e=t.label;const i=\": \"+t.formattedValue;return Y(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class fo extends Li{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this,i=e._cachedMeta,{dataset:n,data:o=[],_dataset:s}=i,a=e.chart._animationsDisabled;let{start:r,count:l}=function(t,e,i){const n=e.length;let o=0,s=n;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:c,max:h,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(o=Nt(Math.min(oe(r,a.axis,c).lo,i?n:oe(e,l,a.getPixelForValue(c)).lo),0,n-1)),s=u?Nt(Math.max(oe(r,a.axis,h).hi+1,i?0:oe(e,l,a.getPixelForValue(h)).hi+1),o,n)-o:n-o}return{start:o,count:s}}(i,o,a);e._drawStart=r,e._drawCount=l,function(t){const{xScale:e,yScale:i,_scaleRanges:n}=t,o={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!n)return t._scaleRanges=o,!0;const s=n.xmin!==e.min||n.xmax!==e.max||n.ymin!==i.min||n.ymax!==i.max;return Object.assign(n,o),s}(i)&&(r=0,l=o.length),n._decimated=!!s._decimated,n.points=o;const c=e.resolveDatasetElementOptions(t);e.options.showLine||(c.borderWidth=0),c.segment=e.options.segment,e.updateElement(n,void 0,{animated:!a,options:c},t),e.updateElements(o,r,l,t)}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,{xScale:a,yScale:r,_stacked:l}=o._cachedMeta,c=o.resolveDataElementOptions(e,n),h=o.getSharedOptions(c),d=o.includeOptions(n,h),u=o.options.spanGaps,f=At(u)?u:Number.POSITIVE_INFINITY,g=o.chart._animationsDisabled||s||\"none\"===n;let p=e>0&&o.getParsed(e-1);for(let c=e;c\u003Ce+i;++c){const e=t[c],i=o.getParsed(c),u=g?e:{},m=$(i.y),x=u.x=a.getPixelForValue(i.x,c),b=u.y=s||m?r.getBasePixel():r.getPixelForValue(l?o.applyStack(r,i,l):i.y,c);u.skip=isNaN(x)||isNaN(b)||m,u.stop=c>0&&i.x-p.x>f,u.parsed=i,d&&(u.options=h||o.resolveDataElementOptions(c,n)),g||o.updateElement(e,c,u,n),p=i}o.updateSharedOptions(h,n,c)}getMaxOverflow(){const t=this,e=t._cachedMeta,i=e.dataset,n=i.options&&i.options.borderWidth||0,o=e.data||[];if(!o.length)return n;const s=o[0].size(t.resolveDataElementOptions(0)),a=o[o.length-1].size(t.resolveDataElementOptions(o.length-1));return Math.max(n,s,a)\u002F2}draw(){this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea),super.draw()}}fo.id=\"line\",fo.defaults={datasetElementType:\"line\",dataElementType:\"point\",showLine:!0,spanGaps:!1},fo.overrides={scales:{_index_:{type:\"category\"},_value_:{type:\"linear\"}}};class go extends Li{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}_updateRadius(){const t=this,e=t.chart,i=e.chartArea,n=e.options,o=Math.min(i.right-i.left,i.bottom-i.top),s=Math.max(o\u002F2,0),a=(s-Math.max(n.cutoutPercentage?s\u002F100*n.cutoutPercentage:1,0))\u002Fe.getVisibleDatasetCount();t.outerRadius=s-a*t.index,t.innerRadius=t.outerRadius-a}updateElements(t,e,i,n){const o=this,s=\"reset\"===n,a=o.chart,r=o.getDataset(),l=a.options.animation,c=o._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*bt;let f,g=u;const p=360\u002Fo.countVisibleElements();for(f=0;f\u003Ce;++f)g+=o._computeAngle(f,n,p);for(f=e;f\u003Ce+i;f++){const e=t[f];let i=g,m=g+o._computeAngle(f,n,p),x=a.getDataVisibility(f)?c.getDistanceFromCenterForValue(r.data[f]):0;g=m,s&&(l.animateScale&&(x=0),l.animateRotate&&(i=m=u));const b={x:h,y:d,innerRadius:0,outerRadius:x,startAngle:i,endAngle:m,options:o.resolveDataElementOptions(f,n)};o.updateElement(e,f,b,n)}}countVisibleElements(){const t=this.getDataset(),e=this._cachedMeta;let i=0;return e.data.forEach(((e,n)=>{!isNaN(t.data[n])&&this.chart.getDataVisibility(n)&&i++})),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?Et(this.resolveDataElementOptions(t,e).angle||i):0}}go.id=\"polarArea\",go.defaults={dataElementType:\"arc\",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"]}},indexAxis:\"r\",startAngle:0},go.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(((e,i)=>{const n=t.getDatasetMeta(0).controller.getStyle(i);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,hidden:!t.getDataVisibility(i),index:i}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>\"\",label:t=>t.chart.data.labels[t.dataIndex]+\": \"+t.formattedValue}}},scales:{r:{type:\"radialLinear\",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class po extends uo{}po.id=\"pie\",po.defaults={cutout:0,rotation:0,circumference:360,radius:\"100%\"};class mo extends Li{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:\"\"+e.getLabelForValue(i[e.axis])}}update(t){const e=this,i=e._cachedMeta,n=i.dataset,o=i.data||[],s=i.iScale.getLabels();if(n.points=o,\"resize\"!==t){const i=e.resolveDatasetElementOptions(t);e.options.showLine||(i.borderWidth=0);const a={_loop:!0,_fullLoop:s.length===o.length,options:i};e.updateElement(n,void 0,a,t)}e.updateElements(o,0,o.length,t)}updateElements(t,e,i,n){const o=this,s=o.getDataset(),a=o._cachedMeta.rScale,r=\"reset\"===n;for(let l=e;l\u003Ce+i;l++){const e=t[l],i=o.resolveDataElementOptions(l,n),c=a.getPointPositionForValue(l,s.data[l]),h=r?a.xCenter:c.x,d=r?a.yCenter:c.y,u={x:h,y:d,angle:c.angle,skip:isNaN(h)||isNaN(d),options:i};o.updateElement(e,l,u,n)}}}mo.id=\"radar\",mo.defaults={datasetElementType:\"line\",dataElementType:\"point\",indexAxis:\"r\",showLine:!0,elements:{line:{fill:\"start\"}}},mo.overrides={aspectRatio:1,scales:{r:{type:\"radialLinear\"}}};class xo extends fo{}xo.id=\"scatter\",xo.defaults={showLine:!1,fill:!1},xo.overrides={interaction:{mode:\"point\"},plugins:{tooltip:{callbacks:{title:()=>\"\",label:t=>\"(\"+t.label+\", \"+t.formattedValue+\")\"}}},scales:{x:{type:\"linear\"},y:{type:\"linear\"}}};var bo=Object.freeze({__proto__:null,BarController:co,BubbleController:ho,DoughnutController:uo,LineController:fo,PolarAreaController:go,PieController:po,RadarController:mo,ScatterController:xo});function _o(t,e){const{startAngle:i,endAngle:n,pixelMargin:o,x:s,y:a,outerRadius:r,innerRadius:l}=e;let c=o\u002Fr;t.beginPath(),t.arc(s,a,r,i-c,n+c),l>o?(c=o\u002Fl,t.arc(s,a,l,n+c,i-c,!0)):t.arc(s,a,o,n+Mt,i-Mt),t.closePath(),t.clip()}function yo(t,e,i,n){const o=Le(t.options.borderRadius,[\"outerStart\",\"outerEnd\",\"innerStart\",\"innerEnd\"]);const s=(i-e)\u002F2,a=Math.min(s,n*e\u002F2),r=t=>{const e=(i-Math.min(s,t))*n\u002F2;return Nt(t,0,Math.min(s,e))};return{outerStart:r(o.outerStart),outerEnd:r(o.outerEnd),innerStart:Nt(o.innerStart,0,a),innerEnd:Nt(o.innerEnd,0,a)}}function vo(t,e,i,n){return{x:i+t*Math.cos(e),y:n+t*Math.sin(e)}}function wo(t,e){const{x:i,y:n,startAngle:o,endAngle:s,pixelMargin:a}=e,r=Math.max(e.outerRadius-a,0),l=e.innerRadius+a,{outerStart:c,outerEnd:h,innerStart:d,innerEnd:u}=yo(e,l,r,s-o),f=r-c,g=r-h,p=o+c\u002Ff,m=s-h\u002Fg,x=l+d,b=l+u,_=o+d\u002Fx,y=s-u\u002Fb;if(t.beginPath(),t.arc(i,n,r,p,m),h>0){const e=vo(g,m,i,n);t.arc(e.x,e.y,h,m,s+Mt)}const v=vo(b,s,i,n);if(t.lineTo(v.x,v.y),u>0){const e=vo(b,y,i,n);t.arc(e.x,e.y,u,s+Mt,y+Math.PI)}if(t.arc(i,n,l,s-u\u002Fl,o+d\u002Fl,!0),d>0){const e=vo(x,_,i,n);t.arc(e.x,e.y,d,_+Math.PI,o-Mt)}const w=vo(f,o,i,n);if(t.lineTo(w.x,w.y),c>0){const e=vo(f,p,i,n);t.arc(e.x,e.y,c,o-Mt,p)}t.closePath()}function Mo(t,e){const{options:i}=e,n=\"inner\"===i.borderAlign;i.borderWidth&&(n?(t.lineWidth=2*i.borderWidth,t.lineJoin=\"round\"):(t.lineWidth=i.borderWidth,t.lineJoin=\"bevel\"),e.fullCircles&&function(t,e,i){const{x:n,y:o,startAngle:s,endAngle:a,pixelMargin:r}=e,l=Math.max(e.outerRadius-r,0),c=e.innerRadius+r;let h;for(i&&(e.endAngle=e.startAngle+_t,_o(t,e),e.endAngle=a,e.endAngle===e.startAngle&&(e.endAngle+=_t,e.fullCircles--)),t.beginPath(),t.arc(n,o,c,s+_t,s,!0),h=0;h\u003Ce.fullCircles;++h)t.stroke();for(t.beginPath(),t.arc(n,o,l,s,s+_t),h=0;h\u003Ce.fullCircles;++h)t.stroke()}(t,e,n),n&&_o(t,e),wo(t,e),t.stroke())}class ko extends Ei{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const n=this.getProps([\"x\",\"y\"],i),{angle:o,distance:s}=Ft(n,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:l,outerRadius:c,circumference:h}=this.getProps([\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\",\"circumference\"],i);return(h>=_t||Ht(o,a,r))&&(s>=l&&s\u003C=c)}getCenterPoint(t){const{x:e,y:i,startAngle:n,endAngle:o,innerRadius:s,outerRadius:a}=this.getProps([\"x\",\"y\",\"startAngle\",\"endAngle\",\"innerRadius\",\"outerRadius\"],t),r=(n+o)\u002F2,l=(s+a)\u002F2;return{x:e+Math.cos(r)*l,y:i+Math.sin(r)*l}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const e=this,i=e.options,n=i.offset||0;if(e.pixelMargin=\"inner\"===i.borderAlign?.33:0,e.fullCircles=Math.floor(e.circumference\u002F_t),!(0===e.circumference||e.innerRadius\u003C0||e.outerRadius\u003C0)){if(t.save(),n&&e.circumference\u003C_t){const i=(e.startAngle+e.endAngle)\u002F2;t.translate(Math.cos(i)*n,Math.sin(i)*n)}t.fillStyle=i.backgroundColor,t.strokeStyle=i.borderColor,function(t,e){if(e.fullCircles){e.endAngle=e.startAngle+_t,wo(t,e);for(let i=0;i\u003Ce.fullCircles;++i)t.fill()}isNaN(e.circumference)||(e.endAngle=e.startAngle+e.circumference%_t),wo(t,e),t.fill()}(t,e),Mo(t,e),t.restore()}}}function So(t,e,i=e){t.lineCap=K(i.borderCapStyle,e.borderCapStyle),t.setLineDash(K(i.borderDash,e.borderDash)),t.lineDashOffset=K(i.borderDashOffset,e.borderDashOffset),t.lineJoin=K(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=K(i.borderWidth,e.borderWidth),t.strokeStyle=K(i.borderColor,e.borderColor)}function Po(t,e,i){t.lineTo(i.x,i.y)}function Do(t,e,i={}){const n=t.length,{start:o=0,end:s=n-1}=i,{start:a,end:r}=e,l=Math.max(o,a),c=Math.min(s,r),h=o\u003Ca&&s\u003Ca||o>r&&s>r;return{count:n,start:l,loop:e.loop,ilen:c\u003Cl&&!h?n+c-l:c-l}}function Co(t,e,i,n){const{points:o,options:s}=e,{count:a,start:r,loop:l,ilen:c}=Do(o,i,n),h=function(t){return t.stepped?Jt:t.tension||\"monotone\"===t.cubicInterpolationMode?te:Po}(s);let d,u,f,{move:g=!0,reverse:p}=n||{};for(d=0;d\u003C=c;++d)u=o[(r+(p?c-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):h(t,f,u,p,s.stepped),f=u);return l&&(u=o[(r+(p?c:0))%a],h(t,f,u,p,s.stepped)),!!l}function Oo(t,e,i,n){const o=e.points,{count:s,start:a,ilen:r}=Do(o,i,n),{move:l=!0,reverse:c}=n||{};let h,d,u,f,g,p,m=0,x=0;const b=t=>(a+(c?r-t:t))%s,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=o[b(0)],t.moveTo(d.x,d.y)),h=0;h\u003C=r;++h){if(d=o[b(h)],d.skip)continue;const e=d.x,i=d.y,n=0|e;n===u?(i\u003Cf?f=i:i>g&&(g=i),m=(x*m+e)\u002F++x):(_(),t.lineTo(e,i),u=n,x=0,f=g=i),p=i}_()}function Ao(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||\"monotone\"===e.cubicInterpolationMode||e.stepped||i)?Oo:Co}ko.id=\"arc\",ko.defaults={borderAlign:\"center\",borderColor:\"#fff\",borderRadius:0,borderWidth:2,offset:0,angle:void 0},ko.defaultRoutes={backgroundColor:\"backgroundColor\"};const To=\"function\"==typeof Path2D;function Ro(t,e,i,n){To&&1===e.segments.length?function(t,e,i,n){let o=e._path;o||(o=e._path=new Path2D,e.path(o,i,n)&&o.closePath()),So(t,e.options),t.stroke(o)}(t,e,i,n):function(t,e,i,n){const{segments:o,options:s}=e,a=Ao(e);for(const r of o)So(t,s,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+n-1})&&t.closePath(),t.stroke()}(t,e,i,n)}class Lo extends Ei{constructor(t){super(),this.animated=!0,this.options=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,t&&Object.assign(this,t)}updateControlPoints(t){const e=this,i=e.options;if((i.tension||\"monotone\"===i.cubicInterpolationMode)&&!i.stepped&&!e._pointsUpdated){const n=i.spanGaps?e._loop:e._fullLoop;fn(e._points,i,t,n),e._pointsUpdated=!0}}set points(t){const e=this;e._points=t,delete e._segments,delete e._path,e._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=kn(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this,n=i.options,o=t[e],s=i.points,a=Mn(i,{property:e,start:o,end:o});if(!a.length)return;const r=[],l=function(t){return t.stepped?pn:t.tension||\"monotone\"===t.cubicInterpolationMode?mn:gn}(n);let c,h;for(c=0,h=a.length;c\u003Ch;++c){const{start:i,end:h}=a[c],d=s[i],u=s[h];if(d===u){r.push(d);continue}const f=l(d,u,Math.abs((o-d[e])\u002F(u[e]-d[e])),n.stepped);f[e]=t[e],r.push(f)}return 1===r.length?r[0]:r}pathSegment(t,e,i){return Ao(this)(t,this,e,i)}path(t,e,i){const n=this,o=n.segments,s=Ao(n);let a=n._loop;e=e||0,i=i||n.points.length-e;for(const r of o)a&=s(t,n,r,{start:e,end:e+i-1});return!!a}draw(t,e,i,n){const o=this,s=o.options||{};(o.points||[]).length&&s.borderWidth&&(t.save(),Ro(t,o,i,n),t.restore(),o.animated&&(o._pointsUpdated=!1,o._path=void 0))}}function Eo(t,e,i,n){const o=t.options,{[i]:s}=t.getProps([i],n);return Math.abs(e-s)\u003Co.radius+o.hitRadius}Lo.id=\"line\",Lo.defaults={borderCapStyle:\"butt\",borderDash:[],borderDashOffset:0,borderJoinStyle:\"miter\",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:\"default\",fill:!1,spanGaps:!1,stepped:!1,tension:0},Lo.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"},Lo.descriptors={_scriptable:!0,_indexable:t=>\"borderDash\"!==t&&\"fill\"!==t};class Io extends Ei{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const n=this.options,{x:o,y:s}=this.getProps([\"x\",\"y\"],i);return Math.pow(t-o,2)+Math.pow(e-s,2)\u003CMath.pow(n.hitRadius+n.radius,2)}inXRange(t,e){return Eo(this,t,\"x\",e)}inYRange(t,e){return Eo(this,t,\"y\",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps([\"x\",\"y\"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t){const e=this,i=e.options;e.skip||i.radius\u003C.1||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Kt(t,i,e.x,e.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function zo(t,e){const{x:i,y:n,base:o,width:s,height:a}=t.getProps([\"x\",\"y\",\"base\",\"width\",\"height\"],e);let r,l,c,h,d;return t.horizontal?(d=a\u002F2,r=Math.min(i,o),l=Math.max(i,o),c=n-d,h=n+d):(d=s\u002F2,r=i-d,l=i+d,c=Math.min(n,o),h=Math.max(n,o)),{left:r,top:c,right:l,bottom:h}}function Fo(t){let e=t.options.borderSkipped;const i={};return e?(e=t.horizontal?Vo(e,\"left\",\"right\",t.base>t.x):Vo(e,\"bottom\",\"top\",t.base\u003Ct.y),i[e]=!0,i):i}function Vo(t,e,i,n){var o,s,a;return n?(a=i,t=Bo(t=(o=t)===(s=e)?a:o===a?s:o,i,e)):t=Bo(t,e,i),t}function Bo(t,e,i){return\"start\"===t?e:\"end\"===t?i:t}function Wo(t,e,i,n){return t?0:Math.max(Math.min(e,n),i)}function Ho(t){const e=zo(t),i=e.right-e.left,n=e.bottom-e.top,o=function(t,e,i){const n=t.options.borderWidth,o=Fo(t),s=Ee(n);return{t:Wo(o.top,s.top,0,i),r:Wo(o.right,s.right,0,e),b:Wo(o.bottom,s.bottom,0,i),l:Wo(o.left,s.left,0,e)}}(t,i\u002F2,n\u002F2),s=function(t,e,i){const{enableBorderRadius:n}=t.getProps([\"enableBorderRadius\"]),o=t.options.borderRadius,s=Ie(o),a=Math.min(e,i),r=Fo(t),l=n||U(o);return{topLeft:Wo(!l||r.top||r.left,s.topLeft,0,a),topRight:Wo(!l||r.top||r.right,s.topRight,0,a),bottomLeft:Wo(!l||r.bottom||r.left,s.bottomLeft,0,a),bottomRight:Wo(!l||r.bottom||r.right,s.bottomRight,0,a)}}(t,i\u002F2,n\u002F2);return{outer:{x:e.left,y:e.top,w:i,h:n,radius:s},inner:{x:e.left+o.l,y:e.top+o.t,w:i-o.l-o.r,h:n-o.t-o.b,radius:{topLeft:Math.max(0,s.topLeft-Math.max(o.t,o.l)),topRight:Math.max(0,s.topRight-Math.max(o.t,o.r)),bottomLeft:Math.max(0,s.bottomLeft-Math.max(o.b,o.l)),bottomRight:Math.max(0,s.bottomRight-Math.max(o.b,o.r))}}}}function No(t,e,i,n){const o=null===e,s=null===i,a=t&&!(o&&s)&&zo(t,n);return a&&(o||e>=a.left&&e\u003C=a.right)&&(s||i>=a.top&&i\u003C=a.bottom)}function jo(t,e){t.rect(e.x,e.y,e.w,e.h)}Io.id=\"point\",Io.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:\"circle\",radius:3,rotation:0},Io.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};class $o extends Ei{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,t&&Object.assign(this,t)}draw(t){const e=this.options,{inner:i,outer:n}=Ho(this),o=(s=n.radius).topLeft||s.topRight||s.bottomLeft||s.bottomRight?ie:jo;var s;t.save(),n.w===i.w&&n.h===i.h||(t.beginPath(),o(t,n),t.clip(),o(t,i),t.fillStyle=e.borderColor,t.fill(\"evenodd\")),t.beginPath(),o(t,i),t.fillStyle=e.backgroundColor,t.fill(),t.restore()}inRange(t,e,i){return No(this,t,e,i)}inXRange(t,e){return No(this,t,null,e)}inYRange(t,e){return No(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:n,horizontal:o}=this.getProps([\"x\",\"y\",\"base\",\"horizontal\"],t);return{x:o?(e+n)\u002F2:e,y:o?i:(i+n)\u002F2}}getRange(t){return\"x\"===t?this.width\u002F2:this.height\u002F2}}$o.id=\"bar\",$o.defaults={borderSkipped:\"start\",borderWidth:0,borderRadius:0,enableBorderRadius:!0,pointStyle:void 0},$o.defaultRoutes={backgroundColor:\"backgroundColor\",borderColor:\"borderColor\"};var Yo=Object.freeze({__proto__:null,ArcElement:ko,LineElement:Lo,PointElement:Io,BarElement:$o});function Uo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,\"data\",{value:e})}}function Xo(t){t.data.datasets.forEach((t=>{Uo(t)}))}var qo={id:\"decimation\",defaults:{algorithm:\"min-max\",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Xo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:s,indexAxis:a}=e,r=t.getDatasetMeta(o),l=s||e.data;if(\"y\"===Ve([a,t.options.indexAxis]))return;if(\"line\"!==r.type)return;const c=t.scales[r.xAxisID];if(\"linear\"!==c.type&&\"time\"!==c.type)return;if(t.options.parsing)return;let h,{start:d,count:u}=function(t,e){const i=e.length;let n,o=0;const{iScale:s}=t,{min:a,max:r,minDefined:l,maxDefined:c}=s.getUserBounds();return l&&(o=Nt(oe(e,s.axis,a).lo,0,i-1)),n=c?Nt(oe(e,s.axis,r).hi+1,o,i)-o:i-o,{start:o,count:n}}(r,l);if(u\u003C=4*n)Uo(e);else{switch($(s)&&(e._data=l,delete e.data,Object.defineProperty(e,\"data\",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case\"lttb\":h=function(t,e,i,n,o){const s=o.samples||n;if(s>=i)return t.slice(e,e+i);const a=[],r=(i-2)\u002F(s-2);let l=0;const c=e+i-1;let h,d,u,f,g,p=e;for(a[l++]=t[p],h=0;h\u003Cs-2;h++){let n,o=0,s=0;const c=Math.floor((h+1)*r)+1+e,m=Math.min(Math.floor((h+2)*r)+1,i)+e,x=m-c;for(n=c;n\u003Cm;n++)o+=t[n].x,s+=t[n].y;o\u002F=x,s\u002F=x;const b=Math.floor(h*r)+1+e,_=Math.floor((h+1)*r)+1+e,{x:y,y:v}=t[p];for(u=f=-1,n=b;n\u003C_;n++)f=.5*Math.abs((y-o)*(t[n].y-v)-(y-t[n].x)*(s-v)),f>u&&(u=f,d=t[n],g=n);a[l++]=d,p=g}return a[l++]=t[c],a}(l,d,u,n,i);break;case\"min-max\":h=function(t,e,i,n){let o,s,a,r,l,c,h,d,u,f,g=0,p=0;const m=[],x=e+i-1,b=t[e].x,_=t[x].x-b;for(o=e;o\u003Ce+i;++o){s=t[o],a=(s.x-b)\u002F_*n,r=s.y;const e=0|a;if(e===l)r\u003Cu?(u=r,c=o):r>f&&(f=r,h=o),g=(p*g+s.x)\u002F++p;else{const i=o-1;if(!$(c)&&!$(h)){const e=Math.min(c,h),n=Math.max(c,h);e!==d&&e!==i&&m.push({...t[e],x:g}),n!==d&&n!==i&&m.push({...t[n],x:g})}o>0&&i!==d&&m.push(t[i]),m.push(s),l=e,p=0,u=f=r,c=h=d=o}}return m}(l,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=h}}))},destroy(t){Xo(t)}};function Ko(t,e,i){const n=function(t){const e=t.options,i=e.fill;let n=K(i&&i.target,i);return void 0===n&&(n=!!e.backgroundColor),!1!==n&&null!==n&&(!0===n?\"origin\":n)}(t);if(U(n))return!isNaN(n.value)&&n;let o=parseFloat(n);return X(o)&&Math.floor(o)===o?(\"-\"!==n[0]&&\"+\"!==n[0]||(o=e+o),!(o===e||o\u003C0||o>=i)&&o):[\"origin\",\"start\",\"end\",\"stack\"].indexOf(n)>=0&&n}class Go{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:n,y:o,radius:s}=this;return e=e||{start:0,end:_t},t.arc(n,o,s,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:n}=this,o=t.angle;return{x:e+Math.cos(o)*n,y:i+Math.sin(o)*n,angle:o}}}function Zo(t){return(t.scale||{}).getPointPositionForValue?function(t){const{scale:e,fill:i}=t,n=e.options,o=e.getLabels().length,s=[],a=n.reverse?e.max:e.min,r=n.reverse?e.min:e.max;let l,c,h;if(h=\"start\"===i?a:\"end\"===i?r:U(i)?i.value:e.getBaseValue(),n.grid.circular)return c=e.getPointPositionForValue(0,a),new Go({x:c.x,y:c.y,radius:e.getDistanceFromCenterForValue(h)});for(l=0;l\u003Co;++l)s.push(e.getPointPositionForValue(l,h));return s}(t):function(t){const{scale:e={},fill:i}=t;let n,o=null;return\"start\"===i?o=e.bottom:\"end\"===i?o=e.top:U(i)?o=e.getPixelForValue(i.value):e.getBasePixel&&(o=e.getBasePixel()),X(o)?(n=e.isHorizontal(),{x:n?o:null,y:n?null:o}):null}(t)}function Qo(t){const{chart:e,scale:i,index:n,line:o}=t,s=[],a=o.segments,r=o.points,l=function(t,e){const i=[],n=t.getSortedVisibleDatasetMetas();for(let t=0;t\u003Cn.length;t++){const o=n[t];if(o.index===e)break;Jo(o)&&i.unshift(o.dataset)}return i}(e,n);l.push(is({x:null,y:i.bottom},o));for(let t=0;t\u003Ca.length;t++){const e=a[t];for(let t=e.start;t\u003C=e.end;t++)ts(s,r[t],l)}return new Lo({points:s,options:{}})}const Jo=t=>\"line\"===t.type&&!t.hidden;function ts(t,e,i){const n=[];for(let o=0;o\u003Ci.length;o++){const s=i[o],{first:a,last:r,point:l}=es(s,e,\"x\");if(!(!l||a&&r))if(a)n.unshift(l);else if(t.push(l),!r)break}t.push(...n)}function es(t,e,i){const n=t.interpolate(e,i);if(!n)return{};const o=n[i],s=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t\u003Cs.length;t++){const e=s[t],n=a[e.start][i],c=a[e.end][i];if(o>=n&&o\u003C=c){r=o===n,l=o===c;break}}return{first:r,last:l,point:n}}function is(t,e){let i=[],n=!1;return Y(t)?(n=!0,i=t):i=function(t,e){const{x:i=null,y:n=null}=t||{},o=e.points,s=[];return e.segments.forEach((t=>{const e=o[t.start],a=o[t.end];null!==n?(s.push({x:e.x,y:n}),s.push({x:a.x,y:n})):null!==i&&(s.push({x:i,y:e.y}),s.push({x:i,y:a.y}))})),s}(t,e),i.length?new Lo({points:i,options:{tension:0},_loop:n,_fullLoop:n}):null}function ns(t,e,i){let n=t[e].fill;const o=[e];let s;if(!i)return n;for(;!1!==n&&-1===o.indexOf(n);){if(!X(n))return n;if(s=t[n],!s)return!1;if(s.visible)return n;o.push(n),n=s.fill}return!1}function os(t,e,i){t.beginPath(),e.path(t),t.lineTo(e.last().x,i),t.lineTo(e.first().x,i),t.closePath(),t.clip()}function ss(t,e,i,n){if(n)return;let o=e[t],s=i[t];return\"angle\"===t&&(o=Wt(o),s=Wt(s)),{property:t,start:o,end:s}}function as(t,e,i,n){return t&&e?n(t[i],e[i]):t?t[i]:e?e[i]:0}function rs(t,e,i){const{top:n,bottom:o}=e.chart.chartArea,{property:s,start:a,end:r}=i||{};\"x\"===s&&(t.beginPath(),t.rect(a,n,r-a,o-n),t.clip())}function ls(t,e,i,n){const o=e.interpolate(i,n);o&&t.lineTo(o.x,o.y)}function cs(t,e){const{line:i,target:n,property:o,color:s,scale:a}=e,r=function(t,e,i){const n=t.segments,o=t.points,s=e.points,a=[];for(const t of n){const n=ss(i,o[t.start],o[t.end],t.loop);if(!e.segments){a.push({source:t,target:n,start:o[t.start],end:o[t.end]});continue}const r=Mn(e,n);for(const e of r){const r=ss(i,s[e.start],s[e.end],e.loop),l=wn(t,o,r);for(const t of l)a.push({source:t,target:e,start:{[i]:as(n,r,\"start\",Math.max)},end:{[i]:as(n,r,\"end\",Math.min)}})}}return a}(i,n,o);for(const{source:e,target:l,start:c,end:h}of r){const{style:{backgroundColor:r=s}={}}=e;t.save(),t.fillStyle=r,rs(t,a,ss(o,c,h)),t.beginPath();const d=!!i.pathSegment(t,e);d?t.closePath():ls(t,n,h,o);const u=!!n.pathSegment(t,l,{move:d,reverse:!0}),f=d&&u;f||ls(t,n,c,o),t.closePath(),t.fill(f?\"evenodd\":\"nonzero\"),t.restore()}}function hs(t,e,i){const n=function(t){const{chart:e,fill:i,line:n}=t;if(X(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if(\"stack\"===i)return Qo(t);const o=Zo(t);return o instanceof Go?o:is(o,n)}(e),{line:o,scale:s,axis:a}=e,r=o.options,l=r.fill,c=r.backgroundColor,{above:h=c,below:d=c}=l||{};n&&o.points.length&&(Zt(t,i),function(t,e){const{line:i,target:n,above:o,below:s,area:a,scale:r}=e,l=i._loop?\"angle\":e.axis;t.save(),\"x\"===l&&s!==o&&(os(t,n,a.top),cs(t,{line:i,target:n,color:o,scale:r,property:l}),t.restore(),t.save(),os(t,n,a.bottom)),cs(t,{line:i,target:n,color:s,scale:r,property:l}),t.restore()}(t,{line:o,target:n,above:h,below:d,area:i,scale:s,axis:a}),Qt(t))}var ds={id:\"filler\",afterDatasetsUpdate(t,e,i){const n=(t.data.datasets||[]).length,o=[];let s,a,r,l;for(a=0;a\u003Cn;++a)s=t.getDatasetMeta(a),r=s.dataset,l=null,r&&r.options&&r instanceof Lo&&(l={visible:t.isDatasetVisible(a),index:a,fill:Ko(r,a,n),chart:t,axis:s.controller.options.indexAxis,scale:s.vScale,line:r}),s.$filler=l,o.push(l);for(a=0;a\u003Cn;++a)l=o[a],l&&!1!==l.fill&&(l.fill=ns(o,a,i.propagate))},beforeDraw(t,e,i){const n=\"beforeDraw\"===i.drawTime,o=t.getSortedVisibleDatasetMetas(),s=t.chartArea;for(let e=o.length-1;e>=0;--e){const i=o[e].$filler;i&&(i.line.updateControlPoints(s),n&&hs(t.ctx,i,s))}},beforeDatasetsDraw(t,e,i){if(\"beforeDatasetsDraw\"!==i.drawTime)return;const n=t.getSortedVisibleDatasetMetas();for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&hs(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const n=e.meta.$filler;n&&!1!==n.fill&&\"beforeDatasetDraw\"===i.drawTime&&hs(t.ctx,n,t.chartArea)},defaults:{propagate:!0,drawTime:\"beforeDatasetDraw\"}};const us=(t,e)=>{let{boxHeight:i=e,boxWidth:n=e}=t;return t.usePointStyle&&(i=Math.min(i,e),n=Math.min(n,e)),{boxWidth:n,boxHeight:i,itemHeight:Math.max(e,i)}};class fs extends Ei{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){const n=this;n.maxWidth=t,n.maxHeight=e,n._margins=i,n.setDimensions(),n.buildLabels(),n.fit()}setDimensions(){const t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height)}buildLabels(){const t=this,e=t.options.labels||{};let i=Q(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter((i=>e.filter(i,t.chart.data)))),e.sort&&(i=i.sort(((i,n)=>e.sort(i,n,t.chart.data)))),t.options.reverse&&i.reverse(),t.legendItems=i}fit(){const t=this,{options:e,ctx:i}=t;if(!e.display)return void(t.width=t.height=0);const n=e.labels,o=Fe(n.font),s=o.size,a=t._computeTitleHeight(),{boxWidth:r,itemHeight:l}=us(n,s);let c,h;i.font=o.string,t.isHorizontal()?(c=t.maxWidth,h=t._fitRows(a,s,r,l)+10):(h=t.maxHeight,c=t._fitCols(a,s,r,l)+10),t.width=Math.min(c,e.maxWidth||t.maxWidth),t.height=Math.min(h,e.maxHeight||t.maxHeight)}_fitRows(t,e,i,n){const o=this,{ctx:s,maxWidth:a,options:{labels:{padding:r}}}=o,l=o.legendHitBoxes=[],c=o.lineWidths=[0],h=n+r;let d=t;s.textAlign=\"left\",s.textBaseline=\"middle\";let u=-1,f=-h;return o.legendItems.forEach(((t,o)=>{const g=i+e\u002F2+s.measureText(t.text).width;(0===o||c[c.length-1]+g+2*r>a)&&(d+=h,c[c.length-(o>0?0:1)]=0,f+=h,u++),l[o]={left:0,top:f,row:u,width:g,height:n},c[c.length-1]+=g+r})),d}_fitCols(t,e,i,n){const o=this,{ctx:s,maxHeight:a,options:{labels:{padding:r}}}=o,l=o.legendHitBoxes=[],c=o.columnSizes=[],h=a-t;let d=r,u=0,f=0,g=0,p=0,m=0;return o.legendItems.forEach(((t,o)=>{const a=i+e\u002F2+s.measureText(t.text).width;o>0&&f+e+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,m++,p=0,u=f=0),u=Math.max(u,a),f+=e+r,l[o]={left:g,top:p,col:m,width:a,height:n},p+=n+r})),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){const t=this;if(!t.options.display)return;const e=t._computeTitleHeight(),{legendHitBoxes:i,options:{align:n,labels:{padding:s}}}=t;if(this.isHorizontal()){let a=0,r=o(n,t.left+s,t.right-t.lineWidths[a]);for(const l of i)a!==l.row&&(a=l.row,r=o(n,t.left+s,t.right-t.lineWidths[a])),l.top+=t.top+e+s,l.left=r,r+=l.width+s}else{let a=0,r=o(n,t.top+e+s,t.bottom-t.columnSizes[a].height);for(const l of i)l.col!==a&&(a=l.col,r=o(n,t.top+e+s,t.bottom-t.columnSizes[a].height)),l.top=r,l.left+=t.left+s,r+=l.height+s}}isHorizontal(){return\"top\"===this.options.position||\"bottom\"===this.options.position}draw(){const t=this;if(t.options.display){const e=t.ctx;Zt(e,t),t._draw(),Qt(e)}}_draw(){const t=this,{options:e,columnSizes:i,lineWidths:n,ctx:a}=t,{align:r,labels:l}=e,c=xt.color,h=xn(e.rtl,t.left,t.width),d=Fe(l.font),{color:u,padding:f}=l,g=d.size,p=g\u002F2;let m;t.drawTitle(),a.textAlign=h.textAlign(\"left\"),a.textBaseline=\"middle\",a.lineWidth=.5,a.font=d.string;const{boxWidth:x,boxHeight:b,itemHeight:_}=us(l,g),y=t.isHorizontal(),v=this._computeTitleHeight();m=y?{x:o(r,t.left+f,t.right-n[0]),y:t.top+f+v,line:0}:{x:t.left+f,y:o(r,t.top+v+f,t.bottom-i[0].height),line:0},bn(t.ctx,e.textDirection);const w=_+f;t.legendItems.forEach(((e,M)=>{a.strokeStyle=e.fontColor||u,a.fillStyle=e.fontColor||u;const k=a.measureText(e.text).width,S=h.textAlign(e.textAlign||(e.textAlign=l.textAlign)),P=x+g\u002F2+k;let D=m.x,C=m.y;h.setWidth(t.width),y?M>0&&D+P+f>t.right&&(C=m.y+=w,m.line++,D=m.x=o(r,t.left+f,t.right-n[m.line])):M>0&&C+w>t.bottom&&(D=m.x=D+i[m.line].width+f,m.line++,C=m.y=o(r,t.top+v+f,t.bottom-i[m.line].height));!function(t,e,i){if(isNaN(x)||x\u003C=0||isNaN(b)||b\u003C0)return;a.save();const n=K(i.lineWidth,1);if(a.fillStyle=K(i.fillStyle,c),a.lineCap=K(i.lineCap,\"butt\"),a.lineDashOffset=K(i.lineDashOffset,0),a.lineJoin=K(i.lineJoin,\"miter\"),a.lineWidth=n,a.strokeStyle=K(i.strokeStyle,c),a.setLineDash(K(i.lineDash,[])),l.usePointStyle){const o={radius:x*Math.SQRT2\u002F2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},s=h.xPlus(t,x\u002F2);Kt(a,o,s,e+p)}else{const o=e+Math.max((g-b)\u002F2,0),s=h.leftForLtr(t,x),r=Ie(i.borderRadius);a.beginPath(),Object.values(r).some((t=>0!==t))?ie(a,{x:s,y:o,w:x,h:b,radius:r}):a.rect(s,o,x,b),a.fill(),0!==n&&a.stroke()}a.restore()}(h.x(D),C,e),D=s(S,D+x+p,t.right),function(t,e,i){ee(a,i.text,t,e+_\u002F2,d,{strikethrough:i.hidden,textAlign:i.textAlign})}(h.x(D),C,e),y?m.x+=P+f:m.y+=w})),_n(t.ctx,e.textDirection)}drawTitle(){const t=this,e=t.options,i=e.title,s=Fe(i.font),a=ze(i.padding);if(!i.display)return;const r=xn(e.rtl,t.left,t.width),l=t.ctx,c=i.position,h=s.size\u002F2,d=a.top+h;let u,f=t.left,g=t.width;if(this.isHorizontal())g=Math.max(...t.lineWidths),u=t.top+d,f=o(e.align,f,t.right-g);else{const i=t.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);u=d+o(e.align,t.top,t.bottom-i-e.labels.padding-t._computeTitleHeight())}const p=o(c,f,f+g);l.textAlign=r.textAlign(n(c)),l.textBaseline=\"middle\",l.strokeStyle=i.color,l.fillStyle=i.color,l.font=s.string,ee(l,i.text,p,u,s)}_computeTitleHeight(){const t=this.options.title,e=Fe(t.font),i=ze(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){const i=this;let n,o,s;if(t>=i.left&&t\u003C=i.right&&e>=i.top&&e\u003C=i.bottom)for(s=i.legendHitBoxes,n=0;n\u003Cs.length;++n)if(o=s[n],t>=o.left&&t\u003C=o.left+o.width&&e>=o.top&&e\u003C=o.top+o.height)return i.legendItems[n];return null}handleEvent(t){const e=this,i=e.options;if(!function(t,e){if(\"mousemove\"===t&&(e.onHover||e.onLeave))return!0;if(e.onClick&&(\"click\"===t||\"mouseup\"===t))return!0;return!1}(t.type,i))return;const n=e._getLegendItemAt(t.x,t.y);if(\"mousemove\"===t.type){const a=e._hoveredItem,r=(s=n,null!==(o=a)&&null!==s&&o.datasetIndex===s.datasetIndex&&o.index===s.index);a&&!r&&Q(i.onLeave,[t,a,e],e),e._hoveredItem=n,n&&!r&&Q(i.onHover,[t,n,e],e)}else n&&Q(i.onClick,[t,n,e],e);var o,s}}var gs={id:\"legend\",_element:fs,start(t,e,i){const n=t.legend=new fs({ctx:t.ctx,options:i,chart:t});Ge.configure(t,n,i),Ge.addBox(t,n)},stop(t){Ge.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const n=t.legend;Ge.configure(t,n,i),n.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:\"top\",align:\"center\",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const n=e.datasetIndex,o=i.chart;o.isDatasetVisible(n)?(o.hide(n),e.hidden=!0):(o.show(n),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:n,textAlign:o,color:s}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=ze(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:s,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)\u002F4,strokeStyle:a.borderColor,pointStyle:n||a.pointStyle,rotation:a.rotation,textAlign:o||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:\"center\",text:\"\"}},descriptors:{_scriptable:t=>!t.startsWith(\"on\"),labels:{_scriptable:t=>![\"generateLabels\",\"filter\",\"sort\"].includes(t)}}};class ps extends Ei{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this,n=i.options;if(i.left=0,i.top=0,!n.display)return void(i.width=i.height=i.right=i.bottom=0);i.width=i.right=t,i.height=i.bottom=e;const o=Y(n.text)?n.text.length:1;i._padding=ze(n.padding);const s=o*Fe(n.font).lineHeight+i._padding.height;i.isHorizontal()?i.height=s:i.width=s}isHorizontal(){const t=this.options.position;return\"top\"===t||\"bottom\"===t}_drawArgs(t){const{top:e,left:i,bottom:n,right:s,options:a}=this,r=a.align;let l,c,h,d=0;return this.isHorizontal()?(c=o(r,i,s),h=e+t,l=s-i):(\"left\"===a.position?(c=i+t,h=o(r,n,e),d=-.5*bt):(c=s-t,h=o(r,e,n),d=.5*bt),l=n-e),{titleX:c,titleY:h,maxWidth:l,rotation:d}}draw(){const t=this,e=t.ctx,i=t.options;if(!i.display)return;const o=Fe(i.font),s=o.lineHeight\u002F2+t._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=t._drawArgs(s);ee(e,i.text,0,0,o,{color:i.color,maxWidth:l,rotation:c,textAlign:n(i.align),textBaseline:\"middle\",translation:[a,r]})}}var ms={id:\"title\",_element:ps,start(t,e,i){!function(t,e){const i=new ps({ctx:t.ctx,options:e,chart:t});Ge.configure(t,i,e),Ge.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Ge.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const n=t.titleBlock;Ge.configure(t,n,i),n.options=i},defaults:{align:\"center\",display:!1,font:{weight:\"bold\"},fullSize:!0,padding:10,position:\"top\",text:\"\",weight:2e3},defaultRoutes:{color:\"color\"},descriptors:{_scriptable:!0,_indexable:!1}};const xs={average(t){if(!t.length)return!1;let e,i,n=0,o=0,s=0;for(e=0,i=t.length;e\u003Ci;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();n+=t.x,o+=t.y,++s}}return{x:n\u002Fs,y:o\u002Fs}},nearest(t,e){if(!t.length)return!1;let i,n,o,s=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i\u003Cn;++i){const n=t[i].element;if(n&&n.hasValue()){const t=Vt(e,n.getCenterPoint());t\u003Cr&&(r=t,o=n)}}if(o){const t=o.tooltipPosition();s=t.x,a=t.y}return{x:s,y:a}}};function bs(t,e){return e&&(Y(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function _s(t){return(\"string\"==typeof t||t instanceof String)&&t.indexOf(\"\\n\")>-1?t.split(\"\\n\"):t}function ys(t,e){const{element:i,datasetIndex:n,index:o}=e,s=t.getDatasetMeta(n).controller,{label:a,value:r}=s.getLabelAndValue(o);return{chart:t,label:a,parsed:s.getParsed(o),raw:t.data.datasets[n].data[o],formattedValue:r,dataset:s.getDataset(),dataIndex:o,datasetIndex:n,element:i}}function vs(t,e){const i=t._chart.ctx,{body:n,footer:o,title:s}=t,{boxWidth:a,boxHeight:r}=e,l=Fe(e.bodyFont),c=Fe(e.titleFont),h=Fe(e.footerFont),d=s.length,u=o.length,f=n.length,g=ze(e.padding);let p=g.height,m=0,x=n.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-f)*l.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*h.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=c.string,J(t.title,_),i.font=l.string,J(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2:0,J(n,(t=>{J(t.before,_),J(t.lines,_),J(t.after,_)})),b=0,i.font=h.string,J(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function ws(t,e,i,n){const{x:o,width:s}=i,{width:a,chartArea:{left:r,right:l}}=t;let c=\"center\";return\"center\"===n?c=o\u003C=(r+l)\u002F2?\"left\":\"right\":o\u003C=s\u002F2?c=\"left\":o>=a-s\u002F2&&(c=\"right\"),function(t,e,i,n){const{x:o,width:s}=n,a=i.caretSize+i.caretPadding;return\"left\"===t&&o+s+a>e.width||\"right\"===t&&o-s-a\u003C0||void 0}(c,t,e,i)&&(c=\"center\"),c}function Ms(t,e,i){const n=e.yAlign||function(t,e){const{y:i,height:n}=e;return i\u003Cn\u002F2?\"top\":i>t.height-n\u002F2?\"bottom\":\"center\"}(t,i);return{xAlign:e.xAlign||ws(t,e,i,n),yAlign:n}}function ks(t,e,i,n){const{caretSize:o,caretPadding:s,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,c=o+s,h=a+s;let d=function(t,e){let{x:i,width:n}=t;return\"right\"===e?i-=n:\"center\"===e&&(i-=n\u002F2),i}(e,r);const u=function(t,e,i){let{y:n,height:o}=t;return\"top\"===e?n+=i:n-=\"bottom\"===e?o+i:o\u002F2,n}(e,l,c);return\"center\"===l?\"left\"===r?d+=c:\"right\"===r&&(d-=c):\"left\"===r?d-=h:\"right\"===r&&(d+=h),{x:Nt(d,0,n.width-e.width),y:Nt(u,0,n.height-e.height)}}function Ss(t,e,i){const n=ze(i.padding);return\"center\"===e?t.x+t.width\u002F2:\"right\"===e?t.x+t.width-n.right:t.x+n.left}function Ps(t){return bs([],_s(t))}function Ds(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class Cs extends Ei{constructor(t){super(),this.opacity=0,this._active=[],this._chart=t._chart,this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this,e=t._cachedAnimations;if(e)return e;const i=t._chart,n=t.options.setContext(t.getContext()),o=n.enabled&&i.options.animation&&n.animations,s=new vi(t._chart,o);return o._cacheable&&(t._cachedAnimations=Object.freeze(s)),s}getContext(){const t=this;return t.$context||(t.$context=(e=t._chart.getContext(),i=t,n=t._tooltipItems,Object.assign(Object.create(e),{tooltip:i,tooltipItems:n,type:\"tooltip\"})));var e,i,n}getTitle(t,e){const i=this,{callbacks:n}=e,o=n.beforeTitle.apply(i,[t]),s=n.title.apply(i,[t]),a=n.afterTitle.apply(i,[t]);let r=[];return r=bs(r,_s(o)),r=bs(r,_s(s)),r=bs(r,_s(a)),r}getBeforeBody(t,e){return Ps(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const i=this,{callbacks:n}=e,o=[];return J(t,(t=>{const e={before:[],lines:[],after:[]},s=Ds(n,t);bs(e.before,_s(s.beforeLabel.call(i,t))),bs(e.lines,s.label.call(i,t)),bs(e.after,_s(s.afterLabel.call(i,t))),o.push(e)})),o}getAfterBody(t,e){return Ps(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const i=this,{callbacks:n}=e,o=n.beforeFooter.apply(i,[t]),s=n.footer.apply(i,[t]),a=n.afterFooter.apply(i,[t]);let r=[];return r=bs(r,_s(o)),r=bs(r,_s(s)),r=bs(r,_s(a)),r}_createItems(t){const e=this,i=e._active,n=e._chart.data,o=[],s=[],a=[];let r,l,c=[];for(r=0,l=i.length;r\u003Cl;++r)c.push(ys(e._chart,i[r]));return t.filter&&(c=c.filter(((e,i,o)=>t.filter(e,i,o,n)))),t.itemSort&&(c=c.sort(((e,i)=>t.itemSort(e,i,n)))),J(c,(i=>{const n=Ds(t.callbacks,i);o.push(n.labelColor.call(e,i)),s.push(n.labelPointStyle.call(e,i)),a.push(n.labelTextColor.call(e,i))})),e.labelColors=o,e.labelPointStyles=s,e.labelTextColors=a,e.dataPoints=c,c}update(t,e){const i=this,n=i.options.setContext(i.getContext()),o=i._active;let s,a=[];if(o.length){const t=xs[n.position].call(i,o,i._eventPosition);a=i._createItems(n),i.title=i.getTitle(a,n),i.beforeBody=i.getBeforeBody(a,n),i.body=i.getBody(a,n),i.afterBody=i.getAfterBody(a,n),i.footer=i.getFooter(a,n);const e=i._size=vs(i,n),r=Object.assign({},t,e),l=Ms(i._chart,n,r),c=ks(n,r,l,i._chart);i.xAlign=l.xAlign,i.yAlign=l.yAlign,s={opacity:1,x:c.x,y:c.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==i.opacity&&(s={opacity:0});i._tooltipItems=a,i.$context=void 0,s&&i._resolveAnimations().update(i,s),t&&n.external&&n.external.call(i,{chart:i._chart,tooltip:i,replay:e})}drawCaret(t,e,i,n){const o=this.getCaretPosition(t,i,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,i){const{xAlign:n,yAlign:o}=this,{cornerRadius:s,caretSize:a}=i,{x:r,y:l}=t,{width:c,height:h}=e;let d,u,f,g,p,m;return\"center\"===o?(p=l+h\u002F2,\"left\"===n?(d=r,u=d-a,g=p+a,m=p-a):(d=r+c,u=d+a,g=p-a,m=p+a),f=d):(u=\"left\"===n?r+s+a:\"right\"===n?r+c-s-a:this.caretX,\"top\"===o?(g=l,p=g-a,d=u-a,f=u+a):(g=l+h,p=g+a,d=u+a,f=u-a),m=g),{x1:d,x2:u,x3:f,y1:g,y2:p,y3:m}}drawTitle(t,e,i){const n=this,o=n.title,s=o.length;let a,r,l;if(s){const c=xn(i.rtl,n.x,n.width);for(t.x=Ss(n,i.titleAlign,i),e.textAlign=c.textAlign(i.titleAlign),e.textBaseline=\"middle\",a=Fe(i.titleFont),r=i.titleSpacing,e.fillStyle=i.titleColor,e.font=a.string,l=0;l\u003Cs;++l)e.fillText(o[l],c.x(t.x),t.y+a.lineHeight\u002F2),t.y+=a.lineHeight+r,l+1===s&&(t.y+=i.titleMarginBottom-r)}}_drawColorBox(t,e,i,n,o){const s=this,a=s.labelColors[i],r=s.labelPointStyles[i],{boxHeight:l,boxWidth:c}=o,h=Fe(o.bodyFont),d=Ss(s,\"left\",o),u=n.x(d),f=l\u003Ch.lineHeight?(h.lineHeight-l)\u002F2:0,g=e.y+f;if(o.usePointStyle){const e={radius:Math.min(c,l)\u002F2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},i=n.leftForLtr(u,c)+c\u002F2,s=g+l\u002F2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Kt(t,e,i,s),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Kt(t,e,i,s)}else{t.lineWidth=a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;const e=n.leftForLtr(u,c),i=n.leftForLtr(n.xPlus(u,1),c-2),s=Ie(a.borderRadius);Object.values(s).some((t=>0!==t))?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ie(t,{x:e,y:g,w:c,h:l,radius:s}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ie(t,{x:i,y:g+1,w:c-2,h:l-2,radius:s}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(e,g,c,l),t.strokeRect(e,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,c-2,l-2))}t.fillStyle=s.labelTextColors[i]}drawBody(t,e,i){const n=this,{body:o}=n,{bodySpacing:s,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c}=i,h=Fe(i.bodyFont);let d=h.lineHeight,u=0;const f=xn(i.rtl,n.x,n.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d\u002F2),t.y+=d+s},p=f.textAlign(a);let m,x,b,_,y,v,w;for(e.textAlign=a,e.textBaseline=\"middle\",e.font=h.string,t.x=Ss(n,p,i),e.fillStyle=i.bodyColor,J(n.beforeBody,g),u=r&&\"right\"!==p?\"center\"===a?c\u002F2+1:c+2:0,_=0,v=o.length;_\u003Cv;++_){for(m=o[_],x=n.labelTextColors[_],e.fillStyle=x,J(m.before,g),b=m.lines,r&&b.length&&(n._drawColorBox(e,t,_,f,i),d=Math.max(h.lineHeight,l)),y=0,w=b.length;y\u003Cw;++y)g(b[y]),d=h.lineHeight;J(m.after,g)}u=0,d=h.lineHeight,J(n.afterBody,g),t.y-=s}drawFooter(t,e,i){const n=this,o=n.footer,s=o.length;let a,r;if(s){const l=xn(i.rtl,n.x,n.width);for(t.x=Ss(n,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=l.textAlign(i.footerAlign),e.textBaseline=\"middle\",a=Fe(i.footerFont),e.fillStyle=i.footerColor,e.font=a.string,r=0;r\u003Cs;++r)e.fillText(o[r],l.x(t.x),t.y+a.lineHeight\u002F2),t.y+=a.lineHeight+i.footerSpacing}}drawBackground(t,e,i,n){const{xAlign:o,yAlign:s}=this,{x:a,y:r}=t,{width:l,height:c}=i,h=n.cornerRadius;e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,e.lineWidth=n.borderWidth,e.beginPath(),e.moveTo(a+h,r),\"top\"===s&&this.drawCaret(t,e,i,n),e.lineTo(a+l-h,r),e.quadraticCurveTo(a+l,r,a+l,r+h),\"center\"===s&&\"right\"===o&&this.drawCaret(t,e,i,n),e.lineTo(a+l,r+c-h),e.quadraticCurveTo(a+l,r+c,a+l-h,r+c),\"bottom\"===s&&this.drawCaret(t,e,i,n),e.lineTo(a+h,r+c),e.quadraticCurveTo(a,r+c,a,r+c-h),\"center\"===s&&\"left\"===o&&this.drawCaret(t,e,i,n),e.lineTo(a,r+h),e.quadraticCurveTo(a,r,a+h,r),e.closePath(),e.fill(),n.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this,i=e._chart,n=e.$animations,o=n&&n.x,s=n&&n.y;if(o||s){const n=xs[t.position].call(e,e._active,e._eventPosition);if(!n)return;const a=e._size=vs(e,t),r=Object.assign({},n,e._size),l=Ms(i,t,r),c=ks(t,r,l,i);o._to===c.x&&s._to===c.y||(e.xAlign=l.xAlign,e.yAlign=l.yAlign,e.width=a.width,e.height=a.height,e.caretX=n.x,e.caretY=n.y,e._resolveAnimations().update(e,c))}}draw(t){const e=this,i=e.options.setContext(e.getContext());let n=e.opacity;if(!n)return;e._updateAnimationTarget(i);const o={width:e.width,height:e.height},s={x:e.x,y:e.y};n=Math.abs(n)\u003C.001?0:n;const a=ze(i.padding),r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;i.enabled&&r&&(t.save(),t.globalAlpha=n,e.drawBackground(s,t,o,i),bn(t,i.textDirection),s.y+=a.top,e.drawTitle(s,t,i),e.drawBody(s,t,i),e.drawFooter(s,t,i),_n(t,i.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this,n=i._active,o=t.map((({datasetIndex:t,index:e})=>{const n=i._chart.getDatasetMeta(t);if(!n)throw new Error(\"Cannot find a dataset at index \"+t);return{datasetIndex:t,element:n.data[e],index:e}})),s=!tt(n,o),a=i._positionChanged(o,e);(s||a)&&(i._active=o,i._eventPosition=e,i.update(!0))}handleEvent(t,e){const i=this,n=i.options,o=i._active||[];let s=!1,a=[];\"mouseout\"!==t.type&&(a=i._chart.getElementsAtEventForMode(t,n.mode,n,e),n.reverse&&a.reverse());const r=i._positionChanged(a,t);return s=e||!tt(a,o)||r,s&&(i._active=a,(n.enabled||n.external)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0,e))),s}_positionChanged(t,e){const{caretX:i,caretY:n,options:o}=this,s=xs[o.position].call(this,t,e);return!1!==s&&(i!==s.x||n!==s.y)}}Cs.positioners=xs;var Os={id:\"tooltip\",_element:Cs,positioners:xs,afterInit(t,e,i){i&&(t.tooltip=new Cs({_chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip,i={tooltip:e};!1!==t.notifyPlugins(\"beforeTooltipDraw\",i)&&(e&&e.draw(t.ctx),t.notifyPlugins(\"afterTooltipDraw\",i))},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:\"average\",backgroundColor:\"rgba(0,0,0,0.8)\",titleColor:\"#fff\",titleFont:{weight:\"bold\"},titleSpacing:2,titleMarginBottom:6,titleAlign:\"left\",bodyColor:\"#fff\",bodySpacing:2,bodyFont:{},bodyAlign:\"left\",footerColor:\"#fff\",footerSpacing:2,footerMarginTop:6,footerFont:{weight:\"bold\"},footerAlign:\"left\",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:\"#fff\",displayColors:!0,borderColor:\"rgba(0,0,0,0)\",borderWidth:0,animation:{duration:400,easing:\"easeOutQuart\"},animations:{numbers:{type:\"number\",properties:[\"x\",\"y\",\"width\",\"height\",\"caretX\",\"caretY\"]},opacity:{easing:\"linear\",duration:200}},callbacks:{beforeTitle:N,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,n=i?i.length:0;if(this&&this.options&&\"dataset\"===this.options.mode)return e.dataset.label||\"\";if(e.label)return e.label;if(n>0&&e.dataIndex\u003Cn)return i[e.dataIndex]}return\"\"},afterTitle:N,beforeBody:N,beforeLabel:N,label(t){if(this&&this.options&&\"dataset\"===this.options.mode)return t.label+\": \"+t.formattedValue||t.formattedValue;let e=t.dataset.label||\"\";e&&(e+=\": \");const i=t.formattedValue;return $(i)||(e+=i),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:N,afterBody:N,beforeFooter:N,footer:N,afterFooter:N}},defaultRoutes:{bodyFont:\"font\",footerFont:\"font\",titleFont:\"font\"},descriptors:{_scriptable:t=>\"filter\"!==t&&\"itemSort\"!==t&&\"external\"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:\"animation\"}},additionalOptionScopes:[\"interaction\"]},As=Object.freeze({__proto__:null,Decimation:qo,Filler:ds,Legend:gs,Title:ms,Tooltip:Os});function Ts(t,e,i){const n=t.indexOf(e);if(-1===n)return((t,e,i)=>\"string\"==typeof e?t.push(e)-1:isNaN(e)?null:i)(t,e,i);return n!==t.lastIndexOf(e)?i:n}class Rs extends Xi{constructor(t){super(t),this._startValue=void 0,this._valueRange=0}parse(t,e){if($(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Nt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Ts(i,t,K(e,t)),i.length-1)}determineDataLimits(){const t=this,{minDefined:e,maxDefined:i}=t.getUserBounds();let{min:n,max:o}=t.getMinMax(!0);\"ticks\"===t.options.bounds&&(e||(n=0),i||(o=t.getLabels().length-1)),t.min=n,t.max=o}buildTicks(){const t=this,e=t.min,i=t.max,n=t.options.offset,o=[];let s=t.getLabels();s=0===e&&i===s.length-1?s:s.slice(e,i+1),t._valueRange=Math.max(s.length-(n?0:1),1),t._startValue=t.min-(n?.5:0);for(let t=e;t\u003C=i;t++)o.push({value:t});return o}getLabelForValue(t){const e=this.getLabels();return t>=0&&t\u003Ce.length?e[t]:t}configure(){const t=this;super.configure(),t.isHorizontal()||(t._reversePixels=!t._reversePixels)}getPixelForValue(t){const e=this;return\"number\"!=typeof t&&(t=e.parse(t)),null===t?NaN:e.getPixelForDecimal((t-e._startValue)\u002Fe._valueRange)}getPixelForTick(t){const e=this.ticks;return t\u003C0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){const e=this;return Math.round(e._startValue+e.getDecimalForPixel(t)*e._valueRange)}getBasePixel(){return this.bottom}}Rs.id=\"category\",Rs.defaults={ticks:{callback:Rs.prototype.getLabelForValue}};class Ls extends Xi{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return $(t)||(\"number\"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const t=this,{beginAtZero:e,stacked:i}=t.options,{minDefined:n,maxDefined:o}=t.getUserBounds();let{min:s,max:a}=t;const r=t=>s=n?s:t,l=t=>a=o?a:t;if(e||i){const t=Dt(s),e=Dt(a);t\u003C0&&e\u003C0?l(0):t>0&&e>0&&r(0)}s===a&&(l(a+1),e||r(s-1)),t.min=s,t.max=a}getTickLimit(){const t=this,e=t.options.ticks;let i,{maxTicksLimit:n,stepSize:o}=e;return o?i=Math.ceil(t.max\u002Fo)-Math.floor(t.min\u002Fo)+1:(i=t.computeTickLimit(),n=n||11),n&&(i=Math.min(n,i)),i}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this,e=t.options,i=e.ticks;let n=t.getTickLimit();n=Math.max(2,n);const o=function(t,e){const i=[],{step:n,min:o,max:s,precision:a,count:r,maxTicks:l,maxDigits:c,horizontal:h}=t,d=n||1,u=l-1,{min:f,max:g}=e,p=!$(o),m=!$(s),x=!$(r),b=(g-f)\u002Fc;let _,y,v,w,M=Ct((g-f)\u002Fu\u002Fd)*d;if(M\u003C1e-14&&!p&&!m)return[{value:f},{value:g}];w=Math.ceil(g\u002FM)-Math.floor(f\u002FM),w>u&&(M=Ct(w*M\u002Fu\u002Fd)*d),$(a)||(_=Math.pow(10,a),M=Math.ceil(M*_)\u002F_),y=Math.floor(f\u002FM)*M,v=Math.ceil(g\u002FM)*M,p&&m&&n&&Rt((s-o)\u002Fn,M\u002F1e3)?(w=Math.min((s-o)\u002FM,l),M=(s-o)\u002Fw,y=o,v=s):x?(y=p?o:y,v=m?s:v,w=r-1,M=(v-y)\u002Fw):(w=(v-y)\u002FM,w=Tt(w,Math.round(w),M\u002F1e3)?Math.round(w):Math.ceil(w)),_=Math.pow(10,$(a)?zt(M):a),y=Math.round(y*_)\u002F_,v=Math.round(v*_)\u002F_;let k=0;for(p&&(i.push({value:o}),y\u003C=o&&k++,Tt(Math.round((y+k*M)*_)\u002F_,o,b*(h?(\"\"+o).length:1))&&k++);k\u003Cw;++k)i.push({value:Math.round((y+k*M)*_)\u002F_});return m?Tt(i[i.length-1].value,s,b*(h?(\"\"+s).length:1))?i[i.length-1].value=s:i.push({value:s}):i.push({value:v}),i}({maxTicks:n,min:e.min,max:e.max,precision:i.precision,step:i.stepSize,count:i.count,maxDigits:t._maxDigits(),horizontal:t.isHorizontal()},t._range||t);return\"ticks\"===e.bounds&&Lt(o,t,\"value\"),e.reverse?(o.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),o}configure(){const t=this,e=t.ticks;let i=t.min,n=t.max;if(super.configure(),t.options.offset&&e.length){const t=(n-i)\u002FMath.max(e.length-1,1)\u002F2;i-=t,n+=t}t._startValue=i,t._endValue=n,t._valueRange=n-i}getLabelForValue(t){return zi(t,this.chart.options.locale)}}class Es extends Ls{determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!0);t.min=X(e)?e:0,t.max=X(i)?i:1,t.handleTickRangeOptions()}computeTickLimit(){const t=this;if(t.isHorizontal())return Math.ceil(t.width\u002F40);const e=t._resolveTickFontOptions(0);return Math.ceil(t.height\u002Fe.lineHeight)}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)\u002Fthis._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function Is(t){return 1===t\u002FMath.pow(10,Math.floor(Pt(t)))}Es.id=\"linear\",Es.defaults={ticks:{callback:Vi.formatters.numeric}};class zs extends Xi{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=Ls.prototype.parse.apply(this,[t,e]);if(0!==i)return X(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!0);t.min=X(e)?Math.max(0,e):null,t.max=X(i)?Math.max(0,i):null,t.options.beginAtZero&&(t._zero=!0),t.handleTickRangeOptions()}handleTickRangeOptions(){const t=this,{minDefined:e,maxDefined:i}=t.getUserBounds();let n=t.min,o=t.max;const s=t=>n=e?n:t,a=t=>o=i?o:t,r=(t,e)=>Math.pow(10,Math.floor(Pt(t))+e);n===o&&(n\u003C=0?(s(1),a(10)):(s(r(n,-1)),a(r(o,1)))),n\u003C=0&&s(r(o,-1)),o\u003C=0&&a(r(n,1)),t._zero&&t.min!==t._suggestedMin&&n===r(t.min,0)&&s(r(n,-1)),t.min=n,t.max=o}buildTicks(){const t=this,e=t.options,i=function(t,e){const i=Math.floor(Pt(e.max)),n=Math.ceil(e.max\u002FMath.pow(10,i)),o=[];let s=q(t.min,Math.pow(10,Math.floor(Pt(e.min)))),a=Math.floor(Pt(s)),r=Math.floor(s\u002FMath.pow(10,a)),l=a\u003C0?Math.pow(10,Math.abs(a)):1;do{o.push({value:s,major:Is(s)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),s=Math.round(r*Math.pow(10,a)*l)\u002Fl}while(a\u003Ci||a===i&&r\u003Cn);const c=q(t.max,s);return o.push({value:c,major:Is(s)}),o}({min:t._userMin,max:t._userMax},t);return\"ticks\"===e.bounds&&Lt(i,t,\"value\"),e.reverse?(i.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i}getLabelForValue(t){return void 0===t?\"0\":zi(t,this.chart.options.locale)}configure(){const t=this,e=t.min;super.configure(),t._startValue=Pt(e),t._valueRange=Pt(t.max)-Pt(e)}getPixelForValue(t){const e=this;return void 0!==t&&0!==t||(t=e.min),null===t||isNaN(t)?NaN:e.getPixelForDecimal(t===e.min?0:(Pt(t)-e._startValue)\u002Fe._valueRange)}getValueForPixel(t){const e=this,i=e.getDecimalForPixel(t);return Math.pow(10,e._startValue+i*e._valueRange)}}function Fs(t){const e=t.ticks;if(e.display&&t.display){const t=ze(e.backdropPadding);return K(e.font&&e.font.size,xt.font.size)+t.height}return 0}function Vs(t,e,i,n,o){return t===n||t===o?{start:e-i\u002F2,end:e+i\u002F2}:t\u003Cn||t>o?{start:e-i,end:e}:{start:e,end:e+i}}function Bs(t){return 0===t||180===t?\"center\":t\u003C180?\"left\":\"right\"}function Ws(t,e,i){90===t||270===t?i.y-=e.h\u002F2:(t>270||t\u003C90)&&(i.y-=e.h)}function Hs(t,e,i,n){const{ctx:o}=t;if(i)o.arc(t.xCenter,t.yCenter,e,0,_t);else{let i=t.getPointPosition(0,e);o.moveTo(i.x,i.y);for(let s=1;s\u003Cn;s++)i=t.getPointPosition(s,e),o.lineTo(i.x,i.y)}}function Ns(t){return At(t)?t:0}zs.id=\"logarithmic\",zs.defaults={ticks:{callback:Vi.formatters.logarithmic,major:{enabled:!0}}};class js extends Ls{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Fs(t.options)\u002F2,t.xCenter=Math.floor(t.width\u002F2),t.yCenter=Math.floor((t.height-t.paddingTop)\u002F2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)\u002F2}determineDataLimits(){const t=this,{min:e,max:i}=t.getMinMax(!1);t.min=X(e)&&!isNaN(e)?e:0,t.max=X(i)&&!isNaN(i)?i:0,t.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea\u002FFs(this.options))}generateTickLabels(t){const e=this;Ls.prototype.generateTickLabels.call(e,t),e._pointLabels=e.getLabels().map(((t,i)=>{const n=Q(e.options.pointLabels.callback,[t,i],e);return n||0===n?n:\"\"}))}fit(){const t=this,e=t.options;e.display&&e.pointLabels.display?function(t){const e={l:0,r:t.width,t:0,b:t.height-t.paddingTop},i={};let n,o,s;const a=[],r=[],l=t.getLabels().length;for(n=0;n\u003Cl;n++){const l=t.options.pointLabels.setContext(t.getContext(n));r[n]=l.padding,s=t.getPointPosition(n,t.drawingArea+r[n]);const u=Fe(l.font);t.ctx.font=u.string,c=t.ctx,h=u.lineHeight,o=Y(d=t._pointLabels[n])?{w:Ut(c,c.font,d),h:d.length*h}:{w:c.measureText(d).width,h:h},a[n]=o;const f=t.getIndexAngle(n),g=It(f),p=Vs(g,s.x,o.w,0,180),m=Vs(g,s.y,o.h,90,270);p.start\u003Ce.l&&(e.l=p.start,i.l=f),p.end>e.r&&(e.r=p.end,i.r=f),m.start\u003Ce.t&&(e.t=m.start,i.t=f),m.end>e.b&&(e.b=m.end,i.b=f)}var c,h,d;t._setReductions(t.drawingArea,e,i),t._pointLabelItems=[];const u=t.options,f=Fs(u),g=t.getDistanceFromCenterForValue(u.ticks.reverse?t.min:t.max);for(n=0;n\u003Cl;n++){const e=0===n?f\u002F2:0,i=t.getPointPosition(n,g+e+r[n]),o=It(t.getIndexAngle(n)),s=a[n];Ws(o,s,i);const l=Bs(o);let c;c=\"left\"===l?i.x:\"center\"===l?i.x-s.w\u002F2:i.x-s.w;const h=c+s.w;t._pointLabelItems[n]={x:i.x,y:i.y,textAlign:l,left:c,top:i.y,right:h,bottom:i.y+s.h}}}(t):t.setCenterPoint(0,0,0,0)}_setReductions(t,e,i){const n=this;let o=e.l\u002FMath.sin(i.l),s=Math.max(e.r-n.width,0)\u002FMath.sin(i.r),a=-e.t\u002FMath.cos(i.t),r=-Math.max(e.b-(n.height-n.paddingTop),0)\u002FMath.cos(i.b);o=Ns(o),s=Ns(s),a=Ns(a),r=Ns(r),n.drawingArea=Math.max(t\u002F2,Math.min(Math.floor(t-(o+s)\u002F2),Math.floor(t-(a+r)\u002F2))),n.setCenterPoint(o,s,a,r)}setCenterPoint(t,e,i,n){const o=this,s=o.width-e-o.drawingArea,a=t+o.drawingArea,r=i+o.drawingArea,l=o.height-o.paddingTop-n-o.drawingArea;o.xCenter=Math.floor((a+s)\u002F2+o.left),o.yCenter=Math.floor((r+l)\u002F2+o.top+o.paddingTop)}getIndexAngle(t){return Wt(t*(_t\u002Fthis.getLabels().length)+Et(this.options.startAngle||0))}getDistanceFromCenterForValue(t){const e=this;if($(t))return NaN;const i=e.drawingArea\u002F(e.max-e.min);return e.options.reverse?(e.max-t)*i:(t-e.min)*i}getValueForDistanceFromCenter(t){if($(t))return NaN;const e=this,i=t\u002F(e.drawingArea\u002F(e.max-e.min));return e.options.reverse?e.max-i:e.min+i}getPointPosition(t,e){const i=this,n=i.getIndexAngle(t)-Mt;return{x:Math.cos(n)*e+i.xCenter,y:Math.sin(n)*e+i.yCenter,angle:n}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:n,bottom:o}=this._pointLabelItems[t];return{left:e,top:i,right:n,bottom:o}}drawBackground(){const t=this,{backgroundColor:e,grid:{circular:i}}=t.options;if(e){const n=t.ctx;n.save(),n.beginPath(),Hs(t,t.getDistanceFromCenterForValue(t._endValue),i,t.getLabels().length),n.closePath(),n.fillStyle=e,n.fill(),n.restore()}}drawGrid(){const t=this,e=t.ctx,i=t.options,{angleLines:n,grid:o}=i,s=t.getLabels().length;let a,r,l;if(i.pointLabels.display&&function(t,e){const{ctx:i,options:{pointLabels:n}}=t;for(let o=e-1;o>=0;o--){const e=n.setContext(t.getContext(o)),s=Fe(e.font),{x:a,y:r,textAlign:l,left:c,top:h,right:d,bottom:u}=t._pointLabelItems[o],{backdropColor:f}=e;if(!$(f)){const t=ze(e.backdropPadding);i.fillStyle=f,i.fillRect(c-t.left,h-t.top,d-c+t.width,u-h+t.height)}ee(i,t._pointLabels[o],a,r+s.lineHeight\u002F2,s,{color:e.color,textAlign:l,textBaseline:\"middle\"})}}(t,s),o.display&&t.ticks.forEach(((e,i)=>{if(0!==i){r=t.getDistanceFromCenterForValue(e.value);const n=o.setContext(t.getContext(i-1));!function(t,e,i,n){const o=t.ctx,s=e.circular,{color:a,lineWidth:r}=e;!s&&!n||!a||!r||i\u003C0||(o.save(),o.strokeStyle=a,o.lineWidth=r,o.setLineDash(e.borderDash),o.lineDashOffset=e.borderDashOffset,o.beginPath(),Hs(t,i,s,n),o.closePath(),o.stroke(),o.restore())}(t,n,r,s)}})),n.display){for(e.save(),a=t.getLabels().length-1;a>=0;a--){const o=n.setContext(t.getContext(a)),{color:s,lineWidth:c}=o;c&&s&&(e.lineWidth=c,e.strokeStyle=s,e.setLineDash(o.borderDash),e.lineDashOffset=o.borderDashOffset,r=t.getDistanceFromCenterForValue(i.ticks.reverse?t.min:t.max),l=t.getPointPosition(a,r),e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(l.x,l.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const t=this,e=t.ctx,i=t.options,n=i.ticks;if(!n.display)return;const o=t.getIndexAngle(0);let s,a;e.save(),e.translate(t.xCenter,t.yCenter),e.rotate(o),e.textAlign=\"center\",e.textBaseline=\"middle\",t.ticks.forEach(((o,r)=>{if(0===r&&!i.reverse)return;const l=n.setContext(t.getContext(r)),c=Fe(l.font);if(s=t.getDistanceFromCenterForValue(t.ticks[r].value),l.showLabelBackdrop){a=e.measureText(o.label).width,e.fillStyle=l.backdropColor;const t=ze(l.backdropPadding);e.fillRect(-a\u002F2-t.left,-s-c.size\u002F2-t.top,a+t.width,c.size+t.height)}ee(e,o.label,0,-s,c,{color:l.color})})),e.restore()}drawTitle(){}}js.id=\"radialLinear\",js.defaults={display:!0,animate:!0,position:\"chartArea\",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Vi.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5}},js.defaultRoutes={\"angleLines.color\":\"borderColor\",\"pointLabels.color\":\"color\",\"ticks.color\":\"color\"},js.descriptors={angleLines:{_fallback:\"grid\"}};const $s={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ys=Object.keys($s);function Us(t,e){return t-e}function Xs(t,e){if($(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:s}=t._parseOpts;let a=e;return\"function\"==typeof n&&(a=n(a)),X(a)||(a=\"string\"==typeof n?i.parse(a,n):i.parse(a)),null===a?null:(o&&(a=\"week\"!==o||!At(s)&&!0!==s?i.startOf(a,o):i.startOf(a,\"isoWeek\",s)),+a)}function qs(t,e,i,n){const o=Ys.length;for(let s=Ys.indexOf(t);s\u003Co-1;++s){const t=$s[Ys[s]],o=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)\u002F(o*t.size))\u003C=n)return Ys[s]}return Ys[o-1]}function Ks(t,e,i){if(i){if(i.length){const{lo:n,hi:o}=ne(i,e);t[i[n]>=e?i[n]:i[o]]=!0}}else t[e]=!0}function Gs(t,e,i){const n=[],o={},s=e.length;let a,r;for(a=0;a\u003Cs;++a)r=e[a],o[r]=a,n.push({value:r,major:!1});return 0!==s&&i?function(t,e,i,n){const o=t._adapter,s=+o.startOf(e[0].value,n),a=e[e.length-1].value;let r,l;for(r=s;r\u003C=a;r=+o.add(r,1,n))l=i[r],l>=0&&(e[l].major=!0);return e}(t,n,o,i):n}class Zs extends Xi{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit=\"day\",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),n=this._adapter=new oo._date(t.adapters.date);st(i.displayFormats,n.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Xs(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this,e=t.options,i=t._adapter,n=e.time.unit||\"day\";let{min:o,max:s,minDefined:a,maxDefined:r}=t.getUserBounds();function l(t){a||isNaN(t.min)||(o=Math.min(o,t.min)),r||isNaN(t.max)||(s=Math.max(s,t.max))}a&&r||(l(t._getLabelBounds()),\"ticks\"===e.bounds&&\"labels\"===e.ticks.source||l(t.getMinMax(!1))),o=X(o)&&!isNaN(o)?o:+i.startOf(Date.now(),n),s=X(s)&&!isNaN(s)?s:+i.endOf(Date.now(),n)+1,t.min=Math.min(o,s-1),t.max=Math.max(o+1,s)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this,e=t.options,i=e.time,n=e.ticks,o=\"labels\"===n.source?t.getLabelTimestamps():t._generate();\"ticks\"===e.bounds&&o.length&&(t.min=t._userMin||o[0],t.max=t._userMax||o[o.length-1]);const s=t.min,a=ae(o,s,t.max);return t._unit=i.unit||(n.autoSkip?qs(i.minUnit,t.min,t.max,t._getLabelCapacity(s)):function(t,e,i,n,o){for(let s=Ys.length-1;s>=Ys.indexOf(i);s--){const i=Ys[s];if($s[i].common&&t._adapter.diff(o,n,i)>=e-1)return i}return Ys[i?Ys.indexOf(i):0]}(t,a.length,i.minUnit,t.min,t.max)),t._majorUnit=n.major.enabled&&\"year\"!==t._unit?function(t){for(let e=Ys.indexOf(t)+1,i=Ys.length;e\u003Ci;++e)if($s[Ys[e]].common)return Ys[e]}(t._unit):void 0,t.initOffsets(o),e.reverse&&a.reverse(),Gs(t,a,t._majorUnit)}initOffsets(t){const e=this;let i,n,o=0,s=0;e.options.offset&&t.length&&(i=e.getDecimalForValue(t[0]),o=1===t.length?1-i:(e.getDecimalForValue(t[1])-i)\u002F2,n=e.getDecimalForValue(t[t.length-1]),s=1===t.length?n:(n-e.getDecimalForValue(t[t.length-2]))\u002F2);const a=t.length\u003C3?.5:.25;o=Nt(o,0,a),s=Nt(s,0,a),e._offsets={start:o,end:s,factor:1\u002F(o+1+s)}}_generate(){const t=this,e=t._adapter,i=t.min,n=t.max,o=t.options,s=o.time,a=s.unit||qs(s.minUnit,i,n,t._getLabelCapacity(i)),r=K(s.stepSize,1),l=\"week\"===a&&s.isoWeekday,c=At(l)||!0===l,h={};let d,u,f=i;if(c&&(f=+e.startOf(f,\"isoWeek\",l)),f=+e.startOf(f,c?\"day\":a),e.diff(n,i,a)>1e5*r)throw new Error(i+\" and \"+n+\" are too far apart with stepSize of \"+r+\" \"+a);const g=\"data\"===o.ticks.source&&t.getDataTimestamps();for(d=f,u=0;d\u003Cn;d=+e.add(d,r,a),u++)Ks(h,d,g);return d!==n&&\"ticks\"!==o.bounds&&1!==u||Ks(h,d,g),Object.keys(h).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,n){const o=this,s=o.options,a=s.time.displayFormats,r=o._unit,l=o._majorUnit,c=r&&a[r],h=l&&a[l],d=i[e],u=l&&h&&d&&d.major,f=o._adapter.format(t,n||(u?h:c)),g=s.ticks.callback;return g?Q(g,[f,e,i],o):f}generateTickLabels(t){let e,i,n;for(e=0,i=t.length;e\u003Ci;++e)n=t[e],n.label=this._tickFormatFunction(n.value,e,t)}getDecimalForValue(t){const e=this;return null===t?NaN:(t-e.min)\u002F(e.max-e.min)}getPixelForValue(t){const e=this,i=e._offsets,n=e.getDecimalForValue(t);return e.getPixelForDecimal((i.start+n)*i.factor)}getValueForPixel(t){const e=this,i=e._offsets,n=e.getDecimalForPixel(t)\u002Fi.factor-i.end;return e.min+n*(e.max-e.min)}_getLabelSize(t){const e=this,i=e.options.ticks,n=e.ctx.measureText(t).width,o=Et(e.isHorizontal()?i.maxRotation:i.minRotation),s=Math.cos(o),a=Math.sin(o),r=e._resolveTickFontOptions(0).size;return{w:n*s+r*a,h:n*a+r*s}}_getLabelCapacity(t){const e=this,i=e.options.time,n=i.displayFormats,o=n[i.unit]||n.millisecond,s=e._tickFormatFunction(t,0,Gs(e,[t],e._majorUnit),o),a=e._getLabelSize(s),r=Math.floor(e.isHorizontal()?e.width\u002Fa.w:e.height\u002Fa.h)-1;return r>0?r:1}getDataTimestamps(){const t=this;let e,i,n=t._cache.data||[];if(n.length)return n;const o=t.getMatchingVisibleMetas();if(t._normalized&&o.length)return t._cache.data=o[0].controller.getAllParsedValues(t);for(e=0,i=o.length;e\u003Ci;++e)n=n.concat(o[e].controller.getAllParsedValues(t));return t._cache.data=t.normalize(n)}getLabelTimestamps(){const t=this,e=t._cache.labels||[];let i,n;if(e.length)return e;const o=t.getLabels();for(i=0,n=o.length;i\u003Cn;++i)e.push(Xs(t,o[i]));return t._cache.labels=t._normalized?e:t.normalize(e)}normalize(t){return he(t.sort(Us))}}function Qs(t,e,i){let n,o,s,a;if(i)n=Math.floor(e),o=Math.ceil(e),s=t[n],a=t[o];else{const i=ne(t,e);s=i.lo,a=i.hi,n=t[s],o=t[a]}const r=o-n;return r?s+(a-s)*(e-n)\u002Fr:s}Zs.id=\"time\",Zs.defaults={bounds:\"data\",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:\"millisecond\",displayFormats:{}},ticks:{source:\"auto\",major:{enabled:!1}}};class Js extends Zs{constructor(t){super(t),this._table=[],this._maxIndex=void 0}initOffsets(){const t=this,e=t._getTimestampsForTable();t._table=t.buildLookupTable(e),t._maxIndex=t._table.length-1,super.initOffsets(e)}buildLookupTable(t){const{min:e,max:i}=this;if(!t.length)return[{time:e,pos:0},{time:i,pos:1}];const n=[e];let o,s,a;for(o=0,s=t.length;o\u003Cs;++o)a=t[o],a>e&&a\u003Ci&&n.push(a);return n.push(i),n}_getTimestampsForTable(){const t=this;let e=t._cache.all||[];if(e.length)return e;const i=t.getDataTimestamps(),n=t.getLabelTimestamps();return e=i.length&&n.length?t.normalize(i.concat(n)):i.length?i:n,e=t._cache.all=e,e}getPixelForValue(t,e){const i=this,n=i._offsets,o=i._normalized&&i._maxIndex>0&&!$(e)?e\u002Fi._maxIndex:i.getDecimalForValue(t);return i.getPixelForDecimal((n.start+o)*n.factor)}getDecimalForValue(t){return Qs(this._table,t)\u002Fthis._maxIndex}getValueForPixel(t){const e=this,i=e._offsets,n=e.getDecimalForPixel(t)\u002Fi.factor-i.end;return Qs(e._table,n*this._maxIndex,!0)}}Js.id=\"timeseries\",Js.defaults=Zs.defaults;var ta=Object.freeze({__proto__:null,CategoryScale:Rs,LinearScale:Es,LogarithmicScale:zs,RadialLinearScale:js,TimeScale:Zs,TimeSeriesScale:Js});return Jn.register(bo,ta,Yo,As),Jn.helpers={...Cn},Jn._adapters=oo,Jn.Animation=_i,Jn.Animations=vi,Jn.animator=a,Jn.controllers=An.controllers.items,Jn.DatasetController=Li,Jn.Element=Ei,Jn.elements=Yo,Jn.Interaction=Oe,Jn.layouts=Ge,Jn.platforms=ui,Jn.Scale=Xi,Jn.Ticks=Vi,Object.assign(Jn,bo,ta,Yo,As,ui),Jn.Chart=Jn,\"undefined\"!=typeof window&&(window.Chart=Jn),Jn}));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-\u002F*! For license information please see html2pdf.bundle.min.js.LICENSE.txt *\u002F\r\n-!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"html2pdf\",[],t):\"object\"==typeof exports?exports.html2pdf=t():e.html2pdf=t()}(self,(function(){return function(){var e,t,r={\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\":function(e,t,r){\"use strict\";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\");function o(e){if(n(e))return e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\");function s(e){if(n(e))return(0,o.default)(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\":function(e,t,r){\"use strict\";function n(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js\");function o(e,t,r,o,s,i,a){try{var A=e[i](a),u=A.value}catch(e){return void r(e)}A.done?t(u):n.resolve(u).then(o,s)}function s(e){return function(){var t=this,r=arguments;return new n((function(n,s){var i=e.apply(t,r);function a(e){o(i,n,s,a,A,\"next\",e)}function A(e){o(i,n,s,a,A,\"throw\",e)}a(void 0)}))}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js\":function(e,t,r){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\");function o(e,t){for(var r=0;r\u003Ct.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),n(e,o.key,o)}}function s(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\");function o(e,t,r){return t in e?n(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js\");function i(e,t,r){return(i=\"undefined\"!=typeof Reflect&&n?n:function(e,t,r){var n=(0,s.default)(e,t);if(n){var i=o(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js\");function s(e){return(s=n?o:function(e){return e.__proto__||o(e)})(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js\");function s(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=n(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&(0,o.default)(e,t)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\");function i(e){if(void 0!==n&&null!=o(e)||null!=e[\"@@iterator\"])return s(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\");function s(e,t){var r=null==e?null:void 0!==n&&o(e)||e[\"@@iterator\"];if(null!=r){var s,i,a=[],A=!0,u=!1;try{for(r=r.call(e);!(A=(s=r.next()).done)&&(a.push(s.value),!t||a.length!==t);A=!0);}catch(e){u=!0,i=e}finally{try{A||null==r.return||r.return()}finally{if(u)throw i}}return a}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js\":function(e,t,r){\"use strict\";function n(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js\":function(e,t,r){\"use strict\";function n(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\");function s(e,t){return!t||\"object\"!==(0,n.default)(t)&&\"function\"!=typeof t?(0,o.default)(e):t}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\");function o(e,t){return(o=n||function(e,t){return e.__proto__=t,e})(e,t)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return a}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\"),i=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js\");function a(e,t){return(0,n.default)(e)||(0,o.default)(e,t)||(0,s.default)(e,t)||(0,i.default)()}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\");function o(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=(0,n.default)(e)););return e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return a}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\"),i=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js\");function a(e){return(0,n.default)(e)||(0,o.default)(e)||(0,s.default)(e)||(0,i.default)()}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js\");function s(e){return(s=\"function\"==typeof n&&\"symbol\"==typeof o?function(e){return typeof e}:function(e){return e&&\"function\"==typeof n&&e.constructor===n&&e!==n.prototype?\"symbol\":typeof e})(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\");function i(e,t){var r;if(e){if(\"string\"==typeof e)return(0,s.default)(e,t);var i=n(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?o(e):\"Arguments\"===i||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(i)?(0,s.default)(e,t):void 0}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js\")},\".\u002Fsrc\u002Fplugin\u002Fhyperlinks.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js\");var n=r(\".\u002Fsrc\u002Fworker.js\"),o=r(\".\u002Fsrc\u002Futils.js\"),s=[],i={toContainer:n.default.prototype.toContainer,toPdf:n.default.prototype.toPdf};n.default.prototype.toContainer=function(){return i.toContainer.call(this).then((function(){if(this.opt.enableLinks){var e=this.prop.container,t=e.querySelectorAll(\"a\"),r=(0,o.unitConvert)(e.getBoundingClientRect(),this.prop.pageSize.k);s=[],Array.prototype.forEach.call(t,(function(e){for(var t=e.getClientRects(),n=0;n\u003Ct.length;n++){var i=(0,o.unitConvert)(t[n],this.prop.pageSize.k);i.left-=r.left,i.top-=r.top;var a=Math.floor(i.top\u002Fthis.prop.pageSize.inner.height)+1,A=this.opt.margin[0]+i.top%this.prop.pageSize.inner.height,u=this.opt.margin[1]+i.left;s.push({page:a,top:A,left:u,clientRect:i,link:e})}}),this)}}))},n.default.prototype.toPdf=function(){return i.toPdf.call(this).then((function(){if(this.opt.enableLinks){s.forEach((function(e){this.prop.pdf.setPage(e.page),this.prop.pdf.link(e.left,e.top,e.clientRect.width,e.clientRect.height,{url:e.link.href})}),this);var e=this.prop.pdf.internal.getNumberOfPages();this.prop.pdf.setPage(e)}}))}},\".\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\");function o(e){return(o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}n.jsPDF.getPageSize=function(e,t,r){if(\"object\"===o(e)){var n=e;e=n.orientation,t=n.unit||t,r=n.format||r}t=t||\"mm\",r=r||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase();var s=(\"\"+r).toLowerCase(),i={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(t){case\"pt\":var a=1;break;case\"mm\":a=72\u002F25.4;break;case\"cm\":a=72\u002F2.54;break;case\"in\":a=72;break;case\"px\":a=.75;break;case\"pc\":case\"em\":a=12;break;case\"ex\":a=6;break;default:throw\"Invalid unit: \"+t}if(i.hasOwnProperty(s))var A=i[s][1]\u002Fa,u=i[s][0]\u002Fa;else try{A=r[1],u=r[0]}catch(e){throw new Error(\"Invalid format: \"+r)}if(\"p\"===e||\"portrait\"===e){if(e=\"p\",u>A){var c=u;u=A,A=c}}else{if(\"l\"!==e&&\"landscape\"!==e)throw\"Invalid orientation: \"+e;e=\"l\",A>u&&(c=u,u=A,A=c)}return{width:u,height:A,unit:t,k:a}},t.default=n.jsPDF},\".\u002Fsrc\u002Fplugin\u002Fpagebreaks.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\");var n=r(\".\u002Fsrc\u002Fworker.js\"),o=r(\".\u002Fsrc\u002Futils.js\"),s={toContainer:n.default.prototype.toContainer};n.default.template.opt.pagebreak={mode:[\"css\",\"legacy\"],before:[],after:[],avoid:[]},n.default.prototype.toContainer=function(){return s.toContainer.call(this).then((function(){var e=this.prop.container,t=this.prop.pageSize.inner.px.height,r=[].concat(this.opt.pagebreak.mode),n={avoidAll:-1!==r.indexOf(\"avoid-all\"),css:-1!==r.indexOf(\"css\"),legacy:-1!==r.indexOf(\"legacy\")},s={},i=this;[\"before\",\"after\",\"avoid\"].forEach((function(t){var r=n.avoidAll&&\"avoid\"===t;s[t]=r?[]:[].concat(i.opt.pagebreak[t]||[]),s[t].length>0&&(s[t]=Array.prototype.slice.call(e.querySelectorAll(s[t].join(\", \"))))}));var a=e.querySelectorAll(\".html2pdf__page-break\");a=Array.prototype.slice.call(a);var A=e.querySelectorAll(\"*\");Array.prototype.forEach.call(A,(function(e){var r={before:!1,after:n.legacy&&-1!==a.indexOf(e),avoid:n.avoidAll};if(n.css){var i=window.getComputedStyle(e),A=[\"always\",\"page\",\"left\",\"right\"];r={before:r.before||-1!==A.indexOf(i.breakBefore||i.pageBreakBefore),after:r.after||-1!==A.indexOf(i.breakAfter||i.pageBreakAfter),avoid:r.avoid||-1!==[\"avoid\",\"avoid-page\"].indexOf(i.breakInside||i.pageBreakInside)}}Object.keys(r).forEach((function(t){r[t]=r[t]||-1!==s[t].indexOf(e)}));var u=e.getBoundingClientRect();if(r.avoid&&!r.before){var c=Math.floor(u.top\u002Ft),l=Math.floor(u.bottom\u002Ft),d=Math.abs(u.bottom-u.top)\u002Ft;l!==c&&d\u003C=1&&(r.before=!0)}if(r.before){var f=(0,o.createElement)(\"div\",{style:{display:\"block\",height:t-u.top%t+\"px\"}});e.parentNode.insertBefore(f,e)}r.after&&(f=(0,o.createElement)(\"div\",{style:{display:\"block\",height:t-u.bottom%t+\"px\"}}),e.parentNode.insertBefore(f,e.nextSibling))}))}))}},\".\u002Fsrc\u002Futils.js\":function(e,t,r){\"use strict\";function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}r.r(t),r.d(t,{objType:function(){return o},createElement:function(){return s},cloneNode:function(){return i},unitConvert:function(){return a},toPx:function(){return A}}),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var o=function(e){var t=n(e);return\"undefined\"===t?\"undefined\":\"string\"===t||e instanceof String?\"string\":\"number\"===t||e instanceof Number?\"number\":\"function\"===t||e instanceof Function?\"function\":e&&e.constructor===Array?\"array\":e&&1===e.nodeType?\"element\":\"object\"===t?\"object\":\"unknown\"},s=function(e,t){var r=document.createElement(e);if(t.className&&(r.className=t.className),t.innerHTML){r.innerHTML=t.innerHTML;for(var n=r.getElementsByTagName(\"script\"),o=n.length;o-- >0;null)n[o].parentNode.removeChild(n[o])}for(var s in t.style)r.style[s]=t.style[s];return r},i=function e(t,r){for(var n=3===t.nodeType?document.createTextNode(t.nodeValue):t.cloneNode(!1),o=t.firstChild;o;o=o.nextSibling)!0!==r&&1===o.nodeType&&\"SCRIPT\"===o.nodeName||n.appendChild(e(o,r));return 1===t.nodeType&&(\"CANVAS\"===t.nodeName?(n.width=t.width,n.height=t.height,n.getContext(\"2d\").drawImage(t,0,0)):\"TEXTAREA\"!==t.nodeName&&\"SELECT\"!==t.nodeName||(n.value=t.value),n.addEventListener(\"load\",(function(){n.scrollTop=t.scrollTop,n.scrollLeft=t.scrollLeft}),!0)),n},a=function(e,t){if(\"number\"===o(e))return 72*e\u002F96\u002Ft;var r={};for(var n in e)r[n]=72*e[n]\u002F96\u002Ft;return r},A=function(e,t){return Math.floor(e*t\u002F72*96)}},\".\u002Fsrc\u002Fworker.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\");var n=r(\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\"),o=r(\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\"),s=r(\".\u002Fsrc\u002Futils.js\"),i=r(\".\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js\"),a=r.n(i)().Promise,A=function e(t){var r=Object.assign(e.convert(a.resolve()),JSON.parse(JSON.stringify(e.template))),n=e.convert(a.resolve(),r);return(n=n.setProgress(1,e,1,[e])).set(t)};(A.prototype=Object.create(a.prototype)).constructor=A,A.convert=function(e,t){return e.__proto__=t||A.prototype,e},A.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],image:{type:\"jpeg\",quality:.95},enableLinks:!0,html2canvas:{},jsPDF:{}}},A.prototype.from=function(e,t){return this.then((function(){switch(t=t||function(e){switch((0,s.objType)(e)){case\"string\":return\"string\";case\"element\":return\"canvas\"===e.nodeName.toLowerCase?\"canvas\":\"element\";default:return\"unknown\"}}(e)){case\"string\":return this.set({src:(0,s.createElement)(\"div\",{innerHTML:e})});case\"element\":return this.set({src:e});case\"canvas\":return this.set({canvas:e});case\"img\":return this.set({img:e});default:return this.error(\"Unknown source type.\")}}))},A.prototype.to=function(e){switch(e){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},A.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var e={position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:0,right:0,bottom:0,top:0,backgroundColor:\"rgba(0,0,0,0.8)\"},t={position:\"absolute\",width:this.prop.pageSize.inner.width+this.prop.pageSize.unit,left:0,right:0,top:0,height:\"auto\",margin:\"auto\",backgroundColor:\"white\"};e.opacity=0;var r=(0,s.cloneNode)(this.prop.src,this.opt.html2canvas.javascriptEnabled);this.prop.overlay=(0,s.createElement)(\"div\",{className:\"html2pdf__overlay\",style:e}),this.prop.container=(0,s.createElement)(\"div\",{className:\"html2pdf__container\",style:t}),this.prop.container.appendChild(r),this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay)}))},A.prototype.toCanvas=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then((function(){var e=Object.assign({},this.opt.html2canvas);return delete e.onrendered,o(this.prop.container,e)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas.toDataURL(\"image\u002F\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=e}))},A.prototype.toPdf=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas,t=this.opt,r=e.height,o=Math.floor(e.width*this.prop.pageSize.inner.ratio),s=Math.ceil(r\u002Fo),i=this.prop.pageSize.inner.height,a=document.createElement(\"canvas\"),A=a.getContext(\"2d\");a.width=e.width,a.height=o,this.prop.pdf=this.prop.pdf||new n.jsPDF(t.jsPDF);for(var u=0;u\u003Cs;u++){u===s-1&&r%o!=0&&(a.height=r%o,i=a.height*this.prop.pageSize.inner.width\u002Fa.width);var c=a.width,l=a.height;A.fillStyle=\"white\",A.fillRect(0,0,c,l),A.drawImage(e,0,u*o,c,l,0,0,c,l),u&&this.prop.pdf.addPage();var d=a.toDataURL(\"image\u002F\"+t.image.type,t.image.quality);this.prop.pdf.addImage(d,t.image.type,t.margin[1],t.margin[0],this.prop.pageSize.inner.width,i)}}))},A.prototype.output=function(e,t,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(e,t):this.outputPdf(e,t)},A.prototype.outputPdf=function(e,t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(e,t)}))},A.prototype.outputImg=function(e,t){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(e){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+e+'\" is not supported.'}}))},A.prototype.save=function(e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(e?{filename:e}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},A.prototype.set=function(e){if(\"object\"!==(0,s.objType)(e))return this;var t=Object.keys(e||{}).map((function(t){switch(t){case\"margin\":return this.setMargin.bind(this,e.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=e.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,e.pageSize);default:return t in A.template.prop?function(){this.prop[t]=e[t]}:function(){this.opt[t]=e[t]}}}),this);return this.then((function(){return this.thenList(t)}))},A.prototype.get=function(e,t){return this.then((function(){var r=e in A.template.prop?this.prop[e]:this.opt[e];return t?t(r):r}))},A.prototype.setMargin=function(e){return this.then((function(){switch((0,s.objType)(e)){case\"number\":e=[e,e,e,e];case\"array\":if(2===e.length&&(e=[e[0],e[1],e[0],e[1]]),4===e.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=e})).then(this.setPageSize)},A.prototype.setPageSize=function(e){return this.then((function(){(e=e||n.jsPDF.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(e.inner={width:e.width-this.opt.margin[1]-this.opt.margin[3],height:e.height-this.opt.margin[0]-this.opt.margin[2]},e.inner.px={width:(0,s.toPx)(e.inner.width,e.k),height:(0,s.toPx)(e.inner.height,e.k)},e.inner.ratio=e.inner.height\u002Fe.inner.width),this.prop.pageSize=e}))},A.prototype.setProgress=function(e,t,r,n){return null!=e&&(this.progress.val=e),null!=t&&(this.progress.state=t),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val\u002Fthis.progress.state,this},A.prototype.updateProgress=function(e,t,r,n){return this.setProgress(e?this.progress.val+e:null,t||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},A.prototype.then=function(e,t){var r=this;return this.thenCore(e,t,(function(e,t){return r.updateProgress(null,null,1,[e]),a.prototype.then.call(this,(function(t){return r.updateProgress(null,e),t})).then(e,t).then((function(e){return r.updateProgress(1),e}))}))},A.prototype.thenCore=function(e,t,r){r=r||a.prototype.then;var n=this;e&&(e=e.bind(n)),t&&(t=t.bind(n));var o=-1!==a.toString().indexOf(\"[native code]\")&&\"Promise\"===a.name?n:A.convert(Object.assign({},n),a.prototype),s=r.call(o,e,t);return A.convert(s,n.__proto__)},A.prototype.thenExternal=function(e,t){return a.prototype.then.call(this,e,t)},A.prototype.thenList=function(e){var t=this;return e.forEach((function(e){t=t.thenCore(e)})),t},A.prototype.catch=function(e){e&&(e=e.bind(this));var t=a.prototype.catch.call(this,e);return A.convert(t,this)},A.prototype.catchExternal=function(e){return a.prototype.catch.call(this,e)},A.prototype.error=function(e){return this.then((function(){throw new Error(e)}))},A.prototype.using=A.prototype.set,A.prototype.saveAs=A.prototype.save,A.prototype.export=A.prototype.output,A.prototype.run=A.prototype.then,t.default=A},\".\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{AElement:function(){return pr},AnimateColorElement:function(){return ar},AnimateElement:function(){return ir},AnimateTransformElement:function(){return Ar},BoundingBox:function(){return Ot},CB1:function(){return at},CB2:function(){return At},CB3:function(){return ut},CB4:function(){return ct},Canvg:function(){return qr},CircleElement:function(){return Gt},ClipPathElement:function(){return Sr},DefsElement:function(){return er},DescElement:function(){return kr},Document:function(){return Kr},Element:function(){return St},EllipseElement:function(){return Xt},FeColorMatrixElement:function(){return Qr},FeCompositeElement:function(){return Ir},FeDropShadowElement:function(){return Tr},FeGaussianBlurElement:function(){return Pr},FeMorphologyElement:function(){return Hr},FilterElement:function(){return Lr},Font:function(){return Pt},FontElement:function(){return cr},FontFaceElement:function(){return lr},GElement:function(){return tr},GlyphElement:function(){return fr},GradientElement:function(){return rr},ImageElement:function(){return wr},LineElement:function(){return Wt},LinearGradientElement:function(){return nr},MarkerElement:function(){return $t},MaskElement:function(){return Fr},Matrix:function(){return Et},MissingGlyphElement:function(){return dr},Mouse:function(){return gt},PSEUDO_ZERO:function(){return nt},Parser:function(){return jt},PathElement:function(){return zt},PathParser:function(){return Kt},PatternElement:function(){return Zt},Point:function(){return mt},PolygonElement:function(){return Yt},PolylineElement:function(){return Jt},Property:function(){return ht},QB1:function(){return lt},QB2:function(){return dt},QB3:function(){return ft},RadialGradientElement:function(){return or},RectElement:function(){return qt},RenderedElement:function(){return kt},Rotate:function(){return Ct},SVGElement:function(){return Vt},SVGFontLoader:function(){return Br},Scale:function(){return xt},Screen:function(){return wt},Skew:function(){return Nt},SkewX:function(){return Qt},SkewY:function(){return Ft},StopElement:function(){return sr},StyleElement:function(){return jr},SymbolElement:function(){return br},TRefElement:function(){return hr},TSpanElement:function(){return Mt},TextElement:function(){return Rt},TextPathElement:function(){return vr},TitleElement:function(){return Or},Transform:function(){return Ut},Translate:function(){return _t},UnknownElement:function(){return Lt},UseElement:function(){return _r},ViewPort:function(){return pt},compressSpaces:function(){return Re},getSelectorSpecificity:function(){return rt},normalizeAttributeName:function(){return Ve},normalizeColor:function(){return Ge},parseExternalUrl:function(){return qe},presets:function(){return Gr},toNumbers:function(){return Ke},trimLeft:function(){return Me},trimRight:function(){return De},vectorMagnitude:function(){return ot},vectorsAngle:function(){return it},vectorsRatio:function(){return st}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js\"),o=r.n(n),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js\"),i=r.n(s),a=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js\"),A=r.n(a),u=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js\"),c=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js\"),l=r.n(c),d=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js\"),f=r.n(d),h=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js\"),p=r.n(h),m=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js\"),g=r.n(m),y=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js\"),v=r.n(y),w=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js\"),b=r.n(w),B=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js\"),j=r.n(B),_=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js\"),C=r.n(_),x=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js\"),E=r.n(x),N=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js\"),Q=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js\"),F=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js\"),U=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js\"),S=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js\"),L=r.n(S),T=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js\"),H=r.n(T),I=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js\"),P=r.n(I),O=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js\"),k=r.n(O),R=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js\"),M=r.n(R),D=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js\"),K=r.n(D),z=r(\".\u002Fnode_modules\u002Fraf\u002Findex.js\"),V=r.n(z),q=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js\"),G=r.n(q),X=r(\".\u002Fnode_modules\u002Frgbcolor\u002Findex.js\"),W=r.n(X),J=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js\"),Y=r.n(J),Z=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js\"),$=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js\"),ee=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\"),te=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js\"),re=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js\"),ne=r.n(re),oe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js\"),se=r.n(oe),ie=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js\"),ae=r.n(ie),Ae=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js\"),ue=r.n(Ae),ce=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js\"),le=r.n(ce),de=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js\"),fe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js\"),he=r.n(fe),pe=r(\".\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js\"),me=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js\"),ge=r.n(me),ye=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\"),ve=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js\"),we=r.n(ve),be=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js\"),Be=r.n(be),je=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js\"),_e=r.n(je),Ce=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js\"),xe=r.n(Ce),Ee=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\"),Ne=r.n(Ee),Qe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js\"),Fe=r.n(Qe),Ue=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js\"),Se=r.n(Ue),Le=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js\"),Te=r.n(Le),He=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js\"),Ie=r.n(He),Pe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js\"),Oe=r.n(Pe),ke=r(\".\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js\");function Re(e){return e.replace(\u002F(?!\\u3000)\\s+\u002Fgm,\" \")}function Me(e){return e.replace(\u002F^[\\n \\t]+\u002F,\"\")}function De(e){return e.replace(\u002F[\\n \\t]+$\u002F,\"\")}function Ke(e){var t=(e||\"\").match(\u002F-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)\u002Fgm)||[];return A()(t).call(t,i())}var ze=\u002F^[A-Z-]+$\u002F;function Ve(e){return ze.test(e)?e.toLowerCase():e}function qe(e){var t=e.match(\u002Furl\\(('([^']+)'|\"([^\"]+)\"|([^'\"\\)]+))\\)\u002F)||[];return t[2]||t[3]||t[4]}function Ge(e){if(!o()(e).call(e,\"rgb\"))return e;var t=3;return e.replace(\u002F\\d+(\\.\\d+)?\u002Fg,(function(e,r){return t--&&r?String(Math.round(i()(e))):e}))}var Xe=\u002F(\\[[^\\]]+\\])\u002Fg,We=\u002F(#[^\\s\\+>~\\.\\[:]+)\u002Fg,Je=\u002F(\\.[^\\s\\+>~\\.\\[:]+)\u002Fg,Ye=\u002F(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)\u002Fgi,Ze=\u002F(:[\\w-]+\\([^\\)]*\\))\u002Fgi,$e=\u002F(:[^\\s\\+>~\\.\\[:]+)\u002Fg,et=\u002F([^\\s\\+>~\\.\\[:]+)\u002Fg;function tt(e,t){var r=e.match(t);return r?[e.replace(t,\" \"),r.length]:[e,0]}function rt(e){var t=[0,0,0],r=e.replace(\u002F:not\\(([^\\)]*)\\)\u002Fg,\"     $1 \").replace(\u002F{[\\s\\S]*\u002Fgm,\" \"),n=0,o=tt(r,Xe),s=(0,u.default)(o,2);r=s[0],n=s[1],t[1]+=n;var i=tt(r,We),a=(0,u.default)(i,2);r=a[0],n=a[1],t[0]+=n;var A=tt(r,Je),c=(0,u.default)(A,2);r=c[0],n=c[1],t[1]+=n;var l=tt(r,Ye),d=(0,u.default)(l,2);r=d[0],n=d[1],t[2]+=n;var f=tt(r,Ze),h=(0,u.default)(f,2);r=h[0],n=h[1],t[1]+=n;var p=tt(r,$e),m=(0,u.default)(p,2);r=m[0],n=m[1],t[1]+=n;var g=tt(r=r.replace(\u002F[\\*\\s\\+>~]\u002Fg,\" \").replace(\u002F[#\\.]\u002Fg,\" \"),et),y=(0,u.default)(g,2);return r=y[0],n=y[1],t[2]+=n,t.join(\"\")}var nt=1e-8;function ot(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2))}function st(e,t){return(e[0]*t[0]+e[1]*t[1])\u002F(ot(e)*ot(t))}function it(e,t){return(e[0]*t[1]\u003Ce[1]*t[0]?-1:1)*Math.acos(st(e,t))}function at(e){return e*e*e}function At(e){return 3*e*e*(1-e)}function ut(e){return 3*e*(1-e)*(1-e)}function ct(e){return(1-e)*(1-e)*(1-e)}function lt(e){return e*e}function dt(e){return 2*e*(1-e)}function ft(e){return(1-e)*(1-e)}var ht=function(){function e(t,r,n){(0,F.default)(this,e),this.document=t,this.name=r,this.value=n,this.isNormalizedColor=!1}return(0,U.default)(e,[{key:\"split\",value:function(){var t,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\" \",o=this.document,s=this.name;return A()(t=G()(r=Re(this.getString())).call(r).split(n)).call(t,(function(t){return new e(o,s,t)}))}},{key:\"hasValue\",value:function(e){var t=this.value;return null!==t&&\"\"!==t&&(e||0!==t)&&void 0!==t}},{key:\"isString\",value:function(e){var t=this.value,r=\"string\"==typeof t;return r&&e?e.test(t):r}},{key:\"isUrlDefinition\",value:function(){return this.isString(\u002F^url\\(\u002F)}},{key:\"isPixels\",value:function(){if(!this.hasValue())return!1;var e=this.getString();switch(!0){case\u002Fpx$\u002F.test(e):case\u002F^[0-9]+$\u002F.test(e):return!0;default:return!1}}},{key:\"setValue\",value:function(e){return this.value=e,this}},{key:\"getValue\",value:function(e){return void 0===e||this.hasValue()?this.value:e}},{key:\"getNumber\",value:function(e){if(!this.hasValue())return void 0===e?0:i()(e);var t=this.value,r=i()(t);return this.isString(\u002F%$\u002F)&&(r\u002F=100),r}},{key:\"getString\",value:function(e){return void 0===e||this.hasValue()?void 0===this.value?\"\":String(this.value):String(e)}},{key:\"getColor\",value:function(e){var t=this.getString(e);return this.isNormalizedColor||(this.isNormalizedColor=!0,t=Ge(t),this.value=t),t}},{key:\"getDpi\",value:function(){return 96}},{key:\"getRem\",value:function(){return this.document.rootEmSize}},{key:\"getEm\",value:function(){return this.document.emSize}},{key:\"getUnits\",value:function(){return this.getString().replace(\u002F[0-9\\.\\-]\u002Fg,\"\")}},{key:\"getPixels\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.hasValue())return 0;var r=\"boolean\"==typeof e?[void 0,e]:[e],n=(0,u.default)(r,2),o=n[0],s=n[1],i=this.document.screen.viewPort;switch(!0){case this.isString(\u002Fvmin$\u002F):return this.getNumber()\u002F100*Math.min(i.computeSize(\"x\"),i.computeSize(\"y\"));case this.isString(\u002Fvmax$\u002F):return this.getNumber()\u002F100*Math.max(i.computeSize(\"x\"),i.computeSize(\"y\"));case this.isString(\u002Fvw$\u002F):return this.getNumber()\u002F100*i.computeSize(\"x\");case this.isString(\u002Fvh$\u002F):return this.getNumber()\u002F100*i.computeSize(\"y\");case this.isString(\u002Frem$\u002F):return this.getNumber()*this.getRem();case this.isString(\u002Fem$\u002F):return this.getNumber()*this.getEm();case this.isString(\u002Fex$\u002F):return this.getNumber()*this.getEm()\u002F2;case this.isString(\u002Fpx$\u002F):return this.getNumber();case this.isString(\u002Fpt$\u002F):return this.getNumber()*this.getDpi()*(1\u002F72);case this.isString(\u002Fpc$\u002F):return 15*this.getNumber();case this.isString(\u002Fcm$\u002F):return this.getNumber()*this.getDpi()\u002F2.54;case this.isString(\u002Fmm$\u002F):return this.getNumber()*this.getDpi()\u002F25.4;case this.isString(\u002Fin$\u002F):return this.getNumber()*this.getDpi();case this.isString(\u002F%$\u002F)&&s:return this.getNumber()*this.getEm();case this.isString(\u002F%$\u002F):return this.getNumber()*i.computeSize(o);default:var a=this.getNumber();return t&&a\u003C1?a*i.computeSize(o):a}}},{key:\"getMilliseconds\",value:function(){return this.hasValue()?this.isString(\u002Fms$\u002F)?this.getNumber():1e3*this.getNumber():0}},{key:\"getRadians\",value:function(){if(!this.hasValue())return 0;switch(!0){case this.isString(\u002Fdeg$\u002F):return this.getNumber()*(Math.PI\u002F180);case this.isString(\u002Fgrad$\u002F):return this.getNumber()*(Math.PI\u002F200);case this.isString(\u002Frad$\u002F):return this.getNumber();default:return this.getNumber()*(Math.PI\u002F180)}}},{key:\"getDefinition\",value:function(){var e=this.getString(),t=e.match(\u002F#([^\\)'\"]+)\u002F);return t&&(t=t[1]),t||(t=e),this.document.definitions[t]}},{key:\"getFillStyleDefinition\",value:function(e,t){var r=this.getDefinition();if(!r)return null;if(\"function\"==typeof r.createGradient)return r.createGradient(this.document.ctx,e,t);if(\"function\"==typeof r.createPattern){if(r.getHrefAttribute().hasValue()){var n=r.getAttribute(\"patternTransform\");r=r.getHrefAttribute().getDefinition(),n.hasValue()&&r.getAttribute(\"patternTransform\",!0).setValue(n.value)}return r.createPattern(this.document.ctx,e,t)}return null}},{key:\"getTextBaseline\",value:function(){return this.hasValue()?e.textBaselineMapping[this.getString()]:null}},{key:\"addOpacity\",value:function(t){for(var r=this.getColor(),n=r.length,o=0,s=0;s\u003Cn&&(\",\"===r[s]&&o++,3!==o);s++);if(t.hasValue()&&this.isString()&&3!==o){var i=new(W())(r);i.ok&&(i.alpha=t.getNumber(),r=i.toRGBA())}return new e(this.document,this.name,r)}}],[{key:\"empty\",value:function(t){return new e(t,\"EMPTY\",\"\")}}]),e}();ht.textBaselineMapping={baseline:\"alphabetic\",\"before-edge\":\"top\",\"text-before-edge\":\"top\",middle:\"middle\",central:\"middle\",\"after-edge\":\"bottom\",\"text-after-edge\":\"bottom\",ideographic:\"ideographic\",alphabetic:\"alphabetic\",hanging:\"hanging\",mathematical:\"alphabetic\"};var pt=function(){function e(){(0,F.default)(this,e),this.viewPorts=[]}return(0,U.default)(e,[{key:\"clear\",value:function(){this.viewPorts=[]}},{key:\"setCurrent\",value:function(e,t){this.viewPorts.push({width:e,height:t})}},{key:\"removeCurrent\",value:function(){this.viewPorts.pop()}},{key:\"getCurrent\",value:function(){var e=this.viewPorts;return e[e.length-1]}},{key:\"computeSize\",value:function(e){return\"number\"==typeof e?e:\"x\"===e?this.width:\"y\"===e?this.height:Math.sqrt(Math.pow(this.width,2)+Math.pow(this.height,2))\u002FMath.sqrt(2)}},{key:\"width\",get:function(){return this.getCurrent().width}},{key:\"height\",get:function(){return this.getCurrent().height}}]),e}(),mt=function(){function e(t,r){(0,F.default)(this,e),this.x=t,this.y=r}return(0,U.default)(e,[{key:\"angleTo\",value:function(e){return Math.atan2(e.y-this.y,e.x-this.x)}},{key:\"applyTransform\",value:function(e){var t=this.x,r=this.y,n=t*e[0]+r*e[2]+e[4],o=t*e[1]+r*e[3]+e[5];this.x=n,this.y=o}}],[{key:\"parse\",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Ke(t),o=(0,u.default)(n,2),s=o[0],i=void 0===s?r:s,a=o[1],A=void 0===a?r:a;return new e(i,A)}},{key:\"parseScale\",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=Ke(t),o=(0,u.default)(n,2),s=o[0],i=void 0===s?r:s,a=o[1],A=void 0===a?i:a;return new e(i,A)}},{key:\"parsePath\",value:function(t){for(var r=Ke(t),n=r.length,o=[],s=0;s\u003Cn;s+=2)o.push(new e(r[s],r[s+1]));return o}}]),e}(),gt=function(){function e(t){var r,n;(0,F.default)(this,e),this.screen=t,this.working=!1,this.events=[],this.eventElements=[],this.onClick=K()(r=this.onClick).call(r,this),this.onMouseMove=K()(n=this.onMouseMove).call(n,this)}return(0,U.default)(e,[{key:\"isWorking\",value:function(){return this.working}},{key:\"start\",value:function(){if(!this.working){var e=this.screen,t=this.onClick,r=this.onMouseMove,n=e.ctx.canvas;n.onclick=t,n.onmousemove=r,this.working=!0}}},{key:\"stop\",value:function(){if(this.working){var e=this.screen.ctx.canvas;this.working=!1,e.onclick=null,e.onmousemove=null}}},{key:\"hasEvents\",value:function(){return this.working&&this.events.length>0}},{key:\"runEvents\",value:function(){if(this.working){var e=this.screen,t=this.events,r=this.eventElements,n=e.ctx.canvas.style;n&&(n.cursor=\"\"),g()(t).call(t,(function(e,t){for(var n=e.run,o=r[t];o;)n(o),o=o.parent})),this.events=[],this.eventElements=[]}}},{key:\"checkPath\",value:function(e,t){if(this.working&&t){var r=this.events,n=this.eventElements;g()(r).call(r,(function(r,o){var s=r.x,i=r.y;!n[o]&&t.isPointInPath&&t.isPointInPath(s,i)&&(n[o]=e)}))}}},{key:\"checkBoundingBox\",value:function(e,t){if(this.working&&t){var r=this.events,n=this.eventElements;g()(r).call(r,(function(r,o){var s=r.x,i=r.y;!n[o]&&t.isPointInBox(s,i)&&(n[o]=e)}))}}},{key:\"mapXY\",value:function(e,t){for(var r=this.screen,n=r.window,o=r.ctx,s=new mt(e,t),i=o.canvas;i;)s.x-=i.offsetLeft,s.y-=i.offsetTop,i=i.offsetParent;return n.scrollX&&(s.x+=n.scrollX),n.scrollY&&(s.y+=n.scrollY),s}},{key:\"onClick\",value:function(e){var t=this.mapXY((e||event).clientX,(e||event).clientY),r=t.x,n=t.y;this.events.push({type:\"onclick\",x:r,y:n,run:function(e){e.onClick&&e.onClick()}})}},{key:\"onMouseMove\",value:function(e){var t=this.mapXY((e||event).clientX,(e||event).clientY),r=t.x,n=t.y;this.events.push({type:\"onmousemove\",x:r,y:n,run:function(e){e.onMouseMove&&e.onMouseMove()}})}}]),e}(),yt=\"undefined\"!=typeof window?window:null,vt=\"undefined\"!=typeof fetch?K()(fetch).call(fetch,void 0):null,wt=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.fetch,o=void 0===n?vt:n,s=r.window,i=void 0===s?yt:s;(0,F.default)(this,e),this.ctx=t,this.FRAMERATE=30,this.MAX_VIRTUAL_PIXELS=3e4,this.CLIENT_WIDTH=800,this.CLIENT_HEIGHT=600,this.viewPort=new pt,this.mouse=new gt(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=i,this.fetch=o}return(0,U.default)(e,[{key:\"wait\",value:function(e){this.waits.push(e)}},{key:\"ready\",value:function(){return this.readyPromise?this.readyPromise:M().resolve()}},{key:\"isReady\",value:function(){var e;if(this.isReadyLock)return!0;var t=k()(e=this.waits).call(e,(function(e){return e()}));return t&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=t,t}},{key:\"setDefaults\",value:function(e){e.strokeStyle=\"rgba(0,0,0,0)\",e.lineCap=\"butt\",e.lineJoin=\"miter\",e.miterLimit=4}},{key:\"setViewBox\",value:function(e){var t=e.document,r=e.ctx,n=e.aspectRatio,o=e.width,s=e.desiredWidth,i=e.height,a=e.desiredHeight,A=e.minX,c=void 0===A?0:A,l=e.minY,d=void 0===l?0:l,f=e.refX,h=e.refY,p=e.clip,m=void 0!==p&&p,g=e.clipX,y=void 0===g?0:g,v=e.clipY,w=void 0===v?0:v,b=Re(n).replace(\u002F^defer\\s\u002F,\"\").split(\" \"),B=(0,u.default)(b,2),j=B[0]||\"xMidYMid\",_=B[1]||\"meet\",C=o\u002Fs,x=i\u002Fa,E=Math.min(C,x),N=Math.max(C,x),Q=s,F=a;\"meet\"===_&&(Q*=E,F*=E),\"slice\"===_&&(Q*=N,F*=N);var U=new ht(t,\"refX\",f),S=new ht(t,\"refY\",h),L=U.hasValue()&&S.hasValue();if(L&&r.translate(-E*U.getPixels(\"x\"),-E*S.getPixels(\"y\")),m){var T=E*y,H=E*w;r.beginPath(),r.moveTo(T,H),r.lineTo(o,H),r.lineTo(o,i),r.lineTo(T,i),r.closePath(),r.clip()}if(!L){var I=\"meet\"===_&&E===x,P=\"slice\"===_&&N===x,O=\"meet\"===_&&E===C,k=\"slice\"===_&&N===C;\u002F^xMid\u002F.test(j)&&(I||P)&&r.translate(o\u002F2-Q\u002F2,0),\u002FYMid$\u002F.test(j)&&(O||k)&&r.translate(0,i\u002F2-F\u002F2),\u002F^xMax\u002F.test(j)&&(I||P)&&r.translate(o-Q,0),\u002FYMax$\u002F.test(j)&&(O||k)&&r.translate(0,i-F)}switch(!0){case\"none\"===j:r.scale(C,x);break;case\"meet\"===_:r.scale(E,E);break;case\"slice\"===_:r.scale(N,N)}r.translate(-c,-d)}},{key:\"start\",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.enableRedraw,o=void 0!==n&&n,s=r.ignoreMouse,i=void 0!==s&&s,a=r.ignoreAnimation,A=void 0!==a&&a,u=r.ignoreDimensions,c=void 0!==u&&u,l=r.ignoreClear,d=void 0!==l&&l,f=r.forceRedraw,h=r.scaleWidth,p=r.scaleHeight,m=r.offsetX,g=r.offsetY,y=this.FRAMERATE,v=this.mouse,w=1e3\u002Fy;if(this.frameDuration=w,this.readyPromise=new(M())((function(e){t.resolveReady=e})),this.isReady()&&this.render(e,c,d,h,p,m,g),o){var b=P()(),B=b,j=0,_=function r(){b=P()(),(j=b-B)>=w&&(B=b-j%w,t.shouldUpdate(A,f)&&(t.render(e,c,d,h,p,m,g),v.runEvents())),t.intervalId=V()(r)};i||v.start(),this.intervalId=V()(_)}}},{key:\"stop\",value:function(){this.intervalId&&(V().cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}},{key:\"shouldUpdate\",value:function(e,t){if(!e){var r,n=this.frameDuration;if(H()(r=this.animations).call(r,(function(e,t){return t.update(n)||e}),!1))return!0}return!(\"function\"!=typeof t||!t())||!(this.isReadyLock||!this.isReady())||!!this.mouse.hasEvents()}},{key:\"render\",value:function(e,t,r,n,o,s,i){var a=this.CLIENT_WIDTH,A=this.CLIENT_HEIGHT,u=this.viewPort,c=this.ctx,l=this.isFirstRender,d=c.canvas;u.clear(),d.width&&d.height?u.setCurrent(d.width,d.height):u.setCurrent(a,A);var f=e.getStyle(\"width\"),h=e.getStyle(\"height\");!t&&(l||\"number\"!=typeof n&&\"number\"!=typeof o)&&(f.hasValue()&&(d.width=f.getPixels(\"x\"),d.style&&(d.style.width=\"\".concat(d.width,\"px\"))),h.hasValue()&&(d.height=h.getPixels(\"y\"),d.style&&(d.style.height=\"\".concat(d.height,\"px\"))));var p=d.clientWidth||d.width,m=d.clientHeight||d.height;if(t&&f.hasValue()&&h.hasValue()&&(p=f.getPixels(\"x\"),m=h.getPixels(\"y\")),u.setCurrent(p,m),\"number\"==typeof s&&e.getAttribute(\"x\",!0).setValue(s),\"number\"==typeof i&&e.getAttribute(\"y\",!0).setValue(i),\"number\"==typeof n||\"number\"==typeof o){var g,y,v=Ke(e.getAttribute(\"viewBox\").getString()),w=0,b=0;if(\"number\"==typeof n){var B=e.getStyle(\"width\");B.hasValue()?w=B.getPixels(\"x\")\u002Fn:isNaN(v[2])||(w=v[2]\u002Fn)}if(\"number\"==typeof o){var j=e.getStyle(\"height\");j.hasValue()?b=j.getPixels(\"y\")\u002Fo:isNaN(v[3])||(b=v[3]\u002Fo)}w||(w=b),b||(b=w),e.getAttribute(\"width\",!0).setValue(n),e.getAttribute(\"height\",!0).setValue(o);var _=e.getStyle(\"transform\",!0,!0);_.setValue(L()(g=L()(y=\"\".concat(_.getString(),\" scale(\")).call(y,1\u002Fw,\", \")).call(g,1\u002Fb,\")\"))}r||c.clearRect(0,0,p,m),e.render(c),l&&(this.isFirstRender=!1)}}]),e}();wt.defaultWindow=yt,wt.defaultFetch=vt;var bt=wt.defaultFetch,Bt=\"undefined\"!=typeof DOMParser?DOMParser:null,jt=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.fetch,n=void 0===r?bt:r,o=t.DOMParser,s=void 0===o?Bt:o;(0,F.default)(this,e),this.fetch=n,this.DOMParser=s}var t,r;return(0,U.default)(e,[{key:\"parse\",value:(r=(0,N.default)(E().mark((function e(t){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!\u002F^\u003C\u002F.test(t)){e.next=2;break}return e.abrupt(\"return\",this.parseFromString(t));case 2:return e.abrupt(\"return\",this.load(t));case 3:case\"end\":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:\"parseFromString\",value:function(e){var t=new this.DOMParser;try{return this.checkDocument(t.parseFromString(e,\"image\u002Fsvg+xml\"))}catch(r){return this.checkDocument(t.parseFromString(e,\"text\u002Fxml\"))}}},{key:\"checkDocument\",value:function(e){var t=e.getElementsByTagName(\"parsererror\")[0];if(t)throw new Error(t.textContent);return e}},{key:\"load\",value:(t=(0,N.default)(E().mark((function e(t){var r,n;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.fetch(t);case 2:return r=e.sent,e.next=5,r.text();case 5:return n=e.sent,e.abrupt(\"return\",this.parseFromString(n));case 7:case\"end\":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})}]),e}(),_t=function(){function e(t,r){(0,F.default)(this,e),this.type=\"translate\",this.point=null,this.point=mt.parse(r)}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.point,r=t.x,n=t.y;e.translate(r||0,n||0)}},{key:\"unapply\",value:function(e){var t=this.point,r=t.x,n=t.y;e.translate(-1*r||0,-1*n||0)}},{key:\"applyToPoint\",value:function(e){var t=this.point,r=t.x,n=t.y;e.applyTransform([1,0,0,1,r||0,n||0])}}]),e}(),Ct=function(){function e(t,r,n){(0,F.default)(this,e),this.type=\"rotate\",this.angle=null,this.originX=null,this.originY=null,this.cx=0,this.cy=0;var o=Ke(r);this.angle=new ht(t,\"angle\",o[0]),this.originX=n[0],this.originY=n[1],this.cx=o[1]||0,this.cy=o[2]||0}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.cx,r=this.cy,n=this.originX,o=this.originY,s=this.angle,i=t+n.getPixels(\"x\"),a=r+o.getPixels(\"y\");e.translate(i,a),e.rotate(s.getRadians()),e.translate(-i,-a)}},{key:\"unapply\",value:function(e){var t=this.cx,r=this.cy,n=this.angle;e.translate(t,r),e.rotate(-1*n.getRadians()),e.translate(-t,-r)}},{key:\"applyToPoint\",value:function(e){var t=this.cx,r=this.cy,n=this.angle.getRadians();e.applyTransform([1,0,0,1,t||0,r||0]),e.applyTransform([Math.cos(n),Math.sin(n),-Math.sin(n),Math.cos(n),0,0]),e.applyTransform([1,0,0,1,-t||0,-r||0])}}]),e}(),xt=function(){function e(t,r){(0,F.default)(this,e),this.type=\"scale\",this.scale=null;var n=mt.parseScale(r);0!==n.x&&0!==n.y||(n.x=nt,n.y=nt),this.scale=n}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.scale(r,n||r)}},{key:\"unapply\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.scale(1\u002Fr,1\u002Fn||r)}},{key:\"applyToPoint\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.applyTransform([r||0,0,0,n||0,0,0])}}]),e}(),Et=function(){function e(t,r){(0,F.default)(this,e),this.type=\"matrix\",this.matrix=[],this.matrix=Ke(r)}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.matrix;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},{key:\"unapply\",value:function(e){var t=this.matrix,r=t[0],n=t[2],o=t[4],s=t[1],i=t[3],a=t[5],A=1\u002F(r*(1*i-0*a)-n*(1*s-0*a)+o*(0*s-0*i));e.transform(A*(1*i-0*a),A*(0*a-1*s),A*(0*o-1*n),A*(1*r-0*o),A*(n*a-o*i),A*(o*s-r*a))}},{key:\"applyToPoint\",value:function(e){e.applyTransform(this.matrix)}}]),e}();var Nt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skew\",r.angle=null,r.angle=new ht(e,\"angle\",t),r}return o}(Et);var Qt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skewX\",r.matrix=[1,0,Math.tan(r.angle.getRadians()),1,0,0],r}return o}(Nt);var Ft=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skewY\",r.matrix=[1,Math.tan(r.angle.getRadians()),0,1,0,0],r}return o}(Nt),Ut=function(){function e(t,r,n){var o=this;(0,F.default)(this,e),this.document=t,this.transforms=[];var s=function(e){var t;return G()(t=Re(e)).call(t).replace(\u002F\\)([a-zA-Z])\u002Fg,\") $1\").replace(\u002F\\)(\\s?,\\s?)\u002Fg,\") \").split(\u002F\\s(?=[a-z])\u002F)}(r);g()(s).call(s,(function(t){if(\"none\"!==t){var r=function(e){var t=e.split(\"(\"),r=(0,u.default)(t,2),n=r[0],o=r[1];return[G()(n).call(n),G()(o).call(o).replace(\")\",\"\")]}(t),s=(0,u.default)(r,2),i=s[0],a=s[1],A=e.transformTypes[i];void 0!==A&&o.transforms.push(new A(o.document,a,n))}}))}return(0,U.default)(e,[{key:\"apply\",value:function(e){for(var t=this.transforms,r=t.length,n=0;n\u003Cr;n++)t[n].apply(e)}},{key:\"unapply\",value:function(e){for(var t=this.transforms,r=t.length-1;r>=0;r--)t[r].unapply(e)}},{key:\"applyToPoint\",value:function(e){for(var t=this.transforms,r=t.length,n=0;n\u003Cr;n++)t[n].applyToPoint(e)}}],[{key:\"fromElement\",value:function(t,r){var n=r.getStyle(\"transform\",!1,!0),o=r.getStyle(\"transform-origin\",!1,!0).split(),s=(0,u.default)(o,2),i=s[0],a=s[1],A=[i,void 0===a?i:a];return n.hasValue()?new e(t,n.getString(),A):null}}]),e}();Ut.transformTypes={translate:_t,rotate:Ct,scale:xt,matrix:Et,skewX:Qt,skewY:Ft};var St=function(){function e(t,r){var n,o,s=this,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if((0,F.default)(this,e),this.document=t,this.node=r,this.captureTextNodes=i,this.attributes={},this.styles={},this.stylesSpecificity={},this.animationFrozen=!1,this.animationFrozenValue=\"\",this.parent=null,this.children=[],r&&1===r.nodeType){if(g()(n=ae()(r.attributes)).call(n,(function(e){var r=Ve(e.nodeName);s.attributes[r]=new ht(t,r,e.value)})),this.addStylesFromStyleDefinition(),this.getAttribute(\"style\").hasValue()){var a,c=A()(a=this.getAttribute(\"style\").getString().split(\";\")).call(a,(function(e){return G()(e).call(e)}));g()(c).call(c,(function(e){var r;if(e){var n=A()(r=e.split(\":\")).call(r,(function(e){return G()(e).call(e)})),o=(0,u.default)(n,2),i=o[0],a=o[1];s.styles[i]=new ht(t,i,a)}}))}var l=t.definitions,d=this.getAttribute(\"id\");d.hasValue()&&(l[d.getValue()]||(l[d.getValue()]=this)),g()(o=ae()(r.childNodes)).call(o,(function(e){if(1===e.nodeType)s.addChild(e);else if(i&&(3===e.nodeType||4===e.nodeType)){var r=t.createTextNode(e);r.getText().length>0&&s.addChild(r)}}))}}return(0,U.default)(e,[{key:\"getAttribute\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.attributes[e];if(!r&&t){var n=new ht(this.document,e,\"\");return this.attributes[e]=n,n}return r||ht.empty(this.document)}},{key:\"getHrefAttribute\",value:function(){for(var e in this.attributes)if(\"href\"===e||\u002F:href$\u002F.test(e))return this.attributes[e];return ht.empty(this.document)}},{key:\"getStyle\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.styles[e];if(n)return n;var o=this.getAttribute(e);if(o&&o.hasValue())return this.styles[e]=o,o;if(!r){var s=this.parent;if(s){var i=s.getStyle(e);if(i&&i.hasValue())return i}}if(t){var a=new ht(this.document,e,\"\");return this.styles[e]=a,a}return n||ht.empty(this.document)}},{key:\"render\",value:function(e){if(\"none\"!==this.getStyle(\"display\").getString()&&\"hidden\"!==this.getStyle(\"visibility\").getString()){if(e.save(),this.getStyle(\"mask\").hasValue()){var t=this.getStyle(\"mask\").getDefinition();t&&(this.applyEffects(e),t.apply(e,this))}else if(\"none\"!==this.getStyle(\"filter\").getValue(\"none\")){var r=this.getStyle(\"filter\").getDefinition();r&&(this.applyEffects(e),r.apply(e,this))}else this.setContext(e),this.renderChildren(e),this.clearContext(e);e.restore()}}},{key:\"setContext\",value:function(e){}},{key:\"applyEffects\",value:function(e){var t=Ut.fromElement(this.document,this);t&&t.apply(e);var r=this.getStyle(\"clip-path\",!1,!0);if(r.hasValue()){var n=r.getDefinition();n&&n.apply(e)}}},{key:\"clearContext\",value:function(e){}},{key:\"renderChildren\",value:function(e){var t;g()(t=this.children).call(t,(function(t){t.render(e)}))}},{key:\"addChild\",value:function(t){var r,n=t instanceof e?t:this.document.createElement(t);n.parent=this,se()(r=e.ignoreChildTypes).call(r,n.type)||this.children.push(n)}},{key:\"matchesSelector\",value:function(e){var t,r=this.node;if(\"function\"==typeof r.matches)return r.matches(e);var n=r.getAttribute(\"class\");return!(!n||\"\"===n)&&ne()(t=n.split(\" \")).call(t,(function(t){if(\".\".concat(t)===e)return!0}))}},{key:\"addStylesFromStyleDefinition\",value:function(){var e=this.document,t=e.styles,r=e.stylesSpecificity;for(var n in t)if(\"@\"!==n[0]&&this.matchesSelector(n)){var o=t[n],s=r[n];if(o)for(var i in o){var a=this.stylesSpecificity[i];void 0===a&&(a=\"000\"),s>=a&&(this.styles[i]=o[i],this.stylesSpecificity[i]=s)}}}},{key:\"removeStyles\",value:function(e,t){return H()(t).call(t,(function(t,r){var n,o=e.getStyle(r);if(!o.hasValue())return t;var s=o.getString();return o.setValue(\"\"),L()(n=[]).call(n,(0,te.default)(t),[[r,s]])}),[])}},{key:\"restoreStyles\",value:function(e,t){g()(t).call(t,(function(t){var r=(0,u.default)(t,2),n=r[0],o=r[1];e.getStyle(n,!0).setValue(o)}))}}]),e}();St.ignoreChildTypes=[\"title\"];var Lt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){return(0,F.default)(this,o),n.call(this,e,t,r)}return o}(St);function Tt(e){var t=G()(e).call(e);return\u002F^('|\")\u002F.test(t)?t:'\"'.concat(t,'\"')}function Ht(e){if(!e)return\"\";var t=G()(e).call(e).toLowerCase();switch(t){case\"normal\":case\"italic\":case\"oblique\":case\"inherit\":case\"initial\":case\"unset\":return t;default:return\u002F^oblique\\s+(-|)\\d+deg$\u002F.test(t)?t:\"\"}}function It(e){if(!e)return\"\";var t=G()(e).call(e).toLowerCase();switch(t){case\"normal\":case\"bold\":case\"lighter\":case\"bolder\":case\"inherit\":case\"initial\":case\"unset\":return t;default:return\u002F^[\\d.]+$\u002F.test(t)?t:\"\"}}var Pt=function(){function e(t,r,n,o,s,i){(0,F.default)(this,e);var a=i?\"string\"==typeof i?e.parse(i):i:{};this.fontFamily=s||a.fontFamily,this.fontSize=o||a.fontSize,this.fontStyle=t||a.fontStyle,this.fontWeight=n||a.fontWeight,this.fontVariant=r||a.fontVariant}return(0,U.default)(e,[{key:\"toString\",value:function(){var e,t,r;return G()(e=[Ht(this.fontStyle),this.fontVariant,It(this.fontWeight),this.fontSize,(t=this.fontFamily,\"undefined\"==typeof process?t:A()(r=G()(t).call(t).split(\",\")).call(r,Tt).join(\",\"))].join(\" \")).call(e)}}],[{key:\"parse\",value:function(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",n=arguments.length>1?arguments[1]:void 0,o=\"\",s=\"\",i=\"\",a=\"\",A=\"\",c=G()(t=Re(r)).call(t).split(\" \"),l={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return g()(c).call(c,(function(t){var r,n,c;switch(!0){case!l.fontStyle&&se()(r=e.styles).call(r,t):\"inherit\"!==t&&(o=t),l.fontStyle=!0;break;case!l.fontVariant&&se()(n=e.variants).call(n,t):\"inherit\"!==t&&(s=t),l.fontStyle=!0,l.fontVariant=!0;break;case!l.fontWeight&&se()(c=e.weights).call(c,t):\"inherit\"!==t&&(i=t),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0;break;case!l.fontSize:if(\"inherit\"!==t){var d=t.split(\"\u002F\"),f=(0,u.default)(d,1);a=f[0]}l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0,l.fontSize=!0;break;default:\"inherit\"!==t&&(A+=t)}})),new e(o,s,i,a,A,n)}}]),e}();Pt.styles=\"normal|italic|oblique|inherit\",Pt.variants=\"normal|small-caps|inherit\",Pt.weights=\"normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit\";var Ot=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Number.NaN,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.NaN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Number.NaN,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Number.NaN;(0,F.default)(this,e),this.x1=t,this.y1=r,this.x2=n,this.y2=o,this.addPoint(t,r),this.addPoint(n,o)}return(0,U.default)(e,[{key:\"addPoint\",value:function(e,t){void 0!==e&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e\u003Cthis.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),void 0!==t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t\u003Cthis.y1&&(this.y1=t),t>this.y2&&(this.y2=t))}},{key:\"addX\",value:function(e){this.addPoint(e,null)}},{key:\"addY\",value:function(e){this.addPoint(null,e)}},{key:\"addBoundingBox\",value:function(e){if(e){var t=e.x1,r=e.y1,n=e.x2,o=e.y2;this.addPoint(t,r),this.addPoint(n,o)}}},{key:\"sumCubic\",value:function(e,t,r,n,o){return Math.pow(1-e,3)*t+3*Math.pow(1-e,2)*e*r+3*(1-e)*Math.pow(e,2)*n+Math.pow(e,3)*o}},{key:\"bezierCurveAdd\",value:function(e,t,r,n,o){var s=6*t-12*r+6*n,i=-3*t+9*r-9*n+3*o,a=3*r-3*t;if(0!==i){var A=Math.pow(s,2)-4*a*i;if(!(A\u003C0)){var u=(-s+Math.sqrt(A))\u002F(2*i);0\u003Cu&&u\u003C1&&(e?this.addX(this.sumCubic(u,t,r,n,o)):this.addY(this.sumCubic(u,t,r,n,o)));var c=(-s-Math.sqrt(A))\u002F(2*i);0\u003Cc&&c\u003C1&&(e?this.addX(this.sumCubic(c,t,r,n,o)):this.addY(this.sumCubic(c,t,r,n,o)))}}else{if(0===s)return;var l=-a\u002Fs;0\u003Cl&&l\u003C1&&(e?this.addX(this.sumCubic(l,t,r,n,o)):this.addY(this.sumCubic(l,t,r,n,o)))}}},{key:\"addBezierCurve\",value:function(e,t,r,n,o,s,i,a){this.addPoint(e,t),this.addPoint(i,a),this.bezierCurveAdd(!0,e,r,o,i),this.bezierCurveAdd(!1,t,n,s,a)}},{key:\"addQuadraticCurve\",value:function(e,t,r,n,o,s){var i=e+2\u002F3*(r-e),a=t+2\u002F3*(n-t),A=i+1\u002F3*(o-e),u=a+1\u002F3*(s-t);this.addBezierCurve(e,t,i,A,a,u,o,s)}},{key:\"isPointInBox\",value:function(e,t){var r=this.x1,n=this.y1,o=this.x2,s=this.y2;return r\u003C=e&&e\u003C=o&&n\u003C=t&&t\u003C=s}},{key:\"x\",get:function(){return this.x1}},{key:\"y\",get:function(){return this.y1}},{key:\"width\",get:function(){return this.x2-this.x1}},{key:\"height\",get:function(){return this.y2-this.y1}}]),e}();var kt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).modifiedEmSizeStack=!1,e}return(0,U.default)(o,[{key:\"calculateOpacity\",value:function(){for(var e=1,t=this;t;){var r=t.getStyle(\"opacity\",!1,!0);r.hasValue(!0)&&(e*=r.getNumber()),t=t.parent}return e}},{key:\"setContext\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!t){var r=this.getStyle(\"fill\"),n=this.getStyle(\"fill-opacity\"),o=this.getStyle(\"stroke\"),s=this.getStyle(\"stroke-opacity\");if(r.isUrlDefinition()){var i=r.getFillStyleDefinition(this,n);i&&(e.fillStyle=i)}else if(r.hasValue()){\"currentColor\"===r.getString()&&r.setValue(this.getStyle(\"color\").getColor());var a=r.getColor();\"inherit\"!==a&&(e.fillStyle=\"none\"===a?\"rgba(0,0,0,0)\":a)}if(n.hasValue()){var A=new ht(this.document,\"fill\",e.fillStyle).addOpacity(n).getColor();e.fillStyle=A}if(o.isUrlDefinition()){var u=o.getFillStyleDefinition(this,s);u&&(e.strokeStyle=u)}else if(o.hasValue()){\"currentColor\"===o.getString()&&o.setValue(this.getStyle(\"color\").getColor());var c=o.getString();\"inherit\"!==c&&(e.strokeStyle=\"none\"===c?\"rgba(0,0,0,0)\":c)}if(s.hasValue()){var l=new ht(this.document,\"stroke\",e.strokeStyle).addOpacity(s).getString();e.strokeStyle=l}var d=this.getStyle(\"stroke-width\");if(d.hasValue()){var f=d.getPixels();e.lineWidth=f||nt}var h=this.getStyle(\"stroke-linecap\"),p=this.getStyle(\"stroke-linejoin\"),m=this.getStyle(\"stroke-miterlimit\"),g=this.getStyle(\"paint-order\"),y=this.getStyle(\"stroke-dasharray\"),v=this.getStyle(\"stroke-dashoffset\");if(h.hasValue()&&(e.lineCap=h.getString()),p.hasValue()&&(e.lineJoin=p.getString()),m.hasValue()&&(e.miterLimit=m.getNumber()),g.hasValue()&&(e.paintOrder=g.getValue()),y.hasValue()&&\"none\"!==y.getString()){var w=Ke(y.getString());void 0!==e.setLineDash?e.setLineDash(w):void 0!==e.webkitLineDash?e.webkitLineDash=w:void 0===e.mozDash||1===w.length&&0===w[0]||(e.mozDash=w);var b=v.getPixels();void 0!==e.lineDashOffset?e.lineDashOffset=b:void 0!==e.webkitLineDashOffset?e.webkitLineDashOffset=b:void 0!==e.mozDashOffset&&(e.mozDashOffset=b)}}if(this.modifiedEmSizeStack=!1,void 0!==e.font){var B=this.getStyle(\"font\"),j=this.getStyle(\"font-style\"),_=this.getStyle(\"font-variant\"),C=this.getStyle(\"font-weight\"),x=this.getStyle(\"font-size\"),E=this.getStyle(\"font-family\"),N=new Pt(j.getString(),_.getString(),C.getString(),x.hasValue()?\"\".concat(x.getPixels(!0),\"px\"):\"\",E.getString(),Pt.parse(B.getString(),e.font));j.setValue(N.fontStyle),_.setValue(N.fontVariant),C.setValue(N.fontWeight),x.setValue(N.fontSize),E.setValue(N.fontFamily),e.font=N.toString(),x.isPixels()&&(this.document.emSize=x.getPixels(),this.modifiedEmSizeStack=!0)}t||(this.applyEffects(e),e.globalAlpha=this.calculateOpacity())}},{key:\"clearContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"clearContext\",this).call(this,e),this.modifiedEmSizeStack&&this.document.popEmSize()}}]),o}(St);var Rt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,(this instanceof o?this.constructor:void 0)===o||r)).type=\"text\",s.x=0,s.y=0,s.measureCache=-1,s}return(0,U.default)(o,[{key:\"setContext\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e,t);var r=this.getStyle(\"dominant-baseline\").getTextBaseline()||this.getStyle(\"alignment-baseline\").getTextBaseline();r&&(e.textBaseline=r)}},{key:\"initializeCoordinates\",value:function(e){this.x=this.getAttribute(\"x\").getPixels(\"x\"),this.y=this.getAttribute(\"y\").getPixels(\"y\");var t=this.getAttribute(\"dx\"),r=this.getAttribute(\"dy\");t.hasValue()&&(this.x+=t.getPixels(\"x\")),r.hasValue()&&(this.y+=r.getPixels(\"y\")),this.x+=this.getAnchorDelta(e,this,0)}},{key:\"getBoundingBox\",value:function(e){var t,r=this;if(\"text\"!==this.type)return this.getTElementBoundingBox(e);this.initializeCoordinates(e);var n=null;return g()(t=this.children).call(t,(function(t,o){var s=r.getChildBoundingBox(e,r,r,o);n?n.addBoundingBox(s):n=s})),n}},{key:\"getFontSize\",value:function(){var e=this.document,t=this.parent,r=Pt.parse(e.ctx.font).fontSize;return t.getStyle(\"font-size\").getNumber(r)}},{key:\"getTElementBoundingBox\",value:function(e){var t=this.getFontSize();return new Ot(this.x,this.y-t,this.x+this.measureText(e),this.y)}},{key:\"getGlyph\",value:function(e,t,r){var n=t[r],o=null;if(e.isArabic){var s=t.length,i=t[r-1],a=t[r+1],A=\"isolated\";(0===r||\" \"===i)&&r\u003Cs-2&&\" \"!==a&&(A=\"terminal\"),r>0&&\" \"!==i&&r\u003Cs-2&&\" \"!==a&&(A=\"medial\"),r>0&&\" \"!==i&&(r===s-1||\" \"===a)&&(A=\"initial\"),void 0!==e.glyphs[n]&&((o=e.glyphs[n][A])||\"glyph\"!==e.glyphs[n].type||(o=e.glyphs[n]))}else o=e.glyphs[n];return o||(o=e.missingGlyph),o}},{key:\"getText\",value:function(){return\"\"}},{key:\"getTextFromNode\",value:function(e){var t=e||this.node,r=ae()(t.parentNode.childNodes),n=le()(r).call(r,t),o=r.length-1,s=Re(t.value||t.text||t.textContent||\"\");return 0===n&&(s=Me(s)),n===o&&(s=De(s)),s}},{key:\"renderChildren\",value:function(e){var t,r=this;if(\"text\"===this.type){this.initializeCoordinates(e),g()(t=this.children).call(t,(function(t,n){r.renderChild(e,r,r,n)}));var n=this.document.screen.mouse;n.isWorking()&&n.checkBoundingBox(this,this.getBoundingBox(e))}else this.renderTElementChildren(e)}},{key:\"renderTElementChildren\",value:function(e){var t=this.document,r=this.parent,n=this.getText(),o=r.getStyle(\"font-family\").getDefinition();if(o)for(var s,i=o.fontFace.unitsPerEm,a=Pt.parse(t.ctx.font),A=r.getStyle(\"font-size\").getNumber(a.fontSize),u=r.getStyle(\"font-style\").getString(a.fontStyle),c=A\u002Fi,l=o.isRTL?ue()(s=n.split(\"\")).call(s).join(\"\"):n,d=Ke(r.getAttribute(\"dx\").getString()),f=l.length,h=0;h\u003Cf;h++){var p=this.getGlyph(o,l,h);e.translate(this.x,this.y),e.scale(c,-c);var m=e.lineWidth;e.lineWidth=e.lineWidth*i\u002FA,\"italic\"===u&&e.transform(1,0,.4,1,0,0),p.render(e),\"italic\"===u&&e.transform(1,0,-.4,1,0,0),e.lineWidth=m,e.scale(1\u002Fc,-1\u002Fc),e.translate(-this.x,-this.y),this.x+=A*(p.horizAdvX||o.horizAdvX)\u002Fi,void 0===d[h]||isNaN(d[h])||(this.x+=d[h])}else{var g=this.x,y=this.y;\"stroke\"===e.paintOrder?(e.strokeStyle&&e.strokeText(n,g,y),e.fillStyle&&e.fillText(n,g,y)):(e.fillStyle&&e.fillText(n,g,y),e.strokeStyle&&e.strokeText(n,g,y))}}},{key:\"getAnchorDelta\",value:function(e,t,r){var n=this.getStyle(\"text-anchor\").getString(\"start\");if(\"start\"!==n){for(var o=t.children,s=o.length,i=null,a=0,A=r;A\u003Cs&&(i=o[A],!(A>r&&i.getAttribute(\"x\").hasValue()||i.getAttribute(\"text-anchor\").hasValue()));A++)a+=i.measureTextRecursive(e);return-1*(\"end\"===n?a:a\u002F2)}return 0}},{key:\"adjustChildCoordinates\",value:function(e,t,r,n){var o=r.children[n];if(\"function\"!=typeof o.measureText)return o;e.save(),o.setContext(e,!0);var s=o.getAttribute(\"x\"),i=o.getAttribute(\"y\"),a=o.getAttribute(\"dx\"),A=o.getAttribute(\"dy\"),u=o.getAttribute(\"text-anchor\").getString(\"start\");if(0===n&&\"textNode\"!==o.type&&(s.hasValue()||s.setValue(t.getAttribute(\"x\").getValue(\"0\")),i.hasValue()||i.setValue(t.getAttribute(\"y\").getValue(\"0\")),a.hasValue()||a.setValue(t.getAttribute(\"dx\").getValue(\"0\")),A.hasValue()||A.setValue(t.getAttribute(\"dy\").getValue(\"0\"))),s.hasValue()){if(o.x=s.getPixels(\"x\")+t.getAnchorDelta(e,r,n),\"start\"!==u){var c=o.measureTextRecursive(e);o.x+=-1*(\"end\"===u?c:c\u002F2)}a.hasValue()&&(o.x+=a.getPixels(\"x\"))}else{if(\"start\"!==u){var l=o.measureTextRecursive(e);t.x+=-1*(\"end\"===u?l:l\u002F2)}a.hasValue()&&(t.x+=a.getPixels(\"x\")),o.x=t.x}return t.x=o.x+o.measureText(e),i.hasValue()?(o.y=i.getPixels(\"y\"),A.hasValue()&&(o.y+=A.getPixels(\"y\"))):(A.hasValue()&&(t.y+=A.getPixels(\"y\")),o.y=t.y),t.y=o.y,o.clearContext(e),e.restore(),o}},{key:\"getChildBoundingBox\",value:function(e,t,r,n){var o,s=this.adjustChildCoordinates(e,t,r,n);if(\"function\"!=typeof s.getBoundingBox)return null;var i=s.getBoundingBox(e);return i?(g()(o=s.children).call(o,(function(r,n){var o=t.getChildBoundingBox(e,t,s,n);i.addBoundingBox(o)})),i):null}},{key:\"renderChild\",value:function(e,t,r,n){var o,s=this.adjustChildCoordinates(e,t,r,n);s.render(e),g()(o=s.children).call(o,(function(r,n){t.renderChild(e,t,s,n)}))}},{key:\"measureTextRecursive\",value:function(e){var t;return H()(t=this.children).call(t,(function(t,r){return t+r.measureTextRecursive(e)}),this.measureText(e))}},{key:\"measureText\",value:function(e){var t=this.measureCache;if(~t)return t;var r=this.getText(),n=this.measureTargetText(e,r);return this.measureCache=n,n}},{key:\"measureTargetText\",value:function(e,t){if(!t.length)return 0;var r=this.parent,n=r.getStyle(\"font-family\").getDefinition();if(n){for(var o,s=this.getFontSize(),i=n.isRTL?ue()(o=t.split(\"\")).call(o).join(\"\"):t,a=Ke(r.getAttribute(\"dx\").getString()),A=i.length,u=0,c=0;c\u003CA;c++)u+=(this.getGlyph(n,i,c).horizAdvX||n.horizAdvX)*s\u002Fn.fontFace.unitsPerEm,void 0===a[c]||isNaN(a[c])||(u+=a[c]);return u}if(!e.measureText)return 10*t.length;e.save(),this.setContext(e,!0);var l=e.measureText(t).width;return this.clearContext(e),e.restore(),l}}]),o}(kt);var Mt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,(this instanceof o?this.constructor:void 0)===o||r)).type=\"tspan\",s.text=s.children.length>0?\"\":s.getTextFromNode(),s}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}}]),o}(Rt);var Dt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"textNode\",e}return o}(Mt);var Kt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e){var t;return(0,F.default)(this,o),(t=n.call(this,e.replace(\u002F[+-.]\\s+\u002Fg,\"-\").replace(\u002F[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*\u002Fg,\"\"))).control=null,t.start=null,t.current=null,t.command=null,t.commands=t.commands,t.i=-1,t.previousCommand=null,t.points=[],t.angles=[],t}return(0,U.default)(o,[{key:\"reset\",value:function(){this.i=-1,this.command=null,this.previousCommand=null,this.start=new mt(0,0),this.control=new mt(0,0),this.current=new mt(0,0),this.points=[],this.angles=[]}},{key:\"isEnd\",value:function(){return this.i>=this.commands.length-1}},{key:\"next\",value:function(){var e=this.commands[++this.i];return this.previousCommand=this.command,this.command=e,e}},{key:\"getPoint\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"x\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"y\",r=new mt(this.command[e],this.command[t]);return this.makeAbsolute(r)}},{key:\"getAsControlPoint\",value:function(e,t){var r=this.getPoint(e,t);return this.control=r,r}},{key:\"getAsCurrentPoint\",value:function(e,t){var r=this.getPoint(e,t);return this.current=r,r}},{key:\"getReflectedControlPoint\",value:function(){var e=this.previousCommand.type;if(e!==pe.SVGPathData.CURVE_TO&&e!==pe.SVGPathData.SMOOTH_CURVE_TO&&e!==pe.SVGPathData.QUAD_TO&&e!==pe.SVGPathData.SMOOTH_QUAD_TO)return this.current;var t=this.current,r=t.x,n=t.y,o=this.control,s=o.x,i=o.y;return new mt(2*r-s,2*n-i)}},{key:\"makeAbsolute\",value:function(e){if(this.command.relative){var t=this.current,r=t.x,n=t.y;e.x+=r,e.y+=n}return e}},{key:\"addMarker\",value:function(e,t,r){var n=this.points,o=this.angles;r&&o.length>0&&!o[o.length-1]&&(o[o.length-1]=n[n.length-1].angleTo(r)),this.addMarkerAngle(e,t?t.angleTo(e):null)}},{key:\"addMarkerAngle\",value:function(e,t){this.points.push(e),this.angles.push(t)}},{key:\"getMarkerPoints\",value:function(){return this.points}},{key:\"getMarkerAngles\",value:function(){for(var e=this.angles,t=e.length,r=0;r\u003Ct;r++)if(!e[r])for(var n=r+1;n\u003Ct;n++)if(e[n]){e[r]=e[n];break}return e}}]),o}(pe.SVGPathData);var zt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"path\",s.pathParser=null,s.pathParser=new Kt(s.getAttribute(\"d\").getString()),s}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.pathParser,r=new Ot;for(t.reset(),e&&e.beginPath();!t.isEnd();)switch(t.next().type){case Kt.MOVE_TO:this.pathM(e,r);break;case Kt.LINE_TO:this.pathL(e,r);break;case Kt.HORIZ_LINE_TO:this.pathH(e,r);break;case Kt.VERT_LINE_TO:this.pathV(e,r);break;case Kt.CURVE_TO:this.pathC(e,r);break;case Kt.SMOOTH_CURVE_TO:this.pathS(e,r);break;case Kt.QUAD_TO:this.pathQ(e,r);break;case Kt.SMOOTH_QUAD_TO:this.pathT(e,r);break;case Kt.ARC:this.pathA(e,r);break;case Kt.CLOSE_PATH:this.pathZ(e,r)}return r}},{key:\"getBoundingBox\",value:function(e){return this.path()}},{key:\"getMarkers\",value:function(){var e=this.pathParser,t=e.getMarkerPoints(),r=e.getMarkerAngles();return A()(t).call(t,(function(e,t){return[e,r[t]]}))}},{key:\"renderChildren\",value:function(e){this.path(e),this.document.screen.mouse.checkPath(this,e);var t=this.getStyle(\"fill-rule\");\"\"!==e.fillStyle&&(\"inherit\"!==t.getString(\"inherit\")?he()(e).call(e,t.getString()):he()(e).call(e)),\"\"!==e.strokeStyle&&e.stroke();var r=this.getMarkers();if(r){var n=r.length-1,o=this.getStyle(\"marker-start\"),s=this.getStyle(\"marker-mid\"),i=this.getStyle(\"marker-end\");if(o.isUrlDefinition()){var a=o.getDefinition(),A=(0,u.default)(r[0],2),c=A[0],l=A[1];a.render(e,c,l)}if(s.isUrlDefinition())for(var d=s.getDefinition(),f=1;f\u003Cn;f++){var h=(0,u.default)(r[f],2),p=h[0],m=h[1];d.render(e,p,m)}if(i.isUrlDefinition()){var g=i.getDefinition(),y=(0,u.default)(r[n],2),v=y[0],w=y[1];g.render(e,v,w)}}}},{key:\"pathM\",value:function(e,t){var r=this.pathParser,n=o.pathM(r).point,s=n.x,i=n.y;r.addMarker(n),t.addPoint(s,i),e&&e.moveTo(s,i)}},{key:\"pathL\",value:function(e,t){var r=this.pathParser,n=o.pathL(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathH\",value:function(e,t){var r=this.pathParser,n=o.pathH(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathV\",value:function(e,t){var r=this.pathParser,n=o.pathV(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathC\",value:function(e,t){var r=this.pathParser,n=o.pathC(r),s=n.current,i=n.point,a=n.controlPoint,A=n.currentPoint;r.addMarker(A,a,i),t.addBezierCurve(s.x,s.y,i.x,i.y,a.x,a.y,A.x,A.y),e&&e.bezierCurveTo(i.x,i.y,a.x,a.y,A.x,A.y)}},{key:\"pathS\",value:function(e,t){var r=this.pathParser,n=o.pathS(r),s=n.current,i=n.point,a=n.controlPoint,A=n.currentPoint;r.addMarker(A,a,i),t.addBezierCurve(s.x,s.y,i.x,i.y,a.x,a.y,A.x,A.y),e&&e.bezierCurveTo(i.x,i.y,a.x,a.y,A.x,A.y)}},{key:\"pathQ\",value:function(e,t){var r=this.pathParser,n=o.pathQ(r),s=n.current,i=n.controlPoint,a=n.currentPoint;r.addMarker(a,i,i),t.addQuadraticCurve(s.x,s.y,i.x,i.y,a.x,a.y),e&&e.quadraticCurveTo(i.x,i.y,a.x,a.y)}},{key:\"pathT\",value:function(e,t){var r=this.pathParser,n=o.pathT(r),s=n.current,i=n.controlPoint,a=n.currentPoint;r.addMarker(a,i,i),t.addQuadraticCurve(s.x,s.y,i.x,i.y,a.x,a.y),e&&e.quadraticCurveTo(i.x,i.y,a.x,a.y)}},{key:\"pathA\",value:function(e,t){var r=this.pathParser,n=o.pathA(r),s=n.currentPoint,i=n.rX,a=n.rY,A=n.sweepFlag,u=n.xAxisRotation,c=n.centp,l=n.a1,d=n.ad,f=1-A?1:-1,h=l+f*(d\u002F2),p=new mt(c.x+i*Math.cos(h),c.y+a*Math.sin(h));if(r.addMarkerAngle(p,h-f*Math.PI\u002F2),r.addMarkerAngle(s,h-f*Math.PI),t.addPoint(s.x,s.y),e&&!isNaN(l)&&!isNaN(d)){var m=i>a?i:a,g=i>a?1:i\u002Fa,y=i>a?a\u002Fi:1;e.translate(c.x,c.y),e.rotate(u),e.scale(g,y),e.arc(0,0,m,l,l+d,Boolean(1-A)),e.scale(1\u002Fg,1\u002Fy),e.rotate(-u),e.translate(-c.x,-c.y)}}},{key:\"pathZ\",value:function(e,t){o.pathZ(this.pathParser),e&&t.x1!==t.x2&&t.y1!==t.y2&&e.closePath()}}],[{key:\"pathM\",value:function(e){var t=e.getAsCurrentPoint();return e.start=e.current,{point:t}}},{key:\"pathL\",value:function(e){return{current:e.current,point:e.getAsCurrentPoint()}}},{key:\"pathH\",value:function(e){var t=e.current,r=e.command,n=new mt((r.relative?t.x:0)+r.x,t.y);return e.current=n,{current:t,point:n}}},{key:\"pathV\",value:function(e){var t=e.current,r=e.command,n=new mt(t.x,(r.relative?t.y:0)+r.y);return e.current=n,{current:t,point:n}}},{key:\"pathC\",value:function(e){return{current:e.current,point:e.getPoint(\"x1\",\"y1\"),controlPoint:e.getAsControlPoint(\"x2\",\"y2\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathS\",value:function(e){return{current:e.current,point:e.getReflectedControlPoint(),controlPoint:e.getAsControlPoint(\"x2\",\"y2\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathQ\",value:function(e){return{current:e.current,controlPoint:e.getAsControlPoint(\"x1\",\"y1\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathT\",value:function(e){var t=e.current,r=e.getReflectedControlPoint();return e.control=r,{current:t,controlPoint:r,currentPoint:e.getAsCurrentPoint()}}},{key:\"pathA\",value:function(e){var t=e.current,r=e.command,n=r.rX,o=r.rY,s=r.xRot,i=r.lArcFlag,a=r.sweepFlag,A=s*(Math.PI\u002F180),u=e.getAsCurrentPoint(),c=new mt(Math.cos(A)*(t.x-u.x)\u002F2+Math.sin(A)*(t.y-u.y)\u002F2,-Math.sin(A)*(t.x-u.x)\u002F2+Math.cos(A)*(t.y-u.y)\u002F2),l=Math.pow(c.x,2)\u002FMath.pow(n,2)+Math.pow(c.y,2)\u002FMath.pow(o,2);l>1&&(n*=Math.sqrt(l),o*=Math.sqrt(l));var d=(i===a?-1:1)*Math.sqrt((Math.pow(n,2)*Math.pow(o,2)-Math.pow(n,2)*Math.pow(c.y,2)-Math.pow(o,2)*Math.pow(c.x,2))\u002F(Math.pow(n,2)*Math.pow(c.y,2)+Math.pow(o,2)*Math.pow(c.x,2)));isNaN(d)&&(d=0);var f=new mt(d*n*c.y\u002Fo,d*-o*c.x\u002Fn),h=new mt((t.x+u.x)\u002F2+Math.cos(A)*f.x-Math.sin(A)*f.y,(t.y+u.y)\u002F2+Math.sin(A)*f.x+Math.cos(A)*f.y),p=it([1,0],[(c.x-f.x)\u002Fn,(c.y-f.y)\u002Fo]),m=[(c.x-f.x)\u002Fn,(c.y-f.y)\u002Fo],g=[(-c.x-f.x)\u002Fn,(-c.y-f.y)\u002Fo],y=it(m,g);return st(m,g)\u003C=-1&&(y=Math.PI),st(m,g)>=1&&(y=0),{currentPoint:u,rX:n,rY:o,sweepFlag:a,xAxisRotation:A,centp:h,a1:p,ad:y}}},{key:\"pathZ\",value:function(e){e.current=e.start}}]),o}(kt);var Vt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"svg\",e.root=!1,e}return(0,U.default)(o,[{key:\"setContext\",value:function(e){var t=this.document,r=t.screen,n=t.window,s=e.canvas;if(r.setDefaults(e),s.style&&void 0!==e.font&&n&&void 0!==n.getComputedStyle){e.font=n.getComputedStyle(s).getPropertyValue(\"font\");var i=new ht(t,\"fontSize\",Pt.parse(e.font).fontSize);i.hasValue()&&(t.rootEmSize=i.getPixels(\"y\"),t.emSize=t.rootEmSize)}this.getAttribute(\"x\").hasValue()||this.getAttribute(\"x\",!0).setValue(0),this.getAttribute(\"y\").hasValue()||this.getAttribute(\"y\",!0).setValue(0);var a=r.viewPort,A=a.width,u=a.height;this.getStyle(\"width\").hasValue()||this.getStyle(\"width\",!0).setValue(\"100%\"),this.getStyle(\"height\").hasValue()||this.getStyle(\"height\",!0).setValue(\"100%\"),this.getStyle(\"color\").hasValue()||this.getStyle(\"color\",!0).setValue(\"black\");var c=this.getAttribute(\"refX\"),l=this.getAttribute(\"refY\"),d=this.getAttribute(\"viewBox\"),f=d.hasValue()?Ke(d.getString()):null,h=!this.root&&\"visible\"!==this.getStyle(\"overflow\").getValue(\"hidden\"),p=0,m=0,g=0,y=0;f&&(p=f[0],m=f[1]),this.root||(A=this.getStyle(\"width\").getPixels(\"x\"),u=this.getStyle(\"height\").getPixels(\"y\"),\"marker\"===this.type&&(g=p,y=m,p=0,m=0)),r.viewPort.setCurrent(A,u),this.node&&this.getStyle(\"transform\",!1,!0).hasValue()&&!this.getStyle(\"transform-origin\",!1,!0).hasValue()&&this.getStyle(\"transform-origin\",!0,!0).setValue(\"50% 50%\"),(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e),e.translate(this.getAttribute(\"x\").getPixels(\"x\"),this.getAttribute(\"y\").getPixels(\"y\")),f&&(A=f[2],u=f[3]),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:r.viewPort.width,desiredWidth:A,height:r.viewPort.height,desiredHeight:u,minX:p,minY:m,refX:c.getValue(),refY:l.getValue(),clip:h,clipX:g,clipY:y}),f&&(r.viewPort.removeCurrent(),r.viewPort.setCurrent(A,u))}},{key:\"clearContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"clearContext\",this).call(this,e),this.document.screen.viewPort.removeCurrent()}},{key:\"resize\",value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.getAttribute(\"width\",!0),s=this.getAttribute(\"height\",!0),i=this.getAttribute(\"viewBox\"),a=this.getAttribute(\"style\"),A=o.getNumber(0),u=s.getNumber(0);if(n)if(\"string\"==typeof n)this.getAttribute(\"preserveAspectRatio\",!0).setValue(n);else{var c=this.getAttribute(\"preserveAspectRatio\");c.hasValue()&&c.setValue(c.getString().replace(\u002F^\\s*(\\S.*\\S)\\s*$\u002F,\"$1\"))}if(o.setValue(e),s.setValue(r),i.hasValue()||i.setValue(L()(t=\"0 0 \".concat(A||e,\" \")).call(t,u||r)),a.hasValue()){var l=this.getStyle(\"width\"),d=this.getStyle(\"height\");l.hasValue()&&l.setValue(\"\".concat(e,\"px\")),d.hasValue()&&d.setValue(\"\".concat(r,\"px\"))}}}]),o}(kt);var qt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"rect\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.getAttribute(\"x\").getPixels(\"x\"),r=this.getAttribute(\"y\").getPixels(\"y\"),n=this.getStyle(\"width\",!1,!0).getPixels(\"x\"),o=this.getStyle(\"height\",!1,!0).getPixels(\"y\"),s=this.getAttribute(\"rx\"),i=this.getAttribute(\"ry\"),a=s.getPixels(\"x\"),A=i.getPixels(\"y\");if(s.hasValue()&&!i.hasValue()&&(A=a),i.hasValue()&&!s.hasValue()&&(a=A),a=Math.min(a,n\u002F2),A=Math.min(A,o\u002F2),e){var u=(Math.sqrt(2)-1)\u002F3*4;e.beginPath(),o>0&&n>0&&(e.moveTo(t+a,r),e.lineTo(t+n-a,r),e.bezierCurveTo(t+n-a+u*a,r,t+n,r+A-u*A,t+n,r+A),e.lineTo(t+n,r+o-A),e.bezierCurveTo(t+n,r+o-A+u*A,t+n-a+u*a,r+o,t+n-a,r+o),e.lineTo(t+a,r+o),e.bezierCurveTo(t+a-u*a,r+o,t,r+o-A+u*A,t,r+o-A),e.lineTo(t,r+A),e.bezierCurveTo(t,r+A-u*A,t+a-u*a,r,t+a,r),e.closePath())}return new Ot(t,r,t+n,r+o)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Gt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"circle\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.getAttribute(\"cx\").getPixels(\"x\"),r=this.getAttribute(\"cy\").getPixels(\"y\"),n=this.getAttribute(\"r\").getPixels();return e&&n>0&&(e.beginPath(),e.arc(t,r,n,0,2*Math.PI,!1),e.closePath()),new Ot(t-n,r-n,t+n,r+n)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Xt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"ellipse\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=(Math.sqrt(2)-1)\u002F3*4,r=this.getAttribute(\"rx\").getPixels(\"x\"),n=this.getAttribute(\"ry\").getPixels(\"y\"),o=this.getAttribute(\"cx\").getPixels(\"x\"),s=this.getAttribute(\"cy\").getPixels(\"y\");return e&&r>0&&n>0&&(e.beginPath(),e.moveTo(o+r,s),e.bezierCurveTo(o+r,s+t*n,o+t*r,s+n,o,s+n),e.bezierCurveTo(o-t*r,s+n,o-r,s+t*n,o-r,s),e.bezierCurveTo(o-r,s-t*n,o-t*r,s-n,o,s-n),e.bezierCurveTo(o+t*r,s-n,o+r,s-t*n,o+r,s),e.closePath()),new Ot(o-r,s-n,o+r,s+n)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Wt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"line\",e}return(0,U.default)(o,[{key:\"getPoints\",value:function(){return[new mt(this.getAttribute(\"x1\").getPixels(\"x\"),this.getAttribute(\"y1\").getPixels(\"y\")),new mt(this.getAttribute(\"x2\").getPixels(\"x\"),this.getAttribute(\"y2\").getPixels(\"y\"))]}},{key:\"path\",value:function(e){var t=this.getPoints(),r=(0,u.default)(t,2),n=r[0],o=n.x,s=n.y,i=r[1],a=i.x,A=i.y;return e&&(e.beginPath(),e.moveTo(o,s),e.lineTo(a,A)),new Ot(o,s,a,A)}},{key:\"getMarkers\",value:function(){var e=this.getPoints(),t=(0,u.default)(e,2),r=t[0],n=t[1],o=r.angleTo(n);return[[r,o],[n,o]]}}]),o}(zt);var Jt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"polyline\",s.points=[],s.points=mt.parsePath(s.getAttribute(\"points\").getString()),s}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.points,r=(0,u.default)(t,1)[0],n=r.x,o=r.y,s=new Ot(n,o);return e&&(e.beginPath(),e.moveTo(n,o)),g()(t).call(t,(function(t){var r=t.x,n=t.y;s.addPoint(r,n),e&&e.lineTo(r,n)})),s}},{key:\"getMarkers\",value:function(){var e=this.points,t=e.length-1,r=[];return g()(e).call(e,(function(n,o){o!==t&&r.push([n,n.angleTo(e[o+1])])})),r.length>0&&r.push([e[e.length-1],r[r.length-1][1]]),r}}]),o}(zt);var Yt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"polygon\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=(0,de.default)((0,ee.default)(o.prototype),\"path\",this).call(this,e),r=(0,u.default)(this.points,1)[0],n=r.x,s=r.y;return e&&(e.lineTo(n,s),e.closePath()),t}}]),o}(Jt);var Zt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"pattern\",e}return(0,U.default)(o,[{key:\"createPattern\",value:function(e,t,r){var n=this.getStyle(\"width\").getPixels(\"x\",!0),o=this.getStyle(\"height\").getPixels(\"y\",!0),s=new Vt(this.document,null);s.attributes.viewBox=new ht(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),s.attributes.width=new ht(this.document,\"width\",\"\".concat(n,\"px\")),s.attributes.height=new ht(this.document,\"height\",\"\".concat(o,\"px\")),s.attributes.transform=new ht(this.document,\"transform\",this.getAttribute(\"patternTransform\").getValue()),s.children=this.children;var i=this.document.createCanvas(n,o),a=i.getContext(\"2d\"),A=this.getAttribute(\"x\"),u=this.getAttribute(\"y\");A.hasValue()&&u.hasValue()&&a.translate(A.getPixels(\"x\",!0),u.getPixels(\"y\",!0)),r.hasValue()?this.styles[\"fill-opacity\"]=r:ge()(this.styles,\"fill-opacity\");for(var c=-1;c\u003C=1;c++)for(var l=-1;l\u003C=1;l++)a.save(),s.attributes.x=new ht(this.document,\"x\",c*i.width),s.attributes.y=new ht(this.document,\"y\",l*i.height),s.render(a),a.restore();return e.createPattern(i,\"repeat\")}}]),o}(St);var $t=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"marker\",e}return(0,U.default)(o,[{key:\"render\",value:function(e,t,r){if(t){var n=t.x,o=t.y,s=this.getAttribute(\"orient\").getValue(\"auto\"),i=this.getAttribute(\"markerUnits\").getValue(\"strokeWidth\");e.translate(n,o),\"auto\"===s&&e.rotate(r),\"strokeWidth\"===i&&e.scale(e.lineWidth,e.lineWidth),e.save();var a=new Vt(this.document,null);a.type=this.type,a.attributes.viewBox=new ht(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),a.attributes.refX=new ht(this.document,\"refX\",this.getAttribute(\"refX\").getValue()),a.attributes.refY=new ht(this.document,\"refY\",this.getAttribute(\"refY\").getValue()),a.attributes.width=new ht(this.document,\"width\",this.getAttribute(\"markerWidth\").getValue()),a.attributes.height=new ht(this.document,\"height\",this.getAttribute(\"markerHeight\").getValue()),a.attributes.overflow=new ht(this.document,\"overflow\",this.getAttribute(\"overflow\").getValue()),a.attributes.fill=new ht(this.document,\"fill\",this.getAttribute(\"fill\").getColor(\"black\")),a.attributes.stroke=new ht(this.document,\"stroke\",this.getAttribute(\"stroke\").getValue(\"none\")),a.children=this.children,a.render(e),e.restore(),\"strokeWidth\"===i&&e.scale(1\u002Fe.lineWidth,1\u002Fe.lineWidth),\"auto\"===s&&e.rotate(-r),e.translate(-n,-o)}}}]),o}(St);var er=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"defs\",e}return(0,U.default)(o,[{key:\"render\",value:function(){}}]),o}(St);var tr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"g\",e}return(0,U.default)(o,[{key:\"getBoundingBox\",value:function(e){var t,r=new Ot;return g()(t=this.children).call(t,(function(t){r.addBoundingBox(t.getBoundingBox(e))})),r}}]),o}(kt);var rr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).attributesToInherit=[\"gradientUnits\"],s.stops=[];var i=(0,ye.default)(s),a=i.stops,A=i.children;return g()(A).call(A,(function(e){\"stop\"===e.type&&a.push(e)})),s}return(0,U.default)(o,[{key:\"getGradientUnits\",value:function(){return this.getAttribute(\"gradientUnits\").getString(\"objectBoundingBox\")}},{key:\"createGradient\",value:function(e,t,r){var n=this,o=this;this.getHrefAttribute().hasValue()&&(o=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(o));var s=o.stops,i=this.getGradient(e,t);if(!i)return this.addParentOpacity(r,s[s.length-1].color);if(g()(s).call(s,(function(e){i.addColorStop(e.offset,n.addParentOpacity(r,e.color))})),this.getAttribute(\"gradientTransform\").hasValue()){var a=this.document,A=a.screen,c=A.MAX_VIRTUAL_PIXELS,l=A.viewPort,d=(0,u.default)(l.viewPorts,1)[0],f=new qt(a,null);f.attributes.x=new ht(a,\"x\",-c\u002F3),f.attributes.y=new ht(a,\"y\",-c\u002F3),f.attributes.width=new ht(a,\"width\",c),f.attributes.height=new ht(a,\"height\",c);var h=new tr(a,null);h.attributes.transform=new ht(a,\"transform\",this.getAttribute(\"gradientTransform\").getValue()),h.children=[f];var p=new Vt(a,null);p.attributes.x=new ht(a,\"x\",0),p.attributes.y=new ht(a,\"y\",0),p.attributes.width=new ht(a,\"width\",d.width),p.attributes.height=new ht(a,\"height\",d.height),p.children=[h];var m=a.createCanvas(d.width,d.height),y=m.getContext(\"2d\");return y.fillStyle=i,p.render(y),y.createPattern(m,\"no-repeat\")}return i}},{key:\"inheritStopContainer\",value:function(e){var t,r=this;g()(t=this.attributesToInherit).call(t,(function(t){!r.getAttribute(t).hasValue()&&e.getAttribute(t).hasValue()&&r.getAttribute(t,!0).setValue(e.getAttribute(t).getValue())}))}},{key:\"addParentOpacity\",value:function(e,t){return e.hasValue()?new ht(this.document,\"color\",t).addOpacity(e).getColor():t}}]),o}(St);var nr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"linearGradient\",s.attributesToInherit.push(\"x1\",\"y1\",\"x2\",\"y2\"),s}return(0,U.default)(o,[{key:\"getGradient\",value:function(e,t){var r=\"objectBoundingBox\"===this.getGradientUnits(),n=r?t.getBoundingBox(e):null;if(r&&!n)return null;this.getAttribute(\"x1\").hasValue()||this.getAttribute(\"y1\").hasValue()||this.getAttribute(\"x2\").hasValue()||this.getAttribute(\"y2\").hasValue()||(this.getAttribute(\"x1\",!0).setValue(0),this.getAttribute(\"y1\",!0).setValue(0),this.getAttribute(\"x2\",!0).setValue(1),this.getAttribute(\"y2\",!0).setValue(0));var o=r?n.x+n.width*this.getAttribute(\"x1\").getNumber():this.getAttribute(\"x1\").getPixels(\"x\"),s=r?n.y+n.height*this.getAttribute(\"y1\").getNumber():this.getAttribute(\"y1\").getPixels(\"y\"),i=r?n.x+n.width*this.getAttribute(\"x2\").getNumber():this.getAttribute(\"x2\").getPixels(\"x\"),a=r?n.y+n.height*this.getAttribute(\"y2\").getNumber():this.getAttribute(\"y2\").getPixels(\"y\");return o===i&&s===a?null:e.createLinearGradient(o,s,i,a)}}]),o}(rr);var or=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"radialGradient\",s.attributesToInherit.push(\"cx\",\"cy\",\"r\",\"fx\",\"fy\",\"fr\"),s}return(0,U.default)(o,[{key:\"getGradient\",value:function(e,t){var r=\"objectBoundingBox\"===this.getGradientUnits(),n=t.getBoundingBox(e);if(r&&!n)return null;this.getAttribute(\"cx\").hasValue()||this.getAttribute(\"cx\",!0).setValue(\"50%\"),this.getAttribute(\"cy\").hasValue()||this.getAttribute(\"cy\",!0).setValue(\"50%\"),this.getAttribute(\"r\").hasValue()||this.getAttribute(\"r\",!0).setValue(\"50%\");var o=r?n.x+n.width*this.getAttribute(\"cx\").getNumber():this.getAttribute(\"cx\").getPixels(\"x\"),s=r?n.y+n.height*this.getAttribute(\"cy\").getNumber():this.getAttribute(\"cy\").getPixels(\"y\"),i=o,a=s;this.getAttribute(\"fx\").hasValue()&&(i=r?n.x+n.width*this.getAttribute(\"fx\").getNumber():this.getAttribute(\"fx\").getPixels(\"x\")),this.getAttribute(\"fy\").hasValue()&&(a=r?n.y+n.height*this.getAttribute(\"fy\").getNumber():this.getAttribute(\"fy\").getPixels(\"y\"));var A=r?(n.width+n.height)\u002F2*this.getAttribute(\"r\").getNumber():this.getAttribute(\"r\").getPixels(),u=this.getAttribute(\"fr\").getPixels();return e.createRadialGradient(i,a,u,o,s,A)}}]),o}(rr);var sr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"stop\";var i=Math.max(0,Math.min(1,s.getAttribute(\"offset\").getNumber())),a=s.getStyle(\"stop-opacity\"),A=s.getStyle(\"stop-color\",!0);return\"\"===A.getString()&&A.setValue(\"#000\"),a.hasValue()&&(A=A.addOpacity(a)),s.offset=i,s.color=A.getColor(),s}return o}(St);var ir=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"animate\",s.duration=0,s.initialValue=null,s.initialUnits=\"\",s.removed=!1,s.frozen=!1,e.screen.animations.push((0,ye.default)(s)),s.begin=s.getAttribute(\"begin\").getMilliseconds(),s.maxDuration=s.begin+s.getAttribute(\"dur\").getMilliseconds(),s.from=s.getAttribute(\"from\"),s.to=s.getAttribute(\"to\"),s.values=s.getAttribute(\"values\"),we()(s).hasValue()&&we()(s).setValue(we()(s).getString().split(\";\")),s}return(0,U.default)(o,[{key:\"getProperty\",value:function(){var e=this.getAttribute(\"attributeType\").getString(),t=this.getAttribute(\"attributeName\").getString();return\"CSS\"===e?this.parent.getStyle(t,!0):this.parent.getAttribute(t,!0)}},{key:\"calcValue\",value:function(){var e,t=this.initialUnits,r=this.getProgress(),n=r.progress,o=r.from,s=r.to,i=o.getNumber()+(s.getNumber()-o.getNumber())*n;return\"%\"===t&&(i*=100),L()(e=\"\".concat(i)).call(e,t)}},{key:\"update\",value:function(e){var t=this.parent,r=this.getProperty();if(this.initialValue||(this.initialValue=r.getString(),this.initialUnits=r.getUnits()),this.duration>this.maxDuration){var n=this.getAttribute(\"fill\").getString(\"remove\");if(\"indefinite\"===this.getAttribute(\"repeatCount\").getString()||\"indefinite\"===this.getAttribute(\"repeatDur\").getString())this.duration=0;else if(\"freeze\"!==n||this.frozen){if(\"remove\"===n&&!this.removed)return this.removed=!0,r.setValue(t.animationFrozen?t.animationFrozenValue:this.initialValue),!0}else this.frozen=!0,t.animationFrozen=!0,t.animationFrozenValue=r.getString();return!1}this.duration+=e;var o=!1;if(this.begin\u003Cthis.duration){var s=this.calcValue(),i=this.getAttribute(\"type\");if(i.hasValue()){var a,A=i.getString();s=L()(a=\"\".concat(A,\"(\")).call(a,s,\")\")}r.setValue(s),o=!0}return o}},{key:\"getProgress\",value:function(){var e=this.document,t=we()(this),r={progress:(this.duration-this.begin)\u002F(this.maxDuration-this.begin)};if(t.hasValue()){var n=r.progress*(t.getValue().length-1),o=Math.floor(n),s=Math.ceil(n);r.from=new ht(e,\"from\",i()(t.getValue()[o])),r.to=new ht(e,\"to\",i()(t.getValue()[s])),r.progress=(n-o)\u002F(s-o)}else r.from=this.from,r.to=this.to;return r}}]),o}(St);var ar=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"animateColor\",e}return(0,U.default)(o,[{key:\"calcValue\",value:function(){var e=this.getProgress(),t=e.progress,r=e.from,n=e.to,o=new(W())(r.getColor()),s=new(W())(n.getColor());if(o.ok&&s.ok){var i,a,A=o.r+(s.r-o.r)*t,u=o.g+(s.g-o.g)*t,c=o.b+(s.b-o.b)*t;return L()(i=L()(a=\"rgb(\".concat(Be()(A,10),\", \")).call(a,Be()(u,10),\", \")).call(i,Be()(c,10),\")\")}return this.getAttribute(\"from\").getColor()}}]),o}(ir);var Ar=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"animateTransform\",e}return(0,U.default)(o,[{key:\"calcValue\",value:function(){var e=this.getProgress(),t=e.progress,r=e.from,n=e.to,o=Ke(r.getString()),s=Ke(n.getString());return A()(o).call(o,(function(e,r){return e+(s[r]-e)*t})).join(\" \")}}]),o}(ir);function ur(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}var cr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"font\",s.glyphs={},s.horizAdvX=s.getAttribute(\"horiz-adv-x\").getNumber();var i,a=e.definitions,A=function(e,t){var r;if(void 0===Fe()||null==Ne()(e)){if(xe()(e)||(r=function(e,t){var r;if(e){if(\"string\"==typeof e)return ur(e,t);var n=Se()(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?ae()(e):\"Arguments\"===n||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(n)?ur(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,i=!0,a=!1;return{s:function(){r=_e()(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==r.return||r.return()}finally{if(a)throw s}}}}((0,ye.default)(s).children);try{for(A.s();!(i=A.n()).done;){var u=i.value;switch(u.type){case\"font-face\":s.fontFace=u;var c=u.getStyle(\"font-family\");c.hasValue()&&(a[c.getString()]=(0,ye.default)(s));break;case\"missing-glyph\":s.missingGlyph=u;break;case\"glyph\":var l=u;l.arabicForm?(s.isRTL=!0,s.isArabic=!0,void 0===s.glyphs[l.unicode]&&(s.glyphs[l.unicode]={}),s.glyphs[l.unicode][l.arabicForm]=l):s.glyphs[l.unicode]=l}}}catch(e){A.e(e)}finally{A.f()}return s}return(0,U.default)(o,[{key:\"render\",value:function(){}}]),o}(St);var lr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"font-face\",s.ascent=s.getAttribute(\"ascent\").getNumber(),s.descent=s.getAttribute(\"descent\").getNumber(),s.unitsPerEm=s.getAttribute(\"units-per-em\").getNumber(),s}return o}(St);var dr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"missing-glyph\",e.horizAdvX=0,e}return o}(zt);var fr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"glyph\",s.horizAdvX=s.getAttribute(\"horiz-adv-x\").getNumber(),s.unicode=s.getAttribute(\"unicode\").getString(),s.arabicForm=s.getAttribute(\"arabic-form\").getString(),s}return o}(zt);var hr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"tref\",e}return(0,U.default)(o,[{key:\"getText\",value:function(){var e=this.getHrefAttribute().getDefinition();if(e){var t=e.children[0];if(t)return t.getText()}return\"\"}}]),o}(Rt);var pr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s,i;(0,F.default)(this,o),(i=n.call(this,e,t,r)).type=\"a\";var a=t.childNodes,A=a[0],u=a.length>0&&k()(s=ae()(a)).call(s,(function(e){return 3===e.nodeType}));return i.hasText=u,i.text=u?i.getTextFromNode(A):\"\",i}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}},{key:\"renderChildren\",value:function(e){if(this.hasText){(0,de.default)((0,ee.default)(o.prototype),\"renderChildren\",this).call(this,e);var t=this.document,r=this.x,n=this.y,s=t.screen.mouse,i=new ht(t,\"fontSize\",Pt.parse(t.ctx.font).fontSize);s.isWorking()&&s.checkBoundingBox(this,new Ot(r,n-i.getPixels(\"y\"),r+this.measureText(e),n))}else if(this.children.length>0){var a=new tr(this.document,null);a.children=this.children,a.parent=this,a.render(e)}}},{key:\"onClick\",value:function(){var e=this.document.window;e&&e.open(this.getHrefAttribute().getString())}},{key:\"onMouseMove\",value:function(){this.document.ctx.canvas.style.cursor=\"pointer\"}}]),o}(Rt);function mr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}function gr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function yr(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=gr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=gr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}var vr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"textPath\",s.textWidth=0,s.textHeight=0,s.pathLength=-1,s.glyphInfo=null,s.letterSpacingCache=[],s.measuresCache=new(Te())([[\"\",0]]);var i=s.getHrefAttribute().getDefinition();return s.text=s.getTextFromNode(),s.dataArray=s.parsePathData(i),s}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}},{key:\"path\",value:function(e){var t=this.dataArray;e&&e.beginPath(),g()(t).call(t,(function(t){var r=t.type,n=t.points;switch(r){case Kt.LINE_TO:e&&e.lineTo(n[0],n[1]);break;case Kt.MOVE_TO:e&&e.moveTo(n[0],n[1]);break;case Kt.CURVE_TO:e&&e.bezierCurveTo(n[0],n[1],n[2],n[3],n[4],n[5]);break;case Kt.QUAD_TO:e&&e.quadraticCurveTo(n[0],n[1],n[2],n[3]);break;case Kt.ARC:var o=(0,u.default)(n,8),s=o[0],i=o[1],a=o[2],A=o[3],c=o[4],l=o[5],d=o[6],f=o[7],h=a>A?a:A,p=a>A?1:a\u002FA,m=a>A?A\u002Fa:1;e&&(e.translate(s,i),e.rotate(d),e.scale(p,m),e.arc(0,0,h,c,c+l,Boolean(1-f)),e.scale(1\u002Fp,1\u002Fm),e.rotate(-d),e.translate(-s,-i));break;case Kt.CLOSE_PATH:e&&e.closePath()}}))}},{key:\"renderChildren\",value:function(e){this.setTextData(e),e.save();var t=this.parent.getStyle(\"text-decoration\").getString(),r=this.getFontSize(),n=this.glyphInfo,o=e.fillStyle;\"underline\"===t&&e.beginPath(),g()(n).call(n,(function(n,o){var s=n.p0,i=n.p1,a=n.rotation,A=n.text;e.save(),e.translate(s.x,s.y),e.rotate(a),e.fillStyle&&e.fillText(A,0,0),e.strokeStyle&&e.strokeText(A,0,0),e.restore(),\"underline\"===t&&(0===o&&e.moveTo(s.x,s.y+r\u002F8),e.lineTo(i.x,i.y+r\u002F5))})),\"underline\"===t&&(e.lineWidth=r\u002F20,e.strokeStyle=o,e.stroke(),e.closePath()),e.restore()}},{key:\"getLetterSpacingAt\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.letterSpacingCache[e]||0}},{key:\"findSegmentToFitChar\",value:function(e,t,r,n,o,s,i,a,A){var u=s,c=this.measureText(e,a);\" \"===a&&\"justify\"===t&&r\u003Cn&&(c+=(n-r)\u002Fo),A>-1&&(u+=this.getLetterSpacingAt(A));var l=this.textHeight\u002F20,d=this.getEquidistantPointOnPath(u,l,0),f=this.getEquidistantPointOnPath(u+c,l,0),h={p0:d,p1:f},p=d&&f?Math.atan2(f.y-d.y,f.x-d.x):0;if(i){var m=Math.cos(Math.PI\u002F2+p)*i,g=Math.cos(-p)*i;h.p0=yr(yr({},d),{},{x:d.x+m,y:d.y+g}),h.p1=yr(yr({},f),{},{x:f.x+m,y:f.y+g})}return{offset:u+=c,segment:h,rotation:p}}},{key:\"measureText\",value:function(e,t){var r=this.measuresCache,n=t||this.getText();if(r.has(n))return r.get(n);var o=this.measureTargetText(e,n);return r.set(n,o),o}},{key:\"setTextData\",value:function(e){var t,r=this;if(!this.glyphInfo){var n=this.getText(),o=n.split(\"\"),s=n.split(\" \").length-1,i=A()(t=this.parent.getAttribute(\"dx\").split()).call(t,(function(e){return e.getPixels(\"x\")})),a=this.parent.getAttribute(\"dy\").getPixels(\"y\"),u=this.parent.getStyle(\"text-anchor\").getString(\"start\"),c=this.getStyle(\"letter-spacing\"),l=this.parent.getStyle(\"letter-spacing\"),d=0;c.hasValue()&&\"inherit\"!==c.getValue()?c.hasValue()&&\"initial\"!==c.getValue()&&\"unset\"!==c.getValue()&&(d=c.getPixels()):d=l.getPixels();var f=[],h=n.length;this.letterSpacingCache=f;for(var p=0;p\u003Ch;p++)f.push(void 0!==i[p]?i[p]:d);var m=H()(f).call(f,(function(e,t,r){return 0===r?0:e+t||0}),0),y=this.measureText(e),v=Math.max(y+m,0);this.textWidth=y,this.textHeight=this.getFontSize(),this.glyphInfo=[];var w=this.getPathLength(),b=this.getStyle(\"startOffset\").getNumber(0)*w,B=0;\"middle\"!==u&&\"center\"!==u||(B=-v\u002F2),\"end\"!==u&&\"right\"!==u||(B=-v),B+=b,g()(o).call(o,(function(t,n){var i=r.findSegmentToFitChar(e,u,v,w,s,B,a,t,n),A=i.offset,c=i.segment,l=i.rotation;B=A,c.p0&&c.p1&&r.glyphInfo.push({text:o[n],p0:c.p0,p1:c.p1,rotation:l})}))}}},{key:\"parsePathData\",value:function(e){if(this.pathLength=-1,!e)return[];var t=[],r=e.pathParser;for(r.reset();!r.isEnd();){var n=r.current,o=n?n.x:0,s=n?n.y:0,i=r.next(),a=i.type,A=[];switch(i.type){case Kt.MOVE_TO:this.pathM(r,A);break;case Kt.LINE_TO:a=this.pathL(r,A);break;case Kt.HORIZ_LINE_TO:a=this.pathH(r,A);break;case Kt.VERT_LINE_TO:a=this.pathV(r,A);break;case Kt.CURVE_TO:this.pathC(r,A);break;case Kt.SMOOTH_CURVE_TO:a=this.pathS(r,A);break;case Kt.QUAD_TO:this.pathQ(r,A);break;case Kt.SMOOTH_QUAD_TO:a=this.pathT(r,A);break;case Kt.ARC:A=this.pathA(r);break;case Kt.CLOSE_PATH:zt.pathZ(r)}i.type!==Kt.CLOSE_PATH?t.push({type:a,points:A,start:{x:o,y:s},pathLength:this.calcLength(o,s,a,A)}):t.push({type:Kt.CLOSE_PATH,points:[],pathLength:0})}return t}},{key:\"pathM\",value:function(e,t){var r=zt.pathM(e).point,n=r.x,o=r.y;t.push(n,o)}},{key:\"pathL\",value:function(e,t){var r=zt.pathL(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathH\",value:function(e,t){var r=zt.pathH(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathV\",value:function(e,t){var r=zt.pathV(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathC\",value:function(e,t){var r=zt.pathC(e),n=r.point,o=r.controlPoint,s=r.currentPoint;t.push(n.x,n.y,o.x,o.y,s.x,s.y)}},{key:\"pathS\",value:function(e,t){var r=zt.pathS(e),n=r.point,o=r.controlPoint,s=r.currentPoint;return t.push(n.x,n.y,o.x,o.y,s.x,s.y),Kt.CURVE_TO}},{key:\"pathQ\",value:function(e,t){var r=zt.pathQ(e),n=r.controlPoint,o=r.currentPoint;t.push(n.x,n.y,o.x,o.y)}},{key:\"pathT\",value:function(e,t){var r=zt.pathT(e),n=r.controlPoint,o=r.currentPoint;return t.push(n.x,n.y,o.x,o.y),Kt.QUAD_TO}},{key:\"pathA\",value:function(e){var t=zt.pathA(e),r=t.rX,n=t.rY,o=t.sweepFlag,s=t.xAxisRotation,i=t.centp,a=t.a1,A=t.ad;return 0===o&&A>0&&(A-=2*Math.PI),1===o&&A\u003C0&&(A+=2*Math.PI),[i.x,i.y,r,n,a,A,s,o]}},{key:\"calcLength\",value:function(e,t,r,n){var o=0,s=null,i=null,a=0;switch(r){case Kt.LINE_TO:return this.getLineLength(e,t,n[0],n[1]);case Kt.CURVE_TO:for(o=0,s=this.getPointOnCubicBezier(0,e,t,n[0],n[1],n[2],n[3],n[4],n[5]),a=.01;a\u003C=1;a+=.01)i=this.getPointOnCubicBezier(a,e,t,n[0],n[1],n[2],n[3],n[4],n[5]),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return o;case Kt.QUAD_TO:for(o=0,s=this.getPointOnQuadraticBezier(0,e,t,n[0],n[1],n[2],n[3]),a=.01;a\u003C=1;a+=.01)i=this.getPointOnQuadraticBezier(a,e,t,n[0],n[1],n[2],n[3]),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return o;case Kt.ARC:o=0;var A=n[4],u=n[5],c=n[4]+u,l=Math.PI\u002F180;if(Math.abs(A-c)\u003Cl&&(l=Math.abs(A-c)),s=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],A,0),u\u003C0)for(a=A-l;a>c;a-=l)i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],a,0),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;else for(a=A+l;a\u003Cc;a+=l)i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],a,0),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],c,0),o+this.getLineLength(s.x,s.y,i.x,i.y)}return 0}},{key:\"getPointOnLine\",value:function(e,t,r,n,o){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:t,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:r,a=(o-r)\u002F(n-t+nt),A=Math.sqrt(e*e\u002F(1+a*a));n\u003Ct&&(A*=-1);var u=a*A,c=null;if(n===t)c={x:s,y:i+u};else if((i-r)\u002F(s-t+nt)===a)c={x:s+A,y:i+u};else{var l=0,d=0,f=this.getLineLength(t,r,n,o);if(f\u003Cnt)return null;var h=(s-t)*(n-t)+(i-r)*(o-r);l=t+(h\u002F=f*f)*(n-t),d=r+h*(o-r);var p=this.getLineLength(s,i,l,d),m=Math.sqrt(e*e-p*p);A=Math.sqrt(m*m\u002F(1+a*a)),n\u003Ct&&(A*=-1),c={x:l+A,y:d+(u=a*A)}}return c}},{key:\"getPointOnPath\",value:function(e){var t=this.getPathLength(),r=0,n=null;if(e\u003C-5e-5||e-5e-5>t)return null;var o,s=function(e,t){var r;if(void 0===Fe()||null==Ne()(e)){if(xe()(e)||(r=function(e,t){var r;if(e){if(\"string\"==typeof e)return mr(e,t);var n=Se()(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?ae()(e):\"Arguments\"===n||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(n)?mr(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,i=!0,a=!1;return{s:function(){r=_e()(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==r.return||r.return()}finally{if(a)throw s}}}}(this.dataArray);try{for(s.s();!(o=s.n()).done;){var i=o.value;if(!i||!(i.pathLength\u003C5e-5||r+i.pathLength+5e-5\u003Ce)){var a=e-r,A=0;switch(i.type){case Kt.LINE_TO:n=this.getPointOnLine(a,i.start.x,i.start.y,i.points[0],i.points[1],i.start.x,i.start.y);break;case Kt.ARC:var u=i.points[4],c=i.points[5],l=i.points[4]+c;if(A=u+a\u002Fi.pathLength*c,c\u003C0&&A\u003Cl||c>=0&&A>l)break;n=this.getPointOnEllipticalArc(i.points[0],i.points[1],i.points[2],i.points[3],A,i.points[6]);break;case Kt.CURVE_TO:(A=a\u002Fi.pathLength)>1&&(A=1),n=this.getPointOnCubicBezier(A,i.start.x,i.start.y,i.points[0],i.points[1],i.points[2],i.points[3],i.points[4],i.points[5]);break;case Kt.QUAD_TO:(A=a\u002Fi.pathLength)>1&&(A=1),n=this.getPointOnQuadraticBezier(A,i.start.x,i.start.y,i.points[0],i.points[1],i.points[2],i.points[3])}if(n)return n;break}r+=i.pathLength}}catch(e){s.e(e)}finally{s.f()}return null}},{key:\"getLineLength\",value:function(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))}},{key:\"getPathLength\",value:function(){var e;return-1===this.pathLength&&(this.pathLength=H()(e=this.dataArray).call(e,(function(e,t){return t.pathLength>0?e+t.pathLength:e}),0)),this.pathLength}},{key:\"getPointOnCubicBezier\",value:function(e,t,r,n,o,s,i,a,A){return{x:a*at(e)+s*At(e)+n*ut(e)+t*ct(e),y:A*at(e)+i*At(e)+o*ut(e)+r*ct(e)}}},{key:\"getPointOnQuadraticBezier\",value:function(e,t,r,n,o,s,i){return{x:s*lt(e)+n*dt(e)+t*ft(e),y:i*lt(e)+o*dt(e)+r*ft(e)}}},{key:\"getPointOnEllipticalArc\",value:function(e,t,r,n,o,s){var i=Math.cos(s),a=Math.sin(s),A=r*Math.cos(o),u=n*Math.sin(o);return{x:e+(A*i-u*a),y:t+(A*a+u*i)}}},{key:\"buildEquidistantCache\",value:function(e,t){var r=this.getPathLength(),n=t||.25,o=e||r\u002F100;if(!this.equidistantCache||this.equidistantCache.step!==o||this.equidistantCache.precision!==n){this.equidistantCache={step:o,precision:n,points:[]};for(var s=0,i=0;i\u003C=r;i+=n){var a=this.getPointOnPath(i),A=this.getPointOnPath(i+n);a&&A&&(s+=this.getLineLength(a.x,a.y,A.x,A.y))>=o&&(this.equidistantCache.points.push({x:a.x,y:a.y,distance:i}),s-=o)}}}},{key:\"getEquidistantPointOnPath\",value:function(e,t,r){if(this.buildEquidistantCache(t,r),e\u003C0||e-this.getPathLength()>5e-5)return null;var n=Math.round(e\u002Fthis.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[n]||null}}]),o}(Rt);var wr=function(e){(0,Z.default)(i,e);var t,r,n,o,s=(n=i,o=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=(0,ee.default)(n);if(o){var r=(0,ee.default)(this).constructor;e=Y()(t,arguments,r)}else e=t.apply(this,arguments);return(0,$.default)(this,e)});function i(e,t,r){var n;(0,F.default)(this,i),(n=s.call(this,e,t,r)).type=\"image\",n.loaded=!1;var o=n.getHrefAttribute().getString();if(!o)return(0,$.default)(n);var a=\u002F\\.svg$\u002F.test(o);return e.images.push((0,ye.default)(n)),a?n.loadSvg(o):n.loadImage(o),n.isSvg=a,n}return(0,U.default)(i,[{key:\"loadImage\",value:(r=(0,N.default)(E().mark((function e(t){var r;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.document.createImage(t);case 3:r=e.sent,this.image=r,e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error('Error while loading image \"'.concat(t,'\":'),e.t0);case 10:this.loaded=!0;case 11:case\"end\":return e.stop()}}),e,this,[[0,7]])}))),function(e){return r.apply(this,arguments)})},{key:\"loadSvg\",value:(t=(0,N.default)(E().mark((function e(t){var r,n;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.document.fetch(t);case 3:return r=e.sent,e.next=6,r.text();case 6:n=e.sent,this.image=n,e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.error('Error while loading image \"'.concat(t,'\":'),e.t0);case 13:this.loaded=!0;case 14:case\"end\":return e.stop()}}),e,this,[[0,10]])}))),function(e){return t.apply(this,arguments)})},{key:\"renderChildren\",value:function(e){var t=this.document,r=this.image,n=this.loaded,o=this.getAttribute(\"x\").getPixels(\"x\"),s=this.getAttribute(\"y\").getPixels(\"y\"),i=this.getStyle(\"width\").getPixels(\"x\"),a=this.getStyle(\"height\").getPixels(\"y\");if(n&&r&&i&&a){if(e.save(),this.isSvg)t.canvg.forkString(e,this.image,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:o,offsetY:s,scaleWidth:i,scaleHeight:a}).render();else{var A=this.image;e.translate(o,s),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:i,desiredWidth:A.width,height:a,desiredHeight:A.height}),this.loaded&&(void 0===A.complete||A.complete)&&e.drawImage(A,0,0)}e.restore()}}},{key:\"getBoundingBox\",value:function(){var e=this.getAttribute(\"x\").getPixels(\"x\"),t=this.getAttribute(\"y\").getPixels(\"y\"),r=this.getStyle(\"width\").getPixels(\"x\"),n=this.getStyle(\"height\").getPixels(\"y\");return new Ot(e,t,e+r,t+n)}}]),i}(kt);var br=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"symbol\",e}return(0,U.default)(o,[{key:\"render\",value:function(e){}}]),o}(kt),Br=function(){function e(t){(0,F.default)(this,e),this.document=t,this.loaded=!1,t.fonts.push(this)}var t;return(0,U.default)(e,[{key:\"load\",value:(t=(0,N.default)(E().mark((function e(t,r){var n,o,s,i;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,o=this.document,e.next=4,o.canvg.parser.load(r);case 4:s=e.sent,i=s.getElementsByTagName(\"font\"),g()(n=ae()(i)).call(n,(function(e){var r=o.createElement(e);o.definitions[t]=r})),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(0),console.error('Error while loading font \"'.concat(r,'\":'),e.t0);case 12:this.loaded=!0;case 13:case\"end\":return e.stop()}}),e,this,[[0,9]])}))),function(e,r){return t.apply(this,arguments)})}]),e}();var jr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s,i;(0,F.default)(this,o),(i=n.call(this,e,t,r)).type=\"style\";var a=Re(A()(s=ae()(t.childNodes)).call(s,(function(e){return e.data})).join(\"\").replace(\u002F(\\\u002F\\*([^*]|[\\r\\n]|(\\*+([^*\\\u002F]|[\\r\\n])))*\\*+\\\u002F)|(^[\\s]*\\\u002F\\\u002F.*)\u002Fgm,\"\").replace(\u002F@import.*;\u002Fg,\"\")).split(\"}\");return g()(a).call(a,(function(t){var r=G()(t).call(t);if(r){var n=r.split(\"{\"),o=n[0].split(\",\"),s=n[1].split(\";\");g()(o).call(o,(function(t){var r=G()(t).call(t);if(r){var n=e.styles[r]||{};if(g()(s).call(s,(function(t){var r,o,s=le()(t).call(t,\":\"),i=G()(r=t.substr(0,s)).call(r),a=G()(o=t.substr(s+1,t.length-s)).call(o);i&&a&&(n[i]=new ht(e,i,a))})),e.styles[r]=n,e.stylesSpecificity[r]=rt(r),\"@font-face\"===r){var o=n[\"font-family\"].getString().replace(\u002F\"|'\u002Fg,\"\"),i=n.src.getString().split(\",\");g()(i).call(i,(function(t){if(le()(t).call(t,'format(\"svg\")')>0){var r=qe(t);r&&new Br(e).load(o,r)}}))}}}))}})),i}return o}(St);jr.parseExternalUrl=qe;var _r=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"use\",e}return(0,U.default)(o,[{key:\"setContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e);var t=this.getAttribute(\"x\"),r=this.getAttribute(\"y\");t.hasValue()&&e.translate(t.getPixels(\"x\"),0),r.hasValue()&&e.translate(0,r.getPixels(\"y\"))}},{key:\"path\",value:function(e){var t=this.element;t&&t.path(e)}},{key:\"renderChildren\",value:function(e){var t=this.document,r=this.element;if(r){var n=r;if(\"symbol\"===r.type&&((n=new Vt(t,null)).attributes.viewBox=new ht(t,\"viewBox\",r.getAttribute(\"viewBox\").getString()),n.attributes.preserveAspectRatio=new ht(t,\"preserveAspectRatio\",r.getAttribute(\"preserveAspectRatio\").getString()),n.attributes.overflow=new ht(t,\"overflow\",r.getAttribute(\"overflow\").getString()),n.children=r.children,r.styles.opacity=new ht(t,\"opacity\",this.calculateOpacity())),\"svg\"===n.type){var o=this.getStyle(\"width\",!1,!0),s=this.getStyle(\"height\",!1,!0);o.hasValue()&&(n.attributes.width=new ht(t,\"width\",o.getString())),s.hasValue()&&(n.attributes.height=new ht(t,\"height\",s.getString()))}var i=n.parent;n.parent=this,n.render(e),n.parent=i}}},{key:\"getBoundingBox\",value:function(e){var t=this.element;return t?t.getBoundingBox(e):null}},{key:\"elementTransform\",value:function(){var e=this.document,t=this.element;return Ut.fromElement(e,t)}},{key:\"element\",get:function(){return this._element||(this._element=this.getHrefAttribute().getDefinition()),this._element}}]),o}(kt);function Cr(e,t,r,n,o,s){return e[r*n*4+4*t+s]}function xr(e,t,r,n,o,s,i){e[r*n*4+4*t+s]=i}function Er(e,t,r){return e[t]*r}function Nr(e,t,r,n){return t+Math.cos(e)*r+Math.sin(e)*n}var Qr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feColorMatrix\";var i=Ke(s.getAttribute(\"values\").getString());switch(s.getAttribute(\"type\").getString(\"matrix\")){case\"saturate\":var a=i[0];i=[.213+.787*a,.715-.715*a,.072-.072*a,0,0,.213-.213*a,.715+.285*a,.072-.072*a,0,0,.213-.213*a,.715-.715*a,.072+.928*a,0,0,0,0,0,1,0,0,0,0,0,1];break;case\"hueRotate\":var A=i[0]*Math.PI\u002F180;i=[Nr(A,.213,.787,-.213),Nr(A,.715,-.715,-.715),Nr(A,.072,-.072,.928),0,0,Nr(A,.213,-.213,.143),Nr(A,.715,.285,.14),Nr(A,.072,-.072,-.283),0,0,Nr(A,.213,-.213,-.787),Nr(A,.715,-.715,.715),Nr(A,.072,.928,.072),0,0,0,0,0,1,0,0,0,0,0,1];break;case\"luminanceToAlpha\":i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.2125,.7154,.0721,0,0,0,0,0,0,1]}return s.matrix=i,s.includeOpacity=s.getAttribute(\"includeOpacity\").hasValue(),s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){for(var s=this.includeOpacity,i=this.matrix,a=e.getImageData(0,0,n,o),A=0;A\u003Co;A++)for(var u=0;u\u003Cn;u++){var c=Cr(a.data,u,A,n,0,0),l=Cr(a.data,u,A,n,0,1),d=Cr(a.data,u,A,n,0,2),f=Cr(a.data,u,A,n,0,3),h=Er(i,0,c)+Er(i,1,l)+Er(i,2,d)+Er(i,3,f)+Er(i,4,1),p=Er(i,5,c)+Er(i,6,l)+Er(i,7,d)+Er(i,8,f)+Er(i,9,1),m=Er(i,10,c)+Er(i,11,l)+Er(i,12,d)+Er(i,13,f)+Er(i,14,1),g=Er(i,15,c)+Er(i,16,l)+Er(i,17,d)+Er(i,18,f)+Er(i,19,1);s&&(h=p=m=0,g*=f\u002F255),xr(a.data,u,A,n,0,0,h),xr(a.data,u,A,n,0,1,p),xr(a.data,u,A,n,0,2,m),xr(a.data,u,A,n,0,3,g)}e.clearRect(0,0,n,o),e.putImageData(a,0,0)}}]),o}(St);var Fr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"mask\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t){var r=this.document,n=this.getAttribute(\"x\").getPixels(\"x\"),s=this.getAttribute(\"y\").getPixels(\"y\"),i=this.getStyle(\"width\").getPixels(\"x\"),a=this.getStyle(\"height\").getPixels(\"y\");if(!i&&!a){var A,u=new Ot;g()(A=this.children).call(A,(function(t){u.addBoundingBox(t.getBoundingBox(e))})),n=Math.floor(u.x1),s=Math.floor(u.y1),i=Math.floor(u.width),a=Math.floor(u.height)}var c=this.removeStyles(t,o.ignoreStyles),l=r.createCanvas(n+i,s+a),d=l.getContext(\"2d\");r.screen.setDefaults(d),this.renderChildren(d),new Qr(r,{nodeType:1,childNodes:[],attributes:[{nodeName:\"type\",value:\"luminanceToAlpha\"},{nodeName:\"includeOpacity\",value:\"true\"}]}).apply(d,0,0,n+i,s+a);var f=r.createCanvas(n+i,s+a),h=f.getContext(\"2d\");r.screen.setDefaults(h),t.render(h),h.globalCompositeOperation=\"destination-in\",h.fillStyle=d.createPattern(l,\"no-repeat\"),h.fillRect(0,0,n+i,s+a),e.fillStyle=h.createPattern(f,\"no-repeat\"),e.fillRect(0,0,n+i,s+a),this.restoreStyles(t,c)}},{key:\"render\",value:function(e){}}]),o}(St);Fr.ignoreStyles=[\"mask\",\"transform\",\"clip-path\"];var Ur=function(){},Sr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"clipPath\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e){var t,r=this.document,n=Oe()(e),o=e.beginPath,s=e.closePath;n&&(n.beginPath=Ur,n.closePath=Ur),Ie()(o,e,[]),g()(t=this.children).call(t,(function(t){if(void 0!==t.path){var o=void 0!==t.elementTransform?t.elementTransform():null;o||(o=Ut.fromElement(r,t)),o&&o.apply(e),t.path(e),n&&(n.closePath=s),o&&o.unapply(e)}})),Ie()(s,e,[]),e.clip(),n&&(n.beginPath=o,n.closePath=s)}},{key:\"render\",value:function(e){}}]),o}(St);var Lr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"filter\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t){var r=this.document,n=this.children,s=t.getBoundingBox(e);if(s){var i=0,a=0;g()(n).call(n,(function(e){var t=e.extraFilterDistance||0;i=Math.max(i,t),a=Math.max(a,t)}));var A=Math.floor(s.width),u=Math.floor(s.height),c=A+2*i,l=u+2*a;if(!(c\u003C1||l\u003C1)){var d=Math.floor(s.x),f=Math.floor(s.y),h=this.removeStyles(t,o.ignoreStyles),p=r.createCanvas(c,l),m=p.getContext(\"2d\");r.screen.setDefaults(m),m.translate(-d+i,-f+a),t.render(m),g()(n).call(n,(function(e){\"function\"==typeof e.apply&&e.apply(m,0,0,c,l)})),e.drawImage(p,0,0,c,l,d-i,f-a,c,l),this.restoreStyles(t,h)}}}},{key:\"render\",value:function(e){}}]),o}(St);Lr.ignoreStyles=[\"filter\",\"transform\",\"clip-path\"];var Tr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feDropShadow\",s.addStylesFromStyleDefinition(),s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Hr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"feMorphology\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Ir=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"feComposite\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Pr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feGaussianBlur\",s.blurRadius=Math.floor(s.getAttribute(\"stdDeviation\").getNumber()),s.extraFilterDistance=s.blurRadius,s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){var s=this.document,i=this.blurRadius,a=s.window?s.window.document.body:null,A=e.canvas;A.id=s.getUniqueId(),a&&(A.style.display=\"none\",a.appendChild(A)),(0,ke.canvasRGBA)(A,t,r,n,o,i),a&&a.removeChild(A)}}]),o}(St);var Or=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"title\",e}return o}(St);var kr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"desc\",e}return o}(St),Rr={svg:Vt,rect:qt,circle:Gt,ellipse:Xt,line:Wt,polyline:Jt,polygon:Yt,path:zt,pattern:Zt,marker:$t,defs:er,linearGradient:nr,radialGradient:or,stop:sr,animate:ir,animateColor:ar,animateTransform:Ar,font:cr,\"font-face\":lr,\"missing-glyph\":dr,glyph:fr,text:Rt,tspan:Mt,tref:hr,a:pr,textPath:vr,image:wr,g:tr,symbol:br,style:jr,use:_r,mask:Fr,clipPath:Sr,filter:Lr,feDropShadow:Tr,feMorphology:Hr,feComposite:Ir,feColorMatrix:Qr,feGaussianBlur:Pr,title:Or,desc:kr};function Mr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function Dr(){return(Dr=(0,N.default)(E().mark((function e(t){var r,n,o=arguments;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=o.length>1&&void 0!==o[1]&&o[1],n=document.createElement(\"img\"),r&&(n.crossOrigin=\"Anonymous\"),e.abrupt(\"return\",new(M())((function(e,r){n.onload=function(){e(n)},n.onerror=function(){r()},n.src=t})));case 4:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}var Kr=function(){function e(t){var r,n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=o.rootEmSize,i=void 0===s?12:s,a=o.emSize,A=void 0===a?12:a,u=o.createCanvas,c=void 0===u?e.createCanvas:u,l=o.createImage,d=void 0===l?e.createImage:l,f=o.anonymousCrossOrigin;(0,F.default)(this,e),this.canvg=t,this.definitions={},this.styles={},this.stylesSpecificity={},this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=t.screen,this.rootEmSize=i,this.emSize=A,this.createCanvas=c,this.createImage=this.bindCreateImage(d,f),this.screen.wait(K()(r=this.isImagesLoaded).call(r,this)),this.screen.wait(K()(n=this.isFontsLoaded).call(n,this))}return(0,U.default)(e,[{key:\"bindCreateImage\",value:function(e,t){return\"boolean\"==typeof t?function(r,n){return e(r,\"boolean\"==typeof n?n:t)}:e}},{key:\"popEmSize\",value:function(){this.emSizeStack.pop()}},{key:\"getUniqueId\",value:function(){return\"canvg\".concat(++this.uniqueId)}},{key:\"isImagesLoaded\",value:function(){var e;return k()(e=this.images).call(e,(function(e){return e.loaded}))}},{key:\"isFontsLoaded\",value:function(){var e;return k()(e=this.fonts).call(e,(function(e){return e.loaded}))}},{key:\"createDocumentElement\",value:function(e){var t=this.createElement(e.documentElement);return t.root=!0,t.addStylesFromStyleDefinition(),this.documentElement=t,t}},{key:\"createElement\",value:function(t){var r=t.nodeName.replace(\u002F^[^:]+:\u002F,\"\"),n=e.elementTypes[r];return void 0!==n?new n(this,t):new Lt(this,t)}},{key:\"createTextNode\",value:function(e){return new Dt(this,e)}},{key:\"setViewBox\",value:function(e){this.screen.setViewBox(function(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=Mr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=Mr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}({document:this},e))}},{key:\"window\",get:function(){return this.screen.window}},{key:\"fetch\",get:function(){return this.screen.fetch}},{key:\"ctx\",get:function(){return this.screen.ctx}},{key:\"emSize\",get:function(){var e=this.emSizeStack;return e[e.length-1]},set:function(e){this.emSizeStack.push(e)}}]),e}();function zr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function Vr(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=zr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=zr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}Kr.createCanvas=function(e,t){var r=document.createElement(\"canvas\");return r.width=e,r.height=t,r},Kr.createImage=function(e){return Dr.apply(this,arguments)},Kr.elementTypes=Rr;var qr=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,F.default)(this,e),this.parser=new jt(n),this.screen=new wt(t,n),this.options=n;var o=new Kr(this,n),s=o.createDocumentElement(r);this.document=o,this.documentElement=s}var t,r;return(0,U.default)(e,[{key:\"fork\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.from(t,r,Vr(Vr({},this.options),n))}},{key:\"forkString\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.fromString(t,r,Vr(Vr({},this.options),n))}},{key:\"ready\",value:function(){return this.screen.ready()}},{key:\"isReady\",value:function(){return this.screen.isReady()}},{key:\"render\",value:(r=(0,N.default)(E().mark((function e(){var t,r=arguments;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.length>0&&void 0!==r[0]?r[0]:{},this.start(Vr({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0},t)),e.next=4,this.ready();case 4:this.stop();case 5:case\"end\":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:\"start\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.documentElement,r=this.screen,n=this.options;r.start(t,Vr(Vr({enableRedraw:!0},n),e))}},{key:\"stop\",value:function(){this.screen.stop()}},{key:\"resize\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.documentElement.resize(e,t,r)}}],[{key:\"from\",value:(t=(0,N.default)(E().mark((function t(r,n){var o,s,i,a=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:{},s=new jt(o),t.next=4,s.parse(n);case 4:return i=t.sent,t.abrupt(\"return\",new e(r,i,o));case 6:case\"end\":return t.stop()}}),t)}))),function(e,r){return t.apply(this,arguments)})},{key:\"fromString\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=new jt(n),s=o.parseFromString(r);return new e(t,s,n)}}]),e}(),Gr=Object.freeze({__proto__:null,offscreen:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.DOMParser,r={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,createCanvas:function(e,t){return new OffscreenCanvas(e,t)},createImage:function(e){return(0,N.default)(E().mark((function t(){var r,n,o;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,fetch(e);case 2:return r=t.sent,t.next=5,r.blob();case 5:return n=t.sent,t.next=8,createImageBitmap(n);case 8:return o=t.sent,t.abrupt(\"return\",o);case 10:case\"end\":return t.stop()}}),t)})))()}};return\"undefined\"==typeof DOMParser&&void 0!==t||ge()(r,\"DOMParser\"),r},node:function(e){var t=e.DOMParser,r=e.canvas;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,fetch:e.fetch,createCanvas:r.createCanvas,createImage:r.loadImage}}});t.default=qr},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Array.from},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Array.isArray},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").concat},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").every},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").fill},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").filter},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").forEach},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").includes},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").indexOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").map},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").reduce},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").reverse},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").slice},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").some},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").values},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Date.now},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Function\").bind},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js\"),o=Function.prototype;e.exports=function(e){var t=e.bind;return e===o||e instanceof Function&&t===o.bind?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js\"),o=Array.prototype;e.exports=function(e){var t=e.concat;return e===o||e instanceof Array&&t===o.concat?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js\"),o=Array.prototype;e.exports=function(e){var t=e.every;return e===o||e instanceof Array&&t===o.every?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js\"),o=Array.prototype;e.exports=function(e){var t=e.fill;return e===o||e instanceof Array&&t===o.fill?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js\"),o=Array.prototype;e.exports=function(e){var t=e.filter;return e===o||e instanceof Array&&t===o.filter?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js\"),s=Array.prototype,i=String.prototype;e.exports=function(e){var t=e.includes;return e===s||e instanceof Array&&t===s.includes?n:\"string\"==typeof e||e===i||e instanceof String&&t===i.includes?o:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js\"),o=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===o||e instanceof Array&&t===o.indexOf?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js\"),o=Array.prototype;e.exports=function(e){var t=e.map;return e===o||e instanceof Array&&t===o.map?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js\"),o=Array.prototype;e.exports=function(e){var t=e.reduce;return e===o||e instanceof Array&&t===o.reduce?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js\"),o=Array.prototype;e.exports=function(e){var t=e.reverse;return e===o||e instanceof Array&&t===o.reverse?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js\"),o=Array.prototype;e.exports=function(e){var t=e.slice;return e===o||e instanceof Array&&t===o.slice?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js\"),o=Array.prototype;e.exports=function(e){var t=e.some;return e===o||e instanceof Array&&t===o.some?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js\"),o=String.prototype;e.exports=function(e){var t=e.startsWith;return\"string\"==typeof e||e===o||e instanceof String&&t===o.startsWith?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js\"),o=String.prototype;e.exports=function(e){var t=e.trim;return\"string\"==typeof e||e===o||e instanceof String&&t===o.trim?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Map},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object;e.exports=function(e,t){return n.create(e,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t){return n.defineProperties(e,t)};n.defineProperties.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t,r){return n.defineProperty(e,t,r)};n.defineProperty.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t){return n.getOwnPropertyDescriptor(e,t)};n.getOwnPropertyDescriptor.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getOwnPropertyDescriptors},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.keys},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.setPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.parseFloat},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.parseInt},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Promise},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.apply},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.construct},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.deleteProperty},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.getPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.get},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").includes},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").startsWith},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").trim},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Symbol},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\");e.exports=n.f(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js\"),e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js\"),e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\":function(e){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e)&&null!==e)throw TypeError(\"Can't set \"+String(e)+\" as a prototype\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\":function(e){e.exports=function(){}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\":function(e){e.exports=function(e,t,r){if(!(e instanceof t))throw TypeError(\"Incorrect \"+(r?r+\" \":\"\")+\"invocation\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\");e.exports=function(e){for(var t=n(this),r=s(t.length),i=arguments.length,a=o(i>1?arguments[1]:void 0,r),A=i>2?arguments[2]:void 0,u=void 0===A?r:o(A,r);u>a;)t[a++]=e;return t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"forEach\");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=function(e){var t,r,c,l,d,f,h=o(e),p=\"function\"==typeof this?this:Array,m=arguments.length,g=m>1?arguments[1]:void 0,y=void 0!==g,v=u(h),w=0;if(y&&(g=n(g,m>2?arguments[2]:void 0,2)),null==v||p==Array&&i(v))for(r=new p(t=a(h.length));t>w;w++)f=y?g(h[w],w):h[w],A(r,w,f);else for(d=(l=v.call(h)).next,r=new p;!(c=d.call(l)).done;w++)f=y?s(l,g,[c.value,w],!0):c.value,A(r,w,f);return r.length=w,r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),i=function(e){return function(t,r,i){var a,A=n(t),u=o(A.length),c=s(i,u);if(e&&r!=r){for(;u>c;)if((a=A[c++])!=a)return!0}else for(;u>c;c++)if((e||c in A)&&A[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\"),A=[].push,u=function(e){var t=1==e,r=2==e,u=3==e,c=4==e,l=6==e,d=7==e,f=5==e||l;return function(h,p,m,g){for(var y,v,w=s(h),b=o(w),B=n(p,m,3),j=i(b.length),_=0,C=g||a,x=t?C(h,j):r||d?C(h,0):void 0;j>_;_++)if((f||_ in b)&&(v=B(y=b[_],_,w),e))if(t)x[_]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return _;case 2:A.call(x,y)}else switch(e){case 4:return!1;case 7:A.call(x,y)}return l?-1:u||c?c:x}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterOut:u(7)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),i=o(\"species\");e.exports=function(e){return s>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=function(e){return function(t,r,a,A){n(r);var u=o(t),c=s(u),l=i(u.length),d=e?l-1:0,f=e?-1:1;if(a\u003C2)for(;;){if(d in c){A=c[d],d+=f;break}if(d+=f,e?d\u003C0:l\u003C=d)throw TypeError(\"Reduce of empty array with no initial value\")}for(;e?d>=0:l>d;d+=f)d in c&&(A=r(A,c[d],d,u));return A}};e.exports={left:a(!1),right:a(!0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e,t){var r;return o(e)&&(\"function\"!=typeof(r=e.constructor)||r!==Array&&!o(r.prototype)?n(r)&&null===(r=r[s])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===t?0:t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\");e.exports=function(e,t,r,s){try{return s?t(n(r)[0],r[1]):t(r)}catch(t){throw o(e),t}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"iterator\"),o=!1;try{var s=0,i={next:function(){return{done:!!s++}},return:function(){o=!0}};i[n]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var s={};s[n]=function(){return{next:function(){return{done:r=!0}}}},e(s)}catch(e){}return r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\":function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\"),i=\"Arguments\"==o(function(){return arguments}());e.exports=n?o:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),s))?r:i?o(t):\"Object\"==(n=o(t))&&\"function\"==typeof t.callee?\"Arguments\":n}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\").fastKey,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),h=f.set,p=f.getterFor;e.exports={getConstructor:function(e,t,r,u){var c=e((function(e,n){a(e,c,t),h(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),l||(e.size=0),null!=n&&A(n,e[u],{that:e,AS_ENTRIES:r})})),f=p(t),m=function(e,t,r){var n,o,s=f(e),i=g(e,t);return i?i.value=r:(s.last=i={index:o=d(t,!0),key:t,value:r,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=i),n&&(n.next=i),l?s.size++:e.size++,\"F\"!==o&&(s.index[o]=i)),e},g=function(e,t){var r,n=f(e),o=d(t);if(\"F\"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key==t)return r};return s(c.prototype,{clear:function(){for(var e=f(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,l?e.size=0:this.size=0},delete:function(e){var t=this,r=f(t),n=g(t,e);if(n){var o=n.next,s=n.previous;delete r.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),r.first==n&&(r.first=o),r.last==n&&(r.last=s),l?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=f(this),n=i(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),s(c.prototype,r?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),l&&n(c.prototype,\"size\",{get:function(){return f(this).size}}),c},setStrong:function(e,t,r){var n=t+\" Iterator\",o=p(t),s=p(n);u(e,t,(function(e,t){h(this,{type:n,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=s(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?\"keys\"==t?{value:r.key,done:!1}:\"values\"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?\"entries\":\"values\",!r,!0),c(t)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),m=p.set,g=p.getterFor;e.exports=function(e,t,r){var p,y=-1!==e.indexOf(\"Map\"),v=-1!==e.indexOf(\"Weak\"),w=y?\"set\":\"add\",b=o[e],B=b&&b.prototype,j={};if(h&&\"function\"==typeof b&&(v||B.forEach&&!i((function(){(new b).entries().next()})))){p=t((function(t,r){m(u(t,p,e),{type:e,collection:new b}),null!=r&&A(r,t[w],{that:t,AS_ENTRIES:y})}));var _=g(e);f([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(e){var t=\"add\"==e||\"set\"==e;!(e in B)||v&&\"clear\"==e||a(p.prototype,e,(function(r,n){var o=_(this).collection;if(!t&&v&&!c(r))return\"get\"==e&&void 0;var s=o[e](0===r?0:r,n);return t?this:s}))})),v||d(p.prototype,\"size\",{configurable:!0,get:function(){return _(this).collection.size}})}else p=r.getConstructor(t,e,y,w),s.REQUIRED=!0;return l(p,e,!1,!0),j[e]=p,n({global:!0,forced:!0},j),v||r.setStrong(p,e,y),p}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"match\");e.exports=function(e){var t=\u002F.\u002F;try{\"\u002F.\u002F\"[e](t)}catch(r){try{return t[n]=!1,\"\u002F.\u002F\"[e](t)}catch(e){}}return!1}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\").IteratorPrototype,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),A=function(){return this};e.exports=function(e,t,r){var u=t+\" Iterator\";return e.prototype=o(n,{next:s(1,r)}),i(e,u,!1,!0),a[u]=A,e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=n?function(e,t,r){return o.f(e,t,s(1,r))}:function(e,t,r){return e[t]=r,e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\":function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,s(0,r)):e[i]=r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\"),h=f.IteratorPrototype,p=f.BUGGY_SAFARI_ITERATORS,m=c(\"iterator\"),g=\"keys\",y=\"values\",v=\"entries\",w=function(){return this};e.exports=function(e,t,r,c,f,b,B){o(r,t,c);var j,_,C,x=function(e){if(e===f&&U)return U;if(!p&&e in Q)return Q[e];switch(e){case g:case y:case v:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+\" Iterator\",N=!1,Q=e.prototype,F=Q[m]||Q[\"@@iterator\"]||f&&Q[f],U=!p&&F||x(f),S=\"Array\"==t&&Q.entries||F;if(S&&(j=s(S.call(new e)),h!==Object.prototype&&j.next&&(l||s(j)===h||(i?i(j,h):\"function\"!=typeof j[m]&&A(j,m,w)),a(j,E,!0,!0),l&&(d[E]=w))),f==y&&F&&F.name!==y&&(N=!0,U=function(){return F.call(this)}),l&&!B||Q[m]===U||A(Q,m,U),d[t]=U,f)if(_={values:x(y),keys:b?U:x(g),entries:x(v)},B)for(C in _)(p||N||!(C in Q))&&u(Q,C,_[C]);else n({target:t,proto:!0,forced:p||N},_);return _}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=n.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js\":function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js\":function(e){e.exports=\"object\"==typeof window},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\");e.exports=\u002F(?:iphone|ipod|ipad).*applewebkit\u002Fi.test(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=\"process\"==n(o.process)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\");e.exports=\u002Fweb0s(?!.*chrome)\u002Fi.test(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"navigator\",\"userAgent\")||\"\"},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\":function(e,t,r){var n,o,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\"),a=s.process,A=a&&a.versions,u=A&&A.v8;u?o=(n=u.split(\".\"))[0]\u003C4?1:n[0]+n[1]:i&&(!(n=i.match(\u002FEdge\\\u002F(\\d+)\u002F))||n[1]>=74)&&(n=i.match(\u002FChrome\\\u002F(\\d+)\u002F))&&(o=n[1]),e.exports=o&&+o},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=function(e){return n[e+\"Prototype\"]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\":function(e){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),c=function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var r,l,d,f,h,p,m,g,y=e.target,v=e.global,w=e.stat,b=e.proto,B=v?n:w?n[y]:(n[y]||{}).prototype,j=v?i:i[y]||(i[y]={}),_=j.prototype;for(d in t)r=!s(v?d:y+(w?\".\":\"#\")+d,e.forced)&&B&&u(B,d),h=j[d],r&&(p=e.noTargetGet?(g=o(B,d))&&g.value:B[d]),f=r&&p?p:t[d],r&&typeof h==typeof f||(m=e.bind&&r?a(f,n):e.wrap&&r?c(f):b&&\"function\"==typeof f?a(Function.call,f):f,(e.sham||f&&f.sham||h&&h.sham)&&A(m,\"sham\",!0),j[d]=m,b&&(u(i,l=y+\"Prototype\")||A(i,l,{}),i[l][d]=f,e.real&&_&&!_[d]&&A(_,d,f)))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\":function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\");e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=[].slice,i={},a=function(e,t,r){if(!(t in i)){for(var n=[],o=0;o\u003Ct;o++)n[o]=\"a[\"+o+\"]\";i[t]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return i[t](e,r)};e.exports=Function.bind||function(e){var t=n(this),r=s.call(arguments,1),i=function(){var n=r.concat(s.call(arguments));return this instanceof i?a(t,n.length,n):t.apply(e,n)};return o(t.prototype)&&(i.prototype=t.prototype),i}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=function(e){return\"function\"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length\u003C2?s(n[e])||s(o[e]):n[e]&&n[e][t]||o[e]&&o[e][t]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"iterator\");e.exports=function(e){if(null!=e)return e[s]||e[\"@@iterator\"]||o[n(e)]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=function(e){var t=o(e);if(\"function\"!=typeof t)throw TypeError(String(e)+\" is not iterable\");return n(t.call(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\":function(e){var t=function(e){return e&&e.Math==Math&&e};e.exports=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof global&&global)||function(){return this}()||Function(\"return this\")()},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),o={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return o.call(n(e),t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=function(e,t){var r=n.console;r&&r.error&&(1===arguments.length?r.error(e):r.error(e,t))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"document\",\"documentElement\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\");e.exports=!n&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=\"\".split;e.exports=n((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?s.call(e,\"\"):Object(e)}:Object},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\"),o=Function.toString;\"function\"!=typeof n.inspectSource&&(n.inspectSource=function(e){return o.call(e)}),e.exports=n.inspectSource},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js\"),u=a(\"meta\"),c=0,l=Object.isExtensible||function(){return!0},d=function(e){i(e,u,{value:{objectID:\"O\"+c++,weakData:{}}})},f=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!o(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!s(e,u)){if(!l(e))return\"F\";if(!t)return\"E\";d(e)}return e[u].objectID},getWeakData:function(e,t){if(!s(e,u)){if(!l(e))return!0;if(!t)return!1;d(e)}return e[u].weakData},onFreeze:function(e){return A&&f.REQUIRED&&l(e)&&!s(e,u)&&d(e),e}};n[u]=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),h=\"Object already initialized\",p=a.WeakMap;if(i||l.state){var m=l.state||(l.state=new p),g=m.get,y=m.has,v=m.set;n=function(e,t){if(y.call(m,e))throw new TypeError(h);return t.facade=e,v.call(m,e,t),t},o=function(e){return g.call(m,e)||{}},s=function(e){return y.call(m,e)}}else{var w=d(\"state\");f[w]=!0,n=function(e,t){if(c(e,w))throw new TypeError(h);return t.facade=e,u(e,w,t),t},o=function(e){return c(e,w)?e[w]:{}},s=function(e){return c(e,w)}}e.exports={set:n,get:o,has:s,enforce:function(e){return s(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!A(t)||(r=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return r}}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),s=n(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[s]===e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\");e.exports=Array.isArray||function(e){return\"Array\"==n(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=\u002F#|\\.prototype\\.\u002F,s=function(e,t){var r=a[i(e)];return r==u||r!=A&&(\"function\"==typeof t?n(t):!!t)},i=s.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},a=s.data={},A=s.NATIVE=\"N\",u=s.POLYFILL=\"P\";e.exports=s},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\":function(e){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\":function(e){e.exports=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"match\");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[s])?!!t:\"RegExp\"==o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\"),u=function(e,t){this.stopped=e,this.result=t};e.exports=function(e,t,r){var c,l,d,f,h,p,m,g=r&&r.that,y=!(!r||!r.AS_ENTRIES),v=!(!r||!r.IS_ITERATOR),w=!(!r||!r.INTERRUPTED),b=i(t,g,1+y+w),B=function(e){return c&&A(c),new u(!0,e)},j=function(e){return y?(n(e),w?b(e[0],e[1],B):b(e[0],e[1])):w?b(e,B):b(e)};if(v)c=e;else{if(\"function\"!=typeof(l=a(e)))throw TypeError(\"Target is not iterable\");if(o(l)){for(d=0,f=s(e.length);f>d;d++)if((h=j(e[d]))&&h instanceof u)return h;return new u(!1)}c=l.call(e)}for(p=c.next;!(m=p.call(c)).done;){try{h=j(m.value)}catch(e){throw A(c),e}if(\"object\"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\");e.exports=function(e){var t=e.return;if(void 0!==t)return n(t.call(e)).value}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\":function(e,t,r){\"use strict\";var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),d=c(\"iterator\"),f=!1;[].keys&&(\"next\"in(s=[].keys())?(o=a(a(s)))!==Object.prototype&&(n=o):f=!0);var h=null==n||i((function(){var e={};return n[d].call(e)!==e}));h&&(n={}),l&&!h||u(n,d)||A(n,d,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js\":function(e,t,r){var n,o,s,i,a,A,u,c,l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\").set,h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),g=l.MutationObserver||l.WebKitMutationObserver,y=l.document,v=l.process,w=l.Promise,b=d(l,\"queueMicrotask\"),B=b&&b.value;B||(n=function(){var e,t;for(m&&(e=v.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?i():s=void 0,e}}s=void 0,e&&e.enter()},h||m||p||!g||!y?w&&w.resolve?((u=w.resolve(void 0)).constructor=w,c=u.then,i=function(){c.call(u,n)}):i=m?function(){v.nextTick(n)}:function(){f.call(l,n)}:(a=!0,A=y.createTextNode(\"\"),new g(n).observe(A,{characterData:!0}),i=function(){A.data=a=!a})),e.exports=B||function(e){var t={fn:e,next:void 0};s&&(s.next=t),o||(o=t,i()),s=t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=n.Promise},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n\u003C41}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\"),s=n.WeakMap;e.exports=\"function\"==typeof s&&\u002Fnative code\u002F.test(o(s))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new o(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js\");e.exports=function(e){if(n(e))throw TypeError(\"The method doesn't accept regular expressions\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\"),i=n.parseFloat,a=1\u002Fi(s+\"-0\")!=-1\u002F0;e.exports=a?function(e){var t=o(String(e)),r=i(t);return 0===r&&\"-\"==t.charAt(0)?-0:r}:i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\"),i=n.parseInt,a=\u002F^[+-]?0[Xx]\u002F,A=8!==i(s+\"08\")||22!==i(s+\"0x16\");e.exports=A?function(e,t){var r=o(String(e));return i(r,t>>>0||(a.test(r)?16:10))}:i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\":function(e,t,r){var n,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\")(\"IE_PROTO\"),l=function(){},d=function(e){return\"\u003Cscript>\"+e+\"\u003C\\\u002Fscript>\"},f=function(){try{n=document.domain&&new ActiveXObject(\"htmlfile\")}catch(e){}var e,t;f=n?function(e){e.write(d(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t}(n):((t=u(\"iframe\")).style.display=\"none\",A.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(d(\"document.F=Object\")),e.close(),e.F);for(var r=i.length;r--;)delete f.prototype[i[r]];return f()};a[c]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(l.prototype=o(e),r=new l,l.prototype=null,r[c]=e):r=f(),void 0===t?r:s(r,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\");e.exports=n?Object.defineProperties:function(e,t){s(e);for(var r,n=i(t),a=n.length,A=0;a>A;)o.f(e,r=n[A++],t[r]);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),a=Object.defineProperty;t.f=n?a:function(e,t,r){if(s(e),t=i(t,!0),s(r),o)try{return a(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\"),c=Object.getOwnPropertyDescriptor;t.f=n?c:function(e,t){if(e=i(e),t=a(t,!0),u)try{return c(e,t)}catch(e){}if(A(e,t))return s(!o.f.call(e,t),e[t])}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\").f,s={}.toString,i=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&\"[object Window]\"==s.call(e)?function(e){try{return o(e)}catch(e){return i.slice()}}(e):o(n(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\").concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\"),a=s(\"IE_PROTO\"),A=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=o(e),n(e,a)?e[a]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?A:null}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").indexOf,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\");e.exports=function(e,t){var r,a=o(e),A=0,u=[];for(r in a)!n(i,r)&&n(a,r)&&u.push(r);for(;t.length>A;)n(a,r=t[A++])&&(~s(u,r)||u.push(r));return u}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\");e.exports=Object.keys||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\":function(e,t){\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);t.f=o?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,s){return n(r),o(s),t?e.call(r,s):r.__proto__=s,r}}():void 0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\");e.exports=n?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\");e.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(i(e)),r=s.f;return r?t.concat(r(e)):t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\":function(e){e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\");e.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=s.f(e);return(0,r.resolve)(t),r.promise}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\");e.exports=function(e,t,r){for(var o in t)r&&r.unsafe&&e[o]?e[o]=t[o]:n(e,o,t[o],r);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\");e.exports=function(e,t,r,o){o&&o.enumerable?e[t]=r:n(e,t,r)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\":function(e){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\");e.exports=function(e,t){try{o(n,e,t)}catch(r){n[e]=t}return t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),a=s(\"species\");e.exports=function(e){var t=n(e),r=o.f;i&&t&&!t[a]&&r(t,a,{configurable:!0,get:function(){return this}})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");e.exports=function(e,t,r,u){if(e){var c=r?e:e.prototype;i(c,A)||o(c,A,{configurable:!0,value:t}),u&&!n&&s(c,\"toString\",a)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),s=n(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js\"),s=\"__core-js_shared__\",i=n[s]||o(s,{});e.exports=i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\");(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.15.2\",mode:n?\"pure\":\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e,t){var r,i=n(e).constructor;return void 0===i||null==(r=n(i)[s])?t:o(r)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),s=function(e){return function(t,r){var s,i,a=String(o(t)),A=n(r),u=a.length;return A\u003C0||A>=u?e?\"\":void 0:(s=a.charCodeAt(A))\u003C55296||s>56319||A+1===u||(i=a.charCodeAt(A+1))\u003C56320||i>57343?e?a.charAt(A):s:e?a.slice(A,A+2):i-56320+(s-55296\u003C\u003C10)+65536}};e.exports={codeAt:s(!1),charAt:s(!0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\");e.exports=function(e){return n((function(){return!!o[e]()||\"​᠎\"!=\"​᠎\"[e]()||o[e].name!==e}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),o=\"[\"+r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\")+\"]\",s=RegExp(\"^\"+o+o+\"*\"),i=RegExp(o+o+\"*$\"),a=function(e){return function(t){var r=String(n(t));return 1&e&&(r=r.replace(s,\"\")),2&e&&(r=r.replace(i,\"\")),r}};e.exports={start:a(1),end:a(2),trim:a(3)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),f=i.location,h=i.setImmediate,p=i.clearImmediate,m=i.process,g=i.MessageChannel,y=i.Dispatch,v=0,w={},b=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},B=function(e){return function(){b(e)}},j=function(e){b(e.data)},_=function(e){i.postMessage(e+\"\",f.protocol+\"\u002F\u002F\"+f.host)};h&&p||(h=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return w[++v]=function(){(\"function\"==typeof e?e:Function(e)).apply(void 0,t)},n(v),v},p=function(e){delete w[e]},d?n=function(e){m.nextTick(B(e))}:y&&y.now?n=function(e){y.now(B(e))}:g&&!l?(s=(o=new g).port2,o.port1.onmessage=j,n=A(s.postMessage,s,1)):i.addEventListener&&\"function\"==typeof postMessage&&!i.importScripts&&f&&\"file:\"!==f.protocol&&!a(_)?(n=_,i.addEventListener(\"message\",j,!1)):n=\"onreadystatechange\"in c(\"script\")?function(e){u.appendChild(c(\"script\")).onreadystatechange=function(){u.removeChild(this),b(e)}}:function(e){setTimeout(B(e),0)}),e.exports={set:h,clear:p}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=Math.max,s=Math.min;e.exports=function(e,t){var r=n(e);return r\u003C0?o(r+t,0):s(r,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return n(o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\":function(e){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return Object(n(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\":function(e,t,r){var n={};n[r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\":function(e){var t=0,r=Math.random();e.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++t+r).toString(36)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\");e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\");t.f=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\"),u=o(\"wks\"),c=n.Symbol,l=A?c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)&&(a||\"string\"==typeof u[e])||(a&&s(c,e)?u[e]=c[e]:u[e]=l(\"Symbol.\"+e)),u[e]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\":function(e){e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),c=function(e,t){var r=this;if(!(r instanceof c))return new c(e,t);s&&(r=s(new Error(void 0),o(r))),void 0!==t&&a(r,\"message\",String(t));var n=[];return u(e,n.push,{that:n}),a(r,\"errors\",n),r};c.prototype=i(Error.prototype,{constructor:A(5,c),message:A(5,\"\"),name:A(5,\"AggregateError\")}),n({global:!0},{AggregateError:c})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),h=d(\"isConcatSpreadable\"),p=9007199254740991,m=\"Maximum allowed index exceeded\",g=f>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),y=l(\"concat\"),v=function(e){if(!i(e))return!1;var t=e[h];return void 0!==t?!!t:s(e)};n({target:\"Array\",proto:!0,forced:!g||!y},{concat:function(e){var t,r,n,o,s,i=a(this),l=c(i,0),d=0;for(t=-1,n=arguments.length;t\u003Cn;t++)if(v(s=-1===t?i:arguments[t])){if(d+(o=A(s.length))>p)throw TypeError(m);for(r=0;r\u003Co;r++,d++)r in s&&u(l,d,s[r])}else{if(d>=p)throw TypeError(m);u(l,d++,s)}return l.length=d,l}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").every;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"every\")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\");n({target:\"Array\",proto:!0},{fill:o}),s(\"fill\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").filter;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"filter\")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js\");n({target:\"Array\",proto:!0,forced:[].forEach!=o},{forEach:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js\");n({target:\"Array\",stat:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\")((function(e){Array.from(e)}))},{from:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").includes,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\");n({target:\"Array\",proto:!0},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(\"includes\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").indexOf,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\"),i=[].indexOf,a=!!i&&1\u002F[1].indexOf(1,-0)\u003C0,A=s(\"indexOf\");n({target:\"Array\",proto:!0,forced:a||!A},{indexOf:function(e){return a?i.apply(this,arguments)||0:o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Array\",stat:!0},{isArray:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),A=\"Array Iterator\",u=i.set,c=i.getterFor(A);e.exports=a(Array,\"Array\",(function(e,t){u(this,{type:A,target:n(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==r?{value:n,done:!1}:\"values\"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),\"values\"),s.Arguments=s.Array,o(\"keys\"),o(\"values\"),o(\"entries\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").map;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js\").left,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\");n({target:\"Array\",proto:!0,forced:!s(\"reduce\")||!a&&i>79&&i\u003C83},{reduce:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),s=[].reverse,i=[1,2];n({target:\"Array\",proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),s.call(this)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"slice\"),d=c(\"species\"),f=[].slice,h=Math.max;n({target:\"Array\",proto:!0,forced:!l},{slice:function(e,t){var r,n,c,l=A(this),p=a(l.length),m=i(e,p),g=i(void 0===t?p:t,p);if(s(l)&&(\"function\"!=typeof(r=l.constructor)||r!==Array&&!s(r.prototype)?o(r)&&null===(r=r[d])&&(r=void 0):r=void 0,r===Array||void 0===r))return f.call(l,m,g);for(n=new(void 0===r?Array:r)(h(g-m,0)),c=0;m\u003Cg;m++,c++)m in l&&u(n,c,l[m]);return n.length=c,n}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").some;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"some\")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Function\",proto:!0},{bind:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\")(n.JSON,\"JSON\",!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js\");e.exports=n(\"Map\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),o)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Object\",stat:!0,sham:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\")},{create:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\");n({target:\"Object\",stat:!0,forced:!o,sham:!o},{defineProperties:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\");n({target:\"Object\",stat:!0,forced:!o,sham:!o},{defineProperty:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),A=o((function(){i(1)}));n({target:\"Object\",stat:!0,forced:!a||A,sham:!a},{getOwnPropertyDescriptor:function(e,t){return i(s(e),t)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\");n({target:\"Object\",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,r,n=i(e),o=a.f,u=s(n),c={},l=0;u.length>l;)void 0!==(r=o(n,t=u[l++]))&&A(c,t,r);return c}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\");n({target:\"Object\",stat:!0,forced:o((function(){i(1)})),sham:!a},{getPrototypeOf:function(e){return i(s(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\");n({target:\"Object\",stat:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\")((function(){s(1)}))},{keys:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Object\",stat:!0},{setPrototypeOf:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js\");n({global:!0,forced:parseFloat!=o},{parseFloat:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js\");n({global:!0,forced:parseInt!=o},{parseInt:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\");n({target:\"Promise\",stat:!0},{allSettled:function(e){var t=this,r=s.f(t),n=r.resolve,A=r.reject,u=i((function(){var r=o(t.resolve),s=[],i=0,A=1;a(e,(function(e){var o=i++,a=!1;s.push(void 0),A++,r.call(t,e).then((function(e){a||(a=!0,s[o]={status:\"fulfilled\",value:e},--A||n(s))}),(function(e){a||(a=!0,s[o]={status:\"rejected\",reason:e},--A||n(s))}))})),--A||n(s)}));return u.error&&A(u.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=\"No one promise resolved\";n({target:\"Promise\",stat:!0},{any:function(e){var t=this,r=i.f(t),n=r.resolve,c=r.reject,l=a((function(){var r=o(t.resolve),i=[],a=0,l=1,d=!1;A(e,(function(e){var o=a++,A=!1;i.push(void 0),l++,r.call(t,e).then((function(e){A||d||(d=!0,n(e))}),(function(e){A||d||(A=!0,i[o]=e,--l||c(new(s(\"AggregateError\"))(i,u)))}))})),--l||c(new(s(\"AggregateError\"))(i,u))}));return l.error&&c(l.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\");if(n({target:\"Promise\",proto:!0,real:!0,forced:!!s&&i((function(){s.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=A(this,a(\"Promise\")),r=\"function\"==typeof e;return this.then(r?function(r){return u(t,e()).then((function(){return r}))}:e,r?function(r){return u(t,e()).then((function(){throw r}))}:e)}}),!o&&\"function\"==typeof s){var l=a(\"Promise\").prototype.finally;s.prototype.finally!==l&&c(s.prototype,\"finally\",l,{unsafe:!0})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js\":function(e,t,r){\"use strict\";var n,o,s,i,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\").set,C=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),I=S(\"species\"),P=\"Promise\",O=F.get,k=F.set,R=F.getterFor(P),M=l&&l.prototype,D=l,K=M,z=u.TypeError,V=u.document,q=u.process,G=N.f,X=G,W=!!(V&&V.createEvent&&u.dispatchEvent),J=\"function\"==typeof PromiseRejectionEvent,Y=\"unhandledrejection\",Z=!1,$=U(P,(function(){var e=w(D),t=e!==String(D);if(!t&&66===H)return!0;if(A&&!K.finally)return!0;if(H>=51&&\u002Fnative code\u002F.test(e))return!1;var r=new D((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};return(r.constructor={})[I]=n,!(Z=r.then((function(){}))instanceof n)||!t&&L&&!J})),ee=$||!B((function(e){D.all(e).catch((function(){}))})),te=function(e){var t;return!(!g(e)||\"function\"!=typeof(t=e.then))&&t},re=function(e,t){if(!e.notified){e.notified=!0;var r=e.reactions;C((function(){for(var n=e.value,o=1==e.state,s=0;r.length>s;){var i,a,A,u=r[s++],c=o?u.ok:u.fail,l=u.resolve,d=u.reject,f=u.domain;try{c?(o||(2===e.rejection&&ie(e),e.rejection=1),!0===c?i=n:(f&&f.enter(),i=c(n),f&&(f.exit(),A=!0)),i===u.promise?d(z(\"Promise-chain cycle\")):(a=te(i))?a.call(i,l,d):l(i)):d(n)}catch(e){f&&!A&&f.exit(),d(e)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&oe(e)}))}},ne=function(e,t,r){var n,o;W?((n=V.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),u.dispatchEvent(n)):n={promise:t,reason:r},!J&&(o=u[\"on\"+e])?o(n):e===Y&&E(\"Unhandled promise rejection\",r)},oe=function(e){_.call(u,(function(){var t,r=e.facade,n=e.value;if(se(e)&&(t=Q((function(){T?q.emit(\"unhandledRejection\",n,r):ne(Y,r,n)})),e.rejection=T||se(e)?2:1,t.error))throw t.value}))},se=function(e){return 1!==e.rejection&&!e.parent},ie=function(e){_.call(u,(function(){var t=e.facade;T?q.emit(\"rejectionHandled\",t):ne(\"rejectionhandled\",t,e.value)}))},ae=function(e,t,r){return function(n){e(t,n,r)}},Ae=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,re(e,!0))},ue=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw z(\"Promise can't be resolved itself\");var n=te(t);n?C((function(){var r={done:!1};try{n.call(t,ae(ue,r,e),ae(Ae,r,e))}catch(t){Ae(r,t,e)}})):(e.value=t,e.state=1,re(e,!1))}catch(t){Ae({done:!1},t,e)}}};if($&&(K=(D=function(e){v(this,D,P),y(e),n.call(this);var t=O(this);try{e(ae(ue,t),ae(Ae,t))}catch(e){Ae(t,e)}}).prototype,(n=function(e){k(this,{type:P,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=f(K,{then:function(e,t){var r=R(this),n=G(j(this,D));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=T?q.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&re(r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new n,t=O(e);this.promise=e,this.resolve=ae(ue,t),this.reject=ae(Ae,t)},N.f=G=function(e){return e===D||e===s?new o(e):X(e)},!A&&\"function\"==typeof l&&M!==Object.prototype)){i=M.then,Z||(d(M,\"then\",(function(e,t){var r=this;return new D((function(e,t){i.call(r,e,t)})).then(e,t)}),{unsafe:!0}),d(M,\"catch\",K.catch,{unsafe:!0}));try{delete M.constructor}catch(e){}h&&h(M,K)}a({global:!0,wrap:!0,forced:$},{Promise:D}),p(D,P,!1,!0),m(P),s=c(P),a({target:P,stat:!0,forced:$},{reject:function(e){var t=G(this);return t.reject.call(void 0,e),t.promise}}),a({target:P,stat:!0,forced:A||$},{resolve:function(e){return x(A&&this===s?D:this,e)}}),a({target:P,stat:!0,forced:ee},{all:function(e){var t=this,r=G(t),n=r.resolve,o=r.reject,s=Q((function(){var r=y(t.resolve),s=[],i=0,a=1;b(e,(function(e){var A=i++,u=!1;s.push(void 0),a++,r.call(t,e).then((function(e){u||(u=!0,s[A]=e,--a||n(s))}),o)})),--a||n(s)}));return s.error&&o(s.value),r.promise},race:function(e){var t=this,r=G(t),n=r.reject,o=Q((function(){var o=y(t.resolve);b(e,(function(e){o.call(t,e).then(r.resolve,n)}))}));return o.error&&n(o.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),A=o(\"Reflect\",\"apply\"),u=Function.apply;n({target:\"Reflect\",stat:!0,forced:!a((function(){A((function(){}))}))},{apply:function(e,t,r){return s(e),i(r),A?A(e,t,r):u.call(e,t,r)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),l=o(\"Reflect\",\"construct\"),d=c((function(){function e(){}return!(l((function(){}),[],e)instanceof e)})),f=!c((function(){l((function(){}))})),h=d||f;n({target:\"Reflect\",stat:!0,forced:h,sham:h},{construct:function(e,t){s(e),i(t);var r=arguments.length\u003C3?e:s(arguments[2]);if(f&&!d)return l(e,t,r);if(e==r){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var n=[null];return n.push.apply(n,t),new(u.apply(e,n))}var o=r.prototype,c=A(a(o)?o:Object.prototype),h=Function.apply.call(e,c,t);return a(h)?h:c}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f;n({target:\"Reflect\",stat:!0},{deleteProperty:function(e,t){var r=s(o(e),t);return!(r&&!r.configurable)&&delete e[t]}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\");n({target:\"Reflect\",stat:!0,sham:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\")},{getPrototypeOf:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\");n({target:\"Reflect\",stat:!0},{get:function e(t,r){var n,u,c=arguments.length\u003C3?t:arguments[2];return s(t)===c?t[r]:(n=a.f(t,r))?i(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(c):o(u=A(t))?e(u,r,c):void 0}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");n({target:\"String\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\")(\"includes\")},{includes:function(e){return!!~String(s(this)).indexOf(o(e),arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js\").charAt,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),i=\"String Iterator\",a=o.set,A=o.getterFor(i);s(String,\"String\",(function(e){a(this,{type:i,string:String(e),index:0})}),(function(){var e,t=A(this),r=t.string,o=t.index;return o>=r.length?{value:void 0,done:!0}:(e=n(r,o),t.index+=e.length,{value:e,done:!1})}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js\":function(e,t,r){\"use strict\";var n,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),l=\"\".startsWith,d=Math.min,f=u(\"startsWith\");o({target:\"String\",proto:!0,forced:!(!c&&!f&&(n=s(String.prototype,\"startsWith\"),n&&!n.writable)||f)},{startsWith:function(e){var t=String(A(this));a(e);var r=i(d(arguments.length>1?arguments[1]:void 0,t.length)),n=String(e);return l?l.call(t,n,r):t.slice(r,r+n.length)===n}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim;n({target:\"String\",proto:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js\")(\"trim\")},{trim:function(){return o(this)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"asyncIterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"hasInstance\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"isConcatSpreadable\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),C=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\"),I=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),P=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),O=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,k=F(\"hidden\"),R=\"Symbol\",M=L(\"toPrimitive\"),D=P.set,K=P.getterFor(R),z=Object.prototype,V=o.Symbol,q=s(\"JSON\",\"stringify\"),G=_.f,X=C.f,W=B.f,J=x.f,Y=Q(\"symbols\"),Z=Q(\"op-symbols\"),$=Q(\"string-to-symbol-registry\"),ee=Q(\"symbol-to-string-registry\"),te=Q(\"wks\"),re=o.QObject,ne=!re||!re.prototype||!re.prototype.findChild,oe=a&&c((function(){return 7!=v(X({},\"a\",{get:function(){return X(this,\"a\",{value:7}).a}})).a}))?function(e,t,r){var n=G(z,t);n&&delete z[t],X(e,t,r),n&&e!==z&&X(z,t,n)}:X,se=function(e,t){var r=Y[e]=v(V.prototype);return D(r,{type:R,tag:e,description:t}),a||(r.description=t),r},ie=u?function(e){return\"symbol\"==typeof e}:function(e){return Object(e)instanceof V},ae=function(e,t,r){e===z&&ae(Z,t,r),h(e);var n=g(t,!0);return h(r),l(Y,n)?(r.enumerable?(l(e,k)&&e[k][n]&&(e[k][n]=!1),r=v(r,{enumerable:y(0,!1)})):(l(e,k)||X(e,k,y(1,{})),e[k][n]=!0),oe(e,n,r)):X(e,n,r)},Ae=function(e,t){h(e);var r=m(t),n=w(r).concat(de(r));return O(n,(function(t){a&&!ue.call(r,t)||ae(e,t,r[t])})),e},ue=function(e){var t=g(e,!0),r=J.call(this,t);return!(this===z&&l(Y,t)&&!l(Z,t))&&(!(r||!l(this,t)||!l(Y,t)||l(this,k)&&this[k][t])||r)},ce=function(e,t){var r=m(e),n=g(t,!0);if(r!==z||!l(Y,n)||l(Z,n)){var o=G(r,n);return!o||!l(Y,n)||l(r,k)&&r[k][n]||(o.enumerable=!0),o}},le=function(e){var t=W(m(e)),r=[];return O(t,(function(e){l(Y,e)||l(U,e)||r.push(e)})),r},de=function(e){var t=e===z,r=W(t?Z:m(e)),n=[];return O(r,(function(e){!l(Y,e)||t&&!l(z,e)||n.push(Y[e])})),n};A||(N((V=function(){if(this instanceof V)throw TypeError(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=S(e),r=function(e){this===z&&r.call(Z,e),l(this,k)&&l(this[k],t)&&(this[k][t]=!1),oe(this,t,y(1,e))};return a&&ne&&oe(z,t,{configurable:!0,set:r}),se(t,e)}).prototype,\"toString\",(function(){return K(this).tag})),N(V,\"withoutSetter\",(function(e){return se(S(e),e)})),x.f=ue,C.f=ae,_.f=ce,b.f=B.f=le,j.f=de,T.f=function(e){return se(L(e),e)},a&&(X(V.prototype,\"description\",{configurable:!0,get:function(){return K(this).description}}),i||N(z,\"propertyIsEnumerable\",ue,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!A,sham:!A},{Symbol:V}),O(w(te),(function(e){H(e)})),n({target:R,stat:!0,forced:!A},{for:function(e){var t=String(e);if(l($,t))return $[t];var r=V(t);return $[t]=r,ee[r]=t,r},keyFor:function(e){if(!ie(e))throw TypeError(e+\" is not a symbol\");if(l(ee,e))return ee[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),n({target:\"Object\",stat:!0,forced:!A,sham:!a},{create:function(e,t){return void 0===t?v(e):Ae(v(e),t)},defineProperty:ae,defineProperties:Ae,getOwnPropertyDescriptor:ce}),n({target:\"Object\",stat:!0,forced:!A},{getOwnPropertyNames:le,getOwnPropertySymbols:de}),n({target:\"Object\",stat:!0,forced:c((function(){j.f(1)}))},{getOwnPropertySymbols:function(e){return j.f(p(e))}}),q&&n({target:\"JSON\",stat:!0,forced:!A||c((function(){var e=V();return\"[null]\"!=q([e])||\"{}\"!=q({a:e})||\"{}\"!=q(Object(e))}))},{stringify:function(e,t,r){for(var n,o=[e],s=1;arguments.length>s;)o.push(arguments[s++]);if(n=t,(f(t)||void 0!==e)&&!ie(e))return d(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!ie(t))return t}),o[1]=t,q.apply(null,o)}}),V.prototype[M]||E(V.prototype,M,V.prototype.valueOf),I(V,R),U[k]=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"matchAll\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"match\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"replace\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"search\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"species\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"split\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"toPrimitive\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"toStringTag\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"unscopables\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\");n({target:\"Promise\",stat:!0},{try:function(e){var t=o.f(this),r=s(e);return(r.error?t.reject:t.resolve)(r.value),t.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"asyncDispose\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"dispose\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"matcher\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"metadata\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"observable\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"patternMatch\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"replaceAll\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");for(var u in n){var c=o[u],l=c&&c.prototype;l&&s(l)!==A&&i(l,A,u),a[u]=a.Array}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),s=Array.prototype,i={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===s||e instanceof Array&&t===s.forEach||i.hasOwnProperty(o(e))?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),s=Array.prototype,i={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===s||e instanceof Array&&t===s.values||i.hasOwnProperty(o(e))?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js\":function(e){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e)&&null!==e)throw TypeError(\"Can't set \"+String(e)+\" as a prototype\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),i=n(\"unscopables\"),a=Array.prototype;null==a[i]&&s.f(a,i,{configurable:!0,value:o(null)}),e.exports=function(e){a[i][e]=!0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").forEach,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\")(\"forEach\");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\"),i=function(e){return function(t,r,i){var a,A=n(t),u=o(A.length),c=s(i,u);if(e&&r!=r){for(;u>c;)if((a=A[c++])!=a)return!0}else for(;u>c;c++)if((e||c in A)&&A[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\"),A=[].push,u=function(e){var t=1==e,r=2==e,u=3==e,c=4==e,l=6==e,d=7==e,f=5==e||l;return function(h,p,m,g){for(var y,v,w=s(h),b=o(w),B=n(p,m,3),j=i(b.length),_=0,C=g||a,x=t?C(h,j):r||d?C(h,0):void 0;j>_;_++)if((f||_ in b)&&(v=B(y=b[_],_,w),e))if(t)x[_]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return _;case 2:A.call(x,y)}else switch(e){case 4:return!1;case 7:A.call(x,y)}return l?-1:u||c?c:x}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),i=o(\"species\");e.exports=function(e){return s>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e){var t;return o(e)&&(\"function\"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)?n(t)&&null===(t=t[s])&&(t=void 0):t=void 0),void 0===t?Array:t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js\");e.exports=function(e,t){return new(n(e))(0===t?0:t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\":function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\"),i=\"Arguments\"==o(function(){return arguments}());e.exports=n?o:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),s))?r:i?o(t):\"Object\"==(n=o(t))&&\"function\"==typeof t.callee?\"Arguments\":n}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\");e.exports=function(e,t){for(var r=o(t),a=i.f,A=s.f,u=0;u\u003Cr.length;u++){var c=r[u];n(e,c)||a(e,c,A(t,c))}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=\u002F\"\u002Fg;e.exports=function(e,t,r,i){var a=o(n(e)),A=\"\u003C\"+t;return\"\"!==r&&(A+=\" \"+r+'=\"'+o(i).replace(s,\"&quot;\")+'\"'),A+\">\"+a+\"\u003C\u002F\"+t+\">\"}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\").IteratorPrototype,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),A=function(){return this};e.exports=function(e,t,r){var u=t+\" Iterator\";return e.prototype=o(n,{next:s(1,r)}),i(e,u,!1,!0),a[u]=A,e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=n?function(e,t,r){return o.f(e,t,s(1,r))}:function(e,t,r){return e[t]=r,e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\":function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,s(0,r)):e[i]=r}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\"),h=f.IteratorPrototype,p=f.BUGGY_SAFARI_ITERATORS,m=c(\"iterator\"),g=\"keys\",y=\"values\",v=\"entries\",w=function(){return this};e.exports=function(e,t,r,c,f,b,B){o(r,t,c);var j,_,C,x=function(e){if(e===f&&U)return U;if(!p&&e in Q)return Q[e];switch(e){case g:case y:case v:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+\" Iterator\",N=!1,Q=e.prototype,F=Q[m]||Q[\"@@iterator\"]||f&&Q[f],U=!p&&F||x(f),S=\"Array\"==t&&Q.entries||F;if(S&&(j=s(S.call(new e)),h!==Object.prototype&&j.next&&(l||s(j)===h||(i?i(j,h):\"function\"!=typeof j[m]&&A(j,m,w)),a(j,E,!0,!0),l&&(d[E]=w))),f==y&&F&&F.name!==y&&(N=!0,U=function(){return F.call(this)}),l&&!B||Q[m]===U||A(Q,m,U),d[t]=U,f)if(_={values:x(y),keys:b?U:x(g),entries:x(v)},B)for(C in _)(p||N||!(C in Q))&&u(Q,C,_[C]);else n({target:t,proto:!0,forced:p||N},_);return _}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),s=n.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\":function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"navigator\",\"userAgent\")||\"\"},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\":function(e,t,r){var n,o,s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js\"),a=s.process,A=s.Deno,u=a&&a.versions||A&&A.version,c=u&&u.v8;c?o=(n=c.split(\".\"))[0]\u003C4?1:n[0]+n[1]:i&&(!(n=i.match(\u002FEdge\\\u002F(\\d+)\u002F))||n[1]>=74)&&(n=i.match(\u002FChrome\\\u002F(\\d+)\u002F))&&(o=n[1]),e.exports=o&&+o},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\":function(e){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\");e.exports=function(e,t){var r,c,l,d,f,h=e.target,p=e.global,m=e.stat;if(r=p?n:m?n[h]||a(h,{}):(n[h]||{}).prototype)for(c in t){if(d=t[c],l=e.noTargetGet?(f=o(r,c))&&f.value:r[c],!u(p?c:h+(m?\".\":\"#\")+c,e.forced)&&void 0!==l){if(typeof d==typeof l)continue;A(d,l)}(e.sham||l&&l.sham)&&s(d,\"sham\",!0),i(r,c,d,e)}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\":function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js\");e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=function(e){return\"function\"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length\u003C2?o(n[e]):n[e]&&n[e][t]}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\":function(e){var t=function(e){return e&&e.Math==Math&&e};e.exports=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof global&&global)||function(){return this}()||Function(\"return this\")()},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),o={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return o.call(n(e),t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"document\",\"documentElement\")},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\");e.exports=!n&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),s=\"\".split;e.exports=n((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?s.call(e,\"\"):Object(e)}:Object},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\");e.exports=function(e,t,r){var s,i;return o&&\"function\"==typeof(s=t.constructor)&&s!==r&&n(i=s.prototype)&&i!==r.prototype&&o(e,i),e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\"),o=Function.toString;\"function\"!=typeof n.inspectSource&&(n.inspectSource=function(e){return o.call(e)}),e.exports=n.inspectSource},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),h=\"Object already initialized\",p=a.WeakMap;if(i||l.state){var m=l.state||(l.state=new p),g=m.get,y=m.has,v=m.set;n=function(e,t){if(y.call(m,e))throw new TypeError(h);return t.facade=e,v.call(m,e,t),t},o=function(e){return g.call(m,e)||{}},s=function(e){return y.call(m,e)}}else{var w=d(\"state\");f[w]=!0,n=function(e,t){if(c(e,w))throw new TypeError(h);return t.facade=e,u(e,w,t),t},o=function(e){return c(e,w)?e[w]:{}},s=function(e){return c(e,w)}}e.exports={set:n,get:o,has:s,enforce:function(e){return s(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!A(t)||(r=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return r}}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\");e.exports=Array.isArray||function(e){return\"Array\"==n(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=\u002F#|\\.prototype\\.\u002F,s=function(e,t){var r=a[i(e)];return r==u||r!=A&&(\"function\"==typeof t?n(t):!!t)},i=s.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},a=s.data={},A=s.NATIVE=\"N\",u=s.POLYFILL=\"P\";e.exports=s},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\":function(e){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\":function(e){e.exports=!1},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\");e.exports=o?function(e){return\"symbol\"==typeof e}:function(e){var t=n(\"Symbol\");return\"function\"==typeof t&&Object(e)instanceof t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\":function(e,t,r){\"use strict\";var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),d=c(\"iterator\"),f=!1;[].keys&&(\"next\"in(s=[].keys())?(o=a(a(s)))!==Object.prototype&&(n=o):f=!0);var h=null==n||i((function(){var e={};return n[d].call(e)!==e}));h&&(n={}),l&&!h||u(n,d)||A(n,d,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n\u003C41}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\"),s=n.WeakMap;e.exports=\"function\"==typeof s&&\u002Fnative code\u002F.test(o(s))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),c=Object.assign,l=Object.defineProperty;e.exports=!c||o((function(){if(n&&1!==c({b:1},c(l({},\"a\",{enumerable:!0,get:function(){l(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),o=\"abcdefghijklmnopqrst\";return e[r]=7,o.split(\"\").forEach((function(e){t[e]=e})),7!=c({},e)[r]||s(c({},t)).join(\"\")!=o}))?function(e,t){for(var r=A(e),o=arguments.length,c=1,l=i.f,d=a.f;o>c;)for(var f,h=u(arguments[c++]),p=l?s(h).concat(l(h)):s(h),m=p.length,g=0;m>g;)f=p[g++],n&&!d.call(h,f)||(r[f]=h[f]);return r}:c},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\":function(e,t,r){var n,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\")(\"IE_PROTO\"),l=function(){},d=function(e){return\"\u003Cscript>\"+e+\"\u003C\\\u002Fscript>\"},f=function(e){e.write(d(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},h=function(){try{n=new ActiveXObject(\"htmlfile\")}catch(e){}h=document.domain&&n?f(n):function(){var e,t=u(\"iframe\");if(t.style)return t.style.display=\"none\",A.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(d(\"document.F=Object\")),e.close(),e.F}()||f(n);for(var e=i.length;e--;)delete h.prototype[i[e]];return h()};a[c]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(l.prototype=o(e),r=new l,l.prototype=null,r[c]=e):r=h(),void 0===t?r:s(r,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\");e.exports=n?Object.defineProperties:function(e,t){s(e);for(var r,n=i(t),a=n.length,A=0;a>A;)o.f(e,r=n[A++],t[r]);return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),a=Object.defineProperty;t.f=n?a:function(e,t,r){if(s(e),t=i(t),s(r),o)try{return a(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\"),c=Object.getOwnPropertyDescriptor;t.f=n?c:function(e,t){if(e=i(e),t=a(t),u)try{return c(e,t)}catch(e){}if(A(e,t))return s(!o.f.call(e,t),e[t])}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\").f,s={}.toString,i=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&\"[object Window]\"==s.call(e)?function(e){try{return o(e)}catch(e){return i.slice()}}(e):o(n(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\").concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js\"),a=s(\"IE_PROTO\"),A=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=o(e),n(e,a)?e[a]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?A:null}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js\").indexOf,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\");e.exports=function(e,t){var r,a=o(e),A=0,u=[];for(r in a)!n(i,r)&&n(a,r)&&u.push(r);for(;t.length>A;)n(a,r=t[A++])&&(~s(u,r)||u.push(r));return u}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\");e.exports=Object.keys||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\":function(e,t){\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);t.f=o?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,s){return n(r),o(s),t?e.call(r,s):r.__proto__=s,r}}():void 0)},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js\");e.exports=n?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e,t){var r,o;if(\"string\"===t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(\"string\"!==t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\");e.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(i(e)),r=s.f;return r?t.concat(r(e)):t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),u=A.get,c=A.enforce,l=String(String).split(\"String\");(e.exports=function(e,t,r,a){var A,u=!!a&&!!a.unsafe,d=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;\"function\"==typeof r&&(\"string\"!=typeof t||s(r,\"name\")||o(r,\"name\",t),(A=c(r)).source||(A.source=l.join(\"string\"==typeof t?t:\"\"))),e!==n?(u?!f&&e[t]&&(d=!0):delete e[t],d?e[t]=r:o(e,t,r)):d?e[t]=r:i(t,r)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&u(this).source||a(this)}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\");e.exports=function(){var e=n(this),t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.dotAll&&(t+=\"s\"),e.unicode&&(t+=\"u\"),e.sticky&&(t+=\"y\"),t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\":function(e){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\");e.exports=function(e,t){try{Object.defineProperty(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),s=n(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),s=\"__core-js_shared__\",i=n[s]||o(s,{});e.exports=i},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\");(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.16.0\",mode:n?\"pure\":\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=function(e){return n((function(){var t=\"\"[e]('\"');return t!==t.toLowerCase()||t.split('\"').length>3}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),i=function(e){return function(t,r){var i,a,A=o(s(t)),u=n(r),c=A.length;return u\u003C0||u>=c?e?\"\":void 0:(i=A.charCodeAt(u))\u003C55296||i>56319||u+1===c||(a=A.charCodeAt(u+1))\u003C56320||a>57343?e?A.charAt(u):i:e?A.slice(u,u+2):a-56320+(i-55296\u003C\u003C10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=\"[\"+r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js\")+\"]\",i=RegExp(\"^\"+s+s+\"*\"),a=RegExp(s+s+\"*$\"),A=function(e){return function(t){var r=o(n(t));return 1&e&&(r=r.replace(i,\"\")),2&e&&(r=r.replace(a,\"\")),r}};e.exports={start:A(1),end:A(2),trim:A(3)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=Math.max,s=Math.min;e.exports=function(e,t){var r=n(e);return r\u003C0?o(r+t,0):s(r,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return n(o(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\":function(e){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return Object(n(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toPrimitive\");e.exports=function(e,t){if(!n(e)||o(e))return e;var r,a=e[i];if(void 0!==a){if(void 0===t&&(t=\"default\"),r=a.call(e,t),!n(r)||o(r))return r;throw TypeError(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),s(e,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\");e.exports=function(e){var t=n(e,\"string\");return o(t)?t:String(t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\":function(e,t,r){var n={};n[r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(n)},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\");e.exports=function(e){if(n(e))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\":function(e){var t=0,r=Math.random();e.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++t+r).toString(36)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\");e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\");t.f=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\"),u=o(\"wks\"),c=n.Symbol,l=A?c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)&&(a||\"string\"==typeof u[e])||(a&&s(c,e)?u[e]=c[e]:u[e]=l(\"Symbol.\"+e)),u[e]}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js\":function(e){e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),h=d(\"isConcatSpreadable\"),p=9007199254740991,m=\"Maximum allowed index exceeded\",g=f>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),y=l(\"concat\"),v=function(e){if(!i(e))return!1;var t=e[h];return void 0!==t?!!t:s(e)};n({target:\"Array\",proto:!0,forced:!g||!y},{concat:function(e){var t,r,n,o,s,i=a(this),l=c(i,0),d=0;for(t=-1,n=arguments.length;t\u003Cn;t++)if(v(s=-1===t?i:arguments[t])){if(d+(o=A(s.length))>p)throw TypeError(m);for(r=0;r\u003Co;r++,d++)r in s&&u(l,d,s[r])}else{if(d>=p)throw TypeError(m);u(l,d++,s)}return l.length=d,l}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\"),A=\"Array Iterator\",u=i.set,c=i.getterFor(A);e.exports=a(Array,\"Array\",(function(e,t){u(this,{type:A,target:n(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==r?{value:n,done:!1}:\"values\"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),\"values\"),s.Arguments=s.Array,o(\"keys\"),o(\"values\"),o(\"entries\")},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\"),a=[].join,A=o!=Object,u=i(\"join\",\",\");n({target:\"Array\",proto:!0,forced:A||!u},{join:function(e){return a.call(s(this),void 0===e?\",\":e)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").map;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\")(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\")(\"slice\"),d=c(\"species\"),f=[].slice,h=Math.max;n({target:\"Array\",proto:!0,forced:!l},{slice:function(e,t){var r,n,c,l=A(this),p=a(l.length),m=i(e,p),g=i(void 0===t?p:t,p);if(s(l)&&(\"function\"!=typeof(r=l.constructor)||r!==Array&&!s(r.prototype)?o(r)&&null===(r=r[d])&&(r=void 0):r=void 0,r===Array||void 0===r))return f.call(l,m,g);for(n=new(void 0===r?Array:r)(h(g-m,0)),c=0;m\u003Cg;m++,c++)m in l&&u(n,c,l[m]);return n.length=c,n}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,s=Function.prototype,i=s.toString,a=\u002F^\\s*function ([^ (]*)\u002F,A=\"name\";n&&!(A in s)&&o(s,A,{configurable:!0,get:function(){try{return i.call(this).match(a)[1]}catch(e){return\"\"}}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\").f,p=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,m=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,g=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js\").trim,y=\"Number\",v=o.Number,w=v.prototype,b=A(f(w))==y,B=function(e){if(c(e))throw TypeError(\"Cannot convert a Symbol value to a number\");var t,r,n,o,s,i,a,A,u=l(e,\"number\");if(\"string\"==typeof u&&u.length>2)if(43===(t=(u=g(u)).charCodeAt(0))||45===t){if(88===(r=u.charCodeAt(2))||120===r)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:n=2,o=49;break;case 79:case 111:n=8,o=55;break;default:return+u}for(i=(s=u.slice(2)).length,a=0;a\u003Ci;a++)if((A=s.charCodeAt(a))\u003C48||A>o)return NaN;return parseInt(s,n)}return+u};if(s(y,!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\"))){for(var j,_=function(e){var t=arguments.length\u003C1?0:e,r=this;return r instanceof _&&(b?d((function(){w.valueOf.call(r)})):A(r)!=y)?u(new v(B(t)),r,_):B(t)},C=n?h(v):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range\".split(\",\"),x=0;C.length>x;x++)a(v,j=C[x])&&!a(_,j)&&m(_,j,p(v,j));_.prototype=w,w.constructor=_,i(o,y,_)}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js\");n({target:\"Object\",stat:!0,forced:Object.assign!==o},{assign:o})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\");n({target:\"Object\",stat:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\")((function(){s(1)}))},{keys:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js\");n||o(Object.prototype,\"toString\",s,{unsafe:!0})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js\"),A=\"toString\",u=RegExp.prototype,c=u.toString,l=i((function(){return\"\u002Fa\u002Fb\"!=c.call({source:\"a\",flags:\"b\"})})),d=c.name!=A;(l||d)&&n(RegExp.prototype,A,(function(){var e=o(this),t=s(e.source),r=e.flags;return\"\u002F\"+t+\"\u002F\"+s(void 0===r&&e instanceof RegExp&&!(\"flags\"in u)?a.call(e):r)}),{unsafe:!0})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js\").charAt,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\"),a=\"String Iterator\",A=s.set,u=s.getterFor(a);i(String,\"String\",(function(e){A(this,{type:a,string:o(e),index:0})}),(function(){var e,t=u(this),r=t.string,o=t.index;return o>=r.length?{value:void 0,done:!0}:(e=n(r,o),t.index+=e.length,{value:e,done:!1})}))},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js\");n({target:\"String\",proto:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js\")(\"link\")},{link:function(e){return o(this,\"a\",\"href\",e)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\"),c=s.Symbol;if(o&&\"function\"==typeof c&&(!(\"description\"in c.prototype)||void 0!==c().description)){var l={},d=function(){var e=arguments.length\u003C1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof d?new c(e):void 0===e?c():c(e);return\"\"===e&&(l[t]=!0),t};u(d,c);var f=d.prototype=c.prototype;f.constructor=d;var h=f.toString,p=\"Symbol(test)\"==String(c(\"test\")),m=\u002F^Symbol\\((.*)\\)[^)]+$\u002F;A(f,\"description\",{configurable:!0,get:function(){var e=a(this)?this.valueOf():this,t=h.call(e);if(i(l,e))return\"\";var r=p?t.slice(7,-1):t.replace(m,\"$1\");return\"\"===r?void 0:r}}),n({global:!0,forced:!0},{Symbol:d})}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),C=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),I=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\"),P=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),O=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),k=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").forEach,R=U(\"hidden\"),M=\"Symbol\",D=T(\"toPrimitive\"),K=O.set,z=O.getterFor(M),V=Object.prototype,q=o.Symbol,G=s(\"JSON\",\"stringify\"),X=C.f,W=x.f,J=j.f,Y=E.f,Z=F(\"symbols\"),$=F(\"op-symbols\"),ee=F(\"string-to-symbol-registry\"),te=F(\"symbol-to-string-registry\"),re=F(\"wks\"),ne=o.QObject,oe=!ne||!ne.prototype||!ne.prototype.findChild,se=a&&u((function(){return 7!=w(W({},\"a\",{get:function(){return W(this,\"a\",{value:7}).a}})).a}))?function(e,t,r){var n=X(V,t);n&&delete V[t],W(e,t,r),n&&e!==V&&W(V,t,n)}:W,ie=function(e,t){var r=Z[e]=w(q.prototype);return K(r,{type:M,tag:e,description:t}),a||(r.description=t),r},ae=function(e,t,r){e===V&&ae($,t,r),h(e);var n=g(t);return h(r),c(Z,n)?(r.enumerable?(c(e,R)&&e[R][n]&&(e[R][n]=!1),r=w(r,{enumerable:v(0,!1)})):(c(e,R)||W(e,R,v(1,{})),e[R][n]=!0),se(e,n,r)):W(e,n,r)},Ae=function(e,t){h(e);var r=m(t),n=b(r).concat(de(r));return k(n,(function(t){a&&!ue.call(r,t)||ae(e,t,r[t])})),e},ue=function(e){var t=g(e),r=Y.call(this,t);return!(this===V&&c(Z,t)&&!c($,t))&&(!(r||!c(this,t)||!c(Z,t)||c(this,R)&&this[R][t])||r)},ce=function(e,t){var r=m(e),n=g(t);if(r!==V||!c(Z,n)||c($,n)){var o=X(r,n);return!o||!c(Z,n)||c(r,R)&&r[R][n]||(o.enumerable=!0),o}},le=function(e){var t=J(m(e)),r=[];return k(t,(function(e){c(Z,e)||c(S,e)||r.push(e)})),r},de=function(e){var t=e===V,r=J(t?$:m(e)),n=[];return k(r,(function(e){!c(Z,e)||t&&!c(V,e)||n.push(Z[e])})),n};A||(Q((q=function(){if(this instanceof q)throw TypeError(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?y(arguments[0]):void 0,t=L(e),r=function(e){this===V&&r.call($,e),c(this,R)&&c(this[R],t)&&(this[R][t]=!1),se(this,t,v(1,e))};return a&&oe&&se(V,t,{configurable:!0,set:r}),ie(t,e)}).prototype,\"toString\",(function(){return z(this).tag})),Q(q,\"withoutSetter\",(function(e){return ie(L(e),e)})),E.f=ue,x.f=ae,C.f=ce,B.f=j.f=le,_.f=de,H.f=function(e){return ie(T(e),e)},a&&(W(q.prototype,\"description\",{configurable:!0,get:function(){return z(this).description}}),i||Q(V,\"propertyIsEnumerable\",ue,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!A,sham:!A},{Symbol:q}),k(b(re),(function(e){I(e)})),n({target:M,stat:!0,forced:!A},{for:function(e){var t=y(e);if(c(ee,t))return ee[t];var r=q(t);return ee[t]=r,te[r]=t,r},keyFor:function(e){if(!f(e))throw TypeError(e+\" is not a symbol\");if(c(te,e))return te[e]},useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),n({target:\"Object\",stat:!0,forced:!A,sham:!a},{create:function(e,t){return void 0===t?w(e):Ae(w(e),t)},defineProperty:ae,defineProperties:Ae,getOwnPropertyDescriptor:ce}),n({target:\"Object\",stat:!0,forced:!A},{getOwnPropertyNames:le,getOwnPropertySymbols:de}),n({target:\"Object\",stat:!0,forced:u((function(){_.f(1)}))},{getOwnPropertySymbols:function(e){return _.f(p(e))}}),G&&n({target:\"JSON\",stat:!0,forced:!A||u((function(){var e=q();return\"[null]\"!=G([e])||\"{}\"!=G({a:e})||\"{}\"!=G(Object(e))}))},{stringify:function(e,t,r){for(var n,o=[e],s=1;arguments.length>s;)o.push(arguments[s++]);if(n=t,(d(t)||void 0!==e)&&!f(e))return l(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!f(t))return t}),o[1]=t,G.apply(null,o)}}),q.prototype[D]||N(q.prototype,D,q.prototype.valueOf),P(q,M),S[R]=!0},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\");for(var a in o){var A=n[a],u=A&&A.prototype;if(u&&u.forEach!==s)try{i(u,\"forEach\",s)}catch(e){u.forEach=s}}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),A=a(\"iterator\"),u=a(\"toStringTag\"),c=s.values;for(var l in o){var d=n[l],f=d&&d.prototype;if(f){if(f[A]!==c)try{i(f,A,c)}catch(e){f[A]=c}if(f[u]||i(f,u,l),o[l])for(var h in s)if(f[h]!==s[h])try{i(f,h,s[h])}catch(e){f[h]=s[h]}}}},\".\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js\":function(e){e.exports=function(){\"use strict\";var e=Object.hasOwnProperty,t=Object.setPrototypeOf,r=Object.isFrozen,n=Object.getPrototypeOf,o=Object.getOwnPropertyDescriptor,s=Object.freeze,i=Object.seal,a=Object.create,A=\"undefined\"!=typeof Reflect&&Reflect,u=A.apply,c=A.construct;u||(u=function(e,t,r){return e.apply(t,r)}),s||(s=function(e){return e}),i||(i=function(e){return e}),c||(c=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t\u003Ce.length;t++)r[t]=e[t];return r}return Array.from(e)}(t))))});var l,d=B(Array.prototype.forEach),f=B(Array.prototype.pop),h=B(Array.prototype.push),p=B(String.prototype.toLowerCase),m=B(String.prototype.match),g=B(String.prototype.replace),y=B(String.prototype.indexOf),v=B(String.prototype.trim),w=B(RegExp.prototype.test),b=(l=TypeError,function(){for(var e=arguments.length,t=Array(e),r=0;r\u003Ce;r++)t[r]=arguments[r];return c(l,t)});function B(e){return function(t){for(var r=arguments.length,n=Array(r>1?r-1:0),o=1;o\u003Cr;o++)n[o-1]=arguments[o];return u(e,t,n)}}function j(e,n){t&&t(e,null);for(var o=n.length;o--;){var s=n[o];if(\"string\"==typeof s){var i=p(s);i!==s&&(r(n)||(n[o]=i),s=i)}e[s]=!0}return e}function _(t){var r=a(null),n=void 0;for(n in t)u(e,t,[n])&&(r[n]=t[n]);return r}function C(e,t){for(;null!==e;){var r=o(e,t);if(r){if(r.get)return B(r.get);if(\"function\"==typeof r.value)return B(r.value)}e=n(e)}return function(e){return console.warn(\"fallback value for\",e),null}}var x=s([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),E=s([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),N=s([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),Q=s([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"fedropshadow\",\"feimage\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),F=s([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\"]),U=s([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),S=s([\"#text\"]),L=s([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),T=s([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),H=s([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),I=s([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),P=i(\u002F\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}\u002Fgm),O=i(\u002F\u003C%[\\s\\S]*|[\\s\\S]*%>\u002Fgm),k=i(\u002F^data-[\\-\\w.\\u00B7-\\uFFFF]\u002F),R=i(\u002F^aria-[\\-\\w]+$\u002F),M=i(\u002F^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))\u002Fi),D=i(\u002F^(?:\\w+script|data):\u002Fi),K=i(\u002F[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\u002Fg),z=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};function V(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t\u003Ce.length;t++)r[t]=e[t];return r}return Array.from(e)}var q=function(){return\"undefined\"==typeof window?null:window},G=function(e,t){if(\"object\"!==(void 0===e?\"undefined\":z(e))||\"function\"!=typeof e.createPolicy)return null;var r=null,n=\"data-tt-policy-suffix\";t.currentScript&&t.currentScript.hasAttribute(n)&&(r=t.currentScript.getAttribute(n));var o=\"dompurify\"+(r?\"#\"+r:\"\");try{return e.createPolicy(o,{createHTML:function(e){return e}})}catch(e){return console.warn(\"TrustedTypes policy \"+o+\" could not be created.\"),null}};return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:q(),r=function(t){return e(t)};if(r.version=\"2.3.0\",r.removed=[],!t||!t.document||9!==t.document.nodeType)return r.isSupported=!1,r;var n=t.document,o=t.document,i=t.DocumentFragment,a=t.HTMLTemplateElement,A=t.Node,u=t.Element,c=t.NodeFilter,l=t.NamedNodeMap,B=void 0===l?t.NamedNodeMap||t.MozNamedAttrMap:l,X=t.Text,W=t.Comment,J=t.DOMParser,Y=t.trustedTypes,Z=u.prototype,$=C(Z,\"cloneNode\"),ee=C(Z,\"nextSibling\"),te=C(Z,\"childNodes\"),re=C(Z,\"parentNode\");if(\"function\"==typeof a){var ne=o.createElement(\"template\");ne.content&&ne.content.ownerDocument&&(o=ne.content.ownerDocument)}var oe=G(Y,n),se=oe&&Pe?oe.createHTML(\"\"):\"\",ie=o,ae=ie.implementation,Ae=ie.createNodeIterator,ue=ie.createDocumentFragment,ce=ie.getElementsByTagName,le=n.importNode,de={};try{de=_(o).documentMode?o.documentMode:{}}catch(e){}var fe={};r.isSupported=\"function\"==typeof re&&ae&&void 0!==ae.createHTMLDocument&&9!==de;var he=P,pe=O,me=k,ge=R,ye=D,ve=K,we=M,be=null,Be=j({},[].concat(V(x),V(E),V(N),V(F),V(S))),je=null,_e=j({},[].concat(V(L),V(T),V(H),V(I))),Ce=null,xe=null,Ee=!0,Ne=!0,Qe=!1,Fe=!1,Ue=!1,Se=!1,Le=!1,Te=!1,He=!1,Ie=!0,Pe=!1,Oe=!0,ke=!0,Re=!1,Me={},De=j({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]),Ke=null,ze=j({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]),Ve=null,qe=j({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ge=\"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML\",Xe=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\",We=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\",Je=We,Ye=!1,Ze=null,$e=o.createElement(\"form\"),et=function(e){Ze&&Ze===e||(e&&\"object\"===(void 0===e?\"undefined\":z(e))||(e={}),e=_(e),be=\"ALLOWED_TAGS\"in e?j({},e.ALLOWED_TAGS):Be,je=\"ALLOWED_ATTR\"in e?j({},e.ALLOWED_ATTR):_e,Ve=\"ADD_URI_SAFE_ATTR\"in e?j(_(qe),e.ADD_URI_SAFE_ATTR):qe,Ke=\"ADD_DATA_URI_TAGS\"in e?j(_(ze),e.ADD_DATA_URI_TAGS):ze,Ce=\"FORBID_TAGS\"in e?j({},e.FORBID_TAGS):{},xe=\"FORBID_ATTR\"in e?j({},e.FORBID_ATTR):{},Me=\"USE_PROFILES\"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,Qe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=e.SAFE_FOR_TEMPLATES||!1,Ue=e.WHOLE_DOCUMENT||!1,Te=e.RETURN_DOM||!1,He=e.RETURN_DOM_FRAGMENT||!1,Ie=!1!==e.RETURN_DOM_IMPORT,Pe=e.RETURN_TRUSTED_TYPE||!1,Le=e.FORCE_BODY||!1,Oe=!1!==e.SANITIZE_DOM,ke=!1!==e.KEEP_CONTENT,Re=e.IN_PLACE||!1,we=e.ALLOWED_URI_REGEXP||we,Je=e.NAMESPACE||We,Fe&&(Ne=!1),He&&(Te=!0),Me&&(be=j({},[].concat(V(S))),je=[],!0===Me.html&&(j(be,x),j(je,L)),!0===Me.svg&&(j(be,E),j(je,T),j(je,I)),!0===Me.svgFilters&&(j(be,N),j(je,T),j(je,I)),!0===Me.mathMl&&(j(be,F),j(je,H),j(je,I))),e.ADD_TAGS&&(be===Be&&(be=_(be)),j(be,e.ADD_TAGS)),e.ADD_ATTR&&(je===_e&&(je=_(je)),j(je,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&j(Ve,e.ADD_URI_SAFE_ATTR),ke&&(be[\"#text\"]=!0),Ue&&j(be,[\"html\",\"head\",\"body\"]),be.table&&(j(be,[\"tbody\"]),delete Ce.tbody),s&&s(e),Ze=e)},tt=j({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),rt=j({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),nt=j({},E);j(nt,N),j(nt,Q);var ot=j({},F);j(ot,U);var st=function(e){var t=re(e);t&&t.tagName||(t={namespaceURI:We,tagName:\"template\"});var r=p(e.tagName),n=p(t.tagName);if(e.namespaceURI===Xe)return t.namespaceURI===We?\"svg\"===r:t.namespaceURI===Ge?\"svg\"===r&&(\"annotation-xml\"===n||tt[n]):Boolean(nt[r]);if(e.namespaceURI===Ge)return t.namespaceURI===We?\"math\"===r:t.namespaceURI===Xe?\"math\"===r&&rt[n]:Boolean(ot[r]);if(e.namespaceURI===We){if(t.namespaceURI===Xe&&!rt[n])return!1;if(t.namespaceURI===Ge&&!tt[n])return!1;var o=j({},[\"title\",\"style\",\"font\",\"a\",\"script\"]);return!ot[r]&&(o[r]||!nt[r])}return!1},it=function(e){h(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=se}catch(t){e.remove()}}},at=function(e,t){try{h(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!je[e])if(Te||He)try{it(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},At=function(e){var t=void 0,r=void 0;if(Le)e=\"\u003Cremove>\u003C\u002Fremove>\"+e;else{var n=m(e,\u002F^[\\r\\n\\t ]+\u002F);r=n&&n[0]}var s=oe?oe.createHTML(e):e;if(Je===We)try{t=(new J).parseFromString(s,\"text\u002Fhtml\")}catch(e){}if(!t||!t.documentElement){t=ae.createDocument(Je,\"template\",null);try{t.documentElement.innerHTML=Ye?\"\":s}catch(e){}}var i=t.body||t.documentElement;return e&&r&&i.insertBefore(o.createTextNode(r),i.childNodes[0]||null),Je===We?ce.call(t,Ue?\"html\":\"body\")[0]:Ue?t.documentElement:i},ut=function(e){return Ae.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},ct=function(e){return!(e instanceof X||e instanceof W||\"string\"==typeof e.nodeName&&\"string\"==typeof e.textContent&&\"function\"==typeof e.removeChild&&e.attributes instanceof B&&\"function\"==typeof e.removeAttribute&&\"function\"==typeof e.setAttribute&&\"string\"==typeof e.namespaceURI&&\"function\"==typeof e.insertBefore)},lt=function(e){return\"object\"===(void 0===A?\"undefined\":z(A))?e instanceof A:e&&\"object\"===(void 0===e?\"undefined\":z(e))&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},dt=function(e,t,n){fe[e]&&d(fe[e],(function(e){e.call(r,t,n,Ze)}))},ft=function(e){var t=void 0;if(dt(\"beforeSanitizeElements\",e,null),ct(e))return it(e),!0;if(m(e.nodeName,\u002F[\\u0080-\\uFFFF]\u002F))return it(e),!0;var n=p(e.nodeName);if(dt(\"uponSanitizeElement\",e,{tagName:n,allowedTags:be}),!lt(e.firstElementChild)&&(!lt(e.content)||!lt(e.content.firstElementChild))&&w(\u002F\u003C[\u002F\\w]\u002Fg,e.innerHTML)&&w(\u002F\u003C[\u002F\\w]\u002Fg,e.textContent))return it(e),!0;if(!be[n]||Ce[n]){if(ke&&!De[n]){var o=re(e)||e.parentNode,s=te(e)||e.childNodes;if(s&&o)for(var i=s.length-1;i>=0;--i)o.insertBefore($(s[i],!0),ee(e))}return it(e),!0}return e instanceof u&&!st(e)?(it(e),!0):\"noscript\"!==n&&\"noembed\"!==n||!w(\u002F\u003C\\\u002Fno(script|embed)\u002Fi,e.innerHTML)?(Fe&&3===e.nodeType&&(t=e.textContent,t=g(t,he,\" \"),t=g(t,pe,\" \"),e.textContent!==t&&(h(r.removed,{element:e.cloneNode()}),e.textContent=t)),dt(\"afterSanitizeElements\",e,null),!1):(it(e),!0)},ht=function(e,t,r){if(Oe&&(\"id\"===t||\"name\"===t)&&(r in o||r in $e))return!1;if(Ne&&!xe[t]&&w(me,t));else if(Ee&&w(ge,t));else{if(!je[t]||xe[t])return!1;if(Ve[t]);else if(w(we,g(r,ve,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==y(r,\"data:\")||!Ke[e])if(Qe&&!w(ye,g(r,ve,\"\")));else if(r)return!1}return!0},pt=function(e){var t=void 0,n=void 0,o=void 0,s=void 0;dt(\"beforeSanitizeAttributes\",e,null);var i=e.attributes;if(i){var a={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:je};for(s=i.length;s--;){var A=t=i[s],u=A.name,c=A.namespaceURI;if(n=v(t.value),o=p(u),a.attrName=o,a.attrValue=n,a.keepAttr=!0,a.forceKeepAttr=void 0,dt(\"uponSanitizeAttribute\",e,a),n=a.attrValue,!a.forceKeepAttr&&(at(u,e),a.keepAttr))if(w(\u002F\\\u002F>\u002Fi,n))at(u,e);else{Fe&&(n=g(n,he,\" \"),n=g(n,pe,\" \"));var l=e.nodeName.toLowerCase();if(ht(l,o,n))try{c?e.setAttributeNS(c,u,n):e.setAttribute(u,n),f(r.removed)}catch(e){}}}dt(\"afterSanitizeAttributes\",e,null)}},mt=function e(t){var r=void 0,n=ut(t);for(dt(\"beforeSanitizeShadowDOM\",t,null);r=n.nextNode();)dt(\"uponSanitizeShadowNode\",r,null),ft(r)||(r.content instanceof i&&e(r.content),pt(r));dt(\"afterSanitizeShadowDOM\",t,null)};return r.sanitize=function(e,o){var s=void 0,a=void 0,u=void 0,c=void 0,l=void 0;if((Ye=!e)&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!lt(e)){if(\"function\"!=typeof e.toString)throw b(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw b(\"dirty is not a string, aborting\")}if(!r.isSupported){if(\"object\"===z(t.toStaticHTML)||\"function\"==typeof t.toStaticHTML){if(\"string\"==typeof e)return t.toStaticHTML(e);if(lt(e))return t.toStaticHTML(e.outerHTML)}return e}if(Se||et(o),r.removed=[],\"string\"==typeof e&&(Re=!1),Re);else if(e instanceof A)1===(a=(s=At(\"\\x3c!----\\x3e\")).ownerDocument.importNode(e,!0)).nodeType&&\"BODY\"===a.nodeName||\"HTML\"===a.nodeName?s=a:s.appendChild(a);else{if(!Te&&!Fe&&!Ue&&-1===e.indexOf(\"\u003C\"))return oe&&Pe?oe.createHTML(e):e;if(!(s=At(e)))return Te?null:se}s&&Le&&it(s.firstChild);for(var d=ut(Re?e:s);u=d.nextNode();)3===u.nodeType&&u===c||ft(u)||(u.content instanceof i&&mt(u.content),pt(u),c=u);if(c=null,Re)return e;if(Te){if(He)for(l=ue.call(s.ownerDocument);s.firstChild;)l.appendChild(s.firstChild);else l=s;return Ie&&(l=le.call(n,l,!0)),l}var f=Ue?s.outerHTML:s.innerHTML;return Fe&&(f=g(f,he,\" \"),f=g(f,pe,\" \")),oe&&Pe?oe.createHTML(f):f},r.setConfig=function(e){et(e),Se=!0},r.clearConfig=function(){Ze=null,Se=!1},r.isValidAttribute=function(e,t,r){Ze||et({});var n=p(e),o=p(t);return ht(n,o,r)},r.addHook=function(e,t){\"function\"==typeof t&&(fe[e]=fe[e]||[],h(fe[e],t))},r.removeHook=function(e){fe[e]&&f(fe[e])},r.removeHooks=function(e){fe[e]&&(fe[e]=[])},r.removeAllHooks=function(){fe={}},r}()}()},\".\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js\":function(e){var t;t=function(){\"use strict\";function e(e){return\"function\"==typeof e}var t=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},r=0,n=void 0,o=void 0,s=function(e,t){d[r]=e,d[r+1]=t,2===(r+=2)&&(o?o(f):y())},i=\"undefined\"!=typeof window?window:void 0,a=i||{},A=a.MutationObserver||a.WebKitMutationObserver,u=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),c=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function l(){var e=setTimeout;return function(){return e(f,1)}}var d=new Array(1e3);function f(){for(var e=0;e\u003Cr;e+=2)(0,d[e])(d[e+1]),d[e]=void 0,d[e+1]=void 0;r=0}var h,p,m,g,y=void 0;function v(e,t){var r=this,n=new this.constructor(B);void 0===n[b]&&L(n);var o=r._state;if(o){var i=arguments[o-1];s((function(){return U(o,n,i,r._result)}))}else Q(r,n,e,t);return n}function w(e){if(e&&\"object\"==typeof e&&e.constructor===this)return e;var t=new this(B);return C(t,e),t}u?y=function(){return process.nextTick(f)}:A?(p=0,m=new A(f),g=document.createTextNode(\"\"),m.observe(g,{characterData:!0}),y=function(){g.data=p=++p%2}):c?((h=new MessageChannel).port1.onmessage=f,y=function(){return h.port2.postMessage(0)}):y=void 0===i?function(){try{var e=Function(\"return this\")().require(\"vertx\");return void 0!==(n=e.runOnLoop||e.runOnContext)?function(){n(f)}:l()}catch(e){return l()}}():l();var b=Math.random().toString(36).substring(2);function B(){}var j=void 0;function _(t,r,n){r.constructor===t.constructor&&n===v&&r.constructor.resolve===w?function(e,t){1===t._state?E(e,t._result):2===t._state?N(e,t._result):Q(t,void 0,(function(t){return C(e,t)}),(function(t){return N(e,t)}))}(t,r):void 0===n?E(t,r):e(n)?function(e,t,r){s((function(e){var n=!1,o=function(r,o,s,i){try{r.call(o,(function(r){n||(n=!0,t!==r?C(e,r):E(e,r))}),(function(t){n||(n=!0,N(e,t))}))}catch(e){return e}}(r,t,0,0,e._label);!n&&o&&(n=!0,N(e,o))}),e)}(t,r,n):E(t,r)}function C(e,t){if(e===t)N(e,new TypeError(\"You cannot resolve a promise with itself\"));else if(o=typeof(n=t),null===n||\"object\"!==o&&\"function\"!==o)E(e,t);else{var r=void 0;try{r=t.then}catch(t){return void N(e,t)}_(e,t,r)}var n,o}function x(e){e._onerror&&e._onerror(e._result),F(e)}function E(e,t){e._state===j&&(e._result=t,e._state=1,0!==e._subscribers.length&&s(F,e))}function N(e,t){e._state===j&&(e._state=2,e._result=t,s(x,e))}function Q(e,t,r,n){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+1]=r,o[i+2]=n,0===i&&e._state&&s(F,e)}function F(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var n=void 0,o=void 0,s=e._result,i=0;i\u003Ct.length;i+=3)n=t[i],o=t[i+r],n?U(r,n,o,s):o(s);e._subscribers.length=0}}function U(t,r,n,o){var s=e(n),i=void 0,a=void 0,A=!0;if(s){try{i=n(o)}catch(e){A=!1,a=e}if(r===i)return void N(r,new TypeError(\"A promises callback cannot return that same promise.\"))}else i=o;r._state!==j||(s&&A?C(r,i):!1===A?N(r,a):1===t?E(r,i):2===t&&N(r,i))}var S=0;function L(e){e[b]=S++,e._state=void 0,e._result=void 0,e._subscribers=[]}var T=function(){function e(e,r){this._instanceConstructor=e,this.promise=new e(B),this.promise[b]||L(this.promise),t(r)?(this.length=r.length,this._remaining=r.length,this._result=new Array(this.length),0===this.length?E(this.promise,this._result):(this.length=this.length||0,this._enumerate(r),0===this._remaining&&E(this.promise,this._result))):N(this.promise,new Error(\"Array Methods must be provided an Array\"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===j&&t\u003Ce.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var r=this._instanceConstructor,n=r.resolve;if(n===w){var o=void 0,s=void 0,i=!1;try{o=e.then}catch(e){i=!0,s=e}if(o===v&&e._state!==j)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(r===H){var a=new r(B);i?N(a,s):_(a,e,o),this._willSettleAt(a,t)}else this._willSettleAt(new r((function(t){return t(e)})),t)}else this._willSettleAt(n(e),t)},e.prototype._settledAt=function(e,t,r){var n=this.promise;n._state===j&&(this._remaining--,2===e?N(n,r):this._result[t]=r),0===this._remaining&&E(n,this._result)},e.prototype._willSettleAt=function(e,t){var r=this;Q(e,void 0,(function(e){return r._settledAt(1,t,e)}),(function(e){return r._settledAt(2,t,e)}))},e}(),H=function(){function t(e){this[b]=S++,this._result=this._state=void 0,this._subscribers=[],B!==e&&(\"function\"!=typeof e&&function(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}(),this instanceof t?function(e,t){try{t((function(t){C(e,t)}),(function(t){N(e,t)}))}catch(t){N(e,t)}}(this,e):function(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}())}return t.prototype.catch=function(e){return this.then(null,e)},t.prototype.finally=function(t){var r=this,n=r.constructor;return e(t)?r.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):r.then(t,t)},t}();return H.prototype.then=v,H.all=function(e){return new T(this,e).promise},H.race=function(e){var r=this;return t(e)?new r((function(t,n){for(var o=e.length,s=0;s\u003Co;s++)r.resolve(e[s]).then(t,n)})):new r((function(e,t){return t(new TypeError(\"You must pass an array to race.\"))}))},H.resolve=w,H.reject=function(e){var t=new this(B);return N(t,e),t},H._setScheduler=function(e){o=e},H._setAsap=function(e){s=e},H._asap=s,H.polyfill=function(){var e=void 0;if(\"undefined\"!=typeof global)e=global;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(e){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var t=e.Promise;if(t){var r=null;try{r=Object.prototype.toString.call(t.resolve())}catch(e){}if(\"[object Promise]\"===r&&!t.cast)return}e.Promise=H},H.Promise=H,H},e.exports=t()},\".\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{Deflate:function(){return ve},AsyncDeflate:function(){return we},deflate:function(){return be},deflateSync:function(){return Be},Inflate:function(){return je},AsyncInflate:function(){return _e},inflate:function(){return Ce},inflateSync:function(){return xe},Gzip:function(){return Ee},AsyncGzip:function(){return Ne},gzip:function(){return Qe},gzipSync:function(){return Fe},Gunzip:function(){return Ue},AsyncGunzip:function(){return Se},gunzip:function(){return Le},gunzipSync:function(){return Te},Zlib:function(){return He},AsyncZlib:function(){return Ie},zlib:function(){return Pe},zlibSync:function(){return Oe},Unzlib:function(){return ke},AsyncUnzlib:function(){return Re},unzlib:function(){return Me},unzlibSync:function(){return De},compress:function(){return Qe},AsyncCompress:function(){return Ne},compressSync:function(){return Fe},Compress:function(){return Ee},Decompress:function(){return Ke},AsyncDecompress:function(){return ze},decompress:function(){return Ve},decompressSync:function(){return qe},strToU8:function(){return Xe},strFromU8:function(){return We},zip:function(){return tt},zipSync:function(){return rt},unzip:function(){return nt},unzipSync:function(){return ot}});var n={},o=Uint8Array,s=Uint16Array,i=Uint32Array,a=new o([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),A=new o([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),u=new o([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=function(e,t){for(var r=new s(31),n=0;n\u003C31;++n)r[n]=t+=1\u003C\u003Ce[n-1];var o=new i(r[30]);for(n=1;n\u003C30;++n)for(var a=r[n];a\u003Cr[n+1];++a)o[a]=a-r[n]\u003C\u003C5|n;return[r,o]},l=c(a,2),d=l[0],f=l[1];d[28]=258,f[258]=28;for(var h=c(A,0),p=h[0],m=h[1],g=new s(32768),y=0;y\u003C32768;++y){var v=(43690&y)>>>1|(21845&y)\u003C\u003C1;v=(61680&(v=(52428&v)>>>2|(13107&v)\u003C\u003C2))>>>4|(3855&v)\u003C\u003C4,g[y]=((65280&v)>>>8|(255&v)\u003C\u003C8)>>>1}var w=function(e,t,r){for(var n=e.length,o=0,i=new s(t);o\u003Cn;++o)++i[e[o]-1];var a,A=new s(t);for(o=0;o\u003Ct;++o)A[o]=A[o-1]+i[o-1]\u003C\u003C1;if(r){a=new s(1\u003C\u003Ct);var u=15-t;for(o=0;o\u003Cn;++o)if(e[o])for(var c=o\u003C\u003C4|e[o],l=t-e[o],d=A[e[o]-1]++\u003C\u003Cl,f=d|(1\u003C\u003Cl)-1;d\u003C=f;++d)a[g[d]>>>u]=c}else for(a=new s(n),o=0;o\u003Cn;++o)a[o]=g[A[e[o]-1]++]>>>15-e[o];return a},b=new o(288);for(y=0;y\u003C144;++y)b[y]=8;for(y=144;y\u003C256;++y)b[y]=9;for(y=256;y\u003C280;++y)b[y]=7;for(y=280;y\u003C288;++y)b[y]=8;var B=new o(32);for(y=0;y\u003C32;++y)B[y]=5;var j=w(b,9,0),_=w(b,9,1),C=w(B,5,0),x=w(B,5,1),E=function(e){for(var t=e[0],r=1;r\u003Ce.length;++r)e[r]>t&&(t=e[r]);return t},N=function(e,t,r){var n=t\u002F8>>0;return(e[n]|e[n+1]\u003C\u003C8)>>>(7&t)&r},Q=function(e,t){var r=t\u002F8>>0;return(e[r]|e[r+1]\u003C\u003C8|e[r+2]\u003C\u003C16)>>>(7&t)},F=function(e){return(e\u002F8>>0)+(7&e&&1)},U=function(e,t,r){(null==t||t\u003C0)&&(t=0),(null==r||r>e.length)&&(r=e.length);var n=new(e instanceof s?s:e instanceof i?i:o)(r-t);return n.set(e.subarray(t,r)),n},S=function(e,t,r){var n=e.length,s=!t||r,i=!r||r.i;r||(r={}),t||(t=new o(3*n));var c=function(e){var r=t.length;if(e>r){var n=new o(Math.max(2*r,e));n.set(t),t=n}},l=r.f||0,f=r.p||0,h=r.b||0,m=r.l,g=r.d,y=r.m,v=r.n,b=8*n;do{if(!m){r.f=l=N(e,f,1);var B=N(e,f+1,3);if(f+=3,!B){var j=e[(M=F(f)+4)-4]|e[M-3]\u003C\u003C8,C=M+j;if(C>n){if(i)throw\"unexpected EOF\";break}s&&c(h+j),t.set(e.subarray(M,C),h),r.b=h+=j,r.p=f=8*C;continue}if(1==B)m=_,g=x,y=9,v=5;else{if(2!=B)throw\"invalid block type\";var S=N(e,f,31)+257,L=N(e,f+10,15)+4,T=S+N(e,f+5,31)+1;f+=14;for(var H=new o(T),I=new o(19),P=0;P\u003CL;++P)I[u[P]]=N(e,f+3*P,7);f+=3*L;var O=E(I),k=(1\u003C\u003CO)-1;if(!i&&f+T*(O+7)>b)break;var R=w(I,O,1);for(P=0;P\u003CT;){var M,D=R[N(e,f,k)];if(f+=15&D,(M=D>>>4)\u003C16)H[P++]=M;else{var K=0,z=0;for(16==M?(z=3+N(e,f,3),f+=2,K=H[P-1]):17==M?(z=3+N(e,f,7),f+=3):18==M&&(z=11+N(e,f,127),f+=7);z--;)H[P++]=K}}var V=H.subarray(0,S),q=H.subarray(S);y=E(V),v=E(q),m=w(V,y,1),g=w(q,v,1)}if(f>b)throw\"unexpected EOF\"}s&&c(h+131072);for(var G=(1\u003C\u003Cy)-1,X=(1\u003C\u003Cv)-1,W=y+v+18;i||f+W\u003Cb;){var J=(K=m[Q(e,f)&G])>>>4;if((f+=15&K)>b)throw\"unexpected EOF\";if(!K)throw\"invalid length\u002Fliteral\";if(J\u003C256)t[h++]=J;else{if(256==J){m=null;break}var Y=J-254;if(J>264){var Z=a[P=J-257];Y=N(e,f,(1\u003C\u003CZ)-1)+d[P],f+=Z}var $=g[Q(e,f)&X],ee=$>>>4;if(!$)throw\"invalid distance\";if(f+=15&$,q=p[ee],ee>3&&(Z=A[ee],q+=Q(e,f)&(1\u003C\u003CZ)-1,f+=Z),f>b)throw\"unexpected EOF\";s&&c(h+131072);for(var te=h+Y;h\u003Cte;h+=4)t[h]=t[h-q],t[h+1]=t[h+1-q],t[h+2]=t[h+2-q],t[h+3]=t[h+3-q];h=te}}r.l=m,r.p=f,r.b=h,m&&(l=1,r.m=y,r.d=g,r.n=v)}while(!l);return h==t.length?t:U(t,0,h)},L=function(e,t,r){r\u003C\u003C=7&t;var n=t\u002F8>>0;e[n]|=r,e[n+1]|=r>>>8},T=function(e,t,r){r\u003C\u003C=7&t;var n=t\u002F8>>0;e[n]|=r,e[n+1]|=r>>>8,e[n+2]|=r>>>16},H=function(e,t){for(var r=[],n=0;n\u003Ce.length;++n)e[n]&&r.push({s:n,f:e[n]});var i=r.length,a=r.slice();if(!i)return[new o(0),0];if(1==i){var A=new o(r[0].s+1);return A[r[0].s]=1,[A,1]}r.sort((function(e,t){return e.f-t.f})),r.push({s:-1,f:25001});var u=r[0],c=r[1],l=0,d=1,f=2;for(r[0]={s:-1,f:u.f+c.f,l:u,r:c};d!=i-1;)u=r[r[l].f\u003Cr[f].f?l++:f++],c=r[l!=d&&r[l].f\u003Cr[f].f?l++:f++],r[d++]={s:-1,f:u.f+c.f,l:u,r:c};var h=a[0].s;for(n=1;n\u003Ci;++n)a[n].s>h&&(h=a[n].s);var p=new s(h+1),m=I(r[d-1],p,0);if(m>t){n=0;var g=0,y=m-t,v=1\u003C\u003Cy;for(a.sort((function(e,t){return p[t.s]-p[e.s]||e.f-t.f}));n\u003Ci;++n){var w=a[n].s;if(!(p[w]>t))break;g+=v-(1\u003C\u003Cm-p[w]),p[w]=t}for(g>>>=y;g>0;){var b=a[n].s;p[b]\u003Ct?g-=1\u003C\u003Ct-p[b]++-1:++n}for(;n>=0&&g;--n){var B=a[n].s;p[B]==t&&(--p[B],++g)}m=t}return[new o(p),m]},I=function(e,t,r){return-1==e.s?Math.max(I(e.l,t,r+1),I(e.r,t,r+1)):t[e.s]=r},P=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new s(++t),n=0,o=e[0],i=1,a=function(e){r[n++]=e},A=1;A\u003C=t;++A)if(e[A]==o&&A!=t)++i;else{if(!o&&i>2){for(;i>138;i-=138)a(32754);i>2&&(a(i>10?i-11\u003C\u003C5|28690:i-3\u003C\u003C5|12305),i=0)}else if(i>3){for(a(o),--i;i>6;i-=6)a(8304);i>2&&(a(i-3\u003C\u003C5|8208),i=0)}for(;i--;)a(o);i=1,o=e[A]}return[r.subarray(0,n),t]},O=function(e,t){for(var r=0,n=0;n\u003Ct.length;++n)r+=e[n]*t[n];return r},k=function(e,t,r){var n=r.length,o=F(t+2);e[o]=255&n,e[o+1]=n>>>8,e[o+2]=255^e[o],e[o+3]=255^e[o+1];for(var s=0;s\u003Cn;++s)e[o+s+4]=r[s];return 8*(o+4+n)},R=function(e,t,r,n,o,i,c,l,d,f,h){L(t,h++,r),++o[256];for(var p=H(o,15),m=p[0],g=p[1],y=H(i,15),v=y[0],_=y[1],x=P(m),E=x[0],N=x[1],Q=P(v),F=Q[0],U=Q[1],S=new s(19),I=0;I\u003CE.length;++I)S[31&E[I]]++;for(I=0;I\u003CF.length;++I)S[31&F[I]]++;for(var R=H(S,7),M=R[0],D=R[1],K=19;K>4&&!M[u[K-1]];--K);var z,V,q,G,X=f+5\u003C\u003C3,W=O(o,b)+O(i,B)+c,J=O(o,m)+O(i,v)+c+14+3*K+O(S,M)+(2*S[16]+3*S[17]+7*S[18]);if(X\u003C=W&&X\u003C=J)return k(t,h,e.subarray(d,d+f));if(L(t,h,1+(J\u003CW)),h+=2,J\u003CW){z=w(m,g,0),V=m,q=w(v,_,0),G=v;var Y=w(M,D,0);for(L(t,h,N-257),L(t,h+5,U-1),L(t,h+10,K-4),h+=14,I=0;I\u003CK;++I)L(t,h+3*I,M[u[I]]);h+=3*K;for(var Z=[E,F],$=0;$\u003C2;++$){var ee=Z[$];for(I=0;I\u003Cee.length;++I){var te=31&ee[I];L(t,h,Y[te]),h+=M[te],te>15&&(L(t,h,ee[I]>>>5&127),h+=ee[I]>>>12)}}}else z=j,V=b,q=C,G=B;for(I=0;I\u003Cl;++I)if(n[I]>255){te=n[I]>>>18&31,T(t,h,z[te+257]),h+=V[te+257],te>7&&(L(t,h,n[I]>>>23&31),h+=a[te]);var re=31&n[I];T(t,h,q[re]),h+=G[re],re>3&&(T(t,h,n[I]>>>5&8191),h+=A[re])}else T(t,h,z[n[I]]),h+=V[n[I]];return T(t,h,z[256]),h+V[256]},M=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new o(0),K=function(e,t,r,n,u,c){var l=e.length,d=new o(n+l+5*(1+Math.floor(l\u002F7e3))+u),h=d.subarray(n,d.length-u),p=0;if(!t||l\u003C8)for(var g=0;g\u003C=l;g+=65535){var y=g+65535;y\u003Cl?p=k(h,p,e.subarray(g,y)):(h[g]=c,p=k(h,p,e.subarray(g,l)))}else{for(var v=M[t-1],w=v>>>13,b=8191&v,B=(1\u003C\u003Cr)-1,j=new s(32768),_=new s(B+1),C=Math.ceil(r\u002F3),x=2*C,E=function(t){return(e[t]^e[t+1]\u003C\u003CC^e[t+2]\u003C\u003Cx)&B},N=new i(25e3),Q=new s(288),S=new s(32),L=0,T=0,H=(g=0,0),I=0,P=0;g\u003Cl;++g){var O=E(g),K=32767&g,z=_[O];if(j[K]=z,_[O]=K,I\u003C=g){var V=l-g;if((L>7e3||H>24576)&&V>423){p=R(e,h,0,N,Q,S,T,H,P,g-P,p),H=L=T=0,P=g;for(var q=0;q\u003C286;++q)Q[q]=0;for(q=0;q\u003C30;++q)S[q]=0}var G=2,X=0,W=b,J=K-z&32767;if(V>2&&O==E(g-J))for(var Y=Math.min(w,V)-1,Z=Math.min(32767,g),$=Math.min(258,V);J\u003C=Z&&--W&&K!=z;){if(e[g+G]==e[g+G-J]){for(var ee=0;ee\u003C$&&e[g+ee]==e[g+ee-J];++ee);if(ee>G){if(G=ee,X=J,ee>Y)break;var te=Math.min(J,ee-2),re=0;for(q=0;q\u003Cte;++q){var ne=g-J+q+32768&32767,oe=ne-j[ne]+32768&32767;oe>re&&(re=oe,z=ne)}}}J+=(K=z)-(z=j[K])+32768&32767}if(X){N[H++]=268435456|f[G]\u003C\u003C18|m[X];var se=31&f[G],ie=31&m[X];T+=a[se]+A[ie],++Q[257+se],++S[ie],I=g+G,++L}else N[H++]=e[g],++Q[e[g]]}}p=R(e,h,c,N,Q,S,T,H,P,g-P,p),c||(p=k(h,p,D))}return U(d,0,n+F(p)+u)},z=function(){for(var e=new i(256),t=0;t\u003C256;++t){for(var r=t,n=9;--n;)r=(1&r&&3988292384)^r>>>1;e[t]=r}return e}(),V=function(){var e=4294967295;return{p:function(t){for(var r=e,n=0;n\u003Ct.length;++n)r=z[255&r^t[n]]^r>>>8;e=r},d:function(){return 4294967295^e}}},q=function(){var e=1,t=0;return{p:function(r){for(var n=e,o=t,s=r.length,i=0;i!=s;){for(var a=Math.min(i+5552,s);i\u003Ca;++i)o+=n+=r[i];n%=65521,o%=65521}e=n,t=o},d:function(){return(e>>>8\u003C\u003C16|(255&t)\u003C\u003C8|t>>>8)+2*((255&e)\u003C\u003C23)}}},G=function(e,t,r,n,o){return K(e,null==t.level?6:t.level,null==t.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+t.mem,r,n,!o)},X=function(e,t){var r={};for(var n in e)r[n]=e[n];for(var n in t)r[n]=t[n];return r},W=function(e,t,r){for(var n=e(),o=e.toString(),s=o.slice(o.indexOf(\"[\")+1,o.lastIndexOf(\"]\")).replace(\u002F \u002Fg,\"\").split(\",\"),i=0;i\u003Cn.length;++i){var a=n[i],A=s[i];if(\"function\"==typeof a){t+=\";\"+A+\"=\";var u=a.toString();if(a.prototype)if(-1!=u.indexOf(\"[native code]\")){var c=u.indexOf(\" \",8)+1;t+=u.slice(c,u.indexOf(\"(\",c))}else for(var l in t+=u,a.prototype)t+=\";\"+A+\".prototype.\"+l+\"=\"+a.prototype[l].toString();else t+=u}else r[A]=a}return[t,r]},J=[],Y=function(e,t,r,a){var A;if(!J[r]){for(var u=\"\",c={},l=e.length-1,d=0;d\u003Cl;++d)u=(A=W(e[d],u,c))[0],c=A[1];J[r]=W(e[l],u,c)}var f=X({},J[r][1]);return function(e,t,r,o,s){var i=n[t]||(n[t]=URL.createObjectURL(new Blob([e],{type:\"text\u002Fjavascript\"}))),a=new Worker(i);return a.onerror=function(e){return s(e.error,null)},a.onmessage=function(e){return s(null,e.data)},a.postMessage(r,o),a}(J[r][0]+\";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=\"+t.toString()+\"}\",r,f,function(e){var t=[];for(var r in e)(e[r]instanceof o||e[r]instanceof s||e[r]instanceof i)&&t.push((e[r]=new e[r].constructor(e[r])).buffer);return t}(f),a)},Z=function(){return[o,s,i,a,A,u,d,p,_,x,g,w,E,N,Q,F,U,S,xe,oe,se]},$=function(){return[o,s,i,a,A,u,f,m,j,b,C,B,g,M,D,w,L,T,H,I,P,O,k,R,F,U,K,G,Be,oe]},ee=function(){return[de,pe,le,V,z]},te=function(){return[fe,he]},re=function(){return[me,le,q]},ne=function(){return[ge]},oe=function(e){return postMessage(e,[e.buffer])},se=function(e){return e&&e.size&&new o(e.size)},ie=function(e,t,r,n,s,i){var a=Y(r,n,s,(function(e,t){a.terminate(),i(e,t)}));return t.consume||(e=new o(e)),a.postMessage([e,t],[e.buffer]),function(){a.terminate()}},ae=function(e){return e.ondata=function(e,t){return postMessage([e,t],[e.buffer])},function(t){return e.push(t.data[0],t.data[1])}},Ae=function(e,t,r,n,o){var s,i=Y(e,n,o,(function(e,r){e?(i.terminate(),t.ondata.call(t,e)):(r[1]&&i.terminate(),t.ondata.call(t,e,r[0],r[1]))}));i.postMessage(r),t.push=function(e,r){if(s)throw\"stream finished\";if(!t.ondata)throw\"no stream handler\";i.postMessage([e,s=r],[e.buffer])},t.terminate=function(){i.terminate()}},ue=function(e,t){return e[t]|e[t+1]\u003C\u003C8},ce=function(e,t){return(e[t]|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16)+2*(e[t+3]\u003C\u003C23)},le=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},de=function(e,t){var r=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level\u003C2?4:9==t.level?2:0,e[9]=3,0!=t.mtime&&le(e,4,Math.floor(new Date(t.mtime||Date.now())\u002F1e3)),r){e[3]=8;for(var n=0;n\u003C=r.length;++n)e[n+10]=r.charCodeAt(n)}},fe=function(e){if(31!=e[0]||139!=e[1]||8!=e[2])throw\"invalid gzip data\";var t=e[3],r=10;4&t&&(r+=e[10]|2+(e[11]\u003C\u003C8));for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(2&t)},he=function(e){var t=e.length;return(e[t-4]|e[t-3]\u003C\u003C8|e[t-2]\u003C\u003C16)+2*(e[t-1]\u003C\u003C23)},pe=function(e){return 10+(e.filename&&e.filename.length+1||0)},me=function(e,t){var r=t.level,n=0==r?0:r\u003C6?1:9==r?3:2;e[0]=120,e[1]=n\u003C\u003C6|(n?32-2*n:1)},ge=function(e){if(8!=(15&e[0])||e[0]>>>4>7||(e[0]\u003C\u003C8|e[1])%31)throw\"invalid zlib data\";if(32&e[1])throw\"invalid zlib data: preset dictionaries not supported\"};function ye(e,t){return t||\"function\"!=typeof e||(t=e,e={}),this.ondata=t,e}var ve=function(){function e(e,t){t||\"function\"!=typeof e||(t=e,e={}),this.ondata=t,this.o=e||{}}return e.prototype.p=function(e,t){this.ondata(G(e,this.o,0,0,!t),t)},e.prototype.push=function(e,t){if(this.d)throw\"stream finished\";if(!this.ondata)throw\"no stream handler\";this.d=t,this.p(e,t||!1)},e}(),we=function(){return function(e,t){Ae([$,function(){return[ae,ve]}],this,ye.call(this,e,t),(function(e){var t=new ve(e.data);onmessage=ae(t)}),6)}}();function be(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$],(function(e){return oe(Be(e.data[0],e.data[1]))}),0,r)}function Be(e,t){return void 0===t&&(t={}),G(e,t,0,0)}var je=function(){function e(e){this.s={},this.p=new o(0),this.ondata=e}return e.prototype.e=function(e){if(this.d)throw\"stream finished\";if(!this.ondata)throw\"no stream handler\";var t=this.p.length,r=new o(t+e.length);r.set(this.p),r.set(e,t),this.p=r},e.prototype.c=function(e){this.d=this.s.i=e||!1;var t=this.s.b,r=S(this.p,this.o,this.s);this.ondata(U(r,t,this.s.b),this.d),this.o=U(r,this.s.b-32768),this.s.b=this.o.length,this.p=U(this.p,this.s.p\u002F8>>0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}(),_e=function(){return function(e){this.ondata=e,Ae([Z,function(){return[ae,je]}],this,0,(function(){var e=new je;onmessage=ae(e)}),7)}}();function Ce(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z],(function(e){return oe(xe(e.data[0],se(e.data[1])))}),1,r)}function xe(e,t){return S(e,t)}var Ee=function(){function e(e,t){this.c=V(),this.l=0,this.v=1,ve.call(this,e,t)}return e.prototype.push=function(e,t){ve.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e),this.l+=e.length;var r=G(e,this.o,this.v&&pe(this.o),t&&8,!t);this.v&&(de(r,this.o),this.v=0),t&&(le(r,r.length-8,this.c.d()),le(r,r.length-4,this.l)),this.ondata(r,t)},e}(),Ne=function(){return function(e,t){Ae([$,ee,function(){return[ae,ve,Ee]}],this,ye.call(this,e,t),(function(e){var t=new Ee(e.data);onmessage=ae(t)}),8)}}();function Qe(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$,ee,function(){return[Fe]}],(function(e){return oe(Fe(e.data[0],e.data[1]))}),2,r)}function Fe(e,t){void 0===t&&(t={});var r=V(),n=e.length;r.p(e);var o=G(e,t,pe(t),8),s=o.length;return de(o,t),le(o,s-8,r.d()),le(o,s-4,n),o}var Ue=function(){function e(e){this.v=1,je.call(this,e)}return e.prototype.push=function(e,t){if(je.prototype.e.call(this,e),this.v){var r=fe(this.p);if(r>=this.p.length&&!t)return;this.p=this.p.subarray(r),this.v=0}if(t){if(this.p.length\u003C8)throw\"invalid gzip stream\";this.p=this.p.subarray(0,-8)}je.prototype.c.call(this,t)},e}(),Se=function(){return function(e){this.ondata=e,Ae([Z,te,function(){return[ae,je,Ue]}],this,0,(function(){var e=new Ue;onmessage=ae(e)}),9)}}();function Le(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z,te,function(){return[Te]}],(function(e){return oe(Te(e.data[0]))}),3,r)}function Te(e,t){return S(e.subarray(fe(e),-8),t||new o(he(e)))}var He=function(){function e(e,t){this.c=q(),this.v=1,ve.call(this,e,t)}return e.prototype.push=function(e,t){ve.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e);var r=G(e,this.o,this.v&&2,t&&4,!t);this.v&&(me(r,this.o),this.v=0),t&&le(r,r.length-4,this.c.d()),this.ondata(r,t)},e}(),Ie=function(){return function(e,t){Ae([$,re,function(){return[ae,ve,He]}],this,ye.call(this,e,t),(function(e){var t=new He(e.data);onmessage=ae(t)}),10)}}();function Pe(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$,re,function(){return[Oe]}],(function(e){return oe(Oe(e.data[0],e.data[1]))}),4,r)}function Oe(e,t){void 0===t&&(t={});var r=q();r.p(e);var n=G(e,t,2,4);return me(n,t),le(n,n.length-4,r.d()),n}var ke=function(){function e(e){this.v=1,je.call(this,e)}return e.prototype.push=function(e,t){if(je.prototype.e.call(this,e),this.v){if(this.p.length\u003C2&&!t)return;this.p=this.p.subarray(2),this.v=0}if(t){if(this.p.length\u003C4)throw\"invalid zlib stream\";this.p=this.p.subarray(0,-4)}je.prototype.c.call(this,t)},e}(),Re=function(){return function(e){this.ondata=e,Ae([Z,ne,function(){return[ae,je,ke]}],this,0,(function(){var e=new ke;onmessage=ae(e)}),11)}}();function Me(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z,ne,function(){return[De]}],(function(e){return oe(De(e.data[0],se(e.data[1])))}),5,r)}function De(e,t){return S((ge(e),e.subarray(2,-4)),t)}var Ke=function(){function e(e){this.G=Ue,this.I=je,this.Z=ke,this.ondata=e}return e.prototype.push=function(e,t){if(!this.ondata)throw\"no stream handler\";if(this.s)this.s.push(e,t);else{if(this.p&&this.p.length){var r=new o(this.p.length+e.length);r.set(this.p),r.set(e,this.p.length)}else this.p=e;if(this.p.length>2){var n=this,s=function(){n.ondata.apply(n,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(s):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]\u003C\u003C8|this.p[1])%31?new this.I(s):new this.Z(s),this.s.push(this.p,t),this.p=null}}},e}(),ze=function(){function e(e){this.G=Se,this.I=_e,this.Z=Re,this.ondata=e}return e.prototype.push=function(e,t){Ke.prototype.push.call(this,e,t)},e}();function Ve(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return 31==e[0]&&139==e[1]&&8==e[2]?Le(e,t,r):8!=(15&e[0])||e[0]>>4>7||(e[0]\u003C\u003C8|e[1])%31?Ce(e,t,r):Me(e,t,r)}function qe(e,t){return 31==e[0]&&139==e[1]&&8==e[2]?Te(e,t):8!=(15&e[0])||e[0]>>4>7||(e[0]\u003C\u003C8|e[1])%31?xe(e,t):De(e,t)}var Ge=function(e,t,r,n){for(var s in e){var i=e[s],a=t+s;i instanceof o?r[a]=[i,n]:Array.isArray(i)?r[a]=[i[0],X(n,i[1])]:Ge(i,a+\"\u002F\",r,n)}};function Xe(e,t){var r=e.length;if(!t&&\"undefined\"!=typeof TextEncoder)return(new TextEncoder).encode(e);for(var n=new o(e.length+(e.length>>>1)),s=0,i=function(e){n[s++]=e},a=0;a\u003Cr;++a){if(s+5>n.length){var A=new o(s+8+(r-a\u003C\u003C1));A.set(n),n=A}var u=e.charCodeAt(a);u\u003C128||t?i(u):u\u003C2048?(i(192|u>>>6),i(128|63&u)):u>55295&&u\u003C57344?(i(240|(u=65536+(1047552&u)|1023&e.charCodeAt(++a))>>>18),i(128|u>>>12&63),i(128|u>>>6&63),i(128|63&u)):(i(224|u>>>12),i(128|u>>>6&63),i(128|63&u))}return U(n,0,s)}function We(e,t){var r=\"\";if(!t&&\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(e);for(var n=0;n\u003Ce.length;){var o=e[n++];o\u003C128||t?r+=String.fromCharCode(o):o\u003C224?r+=String.fromCharCode((31&o)\u003C\u003C6|63&e[n++]):o\u003C240?r+=String.fromCharCode((15&o)\u003C\u003C12|(63&e[n++])\u003C\u003C6|63&e[n++]):(o=((15&o)\u003C\u003C18|(63&e[n++])\u003C\u003C12|(63&e[n++])\u003C\u003C6|63&e[n++])-65536,r+=String.fromCharCode(55296|o>>10,56320|1023&o))}return r}var Je=function(e,t){return t+30+ue(e,t+26)+ue(e,t+28)},Ye=function(e,t,r){var n=ue(e,t+28),o=We(e.subarray(t+46,t+46+n),!(2048&ue(e,t+8))),s=t+46+n,i=r?Ze(e,s):[ce(e,t+20),ce(e,t+24),ce(e,t+42)],a=i[0],A=i[1],u=i[2];return[ue(e,t+10),a,A,o,s+ue(e,t+30)+ue(e,t+32),u]},Ze=function(e,t){for(;1!=ue(e,t);t+=4+ue(e,t+2));return[ce(e,t+12),ce(e,t+4),ce(e,t+20)]},$e=function(e,t,r,n,o,s,i,a,A,u){var c=s.length,l=n.length;le(e,t,null!=A?33639248:67324752),t+=4,null!=A&&(e[t]=20,t+=2),e[t]=20,t+=2,e[t++]=8==u&&(1==a.level?6:a.level\u003C6?4:9==a.level?2:0),e[t++]=i&&8,e[t]=u,t+=2;var d=new Date(a.mtime||Date.now()),f=d.getFullYear()-1980;if(f\u003C0||f>119)throw\"date not in range 1980-2099\";le(e,t,2*(f\u003C\u003C24)|d.getMonth()+1\u003C\u003C21|d.getDate()\u003C\u003C16|d.getHours()\u003C\u003C11|d.getMinutes()\u003C\u003C5|d.getSeconds()>>>1),le(e,t+=4,r),le(e,t+4,l),le(e,t+8,o),le(e,t+12,c),t+=16,null!=A&&(le(e,t+=10,A),t+=4),e.set(s,t),t+=c,null==A&&e.set(n,t)},et=function(e,t,r,n,o){le(e,t,101010256),le(e,t+8,r),le(e,t+10,r),le(e,t+12,n),le(e,t+16,o)};function tt(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";var n={};Ge(e,\"\",n,t);var s=Object.keys(n),i=s.length,a=0,A=0,u=i,c=new Array(i),l=[],d=function(){for(var e=0;e\u003Cl.length;++e)l[e]()},f=function(){var e=new o(A+22),t=a,n=A-a;A=0;for(var s=0;s\u003Cu;++s){var i=c[s];try{$e(e,A,i.c,i.d,i.m,i.n,i.u,i.p,null,i.t),$e(e,a,i.c,i.d,i.m,i.n,i.u,i.p,A,i.t),a+=46+i.n.length,A+=30+i.n.length+i.d.length}catch(e){return r(e,null)}}et(e,a,c.length,n,t),r(null,e)};i||f();for(var h=function(e){var t=s[e],o=n[t],u=o[0],h=o[1],p=V(),m=u.length;p.p(u);var g=Xe(t),y=g.length,v=0==h.level?0:8,w=function(n,o){if(n)d(),r(n,null);else{var s=o.length;c[e]={t:v,d:o,m:m,c:p.d(),u:t.length!=s,n:g,p:h},a+=30+y+s,A+=76+2*y+s,--i||f()}};if(g.length>65535&&w(\"filename too long\",null),v)if(m\u003C16e4)try{w(null,Be(u,h))}catch(e){w(e,null)}else l.push(be(u,h,w));else w(null,u)},p=0;p\u003Cu;++p)h(p);return d}function rt(e,t){void 0===t&&(t={});var r={},n=[];Ge(e,\"\",r,t);var s=0,i=0;for(var a in r){var A=r[a],u=A[0],c=A[1],l=0==c.level?0:8,d=Xe(a),f=d.length;if(d.length>65535)throw\"filename too long\";var h=l?Be(u,c):u,p=h.length,m=V();m.p(u),n.push({t:l,d:h,m:u.length,c:m.d(),u:a.length!=f,n:d,o:s,p:c}),s+=30+f+p,i+=76+2*f+p}for(var g=new o(i+22),y=s,v=i-s,w=0;w\u003Cn.length;++w){var b=n[w];$e(g,b.o,b.c,b.d,b.m,b.n,b.u,b.p,null,b.t),$e(g,s,b.c,b.d,b.m,b.n,b.u,b.p,b.o,b.t),s+=46+b.n.length}return et(g,s,n.length,v,y),g}function nt(e,t){if(\"function\"!=typeof t)throw\"no callback\";for(var r=[],n=function(){for(var e=0;e\u003Cr.length;++e)r[e]()},s={},i=e.length-22;101010256!=ce(e,i);--i)if(!i||e.length-i>65558)return void t(\"invalid zip file\",null);var a=ue(e,i+8);a||t(null,{});var A=a,u=ce(e,i+16),c=4294967295==u;if(c){if(i=ce(e,i-12),101075792!=ce(e,i))throw\"invalid zip file\";A=a=ce(e,i+32),u=ce(e,i+48)}for(var l=function(i){var A=Ye(e,u,c),l=A[0],d=A[1],f=A[2],h=A[3],p=A[4],m=A[5],g=Je(e,m);u=p;var y=function(e,r){e?(n(),t(e,null)):(s[h]=r,--a||t(null,s))};if(l)if(8==l){var v=e.subarray(g,g+d);if(d\u003C32e4)try{y(null,xe(v,new o(f)))}catch(e){y(e,null)}else r.push(Ce(v,{size:f},y))}else y(\"unknown compression type \"+l,null);else y(null,U(e,g,g+d))},d=0;d\u003CA;++d)l();return n}function ot(e){for(var t={},r=e.length-22;101010256!=ce(e,r);--r)if(!r||e.length-r>65558)throw\"invalid zip file\";var n=ue(e,r+8);if(!n)return{};var s=ce(e,r+16),i=4294967295==s;if(i){if(r=ce(e,r-12),101075792!=ce(e,r))throw\"invalid zip file\";n=ce(e,r+32),s=ce(e,r+48)}for(var a=0;a\u003Cn;++a){var A=Ye(e,s,i),u=A[0],c=A[1],l=A[2],d=A[3],f=A[4],h=A[5],p=Je(e,h);if(s=f,u){if(8!=u)throw\"unknown compression type \"+u;t[d]=xe(e.subarray(p,p+c),new o(l))}else t[d]=U(e,p,p+c)}return t}},\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\":function(e){e.exports=function(){\"use strict\";var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};function t(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}var r=function(){return(r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r\u003Cn;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function n(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{A(n.next(e))}catch(e){s(e)}}function a(e){try{A(n.throw(e))}catch(e){s(e)}}function A(e){e.done?o(e.value):new r((function(t){t(e.value)})).then(i,a)}A((n=n.apply(e,t||[])).next())}))}function o(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},\"function\"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError(\"Generator is already executing.\");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]\u003Co[3])){i.label=s[1];break}if(6===s[0]&&i.label\u003Co[1]){i.label=o[1],o=s;break}if(o&&i.label\u003Co[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}}for(var s=function(){function e(e,t,r,n){this.left=e,this.top=t,this.width=r,this.height=n}return e.prototype.add=function(t,r,n,o){return new e(this.left+t,this.top+r,this.width+n,this.height+o)},e.fromClientRect=function(t){return new e(t.left,t.top,t.width,t.height)},e}(),i=function(e){return s.fromClientRect(e.getBoundingClientRect())},a=function(e){for(var t=[],r=0,n=e.length;r\u003Cn;){var o=e.charCodeAt(r++);if(o>=55296&&o\u003C=56319&&r\u003Cn){var s=e.charCodeAt(r++);56320==(64512&s)?t.push(((1023&o)\u003C\u003C10)+(1023&s)+65536):(t.push(o),r--)}else t.push(o)}return t},A=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];if(String.fromCodePoint)return String.fromCodePoint.apply(String,e);var r=e.length;if(!r)return\"\";for(var n=[],o=-1,s=\"\";++o\u003Cr;){var i=e[o];i\u003C=65535?n.push(i):(i-=65536,n.push(55296+(i>>10),i%1024+56320)),(o+1===r||n.length>16384)&&(s+=String.fromCharCode.apply(String,n),n.length=0)}return s},u=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\u002F\",c=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),l=0;l\u003Cu.length;l++)c[u.charCodeAt(l)]=l;var d,f,h,p,m,g,y,v,w,b=function(e,t,r){return e.slice?e.slice(t,r):new Uint16Array(Array.prototype.slice.call(e,t,r))},B=function(){function e(e,t,r,n,o,s){this.initialValue=e,this.errorValue=t,this.highStart=r,this.highValueIndex=n,this.index=o,this.data=s}return e.prototype.get=function(e){var t;if(e>=0){if(e\u003C55296||e>56319&&e\u003C=65535)return t=((t=this.index[e>>5])\u003C\u003C2)+(31&e),this.data[t];if(e\u003C=65535)return t=((t=this.index[2048+(e-55296>>5)])\u003C\u003C2)+(31&e),this.data[t];if(e\u003Cthis.highStart)return t=2080+(e>>11),t=this.index[t],t+=e>>5&63,t=((t=this.index[t])\u003C\u003C2)+(31&e),this.data[t];if(e\u003C=1114111)return this.data[this.highValueIndex]}return this.errorValue},e}(),j=10,_=13,C=15,x=17,E=18,N=19,Q=20,F=21,U=22,S=24,L=25,T=26,H=27,I=28,P=30,O=32,k=33,R=34,M=35,D=37,K=38,z=39,V=40,q=42,G=\"×\",X=\"÷\",W=(m=function(e){var t,r,n,o,s,i=.75*e.length,a=e.length,A=0;\"=\"===e[e.length-1]&&(i--,\"=\"===e[e.length-2]&&i--);var u=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.slice?new ArrayBuffer(i):new Array(i),l=Array.isArray(u)?u:new Uint8Array(u);for(t=0;t\u003Ca;t+=4)r=c[e.charCodeAt(t)],n=c[e.charCodeAt(t+1)],o=c[e.charCodeAt(t+2)],s=c[e.charCodeAt(t+3)],l[A++]=r\u003C\u003C2|n>>4,l[A++]=(15&n)\u003C\u003C4|o>>2,l[A++]=(3&o)\u003C\u003C6|63&s;return u}(\"KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA\u002FQD\u002FAOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC\u002FB8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg\u002FCCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C\u002F4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw\u002F3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK\u002FgHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN\u002Fg3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD\u002F\u002FwQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA\"),g=Array.isArray(m)?function(e){for(var t=e.length,r=[],n=0;n\u003Ct;n+=4)r.push(e[n+3]\u003C\u003C24|e[n+2]\u003C\u003C16|e[n+1]\u003C\u003C8|e[n]);return r}(m):new Uint32Array(m),y=Array.isArray(m)?function(e){for(var t=e.length,r=[],n=0;n\u003Ct;n+=2)r.push(e[n+1]\u003C\u003C8|e[n]);return r}(m):new Uint16Array(m),v=b(y,12,g[4]\u002F2),w=2===g[5]?b(y,(24+g[4])\u002F2):(f=g,h=Math.ceil((24+g[4])\u002F4),f.slice?f.slice(h,p):new Uint32Array(Array.prototype.slice.call(f,h,p))),new B(g[0],g[1],g[2],g[3],v,w)),J=[P,36],Y=[1,2,3,5],Z=[j,8],$=[H,T],ee=Y.concat(Z),te=[K,z,V,R,M],re=[C,_],ne=function(e,t,r,n){var o=n[r];if(Array.isArray(e)?-1!==e.indexOf(o):e===o)for(var s=r;s\u003C=n.length;){if((A=n[++s])===t)return!0;if(A!==j)break}if(o===j)for(s=r;s>0;){var i=n[--s];if(Array.isArray(e)?-1!==e.indexOf(i):e===i)for(var a=r;a\u003C=n.length;){var A;if((A=n[++a])===t)return!0;if(A!==j)break}if(i!==j)break}return!1},oe=function(e,t){for(var r=e;r>=0;){var n=t[r];if(n!==j)return n;r--}return 0},se=function(e,t,r,n,o){if(0===r[n])return G;var s=n-1;if(Array.isArray(o)&&!0===o[s])return G;var i=s-1,a=s+1,A=t[s],u=i>=0?t[i]:0,c=t[a];if(2===A&&3===c)return G;if(-1!==Y.indexOf(A))return\"!\";if(-1!==Y.indexOf(c))return G;if(-1!==Z.indexOf(c))return G;if(8===oe(s,t))return X;if(11===W.get(e[s])&&(c===D||c===O||c===k))return G;if(7===A||7===c)return G;if(9===A)return G;if(-1===[j,_,C].indexOf(A)&&9===c)return G;if(-1!==[x,E,N,S,I].indexOf(c))return G;if(oe(s,t)===U)return G;if(ne(23,U,s,t))return G;if(ne([x,E],F,s,t))return G;if(ne(12,12,s,t))return G;if(A===j)return X;if(23===A||23===c)return G;if(16===c||16===A)return X;if(-1!==[_,C,F].indexOf(c)||14===A)return G;if(36===u&&-1!==re.indexOf(A))return G;if(A===I&&36===c)return G;if(c===Q&&-1!==J.concat(Q,N,L,D,O,k).indexOf(A))return G;if(-1!==J.indexOf(c)&&A===L||-1!==J.indexOf(A)&&c===L)return G;if(A===H&&-1!==[D,O,k].indexOf(c)||-1!==[D,O,k].indexOf(A)&&c===T)return G;if(-1!==J.indexOf(A)&&-1!==$.indexOf(c)||-1!==$.indexOf(A)&&-1!==J.indexOf(c))return G;if(-1!==[H,T].indexOf(A)&&(c===L||-1!==[U,C].indexOf(c)&&t[a+1]===L)||-1!==[U,C].indexOf(A)&&c===L||A===L&&-1!==[L,I,S].indexOf(c))return G;if(-1!==[L,I,S,x,E].indexOf(c))for(var l=s;l>=0;){if((d=t[l])===L)return G;if(-1===[I,S].indexOf(d))break;l--}if(-1!==[H,T].indexOf(c))for(l=-1!==[x,E].indexOf(A)?i:s;l>=0;){var d;if((d=t[l])===L)return G;if(-1===[I,S].indexOf(d))break;l--}if(K===A&&-1!==[K,z,R,M].indexOf(c)||-1!==[z,R].indexOf(A)&&-1!==[z,V].indexOf(c)||-1!==[V,M].indexOf(A)&&c===V)return G;if(-1!==te.indexOf(A)&&-1!==[Q,T].indexOf(c)||-1!==te.indexOf(c)&&A===H)return G;if(-1!==J.indexOf(A)&&-1!==J.indexOf(c))return G;if(A===S&&-1!==J.indexOf(c))return G;if(-1!==J.concat(L).indexOf(A)&&c===U||-1!==J.concat(L).indexOf(c)&&A===E)return G;if(41===A&&41===c){for(var f=r[s],h=1;f>0&&41===t[--f];)h++;if(h%2!=0)return G}return A===O&&c===k?G:X},ie=function(e,t){t||(t={lineBreak:\"normal\",wordBreak:\"normal\"});var r=function(e,t){void 0===t&&(t=\"strict\");var r=[],n=[],o=[];return e.forEach((function(e,s){var i=W.get(e);if(i>50?(o.push(!0),i-=50):o.push(!1),-1!==[\"normal\",\"auto\",\"loose\"].indexOf(t)&&-1!==[8208,8211,12316,12448].indexOf(e))return n.push(s),r.push(16);if(4===i||11===i){if(0===s)return n.push(s),r.push(P);var a=r[s-1];return-1===ee.indexOf(a)?(n.push(n[s-1]),r.push(a)):(n.push(s),r.push(P))}return n.push(s),31===i?r.push(\"strict\"===t?F:D):i===q||29===i?r.push(P):43===i?e>=131072&&e\u003C=196605||e>=196608&&e\u003C=262141?r.push(D):r.push(P):void r.push(i)})),[n,r,o]}(e,t.lineBreak),n=r[0],o=r[1],s=r[2];return\"break-all\"!==t.wordBreak&&\"break-word\"!==t.wordBreak||(o=o.map((function(e){return-1!==[L,P,q].indexOf(e)?D:e}))),[n,o,\"keep-all\"===t.wordBreak?s.map((function(t,r){return t&&e[r]>=19968&&e[r]\u003C=40959})):void 0]},ae=function(){function e(e,t,r,n){this.codePoints=e,this.required=\"!\"===t,this.start=r,this.end=n}return e.prototype.slice=function(){return A.apply(void 0,this.codePoints.slice(this.start,this.end))},e}();!function(e){e[e.STRING_TOKEN=0]=\"STRING_TOKEN\",e[e.BAD_STRING_TOKEN=1]=\"BAD_STRING_TOKEN\",e[e.LEFT_PARENTHESIS_TOKEN=2]=\"LEFT_PARENTHESIS_TOKEN\",e[e.RIGHT_PARENTHESIS_TOKEN=3]=\"RIGHT_PARENTHESIS_TOKEN\",e[e.COMMA_TOKEN=4]=\"COMMA_TOKEN\",e[e.HASH_TOKEN=5]=\"HASH_TOKEN\",e[e.DELIM_TOKEN=6]=\"DELIM_TOKEN\",e[e.AT_KEYWORD_TOKEN=7]=\"AT_KEYWORD_TOKEN\",e[e.PREFIX_MATCH_TOKEN=8]=\"PREFIX_MATCH_TOKEN\",e[e.DASH_MATCH_TOKEN=9]=\"DASH_MATCH_TOKEN\",e[e.INCLUDE_MATCH_TOKEN=10]=\"INCLUDE_MATCH_TOKEN\",e[e.LEFT_CURLY_BRACKET_TOKEN=11]=\"LEFT_CURLY_BRACKET_TOKEN\",e[e.RIGHT_CURLY_BRACKET_TOKEN=12]=\"RIGHT_CURLY_BRACKET_TOKEN\",e[e.SUFFIX_MATCH_TOKEN=13]=\"SUFFIX_MATCH_TOKEN\",e[e.SUBSTRING_MATCH_TOKEN=14]=\"SUBSTRING_MATCH_TOKEN\",e[e.DIMENSION_TOKEN=15]=\"DIMENSION_TOKEN\",e[e.PERCENTAGE_TOKEN=16]=\"PERCENTAGE_TOKEN\",e[e.NUMBER_TOKEN=17]=\"NUMBER_TOKEN\",e[e.FUNCTION=18]=\"FUNCTION\",e[e.FUNCTION_TOKEN=19]=\"FUNCTION_TOKEN\",e[e.IDENT_TOKEN=20]=\"IDENT_TOKEN\",e[e.COLUMN_TOKEN=21]=\"COLUMN_TOKEN\",e[e.URL_TOKEN=22]=\"URL_TOKEN\",e[e.BAD_URL_TOKEN=23]=\"BAD_URL_TOKEN\",e[e.CDC_TOKEN=24]=\"CDC_TOKEN\",e[e.CDO_TOKEN=25]=\"CDO_TOKEN\",e[e.COLON_TOKEN=26]=\"COLON_TOKEN\",e[e.SEMICOLON_TOKEN=27]=\"SEMICOLON_TOKEN\",e[e.LEFT_SQUARE_BRACKET_TOKEN=28]=\"LEFT_SQUARE_BRACKET_TOKEN\",e[e.RIGHT_SQUARE_BRACKET_TOKEN=29]=\"RIGHT_SQUARE_BRACKET_TOKEN\",e[e.UNICODE_RANGE_TOKEN=30]=\"UNICODE_RANGE_TOKEN\",e[e.WHITESPACE_TOKEN=31]=\"WHITESPACE_TOKEN\",e[e.EOF_TOKEN=32]=\"EOF_TOKEN\"}(d||(d={}));var Ae=45,ue=43,ce=-1,le=function(e){return e>=48&&e\u003C=57},de=function(e){return le(e)||e>=65&&e\u003C=70||e>=97&&e\u003C=102},fe=function(e){return 10===e||9===e||32===e},he=function(e){return function(e){return function(e){return e>=97&&e\u003C=122}(e)||function(e){return e>=65&&e\u003C=90}(e)}(e)||function(e){return e>=128}(e)||95===e},pe=function(e){return he(e)||le(e)||e===Ae},me=function(e){return e>=0&&e\u003C=8||11===e||e>=14&&e\u003C=31||127===e},ge=function(e,t){return 92===e&&10!==t},ye=function(e,t,r){return e===Ae?he(t)||ge(t,r):!!he(e)||!(92!==e||!ge(e,t))},ve=function(e,t,r){return e===ue||e===Ae?!!le(t)||46===t&&le(r):le(46===e?t:e)},we=function(e){var t=0,r=1;e[t]!==ue&&e[t]!==Ae||(e[t]===Ae&&(r=-1),t++);for(var n=[];le(e[t]);)n.push(e[t++]);var o=n.length?parseInt(A.apply(void 0,n),10):0;46===e[t]&&t++;for(var s=[];le(e[t]);)s.push(e[t++]);var i=s.length,a=i?parseInt(A.apply(void 0,s),10):0;69!==e[t]&&101!==e[t]||t++;var u=1;e[t]!==ue&&e[t]!==Ae||(e[t]===Ae&&(u=-1),t++);for(var c=[];le(e[t]);)c.push(e[t++]);var l=c.length?parseInt(A.apply(void 0,c),10):0;return r*(o+a*Math.pow(10,-i))*Math.pow(10,u*l)},be={type:d.LEFT_PARENTHESIS_TOKEN},Be={type:d.RIGHT_PARENTHESIS_TOKEN},je={type:d.COMMA_TOKEN},_e={type:d.SUFFIX_MATCH_TOKEN},Ce={type:d.PREFIX_MATCH_TOKEN},xe={type:d.COLUMN_TOKEN},Ee={type:d.DASH_MATCH_TOKEN},Ne={type:d.INCLUDE_MATCH_TOKEN},Qe={type:d.LEFT_CURLY_BRACKET_TOKEN},Fe={type:d.RIGHT_CURLY_BRACKET_TOKEN},Ue={type:d.SUBSTRING_MATCH_TOKEN},Se={type:d.BAD_URL_TOKEN},Le={type:d.BAD_STRING_TOKEN},Te={type:d.CDO_TOKEN},He={type:d.CDC_TOKEN},Ie={type:d.COLON_TOKEN},Pe={type:d.SEMICOLON_TOKEN},Oe={type:d.LEFT_SQUARE_BRACKET_TOKEN},ke={type:d.RIGHT_SQUARE_BRACKET_TOKEN},Re={type:d.WHITESPACE_TOKEN},Me={type:d.EOF_TOKEN},De=function(){function e(){this._value=[]}return e.prototype.write=function(e){this._value=this._value.concat(a(e))},e.prototype.read=function(){for(var e=[],t=this.consumeToken();t!==Me;)e.push(t),t=this.consumeToken();return e},e.prototype.consumeToken=function(){var e=this.consumeCodePoint();switch(e){case 34:return this.consumeStringToken(34);case 35:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),n=this.peekCodePoint(2);if(pe(t)||ge(r,n)){var o=ye(t,r,n)?2:1,s=this.consumeName();return{type:d.HASH_TOKEN,value:s,flags:o}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),_e;break;case 39:return this.consumeStringToken(39);case 40:return be;case 41:return Be;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ue;break;case ue:if(ve(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case 44:return je;case Ae:var i=e,a=this.peekCodePoint(0),u=this.peekCodePoint(1);if(ve(i,a,u))return this.reconsumeCodePoint(e),this.consumeNumericToken();if(ye(i,a,u))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();if(a===Ae&&62===u)return this.consumeCodePoint(),this.consumeCodePoint(),He;break;case 46:if(ve(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var c=this.consumeCodePoint();if(42===c&&47===(c=this.consumeCodePoint()))return this.consumeToken();if(c===ce)return this.consumeToken()}break;case 58:return Ie;case 59:return Pe;case 60:if(33===this.peekCodePoint(0)&&this.peekCodePoint(1)===Ae&&this.peekCodePoint(2)===Ae)return this.consumeCodePoint(),this.consumeCodePoint(),Te;break;case 64:var l=this.peekCodePoint(0),f=this.peekCodePoint(1),h=this.peekCodePoint(2);if(ye(l,f,h))return s=this.consumeName(),{type:d.AT_KEYWORD_TOKEN,value:s};break;case 91:return Oe;case 92:if(ge(e,this.peekCodePoint(0)))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();break;case 93:return ke;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ce;break;case 123:return Qe;case 125:return Fe;case 117:case 85:var p=this.peekCodePoint(0),m=this.peekCodePoint(1);return p!==ue||!de(m)&&63!==m||(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(e),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ee;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),xe;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ne;break;case ce:return Me}return fe(e)?(this.consumeWhiteSpace(),Re):le(e)?(this.reconsumeCodePoint(e),this.consumeNumericToken()):he(e)?(this.reconsumeCodePoint(e),this.consumeIdentLikeToken()):{type:d.DELIM_TOKEN,value:A(e)}},e.prototype.consumeCodePoint=function(){var e=this._value.shift();return void 0===e?-1:e},e.prototype.reconsumeCodePoint=function(e){this._value.unshift(e)},e.prototype.peekCodePoint=function(e){return e>=this._value.length?-1:this._value[e]},e.prototype.consumeUnicodeRangeToken=function(){for(var e=[],t=this.consumeCodePoint();de(t)&&e.length\u003C6;)e.push(t),t=this.consumeCodePoint();for(var r=!1;63===t&&e.length\u003C6;)e.push(t),t=this.consumeCodePoint(),r=!0;if(r){var n=parseInt(A.apply(void 0,e.map((function(e){return 63===e?48:e}))),16),o=parseInt(A.apply(void 0,e.map((function(e){return 63===e?70:e}))),16);return{type:d.UNICODE_RANGE_TOKEN,start:n,end:o}}var s=parseInt(A.apply(void 0,e),16);if(this.peekCodePoint(0)===Ae&&de(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];de(t)&&i.length\u003C6;)i.push(t),t=this.consumeCodePoint();return o=parseInt(A.apply(void 0,i),16),{type:d.UNICODE_RANGE_TOKEN,start:s,end:o}}return{type:d.UNICODE_RANGE_TOKEN,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var e=this.consumeName();return\"url\"===e.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:d.FUNCTION_TOKEN,value:e}):{type:d.IDENT_TOKEN,value:e}},e.prototype.consumeUrlToken=function(){var e=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===ce)return{type:d.URL_TOKEN,value:\"\"};var t=this.peekCodePoint(0);if(39===t||34===t){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===d.STRING_TOKEN&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===ce||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:d.URL_TOKEN,value:r.value}):(this.consumeBadUrlRemnants(),Se)}for(;;){var n=this.consumeCodePoint();if(n===ce||41===n)return{type:d.URL_TOKEN,value:A.apply(void 0,e)};if(fe(n))return this.consumeWhiteSpace(),this.peekCodePoint(0)===ce||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:d.URL_TOKEN,value:A.apply(void 0,e)}):(this.consumeBadUrlRemnants(),Se);if(34===n||39===n||40===n||me(n))return this.consumeBadUrlRemnants(),Se;if(92===n){if(!ge(n,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),Se;e.push(this.consumeEscapedCodePoint())}else e.push(n)}},e.prototype.consumeWhiteSpace=function(){for(;fe(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var e=this.consumeCodePoint();if(41===e||e===ce)return;ge(e,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(e){for(var t=\"\";e>0;){var r=Math.min(6e4,e);t+=A.apply(void 0,this._value.splice(0,r)),e-=r}return this._value.shift(),t},e.prototype.consumeStringToken=function(e){for(var t=\"\",r=0;;){var n=this._value[r];if(n===ce||void 0===n||n===e)return t+=this.consumeStringSlice(r),{type:d.STRING_TOKEN,value:t};if(10===n)return this._value.splice(0,r),Le;if(92===n){var o=this._value[r+1];o!==ce&&void 0!==o&&(10===o?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):ge(n,o)&&(t+=this.consumeStringSlice(r),t+=A(this.consumeEscapedCodePoint()),r=-1))}r++}},e.prototype.consumeNumber=function(){var e=[],t=4,r=this.peekCodePoint(0);for(r!==ue&&r!==Ae||e.push(this.consumeCodePoint());le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());r=this.peekCodePoint(0);var n=this.peekCodePoint(1);if(46===r&&le(n))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());r=this.peekCodePoint(0),n=this.peekCodePoint(1);var o=this.peekCodePoint(2);if((69===r||101===r)&&((n===ue||n===Ae)&&le(o)||le(n)))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());return[we(e),t]},e.prototype.consumeNumericToken=function(){var e=this.consumeNumber(),t=e[0],r=e[1],n=this.peekCodePoint(0),o=this.peekCodePoint(1),s=this.peekCodePoint(2);if(ye(n,o,s)){var i=this.consumeName();return{type:d.DIMENSION_TOKEN,number:t,flags:r,unit:i}}return 37===n?(this.consumeCodePoint(),{type:d.PERCENTAGE_TOKEN,number:t,flags:r}):{type:d.NUMBER_TOKEN,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var e=this.consumeCodePoint();if(de(e)){for(var t=A(e);de(this.peekCodePoint(0))&&t.length\u003C6;)t+=A(this.consumeCodePoint());fe(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return 0===r||function(e){return e>=55296&&e\u003C=57343}(r)||r>1114111?65533:r}return e===ce?65533:e},e.prototype.consumeName=function(){for(var e=\"\";;){var t=this.consumeCodePoint();if(pe(t))e+=A(t);else{if(!ge(t,this.peekCodePoint(0)))return this.reconsumeCodePoint(t),e;e+=A(this.consumeEscapedCodePoint())}}},e}(),Ke=function(){function e(e){this._tokens=e}return e.create=function(t){var r=new De;return r.write(t),new e(r.read())},e.parseValue=function(t){return e.create(t).parseComponentValue()},e.parseValues=function(t){return e.create(t).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var e=this.consumeToken();e.type===d.WHITESPACE_TOKEN;)e=this.consumeToken();if(e.type===d.EOF_TOKEN)throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");this.reconsumeToken(e);var t=this.consumeComponentValue();do{e=this.consumeToken()}while(e.type===d.WHITESPACE_TOKEN);if(e.type===d.EOF_TOKEN)return t;throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\")},e.prototype.parseComponentValues=function(){for(var e=[];;){var t=this.consumeComponentValue();if(t.type===d.EOF_TOKEN)return e;e.push(t),e.push()}},e.prototype.consumeComponentValue=function(){var e=this.consumeToken();switch(e.type){case d.LEFT_CURLY_BRACKET_TOKEN:case d.LEFT_SQUARE_BRACKET_TOKEN:case d.LEFT_PARENTHESIS_TOKEN:return this.consumeSimpleBlock(e.type);case d.FUNCTION_TOKEN:return this.consumeFunction(e)}return e},e.prototype.consumeSimpleBlock=function(e){for(var t={type:e,values:[]},r=this.consumeToken();;){if(r.type===d.EOF_TOKEN||Ze(r,e))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(e){for(var t={name:e.value,values:[],type:d.FUNCTION};;){var r=this.consumeToken();if(r.type===d.EOF_TOKEN||r.type===d.RIGHT_PARENTHESIS_TOKEN)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var e=this._tokens.shift();return void 0===e?Me:e},e.prototype.reconsumeToken=function(e){this._tokens.unshift(e)},e}(),ze=function(e){return e.type===d.DIMENSION_TOKEN},Ve=function(e){return e.type===d.NUMBER_TOKEN},qe=function(e){return e.type===d.IDENT_TOKEN},Ge=function(e){return e.type===d.STRING_TOKEN},Xe=function(e,t){return qe(e)&&e.value===t},We=function(e){return e.type!==d.WHITESPACE_TOKEN},Je=function(e){return e.type!==d.WHITESPACE_TOKEN&&e.type!==d.COMMA_TOKEN},Ye=function(e){var t=[],r=[];return e.forEach((function(e){if(e.type===d.COMMA_TOKEN){if(0===r.length)throw new Error(\"Error parsing function args, zero tokens for arg\");return t.push(r),void(r=[])}e.type!==d.WHITESPACE_TOKEN&&r.push(e)})),r.length&&t.push(r),t},Ze=function(e,t){return t===d.LEFT_CURLY_BRACKET_TOKEN&&e.type===d.RIGHT_CURLY_BRACKET_TOKEN||t===d.LEFT_SQUARE_BRACKET_TOKEN&&e.type===d.RIGHT_SQUARE_BRACKET_TOKEN||t===d.LEFT_PARENTHESIS_TOKEN&&e.type===d.RIGHT_PARENTHESIS_TOKEN},$e=function(e){return e.type===d.NUMBER_TOKEN||e.type===d.DIMENSION_TOKEN},et=function(e){return e.type===d.PERCENTAGE_TOKEN||$e(e)},tt=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},rt={type:d.NUMBER_TOKEN,number:0,flags:4},nt={type:d.PERCENTAGE_TOKEN,number:50,flags:4},ot={type:d.PERCENTAGE_TOKEN,number:100,flags:4},st=function(e,t,r){var n=e[0],o=e[1];return[it(n,t),it(void 0!==o?o:n,r)]},it=function(e,t){if(e.type===d.PERCENTAGE_TOKEN)return e.number\u002F100*t;if(ze(e))switch(e.unit){case\"rem\":case\"em\":return 16*e.number;case\"px\":default:return e.number}return e.number},at=\"grad\",At=\"turn\",ut=function(e){if(e.type===d.DIMENSION_TOKEN)switch(e.unit){case\"deg\":return Math.PI*e.number\u002F180;case at:return Math.PI\u002F200*e.number;case\"rad\":return e.number;case At:return 2*Math.PI*e.number}throw new Error(\"Unsupported angle type\")},ct=function(e){return e.type===d.DIMENSION_TOKEN&&(\"deg\"===e.unit||e.unit===at||\"rad\"===e.unit||e.unit===At)},lt=function(e){switch(e.filter(qe).map((function(e){return e.value})).join(\" \")){case\"to bottom right\":case\"to right bottom\":case\"left top\":case\"top left\":return[rt,rt];case\"to top\":case\"bottom\":return dt(0);case\"to bottom left\":case\"to left bottom\":case\"right top\":case\"top right\":return[rt,ot];case\"to right\":case\"left\":return dt(90);case\"to top left\":case\"to left top\":case\"right bottom\":case\"bottom right\":return[ot,ot];case\"to bottom\":case\"top\":return dt(180);case\"to top right\":case\"to right top\":case\"left bottom\":case\"bottom left\":return[ot,rt];case\"to left\":case\"right\":return dt(270)}return 0},dt=function(e){return Math.PI*e\u002F180},ft=function(e){if(e.type===d.FUNCTION){var t=jt[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported color function \"'+e.name+'\"');return t(e.values)}if(e.type===d.HASH_TOKEN){if(3===e.value.length){var r=e.value.substring(0,1),n=e.value.substring(1,2),o=e.value.substring(2,3);return mt(parseInt(r+r,16),parseInt(n+n,16),parseInt(o+o,16),1)}if(4===e.value.length){r=e.value.substring(0,1),n=e.value.substring(1,2),o=e.value.substring(2,3);var s=e.value.substring(3,4);return mt(parseInt(r+r,16),parseInt(n+n,16),parseInt(o+o,16),parseInt(s+s,16)\u002F255)}if(6===e.value.length)return r=e.value.substring(0,2),n=e.value.substring(2,4),o=e.value.substring(4,6),mt(parseInt(r,16),parseInt(n,16),parseInt(o,16),1);if(8===e.value.length)return r=e.value.substring(0,2),n=e.value.substring(2,4),o=e.value.substring(4,6),s=e.value.substring(6,8),mt(parseInt(r,16),parseInt(n,16),parseInt(o,16),parseInt(s,16)\u002F255)}if(e.type===d.IDENT_TOKEN){var i=_t[e.value.toUpperCase()];if(void 0!==i)return i}return _t.TRANSPARENT},ht=function(e){return 0==(255&e)},pt=function(e){var t=255&e,r=255&e>>8,n=255&e>>16,o=255&e>>24;return t\u003C255?\"rgba(\"+o+\",\"+n+\",\"+r+\",\"+t\u002F255+\")\":\"rgb(\"+o+\",\"+n+\",\"+r+\")\"},mt=function(e,t,r,n){return(e\u003C\u003C24|t\u003C\u003C16|r\u003C\u003C8|Math.round(255*n)\u003C\u003C0)>>>0},gt=function(e,t){if(e.type===d.NUMBER_TOKEN)return e.number;if(e.type===d.PERCENTAGE_TOKEN){var r=3===t?1:255;return 3===t?e.number\u002F100*r:Math.round(e.number\u002F100*r)}return 0},yt=function(e){var t=e.filter(Je);if(3===t.length){var r=t.map(gt),n=r[0],o=r[1],s=r[2];return mt(n,o,s,1)}if(4===t.length){var i=t.map(gt),a=(n=i[0],o=i[1],s=i[2],i[3]);return mt(n,o,s,a)}return 0};function vt(e,t,r){return r\u003C0&&(r+=1),r>=1&&(r-=1),r\u003C1\u002F6?(t-e)*r*6+e:r\u003C.5?t:r\u003C2\u002F3?6*(t-e)*(2\u002F3-r)+e:e}var wt,bt,Bt=function(e){var t=e.filter(Je),r=t[0],n=t[1],o=t[2],s=t[3],i=(r.type===d.NUMBER_TOKEN?dt(r.number):ut(r))\u002F(2*Math.PI),a=et(n)?n.number\u002F100:0,A=et(o)?o.number\u002F100:0,u=void 0!==s&&et(s)?it(s,1):1;if(0===a)return mt(255*A,255*A,255*A,1);var c=A\u003C=.5?A*(a+1):A+a-A*a,l=2*A-c,f=vt(l,c,i+1\u002F3),h=vt(l,c,i),p=vt(l,c,i-1\u002F3);return mt(255*f,255*h,255*p,u)},jt={hsl:Bt,hsla:Bt,rgb:yt,rgba:yt},_t={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199};(function(e){e[e.VALUE=0]=\"VALUE\",e[e.LIST=1]=\"LIST\",e[e.IDENT_VALUE=2]=\"IDENT_VALUE\",e[e.TYPE_VALUE=3]=\"TYPE_VALUE\",e[e.TOKEN_VALUE=4]=\"TOKEN_VALUE\"})(wt||(wt={})),function(e){e[e.BORDER_BOX=0]=\"BORDER_BOX\",e[e.PADDING_BOX=1]=\"PADDING_BOX\",e[e.CONTENT_BOX=2]=\"CONTENT_BOX\"}(bt||(bt={}));var Ct,xt={name:\"background-clip\",initialValue:\"border-box\",prefix:!1,type:wt.LIST,parse:function(e){return e.map((function(e){if(qe(e))switch(e.value){case\"padding-box\":return bt.PADDING_BOX;case\"content-box\":return bt.CONTENT_BOX}return bt.BORDER_BOX}))}},Et={name:\"background-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Nt=function(e){var t=ft(e[0]),r=e[1];return r&&et(r)?{color:t,stop:r}:{color:t,stop:null}},Qt=function(e,t){var r=e[0],n=e[e.length-1];null===r.stop&&(r.stop=rt),null===n.stop&&(n.stop=ot);for(var o=[],s=0,i=0;i\u003Ce.length;i++){var a=e[i].stop;if(null!==a){var A=it(a,t);A>s?o.push(A):o.push(s),s=A}else o.push(null)}var u=null;for(i=0;i\u003Co.length;i++){var c=o[i];if(null===c)null===u&&(u=i);else if(null!==u){for(var l=i-u,d=(c-o[u-1])\u002F(l+1),f=1;f\u003C=l;f++)o[u+f-1]=d*f;u=null}}return e.map((function(e,r){return{color:e.color,stop:Math.max(Math.min(1,o[r]\u002Ft),0)}}))},Ft=function(e,t,r){var n=\"number\"==typeof e?e:function(e,t,r){var n=t\u002F2,o=r\u002F2,s=it(e[0],t)-n,i=o-it(e[1],r);return(Math.atan2(i,s)+2*Math.PI)%(2*Math.PI)}(e,t,r),o=Math.abs(t*Math.sin(n))+Math.abs(r*Math.cos(n)),s=t\u002F2,i=r\u002F2,a=o\u002F2,A=Math.sin(n-Math.PI\u002F2)*a,u=Math.cos(n-Math.PI\u002F2)*a;return[o,s-u,s+u,i-A,i+A]},Ut=function(e,t){return Math.sqrt(e*e+t*t)},St=function(e,t,r,n,o){return[[0,0],[0,t],[e,0],[e,t]].reduce((function(e,t){var s=t[0],i=t[1],a=Ut(r-s,n-i);return(o?a\u003Ce.optimumDistance:a>e.optimumDistance)?{optimumCorner:t,optimumDistance:a}:e}),{optimumDistance:o?1\u002F0:-1\u002F0,optimumCorner:null}).optimumCorner},Lt=function(e){var t=dt(180),r=[];return Ye(e).forEach((function(e,n){if(0===n){var o=e[0];if(o.type===d.IDENT_TOKEN&&-1!==[\"top\",\"left\",\"right\",\"bottom\"].indexOf(o.value))return void(t=lt(e));if(ct(o))return void(t=(ut(o)+dt(270))%dt(360))}var s=Nt(e);r.push(s)})),{angle:t,stops:r,type:Ct.LINEAR_GRADIENT}},Tt=function(e){return 0===e[0]&&255===e[1]&&0===e[2]&&255===e[3]},Ht=function(e,t,r,n,o){var s=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\",i=document.createElementNS(s,\"svg\"),a=document.createElementNS(s,\"foreignObject\");return i.setAttributeNS(null,\"width\",e.toString()),i.setAttributeNS(null,\"height\",t.toString()),a.setAttributeNS(null,\"width\",\"100%\"),a.setAttributeNS(null,\"height\",\"100%\"),a.setAttributeNS(null,\"x\",r.toString()),a.setAttributeNS(null,\"y\",n.toString()),a.setAttributeNS(null,\"externalResourcesRequired\",\"true\"),i.appendChild(a),a.appendChild(o),i},It=function(e){return new Promise((function(t,r){var n=new Image;n.onload=function(){return t(n)},n.onerror=r,n.src=\"data:image\u002Fsvg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(e))}))},Pt={get SUPPORT_RANGE_BOUNDS(){var e=function(e){if(e.createRange){var t=e.createRange();if(t.getBoundingClientRect){var r=e.createElement(\"boundtest\");r.style.height=\"123px\",r.style.display=\"block\",e.body.appendChild(r),t.selectNode(r);var n=t.getBoundingClientRect(),o=Math.round(n.height);if(e.body.removeChild(r),123===o)return!0}}return!1}(document);return Object.defineProperty(Pt,\"SUPPORT_RANGE_BOUNDS\",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=function(e){var t=new Image,r=e.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)return!1;t.src=\"data:image\u002Fsvg+xml,\u003Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'>\u003C\u002Fsvg>\";try{n.drawImage(t,0,0),r.toDataURL()}catch(e){return!1}return!0}(document);return Object.defineProperty(Pt,\"SUPPORT_SVG_DRAWING\",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=\"function\"==typeof Array.from&&\"function\"==typeof window.fetch?function(e){var t=e.createElement(\"canvas\"),r=100;t.width=r,t.height=r;var n=t.getContext(\"2d\");if(!n)return Promise.reject(!1);n.fillStyle=\"rgb(0, 255, 0)\",n.fillRect(0,0,r,r);var o=new Image,s=t.toDataURL();o.src=s;var i=Ht(r,r,0,0,o);return n.fillStyle=\"red\",n.fillRect(0,0,r,r),It(i).then((function(t){n.drawImage(t,0,0);var o=n.getImageData(0,0,r,r).data;n.fillStyle=\"red\",n.fillRect(0,0,r,r);var i=e.createElement(\"div\");return i.style.backgroundImage=\"url(\"+s+\")\",i.style.height=\"100px\",Tt(o)?It(Ht(r,r,0,0,i)):Promise.reject(!1)})).then((function(e){return n.drawImage(e,0,0),Tt(n.getImageData(0,0,r,r).data)})).catch((function(){return!1}))}(document):Promise.resolve(!1);return Object.defineProperty(Pt,\"SUPPORT_FOREIGNOBJECT_DRAWING\",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=void 0!==(new Image).crossOrigin;return Object.defineProperty(Pt,\"SUPPORT_CORS_IMAGES\",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=\"string\"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(Pt,\"SUPPORT_RESPONSE_TYPE\",{value:e}),e},get SUPPORT_CORS_XHR(){var e=\"withCredentials\"in new XMLHttpRequest;return Object.defineProperty(Pt,\"SUPPORT_CORS_XHR\",{value:e}),e}},Ot=function(){function e(e){var t=e.id,r=e.enabled;this.id=t,this.enabled=r,this.start=Date.now()}return e.prototype.debug=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.debug?console.debug.apply(console,[this.id,this.getTime()+\"ms\"].concat(e)):this.info.apply(this,e))},e.prototype.getTime=function(){return Date.now()-this.start},e.create=function(t){e.instances[t.id]=new e(t)},e.destroy=function(t){delete e.instances[t]},e.getInstance=function(t){var r=e.instances[t];if(void 0===r)throw new Error(\"No logger instance found with id \"+t);return r},e.prototype.info=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.info&&console.info.apply(console,[this.id,this.getTime()+\"ms\"].concat(e))},e.prototype.error=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.error?console.error.apply(console,[this.id,this.getTime()+\"ms\"].concat(e)):this.info.apply(this,e))},e.instances={},e}(),kt=function(){function e(){}return e.create=function(t,r){return e._caches[t]=new Rt(t,r)},e.destroy=function(t){delete e._caches[t]},e.open=function(t){var r=e._caches[t];if(void 0!==r)return r;throw new Error('Cache with key \"'+t+'\" not found')},e.getOrigin=function(t){var r=e._link;return r?(r.href=t,r.href=r.href,r.protocol+r.hostname+r.port):\"about:blank\"},e.isSameOrigin=function(t){return e.getOrigin(t)===e._origin},e.setContext=function(t){e._link=t.document.createElement(\"a\"),e._origin=e.getOrigin(t.location.href)},e.getInstance=function(){var t=e._current;if(null===t)throw new Error(\"No cache instance attached\");return t},e.attachInstance=function(t){e._current=t},e.detachInstance=function(){e._current=null},e._caches={},e._origin=\"about:blank\",e._current=null,e}(),Rt=function(){function e(e,t){this.id=e,this._options=t,this._cache={}}return e.prototype.addImage=function(e){var t=Promise.resolve();return this.has(e)?t:Gt(e)||zt(e)?(this._cache[e]=this.loadImage(e),t):t},e.prototype.match=function(e){return this._cache[e]},e.prototype.loadImage=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i=this;return o(this,(function(o){switch(o.label){case 0:return t=kt.isSameOrigin(e),r=!Vt(e)&&!0===this._options.useCORS&&Pt.SUPPORT_CORS_IMAGES&&!t,n=!Vt(e)&&!t&&\"string\"==typeof this._options.proxy&&Pt.SUPPORT_CORS_XHR&&!r,t||!1!==this._options.allowTaint||Vt(e)||n||r?(s=e,n?[4,this.proxy(s)]:[3,2]):[2];case 1:s=o.sent(),o.label=2;case 2:return Ot.getInstance(this.id).debug(\"Added image \"+e.substring(0,256)),[4,new Promise((function(e,t){var n=new Image;n.onload=function(){return e(n)},n.onerror=t,(qt(s)||r)&&(n.crossOrigin=\"anonymous\"),n.src=s,!0===n.complete&&setTimeout((function(){return e(n)}),500),i._options.imageTimeout>0&&setTimeout((function(){return t(\"Timed out (\"+i._options.imageTimeout+\"ms) loading image\")}),i._options.imageTimeout)}))];case 3:return[2,o.sent()]}}))}))},e.prototype.has=function(e){return void 0!==this._cache[e]},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(e){var t=this,r=this._options.proxy;if(!r)throw new Error(\"No proxy defined\");var n=e.substring(0,256);return new Promise((function(o,s){var i=Pt.SUPPORT_RESPONSE_TYPE?\"blob\":\"text\",a=new XMLHttpRequest;if(a.onload=function(){if(200===a.status)if(\"text\"===i)o(a.response);else{var e=new FileReader;e.addEventListener(\"load\",(function(){return o(e.result)}),!1),e.addEventListener(\"error\",(function(e){return s(e)}),!1),e.readAsDataURL(a.response)}else s(\"Failed to proxy resource \"+n+\" with status code \"+a.status)},a.onerror=s,a.open(\"GET\",r+\"?url=\"+encodeURIComponent(e)+\"&responseType=\"+i),\"text\"!==i&&a instanceof XMLHttpRequest&&(a.responseType=i),t._options.imageTimeout){var A=t._options.imageTimeout;a.timeout=A,a.ontimeout=function(){return s(\"Timed out (\"+A+\"ms) proxying \"+n)}}a.send()}))},e}(),Mt=\u002F^data:image\\\u002Fsvg\\+xml\u002Fi,Dt=\u002F^data:image\\\u002F.*;base64,\u002Fi,Kt=\u002F^data:image\\\u002F.*\u002Fi,zt=function(e){return Pt.SUPPORT_SVG_DRAWING||!Xt(e)},Vt=function(e){return Kt.test(e)},qt=function(e){return Dt.test(e)},Gt=function(e){return\"blob\"===e.substr(0,4)},Xt=function(e){return\"svg\"===e.substr(-3).toLowerCase()||Mt.test(e)},Wt=\"closest-side\",Jt=\"farthest-side\",Yt=\"closest-corner\",Zt=\"farthest-corner\",$t=\"circle\",er=\"ellipse\",tr=\"cover\",rr=\"contain\",nr=function(e){var t=or.CIRCLE,r=sr.FARTHEST_CORNER,n=[],o=[];return Ye(e).forEach((function(e,s){var i=!0;if(0===s?i=e.reduce((function(e,t){if(qe(t))switch(t.value){case\"center\":return o.push(nt),!1;case\"top\":case\"left\":return o.push(rt),!1;case\"right\":case\"bottom\":return o.push(ot),!1}else if(et(t)||$e(t))return o.push(t),!1;return e}),i):1===s&&(i=e.reduce((function(e,n){if(qe(n))switch(n.value){case $t:return t=or.CIRCLE,!1;case er:return t=or.ELLIPSE,!1;case rr:case Wt:return r=sr.CLOSEST_SIDE,!1;case Jt:return r=sr.FARTHEST_SIDE,!1;case Yt:return r=sr.CLOSEST_CORNER,!1;case tr:case Zt:return r=sr.FARTHEST_CORNER,!1}else if($e(n)||et(n))return Array.isArray(r)||(r=[]),r.push(n),!1;return e}),i)),i){var a=Nt(e);n.push(a)}})),{size:r,shape:t,stops:n,position:o,type:Ct.RADIAL_GRADIENT}};!function(e){e[e.URL=0]=\"URL\",e[e.LINEAR_GRADIENT=1]=\"LINEAR_GRADIENT\",e[e.RADIAL_GRADIENT=2]=\"RADIAL_GRADIENT\"}(Ct||(Ct={}));var or,sr;(function(e){e[e.CIRCLE=0]=\"CIRCLE\",e[e.ELLIPSE=1]=\"ELLIPSE\"})(or||(or={})),function(e){e[e.CLOSEST_SIDE=0]=\"CLOSEST_SIDE\",e[e.FARTHEST_SIDE=1]=\"FARTHEST_SIDE\",e[e.CLOSEST_CORNER=2]=\"CLOSEST_CORNER\",e[e.FARTHEST_CORNER=3]=\"FARTHEST_CORNER\"}(sr||(sr={}));var ir=function(e){if(e.type===d.URL_TOKEN){var t={url:e.value,type:Ct.URL};return kt.getInstance().addImage(e.value),t}if(e.type===d.FUNCTION){var r=Ar[e.name];if(void 0===r)throw new Error('Attempting to parse an unsupported image function \"'+e.name+'\"');return r(e.values)}throw new Error(\"Unsupported image type\")};var ar,Ar={\"linear-gradient\":function(e){var t=dt(180),r=[];return Ye(e).forEach((function(e,n){if(0===n){var o=e[0];if(o.type===d.IDENT_TOKEN&&\"to\"===o.value)return void(t=lt(e));if(ct(o))return void(t=ut(o))}var s=Nt(e);r.push(s)})),{angle:t,stops:r,type:Ct.LINEAR_GRADIENT}},\"-moz-linear-gradient\":Lt,\"-ms-linear-gradient\":Lt,\"-o-linear-gradient\":Lt,\"-webkit-linear-gradient\":Lt,\"radial-gradient\":function(e){var t=or.CIRCLE,r=sr.FARTHEST_CORNER,n=[],o=[];return Ye(e).forEach((function(e,s){var i=!0;if(0===s){var a=!1;i=e.reduce((function(e,n){if(a)if(qe(n))switch(n.value){case\"center\":return o.push(nt),e;case\"top\":case\"left\":return o.push(rt),e;case\"right\":case\"bottom\":return o.push(ot),e}else(et(n)||$e(n))&&o.push(n);else if(qe(n))switch(n.value){case $t:return t=or.CIRCLE,!1;case er:return t=or.ELLIPSE,!1;case\"at\":return a=!0,!1;case Wt:return r=sr.CLOSEST_SIDE,!1;case tr:case Jt:return r=sr.FARTHEST_SIDE,!1;case rr:case Yt:return r=sr.CLOSEST_CORNER,!1;case Zt:return r=sr.FARTHEST_CORNER,!1}else if($e(n)||et(n))return Array.isArray(r)||(r=[]),r.push(n),!1;return e}),i)}if(i){var A=Nt(e);n.push(A)}})),{size:r,shape:t,stops:n,position:o,type:Ct.RADIAL_GRADIENT}},\"-moz-radial-gradient\":nr,\"-ms-radial-gradient\":nr,\"-o-radial-gradient\":nr,\"-webkit-radial-gradient\":nr,\"-webkit-gradient\":function(e){var t=dt(180),r=[],n=Ct.LINEAR_GRADIENT,o=or.CIRCLE,s=sr.FARTHEST_CORNER;return Ye(e).forEach((function(e,t){var o=e[0];if(0===t){if(qe(o)&&\"linear\"===o.value)return void(n=Ct.LINEAR_GRADIENT);if(qe(o)&&\"radial\"===o.value)return void(n=Ct.RADIAL_GRADIENT)}if(o.type===d.FUNCTION)if(\"from\"===o.name){var s=ft(o.values[0]);r.push({stop:rt,color:s})}else if(\"to\"===o.name)s=ft(o.values[0]),r.push({stop:ot,color:s});else if(\"color-stop\"===o.name){var i=o.values.filter(Je);if(2===i.length){s=ft(i[1]);var a=i[0];Ve(a)&&r.push({stop:{type:d.PERCENTAGE_TOKEN,number:100*a.number,flags:a.flags},color:s})}}})),n===Ct.LINEAR_GRADIENT?{angle:(t+dt(180))%dt(360),stops:r,type:n}:{size:s,shape:o,stops:r,position:[],type:n}}},ur={name:\"background-image\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){if(0===e.length)return[];var t=e[0];return t.type===d.IDENT_TOKEN&&\"none\"===t.value?[]:e.filter((function(e){return Je(e)&&function(e){return e.type!==d.FUNCTION||Ar[e.name]}(e)})).map(ir)}},cr={name:\"background-origin\",initialValue:\"border-box\",prefix:!1,type:wt.LIST,parse:function(e){return e.map((function(e){if(qe(e))switch(e.value){case\"padding-box\":return 1;case\"content-box\":return 2}return 0}))}},lr={name:\"background-position\",initialValue:\"0% 0%\",type:wt.LIST,prefix:!1,parse:function(e){return Ye(e).map((function(e){return e.filter(et)})).map(tt)}};!function(e){e[e.REPEAT=0]=\"REPEAT\",e[e.NO_REPEAT=1]=\"NO_REPEAT\",e[e.REPEAT_X=2]=\"REPEAT_X\",e[e.REPEAT_Y=3]=\"REPEAT_Y\"}(ar||(ar={}));var dr,fr={name:\"background-repeat\",initialValue:\"repeat\",prefix:!1,type:wt.LIST,parse:function(e){return Ye(e).map((function(e){return e.filter(qe).map((function(e){return e.value})).join(\" \")})).map(hr)}},hr=function(e){switch(e){case\"no-repeat\":return ar.NO_REPEAT;case\"repeat-x\":case\"repeat no-repeat\":return ar.REPEAT_X;case\"repeat-y\":case\"no-repeat repeat\":return ar.REPEAT_Y;case\"repeat\":default:return ar.REPEAT}};!function(e){e.AUTO=\"auto\",e.CONTAIN=\"contain\",e.COVER=\"cover\"}(dr||(dr={}));var pr,mr={name:\"background-size\",initialValue:\"0\",prefix:!1,type:wt.LIST,parse:function(e){return Ye(e).map((function(e){return e.filter(gr)}))}},gr=function(e){return qe(e)||et(e)},yr=function(e){return{name:\"border-\"+e+\"-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"}},vr=yr(\"top\"),wr=yr(\"right\"),br=yr(\"bottom\"),Br=yr(\"left\"),jr=function(e){return{name:\"border-radius-\"+e,initialValue:\"0 0\",prefix:!1,type:wt.LIST,parse:function(e){return tt(e.filter(et))}}},_r=jr(\"top-left\"),Cr=jr(\"top-right\"),xr=jr(\"bottom-right\"),Er=jr(\"bottom-left\");!function(e){e[e.NONE=0]=\"NONE\",e[e.SOLID=1]=\"SOLID\",e[e.DASHED=2]=\"DASHED\",e[e.DOTTED=3]=\"DOTTED\",e[e.DOUBLE=4]=\"DOUBLE\"}(pr||(pr={}));var Nr,Qr=function(e){return{name:\"border-\"+e+\"-style\",initialValue:\"solid\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"none\":return pr.NONE;case\"dashed\":return pr.DASHED;case\"dotted\":return pr.DOTTED;case\"double\":return pr.DOUBLE}return pr.SOLID}}},Fr=Qr(\"top\"),Ur=Qr(\"right\"),Sr=Qr(\"bottom\"),Lr=Qr(\"left\"),Tr=function(e){return{name:\"border-\"+e+\"-width\",initialValue:\"0\",type:wt.VALUE,prefix:!1,parse:function(e){return ze(e)?e.number:0}}},Hr=Tr(\"top\"),Ir=Tr(\"right\"),Pr=Tr(\"bottom\"),Or=Tr(\"left\"),kr={name:\"color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Rr={name:\"display\",initialValue:\"inline-block\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).reduce((function(e,t){return e|Mr(t.value)}),0)}},Mr=function(e){switch(e){case\"block\":case\"-webkit-box\":return 2;case\"inline\":return 4;case\"run-in\":return 8;case\"flow\":return 16;case\"flow-root\":return 32;case\"table\":return 64;case\"flex\":case\"-webkit-flex\":return 128;case\"grid\":case\"-ms-grid\":return 256;case\"ruby\":return 512;case\"subgrid\":return 1024;case\"list-item\":return 2048;case\"table-row-group\":return 4096;case\"table-header-group\":return 8192;case\"table-footer-group\":return 16384;case\"table-row\":return 32768;case\"table-cell\":return 65536;case\"table-column-group\":return 131072;case\"table-column\":return 262144;case\"table-caption\":return 524288;case\"ruby-base\":return 1048576;case\"ruby-text\":return 2097152;case\"ruby-base-container\":return 4194304;case\"ruby-text-container\":return 8388608;case\"contents\":return 16777216;case\"inline-block\":return 33554432;case\"inline-list-item\":return 67108864;case\"inline-table\":return 134217728;case\"inline-flex\":return 268435456;case\"inline-grid\":return 536870912}return 0};!function(e){e[e.NONE=0]=\"NONE\",e[e.LEFT=1]=\"LEFT\",e[e.RIGHT=2]=\"RIGHT\",e[e.INLINE_START=3]=\"INLINE_START\",e[e.INLINE_END=4]=\"INLINE_END\"}(Nr||(Nr={}));var Dr,Kr={name:\"float\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"left\":return Nr.LEFT;case\"right\":return Nr.RIGHT;case\"inline-start\":return Nr.INLINE_START;case\"inline-end\":return Nr.INLINE_END}return Nr.NONE}},zr={name:\"letter-spacing\",initialValue:\"0\",prefix:!1,type:wt.VALUE,parse:function(e){return e.type===d.IDENT_TOKEN&&\"normal\"===e.value?0:e.type===d.NUMBER_TOKEN||e.type===d.DIMENSION_TOKEN?e.number:0}};!function(e){e.NORMAL=\"normal\",e.STRICT=\"strict\"}(Dr||(Dr={}));var Vr,qr={name:\"line-break\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"strict\":return Dr.STRICT;case\"normal\":default:return Dr.NORMAL}}},Gr={name:\"line-height\",initialValue:\"normal\",prefix:!1,type:wt.TOKEN_VALUE},Xr={name:\"list-style-image\",initialValue:\"none\",type:wt.VALUE,prefix:!1,parse:function(e){return e.type===d.IDENT_TOKEN&&\"none\"===e.value?null:ir(e)}};!function(e){e[e.INSIDE=0]=\"INSIDE\",e[e.OUTSIDE=1]=\"OUTSIDE\"}(Vr||(Vr={}));var Wr,Jr={name:\"list-style-position\",initialValue:\"outside\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"inside\":return Vr.INSIDE;case\"outside\":default:return Vr.OUTSIDE}}};!function(e){e[e.NONE=-1]=\"NONE\",e[e.DISC=0]=\"DISC\",e[e.CIRCLE=1]=\"CIRCLE\",e[e.SQUARE=2]=\"SQUARE\",e[e.DECIMAL=3]=\"DECIMAL\",e[e.CJK_DECIMAL=4]=\"CJK_DECIMAL\",e[e.DECIMAL_LEADING_ZERO=5]=\"DECIMAL_LEADING_ZERO\",e[e.LOWER_ROMAN=6]=\"LOWER_ROMAN\",e[e.UPPER_ROMAN=7]=\"UPPER_ROMAN\",e[e.LOWER_GREEK=8]=\"LOWER_GREEK\",e[e.LOWER_ALPHA=9]=\"LOWER_ALPHA\",e[e.UPPER_ALPHA=10]=\"UPPER_ALPHA\",e[e.ARABIC_INDIC=11]=\"ARABIC_INDIC\",e[e.ARMENIAN=12]=\"ARMENIAN\",e[e.BENGALI=13]=\"BENGALI\",e[e.CAMBODIAN=14]=\"CAMBODIAN\",e[e.CJK_EARTHLY_BRANCH=15]=\"CJK_EARTHLY_BRANCH\",e[e.CJK_HEAVENLY_STEM=16]=\"CJK_HEAVENLY_STEM\",e[e.CJK_IDEOGRAPHIC=17]=\"CJK_IDEOGRAPHIC\",e[e.DEVANAGARI=18]=\"DEVANAGARI\",e[e.ETHIOPIC_NUMERIC=19]=\"ETHIOPIC_NUMERIC\",e[e.GEORGIAN=20]=\"GEORGIAN\",e[e.GUJARATI=21]=\"GUJARATI\",e[e.GURMUKHI=22]=\"GURMUKHI\",e[e.HEBREW=22]=\"HEBREW\",e[e.HIRAGANA=23]=\"HIRAGANA\",e[e.HIRAGANA_IROHA=24]=\"HIRAGANA_IROHA\",e[e.JAPANESE_FORMAL=25]=\"JAPANESE_FORMAL\",e[e.JAPANESE_INFORMAL=26]=\"JAPANESE_INFORMAL\",e[e.KANNADA=27]=\"KANNADA\",e[e.KATAKANA=28]=\"KATAKANA\",e[e.KATAKANA_IROHA=29]=\"KATAKANA_IROHA\",e[e.KHMER=30]=\"KHMER\",e[e.KOREAN_HANGUL_FORMAL=31]=\"KOREAN_HANGUL_FORMAL\",e[e.KOREAN_HANJA_FORMAL=32]=\"KOREAN_HANJA_FORMAL\",e[e.KOREAN_HANJA_INFORMAL=33]=\"KOREAN_HANJA_INFORMAL\",e[e.LAO=34]=\"LAO\",e[e.LOWER_ARMENIAN=35]=\"LOWER_ARMENIAN\",e[e.MALAYALAM=36]=\"MALAYALAM\",e[e.MONGOLIAN=37]=\"MONGOLIAN\",e[e.MYANMAR=38]=\"MYANMAR\",e[e.ORIYA=39]=\"ORIYA\",e[e.PERSIAN=40]=\"PERSIAN\",e[e.SIMP_CHINESE_FORMAL=41]=\"SIMP_CHINESE_FORMAL\",e[e.SIMP_CHINESE_INFORMAL=42]=\"SIMP_CHINESE_INFORMAL\",e[e.TAMIL=43]=\"TAMIL\",e[e.TELUGU=44]=\"TELUGU\",e[e.THAI=45]=\"THAI\",e[e.TIBETAN=46]=\"TIBETAN\",e[e.TRAD_CHINESE_FORMAL=47]=\"TRAD_CHINESE_FORMAL\",e[e.TRAD_CHINESE_INFORMAL=48]=\"TRAD_CHINESE_INFORMAL\",e[e.UPPER_ARMENIAN=49]=\"UPPER_ARMENIAN\",e[e.DISCLOSURE_OPEN=50]=\"DISCLOSURE_OPEN\",e[e.DISCLOSURE_CLOSED=51]=\"DISCLOSURE_CLOSED\"}(Wr||(Wr={}));var Yr,Zr={name:\"list-style-type\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"disc\":return Wr.DISC;case\"circle\":return Wr.CIRCLE;case\"square\":return Wr.SQUARE;case\"decimal\":return Wr.DECIMAL;case\"cjk-decimal\":return Wr.CJK_DECIMAL;case\"decimal-leading-zero\":return Wr.DECIMAL_LEADING_ZERO;case\"lower-roman\":return Wr.LOWER_ROMAN;case\"upper-roman\":return Wr.UPPER_ROMAN;case\"lower-greek\":return Wr.LOWER_GREEK;case\"lower-alpha\":return Wr.LOWER_ALPHA;case\"upper-alpha\":return Wr.UPPER_ALPHA;case\"arabic-indic\":return Wr.ARABIC_INDIC;case\"armenian\":return Wr.ARMENIAN;case\"bengali\":return Wr.BENGALI;case\"cambodian\":return Wr.CAMBODIAN;case\"cjk-earthly-branch\":return Wr.CJK_EARTHLY_BRANCH;case\"cjk-heavenly-stem\":return Wr.CJK_HEAVENLY_STEM;case\"cjk-ideographic\":return Wr.CJK_IDEOGRAPHIC;case\"devanagari\":return Wr.DEVANAGARI;case\"ethiopic-numeric\":return Wr.ETHIOPIC_NUMERIC;case\"georgian\":return Wr.GEORGIAN;case\"gujarati\":return Wr.GUJARATI;case\"gurmukhi\":return Wr.GURMUKHI;case\"hebrew\":return Wr.HEBREW;case\"hiragana\":return Wr.HIRAGANA;case\"hiragana-iroha\":return Wr.HIRAGANA_IROHA;case\"japanese-formal\":return Wr.JAPANESE_FORMAL;case\"japanese-informal\":return Wr.JAPANESE_INFORMAL;case\"kannada\":return Wr.KANNADA;case\"katakana\":return Wr.KATAKANA;case\"katakana-iroha\":return Wr.KATAKANA_IROHA;case\"khmer\":return Wr.KHMER;case\"korean-hangul-formal\":return Wr.KOREAN_HANGUL_FORMAL;case\"korean-hanja-formal\":return Wr.KOREAN_HANJA_FORMAL;case\"korean-hanja-informal\":return Wr.KOREAN_HANJA_INFORMAL;case\"lao\":return Wr.LAO;case\"lower-armenian\":return Wr.LOWER_ARMENIAN;case\"malayalam\":return Wr.MALAYALAM;case\"mongolian\":return Wr.MONGOLIAN;case\"myanmar\":return Wr.MYANMAR;case\"oriya\":return Wr.ORIYA;case\"persian\":return Wr.PERSIAN;case\"simp-chinese-formal\":return Wr.SIMP_CHINESE_FORMAL;case\"simp-chinese-informal\":return Wr.SIMP_CHINESE_INFORMAL;case\"tamil\":return Wr.TAMIL;case\"telugu\":return Wr.TELUGU;case\"thai\":return Wr.THAI;case\"tibetan\":return Wr.TIBETAN;case\"trad-chinese-formal\":return Wr.TRAD_CHINESE_FORMAL;case\"trad-chinese-informal\":return Wr.TRAD_CHINESE_INFORMAL;case\"upper-armenian\":return Wr.UPPER_ARMENIAN;case\"disclosure-open\":return Wr.DISCLOSURE_OPEN;case\"disclosure-closed\":return Wr.DISCLOSURE_CLOSED;case\"none\":default:return Wr.NONE}}},$r=function(e){return{name:\"margin-\"+e,initialValue:\"0\",prefix:!1,type:wt.TOKEN_VALUE}},en=$r(\"top\"),tn=$r(\"right\"),rn=$r(\"bottom\"),nn=$r(\"left\");!function(e){e[e.VISIBLE=0]=\"VISIBLE\",e[e.HIDDEN=1]=\"HIDDEN\",e[e.SCROLL=2]=\"SCROLL\",e[e.AUTO=3]=\"AUTO\"}(Yr||(Yr={}));var on,sn={name:\"overflow\",initialValue:\"visible\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).map((function(e){switch(e.value){case\"hidden\":return Yr.HIDDEN;case\"scroll\":return Yr.SCROLL;case\"auto\":return Yr.AUTO;case\"visible\":default:return Yr.VISIBLE}}))}};!function(e){e.NORMAL=\"normal\",e.BREAK_WORD=\"break-word\"}(on||(on={}));var an,An={name:\"overflow-wrap\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"break-word\":return on.BREAK_WORD;case\"normal\":default:return on.NORMAL}}},un=function(e){return{name:\"padding-\"+e,initialValue:\"0\",prefix:!1,type:wt.TYPE_VALUE,format:\"length-percentage\"}},cn=un(\"top\"),ln=un(\"right\"),dn=un(\"bottom\"),fn=un(\"left\");!function(e){e[e.LEFT=0]=\"LEFT\",e[e.CENTER=1]=\"CENTER\",e[e.RIGHT=2]=\"RIGHT\"}(an||(an={}));var hn,pn={name:\"text-align\",initialValue:\"left\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"right\":return an.RIGHT;case\"center\":case\"justify\":return an.CENTER;case\"left\":default:return an.LEFT}}};!function(e){e[e.STATIC=0]=\"STATIC\",e[e.RELATIVE=1]=\"RELATIVE\",e[e.ABSOLUTE=2]=\"ABSOLUTE\",e[e.FIXED=3]=\"FIXED\",e[e.STICKY=4]=\"STICKY\"}(hn||(hn={}));var mn,gn={name:\"position\",initialValue:\"static\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"relative\":return hn.RELATIVE;case\"absolute\":return hn.ABSOLUTE;case\"fixed\":return hn.FIXED;case\"sticky\":return hn.STICKY}return hn.STATIC}},yn={name:\"text-shadow\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return 1===e.length&&Xe(e[0],\"none\")?[]:Ye(e).map((function(e){for(var t={color:_t.TRANSPARENT,offsetX:rt,offsetY:rt,blur:rt},r=0,n=0;n\u003Ce.length;n++){var o=e[n];$e(o)?(0===r?t.offsetX=o:1===r?t.offsetY=o:t.blur=o,r++):t.color=ft(o)}return t}))}};!function(e){e[e.NONE=0]=\"NONE\",e[e.LOWERCASE=1]=\"LOWERCASE\",e[e.UPPERCASE=2]=\"UPPERCASE\",e[e.CAPITALIZE=3]=\"CAPITALIZE\"}(mn||(mn={}));var vn,wn={name:\"text-transform\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"uppercase\":return mn.UPPERCASE;case\"lowercase\":return mn.LOWERCASE;case\"capitalize\":return mn.CAPITALIZE}return mn.NONE}},bn={name:\"transform\",initialValue:\"none\",prefix:!0,type:wt.VALUE,parse:function(e){if(e.type===d.IDENT_TOKEN&&\"none\"===e.value)return null;if(e.type===d.FUNCTION){var t=Bn[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported transform function \"'+e.name+'\"');return t(e.values)}return null}},Bn={matrix:function(e){var t=e.filter((function(e){return e.type===d.NUMBER_TOKEN})).map((function(e){return e.number}));return 6===t.length?t:null},matrix3d:function(e){var t=e.filter((function(e){return e.type===d.NUMBER_TOKEN})).map((function(e){return e.number})),r=t[0],n=t[1],o=(t[2],t[3],t[4]),s=t[5],i=(t[6],t[7],t[8],t[9],t[10],t[11],t[12]),a=t[13];return t[14],t[15],16===t.length?[r,n,o,s,i,a]:null}},jn={type:d.PERCENTAGE_TOKEN,number:50,flags:4},_n=[jn,jn],Cn={name:\"transform-origin\",initialValue:\"50% 50%\",prefix:!0,type:wt.LIST,parse:function(e){var t=e.filter(et);return 2!==t.length?_n:[t[0],t[1]]}};!function(e){e[e.VISIBLE=0]=\"VISIBLE\",e[e.HIDDEN=1]=\"HIDDEN\",e[e.COLLAPSE=2]=\"COLLAPSE\"}(vn||(vn={}));var xn,En={name:\"visible\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"hidden\":return vn.HIDDEN;case\"collapse\":return vn.COLLAPSE;case\"visible\":default:return vn.VISIBLE}}};!function(e){e.NORMAL=\"normal\",e.BREAK_ALL=\"break-all\",e.KEEP_ALL=\"keep-all\"}(xn||(xn={}));var Nn,Qn={name:\"word-break\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"break-all\":return xn.BREAK_ALL;case\"keep-all\":return xn.KEEP_ALL;case\"normal\":default:return xn.NORMAL}}},Fn={name:\"z-index\",initialValue:\"auto\",prefix:!1,type:wt.VALUE,parse:function(e){if(e.type===d.IDENT_TOKEN)return{auto:!0,order:0};if(Ve(e))return{auto:!1,order:e.number};throw new Error(\"Invalid z-index number parsed\")}},Un={name:\"opacity\",initialValue:\"1\",type:wt.VALUE,prefix:!1,parse:function(e){return Ve(e)?e.number:1}},Sn={name:\"text-decoration-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Ln={name:\"text-decoration-line\",initialValue:\"none\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).map((function(e){switch(e.value){case\"underline\":return 1;case\"overline\":return 2;case\"line-through\":return 3;case\"none\":return 4}return 0})).filter((function(e){return 0!==e}))}},Tn={name:\"font-family\",initialValue:\"\",prefix:!1,type:wt.LIST,parse:function(e){var t=[],r=[];return e.forEach((function(e){switch(e.type){case d.IDENT_TOKEN:case d.STRING_TOKEN:t.push(e.value);break;case d.NUMBER_TOKEN:t.push(e.number.toString());break;case d.COMMA_TOKEN:r.push(t.join(\" \")),t.length=0}})),t.length&&r.push(t.join(\" \")),r.map((function(e){return-1===e.indexOf(\" \")?e:\"'\"+e+\"'\"}))}},Hn={name:\"font-size\",initialValue:\"0\",prefix:!1,type:wt.TYPE_VALUE,format:\"length\"},In={name:\"font-weight\",initialValue:\"normal\",type:wt.VALUE,prefix:!1,parse:function(e){if(Ve(e))return e.number;if(qe(e))switch(e.value){case\"bold\":return 700;case\"normal\":default:return 400}return 400}},Pn={name:\"font-variant\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return e.filter(qe).map((function(e){return e.value}))}};!function(e){e.NORMAL=\"normal\",e.ITALIC=\"italic\",e.OBLIQUE=\"oblique\"}(Nn||(Nn={}));var On,kn={name:\"font-style\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"oblique\":return Nn.OBLIQUE;case\"italic\":return Nn.ITALIC;case\"normal\":default:return Nn.NORMAL}}},Rn=function(e,t){return 0!=(e&t)},Mn={name:\"content\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){if(0===e.length)return[];var t=e[0];return t.type===d.IDENT_TOKEN&&\"none\"===t.value?[]:e}},Dn={name:\"counter-increment\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return null;var t=e[0];if(t.type===d.IDENT_TOKEN&&\"none\"===t.value)return null;for(var r=[],n=e.filter(We),o=0;o\u003Cn.length;o++){var s=n[o],i=n[o+1];if(s.type===d.IDENT_TOKEN){var a=i&&Ve(i)?i.number:1;r.push({counter:s.value,increment:a})}}return r}},Kn={name:\"counter-reset\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return[];for(var t=[],r=e.filter(We),n=0;n\u003Cr.length;n++){var o=r[n],s=r[n+1];if(qe(o)&&\"none\"!==o.value){var i=s&&Ve(s)?s.number:0;t.push({counter:o.value,reset:i})}}return t}},zn={name:\"quotes\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return null;var t=e[0];if(t.type===d.IDENT_TOKEN&&\"none\"===t.value)return null;var r=[],n=e.filter(Ge);if(n.length%2!=0)return null;for(var o=0;o\u003Cn.length;o+=2){var s=n[o].value,i=n[o+1].value;r.push({open:s,close:i})}return r}},Vn=function(e,t,r){if(!e)return\"\";var n=e[Math.min(t,e.length-1)];return n?r?n.open:n.close:\"\"},qn={name:\"box-shadow\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return 1===e.length&&Xe(e[0],\"none\")?[]:Ye(e).map((function(e){for(var t={color:255,offsetX:rt,offsetY:rt,blur:rt,spread:rt,inset:!1},r=0,n=0;n\u003Ce.length;n++){var o=e[n];Xe(o,\"inset\")?t.inset=!0:$e(o)?(0===r?t.offsetX=o:1===r?t.offsetY=o:2===r?t.blur=o:t.spread=o,r++):t.color=ft(o)}return t}))}},Gn=function(){function e(e){this.backgroundClip=Jn(xt,e.backgroundClip),this.backgroundColor=Jn(Et,e.backgroundColor),this.backgroundImage=Jn(ur,e.backgroundImage),this.backgroundOrigin=Jn(cr,e.backgroundOrigin),this.backgroundPosition=Jn(lr,e.backgroundPosition),this.backgroundRepeat=Jn(fr,e.backgroundRepeat),this.backgroundSize=Jn(mr,e.backgroundSize),this.borderTopColor=Jn(vr,e.borderTopColor),this.borderRightColor=Jn(wr,e.borderRightColor),this.borderBottomColor=Jn(br,e.borderBottomColor),this.borderLeftColor=Jn(Br,e.borderLeftColor),this.borderTopLeftRadius=Jn(_r,e.borderTopLeftRadius),this.borderTopRightRadius=Jn(Cr,e.borderTopRightRadius),this.borderBottomRightRadius=Jn(xr,e.borderBottomRightRadius),this.borderBottomLeftRadius=Jn(Er,e.borderBottomLeftRadius),this.borderTopStyle=Jn(Fr,e.borderTopStyle),this.borderRightStyle=Jn(Ur,e.borderRightStyle),this.borderBottomStyle=Jn(Sr,e.borderBottomStyle),this.borderLeftStyle=Jn(Lr,e.borderLeftStyle),this.borderTopWidth=Jn(Hr,e.borderTopWidth),this.borderRightWidth=Jn(Ir,e.borderRightWidth),this.borderBottomWidth=Jn(Pr,e.borderBottomWidth),this.borderLeftWidth=Jn(Or,e.borderLeftWidth),this.boxShadow=Jn(qn,e.boxShadow),this.color=Jn(kr,e.color),this.display=Jn(Rr,e.display),this.float=Jn(Kr,e.cssFloat),this.fontFamily=Jn(Tn,e.fontFamily),this.fontSize=Jn(Hn,e.fontSize),this.fontStyle=Jn(kn,e.fontStyle),this.fontVariant=Jn(Pn,e.fontVariant),this.fontWeight=Jn(In,e.fontWeight),this.letterSpacing=Jn(zr,e.letterSpacing),this.lineBreak=Jn(qr,e.lineBreak),this.lineHeight=Jn(Gr,e.lineHeight),this.listStyleImage=Jn(Xr,e.listStyleImage),this.listStylePosition=Jn(Jr,e.listStylePosition),this.listStyleType=Jn(Zr,e.listStyleType),this.marginTop=Jn(en,e.marginTop),this.marginRight=Jn(tn,e.marginRight),this.marginBottom=Jn(rn,e.marginBottom),this.marginLeft=Jn(nn,e.marginLeft),this.opacity=Jn(Un,e.opacity);var t=Jn(sn,e.overflow);this.overflowX=t[0],this.overflowY=t[t.length>1?1:0],this.overflowWrap=Jn(An,e.overflowWrap),this.paddingTop=Jn(cn,e.paddingTop),this.paddingRight=Jn(ln,e.paddingRight),this.paddingBottom=Jn(dn,e.paddingBottom),this.paddingLeft=Jn(fn,e.paddingLeft),this.position=Jn(gn,e.position),this.textAlign=Jn(pn,e.textAlign),this.textDecorationColor=Jn(Sn,e.textDecorationColor||e.color),this.textDecorationLine=Jn(Ln,e.textDecorationLine),this.textShadow=Jn(yn,e.textShadow),this.textTransform=Jn(wn,e.textTransform),this.transform=Jn(bn,e.transform),this.transformOrigin=Jn(Cn,e.transformOrigin),this.visibility=Jn(En,e.visibility),this.wordBreak=Jn(Qn,e.wordBreak),this.zIndex=Jn(Fn,e.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===vn.VISIBLE},e.prototype.isTransparent=function(){return ht(this.backgroundColor)},e.prototype.isTransformed=function(){return null!==this.transform},e.prototype.isPositioned=function(){return this.position!==hn.STATIC},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==Nr.NONE},e.prototype.isInlineLevel=function(){return Rn(this.display,4)||Rn(this.display,33554432)||Rn(this.display,268435456)||Rn(this.display,536870912)||Rn(this.display,67108864)||Rn(this.display,134217728)},e}(),Xn=function(e){this.content=Jn(Mn,e.content),this.quotes=Jn(zn,e.quotes)},Wn=function(e){this.counterIncrement=Jn(Dn,e.counterIncrement),this.counterReset=Jn(Kn,e.counterReset)},Jn=function(e,t){var r=new De,n=null!=t?t.toString():e.initialValue;r.write(n);var o=new Ke(r.read());switch(e.type){case wt.IDENT_VALUE:var s=o.parseComponentValue();return e.parse(qe(s)?s.value:e.initialValue);case wt.VALUE:return e.parse(o.parseComponentValue());case wt.LIST:return e.parse(o.parseComponentValues());case wt.TOKEN_VALUE:return o.parseComponentValue();case wt.TYPE_VALUE:switch(e.format){case\"angle\":return ut(o.parseComponentValue());case\"color\":return ft(o.parseComponentValue());case\"image\":return ir(o.parseComponentValue());case\"length\":var i=o.parseComponentValue();return $e(i)?i:rt;case\"length-percentage\":var a=o.parseComponentValue();return et(a)?a:rt}}throw new Error(\"Attempting to parse unsupported css format type \"+e.format)},Yn=function(e){this.styles=new Gn(window.getComputedStyle(e,null)),this.textNodes=[],this.elements=[],null!==this.styles.transform&&So(e)&&(e.style.transform=\"none\"),this.bounds=i(e),this.flags=0},Zn=function(e,t){this.text=e,this.bounds=t},$n=function(e){var t=e.ownerDocument;if(t){var r=t.createElement(\"html2canvaswrapper\");r.appendChild(e.cloneNode(!0));var n=e.parentNode;if(n){n.replaceChild(r,e);var o=i(r);return r.firstChild&&n.replaceChild(r.firstChild,r),o}}return new s(0,0,0,0)},eo=function(e,t,r){var n=e.ownerDocument;if(!n)throw new Error(\"Node has no owner document\");var o=n.createRange();return o.setStart(e,t),o.setEnd(e,t+r),s.fromClientRect(o.getBoundingClientRect())},to=function(e,t){return 0!==t.letterSpacing?a(e).map((function(e){return A(e)})):ro(e,t)},ro=function(e,t){for(var r,n=function(e,t){var r=a(e),n=ie(r,t),o=n[0],s=n[1],i=n[2],A=r.length,u=0,c=0;return{next:function(){if(c>=A)return{done:!0,value:null};for(var e=G;c\u003CA&&(e=se(r,s,o,++c,i))===G;);if(e!==G||c===A){var t=new ae(r,e,u,c);return u=c,{value:t,done:!1}}return{done:!0,value:null}}}}(e,{lineBreak:t.lineBreak,wordBreak:t.overflowWrap===on.BREAK_WORD?\"break-word\":t.wordBreak}),o=[];!(r=n.next()).done;)r.value&&o.push(r.value.slice());return o},no=function(e,t){this.text=oo(e.data,t.textTransform),this.textBounds=function(e,t,r){var n=to(e,t),o=[],s=0;return n.forEach((function(e){if(t.textDecorationLine.length||e.trim().length>0)if(Pt.SUPPORT_RANGE_BOUNDS)o.push(new Zn(e,eo(r,s,e.length)));else{var n=r.splitText(e.length);o.push(new Zn(e,$n(r))),r=n}else Pt.SUPPORT_RANGE_BOUNDS||(r=r.splitText(e.length));s+=e.length})),o}(this.text,t,e)},oo=function(e,t){switch(t){case mn.LOWERCASE:return e.toLowerCase();case mn.CAPITALIZE:return e.replace(so,io);case mn.UPPERCASE:return e.toUpperCase();default:return e}},so=\u002F(^|\\s|:|-|\\(|\\))([a-z])\u002Fg,io=function(e,t,r){return e.length>0?t+r.toUpperCase():e},ao=function(e){function r(t){var r=e.call(this,t)||this;return r.src=t.currentSrc||t.src,r.intrinsicWidth=t.naturalWidth,r.intrinsicHeight=t.naturalHeight,kt.getInstance().addImage(r.src),r}return t(r,e),r}(Yn),Ao=function(e){function r(t){var r=e.call(this,t)||this;return r.canvas=t,r.intrinsicWidth=t.width,r.intrinsicHeight=t.height,r}return t(r,e),r}(Yn),uo=function(e){function r(t){var r=e.call(this,t)||this,n=new XMLSerializer;return r.svg=\"data:image\u002Fsvg+xml,\"+encodeURIComponent(n.serializeToString(t)),r.intrinsicWidth=t.width.baseVal.value,r.intrinsicHeight=t.height.baseVal.value,kt.getInstance().addImage(r.svg),r}return t(r,e),r}(Yn),co=function(e){function r(t){var r=e.call(this,t)||this;return r.value=t.value,r}return t(r,e),r}(Yn),lo=function(e){function r(t){var r=e.call(this,t)||this;return r.start=t.start,r.reversed=\"boolean\"==typeof t.reversed&&!0===t.reversed,r}return t(r,e),r}(Yn),fo=[{type:d.DIMENSION_TOKEN,flags:0,unit:\"px\",number:3}],ho=[{type:d.PERCENTAGE_TOKEN,flags:0,number:50}],po=\"checkbox\",mo=\"radio\",go=\"password\",yo=707406591,vo=function(e){function r(t){var r,n,o,i=e.call(this,t)||this;switch(i.type=t.type.toLowerCase(),i.checked=t.checked,i.value=0===(o=(n=t).type===go?new Array(n.value.length+1).join(\"•\"):n.value).length?n.placeholder||\"\":o,i.type!==po&&i.type!==mo||(i.styles.backgroundColor=3739148031,i.styles.borderTopColor=i.styles.borderRightColor=i.styles.borderBottomColor=i.styles.borderLeftColor=2779096575,i.styles.borderTopWidth=i.styles.borderRightWidth=i.styles.borderBottomWidth=i.styles.borderLeftWidth=1,i.styles.borderTopStyle=i.styles.borderRightStyle=i.styles.borderBottomStyle=i.styles.borderLeftStyle=pr.SOLID,i.styles.backgroundClip=[bt.BORDER_BOX],i.styles.backgroundOrigin=[0],i.bounds=(r=i.bounds).width>r.height?new s(r.left+(r.width-r.height)\u002F2,r.top,r.height,r.height):r.width\u003Cr.height?new s(r.left,r.top+(r.height-r.width)\u002F2,r.width,r.width):r),i.type){case po:i.styles.borderTopRightRadius=i.styles.borderTopLeftRadius=i.styles.borderBottomRightRadius=i.styles.borderBottomLeftRadius=fo;break;case mo:i.styles.borderTopRightRadius=i.styles.borderTopLeftRadius=i.styles.borderBottomRightRadius=i.styles.borderBottomLeftRadius=ho}return i}return t(r,e),r}(Yn),wo=function(e){function r(t){var r=e.call(this,t)||this,n=t.options[t.selectedIndex||0];return r.value=n&&n.text||\"\",r}return t(r,e),r}(Yn),bo=function(e){function r(t){var r=e.call(this,t)||this;return r.value=t.value,r}return t(r,e),r}(Yn),Bo=function(e){return ft(Ke.create(e).parseComponentValue())},jo=function(e){function r(t){var r=e.call(this,t)||this;r.src=t.src,r.width=parseInt(t.width,10)||0,r.height=parseInt(t.height,10)||0,r.backgroundColor=r.styles.backgroundColor;try{if(t.contentWindow&&t.contentWindow.document&&t.contentWindow.document.documentElement){r.tree=Eo(t.contentWindow.document.documentElement);var n=t.contentWindow.document.documentElement?Bo(getComputedStyle(t.contentWindow.document.documentElement).backgroundColor):_t.TRANSPARENT,o=t.contentWindow.document.body?Bo(getComputedStyle(t.contentWindow.document.body).backgroundColor):_t.TRANSPARENT;r.backgroundColor=ht(n)?ht(o)?r.styles.backgroundColor:o:n}}catch(e){}return r}return t(r,e),r}(Yn),_o=[\"OL\",\"UL\",\"MENU\"],Co=function(e,t,r){for(var n=e.firstChild,o=void 0;n;n=o)if(o=n.nextSibling,Fo(n)&&n.data.trim().length>0)t.textNodes.push(new no(n,t.styles));else if(Uo(n)){var s=xo(n);s.styles.isVisible()&&(No(n,s,r)?s.flags|=4:Qo(s.styles)&&(s.flags|=2),-1!==_o.indexOf(n.tagName)&&(s.flags|=8),t.elements.push(s),zo(n)||Po(n)||Vo(n)||Co(n,s,r))}},xo=function(e){return Ro(e)?new ao(e):ko(e)?new Ao(e):Po(e)?new uo(e):To(e)?new co(e):Ho(e)?new lo(e):Io(e)?new vo(e):Vo(e)?new wo(e):zo(e)?new bo(e):Mo(e)?new jo(e):new Yn(e)},Eo=function(e){var t=xo(e);return t.flags|=4,Co(e,t,t),t},No=function(e,t,r){return t.styles.isPositionedWithZIndex()||t.styles.opacity\u003C1||t.styles.isTransformed()||Oo(e)&&r.styles.isTransparent()},Qo=function(e){return e.isPositioned()||e.isFloating()},Fo=function(e){return e.nodeType===Node.TEXT_NODE},Uo=function(e){return e.nodeType===Node.ELEMENT_NODE},So=function(e){return Uo(e)&&void 0!==e.style&&!Lo(e)},Lo=function(e){return\"object\"==typeof e.className},To=function(e){return\"LI\"===e.tagName},Ho=function(e){return\"OL\"===e.tagName},Io=function(e){return\"INPUT\"===e.tagName},Po=function(e){return\"svg\"===e.tagName},Oo=function(e){return\"BODY\"===e.tagName},ko=function(e){return\"CANVAS\"===e.tagName},Ro=function(e){return\"IMG\"===e.tagName},Mo=function(e){return\"IFRAME\"===e.tagName},Do=function(e){return\"STYLE\"===e.tagName},Ko=function(e){return\"SCRIPT\"===e.tagName},zo=function(e){return\"TEXTAREA\"===e.tagName},Vo=function(e){return\"SELECT\"===e.tagName},qo=function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(e){var t=this.counters[e];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(e){return this.counters[e]||[]},e.prototype.pop=function(e){var t=this;e.forEach((function(e){return t.counters[e].pop()}))},e.prototype.parse=function(e){var t=this,r=e.counterIncrement,n=e.counterReset,o=!0;null!==r&&r.forEach((function(e){var r=t.counters[e.counter];r&&0!==e.increment&&(o=!1,r[Math.max(0,r.length-1)]+=e.increment)}));var s=[];return o&&n.forEach((function(e){var r=t.counters[e.counter];s.push(e.counter),r||(r=t.counters[e.counter]=[]),r.push(e.reset)})),s},e}(),Go={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[\"M\",\"CM\",\"D\",\"CD\",\"C\",\"XC\",\"L\",\"XL\",\"X\",\"IX\",\"V\",\"IV\",\"I\"]},Xo={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"Ք\",\"Փ\",\"Ւ\",\"Ց\",\"Ր\",\"Տ\",\"Վ\",\"Ս\",\"Ռ\",\"Ջ\",\"Պ\",\"Չ\",\"Ո\",\"Շ\",\"Ն\",\"Յ\",\"Մ\",\"Ճ\",\"Ղ\",\"Ձ\",\"Հ\",\"Կ\",\"Ծ\",\"Խ\",\"Լ\",\"Ի\",\"Ժ\",\"Թ\",\"Ը\",\"Է\",\"Զ\",\"Ե\",\"Դ\",\"Գ\",\"Բ\",\"Ա\"]},Wo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[\"י׳\",\"ט׳\",\"ח׳\",\"ז׳\",\"ו׳\",\"ה׳\",\"ד׳\",\"ג׳\",\"ב׳\",\"א׳\",\"ת\",\"ש\",\"ר\",\"ק\",\"צ\",\"פ\",\"ע\",\"ס\",\"נ\",\"מ\",\"ל\",\"כ\",\"יט\",\"יח\",\"יז\",\"טז\",\"טו\",\"י\",\"ט\",\"ח\",\"ז\",\"ו\",\"ה\",\"ד\",\"ג\",\"ב\",\"א\"]},Jo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"ჵ\",\"ჰ\",\"ჯ\",\"ჴ\",\"ხ\",\"ჭ\",\"წ\",\"ძ\",\"ც\",\"ჩ\",\"შ\",\"ყ\",\"ღ\",\"ქ\",\"ფ\",\"ჳ\",\"ტ\",\"ს\",\"რ\",\"ჟ\",\"პ\",\"ო\",\"ჲ\",\"ნ\",\"მ\",\"ლ\",\"კ\",\"ი\",\"თ\",\"ჱ\",\"ზ\",\"ვ\",\"ე\",\"დ\",\"გ\",\"ბ\",\"ა\"]},Yo=function(e,t,r,n,o,s){return e\u003Ct||e>r?is(e,o,s.length>0):n.integers.reduce((function(t,r,o){for(;e>=r;)e-=r,t+=n.values[o];return t}),\"\")+s},Zo=function(e,t,r,n){var o=\"\";do{r||e--,o=n(e)+o,e\u002F=t}while(e*t>=t);return o},$o=function(e,t,r,n,o){var s=r-t+1;return(e\u003C0?\"-\":\"\")+(Zo(Math.abs(e),s,n,(function(e){return A(Math.floor(e%s)+t)}))+o)},es=function(e,t,r){void 0===r&&(r=\". \");var n=t.length;return Zo(Math.abs(e),n,!1,(function(e){return t[Math.floor(e%n)]}))+r},ts=function(e,t,r,n,o,s){if(e\u003C-9999||e>9999)return is(e,Wr.CJK_DECIMAL,o.length>0);var i=Math.abs(e),a=o;if(0===i)return t[0]+a;for(var A=0;i>0&&A\u003C=4;A++){var u=i%10;0===u&&Rn(s,1)&&\"\"!==a?a=t[u]+a:u>1||1===u&&0===A||1===u&&1===A&&Rn(s,2)||1===u&&1===A&&Rn(s,4)&&e>100||1===u&&A>1&&Rn(s,8)?a=t[u]+(A>0?r[A-1]:\"\")+a:1===u&&A>0&&(a=r[A-1]+a),i=Math.floor(i\u002F10)}return(e\u003C0?n:\"\")+a},rs=\"十百千萬\",ns=\"拾佰仟萬\",os=\"マイナス\",ss=\"마이너스\",is=function(e,t,r){var n=r?\". \":\"\",o=r?\"、\":\"\",s=r?\", \":\"\",i=r?\" \":\"\";switch(t){case Wr.DISC:return\"•\"+i;case Wr.CIRCLE:return\"◦\"+i;case Wr.SQUARE:return\"◾\"+i;case Wr.DECIMAL_LEADING_ZERO:var a=$o(e,48,57,!0,n);return a.length\u003C4?\"0\"+a:a;case Wr.CJK_DECIMAL:return es(e,\"〇一二三四五六七八九\",o);case Wr.LOWER_ROMAN:return Yo(e,1,3999,Go,Wr.DECIMAL,n).toLowerCase();case Wr.UPPER_ROMAN:return Yo(e,1,3999,Go,Wr.DECIMAL,n);case Wr.LOWER_GREEK:return $o(e,945,969,!1,n);case Wr.LOWER_ALPHA:return $o(e,97,122,!1,n);case Wr.UPPER_ALPHA:return $o(e,65,90,!1,n);case Wr.ARABIC_INDIC:return $o(e,1632,1641,!0,n);case Wr.ARMENIAN:case Wr.UPPER_ARMENIAN:return Yo(e,1,9999,Xo,Wr.DECIMAL,n);case Wr.LOWER_ARMENIAN:return Yo(e,1,9999,Xo,Wr.DECIMAL,n).toLowerCase();case Wr.BENGALI:return $o(e,2534,2543,!0,n);case Wr.CAMBODIAN:case Wr.KHMER:return $o(e,6112,6121,!0,n);case Wr.CJK_EARTHLY_BRANCH:return es(e,\"子丑寅卯辰巳午未申酉戌亥\",o);case Wr.CJK_HEAVENLY_STEM:return es(e,\"甲乙丙丁戊己庚辛壬癸\",o);case Wr.CJK_IDEOGRAPHIC:case Wr.TRAD_CHINESE_INFORMAL:return ts(e,\"零一二三四五六七八九\",rs,\"負\",o,14);case Wr.TRAD_CHINESE_FORMAL:return ts(e,\"零壹貳參肆伍陸柒捌玖\",ns,\"負\",o,15);case Wr.SIMP_CHINESE_INFORMAL:return ts(e,\"零一二三四五六七八九\",rs,\"负\",o,14);case Wr.SIMP_CHINESE_FORMAL:return ts(e,\"零壹贰叁肆伍陆柒捌玖\",ns,\"负\",o,15);case Wr.JAPANESE_INFORMAL:return ts(e,\"〇一二三四五六七八九\",\"十百千万\",os,o,0);case Wr.JAPANESE_FORMAL:return ts(e,\"零壱弐参四伍六七八九\",\"拾百千万\",os,o,7);case Wr.KOREAN_HANGUL_FORMAL:return ts(e,\"영일이삼사오육칠팔구\",\"십백천만\",ss,s,7);case Wr.KOREAN_HANJA_INFORMAL:return ts(e,\"零一二三四五六七八九\",\"十百千萬\",ss,s,0);case Wr.KOREAN_HANJA_FORMAL:return ts(e,\"零壹貳參四五六七八九\",\"拾百千\",ss,s,7);case Wr.DEVANAGARI:return $o(e,2406,2415,!0,n);case Wr.GEORGIAN:return Yo(e,1,19999,Jo,Wr.DECIMAL,n);case Wr.GUJARATI:return $o(e,2790,2799,!0,n);case Wr.GURMUKHI:return $o(e,2662,2671,!0,n);case Wr.HEBREW:return Yo(e,1,10999,Wo,Wr.DECIMAL,n);case Wr.HIRAGANA:return es(e,\"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん\");case Wr.HIRAGANA_IROHA:return es(e,\"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす\");case Wr.KANNADA:return $o(e,3302,3311,!0,n);case Wr.KATAKANA:return es(e,\"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン\",o);case Wr.KATAKANA_IROHA:return es(e,\"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス\",o);case Wr.LAO:return $o(e,3792,3801,!0,n);case Wr.MONGOLIAN:return $o(e,6160,6169,!0,n);case Wr.MYANMAR:return $o(e,4160,4169,!0,n);case Wr.ORIYA:return $o(e,2918,2927,!0,n);case Wr.PERSIAN:return $o(e,1776,1785,!0,n);case Wr.TAMIL:return $o(e,3046,3055,!0,n);case Wr.TELUGU:return $o(e,3174,3183,!0,n);case Wr.THAI:return $o(e,3664,3673,!0,n);case Wr.TIBETAN:return $o(e,3872,3881,!0,n);case Wr.DECIMAL:default:return $o(e,48,57,!0,n)}},as=\"data-html2canvas-ignore\",As=function(){function e(e,t){if(this.options=t,this.scrolledElements=[],this.referenceElement=e,this.counters=new qo,this.quoteDepth=0,!e.ownerDocument)throw new Error(\"Cloned element does not have an owner document\");this.documentElement=this.cloneNode(e.ownerDocument.documentElement)}return e.prototype.toIFrame=function(e,t){var r=this,s=cs(e,t);if(!s.contentWindow)return Promise.reject(\"Unable to find iframe window\");var i=e.defaultView.pageXOffset,a=e.defaultView.pageYOffset,A=s.contentWindow,u=A.document,c=ls(s).then((function(){return n(r,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return this.scrolledElements.forEach(ps),A&&(A.scrollTo(t.left,t.top),!\u002F(iPad|iPhone|iPod)\u002Fg.test(navigator.userAgent)||A.scrollY===t.top&&A.scrollX===t.left||(u.documentElement.style.top=-t.top+\"px\",u.documentElement.style.left=-t.left+\"px\",u.documentElement.style.position=\"absolute\")),e=this.options.onclone,void 0===this.clonedReferenceElement?[2,Promise.reject(\"Error finding the \"+this.referenceElement.nodeName+\" in the cloned document\")]:u.fonts&&u.fonts.ready?[4,u.fonts.ready]:[3,2];case 1:r.sent(),r.label=2;case 2:return\"function\"==typeof e?[2,Promise.resolve().then((function(){return e(u)})).then((function(){return s}))]:[2,s]}}))}))}));return u.open(),u.write(fs(document.doctype)+\"\u003Chtml>\u003C\u002Fhtml>\"),hs(this.referenceElement.ownerDocument,i,a),u.replaceChild(u.adoptNode(this.documentElement),u.documentElement),u.close(),c},e.prototype.createElementClone=function(e){if(ko(e))return this.createCanvasClone(e);if(Do(e))return this.createStyleClone(e);var t=e.cloneNode(!1);return Ro(t)&&\"lazy\"===t.loading&&(t.loading=\"eager\"),t},e.prototype.createStyleClone=function(e){try{var t=e.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce((function(e,t){return t&&\"string\"==typeof t.cssText?e+t.cssText:e}),\"\"),n=e.cloneNode(!1);return n.textContent=r,n}}catch(e){if(Ot.getInstance(this.options.id).error(\"Unable to access cssRules property\",e),\"SecurityError\"!==e.name)throw e}return e.cloneNode(!1)},e.prototype.createCanvasClone=function(e){if(this.options.inlineImages&&e.ownerDocument){var t=e.ownerDocument.createElement(\"img\");try{return t.src=e.toDataURL(),t}catch(e){Ot.getInstance(this.options.id).info(\"Unable to clone canvas contents, canvas is tainted\")}}var r=e.cloneNode(!1);try{r.width=e.width,r.height=e.height;var n=e.getContext(\"2d\"),o=r.getContext(\"2d\");return o&&(n?o.putImageData(n.getImageData(0,0,e.width,e.height),0,0):o.drawImage(e,0,0)),r}catch(e){}return r},e.prototype.cloneNode=function(e){if(Fo(e))return document.createTextNode(e.data);if(!e.ownerDocument)return e.cloneNode(!1);var t=e.ownerDocument.defaultView;if(t&&Uo(e)&&(So(e)||Lo(e))){var r=this.createElementClone(e),n=t.getComputedStyle(e),o=t.getComputedStyle(e,\":before\"),s=t.getComputedStyle(e,\":after\");this.referenceElement===e&&So(r)&&(this.clonedReferenceElement=r),Oo(r)&&vs(r);for(var i=this.counters.parse(new Wn(n)),a=this.resolvePseudoContent(e,r,o,On.BEFORE),A=e.firstChild;A;A=A.nextSibling)Uo(A)&&(Ko(A)||A.hasAttribute(as)||\"function\"==typeof this.options.ignoreElements&&this.options.ignoreElements(A))||this.options.copyStyles&&Uo(A)&&Do(A)||r.appendChild(this.cloneNode(A));a&&r.insertBefore(a,r.firstChild);var u=this.resolvePseudoContent(e,r,s,On.AFTER);return u&&r.appendChild(u),this.counters.pop(i),n&&(this.options.copyStyles||Lo(e))&&!Mo(e)&&ds(n,r),0===e.scrollTop&&0===e.scrollLeft||this.scrolledElements.push([r,e.scrollLeft,e.scrollTop]),(zo(e)||Vo(e))&&(zo(r)||Vo(r))&&(r.value=e.value),r}return e.cloneNode(!1)},e.prototype.resolvePseudoContent=function(e,t,r,n){var o=this;if(r){var s=r.content,i=t.ownerDocument;if(i&&s&&\"none\"!==s&&\"-moz-alt-content\"!==s&&\"none\"!==r.display){this.counters.parse(new Wn(r));var a=new Xn(r),A=i.createElement(\"html2canvaspseudoelement\");ds(r,A),a.content.forEach((function(t){if(t.type===d.STRING_TOKEN)A.appendChild(i.createTextNode(t.value));else if(t.type===d.URL_TOKEN){var r=i.createElement(\"img\");r.src=t.value,r.style.opacity=\"1\",A.appendChild(r)}else if(t.type===d.FUNCTION){if(\"attr\"===t.name){var n=t.values.filter(qe);n.length&&A.appendChild(i.createTextNode(e.getAttribute(n[0].value)||\"\"))}else if(\"counter\"===t.name){var s=t.values.filter(Je),u=s[0],c=s[1];if(u&&qe(u)){var l=o.counters.getCounterValue(u.value),f=c&&qe(c)?Zr.parse(c.value):Wr.DECIMAL;A.appendChild(i.createTextNode(is(l,f,!1)))}}else if(\"counters\"===t.name){var h=t.values.filter(Je),p=(u=h[0],h[1]);if(c=h[2],u&&qe(u)){var m=o.counters.getCounterValues(u.value),g=c&&qe(c)?Zr.parse(c.value):Wr.DECIMAL,y=p&&p.type===d.STRING_TOKEN?p.value:\"\",v=m.map((function(e){return is(e,g,!1)})).join(y);A.appendChild(i.createTextNode(v))}}}else if(t.type===d.IDENT_TOKEN)switch(t.value){case\"open-quote\":A.appendChild(i.createTextNode(Vn(a.quotes,o.quoteDepth++,!0)));break;case\"close-quote\":A.appendChild(i.createTextNode(Vn(a.quotes,--o.quoteDepth,!1)));break;default:A.appendChild(i.createTextNode(t.value))}})),A.className=ms+\" \"+gs;var u=n===On.BEFORE?\" \"+ms:\" \"+gs;return Lo(t)?t.className.baseValue+=u:t.className+=u,A}}},e.destroy=function(e){return!!e.parentNode&&(e.parentNode.removeChild(e),!0)},e}();!function(e){e[e.BEFORE=0]=\"BEFORE\",e[e.AFTER=1]=\"AFTER\"}(On||(On={}));var us,cs=function(e,t){var r=e.createElement(\"iframe\");return r.className=\"html2canvas-container\",r.style.visibility=\"hidden\",r.style.position=\"fixed\",r.style.left=\"-10000px\",r.style.top=\"0px\",r.style.border=\"0\",r.width=t.width.toString(),r.height=t.height.toString(),r.scrolling=\"no\",r.setAttribute(as,\"true\"),e.body.appendChild(r),r},ls=function(e){return new Promise((function(t,r){var n=e.contentWindow;if(!n)return r(\"No window assigned for iframe\");var o=n.document;n.onload=e.onload=o.onreadystatechange=function(){n.onload=e.onload=o.onreadystatechange=null;var r=setInterval((function(){o.body.childNodes.length>0&&\"complete\"===o.readyState&&(clearInterval(r),t(e))}),50)}}))},ds=function(e,t){for(var r=e.length-1;r>=0;r--){var n=e.item(r);\"content\"!==n&&t.style.setProperty(n,e.getPropertyValue(n))}return t},fs=function(e){var t=\"\";return e&&(t+=\"\u003C!DOCTYPE \",e.name&&(t+=e.name),e.internalSubset&&(t+=e.internalSubset),e.publicId&&(t+='\"'+e.publicId+'\"'),e.systemId&&(t+='\"'+e.systemId+'\"'),t+=\">\"),t},hs=function(e,t,r){e&&e.defaultView&&(t!==e.defaultView.pageXOffset||r!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(t,r)},ps=function(e){var t=e[0],r=e[1],n=e[2];t.scrollLeft=r,t.scrollTop=n},ms=\"___html2canvas___pseudoelement_before\",gs=\"___html2canvas___pseudoelement_after\",ys='{\\n    content: \"\" !important;\\n    display: none !important;\\n}',vs=function(e){ws(e,\".\"+ms+\":before\"+ys+\"\\n         .\"+gs+\":after\"+ys)},ws=function(e,t){var r=e.ownerDocument;if(r){var n=r.createElement(\"style\");n.textContent=t,e.appendChild(n)}};!function(e){e[e.VECTOR=0]=\"VECTOR\",e[e.BEZIER_CURVE=1]=\"BEZIER_CURVE\"}(us||(us={}));var bs,Bs=function(e,t){return e.length===t.length&&e.some((function(e,r){return e===t[r]}))},js=function(){function e(e,t){this.type=us.VECTOR,this.x=e,this.y=t}return e.prototype.add=function(t,r){return new e(this.x+t,this.y+r)},e}(),_s=function(e,t,r){return new js(e.x+(t.x-e.x)*r,e.y+(t.y-e.y)*r)},Cs=function(){function e(e,t,r,n){this.type=us.BEZIER_CURVE,this.start=e,this.startControl=t,this.endControl=r,this.end=n}return e.prototype.subdivide=function(t,r){var n=_s(this.start,this.startControl,t),o=_s(this.startControl,this.endControl,t),s=_s(this.endControl,this.end,t),i=_s(n,o,t),a=_s(o,s,t),A=_s(i,a,t);return r?new e(this.start,n,i,A):new e(A,a,s,this.end)},e.prototype.add=function(t,r){return new e(this.start.add(t,r),this.startControl.add(t,r),this.endControl.add(t,r),this.end.add(t,r))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e}(),xs=function(e){return e.type===us.BEZIER_CURVE},Es=function(e){var t=e.styles,r=e.bounds,n=st(t.borderTopLeftRadius,r.width,r.height),o=n[0],s=n[1],i=st(t.borderTopRightRadius,r.width,r.height),a=i[0],A=i[1],u=st(t.borderBottomRightRadius,r.width,r.height),c=u[0],l=u[1],d=st(t.borderBottomLeftRadius,r.width,r.height),f=d[0],h=d[1],p=[];p.push((o+a)\u002Fr.width),p.push((f+c)\u002Fr.width),p.push((s+h)\u002Fr.height),p.push((A+l)\u002Fr.height);var m=Math.max.apply(Math,p);m>1&&(o\u002F=m,s\u002F=m,a\u002F=m,A\u002F=m,c\u002F=m,l\u002F=m,f\u002F=m,h\u002F=m);var g=r.width-a,y=r.height-l,v=r.width-c,w=r.height-h,b=t.borderTopWidth,B=t.borderRightWidth,j=t.borderBottomWidth,_=t.borderLeftWidth,C=it(t.paddingTop,e.bounds.width),x=it(t.paddingRight,e.bounds.width),E=it(t.paddingBottom,e.bounds.width),N=it(t.paddingLeft,e.bounds.width);this.topLeftBorderDoubleOuterBox=o>0||s>0?Ns(r.left+_\u002F3,r.top+b\u002F3,o-_\u002F3,s-b\u002F3,bs.TOP_LEFT):new js(r.left+_\u002F3,r.top+b\u002F3),this.topRightBorderDoubleOuterBox=o>0||s>0?Ns(r.left+g,r.top+b\u002F3,a-B\u002F3,A-b\u002F3,bs.TOP_RIGHT):new js(r.left+r.width-B\u002F3,r.top+b\u002F3),this.bottomRightBorderDoubleOuterBox=c>0||l>0?Ns(r.left+v,r.top+y,c-B\u002F3,l-j\u002F3,bs.BOTTOM_RIGHT):new js(r.left+r.width-B\u002F3,r.top+r.height-j\u002F3),this.bottomLeftBorderDoubleOuterBox=f>0||h>0?Ns(r.left+_\u002F3,r.top+w,f-_\u002F3,h-j\u002F3,bs.BOTTOM_LEFT):new js(r.left+_\u002F3,r.top+r.height-j\u002F3),this.topLeftBorderDoubleInnerBox=o>0||s>0?Ns(r.left+2*_\u002F3,r.top+2*b\u002F3,o-2*_\u002F3,s-2*b\u002F3,bs.TOP_LEFT):new js(r.left+2*_\u002F3,r.top+2*b\u002F3),this.topRightBorderDoubleInnerBox=o>0||s>0?Ns(r.left+g,r.top+2*b\u002F3,a-2*B\u002F3,A-2*b\u002F3,bs.TOP_RIGHT):new js(r.left+r.width-2*B\u002F3,r.top+2*b\u002F3),this.bottomRightBorderDoubleInnerBox=c>0||l>0?Ns(r.left+v,r.top+y,c-2*B\u002F3,l-2*j\u002F3,bs.BOTTOM_RIGHT):new js(r.left+r.width-2*B\u002F3,r.top+r.height-2*j\u002F3),this.bottomLeftBorderDoubleInnerBox=f>0||h>0?Ns(r.left+2*_\u002F3,r.top+w,f-2*_\u002F3,h-2*j\u002F3,bs.BOTTOM_LEFT):new js(r.left+2*_\u002F3,r.top+r.height-2*j\u002F3),this.topLeftBorderStroke=o>0||s>0?Ns(r.left+_\u002F2,r.top+b\u002F2,o-_\u002F2,s-b\u002F2,bs.TOP_LEFT):new js(r.left+_\u002F2,r.top+b\u002F2),this.topRightBorderStroke=o>0||s>0?Ns(r.left+g,r.top+b\u002F2,a-B\u002F2,A-b\u002F2,bs.TOP_RIGHT):new js(r.left+r.width-B\u002F2,r.top+b\u002F2),this.bottomRightBorderStroke=c>0||l>0?Ns(r.left+v,r.top+y,c-B\u002F2,l-j\u002F2,bs.BOTTOM_RIGHT):new js(r.left+r.width-B\u002F2,r.top+r.height-j\u002F2),this.bottomLeftBorderStroke=f>0||h>0?Ns(r.left+_\u002F2,r.top+w,f-_\u002F2,h-j\u002F2,bs.BOTTOM_LEFT):new js(r.left+_\u002F2,r.top+r.height-j\u002F2),this.topLeftBorderBox=o>0||s>0?Ns(r.left,r.top,o,s,bs.TOP_LEFT):new js(r.left,r.top),this.topRightBorderBox=a>0||A>0?Ns(r.left+g,r.top,a,A,bs.TOP_RIGHT):new js(r.left+r.width,r.top),this.bottomRightBorderBox=c>0||l>0?Ns(r.left+v,r.top+y,c,l,bs.BOTTOM_RIGHT):new js(r.left+r.width,r.top+r.height),this.bottomLeftBorderBox=f>0||h>0?Ns(r.left,r.top+w,f,h,bs.BOTTOM_LEFT):new js(r.left,r.top+r.height),this.topLeftPaddingBox=o>0||s>0?Ns(r.left+_,r.top+b,Math.max(0,o-_),Math.max(0,s-b),bs.TOP_LEFT):new js(r.left+_,r.top+b),this.topRightPaddingBox=a>0||A>0?Ns(r.left+Math.min(g,r.width-B),r.top+b,g>r.width+B?0:Math.max(0,a-B),Math.max(0,A-b),bs.TOP_RIGHT):new js(r.left+r.width-B,r.top+b),this.bottomRightPaddingBox=c>0||l>0?Ns(r.left+Math.min(v,r.width-_),r.top+Math.min(y,r.height-j),Math.max(0,c-B),Math.max(0,l-j),bs.BOTTOM_RIGHT):new js(r.left+r.width-B,r.top+r.height-j),this.bottomLeftPaddingBox=f>0||h>0?Ns(r.left+_,r.top+Math.min(w,r.height-j),Math.max(0,f-_),Math.max(0,h-j),bs.BOTTOM_LEFT):new js(r.left+_,r.top+r.height-j),this.topLeftContentBox=o>0||s>0?Ns(r.left+_+N,r.top+b+C,Math.max(0,o-(_+N)),Math.max(0,s-(b+C)),bs.TOP_LEFT):new js(r.left+_+N,r.top+b+C),this.topRightContentBox=a>0||A>0?Ns(r.left+Math.min(g,r.width+_+N),r.top+b+C,g>r.width+_+N?0:a-_+N,A-(b+C),bs.TOP_RIGHT):new js(r.left+r.width-(B+x),r.top+b+C),this.bottomRightContentBox=c>0||l>0?Ns(r.left+Math.min(v,r.width-(_+N)),r.top+Math.min(y,r.height+b+C),Math.max(0,c-(B+x)),l-(j+E),bs.BOTTOM_RIGHT):new js(r.left+r.width-(B+x),r.top+r.height-(j+E)),this.bottomLeftContentBox=f>0||h>0?Ns(r.left+_+N,r.top+w,Math.max(0,f-(_+N)),h-(j+E),bs.BOTTOM_LEFT):new js(r.left+_+N,r.top+r.height-(j+E))};!function(e){e[e.TOP_LEFT=0]=\"TOP_LEFT\",e[e.TOP_RIGHT=1]=\"TOP_RIGHT\",e[e.BOTTOM_RIGHT=2]=\"BOTTOM_RIGHT\",e[e.BOTTOM_LEFT=3]=\"BOTTOM_LEFT\"}(bs||(bs={}));var Ns=function(e,t,r,n,o){var s=(Math.sqrt(2)-1)\u002F3*4,i=r*s,a=n*s,A=e+r,u=t+n;switch(o){case bs.TOP_LEFT:return new Cs(new js(e,u),new js(e,u-a),new js(A-i,t),new js(A,t));case bs.TOP_RIGHT:return new Cs(new js(e,t),new js(e+i,t),new js(A,u-a),new js(A,u));case bs.BOTTOM_RIGHT:return new Cs(new js(A,t),new js(A,t+a),new js(e+i,u),new js(e,u));case bs.BOTTOM_LEFT:default:return new Cs(new js(A,u),new js(A-i,u),new js(e,t+a),new js(e,t))}},Qs=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},Fs=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},Us=function(e,t,r){this.type=0,this.target=6,this.offsetX=e,this.offsetY=t,this.matrix=r},Ss=function(e,t){this.type=1,this.target=t,this.path=e},Ls=function(e){this.type=2,this.target=6,this.opacity=e},Ts=function(e){this.element=e,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]},Hs=function(){function e(e,t){if(this.container=e,this.effects=t.slice(0),this.curves=new Es(e),e.styles.opacity\u003C1&&this.effects.push(new Ls(e.styles.opacity)),null!==e.styles.transform){var r=e.bounds.left+e.styles.transformOrigin[0].number,n=e.bounds.top+e.styles.transformOrigin[1].number,o=e.styles.transform;this.effects.push(new Us(r,n,o))}if(e.styles.overflowX!==Yr.VISIBLE){var s=Qs(this.curves),i=Fs(this.curves);Bs(s,i)?this.effects.push(new Ss(s,6)):(this.effects.push(new Ss(s,2)),this.effects.push(new Ss(i,4)))}}return e.prototype.getParentEffects=function(){var e=this.effects.slice(0);if(this.container.styles.overflowX!==Yr.VISIBLE){var t=Qs(this.curves),r=Fs(this.curves);Bs(t,r)||e.push(new Ss(r,6))}return e},e}(),Is=function(e,t,r,n){e.container.elements.forEach((function(o){var s=Rn(o.flags,4),i=Rn(o.flags,2),a=new Hs(o,e.getParentEffects());Rn(o.styles.display,2048)&&n.push(a);var A=Rn(o.flags,8)?[]:n;if(s||i){var u=s||o.styles.isPositioned()?r:t,c=new Ts(a);if(o.styles.isPositioned()||o.styles.opacity\u003C1||o.styles.isTransformed()){var l=o.styles.zIndex.order;if(l\u003C0){var d=0;u.negativeZIndex.some((function(e,t){return l>e.element.container.styles.zIndex.order?(d=t,!1):d>0})),u.negativeZIndex.splice(d,0,c)}else if(l>0){var f=0;u.positiveZIndex.some((function(e,t){return l>=e.element.container.styles.zIndex.order?(f=t+1,!1):f>0})),u.positiveZIndex.splice(f,0,c)}else u.zeroOrAutoZIndexOrTransformedOrOpacity.push(c)}else o.styles.isFloating()?u.nonPositionedFloats.push(c):u.nonPositionedInlineLevel.push(c);Is(a,c,s?c:r,A)}else o.styles.isInlineLevel()?t.inlineLevel.push(a):t.nonInlineLevel.push(a),Is(a,t,r,A);Rn(o.flags,8)&&Ps(o,A)}))},Ps=function(e,t){for(var r=e instanceof lo?e.start:1,n=e instanceof lo&&e.reversed,o=0;o\u003Ct.length;o++){var s=t[o];s.container instanceof co&&\"number\"==typeof s.container.value&&0!==s.container.value&&(r=s.container.value),s.listValue=is(r,s.container.styles.listStyleType,!0),r+=n?-1:1}},Os=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderBox,e.topLeftPaddingBox,e.topRightBorderBox,e.topRightPaddingBox);case 1:return Rs(e.topRightBorderBox,e.topRightPaddingBox,e.bottomRightBorderBox,e.bottomRightPaddingBox);case 2:return Rs(e.bottomRightBorderBox,e.bottomRightPaddingBox,e.bottomLeftBorderBox,e.bottomLeftPaddingBox);case 3:default:return Rs(e.bottomLeftBorderBox,e.bottomLeftPaddingBox,e.topLeftBorderBox,e.topLeftPaddingBox)}},ks=function(e,t){var r=[];return xs(e)?r.push(e.subdivide(.5,!1)):r.push(e),xs(t)?r.push(t.subdivide(.5,!0)):r.push(t),r},Rs=function(e,t,r,n){var o=[];return xs(e)?o.push(e.subdivide(.5,!1)):o.push(e),xs(r)?o.push(r.subdivide(.5,!0)):o.push(r),xs(n)?o.push(n.subdivide(.5,!0).reverse()):o.push(n),xs(t)?o.push(t.subdivide(.5,!1).reverse()):o.push(t),o},Ms=function(e){var t=e.bounds,r=e.styles;return t.add(r.borderLeftWidth,r.borderTopWidth,-(r.borderRightWidth+r.borderLeftWidth),-(r.borderTopWidth+r.borderBottomWidth))},Ds=function(e){var t=e.styles,r=e.bounds,n=it(t.paddingLeft,r.width),o=it(t.paddingRight,r.width),s=it(t.paddingTop,r.width),i=it(t.paddingBottom,r.width);return r.add(n+t.borderLeftWidth,s+t.borderTopWidth,-(t.borderRightWidth+t.borderLeftWidth+n+o),-(t.borderTopWidth+t.borderBottomWidth+s+i))},Ks=function(e,t,r){var n=function(e,t){return 0===e?t.bounds:2===e?Ds(t):Ms(t)}(Gs(e.styles.backgroundOrigin,t),e),o=function(e,t){return e===bt.BORDER_BOX?t.bounds:e===bt.CONTENT_BOX?Ds(t):Ms(t)}(Gs(e.styles.backgroundClip,t),e),s=qs(Gs(e.styles.backgroundSize,t),r,n),i=s[0],a=s[1],A=st(Gs(e.styles.backgroundPosition,t),n.width-i,n.height-a);return[Xs(Gs(e.styles.backgroundRepeat,t),A,s,n,o),Math.round(n.left+A[0]),Math.round(n.top+A[1]),i,a]},zs=function(e){return qe(e)&&e.value===dr.AUTO},Vs=function(e){return\"number\"==typeof e},qs=function(e,t,r){var n=t[0],o=t[1],s=t[2],i=e[0],a=e[1];if(et(i)&&a&&et(a))return[it(i,r.width),it(a,r.height)];var A=Vs(s);if(qe(i)&&(i.value===dr.CONTAIN||i.value===dr.COVER))return Vs(s)?r.width\u002Fr.height\u003Cs!=(i.value===dr.COVER)?[r.width,r.width\u002Fs]:[r.height*s,r.height]:[r.width,r.height];var u=Vs(n),c=Vs(o),l=u||c;if(zs(i)&&(!a||zs(a)))return u&&c?[n,o]:A||l?l&&A?[u?n:o*s,c?o:n\u002Fs]:[u?n:r.width,c?o:r.height]:[r.width,r.height];if(A){var d=0,f=0;return et(i)?d=it(i,r.width):et(a)&&(f=it(a,r.height)),zs(i)?d=f*s:a&&!zs(a)||(f=d\u002Fs),[d,f]}var h=null,p=null;if(et(i)?h=it(i,r.width):a&&et(a)&&(p=it(a,r.height)),null===h||a&&!zs(a)||(p=u&&c?h\u002Fn*o:r.height),null!==p&&zs(i)&&(h=u&&c?p\u002Fo*n:r.width),null!==h&&null!==p)return[h,p];throw new Error(\"Unable to calculate background-size for element\")},Gs=function(e,t){var r=e[t];return void 0===r?e[0]:r},Xs=function(e,t,r,n,o){var s=t[0],i=t[1],a=r[0],A=r[1];switch(e){case ar.REPEAT_X:return[new js(Math.round(n.left),Math.round(n.top+i)),new js(Math.round(n.left+n.width),Math.round(n.top+i)),new js(Math.round(n.left+n.width),Math.round(A+n.top+i)),new js(Math.round(n.left),Math.round(A+n.top+i))];case ar.REPEAT_Y:return[new js(Math.round(n.left+s),Math.round(n.top)),new js(Math.round(n.left+s+a),Math.round(n.top)),new js(Math.round(n.left+s+a),Math.round(n.height+n.top)),new js(Math.round(n.left+s),Math.round(n.height+n.top))];case ar.NO_REPEAT:return[new js(Math.round(n.left+s),Math.round(n.top+i)),new js(Math.round(n.left+s+a),Math.round(n.top+i)),new js(Math.round(n.left+s+a),Math.round(n.top+i+A)),new js(Math.round(n.left+s),Math.round(n.top+i+A))];default:return[new js(Math.round(o.left),Math.round(o.top)),new js(Math.round(o.left+o.width),Math.round(o.top)),new js(Math.round(o.left+o.width),Math.round(o.height+o.top)),new js(Math.round(o.left),Math.round(o.height+o.top))]}},Ws=\"Hidden Text\",Js=function(){function e(e){this._data={},this._document=e}return e.prototype.parseMetrics=function(e,t){var r=this._document.createElement(\"div\"),n=this._document.createElement(\"img\"),o=this._document.createElement(\"span\"),s=this._document.body;r.style.visibility=\"hidden\",r.style.fontFamily=e,r.style.fontSize=t,r.style.margin=\"0\",r.style.padding=\"0\",s.appendChild(r),n.src=\"data:image\u002Fgif;base64,R0lGODlhAQABAIAAAAAAAP\u002F\u002F\u002FyH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",n.width=1,n.height=1,n.style.margin=\"0\",n.style.padding=\"0\",n.style.verticalAlign=\"baseline\",o.style.fontFamily=e,o.style.fontSize=t,o.style.margin=\"0\",o.style.padding=\"0\",o.appendChild(this._document.createTextNode(Ws)),r.appendChild(o),r.appendChild(n);var i=n.offsetTop-o.offsetTop+2;r.removeChild(o),r.appendChild(this._document.createTextNode(Ws)),r.style.lineHeight=\"normal\",n.style.verticalAlign=\"super\";var a=n.offsetTop-r.offsetTop+2;return s.removeChild(r),{baseline:i,middle:a}},e.prototype.getMetrics=function(e,t){var r=e+\" \"+t;return void 0===this._data[r]&&(this._data[r]=this.parseMetrics(e,t)),this._data[r]},e}(),Ys=function(){function e(e){this._activeEffects=[],this.canvas=e.canvas?e.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.options=e,e.canvas||(this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=e.width+\"px\",this.canvas.style.height=e.height+\"px\"),this.fontMetrics=new Js(document),this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x+e.scrollX,-e.y+e.scrollY),this.ctx.textBaseline=\"bottom\",this._activeEffects=[],Ot.getInstance(e.id).debug(\"Canvas renderer initialized (\"+e.width+\"x\"+e.height+\" at \"+e.x+\",\"+e.y+\") with scale \"+e.scale)}return e.prototype.applyEffects=function(e,t){for(var r=this;this._activeEffects.length;)this.popEffect();e.filter((function(e){return Rn(e.target,t)})).forEach((function(e){return r.applyEffect(e)}))},e.prototype.applyEffect=function(e){this.ctx.save(),function(e){return 2===e.type}(e)&&(this.ctx.globalAlpha=e.opacity),function(e){return 0===e.type}(e)&&(this.ctx.translate(e.offsetX,e.offsetY),this.ctx.transform(e.matrix[0],e.matrix[1],e.matrix[2],e.matrix[3],e.matrix[4],e.matrix[5]),this.ctx.translate(-e.offsetX,-e.offsetY)),function(e){return 1===e.type}(e)&&(this.path(e.path),this.ctx.clip()),this._activeEffects.push(e)},e.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},e.prototype.renderStack=function(e){return n(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return e.element.container.styles.isVisible()?[4,this.renderStackContent(e)]:[3,2];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))},e.prototype.renderNode=function(e){return n(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return e.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(e)]:[3,3];case 1:return t.sent(),[4,this.renderNodeContent(e)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},e.prototype.renderTextWithLetterSpacing=function(e,t){var r=this;0===t?this.ctx.fillText(e.text,e.bounds.left,e.bounds.top+e.bounds.height):a(e.text).map((function(e){return A(e)})).reduce((function(t,n){return r.ctx.fillText(n,t,e.bounds.top+e.bounds.height),t+r.ctx.measureText(n).width}),e.bounds.left)},e.prototype.createFontStyle=function(e){var t=e.fontVariant.filter((function(e){return\"normal\"===e||\"small-caps\"===e})).join(\"\"),r=e.fontFamily.join(\", \"),n=ze(e.fontSize)?\"\"+e.fontSize.number+e.fontSize.unit:e.fontSize.number+\"px\";return[[e.fontStyle,t,e.fontWeight,n,r].join(\" \"),r,n]},e.prototype.renderTextNode=function(e,t){return n(this,void 0,void 0,(function(){var r,n,s,i,a=this;return o(this,(function(o){return r=this.createFontStyle(t),n=r[0],s=r[1],i=r[2],this.ctx.font=n,e.textBounds.forEach((function(e){a.ctx.fillStyle=pt(t.color),a.renderTextWithLetterSpacing(e,t.letterSpacing);var r=t.textShadow;r.length&&e.text.trim().length&&(r.slice(0).reverse().forEach((function(t){a.ctx.shadowColor=pt(t.color),a.ctx.shadowOffsetX=t.offsetX.number*a.options.scale,a.ctx.shadowOffsetY=t.offsetY.number*a.options.scale,a.ctx.shadowBlur=t.blur.number,a.ctx.fillText(e.text,e.bounds.left,e.bounds.top+e.bounds.height)})),a.ctx.shadowColor=\"\",a.ctx.shadowOffsetX=0,a.ctx.shadowOffsetY=0,a.ctx.shadowBlur=0),t.textDecorationLine.length&&(a.ctx.fillStyle=pt(t.textDecorationColor||t.color),t.textDecorationLine.forEach((function(t){switch(t){case 1:var r=a.fontMetrics.getMetrics(s,i).baseline;a.ctx.fillRect(e.bounds.left,Math.round(e.bounds.top+r),e.bounds.width,1);break;case 2:a.ctx.fillRect(e.bounds.left,Math.round(e.bounds.top),e.bounds.width,1);break;case 3:var n=a.fontMetrics.getMetrics(s,i).middle;a.ctx.fillRect(e.bounds.left,Math.ceil(e.bounds.top+n),e.bounds.width,1)}})))})),[2]}))}))},e.prototype.renderReplacedElement=function(e,t,r){if(r&&e.intrinsicWidth>0&&e.intrinsicHeight>0){var n=Ds(e),o=Fs(t);this.path(o),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(r,0,0,e.intrinsicWidth,e.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},e.prototype.renderNodeContent=function(t){return n(this,void 0,void 0,(function(){var r,n,i,a,A,u,c,l,f,h,p,m,g,y;return o(this,(function(o){switch(o.label){case 0:this.applyEffects(t.effects,4),r=t.container,n=t.curves,i=r.styles,a=0,A=r.textNodes,o.label=1;case 1:return a\u003CA.length?(u=A[a],[4,this.renderTextNode(u,i)]):[3,4];case 2:o.sent(),o.label=3;case 3:return a++,[3,1];case 4:if(!(r instanceof ao))return[3,8];o.label=5;case 5:return o.trys.push([5,7,,8]),[4,this.options.cache.match(r.src)];case 6:return m=o.sent(),this.renderReplacedElement(r,n,m),[3,8];case 7:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading image \"+r.src),[3,8];case 8:if(r instanceof Ao&&this.renderReplacedElement(r,n,r.canvas),!(r instanceof uo))return[3,12];o.label=9;case 9:return o.trys.push([9,11,,12]),[4,this.options.cache.match(r.svg)];case 10:return m=o.sent(),this.renderReplacedElement(r,n,m),[3,12];case 11:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading svg \"+r.svg.substring(0,255)),[3,12];case 12:return r instanceof jo&&r.tree?[4,new e({id:this.options.id,scale:this.options.scale,backgroundColor:r.backgroundColor,x:0,y:0,scrollX:0,scrollY:0,width:r.width,height:r.height,cache:this.options.cache,windowWidth:r.width,windowHeight:r.height}).render(r.tree)]:[3,14];case 13:c=o.sent(),r.width&&r.height&&this.ctx.drawImage(c,0,0,r.width,r.height,r.bounds.left,r.bounds.top,r.bounds.width,r.bounds.height),o.label=14;case 14:if(r instanceof vo&&(l=Math.min(r.bounds.width,r.bounds.height),r.type===po?r.checked&&(this.ctx.save(),this.path([new js(r.bounds.left+.39363*l,r.bounds.top+.79*l),new js(r.bounds.left+.16*l,r.bounds.top+.5549*l),new js(r.bounds.left+.27347*l,r.bounds.top+.44071*l),new js(r.bounds.left+.39694*l,r.bounds.top+.5649*l),new js(r.bounds.left+.72983*l,r.bounds.top+.23*l),new js(r.bounds.left+.84*l,r.bounds.top+.34085*l),new js(r.bounds.left+.39363*l,r.bounds.top+.79*l)]),this.ctx.fillStyle=pt(yo),this.ctx.fill(),this.ctx.restore()):r.type===mo&&r.checked&&(this.ctx.save(),this.ctx.beginPath(),this.ctx.arc(r.bounds.left+l\u002F2,r.bounds.top+l\u002F2,l\u002F4,0,2*Math.PI,!0),this.ctx.fillStyle=pt(yo),this.ctx.fill(),this.ctx.restore())),Zs(r)&&r.value.length){switch(this.ctx.font=this.createFontStyle(i)[0],this.ctx.fillStyle=pt(i.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=ei(r.styles.textAlign),y=Ds(r),f=0,r.styles.textAlign){case an.CENTER:f+=y.width\u002F2;break;case an.RIGHT:f+=y.width}h=y.add(f,0,0,-y.height\u002F2+1),this.ctx.save(),this.path([new js(y.left,y.top),new js(y.left+y.width,y.top),new js(y.left+y.width,y.top+y.height),new js(y.left,y.top+y.height)]),this.ctx.clip(),this.renderTextWithLetterSpacing(new Zn(r.value,h),i.letterSpacing),this.ctx.restore(),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"}if(!Rn(r.styles.display,2048))return[3,20];if(null===r.styles.listStyleImage)return[3,19];if((p=r.styles.listStyleImage).type!==Ct.URL)return[3,18];m=void 0,g=p.url,o.label=15;case 15:return o.trys.push([15,17,,18]),[4,this.options.cache.match(g)];case 16:return m=o.sent(),this.ctx.drawImage(m,r.bounds.left-(m.width+10),r.bounds.top),[3,18];case 17:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading list-style-image \"+g),[3,18];case 18:return[3,20];case 19:t.listValue&&r.styles.listStyleType!==Wr.NONE&&(this.ctx.font=this.createFontStyle(i)[0],this.ctx.fillStyle=pt(i.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=\"right\",y=new s(r.bounds.left,r.bounds.top+it(r.styles.paddingTop,r.bounds.width),r.bounds.width,function(e,t){return qe(e)&&\"normal\"===e.value?1.2*t:e.type===d.NUMBER_TOKEN?t*e.number:et(e)?it(e,t):t}(i.lineHeight,i.fontSize.number)\u002F2+1),this.renderTextWithLetterSpacing(new Zn(t.listValue,y),i.letterSpacing),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"),o.label=20;case 20:return[2]}}))}))},e.prototype.renderStackContent=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a,A,u,c,l,d,f,h,p,m;return o(this,(function(o){switch(o.label){case 0:return[4,this.renderNodeBackgroundAndBorders(e.element)];case 1:o.sent(),t=0,r=e.negativeZIndex,o.label=2;case 2:return t\u003Cr.length?(m=r[t],[4,this.renderStack(m)]):[3,5];case 3:o.sent(),o.label=4;case 4:return t++,[3,2];case 5:return[4,this.renderNodeContent(e.element)];case 6:o.sent(),n=0,s=e.nonInlineLevel,o.label=7;case 7:return n\u003Cs.length?(m=s[n],[4,this.renderNode(m)]):[3,10];case 8:o.sent(),o.label=9;case 9:return n++,[3,7];case 10:i=0,a=e.nonPositionedFloats,o.label=11;case 11:return i\u003Ca.length?(m=a[i],[4,this.renderStack(m)]):[3,14];case 12:o.sent(),o.label=13;case 13:return i++,[3,11];case 14:A=0,u=e.nonPositionedInlineLevel,o.label=15;case 15:return A\u003Cu.length?(m=u[A],[4,this.renderStack(m)]):[3,18];case 16:o.sent(),o.label=17;case 17:return A++,[3,15];case 18:c=0,l=e.inlineLevel,o.label=19;case 19:return c\u003Cl.length?(m=l[c],[4,this.renderNode(m)]):[3,22];case 20:o.sent(),o.label=21;case 21:return c++,[3,19];case 22:d=0,f=e.zeroOrAutoZIndexOrTransformedOrOpacity,o.label=23;case 23:return d\u003Cf.length?(m=f[d],[4,this.renderStack(m)]):[3,26];case 24:o.sent(),o.label=25;case 25:return d++,[3,23];case 26:h=0,p=e.positiveZIndex,o.label=27;case 27:return h\u003Cp.length?(m=p[h],[4,this.renderStack(m)]):[3,30];case 28:o.sent(),o.label=29;case 29:return h++,[3,27];case 30:return[2]}}))}))},e.prototype.mask=function(e){this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.lineTo(this.canvas.width,0),this.ctx.lineTo(this.canvas.width,this.canvas.height),this.ctx.lineTo(0,this.canvas.height),this.ctx.lineTo(0,0),this.formatPath(e.slice(0).reverse()),this.ctx.closePath()},e.prototype.path=function(e){this.ctx.beginPath(),this.formatPath(e),this.ctx.closePath()},e.prototype.formatPath=function(e){var t=this;e.forEach((function(e,r){var n=xs(e)?e.start:e;0===r?t.ctx.moveTo(n.x,n.y):t.ctx.lineTo(n.x,n.y),xs(e)&&t.ctx.bezierCurveTo(e.startControl.x,e.startControl.y,e.endControl.x,e.endControl.y,e.end.x,e.end.y)}))},e.prototype.renderRepeat=function(e,t,r,n){this.path(e),this.ctx.fillStyle=t,this.ctx.translate(r,n),this.ctx.fill(),this.ctx.translate(-r,-n)},e.prototype.resizeImage=function(e,t,r){if(e.width===t&&e.height===r)return e;var n=this.canvas.ownerDocument.createElement(\"canvas\");return n.width=t,n.height=r,n.getContext(\"2d\").drawImage(e,0,0,e.width,e.height,0,0,t,r),n},e.prototype.renderBackgroundImage=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a;return o(this,(function(A){switch(A.label){case 0:t=e.styles.backgroundImage.length-1,r=function(r){var s,i,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F,U,S,L,T,H;return o(this,(function(o){switch(o.label){case 0:if(r.type!==Ct.URL)return[3,5];s=void 0,i=r.url,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.options.cache.match(i)];case 2:return s=o.sent(),[3,4];case 3:return o.sent(),Ot.getInstance(n.options.id).error(\"Error loading background-image \"+i),[3,4];case 4:return s&&(a=Ks(e,t,[s.width,s.height,s.width\u002Fs.height]),w=a[0],x=a[1],E=a[2],j=a[3],_=a[4],y=n.ctx.createPattern(n.resizeImage(s,j,_),\"repeat\"),n.renderRepeat(w,y,x,E)),[3,6];case 5:r.type===Ct.LINEAR_GRADIENT?(A=Ks(e,t,[null,null,null]),w=A[0],x=A[1],E=A[2],j=A[3],_=A[4],u=Ft(r.angle,j,_),c=u[0],l=u[1],d=u[2],f=u[3],h=u[4],(p=document.createElement(\"canvas\")).width=j,p.height=_,m=p.getContext(\"2d\"),g=m.createLinearGradient(l,f,d,h),Qt(r.stops,c).forEach((function(e){return g.addColorStop(e.stop,pt(e.color))})),m.fillStyle=g,m.fillRect(0,0,j,_),j>0&&_>0&&(y=n.ctx.createPattern(p,\"repeat\"),n.renderRepeat(w,y,x,E))):function(e){return e.type===Ct.RADIAL_GRADIENT}(r)&&(v=Ks(e,t,[null,null,null]),w=v[0],b=v[1],B=v[2],j=v[3],_=v[4],C=0===r.position.length?[nt]:r.position,x=it(C[0],j),E=it(C[C.length-1],_),N=function(e,t,r,n,o){var s=0,i=0;switch(e.size){case sr.CLOSEST_SIDE:e.shape===or.CIRCLE?s=i=Math.min(Math.abs(t),Math.abs(t-n),Math.abs(r),Math.abs(r-o)):e.shape===or.ELLIPSE&&(s=Math.min(Math.abs(t),Math.abs(t-n)),i=Math.min(Math.abs(r),Math.abs(r-o)));break;case sr.CLOSEST_CORNER:if(e.shape===or.CIRCLE)s=i=Math.min(Ut(t,r),Ut(t,r-o),Ut(t-n,r),Ut(t-n,r-o));else if(e.shape===or.ELLIPSE){var a=Math.min(Math.abs(r),Math.abs(r-o))\u002FMath.min(Math.abs(t),Math.abs(t-n)),A=St(n,o,t,r,!0),u=A[0],c=A[1];i=a*(s=Ut(u-t,(c-r)\u002Fa))}break;case sr.FARTHEST_SIDE:e.shape===or.CIRCLE?s=i=Math.max(Math.abs(t),Math.abs(t-n),Math.abs(r),Math.abs(r-o)):e.shape===or.ELLIPSE&&(s=Math.max(Math.abs(t),Math.abs(t-n)),i=Math.max(Math.abs(r),Math.abs(r-o)));break;case sr.FARTHEST_CORNER:if(e.shape===or.CIRCLE)s=i=Math.max(Ut(t,r),Ut(t,r-o),Ut(t-n,r),Ut(t-n,r-o));else if(e.shape===or.ELLIPSE){a=Math.max(Math.abs(r),Math.abs(r-o))\u002FMath.max(Math.abs(t),Math.abs(t-n));var l=St(n,o,t,r,!1);u=l[0],c=l[1],i=a*(s=Ut(u-t,(c-r)\u002Fa))}}return Array.isArray(e.size)&&(s=it(e.size[0],n),i=2===e.size.length?it(e.size[1],o):s),[s,i]}(r,x,E,j,_),Q=N[0],F=N[1],Q>0&&Q>0&&(U=n.ctx.createRadialGradient(b+x,B+E,0,b+x,B+E,Q),Qt(r.stops,2*Q).forEach((function(e){return U.addColorStop(e.stop,pt(e.color))})),n.path(w),n.ctx.fillStyle=U,Q!==F?(S=e.bounds.left+.5*e.bounds.width,L=e.bounds.top+.5*e.bounds.height,H=1\u002F(T=F\u002FQ),n.ctx.save(),n.ctx.translate(S,L),n.ctx.transform(1,0,0,T,0,0),n.ctx.translate(-S,-L),n.ctx.fillRect(b,H*(B-L)+L,j,_*H),n.ctx.restore()):n.ctx.fill())),o.label=6;case 6:return t--,[2]}}))},n=this,s=0,i=e.styles.backgroundImage.slice(0).reverse(),A.label=1;case 1:return s\u003Ci.length?(a=i[s],[5,r(a)]):[3,4];case 2:A.sent(),A.label=3;case 3:return s++,[3,1];case 4:return[2]}}))}))},e.prototype.renderSolidBorder=function(e,t,r){return n(this,void 0,void 0,(function(){return o(this,(function(n){return this.path(Os(r,t)),this.ctx.fillStyle=pt(e),this.ctx.fill(),[2]}))}))},e.prototype.renderDoubleBorder=function(e,t,r,s){return n(this,void 0,void 0,(function(){var n,i;return o(this,(function(o){switch(o.label){case 0:return t\u003C3?[4,this.renderSolidBorder(e,r,s)]:[3,2];case 1:return o.sent(),[2];case 2:return n=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox,e.topRightBorderBox,e.topRightBorderDoubleOuterBox);case 1:return Rs(e.topRightBorderBox,e.topRightBorderDoubleOuterBox,e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox);case 2:return Rs(e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox,e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox);case 3:default:return Rs(e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox,e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox)}}(s,r),this.path(n),this.ctx.fillStyle=pt(e),this.ctx.fill(),i=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox,e.topRightBorderDoubleInnerBox,e.topRightPaddingBox);case 1:return Rs(e.topRightBorderDoubleInnerBox,e.topRightPaddingBox,e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox);case 2:return Rs(e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox,e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox);case 3:default:return Rs(e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox,e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox)}}(s,r),this.path(i),this.ctx.fill(),[2]}}))}))},e.prototype.renderNodeBackgroundAndBorders=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a,A,u,c=this;return o(this,(function(o){switch(o.label){case 0:return this.applyEffects(e.effects,2),t=e.container.styles,r=!ht(t.backgroundColor)||t.backgroundImage.length,n=[{style:t.borderTopStyle,color:t.borderTopColor,width:t.borderTopWidth},{style:t.borderRightStyle,color:t.borderRightColor,width:t.borderRightWidth},{style:t.borderBottomStyle,color:t.borderBottomColor,width:t.borderBottomWidth},{style:t.borderLeftStyle,color:t.borderLeftColor,width:t.borderLeftWidth}],s=$s(Gs(t.backgroundClip,0),e.curves),r||t.boxShadow.length?(this.ctx.save(),this.path(s),this.ctx.clip(),ht(t.backgroundColor)||(this.ctx.fillStyle=pt(t.backgroundColor),this.ctx.fill()),[4,this.renderBackgroundImage(e.container)]):[3,2];case 1:o.sent(),this.ctx.restore(),t.boxShadow.slice(0).reverse().forEach((function(t){c.ctx.save();var r,n,o,s,i,a=Qs(e.curves),A=t.inset?0:1e4,u=(r=a,n=-A+(t.inset?1:-1)*t.spread.number,o=(t.inset?1:-1)*t.spread.number,s=t.spread.number*(t.inset?-2:2),i=t.spread.number*(t.inset?-2:2),r.map((function(e,t){switch(t){case 0:return e.add(n,o);case 1:return e.add(n+s,o);case 2:return e.add(n+s,o+i);case 3:return e.add(n,o+i)}return e})));t.inset?(c.path(a),c.ctx.clip(),c.mask(u)):(c.mask(a),c.ctx.clip(),c.path(u)),c.ctx.shadowOffsetX=t.offsetX.number+A,c.ctx.shadowOffsetY=t.offsetY.number,c.ctx.shadowColor=pt(t.color),c.ctx.shadowBlur=t.blur.number,c.ctx.fillStyle=t.inset?pt(t.color):\"rgba(0,0,0,1)\",c.ctx.fill(),c.ctx.restore()})),o.label=2;case 2:i=0,a=0,A=n,o.label=3;case 3:return a\u003CA.length?(u=A[a]).style!==pr.NONE&&!ht(u.color)&&u.width>0?u.style!==pr.DASHED?[3,5]:[4,this.renderDashedDottedBorder(u.color,u.width,i,e.curves,pr.DASHED)]:[3,11]:[3,13];case 4:return o.sent(),[3,11];case 5:return u.style!==pr.DOTTED?[3,7]:[4,this.renderDashedDottedBorder(u.color,u.width,i,e.curves,pr.DOTTED)];case 6:return o.sent(),[3,11];case 7:return u.style!==pr.DOUBLE?[3,9]:[4,this.renderDoubleBorder(u.color,u.width,i,e.curves)];case 8:return o.sent(),[3,11];case 9:return[4,this.renderSolidBorder(u.color,i,e.curves)];case 10:o.sent(),o.label=11;case 11:i++,o.label=12;case 12:return a++,[3,3];case 13:return[2]}}))}))},e.prototype.renderDashedDottedBorder=function(e,t,r,s,i){return n(this,void 0,void 0,(function(){var n,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b;return o(this,(function(o){return this.ctx.save(),n=function(e,t){switch(t){case 0:return ks(e.topLeftBorderStroke,e.topRightBorderStroke);case 1:return ks(e.topRightBorderStroke,e.bottomRightBorderStroke);case 2:return ks(e.bottomRightBorderStroke,e.bottomLeftBorderStroke);case 3:default:return ks(e.bottomLeftBorderStroke,e.topLeftBorderStroke)}}(s,r),a=Os(s,r),i===pr.DASHED&&(this.path(a),this.ctx.clip()),xs(a[0])?(A=a[0].start.x,u=a[0].start.y):(A=a[0].x,u=a[0].y),xs(a[1])?(c=a[1].end.x,l=a[1].end.y):(c=a[1].x,l=a[1].y),d=0===r||2===r?Math.abs(A-c):Math.abs(u-l),this.ctx.beginPath(),i===pr.DOTTED?this.formatPath(n):this.formatPath(a.slice(0,2)),f=t\u003C3?3*t:2*t,h=t\u003C3?2*t:t,i===pr.DOTTED&&(f=t,h=t),p=!0,d\u003C=2*f?p=!1:d\u003C=2*f+h?(f*=m=d\u002F(2*f+h),h*=m):(g=Math.floor((d+h)\u002F(f+h)),y=(d-g*f)\u002F(g-1),h=(v=(d-(g+1)*f)\u002Fg)\u003C=0||Math.abs(h-y)\u003CMath.abs(h-v)?y:v),p&&(i===pr.DOTTED?this.ctx.setLineDash([0,f+h]):this.ctx.setLineDash([f,h])),i===pr.DOTTED?(this.ctx.lineCap=\"round\",this.ctx.lineWidth=t):this.ctx.lineWidth=2*t+1.1,this.ctx.strokeStyle=pt(e),this.ctx.stroke(),this.ctx.setLineDash([]),i===pr.DASHED&&(xs(a[0])&&(w=a[3],b=a[0],this.ctx.beginPath(),this.formatPath([new js(w.end.x,w.end.y),new js(b.start.x,b.start.y)]),this.ctx.stroke()),xs(a[1])&&(w=a[1],b=a[2],this.ctx.beginPath(),this.formatPath([new js(w.end.x,w.end.y),new js(b.start.x,b.start.y)]),this.ctx.stroke())),this.ctx.restore(),[2]}))}))},e.prototype.render=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(r){switch(r.label){case 0:return this.options.backgroundColor&&(this.ctx.fillStyle=pt(this.options.backgroundColor),this.ctx.fillRect(this.options.x-this.options.scrollX,this.options.y-this.options.scrollY,this.options.width,this.options.height)),n=new Hs(e,[]),o=new Ts(n),Is(n,o,o,s=[]),Ps(n.container,s),t=o,[4,this.renderStack(t)];case 1:return r.sent(),this.applyEffects([],2),[2,this.canvas]}var n,o,s}))}))},e}(),Zs=function(e){return e instanceof bo||e instanceof wo||e instanceof vo&&e.type!==mo&&e.type!==po},$s=function(e,t){switch(e){case bt.BORDER_BOX:return Qs(t);case bt.CONTENT_BOX:return function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]}(t);case bt.PADDING_BOX:default:return Fs(t)}},ei=function(e){switch(e){case an.CENTER:return\"center\";case an.RIGHT:return\"right\";case an.LEFT:default:return\"left\"}},ti=function(){function e(e){this.canvas=e.canvas?e.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.options=e,this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=e.width+\"px\",this.canvas.style.height=e.height+\"px\",this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x+e.scrollX,-e.y+e.scrollY),Ot.getInstance(e.id).debug(\"EXPERIMENTAL ForeignObject renderer initialized (\"+e.width+\"x\"+e.height+\" at \"+e.x+\",\"+e.y+\") with scale \"+e.scale)}return e.prototype.render=function(e){return n(this,void 0,void 0,(function(){var t,r;return o(this,(function(n){switch(n.label){case 0:return t=Ht(Math.max(this.options.windowWidth,this.options.width)*this.options.scale,Math.max(this.options.windowHeight,this.options.height)*this.options.scale,this.options.scrollX*this.options.scale,this.options.scrollY*this.options.scale,e),[4,ri(t)];case 1:return r=n.sent(),this.options.backgroundColor&&(this.ctx.fillStyle=pt(this.options.backgroundColor),this.ctx.fillRect(0,0,this.options.width*this.options.scale,this.options.height*this.options.scale)),this.ctx.drawImage(r,-this.options.x*this.options.scale,-this.options.y*this.options.scale),[2,this.canvas]}}))}))},e}(),ri=function(e){return new Promise((function(t,r){var n=new Image;n.onload=function(){t(n)},n.onerror=r,n.src=\"data:image\u002Fsvg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(e))}))},ni=function(e){return ft(Ke.create(e).parseComponentValue())};\"undefined\"!=typeof window&&kt.setContext(window);var oi=function(e,t){return n(undefined,void 0,void 0,(function(){var n,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N;return o(this,(function(o){switch(o.label){case 0:if(!(n=e.ownerDocument))throw new Error(\"Element is not attached to a Document\");if(!(a=n.defaultView))throw new Error(\"Document is not attached to a Window\");return A=(Math.round(1e3*Math.random())+Date.now()).toString(16),u=Oo(e)||\"HTML\"===e.tagName?function(e){var t=e.body,r=e.documentElement;if(!t||!r)throw new Error(\"Unable to get document size\");var n=Math.max(Math.max(t.scrollWidth,r.scrollWidth),Math.max(t.offsetWidth,r.offsetWidth),Math.max(t.clientWidth,r.clientWidth)),o=Math.max(Math.max(t.scrollHeight,r.scrollHeight),Math.max(t.offsetHeight,r.offsetHeight),Math.max(t.clientHeight,r.clientHeight));return new s(0,0,n,o)}(n):i(e),c=u.width,l=u.height,d=u.left,f=u.top,h=r({},{allowTaint:!1,imageTimeout:15e3,proxy:void 0,useCORS:!1},t),p={backgroundColor:\"#ffffff\",cache:t.cache?t.cache:kt.create(A,h),logging:!0,removeContainer:!0,foreignObjectRendering:!1,scale:a.devicePixelRatio||1,windowWidth:a.innerWidth,windowHeight:a.innerHeight,scrollX:a.pageXOffset,scrollY:a.pageYOffset,x:d,y:f,width:Math.ceil(c),height:Math.ceil(l),id:A},m=r({},p,h,t),g=new s(m.scrollX,m.scrollY,m.windowWidth,m.windowHeight),Ot.create({id:A,enabled:m.logging}),Ot.getInstance(A).debug(\"Starting document clone\"),y=new As(e,{id:A,onclone:m.onclone,ignoreElements:m.ignoreElements,inlineImages:m.foreignObjectRendering,copyStyles:m.foreignObjectRendering}),(v=y.clonedReferenceElement)?[4,y.toIFrame(n,g)]:[2,Promise.reject(\"Unable to find element in cloned iframe\")];case 1:return w=o.sent(),b=n.documentElement?ni(getComputedStyle(n.documentElement).backgroundColor):_t.TRANSPARENT,B=n.body?ni(getComputedStyle(n.body).backgroundColor):_t.TRANSPARENT,j=t.backgroundColor,_=\"string\"==typeof j?ni(j):null===j?_t.TRANSPARENT:4294967295,C=e===n.documentElement?ht(b)?ht(B)?_:B:b:_,x={id:A,cache:m.cache,canvas:m.canvas,backgroundColor:C,scale:m.scale,x:m.x,y:m.y,scrollX:m.scrollX,scrollY:m.scrollY,width:m.width,height:m.height,windowWidth:m.windowWidth,windowHeight:m.windowHeight},m.foreignObjectRendering?(Ot.getInstance(A).debug(\"Document cloned, using foreign object rendering\"),[4,new ti(x).render(v)]):[3,3];case 2:return E=o.sent(),[3,5];case 3:return Ot.getInstance(A).debug(\"Document cloned, using computed rendering\"),kt.attachInstance(m.cache),Ot.getInstance(A).debug(\"Starting DOM parsing\"),N=Eo(v),kt.detachInstance(),C===N.styles.backgroundColor&&(N.styles.backgroundColor=_t.TRANSPARENT),Ot.getInstance(A).debug(\"Starting renderer\"),[4,new Ys(x).render(N)];case 4:E=o.sent(),o.label=5;case 5:return!0===m.removeContainer&&(As.destroy(w)||Ot.getInstance(A).error(\"Cannot detach cloned iframe as it is not in the DOM anymore\")),Ot.getInstance(A).debug(\"Finished rendering\"),Ot.destroy(A),kt.destroy(A),[2,E]}}))}))};return function(e,t){return void 0===t&&(t={}),oi(e,t)}}()},\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{AcroForm:function(){return _e},AcroFormAppearance:function(){return we},AcroFormButton:function(){return fe},AcroFormCheckBox:function(){return ge},AcroFormChoiceField:function(){return ue},AcroFormComboBox:function(){return le},AcroFormEditBox:function(){return de},AcroFormListBox:function(){return ce},AcroFormPasswordField:function(){return ve},AcroFormPushButton:function(){return he},AcroFormRadioButton:function(){return pe},AcroFormTextField:function(){return ye},GState:function(){return U},ShadingPattern:function(){return L},TilingPattern:function(){return T},jsPDF:function(){return H}});var n=r(\".\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js\"),o=function(){return\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this}();function s(){o.console&&\"function\"==typeof o.console.log&&o.console.log.apply(o.console,arguments)}var i={log:s,warn:function(e){o.console&&(\"function\"==typeof o.console.warn?o.console.warn.apply(o.console,arguments):s.call(null,arguments))},error:function(e){o.console&&(\"function\"==typeof o.console.error?o.console.error.apply(o.console,arguments):s(e))}};function a(e,t,r){var n=new XMLHttpRequest;n.open(\"GET\",e),n.responseType=\"blob\",n.onload=function(){d(n.response,t,r)},n.onerror=function(){i.error(\"could not download file\")},n.send()}function A(e){var t=new XMLHttpRequest;t.open(\"HEAD\",e,!1);try{t.send()}catch(e){}return t.status>=200&&t.status\u003C=299}function u(e){try{e.dispatchEvent(new MouseEvent(\"click\"))}catch(r){var t=document.createEvent(\"MouseEvents\");t.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var c,l,d=o.saveAs||(\"object\"!=typeof window||window!==o?function(){}:\"undefined\"!=typeof HTMLAnchorElement&&\"download\"in HTMLAnchorElement.prototype?function(e,t,r){var n=o.URL||o.webkitURL,s=document.createElement(\"a\");t=t||e.name||\"download\",s.download=t,s.rel=\"noopener\",\"string\"==typeof e?(s.href=e,s.origin!==location.origin?A(s.href)?a(e,t,r):u(s,s.target=\"_blank\"):u(s)):(s.href=n.createObjectURL(e),setTimeout((function(){n.revokeObjectURL(s.href)}),4e4),setTimeout((function(){u(s)}),0))}:\"msSaveOrOpenBlob\"in navigator?function(e,t,r){if(t=t||e.name||\"download\",\"string\"==typeof e)if(A(e))a(e,t,r);else{var n=document.createElement(\"a\");n.href=e,n.target=\"_blank\",setTimeout((function(){u(n)}))}else navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:\"object\"!=typeof t&&(i.warn(\"Deprecated: Expected third argument to be a object\"),t={autoBom:!t}),t.autoBom&&\u002F^\\s*(?:text\\\u002F\\S*|application\\\u002Fxml|\\S*\\\u002F\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8\u002Fi.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,r),t)}:function(e,t,r,n){if((n=n||open(\"\",\"_blank\"))&&(n.document.title=n.document.body.innerText=\"downloading...\"),\"string\"==typeof e)return a(e,t,r);var s=\"application\u002Foctet-stream\"===e.type,i=\u002Fconstructor\u002Fi.test(o.HTMLElement)||o.safari,A=\u002FCriOS\\\u002F[\\d]+\u002F.test(navigator.userAgent);if((A||s&&i)&&\"object\"==typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=A?e:e.replace(\u002F^data:[^;]*;\u002F,\"data:attachment\u002Ffile;\"),n?n.location.href=e:location=e,n=null},u.readAsDataURL(e)}else{var c=o.URL||o.webkitURL,l=c.createObjectURL(e);n?n.location=l:location.href=l,n=null,setTimeout((function(){c.revokeObjectURL(l)}),4e4)}});function f(e){var t;e=e||\"\",this.ok=!1,\"#\"==e.charAt(0)&&(e=e.substr(1,6)),e={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"}[e=(e=e.replace(\u002F \u002Fg,\"\")).toLowerCase()]||e;for(var r=[{re:\u002F^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$\u002F,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:\u002F^(\\w{2})(\\w{2})(\\w{2})$\u002F,example:[\"#00ff00\",\"336699\"],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:\u002F^(\\w{1})(\\w{1})(\\w{1})$\u002F,example:[\"#fb0\",\"f0f\"],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],n=0;n\u003Cr.length;n++){var o=r[n].re,s=r[n].process,i=o.exec(e);i&&(t=s(i),this.r=t[0],this.g=t[1],this.b=t[2],this.ok=!0)}this.r=this.r\u003C0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g\u003C0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b\u003C0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),r=this.b.toString(16);return 1==e.length&&(e=\"0\"+e),1==t.length&&(t=\"0\"+t),1==r.length&&(r=\"0\"+r),\"#\"+e+t+r}}function h(e,t){var r=e[0],n=e[1],o=e[2],s=e[3];r=m(r,n,o,s,t[0],7,-680876936),s=m(s,r,n,o,t[1],12,-389564586),o=m(o,s,r,n,t[2],17,606105819),n=m(n,o,s,r,t[3],22,-1044525330),r=m(r,n,o,s,t[4],7,-176418897),s=m(s,r,n,o,t[5],12,1200080426),o=m(o,s,r,n,t[6],17,-1473231341),n=m(n,o,s,r,t[7],22,-45705983),r=m(r,n,o,s,t[8],7,1770035416),s=m(s,r,n,o,t[9],12,-1958414417),o=m(o,s,r,n,t[10],17,-42063),n=m(n,o,s,r,t[11],22,-1990404162),r=m(r,n,o,s,t[12],7,1804603682),s=m(s,r,n,o,t[13],12,-40341101),o=m(o,s,r,n,t[14],17,-1502002290),r=g(r,n=m(n,o,s,r,t[15],22,1236535329),o,s,t[1],5,-165796510),s=g(s,r,n,o,t[6],9,-1069501632),o=g(o,s,r,n,t[11],14,643717713),n=g(n,o,s,r,t[0],20,-373897302),r=g(r,n,o,s,t[5],5,-701558691),s=g(s,r,n,o,t[10],9,38016083),o=g(o,s,r,n,t[15],14,-660478335),n=g(n,o,s,r,t[4],20,-405537848),r=g(r,n,o,s,t[9],5,568446438),s=g(s,r,n,o,t[14],9,-1019803690),o=g(o,s,r,n,t[3],14,-187363961),n=g(n,o,s,r,t[8],20,1163531501),r=g(r,n,o,s,t[13],5,-1444681467),s=g(s,r,n,o,t[2],9,-51403784),o=g(o,s,r,n,t[7],14,1735328473),r=y(r,n=g(n,o,s,r,t[12],20,-1926607734),o,s,t[5],4,-378558),s=y(s,r,n,o,t[8],11,-2022574463),o=y(o,s,r,n,t[11],16,1839030562),n=y(n,o,s,r,t[14],23,-35309556),r=y(r,n,o,s,t[1],4,-1530992060),s=y(s,r,n,o,t[4],11,1272893353),o=y(o,s,r,n,t[7],16,-155497632),n=y(n,o,s,r,t[10],23,-1094730640),r=y(r,n,o,s,t[13],4,681279174),s=y(s,r,n,o,t[0],11,-358537222),o=y(o,s,r,n,t[3],16,-722521979),n=y(n,o,s,r,t[6],23,76029189),r=y(r,n,o,s,t[9],4,-640364487),s=y(s,r,n,o,t[12],11,-421815835),o=y(o,s,r,n,t[15],16,530742520),r=v(r,n=y(n,o,s,r,t[2],23,-995338651),o,s,t[0],6,-198630844),s=v(s,r,n,o,t[7],10,1126891415),o=v(o,s,r,n,t[14],15,-1416354905),n=v(n,o,s,r,t[5],21,-57434055),r=v(r,n,o,s,t[12],6,1700485571),s=v(s,r,n,o,t[3],10,-1894986606),o=v(o,s,r,n,t[10],15,-1051523),n=v(n,o,s,r,t[1],21,-2054922799),r=v(r,n,o,s,t[8],6,1873313359),s=v(s,r,n,o,t[15],10,-30611744),o=v(o,s,r,n,t[6],15,-1560198380),n=v(n,o,s,r,t[13],21,1309151649),r=v(r,n,o,s,t[4],6,-145523070),s=v(s,r,n,o,t[11],10,-1120210379),o=v(o,s,r,n,t[2],15,718787259),n=v(n,o,s,r,t[9],21,-343485551),e[0]=x(r,e[0]),e[1]=x(n,e[1]),e[2]=x(o,e[2]),e[3]=x(s,e[3])}function p(e,t,r,n,o,s){return t=x(x(t,e),x(n,s)),x(t\u003C\u003Co|t>>>32-o,r)}function m(e,t,r,n,o,s,i){return p(t&r|~t&n,e,t,o,s,i)}function g(e,t,r,n,o,s,i){return p(t&n|r&~n,e,t,o,s,i)}function y(e,t,r,n,o,s,i){return p(t^r^n,e,t,o,s,i)}function v(e,t,r,n,o,s,i){return p(r^(t|~n),e,t,o,s,i)}function w(e){var t,r=e.length,n=[1732584193,-271733879,-1732584194,271733878];for(t=64;t\u003C=e.length;t+=64)h(n,b(e.substring(t-64,t)));e=e.substring(t-64);var o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t\u003Ce.length;t++)o[t>>2]|=e.charCodeAt(t)\u003C\u003C(t%4\u003C\u003C3);if(o[t>>2]|=128\u003C\u003C(t%4\u003C\u003C3),t>55)for(h(n,o),t=0;t\u003C16;t++)o[t]=0;return o[14]=8*r,h(n,o),n}function b(e){var t,r=[];for(t=0;t\u003C64;t+=4)r[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)\u003C\u003C8)+(e.charCodeAt(t+2)\u003C\u003C16)+(e.charCodeAt(t+3)\u003C\u003C24);return r}c=o.atob.bind(o),l=o.btoa.bind(o);var B=\"0123456789abcdef\".split(\"\");function j(e){for(var t=\"\",r=0;r\u003C4;r++)t+=B[e>>8*r+4&15]+B[e>>8*r&15];return t}function _(e){return String.fromCharCode((255&e)>>0,(65280&e)>>8,(16711680&e)>>16,(4278190080&e)>>24)}function C(e){return w(e).map(_).join(\"\")}function x(e,t){return e+t&4294967295}function E(e,t){var r,n,o,s;if(e!==r){for(var i=(o=e,s=1+(256\u002Fe.length>>0),new Array(s+1).join(o)),a=[],A=0;A\u003C256;A++)a[A]=A;var u=0;for(A=0;A\u003C256;A++){var c=a[A];u=(u+c+i.charCodeAt(A))%256,a[A]=a[u],a[u]=c}r=e,n=a}else a=n;var l=t.length,d=0,f=0,h=\"\";for(A=0;A\u003Cl;A++)f=(f+(c=a[d=(d+1)%256]))%256,a[d]=a[f],a[f]=c,i=a[(a[d]+a[f])%256],h+=String.fromCharCode(t.charCodeAt(A)^i);return h}!function(e){for(var t=0;t\u003Ce.length;t++)e[t]=j(e[t]);e.join(\"\")}(w(\"hello\"));var N={print:4,modify:8,copy:16,\"annot-forms\":32};function Q(e,t,r,n){this.v=1,this.r=2;let o=192;e.forEach((function(e){if(void 0!==N.perm)throw new Error(\"Invalid permission: \"+e);o+=N[e]})),this.padding=\"(¿N^NuAd\\0NVÿú\u0001\\b..\\0¶Ðh>\u002F\\f©þdSiz\";let s=(t+this.padding).substr(0,32),i=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(s,i),this.P=-(1+(255^o)),this.encryptionKey=C(s+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=E(this.encryptionKey,this.padding)}function F(e){if(\"object\"!=typeof e)throw new Error(\"Invalid Context passed to initialize PubSub (jsPDF-module)\");var t={};this.subscribe=function(e,r,n){if(n=n||!1,\"string\"!=typeof e||\"function\"!=typeof r||\"boolean\"!=typeof n)throw new Error(\"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\");t.hasOwnProperty(e)||(t[e]={});var o=Math.random().toString(35);return t[e][o]=[r,!!n],o},this.unsubscribe=function(e){for(var r in t)if(t[r][e])return delete t[r][e],0===Object.keys(t[r]).length&&delete t[r],!0;return!1},this.publish=function(r){if(t.hasOwnProperty(r)){var n=Array.prototype.slice.call(arguments,1),s=[];for(var a in t[r]){var A=t[r][a];try{A[0].apply(e,n)}catch(e){o.console&&i.error(\"jsPDF PubSub Error\",e.message,e)}A[1]&&s.push(a)}s.length&&s.forEach(this.unsubscribe)}},this.getTopics=function(){return t}}function U(e){if(!(this instanceof U))return new U(e);var t=\"opacity,stroke-opacity\".split(\",\");for(var r in e)e.hasOwnProperty(r)&&t.indexOf(r)>=0&&(this[r]=e[r]);this.id=\"\",this.objectNumber=-1}function S(e,t){this.gState=e,this.matrix=t,this.id=\"\",this.objectNumber=-1}function L(e,t,r,n,o){if(!(this instanceof L))return new L(e,t,r,n,o);this.type=\"axial\"===e?2:3,this.coords=t,this.colors=r,S.call(this,n,o)}function T(e,t,r,n,o){if(!(this instanceof T))return new T(e,t,r,n,o);this.boundingBox=e,this.xStep=t,this.yStep=r,this.stream=\"\",this.cloneIndex=0,S.call(this,n,o)}function H(e){var t,r=\"string\"==typeof arguments[0]?arguments[0]:\"p\",n=arguments[1],s=arguments[2],a=arguments[3],A=[],u=1,c=16,h=\"S\",p=null;\"object\"==typeof(e=e||{})&&(r=e.orientation,n=e.unit||n,s=e.format||s,a=e.compress||e.compressPdf||a,null!==(p=e.encryption||null)&&(p.userPassword=p.userPassword||\"\",p.ownerPassword=p.ownerPassword||\"\",p.userPermissions=p.userPermissions||[]),u=\"number\"==typeof e.userUnit?Math.abs(e.userUnit):1,void 0!==e.precision&&(t=e.precision),void 0!==e.floatPrecision&&(c=e.floatPrecision),h=e.defaultPathOperation||\"S\"),A=e.filters||(!0===a?[\"FlateEncode\"]:A),n=n||\"mm\",r=(\"\"+(r||\"P\")).toLowerCase();var m=e.putOnlyUsedFonts||!1,g={},y={internal:{},__private__:{}};y.__private__.PubSub=F;var v=\"1.3\",w=y.__private__.getPdfVersion=function(){return v};y.__private__.setPdfVersion=function(e){v=e};var b={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};y.__private__.getPageFormats=function(){return b};var B=y.__private__.getPageFormat=function(e){return b[e]};s=s||\"a4\";var j={COMPAT:\"compat\",ADVANCED:\"advanced\"},_=j.COMPAT;function C(){this.saveGraphicsState(),ue(new Ke(_e,0,0,-_e,0,Ir()*_e).toString()+\" cm\"),this.setFontSize(this.getFontSize()\u002F_e),h=\"n\",_=j.ADVANCED}function x(){this.restoreGraphicsState(),h=\"S\",_=j.COMPAT}var E=function(e,t){if(\"bold\"==e&&\"normal\"==t||\"bold\"==e&&400==t||\"normal\"==e&&\"italic\"==t||\"bold\"==e&&\"italic\"==t)throw new Error(\"Invalid Combination of fontweight and fontstyle\");return t&&e!==t&&(e=400==t?\"italic\"==e?\"italic\":\"normal\":700==t&&\"italic\"!==e?\"bold\":e+\"\"+t),e};y.advancedAPI=function(e){var t=_===j.COMPAT;return t&&C.call(this),\"function\"!=typeof e||(e(this),t&&x.call(this)),this},y.compatAPI=function(e){var t=_===j.ADVANCED;return t&&x.call(this),\"function\"!=typeof e||(e(this),t&&C.call(this)),this},y.isAdvancedAPI=function(){return _===j.ADVANCED};var N,S=function(e){if(_!==j.ADVANCED)throw new Error(e+\" is only available in 'advanced' API mode. You need to call advancedAPI() first.\")},I=y.roundToPrecision=y.__private__.roundToPrecision=function(e,r){var n=t||r;if(isNaN(e)||isNaN(n))throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");return e.toFixed(n).replace(\u002F0+$\u002F,\"\")};N=y.hpf=y.__private__.hpf=\"number\"==typeof c?function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,c)}:\"smart\"===c?function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,e>-1&&e\u003C1?16:5)}:function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,16)};var P=y.f2=y.__private__.f2=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.f2\");return I(e,2)},O=y.__private__.f3=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.f3\");return I(e,3)},k=y.scale=y.__private__.scale=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.scale\");return _===j.COMPAT?e*_e:_===j.ADVANCED?e:void 0},R=function(e){return _===j.COMPAT?Ir()-e:_===j.ADVANCED?e:void 0},M=function(e){return k(R(e))};y.__private__.setPrecision=y.setPrecision=function(e){\"number\"==typeof parseInt(e,10)&&(t=parseInt(e,10))};var D,K=\"00000000000000000000000000000000\",z=y.__private__.getFileId=function(){return K},V=y.__private__.setFileId=function(e){return K=void 0!==e&&\u002F^[a-fA-F0-9]{32}$\u002F.test(e)?e.toUpperCase():K.split(\"\").map((function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))})).join(\"\"),null!==p&&(Vt=new Q(p.userPermissions,p.userPassword,p.ownerPassword,K)),K};y.setFileId=function(e){return V(e),this},y.getFileId=function(){return z()};var q=y.__private__.convertDateToPDFDate=function(e){var t=e.getTimezoneOffset(),r=t\u003C0?\"+\":\"-\",n=Math.floor(Math.abs(t\u002F60)),o=Math.abs(t%60),s=[r,Y(n),\"'\",Y(o),\"'\"].join(\"\");return[\"D:\",e.getFullYear(),Y(e.getMonth()+1),Y(e.getDate()),Y(e.getHours()),Y(e.getMinutes()),Y(e.getSeconds()),s].join(\"\")},G=y.__private__.convertPDFDateToDate=function(e){var t=parseInt(e.substr(2,4),10),r=parseInt(e.substr(6,2),10)-1,n=parseInt(e.substr(8,2),10),o=parseInt(e.substr(10,2),10),s=parseInt(e.substr(12,2),10),i=parseInt(e.substr(14,2),10);return new Date(t,r,n,o,s,i,0)},X=y.__private__.setCreationDate=function(e){var t;if(void 0===e&&(e=new Date),e instanceof Date)t=q(e);else{if(!\u002F^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$\u002F.test(e))throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");t=e}return D=t},W=y.__private__.getCreationDate=function(e){var t=D;return\"jsDate\"===e&&(t=G(D)),t};y.setCreationDate=function(e){return X(e),this},y.getCreationDate=function(e){return W(e)};var J,Y=y.__private__.padd2=function(e){return(\"0\"+parseInt(e)).slice(-2)},Z=y.__private__.padd2Hex=function(e){return(\"00\"+(e=e.toString())).substr(e.length)},$=0,ee=[],te=[],re=0,ne=[],oe=[],se=!1,ie=te,ae=function(){$=0,re=0,te=[],ee=[],ne=[],Ye=Xe(),Ze=Xe()};y.__private__.setCustomOutputDestination=function(e){se=!0,ie=e};var Ae=function(e){se||(ie=e)};y.__private__.resetCustomOutputDestination=function(){se=!1,ie=te};var ue=y.__private__.out=function(e){return e=e.toString(),re+=e.length+1,ie.push(e),ie},ce=y.__private__.write=function(e){return ue(1===arguments.length?e.toString():Array.prototype.join.call(arguments,\" \"))},le=y.__private__.getArrayBuffer=function(e){for(var t=e.length,r=new ArrayBuffer(t),n=new Uint8Array(r);t--;)n[t]=e.charCodeAt(t);return r},de=[[\"Helvetica\",\"helvetica\",\"normal\",\"WinAnsiEncoding\"],[\"Helvetica-Bold\",\"helvetica\",\"bold\",\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",\"helvetica\",\"italic\",\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",\"helvetica\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Courier\",\"courier\",\"normal\",\"WinAnsiEncoding\"],[\"Courier-Bold\",\"courier\",\"bold\",\"WinAnsiEncoding\"],[\"Courier-Oblique\",\"courier\",\"italic\",\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",\"courier\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Times-Roman\",\"times\",\"normal\",\"WinAnsiEncoding\"],[\"Times-Bold\",\"times\",\"bold\",\"WinAnsiEncoding\"],[\"Times-Italic\",\"times\",\"italic\",\"WinAnsiEncoding\"],[\"Times-BoldItalic\",\"times\",\"bolditalic\",\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",\"normal\",null],[\"Symbol\",\"symbol\",\"normal\",null]];y.__private__.getStandardFonts=function(){return de};var fe=e.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(e){return fe=_===j.ADVANCED?e\u002F_e:e,this};var he,pe=y.__private__.getFontSize=y.getFontSize=function(){return _===j.COMPAT?fe:fe*_e},me=e.R2L||!1;y.__private__.setR2L=y.setR2L=function(e){return me=e,this},y.__private__.getR2L=y.getR2L=function(){return me};var ge,ye=y.__private__.setZoomMode=function(e){if(\u002F^\\d*\\.?\\d*%$\u002F.test(e))he=e;else if(isNaN(e)){if(-1===[void 0,null,\"fullwidth\",\"fullheight\",\"fullpage\",\"original\"].indexOf(e))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"'+e+'\" is not recognized.');he=e}else he=parseInt(e,10)};y.__private__.getZoomMode=function(){return he};var ve,we=y.__private__.setPageMode=function(e){if(-1==[void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(e))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+e+'\" is not recognized.');ge=e};y.__private__.getPageMode=function(){return ge};var be=y.__private__.setLayoutMode=function(e){if(-1==[void 0,null,\"continuous\",\"single\",\"twoleft\",\"tworight\",\"two\"].indexOf(e))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. \"'+e+'\" is not recognized.');ve=e};y.__private__.getLayoutMode=function(){return ve},y.__private__.setDisplayMode=y.setDisplayMode=function(e,t,r){return ye(e),be(t),we(r),this};var Be={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"};y.__private__.getDocumentProperty=function(e){if(-1===Object.keys(Be).indexOf(e))throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");return Be[e]},y.__private__.getDocumentProperties=function(){return Be},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(e){for(var t in Be)Be.hasOwnProperty(t)&&e[t]&&(Be[t]=e[t]);return this},y.__private__.setDocumentProperty=function(e,t){if(-1===Object.keys(Be).indexOf(e))throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");return Be[e]=t};var je,_e,Ce,xe,Ee,Ne={},Qe={},Fe=[],Ue={},Se={},Le={},Te={},He=null,Ie=0,Pe=[],Oe=new F(y),ke=e.hotfixes||[],Re={},Me={},De=[],Ke=function(e,t,r,n,o,s){if(!(this instanceof Ke))return new Ke(e,t,r,n,o,s);isNaN(e)&&(e=1),isNaN(t)&&(t=0),isNaN(r)&&(r=0),isNaN(n)&&(n=1),isNaN(o)&&(o=0),isNaN(s)&&(s=0),this._matrix=[e,t,r,n,o,s]};Object.defineProperty(Ke.prototype,\"sx\",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Ke.prototype,\"shy\",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Ke.prototype,\"shx\",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Ke.prototype,\"sy\",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Ke.prototype,\"tx\",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Ke.prototype,\"ty\",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Ke.prototype,\"a\",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Ke.prototype,\"b\",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Ke.prototype,\"c\",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Ke.prototype,\"d\",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Ke.prototype,\"e\",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Ke.prototype,\"f\",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Ke.prototype,\"rotation\",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Ke.prototype,\"scaleX\",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Ke.prototype,\"scaleY\",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Ke.prototype,\"isIdentity\",{get:function(){return 1===this.sx&&0===this.shy&&0===this.shx&&1===this.sy&&0===this.tx&&0===this.ty}}),Ke.prototype.join=function(e){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(N).join(e)},Ke.prototype.multiply=function(e){var t=e.sx*this.sx+e.shy*this.shx,r=e.sx*this.shy+e.shy*this.sy,n=e.shx*this.sx+e.sy*this.shx,o=e.shx*this.shy+e.sy*this.sy,s=e.tx*this.sx+e.ty*this.shx+this.tx,i=e.tx*this.shy+e.ty*this.sy+this.ty;return new Ke(t,r,n,o,s,i)},Ke.prototype.decompose=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty,i=Math.sqrt(e*e+t*t),a=(e\u002F=i)*r+(t\u002F=i)*n;r-=e*a,n-=t*a;var A=Math.sqrt(r*r+n*n);return a\u002F=A,e*(n\u002F=A)\u003Ct*(r\u002F=A)&&(e=-e,t=-t,a=-a,i=-i),{scale:new Ke(i,0,0,A,0,0),translate:new Ke(1,0,0,1,o,s),rotate:new Ke(e,t,-t,e,0,0),skew:new Ke(1,0,a,1,0,0)}},Ke.prototype.toString=function(e){return this.join(\" \")},Ke.prototype.inversed=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty,i=1\u002F(e*n-t*r),a=n*i,A=-t*i,u=-r*i,c=e*i;return new Ke(a,A,u,c,-a*o-u*s,-A*o-c*s)},Ke.prototype.applyToPoint=function(e){var t=e.x*this.sx+e.y*this.shx+this.tx,r=e.x*this.shy+e.y*this.sy+this.ty;return new Nr(t,r)},Ke.prototype.applyToRectangle=function(e){var t=this.applyToPoint(e),r=this.applyToPoint(new Nr(e.x+e.w,e.y+e.h));return new Qr(t.x,t.y,r.x-t.x,r.y-t.y)},Ke.prototype.clone=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty;return new Ke(e,t,r,n,o,s)},y.Matrix=Ke;var ze=y.matrixMult=function(e,t){return t.multiply(e)},Ve=new Ke(1,0,0,1,0,0);y.unitMatrix=y.identityMatrix=Ve;var qe=function(e,t){if(!Se[e]){var r=(t instanceof L?\"Sh\":\"P\")+(Object.keys(Ue).length+1).toString(10);t.id=r,Se[e]=r,Ue[r]=t,Oe.publish(\"addPattern\",t)}};y.ShadingPattern=L,y.TilingPattern=T,y.addShadingPattern=function(e,t){return S(\"addShadingPattern()\"),qe(e,t),this},y.beginTilingPattern=function(e){S(\"beginTilingPattern()\"),Ur(e.boundingBox[0],e.boundingBox[1],e.boundingBox[2]-e.boundingBox[0],e.boundingBox[3]-e.boundingBox[1],e.matrix)},y.endTilingPattern=function(e,t){S(\"endTilingPattern()\"),t.stream=oe[J].join(\"\\n\"),qe(e,t),Oe.publish(\"endTilingPattern\",t),De.pop().restore()};var Ge=y.__private__.newObject=function(){var e=Xe();return We(e,!0),e},Xe=y.__private__.newObjectDeferred=function(){return $++,ee[$]=function(){return re},$},We=function(e,t){return t=\"boolean\"==typeof t&&t,ee[e]=re,t&&ue(e+\" 0 obj\"),e},Je=y.__private__.newAdditionalObject=function(){var e={objId:Xe(),content:\"\"};return ne.push(e),e},Ye=Xe(),Ze=Xe(),$e=y.__private__.decodeColorString=function(e){var t=e.split(\" \");if(2!==t.length||\"g\"!==t[1]&&\"G\"!==t[1])5!==t.length||\"k\"!==t[4]&&\"K\"!==t[4]||(t=[(1-t[0])*(1-t[3]),(1-t[1])*(1-t[3]),(1-t[2])*(1-t[3]),\"r\"]);else{var r=parseFloat(t[0]);t=[r,r,r,\"r\"]}for(var n=\"#\",o=0;o\u003C3;o++)n+=(\"0\"+Math.floor(255*parseFloat(t[o])).toString(16)).slice(-2);return n},et=y.__private__.encodeColorString=function(e){var t;\"string\"==typeof e&&(e={ch1:e});var r=e.ch1,n=e.ch2,o=e.ch3,s=e.ch4,i=\"draw\"===e.pdfColorType?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"];if(\"string\"==typeof r&&\"#\"!==r.charAt(0)){var a=new f(r);if(a.ok)r=a.toHex();else if(!\u002F^\\d*\\.?\\d*$\u002F.test(r))throw new Error('Invalid color \"'+r+'\" passed to jsPDF.encodeColorString.')}if(\"string\"==typeof r&&\u002F^#[0-9A-Fa-f]{3}$\u002F.test(r)&&(r=\"#\"+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]),\"string\"==typeof r&&\u002F^#[0-9A-Fa-f]{6}$\u002F.test(r)){var A=parseInt(r.substr(1),16);r=A>>16&255,n=A>>8&255,o=255&A}if(void 0===n||void 0===s&&r===n&&n===o)if(\"string\"==typeof r)t=r+\" \"+i[0];else switch(e.precision){case 2:t=P(r\u002F255)+\" \"+i[0];break;case 3:default:t=O(r\u002F255)+\" \"+i[0]}else if(void 0===s||\"object\"==typeof s){if(s&&!isNaN(s.a)&&0===s.a)return[\"1.\",\"1.\",\"1.\",i[1]].join(\" \");if(\"string\"==typeof r)t=[r,n,o,i[1]].join(\" \");else switch(e.precision){case 2:t=[P(r\u002F255),P(n\u002F255),P(o\u002F255),i[1]].join(\" \");break;default:case 3:t=[O(r\u002F255),O(n\u002F255),O(o\u002F255),i[1]].join(\" \")}}else if(\"string\"==typeof r)t=[r,n,o,s,i[2]].join(\" \");else switch(e.precision){case 2:t=[P(r),P(n),P(o),P(s),i[2]].join(\" \");break;case 3:default:t=[O(r),O(n),O(o),O(s),i[2]].join(\" \")}return t},tt=y.__private__.getFilters=function(){return A},rt=y.__private__.putStream=function(e){var t=(e=e||{}).data||\"\",r=e.filters||tt(),n=e.alreadyAppliedFilters||[],o=e.addLength1||!1,s=t.length,i=e.objectId,a=function(e){return e};if(null!==p&&void 0===i)throw new Error(\"ObjectId must be passed to putStream for file encryption\");null!==p&&(a=Vt.encryptor(i,0));var A={};!0===r&&(r=[\"FlateEncode\"]);var u=e.additionalKeyValues||[],c=(A=void 0!==H.API.processDataByFilters?H.API.processDataByFilters(t,r):{data:t,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(\" \"):n.toString());if(0!==A.data.length&&(u.push({key:\"Length\",value:A.data.length}),!0===o&&u.push({key:\"Length1\",value:s})),0!=c.length)if(c.split(\"\u002F\").length-1==1)u.push({key:\"Filter\",value:c});else{u.push({key:\"Filter\",value:\"[\"+c+\"]\"});for(var l=0;l\u003Cu.length;l+=1)if(\"DecodeParms\"===u[l].key){for(var d=[],f=0;f\u003CA.reverseChain.split(\"\u002F\").length-1;f+=1)d.push(\"null\");d.push(u[l].value),u[l].value=\"[\"+d.join(\" \")+\"]\"}}ue(\"\u003C\u003C\");for(var h=0;h\u003Cu.length;h++)ue(\"\u002F\"+u[h].key+\" \"+u[h].value);ue(\">>\"),0!==A.data.length&&(ue(\"stream\"),ue(a(A.data)),ue(\"endstream\"))},nt=y.__private__.putPage=function(e){var t=e.number,r=e.data,n=e.objId,o=e.contentsObjId;We(n,!0),ue(\"\u003C\u003C\u002FType \u002FPage\"),ue(\"\u002FParent \"+e.rootDictionaryObjId+\" 0 R\"),ue(\"\u002FResources \"+e.resourceDictionaryObjId+\" 0 R\"),ue(\"\u002FMediaBox [\"+parseFloat(N(e.mediaBox.bottomLeftX))+\" \"+parseFloat(N(e.mediaBox.bottomLeftY))+\" \"+N(e.mediaBox.topRightX)+\" \"+N(e.mediaBox.topRightY)+\"]\"),null!==e.cropBox&&ue(\"\u002FCropBox [\"+N(e.cropBox.bottomLeftX)+\" \"+N(e.cropBox.bottomLeftY)+\" \"+N(e.cropBox.topRightX)+\" \"+N(e.cropBox.topRightY)+\"]\"),null!==e.bleedBox&&ue(\"\u002FBleedBox [\"+N(e.bleedBox.bottomLeftX)+\" \"+N(e.bleedBox.bottomLeftY)+\" \"+N(e.bleedBox.topRightX)+\" \"+N(e.bleedBox.topRightY)+\"]\"),null!==e.trimBox&&ue(\"\u002FTrimBox [\"+N(e.trimBox.bottomLeftX)+\" \"+N(e.trimBox.bottomLeftY)+\" \"+N(e.trimBox.topRightX)+\" \"+N(e.trimBox.topRightY)+\"]\"),null!==e.artBox&&ue(\"\u002FArtBox [\"+N(e.artBox.bottomLeftX)+\" \"+N(e.artBox.bottomLeftY)+\" \"+N(e.artBox.topRightX)+\" \"+N(e.artBox.topRightY)+\"]\"),\"number\"==typeof e.userUnit&&1!==e.userUnit&&ue(\"\u002FUserUnit \"+e.userUnit),Oe.publish(\"putPage\",{objId:n,pageContext:Pe[t],pageNumber:t,page:r}),ue(\"\u002FContents \"+o+\" 0 R\"),ue(\">>\"),ue(\"endobj\");var s=r.join(\"\\n\");return _===j.ADVANCED&&(s+=\"\\nQ\"),We(o,!0),rt({data:s,filters:tt(),objectId:o}),ue(\"endobj\"),n},ot=y.__private__.putPages=function(){var e,t,r=[];for(e=1;e\u003C=Ie;e++)Pe[e].objId=Xe(),Pe[e].contentsObjId=Xe();for(e=1;e\u003C=Ie;e++)r.push(nt({number:e,data:oe[e],objId:Pe[e].objId,contentsObjId:Pe[e].contentsObjId,mediaBox:Pe[e].mediaBox,cropBox:Pe[e].cropBox,bleedBox:Pe[e].bleedBox,trimBox:Pe[e].trimBox,artBox:Pe[e].artBox,userUnit:Pe[e].userUnit,rootDictionaryObjId:Ye,resourceDictionaryObjId:Ze}));We(Ye,!0),ue(\"\u003C\u003C\u002FType \u002FPages\");var n=\"\u002FKids [\";for(t=0;t\u003CIe;t++)n+=r[t]+\" 0 R \";ue(n+\"]\"),ue(\"\u002FCount \"+Ie),ue(\">>\"),ue(\"endobj\"),Oe.publish(\"postPutPages\")},st=function(e){var t=function(e,t){return-1!==e.indexOf(\" \")?\"(\"+Qt(e,t)+\")\":Qt(e,t)};Oe.publish(\"putFont\",{font:e,out:ue,newObject:Ge,putStream:rt,pdfEscapeWithNeededParanthesis:t}),!0!==e.isAlreadyPutted&&(e.objectNumber=Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FType \u002FFont\"),ue(\"\u002FBaseFont \u002F\"+t(e.postScriptName)),ue(\"\u002FSubtype \u002FType1\"),\"string\"==typeof e.encoding&&ue(\"\u002FEncoding \u002F\"+e.encoding),ue(\"\u002FFirstChar 32\"),ue(\"\u002FLastChar 255\"),ue(\">>\"),ue(\"endobj\"))},it=function(){for(var e in Ne)Ne.hasOwnProperty(e)&&(!1===m||!0===m&&g.hasOwnProperty(e))&&st(Ne[e])},at=function(e){e.objectNumber=Ge();var t=[];t.push({key:\"Type\",value:\"\u002FXObject\"}),t.push({key:\"Subtype\",value:\"\u002FForm\"}),t.push({key:\"BBox\",value:\"[\"+[N(e.x),N(e.y),N(e.x+e.width),N(e.y+e.height)].join(\" \")+\"]\"}),t.push({key:\"Matrix\",value:\"[\"+e.matrix.toString()+\"]\"});var r=e.pages[1].join(\"\\n\");rt({data:r,additionalKeyValues:t,objectId:e.objectNumber}),ue(\"endobj\")},At=function(){for(var e in Re)Re.hasOwnProperty(e)&&at(Re[e])},ut=function(e,t){var r,n=[],o=1\u002F(t-1);for(r=0;r\u003C1;r+=o)n.push(r);if(n.push(1),0!=e[0].offset){var s={offset:0,color:e[0].color};e.unshift(s)}if(1!=e[e.length-1].offset){var i={offset:1,color:e[e.length-1].color};e.push(i)}for(var a=\"\",A=0,u=0;u\u003Cn.length;u++){for(r=n[u];r>e[A+1].offset;)A++;var c=e[A].offset,l=(r-c)\u002F(e[A+1].offset-c),d=e[A].color,f=e[A+1].color;a+=Z(Math.round((1-l)*d[0]+l*f[0]).toString(16))+Z(Math.round((1-l)*d[1]+l*f[1]).toString(16))+Z(Math.round((1-l)*d[2]+l*f[2]).toString(16))}return a.trim()},ct=function(e,t){t||(t=21);var r=Ge(),n=ut(e.colors,t),o=[];o.push({key:\"FunctionType\",value:\"0\"}),o.push({key:\"Domain\",value:\"[0.0 1.0]\"}),o.push({key:\"Size\",value:\"[\"+t+\"]\"}),o.push({key:\"BitsPerSample\",value:\"8\"}),o.push({key:\"Range\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),o.push({key:\"Decode\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),rt({data:n,additionalKeyValues:o,alreadyAppliedFilters:[\"\u002FASCIIHexDecode\"],objectId:r}),ue(\"endobj\"),e.objectNumber=Ge(),ue(\"\u003C\u003C \u002FShadingType \"+e.type),ue(\"\u002FColorSpace \u002FDeviceRGB\");var s=\"\u002FCoords [\"+N(parseFloat(e.coords[0]))+\" \"+N(parseFloat(e.coords[1]))+\" \";2===e.type?s+=N(parseFloat(e.coords[2]))+\" \"+N(parseFloat(e.coords[3])):s+=N(parseFloat(e.coords[2]))+\" \"+N(parseFloat(e.coords[3]))+\" \"+N(parseFloat(e.coords[4]))+\" \"+N(parseFloat(e.coords[5])),ue(s+=\"]\"),e.matrix&&ue(\"\u002FMatrix [\"+e.matrix.toString()+\"]\"),ue(\"\u002FFunction \"+r+\" 0 R\"),ue(\"\u002FExtend [true true]\"),ue(\">>\"),ue(\"endobj\")},lt=function(e,t){var r=Xe(),n=Ge();t.push({resourcesOid:r,objectOid:n}),e.objectNumber=n;var o=[];o.push({key:\"Type\",value:\"\u002FPattern\"}),o.push({key:\"PatternType\",value:\"1\"}),o.push({key:\"PaintType\",value:\"1\"}),o.push({key:\"TilingType\",value:\"1\"}),o.push({key:\"BBox\",value:\"[\"+e.boundingBox.map(N).join(\" \")+\"]\"}),o.push({key:\"XStep\",value:N(e.xStep)}),o.push({key:\"YStep\",value:N(e.yStep)}),o.push({key:\"Resources\",value:r+\" 0 R\"}),e.matrix&&o.push({key:\"Matrix\",value:\"[\"+e.matrix.toString()+\"]\"}),rt({data:e.stream,additionalKeyValues:o,objectId:e.objectNumber}),ue(\"endobj\")},dt=function(e){var t;for(t in Ue)Ue.hasOwnProperty(t)&&(Ue[t]instanceof L?ct(Ue[t]):Ue[t]instanceof T&&lt(Ue[t],e))},ft=function(e){for(var t in e.objectNumber=Ge(),ue(\"\u003C\u003C\"),e)switch(t){case\"opacity\":ue(\"\u002Fca \"+P(e[t]));break;case\"stroke-opacity\":ue(\"\u002FCA \"+P(e[t]))}ue(\">>\"),ue(\"endobj\")},ht=function(){var e;for(e in Le)Le.hasOwnProperty(e)&&ft(Le[e])},pt=function(){for(var e in ue(\"\u002FXObject \u003C\u003C\"),Re)Re.hasOwnProperty(e)&&Re[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Re[e].objectNumber+\" 0 R\");Oe.publish(\"putXobjectDict\"),ue(\">>\")},mt=function(){Vt.oid=Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FFilter \u002FStandard\"),ue(\"\u002FV \"+Vt.v),ue(\"\u002FR \"+Vt.r),ue(\"\u002FU \u003C\"+Vt.toHexString(Vt.U)+\">\"),ue(\"\u002FO \u003C\"+Vt.toHexString(Vt.O)+\">\"),ue(\"\u002FP \"+Vt.P),ue(\">>\"),ue(\"endobj\")},gt=function(){for(var e in ue(\"\u002FFont \u003C\u003C\"),Ne)Ne.hasOwnProperty(e)&&(!1===m||!0===m&&g.hasOwnProperty(e))&&ue(\"\u002F\"+e+\" \"+Ne[e].objectNumber+\" 0 R\");ue(\">>\")},yt=function(){if(Object.keys(Ue).length>0){for(var e in ue(\"\u002FShading \u003C\u003C\"),Ue)Ue.hasOwnProperty(e)&&Ue[e]instanceof L&&Ue[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Ue[e].objectNumber+\" 0 R\");Oe.publish(\"putShadingPatternDict\"),ue(\">>\")}},vt=function(e){if(Object.keys(Ue).length>0){for(var t in ue(\"\u002FPattern \u003C\u003C\"),Ue)Ue.hasOwnProperty(t)&&Ue[t]instanceof y.TilingPattern&&Ue[t].objectNumber>=0&&Ue[t].objectNumber\u003Ce&&ue(\"\u002F\"+t+\" \"+Ue[t].objectNumber+\" 0 R\");Oe.publish(\"putTilingPatternDict\"),ue(\">>\")}},wt=function(){if(Object.keys(Le).length>0){var e;for(e in ue(\"\u002FExtGState \u003C\u003C\"),Le)Le.hasOwnProperty(e)&&Le[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Le[e].objectNumber+\" 0 R\");Oe.publish(\"putGStateDict\"),ue(\">>\")}},bt=function(e){We(e.resourcesOid,!0),ue(\"\u003C\u003C\"),ue(\"\u002FProcSet [\u002FPDF \u002FText \u002FImageB \u002FImageC \u002FImageI]\"),gt(),yt(),vt(e.objectOid),wt(),pt(),ue(\">>\"),ue(\"endobj\")},Bt=function(){var e=[];it(),ht(),At(),dt(e),Oe.publish(\"putResources\"),e.forEach(bt),bt({resourcesOid:Ze,objectOid:Number.MAX_SAFE_INTEGER}),Oe.publish(\"postPutResources\")},jt=function(){Oe.publish(\"putAdditionalObjects\");for(var e=0;e\u003Cne.length;e++){var t=ne[e];We(t.objId,!0),ue(t.content),ue(\"endobj\")}Oe.publish(\"postPutAdditionalObjects\")},_t=function(e){Qe[e.fontName]=Qe[e.fontName]||{},Qe[e.fontName][e.fontStyle]=e.id},Ct=function(e,t,r,n,o){var s={id:\"F\"+(Object.keys(Ne).length+1).toString(10),postScriptName:e,fontName:t,fontStyle:r,encoding:n,isStandardFont:o||!1,metadata:{}};return Oe.publish(\"addFont\",{font:s,instance:this}),Ne[s.id]=s,_t(s),s.id},xt=function(e){for(var t=0,r=de.length;t\u003Cr;t++){var n=Ct.call(this,e[t][0],e[t][1],e[t][2],de[t][3],!0);!1===m&&(g[n]=!0);var o=e[t][0].split(\"-\");_t({id:n,fontName:o[0],fontStyle:o[1]||\"\"})}Oe.publish(\"addFonts\",{fonts:Ne,dictionary:Qe})},Et=function(e){return e.foo=function(){try{return e.apply(this,arguments)}catch(e){var t=e.stack||\"\";~t.indexOf(\" at \")&&(t=t.split(\" at \")[1]);var r=\"Error in function \"+t.split(\"\\n\")[0].split(\"\u003C\")[0]+\": \"+e.message;if(!o.console)throw new Error(r);o.console.error(r,e),o.alert&&alert(r)}},e.foo.bar=e,e.foo},Nt=function(e,t){var r,n,o,s,i,a,A,u,c;if(o=(t=t||{}).sourceEncoding||\"Unicode\",i=t.outputEncoding,(t.autoencode||i)&&Ne[je].metadata&&Ne[je].metadata[o]&&Ne[je].metadata[o].encoding&&(s=Ne[je].metadata[o].encoding,!i&&Ne[je].encoding&&(i=Ne[je].encoding),!i&&s.codePages&&(i=s.codePages[0]),\"string\"==typeof i&&(i=s[i]),i)){for(A=!1,a=[],r=0,n=e.length;r\u003Cn;r++)(u=i[e.charCodeAt(r)])?a.push(String.fromCharCode(u)):a.push(e[r]),a[r].charCodeAt(0)>>8&&(A=!0);e=a.join(\"\")}for(r=e.length;void 0===A&&0!==r;)e.charCodeAt(r-1)>>8&&(A=!0),r--;if(!A)return e;for(a=t.noBOM?[]:[254,255],r=0,n=e.length;r\u003Cn;r++){if((c=(u=e.charCodeAt(r))>>8)>>8)throw new Error(\"Character at position \"+r+\" of string '\"+e+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");a.push(c),a.push(u-(c\u003C\u003C8))}return String.fromCharCode.apply(void 0,a)},Qt=y.__private__.pdfEscape=y.pdfEscape=function(e,t){return Nt(e,t).replace(\u002F\\\\\u002Fg,\"\\\\\\\\\").replace(\u002F\\(\u002Fg,\"\\\\(\").replace(\u002F\\)\u002Fg,\"\\\\)\")},Ft=y.__private__.beginPage=function(e){oe[++Ie]=[],Pe[Ie]={objId:0,contentsObjId:0,userUnit:Number(u),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(e[0]),topRightY:Number(e[1])}},Lt(Ie),Ae(oe[J])},Ut=function(e,t){var n,o,a;switch(r=t||r,\"string\"==typeof e&&(n=B(e.toLowerCase()),Array.isArray(n)&&(o=n[0],a=n[1])),Array.isArray(e)&&(o=e[0]*_e,a=e[1]*_e),isNaN(o)&&(o=s[0],a=s[1]),(o>14400||a>14400)&&(i.warn(\"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width\u002Fheight to 14400\"),o=Math.min(14400,o),a=Math.min(14400,a)),s=[o,a],r.substr(0,1)){case\"l\":a>o&&(s=[a,o]);break;case\"p\":o>a&&(s=[a,o])}Ft(s),lr(cr),ue(vr),0!==Cr&&ue(Cr+\" J\"),0!==xr&&ue(xr+\" j\"),Oe.publish(\"addPage\",{pageNumber:Ie})},St=function(e){e>0&&e\u003C=Ie&&(oe.splice(e,1),Pe.splice(e,1),Ie--,J>Ie&&(J=Ie),this.setPage(J))},Lt=function(e){e>0&&e\u003C=Ie&&(J=e)},Tt=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return oe.length-1},Ht=function(e,t,r){var n,o=void 0;return r=r||{},e=void 0!==e?e:Ne[je].fontName,t=void 0!==t?t:Ne[je].fontStyle,n=e.toLowerCase(),void 0!==Qe[n]&&void 0!==Qe[n][t]?o=Qe[n][t]:void 0!==Qe[e]&&void 0!==Qe[e][t]?o=Qe[e][t]:!1===r.disableWarning&&i.warn(\"Unable to look up font label for font '\"+e+\"', '\"+t+\"'. Refer to getFontList() for available fonts.\"),o||r.noFallback||null==(o=Qe.times[t])&&(o=Qe.times.normal),o},It=y.__private__.putInfo=function(){var e=Ge(),t=function(e){return e};for(var r in null!==p&&(t=Vt.encryptor(e,0)),ue(\"\u003C\u003C\"),ue(\"\u002FProducer (\"+Qt(t(\"jsPDF \"+H.version))+\")\"),Be)Be.hasOwnProperty(r)&&Be[r]&&ue(\"\u002F\"+r.substr(0,1).toUpperCase()+r.substr(1)+\" (\"+Qt(t(Be[r]))+\")\");ue(\"\u002FCreationDate (\"+Qt(t(D))+\")\"),ue(\">>\"),ue(\"endobj\")},Pt=y.__private__.putCatalog=function(e){var t=(e=e||{}).rootDictionaryObjId||Ye;switch(Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FType \u002FCatalog\"),ue(\"\u002FPages \"+t+\" 0 R\"),he||(he=\"fullwidth\"),he){case\"fullwidth\":ue(\"\u002FOpenAction [3 0 R \u002FFitH null]\");break;case\"fullheight\":ue(\"\u002FOpenAction [3 0 R \u002FFitV null]\");break;case\"fullpage\":ue(\"\u002FOpenAction [3 0 R \u002FFit]\");break;case\"original\":ue(\"\u002FOpenAction [3 0 R \u002FXYZ null null 1]\");break;default:var r=\"\"+he;\"%\"===r.substr(r.length-1)&&(he=parseInt(he)\u002F100),\"number\"==typeof he&&ue(\"\u002FOpenAction [3 0 R \u002FXYZ null null \"+P(he)+\"]\")}switch(ve||(ve=\"continuous\"),ve){case\"continuous\":ue(\"\u002FPageLayout \u002FOneColumn\");break;case\"single\":ue(\"\u002FPageLayout \u002FSinglePage\");break;case\"two\":case\"twoleft\":ue(\"\u002FPageLayout \u002FTwoColumnLeft\");break;case\"tworight\":ue(\"\u002FPageLayout \u002FTwoColumnRight\")}ge&&ue(\"\u002FPageMode \u002F\"+ge),Oe.publish(\"putCatalog\"),ue(\">>\"),ue(\"endobj\")},Ot=y.__private__.putTrailer=function(){ue(\"trailer\"),ue(\"\u003C\u003C\"),ue(\"\u002FSize \"+($+1)),ue(\"\u002FRoot \"+$+\" 0 R\"),ue(\"\u002FInfo \"+($-1)+\" 0 R\"),null!==p&&ue(\"\u002FEncrypt \"+Vt.oid+\" 0 R\"),ue(\"\u002FID [ \u003C\"+K+\"> \u003C\"+K+\"> ]\"),ue(\">>\")},kt=y.__private__.putHeader=function(){ue(\"%PDF-\"+v),ue(\"%ºß¬à\")},Rt=y.__private__.putXRef=function(){var e=\"0000000000\";ue(\"xref\"),ue(\"0 \"+($+1)),ue(\"0000000000 65535 f \");for(var t=1;t\u003C=$;t++)\"function\"==typeof ee[t]?ue((e+ee[t]()).slice(-10)+\" 00000 n \"):void 0!==ee[t]?ue((e+ee[t]).slice(-10)+\" 00000 n \"):ue(\"0000000000 00000 n \")},Mt=y.__private__.buildDocument=function(){ae(),Ae(te),Oe.publish(\"buildDocument\"),kt(),ot(),jt(),Bt(),null!==p&&mt(),It(),Pt();var e=re;return Rt(),Ot(),ue(\"startxref\"),ue(\"\"+e),ue(\"%%EOF\"),Ae(oe[J]),te.join(\"\\n\")},Dt=y.__private__.getBlob=function(e){return new Blob([le(e)],{type:\"application\u002Fpdf\"})},Kt=y.output=y.__private__.output=Et((function(e,t){switch(\"string\"==typeof(t=t||{})?t={filename:t}:t.filename=t.filename||\"generated.pdf\",e){case void 0:return Mt();case\"save\":y.save(t.filename);break;case\"arraybuffer\":return le(Mt());case\"blob\":return Dt(Mt());case\"bloburi\":case\"bloburl\":if(void 0!==o.URL&&\"function\"==typeof o.URL.createObjectURL)return o.URL&&o.URL.createObjectURL(Dt(Mt()))||void 0;i.warn(\"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\");break;case\"datauristring\":case\"dataurlstring\":var r=\"\",n=Mt();try{r=l(n)}catch(e){r=l(unescape(encodeURIComponent(n)))}return\"data:application\u002Fpdf;filename=\"+t.filename+\";base64,\"+r;case\"pdfobjectnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(o)){var s='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Cscript src=\"'+(t.pdfObjectUrl||\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fpdfobject\u002F2.1.1\u002Fpdfobject.min.js\")+'\">\u003C\\\u002Fscript>\u003Cscript >PDFObject.embed(\"'+this.output(\"dataurlstring\")+'\", '+JSON.stringify(t)+\");\u003C\\\u002Fscript>\u003C\u002Fbody>\u003C\u002Fhtml>\",a=o.open();return null!==a&&a.document.write(s),a}throw new Error(\"The option pdfobjectnewwindow just works in a browser-environment.\");case\"pdfjsnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(o)){var A='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Ciframe id=\"pdfViewer\" src=\"'+(t.pdfJsUrl||\"examples\u002FPDF.js\u002Fweb\u002Fviewer.html\")+\"?file=&downloadName=\"+t.filename+'\" width=\"500px\" height=\"400px\" \u002F>\u003C\u002Fbody>\u003C\u002Fhtml>',u=o.open();if(null!==u){u.document.write(A);var c=this;u.document.documentElement.querySelector(\"#pdfViewer\").onload=function(){u.document.title=t.filename,u.document.documentElement.querySelector(\"#pdfViewer\").contentWindow.PDFViewerApplication.open(c.output(\"bloburl\"))}}return u}throw new Error(\"The option pdfjsnewwindow just works in a browser-environment.\");case\"dataurlnewwindow\":if(\"[object Window]\"!==Object.prototype.toString.call(o))throw new Error(\"The option dataurlnewwindow just works in a browser-environment.\");var d='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Ciframe src=\"'+this.output(\"datauristring\",t)+'\">\u003C\u002Fiframe>\u003C\u002Fbody>\u003C\u002Fhtml>',f=o.open();if(null!==f&&(f.document.write(d),f.document.title=t.filename),f||\"undefined\"==typeof safari)return f;break;case\"datauri\":case\"dataurl\":return o.document.location.href=this.output(\"datauristring\",t);default:return null}})),zt=function(e){return!0===Array.isArray(ke)&&ke.indexOf(e)>-1};switch(n){case\"pt\":_e=1;break;case\"mm\":_e=72\u002F25.4;break;case\"cm\":_e=72\u002F2.54;break;case\"in\":_e=72;break;case\"px\":_e=1==zt(\"px_scaling\")?.75:96\u002F72;break;case\"pc\":case\"em\":_e=12;break;case\"ex\":_e=6;break;default:throw new Error(\"Invalid unit: \"+n)}var Vt=null;X(),V();var qt=function(e){return null!==p?Vt.encryptor(e,0):function(e){return e}},Gt=y.__private__.getPageInfo=y.getPageInfo=function(e){if(isNaN(e)||e%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");return{objId:Pe[e].objId,pageNumber:e,pageContext:Pe[e]}},Xt=y.__private__.getPageInfoByObjId=function(e){if(isNaN(e)||e%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");for(var t in Pe)if(Pe[t].objId===e)break;return Gt(t)},Wt=y.__private__.getCurrentPageInfo=y.getCurrentPageInfo=function(){return{objId:Pe[J].objId,pageNumber:J,pageContext:Pe[J]}};y.addPage=function(){return Ut.apply(this,arguments),this},y.setPage=function(){return Lt.apply(this,arguments),Ae.call(this,oe[J]),this},y.insertPage=function(e){return this.addPage(),this.movePage(J,e),this},y.movePage=function(e,t){var r,n;if(e>t){r=oe[e],n=Pe[e];for(var o=e;o>t;o--)oe[o]=oe[o-1],Pe[o]=Pe[o-1];oe[t]=r,Pe[t]=n,this.setPage(t)}else if(e\u003Ct){r=oe[e],n=Pe[e];for(var s=e;s\u003Ct;s++)oe[s]=oe[s+1],Pe[s]=Pe[s+1];oe[t]=r,Pe[t]=n,this.setPage(t)}return this},y.deletePage=function(){return St.apply(this,arguments),this},y.__private__.text=y.text=function(e,t,r,n,o){var s,i,a,A,u,c,l,d,f=(n=n||{}).scope||this;if(\"number\"==typeof e&&\"number\"==typeof t&&(\"string\"==typeof r||Array.isArray(r))){var h=r;r=t,t=e,e=h}if(arguments[3]instanceof Ke==0?(a=arguments[4],A=arguments[5],\"object\"==typeof(l=arguments[3])&&null!==l||(\"string\"==typeof a&&(A=a,a=null),\"string\"==typeof l&&(A=l,l=null),\"number\"==typeof l&&(a=l,l=null),n={flags:l,angle:a,align:A})):(S(\"The transform parameter of text() with a Matrix value\"),d=o),isNaN(t)||isNaN(r)||null==e)throw new Error(\"Invalid arguments passed to jsPDF.text\");if(0===e.length)return f;var p=\"\",m=!1,y=\"number\"==typeof n.lineHeightFactor?n.lineHeightFactor:ur,v=f.internal.scaleFactor;function w(e){return e=e.split(\"\\t\").join(Array(n.TabLen||9).join(\" \")),Qt(e,l)}function b(e){for(var t,r=e.concat(),n=[],o=r.length;o--;)\"string\"==typeof(t=r.shift())?n.push(t):Array.isArray(e)&&(1===t.length||void 0===t[1]&&void 0===t[2])?n.push(t[0]):n.push([t[0],t[1],t[2]]);return n}function B(e,t){var r;if(\"string\"==typeof e)r=t(e)[0];else if(Array.isArray(e)){for(var n,o,s=e.concat(),i=[],a=s.length;a--;)\"string\"==typeof(n=s.shift())?i.push(t(n)[0]):Array.isArray(n)&&\"string\"==typeof n[0]&&(o=t(n[0],n[1],n[2]),i.push([o[0],o[1],o[2]]));r=i}return r}var C=!1,x=!0;if(\"string\"==typeof e)C=!0;else if(Array.isArray(e)){var E=e.concat();i=[];for(var Q,F=E.length;F--;)(\"string\"!=typeof(Q=E.shift())||Array.isArray(Q)&&\"string\"!=typeof Q[0])&&(x=!1);C=x}if(!1===C)throw new Error('Type of text must be string or Array. \"'+e+'\" is not recognized.');\"string\"==typeof e&&(e=e.match(\u002F[\\r?\\n]\u002F)?e.split(\u002F\\r\\n|\\r|\\n\u002Fg):[e]);var U=fe\u002Ff.internal.scaleFactor,L=U*(ur-1);switch(n.baseline){case\"bottom\":r-=L;break;case\"top\":r+=U-L;break;case\"hanging\":r+=U-2*L;break;case\"middle\":r+=U\u002F2-L}if((c=n.maxWidth||0)>0&&(\"string\"==typeof e?e=f.splitTextToSize(e,c):\"[object Array]\"===Object.prototype.toString.call(e)&&(e=e.reduce((function(e,t){return e.concat(f.splitTextToSize(t,c))}),[]))),s={text:e,x:t,y:r,options:n,mutex:{pdfEscape:Qt,activeFontKey:je,fonts:Ne,activeFontSize:fe}},Oe.publish(\"preProcessText\",s),e=s.text,a=(n=s.options).angle,d instanceof Ke==0&&a&&\"number\"==typeof a){a*=Math.PI\u002F180,0===n.rotationDirection&&(a=-a),_===j.ADVANCED&&(a=-a);var T=Math.cos(a),H=Math.sin(a);d=new Ke(T,H,-H,T,0,0)}else a&&a instanceof Ke&&(d=a);_!==j.ADVANCED||d||(d=Ve),void 0!==(u=n.charSpace||jr)&&(p+=N(k(u))+\" Tc\\n\",this.setCharSpace(this.getCharSpace()||0)),n.lang;var I=-1,P=void 0!==n.renderingMode?n.renderingMode:n.stroke,O=f.internal.getCurrentPageInfo().pageContext;switch(P){case 0:case!1:case\"fill\":I=0;break;case 1:case!0:case\"stroke\":I=1;break;case 2:case\"fillThenStroke\":I=2;break;case 3:case\"invisible\":I=3;break;case 4:case\"fillAndAddForClipping\":I=4;break;case 5:case\"strokeAndAddPathForClipping\":I=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":I=6;break;case 7:case\"addToPathForClipping\":I=7}var R=void 0!==O.usedRenderingMode?O.usedRenderingMode:-1;-1!==I?p+=I+\" Tr\\n\":-1!==R&&(p+=\"0 Tr\\n\"),-1!==I&&(O.usedRenderingMode=I),A=n.align||\"left\";var M,D=fe*y,K=f.internal.pageSize.getWidth(),z=Ne[je];u=n.charSpace||jr,c=n.maxWidth||0,l=Object.assign({autoencode:!0,noBOM:!0},n.flags);var V=[];if(\"[object Array]\"===Object.prototype.toString.call(e)){var q;i=b(e),\"left\"!==A&&(M=i.map((function(e){return f.getStringUnitWidth(e,{font:z,charSpace:u,fontSize:fe,doKerning:!1})*fe\u002Fv})));var G,X=0;if(\"right\"===A){t-=M[0],e=[],F=i.length;for(var W=0;W\u003CF;W++)0===W?(G=pr(t),q=mr(r)):(G=k(X-M[W]),q=-D),e.push([i[W],G,q]),X=M[W]}else if(\"center\"===A){t-=M[0]\u002F2,e=[],F=i.length;for(var J=0;J\u003CF;J++)0===J?(G=pr(t),q=mr(r)):(G=k((X-M[J])\u002F2),q=-D),e.push([i[J],G,q]),X=M[J]}else if(\"left\"===A){e=[],F=i.length;for(var Y=0;Y\u003CF;Y++)e.push(i[Y])}else{if(\"justify\"!==A)throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');e=[],F=i.length,c=0!==c?c:K;for(var Z=0;Z\u003CF;Z++)q=0===Z?mr(r):-D,G=0===Z?pr(t):0,Z\u003CF-1&&V.push(N(k((c-M[Z])\u002F(i[Z].split(\" \").length-1)))),e.push([i[Z],G,q])}}var $=\"boolean\"==typeof n.R2L?n.R2L:me;!0===$&&(e=B(e,(function(e,t,r){return[e.split(\"\").reverse().join(\"\"),t,r]}))),s={text:e,x:t,y:r,options:n,mutex:{pdfEscape:Qt,activeFontKey:je,fonts:Ne,activeFontSize:fe}},Oe.publish(\"postProcessText\",s),e=s.text,m=s.mutex.isHex||!1;var ee=Ne[je].encoding;\"WinAnsiEncoding\"!==ee&&\"StandardEncoding\"!==ee||(e=B(e,(function(e,t,r){return[w(e),t,r]}))),i=b(e),e=[];for(var te,re,ne,oe=0,se=1,ie=Array.isArray(i[0])?se:oe,ae=\"\",Ae=function(e,t,r){var o=\"\";return r instanceof Ke?(r=\"number\"==typeof n.angle?ze(r,new Ke(1,0,0,1,e,t)):ze(new Ke(1,0,0,1,e,t),r),_===j.ADVANCED&&(r=ze(new Ke(1,0,0,-1,0,0),r)),o=r.join(\" \")+\" Tm\\n\"):o=N(e)+\" \"+N(t)+\" Td\\n\",o},ce=0;ce\u003Ci.length;ce++){switch(ae=\"\",ie){case se:ne=(m?\"\u003C\":\"(\")+i[ce][0]+(m?\">\":\")\"),te=parseFloat(i[ce][1]),re=parseFloat(i[ce][2]);break;case oe:ne=(m?\"\u003C\":\"(\")+i[ce]+(m?\">\":\")\"),te=pr(t),re=mr(r)}void 0!==V&&void 0!==V[ce]&&(ae=V[ce]+\" Tw\\n\"),0===ce?e.push(ae+Ae(te,re,d)+ne):ie===oe?e.push(ae+ne):ie===se&&e.push(ae+Ae(te,re,d)+ne)}e=ie===oe?e.join(\" Tj\\nT* \"):e.join(\" Tj\\n\"),e+=\" Tj\\n\";var le=\"BT\\n\u002F\";return le+=je+\" \"+fe+\" Tf\\n\",le+=N(fe*y)+\" TL\\n\",le+=br+\"\\n\",le+=p,le+=e,ue(le+=\"ET\"),g[je]=!0,f};var Jt=y.__private__.clip=y.clip=function(e){return ue(\"evenodd\"===e?\"W*\":\"W\"),this};y.clipEvenOdd=function(){return Jt(\"evenodd\")},y.__private__.discardPath=y.discardPath=function(){return ue(\"n\"),this};var Yt=y.__private__.isValidStyle=function(e){var t=!1;return-1!==[void 0,null,\"S\",\"D\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\",\"n\"].indexOf(e)&&(t=!0),t};y.__private__.setDefaultPathOperation=y.setDefaultPathOperation=function(e){return Yt(e)&&(h=e),this};var Zt=y.__private__.getStyle=y.getStyle=function(e){var t=h;switch(e){case\"D\":case\"S\":t=\"S\";break;case\"F\":t=\"f\";break;case\"FD\":case\"DF\":t=\"B\";break;case\"f\":case\"f*\":case\"B\":case\"B*\":t=e}return t},$t=y.close=function(){return ue(\"h\"),this};y.stroke=function(){return ue(\"S\"),this},y.fill=function(e){return er(\"f\",e),this},y.fillEvenOdd=function(e){return er(\"f*\",e),this},y.fillStroke=function(e){return er(\"B\",e),this},y.fillStrokeEvenOdd=function(e){return er(\"B*\",e),this};var er=function(e,t){\"object\"==typeof t?nr(t,e):ue(e)},tr=function(e){null===e||_===j.ADVANCED&&void 0===e||(e=Zt(e),ue(e))};function rr(e,t,r,n,o){var s=new T(t||this.boundingBox,r||this.xStep,n||this.yStep,this.gState,o||this.matrix);s.stream=this.stream;var i=e+\"$$\"+this.cloneIndex+++\"$$\";return qe(i,s),s}var nr=function(e,t){var r=Se[e.key],n=Ue[r];if(n instanceof L)ue(\"q\"),ue(or(t)),n.gState&&y.setGState(n.gState),ue(e.matrix.toString()+\" cm\"),ue(\"\u002F\"+r+\" sh\"),ue(\"Q\");else if(n instanceof T){var o=new Ke(1,0,0,-1,0,Ir());e.matrix&&(o=o.multiply(e.matrix||Ve),r=rr.call(n,e.key,e.boundingBox,e.xStep,e.yStep,o).id),ue(\"q\"),ue(\"\u002FPattern cs\"),ue(\"\u002F\"+r+\" scn\"),n.gState&&y.setGState(n.gState),ue(t),ue(\"Q\")}},or=function(e){switch(e){case\"f\":case\"F\":return\"W n\";case\"f*\":return\"W* n\";case\"B\":return\"W S\";case\"B*\":return\"W* S\";case\"S\":return\"W S\";case\"n\":return\"W n\"}},sr=y.moveTo=function(e,t){return ue(N(k(e))+\" \"+N(M(t))+\" m\"),this},ir=y.lineTo=function(e,t){return ue(N(k(e))+\" \"+N(M(t))+\" l\"),this},ar=y.curveTo=function(e,t,r,n,o,s){return ue([N(k(e)),N(M(t)),N(k(r)),N(M(n)),N(k(o)),N(M(s)),\"c\"].join(\" \")),this};y.__private__.line=y.line=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.line\");return _===j.COMPAT?this.lines([[r-e,n-t]],e,t,[1,1],o||\"S\"):this.lines([[r-e,n-t]],e,t,[1,1]).stroke()},y.__private__.lines=y.lines=function(e,t,r,n,o,s){var i,a,A,u,c,l,d,f,h,p,m,g;if(\"number\"==typeof e&&(g=r,r=t,t=e,e=g),n=n||[1,1],s=s||!1,isNaN(t)||isNaN(r)||!Array.isArray(e)||!Array.isArray(n)||!Yt(o)||\"boolean\"!=typeof s)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(sr(t,r),i=n[0],a=n[1],u=e.length,p=t,m=r,A=0;A\u003Cu;A++)2===(c=e[A]).length?(p=c[0]*i+p,m=c[1]*a+m,ir(p,m)):(l=c[0]*i+p,d=c[1]*a+m,f=c[2]*i+p,h=c[3]*a+m,p=c[4]*i+p,m=c[5]*a+m,ar(l,d,f,h,p,m));return s&&$t(),tr(o),this},y.path=function(e){for(var t=0;t\u003Ce.length;t++){var r=e[t],n=r.c;switch(r.op){case\"m\":sr(n[0],n[1]);break;case\"l\":ir(n[0],n[1]);break;case\"c\":ar.apply(this,n);break;case\"h\":$t()}}return this},y.__private__.rect=y.rect=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.rect\");return _===j.COMPAT&&(n=-n),ue([N(k(e)),N(M(t)),N(k(r)),N(k(n)),\"re\"].join(\" \")),tr(o),this},y.__private__.triangle=y.triangle=function(e,t,r,n,o,s,i){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s)||!Yt(i))throw new Error(\"Invalid arguments passed to jsPDF.triangle\");return this.lines([[r-e,n-t],[o-r,s-n],[e-o,t-s]],e,t,[1,1],i,!0),this},y.__private__.roundedRect=y.roundedRect=function(e,t,r,n,o,s,i){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s)||!Yt(i))throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");var a=4\u002F3*(Math.SQRT2-1);return o=Math.min(o,.5*r),s=Math.min(s,.5*n),this.lines([[r-2*o,0],[o*a,0,o,s-s*a,o,s],[0,n-2*s],[0,s*a,-o*a,s,-o,s],[2*o-r,0],[-o*a,0,-o,-s*a,-o,-s],[0,2*s-n],[0,-s*a,o*a,-s,o,-s]],e+o,t,[1,1],i,!0),this},y.__private__.ellipse=y.ellipse=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");var s=4\u002F3*(Math.SQRT2-1)*r,i=4\u002F3*(Math.SQRT2-1)*n;return sr(e+r,t),ar(e+r,t-i,e+s,t-n,e,t-n),ar(e-s,t-n,e-r,t-i,e-r,t),ar(e-r,t+i,e-s,t+n,e,t+n),ar(e+s,t+n,e+r,t+i,e+r,t),tr(o),this},y.__private__.circle=y.circle=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||!Yt(n))throw new Error(\"Invalid arguments passed to jsPDF.circle\");return this.ellipse(e,t,r,r,n)},y.setFont=function(e,t,r){return r&&(t=E(t,r)),je=Ht(e,t,{disableWarning:!1}),this};var Ar=y.__private__.getFont=y.getFont=function(){return Ne[Ht.apply(y,arguments)]};y.__private__.getFontList=y.getFontList=function(){var e,t,r={};for(e in Qe)if(Qe.hasOwnProperty(e))for(t in r[e]=[],Qe[e])Qe[e].hasOwnProperty(t)&&r[e].push(t);return r},y.addFont=function(e,t,r,n,o){var s=[\"StandardEncoding\",\"MacRomanEncoding\",\"Identity-H\",\"WinAnsiEncoding\"];return arguments[3]&&-1!==s.indexOf(arguments[3])?o=arguments[3]:arguments[3]&&-1==s.indexOf(arguments[3])&&(r=E(r,n)),o=o||\"Identity-H\",Ct.call(this,e,t,r,o)};var ur,cr=e.lineWidth||.200025,lr=y.__private__.setLineWidth=y.setLineWidth=function(e){return ue(N(k(e))+\" w\"),this};y.__private__.setLineDash=H.API.setLineDash=H.API.setLineDashPattern=function(e,t){if(e=e||[],t=t||0,isNaN(t)||!Array.isArray(e))throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");return e=e.map((function(e){return N(k(e))})).join(\" \"),t=N(k(t)),ue(\"[\"+e+\"] \"+t+\" d\"),this};var dr=y.__private__.getLineHeight=y.getLineHeight=function(){return fe*ur};y.__private__.getLineHeight=y.getLineHeight=function(){return fe*ur};var fr=y.__private__.setLineHeightFactor=y.setLineHeightFactor=function(e){return\"number\"==typeof(e=e||1.15)&&(ur=e),this},hr=y.__private__.getLineHeightFactor=y.getLineHeightFactor=function(){return ur};fr(e.lineHeight);var pr=y.__private__.getHorizontalCoordinate=function(e){return k(e)},mr=y.__private__.getVerticalCoordinate=function(e){return _===j.ADVANCED?e:Pe[J].mediaBox.topRightY-Pe[J].mediaBox.bottomLeftY-k(e)},gr=y.__private__.getHorizontalCoordinateString=y.getHorizontalCoordinateString=function(e){return N(pr(e))},yr=y.__private__.getVerticalCoordinateString=y.getVerticalCoordinateString=function(e){return N(mr(e))},vr=e.strokeColor||\"0 G\";y.__private__.getStrokeColor=y.getDrawColor=function(){return $e(vr)},y.__private__.setStrokeColor=y.setDrawColor=function(e,t,r,n){return vr=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"draw\",precision:2}),ue(vr),this};var wr=e.fillColor||\"0 g\";y.__private__.getFillColor=y.getFillColor=function(){return $e(wr)},y.__private__.setFillColor=y.setFillColor=function(e,t,r,n){return wr=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"fill\",precision:2}),ue(wr),this};var br=e.textColor||\"0 g\",Br=y.__private__.getTextColor=y.getTextColor=function(){return $e(br)};y.__private__.setTextColor=y.setTextColor=function(e,t,r,n){return br=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"text\",precision:3}),this};var jr=e.charSpace,_r=y.__private__.getCharSpace=y.getCharSpace=function(){return parseFloat(jr||0)};y.__private__.setCharSpace=y.setCharSpace=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");return jr=e,this};var Cr=0;y.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},y.__private__.setLineCap=y.setLineCap=function(e){var t=y.CapJoinStyles[e];if(void 0===t)throw new Error(\"Line cap style of '\"+e+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return Cr=t,ue(t+\" J\"),this};var xr=0;y.__private__.setLineJoin=y.setLineJoin=function(e){var t=y.CapJoinStyles[e];if(void 0===t)throw new Error(\"Line join style of '\"+e+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return xr=t,ue(t+\" j\"),this},y.__private__.setLineMiterLimit=y.__private__.setMiterLimit=y.setLineMiterLimit=y.setMiterLimit=function(e){if(e=e||0,isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");return ue(N(k(e))+\" M\"),this},y.GState=U,y.setGState=function(e){(e=\"string\"==typeof e?Le[Te[e]]:Er(null,e)).equals(He)||(ue(\"\u002F\"+e.id+\" gs\"),He=e)};var Er=function(e,t){if(!e||!Te[e]){var r=!1;for(var n in Le)if(Le.hasOwnProperty(n)&&Le[n].equals(t)){r=!0;break}if(r)t=Le[n];else{var o=\"GS\"+(Object.keys(Le).length+1).toString(10);Le[o]=t,t.id=o}return e&&(Te[e]=t.id),Oe.publish(\"addGState\",t),t}};y.addGState=function(e,t){return Er(e,t),this},y.saveGraphicsState=function(){return ue(\"q\"),Fe.push({key:je,size:fe,color:br}),this},y.restoreGraphicsState=function(){ue(\"Q\");var e=Fe.pop();return je=e.key,fe=e.size,br=e.color,He=null,this},y.setCurrentTransformationMatrix=function(e){return ue(e.toString()+\" cm\"),this},y.comment=function(e){return ue(\"#\"+e),this};var Nr=function(e,t){var r=e||0;Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return r},set:function(e){isNaN(e)||(r=parseFloat(e))}});var n=t||0;Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return n},set:function(e){isNaN(e)||(n=parseFloat(e))}});var o=\"pt\";return Object.defineProperty(this,\"type\",{enumerable:!0,get:function(){return o},set:function(e){o=e.toString()}}),this},Qr=function(e,t,r,n){Nr.call(this,e,t),this.type=\"rect\";var o=r||0;Object.defineProperty(this,\"w\",{enumerable:!0,get:function(){return o},set:function(e){isNaN(e)||(o=parseFloat(e))}});var s=n||0;return Object.defineProperty(this,\"h\",{enumerable:!0,get:function(){return s},set:function(e){isNaN(e)||(s=parseFloat(e))}}),this},Fr=function(){this.page=Ie,this.currentPage=J,this.pages=oe.slice(0),this.pagesContext=Pe.slice(0),this.x=Ce,this.y=xe,this.matrix=Ee,this.width=Tr(J),this.height=Ir(J),this.outputDestination=ie,this.id=\"\",this.objectNumber=-1};Fr.prototype.restore=function(){Ie=this.page,J=this.currentPage,Pe=this.pagesContext,oe=this.pages,Ce=this.x,xe=this.y,Ee=this.matrix,Hr(J,this.width),Pr(J,this.height),ie=this.outputDestination};var Ur=function(e,t,r,n,o){De.push(new Fr),Ie=J=0,oe=[],Ce=e,xe=t,Ee=o,Ft([r,n])},Sr=function(e){if(!Me[e]){var t=new Fr,r=\"Xo\"+(Object.keys(Re).length+1).toString(10);t.id=r,Me[e]=r,Re[r]=t,Oe.publish(\"addFormObject\",t),De.pop().restore()}};for(var Lr in y.beginFormObject=function(e,t,r,n,o){return Ur(e,t,r,n,o),this},y.endFormObject=function(e){return Sr(e),this},y.doFormObject=function(e,t){var r=Re[Me[e]];return ue(\"q\"),ue(t.toString()+\" cm\"),ue(\"\u002F\"+r.id+\" Do\"),ue(\"Q\"),this},y.getFormObject=function(e){var t=Re[Me[e]];return{x:t.x,y:t.y,width:t.width,height:t.height,matrix:t.matrix}},y.save=function(e,t){return e=e||\"generated.pdf\",(t=t||{}).returnPromise=t.returnPromise||!1,!1===t.returnPromise?(d(Dt(Mt()),e),\"function\"==typeof d.unload&&o.setTimeout&&setTimeout(d.unload,911),this):new Promise((function(t,r){try{var n=d(Dt(Mt()),e);\"function\"==typeof d.unload&&o.setTimeout&&setTimeout(d.unload,911),t(n)}catch(e){r(e.message)}}))},H.API)H.API.hasOwnProperty(Lr)&&(\"events\"===Lr&&H.API.events.length?function(e,t){var r,n,o;for(o=t.length-1;-1!==o;o--)r=t[o][0],n=t[o][1],e.subscribe.apply(e,[r].concat(\"function\"==typeof n?[n]:n))}(Oe,H.API.events):y[Lr]=H.API[Lr]);var Tr=y.getPageWidth=function(e){return(Pe[e=e||J].mediaBox.topRightX-Pe[e].mediaBox.bottomLeftX)\u002F_e},Hr=y.setPageWidth=function(e,t){Pe[e].mediaBox.topRightX=t*_e+Pe[e].mediaBox.bottomLeftX},Ir=y.getPageHeight=function(e){return(Pe[e=e||J].mediaBox.topRightY-Pe[e].mediaBox.bottomLeftY)\u002F_e},Pr=y.setPageHeight=function(e,t){Pe[e].mediaBox.topRightY=t*_e+Pe[e].mediaBox.bottomLeftY};return y.internal={pdfEscape:Qt,getStyle:Zt,getFont:Ar,getFontSize:pe,getCharSpace:_r,getTextColor:Br,getLineHeight:dr,getLineHeightFactor:hr,write:ce,getHorizontalCoordinate:pr,getVerticalCoordinate:mr,getCoordinateString:gr,getVerticalCoordinateString:yr,collections:{},newObject:Ge,newAdditionalObject:Je,newObjectDeferred:Xe,newObjectDeferredBegin:We,getFilters:tt,putStream:rt,events:Oe,scaleFactor:_e,pageSize:{getWidth:function(){return Tr(J)},setWidth:function(e){Hr(J,e)},getHeight:function(){return Ir(J)},setHeight:function(e){Pr(J,e)}},encryptionOptions:p,encryption:Vt,getEncryptor:qt,output:Kt,getNumberOfPages:Tt,pages:oe,out:ue,f2:P,f3:O,getPageInfo:Gt,getPageInfoByObjId:Xt,getCurrentPageInfo:Wt,getPDFVersion:w,Point:Nr,Rectangle:Qr,Matrix:Ke,hasHotfix:zt},Object.defineProperty(y.internal.pageSize,\"width\",{get:function(){return Tr(J)},set:function(e){Hr(J,e)},enumerable:!0,configurable:!0}),Object.defineProperty(y.internal.pageSize,\"height\",{get:function(){return Ir(J)},set:function(e){Pr(J,e)},enumerable:!0,configurable:!0}),xt.call(y,de),je=\"F1\",Ut(s,r),Oe.publish(\"initialized\"),y}Q.prototype.lsbFirstWord=function(e){return String.fromCharCode(e>>0&255,e>>8&255,e>>16&255,e>>24&255)},Q.prototype.toHexString=function(e){return e.split(\"\").map((function(e){return(\"0\"+(255&e.charCodeAt(0)).toString(16)).slice(-2)})).join(\"\")},Q.prototype.hexToBytes=function(e){for(var t=[],r=0;r\u003Ce.length;r+=2)t.push(String.fromCharCode(parseInt(e.substr(r,2),16)));return t.join(\"\")},Q.prototype.processOwnerPassword=function(e,t){return E(C(t).substr(0,5),e)},Q.prototype.encryptor=function(e,t){let r=C(this.encryptionKey+String.fromCharCode(255&e,e>>8&255,e>>16&255,255&t,t>>8&255)).substr(0,10);return function(e){return E(r,e)}},U.prototype.equals=function(e){var t,r=\"id,objectNumber,equals\";if(!e||typeof e!=typeof this)return!1;var n=0;for(t in this)if(!(r.indexOf(t)>=0)){if(this.hasOwnProperty(t)&&!e.hasOwnProperty(t))return!1;if(this[t]!==e[t])return!1;n++}for(t in e)e.hasOwnProperty(t)&&r.indexOf(t)\u003C0&&n--;return 0===n},H.API={events:[]},H.version=\"2.3.1\";var I=H.API,P=1,O=function(e){return e.replace(\u002F\\\\\u002Fg,\"\\\\\\\\\").replace(\u002F\\(\u002Fg,\"\\\\(\").replace(\u002F\\)\u002Fg,\"\\\\)\")},k=function(e){return e.replace(\u002F\\\\\\\\\u002Fg,\"\\\\\").replace(\u002F\\\\\\(\u002Fg,\"(\").replace(\u002F\\\\\\)\u002Fg,\")\")},R=function(e){return e.toFixed(2)},M=function(e){return e.toFixed(5)};I.__acroform__={};var D=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e},K=function(e){return e*P},z=function(e){var t=new ie,r=we.internal.getHeight(e)||0,n=we.internal.getWidth(e)||0;return t.BBox=[0,0,Number(R(n)),Number(R(r))],t},V=I.__acroform__.setBit=function(e,t){if(e=e||0,t=t||0,isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBit\");return e|1\u003C\u003Ct},q=I.__acroform__.clearBit=function(e,t){if(e=e||0,t=t||0,isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\");return e&~(1\u003C\u003Ct)},G=I.__acroform__.getBit=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBit\");return 0==(e&1\u003C\u003Ct)?0:1},X=I.__acroform__.getBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\");return G(e,t-1)},W=I.__acroform__.setBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\");return V(e,t-1)},J=I.__acroform__.clearBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\");return q(e,t-1)},Y=I.__acroform__.calculateCoordinates=function(e,t){var r=t.internal.getHorizontalCoordinate,n=t.internal.getVerticalCoordinate,o=e[0],s=e[1],i=e[2],a=e[3],A={};return A.lowerLeft_X=r(o)||0,A.lowerLeft_Y=n(s+a)||0,A.upperRight_X=r(o+i)||0,A.upperRight_Y=n(s)||0,[Number(R(A.lowerLeft_X)),Number(R(A.lowerLeft_Y)),Number(R(A.upperRight_X)),Number(R(A.upperRight_Y))]},Z=function(e){if(e.appearanceStreamContent)return e.appearanceStreamContent;if(e.V||e.DV){var t=[],r=e._V||e.DV,n=$(e,r),o=e.scope.internal.getFont(e.fontName,e.fontStyle).id;t.push(\"\u002FTx BMC\"),t.push(\"q\"),t.push(\"BT\"),t.push(e.scope.__private__.encodeColorString(e.color)),t.push(\"\u002F\"+o+\" \"+R(n.fontSize)+\" Tf\"),t.push(\"1 0 0 1 0 0 Tm\"),t.push(n.text),t.push(\"ET\"),t.push(\"Q\"),t.push(\"EMC\");var s=z(e);return s.scope=e.scope,s.stream=t.join(\"\\n\"),s}},$=function(e,t){var r=0===e.fontSize?e.maxFontSize:e.fontSize,n={text:\"\",fontSize:\"\"},o=(t=\")\"==(t=\"(\"==t.substr(0,1)?t.substr(1):t).substr(t.length-1)?t.substr(0,t.length-1):t).split(\" \"),s=r,i=we.internal.getHeight(e)||0;i=i\u003C0?-i:i;var a=we.internal.getWidth(e)||0;a=a\u003C0?-a:a;var A=function(t,r,n){if(t+1\u003Co.length){var s=r+\" \"+o[t+1];return ee(s,e,n).width\u003C=a-4}return!1};s++;e:for(;s>0;){t=\"\",s--;var u,c,l=ee(\"3\",e,s).height,d=e.multiline?i-s:(i-l)\u002F2,f=d+=2,h=0,p=0;if(s\u003C=0){t=\"(...) Tj\\n\",t+=\"% Width of Text: \"+ee(t,e,s=12).width+\", FieldWidth:\"+a+\"\\n\";break}var m=\"\",g=0;for(var y in o)if(o.hasOwnProperty(y)){m=\" \"==(m+=o[y]+\" \").substr(m.length-1)?m.substr(0,m.length-1):m;var v=parseInt(y),w=A(v,m,s),b=y>=o.length-1;if(w&&!b){m+=\" \";continue}if(w||b){if(b)p=v;else if(e.multiline&&(l+2)*(g+2)+2>i)continue e}else{if(!e.multiline)continue e;if((l+2)*(g+2)+2>i)continue e;p=v}for(var B=\"\",j=h;j\u003C=p;j++)B+=o[j]+\" \";switch(B=\" \"==B.substr(B.length-1)?B.substr(0,B.length-1):B,c=ee(B,e,s).width,e.textAlign){case\"right\":u=a-c-2;break;case\"center\":u=(a-c)\u002F2;break;case\"left\":default:u=2}t+=R(u)+\" \"+R(f)+\" Td\\n\",t+=\"(\"+O(B)+\") Tj\\n\",t+=-R(u)+\" 0 Td\\n\",f=-(s+2),c=0,h=p+1,g++,m=\"\"}break}return n.text=t,n.fontSize=s,n},ee=function(e,t,r){var n=t.scope.internal.getFont(t.fontName,t.fontStyle),o=t.scope.getStringUnitWidth(e,{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r);return{height:t.scope.getStringUnitWidth(\"3\",{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r)*1.5,width:o}},te={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},re=function(e,t){var r={type:\"reference\",object:e};void 0===t.internal.getPageInfo(e.page).pageContext.annotations.find((function(e){return e.type===r.type&&e.object===r.object}))&&t.internal.getPageInfo(e.page).pageContext.annotations.push(r)},ne=I.__acroform__.arrayToPdfArray=function(e,t,r){var n=function(e){return e};if(Array.isArray(e)){for(var o=\"[\",s=0;s\u003Ce.length;s++)switch(0!==s&&(o+=\" \"),typeof e[s]){case\"boolean\":case\"number\":case\"object\":o+=e[s].toString();break;case\"string\":\"\u002F\"!==e[s].substr(0,1)?(void 0!==t&&r&&(n=r.internal.getEncryptor(t)),o+=\"(\"+O(n(e[s].toString()))+\")\"):o+=e[s].toString()}return o+\"]\"}throw new Error(\"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\")},oe=function(e,t,r){var n=function(e){return e};return void 0!==t&&r&&(n=r.internal.getEncryptor(t)),(e=e||\"\").toString(),\"(\"+O(n(e))+\")\"},se=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,\"objId\",{get:function(){if(void 0===this._objId){if(void 0===this.scope)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(e){this._objId=e}}),Object.defineProperty(this,\"scope\",{value:this._scope,writable:!0})};se.prototype.toString=function(){return this.objId+\" 0 R\"},se.prototype.putStream=function(){var e=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:e,objectId:this.objId}),this.scope.internal.out(\"endobj\")},se.prototype.getKeyValueListForStream=function(){var e=[],t=Object.getOwnPropertyNames(this).filter((function(e){return\"content\"!=e&&\"appearanceStreamContent\"!=e&&\"scope\"!=e&&\"objId\"!=e&&\"_\"!=e.substring(0,1)}));for(var r in t)if(!1===Object.getOwnPropertyDescriptor(this,t[r]).configurable){var n=t[r],o=this[n];o&&(Array.isArray(o)?e.push({key:n,value:ne(o,this.objId,this.scope)}):o instanceof se?(o.scope=this.scope,e.push({key:n,value:o.objId+\" 0 R\"})):\"function\"!=typeof o&&e.push({key:n,value:o}))}return e};var ie=function(){se.call(this),Object.defineProperty(this,\"Type\",{value:\"\u002FXObject\",configurable:!1,writable:!0}),Object.defineProperty(this,\"Subtype\",{value:\"\u002FForm\",configurable:!1,writable:!0}),Object.defineProperty(this,\"FormType\",{value:1,configurable:!1,writable:!0});var e,t=[];Object.defineProperty(this,\"BBox\",{configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"Resources\",{value:\"2 0 R\",configurable:!1,writable:!0}),Object.defineProperty(this,\"stream\",{enumerable:!1,configurable:!0,set:function(t){e=t.trim()},get:function(){return e||null}})};D(ie,se);var ae=function(){se.call(this);var e,t=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return t.length>0?t:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!1,configurable:!1,get:function(){return t}}),Object.defineProperty(this,\"DA\",{enumerable:!1,configurable:!1,get:function(){if(e){var t=function(e){return e};return this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),\"(\"+O(t(e))+\")\"}},set:function(t){e=t}})};D(ae,se);var Ae=function(){se.call(this);var e=4;Object.defineProperty(this,\"F\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){if(isNaN(t))throw new Error('Invalid value \"'+t+'\" for attribute F supplied.');e=t}}),Object.defineProperty(this,\"showWhenPrinted\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(e,3))},set:function(t){!0===Boolean(t)?this.F=W(e,3):this.F=J(e,3)}});var t=0;Object.defineProperty(this,\"Ff\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){if(isNaN(e))throw new Error('Invalid value \"'+e+'\" for attribute Ff supplied.');t=e}});var r=[];Object.defineProperty(this,\"Rect\",{enumerable:!1,configurable:!1,get:function(){if(0!==r.length)return r},set:function(e){r=void 0!==e?e:[]}}),Object.defineProperty(this,\"x\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[0])?0:r[0]},set:function(e){r[0]=e}}),Object.defineProperty(this,\"y\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[1])?0:r[1]},set:function(e){r[1]=e}}),Object.defineProperty(this,\"width\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[2])?0:r[2]},set:function(e){r[2]=e}}),Object.defineProperty(this,\"height\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[3])?0:r[3]},set:function(e){r[3]=e}});var n=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(e){switch(e){case\"\u002FBtn\":case\"\u002FTx\":case\"\u002FCh\":case\"\u002FSig\":n=e;break;default:throw new Error('Invalid value \"'+e+'\" for attribute FT supplied.')}}});var o=null;Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,get:function(){if(!o||o.length\u003C1){if(this instanceof me)return;o=\"FieldObject\"+Ae.FieldNum++}var e=function(e){return e};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+O(e(o))+\")\"},set:function(e){o=e.toString()}}),Object.defineProperty(this,\"fieldName\",{configurable:!0,enumerable:!0,get:function(){return o},set:function(e){o=e}});var s=\"helvetica\";Object.defineProperty(this,\"fontName\",{enumerable:!0,configurable:!0,get:function(){return s},set:function(e){s=e}});var i=\"normal\";Object.defineProperty(this,\"fontStyle\",{enumerable:!0,configurable:!0,get:function(){return i},set:function(e){i=e}});var a=0;Object.defineProperty(this,\"fontSize\",{enumerable:!0,configurable:!0,get:function(){return a},set:function(e){a=e}});var A=void 0;Object.defineProperty(this,\"maxFontSize\",{enumerable:!0,configurable:!0,get:function(){return void 0===A?50\u002FP:A},set:function(e){A=e}});var u=\"black\";Object.defineProperty(this,\"color\",{enumerable:!0,configurable:!0,get:function(){return u},set:function(e){u=e}});var c=\"\u002FF1 0 Tf 0 g\";Object.defineProperty(this,\"DA\",{enumerable:!0,configurable:!1,get:function(){if(!(!c||this instanceof me||this instanceof ye))return oe(c,this.objId,this.scope)},set:function(e){e=e.toString(),c=e}});var l=null;Object.defineProperty(this,\"DV\",{enumerable:!1,configurable:!1,get:function(){if(l)return this instanceof fe==0?oe(l,this.objId,this.scope):l},set:function(e){e=e.toString(),l=this instanceof fe==0?\"(\"===e.substr(0,1)?k(e.substr(1,e.length-2)):k(e):e}}),Object.defineProperty(this,\"defaultValue\",{enumerable:!0,configurable:!0,get:function(){return this instanceof fe==1?k(l.substr(1,l.length-1)):l},set:function(e){e=e.toString(),l=this instanceof fe==1?\"\u002F\"+e:e}});var d=null;Object.defineProperty(this,\"_V\",{enumerable:!1,configurable:!1,get:function(){if(d)return d},set:function(e){this.V=e}}),Object.defineProperty(this,\"V\",{enumerable:!1,configurable:!1,get:function(){if(d)return this instanceof fe==0?oe(d,this.objId,this.scope):d},set:function(e){e=e.toString(),d=this instanceof fe==0?\"(\"===e.substr(0,1)?k(e.substr(1,e.length-2)):k(e):e}}),Object.defineProperty(this,\"value\",{enumerable:!0,configurable:!0,get:function(){return this instanceof fe==1?k(d.substr(1,d.length-1)):d},set:function(e){e=e.toString(),d=this instanceof fe==1?\"\u002F\"+e:e}}),Object.defineProperty(this,\"hasAnnotation\",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,\"Type\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"\u002FAnnot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"\u002FWidget\":null}});var f,h=!1;Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return h},set:function(e){e=Boolean(e),h=e}}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,get:function(){if(f)return f},set:function(e){f=e}}),Object.defineProperty(this,\"readOnly\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,1))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,1):this.Ff=J(this.Ff,1)}}),Object.defineProperty(this,\"required\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,2))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,2):this.Ff=J(this.Ff,2)}}),Object.defineProperty(this,\"noExport\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,3))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,3):this.Ff=J(this.Ff,3)}});var p=null;Object.defineProperty(this,\"Q\",{enumerable:!0,configurable:!1,get:function(){if(null!==p)return p},set:function(e){if(-1===[0,1,2].indexOf(e))throw new Error('Invalid value \"'+e+'\" for attribute Q supplied.');p=e}}),Object.defineProperty(this,\"textAlign\",{get:function(){var e;switch(p){case 0:default:e=\"left\";break;case 1:e=\"center\";break;case 2:e=\"right\"}return e},configurable:!0,enumerable:!0,set:function(e){switch(e){case\"right\":case 2:p=2;break;case\"center\":case 1:p=1;break;case\"left\":case 0:default:p=0}}})};D(Ae,se);var ue=function(){Ae.call(this),this.FT=\"\u002FCh\",this.V=\"()\",this.fontName=\"zapfdingbats\";var e=0;Object.defineProperty(this,\"TI\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"topIndex\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){e=t}});var t=[];Object.defineProperty(this,\"Opt\",{enumerable:!0,configurable:!1,get:function(){return ne(t,this.objId,this.scope)},set:function(e){var r,n;n=[],\"string\"==typeof(r=e)&&(n=function(e,t,r){r||(r=1);for(var n,o=[];n=t.exec(e);)o.push(n[r]);return o}(r,\u002F\\((.*?)\\)\u002Fg)),t=n}}),this.getOptions=function(){return t},this.setOptions=function(e){t=e,this.sort&&t.sort()},this.addOption=function(e){e=(e=e||\"\").toString(),t.push(e),this.sort&&t.sort()},this.removeOption=function(e,r){for(r=r||!1,e=(e=e||\"\").toString();-1!==t.indexOf(e)&&(t.splice(t.indexOf(e),1),!1!==r););},Object.defineProperty(this,\"combo\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,18))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,18):this.Ff=J(this.Ff,18)}}),Object.defineProperty(this,\"edit\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,19))},set:function(e){!0===this.combo&&(!0===Boolean(e)?this.Ff=W(this.Ff,19):this.Ff=J(this.Ff,19))}}),Object.defineProperty(this,\"sort\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,20))},set:function(e){!0===Boolean(e)?(this.Ff=W(this.Ff,20),t.sort()):this.Ff=J(this.Ff,20)}}),Object.defineProperty(this,\"multiSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,22))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,22):this.Ff=J(this.Ff,22)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,23))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"commitOnSelChange\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,27))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,27):this.Ff=J(this.Ff,27)}}),this.hasAppearanceStream=!1};D(ue,Ae);var ce=function(){ue.call(this),this.fontName=\"helvetica\",this.combo=!1};D(ce,ue);var le=function(){ce.call(this),this.combo=!0};D(le,ce);var de=function(){le.call(this),this.edit=!0};D(de,le);var fe=function(){Ae.call(this),this.FT=\"\u002FBtn\",Object.defineProperty(this,\"noToggleToOff\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,15))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,15):this.Ff=J(this.Ff,15)}}),Object.defineProperty(this,\"radio\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,16))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,16):this.Ff=J(this.Ff,16)}}),Object.defineProperty(this,\"pushButton\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,17))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,17):this.Ff=J(this.Ff,17)}}),Object.defineProperty(this,\"radioIsUnison\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,26))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,26):this.Ff=J(this.Ff,26)}});var e,t={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};if(this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),0!==Object.keys(t).length){var r,n=[];for(r in n.push(\"\u003C\u003C\"),t)n.push(\"\u002F\"+r+\" (\"+O(e(t[r]))+\")\");return n.push(\">>\"),n.join(\"\\n\")}},set:function(e){\"object\"==typeof e&&(t=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return t.CA||\"\"},set:function(e){\"string\"==typeof e&&(t.CA=e)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=\"\u002F\"+t}})};D(fe,Ae);var he=function(){fe.call(this),this.pushButton=!0};D(he,fe);var pe=function(){fe.call(this),this.radio=!0,this.pushButton=!1;var e=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=void 0!==t?t:[]}})};D(pe,fe);var me=function(){var e,t;Ae.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return t},set:function(e){t=e}});var r,n={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};this.scope&&(e=this.scope.internal.getEncryptor(this.objId));var t,r=[];for(t in r.push(\"\u003C\u003C\"),n)r.push(\"\u002F\"+t+\" (\"+O(e(n[t]))+\")\");return r.push(\">>\"),r.join(\"\\n\")},set:function(e){\"object\"==typeof e&&(n=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return n.CA||\"\"},set:function(e){\"string\"==typeof e&&(n.CA=e)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(e){r=e}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return r.substr(1,r.length-1)},set:function(e){r=\"\u002F\"+e}}),this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=we.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};D(me,Ae),pe.prototype.setAppearance=function(e){if(!(\"createAppearanceStream\"in e)||!(\"getCA\"in e))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var t in this.Kids)if(this.Kids.hasOwnProperty(t)){var r=this.Kids[t];r.appearanceStreamContent=e.createAppearanceStream(r.optionName),r.caption=e.getCA()}},pe.prototype.createOption=function(e){var t=new me;return t.Parent=this,t.optionName=e,this.Kids.push(t),be.call(this.scope,t),t};var ge=function(){fe.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=we.CheckBox.createAppearanceStream()};D(ge,fe);var ye=function(){Ae.call(this),this.FT=\"\u002FTx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,13))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,13):this.Ff=J(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,21))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,21):this.Ff=J(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,23))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,24))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,24):this.Ff=J(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,25))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,25):this.Ff=J(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,26))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,26):this.Ff=J(this.Ff,26)}});var e=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){Number.isInteger(t)&&(e=t)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};D(ye,Ae);var ve=function(){ye.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,14))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,14):this.Ff=J(this.Ff,14)}}),this.password=!0};D(ve,ye);var we={CheckBox:{createAppearanceStream:function(){return{N:{On:we.CheckBox.YesNormal},D:{On:we.CheckBox.YesPushDown,Off:we.CheckBox.OffPushDown}}},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=e.scope.internal.getFont(e.fontName,e.fontStyle).id,o=e.scope.__private__.encodeColorString(e.color),s=$(e,e.caption);return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),r.push(\"BMC\"),r.push(\"q\"),r.push(\"0 0 1 rg\"),r.push(\"\u002F\"+n+\" \"+R(s.fontSize)+\" Tf \"+o),r.push(\"BT\"),r.push(s.text),r.push(\"ET\"),r.push(\"Q\"),r.push(\"EMC\"),t.stream=r.join(\"\\n\"),t},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=e.scope.internal.getFont(e.fontName,e.fontStyle).id,n=e.scope.__private__.encodeColorString(e.color),o=[],s=we.internal.getHeight(e),i=we.internal.getWidth(e),a=$(e,e.caption);return o.push(\"1 g\"),o.push(\"0 0 \"+R(i)+\" \"+R(s)+\" re\"),o.push(\"f\"),o.push(\"q\"),o.push(\"0 0 1 rg\"),o.push(\"0 0 \"+R(i-1)+\" \"+R(s-1)+\" re\"),o.push(\"W\"),o.push(\"n\"),o.push(\"0 g\"),o.push(\"BT\"),o.push(\"\u002F\"+r+\" \"+R(a.fontSize)+\" Tf \"+n),o.push(a.text),o.push(\"ET\"),o.push(\"Q\"),t.stream=o.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),t.stream=r.join(\"\\n\"),t}},RadioButton:{Circle:{createAppearanceStream:function(e){var t={D:{Off:we.RadioButton.Circle.OffPushDown},N:{}};return t.N[e]=we.RadioButton.Circle.YesNormal,t.D[e]=we.RadioButton.Circle.YesPushDown,t},getCA:function(){return\"l\"},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=we.internal.Bezier_C,s=Number((n*o).toFixed(5));return r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+s+\" \"+s+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+s+\" \"+n+\" -\"+n+\" \"+s+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+s+\" -\"+s+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(s+\" -\"+n+\" \"+n+\" -\"+s+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=Number((2*n).toFixed(5)),s=Number((o*we.internal.Bezier_C).toFixed(5)),i=Number((n*we.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(o+\" 0 m\"),r.push(o+\" \"+s+\" \"+s+\" \"+o+\" 0 \"+o+\" c\"),r.push(\"-\"+s+\" \"+o+\" -\"+o+\" \"+s+\" -\"+o+\" 0 c\"),r.push(\"-\"+o+\" -\"+s+\" -\"+s+\" -\"+o+\" 0 -\"+o+\" c\"),r.push(s+\" -\"+o+\" \"+o+\" -\"+s+\" \"+o+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),r.push(\"0 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+i+\" \"+i+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+i+\" \"+n+\" -\"+n+\" \"+i+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+i+\" -\"+i+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(i+\" -\"+n+\" \"+n+\" -\"+i+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=Number((2*n).toFixed(5)),s=Number((o*we.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(o+\" 0 m\"),r.push(o+\" \"+s+\" \"+s+\" \"+o+\" 0 \"+o+\" c\"),r.push(\"-\"+s+\" \"+o+\" -\"+o+\" \"+s+\" -\"+o+\" 0 c\"),r.push(\"-\"+o+\" -\"+s+\" -\"+s+\" -\"+o+\" 0 -\"+o+\" c\"),r.push(s+\" -\"+o+\" \"+o+\" -\"+s+\" \"+o+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t}},Cross:{createAppearanceStream:function(e){var t={D:{Off:we.RadioButton.Cross.OffPushDown},N:{}};return t.N[e]=we.RadioButton.Cross.YesNormal,t.D[e]=we.RadioButton.Cross.YesPushDown,t},getCA:function(){return\"8\"},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.calculateCross(e);return r.push(\"q\"),r.push(\"1 1 \"+R(we.internal.getWidth(e)-2)+\" \"+R(we.internal.getHeight(e)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(R(n.x1.x)+\" \"+R(n.x1.y)+\" m\"),r.push(R(n.x2.x)+\" \"+R(n.x2.y)+\" l\"),r.push(R(n.x4.x)+\" \"+R(n.x4.y)+\" m\"),r.push(R(n.x3.x)+\" \"+R(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=we.internal.calculateCross(e),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),n.push(\"f\"),n.push(\"q\"),n.push(\"1 1 \"+R(we.internal.getWidth(e)-2)+\" \"+R(we.internal.getHeight(e)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(R(r.x1.x)+\" \"+R(r.x1.y)+\" m\"),n.push(R(r.x2.x)+\" \"+R(r.x2.y)+\" l\"),n.push(R(r.x4.x)+\" \"+R(r.x4.y)+\" m\"),n.push(R(r.x3.x)+\" \"+R(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),t.stream=n.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),t.stream=r.join(\"\\n\"),t}}},createDefaultAppearanceStream:function(e){var t=e.scope.internal.getFont(e.fontName,e.fontStyle).id,r=e.scope.__private__.encodeColorString(e.color);return\"\u002F\"+t+\" \"+e.fontSize+\" Tf \"+r}};we.internal={Bezier_C:.551915024494,calculateCross:function(e){var t=we.internal.getWidth(e),r=we.internal.getHeight(e),n=Math.min(t,r);return{x1:{x:(t-n)\u002F2,y:(r-n)\u002F2+n},x2:{x:(t-n)\u002F2+n,y:(r-n)\u002F2},x3:{x:(t-n)\u002F2,y:(r-n)\u002F2},x4:{x:(t-n)\u002F2+n,y:(r-n)\u002F2+n}}}},we.internal.getWidth=function(e){var t=0;return\"object\"==typeof e&&(t=K(e.Rect[2])),t},we.internal.getHeight=function(e){var t=0;return\"object\"==typeof e&&(t=K(e.Rect[3])),t};var be=I.addField=function(e){if(function(e,t){if(t.scope=e,void 0!==e.internal&&(void 0===e.internal.acroformPlugin||!1===e.internal.acroformPlugin.isInitialized)){if(Ae.FieldNum=0,e.internal.acroformPlugin=JSON.parse(JSON.stringify(te)),e.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");P=e.internal.scaleFactor,e.internal.acroformPlugin.acroFormDictionaryRoot=new ae,e.internal.acroformPlugin.acroFormDictionaryRoot.scope=e,e.internal.acroformPlugin.acroFormDictionaryRoot._eventID=e.internal.events.subscribe(\"postPutResources\",(function(){!function(e){e.internal.events.unsubscribe(e.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete e.internal.acroformPlugin.acroFormDictionaryRoot._eventID,e.internal.acroformPlugin.printedOut=!0}(e)})),e.internal.events.subscribe(\"buildDocument\",(function(){!function(e){e.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var t=e.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var r in t)if(t.hasOwnProperty(r)){var n=t[r];n.objId=void 0,n.hasAnnotation&&re(n,e)}}(e)})),e.internal.events.subscribe(\"putCatalog\",(function(){!function(e){if(void 0===e.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");e.internal.write(\"\u002FAcroForm \"+e.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")}(e)})),e.internal.events.subscribe(\"postPutPages\",(function(t){!function(e,t){var r=!e;for(var n in e||(t.internal.newObjectDeferredBegin(t.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),t.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),e=e||t.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(e.hasOwnProperty(n)){var o=e[n],s=[],i=o.Rect;if(o.Rect&&(o.Rect=Y(o.Rect,t)),t.internal.newObjectDeferredBegin(o.objId,!0),o.DA=we.createDefaultAppearanceStream(o),\"object\"==typeof o&&\"function\"==typeof o.getKeyValueListForStream&&(s=o.getKeyValueListForStream()),o.Rect=i,o.hasAppearanceStream&&!o.appearanceStreamContent){var a=Z(o);s.push({key:\"AP\",value:\"\u003C\u003C\u002FN \"+a+\">>\"}),t.internal.acroformPlugin.xForms.push(a)}if(o.appearanceStreamContent){var A=\"\";for(var u in o.appearanceStreamContent)if(o.appearanceStreamContent.hasOwnProperty(u)){var c=o.appearanceStreamContent[u];if(A+=\"\u002F\"+u+\" \",A+=\"\u003C\u003C\",Object.keys(c).length>=1||Array.isArray(c)){for(var n in c)if(c.hasOwnProperty(n)){var l=c[n];\"function\"==typeof l&&(l=l.call(t,o)),A+=\"\u002F\"+n+\" \"+l+\" \",t.internal.acroformPlugin.xForms.indexOf(l)>=0||t.internal.acroformPlugin.xForms.push(l)}}else\"function\"==typeof(l=c)&&(l=l.call(t,o)),A+=\"\u002F\"+n+\" \"+l,t.internal.acroformPlugin.xForms.indexOf(l)>=0||t.internal.acroformPlugin.xForms.push(l);A+=\">>\"}s.push({key:\"AP\",value:\"\u003C\u003C\\n\"+A+\">>\"})}t.internal.putStream({additionalKeyValues:s,objectId:o.objId}),t.internal.out(\"endobj\")}r&&function(e,t){for(var r in e)if(e.hasOwnProperty(r)){var n=r,o=e[r];t.internal.newObjectDeferredBegin(o.objId,!0),\"object\"==typeof o&&\"function\"==typeof o.putStream&&o.putStream(),delete e[n]}}(t.internal.acroformPlugin.xForms,t)}(t,e)})),e.internal.acroformPlugin.isInitialized=!0}}(this,e),!(e instanceof Ae))throw new Error(\"Invalid argument passed to jsPDF.addField.\");var t;return(t=e).scope.internal.acroformPlugin.printedOut&&(t.scope.internal.acroformPlugin.printedOut=!1,t.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),t.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t),e.page=e.scope.internal.getCurrentPageInfo().pageNumber,this};I.AcroFormChoiceField=ue,I.AcroFormListBox=ce,I.AcroFormComboBox=le,I.AcroFormEditBox=de,I.AcroFormButton=fe,I.AcroFormPushButton=he,I.AcroFormRadioButton=pe,I.AcroFormCheckBox=ge,I.AcroFormTextField=ye,I.AcroFormPasswordField=ve,I.AcroFormAppearance=we,I.AcroForm={ChoiceField:ue,ListBox:ce,ComboBox:le,EditBox:de,Button:fe,PushButton:he,RadioButton:pe,CheckBox:ge,TextField:ye,PasswordField:ve,Appearance:we},H.AcroForm={ChoiceField:ue,ListBox:ce,ComboBox:le,EditBox:de,Button:fe,PushButton:he,RadioButton:pe,CheckBox:ge,TextField:ye,PasswordField:ve,Appearance:we};var Be,je,_e=H.AcroForm;function Ce(e){return e.reduce((function(e,t,r){return e[t]=r,e}),{})}!function(e){e.__addimage__={};var t=\"UNKNOWN\",r={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},n=e.__addimage__.getImageFileTypeByImageData=function(e,n){var o,s;n=n||t;var i,a,A,u=t;if(_(e))for(A in r)for(i=r[A],o=0;o\u003Ci.length;o+=1){for(a=!0,s=0;s\u003Ci[o].length;s+=1)if(void 0!==i[o][s]&&i[o][s]!==e[s]){a=!1;break}if(!0===a){u=A;break}}else for(A in r)for(i=r[A],o=0;o\u003Ci.length;o+=1){for(a=!0,s=0;s\u003Ci[o].length;s+=1)if(void 0!==i[o][s]&&i[o][s]!==e.charCodeAt(s)){a=!1;break}if(!0===a){u=A;break}}return u===t&&n!==t&&(u=n),u},o=function(e){for(var t=this.internal.write,r=this.internal.putStream,n=(0,this.internal.getFilters)();-1!==n.indexOf(\"FlateEncode\");)n.splice(n.indexOf(\"FlateEncode\"),1);e.objectId=this.internal.newObject();var s=[];if(s.push({key:\"Type\",value:\"\u002FXObject\"}),s.push({key:\"Subtype\",value:\"\u002FImage\"}),s.push({key:\"Width\",value:e.width}),s.push({key:\"Height\",value:e.height}),e.colorSpace===y.INDEXED?s.push({key:\"ColorSpace\",value:\"[\u002FIndexed \u002FDeviceRGB \"+(e.palette.length\u002F3-1)+\" \"+(\"sMask\"in e&&void 0!==e.sMask?e.objectId+2:e.objectId+1)+\" 0 R]\"}):(s.push({key:\"ColorSpace\",value:\"\u002F\"+e.colorSpace}),e.colorSpace===y.DEVICE_CMYK&&s.push({key:\"Decode\",value:\"[1 0 1 0 1 0 1 0]\"})),s.push({key:\"BitsPerComponent\",value:e.bitsPerComponent}),\"decodeParameters\"in e&&void 0!==e.decodeParameters&&s.push({key:\"DecodeParms\",value:\"\u003C\u003C\"+e.decodeParameters+\">>\"}),\"transparency\"in e&&Array.isArray(e.transparency)){for(var i=\"\",a=0,A=e.transparency.length;a\u003CA;a++)i+=e.transparency[a]+\" \"+e.transparency[a]+\" \";s.push({key:\"Mask\",value:\"[\"+i+\"]\"})}void 0!==e.sMask&&s.push({key:\"SMask\",value:e.objectId+1+\" 0 R\"});var u=void 0!==e.filter?[\"\u002F\"+e.filter]:void 0;if(r({data:e.data,additionalKeyValues:s,alreadyAppliedFilters:u,objectId:e.objectId}),t(\"endobj\"),\"sMask\"in e&&void 0!==e.sMask){var c=\"\u002FPredictor \"+e.predictor+\" \u002FColors 1 \u002FBitsPerComponent \"+e.bitsPerComponent+\" \u002FColumns \"+e.width,l={width:e.width,height:e.height,colorSpace:\"DeviceGray\",bitsPerComponent:e.bitsPerComponent,decodeParameters:c,data:e.sMask};\"filter\"in e&&(l.filter=e.filter),o.call(this,l)}if(e.colorSpace===y.INDEXED){var d=this.internal.newObject();r({data:x(new Uint8Array(e.palette)),objectId:d}),t(\"endobj\")}},s=function(){var e=this.internal.collections.addImage_images;for(var t in e)o.call(this,e[t])},i=function(){var e,t=this.internal.collections.addImage_images,r=this.internal.write;for(var n in t)r(\"\u002FI\"+(e=t[n]).index,e.objectId,\"0\",\"R\")},a=function(){this.internal.collections.addImage_images||(this.internal.collections.addImage_images={},this.internal.events.subscribe(\"putResources\",s),this.internal.events.subscribe(\"putXobjectDict\",i))},A=function(){var e=this.internal.collections.addImage_images;return a.call(this),e},u=function(){return Object.keys(this.internal.collections.addImage_images).length},d=function(t){return\"function\"==typeof e[\"process\"+t.toUpperCase()]},f=function(e){return\"object\"==typeof e&&1===e.nodeType},h=function(t,r){if(\"IMG\"===t.nodeName&&t.hasAttribute(\"src\")){var n=\"\"+t.getAttribute(\"src\");if(0===n.indexOf(\"data:image\u002F\"))return c(unescape(n).split(\"base64,\").pop());var o=e.loadFile(n,!0);if(void 0!==o)return o}if(\"CANVAS\"===t.nodeName){var s;switch(r){case\"PNG\":s=\"image\u002Fpng\";break;case\"WEBP\":s=\"image\u002Fwebp\";break;case\"JPEG\":case\"JPG\":default:s=\"image\u002Fjpeg\"}return c(t.toDataURL(s,1).split(\"base64,\").pop())}},p=function(e){var t=this.internal.collections.addImage_images;if(t)for(var r in t)if(e===t[r].alias)return t[r]},m=function(e,t,r){return e||t||(e=-96,t=-96),e\u003C0&&(e=-1*r.width*72\u002Fe\u002Fthis.internal.scaleFactor),t\u003C0&&(t=-1*r.height*72\u002Ft\u002Fthis.internal.scaleFactor),0===e&&(e=t*r.width\u002Fr.height),0===t&&(t=e*r.height\u002Fr.width),[e,t]},g=function(e,t,r,n,o,s){var i=m.call(this,r,n,o),a=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString,c=A.call(this);if(r=i[0],n=i[1],c[o.index]=o,s){s*=Math.PI\u002F180;var l=Math.cos(s),d=Math.sin(s),f=function(e){return e.toFixed(4)},h=[f(l),f(d),f(-1*d),f(l),0,0,\"cm\"]}this.internal.write(\"q\"),s?(this.internal.write([1,\"0\",\"0\",1,a(e),u(t+n),\"cm\"].join(\" \")),this.internal.write(h.join(\" \")),this.internal.write([a(r),\"0\",\"0\",a(n),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([a(r),\"0\",\"0\",a(n),a(e),u(t+n),\"cm\"].join(\" \")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,\"cm\"].join(\" \")),this.internal.write(\"\u002FI\"+o.index+\" Do\"),this.internal.write(\"Q\")},y=e.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"};e.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"};var v=e.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},w=e.__addimage__.sHashCode=function(e){var t,r,n=0;if(\"string\"==typeof e)for(r=e.length,t=0;t\u003Cr;t++)n=(n\u003C\u003C5)-n+e.charCodeAt(t),n|=0;else if(_(e))for(r=e.byteLength\u002F2,t=0;t\u003Cr;t++)n=(n\u003C\u003C5)-n+e[t],n|=0;return n},b=e.__addimage__.validateStringAsBase64=function(e){(e=e||\"\").toString().trim();var t=!0;return 0===e.length&&(t=!1),e.length%4!=0&&(t=!1),!1===\u002F^[A-Za-z0-9+\u002F]+$\u002F.test(e.substr(0,e.length-2))&&(t=!1),!1===\u002F^[A-Za-z0-9\u002F][A-Za-z0-9+\u002F]|[A-Za-z0-9+\u002F]=|==$\u002F.test(e.substr(-2))&&(t=!1),t},B=e.__addimage__.extractImageFromDataUrl=function(e){var t=(e=e||\"\").split(\"base64,\"),r=null;if(2===t.length){var n=\u002F^data:(\\w*\\\u002F\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$\u002F.exec(t[0]);Array.isArray(n)&&(r={mimeType:n[1],charset:n[2],data:t[1]})}return r},j=e.__addimage__.supportsArrayBuffer=function(){return\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array};e.__addimage__.isArrayBuffer=function(e){return j()&&e instanceof ArrayBuffer};var _=e.__addimage__.isArrayBufferView=function(e){return j()&&\"undefined\"!=typeof Uint32Array&&(e instanceof Int8Array||e instanceof Uint8Array||\"undefined\"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)},C=e.__addimage__.binaryStringToUint8Array=function(e){for(var t=e.length,r=new Uint8Array(t),n=0;n\u003Ct;n++)r[n]=e.charCodeAt(n);return r},x=e.__addimage__.arrayBufferToBinaryString=function(e){try{return c(l(String.fromCharCode.apply(null,e)))}catch(t){if(\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.reduce)return new Uint8Array(e).reduce((function(e,t){return e.push(String.fromCharCode(t)),e}),[]).join(\"\")}};e.addImage=function(){var e,r,n,o,s,i,A,u,c;if(\"number\"==typeof arguments[1]?(r=t,n=arguments[1],o=arguments[2],s=arguments[3],i=arguments[4],A=arguments[5],u=arguments[6],c=arguments[7]):(r=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],i=arguments[5],A=arguments[6],u=arguments[7],c=arguments[8]),\"object\"==typeof(e=arguments[0])&&!f(e)&&\"imageData\"in e){var l=e;e=l.imageData,r=l.format||r||t,n=l.x||n||0,o=l.y||o||0,s=l.w||l.width||s,i=l.h||l.height||i,A=l.alias||A,u=l.compression||u,c=l.rotation||l.angle||c}var d=this.internal.getFilters();if(void 0===u&&-1!==d.indexOf(\"FlateEncode\")&&(u=\"SLOW\"),isNaN(n)||isNaN(o))throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");a.call(this);var h=E.call(this,e,r,A,u);return g.call(this,n,o,s,i,h,c),this};var E=function(r,o,s,i){var a,A,c;if(\"string\"==typeof r&&n(r)===t){r=unescape(r);var l=N(r,!1);(\"\"!==l||void 0!==(l=e.loadFile(r,!0)))&&(r=l)}if(f(r)&&(r=h(r,o)),o=n(r,o),!d(o))throw new Error(\"addImage does not support files of type '\"+o+\"', please ensure that a plugin for '\"+o+\"' support is added.\");if((null==(c=s)||0===c.length)&&(s=function(e){return\"string\"==typeof e||_(e)?w(e):null}(r)),(a=p.call(this,s))||(j()&&(r instanceof Uint8Array||(A=r,r=C(r))),a=this[\"process\"+o.toUpperCase()](r,u.call(this),s,function(t){return t&&\"string\"==typeof t&&(t=t.toUpperCase()),t in e.image_compression?t:v.NONE}(i),A)),!a)throw new Error(\"An unknown error occurred whilst processing the image.\");return a},N=e.__addimage__.convertBase64ToBinaryString=function(e,t){var r;t=\"boolean\"!=typeof t||t;var n,o=\"\";if(\"string\"==typeof e){n=null!==(r=B(e))?r.data:e;try{o=c(n)}catch(e){if(t)throw b(n)?new Error(\"atob-Error in jsPDF.convertBase64ToBinaryString \"+e.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \")}}return o};e.getImageProperties=function(r){var o,s,i=\"\";if(f(r)&&(r=h(r)),\"string\"==typeof r&&n(r)===t&&(\"\"===(i=N(r,!1))&&(i=e.loadFile(r)||\"\"),r=i),s=n(r),!d(s))throw new Error(\"addImage does not support files of type '\"+s+\"', please ensure that a plugin for '\"+s+\"' support is added.\");if(!j()||r instanceof Uint8Array||(r=C(r)),!(o=this[\"process\"+s.toUpperCase()](r)))throw new Error(\"An unknown error occurred whilst processing the image\");return o.fileType=s,o}}(H.API),Be=H.API,je=function(e){if(void 0!==e&&\"\"!=e)return!0},H.API.events.push([\"addPage\",function(e){this.internal.getPageInfo(e.pageNumber).pageContext.annotations=[]}]),Be.events.push([\"putPage\",function(e){for(var t,r,n,o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString,i=this.internal.getPageInfoByObjId(e.objId),a=e.pageContext.annotations,A=!1,u=0;u\u003Ca.length&&!A;u++)switch((t=a[u]).type){case\"link\":(je(t.options.url)||je(t.options.pageNumber))&&(A=!0);break;case\"reference\":case\"text\":case\"freetext\":A=!0}if(0!=A){this.internal.write(\"\u002FAnnots [\");for(var c=0;c\u003Ca.length;c++){t=a[c];var l=this.internal.pdfEscape,d=this.internal.getEncryptor(e.objId);switch(t.type){case\"reference\":this.internal.write(\" \"+t.object.objId+\" 0 R \");break;case\"text\":var f=this.internal.newAdditionalObject(),h=this.internal.newAdditionalObject(),p=this.internal.getEncryptor(f.objId),m=t.title||\"Note\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FText \"+(r=\"\u002FRect [\"+o(t.bounds.x)+\" \"+s(t.bounds.y+t.bounds.h)+\" \"+o(t.bounds.x+t.bounds.w)+\" \"+s(t.bounds.y)+\"] \")+\"\u002FContents (\"+l(p(t.contents))+\")\",n+=\" \u002FPopup \"+h.objId+\" 0 R\",n+=\" \u002FP \"+i.objId+\" 0 R\",n+=\" \u002FT (\"+l(p(m))+\") >>\",f.content=n;var g=f.objId+\" 0 R\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FPopup \"+(r=\"\u002FRect [\"+o(t.bounds.x+30)+\" \"+s(t.bounds.y+t.bounds.h)+\" \"+o(t.bounds.x+t.bounds.w+30)+\" \"+s(t.bounds.y)+\"] \")+\" \u002FParent \"+g,t.open&&(n+=\" \u002FOpen true\"),n+=\" >>\",h.content=n,this.internal.write(f.objId,\"0 R\",h.objId,\"0 R\");break;case\"freetext\":r=\"\u002FRect [\"+o(t.bounds.x)+\" \"+s(t.bounds.y)+\" \"+o(t.bounds.x+t.bounds.w)+\" \"+s(t.bounds.y+t.bounds.h)+\"] \";var y=t.color||\"#000000\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FFreeText \"+r+\"\u002FContents (\"+l(d(t.contents))+\")\",n+=\" \u002FDS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+y+\")\",n+=\" \u002FBorder [0 0 0]\",n+=\" >>\",this.internal.write(n);break;case\"link\":if(t.options.name){var v=this.annotations._nameMap[t.options.name];t.options.pageNumber=v.page,t.options.top=v.y}else t.options.top||(t.options.top=0);if(r=\"\u002FRect [\"+t.finalBounds.x+\" \"+t.finalBounds.y+\" \"+t.finalBounds.w+\" \"+t.finalBounds.h+\"] \",n=\"\",t.options.url)n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FLink \"+r+\"\u002FBorder [0 0 0] \u002FA \u003C\u003C\u002FS \u002FURI \u002FURI (\"+l(d(t.options.url))+\") >>\";else if(t.options.pageNumber)switch(n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FLink \"+r+\"\u002FBorder [0 0 0] \u002FDest [\"+this.internal.getPageInfo(t.options.pageNumber).objId+\" 0 R\",t.options.magFactor=t.options.magFactor||\"XYZ\",t.options.magFactor){case\"Fit\":n+=\" \u002FFit]\";break;case\"FitH\":n+=\" \u002FFitH \"+t.options.top+\"]\";break;case\"FitV\":t.options.left=t.options.left||0,n+=\" \u002FFitV \"+t.options.left+\"]\";break;case\"XYZ\":default:var w=s(t.options.top);t.options.left=t.options.left||0,void 0===t.options.zoom&&(t.options.zoom=0),n+=\" \u002FXYZ \"+t.options.left+\" \"+w+\" \"+t.options.zoom+\"]\"}\"\"!=n&&(n+=\" >>\",this.internal.write(n))}}this.internal.write(\"]\")}}]),Be.createAnnotation=function(e){var t=this.internal.getCurrentPageInfo();switch(e.type){case\"link\":this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case\"text\":case\"freetext\":t.pageContext.annotations.push(e)}},Be.link=function(e,t,r,n,o){var s=this.internal.getCurrentPageInfo(),i=this.internal.getCoordinateString,a=this.internal.getVerticalCoordinateString;s.pageContext.annotations.push({finalBounds:{x:i(e),y:a(t),w:i(e+r),h:a(t+n)},options:o,type:\"link\"})},Be.textWithLink=function(e,t,r,n){var o=this.getTextWidth(e),s=this.internal.getLineHeight()\u002Fthis.internal.scaleFactor;return this.text(e,t,r,n),r+=.2*s,\"center\"===n.align&&(t-=o\u002F2),\"right\"===n.align&&(t-=o),this.link(t,r-s,o,s,n),o},Be.getTextWidth=function(e){var t=this.internal.getFontSize();return this.getStringUnitWidth(e)*t\u002Fthis.internal.scaleFactor},function(e){var t={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},r={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},n={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},o=[1570,1571,1573,1575];e.__arabicParser__={};var s=e.__arabicParser__.isInArabicSubstitutionA=function(e){return void 0!==t[e.charCodeAt(0)]},i=e.__arabicParser__.isArabicLetter=function(e){return\"string\"==typeof e&&\u002F^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$\u002F.test(e)},a=e.__arabicParser__.isArabicEndLetter=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length\u003C=2},A=e.__arabicParser__.isArabicAlfLetter=function(e){return i(e)&&o.indexOf(e.charCodeAt(0))>=0};e.__arabicParser__.arabicLetterHasIsolatedForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=1};var u=e.__arabicParser__.arabicLetterHasFinalForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=2};e.__arabicParser__.arabicLetterHasInitialForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=3};var c=e.__arabicParser__.arabicLetterHasMedialForm=function(e){return i(e)&&s(e)&&4==t[e.charCodeAt(0)].length},l=e.__arabicParser__.resolveLigatures=function(e){var t=0,n=r,o=\"\",s=0;for(t=0;t\u003Ce.length;t+=1)void 0!==n[e.charCodeAt(t)]?(s++,\"number\"==typeof(n=n[e.charCodeAt(t)])&&(o+=String.fromCharCode(n),n=r,s=0),t===e.length-1&&(n=r,o+=e.charAt(t-(s-1)),t-=s-1,s=0)):(n=r,o+=e.charAt(t-s),t-=s,s=0);return o};e.__arabicParser__.isArabicDiacritic=function(e){return void 0!==e&&void 0!==n[e.charCodeAt(0)]};var d=e.__arabicParser__.getCorrectForm=function(e,t,r){return i(e)?!1===s(e)?-1:!u(e)||!i(t)&&!i(r)||!i(r)&&a(t)||a(e)&&!i(t)||a(e)&&A(t)||a(e)&&a(t)?0:c(e)&&i(t)&&!a(t)&&i(r)&&u(r)?3:a(e)||!i(r)?1:2:-1},f=function(e){var r=0,n=0,o=0,s=\"\",a=\"\",A=\"\",u=(e=e||\"\").split(\"\\\\s+\"),c=[];for(r=0;r\u003Cu.length;r+=1){for(c.push(\"\"),n=0;n\u003Cu[r].length;n+=1)s=u[r][n],a=u[r][n-1],A=u[r][n+1],i(s)?(o=d(s,a,A),c[r]+=-1!==o?String.fromCharCode(t[s.charCodeAt(0)][o]):s):c[r]+=s;c[r]=l(c[r])}return c.join(\" \")},h=e.__arabicParser__.processArabic=e.processArabic=function(){var e,t=\"string\"==typeof arguments[0]?arguments[0]:arguments[0].text,r=[];if(Array.isArray(t)){var n=0;for(r=[],n=0;n\u003Ct.length;n+=1)Array.isArray(t[n])?r.push([f(t[n][0]),t[n][1],t[n][2]]):r.push([f(t[n])]);e=r}else e=f(t);return\"string\"==typeof arguments[0]?e:(arguments[0].text=e,arguments[0])};e.events.push([\"preProcessText\",h])}(H.API),H.API.autoPrint=function(e){var t;switch((e=e||{}).variant=e.variant||\"non-conform\",e.variant){case\"javascript\":this.addJS(\"print({});\");break;case\"non-conform\":default:this.internal.events.subscribe(\"postPutResources\",(function(){t=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FS \u002FNamed\"),this.internal.out(\"\u002FType \u002FAction\"),this.internal.out(\"\u002FN \u002FPrint\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.out(\"\u002FOpenAction \"+t+\" 0 R\")}))}return this},function(e){var t=function(){var e=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return e},set:function(t){e=t}});var t=150;Object.defineProperty(this,\"width\",{get:function(){return t},set:function(e){t=isNaN(e)||!1===Number.isInteger(e)||e\u003C0?150:e,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=t+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(e){r=isNaN(e)||!1===Number.isInteger(e)||e\u003C0?300:e,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var n=[];Object.defineProperty(this,\"childNodes\",{get:function(){return n},set:function(e){n=e}});var o={};Object.defineProperty(this,\"style\",{get:function(){return o},set:function(e){o=e}}),Object.defineProperty(this,\"parentNode\",{})};t.prototype.getContext=function(e,t){var r;if(\"2d\"!==(e=e||\"2d\"))return null;for(r in t)this.pdf.context2d.hasOwnProperty(r)&&(this.pdf.context2d[r]=t[r]);return this.pdf.context2d._canvas=this,this.pdf.context2d},t.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},e.events.push([\"initialized\",function(){this.canvas=new t,this.canvas.pdf=this}])}(H.API),function(e){var t={left:0,top:0,bottom:0,right:0},r=!1,n=function(){void 0===this.internal.__cell__&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},t),this.internal.__cell__.margins.width=this.getPageWidth(),o.call(this))},o=function(){this.internal.__cell__.lastCell=new s,this.internal.__cell__.pages=1},s=function(){var e=arguments[0];Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var t=arguments[1];Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var r=arguments[2];Object.defineProperty(this,\"width\",{enumerable:!0,get:function(){return r},set:function(e){r=e}});var n=arguments[3];Object.defineProperty(this,\"height\",{enumerable:!0,get:function(){return n},set:function(e){n=e}});var o=arguments[4];Object.defineProperty(this,\"text\",{enumerable:!0,get:function(){return o},set:function(e){o=e}});var s=arguments[5];Object.defineProperty(this,\"lineNumber\",{enumerable:!0,get:function(){return s},set:function(e){s=e}});var i=arguments[6];return Object.defineProperty(this,\"align\",{enumerable:!0,get:function(){return i},set:function(e){i=e}}),this};s.prototype.clone=function(){return new s(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},s.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},e.setHeaderFunction=function(e){return n.call(this),this.internal.__cell__.headerFunction=\"function\"==typeof e?e:void 0,this},e.getTextDimensions=function(e,t){n.call(this);var r=(t=t||{}).fontSize||this.getFontSize(),o=t.font||this.getFont(),s=t.scaleFactor||this.internal.scaleFactor,i=0,a=0,A=0,u=this;if(!Array.isArray(e)&&\"string\"!=typeof e){if(\"number\"!=typeof e)throw new Error(\"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\");e=String(e)}const c=t.maxWidth;c>0?\"string\"==typeof e?e=this.splitTextToSize(e,c):\"[object Array]\"===Object.prototype.toString.call(e)&&(e=e.reduce((function(e,t){return e.concat(u.splitTextToSize(t,c))}),[])):e=Array.isArray(e)?e:[e];for(var l=0;l\u003Ce.length;l++)i\u003C(A=this.getStringUnitWidth(e[l],{font:o})*r)&&(i=A);return 0!==i&&(a=e.length),{w:i\u002F=s,h:Math.max((a*r*this.getLineHeightFactor()-r*(this.getLineHeightFactor()-1))\u002Fs,0)}},e.cellAddPage=function(){n.call(this),this.addPage();var e=this.internal.__cell__.margins||t;return this.internal.__cell__.lastCell=new s(e.left,e.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var i=e.cell=function(){var e;e=arguments[0]instanceof s?arguments[0]:new s(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]),n.call(this);var o=this.internal.__cell__.lastCell,i=this.internal.__cell__.padding,a=this.internal.__cell__.margins||t,A=this.internal.__cell__.tableHeaderRow,u=this.internal.__cell__.printHeaders;return void 0!==o.lineNumber&&(o.lineNumber===e.lineNumber?(e.x=(o.x||0)+(o.width||0),e.y=o.y||0):o.y+o.height+e.height+a.bottom>this.getPageHeight()?(this.cellAddPage(),e.y=a.top,u&&A&&(this.printHeaderRow(e.lineNumber,!0),e.y+=A[0].height)):e.y=o.y+o.height||e.y),void 0!==e.text[0]&&(this.rect(e.x,e.y,e.width,e.height,!0===r?\"FD\":void 0),\"right\"===e.align?this.text(e.text,e.x+e.width-i,e.y+i,{align:\"right\",baseline:\"top\"}):\"center\"===e.align?this.text(e.text,e.x+e.width\u002F2,e.y+i,{align:\"center\",baseline:\"top\",maxWidth:e.width-i-i}):this.text(e.text,e.x+i,e.y+i,{align:\"left\",baseline:\"top\",maxWidth:e.width-i-i})),this.internal.__cell__.lastCell=e,this};e.table=function(e,r,A,u,c){if(n.call(this),!A)throw new Error(\"No data for PDF table.\");var l,d,f,h,p=[],m=[],g=[],y={},v={},w=[],b=[],B=(c=c||{}).autoSize||!1,j=!1!==c.printHeaders,_=c.css&&void 0!==c.css[\"font-size\"]?16*c.css[\"font-size\"]:c.fontSize||12,C=c.margins||Object.assign({width:this.getPageWidth()},t),x=\"number\"==typeof c.padding?c.padding:3,E=c.headerBackgroundColor||\"#c8c8c8\";if(o.call(this),this.internal.__cell__.printHeaders=j,this.internal.__cell__.margins=C,this.internal.__cell__.table_font_size=_,this.internal.__cell__.padding=x,this.internal.__cell__.headerBackgroundColor=E,this.setFontSize(_),null==u)m=p=Object.keys(A[0]),g=p.map((function(){return\"left\"}));else if(Array.isArray(u)&&\"object\"==typeof u[0])for(p=u.map((function(e){return e.name})),m=u.map((function(e){return e.prompt||e.name||\"\"})),g=u.map((function(e){return e.align||\"left\"})),l=0;l\u003Cu.length;l+=1)v[u[l].name]=u[l].width*(19.049976\u002F25.4);else Array.isArray(u)&&\"string\"==typeof u[0]&&(m=p=u,g=p.map((function(){return\"left\"})));if(B||Array.isArray(u)&&\"string\"==typeof u[0])for(l=0;l\u003Cp.length;l+=1){for(y[h=p[l]]=A.map((function(e){return e[h]})),this.setFont(void 0,\"bold\"),w.push(this.getTextDimensions(m[l],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),d=y[h],this.setFont(void 0,\"normal\"),f=0;f\u003Cd.length;f+=1)w.push(this.getTextDimensions(d[f],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);v[h]=Math.max.apply(null,w)+x+x,w=[]}if(j){var N={};for(l=0;l\u003Cp.length;l+=1)N[p[l]]={},N[p[l]].text=m[l],N[p[l]].align=g[l];var Q=a.call(this,N,v);b=p.map((function(t){return new s(e,r,v[t],Q,N[t].text,void 0,N[t].align)})),this.setTableHeaderRow(b),this.printHeaderRow(1,!1)}var F=u.reduce((function(e,t){return e[t.name]=t.align,e}),{});for(l=0;l\u003CA.length;l+=1){var U=a.call(this,A[l],v);for(f=0;f\u003Cp.length;f+=1)i.call(this,new s(e,r,v[p[f]],U,A[l][p[f]],l+2,F[p[f]]))}return this.internal.__cell__.table_x=e,this.internal.__cell__.table_y=r,this};var a=function(e,t){var r=this.internal.__cell__.padding,n=this.internal.__cell__.table_font_size,o=this.internal.scaleFactor;return Object.keys(e).map((function(n){var o=e[n];return this.splitTextToSize(o.hasOwnProperty(\"text\")?o.text:o,t[n]-r-r)}),this).map((function(e){return this.getLineHeightFactor()*e.length*n\u002Fo+r+r}),this).reduce((function(e,t){return Math.max(e,t)}),0)};e.setTableHeaderRow=function(e){n.call(this),this.internal.__cell__.tableHeaderRow=e},e.printHeaderRow=function(e,t){if(n.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error(\"Property tableHeaderRow does not exist.\");var o;if(r=!0,\"function\"==typeof this.internal.__cell__.headerFunction){var a=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new s(a[0],a[1],a[2],a[3],void 0,-1)}this.setFont(void 0,\"bold\");for(var A=[],u=0;u\u003Cthis.internal.__cell__.tableHeaderRow.length;u+=1)o=this.internal.__cell__.tableHeaderRow[u].clone(),t&&(o.y=this.internal.__cell__.margins.top||0,A.push(o)),o.lineNumber=e,this.setFillColor(this.internal.__cell__.headerBackgroundColor),i.call(this,o);A.length>0&&this.setTableHeaderRow(A),this.setFont(void 0,\"normal\"),r=!1}}(H.API);var xe={italic:[\"italic\",\"oblique\",\"normal\"],oblique:[\"oblique\",\"italic\",\"normal\"],normal:[\"normal\",\"oblique\",\"italic\"]},Ee=[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\"],Ne=Ce(Ee),Qe=[100,200,300,400,500,600,700,800,900],Fe=Ce(Qe);function Ue(e){var t=e.family.replace(\u002F\"|'\u002Fg,\"\").toLowerCase(),r=function(e){return xe[e=e||\"normal\"]?e:\"normal\"}(e.style),n=function(e){if(!e)return 400;if(\"number\"==typeof e)return e>=100&&e\u003C=900&&e%100==0?e:400;if(\u002F^\\d00$\u002F.test(e))return parseInt(e);switch(e){case\"bold\":return 700;case\"normal\":default:return 400}}(e.weight),o=function(e){return\"number\"==typeof Ne[e=e||\"normal\"]?e:\"normal\"}(e.stretch);return{family:t,style:r,weight:n,stretch:o,src:e.src||[],ref:e.ref||{name:t,style:[o,r,n].join(\" \")}}}function Se(e,t,r,n){var o;for(o=r;o>=0&&o\u003Ct.length;o+=n)if(e[t[o]])return e[t[o]];for(o=r;o>=0&&o\u003Ct.length;o-=n)if(e[t[o]])return e[t[o]]}var Le={\"sans-serif\":\"helvetica\",fixed:\"courier\",monospace:\"courier\",terminal:\"courier\",cursive:\"times\",fantasy:\"times\",serif:\"times\"},Te={caption:\"times\",icon:\"times\",menu:\"times\",\"message-box\":\"times\",\"small-caption\":\"times\",\"status-bar\":\"times\"};function He(e){return[e.stretch,e.style,e.weight,e.family].join(\" \")}function Ie(e){return e.trimLeft()}function Pe(e,t){for(var r=0;r\u003Ce.length;){if(e.charAt(r)===t)return[e.substring(0,r),e.substring(r+1)];r+=1}return null}function Oe(e){var t=e.match(\u002F^(-[a-z_]|[a-z_])[a-z0-9_-]*\u002Fi);return null===t?null:[t[0],e.substring(t[0].length)]}var ke,Re,Me,De=[\"times\"];!function(e){var t,r,n,o,s,a,A,u,c,l=function(e){return e=e||{},this.isStrokeTransparent=e.isStrokeTransparent||!1,this.strokeOpacity=e.strokeOpacity||1,this.strokeStyle=e.strokeStyle||\"#000000\",this.fillStyle=e.fillStyle||\"#000000\",this.isFillTransparent=e.isFillTransparent||!1,this.fillOpacity=e.fillOpacity||1,this.font=e.font||\"10px sans-serif\",this.textBaseline=e.textBaseline||\"alphabetic\",this.textAlign=e.textAlign||\"left\",this.lineWidth=e.lineWidth||1,this.lineJoin=e.lineJoin||\"miter\",this.lineCap=e.lineCap||\"butt\",this.path=e.path||[],this.transform=void 0!==e.transform?e.transform.clone():new u,this.globalCompositeOperation=e.globalCompositeOperation||\"normal\",this.globalAlpha=e.globalAlpha||1,this.clip_path=e.clip_path||[],this.currentPoint=e.currentPoint||new a,this.miterLimit=e.miterLimit||10,this.lastPoint=e.lastPoint||new a,this.ignoreClearRect=\"boolean\"!=typeof e.ignoreClearRect||e.ignoreClearRect,this};e.events.push([\"initialized\",function(){this.context2d=new d(this),t=this.internal.f2,r=this.internal.getCoordinateString,n=this.internal.getVerticalCoordinateString,o=this.internal.getHorizontalCoordinate,s=this.internal.getVerticalCoordinate,a=this.internal.Point,A=this.internal.Rectangle,u=this.internal.Matrix,c=new l}]);var d=function(e){Object.defineProperty(this,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}});var t=e;Object.defineProperty(this,\"pdf\",{get:function(){return t}});var r=!1;Object.defineProperty(this,\"pageWrapXEnabled\",{get:function(){return r},set:function(e){r=Boolean(e)}});var n=!1;Object.defineProperty(this,\"pageWrapYEnabled\",{get:function(){return n},set:function(e){n=Boolean(e)}});var o=0;Object.defineProperty(this,\"posX\",{get:function(){return o},set:function(e){isNaN(e)||(o=e)}});var s=0;Object.defineProperty(this,\"posY\",{get:function(){return s},set:function(e){isNaN(e)||(s=e)}});var i=!1;Object.defineProperty(this,\"autoPaging\",{get:function(){return i},set:function(e){i=Boolean(e)}});var a=0;Object.defineProperty(this,\"lastBreak\",{get:function(){return a},set:function(e){a=e}});var A=[];Object.defineProperty(this,\"pageBreaks\",{get:function(){return A},set:function(e){A=e}}),Object.defineProperty(this,\"ctx\",{get:function(){return c},set:function(e){e instanceof l&&(c=e)}}),Object.defineProperty(this,\"path\",{get:function(){return c.path},set:function(e){c.path=e}});var u=[];Object.defineProperty(this,\"ctxStack\",{get:function(){return u},set:function(e){u=e}}),Object.defineProperty(this,\"fillStyle\",{get:function(){return this.ctx.fillStyle},set:function(e){var t;t=h(e),this.ctx.fillStyle=t.style,this.ctx.isFillTransparent=0===t.a,this.ctx.fillOpacity=t.a,this.pdf.setFillColor(t.r,t.g,t.b,{a:t.a}),this.pdf.setTextColor(t.r,t.g,t.b,{a:t.a})}}),Object.defineProperty(this,\"strokeStyle\",{get:function(){return this.ctx.strokeStyle},set:function(e){var t=h(e);this.ctx.strokeStyle=t.style,this.ctx.isStrokeTransparent=0===t.a,this.ctx.strokeOpacity=t.a,0===t.a?this.pdf.setDrawColor(255,255,255):(t.a,this.pdf.setDrawColor(t.r,t.g,t.b))}}),Object.defineProperty(this,\"lineCap\",{get:function(){return this.ctx.lineCap},set:function(e){-1!==[\"butt\",\"round\",\"square\"].indexOf(e)&&(this.ctx.lineCap=e,this.pdf.setLineCap(e))}}),Object.defineProperty(this,\"lineWidth\",{get:function(){return this.ctx.lineWidth},set:function(e){isNaN(e)||(this.ctx.lineWidth=e,this.pdf.setLineWidth(e))}}),Object.defineProperty(this,\"lineJoin\",{get:function(){return this.ctx.lineJoin},set:function(e){-1!==[\"bevel\",\"round\",\"miter\"].indexOf(e)&&(this.ctx.lineJoin=e,this.pdf.setLineJoin(e))}}),Object.defineProperty(this,\"miterLimit\",{get:function(){return this.ctx.miterLimit},set:function(e){isNaN(e)||(this.ctx.miterLimit=e,this.pdf.setMiterLimit(e))}}),Object.defineProperty(this,\"textBaseline\",{get:function(){return this.ctx.textBaseline},set:function(e){this.ctx.textBaseline=e}}),Object.defineProperty(this,\"textAlign\",{get:function(){return this.ctx.textAlign},set:function(e){-1!==[\"right\",\"end\",\"center\",\"left\",\"start\"].indexOf(e)&&(this.ctx.textAlign=e)}});var d=null;function f(e,t){if(null===d){var r=function(e){var t=[];return Object.keys(e).forEach((function(r){e[r].forEach((function(e){var n=null;switch(e){case\"bold\":n={family:r,weight:\"bold\"};break;case\"italic\":n={family:r,style:\"italic\"};break;case\"bolditalic\":n={family:r,weight:\"bold\",style:\"italic\"};break;case\"\":case\"normal\":n={family:r}}null!==n&&(n.ref={name:r,style:e},t.push(n))}))})),t}(e.getFontList());d=function(e){for(var t={},r=0;r\u003Ce.length;++r){var n=Ue(e[r]),o=n.family,s=n.stretch,i=n.style,a=n.weight;t[o]=t[o]||{},t[o][s]=t[o][s]||{},t[o][s][i]=t[o][s][i]||{},t[o][s][i][a]=n}return t}(r.concat(t))}return d}var p=null;Object.defineProperty(this,\"fontFaces\",{get:function(){return p},set:function(e){d=null,p=e}}),Object.defineProperty(this,\"font\",{get:function(){return this.ctx.font},set:function(e){var t;if(this.ctx.font=e,null!==(t=\u002F^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\\u002F\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$\u002Fi.exec(e))){var r=t[1],n=(t[2],t[3]),o=t[4],s=(t[5],t[6]),i=\u002F^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$\u002Fi.exec(o)[2];o=\"px\"===i?Math.floor(parseFloat(o)*this.pdf.internal.scaleFactor):\"em\"===i?Math.floor(parseFloat(o)*this.pdf.getFontSize()):Math.floor(parseFloat(o)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(o);var a=function(e){var t,r,n=[],o=e.trim();if(\"\"===o)return De;if(o in Te)return[Te[o]];for(;\"\"!==o;){switch(r=null,t=(o=Ie(o)).charAt(0)){case'\"':case\"'\":r=Pe(o.substring(1),t);break;default:r=Oe(o)}if(null===r)return De;if(n.push(r[0]),\"\"!==(o=Ie(r[1]))&&\",\"!==o.charAt(0))return De;o=o.replace(\u002F^,\u002F,\"\")}return n}(s);if(this.fontFaces){var A=function(e,t,r){for(var n=(r=r||{}).defaultFontFamily||\"times\",o=Object.assign({},Le,r.genericFontFamilies||{}),s=null,i=null,a=0;a\u003Ct.length;++a)if(o[(s=Ue(t[a])).family]&&(s.family=o[s.family]),e.hasOwnProperty(s.family)){i=e[s.family];break}if(!(i=i||e[n]))throw new Error(\"Could not find a font-family for the rule '\"+He(s)+\"' and default family '\"+n+\"'.\");if(i=function(e,t){if(t[e])return t[e];var r=Ne[e],n=r\u003C=Ne.normal?-1:1,o=Se(t,Ee,r,n);if(!o)throw new Error(\"Could not find a matching font-stretch value for \"+e);return o}(s.stretch,i),i=function(e,t){if(t[e])return t[e];for(var r=xe[e],n=0;n\u003Cr.length;++n)if(t[r[n]])return t[r[n]];throw new Error(\"Could not find a matching font-style for \"+e)}(s.style,i),!(i=function(e,t){if(t[e])return t[e];if(400===e&&t[500])return t[500];if(500===e&&t[400])return t[400];var r=Fe[e],n=Se(t,Qe,r,e\u003C400?-1:1);if(!n)throw new Error(\"Could not find a matching font-weight for value \"+e);return n}(s.weight,i)))throw new Error(\"Failed to resolve a font for the rule '\"+He(s)+\"'.\");return i}(f(this.pdf,this.fontFaces),a.map((function(e){return{family:e,stretch:\"normal\",weight:n,style:r}})));this.pdf.setFont(A.ref.name,A.ref.style)}else{var u=\"\";(\"bold\"===n||parseInt(n,10)>=700||\"bold\"===r)&&(u=\"bold\"),\"italic\"===r&&(u+=\"italic\"),0===u.length&&(u=\"normal\");for(var c=\"\",l={arial:\"Helvetica\",Arial:\"Helvetica\",verdana:\"Helvetica\",Verdana:\"Helvetica\",helvetica:\"Helvetica\",Helvetica:\"Helvetica\",\"sans-serif\":\"Helvetica\",fixed:\"Courier\",monospace:\"Courier\",terminal:\"Courier\",cursive:\"Times\",fantasy:\"Times\",serif:\"Times\"},d=0;d\u003Ca.length;d++){if(void 0!==this.pdf.internal.getFont(a[d],u,{noFallback:!0,disableWarning:!0})){c=a[d];break}if(\"bolditalic\"===u&&void 0!==this.pdf.internal.getFont(a[d],\"bold\",{noFallback:!0,disableWarning:!0}))c=a[d],u=\"bold\";else if(void 0!==this.pdf.internal.getFont(a[d],\"normal\",{noFallback:!0,disableWarning:!0})){c=a[d],u=\"normal\";break}}if(\"\"===c)for(var h=0;h\u003Ca.length;h++)if(l[a[h]]){c=l[a[h]];break}c=\"\"===c?\"Times\":c,this.pdf.setFont(c,u)}}}}),Object.defineProperty(this,\"globalCompositeOperation\",{get:function(){return this.ctx.globalCompositeOperation},set:function(e){this.ctx.globalCompositeOperation=e}}),Object.defineProperty(this,\"globalAlpha\",{get:function(){return this.ctx.globalAlpha},set:function(e){this.ctx.globalAlpha=e}}),Object.defineProperty(this,\"ignoreClearRect\",{get:function(){return this.ctx.ignoreClearRect},set:function(e){this.ctx.ignoreClearRect=Boolean(e)}})};d.prototype.fill=function(){b.call(this,\"fill\",!1)},d.prototype.stroke=function(){b.call(this,\"stroke\",!1)},d.prototype.beginPath=function(){this.path=[{type:\"begin\"}]},d.prototype.moveTo=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.moveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");var r=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"mt\",x:r.x,y:r.y}),this.ctx.lastPoint=new a(e,t)},d.prototype.closePath=function(){var e=new a(0,0),t=0;for(t=this.path.length-1;-1!==t;t--)if(\"begin\"===this.path[t].type&&\"object\"==typeof this.path[t+1]&&\"number\"==typeof this.path[t+1].x){e=new a(this.path[t+1].x,this.path[t+1].y),this.path.push({type:\"lt\",x:e.x,y:e.y});break}\"object\"==typeof this.path[t+2]&&\"number\"==typeof this.path[t+2].x&&this.path.push(JSON.parse(JSON.stringify(this.path[t+2]))),this.path.push({type:\"close\"}),this.ctx.lastPoint=new a(e.x,e.y)},d.prototype.lineTo=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.lineTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");var r=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"lt\",x:r.x,y:r.y}),this.ctx.lastPoint=new a(r.x,r.y)},d.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),b.call(this,null,!0)},d.prototype.quadraticCurveTo=function(e,t,r,n){if(isNaN(r)||isNaN(n)||isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\");var o=this.ctx.transform.applyToPoint(new a(r,n)),s=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"qct\",x1:s.x,y1:s.y,x:o.x,y:o.y}),this.ctx.lastPoint=new a(o.x,o.y)},d.prototype.bezierCurveTo=function(e,t,r,n,o,s){if(isNaN(o)||isNaN(s)||isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.bezierCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\");var A=this.ctx.transform.applyToPoint(new a(o,s)),u=this.ctx.transform.applyToPoint(new a(e,t)),c=this.ctx.transform.applyToPoint(new a(r,n));this.path.push({type:\"bct\",x1:u.x,y1:u.y,x2:c.x,y2:c.y,x:A.x,y:A.y}),this.ctx.lastPoint=new a(A.x,A.y)},d.prototype.arc=function(e,t,r,n,o,s){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o))throw i.error(\"jsPDF.context2d.arc: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");if(s=Boolean(s),!this.ctx.transform.isIdentity){var A=this.ctx.transform.applyToPoint(new a(e,t));e=A.x,t=A.y;var u=this.ctx.transform.applyToPoint(new a(0,r)),c=this.ctx.transform.applyToPoint(new a(0,0));r=Math.sqrt(Math.pow(u.x-c.x,2)+Math.pow(u.y-c.y,2))}Math.abs(o-n)>=2*Math.PI&&(n=0,o=2*Math.PI),this.path.push({type:\"arc\",x:e,y:t,radius:r,startAngle:n,endAngle:o,counterclockwise:s})},d.prototype.arcTo=function(e,t,r,n,o){throw new Error(\"arcTo not implemented.\")},d.prototype.rect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(e,t),this.lineTo(e+r,t),this.lineTo(e+r,t+n),this.lineTo(e,t+n),this.lineTo(e,t),this.lineTo(e+r,t),this.lineTo(e,t)},d.prototype.fillRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!p.call(this)){var o={};\"butt\"!==this.lineCap&&(o.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(o.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(e,t,r,n),this.fill(),o.hasOwnProperty(\"lineCap\")&&(this.lineCap=o.lineCap),o.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=o.lineJoin)}},d.prototype.strokeRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");m.call(this)||(this.beginPath(),this.rect(e,t,r,n),this.stroke())},d.prototype.clearRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(e,t,r,n))},d.prototype.save=function(e){e=\"boolean\"!=typeof e||e;for(var t=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r\u003Cthis.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"q\");if(this.pdf.setPage(t),e){this.ctx.fontSize=this.pdf.internal.getFontSize();var n=new l(this.ctx);this.ctxStack.push(this.ctx),this.ctx=n}},d.prototype.restore=function(e){e=\"boolean\"!=typeof e||e;for(var t=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r\u003Cthis.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"Q\");this.pdf.setPage(t),e&&0!==this.ctxStack.length&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin)},d.prototype.toDataURL=function(){throw new Error(\"toDataUrl not implemented.\")};var h=function(e){var t,r,n,o;if(!0===e.isCanvasGradient&&(e=e.getColor()),!e)return{r:0,g:0,b:0,a:0,style:e};if(\u002Ftransparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)\u002F.test(e))t=0,r=0,n=0,o=0;else{var s=\u002Frgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\u002F.exec(e);if(null!==s)t=parseInt(s[1]),r=parseInt(s[2]),n=parseInt(s[3]),o=1;else if(null!==(s=\u002Frgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)\u002F.exec(e)))t=parseInt(s[1]),r=parseInt(s[2]),n=parseInt(s[3]),o=parseFloat(s[4]);else{if(o=1,\"string\"==typeof e&&\"#\"!==e.charAt(0)){var i=new f(e);e=i.ok?i.toHex():\"#000000\"}4===e.length?(t=e.substring(1,2),t+=t,r=e.substring(2,3),r+=r,n=e.substring(3,4),n+=n):(t=e.substring(1,3),r=e.substring(3,5),n=e.substring(5,7)),t=parseInt(t,16),r=parseInt(r,16),n=parseInt(n,16)}}return{r:t,g:r,b:n,a:o,style:e}},p=function(){return this.ctx.isFillTransparent||0==this.globalAlpha},m=function(){return Boolean(this.ctx.isStrokeTransparent||0==this.globalAlpha)};d.prototype.fillText=function(e,t,r,n){if(isNaN(t)||isNaN(r)||\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.fillText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");if(n=isNaN(n)?void 0:n,!p.call(this)){r=j.call(this,r);var o=T(this.ctx.transform.rotation),s=this.ctx.transform.scaleX;N.call(this,{text:e,x:t,y:r,scale:s,angle:o,align:this.textAlign,maxWidth:n})}},d.prototype.strokeText=function(e,t,r,n){if(isNaN(t)||isNaN(r)||\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.strokeText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");if(!m.call(this)){n=isNaN(n)?void 0:n,r=j.call(this,r);var o=T(this.ctx.transform.rotation),s=this.ctx.transform.scaleX;N.call(this,{text:e,x:t,y:r,scale:s,renderingMode:\"stroke\",angle:o,align:this.textAlign,maxWidth:n})}},d.prototype.measureText=function(e){if(\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.measureText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.measureText\");var t=this.pdf,r=this.pdf.internal.scaleFactor,n=t.internal.getFontSize(),o=t.getStringUnitWidth(e)*n\u002Ft.internal.scaleFactor,s=function(e){var t=(e=e||{}).width||0;return Object.defineProperty(this,\"width\",{get:function(){return t}}),this};return new s({width:o*=Math.round(96*r\u002F72*1e4)\u002F1e4})},d.prototype.scale=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.scale: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");var r=new u(e,0,0,t,0,0);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.rotate=function(e){if(isNaN(e))throw i.error(\"jsPDF.context2d.rotate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");var t=new u(Math.cos(e),Math.sin(e),-Math.sin(e),Math.cos(e),0,0);this.ctx.transform=this.ctx.transform.multiply(t)},d.prototype.translate=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.translate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");var r=new u(1,0,0,1,e,t);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.transform=function(e,t,r,n,o,s){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s))throw i.error(\"jsPDF.context2d.transform: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");var a=new u(e,t,r,n,o,s);this.ctx.transform=this.ctx.transform.multiply(a)},d.prototype.setTransform=function(e,t,r,n,o,s){e=isNaN(e)?1:e,t=isNaN(t)?0:t,r=isNaN(r)?0:r,n=isNaN(n)?1:n,o=isNaN(o)?0:o,s=isNaN(s)?0:s,this.ctx.transform=new u(e,t,r,n,o,s)},d.prototype.drawImage=function(e,t,r,n,o,s,i,a,c){var l=this.pdf.getImageProperties(e),d=1,f=1,h=1,p=1;void 0!==n&&void 0!==a&&(h=a\u002Fn,p=c\u002Fo,d=l.width\u002Fn*a\u002Fn,f=l.height\u002Fo*c\u002Fo),void 0===s&&(s=t,i=r,t=0,r=0),void 0!==n&&void 0===a&&(a=n,c=o),void 0===n&&void 0===a&&(a=l.width,c=l.height);for(var m,y=this.ctx.transform.decompose(),b=T(y.rotate.shx),j=new u,_=(j=(j=(j=j.multiply(y.translate)).multiply(y.skew)).multiply(y.scale)).applyToRectangle(new A(s-t*h,i-r*p,n*d,o*f)),C=g.call(this,_),x=[],E=0;E\u003CC.length;E+=1)-1===x.indexOf(C[E])&&x.push(C[E]);if(w(x),this.autoPaging)for(var N=x[0],Q=x[x.length-1],F=N;F\u003CQ+1;F++){if(this.pdf.setPage(F),0!==this.ctx.clip_path.length){var U=this.path;m=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(m,this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY),B.call(this,\"fill\",!0),this.path=U}var S=JSON.parse(JSON.stringify(_));S=v([S],this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY)[0],this.pdf.addImage(e,\"JPEG\",S.x,S.y,S.w,S.h,null,null,b)}else this.pdf.addImage(e,\"JPEG\",_.x,_.y,_.w,_.h,null,null,b)};var g=function(e,t,r){var n=[];switch(t=t||this.pdf.internal.pageSize.width,r=r||this.pdf.internal.pageSize.height,e.type){default:case\"mt\":case\"lt\":n.push(Math.floor((e.y+this.posY)\u002Fr)+1);break;case\"arc\":n.push(Math.floor((e.y+this.posY-e.radius)\u002Fr)+1),n.push(Math.floor((e.y+this.posY+e.radius)\u002Fr)+1);break;case\"qct\":var o=H(this.ctx.lastPoint.x,this.ctx.lastPoint.y,e.x1,e.y1,e.x,e.y);n.push(Math.floor(o.y\u002Fr)+1),n.push(Math.floor((o.y+o.h)\u002Fr)+1);break;case\"bct\":var s=I(this.ctx.lastPoint.x,this.ctx.lastPoint.y,e.x1,e.y1,e.x2,e.y2,e.x,e.y);n.push(Math.floor(s.y\u002Fr)+1),n.push(Math.floor((s.y+s.h)\u002Fr)+1);break;case\"rect\":n.push(Math.floor((e.y+this.posY)\u002Fr)+1),n.push(Math.floor((e.y+e.h+this.posY)\u002Fr)+1)}for(var i=0;i\u003Cn.length;i+=1)for(;this.pdf.internal.getNumberOfPages()\u003Cn[i];)y.call(this);return n},y=function(){var e=this.fillStyle,t=this.strokeStyle,r=this.font,n=this.lineCap,o=this.lineWidth,s=this.lineJoin;this.pdf.addPage(),this.fillStyle=e,this.strokeStyle=t,this.font=r,this.lineCap=n,this.lineWidth=o,this.lineJoin=s},v=function(e,t,r){for(var n=0;n\u003Ce.length;n++)switch(e[n].type){case\"bct\":e[n].x2+=t,e[n].y2+=r;case\"qct\":e[n].x1+=t,e[n].y1+=r;case\"mt\":case\"lt\":case\"arc\":default:e[n].x+=t,e[n].y+=r}return e},w=function(e){return e.sort((function(e,t){return e-t}))},b=function(e,t){for(var r,n,o=this.fillStyle,s=this.strokeStyle,i=this.lineCap,a=this.lineWidth,A=a*this.ctx.transform.scaleX,u=this.lineJoin,c=JSON.parse(JSON.stringify(this.path)),l=JSON.parse(JSON.stringify(this.path)),d=[],f=0;f\u003Cl.length;f++)if(void 0!==l[f].x)for(var h=g.call(this,l[f]),p=0;p\u003Ch.length;p+=1)-1===d.indexOf(h[p])&&d.push(h[p]);for(var m=0;m\u003Cd.length;m++)for(;this.pdf.internal.getNumberOfPages()\u003Cd[m];)y.call(this);if(w(d),this.autoPaging)for(var b=d[0],j=d[d.length-1],_=b;_\u003Cj+1;_++){if(this.pdf.setPage(_),this.fillStyle=o,this.strokeStyle=s,this.lineCap=i,this.lineWidth=A,this.lineJoin=u,0!==this.ctx.clip_path.length){var C=this.path;r=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(r,this.posX,-1*this.pdf.internal.pageSize.height*(_-1)+this.posY),B.call(this,e,!0),this.path=C}n=JSON.parse(JSON.stringify(c)),this.path=v(n,this.posX,-1*this.pdf.internal.pageSize.height*(_-1)+this.posY),!1!==t&&0!==_||B.call(this,e,t),this.lineWidth=a}else this.lineWidth=A,B.call(this,e,t),this.lineWidth=a;this.path=c},B=function(e,t){if((\"stroke\"!==e||t||!m.call(this))&&(\"stroke\"===e||t||!p.call(this))){for(var r,n,o=[],s=this.path,i=0;i\u003Cs.length;i++){var a=s[i];switch(a.type){case\"begin\":o.push({begin:!0});break;case\"close\":o.push({close:!0});break;case\"mt\":o.push({start:a,deltas:[],abs:[]});break;case\"lt\":var A=o.length;if(!isNaN(s[i-1].x)&&(r=[a.x-s[i-1].x,a.y-s[i-1].y],A>0))for(;A>=0;A--)if(!0!==o[A-1].close&&!0!==o[A-1].begin){o[A-1].deltas.push(r),o[A-1].abs.push(a);break}break;case\"bct\":r=[a.x1-s[i-1].x,a.y1-s[i-1].y,a.x2-s[i-1].x,a.y2-s[i-1].y,a.x-s[i-1].x,a.y-s[i-1].y],o[o.length-1].deltas.push(r);break;case\"qct\":var u=s[i-1].x+2\u002F3*(a.x1-s[i-1].x),c=s[i-1].y+2\u002F3*(a.y1-s[i-1].y),l=a.x+2\u002F3*(a.x1-a.x),d=a.y+2\u002F3*(a.y1-a.y),f=a.x,h=a.y;r=[u-s[i-1].x,c-s[i-1].y,l-s[i-1].x,d-s[i-1].y,f-s[i-1].x,h-s[i-1].y],o[o.length-1].deltas.push(r);break;case\"arc\":o.push({deltas:[],abs:[],arc:!0}),Array.isArray(o[o.length-1].abs)&&o[o.length-1].abs.push(a)}}n=t?null:\"stroke\"===e?\"stroke\":\"fill\";for(var g=0;g\u003Co.length;g++){if(o[g].arc){for(var y=o[g].abs,v=0;v\u003Cy.length;v++){var w=y[v];\"arc\"===w.type?_.call(this,w.x,w.y,w.radius,w.startAngle,w.endAngle,w.counterclockwise,void 0,t):Q.call(this,w.x,w.y)}C.call(this,n),this.pdf.internal.out(\"h\")}if(!o[g].arc&&!0!==o[g].close&&!0!==o[g].begin){var b=o[g].start.x,B=o[g].start.y;F.call(this,o[g].deltas,b,B)}}n&&C.call(this,n),t&&x.call(this)}},j=function(e){var t=this.pdf.internal.getFontSize()\u002Fthis.pdf.internal.scaleFactor,r=t*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case\"bottom\":return e-r;case\"top\":return e+t-r;case\"hanging\":return e+t-2*r;case\"middle\":return e+t\u002F2-r;case\"ideographic\":return e;case\"alphabetic\":default:return e}};d.prototype.createLinearGradient=function(){var e=function(){};return e.colorStops=[],e.addColorStop=function(e,t){this.colorStops.push([e,t])},e.getColor=function(){return 0===this.colorStops.length?\"#000000\":this.colorStops[0][1]},e.isCanvasGradient=!0,e},d.prototype.createPattern=function(){return this.createLinearGradient()},d.prototype.createRadialGradient=function(){return this.createLinearGradient()};var _=function(e,t,r,n,o,s,i,a){for(var A=S.call(this,r,n,o,s),u=0;u\u003CA.length;u++){var c=A[u];0===u&&E.call(this,c.x1+e,c.y1+t),U.call(this,e,t,c.x2,c.y2,c.x3,c.y3,c.x4,c.y4)}a?x.call(this):C.call(this,i)},C=function(e){switch(e){case\"stroke\":this.pdf.internal.out(\"S\");break;case\"fill\":this.pdf.internal.out(\"f\")}},x=function(){this.pdf.clip(),this.pdf.discardPath()},E=function(e,t){this.pdf.internal.out(r(e)+\" \"+n(t)+\" m\")},N=function(e){var t;switch(e.align){case\"right\":case\"end\":t=\"right\";break;case\"center\":t=\"center\";break;case\"left\":case\"start\":default:t=\"left\"}var r=this.ctx.transform.applyToPoint(new a(e.x,e.y)),n=this.ctx.transform.decompose(),o=new u;o=(o=(o=o.multiply(n.translate)).multiply(n.skew)).multiply(n.scale);for(var s,i,c,l=this.pdf.getTextDimensions(e.text),d=this.ctx.transform.applyToRectangle(new A(e.x,e.y,l.w,l.h)),f=o.applyToRectangle(new A(e.x,e.y-l.h,l.w,l.h)),h=g.call(this,f),p=[],m=0;m\u003Ch.length;m+=1)-1===p.indexOf(h[m])&&p.push(h[m]);if(w(p),!0===this.autoPaging)for(var y=p[0],b=p[p.length-1],j=y;j\u003Cb+1;j++){if(this.pdf.setPage(j),0!==this.ctx.clip_path.length){var _=this.path;s=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(s,this.posX,-1*this.pdf.internal.pageSize.height*(j-1)+this.posY),B.call(this,\"fill\",!0),this.path=_}var C=JSON.parse(JSON.stringify(d));C=v([C],this.posX,-1*this.pdf.internal.pageSize.height*(j-1)+this.posY)[0],e.scale>=.01&&(i=this.pdf.internal.getFontSize(),this.pdf.setFontSize(i*e.scale),c=this.lineWidth,this.lineWidth=c*e.scale),this.pdf.text(e.text,C.x,C.y,{angle:e.angle,align:t,renderingMode:e.renderingMode,maxWidth:e.maxWidth}),e.scale>=.01&&(this.pdf.setFontSize(i),this.lineWidth=c)}else e.scale>=.01&&(i=this.pdf.internal.getFontSize(),this.pdf.setFontSize(i*e.scale),c=this.lineWidth,this.lineWidth=c*e.scale),this.pdf.text(e.text,r.x+this.posX,r.y+this.posY,{angle:e.angle,align:t,renderingMode:e.renderingMode,maxWidth:e.maxWidth}),e.scale>=.01&&(this.pdf.setFontSize(i),this.lineWidth=c)},Q=function(e,t,o,s){o=o||0,s=s||0,this.pdf.internal.out(r(e+o)+\" \"+n(t+s)+\" l\")},F=function(e,t,r){return this.pdf.lines(e,t,r,null,null)},U=function(e,r,n,i,a,A,u,c){this.pdf.internal.out([t(o(n+e)),t(s(i+r)),t(o(a+e)),t(s(A+r)),t(o(u+e)),t(s(c+r)),\"c\"].join(\" \"))},S=function(e,t,r,n){for(var o=2*Math.PI,s=Math.PI\u002F2;t>r;)t-=o;var i=Math.abs(r-t);i\u003Co&&n&&(i=o-i);for(var a=[],A=n?-1:1,u=t;i>1e-5;){var c=u+A*Math.min(i,s);a.push(L.call(this,e,u,c)),i-=Math.abs(c-u),u=c}return a},L=function(e,t,r){var n=(r-t)\u002F2,o=e*Math.cos(n),s=e*Math.sin(n),i=o,a=-s,A=i*i+a*a,u=A+i*o+a*s,c=4\u002F3*(Math.sqrt(2*A*u)-u)\u002F(i*s-a*o),l=i-c*a,d=a+c*i,f=l,h=-d,p=n+t,m=Math.cos(p),g=Math.sin(p);return{x1:e*Math.cos(t),y1:e*Math.sin(t),x2:l*m-d*g,y2:l*g+d*m,x3:f*m-h*g,y3:f*g+h*m,x4:e*Math.cos(r),y4:e*Math.sin(r)}},T=function(e){return 180*e\u002FMath.PI},H=function(e,t,r,n,o,s){var i=e+.5*(r-e),a=t+.5*(n-t),u=o+.5*(r-o),c=s+.5*(n-s),l=Math.min(e,o,i,u),d=Math.max(e,o,i,u),f=Math.min(t,s,a,c),h=Math.max(t,s,a,c);return new A(l,f,d-l,h-f)},I=function(e,t,r,n,o,s,i,a){var u,c,l,d,f,h,p,m,g,y,v,w,b,B,j=r-e,_=n-t,C=o-r,x=s-n,E=i-o,N=a-s;for(c=0;c\u003C41;c++)g=(p=(l=e+(u=c\u002F40)*j)+u*((f=r+u*C)-l))+u*(f+u*(o+u*E-f)-p),y=(m=(d=t+u*_)+u*((h=n+u*x)-d))+u*(h+u*(s+u*N-h)-m),0==c?(v=g,w=y,b=g,B=y):(v=Math.min(v,g),w=Math.min(w,y),b=Math.max(b,g),B=Math.max(B,y));return new A(Math.round(v),Math.round(w),Math.round(b-v),Math.round(B-w))}}(H.API),function(e){var t=function(e){var t,r,n,o,s,i,a,A,u,c;for(\u002F[^\\x00-\\xFF]\u002F.test(e),r=[],n=0,o=(e+=t=\"\\0\\0\\0\\0\".slice(e.length%4||4)).length;o>n;n+=4)0!==(s=(e.charCodeAt(n)\u003C\u003C24)+(e.charCodeAt(n+1)\u003C\u003C16)+(e.charCodeAt(n+2)\u003C\u003C8)+e.charCodeAt(n+3))?(i=(s=((s=((s=((s=(s-(c=s%85))\u002F85)-(u=s%85))\u002F85)-(A=s%85))\u002F85)-(a=s%85))\u002F85)%85,r.push(i+33,a+33,A+33,u+33,c+33)):r.push(122);return function(e,t){for(var r=t;r>0;r--)e.pop()}(r,t.length),String.fromCharCode.apply(String,r)+\"~>\"},r=function(e){var t,r,n,o,s,i=String,a=\"length\",A=255,u=\"charCodeAt\",c=\"slice\",l=\"replace\";for(e[c](-2),e=e[c](0,-2)[l](\u002F\\s\u002Fg,\"\")[l](\"z\",\"!!!!!\"),n=[],o=0,s=(e+=t=\"uuuuu\"[c](e[a]%5||5))[a];s>o;o+=5)r=52200625*(e[u](o)-33)+614125*(e[u](o+1)-33)+7225*(e[u](o+2)-33)+85*(e[u](o+3)-33)+(e[u](o+4)-33),n.push(A&r>>24,A&r>>16,A&r>>8,A&r);return function(e,t){for(var r=t;r>0;r--)e.pop()}(n,t[a]),i.fromCharCode.apply(i,n)},o=function(e){var t=new RegExp(\u002F^([0-9A-Fa-f]{2})+$\u002F);if(-1!==(e=e.replace(\u002F\\s\u002Fg,\"\")).indexOf(\">\")&&(e=e.substr(0,e.indexOf(\">\"))),e.length%2&&(e+=\"0\"),!1===t.test(e))return\"\";for(var r=\"\",n=0;n\u003Ce.length;n+=2)r+=String.fromCharCode(\"0x\"+(e[n]+e[n+1]));return r},s=function(e){for(var t=new Uint8Array(e.length),r=e.length;r--;)t[r]=e.charCodeAt(r);return(t=(0,n.zlibSync)(t)).reduce((function(e,t){return e+String.fromCharCode(t)}),\"\")};e.processDataByFilters=function(e,n){var i=0,a=e||\"\",A=[];for(\"string\"==typeof(n=n||[])&&(n=[n]),i=0;i\u003Cn.length;i+=1)switch(n[i]){case\"ASCII85Decode\":case\"\u002FASCII85Decode\":a=r(a),A.push(\"\u002FASCII85Encode\");break;case\"ASCII85Encode\":case\"\u002FASCII85Encode\":a=t(a),A.push(\"\u002FASCII85Decode\");break;case\"ASCIIHexDecode\":case\"\u002FASCIIHexDecode\":a=o(a),A.push(\"\u002FASCIIHexEncode\");break;case\"ASCIIHexEncode\":case\"\u002FASCIIHexEncode\":a=a.split(\"\").map((function(e){return(\"0\"+e.charCodeAt().toString(16)).slice(-2)})).join(\"\")+\">\",A.push(\"\u002FASCIIHexDecode\");break;case\"FlateEncode\":case\"\u002FFlateEncode\":a=s(a),A.push(\"\u002FFlateDecode\");break;default:throw new Error('The filter: \"'+n[i]+'\" is not implemented')}return{data:a,reverseChain:A.reverse().join(\" \")}}}(H.API),function(e){e.loadFile=function(e,t,r){return function(e,t,r){t=!1!==t,r=\"function\"==typeof r?r:function(){};var n=void 0;try{n=function(e,t,r){var n=new XMLHttpRequest,o=0,s=function(e){var t=e.length,r=[],n=String.fromCharCode;for(o=0;o\u003Ct;o+=1)r.push(n(255&e.charCodeAt(o)));return r.join(\"\")};if(n.open(\"GET\",e,!t),n.overrideMimeType(\"text\u002Fplain; charset=x-user-defined\"),!1===t&&(n.onload=function(){200===n.status?r(s(this.responseText)):r(void 0)}),n.send(null),t&&200===n.status)return s(n.responseText)}(e,t,r)}catch(e){}return n}(e,t,r)},e.loadImageFile=e.loadFile}(H.API),function(e){function t(){return(o.html2canvas?Promise.resolve(o.html2canvas):Promise.resolve().then(r.t.bind(r,\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\",23))).catch((function(e){return Promise.reject(new Error(\"Could not load html2canvas: \"+e))})).then((function(e){return e.default?e.default:e}))}function n(){return(o.DOMPurify?Promise.resolve(o.DOMPurify):Promise.resolve().then(r.t.bind(r,\".\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js\",23))).catch((function(e){return Promise.reject(new Error(\"Could not load dompurify: \"+e))})).then((function(e){return e.default?e.default:e}))}var s=function(e){var t=typeof e;return\"undefined\"===t?\"undefined\":\"string\"===t||e instanceof String?\"string\":\"number\"===t||e instanceof Number?\"number\":\"function\"===t||e instanceof Function?\"function\":e&&e.constructor===Array?\"array\":e&&1===e.nodeType?\"element\":\"object\"===t?\"object\":\"unknown\"},i=function(e,t){var r=document.createElement(e);for(var n in t.className&&(r.className=t.className),t.innerHTML&&t.dompurify&&(r.innerHTML=t.dompurify.sanitize(t.innerHTML)),t.style)r.style[n]=t.style[n];return r},a=function(e,t){for(var r=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),n=e.firstChild;n;n=n.nextSibling)!0!==t&&1===n.nodeType&&\"SCRIPT\"===n.nodeName||r.appendChild(a(n,t));return 1===e.nodeType&&(\"CANVAS\"===e.nodeName?(r.width=e.width,r.height=e.height,r.getContext(\"2d\").drawImage(e,0,0)):\"TEXTAREA\"!==e.nodeName&&\"SELECT\"!==e.nodeName||(r.value=e.value),r.addEventListener(\"load\",(function(){r.scrollTop=e.scrollTop,r.scrollLeft=e.scrollLeft}),!0)),r},A=function e(t){var r=Object.assign(e.convert(Promise.resolve()),JSON.parse(JSON.stringify(e.template))),n=e.convert(Promise.resolve(),r);return(n=n.setProgress(1,e,1,[e])).set(t)};(A.prototype=Object.create(Promise.prototype)).constructor=A,A.convert=function(e,t){return e.__proto__=t||A.prototype,e},A.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:\"transparent\"}},A.prototype.from=function(e,t){return this.then((function(){switch(t=t||function(e){switch(s(e)){case\"string\":return\"string\";case\"element\":return\"canvas\"===e.nodeName.toLowerCase()?\"canvas\":\"element\";default:return\"unknown\"}}(e)){case\"string\":return this.then(n).then((function(t){return this.set({src:i(\"div\",{innerHTML:e,dompurify:t})})}));case\"element\":return this.set({src:e});case\"canvas\":return this.set({canvas:e});case\"img\":return this.set({img:e});default:return this.error(\"Unknown source type.\")}}))},A.prototype.to=function(e){switch(e){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},A.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var e={position:\"relative\",display:\"inline-block\",width:Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth)+\"px\",left:0,right:0,top:0,margin:\"auto\",backgroundColor:this.opt.backgroundColor},t=a(this.prop.src,this.opt.html2canvas.javascriptEnabled);\"BODY\"===t.tagName&&(e.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+\"px\"),this.prop.overlay=i(\"div\",{className:\"html2pdf__overlay\",style:{position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:\"-100000px\",right:0,bottom:0,top:0}}),this.prop.container=i(\"div\",{className:\"html2pdf__container\",style:e}),this.prop.container.appendChild(t),this.prop.container.firstChild.appendChild(i(\"div\",{style:{clear:\"both\",border:\"0 none transparent\",margin:0,padding:0,height:0}})),this.prop.container.style.float=\"none\",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=\"relative\",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+\"px\"}))},A.prototype.toCanvas=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then(t).then((function(e){var t=Object.assign({},this.opt.html2canvas);return delete t.onrendered,e(this.prop.container,t)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toContext2d=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then(t).then((function(e){var t=this.opt.jsPDF,r=this.opt.fontFaces,n=Object.assign({async:!0,allowTaint:!0,scale:1,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete n.onrendered,t.context2d.autoPaging=!0,t.context2d.posX=this.opt.x,t.context2d.posY=this.opt.y,t.context2d.fontFaces=r,r)for(var o=0;o\u003Cr.length;++o){var s=r[o],i=s.src.find((function(e){return\"truetype\"===e.format}));i&&t.addFont(i.url,s.ref.name,s.ref.style)}return n.windowHeight=n.windowHeight||0,n.windowHeight=0==n.windowHeight?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):n.windowHeight,e(this.prop.container,n)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas.toDataURL(\"image\u002F\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=e}))},A.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then((function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF}))},A.prototype.output=function(e,t,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(e,t):this.outputPdf(e,t)},A.prototype.outputPdf=function(e,t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(e,t)}))},A.prototype.outputImg=function(e){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(e){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+e+'\" is not supported.'}}))},A.prototype.save=function(e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(e?{filename:e}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},A.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){this.prop.callback(this.prop.pdf)}))},A.prototype.set=function(e){if(\"object\"!==s(e))return this;var t=Object.keys(e||{}).map((function(t){if(t in A.template.prop)return function(){this.prop[t]=e[t]};switch(t){case\"margin\":return this.setMargin.bind(this,e.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=e.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,e.pageSize);default:return function(){this.opt[t]=e[t]}}}),this);return this.then((function(){return this.thenList(t)}))},A.prototype.get=function(e,t){return this.then((function(){var r=e in A.template.prop?this.prop[e]:this.opt[e];return t?t(r):r}))},A.prototype.setMargin=function(e){return this.then((function(){switch(s(e)){case\"number\":e=[e,e,e,e];case\"array\":if(2===e.length&&(e=[e[0],e[1],e[0],e[1]]),4===e.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=e})).then(this.setPageSize)},A.prototype.setPageSize=function(e){function t(e,t){return Math.floor(e*t\u002F72*96)}return this.then((function(){(e=e||H.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(e.inner={width:e.width-this.opt.margin[1]-this.opt.margin[3],height:e.height-this.opt.margin[0]-this.opt.margin[2]},e.inner.px={width:t(e.inner.width,e.k),height:t(e.inner.height,e.k)},e.inner.ratio=e.inner.height\u002Fe.inner.width),this.prop.pageSize=e}))},A.prototype.setProgress=function(e,t,r,n){return null!=e&&(this.progress.val=e),null!=t&&(this.progress.state=t),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val\u002Fthis.progress.state,this},A.prototype.updateProgress=function(e,t,r,n){return this.setProgress(e?this.progress.val+e:null,t||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},A.prototype.then=function(e,t){var r=this;return this.thenCore(e,t,(function(e,t){return r.updateProgress(null,null,1,[e]),Promise.prototype.then.call(this,(function(t){return r.updateProgress(null,e),t})).then(e,t).then((function(e){return r.updateProgress(1),e}))}))},A.prototype.thenCore=function(e,t,r){r=r||Promise.prototype.then,e&&(e=e.bind(this)),t&&(t=t.bind(this));var n=-1!==Promise.toString().indexOf(\"[native code]\")&&\"Promise\"===Promise.name?this:A.convert(Object.assign({},this),Promise.prototype),o=r.call(n,e,t);return A.convert(o,this.__proto__)},A.prototype.thenExternal=function(e,t){return Promise.prototype.then.call(this,e,t)},A.prototype.thenList=function(e){var t=this;return e.forEach((function(e){t=t.thenCore(e)})),t},A.prototype.catch=function(e){e&&(e=e.bind(this));var t=Promise.prototype.catch.call(this,e);return A.convert(t,this)},A.prototype.catchExternal=function(e){return Promise.prototype.catch.call(this,e)},A.prototype.error=function(e){return this.then((function(){throw new Error(e)}))},A.prototype.using=A.prototype.set,A.prototype.saveAs=A.prototype.save,A.prototype.export=A.prototype.output,A.prototype.run=A.prototype.then,H.getPageSize=function(e,t,r){if(\"object\"==typeof e){var n=e;e=n.orientation,t=n.unit||t,r=n.format||r}t=t||\"mm\",r=r||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase();var o,s=(\"\"+r).toLowerCase(),i={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(t){case\"pt\":o=1;break;case\"mm\":o=72\u002F25.4;break;case\"cm\":o=72\u002F2.54;break;case\"in\":o=72;break;case\"px\":o=.75;break;case\"pc\":case\"em\":o=12;break;case\"ex\":o=6;break;default:throw\"Invalid unit: \"+t}var a,A=0,u=0;if(i.hasOwnProperty(s))A=i[s][1]\u002Fo,u=i[s][0]\u002Fo;else try{A=r[1],u=r[0]}catch(e){throw new Error(\"Invalid format: \"+r)}if(\"p\"===e||\"portrait\"===e)e=\"p\",u>A&&(a=u,u=A,A=a);else{if(\"l\"!==e&&\"landscape\"!==e)throw\"Invalid orientation: \"+e;e=\"l\",A>u&&(a=u,u=A,A=a)}return{width:u,height:A,unit:t,k:o,orientation:e}},e.html=function(e,t){(t=t||{}).callback=t.callback||function(){},t.html2canvas=t.html2canvas||{},t.html2canvas.canvas=t.html2canvas.canvas||this.canvas,t.jsPDF=t.jsPDF||this,t.fontFaces=t.fontFaces?t.fontFaces.map(Ue):null;var r=new A(t);return t.worker?r:r.from(e).doCallback()}}(H.API),H.API.addJS=function(e){return Me=e,this.internal.events.subscribe(\"postPutResources\",(function(){ke=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FNames [(EmbeddedJS) \"+(ke+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),Re=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FS \u002FJavaScript\"),this.internal.out(\"\u002FJS (\"+Me+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){void 0!==ke&&void 0!==Re&&this.internal.out(\"\u002FNames \u003C\u003C\u002FJavaScript \"+ke+\" 0 R>>\")})),this},function(e){var t;e.events.push([\"postPutResources\",function(){var e=this,r=\u002F^(\\d+) 0 obj$\u002F;if(this.outline.root.children.length>0)for(var n=e.outline.render().split(\u002F\\r\\n\u002F),o=0;o\u003Cn.length;o++){var s=n[o],i=r.exec(s);if(null!=i){var a=i[1];e.internal.newObjectDeferredBegin(a,!1)}e.internal.write(s)}if(this.outline.createNamedDestinations){var A=this.internal.pages.length,u=[];for(o=0;o\u003CA;o++){var c=e.internal.newObject();u.push(c);var l=e.internal.getPageInfo(o+1);e.internal.write(\"\u003C\u003C \u002FD[\"+l.objId+\" 0 R \u002FXYZ null null null]>> endobj\")}var d=e.internal.newObject();for(e.internal.write(\"\u003C\u003C \u002FNames [ \"),o=0;o\u003Cu.length;o++)e.internal.write(\"(page_\"+(o+1)+\")\"+u[o]+\" 0 R\");e.internal.write(\" ] >>\",\"endobj\"),t=e.internal.newObject(),e.internal.write(\"\u003C\u003C \u002FDests \"+d+\" 0 R\"),e.internal.write(\">>\",\"endobj\")}}]),e.events.push([\"putCatalog\",function(){this.outline.root.children.length>0&&(this.internal.write(\"\u002FOutlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&this.internal.write(\"\u002FNames \"+t+\" 0 R\"))}]),e.events.push([\"initialized\",function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(e,t,r){var n={title:t,options:r,children:[]};return null==e&&(e=this.root),e.children.push(n),n},e.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(t){t.id=e.internal.newObjectDeferred();for(var r=0;r\u003Ct.children.length;r++)this.genIds_r(t.children[r])},e.outline.renderRoot=function(e){this.objStart(e),this.line(\"\u002FType \u002FOutlines\"),e.children.length>0&&(this.line(\"\u002FFirst \"+this.makeRef(e.children[0])),this.line(\"\u002FLast \"+this.makeRef(e.children[e.children.length-1]))),this.line(\"\u002FCount \"+this.count_r({count:0},e)),this.objEnd()},e.outline.renderItems=function(t){for(var r=this.ctx.pdf.internal.getVerticalCoordinateString,n=0;n\u003Ct.children.length;n++){var o=t.children[n];this.objStart(o),this.line(\"\u002FTitle \"+this.makeString(o.title)),this.line(\"\u002FParent \"+this.makeRef(t)),n>0&&this.line(\"\u002FPrev \"+this.makeRef(t.children[n-1])),n\u003Ct.children.length-1&&this.line(\"\u002FNext \"+this.makeRef(t.children[n+1])),o.children.length>0&&(this.line(\"\u002FFirst \"+this.makeRef(o.children[0])),this.line(\"\u002FLast \"+this.makeRef(o.children[o.children.length-1])));var s=this.count=this.count_r({count:0},o);if(s>0&&this.line(\"\u002FCount \"+s),o.options&&o.options.pageNumber){var i=e.internal.getPageInfo(o.options.pageNumber);this.line(\"\u002FDest [\"+i.objId+\" 0 R \u002FXYZ 0 \"+r(0)+\" 0]\")}this.objEnd()}for(var a=0;a\u003Ct.children.length;a++)this.renderItems(t.children[a])},e.outline.line=function(e){this.ctx.val+=e+\"\\r\\n\"},e.outline.makeRef=function(e){return e.id+\" 0 R\"},e.outline.makeString=function(t){return\"(\"+e.internal.pdfEscape(t)+\")\"},e.outline.objStart=function(e){this.ctx.val+=\"\\r\\n\"+e.id+\" 0 obj\\r\\n\u003C\u003C\\r\\n\"},e.outline.objEnd=function(){this.ctx.val+=\">> \\r\\nendobj\\r\\n\"},e.outline.count_r=function(e,t){for(var r=0;r\u003Ct.children.length;r++)e.count++,this.count_r(e,t.children[r]);return e.count}}])}(H.API),function(e){var t=[192,193,194,195,196,197,198,199];e.processJPEG=function(e,r,n,o,s,i){var a,A=this.decode.DCT_DECODE,u=null;if(\"string\"==typeof e||this.__addimage__.isArrayBuffer(e)||this.__addimage__.isArrayBufferView(e)){switch(e=s||e,e=this.__addimage__.isArrayBuffer(e)?new Uint8Array(e):e,(a=function(e){for(var r,n=256*e.charCodeAt(4)+e.charCodeAt(5),o=e.length,s={width:0,height:0,numcomponents:1},i=4;i\u003Co;i+=2){if(i+=n,-1!==t.indexOf(e.charCodeAt(i+1))){r=256*e.charCodeAt(i+5)+e.charCodeAt(i+6),s={width:256*e.charCodeAt(i+7)+e.charCodeAt(i+8),height:r,numcomponents:e.charCodeAt(i+9)};break}n=256*e.charCodeAt(i+2)+e.charCodeAt(i+3)}return s}(e=this.__addimage__.isArrayBufferView(e)?this.__addimage__.arrayBufferToBinaryString(e):e)).numcomponents){case 1:i=this.color_spaces.DEVICE_GRAY;break;case 4:i=this.color_spaces.DEVICE_CMYK;break;case 3:i=this.color_spaces.DEVICE_RGB}u={data:e,width:a.width,height:a.height,colorSpace:i,bitsPerComponent:8,filter:A,index:r,alias:n}}return u}}(H.API);var Ke,ze,Ve,qe,Ge,Xe=function(){var e,t,r;function s(e){var t,r,n,o,s,i,a,A,u,c,l,d,f,h;for(this.data=e,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.animation=null,this.text={},i=null;;){switch(t=this.readUInt32(),u=function(){var e,t;for(t=[],e=0;e\u003C4;++e)t.push(String.fromCharCode(this.data[this.pos++]));return t}.call(this).join(\"\")){case\"IHDR\":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case\"acTL\":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1\u002F0,frames:[]};break;case\"PLTE\":this.palette=this.read(t);break;case\"fcTL\":i&&this.animation.frames.push(i),this.pos+=4,i={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()},s=this.readUInt16(),o=this.readUInt16()||100,i.delay=1e3*s\u002Fo,i.disposeOp=this.data[this.pos++],i.blendOp=this.data[this.pos++],i.data=[];break;case\"IDAT\":case\"fdAT\":for(\"fdAT\"===u&&(this.pos+=4,t-=4),e=(null!=i?i.data:void 0)||this.imgData,d=0;0\u003C=t?d\u003Ct:d>t;0\u003C=t?++d:--d)e.push(this.data[this.pos++]);break;case\"tRNS\":switch(this.transparency={},this.colorType){case 3:if(n=this.palette.length\u002F3,this.transparency.indexed=this.read(t),this.transparency.indexed.length>n)throw new Error(\"More transparent colors than palette size\");if((c=n-this.transparency.indexed.length)>0)for(f=0;0\u003C=c?f\u003Cc:f>c;0\u003C=c?++f:--f)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(t)[0];break;case 2:this.transparency.rgb=this.read(t)}break;case\"tEXt\":a=(l=this.read(t)).indexOf(0),A=String.fromCharCode.apply(String,l.slice(0,a)),this.text[A]=String.fromCharCode.apply(String,l.slice(a+1));break;case\"IEND\":return i&&this.animation.frames.push(i),this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this),this.hasAlphaChannel=4===(h=this.colorType)||6===h,r=this.colors+(this.hasAlphaChannel?1:0),this.pixelBitlength=this.bits*r,this.colorSpace=function(){switch(this.colors){case 1:return\"DeviceGray\";case 3:return\"DeviceRGB\"}}.call(this),void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=t}if(this.pos+=4,this.pos>this.data.length)throw new Error(\"Incomplete or corrupt PNG file\")}}s.prototype.read=function(e){var t,r;for(r=[],t=0;0\u003C=e?t\u003Ce:t>e;0\u003C=e?++t:--t)r.push(this.data[this.pos++]);return r},s.prototype.readUInt32=function(){return this.data[this.pos++]\u003C\u003C24|this.data[this.pos++]\u003C\u003C16|this.data[this.pos++]\u003C\u003C8|this.data[this.pos++]},s.prototype.readUInt16=function(){return this.data[this.pos++]\u003C\u003C8|this.data[this.pos++]},s.prototype.decodePixels=function(e){var t=this.pixelBitlength\u002F8,r=new Uint8Array(this.width*this.height*t),o=0,s=this;if(null==e&&(e=this.imgData),0===e.length)return new Uint8Array(0);function i(n,i,a,A){var u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F=Math.ceil((s.width-n)\u002Fa),U=Math.ceil((s.height-i)\u002FA),S=s.width==F&&s.height==U;for(B=t*F,w=S?r:new Uint8Array(B*U),h=e.length,b=0,c=0;b\u003CU&&o\u003Ch;){switch(e[o++]){case 0:for(d=C=0;C\u003CB;d=C+=1)w[c++]=e[o++];break;case 1:for(d=x=0;x\u003CB;d=x+=1)u=e[o++],f=d\u003Ct?0:w[c-t],w[c++]=(u+f)%256;break;case 2:for(d=E=0;E\u003CB;d=E+=1)u=e[o++],l=(d-d%t)\u002Ft,j=b&&w[(b-1)*B+l*t+d%t],w[c++]=(j+u)%256;break;case 3:for(d=N=0;N\u003CB;d=N+=1)u=e[o++],l=(d-d%t)\u002Ft,f=d\u003Ct?0:w[c-t],j=b&&w[(b-1)*B+l*t+d%t],w[c++]=(u+Math.floor((f+j)\u002F2))%256;break;case 4:for(d=Q=0;Q\u003CB;d=Q+=1)u=e[o++],l=(d-d%t)\u002Ft,f=d\u003Ct?0:w[c-t],0===b?j=_=0:(j=w[(b-1)*B+l*t+d%t],_=l&&w[(b-1)*B+(l-1)*t+d%t]),p=f+j-_,m=Math.abs(p-f),y=Math.abs(p-j),v=Math.abs(p-_),g=m\u003C=y&&m\u003C=v?f:y\u003C=v?j:_,w[c++]=(u+g)%256;break;default:throw new Error(\"Invalid filter algorithm: \"+e[o-1])}if(!S){var L=((i+b*A)*s.width+n)*t,T=b*B;for(d=0;d\u003CF;d+=1){for(var H=0;H\u003Ct;H+=1)r[L++]=w[T++];L+=(a-1)*t}}b++}}return e=(0,n.unzlibSync)(e),1==s.interlaceMethod?(i(0,0,8,8),i(4,0,8,8),i(0,4,4,8),i(2,0,4,4),i(0,2,2,4),i(1,0,2,2),i(0,1,1,2)):i(0,0,1,1),r},s.prototype.decodePalette=function(){var e,t,r,n,o,s,i,a,A;for(r=this.palette,s=this.transparency.indexed||[],o=new Uint8Array((s.length||0)+r.length),n=0,e=0,t=i=0,a=r.length;i\u003Ca;t=i+=3)o[n++]=r[t],o[n++]=r[t+1],o[n++]=r[t+2],o[n++]=null!=(A=s[e++])?A:255;return o},s.prototype.copyToImageData=function(e,t){var r,n,o,s,i,a,A,u,c,l,d;if(n=this.colors,c=null,r=this.hasAlphaChannel,this.palette.length&&(c=null!=(d=this._decodedPalette)?d:this._decodedPalette=this.decodePalette(),n=4,r=!0),u=(o=e.data||e).length,i=c||t,s=a=0,1===n)for(;s\u003Cu;)A=c?4*t[s\u002F4]:a,l=i[A++],o[s++]=l,o[s++]=l,o[s++]=l,o[s++]=r?i[A++]:255,a=A;else for(;s\u003Cu;)A=c?4*t[s\u002F4]:a,o[s++]=i[A++],o[s++]=i[A++],o[s++]=i[A++],o[s++]=r?i[A++]:255,a=A},s.prototype.decode=function(){var e;return e=new Uint8Array(this.width*this.height*4),this.copyToImageData(e,this.decodePixels()),e};var i=function(){if(\"[object Window]\"===Object.prototype.toString.call(o)){try{t=o.document.createElement(\"canvas\"),r=t.getContext(\"2d\")}catch(e){return!1}return!0}return!1};return i(),e=function(e){var n;if(!0===i())return r.width=e.width,r.height=e.height,r.clearRect(0,0,e.width,e.height),r.putImageData(e,0,0),(n=new Image).src=t.toDataURL(),n;throw new Error(\"This method requires a Browser with Canvas-capability.\")},s.prototype.decodeFrames=function(t){var r,n,o,s,i,a,A,u;if(this.animation){for(u=[],n=i=0,a=(A=this.animation.frames).length;i\u003Ca;n=++i)r=A[n],o=t.createImageData(r.width,r.height),s=this.decodePixels(new Uint8Array(r.data)),this.copyToImageData(o,s),r.imageData=o,u.push(r.image=e(o));return u}},s.prototype.renderFrame=function(e,t){var r,n,o;return r=(n=this.animation.frames)[t],o=n[t-1],0===t&&e.clearRect(0,0,this.width,this.height),1===(null!=o?o.disposeOp:void 0)?e.clearRect(o.xOffset,o.yOffset,o.width,o.height):2===(null!=o?o.disposeOp:void 0)&&e.putImageData(o.imageData,o.xOffset,o.yOffset),0===r.blendOp&&e.clearRect(r.xOffset,r.yOffset,r.width,r.height),e.drawImage(r.image,r.xOffset,r.yOffset)},s.prototype.animate=function(e){var t,r,n,o,s,i,a=this;return r=0,i=this.animation,o=i.numFrames,n=i.frames,s=i.numPlays,(t=function(){var i,A;if(i=r++%o,A=n[i],a.renderFrame(e,i),o>1&&r\u002Fo\u003Cs)return a.animation._timeout=setTimeout(t,A.delay)})()},s.prototype.stopAnimation=function(){var e;return clearTimeout(null!=(e=this.animation)?e._timeout:void 0)},s.prototype.render=function(e){var t,r;return e._png&&e._png.stopAnimation(),e._png=this,e.width=this.width,e.height=this.height,t=e.getContext(\"2d\"),this.animation?(this.decodeFrames(t),this.animate(t)):(r=t.createImageData(this.width,this.height),this.copyToImageData(r,this.decodePixels()),t.putImageData(r,0,0))},s}();function We(e){var t=0;if(71!==e[t++]||73!==e[t++]||70!==e[t++]||56!==e[t++]||56!=(e[t++]+1&253)||97!==e[t++])throw new Error(\"Invalid GIF 87a\u002F89a header.\");var r=e[t++]|e[t++]\u003C\u003C8,n=e[t++]|e[t++]\u003C\u003C8,o=e[t++],s=o>>7,i=1\u003C\u003C1+(7&o);e[t++],e[t++];var a=null,A=null;s&&(a=t,A=i,t+=3*i);var u=!0,c=[],l=0,d=null,f=0,h=null;for(this.width=r,this.height=n;u&&t\u003Ce.length;)switch(e[t++]){case 33:switch(e[t++]){case 255:if(11!==e[t]||78==e[t+1]&&69==e[t+2]&&84==e[t+3]&&83==e[t+4]&&67==e[t+5]&&65==e[t+6]&&80==e[t+7]&&69==e[t+8]&&50==e[t+9]&&46==e[t+10]&&48==e[t+11]&&3==e[t+12]&&1==e[t+13]&&0==e[t+16])t+=14,h=e[t++]|e[t++]\u003C\u003C8,t++;else for(t+=12;;){if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}break;case 249:if(4!==e[t++]||0!==e[t+4])throw new Error(\"Invalid graphics extension block.\");var p=e[t++];l=e[t++]|e[t++]\u003C\u003C8,d=e[t++],0==(1&p)&&(d=null),f=p>>2&7,t++;break;case 254:for(;;){if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}break;default:throw new Error(\"Unknown graphic control label: 0x\"+e[t-1].toString(16))}break;case 44:var m=e[t++]|e[t++]\u003C\u003C8,g=e[t++]|e[t++]\u003C\u003C8,y=e[t++]|e[t++]\u003C\u003C8,v=e[t++]|e[t++]\u003C\u003C8,w=e[t++],b=w>>6&1,B=1\u003C\u003C1+(7&w),j=a,_=A,C=!1;w>>7&&(C=!0,j=t,_=B,t+=3*B);var x=t;for(t++;;){var E;if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}c.push({x:m,y:g,width:y,height:v,has_local_palette:C,palette_offset:j,palette_size:_,data_offset:x,data_length:t-x,transparent_index:d,interlaced:!!b,delay:l,disposal:f});break;case 59:u=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+e[t-1].toString(16))}this.numFrames=function(){return c.length},this.loopCount=function(){return h},this.frameInfo=function(e){if(e\u003C0||e>=c.length)throw new Error(\"Frame index out of range.\");return c[e]},this.decodeAndBlitFrameBGRA=function(t,n){var o=this.frameInfo(t),s=o.width*o.height,i=new Uint8Array(s);Je(e,o.data_offset,i,s);var a=o.palette_offset,A=o.transparent_index;null===A&&(A=256);var u=o.width,c=r-u,l=u,d=4*(o.y*r+o.x),f=4*((o.y+o.height)*r+o.x),h=d,p=4*c;!0===o.interlaced&&(p+=4*r*7);for(var m=8,g=0,y=i.length;g\u003Cy;++g){var v=i[g];if(0===l&&(l=u,(h+=p)>=f&&(p=4*c+4*r*(m-1),h=d+(u+c)*(m\u003C\u003C1),m>>=1)),v===A)h+=4;else{var w=e[a+3*v],b=e[a+3*v+1],B=e[a+3*v+2];n[h++]=B,n[h++]=b,n[h++]=w,n[h++]=255}--l}},this.decodeAndBlitFrameRGBA=function(t,n){var o=this.frameInfo(t),s=o.width*o.height,i=new Uint8Array(s);Je(e,o.data_offset,i,s);var a=o.palette_offset,A=o.transparent_index;null===A&&(A=256);var u=o.width,c=r-u,l=u,d=4*(o.y*r+o.x),f=4*((o.y+o.height)*r+o.x),h=d,p=4*c;!0===o.interlaced&&(p+=4*r*7);for(var m=8,g=0,y=i.length;g\u003Cy;++g){var v=i[g];if(0===l&&(l=u,(h+=p)>=f&&(p=4*c+4*r*(m-1),h=d+(u+c)*(m\u003C\u003C1),m>>=1)),v===A)h+=4;else{var w=e[a+3*v],b=e[a+3*v+1],B=e[a+3*v+2];n[h++]=w,n[h++]=b,n[h++]=B,n[h++]=255}--l}}}function Je(e,t,r,n){for(var o=e[t++],s=1\u003C\u003Co,a=s+1,A=a+1,u=o+1,c=(1\u003C\u003Cu)-1,l=0,d=0,f=0,h=e[t++],p=new Int32Array(4096),m=null;;){for(;l\u003C16&&0!==h;)d|=e[t++]\u003C\u003Cl,l+=8,1===h?h=e[t++]:--h;if(l\u003Cu)break;var g=d&c;if(d>>=u,l-=u,g!==s){if(g===a)break;for(var y=g\u003CA?g:m,v=0,w=y;w>s;)w=p[w]>>8,++v;var b=w;if(f+v+(y!==g?1:0)>n)return void i.log(\"Warning, gif stream longer than expected.\");r[f++]=b;var B=f+=v;for(y!==g&&(r[f++]=b),w=y;v--;)w=p[w],r[--B]=255&w,w>>=8;null!==m&&A\u003C4096&&(p[A++]=m\u003C\u003C8|b,A>=c+1&&u\u003C12&&(++u,c=c\u003C\u003C1|1)),m=g}else A=a+1,c=(1\u003C\u003C(u=o+1))-1,m=null}return f!==n&&i.log(\"Warning, gif stream shorter than expected.\"),r}function Ye(e){var t,r,n,o,s,i=Math.floor,a=new Array(64),A=new Array(64),u=new Array(64),c=new Array(64),l=new Array(65535),d=new Array(65535),f=new Array(64),h=new Array(64),p=[],m=0,g=7,y=new Array(64),v=new Array(64),w=new Array(64),b=new Array(256),B=new Array(2048),j=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],x=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],E=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],N=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],Q=[0,1,2,3,4,5,6,7,8,9,10,11],F=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],U=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function S(e,t){for(var r=0,n=0,o=new Array,s=1;s\u003C=16;s++){for(var i=1;i\u003C=e[s];i++)o[t[n]]=[],o[t[n]][0]=r,o[t[n]][1]=s,n++,r++;r*=2}return o}function L(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1\u003C\u003Cr&&(m|=1\u003C\u003Cg),r--,--g\u003C0&&(255==m?(T(255),T(0)):T(m),g=7,m=0)}function T(e){p.push(e)}function H(e){T(e>>8&255),T(255&e)}function I(e,t,r,n,o){for(var s,i=o[0],a=o[240],A=function(e,t){var r,n,o,s,i,a,A,u,c,l,d=0;for(c=0;c\u003C8;++c){r=e[d],n=e[d+1],o=e[d+2],s=e[d+3],i=e[d+4],a=e[d+5],A=e[d+6];var h=r+(u=e[d+7]),p=r-u,m=n+A,g=n-A,y=o+a,v=o-a,w=s+i,b=s-i,B=h+w,j=h-w,_=m+y,C=m-y;e[d]=B+_,e[d+4]=B-_;var x=.707106781*(C+j);e[d+2]=j+x,e[d+6]=j-x;var E=.382683433*((B=b+v)-(C=g+p)),N=.5411961*B+E,Q=1.306562965*C+E,F=.707106781*(_=v+g),U=p+F,S=p-F;e[d+5]=S+N,e[d+3]=S-N,e[d+1]=U+Q,e[d+7]=U-Q,d+=8}for(d=0,c=0;c\u003C8;++c){r=e[d],n=e[d+8],o=e[d+16],s=e[d+24],i=e[d+32],a=e[d+40],A=e[d+48];var L=r+(u=e[d+56]),T=r-u,H=n+A,I=n-A,P=o+a,O=o-a,k=s+i,R=s-i,M=L+k,D=L-k,K=H+P,z=H-P;e[d]=M+K,e[d+32]=M-K;var V=.707106781*(z+D);e[d+16]=D+V,e[d+48]=D-V;var q=.382683433*((M=R+O)-(z=I+T)),G=.5411961*M+q,X=1.306562965*z+q,W=.707106781*(K=O+I),J=T+W,Y=T-W;e[d+40]=Y+G,e[d+24]=Y-G,e[d+8]=J+X,e[d+56]=J-X,d++}for(c=0;c\u003C64;++c)l=e[c]*t[c],f[c]=l>0?l+.5|0:l-.5|0;return f}(e,t),u=0;u\u003C64;++u)h[j[u]]=A[u];var c=h[0]-r;r=h[0],0==c?L(n[0]):(L(n[d[s=32767+c]]),L(l[s]));for(var p=63;p>0&&0==h[p];)p--;if(0==p)return L(i),r;for(var m,g=1;g\u003C=p;){for(var y=g;0==h[g]&&g\u003C=p;)++g;var v=g-y;if(v>=16){m=v>>4;for(var w=1;w\u003C=m;++w)L(a);v&=15}s=32767+h[g],L(o[(v\u003C\u003C4)+d[s]]),L(l[s]),g++}return 63!=p&&L(i),r}function P(e){e=Math.min(Math.max(e,1),100),s!=e&&(function(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r\u003C64;r++){var n=i((t[r]*e+50)\u002F100);n=Math.min(Math.max(n,1),255),a[j[r]]=n}for(var o=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],s=0;s\u003C64;s++){var l=i((o[s]*e+50)\u002F100);l=Math.min(Math.max(l,1),255),A[j[s]]=l}for(var d=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],f=0,h=0;h\u003C8;h++)for(var p=0;p\u003C8;p++)u[f]=1\u002F(a[j[f]]*d[h]*d[p]*8),c[f]=1\u002F(A[j[f]]*d[h]*d[p]*8),f++}(e\u003C50?Math.floor(5e3\u002Fe):Math.floor(200-2*e)),s=e)}this.encode=function(e,s){s&&P(s),p=new Array,m=0,g=7,H(65496),H(65504),H(16),T(74),T(70),T(73),T(70),T(0),T(1),T(1),T(0),H(1),H(1),T(0),T(0),function(){H(65499),H(132),T(0);for(var e=0;e\u003C64;e++)T(a[e]);T(1);for(var t=0;t\u003C64;t++)T(A[t])}(),function(e,t){H(65472),H(17),T(8),H(t),H(e),T(3),T(1),T(17),T(0),T(2),T(17),T(1),T(3),T(17),T(1)}(e.width,e.height),function(){H(65476),H(418),T(0);for(var e=0;e\u003C16;e++)T(_[e+1]);for(var t=0;t\u003C=11;t++)T(C[t]);T(16);for(var r=0;r\u003C16;r++)T(x[r+1]);for(var n=0;n\u003C=161;n++)T(E[n]);T(1);for(var o=0;o\u003C16;o++)T(N[o+1]);for(var s=0;s\u003C=11;s++)T(Q[s]);T(17);for(var i=0;i\u003C16;i++)T(F[i+1]);for(var a=0;a\u003C=161;a++)T(U[a])}(),H(65498),H(12),T(3),T(1),T(0),T(2),T(17),T(3),T(17),T(0),T(63),T(0);var i=0,l=0,d=0;m=0,g=7,this.encode.displayName=\"_encode_\";for(var f,h,b,j,S,O,k,R,M,D=e.data,K=e.width,z=e.height,V=4*K,q=0;q\u003Cz;){for(f=0;f\u003CV;){for(S=V*q+f,k=-1,R=0,M=0;M\u003C64;M++)O=S+(R=M>>3)*V+(k=4*(7&M)),q+R>=z&&(O-=V*(q+1+R-z)),f+k>=V&&(O-=f+k-V+4),h=D[O++],b=D[O++],j=D[O++],y[M]=(B[h]+B[b+256>>0]+B[j+512>>0]>>16)-128,v[M]=(B[h+768>>0]+B[b+1024>>0]+B[j+1280>>0]>>16)-128,w[M]=(B[h+1280>>0]+B[b+1536>>0]+B[j+1792>>0]>>16)-128;i=I(y,u,i,t,n),l=I(v,c,l,r,o),d=I(w,c,d,r,o),f+=32}q+=8}if(g>=0){var G=[];G[1]=g+1,G[0]=(1\u003C\u003Cg+1)-1,L(G)}return H(65497),new Uint8Array(p)},e=e||50,function(){for(var e=String.fromCharCode,t=0;t\u003C256;t++)b[t]=e(t)}(),t=S(_,C),r=S(N,Q),n=S(x,E),o=S(F,U),function(){for(var e=1,t=2,r=1;r\u003C=15;r++){for(var n=e;n\u003Ct;n++)d[32767+n]=r,l[32767+n]=[],l[32767+n][1]=r,l[32767+n][0]=n;for(var o=-(t-1);o\u003C=-e;o++)d[32767+o]=r,l[32767+o]=[],l[32767+o][1]=r,l[32767+o][0]=t-1+o;e\u003C\u003C=1,t\u003C\u003C=1}}(),function(){for(var e=0;e\u003C256;e++)B[e]=19595*e,B[e+256>>0]=38470*e,B[e+512>>0]=7471*e+32768,B[e+768>>0]=-11059*e,B[e+1024>>0]=-21709*e,B[e+1280>>0]=32768*e+8421375,B[e+1536>>0]=-27439*e,B[e+1792>>0]=-5329*e}(),P(e)}function Ze(e,t){if(this.pos=0,this.buffer=e,this.datav=new DataView(e.buffer),this.is_with_alpha=!!t,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag))throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}function $e(e){function t(e){if(!e)throw Error(\"assert :P\")}function r(e,t,r){for(var n=0;4>n;n++)if(e[t+n]!=r.charCodeAt(n))return!0;return!1}function n(e,t,r,n,o){for(var s=0;s\u003Co;s++)e[t+s]=r[n+s]}function o(e,t,r,n){for(var o=0;o\u003Cn;o++)e[t+o]=r}function s(e){return new Int32Array(e)}function i(e,t){for(var r=[],n=0;n\u003Ce;n++)r.push(new t);return r}function a(e,t){var r=[];return function e(r,n,o){for(var s=o[n],i=0;i\u003Cs&&(r.push(o.length>n+1?[]:new t),!(o.length\u003Cn+1));i++)e(r[i],n+1,o)}(r,0,e),r}function A(e,t){for(var r=\"\",n=0;n\u003C4;n++)r+=String.fromCharCode(e[t++]);return r}function u(e,t){return(e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16)>>>0}function c(e,t){return(e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16|e[t+3]\u003C\u003C24)>>>0}new($e=function(){var e=this;function A(e,t){for(var r=1\u003C\u003Ct-1>>>0;e&r;)r>>>=1;return r?(e&r-1)+r:e}function u(e,r,n,o,s){t(!(o%n));do{e[r+(o-=n)]=s}while(0\u003Co)}function c(e,r,n,o,i){if(t(2328>=i),512>=i)var a=s(512);else if(null==(a=s(i)))return 0;return function(e,r,n,o,i,a){var c,d,f=r,h=1\u003C\u003Cn,p=s(16),m=s(16);for(t(0!=i),t(null!=o),t(null!=e),t(0\u003Cn),d=0;d\u003Ci;++d){if(15\u003Co[d])return 0;++p[o[d]]}if(p[0]==i)return 0;for(m[1]=0,c=1;15>c;++c){if(p[c]>1\u003C\u003Cc)return 0;m[c+1]=m[c]+p[c]}for(d=0;d\u003Ci;++d)c=o[d],0\u003Co[d]&&(a[m[c]++]=d);if(1==m[15])return(o=new l).g=0,o.value=a[0],u(e,f,1,h,o),h;var g,y=-1,v=h-1,w=0,b=1,B=1,j=1\u003C\u003Cn;for(d=0,c=1,i=2;c\u003C=n;++c,i\u003C\u003C=1){if(b+=B\u003C\u003C=1,0>(B-=p[c]))return 0;for(;0\u003Cp[c];--p[c])(o=new l).g=c,o.value=a[d++],u(e,f+w,i,j,o),w=A(w,c)}for(c=n+1,i=2;15>=c;++c,i\u003C\u003C=1){if(b+=B\u003C\u003C=1,0>(B-=p[c]))return 0;for(;0\u003Cp[c];--p[c]){if(o=new l,(w&v)!=y){for(f+=j,g=1\u003C\u003C(y=c)-n;15>y&&!(0>=(g-=p[y]));)++y,g\u003C\u003C=1;h+=j=1\u003C\u003C(g=y-n),e[r+(y=w&v)].g=g+n,e[r+y].value=f-r-y}o.g=c-n,o.value=a[d++],u(e,f+(w>>n),i,j,o),w=A(w,c)}}return b!=2*m[15]-1?0:h}(e,r,n,o,i,a)}function l(){this.value=this.g=0}function d(){this.value=this.g=0}function f(){this.G=i(5,l),this.H=s(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=i(Or,d)}function h(e,r,n,o){t(null!=e),t(null!=r),t(2147483648>o),e.Ca=254,e.I=0,e.b=-8,e.Ka=0,e.oa=r,e.pa=n,e.Jd=r,e.Yc=n+o,e.Zc=4\u003C=o?n+o-4+1:n,x(e)}function p(e,t){for(var r=0;0\u003Ct--;)r|=N(e,128)\u003C\u003Ct;return r}function m(e,t){var r=p(e,t);return E(e)?-r:r}function g(e,r,n,o){var s,i=0;for(t(null!=e),t(null!=r),t(4294967288>o),e.Sb=o,e.Ra=0,e.u=0,e.h=0,4\u003Co&&(o=4),s=0;s\u003Co;++s)i+=r[n+s]\u003C\u003C8*s;e.Ra=i,e.bb=o,e.oa=r,e.pa=n}function y(e){for(;8\u003C=e.u&&e.bb\u003Ce.Sb;)e.Ra>>>=8,e.Ra+=e.oa[e.pa+e.bb]\u003C\u003CMr-8>>>0,++e.bb,e.u-=8;j(e)&&(e.h=1,e.u=0)}function v(e,r){if(t(0\u003C=r),!e.h&&r\u003C=Rr){var n=B(e)&kr[r];return e.u+=r,y(e),n}return e.h=1,e.u=0}function w(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function b(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function B(e){return e.Ra>>>(e.u&Mr-1)>>>0}function j(e){return t(e.bb\u003C=e.Sb),e.h||e.bb==e.Sb&&e.u>Mr}function _(e,t){e.u=t,e.h=j(e)}function C(e){e.u>=Dr&&(t(e.u>=Dr),y(e))}function x(e){t(null!=e&&null!=e.oa),e.pa\u003Ce.Zc?(e.I=(e.oa[e.pa++]|e.I\u003C\u003C8)>>>0,e.b+=8):(t(null!=e&&null!=e.oa),e.pa\u003Ce.Yc?(e.b+=8,e.I=e.oa[e.pa++]|e.I\u003C\u003C8):e.Ka?e.b=0:(e.I\u003C\u003C=8,e.b+=8,e.Ka=1))}function E(e){return p(e,1)}function N(e,t){var r=e.Ca;0>e.b&&x(e);var n=e.b,o=r*t>>>8,s=(e.I>>>n>o)+0;for(s?(r-=o,e.I-=o+1\u003C\u003Cn>>>0):r=o+1,n=r,o=0;256\u003C=n;)o+=8,n>>=8;return n=7^o+Kr[n],e.b-=n,e.Ca=(r\u003C\u003Cn)-1,s}function Q(e,t,r){e[t+0]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=r>>0&255}function F(e,t){return e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8}function U(e,t){return F(e,t)|e[t+2]\u003C\u003C16}function S(e,t){return F(e,t)|F(e,t+2)\u003C\u003C16}function L(e,r){var n=1\u003C\u003Cr;return t(null!=e),t(0\u003Cr),e.X=s(n),null==e.X?0:(e.Mb=32-r,e.Xa=r,1)}function T(e,r){t(null!=e),t(null!=r),t(e.Xa==r.Xa),n(r.X,0,e.X,0,1\u003C\u003Cr.Xa)}function H(){this.X=[],this.Xa=this.Mb=0}function I(e,r,n,o){t(null!=n),t(null!=o);var s=n[0],i=o[0];return 0==s&&(s=(e*i+r\u002F2)\u002Fr),0==i&&(i=(r*s+e\u002F2)\u002Fe),0>=s||0>=i?0:(n[0]=s,o[0]=i,1)}function P(e,t){return e+(1\u003C\u003Ct)-1>>>t}function O(e,t){return((4278255360&e)+(4278255360&t)>>>0&4278255360)+((16711935&e)+(16711935&t)>>>0&16711935)>>>0}function k(t,r){e[r]=function(r,n,o,s,i,a,A){var u;for(u=0;u\u003Ci;++u){var c=e[t](a[A+u-1],o,s+u);a[A+u]=O(r[n+u],c)}}}function R(){this.ud=this.hd=this.jd=0}function M(e,t){return((4278124286&(e^t))>>>1)+(e&t)>>>0}function D(e){return 0\u003C=e&&256>e?e:0>e?0:255\u003Ce?255:void 0}function K(e,t){return D(e+(e-t+.5>>1))}function z(e,t,r){return Math.abs(t-r)-Math.abs(e-r)}function V(e,t,r,n,o,s,i){for(n=s[i-1],r=0;r\u003Co;++r)s[i+r]=n=O(e[t+r],n)}function q(e,t,r,n,o){var s;for(s=0;s\u003Cr;++s){var i=e[t+s],a=i>>8&255,A=16711935&(A=(A=16711935&i)+((a\u003C\u003C16)+a));n[o+s]=(4278255360&i)+A>>>0}}function G(e,t){t.jd=e>>0&255,t.hd=e>>8&255,t.ud=e>>16&255}function X(e,t,r,n,o,s){var i;for(i=0;i\u003Cn;++i){var a=t[r+i],A=a>>>8,u=a,c=255&(c=(c=a>>>16)+((e.jd\u003C\u003C24>>24)*(A\u003C\u003C24>>24)>>>5));u=255&(u=(u+=(e.hd\u003C\u003C24>>24)*(A\u003C\u003C24>>24)>>>5)+((e.ud\u003C\u003C24>>24)*(c\u003C\u003C24>>24)>>>5)),o[s+i]=(4278255360&a)+(c\u003C\u003C16)+u}}function W(t,r,n,o,s){e[r]=function(e,t,r,n,i,a,A,u,c){for(n=A;n\u003Cu;++n)for(A=0;A\u003Cc;++A)i[a++]=s(r[o(e[t++])])},e[t]=function(t,r,i,a,A,u,c){var l=8>>t.b,d=t.Ea,f=t.K[0],h=t.w;if(8>l)for(t=(1\u003C\u003Ct.b)-1,h=(1\u003C\u003Cl)-1;r\u003Ci;++r){var p,m=0;for(p=0;p\u003Cd;++p)p&t||(m=o(a[A++])),u[c++]=s(f[m&h]),m>>=l}else e[\"VP8LMapColor\"+n](a,A,f,h,u,c,r,i,d)}}function J(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>16&255,n[o++]=s>>8&255,n[o++]=s>>0&255}}function Y(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>16&255,n[o++]=s>>8&255,n[o++]=s>>0&255,n[o++]=s>>24&255}}function Z(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=(i=e[t++])>>16&240|i>>12&15,i=i>>0&240|i>>28&15;n[o++]=s,n[o++]=i}}function $(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=(i=e[t++])>>16&248|i>>13&7,i=i>>5&224|i>>3&31;n[o++]=s,n[o++]=i}}function ee(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>0&255,n[o++]=s>>8&255,n[o++]=s>>16&255}}function te(e,t,r,o,s,i){if(0==i)for(r=t+r;t\u003Cr;)Q(o,((i=e[t++])[0]>>24|i[1]>>8&65280|i[2]\u003C\u003C8&16711680|i[3]\u003C\u003C24)>>>0),s+=32;else n(o,s,e,t,r)}function re(t,r){e[r][0]=e[t+\"0\"],e[r][1]=e[t+\"1\"],e[r][2]=e[t+\"2\"],e[r][3]=e[t+\"3\"],e[r][4]=e[t+\"4\"],e[r][5]=e[t+\"5\"],e[r][6]=e[t+\"6\"],e[r][7]=e[t+\"7\"],e[r][8]=e[t+\"8\"],e[r][9]=e[t+\"9\"],e[r][10]=e[t+\"10\"],e[r][11]=e[t+\"11\"],e[r][12]=e[t+\"12\"],e[r][13]=e[t+\"13\"],e[r][14]=e[t+\"0\"],e[r][15]=e[t+\"0\"]}function ne(e){return e==Kn||e==zn||e==Vn||e==qn}function oe(){this.eb=[],this.size=this.A=this.fb=0}function se(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function ie(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new oe,this.f.kb=new se,this.sd=null}function ae(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function Ae(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ue(e){return alert(\"todo:WebPSamplerProcessPlane\"),e.T}function ce(e,t){var r=e.T,o=t.ba.f.RGBA,s=o.eb,i=o.fb+e.ka*o.A,a=yo[t.ba.S],A=e.y,u=e.O,c=e.f,l=e.N,d=e.ea,f=e.W,h=t.cc,p=t.dc,m=t.Mc,g=t.Nc,y=e.ka,v=e.ka+e.T,w=e.U,b=w+1>>1;for(0==y?a(A,u,null,null,c,l,d,f,c,l,d,f,s,i,null,null,w):(a(t.ec,t.fc,A,u,h,p,m,g,c,l,d,f,s,i-o.A,s,i,w),++r);y+2\u003Cv;y+=2)h=c,p=l,m=d,g=f,l+=e.Rc,f+=e.Rc,i+=2*o.A,a(A,(u+=2*e.fa)-e.fa,A,u,h,p,m,g,c,l,d,f,s,i-o.A,s,i,w);return u+=e.fa,e.j+v\u003Ce.o?(n(t.ec,t.fc,A,u,w),n(t.cc,t.dc,c,l,b),n(t.Mc,t.Nc,d,f,b),r--):1&v||a(A,u,null,null,c,l,d,f,c,l,d,f,s,i+o.A,null,null,w),r}function le(e,r,n){var o=e.F,s=[e.J];if(null!=o){var i=e.U,a=r.ba.S,A=a==Rn||a==Vn;r=r.ba.f.RGBA;var u=[0],c=e.ka;u[0]=e.T,e.Kb&&(0==c?--u[0]:(--c,s[0]-=e.width),e.j+e.ka+e.T==e.o&&(u[0]=e.o-e.j-c));var l=r.eb;c=r.fb+c*r.A,e=Cn(o,s[0],e.width,i,u,l,c+(A?0:3),r.A),t(n==u),e&&ne(a)&&jn(l,c,A,i,u,r.A)}return 0}function de(e){var t=e.ma,r=t.ba.S,n=11>r,o=r==Pn||r==kn||r==Rn||r==Mn||12==r||ne(r);if(t.memory=null,t.Ib=null,t.Jb=null,t.Nd=null,!Hr(t.Oa,e,o?11:12))return 0;if(o&&ne(r)&&yr(),e.da)alert(\"todo:use_scaling\");else{if(n){if(t.Ib=ue,e.Kb){if(r=e.U+1>>1,t.memory=s(e.U+2*r),null==t.memory)return 0;t.ec=t.memory,t.fc=0,t.cc=t.ec,t.dc=t.fc+e.U,t.Mc=t.cc,t.Nc=t.dc+r,t.Ib=ce,yr()}}else alert(\"todo:EmitYUV\");o&&(t.Jb=le,n&&mr())}if(n&&!So){for(e=0;256>e;++e)Lo[e]=89858*(e-128)+Eo>>xo,Io[e]=-22014*(e-128)+Eo,Ho[e]=-45773*(e-128),To[e]=113618*(e-128)+Eo>>xo;for(e=No;e\u003CQo;++e)t=76283*(e-16)+Eo>>xo,Po[e-No]=Ve(t,255),Oo[e-No]=Ve(t+8>>4,15);So=1}return 1}function fe(e){var r=e.ma,n=e.U,o=e.T;return t(!(1&e.ka)),0>=n||0>=o?0:(n=r.Ib(e,r),null!=r.Jb&&r.Jb(e,r,n),r.Dc+=n,1)}function he(e){e.ma.memory=null}function pe(e,t,r,n){return 47!=v(e,8)?0:(t[0]=v(e,14)+1,r[0]=v(e,14)+1,n[0]=v(e,1),0!=v(e,3)?0:!e.h)}function me(e,t){if(4>e)return e+1;var r=e-2>>1;return(2+(1&e)\u003C\u003Cr)+v(t,r)+1}function ge(e,t){return 120\u003Ct?t-120:1\u003C=(r=((r=Zn[t-1])>>4)*e+(8-(15&r)))?r:1;var r}function ye(e,t,r){var n=B(r),o=e[t+=255&n].g-8;return 0\u003Co&&(_(r,r.u+8),n=B(r),t+=e[t].value,t+=n&(1\u003C\u003Co)-1),_(r,r.u+e[t].g),e[t].value}function ve(e,r,n){return n.g+=e.g,n.value+=e.value\u003C\u003Cr>>>0,t(8>=n.g),e.g}function we(e,r,n){var o=e.xc;return t((r=0==o?0:e.vc[e.md*(n>>o)+(r>>o)])\u003Ce.Wb),e.Ya[r]}function be(e,r,o,s){var i=e.ab,a=e.c*r,A=e.C;r=A+r;var u=o,c=s;for(s=e.Ta,o=e.Ua;0\u003Ci--;){var l=e.gc[i],d=A,f=r,h=u,p=c,m=(c=s,u=o,l.Ea);switch(t(d\u003Cf),t(f\u003C=l.nc),l.hc){case 2:qr(h,p,(f-d)*m,c,u);break;case 0:var g=d,y=f,v=c,w=u,b=(x=l).Ea;0==g&&(zr(h,p,null,null,1,v,w),V(h,p+1,0,0,b-1,v,w+1),p+=b,w+=b,++g);for(var B=1\u003C\u003Cx.b,j=B-1,_=P(b,x.b),C=x.K,x=x.w+(g>>x.b)*_;g\u003Cy;){var E=C,N=x,Q=1;for(Vr(h,p,v,w-b,1,v,w);Q\u003Cb;){var F=(Q&~j)+B;F>b&&(F=b),(0,Yr[E[N++]>>8&15])(h,p+ +Q,v,w+Q-b,F-Q,v,w+Q),Q=F}p+=b,w+=b,++g&j||(x+=_)}f!=l.nc&&n(c,u-m,c,u+(f-d-1)*m,m);break;case 1:for(m=h,y=p,b=(h=l.Ea)-(w=h&~(v=(p=1\u003C\u003Cl.b)-1)),g=P(h,l.b),B=l.K,l=l.w+(d>>l.b)*g;d\u003Cf;){for(j=B,_=l,C=new R,x=y+w,E=y+h;y\u003Cx;)G(j[_++],C),Zr(C,m,y,p,c,u),y+=p,u+=p;y\u003CE&&(G(j[_++],C),Zr(C,m,y,b,c,u),y+=b,u+=b),++d&v||(l+=g)}break;case 3:if(h==c&&p==u&&0\u003Cl.b){for(y=c,h=m=u+(f-d)*m-(w=(f-d)*P(l.Ea,l.b)),p=c,v=u,g=[],w=(b=w)-1;0\u003C=w;--w)g[w]=p[v+w];for(w=b-1;0\u003C=w;--w)y[h+w]=g[w];Gr(l,d,f,c,m,c,u)}else Gr(l,d,f,h,p,c,u)}u=s,c=o}c!=o&&n(s,o,u,c,a)}function Be(e,r){var n=e.V,o=e.Ba+e.c*e.C,s=r-e.C;if(t(r\u003C=e.l.o),t(16>=s),0\u003Cs){var i=e.l,a=e.Ta,A=e.Ua,u=i.width;if(be(e,s,n,o),s=A=[A],t((n=e.C)\u003C(o=r)),t(i.v\u003Ci.va),o>i.o&&(o=i.o),n\u003Ci.j){var c=i.j-n;n=i.j,s[0]+=c*u}if(n>=o?n=0:(s[0]+=4*i.v,i.ka=n-i.j,i.U=i.va-i.v,i.T=o-n,n=1),n){if(A=A[0],11>(n=e.ca).S){var l=n.f.RGBA,d=(o=n.S,s=i.U,i=i.T,c=l.eb,l.A),f=i;for(l=l.fb+e.Ma*l.A;0\u003Cf--;){var h=a,p=A,m=s,g=c,y=l;switch(o){case In:$r(h,p,m,g,y);break;case Pn:en(h,p,m,g,y);break;case Kn:en(h,p,m,g,y),jn(g,y,0,m,1,0);break;case On:nn(h,p,m,g,y);break;case kn:te(h,p,m,g,y,1);break;case zn:te(h,p,m,g,y,1),jn(g,y,0,m,1,0);break;case Rn:te(h,p,m,g,y,0);break;case Vn:te(h,p,m,g,y,0),jn(g,y,1,m,1,0);break;case Mn:tn(h,p,m,g,y);break;case qn:tn(h,p,m,g,y),_n(g,y,m,1,0);break;case Dn:rn(h,p,m,g,y);break;default:t(0)}A+=u,l+=d}e.Ma+=i}else alert(\"todo:EmitRescaledRowsYUVA\");t(e.Ma\u003C=n.height)}}e.C=r,t(e.C\u003C=e.i)}function je(e){var t;if(0\u003Ce.ua)return 0;for(t=0;t\u003Ce.Wb;++t){var r=e.Ya[t].G,n=e.Ya[t].H;if(0\u003Cr[1][n[1]+0].g||0\u003Cr[2][n[2]+0].g||0\u003Cr[3][n[3]+0].g)return 0}return 1}function _e(e,r,n,o,s,i){if(0!=e.Z){var a=e.qd,A=e.rd;for(t(null!=go[e.Z]);r\u003Cn;++r)go[e.Z](a,A,o,s,o,s,i),a=o,A=s,s+=i;e.qd=a,e.rd=A}}function Ce(e,r){var n=e.l.ma,o=0==n.Z||1==n.Z?e.l.j:e.C;if(o=e.C\u003Co?o:e.C,t(r\u003C=e.l.o),r>o){var s=e.l.width,i=n.ca,a=n.tb+s*o,A=e.V,u=e.Ba+e.c*o,c=e.gc;t(1==e.ab),t(3==c[0].hc),Wr(c[0],o,r,A,u,i,a),_e(n,o,r,i,a,s)}e.C=e.Ma=r}function xe(e,r,n,o,s,i,a){var A=e.$\u002Fo,u=e.$%o,c=e.m,l=e.s,d=n+e.$,f=d;s=n+o*s;var h=n+o*i,p=280+l.ua,m=e.Pb?A:16777216,g=0\u003Cl.ua?l.Wa:null,y=l.wc,v=d\u003Ch?we(l,u,A):null;t(e.C\u003Ci),t(h\u003C=s);var w=!1;e:for(;;){for(;w||d\u003Ch;){var b=0;if(A>=m){var x=d-n;t((m=e).Pb),m.wd=m.m,m.xd=x,0\u003Cm.s.ua&&T(m.s.Wa,m.s.vb),m=A+eo}if(u&y||(v=we(l,u,A)),t(null!=v),v.Qb&&(r[d]=v.qb,w=!0),!w)if(C(c),v.jc){b=c,x=r;var E=d,N=v.pd[B(b)&Or-1];t(v.jc),256>N.g?(_(b,b.u+N.g),x[E]=N.value,b=0):(_(b,b.u+N.g-256),t(256\u003C=N.value),b=N.value),0==b&&(w=!0)}else b=ye(v.G[0],v.H[0],c);if(c.h)break;if(w||256>b){if(!w)if(v.nd)r[d]=(v.qb|b\u003C\u003C8)>>>0;else{if(C(c),w=ye(v.G[1],v.H[1],c),C(c),x=ye(v.G[2],v.H[2],c),E=ye(v.G[3],v.H[3],c),c.h)break;r[d]=(E\u003C\u003C24|w\u003C\u003C16|b\u003C\u003C8|x)>>>0}if(w=!1,++d,++u>=o&&(u=0,++A,null!=a&&A\u003C=i&&!(A%16)&&a(e,A),null!=g))for(;f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b}else if(280>b){if(b=me(b-256,c),x=ye(v.G[4],v.H[4],c),C(c),x=ge(o,x=me(x,c)),c.h)break;if(d-n\u003Cx||s-d\u003Cb)break e;for(E=0;E\u003Cb;++E)r[d+E]=r[d+E-x];for(d+=b,u+=b;u>=o;)u-=o,++A,null!=a&&A\u003C=i&&!(A%16)&&a(e,A);if(t(d\u003C=s),u&y&&(v=we(l,u,A)),null!=g)for(;f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b}else{if(!(b\u003Cp))break e;for(w=b-280,t(null!=g);f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b;b=d,t(!(w>>>(x=g).Xa)),r[b]=x.X[w],w=!0}w||t(c.h==j(c))}if(e.Pb&&c.h&&d\u003Cs)t(e.m.h),e.a=5,e.m=e.wd,e.$=e.xd,0\u003Ce.s.ua&&T(e.s.vb,e.s.Wa);else{if(c.h)break e;null!=a&&a(e,A>i?i:A),e.a=0,e.$=d-n}return 1}return e.a=3,0}function Ee(e){t(null!=e),e.vc=null,e.yc=null,e.Ya=null;var r=e.Wa;null!=r&&(r.X=null),e.vb=null,t(null!=e)}function Ne(){var t=new ir;return null==t?null:(t.a=0,t.xb=mo,re(\"Predictor\",\"VP8LPredictors\"),re(\"Predictor\",\"VP8LPredictors_C\"),re(\"PredictorAdd\",\"VP8LPredictorsAdd\"),re(\"PredictorAdd\",\"VP8LPredictorsAdd_C\"),qr=q,Zr=X,$r=J,en=Y,tn=Z,rn=$,nn=ee,e.VP8LMapColor32b=Xr,e.VP8LMapColor8b=Jr,t)}function Qe(e,r,n,a,A){var u=1,d=[e],h=[r],p=a.m,m=a.s,g=null,y=0;e:for(;;){if(n)for(;u&&v(p,1);){var w=d,b=h,j=a,x=1,E=j.m,N=j.gc[j.ab],Q=v(E,2);if(j.Oc&1\u003C\u003CQ)u=0;else{switch(j.Oc|=1\u003C\u003CQ,N.hc=Q,N.Ea=w[0],N.nc=b[0],N.K=[null],++j.ab,t(4>=j.ab),Q){case 0:case 1:N.b=v(E,3)+2,x=Qe(P(N.Ea,N.b),P(N.nc,N.b),0,j,N.K),N.K=N.K[0];break;case 3:var F,U=v(E,8)+1,S=16\u003CU?0:4\u003CU?1:2\u003CU?2:3;if(w[0]=P(N.Ea,S),N.b=S,F=x=Qe(U,1,0,j,N.K)){var T,H=U,I=N,k=1\u003C\u003C(8>>I.b),R=s(k);if(null==R)F=0;else{var M=I.K[0],D=I.w;for(R[0]=I.K[0][0],T=1;T\u003C1*H;++T)R[T]=O(M[D+T],R[T-1]);for(;T\u003C4*k;++T)R[T]=0;I.K[0]=null,I.K[0]=R,F=1}}x=F;break;case 2:break;default:t(0)}u=x}}if(d=d[0],h=h[0],u&&v(p,1)&&!(u=1\u003C=(y=v(p,4))&&11>=y)){a.a=3;break e}var K;if(K=u)t:{var z,V,q,G=a,X=d,W=h,J=y,Y=n,Z=G.m,$=G.s,ee=[null],te=1,re=0,ne=$n[J];r:for(;;){if(Y&&v(Z,1)){var oe=v(Z,3)+2,se=P(X,oe),ie=P(W,oe),ae=se*ie;if(!Qe(se,ie,0,G,ee))break r;for(ee=ee[0],$.xc=oe,z=0;z\u003Cae;++z){var Ae=ee[z]>>8&65535;ee[z]=Ae,Ae>=te&&(te=Ae+1)}}if(Z.h)break r;for(V=0;5>V;++V){var ue=Wn[V];!V&&0\u003CJ&&(ue+=1\u003C\u003CJ),re\u003Cue&&(re=ue)}var ce=i(te*ne,l),le=te,de=i(le,f);if(null==de)var fe=null;else t(65536>=le),fe=de;var he=s(re);if(null==fe||null==he||null==ce){G.a=1;break r}var pe=ce;for(z=q=0;z\u003Cte;++z){var me=fe[z],ge=me.G,ye=me.H,we=0,be=1,Be=0;for(V=0;5>V;++V){ue=Wn[V],ge[V]=pe,ye[V]=q,!V&&0\u003CJ&&(ue+=1\u003C\u003CJ);n:{var je,_e=ue,Ce=G,Ne=he,Fe=pe,Ue=q,Se=0,Le=Ce.m,Te=v(Le,1);if(o(Ne,0,0,_e),Te){var He=v(Le,1)+1,Ie=v(Le,1),Pe=v(Le,0==Ie?1:8);Ne[Pe]=1,2==He&&(Ne[Pe=v(Le,8)]=1);var Oe=1}else{var ke=s(19),Re=v(Le,4)+4;if(19\u003CRe){Ce.a=3;var Me=0;break n}for(je=0;je\u003CRe;++je)ke[Yn[je]]=v(Le,3);var De=void 0,Ke=void 0,ze=Ce,Ve=ke,qe=_e,Ge=Ne,Xe=0,We=ze.m,Je=8,Ye=i(128,l);o:for(;c(Ye,0,7,Ve,19);){if(v(We,1)){var Ze=2+2*v(We,3);if((De=2+v(We,Ze))>qe)break o}else De=qe;for(Ke=0;Ke\u003Cqe&&De--;){C(We);var $e=Ye[0+(127&B(We))];_(We,We.u+$e.g);var et=$e.value;if(16>et)Ge[Ke++]=et,0!=et&&(Je=et);else{var tt=16==et,rt=et-16,nt=Xn[rt],ot=v(We,Gn[rt])+nt;if(Ke+ot>qe)break o;for(var st=tt?Je:0;0\u003Cot--;)Ge[Ke++]=st}}Xe=1;break o}Xe||(ze.a=3),Oe=Xe}(Oe=Oe&&!Le.h)&&(Se=c(Fe,Ue,8,Ne,_e)),Oe&&0!=Se?Me=Se:(Ce.a=3,Me=0)}if(0==Me)break r;if(be&&1==Jn[V]&&(be=0==pe[q].g),we+=pe[q].g,q+=Me,3>=V){var it,at=he[0];for(it=1;it\u003Cue;++it)he[it]>at&&(at=he[it]);Be+=at}}if(me.nd=be,me.Qb=0,be&&(me.qb=(ge[3][ye[3]+0].value\u003C\u003C24|ge[1][ye[1]+0].value\u003C\u003C16|ge[2][ye[2]+0].value)>>>0,0==we&&256>ge[0][ye[0]+0].value&&(me.Qb=1,me.qb+=ge[0][ye[0]+0].value\u003C\u003C8)),me.jc=!me.Qb&&6>Be,me.jc){var At,ut=me;for(At=0;At\u003COr;++At){var ct=At,lt=ut.pd[ct],dt=ut.G[0][ut.H[0]+ct];256\u003C=dt.value?(lt.g=dt.g+256,lt.value=dt.value):(lt.g=0,lt.value=0,ct>>=ve(dt,8,lt),ct>>=ve(ut.G[1][ut.H[1]+ct],16,lt),ct>>=ve(ut.G[2][ut.H[2]+ct],0,lt),ve(ut.G[3][ut.H[3]+ct],24,lt))}}}$.vc=ee,$.Wb=te,$.Ya=fe,$.yc=ce,K=1;break t}K=0}if(!(u=K)){a.a=3;break e}if(0\u003Cy){if(m.ua=1\u003C\u003Cy,!L(m.Wa,y)){a.a=1,u=0;break e}}else m.ua=0;var ft=a,ht=d,pt=h,mt=ft.s,gt=mt.xc;if(ft.c=ht,ft.i=pt,mt.md=P(ht,gt),mt.wc=0==gt?-1:(1\u003C\u003Cgt)-1,n){a.xb=po;break e}if(null==(g=s(d*h))){a.a=1,u=0;break e}u=(u=xe(a,g,0,d,h,h,null))&&!p.h;break e}return u?(null!=A?A[0]=g:(t(null==g),t(n)),a.$=0,n||Ee(m)):Ee(m),u}function Fe(e,r){var n=e.c*e.i,o=n+r+16*r;return t(e.c\u003C=r),e.V=s(o),null==e.V?(e.Ta=null,e.Ua=0,e.a=1,0):(e.Ta=e.V,e.Ua=e.Ba+n+r,1)}function Ue(e,r){var n=e.C,o=r-n,s=e.V,i=e.Ba+e.c*n;for(t(r\u003C=e.l.o);0\u003Co;){var a=16\u003Co?16:o,A=e.l.ma,u=e.l.width,c=u*a,l=A.ca,d=A.tb+u*n,f=e.Ta,h=e.Ua;be(e,a,s,i),xn(f,h,l,d,c),_e(A,n,n+a,l,d,u),o-=a,s+=a*e.c,n+=a}t(n==r),e.C=e.Ma=r}function Se(){this.ub=this.yd=this.td=this.Rb=0}function Le(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function Te(){this.Fb=this.Bb=this.Cb=0,this.Zb=s(4),this.Lb=s(4)}function He(){this.Yb=function(){var e=[];return function e(t,r,n){for(var o=n[r],s=0;s\u003Co&&(t.push(n.length>r+1?[]:0),!(n.length\u003Cr+1));s++)e(t[s],r+1,n)}(e,0,[3,11]),e}()}function Ie(){this.jb=s(3),this.Wc=a([4,8],He),this.Xc=a([4,17],He)}function Pe(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new s(4),this.od=new s(4)}function Oe(){this.ld=this.La=this.dd=this.tc=0}function ke(){this.Na=this.la=0}function Re(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function Me(){this.ad=s(384),this.Za=0,this.Ob=s(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function De(){this.uc=this.M=this.Nb=0,this.wa=Array(new Oe),this.Y=0,this.ya=Array(new Me),this.aa=0,this.l=new qe}function Ke(){this.y=s(16),this.f=s(8),this.ea=s(8)}function ze(){this.cb=this.a=0,this.sc=\"\",this.m=new w,this.Od=new Se,this.Kc=new Le,this.ed=new Pe,this.Qa=new Te,this.Ic=this.$c=this.Aa=0,this.D=new De,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=i(8,w),this.ia=0,this.pb=i(4,Re),this.Pa=new Ie,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ke),this.Hd=0,this.rb=Array(new ke),this.sb=0,this.wa=Array(new Oe),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new Me),this.L=this.aa=0,this.gd=a([4,2],Oe),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function Ve(e,t){return 0>e?0:e>t?t:e}function qe(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=\"void\",this.put=\"VP8IoPutHook\",this.ac=\"VP8IoSetupHook\",this.bc=\"VP8IoTeardownHook\",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Ge(){var e=new ze;return null!=e&&(e.a=0,e.sc=\"OK\",e.cb=0,e.Xb=0,no||(no=Ye)),e}function Xe(e,t,r){return 0==e.a&&(e.a=t,e.sc=r,e.cb=0),0}function We(e,t,r){return 3\u003C=r&&157==e[t+0]&&1==e[t+1]&&42==e[t+2]}function Je(e,r){if(null==e)return 0;if(e.a=0,e.sc=\"OK\",null==r)return Xe(e,2,\"null VP8Io passed to VP8GetHeaders()\");var n=r.data,s=r.w,i=r.ha;if(4>i)return Xe(e,7,\"Truncated header.\");var a=n[s+0]|n[s+1]\u003C\u003C8|n[s+2]\u003C\u003C16,A=e.Od;if(A.Rb=!(1&a),A.td=a>>1&7,A.yd=a>>4&1,A.ub=a>>5,3\u003CA.td)return Xe(e,3,\"Incorrect keyframe parameters.\");if(!A.yd)return Xe(e,4,\"Frame not displayable.\");s+=3,i-=3;var u=e.Kc;if(A.Rb){if(7>i)return Xe(e,7,\"cannot parse picture header\");if(!We(n,s,i))return Xe(e,3,\"Bad code word\");u.c=16383&(n[s+4]\u003C\u003C8|n[s+3]),u.Td=n[s+4]>>6,u.i=16383&(n[s+6]\u003C\u003C8|n[s+5]),u.Ud=n[s+6]>>6,s+=7,i-=7,e.za=u.c+15>>4,e.Ub=u.i+15>>4,r.width=u.c,r.height=u.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,o((a=e.Pa).jb,0,255,a.jb.length),t(null!=(a=e.Qa)),a.Cb=0,a.Bb=0,a.Fb=1,o(a.Zb,0,0,a.Zb.length),o(a.Lb,0,0,a.Lb)}if(A.ub>i)return Xe(e,7,\"bad partition length\");h(a=e.m,n,s,A.ub),s+=A.ub,i-=A.ub,A.Rb&&(u.Ld=E(a),u.Kd=E(a)),u=e.Qa;var c,l=e.Pa;if(t(null!=a),t(null!=u),u.Cb=E(a),u.Cb){if(u.Bb=E(a),E(a)){for(u.Fb=E(a),c=0;4>c;++c)u.Zb[c]=E(a)?m(a,7):0;for(c=0;4>c;++c)u.Lb[c]=E(a)?m(a,6):0}if(u.Bb)for(c=0;3>c;++c)l.jb[c]=E(a)?p(a,8):255}else u.Bb=0;if(a.Ka)return Xe(e,3,\"cannot parse segment header\");if((u=e.ed).zd=E(a),u.Tb=p(a,6),u.wb=p(a,3),u.Pc=E(a),u.Pc&&E(a)){for(l=0;4>l;++l)E(a)&&(u.vd[l]=m(a,6));for(l=0;4>l;++l)E(a)&&(u.od[l]=m(a,6))}if(e.L=0==u.Tb?0:u.zd?1:2,a.Ka)return Xe(e,3,\"cannot parse filter header\");var d=i;if(i=c=s,s=c+d,u=d,e.Xb=(1\u003C\u003Cp(e.m,2))-1,d\u003C3*(l=e.Xb))n=7;else{for(c+=3*l,u-=3*l,d=0;d\u003Cl;++d){var f=n[i+0]|n[i+1]\u003C\u003C8|n[i+2]\u003C\u003C16;f>u&&(f=u),h(e.Jc[+d],n,c,f),c+=f,u-=f,i+=3}h(e.Jc[+l],n,c,u),n=c\u003Cs?0:5}if(0!=n)return Xe(e,n,\"cannot parse partitions\");for(n=p(c=e.m,7),i=E(c)?m(c,4):0,s=E(c)?m(c,4):0,u=E(c)?m(c,4):0,l=E(c)?m(c,4):0,c=E(c)?m(c,4):0,d=e.Qa,f=0;4>f;++f){if(d.Cb){var g=d.Zb[f];d.Fb||(g+=n)}else{if(0\u003Cf){e.pb[f]=e.pb[0];continue}g=n}var y=e.pb[f];y.Sc[0]=to[Ve(g+i,127)],y.Sc[1]=ro[Ve(g+0,127)],y.Eb[0]=2*to[Ve(g+s,127)],y.Eb[1]=101581*ro[Ve(g+u,127)]>>16,8>y.Eb[1]&&(y.Eb[1]=8),y.Qc[0]=to[Ve(g+l,117)],y.Qc[1]=ro[Ve(g+c,127)],y.lc=g+c}if(!A.Rb)return Xe(e,4,\"Not a key frame.\");for(E(a),A=e.Pa,n=0;4>n;++n){for(i=0;8>i;++i)for(s=0;3>s;++s)for(u=0;11>u;++u)l=N(a,uo[n][i][s][u])?p(a,8):ao[n][i][s][u],A.Wc[n][i].Yb[s][u]=l;for(i=0;17>i;++i)A.Xc[n][i]=A.Wc[n][co[i]]}return e.kc=E(a),e.kc&&(e.Bd=p(a,8)),e.cb=1}function Ye(e,t,r,n,o,s,i){var a=t[o].Yb[r];for(r=0;16>o;++o){if(!N(e,a[r+0]))return o;for(;!N(e,a[r+1]);)if(a=t[++o].Yb[0],r=0,16==o)return 16;var A=t[o+1].Yb;if(N(e,a[r+2])){var u=e,c=0;if(N(u,(d=a)[(l=r)+3]))if(N(u,d[l+6])){for(a=0,l=2*(c=N(u,d[l+8]))+(d=N(u,d[l+9+c])),c=0,d=oo[l];d[a];++a)c+=c+N(u,d[a]);c+=3+(8\u003C\u003Cl)}else N(u,d[l+7])?(c=7+2*N(u,165),c+=N(u,145)):c=5+N(u,159);else c=N(u,d[l+4])?3+N(u,d[l+5]):2;a=A[2]}else c=1,a=A[1];A=i+so[o],0>(u=e).b&&x(u);var l,d=u.b,f=(l=u.Ca>>1)-(u.I>>d)>>31;--u.b,u.Ca+=f,u.Ca|=1,u.I-=(l+1&f)\u003C\u003Cd,s[A]=((c^f)-f)*n[(0\u003Co)+0]}return 16}function Ze(e){var t=e.rb[e.sb-1];t.la=0,t.Na=0,o(e.zc,0,0,e.zc.length),e.ja=0}function $e(e,r){if(null==e)return 0;if(null==r)return Xe(e,2,\"NULL VP8Io parameter in VP8Decode().\");if(!e.cb&&!Je(e,r))return 0;if(t(e.cb),null==r.ac||r.ac(r)){r.ob&&(e.L=0);var a=Ro[e.L];if(2==e.L?(e.yb=0,e.zb=0):(e.yb=r.v-a>>4,e.zb=r.j-a>>4,0>e.yb&&(e.yb=0),0>e.zb&&(e.zb=0)),e.Va=r.o+15+a>>4,e.Hb=r.va+15+a>>4,e.Hb>e.za&&(e.Hb=e.za),e.Va>e.Ub&&(e.Va=e.Ub),0\u003Ce.L){var A=e.ed;for(a=0;4>a;++a){var u;if(e.Qa.Cb){var c=e.Qa.Lb[a];e.Qa.Fb||(c+=A.Tb)}else c=A.Tb;for(u=0;1>=u;++u){var l=e.gd[a][u],d=c;if(A.Pc&&(d+=A.vd[0],u&&(d+=A.od[0])),0\u003C(d=0>d?0:63\u003Cd?63:d)){var f=d;0\u003CA.wb&&(f=4\u003CA.wb?f>>2:f>>1)>9-A.wb&&(f=9-A.wb),1>f&&(f=1),l.dd=f,l.tc=2*d+f,l.ld=40\u003C=d?2:15\u003C=d?1:0}else l.tc=0;l.La=u}}}a=0}else Xe(e,6,\"Frame setup failed\"),a=e.a;if(a=0==a){if(a){e.$c=0,0\u003Ce.Aa||(e.Ic=Do);e:{a=e.Ic,A=4*(f=e.za);var h=32*f,p=f+1,m=0\u003Ce.L?f*(0\u003Ce.Aa?2:1):0,g=(2==e.Aa?2:1)*f;if((l=A+832+(u=3*(16*a+Ro[e.L])\u002F2*h)+(c=null!=e.Fa&&0\u003Ce.Fa.length?e.Kc.c*e.Kc.i:0))!=l)a=0;else{if(l>e.Vb){if(e.Vb=0,e.Ec=s(l),e.Fc=0,null==e.Ec){a=Xe(e,1,\"no memory during frame initialization.\");break e}e.Vb=l}l=e.Ec,d=e.Fc,e.Ac=l,e.Bc=d,d+=A,e.Gd=i(h,Ke),e.Hd=0,e.rb=i(p+1,ke),e.sb=1,e.wa=m?i(m,Oe):null,e.Y=0,e.D.Nb=0,e.D.wa=e.wa,e.D.Y=e.Y,0\u003Ce.Aa&&(e.D.Y+=f),t(!0),e.oc=l,e.pc=d,d+=832,e.ya=i(g,Me),e.aa=0,e.D.ya=e.ya,e.D.aa=e.aa,2==e.Aa&&(e.D.aa+=f),e.R=16*f,e.B=8*f,f=(h=Ro[e.L])*e.R,h=h\u002F2*e.B,e.sa=l,e.ta=d+f,e.qa=e.sa,e.ra=e.ta+16*a*e.R+h,e.Ha=e.qa,e.Ia=e.ra+8*a*e.B+h,e.$c=0,d+=u,e.mb=c?l:null,e.nb=c?d:null,t(d+c\u003C=e.Fc+e.Vb),Ze(e),o(e.Ac,e.Bc,0,A),a=1}}if(a){if(r.ka=0,r.y=e.sa,r.O=e.ta,r.f=e.qa,r.N=e.ra,r.ea=e.Ha,r.Vd=e.Ia,r.fa=e.R,r.Rc=e.B,r.F=null,r.J=0,!Un){for(a=-255;255>=a;++a)En[255+a]=0>a?-a:a;for(a=-1020;1020>=a;++a)Nn[1020+a]=-128>a?-128:127\u003Ca?127:a;for(a=-112;112>=a;++a)Qn[112+a]=-16>a?-16:15\u003Ca?15:a;for(a=-255;510>=a;++a)Fn[255+a]=0>a?0:255\u003Ca?255:a;Un=1}on=ut,sn=st,An=it,un=at,cn=At,an=ot,ln=Xt,dn=Wt,fn=Zt,hn=$t,pn=Jt,mn=Yt,gn=er,yn=tr,vn=Dt,wn=Kt,bn=zt,Bn=Vt,fo[0]=_t,fo[1]=lt,fo[2]=Bt,fo[3]=jt,fo[4]=Ct,fo[5]=Et,fo[6]=xt,fo[7]=Nt,fo[8]=Ft,fo[9]=Qt,lo[0]=gt,lo[1]=ft,lo[2]=ht,lo[3]=pt,lo[4]=yt,lo[5]=vt,lo[6]=wt,ho[0]=Tt,ho[1]=dt,ho[2]=Ut,ho[3]=St,ho[4]=It,ho[5]=Ht,ho[6]=Pt,a=1}else a=0}a&&(a=function(e,r){for(e.M=0;e.M\u003Ce.Va;++e.M){var i,a=e.Jc[e.M&e.Xb],A=e.m,u=e;for(i=0;i\u003Cu.za;++i){var c=A,l=u,d=l.Ac,f=l.Bc+4*i,h=l.zc,p=l.ya[l.aa+i];if(l.Qa.Bb?p.$b=N(c,l.Pa.jb[0])?2+N(c,l.Pa.jb[2]):N(c,l.Pa.jb[1]):p.$b=0,l.kc&&(p.Ad=N(c,l.Bd)),p.Za=!N(c,145)+0,p.Za){var m=p.Ob,g=0;for(l=0;4>l;++l){var y,v=h[0+l];for(y=0;4>y;++y){v=Ao[d[f+y]][v];for(var w=io[N(c,v[0])];0\u003Cw;)w=io[2*w+N(c,v[w])];v=-w,d[f+y]=v}n(m,g,d,f,4),g+=4,h[0+l]=v}}else v=N(c,156)?N(c,128)?1:3:N(c,163)?2:0,p.Ob[0]=v,o(d,f,v,4),o(h,0,v,4);p.Dd=N(c,142)?N(c,114)?N(c,183)?1:3:2:0}if(u.m.Ka)return Xe(e,7,\"Premature end-of-partition0 encountered.\");for(;e.ja\u003Ce.za;++e.ja){if(u=a,c=(A=e).rb[A.sb-1],d=A.rb[A.sb+A.ja],i=A.ya[A.aa+A.ja],f=A.kc?i.Ad:0)c.la=d.la=0,i.Za||(c.Na=d.Na=0),i.Hc=0,i.Gc=0,i.ia=0;else{var b,B;if(c=d,d=u,f=A.Pa.Xc,h=A.ya[A.aa+A.ja],p=A.pb[h.$b],l=h.ad,m=0,g=A.rb[A.sb-1],v=y=0,o(l,m,0,384),h.Za)var j=0,_=f[3];else{w=s(16);var C=c.Na+g.Na;if(C=no(d,f[1],C,p.Eb,0,w,0),c.Na=g.Na=(0\u003CC)+0,1\u003CC)on(w,0,l,m);else{var x=w[0]+3>>3;for(w=0;256>w;w+=16)l[m+w]=x}j=1,_=f[0]}var E=15&c.la,Q=15&g.la;for(w=0;4>w;++w){var F=1&Q;for(x=B=0;4>x;++x)E=E>>1|(F=(C=no(d,_,C=F+(1&E),p.Sc,j,l,m))>j)\u003C\u003C7,B=B\u003C\u003C2|(3\u003CC?3:1\u003CC?2:0!=l[m+0]),m+=16;E>>=4,Q=Q>>1|F\u003C\u003C7,y=(y\u003C\u003C8|B)>>>0}for(_=E,j=Q>>4,b=0;4>b;b+=2){for(B=0,E=c.la>>4+b,Q=g.la>>4+b,w=0;2>w;++w){for(F=1&Q,x=0;2>x;++x)C=F+(1&E),E=E>>1|(F=0\u003C(C=no(d,f[2],C,p.Qc,0,l,m)))\u003C\u003C3,B=B\u003C\u003C2|(3\u003CC?3:1\u003CC?2:0!=l[m+0]),m+=16;E>>=2,Q=Q>>1|F\u003C\u003C5}v|=B\u003C\u003C4*b,_|=E\u003C\u003C4\u003C\u003Cb,j|=(240&Q)\u003C\u003Cb}c.la=_,g.la=j,h.Hc=y,h.Gc=v,h.ia=43690&v?0:p.ia,f=!(y|v)}if(0\u003CA.L&&(A.wa[A.Y+A.ja]=A.gd[i.$b][i.Za],A.wa[A.Y+A.ja].La|=!f),u.Ka)return Xe(e,7,\"Premature end-of-file encountered.\")}if(Ze(e),A=r,u=1,i=(a=e).D,c=0\u003Ca.L&&a.M>=a.zb&&a.M\u003C=a.Va,0==a.Aa)e:{if(i.M=a.M,i.uc=c,Lr(a,i),u=1,i=(B=a.D).Nb,c=(v=Ro[a.L])*a.R,d=v\u002F2*a.B,w=16*i*a.R,x=8*i*a.B,f=a.sa,h=a.ta-c+w,p=a.qa,l=a.ra-d+x,m=a.Ha,g=a.Ia-d+x,Q=0==(E=B.M),y=E>=a.Va-1,2==a.Aa&&Lr(a,B),B.uc)for(F=(C=a).D.M,t(C.D.uc),B=C.yb;B\u003CC.Hb;++B){j=B,_=F;var U=(S=(M=C).D).Nb;b=M.R;var S=S.wa[S.Y+j],L=M.sa,T=M.ta+16*U*b+16*j,H=S.dd,I=S.tc;if(0!=I)if(t(3\u003C=I),1==M.L)0\u003Cj&&wn(L,T,b,I+4),S.La&&Bn(L,T,b,I),0\u003C_&&vn(L,T,b,I+4),S.La&&bn(L,T,b,I);else{var P=M.B,O=M.qa,k=M.ra+8*U*P+8*j,R=M.Ha,M=M.Ia+8*U*P+8*j;U=S.ld,0\u003Cj&&(dn(L,T,b,I+4,H,U),hn(O,k,R,M,P,I+4,H,U)),S.La&&(mn(L,T,b,I,H,U),yn(O,k,R,M,P,I,H,U)),0\u003C_&&(ln(L,T,b,I+4,H,U),fn(O,k,R,M,P,I+4,H,U)),S.La&&(pn(L,T,b,I,H,U),gn(O,k,R,M,P,I,H,U))}}if(a.ia&&alert(\"todo:DitherRow\"),null!=A.put){if(B=16*E,E=16*(E+1),Q?(A.y=a.sa,A.O=a.ta+w,A.f=a.qa,A.N=a.ra+x,A.ea=a.Ha,A.W=a.Ia+x):(B-=v,A.y=f,A.O=h,A.f=p,A.N=l,A.ea=m,A.W=g),y||(E-=v),E>A.o&&(E=A.o),A.F=null,A.J=null,null!=a.Fa&&0\u003Ca.Fa.length&&B\u003CE&&(A.J=lr(a,A,B,E-B),A.F=a.mb,null==A.F&&0==A.F.length)){u=Xe(a,3,\"Could not decode alpha data.\");break e}B\u003CA.j&&(v=A.j-B,B=A.j,t(!(1&v)),A.O+=a.R*v,A.N+=a.B*(v>>1),A.W+=a.B*(v>>1),null!=A.F&&(A.J+=A.width*v)),B\u003CE&&(A.O+=A.v,A.N+=A.v>>1,A.W+=A.v>>1,null!=A.F&&(A.J+=A.v),A.ka=B-A.j,A.U=A.va-A.v,A.T=E-B,u=A.put(A))}i+1!=a.Ic||y||(n(a.sa,a.ta-c,f,h+16*a.R,c),n(a.qa,a.ra-d,p,l+8*a.B,d),n(a.Ha,a.Ia-d,m,g+8*a.B,d))}if(!u)return Xe(e,6,\"Output aborted.\")}return 1}(e,r)),null!=r.bc&&r.bc(r),a&=1}return a?(e.cb=0,a):0}function et(e,t,r,n,o){o=e[t+r+32*n]+(o>>3),e[t+r+32*n]=-256&o?0>o?0:255:o}function tt(e,t,r,n,o,s){et(e,t,0,r,n+o),et(e,t,1,r,n+s),et(e,t,2,r,n-s),et(e,t,3,r,n-o)}function rt(e){return(20091*e>>16)+e}function nt(e,t,r,n){var o,i=0,a=s(16);for(o=0;4>o;++o){var A=e[t+0]+e[t+8],u=e[t+0]-e[t+8],c=(35468*e[t+4]>>16)-rt(e[t+12]),l=rt(e[t+4])+(35468*e[t+12]>>16);a[i+0]=A+l,a[i+1]=u+c,a[i+2]=u-c,a[i+3]=A-l,i+=4,t++}for(o=i=0;4>o;++o)A=(e=a[i+0]+4)+a[i+8],u=e-a[i+8],c=(35468*a[i+4]>>16)-rt(a[i+12]),et(r,n,0,0,A+(l=rt(a[i+4])+(35468*a[i+12]>>16))),et(r,n,1,0,u+c),et(r,n,2,0,u-c),et(r,n,3,0,A-l),i++,n+=32}function ot(e,t,r,n){var o=e[t+0]+4,s=35468*e[t+4]>>16,i=rt(e[t+4]),a=35468*e[t+1]>>16;tt(r,n,0,o+i,e=rt(e[t+1]),a),tt(r,n,1,o+s,e,a),tt(r,n,2,o-s,e,a),tt(r,n,3,o-i,e,a)}function st(e,t,r,n,o){nt(e,t,r,n),o&&nt(e,t+16,r,n+4)}function it(e,t,r,n){sn(e,t+0,r,n,1),sn(e,t+32,r,n+128,1)}function at(e,t,r,n){var o;for(e=e[t+0]+4,o=0;4>o;++o)for(t=0;4>t;++t)et(r,n,t,o,e)}function At(e,t,r,n){e[t+0]&&un(e,t+0,r,n),e[t+16]&&un(e,t+16,r,n+4),e[t+32]&&un(e,t+32,r,n+128),e[t+48]&&un(e,t+48,r,n+128+4)}function ut(e,t,r,n){var o,i=s(16);for(o=0;4>o;++o){var a=e[t+0+o]+e[t+12+o],A=e[t+4+o]+e[t+8+o],u=e[t+4+o]-e[t+8+o],c=e[t+0+o]-e[t+12+o];i[0+o]=a+A,i[8+o]=a-A,i[4+o]=c+u,i[12+o]=c-u}for(o=0;4>o;++o)a=(e=i[0+4*o]+3)+i[3+4*o],A=i[1+4*o]+i[2+4*o],u=i[1+4*o]-i[2+4*o],c=e-i[3+4*o],r[n+0]=a+A>>3,r[n+16]=c+u>>3,r[n+32]=a-A>>3,r[n+48]=c-u>>3,n+=64}function ct(e,t,r){var n,o=t-32,s=Tn,i=255-e[o-1];for(n=0;n\u003Cr;++n){var a,A=s,u=i+e[t-1];for(a=0;a\u003Cr;++a)e[t+a]=A[u+e[o+a]];t+=32}}function lt(e,t){ct(e,t,4)}function dt(e,t){ct(e,t,8)}function ft(e,t){ct(e,t,16)}function ht(e,t){var r;for(r=0;16>r;++r)n(e,t+32*r,e,t-32,16)}function pt(e,t){var r;for(r=16;0\u003Cr;--r)o(e,t,e[t-1],16),t+=32}function mt(e,t,r){var n;for(n=0;16>n;++n)o(t,r+32*n,e,16)}function gt(e,t){var r,n=16;for(r=0;16>r;++r)n+=e[t-1+32*r]+e[t+r-32];mt(n>>5,e,t)}function yt(e,t){var r,n=8;for(r=0;16>r;++r)n+=e[t-1+32*r];mt(n>>4,e,t)}function vt(e,t){var r,n=8;for(r=0;16>r;++r)n+=e[t+r-32];mt(n>>4,e,t)}function wt(e,t){mt(128,e,t)}function bt(e,t,r){return e+2*t+r+2>>2}function Bt(e,t){var r,o=t-32;for(o=new Uint8Array([bt(e[o-1],e[o+0],e[o+1]),bt(e[o+0],e[o+1],e[o+2]),bt(e[o+1],e[o+2],e[o+3]),bt(e[o+2],e[o+3],e[o+4])]),r=0;4>r;++r)n(e,t+32*r,o,0,o.length)}function jt(e,t){var r=e[t-1],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96];Q(e,t+0,16843009*bt(e[t-1-32],r,n)),Q(e,t+32,16843009*bt(r,n,o)),Q(e,t+64,16843009*bt(n,o,s)),Q(e,t+96,16843009*bt(o,s,s))}function _t(e,t){var r,n=4;for(r=0;4>r;++r)n+=e[t+r-32]+e[t-1+32*r];for(n>>=3,r=0;4>r;++r)o(e,t+32*r,n,4)}function Ct(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1-32],i=e[t+0-32],a=e[t+1-32],A=e[t+2-32],u=e[t+3-32];e[t+0+96]=bt(n,o,e[t-1+96]),e[t+1+96]=e[t+0+64]=bt(r,n,o),e[t+2+96]=e[t+1+64]=e[t+0+32]=bt(s,r,n),e[t+3+96]=e[t+2+64]=e[t+1+32]=e[t+0+0]=bt(i,s,r),e[t+3+64]=e[t+2+32]=e[t+1+0]=bt(a,i,s),e[t+3+32]=e[t+2+0]=bt(A,a,i),e[t+3+0]=bt(u,A,a)}function xt(e,t){var r=e[t+1-32],n=e[t+2-32],o=e[t+3-32],s=e[t+4-32],i=e[t+5-32],a=e[t+6-32],A=e[t+7-32];e[t+0+0]=bt(e[t+0-32],r,n),e[t+1+0]=e[t+0+32]=bt(r,n,o),e[t+2+0]=e[t+1+32]=e[t+0+64]=bt(n,o,s),e[t+3+0]=e[t+2+32]=e[t+1+64]=e[t+0+96]=bt(o,s,i),e[t+3+32]=e[t+2+64]=e[t+1+96]=bt(s,i,a),e[t+3+64]=e[t+2+96]=bt(i,a,A),e[t+3+96]=bt(a,A,A)}function Et(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1-32],i=e[t+0-32],a=e[t+1-32],A=e[t+2-32],u=e[t+3-32];e[t+0+0]=e[t+1+64]=s+i+1>>1,e[t+1+0]=e[t+2+64]=i+a+1>>1,e[t+2+0]=e[t+3+64]=a+A+1>>1,e[t+3+0]=A+u+1>>1,e[t+0+96]=bt(o,n,r),e[t+0+64]=bt(n,r,s),e[t+0+32]=e[t+1+96]=bt(r,s,i),e[t+1+32]=e[t+2+96]=bt(s,i,a),e[t+2+32]=e[t+3+96]=bt(i,a,A),e[t+3+32]=bt(a,A,u)}function Nt(e,t){var r=e[t+0-32],n=e[t+1-32],o=e[t+2-32],s=e[t+3-32],i=e[t+4-32],a=e[t+5-32],A=e[t+6-32],u=e[t+7-32];e[t+0+0]=r+n+1>>1,e[t+1+0]=e[t+0+64]=n+o+1>>1,e[t+2+0]=e[t+1+64]=o+s+1>>1,e[t+3+0]=e[t+2+64]=s+i+1>>1,e[t+0+32]=bt(r,n,o),e[t+1+32]=e[t+0+96]=bt(n,o,s),e[t+2+32]=e[t+1+96]=bt(o,s,i),e[t+3+32]=e[t+2+96]=bt(s,i,a),e[t+3+64]=bt(i,a,A),e[t+3+96]=bt(a,A,u)}function Qt(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96];e[t+0+0]=r+n+1>>1,e[t+2+0]=e[t+0+32]=n+o+1>>1,e[t+2+32]=e[t+0+64]=o+s+1>>1,e[t+1+0]=bt(r,n,o),e[t+3+0]=e[t+1+32]=bt(n,o,s),e[t+3+32]=e[t+1+64]=bt(o,s,s),e[t+3+64]=e[t+2+64]=e[t+0+96]=e[t+1+96]=e[t+2+96]=e[t+3+96]=s}function Ft(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96],i=e[t-1-32],a=e[t+0-32],A=e[t+1-32],u=e[t+2-32];e[t+0+0]=e[t+2+32]=r+i+1>>1,e[t+0+32]=e[t+2+64]=n+r+1>>1,e[t+0+64]=e[t+2+96]=o+n+1>>1,e[t+0+96]=s+o+1>>1,e[t+3+0]=bt(a,A,u),e[t+2+0]=bt(i,a,A),e[t+1+0]=e[t+3+32]=bt(r,i,a),e[t+1+32]=e[t+3+64]=bt(n,r,i),e[t+1+64]=e[t+3+96]=bt(o,n,r),e[t+1+96]=bt(s,o,n)}function Ut(e,t){var r;for(r=0;8>r;++r)n(e,t+32*r,e,t-32,8)}function St(e,t){var r;for(r=0;8>r;++r)o(e,t,e[t-1],8),t+=32}function Lt(e,t,r){var n;for(n=0;8>n;++n)o(t,r+32*n,e,8)}function Tt(e,t){var r,n=8;for(r=0;8>r;++r)n+=e[t+r-32]+e[t-1+32*r];Lt(n>>4,e,t)}function Ht(e,t){var r,n=4;for(r=0;8>r;++r)n+=e[t+r-32];Lt(n>>3,e,t)}function It(e,t){var r,n=4;for(r=0;8>r;++r)n+=e[t-1+32*r];Lt(n>>3,e,t)}function Pt(e,t){Lt(128,e,t)}function Ot(e,t,r){var n=e[t-r],o=e[t+0],s=3*(o-n)+Sn[1020+e[t-2*r]-e[t+r]],i=Ln[112+(s+4>>3)];e[t-r]=Tn[255+n+Ln[112+(s+3>>3)]],e[t+0]=Tn[255+o-i]}function kt(e,t,r,n){var o=e[t+0],s=e[t+r];return Hn[255+e[t-2*r]-e[t-r]]>n||Hn[255+s-o]>n}function Rt(e,t,r,n){return 4*Hn[255+e[t-r]-e[t+0]]+Hn[255+e[t-2*r]-e[t+r]]\u003C=n}function Mt(e,t,r,n,o){var s=e[t-3*r],i=e[t-2*r],a=e[t-r],A=e[t+0],u=e[t+r],c=e[t+2*r],l=e[t+3*r];return 4*Hn[255+a-A]+Hn[255+i-u]>n?0:Hn[255+e[t-4*r]-s]\u003C=o&&Hn[255+s-i]\u003C=o&&Hn[255+i-a]\u003C=o&&Hn[255+l-c]\u003C=o&&Hn[255+c-u]\u003C=o&&Hn[255+u-A]\u003C=o}function Dt(e,t,r,n){var o=2*n+1;for(n=0;16>n;++n)Rt(e,t+n,r,o)&&Ot(e,t+n,r)}function Kt(e,t,r,n){var o=2*n+1;for(n=0;16>n;++n)Rt(e,t+n*r,1,o)&&Ot(e,t+n*r,1)}function zt(e,t,r,n){var o;for(o=3;0\u003Co;--o)Dt(e,t+=4*r,r,n)}function Vt(e,t,r,n){var o;for(o=3;0\u003Co;--o)Kt(e,t+=4,r,n)}function qt(e,t,r,n,o,s,i,a){for(s=2*s+1;0\u003Co--;){if(Mt(e,t,r,s,i))if(kt(e,t,r,a))Ot(e,t,r);else{var A=e,u=t,c=r,l=A[u-2*c],d=A[u-c],f=A[u+0],h=A[u+c],p=A[u+2*c],m=27*(y=Sn[1020+3*(f-d)+Sn[1020+l-h]])+63>>7,g=18*y+63>>7,y=9*y+63>>7;A[u-3*c]=Tn[255+A[u-3*c]+y],A[u-2*c]=Tn[255+l+g],A[u-c]=Tn[255+d+m],A[u+0]=Tn[255+f-m],A[u+c]=Tn[255+h-g],A[u+2*c]=Tn[255+p-y]}t+=n}}function Gt(e,t,r,n,o,s,i,a){for(s=2*s+1;0\u003Co--;){if(Mt(e,t,r,s,i))if(kt(e,t,r,a))Ot(e,t,r);else{var A=e,u=t,c=r,l=A[u-c],d=A[u+0],f=A[u+c],h=Ln[112+(4+(p=3*(d-l))>>3)],p=Ln[112+(p+3>>3)],m=h+1>>1;A[u-2*c]=Tn[255+A[u-2*c]+m],A[u-c]=Tn[255+l+p],A[u+0]=Tn[255+d-h],A[u+c]=Tn[255+f-m]}t+=n}}function Xt(e,t,r,n,o,s){qt(e,t,r,1,16,n,o,s)}function Wt(e,t,r,n,o,s){qt(e,t,1,r,16,n,o,s)}function Jt(e,t,r,n,o,s){var i;for(i=3;0\u003Ci;--i)Gt(e,t+=4*r,r,1,16,n,o,s)}function Yt(e,t,r,n,o,s){var i;for(i=3;0\u003Ci;--i)Gt(e,t+=4,1,r,16,n,o,s)}function Zt(e,t,r,n,o,s,i,a){qt(e,t,o,1,8,s,i,a),qt(r,n,o,1,8,s,i,a)}function $t(e,t,r,n,o,s,i,a){qt(e,t,1,o,8,s,i,a),qt(r,n,1,o,8,s,i,a)}function er(e,t,r,n,o,s,i,a){Gt(e,t+4*o,o,1,8,s,i,a),Gt(r,n+4*o,o,1,8,s,i,a)}function tr(e,t,r,n,o,s,i,a){Gt(e,t+4,1,o,8,s,i,a),Gt(r,n+4,1,o,8,s,i,a)}function rr(){this.ba=new ie,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new Ae,this.memory=0,this.Ib=\"OutputFunc\",this.Jb=\"OutputAlphaFunc\",this.Nd=\"OutputRowFunc\"}function nr(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function or(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function sr(){this.ua=0,this.Wa=new H,this.vb=new H,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new f,this.yc=new l}function ir(){this.xb=this.a=0,this.l=new qe,this.ca=new ie,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new b,this.Pb=0,this.wd=new b,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new sr,this.ab=0,this.gc=i(4,or),this.Oc=0}function ar(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new qe,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function Ar(e,t,r,n,o,s,i){for(e=null==e?0:e[t+0],t=0;t\u003Ci;++t)o[s+t]=e+r[n+t]&255,e=o[s+t]}function ur(e,t,r,n,o,s,i){var a;if(null==e)Ar(null,null,r,n,o,s,i);else for(a=0;a\u003Ci;++a)o[s+a]=e[t+a]+r[n+a]&255}function cr(e,t,r,n,o,s,i){if(null==e)Ar(null,null,r,n,o,s,i);else{var a,A=e[t+0],u=A,c=A;for(a=0;a\u003Ci;++a)u=c+(A=e[t+a])-u,c=r[n+a]+(-256&u?0>u?0:255:u)&255,u=A,o[s+a]=c}}function lr(e,r,o,i){var a=r.width,A=r.o;if(t(null!=e&&null!=r),0>o||0>=i||o+i>A)return null;if(!e.Cc){if(null==e.ga){var u;if(e.ga=new ar,(u=null==e.ga)||(u=r.width*r.o,t(0==e.Gb.length),e.Gb=s(u),e.Uc=0,null==e.Gb?u=0:(e.mb=e.Gb,e.nb=e.Uc,e.rc=null,u=1),u=!u),!u){u=e.ga;var c=e.Fa,l=e.P,d=e.qc,f=e.mb,h=e.nb,p=l+1,m=d-1,y=u.l;if(t(null!=c&&null!=f&&null!=r),go[0]=null,go[1]=Ar,go[2]=ur,go[3]=cr,u.ca=f,u.tb=h,u.c=r.width,u.i=r.height,t(0\u003Cu.c&&0\u003Cu.i),1>=d)r=0;else if(u.$a=c[l+0]>>0&3,u.Z=c[l+0]>>2&3,u.Lc=c[l+0]>>4&3,l=c[l+0]>>6&3,0>u.$a||1\u003Cu.$a||4\u003C=u.Z||1\u003Cu.Lc||l)r=0;else if(y.put=fe,y.ac=de,y.bc=he,y.ma=u,y.width=r.width,y.height=r.height,y.Da=r.Da,y.v=r.v,y.va=r.va,y.j=r.j,y.o=r.o,u.$a)e:{t(1==u.$a),r=Ne();t:for(;;){if(null==r){r=0;break e}if(t(null!=u),u.mc=r,r.c=u.c,r.i=u.i,r.l=u.l,r.l.ma=u,r.l.width=u.c,r.l.height=u.i,r.a=0,g(r.m,c,p,m),!Qe(u.c,u.i,1,r,null))break t;if(1==r.ab&&3==r.gc[0].hc&&je(r.s)?(u.ic=1,c=r.c*r.i,r.Ta=null,r.Ua=0,r.V=s(c),r.Ba=0,null==r.V?(r.a=1,r=0):r=1):(u.ic=0,r=Fe(r,u.c)),!r)break t;r=1;break e}u.mc=null,r=0}else r=m>=u.c*u.i;u=!r}if(u)return null;1!=e.ga.Lc?e.Ga=0:i=A-o}t(null!=e.ga),t(o+i\u003C=A);e:{if(r=(c=e.ga).c,A=c.l.o,0==c.$a){if(p=e.rc,m=e.Vc,y=e.Fa,l=e.P+1+o*r,d=e.mb,f=e.nb+o*r,t(l\u003C=e.P+e.qc),0!=c.Z)for(t(null!=go[c.Z]),u=0;u\u003Ci;++u)go[c.Z](p,m,y,l,d,f,r),p=d,m=f,f+=r,l+=r;else for(u=0;u\u003Ci;++u)n(d,f,y,l,r),p=d,m=f,f+=r,l+=r;e.rc=p,e.Vc=m}else{if(t(null!=c.mc),r=o+i,t(null!=(u=c.mc)),t(r\u003C=u.i),u.C>=r)r=1;else if(c.ic||mr(),c.ic){c=u.V,p=u.Ba,m=u.c;var v=u.i,w=(y=1,l=u.$\u002Fm,d=u.$%m,f=u.m,h=u.s,u.$),b=m*v,B=m*r,_=h.wc,x=w\u003CB?we(h,d,l):null;t(w\u003C=b),t(r\u003C=v),t(je(h));t:for(;;){for(;!f.h&&w\u003CB;){if(d&_||(x=we(h,d,l)),t(null!=x),C(f),256>(v=ye(x.G[0],x.H[0],f)))c[p+w]=v,++w,++d>=m&&(d=0,++l\u003C=r&&!(l%16)&&Ce(u,l));else{if(!(280>v)){y=0;break t}v=me(v-256,f);var E,N=ye(x.G[4],x.H[4],f);if(C(f),!(w>=(N=ge(m,N=me(N,f)))&&b-w>=v)){y=0;break t}for(E=0;E\u003Cv;++E)c[p+w+E]=c[p+w+E-N];for(w+=v,d+=v;d>=m;)d-=m,++l\u003C=r&&!(l%16)&&Ce(u,l);w\u003CB&&d&_&&(x=we(h,d,l))}t(f.h==j(f))}Ce(u,l>r?r:l);break t}!y||f.h&&w\u003Cb?(y=0,u.a=f.h?5:3):u.$=w,r=y}else r=xe(u,u.V,u.Ba,u.c,u.i,r,Ue);if(!r){i=0;break e}}o+i>=A&&(e.Cc=1),i=1}if(!i)return null;if(e.Cc&&(null!=(i=e.ga)&&(i.mc=null),e.ga=null,0\u003Ce.Ga))return alert(\"todo:WebPDequantizeLevels\"),null}return e.nb+o*a}function dr(e,t,r,n,o,s){for(;0\u003Co--;){var i,a=e,A=t+(r?1:0),u=e,c=t+(r?0:3);for(i=0;i\u003Cn;++i){var l=u[c+4*i];255!=l&&(l*=32897,a[A+4*i+0]=a[A+4*i+0]*l>>23,a[A+4*i+1]=a[A+4*i+1]*l>>23,a[A+4*i+2]=a[A+4*i+2]*l>>23)}t+=s}}function fr(e,t,r,n,o){for(;0\u003Cn--;){var s;for(s=0;s\u003Cr;++s){var i=e[t+2*s+0],a=15&(u=e[t+2*s+1]),A=4369*a,u=(240&u|u>>4)*A>>16;e[t+2*s+0]=(240&i|i>>4)*A>>16&240|(15&i|i\u003C\u003C4)*A>>16>>4&15,e[t+2*s+1]=240&u|a}t+=o}}function hr(e,t,r,n,o,s,i,a){var A,u,c=255;for(u=0;u\u003Co;++u){for(A=0;A\u003Cn;++A){var l=e[t+A];s[i+4*A]=l,c&=l}t+=r,i+=a}return 255!=c}function pr(e,t,r,n,o){var s;for(s=0;s\u003Co;++s)r[n+s]=e[t+s]>>8}function mr(){jn=dr,_n=fr,Cn=hr,xn=pr}function gr(r,n,o){e[r]=function(e,r,s,i,a,A,u,c,l,d,f,h,p,m,g,y,v){var w,b=v-1>>1,B=a[A+0]|u[c+0]\u003C\u003C16,j=l[d+0]|f[h+0]\u003C\u003C16;t(null!=e);var _=3*B+j+131074>>2;for(n(e[r+0],255&_,_>>16,p,m),null!=s&&(_=3*j+B+131074>>2,n(s[i+0],255&_,_>>16,g,y)),w=1;w\u003C=b;++w){var C=a[A+w]|u[c+w]\u003C\u003C16,x=l[d+w]|f[h+w]\u003C\u003C16,E=B+C+j+x+524296,N=E+2*(C+j)>>3;_=N+B>>1,B=(E=E+2*(B+x)>>3)+C>>1,n(e[r+2*w-1],255&_,_>>16,p,m+(2*w-1)*o),n(e[r+2*w-0],255&B,B>>16,p,m+(2*w-0)*o),null!=s&&(_=E+j>>1,B=N+x>>1,n(s[i+2*w-1],255&_,_>>16,g,y+(2*w-1)*o),n(s[i+2*w+0],255&B,B>>16,g,y+(2*w+0)*o)),B=C,j=x}1&v||(_=3*B+j+131074>>2,n(e[r+v-1],255&_,_>>16,p,m+(v-1)*o),null!=s&&(_=3*j+B+131074>>2,n(s[i+v-1],255&_,_>>16,g,y+(v-1)*o)))}}function yr(){yo[In]=vo,yo[Pn]=bo,yo[On]=wo,yo[kn]=Bo,yo[Rn]=jo,yo[Mn]=_o,yo[Dn]=Co,yo[Kn]=bo,yo[zn]=Bo,yo[Vn]=jo,yo[qn]=_o}function vr(e){return e&~Uo?0>e?0:255:e>>Fo}function wr(e,t){return vr((19077*e>>8)+(26149*t>>8)-14234)}function br(e,t,r){return vr((19077*e>>8)-(6419*t>>8)-(13320*r>>8)+8708)}function Br(e,t){return vr((19077*e>>8)+(33050*t>>8)-17685)}function jr(e,t,r,n,o){n[o+0]=wr(e,r),n[o+1]=br(e,t,r),n[o+2]=Br(e,t)}function _r(e,t,r,n,o){n[o+0]=Br(e,t),n[o+1]=br(e,t,r),n[o+2]=wr(e,r)}function Cr(e,t,r,n,o){var s=br(e,t,r);t=s\u003C\u003C3&224|Br(e,t)>>3,n[o+0]=248&wr(e,r)|s>>5,n[o+1]=t}function xr(e,t,r,n,o){var s=240&Br(e,t)|15;n[o+0]=240&wr(e,r)|br(e,t,r)>>4,n[o+1]=s}function Er(e,t,r,n,o){n[o+0]=255,jr(e,t,r,n,o+1)}function Nr(e,t,r,n,o){_r(e,t,r,n,o),n[o+3]=255}function Qr(e,t,r,n,o){jr(e,t,r,n,o),n[o+3]=255}function Ve(e,t){return 0>e?0:e>t?t:e}function Fr(t,r,n){e[t]=function(e,t,o,s,i,a,A,u,c){for(var l=u+(-2&c)*n;u!=l;)r(e[t+0],o[s+0],i[a+0],A,u),r(e[t+1],o[s+0],i[a+0],A,u+n),t+=2,++s,++a,u+=2*n;1&c&&r(e[t+0],o[s+0],i[a+0],A,u)}}function Ur(e,t,r){return 0==r?0==e?0==t?6:5:0==t?4:0:r}function Sr(e,t,r,n,o){switch(e>>>30){case 3:sn(t,r,n,o,0);break;case 2:an(t,r,n,o);break;case 1:un(t,r,n,o)}}function Lr(e,t){var r,s,i=t.M,a=t.Nb,A=e.oc,u=e.pc+40,c=e.oc,l=e.pc+584,d=e.oc,f=e.pc+600;for(r=0;16>r;++r)A[u+32*r-1]=129;for(r=0;8>r;++r)c[l+32*r-1]=129,d[f+32*r-1]=129;for(0\u003Ci?A[u-1-32]=c[l-1-32]=d[f-1-32]=129:(o(A,u-32-1,127,21),o(c,l-32-1,127,9),o(d,f-32-1,127,9)),s=0;s\u003Ce.za;++s){var h=t.ya[t.aa+s];if(0\u003Cs){for(r=-1;16>r;++r)n(A,u+32*r-4,A,u+32*r+12,4);for(r=-1;8>r;++r)n(c,l+32*r-4,c,l+32*r+4,4),n(d,f+32*r-4,d,f+32*r+4,4)}var p=e.Gd,m=e.Hd+s,g=h.ad,y=h.Hc;if(0\u003Ci&&(n(A,u-32,p[m].y,0,16),n(c,l-32,p[m].f,0,8),n(d,f-32,p[m].ea,0,8)),h.Za){var v=A,w=u-32+16;for(0\u003Ci&&(s>=e.za-1?o(v,w,p[m].y[15],4):n(v,w,p[m+1].y,0,4)),r=0;4>r;r++)v[w+128+r]=v[w+256+r]=v[w+384+r]=v[w+0+r];for(r=0;16>r;++r,y\u003C\u003C=2)v=A,w=u+ko[r],fo[h.Ob[r]](v,w),Sr(y,g,16*+r,v,w)}else if(v=Ur(s,i,h.Ob[0]),lo[v](A,u),0!=y)for(r=0;16>r;++r,y\u003C\u003C=2)Sr(y,g,16*+r,A,u+ko[r]);for(r=h.Gc,v=Ur(s,i,h.Dd),ho[v](c,l),ho[v](d,f),y=g,v=c,w=l,255&(h=r>>0)&&(170&h?An(y,256,v,w):cn(y,256,v,w)),h=d,y=f,255&(r>>=8)&&(170&r?An(g,320,h,y):cn(g,320,h,y)),i\u003Ce.Ub-1&&(n(p[m].y,0,A,u+480,16),n(p[m].f,0,c,l+224,8),n(p[m].ea,0,d,f+224,8)),r=8*a*e.B,p=e.sa,m=e.ta+16*s+16*a*e.R,g=e.qa,h=e.ra+8*s+r,y=e.Ha,v=e.Ia+8*s+r,r=0;16>r;++r)n(p,m+r*e.R,A,u+32*r,16);for(r=0;8>r;++r)n(g,h+r*e.B,c,l+32*r,8),n(y,v+r*e.B,d,f+32*r,8)}}function Tr(e,n,o,s,i,a,A,u,c){var l=[0],d=[0],f=0,h=null!=c?c.kd:0,p=null!=c?c:new nr;if(null==e||12>o)return 7;p.data=e,p.w=n,p.ha=o,n=[n],o=[o],p.gb=[p.gb];e:{var m=n,y=o,v=p.gb;if(t(null!=e),t(null!=y),t(null!=v),v[0]=0,12\u003C=y[0]&&!r(e,m[0],\"RIFF\")){if(r(e,m[0]+8,\"WEBP\")){v=3;break e}var w=S(e,m[0]+4);if(12>w||4294967286\u003Cw){v=3;break e}if(h&&w>y[0]-8){v=7;break e}v[0]=w,m[0]+=12,y[0]-=12}v=0}if(0!=v)return v;for(w=0\u003Cp.gb[0],o=o[0];;){e:{var B=e;y=n,v=o;var j=l,_=d,C=m=[0];if((N=f=[f])[0]=0,8>v[0])v=7;else{if(!r(B,y[0],\"VP8X\")){if(10!=S(B,y[0]+4)){v=3;break e}if(18>v[0]){v=7;break e}var x=S(B,y[0]+8),E=1+U(B,y[0]+12);if(2147483648\u003C=E*(B=1+U(B,y[0]+15))){v=3;break e}null!=C&&(C[0]=x),null!=j&&(j[0]=E),null!=_&&(_[0]=B),y[0]+=18,v[0]-=18,N[0]=1}v=0}}if(f=f[0],m=m[0],0!=v)return v;if(y=!!(2&m),!w&&f)return 3;if(null!=a&&(a[0]=!!(16&m)),null!=A&&(A[0]=y),null!=u&&(u[0]=0),A=l[0],m=d[0],f&&y&&null==c){v=0;break}if(4>o){v=7;break}if(w&&f||!w&&!f&&!r(e,n[0],\"ALPH\")){o=[o],p.na=[p.na],p.P=[p.P],p.Sa=[p.Sa];e:{x=e,v=n,w=o;var N=p.gb;j=p.na,_=p.P,C=p.Sa,E=22,t(null!=x),t(null!=w),B=v[0];var Q=w[0];for(t(null!=j),t(null!=C),j[0]=null,_[0]=null,C[0]=0;;){if(v[0]=B,w[0]=Q,8>Q){v=7;break e}var F=S(x,B+4);if(4294967286\u003CF){v=3;break e}var L=8+F+1&-2;if(E+=L,0\u003CN&&E>N){v=3;break e}if(!r(x,B,\"VP8 \")||!r(x,B,\"VP8L\")){v=0;break e}if(Q[0]\u003CL){v=7;break e}r(x,B,\"ALPH\")||(j[0]=x,_[0]=B+8,C[0]=F),B+=L,Q-=L}}if(o=o[0],p.na=p.na[0],p.P=p.P[0],p.Sa=p.Sa[0],0!=v)break}o=[o],p.Ja=[p.Ja],p.xa=[p.xa];e:if(N=e,v=n,w=o,j=p.gb[0],_=p.Ja,C=p.xa,x=v[0],B=!r(N,x,\"VP8 \"),E=!r(N,x,\"VP8L\"),t(null!=N),t(null!=w),t(null!=_),t(null!=C),8>w[0])v=7;else{if(B||E){if(N=S(N,x+4),12\u003C=j&&N>j-12){v=3;break e}if(h&&N>w[0]-8){v=7;break e}_[0]=N,v[0]+=8,w[0]-=8,C[0]=E}else C[0]=5\u003C=w[0]&&47==N[x+0]&&!(N[x+4]>>5),_[0]=w[0];v=0}if(o=o[0],p.Ja=p.Ja[0],p.xa=p.xa[0],n=n[0],0!=v)break;if(4294967286\u003Cp.Ja)return 3;if(null==u||y||(u[0]=p.xa?2:1),A=[A],m=[m],p.xa){if(5>o){v=7;break}u=A,h=m,y=a,null==e||5>o?e=0:5\u003C=o&&47==e[n+0]&&!(e[n+4]>>5)?(w=[0],N=[0],j=[0],g(_=new b,e,n,o),pe(_,w,N,j)?(null!=u&&(u[0]=w[0]),null!=h&&(h[0]=N[0]),null!=y&&(y[0]=j[0]),e=1):e=0):e=0}else{if(10>o){v=7;break}u=m,null==e||10>o||!We(e,n+3,o-3)?e=0:(h=e[n+0]|e[n+1]\u003C\u003C8|e[n+2]\u003C\u003C16,y=16383&(e[n+7]\u003C\u003C8|e[n+6]),e=16383&(e[n+9]\u003C\u003C8|e[n+8]),1&h||3\u003C(h>>1&7)||!(h>>4&1)||h>>5>=p.Ja||!y||!e?e=0:(A&&(A[0]=y),u&&(u[0]=e),e=1))}if(!e)return 3;if(A=A[0],m=m[0],f&&(l[0]!=A||d[0]!=m))return 3;null!=c&&(c[0]=p,c.offset=n-c.w,t(4294967286>n-c.w),t(c.offset==c.ha-o));break}return 0==v||7==v&&f&&null==c?(null!=a&&(a[0]|=null!=p.na&&0\u003Cp.na.length),null!=s&&(s[0]=A),null!=i&&(i[0]=m),0):v}function Hr(e,t,r){var n=t.width,o=t.height,s=0,i=0,a=n,A=o;if(t.Da=null!=e&&0\u003Ce.Da,t.Da&&(a=e.cd,A=e.bd,s=e.v,i=e.j,11>r||(s&=-2,i&=-2),0>s||0>i||0>=a||0>=A||s+a>n||i+A>o))return 0;if(t.v=s,t.j=i,t.va=s+a,t.o=i+A,t.U=a,t.T=A,t.da=null!=e&&0\u003Ce.da,t.da){if(!I(a,A,r=[e.ib],s=[e.hb]))return 0;t.ib=r[0],t.hb=s[0]}return t.ob=null!=e&&e.ob,t.Kb=null==e||!e.Sd,t.da&&(t.ob=t.ib\u003C3*n\u002F4&&t.hb\u003C3*o\u002F4,t.Kb=0),1}function Ir(e){if(null==e)return 2;if(11>e.S){var t=e.f.RGBA;t.fb+=(e.height-1)*t.A,t.A=-t.A}else t=e.f.kb,e=e.height,t.O+=(e-1)*t.fa,t.fa=-t.fa,t.N+=(e-1>>1)*t.Ab,t.Ab=-t.Ab,t.W+=(e-1>>1)*t.Db,t.Db=-t.Db,null!=t.F&&(t.J+=(e-1)*t.lb,t.lb=-t.lb);return 0}function Pr(e,t,r,n){if(null==n||0>=e||0>=t)return 2;if(null!=r){if(r.Da){var o=r.cd,i=r.bd,a=-2&r.v,A=-2&r.j;if(0>a||0>A||0>=o||0>=i||a+o>e||A+i>t)return 2;e=o,t=i}if(r.da){if(!I(e,t,o=[r.ib],i=[r.hb]))return 2;e=o[0],t=i[0]}}n.width=e,n.height=t;e:{var u=n.width,c=n.height;if(e=n.S,0>=u||0>=c||!(e>=In&&13>e))e=2;else{if(0>=n.Rd&&null==n.sd){a=i=o=t=0;var l=(A=u*Ko[e])*c;if(11>e||(i=(c+1)\u002F2*(t=(u+1)\u002F2),12==e&&(a=(o=u)*c)),null==(c=s(l+2*i+a))){e=1;break e}n.sd=c,11>e?((u=n.f.RGBA).eb=c,u.fb=0,u.A=A,u.size=l):((u=n.f.kb).y=c,u.O=0,u.fa=A,u.Fd=l,u.f=c,u.N=0+l,u.Ab=t,u.Cd=i,u.ea=c,u.W=0+l+i,u.Db=t,u.Ed=i,12==e&&(u.F=c,u.J=0+l+2*i),u.Tc=a,u.lb=o)}if(t=1,o=n.S,i=n.width,a=n.height,o>=In&&13>o)if(11>o)e=n.f.RGBA,t&=(A=Math.abs(e.A))*(a-1)+i\u003C=e.size,t&=A>=i*Ko[o],t&=null!=e.eb;else{e=n.f.kb,A=(i+1)\u002F2,l=(a+1)\u002F2,u=Math.abs(e.fa),c=Math.abs(e.Ab);var d=Math.abs(e.Db),f=Math.abs(e.lb),h=f*(a-1)+i;t&=u*(a-1)+i\u003C=e.Fd,t&=c*(l-1)+A\u003C=e.Cd,t=(t&=d*(l-1)+A\u003C=e.Ed)&u>=i&c>=A&d>=A,t&=null!=e.y,t&=null!=e.f,t&=null!=e.ea,12==o&&(t&=f>=i,t&=h\u003C=e.Tc,t&=null!=e.F)}else t=0;e=t?0:2}}return 0!=e||null!=r&&r.fd&&(e=Ir(n)),e}var Or=64,kr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Rr=24,Mr=32,Dr=8,Kr=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];k(\"Predictor0\",\"PredictorAdd0\"),e.Predictor0=function(){return 4278190080},e.Predictor1=function(e){return e},e.Predictor2=function(e,t,r){return t[r+0]},e.Predictor3=function(e,t,r){return t[r+1]},e.Predictor4=function(e,t,r){return t[r-1]},e.Predictor5=function(e,t,r){return M(M(e,t[r+1]),t[r+0])},e.Predictor6=function(e,t,r){return M(e,t[r-1])},e.Predictor7=function(e,t,r){return M(e,t[r+0])},e.Predictor8=function(e,t,r){return M(t[r-1],t[r+0])},e.Predictor9=function(e,t,r){return M(t[r+0],t[r+1])},e.Predictor10=function(e,t,r){return M(M(e,t[r-1]),M(t[r+0],t[r+1]))},e.Predictor11=function(e,t,r){var n=t[r+0];return 0>=z(n>>24&255,e>>24&255,(t=t[r-1])>>24&255)+z(n>>16&255,e>>16&255,t>>16&255)+z(n>>8&255,e>>8&255,t>>8&255)+z(255&n,255&e,255&t)?n:e},e.Predictor12=function(e,t,r){var n=t[r+0];return(D((e>>24&255)+(n>>24&255)-((t=t[r-1])>>24&255))\u003C\u003C24|D((e>>16&255)+(n>>16&255)-(t>>16&255))\u003C\u003C16|D((e>>8&255)+(n>>8&255)-(t>>8&255))\u003C\u003C8|D((255&e)+(255&n)-(255&t)))>>>0},e.Predictor13=function(e,t,r){var n=t[r-1];return(K((e=M(e,t[r+0]))>>24&255,n>>24&255)\u003C\u003C24|K(e>>16&255,n>>16&255)\u003C\u003C16|K(e>>8&255,n>>8&255)\u003C\u003C8|K(e>>0&255,n>>0&255))>>>0};var zr=e.PredictorAdd0;e.PredictorAdd1=V,k(\"Predictor2\",\"PredictorAdd2\"),k(\"Predictor3\",\"PredictorAdd3\"),k(\"Predictor4\",\"PredictorAdd4\"),k(\"Predictor5\",\"PredictorAdd5\"),k(\"Predictor6\",\"PredictorAdd6\"),k(\"Predictor7\",\"PredictorAdd7\"),k(\"Predictor8\",\"PredictorAdd8\"),k(\"Predictor9\",\"PredictorAdd9\"),k(\"Predictor10\",\"PredictorAdd10\"),k(\"Predictor11\",\"PredictorAdd11\"),k(\"Predictor12\",\"PredictorAdd12\"),k(\"Predictor13\",\"PredictorAdd13\");var Vr=e.PredictorAdd2;W(\"ColorIndexInverseTransform\",\"MapARGB\",\"32b\",(function(e){return e>>8&255}),(function(e){return e})),W(\"VP8LColorIndexInverseTransformAlpha\",\"MapAlpha\",\"8b\",(function(e){return e}),(function(e){return e>>8&255}));var qr,Gr=e.ColorIndexInverseTransform,Xr=e.MapARGB,Wr=e.VP8LColorIndexInverseTransformAlpha,Jr=e.MapAlpha,Yr=e.VP8LPredictorsAdd=[];Yr.length=16,(e.VP8LPredictors=[]).length=16,(e.VP8LPredictorsAdd_C=[]).length=16,(e.VP8LPredictors_C=[]).length=16;var Zr,$r,en,tn,rn,nn,on,sn,an,An,un,cn,ln,dn,fn,hn,pn,mn,gn,yn,vn,wn,bn,Bn,jn,_n,Cn,xn,En=s(511),Nn=s(2041),Qn=s(225),Fn=s(767),Un=0,Sn=Nn,Ln=Qn,Tn=Fn,Hn=En,In=0,Pn=1,On=2,kn=3,Rn=4,Mn=5,Dn=6,Kn=7,zn=8,Vn=9,qn=10,Gn=[2,3,7],Xn=[3,3,11],Wn=[280,256,256,256,40],Jn=[0,1,1,1,0],Yn=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Zn=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],$n=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],eo=8,to=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ro=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],no=null,oo=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],so=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],io=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],ao=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],Ao=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],uo=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],co=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],lo=[],fo=[],ho=[],po=1,mo=2,go=[],yo=[];gr(\"UpsampleRgbLinePair\",jr,3),gr(\"UpsampleBgrLinePair\",_r,3),gr(\"UpsampleRgbaLinePair\",Qr,4),gr(\"UpsampleBgraLinePair\",Nr,4),gr(\"UpsampleArgbLinePair\",Er,4),gr(\"UpsampleRgba4444LinePair\",xr,2),gr(\"UpsampleRgb565LinePair\",Cr,2);var vo=e.UpsampleRgbLinePair,wo=e.UpsampleBgrLinePair,bo=e.UpsampleRgbaLinePair,Bo=e.UpsampleBgraLinePair,jo=e.UpsampleArgbLinePair,_o=e.UpsampleRgba4444LinePair,Co=e.UpsampleRgb565LinePair,xo=16,Eo=1\u003C\u003Cxo-1,No=-227,Qo=482,Fo=6,Uo=(256\u003C\u003CFo)-1,So=0,Lo=s(256),To=s(256),Ho=s(256),Io=s(256),Po=s(Qo-No),Oo=s(Qo-No);Fr(\"YuvToRgbRow\",jr,3),Fr(\"YuvToBgrRow\",_r,3),Fr(\"YuvToRgbaRow\",Qr,4),Fr(\"YuvToBgraRow\",Nr,4),Fr(\"YuvToArgbRow\",Er,4),Fr(\"YuvToRgba4444Row\",xr,2),Fr(\"YuvToRgb565Row\",Cr,2);var ko=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],Ro=[0,2,8],Mo=[8,7,6,4,4,2,2,2,1,1,1,1],Do=1;this.WebPDecodeRGBA=function(e,r,n,o,s){var i=Pn,a=new rr,A=new ie;a.ba=A,A.S=i,A.width=[A.width],A.height=[A.height];var u=A.width,c=A.height,l=new ae;if(null==l||null==e)var d=2;else t(null!=l),d=Tr(e,r,n,l.width,l.height,l.Pd,l.Qd,l.format,null);if(0!=d?u=0:(null!=u&&(u[0]=l.width[0]),null!=c&&(c[0]=l.height[0]),u=1),u){A.width=A.width[0],A.height=A.height[0],null!=o&&(o[0]=A.width),null!=s&&(s[0]=A.height);e:{if(o=new qe,(s=new nr).data=e,s.w=r,s.ha=n,s.kd=1,r=[0],t(null!=s),(0==(e=Tr(s.data,s.w,s.ha,null,null,null,r,null,s))||7==e)&&r[0]&&(e=4),0==(r=e)){if(t(null!=a),o.data=s.data,o.w=s.w+s.offset,o.ha=s.ha-s.offset,o.put=fe,o.ac=de,o.bc=he,o.ma=a,s.xa){if(null==(e=Ne())){a=1;break e}if(function(e,r){var n=[0],o=[0],s=[0];t:for(;;){if(null==e)return 0;if(null==r)return e.a=2,0;if(e.l=r,e.a=0,g(e.m,r.data,r.w,r.ha),!pe(e.m,n,o,s)){e.a=3;break t}if(e.xb=mo,r.width=n[0],r.height=o[0],!Qe(n[0],o[0],1,e,null))break t;return 1}return t(0!=e.a),0}(e,o)){if(o=0==(r=Pr(o.width,o.height,a.Oa,a.ba))){t:{o=e;r:for(;;){if(null==o){o=0;break t}if(t(null!=o.s.yc),t(null!=o.s.Ya),t(0\u003Co.s.Wb),t(null!=(n=o.l)),t(null!=(s=n.ma)),0!=o.xb){if(o.ca=s.ba,o.tb=s.tb,t(null!=o.ca),!Hr(s.Oa,n,kn)){o.a=2;break r}if(!Fe(o,n.width))break r;if(n.da)break r;if((n.da||ne(o.ca.S))&&mr(),11>o.ca.S||(alert(\"todo:WebPInitConvertARGBToYUV\"),null!=o.ca.f.kb.F&&mr()),o.Pb&&0\u003Co.s.ua&&null==o.s.vb.X&&!L(o.s.vb,o.s.Wa.Xa)){o.a=1;break r}o.xb=0}if(!xe(o,o.V,o.Ba,o.c,o.i,n.o,Be))break r;s.Dc=o.Ma,o=1;break t}t(0!=o.a),o=0}o=!o}o&&(r=e.a)}else r=e.a}else{if(null==(e=new Ge)){a=1;break e}if(e.Fa=s.na,e.P=s.P,e.qc=s.Sa,Je(e,o)){if(0==(r=Pr(o.width,o.height,a.Oa,a.ba))){if(e.Aa=0,n=a.Oa,t(null!=(s=e)),null!=n){if(0\u003C(u=0>(u=n.Md)?0:100\u003Cu?255:255*u\u002F100)){for(c=l=0;4>c;++c)12>(d=s.pb[c]).lc&&(d.ia=u*Mo[0>d.lc?0:d.lc]>>3),l|=d.ia;l&&(alert(\"todo:VP8InitRandom\"),s.ia=1)}s.Ga=n.Id,100\u003Cs.Ga?s.Ga=100:0>s.Ga&&(s.Ga=0)}$e(e,o)||(r=e.a)}}else r=e.a}0==r&&null!=a.Oa&&a.Oa.fd&&(r=Ir(a.ba))}a=r}i=0!=a?null:11>i?A.f.RGBA.eb:A.f.kb.y}else i=null;return i};var Ko=[3,4,3,4,4,2,2,4,4,4,2,1,1]});var l=[0],d=[0],f=[],h=new $e,p=e,m=function(e,t){var r={},n=0,o=!1,s=0,i=0;if(r.frames=[],!function(e,t,r,n){for(var o=0;o\u003C4;o++)if(e[t+o]!=\"RIFF\".charCodeAt(o))return!0;return!1}(e,t)){var a,l;for(c(e,t+=4),t+=8;t\u003Ce.length;){var d=A(e,t),f=c(e,t+=4);t+=4;var h=f+(1&f);switch(d){case\"VP8 \":case\"VP8L\":void 0===r.frames[n]&&(r.frames[n]={}),(g=r.frames[n]).src_off=o?i:t-8,g.src_size=s+f+8,n++,o&&(o=!1,s=0,i=0);break;case\"VP8X\":(g=r.header={}).feature_flags=e[t];var p=t+4;g.canvas_width=1+u(e,p),p+=3,g.canvas_height=1+u(e,p),p+=3;break;case\"ALPH\":o=!0,s=h+8,i=t-8;break;case\"ANIM\":(g=r.header).bgcolor=c(e,t),p=t+4,g.loop_count=(a=e)[(l=p)+0]\u003C\u003C0|a[l+1]\u003C\u003C8,p+=2;break;case\"ANMF\":var m,g;(g=r.frames[n]={}).offset_x=2*u(e,t),t+=3,g.offset_y=2*u(e,t),t+=3,g.width=1+u(e,t),t+=3,g.height=1+u(e,t),t+=3,g.duration=u(e,t),t+=3,m=e[t++],g.dispose=1&m,g.blend=m>>1&1}\"ANMF\"!=d&&(t+=h)}return r}}(p,0);m.response=p,m.rgbaoutput=!0,m.dataurl=!1;var g=m.header?m.header:null,y=m.frames?m.frames:null;if(g){g.loop_counter=g.loop_count,l=[g.canvas_height],d=[g.canvas_width];for(var v=0;v\u003Cy.length&&0!=y[v].blend;v++);}var w=y[0],b=h.WebPDecodeRGBA(p,w.src_off,w.src_size,d,l);w.rgba=b,w.imgwidth=d[0],w.imgheight=l[0];for(var B=0;B\u003Cd[0]*l[0]*4;B++)f[B]=b[B];return this.width=d,this.height=l,this.data=f,this}!function(e){var t=function(t,o,u,c){var l=4,d=i;switch(c){case e.image_compression.FAST:l=1,d=s;break;case e.image_compression.MEDIUM:l=6,d=a;break;case e.image_compression.SLOW:l=9,d=A}t=r(t,o,u,d);var f=(0,n.zlibSync)(t,{level:l});return e.__addimage__.arrayBufferToBinaryString(f)},r=function(e,t,r,n){for(var o,s,i,a=e.length\u002Ft,A=new Uint8Array(e.length+a),u=c(),d=0;d\u003Ca;d+=1){if(i=d*t,o=e.subarray(i,i+t),n)A.set(n(o,r,s),i+d);else{for(var f,h=u.length,p=[];f\u003Ch;f+=1)p[f]=u[f](o,r,s);var m=l(p.concat());A.set(p[m],i+d)}s=o}return A},o=function(e){var t=Array.apply([],e);return t.unshift(0),t},s=function(e,t){var r,n=[],o=e.length;n[0]=1;for(var s=0;s\u003Co;s+=1)r=e[s-t]||0,n[s+1]=e[s]-r+256&255;return n},i=function(e,t,r){var n,o=[],s=e.length;o[0]=2;for(var i=0;i\u003Cs;i+=1)n=r&&r[i]||0,o[i+1]=e[i]-n+256&255;return o},a=function(e,t,r){var n,o,s=[],i=e.length;s[0]=3;for(var a=0;a\u003Ci;a+=1)n=e[a-t]||0,o=r&&r[a]||0,s[a+1]=e[a]+256-(n+o>>>1)&255;return s},A=function(e,t,r){var n,o,s,i,a=[],A=e.length;a[0]=4;for(var c=0;c\u003CA;c+=1)n=e[c-t]||0,o=r&&r[c]||0,s=r&&r[c-t]||0,i=u(n,o,s),a[c+1]=e[c]-i+256&255;return a},u=function(e,t,r){if(e===t&&t===r)return e;var n=Math.abs(t-r),o=Math.abs(e-r),s=Math.abs(e+t-r-r);return n\u003C=o&&n\u003C=s?e:o\u003C=s?t:r},c=function(){return[o,s,i,a,A]},l=function(e){var t=e.map((function(e){return e.reduce((function(e,t){return e+Math.abs(t)}),0)}));return t.indexOf(Math.min.apply(null,t))};e.processPNG=function(r,o,s,i){var a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B=this.decode.FLATE_DECODE,j=\"\";if(this.__addimage__.isArrayBuffer(r)&&(r=new Uint8Array(r)),this.__addimage__.isArrayBufferView(r)){if(r=(u=new Xe(r)).imgData,A=u.bits,a=u.colorSpace,l=u.colors,-1!==[4,6].indexOf(u.colorType)){if(8===u.bits){p=(h=32==u.pixelBitlength?new Uint32Array(u.decodePixels().buffer):16==u.pixelBitlength?new Uint16Array(u.decodePixels().buffer):new Uint8Array(u.decodePixels().buffer)).length,g=new Uint8Array(p*u.colors),m=new Uint8Array(p);var _,C=u.pixelBitlength-u.bits;for(w=0,b=0;w\u003Cp;w++){for(v=h[w],_=0;_\u003CC;)g[b++]=v>>>_&255,_+=u.bits;m[w]=v>>>_&255}}if(16===u.bits){p=(h=new Uint32Array(u.decodePixels().buffer)).length,g=new Uint8Array(p*(32\u002Fu.pixelBitlength)*u.colors),m=new Uint8Array(p*(32\u002Fu.pixelBitlength)),y=u.colors>1,w=0,b=0;for(var x=0;w\u003Cp;)v=h[w++],g[b++]=v>>>0&255,y&&(g[b++]=v>>>16&255,v=h[w++],g[b++]=v>>>0&255),m[x++]=v>>>16&255;A=8}i!==e.image_compression.NONE&&\"function\"==typeof n.zlibSync?(r=t(g,u.width*u.colors,u.colors,i),f=t(m,u.width,1,i)):(r=g,f=m,B=void 0)}if(3===u.colorType&&(a=this.color_spaces.INDEXED,d=u.palette,u.transparency.indexed)){var E=u.transparency.indexed,N=0;for(w=0,p=E.length;w\u003Cp;++w)N+=E[w];if((N\u002F=255)==p-1&&-1!==E.indexOf(0))c=[E.indexOf(0)];else if(N!==p){for(h=u.decodePixels(),m=new Uint8Array(h.length),w=0,p=h.length;w\u003Cp;w++)m[w]=E[h[w]];f=t(m,u.width,1)}}var Q=function(t){var r;switch(t){case e.image_compression.FAST:r=11;break;case e.image_compression.MEDIUM:r=13;break;case e.image_compression.SLOW:r=14;break;default:r=12}return r}(i);return B===this.decode.FLATE_DECODE&&(j=\"\u002FPredictor \"+Q+\" \"),j+=\"\u002FColors \"+l+\" \u002FBitsPerComponent \"+A+\" \u002FColumns \"+u.width,(this.__addimage__.isArrayBuffer(r)||this.__addimage__.isArrayBufferView(r))&&(r=this.__addimage__.arrayBufferToBinaryString(r)),(f&&this.__addimage__.isArrayBuffer(f)||this.__addimage__.isArrayBufferView(f))&&(f=this.__addimage__.arrayBufferToBinaryString(f)),{alias:s,data:r,index:o,filter:B,decodeParameters:j,transparency:c,palette:d,sMask:f,predictor:Q,width:u.width,height:u.height,bitsPerComponent:A,colorSpace:a}}}}(H.API),function(e){e.processGIF89A=function(t,r,n,o){var s=new We(t),i=s.width,a=s.height,A=[];s.decodeAndBlitFrameRGBA(0,A);var u={data:A,width:i,height:a},c=new Ye(100).encode(u,100);return e.processJPEG.call(this,c,r,n,o)},e.processGIF87A=e.processGIF89A}(H.API),Ze.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP\u003C15){var e=0===this.colors?1\u003C\u003Cthis.bitPP:this.colors;this.palette=new Array(e);for(var t=0;t\u003Ce;t++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0);this.palette[t]={red:o,green:n,blue:r,quad:s}}}this.height\u003C0&&(this.height*=-1,this.bottom_up=!1)},Ze.prototype.parseBGR=function(){this.pos=this.offset;try{var e=\"bit\"+this.bitPP,t=this.width*this.height*4;this.data=new Uint8Array(t),this[e]()}catch(e){i.log(\"bit decode error:\"+e)}},Ze.prototype.bit1=function(){var e,t=Math.ceil(this.width\u002F8),r=t%4;for(e=this.height-1;e>=0;e--){for(var n=this.bottom_up?e:this.height-1-e,o=0;o\u003Ct;o++)for(var s=this.datav.getUint8(this.pos++,!0),i=n*this.width*4+8*o*4,a=0;a\u003C8&&8*o+a\u003Cthis.width;a++){var A=this.palette[s>>7-a&1];this.data[i+4*a]=A.blue,this.data[i+4*a+1]=A.green,this.data[i+4*a+2]=A.red,this.data[i+4*a+3]=255}0!==r&&(this.pos+=4-r)}},Ze.prototype.bit4=function(){for(var e=Math.ceil(this.width\u002F2),t=e%4,r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,o=0;o\u003Ce;o++){var s=this.datav.getUint8(this.pos++,!0),i=n*this.width*4+2*o*4,a=s>>4,A=15&s,u=this.palette[a];if(this.data[i]=u.blue,this.data[i+1]=u.green,this.data[i+2]=u.red,this.data[i+3]=255,2*o+1>=this.width)break;u=this.palette[A],this.data[i+4]=u.blue,this.data[i+4+1]=u.green,this.data[i+4+2]=u.red,this.data[i+4+3]=255}0!==t&&(this.pos+=4-t)}},Ze.prototype.bit8=function(){for(var e=this.width%4,t=this.height-1;t>=0;t--){for(var r=this.bottom_up?t:this.height-1-t,n=0;n\u003Cthis.width;n++){var o=this.datav.getUint8(this.pos++,!0),s=r*this.width*4+4*n;if(o\u003Cthis.palette.length){var i=this.palette[o];this.data[s]=i.red,this.data[s+1]=i.green,this.data[s+2]=i.blue,this.data[s+3]=255}else this.data[s]=255,this.data[s+1]=255,this.data[s+2]=255,this.data[s+3]=255}0!==e&&(this.pos+=4-e)}},Ze.prototype.bit15=function(){for(var e=this.width%3,t=parseInt(\"11111\",2),r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,o=0;o\u003Cthis.width;o++){var s=this.datav.getUint16(this.pos,!0);this.pos+=2;var i=(s&t)\u002Ft*255|0,a=(s>>5&t)\u002Ft*255|0,A=(s>>10&t)\u002Ft*255|0,u=s>>15?255:0,c=n*this.width*4+4*o;this.data[c]=A,this.data[c+1]=a,this.data[c+2]=i,this.data[c+3]=u}this.pos+=e}},Ze.prototype.bit16=function(){for(var e=this.width%3,t=parseInt(\"11111\",2),r=parseInt(\"111111\",2),n=this.height-1;n>=0;n--){for(var o=this.bottom_up?n:this.height-1-n,s=0;s\u003Cthis.width;s++){var i=this.datav.getUint16(this.pos,!0);this.pos+=2;var a=(i&t)\u002Ft*255|0,A=(i>>5&r)\u002Fr*255|0,u=(i>>11)\u002Ft*255|0,c=o*this.width*4+4*s;this.data[c]=u,this.data[c+1]=A,this.data[c+2]=a,this.data[c+3]=255}this.pos+=e}},Ze.prototype.bit24=function(){for(var e=this.height-1;e>=0;e--){for(var t=this.bottom_up?e:this.height-1-e,r=0;r\u003Cthis.width;r++){var n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0),i=t*this.width*4+4*r;this.data[i]=s,this.data[i+1]=o,this.data[i+2]=n,this.data[i+3]=255}this.pos+=this.width%4}},Ze.prototype.bit32=function(){for(var e=this.height-1;e>=0;e--)for(var t=this.bottom_up?e:this.height-1-e,r=0;r\u003Cthis.width;r++){var n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=t*this.width*4+4*r;this.data[a]=s,this.data[a+1]=o,this.data[a+2]=n,this.data[a+3]=i}},Ze.prototype.getData=function(){return this.data},function(e){e.processBMP=function(t,r,n,o){var s=new Ze(t,!1),i=s.width,a=s.height,A={data:s.getData(),width:i,height:a},u=new Ye(100).encode(A,100);return e.processJPEG.call(this,u,r,n,o)}}(H.API),$e.prototype.getData=function(){return this.data},function(e){e.processWEBP=function(t,r,n,o){var s=new $e(t,!1),i=s.width,a=s.height,A={data:s.getData(),width:i,height:a},u=new Ye(100).encode(A,100);return e.processJPEG.call(this,u,r,n,o)}}(H.API),H.API.setLanguage=function(e){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"FYRO Macedonian\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian\u002FIran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[e]&&(this.internal.languageSettings.languageCode=e,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.write(\"\u002FLang (\"+this.internal.languageSettings.languageCode+\")\")})),this.internal.languageSettings.isSubscribed=!0)),this},Ke=H.API,ze=Ke.getCharWidthsArray=function(e,t){var r,n,o=(t=t||{}).font||this.internal.getFont(),s=t.fontSize||this.internal.getFontSize(),i=t.charSpace||this.internal.getCharSpace(),a=t.widths?t.widths:o.metadata.Unicode.widths,A=a.fof?a.fof:1,u=t.kerning?t.kerning:o.metadata.Unicode.kerning,c=u.fof?u.fof:1,l=!1!==t.doKerning,d=0,f=e.length,h=0,p=a[0]||A,m=[];for(r=0;r\u003Cf;r++)n=e.charCodeAt(r),\"function\"==typeof o.metadata.widthOfString?m.push((o.metadata.widthOfGlyph(o.metadata.characterToGlyph(n))+i*(1e3\u002Fs)||0)\u002F1e3):(d=l&&\"object\"==typeof u[n]&&!isNaN(parseInt(u[n][h],10))?u[n][h]\u002Fc:0,m.push((a[n]||p)\u002FA+d)),h=n;return m},Ve=Ke.getStringUnitWidth=function(e,t){var r=(t=t||{}).fontSize||this.internal.getFontSize(),n=t.font||this.internal.getFont(),o=t.charSpace||this.internal.getCharSpace();return Ke.processArabic&&(e=Ke.processArabic(e)),\"function\"==typeof n.metadata.widthOfString?n.metadata.widthOfString(e,r,o)\u002Fr:ze.apply(this,arguments).reduce((function(e,t){return e+t}),0)},qe=function(e,t,r,n){for(var o=[],s=0,i=e.length,a=0;s!==i&&a+t[s]\u003Cr;)a+=t[s],s++;o.push(e.slice(0,s));var A=s;for(a=0;s!==i;)a+t[s]>n&&(o.push(e.slice(A,s)),a=0,A=s),a+=t[s],s++;return A!==s&&o.push(e.slice(A,s)),o},Ge=function(e,t,r){r||(r={});var n,o,s,i,a,A,u,c=[],l=[c],d=r.textIndent||0,f=0,h=0,p=e.split(\" \"),m=ze.apply(this,[\" \",r])[0];if(A=-1===r.lineIndent?p[0].length+2:r.lineIndent||0){var g=Array(A).join(\" \"),y=[];p.map((function(e){(e=e.split(\u002F\\s*\\n\u002F)).length>1?y=y.concat(e.map((function(e,t){return(t&&e.length?\"\\n\":\"\")+e}))):y.push(e[0])})),p=y,A=Ve.apply(this,[g,r])}for(s=0,i=p.length;s\u003Ci;s++){var v=0;if(n=p[s],A&&\"\\n\"==n[0]&&(n=n.substr(1),v=1),d+f+(h=(o=ze.apply(this,[n,r])).reduce((function(e,t){return e+t}),0))>t||v){if(h>t){for(a=qe.apply(this,[n,o,t-(d+f),t]),c.push(a.shift()),c=[a.pop()];a.length;)l.push([a.shift()]);h=o.slice(n.length-(c[0]?c[0].length:0)).reduce((function(e,t){return e+t}),0)}else c=[n];l.push(c),d=h+A,f=m}else c.push(n),d+=f+h,f=m}return u=A?function(e,t){return(t?g:\"\")+e.join(\" \")}:function(e){return e.join(\" \")},l.map(u)},Ke.splitTextToSize=function(e,t,r){var n,o=(r=r||{}).fontSize||this.internal.getFontSize(),s=function(e){if(e.widths&&e.kerning)return{widths:e.widths,kerning:e.kerning};var t=this.internal.getFont(e.fontName,e.fontStyle);return t.metadata.Unicode?{widths:t.metadata.Unicode.widths||{0:1},kerning:t.metadata.Unicode.kerning||{}}:{font:t.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,r);n=Array.isArray(e)?e:String(e).split(\u002F\\r?\\n\u002F);var i=1*this.internal.scaleFactor*t\u002Fo;s.textIndent=r.textIndent?1*r.textIndent*this.internal.scaleFactor\u002Fo:0,s.lineIndent=r.lineIndent;var a,A,u=[];for(a=0,A=n.length;a\u003CA;a++)u=u.concat(Ge.apply(this,[n[a],i,s]));return u},function(e){e.__fontmetrics__=e.__fontmetrics__||{};for(var t=\"klmnopqrstuvwxyz\",r={},n={},o=0;o\u003Ct.length;o++)r[t[o]]=\"0123456789abcdef\"[o],n[\"0123456789abcdef\"[o]]=t[o];var s=function(e){return\"0x\"+parseInt(e,10).toString(16)},i=e.__fontmetrics__.compress=function(e){var t,r,o,a,A=[\"{\"];for(var u in e){if(t=e[u],isNaN(parseInt(u,10))?r=\"'\"+u+\"'\":(u=parseInt(u,10),r=(r=s(u).slice(2)).slice(0,-1)+n[r.slice(-1)]),\"number\"==typeof t)t\u003C0?(o=s(t).slice(3),a=\"-\"):(o=s(t).slice(2),a=\"\"),o=a+o.slice(0,-1)+n[o.slice(-1)];else{if(\"object\"!=typeof t)throw new Error(\"Don't know what to do with value type \"+typeof t+\".\");o=i(t)}A.push(r+o)}return A.push(\"}\"),A.join(\"\")},a=e.__fontmetrics__.uncompress=function(e){if(\"string\"!=typeof e)throw new Error(\"Invalid argument passed to uncompress.\");for(var t,n,o,s,i={},a=1,A=i,u=[],c=\"\",l=\"\",d=e.length-1,f=1;f\u003Cd;f+=1)\"'\"==(s=e[f])?t?(o=t.join(\"\"),t=void 0):t=[]:t?t.push(s):\"{\"==s?(u.push([A,o]),A={},o=void 0):\"}\"==s?((n=u.pop())[0][n[1]]=A,o=void 0,A=n[0]):\"-\"==s?a=-1:void 0===o?r.hasOwnProperty(s)?(c+=r[s],o=parseInt(c,16)*a,a=1,c=\"\"):c+=s:r.hasOwnProperty(s)?(l+=r[s],A[o]=parseInt(l,16)*a,a=1,o=void 0,l=\"\"):l+=s;return i},A={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:a(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},u={Unicode:{Courier:A,\"Courier-Bold\":A,\"Courier-BoldOblique\":A,\"Courier-Oblique\":A,Helvetica:A,\"Helvetica-Bold\":A,\"Helvetica-BoldOblique\":A,\"Helvetica-Oblique\":A,\"Times-Roman\":A,\"Times-Bold\":A,\"Times-BoldItalic\":A,\"Times-Italic\":A}},c={Unicode:{\"Courier-Oblique\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":a(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":a(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":a(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:a(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:a(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":a(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:a(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":a(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":a(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":a(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}};e.events.push([\"addFont\",function(e){var t=e.font,r=c.Unicode[t.postScriptName];r&&(t.metadata.Unicode={},t.metadata.Unicode.widths=r.widths,t.metadata.Unicode.kerning=r.kerning);var n=u.Unicode[t.postScriptName];n&&(t.metadata.Unicode.encoding=n,t.encoding=n.codePages[0])}])}(H.API),function(e){var t=function(e){for(var t=e.length,r=new Uint8Array(t),n=0;n\u003Ct;n++)r[n]=e.charCodeAt(n);return r};e.API.events.push([\"addFont\",function(r){var n=void 0,o=r.font,s=r.instance;if(!o.isStandardFont){if(void 0===s)throw new Error(\"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");if(\"string\"!=typeof(n=!1===s.existsFileInVFS(o.postScriptName)?s.loadFile(o.postScriptName):s.getFileFromVFS(o.postScriptName)))throw new Error(\"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");!function(r,n){n=\u002F^\\x00\\x01\\x00\\x00\u002F.test(n)?t(n):t(c(n)),r.metadata=e.API.TTFFont.open(n),r.metadata.Unicode=r.metadata.Unicode||{encoding:{},kerning:{},widths:[]},r.metadata.glyIdsUsed=[0]}(o,n)}}])}(H),function(e){function t(){return(o.canvg?Promise.resolve(o.canvg):Promise.resolve().then(r.bind(r,\".\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js\"))).catch((function(e){return Promise.reject(new Error(\"Could not load canvg: \"+e))})).then((function(e){return e.default?e.default:e}))}H.API.addSvgAsImage=function(e,r,n,o,s,a,A,u){if(isNaN(r)||isNaN(n))throw i.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(o)||isNaN(s))throw i.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and\u002For height) passed to jsPDF.addSvgAsImage\");var c=document.createElement(\"canvas\");c.width=o,c.height=s;var l=c.getContext(\"2d\");l.fillStyle=\"#fff\",l.fillRect(0,0,c.width,c.height);var d={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},f=this;return t().then((function(t){return t.fromString(l,e,d)}),(function(){return Promise.reject(new Error(\"Could not load canvg.\"))})).then((function(e){return e.render(d)})).then((function(){f.addImage(c.toDataURL(\"image\u002Fjpeg\",1),r,n,o,s,A,u)}))}}(),H.API.putTotalPages=function(e){var t,r=0;parseInt(this.internal.getFont().id.substr(1),10)\u003C15?(t=new RegExp(e,\"g\"),r=this.internal.getNumberOfPages()):(t=new RegExp(this.pdfEscape16(e,this.internal.getFont()),\"g\"),r=this.pdfEscape16(this.internal.getNumberOfPages()+\"\",this.internal.getFont()));for(var n=1;n\u003C=this.internal.getNumberOfPages();n++)for(var o=0;o\u003Cthis.internal.pages[n].length;o++)this.internal.pages[n][o]=this.internal.pages[n][o].replace(t,r);return this},H.API.viewerPreferences=function(e,t){var r;e=e||{},t=t||!1;var n,o,s,i={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},a=Object.keys(i),A=[],u=0,c=0,l=0;function d(e,t){var r,n=!1;for(r=0;r\u003Ce.length;r+=1)e[r]===t&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(i)),this.internal.viewerpreferences.isSubscribed=!1),r=this.internal.viewerpreferences.configuration,\"reset\"===e||!0===t){var f=a.length;for(l=0;l\u003Cf;l+=1)r[a[l]].value=r[a[l]].defaultValue,r[a[l]].explicitSet=!1}if(\"object\"==typeof e)for(o in e)if(s=e[o],d(a,o)&&void 0!==s){if(\"boolean\"===r[o].type&&\"boolean\"==typeof s)r[o].value=s;else if(\"name\"===r[o].type&&d(r[o].valueSet,s))r[o].value=s;else if(\"integer\"===r[o].type&&Number.isInteger(s))r[o].value=s;else if(\"array\"===r[o].type){for(u=0;u\u003Cs.length;u+=1)if(n=!0,1===s[u].length&&\"number\"==typeof s[u][0])A.push(String(s[u]-1));else if(s[u].length>1){for(c=0;c\u003Cs[u].length;c+=1)\"number\"!=typeof s[u][c]&&(n=!1);!0===n&&A.push([s[u][0]-1,s[u][1]-1].join(\" \"))}r[o].value=\"[\"+A.join(\" \")+\"]\"}else r[o].value=r[o].defaultValue;r[o].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){var e,t=[];for(e in r)!0===r[e].explicitSet&&(\"name\"===r[e].type?t.push(\"\u002F\"+e+\" \u002F\"+r[e].value):t.push(\"\u002F\"+e+\" \"+r[e].value));0!==t.length&&this.internal.write(\"\u002FViewerPreferences\\n\u003C\u003C\\n\"+t.join(\"\\n\")+\"\\n>>\")})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=r,this},function(e){var t=function(){var e='\u003Crdf:RDF xmlns:rdf=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#\">\u003Crdf:Description rdf:about=\"\" xmlns:jspdf=\"'+this.internal.__metadata__.namespaceuri+'\">\u003Cjspdf:metadata>',t=unescape(encodeURIComponent('\u003Cx:xmpmeta xmlns:x=\"adobe:ns:meta\u002F\">')),r=unescape(encodeURIComponent(e)),n=unescape(encodeURIComponent(this.internal.__metadata__.metadata)),o=unescape(encodeURIComponent(\"\u003C\u002Fjspdf:metadata>\u003C\u002Frdf:Description>\u003C\u002Frdf:RDF>\")),s=unescape(encodeURIComponent(\"\u003C\u002Fx:xmpmeta>\")),i=r.length+n.length+o.length+t.length+s.length;this.internal.__metadata__.metadata_object_number=this.internal.newObject(),this.internal.write(\"\u003C\u003C \u002FType \u002FMetadata \u002FSubtype \u002FXML \u002FLength \"+i+\" >>\"),this.internal.write(\"stream\"),this.internal.write(t+r+n+o+s),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")},r=function(){this.internal.__metadata__.metadata_object_number&&this.internal.write(\"\u002FMetadata \"+this.internal.__metadata__.metadata_object_number+\" 0 R\")};e.addMetadata=function(e,n){return void 0===this.internal.__metadata__&&(this.internal.__metadata__={metadata:e,namespaceuri:n||\"http:\u002F\u002Fjspdf.default.namespaceuri\u002F\"},this.internal.events.subscribe(\"putCatalog\",r),this.internal.events.subscribe(\"postPutResources\",t)),this}}(H.API),function(e){var t=e.API,r=t.pdfEscape16=function(e,t){for(var r,n=t.metadata.Unicode.widths,o=[\"\",\"0\",\"00\",\"000\",\"0000\"],s=[\"\"],i=0,a=e.length;i\u003Ca;++i){if(r=t.metadata.characterToGlyph(e.charCodeAt(i)),t.metadata.glyIdsUsed.push(r),t.metadata.toUnicode[r]=e.charCodeAt(i),-1==n.indexOf(r)&&(n.push(r),n.push([parseInt(t.metadata.widthOfGlyph(r),10)])),\"0\"==r)return s.join(\"\");r=r.toString(16),s.push(o[4-r.length],r)}return s.join(\"\")},n=function(e){var t,r,n,o,s,i,a;for(s=\"\u002FCIDInit \u002FProcSet findresource begin\\n12 dict begin\\nbegincmap\\n\u002FCIDSystemInfo \u003C\u003C\\n  \u002FRegistry (Adobe)\\n  \u002FOrdering (UCS)\\n  \u002FSupplement 0\\n>> def\\n\u002FCMapName \u002FAdobe-Identity-UCS def\\n\u002FCMapType 2 def\\n1 begincodespacerange\\n\u003C0000>\u003Cffff>\\nendcodespacerange\",n=[],i=0,a=(r=Object.keys(e).sort((function(e,t){return e-t}))).length;i\u003Ca;i++)t=r[i],n.length>=100&&(s+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\",n=[]),void 0!==e[t]&&null!==e[t]&&\"function\"==typeof e[t].toString&&(o=(\"0000\"+e[t].toString(16)).slice(-4),t=(\"0000\"+(+t).toString(16)).slice(-4),n.push(\"\u003C\"+t+\">\u003C\"+o+\">\"));return n.length&&(s+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\\n\"),s+\"endcmap\\nCMapName currentdict \u002FCMap defineresource pop\\nend\\nend\"};t.events.push([\"putFont\",function(t){!function(t){var r=t.font,o=t.out,s=t.newObject,i=t.putStream,a=t.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof e.API.TTFFont&&\"Identity-H\"===r.encoding){for(var A=r.metadata.Unicode.widths,u=r.metadata.subset.encode(r.metadata.glyIdsUsed,1),c=\"\",l=0;l\u003Cu.length;l++)c+=String.fromCharCode(u[l]);var d=s();i({data:c,addLength1:!0,objectId:d}),o(\"endobj\");var f=s();i({data:n(r.metadata.toUnicode),addLength1:!0,objectId:f}),o(\"endobj\");var h=s();o(\"\u003C\u003C\"),o(\"\u002FType \u002FFontDescriptor\"),o(\"\u002FFontName \u002F\"+a(r.fontName)),o(\"\u002FFontFile2 \"+d+\" 0 R\"),o(\"\u002FFontBBox \"+e.API.PDFObject.convert(r.metadata.bbox)),o(\"\u002FFlags \"+r.metadata.flags),o(\"\u002FStemV \"+r.metadata.stemV),o(\"\u002FItalicAngle \"+r.metadata.italicAngle),o(\"\u002FAscent \"+r.metadata.ascender),o(\"\u002FDescent \"+r.metadata.decender),o(\"\u002FCapHeight \"+r.metadata.capHeight),o(\">>\"),o(\"endobj\");var p=s();o(\"\u003C\u003C\"),o(\"\u002FType \u002FFont\"),o(\"\u002FBaseFont \u002F\"+a(r.fontName)),o(\"\u002FFontDescriptor \"+h+\" 0 R\"),o(\"\u002FW \"+e.API.PDFObject.convert(A)),o(\"\u002FCIDToGIDMap \u002FIdentity\"),o(\"\u002FDW 1000\"),o(\"\u002FSubtype \u002FCIDFontType2\"),o(\"\u002FCIDSystemInfo\"),o(\"\u003C\u003C\"),o(\"\u002FSupplement 0\"),o(\"\u002FRegistry (Adobe)\"),o(\"\u002FOrdering (\"+r.encoding+\")\"),o(\">>\"),o(\">>\"),o(\"endobj\"),r.objectNumber=s(),o(\"\u003C\u003C\"),o(\"\u002FType \u002FFont\"),o(\"\u002FSubtype \u002FType0\"),o(\"\u002FToUnicode \"+f+\" 0 R\"),o(\"\u002FBaseFont \u002F\"+a(r.fontName)),o(\"\u002FEncoding \u002F\"+r.encoding),o(\"\u002FDescendantFonts [\"+p+\" 0 R]\"),o(\">>\"),o(\"endobj\"),r.isAlreadyPutted=!0}}(t)}]),t.events.push([\"putFont\",function(t){!function(t){var r=t.font,o=t.out,s=t.newObject,i=t.putStream,a=t.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof e.API.TTFFont&&\"WinAnsiEncoding\"===r.encoding){for(var A=r.metadata.rawData,u=\"\",c=0;c\u003CA.length;c++)u+=String.fromCharCode(A[c]);var l=s();i({data:u,addLength1:!0,objectId:l}),o(\"endobj\");var d=s();i({data:n(r.metadata.toUnicode),addLength1:!0,objectId:d}),o(\"endobj\");var f=s();o(\"\u003C\u003C\"),o(\"\u002FDescent \"+r.metadata.decender),o(\"\u002FCapHeight \"+r.metadata.capHeight),o(\"\u002FStemV \"+r.metadata.stemV),o(\"\u002FType \u002FFontDescriptor\"),o(\"\u002FFontFile2 \"+l+\" 0 R\"),o(\"\u002FFlags 96\"),o(\"\u002FFontBBox \"+e.API.PDFObject.convert(r.metadata.bbox)),o(\"\u002FFontName \u002F\"+a(r.fontName)),o(\"\u002FItalicAngle \"+r.metadata.italicAngle),o(\"\u002FAscent \"+r.metadata.ascender),o(\">>\"),o(\"endobj\"),r.objectNumber=s();for(var h=0;h\u003Cr.metadata.hmtx.widths.length;h++)r.metadata.hmtx.widths[h]=parseInt(r.metadata.hmtx.widths[h]*(1e3\u002Fr.metadata.head.unitsPerEm));o(\"\u003C\u003C\u002FSubtype\u002FTrueType\u002FType\u002FFont\u002FToUnicode \"+d+\" 0 R\u002FBaseFont\u002F\"+a(r.fontName)+\"\u002FFontDescriptor \"+f+\" 0 R\u002FEncoding\u002F\"+r.encoding+\" \u002FFirstChar 29 \u002FLastChar 255 \u002FWidths \"+e.API.PDFObject.convert(r.metadata.hmtx.widths)+\">>\"),o(\"endobj\"),r.isAlreadyPutted=!0}}(t)}]);var o=function(e){var t,n=e.text||\"\",o=e.x,s=e.y,i=e.options||{},a=e.mutex||{},A=a.pdfEscape,u=a.activeFontKey,c=a.fonts,l=u,d=\"\",f=0,h=\"\",p=c[l].encoding;if(\"Identity-H\"!==c[l].encoding)return{text:n,x:o,y:s,options:i,mutex:a};for(h=n,l=u,Array.isArray(n)&&(h=n[0]),f=0;f\u003Ch.length;f+=1)c[l].metadata.hasOwnProperty(\"cmap\")&&(t=c[l].metadata.cmap.unicode.codeMap[h[f].charCodeAt(0)]),t||h[f].charCodeAt(0)\u003C256&&c[l].metadata.hasOwnProperty(\"Unicode\")?d+=h[f]:d+=\"\";var m=\"\";return parseInt(l.slice(1))\u003C14||\"WinAnsiEncoding\"===p?m=A(d,l).split(\"\").map((function(e){return e.charCodeAt(0).toString(16)})).join(\"\"):\"Identity-H\"===p&&(m=r(d,c[l])),a.isHex=!0,{text:m,x:o,y:s,options:i,mutex:a}};t.events.push([\"postProcessText\",function(e){var t=e.text||\"\",r=[],n={text:t,x:e.x,y:e.y,options:e.options,mutex:e.mutex};if(Array.isArray(t)){var s=0;for(s=0;s\u003Ct.length;s+=1)Array.isArray(t[s])&&3===t[s].length?r.push([o(Object.assign({},n,{text:t[s][0]})).text,t[s][1],t[s][2]]):r.push(o(Object.assign({},n,{text:t[s]})).text);e.text=r}else e.text=o(Object.assign({},n,{text:t})).text}])}(H),function(e){var t=function(){return void 0===this.internal.vFS&&(this.internal.vFS={}),!0};e.existsFileInVFS=function(e){return t.call(this),void 0!==this.internal.vFS[e]},e.addFileToVFS=function(e,r){return t.call(this),this.internal.vFS[e]=r,this},e.getFileFromVFS=function(e){return t.call(this),void 0!==this.internal.vFS[e]?this.internal.vFS[e]:null}}(H.API),function(e){e.__bidiEngine__=e.prototype.__bidiEngine__=function(e){var r,n,o,s,i,a,A,u=t,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],d={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},f={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},h=[\"(\",\")\",\"(\",\"\u003C\",\">\",\"\u003C\",\"[\",\"]\",\"[\",\"{\",\"}\",\"{\",\"«\",\"»\",\"«\",\"‹\",\"›\",\"‹\",\"⁅\",\"⁆\",\"⁅\",\"⁽\",\"⁾\",\"⁽\",\"₍\",\"₎\",\"₍\",\"≤\",\"≥\",\"≤\",\"〈\",\"〉\",\"〈\",\"﹙\",\"﹚\",\"﹙\",\"﹛\",\"﹜\",\"﹛\",\"﹝\",\"﹞\",\"﹝\",\"﹤\",\"﹥\",\"﹤\"],p=new RegExp(\u002F^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$\u002F),m=!1,g=0;this.__bidiEngine__={};var y=function(e){var t=e.charCodeAt(),r=t>>8,n=f[r];return void 0!==n?u[256*n+(255&t)]:252===r||253===r?\"AL\":p.test(r)?\"L\":8===r?\"R\":\"N\"},v=function(e){for(var t,r=0;r\u003Ce.length;r++){if(\"L\"===(t=y(e.charAt(r))))return!1;if(\"R\"===t)return!0}return!1},w=function(e,t,i,a){var A,u,c,l,d=t[a];switch(d){case\"L\":case\"R\":m=!1;break;case\"N\":case\"AN\":break;case\"EN\":m&&(d=\"AN\");break;case\"AL\":m=!0,d=\"R\";break;case\"WS\":d=\"N\";break;case\"CS\":a\u003C1||a+1>=t.length||\"EN\"!==(A=i[a-1])&&\"AN\"!==A||\"EN\"!==(u=t[a+1])&&\"AN\"!==u?d=\"N\":m&&(u=\"AN\"),d=u===A?u:\"N\";break;case\"ES\":d=\"EN\"===(A=a>0?i[a-1]:\"B\")&&a+1\u003Ct.length&&\"EN\"===t[a+1]?\"EN\":\"N\";break;case\"ET\":if(a>0&&\"EN\"===i[a-1]){d=\"EN\";break}if(m){d=\"N\";break}for(c=a+1,l=t.length;c\u003Cl&&\"ET\"===t[c];)c++;d=c\u003Cl&&\"EN\"===t[c]?\"EN\":\"N\";break;case\"NSM\":if(o&&!s){for(l=t.length,c=a+1;c\u003Cl&&\"NSM\"===t[c];)c++;if(c\u003Cl){var f=e[a],h=f>=1425&&f\u003C=2303||64286===f;if(A=t[c],h&&(\"R\"===A||\"AL\"===A)){d=\"R\";break}}}d=a\u003C1||\"B\"===(A=t[a-1])?\"N\":i[a-1];break;case\"B\":m=!1,r=!0,d=g;break;case\"S\":n=!0,d=\"N\";break;case\"LRE\":case\"RLE\":case\"LRO\":case\"RLO\":case\"PDF\":m=!1;break;case\"BN\":d=\"N\"}return d},b=function(e,t,r){var n=e.split(\"\");return r&&B(n,r,{hiLevel:g}),n.reverse(),t&&t.reverse(),n.join(\"\")},B=function(e,t,o){var s,i,a,A,u,f=-1,h=e.length,p=0,v=[],b=g?l:c,B=[];for(m=!1,r=!1,n=!1,i=0;i\u003Ch;i++)B[i]=y(e[i]);for(a=0;a\u003Ch;a++){if(u=p,v[a]=w(e,B,v,a),s=240&(p=b[u][d[v[a]]]),p&=15,t[a]=A=b[p][5],s>0)if(16===s){for(i=f;i\u003Ca;i++)t[i]=1;f=-1}else f=-1;if(b[p][6])-1===f&&(f=a);else if(f>-1){for(i=f;i\u003Ca;i++)t[i]=A;f=-1}\"B\"===B[a]&&(t[a]=0),o.hiLevel|=A}n&&function(e,t,r){for(var n=0;n\u003Cr;n++)if(\"S\"===e[n]){t[n]=g;for(var o=n-1;o>=0&&\"WS\"===e[o];o--)t[o]=g}}(B,t,h)},j=function(e,t,n,o,s){if(!(s.hiLevel\u003Ce)){if(1===e&&1===g&&!r)return t.reverse(),void(n&&n.reverse());for(var i,a,A,u,c=t.length,l=0;l\u003Cc;){if(o[l]>=e){for(A=l+1;A\u003Cc&&o[A]>=e;)A++;for(u=l,a=A-1;u\u003Ca;u++,a--)i=t[u],t[u]=t[a],t[a]=i,n&&(i=n[u],n[u]=n[a],n[a]=i);l=A}l++}}},_=function(e,t,r){var n=e.split(\"\"),o={hiLevel:g};return r||(r=[]),B(n,r,o),function(e,t,r){if(0!==r.hiLevel&&A)for(var n,o=0;o\u003Ce.length;o++)1===t[o]&&(n=h.indexOf(e[o]))>=0&&(e[o]=h[n+1])}(n,r,o),j(2,n,t,r,o),j(1,n,t,r,o),n.join(\"\")};return this.__bidiEngine__.doBidiReorder=function(e,t,r){if(function(e,t){if(t)for(var r=0;r\u003Ce.length;r++)t[r]=r;void 0===s&&(s=v(e)),void 0===a&&(a=v(e))}(e,t),o||!i||a)if(o&&i&&s^a)g=s?1:0,e=b(e,t,r);else if(!o&&i&&a)g=s?1:0,e=_(e,t,r),e=b(e,t);else if(!o||s||i||a){if(o&&!i&&s^a)e=b(e,t),s?(g=0,e=_(e,t,r)):(g=1,e=_(e,t,r),e=b(e,t));else if(o&&s&&!i&&a)g=1,e=_(e,t,r),e=b(e,t);else if(!o&&!i&&s^a){var n=A;s?(g=1,e=_(e,t,r),g=0,A=!1,e=_(e,t,r),A=n):(g=0,e=_(e,t,r),e=b(e,t),g=1,A=!1,e=_(e,t,r),A=n,e=b(e,t))}}else g=0,e=_(e,t,r);else g=s?1:0,e=_(e,t,r);return e},this.__bidiEngine__.setOptions=function(e){e&&(o=e.isInputVisual,i=e.isOutputVisual,s=e.isInputRtl,a=e.isOutputRtl,A=e.isSymmetricSwapping)},this.__bidiEngine__.setOptions(e),this.__bidiEngine__};var t=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"L\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"ET\",\"ET\",\"EN\",\"EN\",\"N\",\"L\",\"N\",\"N\",\"N\",\"EN\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"N\",\"N\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"BN\",\"BN\",\"BN\",\"L\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"B\",\"LRE\",\"RLE\",\"PDF\",\"LRO\",\"RLO\",\"CS\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"N\",\"LRI\",\"RLI\",\"FSI\",\"PDI\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"EN\",\"L\",\"N\",\"N\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"L\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"NSM\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"ES\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"CS\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"N\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\"],r=new e.__bidiEngine__({isInputVisual:!0});e.API.events.push([\"postProcessText\",function(e){var t=e.text,n=(e.x,e.y,e.options||{}),o=(e.mutex,n.lang,[]);if(n.isInputVisual=\"boolean\"!=typeof n.isInputVisual||n.isInputVisual,r.setOptions(n),\"[object Array]\"===Object.prototype.toString.call(t)){var s=0;for(o=[],s=0;s\u003Ct.length;s+=1)\"[object Array]\"===Object.prototype.toString.call(t[s])?o.push([r.doBidiReorder(t[s][0]),t[s][1],t[s][2]]):o.push([r.doBidiReorder(t[s])]);e.text=o}else e.text=r.doBidiReorder(t);r.setOptions({isInputVisual:!0})}])}(H),H.API.TTFFont=function(){function e(e){var t;if(this.rawData=e,t=this.contents=new tt(e),this.contents.pos=4,\"ttcf\"===t.readString(4))throw new Error(\"TTCF not supported.\");t.pos=0,this.parse(),this.subset=new wt(this),this.registerTTF()}return e.open=function(t){return new e(t)},e.prototype.parse=function(){return this.directory=new rt(this.contents),this.head=new st(this),this.name=new dt(this),this.cmap=new at(this),this.toUnicode={},this.hhea=new At(this),this.maxp=new ft(this),this.hmtx=new ht(this),this.post=new ct(this),this.os2=new ut(this),this.loca=new vt(this),this.glyf=new mt(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},e.prototype.registerTTF=function(){var e,t,r,n,o;if(this.scaleFactor=1e3\u002Fthis.head.unitsPerEm,this.bbox=function(){var t,r,n,o;for(o=[],t=0,r=(n=this.bbox).length;t\u003Cr;t++)e=n[t],o.push(Math.round(e*this.scaleFactor));return o}.call(this),this.stemV=0,this.post.exists?(r=255&(n=this.post.italic_angle),0!=(32768&(t=n>>16))&&(t=-(1+(65535^t))),this.italicAngle=+(t+\".\"+r)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(o=this.familyClass)||2===o||3===o||4===o||5===o||7===o,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},e.prototype.characterToGlyph=function(e){var t;return(null!=(t=this.cmap.unicode)?t.codeMap[e]:void 0)||0},e.prototype.widthOfGlyph=function(e){var t;return t=1e3\u002Fthis.head.unitsPerEm,this.hmtx.forGlyph(e).advance*t},e.prototype.widthOfString=function(e,t,r){var n,o,s,i;for(s=0,o=0,i=(e=\"\"+e).length;0\u003C=i?o\u003Ci:o>i;o=0\u003C=i?++o:--o)n=e.charCodeAt(o),s+=this.widthOfGlyph(this.characterToGlyph(n))+r*(1e3\u002Ft)||0;return s*(t\u002F1e3)},e.prototype.lineHeight=function(e,t){var r;return null==t&&(t=!1),r=t?this.lineGap:0,(this.ascender+r-this.decender)\u002F1e3*e},e}();var et,tt=function(){function e(e){this.data=null!=e?e:[],this.pos=0,this.length=this.data.length}return e.prototype.readByte=function(){return this.data[this.pos++]},e.prototype.writeByte=function(e){return this.data[this.pos++]=e},e.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()\u003C\u003C16)+(this.readByte()\u003C\u003C8)+this.readByte()},e.prototype.writeUInt32=function(e){return this.writeByte(e>>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt32=function(){var e;return(e=this.readUInt32())>=2147483648?e-4294967296:e},e.prototype.writeInt32=function(e){return e\u003C0&&(e+=4294967296),this.writeUInt32(e)},e.prototype.readUInt16=function(){return this.readByte()\u003C\u003C8|this.readByte()},e.prototype.writeUInt16=function(e){return this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt16=function(){var e;return(e=this.readUInt16())>=32768?e-65536:e},e.prototype.writeInt16=function(e){return e\u003C0&&(e+=65536),this.writeUInt16(e)},e.prototype.readString=function(e){var t,r;for(r=[],t=0;0\u003C=e?t\u003Ce:t>e;t=0\u003C=e?++t:--t)r[t]=String.fromCharCode(this.readByte());return r.join(\"\")},e.prototype.writeString=function(e){var t,r,n;for(n=[],t=0,r=e.length;0\u003C=r?t\u003Cr:t>r;t=0\u003C=r?++t:--t)n.push(this.writeByte(e.charCodeAt(t)));return n},e.prototype.readShort=function(){return this.readInt16()},e.prototype.writeShort=function(e){return this.writeInt16(e)},e.prototype.readLongLong=function(){var e,t,r,n,o,s,i,a;return e=this.readByte(),t=this.readByte(),r=this.readByte(),n=this.readByte(),o=this.readByte(),s=this.readByte(),i=this.readByte(),a=this.readByte(),128&e?-1*(72057594037927940*(255^e)+281474976710656*(255^t)+1099511627776*(255^r)+4294967296*(255^n)+16777216*(255^o)+65536*(255^s)+256*(255^i)+(255^a)+1):72057594037927940*e+281474976710656*t+1099511627776*r+4294967296*n+16777216*o+65536*s+256*i+a},e.prototype.writeLongLong=function(e){var t,r;return t=Math.floor(e\u002F4294967296),r=4294967295&e,this.writeByte(t>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t),this.writeByte(r>>24&255),this.writeByte(r>>16&255),this.writeByte(r>>8&255),this.writeByte(255&r)},e.prototype.readInt=function(){return this.readInt32()},e.prototype.writeInt=function(e){return this.writeInt32(e)},e.prototype.read=function(e){var t,r;for(t=[],r=0;0\u003C=e?r\u003Ce:r>e;r=0\u003C=e?++r:--r)t.push(this.readByte());return t},e.prototype.write=function(e){var t,r,n,o;for(o=[],r=0,n=e.length;r\u003Cn;r++)t=e[r],o.push(this.writeByte(t));return o},e}(),rt=function(){var e;function t(e){var t,r,n;for(this.scalarType=e.readInt(),this.tableCount=e.readShort(),this.searchRange=e.readShort(),this.entrySelector=e.readShort(),this.rangeShift=e.readShort(),this.tables={},r=0,n=this.tableCount;0\u003C=n?r\u003Cn:r>n;r=0\u003C=n?++r:--r)t={tag:e.readString(4),checksum:e.readInt(),offset:e.readInt(),length:e.readInt()},this.tables[t.tag]=t}return t.prototype.encode=function(t){var r,n,o,s,i,a,A,u,c,l,d,f,h;for(h in d=Object.keys(t).length,a=Math.log(2),c=16*Math.floor(Math.log(d)\u002Fa),s=Math.floor(c\u002Fa),u=16*d-c,(n=new tt).writeInt(this.scalarType),n.writeShort(d),n.writeShort(c),n.writeShort(s),n.writeShort(u),o=16*d,A=n.pos+o,i=null,f=[],t)for(l=t[h],n.writeString(h),n.writeInt(e(l)),n.writeInt(A),n.writeInt(l.length),f=f.concat(l),\"head\"===h&&(i=A),A+=l.length;A%4;)f.push(0),A++;return n.write(f),r=2981146554-e(n.data),n.pos=i+8,n.writeUInt32(r),n.data},e=function(e){var t,r,n,o;for(e=pt.call(e);e.length%4;)e.push(0);for(n=new tt(e),r=0,t=0,o=e.length;t\u003Co;t=t+=4)r+=n.readUInt32();return 4294967295&r},t}(),nt={}.hasOwnProperty,ot=function(e,t){for(var r in t)nt.call(t,r)&&(e[r]=t[r]);function n(){this.constructor=e}return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e};et=function(){function e(e){var t;this.file=e,t=this.file.directory.tables[this.tag],this.exists=!!t,t&&(this.offset=t.offset,this.length=t.length,this.parse(this.file.contents))}return e.prototype.parse=function(){},e.prototype.encode=function(){},e.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},e}();var st=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"head\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.revision=e.readInt(),this.checkSumAdjustment=e.readInt(),this.magicNumber=e.readInt(),this.flags=e.readShort(),this.unitsPerEm=e.readShort(),this.created=e.readLongLong(),this.modified=e.readLongLong(),this.xMin=e.readShort(),this.yMin=e.readShort(),this.xMax=e.readShort(),this.yMax=e.readShort(),this.macStyle=e.readShort(),this.lowestRecPPEM=e.readShort(),this.fontDirectionHint=e.readShort(),this.indexToLocFormat=e.readShort(),this.glyphDataFormat=e.readShort()},t.prototype.encode=function(e){var t;return(t=new tt).writeInt(this.version),t.writeInt(this.revision),t.writeInt(this.checkSumAdjustment),t.writeInt(this.magicNumber),t.writeShort(this.flags),t.writeShort(this.unitsPerEm),t.writeLongLong(this.created),t.writeLongLong(this.modified),t.writeShort(this.xMin),t.writeShort(this.yMin),t.writeShort(this.xMax),t.writeShort(this.yMax),t.writeShort(this.macStyle),t.writeShort(this.lowestRecPPEM),t.writeShort(this.fontDirectionHint),t.writeShort(e),t.writeShort(this.glyphDataFormat),t.data},t}(),it=function(){function e(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m,g,y;switch(this.platformID=e.readUInt16(),this.encodingID=e.readShort(),this.offset=t+e.readInt(),c=e.pos,e.pos=this.offset,this.format=e.readUInt16(),this.length=e.readUInt16(),this.language=e.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(a=0;a\u003C256;++a)this.codeMap[a]=e.readByte();break;case 4:for(d=e.readUInt16(),l=d\u002F2,e.pos+=6,o=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),e.pos+=2,h=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),A=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),u=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),n=(this.length-e.pos+this.offset)\u002F2,i=function(){var t,r;for(r=[],a=t=0;0\u003C=n?t\u003Cn:t>n;a=0\u003C=n?++t:--t)r.push(e.readUInt16());return r}(),a=m=0,y=o.length;m\u003Cy;a=++m)for(p=o[a],r=g=f=h[a];f\u003C=p?g\u003C=p:g>=p;r=f\u003C=p?++g:--g)0===u[a]?s=r+A[a]:0!==(s=i[u[a]\u002F2+(r-f)-(l-a)]||0)&&(s+=A[a]),this.codeMap[r]=65535&s}e.pos=c}return e.encode=function(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F,U,S,L,T,H,I,P,O,k,R,M,D,K,z,V,q,G;switch(Q=new tt,s=Object.keys(e).sort((function(e,t){return e-t})),t){case\"macroman\":for(h=0,p=function(){var e=[];for(f=0;f\u003C256;++f)e.push(0);return e}(),g={0:0},o={},F=0,T=s.length;F\u003CT;F++)null==g[z=e[n=s[F]]]&&(g[z]=++h),o[n]={old:e[n],new:g[e[n]]},p[n]=g[e[n]];return Q.writeUInt16(1),Q.writeUInt16(0),Q.writeUInt32(12),Q.writeUInt16(0),Q.writeUInt16(262),Q.writeUInt16(0),Q.write(p),{charMap:o,subtable:Q.data,maxGlyphID:h+1};case\"unicode\":for(E=[],c=[],y=0,g={},r={},m=A=null,U=0,H=s.length;U\u003CH;U++)null==g[w=e[n=s[U]]]&&(g[w]=++y),r[n]={old:w,new:g[w]},i=g[w]-n,null!=m&&i===A||(m&&c.push(m),E.push(n),A=i),m=n;for(m&&c.push(m),c.push(65535),E.push(65535),C=2*(_=E.length),j=2*Math.pow(Math.log(_)\u002FMath.LN2,2),l=Math.log(j\u002F2)\u002FMath.LN2,B=2*_-j,a=[],b=[],d=[],f=S=0,I=E.length;S\u003CI;f=++S){if(x=E[f],u=c[f],65535===x){a.push(0),b.push(0);break}if(x-(N=r[x].new)>=32768)for(a.push(0),b.push(2*(d.length+_-f)),n=L=x;x\u003C=u?L\u003C=u:L>=u;n=x\u003C=u?++L:--L)d.push(r[n].new);else a.push(N-x),b.push(0)}for(Q.writeUInt16(3),Q.writeUInt16(1),Q.writeUInt32(12),Q.writeUInt16(4),Q.writeUInt16(16+8*_+2*d.length),Q.writeUInt16(0),Q.writeUInt16(C),Q.writeUInt16(j),Q.writeUInt16(l),Q.writeUInt16(B),D=0,P=c.length;D\u003CP;D++)n=c[D],Q.writeUInt16(n);for(Q.writeUInt16(0),K=0,O=E.length;K\u003CO;K++)n=E[K],Q.writeUInt16(n);for(V=0,k=a.length;V\u003Ck;V++)i=a[V],Q.writeUInt16(i);for(q=0,R=b.length;q\u003CR;q++)v=b[q],Q.writeUInt16(v);for(G=0,M=d.length;G\u003CM;G++)h=d[G],Q.writeUInt16(h);return{charMap:r,subtable:Q.data,maxGlyphID:y+1}}},e}(),at=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"cmap\",t.prototype.parse=function(e){var t,r,n;for(e.pos=this.offset,this.version=e.readUInt16(),n=e.readUInt16(),this.tables=[],this.unicode=null,r=0;0\u003C=n?r\u003Cn:r>n;r=0\u003C=n?++r:--r)t=new it(e,this.offset),this.tables.push(t),t.isUnicode&&null==this.unicode&&(this.unicode=t);return!0},t.encode=function(e,t){var r,n;return null==t&&(t=\"macroman\"),r=it.encode(e,t),(n=new tt).writeUInt16(0),n.writeUInt16(1),r.table=n.data.concat(r.subtable),r},t}(),At=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"hhea\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.ascender=e.readShort(),this.decender=e.readShort(),this.lineGap=e.readShort(),this.advanceWidthMax=e.readShort(),this.minLeftSideBearing=e.readShort(),this.minRightSideBearing=e.readShort(),this.xMaxExtent=e.readShort(),this.caretSlopeRise=e.readShort(),this.caretSlopeRun=e.readShort(),this.caretOffset=e.readShort(),e.pos+=8,this.metricDataFormat=e.readShort(),this.numberOfMetrics=e.readUInt16()},t}(),ut=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"OS\u002F2\",t.prototype.parse=function(e){if(e.pos=this.offset,this.version=e.readUInt16(),this.averageCharWidth=e.readShort(),this.weightClass=e.readUInt16(),this.widthClass=e.readUInt16(),this.type=e.readShort(),this.ySubscriptXSize=e.readShort(),this.ySubscriptYSize=e.readShort(),this.ySubscriptXOffset=e.readShort(),this.ySubscriptYOffset=e.readShort(),this.ySuperscriptXSize=e.readShort(),this.ySuperscriptYSize=e.readShort(),this.ySuperscriptXOffset=e.readShort(),this.ySuperscriptYOffset=e.readShort(),this.yStrikeoutSize=e.readShort(),this.yStrikeoutPosition=e.readShort(),this.familyClass=e.readShort(),this.panose=function(){var t,r;for(r=[],t=0;t\u003C10;++t)r.push(e.readByte());return r}(),this.charRange=function(){var t,r;for(r=[],t=0;t\u003C4;++t)r.push(e.readInt());return r}(),this.vendorID=e.readString(4),this.selection=e.readShort(),this.firstCharIndex=e.readShort(),this.lastCharIndex=e.readShort(),this.version>0&&(this.ascent=e.readShort(),this.descent=e.readShort(),this.lineGap=e.readShort(),this.winAscent=e.readShort(),this.winDescent=e.readShort(),this.codePageRange=function(){var t,r;for(r=[],t=0;t\u003C2;t=++t)r.push(e.readInt());return r}(),this.version>1))return this.xHeight=e.readShort(),this.capHeight=e.readShort(),this.defaultChar=e.readShort(),this.breakChar=e.readShort(),this.maxContext=e.readShort()},t}(),ct=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"post\",t.prototype.parse=function(e){var t,r,n;switch(e.pos=this.offset,this.format=e.readInt(),this.italicAngle=e.readInt(),this.underlinePosition=e.readShort(),this.underlineThickness=e.readShort(),this.isFixedPitch=e.readInt(),this.minMemType42=e.readInt(),this.maxMemType42=e.readInt(),this.minMemType1=e.readInt(),this.maxMemType1=e.readInt(),this.format){case 65536:break;case 131072:var o;for(r=e.readUInt16(),this.glyphNameIndex=[],o=0;0\u003C=r?o\u003Cr:o>r;o=0\u003C=r?++o:--o)this.glyphNameIndex.push(e.readUInt16());for(this.names=[],n=[];e.pos\u003Cthis.offset+this.length;)t=e.readByte(),n.push(this.names.push(e.readString(t)));return n;case 151552:return r=e.readUInt16(),this.offsets=e.read(r);case 196608:break;case 262144:return this.map=function(){var t,r,n;for(n=[],o=t=0,r=this.file.maxp.numGlyphs;0\u003C=r?t\u003Cr:t>r;o=0\u003C=r?++t:--t)n.push(e.readUInt32());return n}.call(this)}},t}(),lt=function(e,t){this.raw=e,this.length=e.length,this.platformID=t.platformID,this.encodingID=t.encodingID,this.languageID=t.languageID},dt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"name\",t.prototype.parse=function(e){var t,r,n,o,s,i,a,A,u,c,l;for(e.pos=this.offset,e.readShort(),t=e.readShort(),i=e.readShort(),r=[],o=0;0\u003C=t?o\u003Ct:o>t;o=0\u003C=t?++o:--o)r.push({platformID:e.readShort(),encodingID:e.readShort(),languageID:e.readShort(),nameID:e.readShort(),length:e.readShort(),offset:this.offset+i+e.readShort()});for(a={},o=u=0,c=r.length;u\u003Cc;o=++u)n=r[o],e.pos=n.offset,A=e.readString(n.length),s=new lt(A,n),null==a[l=n.nameID]&&(a[l]=[]),a[n.nameID].push(s);this.strings=a,this.copyright=a[0],this.fontFamily=a[1],this.fontSubfamily=a[2],this.uniqueSubfamily=a[3],this.fontName=a[4],this.version=a[5];try{this.postscriptName=a[6][0].raw.replace(\u002F[\\x00-\\x19\\x80-\\xff]\u002Fg,\"\")}catch(e){this.postscriptName=a[4][0].raw.replace(\u002F[\\x00-\\x19\\x80-\\xff]\u002Fg,\"\")}return this.trademark=a[7],this.manufacturer=a[8],this.designer=a[9],this.description=a[10],this.vendorUrl=a[11],this.designerUrl=a[12],this.license=a[13],this.licenseUrl=a[14],this.preferredFamily=a[15],this.preferredSubfamily=a[17],this.compatibleFull=a[18],this.sampleText=a[19]},t}(),ft=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"maxp\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.numGlyphs=e.readUInt16(),this.maxPoints=e.readUInt16(),this.maxContours=e.readUInt16(),this.maxCompositePoints=e.readUInt16(),this.maxComponentContours=e.readUInt16(),this.maxZones=e.readUInt16(),this.maxTwilightPoints=e.readUInt16(),this.maxStorage=e.readUInt16(),this.maxFunctionDefs=e.readUInt16(),this.maxInstructionDefs=e.readUInt16(),this.maxStackElements=e.readUInt16(),this.maxSizeOfInstructions=e.readUInt16(),this.maxComponentElements=e.readUInt16(),this.maxComponentDepth=e.readUInt16()},t}(),ht=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"hmtx\",t.prototype.parse=function(e){var t,r,n,o,s,i,a;for(e.pos=this.offset,this.metrics=[],t=0,i=this.file.hhea.numberOfMetrics;0\u003C=i?t\u003Ci:t>i;t=0\u003C=i?++t:--t)this.metrics.push({advance:e.readUInt16(),lsb:e.readInt16()});for(n=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var r,o;for(o=[],t=r=0;0\u003C=n?r\u003Cn:r>n;t=0\u003C=n?++r:--r)o.push(e.readInt16());return o}(),this.widths=function(){var e,t,r,n;for(n=[],e=0,t=(r=this.metrics).length;e\u003Ct;e++)o=r[e],n.push(o.advance);return n}.call(this),r=this.widths[this.widths.length-1],a=[],t=s=0;0\u003C=n?s\u003Cn:s>n;t=0\u003C=n?++s:--s)a.push(this.widths.push(r));return a},t.prototype.forGlyph=function(e){return e in this.metrics?this.metrics[e]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[e-this.metrics.length]}},t}(),pt=[].slice,mt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"glyf\",t.prototype.parse=function(){return this.cache={}},t.prototype.glyphFor=function(e){var t,r,n,o,s,i,a,A,u,c;return e in this.cache?this.cache[e]:(o=this.file.loca,t=this.file.contents,r=o.indexOf(e),0===(n=o.lengthOf(e))?this.cache[e]=null:(t.pos=this.offset+r,s=(i=new tt(t.read(n))).readShort(),A=i.readShort(),c=i.readShort(),a=i.readShort(),u=i.readShort(),this.cache[e]=-1===s?new yt(i,A,c,a,u):new gt(i,s,A,c,a,u),this.cache[e]))},t.prototype.encode=function(e,t,r){var n,o,s,i,a;for(s=[],o=[],i=0,a=t.length;i\u003Ca;i++)n=e[t[i]],o.push(s.length),n&&(s=s.concat(n.encode(r)));return o.push(s.length),{table:s,offsets:o}},t}(),gt=function(){function e(e,t,r,n,o,s){this.raw=e,this.numberOfContours=t,this.xMin=r,this.yMin=n,this.xMax=o,this.yMax=s,this.compound=!1}return e.prototype.encode=function(){return this.raw.data},e}(),yt=function(){function e(e,t,r,n,o){var s,i;for(this.raw=e,this.xMin=t,this.yMin=r,this.xMax=n,this.yMax=o,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],s=this.raw;i=s.readShort(),this.glyphOffsets.push(s.pos),this.glyphIDs.push(s.readUInt16()),32&i;)s.pos+=1&i?4:2,128&i?s.pos+=8:64&i?s.pos+=4:8&i&&(s.pos+=2)}return e.prototype.encode=function(){var e,t,r;for(t=new tt(pt.call(this.raw.data)),e=0,r=this.glyphIDs.length;e\u003Cr;++e)t.pos=this.glyphOffsets[e];return t.data},e}(),vt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"loca\",t.prototype.parse=function(e){var t,r;return e.pos=this.offset,t=this.file.head.indexToLocFormat,this.offsets=0===t?function(){var t,n;for(n=[],r=0,t=this.length;r\u003Ct;r+=2)n.push(2*e.readUInt16());return n}.call(this):function(){var t,n;for(n=[],r=0,t=this.length;r\u003Ct;r+=4)n.push(e.readUInt32());return n}.call(this)},t.prototype.indexOf=function(e){return this.offsets[e]},t.prototype.lengthOf=function(e){return this.offsets[e+1]-this.offsets[e]},t.prototype.encode=function(e,t){for(var r=new Uint32Array(this.offsets.length),n=0,o=0,s=0;s\u003Cr.length;++s)if(r[s]=n,o\u003Ct.length&&t[o]==s){++o,r[s]=n;var i=this.offsets[s],a=this.offsets[s+1]-i;a>0&&(n+=a)}for(var A=new Array(4*r.length),u=0;u\u003Cr.length;++u)A[4*u+3]=255&r[u],A[4*u+2]=(65280&r[u])>>8,A[4*u+1]=(16711680&r[u])>>16,A[4*u]=(4278190080&r[u])>>24;return A},t}(),wt=function(){function e(e){this.font=e,this.subset={},this.unicodes={},this.next=33}return e.prototype.generateCmap=function(){var e,t,r,n,o;for(t in n=this.font.cmap.tables[0].codeMap,e={},o=this.subset)r=o[t],e[t]=n[r];return e},e.prototype.glyphsFor=function(e){var t,r,n,o,s,i,a;for(n={},s=0,i=e.length;s\u003Ci;s++)n[o=e[s]]=this.font.glyf.glyphFor(o);for(o in t=[],n)(null!=(r=n[o])?r.compound:void 0)&&t.push.apply(t,r.glyphIDs);if(t.length>0)for(o in a=this.glyphsFor(t))r=a[o],n[o]=r;return n},e.prototype.encode=function(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m;for(n in r=at.encode(this.generateCmap(),\"unicode\"),s=this.glyphsFor(e),d={0:0},m=r.charMap)d[(a=m[n]).old]=a.new;for(f in l=r.maxGlyphID,s)f in d||(d[f]=l++);return u=function(e){var t,r;for(t in r={},e)r[e[t]]=t;return r}(d),c=Object.keys(u).sort((function(e,t){return e-t})),h=function(){var e,t,r;for(r=[],e=0,t=c.length;e\u003Ct;e++)i=c[e],r.push(u[i]);return r}(),o=this.font.glyf.encode(s,h,d),A=this.font.loca.encode(o.offsets,h),p={cmap:this.font.cmap.raw(),glyf:o.table,loca:A,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(t)},this.font.os2.exists&&(p[\"OS\u002F2\"]=this.font.os2.raw()),this.font.directory.encode(p)},e}();H.API.PDFObject=function(){var e;function t(){}return e=function(e,t){return(Array(t+1).join(\"0\")+e).slice(-t)},t.convert=function(r){var n,o,s,i;if(Array.isArray(r))return\"[\"+function(){var e,o,s;for(s=[],e=0,o=r.length;e\u003Co;e++)n=r[e],s.push(t.convert(n));return s}().join(\" \")+\"]\";if(\"string\"==typeof r)return\"\u002F\"+r;if(null!=r?r.isString:void 0)return\"(\"+r+\")\";if(r instanceof Date)return\"(D:\"+e(r.getUTCFullYear(),4)+e(r.getUTCMonth(),2)+e(r.getUTCDate(),2)+e(r.getUTCHours(),2)+e(r.getUTCMinutes(),2)+e(r.getUTCSeconds(),2)+\"Z)\";if(\"[object Object]\"==={}.toString.call(r)){for(o in s=[\"\u003C\u003C\"],r)i=r[o],s.push(\"\u002F\"+o+\" \"+t.convert(i));return s.push(\">>\"),s.join(\"\\n\")}return\"\"+r},t}(),t.default=H},\".\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js\":function(e){(function(){var t,r,n,o,s,i;\"undefined\"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:\"undefined\"!=typeof process&&null!==process&&process.hrtime?(e.exports=function(){return(t()-s)\u002F1e6},r=process.hrtime,o=(t=function(){var e;return 1e9*(e=r())[0]+e[1]})(),i=1e9*process.uptime(),s=o-i):Date.now?(e.exports=function(){return Date.now()-n},n=Date.now()):(e.exports=function(){return(new Date).getTime()-n},n=(new Date).getTime())}).call(this)},\".\u002Fnode_modules\u002Fraf\u002Findex.js\":function(e,t,r){for(var n=r(\".\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js\"),o=\"undefined\"==typeof window?global:window,s=[\"moz\",\"webkit\"],i=\"AnimationFrame\",a=o[\"request\"+i],A=o[\"cancel\"+i]||o[\"cancelRequest\"+i],u=0;!a&&u\u003Cs.length;u++)a=o[s[u]+\"Request\"+i],A=o[s[u]+\"Cancel\"+i]||o[s[u]+\"CancelRequest\"+i];if(!a||!A){var c=0,l=0,d=[];a=function(e){if(0===d.length){var t=n(),r=Math.max(0,16.666666666666668-(t-c));c=r+t,setTimeout((function(){var e=d.slice(0);d.length=0;for(var t=0;t\u003Ce.length;t++)if(!e[t].cancelled)try{e[t].callback(c)}catch(e){setTimeout((function(){throw e}),0)}}),Math.round(r))}return d.push({handle:++l,callback:e,cancelled:!1}),l},A=function(e){for(var t=0;t\u003Cd.length;t++)d[t].handle===e&&(d[t].cancelled=!0)}}e.exports=function(e){return a.call(o,e)},e.exports.cancel=function(){A.apply(o,arguments)},e.exports.polyfill=function(e){e||(e=o),e.requestAnimationFrame=a,e.cancelAnimationFrame=A}},\".\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js\":function(e){var t=function(e){\"use strict\";var t,r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},s=o.iterator||\"@@iterator\",i=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function A(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{A({},\"\")}catch(e){A=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof m?t:m,s=Object.create(o.prototype),i=new N(n||[]);return s._invoke=function(e,t,r){var n=l;return function(o,s){if(n===f)throw new Error(\"Generator is already running\");if(n===h){if(\"throw\"===o)throw s;return F()}for(r.method=o,r.arg=s;;){var i=r.delegate;if(i){var a=C(i,r);if(a){if(a===p)continue;return a}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===l)throw n=h,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=f;var A=c(e,t,r);if(\"normal\"===A.type){if(n=r.done?h:d,A.arg===p)continue;return{value:A.arg,done:r.done}}\"throw\"===A.type&&(n=h,r.method=\"throw\",r.arg=A.arg)}}}(e,r,i),s}function c(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}e.wrap=u;var l=\"suspendedStart\",d=\"suspendedYield\",f=\"executing\",h=\"completed\",p={};function m(){}function g(){}function y(){}var v={};A(v,s,(function(){return this}));var w=Object.getPrototypeOf,b=w&&w(w(Q([])));b&&b!==r&&n.call(b,s)&&(v=b);var B=y.prototype=m.prototype=Object.create(v);function j(e){[\"next\",\"throw\",\"return\"].forEach((function(t){A(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function r(o,s,i,a){var A=c(e[o],e,s);if(\"throw\"!==A.type){var u=A.arg,l=u.value;return l&&\"object\"==typeof l&&n.call(l,\"__await\")?t.resolve(l.__await).then((function(e){r(\"next\",e,i,a)}),(function(e){r(\"throw\",e,i,a)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r(\"throw\",e,i,a)}))}a(A.arg)}var o;this._invoke=function(e,n){function s(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(s,s):s()}}function C(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,\"throw\"===r.method){if(e.iterator.return&&(r.method=\"return\",r.arg=t,C(e,r),\"throw\"===r.method))return p;r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return p}var o=c(n,e.iterator,r.arg);if(\"throw\"===o.type)return r.method=\"throw\",r.arg=o.arg,r.delegate=null,p;var s=o.arg;return s?s.done?(r[e.resultName]=s.value,r.next=e.nextLoc,\"return\"!==r.method&&(r.method=\"next\",r.arg=t),r.delegate=null,p):s:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,p)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function Q(e){if(e){var r=e[s];if(r)return r.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o\u003Ce.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return i.next=i}}return{next:F}}function F(){return{value:t,done:!0}}return g.prototype=y,A(B,\"constructor\",y),A(y,\"constructor\",g),g.displayName=A(y,a,\"GeneratorFunction\"),e.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===g||\"GeneratorFunction\"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,A(e,a,\"GeneratorFunction\")),e.prototype=Object.create(B),e},e.awrap=function(e){return{__await:e}},j(_.prototype),A(_.prototype,i,(function(){return this})),e.AsyncIterator=_,e.async=function(t,r,n,o,s){void 0===s&&(s=Promise);var i=new _(u(t,r,n,o),s);return e.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},j(B),A(B,a,\"Generator\"),A(B,s,(function(){return this})),A(B,\"toString\",(function(){return\"[object Generator]\"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=Q,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=t,this.tryEntries.forEach(E),!e)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return a.type=\"throw\",a.arg=e,r.next=n,o&&(r.method=\"next\",r.arg=t),!!o}for(var s=this.tryEntries.length-1;s>=0;--s){var i=this.tryEntries[s],a=i.completion;if(\"root\"===i.tryLoc)return o(\"end\");if(i.tryLoc\u003C=this.prev){var A=n.call(i,\"catchLoc\"),u=n.call(i,\"finallyLoc\");if(A&&u){if(this.prev\u003Ci.catchLoc)return o(i.catchLoc,!0);if(this.prev\u003Ci.finallyLoc)return o(i.finallyLoc)}else if(A){if(this.prev\u003Ci.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev\u003Ci.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc\u003C=this.prev&&n.call(o,\"finallyLoc\")&&this.prev\u003Co.finallyLoc){var s=o;break}}s&&(\"break\"===e||\"continue\"===e)&&s.tryLoc\u003C=t&&t\u003C=s.finallyLoc&&(s=null);var i=s?s.completion:{};return i.type=e,i.arg=t,s?(this.method=\"next\",this.next=s.finallyLoc,p):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;E(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,r,n){return this.delegate={iterator:Q(e),resultName:r,nextLoc:n},\"next\"===this.method&&(this.arg=t),p}},e}(e.exports);try{regeneratorRuntime=t}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=t:Function(\"r\",\"regeneratorRuntime = r\")(t)}},\".\u002Fnode_modules\u002Frgbcolor\u002Findex.js\":function(e){e.exports=function(e){this.ok=!1,this.alpha=1,\"#\"==e.charAt(0)&&(e=e.substr(1,6)),e=(e=e.replace(\u002F \u002Fg,\"\")).toLowerCase();var t={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"};e=t[e]||e;for(var r=[{re:\u002F^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$\u002F,example:[\"rgba(123, 234, 45, 0.8)\",\"rgba(255,234,245,1.0)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3]),parseFloat(e[4])]}},{re:\u002F^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$\u002F,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:\u002F^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$\u002F,example:[\"#00ff00\",\"336699\"],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:\u002F^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$\u002F,example:[\"#fb0\",\"f0f\"],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],n=0;n\u003Cr.length;n++){var o=r[n].re,s=r[n].process,i=o.exec(e);if(i){var a=s(i);this.r=a[0],this.g=a[1],this.b=a[2],a.length>3&&(this.alpha=a[3]),this.ok=!0}}this.r=this.r\u003C0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g\u003C0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b\u003C0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha\u003C0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toRGBA=function(){return\"rgba(\"+this.r+\", \"+this.g+\", \"+this.b+\", \"+this.alpha+\")\"},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),r=this.b.toString(16);return 1==e.length&&(e=\"0\"+e),1==t.length&&(t=\"0\"+t),1==r.length&&(r=\"0\"+r),\"#\"+e+t+r},this.getHelpXML=function(){for(var e=new Array,n=0;n\u003Cr.length;n++)for(var o=r[n].example,s=0;s\u003Co.length;s++)e[e.length]=o[s];for(var i in t)e[e.length]=i;var a=document.createElement(\"ul\");for(a.setAttribute(\"id\",\"rgbcolor-examples\"),n=0;n\u003Ce.length;n++)try{var A=document.createElement(\"li\"),u=new RGBColor(e[n]),c=document.createElement(\"div\");c.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+u.toHex()+\"; color:\"+u.toHex(),c.appendChild(document.createTextNode(\"test\"));var l=document.createTextNode(\" \"+e[n]+\" -> \"+u.toRGB()+\" -> \"+u.toHex());A.appendChild(c),A.appendChild(l),a.appendChild(A)}catch(e){}return a}}},\".\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js\":function(e,t,r){\"use strict\";function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}r.r(t),r.d(t,{BlurStack:function(){return d},canvasRGB:function(){return c},canvasRGBA:function(){return A},image:function(){return i},imageDataRGB:function(){return l},imageDataRGBA:function(){return u}});var o=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],s=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function i(e,t,r,n,o,s){if(\"string\"==typeof e&&(e=document.getElementById(e)),e&&\"naturalWidth\"in e){var i=o?\"offset\":\"natural\",a=e[i+\"Width\"],u=e[i+\"Height\"];if(\"string\"==typeof t&&(t=document.getElementById(t)),t&&\"getContext\"in t){s||(t.style.width=a+\"px\",t.style.height=u+\"px\"),t.width=a,t.height=u;var l=t.getContext(\"2d\");l.clearRect(0,0,a,u),l.drawImage(e,0,0,e.naturalWidth,e.naturalHeight,0,0,a,u),isNaN(r)||r\u003C1||(n?A(t,0,0,a,u,r):c(t,0,0,a,u,r))}}}function a(e,t,r,o,s){if(\"string\"==typeof e&&(e=document.getElementById(e)),!e||\"object\"!==n(e)||!(\"getContext\"in e))throw new TypeError(\"Expecting canvas with `getContext` method in processCanvasRGB(A) calls!\");var i=e.getContext(\"2d\");try{return i.getImageData(t,r,o,s)}catch(e){throw new Error(\"unable to access image data: \"+e)}}function A(e,t,r,n,o,s){if(!(isNaN(s)||s\u003C1)){s|=0;var i=a(e,t,r,n,o);i=u(i,0,0,n,o,s),e.getContext(\"2d\").putImageData(i,t,r)}}function u(e,t,r,n,i,a){for(var A,u=e.data,c=2*a+1,l=n-1,f=i-1,h=a+1,p=h*(h+1)\u002F2,m=new d,g=m,y=1;y\u003Cc;y++)g=g.next=new d,y===h&&(A=g);g.next=m;for(var v=null,w=null,b=0,B=0,j=o[a],_=s[a],C=0;C\u003Ci;C++){g=m;for(var x=u[B],E=u[B+1],N=u[B+2],Q=u[B+3],F=0;F\u003Ch;F++)g.r=x,g.g=E,g.b=N,g.a=Q,g=g.next;for(var U=0,S=0,L=0,T=0,H=h*x,I=h*E,P=h*N,O=h*Q,k=p*x,R=p*E,M=p*N,D=p*Q,K=1;K\u003Ch;K++){var z=B+((l\u003CK?l:K)\u003C\u003C2),V=u[z],q=u[z+1],G=u[z+2],X=u[z+3],W=h-K;k+=(g.r=V)*W,R+=(g.g=q)*W,M+=(g.b=G)*W,D+=(g.a=X)*W,U+=V,S+=q,L+=G,T+=X,g=g.next}v=m,w=A;for(var J=0;J\u003Cn;J++){var Y=D*j>>_;if(u[B+3]=Y,0!==Y){var Z=255\u002FY;u[B]=(k*j>>_)*Z,u[B+1]=(R*j>>_)*Z,u[B+2]=(M*j>>_)*Z}else u[B]=u[B+1]=u[B+2]=0;k-=H,R-=I,M-=P,D-=O,H-=v.r,I-=v.g,P-=v.b,O-=v.a;var $=J+a+1;$=b+($\u003Cl?$:l)\u003C\u003C2,k+=U+=v.r=u[$],R+=S+=v.g=u[$+1],M+=L+=v.b=u[$+2],D+=T+=v.a=u[$+3],v=v.next;var ee=w,te=ee.r,re=ee.g,ne=ee.b,oe=ee.a;H+=te,I+=re,P+=ne,O+=oe,U-=te,S-=re,L-=ne,T-=oe,w=w.next,B+=4}b+=n}for(var se=0;se\u003Cn;se++){var ie=u[B=se\u003C\u003C2],ae=u[B+1],Ae=u[B+2],ue=u[B+3],ce=h*ie,le=h*ae,de=h*Ae,fe=h*ue,he=p*ie,pe=p*ae,me=p*Ae,ge=p*ue;g=m;for(var ye=0;ye\u003Ch;ye++)g.r=ie,g.g=ae,g.b=Ae,g.a=ue,g=g.next;for(var ve=n,we=0,be=0,Be=0,je=0,_e=1;_e\u003C=a;_e++){B=ve+se\u003C\u003C2;var Ce=h-_e;he+=(g.r=ie=u[B])*Ce,pe+=(g.g=ae=u[B+1])*Ce,me+=(g.b=Ae=u[B+2])*Ce,ge+=(g.a=ue=u[B+3])*Ce,je+=ie,we+=ae,be+=Ae,Be+=ue,g=g.next,_e\u003Cf&&(ve+=n)}B=se,v=m,w=A;for(var xe=0;xe\u003Ci;xe++){var Ee=B\u003C\u003C2;u[Ee+3]=ue=ge*j>>_,ue>0?(ue=255\u002Fue,u[Ee]=(he*j>>_)*ue,u[Ee+1]=(pe*j>>_)*ue,u[Ee+2]=(me*j>>_)*ue):u[Ee]=u[Ee+1]=u[Ee+2]=0,he-=ce,pe-=le,me-=de,ge-=fe,ce-=v.r,le-=v.g,de-=v.b,fe-=v.a,Ee=se+((Ee=xe+h)\u003Cf?Ee:f)*n\u003C\u003C2,he+=je+=v.r=u[Ee],pe+=we+=v.g=u[Ee+1],me+=be+=v.b=u[Ee+2],ge+=Be+=v.a=u[Ee+3],v=v.next,ce+=ie=w.r,le+=ae=w.g,de+=Ae=w.b,fe+=ue=w.a,je-=ie,we-=ae,be-=Ae,Be-=ue,w=w.next,B+=n}}return e}function c(e,t,r,n,o,s){if(!(isNaN(s)||s\u003C1)){s|=0;var i=a(e,t,r,n,o);i=l(i,0,0,n,o,s),e.getContext(\"2d\").putImageData(i,t,r)}}function l(e,t,r,n,i,a){for(var A,u=e.data,c=2*a+1,l=n-1,f=i-1,h=a+1,p=h*(h+1)\u002F2,m=new d,g=m,y=1;y\u003Cc;y++)g=g.next=new d,y===h&&(A=g);g.next=m;for(var v,w,b=null,B=null,j=o[a],_=s[a],C=0,x=0,E=0;E\u003Ci;E++){var N=u[x],Q=u[x+1],F=u[x+2],U=h*N,S=h*Q,L=h*F,T=p*N,H=p*Q,I=p*F;g=m;for(var P=0;P\u003Ch;P++)g.r=N,g.g=Q,g.b=F,g=g.next;for(var O=0,k=0,R=0,M=1;M\u003Ch;M++)v=x+((l\u003CM?l:M)\u003C\u003C2),T+=(g.r=N=u[v])*(w=h-M),H+=(g.g=Q=u[v+1])*w,I+=(g.b=F=u[v+2])*w,O+=N,k+=Q,R+=F,g=g.next;b=m,B=A;for(var D=0;D\u003Cn;D++)u[x]=T*j>>_,u[x+1]=H*j>>_,u[x+2]=I*j>>_,T-=U,H-=S,I-=L,U-=b.r,S-=b.g,L-=b.b,v=C+((v=D+a+1)\u003Cl?v:l)\u003C\u003C2,T+=O+=b.r=u[v],H+=k+=b.g=u[v+1],I+=R+=b.b=u[v+2],b=b.next,U+=N=B.r,S+=Q=B.g,L+=F=B.b,O-=N,k-=Q,R-=F,B=B.next,x+=4;C+=n}for(var K=0;K\u003Cn;K++){var z=u[x=K\u003C\u003C2],V=u[x+1],q=u[x+2],G=h*z,X=h*V,W=h*q,J=p*z,Y=p*V,Z=p*q;g=m;for(var $=0;$\u003Ch;$++)g.r=z,g.g=V,g.b=q,g=g.next;for(var ee=0,te=0,re=0,ne=1,oe=n;ne\u003C=a;ne++)x=oe+K\u003C\u003C2,J+=(g.r=z=u[x])*(w=h-ne),Y+=(g.g=V=u[x+1])*w,Z+=(g.b=q=u[x+2])*w,ee+=z,te+=V,re+=q,g=g.next,ne\u003Cf&&(oe+=n);x=K,b=m,B=A;for(var se=0;se\u003Ci;se++)u[v=x\u003C\u003C2]=J*j>>_,u[v+1]=Y*j>>_,u[v+2]=Z*j>>_,J-=G,Y-=X,Z-=W,G-=b.r,X-=b.g,W-=b.b,v=K+((v=se+h)\u003Cf?v:f)*n\u003C\u003C2,J+=ee+=b.r=u[v],Y+=te+=b.g=u[v+1],Z+=re+=b.b=u[v+2],b=b.next,G+=z=B.r,X+=V=B.g,W+=q=B.b,ee-=z,te-=V,re-=q,B=B.next,x+=n}return e}var d=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}},\".\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{COMMAND_ARG_COUNTS:function(){return j},SVGPathData:function(){return B},SVGPathDataParser:function(){return b},SVGPathDataTransformer:function(){return l},encodeSVGPath:function(){return s}});var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function o(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function s(e){var t=\"\";Array.isArray(e)||(e=[e]);for(var r=0;r\u003Ce.length;r++){var n=e[r];if(n.type===B.CLOSE_PATH)t+=\"z\";else if(n.type===B.HORIZ_LINE_TO)t+=(n.relative?\"h\":\"H\")+n.x;else if(n.type===B.VERT_LINE_TO)t+=(n.relative?\"v\":\"V\")+n.y;else if(n.type===B.MOVE_TO)t+=(n.relative?\"m\":\"M\")+n.x+\" \"+n.y;else if(n.type===B.LINE_TO)t+=(n.relative?\"l\":\"L\")+n.x+\" \"+n.y;else if(n.type===B.CURVE_TO)t+=(n.relative?\"c\":\"C\")+n.x1+\" \"+n.y1+\" \"+n.x2+\" \"+n.y2+\" \"+n.x+\" \"+n.y;else if(n.type===B.SMOOTH_CURVE_TO)t+=(n.relative?\"s\":\"S\")+n.x2+\" \"+n.y2+\" \"+n.x+\" \"+n.y;else if(n.type===B.QUAD_TO)t+=(n.relative?\"q\":\"Q\")+n.x1+\" \"+n.y1+\" \"+n.x+\" \"+n.y;else if(n.type===B.SMOOTH_QUAD_TO)t+=(n.relative?\"t\":\"T\")+n.x+\" \"+n.y;else{if(n.type!==B.ARC)throw new Error('Unexpected command type \"'+n.type+'\" at index '+r+\".\");t+=(n.relative?\"a\":\"A\")+n.rX+\" \"+n.rY+\" \"+n.xRot+\" \"+ +n.lArcFlag+\" \"+ +n.sweepFlag+\" \"+n.x+\" \"+n.y}}return t}function i(e,t){var r=e[0],n=e[1];return[r*Math.cos(t)-n*Math.sin(t),r*Math.sin(t)+n*Math.cos(t)]}function a(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];for(var r=0;r\u003Ce.length;r++)if(\"number\"!=typeof e[r])throw new Error(\"assertNumbers arguments[\"+r+\"] is not a number. \"+typeof e[r]+\" == typeof \"+e[r]);return!0}var A=Math.PI;function u(e,t,r){e.lArcFlag=0===e.lArcFlag?0:1,e.sweepFlag=0===e.sweepFlag?0:1;var n=e.rX,o=e.rY,s=e.x,a=e.y;n=Math.abs(e.rX),o=Math.abs(e.rY);var u=i([(t-s)\u002F2,(r-a)\u002F2],-e.xRot\u002F180*A),c=u[0],l=u[1],d=Math.pow(c,2)\u002FMath.pow(n,2)+Math.pow(l,2)\u002FMath.pow(o,2);1\u003Cd&&(n*=Math.sqrt(d),o*=Math.sqrt(d)),e.rX=n,e.rY=o;var f=Math.pow(n,2)*Math.pow(l,2)+Math.pow(o,2)*Math.pow(c,2),h=(e.lArcFlag!==e.sweepFlag?1:-1)*Math.sqrt(Math.max(0,(Math.pow(n,2)*Math.pow(o,2)-f)\u002Ff)),p=n*l\u002Fo*h,m=-o*c\u002Fn*h,g=i([p,m],e.xRot\u002F180*A);e.cX=g[0]+(t+s)\u002F2,e.cY=g[1]+(r+a)\u002F2,e.phi1=Math.atan2((l-m)\u002Fo,(c-p)\u002Fn),e.phi2=Math.atan2((-l-m)\u002Fo,(-c-p)\u002Fn),0===e.sweepFlag&&e.phi2>e.phi1&&(e.phi2-=2*A),1===e.sweepFlag&&e.phi2\u003Ce.phi1&&(e.phi2+=2*A),e.phi1*=180\u002FA,e.phi2*=180\u002FA}function c(e,t,r){a(e,t,r);var n=e*e+t*t-r*r;if(0>n)return[];if(0===n)return[[e*r\u002F(e*e+t*t),t*r\u002F(e*e+t*t)]];var o=Math.sqrt(n);return[[(e*r+t*o)\u002F(e*e+t*t),(t*r-e*o)\u002F(e*e+t*t)],[(e*r-t*o)\u002F(e*e+t*t),(t*r+e*o)\u002F(e*e+t*t)]]}var l,d=Math.PI\u002F180;function f(e,t,r){return(1-r)*e+r*t}function h(e,t,r,n){return e+Math.cos(n\u002F180*A)*t+Math.sin(n\u002F180*A)*r}function p(e,t,r,n){var o=t-e,s=r-t,i=3*o+3*(n-r)-6*s,a=6*(s-o),A=3*o;return Math.abs(i)\u003C1e-6?[-A\u002Fa]:function(e,t,r){void 0===r&&(r=1e-6);var n=e*e\u002F4-t;if(n\u003C-r)return[];if(n\u003C=r)return[-e\u002F2];var o=Math.sqrt(n);return[-e\u002F2-o,-e\u002F2+o]}(a\u002Fi,A\u002Fi,1e-6)}function m(e,t,r,n,o){var s=1-o;return e*(s*s*s)+t*(3*s*s*o)+r*(3*s*o*o)+n*(o*o*o)}!function(e){function t(){return o((function(e,t,r){return e.relative&&(void 0!==e.x1&&(e.x1+=t),void 0!==e.y1&&(e.y1+=r),void 0!==e.x2&&(e.x2+=t),void 0!==e.y2&&(e.y2+=r),void 0!==e.x&&(e.x+=t),void 0!==e.y&&(e.y+=r),e.relative=!1),e}))}function r(){var e=NaN,t=NaN,r=NaN,n=NaN;return o((function(o,s,i){return o.type&B.SMOOTH_CURVE_TO&&(o.type=B.CURVE_TO,e=isNaN(e)?s:e,t=isNaN(t)?i:t,o.x1=o.relative?s-e:2*s-e,o.y1=o.relative?i-t:2*i-t),o.type&B.CURVE_TO?(e=o.relative?s+o.x2:o.x2,t=o.relative?i+o.y2:o.y2):(e=NaN,t=NaN),o.type&B.SMOOTH_QUAD_TO&&(o.type=B.QUAD_TO,r=isNaN(r)?s:r,n=isNaN(n)?i:n,o.x1=o.relative?s-r:2*s-r,o.y1=o.relative?i-n:2*i-n),o.type&B.QUAD_TO?(r=o.relative?s+o.x1:o.x1,n=o.relative?i+o.y1:o.y1):(r=NaN,n=NaN),o}))}function n(){var e=NaN,t=NaN;return o((function(r,n,o){if(r.type&B.SMOOTH_QUAD_TO&&(r.type=B.QUAD_TO,e=isNaN(e)?n:e,t=isNaN(t)?o:t,r.x1=r.relative?n-e:2*n-e,r.y1=r.relative?o-t:2*o-t),r.type&B.QUAD_TO){e=r.relative?n+r.x1:r.x1,t=r.relative?o+r.y1:r.y1;var s=r.x1,i=r.y1;r.type=B.CURVE_TO,r.x1=((r.relative?0:n)+2*s)\u002F3,r.y1=((r.relative?0:o)+2*i)\u002F3,r.x2=(r.x+2*s)\u002F3,r.y2=(r.y+2*i)\u002F3}else e=NaN,t=NaN;return r}))}function o(e){var t=0,r=0,n=NaN,o=NaN;return function(s){if(isNaN(n)&&!(s.type&B.MOVE_TO))throw new Error(\"path must start with moveto\");var i=e(s,t,r,n,o);return s.type&B.CLOSE_PATH&&(t=n,r=o),void 0!==s.x&&(t=s.relative?t+s.x:s.x),void 0!==s.y&&(r=s.relative?r+s.y:s.y),s.type&B.MOVE_TO&&(n=t,o=r),i}}function s(e,t,r,n,s,i){return a(e,t,r,n,s,i),o((function(o,a,A,u){var c=o.x1,l=o.x2,d=o.relative&&!isNaN(u),f=void 0!==o.x?o.x:d?0:a,h=void 0!==o.y?o.y:d?0:A;function p(e){return e*e}o.type&B.HORIZ_LINE_TO&&0!==t&&(o.type=B.LINE_TO,o.y=o.relative?0:A),o.type&B.VERT_LINE_TO&&0!==r&&(o.type=B.LINE_TO,o.x=o.relative?0:a),void 0!==o.x&&(o.x=o.x*e+h*r+(d?0:s)),void 0!==o.y&&(o.y=f*t+o.y*n+(d?0:i)),void 0!==o.x1&&(o.x1=o.x1*e+o.y1*r+(d?0:s)),void 0!==o.y1&&(o.y1=c*t+o.y1*n+(d?0:i)),void 0!==o.x2&&(o.x2=o.x2*e+o.y2*r+(d?0:s)),void 0!==o.y2&&(o.y2=l*t+o.y2*n+(d?0:i));var m=e*n-t*r;if(void 0!==o.xRot&&(1!==e||0!==t||0!==r||1!==n))if(0===m)delete o.rX,delete o.rY,delete o.xRot,delete o.lArcFlag,delete o.sweepFlag,o.type=B.LINE_TO;else{var g=o.xRot*Math.PI\u002F180,y=Math.sin(g),v=Math.cos(g),w=1\u002Fp(o.rX),b=1\u002Fp(o.rY),j=p(v)*w+p(y)*b,_=2*y*v*(w-b),C=p(y)*w+p(v)*b,x=j*n*n-_*t*n+C*t*t,E=_*(e*n+t*r)-2*(j*r*n+C*e*t),N=j*r*r-_*e*r+C*e*e,Q=(Math.atan2(E,x-N)+Math.PI)%Math.PI\u002F2,F=Math.sin(Q),U=Math.cos(Q);o.rX=Math.abs(m)\u002FMath.sqrt(x*p(U)+E*F*U+N*p(F)),o.rY=Math.abs(m)\u002FMath.sqrt(x*p(F)-E*F*U+N*p(U)),o.xRot=180*Q\u002FMath.PI}return void 0!==o.sweepFlag&&0>m&&(o.sweepFlag=+!o.sweepFlag),o}))}e.ROUND=function(e){function t(t){return Math.round(t*e)\u002Fe}return void 0===e&&(e=1e13),a(e),function(e){return void 0!==e.x1&&(e.x1=t(e.x1)),void 0!==e.y1&&(e.y1=t(e.y1)),void 0!==e.x2&&(e.x2=t(e.x2)),void 0!==e.y2&&(e.y2=t(e.y2)),void 0!==e.x&&(e.x=t(e.x)),void 0!==e.y&&(e.y=t(e.y)),void 0!==e.rX&&(e.rX=t(e.rX)),void 0!==e.rY&&(e.rY=t(e.rY)),e}},e.TO_ABS=t,e.TO_REL=function(){return o((function(e,t,r){return e.relative||(void 0!==e.x1&&(e.x1-=t),void 0!==e.y1&&(e.y1-=r),void 0!==e.x2&&(e.x2-=t),void 0!==e.y2&&(e.y2-=r),void 0!==e.x&&(e.x-=t),void 0!==e.y&&(e.y-=r),e.relative=!0),e}))},e.NORMALIZE_HVZ=function(e,t,r){return void 0===e&&(e=!0),void 0===t&&(t=!0),void 0===r&&(r=!0),o((function(n,o,s,i,a){if(isNaN(i)&&!(n.type&B.MOVE_TO))throw new Error(\"path must start with moveto\");return t&&n.type&B.HORIZ_LINE_TO&&(n.type=B.LINE_TO,n.y=n.relative?0:s),r&&n.type&B.VERT_LINE_TO&&(n.type=B.LINE_TO,n.x=n.relative?0:o),e&&n.type&B.CLOSE_PATH&&(n.type=B.LINE_TO,n.x=n.relative?i-o:i,n.y=n.relative?a-s:a),n.type&B.ARC&&(0===n.rX||0===n.rY)&&(n.type=B.LINE_TO,delete n.rX,delete n.rY,delete n.xRot,delete n.lArcFlag,delete n.sweepFlag),n}))},e.NORMALIZE_ST=r,e.QT_TO_C=n,e.INFO=o,e.SANITIZE=function(e){void 0===e&&(e=0),a(e);var t=NaN,r=NaN,n=NaN,s=NaN;return o((function(o,i,a,A,u){var c=Math.abs,l=!1,d=0,f=0;if(o.type&B.SMOOTH_CURVE_TO&&(d=isNaN(t)?0:i-t,f=isNaN(r)?0:a-r),o.type&(B.CURVE_TO|B.SMOOTH_CURVE_TO)?(t=o.relative?i+o.x2:o.x2,r=o.relative?a+o.y2:o.y2):(t=NaN,r=NaN),o.type&B.SMOOTH_QUAD_TO?(n=isNaN(n)?i:2*i-n,s=isNaN(s)?a:2*a-s):o.type&B.QUAD_TO?(n=o.relative?i+o.x1:o.x1,s=o.relative?a+o.y1:o.y2):(n=NaN,s=NaN),o.type&B.LINE_COMMANDS||o.type&B.ARC&&(0===o.rX||0===o.rY||!o.lArcFlag)||o.type&B.CURVE_TO||o.type&B.SMOOTH_CURVE_TO||o.type&B.QUAD_TO||o.type&B.SMOOTH_QUAD_TO){var h=void 0===o.x?0:o.relative?o.x:o.x-i,p=void 0===o.y?0:o.relative?o.y:o.y-a;d=isNaN(n)?void 0===o.x1?d:o.relative?o.x:o.x1-i:n-i,f=isNaN(s)?void 0===o.y1?f:o.relative?o.y:o.y1-a:s-a;var m=void 0===o.x2?0:o.relative?o.x:o.x2-i,g=void 0===o.y2?0:o.relative?o.y:o.y2-a;c(h)\u003C=e&&c(p)\u003C=e&&c(d)\u003C=e&&c(f)\u003C=e&&c(m)\u003C=e&&c(g)\u003C=e&&(l=!0)}return o.type&B.CLOSE_PATH&&c(i-A)\u003C=e&&c(a-u)\u003C=e&&(l=!0),l?[]:o}))},e.MATRIX=s,e.ROTATE=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0),a(e,t,r);var n=Math.sin(e),o=Math.cos(e);return s(o,n,-n,o,t-t*o+r*n,r-t*n-r*o)},e.TRANSLATE=function(e,t){return void 0===t&&(t=0),a(e,t),s(1,0,0,1,e,t)},e.SCALE=function(e,t){return void 0===t&&(t=e),a(e,t),s(e,0,0,t,0,0)},e.SKEW_X=function(e){return a(e),s(1,0,Math.atan(e),1,0,0)},e.SKEW_Y=function(e){return a(e),s(1,Math.atan(e),0,1,0,0)},e.X_AXIS_SYMMETRY=function(e){return void 0===e&&(e=0),a(e),s(-1,0,0,1,e,0)},e.Y_AXIS_SYMMETRY=function(e){return void 0===e&&(e=0),a(e),s(1,0,0,-1,0,e)},e.A_TO_C=function(){return o((function(e,t,r){return B.ARC===e.type?function(e,t,r){var n,o,s,a;e.cX||u(e,t,r);for(var A=Math.min(e.phi1,e.phi2),c=Math.max(e.phi1,e.phi2)-A,l=Math.ceil(c\u002F90),h=new Array(l),p=t,m=r,g=0;g\u003Cl;g++){var y=f(e.phi1,e.phi2,g\u002Fl),v=f(e.phi1,e.phi2,(g+1)\u002Fl),w=v-y,b=4\u002F3*Math.tan(w*d\u002F4),j=[Math.cos(y*d)-b*Math.sin(y*d),Math.sin(y*d)+b*Math.cos(y*d)],_=j[0],C=j[1],x=[Math.cos(v*d),Math.sin(v*d)],E=x[0],N=x[1],Q=[E+b*Math.sin(v*d),N-b*Math.cos(v*d)],F=Q[0],U=Q[1];h[g]={relative:e.relative,type:B.CURVE_TO};var S=function(t,r){var n=i([t*e.rX,r*e.rY],e.xRot),o=n[0],s=n[1];return[e.cX+o,e.cY+s]};n=S(_,C),h[g].x1=n[0],h[g].y1=n[1],o=S(F,U),h[g].x2=o[0],h[g].y2=o[1],s=S(E,N),h[g].x=s[0],h[g].y=s[1],e.relative&&(h[g].x1-=p,h[g].y1-=m,h[g].x2-=p,h[g].y2-=m,h[g].x-=p,h[g].y-=m),p=(a=[h[g].x,h[g].y])[0],m=a[1]}return h}(e,e.relative?0:t,e.relative?0:r):e}))},e.ANNOTATE_ARCS=function(){return o((function(e,t,r){return e.relative&&(t=0,r=0),B.ARC===e.type&&u(e,t,r),e}))},e.CLONE=function(){return function(e){var t={};for(var r in e)t[r]=e[r];return t}},e.CALCULATE_BOUNDS=function(){var e=t(),s=n(),i=r(),a=o((function(t,r,n){var o=i(s(e(function(e){var t={};for(var r in e)t[r]=e[r];return t}(t))));function A(e){e>a.maxX&&(a.maxX=e),e\u003Ca.minX&&(a.minX=e)}function l(e){e>a.maxY&&(a.maxY=e),e\u003Ca.minY&&(a.minY=e)}if(o.type&B.DRAWING_COMMANDS&&(A(r),l(n)),o.type&B.HORIZ_LINE_TO&&A(o.x),o.type&B.VERT_LINE_TO&&l(o.y),o.type&B.LINE_TO&&(A(o.x),l(o.y)),o.type&B.CURVE_TO){A(o.x),l(o.y);for(var d=0,f=p(r,o.x1,o.x2,o.x);d\u003Cf.length;d++)0\u003C(L=f[d])&&1>L&&A(m(r,o.x1,o.x2,o.x,L));for(var g=0,y=p(n,o.y1,o.y2,o.y);g\u003Cy.length;g++)0\u003C(L=y[g])&&1>L&&l(m(n,o.y1,o.y2,o.y,L))}if(o.type&B.ARC){A(o.x),l(o.y),u(o,r,n);for(var v=o.xRot\u002F180*Math.PI,w=Math.cos(v)*o.rX,b=Math.sin(v)*o.rX,j=-Math.sin(v)*o.rY,_=Math.cos(v)*o.rY,C=o.phi1\u003Co.phi2?[o.phi1,o.phi2]:-180>o.phi2?[o.phi2+360,o.phi1+360]:[o.phi2,o.phi1],x=C[0],E=C[1],N=function(e){var t=e[0],r=e[1],n=180*Math.atan2(r,t)\u002FMath.PI;return n\u003Cx?n+360:n},Q=0,F=c(j,-w,0).map(N);Q\u003CF.length;Q++)(L=F[Q])>x&&L\u003CE&&A(h(o.cX,w,j,L));for(var U=0,S=c(_,-b,0).map(N);U\u003CS.length;U++){var L;(L=S[U])>x&&L\u003CE&&l(h(o.cY,b,_,L))}}return t}));return a.minX=1\u002F0,a.maxX=-1\u002F0,a.minY=1\u002F0,a.maxY=-1\u002F0,a}}(l||(l={}));var g,y=function(){function e(){}return e.prototype.round=function(e){return this.transform(l.ROUND(e))},e.prototype.toAbs=function(){return this.transform(l.TO_ABS())},e.prototype.toRel=function(){return this.transform(l.TO_REL())},e.prototype.normalizeHVZ=function(e,t,r){return this.transform(l.NORMALIZE_HVZ(e,t,r))},e.prototype.normalizeST=function(){return this.transform(l.NORMALIZE_ST())},e.prototype.qtToC=function(){return this.transform(l.QT_TO_C())},e.prototype.aToC=function(){return this.transform(l.A_TO_C())},e.prototype.sanitize=function(e){return this.transform(l.SANITIZE(e))},e.prototype.translate=function(e,t){return this.transform(l.TRANSLATE(e,t))},e.prototype.scale=function(e,t){return this.transform(l.SCALE(e,t))},e.prototype.rotate=function(e,t,r){return this.transform(l.ROTATE(e,t,r))},e.prototype.matrix=function(e,t,r,n,o,s){return this.transform(l.MATRIX(e,t,r,n,o,s))},e.prototype.skewX=function(e){return this.transform(l.SKEW_X(e))},e.prototype.skewY=function(e){return this.transform(l.SKEW_Y(e))},e.prototype.xSymmetry=function(e){return this.transform(l.X_AXIS_SYMMETRY(e))},e.prototype.ySymmetry=function(e){return this.transform(l.Y_AXIS_SYMMETRY(e))},e.prototype.annotateArcs=function(){return this.transform(l.ANNOTATE_ARCS())},e}(),v=function(e){return\" \"===e||\"\\t\"===e||\"\\r\"===e||\"\\n\"===e},w=function(e){return\"0\".charCodeAt(0)\u003C=e.charCodeAt(0)&&e.charCodeAt(0)\u003C=\"9\".charCodeAt(0)},b=function(e){function t(){var t=e.call(this)||this;return t.curNumber=\"\",t.curCommandType=-1,t.curCommandRelative=!1,t.canParseCommandOrComma=!0,t.curNumberHasExp=!1,t.curNumberHasExpDigits=!1,t.curNumberHasDecimal=!1,t.curArgs=[],t}return o(t,e),t.prototype.finish=function(e){if(void 0===e&&(e=[]),this.parse(\" \",e),0!==this.curArgs.length||!this.canParseCommandOrComma)throw new SyntaxError(\"Unterminated command at the path end.\");return e},t.prototype.parse=function(e,t){var r=this;void 0===t&&(t=[]);for(var n=function(e){t.push(e),r.curArgs.length=0,r.canParseCommandOrComma=!0},o=0;o\u003Ce.length;o++){var s=e[o],i=!(this.curCommandType!==B.ARC||3!==this.curArgs.length&&4!==this.curArgs.length||1!==this.curNumber.length||\"0\"!==this.curNumber&&\"1\"!==this.curNumber),a=w(s)&&(\"0\"===this.curNumber&&\"0\"===s||i);if(!w(s)||a)if(\"e\"!==s&&\"E\"!==s)if(\"-\"!==s&&\"+\"!==s||!this.curNumberHasExp||this.curNumberHasExpDigits)if(\".\"!==s||this.curNumberHasExp||this.curNumberHasDecimal||i){if(this.curNumber&&-1!==this.curCommandType){var A=Number(this.curNumber);if(isNaN(A))throw new SyntaxError(\"Invalid number ending at \"+o);if(this.curCommandType===B.ARC)if(0===this.curArgs.length||1===this.curArgs.length){if(0>A)throw new SyntaxError('Expected positive number, got \"'+A+'\" at index \"'+o+'\"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&\"0\"!==this.curNumber&&\"1\"!==this.curNumber)throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+o+'\"');this.curArgs.push(A),this.curArgs.length===j[this.curCommandType]&&(B.HORIZ_LINE_TO===this.curCommandType?n({type:B.HORIZ_LINE_TO,relative:this.curCommandRelative,x:A}):B.VERT_LINE_TO===this.curCommandType?n({type:B.VERT_LINE_TO,relative:this.curCommandRelative,y:A}):this.curCommandType===B.MOVE_TO||this.curCommandType===B.LINE_TO||this.curCommandType===B.SMOOTH_QUAD_TO?(n({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),B.MOVE_TO===this.curCommandType&&(this.curCommandType=B.LINE_TO)):this.curCommandType===B.CURVE_TO?n({type:B.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===B.SMOOTH_CURVE_TO?n({type:B.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===B.QUAD_TO?n({type:B.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===B.ARC&&n({type:B.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!v(s))if(\",\"===s&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(\"+\"!==s&&\"-\"!==s&&\".\"!==s)if(a)this.curNumber=s,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError(\"Unterminated command at index \"+o+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+s+'\" at index '+o+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,\"z\"!==s&&\"Z\"!==s)if(\"h\"===s||\"H\"===s)this.curCommandType=B.HORIZ_LINE_TO,this.curCommandRelative=\"h\"===s;else if(\"v\"===s||\"V\"===s)this.curCommandType=B.VERT_LINE_TO,this.curCommandRelative=\"v\"===s;else if(\"m\"===s||\"M\"===s)this.curCommandType=B.MOVE_TO,this.curCommandRelative=\"m\"===s;else if(\"l\"===s||\"L\"===s)this.curCommandType=B.LINE_TO,this.curCommandRelative=\"l\"===s;else if(\"c\"===s||\"C\"===s)this.curCommandType=B.CURVE_TO,this.curCommandRelative=\"c\"===s;else if(\"s\"===s||\"S\"===s)this.curCommandType=B.SMOOTH_CURVE_TO,this.curCommandRelative=\"s\"===s;else if(\"q\"===s||\"Q\"===s)this.curCommandType=B.QUAD_TO,this.curCommandRelative=\"q\"===s;else if(\"t\"===s||\"T\"===s)this.curCommandType=B.SMOOTH_QUAD_TO,this.curCommandRelative=\"t\"===s;else{if(\"a\"!==s&&\"A\"!==s)throw new SyntaxError('Unexpected character \"'+s+'\" at index '+o+\".\");this.curCommandType=B.ARC,this.curCommandRelative=\"a\"===s}else t.push({type:B.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=s,this.curNumberHasDecimal=\".\"===s}else this.curNumber+=s,this.curNumberHasDecimal=!0;else this.curNumber+=s;else this.curNumber+=s,this.curNumberHasExp=!0;else this.curNumber+=s,this.curNumberHasExpDigits=this.curNumberHasExp}return t},t.prototype.transform=function(e){return Object.create(this,{parse:{value:function(t,r){void 0===r&&(r=[]);for(var n=0,o=Object.getPrototypeOf(this).parse.call(this,t);n\u003Co.length;n++){var s=o[n],i=e(s);Array.isArray(i)?r.push.apply(r,i):r.push(i)}return r}}})},t}(y),B=function(e){function t(r){var n=e.call(this)||this;return n.commands=\"string\"==typeof r?t.parse(r):r,n}return o(t,e),t.prototype.encode=function(){return t.encode(this.commands)},t.prototype.getBounds=function(){var e=l.CALCULATE_BOUNDS();return this.transform(e),e},t.prototype.transform=function(e){for(var t=[],r=0,n=this.commands;r\u003Cn.length;r++){var o=e(n[r]);Array.isArray(o)?t.push.apply(t,o):t.push(o)}return this.commands=t,this},t.encode=function(e){return s(e)},t.parse=function(e){var t=new b,r=[];return t.parse(e,r),t.finish(r),r},t.CLOSE_PATH=1,t.MOVE_TO=2,t.HORIZ_LINE_TO=4,t.VERT_LINE_TO=8,t.LINE_TO=16,t.CURVE_TO=32,t.SMOOTH_CURVE_TO=64,t.QUAD_TO=128,t.SMOOTH_QUAD_TO=256,t.ARC=512,t.LINE_COMMANDS=t.LINE_TO|t.HORIZ_LINE_TO|t.VERT_LINE_TO,t.DRAWING_COMMANDS=t.HORIZ_LINE_TO|t.VERT_LINE_TO|t.LINE_TO|t.CURVE_TO|t.SMOOTH_CURVE_TO|t.QUAD_TO|t.SMOOTH_QUAD_TO|t.ARC,t}(y),j=((g={})[B.MOVE_TO]=2,g[B.LINE_TO]=2,g[B.HORIZ_LINE_TO]=1,g[B.VERT_LINE_TO]=1,g[B.CLOSE_PATH]=0,g[B.QUAD_TO]=4,g[B.SMOOTH_QUAD_TO]=2,g[B.CURVE_TO]=6,g[B.SMOOTH_CURVE_TO]=4,g[B.ARC]=7,g)}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e].call(s.exports,s,s.exports,o),s.exports}o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if(\"object\"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&\"function\"==typeof r.then)return r}var s=Object.create(null);o.r(s);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&n&&r;\"object\"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((function(e){i[e]=function(){return r[e]}}));return i.default=function(){return r},o.d(s,i),s},o.d=function(e,t){for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var s={};return function(){\"use strict\";o.r(s);var e=o(\".\u002Fsrc\u002Fworker.js\"),t=(o(\".\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js\"),o(\".\u002Fsrc\u002Fplugin\u002Fpagebreaks.js\"),o(\".\u002Fsrc\u002Fplugin\u002Fhyperlinks.js\"),function e(t,r){var n=new e.Worker(r);return t?n.from(t).save():n});t.Worker=e.default,s.default=t}(),s.default}()}));\r\n+\u002F*! For license information please see html2pdf.bundle.min.js.LICENSE.txt *\u002F\n+!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"html2pdf\",[],t):\"object\"==typeof exports?exports.html2pdf=t():e.html2pdf=t()}(self,(function(){return function(){var e,t,r={\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js\")},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\":function(e,t,r){\"use strict\";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\");function o(e){if(n(e))return e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\");function s(e){if(n(e))return(0,o.default)(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\":function(e,t,r){\"use strict\";function n(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js\");function o(e,t,r,o,s,i,a){try{var A=e[i](a),u=A.value}catch(e){return void r(e)}A.done?t(u):n.resolve(u).then(o,s)}function s(e){return function(){var t=this,r=arguments;return new n((function(n,s){var i=e.apply(t,r);function a(e){o(i,n,s,a,A,\"next\",e)}function A(e){o(i,n,s,a,A,\"throw\",e)}a(void 0)}))}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js\":function(e,t,r){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\");function o(e,t){for(var r=0;r\u003Ct.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),n(e,o.key,o)}}function s(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js\");function o(e,t,r){return t in e?n(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js\");function i(e,t,r){return(i=\"undefined\"!=typeof Reflect&&n?n:function(e,t,r){var n=(0,s.default)(e,t);if(n){var i=o(n,t);return i.get?i.get.call(r):i.value}})(e,t,r||e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js\");function s(e){return(s=n?o:function(e){return e.__proto__||o(e)})(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js\");function s(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=n(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&(0,o.default)(e,t)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\");function i(e){if(void 0!==n&&null!=o(e)||null!=e[\"@@iterator\"])return s(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\");function s(e,t){var r=null==e?null:void 0!==n&&o(e)||e[\"@@iterator\"];if(null!=r){var s,i,a=[],A=!0,u=!1;try{for(r=r.call(e);!(A=(s=r.next()).done)&&(a.push(s.value),!t||a.length!==t);A=!0);}catch(e){u=!0,i=e}finally{try{A||null==r.return||r.return()}finally{if(u)throw i}}return a}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js\":function(e,t,r){\"use strict\";function n(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js\":function(e,t,r){\"use strict\";function n(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}r.r(t),r.d(t,{default:function(){return n}})},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\");function s(e,t){return!t||\"object\"!==(0,n.default)(t)&&\"function\"!=typeof t?(0,o.default)(e):t}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js\");function o(e,t){return(o=n||function(e,t){return e.__proto__=t,e})(e,t)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return a}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\"),i=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js\");function a(e,t){return(0,n.default)(e)||(0,o.default)(e,t)||(0,s.default)(e,t)||(0,i.default)()}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return o}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\");function o(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=(0,n.default)(e)););return e}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return a}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\"),i=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js\");function a(e){return(0,n.default)(e)||(0,o.default)(e)||(0,s.default)(e)||(0,i.default)()}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return s}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js\");function s(e){return(s=\"function\"==typeof n&&\"symbol\"==typeof o?function(e){return typeof e}:function(e){return e&&\"function\"==typeof n&&e.constructor===n&&e!==n.prototype?\"symbol\":typeof e})(e)}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{default:function(){return i}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js\"),o=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js\"),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js\");function i(e,t){var r;if(e){if(\"string\"==typeof e)return(0,s.default)(e,t);var i=n(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===i&&e.constructor&&(i=e.constructor.name),\"Map\"===i||\"Set\"===i?o(e):\"Arguments\"===i||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(i)?(0,s.default)(e,t):void 0}}},\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js\":function(e,t,r){e.exports=r(\".\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js\")},\".\u002Fsrc\u002Fplugin\u002Fhyperlinks.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js\");var n=r(\".\u002Fsrc\u002Fworker.js\"),o=r(\".\u002Fsrc\u002Futils.js\"),s=[],i={toContainer:n.default.prototype.toContainer,toPdf:n.default.prototype.toPdf};n.default.prototype.toContainer=function(){return i.toContainer.call(this).then((function(){if(this.opt.enableLinks){var e=this.prop.container,t=e.querySelectorAll(\"a\"),r=(0,o.unitConvert)(e.getBoundingClientRect(),this.prop.pageSize.k);s=[],Array.prototype.forEach.call(t,(function(e){for(var t=e.getClientRects(),n=0;n\u003Ct.length;n++){var i=(0,o.unitConvert)(t[n],this.prop.pageSize.k);i.left-=r.left,i.top-=r.top;var a=Math.floor(i.top\u002Fthis.prop.pageSize.inner.height)+1,A=this.opt.margin[0]+i.top%this.prop.pageSize.inner.height,u=this.opt.margin[1]+i.left;s.push({page:a,top:A,left:u,clientRect:i,link:e})}}),this)}}))},n.default.prototype.toPdf=function(){return i.toPdf.call(this).then((function(){if(this.opt.enableLinks){s.forEach((function(e){this.prop.pdf.setPage(e.page),this.prop.pdf.link(e.left,e.top,e.clientRect.width,e.clientRect.height,{url:e.link.href})}),this);var e=this.prop.pdf.internal.getNumberOfPages();this.prop.pdf.setPage(e)}}))}},\".\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\");function o(e){return(o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}n.jsPDF.getPageSize=function(e,t,r){if(\"object\"===o(e)){var n=e;e=n.orientation,t=n.unit||t,r=n.format||r}t=t||\"mm\",r=r||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase();var s=(\"\"+r).toLowerCase(),i={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(t){case\"pt\":var a=1;break;case\"mm\":a=72\u002F25.4;break;case\"cm\":a=72\u002F2.54;break;case\"in\":a=72;break;case\"px\":a=.75;break;case\"pc\":case\"em\":a=12;break;case\"ex\":a=6;break;default:throw\"Invalid unit: \"+t}if(i.hasOwnProperty(s))var A=i[s][1]\u002Fa,u=i[s][0]\u002Fa;else try{A=r[1],u=r[0]}catch(e){throw new Error(\"Invalid format: \"+r)}if(\"p\"===e||\"portrait\"===e){if(e=\"p\",u>A){var c=u;u=A,A=c}}else{if(\"l\"!==e&&\"landscape\"!==e)throw\"Invalid orientation: \"+e;e=\"l\",A>u&&(c=u,u=A,A=c)}return{width:u,height:A,unit:t,k:a}},t.default=n.jsPDF},\".\u002Fsrc\u002Fplugin\u002Fpagebreaks.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\");var n=r(\".\u002Fsrc\u002Fworker.js\"),o=r(\".\u002Fsrc\u002Futils.js\"),s={toContainer:n.default.prototype.toContainer};n.default.template.opt.pagebreak={mode:[\"css\",\"legacy\"],before:[],after:[],avoid:[]},n.default.prototype.toContainer=function(){return s.toContainer.call(this).then((function(){var e=this.prop.container,t=this.prop.pageSize.inner.px.height,r=[].concat(this.opt.pagebreak.mode),n={avoidAll:-1!==r.indexOf(\"avoid-all\"),css:-1!==r.indexOf(\"css\"),legacy:-1!==r.indexOf(\"legacy\")},s={},i=this;[\"before\",\"after\",\"avoid\"].forEach((function(t){var r=n.avoidAll&&\"avoid\"===t;s[t]=r?[]:[].concat(i.opt.pagebreak[t]||[]),s[t].length>0&&(s[t]=Array.prototype.slice.call(e.querySelectorAll(s[t].join(\", \"))))}));var a=e.querySelectorAll(\".html2pdf__page-break\");a=Array.prototype.slice.call(a);var A=e.querySelectorAll(\"*\");Array.prototype.forEach.call(A,(function(e){var r={before:!1,after:n.legacy&&-1!==a.indexOf(e),avoid:n.avoidAll};if(n.css){var i=window.getComputedStyle(e),A=[\"always\",\"page\",\"left\",\"right\"];r={before:r.before||-1!==A.indexOf(i.breakBefore||i.pageBreakBefore),after:r.after||-1!==A.indexOf(i.breakAfter||i.pageBreakAfter),avoid:r.avoid||-1!==[\"avoid\",\"avoid-page\"].indexOf(i.breakInside||i.pageBreakInside)}}Object.keys(r).forEach((function(t){r[t]=r[t]||-1!==s[t].indexOf(e)}));var u=e.getBoundingClientRect();if(r.avoid&&!r.before){var c=Math.floor(u.top\u002Ft),l=Math.floor(u.bottom\u002Ft),d=Math.abs(u.bottom-u.top)\u002Ft;l!==c&&d\u003C=1&&(r.before=!0)}if(r.before){var f=(0,o.createElement)(\"div\",{style:{display:\"block\",height:t-u.top%t+\"px\"}});e.parentNode.insertBefore(f,e)}r.after&&(f=(0,o.createElement)(\"div\",{style:{display:\"block\",height:t-u.bottom%t+\"px\"}}),e.parentNode.insertBefore(f,e.nextSibling))}))}))}},\".\u002Fsrc\u002Futils.js\":function(e,t,r){\"use strict\";function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}r.r(t),r.d(t,{objType:function(){return o},createElement:function(){return s},cloneNode:function(){return i},unitConvert:function(){return a},toPx:function(){return A}}),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var o=function(e){var t=n(e);return\"undefined\"===t?\"undefined\":\"string\"===t||e instanceof String?\"string\":\"number\"===t||e instanceof Number?\"number\":\"function\"===t||e instanceof Function?\"function\":e&&e.constructor===Array?\"array\":e&&1===e.nodeType?\"element\":\"object\"===t?\"object\":\"unknown\"},s=function(e,t){var r=document.createElement(e);if(t.className&&(r.className=t.className),t.innerHTML){r.innerHTML=t.innerHTML;for(var n=r.getElementsByTagName(\"script\"),o=n.length;o-- >0;null)n[o].parentNode.removeChild(n[o])}for(var s in t.style)r.style[s]=t.style[s];return r},i=function e(t,r){for(var n=3===t.nodeType?document.createTextNode(t.nodeValue):t.cloneNode(!1),o=t.firstChild;o;o=o.nextSibling)!0!==r&&1===o.nodeType&&\"SCRIPT\"===o.nodeName||n.appendChild(e(o,r));return 1===t.nodeType&&(\"CANVAS\"===t.nodeName?(n.width=t.width,n.height=t.height,n.getContext(\"2d\").drawImage(t,0,0)):\"TEXTAREA\"!==t.nodeName&&\"SELECT\"!==t.nodeName||(n.value=t.value),n.addEventListener(\"load\",(function(){n.scrollTop=t.scrollTop,n.scrollLeft=t.scrollLeft}),!0)),n},a=function(e,t){if(\"number\"===o(e))return 72*e\u002F96\u002Ft;var r={};for(var n in e)r[n]=72*e[n]\u002F96\u002Ft;return r},A=function(e,t){return Math.floor(e*t\u002F72*96)}},\".\u002Fsrc\u002Fworker.js\":function(e,t,r){\"use strict\";r.r(t),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js\"),r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\");var n=r(\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\"),o=r(\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\"),s=r(\".\u002Fsrc\u002Futils.js\"),i=r(\".\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js\"),a=r.n(i)().Promise,A=function e(t){var r=Object.assign(e.convert(a.resolve()),JSON.parse(JSON.stringify(e.template))),n=e.convert(a.resolve(),r);return(n=n.setProgress(1,e,1,[e])).set(t)};(A.prototype=Object.create(a.prototype)).constructor=A,A.convert=function(e,t){return e.__proto__=t||A.prototype,e},A.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],image:{type:\"jpeg\",quality:.95},enableLinks:!0,html2canvas:{},jsPDF:{}}},A.prototype.from=function(e,t){return this.then((function(){switch(t=t||function(e){switch((0,s.objType)(e)){case\"string\":return\"string\";case\"element\":return\"canvas\"===e.nodeName.toLowerCase?\"canvas\":\"element\";default:return\"unknown\"}}(e)){case\"string\":return this.set({src:(0,s.createElement)(\"div\",{innerHTML:e})});case\"element\":return this.set({src:e});case\"canvas\":return this.set({canvas:e});case\"img\":return this.set({img:e});default:return this.error(\"Unknown source type.\")}}))},A.prototype.to=function(e){switch(e){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},A.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var e={position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:0,right:0,bottom:0,top:0,backgroundColor:\"rgba(0,0,0,0.8)\"},t={position:\"absolute\",width:this.prop.pageSize.inner.width+this.prop.pageSize.unit,left:0,right:0,top:0,height:\"auto\",margin:\"auto\",backgroundColor:\"white\"};e.opacity=0;var r=(0,s.cloneNode)(this.prop.src,this.opt.html2canvas.javascriptEnabled);this.prop.overlay=(0,s.createElement)(\"div\",{className:\"html2pdf__overlay\",style:e}),this.prop.container=(0,s.createElement)(\"div\",{className:\"html2pdf__container\",style:t}),this.prop.container.appendChild(r),this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay)}))},A.prototype.toCanvas=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then((function(){var e=Object.assign({},this.opt.html2canvas);return delete e.onrendered,o(this.prop.container,e)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas.toDataURL(\"image\u002F\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=e}))},A.prototype.toPdf=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas,t=this.opt,r=e.height,o=Math.floor(e.width*this.prop.pageSize.inner.ratio),s=Math.ceil(r\u002Fo),i=this.prop.pageSize.inner.height,a=document.createElement(\"canvas\"),A=a.getContext(\"2d\");a.width=e.width,a.height=o,this.prop.pdf=this.prop.pdf||new n.jsPDF(t.jsPDF);for(var u=0;u\u003Cs;u++){u===s-1&&r%o!=0&&(a.height=r%o,i=a.height*this.prop.pageSize.inner.width\u002Fa.width);var c=a.width,l=a.height;A.fillStyle=\"white\",A.fillRect(0,0,c,l),A.drawImage(e,0,u*o,c,l,0,0,c,l),u&&this.prop.pdf.addPage();var d=a.toDataURL(\"image\u002F\"+t.image.type,t.image.quality);this.prop.pdf.addImage(d,t.image.type,t.margin[1],t.margin[0],this.prop.pageSize.inner.width,i)}}))},A.prototype.output=function(e,t,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(e,t):this.outputPdf(e,t)},A.prototype.outputPdf=function(e,t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(e,t)}))},A.prototype.outputImg=function(e,t){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(e){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+e+'\" is not supported.'}}))},A.prototype.save=function(e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(e?{filename:e}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},A.prototype.set=function(e){if(\"object\"!==(0,s.objType)(e))return this;var t=Object.keys(e||{}).map((function(t){switch(t){case\"margin\":return this.setMargin.bind(this,e.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=e.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,e.pageSize);default:return t in A.template.prop?function(){this.prop[t]=e[t]}:function(){this.opt[t]=e[t]}}}),this);return this.then((function(){return this.thenList(t)}))},A.prototype.get=function(e,t){return this.then((function(){var r=e in A.template.prop?this.prop[e]:this.opt[e];return t?t(r):r}))},A.prototype.setMargin=function(e){return this.then((function(){switch((0,s.objType)(e)){case\"number\":e=[e,e,e,e];case\"array\":if(2===e.length&&(e=[e[0],e[1],e[0],e[1]]),4===e.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=e})).then(this.setPageSize)},A.prototype.setPageSize=function(e){return this.then((function(){(e=e||n.jsPDF.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(e.inner={width:e.width-this.opt.margin[1]-this.opt.margin[3],height:e.height-this.opt.margin[0]-this.opt.margin[2]},e.inner.px={width:(0,s.toPx)(e.inner.width,e.k),height:(0,s.toPx)(e.inner.height,e.k)},e.inner.ratio=e.inner.height\u002Fe.inner.width),this.prop.pageSize=e}))},A.prototype.setProgress=function(e,t,r,n){return null!=e&&(this.progress.val=e),null!=t&&(this.progress.state=t),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val\u002Fthis.progress.state,this},A.prototype.updateProgress=function(e,t,r,n){return this.setProgress(e?this.progress.val+e:null,t||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},A.prototype.then=function(e,t){var r=this;return this.thenCore(e,t,(function(e,t){return r.updateProgress(null,null,1,[e]),a.prototype.then.call(this,(function(t){return r.updateProgress(null,e),t})).then(e,t).then((function(e){return r.updateProgress(1),e}))}))},A.prototype.thenCore=function(e,t,r){r=r||a.prototype.then;var n=this;e&&(e=e.bind(n)),t&&(t=t.bind(n));var o=-1!==a.toString().indexOf(\"[native code]\")&&\"Promise\"===a.name?n:A.convert(Object.assign({},n),a.prototype),s=r.call(o,e,t);return A.convert(s,n.__proto__)},A.prototype.thenExternal=function(e,t){return a.prototype.then.call(this,e,t)},A.prototype.thenList=function(e){var t=this;return e.forEach((function(e){t=t.thenCore(e)})),t},A.prototype.catch=function(e){e&&(e=e.bind(this));var t=a.prototype.catch.call(this,e);return A.convert(t,this)},A.prototype.catchExternal=function(e){return a.prototype.catch.call(this,e)},A.prototype.error=function(e){return this.then((function(){throw new Error(e)}))},A.prototype.using=A.prototype.set,A.prototype.saveAs=A.prototype.save,A.prototype.export=A.prototype.output,A.prototype.run=A.prototype.then,t.default=A},\".\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{AElement:function(){return pr},AnimateColorElement:function(){return ar},AnimateElement:function(){return ir},AnimateTransformElement:function(){return Ar},BoundingBox:function(){return Ot},CB1:function(){return at},CB2:function(){return At},CB3:function(){return ut},CB4:function(){return ct},Canvg:function(){return qr},CircleElement:function(){return Gt},ClipPathElement:function(){return Sr},DefsElement:function(){return er},DescElement:function(){return kr},Document:function(){return Kr},Element:function(){return St},EllipseElement:function(){return Xt},FeColorMatrixElement:function(){return Qr},FeCompositeElement:function(){return Ir},FeDropShadowElement:function(){return Tr},FeGaussianBlurElement:function(){return Pr},FeMorphologyElement:function(){return Hr},FilterElement:function(){return Lr},Font:function(){return Pt},FontElement:function(){return cr},FontFaceElement:function(){return lr},GElement:function(){return tr},GlyphElement:function(){return fr},GradientElement:function(){return rr},ImageElement:function(){return wr},LineElement:function(){return Wt},LinearGradientElement:function(){return nr},MarkerElement:function(){return $t},MaskElement:function(){return Fr},Matrix:function(){return Et},MissingGlyphElement:function(){return dr},Mouse:function(){return gt},PSEUDO_ZERO:function(){return nt},Parser:function(){return jt},PathElement:function(){return zt},PathParser:function(){return Kt},PatternElement:function(){return Zt},Point:function(){return mt},PolygonElement:function(){return Yt},PolylineElement:function(){return Jt},Property:function(){return ht},QB1:function(){return lt},QB2:function(){return dt},QB3:function(){return ft},RadialGradientElement:function(){return or},RectElement:function(){return qt},RenderedElement:function(){return kt},Rotate:function(){return Ct},SVGElement:function(){return Vt},SVGFontLoader:function(){return Br},Scale:function(){return xt},Screen:function(){return wt},Skew:function(){return Nt},SkewX:function(){return Qt},SkewY:function(){return Ft},StopElement:function(){return sr},StyleElement:function(){return jr},SymbolElement:function(){return br},TRefElement:function(){return hr},TSpanElement:function(){return Mt},TextElement:function(){return Rt},TextPathElement:function(){return vr},TitleElement:function(){return Or},Transform:function(){return Ut},Translate:function(){return _t},UnknownElement:function(){return Lt},UseElement:function(){return _r},ViewPort:function(){return pt},compressSpaces:function(){return Re},getSelectorSpecificity:function(){return rt},normalizeAttributeName:function(){return Ve},normalizeColor:function(){return Ge},parseExternalUrl:function(){return qe},presets:function(){return Gr},toNumbers:function(){return Ke},trimLeft:function(){return Me},trimRight:function(){return De},vectorMagnitude:function(){return ot},vectorsAngle:function(){return it},vectorsRatio:function(){return st}});var n=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js\"),o=r.n(n),s=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js\"),i=r.n(s),a=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js\"),A=r.n(a),u=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js\"),c=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js\"),l=r.n(c),d=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js\"),f=r.n(d),h=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js\"),p=r.n(h),m=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js\"),g=r.n(m),y=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js\"),v=r.n(y),w=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js\"),b=r.n(w),B=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js\"),j=r.n(B),_=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js\"),C=r.n(_),x=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js\"),E=r.n(x),N=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js\"),Q=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js\"),F=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js\"),U=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js\"),S=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js\"),L=r.n(S),T=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js\"),H=r.n(T),I=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js\"),P=r.n(I),O=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js\"),k=r.n(O),R=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js\"),M=r.n(R),D=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js\"),K=r.n(D),z=r(\".\u002Fnode_modules\u002Fraf\u002Findex.js\"),V=r.n(z),q=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js\"),G=r.n(q),X=r(\".\u002Fnode_modules\u002Frgbcolor\u002Findex.js\"),W=r.n(X),J=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js\"),Y=r.n(J),Z=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js\"),$=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js\"),ee=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js\"),te=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js\"),re=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js\"),ne=r.n(re),oe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js\"),se=r.n(oe),ie=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js\"),ae=r.n(ie),Ae=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js\"),ue=r.n(Ae),ce=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js\"),le=r.n(ce),de=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js\"),fe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js\"),he=r.n(fe),pe=r(\".\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js\"),me=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js\"),ge=r.n(me),ye=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js\"),ve=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js\"),we=r.n(ve),be=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js\"),Be=r.n(be),je=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js\"),_e=r.n(je),Ce=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js\"),xe=r.n(Ce),Ee=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js\"),Ne=r.n(Ee),Qe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js\"),Fe=r.n(Qe),Ue=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js\"),Se=r.n(Ue),Le=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js\"),Te=r.n(Le),He=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js\"),Ie=r.n(He),Pe=r(\".\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js\"),Oe=r.n(Pe),ke=r(\".\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js\");function Re(e){return e.replace(\u002F(?!\\u3000)\\s+\u002Fgm,\" \")}function Me(e){return e.replace(\u002F^[\\n \\t]+\u002F,\"\")}function De(e){return e.replace(\u002F[\\n \\t]+$\u002F,\"\")}function Ke(e){var t=(e||\"\").match(\u002F-?(\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?|\\.\\d+)(?=\\D|$)\u002Fgm)||[];return A()(t).call(t,i())}var ze=\u002F^[A-Z-]+$\u002F;function Ve(e){return ze.test(e)?e.toLowerCase():e}function qe(e){var t=e.match(\u002Furl\\(('([^']+)'|\"([^\"]+)\"|([^'\"\\)]+))\\)\u002F)||[];return t[2]||t[3]||t[4]}function Ge(e){if(!o()(e).call(e,\"rgb\"))return e;var t=3;return e.replace(\u002F\\d+(\\.\\d+)?\u002Fg,(function(e,r){return t--&&r?String(Math.round(i()(e))):e}))}var Xe=\u002F(\\[[^\\]]+\\])\u002Fg,We=\u002F(#[^\\s\\+>~\\.\\[:]+)\u002Fg,Je=\u002F(\\.[^\\s\\+>~\\.\\[:]+)\u002Fg,Ye=\u002F(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)\u002Fgi,Ze=\u002F(:[\\w-]+\\([^\\)]*\\))\u002Fgi,$e=\u002F(:[^\\s\\+>~\\.\\[:]+)\u002Fg,et=\u002F([^\\s\\+>~\\.\\[:]+)\u002Fg;function tt(e,t){var r=e.match(t);return r?[e.replace(t,\" \"),r.length]:[e,0]}function rt(e){var t=[0,0,0],r=e.replace(\u002F:not\\(([^\\)]*)\\)\u002Fg,\"     $1 \").replace(\u002F{[\\s\\S]*\u002Fgm,\" \"),n=0,o=tt(r,Xe),s=(0,u.default)(o,2);r=s[0],n=s[1],t[1]+=n;var i=tt(r,We),a=(0,u.default)(i,2);r=a[0],n=a[1],t[0]+=n;var A=tt(r,Je),c=(0,u.default)(A,2);r=c[0],n=c[1],t[1]+=n;var l=tt(r,Ye),d=(0,u.default)(l,2);r=d[0],n=d[1],t[2]+=n;var f=tt(r,Ze),h=(0,u.default)(f,2);r=h[0],n=h[1],t[1]+=n;var p=tt(r,$e),m=(0,u.default)(p,2);r=m[0],n=m[1],t[1]+=n;var g=tt(r=r.replace(\u002F[\\*\\s\\+>~]\u002Fg,\" \").replace(\u002F[#\\.]\u002Fg,\" \"),et),y=(0,u.default)(g,2);return r=y[0],n=y[1],t[2]+=n,t.join(\"\")}var nt=1e-8;function ot(e){return Math.sqrt(Math.pow(e[0],2)+Math.pow(e[1],2))}function st(e,t){return(e[0]*t[0]+e[1]*t[1])\u002F(ot(e)*ot(t))}function it(e,t){return(e[0]*t[1]\u003Ce[1]*t[0]?-1:1)*Math.acos(st(e,t))}function at(e){return e*e*e}function At(e){return 3*e*e*(1-e)}function ut(e){return 3*e*(1-e)*(1-e)}function ct(e){return(1-e)*(1-e)*(1-e)}function lt(e){return e*e}function dt(e){return 2*e*(1-e)}function ft(e){return(1-e)*(1-e)}var ht=function(){function e(t,r,n){(0,F.default)(this,e),this.document=t,this.name=r,this.value=n,this.isNormalizedColor=!1}return(0,U.default)(e,[{key:\"split\",value:function(){var t,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\" \",o=this.document,s=this.name;return A()(t=G()(r=Re(this.getString())).call(r).split(n)).call(t,(function(t){return new e(o,s,t)}))}},{key:\"hasValue\",value:function(e){var t=this.value;return null!==t&&\"\"!==t&&(e||0!==t)&&void 0!==t}},{key:\"isString\",value:function(e){var t=this.value,r=\"string\"==typeof t;return r&&e?e.test(t):r}},{key:\"isUrlDefinition\",value:function(){return this.isString(\u002F^url\\(\u002F)}},{key:\"isPixels\",value:function(){if(!this.hasValue())return!1;var e=this.getString();switch(!0){case\u002Fpx$\u002F.test(e):case\u002F^[0-9]+$\u002F.test(e):return!0;default:return!1}}},{key:\"setValue\",value:function(e){return this.value=e,this}},{key:\"getValue\",value:function(e){return void 0===e||this.hasValue()?this.value:e}},{key:\"getNumber\",value:function(e){if(!this.hasValue())return void 0===e?0:i()(e);var t=this.value,r=i()(t);return this.isString(\u002F%$\u002F)&&(r\u002F=100),r}},{key:\"getString\",value:function(e){return void 0===e||this.hasValue()?void 0===this.value?\"\":String(this.value):String(e)}},{key:\"getColor\",value:function(e){var t=this.getString(e);return this.isNormalizedColor||(this.isNormalizedColor=!0,t=Ge(t),this.value=t),t}},{key:\"getDpi\",value:function(){return 96}},{key:\"getRem\",value:function(){return this.document.rootEmSize}},{key:\"getEm\",value:function(){return this.document.emSize}},{key:\"getUnits\",value:function(){return this.getString().replace(\u002F[0-9\\.\\-]\u002Fg,\"\")}},{key:\"getPixels\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!this.hasValue())return 0;var r=\"boolean\"==typeof e?[void 0,e]:[e],n=(0,u.default)(r,2),o=n[0],s=n[1],i=this.document.screen.viewPort;switch(!0){case this.isString(\u002Fvmin$\u002F):return this.getNumber()\u002F100*Math.min(i.computeSize(\"x\"),i.computeSize(\"y\"));case this.isString(\u002Fvmax$\u002F):return this.getNumber()\u002F100*Math.max(i.computeSize(\"x\"),i.computeSize(\"y\"));case this.isString(\u002Fvw$\u002F):return this.getNumber()\u002F100*i.computeSize(\"x\");case this.isString(\u002Fvh$\u002F):return this.getNumber()\u002F100*i.computeSize(\"y\");case this.isString(\u002Frem$\u002F):return this.getNumber()*this.getRem();case this.isString(\u002Fem$\u002F):return this.getNumber()*this.getEm();case this.isString(\u002Fex$\u002F):return this.getNumber()*this.getEm()\u002F2;case this.isString(\u002Fpx$\u002F):return this.getNumber();case this.isString(\u002Fpt$\u002F):return this.getNumber()*this.getDpi()*(1\u002F72);case this.isString(\u002Fpc$\u002F):return 15*this.getNumber();case this.isString(\u002Fcm$\u002F):return this.getNumber()*this.getDpi()\u002F2.54;case this.isString(\u002Fmm$\u002F):return this.getNumber()*this.getDpi()\u002F25.4;case this.isString(\u002Fin$\u002F):return this.getNumber()*this.getDpi();case this.isString(\u002F%$\u002F)&&s:return this.getNumber()*this.getEm();case this.isString(\u002F%$\u002F):return this.getNumber()*i.computeSize(o);default:var a=this.getNumber();return t&&a\u003C1?a*i.computeSize(o):a}}},{key:\"getMilliseconds\",value:function(){return this.hasValue()?this.isString(\u002Fms$\u002F)?this.getNumber():1e3*this.getNumber():0}},{key:\"getRadians\",value:function(){if(!this.hasValue())return 0;switch(!0){case this.isString(\u002Fdeg$\u002F):return this.getNumber()*(Math.PI\u002F180);case this.isString(\u002Fgrad$\u002F):return this.getNumber()*(Math.PI\u002F200);case this.isString(\u002Frad$\u002F):return this.getNumber();default:return this.getNumber()*(Math.PI\u002F180)}}},{key:\"getDefinition\",value:function(){var e=this.getString(),t=e.match(\u002F#([^\\)'\"]+)\u002F);return t&&(t=t[1]),t||(t=e),this.document.definitions[t]}},{key:\"getFillStyleDefinition\",value:function(e,t){var r=this.getDefinition();if(!r)return null;if(\"function\"==typeof r.createGradient)return r.createGradient(this.document.ctx,e,t);if(\"function\"==typeof r.createPattern){if(r.getHrefAttribute().hasValue()){var n=r.getAttribute(\"patternTransform\");r=r.getHrefAttribute().getDefinition(),n.hasValue()&&r.getAttribute(\"patternTransform\",!0).setValue(n.value)}return r.createPattern(this.document.ctx,e,t)}return null}},{key:\"getTextBaseline\",value:function(){return this.hasValue()?e.textBaselineMapping[this.getString()]:null}},{key:\"addOpacity\",value:function(t){for(var r=this.getColor(),n=r.length,o=0,s=0;s\u003Cn&&(\",\"===r[s]&&o++,3!==o);s++);if(t.hasValue()&&this.isString()&&3!==o){var i=new(W())(r);i.ok&&(i.alpha=t.getNumber(),r=i.toRGBA())}return new e(this.document,this.name,r)}}],[{key:\"empty\",value:function(t){return new e(t,\"EMPTY\",\"\")}}]),e}();ht.textBaselineMapping={baseline:\"alphabetic\",\"before-edge\":\"top\",\"text-before-edge\":\"top\",middle:\"middle\",central:\"middle\",\"after-edge\":\"bottom\",\"text-after-edge\":\"bottom\",ideographic:\"ideographic\",alphabetic:\"alphabetic\",hanging:\"hanging\",mathematical:\"alphabetic\"};var pt=function(){function e(){(0,F.default)(this,e),this.viewPorts=[]}return(0,U.default)(e,[{key:\"clear\",value:function(){this.viewPorts=[]}},{key:\"setCurrent\",value:function(e,t){this.viewPorts.push({width:e,height:t})}},{key:\"removeCurrent\",value:function(){this.viewPorts.pop()}},{key:\"getCurrent\",value:function(){var e=this.viewPorts;return e[e.length-1]}},{key:\"computeSize\",value:function(e){return\"number\"==typeof e?e:\"x\"===e?this.width:\"y\"===e?this.height:Math.sqrt(Math.pow(this.width,2)+Math.pow(this.height,2))\u002FMath.sqrt(2)}},{key:\"width\",get:function(){return this.getCurrent().width}},{key:\"height\",get:function(){return this.getCurrent().height}}]),e}(),mt=function(){function e(t,r){(0,F.default)(this,e),this.x=t,this.y=r}return(0,U.default)(e,[{key:\"angleTo\",value:function(e){return Math.atan2(e.y-this.y,e.x-this.x)}},{key:\"applyTransform\",value:function(e){var t=this.x,r=this.y,n=t*e[0]+r*e[2]+e[4],o=t*e[1]+r*e[3]+e[5];this.x=n,this.y=o}}],[{key:\"parse\",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Ke(t),o=(0,u.default)(n,2),s=o[0],i=void 0===s?r:s,a=o[1],A=void 0===a?r:a;return new e(i,A)}},{key:\"parseScale\",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=Ke(t),o=(0,u.default)(n,2),s=o[0],i=void 0===s?r:s,a=o[1],A=void 0===a?i:a;return new e(i,A)}},{key:\"parsePath\",value:function(t){for(var r=Ke(t),n=r.length,o=[],s=0;s\u003Cn;s+=2)o.push(new e(r[s],r[s+1]));return o}}]),e}(),gt=function(){function e(t){var r,n;(0,F.default)(this,e),this.screen=t,this.working=!1,this.events=[],this.eventElements=[],this.onClick=K()(r=this.onClick).call(r,this),this.onMouseMove=K()(n=this.onMouseMove).call(n,this)}return(0,U.default)(e,[{key:\"isWorking\",value:function(){return this.working}},{key:\"start\",value:function(){if(!this.working){var e=this.screen,t=this.onClick,r=this.onMouseMove,n=e.ctx.canvas;n.onclick=t,n.onmousemove=r,this.working=!0}}},{key:\"stop\",value:function(){if(this.working){var e=this.screen.ctx.canvas;this.working=!1,e.onclick=null,e.onmousemove=null}}},{key:\"hasEvents\",value:function(){return this.working&&this.events.length>0}},{key:\"runEvents\",value:function(){if(this.working){var e=this.screen,t=this.events,r=this.eventElements,n=e.ctx.canvas.style;n&&(n.cursor=\"\"),g()(t).call(t,(function(e,t){for(var n=e.run,o=r[t];o;)n(o),o=o.parent})),this.events=[],this.eventElements=[]}}},{key:\"checkPath\",value:function(e,t){if(this.working&&t){var r=this.events,n=this.eventElements;g()(r).call(r,(function(r,o){var s=r.x,i=r.y;!n[o]&&t.isPointInPath&&t.isPointInPath(s,i)&&(n[o]=e)}))}}},{key:\"checkBoundingBox\",value:function(e,t){if(this.working&&t){var r=this.events,n=this.eventElements;g()(r).call(r,(function(r,o){var s=r.x,i=r.y;!n[o]&&t.isPointInBox(s,i)&&(n[o]=e)}))}}},{key:\"mapXY\",value:function(e,t){for(var r=this.screen,n=r.window,o=r.ctx,s=new mt(e,t),i=o.canvas;i;)s.x-=i.offsetLeft,s.y-=i.offsetTop,i=i.offsetParent;return n.scrollX&&(s.x+=n.scrollX),n.scrollY&&(s.y+=n.scrollY),s}},{key:\"onClick\",value:function(e){var t=this.mapXY((e||event).clientX,(e||event).clientY),r=t.x,n=t.y;this.events.push({type:\"onclick\",x:r,y:n,run:function(e){e.onClick&&e.onClick()}})}},{key:\"onMouseMove\",value:function(e){var t=this.mapXY((e||event).clientX,(e||event).clientY),r=t.x,n=t.y;this.events.push({type:\"onmousemove\",x:r,y:n,run:function(e){e.onMouseMove&&e.onMouseMove()}})}}]),e}(),yt=\"undefined\"!=typeof window?window:null,vt=\"undefined\"!=typeof fetch?K()(fetch).call(fetch,void 0):null,wt=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.fetch,o=void 0===n?vt:n,s=r.window,i=void 0===s?yt:s;(0,F.default)(this,e),this.ctx=t,this.FRAMERATE=30,this.MAX_VIRTUAL_PIXELS=3e4,this.CLIENT_WIDTH=800,this.CLIENT_HEIGHT=600,this.viewPort=new pt,this.mouse=new gt(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=i,this.fetch=o}return(0,U.default)(e,[{key:\"wait\",value:function(e){this.waits.push(e)}},{key:\"ready\",value:function(){return this.readyPromise?this.readyPromise:M().resolve()}},{key:\"isReady\",value:function(){var e;if(this.isReadyLock)return!0;var t=k()(e=this.waits).call(e,(function(e){return e()}));return t&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=t,t}},{key:\"setDefaults\",value:function(e){e.strokeStyle=\"rgba(0,0,0,0)\",e.lineCap=\"butt\",e.lineJoin=\"miter\",e.miterLimit=4}},{key:\"setViewBox\",value:function(e){var t=e.document,r=e.ctx,n=e.aspectRatio,o=e.width,s=e.desiredWidth,i=e.height,a=e.desiredHeight,A=e.minX,c=void 0===A?0:A,l=e.minY,d=void 0===l?0:l,f=e.refX,h=e.refY,p=e.clip,m=void 0!==p&&p,g=e.clipX,y=void 0===g?0:g,v=e.clipY,w=void 0===v?0:v,b=Re(n).replace(\u002F^defer\\s\u002F,\"\").split(\" \"),B=(0,u.default)(b,2),j=B[0]||\"xMidYMid\",_=B[1]||\"meet\",C=o\u002Fs,x=i\u002Fa,E=Math.min(C,x),N=Math.max(C,x),Q=s,F=a;\"meet\"===_&&(Q*=E,F*=E),\"slice\"===_&&(Q*=N,F*=N);var U=new ht(t,\"refX\",f),S=new ht(t,\"refY\",h),L=U.hasValue()&&S.hasValue();if(L&&r.translate(-E*U.getPixels(\"x\"),-E*S.getPixels(\"y\")),m){var T=E*y,H=E*w;r.beginPath(),r.moveTo(T,H),r.lineTo(o,H),r.lineTo(o,i),r.lineTo(T,i),r.closePath(),r.clip()}if(!L){var I=\"meet\"===_&&E===x,P=\"slice\"===_&&N===x,O=\"meet\"===_&&E===C,k=\"slice\"===_&&N===C;\u002F^xMid\u002F.test(j)&&(I||P)&&r.translate(o\u002F2-Q\u002F2,0),\u002FYMid$\u002F.test(j)&&(O||k)&&r.translate(0,i\u002F2-F\u002F2),\u002F^xMax\u002F.test(j)&&(I||P)&&r.translate(o-Q,0),\u002FYMax$\u002F.test(j)&&(O||k)&&r.translate(0,i-F)}switch(!0){case\"none\"===j:r.scale(C,x);break;case\"meet\"===_:r.scale(E,E);break;case\"slice\"===_:r.scale(N,N)}r.translate(-c,-d)}},{key:\"start\",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.enableRedraw,o=void 0!==n&&n,s=r.ignoreMouse,i=void 0!==s&&s,a=r.ignoreAnimation,A=void 0!==a&&a,u=r.ignoreDimensions,c=void 0!==u&&u,l=r.ignoreClear,d=void 0!==l&&l,f=r.forceRedraw,h=r.scaleWidth,p=r.scaleHeight,m=r.offsetX,g=r.offsetY,y=this.FRAMERATE,v=this.mouse,w=1e3\u002Fy;if(this.frameDuration=w,this.readyPromise=new(M())((function(e){t.resolveReady=e})),this.isReady()&&this.render(e,c,d,h,p,m,g),o){var b=P()(),B=b,j=0,_=function r(){b=P()(),(j=b-B)>=w&&(B=b-j%w,t.shouldUpdate(A,f)&&(t.render(e,c,d,h,p,m,g),v.runEvents())),t.intervalId=V()(r)};i||v.start(),this.intervalId=V()(_)}}},{key:\"stop\",value:function(){this.intervalId&&(V().cancel(this.intervalId),this.intervalId=null),this.mouse.stop()}},{key:\"shouldUpdate\",value:function(e,t){if(!e){var r,n=this.frameDuration;if(H()(r=this.animations).call(r,(function(e,t){return t.update(n)||e}),!1))return!0}return!(\"function\"!=typeof t||!t())||!(this.isReadyLock||!this.isReady())||!!this.mouse.hasEvents()}},{key:\"render\",value:function(e,t,r,n,o,s,i){var a=this.CLIENT_WIDTH,A=this.CLIENT_HEIGHT,u=this.viewPort,c=this.ctx,l=this.isFirstRender,d=c.canvas;u.clear(),d.width&&d.height?u.setCurrent(d.width,d.height):u.setCurrent(a,A);var f=e.getStyle(\"width\"),h=e.getStyle(\"height\");!t&&(l||\"number\"!=typeof n&&\"number\"!=typeof o)&&(f.hasValue()&&(d.width=f.getPixels(\"x\"),d.style&&(d.style.width=\"\".concat(d.width,\"px\"))),h.hasValue()&&(d.height=h.getPixels(\"y\"),d.style&&(d.style.height=\"\".concat(d.height,\"px\"))));var p=d.clientWidth||d.width,m=d.clientHeight||d.height;if(t&&f.hasValue()&&h.hasValue()&&(p=f.getPixels(\"x\"),m=h.getPixels(\"y\")),u.setCurrent(p,m),\"number\"==typeof s&&e.getAttribute(\"x\",!0).setValue(s),\"number\"==typeof i&&e.getAttribute(\"y\",!0).setValue(i),\"number\"==typeof n||\"number\"==typeof o){var g,y,v=Ke(e.getAttribute(\"viewBox\").getString()),w=0,b=0;if(\"number\"==typeof n){var B=e.getStyle(\"width\");B.hasValue()?w=B.getPixels(\"x\")\u002Fn:isNaN(v[2])||(w=v[2]\u002Fn)}if(\"number\"==typeof o){var j=e.getStyle(\"height\");j.hasValue()?b=j.getPixels(\"y\")\u002Fo:isNaN(v[3])||(b=v[3]\u002Fo)}w||(w=b),b||(b=w),e.getAttribute(\"width\",!0).setValue(n),e.getAttribute(\"height\",!0).setValue(o);var _=e.getStyle(\"transform\",!0,!0);_.setValue(L()(g=L()(y=\"\".concat(_.getString(),\" scale(\")).call(y,1\u002Fw,\", \")).call(g,1\u002Fb,\")\"))}r||c.clearRect(0,0,p,m),e.render(c),l&&(this.isFirstRender=!1)}}]),e}();wt.defaultWindow=yt,wt.defaultFetch=vt;var bt=wt.defaultFetch,Bt=\"undefined\"!=typeof DOMParser?DOMParser:null,jt=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.fetch,n=void 0===r?bt:r,o=t.DOMParser,s=void 0===o?Bt:o;(0,F.default)(this,e),this.fetch=n,this.DOMParser=s}var t,r;return(0,U.default)(e,[{key:\"parse\",value:(r=(0,N.default)(E().mark((function e(t){return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!\u002F^\u003C\u002F.test(t)){e.next=2;break}return e.abrupt(\"return\",this.parseFromString(t));case 2:return e.abrupt(\"return\",this.load(t));case 3:case\"end\":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:\"parseFromString\",value:function(e){var t=new this.DOMParser;try{return this.checkDocument(t.parseFromString(e,\"image\u002Fsvg+xml\"))}catch(r){return this.checkDocument(t.parseFromString(e,\"text\u002Fxml\"))}}},{key:\"checkDocument\",value:function(e){var t=e.getElementsByTagName(\"parsererror\")[0];if(t)throw new Error(t.textContent);return e}},{key:\"load\",value:(t=(0,N.default)(E().mark((function e(t){var r,n;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.fetch(t);case 2:return r=e.sent,e.next=5,r.text();case 5:return n=e.sent,e.abrupt(\"return\",this.parseFromString(n));case 7:case\"end\":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})}]),e}(),_t=function(){function e(t,r){(0,F.default)(this,e),this.type=\"translate\",this.point=null,this.point=mt.parse(r)}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.point,r=t.x,n=t.y;e.translate(r||0,n||0)}},{key:\"unapply\",value:function(e){var t=this.point,r=t.x,n=t.y;e.translate(-1*r||0,-1*n||0)}},{key:\"applyToPoint\",value:function(e){var t=this.point,r=t.x,n=t.y;e.applyTransform([1,0,0,1,r||0,n||0])}}]),e}(),Ct=function(){function e(t,r,n){(0,F.default)(this,e),this.type=\"rotate\",this.angle=null,this.originX=null,this.originY=null,this.cx=0,this.cy=0;var o=Ke(r);this.angle=new ht(t,\"angle\",o[0]),this.originX=n[0],this.originY=n[1],this.cx=o[1]||0,this.cy=o[2]||0}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.cx,r=this.cy,n=this.originX,o=this.originY,s=this.angle,i=t+n.getPixels(\"x\"),a=r+o.getPixels(\"y\");e.translate(i,a),e.rotate(s.getRadians()),e.translate(-i,-a)}},{key:\"unapply\",value:function(e){var t=this.cx,r=this.cy,n=this.angle;e.translate(t,r),e.rotate(-1*n.getRadians()),e.translate(-t,-r)}},{key:\"applyToPoint\",value:function(e){var t=this.cx,r=this.cy,n=this.angle.getRadians();e.applyTransform([1,0,0,1,t||0,r||0]),e.applyTransform([Math.cos(n),Math.sin(n),-Math.sin(n),Math.cos(n),0,0]),e.applyTransform([1,0,0,1,-t||0,-r||0])}}]),e}(),xt=function(){function e(t,r){(0,F.default)(this,e),this.type=\"scale\",this.scale=null;var n=mt.parseScale(r);0!==n.x&&0!==n.y||(n.x=nt,n.y=nt),this.scale=n}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.scale(r,n||r)}},{key:\"unapply\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.scale(1\u002Fr,1\u002Fn||r)}},{key:\"applyToPoint\",value:function(e){var t=this.scale,r=t.x,n=t.y;e.applyTransform([r||0,0,0,n||0,0,0])}}]),e}(),Et=function(){function e(t,r){(0,F.default)(this,e),this.type=\"matrix\",this.matrix=[],this.matrix=Ke(r)}return(0,U.default)(e,[{key:\"apply\",value:function(e){var t=this.matrix;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},{key:\"unapply\",value:function(e){var t=this.matrix,r=t[0],n=t[2],o=t[4],s=t[1],i=t[3],a=t[5],A=1\u002F(r*(1*i-0*a)-n*(1*s-0*a)+o*(0*s-0*i));e.transform(A*(1*i-0*a),A*(0*a-1*s),A*(0*o-1*n),A*(1*r-0*o),A*(n*a-o*i),A*(o*s-r*a))}},{key:\"applyToPoint\",value:function(e){e.applyTransform(this.matrix)}}]),e}();var Nt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skew\",r.angle=null,r.angle=new ht(e,\"angle\",t),r}return o}(Et);var Qt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skewX\",r.matrix=[1,0,Math.tan(r.angle.getRadians()),1,0,0],r}return o}(Nt);var Ft=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t){var r;return(0,F.default)(this,o),(r=n.call(this,e,t)).type=\"skewY\",r.matrix=[1,Math.tan(r.angle.getRadians()),0,1,0,0],r}return o}(Nt),Ut=function(){function e(t,r,n){var o=this;(0,F.default)(this,e),this.document=t,this.transforms=[];var s=function(e){var t;return G()(t=Re(e)).call(t).replace(\u002F\\)([a-zA-Z])\u002Fg,\") $1\").replace(\u002F\\)(\\s?,\\s?)\u002Fg,\") \").split(\u002F\\s(?=[a-z])\u002F)}(r);g()(s).call(s,(function(t){if(\"none\"!==t){var r=function(e){var t=e.split(\"(\"),r=(0,u.default)(t,2),n=r[0],o=r[1];return[G()(n).call(n),G()(o).call(o).replace(\")\",\"\")]}(t),s=(0,u.default)(r,2),i=s[0],a=s[1],A=e.transformTypes[i];void 0!==A&&o.transforms.push(new A(o.document,a,n))}}))}return(0,U.default)(e,[{key:\"apply\",value:function(e){for(var t=this.transforms,r=t.length,n=0;n\u003Cr;n++)t[n].apply(e)}},{key:\"unapply\",value:function(e){for(var t=this.transforms,r=t.length-1;r>=0;r--)t[r].unapply(e)}},{key:\"applyToPoint\",value:function(e){for(var t=this.transforms,r=t.length,n=0;n\u003Cr;n++)t[n].applyToPoint(e)}}],[{key:\"fromElement\",value:function(t,r){var n=r.getStyle(\"transform\",!1,!0),o=r.getStyle(\"transform-origin\",!1,!0).split(),s=(0,u.default)(o,2),i=s[0],a=s[1],A=[i,void 0===a?i:a];return n.hasValue()?new e(t,n.getString(),A):null}}]),e}();Ut.transformTypes={translate:_t,rotate:Ct,scale:xt,matrix:Et,skewX:Qt,skewY:Ft};var St=function(){function e(t,r){var n,o,s=this,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if((0,F.default)(this,e),this.document=t,this.node=r,this.captureTextNodes=i,this.attributes={},this.styles={},this.stylesSpecificity={},this.animationFrozen=!1,this.animationFrozenValue=\"\",this.parent=null,this.children=[],r&&1===r.nodeType){if(g()(n=ae()(r.attributes)).call(n,(function(e){var r=Ve(e.nodeName);s.attributes[r]=new ht(t,r,e.value)})),this.addStylesFromStyleDefinition(),this.getAttribute(\"style\").hasValue()){var a,c=A()(a=this.getAttribute(\"style\").getString().split(\";\")).call(a,(function(e){return G()(e).call(e)}));g()(c).call(c,(function(e){var r;if(e){var n=A()(r=e.split(\":\")).call(r,(function(e){return G()(e).call(e)})),o=(0,u.default)(n,2),i=o[0],a=o[1];s.styles[i]=new ht(t,i,a)}}))}var l=t.definitions,d=this.getAttribute(\"id\");d.hasValue()&&(l[d.getValue()]||(l[d.getValue()]=this)),g()(o=ae()(r.childNodes)).call(o,(function(e){if(1===e.nodeType)s.addChild(e);else if(i&&(3===e.nodeType||4===e.nodeType)){var r=t.createTextNode(e);r.getText().length>0&&s.addChild(r)}}))}}return(0,U.default)(e,[{key:\"getAttribute\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.attributes[e];if(!r&&t){var n=new ht(this.document,e,\"\");return this.attributes[e]=n,n}return r||ht.empty(this.document)}},{key:\"getHrefAttribute\",value:function(){for(var e in this.attributes)if(\"href\"===e||\u002F:href$\u002F.test(e))return this.attributes[e];return ht.empty(this.document)}},{key:\"getStyle\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.styles[e];if(n)return n;var o=this.getAttribute(e);if(o&&o.hasValue())return this.styles[e]=o,o;if(!r){var s=this.parent;if(s){var i=s.getStyle(e);if(i&&i.hasValue())return i}}if(t){var a=new ht(this.document,e,\"\");return this.styles[e]=a,a}return n||ht.empty(this.document)}},{key:\"render\",value:function(e){if(\"none\"!==this.getStyle(\"display\").getString()&&\"hidden\"!==this.getStyle(\"visibility\").getString()){if(e.save(),this.getStyle(\"mask\").hasValue()){var t=this.getStyle(\"mask\").getDefinition();t&&(this.applyEffects(e),t.apply(e,this))}else if(\"none\"!==this.getStyle(\"filter\").getValue(\"none\")){var r=this.getStyle(\"filter\").getDefinition();r&&(this.applyEffects(e),r.apply(e,this))}else this.setContext(e),this.renderChildren(e),this.clearContext(e);e.restore()}}},{key:\"setContext\",value:function(e){}},{key:\"applyEffects\",value:function(e){var t=Ut.fromElement(this.document,this);t&&t.apply(e);var r=this.getStyle(\"clip-path\",!1,!0);if(r.hasValue()){var n=r.getDefinition();n&&n.apply(e)}}},{key:\"clearContext\",value:function(e){}},{key:\"renderChildren\",value:function(e){var t;g()(t=this.children).call(t,(function(t){t.render(e)}))}},{key:\"addChild\",value:function(t){var r,n=t instanceof e?t:this.document.createElement(t);n.parent=this,se()(r=e.ignoreChildTypes).call(r,n.type)||this.children.push(n)}},{key:\"matchesSelector\",value:function(e){var t,r=this.node;if(\"function\"==typeof r.matches)return r.matches(e);var n=r.getAttribute(\"class\");return!(!n||\"\"===n)&&ne()(t=n.split(\" \")).call(t,(function(t){if(\".\".concat(t)===e)return!0}))}},{key:\"addStylesFromStyleDefinition\",value:function(){var e=this.document,t=e.styles,r=e.stylesSpecificity;for(var n in t)if(\"@\"!==n[0]&&this.matchesSelector(n)){var o=t[n],s=r[n];if(o)for(var i in o){var a=this.stylesSpecificity[i];void 0===a&&(a=\"000\"),s>=a&&(this.styles[i]=o[i],this.stylesSpecificity[i]=s)}}}},{key:\"removeStyles\",value:function(e,t){return H()(t).call(t,(function(t,r){var n,o=e.getStyle(r);if(!o.hasValue())return t;var s=o.getString();return o.setValue(\"\"),L()(n=[]).call(n,(0,te.default)(t),[[r,s]])}),[])}},{key:\"restoreStyles\",value:function(e,t){g()(t).call(t,(function(t){var r=(0,u.default)(t,2),n=r[0],o=r[1];e.getStyle(n,!0).setValue(o)}))}}]),e}();St.ignoreChildTypes=[\"title\"];var Lt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){return(0,F.default)(this,o),n.call(this,e,t,r)}return o}(St);function Tt(e){var t=G()(e).call(e);return\u002F^('|\")\u002F.test(t)?t:'\"'.concat(t,'\"')}function Ht(e){if(!e)return\"\";var t=G()(e).call(e).toLowerCase();switch(t){case\"normal\":case\"italic\":case\"oblique\":case\"inherit\":case\"initial\":case\"unset\":return t;default:return\u002F^oblique\\s+(-|)\\d+deg$\u002F.test(t)?t:\"\"}}function It(e){if(!e)return\"\";var t=G()(e).call(e).toLowerCase();switch(t){case\"normal\":case\"bold\":case\"lighter\":case\"bolder\":case\"inherit\":case\"initial\":case\"unset\":return t;default:return\u002F^[\\d.]+$\u002F.test(t)?t:\"\"}}var Pt=function(){function e(t,r,n,o,s,i){(0,F.default)(this,e);var a=i?\"string\"==typeof i?e.parse(i):i:{};this.fontFamily=s||a.fontFamily,this.fontSize=o||a.fontSize,this.fontStyle=t||a.fontStyle,this.fontWeight=n||a.fontWeight,this.fontVariant=r||a.fontVariant}return(0,U.default)(e,[{key:\"toString\",value:function(){var e,t,r;return G()(e=[Ht(this.fontStyle),this.fontVariant,It(this.fontWeight),this.fontSize,(t=this.fontFamily,\"undefined\"==typeof process?t:A()(r=G()(t).call(t).split(\",\")).call(r,Tt).join(\",\"))].join(\" \")).call(e)}}],[{key:\"parse\",value:function(){var t,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",n=arguments.length>1?arguments[1]:void 0,o=\"\",s=\"\",i=\"\",a=\"\",A=\"\",c=G()(t=Re(r)).call(t).split(\" \"),l={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return g()(c).call(c,(function(t){var r,n,c;switch(!0){case!l.fontStyle&&se()(r=e.styles).call(r,t):\"inherit\"!==t&&(o=t),l.fontStyle=!0;break;case!l.fontVariant&&se()(n=e.variants).call(n,t):\"inherit\"!==t&&(s=t),l.fontStyle=!0,l.fontVariant=!0;break;case!l.fontWeight&&se()(c=e.weights).call(c,t):\"inherit\"!==t&&(i=t),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0;break;case!l.fontSize:if(\"inherit\"!==t){var d=t.split(\"\u002F\"),f=(0,u.default)(d,1);a=f[0]}l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0,l.fontSize=!0;break;default:\"inherit\"!==t&&(A+=t)}})),new e(o,s,i,a,A,n)}}]),e}();Pt.styles=\"normal|italic|oblique|inherit\",Pt.variants=\"normal|small-caps|inherit\",Pt.weights=\"normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit\";var Ot=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Number.NaN,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.NaN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Number.NaN,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Number.NaN;(0,F.default)(this,e),this.x1=t,this.y1=r,this.x2=n,this.y2=o,this.addPoint(t,r),this.addPoint(n,o)}return(0,U.default)(e,[{key:\"addPoint\",value:function(e,t){void 0!==e&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e\u003Cthis.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),void 0!==t&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t\u003Cthis.y1&&(this.y1=t),t>this.y2&&(this.y2=t))}},{key:\"addX\",value:function(e){this.addPoint(e,null)}},{key:\"addY\",value:function(e){this.addPoint(null,e)}},{key:\"addBoundingBox\",value:function(e){if(e){var t=e.x1,r=e.y1,n=e.x2,o=e.y2;this.addPoint(t,r),this.addPoint(n,o)}}},{key:\"sumCubic\",value:function(e,t,r,n,o){return Math.pow(1-e,3)*t+3*Math.pow(1-e,2)*e*r+3*(1-e)*Math.pow(e,2)*n+Math.pow(e,3)*o}},{key:\"bezierCurveAdd\",value:function(e,t,r,n,o){var s=6*t-12*r+6*n,i=-3*t+9*r-9*n+3*o,a=3*r-3*t;if(0!==i){var A=Math.pow(s,2)-4*a*i;if(!(A\u003C0)){var u=(-s+Math.sqrt(A))\u002F(2*i);0\u003Cu&&u\u003C1&&(e?this.addX(this.sumCubic(u,t,r,n,o)):this.addY(this.sumCubic(u,t,r,n,o)));var c=(-s-Math.sqrt(A))\u002F(2*i);0\u003Cc&&c\u003C1&&(e?this.addX(this.sumCubic(c,t,r,n,o)):this.addY(this.sumCubic(c,t,r,n,o)))}}else{if(0===s)return;var l=-a\u002Fs;0\u003Cl&&l\u003C1&&(e?this.addX(this.sumCubic(l,t,r,n,o)):this.addY(this.sumCubic(l,t,r,n,o)))}}},{key:\"addBezierCurve\",value:function(e,t,r,n,o,s,i,a){this.addPoint(e,t),this.addPoint(i,a),this.bezierCurveAdd(!0,e,r,o,i),this.bezierCurveAdd(!1,t,n,s,a)}},{key:\"addQuadraticCurve\",value:function(e,t,r,n,o,s){var i=e+2\u002F3*(r-e),a=t+2\u002F3*(n-t),A=i+1\u002F3*(o-e),u=a+1\u002F3*(s-t);this.addBezierCurve(e,t,i,A,a,u,o,s)}},{key:\"isPointInBox\",value:function(e,t){var r=this.x1,n=this.y1,o=this.x2,s=this.y2;return r\u003C=e&&e\u003C=o&&n\u003C=t&&t\u003C=s}},{key:\"x\",get:function(){return this.x1}},{key:\"y\",get:function(){return this.y1}},{key:\"width\",get:function(){return this.x2-this.x1}},{key:\"height\",get:function(){return this.y2-this.y1}}]),e}();var kt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).modifiedEmSizeStack=!1,e}return(0,U.default)(o,[{key:\"calculateOpacity\",value:function(){for(var e=1,t=this;t;){var r=t.getStyle(\"opacity\",!1,!0);r.hasValue(!0)&&(e*=r.getNumber()),t=t.parent}return e}},{key:\"setContext\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!t){var r=this.getStyle(\"fill\"),n=this.getStyle(\"fill-opacity\"),o=this.getStyle(\"stroke\"),s=this.getStyle(\"stroke-opacity\");if(r.isUrlDefinition()){var i=r.getFillStyleDefinition(this,n);i&&(e.fillStyle=i)}else if(r.hasValue()){\"currentColor\"===r.getString()&&r.setValue(this.getStyle(\"color\").getColor());var a=r.getColor();\"inherit\"!==a&&(e.fillStyle=\"none\"===a?\"rgba(0,0,0,0)\":a)}if(n.hasValue()){var A=new ht(this.document,\"fill\",e.fillStyle).addOpacity(n).getColor();e.fillStyle=A}if(o.isUrlDefinition()){var u=o.getFillStyleDefinition(this,s);u&&(e.strokeStyle=u)}else if(o.hasValue()){\"currentColor\"===o.getString()&&o.setValue(this.getStyle(\"color\").getColor());var c=o.getString();\"inherit\"!==c&&(e.strokeStyle=\"none\"===c?\"rgba(0,0,0,0)\":c)}if(s.hasValue()){var l=new ht(this.document,\"stroke\",e.strokeStyle).addOpacity(s).getString();e.strokeStyle=l}var d=this.getStyle(\"stroke-width\");if(d.hasValue()){var f=d.getPixels();e.lineWidth=f||nt}var h=this.getStyle(\"stroke-linecap\"),p=this.getStyle(\"stroke-linejoin\"),m=this.getStyle(\"stroke-miterlimit\"),g=this.getStyle(\"paint-order\"),y=this.getStyle(\"stroke-dasharray\"),v=this.getStyle(\"stroke-dashoffset\");if(h.hasValue()&&(e.lineCap=h.getString()),p.hasValue()&&(e.lineJoin=p.getString()),m.hasValue()&&(e.miterLimit=m.getNumber()),g.hasValue()&&(e.paintOrder=g.getValue()),y.hasValue()&&\"none\"!==y.getString()){var w=Ke(y.getString());void 0!==e.setLineDash?e.setLineDash(w):void 0!==e.webkitLineDash?e.webkitLineDash=w:void 0===e.mozDash||1===w.length&&0===w[0]||(e.mozDash=w);var b=v.getPixels();void 0!==e.lineDashOffset?e.lineDashOffset=b:void 0!==e.webkitLineDashOffset?e.webkitLineDashOffset=b:void 0!==e.mozDashOffset&&(e.mozDashOffset=b)}}if(this.modifiedEmSizeStack=!1,void 0!==e.font){var B=this.getStyle(\"font\"),j=this.getStyle(\"font-style\"),_=this.getStyle(\"font-variant\"),C=this.getStyle(\"font-weight\"),x=this.getStyle(\"font-size\"),E=this.getStyle(\"font-family\"),N=new Pt(j.getString(),_.getString(),C.getString(),x.hasValue()?\"\".concat(x.getPixels(!0),\"px\"):\"\",E.getString(),Pt.parse(B.getString(),e.font));j.setValue(N.fontStyle),_.setValue(N.fontVariant),C.setValue(N.fontWeight),x.setValue(N.fontSize),E.setValue(N.fontFamily),e.font=N.toString(),x.isPixels()&&(this.document.emSize=x.getPixels(),this.modifiedEmSizeStack=!0)}t||(this.applyEffects(e),e.globalAlpha=this.calculateOpacity())}},{key:\"clearContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"clearContext\",this).call(this,e),this.modifiedEmSizeStack&&this.document.popEmSize()}}]),o}(St);var Rt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,(this instanceof o?this.constructor:void 0)===o||r)).type=\"text\",s.x=0,s.y=0,s.measureCache=-1,s}return(0,U.default)(o,[{key:\"setContext\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e,t);var r=this.getStyle(\"dominant-baseline\").getTextBaseline()||this.getStyle(\"alignment-baseline\").getTextBaseline();r&&(e.textBaseline=r)}},{key:\"initializeCoordinates\",value:function(e){this.x=this.getAttribute(\"x\").getPixels(\"x\"),this.y=this.getAttribute(\"y\").getPixels(\"y\");var t=this.getAttribute(\"dx\"),r=this.getAttribute(\"dy\");t.hasValue()&&(this.x+=t.getPixels(\"x\")),r.hasValue()&&(this.y+=r.getPixels(\"y\")),this.x+=this.getAnchorDelta(e,this,0)}},{key:\"getBoundingBox\",value:function(e){var t,r=this;if(\"text\"!==this.type)return this.getTElementBoundingBox(e);this.initializeCoordinates(e);var n=null;return g()(t=this.children).call(t,(function(t,o){var s=r.getChildBoundingBox(e,r,r,o);n?n.addBoundingBox(s):n=s})),n}},{key:\"getFontSize\",value:function(){var e=this.document,t=this.parent,r=Pt.parse(e.ctx.font).fontSize;return t.getStyle(\"font-size\").getNumber(r)}},{key:\"getTElementBoundingBox\",value:function(e){var t=this.getFontSize();return new Ot(this.x,this.y-t,this.x+this.measureText(e),this.y)}},{key:\"getGlyph\",value:function(e,t,r){var n=t[r],o=null;if(e.isArabic){var s=t.length,i=t[r-1],a=t[r+1],A=\"isolated\";(0===r||\" \"===i)&&r\u003Cs-2&&\" \"!==a&&(A=\"terminal\"),r>0&&\" \"!==i&&r\u003Cs-2&&\" \"!==a&&(A=\"medial\"),r>0&&\" \"!==i&&(r===s-1||\" \"===a)&&(A=\"initial\"),void 0!==e.glyphs[n]&&((o=e.glyphs[n][A])||\"glyph\"!==e.glyphs[n].type||(o=e.glyphs[n]))}else o=e.glyphs[n];return o||(o=e.missingGlyph),o}},{key:\"getText\",value:function(){return\"\"}},{key:\"getTextFromNode\",value:function(e){var t=e||this.node,r=ae()(t.parentNode.childNodes),n=le()(r).call(r,t),o=r.length-1,s=Re(t.value||t.text||t.textContent||\"\");return 0===n&&(s=Me(s)),n===o&&(s=De(s)),s}},{key:\"renderChildren\",value:function(e){var t,r=this;if(\"text\"===this.type){this.initializeCoordinates(e),g()(t=this.children).call(t,(function(t,n){r.renderChild(e,r,r,n)}));var n=this.document.screen.mouse;n.isWorking()&&n.checkBoundingBox(this,this.getBoundingBox(e))}else this.renderTElementChildren(e)}},{key:\"renderTElementChildren\",value:function(e){var t=this.document,r=this.parent,n=this.getText(),o=r.getStyle(\"font-family\").getDefinition();if(o)for(var s,i=o.fontFace.unitsPerEm,a=Pt.parse(t.ctx.font),A=r.getStyle(\"font-size\").getNumber(a.fontSize),u=r.getStyle(\"font-style\").getString(a.fontStyle),c=A\u002Fi,l=o.isRTL?ue()(s=n.split(\"\")).call(s).join(\"\"):n,d=Ke(r.getAttribute(\"dx\").getString()),f=l.length,h=0;h\u003Cf;h++){var p=this.getGlyph(o,l,h);e.translate(this.x,this.y),e.scale(c,-c);var m=e.lineWidth;e.lineWidth=e.lineWidth*i\u002FA,\"italic\"===u&&e.transform(1,0,.4,1,0,0),p.render(e),\"italic\"===u&&e.transform(1,0,-.4,1,0,0),e.lineWidth=m,e.scale(1\u002Fc,-1\u002Fc),e.translate(-this.x,-this.y),this.x+=A*(p.horizAdvX||o.horizAdvX)\u002Fi,void 0===d[h]||isNaN(d[h])||(this.x+=d[h])}else{var g=this.x,y=this.y;\"stroke\"===e.paintOrder?(e.strokeStyle&&e.strokeText(n,g,y),e.fillStyle&&e.fillText(n,g,y)):(e.fillStyle&&e.fillText(n,g,y),e.strokeStyle&&e.strokeText(n,g,y))}}},{key:\"getAnchorDelta\",value:function(e,t,r){var n=this.getStyle(\"text-anchor\").getString(\"start\");if(\"start\"!==n){for(var o=t.children,s=o.length,i=null,a=0,A=r;A\u003Cs&&(i=o[A],!(A>r&&i.getAttribute(\"x\").hasValue()||i.getAttribute(\"text-anchor\").hasValue()));A++)a+=i.measureTextRecursive(e);return-1*(\"end\"===n?a:a\u002F2)}return 0}},{key:\"adjustChildCoordinates\",value:function(e,t,r,n){var o=r.children[n];if(\"function\"!=typeof o.measureText)return o;e.save(),o.setContext(e,!0);var s=o.getAttribute(\"x\"),i=o.getAttribute(\"y\"),a=o.getAttribute(\"dx\"),A=o.getAttribute(\"dy\"),u=o.getAttribute(\"text-anchor\").getString(\"start\");if(0===n&&\"textNode\"!==o.type&&(s.hasValue()||s.setValue(t.getAttribute(\"x\").getValue(\"0\")),i.hasValue()||i.setValue(t.getAttribute(\"y\").getValue(\"0\")),a.hasValue()||a.setValue(t.getAttribute(\"dx\").getValue(\"0\")),A.hasValue()||A.setValue(t.getAttribute(\"dy\").getValue(\"0\"))),s.hasValue()){if(o.x=s.getPixels(\"x\")+t.getAnchorDelta(e,r,n),\"start\"!==u){var c=o.measureTextRecursive(e);o.x+=-1*(\"end\"===u?c:c\u002F2)}a.hasValue()&&(o.x+=a.getPixels(\"x\"))}else{if(\"start\"!==u){var l=o.measureTextRecursive(e);t.x+=-1*(\"end\"===u?l:l\u002F2)}a.hasValue()&&(t.x+=a.getPixels(\"x\")),o.x=t.x}return t.x=o.x+o.measureText(e),i.hasValue()?(o.y=i.getPixels(\"y\"),A.hasValue()&&(o.y+=A.getPixels(\"y\"))):(A.hasValue()&&(t.y+=A.getPixels(\"y\")),o.y=t.y),t.y=o.y,o.clearContext(e),e.restore(),o}},{key:\"getChildBoundingBox\",value:function(e,t,r,n){var o,s=this.adjustChildCoordinates(e,t,r,n);if(\"function\"!=typeof s.getBoundingBox)return null;var i=s.getBoundingBox(e);return i?(g()(o=s.children).call(o,(function(r,n){var o=t.getChildBoundingBox(e,t,s,n);i.addBoundingBox(o)})),i):null}},{key:\"renderChild\",value:function(e,t,r,n){var o,s=this.adjustChildCoordinates(e,t,r,n);s.render(e),g()(o=s.children).call(o,(function(r,n){t.renderChild(e,t,s,n)}))}},{key:\"measureTextRecursive\",value:function(e){var t;return H()(t=this.children).call(t,(function(t,r){return t+r.measureTextRecursive(e)}),this.measureText(e))}},{key:\"measureText\",value:function(e){var t=this.measureCache;if(~t)return t;var r=this.getText(),n=this.measureTargetText(e,r);return this.measureCache=n,n}},{key:\"measureTargetText\",value:function(e,t){if(!t.length)return 0;var r=this.parent,n=r.getStyle(\"font-family\").getDefinition();if(n){for(var o,s=this.getFontSize(),i=n.isRTL?ue()(o=t.split(\"\")).call(o).join(\"\"):t,a=Ke(r.getAttribute(\"dx\").getString()),A=i.length,u=0,c=0;c\u003CA;c++)u+=(this.getGlyph(n,i,c).horizAdvX||n.horizAdvX)*s\u002Fn.fontFace.unitsPerEm,void 0===a[c]||isNaN(a[c])||(u+=a[c]);return u}if(!e.measureText)return 10*t.length;e.save(),this.setContext(e,!0);var l=e.measureText(t).width;return this.clearContext(e),e.restore(),l}}]),o}(kt);var Mt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,(this instanceof o?this.constructor:void 0)===o||r)).type=\"tspan\",s.text=s.children.length>0?\"\":s.getTextFromNode(),s}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}}]),o}(Rt);var Dt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"textNode\",e}return o}(Mt);var Kt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e){var t;return(0,F.default)(this,o),(t=n.call(this,e.replace(\u002F[+-.]\\s+\u002Fg,\"-\").replace(\u002F[^MmZzLlHhVvCcSsQqTtAae\\d\\s.,+-].*\u002Fg,\"\"))).control=null,t.start=null,t.current=null,t.command=null,t.commands=t.commands,t.i=-1,t.previousCommand=null,t.points=[],t.angles=[],t}return(0,U.default)(o,[{key:\"reset\",value:function(){this.i=-1,this.command=null,this.previousCommand=null,this.start=new mt(0,0),this.control=new mt(0,0),this.current=new mt(0,0),this.points=[],this.angles=[]}},{key:\"isEnd\",value:function(){return this.i>=this.commands.length-1}},{key:\"next\",value:function(){var e=this.commands[++this.i];return this.previousCommand=this.command,this.command=e,e}},{key:\"getPoint\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"x\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"y\",r=new mt(this.command[e],this.command[t]);return this.makeAbsolute(r)}},{key:\"getAsControlPoint\",value:function(e,t){var r=this.getPoint(e,t);return this.control=r,r}},{key:\"getAsCurrentPoint\",value:function(e,t){var r=this.getPoint(e,t);return this.current=r,r}},{key:\"getReflectedControlPoint\",value:function(){var e=this.previousCommand.type;if(e!==pe.SVGPathData.CURVE_TO&&e!==pe.SVGPathData.SMOOTH_CURVE_TO&&e!==pe.SVGPathData.QUAD_TO&&e!==pe.SVGPathData.SMOOTH_QUAD_TO)return this.current;var t=this.current,r=t.x,n=t.y,o=this.control,s=o.x,i=o.y;return new mt(2*r-s,2*n-i)}},{key:\"makeAbsolute\",value:function(e){if(this.command.relative){var t=this.current,r=t.x,n=t.y;e.x+=r,e.y+=n}return e}},{key:\"addMarker\",value:function(e,t,r){var n=this.points,o=this.angles;r&&o.length>0&&!o[o.length-1]&&(o[o.length-1]=n[n.length-1].angleTo(r)),this.addMarkerAngle(e,t?t.angleTo(e):null)}},{key:\"addMarkerAngle\",value:function(e,t){this.points.push(e),this.angles.push(t)}},{key:\"getMarkerPoints\",value:function(){return this.points}},{key:\"getMarkerAngles\",value:function(){for(var e=this.angles,t=e.length,r=0;r\u003Ct;r++)if(!e[r])for(var n=r+1;n\u003Ct;n++)if(e[n]){e[r]=e[n];break}return e}}]),o}(pe.SVGPathData);var zt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"path\",s.pathParser=null,s.pathParser=new Kt(s.getAttribute(\"d\").getString()),s}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.pathParser,r=new Ot;for(t.reset(),e&&e.beginPath();!t.isEnd();)switch(t.next().type){case Kt.MOVE_TO:this.pathM(e,r);break;case Kt.LINE_TO:this.pathL(e,r);break;case Kt.HORIZ_LINE_TO:this.pathH(e,r);break;case Kt.VERT_LINE_TO:this.pathV(e,r);break;case Kt.CURVE_TO:this.pathC(e,r);break;case Kt.SMOOTH_CURVE_TO:this.pathS(e,r);break;case Kt.QUAD_TO:this.pathQ(e,r);break;case Kt.SMOOTH_QUAD_TO:this.pathT(e,r);break;case Kt.ARC:this.pathA(e,r);break;case Kt.CLOSE_PATH:this.pathZ(e,r)}return r}},{key:\"getBoundingBox\",value:function(e){return this.path()}},{key:\"getMarkers\",value:function(){var e=this.pathParser,t=e.getMarkerPoints(),r=e.getMarkerAngles();return A()(t).call(t,(function(e,t){return[e,r[t]]}))}},{key:\"renderChildren\",value:function(e){this.path(e),this.document.screen.mouse.checkPath(this,e);var t=this.getStyle(\"fill-rule\");\"\"!==e.fillStyle&&(\"inherit\"!==t.getString(\"inherit\")?he()(e).call(e,t.getString()):he()(e).call(e)),\"\"!==e.strokeStyle&&e.stroke();var r=this.getMarkers();if(r){var n=r.length-1,o=this.getStyle(\"marker-start\"),s=this.getStyle(\"marker-mid\"),i=this.getStyle(\"marker-end\");if(o.isUrlDefinition()){var a=o.getDefinition(),A=(0,u.default)(r[0],2),c=A[0],l=A[1];a.render(e,c,l)}if(s.isUrlDefinition())for(var d=s.getDefinition(),f=1;f\u003Cn;f++){var h=(0,u.default)(r[f],2),p=h[0],m=h[1];d.render(e,p,m)}if(i.isUrlDefinition()){var g=i.getDefinition(),y=(0,u.default)(r[n],2),v=y[0],w=y[1];g.render(e,v,w)}}}},{key:\"pathM\",value:function(e,t){var r=this.pathParser,n=o.pathM(r).point,s=n.x,i=n.y;r.addMarker(n),t.addPoint(s,i),e&&e.moveTo(s,i)}},{key:\"pathL\",value:function(e,t){var r=this.pathParser,n=o.pathL(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathH\",value:function(e,t){var r=this.pathParser,n=o.pathH(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathV\",value:function(e,t){var r=this.pathParser,n=o.pathV(r),s=n.current,i=n.point,a=i.x,A=i.y;r.addMarker(i,s),t.addPoint(a,A),e&&e.lineTo(a,A)}},{key:\"pathC\",value:function(e,t){var r=this.pathParser,n=o.pathC(r),s=n.current,i=n.point,a=n.controlPoint,A=n.currentPoint;r.addMarker(A,a,i),t.addBezierCurve(s.x,s.y,i.x,i.y,a.x,a.y,A.x,A.y),e&&e.bezierCurveTo(i.x,i.y,a.x,a.y,A.x,A.y)}},{key:\"pathS\",value:function(e,t){var r=this.pathParser,n=o.pathS(r),s=n.current,i=n.point,a=n.controlPoint,A=n.currentPoint;r.addMarker(A,a,i),t.addBezierCurve(s.x,s.y,i.x,i.y,a.x,a.y,A.x,A.y),e&&e.bezierCurveTo(i.x,i.y,a.x,a.y,A.x,A.y)}},{key:\"pathQ\",value:function(e,t){var r=this.pathParser,n=o.pathQ(r),s=n.current,i=n.controlPoint,a=n.currentPoint;r.addMarker(a,i,i),t.addQuadraticCurve(s.x,s.y,i.x,i.y,a.x,a.y),e&&e.quadraticCurveTo(i.x,i.y,a.x,a.y)}},{key:\"pathT\",value:function(e,t){var r=this.pathParser,n=o.pathT(r),s=n.current,i=n.controlPoint,a=n.currentPoint;r.addMarker(a,i,i),t.addQuadraticCurve(s.x,s.y,i.x,i.y,a.x,a.y),e&&e.quadraticCurveTo(i.x,i.y,a.x,a.y)}},{key:\"pathA\",value:function(e,t){var r=this.pathParser,n=o.pathA(r),s=n.currentPoint,i=n.rX,a=n.rY,A=n.sweepFlag,u=n.xAxisRotation,c=n.centp,l=n.a1,d=n.ad,f=1-A?1:-1,h=l+f*(d\u002F2),p=new mt(c.x+i*Math.cos(h),c.y+a*Math.sin(h));if(r.addMarkerAngle(p,h-f*Math.PI\u002F2),r.addMarkerAngle(s,h-f*Math.PI),t.addPoint(s.x,s.y),e&&!isNaN(l)&&!isNaN(d)){var m=i>a?i:a,g=i>a?1:i\u002Fa,y=i>a?a\u002Fi:1;e.translate(c.x,c.y),e.rotate(u),e.scale(g,y),e.arc(0,0,m,l,l+d,Boolean(1-A)),e.scale(1\u002Fg,1\u002Fy),e.rotate(-u),e.translate(-c.x,-c.y)}}},{key:\"pathZ\",value:function(e,t){o.pathZ(this.pathParser),e&&t.x1!==t.x2&&t.y1!==t.y2&&e.closePath()}}],[{key:\"pathM\",value:function(e){var t=e.getAsCurrentPoint();return e.start=e.current,{point:t}}},{key:\"pathL\",value:function(e){return{current:e.current,point:e.getAsCurrentPoint()}}},{key:\"pathH\",value:function(e){var t=e.current,r=e.command,n=new mt((r.relative?t.x:0)+r.x,t.y);return e.current=n,{current:t,point:n}}},{key:\"pathV\",value:function(e){var t=e.current,r=e.command,n=new mt(t.x,(r.relative?t.y:0)+r.y);return e.current=n,{current:t,point:n}}},{key:\"pathC\",value:function(e){return{current:e.current,point:e.getPoint(\"x1\",\"y1\"),controlPoint:e.getAsControlPoint(\"x2\",\"y2\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathS\",value:function(e){return{current:e.current,point:e.getReflectedControlPoint(),controlPoint:e.getAsControlPoint(\"x2\",\"y2\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathQ\",value:function(e){return{current:e.current,controlPoint:e.getAsControlPoint(\"x1\",\"y1\"),currentPoint:e.getAsCurrentPoint()}}},{key:\"pathT\",value:function(e){var t=e.current,r=e.getReflectedControlPoint();return e.control=r,{current:t,controlPoint:r,currentPoint:e.getAsCurrentPoint()}}},{key:\"pathA\",value:function(e){var t=e.current,r=e.command,n=r.rX,o=r.rY,s=r.xRot,i=r.lArcFlag,a=r.sweepFlag,A=s*(Math.PI\u002F180),u=e.getAsCurrentPoint(),c=new mt(Math.cos(A)*(t.x-u.x)\u002F2+Math.sin(A)*(t.y-u.y)\u002F2,-Math.sin(A)*(t.x-u.x)\u002F2+Math.cos(A)*(t.y-u.y)\u002F2),l=Math.pow(c.x,2)\u002FMath.pow(n,2)+Math.pow(c.y,2)\u002FMath.pow(o,2);l>1&&(n*=Math.sqrt(l),o*=Math.sqrt(l));var d=(i===a?-1:1)*Math.sqrt((Math.pow(n,2)*Math.pow(o,2)-Math.pow(n,2)*Math.pow(c.y,2)-Math.pow(o,2)*Math.pow(c.x,2))\u002F(Math.pow(n,2)*Math.pow(c.y,2)+Math.pow(o,2)*Math.pow(c.x,2)));isNaN(d)&&(d=0);var f=new mt(d*n*c.y\u002Fo,d*-o*c.x\u002Fn),h=new mt((t.x+u.x)\u002F2+Math.cos(A)*f.x-Math.sin(A)*f.y,(t.y+u.y)\u002F2+Math.sin(A)*f.x+Math.cos(A)*f.y),p=it([1,0],[(c.x-f.x)\u002Fn,(c.y-f.y)\u002Fo]),m=[(c.x-f.x)\u002Fn,(c.y-f.y)\u002Fo],g=[(-c.x-f.x)\u002Fn,(-c.y-f.y)\u002Fo],y=it(m,g);return st(m,g)\u003C=-1&&(y=Math.PI),st(m,g)>=1&&(y=0),{currentPoint:u,rX:n,rY:o,sweepFlag:a,xAxisRotation:A,centp:h,a1:p,ad:y}}},{key:\"pathZ\",value:function(e){e.current=e.start}}]),o}(kt);var Vt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"svg\",e.root=!1,e}return(0,U.default)(o,[{key:\"setContext\",value:function(e){var t=this.document,r=t.screen,n=t.window,s=e.canvas;if(r.setDefaults(e),s.style&&void 0!==e.font&&n&&void 0!==n.getComputedStyle){e.font=n.getComputedStyle(s).getPropertyValue(\"font\");var i=new ht(t,\"fontSize\",Pt.parse(e.font).fontSize);i.hasValue()&&(t.rootEmSize=i.getPixels(\"y\"),t.emSize=t.rootEmSize)}this.getAttribute(\"x\").hasValue()||this.getAttribute(\"x\",!0).setValue(0),this.getAttribute(\"y\").hasValue()||this.getAttribute(\"y\",!0).setValue(0);var a=r.viewPort,A=a.width,u=a.height;this.getStyle(\"width\").hasValue()||this.getStyle(\"width\",!0).setValue(\"100%\"),this.getStyle(\"height\").hasValue()||this.getStyle(\"height\",!0).setValue(\"100%\"),this.getStyle(\"color\").hasValue()||this.getStyle(\"color\",!0).setValue(\"black\");var c=this.getAttribute(\"refX\"),l=this.getAttribute(\"refY\"),d=this.getAttribute(\"viewBox\"),f=d.hasValue()?Ke(d.getString()):null,h=!this.root&&\"visible\"!==this.getStyle(\"overflow\").getValue(\"hidden\"),p=0,m=0,g=0,y=0;f&&(p=f[0],m=f[1]),this.root||(A=this.getStyle(\"width\").getPixels(\"x\"),u=this.getStyle(\"height\").getPixels(\"y\"),\"marker\"===this.type&&(g=p,y=m,p=0,m=0)),r.viewPort.setCurrent(A,u),this.node&&this.getStyle(\"transform\",!1,!0).hasValue()&&!this.getStyle(\"transform-origin\",!1,!0).hasValue()&&this.getStyle(\"transform-origin\",!0,!0).setValue(\"50% 50%\"),(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e),e.translate(this.getAttribute(\"x\").getPixels(\"x\"),this.getAttribute(\"y\").getPixels(\"y\")),f&&(A=f[2],u=f[3]),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:r.viewPort.width,desiredWidth:A,height:r.viewPort.height,desiredHeight:u,minX:p,minY:m,refX:c.getValue(),refY:l.getValue(),clip:h,clipX:g,clipY:y}),f&&(r.viewPort.removeCurrent(),r.viewPort.setCurrent(A,u))}},{key:\"clearContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"clearContext\",this).call(this,e),this.document.screen.viewPort.removeCurrent()}},{key:\"resize\",value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.getAttribute(\"width\",!0),s=this.getAttribute(\"height\",!0),i=this.getAttribute(\"viewBox\"),a=this.getAttribute(\"style\"),A=o.getNumber(0),u=s.getNumber(0);if(n)if(\"string\"==typeof n)this.getAttribute(\"preserveAspectRatio\",!0).setValue(n);else{var c=this.getAttribute(\"preserveAspectRatio\");c.hasValue()&&c.setValue(c.getString().replace(\u002F^\\s*(\\S.*\\S)\\s*$\u002F,\"$1\"))}if(o.setValue(e),s.setValue(r),i.hasValue()||i.setValue(L()(t=\"0 0 \".concat(A||e,\" \")).call(t,u||r)),a.hasValue()){var l=this.getStyle(\"width\"),d=this.getStyle(\"height\");l.hasValue()&&l.setValue(\"\".concat(e,\"px\")),d.hasValue()&&d.setValue(\"\".concat(r,\"px\"))}}}]),o}(kt);var qt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"rect\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.getAttribute(\"x\").getPixels(\"x\"),r=this.getAttribute(\"y\").getPixels(\"y\"),n=this.getStyle(\"width\",!1,!0).getPixels(\"x\"),o=this.getStyle(\"height\",!1,!0).getPixels(\"y\"),s=this.getAttribute(\"rx\"),i=this.getAttribute(\"ry\"),a=s.getPixels(\"x\"),A=i.getPixels(\"y\");if(s.hasValue()&&!i.hasValue()&&(A=a),i.hasValue()&&!s.hasValue()&&(a=A),a=Math.min(a,n\u002F2),A=Math.min(A,o\u002F2),e){var u=(Math.sqrt(2)-1)\u002F3*4;e.beginPath(),o>0&&n>0&&(e.moveTo(t+a,r),e.lineTo(t+n-a,r),e.bezierCurveTo(t+n-a+u*a,r,t+n,r+A-u*A,t+n,r+A),e.lineTo(t+n,r+o-A),e.bezierCurveTo(t+n,r+o-A+u*A,t+n-a+u*a,r+o,t+n-a,r+o),e.lineTo(t+a,r+o),e.bezierCurveTo(t+a-u*a,r+o,t,r+o-A+u*A,t,r+o-A),e.lineTo(t,r+A),e.bezierCurveTo(t,r+A-u*A,t+a-u*a,r,t+a,r),e.closePath())}return new Ot(t,r,t+n,r+o)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Gt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"circle\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.getAttribute(\"cx\").getPixels(\"x\"),r=this.getAttribute(\"cy\").getPixels(\"y\"),n=this.getAttribute(\"r\").getPixels();return e&&n>0&&(e.beginPath(),e.arc(t,r,n,0,2*Math.PI,!1),e.closePath()),new Ot(t-n,r-n,t+n,r+n)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Xt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"ellipse\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=(Math.sqrt(2)-1)\u002F3*4,r=this.getAttribute(\"rx\").getPixels(\"x\"),n=this.getAttribute(\"ry\").getPixels(\"y\"),o=this.getAttribute(\"cx\").getPixels(\"x\"),s=this.getAttribute(\"cy\").getPixels(\"y\");return e&&r>0&&n>0&&(e.beginPath(),e.moveTo(o+r,s),e.bezierCurveTo(o+r,s+t*n,o+t*r,s+n,o,s+n),e.bezierCurveTo(o-t*r,s+n,o-r,s+t*n,o-r,s),e.bezierCurveTo(o-r,s-t*n,o-t*r,s-n,o,s-n),e.bezierCurveTo(o+t*r,s-n,o+r,s-t*n,o+r,s),e.closePath()),new Ot(o-r,s-n,o+r,s+n)}},{key:\"getMarkers\",value:function(){return null}}]),o}(zt);var Wt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"line\",e}return(0,U.default)(o,[{key:\"getPoints\",value:function(){return[new mt(this.getAttribute(\"x1\").getPixels(\"x\"),this.getAttribute(\"y1\").getPixels(\"y\")),new mt(this.getAttribute(\"x2\").getPixels(\"x\"),this.getAttribute(\"y2\").getPixels(\"y\"))]}},{key:\"path\",value:function(e){var t=this.getPoints(),r=(0,u.default)(t,2),n=r[0],o=n.x,s=n.y,i=r[1],a=i.x,A=i.y;return e&&(e.beginPath(),e.moveTo(o,s),e.lineTo(a,A)),new Ot(o,s,a,A)}},{key:\"getMarkers\",value:function(){var e=this.getPoints(),t=(0,u.default)(e,2),r=t[0],n=t[1],o=r.angleTo(n);return[[r,o],[n,o]]}}]),o}(zt);var Jt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"polyline\",s.points=[],s.points=mt.parsePath(s.getAttribute(\"points\").getString()),s}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=this.points,r=(0,u.default)(t,1)[0],n=r.x,o=r.y,s=new Ot(n,o);return e&&(e.beginPath(),e.moveTo(n,o)),g()(t).call(t,(function(t){var r=t.x,n=t.y;s.addPoint(r,n),e&&e.lineTo(r,n)})),s}},{key:\"getMarkers\",value:function(){var e=this.points,t=e.length-1,r=[];return g()(e).call(e,(function(n,o){o!==t&&r.push([n,n.angleTo(e[o+1])])})),r.length>0&&r.push([e[e.length-1],r[r.length-1][1]]),r}}]),o}(zt);var Yt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"polygon\",e}return(0,U.default)(o,[{key:\"path\",value:function(e){var t=(0,de.default)((0,ee.default)(o.prototype),\"path\",this).call(this,e),r=(0,u.default)(this.points,1)[0],n=r.x,s=r.y;return e&&(e.lineTo(n,s),e.closePath()),t}}]),o}(Jt);var Zt=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"pattern\",e}return(0,U.default)(o,[{key:\"createPattern\",value:function(e,t,r){var n=this.getStyle(\"width\").getPixels(\"x\",!0),o=this.getStyle(\"height\").getPixels(\"y\",!0),s=new Vt(this.document,null);s.attributes.viewBox=new ht(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),s.attributes.width=new ht(this.document,\"width\",\"\".concat(n,\"px\")),s.attributes.height=new ht(this.document,\"height\",\"\".concat(o,\"px\")),s.attributes.transform=new ht(this.document,\"transform\",this.getAttribute(\"patternTransform\").getValue()),s.children=this.children;var i=this.document.createCanvas(n,o),a=i.getContext(\"2d\"),A=this.getAttribute(\"x\"),u=this.getAttribute(\"y\");A.hasValue()&&u.hasValue()&&a.translate(A.getPixels(\"x\",!0),u.getPixels(\"y\",!0)),r.hasValue()?this.styles[\"fill-opacity\"]=r:ge()(this.styles,\"fill-opacity\");for(var c=-1;c\u003C=1;c++)for(var l=-1;l\u003C=1;l++)a.save(),s.attributes.x=new ht(this.document,\"x\",c*i.width),s.attributes.y=new ht(this.document,\"y\",l*i.height),s.render(a),a.restore();return e.createPattern(i,\"repeat\")}}]),o}(St);var $t=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"marker\",e}return(0,U.default)(o,[{key:\"render\",value:function(e,t,r){if(t){var n=t.x,o=t.y,s=this.getAttribute(\"orient\").getValue(\"auto\"),i=this.getAttribute(\"markerUnits\").getValue(\"strokeWidth\");e.translate(n,o),\"auto\"===s&&e.rotate(r),\"strokeWidth\"===i&&e.scale(e.lineWidth,e.lineWidth),e.save();var a=new Vt(this.document,null);a.type=this.type,a.attributes.viewBox=new ht(this.document,\"viewBox\",this.getAttribute(\"viewBox\").getValue()),a.attributes.refX=new ht(this.document,\"refX\",this.getAttribute(\"refX\").getValue()),a.attributes.refY=new ht(this.document,\"refY\",this.getAttribute(\"refY\").getValue()),a.attributes.width=new ht(this.document,\"width\",this.getAttribute(\"markerWidth\").getValue()),a.attributes.height=new ht(this.document,\"height\",this.getAttribute(\"markerHeight\").getValue()),a.attributes.overflow=new ht(this.document,\"overflow\",this.getAttribute(\"overflow\").getValue()),a.attributes.fill=new ht(this.document,\"fill\",this.getAttribute(\"fill\").getColor(\"black\")),a.attributes.stroke=new ht(this.document,\"stroke\",this.getAttribute(\"stroke\").getValue(\"none\")),a.children=this.children,a.render(e),e.restore(),\"strokeWidth\"===i&&e.scale(1\u002Fe.lineWidth,1\u002Fe.lineWidth),\"auto\"===s&&e.rotate(-r),e.translate(-n,-o)}}}]),o}(St);var er=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"defs\",e}return(0,U.default)(o,[{key:\"render\",value:function(){}}]),o}(St);var tr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"g\",e}return(0,U.default)(o,[{key:\"getBoundingBox\",value:function(e){var t,r=new Ot;return g()(t=this.children).call(t,(function(t){r.addBoundingBox(t.getBoundingBox(e))})),r}}]),o}(kt);var rr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).attributesToInherit=[\"gradientUnits\"],s.stops=[];var i=(0,ye.default)(s),a=i.stops,A=i.children;return g()(A).call(A,(function(e){\"stop\"===e.type&&a.push(e)})),s}return(0,U.default)(o,[{key:\"getGradientUnits\",value:function(){return this.getAttribute(\"gradientUnits\").getString(\"objectBoundingBox\")}},{key:\"createGradient\",value:function(e,t,r){var n=this,o=this;this.getHrefAttribute().hasValue()&&(o=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(o));var s=o.stops,i=this.getGradient(e,t);if(!i)return this.addParentOpacity(r,s[s.length-1].color);if(g()(s).call(s,(function(e){i.addColorStop(e.offset,n.addParentOpacity(r,e.color))})),this.getAttribute(\"gradientTransform\").hasValue()){var a=this.document,A=a.screen,c=A.MAX_VIRTUAL_PIXELS,l=A.viewPort,d=(0,u.default)(l.viewPorts,1)[0],f=new qt(a,null);f.attributes.x=new ht(a,\"x\",-c\u002F3),f.attributes.y=new ht(a,\"y\",-c\u002F3),f.attributes.width=new ht(a,\"width\",c),f.attributes.height=new ht(a,\"height\",c);var h=new tr(a,null);h.attributes.transform=new ht(a,\"transform\",this.getAttribute(\"gradientTransform\").getValue()),h.children=[f];var p=new Vt(a,null);p.attributes.x=new ht(a,\"x\",0),p.attributes.y=new ht(a,\"y\",0),p.attributes.width=new ht(a,\"width\",d.width),p.attributes.height=new ht(a,\"height\",d.height),p.children=[h];var m=a.createCanvas(d.width,d.height),y=m.getContext(\"2d\");return y.fillStyle=i,p.render(y),y.createPattern(m,\"no-repeat\")}return i}},{key:\"inheritStopContainer\",value:function(e){var t,r=this;g()(t=this.attributesToInherit).call(t,(function(t){!r.getAttribute(t).hasValue()&&e.getAttribute(t).hasValue()&&r.getAttribute(t,!0).setValue(e.getAttribute(t).getValue())}))}},{key:\"addParentOpacity\",value:function(e,t){return e.hasValue()?new ht(this.document,\"color\",t).addOpacity(e).getColor():t}}]),o}(St);var nr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"linearGradient\",s.attributesToInherit.push(\"x1\",\"y1\",\"x2\",\"y2\"),s}return(0,U.default)(o,[{key:\"getGradient\",value:function(e,t){var r=\"objectBoundingBox\"===this.getGradientUnits(),n=r?t.getBoundingBox(e):null;if(r&&!n)return null;this.getAttribute(\"x1\").hasValue()||this.getAttribute(\"y1\").hasValue()||this.getAttribute(\"x2\").hasValue()||this.getAttribute(\"y2\").hasValue()||(this.getAttribute(\"x1\",!0).setValue(0),this.getAttribute(\"y1\",!0).setValue(0),this.getAttribute(\"x2\",!0).setValue(1),this.getAttribute(\"y2\",!0).setValue(0));var o=r?n.x+n.width*this.getAttribute(\"x1\").getNumber():this.getAttribute(\"x1\").getPixels(\"x\"),s=r?n.y+n.height*this.getAttribute(\"y1\").getNumber():this.getAttribute(\"y1\").getPixels(\"y\"),i=r?n.x+n.width*this.getAttribute(\"x2\").getNumber():this.getAttribute(\"x2\").getPixels(\"x\"),a=r?n.y+n.height*this.getAttribute(\"y2\").getNumber():this.getAttribute(\"y2\").getPixels(\"y\");return o===i&&s===a?null:e.createLinearGradient(o,s,i,a)}}]),o}(rr);var or=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"radialGradient\",s.attributesToInherit.push(\"cx\",\"cy\",\"r\",\"fx\",\"fy\",\"fr\"),s}return(0,U.default)(o,[{key:\"getGradient\",value:function(e,t){var r=\"objectBoundingBox\"===this.getGradientUnits(),n=t.getBoundingBox(e);if(r&&!n)return null;this.getAttribute(\"cx\").hasValue()||this.getAttribute(\"cx\",!0).setValue(\"50%\"),this.getAttribute(\"cy\").hasValue()||this.getAttribute(\"cy\",!0).setValue(\"50%\"),this.getAttribute(\"r\").hasValue()||this.getAttribute(\"r\",!0).setValue(\"50%\");var o=r?n.x+n.width*this.getAttribute(\"cx\").getNumber():this.getAttribute(\"cx\").getPixels(\"x\"),s=r?n.y+n.height*this.getAttribute(\"cy\").getNumber():this.getAttribute(\"cy\").getPixels(\"y\"),i=o,a=s;this.getAttribute(\"fx\").hasValue()&&(i=r?n.x+n.width*this.getAttribute(\"fx\").getNumber():this.getAttribute(\"fx\").getPixels(\"x\")),this.getAttribute(\"fy\").hasValue()&&(a=r?n.y+n.height*this.getAttribute(\"fy\").getNumber():this.getAttribute(\"fy\").getPixels(\"y\"));var A=r?(n.width+n.height)\u002F2*this.getAttribute(\"r\").getNumber():this.getAttribute(\"r\").getPixels(),u=this.getAttribute(\"fr\").getPixels();return e.createRadialGradient(i,a,u,o,s,A)}}]),o}(rr);var sr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"stop\";var i=Math.max(0,Math.min(1,s.getAttribute(\"offset\").getNumber())),a=s.getStyle(\"stop-opacity\"),A=s.getStyle(\"stop-color\",!0);return\"\"===A.getString()&&A.setValue(\"#000\"),a.hasValue()&&(A=A.addOpacity(a)),s.offset=i,s.color=A.getColor(),s}return o}(St);var ir=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"animate\",s.duration=0,s.initialValue=null,s.initialUnits=\"\",s.removed=!1,s.frozen=!1,e.screen.animations.push((0,ye.default)(s)),s.begin=s.getAttribute(\"begin\").getMilliseconds(),s.maxDuration=s.begin+s.getAttribute(\"dur\").getMilliseconds(),s.from=s.getAttribute(\"from\"),s.to=s.getAttribute(\"to\"),s.values=s.getAttribute(\"values\"),we()(s).hasValue()&&we()(s).setValue(we()(s).getString().split(\";\")),s}return(0,U.default)(o,[{key:\"getProperty\",value:function(){var e=this.getAttribute(\"attributeType\").getString(),t=this.getAttribute(\"attributeName\").getString();return\"CSS\"===e?this.parent.getStyle(t,!0):this.parent.getAttribute(t,!0)}},{key:\"calcValue\",value:function(){var e,t=this.initialUnits,r=this.getProgress(),n=r.progress,o=r.from,s=r.to,i=o.getNumber()+(s.getNumber()-o.getNumber())*n;return\"%\"===t&&(i*=100),L()(e=\"\".concat(i)).call(e,t)}},{key:\"update\",value:function(e){var t=this.parent,r=this.getProperty();if(this.initialValue||(this.initialValue=r.getString(),this.initialUnits=r.getUnits()),this.duration>this.maxDuration){var n=this.getAttribute(\"fill\").getString(\"remove\");if(\"indefinite\"===this.getAttribute(\"repeatCount\").getString()||\"indefinite\"===this.getAttribute(\"repeatDur\").getString())this.duration=0;else if(\"freeze\"!==n||this.frozen){if(\"remove\"===n&&!this.removed)return this.removed=!0,r.setValue(t.animationFrozen?t.animationFrozenValue:this.initialValue),!0}else this.frozen=!0,t.animationFrozen=!0,t.animationFrozenValue=r.getString();return!1}this.duration+=e;var o=!1;if(this.begin\u003Cthis.duration){var s=this.calcValue(),i=this.getAttribute(\"type\");if(i.hasValue()){var a,A=i.getString();s=L()(a=\"\".concat(A,\"(\")).call(a,s,\")\")}r.setValue(s),o=!0}return o}},{key:\"getProgress\",value:function(){var e=this.document,t=we()(this),r={progress:(this.duration-this.begin)\u002F(this.maxDuration-this.begin)};if(t.hasValue()){var n=r.progress*(t.getValue().length-1),o=Math.floor(n),s=Math.ceil(n);r.from=new ht(e,\"from\",i()(t.getValue()[o])),r.to=new ht(e,\"to\",i()(t.getValue()[s])),r.progress=(n-o)\u002F(s-o)}else r.from=this.from,r.to=this.to;return r}}]),o}(St);var ar=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"animateColor\",e}return(0,U.default)(o,[{key:\"calcValue\",value:function(){var e=this.getProgress(),t=e.progress,r=e.from,n=e.to,o=new(W())(r.getColor()),s=new(W())(n.getColor());if(o.ok&&s.ok){var i,a,A=o.r+(s.r-o.r)*t,u=o.g+(s.g-o.g)*t,c=o.b+(s.b-o.b)*t;return L()(i=L()(a=\"rgb(\".concat(Be()(A,10),\", \")).call(a,Be()(u,10),\", \")).call(i,Be()(c,10),\")\")}return this.getAttribute(\"from\").getColor()}}]),o}(ir);var Ar=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"animateTransform\",e}return(0,U.default)(o,[{key:\"calcValue\",value:function(){var e=this.getProgress(),t=e.progress,r=e.from,n=e.to,o=Ke(r.getString()),s=Ke(n.getString());return A()(o).call(o,(function(e,r){return e+(s[r]-e)*t})).join(\" \")}}]),o}(ir);function ur(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}var cr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"font\",s.glyphs={},s.horizAdvX=s.getAttribute(\"horiz-adv-x\").getNumber();var i,a=e.definitions,A=function(e,t){var r;if(void 0===Fe()||null==Ne()(e)){if(xe()(e)||(r=function(e,t){var r;if(e){if(\"string\"==typeof e)return ur(e,t);var n=Se()(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?ae()(e):\"Arguments\"===n||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(n)?ur(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,i=!0,a=!1;return{s:function(){r=_e()(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==r.return||r.return()}finally{if(a)throw s}}}}((0,ye.default)(s).children);try{for(A.s();!(i=A.n()).done;){var u=i.value;switch(u.type){case\"font-face\":s.fontFace=u;var c=u.getStyle(\"font-family\");c.hasValue()&&(a[c.getString()]=(0,ye.default)(s));break;case\"missing-glyph\":s.missingGlyph=u;break;case\"glyph\":var l=u;l.arabicForm?(s.isRTL=!0,s.isArabic=!0,void 0===s.glyphs[l.unicode]&&(s.glyphs[l.unicode]={}),s.glyphs[l.unicode][l.arabicForm]=l):s.glyphs[l.unicode]=l}}}catch(e){A.e(e)}finally{A.f()}return s}return(0,U.default)(o,[{key:\"render\",value:function(){}}]),o}(St);var lr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"font-face\",s.ascent=s.getAttribute(\"ascent\").getNumber(),s.descent=s.getAttribute(\"descent\").getNumber(),s.unitsPerEm=s.getAttribute(\"units-per-em\").getNumber(),s}return o}(St);var dr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"missing-glyph\",e.horizAdvX=0,e}return o}(zt);var fr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"glyph\",s.horizAdvX=s.getAttribute(\"horiz-adv-x\").getNumber(),s.unicode=s.getAttribute(\"unicode\").getString(),s.arabicForm=s.getAttribute(\"arabic-form\").getString(),s}return o}(zt);var hr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"tref\",e}return(0,U.default)(o,[{key:\"getText\",value:function(){var e=this.getHrefAttribute().getDefinition();if(e){var t=e.children[0];if(t)return t.getText()}return\"\"}}]),o}(Rt);var pr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s,i;(0,F.default)(this,o),(i=n.call(this,e,t,r)).type=\"a\";var a=t.childNodes,A=a[0],u=a.length>0&&k()(s=ae()(a)).call(s,(function(e){return 3===e.nodeType}));return i.hasText=u,i.text=u?i.getTextFromNode(A):\"\",i}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}},{key:\"renderChildren\",value:function(e){if(this.hasText){(0,de.default)((0,ee.default)(o.prototype),\"renderChildren\",this).call(this,e);var t=this.document,r=this.x,n=this.y,s=t.screen.mouse,i=new ht(t,\"fontSize\",Pt.parse(t.ctx.font).fontSize);s.isWorking()&&s.checkBoundingBox(this,new Ot(r,n-i.getPixels(\"y\"),r+this.measureText(e),n))}else if(this.children.length>0){var a=new tr(this.document,null);a.children=this.children,a.parent=this,a.render(e)}}},{key:\"onClick\",value:function(){var e=this.document.window;e&&e.open(this.getHrefAttribute().getString())}},{key:\"onMouseMove\",value:function(){this.document.ctx.canvas.style.cursor=\"pointer\"}}]),o}(Rt);function mr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\u003Ct;r++)n[r]=e[r];return n}function gr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function yr(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=gr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=gr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}var vr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"textPath\",s.textWidth=0,s.textHeight=0,s.pathLength=-1,s.glyphInfo=null,s.letterSpacingCache=[],s.measuresCache=new(Te())([[\"\",0]]);var i=s.getHrefAttribute().getDefinition();return s.text=s.getTextFromNode(),s.dataArray=s.parsePathData(i),s}return(0,U.default)(o,[{key:\"getText\",value:function(){return this.text}},{key:\"path\",value:function(e){var t=this.dataArray;e&&e.beginPath(),g()(t).call(t,(function(t){var r=t.type,n=t.points;switch(r){case Kt.LINE_TO:e&&e.lineTo(n[0],n[1]);break;case Kt.MOVE_TO:e&&e.moveTo(n[0],n[1]);break;case Kt.CURVE_TO:e&&e.bezierCurveTo(n[0],n[1],n[2],n[3],n[4],n[5]);break;case Kt.QUAD_TO:e&&e.quadraticCurveTo(n[0],n[1],n[2],n[3]);break;case Kt.ARC:var o=(0,u.default)(n,8),s=o[0],i=o[1],a=o[2],A=o[3],c=o[4],l=o[5],d=o[6],f=o[7],h=a>A?a:A,p=a>A?1:a\u002FA,m=a>A?A\u002Fa:1;e&&(e.translate(s,i),e.rotate(d),e.scale(p,m),e.arc(0,0,h,c,c+l,Boolean(1-f)),e.scale(1\u002Fp,1\u002Fm),e.rotate(-d),e.translate(-s,-i));break;case Kt.CLOSE_PATH:e&&e.closePath()}}))}},{key:\"renderChildren\",value:function(e){this.setTextData(e),e.save();var t=this.parent.getStyle(\"text-decoration\").getString(),r=this.getFontSize(),n=this.glyphInfo,o=e.fillStyle;\"underline\"===t&&e.beginPath(),g()(n).call(n,(function(n,o){var s=n.p0,i=n.p1,a=n.rotation,A=n.text;e.save(),e.translate(s.x,s.y),e.rotate(a),e.fillStyle&&e.fillText(A,0,0),e.strokeStyle&&e.strokeText(A,0,0),e.restore(),\"underline\"===t&&(0===o&&e.moveTo(s.x,s.y+r\u002F8),e.lineTo(i.x,i.y+r\u002F5))})),\"underline\"===t&&(e.lineWidth=r\u002F20,e.strokeStyle=o,e.stroke(),e.closePath()),e.restore()}},{key:\"getLetterSpacingAt\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.letterSpacingCache[e]||0}},{key:\"findSegmentToFitChar\",value:function(e,t,r,n,o,s,i,a,A){var u=s,c=this.measureText(e,a);\" \"===a&&\"justify\"===t&&r\u003Cn&&(c+=(n-r)\u002Fo),A>-1&&(u+=this.getLetterSpacingAt(A));var l=this.textHeight\u002F20,d=this.getEquidistantPointOnPath(u,l,0),f=this.getEquidistantPointOnPath(u+c,l,0),h={p0:d,p1:f},p=d&&f?Math.atan2(f.y-d.y,f.x-d.x):0;if(i){var m=Math.cos(Math.PI\u002F2+p)*i,g=Math.cos(-p)*i;h.p0=yr(yr({},d),{},{x:d.x+m,y:d.y+g}),h.p1=yr(yr({},f),{},{x:f.x+m,y:f.y+g})}return{offset:u+=c,segment:h,rotation:p}}},{key:\"measureText\",value:function(e,t){var r=this.measuresCache,n=t||this.getText();if(r.has(n))return r.get(n);var o=this.measureTargetText(e,n);return r.set(n,o),o}},{key:\"setTextData\",value:function(e){var t,r=this;if(!this.glyphInfo){var n=this.getText(),o=n.split(\"\"),s=n.split(\" \").length-1,i=A()(t=this.parent.getAttribute(\"dx\").split()).call(t,(function(e){return e.getPixels(\"x\")})),a=this.parent.getAttribute(\"dy\").getPixels(\"y\"),u=this.parent.getStyle(\"text-anchor\").getString(\"start\"),c=this.getStyle(\"letter-spacing\"),l=this.parent.getStyle(\"letter-spacing\"),d=0;c.hasValue()&&\"inherit\"!==c.getValue()?c.hasValue()&&\"initial\"!==c.getValue()&&\"unset\"!==c.getValue()&&(d=c.getPixels()):d=l.getPixels();var f=[],h=n.length;this.letterSpacingCache=f;for(var p=0;p\u003Ch;p++)f.push(void 0!==i[p]?i[p]:d);var m=H()(f).call(f,(function(e,t,r){return 0===r?0:e+t||0}),0),y=this.measureText(e),v=Math.max(y+m,0);this.textWidth=y,this.textHeight=this.getFontSize(),this.glyphInfo=[];var w=this.getPathLength(),b=this.getStyle(\"startOffset\").getNumber(0)*w,B=0;\"middle\"!==u&&\"center\"!==u||(B=-v\u002F2),\"end\"!==u&&\"right\"!==u||(B=-v),B+=b,g()(o).call(o,(function(t,n){var i=r.findSegmentToFitChar(e,u,v,w,s,B,a,t,n),A=i.offset,c=i.segment,l=i.rotation;B=A,c.p0&&c.p1&&r.glyphInfo.push({text:o[n],p0:c.p0,p1:c.p1,rotation:l})}))}}},{key:\"parsePathData\",value:function(e){if(this.pathLength=-1,!e)return[];var t=[],r=e.pathParser;for(r.reset();!r.isEnd();){var n=r.current,o=n?n.x:0,s=n?n.y:0,i=r.next(),a=i.type,A=[];switch(i.type){case Kt.MOVE_TO:this.pathM(r,A);break;case Kt.LINE_TO:a=this.pathL(r,A);break;case Kt.HORIZ_LINE_TO:a=this.pathH(r,A);break;case Kt.VERT_LINE_TO:a=this.pathV(r,A);break;case Kt.CURVE_TO:this.pathC(r,A);break;case Kt.SMOOTH_CURVE_TO:a=this.pathS(r,A);break;case Kt.QUAD_TO:this.pathQ(r,A);break;case Kt.SMOOTH_QUAD_TO:a=this.pathT(r,A);break;case Kt.ARC:A=this.pathA(r);break;case Kt.CLOSE_PATH:zt.pathZ(r)}i.type!==Kt.CLOSE_PATH?t.push({type:a,points:A,start:{x:o,y:s},pathLength:this.calcLength(o,s,a,A)}):t.push({type:Kt.CLOSE_PATH,points:[],pathLength:0})}return t}},{key:\"pathM\",value:function(e,t){var r=zt.pathM(e).point,n=r.x,o=r.y;t.push(n,o)}},{key:\"pathL\",value:function(e,t){var r=zt.pathL(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathH\",value:function(e,t){var r=zt.pathH(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathV\",value:function(e,t){var r=zt.pathV(e).point,n=r.x,o=r.y;return t.push(n,o),Kt.LINE_TO}},{key:\"pathC\",value:function(e,t){var r=zt.pathC(e),n=r.point,o=r.controlPoint,s=r.currentPoint;t.push(n.x,n.y,o.x,o.y,s.x,s.y)}},{key:\"pathS\",value:function(e,t){var r=zt.pathS(e),n=r.point,o=r.controlPoint,s=r.currentPoint;return t.push(n.x,n.y,o.x,o.y,s.x,s.y),Kt.CURVE_TO}},{key:\"pathQ\",value:function(e,t){var r=zt.pathQ(e),n=r.controlPoint,o=r.currentPoint;t.push(n.x,n.y,o.x,o.y)}},{key:\"pathT\",value:function(e,t){var r=zt.pathT(e),n=r.controlPoint,o=r.currentPoint;return t.push(n.x,n.y,o.x,o.y),Kt.QUAD_TO}},{key:\"pathA\",value:function(e){var t=zt.pathA(e),r=t.rX,n=t.rY,o=t.sweepFlag,s=t.xAxisRotation,i=t.centp,a=t.a1,A=t.ad;return 0===o&&A>0&&(A-=2*Math.PI),1===o&&A\u003C0&&(A+=2*Math.PI),[i.x,i.y,r,n,a,A,s,o]}},{key:\"calcLength\",value:function(e,t,r,n){var o=0,s=null,i=null,a=0;switch(r){case Kt.LINE_TO:return this.getLineLength(e,t,n[0],n[1]);case Kt.CURVE_TO:for(o=0,s=this.getPointOnCubicBezier(0,e,t,n[0],n[1],n[2],n[3],n[4],n[5]),a=.01;a\u003C=1;a+=.01)i=this.getPointOnCubicBezier(a,e,t,n[0],n[1],n[2],n[3],n[4],n[5]),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return o;case Kt.QUAD_TO:for(o=0,s=this.getPointOnQuadraticBezier(0,e,t,n[0],n[1],n[2],n[3]),a=.01;a\u003C=1;a+=.01)i=this.getPointOnQuadraticBezier(a,e,t,n[0],n[1],n[2],n[3]),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return o;case Kt.ARC:o=0;var A=n[4],u=n[5],c=n[4]+u,l=Math.PI\u002F180;if(Math.abs(A-c)\u003Cl&&(l=Math.abs(A-c)),s=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],A,0),u\u003C0)for(a=A-l;a>c;a-=l)i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],a,0),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;else for(a=A+l;a\u003Cc;a+=l)i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],a,0),o+=this.getLineLength(s.x,s.y,i.x,i.y),s=i;return i=this.getPointOnEllipticalArc(n[0],n[1],n[2],n[3],c,0),o+this.getLineLength(s.x,s.y,i.x,i.y)}return 0}},{key:\"getPointOnLine\",value:function(e,t,r,n,o){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:t,i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:r,a=(o-r)\u002F(n-t+nt),A=Math.sqrt(e*e\u002F(1+a*a));n\u003Ct&&(A*=-1);var u=a*A,c=null;if(n===t)c={x:s,y:i+u};else if((i-r)\u002F(s-t+nt)===a)c={x:s+A,y:i+u};else{var l=0,d=0,f=this.getLineLength(t,r,n,o);if(f\u003Cnt)return null;var h=(s-t)*(n-t)+(i-r)*(o-r);l=t+(h\u002F=f*f)*(n-t),d=r+h*(o-r);var p=this.getLineLength(s,i,l,d),m=Math.sqrt(e*e-p*p);A=Math.sqrt(m*m\u002F(1+a*a)),n\u003Ct&&(A*=-1),c={x:l+A,y:d+(u=a*A)}}return c}},{key:\"getPointOnPath\",value:function(e){var t=this.getPathLength(),r=0,n=null;if(e\u003C-5e-5||e-5e-5>t)return null;var o,s=function(e,t){var r;if(void 0===Fe()||null==Ne()(e)){if(xe()(e)||(r=function(e,t){var r;if(e){if(\"string\"==typeof e)return mr(e,t);var n=Se()(r=Object.prototype.toString.call(e)).call(r,8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?ae()(e):\"Arguments\"===n||\u002F^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$\u002F.test(n)?mr(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var s,i=!0,a=!1;return{s:function(){r=_e()(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){a=!0,s=e},f:function(){try{i||null==r.return||r.return()}finally{if(a)throw s}}}}(this.dataArray);try{for(s.s();!(o=s.n()).done;){var i=o.value;if(!i||!(i.pathLength\u003C5e-5||r+i.pathLength+5e-5\u003Ce)){var a=e-r,A=0;switch(i.type){case Kt.LINE_TO:n=this.getPointOnLine(a,i.start.x,i.start.y,i.points[0],i.points[1],i.start.x,i.start.y);break;case Kt.ARC:var u=i.points[4],c=i.points[5],l=i.points[4]+c;if(A=u+a\u002Fi.pathLength*c,c\u003C0&&A\u003Cl||c>=0&&A>l)break;n=this.getPointOnEllipticalArc(i.points[0],i.points[1],i.points[2],i.points[3],A,i.points[6]);break;case Kt.CURVE_TO:(A=a\u002Fi.pathLength)>1&&(A=1),n=this.getPointOnCubicBezier(A,i.start.x,i.start.y,i.points[0],i.points[1],i.points[2],i.points[3],i.points[4],i.points[5]);break;case Kt.QUAD_TO:(A=a\u002Fi.pathLength)>1&&(A=1),n=this.getPointOnQuadraticBezier(A,i.start.x,i.start.y,i.points[0],i.points[1],i.points[2],i.points[3])}if(n)return n;break}r+=i.pathLength}}catch(e){s.e(e)}finally{s.f()}return null}},{key:\"getLineLength\",value:function(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))}},{key:\"getPathLength\",value:function(){var e;return-1===this.pathLength&&(this.pathLength=H()(e=this.dataArray).call(e,(function(e,t){return t.pathLength>0?e+t.pathLength:e}),0)),this.pathLength}},{key:\"getPointOnCubicBezier\",value:function(e,t,r,n,o,s,i,a,A){return{x:a*at(e)+s*At(e)+n*ut(e)+t*ct(e),y:A*at(e)+i*At(e)+o*ut(e)+r*ct(e)}}},{key:\"getPointOnQuadraticBezier\",value:function(e,t,r,n,o,s,i){return{x:s*lt(e)+n*dt(e)+t*ft(e),y:i*lt(e)+o*dt(e)+r*ft(e)}}},{key:\"getPointOnEllipticalArc\",value:function(e,t,r,n,o,s){var i=Math.cos(s),a=Math.sin(s),A=r*Math.cos(o),u=n*Math.sin(o);return{x:e+(A*i-u*a),y:t+(A*a+u*i)}}},{key:\"buildEquidistantCache\",value:function(e,t){var r=this.getPathLength(),n=t||.25,o=e||r\u002F100;if(!this.equidistantCache||this.equidistantCache.step!==o||this.equidistantCache.precision!==n){this.equidistantCache={step:o,precision:n,points:[]};for(var s=0,i=0;i\u003C=r;i+=n){var a=this.getPointOnPath(i),A=this.getPointOnPath(i+n);a&&A&&(s+=this.getLineLength(a.x,a.y,A.x,A.y))>=o&&(this.equidistantCache.points.push({x:a.x,y:a.y,distance:i}),s-=o)}}}},{key:\"getEquidistantPointOnPath\",value:function(e,t,r){if(this.buildEquidistantCache(t,r),e\u003C0||e-this.getPathLength()>5e-5)return null;var n=Math.round(e\u002Fthis.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[n]||null}}]),o}(Rt);var wr=function(e){(0,Z.default)(i,e);var t,r,n,o,s=(n=i,o=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=(0,ee.default)(n);if(o){var r=(0,ee.default)(this).constructor;e=Y()(t,arguments,r)}else e=t.apply(this,arguments);return(0,$.default)(this,e)});function i(e,t,r){var n;(0,F.default)(this,i),(n=s.call(this,e,t,r)).type=\"image\",n.loaded=!1;var o=n.getHrefAttribute().getString();if(!o)return(0,$.default)(n);var a=\u002F\\.svg$\u002F.test(o);return e.images.push((0,ye.default)(n)),a?n.loadSvg(o):n.loadImage(o),n.isSvg=a,n}return(0,U.default)(i,[{key:\"loadImage\",value:(r=(0,N.default)(E().mark((function e(t){var r;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.document.createImage(t);case 3:r=e.sent,this.image=r,e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error('Error while loading image \"'.concat(t,'\":'),e.t0);case 10:this.loaded=!0;case 11:case\"end\":return e.stop()}}),e,this,[[0,7]])}))),function(e){return r.apply(this,arguments)})},{key:\"loadSvg\",value:(t=(0,N.default)(E().mark((function e(t){var r,n;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.document.fetch(t);case 3:return r=e.sent,e.next=6,r.text();case 6:n=e.sent,this.image=n,e.next=13;break;case 10:e.prev=10,e.t0=e.catch(0),console.error('Error while loading image \"'.concat(t,'\":'),e.t0);case 13:this.loaded=!0;case 14:case\"end\":return e.stop()}}),e,this,[[0,10]])}))),function(e){return t.apply(this,arguments)})},{key:\"renderChildren\",value:function(e){var t=this.document,r=this.image,n=this.loaded,o=this.getAttribute(\"x\").getPixels(\"x\"),s=this.getAttribute(\"y\").getPixels(\"y\"),i=this.getStyle(\"width\").getPixels(\"x\"),a=this.getStyle(\"height\").getPixels(\"y\");if(n&&r&&i&&a){if(e.save(),this.isSvg)t.canvg.forkString(e,this.image,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:o,offsetY:s,scaleWidth:i,scaleHeight:a}).render();else{var A=this.image;e.translate(o,s),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(\"preserveAspectRatio\").getString(),width:i,desiredWidth:A.width,height:a,desiredHeight:A.height}),this.loaded&&(void 0===A.complete||A.complete)&&e.drawImage(A,0,0)}e.restore()}}},{key:\"getBoundingBox\",value:function(){var e=this.getAttribute(\"x\").getPixels(\"x\"),t=this.getAttribute(\"y\").getPixels(\"y\"),r=this.getStyle(\"width\").getPixels(\"x\"),n=this.getStyle(\"height\").getPixels(\"y\");return new Ot(e,t,e+r,t+n)}}]),i}(kt);var br=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"symbol\",e}return(0,U.default)(o,[{key:\"render\",value:function(e){}}]),o}(kt),Br=function(){function e(t){(0,F.default)(this,e),this.document=t,this.loaded=!1,t.fonts.push(this)}var t;return(0,U.default)(e,[{key:\"load\",value:(t=(0,N.default)(E().mark((function e(t,r){var n,o,s,i;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,o=this.document,e.next=4,o.canvg.parser.load(r);case 4:s=e.sent,i=s.getElementsByTagName(\"font\"),g()(n=ae()(i)).call(n,(function(e){var r=o.createElement(e);o.definitions[t]=r})),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(0),console.error('Error while loading font \"'.concat(r,'\":'),e.t0);case 12:this.loaded=!0;case 13:case\"end\":return e.stop()}}),e,this,[[0,9]])}))),function(e,r){return t.apply(this,arguments)})}]),e}();var jr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s,i;(0,F.default)(this,o),(i=n.call(this,e,t,r)).type=\"style\";var a=Re(A()(s=ae()(t.childNodes)).call(s,(function(e){return e.data})).join(\"\").replace(\u002F(\\\u002F\\*([^*]|[\\r\\n]|(\\*+([^*\\\u002F]|[\\r\\n])))*\\*+\\\u002F)|(^[\\s]*\\\u002F\\\u002F.*)\u002Fgm,\"\").replace(\u002F@import.*;\u002Fg,\"\")).split(\"}\");return g()(a).call(a,(function(t){var r=G()(t).call(t);if(r){var n=r.split(\"{\"),o=n[0].split(\",\"),s=n[1].split(\";\");g()(o).call(o,(function(t){var r=G()(t).call(t);if(r){var n=e.styles[r]||{};if(g()(s).call(s,(function(t){var r,o,s=le()(t).call(t,\":\"),i=G()(r=t.substr(0,s)).call(r),a=G()(o=t.substr(s+1,t.length-s)).call(o);i&&a&&(n[i]=new ht(e,i,a))})),e.styles[r]=n,e.stylesSpecificity[r]=rt(r),\"@font-face\"===r){var o=n[\"font-family\"].getString().replace(\u002F\"|'\u002Fg,\"\"),i=n.src.getString().split(\",\");g()(i).call(i,(function(t){if(le()(t).call(t,'format(\"svg\")')>0){var r=qe(t);r&&new Br(e).load(o,r)}}))}}}))}})),i}return o}(St);jr.parseExternalUrl=qe;var _r=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"use\",e}return(0,U.default)(o,[{key:\"setContext\",value:function(e){(0,de.default)((0,ee.default)(o.prototype),\"setContext\",this).call(this,e);var t=this.getAttribute(\"x\"),r=this.getAttribute(\"y\");t.hasValue()&&e.translate(t.getPixels(\"x\"),0),r.hasValue()&&e.translate(0,r.getPixels(\"y\"))}},{key:\"path\",value:function(e){var t=this.element;t&&t.path(e)}},{key:\"renderChildren\",value:function(e){var t=this.document,r=this.element;if(r){var n=r;if(\"symbol\"===r.type&&((n=new Vt(t,null)).attributes.viewBox=new ht(t,\"viewBox\",r.getAttribute(\"viewBox\").getString()),n.attributes.preserveAspectRatio=new ht(t,\"preserveAspectRatio\",r.getAttribute(\"preserveAspectRatio\").getString()),n.attributes.overflow=new ht(t,\"overflow\",r.getAttribute(\"overflow\").getString()),n.children=r.children,r.styles.opacity=new ht(t,\"opacity\",this.calculateOpacity())),\"svg\"===n.type){var o=this.getStyle(\"width\",!1,!0),s=this.getStyle(\"height\",!1,!0);o.hasValue()&&(n.attributes.width=new ht(t,\"width\",o.getString())),s.hasValue()&&(n.attributes.height=new ht(t,\"height\",s.getString()))}var i=n.parent;n.parent=this,n.render(e),n.parent=i}}},{key:\"getBoundingBox\",value:function(e){var t=this.element;return t?t.getBoundingBox(e):null}},{key:\"elementTransform\",value:function(){var e=this.document,t=this.element;return Ut.fromElement(e,t)}},{key:\"element\",get:function(){return this._element||(this._element=this.getHrefAttribute().getDefinition()),this._element}}]),o}(kt);function Cr(e,t,r,n,o,s){return e[r*n*4+4*t+s]}function xr(e,t,r,n,o,s,i){e[r*n*4+4*t+s]=i}function Er(e,t,r){return e[t]*r}function Nr(e,t,r,n){return t+Math.cos(e)*r+Math.sin(e)*n}var Qr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feColorMatrix\";var i=Ke(s.getAttribute(\"values\").getString());switch(s.getAttribute(\"type\").getString(\"matrix\")){case\"saturate\":var a=i[0];i=[.213+.787*a,.715-.715*a,.072-.072*a,0,0,.213-.213*a,.715+.285*a,.072-.072*a,0,0,.213-.213*a,.715-.715*a,.072+.928*a,0,0,0,0,0,1,0,0,0,0,0,1];break;case\"hueRotate\":var A=i[0]*Math.PI\u002F180;i=[Nr(A,.213,.787,-.213),Nr(A,.715,-.715,-.715),Nr(A,.072,-.072,.928),0,0,Nr(A,.213,-.213,.143),Nr(A,.715,.285,.14),Nr(A,.072,-.072,-.283),0,0,Nr(A,.213,-.213,-.787),Nr(A,.715,-.715,.715),Nr(A,.072,.928,.072),0,0,0,0,0,1,0,0,0,0,0,1];break;case\"luminanceToAlpha\":i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.2125,.7154,.0721,0,0,0,0,0,0,1]}return s.matrix=i,s.includeOpacity=s.getAttribute(\"includeOpacity\").hasValue(),s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){for(var s=this.includeOpacity,i=this.matrix,a=e.getImageData(0,0,n,o),A=0;A\u003Co;A++)for(var u=0;u\u003Cn;u++){var c=Cr(a.data,u,A,n,0,0),l=Cr(a.data,u,A,n,0,1),d=Cr(a.data,u,A,n,0,2),f=Cr(a.data,u,A,n,0,3),h=Er(i,0,c)+Er(i,1,l)+Er(i,2,d)+Er(i,3,f)+Er(i,4,1),p=Er(i,5,c)+Er(i,6,l)+Er(i,7,d)+Er(i,8,f)+Er(i,9,1),m=Er(i,10,c)+Er(i,11,l)+Er(i,12,d)+Er(i,13,f)+Er(i,14,1),g=Er(i,15,c)+Er(i,16,l)+Er(i,17,d)+Er(i,18,f)+Er(i,19,1);s&&(h=p=m=0,g*=f\u002F255),xr(a.data,u,A,n,0,0,h),xr(a.data,u,A,n,0,1,p),xr(a.data,u,A,n,0,2,m),xr(a.data,u,A,n,0,3,g)}e.clearRect(0,0,n,o),e.putImageData(a,0,0)}}]),o}(St);var Fr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"mask\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t){var r=this.document,n=this.getAttribute(\"x\").getPixels(\"x\"),s=this.getAttribute(\"y\").getPixels(\"y\"),i=this.getStyle(\"width\").getPixels(\"x\"),a=this.getStyle(\"height\").getPixels(\"y\");if(!i&&!a){var A,u=new Ot;g()(A=this.children).call(A,(function(t){u.addBoundingBox(t.getBoundingBox(e))})),n=Math.floor(u.x1),s=Math.floor(u.y1),i=Math.floor(u.width),a=Math.floor(u.height)}var c=this.removeStyles(t,o.ignoreStyles),l=r.createCanvas(n+i,s+a),d=l.getContext(\"2d\");r.screen.setDefaults(d),this.renderChildren(d),new Qr(r,{nodeType:1,childNodes:[],attributes:[{nodeName:\"type\",value:\"luminanceToAlpha\"},{nodeName:\"includeOpacity\",value:\"true\"}]}).apply(d,0,0,n+i,s+a);var f=r.createCanvas(n+i,s+a),h=f.getContext(\"2d\");r.screen.setDefaults(h),t.render(h),h.globalCompositeOperation=\"destination-in\",h.fillStyle=d.createPattern(l,\"no-repeat\"),h.fillRect(0,0,n+i,s+a),e.fillStyle=h.createPattern(f,\"no-repeat\"),e.fillRect(0,0,n+i,s+a),this.restoreStyles(t,c)}},{key:\"render\",value:function(e){}}]),o}(St);Fr.ignoreStyles=[\"mask\",\"transform\",\"clip-path\"];var Ur=function(){},Sr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"clipPath\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e){var t,r=this.document,n=Oe()(e),o=e.beginPath,s=e.closePath;n&&(n.beginPath=Ur,n.closePath=Ur),Ie()(o,e,[]),g()(t=this.children).call(t,(function(t){if(void 0!==t.path){var o=void 0!==t.elementTransform?t.elementTransform():null;o||(o=Ut.fromElement(r,t)),o&&o.apply(e),t.path(e),n&&(n.closePath=s),o&&o.unapply(e)}})),Ie()(s,e,[]),e.clip(),n&&(n.beginPath=o,n.closePath=s)}},{key:\"render\",value:function(e){}}]),o}(St);var Lr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"filter\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t){var r=this.document,n=this.children,s=t.getBoundingBox(e);if(s){var i=0,a=0;g()(n).call(n,(function(e){var t=e.extraFilterDistance||0;i=Math.max(i,t),a=Math.max(a,t)}));var A=Math.floor(s.width),u=Math.floor(s.height),c=A+2*i,l=u+2*a;if(!(c\u003C1||l\u003C1)){var d=Math.floor(s.x),f=Math.floor(s.y),h=this.removeStyles(t,o.ignoreStyles),p=r.createCanvas(c,l),m=p.getContext(\"2d\");r.screen.setDefaults(m),m.translate(-d+i,-f+a),t.render(m),g()(n).call(n,(function(e){\"function\"==typeof e.apply&&e.apply(m,0,0,c,l)})),e.drawImage(p,0,0,c,l,d-i,f-a,c,l),this.restoreStyles(t,h)}}}},{key:\"render\",value:function(e){}}]),o}(St);Lr.ignoreStyles=[\"filter\",\"transform\",\"clip-path\"];var Tr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feDropShadow\",s.addStylesFromStyleDefinition(),s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Hr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"feMorphology\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Ir=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"feComposite\",e}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){}}]),o}(St);var Pr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(e,t,r){var s;return(0,F.default)(this,o),(s=n.call(this,e,t,r)).type=\"feGaussianBlur\",s.blurRadius=Math.floor(s.getAttribute(\"stdDeviation\").getNumber()),s.extraFilterDistance=s.blurRadius,s}return(0,U.default)(o,[{key:\"apply\",value:function(e,t,r,n,o){var s=this.document,i=this.blurRadius,a=s.window?s.window.document.body:null,A=e.canvas;A.id=s.getUniqueId(),a&&(A.style.display=\"none\",a.appendChild(A)),(0,ke.canvasRGBA)(A,t,r,n,o,i),a&&a.removeChild(A)}}]),o}(St);var Or=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"title\",e}return o}(St);var kr=function(e){(0,Z.default)(o,e);var t,r,n=(t=o,r=function(){if(\"undefined\"==typeof Reflect||!Y())return!1;if(Y().sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Y()(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,n=(0,ee.default)(t);if(r){var o=(0,ee.default)(this).constructor;e=Y()(n,arguments,o)}else e=n.apply(this,arguments);return(0,$.default)(this,e)});function o(){var e;return(0,F.default)(this,o),(e=n.apply(this,arguments)).type=\"desc\",e}return o}(St),Rr={svg:Vt,rect:qt,circle:Gt,ellipse:Xt,line:Wt,polyline:Jt,polygon:Yt,path:zt,pattern:Zt,marker:$t,defs:er,linearGradient:nr,radialGradient:or,stop:sr,animate:ir,animateColor:ar,animateTransform:Ar,font:cr,\"font-face\":lr,\"missing-glyph\":dr,glyph:fr,text:Rt,tspan:Mt,tref:hr,a:pr,textPath:vr,image:wr,g:tr,symbol:br,style:jr,use:_r,mask:Fr,clipPath:Sr,filter:Lr,feDropShadow:Tr,feMorphology:Hr,feComposite:Ir,feColorMatrix:Qr,feGaussianBlur:Pr,title:Or,desc:kr};function Mr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function Dr(){return(Dr=(0,N.default)(E().mark((function e(t){var r,n,o=arguments;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=o.length>1&&void 0!==o[1]&&o[1],n=document.createElement(\"img\"),r&&(n.crossOrigin=\"Anonymous\"),e.abrupt(\"return\",new(M())((function(e,r){n.onload=function(){e(n)},n.onerror=function(){r()},n.src=t})));case 4:case\"end\":return e.stop()}}),e)})))).apply(this,arguments)}var Kr=function(){function e(t){var r,n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=o.rootEmSize,i=void 0===s?12:s,a=o.emSize,A=void 0===a?12:a,u=o.createCanvas,c=void 0===u?e.createCanvas:u,l=o.createImage,d=void 0===l?e.createImage:l,f=o.anonymousCrossOrigin;(0,F.default)(this,e),this.canvg=t,this.definitions={},this.styles={},this.stylesSpecificity={},this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=t.screen,this.rootEmSize=i,this.emSize=A,this.createCanvas=c,this.createImage=this.bindCreateImage(d,f),this.screen.wait(K()(r=this.isImagesLoaded).call(r,this)),this.screen.wait(K()(n=this.isFontsLoaded).call(n,this))}return(0,U.default)(e,[{key:\"bindCreateImage\",value:function(e,t){return\"boolean\"==typeof t?function(r,n){return e(r,\"boolean\"==typeof n?n:t)}:e}},{key:\"popEmSize\",value:function(){this.emSizeStack.pop()}},{key:\"getUniqueId\",value:function(){return\"canvg\".concat(++this.uniqueId)}},{key:\"isImagesLoaded\",value:function(){var e;return k()(e=this.images).call(e,(function(e){return e.loaded}))}},{key:\"isFontsLoaded\",value:function(){var e;return k()(e=this.fonts).call(e,(function(e){return e.loaded}))}},{key:\"createDocumentElement\",value:function(e){var t=this.createElement(e.documentElement);return t.root=!0,t.addStylesFromStyleDefinition(),this.documentElement=t,t}},{key:\"createElement\",value:function(t){var r=t.nodeName.replace(\u002F^[^:]+:\u002F,\"\"),n=e.elementTypes[r];return void 0!==n?new n(this,t):new Lt(this,t)}},{key:\"createTextNode\",value:function(e){return new Dt(this,e)}},{key:\"setViewBox\",value:function(e){this.screen.setViewBox(function(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=Mr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=Mr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}({document:this},e))}},{key:\"window\",get:function(){return this.screen.window}},{key:\"fetch\",get:function(){return this.screen.fetch}},{key:\"ctx\",get:function(){return this.screen.ctx}},{key:\"emSize\",get:function(){var e=this.emSizeStack;return e[e.length-1]},set:function(e){this.emSizeStack.push(e)}}]),e}();function zr(e,t){var r=C()(e);if(j()){var n=j()(e);t&&(n=b()(n).call(n,(function(t){return v()(e,t).enumerable}))),r.push.apply(r,n)}return r}function Vr(e){for(var t=1;t\u003Carguments.length;t++){var r,n=null!=arguments[t]?arguments[t]:{};if(t%2)g()(r=zr(Object(n),!0)).call(r,(function(t){(0,Q.default)(e,t,n[t])}));else if(p())f()(e,p()(n));else{var o;g()(o=zr(Object(n))).call(o,(function(t){l()(e,t,v()(n,t))}))}}return e}Kr.createCanvas=function(e,t){var r=document.createElement(\"canvas\");return r.width=e,r.height=t,r},Kr.createImage=function(e){return Dr.apply(this,arguments)},Kr.elementTypes=Rr;var qr=function(){function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,F.default)(this,e),this.parser=new jt(n),this.screen=new wt(t,n),this.options=n;var o=new Kr(this,n),s=o.createDocumentElement(r);this.document=o,this.documentElement=s}var t,r;return(0,U.default)(e,[{key:\"fork\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.from(t,r,Vr(Vr({},this.options),n))}},{key:\"forkString\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.fromString(t,r,Vr(Vr({},this.options),n))}},{key:\"ready\",value:function(){return this.screen.ready()}},{key:\"isReady\",value:function(){return this.screen.isReady()}},{key:\"render\",value:(r=(0,N.default)(E().mark((function e(){var t,r=arguments;return E().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.length>0&&void 0!==r[0]?r[0]:{},this.start(Vr({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0},t)),e.next=4,this.ready();case 4:this.stop();case 5:case\"end\":return e.stop()}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:\"start\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.documentElement,r=this.screen,n=this.options;r.start(t,Vr(Vr({enableRedraw:!0},n),e))}},{key:\"stop\",value:function(){this.screen.stop()}},{key:\"resize\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.documentElement.resize(e,t,r)}}],[{key:\"from\",value:(t=(0,N.default)(E().mark((function t(r,n){var o,s,i,a=arguments;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:{},s=new jt(o),t.next=4,s.parse(n);case 4:return i=t.sent,t.abrupt(\"return\",new e(r,i,o));case 6:case\"end\":return t.stop()}}),t)}))),function(e,r){return t.apply(this,arguments)})},{key:\"fromString\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=new jt(n),s=o.parseFromString(r);return new e(t,s,n)}}]),e}(),Gr=Object.freeze({__proto__:null,offscreen:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.DOMParser,r={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,createCanvas:function(e,t){return new OffscreenCanvas(e,t)},createImage:function(e){return(0,N.default)(E().mark((function t(){var r,n,o;return E().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,fetch(e);case 2:return r=t.sent,t.next=5,r.blob();case 5:return n=t.sent,t.next=8,createImageBitmap(n);case 8:return o=t.sent,t.abrupt(\"return\",o);case 10:case\"end\":return t.stop()}}),t)})))()}};return\"undefined\"==typeof DOMParser&&void 0!==t||ge()(r,\"DOMParser\"),r},node:function(e){var t=e.DOMParser,r=e.canvas;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,fetch:e.fetch,createCanvas:r.createCanvas,createImage:r.loadImage}}});t.default=qr},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Array.from},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Array.isArray},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").concat},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").every},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").fill},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").filter},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").forEach},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").includes},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").indexOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").map},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").reduce},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").reverse},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").slice},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").some},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Array\").values},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Date.now},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"Function\").bind},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js\"),o=Function.prototype;e.exports=function(e){var t=e.bind;return e===o||e instanceof Function&&t===o.bind?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js\"),o=Array.prototype;e.exports=function(e){var t=e.concat;return e===o||e instanceof Array&&t===o.concat?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js\"),o=Array.prototype;e.exports=function(e){var t=e.every;return e===o||e instanceof Array&&t===o.every?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js\"),o=Array.prototype;e.exports=function(e){var t=e.fill;return e===o||e instanceof Array&&t===o.fill?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js\"),o=Array.prototype;e.exports=function(e){var t=e.filter;return e===o||e instanceof Array&&t===o.filter?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js\"),s=Array.prototype,i=String.prototype;e.exports=function(e){var t=e.includes;return e===s||e instanceof Array&&t===s.includes?n:\"string\"==typeof e||e===i||e instanceof String&&t===i.includes?o:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js\"),o=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===o||e instanceof Array&&t===o.indexOf?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js\"),o=Array.prototype;e.exports=function(e){var t=e.map;return e===o||e instanceof Array&&t===o.map?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js\"),o=Array.prototype;e.exports=function(e){var t=e.reduce;return e===o||e instanceof Array&&t===o.reduce?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js\"),o=Array.prototype;e.exports=function(e){var t=e.reverse;return e===o||e instanceof Array&&t===o.reverse?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js\"),o=Array.prototype;e.exports=function(e){var t=e.slice;return e===o||e instanceof Array&&t===o.slice?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js\"),o=Array.prototype;e.exports=function(e){var t=e.some;return e===o||e instanceof Array&&t===o.some?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js\"),o=String.prototype;e.exports=function(e){var t=e.startsWith;return\"string\"==typeof e||e===o||e instanceof String&&t===o.startsWith?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js\"),o=String.prototype;e.exports=function(e){var t=e.trim;return\"string\"==typeof e||e===o||e instanceof String&&t===o.trim?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Map},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object;e.exports=function(e,t){return n.create(e,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t){return n.defineProperties(e,t)};n.defineProperties.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t,r){return n.defineProperty(e,t,r)};n.defineProperty.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\").Object,o=e.exports=function(e,t){return n.getOwnPropertyDescriptor(e,t)};n.getOwnPropertyDescriptor.sham&&(o.sham=!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getOwnPropertyDescriptors},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.getPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.keys},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Object.setPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.parseFloat},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.parseInt},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Promise},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.apply},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.construct},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.deleteProperty},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.getPrototypeOf},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Reflect.get},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").includes},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").startsWith},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\");e.exports=n(\"String\").trim},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=n.Symbol},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\");e.exports=n.f(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js\"),e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js\"),r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js\"),e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\":function(e){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e)&&null!==e)throw TypeError(\"Can't set \"+String(e)+\" as a prototype\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\":function(e){e.exports=function(){}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\":function(e){e.exports=function(e,t,r){if(!(e instanceof t))throw TypeError(\"Incorrect \"+(r?r+\" \":\"\")+\"invocation\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\");e.exports=function(e){for(var t=n(this),r=s(t.length),i=arguments.length,a=o(i>1?arguments[1]:void 0,r),A=i>2?arguments[2]:void 0,u=void 0===A?r:o(A,r);u>a;)t[a++]=e;return t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"forEach\");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=function(e){var t,r,c,l,d,f,h=o(e),p=\"function\"==typeof this?this:Array,m=arguments.length,g=m>1?arguments[1]:void 0,y=void 0!==g,v=u(h),w=0;if(y&&(g=n(g,m>2?arguments[2]:void 0,2)),null==v||p==Array&&i(v))for(r=new p(t=a(h.length));t>w;w++)f=y?g(h[w],w):h[w],A(r,w,f);else for(d=(l=v.call(h)).next,r=new p;!(c=d.call(l)).done;w++)f=y?s(l,g,[c.value,w],!0):c.value,A(r,w,f);return r.length=w,r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),i=function(e){return function(t,r,i){var a,A=n(t),u=o(A.length),c=s(i,u);if(e&&r!=r){for(;u>c;)if((a=A[c++])!=a)return!0}else for(;u>c;c++)if((e||c in A)&&A[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\"),A=[].push,u=function(e){var t=1==e,r=2==e,u=3==e,c=4==e,l=6==e,d=7==e,f=5==e||l;return function(h,p,m,g){for(var y,v,w=s(h),b=o(w),B=n(p,m,3),j=i(b.length),_=0,C=g||a,x=t?C(h,j):r||d?C(h,0):void 0;j>_;_++)if((f||_ in b)&&(v=B(y=b[_],_,w),e))if(t)x[_]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return _;case 2:A.call(x,y)}else switch(e){case 4:return!1;case 7:A.call(x,y)}return l?-1:u||c?c:x}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterOut:u(7)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),i=o(\"species\");e.exports=function(e){return s>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=function(e){return function(t,r,a,A){n(r);var u=o(t),c=s(u),l=i(u.length),d=e?l-1:0,f=e?-1:1;if(a\u003C2)for(;;){if(d in c){A=c[d],d+=f;break}if(d+=f,e?d\u003C0:l\u003C=d)throw TypeError(\"Reduce of empty array with no initial value\")}for(;e?d>=0:l>d;d+=f)d in c&&(A=r(A,c[d],d,u));return A}};e.exports={left:a(!1),right:a(!0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e,t){var r;return o(e)&&(\"function\"!=typeof(r=e.constructor)||r!==Array&&!o(r.prototype)?n(r)&&null===(r=r[s])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===t?0:t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\");e.exports=function(e,t,r,s){try{return s?t(n(r)[0],r[1]):t(r)}catch(t){throw o(e),t}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"iterator\"),o=!1;try{var s=0,i={next:function(){return{done:!!s++}},return:function(){o=!0}};i[n]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var s={};s[n]=function(){return{next:function(){return{done:r=!0}}}},e(s)}catch(e){}return r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\":function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\"),i=\"Arguments\"==o(function(){return arguments}());e.exports=n?o:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),s))?r:i?o(t):\"Object\"==(n=o(t))&&\"function\"==typeof t.callee?\"Arguments\":n}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\").fastKey,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),h=f.set,p=f.getterFor;e.exports={getConstructor:function(e,t,r,u){var c=e((function(e,n){a(e,c,t),h(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),l||(e.size=0),null!=n&&A(n,e[u],{that:e,AS_ENTRIES:r})})),f=p(t),m=function(e,t,r){var n,o,s=f(e),i=g(e,t);return i?i.value=r:(s.last=i={index:o=d(t,!0),key:t,value:r,previous:n=s.last,next:void 0,removed:!1},s.first||(s.first=i),n&&(n.next=i),l?s.size++:e.size++,\"F\"!==o&&(s.index[o]=i)),e},g=function(e,t){var r,n=f(e),o=d(t);if(\"F\"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key==t)return r};return s(c.prototype,{clear:function(){for(var e=f(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,l?e.size=0:this.size=0},delete:function(e){var t=this,r=f(t),n=g(t,e);if(n){var o=n.next,s=n.previous;delete r.index[n.index],n.removed=!0,s&&(s.next=o),o&&(o.previous=s),r.first==n&&(r.first=o),r.last==n&&(r.last=s),l?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=f(this),n=i(e,arguments.length>1?arguments[1]:void 0,3);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),s(c.prototype,r?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return m(this,0===e?0:e,t)}}:{add:function(e){return m(this,e=0===e?0:e,e)}}),l&&n(c.prototype,\"size\",{get:function(){return f(this).size}}),c},setStrong:function(e,t,r){var n=t+\" Iterator\",o=p(t),s=p(n);u(e,t,(function(e,t){h(this,{type:n,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=s(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?\"keys\"==t?{value:r.key,done:!1}:\"values\"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?\"entries\":\"values\",!r,!0),c(t)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),m=p.set,g=p.getterFor;e.exports=function(e,t,r){var p,y=-1!==e.indexOf(\"Map\"),v=-1!==e.indexOf(\"Weak\"),w=y?\"set\":\"add\",b=o[e],B=b&&b.prototype,j={};if(h&&\"function\"==typeof b&&(v||B.forEach&&!i((function(){(new b).entries().next()})))){p=t((function(t,r){m(u(t,p,e),{type:e,collection:new b}),null!=r&&A(r,t[w],{that:t,AS_ENTRIES:y})}));var _=g(e);f([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(e){var t=\"add\"==e||\"set\"==e;!(e in B)||v&&\"clear\"==e||a(p.prototype,e,(function(r,n){var o=_(this).collection;if(!t&&v&&!c(r))return\"get\"==e&&void 0;var s=o[e](0===r?0:r,n);return t?this:s}))})),v||d(p.prototype,\"size\",{configurable:!0,get:function(){return _(this).collection.size}})}else p=r.getConstructor(t,e,y,w),s.REQUIRED=!0;return l(p,e,!1,!0),j[e]=p,n({global:!0,forced:!0},j),v||r.setStrong(p,e,y),p}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"match\");e.exports=function(e){var t=\u002F.\u002F;try{\"\u002F.\u002F\"[e](t)}catch(r){try{return t[n]=!1,\"\u002F.\u002F\"[e](t)}catch(e){}}return!1}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\").IteratorPrototype,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),A=function(){return this};e.exports=function(e,t,r){var u=t+\" Iterator\";return e.prototype=o(n,{next:s(1,r)}),i(e,u,!1,!0),a[u]=A,e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=n?function(e,t,r){return o.f(e,t,s(1,r))}:function(e,t,r){return e[t]=r,e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\":function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,s(0,r)):e[i]=r}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\"),h=f.IteratorPrototype,p=f.BUGGY_SAFARI_ITERATORS,m=c(\"iterator\"),g=\"keys\",y=\"values\",v=\"entries\",w=function(){return this};e.exports=function(e,t,r,c,f,b,B){o(r,t,c);var j,_,C,x=function(e){if(e===f&&U)return U;if(!p&&e in Q)return Q[e];switch(e){case g:case y:case v:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+\" Iterator\",N=!1,Q=e.prototype,F=Q[m]||Q[\"@@iterator\"]||f&&Q[f],U=!p&&F||x(f),S=\"Array\"==t&&Q.entries||F;if(S&&(j=s(S.call(new e)),h!==Object.prototype&&j.next&&(l||s(j)===h||(i?i(j,h):\"function\"!=typeof j[m]&&A(j,m,w)),a(j,E,!0,!0),l&&(d[E]=w))),f==y&&F&&F.name!==y&&(N=!0,U=function(){return F.call(this)}),l&&!B||Q[m]===U||A(Q,m,U),d[t]=U,f)if(_={values:x(y),keys:b?U:x(g),entries:x(v)},B)for(C in _)(p||N||!(C in Q))&&u(Q,C,_[C]);else n({target:t,proto:!0,forced:p||N},_);return _}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=n.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js\":function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js\":function(e){e.exports=\"object\"==typeof window},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\");e.exports=\u002F(?:iphone|ipod|ipad).*applewebkit\u002Fi.test(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=\"process\"==n(o.process)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\");e.exports=\u002Fweb0s(?!.*chrome)\u002Fi.test(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"navigator\",\"userAgent\")||\"\"},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\":function(e,t,r){var n,o,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js\"),a=s.process,A=a&&a.versions,u=A&&A.v8;u?o=(n=u.split(\".\"))[0]\u003C4?1:n[0]+n[1]:i&&(!(n=i.match(\u002FEdge\\\u002F(\\d+)\u002F))||n[1]>=74)&&(n=i.match(\u002FChrome\\\u002F(\\d+)\u002F))&&(o=n[1]),e.exports=o&&+o},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\");e.exports=function(e){return n[e+\"Prototype\"]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\":function(e){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),c=function(e){var t=function(t,r,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var r,l,d,f,h,p,m,g,y=e.target,v=e.global,w=e.stat,b=e.proto,B=v?n:w?n[y]:(n[y]||{}).prototype,j=v?i:i[y]||(i[y]={}),_=j.prototype;for(d in t)r=!s(v?d:y+(w?\".\":\"#\")+d,e.forced)&&B&&u(B,d),h=j[d],r&&(p=e.noTargetGet?(g=o(B,d))&&g.value:B[d]),f=r&&p?p:t[d],r&&typeof h==typeof f||(m=e.bind&&r?a(f,n):e.wrap&&r?c(f):b&&\"function\"==typeof f?a(Function.call,f):f,(e.sham||f&&f.sham||h&&h.sham)&&A(m,\"sham\",!0),j[d]=m,b&&(u(i,l=y+\"Prototype\")||A(i,l,{}),i[l][d]=f,e.real&&_&&!_[d]&&A(_,d,f)))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\":function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\");e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=[].slice,i={},a=function(e,t,r){if(!(t in i)){for(var n=[],o=0;o\u003Ct;o++)n[o]=\"a[\"+o+\"]\";i[t]=Function(\"C,a\",\"return new C(\"+n.join(\",\")+\")\")}return i[t](e,r)};e.exports=Function.bind||function(e){var t=n(this),r=s.call(arguments,1),i=function(){var n=r.concat(s.call(arguments));return this instanceof i?a(t,n.length,n):t.apply(e,n)};return o(t.prototype)&&(i.prototype=t.prototype),i}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=function(e){return\"function\"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length\u003C2?s(n[e])||s(o[e]):n[e]&&n[e][t]||o[e]&&o[e][t]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"iterator\");e.exports=function(e){if(null!=e)return e[s]||e[\"@@iterator\"]||o[n(e)]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\");e.exports=function(e){var t=o(e);if(\"function\"!=typeof t)throw TypeError(String(e)+\" is not iterable\");return n(t.call(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\":function(e){var t=function(e){return e&&e.Math==Math&&e};e.exports=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof global&&global)||function(){return this}()||Function(\"return this\")()},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),o={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return o.call(n(e),t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=function(e,t){var r=n.console;r&&r.error&&(1===arguments.length?r.error(e):r.error(e,t))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"document\",\"documentElement\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\");e.exports=!n&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=\"\".split;e.exports=n((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?s.call(e,\"\"):Object(e)}:Object},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\"),o=Function.toString;\"function\"!=typeof n.inspectSource&&(n.inspectSource=function(e){return o.call(e)}),e.exports=n.inspectSource},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js\"),u=a(\"meta\"),c=0,l=Object.isExtensible||function(){return!0},d=function(e){i(e,u,{value:{objectID:\"O\"+c++,weakData:{}}})},f=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!o(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!s(e,u)){if(!l(e))return\"F\";if(!t)return\"E\";d(e)}return e[u].objectID},getWeakData:function(e,t){if(!s(e,u)){if(!l(e))return!0;if(!t)return!1;d(e)}return e[u].weakData},onFreeze:function(e){return A&&f.REQUIRED&&l(e)&&!s(e,u)&&d(e),e}};n[u]=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),h=\"Object already initialized\",p=a.WeakMap;if(i||l.state){var m=l.state||(l.state=new p),g=m.get,y=m.has,v=m.set;n=function(e,t){if(y.call(m,e))throw new TypeError(h);return t.facade=e,v.call(m,e,t),t},o=function(e){return g.call(m,e)||{}},s=function(e){return y.call(m,e)}}else{var w=d(\"state\");f[w]=!0,n=function(e,t){if(c(e,w))throw new TypeError(h);return t.facade=e,u(e,w,t),t},o=function(e){return c(e,w)?e[w]:{}},s=function(e){return c(e,w)}}e.exports={set:n,get:o,has:s,enforce:function(e){return s(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!A(t)||(r=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return r}}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),s=n(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[s]===e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\");e.exports=Array.isArray||function(e){return\"Array\"==n(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=\u002F#|\\.prototype\\.\u002F,s=function(e,t){var r=a[i(e)];return r==u||r!=A&&(\"function\"==typeof t?n(t):!!t)},i=s.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},a=s.data={},A=s.NATIVE=\"N\",u=s.POLYFILL=\"P\";e.exports=s},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\":function(e){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\":function(e){e.exports=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"match\");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[s])?!!t:\"RegExp\"==o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\"),u=function(e,t){this.stopped=e,this.result=t};e.exports=function(e,t,r){var c,l,d,f,h,p,m,g=r&&r.that,y=!(!r||!r.AS_ENTRIES),v=!(!r||!r.IS_ITERATOR),w=!(!r||!r.INTERRUPTED),b=i(t,g,1+y+w),B=function(e){return c&&A(c),new u(!0,e)},j=function(e){return y?(n(e),w?b(e[0],e[1],B):b(e[0],e[1])):w?b(e,B):b(e)};if(v)c=e;else{if(\"function\"!=typeof(l=a(e)))throw TypeError(\"Target is not iterable\");if(o(l)){for(d=0,f=s(e.length);f>d;d++)if((h=j(e[d]))&&h instanceof u)return h;return new u(!1)}c=l.call(e)}for(p=c.next;!(m=p.call(c)).done;){try{h=j(m.value)}catch(e){throw A(c),e}if(\"object\"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\");e.exports=function(e){var t=e.return;if(void 0!==t)return n(t.call(e)).value}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js\":function(e,t,r){\"use strict\";var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),d=c(\"iterator\"),f=!1;[].keys&&(\"next\"in(s=[].keys())?(o=a(a(s)))!==Object.prototype&&(n=o):f=!0);var h=null==n||i((function(){var e={};return n[d].call(e)!==e}));h&&(n={}),l&&!h||u(n,d)||A(n,d,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js\":function(e,t,r){var n,o,s,i,a,A,u,c,l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\").set,h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),g=l.MutationObserver||l.WebKitMutationObserver,y=l.document,v=l.process,w=l.Promise,b=d(l,\"queueMicrotask\"),B=b&&b.value;B||(n=function(){var e,t;for(m&&(e=v.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?i():s=void 0,e}}s=void 0,e&&e.enter()},h||m||p||!g||!y?w&&w.resolve?((u=w.resolve(void 0)).constructor=w,c=u.then,i=function(){c.call(u,n)}):i=m?function(){v.nextTick(n)}:function(){f.call(l,n)}:(a=!0,A=y.createTextNode(\"\"),new g(n).observe(A,{characterData:!0}),i=function(){A.data=a=!a})),e.exports=B||function(e){var t={fn:e,next:void 0};s&&(s.next=t),o||(o=t,i()),s=t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");e.exports=n.Promise},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\");e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n\u003C41}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\"),s=n.WeakMap;e.exports=\"function\"==typeof s&&\u002Fnative code\u002F.test(o(s))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new o(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js\");e.exports=function(e){if(n(e))throw TypeError(\"The method doesn't accept regular expressions\");return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\"),i=n.parseFloat,a=1\u002Fi(s+\"-0\")!=-1\u002F0;e.exports=a?function(e){var t=o(String(e)),r=i(t);return 0===r&&\"-\"==t.charAt(0)?-0:r}:i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\"),i=n.parseInt,a=\u002F^[+-]?0[Xx]\u002F,A=8!==i(s+\"08\")||22!==i(s+\"0x16\");e.exports=A?function(e,t){var r=o(String(e));return i(r,t>>>0||(a.test(r)?16:10))}:i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\":function(e,t,r){var n,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\")(\"IE_PROTO\"),l=function(){},d=function(e){return\"\u003Cscript>\"+e+\"\u003C\\\u002Fscript>\"},f=function(){try{n=document.domain&&new ActiveXObject(\"htmlfile\")}catch(e){}var e,t;f=n?function(e){e.write(d(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t}(n):((t=u(\"iframe\")).style.display=\"none\",A.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(d(\"document.F=Object\")),e.close(),e.F);for(var r=i.length;r--;)delete f.prototype[i[r]];return f()};a[c]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(l.prototype=o(e),r=new l,l.prototype=null,r[c]=e):r=f(),void 0===t?r:s(r,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\");e.exports=n?Object.defineProperties:function(e,t){s(e);for(var r,n=i(t),a=n.length,A=0;a>A;)o.f(e,r=n[A++],t[r]);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),a=Object.defineProperty;t.f=n?a:function(e,t,r){if(s(e),t=i(t,!0),s(r),o)try{return a(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js\"),c=Object.getOwnPropertyDescriptor;t.f=n?c:function(e,t){if(e=i(e),t=a(t,!0),u)try{return c(e,t)}catch(e){}if(A(e,t))return s(!o.f.call(e,t),e[t])}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\").f,s={}.toString,i=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&\"[object Window]\"==s.call(e)?function(e){try{return o(e)}catch(e){return i.slice()}}(e):o(n(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\").concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\"),a=s(\"IE_PROTO\"),A=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=o(e),n(e,a)?e[a]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?A:null}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").indexOf,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\");e.exports=function(e,t){var r,a=o(e),A=0,u=[];for(r in a)!n(i,r)&&n(a,r)&&u.push(r);for(;t.length>A;)n(a,r=t[A++])&&(~s(u,r)||u.push(r));return u}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js\");e.exports=Object.keys||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\":function(e,t){\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);t.f=o?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,s){return n(r),o(s),t?e.call(r,s):r.__proto__=s,r}}():void 0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\");e.exports=n?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\");e.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(i(e)),r=s.f;return r?t.concat(r(e)):t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\":function(e){e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\");e.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=s.f(e);return(0,r.resolve)(t),r.promise}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\");e.exports=function(e,t,r){for(var o in t)r&&r.unsafe&&e[o]?e[o]=t[o]:n(e,o,t[o],r);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\");e.exports=function(e,t,r,o){o&&o.enumerable?e[t]=r:n(e,t,r)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\":function(e){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\");e.exports=function(e,t){try{o(n,e,t)}catch(r){n[e]=t}return t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),a=s(\"species\");e.exports=function(e){var t=n(e),r=o.f;i&&t&&!t[a]&&r(t,a,{configurable:!0,get:function(){return this}})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");e.exports=function(e,t,r,u){if(e){var c=r?e:e.prototype;i(c,A)||o(c,A,{configurable:!0,value:t}),u&&!n&&s(c,\"toString\",a)}}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),s=n(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js\"),s=\"__core-js_shared__\",i=n[s]||o(s,{});e.exports=i},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js\");(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.15.2\",mode:n?\"pure\":\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e,t){var r,i=n(e).constructor;return void 0===i||null==(r=n(i)[s])?t:o(r)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),s=function(e){return function(t,r){var s,i,a=String(o(t)),A=n(r),u=a.length;return A\u003C0||A>=u?e?\"\":void 0:(s=a.charCodeAt(A))\u003C55296||s>56319||A+1===u||(i=a.charCodeAt(A+1))\u003C56320||i>57343?e?a.charAt(A):s:e?a.slice(A,A+2):i-56320+(s-55296\u003C\u003C10)+65536}};e.exports={codeAt:s(!1),charAt:s(!0)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\");e.exports=function(e){return n((function(){return!!o[e]()||\"​᠎\"!=\"​᠎\"[e]()||o[e].name!==e}))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),o=\"[\"+r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\")+\"]\",s=RegExp(\"^\"+o+o+\"*\"),i=RegExp(o+o+\"*$\"),a=function(e){return function(t){var r=String(n(t));return 1&e&&(r=r.replace(s,\"\")),2&e&&(r=r.replace(i,\"\")),r}};e.exports={start:a(1),end:a(2),trim:a(3)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),f=i.location,h=i.setImmediate,p=i.clearImmediate,m=i.process,g=i.MessageChannel,y=i.Dispatch,v=0,w={},b=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},B=function(e){return function(){b(e)}},j=function(e){b(e.data)},_=function(e){i.postMessage(e+\"\",f.protocol+\"\u002F\u002F\"+f.host)};h&&p||(h=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return w[++v]=function(){(\"function\"==typeof e?e:Function(e)).apply(void 0,t)},n(v),v},p=function(e){delete w[e]},d?n=function(e){m.nextTick(B(e))}:y&&y.now?n=function(e){y.now(B(e))}:g&&!l?(s=(o=new g).port2,o.port1.onmessage=j,n=A(s.postMessage,s,1)):i.addEventListener&&\"function\"==typeof postMessage&&!i.importScripts&&f&&\"file:\"!==f.protocol&&!a(_)?(n=_,i.addEventListener(\"message\",j,!1)):n=\"onreadystatechange\"in c(\"script\")?function(e){u.appendChild(c(\"script\")).onreadystatechange=function(){u.removeChild(this),b(e)}}:function(e){setTimeout(B(e),0)}),e.exports={set:h,clear:p}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=Math.max,s=Math.min;e.exports=function(e,t){var r=n(e);return r\u003C0?o(r+t,0):s(r,t)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return n(o(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\":function(e){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js\"),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return Object(n(e))}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\");e.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js\":function(e,t,r){var n={};n[r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(n)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\":function(e){var t=0,r=Math.random();e.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++t+r).toString(36)}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\");e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\");t.f=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\"),u=o(\"wks\"),c=n.Symbol,l=A?c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)&&(a||\"string\"==typeof u[e])||(a&&s(c,e)?u[e]=c[e]:u[e]=l(\"Symbol.\"+e)),u[e]}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js\":function(e){e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),c=function(e,t){var r=this;if(!(r instanceof c))return new c(e,t);s&&(r=s(new Error(void 0),o(r))),void 0!==t&&a(r,\"message\",String(t));var n=[];return u(e,n.push,{that:n}),a(r,\"errors\",n),r};c.prototype=i(Error.prototype,{constructor:A(5,c),message:A(5,\"\"),name:A(5,\"AggregateError\")}),n({global:!0},{AggregateError:c})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),h=d(\"isConcatSpreadable\"),p=9007199254740991,m=\"Maximum allowed index exceeded\",g=f>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),y=l(\"concat\"),v=function(e){if(!i(e))return!1;var t=e[h];return void 0!==t?!!t:s(e)};n({target:\"Array\",proto:!0,forced:!g||!y},{concat:function(e){var t,r,n,o,s,i=a(this),l=c(i,0),d=0;for(t=-1,n=arguments.length;t\u003Cn;t++)if(v(s=-1===t?i:arguments[t])){if(d+(o=A(s.length))>p)throw TypeError(m);for(r=0;r\u003Co;r++,d++)r in s&&u(l,d,s[r])}else{if(d>=p)throw TypeError(m);u(l,d++,s)}return l.length=d,l}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").every;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"every\")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\");n({target:\"Array\",proto:!0},{fill:o}),s(\"fill\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").filter;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"filter\")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js\");n({target:\"Array\",proto:!0,forced:[].forEach!=o},{forEach:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js\");n({target:\"Array\",stat:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\")((function(e){Array.from(e)}))},{from:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").includes,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\");n({target:\"Array\",proto:!0},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(\"includes\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js\").indexOf,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\"),i=[].indexOf,a=!!i&&1\u002F[1].indexOf(1,-0)\u003C0,A=s(\"indexOf\");n({target:\"Array\",proto:!0,forced:a||!A},{indexOf:function(e){return a?i.apply(this,arguments)||0:o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Array\",stat:!0},{isArray:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),A=\"Array Iterator\",u=i.set,c=i.getterFor(A);e.exports=a(Array,\"Array\",(function(e,t){u(this,{type:A,target:n(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==r?{value:n,done:!1}:\"values\"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),\"values\"),s.Arguments=s.Array,o(\"keys\"),o(\"values\"),o(\"entries\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").map;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js\").left,s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\");n({target:\"Array\",proto:!0,forced:!s(\"reduce\")||!a&&i>79&&i\u003C83},{reduce:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),s=[].reverse,i=[1,2];n({target:\"Array\",proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),s.call(this)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js\")(\"slice\"),d=c(\"species\"),f=[].slice,h=Math.max;n({target:\"Array\",proto:!0,forced:!l},{slice:function(e,t){var r,n,c,l=A(this),p=a(l.length),m=i(e,p),g=i(void 0===t?p:t,p);if(s(l)&&(\"function\"!=typeof(r=l.constructor)||r!==Array&&!s(r.prototype)?o(r)&&null===(r=r[d])&&(r=void 0):r=void 0,r===Array||void 0===r))return f.call(l,m,g);for(n=new(void 0===r?Array:r)(h(g-m,0)),c=0;m\u003Cg;m++,c++)m in l&&u(n,c,l[m]);return n.length=c,n}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").some;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js\")(\"some\")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Date\",stat:!0},{now:function(){return(new Date).getTime()}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Function\",proto:!0},{bind:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\");r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\")(n.JSON,\"JSON\",!0)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js\");e.exports=n(\"Map\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),o)},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Object\",stat:!0,sham:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\")},{create:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\");n({target:\"Object\",stat:!0,forced:!o,sham:!o},{defineProperties:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\");n({target:\"Object\",stat:!0,forced:!o,sham:!o},{defineProperty:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\").f})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),A=o((function(){i(1)}));n({target:\"Object\",stat:!0,forced:!a||A,sham:!a},{getOwnPropertyDescriptor:function(e,t){return i(s(e),t)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js\");n({target:\"Object\",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,r,n=i(e),o=a.f,u=s(n),c={},l=0;u.length>l;)void 0!==(r=o(n,t=u[l++]))&&A(c,t,r);return c}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\");n({target:\"Object\",stat:!0,forced:o((function(){i(1)})),sham:!a},{getPrototypeOf:function(e){return i(s(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\");n({target:\"Object\",stat:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\")((function(){s(1)}))},{keys:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\")({target:\"Object\",stat:!0},{setPrototypeOf:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\")})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js\");n({global:!0,forced:parseFloat!=o},{parseFloat:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js\");n({global:!0,forced:parseInt!=o},{parseInt:o})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\");n({target:\"Promise\",stat:!0},{allSettled:function(e){var t=this,r=s.f(t),n=r.resolve,A=r.reject,u=i((function(){var r=o(t.resolve),s=[],i=0,A=1;a(e,(function(e){var o=i++,a=!1;s.push(void 0),A++,r.call(t,e).then((function(e){a||(a=!0,s[o]={status:\"fulfilled\",value:e},--A||n(s))}),(function(e){a||(a=!0,s[o]={status:\"rejected\",reason:e},--A||n(s))}))})),--A||n(s)}));return u.error&&A(u.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),u=\"No one promise resolved\";n({target:\"Promise\",stat:!0},{any:function(e){var t=this,r=i.f(t),n=r.resolve,c=r.reject,l=a((function(){var r=o(t.resolve),i=[],a=0,l=1,d=!1;A(e,(function(e){var o=a++,A=!1;i.push(void 0),l++,r.call(t,e).then((function(e){A||d||(d=!0,n(e))}),(function(e){A||d||(A=!0,i[o]=e,--l||c(new(s(\"AggregateError\"))(i,u)))}))})),--l||c(new(s(\"AggregateError\"))(i,u))}));return l.error&&c(l.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\");if(n({target:\"Promise\",proto:!0,real:!0,forced:!!s&&i((function(){s.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=A(this,a(\"Promise\")),r=\"function\"==typeof e;return this.then(r?function(r){return u(t,e()).then((function(){return r}))}:e,r?function(r){return u(t,e()).then((function(){throw r}))}:e)}}),!o&&\"function\"==typeof s){var l=a(\"Promise\").prototype.finally;s.prototype.finally!==l&&c(s.prototype,\"finally\",l,{unsafe:!0})}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js\":function(e,t,r){\"use strict\";var n,o,s,i,a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js\").set,C=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js\"),I=S(\"species\"),P=\"Promise\",O=F.get,k=F.set,R=F.getterFor(P),M=l&&l.prototype,D=l,K=M,z=u.TypeError,V=u.document,q=u.process,G=N.f,X=G,W=!!(V&&V.createEvent&&u.dispatchEvent),J=\"function\"==typeof PromiseRejectionEvent,Y=\"unhandledrejection\",Z=!1,$=U(P,(function(){var e=w(D),t=e!==String(D);if(!t&&66===H)return!0;if(A&&!K.finally)return!0;if(H>=51&&\u002Fnative code\u002F.test(e))return!1;var r=new D((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};return(r.constructor={})[I]=n,!(Z=r.then((function(){}))instanceof n)||!t&&L&&!J})),ee=$||!B((function(e){D.all(e).catch((function(){}))})),te=function(e){var t;return!(!g(e)||\"function\"!=typeof(t=e.then))&&t},re=function(e,t){if(!e.notified){e.notified=!0;var r=e.reactions;C((function(){for(var n=e.value,o=1==e.state,s=0;r.length>s;){var i,a,A,u=r[s++],c=o?u.ok:u.fail,l=u.resolve,d=u.reject,f=u.domain;try{c?(o||(2===e.rejection&&ie(e),e.rejection=1),!0===c?i=n:(f&&f.enter(),i=c(n),f&&(f.exit(),A=!0)),i===u.promise?d(z(\"Promise-chain cycle\")):(a=te(i))?a.call(i,l,d):l(i)):d(n)}catch(e){f&&!A&&f.exit(),d(e)}}e.reactions=[],e.notified=!1,t&&!e.rejection&&oe(e)}))}},ne=function(e,t,r){var n,o;W?((n=V.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),u.dispatchEvent(n)):n={promise:t,reason:r},!J&&(o=u[\"on\"+e])?o(n):e===Y&&E(\"Unhandled promise rejection\",r)},oe=function(e){_.call(u,(function(){var t,r=e.facade,n=e.value;if(se(e)&&(t=Q((function(){T?q.emit(\"unhandledRejection\",n,r):ne(Y,r,n)})),e.rejection=T||se(e)?2:1,t.error))throw t.value}))},se=function(e){return 1!==e.rejection&&!e.parent},ie=function(e){_.call(u,(function(){var t=e.facade;T?q.emit(\"rejectionHandled\",t):ne(\"rejectionhandled\",t,e.value)}))},ae=function(e,t,r){return function(n){e(t,n,r)}},Ae=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,re(e,!0))},ue=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw z(\"Promise can't be resolved itself\");var n=te(t);n?C((function(){var r={done:!1};try{n.call(t,ae(ue,r,e),ae(Ae,r,e))}catch(t){Ae(r,t,e)}})):(e.value=t,e.state=1,re(e,!1))}catch(t){Ae({done:!1},t,e)}}};if($&&(K=(D=function(e){v(this,D,P),y(e),n.call(this);var t=O(this);try{e(ae(ue,t),ae(Ae,t))}catch(e){Ae(t,e)}}).prototype,(n=function(e){k(this,{type:P,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=f(K,{then:function(e,t){var r=R(this),n=G(j(this,D));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=T?q.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&re(r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new n,t=O(e);this.promise=e,this.resolve=ae(ue,t),this.reject=ae(Ae,t)},N.f=G=function(e){return e===D||e===s?new o(e):X(e)},!A&&\"function\"==typeof l&&M!==Object.prototype)){i=M.then,Z||(d(M,\"then\",(function(e,t){var r=this;return new D((function(e,t){i.call(r,e,t)})).then(e,t)}),{unsafe:!0}),d(M,\"catch\",K.catch,{unsafe:!0}));try{delete M.constructor}catch(e){}h&&h(M,K)}a({global:!0,wrap:!0,forced:$},{Promise:D}),p(D,P,!1,!0),m(P),s=c(P),a({target:P,stat:!0,forced:$},{reject:function(e){var t=G(this);return t.reject.call(void 0,e),t.promise}}),a({target:P,stat:!0,forced:A||$},{resolve:function(e){return x(A&&this===s?D:this,e)}}),a({target:P,stat:!0,forced:ee},{all:function(e){var t=this,r=G(t),n=r.resolve,o=r.reject,s=Q((function(){var r=y(t.resolve),s=[],i=0,a=1;b(e,(function(e){var A=i++,u=!1;s.push(void 0),a++,r.call(t,e).then((function(e){u||(u=!0,s[A]=e,--a||n(s))}),o)})),--a||n(s)}));return s.error&&o(s.value),r.promise},race:function(e){var t=this,r=G(t),n=r.reject,o=Q((function(){var o=y(t.resolve);b(e,(function(e){o.call(t,e).then(r.resolve,n)}))}));return o.error&&n(o.value),r.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),A=o(\"Reflect\",\"apply\"),u=Function.apply;n({target:\"Reflect\",stat:!0,forced:!a((function(){A((function(){}))}))},{apply:function(e,t,r){return s(e),i(r),A?A(e,t,r):u.call(e,t,r)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),l=o(\"Reflect\",\"construct\"),d=c((function(){function e(){}return!(l((function(){}),[],e)instanceof e)})),f=!c((function(){l((function(){}))})),h=d||f;n({target:\"Reflect\",stat:!0,forced:h,sham:h},{construct:function(e,t){s(e),i(t);var r=arguments.length\u003C3?e:s(arguments[2]);if(f&&!d)return l(e,t,r);if(e==r){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var n=[null];return n.push.apply(n,t),new(u.apply(e,n))}var o=r.prototype,c=A(a(o)?o:Object.prototype),h=Function.apply.call(e,c,t);return a(h)?h:c}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f;n({target:\"Reflect\",stat:!0},{deleteProperty:function(e,t){var r=s(o(e),t);return!(r&&!r.configurable)&&delete e[t]}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\");n({target:\"Reflect\",stat:!0,sham:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js\")},{getPrototypeOf:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js\");n({target:\"Reflect\",stat:!0},{get:function e(t,r){var n,u,c=arguments.length\u003C3?t:arguments[2];return s(t)===c?t[r]:(n=a.f(t,r))?i(n,\"value\")?n.value:void 0===n.get?void 0:n.get.call(c):o(u=A(t))?e(u,r,c):void 0}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\");n({target:\"String\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\")(\"includes\")},{includes:function(e){return!!~String(s(this)).indexOf(o(e),arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js\").charAt,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js\"),i=\"String Iterator\",a=o.set,A=o.getterFor(i);s(String,\"String\",(function(e){a(this,{type:i,string:String(e),index:0})}),(function(){var e,t=A(this),r=t.string,o=t.index;return o>=r.length?{value:void 0,done:!0}:(e=n(r,o),t.index+=e.length,{value:e,done:!1})}))},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js\":function(e,t,r){\"use strict\";var n,o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),l=\"\".startsWith,d=Math.min,f=u(\"startsWith\");o({target:\"String\",proto:!0,forced:!(!c&&!f&&(n=s(String.prototype,\"startsWith\"),n&&!n.writable)||f)},{startsWith:function(e){var t=String(A(this));a(e);var r=i(d(arguments.length>1?arguments[1]:void 0,t.length)),n=String(e);return l?l.call(t,n,r):t.slice(r,r+n.length)===n}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js\").trim;n({target:\"String\",proto:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js\")(\"trim\")},{trim:function(){return o(this)}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"asyncIterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js\":function(){},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"hasInstance\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"isConcatSpreadable\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),C=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\"),I=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js\"),P=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js\"),O=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js\").forEach,k=F(\"hidden\"),R=\"Symbol\",M=L(\"toPrimitive\"),D=P.set,K=P.getterFor(R),z=Object.prototype,V=o.Symbol,q=s(\"JSON\",\"stringify\"),G=_.f,X=C.f,W=B.f,J=x.f,Y=Q(\"symbols\"),Z=Q(\"op-symbols\"),$=Q(\"string-to-symbol-registry\"),ee=Q(\"symbol-to-string-registry\"),te=Q(\"wks\"),re=o.QObject,ne=!re||!re.prototype||!re.prototype.findChild,oe=a&&c((function(){return 7!=v(X({},\"a\",{get:function(){return X(this,\"a\",{value:7}).a}})).a}))?function(e,t,r){var n=G(z,t);n&&delete z[t],X(e,t,r),n&&e!==z&&X(z,t,n)}:X,se=function(e,t){var r=Y[e]=v(V.prototype);return D(r,{type:R,tag:e,description:t}),a||(r.description=t),r},ie=u?function(e){return\"symbol\"==typeof e}:function(e){return Object(e)instanceof V},ae=function(e,t,r){e===z&&ae(Z,t,r),h(e);var n=g(t,!0);return h(r),l(Y,n)?(r.enumerable?(l(e,k)&&e[k][n]&&(e[k][n]=!1),r=v(r,{enumerable:y(0,!1)})):(l(e,k)||X(e,k,y(1,{})),e[k][n]=!0),oe(e,n,r)):X(e,n,r)},Ae=function(e,t){h(e);var r=m(t),n=w(r).concat(de(r));return O(n,(function(t){a&&!ue.call(r,t)||ae(e,t,r[t])})),e},ue=function(e){var t=g(e,!0),r=J.call(this,t);return!(this===z&&l(Y,t)&&!l(Z,t))&&(!(r||!l(this,t)||!l(Y,t)||l(this,k)&&this[k][t])||r)},ce=function(e,t){var r=m(e),n=g(t,!0);if(r!==z||!l(Y,n)||l(Z,n)){var o=G(r,n);return!o||!l(Y,n)||l(r,k)&&r[k][n]||(o.enumerable=!0),o}},le=function(e){var t=W(m(e)),r=[];return O(t,(function(e){l(Y,e)||l(U,e)||r.push(e)})),r},de=function(e){var t=e===z,r=W(t?Z:m(e)),n=[];return O(r,(function(e){!l(Y,e)||t&&!l(z,e)||n.push(Y[e])})),n};A||(N((V=function(){if(this instanceof V)throw TypeError(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,t=S(e),r=function(e){this===z&&r.call(Z,e),l(this,k)&&l(this[k],t)&&(this[k][t]=!1),oe(this,t,y(1,e))};return a&&ne&&oe(z,t,{configurable:!0,set:r}),se(t,e)}).prototype,\"toString\",(function(){return K(this).tag})),N(V,\"withoutSetter\",(function(e){return se(S(e),e)})),x.f=ue,C.f=ae,_.f=ce,b.f=B.f=le,j.f=de,T.f=function(e){return se(L(e),e)},a&&(X(V.prototype,\"description\",{configurable:!0,get:function(){return K(this).description}}),i||N(z,\"propertyIsEnumerable\",ue,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!A,sham:!A},{Symbol:V}),O(w(te),(function(e){H(e)})),n({target:R,stat:!0,forced:!A},{for:function(e){var t=String(e);if(l($,t))return $[t];var r=V(t);return $[t]=r,ee[r]=t,r},keyFor:function(e){if(!ie(e))throw TypeError(e+\" is not a symbol\");if(l(ee,e))return ee[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),n({target:\"Object\",stat:!0,forced:!A,sham:!a},{create:function(e,t){return void 0===t?v(e):Ae(v(e),t)},defineProperty:ae,defineProperties:Ae,getOwnPropertyDescriptor:ce}),n({target:\"Object\",stat:!0,forced:!A},{getOwnPropertyNames:le,getOwnPropertySymbols:de}),n({target:\"Object\",stat:!0,forced:c((function(){j.f(1)}))},{getOwnPropertySymbols:function(e){return j.f(p(e))}}),q&&n({target:\"JSON\",stat:!0,forced:!A||c((function(){var e=V();return\"[null]\"!=q([e])||\"{}\"!=q({a:e})||\"{}\"!=q(Object(e))}))},{stringify:function(e,t,r){for(var n,o=[e],s=1;arguments.length>s;)o.push(arguments[s++]);if(n=t,(f(t)||void 0!==e)&&!ie(e))return d(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!ie(t))return t}),o[1]=t,q.apply(null,o)}}),V.prototype[M]||E(V.prototype,M,V.prototype.valueOf),I(V,R),U[k]=!0},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"matchAll\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"match\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"replace\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"search\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"species\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"split\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"toPrimitive\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"toStringTag\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"unscopables\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js\");n({target:\"Promise\",stat:!0},{try:function(e){var t=o.f(this),r=s(e);return(r.error?t.reject:t.resolve)(r.value),t.promise}})},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"asyncDispose\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"dispose\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"matcher\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"metadata\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"observable\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"patternMatch\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"replaceAll\")},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");for(var u in n){var c=o[u],l=c&&c.prototype;l&&s(l)!==A&&i(l,A,u),a[u]=a.Array}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),s=Array.prototype,i={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===s||e instanceof Array&&t===s.forEach||i.hasOwnProperty(o(e))?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js\");var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js\"),s=Array.prototype,i={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===s||e instanceof Array&&t===s.values||i.hasOwnProperty(o(e))?n:t}},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js\":function(e){e.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e)&&null!==e)throw TypeError(\"Can't set \"+String(e)+\" as a prototype\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),i=n(\"unscopables\"),a=Array.prototype;null==a[i]&&s.f(a,i,{configurable:!0,value:o(null)}),e.exports=function(e){a[i][e]=!0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").forEach,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\")(\"forEach\");e.exports=o?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\"),i=function(e){return function(t,r,i){var a,A=n(t),u=o(A.length),c=s(i,u);if(e&&r!=r){for(;u>c;)if((a=A[c++])!=a)return!0}else for(;u>c;c++)if((e||c in A)&&A[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\"),A=[].push,u=function(e){var t=1==e,r=2==e,u=3==e,c=4==e,l=6==e,d=7==e,f=5==e||l;return function(h,p,m,g){for(var y,v,w=s(h),b=o(w),B=n(p,m,3),j=i(b.length),_=0,C=g||a,x=t?C(h,j):r||d?C(h,0):void 0;j>_;_++)if((f||_ in b)&&(v=B(y=b[_],_,w),e))if(t)x[_]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return _;case 2:A.call(x,y)}else switch(e){case 4:return!1;case 7:A.call(x,y)}return l?-1:u||c?c:x}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),i=o(\"species\");e.exports=function(e){return s>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"species\");e.exports=function(e){var t;return o(e)&&(\"function\"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)?n(t)&&null===(t=t[s])&&(t=void 0):t=void 0),void 0===t?Array:t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js\");e.exports=function(e,t){return new(n(e))(0===t?0:t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\":function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\"),i=\"Arguments\"==o(function(){return arguments}());e.exports=n?o:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),s))?r:i?o(t):\"Object\"==(n=o(t))&&\"function\"==typeof t.callee?\"Arguments\":n}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\");e.exports=function(e,t){for(var r=o(t),a=i.f,A=s.f,u=0;u\u003Cr.length;u++){var c=r[u];n(e,c)||a(e,c,A(t,c))}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=\u002F\"\u002Fg;e.exports=function(e,t,r,i){var a=o(n(e)),A=\"\u003C\"+t;return\"\"!==r&&(A+=\" \"+r+'=\"'+o(i).replace(s,\"&quot;\")+'\"'),A+\">\"+a+\"\u003C\u002F\"+t+\">\"}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\").IteratorPrototype,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),A=function(){return this};e.exports=function(e,t,r){var u=t+\" Iterator\";return e.prototype=o(n,{next:s(1,r)}),i(e,u,!1,!0),a[u]=A,e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=n?function(e,t,r){return o.f(e,t,s(1,r))}:function(e,t,r){return e[t]=r,e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\":function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\");e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,s(0,r)):e[i]=r}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\"),h=f.IteratorPrototype,p=f.BUGGY_SAFARI_ITERATORS,m=c(\"iterator\"),g=\"keys\",y=\"values\",v=\"entries\",w=function(){return this};e.exports=function(e,t,r,c,f,b,B){o(r,t,c);var j,_,C,x=function(e){if(e===f&&U)return U;if(!p&&e in Q)return Q[e];switch(e){case g:case y:case v:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+\" Iterator\",N=!1,Q=e.prototype,F=Q[m]||Q[\"@@iterator\"]||f&&Q[f],U=!p&&F||x(f),S=\"Array\"==t&&Q.entries||F;if(S&&(j=s(S.call(new e)),h!==Object.prototype&&j.next&&(l||s(j)===h||(i?i(j,h):\"function\"!=typeof j[m]&&A(j,m,w)),a(j,E,!0,!0),l&&(d[E]=w))),f==y&&F&&F.name!==y&&(N=!0,U=function(){return F.call(this)}),l&&!B||Q[m]===U||A(Q,m,U),d[t]=U,f)if(_={values:x(y),keys:b?U:x(g),entries:x(v)},B)for(C in _)(p||N||!(C in Q))&&u(Q,C,_[C]);else n({target:t,proto:!0,forced:p||N},_);return _}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),s=n.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\":function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"navigator\",\"userAgent\")||\"\"},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\":function(e,t,r){var n,o,s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js\"),a=s.process,A=s.Deno,u=a&&a.versions||A&&A.version,c=u&&u.v8;c?o=(n=c.split(\".\"))[0]\u003C4?1:n[0]+n[1]:i&&(!(n=i.match(\u002FEdge\\\u002F(\\d+)\u002F))||n[1]>=74)&&(n=i.match(\u002FChrome\\\u002F(\\d+)\u002F))&&(o=n[1]),e.exports=o&&+o},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\":function(e){e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\");e.exports=function(e,t){var r,c,l,d,f,h=e.target,p=e.global,m=e.stat;if(r=p?n:m?n[h]||a(h,{}):(n[h]||{}).prototype)for(c in t){if(d=t[c],l=e.noTargetGet?(f=o(r,c))&&f.value:r[c],!u(p?c:h+(m?\".\":\"#\")+c,e.forced)&&void 0!==l){if(typeof d==typeof l)continue;A(d,l)}(e.sham||l&&l.sham)&&s(d,\"sham\",!0),i(r,c,d,e)}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\":function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js\");e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=function(e){return\"function\"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length\u003C2?o(n[e]):n[e]&&n[e][t]}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\":function(e){var t=function(e){return e&&e.Math==Math&&e};e.exports=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof global&&global)||function(){return this}()||Function(\"return this\")()},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),o={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,t){return o.call(n(e),t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\");e.exports=n(\"document\",\"documentElement\")},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\");e.exports=!n&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),s=\"\".split;e.exports=n((function(){return!Object(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==o(e)?s.call(e,\"\"):Object(e)}:Object},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\");e.exports=function(e,t,r){var s,i;return o&&\"function\"==typeof(s=t.constructor)&&s!==r&&n(i=s.prototype)&&i!==r.prototype&&o(e,i),e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\"),o=Function.toString;\"function\"!=typeof n.inspectSource&&(n.inspectSource=function(e){return o.call(e)}),e.exports=n.inspectSource},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\":function(e,t,r){var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),h=\"Object already initialized\",p=a.WeakMap;if(i||l.state){var m=l.state||(l.state=new p),g=m.get,y=m.has,v=m.set;n=function(e,t){if(y.call(m,e))throw new TypeError(h);return t.facade=e,v.call(m,e,t),t},o=function(e){return g.call(m,e)||{}},s=function(e){return y.call(m,e)}}else{var w=d(\"state\");f[w]=!0,n=function(e,t){if(c(e,w))throw new TypeError(h);return t.facade=e,u(e,w,t),t},o=function(e){return c(e,w)?e[w]:{}},s=function(e){return c(e,w)}}e.exports={set:n,get:o,has:s,enforce:function(e){return s(e)?o(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!A(t)||(r=o(t)).type!==e)throw TypeError(\"Incompatible receiver, \"+e+\" required\");return r}}}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\");e.exports=Array.isArray||function(e){return\"Array\"==n(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),o=\u002F#|\\.prototype\\.\u002F,s=function(e,t){var r=a[i(e)];return r==u||r!=A&&(\"function\"==typeof t?n(t):!!t)},i=s.normalize=function(e){return String(e).replace(o,\".\").toLowerCase()},a=s.data={},A=s.NATIVE=\"N\",u=s.POLYFILL=\"P\";e.exports=s},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\":function(e){e.exports=function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\":function(e){e.exports=!1},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\");e.exports=o?function(e){return\"symbol\"==typeof e}:function(e){var t=n(\"Symbol\");return\"function\"==typeof t&&Object(e)instanceof t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js\":function(e,t,r){\"use strict\";var n,o,s,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),d=c(\"iterator\"),f=!1;[].keys&&(\"next\"in(s=[].keys())?(o=a(a(s)))!==Object.prototype&&(n=o):f=!0);var h=null==n||i((function(){var e={};return n[d].call(e)!==e}));h&&(n={}),l&&!h||u(n,d)||A(n,d,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:f}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\":function(e){e.exports={}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n\u003C41}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\"),s=n.WeakMap;e.exports=\"function\"==typeof s&&\u002Fnative code\u002F.test(o(s))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),c=Object.assign,l=Object.defineProperty;e.exports=!c||o((function(){if(n&&1!==c({b:1},c(l({},\"a\",{enumerable:!0,get:function(){l(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),o=\"abcdefghijklmnopqrst\";return e[r]=7,o.split(\"\").forEach((function(e){t[e]=e})),7!=c({},e)[r]||s(c({},t)).join(\"\")!=o}))?function(e,t){for(var r=A(e),o=arguments.length,c=1,l=i.f,d=a.f;o>c;)for(var f,h=u(arguments[c++]),p=l?s(h).concat(l(h)):s(h),m=p.length,g=0;m>g;)f=p[g++],n&&!d.call(h,f)||(r[f]=h[f]);return r}:c},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\":function(e,t,r){var n,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\")(\"IE_PROTO\"),l=function(){},d=function(e){return\"\u003Cscript>\"+e+\"\u003C\\\u002Fscript>\"},f=function(e){e.write(d(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},h=function(){try{n=new ActiveXObject(\"htmlfile\")}catch(e){}h=document.domain&&n?f(n):function(){var e,t=u(\"iframe\");if(t.style)return t.style.display=\"none\",A.appendChild(t),t.src=String(\"javascript:\"),(e=t.contentWindow.document).open(),e.write(d(\"document.F=Object\")),e.close(),e.F}()||f(n);for(var e=i.length;e--;)delete h.prototype[i[e]];return h()};a[c]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(l.prototype=o(e),r=new l,l.prototype=null,r[c]=e):r=h(),void 0===t?r:s(r,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\");e.exports=n?Object.defineProperties:function(e,t){s(e);for(var r,n=i(t),a=n.length,A=0;a>A;)o.f(e,r=n[A++],t[r]);return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),a=Object.defineProperty;t.f=n?a:function(e,t,r){if(s(e),t=i(t),s(r),o)try{return a(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js\"),c=Object.getOwnPropertyDescriptor;t.f=n?c:function(e,t){if(e=i(e),t=a(t),u)try{return c(e,t)}catch(e){}if(A(e,t))return s(!o.f.call(e,t),e[t])}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\").f,s={}.toString,i=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&\"[object Window]\"==s.call(e)?function(e){try{return o(e)}catch(e){return i.slice()}}(e):o(n(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\").concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\":function(e,t){t.f=Object.getOwnPropertySymbols},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js\"),a=s(\"IE_PROTO\"),A=Object.prototype;e.exports=i?Object.getPrototypeOf:function(e){return e=o(e),n(e,a)?e[a]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?A:null}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js\").indexOf,i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\");e.exports=function(e,t){var r,a=o(e),A=0,u=[];for(r in a)!n(i,r)&&n(a,r)&&u.push(r);for(;t.length>A;)n(a,r=t[A++])&&(~s(u,r)||u.push(r));return u}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js\");e.exports=Object.keys||function(e){return n(e,o)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\":function(e,t){\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);t.f=o?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js\");e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,\"__proto__\").set).call(r,[]),t=r instanceof Array}catch(e){}return function(r,s){return n(r),o(s),t?e.call(r,s):r.__proto__=s,r}}():void 0)},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js\");e.exports=n?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\");e.exports=function(e,t){var r,o;if(\"string\"===t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(\"string\"!==t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\");e.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(i(e)),r=s.f;return r?t.concat(r(e)):t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\");e.exports=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),u=A.get,c=A.enforce,l=String(String).split(\"String\");(e.exports=function(e,t,r,a){var A,u=!!a&&!!a.unsafe,d=!!a&&!!a.enumerable,f=!!a&&!!a.noTargetGet;\"function\"==typeof r&&(\"string\"!=typeof t||s(r,\"name\")||o(r,\"name\",t),(A=c(r)).source||(A.source=l.join(\"string\"==typeof t?t:\"\"))),e!==n?(u?!f&&e[t]&&(d=!0):delete e[t],d?e[t]=r:o(e,t,r)):d?e[t]=r:i(t,r)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&u(this).source||a(this)}))},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\");e.exports=function(){var e=n(this),t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.dotAll&&(t+=\"s\"),e.unicode&&(t+=\"u\"),e.sticky&&(t+=\"y\"),t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\":function(e){e.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\");e.exports=function(e,t){try{Object.defineProperty(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),s=n(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js\"),s=\"__core-js_shared__\",i=n[s]||o(s,{});e.exports=i},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js\");(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.16.0\",mode:n?\"pure\":\"global\",copyright:\"© 2021 Denis Pushkarev (zloirock.ru)\"})},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\");e.exports=function(e){return n((function(){var t=\"\"[e]('\"');return t!==t.toLowerCase()||t.split('\"').length>3}))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),i=function(e){return function(t,r){var i,a,A=o(s(t)),u=n(r),c=A.length;return u\u003C0||u>=c?e?\"\":void 0:(i=A.charCodeAt(u))\u003C55296||i>56319||u+1===c||(a=A.charCodeAt(u+1))\u003C56320||a>57343?e?A.charAt(u):i:e?A.slice(u,u+2):a-56320+(i-55296\u003C\u003C10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=\"[\"+r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js\")+\"]\",i=RegExp(\"^\"+s+s+\"*\"),a=RegExp(s+s+\"*$\"),A=function(e){return function(t){var r=o(n(t));return 1&e&&(r=r.replace(i,\"\")),2&e&&(r=r.replace(a,\"\")),r}};e.exports={start:A(1),end:A(2),trim:A(3)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=Math.max,s=Math.min;e.exports=function(e,t){var r=n(e);return r\u003C0?o(r+t,0):s(r,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return n(o(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\":function(e){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js\"),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js\");e.exports=function(e){return Object(n(e))}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toPrimitive\");e.exports=function(e,t){if(!n(e)||o(e))return e;var r,a=e[i];if(void 0!==a){if(void 0===t&&(t=\"default\"),r=a.call(e,t),!n(r)||o(r))return r;throw TypeError(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),s(e,t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\");e.exports=function(e){var t=n(e,\"string\");return o(t)?t:String(t)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\":function(e,t,r){var n={};n[r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\")(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(n)},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\");e.exports=function(e){if(n(e))throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\":function(e){var t=0,r=Math.random();e.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++t+r).toString(36)}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\");e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\");t.f=n},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js\"),u=o(\"wks\"),c=n.Symbol,l=A?c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)&&(a||\"string\"==typeof u[e])||(a&&s(c,e)?u[e]=c[e]:u[e]=l(\"Symbol.\"+e)),u[e]}},\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js\":function(e){e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js\"),h=d(\"isConcatSpreadable\"),p=9007199254740991,m=\"Maximum allowed index exceeded\",g=f>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),y=l(\"concat\"),v=function(e){if(!i(e))return!1;var t=e[h];return void 0!==t?!!t:s(e)};n({target:\"Array\",proto:!0,forced:!g||!y},{concat:function(e){var t,r,n,o,s,i=a(this),l=c(i,0),d=0;for(t=-1,n=arguments.length;t\u003Cn;t++)if(v(s=-1===t?i:arguments[t])){if(d+(o=A(s.length))>p)throw TypeError(m);for(r=0;r\u003Co;r++,d++)r in s&&u(l,d,s[r])}else{if(d>=p)throw TypeError(m);u(l,d++,s)}return l.length=d,l}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\"),A=\"Array Iterator\",u=i.set,c=i.getterFor(A);e.exports=a(Array,\"Array\",(function(e,t){u(this,{type:A,target:n(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,{value:void 0,done:!0}):\"keys\"==r?{value:n,done:!1}:\"values\"==r?{value:t[n],done:!1}:{value:[n,t[n]],done:!1}}),\"values\"),s.Arguments=s.Array,o(\"keys\"),o(\"values\"),o(\"entries\")},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js\"),a=[].join,A=o!=Object,u=i(\"join\",\",\");n({target:\"Array\",proto:!0,forced:A||!u},{join:function(e){return a.call(s(this),void 0===e?\",\":e)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").map;n({target:\"Array\",proto:!0,forced:!r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\")(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js\")(\"slice\"),d=c(\"species\"),f=[].slice,h=Math.max;n({target:\"Array\",proto:!0,forced:!l},{slice:function(e,t){var r,n,c,l=A(this),p=a(l.length),m=i(e,p),g=i(void 0===t?p:t,p);if(s(l)&&(\"function\"!=typeof(r=l.constructor)||r!==Array&&!s(r.prototype)?o(r)&&null===(r=r[d])&&(r=void 0):r=void 0,r===Array||void 0===r))return f.call(l,m,g);for(n=new(void 0===r?Array:r)(h(g-m,0)),c=0;m\u003Cg;m++,c++)m in l&&u(n,c,l[m]);return n.length=c,n}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,s=Function.prototype,i=s.toString,a=\u002F^\\s*function ([^ (]*)\u002F,A=\"name\";n&&!(A in s)&&o(s,A,{configurable:!0,get:function(){try{return i.call(this).match(a)[1]}catch(e){return\"\"}}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\").f,p=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\").f,m=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,g=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js\").trim,y=\"Number\",v=o.Number,w=v.prototype,b=A(f(w))==y,B=function(e){if(c(e))throw TypeError(\"Cannot convert a Symbol value to a number\");var t,r,n,o,s,i,a,A,u=l(e,\"number\");if(\"string\"==typeof u&&u.length>2)if(43===(t=(u=g(u)).charCodeAt(0))||45===t){if(88===(r=u.charCodeAt(2))||120===r)return NaN}else if(48===t){switch(u.charCodeAt(1)){case 66:case 98:n=2,o=49;break;case 79:case 111:n=8,o=55;break;default:return+u}for(i=(s=u.slice(2)).length,a=0;a\u003Ci;a++)if((A=s.charCodeAt(a))\u003C48||A>o)return NaN;return parseInt(s,n)}return+u};if(s(y,!v(\" 0o1\")||!v(\"0b1\")||v(\"+0x1\"))){for(var j,_=function(e){var t=arguments.length\u003C1?0:e,r=this;return r instanceof _&&(b?d((function(){w.valueOf.call(r)})):A(r)!=y)?u(new v(B(t)),r,_):B(t)},C=n?h(v):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range\".split(\",\"),x=0;C.length>x;x++)a(v,j=C[x])&&!a(_,j)&&m(_,j,p(v,j));_.prototype=w,w.constructor=_,i(o,y,_)}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js\");n({target:\"Object\",stat:!0,forced:Object.assign!==o},{assign:o})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\");n({target:\"Object\",stat:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\")((function(){s(1)}))},{keys:function(e){return s(o(e))}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js\");n||o(Object.prototype,\"toString\",s,{unsafe:!0})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js\"),A=\"toString\",u=RegExp.prototype,c=u.toString,l=i((function(){return\"\u002Fa\u002Fb\"!=c.call({source:\"a\",flags:\"b\"})})),d=c.name!=A;(l||d)&&n(RegExp.prototype,A,(function(){var e=o(this),t=s(e.source),r=e.flags;return\"\u002F\"+t+\"\u002F\"+s(void 0===r&&e instanceof RegExp&&!(\"flags\"in u)?a.call(e):r)}),{unsafe:!0})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js\").charAt,o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js\"),a=\"String Iterator\",A=s.set,u=s.getterFor(a);i(String,\"String\",(function(e){A(this,{type:a,string:o(e),index:0})}),(function(){var e,t=u(this),r=t.string,o=t.index;return o>=r.length?{value:void 0,done:!0}:(e=n(r,o),t.index+=e.length,{value:e,done:!1})}))},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js\");n({target:\"String\",proto:!0,forced:r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js\")(\"link\")},{link:function(e){return o(this,\"a\",\"href\",e)}})},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\").f,u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js\"),c=s.Symbol;if(o&&\"function\"==typeof c&&(!(\"description\"in c.prototype)||void 0!==c().description)){var l={},d=function(){var e=arguments.length\u003C1||void 0===arguments[0]?void 0:String(arguments[0]),t=this instanceof d?new c(e):void 0===e?c():c(e);return\"\"===e&&(l[t]=!0),t};u(d,c);var f=d.prototype=c.prototype;f.constructor=d;var h=f.toString,p=\"Symbol(test)\"==String(c(\"test\")),m=\u002F^Symbol\\((.*)\\)[^)]+$\u002F;A(f,\"description\",{configurable:!0,get:function(){var e=a(this)?this.valueOf():this,t=h.call(e);if(i(l,e))return\"\";var r=p?t.slice(7,-1):t.replace(m,\"$1\");return\"\"===r?void 0:r}}),n({global:!0,forced:!0},{Symbol:d})}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js\":function(e,t,r){r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\")(\"iterator\")},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js\":function(e,t,r){\"use strict\";var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js\"),A=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js\"),u=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js\"),c=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js\"),l=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js\"),d=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js\"),f=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js\"),h=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js\"),p=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js\"),m=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js\"),g=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js\"),y=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js\"),v=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js\"),w=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js\"),b=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js\"),B=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js\"),j=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js\"),_=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js\"),C=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js\"),x=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js\"),E=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js\"),N=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),Q=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js\"),F=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js\"),U=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js\"),S=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js\"),L=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js\"),T=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),H=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js\"),I=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js\"),P=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js\"),O=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js\"),k=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js\").forEach,R=U(\"hidden\"),M=\"Symbol\",D=T(\"toPrimitive\"),K=O.set,z=O.getterFor(M),V=Object.prototype,q=o.Symbol,G=s(\"JSON\",\"stringify\"),X=C.f,W=x.f,J=j.f,Y=E.f,Z=F(\"symbols\"),$=F(\"op-symbols\"),ee=F(\"string-to-symbol-registry\"),te=F(\"symbol-to-string-registry\"),re=F(\"wks\"),ne=o.QObject,oe=!ne||!ne.prototype||!ne.prototype.findChild,se=a&&u((function(){return 7!=w(W({},\"a\",{get:function(){return W(this,\"a\",{value:7}).a}})).a}))?function(e,t,r){var n=X(V,t);n&&delete V[t],W(e,t,r),n&&e!==V&&W(V,t,n)}:W,ie=function(e,t){var r=Z[e]=w(q.prototype);return K(r,{type:M,tag:e,description:t}),a||(r.description=t),r},ae=function(e,t,r){e===V&&ae($,t,r),h(e);var n=g(t);return h(r),c(Z,n)?(r.enumerable?(c(e,R)&&e[R][n]&&(e[R][n]=!1),r=w(r,{enumerable:v(0,!1)})):(c(e,R)||W(e,R,v(1,{})),e[R][n]=!0),se(e,n,r)):W(e,n,r)},Ae=function(e,t){h(e);var r=m(t),n=b(r).concat(de(r));return k(n,(function(t){a&&!ue.call(r,t)||ae(e,t,r[t])})),e},ue=function(e){var t=g(e),r=Y.call(this,t);return!(this===V&&c(Z,t)&&!c($,t))&&(!(r||!c(this,t)||!c(Z,t)||c(this,R)&&this[R][t])||r)},ce=function(e,t){var r=m(e),n=g(t);if(r!==V||!c(Z,n)||c($,n)){var o=X(r,n);return!o||!c(Z,n)||c(r,R)&&r[R][n]||(o.enumerable=!0),o}},le=function(e){var t=J(m(e)),r=[];return k(t,(function(e){c(Z,e)||c(S,e)||r.push(e)})),r},de=function(e){var t=e===V,r=J(t?$:m(e)),n=[];return k(r,(function(e){!c(Z,e)||t&&!c(V,e)||n.push(Z[e])})),n};A||(Q((q=function(){if(this instanceof q)throw TypeError(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?y(arguments[0]):void 0,t=L(e),r=function(e){this===V&&r.call($,e),c(this,R)&&c(this[R],t)&&(this[R][t]=!1),se(this,t,v(1,e))};return a&&oe&&se(V,t,{configurable:!0,set:r}),ie(t,e)}).prototype,\"toString\",(function(){return z(this).tag})),Q(q,\"withoutSetter\",(function(e){return ie(L(e),e)})),E.f=ue,x.f=ae,C.f=ce,B.f=j.f=le,_.f=de,H.f=function(e){return ie(T(e),e)},a&&(W(q.prototype,\"description\",{configurable:!0,get:function(){return z(this).description}}),i||Q(V,\"propertyIsEnumerable\",ue,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!A,sham:!A},{Symbol:q}),k(b(re),(function(e){I(e)})),n({target:M,stat:!0,forced:!A},{for:function(e){var t=y(e);if(c(ee,t))return ee[t];var r=q(t);return ee[t]=r,te[r]=t,r},keyFor:function(e){if(!f(e))throw TypeError(e+\" is not a symbol\");if(c(te,e))return te[e]},useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),n({target:\"Object\",stat:!0,forced:!A,sham:!a},{create:function(e,t){return void 0===t?w(e):Ae(w(e),t)},defineProperty:ae,defineProperties:Ae,getOwnPropertyDescriptor:ce}),n({target:\"Object\",stat:!0,forced:!A},{getOwnPropertyNames:le,getOwnPropertySymbols:de}),n({target:\"Object\",stat:!0,forced:u((function(){_.f(1)}))},{getOwnPropertySymbols:function(e){return _.f(p(e))}}),G&&n({target:\"JSON\",stat:!0,forced:!A||u((function(){var e=q();return\"[null]\"!=G([e])||\"{}\"!=G({a:e})||\"{}\"!=G(Object(e))}))},{stringify:function(e,t,r){for(var n,o=[e],s=1;arguments.length>s;)o.push(arguments[s++]);if(n=t,(d(t)||void 0!==e)&&!f(e))return l(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!f(t))return t}),o[1]=t,G.apply(null,o)}}),q.prototype[D]||N(q.prototype,D,q.prototype.valueOf),P(q,M),S[R]=!0},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\");for(var a in o){var A=n[a],u=A&&A.prototype;if(u&&u.forEach!==s)try{i(u,\"forEach\",s)}catch(e){u.forEach=s}}},\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js\":function(e,t,r){var n=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js\"),o=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js\"),s=r(\".\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js\"),i=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js\"),a=r(\".\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js\"),A=a(\"iterator\"),u=a(\"toStringTag\"),c=s.values;for(var l in o){var d=n[l],f=d&&d.prototype;if(f){if(f[A]!==c)try{i(f,A,c)}catch(e){f[A]=c}if(f[u]||i(f,u,l),o[l])for(var h in s)if(f[h]!==s[h])try{i(f,h,s[h])}catch(e){f[h]=s[h]}}}},\".\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js\":function(e){e.exports=function(){\"use strict\";var e=Object.hasOwnProperty,t=Object.setPrototypeOf,r=Object.isFrozen,n=Object.getPrototypeOf,o=Object.getOwnPropertyDescriptor,s=Object.freeze,i=Object.seal,a=Object.create,A=\"undefined\"!=typeof Reflect&&Reflect,u=A.apply,c=A.construct;u||(u=function(e,t,r){return e.apply(t,r)}),s||(s=function(e){return e}),i||(i=function(e){return e}),c||(c=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t\u003Ce.length;t++)r[t]=e[t];return r}return Array.from(e)}(t))))});var l,d=B(Array.prototype.forEach),f=B(Array.prototype.pop),h=B(Array.prototype.push),p=B(String.prototype.toLowerCase),m=B(String.prototype.match),g=B(String.prototype.replace),y=B(String.prototype.indexOf),v=B(String.prototype.trim),w=B(RegExp.prototype.test),b=(l=TypeError,function(){for(var e=arguments.length,t=Array(e),r=0;r\u003Ce;r++)t[r]=arguments[r];return c(l,t)});function B(e){return function(t){for(var r=arguments.length,n=Array(r>1?r-1:0),o=1;o\u003Cr;o++)n[o-1]=arguments[o];return u(e,t,n)}}function j(e,n){t&&t(e,null);for(var o=n.length;o--;){var s=n[o];if(\"string\"==typeof s){var i=p(s);i!==s&&(r(n)||(n[o]=i),s=i)}e[s]=!0}return e}function _(t){var r=a(null),n=void 0;for(n in t)u(e,t,[n])&&(r[n]=t[n]);return r}function C(e,t){for(;null!==e;){var r=o(e,t);if(r){if(r.get)return B(r.get);if(\"function\"==typeof r.value)return B(r.value)}e=n(e)}return function(e){return console.warn(\"fallback value for\",e),null}}var x=s([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),E=s([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),N=s([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),Q=s([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"fedropshadow\",\"feimage\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),F=s([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\"]),U=s([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),S=s([\"#text\"]),L=s([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),T=s([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),H=s([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),I=s([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),P=i(\u002F\\{\\{[\\s\\S]*|[\\s\\S]*\\}\\}\u002Fgm),O=i(\u002F\u003C%[\\s\\S]*|[\\s\\S]*%>\u002Fgm),k=i(\u002F^data-[\\-\\w.\\u00B7-\\uFFFF]\u002F),R=i(\u002F^aria-[\\-\\w]+$\u002F),M=i(\u002F^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))\u002Fi),D=i(\u002F^(?:\\w+script|data):\u002Fi),K=i(\u002F[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]\u002Fg),z=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};function V(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t\u003Ce.length;t++)r[t]=e[t];return r}return Array.from(e)}var q=function(){return\"undefined\"==typeof window?null:window},G=function(e,t){if(\"object\"!==(void 0===e?\"undefined\":z(e))||\"function\"!=typeof e.createPolicy)return null;var r=null,n=\"data-tt-policy-suffix\";t.currentScript&&t.currentScript.hasAttribute(n)&&(r=t.currentScript.getAttribute(n));var o=\"dompurify\"+(r?\"#\"+r:\"\");try{return e.createPolicy(o,{createHTML:function(e){return e}})}catch(e){return console.warn(\"TrustedTypes policy \"+o+\" could not be created.\"),null}};return function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:q(),r=function(t){return e(t)};if(r.version=\"2.3.0\",r.removed=[],!t||!t.document||9!==t.document.nodeType)return r.isSupported=!1,r;var n=t.document,o=t.document,i=t.DocumentFragment,a=t.HTMLTemplateElement,A=t.Node,u=t.Element,c=t.NodeFilter,l=t.NamedNodeMap,B=void 0===l?t.NamedNodeMap||t.MozNamedAttrMap:l,X=t.Text,W=t.Comment,J=t.DOMParser,Y=t.trustedTypes,Z=u.prototype,$=C(Z,\"cloneNode\"),ee=C(Z,\"nextSibling\"),te=C(Z,\"childNodes\"),re=C(Z,\"parentNode\");if(\"function\"==typeof a){var ne=o.createElement(\"template\");ne.content&&ne.content.ownerDocument&&(o=ne.content.ownerDocument)}var oe=G(Y,n),se=oe&&Pe?oe.createHTML(\"\"):\"\",ie=o,ae=ie.implementation,Ae=ie.createNodeIterator,ue=ie.createDocumentFragment,ce=ie.getElementsByTagName,le=n.importNode,de={};try{de=_(o).documentMode?o.documentMode:{}}catch(e){}var fe={};r.isSupported=\"function\"==typeof re&&ae&&void 0!==ae.createHTMLDocument&&9!==de;var he=P,pe=O,me=k,ge=R,ye=D,ve=K,we=M,be=null,Be=j({},[].concat(V(x),V(E),V(N),V(F),V(S))),je=null,_e=j({},[].concat(V(L),V(T),V(H),V(I))),Ce=null,xe=null,Ee=!0,Ne=!0,Qe=!1,Fe=!1,Ue=!1,Se=!1,Le=!1,Te=!1,He=!1,Ie=!0,Pe=!1,Oe=!0,ke=!0,Re=!1,Me={},De=j({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]),Ke=null,ze=j({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]),Ve=null,qe=j({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ge=\"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML\",Xe=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\",We=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxhtml\",Je=We,Ye=!1,Ze=null,$e=o.createElement(\"form\"),et=function(e){Ze&&Ze===e||(e&&\"object\"===(void 0===e?\"undefined\":z(e))||(e={}),e=_(e),be=\"ALLOWED_TAGS\"in e?j({},e.ALLOWED_TAGS):Be,je=\"ALLOWED_ATTR\"in e?j({},e.ALLOWED_ATTR):_e,Ve=\"ADD_URI_SAFE_ATTR\"in e?j(_(qe),e.ADD_URI_SAFE_ATTR):qe,Ke=\"ADD_DATA_URI_TAGS\"in e?j(_(ze),e.ADD_DATA_URI_TAGS):ze,Ce=\"FORBID_TAGS\"in e?j({},e.FORBID_TAGS):{},xe=\"FORBID_ATTR\"in e?j({},e.FORBID_ATTR):{},Me=\"USE_PROFILES\"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,Qe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=e.SAFE_FOR_TEMPLATES||!1,Ue=e.WHOLE_DOCUMENT||!1,Te=e.RETURN_DOM||!1,He=e.RETURN_DOM_FRAGMENT||!1,Ie=!1!==e.RETURN_DOM_IMPORT,Pe=e.RETURN_TRUSTED_TYPE||!1,Le=e.FORCE_BODY||!1,Oe=!1!==e.SANITIZE_DOM,ke=!1!==e.KEEP_CONTENT,Re=e.IN_PLACE||!1,we=e.ALLOWED_URI_REGEXP||we,Je=e.NAMESPACE||We,Fe&&(Ne=!1),He&&(Te=!0),Me&&(be=j({},[].concat(V(S))),je=[],!0===Me.html&&(j(be,x),j(je,L)),!0===Me.svg&&(j(be,E),j(je,T),j(je,I)),!0===Me.svgFilters&&(j(be,N),j(je,T),j(je,I)),!0===Me.mathMl&&(j(be,F),j(je,H),j(je,I))),e.ADD_TAGS&&(be===Be&&(be=_(be)),j(be,e.ADD_TAGS)),e.ADD_ATTR&&(je===_e&&(je=_(je)),j(je,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&j(Ve,e.ADD_URI_SAFE_ATTR),ke&&(be[\"#text\"]=!0),Ue&&j(be,[\"html\",\"head\",\"body\"]),be.table&&(j(be,[\"tbody\"]),delete Ce.tbody),s&&s(e),Ze=e)},tt=j({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),rt=j({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),nt=j({},E);j(nt,N),j(nt,Q);var ot=j({},F);j(ot,U);var st=function(e){var t=re(e);t&&t.tagName||(t={namespaceURI:We,tagName:\"template\"});var r=p(e.tagName),n=p(t.tagName);if(e.namespaceURI===Xe)return t.namespaceURI===We?\"svg\"===r:t.namespaceURI===Ge?\"svg\"===r&&(\"annotation-xml\"===n||tt[n]):Boolean(nt[r]);if(e.namespaceURI===Ge)return t.namespaceURI===We?\"math\"===r:t.namespaceURI===Xe?\"math\"===r&&rt[n]:Boolean(ot[r]);if(e.namespaceURI===We){if(t.namespaceURI===Xe&&!rt[n])return!1;if(t.namespaceURI===Ge&&!tt[n])return!1;var o=j({},[\"title\",\"style\",\"font\",\"a\",\"script\"]);return!ot[r]&&(o[r]||!nt[r])}return!1},it=function(e){h(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=se}catch(t){e.remove()}}},at=function(e,t){try{h(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!je[e])if(Te||He)try{it(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},At=function(e){var t=void 0,r=void 0;if(Le)e=\"\u003Cremove>\u003C\u002Fremove>\"+e;else{var n=m(e,\u002F^[\\r\\n\\t ]+\u002F);r=n&&n[0]}var s=oe?oe.createHTML(e):e;if(Je===We)try{t=(new J).parseFromString(s,\"text\u002Fhtml\")}catch(e){}if(!t||!t.documentElement){t=ae.createDocument(Je,\"template\",null);try{t.documentElement.innerHTML=Ye?\"\":s}catch(e){}}var i=t.body||t.documentElement;return e&&r&&i.insertBefore(o.createTextNode(r),i.childNodes[0]||null),Je===We?ce.call(t,Ue?\"html\":\"body\")[0]:Ue?t.documentElement:i},ut=function(e){return Ae.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},ct=function(e){return!(e instanceof X||e instanceof W||\"string\"==typeof e.nodeName&&\"string\"==typeof e.textContent&&\"function\"==typeof e.removeChild&&e.attributes instanceof B&&\"function\"==typeof e.removeAttribute&&\"function\"==typeof e.setAttribute&&\"string\"==typeof e.namespaceURI&&\"function\"==typeof e.insertBefore)},lt=function(e){return\"object\"===(void 0===A?\"undefined\":z(A))?e instanceof A:e&&\"object\"===(void 0===e?\"undefined\":z(e))&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},dt=function(e,t,n){fe[e]&&d(fe[e],(function(e){e.call(r,t,n,Ze)}))},ft=function(e){var t=void 0;if(dt(\"beforeSanitizeElements\",e,null),ct(e))return it(e),!0;if(m(e.nodeName,\u002F[\\u0080-\\uFFFF]\u002F))return it(e),!0;var n=p(e.nodeName);if(dt(\"uponSanitizeElement\",e,{tagName:n,allowedTags:be}),!lt(e.firstElementChild)&&(!lt(e.content)||!lt(e.content.firstElementChild))&&w(\u002F\u003C[\u002F\\w]\u002Fg,e.innerHTML)&&w(\u002F\u003C[\u002F\\w]\u002Fg,e.textContent))return it(e),!0;if(!be[n]||Ce[n]){if(ke&&!De[n]){var o=re(e)||e.parentNode,s=te(e)||e.childNodes;if(s&&o)for(var i=s.length-1;i>=0;--i)o.insertBefore($(s[i],!0),ee(e))}return it(e),!0}return e instanceof u&&!st(e)?(it(e),!0):\"noscript\"!==n&&\"noembed\"!==n||!w(\u002F\u003C\\\u002Fno(script|embed)\u002Fi,e.innerHTML)?(Fe&&3===e.nodeType&&(t=e.textContent,t=g(t,he,\" \"),t=g(t,pe,\" \"),e.textContent!==t&&(h(r.removed,{element:e.cloneNode()}),e.textContent=t)),dt(\"afterSanitizeElements\",e,null),!1):(it(e),!0)},ht=function(e,t,r){if(Oe&&(\"id\"===t||\"name\"===t)&&(r in o||r in $e))return!1;if(Ne&&!xe[t]&&w(me,t));else if(Ee&&w(ge,t));else{if(!je[t]||xe[t])return!1;if(Ve[t]);else if(w(we,g(r,ve,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==y(r,\"data:\")||!Ke[e])if(Qe&&!w(ye,g(r,ve,\"\")));else if(r)return!1}return!0},pt=function(e){var t=void 0,n=void 0,o=void 0,s=void 0;dt(\"beforeSanitizeAttributes\",e,null);var i=e.attributes;if(i){var a={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:je};for(s=i.length;s--;){var A=t=i[s],u=A.name,c=A.namespaceURI;if(n=v(t.value),o=p(u),a.attrName=o,a.attrValue=n,a.keepAttr=!0,a.forceKeepAttr=void 0,dt(\"uponSanitizeAttribute\",e,a),n=a.attrValue,!a.forceKeepAttr&&(at(u,e),a.keepAttr))if(w(\u002F\\\u002F>\u002Fi,n))at(u,e);else{Fe&&(n=g(n,he,\" \"),n=g(n,pe,\" \"));var l=e.nodeName.toLowerCase();if(ht(l,o,n))try{c?e.setAttributeNS(c,u,n):e.setAttribute(u,n),f(r.removed)}catch(e){}}}dt(\"afterSanitizeAttributes\",e,null)}},mt=function e(t){var r=void 0,n=ut(t);for(dt(\"beforeSanitizeShadowDOM\",t,null);r=n.nextNode();)dt(\"uponSanitizeShadowNode\",r,null),ft(r)||(r.content instanceof i&&e(r.content),pt(r));dt(\"afterSanitizeShadowDOM\",t,null)};return r.sanitize=function(e,o){var s=void 0,a=void 0,u=void 0,c=void 0,l=void 0;if((Ye=!e)&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!lt(e)){if(\"function\"!=typeof e.toString)throw b(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw b(\"dirty is not a string, aborting\")}if(!r.isSupported){if(\"object\"===z(t.toStaticHTML)||\"function\"==typeof t.toStaticHTML){if(\"string\"==typeof e)return t.toStaticHTML(e);if(lt(e))return t.toStaticHTML(e.outerHTML)}return e}if(Se||et(o),r.removed=[],\"string\"==typeof e&&(Re=!1),Re);else if(e instanceof A)1===(a=(s=At(\"\\x3c!----\\x3e\")).ownerDocument.importNode(e,!0)).nodeType&&\"BODY\"===a.nodeName||\"HTML\"===a.nodeName?s=a:s.appendChild(a);else{if(!Te&&!Fe&&!Ue&&-1===e.indexOf(\"\u003C\"))return oe&&Pe?oe.createHTML(e):e;if(!(s=At(e)))return Te?null:se}s&&Le&&it(s.firstChild);for(var d=ut(Re?e:s);u=d.nextNode();)3===u.nodeType&&u===c||ft(u)||(u.content instanceof i&&mt(u.content),pt(u),c=u);if(c=null,Re)return e;if(Te){if(He)for(l=ue.call(s.ownerDocument);s.firstChild;)l.appendChild(s.firstChild);else l=s;return Ie&&(l=le.call(n,l,!0)),l}var f=Ue?s.outerHTML:s.innerHTML;return Fe&&(f=g(f,he,\" \"),f=g(f,pe,\" \")),oe&&Pe?oe.createHTML(f):f},r.setConfig=function(e){et(e),Se=!0},r.clearConfig=function(){Ze=null,Se=!1},r.isValidAttribute=function(e,t,r){Ze||et({});var n=p(e),o=p(t);return ht(n,o,r)},r.addHook=function(e,t){\"function\"==typeof t&&(fe[e]=fe[e]||[],h(fe[e],t))},r.removeHook=function(e){fe[e]&&f(fe[e])},r.removeHooks=function(e){fe[e]&&(fe[e]=[])},r.removeAllHooks=function(){fe={}},r}()}()},\".\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js\":function(e){var t;t=function(){\"use strict\";function e(e){return\"function\"==typeof e}var t=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},r=0,n=void 0,o=void 0,s=function(e,t){d[r]=e,d[r+1]=t,2===(r+=2)&&(o?o(f):y())},i=\"undefined\"!=typeof window?window:void 0,a=i||{},A=a.MutationObserver||a.WebKitMutationObserver,u=\"undefined\"==typeof self&&\"undefined\"!=typeof process&&\"[object process]\"==={}.toString.call(process),c=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel;function l(){var e=setTimeout;return function(){return e(f,1)}}var d=new Array(1e3);function f(){for(var e=0;e\u003Cr;e+=2)(0,d[e])(d[e+1]),d[e]=void 0,d[e+1]=void 0;r=0}var h,p,m,g,y=void 0;function v(e,t){var r=this,n=new this.constructor(B);void 0===n[b]&&L(n);var o=r._state;if(o){var i=arguments[o-1];s((function(){return U(o,n,i,r._result)}))}else Q(r,n,e,t);return n}function w(e){if(e&&\"object\"==typeof e&&e.constructor===this)return e;var t=new this(B);return C(t,e),t}u?y=function(){return process.nextTick(f)}:A?(p=0,m=new A(f),g=document.createTextNode(\"\"),m.observe(g,{characterData:!0}),y=function(){g.data=p=++p%2}):c?((h=new MessageChannel).port1.onmessage=f,y=function(){return h.port2.postMessage(0)}):y=void 0===i?function(){try{var e=Function(\"return this\")().require(\"vertx\");return void 0!==(n=e.runOnLoop||e.runOnContext)?function(){n(f)}:l()}catch(e){return l()}}():l();var b=Math.random().toString(36).substring(2);function B(){}var j=void 0;function _(t,r,n){r.constructor===t.constructor&&n===v&&r.constructor.resolve===w?function(e,t){1===t._state?E(e,t._result):2===t._state?N(e,t._result):Q(t,void 0,(function(t){return C(e,t)}),(function(t){return N(e,t)}))}(t,r):void 0===n?E(t,r):e(n)?function(e,t,r){s((function(e){var n=!1,o=function(r,o,s,i){try{r.call(o,(function(r){n||(n=!0,t!==r?C(e,r):E(e,r))}),(function(t){n||(n=!0,N(e,t))}))}catch(e){return e}}(r,t,0,0,e._label);!n&&o&&(n=!0,N(e,o))}),e)}(t,r,n):E(t,r)}function C(e,t){if(e===t)N(e,new TypeError(\"You cannot resolve a promise with itself\"));else if(o=typeof(n=t),null===n||\"object\"!==o&&\"function\"!==o)E(e,t);else{var r=void 0;try{r=t.then}catch(t){return void N(e,t)}_(e,t,r)}var n,o}function x(e){e._onerror&&e._onerror(e._result),F(e)}function E(e,t){e._state===j&&(e._result=t,e._state=1,0!==e._subscribers.length&&s(F,e))}function N(e,t){e._state===j&&(e._state=2,e._result=t,s(x,e))}function Q(e,t,r,n){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+1]=r,o[i+2]=n,0===i&&e._state&&s(F,e)}function F(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var n=void 0,o=void 0,s=e._result,i=0;i\u003Ct.length;i+=3)n=t[i],o=t[i+r],n?U(r,n,o,s):o(s);e._subscribers.length=0}}function U(t,r,n,o){var s=e(n),i=void 0,a=void 0,A=!0;if(s){try{i=n(o)}catch(e){A=!1,a=e}if(r===i)return void N(r,new TypeError(\"A promises callback cannot return that same promise.\"))}else i=o;r._state!==j||(s&&A?C(r,i):!1===A?N(r,a):1===t?E(r,i):2===t&&N(r,i))}var S=0;function L(e){e[b]=S++,e._state=void 0,e._result=void 0,e._subscribers=[]}var T=function(){function e(e,r){this._instanceConstructor=e,this.promise=new e(B),this.promise[b]||L(this.promise),t(r)?(this.length=r.length,this._remaining=r.length,this._result=new Array(this.length),0===this.length?E(this.promise,this._result):(this.length=this.length||0,this._enumerate(r),0===this._remaining&&E(this.promise,this._result))):N(this.promise,new Error(\"Array Methods must be provided an Array\"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===j&&t\u003Ce.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var r=this._instanceConstructor,n=r.resolve;if(n===w){var o=void 0,s=void 0,i=!1;try{o=e.then}catch(e){i=!0,s=e}if(o===v&&e._state!==j)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(r===H){var a=new r(B);i?N(a,s):_(a,e,o),this._willSettleAt(a,t)}else this._willSettleAt(new r((function(t){return t(e)})),t)}else this._willSettleAt(n(e),t)},e.prototype._settledAt=function(e,t,r){var n=this.promise;n._state===j&&(this._remaining--,2===e?N(n,r):this._result[t]=r),0===this._remaining&&E(n,this._result)},e.prototype._willSettleAt=function(e,t){var r=this;Q(e,void 0,(function(e){return r._settledAt(1,t,e)}),(function(e){return r._settledAt(2,t,e)}))},e}(),H=function(){function t(e){this[b]=S++,this._result=this._state=void 0,this._subscribers=[],B!==e&&(\"function\"!=typeof e&&function(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}(),this instanceof t?function(e,t){try{t((function(t){C(e,t)}),(function(t){N(e,t)}))}catch(t){N(e,t)}}(this,e):function(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}())}return t.prototype.catch=function(e){return this.then(null,e)},t.prototype.finally=function(t){var r=this,n=r.constructor;return e(t)?r.then((function(e){return n.resolve(t()).then((function(){return e}))}),(function(e){return n.resolve(t()).then((function(){throw e}))})):r.then(t,t)},t}();return H.prototype.then=v,H.all=function(e){return new T(this,e).promise},H.race=function(e){var r=this;return t(e)?new r((function(t,n){for(var o=e.length,s=0;s\u003Co;s++)r.resolve(e[s]).then(t,n)})):new r((function(e,t){return t(new TypeError(\"You must pass an array to race.\"))}))},H.resolve=w,H.reject=function(e){var t=new this(B);return N(t,e),t},H._setScheduler=function(e){o=e},H._setAsap=function(e){s=e},H._asap=s,H.polyfill=function(){var e=void 0;if(\"undefined\"!=typeof global)e=global;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(e){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var t=e.Promise;if(t){var r=null;try{r=Object.prototype.toString.call(t.resolve())}catch(e){}if(\"[object Promise]\"===r&&!t.cast)return}e.Promise=H},H.Promise=H,H},e.exports=t()},\".\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{Deflate:function(){return ve},AsyncDeflate:function(){return we},deflate:function(){return be},deflateSync:function(){return Be},Inflate:function(){return je},AsyncInflate:function(){return _e},inflate:function(){return Ce},inflateSync:function(){return xe},Gzip:function(){return Ee},AsyncGzip:function(){return Ne},gzip:function(){return Qe},gzipSync:function(){return Fe},Gunzip:function(){return Ue},AsyncGunzip:function(){return Se},gunzip:function(){return Le},gunzipSync:function(){return Te},Zlib:function(){return He},AsyncZlib:function(){return Ie},zlib:function(){return Pe},zlibSync:function(){return Oe},Unzlib:function(){return ke},AsyncUnzlib:function(){return Re},unzlib:function(){return Me},unzlibSync:function(){return De},compress:function(){return Qe},AsyncCompress:function(){return Ne},compressSync:function(){return Fe},Compress:function(){return Ee},Decompress:function(){return Ke},AsyncDecompress:function(){return ze},decompress:function(){return Ve},decompressSync:function(){return qe},strToU8:function(){return Xe},strFromU8:function(){return We},zip:function(){return tt},zipSync:function(){return rt},unzip:function(){return nt},unzipSync:function(){return ot}});var n={},o=Uint8Array,s=Uint16Array,i=Uint32Array,a=new o([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),A=new o([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),u=new o([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=function(e,t){for(var r=new s(31),n=0;n\u003C31;++n)r[n]=t+=1\u003C\u003Ce[n-1];var o=new i(r[30]);for(n=1;n\u003C30;++n)for(var a=r[n];a\u003Cr[n+1];++a)o[a]=a-r[n]\u003C\u003C5|n;return[r,o]},l=c(a,2),d=l[0],f=l[1];d[28]=258,f[258]=28;for(var h=c(A,0),p=h[0],m=h[1],g=new s(32768),y=0;y\u003C32768;++y){var v=(43690&y)>>>1|(21845&y)\u003C\u003C1;v=(61680&(v=(52428&v)>>>2|(13107&v)\u003C\u003C2))>>>4|(3855&v)\u003C\u003C4,g[y]=((65280&v)>>>8|(255&v)\u003C\u003C8)>>>1}var w=function(e,t,r){for(var n=e.length,o=0,i=new s(t);o\u003Cn;++o)++i[e[o]-1];var a,A=new s(t);for(o=0;o\u003Ct;++o)A[o]=A[o-1]+i[o-1]\u003C\u003C1;if(r){a=new s(1\u003C\u003Ct);var u=15-t;for(o=0;o\u003Cn;++o)if(e[o])for(var c=o\u003C\u003C4|e[o],l=t-e[o],d=A[e[o]-1]++\u003C\u003Cl,f=d|(1\u003C\u003Cl)-1;d\u003C=f;++d)a[g[d]>>>u]=c}else for(a=new s(n),o=0;o\u003Cn;++o)a[o]=g[A[e[o]-1]++]>>>15-e[o];return a},b=new o(288);for(y=0;y\u003C144;++y)b[y]=8;for(y=144;y\u003C256;++y)b[y]=9;for(y=256;y\u003C280;++y)b[y]=7;for(y=280;y\u003C288;++y)b[y]=8;var B=new o(32);for(y=0;y\u003C32;++y)B[y]=5;var j=w(b,9,0),_=w(b,9,1),C=w(B,5,0),x=w(B,5,1),E=function(e){for(var t=e[0],r=1;r\u003Ce.length;++r)e[r]>t&&(t=e[r]);return t},N=function(e,t,r){var n=t\u002F8>>0;return(e[n]|e[n+1]\u003C\u003C8)>>>(7&t)&r},Q=function(e,t){var r=t\u002F8>>0;return(e[r]|e[r+1]\u003C\u003C8|e[r+2]\u003C\u003C16)>>>(7&t)},F=function(e){return(e\u002F8>>0)+(7&e&&1)},U=function(e,t,r){(null==t||t\u003C0)&&(t=0),(null==r||r>e.length)&&(r=e.length);var n=new(e instanceof s?s:e instanceof i?i:o)(r-t);return n.set(e.subarray(t,r)),n},S=function(e,t,r){var n=e.length,s=!t||r,i=!r||r.i;r||(r={}),t||(t=new o(3*n));var c=function(e){var r=t.length;if(e>r){var n=new o(Math.max(2*r,e));n.set(t),t=n}},l=r.f||0,f=r.p||0,h=r.b||0,m=r.l,g=r.d,y=r.m,v=r.n,b=8*n;do{if(!m){r.f=l=N(e,f,1);var B=N(e,f+1,3);if(f+=3,!B){var j=e[(M=F(f)+4)-4]|e[M-3]\u003C\u003C8,C=M+j;if(C>n){if(i)throw\"unexpected EOF\";break}s&&c(h+j),t.set(e.subarray(M,C),h),r.b=h+=j,r.p=f=8*C;continue}if(1==B)m=_,g=x,y=9,v=5;else{if(2!=B)throw\"invalid block type\";var S=N(e,f,31)+257,L=N(e,f+10,15)+4,T=S+N(e,f+5,31)+1;f+=14;for(var H=new o(T),I=new o(19),P=0;P\u003CL;++P)I[u[P]]=N(e,f+3*P,7);f+=3*L;var O=E(I),k=(1\u003C\u003CO)-1;if(!i&&f+T*(O+7)>b)break;var R=w(I,O,1);for(P=0;P\u003CT;){var M,D=R[N(e,f,k)];if(f+=15&D,(M=D>>>4)\u003C16)H[P++]=M;else{var K=0,z=0;for(16==M?(z=3+N(e,f,3),f+=2,K=H[P-1]):17==M?(z=3+N(e,f,7),f+=3):18==M&&(z=11+N(e,f,127),f+=7);z--;)H[P++]=K}}var V=H.subarray(0,S),q=H.subarray(S);y=E(V),v=E(q),m=w(V,y,1),g=w(q,v,1)}if(f>b)throw\"unexpected EOF\"}s&&c(h+131072);for(var G=(1\u003C\u003Cy)-1,X=(1\u003C\u003Cv)-1,W=y+v+18;i||f+W\u003Cb;){var J=(K=m[Q(e,f)&G])>>>4;if((f+=15&K)>b)throw\"unexpected EOF\";if(!K)throw\"invalid length\u002Fliteral\";if(J\u003C256)t[h++]=J;else{if(256==J){m=null;break}var Y=J-254;if(J>264){var Z=a[P=J-257];Y=N(e,f,(1\u003C\u003CZ)-1)+d[P],f+=Z}var $=g[Q(e,f)&X],ee=$>>>4;if(!$)throw\"invalid distance\";if(f+=15&$,q=p[ee],ee>3&&(Z=A[ee],q+=Q(e,f)&(1\u003C\u003CZ)-1,f+=Z),f>b)throw\"unexpected EOF\";s&&c(h+131072);for(var te=h+Y;h\u003Cte;h+=4)t[h]=t[h-q],t[h+1]=t[h+1-q],t[h+2]=t[h+2-q],t[h+3]=t[h+3-q];h=te}}r.l=m,r.p=f,r.b=h,m&&(l=1,r.m=y,r.d=g,r.n=v)}while(!l);return h==t.length?t:U(t,0,h)},L=function(e,t,r){r\u003C\u003C=7&t;var n=t\u002F8>>0;e[n]|=r,e[n+1]|=r>>>8},T=function(e,t,r){r\u003C\u003C=7&t;var n=t\u002F8>>0;e[n]|=r,e[n+1]|=r>>>8,e[n+2]|=r>>>16},H=function(e,t){for(var r=[],n=0;n\u003Ce.length;++n)e[n]&&r.push({s:n,f:e[n]});var i=r.length,a=r.slice();if(!i)return[new o(0),0];if(1==i){var A=new o(r[0].s+1);return A[r[0].s]=1,[A,1]}r.sort((function(e,t){return e.f-t.f})),r.push({s:-1,f:25001});var u=r[0],c=r[1],l=0,d=1,f=2;for(r[0]={s:-1,f:u.f+c.f,l:u,r:c};d!=i-1;)u=r[r[l].f\u003Cr[f].f?l++:f++],c=r[l!=d&&r[l].f\u003Cr[f].f?l++:f++],r[d++]={s:-1,f:u.f+c.f,l:u,r:c};var h=a[0].s;for(n=1;n\u003Ci;++n)a[n].s>h&&(h=a[n].s);var p=new s(h+1),m=I(r[d-1],p,0);if(m>t){n=0;var g=0,y=m-t,v=1\u003C\u003Cy;for(a.sort((function(e,t){return p[t.s]-p[e.s]||e.f-t.f}));n\u003Ci;++n){var w=a[n].s;if(!(p[w]>t))break;g+=v-(1\u003C\u003Cm-p[w]),p[w]=t}for(g>>>=y;g>0;){var b=a[n].s;p[b]\u003Ct?g-=1\u003C\u003Ct-p[b]++-1:++n}for(;n>=0&&g;--n){var B=a[n].s;p[B]==t&&(--p[B],++g)}m=t}return[new o(p),m]},I=function(e,t,r){return-1==e.s?Math.max(I(e.l,t,r+1),I(e.r,t,r+1)):t[e.s]=r},P=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new s(++t),n=0,o=e[0],i=1,a=function(e){r[n++]=e},A=1;A\u003C=t;++A)if(e[A]==o&&A!=t)++i;else{if(!o&&i>2){for(;i>138;i-=138)a(32754);i>2&&(a(i>10?i-11\u003C\u003C5|28690:i-3\u003C\u003C5|12305),i=0)}else if(i>3){for(a(o),--i;i>6;i-=6)a(8304);i>2&&(a(i-3\u003C\u003C5|8208),i=0)}for(;i--;)a(o);i=1,o=e[A]}return[r.subarray(0,n),t]},O=function(e,t){for(var r=0,n=0;n\u003Ct.length;++n)r+=e[n]*t[n];return r},k=function(e,t,r){var n=r.length,o=F(t+2);e[o]=255&n,e[o+1]=n>>>8,e[o+2]=255^e[o],e[o+3]=255^e[o+1];for(var s=0;s\u003Cn;++s)e[o+s+4]=r[s];return 8*(o+4+n)},R=function(e,t,r,n,o,i,c,l,d,f,h){L(t,h++,r),++o[256];for(var p=H(o,15),m=p[0],g=p[1],y=H(i,15),v=y[0],_=y[1],x=P(m),E=x[0],N=x[1],Q=P(v),F=Q[0],U=Q[1],S=new s(19),I=0;I\u003CE.length;++I)S[31&E[I]]++;for(I=0;I\u003CF.length;++I)S[31&F[I]]++;for(var R=H(S,7),M=R[0],D=R[1],K=19;K>4&&!M[u[K-1]];--K);var z,V,q,G,X=f+5\u003C\u003C3,W=O(o,b)+O(i,B)+c,J=O(o,m)+O(i,v)+c+14+3*K+O(S,M)+(2*S[16]+3*S[17]+7*S[18]);if(X\u003C=W&&X\u003C=J)return k(t,h,e.subarray(d,d+f));if(L(t,h,1+(J\u003CW)),h+=2,J\u003CW){z=w(m,g,0),V=m,q=w(v,_,0),G=v;var Y=w(M,D,0);for(L(t,h,N-257),L(t,h+5,U-1),L(t,h+10,K-4),h+=14,I=0;I\u003CK;++I)L(t,h+3*I,M[u[I]]);h+=3*K;for(var Z=[E,F],$=0;$\u003C2;++$){var ee=Z[$];for(I=0;I\u003Cee.length;++I){var te=31&ee[I];L(t,h,Y[te]),h+=M[te],te>15&&(L(t,h,ee[I]>>>5&127),h+=ee[I]>>>12)}}}else z=j,V=b,q=C,G=B;for(I=0;I\u003Cl;++I)if(n[I]>255){te=n[I]>>>18&31,T(t,h,z[te+257]),h+=V[te+257],te>7&&(L(t,h,n[I]>>>23&31),h+=a[te]);var re=31&n[I];T(t,h,q[re]),h+=G[re],re>3&&(T(t,h,n[I]>>>5&8191),h+=A[re])}else T(t,h,z[n[I]]),h+=V[n[I]];return T(t,h,z[256]),h+V[256]},M=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),D=new o(0),K=function(e,t,r,n,u,c){var l=e.length,d=new o(n+l+5*(1+Math.floor(l\u002F7e3))+u),h=d.subarray(n,d.length-u),p=0;if(!t||l\u003C8)for(var g=0;g\u003C=l;g+=65535){var y=g+65535;y\u003Cl?p=k(h,p,e.subarray(g,y)):(h[g]=c,p=k(h,p,e.subarray(g,l)))}else{for(var v=M[t-1],w=v>>>13,b=8191&v,B=(1\u003C\u003Cr)-1,j=new s(32768),_=new s(B+1),C=Math.ceil(r\u002F3),x=2*C,E=function(t){return(e[t]^e[t+1]\u003C\u003CC^e[t+2]\u003C\u003Cx)&B},N=new i(25e3),Q=new s(288),S=new s(32),L=0,T=0,H=(g=0,0),I=0,P=0;g\u003Cl;++g){var O=E(g),K=32767&g,z=_[O];if(j[K]=z,_[O]=K,I\u003C=g){var V=l-g;if((L>7e3||H>24576)&&V>423){p=R(e,h,0,N,Q,S,T,H,P,g-P,p),H=L=T=0,P=g;for(var q=0;q\u003C286;++q)Q[q]=0;for(q=0;q\u003C30;++q)S[q]=0}var G=2,X=0,W=b,J=K-z&32767;if(V>2&&O==E(g-J))for(var Y=Math.min(w,V)-1,Z=Math.min(32767,g),$=Math.min(258,V);J\u003C=Z&&--W&&K!=z;){if(e[g+G]==e[g+G-J]){for(var ee=0;ee\u003C$&&e[g+ee]==e[g+ee-J];++ee);if(ee>G){if(G=ee,X=J,ee>Y)break;var te=Math.min(J,ee-2),re=0;for(q=0;q\u003Cte;++q){var ne=g-J+q+32768&32767,oe=ne-j[ne]+32768&32767;oe>re&&(re=oe,z=ne)}}}J+=(K=z)-(z=j[K])+32768&32767}if(X){N[H++]=268435456|f[G]\u003C\u003C18|m[X];var se=31&f[G],ie=31&m[X];T+=a[se]+A[ie],++Q[257+se],++S[ie],I=g+G,++L}else N[H++]=e[g],++Q[e[g]]}}p=R(e,h,c,N,Q,S,T,H,P,g-P,p),c||(p=k(h,p,D))}return U(d,0,n+F(p)+u)},z=function(){for(var e=new i(256),t=0;t\u003C256;++t){for(var r=t,n=9;--n;)r=(1&r&&3988292384)^r>>>1;e[t]=r}return e}(),V=function(){var e=4294967295;return{p:function(t){for(var r=e,n=0;n\u003Ct.length;++n)r=z[255&r^t[n]]^r>>>8;e=r},d:function(){return 4294967295^e}}},q=function(){var e=1,t=0;return{p:function(r){for(var n=e,o=t,s=r.length,i=0;i!=s;){for(var a=Math.min(i+5552,s);i\u003Ca;++i)o+=n+=r[i];n%=65521,o%=65521}e=n,t=o},d:function(){return(e>>>8\u003C\u003C16|(255&t)\u003C\u003C8|t>>>8)+2*((255&e)\u003C\u003C23)}}},G=function(e,t,r,n,o){return K(e,null==t.level?6:t.level,null==t.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+t.mem,r,n,!o)},X=function(e,t){var r={};for(var n in e)r[n]=e[n];for(var n in t)r[n]=t[n];return r},W=function(e,t,r){for(var n=e(),o=e.toString(),s=o.slice(o.indexOf(\"[\")+1,o.lastIndexOf(\"]\")).replace(\u002F \u002Fg,\"\").split(\",\"),i=0;i\u003Cn.length;++i){var a=n[i],A=s[i];if(\"function\"==typeof a){t+=\";\"+A+\"=\";var u=a.toString();if(a.prototype)if(-1!=u.indexOf(\"[native code]\")){var c=u.indexOf(\" \",8)+1;t+=u.slice(c,u.indexOf(\"(\",c))}else for(var l in t+=u,a.prototype)t+=\";\"+A+\".prototype.\"+l+\"=\"+a.prototype[l].toString();else t+=u}else r[A]=a}return[t,r]},J=[],Y=function(e,t,r,a){var A;if(!J[r]){for(var u=\"\",c={},l=e.length-1,d=0;d\u003Cl;++d)u=(A=W(e[d],u,c))[0],c=A[1];J[r]=W(e[l],u,c)}var f=X({},J[r][1]);return function(e,t,r,o,s){var i=n[t]||(n[t]=URL.createObjectURL(new Blob([e],{type:\"text\u002Fjavascript\"}))),a=new Worker(i);return a.onerror=function(e){return s(e.error,null)},a.onmessage=function(e){return s(null,e.data)},a.postMessage(r,o),a}(J[r][0]+\";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=\"+t.toString()+\"}\",r,f,function(e){var t=[];for(var r in e)(e[r]instanceof o||e[r]instanceof s||e[r]instanceof i)&&t.push((e[r]=new e[r].constructor(e[r])).buffer);return t}(f),a)},Z=function(){return[o,s,i,a,A,u,d,p,_,x,g,w,E,N,Q,F,U,S,xe,oe,se]},$=function(){return[o,s,i,a,A,u,f,m,j,b,C,B,g,M,D,w,L,T,H,I,P,O,k,R,F,U,K,G,Be,oe]},ee=function(){return[de,pe,le,V,z]},te=function(){return[fe,he]},re=function(){return[me,le,q]},ne=function(){return[ge]},oe=function(e){return postMessage(e,[e.buffer])},se=function(e){return e&&e.size&&new o(e.size)},ie=function(e,t,r,n,s,i){var a=Y(r,n,s,(function(e,t){a.terminate(),i(e,t)}));return t.consume||(e=new o(e)),a.postMessage([e,t],[e.buffer]),function(){a.terminate()}},ae=function(e){return e.ondata=function(e,t){return postMessage([e,t],[e.buffer])},function(t){return e.push(t.data[0],t.data[1])}},Ae=function(e,t,r,n,o){var s,i=Y(e,n,o,(function(e,r){e?(i.terminate(),t.ondata.call(t,e)):(r[1]&&i.terminate(),t.ondata.call(t,e,r[0],r[1]))}));i.postMessage(r),t.push=function(e,r){if(s)throw\"stream finished\";if(!t.ondata)throw\"no stream handler\";i.postMessage([e,s=r],[e.buffer])},t.terminate=function(){i.terminate()}},ue=function(e,t){return e[t]|e[t+1]\u003C\u003C8},ce=function(e,t){return(e[t]|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16)+2*(e[t+3]\u003C\u003C23)},le=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},de=function(e,t){var r=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level\u003C2?4:9==t.level?2:0,e[9]=3,0!=t.mtime&&le(e,4,Math.floor(new Date(t.mtime||Date.now())\u002F1e3)),r){e[3]=8;for(var n=0;n\u003C=r.length;++n)e[n+10]=r.charCodeAt(n)}},fe=function(e){if(31!=e[0]||139!=e[1]||8!=e[2])throw\"invalid gzip data\";var t=e[3],r=10;4&t&&(r+=e[10]|2+(e[11]\u003C\u003C8));for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(2&t)},he=function(e){var t=e.length;return(e[t-4]|e[t-3]\u003C\u003C8|e[t-2]\u003C\u003C16)+2*(e[t-1]\u003C\u003C23)},pe=function(e){return 10+(e.filename&&e.filename.length+1||0)},me=function(e,t){var r=t.level,n=0==r?0:r\u003C6?1:9==r?3:2;e[0]=120,e[1]=n\u003C\u003C6|(n?32-2*n:1)},ge=function(e){if(8!=(15&e[0])||e[0]>>>4>7||(e[0]\u003C\u003C8|e[1])%31)throw\"invalid zlib data\";if(32&e[1])throw\"invalid zlib data: preset dictionaries not supported\"};function ye(e,t){return t||\"function\"!=typeof e||(t=e,e={}),this.ondata=t,e}var ve=function(){function e(e,t){t||\"function\"!=typeof e||(t=e,e={}),this.ondata=t,this.o=e||{}}return e.prototype.p=function(e,t){this.ondata(G(e,this.o,0,0,!t),t)},e.prototype.push=function(e,t){if(this.d)throw\"stream finished\";if(!this.ondata)throw\"no stream handler\";this.d=t,this.p(e,t||!1)},e}(),we=function(){return function(e,t){Ae([$,function(){return[ae,ve]}],this,ye.call(this,e,t),(function(e){var t=new ve(e.data);onmessage=ae(t)}),6)}}();function be(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$],(function(e){return oe(Be(e.data[0],e.data[1]))}),0,r)}function Be(e,t){return void 0===t&&(t={}),G(e,t,0,0)}var je=function(){function e(e){this.s={},this.p=new o(0),this.ondata=e}return e.prototype.e=function(e){if(this.d)throw\"stream finished\";if(!this.ondata)throw\"no stream handler\";var t=this.p.length,r=new o(t+e.length);r.set(this.p),r.set(e,t),this.p=r},e.prototype.c=function(e){this.d=this.s.i=e||!1;var t=this.s.b,r=S(this.p,this.o,this.s);this.ondata(U(r,t,this.s.b),this.d),this.o=U(r,this.s.b-32768),this.s.b=this.o.length,this.p=U(this.p,this.s.p\u002F8>>0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}(),_e=function(){return function(e){this.ondata=e,Ae([Z,function(){return[ae,je]}],this,0,(function(){var e=new je;onmessage=ae(e)}),7)}}();function Ce(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z],(function(e){return oe(xe(e.data[0],se(e.data[1])))}),1,r)}function xe(e,t){return S(e,t)}var Ee=function(){function e(e,t){this.c=V(),this.l=0,this.v=1,ve.call(this,e,t)}return e.prototype.push=function(e,t){ve.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e),this.l+=e.length;var r=G(e,this.o,this.v&&pe(this.o),t&&8,!t);this.v&&(de(r,this.o),this.v=0),t&&(le(r,r.length-8,this.c.d()),le(r,r.length-4,this.l)),this.ondata(r,t)},e}(),Ne=function(){return function(e,t){Ae([$,ee,function(){return[ae,ve,Ee]}],this,ye.call(this,e,t),(function(e){var t=new Ee(e.data);onmessage=ae(t)}),8)}}();function Qe(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$,ee,function(){return[Fe]}],(function(e){return oe(Fe(e.data[0],e.data[1]))}),2,r)}function Fe(e,t){void 0===t&&(t={});var r=V(),n=e.length;r.p(e);var o=G(e,t,pe(t),8),s=o.length;return de(o,t),le(o,s-8,r.d()),le(o,s-4,n),o}var Ue=function(){function e(e){this.v=1,je.call(this,e)}return e.prototype.push=function(e,t){if(je.prototype.e.call(this,e),this.v){var r=fe(this.p);if(r>=this.p.length&&!t)return;this.p=this.p.subarray(r),this.v=0}if(t){if(this.p.length\u003C8)throw\"invalid gzip stream\";this.p=this.p.subarray(0,-8)}je.prototype.c.call(this,t)},e}(),Se=function(){return function(e){this.ondata=e,Ae([Z,te,function(){return[ae,je,Ue]}],this,0,(function(){var e=new Ue;onmessage=ae(e)}),9)}}();function Le(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z,te,function(){return[Te]}],(function(e){return oe(Te(e.data[0]))}),3,r)}function Te(e,t){return S(e.subarray(fe(e),-8),t||new o(he(e)))}var He=function(){function e(e,t){this.c=q(),this.v=1,ve.call(this,e,t)}return e.prototype.push=function(e,t){ve.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e);var r=G(e,this.o,this.v&&2,t&&4,!t);this.v&&(me(r,this.o),this.v=0),t&&le(r,r.length-4,this.c.d()),this.ondata(r,t)},e}(),Ie=function(){return function(e,t){Ae([$,re,function(){return[ae,ve,He]}],this,ye.call(this,e,t),(function(e){var t=new He(e.data);onmessage=ae(t)}),10)}}();function Pe(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[$,re,function(){return[Oe]}],(function(e){return oe(Oe(e.data[0],e.data[1]))}),4,r)}function Oe(e,t){void 0===t&&(t={});var r=q();r.p(e);var n=G(e,t,2,4);return me(n,t),le(n,n.length-4,r.d()),n}var ke=function(){function e(e){this.v=1,je.call(this,e)}return e.prototype.push=function(e,t){if(je.prototype.e.call(this,e),this.v){if(this.p.length\u003C2&&!t)return;this.p=this.p.subarray(2),this.v=0}if(t){if(this.p.length\u003C4)throw\"invalid zlib stream\";this.p=this.p.subarray(0,-4)}je.prototype.c.call(this,t)},e}(),Re=function(){return function(e){this.ondata=e,Ae([Z,ne,function(){return[ae,je,ke]}],this,0,(function(){var e=new ke;onmessage=ae(e)}),11)}}();function Me(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return ie(e,t,[Z,ne,function(){return[De]}],(function(e){return oe(De(e.data[0],se(e.data[1])))}),5,r)}function De(e,t){return S((ge(e),e.subarray(2,-4)),t)}var Ke=function(){function e(e){this.G=Ue,this.I=je,this.Z=ke,this.ondata=e}return e.prototype.push=function(e,t){if(!this.ondata)throw\"no stream handler\";if(this.s)this.s.push(e,t);else{if(this.p&&this.p.length){var r=new o(this.p.length+e.length);r.set(this.p),r.set(e,this.p.length)}else this.p=e;if(this.p.length>2){var n=this,s=function(){n.ondata.apply(n,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(s):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]\u003C\u003C8|this.p[1])%31?new this.I(s):new this.Z(s),this.s.push(this.p,t),this.p=null}}},e}(),ze=function(){function e(e){this.G=Se,this.I=_e,this.Z=Re,this.ondata=e}return e.prototype.push=function(e,t){Ke.prototype.push.call(this,e,t)},e}();function Ve(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";return 31==e[0]&&139==e[1]&&8==e[2]?Le(e,t,r):8!=(15&e[0])||e[0]>>4>7||(e[0]\u003C\u003C8|e[1])%31?Ce(e,t,r):Me(e,t,r)}function qe(e,t){return 31==e[0]&&139==e[1]&&8==e[2]?Te(e,t):8!=(15&e[0])||e[0]>>4>7||(e[0]\u003C\u003C8|e[1])%31?xe(e,t):De(e,t)}var Ge=function(e,t,r,n){for(var s in e){var i=e[s],a=t+s;i instanceof o?r[a]=[i,n]:Array.isArray(i)?r[a]=[i[0],X(n,i[1])]:Ge(i,a+\"\u002F\",r,n)}};function Xe(e,t){var r=e.length;if(!t&&\"undefined\"!=typeof TextEncoder)return(new TextEncoder).encode(e);for(var n=new o(e.length+(e.length>>>1)),s=0,i=function(e){n[s++]=e},a=0;a\u003Cr;++a){if(s+5>n.length){var A=new o(s+8+(r-a\u003C\u003C1));A.set(n),n=A}var u=e.charCodeAt(a);u\u003C128||t?i(u):u\u003C2048?(i(192|u>>>6),i(128|63&u)):u>55295&&u\u003C57344?(i(240|(u=65536+(1047552&u)|1023&e.charCodeAt(++a))>>>18),i(128|u>>>12&63),i(128|u>>>6&63),i(128|63&u)):(i(224|u>>>12),i(128|u>>>6&63),i(128|63&u))}return U(n,0,s)}function We(e,t){var r=\"\";if(!t&&\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(e);for(var n=0;n\u003Ce.length;){var o=e[n++];o\u003C128||t?r+=String.fromCharCode(o):o\u003C224?r+=String.fromCharCode((31&o)\u003C\u003C6|63&e[n++]):o\u003C240?r+=String.fromCharCode((15&o)\u003C\u003C12|(63&e[n++])\u003C\u003C6|63&e[n++]):(o=((15&o)\u003C\u003C18|(63&e[n++])\u003C\u003C12|(63&e[n++])\u003C\u003C6|63&e[n++])-65536,r+=String.fromCharCode(55296|o>>10,56320|1023&o))}return r}var Je=function(e,t){return t+30+ue(e,t+26)+ue(e,t+28)},Ye=function(e,t,r){var n=ue(e,t+28),o=We(e.subarray(t+46,t+46+n),!(2048&ue(e,t+8))),s=t+46+n,i=r?Ze(e,s):[ce(e,t+20),ce(e,t+24),ce(e,t+42)],a=i[0],A=i[1],u=i[2];return[ue(e,t+10),a,A,o,s+ue(e,t+30)+ue(e,t+32),u]},Ze=function(e,t){for(;1!=ue(e,t);t+=4+ue(e,t+2));return[ce(e,t+12),ce(e,t+4),ce(e,t+20)]},$e=function(e,t,r,n,o,s,i,a,A,u){var c=s.length,l=n.length;le(e,t,null!=A?33639248:67324752),t+=4,null!=A&&(e[t]=20,t+=2),e[t]=20,t+=2,e[t++]=8==u&&(1==a.level?6:a.level\u003C6?4:9==a.level?2:0),e[t++]=i&&8,e[t]=u,t+=2;var d=new Date(a.mtime||Date.now()),f=d.getFullYear()-1980;if(f\u003C0||f>119)throw\"date not in range 1980-2099\";le(e,t,2*(f\u003C\u003C24)|d.getMonth()+1\u003C\u003C21|d.getDate()\u003C\u003C16|d.getHours()\u003C\u003C11|d.getMinutes()\u003C\u003C5|d.getSeconds()>>>1),le(e,t+=4,r),le(e,t+4,l),le(e,t+8,o),le(e,t+12,c),t+=16,null!=A&&(le(e,t+=10,A),t+=4),e.set(s,t),t+=c,null==A&&e.set(n,t)},et=function(e,t,r,n,o){le(e,t,101010256),le(e,t+8,r),le(e,t+10,r),le(e,t+12,n),le(e,t+16,o)};function tt(e,t,r){if(r||(r=t,t={}),\"function\"!=typeof r)throw\"no callback\";var n={};Ge(e,\"\",n,t);var s=Object.keys(n),i=s.length,a=0,A=0,u=i,c=new Array(i),l=[],d=function(){for(var e=0;e\u003Cl.length;++e)l[e]()},f=function(){var e=new o(A+22),t=a,n=A-a;A=0;for(var s=0;s\u003Cu;++s){var i=c[s];try{$e(e,A,i.c,i.d,i.m,i.n,i.u,i.p,null,i.t),$e(e,a,i.c,i.d,i.m,i.n,i.u,i.p,A,i.t),a+=46+i.n.length,A+=30+i.n.length+i.d.length}catch(e){return r(e,null)}}et(e,a,c.length,n,t),r(null,e)};i||f();for(var h=function(e){var t=s[e],o=n[t],u=o[0],h=o[1],p=V(),m=u.length;p.p(u);var g=Xe(t),y=g.length,v=0==h.level?0:8,w=function(n,o){if(n)d(),r(n,null);else{var s=o.length;c[e]={t:v,d:o,m:m,c:p.d(),u:t.length!=s,n:g,p:h},a+=30+y+s,A+=76+2*y+s,--i||f()}};if(g.length>65535&&w(\"filename too long\",null),v)if(m\u003C16e4)try{w(null,Be(u,h))}catch(e){w(e,null)}else l.push(be(u,h,w));else w(null,u)},p=0;p\u003Cu;++p)h(p);return d}function rt(e,t){void 0===t&&(t={});var r={},n=[];Ge(e,\"\",r,t);var s=0,i=0;for(var a in r){var A=r[a],u=A[0],c=A[1],l=0==c.level?0:8,d=Xe(a),f=d.length;if(d.length>65535)throw\"filename too long\";var h=l?Be(u,c):u,p=h.length,m=V();m.p(u),n.push({t:l,d:h,m:u.length,c:m.d(),u:a.length!=f,n:d,o:s,p:c}),s+=30+f+p,i+=76+2*f+p}for(var g=new o(i+22),y=s,v=i-s,w=0;w\u003Cn.length;++w){var b=n[w];$e(g,b.o,b.c,b.d,b.m,b.n,b.u,b.p,null,b.t),$e(g,s,b.c,b.d,b.m,b.n,b.u,b.p,b.o,b.t),s+=46+b.n.length}return et(g,s,n.length,v,y),g}function nt(e,t){if(\"function\"!=typeof t)throw\"no callback\";for(var r=[],n=function(){for(var e=0;e\u003Cr.length;++e)r[e]()},s={},i=e.length-22;101010256!=ce(e,i);--i)if(!i||e.length-i>65558)return void t(\"invalid zip file\",null);var a=ue(e,i+8);a||t(null,{});var A=a,u=ce(e,i+16),c=4294967295==u;if(c){if(i=ce(e,i-12),101075792!=ce(e,i))throw\"invalid zip file\";A=a=ce(e,i+32),u=ce(e,i+48)}for(var l=function(i){var A=Ye(e,u,c),l=A[0],d=A[1],f=A[2],h=A[3],p=A[4],m=A[5],g=Je(e,m);u=p;var y=function(e,r){e?(n(),t(e,null)):(s[h]=r,--a||t(null,s))};if(l)if(8==l){var v=e.subarray(g,g+d);if(d\u003C32e4)try{y(null,xe(v,new o(f)))}catch(e){y(e,null)}else r.push(Ce(v,{size:f},y))}else y(\"unknown compression type \"+l,null);else y(null,U(e,g,g+d))},d=0;d\u003CA;++d)l();return n}function ot(e){for(var t={},r=e.length-22;101010256!=ce(e,r);--r)if(!r||e.length-r>65558)throw\"invalid zip file\";var n=ue(e,r+8);if(!n)return{};var s=ce(e,r+16),i=4294967295==s;if(i){if(r=ce(e,r-12),101075792!=ce(e,r))throw\"invalid zip file\";n=ce(e,r+32),s=ce(e,r+48)}for(var a=0;a\u003Cn;++a){var A=Ye(e,s,i),u=A[0],c=A[1],l=A[2],d=A[3],f=A[4],h=A[5],p=Je(e,h);if(s=f,u){if(8!=u)throw\"unknown compression type \"+u;t[d]=xe(e.subarray(p,p+c),new o(l))}else t[d]=U(e,p,p+c)}return t}},\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\":function(e){e.exports=function(){\"use strict\";var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};function t(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}var r=function(){return(r=Object.assign||function(e){for(var t,r=1,n=arguments.length;r\u003Cn;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function n(e,t,r,n){return new(r||(r=Promise))((function(o,s){function i(e){try{A(n.next(e))}catch(e){s(e)}}function a(e){try{A(n.throw(e))}catch(e){s(e)}}function A(e){e.done?o(e.value):new r((function(t){t(e.value)})).then(i,a)}A((n=n.apply(e,t||[])).next())}))}function o(e,t){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},\"function\"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError(\"Generator is already executing.\");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]\u003Co[3])){i.label=s[1];break}if(6===s[0]&&i.label\u003Co[1]){i.label=o[1],o=s;break}if(o&&i.label\u003Co[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}}for(var s=function(){function e(e,t,r,n){this.left=e,this.top=t,this.width=r,this.height=n}return e.prototype.add=function(t,r,n,o){return new e(this.left+t,this.top+r,this.width+n,this.height+o)},e.fromClientRect=function(t){return new e(t.left,t.top,t.width,t.height)},e}(),i=function(e){return s.fromClientRect(e.getBoundingClientRect())},a=function(e){for(var t=[],r=0,n=e.length;r\u003Cn;){var o=e.charCodeAt(r++);if(o>=55296&&o\u003C=56319&&r\u003Cn){var s=e.charCodeAt(r++);56320==(64512&s)?t.push(((1023&o)\u003C\u003C10)+(1023&s)+65536):(t.push(o),r--)}else t.push(o)}return t},A=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];if(String.fromCodePoint)return String.fromCodePoint.apply(String,e);var r=e.length;if(!r)return\"\";for(var n=[],o=-1,s=\"\";++o\u003Cr;){var i=e[o];i\u003C=65535?n.push(i):(i-=65536,n.push(55296+(i>>10),i%1024+56320)),(o+1===r||n.length>16384)&&(s+=String.fromCharCode.apply(String,n),n.length=0)}return s},u=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\u002F\",c=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),l=0;l\u003Cu.length;l++)c[u.charCodeAt(l)]=l;var d,f,h,p,m,g,y,v,w,b=function(e,t,r){return e.slice?e.slice(t,r):new Uint16Array(Array.prototype.slice.call(e,t,r))},B=function(){function e(e,t,r,n,o,s){this.initialValue=e,this.errorValue=t,this.highStart=r,this.highValueIndex=n,this.index=o,this.data=s}return e.prototype.get=function(e){var t;if(e>=0){if(e\u003C55296||e>56319&&e\u003C=65535)return t=((t=this.index[e>>5])\u003C\u003C2)+(31&e),this.data[t];if(e\u003C=65535)return t=((t=this.index[2048+(e-55296>>5)])\u003C\u003C2)+(31&e),this.data[t];if(e\u003Cthis.highStart)return t=2080+(e>>11),t=this.index[t],t+=e>>5&63,t=((t=this.index[t])\u003C\u003C2)+(31&e),this.data[t];if(e\u003C=1114111)return this.data[this.highValueIndex]}return this.errorValue},e}(),j=10,_=13,C=15,x=17,E=18,N=19,Q=20,F=21,U=22,S=24,L=25,T=26,H=27,I=28,P=30,O=32,k=33,R=34,M=35,D=37,K=38,z=39,V=40,q=42,G=\"×\",X=\"÷\",W=(m=function(e){var t,r,n,o,s,i=.75*e.length,a=e.length,A=0;\"=\"===e[e.length-1]&&(i--,\"=\"===e[e.length-2]&&i--);var u=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.slice?new ArrayBuffer(i):new Array(i),l=Array.isArray(u)?u:new Uint8Array(u);for(t=0;t\u003Ca;t+=4)r=c[e.charCodeAt(t)],n=c[e.charCodeAt(t+1)],o=c[e.charCodeAt(t+2)],s=c[e.charCodeAt(t+3)],l[A++]=r\u003C\u003C2|n>>4,l[A++]=(15&n)\u003C\u003C4|o>>2,l[A++]=(3&o)\u003C\u003C6|63&s;return u}(\"KwAAAAAAAAAACA4AIDoAAPAfAAACAAAAAAAIABAAGABAAEgAUABYAF4AZgBeAGYAYABoAHAAeABeAGYAfACEAIAAiACQAJgAoACoAK0AtQC9AMUAXgBmAF4AZgBeAGYAzQDVAF4AZgDRANkA3gDmAOwA9AD8AAQBDAEUARoBIgGAAIgAJwEvATcBPwFFAU0BTAFUAVwBZAFsAXMBewGDATAAiwGTAZsBogGkAawBtAG8AcIBygHSAdoB4AHoAfAB+AH+AQYCDgIWAv4BHgImAi4CNgI+AkUCTQJTAlsCYwJrAnECeQKBAk0CiQKRApkCoQKoArACuALAAsQCzAIwANQC3ALkAjAA7AL0AvwCAQMJAxADGAMwACADJgMuAzYDPgOAAEYDSgNSA1IDUgNaA1oDYANiA2IDgACAAGoDgAByA3YDfgOAAIQDgACKA5IDmgOAAIAAogOqA4AAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAK8DtwOAAIAAvwPHA88D1wPfAyAD5wPsA\u002FQD\u002FAOAAIAABAQMBBIEgAAWBB4EJgQuBDMEIAM7BEEEXgBJBCADUQRZBGEEaQQwADAAcQQ+AXkEgQSJBJEEgACYBIAAoASoBK8EtwQwAL8ExQSAAIAAgACAAIAAgACgAM0EXgBeAF4AXgBeAF4AXgBeANUEXgDZBOEEXgDpBPEE+QQBBQkFEQUZBSEFKQUxBTUFPQVFBUwFVAVcBV4AYwVeAGsFcwV7BYMFiwWSBV4AmgWgBacFXgBeAF4AXgBeAKsFXgCyBbEFugW7BcIFwgXIBcIFwgXQBdQF3AXkBesF8wX7BQMGCwYTBhsGIwYrBjMGOwZeAD8GRwZNBl4AVAZbBl4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAGMGXgBqBnEGXgBeAF4AXgBeAF4AXgBeAF4AXgB5BoAG4wSGBo4GkwaAAIADHgR5AF4AXgBeAJsGgABGA4AAowarBrMGswagALsGwwbLBjAA0wbaBtoG3QbaBtoG2gbaBtoG2gblBusG8wb7BgMHCwcTBxsHCwcjBysHMAc1BzUHOgdCB9oGSgdSB1oHYAfaBloHaAfaBlIH2gbaBtoG2gbaBtoG2gbaBjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHbQdeAF4ANQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQd1B30HNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B4MH2gaKB68EgACAAIAAgACAAIAAgACAAI8HlwdeAJ8HpweAAIAArwe3B14AXgC\u002FB8UHygcwANAH2AfgB4AA6AfwBz4B+AcACFwBCAgPCBcIogEYAR8IJwiAAC8INwg\u002FCCADRwhPCFcIXwhnCEoDGgSAAIAAgABvCHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIfQh3CHgIeQh6CHsIfAh9CHcIeAh5CHoIewh8CH0Idwh4CHkIegh7CHwIhAiLCI4IMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAANQc1BzUHNQc1BzUHNQc1BzUHNQc1B54INQc1B6II2gaqCLIIugiAAIAAvgjGCIAAgACAAIAAgACAAIAAgACAAIAAywiHAYAA0wiAANkI3QjlCO0I9Aj8CIAAgACAAAIJCgkSCRoJIgknCTYHLwk3CZYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiWCJYIlgiAAIAAAAFAAXgBeAGAAcABeAHwAQACQAKAArQC9AJ4AXgBeAE0A3gBRAN4A7AD8AMwBGgEAAKcBNwEFAUwBXAF4QkhCmEKnArcCgAHHAsABz4LAAcABwAHAAd+C6ABoAG+C\u002F4LAAcABwAHAAc+DF4MAAcAB54M3gweDV4Nng3eDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEeDqABVg6WDqABoQ6gAaABoAHXDvcONw\u002F3DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DvcO9w73DncPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB7cPPwlGCU4JMACAAIAAgABWCV4JYQmAAGkJcAl4CXwJgAkwADAAMAAwAIgJgACLCZMJgACZCZ8JowmrCYAAswkwAF4AXgB8AIAAuwkABMMJyQmAAM4JgADVCTAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAqwYWBNkIMAAwADAAMADdCeAJ6AnuCR4E9gkwAP4JBQoNCjAAMACAABUK0wiAAB0KJAosCjQKgAAwADwKQwqAAEsKvQmdCVMKWwowADAAgACAALcEMACAAGMKgABrCjAAMAAwADAAMAAwADAAMAAwADAAMAAeBDAAMAAwADAAMAAwADAAMAAwADAAMAAwAIkEPQFzCnoKiQSCCooKkAqJBJgKoAqkCokEGAGsCrQKvArBCjAAMADJCtEKFQHZCuEK\u002FgHpCvEKMAAwADAAMACAAIwE+QowAIAAPwEBCzAAMAAwADAAMACAAAkLEQswAIAAPwEZCyELgAAOCCkLMAAxCzkLMAAwADAAMAAwADAAXgBeAEELMAAwADAAMAAwADAAMAAwAEkLTQtVC4AAXAtkC4AAiQkwADAAMAAwADAAMAAwADAAbAtxC3kLgAuFC4sLMAAwAJMLlwufCzAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAApwswADAAMACAAIAAgACvC4AAgACAAIAAgACAALcLMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAvwuAAMcLgACAAIAAgACAAIAAyguAAIAAgACAAIAA0QswADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAANkLgACAAIAA4AswADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACJCR4E6AswADAAhwHwC4AA+AsADAgMEAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMACAAIAAGAwdDCUMMAAwAC0MNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQw1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHPQwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADUHNQc1BzUHNQc1BzUHNQc2BzAAMAA5DDUHNQc1BzUHNQc1BzUHNQc1BzUHNQdFDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAgACAAIAATQxSDFoMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAF4AXgBeAF4AXgBeAF4AYgxeAGoMXgBxDHkMfwxeAIUMXgBeAI0MMAAwADAAMAAwAF4AXgCVDJ0MMAAwADAAMABeAF4ApQxeAKsMswy7DF4Awgy9DMoMXgBeAF4AXgBeAF4AXgBeAF4AXgDRDNkMeQBqCeAM3Ax8AOYM7Az0DPgMXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgCgAAANoAAHDQ4NFg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAeDSYNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIAAgACAAIAAgACAAC4NMABeAF4ANg0wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAD4NRg1ODVYNXg1mDTAAbQ0wADAAMAAwADAAMAAwADAA2gbaBtoG2gbaBtoG2gbaBnUNeg3CBYANwgWFDdoGjA3aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gaUDZwNpA2oDdoG2gawDbcNvw3HDdoG2gbPDdYN3A3fDeYN2gbsDfMN2gbaBvoN\u002Fg3aBgYODg7aBl4AXgBeABYOXgBeACUG2gYeDl4AJA5eACwO2w3aBtoGMQ45DtoG2gbaBtoGQQ7aBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDjUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B1EO2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQdZDjUHNQc1BzUHNQc1B2EONQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHaA41BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B3AO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gY1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1BzUHNQc1B2EO2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gZJDtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBtoG2gbaBkkOeA6gAKAAoAAwADAAMAAwAKAAoACgAKAAoACgAKAAgA4wADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAD\u002F\u002FwQABAAEAAQABAAEAAQABAAEAA0AAwABAAEAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAKABMAFwAeABsAGgAeABcAFgASAB4AGwAYAA8AGAAcAEsASwBLAEsASwBLAEsASwBLAEsAGAAYAB4AHgAeABMAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAFgAbABIAHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYADQARAB4ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkAFgAaABsAGwAbAB4AHQAdAB4ATwAXAB4ADQAeAB4AGgAbAE8ATwAOAFAAHQAdAB0ATwBPABcATwBPAE8AFgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwArAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAAQABAANAA0ASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAUAArACsAKwArACsAKwArACsABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAGgAaAFAAUABQAFAAUABMAB4AGwBQAB4AKwArACsABAAEAAQAKwBQAFAAUABQAFAAUAArACsAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUAArAFAAUAArACsABAArAAQABAAEAAQABAArACsAKwArAAQABAArACsABAAEAAQAKwArACsABAArACsAKwArACsAKwArAFAAUABQAFAAKwBQACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwAEAAQAUABQAFAABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUAArACsABABQAAQABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQAKwArAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeABsAKwArACsAKwArACsAKwBQAAQABAAEAAQABAAEACsABAAEAAQAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArAAQABAArACsABAAEAAQAKwArACsAKwArACsAKwArAAQABAArACsAKwArAFAAUAArAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwAeAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwAEAFAAKwBQAFAAUABQAFAAUAArACsAKwBQAFAAUAArAFAAUABQAFAAKwArACsAUABQACsAUAArAFAAUAArACsAKwBQAFAAKwArACsAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQAKwArACsABAAEAAQAKwAEAAQABAAEACsAKwBQACsAKwArACsAKwArAAQAKwArACsAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAB4AHgAeAB4AHgAeABsAHgArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArAFAAUABQACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAB4AUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABAArACsAKwArACsAKwArAAQABAArACsAKwArACsAKwArAFAAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwArAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAKwBcAFwAKwBcACsAKwBcACsAKwArACsAKwArAFwAXABcAFwAKwBcAFwAXABcAFwAXABcACsAXABcAFwAKwBcACsAXAArACsAXABcACsAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgArACoAKgBcACsAKwBcAFwAXABcAFwAKwBcACsAKgAqACoAKgAqACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAFwAXABcAFwAUAAOAA4ADgAOAB4ADgAOAAkADgAOAA0ACQATABMAEwATABMACQAeABMAHgAeAB4ABAAEAB4AHgAeAB4AHgAeAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUAANAAQAHgAEAB4ABAAWABEAFgARAAQABABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAAQABAAEAAQABAANAAQABABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsADQANAB4AHgAeAB4AHgAeAAQAHgAeAB4AHgAeAB4AKwAeAB4ADgAOAA0ADgAeAB4AHgAeAB4ACQAJACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgAeAB4AHgBcAFwAXABcAFwAXAAqACoAKgAqAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAKgAqACoAKgAqACoAKgBcAFwAXAAqACoAKgAqAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAXAAqAEsASwBLAEsASwBLAEsASwBLAEsAKgAqACoAKgAqACoAUABQAFAAUABQAFAAKwBQACsAKwArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQACsAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwAEAAQABAAeAA0AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAEQArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAADQANAA0AUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAA0ADQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQACsABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoADQANABUAXAANAB4ADQAbAFwAKgArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAB4AHgATABMADQANAA4AHgATABMAHgAEAAQABAAJACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAUABQAFAAUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwAeACsAKwArABMAEwBLAEsASwBLAEsASwBLAEsASwBLAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwBcAFwAXABcAFwAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcACsAKwArACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwAeAB4AXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsABABLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKgAqACoAKgAqACoAKgBcACoAKgAqACoAKgAqACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAUABQAFAAUABQAFAAUAArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4ADQANAA0ADQAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAHgAeAB4AHgBQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwANAA0ADQANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwBQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsABAAEAAQAHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAABABQAFAAUABQAAQABAAEAFAAUAAEAAQABAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAKwBQACsAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAKwArAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAKwAeAB4AHgAeAB4AHgAeAA4AHgArAA0ADQANAA0ADQANAA0ACQANAA0ADQAIAAQACwAEAAQADQAJAA0ADQAMAB0AHQAeABcAFwAWABcAFwAXABYAFwAdAB0AHgAeABQAFAAUAA0AAQABAAQABAAEAAQABAAJABoAGgAaABoAGgAaABoAGgAeABcAFwAdABUAFQAeAB4AHgAeAB4AHgAYABYAEQAVABUAFQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgANAB4ADQANAA0ADQAeAA0ADQANAAcAHgAeAB4AHgArAAQABAAEAAQABAAEAAQABAAEAAQAUABQACsAKwBPAFAAUABQAFAAUAAeAB4AHgAWABEATwBQAE8ATwBPAE8AUABQAFAAUABQAB4AHgAeABYAEQArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAaABsAGwAbABsAGgAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgBQABoAHgAdAB4AUAAeABoAHgAeAB4AHgAeAB4AHgAeAB4ATwAeAFAAGwAeAB4AUABQAFAAUABQAB4AHgAeAB0AHQAeAFAAHgBQAB4AUAAeAFAATwBQAFAAHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AUABQAFAAUABPAE8AUABQAFAAUABQAE8AUABQAE8AUABPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAE8ATwBPAE8ATwBPAE8ATwBPAE8AUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAATwAeAB4AKwArACsAKwAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB0AHQAeAB4AHgAdAB0AHgAeAB0AHgAeAB4AHQAeAB0AGwAbAB4AHQAeAB4AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB0AHgAdAB4AHQAdAB0AHQAdAB0AHgAdAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAdAB0AHQAdAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAlACUAHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBQAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAeAB4AHgAeAB0AHQAeAB4AHgAeAB0AHQAdAB4AHgAdAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB0AHQAeAB4AHQAeAB4AHgAeAB0AHQAeAB4AHgAeACUAJQAdAB0AJQAeACUAJQAlACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAHgAeAB4AHgAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHQAdAB0AHgAdACUAHQAdAB4AHQAdAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHQAdAB0AHQAlAB4AJQAlACUAHQAlACUAHQAdAB0AJQAlAB0AHQAlAB0AHQAlACUAJQAeAB0AHgAeAB4AHgAdAB0AJQAdAB0AHQAdAB0AHQAlACUAJQAlACUAHQAlACUAIAAlAB0AHQAlACUAJQAlACUAJQAlACUAHgAeAB4AJQAlACAAIAAgACAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeABcAFwAXABcAFwAXAB4AEwATACUAHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACUAJQBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwArACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAE8ATwBPAE8ATwBPAE8ATwAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeACsAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUAArACsAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQBQAFAAUABQACsAKwArACsAUABQAFAAUABQAFAAUABQAA0AUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAABAAEAAQAKwAEAAQAKwArACsAKwArAAQABAAEAAQAUABQAFAAUAArAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsABAAEAAQAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsADQANAA0ADQANAA0ADQANAB4AKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAUABQAFAAUABQAA0ADQANAA0ADQANABQAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwANAA0ADQANAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAeAAQABAAEAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLACsADQArAB4AKwArAAQABAAEAAQAUABQAB4AUAArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwAEAAQABAAEAAQABAAEAAQABAAOAA0ADQATABMAHgAeAB4ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0AUABQAFAAUAAEAAQAKwArAAQADQANAB4AUAArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXABcAA0ADQANACoASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUAArACsAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANACsADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEcARwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQACsAKwAeAAQABAANAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAEAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUAArACsAUAArACsAUABQACsAKwBQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AKwArAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAeAB4ADQANAA0ADQAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAArAAQABAArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAEAAQABAAEAAQABAAEACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAFgAWAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAKwBQACsAKwArACsAKwArAFAAKwArACsAKwBQACsAUAArAFAAKwBQAFAAUAArAFAAUAArAFAAKwArAFAAKwBQACsAUAArAFAAKwBQACsAUABQACsAUAArACsAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAUABQAFAAUAArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUAArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAlACUAJQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeACUAJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeACUAJQAlACUAJQAeACUAJQAlACUAJQAgACAAIAAlACUAIAAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIQAhACEAIQAhACUAJQAgACAAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAIAAlACUAJQAlACAAJQAgACAAIAAgACAAIAAgACAAIAAlACUAJQAgACUAJQAlACUAIAAgACAAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeACUAHgAlAB4AJQAlACUAJQAlACAAJQAlACUAJQAeACUAHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAIAAgACAAIAAgAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFwAXABcAFQAVABUAHgAeAB4AHgAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAIAAgACAAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAlACAAIAAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsA\"),g=Array.isArray(m)?function(e){for(var t=e.length,r=[],n=0;n\u003Ct;n+=4)r.push(e[n+3]\u003C\u003C24|e[n+2]\u003C\u003C16|e[n+1]\u003C\u003C8|e[n]);return r}(m):new Uint32Array(m),y=Array.isArray(m)?function(e){for(var t=e.length,r=[],n=0;n\u003Ct;n+=2)r.push(e[n+1]\u003C\u003C8|e[n]);return r}(m):new Uint16Array(m),v=b(y,12,g[4]\u002F2),w=2===g[5]?b(y,(24+g[4])\u002F2):(f=g,h=Math.ceil((24+g[4])\u002F4),f.slice?f.slice(h,p):new Uint32Array(Array.prototype.slice.call(f,h,p))),new B(g[0],g[1],g[2],g[3],v,w)),J=[P,36],Y=[1,2,3,5],Z=[j,8],$=[H,T],ee=Y.concat(Z),te=[K,z,V,R,M],re=[C,_],ne=function(e,t,r,n){var o=n[r];if(Array.isArray(e)?-1!==e.indexOf(o):e===o)for(var s=r;s\u003C=n.length;){if((A=n[++s])===t)return!0;if(A!==j)break}if(o===j)for(s=r;s>0;){var i=n[--s];if(Array.isArray(e)?-1!==e.indexOf(i):e===i)for(var a=r;a\u003C=n.length;){var A;if((A=n[++a])===t)return!0;if(A!==j)break}if(i!==j)break}return!1},oe=function(e,t){for(var r=e;r>=0;){var n=t[r];if(n!==j)return n;r--}return 0},se=function(e,t,r,n,o){if(0===r[n])return G;var s=n-1;if(Array.isArray(o)&&!0===o[s])return G;var i=s-1,a=s+1,A=t[s],u=i>=0?t[i]:0,c=t[a];if(2===A&&3===c)return G;if(-1!==Y.indexOf(A))return\"!\";if(-1!==Y.indexOf(c))return G;if(-1!==Z.indexOf(c))return G;if(8===oe(s,t))return X;if(11===W.get(e[s])&&(c===D||c===O||c===k))return G;if(7===A||7===c)return G;if(9===A)return G;if(-1===[j,_,C].indexOf(A)&&9===c)return G;if(-1!==[x,E,N,S,I].indexOf(c))return G;if(oe(s,t)===U)return G;if(ne(23,U,s,t))return G;if(ne([x,E],F,s,t))return G;if(ne(12,12,s,t))return G;if(A===j)return X;if(23===A||23===c)return G;if(16===c||16===A)return X;if(-1!==[_,C,F].indexOf(c)||14===A)return G;if(36===u&&-1!==re.indexOf(A))return G;if(A===I&&36===c)return G;if(c===Q&&-1!==J.concat(Q,N,L,D,O,k).indexOf(A))return G;if(-1!==J.indexOf(c)&&A===L||-1!==J.indexOf(A)&&c===L)return G;if(A===H&&-1!==[D,O,k].indexOf(c)||-1!==[D,O,k].indexOf(A)&&c===T)return G;if(-1!==J.indexOf(A)&&-1!==$.indexOf(c)||-1!==$.indexOf(A)&&-1!==J.indexOf(c))return G;if(-1!==[H,T].indexOf(A)&&(c===L||-1!==[U,C].indexOf(c)&&t[a+1]===L)||-1!==[U,C].indexOf(A)&&c===L||A===L&&-1!==[L,I,S].indexOf(c))return G;if(-1!==[L,I,S,x,E].indexOf(c))for(var l=s;l>=0;){if((d=t[l])===L)return G;if(-1===[I,S].indexOf(d))break;l--}if(-1!==[H,T].indexOf(c))for(l=-1!==[x,E].indexOf(A)?i:s;l>=0;){var d;if((d=t[l])===L)return G;if(-1===[I,S].indexOf(d))break;l--}if(K===A&&-1!==[K,z,R,M].indexOf(c)||-1!==[z,R].indexOf(A)&&-1!==[z,V].indexOf(c)||-1!==[V,M].indexOf(A)&&c===V)return G;if(-1!==te.indexOf(A)&&-1!==[Q,T].indexOf(c)||-1!==te.indexOf(c)&&A===H)return G;if(-1!==J.indexOf(A)&&-1!==J.indexOf(c))return G;if(A===S&&-1!==J.indexOf(c))return G;if(-1!==J.concat(L).indexOf(A)&&c===U||-1!==J.concat(L).indexOf(c)&&A===E)return G;if(41===A&&41===c){for(var f=r[s],h=1;f>0&&41===t[--f];)h++;if(h%2!=0)return G}return A===O&&c===k?G:X},ie=function(e,t){t||(t={lineBreak:\"normal\",wordBreak:\"normal\"});var r=function(e,t){void 0===t&&(t=\"strict\");var r=[],n=[],o=[];return e.forEach((function(e,s){var i=W.get(e);if(i>50?(o.push(!0),i-=50):o.push(!1),-1!==[\"normal\",\"auto\",\"loose\"].indexOf(t)&&-1!==[8208,8211,12316,12448].indexOf(e))return n.push(s),r.push(16);if(4===i||11===i){if(0===s)return n.push(s),r.push(P);var a=r[s-1];return-1===ee.indexOf(a)?(n.push(n[s-1]),r.push(a)):(n.push(s),r.push(P))}return n.push(s),31===i?r.push(\"strict\"===t?F:D):i===q||29===i?r.push(P):43===i?e>=131072&&e\u003C=196605||e>=196608&&e\u003C=262141?r.push(D):r.push(P):void r.push(i)})),[n,r,o]}(e,t.lineBreak),n=r[0],o=r[1],s=r[2];return\"break-all\"!==t.wordBreak&&\"break-word\"!==t.wordBreak||(o=o.map((function(e){return-1!==[L,P,q].indexOf(e)?D:e}))),[n,o,\"keep-all\"===t.wordBreak?s.map((function(t,r){return t&&e[r]>=19968&&e[r]\u003C=40959})):void 0]},ae=function(){function e(e,t,r,n){this.codePoints=e,this.required=\"!\"===t,this.start=r,this.end=n}return e.prototype.slice=function(){return A.apply(void 0,this.codePoints.slice(this.start,this.end))},e}();!function(e){e[e.STRING_TOKEN=0]=\"STRING_TOKEN\",e[e.BAD_STRING_TOKEN=1]=\"BAD_STRING_TOKEN\",e[e.LEFT_PARENTHESIS_TOKEN=2]=\"LEFT_PARENTHESIS_TOKEN\",e[e.RIGHT_PARENTHESIS_TOKEN=3]=\"RIGHT_PARENTHESIS_TOKEN\",e[e.COMMA_TOKEN=4]=\"COMMA_TOKEN\",e[e.HASH_TOKEN=5]=\"HASH_TOKEN\",e[e.DELIM_TOKEN=6]=\"DELIM_TOKEN\",e[e.AT_KEYWORD_TOKEN=7]=\"AT_KEYWORD_TOKEN\",e[e.PREFIX_MATCH_TOKEN=8]=\"PREFIX_MATCH_TOKEN\",e[e.DASH_MATCH_TOKEN=9]=\"DASH_MATCH_TOKEN\",e[e.INCLUDE_MATCH_TOKEN=10]=\"INCLUDE_MATCH_TOKEN\",e[e.LEFT_CURLY_BRACKET_TOKEN=11]=\"LEFT_CURLY_BRACKET_TOKEN\",e[e.RIGHT_CURLY_BRACKET_TOKEN=12]=\"RIGHT_CURLY_BRACKET_TOKEN\",e[e.SUFFIX_MATCH_TOKEN=13]=\"SUFFIX_MATCH_TOKEN\",e[e.SUBSTRING_MATCH_TOKEN=14]=\"SUBSTRING_MATCH_TOKEN\",e[e.DIMENSION_TOKEN=15]=\"DIMENSION_TOKEN\",e[e.PERCENTAGE_TOKEN=16]=\"PERCENTAGE_TOKEN\",e[e.NUMBER_TOKEN=17]=\"NUMBER_TOKEN\",e[e.FUNCTION=18]=\"FUNCTION\",e[e.FUNCTION_TOKEN=19]=\"FUNCTION_TOKEN\",e[e.IDENT_TOKEN=20]=\"IDENT_TOKEN\",e[e.COLUMN_TOKEN=21]=\"COLUMN_TOKEN\",e[e.URL_TOKEN=22]=\"URL_TOKEN\",e[e.BAD_URL_TOKEN=23]=\"BAD_URL_TOKEN\",e[e.CDC_TOKEN=24]=\"CDC_TOKEN\",e[e.CDO_TOKEN=25]=\"CDO_TOKEN\",e[e.COLON_TOKEN=26]=\"COLON_TOKEN\",e[e.SEMICOLON_TOKEN=27]=\"SEMICOLON_TOKEN\",e[e.LEFT_SQUARE_BRACKET_TOKEN=28]=\"LEFT_SQUARE_BRACKET_TOKEN\",e[e.RIGHT_SQUARE_BRACKET_TOKEN=29]=\"RIGHT_SQUARE_BRACKET_TOKEN\",e[e.UNICODE_RANGE_TOKEN=30]=\"UNICODE_RANGE_TOKEN\",e[e.WHITESPACE_TOKEN=31]=\"WHITESPACE_TOKEN\",e[e.EOF_TOKEN=32]=\"EOF_TOKEN\"}(d||(d={}));var Ae=45,ue=43,ce=-1,le=function(e){return e>=48&&e\u003C=57},de=function(e){return le(e)||e>=65&&e\u003C=70||e>=97&&e\u003C=102},fe=function(e){return 10===e||9===e||32===e},he=function(e){return function(e){return function(e){return e>=97&&e\u003C=122}(e)||function(e){return e>=65&&e\u003C=90}(e)}(e)||function(e){return e>=128}(e)||95===e},pe=function(e){return he(e)||le(e)||e===Ae},me=function(e){return e>=0&&e\u003C=8||11===e||e>=14&&e\u003C=31||127===e},ge=function(e,t){return 92===e&&10!==t},ye=function(e,t,r){return e===Ae?he(t)||ge(t,r):!!he(e)||!(92!==e||!ge(e,t))},ve=function(e,t,r){return e===ue||e===Ae?!!le(t)||46===t&&le(r):le(46===e?t:e)},we=function(e){var t=0,r=1;e[t]!==ue&&e[t]!==Ae||(e[t]===Ae&&(r=-1),t++);for(var n=[];le(e[t]);)n.push(e[t++]);var o=n.length?parseInt(A.apply(void 0,n),10):0;46===e[t]&&t++;for(var s=[];le(e[t]);)s.push(e[t++]);var i=s.length,a=i?parseInt(A.apply(void 0,s),10):0;69!==e[t]&&101!==e[t]||t++;var u=1;e[t]!==ue&&e[t]!==Ae||(e[t]===Ae&&(u=-1),t++);for(var c=[];le(e[t]);)c.push(e[t++]);var l=c.length?parseInt(A.apply(void 0,c),10):0;return r*(o+a*Math.pow(10,-i))*Math.pow(10,u*l)},be={type:d.LEFT_PARENTHESIS_TOKEN},Be={type:d.RIGHT_PARENTHESIS_TOKEN},je={type:d.COMMA_TOKEN},_e={type:d.SUFFIX_MATCH_TOKEN},Ce={type:d.PREFIX_MATCH_TOKEN},xe={type:d.COLUMN_TOKEN},Ee={type:d.DASH_MATCH_TOKEN},Ne={type:d.INCLUDE_MATCH_TOKEN},Qe={type:d.LEFT_CURLY_BRACKET_TOKEN},Fe={type:d.RIGHT_CURLY_BRACKET_TOKEN},Ue={type:d.SUBSTRING_MATCH_TOKEN},Se={type:d.BAD_URL_TOKEN},Le={type:d.BAD_STRING_TOKEN},Te={type:d.CDO_TOKEN},He={type:d.CDC_TOKEN},Ie={type:d.COLON_TOKEN},Pe={type:d.SEMICOLON_TOKEN},Oe={type:d.LEFT_SQUARE_BRACKET_TOKEN},ke={type:d.RIGHT_SQUARE_BRACKET_TOKEN},Re={type:d.WHITESPACE_TOKEN},Me={type:d.EOF_TOKEN},De=function(){function e(){this._value=[]}return e.prototype.write=function(e){this._value=this._value.concat(a(e))},e.prototype.read=function(){for(var e=[],t=this.consumeToken();t!==Me;)e.push(t),t=this.consumeToken();return e},e.prototype.consumeToken=function(){var e=this.consumeCodePoint();switch(e){case 34:return this.consumeStringToken(34);case 35:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),n=this.peekCodePoint(2);if(pe(t)||ge(r,n)){var o=ye(t,r,n)?2:1,s=this.consumeName();return{type:d.HASH_TOKEN,value:s,flags:o}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),_e;break;case 39:return this.consumeStringToken(39);case 40:return be;case 41:return Be;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ue;break;case ue:if(ve(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case 44:return je;case Ae:var i=e,a=this.peekCodePoint(0),u=this.peekCodePoint(1);if(ve(i,a,u))return this.reconsumeCodePoint(e),this.consumeNumericToken();if(ye(i,a,u))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();if(a===Ae&&62===u)return this.consumeCodePoint(),this.consumeCodePoint(),He;break;case 46:if(ve(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var c=this.consumeCodePoint();if(42===c&&47===(c=this.consumeCodePoint()))return this.consumeToken();if(c===ce)return this.consumeToken()}break;case 58:return Ie;case 59:return Pe;case 60:if(33===this.peekCodePoint(0)&&this.peekCodePoint(1)===Ae&&this.peekCodePoint(2)===Ae)return this.consumeCodePoint(),this.consumeCodePoint(),Te;break;case 64:var l=this.peekCodePoint(0),f=this.peekCodePoint(1),h=this.peekCodePoint(2);if(ye(l,f,h))return s=this.consumeName(),{type:d.AT_KEYWORD_TOKEN,value:s};break;case 91:return Oe;case 92:if(ge(e,this.peekCodePoint(0)))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();break;case 93:return ke;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ce;break;case 123:return Qe;case 125:return Fe;case 117:case 85:var p=this.peekCodePoint(0),m=this.peekCodePoint(1);return p!==ue||!de(m)&&63!==m||(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(e),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ee;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),xe;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Ne;break;case ce:return Me}return fe(e)?(this.consumeWhiteSpace(),Re):le(e)?(this.reconsumeCodePoint(e),this.consumeNumericToken()):he(e)?(this.reconsumeCodePoint(e),this.consumeIdentLikeToken()):{type:d.DELIM_TOKEN,value:A(e)}},e.prototype.consumeCodePoint=function(){var e=this._value.shift();return void 0===e?-1:e},e.prototype.reconsumeCodePoint=function(e){this._value.unshift(e)},e.prototype.peekCodePoint=function(e){return e>=this._value.length?-1:this._value[e]},e.prototype.consumeUnicodeRangeToken=function(){for(var e=[],t=this.consumeCodePoint();de(t)&&e.length\u003C6;)e.push(t),t=this.consumeCodePoint();for(var r=!1;63===t&&e.length\u003C6;)e.push(t),t=this.consumeCodePoint(),r=!0;if(r){var n=parseInt(A.apply(void 0,e.map((function(e){return 63===e?48:e}))),16),o=parseInt(A.apply(void 0,e.map((function(e){return 63===e?70:e}))),16);return{type:d.UNICODE_RANGE_TOKEN,start:n,end:o}}var s=parseInt(A.apply(void 0,e),16);if(this.peekCodePoint(0)===Ae&&de(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];de(t)&&i.length\u003C6;)i.push(t),t=this.consumeCodePoint();return o=parseInt(A.apply(void 0,i),16),{type:d.UNICODE_RANGE_TOKEN,start:s,end:o}}return{type:d.UNICODE_RANGE_TOKEN,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var e=this.consumeName();return\"url\"===e.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:d.FUNCTION_TOKEN,value:e}):{type:d.IDENT_TOKEN,value:e}},e.prototype.consumeUrlToken=function(){var e=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===ce)return{type:d.URL_TOKEN,value:\"\"};var t=this.peekCodePoint(0);if(39===t||34===t){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===d.STRING_TOKEN&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===ce||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:d.URL_TOKEN,value:r.value}):(this.consumeBadUrlRemnants(),Se)}for(;;){var n=this.consumeCodePoint();if(n===ce||41===n)return{type:d.URL_TOKEN,value:A.apply(void 0,e)};if(fe(n))return this.consumeWhiteSpace(),this.peekCodePoint(0)===ce||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:d.URL_TOKEN,value:A.apply(void 0,e)}):(this.consumeBadUrlRemnants(),Se);if(34===n||39===n||40===n||me(n))return this.consumeBadUrlRemnants(),Se;if(92===n){if(!ge(n,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),Se;e.push(this.consumeEscapedCodePoint())}else e.push(n)}},e.prototype.consumeWhiteSpace=function(){for(;fe(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var e=this.consumeCodePoint();if(41===e||e===ce)return;ge(e,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(e){for(var t=\"\";e>0;){var r=Math.min(6e4,e);t+=A.apply(void 0,this._value.splice(0,r)),e-=r}return this._value.shift(),t},e.prototype.consumeStringToken=function(e){for(var t=\"\",r=0;;){var n=this._value[r];if(n===ce||void 0===n||n===e)return t+=this.consumeStringSlice(r),{type:d.STRING_TOKEN,value:t};if(10===n)return this._value.splice(0,r),Le;if(92===n){var o=this._value[r+1];o!==ce&&void 0!==o&&(10===o?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):ge(n,o)&&(t+=this.consumeStringSlice(r),t+=A(this.consumeEscapedCodePoint()),r=-1))}r++}},e.prototype.consumeNumber=function(){var e=[],t=4,r=this.peekCodePoint(0);for(r!==ue&&r!==Ae||e.push(this.consumeCodePoint());le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());r=this.peekCodePoint(0);var n=this.peekCodePoint(1);if(46===r&&le(n))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());r=this.peekCodePoint(0),n=this.peekCodePoint(1);var o=this.peekCodePoint(2);if((69===r||101===r)&&((n===ue||n===Ae)&&le(o)||le(n)))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=8;le(this.peekCodePoint(0));)e.push(this.consumeCodePoint());return[we(e),t]},e.prototype.consumeNumericToken=function(){var e=this.consumeNumber(),t=e[0],r=e[1],n=this.peekCodePoint(0),o=this.peekCodePoint(1),s=this.peekCodePoint(2);if(ye(n,o,s)){var i=this.consumeName();return{type:d.DIMENSION_TOKEN,number:t,flags:r,unit:i}}return 37===n?(this.consumeCodePoint(),{type:d.PERCENTAGE_TOKEN,number:t,flags:r}):{type:d.NUMBER_TOKEN,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var e=this.consumeCodePoint();if(de(e)){for(var t=A(e);de(this.peekCodePoint(0))&&t.length\u003C6;)t+=A(this.consumeCodePoint());fe(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return 0===r||function(e){return e>=55296&&e\u003C=57343}(r)||r>1114111?65533:r}return e===ce?65533:e},e.prototype.consumeName=function(){for(var e=\"\";;){var t=this.consumeCodePoint();if(pe(t))e+=A(t);else{if(!ge(t,this.peekCodePoint(0)))return this.reconsumeCodePoint(t),e;e+=A(this.consumeEscapedCodePoint())}}},e}(),Ke=function(){function e(e){this._tokens=e}return e.create=function(t){var r=new De;return r.write(t),new e(r.read())},e.parseValue=function(t){return e.create(t).parseComponentValue()},e.parseValues=function(t){return e.create(t).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var e=this.consumeToken();e.type===d.WHITESPACE_TOKEN;)e=this.consumeToken();if(e.type===d.EOF_TOKEN)throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");this.reconsumeToken(e);var t=this.consumeComponentValue();do{e=this.consumeToken()}while(e.type===d.WHITESPACE_TOKEN);if(e.type===d.EOF_TOKEN)return t;throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\")},e.prototype.parseComponentValues=function(){for(var e=[];;){var t=this.consumeComponentValue();if(t.type===d.EOF_TOKEN)return e;e.push(t),e.push()}},e.prototype.consumeComponentValue=function(){var e=this.consumeToken();switch(e.type){case d.LEFT_CURLY_BRACKET_TOKEN:case d.LEFT_SQUARE_BRACKET_TOKEN:case d.LEFT_PARENTHESIS_TOKEN:return this.consumeSimpleBlock(e.type);case d.FUNCTION_TOKEN:return this.consumeFunction(e)}return e},e.prototype.consumeSimpleBlock=function(e){for(var t={type:e,values:[]},r=this.consumeToken();;){if(r.type===d.EOF_TOKEN||Ze(r,e))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(e){for(var t={name:e.value,values:[],type:d.FUNCTION};;){var r=this.consumeToken();if(r.type===d.EOF_TOKEN||r.type===d.RIGHT_PARENTHESIS_TOKEN)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var e=this._tokens.shift();return void 0===e?Me:e},e.prototype.reconsumeToken=function(e){this._tokens.unshift(e)},e}(),ze=function(e){return e.type===d.DIMENSION_TOKEN},Ve=function(e){return e.type===d.NUMBER_TOKEN},qe=function(e){return e.type===d.IDENT_TOKEN},Ge=function(e){return e.type===d.STRING_TOKEN},Xe=function(e,t){return qe(e)&&e.value===t},We=function(e){return e.type!==d.WHITESPACE_TOKEN},Je=function(e){return e.type!==d.WHITESPACE_TOKEN&&e.type!==d.COMMA_TOKEN},Ye=function(e){var t=[],r=[];return e.forEach((function(e){if(e.type===d.COMMA_TOKEN){if(0===r.length)throw new Error(\"Error parsing function args, zero tokens for arg\");return t.push(r),void(r=[])}e.type!==d.WHITESPACE_TOKEN&&r.push(e)})),r.length&&t.push(r),t},Ze=function(e,t){return t===d.LEFT_CURLY_BRACKET_TOKEN&&e.type===d.RIGHT_CURLY_BRACKET_TOKEN||t===d.LEFT_SQUARE_BRACKET_TOKEN&&e.type===d.RIGHT_SQUARE_BRACKET_TOKEN||t===d.LEFT_PARENTHESIS_TOKEN&&e.type===d.RIGHT_PARENTHESIS_TOKEN},$e=function(e){return e.type===d.NUMBER_TOKEN||e.type===d.DIMENSION_TOKEN},et=function(e){return e.type===d.PERCENTAGE_TOKEN||$e(e)},tt=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},rt={type:d.NUMBER_TOKEN,number:0,flags:4},nt={type:d.PERCENTAGE_TOKEN,number:50,flags:4},ot={type:d.PERCENTAGE_TOKEN,number:100,flags:4},st=function(e,t,r){var n=e[0],o=e[1];return[it(n,t),it(void 0!==o?o:n,r)]},it=function(e,t){if(e.type===d.PERCENTAGE_TOKEN)return e.number\u002F100*t;if(ze(e))switch(e.unit){case\"rem\":case\"em\":return 16*e.number;case\"px\":default:return e.number}return e.number},at=\"grad\",At=\"turn\",ut=function(e){if(e.type===d.DIMENSION_TOKEN)switch(e.unit){case\"deg\":return Math.PI*e.number\u002F180;case at:return Math.PI\u002F200*e.number;case\"rad\":return e.number;case At:return 2*Math.PI*e.number}throw new Error(\"Unsupported angle type\")},ct=function(e){return e.type===d.DIMENSION_TOKEN&&(\"deg\"===e.unit||e.unit===at||\"rad\"===e.unit||e.unit===At)},lt=function(e){switch(e.filter(qe).map((function(e){return e.value})).join(\" \")){case\"to bottom right\":case\"to right bottom\":case\"left top\":case\"top left\":return[rt,rt];case\"to top\":case\"bottom\":return dt(0);case\"to bottom left\":case\"to left bottom\":case\"right top\":case\"top right\":return[rt,ot];case\"to right\":case\"left\":return dt(90);case\"to top left\":case\"to left top\":case\"right bottom\":case\"bottom right\":return[ot,ot];case\"to bottom\":case\"top\":return dt(180);case\"to top right\":case\"to right top\":case\"left bottom\":case\"bottom left\":return[ot,rt];case\"to left\":case\"right\":return dt(270)}return 0},dt=function(e){return Math.PI*e\u002F180},ft=function(e){if(e.type===d.FUNCTION){var t=jt[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported color function \"'+e.name+'\"');return t(e.values)}if(e.type===d.HASH_TOKEN){if(3===e.value.length){var r=e.value.substring(0,1),n=e.value.substring(1,2),o=e.value.substring(2,3);return mt(parseInt(r+r,16),parseInt(n+n,16),parseInt(o+o,16),1)}if(4===e.value.length){r=e.value.substring(0,1),n=e.value.substring(1,2),o=e.value.substring(2,3);var s=e.value.substring(3,4);return mt(parseInt(r+r,16),parseInt(n+n,16),parseInt(o+o,16),parseInt(s+s,16)\u002F255)}if(6===e.value.length)return r=e.value.substring(0,2),n=e.value.substring(2,4),o=e.value.substring(4,6),mt(parseInt(r,16),parseInt(n,16),parseInt(o,16),1);if(8===e.value.length)return r=e.value.substring(0,2),n=e.value.substring(2,4),o=e.value.substring(4,6),s=e.value.substring(6,8),mt(parseInt(r,16),parseInt(n,16),parseInt(o,16),parseInt(s,16)\u002F255)}if(e.type===d.IDENT_TOKEN){var i=_t[e.value.toUpperCase()];if(void 0!==i)return i}return _t.TRANSPARENT},ht=function(e){return 0==(255&e)},pt=function(e){var t=255&e,r=255&e>>8,n=255&e>>16,o=255&e>>24;return t\u003C255?\"rgba(\"+o+\",\"+n+\",\"+r+\",\"+t\u002F255+\")\":\"rgb(\"+o+\",\"+n+\",\"+r+\")\"},mt=function(e,t,r,n){return(e\u003C\u003C24|t\u003C\u003C16|r\u003C\u003C8|Math.round(255*n)\u003C\u003C0)>>>0},gt=function(e,t){if(e.type===d.NUMBER_TOKEN)return e.number;if(e.type===d.PERCENTAGE_TOKEN){var r=3===t?1:255;return 3===t?e.number\u002F100*r:Math.round(e.number\u002F100*r)}return 0},yt=function(e){var t=e.filter(Je);if(3===t.length){var r=t.map(gt),n=r[0],o=r[1],s=r[2];return mt(n,o,s,1)}if(4===t.length){var i=t.map(gt),a=(n=i[0],o=i[1],s=i[2],i[3]);return mt(n,o,s,a)}return 0};function vt(e,t,r){return r\u003C0&&(r+=1),r>=1&&(r-=1),r\u003C1\u002F6?(t-e)*r*6+e:r\u003C.5?t:r\u003C2\u002F3?6*(t-e)*(2\u002F3-r)+e:e}var wt,bt,Bt=function(e){var t=e.filter(Je),r=t[0],n=t[1],o=t[2],s=t[3],i=(r.type===d.NUMBER_TOKEN?dt(r.number):ut(r))\u002F(2*Math.PI),a=et(n)?n.number\u002F100:0,A=et(o)?o.number\u002F100:0,u=void 0!==s&&et(s)?it(s,1):1;if(0===a)return mt(255*A,255*A,255*A,1);var c=A\u003C=.5?A*(a+1):A+a-A*a,l=2*A-c,f=vt(l,c,i+1\u002F3),h=vt(l,c,i),p=vt(l,c,i-1\u002F3);return mt(255*f,255*h,255*p,u)},jt={hsl:Bt,hsla:Bt,rgb:yt,rgba:yt},_t={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199};(function(e){e[e.VALUE=0]=\"VALUE\",e[e.LIST=1]=\"LIST\",e[e.IDENT_VALUE=2]=\"IDENT_VALUE\",e[e.TYPE_VALUE=3]=\"TYPE_VALUE\",e[e.TOKEN_VALUE=4]=\"TOKEN_VALUE\"})(wt||(wt={})),function(e){e[e.BORDER_BOX=0]=\"BORDER_BOX\",e[e.PADDING_BOX=1]=\"PADDING_BOX\",e[e.CONTENT_BOX=2]=\"CONTENT_BOX\"}(bt||(bt={}));var Ct,xt={name:\"background-clip\",initialValue:\"border-box\",prefix:!1,type:wt.LIST,parse:function(e){return e.map((function(e){if(qe(e))switch(e.value){case\"padding-box\":return bt.PADDING_BOX;case\"content-box\":return bt.CONTENT_BOX}return bt.BORDER_BOX}))}},Et={name:\"background-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Nt=function(e){var t=ft(e[0]),r=e[1];return r&&et(r)?{color:t,stop:r}:{color:t,stop:null}},Qt=function(e,t){var r=e[0],n=e[e.length-1];null===r.stop&&(r.stop=rt),null===n.stop&&(n.stop=ot);for(var o=[],s=0,i=0;i\u003Ce.length;i++){var a=e[i].stop;if(null!==a){var A=it(a,t);A>s?o.push(A):o.push(s),s=A}else o.push(null)}var u=null;for(i=0;i\u003Co.length;i++){var c=o[i];if(null===c)null===u&&(u=i);else if(null!==u){for(var l=i-u,d=(c-o[u-1])\u002F(l+1),f=1;f\u003C=l;f++)o[u+f-1]=d*f;u=null}}return e.map((function(e,r){return{color:e.color,stop:Math.max(Math.min(1,o[r]\u002Ft),0)}}))},Ft=function(e,t,r){var n=\"number\"==typeof e?e:function(e,t,r){var n=t\u002F2,o=r\u002F2,s=it(e[0],t)-n,i=o-it(e[1],r);return(Math.atan2(i,s)+2*Math.PI)%(2*Math.PI)}(e,t,r),o=Math.abs(t*Math.sin(n))+Math.abs(r*Math.cos(n)),s=t\u002F2,i=r\u002F2,a=o\u002F2,A=Math.sin(n-Math.PI\u002F2)*a,u=Math.cos(n-Math.PI\u002F2)*a;return[o,s-u,s+u,i-A,i+A]},Ut=function(e,t){return Math.sqrt(e*e+t*t)},St=function(e,t,r,n,o){return[[0,0],[0,t],[e,0],[e,t]].reduce((function(e,t){var s=t[0],i=t[1],a=Ut(r-s,n-i);return(o?a\u003Ce.optimumDistance:a>e.optimumDistance)?{optimumCorner:t,optimumDistance:a}:e}),{optimumDistance:o?1\u002F0:-1\u002F0,optimumCorner:null}).optimumCorner},Lt=function(e){var t=dt(180),r=[];return Ye(e).forEach((function(e,n){if(0===n){var o=e[0];if(o.type===d.IDENT_TOKEN&&-1!==[\"top\",\"left\",\"right\",\"bottom\"].indexOf(o.value))return void(t=lt(e));if(ct(o))return void(t=(ut(o)+dt(270))%dt(360))}var s=Nt(e);r.push(s)})),{angle:t,stops:r,type:Ct.LINEAR_GRADIENT}},Tt=function(e){return 0===e[0]&&255===e[1]&&0===e[2]&&255===e[3]},Ht=function(e,t,r,n,o){var s=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\",i=document.createElementNS(s,\"svg\"),a=document.createElementNS(s,\"foreignObject\");return i.setAttributeNS(null,\"width\",e.toString()),i.setAttributeNS(null,\"height\",t.toString()),a.setAttributeNS(null,\"width\",\"100%\"),a.setAttributeNS(null,\"height\",\"100%\"),a.setAttributeNS(null,\"x\",r.toString()),a.setAttributeNS(null,\"y\",n.toString()),a.setAttributeNS(null,\"externalResourcesRequired\",\"true\"),i.appendChild(a),a.appendChild(o),i},It=function(e){return new Promise((function(t,r){var n=new Image;n.onload=function(){return t(n)},n.onerror=r,n.src=\"data:image\u002Fsvg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(e))}))},Pt={get SUPPORT_RANGE_BOUNDS(){var e=function(e){if(e.createRange){var t=e.createRange();if(t.getBoundingClientRect){var r=e.createElement(\"boundtest\");r.style.height=\"123px\",r.style.display=\"block\",e.body.appendChild(r),t.selectNode(r);var n=t.getBoundingClientRect(),o=Math.round(n.height);if(e.body.removeChild(r),123===o)return!0}}return!1}(document);return Object.defineProperty(Pt,\"SUPPORT_RANGE_BOUNDS\",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=function(e){var t=new Image,r=e.createElement(\"canvas\"),n=r.getContext(\"2d\");if(!n)return!1;t.src=\"data:image\u002Fsvg+xml,\u003Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg'>\u003C\u002Fsvg>\";try{n.drawImage(t,0,0),r.toDataURL()}catch(e){return!1}return!0}(document);return Object.defineProperty(Pt,\"SUPPORT_SVG_DRAWING\",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=\"function\"==typeof Array.from&&\"function\"==typeof window.fetch?function(e){var t=e.createElement(\"canvas\"),r=100;t.width=r,t.height=r;var n=t.getContext(\"2d\");if(!n)return Promise.reject(!1);n.fillStyle=\"rgb(0, 255, 0)\",n.fillRect(0,0,r,r);var o=new Image,s=t.toDataURL();o.src=s;var i=Ht(r,r,0,0,o);return n.fillStyle=\"red\",n.fillRect(0,0,r,r),It(i).then((function(t){n.drawImage(t,0,0);var o=n.getImageData(0,0,r,r).data;n.fillStyle=\"red\",n.fillRect(0,0,r,r);var i=e.createElement(\"div\");return i.style.backgroundImage=\"url(\"+s+\")\",i.style.height=\"100px\",Tt(o)?It(Ht(r,r,0,0,i)):Promise.reject(!1)})).then((function(e){return n.drawImage(e,0,0),Tt(n.getImageData(0,0,r,r).data)})).catch((function(){return!1}))}(document):Promise.resolve(!1);return Object.defineProperty(Pt,\"SUPPORT_FOREIGNOBJECT_DRAWING\",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=void 0!==(new Image).crossOrigin;return Object.defineProperty(Pt,\"SUPPORT_CORS_IMAGES\",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=\"string\"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(Pt,\"SUPPORT_RESPONSE_TYPE\",{value:e}),e},get SUPPORT_CORS_XHR(){var e=\"withCredentials\"in new XMLHttpRequest;return Object.defineProperty(Pt,\"SUPPORT_CORS_XHR\",{value:e}),e}},Ot=function(){function e(e){var t=e.id,r=e.enabled;this.id=t,this.enabled=r,this.start=Date.now()}return e.prototype.debug=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.debug?console.debug.apply(console,[this.id,this.getTime()+\"ms\"].concat(e)):this.info.apply(this,e))},e.prototype.getTime=function(){return Date.now()-this.start},e.create=function(t){e.instances[t.id]=new e(t)},e.destroy=function(t){delete e.instances[t]},e.getInstance=function(t){var r=e.instances[t];if(void 0===r)throw new Error(\"No logger instance found with id \"+t);return r},e.prototype.info=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.info&&console.info.apply(console,[this.id,this.getTime()+\"ms\"].concat(e))},e.prototype.error=function(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];this.enabled&&(\"undefined\"!=typeof window&&window.console&&\"function\"==typeof console.error?console.error.apply(console,[this.id,this.getTime()+\"ms\"].concat(e)):this.info.apply(this,e))},e.instances={},e}(),kt=function(){function e(){}return e.create=function(t,r){return e._caches[t]=new Rt(t,r)},e.destroy=function(t){delete e._caches[t]},e.open=function(t){var r=e._caches[t];if(void 0!==r)return r;throw new Error('Cache with key \"'+t+'\" not found')},e.getOrigin=function(t){var r=e._link;return r?(r.href=t,r.href=r.href,r.protocol+r.hostname+r.port):\"about:blank\"},e.isSameOrigin=function(t){return e.getOrigin(t)===e._origin},e.setContext=function(t){e._link=t.document.createElement(\"a\"),e._origin=e.getOrigin(t.location.href)},e.getInstance=function(){var t=e._current;if(null===t)throw new Error(\"No cache instance attached\");return t},e.attachInstance=function(t){e._current=t},e.detachInstance=function(){e._current=null},e._caches={},e._origin=\"about:blank\",e._current=null,e}(),Rt=function(){function e(e,t){this.id=e,this._options=t,this._cache={}}return e.prototype.addImage=function(e){var t=Promise.resolve();return this.has(e)?t:Gt(e)||zt(e)?(this._cache[e]=this.loadImage(e),t):t},e.prototype.match=function(e){return this._cache[e]},e.prototype.loadImage=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i=this;return o(this,(function(o){switch(o.label){case 0:return t=kt.isSameOrigin(e),r=!Vt(e)&&!0===this._options.useCORS&&Pt.SUPPORT_CORS_IMAGES&&!t,n=!Vt(e)&&!t&&\"string\"==typeof this._options.proxy&&Pt.SUPPORT_CORS_XHR&&!r,t||!1!==this._options.allowTaint||Vt(e)||n||r?(s=e,n?[4,this.proxy(s)]:[3,2]):[2];case 1:s=o.sent(),o.label=2;case 2:return Ot.getInstance(this.id).debug(\"Added image \"+e.substring(0,256)),[4,new Promise((function(e,t){var n=new Image;n.onload=function(){return e(n)},n.onerror=t,(qt(s)||r)&&(n.crossOrigin=\"anonymous\"),n.src=s,!0===n.complete&&setTimeout((function(){return e(n)}),500),i._options.imageTimeout>0&&setTimeout((function(){return t(\"Timed out (\"+i._options.imageTimeout+\"ms) loading image\")}),i._options.imageTimeout)}))];case 3:return[2,o.sent()]}}))}))},e.prototype.has=function(e){return void 0!==this._cache[e]},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(e){var t=this,r=this._options.proxy;if(!r)throw new Error(\"No proxy defined\");var n=e.substring(0,256);return new Promise((function(o,s){var i=Pt.SUPPORT_RESPONSE_TYPE?\"blob\":\"text\",a=new XMLHttpRequest;if(a.onload=function(){if(200===a.status)if(\"text\"===i)o(a.response);else{var e=new FileReader;e.addEventListener(\"load\",(function(){return o(e.result)}),!1),e.addEventListener(\"error\",(function(e){return s(e)}),!1),e.readAsDataURL(a.response)}else s(\"Failed to proxy resource \"+n+\" with status code \"+a.status)},a.onerror=s,a.open(\"GET\",r+\"?url=\"+encodeURIComponent(e)+\"&responseType=\"+i),\"text\"!==i&&a instanceof XMLHttpRequest&&(a.responseType=i),t._options.imageTimeout){var A=t._options.imageTimeout;a.timeout=A,a.ontimeout=function(){return s(\"Timed out (\"+A+\"ms) proxying \"+n)}}a.send()}))},e}(),Mt=\u002F^data:image\\\u002Fsvg\\+xml\u002Fi,Dt=\u002F^data:image\\\u002F.*;base64,\u002Fi,Kt=\u002F^data:image\\\u002F.*\u002Fi,zt=function(e){return Pt.SUPPORT_SVG_DRAWING||!Xt(e)},Vt=function(e){return Kt.test(e)},qt=function(e){return Dt.test(e)},Gt=function(e){return\"blob\"===e.substr(0,4)},Xt=function(e){return\"svg\"===e.substr(-3).toLowerCase()||Mt.test(e)},Wt=\"closest-side\",Jt=\"farthest-side\",Yt=\"closest-corner\",Zt=\"farthest-corner\",$t=\"circle\",er=\"ellipse\",tr=\"cover\",rr=\"contain\",nr=function(e){var t=or.CIRCLE,r=sr.FARTHEST_CORNER,n=[],o=[];return Ye(e).forEach((function(e,s){var i=!0;if(0===s?i=e.reduce((function(e,t){if(qe(t))switch(t.value){case\"center\":return o.push(nt),!1;case\"top\":case\"left\":return o.push(rt),!1;case\"right\":case\"bottom\":return o.push(ot),!1}else if(et(t)||$e(t))return o.push(t),!1;return e}),i):1===s&&(i=e.reduce((function(e,n){if(qe(n))switch(n.value){case $t:return t=or.CIRCLE,!1;case er:return t=or.ELLIPSE,!1;case rr:case Wt:return r=sr.CLOSEST_SIDE,!1;case Jt:return r=sr.FARTHEST_SIDE,!1;case Yt:return r=sr.CLOSEST_CORNER,!1;case tr:case Zt:return r=sr.FARTHEST_CORNER,!1}else if($e(n)||et(n))return Array.isArray(r)||(r=[]),r.push(n),!1;return e}),i)),i){var a=Nt(e);n.push(a)}})),{size:r,shape:t,stops:n,position:o,type:Ct.RADIAL_GRADIENT}};!function(e){e[e.URL=0]=\"URL\",e[e.LINEAR_GRADIENT=1]=\"LINEAR_GRADIENT\",e[e.RADIAL_GRADIENT=2]=\"RADIAL_GRADIENT\"}(Ct||(Ct={}));var or,sr;(function(e){e[e.CIRCLE=0]=\"CIRCLE\",e[e.ELLIPSE=1]=\"ELLIPSE\"})(or||(or={})),function(e){e[e.CLOSEST_SIDE=0]=\"CLOSEST_SIDE\",e[e.FARTHEST_SIDE=1]=\"FARTHEST_SIDE\",e[e.CLOSEST_CORNER=2]=\"CLOSEST_CORNER\",e[e.FARTHEST_CORNER=3]=\"FARTHEST_CORNER\"}(sr||(sr={}));var ir=function(e){if(e.type===d.URL_TOKEN){var t={url:e.value,type:Ct.URL};return kt.getInstance().addImage(e.value),t}if(e.type===d.FUNCTION){var r=Ar[e.name];if(void 0===r)throw new Error('Attempting to parse an unsupported image function \"'+e.name+'\"');return r(e.values)}throw new Error(\"Unsupported image type\")};var ar,Ar={\"linear-gradient\":function(e){var t=dt(180),r=[];return Ye(e).forEach((function(e,n){if(0===n){var o=e[0];if(o.type===d.IDENT_TOKEN&&\"to\"===o.value)return void(t=lt(e));if(ct(o))return void(t=ut(o))}var s=Nt(e);r.push(s)})),{angle:t,stops:r,type:Ct.LINEAR_GRADIENT}},\"-moz-linear-gradient\":Lt,\"-ms-linear-gradient\":Lt,\"-o-linear-gradient\":Lt,\"-webkit-linear-gradient\":Lt,\"radial-gradient\":function(e){var t=or.CIRCLE,r=sr.FARTHEST_CORNER,n=[],o=[];return Ye(e).forEach((function(e,s){var i=!0;if(0===s){var a=!1;i=e.reduce((function(e,n){if(a)if(qe(n))switch(n.value){case\"center\":return o.push(nt),e;case\"top\":case\"left\":return o.push(rt),e;case\"right\":case\"bottom\":return o.push(ot),e}else(et(n)||$e(n))&&o.push(n);else if(qe(n))switch(n.value){case $t:return t=or.CIRCLE,!1;case er:return t=or.ELLIPSE,!1;case\"at\":return a=!0,!1;case Wt:return r=sr.CLOSEST_SIDE,!1;case tr:case Jt:return r=sr.FARTHEST_SIDE,!1;case rr:case Yt:return r=sr.CLOSEST_CORNER,!1;case Zt:return r=sr.FARTHEST_CORNER,!1}else if($e(n)||et(n))return Array.isArray(r)||(r=[]),r.push(n),!1;return e}),i)}if(i){var A=Nt(e);n.push(A)}})),{size:r,shape:t,stops:n,position:o,type:Ct.RADIAL_GRADIENT}},\"-moz-radial-gradient\":nr,\"-ms-radial-gradient\":nr,\"-o-radial-gradient\":nr,\"-webkit-radial-gradient\":nr,\"-webkit-gradient\":function(e){var t=dt(180),r=[],n=Ct.LINEAR_GRADIENT,o=or.CIRCLE,s=sr.FARTHEST_CORNER;return Ye(e).forEach((function(e,t){var o=e[0];if(0===t){if(qe(o)&&\"linear\"===o.value)return void(n=Ct.LINEAR_GRADIENT);if(qe(o)&&\"radial\"===o.value)return void(n=Ct.RADIAL_GRADIENT)}if(o.type===d.FUNCTION)if(\"from\"===o.name){var s=ft(o.values[0]);r.push({stop:rt,color:s})}else if(\"to\"===o.name)s=ft(o.values[0]),r.push({stop:ot,color:s});else if(\"color-stop\"===o.name){var i=o.values.filter(Je);if(2===i.length){s=ft(i[1]);var a=i[0];Ve(a)&&r.push({stop:{type:d.PERCENTAGE_TOKEN,number:100*a.number,flags:a.flags},color:s})}}})),n===Ct.LINEAR_GRADIENT?{angle:(t+dt(180))%dt(360),stops:r,type:n}:{size:s,shape:o,stops:r,position:[],type:n}}},ur={name:\"background-image\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){if(0===e.length)return[];var t=e[0];return t.type===d.IDENT_TOKEN&&\"none\"===t.value?[]:e.filter((function(e){return Je(e)&&function(e){return e.type!==d.FUNCTION||Ar[e.name]}(e)})).map(ir)}},cr={name:\"background-origin\",initialValue:\"border-box\",prefix:!1,type:wt.LIST,parse:function(e){return e.map((function(e){if(qe(e))switch(e.value){case\"padding-box\":return 1;case\"content-box\":return 2}return 0}))}},lr={name:\"background-position\",initialValue:\"0% 0%\",type:wt.LIST,prefix:!1,parse:function(e){return Ye(e).map((function(e){return e.filter(et)})).map(tt)}};!function(e){e[e.REPEAT=0]=\"REPEAT\",e[e.NO_REPEAT=1]=\"NO_REPEAT\",e[e.REPEAT_X=2]=\"REPEAT_X\",e[e.REPEAT_Y=3]=\"REPEAT_Y\"}(ar||(ar={}));var dr,fr={name:\"background-repeat\",initialValue:\"repeat\",prefix:!1,type:wt.LIST,parse:function(e){return Ye(e).map((function(e){return e.filter(qe).map((function(e){return e.value})).join(\" \")})).map(hr)}},hr=function(e){switch(e){case\"no-repeat\":return ar.NO_REPEAT;case\"repeat-x\":case\"repeat no-repeat\":return ar.REPEAT_X;case\"repeat-y\":case\"no-repeat repeat\":return ar.REPEAT_Y;case\"repeat\":default:return ar.REPEAT}};!function(e){e.AUTO=\"auto\",e.CONTAIN=\"contain\",e.COVER=\"cover\"}(dr||(dr={}));var pr,mr={name:\"background-size\",initialValue:\"0\",prefix:!1,type:wt.LIST,parse:function(e){return Ye(e).map((function(e){return e.filter(gr)}))}},gr=function(e){return qe(e)||et(e)},yr=function(e){return{name:\"border-\"+e+\"-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"}},vr=yr(\"top\"),wr=yr(\"right\"),br=yr(\"bottom\"),Br=yr(\"left\"),jr=function(e){return{name:\"border-radius-\"+e,initialValue:\"0 0\",prefix:!1,type:wt.LIST,parse:function(e){return tt(e.filter(et))}}},_r=jr(\"top-left\"),Cr=jr(\"top-right\"),xr=jr(\"bottom-right\"),Er=jr(\"bottom-left\");!function(e){e[e.NONE=0]=\"NONE\",e[e.SOLID=1]=\"SOLID\",e[e.DASHED=2]=\"DASHED\",e[e.DOTTED=3]=\"DOTTED\",e[e.DOUBLE=4]=\"DOUBLE\"}(pr||(pr={}));var Nr,Qr=function(e){return{name:\"border-\"+e+\"-style\",initialValue:\"solid\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"none\":return pr.NONE;case\"dashed\":return pr.DASHED;case\"dotted\":return pr.DOTTED;case\"double\":return pr.DOUBLE}return pr.SOLID}}},Fr=Qr(\"top\"),Ur=Qr(\"right\"),Sr=Qr(\"bottom\"),Lr=Qr(\"left\"),Tr=function(e){return{name:\"border-\"+e+\"-width\",initialValue:\"0\",type:wt.VALUE,prefix:!1,parse:function(e){return ze(e)?e.number:0}}},Hr=Tr(\"top\"),Ir=Tr(\"right\"),Pr=Tr(\"bottom\"),Or=Tr(\"left\"),kr={name:\"color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Rr={name:\"display\",initialValue:\"inline-block\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).reduce((function(e,t){return e|Mr(t.value)}),0)}},Mr=function(e){switch(e){case\"block\":case\"-webkit-box\":return 2;case\"inline\":return 4;case\"run-in\":return 8;case\"flow\":return 16;case\"flow-root\":return 32;case\"table\":return 64;case\"flex\":case\"-webkit-flex\":return 128;case\"grid\":case\"-ms-grid\":return 256;case\"ruby\":return 512;case\"subgrid\":return 1024;case\"list-item\":return 2048;case\"table-row-group\":return 4096;case\"table-header-group\":return 8192;case\"table-footer-group\":return 16384;case\"table-row\":return 32768;case\"table-cell\":return 65536;case\"table-column-group\":return 131072;case\"table-column\":return 262144;case\"table-caption\":return 524288;case\"ruby-base\":return 1048576;case\"ruby-text\":return 2097152;case\"ruby-base-container\":return 4194304;case\"ruby-text-container\":return 8388608;case\"contents\":return 16777216;case\"inline-block\":return 33554432;case\"inline-list-item\":return 67108864;case\"inline-table\":return 134217728;case\"inline-flex\":return 268435456;case\"inline-grid\":return 536870912}return 0};!function(e){e[e.NONE=0]=\"NONE\",e[e.LEFT=1]=\"LEFT\",e[e.RIGHT=2]=\"RIGHT\",e[e.INLINE_START=3]=\"INLINE_START\",e[e.INLINE_END=4]=\"INLINE_END\"}(Nr||(Nr={}));var Dr,Kr={name:\"float\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"left\":return Nr.LEFT;case\"right\":return Nr.RIGHT;case\"inline-start\":return Nr.INLINE_START;case\"inline-end\":return Nr.INLINE_END}return Nr.NONE}},zr={name:\"letter-spacing\",initialValue:\"0\",prefix:!1,type:wt.VALUE,parse:function(e){return e.type===d.IDENT_TOKEN&&\"normal\"===e.value?0:e.type===d.NUMBER_TOKEN||e.type===d.DIMENSION_TOKEN?e.number:0}};!function(e){e.NORMAL=\"normal\",e.STRICT=\"strict\"}(Dr||(Dr={}));var Vr,qr={name:\"line-break\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"strict\":return Dr.STRICT;case\"normal\":default:return Dr.NORMAL}}},Gr={name:\"line-height\",initialValue:\"normal\",prefix:!1,type:wt.TOKEN_VALUE},Xr={name:\"list-style-image\",initialValue:\"none\",type:wt.VALUE,prefix:!1,parse:function(e){return e.type===d.IDENT_TOKEN&&\"none\"===e.value?null:ir(e)}};!function(e){e[e.INSIDE=0]=\"INSIDE\",e[e.OUTSIDE=1]=\"OUTSIDE\"}(Vr||(Vr={}));var Wr,Jr={name:\"list-style-position\",initialValue:\"outside\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"inside\":return Vr.INSIDE;case\"outside\":default:return Vr.OUTSIDE}}};!function(e){e[e.NONE=-1]=\"NONE\",e[e.DISC=0]=\"DISC\",e[e.CIRCLE=1]=\"CIRCLE\",e[e.SQUARE=2]=\"SQUARE\",e[e.DECIMAL=3]=\"DECIMAL\",e[e.CJK_DECIMAL=4]=\"CJK_DECIMAL\",e[e.DECIMAL_LEADING_ZERO=5]=\"DECIMAL_LEADING_ZERO\",e[e.LOWER_ROMAN=6]=\"LOWER_ROMAN\",e[e.UPPER_ROMAN=7]=\"UPPER_ROMAN\",e[e.LOWER_GREEK=8]=\"LOWER_GREEK\",e[e.LOWER_ALPHA=9]=\"LOWER_ALPHA\",e[e.UPPER_ALPHA=10]=\"UPPER_ALPHA\",e[e.ARABIC_INDIC=11]=\"ARABIC_INDIC\",e[e.ARMENIAN=12]=\"ARMENIAN\",e[e.BENGALI=13]=\"BENGALI\",e[e.CAMBODIAN=14]=\"CAMBODIAN\",e[e.CJK_EARTHLY_BRANCH=15]=\"CJK_EARTHLY_BRANCH\",e[e.CJK_HEAVENLY_STEM=16]=\"CJK_HEAVENLY_STEM\",e[e.CJK_IDEOGRAPHIC=17]=\"CJK_IDEOGRAPHIC\",e[e.DEVANAGARI=18]=\"DEVANAGARI\",e[e.ETHIOPIC_NUMERIC=19]=\"ETHIOPIC_NUMERIC\",e[e.GEORGIAN=20]=\"GEORGIAN\",e[e.GUJARATI=21]=\"GUJARATI\",e[e.GURMUKHI=22]=\"GURMUKHI\",e[e.HEBREW=22]=\"HEBREW\",e[e.HIRAGANA=23]=\"HIRAGANA\",e[e.HIRAGANA_IROHA=24]=\"HIRAGANA_IROHA\",e[e.JAPANESE_FORMAL=25]=\"JAPANESE_FORMAL\",e[e.JAPANESE_INFORMAL=26]=\"JAPANESE_INFORMAL\",e[e.KANNADA=27]=\"KANNADA\",e[e.KATAKANA=28]=\"KATAKANA\",e[e.KATAKANA_IROHA=29]=\"KATAKANA_IROHA\",e[e.KHMER=30]=\"KHMER\",e[e.KOREAN_HANGUL_FORMAL=31]=\"KOREAN_HANGUL_FORMAL\",e[e.KOREAN_HANJA_FORMAL=32]=\"KOREAN_HANJA_FORMAL\",e[e.KOREAN_HANJA_INFORMAL=33]=\"KOREAN_HANJA_INFORMAL\",e[e.LAO=34]=\"LAO\",e[e.LOWER_ARMENIAN=35]=\"LOWER_ARMENIAN\",e[e.MALAYALAM=36]=\"MALAYALAM\",e[e.MONGOLIAN=37]=\"MONGOLIAN\",e[e.MYANMAR=38]=\"MYANMAR\",e[e.ORIYA=39]=\"ORIYA\",e[e.PERSIAN=40]=\"PERSIAN\",e[e.SIMP_CHINESE_FORMAL=41]=\"SIMP_CHINESE_FORMAL\",e[e.SIMP_CHINESE_INFORMAL=42]=\"SIMP_CHINESE_INFORMAL\",e[e.TAMIL=43]=\"TAMIL\",e[e.TELUGU=44]=\"TELUGU\",e[e.THAI=45]=\"THAI\",e[e.TIBETAN=46]=\"TIBETAN\",e[e.TRAD_CHINESE_FORMAL=47]=\"TRAD_CHINESE_FORMAL\",e[e.TRAD_CHINESE_INFORMAL=48]=\"TRAD_CHINESE_INFORMAL\",e[e.UPPER_ARMENIAN=49]=\"UPPER_ARMENIAN\",e[e.DISCLOSURE_OPEN=50]=\"DISCLOSURE_OPEN\",e[e.DISCLOSURE_CLOSED=51]=\"DISCLOSURE_CLOSED\"}(Wr||(Wr={}));var Yr,Zr={name:\"list-style-type\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"disc\":return Wr.DISC;case\"circle\":return Wr.CIRCLE;case\"square\":return Wr.SQUARE;case\"decimal\":return Wr.DECIMAL;case\"cjk-decimal\":return Wr.CJK_DECIMAL;case\"decimal-leading-zero\":return Wr.DECIMAL_LEADING_ZERO;case\"lower-roman\":return Wr.LOWER_ROMAN;case\"upper-roman\":return Wr.UPPER_ROMAN;case\"lower-greek\":return Wr.LOWER_GREEK;case\"lower-alpha\":return Wr.LOWER_ALPHA;case\"upper-alpha\":return Wr.UPPER_ALPHA;case\"arabic-indic\":return Wr.ARABIC_INDIC;case\"armenian\":return Wr.ARMENIAN;case\"bengali\":return Wr.BENGALI;case\"cambodian\":return Wr.CAMBODIAN;case\"cjk-earthly-branch\":return Wr.CJK_EARTHLY_BRANCH;case\"cjk-heavenly-stem\":return Wr.CJK_HEAVENLY_STEM;case\"cjk-ideographic\":return Wr.CJK_IDEOGRAPHIC;case\"devanagari\":return Wr.DEVANAGARI;case\"ethiopic-numeric\":return Wr.ETHIOPIC_NUMERIC;case\"georgian\":return Wr.GEORGIAN;case\"gujarati\":return Wr.GUJARATI;case\"gurmukhi\":return Wr.GURMUKHI;case\"hebrew\":return Wr.HEBREW;case\"hiragana\":return Wr.HIRAGANA;case\"hiragana-iroha\":return Wr.HIRAGANA_IROHA;case\"japanese-formal\":return Wr.JAPANESE_FORMAL;case\"japanese-informal\":return Wr.JAPANESE_INFORMAL;case\"kannada\":return Wr.KANNADA;case\"katakana\":return Wr.KATAKANA;case\"katakana-iroha\":return Wr.KATAKANA_IROHA;case\"khmer\":return Wr.KHMER;case\"korean-hangul-formal\":return Wr.KOREAN_HANGUL_FORMAL;case\"korean-hanja-formal\":return Wr.KOREAN_HANJA_FORMAL;case\"korean-hanja-informal\":return Wr.KOREAN_HANJA_INFORMAL;case\"lao\":return Wr.LAO;case\"lower-armenian\":return Wr.LOWER_ARMENIAN;case\"malayalam\":return Wr.MALAYALAM;case\"mongolian\":return Wr.MONGOLIAN;case\"myanmar\":return Wr.MYANMAR;case\"oriya\":return Wr.ORIYA;case\"persian\":return Wr.PERSIAN;case\"simp-chinese-formal\":return Wr.SIMP_CHINESE_FORMAL;case\"simp-chinese-informal\":return Wr.SIMP_CHINESE_INFORMAL;case\"tamil\":return Wr.TAMIL;case\"telugu\":return Wr.TELUGU;case\"thai\":return Wr.THAI;case\"tibetan\":return Wr.TIBETAN;case\"trad-chinese-formal\":return Wr.TRAD_CHINESE_FORMAL;case\"trad-chinese-informal\":return Wr.TRAD_CHINESE_INFORMAL;case\"upper-armenian\":return Wr.UPPER_ARMENIAN;case\"disclosure-open\":return Wr.DISCLOSURE_OPEN;case\"disclosure-closed\":return Wr.DISCLOSURE_CLOSED;case\"none\":default:return Wr.NONE}}},$r=function(e){return{name:\"margin-\"+e,initialValue:\"0\",prefix:!1,type:wt.TOKEN_VALUE}},en=$r(\"top\"),tn=$r(\"right\"),rn=$r(\"bottom\"),nn=$r(\"left\");!function(e){e[e.VISIBLE=0]=\"VISIBLE\",e[e.HIDDEN=1]=\"HIDDEN\",e[e.SCROLL=2]=\"SCROLL\",e[e.AUTO=3]=\"AUTO\"}(Yr||(Yr={}));var on,sn={name:\"overflow\",initialValue:\"visible\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).map((function(e){switch(e.value){case\"hidden\":return Yr.HIDDEN;case\"scroll\":return Yr.SCROLL;case\"auto\":return Yr.AUTO;case\"visible\":default:return Yr.VISIBLE}}))}};!function(e){e.NORMAL=\"normal\",e.BREAK_WORD=\"break-word\"}(on||(on={}));var an,An={name:\"overflow-wrap\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"break-word\":return on.BREAK_WORD;case\"normal\":default:return on.NORMAL}}},un=function(e){return{name:\"padding-\"+e,initialValue:\"0\",prefix:!1,type:wt.TYPE_VALUE,format:\"length-percentage\"}},cn=un(\"top\"),ln=un(\"right\"),dn=un(\"bottom\"),fn=un(\"left\");!function(e){e[e.LEFT=0]=\"LEFT\",e[e.CENTER=1]=\"CENTER\",e[e.RIGHT=2]=\"RIGHT\"}(an||(an={}));var hn,pn={name:\"text-align\",initialValue:\"left\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"right\":return an.RIGHT;case\"center\":case\"justify\":return an.CENTER;case\"left\":default:return an.LEFT}}};!function(e){e[e.STATIC=0]=\"STATIC\",e[e.RELATIVE=1]=\"RELATIVE\",e[e.ABSOLUTE=2]=\"ABSOLUTE\",e[e.FIXED=3]=\"FIXED\",e[e.STICKY=4]=\"STICKY\"}(hn||(hn={}));var mn,gn={name:\"position\",initialValue:\"static\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"relative\":return hn.RELATIVE;case\"absolute\":return hn.ABSOLUTE;case\"fixed\":return hn.FIXED;case\"sticky\":return hn.STICKY}return hn.STATIC}},yn={name:\"text-shadow\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return 1===e.length&&Xe(e[0],\"none\")?[]:Ye(e).map((function(e){for(var t={color:_t.TRANSPARENT,offsetX:rt,offsetY:rt,blur:rt},r=0,n=0;n\u003Ce.length;n++){var o=e[n];$e(o)?(0===r?t.offsetX=o:1===r?t.offsetY=o:t.blur=o,r++):t.color=ft(o)}return t}))}};!function(e){e[e.NONE=0]=\"NONE\",e[e.LOWERCASE=1]=\"LOWERCASE\",e[e.UPPERCASE=2]=\"UPPERCASE\",e[e.CAPITALIZE=3]=\"CAPITALIZE\"}(mn||(mn={}));var vn,wn={name:\"text-transform\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"uppercase\":return mn.UPPERCASE;case\"lowercase\":return mn.LOWERCASE;case\"capitalize\":return mn.CAPITALIZE}return mn.NONE}},bn={name:\"transform\",initialValue:\"none\",prefix:!0,type:wt.VALUE,parse:function(e){if(e.type===d.IDENT_TOKEN&&\"none\"===e.value)return null;if(e.type===d.FUNCTION){var t=Bn[e.name];if(void 0===t)throw new Error('Attempting to parse an unsupported transform function \"'+e.name+'\"');return t(e.values)}return null}},Bn={matrix:function(e){var t=e.filter((function(e){return e.type===d.NUMBER_TOKEN})).map((function(e){return e.number}));return 6===t.length?t:null},matrix3d:function(e){var t=e.filter((function(e){return e.type===d.NUMBER_TOKEN})).map((function(e){return e.number})),r=t[0],n=t[1],o=(t[2],t[3],t[4]),s=t[5],i=(t[6],t[7],t[8],t[9],t[10],t[11],t[12]),a=t[13];return t[14],t[15],16===t.length?[r,n,o,s,i,a]:null}},jn={type:d.PERCENTAGE_TOKEN,number:50,flags:4},_n=[jn,jn],Cn={name:\"transform-origin\",initialValue:\"50% 50%\",prefix:!0,type:wt.LIST,parse:function(e){var t=e.filter(et);return 2!==t.length?_n:[t[0],t[1]]}};!function(e){e[e.VISIBLE=0]=\"VISIBLE\",e[e.HIDDEN=1]=\"HIDDEN\",e[e.COLLAPSE=2]=\"COLLAPSE\"}(vn||(vn={}));var xn,En={name:\"visible\",initialValue:\"none\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"hidden\":return vn.HIDDEN;case\"collapse\":return vn.COLLAPSE;case\"visible\":default:return vn.VISIBLE}}};!function(e){e.NORMAL=\"normal\",e.BREAK_ALL=\"break-all\",e.KEEP_ALL=\"keep-all\"}(xn||(xn={}));var Nn,Qn={name:\"word-break\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"break-all\":return xn.BREAK_ALL;case\"keep-all\":return xn.KEEP_ALL;case\"normal\":default:return xn.NORMAL}}},Fn={name:\"z-index\",initialValue:\"auto\",prefix:!1,type:wt.VALUE,parse:function(e){if(e.type===d.IDENT_TOKEN)return{auto:!0,order:0};if(Ve(e))return{auto:!1,order:e.number};throw new Error(\"Invalid z-index number parsed\")}},Un={name:\"opacity\",initialValue:\"1\",type:wt.VALUE,prefix:!1,parse:function(e){return Ve(e)?e.number:1}},Sn={name:\"text-decoration-color\",initialValue:\"transparent\",prefix:!1,type:wt.TYPE_VALUE,format:\"color\"},Ln={name:\"text-decoration-line\",initialValue:\"none\",prefix:!1,type:wt.LIST,parse:function(e){return e.filter(qe).map((function(e){switch(e.value){case\"underline\":return 1;case\"overline\":return 2;case\"line-through\":return 3;case\"none\":return 4}return 0})).filter((function(e){return 0!==e}))}},Tn={name:\"font-family\",initialValue:\"\",prefix:!1,type:wt.LIST,parse:function(e){var t=[],r=[];return e.forEach((function(e){switch(e.type){case d.IDENT_TOKEN:case d.STRING_TOKEN:t.push(e.value);break;case d.NUMBER_TOKEN:t.push(e.number.toString());break;case d.COMMA_TOKEN:r.push(t.join(\" \")),t.length=0}})),t.length&&r.push(t.join(\" \")),r.map((function(e){return-1===e.indexOf(\" \")?e:\"'\"+e+\"'\"}))}},Hn={name:\"font-size\",initialValue:\"0\",prefix:!1,type:wt.TYPE_VALUE,format:\"length\"},In={name:\"font-weight\",initialValue:\"normal\",type:wt.VALUE,prefix:!1,parse:function(e){if(Ve(e))return e.number;if(qe(e))switch(e.value){case\"bold\":return 700;case\"normal\":default:return 400}return 400}},Pn={name:\"font-variant\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return e.filter(qe).map((function(e){return e.value}))}};!function(e){e.NORMAL=\"normal\",e.ITALIC=\"italic\",e.OBLIQUE=\"oblique\"}(Nn||(Nn={}));var On,kn={name:\"font-style\",initialValue:\"normal\",prefix:!1,type:wt.IDENT_VALUE,parse:function(e){switch(e){case\"oblique\":return Nn.OBLIQUE;case\"italic\":return Nn.ITALIC;case\"normal\":default:return Nn.NORMAL}}},Rn=function(e,t){return 0!=(e&t)},Mn={name:\"content\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){if(0===e.length)return[];var t=e[0];return t.type===d.IDENT_TOKEN&&\"none\"===t.value?[]:e}},Dn={name:\"counter-increment\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return null;var t=e[0];if(t.type===d.IDENT_TOKEN&&\"none\"===t.value)return null;for(var r=[],n=e.filter(We),o=0;o\u003Cn.length;o++){var s=n[o],i=n[o+1];if(s.type===d.IDENT_TOKEN){var a=i&&Ve(i)?i.number:1;r.push({counter:s.value,increment:a})}}return r}},Kn={name:\"counter-reset\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return[];for(var t=[],r=e.filter(We),n=0;n\u003Cr.length;n++){var o=r[n],s=r[n+1];if(qe(o)&&\"none\"!==o.value){var i=s&&Ve(s)?s.number:0;t.push({counter:o.value,reset:i})}}return t}},zn={name:\"quotes\",initialValue:\"none\",prefix:!0,type:wt.LIST,parse:function(e){if(0===e.length)return null;var t=e[0];if(t.type===d.IDENT_TOKEN&&\"none\"===t.value)return null;var r=[],n=e.filter(Ge);if(n.length%2!=0)return null;for(var o=0;o\u003Cn.length;o+=2){var s=n[o].value,i=n[o+1].value;r.push({open:s,close:i})}return r}},Vn=function(e,t,r){if(!e)return\"\";var n=e[Math.min(t,e.length-1)];return n?r?n.open:n.close:\"\"},qn={name:\"box-shadow\",initialValue:\"none\",type:wt.LIST,prefix:!1,parse:function(e){return 1===e.length&&Xe(e[0],\"none\")?[]:Ye(e).map((function(e){for(var t={color:255,offsetX:rt,offsetY:rt,blur:rt,spread:rt,inset:!1},r=0,n=0;n\u003Ce.length;n++){var o=e[n];Xe(o,\"inset\")?t.inset=!0:$e(o)?(0===r?t.offsetX=o:1===r?t.offsetY=o:2===r?t.blur=o:t.spread=o,r++):t.color=ft(o)}return t}))}},Gn=function(){function e(e){this.backgroundClip=Jn(xt,e.backgroundClip),this.backgroundColor=Jn(Et,e.backgroundColor),this.backgroundImage=Jn(ur,e.backgroundImage),this.backgroundOrigin=Jn(cr,e.backgroundOrigin),this.backgroundPosition=Jn(lr,e.backgroundPosition),this.backgroundRepeat=Jn(fr,e.backgroundRepeat),this.backgroundSize=Jn(mr,e.backgroundSize),this.borderTopColor=Jn(vr,e.borderTopColor),this.borderRightColor=Jn(wr,e.borderRightColor),this.borderBottomColor=Jn(br,e.borderBottomColor),this.borderLeftColor=Jn(Br,e.borderLeftColor),this.borderTopLeftRadius=Jn(_r,e.borderTopLeftRadius),this.borderTopRightRadius=Jn(Cr,e.borderTopRightRadius),this.borderBottomRightRadius=Jn(xr,e.borderBottomRightRadius),this.borderBottomLeftRadius=Jn(Er,e.borderBottomLeftRadius),this.borderTopStyle=Jn(Fr,e.borderTopStyle),this.borderRightStyle=Jn(Ur,e.borderRightStyle),this.borderBottomStyle=Jn(Sr,e.borderBottomStyle),this.borderLeftStyle=Jn(Lr,e.borderLeftStyle),this.borderTopWidth=Jn(Hr,e.borderTopWidth),this.borderRightWidth=Jn(Ir,e.borderRightWidth),this.borderBottomWidth=Jn(Pr,e.borderBottomWidth),this.borderLeftWidth=Jn(Or,e.borderLeftWidth),this.boxShadow=Jn(qn,e.boxShadow),this.color=Jn(kr,e.color),this.display=Jn(Rr,e.display),this.float=Jn(Kr,e.cssFloat),this.fontFamily=Jn(Tn,e.fontFamily),this.fontSize=Jn(Hn,e.fontSize),this.fontStyle=Jn(kn,e.fontStyle),this.fontVariant=Jn(Pn,e.fontVariant),this.fontWeight=Jn(In,e.fontWeight),this.letterSpacing=Jn(zr,e.letterSpacing),this.lineBreak=Jn(qr,e.lineBreak),this.lineHeight=Jn(Gr,e.lineHeight),this.listStyleImage=Jn(Xr,e.listStyleImage),this.listStylePosition=Jn(Jr,e.listStylePosition),this.listStyleType=Jn(Zr,e.listStyleType),this.marginTop=Jn(en,e.marginTop),this.marginRight=Jn(tn,e.marginRight),this.marginBottom=Jn(rn,e.marginBottom),this.marginLeft=Jn(nn,e.marginLeft),this.opacity=Jn(Un,e.opacity);var t=Jn(sn,e.overflow);this.overflowX=t[0],this.overflowY=t[t.length>1?1:0],this.overflowWrap=Jn(An,e.overflowWrap),this.paddingTop=Jn(cn,e.paddingTop),this.paddingRight=Jn(ln,e.paddingRight),this.paddingBottom=Jn(dn,e.paddingBottom),this.paddingLeft=Jn(fn,e.paddingLeft),this.position=Jn(gn,e.position),this.textAlign=Jn(pn,e.textAlign),this.textDecorationColor=Jn(Sn,e.textDecorationColor||e.color),this.textDecorationLine=Jn(Ln,e.textDecorationLine),this.textShadow=Jn(yn,e.textShadow),this.textTransform=Jn(wn,e.textTransform),this.transform=Jn(bn,e.transform),this.transformOrigin=Jn(Cn,e.transformOrigin),this.visibility=Jn(En,e.visibility),this.wordBreak=Jn(Qn,e.wordBreak),this.zIndex=Jn(Fn,e.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===vn.VISIBLE},e.prototype.isTransparent=function(){return ht(this.backgroundColor)},e.prototype.isTransformed=function(){return null!==this.transform},e.prototype.isPositioned=function(){return this.position!==hn.STATIC},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==Nr.NONE},e.prototype.isInlineLevel=function(){return Rn(this.display,4)||Rn(this.display,33554432)||Rn(this.display,268435456)||Rn(this.display,536870912)||Rn(this.display,67108864)||Rn(this.display,134217728)},e}(),Xn=function(e){this.content=Jn(Mn,e.content),this.quotes=Jn(zn,e.quotes)},Wn=function(e){this.counterIncrement=Jn(Dn,e.counterIncrement),this.counterReset=Jn(Kn,e.counterReset)},Jn=function(e,t){var r=new De,n=null!=t?t.toString():e.initialValue;r.write(n);var o=new Ke(r.read());switch(e.type){case wt.IDENT_VALUE:var s=o.parseComponentValue();return e.parse(qe(s)?s.value:e.initialValue);case wt.VALUE:return e.parse(o.parseComponentValue());case wt.LIST:return e.parse(o.parseComponentValues());case wt.TOKEN_VALUE:return o.parseComponentValue();case wt.TYPE_VALUE:switch(e.format){case\"angle\":return ut(o.parseComponentValue());case\"color\":return ft(o.parseComponentValue());case\"image\":return ir(o.parseComponentValue());case\"length\":var i=o.parseComponentValue();return $e(i)?i:rt;case\"length-percentage\":var a=o.parseComponentValue();return et(a)?a:rt}}throw new Error(\"Attempting to parse unsupported css format type \"+e.format)},Yn=function(e){this.styles=new Gn(window.getComputedStyle(e,null)),this.textNodes=[],this.elements=[],null!==this.styles.transform&&So(e)&&(e.style.transform=\"none\"),this.bounds=i(e),this.flags=0},Zn=function(e,t){this.text=e,this.bounds=t},$n=function(e){var t=e.ownerDocument;if(t){var r=t.createElement(\"html2canvaswrapper\");r.appendChild(e.cloneNode(!0));var n=e.parentNode;if(n){n.replaceChild(r,e);var o=i(r);return r.firstChild&&n.replaceChild(r.firstChild,r),o}}return new s(0,0,0,0)},eo=function(e,t,r){var n=e.ownerDocument;if(!n)throw new Error(\"Node has no owner document\");var o=n.createRange();return o.setStart(e,t),o.setEnd(e,t+r),s.fromClientRect(o.getBoundingClientRect())},to=function(e,t){return 0!==t.letterSpacing?a(e).map((function(e){return A(e)})):ro(e,t)},ro=function(e,t){for(var r,n=function(e,t){var r=a(e),n=ie(r,t),o=n[0],s=n[1],i=n[2],A=r.length,u=0,c=0;return{next:function(){if(c>=A)return{done:!0,value:null};for(var e=G;c\u003CA&&(e=se(r,s,o,++c,i))===G;);if(e!==G||c===A){var t=new ae(r,e,u,c);return u=c,{value:t,done:!1}}return{done:!0,value:null}}}}(e,{lineBreak:t.lineBreak,wordBreak:t.overflowWrap===on.BREAK_WORD?\"break-word\":t.wordBreak}),o=[];!(r=n.next()).done;)r.value&&o.push(r.value.slice());return o},no=function(e,t){this.text=oo(e.data,t.textTransform),this.textBounds=function(e,t,r){var n=to(e,t),o=[],s=0;return n.forEach((function(e){if(t.textDecorationLine.length||e.trim().length>0)if(Pt.SUPPORT_RANGE_BOUNDS)o.push(new Zn(e,eo(r,s,e.length)));else{var n=r.splitText(e.length);o.push(new Zn(e,$n(r))),r=n}else Pt.SUPPORT_RANGE_BOUNDS||(r=r.splitText(e.length));s+=e.length})),o}(this.text,t,e)},oo=function(e,t){switch(t){case mn.LOWERCASE:return e.toLowerCase();case mn.CAPITALIZE:return e.replace(so,io);case mn.UPPERCASE:return e.toUpperCase();default:return e}},so=\u002F(^|\\s|:|-|\\(|\\))([a-z])\u002Fg,io=function(e,t,r){return e.length>0?t+r.toUpperCase():e},ao=function(e){function r(t){var r=e.call(this,t)||this;return r.src=t.currentSrc||t.src,r.intrinsicWidth=t.naturalWidth,r.intrinsicHeight=t.naturalHeight,kt.getInstance().addImage(r.src),r}return t(r,e),r}(Yn),Ao=function(e){function r(t){var r=e.call(this,t)||this;return r.canvas=t,r.intrinsicWidth=t.width,r.intrinsicHeight=t.height,r}return t(r,e),r}(Yn),uo=function(e){function r(t){var r=e.call(this,t)||this,n=new XMLSerializer;return r.svg=\"data:image\u002Fsvg+xml,\"+encodeURIComponent(n.serializeToString(t)),r.intrinsicWidth=t.width.baseVal.value,r.intrinsicHeight=t.height.baseVal.value,kt.getInstance().addImage(r.svg),r}return t(r,e),r}(Yn),co=function(e){function r(t){var r=e.call(this,t)||this;return r.value=t.value,r}return t(r,e),r}(Yn),lo=function(e){function r(t){var r=e.call(this,t)||this;return r.start=t.start,r.reversed=\"boolean\"==typeof t.reversed&&!0===t.reversed,r}return t(r,e),r}(Yn),fo=[{type:d.DIMENSION_TOKEN,flags:0,unit:\"px\",number:3}],ho=[{type:d.PERCENTAGE_TOKEN,flags:0,number:50}],po=\"checkbox\",mo=\"radio\",go=\"password\",yo=707406591,vo=function(e){function r(t){var r,n,o,i=e.call(this,t)||this;switch(i.type=t.type.toLowerCase(),i.checked=t.checked,i.value=0===(o=(n=t).type===go?new Array(n.value.length+1).join(\"•\"):n.value).length?n.placeholder||\"\":o,i.type!==po&&i.type!==mo||(i.styles.backgroundColor=3739148031,i.styles.borderTopColor=i.styles.borderRightColor=i.styles.borderBottomColor=i.styles.borderLeftColor=2779096575,i.styles.borderTopWidth=i.styles.borderRightWidth=i.styles.borderBottomWidth=i.styles.borderLeftWidth=1,i.styles.borderTopStyle=i.styles.borderRightStyle=i.styles.borderBottomStyle=i.styles.borderLeftStyle=pr.SOLID,i.styles.backgroundClip=[bt.BORDER_BOX],i.styles.backgroundOrigin=[0],i.bounds=(r=i.bounds).width>r.height?new s(r.left+(r.width-r.height)\u002F2,r.top,r.height,r.height):r.width\u003Cr.height?new s(r.left,r.top+(r.height-r.width)\u002F2,r.width,r.width):r),i.type){case po:i.styles.borderTopRightRadius=i.styles.borderTopLeftRadius=i.styles.borderBottomRightRadius=i.styles.borderBottomLeftRadius=fo;break;case mo:i.styles.borderTopRightRadius=i.styles.borderTopLeftRadius=i.styles.borderBottomRightRadius=i.styles.borderBottomLeftRadius=ho}return i}return t(r,e),r}(Yn),wo=function(e){function r(t){var r=e.call(this,t)||this,n=t.options[t.selectedIndex||0];return r.value=n&&n.text||\"\",r}return t(r,e),r}(Yn),bo=function(e){function r(t){var r=e.call(this,t)||this;return r.value=t.value,r}return t(r,e),r}(Yn),Bo=function(e){return ft(Ke.create(e).parseComponentValue())},jo=function(e){function r(t){var r=e.call(this,t)||this;r.src=t.src,r.width=parseInt(t.width,10)||0,r.height=parseInt(t.height,10)||0,r.backgroundColor=r.styles.backgroundColor;try{if(t.contentWindow&&t.contentWindow.document&&t.contentWindow.document.documentElement){r.tree=Eo(t.contentWindow.document.documentElement);var n=t.contentWindow.document.documentElement?Bo(getComputedStyle(t.contentWindow.document.documentElement).backgroundColor):_t.TRANSPARENT,o=t.contentWindow.document.body?Bo(getComputedStyle(t.contentWindow.document.body).backgroundColor):_t.TRANSPARENT;r.backgroundColor=ht(n)?ht(o)?r.styles.backgroundColor:o:n}}catch(e){}return r}return t(r,e),r}(Yn),_o=[\"OL\",\"UL\",\"MENU\"],Co=function(e,t,r){for(var n=e.firstChild,o=void 0;n;n=o)if(o=n.nextSibling,Fo(n)&&n.data.trim().length>0)t.textNodes.push(new no(n,t.styles));else if(Uo(n)){var s=xo(n);s.styles.isVisible()&&(No(n,s,r)?s.flags|=4:Qo(s.styles)&&(s.flags|=2),-1!==_o.indexOf(n.tagName)&&(s.flags|=8),t.elements.push(s),zo(n)||Po(n)||Vo(n)||Co(n,s,r))}},xo=function(e){return Ro(e)?new ao(e):ko(e)?new Ao(e):Po(e)?new uo(e):To(e)?new co(e):Ho(e)?new lo(e):Io(e)?new vo(e):Vo(e)?new wo(e):zo(e)?new bo(e):Mo(e)?new jo(e):new Yn(e)},Eo=function(e){var t=xo(e);return t.flags|=4,Co(e,t,t),t},No=function(e,t,r){return t.styles.isPositionedWithZIndex()||t.styles.opacity\u003C1||t.styles.isTransformed()||Oo(e)&&r.styles.isTransparent()},Qo=function(e){return e.isPositioned()||e.isFloating()},Fo=function(e){return e.nodeType===Node.TEXT_NODE},Uo=function(e){return e.nodeType===Node.ELEMENT_NODE},So=function(e){return Uo(e)&&void 0!==e.style&&!Lo(e)},Lo=function(e){return\"object\"==typeof e.className},To=function(e){return\"LI\"===e.tagName},Ho=function(e){return\"OL\"===e.tagName},Io=function(e){return\"INPUT\"===e.tagName},Po=function(e){return\"svg\"===e.tagName},Oo=function(e){return\"BODY\"===e.tagName},ko=function(e){return\"CANVAS\"===e.tagName},Ro=function(e){return\"IMG\"===e.tagName},Mo=function(e){return\"IFRAME\"===e.tagName},Do=function(e){return\"STYLE\"===e.tagName},Ko=function(e){return\"SCRIPT\"===e.tagName},zo=function(e){return\"TEXTAREA\"===e.tagName},Vo=function(e){return\"SELECT\"===e.tagName},qo=function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(e){var t=this.counters[e];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(e){return this.counters[e]||[]},e.prototype.pop=function(e){var t=this;e.forEach((function(e){return t.counters[e].pop()}))},e.prototype.parse=function(e){var t=this,r=e.counterIncrement,n=e.counterReset,o=!0;null!==r&&r.forEach((function(e){var r=t.counters[e.counter];r&&0!==e.increment&&(o=!1,r[Math.max(0,r.length-1)]+=e.increment)}));var s=[];return o&&n.forEach((function(e){var r=t.counters[e.counter];s.push(e.counter),r||(r=t.counters[e.counter]=[]),r.push(e.reset)})),s},e}(),Go={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[\"M\",\"CM\",\"D\",\"CD\",\"C\",\"XC\",\"L\",\"XL\",\"X\",\"IX\",\"V\",\"IV\",\"I\"]},Xo={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"Ք\",\"Փ\",\"Ւ\",\"Ց\",\"Ր\",\"Տ\",\"Վ\",\"Ս\",\"Ռ\",\"Ջ\",\"Պ\",\"Չ\",\"Ո\",\"Շ\",\"Ն\",\"Յ\",\"Մ\",\"Ճ\",\"Ղ\",\"Ձ\",\"Հ\",\"Կ\",\"Ծ\",\"Խ\",\"Լ\",\"Ի\",\"Ժ\",\"Թ\",\"Ը\",\"Է\",\"Զ\",\"Ե\",\"Դ\",\"Գ\",\"Բ\",\"Ա\"]},Wo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:[\"י׳\",\"ט׳\",\"ח׳\",\"ז׳\",\"ו׳\",\"ה׳\",\"ד׳\",\"ג׳\",\"ב׳\",\"א׳\",\"ת\",\"ש\",\"ר\",\"ק\",\"צ\",\"פ\",\"ע\",\"ס\",\"נ\",\"מ\",\"ל\",\"כ\",\"יט\",\"יח\",\"יז\",\"טז\",\"טו\",\"י\",\"ט\",\"ח\",\"ז\",\"ו\",\"ה\",\"ד\",\"ג\",\"ב\",\"א\"]},Jo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:[\"ჵ\",\"ჰ\",\"ჯ\",\"ჴ\",\"ხ\",\"ჭ\",\"წ\",\"ძ\",\"ც\",\"ჩ\",\"შ\",\"ყ\",\"ღ\",\"ქ\",\"ფ\",\"ჳ\",\"ტ\",\"ს\",\"რ\",\"ჟ\",\"პ\",\"ო\",\"ჲ\",\"ნ\",\"მ\",\"ლ\",\"კ\",\"ი\",\"თ\",\"ჱ\",\"ზ\",\"ვ\",\"ე\",\"დ\",\"გ\",\"ბ\",\"ა\"]},Yo=function(e,t,r,n,o,s){return e\u003Ct||e>r?is(e,o,s.length>0):n.integers.reduce((function(t,r,o){for(;e>=r;)e-=r,t+=n.values[o];return t}),\"\")+s},Zo=function(e,t,r,n){var o=\"\";do{r||e--,o=n(e)+o,e\u002F=t}while(e*t>=t);return o},$o=function(e,t,r,n,o){var s=r-t+1;return(e\u003C0?\"-\":\"\")+(Zo(Math.abs(e),s,n,(function(e){return A(Math.floor(e%s)+t)}))+o)},es=function(e,t,r){void 0===r&&(r=\". \");var n=t.length;return Zo(Math.abs(e),n,!1,(function(e){return t[Math.floor(e%n)]}))+r},ts=function(e,t,r,n,o,s){if(e\u003C-9999||e>9999)return is(e,Wr.CJK_DECIMAL,o.length>0);var i=Math.abs(e),a=o;if(0===i)return t[0]+a;for(var A=0;i>0&&A\u003C=4;A++){var u=i%10;0===u&&Rn(s,1)&&\"\"!==a?a=t[u]+a:u>1||1===u&&0===A||1===u&&1===A&&Rn(s,2)||1===u&&1===A&&Rn(s,4)&&e>100||1===u&&A>1&&Rn(s,8)?a=t[u]+(A>0?r[A-1]:\"\")+a:1===u&&A>0&&(a=r[A-1]+a),i=Math.floor(i\u002F10)}return(e\u003C0?n:\"\")+a},rs=\"十百千萬\",ns=\"拾佰仟萬\",os=\"マイナス\",ss=\"마이너스\",is=function(e,t,r){var n=r?\". \":\"\",o=r?\"、\":\"\",s=r?\", \":\"\",i=r?\" \":\"\";switch(t){case Wr.DISC:return\"•\"+i;case Wr.CIRCLE:return\"◦\"+i;case Wr.SQUARE:return\"◾\"+i;case Wr.DECIMAL_LEADING_ZERO:var a=$o(e,48,57,!0,n);return a.length\u003C4?\"0\"+a:a;case Wr.CJK_DECIMAL:return es(e,\"〇一二三四五六七八九\",o);case Wr.LOWER_ROMAN:return Yo(e,1,3999,Go,Wr.DECIMAL,n).toLowerCase();case Wr.UPPER_ROMAN:return Yo(e,1,3999,Go,Wr.DECIMAL,n);case Wr.LOWER_GREEK:return $o(e,945,969,!1,n);case Wr.LOWER_ALPHA:return $o(e,97,122,!1,n);case Wr.UPPER_ALPHA:return $o(e,65,90,!1,n);case Wr.ARABIC_INDIC:return $o(e,1632,1641,!0,n);case Wr.ARMENIAN:case Wr.UPPER_ARMENIAN:return Yo(e,1,9999,Xo,Wr.DECIMAL,n);case Wr.LOWER_ARMENIAN:return Yo(e,1,9999,Xo,Wr.DECIMAL,n).toLowerCase();case Wr.BENGALI:return $o(e,2534,2543,!0,n);case Wr.CAMBODIAN:case Wr.KHMER:return $o(e,6112,6121,!0,n);case Wr.CJK_EARTHLY_BRANCH:return es(e,\"子丑寅卯辰巳午未申酉戌亥\",o);case Wr.CJK_HEAVENLY_STEM:return es(e,\"甲乙丙丁戊己庚辛壬癸\",o);case Wr.CJK_IDEOGRAPHIC:case Wr.TRAD_CHINESE_INFORMAL:return ts(e,\"零一二三四五六七八九\",rs,\"負\",o,14);case Wr.TRAD_CHINESE_FORMAL:return ts(e,\"零壹貳參肆伍陸柒捌玖\",ns,\"負\",o,15);case Wr.SIMP_CHINESE_INFORMAL:return ts(e,\"零一二三四五六七八九\",rs,\"负\",o,14);case Wr.SIMP_CHINESE_FORMAL:return ts(e,\"零壹贰叁肆伍陆柒捌玖\",ns,\"负\",o,15);case Wr.JAPANESE_INFORMAL:return ts(e,\"〇一二三四五六七八九\",\"十百千万\",os,o,0);case Wr.JAPANESE_FORMAL:return ts(e,\"零壱弐参四伍六七八九\",\"拾百千万\",os,o,7);case Wr.KOREAN_HANGUL_FORMAL:return ts(e,\"영일이삼사오육칠팔구\",\"십백천만\",ss,s,7);case Wr.KOREAN_HANJA_INFORMAL:return ts(e,\"零一二三四五六七八九\",\"十百千萬\",ss,s,0);case Wr.KOREAN_HANJA_FORMAL:return ts(e,\"零壹貳參四五六七八九\",\"拾百千\",ss,s,7);case Wr.DEVANAGARI:return $o(e,2406,2415,!0,n);case Wr.GEORGIAN:return Yo(e,1,19999,Jo,Wr.DECIMAL,n);case Wr.GUJARATI:return $o(e,2790,2799,!0,n);case Wr.GURMUKHI:return $o(e,2662,2671,!0,n);case Wr.HEBREW:return Yo(e,1,10999,Wo,Wr.DECIMAL,n);case Wr.HIRAGANA:return es(e,\"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん\");case Wr.HIRAGANA_IROHA:return es(e,\"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす\");case Wr.KANNADA:return $o(e,3302,3311,!0,n);case Wr.KATAKANA:return es(e,\"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン\",o);case Wr.KATAKANA_IROHA:return es(e,\"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス\",o);case Wr.LAO:return $o(e,3792,3801,!0,n);case Wr.MONGOLIAN:return $o(e,6160,6169,!0,n);case Wr.MYANMAR:return $o(e,4160,4169,!0,n);case Wr.ORIYA:return $o(e,2918,2927,!0,n);case Wr.PERSIAN:return $o(e,1776,1785,!0,n);case Wr.TAMIL:return $o(e,3046,3055,!0,n);case Wr.TELUGU:return $o(e,3174,3183,!0,n);case Wr.THAI:return $o(e,3664,3673,!0,n);case Wr.TIBETAN:return $o(e,3872,3881,!0,n);case Wr.DECIMAL:default:return $o(e,48,57,!0,n)}},as=\"data-html2canvas-ignore\",As=function(){function e(e,t){if(this.options=t,this.scrolledElements=[],this.referenceElement=e,this.counters=new qo,this.quoteDepth=0,!e.ownerDocument)throw new Error(\"Cloned element does not have an owner document\");this.documentElement=this.cloneNode(e.ownerDocument.documentElement)}return e.prototype.toIFrame=function(e,t){var r=this,s=cs(e,t);if(!s.contentWindow)return Promise.reject(\"Unable to find iframe window\");var i=e.defaultView.pageXOffset,a=e.defaultView.pageYOffset,A=s.contentWindow,u=A.document,c=ls(s).then((function(){return n(r,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return this.scrolledElements.forEach(ps),A&&(A.scrollTo(t.left,t.top),!\u002F(iPad|iPhone|iPod)\u002Fg.test(navigator.userAgent)||A.scrollY===t.top&&A.scrollX===t.left||(u.documentElement.style.top=-t.top+\"px\",u.documentElement.style.left=-t.left+\"px\",u.documentElement.style.position=\"absolute\")),e=this.options.onclone,void 0===this.clonedReferenceElement?[2,Promise.reject(\"Error finding the \"+this.referenceElement.nodeName+\" in the cloned document\")]:u.fonts&&u.fonts.ready?[4,u.fonts.ready]:[3,2];case 1:r.sent(),r.label=2;case 2:return\"function\"==typeof e?[2,Promise.resolve().then((function(){return e(u)})).then((function(){return s}))]:[2,s]}}))}))}));return u.open(),u.write(fs(document.doctype)+\"\u003Chtml>\u003C\u002Fhtml>\"),hs(this.referenceElement.ownerDocument,i,a),u.replaceChild(u.adoptNode(this.documentElement),u.documentElement),u.close(),c},e.prototype.createElementClone=function(e){if(ko(e))return this.createCanvasClone(e);if(Do(e))return this.createStyleClone(e);var t=e.cloneNode(!1);return Ro(t)&&\"lazy\"===t.loading&&(t.loading=\"eager\"),t},e.prototype.createStyleClone=function(e){try{var t=e.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce((function(e,t){return t&&\"string\"==typeof t.cssText?e+t.cssText:e}),\"\"),n=e.cloneNode(!1);return n.textContent=r,n}}catch(e){if(Ot.getInstance(this.options.id).error(\"Unable to access cssRules property\",e),\"SecurityError\"!==e.name)throw e}return e.cloneNode(!1)},e.prototype.createCanvasClone=function(e){if(this.options.inlineImages&&e.ownerDocument){var t=e.ownerDocument.createElement(\"img\");try{return t.src=e.toDataURL(),t}catch(e){Ot.getInstance(this.options.id).info(\"Unable to clone canvas contents, canvas is tainted\")}}var r=e.cloneNode(!1);try{r.width=e.width,r.height=e.height;var n=e.getContext(\"2d\"),o=r.getContext(\"2d\");return o&&(n?o.putImageData(n.getImageData(0,0,e.width,e.height),0,0):o.drawImage(e,0,0)),r}catch(e){}return r},e.prototype.cloneNode=function(e){if(Fo(e))return document.createTextNode(e.data);if(!e.ownerDocument)return e.cloneNode(!1);var t=e.ownerDocument.defaultView;if(t&&Uo(e)&&(So(e)||Lo(e))){var r=this.createElementClone(e),n=t.getComputedStyle(e),o=t.getComputedStyle(e,\":before\"),s=t.getComputedStyle(e,\":after\");this.referenceElement===e&&So(r)&&(this.clonedReferenceElement=r),Oo(r)&&vs(r);for(var i=this.counters.parse(new Wn(n)),a=this.resolvePseudoContent(e,r,o,On.BEFORE),A=e.firstChild;A;A=A.nextSibling)Uo(A)&&(Ko(A)||A.hasAttribute(as)||\"function\"==typeof this.options.ignoreElements&&this.options.ignoreElements(A))||this.options.copyStyles&&Uo(A)&&Do(A)||r.appendChild(this.cloneNode(A));a&&r.insertBefore(a,r.firstChild);var u=this.resolvePseudoContent(e,r,s,On.AFTER);return u&&r.appendChild(u),this.counters.pop(i),n&&(this.options.copyStyles||Lo(e))&&!Mo(e)&&ds(n,r),0===e.scrollTop&&0===e.scrollLeft||this.scrolledElements.push([r,e.scrollLeft,e.scrollTop]),(zo(e)||Vo(e))&&(zo(r)||Vo(r))&&(r.value=e.value),r}return e.cloneNode(!1)},e.prototype.resolvePseudoContent=function(e,t,r,n){var o=this;if(r){var s=r.content,i=t.ownerDocument;if(i&&s&&\"none\"!==s&&\"-moz-alt-content\"!==s&&\"none\"!==r.display){this.counters.parse(new Wn(r));var a=new Xn(r),A=i.createElement(\"html2canvaspseudoelement\");ds(r,A),a.content.forEach((function(t){if(t.type===d.STRING_TOKEN)A.appendChild(i.createTextNode(t.value));else if(t.type===d.URL_TOKEN){var r=i.createElement(\"img\");r.src=t.value,r.style.opacity=\"1\",A.appendChild(r)}else if(t.type===d.FUNCTION){if(\"attr\"===t.name){var n=t.values.filter(qe);n.length&&A.appendChild(i.createTextNode(e.getAttribute(n[0].value)||\"\"))}else if(\"counter\"===t.name){var s=t.values.filter(Je),u=s[0],c=s[1];if(u&&qe(u)){var l=o.counters.getCounterValue(u.value),f=c&&qe(c)?Zr.parse(c.value):Wr.DECIMAL;A.appendChild(i.createTextNode(is(l,f,!1)))}}else if(\"counters\"===t.name){var h=t.values.filter(Je),p=(u=h[0],h[1]);if(c=h[2],u&&qe(u)){var m=o.counters.getCounterValues(u.value),g=c&&qe(c)?Zr.parse(c.value):Wr.DECIMAL,y=p&&p.type===d.STRING_TOKEN?p.value:\"\",v=m.map((function(e){return is(e,g,!1)})).join(y);A.appendChild(i.createTextNode(v))}}}else if(t.type===d.IDENT_TOKEN)switch(t.value){case\"open-quote\":A.appendChild(i.createTextNode(Vn(a.quotes,o.quoteDepth++,!0)));break;case\"close-quote\":A.appendChild(i.createTextNode(Vn(a.quotes,--o.quoteDepth,!1)));break;default:A.appendChild(i.createTextNode(t.value))}})),A.className=ms+\" \"+gs;var u=n===On.BEFORE?\" \"+ms:\" \"+gs;return Lo(t)?t.className.baseValue+=u:t.className+=u,A}}},e.destroy=function(e){return!!e.parentNode&&(e.parentNode.removeChild(e),!0)},e}();!function(e){e[e.BEFORE=0]=\"BEFORE\",e[e.AFTER=1]=\"AFTER\"}(On||(On={}));var us,cs=function(e,t){var r=e.createElement(\"iframe\");return r.className=\"html2canvas-container\",r.style.visibility=\"hidden\",r.style.position=\"fixed\",r.style.left=\"-10000px\",r.style.top=\"0px\",r.style.border=\"0\",r.width=t.width.toString(),r.height=t.height.toString(),r.scrolling=\"no\",r.setAttribute(as,\"true\"),e.body.appendChild(r),r},ls=function(e){return new Promise((function(t,r){var n=e.contentWindow;if(!n)return r(\"No window assigned for iframe\");var o=n.document;n.onload=e.onload=o.onreadystatechange=function(){n.onload=e.onload=o.onreadystatechange=null;var r=setInterval((function(){o.body.childNodes.length>0&&\"complete\"===o.readyState&&(clearInterval(r),t(e))}),50)}}))},ds=function(e,t){for(var r=e.length-1;r>=0;r--){var n=e.item(r);\"content\"!==n&&t.style.setProperty(n,e.getPropertyValue(n))}return t},fs=function(e){var t=\"\";return e&&(t+=\"\u003C!DOCTYPE \",e.name&&(t+=e.name),e.internalSubset&&(t+=e.internalSubset),e.publicId&&(t+='\"'+e.publicId+'\"'),e.systemId&&(t+='\"'+e.systemId+'\"'),t+=\">\"),t},hs=function(e,t,r){e&&e.defaultView&&(t!==e.defaultView.pageXOffset||r!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(t,r)},ps=function(e){var t=e[0],r=e[1],n=e[2];t.scrollLeft=r,t.scrollTop=n},ms=\"___html2canvas___pseudoelement_before\",gs=\"___html2canvas___pseudoelement_after\",ys='{\\n    content: \"\" !important;\\n    display: none !important;\\n}',vs=function(e){ws(e,\".\"+ms+\":before\"+ys+\"\\n         .\"+gs+\":after\"+ys)},ws=function(e,t){var r=e.ownerDocument;if(r){var n=r.createElement(\"style\");n.textContent=t,e.appendChild(n)}};!function(e){e[e.VECTOR=0]=\"VECTOR\",e[e.BEZIER_CURVE=1]=\"BEZIER_CURVE\"}(us||(us={}));var bs,Bs=function(e,t){return e.length===t.length&&e.some((function(e,r){return e===t[r]}))},js=function(){function e(e,t){this.type=us.VECTOR,this.x=e,this.y=t}return e.prototype.add=function(t,r){return new e(this.x+t,this.y+r)},e}(),_s=function(e,t,r){return new js(e.x+(t.x-e.x)*r,e.y+(t.y-e.y)*r)},Cs=function(){function e(e,t,r,n){this.type=us.BEZIER_CURVE,this.start=e,this.startControl=t,this.endControl=r,this.end=n}return e.prototype.subdivide=function(t,r){var n=_s(this.start,this.startControl,t),o=_s(this.startControl,this.endControl,t),s=_s(this.endControl,this.end,t),i=_s(n,o,t),a=_s(o,s,t),A=_s(i,a,t);return r?new e(this.start,n,i,A):new e(A,a,s,this.end)},e.prototype.add=function(t,r){return new e(this.start.add(t,r),this.startControl.add(t,r),this.endControl.add(t,r),this.end.add(t,r))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e}(),xs=function(e){return e.type===us.BEZIER_CURVE},Es=function(e){var t=e.styles,r=e.bounds,n=st(t.borderTopLeftRadius,r.width,r.height),o=n[0],s=n[1],i=st(t.borderTopRightRadius,r.width,r.height),a=i[0],A=i[1],u=st(t.borderBottomRightRadius,r.width,r.height),c=u[0],l=u[1],d=st(t.borderBottomLeftRadius,r.width,r.height),f=d[0],h=d[1],p=[];p.push((o+a)\u002Fr.width),p.push((f+c)\u002Fr.width),p.push((s+h)\u002Fr.height),p.push((A+l)\u002Fr.height);var m=Math.max.apply(Math,p);m>1&&(o\u002F=m,s\u002F=m,a\u002F=m,A\u002F=m,c\u002F=m,l\u002F=m,f\u002F=m,h\u002F=m);var g=r.width-a,y=r.height-l,v=r.width-c,w=r.height-h,b=t.borderTopWidth,B=t.borderRightWidth,j=t.borderBottomWidth,_=t.borderLeftWidth,C=it(t.paddingTop,e.bounds.width),x=it(t.paddingRight,e.bounds.width),E=it(t.paddingBottom,e.bounds.width),N=it(t.paddingLeft,e.bounds.width);this.topLeftBorderDoubleOuterBox=o>0||s>0?Ns(r.left+_\u002F3,r.top+b\u002F3,o-_\u002F3,s-b\u002F3,bs.TOP_LEFT):new js(r.left+_\u002F3,r.top+b\u002F3),this.topRightBorderDoubleOuterBox=o>0||s>0?Ns(r.left+g,r.top+b\u002F3,a-B\u002F3,A-b\u002F3,bs.TOP_RIGHT):new js(r.left+r.width-B\u002F3,r.top+b\u002F3),this.bottomRightBorderDoubleOuterBox=c>0||l>0?Ns(r.left+v,r.top+y,c-B\u002F3,l-j\u002F3,bs.BOTTOM_RIGHT):new js(r.left+r.width-B\u002F3,r.top+r.height-j\u002F3),this.bottomLeftBorderDoubleOuterBox=f>0||h>0?Ns(r.left+_\u002F3,r.top+w,f-_\u002F3,h-j\u002F3,bs.BOTTOM_LEFT):new js(r.left+_\u002F3,r.top+r.height-j\u002F3),this.topLeftBorderDoubleInnerBox=o>0||s>0?Ns(r.left+2*_\u002F3,r.top+2*b\u002F3,o-2*_\u002F3,s-2*b\u002F3,bs.TOP_LEFT):new js(r.left+2*_\u002F3,r.top+2*b\u002F3),this.topRightBorderDoubleInnerBox=o>0||s>0?Ns(r.left+g,r.top+2*b\u002F3,a-2*B\u002F3,A-2*b\u002F3,bs.TOP_RIGHT):new js(r.left+r.width-2*B\u002F3,r.top+2*b\u002F3),this.bottomRightBorderDoubleInnerBox=c>0||l>0?Ns(r.left+v,r.top+y,c-2*B\u002F3,l-2*j\u002F3,bs.BOTTOM_RIGHT):new js(r.left+r.width-2*B\u002F3,r.top+r.height-2*j\u002F3),this.bottomLeftBorderDoubleInnerBox=f>0||h>0?Ns(r.left+2*_\u002F3,r.top+w,f-2*_\u002F3,h-2*j\u002F3,bs.BOTTOM_LEFT):new js(r.left+2*_\u002F3,r.top+r.height-2*j\u002F3),this.topLeftBorderStroke=o>0||s>0?Ns(r.left+_\u002F2,r.top+b\u002F2,o-_\u002F2,s-b\u002F2,bs.TOP_LEFT):new js(r.left+_\u002F2,r.top+b\u002F2),this.topRightBorderStroke=o>0||s>0?Ns(r.left+g,r.top+b\u002F2,a-B\u002F2,A-b\u002F2,bs.TOP_RIGHT):new js(r.left+r.width-B\u002F2,r.top+b\u002F2),this.bottomRightBorderStroke=c>0||l>0?Ns(r.left+v,r.top+y,c-B\u002F2,l-j\u002F2,bs.BOTTOM_RIGHT):new js(r.left+r.width-B\u002F2,r.top+r.height-j\u002F2),this.bottomLeftBorderStroke=f>0||h>0?Ns(r.left+_\u002F2,r.top+w,f-_\u002F2,h-j\u002F2,bs.BOTTOM_LEFT):new js(r.left+_\u002F2,r.top+r.height-j\u002F2),this.topLeftBorderBox=o>0||s>0?Ns(r.left,r.top,o,s,bs.TOP_LEFT):new js(r.left,r.top),this.topRightBorderBox=a>0||A>0?Ns(r.left+g,r.top,a,A,bs.TOP_RIGHT):new js(r.left+r.width,r.top),this.bottomRightBorderBox=c>0||l>0?Ns(r.left+v,r.top+y,c,l,bs.BOTTOM_RIGHT):new js(r.left+r.width,r.top+r.height),this.bottomLeftBorderBox=f>0||h>0?Ns(r.left,r.top+w,f,h,bs.BOTTOM_LEFT):new js(r.left,r.top+r.height),this.topLeftPaddingBox=o>0||s>0?Ns(r.left+_,r.top+b,Math.max(0,o-_),Math.max(0,s-b),bs.TOP_LEFT):new js(r.left+_,r.top+b),this.topRightPaddingBox=a>0||A>0?Ns(r.left+Math.min(g,r.width-B),r.top+b,g>r.width+B?0:Math.max(0,a-B),Math.max(0,A-b),bs.TOP_RIGHT):new js(r.left+r.width-B,r.top+b),this.bottomRightPaddingBox=c>0||l>0?Ns(r.left+Math.min(v,r.width-_),r.top+Math.min(y,r.height-j),Math.max(0,c-B),Math.max(0,l-j),bs.BOTTOM_RIGHT):new js(r.left+r.width-B,r.top+r.height-j),this.bottomLeftPaddingBox=f>0||h>0?Ns(r.left+_,r.top+Math.min(w,r.height-j),Math.max(0,f-_),Math.max(0,h-j),bs.BOTTOM_LEFT):new js(r.left+_,r.top+r.height-j),this.topLeftContentBox=o>0||s>0?Ns(r.left+_+N,r.top+b+C,Math.max(0,o-(_+N)),Math.max(0,s-(b+C)),bs.TOP_LEFT):new js(r.left+_+N,r.top+b+C),this.topRightContentBox=a>0||A>0?Ns(r.left+Math.min(g,r.width+_+N),r.top+b+C,g>r.width+_+N?0:a-_+N,A-(b+C),bs.TOP_RIGHT):new js(r.left+r.width-(B+x),r.top+b+C),this.bottomRightContentBox=c>0||l>0?Ns(r.left+Math.min(v,r.width-(_+N)),r.top+Math.min(y,r.height+b+C),Math.max(0,c-(B+x)),l-(j+E),bs.BOTTOM_RIGHT):new js(r.left+r.width-(B+x),r.top+r.height-(j+E)),this.bottomLeftContentBox=f>0||h>0?Ns(r.left+_+N,r.top+w,Math.max(0,f-(_+N)),h-(j+E),bs.BOTTOM_LEFT):new js(r.left+_+N,r.top+r.height-(j+E))};!function(e){e[e.TOP_LEFT=0]=\"TOP_LEFT\",e[e.TOP_RIGHT=1]=\"TOP_RIGHT\",e[e.BOTTOM_RIGHT=2]=\"BOTTOM_RIGHT\",e[e.BOTTOM_LEFT=3]=\"BOTTOM_LEFT\"}(bs||(bs={}));var Ns=function(e,t,r,n,o){var s=(Math.sqrt(2)-1)\u002F3*4,i=r*s,a=n*s,A=e+r,u=t+n;switch(o){case bs.TOP_LEFT:return new Cs(new js(e,u),new js(e,u-a),new js(A-i,t),new js(A,t));case bs.TOP_RIGHT:return new Cs(new js(e,t),new js(e+i,t),new js(A,u-a),new js(A,u));case bs.BOTTOM_RIGHT:return new Cs(new js(A,t),new js(A,t+a),new js(e+i,u),new js(e,u));case bs.BOTTOM_LEFT:default:return new Cs(new js(A,u),new js(A-i,u),new js(e,t+a),new js(e,t))}},Qs=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},Fs=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},Us=function(e,t,r){this.type=0,this.target=6,this.offsetX=e,this.offsetY=t,this.matrix=r},Ss=function(e,t){this.type=1,this.target=t,this.path=e},Ls=function(e){this.type=2,this.target=6,this.opacity=e},Ts=function(e){this.element=e,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]},Hs=function(){function e(e,t){if(this.container=e,this.effects=t.slice(0),this.curves=new Es(e),e.styles.opacity\u003C1&&this.effects.push(new Ls(e.styles.opacity)),null!==e.styles.transform){var r=e.bounds.left+e.styles.transformOrigin[0].number,n=e.bounds.top+e.styles.transformOrigin[1].number,o=e.styles.transform;this.effects.push(new Us(r,n,o))}if(e.styles.overflowX!==Yr.VISIBLE){var s=Qs(this.curves),i=Fs(this.curves);Bs(s,i)?this.effects.push(new Ss(s,6)):(this.effects.push(new Ss(s,2)),this.effects.push(new Ss(i,4)))}}return e.prototype.getParentEffects=function(){var e=this.effects.slice(0);if(this.container.styles.overflowX!==Yr.VISIBLE){var t=Qs(this.curves),r=Fs(this.curves);Bs(t,r)||e.push(new Ss(r,6))}return e},e}(),Is=function(e,t,r,n){e.container.elements.forEach((function(o){var s=Rn(o.flags,4),i=Rn(o.flags,2),a=new Hs(o,e.getParentEffects());Rn(o.styles.display,2048)&&n.push(a);var A=Rn(o.flags,8)?[]:n;if(s||i){var u=s||o.styles.isPositioned()?r:t,c=new Ts(a);if(o.styles.isPositioned()||o.styles.opacity\u003C1||o.styles.isTransformed()){var l=o.styles.zIndex.order;if(l\u003C0){var d=0;u.negativeZIndex.some((function(e,t){return l>e.element.container.styles.zIndex.order?(d=t,!1):d>0})),u.negativeZIndex.splice(d,0,c)}else if(l>0){var f=0;u.positiveZIndex.some((function(e,t){return l>=e.element.container.styles.zIndex.order?(f=t+1,!1):f>0})),u.positiveZIndex.splice(f,0,c)}else u.zeroOrAutoZIndexOrTransformedOrOpacity.push(c)}else o.styles.isFloating()?u.nonPositionedFloats.push(c):u.nonPositionedInlineLevel.push(c);Is(a,c,s?c:r,A)}else o.styles.isInlineLevel()?t.inlineLevel.push(a):t.nonInlineLevel.push(a),Is(a,t,r,A);Rn(o.flags,8)&&Ps(o,A)}))},Ps=function(e,t){for(var r=e instanceof lo?e.start:1,n=e instanceof lo&&e.reversed,o=0;o\u003Ct.length;o++){var s=t[o];s.container instanceof co&&\"number\"==typeof s.container.value&&0!==s.container.value&&(r=s.container.value),s.listValue=is(r,s.container.styles.listStyleType,!0),r+=n?-1:1}},Os=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderBox,e.topLeftPaddingBox,e.topRightBorderBox,e.topRightPaddingBox);case 1:return Rs(e.topRightBorderBox,e.topRightPaddingBox,e.bottomRightBorderBox,e.bottomRightPaddingBox);case 2:return Rs(e.bottomRightBorderBox,e.bottomRightPaddingBox,e.bottomLeftBorderBox,e.bottomLeftPaddingBox);case 3:default:return Rs(e.bottomLeftBorderBox,e.bottomLeftPaddingBox,e.topLeftBorderBox,e.topLeftPaddingBox)}},ks=function(e,t){var r=[];return xs(e)?r.push(e.subdivide(.5,!1)):r.push(e),xs(t)?r.push(t.subdivide(.5,!0)):r.push(t),r},Rs=function(e,t,r,n){var o=[];return xs(e)?o.push(e.subdivide(.5,!1)):o.push(e),xs(r)?o.push(r.subdivide(.5,!0)):o.push(r),xs(n)?o.push(n.subdivide(.5,!0).reverse()):o.push(n),xs(t)?o.push(t.subdivide(.5,!1).reverse()):o.push(t),o},Ms=function(e){var t=e.bounds,r=e.styles;return t.add(r.borderLeftWidth,r.borderTopWidth,-(r.borderRightWidth+r.borderLeftWidth),-(r.borderTopWidth+r.borderBottomWidth))},Ds=function(e){var t=e.styles,r=e.bounds,n=it(t.paddingLeft,r.width),o=it(t.paddingRight,r.width),s=it(t.paddingTop,r.width),i=it(t.paddingBottom,r.width);return r.add(n+t.borderLeftWidth,s+t.borderTopWidth,-(t.borderRightWidth+t.borderLeftWidth+n+o),-(t.borderTopWidth+t.borderBottomWidth+s+i))},Ks=function(e,t,r){var n=function(e,t){return 0===e?t.bounds:2===e?Ds(t):Ms(t)}(Gs(e.styles.backgroundOrigin,t),e),o=function(e,t){return e===bt.BORDER_BOX?t.bounds:e===bt.CONTENT_BOX?Ds(t):Ms(t)}(Gs(e.styles.backgroundClip,t),e),s=qs(Gs(e.styles.backgroundSize,t),r,n),i=s[0],a=s[1],A=st(Gs(e.styles.backgroundPosition,t),n.width-i,n.height-a);return[Xs(Gs(e.styles.backgroundRepeat,t),A,s,n,o),Math.round(n.left+A[0]),Math.round(n.top+A[1]),i,a]},zs=function(e){return qe(e)&&e.value===dr.AUTO},Vs=function(e){return\"number\"==typeof e},qs=function(e,t,r){var n=t[0],o=t[1],s=t[2],i=e[0],a=e[1];if(et(i)&&a&&et(a))return[it(i,r.width),it(a,r.height)];var A=Vs(s);if(qe(i)&&(i.value===dr.CONTAIN||i.value===dr.COVER))return Vs(s)?r.width\u002Fr.height\u003Cs!=(i.value===dr.COVER)?[r.width,r.width\u002Fs]:[r.height*s,r.height]:[r.width,r.height];var u=Vs(n),c=Vs(o),l=u||c;if(zs(i)&&(!a||zs(a)))return u&&c?[n,o]:A||l?l&&A?[u?n:o*s,c?o:n\u002Fs]:[u?n:r.width,c?o:r.height]:[r.width,r.height];if(A){var d=0,f=0;return et(i)?d=it(i,r.width):et(a)&&(f=it(a,r.height)),zs(i)?d=f*s:a&&!zs(a)||(f=d\u002Fs),[d,f]}var h=null,p=null;if(et(i)?h=it(i,r.width):a&&et(a)&&(p=it(a,r.height)),null===h||a&&!zs(a)||(p=u&&c?h\u002Fn*o:r.height),null!==p&&zs(i)&&(h=u&&c?p\u002Fo*n:r.width),null!==h&&null!==p)return[h,p];throw new Error(\"Unable to calculate background-size for element\")},Gs=function(e,t){var r=e[t];return void 0===r?e[0]:r},Xs=function(e,t,r,n,o){var s=t[0],i=t[1],a=r[0],A=r[1];switch(e){case ar.REPEAT_X:return[new js(Math.round(n.left),Math.round(n.top+i)),new js(Math.round(n.left+n.width),Math.round(n.top+i)),new js(Math.round(n.left+n.width),Math.round(A+n.top+i)),new js(Math.round(n.left),Math.round(A+n.top+i))];case ar.REPEAT_Y:return[new js(Math.round(n.left+s),Math.round(n.top)),new js(Math.round(n.left+s+a),Math.round(n.top)),new js(Math.round(n.left+s+a),Math.round(n.height+n.top)),new js(Math.round(n.left+s),Math.round(n.height+n.top))];case ar.NO_REPEAT:return[new js(Math.round(n.left+s),Math.round(n.top+i)),new js(Math.round(n.left+s+a),Math.round(n.top+i)),new js(Math.round(n.left+s+a),Math.round(n.top+i+A)),new js(Math.round(n.left+s),Math.round(n.top+i+A))];default:return[new js(Math.round(o.left),Math.round(o.top)),new js(Math.round(o.left+o.width),Math.round(o.top)),new js(Math.round(o.left+o.width),Math.round(o.height+o.top)),new js(Math.round(o.left),Math.round(o.height+o.top))]}},Ws=\"Hidden Text\",Js=function(){function e(e){this._data={},this._document=e}return e.prototype.parseMetrics=function(e,t){var r=this._document.createElement(\"div\"),n=this._document.createElement(\"img\"),o=this._document.createElement(\"span\"),s=this._document.body;r.style.visibility=\"hidden\",r.style.fontFamily=e,r.style.fontSize=t,r.style.margin=\"0\",r.style.padding=\"0\",s.appendChild(r),n.src=\"data:image\u002Fgif;base64,R0lGODlhAQABAIAAAAAAAP\u002F\u002F\u002FyH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",n.width=1,n.height=1,n.style.margin=\"0\",n.style.padding=\"0\",n.style.verticalAlign=\"baseline\",o.style.fontFamily=e,o.style.fontSize=t,o.style.margin=\"0\",o.style.padding=\"0\",o.appendChild(this._document.createTextNode(Ws)),r.appendChild(o),r.appendChild(n);var i=n.offsetTop-o.offsetTop+2;r.removeChild(o),r.appendChild(this._document.createTextNode(Ws)),r.style.lineHeight=\"normal\",n.style.verticalAlign=\"super\";var a=n.offsetTop-r.offsetTop+2;return s.removeChild(r),{baseline:i,middle:a}},e.prototype.getMetrics=function(e,t){var r=e+\" \"+t;return void 0===this._data[r]&&(this._data[r]=this.parseMetrics(e,t)),this._data[r]},e}(),Ys=function(){function e(e){this._activeEffects=[],this.canvas=e.canvas?e.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.options=e,e.canvas||(this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=e.width+\"px\",this.canvas.style.height=e.height+\"px\"),this.fontMetrics=new Js(document),this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x+e.scrollX,-e.y+e.scrollY),this.ctx.textBaseline=\"bottom\",this._activeEffects=[],Ot.getInstance(e.id).debug(\"Canvas renderer initialized (\"+e.width+\"x\"+e.height+\" at \"+e.x+\",\"+e.y+\") with scale \"+e.scale)}return e.prototype.applyEffects=function(e,t){for(var r=this;this._activeEffects.length;)this.popEffect();e.filter((function(e){return Rn(e.target,t)})).forEach((function(e){return r.applyEffect(e)}))},e.prototype.applyEffect=function(e){this.ctx.save(),function(e){return 2===e.type}(e)&&(this.ctx.globalAlpha=e.opacity),function(e){return 0===e.type}(e)&&(this.ctx.translate(e.offsetX,e.offsetY),this.ctx.transform(e.matrix[0],e.matrix[1],e.matrix[2],e.matrix[3],e.matrix[4],e.matrix[5]),this.ctx.translate(-e.offsetX,-e.offsetY)),function(e){return 1===e.type}(e)&&(this.path(e.path),this.ctx.clip()),this._activeEffects.push(e)},e.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},e.prototype.renderStack=function(e){return n(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return e.element.container.styles.isVisible()?[4,this.renderStackContent(e)]:[3,2];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))},e.prototype.renderNode=function(e){return n(this,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return e.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(e)]:[3,3];case 1:return t.sent(),[4,this.renderNodeContent(e)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},e.prototype.renderTextWithLetterSpacing=function(e,t){var r=this;0===t?this.ctx.fillText(e.text,e.bounds.left,e.bounds.top+e.bounds.height):a(e.text).map((function(e){return A(e)})).reduce((function(t,n){return r.ctx.fillText(n,t,e.bounds.top+e.bounds.height),t+r.ctx.measureText(n).width}),e.bounds.left)},e.prototype.createFontStyle=function(e){var t=e.fontVariant.filter((function(e){return\"normal\"===e||\"small-caps\"===e})).join(\"\"),r=e.fontFamily.join(\", \"),n=ze(e.fontSize)?\"\"+e.fontSize.number+e.fontSize.unit:e.fontSize.number+\"px\";return[[e.fontStyle,t,e.fontWeight,n,r].join(\" \"),r,n]},e.prototype.renderTextNode=function(e,t){return n(this,void 0,void 0,(function(){var r,n,s,i,a=this;return o(this,(function(o){return r=this.createFontStyle(t),n=r[0],s=r[1],i=r[2],this.ctx.font=n,e.textBounds.forEach((function(e){a.ctx.fillStyle=pt(t.color),a.renderTextWithLetterSpacing(e,t.letterSpacing);var r=t.textShadow;r.length&&e.text.trim().length&&(r.slice(0).reverse().forEach((function(t){a.ctx.shadowColor=pt(t.color),a.ctx.shadowOffsetX=t.offsetX.number*a.options.scale,a.ctx.shadowOffsetY=t.offsetY.number*a.options.scale,a.ctx.shadowBlur=t.blur.number,a.ctx.fillText(e.text,e.bounds.left,e.bounds.top+e.bounds.height)})),a.ctx.shadowColor=\"\",a.ctx.shadowOffsetX=0,a.ctx.shadowOffsetY=0,a.ctx.shadowBlur=0),t.textDecorationLine.length&&(a.ctx.fillStyle=pt(t.textDecorationColor||t.color),t.textDecorationLine.forEach((function(t){switch(t){case 1:var r=a.fontMetrics.getMetrics(s,i).baseline;a.ctx.fillRect(e.bounds.left,Math.round(e.bounds.top+r),e.bounds.width,1);break;case 2:a.ctx.fillRect(e.bounds.left,Math.round(e.bounds.top),e.bounds.width,1);break;case 3:var n=a.fontMetrics.getMetrics(s,i).middle;a.ctx.fillRect(e.bounds.left,Math.ceil(e.bounds.top+n),e.bounds.width,1)}})))})),[2]}))}))},e.prototype.renderReplacedElement=function(e,t,r){if(r&&e.intrinsicWidth>0&&e.intrinsicHeight>0){var n=Ds(e),o=Fs(t);this.path(o),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(r,0,0,e.intrinsicWidth,e.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},e.prototype.renderNodeContent=function(t){return n(this,void 0,void 0,(function(){var r,n,i,a,A,u,c,l,f,h,p,m,g,y;return o(this,(function(o){switch(o.label){case 0:this.applyEffects(t.effects,4),r=t.container,n=t.curves,i=r.styles,a=0,A=r.textNodes,o.label=1;case 1:return a\u003CA.length?(u=A[a],[4,this.renderTextNode(u,i)]):[3,4];case 2:o.sent(),o.label=3;case 3:return a++,[3,1];case 4:if(!(r instanceof ao))return[3,8];o.label=5;case 5:return o.trys.push([5,7,,8]),[4,this.options.cache.match(r.src)];case 6:return m=o.sent(),this.renderReplacedElement(r,n,m),[3,8];case 7:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading image \"+r.src),[3,8];case 8:if(r instanceof Ao&&this.renderReplacedElement(r,n,r.canvas),!(r instanceof uo))return[3,12];o.label=9;case 9:return o.trys.push([9,11,,12]),[4,this.options.cache.match(r.svg)];case 10:return m=o.sent(),this.renderReplacedElement(r,n,m),[3,12];case 11:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading svg \"+r.svg.substring(0,255)),[3,12];case 12:return r instanceof jo&&r.tree?[4,new e({id:this.options.id,scale:this.options.scale,backgroundColor:r.backgroundColor,x:0,y:0,scrollX:0,scrollY:0,width:r.width,height:r.height,cache:this.options.cache,windowWidth:r.width,windowHeight:r.height}).render(r.tree)]:[3,14];case 13:c=o.sent(),r.width&&r.height&&this.ctx.drawImage(c,0,0,r.width,r.height,r.bounds.left,r.bounds.top,r.bounds.width,r.bounds.height),o.label=14;case 14:if(r instanceof vo&&(l=Math.min(r.bounds.width,r.bounds.height),r.type===po?r.checked&&(this.ctx.save(),this.path([new js(r.bounds.left+.39363*l,r.bounds.top+.79*l),new js(r.bounds.left+.16*l,r.bounds.top+.5549*l),new js(r.bounds.left+.27347*l,r.bounds.top+.44071*l),new js(r.bounds.left+.39694*l,r.bounds.top+.5649*l),new js(r.bounds.left+.72983*l,r.bounds.top+.23*l),new js(r.bounds.left+.84*l,r.bounds.top+.34085*l),new js(r.bounds.left+.39363*l,r.bounds.top+.79*l)]),this.ctx.fillStyle=pt(yo),this.ctx.fill(),this.ctx.restore()):r.type===mo&&r.checked&&(this.ctx.save(),this.ctx.beginPath(),this.ctx.arc(r.bounds.left+l\u002F2,r.bounds.top+l\u002F2,l\u002F4,0,2*Math.PI,!0),this.ctx.fillStyle=pt(yo),this.ctx.fill(),this.ctx.restore())),Zs(r)&&r.value.length){switch(this.ctx.font=this.createFontStyle(i)[0],this.ctx.fillStyle=pt(i.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=ei(r.styles.textAlign),y=Ds(r),f=0,r.styles.textAlign){case an.CENTER:f+=y.width\u002F2;break;case an.RIGHT:f+=y.width}h=y.add(f,0,0,-y.height\u002F2+1),this.ctx.save(),this.path([new js(y.left,y.top),new js(y.left+y.width,y.top),new js(y.left+y.width,y.top+y.height),new js(y.left,y.top+y.height)]),this.ctx.clip(),this.renderTextWithLetterSpacing(new Zn(r.value,h),i.letterSpacing),this.ctx.restore(),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"}if(!Rn(r.styles.display,2048))return[3,20];if(null===r.styles.listStyleImage)return[3,19];if((p=r.styles.listStyleImage).type!==Ct.URL)return[3,18];m=void 0,g=p.url,o.label=15;case 15:return o.trys.push([15,17,,18]),[4,this.options.cache.match(g)];case 16:return m=o.sent(),this.ctx.drawImage(m,r.bounds.left-(m.width+10),r.bounds.top),[3,18];case 17:return o.sent(),Ot.getInstance(this.options.id).error(\"Error loading list-style-image \"+g),[3,18];case 18:return[3,20];case 19:t.listValue&&r.styles.listStyleType!==Wr.NONE&&(this.ctx.font=this.createFontStyle(i)[0],this.ctx.fillStyle=pt(i.color),this.ctx.textBaseline=\"middle\",this.ctx.textAlign=\"right\",y=new s(r.bounds.left,r.bounds.top+it(r.styles.paddingTop,r.bounds.width),r.bounds.width,function(e,t){return qe(e)&&\"normal\"===e.value?1.2*t:e.type===d.NUMBER_TOKEN?t*e.number:et(e)?it(e,t):t}(i.lineHeight,i.fontSize.number)\u002F2+1),this.renderTextWithLetterSpacing(new Zn(t.listValue,y),i.letterSpacing),this.ctx.textBaseline=\"bottom\",this.ctx.textAlign=\"left\"),o.label=20;case 20:return[2]}}))}))},e.prototype.renderStackContent=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a,A,u,c,l,d,f,h,p,m;return o(this,(function(o){switch(o.label){case 0:return[4,this.renderNodeBackgroundAndBorders(e.element)];case 1:o.sent(),t=0,r=e.negativeZIndex,o.label=2;case 2:return t\u003Cr.length?(m=r[t],[4,this.renderStack(m)]):[3,5];case 3:o.sent(),o.label=4;case 4:return t++,[3,2];case 5:return[4,this.renderNodeContent(e.element)];case 6:o.sent(),n=0,s=e.nonInlineLevel,o.label=7;case 7:return n\u003Cs.length?(m=s[n],[4,this.renderNode(m)]):[3,10];case 8:o.sent(),o.label=9;case 9:return n++,[3,7];case 10:i=0,a=e.nonPositionedFloats,o.label=11;case 11:return i\u003Ca.length?(m=a[i],[4,this.renderStack(m)]):[3,14];case 12:o.sent(),o.label=13;case 13:return i++,[3,11];case 14:A=0,u=e.nonPositionedInlineLevel,o.label=15;case 15:return A\u003Cu.length?(m=u[A],[4,this.renderStack(m)]):[3,18];case 16:o.sent(),o.label=17;case 17:return A++,[3,15];case 18:c=0,l=e.inlineLevel,o.label=19;case 19:return c\u003Cl.length?(m=l[c],[4,this.renderNode(m)]):[3,22];case 20:o.sent(),o.label=21;case 21:return c++,[3,19];case 22:d=0,f=e.zeroOrAutoZIndexOrTransformedOrOpacity,o.label=23;case 23:return d\u003Cf.length?(m=f[d],[4,this.renderStack(m)]):[3,26];case 24:o.sent(),o.label=25;case 25:return d++,[3,23];case 26:h=0,p=e.positiveZIndex,o.label=27;case 27:return h\u003Cp.length?(m=p[h],[4,this.renderStack(m)]):[3,30];case 28:o.sent(),o.label=29;case 29:return h++,[3,27];case 30:return[2]}}))}))},e.prototype.mask=function(e){this.ctx.beginPath(),this.ctx.moveTo(0,0),this.ctx.lineTo(this.canvas.width,0),this.ctx.lineTo(this.canvas.width,this.canvas.height),this.ctx.lineTo(0,this.canvas.height),this.ctx.lineTo(0,0),this.formatPath(e.slice(0).reverse()),this.ctx.closePath()},e.prototype.path=function(e){this.ctx.beginPath(),this.formatPath(e),this.ctx.closePath()},e.prototype.formatPath=function(e){var t=this;e.forEach((function(e,r){var n=xs(e)?e.start:e;0===r?t.ctx.moveTo(n.x,n.y):t.ctx.lineTo(n.x,n.y),xs(e)&&t.ctx.bezierCurveTo(e.startControl.x,e.startControl.y,e.endControl.x,e.endControl.y,e.end.x,e.end.y)}))},e.prototype.renderRepeat=function(e,t,r,n){this.path(e),this.ctx.fillStyle=t,this.ctx.translate(r,n),this.ctx.fill(),this.ctx.translate(-r,-n)},e.prototype.resizeImage=function(e,t,r){if(e.width===t&&e.height===r)return e;var n=this.canvas.ownerDocument.createElement(\"canvas\");return n.width=t,n.height=r,n.getContext(\"2d\").drawImage(e,0,0,e.width,e.height,0,0,t,r),n},e.prototype.renderBackgroundImage=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a;return o(this,(function(A){switch(A.label){case 0:t=e.styles.backgroundImage.length-1,r=function(r){var s,i,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F,U,S,L,T,H;return o(this,(function(o){switch(o.label){case 0:if(r.type!==Ct.URL)return[3,5];s=void 0,i=r.url,o.label=1;case 1:return o.trys.push([1,3,,4]),[4,n.options.cache.match(i)];case 2:return s=o.sent(),[3,4];case 3:return o.sent(),Ot.getInstance(n.options.id).error(\"Error loading background-image \"+i),[3,4];case 4:return s&&(a=Ks(e,t,[s.width,s.height,s.width\u002Fs.height]),w=a[0],x=a[1],E=a[2],j=a[3],_=a[4],y=n.ctx.createPattern(n.resizeImage(s,j,_),\"repeat\"),n.renderRepeat(w,y,x,E)),[3,6];case 5:r.type===Ct.LINEAR_GRADIENT?(A=Ks(e,t,[null,null,null]),w=A[0],x=A[1],E=A[2],j=A[3],_=A[4],u=Ft(r.angle,j,_),c=u[0],l=u[1],d=u[2],f=u[3],h=u[4],(p=document.createElement(\"canvas\")).width=j,p.height=_,m=p.getContext(\"2d\"),g=m.createLinearGradient(l,f,d,h),Qt(r.stops,c).forEach((function(e){return g.addColorStop(e.stop,pt(e.color))})),m.fillStyle=g,m.fillRect(0,0,j,_),j>0&&_>0&&(y=n.ctx.createPattern(p,\"repeat\"),n.renderRepeat(w,y,x,E))):function(e){return e.type===Ct.RADIAL_GRADIENT}(r)&&(v=Ks(e,t,[null,null,null]),w=v[0],b=v[1],B=v[2],j=v[3],_=v[4],C=0===r.position.length?[nt]:r.position,x=it(C[0],j),E=it(C[C.length-1],_),N=function(e,t,r,n,o){var s=0,i=0;switch(e.size){case sr.CLOSEST_SIDE:e.shape===or.CIRCLE?s=i=Math.min(Math.abs(t),Math.abs(t-n),Math.abs(r),Math.abs(r-o)):e.shape===or.ELLIPSE&&(s=Math.min(Math.abs(t),Math.abs(t-n)),i=Math.min(Math.abs(r),Math.abs(r-o)));break;case sr.CLOSEST_CORNER:if(e.shape===or.CIRCLE)s=i=Math.min(Ut(t,r),Ut(t,r-o),Ut(t-n,r),Ut(t-n,r-o));else if(e.shape===or.ELLIPSE){var a=Math.min(Math.abs(r),Math.abs(r-o))\u002FMath.min(Math.abs(t),Math.abs(t-n)),A=St(n,o,t,r,!0),u=A[0],c=A[1];i=a*(s=Ut(u-t,(c-r)\u002Fa))}break;case sr.FARTHEST_SIDE:e.shape===or.CIRCLE?s=i=Math.max(Math.abs(t),Math.abs(t-n),Math.abs(r),Math.abs(r-o)):e.shape===or.ELLIPSE&&(s=Math.max(Math.abs(t),Math.abs(t-n)),i=Math.max(Math.abs(r),Math.abs(r-o)));break;case sr.FARTHEST_CORNER:if(e.shape===or.CIRCLE)s=i=Math.max(Ut(t,r),Ut(t,r-o),Ut(t-n,r),Ut(t-n,r-o));else if(e.shape===or.ELLIPSE){a=Math.max(Math.abs(r),Math.abs(r-o))\u002FMath.max(Math.abs(t),Math.abs(t-n));var l=St(n,o,t,r,!1);u=l[0],c=l[1],i=a*(s=Ut(u-t,(c-r)\u002Fa))}}return Array.isArray(e.size)&&(s=it(e.size[0],n),i=2===e.size.length?it(e.size[1],o):s),[s,i]}(r,x,E,j,_),Q=N[0],F=N[1],Q>0&&Q>0&&(U=n.ctx.createRadialGradient(b+x,B+E,0,b+x,B+E,Q),Qt(r.stops,2*Q).forEach((function(e){return U.addColorStop(e.stop,pt(e.color))})),n.path(w),n.ctx.fillStyle=U,Q!==F?(S=e.bounds.left+.5*e.bounds.width,L=e.bounds.top+.5*e.bounds.height,H=1\u002F(T=F\u002FQ),n.ctx.save(),n.ctx.translate(S,L),n.ctx.transform(1,0,0,T,0,0),n.ctx.translate(-S,-L),n.ctx.fillRect(b,H*(B-L)+L,j,_*H),n.ctx.restore()):n.ctx.fill())),o.label=6;case 6:return t--,[2]}}))},n=this,s=0,i=e.styles.backgroundImage.slice(0).reverse(),A.label=1;case 1:return s\u003Ci.length?(a=i[s],[5,r(a)]):[3,4];case 2:A.sent(),A.label=3;case 3:return s++,[3,1];case 4:return[2]}}))}))},e.prototype.renderSolidBorder=function(e,t,r){return n(this,void 0,void 0,(function(){return o(this,(function(n){return this.path(Os(r,t)),this.ctx.fillStyle=pt(e),this.ctx.fill(),[2]}))}))},e.prototype.renderDoubleBorder=function(e,t,r,s){return n(this,void 0,void 0,(function(){var n,i;return o(this,(function(o){switch(o.label){case 0:return t\u003C3?[4,this.renderSolidBorder(e,r,s)]:[3,2];case 1:return o.sent(),[2];case 2:return n=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox,e.topRightBorderBox,e.topRightBorderDoubleOuterBox);case 1:return Rs(e.topRightBorderBox,e.topRightBorderDoubleOuterBox,e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox);case 2:return Rs(e.bottomRightBorderBox,e.bottomRightBorderDoubleOuterBox,e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox);case 3:default:return Rs(e.bottomLeftBorderBox,e.bottomLeftBorderDoubleOuterBox,e.topLeftBorderBox,e.topLeftBorderDoubleOuterBox)}}(s,r),this.path(n),this.ctx.fillStyle=pt(e),this.ctx.fill(),i=function(e,t){switch(t){case 0:return Rs(e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox,e.topRightBorderDoubleInnerBox,e.topRightPaddingBox);case 1:return Rs(e.topRightBorderDoubleInnerBox,e.topRightPaddingBox,e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox);case 2:return Rs(e.bottomRightBorderDoubleInnerBox,e.bottomRightPaddingBox,e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox);case 3:default:return Rs(e.bottomLeftBorderDoubleInnerBox,e.bottomLeftPaddingBox,e.topLeftBorderDoubleInnerBox,e.topLeftPaddingBox)}}(s,r),this.path(i),this.ctx.fill(),[2]}}))}))},e.prototype.renderNodeBackgroundAndBorders=function(e){return n(this,void 0,void 0,(function(){var t,r,n,s,i,a,A,u,c=this;return o(this,(function(o){switch(o.label){case 0:return this.applyEffects(e.effects,2),t=e.container.styles,r=!ht(t.backgroundColor)||t.backgroundImage.length,n=[{style:t.borderTopStyle,color:t.borderTopColor,width:t.borderTopWidth},{style:t.borderRightStyle,color:t.borderRightColor,width:t.borderRightWidth},{style:t.borderBottomStyle,color:t.borderBottomColor,width:t.borderBottomWidth},{style:t.borderLeftStyle,color:t.borderLeftColor,width:t.borderLeftWidth}],s=$s(Gs(t.backgroundClip,0),e.curves),r||t.boxShadow.length?(this.ctx.save(),this.path(s),this.ctx.clip(),ht(t.backgroundColor)||(this.ctx.fillStyle=pt(t.backgroundColor),this.ctx.fill()),[4,this.renderBackgroundImage(e.container)]):[3,2];case 1:o.sent(),this.ctx.restore(),t.boxShadow.slice(0).reverse().forEach((function(t){c.ctx.save();var r,n,o,s,i,a=Qs(e.curves),A=t.inset?0:1e4,u=(r=a,n=-A+(t.inset?1:-1)*t.spread.number,o=(t.inset?1:-1)*t.spread.number,s=t.spread.number*(t.inset?-2:2),i=t.spread.number*(t.inset?-2:2),r.map((function(e,t){switch(t){case 0:return e.add(n,o);case 1:return e.add(n+s,o);case 2:return e.add(n+s,o+i);case 3:return e.add(n,o+i)}return e})));t.inset?(c.path(a),c.ctx.clip(),c.mask(u)):(c.mask(a),c.ctx.clip(),c.path(u)),c.ctx.shadowOffsetX=t.offsetX.number+A,c.ctx.shadowOffsetY=t.offsetY.number,c.ctx.shadowColor=pt(t.color),c.ctx.shadowBlur=t.blur.number,c.ctx.fillStyle=t.inset?pt(t.color):\"rgba(0,0,0,1)\",c.ctx.fill(),c.ctx.restore()})),o.label=2;case 2:i=0,a=0,A=n,o.label=3;case 3:return a\u003CA.length?(u=A[a]).style!==pr.NONE&&!ht(u.color)&&u.width>0?u.style!==pr.DASHED?[3,5]:[4,this.renderDashedDottedBorder(u.color,u.width,i,e.curves,pr.DASHED)]:[3,11]:[3,13];case 4:return o.sent(),[3,11];case 5:return u.style!==pr.DOTTED?[3,7]:[4,this.renderDashedDottedBorder(u.color,u.width,i,e.curves,pr.DOTTED)];case 6:return o.sent(),[3,11];case 7:return u.style!==pr.DOUBLE?[3,9]:[4,this.renderDoubleBorder(u.color,u.width,i,e.curves)];case 8:return o.sent(),[3,11];case 9:return[4,this.renderSolidBorder(u.color,i,e.curves)];case 10:o.sent(),o.label=11;case 11:i++,o.label=12;case 12:return a++,[3,3];case 13:return[2]}}))}))},e.prototype.renderDashedDottedBorder=function(e,t,r,s,i){return n(this,void 0,void 0,(function(){var n,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b;return o(this,(function(o){return this.ctx.save(),n=function(e,t){switch(t){case 0:return ks(e.topLeftBorderStroke,e.topRightBorderStroke);case 1:return ks(e.topRightBorderStroke,e.bottomRightBorderStroke);case 2:return ks(e.bottomRightBorderStroke,e.bottomLeftBorderStroke);case 3:default:return ks(e.bottomLeftBorderStroke,e.topLeftBorderStroke)}}(s,r),a=Os(s,r),i===pr.DASHED&&(this.path(a),this.ctx.clip()),xs(a[0])?(A=a[0].start.x,u=a[0].start.y):(A=a[0].x,u=a[0].y),xs(a[1])?(c=a[1].end.x,l=a[1].end.y):(c=a[1].x,l=a[1].y),d=0===r||2===r?Math.abs(A-c):Math.abs(u-l),this.ctx.beginPath(),i===pr.DOTTED?this.formatPath(n):this.formatPath(a.slice(0,2)),f=t\u003C3?3*t:2*t,h=t\u003C3?2*t:t,i===pr.DOTTED&&(f=t,h=t),p=!0,d\u003C=2*f?p=!1:d\u003C=2*f+h?(f*=m=d\u002F(2*f+h),h*=m):(g=Math.floor((d+h)\u002F(f+h)),y=(d-g*f)\u002F(g-1),h=(v=(d-(g+1)*f)\u002Fg)\u003C=0||Math.abs(h-y)\u003CMath.abs(h-v)?y:v),p&&(i===pr.DOTTED?this.ctx.setLineDash([0,f+h]):this.ctx.setLineDash([f,h])),i===pr.DOTTED?(this.ctx.lineCap=\"round\",this.ctx.lineWidth=t):this.ctx.lineWidth=2*t+1.1,this.ctx.strokeStyle=pt(e),this.ctx.stroke(),this.ctx.setLineDash([]),i===pr.DASHED&&(xs(a[0])&&(w=a[3],b=a[0],this.ctx.beginPath(),this.formatPath([new js(w.end.x,w.end.y),new js(b.start.x,b.start.y)]),this.ctx.stroke()),xs(a[1])&&(w=a[1],b=a[2],this.ctx.beginPath(),this.formatPath([new js(w.end.x,w.end.y),new js(b.start.x,b.start.y)]),this.ctx.stroke())),this.ctx.restore(),[2]}))}))},e.prototype.render=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(r){switch(r.label){case 0:return this.options.backgroundColor&&(this.ctx.fillStyle=pt(this.options.backgroundColor),this.ctx.fillRect(this.options.x-this.options.scrollX,this.options.y-this.options.scrollY,this.options.width,this.options.height)),n=new Hs(e,[]),o=new Ts(n),Is(n,o,o,s=[]),Ps(n.container,s),t=o,[4,this.renderStack(t)];case 1:return r.sent(),this.applyEffects([],2),[2,this.canvas]}var n,o,s}))}))},e}(),Zs=function(e){return e instanceof bo||e instanceof wo||e instanceof vo&&e.type!==mo&&e.type!==po},$s=function(e,t){switch(e){case bt.BORDER_BOX:return Qs(t);case bt.CONTENT_BOX:return function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]}(t);case bt.PADDING_BOX:default:return Fs(t)}},ei=function(e){switch(e){case an.CENTER:return\"center\";case an.RIGHT:return\"right\";case an.LEFT:default:return\"left\"}},ti=function(){function e(e){this.canvas=e.canvas?e.canvas:document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.options=e,this.canvas.width=Math.floor(e.width*e.scale),this.canvas.height=Math.floor(e.height*e.scale),this.canvas.style.width=e.width+\"px\",this.canvas.style.height=e.height+\"px\",this.ctx.scale(this.options.scale,this.options.scale),this.ctx.translate(-e.x+e.scrollX,-e.y+e.scrollY),Ot.getInstance(e.id).debug(\"EXPERIMENTAL ForeignObject renderer initialized (\"+e.width+\"x\"+e.height+\" at \"+e.x+\",\"+e.y+\") with scale \"+e.scale)}return e.prototype.render=function(e){return n(this,void 0,void 0,(function(){var t,r;return o(this,(function(n){switch(n.label){case 0:return t=Ht(Math.max(this.options.windowWidth,this.options.width)*this.options.scale,Math.max(this.options.windowHeight,this.options.height)*this.options.scale,this.options.scrollX*this.options.scale,this.options.scrollY*this.options.scale,e),[4,ri(t)];case 1:return r=n.sent(),this.options.backgroundColor&&(this.ctx.fillStyle=pt(this.options.backgroundColor),this.ctx.fillRect(0,0,this.options.width*this.options.scale,this.options.height*this.options.scale)),this.ctx.drawImage(r,-this.options.x*this.options.scale,-this.options.y*this.options.scale),[2,this.canvas]}}))}))},e}(),ri=function(e){return new Promise((function(t,r){var n=new Image;n.onload=function(){t(n)},n.onerror=r,n.src=\"data:image\u002Fsvg+xml;charset=utf-8,\"+encodeURIComponent((new XMLSerializer).serializeToString(e))}))},ni=function(e){return ft(Ke.create(e).parseComponentValue())};\"undefined\"!=typeof window&&kt.setContext(window);var oi=function(e,t){return n(undefined,void 0,void 0,(function(){var n,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N;return o(this,(function(o){switch(o.label){case 0:if(!(n=e.ownerDocument))throw new Error(\"Element is not attached to a Document\");if(!(a=n.defaultView))throw new Error(\"Document is not attached to a Window\");return A=(Math.round(1e3*Math.random())+Date.now()).toString(16),u=Oo(e)||\"HTML\"===e.tagName?function(e){var t=e.body,r=e.documentElement;if(!t||!r)throw new Error(\"Unable to get document size\");var n=Math.max(Math.max(t.scrollWidth,r.scrollWidth),Math.max(t.offsetWidth,r.offsetWidth),Math.max(t.clientWidth,r.clientWidth)),o=Math.max(Math.max(t.scrollHeight,r.scrollHeight),Math.max(t.offsetHeight,r.offsetHeight),Math.max(t.clientHeight,r.clientHeight));return new s(0,0,n,o)}(n):i(e),c=u.width,l=u.height,d=u.left,f=u.top,h=r({},{allowTaint:!1,imageTimeout:15e3,proxy:void 0,useCORS:!1},t),p={backgroundColor:\"#ffffff\",cache:t.cache?t.cache:kt.create(A,h),logging:!0,removeContainer:!0,foreignObjectRendering:!1,scale:a.devicePixelRatio||1,windowWidth:a.innerWidth,windowHeight:a.innerHeight,scrollX:a.pageXOffset,scrollY:a.pageYOffset,x:d,y:f,width:Math.ceil(c),height:Math.ceil(l),id:A},m=r({},p,h,t),g=new s(m.scrollX,m.scrollY,m.windowWidth,m.windowHeight),Ot.create({id:A,enabled:m.logging}),Ot.getInstance(A).debug(\"Starting document clone\"),y=new As(e,{id:A,onclone:m.onclone,ignoreElements:m.ignoreElements,inlineImages:m.foreignObjectRendering,copyStyles:m.foreignObjectRendering}),(v=y.clonedReferenceElement)?[4,y.toIFrame(n,g)]:[2,Promise.reject(\"Unable to find element in cloned iframe\")];case 1:return w=o.sent(),b=n.documentElement?ni(getComputedStyle(n.documentElement).backgroundColor):_t.TRANSPARENT,B=n.body?ni(getComputedStyle(n.body).backgroundColor):_t.TRANSPARENT,j=t.backgroundColor,_=\"string\"==typeof j?ni(j):null===j?_t.TRANSPARENT:4294967295,C=e===n.documentElement?ht(b)?ht(B)?_:B:b:_,x={id:A,cache:m.cache,canvas:m.canvas,backgroundColor:C,scale:m.scale,x:m.x,y:m.y,scrollX:m.scrollX,scrollY:m.scrollY,width:m.width,height:m.height,windowWidth:m.windowWidth,windowHeight:m.windowHeight},m.foreignObjectRendering?(Ot.getInstance(A).debug(\"Document cloned, using foreign object rendering\"),[4,new ti(x).render(v)]):[3,3];case 2:return E=o.sent(),[3,5];case 3:return Ot.getInstance(A).debug(\"Document cloned, using computed rendering\"),kt.attachInstance(m.cache),Ot.getInstance(A).debug(\"Starting DOM parsing\"),N=Eo(v),kt.detachInstance(),C===N.styles.backgroundColor&&(N.styles.backgroundColor=_t.TRANSPARENT),Ot.getInstance(A).debug(\"Starting renderer\"),[4,new Ys(x).render(N)];case 4:E=o.sent(),o.label=5;case 5:return!0===m.removeContainer&&(As.destroy(w)||Ot.getInstance(A).error(\"Cannot detach cloned iframe as it is not in the DOM anymore\")),Ot.getInstance(A).debug(\"Finished rendering\"),Ot.destroy(A),kt.destroy(A),[2,E]}}))}))};return function(e,t){return void 0===t&&(t={}),oi(e,t)}}()},\".\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{AcroForm:function(){return _e},AcroFormAppearance:function(){return we},AcroFormButton:function(){return fe},AcroFormCheckBox:function(){return ge},AcroFormChoiceField:function(){return ue},AcroFormComboBox:function(){return le},AcroFormEditBox:function(){return de},AcroFormListBox:function(){return ce},AcroFormPasswordField:function(){return ve},AcroFormPushButton:function(){return he},AcroFormRadioButton:function(){return pe},AcroFormTextField:function(){return ye},GState:function(){return U},ShadingPattern:function(){return L},TilingPattern:function(){return T},jsPDF:function(){return H}});var n=r(\".\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js\"),o=function(){return\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this}();function s(){o.console&&\"function\"==typeof o.console.log&&o.console.log.apply(o.console,arguments)}var i={log:s,warn:function(e){o.console&&(\"function\"==typeof o.console.warn?o.console.warn.apply(o.console,arguments):s.call(null,arguments))},error:function(e){o.console&&(\"function\"==typeof o.console.error?o.console.error.apply(o.console,arguments):s(e))}};function a(e,t,r){var n=new XMLHttpRequest;n.open(\"GET\",e),n.responseType=\"blob\",n.onload=function(){d(n.response,t,r)},n.onerror=function(){i.error(\"could not download file\")},n.send()}function A(e){var t=new XMLHttpRequest;t.open(\"HEAD\",e,!1);try{t.send()}catch(e){}return t.status>=200&&t.status\u003C=299}function u(e){try{e.dispatchEvent(new MouseEvent(\"click\"))}catch(r){var t=document.createEvent(\"MouseEvents\");t.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var c,l,d=o.saveAs||(\"object\"!=typeof window||window!==o?function(){}:\"undefined\"!=typeof HTMLAnchorElement&&\"download\"in HTMLAnchorElement.prototype?function(e,t,r){var n=o.URL||o.webkitURL,s=document.createElement(\"a\");t=t||e.name||\"download\",s.download=t,s.rel=\"noopener\",\"string\"==typeof e?(s.href=e,s.origin!==location.origin?A(s.href)?a(e,t,r):u(s,s.target=\"_blank\"):u(s)):(s.href=n.createObjectURL(e),setTimeout((function(){n.revokeObjectURL(s.href)}),4e4),setTimeout((function(){u(s)}),0))}:\"msSaveOrOpenBlob\"in navigator?function(e,t,r){if(t=t||e.name||\"download\",\"string\"==typeof e)if(A(e))a(e,t,r);else{var n=document.createElement(\"a\");n.href=e,n.target=\"_blank\",setTimeout((function(){u(n)}))}else navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:\"object\"!=typeof t&&(i.warn(\"Deprecated: Expected third argument to be a object\"),t={autoBom:!t}),t.autoBom&&\u002F^\\s*(?:text\\\u002F\\S*|application\\\u002Fxml|\\S*\\\u002F\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8\u002Fi.test(e.type)?new Blob([String.fromCharCode(65279),e],{type:e.type}):e}(e,r),t)}:function(e,t,r,n){if((n=n||open(\"\",\"_blank\"))&&(n.document.title=n.document.body.innerText=\"downloading...\"),\"string\"==typeof e)return a(e,t,r);var s=\"application\u002Foctet-stream\"===e.type,i=\u002Fconstructor\u002Fi.test(o.HTMLElement)||o.safari,A=\u002FCriOS\\\u002F[\\d]+\u002F.test(navigator.userAgent);if((A||s&&i)&&\"object\"==typeof FileReader){var u=new FileReader;u.onloadend=function(){var e=u.result;e=A?e:e.replace(\u002F^data:[^;]*;\u002F,\"data:attachment\u002Ffile;\"),n?n.location.href=e:location=e,n=null},u.readAsDataURL(e)}else{var c=o.URL||o.webkitURL,l=c.createObjectURL(e);n?n.location=l:location.href=l,n=null,setTimeout((function(){c.revokeObjectURL(l)}),4e4)}});function f(e){var t;e=e||\"\",this.ok=!1,\"#\"==e.charAt(0)&&(e=e.substr(1,6)),e={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"}[e=(e=e.replace(\u002F \u002Fg,\"\")).toLowerCase()]||e;for(var r=[{re:\u002F^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$\u002F,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:\u002F^(\\w{2})(\\w{2})(\\w{2})$\u002F,example:[\"#00ff00\",\"336699\"],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:\u002F^(\\w{1})(\\w{1})(\\w{1})$\u002F,example:[\"#fb0\",\"f0f\"],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],n=0;n\u003Cr.length;n++){var o=r[n].re,s=r[n].process,i=o.exec(e);i&&(t=s(i),this.r=t[0],this.g=t[1],this.b=t[2],this.ok=!0)}this.r=this.r\u003C0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g\u003C0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b\u003C0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),r=this.b.toString(16);return 1==e.length&&(e=\"0\"+e),1==t.length&&(t=\"0\"+t),1==r.length&&(r=\"0\"+r),\"#\"+e+t+r}}function h(e,t){var r=e[0],n=e[1],o=e[2],s=e[3];r=m(r,n,o,s,t[0],7,-680876936),s=m(s,r,n,o,t[1],12,-389564586),o=m(o,s,r,n,t[2],17,606105819),n=m(n,o,s,r,t[3],22,-1044525330),r=m(r,n,o,s,t[4],7,-176418897),s=m(s,r,n,o,t[5],12,1200080426),o=m(o,s,r,n,t[6],17,-1473231341),n=m(n,o,s,r,t[7],22,-45705983),r=m(r,n,o,s,t[8],7,1770035416),s=m(s,r,n,o,t[9],12,-1958414417),o=m(o,s,r,n,t[10],17,-42063),n=m(n,o,s,r,t[11],22,-1990404162),r=m(r,n,o,s,t[12],7,1804603682),s=m(s,r,n,o,t[13],12,-40341101),o=m(o,s,r,n,t[14],17,-1502002290),r=g(r,n=m(n,o,s,r,t[15],22,1236535329),o,s,t[1],5,-165796510),s=g(s,r,n,o,t[6],9,-1069501632),o=g(o,s,r,n,t[11],14,643717713),n=g(n,o,s,r,t[0],20,-373897302),r=g(r,n,o,s,t[5],5,-701558691),s=g(s,r,n,o,t[10],9,38016083),o=g(o,s,r,n,t[15],14,-660478335),n=g(n,o,s,r,t[4],20,-405537848),r=g(r,n,o,s,t[9],5,568446438),s=g(s,r,n,o,t[14],9,-1019803690),o=g(o,s,r,n,t[3],14,-187363961),n=g(n,o,s,r,t[8],20,1163531501),r=g(r,n,o,s,t[13],5,-1444681467),s=g(s,r,n,o,t[2],9,-51403784),o=g(o,s,r,n,t[7],14,1735328473),r=y(r,n=g(n,o,s,r,t[12],20,-1926607734),o,s,t[5],4,-378558),s=y(s,r,n,o,t[8],11,-2022574463),o=y(o,s,r,n,t[11],16,1839030562),n=y(n,o,s,r,t[14],23,-35309556),r=y(r,n,o,s,t[1],4,-1530992060),s=y(s,r,n,o,t[4],11,1272893353),o=y(o,s,r,n,t[7],16,-155497632),n=y(n,o,s,r,t[10],23,-1094730640),r=y(r,n,o,s,t[13],4,681279174),s=y(s,r,n,o,t[0],11,-358537222),o=y(o,s,r,n,t[3],16,-722521979),n=y(n,o,s,r,t[6],23,76029189),r=y(r,n,o,s,t[9],4,-640364487),s=y(s,r,n,o,t[12],11,-421815835),o=y(o,s,r,n,t[15],16,530742520),r=v(r,n=y(n,o,s,r,t[2],23,-995338651),o,s,t[0],6,-198630844),s=v(s,r,n,o,t[7],10,1126891415),o=v(o,s,r,n,t[14],15,-1416354905),n=v(n,o,s,r,t[5],21,-57434055),r=v(r,n,o,s,t[12],6,1700485571),s=v(s,r,n,o,t[3],10,-1894986606),o=v(o,s,r,n,t[10],15,-1051523),n=v(n,o,s,r,t[1],21,-2054922799),r=v(r,n,o,s,t[8],6,1873313359),s=v(s,r,n,o,t[15],10,-30611744),o=v(o,s,r,n,t[6],15,-1560198380),n=v(n,o,s,r,t[13],21,1309151649),r=v(r,n,o,s,t[4],6,-145523070),s=v(s,r,n,o,t[11],10,-1120210379),o=v(o,s,r,n,t[2],15,718787259),n=v(n,o,s,r,t[9],21,-343485551),e[0]=x(r,e[0]),e[1]=x(n,e[1]),e[2]=x(o,e[2]),e[3]=x(s,e[3])}function p(e,t,r,n,o,s){return t=x(x(t,e),x(n,s)),x(t\u003C\u003Co|t>>>32-o,r)}function m(e,t,r,n,o,s,i){return p(t&r|~t&n,e,t,o,s,i)}function g(e,t,r,n,o,s,i){return p(t&n|r&~n,e,t,o,s,i)}function y(e,t,r,n,o,s,i){return p(t^r^n,e,t,o,s,i)}function v(e,t,r,n,o,s,i){return p(r^(t|~n),e,t,o,s,i)}function w(e){var t,r=e.length,n=[1732584193,-271733879,-1732584194,271733878];for(t=64;t\u003C=e.length;t+=64)h(n,b(e.substring(t-64,t)));e=e.substring(t-64);var o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t\u003Ce.length;t++)o[t>>2]|=e.charCodeAt(t)\u003C\u003C(t%4\u003C\u003C3);if(o[t>>2]|=128\u003C\u003C(t%4\u003C\u003C3),t>55)for(h(n,o),t=0;t\u003C16;t++)o[t]=0;return o[14]=8*r,h(n,o),n}function b(e){var t,r=[];for(t=0;t\u003C64;t+=4)r[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)\u003C\u003C8)+(e.charCodeAt(t+2)\u003C\u003C16)+(e.charCodeAt(t+3)\u003C\u003C24);return r}c=o.atob.bind(o),l=o.btoa.bind(o);var B=\"0123456789abcdef\".split(\"\");function j(e){for(var t=\"\",r=0;r\u003C4;r++)t+=B[e>>8*r+4&15]+B[e>>8*r&15];return t}function _(e){return String.fromCharCode((255&e)>>0,(65280&e)>>8,(16711680&e)>>16,(4278190080&e)>>24)}function C(e){return w(e).map(_).join(\"\")}function x(e,t){return e+t&4294967295}function E(e,t){var r,n,o,s;if(e!==r){for(var i=(o=e,s=1+(256\u002Fe.length>>0),new Array(s+1).join(o)),a=[],A=0;A\u003C256;A++)a[A]=A;var u=0;for(A=0;A\u003C256;A++){var c=a[A];u=(u+c+i.charCodeAt(A))%256,a[A]=a[u],a[u]=c}r=e,n=a}else a=n;var l=t.length,d=0,f=0,h=\"\";for(A=0;A\u003Cl;A++)f=(f+(c=a[d=(d+1)%256]))%256,a[d]=a[f],a[f]=c,i=a[(a[d]+a[f])%256],h+=String.fromCharCode(t.charCodeAt(A)^i);return h}!function(e){for(var t=0;t\u003Ce.length;t++)e[t]=j(e[t]);e.join(\"\")}(w(\"hello\"));var N={print:4,modify:8,copy:16,\"annot-forms\":32};function Q(e,t,r,n){this.v=1,this.r=2;let o=192;e.forEach((function(e){if(void 0!==N.perm)throw new Error(\"Invalid permission: \"+e);o+=N[e]})),this.padding=\"(¿N^NuAd\\0NVÿú\u0001\\b..\\0¶Ðh>\u002F\\f©þdSiz\";let s=(t+this.padding).substr(0,32),i=(r+this.padding).substr(0,32);this.O=this.processOwnerPassword(s,i),this.P=-(1+(255^o)),this.encryptionKey=C(s+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(n)).substr(0,5),this.U=E(this.encryptionKey,this.padding)}function F(e){if(\"object\"!=typeof e)throw new Error(\"Invalid Context passed to initialize PubSub (jsPDF-module)\");var t={};this.subscribe=function(e,r,n){if(n=n||!1,\"string\"!=typeof e||\"function\"!=typeof r||\"boolean\"!=typeof n)throw new Error(\"Invalid arguments passed to PubSub.subscribe (jsPDF-module)\");t.hasOwnProperty(e)||(t[e]={});var o=Math.random().toString(35);return t[e][o]=[r,!!n],o},this.unsubscribe=function(e){for(var r in t)if(t[r][e])return delete t[r][e],0===Object.keys(t[r]).length&&delete t[r],!0;return!1},this.publish=function(r){if(t.hasOwnProperty(r)){var n=Array.prototype.slice.call(arguments,1),s=[];for(var a in t[r]){var A=t[r][a];try{A[0].apply(e,n)}catch(e){o.console&&i.error(\"jsPDF PubSub Error\",e.message,e)}A[1]&&s.push(a)}s.length&&s.forEach(this.unsubscribe)}},this.getTopics=function(){return t}}function U(e){if(!(this instanceof U))return new U(e);var t=\"opacity,stroke-opacity\".split(\",\");for(var r in e)e.hasOwnProperty(r)&&t.indexOf(r)>=0&&(this[r]=e[r]);this.id=\"\",this.objectNumber=-1}function S(e,t){this.gState=e,this.matrix=t,this.id=\"\",this.objectNumber=-1}function L(e,t,r,n,o){if(!(this instanceof L))return new L(e,t,r,n,o);this.type=\"axial\"===e?2:3,this.coords=t,this.colors=r,S.call(this,n,o)}function T(e,t,r,n,o){if(!(this instanceof T))return new T(e,t,r,n,o);this.boundingBox=e,this.xStep=t,this.yStep=r,this.stream=\"\",this.cloneIndex=0,S.call(this,n,o)}function H(e){var t,r=\"string\"==typeof arguments[0]?arguments[0]:\"p\",n=arguments[1],s=arguments[2],a=arguments[3],A=[],u=1,c=16,h=\"S\",p=null;\"object\"==typeof(e=e||{})&&(r=e.orientation,n=e.unit||n,s=e.format||s,a=e.compress||e.compressPdf||a,null!==(p=e.encryption||null)&&(p.userPassword=p.userPassword||\"\",p.ownerPassword=p.ownerPassword||\"\",p.userPermissions=p.userPermissions||[]),u=\"number\"==typeof e.userUnit?Math.abs(e.userUnit):1,void 0!==e.precision&&(t=e.precision),void 0!==e.floatPrecision&&(c=e.floatPrecision),h=e.defaultPathOperation||\"S\"),A=e.filters||(!0===a?[\"FlateEncode\"]:A),n=n||\"mm\",r=(\"\"+(r||\"P\")).toLowerCase();var m=e.putOnlyUsedFonts||!1,g={},y={internal:{},__private__:{}};y.__private__.PubSub=F;var v=\"1.3\",w=y.__private__.getPdfVersion=function(){return v};y.__private__.setPdfVersion=function(e){v=e};var b={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};y.__private__.getPageFormats=function(){return b};var B=y.__private__.getPageFormat=function(e){return b[e]};s=s||\"a4\";var j={COMPAT:\"compat\",ADVANCED:\"advanced\"},_=j.COMPAT;function C(){this.saveGraphicsState(),ue(new Ke(_e,0,0,-_e,0,Ir()*_e).toString()+\" cm\"),this.setFontSize(this.getFontSize()\u002F_e),h=\"n\",_=j.ADVANCED}function x(){this.restoreGraphicsState(),h=\"S\",_=j.COMPAT}var E=function(e,t){if(\"bold\"==e&&\"normal\"==t||\"bold\"==e&&400==t||\"normal\"==e&&\"italic\"==t||\"bold\"==e&&\"italic\"==t)throw new Error(\"Invalid Combination of fontweight and fontstyle\");return t&&e!==t&&(e=400==t?\"italic\"==e?\"italic\":\"normal\":700==t&&\"italic\"!==e?\"bold\":e+\"\"+t),e};y.advancedAPI=function(e){var t=_===j.COMPAT;return t&&C.call(this),\"function\"!=typeof e||(e(this),t&&x.call(this)),this},y.compatAPI=function(e){var t=_===j.ADVANCED;return t&&x.call(this),\"function\"!=typeof e||(e(this),t&&C.call(this)),this},y.isAdvancedAPI=function(){return _===j.ADVANCED};var N,S=function(e){if(_!==j.ADVANCED)throw new Error(e+\" is only available in 'advanced' API mode. You need to call advancedAPI() first.\")},I=y.roundToPrecision=y.__private__.roundToPrecision=function(e,r){var n=t||r;if(isNaN(e)||isNaN(n))throw new Error(\"Invalid argument passed to jsPDF.roundToPrecision\");return e.toFixed(n).replace(\u002F0+$\u002F,\"\")};N=y.hpf=y.__private__.hpf=\"number\"==typeof c?function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,c)}:\"smart\"===c?function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,e>-1&&e\u003C1?16:5)}:function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.hpf\");return I(e,16)};var P=y.f2=y.__private__.f2=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.f2\");return I(e,2)},O=y.__private__.f3=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.f3\");return I(e,3)},k=y.scale=y.__private__.scale=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.scale\");return _===j.COMPAT?e*_e:_===j.ADVANCED?e:void 0},R=function(e){return _===j.COMPAT?Ir()-e:_===j.ADVANCED?e:void 0},M=function(e){return k(R(e))};y.__private__.setPrecision=y.setPrecision=function(e){\"number\"==typeof parseInt(e,10)&&(t=parseInt(e,10))};var D,K=\"00000000000000000000000000000000\",z=y.__private__.getFileId=function(){return K},V=y.__private__.setFileId=function(e){return K=void 0!==e&&\u002F^[a-fA-F0-9]{32}$\u002F.test(e)?e.toUpperCase():K.split(\"\").map((function(){return\"ABCDEF0123456789\".charAt(Math.floor(16*Math.random()))})).join(\"\"),null!==p&&(Vt=new Q(p.userPermissions,p.userPassword,p.ownerPassword,K)),K};y.setFileId=function(e){return V(e),this},y.getFileId=function(){return z()};var q=y.__private__.convertDateToPDFDate=function(e){var t=e.getTimezoneOffset(),r=t\u003C0?\"+\":\"-\",n=Math.floor(Math.abs(t\u002F60)),o=Math.abs(t%60),s=[r,Y(n),\"'\",Y(o),\"'\"].join(\"\");return[\"D:\",e.getFullYear(),Y(e.getMonth()+1),Y(e.getDate()),Y(e.getHours()),Y(e.getMinutes()),Y(e.getSeconds()),s].join(\"\")},G=y.__private__.convertPDFDateToDate=function(e){var t=parseInt(e.substr(2,4),10),r=parseInt(e.substr(6,2),10)-1,n=parseInt(e.substr(8,2),10),o=parseInt(e.substr(10,2),10),s=parseInt(e.substr(12,2),10),i=parseInt(e.substr(14,2),10);return new Date(t,r,n,o,s,i,0)},X=y.__private__.setCreationDate=function(e){var t;if(void 0===e&&(e=new Date),e instanceof Date)t=q(e);else{if(!\u002F^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\\+0[0-9]|\\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$\u002F.test(e))throw new Error(\"Invalid argument passed to jsPDF.setCreationDate\");t=e}return D=t},W=y.__private__.getCreationDate=function(e){var t=D;return\"jsDate\"===e&&(t=G(D)),t};y.setCreationDate=function(e){return X(e),this},y.getCreationDate=function(e){return W(e)};var J,Y=y.__private__.padd2=function(e){return(\"0\"+parseInt(e)).slice(-2)},Z=y.__private__.padd2Hex=function(e){return(\"00\"+(e=e.toString())).substr(e.length)},$=0,ee=[],te=[],re=0,ne=[],oe=[],se=!1,ie=te,ae=function(){$=0,re=0,te=[],ee=[],ne=[],Ye=Xe(),Ze=Xe()};y.__private__.setCustomOutputDestination=function(e){se=!0,ie=e};var Ae=function(e){se||(ie=e)};y.__private__.resetCustomOutputDestination=function(){se=!1,ie=te};var ue=y.__private__.out=function(e){return e=e.toString(),re+=e.length+1,ie.push(e),ie},ce=y.__private__.write=function(e){return ue(1===arguments.length?e.toString():Array.prototype.join.call(arguments,\" \"))},le=y.__private__.getArrayBuffer=function(e){for(var t=e.length,r=new ArrayBuffer(t),n=new Uint8Array(r);t--;)n[t]=e.charCodeAt(t);return r},de=[[\"Helvetica\",\"helvetica\",\"normal\",\"WinAnsiEncoding\"],[\"Helvetica-Bold\",\"helvetica\",\"bold\",\"WinAnsiEncoding\"],[\"Helvetica-Oblique\",\"helvetica\",\"italic\",\"WinAnsiEncoding\"],[\"Helvetica-BoldOblique\",\"helvetica\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Courier\",\"courier\",\"normal\",\"WinAnsiEncoding\"],[\"Courier-Bold\",\"courier\",\"bold\",\"WinAnsiEncoding\"],[\"Courier-Oblique\",\"courier\",\"italic\",\"WinAnsiEncoding\"],[\"Courier-BoldOblique\",\"courier\",\"bolditalic\",\"WinAnsiEncoding\"],[\"Times-Roman\",\"times\",\"normal\",\"WinAnsiEncoding\"],[\"Times-Bold\",\"times\",\"bold\",\"WinAnsiEncoding\"],[\"Times-Italic\",\"times\",\"italic\",\"WinAnsiEncoding\"],[\"Times-BoldItalic\",\"times\",\"bolditalic\",\"WinAnsiEncoding\"],[\"ZapfDingbats\",\"zapfdingbats\",\"normal\",null],[\"Symbol\",\"symbol\",\"normal\",null]];y.__private__.getStandardFonts=function(){return de};var fe=e.fontSize||16;y.__private__.setFontSize=y.setFontSize=function(e){return fe=_===j.ADVANCED?e\u002F_e:e,this};var he,pe=y.__private__.getFontSize=y.getFontSize=function(){return _===j.COMPAT?fe:fe*_e},me=e.R2L||!1;y.__private__.setR2L=y.setR2L=function(e){return me=e,this},y.__private__.getR2L=y.getR2L=function(){return me};var ge,ye=y.__private__.setZoomMode=function(e){if(\u002F^\\d*\\.?\\d*%$\u002F.test(e))he=e;else if(isNaN(e)){if(-1===[void 0,null,\"fullwidth\",\"fullheight\",\"fullpage\",\"original\"].indexOf(e))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"'+e+'\" is not recognized.');he=e}else he=parseInt(e,10)};y.__private__.getZoomMode=function(){return he};var ve,we=y.__private__.setPageMode=function(e){if(-1==[void 0,null,\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"FullScreen\"].indexOf(e))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. \"'+e+'\" is not recognized.');ge=e};y.__private__.getPageMode=function(){return ge};var be=y.__private__.setLayoutMode=function(e){if(-1==[void 0,null,\"continuous\",\"single\",\"twoleft\",\"tworight\",\"two\"].indexOf(e))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. \"'+e+'\" is not recognized.');ve=e};y.__private__.getLayoutMode=function(){return ve},y.__private__.setDisplayMode=y.setDisplayMode=function(e,t,r){return ye(e),be(t),we(r),this};var Be={title:\"\",subject:\"\",author:\"\",keywords:\"\",creator:\"\"};y.__private__.getDocumentProperty=function(e){if(-1===Object.keys(Be).indexOf(e))throw new Error(\"Invalid argument passed to jsPDF.getDocumentProperty\");return Be[e]},y.__private__.getDocumentProperties=function(){return Be},y.__private__.setDocumentProperties=y.setProperties=y.setDocumentProperties=function(e){for(var t in Be)Be.hasOwnProperty(t)&&e[t]&&(Be[t]=e[t]);return this},y.__private__.setDocumentProperty=function(e,t){if(-1===Object.keys(Be).indexOf(e))throw new Error(\"Invalid arguments passed to jsPDF.setDocumentProperty\");return Be[e]=t};var je,_e,Ce,xe,Ee,Ne={},Qe={},Fe=[],Ue={},Se={},Le={},Te={},He=null,Ie=0,Pe=[],Oe=new F(y),ke=e.hotfixes||[],Re={},Me={},De=[],Ke=function(e,t,r,n,o,s){if(!(this instanceof Ke))return new Ke(e,t,r,n,o,s);isNaN(e)&&(e=1),isNaN(t)&&(t=0),isNaN(r)&&(r=0),isNaN(n)&&(n=1),isNaN(o)&&(o=0),isNaN(s)&&(s=0),this._matrix=[e,t,r,n,o,s]};Object.defineProperty(Ke.prototype,\"sx\",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Ke.prototype,\"shy\",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Ke.prototype,\"shx\",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Ke.prototype,\"sy\",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Ke.prototype,\"tx\",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Ke.prototype,\"ty\",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Ke.prototype,\"a\",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Ke.prototype,\"b\",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Ke.prototype,\"c\",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Ke.prototype,\"d\",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Ke.prototype,\"e\",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Ke.prototype,\"f\",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Ke.prototype,\"rotation\",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Ke.prototype,\"scaleX\",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Ke.prototype,\"scaleY\",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Ke.prototype,\"isIdentity\",{get:function(){return 1===this.sx&&0===this.shy&&0===this.shx&&1===this.sy&&0===this.tx&&0===this.ty}}),Ke.prototype.join=function(e){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(N).join(e)},Ke.prototype.multiply=function(e){var t=e.sx*this.sx+e.shy*this.shx,r=e.sx*this.shy+e.shy*this.sy,n=e.shx*this.sx+e.sy*this.shx,o=e.shx*this.shy+e.sy*this.sy,s=e.tx*this.sx+e.ty*this.shx+this.tx,i=e.tx*this.shy+e.ty*this.sy+this.ty;return new Ke(t,r,n,o,s,i)},Ke.prototype.decompose=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty,i=Math.sqrt(e*e+t*t),a=(e\u002F=i)*r+(t\u002F=i)*n;r-=e*a,n-=t*a;var A=Math.sqrt(r*r+n*n);return a\u002F=A,e*(n\u002F=A)\u003Ct*(r\u002F=A)&&(e=-e,t=-t,a=-a,i=-i),{scale:new Ke(i,0,0,A,0,0),translate:new Ke(1,0,0,1,o,s),rotate:new Ke(e,t,-t,e,0,0),skew:new Ke(1,0,a,1,0,0)}},Ke.prototype.toString=function(e){return this.join(\" \")},Ke.prototype.inversed=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty,i=1\u002F(e*n-t*r),a=n*i,A=-t*i,u=-r*i,c=e*i;return new Ke(a,A,u,c,-a*o-u*s,-A*o-c*s)},Ke.prototype.applyToPoint=function(e){var t=e.x*this.sx+e.y*this.shx+this.tx,r=e.x*this.shy+e.y*this.sy+this.ty;return new Nr(t,r)},Ke.prototype.applyToRectangle=function(e){var t=this.applyToPoint(e),r=this.applyToPoint(new Nr(e.x+e.w,e.y+e.h));return new Qr(t.x,t.y,r.x-t.x,r.y-t.y)},Ke.prototype.clone=function(){var e=this.sx,t=this.shy,r=this.shx,n=this.sy,o=this.tx,s=this.ty;return new Ke(e,t,r,n,o,s)},y.Matrix=Ke;var ze=y.matrixMult=function(e,t){return t.multiply(e)},Ve=new Ke(1,0,0,1,0,0);y.unitMatrix=y.identityMatrix=Ve;var qe=function(e,t){if(!Se[e]){var r=(t instanceof L?\"Sh\":\"P\")+(Object.keys(Ue).length+1).toString(10);t.id=r,Se[e]=r,Ue[r]=t,Oe.publish(\"addPattern\",t)}};y.ShadingPattern=L,y.TilingPattern=T,y.addShadingPattern=function(e,t){return S(\"addShadingPattern()\"),qe(e,t),this},y.beginTilingPattern=function(e){S(\"beginTilingPattern()\"),Ur(e.boundingBox[0],e.boundingBox[1],e.boundingBox[2]-e.boundingBox[0],e.boundingBox[3]-e.boundingBox[1],e.matrix)},y.endTilingPattern=function(e,t){S(\"endTilingPattern()\"),t.stream=oe[J].join(\"\\n\"),qe(e,t),Oe.publish(\"endTilingPattern\",t),De.pop().restore()};var Ge=y.__private__.newObject=function(){var e=Xe();return We(e,!0),e},Xe=y.__private__.newObjectDeferred=function(){return $++,ee[$]=function(){return re},$},We=function(e,t){return t=\"boolean\"==typeof t&&t,ee[e]=re,t&&ue(e+\" 0 obj\"),e},Je=y.__private__.newAdditionalObject=function(){var e={objId:Xe(),content:\"\"};return ne.push(e),e},Ye=Xe(),Ze=Xe(),$e=y.__private__.decodeColorString=function(e){var t=e.split(\" \");if(2!==t.length||\"g\"!==t[1]&&\"G\"!==t[1])5!==t.length||\"k\"!==t[4]&&\"K\"!==t[4]||(t=[(1-t[0])*(1-t[3]),(1-t[1])*(1-t[3]),(1-t[2])*(1-t[3]),\"r\"]);else{var r=parseFloat(t[0]);t=[r,r,r,\"r\"]}for(var n=\"#\",o=0;o\u003C3;o++)n+=(\"0\"+Math.floor(255*parseFloat(t[o])).toString(16)).slice(-2);return n},et=y.__private__.encodeColorString=function(e){var t;\"string\"==typeof e&&(e={ch1:e});var r=e.ch1,n=e.ch2,o=e.ch3,s=e.ch4,i=\"draw\"===e.pdfColorType?[\"G\",\"RG\",\"K\"]:[\"g\",\"rg\",\"k\"];if(\"string\"==typeof r&&\"#\"!==r.charAt(0)){var a=new f(r);if(a.ok)r=a.toHex();else if(!\u002F^\\d*\\.?\\d*$\u002F.test(r))throw new Error('Invalid color \"'+r+'\" passed to jsPDF.encodeColorString.')}if(\"string\"==typeof r&&\u002F^#[0-9A-Fa-f]{3}$\u002F.test(r)&&(r=\"#\"+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]),\"string\"==typeof r&&\u002F^#[0-9A-Fa-f]{6}$\u002F.test(r)){var A=parseInt(r.substr(1),16);r=A>>16&255,n=A>>8&255,o=255&A}if(void 0===n||void 0===s&&r===n&&n===o)if(\"string\"==typeof r)t=r+\" \"+i[0];else switch(e.precision){case 2:t=P(r\u002F255)+\" \"+i[0];break;case 3:default:t=O(r\u002F255)+\" \"+i[0]}else if(void 0===s||\"object\"==typeof s){if(s&&!isNaN(s.a)&&0===s.a)return[\"1.\",\"1.\",\"1.\",i[1]].join(\" \");if(\"string\"==typeof r)t=[r,n,o,i[1]].join(\" \");else switch(e.precision){case 2:t=[P(r\u002F255),P(n\u002F255),P(o\u002F255),i[1]].join(\" \");break;default:case 3:t=[O(r\u002F255),O(n\u002F255),O(o\u002F255),i[1]].join(\" \")}}else if(\"string\"==typeof r)t=[r,n,o,s,i[2]].join(\" \");else switch(e.precision){case 2:t=[P(r),P(n),P(o),P(s),i[2]].join(\" \");break;case 3:default:t=[O(r),O(n),O(o),O(s),i[2]].join(\" \")}return t},tt=y.__private__.getFilters=function(){return A},rt=y.__private__.putStream=function(e){var t=(e=e||{}).data||\"\",r=e.filters||tt(),n=e.alreadyAppliedFilters||[],o=e.addLength1||!1,s=t.length,i=e.objectId,a=function(e){return e};if(null!==p&&void 0===i)throw new Error(\"ObjectId must be passed to putStream for file encryption\");null!==p&&(a=Vt.encryptor(i,0));var A={};!0===r&&(r=[\"FlateEncode\"]);var u=e.additionalKeyValues||[],c=(A=void 0!==H.API.processDataByFilters?H.API.processDataByFilters(t,r):{data:t,reverseChain:[]}).reverseChain+(Array.isArray(n)?n.join(\" \"):n.toString());if(0!==A.data.length&&(u.push({key:\"Length\",value:A.data.length}),!0===o&&u.push({key:\"Length1\",value:s})),0!=c.length)if(c.split(\"\u002F\").length-1==1)u.push({key:\"Filter\",value:c});else{u.push({key:\"Filter\",value:\"[\"+c+\"]\"});for(var l=0;l\u003Cu.length;l+=1)if(\"DecodeParms\"===u[l].key){for(var d=[],f=0;f\u003CA.reverseChain.split(\"\u002F\").length-1;f+=1)d.push(\"null\");d.push(u[l].value),u[l].value=\"[\"+d.join(\" \")+\"]\"}}ue(\"\u003C\u003C\");for(var h=0;h\u003Cu.length;h++)ue(\"\u002F\"+u[h].key+\" \"+u[h].value);ue(\">>\"),0!==A.data.length&&(ue(\"stream\"),ue(a(A.data)),ue(\"endstream\"))},nt=y.__private__.putPage=function(e){var t=e.number,r=e.data,n=e.objId,o=e.contentsObjId;We(n,!0),ue(\"\u003C\u003C\u002FType \u002FPage\"),ue(\"\u002FParent \"+e.rootDictionaryObjId+\" 0 R\"),ue(\"\u002FResources \"+e.resourceDictionaryObjId+\" 0 R\"),ue(\"\u002FMediaBox [\"+parseFloat(N(e.mediaBox.bottomLeftX))+\" \"+parseFloat(N(e.mediaBox.bottomLeftY))+\" \"+N(e.mediaBox.topRightX)+\" \"+N(e.mediaBox.topRightY)+\"]\"),null!==e.cropBox&&ue(\"\u002FCropBox [\"+N(e.cropBox.bottomLeftX)+\" \"+N(e.cropBox.bottomLeftY)+\" \"+N(e.cropBox.topRightX)+\" \"+N(e.cropBox.topRightY)+\"]\"),null!==e.bleedBox&&ue(\"\u002FBleedBox [\"+N(e.bleedBox.bottomLeftX)+\" \"+N(e.bleedBox.bottomLeftY)+\" \"+N(e.bleedBox.topRightX)+\" \"+N(e.bleedBox.topRightY)+\"]\"),null!==e.trimBox&&ue(\"\u002FTrimBox [\"+N(e.trimBox.bottomLeftX)+\" \"+N(e.trimBox.bottomLeftY)+\" \"+N(e.trimBox.topRightX)+\" \"+N(e.trimBox.topRightY)+\"]\"),null!==e.artBox&&ue(\"\u002FArtBox [\"+N(e.artBox.bottomLeftX)+\" \"+N(e.artBox.bottomLeftY)+\" \"+N(e.artBox.topRightX)+\" \"+N(e.artBox.topRightY)+\"]\"),\"number\"==typeof e.userUnit&&1!==e.userUnit&&ue(\"\u002FUserUnit \"+e.userUnit),Oe.publish(\"putPage\",{objId:n,pageContext:Pe[t],pageNumber:t,page:r}),ue(\"\u002FContents \"+o+\" 0 R\"),ue(\">>\"),ue(\"endobj\");var s=r.join(\"\\n\");return _===j.ADVANCED&&(s+=\"\\nQ\"),We(o,!0),rt({data:s,filters:tt(),objectId:o}),ue(\"endobj\"),n},ot=y.__private__.putPages=function(){var e,t,r=[];for(e=1;e\u003C=Ie;e++)Pe[e].objId=Xe(),Pe[e].contentsObjId=Xe();for(e=1;e\u003C=Ie;e++)r.push(nt({number:e,data:oe[e],objId:Pe[e].objId,contentsObjId:Pe[e].contentsObjId,mediaBox:Pe[e].mediaBox,cropBox:Pe[e].cropBox,bleedBox:Pe[e].bleedBox,trimBox:Pe[e].trimBox,artBox:Pe[e].artBox,userUnit:Pe[e].userUnit,rootDictionaryObjId:Ye,resourceDictionaryObjId:Ze}));We(Ye,!0),ue(\"\u003C\u003C\u002FType \u002FPages\");var n=\"\u002FKids [\";for(t=0;t\u003CIe;t++)n+=r[t]+\" 0 R \";ue(n+\"]\"),ue(\"\u002FCount \"+Ie),ue(\">>\"),ue(\"endobj\"),Oe.publish(\"postPutPages\")},st=function(e){var t=function(e,t){return-1!==e.indexOf(\" \")?\"(\"+Qt(e,t)+\")\":Qt(e,t)};Oe.publish(\"putFont\",{font:e,out:ue,newObject:Ge,putStream:rt,pdfEscapeWithNeededParanthesis:t}),!0!==e.isAlreadyPutted&&(e.objectNumber=Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FType \u002FFont\"),ue(\"\u002FBaseFont \u002F\"+t(e.postScriptName)),ue(\"\u002FSubtype \u002FType1\"),\"string\"==typeof e.encoding&&ue(\"\u002FEncoding \u002F\"+e.encoding),ue(\"\u002FFirstChar 32\"),ue(\"\u002FLastChar 255\"),ue(\">>\"),ue(\"endobj\"))},it=function(){for(var e in Ne)Ne.hasOwnProperty(e)&&(!1===m||!0===m&&g.hasOwnProperty(e))&&st(Ne[e])},at=function(e){e.objectNumber=Ge();var t=[];t.push({key:\"Type\",value:\"\u002FXObject\"}),t.push({key:\"Subtype\",value:\"\u002FForm\"}),t.push({key:\"BBox\",value:\"[\"+[N(e.x),N(e.y),N(e.x+e.width),N(e.y+e.height)].join(\" \")+\"]\"}),t.push({key:\"Matrix\",value:\"[\"+e.matrix.toString()+\"]\"});var r=e.pages[1].join(\"\\n\");rt({data:r,additionalKeyValues:t,objectId:e.objectNumber}),ue(\"endobj\")},At=function(){for(var e in Re)Re.hasOwnProperty(e)&&at(Re[e])},ut=function(e,t){var r,n=[],o=1\u002F(t-1);for(r=0;r\u003C1;r+=o)n.push(r);if(n.push(1),0!=e[0].offset){var s={offset:0,color:e[0].color};e.unshift(s)}if(1!=e[e.length-1].offset){var i={offset:1,color:e[e.length-1].color};e.push(i)}for(var a=\"\",A=0,u=0;u\u003Cn.length;u++){for(r=n[u];r>e[A+1].offset;)A++;var c=e[A].offset,l=(r-c)\u002F(e[A+1].offset-c),d=e[A].color,f=e[A+1].color;a+=Z(Math.round((1-l)*d[0]+l*f[0]).toString(16))+Z(Math.round((1-l)*d[1]+l*f[1]).toString(16))+Z(Math.round((1-l)*d[2]+l*f[2]).toString(16))}return a.trim()},ct=function(e,t){t||(t=21);var r=Ge(),n=ut(e.colors,t),o=[];o.push({key:\"FunctionType\",value:\"0\"}),o.push({key:\"Domain\",value:\"[0.0 1.0]\"}),o.push({key:\"Size\",value:\"[\"+t+\"]\"}),o.push({key:\"BitsPerSample\",value:\"8\"}),o.push({key:\"Range\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),o.push({key:\"Decode\",value:\"[0.0 1.0 0.0 1.0 0.0 1.0]\"}),rt({data:n,additionalKeyValues:o,alreadyAppliedFilters:[\"\u002FASCIIHexDecode\"],objectId:r}),ue(\"endobj\"),e.objectNumber=Ge(),ue(\"\u003C\u003C \u002FShadingType \"+e.type),ue(\"\u002FColorSpace \u002FDeviceRGB\");var s=\"\u002FCoords [\"+N(parseFloat(e.coords[0]))+\" \"+N(parseFloat(e.coords[1]))+\" \";2===e.type?s+=N(parseFloat(e.coords[2]))+\" \"+N(parseFloat(e.coords[3])):s+=N(parseFloat(e.coords[2]))+\" \"+N(parseFloat(e.coords[3]))+\" \"+N(parseFloat(e.coords[4]))+\" \"+N(parseFloat(e.coords[5])),ue(s+=\"]\"),e.matrix&&ue(\"\u002FMatrix [\"+e.matrix.toString()+\"]\"),ue(\"\u002FFunction \"+r+\" 0 R\"),ue(\"\u002FExtend [true true]\"),ue(\">>\"),ue(\"endobj\")},lt=function(e,t){var r=Xe(),n=Ge();t.push({resourcesOid:r,objectOid:n}),e.objectNumber=n;var o=[];o.push({key:\"Type\",value:\"\u002FPattern\"}),o.push({key:\"PatternType\",value:\"1\"}),o.push({key:\"PaintType\",value:\"1\"}),o.push({key:\"TilingType\",value:\"1\"}),o.push({key:\"BBox\",value:\"[\"+e.boundingBox.map(N).join(\" \")+\"]\"}),o.push({key:\"XStep\",value:N(e.xStep)}),o.push({key:\"YStep\",value:N(e.yStep)}),o.push({key:\"Resources\",value:r+\" 0 R\"}),e.matrix&&o.push({key:\"Matrix\",value:\"[\"+e.matrix.toString()+\"]\"}),rt({data:e.stream,additionalKeyValues:o,objectId:e.objectNumber}),ue(\"endobj\")},dt=function(e){var t;for(t in Ue)Ue.hasOwnProperty(t)&&(Ue[t]instanceof L?ct(Ue[t]):Ue[t]instanceof T&&lt(Ue[t],e))},ft=function(e){for(var t in e.objectNumber=Ge(),ue(\"\u003C\u003C\"),e)switch(t){case\"opacity\":ue(\"\u002Fca \"+P(e[t]));break;case\"stroke-opacity\":ue(\"\u002FCA \"+P(e[t]))}ue(\">>\"),ue(\"endobj\")},ht=function(){var e;for(e in Le)Le.hasOwnProperty(e)&&ft(Le[e])},pt=function(){for(var e in ue(\"\u002FXObject \u003C\u003C\"),Re)Re.hasOwnProperty(e)&&Re[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Re[e].objectNumber+\" 0 R\");Oe.publish(\"putXobjectDict\"),ue(\">>\")},mt=function(){Vt.oid=Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FFilter \u002FStandard\"),ue(\"\u002FV \"+Vt.v),ue(\"\u002FR \"+Vt.r),ue(\"\u002FU \u003C\"+Vt.toHexString(Vt.U)+\">\"),ue(\"\u002FO \u003C\"+Vt.toHexString(Vt.O)+\">\"),ue(\"\u002FP \"+Vt.P),ue(\">>\"),ue(\"endobj\")},gt=function(){for(var e in ue(\"\u002FFont \u003C\u003C\"),Ne)Ne.hasOwnProperty(e)&&(!1===m||!0===m&&g.hasOwnProperty(e))&&ue(\"\u002F\"+e+\" \"+Ne[e].objectNumber+\" 0 R\");ue(\">>\")},yt=function(){if(Object.keys(Ue).length>0){for(var e in ue(\"\u002FShading \u003C\u003C\"),Ue)Ue.hasOwnProperty(e)&&Ue[e]instanceof L&&Ue[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Ue[e].objectNumber+\" 0 R\");Oe.publish(\"putShadingPatternDict\"),ue(\">>\")}},vt=function(e){if(Object.keys(Ue).length>0){for(var t in ue(\"\u002FPattern \u003C\u003C\"),Ue)Ue.hasOwnProperty(t)&&Ue[t]instanceof y.TilingPattern&&Ue[t].objectNumber>=0&&Ue[t].objectNumber\u003Ce&&ue(\"\u002F\"+t+\" \"+Ue[t].objectNumber+\" 0 R\");Oe.publish(\"putTilingPatternDict\"),ue(\">>\")}},wt=function(){if(Object.keys(Le).length>0){var e;for(e in ue(\"\u002FExtGState \u003C\u003C\"),Le)Le.hasOwnProperty(e)&&Le[e].objectNumber>=0&&ue(\"\u002F\"+e+\" \"+Le[e].objectNumber+\" 0 R\");Oe.publish(\"putGStateDict\"),ue(\">>\")}},bt=function(e){We(e.resourcesOid,!0),ue(\"\u003C\u003C\"),ue(\"\u002FProcSet [\u002FPDF \u002FText \u002FImageB \u002FImageC \u002FImageI]\"),gt(),yt(),vt(e.objectOid),wt(),pt(),ue(\">>\"),ue(\"endobj\")},Bt=function(){var e=[];it(),ht(),At(),dt(e),Oe.publish(\"putResources\"),e.forEach(bt),bt({resourcesOid:Ze,objectOid:Number.MAX_SAFE_INTEGER}),Oe.publish(\"postPutResources\")},jt=function(){Oe.publish(\"putAdditionalObjects\");for(var e=0;e\u003Cne.length;e++){var t=ne[e];We(t.objId,!0),ue(t.content),ue(\"endobj\")}Oe.publish(\"postPutAdditionalObjects\")},_t=function(e){Qe[e.fontName]=Qe[e.fontName]||{},Qe[e.fontName][e.fontStyle]=e.id},Ct=function(e,t,r,n,o){var s={id:\"F\"+(Object.keys(Ne).length+1).toString(10),postScriptName:e,fontName:t,fontStyle:r,encoding:n,isStandardFont:o||!1,metadata:{}};return Oe.publish(\"addFont\",{font:s,instance:this}),Ne[s.id]=s,_t(s),s.id},xt=function(e){for(var t=0,r=de.length;t\u003Cr;t++){var n=Ct.call(this,e[t][0],e[t][1],e[t][2],de[t][3],!0);!1===m&&(g[n]=!0);var o=e[t][0].split(\"-\");_t({id:n,fontName:o[0],fontStyle:o[1]||\"\"})}Oe.publish(\"addFonts\",{fonts:Ne,dictionary:Qe})},Et=function(e){return e.foo=function(){try{return e.apply(this,arguments)}catch(e){var t=e.stack||\"\";~t.indexOf(\" at \")&&(t=t.split(\" at \")[1]);var r=\"Error in function \"+t.split(\"\\n\")[0].split(\"\u003C\")[0]+\": \"+e.message;if(!o.console)throw new Error(r);o.console.error(r,e),o.alert&&alert(r)}},e.foo.bar=e,e.foo},Nt=function(e,t){var r,n,o,s,i,a,A,u,c;if(o=(t=t||{}).sourceEncoding||\"Unicode\",i=t.outputEncoding,(t.autoencode||i)&&Ne[je].metadata&&Ne[je].metadata[o]&&Ne[je].metadata[o].encoding&&(s=Ne[je].metadata[o].encoding,!i&&Ne[je].encoding&&(i=Ne[je].encoding),!i&&s.codePages&&(i=s.codePages[0]),\"string\"==typeof i&&(i=s[i]),i)){for(A=!1,a=[],r=0,n=e.length;r\u003Cn;r++)(u=i[e.charCodeAt(r)])?a.push(String.fromCharCode(u)):a.push(e[r]),a[r].charCodeAt(0)>>8&&(A=!0);e=a.join(\"\")}for(r=e.length;void 0===A&&0!==r;)e.charCodeAt(r-1)>>8&&(A=!0),r--;if(!A)return e;for(a=t.noBOM?[]:[254,255],r=0,n=e.length;r\u003Cn;r++){if((c=(u=e.charCodeAt(r))>>8)>>8)throw new Error(\"Character at position \"+r+\" of string '\"+e+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");a.push(c),a.push(u-(c\u003C\u003C8))}return String.fromCharCode.apply(void 0,a)},Qt=y.__private__.pdfEscape=y.pdfEscape=function(e,t){return Nt(e,t).replace(\u002F\\\\\u002Fg,\"\\\\\\\\\").replace(\u002F\\(\u002Fg,\"\\\\(\").replace(\u002F\\)\u002Fg,\"\\\\)\")},Ft=y.__private__.beginPage=function(e){oe[++Ie]=[],Pe[Ie]={objId:0,contentsObjId:0,userUnit:Number(u),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(e[0]),topRightY:Number(e[1])}},Lt(Ie),Ae(oe[J])},Ut=function(e,t){var n,o,a;switch(r=t||r,\"string\"==typeof e&&(n=B(e.toLowerCase()),Array.isArray(n)&&(o=n[0],a=n[1])),Array.isArray(e)&&(o=e[0]*_e,a=e[1]*_e),isNaN(o)&&(o=s[0],a=s[1]),(o>14400||a>14400)&&(i.warn(\"A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width\u002Fheight to 14400\"),o=Math.min(14400,o),a=Math.min(14400,a)),s=[o,a],r.substr(0,1)){case\"l\":a>o&&(s=[a,o]);break;case\"p\":o>a&&(s=[a,o])}Ft(s),lr(cr),ue(vr),0!==Cr&&ue(Cr+\" J\"),0!==xr&&ue(xr+\" j\"),Oe.publish(\"addPage\",{pageNumber:Ie})},St=function(e){e>0&&e\u003C=Ie&&(oe.splice(e,1),Pe.splice(e,1),Ie--,J>Ie&&(J=Ie),this.setPage(J))},Lt=function(e){e>0&&e\u003C=Ie&&(J=e)},Tt=y.__private__.getNumberOfPages=y.getNumberOfPages=function(){return oe.length-1},Ht=function(e,t,r){var n,o=void 0;return r=r||{},e=void 0!==e?e:Ne[je].fontName,t=void 0!==t?t:Ne[je].fontStyle,n=e.toLowerCase(),void 0!==Qe[n]&&void 0!==Qe[n][t]?o=Qe[n][t]:void 0!==Qe[e]&&void 0!==Qe[e][t]?o=Qe[e][t]:!1===r.disableWarning&&i.warn(\"Unable to look up font label for font '\"+e+\"', '\"+t+\"'. Refer to getFontList() for available fonts.\"),o||r.noFallback||null==(o=Qe.times[t])&&(o=Qe.times.normal),o},It=y.__private__.putInfo=function(){var e=Ge(),t=function(e){return e};for(var r in null!==p&&(t=Vt.encryptor(e,0)),ue(\"\u003C\u003C\"),ue(\"\u002FProducer (\"+Qt(t(\"jsPDF \"+H.version))+\")\"),Be)Be.hasOwnProperty(r)&&Be[r]&&ue(\"\u002F\"+r.substr(0,1).toUpperCase()+r.substr(1)+\" (\"+Qt(t(Be[r]))+\")\");ue(\"\u002FCreationDate (\"+Qt(t(D))+\")\"),ue(\">>\"),ue(\"endobj\")},Pt=y.__private__.putCatalog=function(e){var t=(e=e||{}).rootDictionaryObjId||Ye;switch(Ge(),ue(\"\u003C\u003C\"),ue(\"\u002FType \u002FCatalog\"),ue(\"\u002FPages \"+t+\" 0 R\"),he||(he=\"fullwidth\"),he){case\"fullwidth\":ue(\"\u002FOpenAction [3 0 R \u002FFitH null]\");break;case\"fullheight\":ue(\"\u002FOpenAction [3 0 R \u002FFitV null]\");break;case\"fullpage\":ue(\"\u002FOpenAction [3 0 R \u002FFit]\");break;case\"original\":ue(\"\u002FOpenAction [3 0 R \u002FXYZ null null 1]\");break;default:var r=\"\"+he;\"%\"===r.substr(r.length-1)&&(he=parseInt(he)\u002F100),\"number\"==typeof he&&ue(\"\u002FOpenAction [3 0 R \u002FXYZ null null \"+P(he)+\"]\")}switch(ve||(ve=\"continuous\"),ve){case\"continuous\":ue(\"\u002FPageLayout \u002FOneColumn\");break;case\"single\":ue(\"\u002FPageLayout \u002FSinglePage\");break;case\"two\":case\"twoleft\":ue(\"\u002FPageLayout \u002FTwoColumnLeft\");break;case\"tworight\":ue(\"\u002FPageLayout \u002FTwoColumnRight\")}ge&&ue(\"\u002FPageMode \u002F\"+ge),Oe.publish(\"putCatalog\"),ue(\">>\"),ue(\"endobj\")},Ot=y.__private__.putTrailer=function(){ue(\"trailer\"),ue(\"\u003C\u003C\"),ue(\"\u002FSize \"+($+1)),ue(\"\u002FRoot \"+$+\" 0 R\"),ue(\"\u002FInfo \"+($-1)+\" 0 R\"),null!==p&&ue(\"\u002FEncrypt \"+Vt.oid+\" 0 R\"),ue(\"\u002FID [ \u003C\"+K+\"> \u003C\"+K+\"> ]\"),ue(\">>\")},kt=y.__private__.putHeader=function(){ue(\"%PDF-\"+v),ue(\"%ºß¬à\")},Rt=y.__private__.putXRef=function(){var e=\"0000000000\";ue(\"xref\"),ue(\"0 \"+($+1)),ue(\"0000000000 65535 f \");for(var t=1;t\u003C=$;t++)\"function\"==typeof ee[t]?ue((e+ee[t]()).slice(-10)+\" 00000 n \"):void 0!==ee[t]?ue((e+ee[t]).slice(-10)+\" 00000 n \"):ue(\"0000000000 00000 n \")},Mt=y.__private__.buildDocument=function(){ae(),Ae(te),Oe.publish(\"buildDocument\"),kt(),ot(),jt(),Bt(),null!==p&&mt(),It(),Pt();var e=re;return Rt(),Ot(),ue(\"startxref\"),ue(\"\"+e),ue(\"%%EOF\"),Ae(oe[J]),te.join(\"\\n\")},Dt=y.__private__.getBlob=function(e){return new Blob([le(e)],{type:\"application\u002Fpdf\"})},Kt=y.output=y.__private__.output=Et((function(e,t){switch(\"string\"==typeof(t=t||{})?t={filename:t}:t.filename=t.filename||\"generated.pdf\",e){case void 0:return Mt();case\"save\":y.save(t.filename);break;case\"arraybuffer\":return le(Mt());case\"blob\":return Dt(Mt());case\"bloburi\":case\"bloburl\":if(void 0!==o.URL&&\"function\"==typeof o.URL.createObjectURL)return o.URL&&o.URL.createObjectURL(Dt(Mt()))||void 0;i.warn(\"bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.\");break;case\"datauristring\":case\"dataurlstring\":var r=\"\",n=Mt();try{r=l(n)}catch(e){r=l(unescape(encodeURIComponent(n)))}return\"data:application\u002Fpdf;filename=\"+t.filename+\";base64,\"+r;case\"pdfobjectnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(o)){var s='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Cscript src=\"'+(t.pdfObjectUrl||\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fpdfobject\u002F2.1.1\u002Fpdfobject.min.js\")+'\">\u003C\\\u002Fscript>\u003Cscript >PDFObject.embed(\"'+this.output(\"dataurlstring\")+'\", '+JSON.stringify(t)+\");\u003C\\\u002Fscript>\u003C\u002Fbody>\u003C\u002Fhtml>\",a=o.open();return null!==a&&a.document.write(s),a}throw new Error(\"The option pdfobjectnewwindow just works in a browser-environment.\");case\"pdfjsnewwindow\":if(\"[object Window]\"===Object.prototype.toString.call(o)){var A='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Ciframe id=\"pdfViewer\" src=\"'+(t.pdfJsUrl||\"examples\u002FPDF.js\u002Fweb\u002Fviewer.html\")+\"?file=&downloadName=\"+t.filename+'\" width=\"500px\" height=\"400px\" \u002F>\u003C\u002Fbody>\u003C\u002Fhtml>',u=o.open();if(null!==u){u.document.write(A);var c=this;u.document.documentElement.querySelector(\"#pdfViewer\").onload=function(){u.document.title=t.filename,u.document.documentElement.querySelector(\"#pdfViewer\").contentWindow.PDFViewerApplication.open(c.output(\"bloburl\"))}}return u}throw new Error(\"The option pdfjsnewwindow just works in a browser-environment.\");case\"dataurlnewwindow\":if(\"[object Window]\"!==Object.prototype.toString.call(o))throw new Error(\"The option dataurlnewwindow just works in a browser-environment.\");var d='\u003Chtml>\u003Cstyle>html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}  \u003C\u002Fstyle>\u003Cbody>\u003Ciframe src=\"'+this.output(\"datauristring\",t)+'\">\u003C\u002Fiframe>\u003C\u002Fbody>\u003C\u002Fhtml>',f=o.open();if(null!==f&&(f.document.write(d),f.document.title=t.filename),f||\"undefined\"==typeof safari)return f;break;case\"datauri\":case\"dataurl\":return o.document.location.href=this.output(\"datauristring\",t);default:return null}})),zt=function(e){return!0===Array.isArray(ke)&&ke.indexOf(e)>-1};switch(n){case\"pt\":_e=1;break;case\"mm\":_e=72\u002F25.4;break;case\"cm\":_e=72\u002F2.54;break;case\"in\":_e=72;break;case\"px\":_e=1==zt(\"px_scaling\")?.75:96\u002F72;break;case\"pc\":case\"em\":_e=12;break;case\"ex\":_e=6;break;default:throw new Error(\"Invalid unit: \"+n)}var Vt=null;X(),V();var qt=function(e){return null!==p?Vt.encryptor(e,0):function(e){return e}},Gt=y.__private__.getPageInfo=y.getPageInfo=function(e){if(isNaN(e)||e%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfo\");return{objId:Pe[e].objId,pageNumber:e,pageContext:Pe[e]}},Xt=y.__private__.getPageInfoByObjId=function(e){if(isNaN(e)||e%1!=0)throw new Error(\"Invalid argument passed to jsPDF.getPageInfoByObjId\");for(var t in Pe)if(Pe[t].objId===e)break;return Gt(t)},Wt=y.__private__.getCurrentPageInfo=y.getCurrentPageInfo=function(){return{objId:Pe[J].objId,pageNumber:J,pageContext:Pe[J]}};y.addPage=function(){return Ut.apply(this,arguments),this},y.setPage=function(){return Lt.apply(this,arguments),Ae.call(this,oe[J]),this},y.insertPage=function(e){return this.addPage(),this.movePage(J,e),this},y.movePage=function(e,t){var r,n;if(e>t){r=oe[e],n=Pe[e];for(var o=e;o>t;o--)oe[o]=oe[o-1],Pe[o]=Pe[o-1];oe[t]=r,Pe[t]=n,this.setPage(t)}else if(e\u003Ct){r=oe[e],n=Pe[e];for(var s=e;s\u003Ct;s++)oe[s]=oe[s+1],Pe[s]=Pe[s+1];oe[t]=r,Pe[t]=n,this.setPage(t)}return this},y.deletePage=function(){return St.apply(this,arguments),this},y.__private__.text=y.text=function(e,t,r,n,o){var s,i,a,A,u,c,l,d,f=(n=n||{}).scope||this;if(\"number\"==typeof e&&\"number\"==typeof t&&(\"string\"==typeof r||Array.isArray(r))){var h=r;r=t,t=e,e=h}if(arguments[3]instanceof Ke==0?(a=arguments[4],A=arguments[5],\"object\"==typeof(l=arguments[3])&&null!==l||(\"string\"==typeof a&&(A=a,a=null),\"string\"==typeof l&&(A=l,l=null),\"number\"==typeof l&&(a=l,l=null),n={flags:l,angle:a,align:A})):(S(\"The transform parameter of text() with a Matrix value\"),d=o),isNaN(t)||isNaN(r)||null==e)throw new Error(\"Invalid arguments passed to jsPDF.text\");if(0===e.length)return f;var p=\"\",m=!1,y=\"number\"==typeof n.lineHeightFactor?n.lineHeightFactor:ur,v=f.internal.scaleFactor;function w(e){return e=e.split(\"\\t\").join(Array(n.TabLen||9).join(\" \")),Qt(e,l)}function b(e){for(var t,r=e.concat(),n=[],o=r.length;o--;)\"string\"==typeof(t=r.shift())?n.push(t):Array.isArray(e)&&(1===t.length||void 0===t[1]&&void 0===t[2])?n.push(t[0]):n.push([t[0],t[1],t[2]]);return n}function B(e,t){var r;if(\"string\"==typeof e)r=t(e)[0];else if(Array.isArray(e)){for(var n,o,s=e.concat(),i=[],a=s.length;a--;)\"string\"==typeof(n=s.shift())?i.push(t(n)[0]):Array.isArray(n)&&\"string\"==typeof n[0]&&(o=t(n[0],n[1],n[2]),i.push([o[0],o[1],o[2]]));r=i}return r}var C=!1,x=!0;if(\"string\"==typeof e)C=!0;else if(Array.isArray(e)){var E=e.concat();i=[];for(var Q,F=E.length;F--;)(\"string\"!=typeof(Q=E.shift())||Array.isArray(Q)&&\"string\"!=typeof Q[0])&&(x=!1);C=x}if(!1===C)throw new Error('Type of text must be string or Array. \"'+e+'\" is not recognized.');\"string\"==typeof e&&(e=e.match(\u002F[\\r?\\n]\u002F)?e.split(\u002F\\r\\n|\\r|\\n\u002Fg):[e]);var U=fe\u002Ff.internal.scaleFactor,L=U*(ur-1);switch(n.baseline){case\"bottom\":r-=L;break;case\"top\":r+=U-L;break;case\"hanging\":r+=U-2*L;break;case\"middle\":r+=U\u002F2-L}if((c=n.maxWidth||0)>0&&(\"string\"==typeof e?e=f.splitTextToSize(e,c):\"[object Array]\"===Object.prototype.toString.call(e)&&(e=e.reduce((function(e,t){return e.concat(f.splitTextToSize(t,c))}),[]))),s={text:e,x:t,y:r,options:n,mutex:{pdfEscape:Qt,activeFontKey:je,fonts:Ne,activeFontSize:fe}},Oe.publish(\"preProcessText\",s),e=s.text,a=(n=s.options).angle,d instanceof Ke==0&&a&&\"number\"==typeof a){a*=Math.PI\u002F180,0===n.rotationDirection&&(a=-a),_===j.ADVANCED&&(a=-a);var T=Math.cos(a),H=Math.sin(a);d=new Ke(T,H,-H,T,0,0)}else a&&a instanceof Ke&&(d=a);_!==j.ADVANCED||d||(d=Ve),void 0!==(u=n.charSpace||jr)&&(p+=N(k(u))+\" Tc\\n\",this.setCharSpace(this.getCharSpace()||0)),n.lang;var I=-1,P=void 0!==n.renderingMode?n.renderingMode:n.stroke,O=f.internal.getCurrentPageInfo().pageContext;switch(P){case 0:case!1:case\"fill\":I=0;break;case 1:case!0:case\"stroke\":I=1;break;case 2:case\"fillThenStroke\":I=2;break;case 3:case\"invisible\":I=3;break;case 4:case\"fillAndAddForClipping\":I=4;break;case 5:case\"strokeAndAddPathForClipping\":I=5;break;case 6:case\"fillThenStrokeAndAddToPathForClipping\":I=6;break;case 7:case\"addToPathForClipping\":I=7}var R=void 0!==O.usedRenderingMode?O.usedRenderingMode:-1;-1!==I?p+=I+\" Tr\\n\":-1!==R&&(p+=\"0 Tr\\n\"),-1!==I&&(O.usedRenderingMode=I),A=n.align||\"left\";var M,D=fe*y,K=f.internal.pageSize.getWidth(),z=Ne[je];u=n.charSpace||jr,c=n.maxWidth||0,l=Object.assign({autoencode:!0,noBOM:!0},n.flags);var V=[];if(\"[object Array]\"===Object.prototype.toString.call(e)){var q;i=b(e),\"left\"!==A&&(M=i.map((function(e){return f.getStringUnitWidth(e,{font:z,charSpace:u,fontSize:fe,doKerning:!1})*fe\u002Fv})));var G,X=0;if(\"right\"===A){t-=M[0],e=[],F=i.length;for(var W=0;W\u003CF;W++)0===W?(G=pr(t),q=mr(r)):(G=k(X-M[W]),q=-D),e.push([i[W],G,q]),X=M[W]}else if(\"center\"===A){t-=M[0]\u002F2,e=[],F=i.length;for(var J=0;J\u003CF;J++)0===J?(G=pr(t),q=mr(r)):(G=k((X-M[J])\u002F2),q=-D),e.push([i[J],G,q]),X=M[J]}else if(\"left\"===A){e=[],F=i.length;for(var Y=0;Y\u003CF;Y++)e.push(i[Y])}else{if(\"justify\"!==A)throw new Error('Unrecognized alignment option, use \"left\", \"center\", \"right\" or \"justify\".');e=[],F=i.length,c=0!==c?c:K;for(var Z=0;Z\u003CF;Z++)q=0===Z?mr(r):-D,G=0===Z?pr(t):0,Z\u003CF-1&&V.push(N(k((c-M[Z])\u002F(i[Z].split(\" \").length-1)))),e.push([i[Z],G,q])}}var $=\"boolean\"==typeof n.R2L?n.R2L:me;!0===$&&(e=B(e,(function(e,t,r){return[e.split(\"\").reverse().join(\"\"),t,r]}))),s={text:e,x:t,y:r,options:n,mutex:{pdfEscape:Qt,activeFontKey:je,fonts:Ne,activeFontSize:fe}},Oe.publish(\"postProcessText\",s),e=s.text,m=s.mutex.isHex||!1;var ee=Ne[je].encoding;\"WinAnsiEncoding\"!==ee&&\"StandardEncoding\"!==ee||(e=B(e,(function(e,t,r){return[w(e),t,r]}))),i=b(e),e=[];for(var te,re,ne,oe=0,se=1,ie=Array.isArray(i[0])?se:oe,ae=\"\",Ae=function(e,t,r){var o=\"\";return r instanceof Ke?(r=\"number\"==typeof n.angle?ze(r,new Ke(1,0,0,1,e,t)):ze(new Ke(1,0,0,1,e,t),r),_===j.ADVANCED&&(r=ze(new Ke(1,0,0,-1,0,0),r)),o=r.join(\" \")+\" Tm\\n\"):o=N(e)+\" \"+N(t)+\" Td\\n\",o},ce=0;ce\u003Ci.length;ce++){switch(ae=\"\",ie){case se:ne=(m?\"\u003C\":\"(\")+i[ce][0]+(m?\">\":\")\"),te=parseFloat(i[ce][1]),re=parseFloat(i[ce][2]);break;case oe:ne=(m?\"\u003C\":\"(\")+i[ce]+(m?\">\":\")\"),te=pr(t),re=mr(r)}void 0!==V&&void 0!==V[ce]&&(ae=V[ce]+\" Tw\\n\"),0===ce?e.push(ae+Ae(te,re,d)+ne):ie===oe?e.push(ae+ne):ie===se&&e.push(ae+Ae(te,re,d)+ne)}e=ie===oe?e.join(\" Tj\\nT* \"):e.join(\" Tj\\n\"),e+=\" Tj\\n\";var le=\"BT\\n\u002F\";return le+=je+\" \"+fe+\" Tf\\n\",le+=N(fe*y)+\" TL\\n\",le+=br+\"\\n\",le+=p,le+=e,ue(le+=\"ET\"),g[je]=!0,f};var Jt=y.__private__.clip=y.clip=function(e){return ue(\"evenodd\"===e?\"W*\":\"W\"),this};y.clipEvenOdd=function(){return Jt(\"evenodd\")},y.__private__.discardPath=y.discardPath=function(){return ue(\"n\"),this};var Yt=y.__private__.isValidStyle=function(e){var t=!1;return-1!==[void 0,null,\"S\",\"D\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\",\"n\"].indexOf(e)&&(t=!0),t};y.__private__.setDefaultPathOperation=y.setDefaultPathOperation=function(e){return Yt(e)&&(h=e),this};var Zt=y.__private__.getStyle=y.getStyle=function(e){var t=h;switch(e){case\"D\":case\"S\":t=\"S\";break;case\"F\":t=\"f\";break;case\"FD\":case\"DF\":t=\"B\";break;case\"f\":case\"f*\":case\"B\":case\"B*\":t=e}return t},$t=y.close=function(){return ue(\"h\"),this};y.stroke=function(){return ue(\"S\"),this},y.fill=function(e){return er(\"f\",e),this},y.fillEvenOdd=function(e){return er(\"f*\",e),this},y.fillStroke=function(e){return er(\"B\",e),this},y.fillStrokeEvenOdd=function(e){return er(\"B*\",e),this};var er=function(e,t){\"object\"==typeof t?nr(t,e):ue(e)},tr=function(e){null===e||_===j.ADVANCED&&void 0===e||(e=Zt(e),ue(e))};function rr(e,t,r,n,o){var s=new T(t||this.boundingBox,r||this.xStep,n||this.yStep,this.gState,o||this.matrix);s.stream=this.stream;var i=e+\"$$\"+this.cloneIndex+++\"$$\";return qe(i,s),s}var nr=function(e,t){var r=Se[e.key],n=Ue[r];if(n instanceof L)ue(\"q\"),ue(or(t)),n.gState&&y.setGState(n.gState),ue(e.matrix.toString()+\" cm\"),ue(\"\u002F\"+r+\" sh\"),ue(\"Q\");else if(n instanceof T){var o=new Ke(1,0,0,-1,0,Ir());e.matrix&&(o=o.multiply(e.matrix||Ve),r=rr.call(n,e.key,e.boundingBox,e.xStep,e.yStep,o).id),ue(\"q\"),ue(\"\u002FPattern cs\"),ue(\"\u002F\"+r+\" scn\"),n.gState&&y.setGState(n.gState),ue(t),ue(\"Q\")}},or=function(e){switch(e){case\"f\":case\"F\":return\"W n\";case\"f*\":return\"W* n\";case\"B\":return\"W S\";case\"B*\":return\"W* S\";case\"S\":return\"W S\";case\"n\":return\"W n\"}},sr=y.moveTo=function(e,t){return ue(N(k(e))+\" \"+N(M(t))+\" m\"),this},ir=y.lineTo=function(e,t){return ue(N(k(e))+\" \"+N(M(t))+\" l\"),this},ar=y.curveTo=function(e,t,r,n,o,s){return ue([N(k(e)),N(M(t)),N(k(r)),N(M(n)),N(k(o)),N(M(s)),\"c\"].join(\" \")),this};y.__private__.line=y.line=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.line\");return _===j.COMPAT?this.lines([[r-e,n-t]],e,t,[1,1],o||\"S\"):this.lines([[r-e,n-t]],e,t,[1,1]).stroke()},y.__private__.lines=y.lines=function(e,t,r,n,o,s){var i,a,A,u,c,l,d,f,h,p,m,g;if(\"number\"==typeof e&&(g=r,r=t,t=e,e=g),n=n||[1,1],s=s||!1,isNaN(t)||isNaN(r)||!Array.isArray(e)||!Array.isArray(n)||!Yt(o)||\"boolean\"!=typeof s)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(sr(t,r),i=n[0],a=n[1],u=e.length,p=t,m=r,A=0;A\u003Cu;A++)2===(c=e[A]).length?(p=c[0]*i+p,m=c[1]*a+m,ir(p,m)):(l=c[0]*i+p,d=c[1]*a+m,f=c[2]*i+p,h=c[3]*a+m,p=c[4]*i+p,m=c[5]*a+m,ar(l,d,f,h,p,m));return s&&$t(),tr(o),this},y.path=function(e){for(var t=0;t\u003Ce.length;t++){var r=e[t],n=r.c;switch(r.op){case\"m\":sr(n[0],n[1]);break;case\"l\":ir(n[0],n[1]);break;case\"c\":ar.apply(this,n);break;case\"h\":$t()}}return this},y.__private__.rect=y.rect=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.rect\");return _===j.COMPAT&&(n=-n),ue([N(k(e)),N(M(t)),N(k(r)),N(k(n)),\"re\"].join(\" \")),tr(o),this},y.__private__.triangle=y.triangle=function(e,t,r,n,o,s,i){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s)||!Yt(i))throw new Error(\"Invalid arguments passed to jsPDF.triangle\");return this.lines([[r-e,n-t],[o-r,s-n],[e-o,t-s]],e,t,[1,1],i,!0),this},y.__private__.roundedRect=y.roundedRect=function(e,t,r,n,o,s,i){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s)||!Yt(i))throw new Error(\"Invalid arguments passed to jsPDF.roundedRect\");var a=4\u002F3*(Math.SQRT2-1);return o=Math.min(o,.5*r),s=Math.min(s,.5*n),this.lines([[r-2*o,0],[o*a,0,o,s-s*a,o,s],[0,n-2*s],[0,s*a,-o*a,s,-o,s],[2*o-r,0],[-o*a,0,-o,-s*a,-o,-s],[0,2*s-n],[0,-s*a,o*a,-s,o,-s]],e+o,t,[1,1],i,!0),this},y.__private__.ellipse=y.ellipse=function(e,t,r,n,o){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||!Yt(o))throw new Error(\"Invalid arguments passed to jsPDF.ellipse\");var s=4\u002F3*(Math.SQRT2-1)*r,i=4\u002F3*(Math.SQRT2-1)*n;return sr(e+r,t),ar(e+r,t-i,e+s,t-n,e,t-n),ar(e-s,t-n,e-r,t-i,e-r,t),ar(e-r,t+i,e-s,t+n,e,t+n),ar(e+s,t+n,e+r,t+i,e+r,t),tr(o),this},y.__private__.circle=y.circle=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||!Yt(n))throw new Error(\"Invalid arguments passed to jsPDF.circle\");return this.ellipse(e,t,r,r,n)},y.setFont=function(e,t,r){return r&&(t=E(t,r)),je=Ht(e,t,{disableWarning:!1}),this};var Ar=y.__private__.getFont=y.getFont=function(){return Ne[Ht.apply(y,arguments)]};y.__private__.getFontList=y.getFontList=function(){var e,t,r={};for(e in Qe)if(Qe.hasOwnProperty(e))for(t in r[e]=[],Qe[e])Qe[e].hasOwnProperty(t)&&r[e].push(t);return r},y.addFont=function(e,t,r,n,o){var s=[\"StandardEncoding\",\"MacRomanEncoding\",\"Identity-H\",\"WinAnsiEncoding\"];return arguments[3]&&-1!==s.indexOf(arguments[3])?o=arguments[3]:arguments[3]&&-1==s.indexOf(arguments[3])&&(r=E(r,n)),o=o||\"Identity-H\",Ct.call(this,e,t,r,o)};var ur,cr=e.lineWidth||.200025,lr=y.__private__.setLineWidth=y.setLineWidth=function(e){return ue(N(k(e))+\" w\"),this};y.__private__.setLineDash=H.API.setLineDash=H.API.setLineDashPattern=function(e,t){if(e=e||[],t=t||0,isNaN(t)||!Array.isArray(e))throw new Error(\"Invalid arguments passed to jsPDF.setLineDash\");return e=e.map((function(e){return N(k(e))})).join(\" \"),t=N(k(t)),ue(\"[\"+e+\"] \"+t+\" d\"),this};var dr=y.__private__.getLineHeight=y.getLineHeight=function(){return fe*ur};y.__private__.getLineHeight=y.getLineHeight=function(){return fe*ur};var fr=y.__private__.setLineHeightFactor=y.setLineHeightFactor=function(e){return\"number\"==typeof(e=e||1.15)&&(ur=e),this},hr=y.__private__.getLineHeightFactor=y.getLineHeightFactor=function(){return ur};fr(e.lineHeight);var pr=y.__private__.getHorizontalCoordinate=function(e){return k(e)},mr=y.__private__.getVerticalCoordinate=function(e){return _===j.ADVANCED?e:Pe[J].mediaBox.topRightY-Pe[J].mediaBox.bottomLeftY-k(e)},gr=y.__private__.getHorizontalCoordinateString=y.getHorizontalCoordinateString=function(e){return N(pr(e))},yr=y.__private__.getVerticalCoordinateString=y.getVerticalCoordinateString=function(e){return N(mr(e))},vr=e.strokeColor||\"0 G\";y.__private__.getStrokeColor=y.getDrawColor=function(){return $e(vr)},y.__private__.setStrokeColor=y.setDrawColor=function(e,t,r,n){return vr=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"draw\",precision:2}),ue(vr),this};var wr=e.fillColor||\"0 g\";y.__private__.getFillColor=y.getFillColor=function(){return $e(wr)},y.__private__.setFillColor=y.setFillColor=function(e,t,r,n){return wr=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"fill\",precision:2}),ue(wr),this};var br=e.textColor||\"0 g\",Br=y.__private__.getTextColor=y.getTextColor=function(){return $e(br)};y.__private__.setTextColor=y.setTextColor=function(e,t,r,n){return br=et({ch1:e,ch2:t,ch3:r,ch4:n,pdfColorType:\"text\",precision:3}),this};var jr=e.charSpace,_r=y.__private__.getCharSpace=y.getCharSpace=function(){return parseFloat(jr||0)};y.__private__.setCharSpace=y.setCharSpace=function(e){if(isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.setCharSpace\");return jr=e,this};var Cr=0;y.CapJoinStyles={0:0,butt:0,but:0,miter:0,1:1,round:1,rounded:1,circle:1,2:2,projecting:2,project:2,square:2,bevel:2},y.__private__.setLineCap=y.setLineCap=function(e){var t=y.CapJoinStyles[e];if(void 0===t)throw new Error(\"Line cap style of '\"+e+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return Cr=t,ue(t+\" J\"),this};var xr=0;y.__private__.setLineJoin=y.setLineJoin=function(e){var t=y.CapJoinStyles[e];if(void 0===t)throw new Error(\"Line join style of '\"+e+\"' is not recognized. See or extend .CapJoinStyles property for valid styles\");return xr=t,ue(t+\" j\"),this},y.__private__.setLineMiterLimit=y.__private__.setMiterLimit=y.setLineMiterLimit=y.setMiterLimit=function(e){if(e=e||0,isNaN(e))throw new Error(\"Invalid argument passed to jsPDF.setLineMiterLimit\");return ue(N(k(e))+\" M\"),this},y.GState=U,y.setGState=function(e){(e=\"string\"==typeof e?Le[Te[e]]:Er(null,e)).equals(He)||(ue(\"\u002F\"+e.id+\" gs\"),He=e)};var Er=function(e,t){if(!e||!Te[e]){var r=!1;for(var n in Le)if(Le.hasOwnProperty(n)&&Le[n].equals(t)){r=!0;break}if(r)t=Le[n];else{var o=\"GS\"+(Object.keys(Le).length+1).toString(10);Le[o]=t,t.id=o}return e&&(Te[e]=t.id),Oe.publish(\"addGState\",t),t}};y.addGState=function(e,t){return Er(e,t),this},y.saveGraphicsState=function(){return ue(\"q\"),Fe.push({key:je,size:fe,color:br}),this},y.restoreGraphicsState=function(){ue(\"Q\");var e=Fe.pop();return je=e.key,fe=e.size,br=e.color,He=null,this},y.setCurrentTransformationMatrix=function(e){return ue(e.toString()+\" cm\"),this},y.comment=function(e){return ue(\"#\"+e),this};var Nr=function(e,t){var r=e||0;Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return r},set:function(e){isNaN(e)||(r=parseFloat(e))}});var n=t||0;Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return n},set:function(e){isNaN(e)||(n=parseFloat(e))}});var o=\"pt\";return Object.defineProperty(this,\"type\",{enumerable:!0,get:function(){return o},set:function(e){o=e.toString()}}),this},Qr=function(e,t,r,n){Nr.call(this,e,t),this.type=\"rect\";var o=r||0;Object.defineProperty(this,\"w\",{enumerable:!0,get:function(){return o},set:function(e){isNaN(e)||(o=parseFloat(e))}});var s=n||0;return Object.defineProperty(this,\"h\",{enumerable:!0,get:function(){return s},set:function(e){isNaN(e)||(s=parseFloat(e))}}),this},Fr=function(){this.page=Ie,this.currentPage=J,this.pages=oe.slice(0),this.pagesContext=Pe.slice(0),this.x=Ce,this.y=xe,this.matrix=Ee,this.width=Tr(J),this.height=Ir(J),this.outputDestination=ie,this.id=\"\",this.objectNumber=-1};Fr.prototype.restore=function(){Ie=this.page,J=this.currentPage,Pe=this.pagesContext,oe=this.pages,Ce=this.x,xe=this.y,Ee=this.matrix,Hr(J,this.width),Pr(J,this.height),ie=this.outputDestination};var Ur=function(e,t,r,n,o){De.push(new Fr),Ie=J=0,oe=[],Ce=e,xe=t,Ee=o,Ft([r,n])},Sr=function(e){if(!Me[e]){var t=new Fr,r=\"Xo\"+(Object.keys(Re).length+1).toString(10);t.id=r,Me[e]=r,Re[r]=t,Oe.publish(\"addFormObject\",t),De.pop().restore()}};for(var Lr in y.beginFormObject=function(e,t,r,n,o){return Ur(e,t,r,n,o),this},y.endFormObject=function(e){return Sr(e),this},y.doFormObject=function(e,t){var r=Re[Me[e]];return ue(\"q\"),ue(t.toString()+\" cm\"),ue(\"\u002F\"+r.id+\" Do\"),ue(\"Q\"),this},y.getFormObject=function(e){var t=Re[Me[e]];return{x:t.x,y:t.y,width:t.width,height:t.height,matrix:t.matrix}},y.save=function(e,t){return e=e||\"generated.pdf\",(t=t||{}).returnPromise=t.returnPromise||!1,!1===t.returnPromise?(d(Dt(Mt()),e),\"function\"==typeof d.unload&&o.setTimeout&&setTimeout(d.unload,911),this):new Promise((function(t,r){try{var n=d(Dt(Mt()),e);\"function\"==typeof d.unload&&o.setTimeout&&setTimeout(d.unload,911),t(n)}catch(e){r(e.message)}}))},H.API)H.API.hasOwnProperty(Lr)&&(\"events\"===Lr&&H.API.events.length?function(e,t){var r,n,o;for(o=t.length-1;-1!==o;o--)r=t[o][0],n=t[o][1],e.subscribe.apply(e,[r].concat(\"function\"==typeof n?[n]:n))}(Oe,H.API.events):y[Lr]=H.API[Lr]);var Tr=y.getPageWidth=function(e){return(Pe[e=e||J].mediaBox.topRightX-Pe[e].mediaBox.bottomLeftX)\u002F_e},Hr=y.setPageWidth=function(e,t){Pe[e].mediaBox.topRightX=t*_e+Pe[e].mediaBox.bottomLeftX},Ir=y.getPageHeight=function(e){return(Pe[e=e||J].mediaBox.topRightY-Pe[e].mediaBox.bottomLeftY)\u002F_e},Pr=y.setPageHeight=function(e,t){Pe[e].mediaBox.topRightY=t*_e+Pe[e].mediaBox.bottomLeftY};return y.internal={pdfEscape:Qt,getStyle:Zt,getFont:Ar,getFontSize:pe,getCharSpace:_r,getTextColor:Br,getLineHeight:dr,getLineHeightFactor:hr,write:ce,getHorizontalCoordinate:pr,getVerticalCoordinate:mr,getCoordinateString:gr,getVerticalCoordinateString:yr,collections:{},newObject:Ge,newAdditionalObject:Je,newObjectDeferred:Xe,newObjectDeferredBegin:We,getFilters:tt,putStream:rt,events:Oe,scaleFactor:_e,pageSize:{getWidth:function(){return Tr(J)},setWidth:function(e){Hr(J,e)},getHeight:function(){return Ir(J)},setHeight:function(e){Pr(J,e)}},encryptionOptions:p,encryption:Vt,getEncryptor:qt,output:Kt,getNumberOfPages:Tt,pages:oe,out:ue,f2:P,f3:O,getPageInfo:Gt,getPageInfoByObjId:Xt,getCurrentPageInfo:Wt,getPDFVersion:w,Point:Nr,Rectangle:Qr,Matrix:Ke,hasHotfix:zt},Object.defineProperty(y.internal.pageSize,\"width\",{get:function(){return Tr(J)},set:function(e){Hr(J,e)},enumerable:!0,configurable:!0}),Object.defineProperty(y.internal.pageSize,\"height\",{get:function(){return Ir(J)},set:function(e){Pr(J,e)},enumerable:!0,configurable:!0}),xt.call(y,de),je=\"F1\",Ut(s,r),Oe.publish(\"initialized\"),y}Q.prototype.lsbFirstWord=function(e){return String.fromCharCode(e>>0&255,e>>8&255,e>>16&255,e>>24&255)},Q.prototype.toHexString=function(e){return e.split(\"\").map((function(e){return(\"0\"+(255&e.charCodeAt(0)).toString(16)).slice(-2)})).join(\"\")},Q.prototype.hexToBytes=function(e){for(var t=[],r=0;r\u003Ce.length;r+=2)t.push(String.fromCharCode(parseInt(e.substr(r,2),16)));return t.join(\"\")},Q.prototype.processOwnerPassword=function(e,t){return E(C(t).substr(0,5),e)},Q.prototype.encryptor=function(e,t){let r=C(this.encryptionKey+String.fromCharCode(255&e,e>>8&255,e>>16&255,255&t,t>>8&255)).substr(0,10);return function(e){return E(r,e)}},U.prototype.equals=function(e){var t,r=\"id,objectNumber,equals\";if(!e||typeof e!=typeof this)return!1;var n=0;for(t in this)if(!(r.indexOf(t)>=0)){if(this.hasOwnProperty(t)&&!e.hasOwnProperty(t))return!1;if(this[t]!==e[t])return!1;n++}for(t in e)e.hasOwnProperty(t)&&r.indexOf(t)\u003C0&&n--;return 0===n},H.API={events:[]},H.version=\"2.3.1\";var I=H.API,P=1,O=function(e){return e.replace(\u002F\\\\\u002Fg,\"\\\\\\\\\").replace(\u002F\\(\u002Fg,\"\\\\(\").replace(\u002F\\)\u002Fg,\"\\\\)\")},k=function(e){return e.replace(\u002F\\\\\\\\\u002Fg,\"\\\\\").replace(\u002F\\\\\\(\u002Fg,\"(\").replace(\u002F\\\\\\)\u002Fg,\")\")},R=function(e){return e.toFixed(2)},M=function(e){return e.toFixed(5)};I.__acroform__={};var D=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e},K=function(e){return e*P},z=function(e){var t=new ie,r=we.internal.getHeight(e)||0,n=we.internal.getWidth(e)||0;return t.BBox=[0,0,Number(R(n)),Number(R(r))],t},V=I.__acroform__.setBit=function(e,t){if(e=e||0,t=t||0,isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBit\");return e|1\u003C\u003Ct},q=I.__acroform__.clearBit=function(e,t){if(e=e||0,t=t||0,isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBit\");return e&~(1\u003C\u003Ct)},G=I.__acroform__.getBit=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBit\");return 0==(e&1\u003C\u003Ct)?0:1},X=I.__acroform__.getBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.getBitForPdf\");return G(e,t-1)},W=I.__acroform__.setBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.setBitForPdf\");return V(e,t-1)},J=I.__acroform__.clearBitForPdf=function(e,t){if(isNaN(e)||isNaN(t))throw new Error(\"Invalid arguments passed to jsPDF.API.__acroform__.clearBitForPdf\");return q(e,t-1)},Y=I.__acroform__.calculateCoordinates=function(e,t){var r=t.internal.getHorizontalCoordinate,n=t.internal.getVerticalCoordinate,o=e[0],s=e[1],i=e[2],a=e[3],A={};return A.lowerLeft_X=r(o)||0,A.lowerLeft_Y=n(s+a)||0,A.upperRight_X=r(o+i)||0,A.upperRight_Y=n(s)||0,[Number(R(A.lowerLeft_X)),Number(R(A.lowerLeft_Y)),Number(R(A.upperRight_X)),Number(R(A.upperRight_Y))]},Z=function(e){if(e.appearanceStreamContent)return e.appearanceStreamContent;if(e.V||e.DV){var t=[],r=e._V||e.DV,n=$(e,r),o=e.scope.internal.getFont(e.fontName,e.fontStyle).id;t.push(\"\u002FTx BMC\"),t.push(\"q\"),t.push(\"BT\"),t.push(e.scope.__private__.encodeColorString(e.color)),t.push(\"\u002F\"+o+\" \"+R(n.fontSize)+\" Tf\"),t.push(\"1 0 0 1 0 0 Tm\"),t.push(n.text),t.push(\"ET\"),t.push(\"Q\"),t.push(\"EMC\");var s=z(e);return s.scope=e.scope,s.stream=t.join(\"\\n\"),s}},$=function(e,t){var r=0===e.fontSize?e.maxFontSize:e.fontSize,n={text:\"\",fontSize:\"\"},o=(t=\")\"==(t=\"(\"==t.substr(0,1)?t.substr(1):t).substr(t.length-1)?t.substr(0,t.length-1):t).split(\" \"),s=r,i=we.internal.getHeight(e)||0;i=i\u003C0?-i:i;var a=we.internal.getWidth(e)||0;a=a\u003C0?-a:a;var A=function(t,r,n){if(t+1\u003Co.length){var s=r+\" \"+o[t+1];return ee(s,e,n).width\u003C=a-4}return!1};s++;e:for(;s>0;){t=\"\",s--;var u,c,l=ee(\"3\",e,s).height,d=e.multiline?i-s:(i-l)\u002F2,f=d+=2,h=0,p=0;if(s\u003C=0){t=\"(...) Tj\\n\",t+=\"% Width of Text: \"+ee(t,e,s=12).width+\", FieldWidth:\"+a+\"\\n\";break}var m=\"\",g=0;for(var y in o)if(o.hasOwnProperty(y)){m=\" \"==(m+=o[y]+\" \").substr(m.length-1)?m.substr(0,m.length-1):m;var v=parseInt(y),w=A(v,m,s),b=y>=o.length-1;if(w&&!b){m+=\" \";continue}if(w||b){if(b)p=v;else if(e.multiline&&(l+2)*(g+2)+2>i)continue e}else{if(!e.multiline)continue e;if((l+2)*(g+2)+2>i)continue e;p=v}for(var B=\"\",j=h;j\u003C=p;j++)B+=o[j]+\" \";switch(B=\" \"==B.substr(B.length-1)?B.substr(0,B.length-1):B,c=ee(B,e,s).width,e.textAlign){case\"right\":u=a-c-2;break;case\"center\":u=(a-c)\u002F2;break;case\"left\":default:u=2}t+=R(u)+\" \"+R(f)+\" Td\\n\",t+=\"(\"+O(B)+\") Tj\\n\",t+=-R(u)+\" 0 Td\\n\",f=-(s+2),c=0,h=p+1,g++,m=\"\"}break}return n.text=t,n.fontSize=s,n},ee=function(e,t,r){var n=t.scope.internal.getFont(t.fontName,t.fontStyle),o=t.scope.getStringUnitWidth(e,{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r);return{height:t.scope.getStringUnitWidth(\"3\",{font:n,fontSize:parseFloat(r),charSpace:0})*parseFloat(r)*1.5,width:o}},te={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},re=function(e,t){var r={type:\"reference\",object:e};void 0===t.internal.getPageInfo(e.page).pageContext.annotations.find((function(e){return e.type===r.type&&e.object===r.object}))&&t.internal.getPageInfo(e.page).pageContext.annotations.push(r)},ne=I.__acroform__.arrayToPdfArray=function(e,t,r){var n=function(e){return e};if(Array.isArray(e)){for(var o=\"[\",s=0;s\u003Ce.length;s++)switch(0!==s&&(o+=\" \"),typeof e[s]){case\"boolean\":case\"number\":case\"object\":o+=e[s].toString();break;case\"string\":\"\u002F\"!==e[s].substr(0,1)?(void 0!==t&&r&&(n=r.internal.getEncryptor(t)),o+=\"(\"+O(n(e[s].toString()))+\")\"):o+=e[s].toString()}return o+\"]\"}throw new Error(\"Invalid argument passed to jsPDF.__acroform__.arrayToPdfArray\")},oe=function(e,t,r){var n=function(e){return e};return void 0!==t&&r&&(n=r.internal.getEncryptor(t)),(e=e||\"\").toString(),\"(\"+O(n(e))+\")\"},se=function(){this._objId=void 0,this._scope=void 0,Object.defineProperty(this,\"objId\",{get:function(){if(void 0===this._objId){if(void 0===this.scope)return;this._objId=this.scope.internal.newObjectDeferred()}return this._objId},set:function(e){this._objId=e}}),Object.defineProperty(this,\"scope\",{value:this._scope,writable:!0})};se.prototype.toString=function(){return this.objId+\" 0 R\"},se.prototype.putStream=function(){var e=this.getKeyValueListForStream();this.scope.internal.putStream({data:this.stream,additionalKeyValues:e,objectId:this.objId}),this.scope.internal.out(\"endobj\")},se.prototype.getKeyValueListForStream=function(){var e=[],t=Object.getOwnPropertyNames(this).filter((function(e){return\"content\"!=e&&\"appearanceStreamContent\"!=e&&\"scope\"!=e&&\"objId\"!=e&&\"_\"!=e.substring(0,1)}));for(var r in t)if(!1===Object.getOwnPropertyDescriptor(this,t[r]).configurable){var n=t[r],o=this[n];o&&(Array.isArray(o)?e.push({key:n,value:ne(o,this.objId,this.scope)}):o instanceof se?(o.scope=this.scope,e.push({key:n,value:o.objId+\" 0 R\"})):\"function\"!=typeof o&&e.push({key:n,value:o}))}return e};var ie=function(){se.call(this),Object.defineProperty(this,\"Type\",{value:\"\u002FXObject\",configurable:!1,writable:!0}),Object.defineProperty(this,\"Subtype\",{value:\"\u002FForm\",configurable:!1,writable:!0}),Object.defineProperty(this,\"FormType\",{value:1,configurable:!1,writable:!0});var e,t=[];Object.defineProperty(this,\"BBox\",{configurable:!1,get:function(){return t},set:function(e){t=e}}),Object.defineProperty(this,\"Resources\",{value:\"2 0 R\",configurable:!1,writable:!0}),Object.defineProperty(this,\"stream\",{enumerable:!1,configurable:!0,set:function(t){e=t.trim()},get:function(){return e||null}})};D(ie,se);var ae=function(){se.call(this);var e,t=[];Object.defineProperty(this,\"Kids\",{enumerable:!1,configurable:!0,get:function(){return t.length>0?t:void 0}}),Object.defineProperty(this,\"Fields\",{enumerable:!1,configurable:!1,get:function(){return t}}),Object.defineProperty(this,\"DA\",{enumerable:!1,configurable:!1,get:function(){if(e){var t=function(e){return e};return this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),\"(\"+O(t(e))+\")\"}},set:function(t){e=t}})};D(ae,se);var Ae=function(){se.call(this);var e=4;Object.defineProperty(this,\"F\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){if(isNaN(t))throw new Error('Invalid value \"'+t+'\" for attribute F supplied.');e=t}}),Object.defineProperty(this,\"showWhenPrinted\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(e,3))},set:function(t){!0===Boolean(t)?this.F=W(e,3):this.F=J(e,3)}});var t=0;Object.defineProperty(this,\"Ff\",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){if(isNaN(e))throw new Error('Invalid value \"'+e+'\" for attribute Ff supplied.');t=e}});var r=[];Object.defineProperty(this,\"Rect\",{enumerable:!1,configurable:!1,get:function(){if(0!==r.length)return r},set:function(e){r=void 0!==e?e:[]}}),Object.defineProperty(this,\"x\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[0])?0:r[0]},set:function(e){r[0]=e}}),Object.defineProperty(this,\"y\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[1])?0:r[1]},set:function(e){r[1]=e}}),Object.defineProperty(this,\"width\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[2])?0:r[2]},set:function(e){r[2]=e}}),Object.defineProperty(this,\"height\",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[3])?0:r[3]},set:function(e){r[3]=e}});var n=\"\";Object.defineProperty(this,\"FT\",{enumerable:!0,configurable:!1,get:function(){return n},set:function(e){switch(e){case\"\u002FBtn\":case\"\u002FTx\":case\"\u002FCh\":case\"\u002FSig\":n=e;break;default:throw new Error('Invalid value \"'+e+'\" for attribute FT supplied.')}}});var o=null;Object.defineProperty(this,\"T\",{enumerable:!0,configurable:!1,get:function(){if(!o||o.length\u003C1){if(this instanceof me)return;o=\"FieldObject\"+Ae.FieldNum++}var e=function(e){return e};return this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),\"(\"+O(e(o))+\")\"},set:function(e){o=e.toString()}}),Object.defineProperty(this,\"fieldName\",{configurable:!0,enumerable:!0,get:function(){return o},set:function(e){o=e}});var s=\"helvetica\";Object.defineProperty(this,\"fontName\",{enumerable:!0,configurable:!0,get:function(){return s},set:function(e){s=e}});var i=\"normal\";Object.defineProperty(this,\"fontStyle\",{enumerable:!0,configurable:!0,get:function(){return i},set:function(e){i=e}});var a=0;Object.defineProperty(this,\"fontSize\",{enumerable:!0,configurable:!0,get:function(){return a},set:function(e){a=e}});var A=void 0;Object.defineProperty(this,\"maxFontSize\",{enumerable:!0,configurable:!0,get:function(){return void 0===A?50\u002FP:A},set:function(e){A=e}});var u=\"black\";Object.defineProperty(this,\"color\",{enumerable:!0,configurable:!0,get:function(){return u},set:function(e){u=e}});var c=\"\u002FF1 0 Tf 0 g\";Object.defineProperty(this,\"DA\",{enumerable:!0,configurable:!1,get:function(){if(!(!c||this instanceof me||this instanceof ye))return oe(c,this.objId,this.scope)},set:function(e){e=e.toString(),c=e}});var l=null;Object.defineProperty(this,\"DV\",{enumerable:!1,configurable:!1,get:function(){if(l)return this instanceof fe==0?oe(l,this.objId,this.scope):l},set:function(e){e=e.toString(),l=this instanceof fe==0?\"(\"===e.substr(0,1)?k(e.substr(1,e.length-2)):k(e):e}}),Object.defineProperty(this,\"defaultValue\",{enumerable:!0,configurable:!0,get:function(){return this instanceof fe==1?k(l.substr(1,l.length-1)):l},set:function(e){e=e.toString(),l=this instanceof fe==1?\"\u002F\"+e:e}});var d=null;Object.defineProperty(this,\"_V\",{enumerable:!1,configurable:!1,get:function(){if(d)return d},set:function(e){this.V=e}}),Object.defineProperty(this,\"V\",{enumerable:!1,configurable:!1,get:function(){if(d)return this instanceof fe==0?oe(d,this.objId,this.scope):d},set:function(e){e=e.toString(),d=this instanceof fe==0?\"(\"===e.substr(0,1)?k(e.substr(1,e.length-2)):k(e):e}}),Object.defineProperty(this,\"value\",{enumerable:!0,configurable:!0,get:function(){return this instanceof fe==1?k(d.substr(1,d.length-1)):d},set:function(e){e=e.toString(),d=this instanceof fe==1?\"\u002F\"+e:e}}),Object.defineProperty(this,\"hasAnnotation\",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,\"Type\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"\u002FAnnot\":null}}),Object.defineProperty(this,\"Subtype\",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?\"\u002FWidget\":null}});var f,h=!1;Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return h},set:function(e){e=Boolean(e),h=e}}),Object.defineProperty(this,\"page\",{enumerable:!0,configurable:!0,get:function(){if(f)return f},set:function(e){f=e}}),Object.defineProperty(this,\"readOnly\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,1))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,1):this.Ff=J(this.Ff,1)}}),Object.defineProperty(this,\"required\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,2))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,2):this.Ff=J(this.Ff,2)}}),Object.defineProperty(this,\"noExport\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,3))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,3):this.Ff=J(this.Ff,3)}});var p=null;Object.defineProperty(this,\"Q\",{enumerable:!0,configurable:!1,get:function(){if(null!==p)return p},set:function(e){if(-1===[0,1,2].indexOf(e))throw new Error('Invalid value \"'+e+'\" for attribute Q supplied.');p=e}}),Object.defineProperty(this,\"textAlign\",{get:function(){var e;switch(p){case 0:default:e=\"left\";break;case 1:e=\"center\";break;case 2:e=\"right\"}return e},configurable:!0,enumerable:!0,set:function(e){switch(e){case\"right\":case 2:p=2;break;case\"center\":case 1:p=1;break;case\"left\":case 0:default:p=0}}})};D(Ae,se);var ue=function(){Ae.call(this),this.FT=\"\u002FCh\",this.V=\"()\",this.fontName=\"zapfdingbats\";var e=0;Object.defineProperty(this,\"TI\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"topIndex\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){e=t}});var t=[];Object.defineProperty(this,\"Opt\",{enumerable:!0,configurable:!1,get:function(){return ne(t,this.objId,this.scope)},set:function(e){var r,n;n=[],\"string\"==typeof(r=e)&&(n=function(e,t,r){r||(r=1);for(var n,o=[];n=t.exec(e);)o.push(n[r]);return o}(r,\u002F\\((.*?)\\)\u002Fg)),t=n}}),this.getOptions=function(){return t},this.setOptions=function(e){t=e,this.sort&&t.sort()},this.addOption=function(e){e=(e=e||\"\").toString(),t.push(e),this.sort&&t.sort()},this.removeOption=function(e,r){for(r=r||!1,e=(e=e||\"\").toString();-1!==t.indexOf(e)&&(t.splice(t.indexOf(e),1),!1!==r););},Object.defineProperty(this,\"combo\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,18))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,18):this.Ff=J(this.Ff,18)}}),Object.defineProperty(this,\"edit\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,19))},set:function(e){!0===this.combo&&(!0===Boolean(e)?this.Ff=W(this.Ff,19):this.Ff=J(this.Ff,19))}}),Object.defineProperty(this,\"sort\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,20))},set:function(e){!0===Boolean(e)?(this.Ff=W(this.Ff,20),t.sort()):this.Ff=J(this.Ff,20)}}),Object.defineProperty(this,\"multiSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,22))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,22):this.Ff=J(this.Ff,22)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,23))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"commitOnSelChange\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,27))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,27):this.Ff=J(this.Ff,27)}}),this.hasAppearanceStream=!1};D(ue,Ae);var ce=function(){ue.call(this),this.fontName=\"helvetica\",this.combo=!1};D(ce,ue);var le=function(){ce.call(this),this.combo=!0};D(le,ce);var de=function(){le.call(this),this.edit=!0};D(de,le);var fe=function(){Ae.call(this),this.FT=\"\u002FBtn\",Object.defineProperty(this,\"noToggleToOff\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,15))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,15):this.Ff=J(this.Ff,15)}}),Object.defineProperty(this,\"radio\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,16))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,16):this.Ff=J(this.Ff,16)}}),Object.defineProperty(this,\"pushButton\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,17))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,17):this.Ff=J(this.Ff,17)}}),Object.defineProperty(this,\"radioIsUnison\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,26))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,26):this.Ff=J(this.Ff,26)}});var e,t={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};if(this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),0!==Object.keys(t).length){var r,n=[];for(r in n.push(\"\u003C\u003C\"),t)n.push(\"\u002F\"+r+\" (\"+O(e(t[r]))+\")\");return n.push(\">>\"),n.join(\"\\n\")}},set:function(e){\"object\"==typeof e&&(t=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return t.CA||\"\"},set:function(e){\"string\"==typeof e&&(t.CA=e)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=\"\u002F\"+t}})};D(fe,Ae);var he=function(){fe.call(this),this.pushButton=!0};D(he,fe);var pe=function(){fe.call(this),this.radio=!0,this.pushButton=!1;var e=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=void 0!==t?t:[]}})};D(pe,fe);var me=function(){var e,t;Ae.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return t},set:function(e){t=e}});var r,n={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};this.scope&&(e=this.scope.internal.getEncryptor(this.objId));var t,r=[];for(t in r.push(\"\u003C\u003C\"),n)r.push(\"\u002F\"+t+\" (\"+O(e(n[t]))+\")\");return r.push(\">>\"),r.join(\"\\n\")},set:function(e){\"object\"==typeof e&&(n=e)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return n.CA||\"\"},set:function(e){\"string\"==typeof e&&(n.CA=e)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(e){r=e}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return r.substr(1,r.length-1)},set:function(e){r=\"\u002F\"+e}}),this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=we.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};D(me,Ae),pe.prototype.setAppearance=function(e){if(!(\"createAppearanceStream\"in e)||!(\"getCA\"in e))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var t in this.Kids)if(this.Kids.hasOwnProperty(t)){var r=this.Kids[t];r.appearanceStreamContent=e.createAppearanceStream(r.optionName),r.caption=e.getCA()}},pe.prototype.createOption=function(e){var t=new me;return t.Parent=this,t.optionName=e,this.Kids.push(t),be.call(this.scope,t),t};var ge=function(){fe.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=we.CheckBox.createAppearanceStream()};D(ge,fe);var ye=function(){Ae.call(this),this.FT=\"\u002FTx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,13))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,13):this.Ff=J(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,21))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,21):this.Ff=J(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,23))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,23):this.Ff=J(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,24))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,24):this.Ff=J(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,25))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,25):this.Ff=J(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,26))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,26):this.Ff=J(this.Ff,26)}});var e=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){Number.isInteger(t)&&(e=t)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};D(ye,Ae);var ve=function(){ye.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(X(this.Ff,14))},set:function(e){!0===Boolean(e)?this.Ff=W(this.Ff,14):this.Ff=J(this.Ff,14)}}),this.password=!0};D(ve,ye);var we={CheckBox:{createAppearanceStream:function(){return{N:{On:we.CheckBox.YesNormal},D:{On:we.CheckBox.YesPushDown,Off:we.CheckBox.OffPushDown}}},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=e.scope.internal.getFont(e.fontName,e.fontStyle).id,o=e.scope.__private__.encodeColorString(e.color),s=$(e,e.caption);return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),r.push(\"BMC\"),r.push(\"q\"),r.push(\"0 0 1 rg\"),r.push(\"\u002F\"+n+\" \"+R(s.fontSize)+\" Tf \"+o),r.push(\"BT\"),r.push(s.text),r.push(\"ET\"),r.push(\"Q\"),r.push(\"EMC\"),t.stream=r.join(\"\\n\"),t},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=e.scope.internal.getFont(e.fontName,e.fontStyle).id,n=e.scope.__private__.encodeColorString(e.color),o=[],s=we.internal.getHeight(e),i=we.internal.getWidth(e),a=$(e,e.caption);return o.push(\"1 g\"),o.push(\"0 0 \"+R(i)+\" \"+R(s)+\" re\"),o.push(\"f\"),o.push(\"q\"),o.push(\"0 0 1 rg\"),o.push(\"0 0 \"+R(i-1)+\" \"+R(s-1)+\" re\"),o.push(\"W\"),o.push(\"n\"),o.push(\"0 g\"),o.push(\"BT\"),o.push(\"\u002F\"+r+\" \"+R(a.fontSize)+\" Tf \"+n),o.push(a.text),o.push(\"ET\"),o.push(\"Q\"),t.stream=o.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),t.stream=r.join(\"\\n\"),t}},RadioButton:{Circle:{createAppearanceStream:function(e){var t={D:{Off:we.RadioButton.Circle.OffPushDown},N:{}};return t.N[e]=we.RadioButton.Circle.YesNormal,t.D[e]=we.RadioButton.Circle.YesPushDown,t},getCA:function(){return\"l\"},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=we.internal.Bezier_C,s=Number((n*o).toFixed(5));return r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+s+\" \"+s+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+s+\" \"+n+\" -\"+n+\" \"+s+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+s+\" -\"+s+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(s+\" -\"+n+\" \"+n+\" -\"+s+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=Number((2*n).toFixed(5)),s=Number((o*we.internal.Bezier_C).toFixed(5)),i=Number((n*we.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(o+\" 0 m\"),r.push(o+\" \"+s+\" \"+s+\" \"+o+\" 0 \"+o+\" c\"),r.push(\"-\"+s+\" \"+o+\" -\"+o+\" \"+s+\" -\"+o+\" 0 c\"),r.push(\"-\"+o+\" -\"+s+\" -\"+s+\" -\"+o+\" 0 -\"+o+\" c\"),r.push(s+\" -\"+o+\" \"+o+\" -\"+s+\" \"+o+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),r.push(\"0 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(n+\" 0 m\"),r.push(n+\" \"+i+\" \"+i+\" \"+n+\" 0 \"+n+\" c\"),r.push(\"-\"+i+\" \"+n+\" -\"+n+\" \"+i+\" -\"+n+\" 0 c\"),r.push(\"-\"+n+\" -\"+i+\" -\"+i+\" -\"+n+\" 0 -\"+n+\" c\"),r.push(i+\" -\"+n+\" \"+n+\" -\"+i+\" \"+n+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.getWidth(e)\u003C=we.internal.getHeight(e)?we.internal.getWidth(e)\u002F4:we.internal.getHeight(e)\u002F4;n=Number((.9*n).toFixed(5));var o=Number((2*n).toFixed(5)),s=Number((o*we.internal.Bezier_C).toFixed(5));return r.push(\"0.749023 g\"),r.push(\"q\"),r.push(\"1 0 0 1 \"+M(we.internal.getWidth(e)\u002F2)+\" \"+M(we.internal.getHeight(e)\u002F2)+\" cm\"),r.push(o+\" 0 m\"),r.push(o+\" \"+s+\" \"+s+\" \"+o+\" 0 \"+o+\" c\"),r.push(\"-\"+s+\" \"+o+\" -\"+o+\" \"+s+\" -\"+o+\" 0 c\"),r.push(\"-\"+o+\" -\"+s+\" -\"+s+\" -\"+o+\" 0 -\"+o+\" c\"),r.push(s+\" -\"+o+\" \"+o+\" -\"+s+\" \"+o+\" 0 c\"),r.push(\"f\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t}},Cross:{createAppearanceStream:function(e){var t={D:{Off:we.RadioButton.Cross.OffPushDown},N:{}};return t.N[e]=we.RadioButton.Cross.YesNormal,t.D[e]=we.RadioButton.Cross.YesPushDown,t},getCA:function(){return\"8\"},YesNormal:function(e){var t=z(e);t.scope=e.scope;var r=[],n=we.internal.calculateCross(e);return r.push(\"q\"),r.push(\"1 1 \"+R(we.internal.getWidth(e)-2)+\" \"+R(we.internal.getHeight(e)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(R(n.x1.x)+\" \"+R(n.x1.y)+\" m\"),r.push(R(n.x2.x)+\" \"+R(n.x2.y)+\" l\"),r.push(R(n.x4.x)+\" \"+R(n.x4.y)+\" m\"),r.push(R(n.x3.x)+\" \"+R(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),t.stream=r.join(\"\\n\"),t},YesPushDown:function(e){var t=z(e);t.scope=e.scope;var r=we.internal.calculateCross(e),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),n.push(\"f\"),n.push(\"q\"),n.push(\"1 1 \"+R(we.internal.getWidth(e)-2)+\" \"+R(we.internal.getHeight(e)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(R(r.x1.x)+\" \"+R(r.x1.y)+\" m\"),n.push(R(r.x2.x)+\" \"+R(r.x2.y)+\" l\"),n.push(R(r.x4.x)+\" \"+R(r.x4.y)+\" m\"),n.push(R(r.x3.x)+\" \"+R(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),t.stream=n.join(\"\\n\"),t},OffPushDown:function(e){var t=z(e);t.scope=e.scope;var r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+R(we.internal.getWidth(e))+\" \"+R(we.internal.getHeight(e))+\" re\"),r.push(\"f\"),t.stream=r.join(\"\\n\"),t}}},createDefaultAppearanceStream:function(e){var t=e.scope.internal.getFont(e.fontName,e.fontStyle).id,r=e.scope.__private__.encodeColorString(e.color);return\"\u002F\"+t+\" \"+e.fontSize+\" Tf \"+r}};we.internal={Bezier_C:.551915024494,calculateCross:function(e){var t=we.internal.getWidth(e),r=we.internal.getHeight(e),n=Math.min(t,r);return{x1:{x:(t-n)\u002F2,y:(r-n)\u002F2+n},x2:{x:(t-n)\u002F2+n,y:(r-n)\u002F2},x3:{x:(t-n)\u002F2,y:(r-n)\u002F2},x4:{x:(t-n)\u002F2+n,y:(r-n)\u002F2+n}}}},we.internal.getWidth=function(e){var t=0;return\"object\"==typeof e&&(t=K(e.Rect[2])),t},we.internal.getHeight=function(e){var t=0;return\"object\"==typeof e&&(t=K(e.Rect[3])),t};var be=I.addField=function(e){if(function(e,t){if(t.scope=e,void 0!==e.internal&&(void 0===e.internal.acroformPlugin||!1===e.internal.acroformPlugin.isInitialized)){if(Ae.FieldNum=0,e.internal.acroformPlugin=JSON.parse(JSON.stringify(te)),e.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");P=e.internal.scaleFactor,e.internal.acroformPlugin.acroFormDictionaryRoot=new ae,e.internal.acroformPlugin.acroFormDictionaryRoot.scope=e,e.internal.acroformPlugin.acroFormDictionaryRoot._eventID=e.internal.events.subscribe(\"postPutResources\",(function(){!function(e){e.internal.events.unsubscribe(e.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete e.internal.acroformPlugin.acroFormDictionaryRoot._eventID,e.internal.acroformPlugin.printedOut=!0}(e)})),e.internal.events.subscribe(\"buildDocument\",(function(){!function(e){e.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var t=e.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var r in t)if(t.hasOwnProperty(r)){var n=t[r];n.objId=void 0,n.hasAnnotation&&re(n,e)}}(e)})),e.internal.events.subscribe(\"putCatalog\",(function(){!function(e){if(void 0===e.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");e.internal.write(\"\u002FAcroForm \"+e.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")}(e)})),e.internal.events.subscribe(\"postPutPages\",(function(t){!function(e,t){var r=!e;for(var n in e||(t.internal.newObjectDeferredBegin(t.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),t.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),e=e||t.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(e.hasOwnProperty(n)){var o=e[n],s=[],i=o.Rect;if(o.Rect&&(o.Rect=Y(o.Rect,t)),t.internal.newObjectDeferredBegin(o.objId,!0),o.DA=we.createDefaultAppearanceStream(o),\"object\"==typeof o&&\"function\"==typeof o.getKeyValueListForStream&&(s=o.getKeyValueListForStream()),o.Rect=i,o.hasAppearanceStream&&!o.appearanceStreamContent){var a=Z(o);s.push({key:\"AP\",value:\"\u003C\u003C\u002FN \"+a+\">>\"}),t.internal.acroformPlugin.xForms.push(a)}if(o.appearanceStreamContent){var A=\"\";for(var u in o.appearanceStreamContent)if(o.appearanceStreamContent.hasOwnProperty(u)){var c=o.appearanceStreamContent[u];if(A+=\"\u002F\"+u+\" \",A+=\"\u003C\u003C\",Object.keys(c).length>=1||Array.isArray(c)){for(var n in c)if(c.hasOwnProperty(n)){var l=c[n];\"function\"==typeof l&&(l=l.call(t,o)),A+=\"\u002F\"+n+\" \"+l+\" \",t.internal.acroformPlugin.xForms.indexOf(l)>=0||t.internal.acroformPlugin.xForms.push(l)}}else\"function\"==typeof(l=c)&&(l=l.call(t,o)),A+=\"\u002F\"+n+\" \"+l,t.internal.acroformPlugin.xForms.indexOf(l)>=0||t.internal.acroformPlugin.xForms.push(l);A+=\">>\"}s.push({key:\"AP\",value:\"\u003C\u003C\\n\"+A+\">>\"})}t.internal.putStream({additionalKeyValues:s,objectId:o.objId}),t.internal.out(\"endobj\")}r&&function(e,t){for(var r in e)if(e.hasOwnProperty(r)){var n=r,o=e[r];t.internal.newObjectDeferredBegin(o.objId,!0),\"object\"==typeof o&&\"function\"==typeof o.putStream&&o.putStream(),delete e[n]}}(t.internal.acroformPlugin.xForms,t)}(t,e)})),e.internal.acroformPlugin.isInitialized=!0}}(this,e),!(e instanceof Ae))throw new Error(\"Invalid argument passed to jsPDF.addField.\");var t;return(t=e).scope.internal.acroformPlugin.printedOut&&(t.scope.internal.acroformPlugin.printedOut=!1,t.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),t.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t),e.page=e.scope.internal.getCurrentPageInfo().pageNumber,this};I.AcroFormChoiceField=ue,I.AcroFormListBox=ce,I.AcroFormComboBox=le,I.AcroFormEditBox=de,I.AcroFormButton=fe,I.AcroFormPushButton=he,I.AcroFormRadioButton=pe,I.AcroFormCheckBox=ge,I.AcroFormTextField=ye,I.AcroFormPasswordField=ve,I.AcroFormAppearance=we,I.AcroForm={ChoiceField:ue,ListBox:ce,ComboBox:le,EditBox:de,Button:fe,PushButton:he,RadioButton:pe,CheckBox:ge,TextField:ye,PasswordField:ve,Appearance:we},H.AcroForm={ChoiceField:ue,ListBox:ce,ComboBox:le,EditBox:de,Button:fe,PushButton:he,RadioButton:pe,CheckBox:ge,TextField:ye,PasswordField:ve,Appearance:we};var Be,je,_e=H.AcroForm;function Ce(e){return e.reduce((function(e,t,r){return e[t]=r,e}),{})}!function(e){e.__addimage__={};var t=\"UNKNOWN\",r={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},n=e.__addimage__.getImageFileTypeByImageData=function(e,n){var o,s;n=n||t;var i,a,A,u=t;if(_(e))for(A in r)for(i=r[A],o=0;o\u003Ci.length;o+=1){for(a=!0,s=0;s\u003Ci[o].length;s+=1)if(void 0!==i[o][s]&&i[o][s]!==e[s]){a=!1;break}if(!0===a){u=A;break}}else for(A in r)for(i=r[A],o=0;o\u003Ci.length;o+=1){for(a=!0,s=0;s\u003Ci[o].length;s+=1)if(void 0!==i[o][s]&&i[o][s]!==e.charCodeAt(s)){a=!1;break}if(!0===a){u=A;break}}return u===t&&n!==t&&(u=n),u},o=function(e){for(var t=this.internal.write,r=this.internal.putStream,n=(0,this.internal.getFilters)();-1!==n.indexOf(\"FlateEncode\");)n.splice(n.indexOf(\"FlateEncode\"),1);e.objectId=this.internal.newObject();var s=[];if(s.push({key:\"Type\",value:\"\u002FXObject\"}),s.push({key:\"Subtype\",value:\"\u002FImage\"}),s.push({key:\"Width\",value:e.width}),s.push({key:\"Height\",value:e.height}),e.colorSpace===y.INDEXED?s.push({key:\"ColorSpace\",value:\"[\u002FIndexed \u002FDeviceRGB \"+(e.palette.length\u002F3-1)+\" \"+(\"sMask\"in e&&void 0!==e.sMask?e.objectId+2:e.objectId+1)+\" 0 R]\"}):(s.push({key:\"ColorSpace\",value:\"\u002F\"+e.colorSpace}),e.colorSpace===y.DEVICE_CMYK&&s.push({key:\"Decode\",value:\"[1 0 1 0 1 0 1 0]\"})),s.push({key:\"BitsPerComponent\",value:e.bitsPerComponent}),\"decodeParameters\"in e&&void 0!==e.decodeParameters&&s.push({key:\"DecodeParms\",value:\"\u003C\u003C\"+e.decodeParameters+\">>\"}),\"transparency\"in e&&Array.isArray(e.transparency)){for(var i=\"\",a=0,A=e.transparency.length;a\u003CA;a++)i+=e.transparency[a]+\" \"+e.transparency[a]+\" \";s.push({key:\"Mask\",value:\"[\"+i+\"]\"})}void 0!==e.sMask&&s.push({key:\"SMask\",value:e.objectId+1+\" 0 R\"});var u=void 0!==e.filter?[\"\u002F\"+e.filter]:void 0;if(r({data:e.data,additionalKeyValues:s,alreadyAppliedFilters:u,objectId:e.objectId}),t(\"endobj\"),\"sMask\"in e&&void 0!==e.sMask){var c=\"\u002FPredictor \"+e.predictor+\" \u002FColors 1 \u002FBitsPerComponent \"+e.bitsPerComponent+\" \u002FColumns \"+e.width,l={width:e.width,height:e.height,colorSpace:\"DeviceGray\",bitsPerComponent:e.bitsPerComponent,decodeParameters:c,data:e.sMask};\"filter\"in e&&(l.filter=e.filter),o.call(this,l)}if(e.colorSpace===y.INDEXED){var d=this.internal.newObject();r({data:x(new Uint8Array(e.palette)),objectId:d}),t(\"endobj\")}},s=function(){var e=this.internal.collections.addImage_images;for(var t in e)o.call(this,e[t])},i=function(){var e,t=this.internal.collections.addImage_images,r=this.internal.write;for(var n in t)r(\"\u002FI\"+(e=t[n]).index,e.objectId,\"0\",\"R\")},a=function(){this.internal.collections.addImage_images||(this.internal.collections.addImage_images={},this.internal.events.subscribe(\"putResources\",s),this.internal.events.subscribe(\"putXobjectDict\",i))},A=function(){var e=this.internal.collections.addImage_images;return a.call(this),e},u=function(){return Object.keys(this.internal.collections.addImage_images).length},d=function(t){return\"function\"==typeof e[\"process\"+t.toUpperCase()]},f=function(e){return\"object\"==typeof e&&1===e.nodeType},h=function(t,r){if(\"IMG\"===t.nodeName&&t.hasAttribute(\"src\")){var n=\"\"+t.getAttribute(\"src\");if(0===n.indexOf(\"data:image\u002F\"))return c(unescape(n).split(\"base64,\").pop());var o=e.loadFile(n,!0);if(void 0!==o)return o}if(\"CANVAS\"===t.nodeName){var s;switch(r){case\"PNG\":s=\"image\u002Fpng\";break;case\"WEBP\":s=\"image\u002Fwebp\";break;case\"JPEG\":case\"JPG\":default:s=\"image\u002Fjpeg\"}return c(t.toDataURL(s,1).split(\"base64,\").pop())}},p=function(e){var t=this.internal.collections.addImage_images;if(t)for(var r in t)if(e===t[r].alias)return t[r]},m=function(e,t,r){return e||t||(e=-96,t=-96),e\u003C0&&(e=-1*r.width*72\u002Fe\u002Fthis.internal.scaleFactor),t\u003C0&&(t=-1*r.height*72\u002Ft\u002Fthis.internal.scaleFactor),0===e&&(e=t*r.width\u002Fr.height),0===t&&(t=e*r.height\u002Fr.width),[e,t]},g=function(e,t,r,n,o,s){var i=m.call(this,r,n,o),a=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString,c=A.call(this);if(r=i[0],n=i[1],c[o.index]=o,s){s*=Math.PI\u002F180;var l=Math.cos(s),d=Math.sin(s),f=function(e){return e.toFixed(4)},h=[f(l),f(d),f(-1*d),f(l),0,0,\"cm\"]}this.internal.write(\"q\"),s?(this.internal.write([1,\"0\",\"0\",1,a(e),u(t+n),\"cm\"].join(\" \")),this.internal.write(h.join(\" \")),this.internal.write([a(r),\"0\",\"0\",a(n),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([a(r),\"0\",\"0\",a(n),a(e),u(t+n),\"cm\"].join(\" \")),this.isAdvancedAPI()&&this.internal.write([1,0,0,-1,0,0,\"cm\"].join(\" \")),this.internal.write(\"\u002FI\"+o.index+\" Do\"),this.internal.write(\"Q\")},y=e.color_spaces={DEVICE_RGB:\"DeviceRGB\",DEVICE_GRAY:\"DeviceGray\",DEVICE_CMYK:\"DeviceCMYK\",CAL_GREY:\"CalGray\",CAL_RGB:\"CalRGB\",LAB:\"Lab\",ICC_BASED:\"ICCBased\",INDEXED:\"Indexed\",PATTERN:\"Pattern\",SEPARATION:\"Separation\",DEVICE_N:\"DeviceN\"};e.decode={DCT_DECODE:\"DCTDecode\",FLATE_DECODE:\"FlateDecode\",LZW_DECODE:\"LZWDecode\",JPX_DECODE:\"JPXDecode\",JBIG2_DECODE:\"JBIG2Decode\",ASCII85_DECODE:\"ASCII85Decode\",ASCII_HEX_DECODE:\"ASCIIHexDecode\",RUN_LENGTH_DECODE:\"RunLengthDecode\",CCITT_FAX_DECODE:\"CCITTFaxDecode\"};var v=e.image_compression={NONE:\"NONE\",FAST:\"FAST\",MEDIUM:\"MEDIUM\",SLOW:\"SLOW\"},w=e.__addimage__.sHashCode=function(e){var t,r,n=0;if(\"string\"==typeof e)for(r=e.length,t=0;t\u003Cr;t++)n=(n\u003C\u003C5)-n+e.charCodeAt(t),n|=0;else if(_(e))for(r=e.byteLength\u002F2,t=0;t\u003Cr;t++)n=(n\u003C\u003C5)-n+e[t],n|=0;return n},b=e.__addimage__.validateStringAsBase64=function(e){(e=e||\"\").toString().trim();var t=!0;return 0===e.length&&(t=!1),e.length%4!=0&&(t=!1),!1===\u002F^[A-Za-z0-9+\u002F]+$\u002F.test(e.substr(0,e.length-2))&&(t=!1),!1===\u002F^[A-Za-z0-9\u002F][A-Za-z0-9+\u002F]|[A-Za-z0-9+\u002F]=|==$\u002F.test(e.substr(-2))&&(t=!1),t},B=e.__addimage__.extractImageFromDataUrl=function(e){var t=(e=e||\"\").split(\"base64,\"),r=null;if(2===t.length){var n=\u002F^data:(\\w*\\\u002F\\w*);*(charset=(?!charset=)[\\w=-]*)*;*$\u002F.exec(t[0]);Array.isArray(n)&&(r={mimeType:n[1],charset:n[2],data:t[1]})}return r},j=e.__addimage__.supportsArrayBuffer=function(){return\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array};e.__addimage__.isArrayBuffer=function(e){return j()&&e instanceof ArrayBuffer};var _=e.__addimage__.isArrayBufferView=function(e){return j()&&\"undefined\"!=typeof Uint32Array&&(e instanceof Int8Array||e instanceof Uint8Array||\"undefined\"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)},C=e.__addimage__.binaryStringToUint8Array=function(e){for(var t=e.length,r=new Uint8Array(t),n=0;n\u003Ct;n++)r[n]=e.charCodeAt(n);return r},x=e.__addimage__.arrayBufferToBinaryString=function(e){try{return c(l(String.fromCharCode.apply(null,e)))}catch(t){if(\"undefined\"!=typeof Uint8Array&&void 0!==Uint8Array.prototype.reduce)return new Uint8Array(e).reduce((function(e,t){return e.push(String.fromCharCode(t)),e}),[]).join(\"\")}};e.addImage=function(){var e,r,n,o,s,i,A,u,c;if(\"number\"==typeof arguments[1]?(r=t,n=arguments[1],o=arguments[2],s=arguments[3],i=arguments[4],A=arguments[5],u=arguments[6],c=arguments[7]):(r=arguments[1],n=arguments[2],o=arguments[3],s=arguments[4],i=arguments[5],A=arguments[6],u=arguments[7],c=arguments[8]),\"object\"==typeof(e=arguments[0])&&!f(e)&&\"imageData\"in e){var l=e;e=l.imageData,r=l.format||r||t,n=l.x||n||0,o=l.y||o||0,s=l.w||l.width||s,i=l.h||l.height||i,A=l.alias||A,u=l.compression||u,c=l.rotation||l.angle||c}var d=this.internal.getFilters();if(void 0===u&&-1!==d.indexOf(\"FlateEncode\")&&(u=\"SLOW\"),isNaN(n)||isNaN(o))throw new Error(\"Invalid coordinates passed to jsPDF.addImage\");a.call(this);var h=E.call(this,e,r,A,u);return g.call(this,n,o,s,i,h,c),this};var E=function(r,o,s,i){var a,A,c;if(\"string\"==typeof r&&n(r)===t){r=unescape(r);var l=N(r,!1);(\"\"!==l||void 0!==(l=e.loadFile(r,!0)))&&(r=l)}if(f(r)&&(r=h(r,o)),o=n(r,o),!d(o))throw new Error(\"addImage does not support files of type '\"+o+\"', please ensure that a plugin for '\"+o+\"' support is added.\");if((null==(c=s)||0===c.length)&&(s=function(e){return\"string\"==typeof e||_(e)?w(e):null}(r)),(a=p.call(this,s))||(j()&&(r instanceof Uint8Array||(A=r,r=C(r))),a=this[\"process\"+o.toUpperCase()](r,u.call(this),s,function(t){return t&&\"string\"==typeof t&&(t=t.toUpperCase()),t in e.image_compression?t:v.NONE}(i),A)),!a)throw new Error(\"An unknown error occurred whilst processing the image.\");return a},N=e.__addimage__.convertBase64ToBinaryString=function(e,t){var r;t=\"boolean\"!=typeof t||t;var n,o=\"\";if(\"string\"==typeof e){n=null!==(r=B(e))?r.data:e;try{o=c(n)}catch(e){if(t)throw b(n)?new Error(\"atob-Error in jsPDF.convertBase64ToBinaryString \"+e.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertBase64ToBinaryString \")}}return o};e.getImageProperties=function(r){var o,s,i=\"\";if(f(r)&&(r=h(r)),\"string\"==typeof r&&n(r)===t&&(\"\"===(i=N(r,!1))&&(i=e.loadFile(r)||\"\"),r=i),s=n(r),!d(s))throw new Error(\"addImage does not support files of type '\"+s+\"', please ensure that a plugin for '\"+s+\"' support is added.\");if(!j()||r instanceof Uint8Array||(r=C(r)),!(o=this[\"process\"+s.toUpperCase()](r)))throw new Error(\"An unknown error occurred whilst processing the image\");return o.fileType=s,o}}(H.API),Be=H.API,je=function(e){if(void 0!==e&&\"\"!=e)return!0},H.API.events.push([\"addPage\",function(e){this.internal.getPageInfo(e.pageNumber).pageContext.annotations=[]}]),Be.events.push([\"putPage\",function(e){for(var t,r,n,o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString,i=this.internal.getPageInfoByObjId(e.objId),a=e.pageContext.annotations,A=!1,u=0;u\u003Ca.length&&!A;u++)switch((t=a[u]).type){case\"link\":(je(t.options.url)||je(t.options.pageNumber))&&(A=!0);break;case\"reference\":case\"text\":case\"freetext\":A=!0}if(0!=A){this.internal.write(\"\u002FAnnots [\");for(var c=0;c\u003Ca.length;c++){t=a[c];var l=this.internal.pdfEscape,d=this.internal.getEncryptor(e.objId);switch(t.type){case\"reference\":this.internal.write(\" \"+t.object.objId+\" 0 R \");break;case\"text\":var f=this.internal.newAdditionalObject(),h=this.internal.newAdditionalObject(),p=this.internal.getEncryptor(f.objId),m=t.title||\"Note\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FText \"+(r=\"\u002FRect [\"+o(t.bounds.x)+\" \"+s(t.bounds.y+t.bounds.h)+\" \"+o(t.bounds.x+t.bounds.w)+\" \"+s(t.bounds.y)+\"] \")+\"\u002FContents (\"+l(p(t.contents))+\")\",n+=\" \u002FPopup \"+h.objId+\" 0 R\",n+=\" \u002FP \"+i.objId+\" 0 R\",n+=\" \u002FT (\"+l(p(m))+\") >>\",f.content=n;var g=f.objId+\" 0 R\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FPopup \"+(r=\"\u002FRect [\"+o(t.bounds.x+30)+\" \"+s(t.bounds.y+t.bounds.h)+\" \"+o(t.bounds.x+t.bounds.w+30)+\" \"+s(t.bounds.y)+\"] \")+\" \u002FParent \"+g,t.open&&(n+=\" \u002FOpen true\"),n+=\" >>\",h.content=n,this.internal.write(f.objId,\"0 R\",h.objId,\"0 R\");break;case\"freetext\":r=\"\u002FRect [\"+o(t.bounds.x)+\" \"+s(t.bounds.y)+\" \"+o(t.bounds.x+t.bounds.w)+\" \"+s(t.bounds.y+t.bounds.h)+\"] \";var y=t.color||\"#000000\";n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FFreeText \"+r+\"\u002FContents (\"+l(d(t.contents))+\")\",n+=\" \u002FDS(font: Helvetica,sans-serif 12.0pt; text-align:left; color:#\"+y+\")\",n+=\" \u002FBorder [0 0 0]\",n+=\" >>\",this.internal.write(n);break;case\"link\":if(t.options.name){var v=this.annotations._nameMap[t.options.name];t.options.pageNumber=v.page,t.options.top=v.y}else t.options.top||(t.options.top=0);if(r=\"\u002FRect [\"+t.finalBounds.x+\" \"+t.finalBounds.y+\" \"+t.finalBounds.w+\" \"+t.finalBounds.h+\"] \",n=\"\",t.options.url)n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FLink \"+r+\"\u002FBorder [0 0 0] \u002FA \u003C\u003C\u002FS \u002FURI \u002FURI (\"+l(d(t.options.url))+\") >>\";else if(t.options.pageNumber)switch(n=\"\u003C\u003C\u002FType \u002FAnnot \u002FSubtype \u002FLink \"+r+\"\u002FBorder [0 0 0] \u002FDest [\"+this.internal.getPageInfo(t.options.pageNumber).objId+\" 0 R\",t.options.magFactor=t.options.magFactor||\"XYZ\",t.options.magFactor){case\"Fit\":n+=\" \u002FFit]\";break;case\"FitH\":n+=\" \u002FFitH \"+t.options.top+\"]\";break;case\"FitV\":t.options.left=t.options.left||0,n+=\" \u002FFitV \"+t.options.left+\"]\";break;case\"XYZ\":default:var w=s(t.options.top);t.options.left=t.options.left||0,void 0===t.options.zoom&&(t.options.zoom=0),n+=\" \u002FXYZ \"+t.options.left+\" \"+w+\" \"+t.options.zoom+\"]\"}\"\"!=n&&(n+=\" >>\",this.internal.write(n))}}this.internal.write(\"]\")}}]),Be.createAnnotation=function(e){var t=this.internal.getCurrentPageInfo();switch(e.type){case\"link\":this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case\"text\":case\"freetext\":t.pageContext.annotations.push(e)}},Be.link=function(e,t,r,n,o){var s=this.internal.getCurrentPageInfo(),i=this.internal.getCoordinateString,a=this.internal.getVerticalCoordinateString;s.pageContext.annotations.push({finalBounds:{x:i(e),y:a(t),w:i(e+r),h:a(t+n)},options:o,type:\"link\"})},Be.textWithLink=function(e,t,r,n){var o=this.getTextWidth(e),s=this.internal.getLineHeight()\u002Fthis.internal.scaleFactor;return this.text(e,t,r,n),r+=.2*s,\"center\"===n.align&&(t-=o\u002F2),\"right\"===n.align&&(t-=o),this.link(t,r-s,o,s,n),o},Be.getTextWidth=function(e){var t=this.internal.getFontSize();return this.getStringUnitWidth(e)*t\u002Fthis.internal.scaleFactor},function(e){var t={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},r={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},n={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},o=[1570,1571,1573,1575];e.__arabicParser__={};var s=e.__arabicParser__.isInArabicSubstitutionA=function(e){return void 0!==t[e.charCodeAt(0)]},i=e.__arabicParser__.isArabicLetter=function(e){return\"string\"==typeof e&&\u002F^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$\u002F.test(e)},a=e.__arabicParser__.isArabicEndLetter=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length\u003C=2},A=e.__arabicParser__.isArabicAlfLetter=function(e){return i(e)&&o.indexOf(e.charCodeAt(0))>=0};e.__arabicParser__.arabicLetterHasIsolatedForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=1};var u=e.__arabicParser__.arabicLetterHasFinalForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=2};e.__arabicParser__.arabicLetterHasInitialForm=function(e){return i(e)&&s(e)&&t[e.charCodeAt(0)].length>=3};var c=e.__arabicParser__.arabicLetterHasMedialForm=function(e){return i(e)&&s(e)&&4==t[e.charCodeAt(0)].length},l=e.__arabicParser__.resolveLigatures=function(e){var t=0,n=r,o=\"\",s=0;for(t=0;t\u003Ce.length;t+=1)void 0!==n[e.charCodeAt(t)]?(s++,\"number\"==typeof(n=n[e.charCodeAt(t)])&&(o+=String.fromCharCode(n),n=r,s=0),t===e.length-1&&(n=r,o+=e.charAt(t-(s-1)),t-=s-1,s=0)):(n=r,o+=e.charAt(t-s),t-=s,s=0);return o};e.__arabicParser__.isArabicDiacritic=function(e){return void 0!==e&&void 0!==n[e.charCodeAt(0)]};var d=e.__arabicParser__.getCorrectForm=function(e,t,r){return i(e)?!1===s(e)?-1:!u(e)||!i(t)&&!i(r)||!i(r)&&a(t)||a(e)&&!i(t)||a(e)&&A(t)||a(e)&&a(t)?0:c(e)&&i(t)&&!a(t)&&i(r)&&u(r)?3:a(e)||!i(r)?1:2:-1},f=function(e){var r=0,n=0,o=0,s=\"\",a=\"\",A=\"\",u=(e=e||\"\").split(\"\\\\s+\"),c=[];for(r=0;r\u003Cu.length;r+=1){for(c.push(\"\"),n=0;n\u003Cu[r].length;n+=1)s=u[r][n],a=u[r][n-1],A=u[r][n+1],i(s)?(o=d(s,a,A),c[r]+=-1!==o?String.fromCharCode(t[s.charCodeAt(0)][o]):s):c[r]+=s;c[r]=l(c[r])}return c.join(\" \")},h=e.__arabicParser__.processArabic=e.processArabic=function(){var e,t=\"string\"==typeof arguments[0]?arguments[0]:arguments[0].text,r=[];if(Array.isArray(t)){var n=0;for(r=[],n=0;n\u003Ct.length;n+=1)Array.isArray(t[n])?r.push([f(t[n][0]),t[n][1],t[n][2]]):r.push([f(t[n])]);e=r}else e=f(t);return\"string\"==typeof arguments[0]?e:(arguments[0].text=e,arguments[0])};e.events.push([\"preProcessText\",h])}(H.API),H.API.autoPrint=function(e){var t;switch((e=e||{}).variant=e.variant||\"non-conform\",e.variant){case\"javascript\":this.addJS(\"print({});\");break;case\"non-conform\":default:this.internal.events.subscribe(\"postPutResources\",(function(){t=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FS \u002FNamed\"),this.internal.out(\"\u002FType \u002FAction\"),this.internal.out(\"\u002FN \u002FPrint\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.out(\"\u002FOpenAction \"+t+\" 0 R\")}))}return this},function(e){var t=function(){var e=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return e},set:function(t){e=t}});var t=150;Object.defineProperty(this,\"width\",{get:function(){return t},set:function(e){t=isNaN(e)||!1===Number.isInteger(e)||e\u003C0?150:e,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=t+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(e){r=isNaN(e)||!1===Number.isInteger(e)||e\u003C0?300:e,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var n=[];Object.defineProperty(this,\"childNodes\",{get:function(){return n},set:function(e){n=e}});var o={};Object.defineProperty(this,\"style\",{get:function(){return o},set:function(e){o=e}}),Object.defineProperty(this,\"parentNode\",{})};t.prototype.getContext=function(e,t){var r;if(\"2d\"!==(e=e||\"2d\"))return null;for(r in t)this.pdf.context2d.hasOwnProperty(r)&&(this.pdf.context2d[r]=t[r]);return this.pdf.context2d._canvas=this,this.pdf.context2d},t.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},e.events.push([\"initialized\",function(){this.canvas=new t,this.canvas.pdf=this}])}(H.API),function(e){var t={left:0,top:0,bottom:0,right:0},r=!1,n=function(){void 0===this.internal.__cell__&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},t),this.internal.__cell__.margins.width=this.getPageWidth(),o.call(this))},o=function(){this.internal.__cell__.lastCell=new s,this.internal.__cell__.pages=1},s=function(){var e=arguments[0];Object.defineProperty(this,\"x\",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var t=arguments[1];Object.defineProperty(this,\"y\",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var r=arguments[2];Object.defineProperty(this,\"width\",{enumerable:!0,get:function(){return r},set:function(e){r=e}});var n=arguments[3];Object.defineProperty(this,\"height\",{enumerable:!0,get:function(){return n},set:function(e){n=e}});var o=arguments[4];Object.defineProperty(this,\"text\",{enumerable:!0,get:function(){return o},set:function(e){o=e}});var s=arguments[5];Object.defineProperty(this,\"lineNumber\",{enumerable:!0,get:function(){return s},set:function(e){s=e}});var i=arguments[6];return Object.defineProperty(this,\"align\",{enumerable:!0,get:function(){return i},set:function(e){i=e}}),this};s.prototype.clone=function(){return new s(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},s.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},e.setHeaderFunction=function(e){return n.call(this),this.internal.__cell__.headerFunction=\"function\"==typeof e?e:void 0,this},e.getTextDimensions=function(e,t){n.call(this);var r=(t=t||{}).fontSize||this.getFontSize(),o=t.font||this.getFont(),s=t.scaleFactor||this.internal.scaleFactor,i=0,a=0,A=0,u=this;if(!Array.isArray(e)&&\"string\"!=typeof e){if(\"number\"!=typeof e)throw new Error(\"getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.\");e=String(e)}const c=t.maxWidth;c>0?\"string\"==typeof e?e=this.splitTextToSize(e,c):\"[object Array]\"===Object.prototype.toString.call(e)&&(e=e.reduce((function(e,t){return e.concat(u.splitTextToSize(t,c))}),[])):e=Array.isArray(e)?e:[e];for(var l=0;l\u003Ce.length;l++)i\u003C(A=this.getStringUnitWidth(e[l],{font:o})*r)&&(i=A);return 0!==i&&(a=e.length),{w:i\u002F=s,h:Math.max((a*r*this.getLineHeightFactor()-r*(this.getLineHeightFactor()-1))\u002Fs,0)}},e.cellAddPage=function(){n.call(this),this.addPage();var e=this.internal.__cell__.margins||t;return this.internal.__cell__.lastCell=new s(e.left,e.top,void 0,void 0),this.internal.__cell__.pages+=1,this};var i=e.cell=function(){var e;e=arguments[0]instanceof s?arguments[0]:new s(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]),n.call(this);var o=this.internal.__cell__.lastCell,i=this.internal.__cell__.padding,a=this.internal.__cell__.margins||t,A=this.internal.__cell__.tableHeaderRow,u=this.internal.__cell__.printHeaders;return void 0!==o.lineNumber&&(o.lineNumber===e.lineNumber?(e.x=(o.x||0)+(o.width||0),e.y=o.y||0):o.y+o.height+e.height+a.bottom>this.getPageHeight()?(this.cellAddPage(),e.y=a.top,u&&A&&(this.printHeaderRow(e.lineNumber,!0),e.y+=A[0].height)):e.y=o.y+o.height||e.y),void 0!==e.text[0]&&(this.rect(e.x,e.y,e.width,e.height,!0===r?\"FD\":void 0),\"right\"===e.align?this.text(e.text,e.x+e.width-i,e.y+i,{align:\"right\",baseline:\"top\"}):\"center\"===e.align?this.text(e.text,e.x+e.width\u002F2,e.y+i,{align:\"center\",baseline:\"top\",maxWidth:e.width-i-i}):this.text(e.text,e.x+i,e.y+i,{align:\"left\",baseline:\"top\",maxWidth:e.width-i-i})),this.internal.__cell__.lastCell=e,this};e.table=function(e,r,A,u,c){if(n.call(this),!A)throw new Error(\"No data for PDF table.\");var l,d,f,h,p=[],m=[],g=[],y={},v={},w=[],b=[],B=(c=c||{}).autoSize||!1,j=!1!==c.printHeaders,_=c.css&&void 0!==c.css[\"font-size\"]?16*c.css[\"font-size\"]:c.fontSize||12,C=c.margins||Object.assign({width:this.getPageWidth()},t),x=\"number\"==typeof c.padding?c.padding:3,E=c.headerBackgroundColor||\"#c8c8c8\";if(o.call(this),this.internal.__cell__.printHeaders=j,this.internal.__cell__.margins=C,this.internal.__cell__.table_font_size=_,this.internal.__cell__.padding=x,this.internal.__cell__.headerBackgroundColor=E,this.setFontSize(_),null==u)m=p=Object.keys(A[0]),g=p.map((function(){return\"left\"}));else if(Array.isArray(u)&&\"object\"==typeof u[0])for(p=u.map((function(e){return e.name})),m=u.map((function(e){return e.prompt||e.name||\"\"})),g=u.map((function(e){return e.align||\"left\"})),l=0;l\u003Cu.length;l+=1)v[u[l].name]=u[l].width*(19.049976\u002F25.4);else Array.isArray(u)&&\"string\"==typeof u[0]&&(m=p=u,g=p.map((function(){return\"left\"})));if(B||Array.isArray(u)&&\"string\"==typeof u[0])for(l=0;l\u003Cp.length;l+=1){for(y[h=p[l]]=A.map((function(e){return e[h]})),this.setFont(void 0,\"bold\"),w.push(this.getTextDimensions(m[l],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w),d=y[h],this.setFont(void 0,\"normal\"),f=0;f\u003Cd.length;f+=1)w.push(this.getTextDimensions(d[f],{fontSize:this.internal.__cell__.table_font_size,scaleFactor:this.internal.scaleFactor}).w);v[h]=Math.max.apply(null,w)+x+x,w=[]}if(j){var N={};for(l=0;l\u003Cp.length;l+=1)N[p[l]]={},N[p[l]].text=m[l],N[p[l]].align=g[l];var Q=a.call(this,N,v);b=p.map((function(t){return new s(e,r,v[t],Q,N[t].text,void 0,N[t].align)})),this.setTableHeaderRow(b),this.printHeaderRow(1,!1)}var F=u.reduce((function(e,t){return e[t.name]=t.align,e}),{});for(l=0;l\u003CA.length;l+=1){var U=a.call(this,A[l],v);for(f=0;f\u003Cp.length;f+=1)i.call(this,new s(e,r,v[p[f]],U,A[l][p[f]],l+2,F[p[f]]))}return this.internal.__cell__.table_x=e,this.internal.__cell__.table_y=r,this};var a=function(e,t){var r=this.internal.__cell__.padding,n=this.internal.__cell__.table_font_size,o=this.internal.scaleFactor;return Object.keys(e).map((function(n){var o=e[n];return this.splitTextToSize(o.hasOwnProperty(\"text\")?o.text:o,t[n]-r-r)}),this).map((function(e){return this.getLineHeightFactor()*e.length*n\u002Fo+r+r}),this).reduce((function(e,t){return Math.max(e,t)}),0)};e.setTableHeaderRow=function(e){n.call(this),this.internal.__cell__.tableHeaderRow=e},e.printHeaderRow=function(e,t){if(n.call(this),!this.internal.__cell__.tableHeaderRow)throw new Error(\"Property tableHeaderRow does not exist.\");var o;if(r=!0,\"function\"==typeof this.internal.__cell__.headerFunction){var a=this.internal.__cell__.headerFunction(this,this.internal.__cell__.pages);this.internal.__cell__.lastCell=new s(a[0],a[1],a[2],a[3],void 0,-1)}this.setFont(void 0,\"bold\");for(var A=[],u=0;u\u003Cthis.internal.__cell__.tableHeaderRow.length;u+=1)o=this.internal.__cell__.tableHeaderRow[u].clone(),t&&(o.y=this.internal.__cell__.margins.top||0,A.push(o)),o.lineNumber=e,this.setFillColor(this.internal.__cell__.headerBackgroundColor),i.call(this,o);A.length>0&&this.setTableHeaderRow(A),this.setFont(void 0,\"normal\"),r=!1}}(H.API);var xe={italic:[\"italic\",\"oblique\",\"normal\"],oblique:[\"oblique\",\"italic\",\"normal\"],normal:[\"normal\",\"oblique\",\"italic\"]},Ee=[\"ultra-condensed\",\"extra-condensed\",\"condensed\",\"semi-condensed\",\"normal\",\"semi-expanded\",\"expanded\",\"extra-expanded\",\"ultra-expanded\"],Ne=Ce(Ee),Qe=[100,200,300,400,500,600,700,800,900],Fe=Ce(Qe);function Ue(e){var t=e.family.replace(\u002F\"|'\u002Fg,\"\").toLowerCase(),r=function(e){return xe[e=e||\"normal\"]?e:\"normal\"}(e.style),n=function(e){if(!e)return 400;if(\"number\"==typeof e)return e>=100&&e\u003C=900&&e%100==0?e:400;if(\u002F^\\d00$\u002F.test(e))return parseInt(e);switch(e){case\"bold\":return 700;case\"normal\":default:return 400}}(e.weight),o=function(e){return\"number\"==typeof Ne[e=e||\"normal\"]?e:\"normal\"}(e.stretch);return{family:t,style:r,weight:n,stretch:o,src:e.src||[],ref:e.ref||{name:t,style:[o,r,n].join(\" \")}}}function Se(e,t,r,n){var o;for(o=r;o>=0&&o\u003Ct.length;o+=n)if(e[t[o]])return e[t[o]];for(o=r;o>=0&&o\u003Ct.length;o-=n)if(e[t[o]])return e[t[o]]}var Le={\"sans-serif\":\"helvetica\",fixed:\"courier\",monospace:\"courier\",terminal:\"courier\",cursive:\"times\",fantasy:\"times\",serif:\"times\"},Te={caption:\"times\",icon:\"times\",menu:\"times\",\"message-box\":\"times\",\"small-caption\":\"times\",\"status-bar\":\"times\"};function He(e){return[e.stretch,e.style,e.weight,e.family].join(\" \")}function Ie(e){return e.trimLeft()}function Pe(e,t){for(var r=0;r\u003Ce.length;){if(e.charAt(r)===t)return[e.substring(0,r),e.substring(r+1)];r+=1}return null}function Oe(e){var t=e.match(\u002F^(-[a-z_]|[a-z_])[a-z0-9_-]*\u002Fi);return null===t?null:[t[0],e.substring(t[0].length)]}var ke,Re,Me,De=[\"times\"];!function(e){var t,r,n,o,s,a,A,u,c,l=function(e){return e=e||{},this.isStrokeTransparent=e.isStrokeTransparent||!1,this.strokeOpacity=e.strokeOpacity||1,this.strokeStyle=e.strokeStyle||\"#000000\",this.fillStyle=e.fillStyle||\"#000000\",this.isFillTransparent=e.isFillTransparent||!1,this.fillOpacity=e.fillOpacity||1,this.font=e.font||\"10px sans-serif\",this.textBaseline=e.textBaseline||\"alphabetic\",this.textAlign=e.textAlign||\"left\",this.lineWidth=e.lineWidth||1,this.lineJoin=e.lineJoin||\"miter\",this.lineCap=e.lineCap||\"butt\",this.path=e.path||[],this.transform=void 0!==e.transform?e.transform.clone():new u,this.globalCompositeOperation=e.globalCompositeOperation||\"normal\",this.globalAlpha=e.globalAlpha||1,this.clip_path=e.clip_path||[],this.currentPoint=e.currentPoint||new a,this.miterLimit=e.miterLimit||10,this.lastPoint=e.lastPoint||new a,this.ignoreClearRect=\"boolean\"!=typeof e.ignoreClearRect||e.ignoreClearRect,this};e.events.push([\"initialized\",function(){this.context2d=new d(this),t=this.internal.f2,r=this.internal.getCoordinateString,n=this.internal.getVerticalCoordinateString,o=this.internal.getHorizontalCoordinate,s=this.internal.getVerticalCoordinate,a=this.internal.Point,A=this.internal.Rectangle,u=this.internal.Matrix,c=new l}]);var d=function(e){Object.defineProperty(this,\"canvas\",{get:function(){return{parentNode:!1,style:!1}}});var t=e;Object.defineProperty(this,\"pdf\",{get:function(){return t}});var r=!1;Object.defineProperty(this,\"pageWrapXEnabled\",{get:function(){return r},set:function(e){r=Boolean(e)}});var n=!1;Object.defineProperty(this,\"pageWrapYEnabled\",{get:function(){return n},set:function(e){n=Boolean(e)}});var o=0;Object.defineProperty(this,\"posX\",{get:function(){return o},set:function(e){isNaN(e)||(o=e)}});var s=0;Object.defineProperty(this,\"posY\",{get:function(){return s},set:function(e){isNaN(e)||(s=e)}});var i=!1;Object.defineProperty(this,\"autoPaging\",{get:function(){return i},set:function(e){i=Boolean(e)}});var a=0;Object.defineProperty(this,\"lastBreak\",{get:function(){return a},set:function(e){a=e}});var A=[];Object.defineProperty(this,\"pageBreaks\",{get:function(){return A},set:function(e){A=e}}),Object.defineProperty(this,\"ctx\",{get:function(){return c},set:function(e){e instanceof l&&(c=e)}}),Object.defineProperty(this,\"path\",{get:function(){return c.path},set:function(e){c.path=e}});var u=[];Object.defineProperty(this,\"ctxStack\",{get:function(){return u},set:function(e){u=e}}),Object.defineProperty(this,\"fillStyle\",{get:function(){return this.ctx.fillStyle},set:function(e){var t;t=h(e),this.ctx.fillStyle=t.style,this.ctx.isFillTransparent=0===t.a,this.ctx.fillOpacity=t.a,this.pdf.setFillColor(t.r,t.g,t.b,{a:t.a}),this.pdf.setTextColor(t.r,t.g,t.b,{a:t.a})}}),Object.defineProperty(this,\"strokeStyle\",{get:function(){return this.ctx.strokeStyle},set:function(e){var t=h(e);this.ctx.strokeStyle=t.style,this.ctx.isStrokeTransparent=0===t.a,this.ctx.strokeOpacity=t.a,0===t.a?this.pdf.setDrawColor(255,255,255):(t.a,this.pdf.setDrawColor(t.r,t.g,t.b))}}),Object.defineProperty(this,\"lineCap\",{get:function(){return this.ctx.lineCap},set:function(e){-1!==[\"butt\",\"round\",\"square\"].indexOf(e)&&(this.ctx.lineCap=e,this.pdf.setLineCap(e))}}),Object.defineProperty(this,\"lineWidth\",{get:function(){return this.ctx.lineWidth},set:function(e){isNaN(e)||(this.ctx.lineWidth=e,this.pdf.setLineWidth(e))}}),Object.defineProperty(this,\"lineJoin\",{get:function(){return this.ctx.lineJoin},set:function(e){-1!==[\"bevel\",\"round\",\"miter\"].indexOf(e)&&(this.ctx.lineJoin=e,this.pdf.setLineJoin(e))}}),Object.defineProperty(this,\"miterLimit\",{get:function(){return this.ctx.miterLimit},set:function(e){isNaN(e)||(this.ctx.miterLimit=e,this.pdf.setMiterLimit(e))}}),Object.defineProperty(this,\"textBaseline\",{get:function(){return this.ctx.textBaseline},set:function(e){this.ctx.textBaseline=e}}),Object.defineProperty(this,\"textAlign\",{get:function(){return this.ctx.textAlign},set:function(e){-1!==[\"right\",\"end\",\"center\",\"left\",\"start\"].indexOf(e)&&(this.ctx.textAlign=e)}});var d=null;function f(e,t){if(null===d){var r=function(e){var t=[];return Object.keys(e).forEach((function(r){e[r].forEach((function(e){var n=null;switch(e){case\"bold\":n={family:r,weight:\"bold\"};break;case\"italic\":n={family:r,style:\"italic\"};break;case\"bolditalic\":n={family:r,weight:\"bold\",style:\"italic\"};break;case\"\":case\"normal\":n={family:r}}null!==n&&(n.ref={name:r,style:e},t.push(n))}))})),t}(e.getFontList());d=function(e){for(var t={},r=0;r\u003Ce.length;++r){var n=Ue(e[r]),o=n.family,s=n.stretch,i=n.style,a=n.weight;t[o]=t[o]||{},t[o][s]=t[o][s]||{},t[o][s][i]=t[o][s][i]||{},t[o][s][i][a]=n}return t}(r.concat(t))}return d}var p=null;Object.defineProperty(this,\"fontFaces\",{get:function(){return p},set:function(e){d=null,p=e}}),Object.defineProperty(this,\"font\",{get:function(){return this.ctx.font},set:function(e){var t;if(this.ctx.font=e,null!==(t=\u002F^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\\u002F\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-_,\\\"\\'\\sa-z]+?)\\s*$\u002Fi.exec(e))){var r=t[1],n=(t[2],t[3]),o=t[4],s=(t[5],t[6]),i=\u002F^([.\\d]+)((?:%|in|[cem]m|ex|p[ctx]))$\u002Fi.exec(o)[2];o=\"px\"===i?Math.floor(parseFloat(o)*this.pdf.internal.scaleFactor):\"em\"===i?Math.floor(parseFloat(o)*this.pdf.getFontSize()):Math.floor(parseFloat(o)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(o);var a=function(e){var t,r,n=[],o=e.trim();if(\"\"===o)return De;if(o in Te)return[Te[o]];for(;\"\"!==o;){switch(r=null,t=(o=Ie(o)).charAt(0)){case'\"':case\"'\":r=Pe(o.substring(1),t);break;default:r=Oe(o)}if(null===r)return De;if(n.push(r[0]),\"\"!==(o=Ie(r[1]))&&\",\"!==o.charAt(0))return De;o=o.replace(\u002F^,\u002F,\"\")}return n}(s);if(this.fontFaces){var A=function(e,t,r){for(var n=(r=r||{}).defaultFontFamily||\"times\",o=Object.assign({},Le,r.genericFontFamilies||{}),s=null,i=null,a=0;a\u003Ct.length;++a)if(o[(s=Ue(t[a])).family]&&(s.family=o[s.family]),e.hasOwnProperty(s.family)){i=e[s.family];break}if(!(i=i||e[n]))throw new Error(\"Could not find a font-family for the rule '\"+He(s)+\"' and default family '\"+n+\"'.\");if(i=function(e,t){if(t[e])return t[e];var r=Ne[e],n=r\u003C=Ne.normal?-1:1,o=Se(t,Ee,r,n);if(!o)throw new Error(\"Could not find a matching font-stretch value for \"+e);return o}(s.stretch,i),i=function(e,t){if(t[e])return t[e];for(var r=xe[e],n=0;n\u003Cr.length;++n)if(t[r[n]])return t[r[n]];throw new Error(\"Could not find a matching font-style for \"+e)}(s.style,i),!(i=function(e,t){if(t[e])return t[e];if(400===e&&t[500])return t[500];if(500===e&&t[400])return t[400];var r=Fe[e],n=Se(t,Qe,r,e\u003C400?-1:1);if(!n)throw new Error(\"Could not find a matching font-weight for value \"+e);return n}(s.weight,i)))throw new Error(\"Failed to resolve a font for the rule '\"+He(s)+\"'.\");return i}(f(this.pdf,this.fontFaces),a.map((function(e){return{family:e,stretch:\"normal\",weight:n,style:r}})));this.pdf.setFont(A.ref.name,A.ref.style)}else{var u=\"\";(\"bold\"===n||parseInt(n,10)>=700||\"bold\"===r)&&(u=\"bold\"),\"italic\"===r&&(u+=\"italic\"),0===u.length&&(u=\"normal\");for(var c=\"\",l={arial:\"Helvetica\",Arial:\"Helvetica\",verdana:\"Helvetica\",Verdana:\"Helvetica\",helvetica:\"Helvetica\",Helvetica:\"Helvetica\",\"sans-serif\":\"Helvetica\",fixed:\"Courier\",monospace:\"Courier\",terminal:\"Courier\",cursive:\"Times\",fantasy:\"Times\",serif:\"Times\"},d=0;d\u003Ca.length;d++){if(void 0!==this.pdf.internal.getFont(a[d],u,{noFallback:!0,disableWarning:!0})){c=a[d];break}if(\"bolditalic\"===u&&void 0!==this.pdf.internal.getFont(a[d],\"bold\",{noFallback:!0,disableWarning:!0}))c=a[d],u=\"bold\";else if(void 0!==this.pdf.internal.getFont(a[d],\"normal\",{noFallback:!0,disableWarning:!0})){c=a[d],u=\"normal\";break}}if(\"\"===c)for(var h=0;h\u003Ca.length;h++)if(l[a[h]]){c=l[a[h]];break}c=\"\"===c?\"Times\":c,this.pdf.setFont(c,u)}}}}),Object.defineProperty(this,\"globalCompositeOperation\",{get:function(){return this.ctx.globalCompositeOperation},set:function(e){this.ctx.globalCompositeOperation=e}}),Object.defineProperty(this,\"globalAlpha\",{get:function(){return this.ctx.globalAlpha},set:function(e){this.ctx.globalAlpha=e}}),Object.defineProperty(this,\"ignoreClearRect\",{get:function(){return this.ctx.ignoreClearRect},set:function(e){this.ctx.ignoreClearRect=Boolean(e)}})};d.prototype.fill=function(){b.call(this,\"fill\",!1)},d.prototype.stroke=function(){b.call(this,\"stroke\",!1)},d.prototype.beginPath=function(){this.path=[{type:\"begin\"}]},d.prototype.moveTo=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.moveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.moveTo\");var r=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"mt\",x:r.x,y:r.y}),this.ctx.lastPoint=new a(e,t)},d.prototype.closePath=function(){var e=new a(0,0),t=0;for(t=this.path.length-1;-1!==t;t--)if(\"begin\"===this.path[t].type&&\"object\"==typeof this.path[t+1]&&\"number\"==typeof this.path[t+1].x){e=new a(this.path[t+1].x,this.path[t+1].y),this.path.push({type:\"lt\",x:e.x,y:e.y});break}\"object\"==typeof this.path[t+2]&&\"number\"==typeof this.path[t+2].x&&this.path.push(JSON.parse(JSON.stringify(this.path[t+2]))),this.path.push({type:\"close\"}),this.ctx.lastPoint=new a(e.x,e.y)},d.prototype.lineTo=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.lineTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.lineTo\");var r=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"lt\",x:r.x,y:r.y}),this.ctx.lastPoint=new a(r.x,r.y)},d.prototype.clip=function(){this.ctx.clip_path=JSON.parse(JSON.stringify(this.path)),b.call(this,null,!0)},d.prototype.quadraticCurveTo=function(e,t,r,n){if(isNaN(r)||isNaN(n)||isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.quadraticCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.quadraticCurveTo\");var o=this.ctx.transform.applyToPoint(new a(r,n)),s=this.ctx.transform.applyToPoint(new a(e,t));this.path.push({type:\"qct\",x1:s.x,y1:s.y,x:o.x,y:o.y}),this.ctx.lastPoint=new a(o.x,o.y)},d.prototype.bezierCurveTo=function(e,t,r,n,o,s){if(isNaN(o)||isNaN(s)||isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.bezierCurveTo: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.bezierCurveTo\");var A=this.ctx.transform.applyToPoint(new a(o,s)),u=this.ctx.transform.applyToPoint(new a(e,t)),c=this.ctx.transform.applyToPoint(new a(r,n));this.path.push({type:\"bct\",x1:u.x,y1:u.y,x2:c.x,y2:c.y,x:A.x,y:A.y}),this.ctx.lastPoint=new a(A.x,A.y)},d.prototype.arc=function(e,t,r,n,o,s){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o))throw i.error(\"jsPDF.context2d.arc: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.arc\");if(s=Boolean(s),!this.ctx.transform.isIdentity){var A=this.ctx.transform.applyToPoint(new a(e,t));e=A.x,t=A.y;var u=this.ctx.transform.applyToPoint(new a(0,r)),c=this.ctx.transform.applyToPoint(new a(0,0));r=Math.sqrt(Math.pow(u.x-c.x,2)+Math.pow(u.y-c.y,2))}Math.abs(o-n)>=2*Math.PI&&(n=0,o=2*Math.PI),this.path.push({type:\"arc\",x:e,y:t,radius:r,startAngle:n,endAngle:o,counterclockwise:s})},d.prototype.arcTo=function(e,t,r,n,o){throw new Error(\"arcTo not implemented.\")},d.prototype.rect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(e,t),this.lineTo(e+r,t),this.lineTo(e+r,t+n),this.lineTo(e,t+n),this.lineTo(e,t),this.lineTo(e+r,t),this.lineTo(e,t)},d.prototype.fillRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!p.call(this)){var o={};\"butt\"!==this.lineCap&&(o.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(o.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(e,t,r,n),this.fill(),o.hasOwnProperty(\"lineCap\")&&(this.lineCap=o.lineCap),o.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=o.lineJoin)}},d.prototype.strokeRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");m.call(this)||(this.beginPath(),this.rect(e,t,r,n),this.stroke())},d.prototype.clearRect=function(e,t,r,n){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n))throw i.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(e,t,r,n))},d.prototype.save=function(e){e=\"boolean\"!=typeof e||e;for(var t=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r\u003Cthis.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"q\");if(this.pdf.setPage(t),e){this.ctx.fontSize=this.pdf.internal.getFontSize();var n=new l(this.ctx);this.ctxStack.push(this.ctx),this.ctx=n}},d.prototype.restore=function(e){e=\"boolean\"!=typeof e||e;for(var t=this.pdf.internal.getCurrentPageInfo().pageNumber,r=0;r\u003Cthis.pdf.internal.getNumberOfPages();r++)this.pdf.setPage(r+1),this.pdf.internal.out(\"Q\");this.pdf.setPage(t),e&&0!==this.ctxStack.length&&(this.ctx=this.ctxStack.pop(),this.fillStyle=this.ctx.fillStyle,this.strokeStyle=this.ctx.strokeStyle,this.font=this.ctx.font,this.lineCap=this.ctx.lineCap,this.lineWidth=this.ctx.lineWidth,this.lineJoin=this.ctx.lineJoin)},d.prototype.toDataURL=function(){throw new Error(\"toDataUrl not implemented.\")};var h=function(e){var t,r,n,o;if(!0===e.isCanvasGradient&&(e=e.getColor()),!e)return{r:0,g:0,b:0,a:0,style:e};if(\u002Ftransparent|rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*0+\\s*\\)\u002F.test(e))t=0,r=0,n=0,o=0;else{var s=\u002Frgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\u002F.exec(e);if(null!==s)t=parseInt(s[1]),r=parseInt(s[2]),n=parseInt(s[3]),o=1;else if(null!==(s=\u002Frgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)\u002F.exec(e)))t=parseInt(s[1]),r=parseInt(s[2]),n=parseInt(s[3]),o=parseFloat(s[4]);else{if(o=1,\"string\"==typeof e&&\"#\"!==e.charAt(0)){var i=new f(e);e=i.ok?i.toHex():\"#000000\"}4===e.length?(t=e.substring(1,2),t+=t,r=e.substring(2,3),r+=r,n=e.substring(3,4),n+=n):(t=e.substring(1,3),r=e.substring(3,5),n=e.substring(5,7)),t=parseInt(t,16),r=parseInt(r,16),n=parseInt(n,16)}}return{r:t,g:r,b:n,a:o,style:e}},p=function(){return this.ctx.isFillTransparent||0==this.globalAlpha},m=function(){return Boolean(this.ctx.isStrokeTransparent||0==this.globalAlpha)};d.prototype.fillText=function(e,t,r,n){if(isNaN(t)||isNaN(r)||\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.fillText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillText\");if(n=isNaN(n)?void 0:n,!p.call(this)){r=j.call(this,r);var o=T(this.ctx.transform.rotation),s=this.ctx.transform.scaleX;N.call(this,{text:e,x:t,y:r,scale:s,angle:o,align:this.textAlign,maxWidth:n})}},d.prototype.strokeText=function(e,t,r,n){if(isNaN(t)||isNaN(r)||\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.strokeText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeText\");if(!m.call(this)){n=isNaN(n)?void 0:n,r=j.call(this,r);var o=T(this.ctx.transform.rotation),s=this.ctx.transform.scaleX;N.call(this,{text:e,x:t,y:r,scale:s,renderingMode:\"stroke\",angle:o,align:this.textAlign,maxWidth:n})}},d.prototype.measureText=function(e){if(\"string\"!=typeof e)throw i.error(\"jsPDF.context2d.measureText: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.measureText\");var t=this.pdf,r=this.pdf.internal.scaleFactor,n=t.internal.getFontSize(),o=t.getStringUnitWidth(e)*n\u002Ft.internal.scaleFactor,s=function(e){var t=(e=e||{}).width||0;return Object.defineProperty(this,\"width\",{get:function(){return t}}),this};return new s({width:o*=Math.round(96*r\u002F72*1e4)\u002F1e4})},d.prototype.scale=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.scale: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.scale\");var r=new u(e,0,0,t,0,0);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.rotate=function(e){if(isNaN(e))throw i.error(\"jsPDF.context2d.rotate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rotate\");var t=new u(Math.cos(e),Math.sin(e),-Math.sin(e),Math.cos(e),0,0);this.ctx.transform=this.ctx.transform.multiply(t)},d.prototype.translate=function(e,t){if(isNaN(e)||isNaN(t))throw i.error(\"jsPDF.context2d.translate: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.translate\");var r=new u(1,0,0,1,e,t);this.ctx.transform=this.ctx.transform.multiply(r)},d.prototype.transform=function(e,t,r,n,o,s){if(isNaN(e)||isNaN(t)||isNaN(r)||isNaN(n)||isNaN(o)||isNaN(s))throw i.error(\"jsPDF.context2d.transform: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.transform\");var a=new u(e,t,r,n,o,s);this.ctx.transform=this.ctx.transform.multiply(a)},d.prototype.setTransform=function(e,t,r,n,o,s){e=isNaN(e)?1:e,t=isNaN(t)?0:t,r=isNaN(r)?0:r,n=isNaN(n)?1:n,o=isNaN(o)?0:o,s=isNaN(s)?0:s,this.ctx.transform=new u(e,t,r,n,o,s)},d.prototype.drawImage=function(e,t,r,n,o,s,i,a,c){var l=this.pdf.getImageProperties(e),d=1,f=1,h=1,p=1;void 0!==n&&void 0!==a&&(h=a\u002Fn,p=c\u002Fo,d=l.width\u002Fn*a\u002Fn,f=l.height\u002Fo*c\u002Fo),void 0===s&&(s=t,i=r,t=0,r=0),void 0!==n&&void 0===a&&(a=n,c=o),void 0===n&&void 0===a&&(a=l.width,c=l.height);for(var m,y=this.ctx.transform.decompose(),b=T(y.rotate.shx),j=new u,_=(j=(j=(j=j.multiply(y.translate)).multiply(y.skew)).multiply(y.scale)).applyToRectangle(new A(s-t*h,i-r*p,n*d,o*f)),C=g.call(this,_),x=[],E=0;E\u003CC.length;E+=1)-1===x.indexOf(C[E])&&x.push(C[E]);if(w(x),this.autoPaging)for(var N=x[0],Q=x[x.length-1],F=N;F\u003CQ+1;F++){if(this.pdf.setPage(F),0!==this.ctx.clip_path.length){var U=this.path;m=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(m,this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY),B.call(this,\"fill\",!0),this.path=U}var S=JSON.parse(JSON.stringify(_));S=v([S],this.posX,-1*this.pdf.internal.pageSize.height*(F-1)+this.posY)[0],this.pdf.addImage(e,\"JPEG\",S.x,S.y,S.w,S.h,null,null,b)}else this.pdf.addImage(e,\"JPEG\",_.x,_.y,_.w,_.h,null,null,b)};var g=function(e,t,r){var n=[];switch(t=t||this.pdf.internal.pageSize.width,r=r||this.pdf.internal.pageSize.height,e.type){default:case\"mt\":case\"lt\":n.push(Math.floor((e.y+this.posY)\u002Fr)+1);break;case\"arc\":n.push(Math.floor((e.y+this.posY-e.radius)\u002Fr)+1),n.push(Math.floor((e.y+this.posY+e.radius)\u002Fr)+1);break;case\"qct\":var o=H(this.ctx.lastPoint.x,this.ctx.lastPoint.y,e.x1,e.y1,e.x,e.y);n.push(Math.floor(o.y\u002Fr)+1),n.push(Math.floor((o.y+o.h)\u002Fr)+1);break;case\"bct\":var s=I(this.ctx.lastPoint.x,this.ctx.lastPoint.y,e.x1,e.y1,e.x2,e.y2,e.x,e.y);n.push(Math.floor(s.y\u002Fr)+1),n.push(Math.floor((s.y+s.h)\u002Fr)+1);break;case\"rect\":n.push(Math.floor((e.y+this.posY)\u002Fr)+1),n.push(Math.floor((e.y+e.h+this.posY)\u002Fr)+1)}for(var i=0;i\u003Cn.length;i+=1)for(;this.pdf.internal.getNumberOfPages()\u003Cn[i];)y.call(this);return n},y=function(){var e=this.fillStyle,t=this.strokeStyle,r=this.font,n=this.lineCap,o=this.lineWidth,s=this.lineJoin;this.pdf.addPage(),this.fillStyle=e,this.strokeStyle=t,this.font=r,this.lineCap=n,this.lineWidth=o,this.lineJoin=s},v=function(e,t,r){for(var n=0;n\u003Ce.length;n++)switch(e[n].type){case\"bct\":e[n].x2+=t,e[n].y2+=r;case\"qct\":e[n].x1+=t,e[n].y1+=r;case\"mt\":case\"lt\":case\"arc\":default:e[n].x+=t,e[n].y+=r}return e},w=function(e){return e.sort((function(e,t){return e-t}))},b=function(e,t){for(var r,n,o=this.fillStyle,s=this.strokeStyle,i=this.lineCap,a=this.lineWidth,A=a*this.ctx.transform.scaleX,u=this.lineJoin,c=JSON.parse(JSON.stringify(this.path)),l=JSON.parse(JSON.stringify(this.path)),d=[],f=0;f\u003Cl.length;f++)if(void 0!==l[f].x)for(var h=g.call(this,l[f]),p=0;p\u003Ch.length;p+=1)-1===d.indexOf(h[p])&&d.push(h[p]);for(var m=0;m\u003Cd.length;m++)for(;this.pdf.internal.getNumberOfPages()\u003Cd[m];)y.call(this);if(w(d),this.autoPaging)for(var b=d[0],j=d[d.length-1],_=b;_\u003Cj+1;_++){if(this.pdf.setPage(_),this.fillStyle=o,this.strokeStyle=s,this.lineCap=i,this.lineWidth=A,this.lineJoin=u,0!==this.ctx.clip_path.length){var C=this.path;r=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(r,this.posX,-1*this.pdf.internal.pageSize.height*(_-1)+this.posY),B.call(this,e,!0),this.path=C}n=JSON.parse(JSON.stringify(c)),this.path=v(n,this.posX,-1*this.pdf.internal.pageSize.height*(_-1)+this.posY),!1!==t&&0!==_||B.call(this,e,t),this.lineWidth=a}else this.lineWidth=A,B.call(this,e,t),this.lineWidth=a;this.path=c},B=function(e,t){if((\"stroke\"!==e||t||!m.call(this))&&(\"stroke\"===e||t||!p.call(this))){for(var r,n,o=[],s=this.path,i=0;i\u003Cs.length;i++){var a=s[i];switch(a.type){case\"begin\":o.push({begin:!0});break;case\"close\":o.push({close:!0});break;case\"mt\":o.push({start:a,deltas:[],abs:[]});break;case\"lt\":var A=o.length;if(!isNaN(s[i-1].x)&&(r=[a.x-s[i-1].x,a.y-s[i-1].y],A>0))for(;A>=0;A--)if(!0!==o[A-1].close&&!0!==o[A-1].begin){o[A-1].deltas.push(r),o[A-1].abs.push(a);break}break;case\"bct\":r=[a.x1-s[i-1].x,a.y1-s[i-1].y,a.x2-s[i-1].x,a.y2-s[i-1].y,a.x-s[i-1].x,a.y-s[i-1].y],o[o.length-1].deltas.push(r);break;case\"qct\":var u=s[i-1].x+2\u002F3*(a.x1-s[i-1].x),c=s[i-1].y+2\u002F3*(a.y1-s[i-1].y),l=a.x+2\u002F3*(a.x1-a.x),d=a.y+2\u002F3*(a.y1-a.y),f=a.x,h=a.y;r=[u-s[i-1].x,c-s[i-1].y,l-s[i-1].x,d-s[i-1].y,f-s[i-1].x,h-s[i-1].y],o[o.length-1].deltas.push(r);break;case\"arc\":o.push({deltas:[],abs:[],arc:!0}),Array.isArray(o[o.length-1].abs)&&o[o.length-1].abs.push(a)}}n=t?null:\"stroke\"===e?\"stroke\":\"fill\";for(var g=0;g\u003Co.length;g++){if(o[g].arc){for(var y=o[g].abs,v=0;v\u003Cy.length;v++){var w=y[v];\"arc\"===w.type?_.call(this,w.x,w.y,w.radius,w.startAngle,w.endAngle,w.counterclockwise,void 0,t):Q.call(this,w.x,w.y)}C.call(this,n),this.pdf.internal.out(\"h\")}if(!o[g].arc&&!0!==o[g].close&&!0!==o[g].begin){var b=o[g].start.x,B=o[g].start.y;F.call(this,o[g].deltas,b,B)}}n&&C.call(this,n),t&&x.call(this)}},j=function(e){var t=this.pdf.internal.getFontSize()\u002Fthis.pdf.internal.scaleFactor,r=t*(this.pdf.internal.getLineHeightFactor()-1);switch(this.ctx.textBaseline){case\"bottom\":return e-r;case\"top\":return e+t-r;case\"hanging\":return e+t-2*r;case\"middle\":return e+t\u002F2-r;case\"ideographic\":return e;case\"alphabetic\":default:return e}};d.prototype.createLinearGradient=function(){var e=function(){};return e.colorStops=[],e.addColorStop=function(e,t){this.colorStops.push([e,t])},e.getColor=function(){return 0===this.colorStops.length?\"#000000\":this.colorStops[0][1]},e.isCanvasGradient=!0,e},d.prototype.createPattern=function(){return this.createLinearGradient()},d.prototype.createRadialGradient=function(){return this.createLinearGradient()};var _=function(e,t,r,n,o,s,i,a){for(var A=S.call(this,r,n,o,s),u=0;u\u003CA.length;u++){var c=A[u];0===u&&E.call(this,c.x1+e,c.y1+t),U.call(this,e,t,c.x2,c.y2,c.x3,c.y3,c.x4,c.y4)}a?x.call(this):C.call(this,i)},C=function(e){switch(e){case\"stroke\":this.pdf.internal.out(\"S\");break;case\"fill\":this.pdf.internal.out(\"f\")}},x=function(){this.pdf.clip(),this.pdf.discardPath()},E=function(e,t){this.pdf.internal.out(r(e)+\" \"+n(t)+\" m\")},N=function(e){var t;switch(e.align){case\"right\":case\"end\":t=\"right\";break;case\"center\":t=\"center\";break;case\"left\":case\"start\":default:t=\"left\"}var r=this.ctx.transform.applyToPoint(new a(e.x,e.y)),n=this.ctx.transform.decompose(),o=new u;o=(o=(o=o.multiply(n.translate)).multiply(n.skew)).multiply(n.scale);for(var s,i,c,l=this.pdf.getTextDimensions(e.text),d=this.ctx.transform.applyToRectangle(new A(e.x,e.y,l.w,l.h)),f=o.applyToRectangle(new A(e.x,e.y-l.h,l.w,l.h)),h=g.call(this,f),p=[],m=0;m\u003Ch.length;m+=1)-1===p.indexOf(h[m])&&p.push(h[m]);if(w(p),!0===this.autoPaging)for(var y=p[0],b=p[p.length-1],j=y;j\u003Cb+1;j++){if(this.pdf.setPage(j),0!==this.ctx.clip_path.length){var _=this.path;s=JSON.parse(JSON.stringify(this.ctx.clip_path)),this.path=v(s,this.posX,-1*this.pdf.internal.pageSize.height*(j-1)+this.posY),B.call(this,\"fill\",!0),this.path=_}var C=JSON.parse(JSON.stringify(d));C=v([C],this.posX,-1*this.pdf.internal.pageSize.height*(j-1)+this.posY)[0],e.scale>=.01&&(i=this.pdf.internal.getFontSize(),this.pdf.setFontSize(i*e.scale),c=this.lineWidth,this.lineWidth=c*e.scale),this.pdf.text(e.text,C.x,C.y,{angle:e.angle,align:t,renderingMode:e.renderingMode,maxWidth:e.maxWidth}),e.scale>=.01&&(this.pdf.setFontSize(i),this.lineWidth=c)}else e.scale>=.01&&(i=this.pdf.internal.getFontSize(),this.pdf.setFontSize(i*e.scale),c=this.lineWidth,this.lineWidth=c*e.scale),this.pdf.text(e.text,r.x+this.posX,r.y+this.posY,{angle:e.angle,align:t,renderingMode:e.renderingMode,maxWidth:e.maxWidth}),e.scale>=.01&&(this.pdf.setFontSize(i),this.lineWidth=c)},Q=function(e,t,o,s){o=o||0,s=s||0,this.pdf.internal.out(r(e+o)+\" \"+n(t+s)+\" l\")},F=function(e,t,r){return this.pdf.lines(e,t,r,null,null)},U=function(e,r,n,i,a,A,u,c){this.pdf.internal.out([t(o(n+e)),t(s(i+r)),t(o(a+e)),t(s(A+r)),t(o(u+e)),t(s(c+r)),\"c\"].join(\" \"))},S=function(e,t,r,n){for(var o=2*Math.PI,s=Math.PI\u002F2;t>r;)t-=o;var i=Math.abs(r-t);i\u003Co&&n&&(i=o-i);for(var a=[],A=n?-1:1,u=t;i>1e-5;){var c=u+A*Math.min(i,s);a.push(L.call(this,e,u,c)),i-=Math.abs(c-u),u=c}return a},L=function(e,t,r){var n=(r-t)\u002F2,o=e*Math.cos(n),s=e*Math.sin(n),i=o,a=-s,A=i*i+a*a,u=A+i*o+a*s,c=4\u002F3*(Math.sqrt(2*A*u)-u)\u002F(i*s-a*o),l=i-c*a,d=a+c*i,f=l,h=-d,p=n+t,m=Math.cos(p),g=Math.sin(p);return{x1:e*Math.cos(t),y1:e*Math.sin(t),x2:l*m-d*g,y2:l*g+d*m,x3:f*m-h*g,y3:f*g+h*m,x4:e*Math.cos(r),y4:e*Math.sin(r)}},T=function(e){return 180*e\u002FMath.PI},H=function(e,t,r,n,o,s){var i=e+.5*(r-e),a=t+.5*(n-t),u=o+.5*(r-o),c=s+.5*(n-s),l=Math.min(e,o,i,u),d=Math.max(e,o,i,u),f=Math.min(t,s,a,c),h=Math.max(t,s,a,c);return new A(l,f,d-l,h-f)},I=function(e,t,r,n,o,s,i,a){var u,c,l,d,f,h,p,m,g,y,v,w,b,B,j=r-e,_=n-t,C=o-r,x=s-n,E=i-o,N=a-s;for(c=0;c\u003C41;c++)g=(p=(l=e+(u=c\u002F40)*j)+u*((f=r+u*C)-l))+u*(f+u*(o+u*E-f)-p),y=(m=(d=t+u*_)+u*((h=n+u*x)-d))+u*(h+u*(s+u*N-h)-m),0==c?(v=g,w=y,b=g,B=y):(v=Math.min(v,g),w=Math.min(w,y),b=Math.max(b,g),B=Math.max(B,y));return new A(Math.round(v),Math.round(w),Math.round(b-v),Math.round(B-w))}}(H.API),function(e){var t=function(e){var t,r,n,o,s,i,a,A,u,c;for(\u002F[^\\x00-\\xFF]\u002F.test(e),r=[],n=0,o=(e+=t=\"\\0\\0\\0\\0\".slice(e.length%4||4)).length;o>n;n+=4)0!==(s=(e.charCodeAt(n)\u003C\u003C24)+(e.charCodeAt(n+1)\u003C\u003C16)+(e.charCodeAt(n+2)\u003C\u003C8)+e.charCodeAt(n+3))?(i=(s=((s=((s=((s=(s-(c=s%85))\u002F85)-(u=s%85))\u002F85)-(A=s%85))\u002F85)-(a=s%85))\u002F85)%85,r.push(i+33,a+33,A+33,u+33,c+33)):r.push(122);return function(e,t){for(var r=t;r>0;r--)e.pop()}(r,t.length),String.fromCharCode.apply(String,r)+\"~>\"},r=function(e){var t,r,n,o,s,i=String,a=\"length\",A=255,u=\"charCodeAt\",c=\"slice\",l=\"replace\";for(e[c](-2),e=e[c](0,-2)[l](\u002F\\s\u002Fg,\"\")[l](\"z\",\"!!!!!\"),n=[],o=0,s=(e+=t=\"uuuuu\"[c](e[a]%5||5))[a];s>o;o+=5)r=52200625*(e[u](o)-33)+614125*(e[u](o+1)-33)+7225*(e[u](o+2)-33)+85*(e[u](o+3)-33)+(e[u](o+4)-33),n.push(A&r>>24,A&r>>16,A&r>>8,A&r);return function(e,t){for(var r=t;r>0;r--)e.pop()}(n,t[a]),i.fromCharCode.apply(i,n)},o=function(e){var t=new RegExp(\u002F^([0-9A-Fa-f]{2})+$\u002F);if(-1!==(e=e.replace(\u002F\\s\u002Fg,\"\")).indexOf(\">\")&&(e=e.substr(0,e.indexOf(\">\"))),e.length%2&&(e+=\"0\"),!1===t.test(e))return\"\";for(var r=\"\",n=0;n\u003Ce.length;n+=2)r+=String.fromCharCode(\"0x\"+(e[n]+e[n+1]));return r},s=function(e){for(var t=new Uint8Array(e.length),r=e.length;r--;)t[r]=e.charCodeAt(r);return(t=(0,n.zlibSync)(t)).reduce((function(e,t){return e+String.fromCharCode(t)}),\"\")};e.processDataByFilters=function(e,n){var i=0,a=e||\"\",A=[];for(\"string\"==typeof(n=n||[])&&(n=[n]),i=0;i\u003Cn.length;i+=1)switch(n[i]){case\"ASCII85Decode\":case\"\u002FASCII85Decode\":a=r(a),A.push(\"\u002FASCII85Encode\");break;case\"ASCII85Encode\":case\"\u002FASCII85Encode\":a=t(a),A.push(\"\u002FASCII85Decode\");break;case\"ASCIIHexDecode\":case\"\u002FASCIIHexDecode\":a=o(a),A.push(\"\u002FASCIIHexEncode\");break;case\"ASCIIHexEncode\":case\"\u002FASCIIHexEncode\":a=a.split(\"\").map((function(e){return(\"0\"+e.charCodeAt().toString(16)).slice(-2)})).join(\"\")+\">\",A.push(\"\u002FASCIIHexDecode\");break;case\"FlateEncode\":case\"\u002FFlateEncode\":a=s(a),A.push(\"\u002FFlateDecode\");break;default:throw new Error('The filter: \"'+n[i]+'\" is not implemented')}return{data:a,reverseChain:A.reverse().join(\" \")}}}(H.API),function(e){e.loadFile=function(e,t,r){return function(e,t,r){t=!1!==t,r=\"function\"==typeof r?r:function(){};var n=void 0;try{n=function(e,t,r){var n=new XMLHttpRequest,o=0,s=function(e){var t=e.length,r=[],n=String.fromCharCode;for(o=0;o\u003Ct;o+=1)r.push(n(255&e.charCodeAt(o)));return r.join(\"\")};if(n.open(\"GET\",e,!t),n.overrideMimeType(\"text\u002Fplain; charset=x-user-defined\"),!1===t&&(n.onload=function(){200===n.status?r(s(this.responseText)):r(void 0)}),n.send(null),t&&200===n.status)return s(n.responseText)}(e,t,r)}catch(e){}return n}(e,t,r)},e.loadImageFile=e.loadFile}(H.API),function(e){function t(){return(o.html2canvas?Promise.resolve(o.html2canvas):Promise.resolve().then(r.t.bind(r,\".\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js\",23))).catch((function(e){return Promise.reject(new Error(\"Could not load html2canvas: \"+e))})).then((function(e){return e.default?e.default:e}))}function n(){return(o.DOMPurify?Promise.resolve(o.DOMPurify):Promise.resolve().then(r.t.bind(r,\".\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js\",23))).catch((function(e){return Promise.reject(new Error(\"Could not load dompurify: \"+e))})).then((function(e){return e.default?e.default:e}))}var s=function(e){var t=typeof e;return\"undefined\"===t?\"undefined\":\"string\"===t||e instanceof String?\"string\":\"number\"===t||e instanceof Number?\"number\":\"function\"===t||e instanceof Function?\"function\":e&&e.constructor===Array?\"array\":e&&1===e.nodeType?\"element\":\"object\"===t?\"object\":\"unknown\"},i=function(e,t){var r=document.createElement(e);for(var n in t.className&&(r.className=t.className),t.innerHTML&&t.dompurify&&(r.innerHTML=t.dompurify.sanitize(t.innerHTML)),t.style)r.style[n]=t.style[n];return r},a=function(e,t){for(var r=3===e.nodeType?document.createTextNode(e.nodeValue):e.cloneNode(!1),n=e.firstChild;n;n=n.nextSibling)!0!==t&&1===n.nodeType&&\"SCRIPT\"===n.nodeName||r.appendChild(a(n,t));return 1===e.nodeType&&(\"CANVAS\"===e.nodeName?(r.width=e.width,r.height=e.height,r.getContext(\"2d\").drawImage(e,0,0)):\"TEXTAREA\"!==e.nodeName&&\"SELECT\"!==e.nodeName||(r.value=e.value),r.addEventListener(\"load\",(function(){r.scrollTop=e.scrollTop,r.scrollLeft=e.scrollLeft}),!0)),r},A=function e(t){var r=Object.assign(e.convert(Promise.resolve()),JSON.parse(JSON.stringify(e.template))),n=e.convert(Promise.resolve(),r);return(n=n.setProgress(1,e,1,[e])).set(t)};(A.prototype=Object.create(Promise.prototype)).constructor=A,A.convert=function(e,t){return e.__proto__=t||A.prototype,e},A.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:\"file.pdf\",margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:\"transparent\"}},A.prototype.from=function(e,t){return this.then((function(){switch(t=t||function(e){switch(s(e)){case\"string\":return\"string\";case\"element\":return\"canvas\"===e.nodeName.toLowerCase()?\"canvas\":\"element\";default:return\"unknown\"}}(e)){case\"string\":return this.then(n).then((function(t){return this.set({src:i(\"div\",{innerHTML:e,dompurify:t})})}));case\"element\":return this.set({src:e});case\"canvas\":return this.set({canvas:e});case\"img\":return this.set({img:e});default:return this.error(\"Unknown source type.\")}}))},A.prototype.to=function(e){switch(e){case\"container\":return this.toContainer();case\"canvas\":return this.toCanvas();case\"img\":return this.toImg();case\"pdf\":return this.toPdf();default:return this.error(\"Invalid target.\")}},A.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(\"Cannot duplicate - no source HTML.\")},function(){return this.prop.pageSize||this.setPageSize()}]).then((function(){var e={position:\"relative\",display:\"inline-block\",width:Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth)+\"px\",left:0,right:0,top:0,margin:\"auto\",backgroundColor:this.opt.backgroundColor},t=a(this.prop.src,this.opt.html2canvas.javascriptEnabled);\"BODY\"===t.tagName&&(e.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+\"px\"),this.prop.overlay=i(\"div\",{className:\"html2pdf__overlay\",style:{position:\"fixed\",overflow:\"hidden\",zIndex:1e3,left:\"-100000px\",right:0,bottom:0,top:0}}),this.prop.container=i(\"div\",{className:\"html2pdf__container\",style:e}),this.prop.container.appendChild(t),this.prop.container.firstChild.appendChild(i(\"div\",{style:{clear:\"both\",border:\"0 none transparent\",margin:0,padding:0,height:0}})),this.prop.container.style.float=\"none\",this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=\"relative\",this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+\"px\"}))},A.prototype.toCanvas=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then(t).then((function(e){var t=Object.assign({},this.opt.html2canvas);return delete t.onrendered,e(this.prop.container,t)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toContext2d=function(){var e=[function(){return document.body.contains(this.prop.container)||this.toContainer()}];return this.thenList(e).then(t).then((function(e){var t=this.opt.jsPDF,r=this.opt.fontFaces,n=Object.assign({async:!0,allowTaint:!0,scale:1,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:\"#ffffff\",imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete n.onrendered,t.context2d.autoPaging=!0,t.context2d.posX=this.opt.x,t.context2d.posY=this.opt.y,t.context2d.fontFaces=r,r)for(var o=0;o\u003Cr.length;++o){var s=r[o],i=s.src.find((function(e){return\"truetype\"===e.format}));i&&t.addFont(i.url,s.ref.name,s.ref.style)}return n.windowHeight=n.windowHeight||0,n.windowHeight=0==n.windowHeight?Math.max(this.prop.container.clientHeight,this.prop.container.scrollHeight,this.prop.container.offsetHeight):n.windowHeight,e(this.prop.container,n)})).then((function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)}))},A.prototype.toImg=function(){return this.thenList([function(){return this.prop.canvas||this.toCanvas()}]).then((function(){var e=this.prop.canvas.toDataURL(\"image\u002F\"+this.opt.image.type,this.opt.image.quality);this.prop.img=document.createElement(\"img\"),this.prop.img.src=e}))},A.prototype.toPdf=function(){return this.thenList([function(){return this.toContext2d()}]).then((function(){this.prop.pdf=this.prop.pdf||this.opt.jsPDF}))},A.prototype.output=function(e,t,r){return\"img\"===(r=r||\"pdf\").toLowerCase()||\"image\"===r.toLowerCase()?this.outputImg(e,t):this.outputPdf(e,t)},A.prototype.outputPdf=function(e,t){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){return this.prop.pdf.output(e,t)}))},A.prototype.outputImg=function(e){return this.thenList([function(){return this.prop.img||this.toImg()}]).then((function(){switch(e){case void 0:case\"img\":return this.prop.img;case\"datauristring\":case\"dataurlstring\":return this.prop.img.src;case\"datauri\":case\"dataurl\":return document.location.href=this.prop.img.src;default:throw'Image output type \"'+e+'\" is not supported.'}}))},A.prototype.save=function(e){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).set(e?{filename:e}:null).then((function(){this.prop.pdf.save(this.opt.filename)}))},A.prototype.doCallback=function(){return this.thenList([function(){return this.prop.pdf||this.toPdf()}]).then((function(){this.prop.callback(this.prop.pdf)}))},A.prototype.set=function(e){if(\"object\"!==s(e))return this;var t=Object.keys(e||{}).map((function(t){if(t in A.template.prop)return function(){this.prop[t]=e[t]};switch(t){case\"margin\":return this.setMargin.bind(this,e.margin);case\"jsPDF\":return function(){return this.opt.jsPDF=e.jsPDF,this.setPageSize()};case\"pageSize\":return this.setPageSize.bind(this,e.pageSize);default:return function(){this.opt[t]=e[t]}}}),this);return this.then((function(){return this.thenList(t)}))},A.prototype.get=function(e,t){return this.then((function(){var r=e in A.template.prop?this.prop[e]:this.opt[e];return t?t(r):r}))},A.prototype.setMargin=function(e){return this.then((function(){switch(s(e)){case\"number\":e=[e,e,e,e];case\"array\":if(2===e.length&&(e=[e[0],e[1],e[0],e[1]]),4===e.length)break;default:return this.error(\"Invalid margin array.\")}this.opt.margin=e})).then(this.setPageSize)},A.prototype.setPageSize=function(e){function t(e,t){return Math.floor(e*t\u002F72*96)}return this.then((function(){(e=e||H.getPageSize(this.opt.jsPDF)).hasOwnProperty(\"inner\")||(e.inner={width:e.width-this.opt.margin[1]-this.opt.margin[3],height:e.height-this.opt.margin[0]-this.opt.margin[2]},e.inner.px={width:t(e.inner.width,e.k),height:t(e.inner.height,e.k)},e.inner.ratio=e.inner.height\u002Fe.inner.width),this.prop.pageSize=e}))},A.prototype.setProgress=function(e,t,r,n){return null!=e&&(this.progress.val=e),null!=t&&(this.progress.state=t),null!=r&&(this.progress.n=r),null!=n&&(this.progress.stack=n),this.progress.ratio=this.progress.val\u002Fthis.progress.state,this},A.prototype.updateProgress=function(e,t,r,n){return this.setProgress(e?this.progress.val+e:null,t||null,r?this.progress.n+r:null,n?this.progress.stack.concat(n):null)},A.prototype.then=function(e,t){var r=this;return this.thenCore(e,t,(function(e,t){return r.updateProgress(null,null,1,[e]),Promise.prototype.then.call(this,(function(t){return r.updateProgress(null,e),t})).then(e,t).then((function(e){return r.updateProgress(1),e}))}))},A.prototype.thenCore=function(e,t,r){r=r||Promise.prototype.then,e&&(e=e.bind(this)),t&&(t=t.bind(this));var n=-1!==Promise.toString().indexOf(\"[native code]\")&&\"Promise\"===Promise.name?this:A.convert(Object.assign({},this),Promise.prototype),o=r.call(n,e,t);return A.convert(o,this.__proto__)},A.prototype.thenExternal=function(e,t){return Promise.prototype.then.call(this,e,t)},A.prototype.thenList=function(e){var t=this;return e.forEach((function(e){t=t.thenCore(e)})),t},A.prototype.catch=function(e){e&&(e=e.bind(this));var t=Promise.prototype.catch.call(this,e);return A.convert(t,this)},A.prototype.catchExternal=function(e){return Promise.prototype.catch.call(this,e)},A.prototype.error=function(e){return this.then((function(){throw new Error(e)}))},A.prototype.using=A.prototype.set,A.prototype.saveAs=A.prototype.save,A.prototype.export=A.prototype.output,A.prototype.run=A.prototype.then,H.getPageSize=function(e,t,r){if(\"object\"==typeof e){var n=e;e=n.orientation,t=n.unit||t,r=n.format||r}t=t||\"mm\",r=r||\"a4\",e=(\"\"+(e||\"P\")).toLowerCase();var o,s=(\"\"+r).toLowerCase(),i={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],\"government-letter\":[576,756],legal:[612,1008],\"junior-legal\":[576,360],ledger:[1224,792],tabloid:[792,1224],\"credit-card\":[153,243]};switch(t){case\"pt\":o=1;break;case\"mm\":o=72\u002F25.4;break;case\"cm\":o=72\u002F2.54;break;case\"in\":o=72;break;case\"px\":o=.75;break;case\"pc\":case\"em\":o=12;break;case\"ex\":o=6;break;default:throw\"Invalid unit: \"+t}var a,A=0,u=0;if(i.hasOwnProperty(s))A=i[s][1]\u002Fo,u=i[s][0]\u002Fo;else try{A=r[1],u=r[0]}catch(e){throw new Error(\"Invalid format: \"+r)}if(\"p\"===e||\"portrait\"===e)e=\"p\",u>A&&(a=u,u=A,A=a);else{if(\"l\"!==e&&\"landscape\"!==e)throw\"Invalid orientation: \"+e;e=\"l\",A>u&&(a=u,u=A,A=a)}return{width:u,height:A,unit:t,k:o,orientation:e}},e.html=function(e,t){(t=t||{}).callback=t.callback||function(){},t.html2canvas=t.html2canvas||{},t.html2canvas.canvas=t.html2canvas.canvas||this.canvas,t.jsPDF=t.jsPDF||this,t.fontFaces=t.fontFaces?t.fontFaces.map(Ue):null;var r=new A(t);return t.worker?r:r.from(e).doCallback()}}(H.API),H.API.addJS=function(e){return Me=e,this.internal.events.subscribe(\"postPutResources\",(function(){ke=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FNames [(EmbeddedJS) \"+(ke+1)+\" 0 R]\"),this.internal.out(\">>\"),this.internal.out(\"endobj\"),Re=this.internal.newObject(),this.internal.out(\"\u003C\u003C\"),this.internal.out(\"\u002FS \u002FJavaScript\"),this.internal.out(\"\u002FJS (\"+Me+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")})),this.internal.events.subscribe(\"putCatalog\",(function(){void 0!==ke&&void 0!==Re&&this.internal.out(\"\u002FNames \u003C\u003C\u002FJavaScript \"+ke+\" 0 R>>\")})),this},function(e){var t;e.events.push([\"postPutResources\",function(){var e=this,r=\u002F^(\\d+) 0 obj$\u002F;if(this.outline.root.children.length>0)for(var n=e.outline.render().split(\u002F\\r\\n\u002F),o=0;o\u003Cn.length;o++){var s=n[o],i=r.exec(s);if(null!=i){var a=i[1];e.internal.newObjectDeferredBegin(a,!1)}e.internal.write(s)}if(this.outline.createNamedDestinations){var A=this.internal.pages.length,u=[];for(o=0;o\u003CA;o++){var c=e.internal.newObject();u.push(c);var l=e.internal.getPageInfo(o+1);e.internal.write(\"\u003C\u003C \u002FD[\"+l.objId+\" 0 R \u002FXYZ null null null]>> endobj\")}var d=e.internal.newObject();for(e.internal.write(\"\u003C\u003C \u002FNames [ \"),o=0;o\u003Cu.length;o++)e.internal.write(\"(page_\"+(o+1)+\")\"+u[o]+\" 0 R\");e.internal.write(\" ] >>\",\"endobj\"),t=e.internal.newObject(),e.internal.write(\"\u003C\u003C \u002FDests \"+d+\" 0 R\"),e.internal.write(\">>\",\"endobj\")}}]),e.events.push([\"putCatalog\",function(){this.outline.root.children.length>0&&(this.internal.write(\"\u002FOutlines\",this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&this.internal.write(\"\u002FNames \"+t+\" 0 R\"))}]),e.events.push([\"initialized\",function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(e,t,r){var n={title:t,options:r,children:[]};return null==e&&(e=this.root),e.children.push(n),n},e.outline.render=function(){return this.ctx={},this.ctx.val=\"\",this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(t){t.id=e.internal.newObjectDeferred();for(var r=0;r\u003Ct.children.length;r++)this.genIds_r(t.children[r])},e.outline.renderRoot=function(e){this.objStart(e),this.line(\"\u002FType \u002FOutlines\"),e.children.length>0&&(this.line(\"\u002FFirst \"+this.makeRef(e.children[0])),this.line(\"\u002FLast \"+this.makeRef(e.children[e.children.length-1]))),this.line(\"\u002FCount \"+this.count_r({count:0},e)),this.objEnd()},e.outline.renderItems=function(t){for(var r=this.ctx.pdf.internal.getVerticalCoordinateString,n=0;n\u003Ct.children.length;n++){var o=t.children[n];this.objStart(o),this.line(\"\u002FTitle \"+this.makeString(o.title)),this.line(\"\u002FParent \"+this.makeRef(t)),n>0&&this.line(\"\u002FPrev \"+this.makeRef(t.children[n-1])),n\u003Ct.children.length-1&&this.line(\"\u002FNext \"+this.makeRef(t.children[n+1])),o.children.length>0&&(this.line(\"\u002FFirst \"+this.makeRef(o.children[0])),this.line(\"\u002FLast \"+this.makeRef(o.children[o.children.length-1])));var s=this.count=this.count_r({count:0},o);if(s>0&&this.line(\"\u002FCount \"+s),o.options&&o.options.pageNumber){var i=e.internal.getPageInfo(o.options.pageNumber);this.line(\"\u002FDest [\"+i.objId+\" 0 R \u002FXYZ 0 \"+r(0)+\" 0]\")}this.objEnd()}for(var a=0;a\u003Ct.children.length;a++)this.renderItems(t.children[a])},e.outline.line=function(e){this.ctx.val+=e+\"\\r\\n\"},e.outline.makeRef=function(e){return e.id+\" 0 R\"},e.outline.makeString=function(t){return\"(\"+e.internal.pdfEscape(t)+\")\"},e.outline.objStart=function(e){this.ctx.val+=\"\\r\\n\"+e.id+\" 0 obj\\r\\n\u003C\u003C\\r\\n\"},e.outline.objEnd=function(){this.ctx.val+=\">> \\r\\nendobj\\r\\n\"},e.outline.count_r=function(e,t){for(var r=0;r\u003Ct.children.length;r++)e.count++,this.count_r(e,t.children[r]);return e.count}}])}(H.API),function(e){var t=[192,193,194,195,196,197,198,199];e.processJPEG=function(e,r,n,o,s,i){var a,A=this.decode.DCT_DECODE,u=null;if(\"string\"==typeof e||this.__addimage__.isArrayBuffer(e)||this.__addimage__.isArrayBufferView(e)){switch(e=s||e,e=this.__addimage__.isArrayBuffer(e)?new Uint8Array(e):e,(a=function(e){for(var r,n=256*e.charCodeAt(4)+e.charCodeAt(5),o=e.length,s={width:0,height:0,numcomponents:1},i=4;i\u003Co;i+=2){if(i+=n,-1!==t.indexOf(e.charCodeAt(i+1))){r=256*e.charCodeAt(i+5)+e.charCodeAt(i+6),s={width:256*e.charCodeAt(i+7)+e.charCodeAt(i+8),height:r,numcomponents:e.charCodeAt(i+9)};break}n=256*e.charCodeAt(i+2)+e.charCodeAt(i+3)}return s}(e=this.__addimage__.isArrayBufferView(e)?this.__addimage__.arrayBufferToBinaryString(e):e)).numcomponents){case 1:i=this.color_spaces.DEVICE_GRAY;break;case 4:i=this.color_spaces.DEVICE_CMYK;break;case 3:i=this.color_spaces.DEVICE_RGB}u={data:e,width:a.width,height:a.height,colorSpace:i,bitsPerComponent:8,filter:A,index:r,alias:n}}return u}}(H.API);var Ke,ze,Ve,qe,Ge,Xe=function(){var e,t,r;function s(e){var t,r,n,o,s,i,a,A,u,c,l,d,f,h;for(this.data=e,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.animation=null,this.text={},i=null;;){switch(t=this.readUInt32(),u=function(){var e,t;for(t=[],e=0;e\u003C4;++e)t.push(String.fromCharCode(this.data[this.pos++]));return t}.call(this).join(\"\")){case\"IHDR\":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case\"acTL\":this.animation={numFrames:this.readUInt32(),numPlays:this.readUInt32()||1\u002F0,frames:[]};break;case\"PLTE\":this.palette=this.read(t);break;case\"fcTL\":i&&this.animation.frames.push(i),this.pos+=4,i={width:this.readUInt32(),height:this.readUInt32(),xOffset:this.readUInt32(),yOffset:this.readUInt32()},s=this.readUInt16(),o=this.readUInt16()||100,i.delay=1e3*s\u002Fo,i.disposeOp=this.data[this.pos++],i.blendOp=this.data[this.pos++],i.data=[];break;case\"IDAT\":case\"fdAT\":for(\"fdAT\"===u&&(this.pos+=4,t-=4),e=(null!=i?i.data:void 0)||this.imgData,d=0;0\u003C=t?d\u003Ct:d>t;0\u003C=t?++d:--d)e.push(this.data[this.pos++]);break;case\"tRNS\":switch(this.transparency={},this.colorType){case 3:if(n=this.palette.length\u002F3,this.transparency.indexed=this.read(t),this.transparency.indexed.length>n)throw new Error(\"More transparent colors than palette size\");if((c=n-this.transparency.indexed.length)>0)for(f=0;0\u003C=c?f\u003Cc:f>c;0\u003C=c?++f:--f)this.transparency.indexed.push(255);break;case 0:this.transparency.grayscale=this.read(t)[0];break;case 2:this.transparency.rgb=this.read(t)}break;case\"tEXt\":a=(l=this.read(t)).indexOf(0),A=String.fromCharCode.apply(String,l.slice(0,a)),this.text[A]=String.fromCharCode.apply(String,l.slice(a+1));break;case\"IEND\":return i&&this.animation.frames.push(i),this.colors=function(){switch(this.colorType){case 0:case 3:case 4:return 1;case 2:case 6:return 3}}.call(this),this.hasAlphaChannel=4===(h=this.colorType)||6===h,r=this.colors+(this.hasAlphaChannel?1:0),this.pixelBitlength=this.bits*r,this.colorSpace=function(){switch(this.colors){case 1:return\"DeviceGray\";case 3:return\"DeviceRGB\"}}.call(this),void(this.imgData=new Uint8Array(this.imgData));default:this.pos+=t}if(this.pos+=4,this.pos>this.data.length)throw new Error(\"Incomplete or corrupt PNG file\")}}s.prototype.read=function(e){var t,r;for(r=[],t=0;0\u003C=e?t\u003Ce:t>e;0\u003C=e?++t:--t)r.push(this.data[this.pos++]);return r},s.prototype.readUInt32=function(){return this.data[this.pos++]\u003C\u003C24|this.data[this.pos++]\u003C\u003C16|this.data[this.pos++]\u003C\u003C8|this.data[this.pos++]},s.prototype.readUInt16=function(){return this.data[this.pos++]\u003C\u003C8|this.data[this.pos++]},s.prototype.decodePixels=function(e){var t=this.pixelBitlength\u002F8,r=new Uint8Array(this.width*this.height*t),o=0,s=this;if(null==e&&(e=this.imgData),0===e.length)return new Uint8Array(0);function i(n,i,a,A){var u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F=Math.ceil((s.width-n)\u002Fa),U=Math.ceil((s.height-i)\u002FA),S=s.width==F&&s.height==U;for(B=t*F,w=S?r:new Uint8Array(B*U),h=e.length,b=0,c=0;b\u003CU&&o\u003Ch;){switch(e[o++]){case 0:for(d=C=0;C\u003CB;d=C+=1)w[c++]=e[o++];break;case 1:for(d=x=0;x\u003CB;d=x+=1)u=e[o++],f=d\u003Ct?0:w[c-t],w[c++]=(u+f)%256;break;case 2:for(d=E=0;E\u003CB;d=E+=1)u=e[o++],l=(d-d%t)\u002Ft,j=b&&w[(b-1)*B+l*t+d%t],w[c++]=(j+u)%256;break;case 3:for(d=N=0;N\u003CB;d=N+=1)u=e[o++],l=(d-d%t)\u002Ft,f=d\u003Ct?0:w[c-t],j=b&&w[(b-1)*B+l*t+d%t],w[c++]=(u+Math.floor((f+j)\u002F2))%256;break;case 4:for(d=Q=0;Q\u003CB;d=Q+=1)u=e[o++],l=(d-d%t)\u002Ft,f=d\u003Ct?0:w[c-t],0===b?j=_=0:(j=w[(b-1)*B+l*t+d%t],_=l&&w[(b-1)*B+(l-1)*t+d%t]),p=f+j-_,m=Math.abs(p-f),y=Math.abs(p-j),v=Math.abs(p-_),g=m\u003C=y&&m\u003C=v?f:y\u003C=v?j:_,w[c++]=(u+g)%256;break;default:throw new Error(\"Invalid filter algorithm: \"+e[o-1])}if(!S){var L=((i+b*A)*s.width+n)*t,T=b*B;for(d=0;d\u003CF;d+=1){for(var H=0;H\u003Ct;H+=1)r[L++]=w[T++];L+=(a-1)*t}}b++}}return e=(0,n.unzlibSync)(e),1==s.interlaceMethod?(i(0,0,8,8),i(4,0,8,8),i(0,4,4,8),i(2,0,4,4),i(0,2,2,4),i(1,0,2,2),i(0,1,1,2)):i(0,0,1,1),r},s.prototype.decodePalette=function(){var e,t,r,n,o,s,i,a,A;for(r=this.palette,s=this.transparency.indexed||[],o=new Uint8Array((s.length||0)+r.length),n=0,e=0,t=i=0,a=r.length;i\u003Ca;t=i+=3)o[n++]=r[t],o[n++]=r[t+1],o[n++]=r[t+2],o[n++]=null!=(A=s[e++])?A:255;return o},s.prototype.copyToImageData=function(e,t){var r,n,o,s,i,a,A,u,c,l,d;if(n=this.colors,c=null,r=this.hasAlphaChannel,this.palette.length&&(c=null!=(d=this._decodedPalette)?d:this._decodedPalette=this.decodePalette(),n=4,r=!0),u=(o=e.data||e).length,i=c||t,s=a=0,1===n)for(;s\u003Cu;)A=c?4*t[s\u002F4]:a,l=i[A++],o[s++]=l,o[s++]=l,o[s++]=l,o[s++]=r?i[A++]:255,a=A;else for(;s\u003Cu;)A=c?4*t[s\u002F4]:a,o[s++]=i[A++],o[s++]=i[A++],o[s++]=i[A++],o[s++]=r?i[A++]:255,a=A},s.prototype.decode=function(){var e;return e=new Uint8Array(this.width*this.height*4),this.copyToImageData(e,this.decodePixels()),e};var i=function(){if(\"[object Window]\"===Object.prototype.toString.call(o)){try{t=o.document.createElement(\"canvas\"),r=t.getContext(\"2d\")}catch(e){return!1}return!0}return!1};return i(),e=function(e){var n;if(!0===i())return r.width=e.width,r.height=e.height,r.clearRect(0,0,e.width,e.height),r.putImageData(e,0,0),(n=new Image).src=t.toDataURL(),n;throw new Error(\"This method requires a Browser with Canvas-capability.\")},s.prototype.decodeFrames=function(t){var r,n,o,s,i,a,A,u;if(this.animation){for(u=[],n=i=0,a=(A=this.animation.frames).length;i\u003Ca;n=++i)r=A[n],o=t.createImageData(r.width,r.height),s=this.decodePixels(new Uint8Array(r.data)),this.copyToImageData(o,s),r.imageData=o,u.push(r.image=e(o));return u}},s.prototype.renderFrame=function(e,t){var r,n,o;return r=(n=this.animation.frames)[t],o=n[t-1],0===t&&e.clearRect(0,0,this.width,this.height),1===(null!=o?o.disposeOp:void 0)?e.clearRect(o.xOffset,o.yOffset,o.width,o.height):2===(null!=o?o.disposeOp:void 0)&&e.putImageData(o.imageData,o.xOffset,o.yOffset),0===r.blendOp&&e.clearRect(r.xOffset,r.yOffset,r.width,r.height),e.drawImage(r.image,r.xOffset,r.yOffset)},s.prototype.animate=function(e){var t,r,n,o,s,i,a=this;return r=0,i=this.animation,o=i.numFrames,n=i.frames,s=i.numPlays,(t=function(){var i,A;if(i=r++%o,A=n[i],a.renderFrame(e,i),o>1&&r\u002Fo\u003Cs)return a.animation._timeout=setTimeout(t,A.delay)})()},s.prototype.stopAnimation=function(){var e;return clearTimeout(null!=(e=this.animation)?e._timeout:void 0)},s.prototype.render=function(e){var t,r;return e._png&&e._png.stopAnimation(),e._png=this,e.width=this.width,e.height=this.height,t=e.getContext(\"2d\"),this.animation?(this.decodeFrames(t),this.animate(t)):(r=t.createImageData(this.width,this.height),this.copyToImageData(r,this.decodePixels()),t.putImageData(r,0,0))},s}();function We(e){var t=0;if(71!==e[t++]||73!==e[t++]||70!==e[t++]||56!==e[t++]||56!=(e[t++]+1&253)||97!==e[t++])throw new Error(\"Invalid GIF 87a\u002F89a header.\");var r=e[t++]|e[t++]\u003C\u003C8,n=e[t++]|e[t++]\u003C\u003C8,o=e[t++],s=o>>7,i=1\u003C\u003C1+(7&o);e[t++],e[t++];var a=null,A=null;s&&(a=t,A=i,t+=3*i);var u=!0,c=[],l=0,d=null,f=0,h=null;for(this.width=r,this.height=n;u&&t\u003Ce.length;)switch(e[t++]){case 33:switch(e[t++]){case 255:if(11!==e[t]||78==e[t+1]&&69==e[t+2]&&84==e[t+3]&&83==e[t+4]&&67==e[t+5]&&65==e[t+6]&&80==e[t+7]&&69==e[t+8]&&50==e[t+9]&&46==e[t+10]&&48==e[t+11]&&3==e[t+12]&&1==e[t+13]&&0==e[t+16])t+=14,h=e[t++]|e[t++]\u003C\u003C8,t++;else for(t+=12;;){if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}break;case 249:if(4!==e[t++]||0!==e[t+4])throw new Error(\"Invalid graphics extension block.\");var p=e[t++];l=e[t++]|e[t++]\u003C\u003C8,d=e[t++],0==(1&p)&&(d=null),f=p>>2&7,t++;break;case 254:for(;;){if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}break;default:throw new Error(\"Unknown graphic control label: 0x\"+e[t-1].toString(16))}break;case 44:var m=e[t++]|e[t++]\u003C\u003C8,g=e[t++]|e[t++]\u003C\u003C8,y=e[t++]|e[t++]\u003C\u003C8,v=e[t++]|e[t++]\u003C\u003C8,w=e[t++],b=w>>6&1,B=1\u003C\u003C1+(7&w),j=a,_=A,C=!1;w>>7&&(C=!0,j=t,_=B,t+=3*B);var x=t;for(t++;;){var E;if(!((E=e[t++])>=0))throw Error(\"Invalid block size\");if(0===E)break;t+=E}c.push({x:m,y:g,width:y,height:v,has_local_palette:C,palette_offset:j,palette_size:_,data_offset:x,data_length:t-x,transparent_index:d,interlaced:!!b,delay:l,disposal:f});break;case 59:u=!1;break;default:throw new Error(\"Unknown gif block: 0x\"+e[t-1].toString(16))}this.numFrames=function(){return c.length},this.loopCount=function(){return h},this.frameInfo=function(e){if(e\u003C0||e>=c.length)throw new Error(\"Frame index out of range.\");return c[e]},this.decodeAndBlitFrameBGRA=function(t,n){var o=this.frameInfo(t),s=o.width*o.height,i=new Uint8Array(s);Je(e,o.data_offset,i,s);var a=o.palette_offset,A=o.transparent_index;null===A&&(A=256);var u=o.width,c=r-u,l=u,d=4*(o.y*r+o.x),f=4*((o.y+o.height)*r+o.x),h=d,p=4*c;!0===o.interlaced&&(p+=4*r*7);for(var m=8,g=0,y=i.length;g\u003Cy;++g){var v=i[g];if(0===l&&(l=u,(h+=p)>=f&&(p=4*c+4*r*(m-1),h=d+(u+c)*(m\u003C\u003C1),m>>=1)),v===A)h+=4;else{var w=e[a+3*v],b=e[a+3*v+1],B=e[a+3*v+2];n[h++]=B,n[h++]=b,n[h++]=w,n[h++]=255}--l}},this.decodeAndBlitFrameRGBA=function(t,n){var o=this.frameInfo(t),s=o.width*o.height,i=new Uint8Array(s);Je(e,o.data_offset,i,s);var a=o.palette_offset,A=o.transparent_index;null===A&&(A=256);var u=o.width,c=r-u,l=u,d=4*(o.y*r+o.x),f=4*((o.y+o.height)*r+o.x),h=d,p=4*c;!0===o.interlaced&&(p+=4*r*7);for(var m=8,g=0,y=i.length;g\u003Cy;++g){var v=i[g];if(0===l&&(l=u,(h+=p)>=f&&(p=4*c+4*r*(m-1),h=d+(u+c)*(m\u003C\u003C1),m>>=1)),v===A)h+=4;else{var w=e[a+3*v],b=e[a+3*v+1],B=e[a+3*v+2];n[h++]=w,n[h++]=b,n[h++]=B,n[h++]=255}--l}}}function Je(e,t,r,n){for(var o=e[t++],s=1\u003C\u003Co,a=s+1,A=a+1,u=o+1,c=(1\u003C\u003Cu)-1,l=0,d=0,f=0,h=e[t++],p=new Int32Array(4096),m=null;;){for(;l\u003C16&&0!==h;)d|=e[t++]\u003C\u003Cl,l+=8,1===h?h=e[t++]:--h;if(l\u003Cu)break;var g=d&c;if(d>>=u,l-=u,g!==s){if(g===a)break;for(var y=g\u003CA?g:m,v=0,w=y;w>s;)w=p[w]>>8,++v;var b=w;if(f+v+(y!==g?1:0)>n)return void i.log(\"Warning, gif stream longer than expected.\");r[f++]=b;var B=f+=v;for(y!==g&&(r[f++]=b),w=y;v--;)w=p[w],r[--B]=255&w,w>>=8;null!==m&&A\u003C4096&&(p[A++]=m\u003C\u003C8|b,A>=c+1&&u\u003C12&&(++u,c=c\u003C\u003C1|1)),m=g}else A=a+1,c=(1\u003C\u003C(u=o+1))-1,m=null}return f!==n&&i.log(\"Warning, gif stream shorter than expected.\"),r}function Ye(e){var t,r,n,o,s,i=Math.floor,a=new Array(64),A=new Array(64),u=new Array(64),c=new Array(64),l=new Array(65535),d=new Array(65535),f=new Array(64),h=new Array(64),p=[],m=0,g=7,y=new Array(64),v=new Array(64),w=new Array(64),b=new Array(256),B=new Array(2048),j=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],_=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],C=[0,1,2,3,4,5,6,7,8,9,10,11],x=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],E=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],N=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],Q=[0,1,2,3,4,5,6,7,8,9,10,11],F=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],U=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function S(e,t){for(var r=0,n=0,o=new Array,s=1;s\u003C=16;s++){for(var i=1;i\u003C=e[s];i++)o[t[n]]=[],o[t[n]][0]=r,o[t[n]][1]=s,n++,r++;r*=2}return o}function L(e){for(var t=e[0],r=e[1]-1;r>=0;)t&1\u003C\u003Cr&&(m|=1\u003C\u003Cg),r--,--g\u003C0&&(255==m?(T(255),T(0)):T(m),g=7,m=0)}function T(e){p.push(e)}function H(e){T(e>>8&255),T(255&e)}function I(e,t,r,n,o){for(var s,i=o[0],a=o[240],A=function(e,t){var r,n,o,s,i,a,A,u,c,l,d=0;for(c=0;c\u003C8;++c){r=e[d],n=e[d+1],o=e[d+2],s=e[d+3],i=e[d+4],a=e[d+5],A=e[d+6];var h=r+(u=e[d+7]),p=r-u,m=n+A,g=n-A,y=o+a,v=o-a,w=s+i,b=s-i,B=h+w,j=h-w,_=m+y,C=m-y;e[d]=B+_,e[d+4]=B-_;var x=.707106781*(C+j);e[d+2]=j+x,e[d+6]=j-x;var E=.382683433*((B=b+v)-(C=g+p)),N=.5411961*B+E,Q=1.306562965*C+E,F=.707106781*(_=v+g),U=p+F,S=p-F;e[d+5]=S+N,e[d+3]=S-N,e[d+1]=U+Q,e[d+7]=U-Q,d+=8}for(d=0,c=0;c\u003C8;++c){r=e[d],n=e[d+8],o=e[d+16],s=e[d+24],i=e[d+32],a=e[d+40],A=e[d+48];var L=r+(u=e[d+56]),T=r-u,H=n+A,I=n-A,P=o+a,O=o-a,k=s+i,R=s-i,M=L+k,D=L-k,K=H+P,z=H-P;e[d]=M+K,e[d+32]=M-K;var V=.707106781*(z+D);e[d+16]=D+V,e[d+48]=D-V;var q=.382683433*((M=R+O)-(z=I+T)),G=.5411961*M+q,X=1.306562965*z+q,W=.707106781*(K=O+I),J=T+W,Y=T-W;e[d+40]=Y+G,e[d+24]=Y-G,e[d+8]=J+X,e[d+56]=J-X,d++}for(c=0;c\u003C64;++c)l=e[c]*t[c],f[c]=l>0?l+.5|0:l-.5|0;return f}(e,t),u=0;u\u003C64;++u)h[j[u]]=A[u];var c=h[0]-r;r=h[0],0==c?L(n[0]):(L(n[d[s=32767+c]]),L(l[s]));for(var p=63;p>0&&0==h[p];)p--;if(0==p)return L(i),r;for(var m,g=1;g\u003C=p;){for(var y=g;0==h[g]&&g\u003C=p;)++g;var v=g-y;if(v>=16){m=v>>4;for(var w=1;w\u003C=m;++w)L(a);v&=15}s=32767+h[g],L(o[(v\u003C\u003C4)+d[s]]),L(l[s]),g++}return 63!=p&&L(i),r}function P(e){e=Math.min(Math.max(e,1),100),s!=e&&(function(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],r=0;r\u003C64;r++){var n=i((t[r]*e+50)\u002F100);n=Math.min(Math.max(n,1),255),a[j[r]]=n}for(var o=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],s=0;s\u003C64;s++){var l=i((o[s]*e+50)\u002F100);l=Math.min(Math.max(l,1),255),A[j[s]]=l}for(var d=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],f=0,h=0;h\u003C8;h++)for(var p=0;p\u003C8;p++)u[f]=1\u002F(a[j[f]]*d[h]*d[p]*8),c[f]=1\u002F(A[j[f]]*d[h]*d[p]*8),f++}(e\u003C50?Math.floor(5e3\u002Fe):Math.floor(200-2*e)),s=e)}this.encode=function(e,s){s&&P(s),p=new Array,m=0,g=7,H(65496),H(65504),H(16),T(74),T(70),T(73),T(70),T(0),T(1),T(1),T(0),H(1),H(1),T(0),T(0),function(){H(65499),H(132),T(0);for(var e=0;e\u003C64;e++)T(a[e]);T(1);for(var t=0;t\u003C64;t++)T(A[t])}(),function(e,t){H(65472),H(17),T(8),H(t),H(e),T(3),T(1),T(17),T(0),T(2),T(17),T(1),T(3),T(17),T(1)}(e.width,e.height),function(){H(65476),H(418),T(0);for(var e=0;e\u003C16;e++)T(_[e+1]);for(var t=0;t\u003C=11;t++)T(C[t]);T(16);for(var r=0;r\u003C16;r++)T(x[r+1]);for(var n=0;n\u003C=161;n++)T(E[n]);T(1);for(var o=0;o\u003C16;o++)T(N[o+1]);for(var s=0;s\u003C=11;s++)T(Q[s]);T(17);for(var i=0;i\u003C16;i++)T(F[i+1]);for(var a=0;a\u003C=161;a++)T(U[a])}(),H(65498),H(12),T(3),T(1),T(0),T(2),T(17),T(3),T(17),T(0),T(63),T(0);var i=0,l=0,d=0;m=0,g=7,this.encode.displayName=\"_encode_\";for(var f,h,b,j,S,O,k,R,M,D=e.data,K=e.width,z=e.height,V=4*K,q=0;q\u003Cz;){for(f=0;f\u003CV;){for(S=V*q+f,k=-1,R=0,M=0;M\u003C64;M++)O=S+(R=M>>3)*V+(k=4*(7&M)),q+R>=z&&(O-=V*(q+1+R-z)),f+k>=V&&(O-=f+k-V+4),h=D[O++],b=D[O++],j=D[O++],y[M]=(B[h]+B[b+256>>0]+B[j+512>>0]>>16)-128,v[M]=(B[h+768>>0]+B[b+1024>>0]+B[j+1280>>0]>>16)-128,w[M]=(B[h+1280>>0]+B[b+1536>>0]+B[j+1792>>0]>>16)-128;i=I(y,u,i,t,n),l=I(v,c,l,r,o),d=I(w,c,d,r,o),f+=32}q+=8}if(g>=0){var G=[];G[1]=g+1,G[0]=(1\u003C\u003Cg+1)-1,L(G)}return H(65497),new Uint8Array(p)},e=e||50,function(){for(var e=String.fromCharCode,t=0;t\u003C256;t++)b[t]=e(t)}(),t=S(_,C),r=S(N,Q),n=S(x,E),o=S(F,U),function(){for(var e=1,t=2,r=1;r\u003C=15;r++){for(var n=e;n\u003Ct;n++)d[32767+n]=r,l[32767+n]=[],l[32767+n][1]=r,l[32767+n][0]=n;for(var o=-(t-1);o\u003C=-e;o++)d[32767+o]=r,l[32767+o]=[],l[32767+o][1]=r,l[32767+o][0]=t-1+o;e\u003C\u003C=1,t\u003C\u003C=1}}(),function(){for(var e=0;e\u003C256;e++)B[e]=19595*e,B[e+256>>0]=38470*e,B[e+512>>0]=7471*e+32768,B[e+768>>0]=-11059*e,B[e+1024>>0]=-21709*e,B[e+1280>>0]=32768*e+8421375,B[e+1536>>0]=-27439*e,B[e+1792>>0]=-5329*e}(),P(e)}function Ze(e,t){if(this.pos=0,this.buffer=e,this.datav=new DataView(e.buffer),this.is_with_alpha=!!t,this.bottom_up=!0,this.flag=String.fromCharCode(this.buffer[0])+String.fromCharCode(this.buffer[1]),this.pos+=2,-1===[\"BM\",\"BA\",\"CI\",\"CP\",\"IC\",\"PT\"].indexOf(this.flag))throw new Error(\"Invalid BMP File\");this.parseHeader(),this.parseBGR()}function $e(e){function t(e){if(!e)throw Error(\"assert :P\")}function r(e,t,r){for(var n=0;4>n;n++)if(e[t+n]!=r.charCodeAt(n))return!0;return!1}function n(e,t,r,n,o){for(var s=0;s\u003Co;s++)e[t+s]=r[n+s]}function o(e,t,r,n){for(var o=0;o\u003Cn;o++)e[t+o]=r}function s(e){return new Int32Array(e)}function i(e,t){for(var r=[],n=0;n\u003Ce;n++)r.push(new t);return r}function a(e,t){var r=[];return function e(r,n,o){for(var s=o[n],i=0;i\u003Cs&&(r.push(o.length>n+1?[]:new t),!(o.length\u003Cn+1));i++)e(r[i],n+1,o)}(r,0,e),r}function A(e,t){for(var r=\"\",n=0;n\u003C4;n++)r+=String.fromCharCode(e[t++]);return r}function u(e,t){return(e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16)>>>0}function c(e,t){return(e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8|e[t+2]\u003C\u003C16|e[t+3]\u003C\u003C24)>>>0}new($e=function(){var e=this;function A(e,t){for(var r=1\u003C\u003Ct-1>>>0;e&r;)r>>>=1;return r?(e&r-1)+r:e}function u(e,r,n,o,s){t(!(o%n));do{e[r+(o-=n)]=s}while(0\u003Co)}function c(e,r,n,o,i){if(t(2328>=i),512>=i)var a=s(512);else if(null==(a=s(i)))return 0;return function(e,r,n,o,i,a){var c,d,f=r,h=1\u003C\u003Cn,p=s(16),m=s(16);for(t(0!=i),t(null!=o),t(null!=e),t(0\u003Cn),d=0;d\u003Ci;++d){if(15\u003Co[d])return 0;++p[o[d]]}if(p[0]==i)return 0;for(m[1]=0,c=1;15>c;++c){if(p[c]>1\u003C\u003Cc)return 0;m[c+1]=m[c]+p[c]}for(d=0;d\u003Ci;++d)c=o[d],0\u003Co[d]&&(a[m[c]++]=d);if(1==m[15])return(o=new l).g=0,o.value=a[0],u(e,f,1,h,o),h;var g,y=-1,v=h-1,w=0,b=1,B=1,j=1\u003C\u003Cn;for(d=0,c=1,i=2;c\u003C=n;++c,i\u003C\u003C=1){if(b+=B\u003C\u003C=1,0>(B-=p[c]))return 0;for(;0\u003Cp[c];--p[c])(o=new l).g=c,o.value=a[d++],u(e,f+w,i,j,o),w=A(w,c)}for(c=n+1,i=2;15>=c;++c,i\u003C\u003C=1){if(b+=B\u003C\u003C=1,0>(B-=p[c]))return 0;for(;0\u003Cp[c];--p[c]){if(o=new l,(w&v)!=y){for(f+=j,g=1\u003C\u003C(y=c)-n;15>y&&!(0>=(g-=p[y]));)++y,g\u003C\u003C=1;h+=j=1\u003C\u003C(g=y-n),e[r+(y=w&v)].g=g+n,e[r+y].value=f-r-y}o.g=c-n,o.value=a[d++],u(e,f+(w>>n),i,j,o),w=A(w,c)}}return b!=2*m[15]-1?0:h}(e,r,n,o,i,a)}function l(){this.value=this.g=0}function d(){this.value=this.g=0}function f(){this.G=i(5,l),this.H=s(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=i(Or,d)}function h(e,r,n,o){t(null!=e),t(null!=r),t(2147483648>o),e.Ca=254,e.I=0,e.b=-8,e.Ka=0,e.oa=r,e.pa=n,e.Jd=r,e.Yc=n+o,e.Zc=4\u003C=o?n+o-4+1:n,x(e)}function p(e,t){for(var r=0;0\u003Ct--;)r|=N(e,128)\u003C\u003Ct;return r}function m(e,t){var r=p(e,t);return E(e)?-r:r}function g(e,r,n,o){var s,i=0;for(t(null!=e),t(null!=r),t(4294967288>o),e.Sb=o,e.Ra=0,e.u=0,e.h=0,4\u003Co&&(o=4),s=0;s\u003Co;++s)i+=r[n+s]\u003C\u003C8*s;e.Ra=i,e.bb=o,e.oa=r,e.pa=n}function y(e){for(;8\u003C=e.u&&e.bb\u003Ce.Sb;)e.Ra>>>=8,e.Ra+=e.oa[e.pa+e.bb]\u003C\u003CMr-8>>>0,++e.bb,e.u-=8;j(e)&&(e.h=1,e.u=0)}function v(e,r){if(t(0\u003C=r),!e.h&&r\u003C=Rr){var n=B(e)&kr[r];return e.u+=r,y(e),n}return e.h=1,e.u=0}function w(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function b(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function B(e){return e.Ra>>>(e.u&Mr-1)>>>0}function j(e){return t(e.bb\u003C=e.Sb),e.h||e.bb==e.Sb&&e.u>Mr}function _(e,t){e.u=t,e.h=j(e)}function C(e){e.u>=Dr&&(t(e.u>=Dr),y(e))}function x(e){t(null!=e&&null!=e.oa),e.pa\u003Ce.Zc?(e.I=(e.oa[e.pa++]|e.I\u003C\u003C8)>>>0,e.b+=8):(t(null!=e&&null!=e.oa),e.pa\u003Ce.Yc?(e.b+=8,e.I=e.oa[e.pa++]|e.I\u003C\u003C8):e.Ka?e.b=0:(e.I\u003C\u003C=8,e.b+=8,e.Ka=1))}function E(e){return p(e,1)}function N(e,t){var r=e.Ca;0>e.b&&x(e);var n=e.b,o=r*t>>>8,s=(e.I>>>n>o)+0;for(s?(r-=o,e.I-=o+1\u003C\u003Cn>>>0):r=o+1,n=r,o=0;256\u003C=n;)o+=8,n>>=8;return n=7^o+Kr[n],e.b-=n,e.Ca=(r\u003C\u003Cn)-1,s}function Q(e,t,r){e[t+0]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=r>>0&255}function F(e,t){return e[t+0]\u003C\u003C0|e[t+1]\u003C\u003C8}function U(e,t){return F(e,t)|e[t+2]\u003C\u003C16}function S(e,t){return F(e,t)|F(e,t+2)\u003C\u003C16}function L(e,r){var n=1\u003C\u003Cr;return t(null!=e),t(0\u003Cr),e.X=s(n),null==e.X?0:(e.Mb=32-r,e.Xa=r,1)}function T(e,r){t(null!=e),t(null!=r),t(e.Xa==r.Xa),n(r.X,0,e.X,0,1\u003C\u003Cr.Xa)}function H(){this.X=[],this.Xa=this.Mb=0}function I(e,r,n,o){t(null!=n),t(null!=o);var s=n[0],i=o[0];return 0==s&&(s=(e*i+r\u002F2)\u002Fr),0==i&&(i=(r*s+e\u002F2)\u002Fe),0>=s||0>=i?0:(n[0]=s,o[0]=i,1)}function P(e,t){return e+(1\u003C\u003Ct)-1>>>t}function O(e,t){return((4278255360&e)+(4278255360&t)>>>0&4278255360)+((16711935&e)+(16711935&t)>>>0&16711935)>>>0}function k(t,r){e[r]=function(r,n,o,s,i,a,A){var u;for(u=0;u\u003Ci;++u){var c=e[t](a[A+u-1],o,s+u);a[A+u]=O(r[n+u],c)}}}function R(){this.ud=this.hd=this.jd=0}function M(e,t){return((4278124286&(e^t))>>>1)+(e&t)>>>0}function D(e){return 0\u003C=e&&256>e?e:0>e?0:255\u003Ce?255:void 0}function K(e,t){return D(e+(e-t+.5>>1))}function z(e,t,r){return Math.abs(t-r)-Math.abs(e-r)}function V(e,t,r,n,o,s,i){for(n=s[i-1],r=0;r\u003Co;++r)s[i+r]=n=O(e[t+r],n)}function q(e,t,r,n,o){var s;for(s=0;s\u003Cr;++s){var i=e[t+s],a=i>>8&255,A=16711935&(A=(A=16711935&i)+((a\u003C\u003C16)+a));n[o+s]=(4278255360&i)+A>>>0}}function G(e,t){t.jd=e>>0&255,t.hd=e>>8&255,t.ud=e>>16&255}function X(e,t,r,n,o,s){var i;for(i=0;i\u003Cn;++i){var a=t[r+i],A=a>>>8,u=a,c=255&(c=(c=a>>>16)+((e.jd\u003C\u003C24>>24)*(A\u003C\u003C24>>24)>>>5));u=255&(u=(u+=(e.hd\u003C\u003C24>>24)*(A\u003C\u003C24>>24)>>>5)+((e.ud\u003C\u003C24>>24)*(c\u003C\u003C24>>24)>>>5)),o[s+i]=(4278255360&a)+(c\u003C\u003C16)+u}}function W(t,r,n,o,s){e[r]=function(e,t,r,n,i,a,A,u,c){for(n=A;n\u003Cu;++n)for(A=0;A\u003Cc;++A)i[a++]=s(r[o(e[t++])])},e[t]=function(t,r,i,a,A,u,c){var l=8>>t.b,d=t.Ea,f=t.K[0],h=t.w;if(8>l)for(t=(1\u003C\u003Ct.b)-1,h=(1\u003C\u003Cl)-1;r\u003Ci;++r){var p,m=0;for(p=0;p\u003Cd;++p)p&t||(m=o(a[A++])),u[c++]=s(f[m&h]),m>>=l}else e[\"VP8LMapColor\"+n](a,A,f,h,u,c,r,i,d)}}function J(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>16&255,n[o++]=s>>8&255,n[o++]=s>>0&255}}function Y(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>16&255,n[o++]=s>>8&255,n[o++]=s>>0&255,n[o++]=s>>24&255}}function Z(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=(i=e[t++])>>16&240|i>>12&15,i=i>>0&240|i>>28&15;n[o++]=s,n[o++]=i}}function $(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=(i=e[t++])>>16&248|i>>13&7,i=i>>5&224|i>>3&31;n[o++]=s,n[o++]=i}}function ee(e,t,r,n,o){for(r=t+r;t\u003Cr;){var s=e[t++];n[o++]=s>>0&255,n[o++]=s>>8&255,n[o++]=s>>16&255}}function te(e,t,r,o,s,i){if(0==i)for(r=t+r;t\u003Cr;)Q(o,((i=e[t++])[0]>>24|i[1]>>8&65280|i[2]\u003C\u003C8&16711680|i[3]\u003C\u003C24)>>>0),s+=32;else n(o,s,e,t,r)}function re(t,r){e[r][0]=e[t+\"0\"],e[r][1]=e[t+\"1\"],e[r][2]=e[t+\"2\"],e[r][3]=e[t+\"3\"],e[r][4]=e[t+\"4\"],e[r][5]=e[t+\"5\"],e[r][6]=e[t+\"6\"],e[r][7]=e[t+\"7\"],e[r][8]=e[t+\"8\"],e[r][9]=e[t+\"9\"],e[r][10]=e[t+\"10\"],e[r][11]=e[t+\"11\"],e[r][12]=e[t+\"12\"],e[r][13]=e[t+\"13\"],e[r][14]=e[t+\"0\"],e[r][15]=e[t+\"0\"]}function ne(e){return e==Kn||e==zn||e==Vn||e==qn}function oe(){this.eb=[],this.size=this.A=this.fb=0}function se(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function ie(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new oe,this.f.kb=new se,this.sd=null}function ae(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function Ae(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function ue(e){return alert(\"todo:WebPSamplerProcessPlane\"),e.T}function ce(e,t){var r=e.T,o=t.ba.f.RGBA,s=o.eb,i=o.fb+e.ka*o.A,a=yo[t.ba.S],A=e.y,u=e.O,c=e.f,l=e.N,d=e.ea,f=e.W,h=t.cc,p=t.dc,m=t.Mc,g=t.Nc,y=e.ka,v=e.ka+e.T,w=e.U,b=w+1>>1;for(0==y?a(A,u,null,null,c,l,d,f,c,l,d,f,s,i,null,null,w):(a(t.ec,t.fc,A,u,h,p,m,g,c,l,d,f,s,i-o.A,s,i,w),++r);y+2\u003Cv;y+=2)h=c,p=l,m=d,g=f,l+=e.Rc,f+=e.Rc,i+=2*o.A,a(A,(u+=2*e.fa)-e.fa,A,u,h,p,m,g,c,l,d,f,s,i-o.A,s,i,w);return u+=e.fa,e.j+v\u003Ce.o?(n(t.ec,t.fc,A,u,w),n(t.cc,t.dc,c,l,b),n(t.Mc,t.Nc,d,f,b),r--):1&v||a(A,u,null,null,c,l,d,f,c,l,d,f,s,i+o.A,null,null,w),r}function le(e,r,n){var o=e.F,s=[e.J];if(null!=o){var i=e.U,a=r.ba.S,A=a==Rn||a==Vn;r=r.ba.f.RGBA;var u=[0],c=e.ka;u[0]=e.T,e.Kb&&(0==c?--u[0]:(--c,s[0]-=e.width),e.j+e.ka+e.T==e.o&&(u[0]=e.o-e.j-c));var l=r.eb;c=r.fb+c*r.A,e=Cn(o,s[0],e.width,i,u,l,c+(A?0:3),r.A),t(n==u),e&&ne(a)&&jn(l,c,A,i,u,r.A)}return 0}function de(e){var t=e.ma,r=t.ba.S,n=11>r,o=r==Pn||r==kn||r==Rn||r==Mn||12==r||ne(r);if(t.memory=null,t.Ib=null,t.Jb=null,t.Nd=null,!Hr(t.Oa,e,o?11:12))return 0;if(o&&ne(r)&&yr(),e.da)alert(\"todo:use_scaling\");else{if(n){if(t.Ib=ue,e.Kb){if(r=e.U+1>>1,t.memory=s(e.U+2*r),null==t.memory)return 0;t.ec=t.memory,t.fc=0,t.cc=t.ec,t.dc=t.fc+e.U,t.Mc=t.cc,t.Nc=t.dc+r,t.Ib=ce,yr()}}else alert(\"todo:EmitYUV\");o&&(t.Jb=le,n&&mr())}if(n&&!So){for(e=0;256>e;++e)Lo[e]=89858*(e-128)+Eo>>xo,Io[e]=-22014*(e-128)+Eo,Ho[e]=-45773*(e-128),To[e]=113618*(e-128)+Eo>>xo;for(e=No;e\u003CQo;++e)t=76283*(e-16)+Eo>>xo,Po[e-No]=Ve(t,255),Oo[e-No]=Ve(t+8>>4,15);So=1}return 1}function fe(e){var r=e.ma,n=e.U,o=e.T;return t(!(1&e.ka)),0>=n||0>=o?0:(n=r.Ib(e,r),null!=r.Jb&&r.Jb(e,r,n),r.Dc+=n,1)}function he(e){e.ma.memory=null}function pe(e,t,r,n){return 47!=v(e,8)?0:(t[0]=v(e,14)+1,r[0]=v(e,14)+1,n[0]=v(e,1),0!=v(e,3)?0:!e.h)}function me(e,t){if(4>e)return e+1;var r=e-2>>1;return(2+(1&e)\u003C\u003Cr)+v(t,r)+1}function ge(e,t){return 120\u003Ct?t-120:1\u003C=(r=((r=Zn[t-1])>>4)*e+(8-(15&r)))?r:1;var r}function ye(e,t,r){var n=B(r),o=e[t+=255&n].g-8;return 0\u003Co&&(_(r,r.u+8),n=B(r),t+=e[t].value,t+=n&(1\u003C\u003Co)-1),_(r,r.u+e[t].g),e[t].value}function ve(e,r,n){return n.g+=e.g,n.value+=e.value\u003C\u003Cr>>>0,t(8>=n.g),e.g}function we(e,r,n){var o=e.xc;return t((r=0==o?0:e.vc[e.md*(n>>o)+(r>>o)])\u003Ce.Wb),e.Ya[r]}function be(e,r,o,s){var i=e.ab,a=e.c*r,A=e.C;r=A+r;var u=o,c=s;for(s=e.Ta,o=e.Ua;0\u003Ci--;){var l=e.gc[i],d=A,f=r,h=u,p=c,m=(c=s,u=o,l.Ea);switch(t(d\u003Cf),t(f\u003C=l.nc),l.hc){case 2:qr(h,p,(f-d)*m,c,u);break;case 0:var g=d,y=f,v=c,w=u,b=(x=l).Ea;0==g&&(zr(h,p,null,null,1,v,w),V(h,p+1,0,0,b-1,v,w+1),p+=b,w+=b,++g);for(var B=1\u003C\u003Cx.b,j=B-1,_=P(b,x.b),C=x.K,x=x.w+(g>>x.b)*_;g\u003Cy;){var E=C,N=x,Q=1;for(Vr(h,p,v,w-b,1,v,w);Q\u003Cb;){var F=(Q&~j)+B;F>b&&(F=b),(0,Yr[E[N++]>>8&15])(h,p+ +Q,v,w+Q-b,F-Q,v,w+Q),Q=F}p+=b,w+=b,++g&j||(x+=_)}f!=l.nc&&n(c,u-m,c,u+(f-d-1)*m,m);break;case 1:for(m=h,y=p,b=(h=l.Ea)-(w=h&~(v=(p=1\u003C\u003Cl.b)-1)),g=P(h,l.b),B=l.K,l=l.w+(d>>l.b)*g;d\u003Cf;){for(j=B,_=l,C=new R,x=y+w,E=y+h;y\u003Cx;)G(j[_++],C),Zr(C,m,y,p,c,u),y+=p,u+=p;y\u003CE&&(G(j[_++],C),Zr(C,m,y,b,c,u),y+=b,u+=b),++d&v||(l+=g)}break;case 3:if(h==c&&p==u&&0\u003Cl.b){for(y=c,h=m=u+(f-d)*m-(w=(f-d)*P(l.Ea,l.b)),p=c,v=u,g=[],w=(b=w)-1;0\u003C=w;--w)g[w]=p[v+w];for(w=b-1;0\u003C=w;--w)y[h+w]=g[w];Gr(l,d,f,c,m,c,u)}else Gr(l,d,f,h,p,c,u)}u=s,c=o}c!=o&&n(s,o,u,c,a)}function Be(e,r){var n=e.V,o=e.Ba+e.c*e.C,s=r-e.C;if(t(r\u003C=e.l.o),t(16>=s),0\u003Cs){var i=e.l,a=e.Ta,A=e.Ua,u=i.width;if(be(e,s,n,o),s=A=[A],t((n=e.C)\u003C(o=r)),t(i.v\u003Ci.va),o>i.o&&(o=i.o),n\u003Ci.j){var c=i.j-n;n=i.j,s[0]+=c*u}if(n>=o?n=0:(s[0]+=4*i.v,i.ka=n-i.j,i.U=i.va-i.v,i.T=o-n,n=1),n){if(A=A[0],11>(n=e.ca).S){var l=n.f.RGBA,d=(o=n.S,s=i.U,i=i.T,c=l.eb,l.A),f=i;for(l=l.fb+e.Ma*l.A;0\u003Cf--;){var h=a,p=A,m=s,g=c,y=l;switch(o){case In:$r(h,p,m,g,y);break;case Pn:en(h,p,m,g,y);break;case Kn:en(h,p,m,g,y),jn(g,y,0,m,1,0);break;case On:nn(h,p,m,g,y);break;case kn:te(h,p,m,g,y,1);break;case zn:te(h,p,m,g,y,1),jn(g,y,0,m,1,0);break;case Rn:te(h,p,m,g,y,0);break;case Vn:te(h,p,m,g,y,0),jn(g,y,1,m,1,0);break;case Mn:tn(h,p,m,g,y);break;case qn:tn(h,p,m,g,y),_n(g,y,m,1,0);break;case Dn:rn(h,p,m,g,y);break;default:t(0)}A+=u,l+=d}e.Ma+=i}else alert(\"todo:EmitRescaledRowsYUVA\");t(e.Ma\u003C=n.height)}}e.C=r,t(e.C\u003C=e.i)}function je(e){var t;if(0\u003Ce.ua)return 0;for(t=0;t\u003Ce.Wb;++t){var r=e.Ya[t].G,n=e.Ya[t].H;if(0\u003Cr[1][n[1]+0].g||0\u003Cr[2][n[2]+0].g||0\u003Cr[3][n[3]+0].g)return 0}return 1}function _e(e,r,n,o,s,i){if(0!=e.Z){var a=e.qd,A=e.rd;for(t(null!=go[e.Z]);r\u003Cn;++r)go[e.Z](a,A,o,s,o,s,i),a=o,A=s,s+=i;e.qd=a,e.rd=A}}function Ce(e,r){var n=e.l.ma,o=0==n.Z||1==n.Z?e.l.j:e.C;if(o=e.C\u003Co?o:e.C,t(r\u003C=e.l.o),r>o){var s=e.l.width,i=n.ca,a=n.tb+s*o,A=e.V,u=e.Ba+e.c*o,c=e.gc;t(1==e.ab),t(3==c[0].hc),Wr(c[0],o,r,A,u,i,a),_e(n,o,r,i,a,s)}e.C=e.Ma=r}function xe(e,r,n,o,s,i,a){var A=e.$\u002Fo,u=e.$%o,c=e.m,l=e.s,d=n+e.$,f=d;s=n+o*s;var h=n+o*i,p=280+l.ua,m=e.Pb?A:16777216,g=0\u003Cl.ua?l.Wa:null,y=l.wc,v=d\u003Ch?we(l,u,A):null;t(e.C\u003Ci),t(h\u003C=s);var w=!1;e:for(;;){for(;w||d\u003Ch;){var b=0;if(A>=m){var x=d-n;t((m=e).Pb),m.wd=m.m,m.xd=x,0\u003Cm.s.ua&&T(m.s.Wa,m.s.vb),m=A+eo}if(u&y||(v=we(l,u,A)),t(null!=v),v.Qb&&(r[d]=v.qb,w=!0),!w)if(C(c),v.jc){b=c,x=r;var E=d,N=v.pd[B(b)&Or-1];t(v.jc),256>N.g?(_(b,b.u+N.g),x[E]=N.value,b=0):(_(b,b.u+N.g-256),t(256\u003C=N.value),b=N.value),0==b&&(w=!0)}else b=ye(v.G[0],v.H[0],c);if(c.h)break;if(w||256>b){if(!w)if(v.nd)r[d]=(v.qb|b\u003C\u003C8)>>>0;else{if(C(c),w=ye(v.G[1],v.H[1],c),C(c),x=ye(v.G[2],v.H[2],c),E=ye(v.G[3],v.H[3],c),c.h)break;r[d]=(E\u003C\u003C24|w\u003C\u003C16|b\u003C\u003C8|x)>>>0}if(w=!1,++d,++u>=o&&(u=0,++A,null!=a&&A\u003C=i&&!(A%16)&&a(e,A),null!=g))for(;f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b}else if(280>b){if(b=me(b-256,c),x=ye(v.G[4],v.H[4],c),C(c),x=ge(o,x=me(x,c)),c.h)break;if(d-n\u003Cx||s-d\u003Cb)break e;for(E=0;E\u003Cb;++E)r[d+E]=r[d+E-x];for(d+=b,u+=b;u>=o;)u-=o,++A,null!=a&&A\u003C=i&&!(A%16)&&a(e,A);if(t(d\u003C=s),u&y&&(v=we(l,u,A)),null!=g)for(;f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b}else{if(!(b\u003Cp))break e;for(w=b-280,t(null!=g);f\u003Cd;)b=r[f++],g.X[(506832829*b&4294967295)>>>g.Mb]=b;b=d,t(!(w>>>(x=g).Xa)),r[b]=x.X[w],w=!0}w||t(c.h==j(c))}if(e.Pb&&c.h&&d\u003Cs)t(e.m.h),e.a=5,e.m=e.wd,e.$=e.xd,0\u003Ce.s.ua&&T(e.s.vb,e.s.Wa);else{if(c.h)break e;null!=a&&a(e,A>i?i:A),e.a=0,e.$=d-n}return 1}return e.a=3,0}function Ee(e){t(null!=e),e.vc=null,e.yc=null,e.Ya=null;var r=e.Wa;null!=r&&(r.X=null),e.vb=null,t(null!=e)}function Ne(){var t=new ir;return null==t?null:(t.a=0,t.xb=mo,re(\"Predictor\",\"VP8LPredictors\"),re(\"Predictor\",\"VP8LPredictors_C\"),re(\"PredictorAdd\",\"VP8LPredictorsAdd\"),re(\"PredictorAdd\",\"VP8LPredictorsAdd_C\"),qr=q,Zr=X,$r=J,en=Y,tn=Z,rn=$,nn=ee,e.VP8LMapColor32b=Xr,e.VP8LMapColor8b=Jr,t)}function Qe(e,r,n,a,A){var u=1,d=[e],h=[r],p=a.m,m=a.s,g=null,y=0;e:for(;;){if(n)for(;u&&v(p,1);){var w=d,b=h,j=a,x=1,E=j.m,N=j.gc[j.ab],Q=v(E,2);if(j.Oc&1\u003C\u003CQ)u=0;else{switch(j.Oc|=1\u003C\u003CQ,N.hc=Q,N.Ea=w[0],N.nc=b[0],N.K=[null],++j.ab,t(4>=j.ab),Q){case 0:case 1:N.b=v(E,3)+2,x=Qe(P(N.Ea,N.b),P(N.nc,N.b),0,j,N.K),N.K=N.K[0];break;case 3:var F,U=v(E,8)+1,S=16\u003CU?0:4\u003CU?1:2\u003CU?2:3;if(w[0]=P(N.Ea,S),N.b=S,F=x=Qe(U,1,0,j,N.K)){var T,H=U,I=N,k=1\u003C\u003C(8>>I.b),R=s(k);if(null==R)F=0;else{var M=I.K[0],D=I.w;for(R[0]=I.K[0][0],T=1;T\u003C1*H;++T)R[T]=O(M[D+T],R[T-1]);for(;T\u003C4*k;++T)R[T]=0;I.K[0]=null,I.K[0]=R,F=1}}x=F;break;case 2:break;default:t(0)}u=x}}if(d=d[0],h=h[0],u&&v(p,1)&&!(u=1\u003C=(y=v(p,4))&&11>=y)){a.a=3;break e}var K;if(K=u)t:{var z,V,q,G=a,X=d,W=h,J=y,Y=n,Z=G.m,$=G.s,ee=[null],te=1,re=0,ne=$n[J];r:for(;;){if(Y&&v(Z,1)){var oe=v(Z,3)+2,se=P(X,oe),ie=P(W,oe),ae=se*ie;if(!Qe(se,ie,0,G,ee))break r;for(ee=ee[0],$.xc=oe,z=0;z\u003Cae;++z){var Ae=ee[z]>>8&65535;ee[z]=Ae,Ae>=te&&(te=Ae+1)}}if(Z.h)break r;for(V=0;5>V;++V){var ue=Wn[V];!V&&0\u003CJ&&(ue+=1\u003C\u003CJ),re\u003Cue&&(re=ue)}var ce=i(te*ne,l),le=te,de=i(le,f);if(null==de)var fe=null;else t(65536>=le),fe=de;var he=s(re);if(null==fe||null==he||null==ce){G.a=1;break r}var pe=ce;for(z=q=0;z\u003Cte;++z){var me=fe[z],ge=me.G,ye=me.H,we=0,be=1,Be=0;for(V=0;5>V;++V){ue=Wn[V],ge[V]=pe,ye[V]=q,!V&&0\u003CJ&&(ue+=1\u003C\u003CJ);n:{var je,_e=ue,Ce=G,Ne=he,Fe=pe,Ue=q,Se=0,Le=Ce.m,Te=v(Le,1);if(o(Ne,0,0,_e),Te){var He=v(Le,1)+1,Ie=v(Le,1),Pe=v(Le,0==Ie?1:8);Ne[Pe]=1,2==He&&(Ne[Pe=v(Le,8)]=1);var Oe=1}else{var ke=s(19),Re=v(Le,4)+4;if(19\u003CRe){Ce.a=3;var Me=0;break n}for(je=0;je\u003CRe;++je)ke[Yn[je]]=v(Le,3);var De=void 0,Ke=void 0,ze=Ce,Ve=ke,qe=_e,Ge=Ne,Xe=0,We=ze.m,Je=8,Ye=i(128,l);o:for(;c(Ye,0,7,Ve,19);){if(v(We,1)){var Ze=2+2*v(We,3);if((De=2+v(We,Ze))>qe)break o}else De=qe;for(Ke=0;Ke\u003Cqe&&De--;){C(We);var $e=Ye[0+(127&B(We))];_(We,We.u+$e.g);var et=$e.value;if(16>et)Ge[Ke++]=et,0!=et&&(Je=et);else{var tt=16==et,rt=et-16,nt=Xn[rt],ot=v(We,Gn[rt])+nt;if(Ke+ot>qe)break o;for(var st=tt?Je:0;0\u003Cot--;)Ge[Ke++]=st}}Xe=1;break o}Xe||(ze.a=3),Oe=Xe}(Oe=Oe&&!Le.h)&&(Se=c(Fe,Ue,8,Ne,_e)),Oe&&0!=Se?Me=Se:(Ce.a=3,Me=0)}if(0==Me)break r;if(be&&1==Jn[V]&&(be=0==pe[q].g),we+=pe[q].g,q+=Me,3>=V){var it,at=he[0];for(it=1;it\u003Cue;++it)he[it]>at&&(at=he[it]);Be+=at}}if(me.nd=be,me.Qb=0,be&&(me.qb=(ge[3][ye[3]+0].value\u003C\u003C24|ge[1][ye[1]+0].value\u003C\u003C16|ge[2][ye[2]+0].value)>>>0,0==we&&256>ge[0][ye[0]+0].value&&(me.Qb=1,me.qb+=ge[0][ye[0]+0].value\u003C\u003C8)),me.jc=!me.Qb&&6>Be,me.jc){var At,ut=me;for(At=0;At\u003COr;++At){var ct=At,lt=ut.pd[ct],dt=ut.G[0][ut.H[0]+ct];256\u003C=dt.value?(lt.g=dt.g+256,lt.value=dt.value):(lt.g=0,lt.value=0,ct>>=ve(dt,8,lt),ct>>=ve(ut.G[1][ut.H[1]+ct],16,lt),ct>>=ve(ut.G[2][ut.H[2]+ct],0,lt),ve(ut.G[3][ut.H[3]+ct],24,lt))}}}$.vc=ee,$.Wb=te,$.Ya=fe,$.yc=ce,K=1;break t}K=0}if(!(u=K)){a.a=3;break e}if(0\u003Cy){if(m.ua=1\u003C\u003Cy,!L(m.Wa,y)){a.a=1,u=0;break e}}else m.ua=0;var ft=a,ht=d,pt=h,mt=ft.s,gt=mt.xc;if(ft.c=ht,ft.i=pt,mt.md=P(ht,gt),mt.wc=0==gt?-1:(1\u003C\u003Cgt)-1,n){a.xb=po;break e}if(null==(g=s(d*h))){a.a=1,u=0;break e}u=(u=xe(a,g,0,d,h,h,null))&&!p.h;break e}return u?(null!=A?A[0]=g:(t(null==g),t(n)),a.$=0,n||Ee(m)):Ee(m),u}function Fe(e,r){var n=e.c*e.i,o=n+r+16*r;return t(e.c\u003C=r),e.V=s(o),null==e.V?(e.Ta=null,e.Ua=0,e.a=1,0):(e.Ta=e.V,e.Ua=e.Ba+n+r,1)}function Ue(e,r){var n=e.C,o=r-n,s=e.V,i=e.Ba+e.c*n;for(t(r\u003C=e.l.o);0\u003Co;){var a=16\u003Co?16:o,A=e.l.ma,u=e.l.width,c=u*a,l=A.ca,d=A.tb+u*n,f=e.Ta,h=e.Ua;be(e,a,s,i),xn(f,h,l,d,c),_e(A,n,n+a,l,d,u),o-=a,s+=a*e.c,n+=a}t(n==r),e.C=e.Ma=r}function Se(){this.ub=this.yd=this.td=this.Rb=0}function Le(){this.Kd=this.Ld=this.Ud=this.Td=this.i=this.c=0}function Te(){this.Fb=this.Bb=this.Cb=0,this.Zb=s(4),this.Lb=s(4)}function He(){this.Yb=function(){var e=[];return function e(t,r,n){for(var o=n[r],s=0;s\u003Co&&(t.push(n.length>r+1?[]:0),!(n.length\u003Cr+1));s++)e(t[s],r+1,n)}(e,0,[3,11]),e}()}function Ie(){this.jb=s(3),this.Wc=a([4,8],He),this.Xc=a([4,17],He)}function Pe(){this.Pc=this.wb=this.Tb=this.zd=0,this.vd=new s(4),this.od=new s(4)}function Oe(){this.ld=this.La=this.dd=this.tc=0}function ke(){this.Na=this.la=0}function Re(){this.Sc=[0,0],this.Eb=[0,0],this.Qc=[0,0],this.ia=this.lc=0}function Me(){this.ad=s(384),this.Za=0,this.Ob=s(16),this.$b=this.Ad=this.ia=this.Gc=this.Hc=this.Dd=0}function De(){this.uc=this.M=this.Nb=0,this.wa=Array(new Oe),this.Y=0,this.ya=Array(new Me),this.aa=0,this.l=new qe}function Ke(){this.y=s(16),this.f=s(8),this.ea=s(8)}function ze(){this.cb=this.a=0,this.sc=\"\",this.m=new w,this.Od=new Se,this.Kc=new Le,this.ed=new Pe,this.Qa=new Te,this.Ic=this.$c=this.Aa=0,this.D=new De,this.Xb=this.Va=this.Hb=this.zb=this.yb=this.Ub=this.za=0,this.Jc=i(8,w),this.ia=0,this.pb=i(4,Re),this.Pa=new Ie,this.Bd=this.kc=0,this.Ac=[],this.Bc=0,this.zc=[0,0,0,0],this.Gd=Array(new Ke),this.Hd=0,this.rb=Array(new ke),this.sb=0,this.wa=Array(new Oe),this.Y=0,this.oc=[],this.pc=0,this.sa=[],this.ta=0,this.qa=[],this.ra=0,this.Ha=[],this.B=this.R=this.Ia=0,this.Ec=[],this.M=this.ja=this.Vb=this.Fc=0,this.ya=Array(new Me),this.L=this.aa=0,this.gd=a([4,2],Oe),this.ga=null,this.Fa=[],this.Cc=this.qc=this.P=0,this.Gb=[],this.Uc=0,this.mb=[],this.nb=0,this.rc=[],this.Ga=this.Vc=0}function Ve(e,t){return 0>e?0:e>t?t:e}function qe(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=\"void\",this.put=\"VP8IoPutHook\",this.ac=\"VP8IoSetupHook\",this.bc=\"VP8IoTeardownHook\",this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function Ge(){var e=new ze;return null!=e&&(e.a=0,e.sc=\"OK\",e.cb=0,e.Xb=0,no||(no=Ye)),e}function Xe(e,t,r){return 0==e.a&&(e.a=t,e.sc=r,e.cb=0),0}function We(e,t,r){return 3\u003C=r&&157==e[t+0]&&1==e[t+1]&&42==e[t+2]}function Je(e,r){if(null==e)return 0;if(e.a=0,e.sc=\"OK\",null==r)return Xe(e,2,\"null VP8Io passed to VP8GetHeaders()\");var n=r.data,s=r.w,i=r.ha;if(4>i)return Xe(e,7,\"Truncated header.\");var a=n[s+0]|n[s+1]\u003C\u003C8|n[s+2]\u003C\u003C16,A=e.Od;if(A.Rb=!(1&a),A.td=a>>1&7,A.yd=a>>4&1,A.ub=a>>5,3\u003CA.td)return Xe(e,3,\"Incorrect keyframe parameters.\");if(!A.yd)return Xe(e,4,\"Frame not displayable.\");s+=3,i-=3;var u=e.Kc;if(A.Rb){if(7>i)return Xe(e,7,\"cannot parse picture header\");if(!We(n,s,i))return Xe(e,3,\"Bad code word\");u.c=16383&(n[s+4]\u003C\u003C8|n[s+3]),u.Td=n[s+4]>>6,u.i=16383&(n[s+6]\u003C\u003C8|n[s+5]),u.Ud=n[s+6]>>6,s+=7,i-=7,e.za=u.c+15>>4,e.Ub=u.i+15>>4,r.width=u.c,r.height=u.i,r.Da=0,r.j=0,r.v=0,r.va=r.width,r.o=r.height,r.da=0,r.ib=r.width,r.hb=r.height,r.U=r.width,r.T=r.height,o((a=e.Pa).jb,0,255,a.jb.length),t(null!=(a=e.Qa)),a.Cb=0,a.Bb=0,a.Fb=1,o(a.Zb,0,0,a.Zb.length),o(a.Lb,0,0,a.Lb)}if(A.ub>i)return Xe(e,7,\"bad partition length\");h(a=e.m,n,s,A.ub),s+=A.ub,i-=A.ub,A.Rb&&(u.Ld=E(a),u.Kd=E(a)),u=e.Qa;var c,l=e.Pa;if(t(null!=a),t(null!=u),u.Cb=E(a),u.Cb){if(u.Bb=E(a),E(a)){for(u.Fb=E(a),c=0;4>c;++c)u.Zb[c]=E(a)?m(a,7):0;for(c=0;4>c;++c)u.Lb[c]=E(a)?m(a,6):0}if(u.Bb)for(c=0;3>c;++c)l.jb[c]=E(a)?p(a,8):255}else u.Bb=0;if(a.Ka)return Xe(e,3,\"cannot parse segment header\");if((u=e.ed).zd=E(a),u.Tb=p(a,6),u.wb=p(a,3),u.Pc=E(a),u.Pc&&E(a)){for(l=0;4>l;++l)E(a)&&(u.vd[l]=m(a,6));for(l=0;4>l;++l)E(a)&&(u.od[l]=m(a,6))}if(e.L=0==u.Tb?0:u.zd?1:2,a.Ka)return Xe(e,3,\"cannot parse filter header\");var d=i;if(i=c=s,s=c+d,u=d,e.Xb=(1\u003C\u003Cp(e.m,2))-1,d\u003C3*(l=e.Xb))n=7;else{for(c+=3*l,u-=3*l,d=0;d\u003Cl;++d){var f=n[i+0]|n[i+1]\u003C\u003C8|n[i+2]\u003C\u003C16;f>u&&(f=u),h(e.Jc[+d],n,c,f),c+=f,u-=f,i+=3}h(e.Jc[+l],n,c,u),n=c\u003Cs?0:5}if(0!=n)return Xe(e,n,\"cannot parse partitions\");for(n=p(c=e.m,7),i=E(c)?m(c,4):0,s=E(c)?m(c,4):0,u=E(c)?m(c,4):0,l=E(c)?m(c,4):0,c=E(c)?m(c,4):0,d=e.Qa,f=0;4>f;++f){if(d.Cb){var g=d.Zb[f];d.Fb||(g+=n)}else{if(0\u003Cf){e.pb[f]=e.pb[0];continue}g=n}var y=e.pb[f];y.Sc[0]=to[Ve(g+i,127)],y.Sc[1]=ro[Ve(g+0,127)],y.Eb[0]=2*to[Ve(g+s,127)],y.Eb[1]=101581*ro[Ve(g+u,127)]>>16,8>y.Eb[1]&&(y.Eb[1]=8),y.Qc[0]=to[Ve(g+l,117)],y.Qc[1]=ro[Ve(g+c,127)],y.lc=g+c}if(!A.Rb)return Xe(e,4,\"Not a key frame.\");for(E(a),A=e.Pa,n=0;4>n;++n){for(i=0;8>i;++i)for(s=0;3>s;++s)for(u=0;11>u;++u)l=N(a,uo[n][i][s][u])?p(a,8):ao[n][i][s][u],A.Wc[n][i].Yb[s][u]=l;for(i=0;17>i;++i)A.Xc[n][i]=A.Wc[n][co[i]]}return e.kc=E(a),e.kc&&(e.Bd=p(a,8)),e.cb=1}function Ye(e,t,r,n,o,s,i){var a=t[o].Yb[r];for(r=0;16>o;++o){if(!N(e,a[r+0]))return o;for(;!N(e,a[r+1]);)if(a=t[++o].Yb[0],r=0,16==o)return 16;var A=t[o+1].Yb;if(N(e,a[r+2])){var u=e,c=0;if(N(u,(d=a)[(l=r)+3]))if(N(u,d[l+6])){for(a=0,l=2*(c=N(u,d[l+8]))+(d=N(u,d[l+9+c])),c=0,d=oo[l];d[a];++a)c+=c+N(u,d[a]);c+=3+(8\u003C\u003Cl)}else N(u,d[l+7])?(c=7+2*N(u,165),c+=N(u,145)):c=5+N(u,159);else c=N(u,d[l+4])?3+N(u,d[l+5]):2;a=A[2]}else c=1,a=A[1];A=i+so[o],0>(u=e).b&&x(u);var l,d=u.b,f=(l=u.Ca>>1)-(u.I>>d)>>31;--u.b,u.Ca+=f,u.Ca|=1,u.I-=(l+1&f)\u003C\u003Cd,s[A]=((c^f)-f)*n[(0\u003Co)+0]}return 16}function Ze(e){var t=e.rb[e.sb-1];t.la=0,t.Na=0,o(e.zc,0,0,e.zc.length),e.ja=0}function $e(e,r){if(null==e)return 0;if(null==r)return Xe(e,2,\"NULL VP8Io parameter in VP8Decode().\");if(!e.cb&&!Je(e,r))return 0;if(t(e.cb),null==r.ac||r.ac(r)){r.ob&&(e.L=0);var a=Ro[e.L];if(2==e.L?(e.yb=0,e.zb=0):(e.yb=r.v-a>>4,e.zb=r.j-a>>4,0>e.yb&&(e.yb=0),0>e.zb&&(e.zb=0)),e.Va=r.o+15+a>>4,e.Hb=r.va+15+a>>4,e.Hb>e.za&&(e.Hb=e.za),e.Va>e.Ub&&(e.Va=e.Ub),0\u003Ce.L){var A=e.ed;for(a=0;4>a;++a){var u;if(e.Qa.Cb){var c=e.Qa.Lb[a];e.Qa.Fb||(c+=A.Tb)}else c=A.Tb;for(u=0;1>=u;++u){var l=e.gd[a][u],d=c;if(A.Pc&&(d+=A.vd[0],u&&(d+=A.od[0])),0\u003C(d=0>d?0:63\u003Cd?63:d)){var f=d;0\u003CA.wb&&(f=4\u003CA.wb?f>>2:f>>1)>9-A.wb&&(f=9-A.wb),1>f&&(f=1),l.dd=f,l.tc=2*d+f,l.ld=40\u003C=d?2:15\u003C=d?1:0}else l.tc=0;l.La=u}}}a=0}else Xe(e,6,\"Frame setup failed\"),a=e.a;if(a=0==a){if(a){e.$c=0,0\u003Ce.Aa||(e.Ic=Do);e:{a=e.Ic,A=4*(f=e.za);var h=32*f,p=f+1,m=0\u003Ce.L?f*(0\u003Ce.Aa?2:1):0,g=(2==e.Aa?2:1)*f;if((l=A+832+(u=3*(16*a+Ro[e.L])\u002F2*h)+(c=null!=e.Fa&&0\u003Ce.Fa.length?e.Kc.c*e.Kc.i:0))!=l)a=0;else{if(l>e.Vb){if(e.Vb=0,e.Ec=s(l),e.Fc=0,null==e.Ec){a=Xe(e,1,\"no memory during frame initialization.\");break e}e.Vb=l}l=e.Ec,d=e.Fc,e.Ac=l,e.Bc=d,d+=A,e.Gd=i(h,Ke),e.Hd=0,e.rb=i(p+1,ke),e.sb=1,e.wa=m?i(m,Oe):null,e.Y=0,e.D.Nb=0,e.D.wa=e.wa,e.D.Y=e.Y,0\u003Ce.Aa&&(e.D.Y+=f),t(!0),e.oc=l,e.pc=d,d+=832,e.ya=i(g,Me),e.aa=0,e.D.ya=e.ya,e.D.aa=e.aa,2==e.Aa&&(e.D.aa+=f),e.R=16*f,e.B=8*f,f=(h=Ro[e.L])*e.R,h=h\u002F2*e.B,e.sa=l,e.ta=d+f,e.qa=e.sa,e.ra=e.ta+16*a*e.R+h,e.Ha=e.qa,e.Ia=e.ra+8*a*e.B+h,e.$c=0,d+=u,e.mb=c?l:null,e.nb=c?d:null,t(d+c\u003C=e.Fc+e.Vb),Ze(e),o(e.Ac,e.Bc,0,A),a=1}}if(a){if(r.ka=0,r.y=e.sa,r.O=e.ta,r.f=e.qa,r.N=e.ra,r.ea=e.Ha,r.Vd=e.Ia,r.fa=e.R,r.Rc=e.B,r.F=null,r.J=0,!Un){for(a=-255;255>=a;++a)En[255+a]=0>a?-a:a;for(a=-1020;1020>=a;++a)Nn[1020+a]=-128>a?-128:127\u003Ca?127:a;for(a=-112;112>=a;++a)Qn[112+a]=-16>a?-16:15\u003Ca?15:a;for(a=-255;510>=a;++a)Fn[255+a]=0>a?0:255\u003Ca?255:a;Un=1}on=ut,sn=st,An=it,un=at,cn=At,an=ot,ln=Xt,dn=Wt,fn=Zt,hn=$t,pn=Jt,mn=Yt,gn=er,yn=tr,vn=Dt,wn=Kt,bn=zt,Bn=Vt,fo[0]=_t,fo[1]=lt,fo[2]=Bt,fo[3]=jt,fo[4]=Ct,fo[5]=Et,fo[6]=xt,fo[7]=Nt,fo[8]=Ft,fo[9]=Qt,lo[0]=gt,lo[1]=ft,lo[2]=ht,lo[3]=pt,lo[4]=yt,lo[5]=vt,lo[6]=wt,ho[0]=Tt,ho[1]=dt,ho[2]=Ut,ho[3]=St,ho[4]=It,ho[5]=Ht,ho[6]=Pt,a=1}else a=0}a&&(a=function(e,r){for(e.M=0;e.M\u003Ce.Va;++e.M){var i,a=e.Jc[e.M&e.Xb],A=e.m,u=e;for(i=0;i\u003Cu.za;++i){var c=A,l=u,d=l.Ac,f=l.Bc+4*i,h=l.zc,p=l.ya[l.aa+i];if(l.Qa.Bb?p.$b=N(c,l.Pa.jb[0])?2+N(c,l.Pa.jb[2]):N(c,l.Pa.jb[1]):p.$b=0,l.kc&&(p.Ad=N(c,l.Bd)),p.Za=!N(c,145)+0,p.Za){var m=p.Ob,g=0;for(l=0;4>l;++l){var y,v=h[0+l];for(y=0;4>y;++y){v=Ao[d[f+y]][v];for(var w=io[N(c,v[0])];0\u003Cw;)w=io[2*w+N(c,v[w])];v=-w,d[f+y]=v}n(m,g,d,f,4),g+=4,h[0+l]=v}}else v=N(c,156)?N(c,128)?1:3:N(c,163)?2:0,p.Ob[0]=v,o(d,f,v,4),o(h,0,v,4);p.Dd=N(c,142)?N(c,114)?N(c,183)?1:3:2:0}if(u.m.Ka)return Xe(e,7,\"Premature end-of-partition0 encountered.\");for(;e.ja\u003Ce.za;++e.ja){if(u=a,c=(A=e).rb[A.sb-1],d=A.rb[A.sb+A.ja],i=A.ya[A.aa+A.ja],f=A.kc?i.Ad:0)c.la=d.la=0,i.Za||(c.Na=d.Na=0),i.Hc=0,i.Gc=0,i.ia=0;else{var b,B;if(c=d,d=u,f=A.Pa.Xc,h=A.ya[A.aa+A.ja],p=A.pb[h.$b],l=h.ad,m=0,g=A.rb[A.sb-1],v=y=0,o(l,m,0,384),h.Za)var j=0,_=f[3];else{w=s(16);var C=c.Na+g.Na;if(C=no(d,f[1],C,p.Eb,0,w,0),c.Na=g.Na=(0\u003CC)+0,1\u003CC)on(w,0,l,m);else{var x=w[0]+3>>3;for(w=0;256>w;w+=16)l[m+w]=x}j=1,_=f[0]}var E=15&c.la,Q=15&g.la;for(w=0;4>w;++w){var F=1&Q;for(x=B=0;4>x;++x)E=E>>1|(F=(C=no(d,_,C=F+(1&E),p.Sc,j,l,m))>j)\u003C\u003C7,B=B\u003C\u003C2|(3\u003CC?3:1\u003CC?2:0!=l[m+0]),m+=16;E>>=4,Q=Q>>1|F\u003C\u003C7,y=(y\u003C\u003C8|B)>>>0}for(_=E,j=Q>>4,b=0;4>b;b+=2){for(B=0,E=c.la>>4+b,Q=g.la>>4+b,w=0;2>w;++w){for(F=1&Q,x=0;2>x;++x)C=F+(1&E),E=E>>1|(F=0\u003C(C=no(d,f[2],C,p.Qc,0,l,m)))\u003C\u003C3,B=B\u003C\u003C2|(3\u003CC?3:1\u003CC?2:0!=l[m+0]),m+=16;E>>=2,Q=Q>>1|F\u003C\u003C5}v|=B\u003C\u003C4*b,_|=E\u003C\u003C4\u003C\u003Cb,j|=(240&Q)\u003C\u003Cb}c.la=_,g.la=j,h.Hc=y,h.Gc=v,h.ia=43690&v?0:p.ia,f=!(y|v)}if(0\u003CA.L&&(A.wa[A.Y+A.ja]=A.gd[i.$b][i.Za],A.wa[A.Y+A.ja].La|=!f),u.Ka)return Xe(e,7,\"Premature end-of-file encountered.\")}if(Ze(e),A=r,u=1,i=(a=e).D,c=0\u003Ca.L&&a.M>=a.zb&&a.M\u003C=a.Va,0==a.Aa)e:{if(i.M=a.M,i.uc=c,Lr(a,i),u=1,i=(B=a.D).Nb,c=(v=Ro[a.L])*a.R,d=v\u002F2*a.B,w=16*i*a.R,x=8*i*a.B,f=a.sa,h=a.ta-c+w,p=a.qa,l=a.ra-d+x,m=a.Ha,g=a.Ia-d+x,Q=0==(E=B.M),y=E>=a.Va-1,2==a.Aa&&Lr(a,B),B.uc)for(F=(C=a).D.M,t(C.D.uc),B=C.yb;B\u003CC.Hb;++B){j=B,_=F;var U=(S=(M=C).D).Nb;b=M.R;var S=S.wa[S.Y+j],L=M.sa,T=M.ta+16*U*b+16*j,H=S.dd,I=S.tc;if(0!=I)if(t(3\u003C=I),1==M.L)0\u003Cj&&wn(L,T,b,I+4),S.La&&Bn(L,T,b,I),0\u003C_&&vn(L,T,b,I+4),S.La&&bn(L,T,b,I);else{var P=M.B,O=M.qa,k=M.ra+8*U*P+8*j,R=M.Ha,M=M.Ia+8*U*P+8*j;U=S.ld,0\u003Cj&&(dn(L,T,b,I+4,H,U),hn(O,k,R,M,P,I+4,H,U)),S.La&&(mn(L,T,b,I,H,U),yn(O,k,R,M,P,I,H,U)),0\u003C_&&(ln(L,T,b,I+4,H,U),fn(O,k,R,M,P,I+4,H,U)),S.La&&(pn(L,T,b,I,H,U),gn(O,k,R,M,P,I,H,U))}}if(a.ia&&alert(\"todo:DitherRow\"),null!=A.put){if(B=16*E,E=16*(E+1),Q?(A.y=a.sa,A.O=a.ta+w,A.f=a.qa,A.N=a.ra+x,A.ea=a.Ha,A.W=a.Ia+x):(B-=v,A.y=f,A.O=h,A.f=p,A.N=l,A.ea=m,A.W=g),y||(E-=v),E>A.o&&(E=A.o),A.F=null,A.J=null,null!=a.Fa&&0\u003Ca.Fa.length&&B\u003CE&&(A.J=lr(a,A,B,E-B),A.F=a.mb,null==A.F&&0==A.F.length)){u=Xe(a,3,\"Could not decode alpha data.\");break e}B\u003CA.j&&(v=A.j-B,B=A.j,t(!(1&v)),A.O+=a.R*v,A.N+=a.B*(v>>1),A.W+=a.B*(v>>1),null!=A.F&&(A.J+=A.width*v)),B\u003CE&&(A.O+=A.v,A.N+=A.v>>1,A.W+=A.v>>1,null!=A.F&&(A.J+=A.v),A.ka=B-A.j,A.U=A.va-A.v,A.T=E-B,u=A.put(A))}i+1!=a.Ic||y||(n(a.sa,a.ta-c,f,h+16*a.R,c),n(a.qa,a.ra-d,p,l+8*a.B,d),n(a.Ha,a.Ia-d,m,g+8*a.B,d))}if(!u)return Xe(e,6,\"Output aborted.\")}return 1}(e,r)),null!=r.bc&&r.bc(r),a&=1}return a?(e.cb=0,a):0}function et(e,t,r,n,o){o=e[t+r+32*n]+(o>>3),e[t+r+32*n]=-256&o?0>o?0:255:o}function tt(e,t,r,n,o,s){et(e,t,0,r,n+o),et(e,t,1,r,n+s),et(e,t,2,r,n-s),et(e,t,3,r,n-o)}function rt(e){return(20091*e>>16)+e}function nt(e,t,r,n){var o,i=0,a=s(16);for(o=0;4>o;++o){var A=e[t+0]+e[t+8],u=e[t+0]-e[t+8],c=(35468*e[t+4]>>16)-rt(e[t+12]),l=rt(e[t+4])+(35468*e[t+12]>>16);a[i+0]=A+l,a[i+1]=u+c,a[i+2]=u-c,a[i+3]=A-l,i+=4,t++}for(o=i=0;4>o;++o)A=(e=a[i+0]+4)+a[i+8],u=e-a[i+8],c=(35468*a[i+4]>>16)-rt(a[i+12]),et(r,n,0,0,A+(l=rt(a[i+4])+(35468*a[i+12]>>16))),et(r,n,1,0,u+c),et(r,n,2,0,u-c),et(r,n,3,0,A-l),i++,n+=32}function ot(e,t,r,n){var o=e[t+0]+4,s=35468*e[t+4]>>16,i=rt(e[t+4]),a=35468*e[t+1]>>16;tt(r,n,0,o+i,e=rt(e[t+1]),a),tt(r,n,1,o+s,e,a),tt(r,n,2,o-s,e,a),tt(r,n,3,o-i,e,a)}function st(e,t,r,n,o){nt(e,t,r,n),o&&nt(e,t+16,r,n+4)}function it(e,t,r,n){sn(e,t+0,r,n,1),sn(e,t+32,r,n+128,1)}function at(e,t,r,n){var o;for(e=e[t+0]+4,o=0;4>o;++o)for(t=0;4>t;++t)et(r,n,t,o,e)}function At(e,t,r,n){e[t+0]&&un(e,t+0,r,n),e[t+16]&&un(e,t+16,r,n+4),e[t+32]&&un(e,t+32,r,n+128),e[t+48]&&un(e,t+48,r,n+128+4)}function ut(e,t,r,n){var o,i=s(16);for(o=0;4>o;++o){var a=e[t+0+o]+e[t+12+o],A=e[t+4+o]+e[t+8+o],u=e[t+4+o]-e[t+8+o],c=e[t+0+o]-e[t+12+o];i[0+o]=a+A,i[8+o]=a-A,i[4+o]=c+u,i[12+o]=c-u}for(o=0;4>o;++o)a=(e=i[0+4*o]+3)+i[3+4*o],A=i[1+4*o]+i[2+4*o],u=i[1+4*o]-i[2+4*o],c=e-i[3+4*o],r[n+0]=a+A>>3,r[n+16]=c+u>>3,r[n+32]=a-A>>3,r[n+48]=c-u>>3,n+=64}function ct(e,t,r){var n,o=t-32,s=Tn,i=255-e[o-1];for(n=0;n\u003Cr;++n){var a,A=s,u=i+e[t-1];for(a=0;a\u003Cr;++a)e[t+a]=A[u+e[o+a]];t+=32}}function lt(e,t){ct(e,t,4)}function dt(e,t){ct(e,t,8)}function ft(e,t){ct(e,t,16)}function ht(e,t){var r;for(r=0;16>r;++r)n(e,t+32*r,e,t-32,16)}function pt(e,t){var r;for(r=16;0\u003Cr;--r)o(e,t,e[t-1],16),t+=32}function mt(e,t,r){var n;for(n=0;16>n;++n)o(t,r+32*n,e,16)}function gt(e,t){var r,n=16;for(r=0;16>r;++r)n+=e[t-1+32*r]+e[t+r-32];mt(n>>5,e,t)}function yt(e,t){var r,n=8;for(r=0;16>r;++r)n+=e[t-1+32*r];mt(n>>4,e,t)}function vt(e,t){var r,n=8;for(r=0;16>r;++r)n+=e[t+r-32];mt(n>>4,e,t)}function wt(e,t){mt(128,e,t)}function bt(e,t,r){return e+2*t+r+2>>2}function Bt(e,t){var r,o=t-32;for(o=new Uint8Array([bt(e[o-1],e[o+0],e[o+1]),bt(e[o+0],e[o+1],e[o+2]),bt(e[o+1],e[o+2],e[o+3]),bt(e[o+2],e[o+3],e[o+4])]),r=0;4>r;++r)n(e,t+32*r,o,0,o.length)}function jt(e,t){var r=e[t-1],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96];Q(e,t+0,16843009*bt(e[t-1-32],r,n)),Q(e,t+32,16843009*bt(r,n,o)),Q(e,t+64,16843009*bt(n,o,s)),Q(e,t+96,16843009*bt(o,s,s))}function _t(e,t){var r,n=4;for(r=0;4>r;++r)n+=e[t+r-32]+e[t-1+32*r];for(n>>=3,r=0;4>r;++r)o(e,t+32*r,n,4)}function Ct(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1-32],i=e[t+0-32],a=e[t+1-32],A=e[t+2-32],u=e[t+3-32];e[t+0+96]=bt(n,o,e[t-1+96]),e[t+1+96]=e[t+0+64]=bt(r,n,o),e[t+2+96]=e[t+1+64]=e[t+0+32]=bt(s,r,n),e[t+3+96]=e[t+2+64]=e[t+1+32]=e[t+0+0]=bt(i,s,r),e[t+3+64]=e[t+2+32]=e[t+1+0]=bt(a,i,s),e[t+3+32]=e[t+2+0]=bt(A,a,i),e[t+3+0]=bt(u,A,a)}function xt(e,t){var r=e[t+1-32],n=e[t+2-32],o=e[t+3-32],s=e[t+4-32],i=e[t+5-32],a=e[t+6-32],A=e[t+7-32];e[t+0+0]=bt(e[t+0-32],r,n),e[t+1+0]=e[t+0+32]=bt(r,n,o),e[t+2+0]=e[t+1+32]=e[t+0+64]=bt(n,o,s),e[t+3+0]=e[t+2+32]=e[t+1+64]=e[t+0+96]=bt(o,s,i),e[t+3+32]=e[t+2+64]=e[t+1+96]=bt(s,i,a),e[t+3+64]=e[t+2+96]=bt(i,a,A),e[t+3+96]=bt(a,A,A)}function Et(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1-32],i=e[t+0-32],a=e[t+1-32],A=e[t+2-32],u=e[t+3-32];e[t+0+0]=e[t+1+64]=s+i+1>>1,e[t+1+0]=e[t+2+64]=i+a+1>>1,e[t+2+0]=e[t+3+64]=a+A+1>>1,e[t+3+0]=A+u+1>>1,e[t+0+96]=bt(o,n,r),e[t+0+64]=bt(n,r,s),e[t+0+32]=e[t+1+96]=bt(r,s,i),e[t+1+32]=e[t+2+96]=bt(s,i,a),e[t+2+32]=e[t+3+96]=bt(i,a,A),e[t+3+32]=bt(a,A,u)}function Nt(e,t){var r=e[t+0-32],n=e[t+1-32],o=e[t+2-32],s=e[t+3-32],i=e[t+4-32],a=e[t+5-32],A=e[t+6-32],u=e[t+7-32];e[t+0+0]=r+n+1>>1,e[t+1+0]=e[t+0+64]=n+o+1>>1,e[t+2+0]=e[t+1+64]=o+s+1>>1,e[t+3+0]=e[t+2+64]=s+i+1>>1,e[t+0+32]=bt(r,n,o),e[t+1+32]=e[t+0+96]=bt(n,o,s),e[t+2+32]=e[t+1+96]=bt(o,s,i),e[t+3+32]=e[t+2+96]=bt(s,i,a),e[t+3+64]=bt(i,a,A),e[t+3+96]=bt(a,A,u)}function Qt(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96];e[t+0+0]=r+n+1>>1,e[t+2+0]=e[t+0+32]=n+o+1>>1,e[t+2+32]=e[t+0+64]=o+s+1>>1,e[t+1+0]=bt(r,n,o),e[t+3+0]=e[t+1+32]=bt(n,o,s),e[t+3+32]=e[t+1+64]=bt(o,s,s),e[t+3+64]=e[t+2+64]=e[t+0+96]=e[t+1+96]=e[t+2+96]=e[t+3+96]=s}function Ft(e,t){var r=e[t-1+0],n=e[t-1+32],o=e[t-1+64],s=e[t-1+96],i=e[t-1-32],a=e[t+0-32],A=e[t+1-32],u=e[t+2-32];e[t+0+0]=e[t+2+32]=r+i+1>>1,e[t+0+32]=e[t+2+64]=n+r+1>>1,e[t+0+64]=e[t+2+96]=o+n+1>>1,e[t+0+96]=s+o+1>>1,e[t+3+0]=bt(a,A,u),e[t+2+0]=bt(i,a,A),e[t+1+0]=e[t+3+32]=bt(r,i,a),e[t+1+32]=e[t+3+64]=bt(n,r,i),e[t+1+64]=e[t+3+96]=bt(o,n,r),e[t+1+96]=bt(s,o,n)}function Ut(e,t){var r;for(r=0;8>r;++r)n(e,t+32*r,e,t-32,8)}function St(e,t){var r;for(r=0;8>r;++r)o(e,t,e[t-1],8),t+=32}function Lt(e,t,r){var n;for(n=0;8>n;++n)o(t,r+32*n,e,8)}function Tt(e,t){var r,n=8;for(r=0;8>r;++r)n+=e[t+r-32]+e[t-1+32*r];Lt(n>>4,e,t)}function Ht(e,t){var r,n=4;for(r=0;8>r;++r)n+=e[t+r-32];Lt(n>>3,e,t)}function It(e,t){var r,n=4;for(r=0;8>r;++r)n+=e[t-1+32*r];Lt(n>>3,e,t)}function Pt(e,t){Lt(128,e,t)}function Ot(e,t,r){var n=e[t-r],o=e[t+0],s=3*(o-n)+Sn[1020+e[t-2*r]-e[t+r]],i=Ln[112+(s+4>>3)];e[t-r]=Tn[255+n+Ln[112+(s+3>>3)]],e[t+0]=Tn[255+o-i]}function kt(e,t,r,n){var o=e[t+0],s=e[t+r];return Hn[255+e[t-2*r]-e[t-r]]>n||Hn[255+s-o]>n}function Rt(e,t,r,n){return 4*Hn[255+e[t-r]-e[t+0]]+Hn[255+e[t-2*r]-e[t+r]]\u003C=n}function Mt(e,t,r,n,o){var s=e[t-3*r],i=e[t-2*r],a=e[t-r],A=e[t+0],u=e[t+r],c=e[t+2*r],l=e[t+3*r];return 4*Hn[255+a-A]+Hn[255+i-u]>n?0:Hn[255+e[t-4*r]-s]\u003C=o&&Hn[255+s-i]\u003C=o&&Hn[255+i-a]\u003C=o&&Hn[255+l-c]\u003C=o&&Hn[255+c-u]\u003C=o&&Hn[255+u-A]\u003C=o}function Dt(e,t,r,n){var o=2*n+1;for(n=0;16>n;++n)Rt(e,t+n,r,o)&&Ot(e,t+n,r)}function Kt(e,t,r,n){var o=2*n+1;for(n=0;16>n;++n)Rt(e,t+n*r,1,o)&&Ot(e,t+n*r,1)}function zt(e,t,r,n){var o;for(o=3;0\u003Co;--o)Dt(e,t+=4*r,r,n)}function Vt(e,t,r,n){var o;for(o=3;0\u003Co;--o)Kt(e,t+=4,r,n)}function qt(e,t,r,n,o,s,i,a){for(s=2*s+1;0\u003Co--;){if(Mt(e,t,r,s,i))if(kt(e,t,r,a))Ot(e,t,r);else{var A=e,u=t,c=r,l=A[u-2*c],d=A[u-c],f=A[u+0],h=A[u+c],p=A[u+2*c],m=27*(y=Sn[1020+3*(f-d)+Sn[1020+l-h]])+63>>7,g=18*y+63>>7,y=9*y+63>>7;A[u-3*c]=Tn[255+A[u-3*c]+y],A[u-2*c]=Tn[255+l+g],A[u-c]=Tn[255+d+m],A[u+0]=Tn[255+f-m],A[u+c]=Tn[255+h-g],A[u+2*c]=Tn[255+p-y]}t+=n}}function Gt(e,t,r,n,o,s,i,a){for(s=2*s+1;0\u003Co--;){if(Mt(e,t,r,s,i))if(kt(e,t,r,a))Ot(e,t,r);else{var A=e,u=t,c=r,l=A[u-c],d=A[u+0],f=A[u+c],h=Ln[112+(4+(p=3*(d-l))>>3)],p=Ln[112+(p+3>>3)],m=h+1>>1;A[u-2*c]=Tn[255+A[u-2*c]+m],A[u-c]=Tn[255+l+p],A[u+0]=Tn[255+d-h],A[u+c]=Tn[255+f-m]}t+=n}}function Xt(e,t,r,n,o,s){qt(e,t,r,1,16,n,o,s)}function Wt(e,t,r,n,o,s){qt(e,t,1,r,16,n,o,s)}function Jt(e,t,r,n,o,s){var i;for(i=3;0\u003Ci;--i)Gt(e,t+=4*r,r,1,16,n,o,s)}function Yt(e,t,r,n,o,s){var i;for(i=3;0\u003Ci;--i)Gt(e,t+=4,1,r,16,n,o,s)}function Zt(e,t,r,n,o,s,i,a){qt(e,t,o,1,8,s,i,a),qt(r,n,o,1,8,s,i,a)}function $t(e,t,r,n,o,s,i,a){qt(e,t,1,o,8,s,i,a),qt(r,n,1,o,8,s,i,a)}function er(e,t,r,n,o,s,i,a){Gt(e,t+4*o,o,1,8,s,i,a),Gt(r,n+4*o,o,1,8,s,i,a)}function tr(e,t,r,n,o,s,i,a){Gt(e,t+4,1,o,8,s,i,a),Gt(r,n+4,1,o,8,s,i,a)}function rr(){this.ba=new ie,this.ec=[],this.cc=[],this.Mc=[],this.Dc=this.Nc=this.dc=this.fc=0,this.Oa=new Ae,this.memory=0,this.Ib=\"OutputFunc\",this.Jb=\"OutputAlphaFunc\",this.Nd=\"OutputRowFunc\"}function nr(){this.data=[],this.offset=this.kd=this.ha=this.w=0,this.na=[],this.xa=this.gb=this.Ja=this.Sa=this.P=0}function or(){this.nc=this.Ea=this.b=this.hc=0,this.K=[],this.w=0}function sr(){this.ua=0,this.Wa=new H,this.vb=new H,this.md=this.xc=this.wc=0,this.vc=[],this.Wb=0,this.Ya=new f,this.yc=new l}function ir(){this.xb=this.a=0,this.l=new qe,this.ca=new ie,this.V=[],this.Ba=0,this.Ta=[],this.Ua=0,this.m=new b,this.Pb=0,this.wd=new b,this.Ma=this.$=this.C=this.i=this.c=this.xd=0,this.s=new sr,this.ab=0,this.gc=i(4,or),this.Oc=0}function ar(){this.Lc=this.Z=this.$a=this.i=this.c=0,this.l=new qe,this.ic=0,this.ca=[],this.tb=0,this.qd=null,this.rd=0}function Ar(e,t,r,n,o,s,i){for(e=null==e?0:e[t+0],t=0;t\u003Ci;++t)o[s+t]=e+r[n+t]&255,e=o[s+t]}function ur(e,t,r,n,o,s,i){var a;if(null==e)Ar(null,null,r,n,o,s,i);else for(a=0;a\u003Ci;++a)o[s+a]=e[t+a]+r[n+a]&255}function cr(e,t,r,n,o,s,i){if(null==e)Ar(null,null,r,n,o,s,i);else{var a,A=e[t+0],u=A,c=A;for(a=0;a\u003Ci;++a)u=c+(A=e[t+a])-u,c=r[n+a]+(-256&u?0>u?0:255:u)&255,u=A,o[s+a]=c}}function lr(e,r,o,i){var a=r.width,A=r.o;if(t(null!=e&&null!=r),0>o||0>=i||o+i>A)return null;if(!e.Cc){if(null==e.ga){var u;if(e.ga=new ar,(u=null==e.ga)||(u=r.width*r.o,t(0==e.Gb.length),e.Gb=s(u),e.Uc=0,null==e.Gb?u=0:(e.mb=e.Gb,e.nb=e.Uc,e.rc=null,u=1),u=!u),!u){u=e.ga;var c=e.Fa,l=e.P,d=e.qc,f=e.mb,h=e.nb,p=l+1,m=d-1,y=u.l;if(t(null!=c&&null!=f&&null!=r),go[0]=null,go[1]=Ar,go[2]=ur,go[3]=cr,u.ca=f,u.tb=h,u.c=r.width,u.i=r.height,t(0\u003Cu.c&&0\u003Cu.i),1>=d)r=0;else if(u.$a=c[l+0]>>0&3,u.Z=c[l+0]>>2&3,u.Lc=c[l+0]>>4&3,l=c[l+0]>>6&3,0>u.$a||1\u003Cu.$a||4\u003C=u.Z||1\u003Cu.Lc||l)r=0;else if(y.put=fe,y.ac=de,y.bc=he,y.ma=u,y.width=r.width,y.height=r.height,y.Da=r.Da,y.v=r.v,y.va=r.va,y.j=r.j,y.o=r.o,u.$a)e:{t(1==u.$a),r=Ne();t:for(;;){if(null==r){r=0;break e}if(t(null!=u),u.mc=r,r.c=u.c,r.i=u.i,r.l=u.l,r.l.ma=u,r.l.width=u.c,r.l.height=u.i,r.a=0,g(r.m,c,p,m),!Qe(u.c,u.i,1,r,null))break t;if(1==r.ab&&3==r.gc[0].hc&&je(r.s)?(u.ic=1,c=r.c*r.i,r.Ta=null,r.Ua=0,r.V=s(c),r.Ba=0,null==r.V?(r.a=1,r=0):r=1):(u.ic=0,r=Fe(r,u.c)),!r)break t;r=1;break e}u.mc=null,r=0}else r=m>=u.c*u.i;u=!r}if(u)return null;1!=e.ga.Lc?e.Ga=0:i=A-o}t(null!=e.ga),t(o+i\u003C=A);e:{if(r=(c=e.ga).c,A=c.l.o,0==c.$a){if(p=e.rc,m=e.Vc,y=e.Fa,l=e.P+1+o*r,d=e.mb,f=e.nb+o*r,t(l\u003C=e.P+e.qc),0!=c.Z)for(t(null!=go[c.Z]),u=0;u\u003Ci;++u)go[c.Z](p,m,y,l,d,f,r),p=d,m=f,f+=r,l+=r;else for(u=0;u\u003Ci;++u)n(d,f,y,l,r),p=d,m=f,f+=r,l+=r;e.rc=p,e.Vc=m}else{if(t(null!=c.mc),r=o+i,t(null!=(u=c.mc)),t(r\u003C=u.i),u.C>=r)r=1;else if(c.ic||mr(),c.ic){c=u.V,p=u.Ba,m=u.c;var v=u.i,w=(y=1,l=u.$\u002Fm,d=u.$%m,f=u.m,h=u.s,u.$),b=m*v,B=m*r,_=h.wc,x=w\u003CB?we(h,d,l):null;t(w\u003C=b),t(r\u003C=v),t(je(h));t:for(;;){for(;!f.h&&w\u003CB;){if(d&_||(x=we(h,d,l)),t(null!=x),C(f),256>(v=ye(x.G[0],x.H[0],f)))c[p+w]=v,++w,++d>=m&&(d=0,++l\u003C=r&&!(l%16)&&Ce(u,l));else{if(!(280>v)){y=0;break t}v=me(v-256,f);var E,N=ye(x.G[4],x.H[4],f);if(C(f),!(w>=(N=ge(m,N=me(N,f)))&&b-w>=v)){y=0;break t}for(E=0;E\u003Cv;++E)c[p+w+E]=c[p+w+E-N];for(w+=v,d+=v;d>=m;)d-=m,++l\u003C=r&&!(l%16)&&Ce(u,l);w\u003CB&&d&_&&(x=we(h,d,l))}t(f.h==j(f))}Ce(u,l>r?r:l);break t}!y||f.h&&w\u003Cb?(y=0,u.a=f.h?5:3):u.$=w,r=y}else r=xe(u,u.V,u.Ba,u.c,u.i,r,Ue);if(!r){i=0;break e}}o+i>=A&&(e.Cc=1),i=1}if(!i)return null;if(e.Cc&&(null!=(i=e.ga)&&(i.mc=null),e.ga=null,0\u003Ce.Ga))return alert(\"todo:WebPDequantizeLevels\"),null}return e.nb+o*a}function dr(e,t,r,n,o,s){for(;0\u003Co--;){var i,a=e,A=t+(r?1:0),u=e,c=t+(r?0:3);for(i=0;i\u003Cn;++i){var l=u[c+4*i];255!=l&&(l*=32897,a[A+4*i+0]=a[A+4*i+0]*l>>23,a[A+4*i+1]=a[A+4*i+1]*l>>23,a[A+4*i+2]=a[A+4*i+2]*l>>23)}t+=s}}function fr(e,t,r,n,o){for(;0\u003Cn--;){var s;for(s=0;s\u003Cr;++s){var i=e[t+2*s+0],a=15&(u=e[t+2*s+1]),A=4369*a,u=(240&u|u>>4)*A>>16;e[t+2*s+0]=(240&i|i>>4)*A>>16&240|(15&i|i\u003C\u003C4)*A>>16>>4&15,e[t+2*s+1]=240&u|a}t+=o}}function hr(e,t,r,n,o,s,i,a){var A,u,c=255;for(u=0;u\u003Co;++u){for(A=0;A\u003Cn;++A){var l=e[t+A];s[i+4*A]=l,c&=l}t+=r,i+=a}return 255!=c}function pr(e,t,r,n,o){var s;for(s=0;s\u003Co;++s)r[n+s]=e[t+s]>>8}function mr(){jn=dr,_n=fr,Cn=hr,xn=pr}function gr(r,n,o){e[r]=function(e,r,s,i,a,A,u,c,l,d,f,h,p,m,g,y,v){var w,b=v-1>>1,B=a[A+0]|u[c+0]\u003C\u003C16,j=l[d+0]|f[h+0]\u003C\u003C16;t(null!=e);var _=3*B+j+131074>>2;for(n(e[r+0],255&_,_>>16,p,m),null!=s&&(_=3*j+B+131074>>2,n(s[i+0],255&_,_>>16,g,y)),w=1;w\u003C=b;++w){var C=a[A+w]|u[c+w]\u003C\u003C16,x=l[d+w]|f[h+w]\u003C\u003C16,E=B+C+j+x+524296,N=E+2*(C+j)>>3;_=N+B>>1,B=(E=E+2*(B+x)>>3)+C>>1,n(e[r+2*w-1],255&_,_>>16,p,m+(2*w-1)*o),n(e[r+2*w-0],255&B,B>>16,p,m+(2*w-0)*o),null!=s&&(_=E+j>>1,B=N+x>>1,n(s[i+2*w-1],255&_,_>>16,g,y+(2*w-1)*o),n(s[i+2*w+0],255&B,B>>16,g,y+(2*w+0)*o)),B=C,j=x}1&v||(_=3*B+j+131074>>2,n(e[r+v-1],255&_,_>>16,p,m+(v-1)*o),null!=s&&(_=3*j+B+131074>>2,n(s[i+v-1],255&_,_>>16,g,y+(v-1)*o)))}}function yr(){yo[In]=vo,yo[Pn]=bo,yo[On]=wo,yo[kn]=Bo,yo[Rn]=jo,yo[Mn]=_o,yo[Dn]=Co,yo[Kn]=bo,yo[zn]=Bo,yo[Vn]=jo,yo[qn]=_o}function vr(e){return e&~Uo?0>e?0:255:e>>Fo}function wr(e,t){return vr((19077*e>>8)+(26149*t>>8)-14234)}function br(e,t,r){return vr((19077*e>>8)-(6419*t>>8)-(13320*r>>8)+8708)}function Br(e,t){return vr((19077*e>>8)+(33050*t>>8)-17685)}function jr(e,t,r,n,o){n[o+0]=wr(e,r),n[o+1]=br(e,t,r),n[o+2]=Br(e,t)}function _r(e,t,r,n,o){n[o+0]=Br(e,t),n[o+1]=br(e,t,r),n[o+2]=wr(e,r)}function Cr(e,t,r,n,o){var s=br(e,t,r);t=s\u003C\u003C3&224|Br(e,t)>>3,n[o+0]=248&wr(e,r)|s>>5,n[o+1]=t}function xr(e,t,r,n,o){var s=240&Br(e,t)|15;n[o+0]=240&wr(e,r)|br(e,t,r)>>4,n[o+1]=s}function Er(e,t,r,n,o){n[o+0]=255,jr(e,t,r,n,o+1)}function Nr(e,t,r,n,o){_r(e,t,r,n,o),n[o+3]=255}function Qr(e,t,r,n,o){jr(e,t,r,n,o),n[o+3]=255}function Ve(e,t){return 0>e?0:e>t?t:e}function Fr(t,r,n){e[t]=function(e,t,o,s,i,a,A,u,c){for(var l=u+(-2&c)*n;u!=l;)r(e[t+0],o[s+0],i[a+0],A,u),r(e[t+1],o[s+0],i[a+0],A,u+n),t+=2,++s,++a,u+=2*n;1&c&&r(e[t+0],o[s+0],i[a+0],A,u)}}function Ur(e,t,r){return 0==r?0==e?0==t?6:5:0==t?4:0:r}function Sr(e,t,r,n,o){switch(e>>>30){case 3:sn(t,r,n,o,0);break;case 2:an(t,r,n,o);break;case 1:un(t,r,n,o)}}function Lr(e,t){var r,s,i=t.M,a=t.Nb,A=e.oc,u=e.pc+40,c=e.oc,l=e.pc+584,d=e.oc,f=e.pc+600;for(r=0;16>r;++r)A[u+32*r-1]=129;for(r=0;8>r;++r)c[l+32*r-1]=129,d[f+32*r-1]=129;for(0\u003Ci?A[u-1-32]=c[l-1-32]=d[f-1-32]=129:(o(A,u-32-1,127,21),o(c,l-32-1,127,9),o(d,f-32-1,127,9)),s=0;s\u003Ce.za;++s){var h=t.ya[t.aa+s];if(0\u003Cs){for(r=-1;16>r;++r)n(A,u+32*r-4,A,u+32*r+12,4);for(r=-1;8>r;++r)n(c,l+32*r-4,c,l+32*r+4,4),n(d,f+32*r-4,d,f+32*r+4,4)}var p=e.Gd,m=e.Hd+s,g=h.ad,y=h.Hc;if(0\u003Ci&&(n(A,u-32,p[m].y,0,16),n(c,l-32,p[m].f,0,8),n(d,f-32,p[m].ea,0,8)),h.Za){var v=A,w=u-32+16;for(0\u003Ci&&(s>=e.za-1?o(v,w,p[m].y[15],4):n(v,w,p[m+1].y,0,4)),r=0;4>r;r++)v[w+128+r]=v[w+256+r]=v[w+384+r]=v[w+0+r];for(r=0;16>r;++r,y\u003C\u003C=2)v=A,w=u+ko[r],fo[h.Ob[r]](v,w),Sr(y,g,16*+r,v,w)}else if(v=Ur(s,i,h.Ob[0]),lo[v](A,u),0!=y)for(r=0;16>r;++r,y\u003C\u003C=2)Sr(y,g,16*+r,A,u+ko[r]);for(r=h.Gc,v=Ur(s,i,h.Dd),ho[v](c,l),ho[v](d,f),y=g,v=c,w=l,255&(h=r>>0)&&(170&h?An(y,256,v,w):cn(y,256,v,w)),h=d,y=f,255&(r>>=8)&&(170&r?An(g,320,h,y):cn(g,320,h,y)),i\u003Ce.Ub-1&&(n(p[m].y,0,A,u+480,16),n(p[m].f,0,c,l+224,8),n(p[m].ea,0,d,f+224,8)),r=8*a*e.B,p=e.sa,m=e.ta+16*s+16*a*e.R,g=e.qa,h=e.ra+8*s+r,y=e.Ha,v=e.Ia+8*s+r,r=0;16>r;++r)n(p,m+r*e.R,A,u+32*r,16);for(r=0;8>r;++r)n(g,h+r*e.B,c,l+32*r,8),n(y,v+r*e.B,d,f+32*r,8)}}function Tr(e,n,o,s,i,a,A,u,c){var l=[0],d=[0],f=0,h=null!=c?c.kd:0,p=null!=c?c:new nr;if(null==e||12>o)return 7;p.data=e,p.w=n,p.ha=o,n=[n],o=[o],p.gb=[p.gb];e:{var m=n,y=o,v=p.gb;if(t(null!=e),t(null!=y),t(null!=v),v[0]=0,12\u003C=y[0]&&!r(e,m[0],\"RIFF\")){if(r(e,m[0]+8,\"WEBP\")){v=3;break e}var w=S(e,m[0]+4);if(12>w||4294967286\u003Cw){v=3;break e}if(h&&w>y[0]-8){v=7;break e}v[0]=w,m[0]+=12,y[0]-=12}v=0}if(0!=v)return v;for(w=0\u003Cp.gb[0],o=o[0];;){e:{var B=e;y=n,v=o;var j=l,_=d,C=m=[0];if((N=f=[f])[0]=0,8>v[0])v=7;else{if(!r(B,y[0],\"VP8X\")){if(10!=S(B,y[0]+4)){v=3;break e}if(18>v[0]){v=7;break e}var x=S(B,y[0]+8),E=1+U(B,y[0]+12);if(2147483648\u003C=E*(B=1+U(B,y[0]+15))){v=3;break e}null!=C&&(C[0]=x),null!=j&&(j[0]=E),null!=_&&(_[0]=B),y[0]+=18,v[0]-=18,N[0]=1}v=0}}if(f=f[0],m=m[0],0!=v)return v;if(y=!!(2&m),!w&&f)return 3;if(null!=a&&(a[0]=!!(16&m)),null!=A&&(A[0]=y),null!=u&&(u[0]=0),A=l[0],m=d[0],f&&y&&null==c){v=0;break}if(4>o){v=7;break}if(w&&f||!w&&!f&&!r(e,n[0],\"ALPH\")){o=[o],p.na=[p.na],p.P=[p.P],p.Sa=[p.Sa];e:{x=e,v=n,w=o;var N=p.gb;j=p.na,_=p.P,C=p.Sa,E=22,t(null!=x),t(null!=w),B=v[0];var Q=w[0];for(t(null!=j),t(null!=C),j[0]=null,_[0]=null,C[0]=0;;){if(v[0]=B,w[0]=Q,8>Q){v=7;break e}var F=S(x,B+4);if(4294967286\u003CF){v=3;break e}var L=8+F+1&-2;if(E+=L,0\u003CN&&E>N){v=3;break e}if(!r(x,B,\"VP8 \")||!r(x,B,\"VP8L\")){v=0;break e}if(Q[0]\u003CL){v=7;break e}r(x,B,\"ALPH\")||(j[0]=x,_[0]=B+8,C[0]=F),B+=L,Q-=L}}if(o=o[0],p.na=p.na[0],p.P=p.P[0],p.Sa=p.Sa[0],0!=v)break}o=[o],p.Ja=[p.Ja],p.xa=[p.xa];e:if(N=e,v=n,w=o,j=p.gb[0],_=p.Ja,C=p.xa,x=v[0],B=!r(N,x,\"VP8 \"),E=!r(N,x,\"VP8L\"),t(null!=N),t(null!=w),t(null!=_),t(null!=C),8>w[0])v=7;else{if(B||E){if(N=S(N,x+4),12\u003C=j&&N>j-12){v=3;break e}if(h&&N>w[0]-8){v=7;break e}_[0]=N,v[0]+=8,w[0]-=8,C[0]=E}else C[0]=5\u003C=w[0]&&47==N[x+0]&&!(N[x+4]>>5),_[0]=w[0];v=0}if(o=o[0],p.Ja=p.Ja[0],p.xa=p.xa[0],n=n[0],0!=v)break;if(4294967286\u003Cp.Ja)return 3;if(null==u||y||(u[0]=p.xa?2:1),A=[A],m=[m],p.xa){if(5>o){v=7;break}u=A,h=m,y=a,null==e||5>o?e=0:5\u003C=o&&47==e[n+0]&&!(e[n+4]>>5)?(w=[0],N=[0],j=[0],g(_=new b,e,n,o),pe(_,w,N,j)?(null!=u&&(u[0]=w[0]),null!=h&&(h[0]=N[0]),null!=y&&(y[0]=j[0]),e=1):e=0):e=0}else{if(10>o){v=7;break}u=m,null==e||10>o||!We(e,n+3,o-3)?e=0:(h=e[n+0]|e[n+1]\u003C\u003C8|e[n+2]\u003C\u003C16,y=16383&(e[n+7]\u003C\u003C8|e[n+6]),e=16383&(e[n+9]\u003C\u003C8|e[n+8]),1&h||3\u003C(h>>1&7)||!(h>>4&1)||h>>5>=p.Ja||!y||!e?e=0:(A&&(A[0]=y),u&&(u[0]=e),e=1))}if(!e)return 3;if(A=A[0],m=m[0],f&&(l[0]!=A||d[0]!=m))return 3;null!=c&&(c[0]=p,c.offset=n-c.w,t(4294967286>n-c.w),t(c.offset==c.ha-o));break}return 0==v||7==v&&f&&null==c?(null!=a&&(a[0]|=null!=p.na&&0\u003Cp.na.length),null!=s&&(s[0]=A),null!=i&&(i[0]=m),0):v}function Hr(e,t,r){var n=t.width,o=t.height,s=0,i=0,a=n,A=o;if(t.Da=null!=e&&0\u003Ce.Da,t.Da&&(a=e.cd,A=e.bd,s=e.v,i=e.j,11>r||(s&=-2,i&=-2),0>s||0>i||0>=a||0>=A||s+a>n||i+A>o))return 0;if(t.v=s,t.j=i,t.va=s+a,t.o=i+A,t.U=a,t.T=A,t.da=null!=e&&0\u003Ce.da,t.da){if(!I(a,A,r=[e.ib],s=[e.hb]))return 0;t.ib=r[0],t.hb=s[0]}return t.ob=null!=e&&e.ob,t.Kb=null==e||!e.Sd,t.da&&(t.ob=t.ib\u003C3*n\u002F4&&t.hb\u003C3*o\u002F4,t.Kb=0),1}function Ir(e){if(null==e)return 2;if(11>e.S){var t=e.f.RGBA;t.fb+=(e.height-1)*t.A,t.A=-t.A}else t=e.f.kb,e=e.height,t.O+=(e-1)*t.fa,t.fa=-t.fa,t.N+=(e-1>>1)*t.Ab,t.Ab=-t.Ab,t.W+=(e-1>>1)*t.Db,t.Db=-t.Db,null!=t.F&&(t.J+=(e-1)*t.lb,t.lb=-t.lb);return 0}function Pr(e,t,r,n){if(null==n||0>=e||0>=t)return 2;if(null!=r){if(r.Da){var o=r.cd,i=r.bd,a=-2&r.v,A=-2&r.j;if(0>a||0>A||0>=o||0>=i||a+o>e||A+i>t)return 2;e=o,t=i}if(r.da){if(!I(e,t,o=[r.ib],i=[r.hb]))return 2;e=o[0],t=i[0]}}n.width=e,n.height=t;e:{var u=n.width,c=n.height;if(e=n.S,0>=u||0>=c||!(e>=In&&13>e))e=2;else{if(0>=n.Rd&&null==n.sd){a=i=o=t=0;var l=(A=u*Ko[e])*c;if(11>e||(i=(c+1)\u002F2*(t=(u+1)\u002F2),12==e&&(a=(o=u)*c)),null==(c=s(l+2*i+a))){e=1;break e}n.sd=c,11>e?((u=n.f.RGBA).eb=c,u.fb=0,u.A=A,u.size=l):((u=n.f.kb).y=c,u.O=0,u.fa=A,u.Fd=l,u.f=c,u.N=0+l,u.Ab=t,u.Cd=i,u.ea=c,u.W=0+l+i,u.Db=t,u.Ed=i,12==e&&(u.F=c,u.J=0+l+2*i),u.Tc=a,u.lb=o)}if(t=1,o=n.S,i=n.width,a=n.height,o>=In&&13>o)if(11>o)e=n.f.RGBA,t&=(A=Math.abs(e.A))*(a-1)+i\u003C=e.size,t&=A>=i*Ko[o],t&=null!=e.eb;else{e=n.f.kb,A=(i+1)\u002F2,l=(a+1)\u002F2,u=Math.abs(e.fa),c=Math.abs(e.Ab);var d=Math.abs(e.Db),f=Math.abs(e.lb),h=f*(a-1)+i;t&=u*(a-1)+i\u003C=e.Fd,t&=c*(l-1)+A\u003C=e.Cd,t=(t&=d*(l-1)+A\u003C=e.Ed)&u>=i&c>=A&d>=A,t&=null!=e.y,t&=null!=e.f,t&=null!=e.ea,12==o&&(t&=f>=i,t&=h\u003C=e.Tc,t&=null!=e.F)}else t=0;e=t?0:2}}return 0!=e||null!=r&&r.fd&&(e=Ir(n)),e}var Or=64,kr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Rr=24,Mr=32,Dr=8,Kr=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];k(\"Predictor0\",\"PredictorAdd0\"),e.Predictor0=function(){return 4278190080},e.Predictor1=function(e){return e},e.Predictor2=function(e,t,r){return t[r+0]},e.Predictor3=function(e,t,r){return t[r+1]},e.Predictor4=function(e,t,r){return t[r-1]},e.Predictor5=function(e,t,r){return M(M(e,t[r+1]),t[r+0])},e.Predictor6=function(e,t,r){return M(e,t[r-1])},e.Predictor7=function(e,t,r){return M(e,t[r+0])},e.Predictor8=function(e,t,r){return M(t[r-1],t[r+0])},e.Predictor9=function(e,t,r){return M(t[r+0],t[r+1])},e.Predictor10=function(e,t,r){return M(M(e,t[r-1]),M(t[r+0],t[r+1]))},e.Predictor11=function(e,t,r){var n=t[r+0];return 0>=z(n>>24&255,e>>24&255,(t=t[r-1])>>24&255)+z(n>>16&255,e>>16&255,t>>16&255)+z(n>>8&255,e>>8&255,t>>8&255)+z(255&n,255&e,255&t)?n:e},e.Predictor12=function(e,t,r){var n=t[r+0];return(D((e>>24&255)+(n>>24&255)-((t=t[r-1])>>24&255))\u003C\u003C24|D((e>>16&255)+(n>>16&255)-(t>>16&255))\u003C\u003C16|D((e>>8&255)+(n>>8&255)-(t>>8&255))\u003C\u003C8|D((255&e)+(255&n)-(255&t)))>>>0},e.Predictor13=function(e,t,r){var n=t[r-1];return(K((e=M(e,t[r+0]))>>24&255,n>>24&255)\u003C\u003C24|K(e>>16&255,n>>16&255)\u003C\u003C16|K(e>>8&255,n>>8&255)\u003C\u003C8|K(e>>0&255,n>>0&255))>>>0};var zr=e.PredictorAdd0;e.PredictorAdd1=V,k(\"Predictor2\",\"PredictorAdd2\"),k(\"Predictor3\",\"PredictorAdd3\"),k(\"Predictor4\",\"PredictorAdd4\"),k(\"Predictor5\",\"PredictorAdd5\"),k(\"Predictor6\",\"PredictorAdd6\"),k(\"Predictor7\",\"PredictorAdd7\"),k(\"Predictor8\",\"PredictorAdd8\"),k(\"Predictor9\",\"PredictorAdd9\"),k(\"Predictor10\",\"PredictorAdd10\"),k(\"Predictor11\",\"PredictorAdd11\"),k(\"Predictor12\",\"PredictorAdd12\"),k(\"Predictor13\",\"PredictorAdd13\");var Vr=e.PredictorAdd2;W(\"ColorIndexInverseTransform\",\"MapARGB\",\"32b\",(function(e){return e>>8&255}),(function(e){return e})),W(\"VP8LColorIndexInverseTransformAlpha\",\"MapAlpha\",\"8b\",(function(e){return e}),(function(e){return e>>8&255}));var qr,Gr=e.ColorIndexInverseTransform,Xr=e.MapARGB,Wr=e.VP8LColorIndexInverseTransformAlpha,Jr=e.MapAlpha,Yr=e.VP8LPredictorsAdd=[];Yr.length=16,(e.VP8LPredictors=[]).length=16,(e.VP8LPredictorsAdd_C=[]).length=16,(e.VP8LPredictors_C=[]).length=16;var Zr,$r,en,tn,rn,nn,on,sn,an,An,un,cn,ln,dn,fn,hn,pn,mn,gn,yn,vn,wn,bn,Bn,jn,_n,Cn,xn,En=s(511),Nn=s(2041),Qn=s(225),Fn=s(767),Un=0,Sn=Nn,Ln=Qn,Tn=Fn,Hn=En,In=0,Pn=1,On=2,kn=3,Rn=4,Mn=5,Dn=6,Kn=7,zn=8,Vn=9,qn=10,Gn=[2,3,7],Xn=[3,3,11],Wn=[280,256,256,256,40],Jn=[0,1,1,1,0],Yn=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Zn=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],$n=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],eo=8,to=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ro=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],no=null,oo=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],so=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],io=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],ao=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],Ao=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],uo=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],co=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],lo=[],fo=[],ho=[],po=1,mo=2,go=[],yo=[];gr(\"UpsampleRgbLinePair\",jr,3),gr(\"UpsampleBgrLinePair\",_r,3),gr(\"UpsampleRgbaLinePair\",Qr,4),gr(\"UpsampleBgraLinePair\",Nr,4),gr(\"UpsampleArgbLinePair\",Er,4),gr(\"UpsampleRgba4444LinePair\",xr,2),gr(\"UpsampleRgb565LinePair\",Cr,2);var vo=e.UpsampleRgbLinePair,wo=e.UpsampleBgrLinePair,bo=e.UpsampleRgbaLinePair,Bo=e.UpsampleBgraLinePair,jo=e.UpsampleArgbLinePair,_o=e.UpsampleRgba4444LinePair,Co=e.UpsampleRgb565LinePair,xo=16,Eo=1\u003C\u003Cxo-1,No=-227,Qo=482,Fo=6,Uo=(256\u003C\u003CFo)-1,So=0,Lo=s(256),To=s(256),Ho=s(256),Io=s(256),Po=s(Qo-No),Oo=s(Qo-No);Fr(\"YuvToRgbRow\",jr,3),Fr(\"YuvToBgrRow\",_r,3),Fr(\"YuvToRgbaRow\",Qr,4),Fr(\"YuvToBgraRow\",Nr,4),Fr(\"YuvToArgbRow\",Er,4),Fr(\"YuvToRgba4444Row\",xr,2),Fr(\"YuvToRgb565Row\",Cr,2);var ko=[0,4,8,12,128,132,136,140,256,260,264,268,384,388,392,396],Ro=[0,2,8],Mo=[8,7,6,4,4,2,2,2,1,1,1,1],Do=1;this.WebPDecodeRGBA=function(e,r,n,o,s){var i=Pn,a=new rr,A=new ie;a.ba=A,A.S=i,A.width=[A.width],A.height=[A.height];var u=A.width,c=A.height,l=new ae;if(null==l||null==e)var d=2;else t(null!=l),d=Tr(e,r,n,l.width,l.height,l.Pd,l.Qd,l.format,null);if(0!=d?u=0:(null!=u&&(u[0]=l.width[0]),null!=c&&(c[0]=l.height[0]),u=1),u){A.width=A.width[0],A.height=A.height[0],null!=o&&(o[0]=A.width),null!=s&&(s[0]=A.height);e:{if(o=new qe,(s=new nr).data=e,s.w=r,s.ha=n,s.kd=1,r=[0],t(null!=s),(0==(e=Tr(s.data,s.w,s.ha,null,null,null,r,null,s))||7==e)&&r[0]&&(e=4),0==(r=e)){if(t(null!=a),o.data=s.data,o.w=s.w+s.offset,o.ha=s.ha-s.offset,o.put=fe,o.ac=de,o.bc=he,o.ma=a,s.xa){if(null==(e=Ne())){a=1;break e}if(function(e,r){var n=[0],o=[0],s=[0];t:for(;;){if(null==e)return 0;if(null==r)return e.a=2,0;if(e.l=r,e.a=0,g(e.m,r.data,r.w,r.ha),!pe(e.m,n,o,s)){e.a=3;break t}if(e.xb=mo,r.width=n[0],r.height=o[0],!Qe(n[0],o[0],1,e,null))break t;return 1}return t(0!=e.a),0}(e,o)){if(o=0==(r=Pr(o.width,o.height,a.Oa,a.ba))){t:{o=e;r:for(;;){if(null==o){o=0;break t}if(t(null!=o.s.yc),t(null!=o.s.Ya),t(0\u003Co.s.Wb),t(null!=(n=o.l)),t(null!=(s=n.ma)),0!=o.xb){if(o.ca=s.ba,o.tb=s.tb,t(null!=o.ca),!Hr(s.Oa,n,kn)){o.a=2;break r}if(!Fe(o,n.width))break r;if(n.da)break r;if((n.da||ne(o.ca.S))&&mr(),11>o.ca.S||(alert(\"todo:WebPInitConvertARGBToYUV\"),null!=o.ca.f.kb.F&&mr()),o.Pb&&0\u003Co.s.ua&&null==o.s.vb.X&&!L(o.s.vb,o.s.Wa.Xa)){o.a=1;break r}o.xb=0}if(!xe(o,o.V,o.Ba,o.c,o.i,n.o,Be))break r;s.Dc=o.Ma,o=1;break t}t(0!=o.a),o=0}o=!o}o&&(r=e.a)}else r=e.a}else{if(null==(e=new Ge)){a=1;break e}if(e.Fa=s.na,e.P=s.P,e.qc=s.Sa,Je(e,o)){if(0==(r=Pr(o.width,o.height,a.Oa,a.ba))){if(e.Aa=0,n=a.Oa,t(null!=(s=e)),null!=n){if(0\u003C(u=0>(u=n.Md)?0:100\u003Cu?255:255*u\u002F100)){for(c=l=0;4>c;++c)12>(d=s.pb[c]).lc&&(d.ia=u*Mo[0>d.lc?0:d.lc]>>3),l|=d.ia;l&&(alert(\"todo:VP8InitRandom\"),s.ia=1)}s.Ga=n.Id,100\u003Cs.Ga?s.Ga=100:0>s.Ga&&(s.Ga=0)}$e(e,o)||(r=e.a)}}else r=e.a}0==r&&null!=a.Oa&&a.Oa.fd&&(r=Ir(a.ba))}a=r}i=0!=a?null:11>i?A.f.RGBA.eb:A.f.kb.y}else i=null;return i};var Ko=[3,4,3,4,4,2,2,4,4,4,2,1,1]});var l=[0],d=[0],f=[],h=new $e,p=e,m=function(e,t){var r={},n=0,o=!1,s=0,i=0;if(r.frames=[],!function(e,t,r,n){for(var o=0;o\u003C4;o++)if(e[t+o]!=\"RIFF\".charCodeAt(o))return!0;return!1}(e,t)){var a,l;for(c(e,t+=4),t+=8;t\u003Ce.length;){var d=A(e,t),f=c(e,t+=4);t+=4;var h=f+(1&f);switch(d){case\"VP8 \":case\"VP8L\":void 0===r.frames[n]&&(r.frames[n]={}),(g=r.frames[n]).src_off=o?i:t-8,g.src_size=s+f+8,n++,o&&(o=!1,s=0,i=0);break;case\"VP8X\":(g=r.header={}).feature_flags=e[t];var p=t+4;g.canvas_width=1+u(e,p),p+=3,g.canvas_height=1+u(e,p),p+=3;break;case\"ALPH\":o=!0,s=h+8,i=t-8;break;case\"ANIM\":(g=r.header).bgcolor=c(e,t),p=t+4,g.loop_count=(a=e)[(l=p)+0]\u003C\u003C0|a[l+1]\u003C\u003C8,p+=2;break;case\"ANMF\":var m,g;(g=r.frames[n]={}).offset_x=2*u(e,t),t+=3,g.offset_y=2*u(e,t),t+=3,g.width=1+u(e,t),t+=3,g.height=1+u(e,t),t+=3,g.duration=u(e,t),t+=3,m=e[t++],g.dispose=1&m,g.blend=m>>1&1}\"ANMF\"!=d&&(t+=h)}return r}}(p,0);m.response=p,m.rgbaoutput=!0,m.dataurl=!1;var g=m.header?m.header:null,y=m.frames?m.frames:null;if(g){g.loop_counter=g.loop_count,l=[g.canvas_height],d=[g.canvas_width];for(var v=0;v\u003Cy.length&&0!=y[v].blend;v++);}var w=y[0],b=h.WebPDecodeRGBA(p,w.src_off,w.src_size,d,l);w.rgba=b,w.imgwidth=d[0],w.imgheight=l[0];for(var B=0;B\u003Cd[0]*l[0]*4;B++)f[B]=b[B];return this.width=d,this.height=l,this.data=f,this}!function(e){var t=function(t,o,u,c){var l=4,d=i;switch(c){case e.image_compression.FAST:l=1,d=s;break;case e.image_compression.MEDIUM:l=6,d=a;break;case e.image_compression.SLOW:l=9,d=A}t=r(t,o,u,d);var f=(0,n.zlibSync)(t,{level:l});return e.__addimage__.arrayBufferToBinaryString(f)},r=function(e,t,r,n){for(var o,s,i,a=e.length\u002Ft,A=new Uint8Array(e.length+a),u=c(),d=0;d\u003Ca;d+=1){if(i=d*t,o=e.subarray(i,i+t),n)A.set(n(o,r,s),i+d);else{for(var f,h=u.length,p=[];f\u003Ch;f+=1)p[f]=u[f](o,r,s);var m=l(p.concat());A.set(p[m],i+d)}s=o}return A},o=function(e){var t=Array.apply([],e);return t.unshift(0),t},s=function(e,t){var r,n=[],o=e.length;n[0]=1;for(var s=0;s\u003Co;s+=1)r=e[s-t]||0,n[s+1]=e[s]-r+256&255;return n},i=function(e,t,r){var n,o=[],s=e.length;o[0]=2;for(var i=0;i\u003Cs;i+=1)n=r&&r[i]||0,o[i+1]=e[i]-n+256&255;return o},a=function(e,t,r){var n,o,s=[],i=e.length;s[0]=3;for(var a=0;a\u003Ci;a+=1)n=e[a-t]||0,o=r&&r[a]||0,s[a+1]=e[a]+256-(n+o>>>1)&255;return s},A=function(e,t,r){var n,o,s,i,a=[],A=e.length;a[0]=4;for(var c=0;c\u003CA;c+=1)n=e[c-t]||0,o=r&&r[c]||0,s=r&&r[c-t]||0,i=u(n,o,s),a[c+1]=e[c]-i+256&255;return a},u=function(e,t,r){if(e===t&&t===r)return e;var n=Math.abs(t-r),o=Math.abs(e-r),s=Math.abs(e+t-r-r);return n\u003C=o&&n\u003C=s?e:o\u003C=s?t:r},c=function(){return[o,s,i,a,A]},l=function(e){var t=e.map((function(e){return e.reduce((function(e,t){return e+Math.abs(t)}),0)}));return t.indexOf(Math.min.apply(null,t))};e.processPNG=function(r,o,s,i){var a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B=this.decode.FLATE_DECODE,j=\"\";if(this.__addimage__.isArrayBuffer(r)&&(r=new Uint8Array(r)),this.__addimage__.isArrayBufferView(r)){if(r=(u=new Xe(r)).imgData,A=u.bits,a=u.colorSpace,l=u.colors,-1!==[4,6].indexOf(u.colorType)){if(8===u.bits){p=(h=32==u.pixelBitlength?new Uint32Array(u.decodePixels().buffer):16==u.pixelBitlength?new Uint16Array(u.decodePixels().buffer):new Uint8Array(u.decodePixels().buffer)).length,g=new Uint8Array(p*u.colors),m=new Uint8Array(p);var _,C=u.pixelBitlength-u.bits;for(w=0,b=0;w\u003Cp;w++){for(v=h[w],_=0;_\u003CC;)g[b++]=v>>>_&255,_+=u.bits;m[w]=v>>>_&255}}if(16===u.bits){p=(h=new Uint32Array(u.decodePixels().buffer)).length,g=new Uint8Array(p*(32\u002Fu.pixelBitlength)*u.colors),m=new Uint8Array(p*(32\u002Fu.pixelBitlength)),y=u.colors>1,w=0,b=0;for(var x=0;w\u003Cp;)v=h[w++],g[b++]=v>>>0&255,y&&(g[b++]=v>>>16&255,v=h[w++],g[b++]=v>>>0&255),m[x++]=v>>>16&255;A=8}i!==e.image_compression.NONE&&\"function\"==typeof n.zlibSync?(r=t(g,u.width*u.colors,u.colors,i),f=t(m,u.width,1,i)):(r=g,f=m,B=void 0)}if(3===u.colorType&&(a=this.color_spaces.INDEXED,d=u.palette,u.transparency.indexed)){var E=u.transparency.indexed,N=0;for(w=0,p=E.length;w\u003Cp;++w)N+=E[w];if((N\u002F=255)==p-1&&-1!==E.indexOf(0))c=[E.indexOf(0)];else if(N!==p){for(h=u.decodePixels(),m=new Uint8Array(h.length),w=0,p=h.length;w\u003Cp;w++)m[w]=E[h[w]];f=t(m,u.width,1)}}var Q=function(t){var r;switch(t){case e.image_compression.FAST:r=11;break;case e.image_compression.MEDIUM:r=13;break;case e.image_compression.SLOW:r=14;break;default:r=12}return r}(i);return B===this.decode.FLATE_DECODE&&(j=\"\u002FPredictor \"+Q+\" \"),j+=\"\u002FColors \"+l+\" \u002FBitsPerComponent \"+A+\" \u002FColumns \"+u.width,(this.__addimage__.isArrayBuffer(r)||this.__addimage__.isArrayBufferView(r))&&(r=this.__addimage__.arrayBufferToBinaryString(r)),(f&&this.__addimage__.isArrayBuffer(f)||this.__addimage__.isArrayBufferView(f))&&(f=this.__addimage__.arrayBufferToBinaryString(f)),{alias:s,data:r,index:o,filter:B,decodeParameters:j,transparency:c,palette:d,sMask:f,predictor:Q,width:u.width,height:u.height,bitsPerComponent:A,colorSpace:a}}}}(H.API),function(e){e.processGIF89A=function(t,r,n,o){var s=new We(t),i=s.width,a=s.height,A=[];s.decodeAndBlitFrameRGBA(0,A);var u={data:A,width:i,height:a},c=new Ye(100).encode(u,100);return e.processJPEG.call(this,c,r,n,o)},e.processGIF87A=e.processGIF89A}(H.API),Ze.prototype.parseHeader=function(){if(this.fileSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.reserved=this.datav.getUint32(this.pos,!0),this.pos+=4,this.offset=this.datav.getUint32(this.pos,!0),this.pos+=4,this.headerSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.width=this.datav.getUint32(this.pos,!0),this.pos+=4,this.height=this.datav.getInt32(this.pos,!0),this.pos+=4,this.planes=this.datav.getUint16(this.pos,!0),this.pos+=2,this.bitPP=this.datav.getUint16(this.pos,!0),this.pos+=2,this.compress=this.datav.getUint32(this.pos,!0),this.pos+=4,this.rawSize=this.datav.getUint32(this.pos,!0),this.pos+=4,this.hr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.vr=this.datav.getUint32(this.pos,!0),this.pos+=4,this.colors=this.datav.getUint32(this.pos,!0),this.pos+=4,this.importantColors=this.datav.getUint32(this.pos,!0),this.pos+=4,16===this.bitPP&&this.is_with_alpha&&(this.bitPP=15),this.bitPP\u003C15){var e=0===this.colors?1\u003C\u003Cthis.bitPP:this.colors;this.palette=new Array(e);for(var t=0;t\u003Ce;t++){var r=this.datav.getUint8(this.pos++,!0),n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0);this.palette[t]={red:o,green:n,blue:r,quad:s}}}this.height\u003C0&&(this.height*=-1,this.bottom_up=!1)},Ze.prototype.parseBGR=function(){this.pos=this.offset;try{var e=\"bit\"+this.bitPP,t=this.width*this.height*4;this.data=new Uint8Array(t),this[e]()}catch(e){i.log(\"bit decode error:\"+e)}},Ze.prototype.bit1=function(){var e,t=Math.ceil(this.width\u002F8),r=t%4;for(e=this.height-1;e>=0;e--){for(var n=this.bottom_up?e:this.height-1-e,o=0;o\u003Ct;o++)for(var s=this.datav.getUint8(this.pos++,!0),i=n*this.width*4+8*o*4,a=0;a\u003C8&&8*o+a\u003Cthis.width;a++){var A=this.palette[s>>7-a&1];this.data[i+4*a]=A.blue,this.data[i+4*a+1]=A.green,this.data[i+4*a+2]=A.red,this.data[i+4*a+3]=255}0!==r&&(this.pos+=4-r)}},Ze.prototype.bit4=function(){for(var e=Math.ceil(this.width\u002F2),t=e%4,r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,o=0;o\u003Ce;o++){var s=this.datav.getUint8(this.pos++,!0),i=n*this.width*4+2*o*4,a=s>>4,A=15&s,u=this.palette[a];if(this.data[i]=u.blue,this.data[i+1]=u.green,this.data[i+2]=u.red,this.data[i+3]=255,2*o+1>=this.width)break;u=this.palette[A],this.data[i+4]=u.blue,this.data[i+4+1]=u.green,this.data[i+4+2]=u.red,this.data[i+4+3]=255}0!==t&&(this.pos+=4-t)}},Ze.prototype.bit8=function(){for(var e=this.width%4,t=this.height-1;t>=0;t--){for(var r=this.bottom_up?t:this.height-1-t,n=0;n\u003Cthis.width;n++){var o=this.datav.getUint8(this.pos++,!0),s=r*this.width*4+4*n;if(o\u003Cthis.palette.length){var i=this.palette[o];this.data[s]=i.red,this.data[s+1]=i.green,this.data[s+2]=i.blue,this.data[s+3]=255}else this.data[s]=255,this.data[s+1]=255,this.data[s+2]=255,this.data[s+3]=255}0!==e&&(this.pos+=4-e)}},Ze.prototype.bit15=function(){for(var e=this.width%3,t=parseInt(\"11111\",2),r=this.height-1;r>=0;r--){for(var n=this.bottom_up?r:this.height-1-r,o=0;o\u003Cthis.width;o++){var s=this.datav.getUint16(this.pos,!0);this.pos+=2;var i=(s&t)\u002Ft*255|0,a=(s>>5&t)\u002Ft*255|0,A=(s>>10&t)\u002Ft*255|0,u=s>>15?255:0,c=n*this.width*4+4*o;this.data[c]=A,this.data[c+1]=a,this.data[c+2]=i,this.data[c+3]=u}this.pos+=e}},Ze.prototype.bit16=function(){for(var e=this.width%3,t=parseInt(\"11111\",2),r=parseInt(\"111111\",2),n=this.height-1;n>=0;n--){for(var o=this.bottom_up?n:this.height-1-n,s=0;s\u003Cthis.width;s++){var i=this.datav.getUint16(this.pos,!0);this.pos+=2;var a=(i&t)\u002Ft*255|0,A=(i>>5&r)\u002Fr*255|0,u=(i>>11)\u002Ft*255|0,c=o*this.width*4+4*s;this.data[c]=u,this.data[c+1]=A,this.data[c+2]=a,this.data[c+3]=255}this.pos+=e}},Ze.prototype.bit24=function(){for(var e=this.height-1;e>=0;e--){for(var t=this.bottom_up?e:this.height-1-e,r=0;r\u003Cthis.width;r++){var n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0),i=t*this.width*4+4*r;this.data[i]=s,this.data[i+1]=o,this.data[i+2]=n,this.data[i+3]=255}this.pos+=this.width%4}},Ze.prototype.bit32=function(){for(var e=this.height-1;e>=0;e--)for(var t=this.bottom_up?e:this.height-1-e,r=0;r\u003Cthis.width;r++){var n=this.datav.getUint8(this.pos++,!0),o=this.datav.getUint8(this.pos++,!0),s=this.datav.getUint8(this.pos++,!0),i=this.datav.getUint8(this.pos++,!0),a=t*this.width*4+4*r;this.data[a]=s,this.data[a+1]=o,this.data[a+2]=n,this.data[a+3]=i}},Ze.prototype.getData=function(){return this.data},function(e){e.processBMP=function(t,r,n,o){var s=new Ze(t,!1),i=s.width,a=s.height,A={data:s.getData(),width:i,height:a},u=new Ye(100).encode(A,100);return e.processJPEG.call(this,u,r,n,o)}}(H.API),$e.prototype.getData=function(){return this.data},function(e){e.processWEBP=function(t,r,n,o){var s=new $e(t,!1),i=s.width,a=s.height,A={data:s.getData(),width:i,height:a},u=new Ye(100).encode(A,100);return e.processJPEG.call(this,u,r,n,o)}}(H.API),H.API.setLanguage=function(e){return void 0===this.internal.languageSettings&&(this.internal.languageSettings={},this.internal.languageSettings.isSubscribed=!1),void 0!=={af:\"Afrikaans\",sq:\"Albanian\",ar:\"Arabic (Standard)\",\"ar-DZ\":\"Arabic (Algeria)\",\"ar-BH\":\"Arabic (Bahrain)\",\"ar-EG\":\"Arabic (Egypt)\",\"ar-IQ\":\"Arabic (Iraq)\",\"ar-JO\":\"Arabic (Jordan)\",\"ar-KW\":\"Arabic (Kuwait)\",\"ar-LB\":\"Arabic (Lebanon)\",\"ar-LY\":\"Arabic (Libya)\",\"ar-MA\":\"Arabic (Morocco)\",\"ar-OM\":\"Arabic (Oman)\",\"ar-QA\":\"Arabic (Qatar)\",\"ar-SA\":\"Arabic (Saudi Arabia)\",\"ar-SY\":\"Arabic (Syria)\",\"ar-TN\":\"Arabic (Tunisia)\",\"ar-AE\":\"Arabic (U.A.E.)\",\"ar-YE\":\"Arabic (Yemen)\",an:\"Aragonese\",hy:\"Armenian\",as:\"Assamese\",ast:\"Asturian\",az:\"Azerbaijani\",eu:\"Basque\",be:\"Belarusian\",bn:\"Bengali\",bs:\"Bosnian\",br:\"Breton\",bg:\"Bulgarian\",my:\"Burmese\",ca:\"Catalan\",ch:\"Chamorro\",ce:\"Chechen\",zh:\"Chinese\",\"zh-HK\":\"Chinese (Hong Kong)\",\"zh-CN\":\"Chinese (PRC)\",\"zh-SG\":\"Chinese (Singapore)\",\"zh-TW\":\"Chinese (Taiwan)\",cv:\"Chuvash\",co:\"Corsican\",cr:\"Cree\",hr:\"Croatian\",cs:\"Czech\",da:\"Danish\",nl:\"Dutch (Standard)\",\"nl-BE\":\"Dutch (Belgian)\",en:\"English\",\"en-AU\":\"English (Australia)\",\"en-BZ\":\"English (Belize)\",\"en-CA\":\"English (Canada)\",\"en-IE\":\"English (Ireland)\",\"en-JM\":\"English (Jamaica)\",\"en-NZ\":\"English (New Zealand)\",\"en-PH\":\"English (Philippines)\",\"en-ZA\":\"English (South Africa)\",\"en-TT\":\"English (Trinidad & Tobago)\",\"en-GB\":\"English (United Kingdom)\",\"en-US\":\"English (United States)\",\"en-ZW\":\"English (Zimbabwe)\",eo:\"Esperanto\",et:\"Estonian\",fo:\"Faeroese\",fj:\"Fijian\",fi:\"Finnish\",fr:\"French (Standard)\",\"fr-BE\":\"French (Belgium)\",\"fr-CA\":\"French (Canada)\",\"fr-FR\":\"French (France)\",\"fr-LU\":\"French (Luxembourg)\",\"fr-MC\":\"French (Monaco)\",\"fr-CH\":\"French (Switzerland)\",fy:\"Frisian\",fur:\"Friulian\",gd:\"Gaelic (Scots)\",\"gd-IE\":\"Gaelic (Irish)\",gl:\"Galacian\",ka:\"Georgian\",de:\"German (Standard)\",\"de-AT\":\"German (Austria)\",\"de-DE\":\"German (Germany)\",\"de-LI\":\"German (Liechtenstein)\",\"de-LU\":\"German (Luxembourg)\",\"de-CH\":\"German (Switzerland)\",el:\"Greek\",gu:\"Gujurati\",ht:\"Haitian\",he:\"Hebrew\",hi:\"Hindi\",hu:\"Hungarian\",is:\"Icelandic\",id:\"Indonesian\",iu:\"Inuktitut\",ga:\"Irish\",it:\"Italian (Standard)\",\"it-CH\":\"Italian (Switzerland)\",ja:\"Japanese\",kn:\"Kannada\",ks:\"Kashmiri\",kk:\"Kazakh\",km:\"Khmer\",ky:\"Kirghiz\",tlh:\"Klingon\",ko:\"Korean\",\"ko-KP\":\"Korean (North Korea)\",\"ko-KR\":\"Korean (South Korea)\",la:\"Latin\",lv:\"Latvian\",lt:\"Lithuanian\",lb:\"Luxembourgish\",mk:\"FYRO Macedonian\",ms:\"Malay\",ml:\"Malayalam\",mt:\"Maltese\",mi:\"Maori\",mr:\"Marathi\",mo:\"Moldavian\",nv:\"Navajo\",ng:\"Ndonga\",ne:\"Nepali\",no:\"Norwegian\",nb:\"Norwegian (Bokmal)\",nn:\"Norwegian (Nynorsk)\",oc:\"Occitan\",or:\"Oriya\",om:\"Oromo\",fa:\"Persian\",\"fa-IR\":\"Persian\u002FIran\",pl:\"Polish\",pt:\"Portuguese\",\"pt-BR\":\"Portuguese (Brazil)\",pa:\"Punjabi\",\"pa-IN\":\"Punjabi (India)\",\"pa-PK\":\"Punjabi (Pakistan)\",qu:\"Quechua\",rm:\"Rhaeto-Romanic\",ro:\"Romanian\",\"ro-MO\":\"Romanian (Moldavia)\",ru:\"Russian\",\"ru-MO\":\"Russian (Moldavia)\",sz:\"Sami (Lappish)\",sg:\"Sango\",sa:\"Sanskrit\",sc:\"Sardinian\",sd:\"Sindhi\",si:\"Singhalese\",sr:\"Serbian\",sk:\"Slovak\",sl:\"Slovenian\",so:\"Somani\",sb:\"Sorbian\",es:\"Spanish\",\"es-AR\":\"Spanish (Argentina)\",\"es-BO\":\"Spanish (Bolivia)\",\"es-CL\":\"Spanish (Chile)\",\"es-CO\":\"Spanish (Colombia)\",\"es-CR\":\"Spanish (Costa Rica)\",\"es-DO\":\"Spanish (Dominican Republic)\",\"es-EC\":\"Spanish (Ecuador)\",\"es-SV\":\"Spanish (El Salvador)\",\"es-GT\":\"Spanish (Guatemala)\",\"es-HN\":\"Spanish (Honduras)\",\"es-MX\":\"Spanish (Mexico)\",\"es-NI\":\"Spanish (Nicaragua)\",\"es-PA\":\"Spanish (Panama)\",\"es-PY\":\"Spanish (Paraguay)\",\"es-PE\":\"Spanish (Peru)\",\"es-PR\":\"Spanish (Puerto Rico)\",\"es-ES\":\"Spanish (Spain)\",\"es-UY\":\"Spanish (Uruguay)\",\"es-VE\":\"Spanish (Venezuela)\",sx:\"Sutu\",sw:\"Swahili\",sv:\"Swedish\",\"sv-FI\":\"Swedish (Finland)\",\"sv-SV\":\"Swedish (Sweden)\",ta:\"Tamil\",tt:\"Tatar\",te:\"Teluga\",th:\"Thai\",tig:\"Tigre\",ts:\"Tsonga\",tn:\"Tswana\",tr:\"Turkish\",tk:\"Turkmen\",uk:\"Ukrainian\",hsb:\"Upper Sorbian\",ur:\"Urdu\",ve:\"Venda\",vi:\"Vietnamese\",vo:\"Volapuk\",wa:\"Walloon\",cy:\"Welsh\",xh:\"Xhosa\",ji:\"Yiddish\",zu:\"Zulu\"}[e]&&(this.internal.languageSettings.languageCode=e,!1===this.internal.languageSettings.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){this.internal.write(\"\u002FLang (\"+this.internal.languageSettings.languageCode+\")\")})),this.internal.languageSettings.isSubscribed=!0)),this},Ke=H.API,ze=Ke.getCharWidthsArray=function(e,t){var r,n,o=(t=t||{}).font||this.internal.getFont(),s=t.fontSize||this.internal.getFontSize(),i=t.charSpace||this.internal.getCharSpace(),a=t.widths?t.widths:o.metadata.Unicode.widths,A=a.fof?a.fof:1,u=t.kerning?t.kerning:o.metadata.Unicode.kerning,c=u.fof?u.fof:1,l=!1!==t.doKerning,d=0,f=e.length,h=0,p=a[0]||A,m=[];for(r=0;r\u003Cf;r++)n=e.charCodeAt(r),\"function\"==typeof o.metadata.widthOfString?m.push((o.metadata.widthOfGlyph(o.metadata.characterToGlyph(n))+i*(1e3\u002Fs)||0)\u002F1e3):(d=l&&\"object\"==typeof u[n]&&!isNaN(parseInt(u[n][h],10))?u[n][h]\u002Fc:0,m.push((a[n]||p)\u002FA+d)),h=n;return m},Ve=Ke.getStringUnitWidth=function(e,t){var r=(t=t||{}).fontSize||this.internal.getFontSize(),n=t.font||this.internal.getFont(),o=t.charSpace||this.internal.getCharSpace();return Ke.processArabic&&(e=Ke.processArabic(e)),\"function\"==typeof n.metadata.widthOfString?n.metadata.widthOfString(e,r,o)\u002Fr:ze.apply(this,arguments).reduce((function(e,t){return e+t}),0)},qe=function(e,t,r,n){for(var o=[],s=0,i=e.length,a=0;s!==i&&a+t[s]\u003Cr;)a+=t[s],s++;o.push(e.slice(0,s));var A=s;for(a=0;s!==i;)a+t[s]>n&&(o.push(e.slice(A,s)),a=0,A=s),a+=t[s],s++;return A!==s&&o.push(e.slice(A,s)),o},Ge=function(e,t,r){r||(r={});var n,o,s,i,a,A,u,c=[],l=[c],d=r.textIndent||0,f=0,h=0,p=e.split(\" \"),m=ze.apply(this,[\" \",r])[0];if(A=-1===r.lineIndent?p[0].length+2:r.lineIndent||0){var g=Array(A).join(\" \"),y=[];p.map((function(e){(e=e.split(\u002F\\s*\\n\u002F)).length>1?y=y.concat(e.map((function(e,t){return(t&&e.length?\"\\n\":\"\")+e}))):y.push(e[0])})),p=y,A=Ve.apply(this,[g,r])}for(s=0,i=p.length;s\u003Ci;s++){var v=0;if(n=p[s],A&&\"\\n\"==n[0]&&(n=n.substr(1),v=1),d+f+(h=(o=ze.apply(this,[n,r])).reduce((function(e,t){return e+t}),0))>t||v){if(h>t){for(a=qe.apply(this,[n,o,t-(d+f),t]),c.push(a.shift()),c=[a.pop()];a.length;)l.push([a.shift()]);h=o.slice(n.length-(c[0]?c[0].length:0)).reduce((function(e,t){return e+t}),0)}else c=[n];l.push(c),d=h+A,f=m}else c.push(n),d+=f+h,f=m}return u=A?function(e,t){return(t?g:\"\")+e.join(\" \")}:function(e){return e.join(\" \")},l.map(u)},Ke.splitTextToSize=function(e,t,r){var n,o=(r=r||{}).fontSize||this.internal.getFontSize(),s=function(e){if(e.widths&&e.kerning)return{widths:e.widths,kerning:e.kerning};var t=this.internal.getFont(e.fontName,e.fontStyle);return t.metadata.Unicode?{widths:t.metadata.Unicode.widths||{0:1},kerning:t.metadata.Unicode.kerning||{}}:{font:t.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,r);n=Array.isArray(e)?e:String(e).split(\u002F\\r?\\n\u002F);var i=1*this.internal.scaleFactor*t\u002Fo;s.textIndent=r.textIndent?1*r.textIndent*this.internal.scaleFactor\u002Fo:0,s.lineIndent=r.lineIndent;var a,A,u=[];for(a=0,A=n.length;a\u003CA;a++)u=u.concat(Ge.apply(this,[n[a],i,s]));return u},function(e){e.__fontmetrics__=e.__fontmetrics__||{};for(var t=\"klmnopqrstuvwxyz\",r={},n={},o=0;o\u003Ct.length;o++)r[t[o]]=\"0123456789abcdef\"[o],n[\"0123456789abcdef\"[o]]=t[o];var s=function(e){return\"0x\"+parseInt(e,10).toString(16)},i=e.__fontmetrics__.compress=function(e){var t,r,o,a,A=[\"{\"];for(var u in e){if(t=e[u],isNaN(parseInt(u,10))?r=\"'\"+u+\"'\":(u=parseInt(u,10),r=(r=s(u).slice(2)).slice(0,-1)+n[r.slice(-1)]),\"number\"==typeof t)t\u003C0?(o=s(t).slice(3),a=\"-\"):(o=s(t).slice(2),a=\"\"),o=a+o.slice(0,-1)+n[o.slice(-1)];else{if(\"object\"!=typeof t)throw new Error(\"Don't know what to do with value type \"+typeof t+\".\");o=i(t)}A.push(r+o)}return A.push(\"}\"),A.join(\"\")},a=e.__fontmetrics__.uncompress=function(e){if(\"string\"!=typeof e)throw new Error(\"Invalid argument passed to uncompress.\");for(var t,n,o,s,i={},a=1,A=i,u=[],c=\"\",l=\"\",d=e.length-1,f=1;f\u003Cd;f+=1)\"'\"==(s=e[f])?t?(o=t.join(\"\"),t=void 0):t=[]:t?t.push(s):\"{\"==s?(u.push([A,o]),A={},o=void 0):\"}\"==s?((n=u.pop())[0][n[1]]=A,o=void 0,A=n[0]):\"-\"==s?a=-1:void 0===o?r.hasOwnProperty(s)?(c+=r[s],o=parseInt(c,16)*a,a=1,c=\"\"):c+=s:r.hasOwnProperty(s)?(l+=r[s],A[o]=parseInt(l,16)*a,a=1,o=void 0,l=\"\"):l+=s;return i},A={codePages:[\"WinAnsiEncoding\"],WinAnsiEncoding:a(\"{19m8n201n9q201o9r201s9l201t9m201u8m201w9n201x9o201y8o202k8q202l8r202m9p202q8p20aw8k203k8t203t8v203u9v2cq8s212m9t15m8w15n9w2dw9s16k8u16l9u17s9z17x8y17y9y}\")},u={Unicode:{Courier:A,\"Courier-Bold\":A,\"Courier-BoldOblique\":A,\"Courier-Oblique\":A,Helvetica:A,\"Helvetica-Bold\":A,\"Helvetica-BoldOblique\":A,\"Helvetica-Oblique\":A,\"Times-Roman\":A,\"Times-Bold\":A,\"Times-BoldItalic\":A,\"Times-Italic\":A}},c={Unicode:{\"Courier-Oblique\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-BoldItalic\":a(\"{'widths'{k3o2q4ycx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2r202m2n2n3m2o3m2p5n202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5n4l4m4m4m4n4m4o4s4p4m4q4m4r4s4s4y4t2r4u3m4v4m4w3x4x5t4y4s4z4s5k3x5l4s5m4m5n3r5o3x5p4s5q4m5r5t5s4m5t3x5u3x5v2l5w1w5x2l5y3t5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q2l6r3m6s3r6t1w6u1w6v3m6w1w6x4y6y3r6z3m7k3m7l3m7m2r7n2r7o1w7p3r7q2w7r4m7s3m7t2w7u2r7v2n7w1q7x2n7y3t202l3mcl4mal2ram3man3mao3map3mar3mas2lat4uau1uav3maw3way4uaz2lbk2sbl3t'fof'6obo2lbp3tbq3mbr1tbs2lbu1ybv3mbz3mck4m202k3mcm4mcn4mco4mcp4mcq5ycr4mcs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz2w203k6o212m6o2dw2l2cq2l3t3m3u2l17s3x19m3m}'kerning'{cl{4qu5kt5qt5rs17ss5ts}201s{201ss}201t{cks4lscmscnscoscpscls2wu2yu201ts}201x{2wu2yu}2k{201ts}2w{4qx5kx5ou5qx5rs17su5tu}2x{17su5tu5ou}2y{4qx5kx5ou5qx5rs17ss5ts}'fof'-6ofn{17sw5tw5ou5qw5rs}7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qs}3v{17su5tu5os5qs}7p{17su5tu}ck{4qu5kt5qt5rs17ss5ts}4l{4qu5kt5qt5rs17ss5ts}cm{4qu5kt5qt5rs17ss5ts}cn{4qu5kt5qt5rs17ss5ts}co{4qu5kt5qt5rs17ss5ts}cp{4qu5kt5qt5rs17ss5ts}6l{4qu5ou5qw5rt17su5tu}5q{ckuclucmucnucoucpu4lu}5r{ckuclucmucnucoucpu4lu}7q{cksclscmscnscoscps4ls}6p{4qu5ou5qw5rt17sw5tw}ek{4qu5ou5qw5rt17su5tu}el{4qu5ou5qw5rt17su5tu}em{4qu5ou5qw5rt17su5tu}en{4qu5ou5qw5rt17su5tu}eo{4qu5ou5qw5rt17su5tu}ep{4qu5ou5qw5rt17su5tu}es{17ss5ts5qs4qu}et{4qu5ou5qw5rt17sw5tw}eu{4qu5ou5qw5rt17ss5ts}ev{17ss5ts5qs4qu}6z{17sw5tw5ou5qw5rs}fm{17sw5tw5ou5qw5rs}7n{201ts}fo{17sw5tw5ou5qw5rs}fp{17sw5tw5ou5qw5rs}fq{17sw5tw5ou5qw5rs}7r{cksclscmscnscoscps4ls}fs{17sw5tw5ou5qw5rs}ft{17su5tu}fu{17su5tu}fv{17su5tu}fw{17su5tu}fz{cksclscmscnscoscps4ls}}}\"),\"Helvetica-Bold\":a(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),Courier:a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-BoldOblique\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Bold\":a(\"{'widths'{k3q2q5ncx2r201n3m201o6o201s2l201t2l201u2l201w3m201x3m201y3m2k1t2l2l202m2n2n3m2o3m2p6o202q6o2r1w2s2l2t2l2u3m2v3t2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w3t3x3t3y3t3z3m4k5x4l4s4m4m4n4s4o4s4p4m4q3x4r4y4s4y4t2r4u3m4v4y4w4m4x5y4y4s4z4y5k3x5l4y5m4s5n3r5o4m5p4s5q4s5r6o5s4s5t4s5u4m5v2l5w1w5x2l5y3u5z3m6k2l6l3m6m3r6n2w6o3r6p2w6q2l6r3m6s3r6t1w6u2l6v3r6w1w6x5n6y3r6z3m7k3r7l3r7m2w7n2r7o2l7p3r7q3m7r4s7s3m7t3m7u2w7v2r7w1q7x2r7y3o202l3mcl4sal2lam3man3mao3map3mar3mas2lat4uau1yav3maw3tay4uaz2lbk2sbl3t'fof'6obo2lbp3rbr1tbs2lbu2lbv3mbz3mck4s202k3mcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw2r2m3rcy2rcz2rdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3rek3mel3mem3men3meo3mep3meq4ser2wes2wet2weu2wev2wew1wex1wey1wez1wfl3rfm3mfn3mfo3mfp3mfq3mfr3tfs3mft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3m3u2l17s4s19m3m}'kerning'{cl{4qt5ks5ot5qy5rw17sv5tv}201t{cks4lscmscnscoscpscls4wv}2k{201ts}2w{4qu5ku7mu5os5qx5ru17su5tu}2x{17su5tu5ou5qs}2y{4qv5kv7mu5ot5qz5ru17su5tu}'fof'-6o7t{cksclscmscnscoscps4ls}3u{17su5tu5os5qu}3v{17su5tu5os5qu}fu{17su5tu5ou5qu}7p{17su5tu5ou5qu}ck{4qt5ks5ot5qy5rw17sv5tv}4l{4qt5ks5ot5qy5rw17sv5tv}cm{4qt5ks5ot5qy5rw17sv5tv}cn{4qt5ks5ot5qy5rw17sv5tv}co{4qt5ks5ot5qy5rw17sv5tv}cp{4qt5ks5ot5qy5rw17sv5tv}6l{17st5tt5ou5qu}17s{ckuclucmucnucoucpu4lu4wu}5o{ckuclucmucnucoucpu4lu4wu}5q{ckzclzcmzcnzcozcpz4lz4wu}5r{ckxclxcmxcnxcoxcpx4lx4wu}5t{ckuclucmucnucoucpu4lu4wu}7q{ckuclucmucnucoucpu4lu}6p{17sw5tw5ou5qu}ek{17st5tt5qu}el{17st5tt5ou5qu}em{17st5tt5qu}en{17st5tt5qu}eo{17st5tt5qu}ep{17st5tt5ou5qu}es{17ss5ts5qu}et{17sw5tw5ou5qu}eu{17sw5tw5ou5qu}ev{17ss5ts5qu}6z{17sw5tw5ou5qu5rs}fm{17sw5tw5ou5qu5rs}fn{17sw5tw5ou5qu5rs}fo{17sw5tw5ou5qu5rs}fp{17sw5tw5ou5qu5rs}fq{17sw5tw5ou5qu5rs}7r{cktcltcmtcntcotcpt4lt5os}fs{17sw5tw5ou5qu5rs}ft{17su5tu5ou5qu}7m{5os}fv{17su5tu5ou5qu}fw{17su5tu5ou5qu}fz{cksclscmscnscoscps4ls}}}\"),Symbol:a(\"{'widths'{k3uaw4r19m3m2k1t2l2l202m2y2n3m2p5n202q6o3k3m2s2l2t2l2v3r2w1t3m3m2y1t2z1wbk2sbl3r'fof'6o3n3m3o3m3p3m3q3m3r3m3s3m3t3m3u1w3v1w3w3r3x3r3y3r3z2wbp3t3l3m5v2l5x2l5z3m2q4yfr3r7v3k7w1o7x3k}'kerning'{'fof'-6o}}\"),Helvetica:a(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\"),\"Helvetica-BoldOblique\":a(\"{'widths'{k3s2q4scx1w201n3r201o6o201s1w201t1w201u1w201w3m201x3m201y3m2k1w2l2l202m2n2n3r2o3r2p5t202q6o2r1s2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v2l3w3u3x3u3y3u3z3x4k6l4l4s4m4s4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3r4v4s4w3x4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v2l5w1w5x2l5y3u5z3r6k2l6l3r6m3x6n3r6o3x6p3r6q2l6r3x6s3x6t1w6u1w6v3r6w1w6x5t6y3x6z3x7k3x7l3x7m2r7n3r7o2l7p3x7q3r7r4y7s3r7t3r7u3m7v2r7w1w7x2r7y3u202l3rcl4sal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3xbq3rbr1wbs2lbu2obv3rbz3xck4s202k3rcm4scn4sco4scp4scq6ocr4scs4mct4mcu4mcv4mcw1w2m2zcy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3res3ret3reu3rev3rew1wex1wey1wez1wfl3xfm3xfn3xfo3xfp3xfq3xfr3ufs3xft3xfu3xfv3xfw3xfz3r203k6o212m6o2dw2l2cq2l3t3r3u2l17s4m19m3r}'kerning'{cl{4qs5ku5ot5qs17sv5tv}201t{2ww4wy2yw}201w{2ks}201x{2ww4wy2yw}2k{201ts201xs}2w{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}2x{5ow5qs}2y{7qs4qu5kw5os5qw5rs17su5tu7tsfzs}'fof'-6o7p{17su5tu5ot}ck{4qs5ku5ot5qs17sv5tv}4l{4qs5ku5ot5qs17sv5tv}cm{4qs5ku5ot5qs17sv5tv}cn{4qs5ku5ot5qs17sv5tv}co{4qs5ku5ot5qs17sv5tv}cp{4qs5ku5ot5qs17sv5tv}6l{17st5tt5os}17s{2kwclvcmvcnvcovcpv4lv4wwckv}5o{2kucltcmtcntcotcpt4lt4wtckt}5q{2ksclscmscnscoscps4ls4wvcks}5r{2ks4ws}5t{2kwclvcmvcnvcovcpv4lv4wwckv}eo{17st5tt5os}fu{17su5tu5ot}6p{17ss5ts}ek{17st5tt5os}el{17st5tt5os}em{17st5tt5os}en{17st5tt5os}6o{201ts}ep{17st5tt5os}es{17ss5ts}et{17ss5ts}eu{17ss5ts}ev{17ss5ts}6z{17su5tu5os5qt}fm{17su5tu5os5qt}fn{17su5tu5os5qt}fo{17su5tu5os5qt}fp{17su5tu5os5qt}fq{17su5tu5os5qt}fs{17su5tu5os5qt}ft{17su5tu5ot}7m{5os}fv{17su5tu5ot}fw{17su5tu5ot}}}\"),ZapfDingbats:a(\"{'widths'{k4u2k1w'fof'6o}'kerning'{'fof'-6o}}\"),\"Courier-Bold\":a(\"{'widths'{k3w'fof'6o}'kerning'{'fof'-6o}}\"),\"Times-Italic\":a(\"{'widths'{k3n2q4ycx2l201n3m201o5t201s2l201t2l201u2l201w3r201x3r201y3r2k1t2l2l202m2n2n3m2o3m2p5n202q5t2r1p2s2l2t2l2u3m2v4n2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v2l3w4n3x4n3y4n3z3m4k5w4l3x4m3x4n4m4o4s4p3x4q3x4r4s4s4s4t2l4u2w4v4m4w3r4x5n4y4m4z4s5k3x5l4s5m3x5n3m5o3r5p4s5q3x5r5n5s3x5t3r5u3r5v2r5w1w5x2r5y2u5z3m6k2l6l3m6m3m6n2w6o3m6p2w6q1w6r3m6s3m6t1w6u1w6v2w6w1w6x4s6y3m6z3m7k3m7l3m7m2r7n2r7o1w7p3m7q2w7r4m7s2w7t2w7u2r7v2s7w1v7x2s7y3q202l3mcl3xal2ram3man3mao3map3mar3mas2lat4wau1vav3maw4nay4waz2lbk2sbl4n'fof'6obo2lbp3mbq3obr1tbs2lbu1zbv3mbz3mck3x202k3mcm3xcn3xco3xcp3xcq5tcr4mcs3xct3xcu3xcv3xcw2l2m2ucy2lcz2ldl4mdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek3mel3mem3men3meo3mep3meq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr4nfs3mft3mfu3mfv3mfw3mfz2w203k6o212m6m2dw2l2cq2l3t3m3u2l17s3r19m3m}'kerning'{cl{5kt4qw}201s{201sw}201t{201tw2wy2yy6q-t}201x{2wy2yy}2k{201tw}2w{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}2x{17ss5ts5os}2y{7qs4qy7rs5ky7mw5os5qx5ru17su5tu}'fof'-6o6t{17ss5ts5qs}7t{5os}3v{5qs}7p{17su5tu5qs}ck{5kt4qw}4l{5kt4qw}cm{5kt4qw}cn{5kt4qw}co{5kt4qw}cp{5kt4qw}6l{4qs5ks5ou5qw5ru17su5tu}17s{2ks}5q{ckvclvcmvcnvcovcpv4lv}5r{ckuclucmucnucoucpu4lu}5t{2ks}6p{4qs5ks5ou5qw5ru17su5tu}ek{4qs5ks5ou5qw5ru17su5tu}el{4qs5ks5ou5qw5ru17su5tu}em{4qs5ks5ou5qw5ru17su5tu}en{4qs5ks5ou5qw5ru17su5tu}eo{4qs5ks5ou5qw5ru17su5tu}ep{4qs5ks5ou5qw5ru17su5tu}es{5ks5qs4qs}et{4qs5ks5ou5qw5ru17su5tu}eu{4qs5ks5qw5ru17su5tu}ev{5ks5qs4qs}ex{17ss5ts5qs}6z{4qv5ks5ou5qw5ru17su5tu}fm{4qv5ks5ou5qw5ru17su5tu}fn{4qv5ks5ou5qw5ru17su5tu}fo{4qv5ks5ou5qw5ru17su5tu}fp{4qv5ks5ou5qw5ru17su5tu}fq{4qv5ks5ou5qw5ru17su5tu}7r{5os}fs{4qv5ks5ou5qw5ru17su5tu}ft{17su5tu5qs}fu{17su5tu5qs}fv{17su5tu5qs}fw{17su5tu5qs}}}\"),\"Times-Roman\":a(\"{'widths'{k3n2q4ycx2l201n3m201o6o201s2l201t2l201u2l201w2w201x2w201y2w2k1t2l2l202m2n2n3m2o3m2p5n202q6o2r1m2s2l2t2l2u3m2v3s2w1t2x2l2y1t2z1w3k3m3l3m3m3m3n3m3o3m3p3m3q3m3r3m3s3m203t2l203u2l3v1w3w3s3x3s3y3s3z2w4k5w4l4s4m4m4n4m4o4s4p3x4q3r4r4s4s4s4t2l4u2r4v4s4w3x4x5t4y4s4z4s5k3r5l4s5m4m5n3r5o3x5p4s5q4s5r5y5s4s5t4s5u3x5v2l5w1w5x2l5y2z5z3m6k2l6l2w6m3m6n2w6o3m6p2w6q2l6r3m6s3m6t1w6u1w6v3m6w1w6x4y6y3m6z3m7k3m7l3m7m2l7n2r7o1w7p3m7q3m7r4s7s3m7t3m7u2w7v3k7w1o7x3k7y3q202l3mcl4sal2lam3man3mao3map3mar3mas2lat4wau1vav3maw3say4waz2lbk2sbl3s'fof'6obo2lbp3mbq2xbr1tbs2lbu1zbv3mbz2wck4s202k3mcm4scn4sco4scp4scq5tcr4mcs3xct3xcu3xcv3xcw2l2m2tcy2lcz2ldl4sdm4sdn4sdo4sdp4sdq4sds4sdt4sdu4sdv4sdw4sdz3mek2wel2wem2wen2weo2wep2weq4mer2wes2wet2weu2wev2wew1wex1wey1wez1wfl3mfm3mfn3mfo3mfp3mfq3mfr3sfs3mft3mfu3mfv3mfw3mfz3m203k6o212m6m2dw2l2cq2l3t3m3u1w17s4s19m3m}'kerning'{cl{4qs5ku17sw5ou5qy5rw201ss5tw201ws}201s{201ss}201t{ckw4lwcmwcnwcowcpwclw4wu201ts}2k{201ts}2w{4qs5kw5os5qx5ru17sx5tx}2x{17sw5tw5ou5qu}2y{4qs5kw5os5qx5ru17sx5tx}'fof'-6o7t{ckuclucmucnucoucpu4lu5os5rs}3u{17su5tu5qs}3v{17su5tu5qs}7p{17sw5tw5qs}ck{4qs5ku17sw5ou5qy5rw201ss5tw201ws}4l{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cm{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cn{4qs5ku17sw5ou5qy5rw201ss5tw201ws}co{4qs5ku17sw5ou5qy5rw201ss5tw201ws}cp{4qs5ku17sw5ou5qy5rw201ss5tw201ws}6l{17su5tu5os5qw5rs}17s{2ktclvcmvcnvcovcpv4lv4wuckv}5o{ckwclwcmwcnwcowcpw4lw4wu}5q{ckyclycmycnycoycpy4ly4wu5ms}5r{cktcltcmtcntcotcpt4lt4ws}5t{2ktclvcmvcnvcovcpv4lv4wuckv}7q{cksclscmscnscoscps4ls}6p{17su5tu5qw5rs}ek{5qs5rs}el{17su5tu5os5qw5rs}em{17su5tu5os5qs5rs}en{17su5qs5rs}eo{5qs5rs}ep{17su5tu5os5qw5rs}es{5qs}et{17su5tu5qw5rs}eu{17su5tu5qs5rs}ev{5qs}6z{17sv5tv5os5qx5rs}fm{5os5qt5rs}fn{17sv5tv5os5qx5rs}fo{17sv5tv5os5qx5rs}fp{5os5qt5rs}fq{5os5qt5rs}7r{ckuclucmucnucoucpu4lu5os}fs{17sv5tv5os5qx5rs}ft{17ss5ts5qs}fu{17sw5tw5qs}fv{17sw5tw5qs}fw{17ss5ts5qs}fz{ckuclucmucnucoucpu4lu5os5rs}}}\"),\"Helvetica-Oblique\":a(\"{'widths'{k3p2q4mcx1w201n3r201o6o201s1q201t1q201u1q201w2l201x2l201y2l2k1w2l1w202m2n2n3r2o3r2p5t202q6o2r1n2s2l2t2l2u2r2v3u2w1w2x2l2y1w2z1w3k3r3l3r3m3r3n3r3o3r3p3r3q3r3r3r3s3r203t2l203u2l3v1w3w3u3x3u3y3u3z3r4k6p4l4m4m4m4n4s4o4s4p4m4q3x4r4y4s4s4t1w4u3m4v4m4w3r4x5n4y4s4z4y5k4m5l4y5m4s5n4m5o3x5p4s5q4m5r5y5s4m5t4m5u3x5v1w5w1w5x1w5y2z5z3r6k2l6l3r6m3r6n3m6o3r6p3r6q1w6r3r6s3r6t1q6u1q6v3m6w1q6x5n6y3r6z3r7k3r7l3r7m2l7n3m7o1w7p3r7q3m7r4s7s3m7t3m7u3m7v2l7w1u7x2l7y3u202l3rcl4mal2lam3ran3rao3rap3rar3ras2lat4tau2pav3raw3uay4taz2lbk2sbl3u'fof'6obo2lbp3rbr1wbs2lbu2obv3rbz3xck4m202k3rcm4mcn4mco4mcp4mcq6ocr4scs4mct4mcu4mcv4mcw1w2m2ncy1wcz1wdl4sdm4ydn4ydo4ydp4ydq4yds4ydt4sdu4sdv4sdw4sdz3xek3rel3rem3ren3reo3rep3req5ter3mes3ret3reu3rev3rew1wex1wey1wez1wfl3rfm3rfn3rfo3rfp3rfq3rfr3ufs3xft3rfu3rfv3rfw3rfz3m203k6o212m6o2dw2l2cq2l3t3r3u1w17s4m19m3r}'kerning'{5q{4wv}cl{4qs5kw5ow5qs17sv5tv}201t{2wu4w1k2yu}201x{2wu4wy2yu}17s{2ktclucmucnu4otcpu4lu4wycoucku}2w{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}2x{17sy5ty5oy5qs}2y{7qs4qz5k1m17sy5ow5qx5rsfsu5ty7tufzu}'fof'-6o7p{17sv5tv5ow}ck{4qs5kw5ow5qs17sv5tv}4l{4qs5kw5ow5qs17sv5tv}cm{4qs5kw5ow5qs17sv5tv}cn{4qs5kw5ow5qs17sv5tv}co{4qs5kw5ow5qs17sv5tv}cp{4qs5kw5ow5qs17sv5tv}6l{17sy5ty5ow}do{17st5tt}4z{17st5tt}7s{fst}dm{17st5tt}dn{17st5tt}5o{ckwclwcmwcnwcowcpw4lw4wv}dp{17st5tt}dq{17st5tt}7t{5ow}ds{17st5tt}5t{2ktclucmucnu4otcpu4lu4wycoucku}fu{17sv5tv5ow}6p{17sy5ty5ow5qs}ek{17sy5ty5ow}el{17sy5ty5ow}em{17sy5ty5ow}en{5ty}eo{17sy5ty5ow}ep{17sy5ty5ow}es{17sy5ty5qs}et{17sy5ty5ow5qs}eu{17sy5ty5ow5qs}ev{17sy5ty5ow5qs}6z{17sy5ty5ow5qs}fm{17sy5ty5ow5qs}fn{17sy5ty5ow5qs}fo{17sy5ty5ow5qs}fp{17sy5ty5qs}fq{17sy5ty5ow5qs}7r{5ow}fs{17sy5ty5ow5qs}ft{17sv5tv5ow}7m{5ow}fv{17sv5tv5ow}fw{17sv5tv5ow}}}\")}};e.events.push([\"addFont\",function(e){var t=e.font,r=c.Unicode[t.postScriptName];r&&(t.metadata.Unicode={},t.metadata.Unicode.widths=r.widths,t.metadata.Unicode.kerning=r.kerning);var n=u.Unicode[t.postScriptName];n&&(t.metadata.Unicode.encoding=n,t.encoding=n.codePages[0])}])}(H.API),function(e){var t=function(e){for(var t=e.length,r=new Uint8Array(t),n=0;n\u003Ct;n++)r[n]=e.charCodeAt(n);return r};e.API.events.push([\"addFont\",function(r){var n=void 0,o=r.font,s=r.instance;if(!o.isStandardFont){if(void 0===s)throw new Error(\"Font does not exist in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");if(\"string\"!=typeof(n=!1===s.existsFileInVFS(o.postScriptName)?s.loadFile(o.postScriptName):s.getFileFromVFS(o.postScriptName)))throw new Error(\"Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('\"+o.postScriptName+\"').\");!function(r,n){n=\u002F^\\x00\\x01\\x00\\x00\u002F.test(n)?t(n):t(c(n)),r.metadata=e.API.TTFFont.open(n),r.metadata.Unicode=r.metadata.Unicode||{encoding:{},kerning:{},widths:[]},r.metadata.glyIdsUsed=[0]}(o,n)}}])}(H),function(e){function t(){return(o.canvg?Promise.resolve(o.canvg):Promise.resolve().then(r.bind(r,\".\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js\"))).catch((function(e){return Promise.reject(new Error(\"Could not load canvg: \"+e))})).then((function(e){return e.default?e.default:e}))}H.API.addSvgAsImage=function(e,r,n,o,s,a,A,u){if(isNaN(r)||isNaN(n))throw i.error(\"jsPDF.addSvgAsImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addSvgAsImage\");if(isNaN(o)||isNaN(s))throw i.error(\"jsPDF.addSvgAsImage: Invalid measurements\",arguments),new Error(\"Invalid measurements (width and\u002For height) passed to jsPDF.addSvgAsImage\");var c=document.createElement(\"canvas\");c.width=o,c.height=s;var l=c.getContext(\"2d\");l.fillStyle=\"#fff\",l.fillRect(0,0,c.width,c.height);var d={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},f=this;return t().then((function(t){return t.fromString(l,e,d)}),(function(){return Promise.reject(new Error(\"Could not load canvg.\"))})).then((function(e){return e.render(d)})).then((function(){f.addImage(c.toDataURL(\"image\u002Fjpeg\",1),r,n,o,s,A,u)}))}}(),H.API.putTotalPages=function(e){var t,r=0;parseInt(this.internal.getFont().id.substr(1),10)\u003C15?(t=new RegExp(e,\"g\"),r=this.internal.getNumberOfPages()):(t=new RegExp(this.pdfEscape16(e,this.internal.getFont()),\"g\"),r=this.pdfEscape16(this.internal.getNumberOfPages()+\"\",this.internal.getFont()));for(var n=1;n\u003C=this.internal.getNumberOfPages();n++)for(var o=0;o\u003Cthis.internal.pages[n].length;o++)this.internal.pages[n][o]=this.internal.pages[n][o].replace(t,r);return this},H.API.viewerPreferences=function(e,t){var r;e=e||{},t=t||!1;var n,o,s,i={HideToolbar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:\"UseNone\",value:\"UseNone\",type:\"name\",explicitSet:!1,valueSet:[\"UseNone\",\"UseOutlines\",\"UseThumbs\",\"UseOC\"],pdfVersion:1.3},Direction:{defaultValue:\"L2R\",value:\"L2R\",type:\"name\",explicitSet:!1,valueSet:[\"L2R\",\"R2L\"],pdfVersion:1.3},ViewArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},ViewClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintArea:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintClip:{defaultValue:\"CropBox\",value:\"CropBox\",type:\"name\",explicitSet:!1,valueSet:[\"MediaBox\",\"CropBox\",\"TrimBox\",\"BleedBox\",\"ArtBox\"],pdfVersion:1.4},PrintScaling:{defaultValue:\"AppDefault\",value:\"AppDefault\",type:\"name\",explicitSet:!1,valueSet:[\"AppDefault\",\"None\"],pdfVersion:1.6},Duplex:{defaultValue:\"\",value:\"none\",type:\"name\",explicitSet:!1,valueSet:[\"Simplex\",\"DuplexFlipShortEdge\",\"DuplexFlipLongEdge\",\"none\"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:\"boolean\",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:\"\",value:\"\",type:\"array\",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:\"integer\",explicitSet:!1,valueSet:null,pdfVersion:1.7}},a=Object.keys(i),A=[],u=0,c=0,l=0;function d(e,t){var r,n=!1;for(r=0;r\u003Ce.length;r+=1)e[r]===t&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(i)),this.internal.viewerpreferences.isSubscribed=!1),r=this.internal.viewerpreferences.configuration,\"reset\"===e||!0===t){var f=a.length;for(l=0;l\u003Cf;l+=1)r[a[l]].value=r[a[l]].defaultValue,r[a[l]].explicitSet=!1}if(\"object\"==typeof e)for(o in e)if(s=e[o],d(a,o)&&void 0!==s){if(\"boolean\"===r[o].type&&\"boolean\"==typeof s)r[o].value=s;else if(\"name\"===r[o].type&&d(r[o].valueSet,s))r[o].value=s;else if(\"integer\"===r[o].type&&Number.isInteger(s))r[o].value=s;else if(\"array\"===r[o].type){for(u=0;u\u003Cs.length;u+=1)if(n=!0,1===s[u].length&&\"number\"==typeof s[u][0])A.push(String(s[u]-1));else if(s[u].length>1){for(c=0;c\u003Cs[u].length;c+=1)\"number\"!=typeof s[u][c]&&(n=!1);!0===n&&A.push([s[u][0]-1,s[u][1]-1].join(\" \"))}r[o].value=\"[\"+A.join(\" \")+\"]\"}else r[o].value=r[o].defaultValue;r[o].explicitSet=!0}return!1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe(\"putCatalog\",(function(){var e,t=[];for(e in r)!0===r[e].explicitSet&&(\"name\"===r[e].type?t.push(\"\u002F\"+e+\" \u002F\"+r[e].value):t.push(\"\u002F\"+e+\" \"+r[e].value));0!==t.length&&this.internal.write(\"\u002FViewerPreferences\\n\u003C\u003C\\n\"+t.join(\"\\n\")+\"\\n>>\")})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=r,this},function(e){var t=function(){var e='\u003Crdf:RDF xmlns:rdf=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002F02\u002F22-rdf-syntax-ns#\">\u003Crdf:Description rdf:about=\"\" xmlns:jspdf=\"'+this.internal.__metadata__.namespaceuri+'\">\u003Cjspdf:metadata>',t=unescape(encodeURIComponent('\u003Cx:xmpmeta xmlns:x=\"adobe:ns:meta\u002F\">')),r=unescape(encodeURIComponent(e)),n=unescape(encodeURIComponent(this.internal.__metadata__.metadata)),o=unescape(encodeURIComponent(\"\u003C\u002Fjspdf:metadata>\u003C\u002Frdf:Description>\u003C\u002Frdf:RDF>\")),s=unescape(encodeURIComponent(\"\u003C\u002Fx:xmpmeta>\")),i=r.length+n.length+o.length+t.length+s.length;this.internal.__metadata__.metadata_object_number=this.internal.newObject(),this.internal.write(\"\u003C\u003C \u002FType \u002FMetadata \u002FSubtype \u002FXML \u002FLength \"+i+\" >>\"),this.internal.write(\"stream\"),this.internal.write(t+r+n+o+s),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")},r=function(){this.internal.__metadata__.metadata_object_number&&this.internal.write(\"\u002FMetadata \"+this.internal.__metadata__.metadata_object_number+\" 0 R\")};e.addMetadata=function(e,n){return void 0===this.internal.__metadata__&&(this.internal.__metadata__={metadata:e,namespaceuri:n||\"http:\u002F\u002Fjspdf.default.namespaceuri\u002F\"},this.internal.events.subscribe(\"putCatalog\",r),this.internal.events.subscribe(\"postPutResources\",t)),this}}(H.API),function(e){var t=e.API,r=t.pdfEscape16=function(e,t){for(var r,n=t.metadata.Unicode.widths,o=[\"\",\"0\",\"00\",\"000\",\"0000\"],s=[\"\"],i=0,a=e.length;i\u003Ca;++i){if(r=t.metadata.characterToGlyph(e.charCodeAt(i)),t.metadata.glyIdsUsed.push(r),t.metadata.toUnicode[r]=e.charCodeAt(i),-1==n.indexOf(r)&&(n.push(r),n.push([parseInt(t.metadata.widthOfGlyph(r),10)])),\"0\"==r)return s.join(\"\");r=r.toString(16),s.push(o[4-r.length],r)}return s.join(\"\")},n=function(e){var t,r,n,o,s,i,a;for(s=\"\u002FCIDInit \u002FProcSet findresource begin\\n12 dict begin\\nbegincmap\\n\u002FCIDSystemInfo \u003C\u003C\\n  \u002FRegistry (Adobe)\\n  \u002FOrdering (UCS)\\n  \u002FSupplement 0\\n>> def\\n\u002FCMapName \u002FAdobe-Identity-UCS def\\n\u002FCMapType 2 def\\n1 begincodespacerange\\n\u003C0000>\u003Cffff>\\nendcodespacerange\",n=[],i=0,a=(r=Object.keys(e).sort((function(e,t){return e-t}))).length;i\u003Ca;i++)t=r[i],n.length>=100&&(s+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\",n=[]),void 0!==e[t]&&null!==e[t]&&\"function\"==typeof e[t].toString&&(o=(\"0000\"+e[t].toString(16)).slice(-4),t=(\"0000\"+(+t).toString(16)).slice(-4),n.push(\"\u003C\"+t+\">\u003C\"+o+\">\"));return n.length&&(s+=\"\\n\"+n.length+\" beginbfchar\\n\"+n.join(\"\\n\")+\"\\nendbfchar\\n\"),s+\"endcmap\\nCMapName currentdict \u002FCMap defineresource pop\\nend\\nend\"};t.events.push([\"putFont\",function(t){!function(t){var r=t.font,o=t.out,s=t.newObject,i=t.putStream,a=t.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof e.API.TTFFont&&\"Identity-H\"===r.encoding){for(var A=r.metadata.Unicode.widths,u=r.metadata.subset.encode(r.metadata.glyIdsUsed,1),c=\"\",l=0;l\u003Cu.length;l++)c+=String.fromCharCode(u[l]);var d=s();i({data:c,addLength1:!0,objectId:d}),o(\"endobj\");var f=s();i({data:n(r.metadata.toUnicode),addLength1:!0,objectId:f}),o(\"endobj\");var h=s();o(\"\u003C\u003C\"),o(\"\u002FType \u002FFontDescriptor\"),o(\"\u002FFontName \u002F\"+a(r.fontName)),o(\"\u002FFontFile2 \"+d+\" 0 R\"),o(\"\u002FFontBBox \"+e.API.PDFObject.convert(r.metadata.bbox)),o(\"\u002FFlags \"+r.metadata.flags),o(\"\u002FStemV \"+r.metadata.stemV),o(\"\u002FItalicAngle \"+r.metadata.italicAngle),o(\"\u002FAscent \"+r.metadata.ascender),o(\"\u002FDescent \"+r.metadata.decender),o(\"\u002FCapHeight \"+r.metadata.capHeight),o(\">>\"),o(\"endobj\");var p=s();o(\"\u003C\u003C\"),o(\"\u002FType \u002FFont\"),o(\"\u002FBaseFont \u002F\"+a(r.fontName)),o(\"\u002FFontDescriptor \"+h+\" 0 R\"),o(\"\u002FW \"+e.API.PDFObject.convert(A)),o(\"\u002FCIDToGIDMap \u002FIdentity\"),o(\"\u002FDW 1000\"),o(\"\u002FSubtype \u002FCIDFontType2\"),o(\"\u002FCIDSystemInfo\"),o(\"\u003C\u003C\"),o(\"\u002FSupplement 0\"),o(\"\u002FRegistry (Adobe)\"),o(\"\u002FOrdering (\"+r.encoding+\")\"),o(\">>\"),o(\">>\"),o(\"endobj\"),r.objectNumber=s(),o(\"\u003C\u003C\"),o(\"\u002FType \u002FFont\"),o(\"\u002FSubtype \u002FType0\"),o(\"\u002FToUnicode \"+f+\" 0 R\"),o(\"\u002FBaseFont \u002F\"+a(r.fontName)),o(\"\u002FEncoding \u002F\"+r.encoding),o(\"\u002FDescendantFonts [\"+p+\" 0 R]\"),o(\">>\"),o(\"endobj\"),r.isAlreadyPutted=!0}}(t)}]),t.events.push([\"putFont\",function(t){!function(t){var r=t.font,o=t.out,s=t.newObject,i=t.putStream,a=t.pdfEscapeWithNeededParanthesis;if(r.metadata instanceof e.API.TTFFont&&\"WinAnsiEncoding\"===r.encoding){for(var A=r.metadata.rawData,u=\"\",c=0;c\u003CA.length;c++)u+=String.fromCharCode(A[c]);var l=s();i({data:u,addLength1:!0,objectId:l}),o(\"endobj\");var d=s();i({data:n(r.metadata.toUnicode),addLength1:!0,objectId:d}),o(\"endobj\");var f=s();o(\"\u003C\u003C\"),o(\"\u002FDescent \"+r.metadata.decender),o(\"\u002FCapHeight \"+r.metadata.capHeight),o(\"\u002FStemV \"+r.metadata.stemV),o(\"\u002FType \u002FFontDescriptor\"),o(\"\u002FFontFile2 \"+l+\" 0 R\"),o(\"\u002FFlags 96\"),o(\"\u002FFontBBox \"+e.API.PDFObject.convert(r.metadata.bbox)),o(\"\u002FFontName \u002F\"+a(r.fontName)),o(\"\u002FItalicAngle \"+r.metadata.italicAngle),o(\"\u002FAscent \"+r.metadata.ascender),o(\">>\"),o(\"endobj\"),r.objectNumber=s();for(var h=0;h\u003Cr.metadata.hmtx.widths.length;h++)r.metadata.hmtx.widths[h]=parseInt(r.metadata.hmtx.widths[h]*(1e3\u002Fr.metadata.head.unitsPerEm));o(\"\u003C\u003C\u002FSubtype\u002FTrueType\u002FType\u002FFont\u002FToUnicode \"+d+\" 0 R\u002FBaseFont\u002F\"+a(r.fontName)+\"\u002FFontDescriptor \"+f+\" 0 R\u002FEncoding\u002F\"+r.encoding+\" \u002FFirstChar 29 \u002FLastChar 255 \u002FWidths \"+e.API.PDFObject.convert(r.metadata.hmtx.widths)+\">>\"),o(\"endobj\"),r.isAlreadyPutted=!0}}(t)}]);var o=function(e){var t,n=e.text||\"\",o=e.x,s=e.y,i=e.options||{},a=e.mutex||{},A=a.pdfEscape,u=a.activeFontKey,c=a.fonts,l=u,d=\"\",f=0,h=\"\",p=c[l].encoding;if(\"Identity-H\"!==c[l].encoding)return{text:n,x:o,y:s,options:i,mutex:a};for(h=n,l=u,Array.isArray(n)&&(h=n[0]),f=0;f\u003Ch.length;f+=1)c[l].metadata.hasOwnProperty(\"cmap\")&&(t=c[l].metadata.cmap.unicode.codeMap[h[f].charCodeAt(0)]),t||h[f].charCodeAt(0)\u003C256&&c[l].metadata.hasOwnProperty(\"Unicode\")?d+=h[f]:d+=\"\";var m=\"\";return parseInt(l.slice(1))\u003C14||\"WinAnsiEncoding\"===p?m=A(d,l).split(\"\").map((function(e){return e.charCodeAt(0).toString(16)})).join(\"\"):\"Identity-H\"===p&&(m=r(d,c[l])),a.isHex=!0,{text:m,x:o,y:s,options:i,mutex:a}};t.events.push([\"postProcessText\",function(e){var t=e.text||\"\",r=[],n={text:t,x:e.x,y:e.y,options:e.options,mutex:e.mutex};if(Array.isArray(t)){var s=0;for(s=0;s\u003Ct.length;s+=1)Array.isArray(t[s])&&3===t[s].length?r.push([o(Object.assign({},n,{text:t[s][0]})).text,t[s][1],t[s][2]]):r.push(o(Object.assign({},n,{text:t[s]})).text);e.text=r}else e.text=o(Object.assign({},n,{text:t})).text}])}(H),function(e){var t=function(){return void 0===this.internal.vFS&&(this.internal.vFS={}),!0};e.existsFileInVFS=function(e){return t.call(this),void 0!==this.internal.vFS[e]},e.addFileToVFS=function(e,r){return t.call(this),this.internal.vFS[e]=r,this},e.getFileFromVFS=function(e){return t.call(this),void 0!==this.internal.vFS[e]?this.internal.vFS[e]:null}}(H.API),function(e){e.__bidiEngine__=e.prototype.__bidiEngine__=function(e){var r,n,o,s,i,a,A,u=t,c=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],l=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],d={L:0,R:1,EN:2,AN:3,N:4,B:5,S:6},f={0:0,5:1,6:2,7:3,32:4,251:5,254:6,255:7},h=[\"(\",\")\",\"(\",\"\u003C\",\">\",\"\u003C\",\"[\",\"]\",\"[\",\"{\",\"}\",\"{\",\"«\",\"»\",\"«\",\"‹\",\"›\",\"‹\",\"⁅\",\"⁆\",\"⁅\",\"⁽\",\"⁾\",\"⁽\",\"₍\",\"₎\",\"₍\",\"≤\",\"≥\",\"≤\",\"〈\",\"〉\",\"〈\",\"﹙\",\"﹚\",\"﹙\",\"﹛\",\"﹜\",\"﹛\",\"﹝\",\"﹞\",\"﹝\",\"﹤\",\"﹥\",\"﹤\"],p=new RegExp(\u002F^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$\u002F),m=!1,g=0;this.__bidiEngine__={};var y=function(e){var t=e.charCodeAt(),r=t>>8,n=f[r];return void 0!==n?u[256*n+(255&t)]:252===r||253===r?\"AL\":p.test(r)?\"L\":8===r?\"R\":\"N\"},v=function(e){for(var t,r=0;r\u003Ce.length;r++){if(\"L\"===(t=y(e.charAt(r))))return!1;if(\"R\"===t)return!0}return!1},w=function(e,t,i,a){var A,u,c,l,d=t[a];switch(d){case\"L\":case\"R\":m=!1;break;case\"N\":case\"AN\":break;case\"EN\":m&&(d=\"AN\");break;case\"AL\":m=!0,d=\"R\";break;case\"WS\":d=\"N\";break;case\"CS\":a\u003C1||a+1>=t.length||\"EN\"!==(A=i[a-1])&&\"AN\"!==A||\"EN\"!==(u=t[a+1])&&\"AN\"!==u?d=\"N\":m&&(u=\"AN\"),d=u===A?u:\"N\";break;case\"ES\":d=\"EN\"===(A=a>0?i[a-1]:\"B\")&&a+1\u003Ct.length&&\"EN\"===t[a+1]?\"EN\":\"N\";break;case\"ET\":if(a>0&&\"EN\"===i[a-1]){d=\"EN\";break}if(m){d=\"N\";break}for(c=a+1,l=t.length;c\u003Cl&&\"ET\"===t[c];)c++;d=c\u003Cl&&\"EN\"===t[c]?\"EN\":\"N\";break;case\"NSM\":if(o&&!s){for(l=t.length,c=a+1;c\u003Cl&&\"NSM\"===t[c];)c++;if(c\u003Cl){var f=e[a],h=f>=1425&&f\u003C=2303||64286===f;if(A=t[c],h&&(\"R\"===A||\"AL\"===A)){d=\"R\";break}}}d=a\u003C1||\"B\"===(A=t[a-1])?\"N\":i[a-1];break;case\"B\":m=!1,r=!0,d=g;break;case\"S\":n=!0,d=\"N\";break;case\"LRE\":case\"RLE\":case\"LRO\":case\"RLO\":case\"PDF\":m=!1;break;case\"BN\":d=\"N\"}return d},b=function(e,t,r){var n=e.split(\"\");return r&&B(n,r,{hiLevel:g}),n.reverse(),t&&t.reverse(),n.join(\"\")},B=function(e,t,o){var s,i,a,A,u,f=-1,h=e.length,p=0,v=[],b=g?l:c,B=[];for(m=!1,r=!1,n=!1,i=0;i\u003Ch;i++)B[i]=y(e[i]);for(a=0;a\u003Ch;a++){if(u=p,v[a]=w(e,B,v,a),s=240&(p=b[u][d[v[a]]]),p&=15,t[a]=A=b[p][5],s>0)if(16===s){for(i=f;i\u003Ca;i++)t[i]=1;f=-1}else f=-1;if(b[p][6])-1===f&&(f=a);else if(f>-1){for(i=f;i\u003Ca;i++)t[i]=A;f=-1}\"B\"===B[a]&&(t[a]=0),o.hiLevel|=A}n&&function(e,t,r){for(var n=0;n\u003Cr;n++)if(\"S\"===e[n]){t[n]=g;for(var o=n-1;o>=0&&\"WS\"===e[o];o--)t[o]=g}}(B,t,h)},j=function(e,t,n,o,s){if(!(s.hiLevel\u003Ce)){if(1===e&&1===g&&!r)return t.reverse(),void(n&&n.reverse());for(var i,a,A,u,c=t.length,l=0;l\u003Cc;){if(o[l]>=e){for(A=l+1;A\u003Cc&&o[A]>=e;)A++;for(u=l,a=A-1;u\u003Ca;u++,a--)i=t[u],t[u]=t[a],t[a]=i,n&&(i=n[u],n[u]=n[a],n[a]=i);l=A}l++}}},_=function(e,t,r){var n=e.split(\"\"),o={hiLevel:g};return r||(r=[]),B(n,r,o),function(e,t,r){if(0!==r.hiLevel&&A)for(var n,o=0;o\u003Ce.length;o++)1===t[o]&&(n=h.indexOf(e[o]))>=0&&(e[o]=h[n+1])}(n,r,o),j(2,n,t,r,o),j(1,n,t,r,o),n.join(\"\")};return this.__bidiEngine__.doBidiReorder=function(e,t,r){if(function(e,t){if(t)for(var r=0;r\u003Ce.length;r++)t[r]=r;void 0===s&&(s=v(e)),void 0===a&&(a=v(e))}(e,t),o||!i||a)if(o&&i&&s^a)g=s?1:0,e=b(e,t,r);else if(!o&&i&&a)g=s?1:0,e=_(e,t,r),e=b(e,t);else if(!o||s||i||a){if(o&&!i&&s^a)e=b(e,t),s?(g=0,e=_(e,t,r)):(g=1,e=_(e,t,r),e=b(e,t));else if(o&&s&&!i&&a)g=1,e=_(e,t,r),e=b(e,t);else if(!o&&!i&&s^a){var n=A;s?(g=1,e=_(e,t,r),g=0,A=!1,e=_(e,t,r),A=n):(g=0,e=_(e,t,r),e=b(e,t),g=1,A=!1,e=_(e,t,r),A=n,e=b(e,t))}}else g=0,e=_(e,t,r);else g=s?1:0,e=_(e,t,r);return e},this.__bidiEngine__.setOptions=function(e){e&&(o=e.isInputVisual,i=e.isOutputVisual,s=e.isInputRtl,a=e.isOutputRtl,A=e.isSymmetricSwapping)},this.__bidiEngine__.setOptions(e),this.__bidiEngine__};var t=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"L\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"ET\",\"ET\",\"EN\",\"EN\",\"N\",\"L\",\"N\",\"N\",\"N\",\"EN\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"NSM\",\"R\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"N\",\"N\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"R\",\"R\",\"N\",\"N\",\"N\",\"N\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"WS\",\"BN\",\"BN\",\"BN\",\"L\",\"R\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"B\",\"LRE\",\"RLE\",\"PDF\",\"LRO\",\"RLO\",\"CS\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"WS\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"N\",\"LRI\",\"RLI\",\"FSI\",\"PDI\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"EN\",\"L\",\"N\",\"N\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"L\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"R\",\"NSM\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"ES\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"N\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"N\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"CS\",\"N\",\"CS\",\"N\",\"N\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"N\",\"N\",\"ES\",\"ES\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"N\",\"N\",\"BN\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"ET\",\"ET\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\",\"N\"],r=new e.__bidiEngine__({isInputVisual:!0});e.API.events.push([\"postProcessText\",function(e){var t=e.text,n=(e.x,e.y,e.options||{}),o=(e.mutex,n.lang,[]);if(n.isInputVisual=\"boolean\"!=typeof n.isInputVisual||n.isInputVisual,r.setOptions(n),\"[object Array]\"===Object.prototype.toString.call(t)){var s=0;for(o=[],s=0;s\u003Ct.length;s+=1)\"[object Array]\"===Object.prototype.toString.call(t[s])?o.push([r.doBidiReorder(t[s][0]),t[s][1],t[s][2]]):o.push([r.doBidiReorder(t[s])]);e.text=o}else e.text=r.doBidiReorder(t);r.setOptions({isInputVisual:!0})}])}(H),H.API.TTFFont=function(){function e(e){var t;if(this.rawData=e,t=this.contents=new tt(e),this.contents.pos=4,\"ttcf\"===t.readString(4))throw new Error(\"TTCF not supported.\");t.pos=0,this.parse(),this.subset=new wt(this),this.registerTTF()}return e.open=function(t){return new e(t)},e.prototype.parse=function(){return this.directory=new rt(this.contents),this.head=new st(this),this.name=new dt(this),this.cmap=new at(this),this.toUnicode={},this.hhea=new At(this),this.maxp=new ft(this),this.hmtx=new ht(this),this.post=new ct(this),this.os2=new ut(this),this.loca=new vt(this),this.glyf=new mt(this),this.ascender=this.os2.exists&&this.os2.ascender||this.hhea.ascender,this.decender=this.os2.exists&&this.os2.decender||this.hhea.decender,this.lineGap=this.os2.exists&&this.os2.lineGap||this.hhea.lineGap,this.bbox=[this.head.xMin,this.head.yMin,this.head.xMax,this.head.yMax]},e.prototype.registerTTF=function(){var e,t,r,n,o;if(this.scaleFactor=1e3\u002Fthis.head.unitsPerEm,this.bbox=function(){var t,r,n,o;for(o=[],t=0,r=(n=this.bbox).length;t\u003Cr;t++)e=n[t],o.push(Math.round(e*this.scaleFactor));return o}.call(this),this.stemV=0,this.post.exists?(r=255&(n=this.post.italic_angle),0!=(32768&(t=n>>16))&&(t=-(1+(65535^t))),this.italicAngle=+(t+\".\"+r)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=1===(o=this.familyClass)||2===o||3===o||4===o||5===o||7===o,this.isScript=10===this.familyClass,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),0!==this.italicAngle&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw new Error(\"No unicode cmap for font\")},e.prototype.characterToGlyph=function(e){var t;return(null!=(t=this.cmap.unicode)?t.codeMap[e]:void 0)||0},e.prototype.widthOfGlyph=function(e){var t;return t=1e3\u002Fthis.head.unitsPerEm,this.hmtx.forGlyph(e).advance*t},e.prototype.widthOfString=function(e,t,r){var n,o,s,i;for(s=0,o=0,i=(e=\"\"+e).length;0\u003C=i?o\u003Ci:o>i;o=0\u003C=i?++o:--o)n=e.charCodeAt(o),s+=this.widthOfGlyph(this.characterToGlyph(n))+r*(1e3\u002Ft)||0;return s*(t\u002F1e3)},e.prototype.lineHeight=function(e,t){var r;return null==t&&(t=!1),r=t?this.lineGap:0,(this.ascender+r-this.decender)\u002F1e3*e},e}();var et,tt=function(){function e(e){this.data=null!=e?e:[],this.pos=0,this.length=this.data.length}return e.prototype.readByte=function(){return this.data[this.pos++]},e.prototype.writeByte=function(e){return this.data[this.pos++]=e},e.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()\u003C\u003C16)+(this.readByte()\u003C\u003C8)+this.readByte()},e.prototype.writeUInt32=function(e){return this.writeByte(e>>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt32=function(){var e;return(e=this.readUInt32())>=2147483648?e-4294967296:e},e.prototype.writeInt32=function(e){return e\u003C0&&(e+=4294967296),this.writeUInt32(e)},e.prototype.readUInt16=function(){return this.readByte()\u003C\u003C8|this.readByte()},e.prototype.writeUInt16=function(e){return this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt16=function(){var e;return(e=this.readUInt16())>=32768?e-65536:e},e.prototype.writeInt16=function(e){return e\u003C0&&(e+=65536),this.writeUInt16(e)},e.prototype.readString=function(e){var t,r;for(r=[],t=0;0\u003C=e?t\u003Ce:t>e;t=0\u003C=e?++t:--t)r[t]=String.fromCharCode(this.readByte());return r.join(\"\")},e.prototype.writeString=function(e){var t,r,n;for(n=[],t=0,r=e.length;0\u003C=r?t\u003Cr:t>r;t=0\u003C=r?++t:--t)n.push(this.writeByte(e.charCodeAt(t)));return n},e.prototype.readShort=function(){return this.readInt16()},e.prototype.writeShort=function(e){return this.writeInt16(e)},e.prototype.readLongLong=function(){var e,t,r,n,o,s,i,a;return e=this.readByte(),t=this.readByte(),r=this.readByte(),n=this.readByte(),o=this.readByte(),s=this.readByte(),i=this.readByte(),a=this.readByte(),128&e?-1*(72057594037927940*(255^e)+281474976710656*(255^t)+1099511627776*(255^r)+4294967296*(255^n)+16777216*(255^o)+65536*(255^s)+256*(255^i)+(255^a)+1):72057594037927940*e+281474976710656*t+1099511627776*r+4294967296*n+16777216*o+65536*s+256*i+a},e.prototype.writeLongLong=function(e){var t,r;return t=Math.floor(e\u002F4294967296),r=4294967295&e,this.writeByte(t>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t),this.writeByte(r>>24&255),this.writeByte(r>>16&255),this.writeByte(r>>8&255),this.writeByte(255&r)},e.prototype.readInt=function(){return this.readInt32()},e.prototype.writeInt=function(e){return this.writeInt32(e)},e.prototype.read=function(e){var t,r;for(t=[],r=0;0\u003C=e?r\u003Ce:r>e;r=0\u003C=e?++r:--r)t.push(this.readByte());return t},e.prototype.write=function(e){var t,r,n,o;for(o=[],r=0,n=e.length;r\u003Cn;r++)t=e[r],o.push(this.writeByte(t));return o},e}(),rt=function(){var e;function t(e){var t,r,n;for(this.scalarType=e.readInt(),this.tableCount=e.readShort(),this.searchRange=e.readShort(),this.entrySelector=e.readShort(),this.rangeShift=e.readShort(),this.tables={},r=0,n=this.tableCount;0\u003C=n?r\u003Cn:r>n;r=0\u003C=n?++r:--r)t={tag:e.readString(4),checksum:e.readInt(),offset:e.readInt(),length:e.readInt()},this.tables[t.tag]=t}return t.prototype.encode=function(t){var r,n,o,s,i,a,A,u,c,l,d,f,h;for(h in d=Object.keys(t).length,a=Math.log(2),c=16*Math.floor(Math.log(d)\u002Fa),s=Math.floor(c\u002Fa),u=16*d-c,(n=new tt).writeInt(this.scalarType),n.writeShort(d),n.writeShort(c),n.writeShort(s),n.writeShort(u),o=16*d,A=n.pos+o,i=null,f=[],t)for(l=t[h],n.writeString(h),n.writeInt(e(l)),n.writeInt(A),n.writeInt(l.length),f=f.concat(l),\"head\"===h&&(i=A),A+=l.length;A%4;)f.push(0),A++;return n.write(f),r=2981146554-e(n.data),n.pos=i+8,n.writeUInt32(r),n.data},e=function(e){var t,r,n,o;for(e=pt.call(e);e.length%4;)e.push(0);for(n=new tt(e),r=0,t=0,o=e.length;t\u003Co;t=t+=4)r+=n.readUInt32();return 4294967295&r},t}(),nt={}.hasOwnProperty,ot=function(e,t){for(var r in t)nt.call(t,r)&&(e[r]=t[r]);function n(){this.constructor=e}return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e};et=function(){function e(e){var t;this.file=e,t=this.file.directory.tables[this.tag],this.exists=!!t,t&&(this.offset=t.offset,this.length=t.length,this.parse(this.file.contents))}return e.prototype.parse=function(){},e.prototype.encode=function(){},e.prototype.raw=function(){return this.exists?(this.file.contents.pos=this.offset,this.file.contents.read(this.length)):null},e}();var st=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"head\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.revision=e.readInt(),this.checkSumAdjustment=e.readInt(),this.magicNumber=e.readInt(),this.flags=e.readShort(),this.unitsPerEm=e.readShort(),this.created=e.readLongLong(),this.modified=e.readLongLong(),this.xMin=e.readShort(),this.yMin=e.readShort(),this.xMax=e.readShort(),this.yMax=e.readShort(),this.macStyle=e.readShort(),this.lowestRecPPEM=e.readShort(),this.fontDirectionHint=e.readShort(),this.indexToLocFormat=e.readShort(),this.glyphDataFormat=e.readShort()},t.prototype.encode=function(e){var t;return(t=new tt).writeInt(this.version),t.writeInt(this.revision),t.writeInt(this.checkSumAdjustment),t.writeInt(this.magicNumber),t.writeShort(this.flags),t.writeShort(this.unitsPerEm),t.writeLongLong(this.created),t.writeLongLong(this.modified),t.writeShort(this.xMin),t.writeShort(this.yMin),t.writeShort(this.xMax),t.writeShort(this.yMax),t.writeShort(this.macStyle),t.writeShort(this.lowestRecPPEM),t.writeShort(this.fontDirectionHint),t.writeShort(e),t.writeShort(this.glyphDataFormat),t.data},t}(),it=function(){function e(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m,g,y;switch(this.platformID=e.readUInt16(),this.encodingID=e.readShort(),this.offset=t+e.readInt(),c=e.pos,e.pos=this.offset,this.format=e.readUInt16(),this.length=e.readUInt16(),this.language=e.readUInt16(),this.isUnicode=3===this.platformID&&1===this.encodingID&&4===this.format||0===this.platformID&&4===this.format,this.codeMap={},this.format){case 0:for(a=0;a\u003C256;++a)this.codeMap[a]=e.readByte();break;case 4:for(d=e.readUInt16(),l=d\u002F2,e.pos+=6,o=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),e.pos+=2,h=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),A=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),u=function(){var t,r;for(r=[],a=t=0;0\u003C=l?t\u003Cl:t>l;a=0\u003C=l?++t:--t)r.push(e.readUInt16());return r}(),n=(this.length-e.pos+this.offset)\u002F2,i=function(){var t,r;for(r=[],a=t=0;0\u003C=n?t\u003Cn:t>n;a=0\u003C=n?++t:--t)r.push(e.readUInt16());return r}(),a=m=0,y=o.length;m\u003Cy;a=++m)for(p=o[a],r=g=f=h[a];f\u003C=p?g\u003C=p:g>=p;r=f\u003C=p?++g:--g)0===u[a]?s=r+A[a]:0!==(s=i[u[a]\u002F2+(r-f)-(l-a)]||0)&&(s+=A[a]),this.codeMap[r]=65535&s}e.pos=c}return e.encode=function(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m,g,y,v,w,b,B,j,_,C,x,E,N,Q,F,U,S,L,T,H,I,P,O,k,R,M,D,K,z,V,q,G;switch(Q=new tt,s=Object.keys(e).sort((function(e,t){return e-t})),t){case\"macroman\":for(h=0,p=function(){var e=[];for(f=0;f\u003C256;++f)e.push(0);return e}(),g={0:0},o={},F=0,T=s.length;F\u003CT;F++)null==g[z=e[n=s[F]]]&&(g[z]=++h),o[n]={old:e[n],new:g[e[n]]},p[n]=g[e[n]];return Q.writeUInt16(1),Q.writeUInt16(0),Q.writeUInt32(12),Q.writeUInt16(0),Q.writeUInt16(262),Q.writeUInt16(0),Q.write(p),{charMap:o,subtable:Q.data,maxGlyphID:h+1};case\"unicode\":for(E=[],c=[],y=0,g={},r={},m=A=null,U=0,H=s.length;U\u003CH;U++)null==g[w=e[n=s[U]]]&&(g[w]=++y),r[n]={old:w,new:g[w]},i=g[w]-n,null!=m&&i===A||(m&&c.push(m),E.push(n),A=i),m=n;for(m&&c.push(m),c.push(65535),E.push(65535),C=2*(_=E.length),j=2*Math.pow(Math.log(_)\u002FMath.LN2,2),l=Math.log(j\u002F2)\u002FMath.LN2,B=2*_-j,a=[],b=[],d=[],f=S=0,I=E.length;S\u003CI;f=++S){if(x=E[f],u=c[f],65535===x){a.push(0),b.push(0);break}if(x-(N=r[x].new)>=32768)for(a.push(0),b.push(2*(d.length+_-f)),n=L=x;x\u003C=u?L\u003C=u:L>=u;n=x\u003C=u?++L:--L)d.push(r[n].new);else a.push(N-x),b.push(0)}for(Q.writeUInt16(3),Q.writeUInt16(1),Q.writeUInt32(12),Q.writeUInt16(4),Q.writeUInt16(16+8*_+2*d.length),Q.writeUInt16(0),Q.writeUInt16(C),Q.writeUInt16(j),Q.writeUInt16(l),Q.writeUInt16(B),D=0,P=c.length;D\u003CP;D++)n=c[D],Q.writeUInt16(n);for(Q.writeUInt16(0),K=0,O=E.length;K\u003CO;K++)n=E[K],Q.writeUInt16(n);for(V=0,k=a.length;V\u003Ck;V++)i=a[V],Q.writeUInt16(i);for(q=0,R=b.length;q\u003CR;q++)v=b[q],Q.writeUInt16(v);for(G=0,M=d.length;G\u003CM;G++)h=d[G],Q.writeUInt16(h);return{charMap:r,subtable:Q.data,maxGlyphID:y+1}}},e}(),at=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"cmap\",t.prototype.parse=function(e){var t,r,n;for(e.pos=this.offset,this.version=e.readUInt16(),n=e.readUInt16(),this.tables=[],this.unicode=null,r=0;0\u003C=n?r\u003Cn:r>n;r=0\u003C=n?++r:--r)t=new it(e,this.offset),this.tables.push(t),t.isUnicode&&null==this.unicode&&(this.unicode=t);return!0},t.encode=function(e,t){var r,n;return null==t&&(t=\"macroman\"),r=it.encode(e,t),(n=new tt).writeUInt16(0),n.writeUInt16(1),r.table=n.data.concat(r.subtable),r},t}(),At=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"hhea\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.ascender=e.readShort(),this.decender=e.readShort(),this.lineGap=e.readShort(),this.advanceWidthMax=e.readShort(),this.minLeftSideBearing=e.readShort(),this.minRightSideBearing=e.readShort(),this.xMaxExtent=e.readShort(),this.caretSlopeRise=e.readShort(),this.caretSlopeRun=e.readShort(),this.caretOffset=e.readShort(),e.pos+=8,this.metricDataFormat=e.readShort(),this.numberOfMetrics=e.readUInt16()},t}(),ut=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"OS\u002F2\",t.prototype.parse=function(e){if(e.pos=this.offset,this.version=e.readUInt16(),this.averageCharWidth=e.readShort(),this.weightClass=e.readUInt16(),this.widthClass=e.readUInt16(),this.type=e.readShort(),this.ySubscriptXSize=e.readShort(),this.ySubscriptYSize=e.readShort(),this.ySubscriptXOffset=e.readShort(),this.ySubscriptYOffset=e.readShort(),this.ySuperscriptXSize=e.readShort(),this.ySuperscriptYSize=e.readShort(),this.ySuperscriptXOffset=e.readShort(),this.ySuperscriptYOffset=e.readShort(),this.yStrikeoutSize=e.readShort(),this.yStrikeoutPosition=e.readShort(),this.familyClass=e.readShort(),this.panose=function(){var t,r;for(r=[],t=0;t\u003C10;++t)r.push(e.readByte());return r}(),this.charRange=function(){var t,r;for(r=[],t=0;t\u003C4;++t)r.push(e.readInt());return r}(),this.vendorID=e.readString(4),this.selection=e.readShort(),this.firstCharIndex=e.readShort(),this.lastCharIndex=e.readShort(),this.version>0&&(this.ascent=e.readShort(),this.descent=e.readShort(),this.lineGap=e.readShort(),this.winAscent=e.readShort(),this.winDescent=e.readShort(),this.codePageRange=function(){var t,r;for(r=[],t=0;t\u003C2;t=++t)r.push(e.readInt());return r}(),this.version>1))return this.xHeight=e.readShort(),this.capHeight=e.readShort(),this.defaultChar=e.readShort(),this.breakChar=e.readShort(),this.maxContext=e.readShort()},t}(),ct=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"post\",t.prototype.parse=function(e){var t,r,n;switch(e.pos=this.offset,this.format=e.readInt(),this.italicAngle=e.readInt(),this.underlinePosition=e.readShort(),this.underlineThickness=e.readShort(),this.isFixedPitch=e.readInt(),this.minMemType42=e.readInt(),this.maxMemType42=e.readInt(),this.minMemType1=e.readInt(),this.maxMemType1=e.readInt(),this.format){case 65536:break;case 131072:var o;for(r=e.readUInt16(),this.glyphNameIndex=[],o=0;0\u003C=r?o\u003Cr:o>r;o=0\u003C=r?++o:--o)this.glyphNameIndex.push(e.readUInt16());for(this.names=[],n=[];e.pos\u003Cthis.offset+this.length;)t=e.readByte(),n.push(this.names.push(e.readString(t)));return n;case 151552:return r=e.readUInt16(),this.offsets=e.read(r);case 196608:break;case 262144:return this.map=function(){var t,r,n;for(n=[],o=t=0,r=this.file.maxp.numGlyphs;0\u003C=r?t\u003Cr:t>r;o=0\u003C=r?++t:--t)n.push(e.readUInt32());return n}.call(this)}},t}(),lt=function(e,t){this.raw=e,this.length=e.length,this.platformID=t.platformID,this.encodingID=t.encodingID,this.languageID=t.languageID},dt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"name\",t.prototype.parse=function(e){var t,r,n,o,s,i,a,A,u,c,l;for(e.pos=this.offset,e.readShort(),t=e.readShort(),i=e.readShort(),r=[],o=0;0\u003C=t?o\u003Ct:o>t;o=0\u003C=t?++o:--o)r.push({platformID:e.readShort(),encodingID:e.readShort(),languageID:e.readShort(),nameID:e.readShort(),length:e.readShort(),offset:this.offset+i+e.readShort()});for(a={},o=u=0,c=r.length;u\u003Cc;o=++u)n=r[o],e.pos=n.offset,A=e.readString(n.length),s=new lt(A,n),null==a[l=n.nameID]&&(a[l]=[]),a[n.nameID].push(s);this.strings=a,this.copyright=a[0],this.fontFamily=a[1],this.fontSubfamily=a[2],this.uniqueSubfamily=a[3],this.fontName=a[4],this.version=a[5];try{this.postscriptName=a[6][0].raw.replace(\u002F[\\x00-\\x19\\x80-\\xff]\u002Fg,\"\")}catch(e){this.postscriptName=a[4][0].raw.replace(\u002F[\\x00-\\x19\\x80-\\xff]\u002Fg,\"\")}return this.trademark=a[7],this.manufacturer=a[8],this.designer=a[9],this.description=a[10],this.vendorUrl=a[11],this.designerUrl=a[12],this.license=a[13],this.licenseUrl=a[14],this.preferredFamily=a[15],this.preferredSubfamily=a[17],this.compatibleFull=a[18],this.sampleText=a[19]},t}(),ft=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"maxp\",t.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.numGlyphs=e.readUInt16(),this.maxPoints=e.readUInt16(),this.maxContours=e.readUInt16(),this.maxCompositePoints=e.readUInt16(),this.maxComponentContours=e.readUInt16(),this.maxZones=e.readUInt16(),this.maxTwilightPoints=e.readUInt16(),this.maxStorage=e.readUInt16(),this.maxFunctionDefs=e.readUInt16(),this.maxInstructionDefs=e.readUInt16(),this.maxStackElements=e.readUInt16(),this.maxSizeOfInstructions=e.readUInt16(),this.maxComponentElements=e.readUInt16(),this.maxComponentDepth=e.readUInt16()},t}(),ht=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"hmtx\",t.prototype.parse=function(e){var t,r,n,o,s,i,a;for(e.pos=this.offset,this.metrics=[],t=0,i=this.file.hhea.numberOfMetrics;0\u003C=i?t\u003Ci:t>i;t=0\u003C=i?++t:--t)this.metrics.push({advance:e.readUInt16(),lsb:e.readInt16()});for(n=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var r,o;for(o=[],t=r=0;0\u003C=n?r\u003Cn:r>n;t=0\u003C=n?++r:--r)o.push(e.readInt16());return o}(),this.widths=function(){var e,t,r,n;for(n=[],e=0,t=(r=this.metrics).length;e\u003Ct;e++)o=r[e],n.push(o.advance);return n}.call(this),r=this.widths[this.widths.length-1],a=[],t=s=0;0\u003C=n?s\u003Cn:s>n;t=0\u003C=n?++s:--s)a.push(this.widths.push(r));return a},t.prototype.forGlyph=function(e){return e in this.metrics?this.metrics[e]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[e-this.metrics.length]}},t}(),pt=[].slice,mt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"glyf\",t.prototype.parse=function(){return this.cache={}},t.prototype.glyphFor=function(e){var t,r,n,o,s,i,a,A,u,c;return e in this.cache?this.cache[e]:(o=this.file.loca,t=this.file.contents,r=o.indexOf(e),0===(n=o.lengthOf(e))?this.cache[e]=null:(t.pos=this.offset+r,s=(i=new tt(t.read(n))).readShort(),A=i.readShort(),c=i.readShort(),a=i.readShort(),u=i.readShort(),this.cache[e]=-1===s?new yt(i,A,c,a,u):new gt(i,s,A,c,a,u),this.cache[e]))},t.prototype.encode=function(e,t,r){var n,o,s,i,a;for(s=[],o=[],i=0,a=t.length;i\u003Ca;i++)n=e[t[i]],o.push(s.length),n&&(s=s.concat(n.encode(r)));return o.push(s.length),{table:s,offsets:o}},t}(),gt=function(){function e(e,t,r,n,o,s){this.raw=e,this.numberOfContours=t,this.xMin=r,this.yMin=n,this.xMax=o,this.yMax=s,this.compound=!1}return e.prototype.encode=function(){return this.raw.data},e}(),yt=function(){function e(e,t,r,n,o){var s,i;for(this.raw=e,this.xMin=t,this.yMin=r,this.xMax=n,this.yMax=o,this.compound=!0,this.glyphIDs=[],this.glyphOffsets=[],s=this.raw;i=s.readShort(),this.glyphOffsets.push(s.pos),this.glyphIDs.push(s.readUInt16()),32&i;)s.pos+=1&i?4:2,128&i?s.pos+=8:64&i?s.pos+=4:8&i&&(s.pos+=2)}return e.prototype.encode=function(){var e,t,r;for(t=new tt(pt.call(this.raw.data)),e=0,r=this.glyphIDs.length;e\u003Cr;++e)t.pos=this.glyphOffsets[e];return t.data},e}(),vt=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return ot(t,et),t.prototype.tag=\"loca\",t.prototype.parse=function(e){var t,r;return e.pos=this.offset,t=this.file.head.indexToLocFormat,this.offsets=0===t?function(){var t,n;for(n=[],r=0,t=this.length;r\u003Ct;r+=2)n.push(2*e.readUInt16());return n}.call(this):function(){var t,n;for(n=[],r=0,t=this.length;r\u003Ct;r+=4)n.push(e.readUInt32());return n}.call(this)},t.prototype.indexOf=function(e){return this.offsets[e]},t.prototype.lengthOf=function(e){return this.offsets[e+1]-this.offsets[e]},t.prototype.encode=function(e,t){for(var r=new Uint32Array(this.offsets.length),n=0,o=0,s=0;s\u003Cr.length;++s)if(r[s]=n,o\u003Ct.length&&t[o]==s){++o,r[s]=n;var i=this.offsets[s],a=this.offsets[s+1]-i;a>0&&(n+=a)}for(var A=new Array(4*r.length),u=0;u\u003Cr.length;++u)A[4*u+3]=255&r[u],A[4*u+2]=(65280&r[u])>>8,A[4*u+1]=(16711680&r[u])>>16,A[4*u]=(4278190080&r[u])>>24;return A},t}(),wt=function(){function e(e){this.font=e,this.subset={},this.unicodes={},this.next=33}return e.prototype.generateCmap=function(){var e,t,r,n,o;for(t in n=this.font.cmap.tables[0].codeMap,e={},o=this.subset)r=o[t],e[t]=n[r];return e},e.prototype.glyphsFor=function(e){var t,r,n,o,s,i,a;for(n={},s=0,i=e.length;s\u003Ci;s++)n[o=e[s]]=this.font.glyf.glyphFor(o);for(o in t=[],n)(null!=(r=n[o])?r.compound:void 0)&&t.push.apply(t,r.glyphIDs);if(t.length>0)for(o in a=this.glyphsFor(t))r=a[o],n[o]=r;return n},e.prototype.encode=function(e,t){var r,n,o,s,i,a,A,u,c,l,d,f,h,p,m;for(n in r=at.encode(this.generateCmap(),\"unicode\"),s=this.glyphsFor(e),d={0:0},m=r.charMap)d[(a=m[n]).old]=a.new;for(f in l=r.maxGlyphID,s)f in d||(d[f]=l++);return u=function(e){var t,r;for(t in r={},e)r[e[t]]=t;return r}(d),c=Object.keys(u).sort((function(e,t){return e-t})),h=function(){var e,t,r;for(r=[],e=0,t=c.length;e\u003Ct;e++)i=c[e],r.push(u[i]);return r}(),o=this.font.glyf.encode(s,h,d),A=this.font.loca.encode(o.offsets,h),p={cmap:this.font.cmap.raw(),glyf:o.table,loca:A,hmtx:this.font.hmtx.raw(),hhea:this.font.hhea.raw(),maxp:this.font.maxp.raw(),post:this.font.post.raw(),name:this.font.name.raw(),head:this.font.head.encode(t)},this.font.os2.exists&&(p[\"OS\u002F2\"]=this.font.os2.raw()),this.font.directory.encode(p)},e}();H.API.PDFObject=function(){var e;function t(){}return e=function(e,t){return(Array(t+1).join(\"0\")+e).slice(-t)},t.convert=function(r){var n,o,s,i;if(Array.isArray(r))return\"[\"+function(){var e,o,s;for(s=[],e=0,o=r.length;e\u003Co;e++)n=r[e],s.push(t.convert(n));return s}().join(\" \")+\"]\";if(\"string\"==typeof r)return\"\u002F\"+r;if(null!=r?r.isString:void 0)return\"(\"+r+\")\";if(r instanceof Date)return\"(D:\"+e(r.getUTCFullYear(),4)+e(r.getUTCMonth(),2)+e(r.getUTCDate(),2)+e(r.getUTCHours(),2)+e(r.getUTCMinutes(),2)+e(r.getUTCSeconds(),2)+\"Z)\";if(\"[object Object]\"==={}.toString.call(r)){for(o in s=[\"\u003C\u003C\"],r)i=r[o],s.push(\"\u002F\"+o+\" \"+t.convert(i));return s.push(\">>\"),s.join(\"\\n\")}return\"\"+r},t}(),t.default=H},\".\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js\":function(e){(function(){var t,r,n,o,s,i;\"undefined\"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:\"undefined\"!=typeof process&&null!==process&&process.hrtime?(e.exports=function(){return(t()-s)\u002F1e6},r=process.hrtime,o=(t=function(){var e;return 1e9*(e=r())[0]+e[1]})(),i=1e9*process.uptime(),s=o-i):Date.now?(e.exports=function(){return Date.now()-n},n=Date.now()):(e.exports=function(){return(new Date).getTime()-n},n=(new Date).getTime())}).call(this)},\".\u002Fnode_modules\u002Fraf\u002Findex.js\":function(e,t,r){for(var n=r(\".\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js\"),o=\"undefined\"==typeof window?global:window,s=[\"moz\",\"webkit\"],i=\"AnimationFrame\",a=o[\"request\"+i],A=o[\"cancel\"+i]||o[\"cancelRequest\"+i],u=0;!a&&u\u003Cs.length;u++)a=o[s[u]+\"Request\"+i],A=o[s[u]+\"Cancel\"+i]||o[s[u]+\"CancelRequest\"+i];if(!a||!A){var c=0,l=0,d=[];a=function(e){if(0===d.length){var t=n(),r=Math.max(0,16.666666666666668-(t-c));c=r+t,setTimeout((function(){var e=d.slice(0);d.length=0;for(var t=0;t\u003Ce.length;t++)if(!e[t].cancelled)try{e[t].callback(c)}catch(e){setTimeout((function(){throw e}),0)}}),Math.round(r))}return d.push({handle:++l,callback:e,cancelled:!1}),l},A=function(e){for(var t=0;t\u003Cd.length;t++)d[t].handle===e&&(d[t].cancelled=!0)}}e.exports=function(e){return a.call(o,e)},e.exports.cancel=function(){A.apply(o,arguments)},e.exports.polyfill=function(e){e||(e=o),e.requestAnimationFrame=a,e.cancelAnimationFrame=A}},\".\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js\":function(e){var t=function(e){\"use strict\";var t,r=Object.prototype,n=r.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},s=o.iterator||\"@@iterator\",i=o.asyncIterator||\"@@asyncIterator\",a=o.toStringTag||\"@@toStringTag\";function A(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{A({},\"\")}catch(e){A=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof m?t:m,s=Object.create(o.prototype),i=new N(n||[]);return s._invoke=function(e,t,r){var n=l;return function(o,s){if(n===f)throw new Error(\"Generator is already running\");if(n===h){if(\"throw\"===o)throw s;return F()}for(r.method=o,r.arg=s;;){var i=r.delegate;if(i){var a=C(i,r);if(a){if(a===p)continue;return a}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(n===l)throw n=h,r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=f;var A=c(e,t,r);if(\"normal\"===A.type){if(n=r.done?h:d,A.arg===p)continue;return{value:A.arg,done:r.done}}\"throw\"===A.type&&(n=h,r.method=\"throw\",r.arg=A.arg)}}}(e,r,i),s}function c(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}e.wrap=u;var l=\"suspendedStart\",d=\"suspendedYield\",f=\"executing\",h=\"completed\",p={};function m(){}function g(){}function y(){}var v={};A(v,s,(function(){return this}));var w=Object.getPrototypeOf,b=w&&w(w(Q([])));b&&b!==r&&n.call(b,s)&&(v=b);var B=y.prototype=m.prototype=Object.create(v);function j(e){[\"next\",\"throw\",\"return\"].forEach((function(t){A(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function r(o,s,i,a){var A=c(e[o],e,s);if(\"throw\"!==A.type){var u=A.arg,l=u.value;return l&&\"object\"==typeof l&&n.call(l,\"__await\")?t.resolve(l.__await).then((function(e){r(\"next\",e,i,a)}),(function(e){r(\"throw\",e,i,a)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r(\"throw\",e,i,a)}))}a(A.arg)}var o;this._invoke=function(e,n){function s(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(s,s):s()}}function C(e,r){var n=e.iterator[r.method];if(n===t){if(r.delegate=null,\"throw\"===r.method){if(e.iterator.return&&(r.method=\"return\",r.arg=t,C(e,r),\"throw\"===r.method))return p;r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return p}var o=c(n,e.iterator,r.arg);if(\"throw\"===o.type)return r.method=\"throw\",r.arg=o.arg,r.delegate=null,p;var s=o.arg;return s?s.done?(r[e.resultName]=s.value,r.next=e.nextLoc,\"return\"!==r.method&&(r.method=\"next\",r.arg=t),r.delegate=null,p):s:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,p)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(x,this),this.reset(!0)}function Q(e){if(e){var r=e[s];if(r)return r.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function r(){for(;++o\u003Ce.length;)if(n.call(e,o))return r.value=e[o],r.done=!1,r;return r.value=t,r.done=!0,r};return i.next=i}}return{next:F}}function F(){return{value:t,done:!0}}return g.prototype=y,A(B,\"constructor\",y),A(y,\"constructor\",g),g.displayName=A(y,a,\"GeneratorFunction\"),e.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===g||\"GeneratorFunction\"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,y):(e.__proto__=y,A(e,a,\"GeneratorFunction\")),e.prototype=Object.create(B),e},e.awrap=function(e){return{__await:e}},j(_.prototype),A(_.prototype,i,(function(){return this})),e.AsyncIterator=_,e.async=function(t,r,n,o,s){void 0===s&&(s=Promise);var i=new _(u(t,r,n,o),s);return e.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},j(B),A(B,a,\"Generator\"),A(B,s,(function(){return this})),A(B,\"toString\",(function(){return\"[object Generator]\"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=Q,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=t,this.tryEntries.forEach(E),!e)for(var r in this)\"t\"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function o(n,o){return a.type=\"throw\",a.arg=e,r.next=n,o&&(r.method=\"next\",r.arg=t),!!o}for(var s=this.tryEntries.length-1;s>=0;--s){var i=this.tryEntries[s],a=i.completion;if(\"root\"===i.tryLoc)return o(\"end\");if(i.tryLoc\u003C=this.prev){var A=n.call(i,\"catchLoc\"),u=n.call(i,\"finallyLoc\");if(A&&u){if(this.prev\u003Ci.catchLoc)return o(i.catchLoc,!0);if(this.prev\u003Ci.finallyLoc)return o(i.finallyLoc)}else if(A){if(this.prev\u003Ci.catchLoc)return o(i.catchLoc,!0)}else{if(!u)throw new Error(\"try statement without catch or finally\");if(this.prev\u003Ci.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc\u003C=this.prev&&n.call(o,\"finallyLoc\")&&this.prev\u003Co.finallyLoc){var s=o;break}}s&&(\"break\"===e||\"continue\"===e)&&s.tryLoc\u003C=t&&t\u003C=s.finallyLoc&&(s=null);var i=s?s.completion:{};return i.type=e,i.arg=t,s?(this.method=\"next\",this.next=s.finallyLoc,p):this.complete(i)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;E(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,r,n){return this.delegate={iterator:Q(e),resultName:r,nextLoc:n},\"next\"===this.method&&(this.arg=t),p}},e}(e.exports);try{regeneratorRuntime=t}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=t:Function(\"r\",\"regeneratorRuntime = r\")(t)}},\".\u002Fnode_modules\u002Frgbcolor\u002Findex.js\":function(e){e.exports=function(e){this.ok=!1,this.alpha=1,\"#\"==e.charAt(0)&&(e=e.substr(1,6)),e=(e=e.replace(\u002F \u002Fg,\"\")).toLowerCase();var t={aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"00ffff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000000\",blanchedalmond:\"ffebcd\",blue:\"0000ff\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"00ffff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dodgerblue:\"1e90ff\",feldspar:\"d19275\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"ff00ff\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgrey:\"d3d3d3\",lightgreen:\"90ee90\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslateblue:\"8470ff\",lightslategray:\"778899\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"00ff00\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"ff00ff\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370d8\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"d87093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"ff0000\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",violetred:\"d02090\",wheat:\"f5deb3\",white:\"ffffff\",whitesmoke:\"f5f5f5\",yellow:\"ffff00\",yellowgreen:\"9acd32\"};e=t[e]||e;for(var r=[{re:\u002F^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*((?:\\d?\\.)?\\d)\\)$\u002F,example:[\"rgba(123, 234, 45, 0.8)\",\"rgba(255,234,245,1.0)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3]),parseFloat(e[4])]}},{re:\u002F^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$\u002F,example:[\"rgb(123, 234, 45)\",\"rgb(255,234,245)\"],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:\u002F^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$\u002F,example:[\"#00ff00\",\"336699\"],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:\u002F^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$\u002F,example:[\"#fb0\",\"f0f\"],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],n=0;n\u003Cr.length;n++){var o=r[n].re,s=r[n].process,i=o.exec(e);if(i){var a=s(i);this.r=a[0],this.g=a[1],this.b=a[2],a.length>3&&(this.alpha=a[3]),this.ok=!0}}this.r=this.r\u003C0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g\u003C0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b\u003C0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha\u003C0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return\"rgb(\"+this.r+\", \"+this.g+\", \"+this.b+\")\"},this.toRGBA=function(){return\"rgba(\"+this.r+\", \"+this.g+\", \"+this.b+\", \"+this.alpha+\")\"},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),r=this.b.toString(16);return 1==e.length&&(e=\"0\"+e),1==t.length&&(t=\"0\"+t),1==r.length&&(r=\"0\"+r),\"#\"+e+t+r},this.getHelpXML=function(){for(var e=new Array,n=0;n\u003Cr.length;n++)for(var o=r[n].example,s=0;s\u003Co.length;s++)e[e.length]=o[s];for(var i in t)e[e.length]=i;var a=document.createElement(\"ul\");for(a.setAttribute(\"id\",\"rgbcolor-examples\"),n=0;n\u003Ce.length;n++)try{var A=document.createElement(\"li\"),u=new RGBColor(e[n]),c=document.createElement(\"div\");c.style.cssText=\"margin: 3px; border: 1px solid black; background:\"+u.toHex()+\"; color:\"+u.toHex(),c.appendChild(document.createTextNode(\"test\"));var l=document.createTextNode(\" \"+e[n]+\" -> \"+u.toRGB()+\" -> \"+u.toHex());A.appendChild(c),A.appendChild(l),a.appendChild(A)}catch(e){}return a}}},\".\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js\":function(e,t,r){\"use strict\";function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}r.r(t),r.d(t,{BlurStack:function(){return d},canvasRGB:function(){return c},canvasRGBA:function(){return A},image:function(){return i},imageDataRGB:function(){return l},imageDataRGBA:function(){return u}});var o=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],s=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function i(e,t,r,n,o,s){if(\"string\"==typeof e&&(e=document.getElementById(e)),e&&\"naturalWidth\"in e){var i=o?\"offset\":\"natural\",a=e[i+\"Width\"],u=e[i+\"Height\"];if(\"string\"==typeof t&&(t=document.getElementById(t)),t&&\"getContext\"in t){s||(t.style.width=a+\"px\",t.style.height=u+\"px\"),t.width=a,t.height=u;var l=t.getContext(\"2d\");l.clearRect(0,0,a,u),l.drawImage(e,0,0,e.naturalWidth,e.naturalHeight,0,0,a,u),isNaN(r)||r\u003C1||(n?A(t,0,0,a,u,r):c(t,0,0,a,u,r))}}}function a(e,t,r,o,s){if(\"string\"==typeof e&&(e=document.getElementById(e)),!e||\"object\"!==n(e)||!(\"getContext\"in e))throw new TypeError(\"Expecting canvas with `getContext` method in processCanvasRGB(A) calls!\");var i=e.getContext(\"2d\");try{return i.getImageData(t,r,o,s)}catch(e){throw new Error(\"unable to access image data: \"+e)}}function A(e,t,r,n,o,s){if(!(isNaN(s)||s\u003C1)){s|=0;var i=a(e,t,r,n,o);i=u(i,0,0,n,o,s),e.getContext(\"2d\").putImageData(i,t,r)}}function u(e,t,r,n,i,a){for(var A,u=e.data,c=2*a+1,l=n-1,f=i-1,h=a+1,p=h*(h+1)\u002F2,m=new d,g=m,y=1;y\u003Cc;y++)g=g.next=new d,y===h&&(A=g);g.next=m;for(var v=null,w=null,b=0,B=0,j=o[a],_=s[a],C=0;C\u003Ci;C++){g=m;for(var x=u[B],E=u[B+1],N=u[B+2],Q=u[B+3],F=0;F\u003Ch;F++)g.r=x,g.g=E,g.b=N,g.a=Q,g=g.next;for(var U=0,S=0,L=0,T=0,H=h*x,I=h*E,P=h*N,O=h*Q,k=p*x,R=p*E,M=p*N,D=p*Q,K=1;K\u003Ch;K++){var z=B+((l\u003CK?l:K)\u003C\u003C2),V=u[z],q=u[z+1],G=u[z+2],X=u[z+3],W=h-K;k+=(g.r=V)*W,R+=(g.g=q)*W,M+=(g.b=G)*W,D+=(g.a=X)*W,U+=V,S+=q,L+=G,T+=X,g=g.next}v=m,w=A;for(var J=0;J\u003Cn;J++){var Y=D*j>>_;if(u[B+3]=Y,0!==Y){var Z=255\u002FY;u[B]=(k*j>>_)*Z,u[B+1]=(R*j>>_)*Z,u[B+2]=(M*j>>_)*Z}else u[B]=u[B+1]=u[B+2]=0;k-=H,R-=I,M-=P,D-=O,H-=v.r,I-=v.g,P-=v.b,O-=v.a;var $=J+a+1;$=b+($\u003Cl?$:l)\u003C\u003C2,k+=U+=v.r=u[$],R+=S+=v.g=u[$+1],M+=L+=v.b=u[$+2],D+=T+=v.a=u[$+3],v=v.next;var ee=w,te=ee.r,re=ee.g,ne=ee.b,oe=ee.a;H+=te,I+=re,P+=ne,O+=oe,U-=te,S-=re,L-=ne,T-=oe,w=w.next,B+=4}b+=n}for(var se=0;se\u003Cn;se++){var ie=u[B=se\u003C\u003C2],ae=u[B+1],Ae=u[B+2],ue=u[B+3],ce=h*ie,le=h*ae,de=h*Ae,fe=h*ue,he=p*ie,pe=p*ae,me=p*Ae,ge=p*ue;g=m;for(var ye=0;ye\u003Ch;ye++)g.r=ie,g.g=ae,g.b=Ae,g.a=ue,g=g.next;for(var ve=n,we=0,be=0,Be=0,je=0,_e=1;_e\u003C=a;_e++){B=ve+se\u003C\u003C2;var Ce=h-_e;he+=(g.r=ie=u[B])*Ce,pe+=(g.g=ae=u[B+1])*Ce,me+=(g.b=Ae=u[B+2])*Ce,ge+=(g.a=ue=u[B+3])*Ce,je+=ie,we+=ae,be+=Ae,Be+=ue,g=g.next,_e\u003Cf&&(ve+=n)}B=se,v=m,w=A;for(var xe=0;xe\u003Ci;xe++){var Ee=B\u003C\u003C2;u[Ee+3]=ue=ge*j>>_,ue>0?(ue=255\u002Fue,u[Ee]=(he*j>>_)*ue,u[Ee+1]=(pe*j>>_)*ue,u[Ee+2]=(me*j>>_)*ue):u[Ee]=u[Ee+1]=u[Ee+2]=0,he-=ce,pe-=le,me-=de,ge-=fe,ce-=v.r,le-=v.g,de-=v.b,fe-=v.a,Ee=se+((Ee=xe+h)\u003Cf?Ee:f)*n\u003C\u003C2,he+=je+=v.r=u[Ee],pe+=we+=v.g=u[Ee+1],me+=be+=v.b=u[Ee+2],ge+=Be+=v.a=u[Ee+3],v=v.next,ce+=ie=w.r,le+=ae=w.g,de+=Ae=w.b,fe+=ue=w.a,je-=ie,we-=ae,be-=Ae,Be-=ue,w=w.next,B+=n}}return e}function c(e,t,r,n,o,s){if(!(isNaN(s)||s\u003C1)){s|=0;var i=a(e,t,r,n,o);i=l(i,0,0,n,o,s),e.getContext(\"2d\").putImageData(i,t,r)}}function l(e,t,r,n,i,a){for(var A,u=e.data,c=2*a+1,l=n-1,f=i-1,h=a+1,p=h*(h+1)\u002F2,m=new d,g=m,y=1;y\u003Cc;y++)g=g.next=new d,y===h&&(A=g);g.next=m;for(var v,w,b=null,B=null,j=o[a],_=s[a],C=0,x=0,E=0;E\u003Ci;E++){var N=u[x],Q=u[x+1],F=u[x+2],U=h*N,S=h*Q,L=h*F,T=p*N,H=p*Q,I=p*F;g=m;for(var P=0;P\u003Ch;P++)g.r=N,g.g=Q,g.b=F,g=g.next;for(var O=0,k=0,R=0,M=1;M\u003Ch;M++)v=x+((l\u003CM?l:M)\u003C\u003C2),T+=(g.r=N=u[v])*(w=h-M),H+=(g.g=Q=u[v+1])*w,I+=(g.b=F=u[v+2])*w,O+=N,k+=Q,R+=F,g=g.next;b=m,B=A;for(var D=0;D\u003Cn;D++)u[x]=T*j>>_,u[x+1]=H*j>>_,u[x+2]=I*j>>_,T-=U,H-=S,I-=L,U-=b.r,S-=b.g,L-=b.b,v=C+((v=D+a+1)\u003Cl?v:l)\u003C\u003C2,T+=O+=b.r=u[v],H+=k+=b.g=u[v+1],I+=R+=b.b=u[v+2],b=b.next,U+=N=B.r,S+=Q=B.g,L+=F=B.b,O-=N,k-=Q,R-=F,B=B.next,x+=4;C+=n}for(var K=0;K\u003Cn;K++){var z=u[x=K\u003C\u003C2],V=u[x+1],q=u[x+2],G=h*z,X=h*V,W=h*q,J=p*z,Y=p*V,Z=p*q;g=m;for(var $=0;$\u003Ch;$++)g.r=z,g.g=V,g.b=q,g=g.next;for(var ee=0,te=0,re=0,ne=1,oe=n;ne\u003C=a;ne++)x=oe+K\u003C\u003C2,J+=(g.r=z=u[x])*(w=h-ne),Y+=(g.g=V=u[x+1])*w,Z+=(g.b=q=u[x+2])*w,ee+=z,te+=V,re+=q,g=g.next,ne\u003Cf&&(oe+=n);x=K,b=m,B=A;for(var se=0;se\u003Ci;se++)u[v=x\u003C\u003C2]=J*j>>_,u[v+1]=Y*j>>_,u[v+2]=Z*j>>_,J-=G,Y-=X,Z-=W,G-=b.r,X-=b.g,W-=b.b,v=K+((v=se+h)\u003Cf?v:f)*n\u003C\u003C2,J+=ee+=b.r=u[v],Y+=te+=b.g=u[v+1],Z+=re+=b.b=u[v+2],b=b.next,G+=z=B.r,X+=V=B.g,W+=q=B.b,ee-=z,te-=V,re-=q,B=B.next,x+=n}return e}var d=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}},\".\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js\":function(e,t,r){\"use strict\";r.r(t),r.d(t,{COMMAND_ARG_COUNTS:function(){return j},SVGPathData:function(){return B},SVGPathDataParser:function(){return b},SVGPathDataTransformer:function(){return l},encodeSVGPath:function(){return s}});var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function o(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function s(e){var t=\"\";Array.isArray(e)||(e=[e]);for(var r=0;r\u003Ce.length;r++){var n=e[r];if(n.type===B.CLOSE_PATH)t+=\"z\";else if(n.type===B.HORIZ_LINE_TO)t+=(n.relative?\"h\":\"H\")+n.x;else if(n.type===B.VERT_LINE_TO)t+=(n.relative?\"v\":\"V\")+n.y;else if(n.type===B.MOVE_TO)t+=(n.relative?\"m\":\"M\")+n.x+\" \"+n.y;else if(n.type===B.LINE_TO)t+=(n.relative?\"l\":\"L\")+n.x+\" \"+n.y;else if(n.type===B.CURVE_TO)t+=(n.relative?\"c\":\"C\")+n.x1+\" \"+n.y1+\" \"+n.x2+\" \"+n.y2+\" \"+n.x+\" \"+n.y;else if(n.type===B.SMOOTH_CURVE_TO)t+=(n.relative?\"s\":\"S\")+n.x2+\" \"+n.y2+\" \"+n.x+\" \"+n.y;else if(n.type===B.QUAD_TO)t+=(n.relative?\"q\":\"Q\")+n.x1+\" \"+n.y1+\" \"+n.x+\" \"+n.y;else if(n.type===B.SMOOTH_QUAD_TO)t+=(n.relative?\"t\":\"T\")+n.x+\" \"+n.y;else{if(n.type!==B.ARC)throw new Error('Unexpected command type \"'+n.type+'\" at index '+r+\".\");t+=(n.relative?\"a\":\"A\")+n.rX+\" \"+n.rY+\" \"+n.xRot+\" \"+ +n.lArcFlag+\" \"+ +n.sweepFlag+\" \"+n.x+\" \"+n.y}}return t}function i(e,t){var r=e[0],n=e[1];return[r*Math.cos(t)-n*Math.sin(t),r*Math.sin(t)+n*Math.cos(t)]}function a(){for(var e=[],t=0;t\u003Carguments.length;t++)e[t]=arguments[t];for(var r=0;r\u003Ce.length;r++)if(\"number\"!=typeof e[r])throw new Error(\"assertNumbers arguments[\"+r+\"] is not a number. \"+typeof e[r]+\" == typeof \"+e[r]);return!0}var A=Math.PI;function u(e,t,r){e.lArcFlag=0===e.lArcFlag?0:1,e.sweepFlag=0===e.sweepFlag?0:1;var n=e.rX,o=e.rY,s=e.x,a=e.y;n=Math.abs(e.rX),o=Math.abs(e.rY);var u=i([(t-s)\u002F2,(r-a)\u002F2],-e.xRot\u002F180*A),c=u[0],l=u[1],d=Math.pow(c,2)\u002FMath.pow(n,2)+Math.pow(l,2)\u002FMath.pow(o,2);1\u003Cd&&(n*=Math.sqrt(d),o*=Math.sqrt(d)),e.rX=n,e.rY=o;var f=Math.pow(n,2)*Math.pow(l,2)+Math.pow(o,2)*Math.pow(c,2),h=(e.lArcFlag!==e.sweepFlag?1:-1)*Math.sqrt(Math.max(0,(Math.pow(n,2)*Math.pow(o,2)-f)\u002Ff)),p=n*l\u002Fo*h,m=-o*c\u002Fn*h,g=i([p,m],e.xRot\u002F180*A);e.cX=g[0]+(t+s)\u002F2,e.cY=g[1]+(r+a)\u002F2,e.phi1=Math.atan2((l-m)\u002Fo,(c-p)\u002Fn),e.phi2=Math.atan2((-l-m)\u002Fo,(-c-p)\u002Fn),0===e.sweepFlag&&e.phi2>e.phi1&&(e.phi2-=2*A),1===e.sweepFlag&&e.phi2\u003Ce.phi1&&(e.phi2+=2*A),e.phi1*=180\u002FA,e.phi2*=180\u002FA}function c(e,t,r){a(e,t,r);var n=e*e+t*t-r*r;if(0>n)return[];if(0===n)return[[e*r\u002F(e*e+t*t),t*r\u002F(e*e+t*t)]];var o=Math.sqrt(n);return[[(e*r+t*o)\u002F(e*e+t*t),(t*r-e*o)\u002F(e*e+t*t)],[(e*r-t*o)\u002F(e*e+t*t),(t*r+e*o)\u002F(e*e+t*t)]]}var l,d=Math.PI\u002F180;function f(e,t,r){return(1-r)*e+r*t}function h(e,t,r,n){return e+Math.cos(n\u002F180*A)*t+Math.sin(n\u002F180*A)*r}function p(e,t,r,n){var o=t-e,s=r-t,i=3*o+3*(n-r)-6*s,a=6*(s-o),A=3*o;return Math.abs(i)\u003C1e-6?[-A\u002Fa]:function(e,t,r){void 0===r&&(r=1e-6);var n=e*e\u002F4-t;if(n\u003C-r)return[];if(n\u003C=r)return[-e\u002F2];var o=Math.sqrt(n);return[-e\u002F2-o,-e\u002F2+o]}(a\u002Fi,A\u002Fi,1e-6)}function m(e,t,r,n,o){var s=1-o;return e*(s*s*s)+t*(3*s*s*o)+r*(3*s*o*o)+n*(o*o*o)}!function(e){function t(){return o((function(e,t,r){return e.relative&&(void 0!==e.x1&&(e.x1+=t),void 0!==e.y1&&(e.y1+=r),void 0!==e.x2&&(e.x2+=t),void 0!==e.y2&&(e.y2+=r),void 0!==e.x&&(e.x+=t),void 0!==e.y&&(e.y+=r),e.relative=!1),e}))}function r(){var e=NaN,t=NaN,r=NaN,n=NaN;return o((function(o,s,i){return o.type&B.SMOOTH_CURVE_TO&&(o.type=B.CURVE_TO,e=isNaN(e)?s:e,t=isNaN(t)?i:t,o.x1=o.relative?s-e:2*s-e,o.y1=o.relative?i-t:2*i-t),o.type&B.CURVE_TO?(e=o.relative?s+o.x2:o.x2,t=o.relative?i+o.y2:o.y2):(e=NaN,t=NaN),o.type&B.SMOOTH_QUAD_TO&&(o.type=B.QUAD_TO,r=isNaN(r)?s:r,n=isNaN(n)?i:n,o.x1=o.relative?s-r:2*s-r,o.y1=o.relative?i-n:2*i-n),o.type&B.QUAD_TO?(r=o.relative?s+o.x1:o.x1,n=o.relative?i+o.y1:o.y1):(r=NaN,n=NaN),o}))}function n(){var e=NaN,t=NaN;return o((function(r,n,o){if(r.type&B.SMOOTH_QUAD_TO&&(r.type=B.QUAD_TO,e=isNaN(e)?n:e,t=isNaN(t)?o:t,r.x1=r.relative?n-e:2*n-e,r.y1=r.relative?o-t:2*o-t),r.type&B.QUAD_TO){e=r.relative?n+r.x1:r.x1,t=r.relative?o+r.y1:r.y1;var s=r.x1,i=r.y1;r.type=B.CURVE_TO,r.x1=((r.relative?0:n)+2*s)\u002F3,r.y1=((r.relative?0:o)+2*i)\u002F3,r.x2=(r.x+2*s)\u002F3,r.y2=(r.y+2*i)\u002F3}else e=NaN,t=NaN;return r}))}function o(e){var t=0,r=0,n=NaN,o=NaN;return function(s){if(isNaN(n)&&!(s.type&B.MOVE_TO))throw new Error(\"path must start with moveto\");var i=e(s,t,r,n,o);return s.type&B.CLOSE_PATH&&(t=n,r=o),void 0!==s.x&&(t=s.relative?t+s.x:s.x),void 0!==s.y&&(r=s.relative?r+s.y:s.y),s.type&B.MOVE_TO&&(n=t,o=r),i}}function s(e,t,r,n,s,i){return a(e,t,r,n,s,i),o((function(o,a,A,u){var c=o.x1,l=o.x2,d=o.relative&&!isNaN(u),f=void 0!==o.x?o.x:d?0:a,h=void 0!==o.y?o.y:d?0:A;function p(e){return e*e}o.type&B.HORIZ_LINE_TO&&0!==t&&(o.type=B.LINE_TO,o.y=o.relative?0:A),o.type&B.VERT_LINE_TO&&0!==r&&(o.type=B.LINE_TO,o.x=o.relative?0:a),void 0!==o.x&&(o.x=o.x*e+h*r+(d?0:s)),void 0!==o.y&&(o.y=f*t+o.y*n+(d?0:i)),void 0!==o.x1&&(o.x1=o.x1*e+o.y1*r+(d?0:s)),void 0!==o.y1&&(o.y1=c*t+o.y1*n+(d?0:i)),void 0!==o.x2&&(o.x2=o.x2*e+o.y2*r+(d?0:s)),void 0!==o.y2&&(o.y2=l*t+o.y2*n+(d?0:i));var m=e*n-t*r;if(void 0!==o.xRot&&(1!==e||0!==t||0!==r||1!==n))if(0===m)delete o.rX,delete o.rY,delete o.xRot,delete o.lArcFlag,delete o.sweepFlag,o.type=B.LINE_TO;else{var g=o.xRot*Math.PI\u002F180,y=Math.sin(g),v=Math.cos(g),w=1\u002Fp(o.rX),b=1\u002Fp(o.rY),j=p(v)*w+p(y)*b,_=2*y*v*(w-b),C=p(y)*w+p(v)*b,x=j*n*n-_*t*n+C*t*t,E=_*(e*n+t*r)-2*(j*r*n+C*e*t),N=j*r*r-_*e*r+C*e*e,Q=(Math.atan2(E,x-N)+Math.PI)%Math.PI\u002F2,F=Math.sin(Q),U=Math.cos(Q);o.rX=Math.abs(m)\u002FMath.sqrt(x*p(U)+E*F*U+N*p(F)),o.rY=Math.abs(m)\u002FMath.sqrt(x*p(F)-E*F*U+N*p(U)),o.xRot=180*Q\u002FMath.PI}return void 0!==o.sweepFlag&&0>m&&(o.sweepFlag=+!o.sweepFlag),o}))}e.ROUND=function(e){function t(t){return Math.round(t*e)\u002Fe}return void 0===e&&(e=1e13),a(e),function(e){return void 0!==e.x1&&(e.x1=t(e.x1)),void 0!==e.y1&&(e.y1=t(e.y1)),void 0!==e.x2&&(e.x2=t(e.x2)),void 0!==e.y2&&(e.y2=t(e.y2)),void 0!==e.x&&(e.x=t(e.x)),void 0!==e.y&&(e.y=t(e.y)),void 0!==e.rX&&(e.rX=t(e.rX)),void 0!==e.rY&&(e.rY=t(e.rY)),e}},e.TO_ABS=t,e.TO_REL=function(){return o((function(e,t,r){return e.relative||(void 0!==e.x1&&(e.x1-=t),void 0!==e.y1&&(e.y1-=r),void 0!==e.x2&&(e.x2-=t),void 0!==e.y2&&(e.y2-=r),void 0!==e.x&&(e.x-=t),void 0!==e.y&&(e.y-=r),e.relative=!0),e}))},e.NORMALIZE_HVZ=function(e,t,r){return void 0===e&&(e=!0),void 0===t&&(t=!0),void 0===r&&(r=!0),o((function(n,o,s,i,a){if(isNaN(i)&&!(n.type&B.MOVE_TO))throw new Error(\"path must start with moveto\");return t&&n.type&B.HORIZ_LINE_TO&&(n.type=B.LINE_TO,n.y=n.relative?0:s),r&&n.type&B.VERT_LINE_TO&&(n.type=B.LINE_TO,n.x=n.relative?0:o),e&&n.type&B.CLOSE_PATH&&(n.type=B.LINE_TO,n.x=n.relative?i-o:i,n.y=n.relative?a-s:a),n.type&B.ARC&&(0===n.rX||0===n.rY)&&(n.type=B.LINE_TO,delete n.rX,delete n.rY,delete n.xRot,delete n.lArcFlag,delete n.sweepFlag),n}))},e.NORMALIZE_ST=r,e.QT_TO_C=n,e.INFO=o,e.SANITIZE=function(e){void 0===e&&(e=0),a(e);var t=NaN,r=NaN,n=NaN,s=NaN;return o((function(o,i,a,A,u){var c=Math.abs,l=!1,d=0,f=0;if(o.type&B.SMOOTH_CURVE_TO&&(d=isNaN(t)?0:i-t,f=isNaN(r)?0:a-r),o.type&(B.CURVE_TO|B.SMOOTH_CURVE_TO)?(t=o.relative?i+o.x2:o.x2,r=o.relative?a+o.y2:o.y2):(t=NaN,r=NaN),o.type&B.SMOOTH_QUAD_TO?(n=isNaN(n)?i:2*i-n,s=isNaN(s)?a:2*a-s):o.type&B.QUAD_TO?(n=o.relative?i+o.x1:o.x1,s=o.relative?a+o.y1:o.y2):(n=NaN,s=NaN),o.type&B.LINE_COMMANDS||o.type&B.ARC&&(0===o.rX||0===o.rY||!o.lArcFlag)||o.type&B.CURVE_TO||o.type&B.SMOOTH_CURVE_TO||o.type&B.QUAD_TO||o.type&B.SMOOTH_QUAD_TO){var h=void 0===o.x?0:o.relative?o.x:o.x-i,p=void 0===o.y?0:o.relative?o.y:o.y-a;d=isNaN(n)?void 0===o.x1?d:o.relative?o.x:o.x1-i:n-i,f=isNaN(s)?void 0===o.y1?f:o.relative?o.y:o.y1-a:s-a;var m=void 0===o.x2?0:o.relative?o.x:o.x2-i,g=void 0===o.y2?0:o.relative?o.y:o.y2-a;c(h)\u003C=e&&c(p)\u003C=e&&c(d)\u003C=e&&c(f)\u003C=e&&c(m)\u003C=e&&c(g)\u003C=e&&(l=!0)}return o.type&B.CLOSE_PATH&&c(i-A)\u003C=e&&c(a-u)\u003C=e&&(l=!0),l?[]:o}))},e.MATRIX=s,e.ROTATE=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0),a(e,t,r);var n=Math.sin(e),o=Math.cos(e);return s(o,n,-n,o,t-t*o+r*n,r-t*n-r*o)},e.TRANSLATE=function(e,t){return void 0===t&&(t=0),a(e,t),s(1,0,0,1,e,t)},e.SCALE=function(e,t){return void 0===t&&(t=e),a(e,t),s(e,0,0,t,0,0)},e.SKEW_X=function(e){return a(e),s(1,0,Math.atan(e),1,0,0)},e.SKEW_Y=function(e){return a(e),s(1,Math.atan(e),0,1,0,0)},e.X_AXIS_SYMMETRY=function(e){return void 0===e&&(e=0),a(e),s(-1,0,0,1,e,0)},e.Y_AXIS_SYMMETRY=function(e){return void 0===e&&(e=0),a(e),s(1,0,0,-1,0,e)},e.A_TO_C=function(){return o((function(e,t,r){return B.ARC===e.type?function(e,t,r){var n,o,s,a;e.cX||u(e,t,r);for(var A=Math.min(e.phi1,e.phi2),c=Math.max(e.phi1,e.phi2)-A,l=Math.ceil(c\u002F90),h=new Array(l),p=t,m=r,g=0;g\u003Cl;g++){var y=f(e.phi1,e.phi2,g\u002Fl),v=f(e.phi1,e.phi2,(g+1)\u002Fl),w=v-y,b=4\u002F3*Math.tan(w*d\u002F4),j=[Math.cos(y*d)-b*Math.sin(y*d),Math.sin(y*d)+b*Math.cos(y*d)],_=j[0],C=j[1],x=[Math.cos(v*d),Math.sin(v*d)],E=x[0],N=x[1],Q=[E+b*Math.sin(v*d),N-b*Math.cos(v*d)],F=Q[0],U=Q[1];h[g]={relative:e.relative,type:B.CURVE_TO};var S=function(t,r){var n=i([t*e.rX,r*e.rY],e.xRot),o=n[0],s=n[1];return[e.cX+o,e.cY+s]};n=S(_,C),h[g].x1=n[0],h[g].y1=n[1],o=S(F,U),h[g].x2=o[0],h[g].y2=o[1],s=S(E,N),h[g].x=s[0],h[g].y=s[1],e.relative&&(h[g].x1-=p,h[g].y1-=m,h[g].x2-=p,h[g].y2-=m,h[g].x-=p,h[g].y-=m),p=(a=[h[g].x,h[g].y])[0],m=a[1]}return h}(e,e.relative?0:t,e.relative?0:r):e}))},e.ANNOTATE_ARCS=function(){return o((function(e,t,r){return e.relative&&(t=0,r=0),B.ARC===e.type&&u(e,t,r),e}))},e.CLONE=function(){return function(e){var t={};for(var r in e)t[r]=e[r];return t}},e.CALCULATE_BOUNDS=function(){var e=t(),s=n(),i=r(),a=o((function(t,r,n){var o=i(s(e(function(e){var t={};for(var r in e)t[r]=e[r];return t}(t))));function A(e){e>a.maxX&&(a.maxX=e),e\u003Ca.minX&&(a.minX=e)}function l(e){e>a.maxY&&(a.maxY=e),e\u003Ca.minY&&(a.minY=e)}if(o.type&B.DRAWING_COMMANDS&&(A(r),l(n)),o.type&B.HORIZ_LINE_TO&&A(o.x),o.type&B.VERT_LINE_TO&&l(o.y),o.type&B.LINE_TO&&(A(o.x),l(o.y)),o.type&B.CURVE_TO){A(o.x),l(o.y);for(var d=0,f=p(r,o.x1,o.x2,o.x);d\u003Cf.length;d++)0\u003C(L=f[d])&&1>L&&A(m(r,o.x1,o.x2,o.x,L));for(var g=0,y=p(n,o.y1,o.y2,o.y);g\u003Cy.length;g++)0\u003C(L=y[g])&&1>L&&l(m(n,o.y1,o.y2,o.y,L))}if(o.type&B.ARC){A(o.x),l(o.y),u(o,r,n);for(var v=o.xRot\u002F180*Math.PI,w=Math.cos(v)*o.rX,b=Math.sin(v)*o.rX,j=-Math.sin(v)*o.rY,_=Math.cos(v)*o.rY,C=o.phi1\u003Co.phi2?[o.phi1,o.phi2]:-180>o.phi2?[o.phi2+360,o.phi1+360]:[o.phi2,o.phi1],x=C[0],E=C[1],N=function(e){var t=e[0],r=e[1],n=180*Math.atan2(r,t)\u002FMath.PI;return n\u003Cx?n+360:n},Q=0,F=c(j,-w,0).map(N);Q\u003CF.length;Q++)(L=F[Q])>x&&L\u003CE&&A(h(o.cX,w,j,L));for(var U=0,S=c(_,-b,0).map(N);U\u003CS.length;U++){var L;(L=S[U])>x&&L\u003CE&&l(h(o.cY,b,_,L))}}return t}));return a.minX=1\u002F0,a.maxX=-1\u002F0,a.minY=1\u002F0,a.maxY=-1\u002F0,a}}(l||(l={}));var g,y=function(){function e(){}return e.prototype.round=function(e){return this.transform(l.ROUND(e))},e.prototype.toAbs=function(){return this.transform(l.TO_ABS())},e.prototype.toRel=function(){return this.transform(l.TO_REL())},e.prototype.normalizeHVZ=function(e,t,r){return this.transform(l.NORMALIZE_HVZ(e,t,r))},e.prototype.normalizeST=function(){return this.transform(l.NORMALIZE_ST())},e.prototype.qtToC=function(){return this.transform(l.QT_TO_C())},e.prototype.aToC=function(){return this.transform(l.A_TO_C())},e.prototype.sanitize=function(e){return this.transform(l.SANITIZE(e))},e.prototype.translate=function(e,t){return this.transform(l.TRANSLATE(e,t))},e.prototype.scale=function(e,t){return this.transform(l.SCALE(e,t))},e.prototype.rotate=function(e,t,r){return this.transform(l.ROTATE(e,t,r))},e.prototype.matrix=function(e,t,r,n,o,s){return this.transform(l.MATRIX(e,t,r,n,o,s))},e.prototype.skewX=function(e){return this.transform(l.SKEW_X(e))},e.prototype.skewY=function(e){return this.transform(l.SKEW_Y(e))},e.prototype.xSymmetry=function(e){return this.transform(l.X_AXIS_SYMMETRY(e))},e.prototype.ySymmetry=function(e){return this.transform(l.Y_AXIS_SYMMETRY(e))},e.prototype.annotateArcs=function(){return this.transform(l.ANNOTATE_ARCS())},e}(),v=function(e){return\" \"===e||\"\\t\"===e||\"\\r\"===e||\"\\n\"===e},w=function(e){return\"0\".charCodeAt(0)\u003C=e.charCodeAt(0)&&e.charCodeAt(0)\u003C=\"9\".charCodeAt(0)},b=function(e){function t(){var t=e.call(this)||this;return t.curNumber=\"\",t.curCommandType=-1,t.curCommandRelative=!1,t.canParseCommandOrComma=!0,t.curNumberHasExp=!1,t.curNumberHasExpDigits=!1,t.curNumberHasDecimal=!1,t.curArgs=[],t}return o(t,e),t.prototype.finish=function(e){if(void 0===e&&(e=[]),this.parse(\" \",e),0!==this.curArgs.length||!this.canParseCommandOrComma)throw new SyntaxError(\"Unterminated command at the path end.\");return e},t.prototype.parse=function(e,t){var r=this;void 0===t&&(t=[]);for(var n=function(e){t.push(e),r.curArgs.length=0,r.canParseCommandOrComma=!0},o=0;o\u003Ce.length;o++){var s=e[o],i=!(this.curCommandType!==B.ARC||3!==this.curArgs.length&&4!==this.curArgs.length||1!==this.curNumber.length||\"0\"!==this.curNumber&&\"1\"!==this.curNumber),a=w(s)&&(\"0\"===this.curNumber&&\"0\"===s||i);if(!w(s)||a)if(\"e\"!==s&&\"E\"!==s)if(\"-\"!==s&&\"+\"!==s||!this.curNumberHasExp||this.curNumberHasExpDigits)if(\".\"!==s||this.curNumberHasExp||this.curNumberHasDecimal||i){if(this.curNumber&&-1!==this.curCommandType){var A=Number(this.curNumber);if(isNaN(A))throw new SyntaxError(\"Invalid number ending at \"+o);if(this.curCommandType===B.ARC)if(0===this.curArgs.length||1===this.curArgs.length){if(0>A)throw new SyntaxError('Expected positive number, got \"'+A+'\" at index \"'+o+'\"')}else if((3===this.curArgs.length||4===this.curArgs.length)&&\"0\"!==this.curNumber&&\"1\"!==this.curNumber)throw new SyntaxError('Expected a flag, got \"'+this.curNumber+'\" at index \"'+o+'\"');this.curArgs.push(A),this.curArgs.length===j[this.curCommandType]&&(B.HORIZ_LINE_TO===this.curCommandType?n({type:B.HORIZ_LINE_TO,relative:this.curCommandRelative,x:A}):B.VERT_LINE_TO===this.curCommandType?n({type:B.VERT_LINE_TO,relative:this.curCommandRelative,y:A}):this.curCommandType===B.MOVE_TO||this.curCommandType===B.LINE_TO||this.curCommandType===B.SMOOTH_QUAD_TO?(n({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),B.MOVE_TO===this.curCommandType&&(this.curCommandType=B.LINE_TO)):this.curCommandType===B.CURVE_TO?n({type:B.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===B.SMOOTH_CURVE_TO?n({type:B.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===B.QUAD_TO?n({type:B.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===B.ARC&&n({type:B.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=\"\",this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!v(s))if(\",\"===s&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(\"+\"!==s&&\"-\"!==s&&\".\"!==s)if(a)this.curNumber=s,this.curNumberHasDecimal=!1;else{if(0!==this.curArgs.length)throw new SyntaxError(\"Unterminated command at index \"+o+\".\");if(!this.canParseCommandOrComma)throw new SyntaxError('Unexpected character \"'+s+'\" at index '+o+\". Command cannot follow comma\");if(this.canParseCommandOrComma=!1,\"z\"!==s&&\"Z\"!==s)if(\"h\"===s||\"H\"===s)this.curCommandType=B.HORIZ_LINE_TO,this.curCommandRelative=\"h\"===s;else if(\"v\"===s||\"V\"===s)this.curCommandType=B.VERT_LINE_TO,this.curCommandRelative=\"v\"===s;else if(\"m\"===s||\"M\"===s)this.curCommandType=B.MOVE_TO,this.curCommandRelative=\"m\"===s;else if(\"l\"===s||\"L\"===s)this.curCommandType=B.LINE_TO,this.curCommandRelative=\"l\"===s;else if(\"c\"===s||\"C\"===s)this.curCommandType=B.CURVE_TO,this.curCommandRelative=\"c\"===s;else if(\"s\"===s||\"S\"===s)this.curCommandType=B.SMOOTH_CURVE_TO,this.curCommandRelative=\"s\"===s;else if(\"q\"===s||\"Q\"===s)this.curCommandType=B.QUAD_TO,this.curCommandRelative=\"q\"===s;else if(\"t\"===s||\"T\"===s)this.curCommandType=B.SMOOTH_QUAD_TO,this.curCommandRelative=\"t\"===s;else{if(\"a\"!==s&&\"A\"!==s)throw new SyntaxError('Unexpected character \"'+s+'\" at index '+o+\".\");this.curCommandType=B.ARC,this.curCommandRelative=\"a\"===s}else t.push({type:B.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=s,this.curNumberHasDecimal=\".\"===s}else this.curNumber+=s,this.curNumberHasDecimal=!0;else this.curNumber+=s;else this.curNumber+=s,this.curNumberHasExp=!0;else this.curNumber+=s,this.curNumberHasExpDigits=this.curNumberHasExp}return t},t.prototype.transform=function(e){return Object.create(this,{parse:{value:function(t,r){void 0===r&&(r=[]);for(var n=0,o=Object.getPrototypeOf(this).parse.call(this,t);n\u003Co.length;n++){var s=o[n],i=e(s);Array.isArray(i)?r.push.apply(r,i):r.push(i)}return r}}})},t}(y),B=function(e){function t(r){var n=e.call(this)||this;return n.commands=\"string\"==typeof r?t.parse(r):r,n}return o(t,e),t.prototype.encode=function(){return t.encode(this.commands)},t.prototype.getBounds=function(){var e=l.CALCULATE_BOUNDS();return this.transform(e),e},t.prototype.transform=function(e){for(var t=[],r=0,n=this.commands;r\u003Cn.length;r++){var o=e(n[r]);Array.isArray(o)?t.push.apply(t,o):t.push(o)}return this.commands=t,this},t.encode=function(e){return s(e)},t.parse=function(e){var t=new b,r=[];return t.parse(e,r),t.finish(r),r},t.CLOSE_PATH=1,t.MOVE_TO=2,t.HORIZ_LINE_TO=4,t.VERT_LINE_TO=8,t.LINE_TO=16,t.CURVE_TO=32,t.SMOOTH_CURVE_TO=64,t.QUAD_TO=128,t.SMOOTH_QUAD_TO=256,t.ARC=512,t.LINE_COMMANDS=t.LINE_TO|t.HORIZ_LINE_TO|t.VERT_LINE_TO,t.DRAWING_COMMANDS=t.HORIZ_LINE_TO|t.VERT_LINE_TO|t.LINE_TO|t.CURVE_TO|t.SMOOTH_CURVE_TO|t.QUAD_TO|t.SMOOTH_QUAD_TO|t.ARC,t}(y),j=((g={})[B.MOVE_TO]=2,g[B.LINE_TO]=2,g[B.HORIZ_LINE_TO]=1,g[B.VERT_LINE_TO]=1,g[B.CLOSE_PATH]=0,g[B.QUAD_TO]=4,g[B.SMOOTH_QUAD_TO]=2,g[B.CURVE_TO]=6,g[B.SMOOTH_CURVE_TO]=4,g[B.ARC]=7,g)}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var s=n[e]={exports:{}};return r[e].call(s.exports,s,s.exports,o),s.exports}o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if(\"object\"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&\"function\"==typeof r.then)return r}var s=Object.create(null);o.r(s);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&n&&r;\"object\"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((function(e){i[e]=function(){return r[e]}}));return i.default=function(){return r},o.d(s,i),s},o.d=function(e,t){for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var s={};return function(){\"use strict\";o.r(s);var e=o(\".\u002Fsrc\u002Fworker.js\"),t=(o(\".\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js\"),o(\".\u002Fsrc\u002Fplugin\u002Fpagebreaks.js\"),o(\".\u002Fsrc\u002Fplugin\u002Fhyperlinks.js\"),function e(t,r){var n=new e.Worker(r);return t?n.from(t).save():n});t.Worker=e.default,s.default=t}(),s.default}()}));\n \u002F\u002F# sourceMappingURL=html2pdf.bundle.min.js.map\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js.LICENSE.txt \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js.LICENSE.txt\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js.LICENSE.txt\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js.LICENSE.txt\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3331 +1,3331 @@\n-\u002F*!\r\n- * @overview es6-promise - a tiny implementation of Promises\u002FA+.\r\n- * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\r\n- * @license   Licensed under MIT license\r\n- *            See https:\u002F\u002Fraw.githubusercontent.com\u002Fstefanpenner\u002Fes6-promise\u002Fmaster\u002FLICENSE\r\n- * @version   v4.2.8+1e68dce6\r\n- *\u002F\r\n-\r\n-\u002F*!\r\n- * html2canvas 1.0.0 \u003Chttps:\u002F\u002Fhtml2canvas.hertzen.com>\r\n- * Copyright (c) 2021 Niklas von Hertzen \u003Chttps:\u002F\u002Fhertzen.com>\r\n- * Released under MIT License\r\n- *\u002F\r\n-\r\n-\u002F*!\r\n- * html2pdf.js v0.10.1\r\n- * Copyright (c) 2021 Erik Koopmans\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-\u002F*! *****************************************************************************\r\n-    Copyright (c) Microsoft Corporation. All rights reserved.\r\n-    Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n-    this file except in compliance with the License. You may obtain a copy of the\r\n-    License at http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\r\n-\r\n-    THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n-    KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n-    WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n-    MERCHANTABLITY OR NON-INFRINGEMENT.\r\n-\r\n-    See the Apache Version 2.0 License for specific language governing permissions\r\n-    and limitations under the License.\r\n-    ***************************************************************************** *\u002F\r\n-\r\n-\u002F*! *****************************************************************************\r\n-Copyright (c) Microsoft Corporation. All rights reserved.\r\n-Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n-this file except in compliance with the License. You may obtain a copy of the\r\n-License at http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\r\n-\r\n-THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n-KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n-WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n-MERCHANTABLITY OR NON-INFRINGEMENT.\r\n-\r\n-See the Apache Version 2.0 License for specific language governing permissions\r\n-and limitations under the License.\r\n-***************************************************************************** *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fes\u002Farray\u002Fvirtual\u002Fvalues *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Finternals\u002Fentry-virtual *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.concat *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.every *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.fill *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.filter *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.for-each *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.includes *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.index-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.map *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.reduce *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.reverse *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.slice *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.some *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.function.bind *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.includes *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.starts-with *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.trim *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Farray\u002Ffrom *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Farray\u002Fis-array *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fdate\u002Fnow *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fbind *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fconcat *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fevery *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ffill *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ffilter *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fincludes *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Findex-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fmap *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Freduce *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Freverse *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fslice *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fsome *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fstarts-with *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ftrim *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fmap *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fcreate *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fdefine-properties *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fdefine-property *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-descriptors *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-symbols *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fkeys *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fset-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fpromise *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fapply *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fconstruct *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fdelete-property *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fget *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fsymbol *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fes\u002Fsymbol\u002Fiterator *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Finternals\u002Fclassof *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Finternals\u002Fpath *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Finternals\u002Fwell-known-symbol-wrapped *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.aggregate-error *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.concat *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.from *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.is-array *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.date.now *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.json.to-string-tag *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.map *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.math.to-string-tag *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.create *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.define-properties *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.define-property *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-own-property-descriptors *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.keys *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.set-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.to-string *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.all-settled *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.any *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.finally *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.apply *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.construct *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.delete-property *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.get *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.get-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.to-string-tag *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.string.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.async-iterator *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.description *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.has-instance *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.is-concat-spreadable *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.match *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.match-all *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.replace *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.search *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.species *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.split *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.to-primitive *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.to-string-tag *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.unscopables *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.aggregate-error *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.all-settled *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.any *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.try *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.async-dispose *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.dispose *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.matcher *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.metadata *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.observable *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.pattern-match *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.replace-all *\u002F\r\n-\r\n-\u002F*! ..\u002F..\u002Fmodules\u002Fweb.dom-collections.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fconcat *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fevery *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Ffill *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Ffilter *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Ffor-each *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fincludes *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Findex-of *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fmap *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Freduce *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Freverse *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fslice *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fsome *\u002F\r\n-\r\n-\u002F*! ..\u002Farray\u002Fvirtual\u002Fvalues *\u002F\r\n-\r\n-\u002F*! ..\u002Fes\u002Fparse-float *\u002F\r\n-\r\n-\u002F*! ..\u002Fes\u002Fparse-int *\u002F\r\n-\r\n-\u002F*! ..\u002Ffunction\u002Fvirtual\u002Fbind *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fa-function *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fa-possible-prototype *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fadd-to-unscopables *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fan-instance *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fan-object *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-fill *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-for-each *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-from *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-includes *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-iteration *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-method-has-species-support *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-method-is-strict *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-reduce *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-species-constructor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Farray-species-create *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcall-with-safe-iteration-closing *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcheck-correctness-of-iteration *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fclassof *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fclassof-raw *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcollection *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcollection-strong *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcopy-constructor-properties *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcorrect-is-regexp-logic *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcorrect-prototype-getter *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcreate-html *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcreate-iterator-constructor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcreate-non-enumerable-property *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcreate-property *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fcreate-property-descriptor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fdefine-iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fdefine-well-known-symbol *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fdescriptors *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fdocument-create-element *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fdom-iterables *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-is-browser *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-is-ios *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-is-node *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-is-webos-webkit *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-user-agent *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fengine-v8-version *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fenum-bug-keys *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fexport *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Ffails *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Ffreezing *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Ffunction-bind *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Ffunction-bind-context *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fget-built-in *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fget-iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fget-iterator-method *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fglobal *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fhas *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fhidden-keys *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fhost-report-errors *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fhtml *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fie8-dom-define *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Findexed-object *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Finherit-if-required *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Finspect-source *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Finternal-metadata *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Finternal-state *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-array *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-array-iterator-method *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-forced *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-object *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-pure *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-regexp *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fis-symbol *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fiterate *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fiterator-close *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fiterators *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fiterators-core *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fmicrotask *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnative-promise-constructor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnative-symbol *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnative-weak-map *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnew-promise-capability *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnot-a-regexp *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnumber-parse-float *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fnumber-parse-int *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-assign *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-create *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-define-properties *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-define-property *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-get-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-get-own-property-names *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-get-own-property-names-external *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-get-own-property-symbols *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-get-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-keys *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-keys-internal *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-property-is-enumerable *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-set-prototype-of *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fobject-to-string *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fordinary-to-primitive *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fown-keys *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fpath *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fperform *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fpromise-resolve *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fredefine *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fredefine-all *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fregexp-flags *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Frequire-object-coercible *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fset-global *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fset-species *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fset-to-string-tag *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fshared *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fshared-key *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fshared-store *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fspecies-constructor *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fstring-html-forced *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fstring-multibyte *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fstring-trim *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fstring-trim-forced *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Ftask *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-absolute-index *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-indexed-object *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-integer *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-length *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-object *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-primitive *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-property-key *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-string *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fto-string-tag-support *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fuid *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fuse-symbol-as-uid *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fwell-known-symbol *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fwell-known-symbol-wrapped *\u002F\r\n-\r\n-\u002F*! ..\u002Finternals\u002Fwhitespaces *\u002F\r\n-\r\n-\u002F*! ..\u002Fmodules\u002Fes.array.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Fmodules\u002Fes.parse-float *\u002F\r\n-\r\n-\u002F*! ..\u002Fmodules\u002Fes.parse-int *\u002F\r\n-\r\n-\u002F*! ..\u002Fmodules\u002Fes.string.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Fmodules\u002Fweb.dom-collections.iterator *\u002F\r\n-\r\n-\u002F*! ..\u002Fstring\u002Fvirtual\u002Fincludes *\u002F\r\n-\r\n-\u002F*! ..\u002Fstring\u002Fvirtual\u002Fstarts-with *\u002F\r\n-\r\n-\u002F*! ..\u002Fstring\u002Fvirtual\u002Ftrim *\u002F\r\n-\r\n-\u002F*! ..\u002Futils.js *\u002F\r\n-\r\n-\u002F*! ..\u002Fworker.js *\u002F\r\n-\r\n-\u002F*! .\u002FarrayLikeToArray.js *\u002F\r\n-\r\n-\u002F*! .\u002FarrayWithHoles.js *\u002F\r\n-\r\n-\u002F*! .\u002FarrayWithoutHoles.js *\u002F\r\n-\r\n-\u002F*! .\u002FassertThisInitialized.js *\u002F\r\n-\r\n-\u002F*! .\u002Fes.aggregate-error *\u002F\r\n-\r\n-\u002F*! .\u002Fes.array.iterator *\u002F\r\n-\r\n-\u002F*! .\u002Fes.promise.all-settled.js *\u002F\r\n-\r\n-\u002F*! .\u002Fes.promise.any *\u002F\r\n-\r\n-\u002F*! .\u002Fexport *\u002F\r\n-\r\n-\u002F*! .\u002FgetPrototypeOf.js *\u002F\r\n-\r\n-\u002F*! .\u002FiterableToArray.js *\u002F\r\n-\r\n-\u002F*! .\u002FiterableToArrayLimit.js *\u002F\r\n-\r\n-\u002F*! .\u002FnonIterableRest.js *\u002F\r\n-\r\n-\u002F*! .\u002FnonIterableSpread.js *\u002F\r\n-\r\n-\u002F*! .\u002Fplugin\u002Fhyperlinks.js *\u002F\r\n-\r\n-\u002F*! .\u002Fplugin\u002Fjspdf-plugin.js *\u002F\r\n-\r\n-\u002F*! .\u002Fplugin\u002Fpagebreaks.js *\u002F\r\n-\r\n-\u002F*! .\u002FsetPrototypeOf.js *\u002F\r\n-\r\n-\u002F*! .\u002FsuperPropBase.js *\u002F\r\n-\r\n-\u002F*! .\u002FunsupportedIterableToArray.js *\u002F\r\n-\r\n-\u002F*! .\u002Futils.js *\u002F\r\n-\r\n-\u002F*! .\u002Fworker.js *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FassertThisInitialized *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FasyncToGenerator *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FclassCallCheck *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FcreateClass *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FdefineProperty *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Fget *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FgetPrototypeOf *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Finherits *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FpossibleConstructorReturn *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FslicedToArray *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FtoConsumableArray *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Ftypeof *\u002F\r\n-\r\n-\u002F*! @babel\u002Fruntime-corejs3\u002Fregenerator *\u002F\r\n-\r\n-\u002F*! @license DOMPurify 2.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com\u002Fcure53\u002FDOMPurify\u002Fblob\u002F2.3.0\u002FLICENSE *\u002F\r\n-\r\n-\u002F*! canvg *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Farray\u002Ffrom *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Farray\u002Fis-array *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fget-iterator *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fget-iterator-method *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Finstance\u002Fslice *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fcreate *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fpromise *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Freflect\u002Fget *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fsymbol *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Farray\u002Ffrom *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Farray\u002Fis-array *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fdate\u002Fnow *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fbind *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fconcat *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fevery *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffill *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffilter *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffor-each *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fincludes *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Findex-of *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fmap *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Freduce *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Freverse *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fslice *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fsome *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fstarts-with *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ftrim *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fvalues *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fmap *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fdefine-property *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fkeys *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fparse-float *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fparse-int *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fpromise *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fapply *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fconstruct *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fdelete-property *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of *\u002F\r\n-\r\n-\u002F*! core-js-pure\u002Fstable\u002Fsymbol *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.array.concat.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.array.iterator.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.array.join.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.array.map.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.array.slice.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.function.name.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.number.constructor.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.object.assign.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.object.keys.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.object.to-string.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.regexp.to-string.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.string.iterator.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.string.link.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.symbol.description.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.symbol.iterator.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fes.symbol.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fweb.dom-collections.for-each.js *\u002F\r\n-\r\n-\u002F*! core-js\u002Fmodules\u002Fweb.dom-collections.iterator.js *\u002F\r\n-\r\n-\u002F*! dompurify *\u002F\r\n-\r\n-\u002F*! es6-promise *\u002F\r\n-\r\n-\u002F*! fflate *\u002F\r\n-\r\n-\u002F*! html2canvas *\u002F\r\n-\r\n-\u002F*! jspdf *\u002F\r\n-\r\n-\u002F*! performance-now *\u002F\r\n-\r\n-\u002F*! raf *\u002F\r\n-\r\n-\u002F*! regenerator-runtime *\u002F\r\n-\r\n-\u002F*! rgbcolor *\u002F\r\n-\r\n-\u002F*! stackblur-canvas *\u002F\r\n-\r\n-\u002F*! svg-pathdata *\u002F\r\n-\r\n-\u002F*!**********************!*\\\r\n-  !*** .\u002Fsrc\u002Findex.js ***!\r\n-  \\**********************\u002F\r\n-\r\n-\u002F*!**********************!*\\\r\n-  !*** .\u002Fsrc\u002Futils.js ***!\r\n-  \\**********************\u002F\r\n-\r\n-\u002F*!***********************!*\\\r\n-  !*** .\u002Fsrc\u002Fworker.js ***!\r\n-  \\***********************\u002F\r\n-\r\n-\u002F*!**********************************!*\\\r\n-  !*** .\u002Fsrc\u002Fplugin\u002Fhyperlinks.js ***!\r\n-  \\**********************************\u002F\r\n-\r\n-\u002F*!**********************************!*\\\r\n-  !*** .\u002Fsrc\u002Fplugin\u002Fpagebreaks.js ***!\r\n-  \\**********************************\u002F\r\n-\r\n-\u002F*!***********************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fraf\u002Findex.js ***!\r\n-  \\***********************************\u002F\r\n-\r\n-\u002F*!************************************!*\\\r\n-  !*** .\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js ***!\r\n-  \\************************************\u002F\r\n-\r\n-\u002F*!****************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Frgbcolor\u002Findex.js ***!\r\n-  \\****************************************\u002F\r\n-\r\n-\u002F*!********************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js ***!\r\n-  \\********************************************\u002F\r\n-\r\n-\u002F*!********************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js ***!\r\n-  \\********************************************\u002F\r\n-\r\n-\u002F*!***********************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js ***!\r\n-  \\***********************************************\u002F\r\n-\r\n-\u002F*!***********************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js ***!\r\n-  \\***********************************************\u002F\r\n-\r\n-\u002F*!***********************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js ***!\r\n-  \\***********************************************\u002F\r\n-\r\n-\u002F*!************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js ***!\r\n-  \\************************************************\u002F\r\n-\r\n-\u002F*!************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js ***!\r\n-  \\************************************************\u002F\r\n-\r\n-\u002F*!*************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js ***!\r\n-  \\*************************************************\u002F\r\n-\r\n-\u002F*!*************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js ***!\r\n-  \\*************************************************\u002F\r\n-\r\n-\u002F*!**************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js ***!\r\n-  \\**************************************************\u002F\r\n-\r\n-\u002F*!**************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js ***!\r\n-  \\**************************************************\u002F\r\n-\r\n-\u002F*!**************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js ***!\r\n-  \\**************************************************\u002F\r\n-\r\n-\u002F*!**************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js ***!\r\n-  \\**************************************************\u002F\r\n-\r\n-\u002F*!***************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js ***!\r\n-  \\***************************************************\u002F\r\n-\r\n-\u002F*!***************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js ***!\r\n-  \\***************************************************\u002F\r\n-\r\n-\u002F*!***************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js ***!\r\n-  \\***************************************************\u002F\r\n-\r\n-\u002F*!***************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js ***!\r\n-  \\***************************************************\u002F\r\n-\r\n-\u002F*!***************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js ***!\r\n-  \\***************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js ***!\r\n-  \\****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js ***!\r\n-  \\*****************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js ***!\r\n-  \\******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js ***!\r\n-  \\*******************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js ***!\r\n-  \\********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js ***!\r\n-  \\*********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js ***!\r\n-  \\**********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js ***!\r\n-  \\***********************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js ***!\r\n-  \\************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js ***!\r\n-  \\*************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js ***!\r\n-  \\**************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js ***!\r\n-  \\***************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js ***!\r\n-  \\****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js ***!\r\n-  \\*****************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js ***!\r\n-  \\******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js ***!\r\n-  \\*******************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js ***!\r\n-  \\********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js ***!\r\n-  \\*********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js ***!\r\n-  \\**********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js ***!\r\n-  \\***********************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js ***!\r\n-  \\************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js ***!\r\n-  \\*************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js ***!\r\n-  \\**************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js ***!\r\n-  \\***************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js ***!\r\n-  \\****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!*****************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js ***!\r\n-  \\*****************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js ***!\r\n-  \\******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js ***!\r\n-  \\*******************************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js ***!\r\n-  \\********************************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js ***!\r\n-  \\********************************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js ***!\r\n-  \\********************************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js ***!\r\n-  \\********************************************************************************\u002F\r\n-\r\n-\u002F*!********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js ***!\r\n-  \\********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!*********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js ***!\r\n-  \\*********************************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js ***!\r\n-  \\**********************************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js ***!\r\n-  \\**********************************************************************************\u002F\r\n-\r\n-\u002F*!**********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js ***!\r\n-  \\**********************************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js ***!\r\n-  \\***********************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js ***!\r\n-  \\************************************************************************************\u002F\r\n-\r\n-\u002F*!************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js ***!\r\n-  \\************************************************************************************\u002F\r\n-\r\n-\u002F*!*************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js ***!\r\n-  \\*************************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js ***!\r\n-  \\**************************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js ***!\r\n-  \\**************************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js ***!\r\n-  \\***************************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js ***!\r\n-  \\***************************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js ***!\r\n-  \\***************************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js ***!\r\n-  \\****************************************************************************************\u002F\r\n-\r\n-\u002F*!****************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js ***!\r\n-  \\****************************************************************************************\u002F\r\n-\r\n-\u002F*!*******************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js ***!\r\n-  \\*******************************************************************************************\u002F\r\n-\r\n-\u002F*!***********************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js ***!\r\n-  \\***********************************************************************************************\u002F\r\n-\r\n-\u002F*!**************************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js ***!\r\n-  \\**************************************************************************************************\u002F\r\n-\r\n-\u002F*!***************************************************************************************************!*\\\r\n-  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js ***!\r\n-  \\***************************************************************************************************\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n-  Copyright (c) 2008, Adobe Systems Incorporated\r\n-  All rights reserved.\r\n-\r\n-  Redistribution and use in source and binary forms, with or without \r\n-  modification, are permitted provided that the following conditions are\r\n-  met:\r\n-\r\n-  * Redistributions of source code must retain the above copyright notice, \r\n-    this list of conditions and the following disclaimer.\r\n-  \r\n-  * Redistributions in binary form must reproduce the above copyright\r\n-    notice, this list of conditions and the following disclaimer in the \r\n-    documentation and\u002For other materials provided with the distribution.\r\n-  \r\n-  * Neither the name of Adobe Systems Incorporated nor the names of its \r\n-    contributors may be used to endorse or promote products derived from \r\n-    this software without specific prior written permission.\r\n-\r\n-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\r\n-  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r\n-  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\n-  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \r\n-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n-  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r\n-  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\n-  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n-*\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- *\r\n- * Copyright (c) 2014 James Robb, https:\u002F\u002Fgithub.com\u002Fjamesbrobb\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * (c) Dean McNamee \u003Cdean@gmail.com>, 2013.\r\n- *\r\n- * https:\u002F\u002Fgithub.com\u002Fdeanm\u002Fomggif\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n- * of this software and associated documentation files (the \"Software\"), to\r\n- * deal in the Software without restriction, including without limitation the\r\n- * rights to use, copy, modify, merge, publish, distribute, sublicense, and\u002For\r\n- * sell copies of the Software, and to permit persons to whom the Software is\r\n- * furnished to do so, subject to the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be included in\r\n- * all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\n- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\r\n- * IN THE SOFTWARE.\r\n- *\r\n- * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\r\n- * including animation and compression.  It does not rely on any specific\r\n- * underlying system, so should run in the browser, Node, or Plask.\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * ====================================================================\r\n- * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\r\n- *               2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\r\n- *               2013 Lee Driscoll, https:\u002F\u002Fgithub.com\u002Flsdriscoll\r\n- *               2014 Juan Pablo Gaviria, https:\u002F\u002Fgithub.com\u002Fjuanpgaviria\r\n- *               2014 James Hall, james@parall.ax\r\n- *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Copyright (c) 2017 Aras Abbasi\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Copyright (c) 2018 Aras Abbasi\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Copyright (c) 2018 Erik Koopmans\r\n- * Released under the MIT License.\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Copyright (c) 2019 Aras Abbasi\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * FPDF is released under a permissive license: there is no usage restriction.\r\n- * You may embed it freely in your application (commercial or not), with or\r\n- * without modifications.\r\n- *\r\n- * Reference: http:\u002F\u002Fwww.fpdf.org\u002Fen\u002Fscript\u002Fscript37.php\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * FileSaver.js\r\n- * A saveAs() FileSaver implementation.\r\n- *\r\n- * By Eli Grey, http:\u002F\u002Feligrey.com\r\n- *\r\n- * License : https:\u002F\u002Fgithub.com\u002Feligrey\u002FFileSaver.js\u002Fblob\u002Fmaster\u002FLICENSE.md (MIT)\r\n- * source  : http:\u002F\u002Fpurl.eligrey.com\u002Fgithub\u002FFileSaver.js\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Joseph Myers does not specify a particular license for his work.\r\n- *\r\n- * Author: Joseph Myers\r\n- * Accessed from: http:\u002F\u002Fwww.myersdaily.org\u002Fjoseph\u002Fjavascript\u002Fmd5.js\r\n- *\r\n- * Modified by: Owen Leong\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- * Author: Owen Leong (@owenl131)\r\n- * Date: 15 Oct 2020\r\n- * References:\r\n- * https:\u002F\u002Fwww.cs.cmu.edu\u002F~dst\u002FAdobe\u002FGallery\u002Fanon21jul01-pdf-encryption.txt\r\n- * https:\u002F\u002Fgithub.com\u002Ffoliojs\u002Fpdfkit\u002Fblob\u002Fmaster\u002Flib\u002Fsecurity.js\r\n- * http:\u002F\u002Fwww.fpdf.org\u002Fen\u002Fscript\u002Fscript37.php\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\r\n- * MIT License\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * jsPDF fileloading PlugIn\r\n- * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * jsPDF filters PlugIn\r\n- * Copyright (c) 2014 Aras Abbasi\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @license\r\n- * jsPDF virtual FileSystem functionality\r\n- *\r\n- * Licensed under the MIT License.\r\n- * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * A class to parse color values\r\n- * @author Stoyan Stefanov \u003Csstoo@gmail.com>\r\n- * {@link   http:\u002F\u002Fwww.phpied.com\u002Frgb-color-parser-in-javascript\u002F}\r\n- * @license Use it if you like it\r\n- *\u002F\r\n-\r\n-\u002F** ====================================================================\r\n- * @license\r\n- * jsPDF XMP metadata plugin\r\n- * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n-\r\n-\u002F** @license\r\n-   * Copyright (c) 2017 Dominik Homberger\r\n-\r\n-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and\u002For sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n-\r\n-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n-\r\n-THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n-\r\n-https:\u002F\u002Fwebpjs.appspot.com\r\n-WebPRiffParser dominikhlbg@gmail.com\r\n-*\u002F\r\n-\r\n-\u002F** @license\r\n- *\r\n- * jsPDF - PDF Document creation from JavaScript\r\n- * Version 2.3.1 Built on 2021-03-08T15:44:11.674Z\r\n- *                      CommitID 00000000\r\n- *\r\n- * Copyright (c) 2010-2020 James Hall \u003Cjames@parall.ax>, https:\u002F\u002Fgithub.com\u002FMrRio\u002FjsPDF\r\n- *               2015-2020 yWorks GmbH, http:\u002F\u002Fwww.yworks.com\r\n- *               2015-2020 Lukas Holländer \u003Clukas.hollaender@yworks.com>, https:\u002F\u002Fgithub.com\u002FHackbrettXXX\r\n- *               2016-2018 Aras Abbasi \u003Caras.abbasi@gmail.com>\r\n- *               2010 Aaron Spike, https:\u002F\u002Fgithub.com\u002Facspike\r\n- *               2012 Willow Systems Corporation, willow-systems.com\r\n- *               2012 Pablo Hess, https:\u002F\u002Fgithub.com\u002Fpablohess\r\n- *               2012 Florian Jenett, https:\u002F\u002Fgithub.com\u002Ffjenett\r\n- *               2013 Warren Weckesser, https:\u002F\u002Fgithub.com\u002Fwarrenweckesser\r\n- *               2013 Youssef Beddad, https:\u002F\u002Fgithub.com\u002Flifof\r\n- *               2013 Lee Driscoll, https:\u002F\u002Fgithub.com\u002Flsdriscoll\r\n- *               2013 Stefan Slonevskiy, https:\u002F\u002Fgithub.com\u002Fstefslon\r\n- *               2013 Jeremy Morel, https:\u002F\u002Fgithub.com\u002Fjmorel\r\n- *               2013 Christoph Hartmann, https:\u002F\u002Fgithub.com\u002Fchris-rock\r\n- *               2014 Juan Pablo Gaviria, https:\u002F\u002Fgithub.com\u002Fjuanpgaviria\r\n- *               2014 James Makes, https:\u002F\u002Fgithub.com\u002Fdollaruw\r\n- *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\r\n- *               2014 Steven Spungin, https:\u002F\u002Fgithub.com\u002FFlamenco\r\n- *               2014 Kenneth Glassey, https:\u002F\u002Fgithub.com\u002FGavvers\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- *\r\n- * Contributor(s):\r\n- *    siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\r\n- *    kim3er, mfo, alnorth, Flamenco\r\n- *\u002F\r\n-\r\n-\u002F** @license\r\n- * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n-\r\n-\u002F** @license\r\n- * MIT license.\r\n- * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\r\n- *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n-\r\n-\u002F** @license\r\n- * jsPDF addImage plugin\r\n- * Copyright (c) 2012 Jason Siefken, https:\u002F\u002Fgithub.com\u002Fsiefkenj\u002F\r\n- *               2013 Chris Dowling, https:\u002F\u002Fgithub.com\u002Fgingerchris\r\n- *               2013 Trinh Ho, https:\u002F\u002Fgithub.com\u002Fineedfat\r\n- *               2013 Edwin Alejandro Perez, https:\u002F\u002Fgithub.com\u002Feaparango\r\n- *               2013 Norah Smith, https:\u002F\u002Fgithub.com\u002Fburnburnrocket\r\n- *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\r\n- *               2014 James Robb, https:\u002F\u002Fgithub.com\u002Fjamesbrobb\r\n- *\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- *\r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- *\r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- *\u002F\r\n-\r\n-\u002F** @license\r\n- jsPDF standard_fonts_metrics plugin\r\n- * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\r\n- * MIT license.\r\n- * Permission is hereby granted, free of charge, to any person obtaining\r\n- * a copy of this software and associated documentation files (the\r\n- * \"Software\"), to deal in the Software without restriction, including\r\n- * without limitation the rights to use, copy, modify, merge, publish,\r\n- * distribute, sublicense, and\u002For sell copies of the Software, and to\r\n- * permit persons to whom the Software is furnished to do so, subject to\r\n- * the following conditions:\r\n- * \r\n- * The above copyright notice and this permission notice shall be\r\n- * included in all copies or substantial portions of the Software.\r\n- * \r\n- * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n- * ====================================================================\r\n- *\u002F\r\n+\u002F*!\n+ * @overview es6-promise - a tiny implementation of Promises\u002FA+.\n+ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n+ * @license   Licensed under MIT license\n+ *            See https:\u002F\u002Fraw.githubusercontent.com\u002Fstefanpenner\u002Fes6-promise\u002Fmaster\u002FLICENSE\n+ * @version   v4.2.8+1e68dce6\n+ *\u002F\n+\n+\u002F*!\n+ * html2canvas 1.0.0 \u003Chttps:\u002F\u002Fhtml2canvas.hertzen.com>\n+ * Copyright (c) 2021 Niklas von Hertzen \u003Chttps:\u002F\u002Fhertzen.com>\n+ * Released under MIT License\n+ *\u002F\n+\n+\u002F*!\n+ * html2pdf.js v0.10.1\n+ * Copyright (c) 2021 Erik Koopmans\n+ * Released under the MIT License.\n+ *\u002F\n+\n+\u002F*! *****************************************************************************\n+    Copyright (c) Microsoft Corporation. All rights reserved.\n+    Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n+    this file except in compliance with the License. You may obtain a copy of the\n+    License at http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n+\n+    THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n+    KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n+    WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n+    MERCHANTABLITY OR NON-INFRINGEMENT.\n+\n+    See the Apache Version 2.0 License for specific language governing permissions\n+    and limitations under the License.\n+    ***************************************************************************** *\u002F\n+\n+\u002F*! *****************************************************************************\n+Copyright (c) Microsoft Corporation. All rights reserved.\n+Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n+this file except in compliance with the License. You may obtain a copy of the\n+License at http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n+\n+THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n+MERCHANTABLITY OR NON-INFRINGEMENT.\n+\n+See the Apache Version 2.0 License for specific language governing permissions\n+and limitations under the License.\n+***************************************************************************** *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fes\u002Farray\u002Fvirtual\u002Fvalues *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Finternals\u002Fentry-virtual *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.concat *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.every *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.fill *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.filter *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.for-each *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.includes *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.index-of *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.iterator *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.map *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.reduce *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.reverse *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.slice *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.array.some *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.function.bind *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.includes *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.starts-with *\u002F\n+\n+\u002F*! ..\u002F..\u002F..\u002Fmodules\u002Fes.string.trim *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Farray\u002Ffrom *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Farray\u002Fis-array *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fdate\u002Fnow *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fbind *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fconcat *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fevery *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ffill *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ffilter *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fincludes *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Findex-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fmap *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Freduce *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Freverse *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fslice *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fsome *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Fstarts-with *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Finstance\u002Ftrim *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fmap *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fcreate *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fdefine-properties *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fdefine-property *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-descriptor *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-descriptors *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-own-property-symbols *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fget-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fkeys *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fobject\u002Fset-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fpromise *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fapply *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fconstruct *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fdelete-property *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fget *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Freflect\u002Fget-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fsymbol *\u002F\n+\n+\u002F*! ..\u002F..\u002Fes\u002Fsymbol\u002Fiterator *\u002F\n+\n+\u002F*! ..\u002F..\u002Finternals\u002Fclassof *\u002F\n+\n+\u002F*! ..\u002F..\u002Finternals\u002Fpath *\u002F\n+\n+\u002F*! ..\u002F..\u002Finternals\u002Fwell-known-symbol-wrapped *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.aggregate-error *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.concat *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.from *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.array.is-array *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.date.now *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.json.to-string-tag *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.map *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.math.to-string-tag *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.create *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.define-properties *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.define-property *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-own-property-descriptor *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-own-property-descriptors *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.get-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.keys *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.set-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.object.to-string *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.all-settled *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.any *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.promise.finally *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.apply *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.construct *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.delete-property *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.get *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.get-prototype-of *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.reflect.to-string-tag *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.string.iterator *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.async-iterator *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.description *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.has-instance *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.is-concat-spreadable *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.iterator *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.match *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.match-all *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.replace *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.search *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.species *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.split *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.to-primitive *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.to-string-tag *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fes.symbol.unscopables *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.aggregate-error *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.all-settled *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.any *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.promise.try *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.async-dispose *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.dispose *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.matcher *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.metadata *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.observable *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.pattern-match *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fesnext.symbol.replace-all *\u002F\n+\n+\u002F*! ..\u002F..\u002Fmodules\u002Fweb.dom-collections.iterator *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fconcat *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fevery *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Ffill *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Ffilter *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Ffor-each *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fincludes *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Findex-of *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fmap *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Freduce *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Freverse *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fslice *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fsome *\u002F\n+\n+\u002F*! ..\u002Farray\u002Fvirtual\u002Fvalues *\u002F\n+\n+\u002F*! ..\u002Fes\u002Fparse-float *\u002F\n+\n+\u002F*! ..\u002Fes\u002Fparse-int *\u002F\n+\n+\u002F*! ..\u002Ffunction\u002Fvirtual\u002Fbind *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fa-function *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fa-possible-prototype *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fadd-to-unscopables *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fan-instance *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fan-object *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-fill *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-for-each *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-from *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-includes *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-iteration *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-method-has-species-support *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-method-is-strict *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-reduce *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-species-constructor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Farray-species-create *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcall-with-safe-iteration-closing *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcheck-correctness-of-iteration *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fclassof *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fclassof-raw *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcollection *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcollection-strong *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcopy-constructor-properties *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcorrect-is-regexp-logic *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcorrect-prototype-getter *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcreate-html *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcreate-iterator-constructor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcreate-non-enumerable-property *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcreate-property *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fcreate-property-descriptor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fdefine-iterator *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fdefine-well-known-symbol *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fdescriptors *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fdocument-create-element *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fdom-iterables *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-is-browser *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-is-ios *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-is-node *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-is-webos-webkit *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-user-agent *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fengine-v8-version *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fenum-bug-keys *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fexport *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Ffails *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Ffreezing *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Ffunction-bind *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Ffunction-bind-context *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fget-built-in *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fget-iterator *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fget-iterator-method *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fglobal *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fhas *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fhidden-keys *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fhost-report-errors *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fhtml *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fie8-dom-define *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Findexed-object *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Finherit-if-required *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Finspect-source *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Finternal-metadata *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Finternal-state *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-array *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-array-iterator-method *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-forced *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-object *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-pure *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-regexp *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fis-symbol *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fiterate *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fiterator-close *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fiterators *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fiterators-core *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fmicrotask *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnative-promise-constructor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnative-symbol *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnative-weak-map *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnew-promise-capability *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnot-a-regexp *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnumber-parse-float *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fnumber-parse-int *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-assign *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-create *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-define-properties *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-define-property *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-get-own-property-descriptor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-get-own-property-names *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-get-own-property-names-external *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-get-own-property-symbols *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-get-prototype-of *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-keys *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-keys-internal *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-property-is-enumerable *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-set-prototype-of *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fobject-to-string *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fordinary-to-primitive *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fown-keys *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fpath *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fperform *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fpromise-resolve *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fredefine *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fredefine-all *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fregexp-flags *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Frequire-object-coercible *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fset-global *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fset-species *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fset-to-string-tag *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fshared *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fshared-key *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fshared-store *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fspecies-constructor *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fstring-html-forced *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fstring-multibyte *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fstring-trim *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fstring-trim-forced *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Ftask *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-absolute-index *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-indexed-object *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-integer *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-length *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-object *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-primitive *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-property-key *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-string *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fto-string-tag-support *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fuid *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fuse-symbol-as-uid *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fwell-known-symbol *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fwell-known-symbol-wrapped *\u002F\n+\n+\u002F*! ..\u002Finternals\u002Fwhitespaces *\u002F\n+\n+\u002F*! ..\u002Fmodules\u002Fes.array.iterator *\u002F\n+\n+\u002F*! ..\u002Fmodules\u002Fes.parse-float *\u002F\n+\n+\u002F*! ..\u002Fmodules\u002Fes.parse-int *\u002F\n+\n+\u002F*! ..\u002Fmodules\u002Fes.string.iterator *\u002F\n+\n+\u002F*! ..\u002Fmodules\u002Fweb.dom-collections.iterator *\u002F\n+\n+\u002F*! ..\u002Fstring\u002Fvirtual\u002Fincludes *\u002F\n+\n+\u002F*! ..\u002Fstring\u002Fvirtual\u002Fstarts-with *\u002F\n+\n+\u002F*! ..\u002Fstring\u002Fvirtual\u002Ftrim *\u002F\n+\n+\u002F*! ..\u002Futils.js *\u002F\n+\n+\u002F*! ..\u002Fworker.js *\u002F\n+\n+\u002F*! .\u002FarrayLikeToArray.js *\u002F\n+\n+\u002F*! .\u002FarrayWithHoles.js *\u002F\n+\n+\u002F*! .\u002FarrayWithoutHoles.js *\u002F\n+\n+\u002F*! .\u002FassertThisInitialized.js *\u002F\n+\n+\u002F*! .\u002Fes.aggregate-error *\u002F\n+\n+\u002F*! .\u002Fes.array.iterator *\u002F\n+\n+\u002F*! .\u002Fes.promise.all-settled.js *\u002F\n+\n+\u002F*! .\u002Fes.promise.any *\u002F\n+\n+\u002F*! .\u002Fexport *\u002F\n+\n+\u002F*! .\u002FgetPrototypeOf.js *\u002F\n+\n+\u002F*! .\u002FiterableToArray.js *\u002F\n+\n+\u002F*! .\u002FiterableToArrayLimit.js *\u002F\n+\n+\u002F*! .\u002FnonIterableRest.js *\u002F\n+\n+\u002F*! .\u002FnonIterableSpread.js *\u002F\n+\n+\u002F*! .\u002Fplugin\u002Fhyperlinks.js *\u002F\n+\n+\u002F*! .\u002Fplugin\u002Fjspdf-plugin.js *\u002F\n+\n+\u002F*! .\u002Fplugin\u002Fpagebreaks.js *\u002F\n+\n+\u002F*! .\u002FsetPrototypeOf.js *\u002F\n+\n+\u002F*! .\u002FsuperPropBase.js *\u002F\n+\n+\u002F*! .\u002FunsupportedIterableToArray.js *\u002F\n+\n+\u002F*! .\u002Futils.js *\u002F\n+\n+\u002F*! .\u002Fworker.js *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FassertThisInitialized *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FasyncToGenerator *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FclassCallCheck *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FcreateClass *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FdefineProperty *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Fget *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FgetPrototypeOf *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Finherits *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FpossibleConstructorReturn *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FslicedToArray *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002FtoConsumableArray *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fhelpers\u002Ftypeof *\u002F\n+\n+\u002F*! @babel\u002Fruntime-corejs3\u002Fregenerator *\u002F\n+\n+\u002F*! @license DOMPurify 2.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com\u002Fcure53\u002FDOMPurify\u002Fblob\u002F2.3.0\u002FLICENSE *\u002F\n+\n+\u002F*! canvg *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Farray\u002Ffrom *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Farray\u002Fis-array *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fget-iterator *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fget-iterator-method *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Finstance\u002Fslice *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fcreate *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fpromise *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Freflect\u002Fget *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fsymbol *\u002F\n+\n+\u002F*! core-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Farray\u002Ffrom *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Farray\u002Fis-array *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fdate\u002Fnow *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fbind *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fconcat *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fevery *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffill *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffilter *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ffor-each *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fincludes *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Findex-of *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fmap *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Freduce *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Freverse *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fslice *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fsome *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fstarts-with *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Ftrim *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Finstance\u002Fvalues *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fmap *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fdefine-property *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fobject\u002Fkeys *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fparse-float *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fparse-int *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fpromise *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fapply *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fconstruct *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fdelete-property *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of *\u002F\n+\n+\u002F*! core-js-pure\u002Fstable\u002Fsymbol *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.array.concat.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.array.iterator.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.array.join.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.array.map.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.array.slice.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.function.name.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.number.constructor.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.object.assign.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.object.keys.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.object.to-string.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.regexp.to-string.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.string.iterator.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.string.link.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.symbol.description.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.symbol.iterator.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fes.symbol.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fweb.dom-collections.for-each.js *\u002F\n+\n+\u002F*! core-js\u002Fmodules\u002Fweb.dom-collections.iterator.js *\u002F\n+\n+\u002F*! dompurify *\u002F\n+\n+\u002F*! es6-promise *\u002F\n+\n+\u002F*! fflate *\u002F\n+\n+\u002F*! html2canvas *\u002F\n+\n+\u002F*! jspdf *\u002F\n+\n+\u002F*! performance-now *\u002F\n+\n+\u002F*! raf *\u002F\n+\n+\u002F*! regenerator-runtime *\u002F\n+\n+\u002F*! rgbcolor *\u002F\n+\n+\u002F*! stackblur-canvas *\u002F\n+\n+\u002F*! svg-pathdata *\u002F\n+\n+\u002F*!**********************!*\\\n+  !*** .\u002Fsrc\u002Findex.js ***!\n+  \\**********************\u002F\n+\n+\u002F*!**********************!*\\\n+  !*** .\u002Fsrc\u002Futils.js ***!\n+  \\**********************\u002F\n+\n+\u002F*!***********************!*\\\n+  !*** .\u002Fsrc\u002Fworker.js ***!\n+  \\***********************\u002F\n+\n+\u002F*!**********************************!*\\\n+  !*** .\u002Fsrc\u002Fplugin\u002Fhyperlinks.js ***!\n+  \\**********************************\u002F\n+\n+\u002F*!**********************************!*\\\n+  !*** .\u002Fsrc\u002Fplugin\u002Fpagebreaks.js ***!\n+  \\**********************************\u002F\n+\n+\u002F*!***********************************!*\\\n+  !*** .\u002Fnode_modules\u002Fraf\u002Findex.js ***!\n+  \\***********************************\u002F\n+\n+\u002F*!************************************!*\\\n+  !*** .\u002Fsrc\u002Fplugin\u002Fjspdf-plugin.js ***!\n+  \\************************************\u002F\n+\n+\u002F*!****************************************!*\\\n+  !*** .\u002Fnode_modules\u002Frgbcolor\u002Findex.js ***!\n+  \\****************************************\u002F\n+\n+\u002F*!********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcanvg\u002Flib\u002Findex.es.js ***!\n+  \\********************************************\u002F\n+\n+\u002F*!********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Ffflate\u002Fesm\u002Fbrowser.js ***!\n+  \\********************************************\u002F\n+\n+\u002F*!***********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhas.js ***!\n+  \\***********************************************\u002F\n+\n+\u002F*!***********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuid.js ***!\n+  \\***********************************************\u002F\n+\n+\u002F*!***********************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fdompurify\u002Fdist\u002Fpurify.js ***!\n+  \\***********************************************\u002F\n+\n+\u002F*!************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhtml.js ***!\n+  \\************************************************\u002F\n+\n+\u002F*!************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fpath.js ***!\n+  \\************************************************\u002F\n+\n+\u002F*!*************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffails.js ***!\n+  \\*************************************************\u002F\n+\n+\u002F*!*************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fjspdf\u002Fdist\u002Fjspdf.es.min.js ***!\n+  \\*************************************************\u002F\n+\n+\u002F*!**************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fdate\u002Fnow.js ***!\n+  \\**************************************************\u002F\n+\n+\u002F*!**************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fexport.js ***!\n+  \\**************************************************\u002F\n+\n+\u002F*!**************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fglobal.js ***!\n+  \\**************************************************\u002F\n+\n+\u002F*!**************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared.js ***!\n+  \\**************************************************\u002F\n+\n+\u002F*!***************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fmap\u002Findex.js ***!\n+  \\***************************************************\u002F\n+\n+\u002F*!***************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-int.js ***!\n+  \\***************************************************\u002F\n+\n+\u002F*!***************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof.js ***!\n+  \\***************************************************\u002F\n+\n+\u002F*!***************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-pure.js ***!\n+  \\***************************************************\u002F\n+\n+\u002F*!***************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.js ***!\n+  \\***************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Ffrom.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhas.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuid.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-array.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fown-keys.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fredefine.js ***!\n+  \\****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fkeys.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fparse-float.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhtml.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpath.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ftask.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.map.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fan-object.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-forced.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-object.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fis-symbol.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-length.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-object.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!*****************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fregenerator-runtime\u002Fruntime.js ***!\n+  \\*****************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fmap.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Findex.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffails.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fdate\u002Fnow.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-function.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-global.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-key.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-integer.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.map.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fes6-promise\u002Fdist\u002Fes6-promise.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fhtml2canvas\u002Fdist\u002Fhtml2canvas.js ***!\n+  \\******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fbind.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffill.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fsome.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ftrim.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fcreate.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fpromise\u002Findex.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fapply.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fexport.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fglobal.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fmap\u002Findex.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-int.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fclassof-raw.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-html.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdescriptors.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fhidden-keys.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-trim.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwhitespaces.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!*******************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.join.js ***!\n+  \\*******************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fis-array.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fevery.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fslice.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-pure.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterate.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fperform.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Ffrom.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fget-built-in.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fregexp-flags.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fshared-store.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-primitive.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.slice.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.keys.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.link.js ***!\n+  \\********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fconcat.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Ffilter.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freduce.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fsymbol\u002Fiterator.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffreezing.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fown-keys.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fkeys.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fparse-float.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdom-iterables.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fenum-bug-keys.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-symbol.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-assign.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-create.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!*********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.concat.js ***!\n+  \\*********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Freverse.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Ffrom.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-object.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-forced.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-object.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-regexp.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fmicrotask.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-length.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-object.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.date.now.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fmap.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fsymbol\u002Findex.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-for-each.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-includes.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fie8-dom-define.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Findexed-object.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finspect-source.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finternal-state.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fiterators-core.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.function.name.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!**********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.assign.js ***!\n+  \\**********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fmap.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fincludes.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Findex-of.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fconstruct.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Freflect\u002Fget.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-function.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-fill.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-from.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-global.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-key.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-integer.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.map.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-int.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fbind.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffill.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fsome.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ftrim.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fpromise\u002Findex.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fapply.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-iteration.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-iterator.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fnative-weak-map.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-property-key.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!***********************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.array.iterator.js ***!\n+  \\***********************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffill.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fsome.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Findex.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fan-instance.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fclassof-raw.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdescriptors.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhidden-keys.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-species.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwhitespaces.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.fill.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.from.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.some.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fis-array.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fevery.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fslice.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-to-string.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-multibyte.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.string.iterator.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.iterator.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fstackblur-canvas\u002Fdist\u002Fstackblur-es.js ***!\n+  \\************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fevery.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fslice.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Ftrim.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fcreate.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fpromise\u002Findex.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-reduce.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-built-in.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnot-a-regexp.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fredefine-all.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fshared-store.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-primitive.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.every.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.slice.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.keys.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.parse-float.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.any.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.trim.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fconcat.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffilter.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freduce.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fvalues.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-user-agent.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fengine-v8-version.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fset-to-string-tag.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-absolute-index.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-indexed-object.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fuse-symbol-as-uid.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.object.to-string.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.regexp.to-string.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fperformance-now\u002Flib\u002Fperformance-now.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!*************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fsvg-pathdata\u002Flib\u002FSVGPathData.module.js ***!\n+  \\*************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fconcat.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffilter.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freduce.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fvalues.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Finstance\u002Fstarts-with.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Farray\u002Fis-array.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Finstance\u002Fslice.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdom-iterables.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-ios.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fentry-virtual.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fenum-bug-keys.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-symbol.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-create.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.concat.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.filter.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reduce.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.split.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Freverse.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fadd-to-unscopables.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!**************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fstring-html-forced.js ***!\n+  \\**************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Freverse.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Ffunction\u002Fvirtual\u002Fbind.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fsymbol\u002Fiterator.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-for-each.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-includes.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-node.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fie8-dom-define.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Findexed-object.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finspect-source.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-state.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterator-close.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fiterators-core.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.reverse.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.function.bind.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.create.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.apply.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.search.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Ffor-each.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fincludes.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Findex-of.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fconstruct.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Finherit-if-required.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.number.constructor.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!***************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fes.symbol.description.js ***!\n+  \\***************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fpromise.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Fget.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Ffor-each.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Fincludes.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Farray\u002Fvirtual\u002Findex-of.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-property.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-iteration.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-iterator.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-weak-map.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fpromise-resolve.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.for-each.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.includes.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.index-of.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.is-array.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.array.iterator.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.replace.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.species.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fa-possible-prototype.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-create.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-keys-internal.js ***!\n+  \\****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-prototype-of.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fset-prototype-of.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fdelete-property.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fincludes.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-int.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-to-string.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-multibyte.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.aggregate-error.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.finally.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.includes.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.iterator.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.iterator.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.any.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.try.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Ffunction-bind-context.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fordinary-to-primitive.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!*****************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fto-string-tag-support.js ***!\n+  \\*****************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fregenerator\u002Findex.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fdefine-properties.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Freflect\u002Fget-prototype-of.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcollection-strong.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-browser.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-user-agent.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-v8-version.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Finternal-metadata.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fset-to-string-tag.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-absolute-index.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-indexed-object.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fuse-symbol-as-uid.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.to-string.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.match-all.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Fvalues.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Finstance\u002Fstarts-with.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-is-strict.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-property.js ***!\n+  \\******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fmap.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Ffrom.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Ftypeof.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fget-iterator-method.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fadd-to-unscopables.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fhost-report-errors.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnumber-parse-float.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fstring-trim-forced.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.construct.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdocument-create-element.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-prototype-of.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!*******************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-set-prototype-of.js ***!\n+  \\*******************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Freflect\u002Fget.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fstring\u002Fvirtual\u002Fstarts-with.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fget-iterator-method.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fspecies-constructor.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.json.to-string-tag.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.math.to-string-tag.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.string.starts-with.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.description.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.unscopables.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.dispose.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.matcher.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Farray\u002Fvirtual\u002Ffor-each.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-property.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcorrect-prototype-getter.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fdefine-well-known-symbol.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-define-properties.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Frequire-object-coercible.js ***!\n+  \\********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002Finherits.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fa-possible-prototype.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-species-create.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-keys-internal.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.promise.all-settled.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.has-instance.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-primitive.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.aggregate-error.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.metadata.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fdelete-property.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-species-constructor.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!*********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fwell-known-symbol-wrapped.js ***!\n+  \\*********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fsymbol.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fcreate.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fdefine-property.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Ffunction-bind-context.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fto-string-tag-support.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.to-string-tag.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fdefine-properties.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Freflect\u002Fget-prototype-of.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-property-descriptor.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.for-each.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!**********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Fmodules\u002Fweb.dom-collections.iterator.js ***!\n+  \\**********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fpromise.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Farray\u002Fis-array.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Finstance\u002Fslice.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-prototype-of.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fset-prototype-of.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-is-strict.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fengine-is-webos-webkit.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnew-promise-capability.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-property.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.to-string-tag.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.async-iterator.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.observable.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcopy-constructor-properties.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!***********************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-iterator-constructor.js ***!\n+  \\***********************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fdate\u002Fnow.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fsymbol\u002Fiterator.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FcreateClass.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-is-regexp-logic.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdocument-create-element.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-prototype-of.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-set-prototype-of.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-property.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.replace-all.js ***!\n+  \\************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-int.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-symbols.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcorrect-prototype-getter.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fdefine-well-known-symbol.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fis-array-iterator-method.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-define-properties.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Frequire-object-coercible.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-prototype-of.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.set-prototype-of.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.delete-property.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.promise.all-settled.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!*************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-property-is-enumerable.js ***!\n+  \\*************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Ffrom.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FslicedToArray.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsuperPropBase.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fwell-known-symbol-wrapped.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.define-properties.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.reflect.get-prototype-of.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.async-dispose.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fesnext.symbol.pattern-match.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!**************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fcreate-non-enumerable-property.js ***!\n+  \\**************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fkeys.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fparse-float.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithHoles.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FclassCallCheck.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FdefineProperty.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FgetPrototypeOf.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FsetPrototypeOf.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-property-descriptor.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fnative-promise-constructor.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fweb.dom-collections.iterator.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!***************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-symbols.js ***!\n+  \\***************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fmap.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fget-iterator-method.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArray.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableRest.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptor.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-iterator-constructor.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Farray-method-has-species-support.js ***!\n+  \\****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fbind.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffill.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fsome.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ftrim.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fapply.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayLikeToArray.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FasyncToGenerator.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fes\u002Fobject\u002Fget-own-property-descriptors.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.symbol.is-concat-spreadable.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!*****************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-symbols.js ***!\n+  \\*****************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Farray\u002Fis-array.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fevery.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fslice.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FarrayWithoutHoles.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FnonIterableSpread.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FtoConsumableArray.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-property-is-enumerable.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-descriptor.js ***!\n+  \\******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fconcat.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffilter.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freduce.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fvalues.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fdefine-property.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcheck-correctness-of-iteration.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcreate-non-enumerable-property.js ***!\n+  \\*******************************************************************************\u002F\n+\n+\u002F*!********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Freverse.js ***!\n+  \\********************************************************************************\u002F\n+\n+\u002F*!********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-prototype-of.js ***!\n+  \\********************************************************************************\u002F\n+\n+\u002F*!********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fset-prototype-of.js ***!\n+  \\********************************************************************************\u002F\n+\n+\u002F*!********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-symbols.js ***!\n+  \\********************************************************************************\u002F\n+\n+\u002F*!********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptor.js ***!\n+  \\********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Ffor-each.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fincludes.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Findex-of.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fconstruct.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FiterableToArrayLimit.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Farray-method-has-species-support.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fcall-with-safe-iteration-closing.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!*********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fstable\u002Fobject\u002Fget-own-property-descriptors.js ***!\n+  \\*********************************************************************************\u002F\n+\n+\u002F*!**********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FassertThisInitialized.js ***!\n+  \\**********************************************************************************\u002F\n+\n+\u002F*!**********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Ffeatures\u002Fobject\u002Fget-own-property-descriptor.js ***!\n+  \\**********************************************************************************\u002F\n+\n+\u002F*!**********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js\u002Finternals\u002Fobject-get-own-property-names-external.js ***!\n+  \\**********************************************************************************\u002F\n+\n+\u002F*!***********************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-descriptor.js ***!\n+  \\***********************************************************************************\u002F\n+\n+\u002F*!************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Finstance\u002Fstarts-with.js ***!\n+  \\************************************************************************************\u002F\n+\n+\u002F*!************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptor.js ***!\n+  \\************************************************************************************\u002F\n+\n+\u002F*!*************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Fmodules\u002Fes.object.get-own-property-descriptors.js ***!\n+  \\*************************************************************************************\u002F\n+\n+\u002F*!**************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-property.js ***!\n+  \\**************************************************************************************\u002F\n+\n+\u002F*!**************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FpossibleConstructorReturn.js ***!\n+  \\**************************************************************************************\u002F\n+\n+\u002F*!***************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fdelete-property.js ***!\n+  \\***************************************************************************************\u002F\n+\n+\u002F*!***************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fhelpers\u002Fesm\u002FunsupportedIterableToArray.js ***!\n+  \\***************************************************************************************\u002F\n+\n+\u002F*!***************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002Fcore-js-pure\u002Finternals\u002Fobject-get-own-property-names-external.js ***!\n+  \\***************************************************************************************\u002F\n+\n+\u002F*!****************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fdefine-properties.js ***!\n+  \\****************************************************************************************\u002F\n+\n+\u002F*!****************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Freflect\u002Fget-prototype-of.js ***!\n+  \\****************************************************************************************\u002F\n+\n+\u002F*!*******************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js\u002Fobject\u002Fget-own-property-descriptor.js ***!\n+  \\*******************************************************************************************\u002F\n+\n+\u002F*!***********************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-symbols.js ***!\n+  \\***********************************************************************************************\u002F\n+\n+\u002F*!**************************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptor.js ***!\n+  \\**************************************************************************************************\u002F\n+\n+\u002F*!***************************************************************************************************!*\\\n+  !*** .\u002Fnode_modules\u002F@babel\u002Fruntime-corejs3\u002Fcore-js-stable\u002Fobject\u002Fget-own-property-descriptors.js ***!\n+  \\***************************************************************************************************\u002F\n+\n+\u002F**\n+ * @license\n+  Copyright (c) 2008, Adobe Systems Incorporated\n+  All rights reserved.\n+\n+  Redistribution and use in source and binary forms, with or without \n+  modification, are permitted provided that the following conditions are\n+  met:\n+\n+  * Redistributions of source code must retain the above copyright notice, \n+    this list of conditions and the following disclaimer.\n+  \n+  * Redistributions in binary form must reproduce the above copyright\n+    notice, this list of conditions and the following disclaimer in the \n+    documentation and\u002For other materials provided with the distribution.\n+  \n+  * Neither the name of Adobe Systems Incorporated nor the names of its \n+    contributors may be used to endorse or promote products derived from \n+    this software without specific prior written permission.\n+\n+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n+  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR \n+  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n+  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n+  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n+  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+*\u002F\n+\n+\u002F**\n+ * @license\n+ *\n+ * Copyright (c) 2014 James Robb, https:\u002F\u002Fgithub.com\u002Fjamesbrobb\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * (c) Dean McNamee \u003Cdean@gmail.com>, 2013.\n+ *\n+ * https:\u002F\u002Fgithub.com\u002Fdeanm\u002Fomggif\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining a copy\n+ * of this software and associated documentation files (the \"Software\"), to\n+ * deal in the Software without restriction, including without limitation the\n+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and\u002For\n+ * sell copies of the Software, and to permit persons to whom the Software is\n+ * furnished to do so, subject to the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be included in\n+ * all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n+ * IN THE SOFTWARE.\n+ *\n+ * omggif is a JavaScript implementation of a GIF 89a encoder and decoder,\n+ * including animation and compression.  It does not rely on any specific\n+ * underlying system, so should run in the browser, Node, or Plask.\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * ====================================================================\n+ * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n+ *               2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n+ *               2013 Lee Driscoll, https:\u002F\u002Fgithub.com\u002Flsdriscoll\n+ *               2014 Juan Pablo Gaviria, https:\u002F\u002Fgithub.com\u002Fjuanpgaviria\n+ *               2014 James Hall, james@parall.ax\n+ *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Copyright (c) 2017 Aras Abbasi\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Copyright (c) 2018 Aras Abbasi\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Copyright (c) 2018 Erik Koopmans\n+ * Released under the MIT License.\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Copyright (c) 2019 Aras Abbasi\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * FPDF is released under a permissive license: there is no usage restriction.\n+ * You may embed it freely in your application (commercial or not), with or\n+ * without modifications.\n+ *\n+ * Reference: http:\u002F\u002Fwww.fpdf.org\u002Fen\u002Fscript\u002Fscript37.php\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * FileSaver.js\n+ * A saveAs() FileSaver implementation.\n+ *\n+ * By Eli Grey, http:\u002F\u002Feligrey.com\n+ *\n+ * License : https:\u002F\u002Fgithub.com\u002Feligrey\u002FFileSaver.js\u002Fblob\u002Fmaster\u002FLICENSE.md (MIT)\n+ * source  : http:\u002F\u002Fpurl.eligrey.com\u002Fgithub\u002FFileSaver.js\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Joseph Myers does not specify a particular license for his work.\n+ *\n+ * Author: Joseph Myers\n+ * Accessed from: http:\u002F\u002Fwww.myersdaily.org\u002Fjoseph\u002Fjavascript\u002Fmd5.js\n+ *\n+ * Modified by: Owen Leong\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ * Author: Owen Leong (@owenl131)\n+ * Date: 15 Oct 2020\n+ * References:\n+ * https:\u002F\u002Fwww.cs.cmu.edu\u002F~dst\u002FAdobe\u002FGallery\u002Fanon21jul01-pdf-encryption.txt\n+ * https:\u002F\u002Fgithub.com\u002Ffoliojs\u002Fpdfkit\u002Fblob\u002Fmaster\u002Flib\u002Fsecurity.js\n+ * http:\u002F\u002Fwww.fpdf.org\u002Fen\u002Fscript\u002Fscript37.php\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * Unicode Bidi Engine based on the work of Alex Shensis (@asthensis)\n+ * MIT License\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * jsPDF fileloading PlugIn\n+ * Copyright (c) 2018 Aras Abbasi (aras.abbasi@gmail.com)\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * jsPDF filters PlugIn\n+ * Copyright (c) 2014 Aras Abbasi\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * @license\n+ * jsPDF virtual FileSystem functionality\n+ *\n+ * Licensed under the MIT License.\n+ * http:\u002F\u002Fopensource.org\u002Flicenses\u002Fmit-license\n+ *\u002F\n+\n+\u002F**\n+ * A class to parse color values\n+ * @author Stoyan Stefanov \u003Csstoo@gmail.com>\n+ * {@link   http:\u002F\u002Fwww.phpied.com\u002Frgb-color-parser-in-javascript\u002F}\n+ * @license Use it if you like it\n+ *\u002F\n+\n+\u002F** ====================================================================\n+ * @license\n+ * jsPDF XMP metadata plugin\n+ * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\n+\n+\u002F** @license\n+   * Copyright (c) 2017 Dominik Homberger\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and\u002For sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+\n+https:\u002F\u002Fwebpjs.appspot.com\n+WebPRiffParser dominikhlbg@gmail.com\n+*\u002F\n+\n+\u002F** @license\n+ *\n+ * jsPDF - PDF Document creation from JavaScript\n+ * Version 2.3.1 Built on 2021-03-08T15:44:11.674Z\n+ *                      CommitID 00000000\n+ *\n+ * Copyright (c) 2010-2020 James Hall \u003Cjames@parall.ax>, https:\u002F\u002Fgithub.com\u002FMrRio\u002FjsPDF\n+ *               2015-2020 yWorks GmbH, http:\u002F\u002Fwww.yworks.com\n+ *               2015-2020 Lukas Holländer \u003Clukas.hollaender@yworks.com>, https:\u002F\u002Fgithub.com\u002FHackbrettXXX\n+ *               2016-2018 Aras Abbasi \u003Caras.abbasi@gmail.com>\n+ *               2010 Aaron Spike, https:\u002F\u002Fgithub.com\u002Facspike\n+ *               2012 Willow Systems Corporation, willow-systems.com\n+ *               2012 Pablo Hess, https:\u002F\u002Fgithub.com\u002Fpablohess\n+ *               2012 Florian Jenett, https:\u002F\u002Fgithub.com\u002Ffjenett\n+ *               2013 Warren Weckesser, https:\u002F\u002Fgithub.com\u002Fwarrenweckesser\n+ *               2013 Youssef Beddad, https:\u002F\u002Fgithub.com\u002Flifof\n+ *               2013 Lee Driscoll, https:\u002F\u002Fgithub.com\u002Flsdriscoll\n+ *               2013 Stefan Slonevskiy, https:\u002F\u002Fgithub.com\u002Fstefslon\n+ *               2013 Jeremy Morel, https:\u002F\u002Fgithub.com\u002Fjmorel\n+ *               2013 Christoph Hartmann, https:\u002F\u002Fgithub.com\u002Fchris-rock\n+ *               2014 Juan Pablo Gaviria, https:\u002F\u002Fgithub.com\u002Fjuanpgaviria\n+ *               2014 James Makes, https:\u002F\u002Fgithub.com\u002Fdollaruw\n+ *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\n+ *               2014 Steven Spungin, https:\u002F\u002Fgithub.com\u002FFlamenco\n+ *               2014 Kenneth Glassey, https:\u002F\u002Fgithub.com\u002FGavvers\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ *\n+ * Contributor(s):\n+ *    siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\n+ *    kim3er, mfo, alnorth, Flamenco\n+ *\u002F\n+\n+\u002F** @license\n+ * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\n+\n+\u002F** @license\n+ * MIT license.\n+ * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n+ *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\n+\n+\u002F** @license\n+ * jsPDF addImage plugin\n+ * Copyright (c) 2012 Jason Siefken, https:\u002F\u002Fgithub.com\u002Fsiefkenj\u002F\n+ *               2013 Chris Dowling, https:\u002F\u002Fgithub.com\u002Fgingerchris\n+ *               2013 Trinh Ho, https:\u002F\u002Fgithub.com\u002Fineedfat\n+ *               2013 Edwin Alejandro Perez, https:\u002F\u002Fgithub.com\u002Feaparango\n+ *               2013 Norah Smith, https:\u002F\u002Fgithub.com\u002Fburnburnrocket\n+ *               2014 Diego Casorran, https:\u002F\u002Fgithub.com\u002Fdiegocr\n+ *               2014 James Robb, https:\u002F\u002Fgithub.com\u002Fjamesbrobb\n+ *\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ *\n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ *\n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ *\u002F\n+\n+\u002F** @license\n+ jsPDF standard_fonts_metrics plugin\n+ * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n+ * MIT license.\n+ * Permission is hereby granted, free of charge, to any person obtaining\n+ * a copy of this software and associated documentation files (the\n+ * \"Software\"), to deal in the Software without restriction, including\n+ * without limitation the rights to use, copy, modify, merge, publish,\n+ * distribute, sublicense, and\u002For sell copies of the Software, and to\n+ * permit persons to whom the Software is furnished to do so, subject to\n+ * the following conditions:\n+ * \n+ * The above copyright notice and this permission notice shall be\n+ * included in all copies or substantial portions of the Software.\n+ * \n+ * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n+ * ====================================================================\n+ *\u002F\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Findex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Findex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Findex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Findex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-import Alert from '.\u002Fjquery-alert';\r\n-import Cookie from '.\u002Fjquery-cookie';\r\n-import scrollTo from '.\u002Fjquery-scrollTo';\r\n-import Timer from '.\u002Fjquery-timer';\r\n-\r\n-export default {\r\n-    Alert,\r\n-    Cookie,\r\n-    scrollTo,\r\n-    Timer\r\n-}\r\n+import Alert from '.\u002Fjquery-alert';\n+import Cookie from '.\u002Fjquery-cookie';\n+import scrollTo from '.\u002Fjquery-scrollTo';\n+import Timer from '.\u002Fjquery-timer';\n+\n+export default {\n+    Alert,\n+    Cookie,\n+    scrollTo,\n+    Timer\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-caret.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-caret.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-caret.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-caret.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,79 +1,79 @@\n-(function($) {\r\n-\t$.fn.caret = function(pos) {\r\n-\t\tvar target = this[0];\r\n-\t\tvar isContentEditable = target.contentEditable === 'true';\r\n-\t\t\u002F\u002Fget\r\n-\t\tif (arguments.length == 0) {\r\n-\t\t\t\u002F\u002FHTML5\r\n-\t\t\tif (window.getSelection) {\r\n-\t\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\t\tif (isContentEditable) {\r\n-\t\t\t\t\ttarget.focus();\r\n-\t\t\t\t\tvar range1 = window.getSelection().getRangeAt(0),\r\n-\t\t\t\t\t\trange2 = range1.cloneRange();\r\n-\t\t\t\t\trange2.selectNodeContents(target);\r\n-\t\t\t\t\trange2.setEnd(range1.endContainer, range1.endOffset);\r\n-\t\t\t\t\treturn range2.toString().length;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002Ftextarea\r\n-\t\t\t\treturn target.selectionStart;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002FIE\u003C9\r\n-\t\t\tif (document.selection) {\r\n-\t\t\t\ttarget.focus();\r\n-\t\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\t\tif (isContentEditable) {\r\n-\t\t\t\t\tvar range1 = document.selection.createRange(),\r\n-\t\t\t\t\t\trange2 = document.body.createTextRange();\r\n-\t\t\t\t\trange2.moveToElementText(target);\r\n-\t\t\t\t\trange2.setEndPoint('EndToEnd', range1);\r\n-\t\t\t\t\treturn range2.text.length;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002Ftextarea\r\n-\t\t\t\tvar pos = 0,\r\n-\t\t\t\t\trange = target.createTextRange(),\r\n-\t\t\t\t\trange2 = document.selection.createRange().duplicate(),\r\n-\t\t\t\t\tbookmark = range2.getBookmark();\r\n-\t\t\t\trange.moveToBookmark(bookmark);\r\n-\t\t\t\twhile (range.moveStart('character', -1) !== 0) pos++;\r\n-\t\t\t\treturn pos;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addition for jsdom support\r\n-\t\t\tif (target.selectionStart)\r\n-\t\t\t\treturn target.selectionStart;\r\n-\t\t\t\u002F\u002Fnot supported\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\t\t\u002F\u002Fset\r\n-\t\tif (pos == -1)\r\n-\t\t\tpos = this[isContentEditable? 'text' : 'val']().length;\r\n-\t\t\u002F\u002FHTML5\r\n-\t\tif (window.getSelection) {\r\n-\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\tif (isContentEditable) {\r\n-\t\t\t\ttarget.focus();\r\n-\t\t\t\twindow.getSelection().collapse(target.firstChild, pos);\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002Ftextarea\r\n-\t\t\telse\r\n-\t\t\t\ttarget.setSelectionRange(pos, pos);\r\n-\t\t}\r\n-\t\t\u002F\u002FIE\u003C9\r\n-\t\telse if (document.body.createTextRange) {\r\n-\t\t\tif (isContentEditable) {\r\n-\t\t\t\tvar range = document.body.createTextRange();\r\n-\t\t\t\trange.moveToElementText(target);\r\n-\t\t\t\trange.moveStart('character', pos);\r\n-\t\t\t\trange.collapse(true);\r\n-\t\t\t\trange.select();\r\n-\t\t\t} else {\r\n-\t\t\t\tvar range = target.createTextRange();\r\n-\t\t\t\trange.move('character', pos);\r\n-\t\t\t\trange.select();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif (!isContentEditable)\r\n-\t\t\ttarget.focus();\r\n-\t\treturn this;\r\n-\t}\r\n+(function($) {\n+\t$.fn.caret = function(pos) {\n+\t\tvar target = this[0];\n+\t\tvar isContentEditable = target.contentEditable === 'true';\n+\t\t\u002F\u002Fget\n+\t\tif (arguments.length == 0) {\n+\t\t\t\u002F\u002FHTML5\n+\t\t\tif (window.getSelection) {\n+\t\t\t\t\u002F\u002Fcontenteditable\n+\t\t\t\tif (isContentEditable) {\n+\t\t\t\t\ttarget.focus();\n+\t\t\t\t\tvar range1 = window.getSelection().getRangeAt(0),\n+\t\t\t\t\t\trange2 = range1.cloneRange();\n+\t\t\t\t\trange2.selectNodeContents(target);\n+\t\t\t\t\trange2.setEnd(range1.endContainer, range1.endOffset);\n+\t\t\t\t\treturn range2.toString().length;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002Ftextarea\n+\t\t\t\treturn target.selectionStart;\n+\t\t\t}\n+\t\t\t\u002F\u002FIE\u003C9\n+\t\t\tif (document.selection) {\n+\t\t\t\ttarget.focus();\n+\t\t\t\t\u002F\u002Fcontenteditable\n+\t\t\t\tif (isContentEditable) {\n+\t\t\t\t\tvar range1 = document.selection.createRange(),\n+\t\t\t\t\t\trange2 = document.body.createTextRange();\n+\t\t\t\t\trange2.moveToElementText(target);\n+\t\t\t\t\trange2.setEndPoint('EndToEnd', range1);\n+\t\t\t\t\treturn range2.text.length;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002Ftextarea\n+\t\t\t\tvar pos = 0,\n+\t\t\t\t\trange = target.createTextRange(),\n+\t\t\t\t\trange2 = document.selection.createRange().duplicate(),\n+\t\t\t\t\tbookmark = range2.getBookmark();\n+\t\t\t\trange.moveToBookmark(bookmark);\n+\t\t\t\twhile (range.moveStart('character', -1) !== 0) pos++;\n+\t\t\t\treturn pos;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addition for jsdom support\n+\t\t\tif (target.selectionStart)\n+\t\t\t\treturn target.selectionStart;\n+\t\t\t\u002F\u002Fnot supported\n+\t\t\treturn 0;\n+\t\t}\n+\t\t\u002F\u002Fset\n+\t\tif (pos == -1)\n+\t\t\tpos = this[isContentEditable? 'text' : 'val']().length;\n+\t\t\u002F\u002FHTML5\n+\t\tif (window.getSelection) {\n+\t\t\t\u002F\u002Fcontenteditable\n+\t\t\tif (isContentEditable) {\n+\t\t\t\ttarget.focus();\n+\t\t\t\twindow.getSelection().collapse(target.firstChild, pos);\n+\t\t\t}\n+\t\t\t\u002F\u002Ftextarea\n+\t\t\telse\n+\t\t\t\ttarget.setSelectionRange(pos, pos);\n+\t\t}\n+\t\t\u002F\u002FIE\u003C9\n+\t\telse if (document.body.createTextRange) {\n+\t\t\tif (isContentEditable) {\n+\t\t\t\tvar range = document.body.createTextRange();\n+\t\t\t\trange.moveToElementText(target);\n+\t\t\t\trange.moveStart('character', pos);\n+\t\t\t\trange.collapse(true);\n+\t\t\t\trange.select();\n+\t\t\t} else {\n+\t\t\t\tvar range = target.createTextRange();\n+\t\t\t\trange.move('character', pos);\n+\t\t\t\trange.select();\n+\t\t\t}\n+\t\t}\n+\t\tif (!isContentEditable)\n+\t\t\ttarget.focus();\n+\t\treturn this;\n+\t}\n })(jQuery);\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.caret.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.caret.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.caret.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.caret.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,79 +1,79 @@\n-(function($) {\r\n-\t$.fn.caret = function(pos) {\r\n-\t\tvar target = this[0];\r\n-\t\tvar isContentEditable = target.contentEditable === 'true';\r\n-\t\t\u002F\u002Fget\r\n-\t\tif (arguments.length == 0) {\r\n-\t\t\t\u002F\u002FHTML5\r\n-\t\t\tif (window.getSelection) {\r\n-\t\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\t\tif (isContentEditable) {\r\n-\t\t\t\t\ttarget.focus();\r\n-\t\t\t\t\tvar range1 = window.getSelection().getRangeAt(0),\r\n-\t\t\t\t\t\trange2 = range1.cloneRange();\r\n-\t\t\t\t\trange2.selectNodeContents(target);\r\n-\t\t\t\t\trange2.setEnd(range1.endContainer, range1.endOffset);\r\n-\t\t\t\t\treturn range2.toString().length;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002Ftextarea\r\n-\t\t\t\treturn target.selectionStart;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002FIE\u003C9\r\n-\t\t\tif (document.selection) {\r\n-\t\t\t\ttarget.focus();\r\n-\t\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\t\tif (isContentEditable) {\r\n-\t\t\t\t\tvar range1 = document.selection.createRange(),\r\n-\t\t\t\t\t\trange2 = document.body.createTextRange();\r\n-\t\t\t\t\trange2.moveToElementText(target);\r\n-\t\t\t\t\trange2.setEndPoint('EndToEnd', range1);\r\n-\t\t\t\t\treturn range2.text.length;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002Ftextarea\r\n-\t\t\t\tvar pos = 0,\r\n-\t\t\t\t\trange = target.createTextRange(),\r\n-\t\t\t\t\trange2 = document.selection.createRange().duplicate(),\r\n-\t\t\t\t\tbookmark = range2.getBookmark();\r\n-\t\t\t\trange.moveToBookmark(bookmark);\r\n-\t\t\t\twhile (range.moveStart('character', -1) !== 0) pos++;\r\n-\t\t\t\treturn pos;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addition for jsdom support\r\n-\t\t\tif (target.selectionStart)\r\n-\t\t\t\treturn target.selectionStart;\r\n-\t\t\t\u002F\u002Fnot supported\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\t\t\u002F\u002Fset\r\n-\t\tif (pos == -1)\r\n-\t\t\tpos = this[isContentEditable? 'text' : 'val']().length;\r\n-\t\t\u002F\u002FHTML5\r\n-\t\tif (window.getSelection) {\r\n-\t\t\t\u002F\u002Fcontenteditable\r\n-\t\t\tif (isContentEditable) {\r\n-\t\t\t\ttarget.focus();\r\n-\t\t\t\twindow.getSelection().collapse(target.firstChild, pos);\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002Ftextarea\r\n-\t\t\telse\r\n-\t\t\t\ttarget.setSelectionRange(pos, pos);\r\n-\t\t}\r\n-\t\t\u002F\u002FIE\u003C9\r\n-\t\telse if (document.body.createTextRange) {\r\n-\t\t\tif (isContentEditable) {\r\n-\t\t\t\tvar range = document.body.createTextRange();\r\n-\t\t\t\trange.moveToElementText(target);\r\n-\t\t\t\trange.moveStart('character', pos);\r\n-\t\t\t\trange.collapse(true);\r\n-\t\t\t\trange.select();\r\n-\t\t\t} else {\r\n-\t\t\t\tvar range = target.createTextRange();\r\n-\t\t\t\trange.move('character', pos);\r\n-\t\t\t\trange.select();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif (!isContentEditable)\r\n-\t\t\ttarget.focus();\r\n-\t\treturn this;\r\n-\t}\r\n+(function($) {\n+\t$.fn.caret = function(pos) {\n+\t\tvar target = this[0];\n+\t\tvar isContentEditable = target.contentEditable === 'true';\n+\t\t\u002F\u002Fget\n+\t\tif (arguments.length == 0) {\n+\t\t\t\u002F\u002FHTML5\n+\t\t\tif (window.getSelection) {\n+\t\t\t\t\u002F\u002Fcontenteditable\n+\t\t\t\tif (isContentEditable) {\n+\t\t\t\t\ttarget.focus();\n+\t\t\t\t\tvar range1 = window.getSelection().getRangeAt(0),\n+\t\t\t\t\t\trange2 = range1.cloneRange();\n+\t\t\t\t\trange2.selectNodeContents(target);\n+\t\t\t\t\trange2.setEnd(range1.endContainer, range1.endOffset);\n+\t\t\t\t\treturn range2.toString().length;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002Ftextarea\n+\t\t\t\treturn target.selectionStart;\n+\t\t\t}\n+\t\t\t\u002F\u002FIE\u003C9\n+\t\t\tif (document.selection) {\n+\t\t\t\ttarget.focus();\n+\t\t\t\t\u002F\u002Fcontenteditable\n+\t\t\t\tif (isContentEditable) {\n+\t\t\t\t\tvar range1 = document.selection.createRange(),\n+\t\t\t\t\t\trange2 = document.body.createTextRange();\n+\t\t\t\t\trange2.moveToElementText(target);\n+\t\t\t\t\trange2.setEndPoint('EndToEnd', range1);\n+\t\t\t\t\treturn range2.text.length;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002Ftextarea\n+\t\t\t\tvar pos = 0,\n+\t\t\t\t\trange = target.createTextRange(),\n+\t\t\t\t\trange2 = document.selection.createRange().duplicate(),\n+\t\t\t\t\tbookmark = range2.getBookmark();\n+\t\t\t\trange.moveToBookmark(bookmark);\n+\t\t\t\twhile (range.moveStart('character', -1) !== 0) pos++;\n+\t\t\t\treturn pos;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addition for jsdom support\n+\t\t\tif (target.selectionStart)\n+\t\t\t\treturn target.selectionStart;\n+\t\t\t\u002F\u002Fnot supported\n+\t\t\treturn 0;\n+\t\t}\n+\t\t\u002F\u002Fset\n+\t\tif (pos == -1)\n+\t\t\tpos = this[isContentEditable? 'text' : 'val']().length;\n+\t\t\u002F\u002FHTML5\n+\t\tif (window.getSelection) {\n+\t\t\t\u002F\u002Fcontenteditable\n+\t\t\tif (isContentEditable) {\n+\t\t\t\ttarget.focus();\n+\t\t\t\twindow.getSelection().collapse(target.firstChild, pos);\n+\t\t\t}\n+\t\t\t\u002F\u002Ftextarea\n+\t\t\telse\n+\t\t\t\ttarget.setSelectionRange(pos, pos);\n+\t\t}\n+\t\t\u002F\u002FIE\u003C9\n+\t\telse if (document.body.createTextRange) {\n+\t\t\tif (isContentEditable) {\n+\t\t\t\tvar range = document.body.createTextRange();\n+\t\t\t\trange.moveToElementText(target);\n+\t\t\t\trange.moveStart('character', pos);\n+\t\t\t\trange.collapse(true);\n+\t\t\t\trange.select();\n+\t\t\t} else {\n+\t\t\t\tvar range = target.createTextRange();\n+\t\t\t\trange.move('character', pos);\n+\t\t\t\trange.select();\n+\t\t\t}\n+\t\t}\n+\t\tif (!isContentEditable)\n+\t\t\ttarget.focus();\n+\t\treturn this;\n+\t}\n })(jQuery);\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-cookie.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-cookie.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-cookie.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-cookie.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-\u002F\u002F jQuery cookie plugin\r\n-(function (factory) {\r\n-    if (typeof define === 'function' && define.amd) {\r\n-        define(['jquery'], factory);\r\n-    } else if (typeof exports === 'object') {\r\n-        module.exports = factory(require('jquery'));\r\n-    } else {\r\n-        factory(jQuery);\r\n-    }\r\n-}(function ($) {\r\n-    var pluses = \u002F\\+\u002Fg;\r\n-    function encode(s) {\r\n-        return config.raw ? s : encodeURIComponent(s);\r\n-    }\r\n-    function decode(s) {\r\n-        return config.raw ? s : decodeURIComponent(s);\r\n-    }\r\n-    function stringifyCookieValue(value) {\r\n-        return encode(config.json ? JSON.stringify(value) : String(value));\r\n-    }\r\n-    function parseCookieValue(s) {\r\n-        if (s.indexOf('\"') === 0) {\r\n-            s = s.slice(1, -1).replace(\u002F\\\\\"\u002Fg, '\"').replace(\u002F\\\\\\\\\u002Fg, '\\\\');\r\n-        }\r\n-        try {\r\n-            s = decodeURIComponent(s.replace(pluses, ' '));\r\n-            return config.json ? JSON.parse(s) : s;\r\n-        } catch (e) {\r\n-        }\r\n-    }\r\n-    function read(s, converter) {\r\n-        var value = config.raw ? s : parseCookieValue(s);\r\n-        return $.isFunction(converter) ? converter(value) : value;\r\n-    }\r\n-    var config = $.cookie = function (key, value, options) {\r\n-        if (arguments.length > 1 && !$.isFunction(value)) {\r\n-            options = $.extend({}, config.defaults, options);\r\n-            if (typeof options.expires === 'number') {\r\n-                var days = options.expires, t = options.expires = new Date();\r\n-                t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\r\n-            }\r\n-            return (document.cookie = [\r\n-                encode(key), '=', stringifyCookieValue(value),\r\n-                options.expires ? '; expires=' + options.expires.toUTCString() : '',\r\n-                options.path ? '; path=' + options.path : '',\r\n-                options.domain ? '; domain=' + options.domain : '',\r\n-                options.secure ? '; secure' : ''\r\n-            ].join(''));\r\n-        }\r\n-        var result = key ? undefined : {},\r\n-            cookies = document.cookie ? document.cookie.split('; ') : [],\r\n-            i = 0,\r\n-            l = cookies.length;\r\n-        for (; i \u003C l; i++) {\r\n-            var parts = cookies[i].split('='),\r\n-                name = decode(parts.shift()),\r\n-                cookie = parts.join('=');\r\n-            if (key === name) {\r\n-                result = read(cookie, value);\r\n-                break;\r\n-            }\r\n-            if (!key && (cookie = read(cookie)) !== undefined) {\r\n-                result[name] = cookie;\r\n-            }\r\n-        }\r\n-        return result;\r\n-    };\r\n-    config.defaults = {};\r\n-    $.removeCookie = function (key, options) {\r\n-        $.cookie(key, '', $.extend({}, options, {expires: -1}));\r\n-        return !$.cookie(key);\r\n-    };\r\n+\u002F\u002F jQuery cookie plugin\n+(function (factory) {\n+    if (typeof define === 'function' && define.amd) {\n+        define(['jquery'], factory);\n+    } else if (typeof exports === 'object') {\n+        module.exports = factory(require('jquery'));\n+    } else {\n+        factory(jQuery);\n+    }\n+}(function ($) {\n+    var pluses = \u002F\\+\u002Fg;\n+    function encode(s) {\n+        return config.raw ? s : encodeURIComponent(s);\n+    }\n+    function decode(s) {\n+        return config.raw ? s : decodeURIComponent(s);\n+    }\n+    function stringifyCookieValue(value) {\n+        return encode(config.json ? JSON.stringify(value) : String(value));\n+    }\n+    function parseCookieValue(s) {\n+        if (s.indexOf('\"') === 0) {\n+            s = s.slice(1, -1).replace(\u002F\\\\\"\u002Fg, '\"').replace(\u002F\\\\\\\\\u002Fg, '\\\\');\n+        }\n+        try {\n+            s = decodeURIComponent(s.replace(pluses, ' '));\n+            return config.json ? JSON.parse(s) : s;\n+        } catch (e) {\n+        }\n+    }\n+    function read(s, converter) {\n+        var value = config.raw ? s : parseCookieValue(s);\n+        return $.isFunction(converter) ? converter(value) : value;\n+    }\n+    var config = $.cookie = function (key, value, options) {\n+        if (arguments.length > 1 && !$.isFunction(value)) {\n+            options = $.extend({}, config.defaults, options);\n+            if (typeof options.expires === 'number') {\n+                var days = options.expires, t = options.expires = new Date();\n+                t.setMilliseconds(t.getMilliseconds() + days * 864e+5);\n+            }\n+            return (document.cookie = [\n+                encode(key), '=', stringifyCookieValue(value),\n+                options.expires ? '; expires=' + options.expires.toUTCString() : '',\n+                options.path ? '; path=' + options.path : '',\n+                options.domain ? '; domain=' + options.domain : '',\n+                options.secure ? '; secure' : ''\n+            ].join(''));\n+        }\n+        var result = key ? undefined : {},\n+            cookies = document.cookie ? document.cookie.split('; ') : [],\n+            i = 0,\n+            l = cookies.length;\n+        for (; i \u003C l; i++) {\n+            var parts = cookies[i].split('='),\n+                name = decode(parts.shift()),\n+                cookie = parts.join('=');\n+            if (key === name) {\n+                result = read(cookie, value);\n+                break;\n+            }\n+            if (!key && (cookie = read(cookie)) !== undefined) {\n+                result[name] = cookie;\n+            }\n+        }\n+        return result;\n+    };\n+    config.defaults = {};\n+    $.removeCookie = function (key, options) {\n+        $.cookie(key, '', $.extend({}, options, {expires: -1}));\n+        return !$.cookie(key);\n+    };\n }));\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.scrollbar.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.scrollbar.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.scrollbar.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery.scrollbar.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,780 +1,780 @@\n-\u002F**\r\n- * jQuery CSS Customizable Scrollbar\r\n- *\r\n- * Copyright 2015, Yuriy Khabarov\r\n- * Dual licensed under the MIT or GPL Version 2 licenses.\r\n- *\r\n- * If you found bug, please contact me via email \u003C13real008@gmail.com>\r\n- *\r\n- * @author Yuriy Khabarov aka Gromo\r\n- * @version 0.2.10\r\n- * @url https:\u002F\u002Fgithub.com\u002Fgromo\u002Fjquery.scrollbar\u002F\r\n- *\r\n- *\u002F\r\n-;\r\n-(function (root, factory) {\r\n-    if (typeof define === 'function' && define.amd) {\r\n-        define(['jquery'], factory);\r\n-    } else {\r\n-        factory(root.jQuery);\r\n-    }\r\n-}(this, function ($) {\r\n-    'use strict';\r\n-    \u002F\u002F init flags & variables\r\n-    var debug = false;\r\n-\r\n-    var browser = {\r\n-        data: {\r\n-            index: 0,\r\n-            name: 'scrollbar'\r\n-        },\r\n-        macosx: \u002Fmac\u002Fi.test(navigator.platform),\r\n-        mobile: \u002Fandroid|webos|iphone|ipad|ipod|blackberry\u002Fi.test(navigator.userAgent),\r\n-        overlay: null,\r\n-        scroll: null,\r\n-        scrolls: [],\r\n-        webkit: \u002Fwebkit\u002Fi.test(navigator.userAgent) && !\u002Fedge\\\u002F\\d+\u002Fi.test(navigator.userAgent)\r\n-    };\r\n-\r\n-    browser.scrolls.add = function (instance) {\r\n-        this.remove(instance).push(instance);\r\n-    };\r\n-    browser.scrolls.remove = function (instance) {\r\n-        while ($.inArray(instance, this) >= 0) {\r\n-            this.splice($.inArray(instance, this), 1);\r\n-        }\r\n-        return this;\r\n-    };\r\n-\r\n-    var defaults = {\r\n-        \"autoScrollSize\": true,     \u002F\u002F automatically calculate scrollsize\r\n-        \"autoUpdate\": true,         \u002F\u002F update scrollbar if content\u002Fcontainer size changed\r\n-        \"debug\": false,             \u002F\u002F debug mode\r\n-        \"disableBodyScroll\": false, \u002F\u002F disable body scroll if mouse over container\r\n-        \"duration\": 200,            \u002F\u002F scroll animate duration in ms\r\n-        \"ignoreMobile\": false,      \u002F\u002F ignore mobile devices\r\n-        \"ignoreOverlay\": false,     \u002F\u002F ignore browsers with overlay scrollbars (mobile, MacOS)\r\n-        \"scrollStep\": 30,           \u002F\u002F scroll step for scrollbar arrows\r\n-        \"showArrows\": false,        \u002F\u002F add class to show arrows\r\n-        \"stepScrolling\": true,      \u002F\u002F when scrolling to scrollbar mousedown position\r\n-\r\n-        \"scrollx\": null,            \u002F\u002F horizontal scroll element\r\n-        \"scrolly\": null,            \u002F\u002F vertical scroll element\r\n-\r\n-        \"onDestroy\": null,          \u002F\u002F callback function on destroy,\r\n-        \"onInit\": null,             \u002F\u002F callback function on first initialization\r\n-        \"onScroll\": null,           \u002F\u002F callback function on content scrolling\r\n-        \"onUpdate\": null            \u002F\u002F callback function on init\u002Fresize (before scrollbar size calculation)\r\n-    };\r\n-\r\n-\r\n-    var BaseScrollbar = function (container) {\r\n-\r\n-        if (!browser.scroll) {\r\n-            browser.overlay = isScrollOverlaysContent();\r\n-            browser.scroll = getBrowserScrollSize();\r\n-            updateScrollbars();\r\n-\r\n-            $(window).resize(function () {\r\n-                var forceUpdate = false;\r\n-                if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {\r\n-                    var scroll = getBrowserScrollSize();\r\n-                    if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {\r\n-                        browser.scroll = scroll;\r\n-                        forceUpdate = true; \u002F\u002F handle page zoom\r\n-                    }\r\n-                }\r\n-                updateScrollbars(forceUpdate);\r\n-            });\r\n-        }\r\n-\r\n-        this.container = container;\r\n-        this.namespace = '.scrollbar_' + browser.data.index++;\r\n-        this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});\r\n-        this.scrollTo = null;\r\n-        this.scrollx = {};\r\n-        this.scrolly = {};\r\n-\r\n-        container.data(browser.data.name, this);\r\n-        browser.scrolls.add(this);\r\n-    };\r\n-\r\n-    BaseScrollbar.prototype = {\r\n-\r\n-        destroy: function () {\r\n-\r\n-            if (!this.wrapper) {\r\n-                return;\r\n-            }\r\n-\r\n-            this.container.removeData(browser.data.name);\r\n-            browser.scrolls.remove(this);\r\n-\r\n-            \u002F\u002F init variables\r\n-            var scrollLeft = this.container.scrollLeft();\r\n-            var scrollTop = this.container.scrollTop();\r\n-\r\n-            this.container.insertBefore(this.wrapper).css({\r\n-                \"height\": \"\",\r\n-                \"margin\": \"\",\r\n-                \"max-height\": \"\"\r\n-            })\r\n-                .removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')\r\n-                .off(this.namespace)\r\n-                .scrollLeft(scrollLeft)\r\n-                .scrollTop(scrollTop);\r\n-\r\n-            this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);\r\n-            this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);\r\n-\r\n-            this.wrapper.remove();\r\n-\r\n-            $(document).add('body').off(this.namespace);\r\n-\r\n-            if ($.isFunction(this.options.onDestroy)){\r\n-                this.options.onDestroy.apply(this, [this.container]);\r\n-            }\r\n-        },\r\n-        init: function (options) {\r\n-            \u002F\u002F init variables\r\n-            var S = this,\r\n-                c = this.container,\r\n-                cw = this.containerWrapper || c,\r\n-                namespace = this.namespace,\r\n-                o = $.extend(this.options, options || {}),\r\n-                s = {x: this.scrollx, y: this.scrolly},\r\n-                w = this.wrapper;\r\n-\r\n-            var initScroll = {\r\n-                \"scrollLeft\": c.scrollLeft(),\r\n-                \"scrollTop\": c.scrollTop()\r\n-            };\r\n-\r\n-            \u002F\u002F do not init if in ignorable browser\r\n-            if ((browser.mobile && o.ignoreMobile)\r\n-                || (browser.overlay && o.ignoreOverlay)\r\n-                || (browser.macosx && !browser.webkit) \u002F\u002F still required to ignore nonWebKit browsers on Mac\r\n-                ) {\r\n-                \u002F\u002Freturn false;\r\n-            }\r\n-\r\n-            \u002F\u002F init scroll container\r\n-            if (!w) {\r\n-                this.wrapper = w = $('\u003Cdiv>').addClass('scroll-wrapper').addClass(c.attr('class'))\r\n-                    .css('position', c.css('position') == 'absolute' ? 'absolute' : 'relative')\r\n-                    .insertBefore(c).append(c);\r\n-\r\n-                if (c.is('textarea')) {\r\n-                    this.containerWrapper = cw = $('\u003Cdiv>').insertBefore(c).append(c);\r\n-                    w.addClass('scroll-textarea');\r\n-                }\r\n-\r\n-                cw.addClass('scroll-content').css({\r\n-                    \"height\": \"auto\",\r\n-                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\r\n-                    \"margin-right\": browser.scroll.width * -1 + 'px',\r\n-                    \"max-height\": \"\"\r\n-                });\r\n-\r\n-                c.on('scroll' + namespace, function (event) {\r\n-                    if ($.isFunction(o.onScroll)) {\r\n-                        o.onScroll.call(S, {\r\n-                            \"maxScroll\": s.y.maxScrollOffset,\r\n-                            \"scroll\": c.scrollTop(),\r\n-                            \"size\": s.y.size,\r\n-                            \"visible\": s.y.visible\r\n-                        }, {\r\n-                            \"maxScroll\": s.x.maxScrollOffset,\r\n-                            \"scroll\": c.scrollLeft(),\r\n-                            \"size\": s.x.size,\r\n-                            \"visible\": s.x.visible\r\n-                        });\r\n-                    }\r\n-                    s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');\r\n-                    s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');\r\n-                });\r\n-\r\n-                \u002F* prevent native scrollbars to be visible on #anchor click *\u002F\r\n-                w.on('scroll' + namespace, function () {\r\n-                    w.scrollTop(0).scrollLeft(0);\r\n-                });\r\n-\r\n-                if (o.disableBodyScroll) {\r\n-                    var handleMouseScroll = function (event) {\r\n-                        isVerticalScroll(event) ?\r\n-                            s.y.isVisible && s.y.mousewheel(event) :\r\n-                            s.x.isVisible && s.x.mousewheel(event);\r\n-                    };\r\n-                    w.on('MozMousePixelScroll' + namespace, handleMouseScroll);\r\n-                    w.on('mousewheel' + namespace, handleMouseScroll);\r\n-\r\n-                    if (browser.mobile) {\r\n-                        w.on('touchstart' + namespace, function (event) {\r\n-                            var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;\r\n-                            var originalTouch = {\r\n-                                \"pageX\": touch.pageX,\r\n-                                \"pageY\": touch.pageY\r\n-                            };\r\n-                            var originalScroll = {\r\n-                                \"left\": c.scrollLeft(),\r\n-                                \"top\": c.scrollTop()\r\n-                            };\r\n-                            $(document).on('touchmove' + namespace, function (event) {\r\n-                                var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;\r\n-                                c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);\r\n-                                c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);\r\n-                                event.preventDefault();\r\n-                            });\r\n-                            $(document).on('touchend' + namespace, function () {\r\n-                                $(document).off(namespace);\r\n-                            });\r\n-                        });\r\n-                    }\r\n-                }\r\n-                if ($.isFunction(o.onInit)){\r\n-                    o.onInit.apply(this, [c]);\r\n-                }\r\n-\r\n-            } else {\r\n-                cw.css({\r\n-                    \"height\": \"auto\",\r\n-                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\r\n-                    \"margin-right\": browser.scroll.width * -1 + 'px',\r\n-                    \"max-height\": \"\"\r\n-                });\r\n-            }\r\n-\r\n-            \u002F\u002F init scrollbars & recalculate sizes\r\n-            $.each(s, function (d, scrollx) {\r\n-\r\n-                var scrollCallback = null;\r\n-                var scrollForward = 1;\r\n-                var scrollOffset = (d === 'x') ? 'scrollLeft' : 'scrollTop';\r\n-                var scrollStep = o.scrollStep;\r\n-                var scrollTo = function () {\r\n-                    var currentOffset = c[scrollOffset]();\r\n-                    c[scrollOffset](currentOffset + scrollStep);\r\n-                    if (scrollForward == 1 && (currentOffset + scrollStep) >= scrollToValue)\r\n-                        currentOffset = c[scrollOffset]();\r\n-                    if (scrollForward == -1 && (currentOffset + scrollStep) \u003C= scrollToValue)\r\n-                        currentOffset = c[scrollOffset]();\r\n-                    if (c[scrollOffset]() == currentOffset && scrollCallback) {\r\n-                        scrollCallback();\r\n-                    }\r\n-                }\r\n-                var scrollToValue = 0;\r\n-\r\n-                if (!scrollx.scroll) {\r\n-\r\n-                    scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d);\r\n-\r\n-                    if(o.showArrows){\r\n-                        scrollx.scroll.addClass('scroll-element_arrows_visible');\r\n-                    }\r\n-\r\n-                    scrollx.mousewheel = function (event) {\r\n-\r\n-                        if (!scrollx.isVisible || (d === 'x' && isVerticalScroll(event))) {\r\n-                            return true;\r\n-                        }\r\n-                        if (d === 'y' && !isVerticalScroll(event)) {\r\n-                            s.x.mousewheel(event);\r\n-                            return true;\r\n-                        }\r\n-\r\n-                        var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;\r\n-                        var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;\r\n-\r\n-                        if ((delta > 0 && scrollToValue \u003C maxScrollValue) || (delta \u003C 0 && scrollToValue > 0)) {\r\n-                            scrollToValue = scrollToValue + delta;\r\n-                            if (scrollToValue \u003C 0)\r\n-                                scrollToValue = 0;\r\n-                            if (scrollToValue > maxScrollValue)\r\n-                                scrollToValue = maxScrollValue;\r\n-\r\n-                            S.scrollTo = S.scrollTo || {};\r\n-                            S.scrollTo[scrollOffset] = scrollToValue;\r\n-                            setTimeout(function () {\r\n-                                if (S.scrollTo) {\r\n-                                    c.stop().animate(S.scrollTo, 240, 'linear', function () {\r\n-                                        scrollToValue = c[scrollOffset]();\r\n-                                    });\r\n-                                    S.scrollTo = null;\r\n-                                }\r\n-                            }, 1);\r\n-                        }\r\n-\r\n-                        event.preventDefault();\r\n-                        return false;\r\n-                    };\r\n-\r\n-                    scrollx.scroll\r\n-                        .on('MozMousePixelScroll' + namespace, scrollx.mousewheel)\r\n-                        .on('mousewheel' + namespace, scrollx.mousewheel)\r\n-                        .on('mouseenter' + namespace, function () {\r\n-                            scrollToValue = c[scrollOffset]();\r\n-                        });\r\n-\r\n-                    \u002F\u002F handle arrows & scroll inner mousedown event\r\n-                    scrollx.scroll.find('.scroll-arrow, .scroll-element_track')\r\n-                        .on('mousedown' + namespace, function (event) {\r\n-\r\n-                            if (event.which != 1) \u002F\u002F lmb\r\n-                                return true;\r\n-\r\n-                            scrollForward = 1;\r\n-\r\n-                            var data = {\r\n-                                \"eventOffset\": event[(d === 'x') ? 'pageX' : 'pageY'],\r\n-                                \"maxScrollValue\": scrollx.size - scrollx.visible - scrollx.offset,\r\n-                                \"scrollbarOffset\": scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],\r\n-                                \"scrollbarSize\": scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()\r\n-                            };\r\n-                            var timeout = 0, timer = 0;\r\n-\r\n-                            if ($(this).hasClass('scroll-arrow')) {\r\n-                                scrollForward = $(this).hasClass(\"scroll-arrow_more\") ? 1 : -1;\r\n-                                scrollStep = o.scrollStep * scrollForward;\r\n-                                scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;\r\n-                            } else {\r\n-                                scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1\r\n-                                    : (data.eventOffset \u003C data.scrollbarOffset ? -1 : 0));\r\n-                                scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;\r\n-                                scrollToValue = (data.eventOffset - data.scrollbarOffset -\r\n-                                    (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)\r\n-                                        : Math.round(data.scrollbarSize \u002F 2)));\r\n-                                scrollToValue = c[scrollOffset]() + (scrollToValue \u002F scrollx.kx);\r\n-                            }\r\n-\r\n-                            S.scrollTo = S.scrollTo || {};\r\n-                            S.scrollTo[scrollOffset] = o.stepScrolling ? c[scrollOffset]() + scrollStep : scrollToValue;\r\n-\r\n-                            if (o.stepScrolling) {\r\n-                                scrollCallback = function () {\r\n-                                    scrollToValue = c[scrollOffset]();\r\n-                                    clearInterval(timer);\r\n-                                    clearTimeout(timeout);\r\n-                                    timeout = 0;\r\n-                                    timer = 0;\r\n-                                };\r\n-                                timeout = setTimeout(function () {\r\n-                                    timer = setInterval(scrollTo, 40);\r\n-                                }, o.duration + 100);\r\n-                            }\r\n-\r\n-                            setTimeout(function () {\r\n-                                if (S.scrollTo) {\r\n-                                    c.animate(S.scrollTo, o.duration);\r\n-                                    S.scrollTo = null;\r\n-                                }\r\n-                            }, 1);\r\n-\r\n-                            return S._handleMouseDown(scrollCallback, event);\r\n-                        });\r\n-\r\n-                    \u002F\u002F handle scrollbar drag'n'drop\r\n-                    scrollx.scroll.bar.on('mousedown' + namespace, function (event) {\r\n-\r\n-                        if (event.which != 1) \u002F\u002F lmb\r\n-                            return true;\r\n-\r\n-                        var eventPosition = event[(d === 'x') ? 'pageX' : 'pageY'];\r\n-                        var initOffset = c[scrollOffset]();\r\n-\r\n-                        scrollx.scroll.addClass('scroll-draggable');\r\n-\r\n-                        $(document).on('mousemove' + namespace, function (event) {\r\n-                            var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) \u002F scrollx.kx, 10);\r\n-                            c[scrollOffset](initOffset + diff);\r\n-                        });\r\n-\r\n-                        return S._handleMouseDown(function () {\r\n-                            scrollx.scroll.removeClass('scroll-draggable');\r\n-                            scrollToValue = c[scrollOffset]();\r\n-                        }, event);\r\n-                    });\r\n-                }\r\n-            });\r\n-\r\n-            \u002F\u002F remove classes & reset applied styles\r\n-            $.each(s, function (d, scrollx) {\r\n-                var scrollClass = 'scroll-scroll' + d + '_visible';\r\n-                var scrolly = (d == \"x\") ? s.y : s.x;\r\n-\r\n-                scrollx.scroll.removeClass(scrollClass);\r\n-                scrolly.scroll.removeClass(scrollClass);\r\n-                cw.removeClass(scrollClass);\r\n-            });\r\n-\r\n-            \u002F\u002F calculate init sizes\r\n-            $.each(s, function (d, scrollx) {\r\n-                $.extend(scrollx, (d == \"x\") ? {\r\n-                    \"offset\": parseInt(c.css('left'), 10) || 0,\r\n-                    \"size\": c.prop('scrollWidth'),\r\n-                    \"visible\": w.width()\r\n-                } : {\r\n-                    \"offset\": parseInt(c.css('top'), 10) || 0,\r\n-                    \"size\": c.prop('scrollHeight'),\r\n-                    \"visible\": w.height()\r\n-                });\r\n-            });\r\n-\r\n-            \u002F\u002F update scrollbar visibility\u002Fdimensions\r\n-            this._updateScroll('x', this.scrollx);\r\n-            this._updateScroll('y', this.scrolly);\r\n-\r\n-            if ($.isFunction(o.onUpdate)){\r\n-                o.onUpdate.apply(this, [c]);\r\n-            }\r\n-\r\n-            \u002F\u002F calculate scroll size\r\n-            $.each(s, function (d, scrollx) {\r\n-\r\n-                var cssOffset = (d === 'x') ? 'left' : 'top';\r\n-                var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';\r\n-                var cssSize = (d === 'x') ? 'width' : 'height';\r\n-                var offset = parseInt(c.css(cssOffset), 10) || 0;\r\n-\r\n-                var AreaSize = scrollx.size;\r\n-                var AreaVisible = scrollx.visible + offset;\r\n-\r\n-                var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);\r\n-\r\n-                if (o.autoScrollSize) {\r\n-                    scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible \u002F AreaSize, 10);\r\n-                    scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');\r\n-                }\r\n-\r\n-                scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();\r\n-                scrollx.kx = ((scrollSize - scrollx.scrollbarSize) \u002F (AreaSize - AreaVisible)) || 1;\r\n-                scrollx.maxScrollOffset = AreaSize - AreaVisible;\r\n-            });\r\n-\r\n-            c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');\r\n-        },\r\n-\r\n-        \u002F**\r\n-         * Get scrollx\u002Fscrolly object\r\n-         *\r\n-         * @param {Mixed} scroll\r\n-         * @returns {jQuery} scroll object\r\n-         *\u002F\r\n-        _getScroll: function (scroll) {\r\n-            var types = {\r\n-                advanced: [\r\n-                    '\u003Cdiv class=\"scroll-element\">',\r\n-                    '\u003Cdiv class=\"scroll-element_corner\">\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-arrow scroll-arrow_less\">\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-arrow scroll-arrow_more\">\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-element_outer\">',\r\n-                    '\u003Cdiv class=\"scroll-element_size\">\u003C\u002Fdiv>', \u002F\u002F required! used for scrollbar size calculation !\r\n-                    '\u003Cdiv class=\"scroll-element_inner-wrapper\">',\r\n-                    '\u003Cdiv class=\"scroll-element_inner scroll-element_track\">', \u002F\u002F used for handling scrollbar click\r\n-                    '\u003Cdiv class=\"scroll-element_inner-bottom\">\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-bar\">', \u002F\u002F required\r\n-                    '\u003Cdiv class=\"scroll-bar_body\">',\r\n-                    '\u003Cdiv class=\"scroll-bar_body-inner\">\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-bar_bottom\">\u003C\u002Fdiv>',\r\n-                    '\u003Cdiv class=\"scroll-bar_center\">\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>'\r\n-                ].join(''),\r\n-                simple: [\r\n-                    '\u003Cdiv class=\"scroll-element\">',\r\n-                    '\u003Cdiv class=\"scroll-element_outer\">',\r\n-                    '\u003Cdiv class=\"scroll-element_size\">\u003C\u002Fdiv>', \u002F\u002F required! used for scrollbar size calculation !\r\n-                    '\u003Cdiv class=\"scroll-element_track\">\u003C\u002Fdiv>', \u002F\u002F used for handling scrollbar click\r\n-                    '\u003Cdiv class=\"scroll-bar\">\u003C\u002Fdiv>', \u002F\u002F required\r\n-                    '\u003C\u002Fdiv>',\r\n-                    '\u003C\u002Fdiv>'\r\n-                ].join('')\r\n-            };\r\n-            if (types[scroll]) {\r\n-                scroll = types[scroll];\r\n-            }\r\n-            if (!scroll) {\r\n-                scroll = types['simple'];\r\n-            }\r\n-            if (typeof (scroll) == 'string') {\r\n-                scroll = $(scroll).appendTo(this.wrapper);\r\n-            } else {\r\n-                scroll = $(scroll);\r\n-            }\r\n-            $.extend(scroll, {\r\n-                bar: scroll.find('.scroll-bar'),\r\n-                size: scroll.find('.scroll-element_size'),\r\n-                track: scroll.find('.scroll-element_track')\r\n-            });\r\n-            return scroll;\r\n-        },\r\n-\r\n-        _handleMouseDown: function(callback, event) {\r\n-\r\n-            var namespace = this.namespace;\r\n-\r\n-            $(document).on('blur' + namespace, function () {\r\n-                $(document).add('body').off(namespace);\r\n-                callback && callback();\r\n-            });\r\n-            $(document).on('dragstart' + namespace, function (event) {\r\n-                event.preventDefault();\r\n-                return false;\r\n-            });\r\n-            $(document).on('mouseup' + namespace, function () {\r\n-                $(document).add('body').off(namespace);\r\n-                callback && callback();\r\n-            });\r\n-            $('body').on('selectstart' + namespace, function (event) {\r\n-                event.preventDefault();\r\n-                return false;\r\n-            });\r\n-\r\n-            event && event.preventDefault();\r\n-            return false;\r\n-        },\r\n-\r\n-        _updateScroll: function (d, scrollx) {\r\n-\r\n-            var container = this.container,\r\n-                containerWrapper = this.containerWrapper || container,\r\n-                scrollClass = 'scroll-scroll' + d + '_visible',\r\n-                scrolly = (d === 'x') ? this.scrolly : this.scrollx,\r\n-                offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,\r\n-                wrapper = this.wrapper;\r\n-\r\n-            var AreaSize = scrollx.size;\r\n-            var AreaVisible = scrollx.visible + offset;\r\n-\r\n-            scrollx.isVisible = (AreaSize - AreaVisible) > 1; \u002F\u002F bug in IE9\u002F11 with 1px diff\r\n-            if (scrollx.isVisible) {\r\n-                scrollx.scroll.addClass(scrollClass);\r\n-                scrolly.scroll.addClass(scrollClass);\r\n-                containerWrapper.addClass(scrollClass);\r\n-            } else {\r\n-                scrollx.scroll.removeClass(scrollClass);\r\n-                scrolly.scroll.removeClass(scrollClass);\r\n-                containerWrapper.removeClass(scrollClass);\r\n-            }\r\n-\r\n-            if (d === 'y') {\r\n-                if(container.is('textarea') || AreaSize \u003C AreaVisible){\r\n-                    containerWrapper.css({\r\n-                        \"height\": (AreaVisible + browser.scroll.height) + 'px',\r\n-                        \"max-height\": \"none\"\r\n-                    });\r\n-                } else {\r\n-                    containerWrapper.css({\r\n-                        \u002F\u002F\"height\": \"auto\", \u002F\u002F do not reset height value: issue with height:100%!\r\n-                        \"max-height\": (AreaVisible + browser.scroll.height) + 'px'\r\n-                    });\r\n-                }\r\n-            }\r\n-\r\n-            if (scrollx.size != container.prop('scrollWidth')\r\n-                || scrolly.size != container.prop('scrollHeight')\r\n-                || scrollx.visible != wrapper.width()\r\n-                || scrolly.visible != wrapper.height()\r\n-                || scrollx.offset != (parseInt(container.css('left'), 10) || 0)\r\n-                || scrolly.offset != (parseInt(container.css('top'), 10) || 0)\r\n-                ) {\r\n-                $.extend(this.scrollx, {\r\n-                    \"offset\": parseInt(container.css('left'), 10) || 0,\r\n-                    \"size\": container.prop('scrollWidth'),\r\n-                    \"visible\": wrapper.width()\r\n-                });\r\n-                $.extend(this.scrolly, {\r\n-                    \"offset\": parseInt(container.css('top'), 10) || 0,\r\n-                    \"size\": this.container.prop('scrollHeight'),\r\n-                    \"visible\": wrapper.height()\r\n-                });\r\n-                this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var CustomScrollbar = BaseScrollbar;\r\n-\r\n-    \u002F*\r\n-     * Extend jQuery as plugin\r\n-     *\r\n-     * @param {Mixed} command to execute\r\n-     * @param {Mixed} arguments as Array\r\n-     * @return {jQuery}\r\n-     *\u002F\r\n-    $.fn.scrollbar = function (command, args) {\r\n-        if (typeof command !== 'string') {\r\n-            args = command;\r\n-            command = 'init';\r\n-        }\r\n-        if (typeof args === 'undefined') {\r\n-            args = [];\r\n-        }\r\n-        if (!$.isArray(args)) {\r\n-            args = [args];\r\n-        }\r\n-        this.not('body, .scroll-wrapper').each(function () {\r\n-            var element = $(this),\r\n-                instance = element.data(browser.data.name);\r\n-            if (instance || command === 'init') {\r\n-                if (!instance) {\r\n-                    instance = new CustomScrollbar(element);\r\n-                }\r\n-                if (instance[command]) {\r\n-                    instance[command].apply(instance, args);\r\n-                }\r\n-            }\r\n-        });\r\n-        return this;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Connect default options to global object\r\n-     *\u002F\r\n-    $.fn.scrollbar.options = defaults;\r\n-\r\n-\r\n-    \u002F**\r\n-     * Check if scroll content\u002Fcontainer size is changed\r\n-     *\u002F\r\n-\r\n-    var updateScrollbars = (function () {\r\n-        var timer = 0,\r\n-            timerCounter = 0;\r\n-\r\n-        return function (force) {\r\n-            var i, container, options, scroll, wrapper, scrollx, scrolly;\r\n-            for (i = 0; i \u003C browser.scrolls.length; i++) {\r\n-                scroll = browser.scrolls[i];\r\n-                container = scroll.container;\r\n-                options = scroll.options;\r\n-                wrapper = scroll.wrapper;\r\n-                scrollx = scroll.scrollx;\r\n-                scrolly = scroll.scrolly;\r\n-                if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&\r\n-                    (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {\r\n-                    scroll.init();\r\n-\r\n-                    if (options.debug) {\r\n-                        window.console && console.log({\r\n-                            scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,\r\n-                            scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,\r\n-                            visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,\r\n-                            visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible\r\n-                        }, true);\r\n-                        timerCounter++;\r\n-                    }\r\n-                }\r\n-            }\r\n-            if (debug && timerCounter > 10) {\r\n-                window.console && console.log('Scroll updates exceed 10');\r\n-                updateScrollbars = function () {};\r\n-            } else {\r\n-                clearTimeout(timer);\r\n-                timer = setTimeout(updateScrollbars, 300);\r\n-            }\r\n-        };\r\n-    })();\r\n-\r\n-    \u002F* ADDITIONAL FUNCTIONS *\u002F\r\n-    \u002F**\r\n-     * Get native browser scrollbar size (height\u002Fwidth)\r\n-     *\r\n-     * @param {Boolean} actual size or CSS size, default - CSS size\r\n-     * @returns {Object} with height, width\r\n-     *\u002F\r\n-    function getBrowserScrollSize(actualSize) {\r\n-\r\n-        if (browser.webkit && !actualSize) {\r\n-            return {\r\n-                \"height\": 0,\r\n-                \"width\": 0\r\n-            };\r\n-        }\r\n-\r\n-        if (!browser.data.outer) {\r\n-            var css = {\r\n-                \"border\": \"none\",\r\n-                \"box-sizing\": \"content-box\",\r\n-                \"height\": \"200px\",\r\n-                \"margin\": \"0\",\r\n-                \"padding\": \"0\",\r\n-                \"width\": \"200px\"\r\n-            };\r\n-            browser.data.inner = $(\"\u003Cdiv>\").css($.extend({}, css));\r\n-            browser.data.outer = $(\"\u003Cdiv>\").css($.extend({\r\n-                \"left\": \"-1000px\",\r\n-                \"overflow\": \"scroll\",\r\n-                \"position\": \"absolute\",\r\n-                \"top\": \"-1000px\"\r\n-            }, css)).append(browser.data.inner).appendTo(\"body\");\r\n-        }\r\n-\r\n-        browser.data.outer.scrollLeft(1000).scrollTop(1000);\r\n-\r\n-        return {\r\n-            \"height\": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),\r\n-            \"width\": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if native browser scrollbars overlay content\r\n-     *\r\n-     * @returns {Boolean}\r\n-     *\u002F\r\n-    function isScrollOverlaysContent() {\r\n-        var scrollSize = getBrowserScrollSize(true);\r\n-        return !(scrollSize.height || scrollSize.width);\r\n-    }\r\n-\r\n-    function isVerticalScroll(event) {\r\n-        var e = event.originalEvent;\r\n-        if (e.axis && e.axis === e.HORIZONTAL_AXIS)\r\n-            return false;\r\n-        if (e.wheelDeltaX)\r\n-            return false;\r\n-        return true;\r\n-    }\r\n-\r\n-\r\n-    \u002F**\r\n-     * Extend AngularJS as UI directive\r\n-     * and expose a provider for override default config\r\n-     *\r\n-     *\u002F\r\n-    if (window.angular) {\r\n-        (function (angular) {\r\n-            angular.module('jQueryScrollbar', [])\r\n-                .provider('jQueryScrollbar', function () {\r\n-                    var defaultOptions = defaults;\r\n-                    return {\r\n-                        setOptions: function (options) {\r\n-                            angular.extend(defaultOptions, options);\r\n-                        },\r\n-                        $get: function () {\r\n-                            return {\r\n-                                options: angular.copy(defaultOptions)\r\n-                            };\r\n-                        }\r\n-                    };\r\n-                })\r\n-                .directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) {\r\n-                    return {\r\n-                        \"restrict\": \"AC\",\r\n-                        \"link\": function (scope, element, attrs) {\r\n-                            var model = $parse(attrs.jqueryScrollbar),\r\n-                                options = model(scope);\r\n-                            element.scrollbar(options || jQueryScrollbar.options)\r\n-                                .on('$destroy', function () {\r\n-                                    element.scrollbar('destroy');\r\n-                                });\r\n-                        }\r\n-                    };\r\n-                }]);\r\n-        })(window.angular);\r\n-    }\r\n-}));\r\n+\u002F**\n+ * jQuery CSS Customizable Scrollbar\n+ *\n+ * Copyright 2015, Yuriy Khabarov\n+ * Dual licensed under the MIT or GPL Version 2 licenses.\n+ *\n+ * If you found bug, please contact me via email \u003C13real008@gmail.com>\n+ *\n+ * @author Yuriy Khabarov aka Gromo\n+ * @version 0.2.10\n+ * @url https:\u002F\u002Fgithub.com\u002Fgromo\u002Fjquery.scrollbar\u002F\n+ *\n+ *\u002F\n+;\n+(function (root, factory) {\n+    if (typeof define === 'function' && define.amd) {\n+        define(['jquery'], factory);\n+    } else {\n+        factory(root.jQuery);\n+    }\n+}(this, function ($) {\n+    'use strict';\n+    \u002F\u002F init flags & variables\n+    var debug = false;\n+\n+    var browser = {\n+        data: {\n+            index: 0,\n+            name: 'scrollbar'\n+        },\n+        macosx: \u002Fmac\u002Fi.test(navigator.platform),\n+        mobile: \u002Fandroid|webos|iphone|ipad|ipod|blackberry\u002Fi.test(navigator.userAgent),\n+        overlay: null,\n+        scroll: null,\n+        scrolls: [],\n+        webkit: \u002Fwebkit\u002Fi.test(navigator.userAgent) && !\u002Fedge\\\u002F\\d+\u002Fi.test(navigator.userAgent)\n+    };\n+\n+    browser.scrolls.add = function (instance) {\n+        this.remove(instance).push(instance);\n+    };\n+    browser.scrolls.remove = function (instance) {\n+        while ($.inArray(instance, this) >= 0) {\n+            this.splice($.inArray(instance, this), 1);\n+        }\n+        return this;\n+    };\n+\n+    var defaults = {\n+        \"autoScrollSize\": true,     \u002F\u002F automatically calculate scrollsize\n+        \"autoUpdate\": true,         \u002F\u002F update scrollbar if content\u002Fcontainer size changed\n+        \"debug\": false,             \u002F\u002F debug mode\n+        \"disableBodyScroll\": false, \u002F\u002F disable body scroll if mouse over container\n+        \"duration\": 200,            \u002F\u002F scroll animate duration in ms\n+        \"ignoreMobile\": false,      \u002F\u002F ignore mobile devices\n+        \"ignoreOverlay\": false,     \u002F\u002F ignore browsers with overlay scrollbars (mobile, MacOS)\n+        \"scrollStep\": 30,           \u002F\u002F scroll step for scrollbar arrows\n+        \"showArrows\": false,        \u002F\u002F add class to show arrows\n+        \"stepScrolling\": true,      \u002F\u002F when scrolling to scrollbar mousedown position\n+\n+        \"scrollx\": null,            \u002F\u002F horizontal scroll element\n+        \"scrolly\": null,            \u002F\u002F vertical scroll element\n+\n+        \"onDestroy\": null,          \u002F\u002F callback function on destroy,\n+        \"onInit\": null,             \u002F\u002F callback function on first initialization\n+        \"onScroll\": null,           \u002F\u002F callback function on content scrolling\n+        \"onUpdate\": null            \u002F\u002F callback function on init\u002Fresize (before scrollbar size calculation)\n+    };\n+\n+\n+    var BaseScrollbar = function (container) {\n+\n+        if (!browser.scroll) {\n+            browser.overlay = isScrollOverlaysContent();\n+            browser.scroll = getBrowserScrollSize();\n+            updateScrollbars();\n+\n+            $(window).resize(function () {\n+                var forceUpdate = false;\n+                if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {\n+                    var scroll = getBrowserScrollSize();\n+                    if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {\n+                        browser.scroll = scroll;\n+                        forceUpdate = true; \u002F\u002F handle page zoom\n+                    }\n+                }\n+                updateScrollbars(forceUpdate);\n+            });\n+        }\n+\n+        this.container = container;\n+        this.namespace = '.scrollbar_' + browser.data.index++;\n+        this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});\n+        this.scrollTo = null;\n+        this.scrollx = {};\n+        this.scrolly = {};\n+\n+        container.data(browser.data.name, this);\n+        browser.scrolls.add(this);\n+    };\n+\n+    BaseScrollbar.prototype = {\n+\n+        destroy: function () {\n+\n+            if (!this.wrapper) {\n+                return;\n+            }\n+\n+            this.container.removeData(browser.data.name);\n+            browser.scrolls.remove(this);\n+\n+            \u002F\u002F init variables\n+            var scrollLeft = this.container.scrollLeft();\n+            var scrollTop = this.container.scrollTop();\n+\n+            this.container.insertBefore(this.wrapper).css({\n+                \"height\": \"\",\n+                \"margin\": \"\",\n+                \"max-height\": \"\"\n+            })\n+                .removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')\n+                .off(this.namespace)\n+                .scrollLeft(scrollLeft)\n+                .scrollTop(scrollTop);\n+\n+            this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);\n+            this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);\n+\n+            this.wrapper.remove();\n+\n+            $(document).add('body').off(this.namespace);\n+\n+            if ($.isFunction(this.options.onDestroy)){\n+                this.options.onDestroy.apply(this, [this.container]);\n+            }\n+        },\n+        init: function (options) {\n+            \u002F\u002F init variables\n+            var S = this,\n+                c = this.container,\n+                cw = this.containerWrapper || c,\n+                namespace = this.namespace,\n+                o = $.extend(this.options, options || {}),\n+                s = {x: this.scrollx, y: this.scrolly},\n+                w = this.wrapper;\n+\n+            var initScroll = {\n+                \"scrollLeft\": c.scrollLeft(),\n+                \"scrollTop\": c.scrollTop()\n+            };\n+\n+            \u002F\u002F do not init if in ignorable browser\n+            if ((browser.mobile && o.ignoreMobile)\n+                || (browser.overlay && o.ignoreOverlay)\n+                || (browser.macosx && !browser.webkit) \u002F\u002F still required to ignore nonWebKit browsers on Mac\n+                ) {\n+                \u002F\u002Freturn false;\n+            }\n+\n+            \u002F\u002F init scroll container\n+            if (!w) {\n+                this.wrapper = w = $('\u003Cdiv>').addClass('scroll-wrapper').addClass(c.attr('class'))\n+                    .css('position', c.css('position') == 'absolute' ? 'absolute' : 'relative')\n+                    .insertBefore(c).append(c);\n+\n+                if (c.is('textarea')) {\n+                    this.containerWrapper = cw = $('\u003Cdiv>').insertBefore(c).append(c);\n+                    w.addClass('scroll-textarea');\n+                }\n+\n+                cw.addClass('scroll-content').css({\n+                    \"height\": \"auto\",\n+                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\n+                    \"margin-right\": browser.scroll.width * -1 + 'px',\n+                    \"max-height\": \"\"\n+                });\n+\n+                c.on('scroll' + namespace, function (event) {\n+                    if ($.isFunction(o.onScroll)) {\n+                        o.onScroll.call(S, {\n+                            \"maxScroll\": s.y.maxScrollOffset,\n+                            \"scroll\": c.scrollTop(),\n+                            \"size\": s.y.size,\n+                            \"visible\": s.y.visible\n+                        }, {\n+                            \"maxScroll\": s.x.maxScrollOffset,\n+                            \"scroll\": c.scrollLeft(),\n+                            \"size\": s.x.size,\n+                            \"visible\": s.x.visible\n+                        });\n+                    }\n+                    s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');\n+                    s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');\n+                });\n+\n+                \u002F* prevent native scrollbars to be visible on #anchor click *\u002F\n+                w.on('scroll' + namespace, function () {\n+                    w.scrollTop(0).scrollLeft(0);\n+                });\n+\n+                if (o.disableBodyScroll) {\n+                    var handleMouseScroll = function (event) {\n+                        isVerticalScroll(event) ?\n+                            s.y.isVisible && s.y.mousewheel(event) :\n+                            s.x.isVisible && s.x.mousewheel(event);\n+                    };\n+                    w.on('MozMousePixelScroll' + namespace, handleMouseScroll);\n+                    w.on('mousewheel' + namespace, handleMouseScroll);\n+\n+                    if (browser.mobile) {\n+                        w.on('touchstart' + namespace, function (event) {\n+                            var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;\n+                            var originalTouch = {\n+                                \"pageX\": touch.pageX,\n+                                \"pageY\": touch.pageY\n+                            };\n+                            var originalScroll = {\n+                                \"left\": c.scrollLeft(),\n+                                \"top\": c.scrollTop()\n+                            };\n+                            $(document).on('touchmove' + namespace, function (event) {\n+                                var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;\n+                                c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);\n+                                c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);\n+                                event.preventDefault();\n+                            });\n+                            $(document).on('touchend' + namespace, function () {\n+                                $(document).off(namespace);\n+                            });\n+                        });\n+                    }\n+                }\n+                if ($.isFunction(o.onInit)){\n+                    o.onInit.apply(this, [c]);\n+                }\n+\n+            } else {\n+                cw.css({\n+                    \"height\": \"auto\",\n+                    \"margin-bottom\": browser.scroll.height * -1 + 'px',\n+                    \"margin-right\": browser.scroll.width * -1 + 'px',\n+                    \"max-height\": \"\"\n+                });\n+            }\n+\n+            \u002F\u002F init scrollbars & recalculate sizes\n+            $.each(s, function (d, scrollx) {\n+\n+                var scrollCallback = null;\n+                var scrollForward = 1;\n+                var scrollOffset = (d === 'x') ? 'scrollLeft' : 'scrollTop';\n+                var scrollStep = o.scrollStep;\n+                var scrollTo = function () {\n+                    var currentOffset = c[scrollOffset]();\n+                    c[scrollOffset](currentOffset + scrollStep);\n+                    if (scrollForward == 1 && (currentOffset + scrollStep) >= scrollToValue)\n+                        currentOffset = c[scrollOffset]();\n+                    if (scrollForward == -1 && (currentOffset + scrollStep) \u003C= scrollToValue)\n+                        currentOffset = c[scrollOffset]();\n+                    if (c[scrollOffset]() == currentOffset && scrollCallback) {\n+                        scrollCallback();\n+                    }\n+                }\n+                var scrollToValue = 0;\n+\n+                if (!scrollx.scroll) {\n+\n+                    scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d);\n+\n+                    if(o.showArrows){\n+                        scrollx.scroll.addClass('scroll-element_arrows_visible');\n+                    }\n+\n+                    scrollx.mousewheel = function (event) {\n+\n+                        if (!scrollx.isVisible || (d === 'x' && isVerticalScroll(event))) {\n+                            return true;\n+                        }\n+                        if (d === 'y' && !isVerticalScroll(event)) {\n+                            s.x.mousewheel(event);\n+                            return true;\n+                        }\n+\n+                        var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;\n+                        var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;\n+\n+                        if ((delta > 0 && scrollToValue \u003C maxScrollValue) || (delta \u003C 0 && scrollToValue > 0)) {\n+                            scrollToValue = scrollToValue + delta;\n+                            if (scrollToValue \u003C 0)\n+                                scrollToValue = 0;\n+                            if (scrollToValue > maxScrollValue)\n+                                scrollToValue = maxScrollValue;\n+\n+                            S.scrollTo = S.scrollTo || {};\n+                            S.scrollTo[scrollOffset] = scrollToValue;\n+                            setTimeout(function () {\n+                                if (S.scrollTo) {\n+                                    c.stop().animate(S.scrollTo, 240, 'linear', function () {\n+                                        scrollToValue = c[scrollOffset]();\n+                                    });\n+                                    S.scrollTo = null;\n+                                }\n+                            }, 1);\n+                        }\n+\n+                        event.preventDefault();\n+                        return false;\n+                    };\n+\n+                    scrollx.scroll\n+                        .on('MozMousePixelScroll' + namespace, scrollx.mousewheel)\n+                        .on('mousewheel' + namespace, scrollx.mousewheel)\n+                        .on('mouseenter' + namespace, function () {\n+                            scrollToValue = c[scrollOffset]();\n+                        });\n+\n+                    \u002F\u002F handle arrows & scroll inner mousedown event\n+                    scrollx.scroll.find('.scroll-arrow, .scroll-element_track')\n+                        .on('mousedown' + namespace, function (event) {\n+\n+                            if (event.which != 1) \u002F\u002F lmb\n+                                return true;\n+\n+                            scrollForward = 1;\n+\n+                            var data = {\n+                                \"eventOffset\": event[(d === 'x') ? 'pageX' : 'pageY'],\n+                                \"maxScrollValue\": scrollx.size - scrollx.visible - scrollx.offset,\n+                                \"scrollbarOffset\": scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],\n+                                \"scrollbarSize\": scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()\n+                            };\n+                            var timeout = 0, timer = 0;\n+\n+                            if ($(this).hasClass('scroll-arrow')) {\n+                                scrollForward = $(this).hasClass(\"scroll-arrow_more\") ? 1 : -1;\n+                                scrollStep = o.scrollStep * scrollForward;\n+                                scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;\n+                            } else {\n+                                scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1\n+                                    : (data.eventOffset \u003C data.scrollbarOffset ? -1 : 0));\n+                                scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;\n+                                scrollToValue = (data.eventOffset - data.scrollbarOffset -\n+                                    (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)\n+                                        : Math.round(data.scrollbarSize \u002F 2)));\n+                                scrollToValue = c[scrollOffset]() + (scrollToValue \u002F scrollx.kx);\n+                            }\n+\n+                            S.scrollTo = S.scrollTo || {};\n+                            S.scrollTo[scrollOffset] = o.stepScrolling ? c[scrollOffset]() + scrollStep : scrollToValue;\n+\n+                            if (o.stepScrolling) {\n+                                scrollCallback = function () {\n+                                    scrollToValue = c[scrollOffset]();\n+                                    clearInterval(timer);\n+                                    clearTimeout(timeout);\n+                                    timeout = 0;\n+                                    timer = 0;\n+                                };\n+                                timeout = setTimeout(function () {\n+                                    timer = setInterval(scrollTo, 40);\n+                                }, o.duration + 100);\n+                            }\n+\n+                            setTimeout(function () {\n+                                if (S.scrollTo) {\n+                                    c.animate(S.scrollTo, o.duration);\n+                                    S.scrollTo = null;\n+                                }\n+                            }, 1);\n+\n+                            return S._handleMouseDown(scrollCallback, event);\n+                        });\n+\n+                    \u002F\u002F handle scrollbar drag'n'drop\n+                    scrollx.scroll.bar.on('mousedown' + namespace, function (event) {\n+\n+                        if (event.which != 1) \u002F\u002F lmb\n+                            return true;\n+\n+                        var eventPosition = event[(d === 'x') ? 'pageX' : 'pageY'];\n+                        var initOffset = c[scrollOffset]();\n+\n+                        scrollx.scroll.addClass('scroll-draggable');\n+\n+                        $(document).on('mousemove' + namespace, function (event) {\n+                            var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) \u002F scrollx.kx, 10);\n+                            c[scrollOffset](initOffset + diff);\n+                        });\n+\n+                        return S._handleMouseDown(function () {\n+                            scrollx.scroll.removeClass('scroll-draggable');\n+                            scrollToValue = c[scrollOffset]();\n+                        }, event);\n+                    });\n+                }\n+            });\n+\n+            \u002F\u002F remove classes & reset applied styles\n+            $.each(s, function (d, scrollx) {\n+                var scrollClass = 'scroll-scroll' + d + '_visible';\n+                var scrolly = (d == \"x\") ? s.y : s.x;\n+\n+                scrollx.scroll.removeClass(scrollClass);\n+                scrolly.scroll.removeClass(scrollClass);\n+                cw.removeClass(scrollClass);\n+            });\n+\n+            \u002F\u002F calculate init sizes\n+            $.each(s, function (d, scrollx) {\n+                $.extend(scrollx, (d == \"x\") ? {\n+                    \"offset\": parseInt(c.css('left'), 10) || 0,\n+                    \"size\": c.prop('scrollWidth'),\n+                    \"visible\": w.width()\n+                } : {\n+                    \"offset\": parseInt(c.css('top'), 10) || 0,\n+                    \"size\": c.prop('scrollHeight'),\n+                    \"visible\": w.height()\n+                });\n+            });\n+\n+            \u002F\u002F update scrollbar visibility\u002Fdimensions\n+            this._updateScroll('x', this.scrollx);\n+            this._updateScroll('y', this.scrolly);\n+\n+            if ($.isFunction(o.onUpdate)){\n+                o.onUpdate.apply(this, [c]);\n+            }\n+\n+            \u002F\u002F calculate scroll size\n+            $.each(s, function (d, scrollx) {\n+\n+                var cssOffset = (d === 'x') ? 'left' : 'top';\n+                var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';\n+                var cssSize = (d === 'x') ? 'width' : 'height';\n+                var offset = parseInt(c.css(cssOffset), 10) || 0;\n+\n+                var AreaSize = scrollx.size;\n+                var AreaVisible = scrollx.visible + offset;\n+\n+                var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);\n+\n+                if (o.autoScrollSize) {\n+                    scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible \u002F AreaSize, 10);\n+                    scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');\n+                }\n+\n+                scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();\n+                scrollx.kx = ((scrollSize - scrollx.scrollbarSize) \u002F (AreaSize - AreaVisible)) || 1;\n+                scrollx.maxScrollOffset = AreaSize - AreaVisible;\n+            });\n+\n+            c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');\n+        },\n+\n+        \u002F**\n+         * Get scrollx\u002Fscrolly object\n+         *\n+         * @param {Mixed} scroll\n+         * @returns {jQuery} scroll object\n+         *\u002F\n+        _getScroll: function (scroll) {\n+            var types = {\n+                advanced: [\n+                    '\u003Cdiv class=\"scroll-element\">',\n+                    '\u003Cdiv class=\"scroll-element_corner\">\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-arrow scroll-arrow_less\">\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-arrow scroll-arrow_more\">\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-element_outer\">',\n+                    '\u003Cdiv class=\"scroll-element_size\">\u003C\u002Fdiv>', \u002F\u002F required! used for scrollbar size calculation !\n+                    '\u003Cdiv class=\"scroll-element_inner-wrapper\">',\n+                    '\u003Cdiv class=\"scroll-element_inner scroll-element_track\">', \u002F\u002F used for handling scrollbar click\n+                    '\u003Cdiv class=\"scroll-element_inner-bottom\">\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-bar\">', \u002F\u002F required\n+                    '\u003Cdiv class=\"scroll-bar_body\">',\n+                    '\u003Cdiv class=\"scroll-bar_body-inner\">\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-bar_bottom\">\u003C\u002Fdiv>',\n+                    '\u003Cdiv class=\"scroll-bar_center\">\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>'\n+                ].join(''),\n+                simple: [\n+                    '\u003Cdiv class=\"scroll-element\">',\n+                    '\u003Cdiv class=\"scroll-element_outer\">',\n+                    '\u003Cdiv class=\"scroll-element_size\">\u003C\u002Fdiv>', \u002F\u002F required! used for scrollbar size calculation !\n+                    '\u003Cdiv class=\"scroll-element_track\">\u003C\u002Fdiv>', \u002F\u002F used for handling scrollbar click\n+                    '\u003Cdiv class=\"scroll-bar\">\u003C\u002Fdiv>', \u002F\u002F required\n+                    '\u003C\u002Fdiv>',\n+                    '\u003C\u002Fdiv>'\n+                ].join('')\n+            };\n+            if (types[scroll]) {\n+                scroll = types[scroll];\n+            }\n+            if (!scroll) {\n+                scroll = types['simple'];\n+            }\n+            if (typeof (scroll) == 'string') {\n+                scroll = $(scroll).appendTo(this.wrapper);\n+            } else {\n+                scroll = $(scroll);\n+            }\n+            $.extend(scroll, {\n+                bar: scroll.find('.scroll-bar'),\n+                size: scroll.find('.scroll-element_size'),\n+                track: scroll.find('.scroll-element_track')\n+            });\n+            return scroll;\n+        },\n+\n+        _handleMouseDown: function(callback, event) {\n+\n+            var namespace = this.namespace;\n+\n+            $(document).on('blur' + namespace, function () {\n+                $(document).add('body').off(namespace);\n+                callback && callback();\n+            });\n+            $(document).on('dragstart' + namespace, function (event) {\n+                event.preventDefault();\n+                return false;\n+            });\n+            $(document).on('mouseup' + namespace, function () {\n+                $(document).add('body').off(namespace);\n+                callback && callback();\n+            });\n+            $('body').on('selectstart' + namespace, function (event) {\n+                event.preventDefault();\n+                return false;\n+            });\n+\n+            event && event.preventDefault();\n+            return false;\n+        },\n+\n+        _updateScroll: function (d, scrollx) {\n+\n+            var container = this.container,\n+                containerWrapper = this.containerWrapper || container,\n+                scrollClass = 'scroll-scroll' + d + '_visible',\n+                scrolly = (d === 'x') ? this.scrolly : this.scrollx,\n+                offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,\n+                wrapper = this.wrapper;\n+\n+            var AreaSize = scrollx.size;\n+            var AreaVisible = scrollx.visible + offset;\n+\n+            scrollx.isVisible = (AreaSize - AreaVisible) > 1; \u002F\u002F bug in IE9\u002F11 with 1px diff\n+            if (scrollx.isVisible) {\n+                scrollx.scroll.addClass(scrollClass);\n+                scrolly.scroll.addClass(scrollClass);\n+                containerWrapper.addClass(scrollClass);\n+            } else {\n+                scrollx.scroll.removeClass(scrollClass);\n+                scrolly.scroll.removeClass(scrollClass);\n+                containerWrapper.removeClass(scrollClass);\n+            }\n+\n+            if (d === 'y') {\n+                if(container.is('textarea') || AreaSize \u003C AreaVisible){\n+                    containerWrapper.css({\n+                        \"height\": (AreaVisible + browser.scroll.height) + 'px',\n+                        \"max-height\": \"none\"\n+                    });\n+                } else {\n+                    containerWrapper.css({\n+                        \u002F\u002F\"height\": \"auto\", \u002F\u002F do not reset height value: issue with height:100%!\n+                        \"max-height\": (AreaVisible + browser.scroll.height) + 'px'\n+                    });\n+                }\n+            }\n+\n+            if (scrollx.size != container.prop('scrollWidth')\n+                || scrolly.size != container.prop('scrollHeight')\n+                || scrollx.visible != wrapper.width()\n+                || scrolly.visible != wrapper.height()\n+                || scrollx.offset != (parseInt(container.css('left'), 10) || 0)\n+                || scrolly.offset != (parseInt(container.css('top'), 10) || 0)\n+                ) {\n+                $.extend(this.scrollx, {\n+                    \"offset\": parseInt(container.css('left'), 10) || 0,\n+                    \"size\": container.prop('scrollWidth'),\n+                    \"visible\": wrapper.width()\n+                });\n+                $.extend(this.scrolly, {\n+                    \"offset\": parseInt(container.css('top'), 10) || 0,\n+                    \"size\": this.container.prop('scrollHeight'),\n+                    \"visible\": wrapper.height()\n+                });\n+                this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);\n+            }\n+        }\n+    };\n+\n+    var CustomScrollbar = BaseScrollbar;\n+\n+    \u002F*\n+     * Extend jQuery as plugin\n+     *\n+     * @param {Mixed} command to execute\n+     * @param {Mixed} arguments as Array\n+     * @return {jQuery}\n+     *\u002F\n+    $.fn.scrollbar = function (command, args) {\n+        if (typeof command !== 'string') {\n+            args = command;\n+            command = 'init';\n+        }\n+        if (typeof args === 'undefined') {\n+            args = [];\n+        }\n+        if (!$.isArray(args)) {\n+            args = [args];\n+        }\n+        this.not('body, .scroll-wrapper').each(function () {\n+            var element = $(this),\n+                instance = element.data(browser.data.name);\n+            if (instance || command === 'init') {\n+                if (!instance) {\n+                    instance = new CustomScrollbar(element);\n+                }\n+                if (instance[command]) {\n+                    instance[command].apply(instance, args);\n+                }\n+            }\n+        });\n+        return this;\n+    };\n+\n+    \u002F**\n+     * Connect default options to global object\n+     *\u002F\n+    $.fn.scrollbar.options = defaults;\n+\n+\n+    \u002F**\n+     * Check if scroll content\u002Fcontainer size is changed\n+     *\u002F\n+\n+    var updateScrollbars = (function () {\n+        var timer = 0,\n+            timerCounter = 0;\n+\n+        return function (force) {\n+            var i, container, options, scroll, wrapper, scrollx, scrolly;\n+            for (i = 0; i \u003C browser.scrolls.length; i++) {\n+                scroll = browser.scrolls[i];\n+                container = scroll.container;\n+                options = scroll.options;\n+                wrapper = scroll.wrapper;\n+                scrollx = scroll.scrollx;\n+                scrolly = scroll.scrolly;\n+                if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&\n+                    (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {\n+                    scroll.init();\n+\n+                    if (options.debug) {\n+                        window.console && console.log({\n+                            scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,\n+                            scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,\n+                            visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,\n+                            visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible\n+                        }, true);\n+                        timerCounter++;\n+                    }\n+                }\n+            }\n+            if (debug && timerCounter > 10) {\n+                window.console && console.log('Scroll updates exceed 10');\n+                updateScrollbars = function () {};\n+            } else {\n+                clearTimeout(timer);\n+                timer = setTimeout(updateScrollbars, 300);\n+            }\n+        };\n+    })();\n+\n+    \u002F* ADDITIONAL FUNCTIONS *\u002F\n+    \u002F**\n+     * Get native browser scrollbar size (height\u002Fwidth)\n+     *\n+     * @param {Boolean} actual size or CSS size, default - CSS size\n+     * @returns {Object} with height, width\n+     *\u002F\n+    function getBrowserScrollSize(actualSize) {\n+\n+        if (browser.webkit && !actualSize) {\n+            return {\n+                \"height\": 0,\n+                \"width\": 0\n+            };\n+        }\n+\n+        if (!browser.data.outer) {\n+            var css = {\n+                \"border\": \"none\",\n+                \"box-sizing\": \"content-box\",\n+                \"height\": \"200px\",\n+                \"margin\": \"0\",\n+                \"padding\": \"0\",\n+                \"width\": \"200px\"\n+            };\n+            browser.data.inner = $(\"\u003Cdiv>\").css($.extend({}, css));\n+            browser.data.outer = $(\"\u003Cdiv>\").css($.extend({\n+                \"left\": \"-1000px\",\n+                \"overflow\": \"scroll\",\n+                \"position\": \"absolute\",\n+                \"top\": \"-1000px\"\n+            }, css)).append(browser.data.inner).appendTo(\"body\");\n+        }\n+\n+        browser.data.outer.scrollLeft(1000).scrollTop(1000);\n+\n+        return {\n+            \"height\": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),\n+            \"width\": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)\n+        };\n+    }\n+\n+    \u002F**\n+     * Check if native browser scrollbars overlay content\n+     *\n+     * @returns {Boolean}\n+     *\u002F\n+    function isScrollOverlaysContent() {\n+        var scrollSize = getBrowserScrollSize(true);\n+        return !(scrollSize.height || scrollSize.width);\n+    }\n+\n+    function isVerticalScroll(event) {\n+        var e = event.originalEvent;\n+        if (e.axis && e.axis === e.HORIZONTAL_AXIS)\n+            return false;\n+        if (e.wheelDeltaX)\n+            return false;\n+        return true;\n+    }\n+\n+\n+    \u002F**\n+     * Extend AngularJS as UI directive\n+     * and expose a provider for override default config\n+     *\n+     *\u002F\n+    if (window.angular) {\n+        (function (angular) {\n+            angular.module('jQueryScrollbar', [])\n+                .provider('jQueryScrollbar', function () {\n+                    var defaultOptions = defaults;\n+                    return {\n+                        setOptions: function (options) {\n+                            angular.extend(defaultOptions, options);\n+                        },\n+                        $get: function () {\n+                            return {\n+                                options: angular.copy(defaultOptions)\n+                            };\n+                        }\n+                    };\n+                })\n+                .directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) {\n+                    return {\n+                        \"restrict\": \"AC\",\n+                        \"link\": function (scope, element, attrs) {\n+                            var model = $parse(attrs.jqueryScrollbar),\n+                                options = model(scope);\n+                            element.scrollbar(options || jQueryScrollbar.options)\n+                                .on('$destroy', function () {\n+                                    element.scrollbar('destroy');\n+                                });\n+                        }\n+                    };\n+                }]);\n+        })(window.angular);\n+    }\n+}));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-scrollTo.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,210 +1,210 @@\n-\u002F*!\r\n- * jQuery.scrollTo\r\n- * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\r\n- * Licensed under MIT\r\n- * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\r\n- * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\r\n- * @author Ariel Flesler\r\n- * @version 2.1.2\r\n- *\u002F\r\n-;(function(factory) {\r\n-    'use strict';\r\n-    if (typeof define === 'function' && define.amd) {\r\n-        \u002F\u002F AMD\r\n-        define(['jquery'], factory);\r\n-    } else if (typeof module !== 'undefined' && module.exports) {\r\n-        \u002F\u002F CommonJS\r\n-        module.exports = factory(require('jquery'));\r\n-    } else {\r\n-        \u002F\u002F Global\r\n-        factory(jQuery);\r\n-    }\r\n-})(function($) {\r\n-    'use strict';\r\n-\r\n-    var $scrollTo = $.scrollTo = function(target, duration, settings) {\r\n-        return $(window).scrollTo(target, duration, settings);\r\n-    };\r\n-\r\n-    $scrollTo.defaults = {\r\n-        axis:'xy',\r\n-        duration: 0,\r\n-        limit:true\r\n-    };\r\n-\r\n-    function isWin(elem) {\r\n-        return !elem.nodeName ||\r\n-            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\r\n-    }\r\n-\r\n-    $.fn.scrollTo = function(target, duration, settings) {\r\n-        if (typeof duration === 'object') {\r\n-            settings = duration;\r\n-            duration = 0;\r\n-        }\r\n-        if (typeof settings === 'function') {\r\n-            settings = { onAfter:settings };\r\n-        }\r\n-        if (target === 'max') {\r\n-            target = 9e9;\r\n-        }\r\n-\r\n-        settings = $.extend({}, $scrollTo.defaults, settings);\r\n-        \u002F\u002F Speed is still recognized for backwards compatibility\r\n-        duration = duration || settings.duration;\r\n-        \u002F\u002F Make sure the settings are given right\r\n-        var queue = settings.queue && settings.axis.length > 1;\r\n-        if (queue) {\r\n-            \u002F\u002F Let's keep the overall duration\r\n-            duration \u002F= 2;\r\n-        }\r\n-        settings.offset = both(settings.offset);\r\n-        settings.over = both(settings.over);\r\n-\r\n-        return this.each(function() {\r\n-            \u002F\u002F Null target yields nothing, just like jQuery does\r\n-            if (target === null) return;\r\n-\r\n-            var win = isWin(this),\r\n-                elem = win ? this.contentWindow || window : this,\r\n-                $elem = $(elem),\r\n-                targ = target,\r\n-                attr = {},\r\n-                toff;\r\n-\r\n-            switch (typeof targ) {\r\n-                \u002F\u002F A number will pass the regex\r\n-                case 'number':\r\n-                case 'string':\r\n-                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\r\n-                        targ = both(targ);\r\n-                        \u002F\u002F We are done\r\n-                        break;\r\n-                    }\r\n-                    \u002F\u002F Relative\u002FAbsolute selector\r\n-                    targ = win ? $(targ) : $(targ, elem);\r\n-                \u002F* falls through *\u002F\r\n-                case 'object':\r\n-                    if (targ.length === 0) return;\r\n-                    \u002F\u002F DOMElement \u002F jQuery\r\n-                    if (targ.is || targ.style) {\r\n-                        \u002F\u002F Get the real position of the target\r\n-                        toff = (targ = $(targ)).offset();\r\n-                    }\r\n-            }\r\n-\r\n-            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\r\n-\r\n-            $.each(settings.axis.split(''), function(i, axis) {\r\n-                var Pos\t= axis === 'x' ? 'Left' : 'Top',\r\n-                    pos = Pos.toLowerCase(),\r\n-                    key = 'scroll' + Pos,\r\n-                    prev = $elem[key](),\r\n-                    max = $scrollTo.max(elem, axis);\r\n-\r\n-                if (toff) {\u002F\u002F jQuery \u002F DOMElement\r\n-                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\r\n-\r\n-                    \u002F\u002F If it's a dom element, reduce the margin\r\n-                    if (settings.margin) {\r\n-                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\r\n-                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\r\n-                    }\r\n-\r\n-                    attr[key] += offset[pos] || 0;\r\n-\r\n-                    if (settings.over[pos]) {\r\n-                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\r\n-                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\r\n-                    }\r\n-                } else {\r\n-                    var val = targ[pos];\r\n-                    \u002F\u002F Handle percentage values\r\n-                    attr[key] = val.slice && val.slice(-1) === '%' ?\r\n-                        parseFloat(val) \u002F 100 * max\r\n-                        : val;\r\n-                }\r\n-\r\n-                \u002F\u002F Number or 'number'\r\n-                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\r\n-                    \u002F\u002F Check the limits\r\n-                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\r\n-                }\r\n-\r\n-                \u002F\u002F Don't waste time animating, if there's no need.\r\n-                if (!i && settings.axis.length > 1) {\r\n-                    if (prev === attr[key]) {\r\n-                        \u002F\u002F No animation needed\r\n-                        attr = {};\r\n-                    } else if (queue) {\r\n-                        \u002F\u002F Intermediate animation\r\n-                        animate(settings.onAfterFirst);\r\n-                        \u002F\u002F Don't animate this axis again in the next iteration.\r\n-                        attr = {};\r\n-                    }\r\n-                }\r\n-            });\r\n-\r\n-            animate(settings.onAfter);\r\n-\r\n-            function animate(callback) {\r\n-                var opts = $.extend({}, settings, {\r\n-                    \u002F\u002F The queue setting conflicts with animate()\r\n-                    \u002F\u002F Force it to always be true\r\n-                    queue: true,\r\n-                    duration: duration,\r\n-                    complete: callback && function() {\r\n-                        callback.call(elem, targ, settings);\r\n-                    }\r\n-                });\r\n-                $elem.animate(attr, opts);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Max scrolling position, works on quirks mode\r\n-    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\r\n-    $scrollTo.max = function(elem, axis) {\r\n-        var Dim = axis === 'x' ? 'Width' : 'Height',\r\n-            scroll = 'scroll'+Dim;\r\n-\r\n-        if (!isWin(elem))\r\n-            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\r\n-\r\n-        var size = 'client' + Dim,\r\n-            doc = elem.ownerDocument || elem.document,\r\n-            html = doc.documentElement,\r\n-            body = doc.body;\r\n-\r\n-        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\r\n-    };\r\n-\r\n-    function both(val) {\r\n-        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\r\n-    }\r\n-\r\n-    \u002F\u002F Add special hooks so that window scroll properties can be animated\r\n-    $.Tween.propHooks.scrollLeft =\r\n-        $.Tween.propHooks.scrollTop = {\r\n-            get: function(t) {\r\n-                return $(t.elem)[t.prop]();\r\n-            },\r\n-            set: function(t) {\r\n-                var curr = this.get(t);\r\n-                \u002F\u002F If interrupt is true and user scrolled, stop animating\r\n-                if (t.options.interrupt && t._last && t._last !== curr) {\r\n-                    return $(t.elem).stop();\r\n-                }\r\n-                var next = Math.round(t.now);\r\n-                \u002F\u002F Don't waste CPU\r\n-                \u002F\u002F Browsers don't render floating point scroll\r\n-                if (curr !== next) {\r\n-                    $(t.elem)[t.prop](next);\r\n-                    t._last = this.get(t);\r\n-                }\r\n-            }\r\n-        };\r\n-\r\n-    \u002F\u002F AMD requirement\r\n-    return $scrollTo;\r\n+\u002F*!\n+ * jQuery.scrollTo\n+ * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http:\u002F\u002Fflesler.blogspot.com\n+ * Licensed under MIT\n+ * http:\u002F\u002Fflesler.blogspot.com\u002F2007\u002F10\u002Fjqueryscrollto.html\n+ * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\n+ * @author Ariel Flesler\n+ * @version 2.1.2\n+ *\u002F\n+;(function(factory) {\n+    'use strict';\n+    if (typeof define === 'function' && define.amd) {\n+        \u002F\u002F AMD\n+        define(['jquery'], factory);\n+    } else if (typeof module !== 'undefined' && module.exports) {\n+        \u002F\u002F CommonJS\n+        module.exports = factory(require('jquery'));\n+    } else {\n+        \u002F\u002F Global\n+        factory(jQuery);\n+    }\n+})(function($) {\n+    'use strict';\n+\n+    var $scrollTo = $.scrollTo = function(target, duration, settings) {\n+        return $(window).scrollTo(target, duration, settings);\n+    };\n+\n+    $scrollTo.defaults = {\n+        axis:'xy',\n+        duration: 0,\n+        limit:true\n+    };\n+\n+    function isWin(elem) {\n+        return !elem.nodeName ||\n+            $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\n+    }\n+\n+    $.fn.scrollTo = function(target, duration, settings) {\n+        if (typeof duration === 'object') {\n+            settings = duration;\n+            duration = 0;\n+        }\n+        if (typeof settings === 'function') {\n+            settings = { onAfter:settings };\n+        }\n+        if (target === 'max') {\n+            target = 9e9;\n+        }\n+\n+        settings = $.extend({}, $scrollTo.defaults, settings);\n+        \u002F\u002F Speed is still recognized for backwards compatibility\n+        duration = duration || settings.duration;\n+        \u002F\u002F Make sure the settings are given right\n+        var queue = settings.queue && settings.axis.length > 1;\n+        if (queue) {\n+            \u002F\u002F Let's keep the overall duration\n+            duration \u002F= 2;\n+        }\n+        settings.offset = both(settings.offset);\n+        settings.over = both(settings.over);\n+\n+        return this.each(function() {\n+            \u002F\u002F Null target yields nothing, just like jQuery does\n+            if (target === null) return;\n+\n+            var win = isWin(this),\n+                elem = win ? this.contentWindow || window : this,\n+                $elem = $(elem),\n+                targ = target,\n+                attr = {},\n+                toff;\n+\n+            switch (typeof targ) {\n+                \u002F\u002F A number will pass the regex\n+                case 'number':\n+                case 'string':\n+                    if (\u002F^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$\u002F.test(targ)) {\n+                        targ = both(targ);\n+                        \u002F\u002F We are done\n+                        break;\n+                    }\n+                    \u002F\u002F Relative\u002FAbsolute selector\n+                    targ = win ? $(targ) : $(targ, elem);\n+                \u002F* falls through *\u002F\n+                case 'object':\n+                    if (targ.length === 0) return;\n+                    \u002F\u002F DOMElement \u002F jQuery\n+                    if (targ.is || targ.style) {\n+                        \u002F\u002F Get the real position of the target\n+                        toff = (targ = $(targ)).offset();\n+                    }\n+            }\n+\n+            var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\n+\n+            $.each(settings.axis.split(''), function(i, axis) {\n+                var Pos\t= axis === 'x' ? 'Left' : 'Top',\n+                    pos = Pos.toLowerCase(),\n+                    key = 'scroll' + Pos,\n+                    prev = $elem[key](),\n+                    max = $scrollTo.max(elem, axis);\n+\n+                if (toff) {\u002F\u002F jQuery \u002F DOMElement\n+                    attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\n+\n+                    \u002F\u002F If it's a dom element, reduce the margin\n+                    if (settings.margin) {\n+                        attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\n+                        attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\n+                    }\n+\n+                    attr[key] += offset[pos] || 0;\n+\n+                    if (settings.over[pos]) {\n+                        \u002F\u002F Scroll to a fraction of its width\u002Fheight\n+                        attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\n+                    }\n+                } else {\n+                    var val = targ[pos];\n+                    \u002F\u002F Handle percentage values\n+                    attr[key] = val.slice && val.slice(-1) === '%' ?\n+                        parseFloat(val) \u002F 100 * max\n+                        : val;\n+                }\n+\n+                \u002F\u002F Number or 'number'\n+                if (settings.limit && \u002F^\\d+$\u002F.test(attr[key])) {\n+                    \u002F\u002F Check the limits\n+                    attr[key] = attr[key] \u003C= 0 ? 0 : Math.min(attr[key], max);\n+                }\n+\n+                \u002F\u002F Don't waste time animating, if there's no need.\n+                if (!i && settings.axis.length > 1) {\n+                    if (prev === attr[key]) {\n+                        \u002F\u002F No animation needed\n+                        attr = {};\n+                    } else if (queue) {\n+                        \u002F\u002F Intermediate animation\n+                        animate(settings.onAfterFirst);\n+                        \u002F\u002F Don't animate this axis again in the next iteration.\n+                        attr = {};\n+                    }\n+                }\n+            });\n+\n+            animate(settings.onAfter);\n+\n+            function animate(callback) {\n+                var opts = $.extend({}, settings, {\n+                    \u002F\u002F The queue setting conflicts with animate()\n+                    \u002F\u002F Force it to always be true\n+                    queue: true,\n+                    duration: duration,\n+                    complete: callback && function() {\n+                        callback.call(elem, targ, settings);\n+                    }\n+                });\n+                $elem.animate(attr, opts);\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Max scrolling position, works on quirks mode\n+    \u002F\u002F It only fails (not too badly) on IE, quirks mode.\n+    $scrollTo.max = function(elem, axis) {\n+        var Dim = axis === 'x' ? 'Width' : 'Height',\n+            scroll = 'scroll'+Dim;\n+\n+        if (!isWin(elem))\n+            return elem[scroll] - $(elem)[Dim.toLowerCase()]();\n+\n+        var size = 'client' + Dim,\n+            doc = elem.ownerDocument || elem.document,\n+            html = doc.documentElement,\n+            body = doc.body;\n+\n+        return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\n+    };\n+\n+    function both(val) {\n+        return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\n+    }\n+\n+    \u002F\u002F Add special hooks so that window scroll properties can be animated\n+    $.Tween.propHooks.scrollLeft =\n+        $.Tween.propHooks.scrollTop = {\n+            get: function(t) {\n+                return $(t.elem)[t.prop]();\n+            },\n+            set: function(t) {\n+                var curr = this.get(t);\n+                \u002F\u002F If interrupt is true and user scrolled, stop animating\n+                if (t.options.interrupt && t._last && t._last !== curr) {\n+                    return $(t.elem).stop();\n+                }\n+                var next = Math.round(t.now);\n+                \u002F\u002F Don't waste CPU\n+                \u002F\u002F Browsers don't render floating point scroll\n+                if (curr !== next) {\n+                    $(t.elem)[t.prop](next);\n+                    t._last = this.get(t);\n+                }\n+            }\n+        };\n+\n+    \u002F\u002F AMD requirement\n+    return $scrollTo;\n });\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-timer.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,84 +1,84 @@\n-(function (e) {\r\n-\te.backward_timer = function (t) {\r\n-\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\r\n-\t\t}, on_tick      : function (e) {\r\n-\t\t}}, r = this;\r\n-\t\tr.seconds_left = 0;\r\n-\t\tr.target = e(t);\r\n-\t\tr.timeout = undefined;\r\n-\t\tr.settings = {};\r\n-\t\tr.methods = {init     : function (t) {\r\n-\t\t\tr.settings = e.extend({}, n, t);\r\n-\t\t\tif (r.settings.value_setter == undefined) {\r\n-\t\t\t\tif (r.target.is(\"input\")) {\r\n-\t\t\t\t\tr.settings.value_setter = \"val\"\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tr.settings.value_setter = \"text\"\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tr.methods.reset()\r\n-\t\t}, start              : function () {\r\n-\t\t\tif (r.timeout == undefined) {\r\n-\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\r\n-\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\r\n-\t\t\t}\r\n-\t\t}, cancel             : function () {\r\n-\t\t\tif (r.timeout != undefined) {\r\n-\t\t\t\tclearTimeout(r.timeout);\r\n-\t\t\t\tr.timeout = undefined\r\n-\t\t\t}\r\n-\t\t}, reset              : function () {\r\n-\t\t\tr.seconds_left = r.settings.seconds;\r\n-\t\t\tr.methods._render_seconds()\r\n-\t\t}, _on_tick           : function (e) {\r\n-\t\t\tif (e != 0) {\r\n-\t\t\t\tr.settings.on_tick(r)\r\n-\t\t\t}\r\n-\t\t\tr.methods._render_seconds();\r\n-\t\t\tif (r.seconds_left > 0) {\r\n-\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\r\n-\t\t\t\t\tvar t = r.seconds_left\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tvar t = r.settings.step\r\n-\t\t\t\t}\r\n-\t\t\t\tr.seconds_left -= t;\r\n-\t\t\t\tvar n = t * 1e3;\r\n-\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\r\n-\t\t\t} else {\r\n-\t\t\t\tr.timeout = undefined;\r\n-\t\t\t\tr.settings.on_exhausted(r)\r\n-\t\t\t}\r\n-\t\t}, _render_seconds    : function () {\r\n-\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\r\n-\t\t\tif (t.indexOf(\"d%\") !== -1) {\r\n-\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\r\n-\t\t\t} else {\r\n-\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\r\n-\t\t\t}\r\n-\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\r\n-\t\t\tr.target[r.settings.value_setter](t)\r\n-\t\t}, _seconds_to_dhms   : function (e) {\r\n-\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\r\n-\t\t\treturn{d: t, h: n, m: r, s: i}\r\n-\t\t}, _check_leading_zero: function (e) {\r\n-\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\r\n-\t\t}}\r\n-\t};\r\n-\te.fn.backward_timer = function (t) {\r\n-\t\tvar n = arguments;\r\n-\t\treturn this.each(function () {\r\n-\t\t\tvar r = e(this).data(\"backward_timer\");\r\n-\t\t\tif (r == undefined) {\r\n-\t\t\t\tr = new e.backward_timer(this);\r\n-\t\t\t\te(this).data(\"backward_timer\", r)\r\n-\t\t\t}\r\n-\t\t\tif (r.methods[t]) {\r\n-\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\r\n-\t\t\t} else if (typeof t === \"object\" || !t) {\r\n-\t\t\t\treturn r.methods.init.apply(this, n)\r\n-\t\t\t} else {\r\n-\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\r\n-\t\t\t}\r\n-\t\t})\r\n-\t}\r\n-})(jQuery);\r\n+(function (e) {\n+\te.backward_timer = function (t) {\n+\t\tvar n = {seconds: 5, step: 1, format: \"h%:m%:s%\", value_setter: undefined, on_exhausted: function (e) {\n+\t\t}, on_tick      : function (e) {\n+\t\t}}, r = this;\n+\t\tr.seconds_left = 0;\n+\t\tr.target = e(t);\n+\t\tr.timeout = undefined;\n+\t\tr.settings = {};\n+\t\tr.methods = {init     : function (t) {\n+\t\t\tr.settings = e.extend({}, n, t);\n+\t\t\tif (r.settings.value_setter == undefined) {\n+\t\t\t\tif (r.target.is(\"input\")) {\n+\t\t\t\t\tr.settings.value_setter = \"val\"\n+\t\t\t\t} else {\n+\t\t\t\t\tr.settings.value_setter = \"text\"\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tr.methods.reset()\n+\t\t}, start              : function () {\n+\t\t\tif (r.timeout == undefined) {\n+\t\t\t\tvar e = r.seconds_left == r.settings.seconds ? 0 : r.settings.step * 1e3;\n+\t\t\t\tsetTimeout(r.methods._on_tick, e, e)\n+\t\t\t}\n+\t\t}, cancel             : function () {\n+\t\t\tif (r.timeout != undefined) {\n+\t\t\t\tclearTimeout(r.timeout);\n+\t\t\t\tr.timeout = undefined\n+\t\t\t}\n+\t\t}, reset              : function () {\n+\t\t\tr.seconds_left = r.settings.seconds;\n+\t\t\tr.methods._render_seconds()\n+\t\t}, _on_tick           : function (e) {\n+\t\t\tif (e != 0) {\n+\t\t\t\tr.settings.on_tick(r)\n+\t\t\t}\n+\t\t\tr.methods._render_seconds();\n+\t\t\tif (r.seconds_left > 0) {\n+\t\t\t\tif (r.seconds_left \u003C r.settings.step) {\n+\t\t\t\t\tvar t = r.seconds_left\n+\t\t\t\t} else {\n+\t\t\t\t\tvar t = r.settings.step\n+\t\t\t\t}\n+\t\t\t\tr.seconds_left -= t;\n+\t\t\t\tvar n = t * 1e3;\n+\t\t\t\tr.timeout = setTimeout(r.methods._on_tick, n, n)\n+\t\t\t} else {\n+\t\t\t\tr.timeout = undefined;\n+\t\t\t\tr.settings.on_exhausted(r)\n+\t\t\t}\n+\t\t}, _render_seconds    : function () {\n+\t\t\tvar e = r.methods._seconds_to_dhms(r.seconds_left), t = r.settings.format;\n+\t\t\tif (t.indexOf(\"d%\") !== -1) {\n+\t\t\t\tt = t.replace(\"d%\", e.d).replace(\"h%\", r.methods._check_leading_zero(e.h))\n+\t\t\t} else {\n+\t\t\t\tt = t.replace(\"h%\", e.d * 24 + e.h)\n+\t\t\t}\n+\t\t\tt = t.replace(\"m%\", r.methods._check_leading_zero(e.m)).replace(\"s%\", r.methods._check_leading_zero(e.s));\n+\t\t\tr.target[r.settings.value_setter](t)\n+\t\t}, _seconds_to_dhms   : function (e) {\n+\t\t\tvar t = Math.floor(e \u002F (24 * 3600)), e = e - t * 24 * 3600, n = Math.floor(e \u002F 3600), e = e - n * 3600, r = Math.floor(e \u002F 60), i = Math.floor(e - r * 60);\n+\t\t\treturn{d: t, h: n, m: r, s: i}\n+\t\t}, _check_leading_zero: function (e) {\n+\t\t\treturn e \u003C 10 ? \"0\" + e : \"\" + e\n+\t\t}}\n+\t};\n+\te.fn.backward_timer = function (t) {\n+\t\tvar n = arguments;\n+\t\treturn this.each(function () {\n+\t\t\tvar r = e(this).data(\"backward_timer\");\n+\t\t\tif (r == undefined) {\n+\t\t\t\tr = new e.backward_timer(this);\n+\t\t\t\te(this).data(\"backward_timer\", r)\n+\t\t\t}\n+\t\t\tif (r.methods[t]) {\n+\t\t\t\treturn r.methods[t].apply(this, Array.prototype.slice.call(n, 1))\n+\t\t\t} else if (typeof t === \"object\" || !t) {\n+\t\t\t\treturn r.methods.init.apply(this, n)\n+\t\t\t} else {\n+\t\t\t\te.error(\"Method \" + t + \" does not exist on jQuery.backward_timer\")\n+\t\t\t}\n+\t\t})\n+\t}\n+})(jQuery);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,258 +1,258 @@\n-\u002F\u002F tipsy, facebook style tooltips for jquery\r\n-\u002F\u002F version 1.0.0a\r\n-\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\r\n-\u002F\u002F released under the MIT license\r\n-\r\n-(function($) {\r\n-\r\n-    function maybeCall(thing, ctx) {\r\n-        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\r\n-    };\r\n-\r\n-    function isElementInDOM(ele) {\r\n-        while (ele = ele.parentNode) {\r\n-            if (ele == document) return true;\r\n-        }\r\n-        return false;\r\n-    };\r\n-\r\n-    function Tipsy(element, options) {\r\n-        this.$element = $(element);\r\n-        this.options = options;\r\n-        this.enabled = true;\r\n-        this.fixTitle();\r\n-    };\r\n-\r\n-    Tipsy.prototype = {\r\n-        show: function() {\r\n-            var title = this.getTitle();\r\n-            if (title && this.enabled) {\r\n-                var $tip = this.tip();\r\n-\r\n-                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\r\n-                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\r\n-                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\r\n-\r\n-                var pos = $.extend({}, this.$element.offset(), {\r\n-                    width: this.$element[0].offsetWidth,\r\n-                    height: this.$element[0].offsetHeight\r\n-                });\r\n-\r\n-                var actualWidth = $tip[0].offsetWidth,\r\n-                    actualHeight = $tip[0].offsetHeight,\r\n-                    gravity = maybeCall(this.options.gravity, this.$element[0]);\r\n-\r\n-                var tp;\r\n-                switch (gravity.charAt(0)) {\r\n-                    case 'n':\r\n-                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 's':\r\n-                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\r\n-                        break;\r\n-                    case 'e':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\r\n-                        break;\r\n-                    case 'w':\r\n-                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\r\n-                        break;\r\n-                }\r\n-\r\n-                if (gravity.length == 2) {\r\n-                    if (gravity.charAt(1) == 'w') {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - 15;\r\n-                    } else {\r\n-                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\r\n-                    }\r\n-                }\r\n-\r\n-                $tip.css(tp).addClass('tipsy-' + gravity);\r\n-                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\r\n-                if (this.options.className) {\r\n-                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\r\n-                }\r\n-\r\n-                if (this.options.fade) {\r\n-                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\r\n-                } else {\r\n-                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        hide: function() {\r\n-            if (this.options.fade) {\r\n-                this.tip().stop().fadeOut(function() { $(this).remove(); });\r\n-            } else {\r\n-                this.tip().remove();\r\n-            }\r\n-        },\r\n-\r\n-        fixTitle: function() {\r\n-            var $e = this.$element;\r\n-            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\r\n-                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\r\n-            }\r\n-        },\r\n-\r\n-        getTitle: function() {\r\n-            var title, $e = this.$element, o = this.options;\r\n-            this.fixTitle();\r\n-            var title, o = this.options;\r\n-            if (typeof o.title == 'string') {\r\n-                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\r\n-            } else if (typeof o.title == 'function') {\r\n-                title = o.title.call($e[0]);\r\n-            }\r\n-            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\r\n-            return title || o.fallback;\r\n-        },\r\n-\r\n-        tip: function() {\r\n-            if (!this.$tip) {\r\n-                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\r\n-                this.$tip.data('tipsy-pointee', this.$element[0]);\r\n-            }\r\n-            return this.$tip;\r\n-        },\r\n-\r\n-        validate: function() {\r\n-            if (!this.$element[0].parentNode) {\r\n-                this.hide();\r\n-                this.$element = null;\r\n-                this.options = null;\r\n-            }\r\n-        },\r\n-\r\n-        enable: function() { this.enabled = true; },\r\n-        disable: function() { this.enabled = false; },\r\n-        toggleEnabled: function() { this.enabled = !this.enabled; }\r\n-    };\r\n-\r\n-    $.fn.tipsy = function(options) {\r\n-\r\n-        if (options === true) {\r\n-            return this.data('tipsy');\r\n-        } else if (typeof options == 'string') {\r\n-            var tipsy = this.data('tipsy');\r\n-            if (tipsy) tipsy[options]();\r\n-            return this;\r\n-        }\r\n-\r\n-        options = $.extend({}, $.fn.tipsy.defaults, options);\r\n-\r\n-        function get(ele) {\r\n-            var tipsy = $.data(ele, 'tipsy');\r\n-            if (!tipsy) {\r\n-                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\r\n-                $.data(ele, 'tipsy', tipsy);\r\n-            }\r\n-            return tipsy;\r\n-        }\r\n-\r\n-        function enter() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'in';\r\n-            if (options.delayIn == 0) {\r\n-                tipsy.show();\r\n-            } else {\r\n-                tipsy.fixTitle();\r\n-                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\r\n-            }\r\n-        };\r\n-\r\n-        function leave() {\r\n-            var tipsy = get(this);\r\n-            tipsy.hoverState = 'out';\r\n-            if (options.delayOut == 0) {\r\n-                tipsy.hide();\r\n-            } else {\r\n-                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\r\n-            }\r\n-        };\r\n-\r\n-        if (!options.live) this.each(function() { get(this); });\r\n-\r\n-        if (options.trigger != 'manual') {\r\n-            var binder   = options.live ? 'live' : 'bind',\r\n-                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\r\n-                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\r\n-            this[binder](eventIn, enter)[binder](eventOut, leave);\r\n-        }\r\n-\r\n-        return this;\r\n-\r\n-    };\r\n-\r\n-    $.fn.tipsy.defaults = {\r\n-        className: null,\r\n-        delayIn: 0,\r\n-        delayOut: 0,\r\n-        fade: false,\r\n-        fallback: '',\r\n-        gravity: 'n',\r\n-        html: false,\r\n-        live: false,\r\n-        offset: 0,\r\n-        opacity: 0.8,\r\n-        title: 'title',\r\n-        trigger: 'hover'\r\n-    };\r\n-\r\n-    $.fn.tipsy.revalidate = function() {\r\n-        $('.tipsy').each(function() {\r\n-            var pointee = $.data(this, 'tipsy-pointee');\r\n-            if (!pointee || !isElementInDOM(pointee)) {\r\n-                $(this).remove();\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    \u002F\u002F Overwrite this method to provide options on a per-element basis.\r\n-    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\r\n-    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\r\n-    \u002F\u002F (remember - do not modify 'options' in place!)\r\n-    $.fn.tipsy.elementOptions = function(ele, options) {\r\n-        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoNS = function() {\r\n-        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\r\n-    };\r\n-\r\n-    $.fn.tipsy.autoWE = function() {\r\n-        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * yields a closure of the supplied parameters, producing a function that takes\r\n-     * no arguments and is suitable for use as an autogravity function like so:\r\n-     *\r\n-     * @param margin (int) - distance from the viewable region edge that an\r\n-     *        element should be before setting its tooltip's gravity to be away\r\n-     *        from that edge.\r\n-     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\r\n-     *        if there are no viewable region edges effecting the tooltip's\r\n-     *        gravity. It will try to vary from this minimally, for example,\r\n-     *        if 'sw' is preferred and an element is near the right viewable\r\n-     *        region edge, but not the top edge, it will set the gravity for\r\n-     *        that element's tooltip to be 'se', preserving the southern\r\n-     *        component.\r\n-     *\u002F\r\n-    $.fn.tipsy.autoBounds = function(margin, prefer) {\r\n-        return function() {\r\n-            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\r\n-                boundTop = $(document).scrollTop() + margin,\r\n-                boundLeft = $(document).scrollLeft() + margin,\r\n-                $this = $(this);\r\n-\r\n-            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\r\n-            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\r\n-            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\r\n-            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\r\n-\r\n-            return dir.ns + (dir.ew ? dir.ew : '');\r\n-        }\r\n-    };\r\n-\r\n+\u002F\u002F tipsy, facebook style tooltips for jquery\n+\u002F\u002F version 1.0.0a\n+\u002F\u002F (c) 2008-2010 jason frame [jason@onehackoranother.com]\n+\u002F\u002F released under the MIT license\n+\n+(function($) {\n+\n+    function maybeCall(thing, ctx) {\n+        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\n+    };\n+\n+    function isElementInDOM(ele) {\n+        while (ele = ele.parentNode) {\n+            if (ele == document) return true;\n+        }\n+        return false;\n+    };\n+\n+    function Tipsy(element, options) {\n+        this.$element = $(element);\n+        this.options = options;\n+        this.enabled = true;\n+        this.fixTitle();\n+    };\n+\n+    Tipsy.prototype = {\n+        show: function() {\n+            var title = this.getTitle();\n+            if (title && this.enabled) {\n+                var $tip = this.tip();\n+\n+                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\n+                $tip[0].className = 'tipsy'; \u002F\u002F reset classname in case of dynamic gravity\n+                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\n+\n+                var pos = $.extend({}, this.$element.offset(), {\n+                    width: this.$element[0].offsetWidth,\n+                    height: this.$element[0].offsetHeight\n+                });\n+\n+                var actualWidth = $tip[0].offsetWidth,\n+                    actualHeight = $tip[0].offsetHeight,\n+                    gravity = maybeCall(this.options.gravity, this.$element[0]);\n+\n+                var tp;\n+                switch (gravity.charAt(0)) {\n+                    case 'n':\n+                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 's':\n+                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width \u002F 2 - actualWidth \u002F 2};\n+                        break;\n+                    case 'e':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left - actualWidth - this.options.offset};\n+                        break;\n+                    case 'w':\n+                        tp = {top: pos.top + pos.height \u002F 2 - actualHeight \u002F 2, left: pos.left + pos.width + this.options.offset};\n+                        break;\n+                }\n+\n+                if (gravity.length == 2) {\n+                    if (gravity.charAt(1) == 'w') {\n+                        tp.left = pos.left + pos.width \u002F 2 - 15;\n+                    } else {\n+                        tp.left = pos.left + pos.width \u002F 2 - actualWidth + 15;\n+                    }\n+                }\n+\n+                $tip.css(tp).addClass('tipsy-' + gravity);\n+                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\n+                if (this.options.className) {\n+                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\n+                }\n+\n+                if (this.options.fade) {\n+                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\n+                } else {\n+                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\n+                }\n+            }\n+        },\n+\n+        hide: function() {\n+            if (this.options.fade) {\n+                this.tip().stop().fadeOut(function() { $(this).remove(); });\n+            } else {\n+                this.tip().remove();\n+            }\n+        },\n+\n+        fixTitle: function() {\n+            var $e = this.$element;\n+            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\n+                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\n+            }\n+        },\n+\n+        getTitle: function() {\n+            var title, $e = this.$element, o = this.options;\n+            this.fixTitle();\n+            var title, o = this.options;\n+            if (typeof o.title == 'string') {\n+                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\n+            } else if (typeof o.title == 'function') {\n+                title = o.title.call($e[0]);\n+            }\n+            title = ('' + title).replace(\u002F(^\\s*|\\s*$)\u002F, \"\");\n+            return title || o.fallback;\n+        },\n+\n+        tip: function() {\n+            if (!this.$tip) {\n+                this.$tip = $('\u003Cdiv class=\"tipsy\">\u003C\u002Fdiv>').html('\u003Cdiv class=\"tipsy-arrow\">\u003C\u002Fdiv>\u003Cdiv class=\"tipsy-inner\">\u003C\u002Fdiv>');\n+                this.$tip.data('tipsy-pointee', this.$element[0]);\n+            }\n+            return this.$tip;\n+        },\n+\n+        validate: function() {\n+            if (!this.$element[0].parentNode) {\n+                this.hide();\n+                this.$element = null;\n+                this.options = null;\n+            }\n+        },\n+\n+        enable: function() { this.enabled = true; },\n+        disable: function() { this.enabled = false; },\n+        toggleEnabled: function() { this.enabled = !this.enabled; }\n+    };\n+\n+    $.fn.tipsy = function(options) {\n+\n+        if (options === true) {\n+            return this.data('tipsy');\n+        } else if (typeof options == 'string') {\n+            var tipsy = this.data('tipsy');\n+            if (tipsy) tipsy[options]();\n+            return this;\n+        }\n+\n+        options = $.extend({}, $.fn.tipsy.defaults, options);\n+\n+        function get(ele) {\n+            var tipsy = $.data(ele, 'tipsy');\n+            if (!tipsy) {\n+                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n+                $.data(ele, 'tipsy', tipsy);\n+            }\n+            return tipsy;\n+        }\n+\n+        function enter() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'in';\n+            if (options.delayIn == 0) {\n+                tipsy.show();\n+            } else {\n+                tipsy.fixTitle();\n+                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\n+            }\n+        };\n+\n+        function leave() {\n+            var tipsy = get(this);\n+            tipsy.hoverState = 'out';\n+            if (options.delayOut == 0) {\n+                tipsy.hide();\n+            } else {\n+                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\n+            }\n+        };\n+\n+        if (!options.live) this.each(function() { get(this); });\n+\n+        if (options.trigger != 'manual') {\n+            var binder   = options.live ? 'live' : 'bind',\n+                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\n+                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\n+            this[binder](eventIn, enter)[binder](eventOut, leave);\n+        }\n+\n+        return this;\n+\n+    };\n+\n+    $.fn.tipsy.defaults = {\n+        className: null,\n+        delayIn: 0,\n+        delayOut: 0,\n+        fade: false,\n+        fallback: '',\n+        gravity: 'n',\n+        html: false,\n+        live: false,\n+        offset: 0,\n+        opacity: 0.8,\n+        title: 'title',\n+        trigger: 'hover'\n+    };\n+\n+    $.fn.tipsy.revalidate = function() {\n+        $('.tipsy').each(function() {\n+            var pointee = $.data(this, 'tipsy-pointee');\n+            if (!pointee || !isElementInDOM(pointee)) {\n+                $(this).remove();\n+            }\n+        });\n+    };\n+\n+    \u002F\u002F Overwrite this method to provide options on a per-element basis.\n+    \u002F\u002F For example, you could store the gravity in a 'tipsy-gravity' attribute:\n+    \u002F\u002F return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n+    \u002F\u002F (remember - do not modify 'options' in place!)\n+    $.fn.tipsy.elementOptions = function(ele, options) {\n+        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n+    };\n+\n+    $.fn.tipsy.autoNS = function() {\n+        return $(this).offset().top > ($(document).scrollTop() + $(window).height() \u002F 2) ? 's' : 'n';\n+    };\n+\n+    $.fn.tipsy.autoWE = function() {\n+        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() \u002F 2) ? 'e' : 'w';\n+    };\n+\n+    \u002F**\n+     * yields a closure of the supplied parameters, producing a function that takes\n+     * no arguments and is suitable for use as an autogravity function like so:\n+     *\n+     * @param margin (int) - distance from the viewable region edge that an\n+     *        element should be before setting its tooltip's gravity to be away\n+     *        from that edge.\n+     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n+     *        if there are no viewable region edges effecting the tooltip's\n+     *        gravity. It will try to vary from this minimally, for example,\n+     *        if 'sw' is preferred and an element is near the right viewable\n+     *        region edge, but not the top edge, it will set the gravity for\n+     *        that element's tooltip to be 'se', preserving the southern\n+     *        component.\n+     *\u002F\n+    $.fn.tipsy.autoBounds = function(margin, prefer) {\n+        return function() {\n+            var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\n+                boundTop = $(document).scrollTop() + margin,\n+                boundLeft = $(document).scrollLeft() + margin,\n+                $this = $(this);\n+\n+            if ($this.offset().top \u003C boundTop) dir.ns = 'n';\n+            if ($this.offset().left \u003C boundLeft) dir.ew = 'w';\n+            if ($(window).width() + $(document).scrollLeft() - $this.offset().left \u003C margin) dir.ew = 'e';\n+            if ($(window).height() + $(document).scrollTop() - $this.offset().top \u003C margin) dir.ns = 's';\n+\n+            return dir.ns + (dir.ew ? dir.ew : '');\n+        }\n+    };\n+\n })(jQuery);\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2291 +1,2291 @@\n-\u002F*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20\r\n-* http:\u002F\u002Ftrentrichardson.com\u002Fexamples\u002Ftimepicker\r\n-* Copyright (c) 2016 Trent Richardson; Licensed MIT *\u002F\r\n-(function (factory) {\r\n-\tif (typeof define === 'function' && define.amd) {\r\n-\t\tdefine(['jquery', 'jquery-ui'], factory);\r\n-\t} else {\r\n-\t\tfactory(jQuery);\r\n-\t}\r\n-}(function ($) {\r\n-\r\n-\t\u002F*\r\n-\t* Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\r\n-\t*\u002F\r\n-\t$.ui.timepicker = $.ui.timepicker || {};\r\n-\tif ($.ui.timepicker.version) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F*\r\n-\t* Extend jQueryUI, get it started with our version number\r\n-\t*\u002F\r\n-\t$.extend($.ui, {\r\n-\t\ttimepicker: {\r\n-\t\t\tversion: \"1.6.3\"\r\n-\t\t}\r\n-\t});\r\n-\r\n-\t\u002F*\r\n-\t* Timepicker manager.\r\n-\t* Use the singleton instance of this class, $.timepicker, to interact with the time picker.\r\n-\t* Settings for (groups of) time pickers are maintained in an instance object,\r\n-\t* allowing multiple different settings on the same page.\r\n-\t*\u002F\r\n-\tvar Timepicker = function () {\r\n-\t\tthis.regional = []; \u002F\u002F Available regional settings, indexed by language code\r\n-\t\tthis.regional[''] = { \u002F\u002F Default regional settings\r\n-\t\t\tcurrentText: 'Now',\r\n-\t\t\tcloseText: 'Done',\r\n-\t\t\tamNames: ['AM', 'A'],\r\n-\t\t\tpmNames: ['PM', 'P'],\r\n-\t\t\ttimeFormat: 'HH:mm',\r\n-\t\t\ttimeSuffix: '',\r\n-\t\t\ttimeOnlyTitle: 'Choose Time',\r\n-\t\t\ttimeText: 'Time',\r\n-\t\t\thourText: 'Hour',\r\n-\t\t\tminuteText: 'Minute',\r\n-\t\t\tsecondText: 'Second',\r\n-\t\t\tmillisecText: 'Millisecond',\r\n-\t\t\tmicrosecText: 'Microsecond',\r\n-\t\t\ttimezoneText: 'Time Zone',\r\n-\t\t\tisRTL: false\r\n-\t\t};\r\n-\t\tthis._defaults = { \u002F\u002F Global defaults for all the datetime picker instances\r\n-\t\t\tshowButtonPanel: true,\r\n-\t\t\ttimeOnly: false,\r\n-\t\t\ttimeOnlyShowDate: false,\r\n-\t\t\tshowHour: null,\r\n-\t\t\tshowMinute: null,\r\n-\t\t\tshowSecond: null,\r\n-\t\t\tshowMillisec: null,\r\n-\t\t\tshowMicrosec: null,\r\n-\t\t\tshowTimezone: null,\r\n-\t\t\tshowTime: true,\r\n-\t\t\tstepHour: 1,\r\n-\t\t\tstepMinute: 1,\r\n-\t\t\tstepSecond: 1,\r\n-\t\t\tstepMillisec: 1,\r\n-\t\t\tstepMicrosec: 1,\r\n-\t\t\thour: 0,\r\n-\t\t\tminute: 0,\r\n-\t\t\tsecond: 0,\r\n-\t\t\tmillisec: 0,\r\n-\t\t\tmicrosec: 0,\r\n-\t\t\ttimezone: null,\r\n-\t\t\thourMin: 0,\r\n-\t\t\tminuteMin: 0,\r\n-\t\t\tsecondMin: 0,\r\n-\t\t\tmillisecMin: 0,\r\n-\t\t\tmicrosecMin: 0,\r\n-\t\t\thourMax: 23,\r\n-\t\t\tminuteMax: 59,\r\n-\t\t\tsecondMax: 59,\r\n-\t\t\tmillisecMax: 999,\r\n-\t\t\tmicrosecMax: 999,\r\n-\t\t\tminDateTime: null,\r\n-\t\t\tmaxDateTime: null,\r\n-\t\t\tmaxTime: null,\r\n-\t\t\tminTime: null,\r\n-\t\t\tonSelect: null,\r\n-\t\t\thourGrid: 0,\r\n-\t\t\tminuteGrid: 0,\r\n-\t\t\tsecondGrid: 0,\r\n-\t\t\tmillisecGrid: 0,\r\n-\t\t\tmicrosecGrid: 0,\r\n-\t\t\talwaysSetTime: true,\r\n-\t\t\tseparator: ' ',\r\n-\t\t\taltFieldTimeOnly: true,\r\n-\t\t\taltTimeFormat: null,\r\n-\t\t\taltSeparator: null,\r\n-\t\t\taltTimeSuffix: null,\r\n-\t\t\taltRedirectFocus: true,\r\n-\t\t\tpickerTimeFormat: null,\r\n-\t\t\tpickerTimeSuffix: null,\r\n-\t\t\tshowTimepicker: true,\r\n-\t\t\ttimezoneList: null,\r\n-\t\t\taddSliderAccess: false,\r\n-\t\t\tsliderAccessArgs: null,\r\n-\t\t\tcontrolType: 'slider',\r\n-\t\t\toneLine: false,\r\n-\t\t\tdefaultValue: null,\r\n-\t\t\tparse: 'strict',\r\n-\t\t\tafterInject: null\r\n-\t\t};\r\n-\t\t$.extend(this._defaults, this.regional['']);\r\n-\t};\r\n-\r\n-\t$.extend(Timepicker.prototype, {\r\n-\t\t$input: null,\r\n-\t\t$altInput: null,\r\n-\t\t$timeObj: null,\r\n-\t\tinst: null,\r\n-\t\thour_slider: null,\r\n-\t\tminute_slider: null,\r\n-\t\tsecond_slider: null,\r\n-\t\tmillisec_slider: null,\r\n-\t\tmicrosec_slider: null,\r\n-\t\ttimezone_select: null,\r\n-\t\tmaxTime: null,\r\n-\t\tminTime: null,\r\n-\t\thour: 0,\r\n-\t\tminute: 0,\r\n-\t\tsecond: 0,\r\n-\t\tmillisec: 0,\r\n-\t\tmicrosec: 0,\r\n-\t\ttimezone: null,\r\n-\t\thourMinOriginal: null,\r\n-\t\tminuteMinOriginal: null,\r\n-\t\tsecondMinOriginal: null,\r\n-\t\tmillisecMinOriginal: null,\r\n-\t\tmicrosecMinOriginal: null,\r\n-\t\thourMaxOriginal: null,\r\n-\t\tminuteMaxOriginal: null,\r\n-\t\tsecondMaxOriginal: null,\r\n-\t\tmillisecMaxOriginal: null,\r\n-\t\tmicrosecMaxOriginal: null,\r\n-\t\tampm: '',\r\n-\t\tformattedDate: '',\r\n-\t\tformattedTime: '',\r\n-\t\tformattedDateTime: '',\r\n-\t\ttimezoneList: null,\r\n-\t\tunits: ['hour', 'minute', 'second', 'millisec', 'microsec'],\r\n-\t\tsupport: {},\r\n-\t\tcontrol: null,\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Override the default settings for all instances of the time picker.\r\n-\t\t* @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\r\n-\t\t* @return {Object} the manager object\r\n-\t\t*\u002F\r\n-\t\tsetDefaults: function (settings) {\r\n-\t\t\textendRemove(this._defaults, settings || {});\r\n-\t\t\treturn this;\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Create a new Timepicker instance\r\n-\t\t*\u002F\r\n-\t\t_newInst: function ($input, opts) {\r\n-\t\t\tvar tp_inst = new Timepicker(),\r\n-\t\t\t\tinlineSettings = {},\r\n-\t\t\t\tfns = {},\r\n-\t\t\t\toverrides, i;\r\n-\r\n-\t\t\tfor (var attrName in this._defaults) {\r\n-\t\t\t\tif (this._defaults.hasOwnProperty(attrName)) {\r\n-\t\t\t\t\tvar attrValue = $input.attr('time:' + attrName);\r\n-\t\t\t\t\tif (attrValue) {\r\n-\t\t\t\t\t\ttry {\r\n-\t\t\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\r\n-\t\t\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t\t\tinlineSettings[attrName] = attrValue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\toverrides = {\r\n-\t\t\t\tbeforeShow: function (input, dp_inst) {\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\r\n-\t\t\t\t\t\treturn tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tonChangeMonthYear: function (year, month, dp_inst) {\r\n-\t\t\t\t\t\u002F\u002F Update the time as well : this prevents the time from disappearing from the $input field.\r\n-\t\t\t\t\t\u002F\u002F tp_inst._updateDateTime(dp_inst);\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\r\n-\t\t\t\t\t\ttp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tonClose: function (dateText, dp_inst) {\r\n-\t\t\t\t\tif (tp_inst.timeDefined === true && $input.val() !== '') {\r\n-\t\t\t\t\t\ttp_inst._updateDateTime(dp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onClose)) {\r\n-\t\t\t\t\t\ttp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t};\r\n-\t\t\tfor (i in overrides) {\r\n-\t\t\t\tif (overrides.hasOwnProperty(i)) {\r\n-\t\t\t\t\tfns[i] = opts[i] || this._defaults[i] || null;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\ttp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\r\n-\t\t\t\tevnts: fns,\r\n-\t\t\t\ttimepicker: tp_inst \u002F\u002F add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\r\n-\t\t\t});\r\n-\t\t\ttp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\r\n-\t\t\t\treturn val.toUpperCase();\r\n-\t\t\t});\r\n-\t\t\ttp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\r\n-\t\t\t\treturn val.toUpperCase();\r\n-\t\t\t});\r\n-\r\n-\t\t\t\u002F\u002F detect which units are supported\r\n-\t\t\ttp_inst.support = detectSupport(\r\n-\t\t\t\t\ttp_inst._defaults.timeFormat +\r\n-\t\t\t\t\t(tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\r\n-\t\t\t\t\t(tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\r\n-\r\n-\t\t\t\u002F\u002F controlType is string - key to our this._controls\r\n-\t\t\tif (typeof(tp_inst._defaults.controlType) === 'string') {\r\n-\t\t\t\tif (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\r\n-\t\t\t\t\ttp_inst._defaults.controlType = 'select';\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F controlType is an object and must implement create, options, value methods\r\n-\t\t\telse {\r\n-\t\t\t\ttp_inst.control = tp_inst._defaults.controlType;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F prep the timezone options\r\n-\t\t\tvar timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\r\n-\t\t\t\t\t0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\r\n-\t\t\tif (tp_inst._defaults.timezoneList !== null) {\r\n-\t\t\t\ttimezoneList = tp_inst._defaults.timezoneList;\r\n-\t\t\t}\r\n-\t\t\tvar tzl = timezoneList.length, tzi = 0, tzv = null;\r\n-\t\t\tif (tzl > 0 && typeof timezoneList[0] !== 'object') {\r\n-\t\t\t\tfor (; tzi \u003C tzl; tzi++) {\r\n-\t\t\t\t\ttzv = timezoneList[tzi];\r\n-\t\t\t\t\ttimezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\ttp_inst._defaults.timezoneList = timezoneList;\r\n-\r\n-\t\t\t\u002F\u002F set the default units\r\n-\t\t\ttp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\r\n-\t\t\t\t\t\t\t((new Date()).getTimezoneOffset() * -1);\r\n-\t\t\ttp_inst.hour = tp_inst._defaults.hour \u003C tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\r\n-\t\t\ttp_inst.minute = tp_inst._defaults.minute \u003C tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\r\n-\t\t\ttp_inst.second = tp_inst._defaults.second \u003C tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\r\n-\t\t\ttp_inst.millisec = tp_inst._defaults.millisec \u003C tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\r\n-\t\t\ttp_inst.microsec = tp_inst._defaults.microsec \u003C tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\r\n-\t\t\t\t\t\t\ttp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\r\n-\t\t\ttp_inst.ampm = '';\r\n-\t\t\ttp_inst.$input = $input;\r\n-\r\n-\t\t\tif (tp_inst._defaults.altField) {\r\n-\t\t\t\ttp_inst.$altInput = $(tp_inst._defaults.altField);\r\n-\t\t\t\tif (tp_inst._defaults.altRedirectFocus === true) {\r\n-\t\t\t\t\ttp_inst.$altInput.css({\r\n-\t\t\t\t\t\tcursor: 'pointer'\r\n-\t\t\t\t\t}).focus(function () {\r\n-\t\t\t\t\t\t$input.trigger(\"focus\");\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\r\n-\t\t\t\ttp_inst._defaults.minDate = new Date();\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\r\n-\t\t\t\ttp_inst._defaults.maxDate = new Date();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F datepicker needs minDate\u002FmaxDate, timepicker needs minDateTime\u002FmaxDateTime..\r\n-\t\t\tif (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\r\n-\t\t\t}\r\n-\t\t\tif (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\r\n-\t\t\t\ttp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\r\n-\t\t\t}\r\n-\t\t\ttp_inst.$input.bind('focus', function () {\r\n-\t\t\t\ttp_inst._onFocus();\r\n-\t\t\t});\r\n-\r\n-\t\t\treturn tp_inst;\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* add our sliders to the calendar\r\n-\t\t*\u002F\r\n-\t\t_addTimePicker: function (dp_inst) {\r\n-\t\t\tvar currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\r\n-\r\n-\t\t\tthis.timeDefined = this._parseTime(currDT);\r\n-\t\t\tthis._limitMinMaxDateTime(dp_inst, false);\r\n-\t\t\tthis._injectTimePicker();\r\n-\t\t\tthis._afterInject();\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* parse the time string from input value or _setTime\r\n-\t\t*\u002F\r\n-\t\t_parseTime: function (timeString, withDate) {\r\n-\t\t\tif (!this.inst) {\r\n-\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (withDate || !this._defaults.timeOnly) {\r\n-\t\t\t\tvar dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\tvar parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\r\n-\t\t\t\t\tif (!parseRes.timeObj) {\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$.extend(this, parseRes.timeObj);\r\n-\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t$.timepicker.log(\"Error parsing the date\u002Ftime string: \" + err +\r\n-\t\t\t\t\t\t\t\t\t\"\\ndate\u002Ftime string = \" + timeString +\r\n-\t\t\t\t\t\t\t\t\t\"\\ntimeFormat = \" + this._defaults.timeFormat +\r\n-\t\t\t\t\t\t\t\t\t\"\\ndateFormat = \" + dp_dateFormat);\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t\treturn true;\r\n-\t\t\t} else {\r\n-\t\t\t\tvar timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\r\n-\t\t\t\tif (!timeObj) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t\t$.extend(this, timeObj);\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Handle callback option after injecting timepicker\r\n-\t\t*\u002F\r\n-\t\t_afterInject: function() {\r\n-\t\t\tvar o = this.inst.settings;\r\n-\t\t\tif ($.isFunction(o.afterInject)) {\r\n-\t\t\t\to.afterInject.call(this);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* generate and inject html for timepicker into ui datepicker\r\n-\t\t*\u002F\r\n-\t\t_injectTimePicker: function () {\r\n-\t\t\tvar $dp = this.inst.dpDiv,\r\n-\t\t\t\to = this.inst.settings,\r\n-\t\t\t\ttp_inst = this,\r\n-\t\t\t\tlitem = '',\r\n-\t\t\t\tuitem = '',\r\n-\t\t\t\tshow = null,\r\n-\t\t\t\tmax = {},\r\n-\t\t\t\tgridSize = {},\r\n-\t\t\t\tsize = null,\r\n-\t\t\t\ti = 0,\r\n-\t\t\t\tl = 0;\r\n-\r\n-\t\t\t\u002F\u002F Prevent displaying twice\r\n-\t\t\tif ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\r\n-\t\t\t\tvar noDisplay = ' ui_tpicker_unit_hide',\r\n-\t\t\t\t\thtml = '\u003Cdiv class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\">\u003Cdl>' + '\u003Cdt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '\u003C\u002Fdt>' +\r\n-\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\">\u003Cinput class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '\u002F>\u003C\u002Fdd>';\r\n-\r\n-\t\t\t\t\u002F\u002F Create the markup\r\n-\t\t\t\tfor (i = 0, l = this.units.length; i \u003C l; i++) {\r\n-\t\t\t\t\tlitem = this.units[i];\r\n-\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\r\n-\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\r\n-\r\n-\t\t\t\t\t\u002F\u002F Added by Peter Medeiros:\r\n-\t\t\t\t\t\u002F\u002F - Figure out what the hour\u002Fminute\u002Fsecond max should be based on the step values.\r\n-\t\t\t\t\t\u002F\u002F - Example: if stepMinute is 15, then minMax is 45.\r\n-\t\t\t\t\tmax[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\r\n-\t\t\t\t\tgridSize[litem] = 0;\r\n-\r\n-\t\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '\u003C\u002Fdt>' +\r\n-\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\">\u003Cdiv class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\">\u003C\u002Fdiv>';\r\n-\r\n-\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\r\n-\t\t\t\t\t\thtml += '\u003Cdiv style=\"padding-left: 1px\">\u003Ctable class=\"ui-tpicker-grid-label\">\u003Ctr>';\r\n-\r\n-\t\t\t\t\t\tif (litem === 'hour') {\r\n-\t\t\t\t\t\t\tfor (var h = o[litem + 'Min']; h \u003C= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\r\n-\t\t\t\t\t\t\t\tgridSize[litem]++;\r\n-\t\t\t\t\t\t\t\tvar tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\r\n-\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + tmph + '\u003C\u002Ftd>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telse {\r\n-\t\t\t\t\t\t\tfor (var m = o[litem + 'Min']; m \u003C= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\r\n-\t\t\t\t\t\t\t\tgridSize[litem]++;\r\n-\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + ((m \u003C 10) ? '0' : '') + m + '\u003C\u002Ftd>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\thtml += '\u003C\u002Ftr>\u003C\u002Ftable>\u003C\u002Fdiv>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\thtml += '\u003C\u002Fdd>';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Timezone\r\n-\t\t\t\tvar showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\r\n-\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '\u003C\u002Fdt>';\r\n-\t\t\t\thtml += '\u003Cdd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\">\u003C\u002Fdd>';\r\n-\r\n-\t\t\t\t\u002F\u002F Create the elements from string\r\n-\t\t\t\thtml += '\u003C\u002Fdl>\u003C\u002Fdiv>';\r\n-\t\t\t\tvar $tp = $(html);\r\n-\r\n-\t\t\t\t\u002F\u002F if we only want time picker...\r\n-\t\t\t\tif (o.timeOnly === true) {\r\n-\t\t\t\t\t$tp.prepend('\u003Cdiv class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '\u003Cdiv class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '\u003C\u002Fdiv>' + '\u003C\u002Fdiv>');\r\n-\t\t\t\t\t$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F add sliders, adjust grids, add events\r\n-\t\t\t\tfor (i = 0, l = tp_inst.units.length; i \u003C l; i++) {\r\n-\t\t\t\t\tlitem = tp_inst.units[i];\r\n-\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\r\n-\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\r\n-\r\n-\t\t\t\t\t\u002F\u002F add the slider\r\n-\t\t\t\t\ttp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\r\n-\r\n-\t\t\t\t\t\u002F\u002F adjust the grid and add click event\r\n-\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\r\n-\t\t\t\t\t\tsize = 100 * gridSize[litem] * o[litem + 'Grid'] \u002F (max[litem] - o[litem + 'Min']);\r\n-\t\t\t\t\t\t$tp.find('.ui_tpicker_' + litem + ' table').css({\r\n-\t\t\t\t\t\t\twidth: size + \"%\",\r\n-\t\t\t\t\t\t\tmarginLeft: o.isRTL ? '0' : ((size \u002F (-2 * gridSize[litem])) + \"%\"),\r\n-\t\t\t\t\t\t\tmarginRight: o.isRTL ? ((size \u002F (-2 * gridSize[litem])) + \"%\") : '0',\r\n-\t\t\t\t\t\t\tborderCollapse: 'collapse'\r\n-\t\t\t\t\t\t}).find(\"td\").click(function (e) {\r\n-\t\t\t\t\t\t\t\tvar $t = $(this),\r\n-\t\t\t\t\t\t\t\t\th = $t.html(),\r\n-\t\t\t\t\t\t\t\t\tn = parseInt(h.replace(\u002F[^0-9]\u002Fg), 10),\r\n-\t\t\t\t\t\t\t\t\tap = h.replace(\u002F[^apm]\u002Fig),\r\n-\t\t\t\t\t\t\t\t\tf = $t.data('for'); \u002F\u002F loses scope, so we use data-for\r\n-\r\n-\t\t\t\t\t\t\t\tif (f === 'hour') {\r\n-\t\t\t\t\t\t\t\t\tif (ap.indexOf('p') !== -1 && n \u003C 12) {\r\n-\t\t\t\t\t\t\t\t\t\tn += 12;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\telse {\r\n-\t\t\t\t\t\t\t\t\t\tif (ap.indexOf('a') !== -1 && n === 12) {\r\n-\t\t\t\t\t\t\t\t\t\t\tn = 0;\r\n-\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\r\n-\r\n-\t\t\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\t\t}).css({\r\n-\t\t\t\t\t\t\t\tcursor: 'pointer',\r\n-\t\t\t\t\t\t\t\twidth: (100 \u002F gridSize[litem]) + '%',\r\n-\t\t\t\t\t\t\t\ttextAlign: 'center',\r\n-\t\t\t\t\t\t\t\toverflow: 'hidden'\r\n-\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t} \u002F\u002F end if grid > 0\r\n-\t\t\t\t} \u002F\u002F end for loop\r\n-\r\n-\t\t\t\t\u002F\u002F Add timezone options\r\n-\t\t\t\tthis.timezone_select = $tp.find('.ui_tpicker_timezone').append('\u003Cselect>\u003C\u002Fselect>').find(\"select\");\r\n-\t\t\t\t$.fn.append.apply(this.timezone_select,\r\n-\t\t\t\t$.map(o.timezoneList, function (val, idx) {\r\n-\t\t\t\t\treturn $(\"\u003Coption \u002F>\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\r\n-\t\t\t\t}));\r\n-\t\t\t\tif (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\r\n-\t\t\t\t\tvar local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\r\n-\t\t\t\t\tif (local_timezone === this.timezone) {\r\n-\t\t\t\t\t\tselectLocalTimezone(tp_inst);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.timezone_select.val(this.timezone);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\r\n-\t\t\t\t\t\tthis.timezone_select.val(o.timezone);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tselectLocalTimezone(tp_inst);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tthis.timezone_select.change(function () {\r\n-\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\ttp_inst._afterInject();\r\n-\t\t\t\t});\r\n-\t\t\t\t\u002F\u002F End timezone options\r\n-\r\n-\t\t\t\t\u002F\u002F inject timepicker into datepicker\r\n-\t\t\t\tvar $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\r\n-\t\t\t\tif ($buttonPanel.length) {\r\n-\t\t\t\t\t$buttonPanel.before($tp);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$dp.append($tp);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis.$timeObj = $tp.find('.ui_tpicker_time_input');\r\n-\t\t\t\tthis.$timeObj.change(function () {\r\n-\t\t\t\t\tvar timeFormat = tp_inst.inst.settings.timeFormat;\r\n-\t\t\t\t\tvar parsedTime = $.datepicker.parseTime(timeFormat, this.value);\r\n-\t\t\t\t\tvar update = new Date();\r\n-\t\t\t\t\tif (parsedTime) {\r\n-\t\t\t\t\t\tupdate.setHours(parsedTime.hour);\r\n-\t\t\t\t\t\tupdate.setMinutes(parsedTime.minute);\r\n-\t\t\t\t\t\tupdate.setSeconds(parsedTime.second);\r\n-\t\t\t\t\t\t$.datepicker._setTime(tp_inst.inst, update);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.value = tp_inst.formattedTime;\r\n-\t\t\t\t\t\tthis.blur();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t});\r\n-\r\n-\t\t\t\tif (this.inst !== null) {\r\n-\t\t\t\t\tvar timeDefined = this.timeDefined;\r\n-\t\t\t\t\tthis._onTimeChange();\r\n-\t\t\t\t\tthis.timeDefined = timeDefined;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F slideAccess integration: http:\u002F\u002Ftrentrichardson.com\u002F2011\u002F11\u002F11\u002Fjquery-ui-sliders-and-touch-accessibility\u002F\r\n-\t\t\t\tif (this._defaults.addSliderAccess) {\r\n-\t\t\t\t\tvar sliderAccessArgs = this._defaults.sliderAccessArgs,\r\n-\t\t\t\t\t\trtl = this._defaults.isRTL;\r\n-\t\t\t\t\tsliderAccessArgs.isRTL = rtl;\r\n-\r\n-\t\t\t\t\tsetTimeout(function () { \u002F\u002F fix for inline mode\r\n-\t\t\t\t\t\tif ($tp.find('.ui-slider-access').length === 0) {\r\n-\t\t\t\t\t\t\t$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\r\n-\r\n-\t\t\t\t\t\t\t\u002F\u002F fix any grids since sliders are shorter\r\n-\t\t\t\t\t\t\tvar sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\r\n-\t\t\t\t\t\t\tif (sliderAccessWidth) {\r\n-\t\t\t\t\t\t\t\t$tp.find('table:visible').each(function () {\r\n-\t\t\t\t\t\t\t\t\tvar $g = $(this),\r\n-\t\t\t\t\t\t\t\t\t\toldWidth = $g.outerWidth(),\r\n-\t\t\t\t\t\t\t\t\t\toldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\r\n-\t\t\t\t\t\t\t\t\t\tnewWidth = oldWidth - sliderAccessWidth,\r\n-\t\t\t\t\t\t\t\t\t\tnewMarginLeft = ((oldMarginLeft * newWidth) \u002F oldWidth) + '%',\r\n-\t\t\t\t\t\t\t\t\t\tcss = { width: newWidth, marginRight: 0, marginLeft: 0 };\r\n-\t\t\t\t\t\t\t\t\tcss[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\r\n-\t\t\t\t\t\t\t\t\t$g.css(css);\r\n-\t\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}, 10);\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F end slideAccess integration\r\n-\r\n-\t\t\t\ttp_inst._limitMinMaxDateTime(this.inst, true);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* This function tries to limit the ability to go outside the\r\n-\t\t* min\u002Fmax date range\r\n-\t\t*\u002F\r\n-\t\t_limitMinMaxDateTime: function (dp_inst, adjustSliders) {\r\n-\t\t\tvar o = this._defaults,\r\n-\t\t\t\tdp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\r\n-\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-\t\t\t\treturn;\r\n-\t\t\t} \u002F\u002F No time so nothing to check here\r\n-\r\n-\t\t\tif ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\r\n-\t\t\t\tvar minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\r\n-\t\t\t\t\tminDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\r\n-\r\n-\t\t\t\tif (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\r\n-\t\t\t\t\tthis.hourMinOriginal = o.hourMin;\r\n-\t\t\t\t\tthis.minuteMinOriginal = o.minuteMin;\r\n-\t\t\t\t\tthis.secondMinOriginal = o.secondMin;\r\n-\t\t\t\t\tthis.millisecMinOriginal = o.millisecMin;\r\n-\t\t\t\t\tthis.microsecMinOriginal = o.microsecMin;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\r\n-\t\t\t\t\tthis._defaults.hourMin = minDateTime.getHours();\r\n-\t\t\t\t\tif (this.hour \u003C= this._defaults.hourMin) {\r\n-\t\t\t\t\t\tthis.hour = this._defaults.hourMin;\r\n-\t\t\t\t\t\tthis._defaults.minuteMin = minDateTime.getMinutes();\r\n-\t\t\t\t\t\tif (this.minute \u003C= this._defaults.minuteMin) {\r\n-\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMin;\r\n-\t\t\t\t\t\t\tthis._defaults.secondMin = minDateTime.getSeconds();\r\n-\t\t\t\t\t\t\tif (this.second \u003C= this._defaults.secondMin) {\r\n-\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMin;\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMin = minDateTime.getMilliseconds();\r\n-\t\t\t\t\t\t\t\tif (this.millisec \u003C= this._defaults.millisecMin) {\r\n-\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMin;\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = minDateTime.getMicroseconds();\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tif (this.microsec \u003C this._defaults.microsecMin) {\r\n-\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMin;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis._defaults.hourMin = this.hourMinOriginal;\r\n-\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\r\n-\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\r\n-\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\r\n-\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\r\n-\t\t\t\tvar maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\r\n-\t\t\t\t\tmaxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\r\n-\r\n-\t\t\t\tif (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\r\n-\t\t\t\t\tthis.hourMaxOriginal = o.hourMax;\r\n-\t\t\t\t\tthis.minuteMaxOriginal = o.minuteMax;\r\n-\t\t\t\t\tthis.secondMaxOriginal = o.secondMax;\r\n-\t\t\t\t\tthis.millisecMaxOriginal = o.millisecMax;\r\n-\t\t\t\t\tthis.microsecMaxOriginal = o.microsecMax;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\r\n-\t\t\t\t\tthis._defaults.hourMax = maxDateTime.getHours();\r\n-\t\t\t\t\tif (this.hour >= this._defaults.hourMax) {\r\n-\t\t\t\t\t\tthis.hour = this._defaults.hourMax;\r\n-\t\t\t\t\t\tthis._defaults.minuteMax = maxDateTime.getMinutes();\r\n-\t\t\t\t\t\tif (this.minute >= this._defaults.minuteMax) {\r\n-\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMax;\r\n-\t\t\t\t\t\t\tthis._defaults.secondMax = maxDateTime.getSeconds();\r\n-\t\t\t\t\t\t\tif (this.second >= this._defaults.secondMax) {\r\n-\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMax;\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMax = maxDateTime.getMilliseconds();\r\n-\t\t\t\t\t\t\t\tif (this.millisec >= this._defaults.millisecMax) {\r\n-\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMax;\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = maxDateTime.getMicroseconds();\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tif (this.microsec > this._defaults.microsecMax) {\r\n-\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMax;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis._defaults.hourMax = this.hourMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\r\n-\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (dp_inst.settings.minTime!==null) {\r\n-\t\t\t\tvar tempMinTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.minTime);\r\n-\t\t\t\tif (this.hour\u003CtempMinTime.getHours()) {\r\n-\t\t\t\t\tthis.hour=this._defaults.hourMin=tempMinTime.getHours();\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t} else if (this.hour===tempMinTime.getHours() && this.minute\u003CtempMinTime.getMinutes()) {\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (this._defaults.hourMin\u003CtempMinTime.getHours()) {\r\n-\t\t\t\t\t\tthis._defaults.hourMin=tempMinTime.getHours();\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t\t} else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin\u003CtempMinTime.getMinutes()) {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMin=0;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (dp_inst.settings.maxTime!==null) {\r\n-\t\t\t\tvar tempMaxTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.maxTime);\r\n-\t\t\t\tif (this.hour>tempMaxTime.getHours()) {\r\n-\t\t\t\t\tthis.hour=this._defaults.hourMax=tempMaxTime.getHours();\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t} else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\r\n-\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif (this._defaults.hourMax>tempMaxTime.getHours()) {\r\n-\t\t\t\t\t\tthis._defaults.hourMax=tempMaxTime.getHours();\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t\t} else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis._defaults.minuteMax=59;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (adjustSliders !== undefined && adjustSliders === true) {\r\n-\t\t\t\tvar hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\r\n-\t\t\t\t\tminMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\r\n-\t\t\t\t\tsecMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\r\n-\t\t\t\t\tmillisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\r\n-\t\t\t\t\tmicrosecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\r\n-\r\n-\t\t\t\tif (this.hour_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\r\n-\t\t\t\t\tthis.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.minute_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\r\n-\t\t\t\t\tthis.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.second_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\r\n-\t\t\t\t\tthis.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.millisec_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\r\n-\t\t\t\t\tthis.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.microsec_slider) {\r\n-\t\t\t\t\tthis.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\r\n-\t\t\t\t\tthis.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* when a slider moves, set the internal time...\r\n-\t\t* on time change is also called when the time is updated in the text field\r\n-\t\t*\u002F\r\n-\t\t_onTimeChange: function () {\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-                                return;\r\n-\t\t\t}\r\n-\t\t\tvar hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\r\n-\t\t\t\tminute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\r\n-\t\t\t\tsecond = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\r\n-\t\t\t\tmillisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\r\n-\t\t\t\tmicrosec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\r\n-\t\t\t\ttimezone = (this.timezone_select) ? this.timezone_select.val() : false,\r\n-\t\t\t\to = this._defaults,\r\n-\t\t\t\tpickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\r\n-\t\t\t\tpickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\r\n-\r\n-\t\t\tif (typeof(hour) === 'object') {\r\n-\t\t\t\thour = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(minute) === 'object') {\r\n-\t\t\t\tminute = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(second) === 'object') {\r\n-\t\t\t\tsecond = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(millisec) === 'object') {\r\n-\t\t\t\tmillisec = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(microsec) === 'object') {\r\n-\t\t\t\tmicrosec = false;\r\n-\t\t\t}\r\n-\t\t\tif (typeof(timezone) === 'object') {\r\n-\t\t\t\ttimezone = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (hour !== false) {\r\n-\t\t\t\thour = parseInt(hour, 10);\r\n-\t\t\t}\r\n-\t\t\tif (minute !== false) {\r\n-\t\t\t\tminute = parseInt(minute, 10);\r\n-\t\t\t}\r\n-\t\t\tif (second !== false) {\r\n-\t\t\t\tsecond = parseInt(second, 10);\r\n-\t\t\t}\r\n-\t\t\tif (millisec !== false) {\r\n-\t\t\t\tmillisec = parseInt(millisec, 10);\r\n-\t\t\t}\r\n-\t\t\tif (microsec !== false) {\r\n-\t\t\t\tmicrosec = parseInt(microsec, 10);\r\n-\t\t\t}\r\n-\t\t\tif (timezone !== false) {\r\n-\t\t\t\ttimezone = timezone.toString();\r\n-\t\t\t}\r\n-\r\n-\t\t\tvar ampm = o[hour \u003C 12 ? 'amNames' : 'pmNames'][0];\r\n-\r\n-\t\t\t\u002F\u002F If the update was done in the input field, the input field should not be updated.\r\n-\t\t\t\u002F\u002F If the update was done using the sliders, update the input field.\r\n-\t\t\tvar hasChanged = (\r\n-\t\t\t\t\t\thour !== parseInt(this.hour,10) || \u002F\u002F sliders should all be numeric\r\n-\t\t\t\t\t\tminute !== parseInt(this.minute,10) ||\r\n-\t\t\t\t\t\tsecond !== parseInt(this.second,10) ||\r\n-\t\t\t\t\t\tmillisec !== parseInt(this.millisec,10) ||\r\n-\t\t\t\t\t\tmicrosec !== parseInt(this.microsec,10) ||\r\n-\t\t\t\t\t\t(this.ampm.length > 0 && (hour \u003C 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\r\n-\t\t\t\t\t\t(this.timezone !== null && timezone !== this.timezone.toString()) \u002F\u002F could be numeric or \"EST\" format, so use toString()\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\tif (hasChanged) {\r\n-\r\n-\t\t\t\tif (hour !== false) {\r\n-\t\t\t\t\tthis.hour = hour;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (minute !== false) {\r\n-\t\t\t\t\tthis.minute = minute;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (second !== false) {\r\n-\t\t\t\t\tthis.second = second;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (millisec !== false) {\r\n-\t\t\t\t\tthis.millisec = millisec;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (microsec !== false) {\r\n-\t\t\t\t\tthis.microsec = microsec;\r\n-\t\t\t\t}\r\n-\t\t\t\tif (timezone !== false) {\r\n-\t\t\t\t\tthis.timezone = timezone;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (!this.inst) {\r\n-\t\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis._limitMinMaxDateTime(this.inst, true);\r\n-\t\t\t}\r\n-\t\t\tif (this.support.ampm) {\r\n-\t\t\t\tthis.ampm = ampm;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Updates the time within the timepicker\r\n-\t\t\tthis.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\r\n-\t\t\tif (this.$timeObj) {\r\n-\t\t\t\tif (pickerTimeFormat === o.timeFormat) {\r\n-\t\t\t\t\tthis.$timeObj.val(this.formattedTime + pickerTimeSuffix);\r\n-\t\t\t\t}\r\n-\t\t\t\telse {\r\n-\t\t\t\t\tthis.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (this.$timeObj[0].setSelectionRange) {\r\n-\t\t\t\t\tvar sPos = this.$timeObj[0].selectionStart;\r\n-\t\t\t\t\tvar ePos = this.$timeObj[0].selectionEnd;\r\n-\t\t\t\t\tthis.$timeObj[0].setSelectionRange(sPos, ePos);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.timeDefined = true;\r\n-\t\t\tif (hasChanged) {\r\n-\t\t\t\tthis._updateDateTime();\r\n-\t\t\t\t\u002F\u002Fthis.$input.focus(); \u002F\u002F may automatically open the picker on setDate\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* call custom onSelect.\r\n-\t\t* bind to sliders slidestop, and grid click.\r\n-\t\t*\u002F\r\n-\t\t_onSelectHandler: function () {\r\n-\t\t\tvar onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\r\n-\t\t\tvar inputEl = this.$input ? this.$input[0] : null;\r\n-\t\t\tif (onSelect && inputEl) {\r\n-\t\t\t\tonSelect.apply(inputEl, [this.formattedDateTime, this]);\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* update our input with the new date time..\r\n-\t\t*\u002F\r\n-\t\t_updateDateTime: function (dp_inst) {\r\n-\t\t\tdp_inst = this.inst || dp_inst;\r\n-\t\t\tvar dtTmp = (dp_inst.currentYear > 0?\r\n-\t\t\t\t\t\t\tnew Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\r\n-\t\t\t\t\t\t\tnew Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\r\n-\t\t\t\tdt = $.datepicker._daylightSavingAdjust(dtTmp),\r\n-\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\r\n-\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\r\n-\t\t\t\tdateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\r\n-\t\t\t\tformatCfg = $.datepicker._getFormatConfig(dp_inst),\r\n-\t\t\t\ttimeAvailable = dt !== null && this.timeDefined;\r\n-\t\t\tthis.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\r\n-\t\t\tvar formattedDateTime = this.formattedDate;\r\n-\r\n-\t\t\t\u002F\u002F if a slider was changed but datepicker doesn't have a value yet, set it\r\n-\t\t\tif (dp_inst.lastVal === \"\") {\r\n-                dp_inst.currentYear = dp_inst.selectedYear;\r\n-                dp_inst.currentMonth = dp_inst.selectedMonth;\r\n-                dp_inst.currentDay = dp_inst.selectedDay;\r\n-            }\r\n-\r\n-\t\t\t\u002F*\r\n-\t\t\t* remove following lines to force every changes in date picker to change the input value\r\n-\t\t\t* Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\r\n-\t\t\t* If the user manually empty the value in the input field, the date picker will never change selected value.\r\n-\t\t\t*\u002F\r\n-\t\t\t\u002F\u002Fif (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\r\n-\t\t\t\u002F\u002F\treturn;\r\n-\t\t\t\u002F\u002F}\r\n-\r\n-\t\t\tif (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\r\n-\t\t\t\tformattedDateTime = this.formattedTime;\r\n-\t\t\t} else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\r\n-\t\t\t\tformattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.formattedDateTime = formattedDateTime;\r\n-\r\n-\t\t\tif (!this._defaults.showTimepicker) {\r\n-\t\t\t\tthis.$input.val(this.formattedDate);\r\n-\t\t\t} else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\r\n-\t\t\t\tthis.$altInput.val(this.formattedTime);\r\n-\t\t\t\tthis.$input.val(this.formattedDate);\r\n-\t\t\t} else if (this.$altInput) {\r\n-\t\t\t\tthis.$input.val(formattedDateTime);\r\n-\t\t\t\tvar altFormattedDateTime = '',\r\n-\t\t\t\t\taltSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\r\n-\t\t\t\t\taltTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\r\n-\r\n-\t\t\t\tif (!this._defaults.timeOnly) {\r\n-\t\t\t\t\tif (this._defaults.altFormat) {\r\n-\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse {\r\n-\t\t\t\t\t\taltFormattedDateTime = this.formattedDate;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif (altFormattedDateTime) {\r\n-\t\t\t\t\t\taltFormattedDateTime += altSeparator;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (this._defaults.altTimeFormat !== null) {\r\n-\t\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\r\n-\t\t\t\t}\r\n-\t\t\t\telse {\r\n-\t\t\t\t\taltFormattedDateTime += this.formattedTime + altTimeSuffix;\r\n-\t\t\t\t}\r\n-\t\t\t\tthis.$altInput.val(altFormattedDateTime);\r\n-\t\t\t} else {\r\n-\t\t\t\tthis.$input.val(formattedDateTime);\r\n-\t\t\t}\r\n-\r\n-\t\t\tthis.$input.trigger(\"change\");\r\n-\t\t},\r\n-\r\n-\t\t_onFocus: function () {\r\n-\t\t\tif (!this.$input.val() && this._defaults.defaultValue) {\r\n-\t\t\t\tthis.$input.val(this._defaults.defaultValue);\r\n-\t\t\t\tvar inst = $.datepicker._getInst(this.$input.get(0)),\r\n-\t\t\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\t\t\t\tif (tp_inst) {\r\n-\t\t\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\r\n-\t\t\t\t\t\ttry {\r\n-\t\t\t\t\t\t\t$.datepicker._updateDatepicker(inst);\r\n-\t\t\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t\t\t$.timepicker.log(err);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* Small abstraction to control types\r\n-\t\t* We can add more, just be sure to follow the pattern: create, options, value\r\n-\t\t*\u002F\r\n-\t\t_controls: {\r\n-\t\t\t\u002F\u002F slider methods\r\n-\t\t\tslider: {\r\n-\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\r\n-\t\t\t\t\tvar rtl = tp_inst._defaults.isRTL; \u002F\u002F if rtl go -60->0 instead of 0->60\r\n-\t\t\t\t\treturn obj.prop('slide', null).slider({\r\n-\t\t\t\t\t\torientation: \"horizontal\",\r\n-\t\t\t\t\t\tvalue: rtl ? val * -1 : val,\r\n-\t\t\t\t\t\tmin: rtl ? max * -1 : min,\r\n-\t\t\t\t\t\tmax: rtl ? min * -1 : max,\r\n-\t\t\t\t\t\tstep: step,\r\n-\t\t\t\t\t\tslide: function (event, ui) {\r\n-\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\r\n-\t\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tstop: function (event, ui) {\r\n-\t\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\r\n-\t\t\t\t\tif (tp_inst._defaults.isRTL) {\r\n-\t\t\t\t\t\tif (typeof(opts) === 'string') {\r\n-\t\t\t\t\t\t\tif (opts === 'min' || opts === 'max') {\r\n-\t\t\t\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\t\t\t\treturn obj.slider(opts, val * -1);\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\treturn Math.abs(obj.slider(opts));\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tvar min = opts.min,\r\n-\t\t\t\t\t\t\tmax = opts.max;\r\n-\t\t\t\t\t\topts.min = opts.max = null;\r\n-\t\t\t\t\t\tif (min !== undefined) {\r\n-\t\t\t\t\t\t\topts.max = min * -1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tif (max !== undefined) {\r\n-\t\t\t\t\t\t\topts.min = max * -1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif (typeof(opts) === 'string' && val !== undefined) {\r\n-\t\t\t\t\t\treturn obj.slider(opts, val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn obj.slider(opts);\r\n-\t\t\t\t},\r\n-\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\r\n-\t\t\t\t\tif (tp_inst._defaults.isRTL) {\r\n-\t\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\t\treturn obj.slider('value', val * -1);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\treturn Math.abs(obj.slider('value'));\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\treturn obj.slider('value', val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn obj.slider('value');\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\t\u002F\u002F select methods\r\n-\t\t\tselect: {\r\n-\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\r\n-\t\t\t\t\tvar sel = '\u003Cselect class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\r\n-\t\t\t\t\t\tformat = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\r\n-\r\n-\t\t\t\t\tfor (var i = min; i \u003C= max; i += step) {\r\n-\t\t\t\t\t\tsel += '\u003Coption value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\r\n-\t\t\t\t\t\tif (unit === 'hour') {\r\n-\t\t\t\t\t\t\tsel += $.datepicker.formatTime($.trim(format.replace(\u002F[^ht ]\u002Fig, '')), {hour: i}, tp_inst._defaults);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\telse if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\r\n-\t\t\t\t\t\telse {sel += '0' + i.toString(); }\r\n-\t\t\t\t\t\tsel += '\u003C\u002Foption>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tsel += '\u003C\u002Fselect>';\r\n-\r\n-\t\t\t\t\tobj.children('select').remove();\r\n-\r\n-\t\t\t\t\t$(sel).appendTo(obj).change(function (e) {\r\n-\t\t\t\t\t\ttp_inst._onTimeChange();\r\n-\t\t\t\t\t\ttp_inst._onSelectHandler();\r\n-\t\t\t\t\t\ttp_inst._afterInject();\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\treturn obj;\r\n-\t\t\t\t},\r\n-\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\r\n-\t\t\t\t\tvar o = {},\r\n-\t\t\t\t\t\t$t = obj.children('select');\r\n-\t\t\t\t\tif (typeof(opts) === 'string') {\r\n-\t\t\t\t\t\tif (val === undefined) {\r\n-\t\t\t\t\t\t\treturn $t.data(opts);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\to[opts] = val;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse { o = opts; }\r\n-\t\t\t\t\treturn tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\r\n-\t\t\t\t},\r\n-\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\r\n-\t\t\t\t\tvar $t = obj.children('select');\r\n-\t\t\t\t\tif (val !== undefined) {\r\n-\t\t\t\t\t\treturn $t.val(val);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn $t.val();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} \u002F\u002F end _controls\r\n-\r\n-\t});\r\n-\r\n-\t$.fn.extend({\r\n-\t\t\u002F*\r\n-\t\t* shorthand just to use timepicker.\r\n-\t\t*\u002F\r\n-\t\ttimepicker: function (o) {\r\n-\t\t\to = o || {};\r\n-\t\t\tvar tmp_args = Array.prototype.slice.call(arguments);\r\n-\r\n-\t\t\tif (typeof o === 'object') {\r\n-\t\t\t\ttmp_args[0] = $.extend(o, {\r\n-\t\t\t\t\ttimeOnly: true\r\n-\t\t\t\t});\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $(this).each(function () {\r\n-\t\t\t\t$.fn.datetimepicker.apply($(this), tmp_args);\r\n-\t\t\t});\r\n-\t\t},\r\n-\r\n-\t\t\u002F*\r\n-\t\t* extend timepicker to datepicker\r\n-\t\t*\u002F\r\n-\t\tdatetimepicker: function (o) {\r\n-\t\t\to = o || {};\r\n-\t\t\tvar tmp_args = arguments;\r\n-\r\n-\t\t\tif (typeof(o) === 'string') {\r\n-\t\t\t\tif (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\r\n-\t\t\t\t\treturn $.fn.datepicker.apply($(this[0]), tmp_args);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn this.each(function () {\r\n-\t\t\t\t\t\tvar $t = $(this);\r\n-\t\t\t\t\t\t$t.datepicker.apply($t, tmp_args);\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn this.each(function () {\r\n-\t\t\t\t\tvar $t = $(this);\r\n-\t\t\t\t\t$t.datepicker($.timepicker._newInst($t, o)._defaults);\r\n-\t\t\t\t});\r\n-\t\t\t}\r\n-\t\t}\r\n-\t});\r\n-\r\n-\t\u002F*\r\n-\t* Public Utility to parse date and time\r\n-\t*\u002F\r\n-\t$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\r\n-\t\tvar parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\r\n-\t\tif (parseRes.timeObj) {\r\n-\t\t\tvar t = parseRes.timeObj;\r\n-\t\t\tparseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\r\n-\t\t\tparseRes.date.setMicroseconds(t.microsec);\r\n-\t\t}\r\n-\r\n-\t\treturn parseRes.date;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Public utility to parse time\r\n-\t*\u002F\r\n-\t$.datepicker.parseTime = function (timeFormat, timeString, options) {\r\n-\t\tvar o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\r\n-\t\t\tiso8601 = (timeFormat.replace(\u002F\\'.*?\\'\u002Fg, '').indexOf('Z') !== -1);\r\n-\r\n-\t\t\u002F\u002F Strict parse requires the timeString to match the timeFormat exactly\r\n-\t\tvar strictParse = function (f, s, o) {\r\n-\r\n-\t\t\t\u002F\u002F pattern for standard and localized AM\u002FPM markers\r\n-\t\t\tvar getPatternAmpm = function (amNames, pmNames) {\r\n-\t\t\t\tvar markers = [];\r\n-\t\t\t\tif (amNames) {\r\n-\t\t\t\t\t$.merge(markers, amNames);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (pmNames) {\r\n-\t\t\t\t\t$.merge(markers, pmNames);\r\n-\t\t\t\t}\r\n-\t\t\t\tmarkers = $.map(markers, function (val) {\r\n-\t\t\t\t\treturn val.replace(\u002F[.*+?|()\\[\\]{}\\\\]\u002Fg, '\\\\$&');\r\n-\t\t\t\t});\r\n-\t\t\t\treturn '(' + markers.join('|') + ')?';\r\n-\t\t\t};\r\n-\r\n-\t\t\t\u002F\u002F figure out position of time elements.. cause js cant do named captures\r\n-\t\t\tvar getFormatPositions = function (timeFormat) {\r\n-\t\t\t\tvar finds = timeFormat.toLowerCase().match(\u002F(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')\u002Fg),\r\n-\t\t\t\t\torders = {\r\n-\t\t\t\t\t\th: -1,\r\n-\t\t\t\t\t\tm: -1,\r\n-\t\t\t\t\t\ts: -1,\r\n-\t\t\t\t\t\tl: -1,\r\n-\t\t\t\t\t\tc: -1,\r\n-\t\t\t\t\t\tt: -1,\r\n-\t\t\t\t\t\tz: -1\r\n-\t\t\t\t\t};\r\n-\r\n-\t\t\t\tif (finds) {\r\n-\t\t\t\t\tfor (var i = 0; i \u003C finds.length; i++) {\r\n-\t\t\t\t\t\tif (orders[finds[i].toString().charAt(0)] === -1) {\r\n-\t\t\t\t\t\t\torders[finds[i].toString().charAt(0)] = i + 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\treturn orders;\r\n-\t\t\t};\r\n-\r\n-\t\t\tvar regstr = '^' + f.toString()\r\n-\t\t\t\t\t.replace(\u002F([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\r\n-\t\t\t\t\t\t\tvar ml = match.length;\r\n-\t\t\t\t\t\t\tswitch (match.charAt(0).toLowerCase()) {\r\n-\t\t\t\t\t\t\tcase 'h':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 'm':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 's':\r\n-\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\r\n-\t\t\t\t\t\t\tcase 'l':\r\n-\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\r\n-\t\t\t\t\t\t\tcase 'c':\r\n-\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\r\n-\t\t\t\t\t\t\tcase 'z':\r\n-\t\t\t\t\t\t\t\treturn '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\r\n-\t\t\t\t\t\t\tcase 't':\r\n-\t\t\t\t\t\t\t\treturn getPatternAmpm(o.amNames, o.pmNames);\r\n-\t\t\t\t\t\t\tdefault:    \u002F\u002F literal escaped in quotes\r\n-\t\t\t\t\t\t\t\treturn '(' + match.replace(\u002F\\'\u002Fg, \"\").replace(\u002F(\\.|\\$|\\^|\\\\|\\\u002F|\\(|\\)|\\[|\\]|\\?|\\+|\\*)\u002Fg, function (m) { return \"\\\\\" + m; }) + ')?';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t})\r\n-\t\t\t\t\t.replace(\u002F\\s\u002Fg, '\\\\s?') +\r\n-\t\t\t\t\to.timeSuffix + '$',\r\n-\t\t\t\torder = getFormatPositions(f),\r\n-\t\t\t\tampm = '',\r\n-\t\t\t\ttreg;\r\n-\r\n-\t\t\ttreg = s.match(new RegExp(regstr, 'i'));\r\n-\r\n-\t\t\tvar resTime = {\r\n-\t\t\t\thour: 0,\r\n-\t\t\t\tminute: 0,\r\n-\t\t\t\tsecond: 0,\r\n-\t\t\t\tmillisec: 0,\r\n-\t\t\t\tmicrosec: 0\r\n-\t\t\t};\r\n-\r\n-\t\t\tif (treg) {\r\n-\t\t\t\tif (order.t !== -1) {\r\n-\t\t\t\t\tif (treg[order.t] === undefined || treg[order.t].length === 0) {\r\n-\t\t\t\t\t\tampm = '';\r\n-\t\t\t\t\t\tresTime.ampm = '';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\r\n-\t\t\t\t\t\tresTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (order.h !== -1) {\r\n-\t\t\t\t\tif (ampm === 'AM' && treg[order.h] === '12') {\r\n-\t\t\t\t\t\tresTime.hour = 0; \u002F\u002F 12am = 0 hour\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif (ampm === 'PM' && treg[order.h] !== '12') {\r\n-\t\t\t\t\t\t\tresTime.hour = parseInt(treg[order.h], 10) + 12; \u002F\u002F 12pm = 12 hour, any other pm = hour + 12\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tresTime.hour = Number(treg[order.h]);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif (order.m !== -1) {\r\n-\t\t\t\t\tresTime.minute = Number(treg[order.m]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.s !== -1) {\r\n-\t\t\t\t\tresTime.second = Number(treg[order.s]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.l !== -1) {\r\n-\t\t\t\t\tresTime.millisec = Number(treg[order.l]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.c !== -1) {\r\n-\t\t\t\t\tresTime.microsec = Number(treg[order.c]);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (order.z !== -1 && treg[order.z] !== undefined) {\r\n-\t\t\t\t\tresTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\r\n-\t\t\t\t}\r\n-\r\n-\r\n-\t\t\t\treturn resTime;\r\n-\t\t\t}\r\n-\t\t\treturn false;\r\n-\t\t};\u002F\u002F end strictParse\r\n-\r\n-\t\t\u002F\u002F First try JS Date, if that fails, use strictParse\r\n-\t\tvar looseParse = function (f, s, o) {\r\n-\t\t\ttry {\r\n-\t\t\t\tvar d = new Date('2012-01-01 ' + s);\r\n-\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\td = new Date('2012-01-01T' + s);\r\n-\t\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\t\td = new Date('01\u002F01\u002F2012 ' + s);\r\n-\t\t\t\t\t\tif (isNaN(d.getTime())) {\r\n-\t\t\t\t\t\t\tthrow \"Unable to parse time with native Date: \" + s;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\thour: d.getHours(),\r\n-\t\t\t\t\tminute: d.getMinutes(),\r\n-\t\t\t\t\tsecond: d.getSeconds(),\r\n-\t\t\t\t\tmillisec: d.getMilliseconds(),\r\n-\t\t\t\t\tmicrosec: d.getMicroseconds(),\r\n-\t\t\t\t\ttimezone: d.getTimezoneOffset() * -1\r\n-\t\t\t\t};\r\n-\t\t\t}\r\n-\t\t\tcatch (err) {\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\treturn strictParse(f, s, o);\r\n-\t\t\t\t}\r\n-\t\t\t\tcatch (err2) {\r\n-\t\t\t\t\t$.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\treturn false;\r\n-\t\t}; \u002F\u002F end looseParse\r\n-\r\n-\t\tif (typeof o.parse === \"function\") {\r\n-\t\t\treturn o.parse(timeFormat, timeString, o);\r\n-\t\t}\r\n-\t\tif (o.parse === 'loose') {\r\n-\t\t\treturn looseParse(timeFormat, timeString, o);\r\n-\t\t}\r\n-\t\treturn strictParse(timeFormat, timeString, o);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Public utility to format the time\r\n-\t * @param {string} format format of the time\r\n-\t * @param {Object} time Object not a Date for timezones\r\n-\t * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\r\n-\t * @returns {string} the formatted time\r\n-\t *\u002F\r\n-\t$.datepicker.formatTime = function (format, time, options) {\r\n-\t\toptions = options || {};\r\n-\t\toptions = $.extend({}, $.timepicker._defaults, options);\r\n-\t\ttime = $.extend({\r\n-\t\t\thour: 0,\r\n-\t\t\tminute: 0,\r\n-\t\t\tsecond: 0,\r\n-\t\t\tmillisec: 0,\r\n-\t\t\tmicrosec: 0,\r\n-\t\t\ttimezone: null\r\n-\t\t}, time);\r\n-\r\n-\t\tvar tmptime = format,\r\n-\t\t\tampmName = options.amNames[0],\r\n-\t\t\thour = parseInt(time.hour, 10);\r\n-\r\n-\t\tif (hour > 11) {\r\n-\t\t\tampmName = options.pmNames[0];\r\n-\t\t}\r\n-\r\n-\t\ttmptime = tmptime.replace(\u002F(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\r\n-\t\t\tswitch (match) {\r\n-\t\t\tcase 'HH':\r\n-\t\t\t\treturn ('0' + hour).slice(-2);\r\n-\t\t\tcase 'H':\r\n-\t\t\t\treturn hour;\r\n-\t\t\tcase 'hh':\r\n-\t\t\t\treturn ('0' + convert24to12(hour)).slice(-2);\r\n-\t\t\tcase 'h':\r\n-\t\t\t\treturn convert24to12(hour);\r\n-\t\t\tcase 'mm':\r\n-\t\t\t\treturn ('0' + time.minute).slice(-2);\r\n-\t\t\tcase 'm':\r\n-\t\t\t\treturn time.minute;\r\n-\t\t\tcase 'ss':\r\n-\t\t\t\treturn ('0' + time.second).slice(-2);\r\n-\t\t\tcase 's':\r\n-\t\t\t\treturn time.second;\r\n-\t\t\tcase 'l':\r\n-\t\t\t\treturn ('00' + time.millisec).slice(-3);\r\n-\t\t\tcase 'c':\r\n-\t\t\t\treturn ('00' + time.microsec).slice(-3);\r\n-\t\t\tcase 'z':\r\n-\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\r\n-\t\t\tcase 'Z':\r\n-\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\r\n-\t\t\tcase 'T':\r\n-\t\t\t\treturn ampmName.charAt(0).toUpperCase();\r\n-\t\t\tcase 'TT':\r\n-\t\t\t\treturn ampmName.toUpperCase();\r\n-\t\t\tcase 't':\r\n-\t\t\t\treturn ampmName.charAt(0).toLowerCase();\r\n-\t\t\tcase 'tt':\r\n-\t\t\t\treturn ampmName.toLowerCase();\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn match.replace(\u002F'\u002Fg, \"\");\r\n-\t\t\t}\r\n-\t\t});\r\n-\r\n-\t\treturn tmptime;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* the bad hack :\u002F override datepicker so it doesn't close on select\r\n-\t\u002F\u002F inspired: http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F1252512\u002Fjquery-datepicker-prevent-closing-picker-when-clicking-a-date\u002F1762378#1762378\r\n-\t*\u002F\r\n-\t$.datepicker._base_selectDate = $.datepicker._selectDate;\r\n-\t$.datepicker._selectDate = function (id, dateStr) {\r\n-\t\tvar inst = this._getInst($(id)[0]),\r\n-\t\t\ttp_inst = this._get(inst, 'timepicker'),\r\n-\t\t\twas_inline;\r\n-\r\n-\t\tif (tp_inst && inst.settings.showTimepicker) {\r\n-\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\r\n-\t\t\twas_inline = inst.inline;\r\n-\t\t\tinst.inline = inst.stay_open = true;\r\n-\t\t\t\u002F\u002FThis way the onSelect handler called from calendarpicker get the full dateTime\r\n-\t\t\tthis._base_selectDate(id, dateStr);\r\n-\t\t\tinst.inline = was_inline;\r\n-\t\t\tinst.stay_open = false;\r\n-\t\t\tthis._notifyChange(inst);\r\n-\t\t\tthis._updateDatepicker(inst);\r\n-\t\t} else {\r\n-\t\t\tthis._base_selectDate(id, dateStr);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* second bad hack :\u002F override datepicker so it triggers an event when changing the input field\r\n-\t* and does not redraw the datepicker on every selectDate event\r\n-\t*\u002F\r\n-\t$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\r\n-\t$.datepicker._updateDatepicker = function (inst) {\r\n-\r\n-\t\t\u002F\u002F don't popup the datepicker if there is another instance already opened\r\n-\t\tvar input = inst.input[0];\r\n-\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\r\n-\r\n-\t\t\tthis._base_updateDatepicker(inst);\r\n-\r\n-\t\t\t\u002F\u002F Reload the time control when changing something in the input text field.\r\n-\t\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t\tif (tp_inst) {\r\n-\t\t\t\ttp_inst._addTimePicker(inst);\r\n-\t\t\t}\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* third bad hack :\u002F override datepicker so it allows spaces and colon in the input field\r\n-\t*\u002F\r\n-\t$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\r\n-\t$.datepicker._doKeyPress = function (event) {\r\n-\t\tvar inst = $.datepicker._getInst(event.target),\r\n-\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tif ($.datepicker._get(inst, 'constrainInput')) {\r\n-\t\t\t\tvar ampm = tp_inst.support.ampm,\r\n-\t\t\t\t\ttz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\r\n-\t\t\t\t\tdateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\r\n-\t\t\t\t\tdatetimeChars = tp_inst._defaults.timeFormat.toString()\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002F[hms]\u002Fg, '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTT\u002Fg, ampm ? 'APM' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTt\u002Fg, ampm ? 'AaPpMm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FtT\u002Fg, ampm ? 'AaPpMm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FT\u002Fg, ampm ? 'AP' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ftt\u002Fg, ampm ? 'apm' : '')\r\n-\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ft\u002Fg, ampm ? 'ap' : '') +\r\n-\t\t\t\t\t\t\t\t\t\t\t\" \" + tp_inst._defaults.separator +\r\n-\t\t\t\t\t\t\t\t\t\t\ttp_inst._defaults.timeSuffix +\r\n-\t\t\t\t\t\t\t\t\t\t\t(tz ? tp_inst._defaults.timezoneList.join('') : '') +\r\n-\t\t\t\t\t\t\t\t\t\t\t(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\r\n-\t\t\t\t\t\t\t\t\t\t\tdateChars,\r\n-\t\t\t\t\tchr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\r\n-\t\t\t\treturn event.ctrlKey || (chr \u003C ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $.datepicker._base_doKeyPress(event);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Fourth bad hack :\u002F override _updateAlternate function used in inline mode to init altField\r\n-\t* Update any alternate field to synchronise with the main field.\r\n-\t*\u002F\r\n-\t$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\r\n-\t$.datepicker._updateAlternate = function (inst) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar altField = tp_inst._defaults.altField;\r\n-\t\t\tif (altField) { \u002F\u002F update alternate field too\r\n-\t\t\t\tvar altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\r\n-\t\t\t\t\tdate = this._getDate(inst),\r\n-\t\t\t\t\tformatCfg = $.datepicker._getFormatConfig(inst),\r\n-\t\t\t\t\taltFormattedDateTime = '',\r\n-\t\t\t\t\taltSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\r\n-\t\t\t\t\taltTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\r\n-\t\t\t\t\taltTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\r\n-\r\n-\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\r\n-\t\t\t\tif (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\r\n-\t\t\t\t\tif (tp_inst._defaults.altFormat) {\r\n-\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\telse {\r\n-\t\t\t\t\t\taltFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t$(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\telse {\r\n-\t\t\t$.datepicker._base_updateAlternate(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Override key up event to sync manual input changes.\r\n-\t*\u002F\r\n-\t$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\r\n-\t$.datepicker._doKeyUp = function (event) {\r\n-\t\tvar inst = $.datepicker._getInst(event.target),\r\n-\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\t$.datepicker._updateDatepicker(inst);\r\n-\t\t\t\t} catch (err) {\r\n-\t\t\t\t\t$.timepicker.log(err);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $.datepicker._base_doKeyUp(event);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override \"Today\" button to also grab the time and set it to input field.\r\n-\t*\u002F\r\n-\t$.datepicker._base_gotoToday = $.datepicker._gotoToday;\r\n-\t$.datepicker._gotoToday = function (id) {\r\n-\t\tvar inst = this._getInst($(id)[0]);\r\n-\t\tthis._base_gotoToday(id);\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (!tp_inst) {\r\n-\t\t  return;\r\n-\t\t}\r\n-\r\n-\t\tvar tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\r\n-\t\tvar now = new Date();\r\n-\t\tnow.setMinutes(now.getMinutes() + now.getTimezoneOffset() + parseInt(tzoffset, 10));\r\n-\t\tthis._setTime(inst, now);\r\n-\t\tthis._setDate(inst, now);\r\n-\t\ttp_inst._onSelectHandler();\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Disable & enable the Time in the datetimepicker\r\n-\t*\u002F\r\n-\t$.datepicker._disableTimepickerDatepicker = function (target) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\r\n-\t\tif (tp_inst) {\r\n-\t\t\tinst.settings.showTimepicker = false;\r\n-\t\t\ttp_inst._defaults.showTimepicker = false;\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t$.datepicker._enableTimepickerDatepicker = function (target) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\r\n-\t\tif (tp_inst) {\r\n-\t\t\tinst.settings.showTimepicker = true;\r\n-\t\t\ttp_inst._defaults.showTimepicker = true;\r\n-\t\t\ttp_inst._addTimePicker(inst); \u002F\u002F Could be disabled on page load\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create our own set time function\r\n-\t*\u002F\r\n-\t$.datepicker._setTime = function (inst, date) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar defaults = tp_inst._defaults;\r\n-\r\n-\t\t\t\u002F\u002F calling _setTime with no date sets time to defaults\r\n-\t\t\ttp_inst.hour = date ? date.getHours() : defaults.hour;\r\n-\t\t\ttp_inst.minute = date ? date.getMinutes() : defaults.minute;\r\n-\t\t\ttp_inst.second = date ? date.getSeconds() : defaults.second;\r\n-\t\t\ttp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\r\n-\t\t\ttp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\r\n-\r\n-\t\t\t\u002F\u002Fcheck if within min\u002Fmax times..\r\n-\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\r\n-\r\n-\t\t\ttp_inst._onTimeChange();\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create new public method to set only time, callable as $().datepicker('setTime', date)\r\n-\t*\u002F\r\n-\t$.datepicker._setTimeDatepicker = function (target, date, withDate) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\tthis._setDateFromField(inst);\r\n-\t\t\tvar tp_date;\r\n-\t\t\tif (date) {\r\n-\t\t\t\tif (typeof date === \"string\") {\r\n-\t\t\t\t\ttp_inst._parseTime(date, withDate);\r\n-\t\t\t\t\ttp_date = new Date();\r\n-\t\t\t\t\ttp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\r\n-\t\t\t\t\ttp_date.setMicroseconds(tp_inst.microsec);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\ttp_date = new Date(date.getTime());\r\n-\t\t\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\r\n-\t\t\t\t}\r\n-\t\t\t\tif (tp_date.toString() === 'Invalid Date') {\r\n-\t\t\t\t\ttp_date = undefined;\r\n-\t\t\t\t}\r\n-\t\t\t\tthis._setTime(inst, tp_date);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override setDate() to allow setting time too within Date object\r\n-\t*\u002F\r\n-\t$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\r\n-\t$.datepicker._setDateDatepicker = function (target, _date) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tvar date = _date;\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif (typeof(_date) === 'string') {\r\n-\t\t\tdate = new Date(_date);\r\n-\t\t\tif (!date.getTime()) {\r\n-\t\t\t\tthis._base_setDateDatepicker.apply(this, arguments);\r\n-\t\t\t\tdate = $(target).datepicker('getDate');\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tvar tp_date;\r\n-\t\tif (date instanceof Date) {\r\n-\t\t\ttp_date = new Date(date.getTime());\r\n-\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\r\n-\t\t} else {\r\n-\t\t\ttp_date = date;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\r\n-\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\r\n-\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\r\n-\t\t\u002F\u002F If a timezone is different in tp, keep the timezone as is\r\n-\t\tif (tp_inst && tp_date) {\r\n-\t\t\t\u002F\u002F look out for DST if tz wasn't specified\r\n-\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\r\n-\t\t\t\ttp_inst.timezone = tp_date.getTimezoneOffset() * -1;\r\n-\t\t\t}\r\n-\t\t\tdate = $.timepicker.timezoneAdjust(date, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()), tp_inst.timezone);\r\n-\t\t\ttp_date = $.timepicker.timezoneAdjust(tp_date, $.timepicker.timezoneOffsetString(-tp_date.getTimezoneOffset()), tp_inst.timezone);\r\n-\t\t}\r\n-\r\n-\t\tthis._updateDatepicker(inst);\r\n-\t\tthis._base_setDateDatepicker.apply(this, arguments);\r\n-\t\tthis._setTimeDatepicker(target, tp_date, true);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override getDate() to allow getting time too within Date object\r\n-\t*\u002F\r\n-\t$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\r\n-\t$.datepicker._getDateDatepicker = function (target, noDefault) {\r\n-\t\tvar inst = this._getInst(target);\r\n-\t\tif (!inst) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\r\n-\t\tif (tp_inst) {\r\n-\t\t\t\u002F\u002F if it hasn't yet been defined, grab from field\r\n-\t\t\tif (inst.lastVal === undefined) {\r\n-\t\t\t\tthis._setDateFromField(inst, noDefault);\r\n-\t\t\t}\r\n-\r\n-\t\t\tvar date = this._getDate(inst);\r\n-\r\n-\t\t\tvar currDT = null;\r\n-\r\n-\t\t\tif (tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) {\r\n-\t\t\t\tcurrDT = tp_inst.$input.val() + ' ' + tp_inst.$altInput.val();\r\n-\t\t\t}\r\n-\t\t\telse if (tp_inst.$input.get(0).tagName !== 'INPUT' && tp_inst.$altInput) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * in case the datetimepicker has been applied to a non-input tag for inline UI,\r\n-\t\t\t\t * and the user has not configured the plugin to display only time in altInput,\r\n-\t\t\t\t * pick current date time from the altInput (and hope for the best, for now, until \"ER1\" is applied)\r\n-\t\t\t\t *\r\n-\t\t\t\t * @todo ER1. Since altInput can have a totally difference format, convert it to standard format by reading input format from \"altFormat\" and \"altTimeFormat\" option values\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tcurrDT = tp_inst.$altInput.val();\r\n-\t\t\t}\r\n-\t\t\telse {\r\n-\t\t\t\tcurrDT = tp_inst.$input.val();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\r\n-\t\t\t\tdate.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\r\n-\t\t\t\tdate.setMicroseconds(tp_inst.microsec);\r\n-\r\n-\t\t\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\r\n-\t\t\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\r\n-\t\t\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\r\n-\t\t\t\tif (tp_inst.timezone != null) {\r\n-\t\t\t\t\t\u002F\u002F look out for DST if tz wasn't specified\r\n-\t\t\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\r\n-\t\t\t\t\t\ttp_inst.timezone = date.getTimezoneOffset() * -1;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdate = $.timepicker.timezoneAdjust(date, tp_inst.timezone, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()));\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\treturn date;\r\n-\t\t}\r\n-\t\treturn this._base_getDateDatepicker(target, noDefault);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\r\n-\t* An option in datapicker to ignore extra format characters would be nicer.\r\n-\t*\u002F\r\n-\t$.datepicker._base_parseDate = $.datepicker.parseDate;\r\n-\t$.datepicker.parseDate = function (format, value, settings) {\r\n-\t\tvar date;\r\n-\t\ttry {\r\n-\t\t\tdate = this._base_parseDate(format, value, settings);\r\n-\t\t} catch (err) {\r\n-\t\t\t\u002F\u002F Hack!  The error message ends with a colon, a space, and\r\n-\t\t\t\u002F\u002F the \"extra\" characters.  We rely on that instead of\r\n-\t\t\t\u002F\u002F attempting to perfectly reproduce the parsing algorithm.\r\n-\t\t\tif (err.indexOf(\":\") >= 0) {\r\n-\t\t\t\tdate = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\r\n-\t\t\t\t$.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow err;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn date;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override formatDate to set date with time to the input\r\n-\t*\u002F\r\n-\t$.datepicker._base_formatDate = $.datepicker._formatDate;\r\n-\t$.datepicker._formatDate = function (inst, day, month, year) {\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\ttp_inst._updateDateTime(inst);\r\n-\t\t\treturn tp_inst.$input.val();\r\n-\t\t}\r\n-\t\treturn this._base_formatDate(inst);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\r\n-\t*\u002F\r\n-\t$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\r\n-\t$.datepicker._optionDatepicker = function (target, name, value) {\r\n-\t\tvar inst = this._getInst(target),\r\n-\t\t\tname_clone;\r\n-\t\tif (!inst) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\tvar tp_inst = this._get(inst, 'timepicker');\r\n-\t\tif (tp_inst) {\r\n-\t\t\tvar min = null,\r\n-\t\t\t\tmax = null,\r\n-\t\t\t\tonselect = null,\r\n-\t\t\t\toverrides = tp_inst._defaults.evnts,\r\n-\t\t\t\tfns = {},\r\n-\t\t\t\tprop,\r\n-\t\t\t\tret,\r\n-\t\t\t\toldVal,\r\n-\t\t\t\t$target;\r\n-\t\t\tif (typeof name === 'string') { \u002F\u002F if min\u002Fmax was set with the string\r\n-\t\t\t\tif (name === 'minDate' || name === 'minDateTime') {\r\n-\t\t\t\t\tmin = value;\r\n-\t\t\t\t} else if (name === 'maxDate' || name === 'maxDateTime') {\r\n-\t\t\t\t\tmax = value;\r\n-\t\t\t\t} else if (name === 'onSelect') {\r\n-\t\t\t\t\tonselect = value;\r\n-\t\t\t\t} else if (overrides.hasOwnProperty(name)) {\r\n-\t\t\t\t\tif (typeof (value) === 'undefined') {\r\n-\t\t\t\t\t\treturn overrides[name];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tfns[name] = value;\r\n-\t\t\t\t\tname_clone = {}; \u002F\u002Fempty results in exiting function after overrides updated\r\n-\t\t\t\t}\r\n-\t\t\t} else if (typeof name === 'object') { \u002F\u002Fif min\u002Fmax was set with the JSON\r\n-\t\t\t\tif (name.minDate) {\r\n-\t\t\t\t\tmin = name.minDate;\r\n-\t\t\t\t} else if (name.minDateTime) {\r\n-\t\t\t\t\tmin = name.minDateTime;\r\n-\t\t\t\t} else if (name.maxDate) {\r\n-\t\t\t\t\tmax = name.maxDate;\r\n-\t\t\t\t} else if (name.maxDateTime) {\r\n-\t\t\t\t\tmax = name.maxDateTime;\r\n-\t\t\t\t}\r\n-\t\t\t\tfor (prop in overrides) {\r\n-\t\t\t\t\tif (overrides.hasOwnProperty(prop) && name[prop]) {\r\n-\t\t\t\t\t\tfns[prop] = name[prop];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tfor (prop in fns) {\r\n-\t\t\t\tif (fns.hasOwnProperty(prop)) {\r\n-\t\t\t\t\toverrides[prop] = fns[prop];\r\n-\t\t\t\t\tif (!name_clone) { name_clone = $.extend({}, name); }\r\n-\t\t\t\t\tdelete name_clone[prop];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tif (name_clone && isEmptyObject(name_clone)) { return; }\r\n-\t\t\tif (min) { \u002F\u002Fif min was set\r\n-\t\t\t\tif (min === 0) {\r\n-\t\t\t\t\tmin = new Date();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tmin = new Date(min);\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst._defaults.minDate = min;\r\n-\t\t\t\ttp_inst._defaults.minDateTime = min;\r\n-\t\t\t} else if (max) { \u002F\u002Fif max was set\r\n-\t\t\t\tif (max === 0) {\r\n-\t\t\t\t\tmax = new Date();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tmax = new Date(max);\r\n-\t\t\t\t}\r\n-\t\t\t\ttp_inst._defaults.maxDate = max;\r\n-\t\t\t\ttp_inst._defaults.maxDateTime = max;\r\n-\t\t\t} else if (onselect) {\r\n-\t\t\t\ttp_inst._defaults.onSelect = onselect;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Datepicker will override our date when we call _base_optionDatepicker when\r\n-\t\t\t\u002F\u002F calling minDate\u002FmaxDate, so we will first grab the value, call\r\n-\t\t\t\u002F\u002F _base_optionDatepicker, then set our value back.\r\n-\t\t\tif(min || max){\r\n-\t\t\t\t$target = $(target);\r\n-\t\t\t\toldVal = $target.datetimepicker('getDate');\r\n-\t\t\t\tret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\r\n-\t\t\t\t$target.datetimepicker('setDate', oldVal);\r\n-\t\t\t\treturn ret;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif (value === undefined) {\r\n-\t\t\treturn this._base_optionDatepicker.call($.datepicker, target, name);\r\n-\t\t}\r\n-\t\treturn this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\r\n-\t* it will return false for all objects\r\n-\t*\u002F\r\n-\tvar isEmptyObject = function (obj) {\r\n-\t\tvar prop;\r\n-\t\tfor (prop in obj) {\r\n-\t\t\tif (obj.hasOwnProperty(prop)) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn true;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* jQuery extend now ignores nulls!\r\n-\t*\u002F\r\n-\tvar extendRemove = function (target, props) {\r\n-\t\t$.extend(target, props);\r\n-\t\tfor (var name in props) {\r\n-\t\t\tif (props[name] === null || props[name] === undefined) {\r\n-\t\t\t\ttarget[name] = props[name];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn target;\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Determine by the time format which units are supported\r\n-\t* Returns an object of booleans for each unit\r\n-\t*\u002F\r\n-\tvar detectSupport = function (timeFormat) {\r\n-\t\tvar tf = timeFormat.replace(\u002F'.*?'\u002Fg, '').toLowerCase(), \u002F\u002F removes literals\r\n-\t\t\tisIn = function (f, t) { \u002F\u002F does the format contain the token?\r\n-\t\t\t\t\treturn f.indexOf(t) !== -1 ? true : false;\r\n-\t\t\t\t};\r\n-\t\treturn {\r\n-\t\t\t\thour: isIn(tf, 'h'),\r\n-\t\t\t\tminute: isIn(tf, 'm'),\r\n-\t\t\t\tsecond: isIn(tf, 's'),\r\n-\t\t\t\tmillisec: isIn(tf, 'l'),\r\n-\t\t\t\tmicrosec: isIn(tf, 'c'),\r\n-\t\t\t\ttimezone: isIn(tf, 'z'),\r\n-\t\t\t\tampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\r\n-\t\t\t\tiso8601: isIn(timeFormat, 'Z')\r\n-\t\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Converts 24 hour format into 12 hour\r\n-\t* Returns 12 hour without leading 0\r\n-\t*\u002F\r\n-\tvar convert24to12 = function (hour) {\r\n-\t\thour %= 12;\r\n-\r\n-\t\tif (hour === 0) {\r\n-\t\t\thour = 12;\r\n-\t\t}\r\n-\r\n-\t\treturn String(hour);\r\n-\t};\r\n-\r\n-\tvar computeEffectiveSetting = function (settings, property) {\r\n-\t\treturn settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Splits datetime string into date and time substrings.\r\n-\t* Throws exception when date can't be parsed\r\n-\t* Returns {dateString: dateString, timeString: timeString}\r\n-\t*\u002F\r\n-\tvar splitDateTime = function (dateTimeString, timeSettings) {\r\n-\t\t\u002F\u002F The idea is to get the number separator occurrences in datetime and the time format requested (since time has\r\n-\t\t\u002F\u002F fewer unknowns, mostly numbers and am\u002Fpm). We will use the time pattern to split.\r\n-\t\tvar separator = computeEffectiveSetting(timeSettings, 'separator'),\r\n-\t\t\tformat = computeEffectiveSetting(timeSettings, 'timeFormat'),\r\n-\t\t\ttimeParts = format.split(separator), \u002F\u002F how many occurrences of separator may be in our format?\r\n-\t\t\ttimePartsLen = timeParts.length,\r\n-\t\t\tallParts = dateTimeString.split(separator),\r\n-\t\t\tallPartsLen = allParts.length;\r\n-\r\n-\t\tif (allPartsLen > 1) {\r\n-\t\t\treturn {\r\n-\t\t\t\tdateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\r\n-\t\t\t\ttimeString: allParts.splice(0, timePartsLen).join(separator)\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\treturn {\r\n-\t\t\tdateString: dateTimeString,\r\n-\t\t\ttimeString: ''\r\n-\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Internal function to parse datetime interval\r\n-\t* Returns: {date: Date, timeObj: Object}, where\r\n-\t*   date - parsed date without time (type Date)\r\n-\t*   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\r\n-\t*\u002F\r\n-\tvar parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\r\n-\t\tvar date,\r\n-\t\t\tparts,\r\n-\t\t\tparsedTime;\r\n-\r\n-\t\tparts = splitDateTime(dateTimeString, timeSettings);\r\n-\t\tdate = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\r\n-\r\n-\t\tif (parts.timeString === '') {\r\n-\t\t\treturn {\r\n-\t\t\t\tdate: date\r\n-\t\t\t};\r\n-\t\t}\r\n-\r\n-\t\tparsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\r\n-\r\n-\t\tif (!parsedTime) {\r\n-\t\t\tthrow 'Wrong time format';\r\n-\t\t}\r\n-\r\n-\t\treturn {\r\n-\t\t\tdate: date,\r\n-\t\t\ttimeObj: parsedTime\r\n-\t\t};\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Internal function to set timezone_select to the local timezone\r\n-\t*\u002F\r\n-\tvar selectLocalTimezone = function (tp_inst, date) {\r\n-\t\tif (tp_inst && tp_inst.timezone_select) {\r\n-\t\t\tvar now = date || new Date();\r\n-\t\t\ttp_inst.timezone_select.val(-now.getTimezoneOffset());\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Create a Singleton Instance\r\n-\t*\u002F\r\n-\t$.timepicker = new Timepicker();\r\n-\r\n-\t\u002F**\r\n-\t * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\r\n-\t * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\r\n-\t * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\r\n-\t * @return {string}\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\r\n-\t\tif (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes \u003C -720) {\r\n-\t\t\treturn tzMinutes;\r\n-\t\t}\r\n-\r\n-\t\tvar off = tzMinutes,\r\n-\t\t\tminutes = off % 60,\r\n-\t\t\thours = (off - minutes) \u002F 60,\r\n-\t\t\tiso = iso8601 ? ':' : '',\r\n-\t\t\ttz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\r\n-\r\n-\t\tif (tz === '+00:00') {\r\n-\t\t\treturn 'Z';\r\n-\t\t}\r\n-\t\treturn tz;\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Get the number in minutes that represents a timezone string\r\n-\t * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\r\n-\t * @return {number} the offset minutes or the original string if it doesn't match expectations\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneOffsetNumber = function (tzString) {\r\n-\t\tvar normalized = tzString.toString().replace(':', ''); \u002F\u002F excuse any iso8601, end up with \"+1245\"\r\n-\r\n-\t\tif (normalized.toUpperCase() === 'Z') { \u002F\u002F if iso8601 with Z, its 0 minute offset\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\tif (!\u002F^(\\-|\\+)\\d{4}$\u002F.test(normalized)) { \u002F\u002F possibly a user defined tz, so just give it back\r\n-\t\t\treturn parseInt(tzString, 10);\r\n-\t\t}\r\n-\r\n-\t\treturn ((normalized.substr(0, 1) === '-' ? -1 : 1) * \u002F\u002F plus or minus\r\n-\t\t\t\t\t((parseInt(normalized.substr(1, 2), 10) * 60) + \u002F\u002F hours (converted to minutes)\r\n-\t\t\t\t\tparseInt(normalized.substr(3, 2), 10))); \u002F\u002F minutes\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\r\n-\t * @param  {Date} date\r\n-\t * @param  {string} fromTimezone formatted like \"+0500\", \"-1245\"\r\n-\t * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\r\n-\t * @return {Date}\r\n-\t *\u002F\r\n-\t$.timepicker.timezoneAdjust = function (date, fromTimezone, toTimezone) {\r\n-\t\tvar fromTz = $.timepicker.timezoneOffsetNumber(fromTimezone);\r\n-\t\tvar toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\r\n-\t\tif (!isNaN(toTz)) {\r\n-\t\t\tdate.setMinutes(date.getMinutes() + (-fromTz) - (-toTz));\r\n-\t\t}\r\n-\t\treturn date;\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * n.b. The input value must be correctly formatted (reformatting is not supported)\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the timepicker() call\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.timeRange = function (startTime, endTime, options) {\r\n-\t\treturn $.timepicker.handleRange('timepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @param  {string} method Can be used to specify the type of picker to be added\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.datetimeRange = function (startTime, endTime, options) {\r\n-\t\t$.timepicker.handleRange('datetimepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.dateRange = function (startTime, endTime, options) {\r\n-\t\t$.timepicker.handleRange('datepicker', startTime, endTime, options);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Calls `method` on the `startTime` and `endTime` elements, and configures them to\r\n-\t * enforce date range limits.\r\n-\t * @param  {string} method Can be used to specify the type of picker to be added\r\n-\t * @param  {Element} startTime\r\n-\t * @param  {Element} endTime\r\n-\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\r\n-\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\r\n-\t * @return {jQuery}\r\n-\t *\u002F\r\n-\t$.timepicker.handleRange = function (method, startTime, endTime, options) {\r\n-\t\toptions = $.extend({}, {\r\n-\t\t\tminInterval: 0, \u002F\u002F min allowed interval in milliseconds\r\n-\t\t\tmaxInterval: 0, \u002F\u002F max allowed interval in milliseconds\r\n-\t\t\tstart: {},      \u002F\u002F options for start picker\r\n-\t\t\tend: {}         \u002F\u002F options for end picker\r\n-\t\t}, options);\r\n-\r\n-\t\t\u002F\u002F for the mean time this fixes an issue with calling getDate with timepicker()\r\n-\t\tvar timeOnly = false;\r\n-\t\tif(method === 'timepicker'){\r\n-\t\t\ttimeOnly = true;\r\n-\t\t\tmethod = 'datetimepicker';\r\n-\t\t}\r\n-\r\n-\t\tfunction checkDates(changed, other) {\r\n-\t\t\tvar startdt = startTime[method]('getDate'),\r\n-\t\t\t\tenddt = endTime[method]('getDate'),\r\n-\t\t\t\tchangeddt = changed[method]('getDate');\r\n-\r\n-\t\t\tif (startdt !== null) {\r\n-\t\t\t\tvar minDate = new Date(startdt.getTime()),\r\n-\t\t\t\t\tmaxDate = new Date(startdt.getTime());\r\n-\r\n-\t\t\t\tminDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\r\n-\t\t\t\tmaxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\r\n-\r\n-\t\t\t\tif (options.minInterval > 0 && minDate > enddt) { \u002F\u002F minInterval check\r\n-\t\t\t\t\tendTime[method]('setDate', minDate);\r\n-\t\t\t\t}\r\n-\t\t\t\telse if (options.maxInterval > 0 && maxDate \u003C enddt) { \u002F\u002F max interval check\r\n-\t\t\t\t\tendTime[method]('setDate', maxDate);\r\n-\t\t\t\t}\r\n-\t\t\t\telse if (startdt > enddt) {\r\n-\t\t\t\t\tother[method]('setDate', changeddt);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tfunction selected(changed, other, option) {\r\n-\t\t\tif (!changed.val()) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tvar date = changed[method].call(changed, 'getDate');\r\n-\t\t\tif (date !== null && options.minInterval > 0) {\r\n-\t\t\t\tif (option === 'minDate') {\r\n-\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() + options.minInterval);\r\n-\t\t\t\t}\r\n-\t\t\t\tif (option === 'maxDate') {\r\n-\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() - options.minInterval);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif (date.getTime) {\r\n-\t\t\t\tother[method].call(other, 'option', option, date);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$.fn[method].call(startTime, $.extend({\r\n-\t\t\ttimeOnly: timeOnly,\r\n-\t\t\tonClose: function (dateText, inst) {\r\n-\t\t\t\tcheckDates($(this), endTime);\r\n-\t\t\t},\r\n-\t\t\tonSelect: function (selectedDateTime) {\r\n-\t\t\t\tselected($(this), endTime, 'minDate');\r\n-\t\t\t}\r\n-\t\t}, options, options.start));\r\n-\t\t$.fn[method].call(endTime, $.extend({\r\n-\t\t\ttimeOnly: timeOnly,\r\n-\t\t\tonClose: function (dateText, inst) {\r\n-\t\t\t\tcheckDates($(this), startTime);\r\n-\t\t\t},\r\n-\t\t\tonSelect: function (selectedDateTime) {\r\n-\t\t\t\tselected($(this), startTime, 'maxDate');\r\n-\t\t\t}\r\n-\t\t}, options, options.end));\r\n-\r\n-\t\tcheckDates(startTime, endTime);\r\n-\r\n-\t\tselected(startTime, endTime, 'minDate');\r\n-\t\tselected(endTime, startTime, 'maxDate');\r\n-\r\n-\t\treturn $([startTime.get(0), endTime.get(0)]);\r\n-\t};\r\n-\r\n-\t\u002F**\r\n-\t * Log error or data to the console during error or debugging\r\n-\t * @param  {Object} err pass any type object to log to the console during error or debugging\r\n-\t * @return {void}\r\n-\t *\u002F\r\n-\t$.timepicker.log = function () {\r\n-\t\t\u002F\u002F Older IE (9, maybe 10) throw error on accessing `window.console.log.apply`, so check first.\r\n-\t\tif (window.console && window.console.log && window.console.log.apply) {\r\n-\t\t\twindow.console.log.apply(window.console, Array.prototype.slice.call(arguments));\r\n-\t\t}\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t * Add util object to allow access to private methods for testability.\r\n-\t *\u002F\r\n-\t$.timepicker._util = {\r\n-\t\t_extendRemove: extendRemove,\r\n-\t\t_isEmptyObject: isEmptyObject,\r\n-\t\t_convert24to12: convert24to12,\r\n-\t\t_detectSupport: detectSupport,\r\n-\t\t_selectLocalTimezone: selectLocalTimezone,\r\n-\t\t_computeEffectiveSetting: computeEffectiveSetting,\r\n-\t\t_splitDateTime: splitDateTime,\r\n-\t\t_parseDateTimeInternal: parseDateTimeInternal\r\n-\t};\r\n-\r\n-\t\u002F*\r\n-\t* Microsecond support\r\n-\t*\u002F\r\n-\tif (!Date.prototype.getMicroseconds) {\r\n-\t\tDate.prototype.microseconds = 0;\r\n-\t\tDate.prototype.getMicroseconds = function () { return this.microseconds; };\r\n-\t\tDate.prototype.setMicroseconds = function (m) {\r\n-\t\t\tthis.setMilliseconds(this.getMilliseconds() + Math.floor(m \u002F 1000));\r\n-\t\t\tthis.microseconds = m % 1000;\r\n-\t\t\treturn this;\r\n-\t\t};\r\n-\t}\r\n-\r\n-\t\u002F*\r\n-\t* Keep up with the version\r\n-\t*\u002F\r\n-\t$.timepicker.version = \"1.6.3\";\r\n-\r\n-}));\r\n+\u002F*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20\n+* http:\u002F\u002Ftrentrichardson.com\u002Fexamples\u002Ftimepicker\n+* Copyright (c) 2016 Trent Richardson; Licensed MIT *\u002F\n+(function (factory) {\n+\tif (typeof define === 'function' && define.amd) {\n+\t\tdefine(['jquery', 'jquery-ui'], factory);\n+\t} else {\n+\t\tfactory(jQuery);\n+\t}\n+}(function ($) {\n+\n+\t\u002F*\n+\t* Lets not redefine timepicker, Prevent \"Uncaught RangeError: Maximum call stack size exceeded\"\n+\t*\u002F\n+\t$.ui.timepicker = $.ui.timepicker || {};\n+\tif ($.ui.timepicker.version) {\n+\t\treturn;\n+\t}\n+\n+\t\u002F*\n+\t* Extend jQueryUI, get it started with our version number\n+\t*\u002F\n+\t$.extend($.ui, {\n+\t\ttimepicker: {\n+\t\t\tversion: \"1.6.3\"\n+\t\t}\n+\t});\n+\n+\t\u002F*\n+\t* Timepicker manager.\n+\t* Use the singleton instance of this class, $.timepicker, to interact with the time picker.\n+\t* Settings for (groups of) time pickers are maintained in an instance object,\n+\t* allowing multiple different settings on the same page.\n+\t*\u002F\n+\tvar Timepicker = function () {\n+\t\tthis.regional = []; \u002F\u002F Available regional settings, indexed by language code\n+\t\tthis.regional[''] = { \u002F\u002F Default regional settings\n+\t\t\tcurrentText: 'Now',\n+\t\t\tcloseText: 'Done',\n+\t\t\tamNames: ['AM', 'A'],\n+\t\t\tpmNames: ['PM', 'P'],\n+\t\t\ttimeFormat: 'HH:mm',\n+\t\t\ttimeSuffix: '',\n+\t\t\ttimeOnlyTitle: 'Choose Time',\n+\t\t\ttimeText: 'Time',\n+\t\t\thourText: 'Hour',\n+\t\t\tminuteText: 'Minute',\n+\t\t\tsecondText: 'Second',\n+\t\t\tmillisecText: 'Millisecond',\n+\t\t\tmicrosecText: 'Microsecond',\n+\t\t\ttimezoneText: 'Time Zone',\n+\t\t\tisRTL: false\n+\t\t};\n+\t\tthis._defaults = { \u002F\u002F Global defaults for all the datetime picker instances\n+\t\t\tshowButtonPanel: true,\n+\t\t\ttimeOnly: false,\n+\t\t\ttimeOnlyShowDate: false,\n+\t\t\tshowHour: null,\n+\t\t\tshowMinute: null,\n+\t\t\tshowSecond: null,\n+\t\t\tshowMillisec: null,\n+\t\t\tshowMicrosec: null,\n+\t\t\tshowTimezone: null,\n+\t\t\tshowTime: true,\n+\t\t\tstepHour: 1,\n+\t\t\tstepMinute: 1,\n+\t\t\tstepSecond: 1,\n+\t\t\tstepMillisec: 1,\n+\t\t\tstepMicrosec: 1,\n+\t\t\thour: 0,\n+\t\t\tminute: 0,\n+\t\t\tsecond: 0,\n+\t\t\tmillisec: 0,\n+\t\t\tmicrosec: 0,\n+\t\t\ttimezone: null,\n+\t\t\thourMin: 0,\n+\t\t\tminuteMin: 0,\n+\t\t\tsecondMin: 0,\n+\t\t\tmillisecMin: 0,\n+\t\t\tmicrosecMin: 0,\n+\t\t\thourMax: 23,\n+\t\t\tminuteMax: 59,\n+\t\t\tsecondMax: 59,\n+\t\t\tmillisecMax: 999,\n+\t\t\tmicrosecMax: 999,\n+\t\t\tminDateTime: null,\n+\t\t\tmaxDateTime: null,\n+\t\t\tmaxTime: null,\n+\t\t\tminTime: null,\n+\t\t\tonSelect: null,\n+\t\t\thourGrid: 0,\n+\t\t\tminuteGrid: 0,\n+\t\t\tsecondGrid: 0,\n+\t\t\tmillisecGrid: 0,\n+\t\t\tmicrosecGrid: 0,\n+\t\t\talwaysSetTime: true,\n+\t\t\tseparator: ' ',\n+\t\t\taltFieldTimeOnly: true,\n+\t\t\taltTimeFormat: null,\n+\t\t\taltSeparator: null,\n+\t\t\taltTimeSuffix: null,\n+\t\t\taltRedirectFocus: true,\n+\t\t\tpickerTimeFormat: null,\n+\t\t\tpickerTimeSuffix: null,\n+\t\t\tshowTimepicker: true,\n+\t\t\ttimezoneList: null,\n+\t\t\taddSliderAccess: false,\n+\t\t\tsliderAccessArgs: null,\n+\t\t\tcontrolType: 'slider',\n+\t\t\toneLine: false,\n+\t\t\tdefaultValue: null,\n+\t\t\tparse: 'strict',\n+\t\t\tafterInject: null\n+\t\t};\n+\t\t$.extend(this._defaults, this.regional['']);\n+\t};\n+\n+\t$.extend(Timepicker.prototype, {\n+\t\t$input: null,\n+\t\t$altInput: null,\n+\t\t$timeObj: null,\n+\t\tinst: null,\n+\t\thour_slider: null,\n+\t\tminute_slider: null,\n+\t\tsecond_slider: null,\n+\t\tmillisec_slider: null,\n+\t\tmicrosec_slider: null,\n+\t\ttimezone_select: null,\n+\t\tmaxTime: null,\n+\t\tminTime: null,\n+\t\thour: 0,\n+\t\tminute: 0,\n+\t\tsecond: 0,\n+\t\tmillisec: 0,\n+\t\tmicrosec: 0,\n+\t\ttimezone: null,\n+\t\thourMinOriginal: null,\n+\t\tminuteMinOriginal: null,\n+\t\tsecondMinOriginal: null,\n+\t\tmillisecMinOriginal: null,\n+\t\tmicrosecMinOriginal: null,\n+\t\thourMaxOriginal: null,\n+\t\tminuteMaxOriginal: null,\n+\t\tsecondMaxOriginal: null,\n+\t\tmillisecMaxOriginal: null,\n+\t\tmicrosecMaxOriginal: null,\n+\t\tampm: '',\n+\t\tformattedDate: '',\n+\t\tformattedTime: '',\n+\t\tformattedDateTime: '',\n+\t\ttimezoneList: null,\n+\t\tunits: ['hour', 'minute', 'second', 'millisec', 'microsec'],\n+\t\tsupport: {},\n+\t\tcontrol: null,\n+\n+\t\t\u002F*\n+\t\t* Override the default settings for all instances of the time picker.\n+\t\t* @param  {Object} settings  object - the new settings to use as defaults (anonymous object)\n+\t\t* @return {Object} the manager object\n+\t\t*\u002F\n+\t\tsetDefaults: function (settings) {\n+\t\t\textendRemove(this._defaults, settings || {});\n+\t\t\treturn this;\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Create a new Timepicker instance\n+\t\t*\u002F\n+\t\t_newInst: function ($input, opts) {\n+\t\t\tvar tp_inst = new Timepicker(),\n+\t\t\t\tinlineSettings = {},\n+\t\t\t\tfns = {},\n+\t\t\t\toverrides, i;\n+\n+\t\t\tfor (var attrName in this._defaults) {\n+\t\t\t\tif (this._defaults.hasOwnProperty(attrName)) {\n+\t\t\t\t\tvar attrValue = $input.attr('time:' + attrName);\n+\t\t\t\t\tif (attrValue) {\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\tinlineSettings[attrName] = eval(attrValue);\n+\t\t\t\t\t\t} catch (err) {\n+\t\t\t\t\t\t\tinlineSettings[attrName] = attrValue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\toverrides = {\n+\t\t\t\tbeforeShow: function (input, dp_inst) {\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.beforeShow)) {\n+\t\t\t\t\t\treturn tp_inst._defaults.evnts.beforeShow.call($input[0], input, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tonChangeMonthYear: function (year, month, dp_inst) {\n+\t\t\t\t\t\u002F\u002F Update the time as well : this prevents the time from disappearing from the $input field.\n+\t\t\t\t\t\u002F\u002F tp_inst._updateDateTime(dp_inst);\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onChangeMonthYear)) {\n+\t\t\t\t\t\ttp_inst._defaults.evnts.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tonClose: function (dateText, dp_inst) {\n+\t\t\t\t\tif (tp_inst.timeDefined === true && $input.val() !== '') {\n+\t\t\t\t\t\ttp_inst._updateDateTime(dp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t\tif ($.isFunction(tp_inst._defaults.evnts.onClose)) {\n+\t\t\t\t\t\ttp_inst._defaults.evnts.onClose.call($input[0], dateText, dp_inst, tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t};\n+\t\t\tfor (i in overrides) {\n+\t\t\t\tif (overrides.hasOwnProperty(i)) {\n+\t\t\t\t\tfns[i] = opts[i] || this._defaults[i] || null;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\ttp_inst._defaults = $.extend({}, this._defaults, inlineSettings, opts, overrides, {\n+\t\t\t\tevnts: fns,\n+\t\t\t\ttimepicker: tp_inst \u002F\u002F add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');\n+\t\t\t});\n+\t\t\ttp_inst.amNames = $.map(tp_inst._defaults.amNames, function (val) {\n+\t\t\t\treturn val.toUpperCase();\n+\t\t\t});\n+\t\t\ttp_inst.pmNames = $.map(tp_inst._defaults.pmNames, function (val) {\n+\t\t\t\treturn val.toUpperCase();\n+\t\t\t});\n+\n+\t\t\t\u002F\u002F detect which units are supported\n+\t\t\ttp_inst.support = detectSupport(\n+\t\t\t\t\ttp_inst._defaults.timeFormat +\n+\t\t\t\t\t(tp_inst._defaults.pickerTimeFormat ? tp_inst._defaults.pickerTimeFormat : '') +\n+\t\t\t\t\t(tp_inst._defaults.altTimeFormat ? tp_inst._defaults.altTimeFormat : ''));\n+\n+\t\t\t\u002F\u002F controlType is string - key to our this._controls\n+\t\t\tif (typeof(tp_inst._defaults.controlType) === 'string') {\n+\t\t\t\tif (tp_inst._defaults.controlType === 'slider' && typeof($.ui.slider) === 'undefined') {\n+\t\t\t\t\ttp_inst._defaults.controlType = 'select';\n+\t\t\t\t}\n+\t\t\t\ttp_inst.control = tp_inst._controls[tp_inst._defaults.controlType];\n+\t\t\t}\n+\t\t\t\u002F\u002F controlType is an object and must implement create, options, value methods\n+\t\t\telse {\n+\t\t\t\ttp_inst.control = tp_inst._defaults.controlType;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F prep the timezone options\n+\t\t\tvar timezoneList = [-720, -660, -600, -570, -540, -480, -420, -360, -300, -270, -240, -210, -180, -120, -60,\n+\t\t\t\t\t0, 60, 120, 180, 210, 240, 270, 300, 330, 345, 360, 390, 420, 480, 525, 540, 570, 600, 630, 660, 690, 720, 765, 780, 840];\n+\t\t\tif (tp_inst._defaults.timezoneList !== null) {\n+\t\t\t\ttimezoneList = tp_inst._defaults.timezoneList;\n+\t\t\t}\n+\t\t\tvar tzl = timezoneList.length, tzi = 0, tzv = null;\n+\t\t\tif (tzl > 0 && typeof timezoneList[0] !== 'object') {\n+\t\t\t\tfor (; tzi \u003C tzl; tzi++) {\n+\t\t\t\t\ttzv = timezoneList[tzi];\n+\t\t\t\t\ttimezoneList[tzi] = { value: tzv, label: $.timepicker.timezoneOffsetString(tzv, tp_inst.support.iso8601) };\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\ttp_inst._defaults.timezoneList = timezoneList;\n+\n+\t\t\t\u002F\u002F set the default units\n+\t\t\ttp_inst.timezone = tp_inst._defaults.timezone !== null ? $.timepicker.timezoneOffsetNumber(tp_inst._defaults.timezone) :\n+\t\t\t\t\t\t\t((new Date()).getTimezoneOffset() * -1);\n+\t\t\ttp_inst.hour = tp_inst._defaults.hour \u003C tp_inst._defaults.hourMin ? tp_inst._defaults.hourMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.hour > tp_inst._defaults.hourMax ? tp_inst._defaults.hourMax : tp_inst._defaults.hour;\n+\t\t\ttp_inst.minute = tp_inst._defaults.minute \u003C tp_inst._defaults.minuteMin ? tp_inst._defaults.minuteMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.minute > tp_inst._defaults.minuteMax ? tp_inst._defaults.minuteMax : tp_inst._defaults.minute;\n+\t\t\ttp_inst.second = tp_inst._defaults.second \u003C tp_inst._defaults.secondMin ? tp_inst._defaults.secondMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.second > tp_inst._defaults.secondMax ? tp_inst._defaults.secondMax : tp_inst._defaults.second;\n+\t\t\ttp_inst.millisec = tp_inst._defaults.millisec \u003C tp_inst._defaults.millisecMin ? tp_inst._defaults.millisecMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.millisec > tp_inst._defaults.millisecMax ? tp_inst._defaults.millisecMax : tp_inst._defaults.millisec;\n+\t\t\ttp_inst.microsec = tp_inst._defaults.microsec \u003C tp_inst._defaults.microsecMin ? tp_inst._defaults.microsecMin :\n+\t\t\t\t\t\t\ttp_inst._defaults.microsec > tp_inst._defaults.microsecMax ? tp_inst._defaults.microsecMax : tp_inst._defaults.microsec;\n+\t\t\ttp_inst.ampm = '';\n+\t\t\ttp_inst.$input = $input;\n+\n+\t\t\tif (tp_inst._defaults.altField) {\n+\t\t\t\ttp_inst.$altInput = $(tp_inst._defaults.altField);\n+\t\t\t\tif (tp_inst._defaults.altRedirectFocus === true) {\n+\t\t\t\t\ttp_inst.$altInput.css({\n+\t\t\t\t\t\tcursor: 'pointer'\n+\t\t\t\t\t}).focus(function () {\n+\t\t\t\t\t\t$input.trigger(\"focus\");\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (tp_inst._defaults.minDate === 0 || tp_inst._defaults.minDateTime === 0) {\n+\t\t\t\ttp_inst._defaults.minDate = new Date();\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDate === 0 || tp_inst._defaults.maxDateTime === 0) {\n+\t\t\t\ttp_inst._defaults.maxDate = new Date();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F datepicker needs minDate\u002FmaxDate, timepicker needs minDateTime\u002FmaxDateTime..\n+\t\t\tif (tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) {\n+\t\t\t\ttp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) {\n+\t\t\t\ttp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) {\n+\t\t\t\ttp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());\n+\t\t\t}\n+\t\t\tif (tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) {\n+\t\t\t\ttp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());\n+\t\t\t}\n+\t\t\ttp_inst.$input.bind('focus', function () {\n+\t\t\t\ttp_inst._onFocus();\n+\t\t\t});\n+\n+\t\t\treturn tp_inst;\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* add our sliders to the calendar\n+\t\t*\u002F\n+\t\t_addTimePicker: function (dp_inst) {\n+\t\t\tvar currDT = $.trim((this.$altInput && this._defaults.altFieldTimeOnly) ? this.$input.val() + ' ' + this.$altInput.val() : this.$input.val());\n+\n+\t\t\tthis.timeDefined = this._parseTime(currDT);\n+\t\t\tthis._limitMinMaxDateTime(dp_inst, false);\n+\t\t\tthis._injectTimePicker();\n+\t\t\tthis._afterInject();\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* parse the time string from input value or _setTime\n+\t\t*\u002F\n+\t\t_parseTime: function (timeString, withDate) {\n+\t\t\tif (!this.inst) {\n+\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\n+\t\t\t}\n+\n+\t\t\tif (withDate || !this._defaults.timeOnly) {\n+\t\t\t\tvar dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');\n+\t\t\t\ttry {\n+\t\t\t\t\tvar parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);\n+\t\t\t\t\tif (!parseRes.timeObj) {\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t}\n+\t\t\t\t\t$.extend(this, parseRes.timeObj);\n+\t\t\t\t} catch (err) {\n+\t\t\t\t\t$.timepicker.log(\"Error parsing the date\u002Ftime string: \" + err +\n+\t\t\t\t\t\t\t\t\t\"\\ndate\u002Ftime string = \" + timeString +\n+\t\t\t\t\t\t\t\t\t\"\\ntimeFormat = \" + this._defaults.timeFormat +\n+\t\t\t\t\t\t\t\t\t\"\\ndateFormat = \" + dp_dateFormat);\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t\treturn true;\n+\t\t\t} else {\n+\t\t\t\tvar timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);\n+\t\t\t\tif (!timeObj) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t\t$.extend(this, timeObj);\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Handle callback option after injecting timepicker\n+\t\t*\u002F\n+\t\t_afterInject: function() {\n+\t\t\tvar o = this.inst.settings;\n+\t\t\tif ($.isFunction(o.afterInject)) {\n+\t\t\t\to.afterInject.call(this);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* generate and inject html for timepicker into ui datepicker\n+\t\t*\u002F\n+\t\t_injectTimePicker: function () {\n+\t\t\tvar $dp = this.inst.dpDiv,\n+\t\t\t\to = this.inst.settings,\n+\t\t\t\ttp_inst = this,\n+\t\t\t\tlitem = '',\n+\t\t\t\tuitem = '',\n+\t\t\t\tshow = null,\n+\t\t\t\tmax = {},\n+\t\t\t\tgridSize = {},\n+\t\t\t\tsize = null,\n+\t\t\t\ti = 0,\n+\t\t\t\tl = 0;\n+\n+\t\t\t\u002F\u002F Prevent displaying twice\n+\t\t\tif ($dp.find(\"div.ui-timepicker-div\").length === 0 && o.showTimepicker) {\n+\t\t\t\tvar noDisplay = ' ui_tpicker_unit_hide',\n+\t\t\t\t\thtml = '\u003Cdiv class=\"ui-timepicker-div' + (o.isRTL ? ' ui-timepicker-rtl' : '') + (o.oneLine && o.controlType === 'select' ? ' ui-timepicker-oneLine' : '') + '\">\u003Cdl>' + '\u003Cdt class=\"ui_tpicker_time_label' + ((o.showTime) ? '' : noDisplay) + '\">' + o.timeText + '\u003C\u002Fdt>' +\n+\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_time '+ ((o.showTime) ? '' : noDisplay) + '\">\u003Cinput class=\"ui_tpicker_time_input\" ' + (o.timeInput ? '' : 'disabled') + '\u002F>\u003C\u002Fdd>';\n+\n+\t\t\t\t\u002F\u002F Create the markup\n+\t\t\t\tfor (i = 0, l = this.units.length; i \u003C l; i++) {\n+\t\t\t\t\tlitem = this.units[i];\n+\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n+\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n+\n+\t\t\t\t\t\u002F\u002F Added by Peter Medeiros:\n+\t\t\t\t\t\u002F\u002F - Figure out what the hour\u002Fminute\u002Fsecond max should be based on the step values.\n+\t\t\t\t\t\u002F\u002F - Example: if stepMinute is 15, then minMax is 45.\n+\t\t\t\t\tmax[litem] = parseInt((o[litem + 'Max'] - ((o[litem + 'Max'] - o[litem + 'Min']) % o['step' + uitem])), 10);\n+\t\t\t\t\tgridSize[litem] = 0;\n+\n+\t\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_' + litem + '_label' + (show ? '' : noDisplay) + '\">' + o[litem + 'Text'] + '\u003C\u002Fdt>' +\n+\t\t\t\t\t\t\t\t'\u003Cdd class=\"ui_tpicker_' + litem + (show ? '' : noDisplay) + '\">\u003Cdiv class=\"ui_tpicker_' + litem + '_slider' + (show ? '' : noDisplay) + '\">\u003C\u002Fdiv>';\n+\n+\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\n+\t\t\t\t\t\thtml += '\u003Cdiv style=\"padding-left: 1px\">\u003Ctable class=\"ui-tpicker-grid-label\">\u003Ctr>';\n+\n+\t\t\t\t\t\tif (litem === 'hour') {\n+\t\t\t\t\t\t\tfor (var h = o[litem + 'Min']; h \u003C= max[litem]; h += parseInt(o[litem + 'Grid'], 10)) {\n+\t\t\t\t\t\t\t\tgridSize[litem]++;\n+\t\t\t\t\t\t\t\tvar tmph = $.datepicker.formatTime(this.support.ampm ? 'hht' : 'HH', {hour: h}, o);\n+\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + tmph + '\u003C\u002Ftd>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telse {\n+\t\t\t\t\t\t\tfor (var m = o[litem + 'Min']; m \u003C= max[litem]; m += parseInt(o[litem + 'Grid'], 10)) {\n+\t\t\t\t\t\t\t\tgridSize[litem]++;\n+\t\t\t\t\t\t\t\thtml += '\u003Ctd data-for=\"' + litem + '\">' + ((m \u003C 10) ? '0' : '') + m + '\u003C\u002Ftd>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\thtml += '\u003C\u002Ftr>\u003C\u002Ftable>\u003C\u002Fdiv>';\n+\t\t\t\t\t}\n+\t\t\t\t\thtml += '\u003C\u002Fdd>';\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Timezone\n+\t\t\t\tvar showTz = o.showTimezone !== null ? o.showTimezone : this.support.timezone;\n+\t\t\t\thtml += '\u003Cdt class=\"ui_tpicker_timezone_label' + (showTz ? '' : noDisplay) + '\">' + o.timezoneText + '\u003C\u002Fdt>';\n+\t\t\t\thtml += '\u003Cdd class=\"ui_tpicker_timezone' + (showTz ? '' : noDisplay) + '\">\u003C\u002Fdd>';\n+\n+\t\t\t\t\u002F\u002F Create the elements from string\n+\t\t\t\thtml += '\u003C\u002Fdl>\u003C\u002Fdiv>';\n+\t\t\t\tvar $tp = $(html);\n+\n+\t\t\t\t\u002F\u002F if we only want time picker...\n+\t\t\t\tif (o.timeOnly === true) {\n+\t\t\t\t\t$tp.prepend('\u003Cdiv class=\"ui-widget-header ui-helper-clearfix ui-corner-all\">' + '\u003Cdiv class=\"ui-datepicker-title\">' + o.timeOnlyTitle + '\u003C\u002Fdiv>' + '\u003C\u002Fdiv>');\n+\t\t\t\t\t$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F add sliders, adjust grids, add events\n+\t\t\t\tfor (i = 0, l = tp_inst.units.length; i \u003C l; i++) {\n+\t\t\t\t\tlitem = tp_inst.units[i];\n+\t\t\t\t\tuitem = litem.substr(0, 1).toUpperCase() + litem.substr(1);\n+\t\t\t\t\tshow = o['show' + uitem] !== null ? o['show' + uitem] : this.support[litem];\n+\n+\t\t\t\t\t\u002F\u002F add the slider\n+\t\t\t\t\ttp_inst[litem + '_slider'] = tp_inst.control.create(tp_inst, $tp.find('.ui_tpicker_' + litem + '_slider'), litem, tp_inst[litem], o[litem + 'Min'], max[litem], o['step' + uitem]);\n+\n+\t\t\t\t\t\u002F\u002F adjust the grid and add click event\n+\t\t\t\t\tif (show && o[litem + 'Grid'] > 0) {\n+\t\t\t\t\t\tsize = 100 * gridSize[litem] * o[litem + 'Grid'] \u002F (max[litem] - o[litem + 'Min']);\n+\t\t\t\t\t\t$tp.find('.ui_tpicker_' + litem + ' table').css({\n+\t\t\t\t\t\t\twidth: size + \"%\",\n+\t\t\t\t\t\t\tmarginLeft: o.isRTL ? '0' : ((size \u002F (-2 * gridSize[litem])) + \"%\"),\n+\t\t\t\t\t\t\tmarginRight: o.isRTL ? ((size \u002F (-2 * gridSize[litem])) + \"%\") : '0',\n+\t\t\t\t\t\t\tborderCollapse: 'collapse'\n+\t\t\t\t\t\t}).find(\"td\").click(function (e) {\n+\t\t\t\t\t\t\t\tvar $t = $(this),\n+\t\t\t\t\t\t\t\t\th = $t.html(),\n+\t\t\t\t\t\t\t\t\tn = parseInt(h.replace(\u002F[^0-9]\u002Fg), 10),\n+\t\t\t\t\t\t\t\t\tap = h.replace(\u002F[^apm]\u002Fig),\n+\t\t\t\t\t\t\t\t\tf = $t.data('for'); \u002F\u002F loses scope, so we use data-for\n+\n+\t\t\t\t\t\t\t\tif (f === 'hour') {\n+\t\t\t\t\t\t\t\t\tif (ap.indexOf('p') !== -1 && n \u003C 12) {\n+\t\t\t\t\t\t\t\t\t\tn += 12;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\telse {\n+\t\t\t\t\t\t\t\t\t\tif (ap.indexOf('a') !== -1 && n === 12) {\n+\t\t\t\t\t\t\t\t\t\t\tn = 0;\n+\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, tp_inst[f + '_slider'], litem, n);\n+\n+\t\t\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\t\t}).css({\n+\t\t\t\t\t\t\t\tcursor: 'pointer',\n+\t\t\t\t\t\t\t\twidth: (100 \u002F gridSize[litem]) + '%',\n+\t\t\t\t\t\t\t\ttextAlign: 'center',\n+\t\t\t\t\t\t\t\toverflow: 'hidden'\n+\t\t\t\t\t\t\t});\n+\t\t\t\t\t} \u002F\u002F end if grid > 0\n+\t\t\t\t} \u002F\u002F end for loop\n+\n+\t\t\t\t\u002F\u002F Add timezone options\n+\t\t\t\tthis.timezone_select = $tp.find('.ui_tpicker_timezone').append('\u003Cselect>\u003C\u002Fselect>').find(\"select\");\n+\t\t\t\t$.fn.append.apply(this.timezone_select,\n+\t\t\t\t$.map(o.timezoneList, function (val, idx) {\n+\t\t\t\t\treturn $(\"\u003Coption \u002F>\").val(typeof val === \"object\" ? val.value : val).text(typeof val === \"object\" ? val.label : val);\n+\t\t\t\t}));\n+\t\t\t\tif (typeof(this.timezone) !== \"undefined\" && this.timezone !== null && this.timezone !== \"\") {\n+\t\t\t\t\tvar local_timezone = (new Date(this.inst.selectedYear, this.inst.selectedMonth, this.inst.selectedDay, 12)).getTimezoneOffset() * -1;\n+\t\t\t\t\tif (local_timezone === this.timezone) {\n+\t\t\t\t\t\tselectLocalTimezone(tp_inst);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.timezone_select.val(this.timezone);\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tif (typeof(this.hour) !== \"undefined\" && this.hour !== null && this.hour !== \"\") {\n+\t\t\t\t\t\tthis.timezone_select.val(o.timezone);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tselectLocalTimezone(tp_inst);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tthis.timezone_select.change(function () {\n+\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\ttp_inst._afterInject();\n+\t\t\t\t});\n+\t\t\t\t\u002F\u002F End timezone options\n+\n+\t\t\t\t\u002F\u002F inject timepicker into datepicker\n+\t\t\t\tvar $buttonPanel = $dp.find('.ui-datepicker-buttonpane');\n+\t\t\t\tif ($buttonPanel.length) {\n+\t\t\t\t\t$buttonPanel.before($tp);\n+\t\t\t\t} else {\n+\t\t\t\t\t$dp.append($tp);\n+\t\t\t\t}\n+\n+\t\t\t\tthis.$timeObj = $tp.find('.ui_tpicker_time_input');\n+\t\t\t\tthis.$timeObj.change(function () {\n+\t\t\t\t\tvar timeFormat = tp_inst.inst.settings.timeFormat;\n+\t\t\t\t\tvar parsedTime = $.datepicker.parseTime(timeFormat, this.value);\n+\t\t\t\t\tvar update = new Date();\n+\t\t\t\t\tif (parsedTime) {\n+\t\t\t\t\t\tupdate.setHours(parsedTime.hour);\n+\t\t\t\t\t\tupdate.setMinutes(parsedTime.minute);\n+\t\t\t\t\t\tupdate.setSeconds(parsedTime.second);\n+\t\t\t\t\t\t$.datepicker._setTime(tp_inst.inst, update);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.value = tp_inst.formattedTime;\n+\t\t\t\t\t\tthis.blur();\n+\t\t\t\t\t}\n+\t\t\t\t});\n+\n+\t\t\t\tif (this.inst !== null) {\n+\t\t\t\t\tvar timeDefined = this.timeDefined;\n+\t\t\t\t\tthis._onTimeChange();\n+\t\t\t\t\tthis.timeDefined = timeDefined;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F slideAccess integration: http:\u002F\u002Ftrentrichardson.com\u002F2011\u002F11\u002F11\u002Fjquery-ui-sliders-and-touch-accessibility\u002F\n+\t\t\t\tif (this._defaults.addSliderAccess) {\n+\t\t\t\t\tvar sliderAccessArgs = this._defaults.sliderAccessArgs,\n+\t\t\t\t\t\trtl = this._defaults.isRTL;\n+\t\t\t\t\tsliderAccessArgs.isRTL = rtl;\n+\n+\t\t\t\t\tsetTimeout(function () { \u002F\u002F fix for inline mode\n+\t\t\t\t\t\tif ($tp.find('.ui-slider-access').length === 0) {\n+\t\t\t\t\t\t\t$tp.find('.ui-slider:visible').sliderAccess(sliderAccessArgs);\n+\n+\t\t\t\t\t\t\t\u002F\u002F fix any grids since sliders are shorter\n+\t\t\t\t\t\t\tvar sliderAccessWidth = $tp.find('.ui-slider-access:eq(0)').outerWidth(true);\n+\t\t\t\t\t\t\tif (sliderAccessWidth) {\n+\t\t\t\t\t\t\t\t$tp.find('table:visible').each(function () {\n+\t\t\t\t\t\t\t\t\tvar $g = $(this),\n+\t\t\t\t\t\t\t\t\t\toldWidth = $g.outerWidth(),\n+\t\t\t\t\t\t\t\t\t\toldMarginLeft = $g.css(rtl ? 'marginRight' : 'marginLeft').toString().replace('%', ''),\n+\t\t\t\t\t\t\t\t\t\tnewWidth = oldWidth - sliderAccessWidth,\n+\t\t\t\t\t\t\t\t\t\tnewMarginLeft = ((oldMarginLeft * newWidth) \u002F oldWidth) + '%',\n+\t\t\t\t\t\t\t\t\t\tcss = { width: newWidth, marginRight: 0, marginLeft: 0 };\n+\t\t\t\t\t\t\t\t\tcss[rtl ? 'marginRight' : 'marginLeft'] = newMarginLeft;\n+\t\t\t\t\t\t\t\t\t$g.css(css);\n+\t\t\t\t\t\t\t\t});\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}, 10);\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F end slideAccess integration\n+\n+\t\t\t\ttp_inst._limitMinMaxDateTime(this.inst, true);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* This function tries to limit the ability to go outside the\n+\t\t* min\u002Fmax date range\n+\t\t*\u002F\n+\t\t_limitMinMaxDateTime: function (dp_inst, adjustSliders) {\n+\t\t\tvar o = this._defaults,\n+\t\t\t\tdp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);\n+\n+\t\t\tif (!this._defaults.showTimepicker) {\n+\t\t\t\treturn;\n+\t\t\t} \u002F\u002F No time so nothing to check here\n+\n+\t\t\tif ($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date) {\n+\t\t\t\tvar minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),\n+\t\t\t\t\tminDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);\n+\n+\t\t\t\tif (this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null || this.millisecMinOriginal === null || this.microsecMinOriginal === null) {\n+\t\t\t\t\tthis.hourMinOriginal = o.hourMin;\n+\t\t\t\t\tthis.minuteMinOriginal = o.minuteMin;\n+\t\t\t\t\tthis.secondMinOriginal = o.secondMin;\n+\t\t\t\t\tthis.millisecMinOriginal = o.millisecMin;\n+\t\t\t\t\tthis.microsecMinOriginal = o.microsecMin;\n+\t\t\t\t}\n+\n+\t\t\t\tif (dp_inst.settings.timeOnly || minDateTimeDate.getTime() === dp_date.getTime()) {\n+\t\t\t\t\tthis._defaults.hourMin = minDateTime.getHours();\n+\t\t\t\t\tif (this.hour \u003C= this._defaults.hourMin) {\n+\t\t\t\t\t\tthis.hour = this._defaults.hourMin;\n+\t\t\t\t\t\tthis._defaults.minuteMin = minDateTime.getMinutes();\n+\t\t\t\t\t\tif (this.minute \u003C= this._defaults.minuteMin) {\n+\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMin;\n+\t\t\t\t\t\t\tthis._defaults.secondMin = minDateTime.getSeconds();\n+\t\t\t\t\t\t\tif (this.second \u003C= this._defaults.secondMin) {\n+\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMin;\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMin = minDateTime.getMilliseconds();\n+\t\t\t\t\t\t\t\tif (this.millisec \u003C= this._defaults.millisecMin) {\n+\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMin;\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = minDateTime.getMicroseconds();\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tif (this.microsec \u003C this._defaults.microsecMin) {\n+\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMin;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n+\t\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthis._defaults.hourMin = this.hourMinOriginal;\n+\t\t\t\t\tthis._defaults.minuteMin = this.minuteMinOriginal;\n+\t\t\t\t\tthis._defaults.secondMin = this.secondMinOriginal;\n+\t\t\t\t\tthis._defaults.millisecMin = this.millisecMinOriginal;\n+\t\t\t\t\tthis._defaults.microsecMin = this.microsecMinOriginal;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date) {\n+\t\t\t\tvar maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),\n+\t\t\t\t\tmaxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);\n+\n+\t\t\t\tif (this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null || this.millisecMaxOriginal === null) {\n+\t\t\t\t\tthis.hourMaxOriginal = o.hourMax;\n+\t\t\t\t\tthis.minuteMaxOriginal = o.minuteMax;\n+\t\t\t\t\tthis.secondMaxOriginal = o.secondMax;\n+\t\t\t\t\tthis.millisecMaxOriginal = o.millisecMax;\n+\t\t\t\t\tthis.microsecMaxOriginal = o.microsecMax;\n+\t\t\t\t}\n+\n+\t\t\t\tif (dp_inst.settings.timeOnly || maxDateTimeDate.getTime() === dp_date.getTime()) {\n+\t\t\t\t\tthis._defaults.hourMax = maxDateTime.getHours();\n+\t\t\t\t\tif (this.hour >= this._defaults.hourMax) {\n+\t\t\t\t\t\tthis.hour = this._defaults.hourMax;\n+\t\t\t\t\t\tthis._defaults.minuteMax = maxDateTime.getMinutes();\n+\t\t\t\t\t\tif (this.minute >= this._defaults.minuteMax) {\n+\t\t\t\t\t\t\tthis.minute = this._defaults.minuteMax;\n+\t\t\t\t\t\t\tthis._defaults.secondMax = maxDateTime.getSeconds();\n+\t\t\t\t\t\t\tif (this.second >= this._defaults.secondMax) {\n+\t\t\t\t\t\t\t\tthis.second = this._defaults.secondMax;\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMax = maxDateTime.getMilliseconds();\n+\t\t\t\t\t\t\t\tif (this.millisec >= this._defaults.millisecMax) {\n+\t\t\t\t\t\t\t\t\tthis.millisec = this._defaults.millisecMax;\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = maxDateTime.getMicroseconds();\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tif (this.microsec > this._defaults.microsecMax) {\n+\t\t\t\t\t\t\t\t\t\tthis.microsec = this._defaults.microsecMax;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthis._defaults.hourMax = this.hourMaxOriginal;\n+\t\t\t\t\tthis._defaults.minuteMax = this.minuteMaxOriginal;\n+\t\t\t\t\tthis._defaults.secondMax = this.secondMaxOriginal;\n+\t\t\t\t\tthis._defaults.millisecMax = this.millisecMaxOriginal;\n+\t\t\t\t\tthis._defaults.microsecMax = this.microsecMaxOriginal;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (dp_inst.settings.minTime!==null) {\n+\t\t\t\tvar tempMinTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.minTime);\n+\t\t\t\tif (this.hour\u003CtempMinTime.getHours()) {\n+\t\t\t\t\tthis.hour=this._defaults.hourMin=tempMinTime.getHours();\n+\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t} else if (this.hour===tempMinTime.getHours() && this.minute\u003CtempMinTime.getMinutes()) {\n+\t\t\t\t\tthis.minute=this._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t} else {\n+\t\t\t\t\tif (this._defaults.hourMin\u003CtempMinTime.getHours()) {\n+\t\t\t\t\t\tthis._defaults.hourMin=tempMinTime.getHours();\n+\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t\t} else if (this._defaults.hourMin===tempMinTime.getHours()===this.hour && this._defaults.minuteMin\u003CtempMinTime.getMinutes()) {\n+\t\t\t\t\t\tthis._defaults.minuteMin=tempMinTime.getMinutes();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMin=0;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (dp_inst.settings.maxTime!==null) {\n+\t\t\t\tvar tempMaxTime=new Date(\"01\u002F01\u002F1970 \" + dp_inst.settings.maxTime);\n+\t\t\t\tif (this.hour>tempMaxTime.getHours()) {\n+\t\t\t\t\tthis.hour=this._defaults.hourMax=tempMaxTime.getHours();\n+\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t} else if (this.hour===tempMaxTime.getHours() && this.minute>tempMaxTime.getMinutes()) {\n+\t\t\t\t\tthis.minute=this._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t} else {\n+\t\t\t\t\tif (this._defaults.hourMax>tempMaxTime.getHours()) {\n+\t\t\t\t\t\tthis._defaults.hourMax=tempMaxTime.getHours();\n+\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t\t} else if (this._defaults.hourMax===tempMaxTime.getHours()===this.hour && this._defaults.minuteMax>tempMaxTime.getMinutes()) {\n+\t\t\t\t\t\tthis._defaults.minuteMax=tempMaxTime.getMinutes();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis._defaults.minuteMax=59;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (adjustSliders !== undefined && adjustSliders === true) {\n+\t\t\t\tvar hourMax = parseInt((this._defaults.hourMax - ((this._defaults.hourMax - this._defaults.hourMin) % this._defaults.stepHour)), 10),\n+\t\t\t\t\tminMax = parseInt((this._defaults.minuteMax - ((this._defaults.minuteMax - this._defaults.minuteMin) % this._defaults.stepMinute)), 10),\n+\t\t\t\t\tsecMax = parseInt((this._defaults.secondMax - ((this._defaults.secondMax - this._defaults.secondMin) % this._defaults.stepSecond)), 10),\n+\t\t\t\t\tmillisecMax = parseInt((this._defaults.millisecMax - ((this._defaults.millisecMax - this._defaults.millisecMin) % this._defaults.stepMillisec)), 10),\n+\t\t\t\t\tmicrosecMax = parseInt((this._defaults.microsecMax - ((this._defaults.microsecMax - this._defaults.microsecMin) % this._defaults.stepMicrosec)), 10);\n+\n+\t\t\t\tif (this.hour_slider) {\n+\t\t\t\t\tthis.control.options(this, this.hour_slider, 'hour', { min: this._defaults.hourMin, max: hourMax, step: this._defaults.stepHour });\n+\t\t\t\t\tthis.control.value(this, this.hour_slider, 'hour', this.hour - (this.hour % this._defaults.stepHour));\n+\t\t\t\t}\n+\t\t\t\tif (this.minute_slider) {\n+\t\t\t\t\tthis.control.options(this, this.minute_slider, 'minute', { min: this._defaults.minuteMin, max: minMax, step: this._defaults.stepMinute });\n+\t\t\t\t\tthis.control.value(this, this.minute_slider, 'minute', this.minute - (this.minute % this._defaults.stepMinute));\n+\t\t\t\t}\n+\t\t\t\tif (this.second_slider) {\n+\t\t\t\t\tthis.control.options(this, this.second_slider, 'second', { min: this._defaults.secondMin, max: secMax, step: this._defaults.stepSecond });\n+\t\t\t\t\tthis.control.value(this, this.second_slider, 'second', this.second - (this.second % this._defaults.stepSecond));\n+\t\t\t\t}\n+\t\t\t\tif (this.millisec_slider) {\n+\t\t\t\t\tthis.control.options(this, this.millisec_slider, 'millisec', { min: this._defaults.millisecMin, max: millisecMax, step: this._defaults.stepMillisec });\n+\t\t\t\t\tthis.control.value(this, this.millisec_slider, 'millisec', this.millisec - (this.millisec % this._defaults.stepMillisec));\n+\t\t\t\t}\n+\t\t\t\tif (this.microsec_slider) {\n+\t\t\t\t\tthis.control.options(this, this.microsec_slider, 'microsec', { min: this._defaults.microsecMin, max: microsecMax, step: this._defaults.stepMicrosec });\n+\t\t\t\t\tthis.control.value(this, this.microsec_slider, 'microsec', this.microsec - (this.microsec % this._defaults.stepMicrosec));\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* when a slider moves, set the internal time...\n+\t\t* on time change is also called when the time is updated in the text field\n+\t\t*\u002F\n+\t\t_onTimeChange: function () {\n+\t\t\tif (!this._defaults.showTimepicker) {\n+                                return;\n+\t\t\t}\n+\t\t\tvar hour = (this.hour_slider) ? this.control.value(this, this.hour_slider, 'hour') : false,\n+\t\t\t\tminute = (this.minute_slider) ? this.control.value(this, this.minute_slider, 'minute') : false,\n+\t\t\t\tsecond = (this.second_slider) ? this.control.value(this, this.second_slider, 'second') : false,\n+\t\t\t\tmillisec = (this.millisec_slider) ? this.control.value(this, this.millisec_slider, 'millisec') : false,\n+\t\t\t\tmicrosec = (this.microsec_slider) ? this.control.value(this, this.microsec_slider, 'microsec') : false,\n+\t\t\t\ttimezone = (this.timezone_select) ? this.timezone_select.val() : false,\n+\t\t\t\to = this._defaults,\n+\t\t\t\tpickerTimeFormat = o.pickerTimeFormat || o.timeFormat,\n+\t\t\t\tpickerTimeSuffix = o.pickerTimeSuffix || o.timeSuffix;\n+\n+\t\t\tif (typeof(hour) === 'object') {\n+\t\t\t\thour = false;\n+\t\t\t}\n+\t\t\tif (typeof(minute) === 'object') {\n+\t\t\t\tminute = false;\n+\t\t\t}\n+\t\t\tif (typeof(second) === 'object') {\n+\t\t\t\tsecond = false;\n+\t\t\t}\n+\t\t\tif (typeof(millisec) === 'object') {\n+\t\t\t\tmillisec = false;\n+\t\t\t}\n+\t\t\tif (typeof(microsec) === 'object') {\n+\t\t\t\tmicrosec = false;\n+\t\t\t}\n+\t\t\tif (typeof(timezone) === 'object') {\n+\t\t\t\ttimezone = false;\n+\t\t\t}\n+\n+\t\t\tif (hour !== false) {\n+\t\t\t\thour = parseInt(hour, 10);\n+\t\t\t}\n+\t\t\tif (minute !== false) {\n+\t\t\t\tminute = parseInt(minute, 10);\n+\t\t\t}\n+\t\t\tif (second !== false) {\n+\t\t\t\tsecond = parseInt(second, 10);\n+\t\t\t}\n+\t\t\tif (millisec !== false) {\n+\t\t\t\tmillisec = parseInt(millisec, 10);\n+\t\t\t}\n+\t\t\tif (microsec !== false) {\n+\t\t\t\tmicrosec = parseInt(microsec, 10);\n+\t\t\t}\n+\t\t\tif (timezone !== false) {\n+\t\t\t\ttimezone = timezone.toString();\n+\t\t\t}\n+\n+\t\t\tvar ampm = o[hour \u003C 12 ? 'amNames' : 'pmNames'][0];\n+\n+\t\t\t\u002F\u002F If the update was done in the input field, the input field should not be updated.\n+\t\t\t\u002F\u002F If the update was done using the sliders, update the input field.\n+\t\t\tvar hasChanged = (\n+\t\t\t\t\t\thour !== parseInt(this.hour,10) || \u002F\u002F sliders should all be numeric\n+\t\t\t\t\t\tminute !== parseInt(this.minute,10) ||\n+\t\t\t\t\t\tsecond !== parseInt(this.second,10) ||\n+\t\t\t\t\t\tmillisec !== parseInt(this.millisec,10) ||\n+\t\t\t\t\t\tmicrosec !== parseInt(this.microsec,10) ||\n+\t\t\t\t\t\t(this.ampm.length > 0 && (hour \u003C 12) !== ($.inArray(this.ampm.toUpperCase(), this.amNames) !== -1)) ||\n+\t\t\t\t\t\t(this.timezone !== null && timezone !== this.timezone.toString()) \u002F\u002F could be numeric or \"EST\" format, so use toString()\n+\t\t\t\t\t);\n+\n+\t\t\tif (hasChanged) {\n+\n+\t\t\t\tif (hour !== false) {\n+\t\t\t\t\tthis.hour = hour;\n+\t\t\t\t}\n+\t\t\t\tif (minute !== false) {\n+\t\t\t\t\tthis.minute = minute;\n+\t\t\t\t}\n+\t\t\t\tif (second !== false) {\n+\t\t\t\t\tthis.second = second;\n+\t\t\t\t}\n+\t\t\t\tif (millisec !== false) {\n+\t\t\t\t\tthis.millisec = millisec;\n+\t\t\t\t}\n+\t\t\t\tif (microsec !== false) {\n+\t\t\t\t\tthis.microsec = microsec;\n+\t\t\t\t}\n+\t\t\t\tif (timezone !== false) {\n+\t\t\t\t\tthis.timezone = timezone;\n+\t\t\t\t}\n+\n+\t\t\t\tif (!this.inst) {\n+\t\t\t\t\tthis.inst = $.datepicker._getInst(this.$input[0]);\n+\t\t\t\t}\n+\n+\t\t\t\tthis._limitMinMaxDateTime(this.inst, true);\n+\t\t\t}\n+\t\t\tif (this.support.ampm) {\n+\t\t\t\tthis.ampm = ampm;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Updates the time within the timepicker\n+\t\t\tthis.formattedTime = $.datepicker.formatTime(o.timeFormat, this, o);\n+\t\t\tif (this.$timeObj) {\n+\t\t\t\tif (pickerTimeFormat === o.timeFormat) {\n+\t\t\t\t\tthis.$timeObj.val(this.formattedTime + pickerTimeSuffix);\n+\t\t\t\t}\n+\t\t\t\telse {\n+\t\t\t\t\tthis.$timeObj.val($.datepicker.formatTime(pickerTimeFormat, this, o) + pickerTimeSuffix);\n+\t\t\t\t}\n+\t\t\t\tif (this.$timeObj[0].setSelectionRange) {\n+\t\t\t\t\tvar sPos = this.$timeObj[0].selectionStart;\n+\t\t\t\t\tvar ePos = this.$timeObj[0].selectionEnd;\n+\t\t\t\t\tthis.$timeObj[0].setSelectionRange(sPos, ePos);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tthis.timeDefined = true;\n+\t\t\tif (hasChanged) {\n+\t\t\t\tthis._updateDateTime();\n+\t\t\t\t\u002F\u002Fthis.$input.focus(); \u002F\u002F may automatically open the picker on setDate\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* call custom onSelect.\n+\t\t* bind to sliders slidestop, and grid click.\n+\t\t*\u002F\n+\t\t_onSelectHandler: function () {\n+\t\t\tvar onSelect = this._defaults.onSelect || this.inst.settings.onSelect;\n+\t\t\tvar inputEl = this.$input ? this.$input[0] : null;\n+\t\t\tif (onSelect && inputEl) {\n+\t\t\t\tonSelect.apply(inputEl, [this.formattedDateTime, this]);\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* update our input with the new date time..\n+\t\t*\u002F\n+\t\t_updateDateTime: function (dp_inst) {\n+\t\t\tdp_inst = this.inst || dp_inst;\n+\t\t\tvar dtTmp = (dp_inst.currentYear > 0?\n+\t\t\t\t\t\t\tnew Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay) :\n+\t\t\t\t\t\t\tnew Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n+\t\t\t\tdt = $.datepicker._daylightSavingAdjust(dtTmp),\n+\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay)),\n+\t\t\t\t\u002F\u002Fdt = $.datepicker._daylightSavingAdjust(new Date(dp_inst.currentYear, dp_inst.currentMonth, dp_inst.currentDay)),\n+\t\t\t\tdateFmt = $.datepicker._get(dp_inst, 'dateFormat'),\n+\t\t\t\tformatCfg = $.datepicker._getFormatConfig(dp_inst),\n+\t\t\t\ttimeAvailable = dt !== null && this.timeDefined;\n+\t\t\tthis.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);\n+\t\t\tvar formattedDateTime = this.formattedDate;\n+\n+\t\t\t\u002F\u002F if a slider was changed but datepicker doesn't have a value yet, set it\n+\t\t\tif (dp_inst.lastVal === \"\") {\n+                dp_inst.currentYear = dp_inst.selectedYear;\n+                dp_inst.currentMonth = dp_inst.selectedMonth;\n+                dp_inst.currentDay = dp_inst.selectedDay;\n+            }\n+\n+\t\t\t\u002F*\n+\t\t\t* remove following lines to force every changes in date picker to change the input value\n+\t\t\t* Bug descriptions: when an input field has a default value, and click on the field to pop up the date picker.\n+\t\t\t* If the user manually empty the value in the input field, the date picker will never change selected value.\n+\t\t\t*\u002F\n+\t\t\t\u002F\u002Fif (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0)) {\n+\t\t\t\u002F\u002F\treturn;\n+\t\t\t\u002F\u002F}\n+\n+\t\t\tif (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === false) {\n+\t\t\t\tformattedDateTime = this.formattedTime;\n+\t\t\t} else if ((this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) || (this._defaults.timeOnly === true && this._defaults.timeOnlyShowDate === true)) {\n+\t\t\t\tformattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;\n+\t\t\t}\n+\n+\t\t\tthis.formattedDateTime = formattedDateTime;\n+\n+\t\t\tif (!this._defaults.showTimepicker) {\n+\t\t\t\tthis.$input.val(this.formattedDate);\n+\t\t\t} else if (this.$altInput && this._defaults.timeOnly === false && this._defaults.altFieldTimeOnly === true) {\n+\t\t\t\tthis.$altInput.val(this.formattedTime);\n+\t\t\t\tthis.$input.val(this.formattedDate);\n+\t\t\t} else if (this.$altInput) {\n+\t\t\t\tthis.$input.val(formattedDateTime);\n+\t\t\t\tvar altFormattedDateTime = '',\n+\t\t\t\t\taltSeparator = this._defaults.altSeparator !== null ? this._defaults.altSeparator : this._defaults.separator,\n+\t\t\t\t\taltTimeSuffix = this._defaults.altTimeSuffix !== null ? this._defaults.altTimeSuffix : this._defaults.timeSuffix;\n+\n+\t\t\t\tif (!this._defaults.timeOnly) {\n+\t\t\t\t\tif (this._defaults.altFormat) {\n+\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(this._defaults.altFormat, (dt === null ? new Date() : dt), formatCfg);\n+\t\t\t\t\t}\n+\t\t\t\t\telse {\n+\t\t\t\t\t\taltFormattedDateTime = this.formattedDate;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (altFormattedDateTime) {\n+\t\t\t\t\t\taltFormattedDateTime += altSeparator;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (this._defaults.altTimeFormat !== null) {\n+\t\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(this._defaults.altTimeFormat, this, this._defaults) + altTimeSuffix;\n+\t\t\t\t}\n+\t\t\t\telse {\n+\t\t\t\t\taltFormattedDateTime += this.formattedTime + altTimeSuffix;\n+\t\t\t\t}\n+\t\t\t\tthis.$altInput.val(altFormattedDateTime);\n+\t\t\t} else {\n+\t\t\t\tthis.$input.val(formattedDateTime);\n+\t\t\t}\n+\n+\t\t\tthis.$input.trigger(\"change\");\n+\t\t},\n+\n+\t\t_onFocus: function () {\n+\t\t\tif (!this.$input.val() && this._defaults.defaultValue) {\n+\t\t\t\tthis.$input.val(this._defaults.defaultValue);\n+\t\t\t\tvar inst = $.datepicker._getInst(this.$input.get(0)),\n+\t\t\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\t\t\t\tif (tp_inst) {\n+\t\t\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n+\t\t\t\t\t\ttry {\n+\t\t\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n+\t\t\t\t\t\t} catch (err) {\n+\t\t\t\t\t\t\t$.timepicker.log(err);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* Small abstraction to control types\n+\t\t* We can add more, just be sure to follow the pattern: create, options, value\n+\t\t*\u002F\n+\t\t_controls: {\n+\t\t\t\u002F\u002F slider methods\n+\t\t\tslider: {\n+\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\n+\t\t\t\t\tvar rtl = tp_inst._defaults.isRTL; \u002F\u002F if rtl go -60->0 instead of 0->60\n+\t\t\t\t\treturn obj.prop('slide', null).slider({\n+\t\t\t\t\t\torientation: \"horizontal\",\n+\t\t\t\t\t\tvalue: rtl ? val * -1 : val,\n+\t\t\t\t\t\tmin: rtl ? max * -1 : min,\n+\t\t\t\t\t\tmax: rtl ? min * -1 : max,\n+\t\t\t\t\t\tstep: step,\n+\t\t\t\t\t\tslide: function (event, ui) {\n+\t\t\t\t\t\t\ttp_inst.control.value(tp_inst, $(this), unit, rtl ? ui.value * -1 : ui.value);\n+\t\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tstop: function (event, ui) {\n+\t\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\n+\t\t\t\t\tif (tp_inst._defaults.isRTL) {\n+\t\t\t\t\t\tif (typeof(opts) === 'string') {\n+\t\t\t\t\t\t\tif (opts === 'min' || opts === 'max') {\n+\t\t\t\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\t\t\t\treturn obj.slider(opts, val * -1);\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\treturn Math.abs(obj.slider(opts));\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tvar min = opts.min,\n+\t\t\t\t\t\t\tmax = opts.max;\n+\t\t\t\t\t\topts.min = opts.max = null;\n+\t\t\t\t\t\tif (min !== undefined) {\n+\t\t\t\t\t\t\topts.max = min * -1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tif (max !== undefined) {\n+\t\t\t\t\t\t\topts.min = max * -1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t\t}\n+\t\t\t\t\tif (typeof(opts) === 'string' && val !== undefined) {\n+\t\t\t\t\t\treturn obj.slider(opts, val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn obj.slider(opts);\n+\t\t\t\t},\n+\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\n+\t\t\t\t\tif (tp_inst._defaults.isRTL) {\n+\t\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\t\treturn obj.slider('value', val * -1);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\treturn Math.abs(obj.slider('value'));\n+\t\t\t\t\t}\n+\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\treturn obj.slider('value', val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn obj.slider('value');\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\t\u002F\u002F select methods\n+\t\t\tselect: {\n+\t\t\t\tcreate: function (tp_inst, obj, unit, val, min, max, step) {\n+\t\t\t\t\tvar sel = '\u003Cselect class=\"ui-timepicker-select ui-state-default ui-corner-all\" data-unit=\"' + unit + '\" data-min=\"' + min + '\" data-max=\"' + max + '\" data-step=\"' + step + '\">',\n+\t\t\t\t\t\tformat = tp_inst._defaults.pickerTimeFormat || tp_inst._defaults.timeFormat;\n+\n+\t\t\t\t\tfor (var i = min; i \u003C= max; i += step) {\n+\t\t\t\t\t\tsel += '\u003Coption value=\"' + i + '\"' + (i === val ? ' selected' : '') + '>';\n+\t\t\t\t\t\tif (unit === 'hour') {\n+\t\t\t\t\t\t\tsel += $.datepicker.formatTime($.trim(format.replace(\u002F[^ht ]\u002Fig, '')), {hour: i}, tp_inst._defaults);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\telse if (unit === 'millisec' || unit === 'microsec' || i >= 10) { sel += i; }\n+\t\t\t\t\t\telse {sel += '0' + i.toString(); }\n+\t\t\t\t\t\tsel += '\u003C\u002Foption>';\n+\t\t\t\t\t}\n+\t\t\t\t\tsel += '\u003C\u002Fselect>';\n+\n+\t\t\t\t\tobj.children('select').remove();\n+\n+\t\t\t\t\t$(sel).appendTo(obj).change(function (e) {\n+\t\t\t\t\t\ttp_inst._onTimeChange();\n+\t\t\t\t\t\ttp_inst._onSelectHandler();\n+\t\t\t\t\t\ttp_inst._afterInject();\n+\t\t\t\t\t});\n+\n+\t\t\t\t\treturn obj;\n+\t\t\t\t},\n+\t\t\t\toptions: function (tp_inst, obj, unit, opts, val) {\n+\t\t\t\t\tvar o = {},\n+\t\t\t\t\t\t$t = obj.children('select');\n+\t\t\t\t\tif (typeof(opts) === 'string') {\n+\t\t\t\t\t\tif (val === undefined) {\n+\t\t\t\t\t\t\treturn $t.data(opts);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\to[opts] = val;\n+\t\t\t\t\t}\n+\t\t\t\t\telse { o = opts; }\n+\t\t\t\t\treturn tp_inst.control.create(tp_inst, obj, $t.data('unit'), $t.val(), o.min>=0 ? o.min : $t.data('min'), o.max || $t.data('max'), o.step || $t.data('step'));\n+\t\t\t\t},\n+\t\t\t\tvalue: function (tp_inst, obj, unit, val) {\n+\t\t\t\t\tvar $t = obj.children('select');\n+\t\t\t\t\tif (val !== undefined) {\n+\t\t\t\t\t\treturn $t.val(val);\n+\t\t\t\t\t}\n+\t\t\t\t\treturn $t.val();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} \u002F\u002F end _controls\n+\n+\t});\n+\n+\t$.fn.extend({\n+\t\t\u002F*\n+\t\t* shorthand just to use timepicker.\n+\t\t*\u002F\n+\t\ttimepicker: function (o) {\n+\t\t\to = o || {};\n+\t\t\tvar tmp_args = Array.prototype.slice.call(arguments);\n+\n+\t\t\tif (typeof o === 'object') {\n+\t\t\t\ttmp_args[0] = $.extend(o, {\n+\t\t\t\t\ttimeOnly: true\n+\t\t\t\t});\n+\t\t\t}\n+\n+\t\t\treturn $(this).each(function () {\n+\t\t\t\t$.fn.datetimepicker.apply($(this), tmp_args);\n+\t\t\t});\n+\t\t},\n+\n+\t\t\u002F*\n+\t\t* extend timepicker to datepicker\n+\t\t*\u002F\n+\t\tdatetimepicker: function (o) {\n+\t\t\to = o || {};\n+\t\t\tvar tmp_args = arguments;\n+\n+\t\t\tif (typeof(o) === 'string') {\n+\t\t\t\tif (o === 'getDate'  || (o === 'option' && tmp_args.length === 2 && typeof (tmp_args[1]) === 'string')) {\n+\t\t\t\t\treturn $.fn.datepicker.apply($(this[0]), tmp_args);\n+\t\t\t\t} else {\n+\t\t\t\t\treturn this.each(function () {\n+\t\t\t\t\t\tvar $t = $(this);\n+\t\t\t\t\t\t$t.datepicker.apply($t, tmp_args);\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn this.each(function () {\n+\t\t\t\t\tvar $t = $(this);\n+\t\t\t\t\t$t.datepicker($.timepicker._newInst($t, o)._defaults);\n+\t\t\t\t});\n+\t\t\t}\n+\t\t}\n+\t});\n+\n+\t\u002F*\n+\t* Public Utility to parse date and time\n+\t*\u002F\n+\t$.datepicker.parseDateTime = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n+\t\tvar parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);\n+\t\tif (parseRes.timeObj) {\n+\t\t\tvar t = parseRes.timeObj;\n+\t\t\tparseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);\n+\t\t\tparseRes.date.setMicroseconds(t.microsec);\n+\t\t}\n+\n+\t\treturn parseRes.date;\n+\t};\n+\n+\t\u002F*\n+\t* Public utility to parse time\n+\t*\u002F\n+\t$.datepicker.parseTime = function (timeFormat, timeString, options) {\n+\t\tvar o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}),\n+\t\t\tiso8601 = (timeFormat.replace(\u002F\\'.*?\\'\u002Fg, '').indexOf('Z') !== -1);\n+\n+\t\t\u002F\u002F Strict parse requires the timeString to match the timeFormat exactly\n+\t\tvar strictParse = function (f, s, o) {\n+\n+\t\t\t\u002F\u002F pattern for standard and localized AM\u002FPM markers\n+\t\t\tvar getPatternAmpm = function (amNames, pmNames) {\n+\t\t\t\tvar markers = [];\n+\t\t\t\tif (amNames) {\n+\t\t\t\t\t$.merge(markers, amNames);\n+\t\t\t\t}\n+\t\t\t\tif (pmNames) {\n+\t\t\t\t\t$.merge(markers, pmNames);\n+\t\t\t\t}\n+\t\t\t\tmarkers = $.map(markers, function (val) {\n+\t\t\t\t\treturn val.replace(\u002F[.*+?|()\\[\\]{}\\\\]\u002Fg, '\\\\$&');\n+\t\t\t\t});\n+\t\t\t\treturn '(' + markers.join('|') + ')?';\n+\t\t\t};\n+\n+\t\t\t\u002F\u002F figure out position of time elements.. cause js cant do named captures\n+\t\t\tvar getFormatPositions = function (timeFormat) {\n+\t\t\t\tvar finds = timeFormat.toLowerCase().match(\u002F(h{1,2}|m{1,2}|s{1,2}|l{1}|c{1}|t{1,2}|z|'.*?')\u002Fg),\n+\t\t\t\t\torders = {\n+\t\t\t\t\t\th: -1,\n+\t\t\t\t\t\tm: -1,\n+\t\t\t\t\t\ts: -1,\n+\t\t\t\t\t\tl: -1,\n+\t\t\t\t\t\tc: -1,\n+\t\t\t\t\t\tt: -1,\n+\t\t\t\t\t\tz: -1\n+\t\t\t\t\t};\n+\n+\t\t\t\tif (finds) {\n+\t\t\t\t\tfor (var i = 0; i \u003C finds.length; i++) {\n+\t\t\t\t\t\tif (orders[finds[i].toString().charAt(0)] === -1) {\n+\t\t\t\t\t\t\torders[finds[i].toString().charAt(0)] = i + 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\treturn orders;\n+\t\t\t};\n+\n+\t\t\tvar regstr = '^' + f.toString()\n+\t\t\t\t\t.replace(\u002F([hH]{1,2}|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\n+\t\t\t\t\t\t\tvar ml = match.length;\n+\t\t\t\t\t\t\tswitch (match.charAt(0).toLowerCase()) {\n+\t\t\t\t\t\t\tcase 'h':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 'm':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 's':\n+\t\t\t\t\t\t\t\treturn ml === 1 ? '(\\\\d?\\\\d)' : '(\\\\d{' + ml + '})';\n+\t\t\t\t\t\t\tcase 'l':\n+\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\n+\t\t\t\t\t\t\tcase 'c':\n+\t\t\t\t\t\t\t\treturn '(\\\\d?\\\\d?\\\\d)';\n+\t\t\t\t\t\t\tcase 'z':\n+\t\t\t\t\t\t\t\treturn '(z|[-+]\\\\d\\\\d:?\\\\d\\\\d|\\\\S+)?';\n+\t\t\t\t\t\t\tcase 't':\n+\t\t\t\t\t\t\t\treturn getPatternAmpm(o.amNames, o.pmNames);\n+\t\t\t\t\t\t\tdefault:    \u002F\u002F literal escaped in quotes\n+\t\t\t\t\t\t\t\treturn '(' + match.replace(\u002F\\'\u002Fg, \"\").replace(\u002F(\\.|\\$|\\^|\\\\|\\\u002F|\\(|\\)|\\[|\\]|\\?|\\+|\\*)\u002Fg, function (m) { return \"\\\\\" + m; }) + ')?';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t})\n+\t\t\t\t\t.replace(\u002F\\s\u002Fg, '\\\\s?') +\n+\t\t\t\t\to.timeSuffix + '$',\n+\t\t\t\torder = getFormatPositions(f),\n+\t\t\t\tampm = '',\n+\t\t\t\ttreg;\n+\n+\t\t\ttreg = s.match(new RegExp(regstr, 'i'));\n+\n+\t\t\tvar resTime = {\n+\t\t\t\thour: 0,\n+\t\t\t\tminute: 0,\n+\t\t\t\tsecond: 0,\n+\t\t\t\tmillisec: 0,\n+\t\t\t\tmicrosec: 0\n+\t\t\t};\n+\n+\t\t\tif (treg) {\n+\t\t\t\tif (order.t !== -1) {\n+\t\t\t\t\tif (treg[order.t] === undefined || treg[order.t].length === 0) {\n+\t\t\t\t\t\tampm = '';\n+\t\t\t\t\t\tresTime.ampm = '';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tampm = $.inArray(treg[order.t].toUpperCase(), $.map(o.amNames, function (x,i) { return x.toUpperCase(); })) !== -1 ? 'AM' : 'PM';\n+\t\t\t\t\t\tresTime.ampm = o[ampm === 'AM' ? 'amNames' : 'pmNames'][0];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (order.h !== -1) {\n+\t\t\t\t\tif (ampm === 'AM' && treg[order.h] === '12') {\n+\t\t\t\t\t\tresTime.hour = 0; \u002F\u002F 12am = 0 hour\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif (ampm === 'PM' && treg[order.h] !== '12') {\n+\t\t\t\t\t\t\tresTime.hour = parseInt(treg[order.h], 10) + 12; \u002F\u002F 12pm = 12 hour, any other pm = hour + 12\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tresTime.hour = Number(treg[order.h]);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif (order.m !== -1) {\n+\t\t\t\t\tresTime.minute = Number(treg[order.m]);\n+\t\t\t\t}\n+\t\t\t\tif (order.s !== -1) {\n+\t\t\t\t\tresTime.second = Number(treg[order.s]);\n+\t\t\t\t}\n+\t\t\t\tif (order.l !== -1) {\n+\t\t\t\t\tresTime.millisec = Number(treg[order.l]);\n+\t\t\t\t}\n+\t\t\t\tif (order.c !== -1) {\n+\t\t\t\t\tresTime.microsec = Number(treg[order.c]);\n+\t\t\t\t}\n+\t\t\t\tif (order.z !== -1 && treg[order.z] !== undefined) {\n+\t\t\t\t\tresTime.timezone = $.timepicker.timezoneOffsetNumber(treg[order.z]);\n+\t\t\t\t}\n+\n+\n+\t\t\t\treturn resTime;\n+\t\t\t}\n+\t\t\treturn false;\n+\t\t};\u002F\u002F end strictParse\n+\n+\t\t\u002F\u002F First try JS Date, if that fails, use strictParse\n+\t\tvar looseParse = function (f, s, o) {\n+\t\t\ttry {\n+\t\t\t\tvar d = new Date('2012-01-01 ' + s);\n+\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\td = new Date('2012-01-01T' + s);\n+\t\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\t\td = new Date('01\u002F01\u002F2012 ' + s);\n+\t\t\t\t\t\tif (isNaN(d.getTime())) {\n+\t\t\t\t\t\t\tthrow \"Unable to parse time with native Date: \" + s;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn {\n+\t\t\t\t\thour: d.getHours(),\n+\t\t\t\t\tminute: d.getMinutes(),\n+\t\t\t\t\tsecond: d.getSeconds(),\n+\t\t\t\t\tmillisec: d.getMilliseconds(),\n+\t\t\t\t\tmicrosec: d.getMicroseconds(),\n+\t\t\t\t\ttimezone: d.getTimezoneOffset() * -1\n+\t\t\t\t};\n+\t\t\t}\n+\t\t\tcatch (err) {\n+\t\t\t\ttry {\n+\t\t\t\t\treturn strictParse(f, s, o);\n+\t\t\t\t}\n+\t\t\t\tcatch (err2) {\n+\t\t\t\t\t$.timepicker.log(\"Unable to parse \\ntimeString: \" + s + \"\\ntimeFormat: \" + f);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn false;\n+\t\t}; \u002F\u002F end looseParse\n+\n+\t\tif (typeof o.parse === \"function\") {\n+\t\t\treturn o.parse(timeFormat, timeString, o);\n+\t\t}\n+\t\tif (o.parse === 'loose') {\n+\t\t\treturn looseParse(timeFormat, timeString, o);\n+\t\t}\n+\t\treturn strictParse(timeFormat, timeString, o);\n+\t};\n+\n+\t\u002F**\n+\t * Public utility to format the time\n+\t * @param {string} format format of the time\n+\t * @param {Object} time Object not a Date for timezones\n+\t * @param {Object} [options] essentially the regional[].. amNames, pmNames, ampm\n+\t * @returns {string} the formatted time\n+\t *\u002F\n+\t$.datepicker.formatTime = function (format, time, options) {\n+\t\toptions = options || {};\n+\t\toptions = $.extend({}, $.timepicker._defaults, options);\n+\t\ttime = $.extend({\n+\t\t\thour: 0,\n+\t\t\tminute: 0,\n+\t\t\tsecond: 0,\n+\t\t\tmillisec: 0,\n+\t\t\tmicrosec: 0,\n+\t\t\ttimezone: null\n+\t\t}, time);\n+\n+\t\tvar tmptime = format,\n+\t\t\tampmName = options.amNames[0],\n+\t\t\thour = parseInt(time.hour, 10);\n+\n+\t\tif (hour > 11) {\n+\t\t\tampmName = options.pmNames[0];\n+\t\t}\n+\n+\t\ttmptime = tmptime.replace(\u002F(?:HH?|hh?|mm?|ss?|[tT]{1,2}|[zZ]|[lc]|'.*?')\u002Fg, function (match) {\n+\t\t\tswitch (match) {\n+\t\t\tcase 'HH':\n+\t\t\t\treturn ('0' + hour).slice(-2);\n+\t\t\tcase 'H':\n+\t\t\t\treturn hour;\n+\t\t\tcase 'hh':\n+\t\t\t\treturn ('0' + convert24to12(hour)).slice(-2);\n+\t\t\tcase 'h':\n+\t\t\t\treturn convert24to12(hour);\n+\t\t\tcase 'mm':\n+\t\t\t\treturn ('0' + time.minute).slice(-2);\n+\t\t\tcase 'm':\n+\t\t\t\treturn time.minute;\n+\t\t\tcase 'ss':\n+\t\t\t\treturn ('0' + time.second).slice(-2);\n+\t\t\tcase 's':\n+\t\t\t\treturn time.second;\n+\t\t\tcase 'l':\n+\t\t\t\treturn ('00' + time.millisec).slice(-3);\n+\t\t\tcase 'c':\n+\t\t\t\treturn ('00' + time.microsec).slice(-3);\n+\t\t\tcase 'z':\n+\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, false);\n+\t\t\tcase 'Z':\n+\t\t\t\treturn $.timepicker.timezoneOffsetString(time.timezone === null ? options.timezone : time.timezone, true);\n+\t\t\tcase 'T':\n+\t\t\t\treturn ampmName.charAt(0).toUpperCase();\n+\t\t\tcase 'TT':\n+\t\t\t\treturn ampmName.toUpperCase();\n+\t\t\tcase 't':\n+\t\t\t\treturn ampmName.charAt(0).toLowerCase();\n+\t\t\tcase 'tt':\n+\t\t\t\treturn ampmName.toLowerCase();\n+\t\t\tdefault:\n+\t\t\t\treturn match.replace(\u002F'\u002Fg, \"\");\n+\t\t\t}\n+\t\t});\n+\n+\t\treturn tmptime;\n+\t};\n+\n+\t\u002F*\n+\t* the bad hack :\u002F override datepicker so it doesn't close on select\n+\t\u002F\u002F inspired: http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F1252512\u002Fjquery-datepicker-prevent-closing-picker-when-clicking-a-date\u002F1762378#1762378\n+\t*\u002F\n+\t$.datepicker._base_selectDate = $.datepicker._selectDate;\n+\t$.datepicker._selectDate = function (id, dateStr) {\n+\t\tvar inst = this._getInst($(id)[0]),\n+\t\t\ttp_inst = this._get(inst, 'timepicker'),\n+\t\t\twas_inline;\n+\n+\t\tif (tp_inst && inst.settings.showTimepicker) {\n+\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\n+\t\t\twas_inline = inst.inline;\n+\t\t\tinst.inline = inst.stay_open = true;\n+\t\t\t\u002F\u002FThis way the onSelect handler called from calendarpicker get the full dateTime\n+\t\t\tthis._base_selectDate(id, dateStr);\n+\t\t\tinst.inline = was_inline;\n+\t\t\tinst.stay_open = false;\n+\t\t\tthis._notifyChange(inst);\n+\t\t\tthis._updateDatepicker(inst);\n+\t\t} else {\n+\t\t\tthis._base_selectDate(id, dateStr);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* second bad hack :\u002F override datepicker so it triggers an event when changing the input field\n+\t* and does not redraw the datepicker on every selectDate event\n+\t*\u002F\n+\t$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;\n+\t$.datepicker._updateDatepicker = function (inst) {\n+\n+\t\t\u002F\u002F don't popup the datepicker if there is another instance already opened\n+\t\tvar input = inst.input[0];\n+\t\tif ($.datepicker._curInst && $.datepicker._curInst !== inst && $.datepicker._datepickerShowing && $.datepicker._lastInput !== input) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {\n+\n+\t\t\tthis._base_updateDatepicker(inst);\n+\n+\t\t\t\u002F\u002F Reload the time control when changing something in the input text field.\n+\t\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t\tif (tp_inst) {\n+\t\t\t\ttp_inst._addTimePicker(inst);\n+\t\t\t}\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* third bad hack :\u002F override datepicker so it allows spaces and colon in the input field\n+\t*\u002F\n+\t$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;\n+\t$.datepicker._doKeyPress = function (event) {\n+\t\tvar inst = $.datepicker._getInst(event.target),\n+\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tif ($.datepicker._get(inst, 'constrainInput')) {\n+\t\t\t\tvar ampm = tp_inst.support.ampm,\n+\t\t\t\t\ttz = tp_inst._defaults.showTimezone !== null ? tp_inst._defaults.showTimezone : tp_inst.support.timezone,\n+\t\t\t\t\tdateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),\n+\t\t\t\t\tdatetimeChars = tp_inst._defaults.timeFormat.toString()\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002F[hms]\u002Fg, '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTT\u002Fg, ampm ? 'APM' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FTt\u002Fg, ampm ? 'AaPpMm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FtT\u002Fg, ampm ? 'AaPpMm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002FT\u002Fg, ampm ? 'AP' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ftt\u002Fg, ampm ? 'apm' : '')\n+\t\t\t\t\t\t\t\t\t\t\t.replace(\u002Ft\u002Fg, ampm ? 'ap' : '') +\n+\t\t\t\t\t\t\t\t\t\t\t\" \" + tp_inst._defaults.separator +\n+\t\t\t\t\t\t\t\t\t\t\ttp_inst._defaults.timeSuffix +\n+\t\t\t\t\t\t\t\t\t\t\t(tz ? tp_inst._defaults.timezoneList.join('') : '') +\n+\t\t\t\t\t\t\t\t\t\t\t(tp_inst._defaults.amNames.join('')) + (tp_inst._defaults.pmNames.join('')) +\n+\t\t\t\t\t\t\t\t\t\t\tdateChars,\n+\t\t\t\t\tchr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);\n+\t\t\t\treturn event.ctrlKey || (chr \u003C ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $.datepicker._base_doKeyPress(event);\n+\t};\n+\n+\t\u002F*\n+\t* Fourth bad hack :\u002F override _updateAlternate function used in inline mode to init altField\n+\t* Update any alternate field to synchronise with the main field.\n+\t*\u002F\n+\t$.datepicker._base_updateAlternate = $.datepicker._updateAlternate;\n+\t$.datepicker._updateAlternate = function (inst) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar altField = tp_inst._defaults.altField;\n+\t\t\tif (altField) { \u002F\u002F update alternate field too\n+\t\t\t\tvar altFormat = tp_inst._defaults.altFormat || tp_inst._defaults.dateFormat,\n+\t\t\t\t\tdate = this._getDate(inst),\n+\t\t\t\t\tformatCfg = $.datepicker._getFormatConfig(inst),\n+\t\t\t\t\taltFormattedDateTime = '',\n+\t\t\t\t\taltSeparator = tp_inst._defaults.altSeparator ? tp_inst._defaults.altSeparator : tp_inst._defaults.separator,\n+\t\t\t\t\taltTimeSuffix = tp_inst._defaults.altTimeSuffix ? tp_inst._defaults.altTimeSuffix : tp_inst._defaults.timeSuffix,\n+\t\t\t\t\taltTimeFormat = tp_inst._defaults.altTimeFormat !== null ? tp_inst._defaults.altTimeFormat : tp_inst._defaults.timeFormat;\n+\n+\t\t\t\taltFormattedDateTime += $.datepicker.formatTime(altTimeFormat, tp_inst, tp_inst._defaults) + altTimeSuffix;\n+\t\t\t\tif (!tp_inst._defaults.timeOnly && !tp_inst._defaults.altFieldTimeOnly && date !== null) {\n+\t\t\t\t\tif (tp_inst._defaults.altFormat) {\n+\t\t\t\t\t\taltFormattedDateTime = $.datepicker.formatDate(tp_inst._defaults.altFormat, date, formatCfg) + altSeparator + altFormattedDateTime;\n+\t\t\t\t\t}\n+\t\t\t\t\telse {\n+\t\t\t\t\t\taltFormattedDateTime = tp_inst.formattedDate + altSeparator + altFormattedDateTime;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$(altField).val( inst.input.val() ? altFormattedDateTime : \"\");\n+\t\t\t}\n+\t\t}\n+\t\telse {\n+\t\t\t$.datepicker._base_updateAlternate(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Override key up event to sync manual input changes.\n+\t*\u002F\n+\t$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;\n+\t$.datepicker._doKeyUp = function (event) {\n+\t\tvar inst = $.datepicker._getInst(event.target),\n+\t\t\ttp_inst = $.datepicker._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tif (tp_inst._defaults.timeOnly && (inst.input.val() !== inst.lastVal)) {\n+\t\t\t\ttry {\n+\t\t\t\t\t$.datepicker._updateDatepicker(inst);\n+\t\t\t\t} catch (err) {\n+\t\t\t\t\t$.timepicker.log(err);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $.datepicker._base_doKeyUp(event);\n+\t};\n+\n+\t\u002F*\n+\t* override \"Today\" button to also grab the time and set it to input field.\n+\t*\u002F\n+\t$.datepicker._base_gotoToday = $.datepicker._gotoToday;\n+\t$.datepicker._gotoToday = function (id) {\n+\t\tvar inst = this._getInst($(id)[0]);\n+\t\tthis._base_gotoToday(id);\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (!tp_inst) {\n+\t\t  return;\n+\t\t}\n+\n+\t\tvar tzoffset = $.timepicker.timezoneOffsetNumber(tp_inst.timezone);\n+\t\tvar now = new Date();\n+\t\tnow.setMinutes(now.getMinutes() + now.getTimezoneOffset() + parseInt(tzoffset, 10));\n+\t\tthis._setTime(inst, now);\n+\t\tthis._setDate(inst, now);\n+\t\ttp_inst._onSelectHandler();\n+\t};\n+\n+\t\u002F*\n+\t* Disable & enable the Time in the datetimepicker\n+\t*\u002F\n+\t$.datepicker._disableTimepickerDatepicker = function (target) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\n+\t\tif (tp_inst) {\n+\t\t\tinst.settings.showTimepicker = false;\n+\t\t\ttp_inst._defaults.showTimepicker = false;\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t$.datepicker._enableTimepickerDatepicker = function (target) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\t$(target).datepicker('getDate'); \u002F\u002F Init selected[Year|Month|Day]\n+\t\tif (tp_inst) {\n+\t\t\tinst.settings.showTimepicker = true;\n+\t\t\ttp_inst._defaults.showTimepicker = true;\n+\t\t\ttp_inst._addTimePicker(inst); \u002F\u002F Could be disabled on page load\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create our own set time function\n+\t*\u002F\n+\t$.datepicker._setTime = function (inst, date) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar defaults = tp_inst._defaults;\n+\n+\t\t\t\u002F\u002F calling _setTime with no date sets time to defaults\n+\t\t\ttp_inst.hour = date ? date.getHours() : defaults.hour;\n+\t\t\ttp_inst.minute = date ? date.getMinutes() : defaults.minute;\n+\t\t\ttp_inst.second = date ? date.getSeconds() : defaults.second;\n+\t\t\ttp_inst.millisec = date ? date.getMilliseconds() : defaults.millisec;\n+\t\t\ttp_inst.microsec = date ? date.getMicroseconds() : defaults.microsec;\n+\n+\t\t\t\u002F\u002Fcheck if within min\u002Fmax times..\n+\t\t\ttp_inst._limitMinMaxDateTime(inst, true);\n+\n+\t\t\ttp_inst._onTimeChange();\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create new public method to set only time, callable as $().datepicker('setTime', date)\n+\t*\u002F\n+\t$.datepicker._setTimeDatepicker = function (target, date, withDate) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\tthis._setDateFromField(inst);\n+\t\t\tvar tp_date;\n+\t\t\tif (date) {\n+\t\t\t\tif (typeof date === \"string\") {\n+\t\t\t\t\ttp_inst._parseTime(date, withDate);\n+\t\t\t\t\ttp_date = new Date();\n+\t\t\t\t\ttp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n+\t\t\t\t\ttp_date.setMicroseconds(tp_inst.microsec);\n+\t\t\t\t} else {\n+\t\t\t\t\ttp_date = new Date(date.getTime());\n+\t\t\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\n+\t\t\t\t}\n+\t\t\t\tif (tp_date.toString() === 'Invalid Date') {\n+\t\t\t\t\ttp_date = undefined;\n+\t\t\t\t}\n+\t\t\t\tthis._setTime(inst, tp_date);\n+\t\t\t}\n+\t\t}\n+\n+\t};\n+\n+\t\u002F*\n+\t* override setDate() to allow setting time too within Date object\n+\t*\u002F\n+\t$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;\n+\t$.datepicker._setDateDatepicker = function (target, _date) {\n+\t\tvar inst = this._getInst(target);\n+\t\tvar date = _date;\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif (typeof(_date) === 'string') {\n+\t\t\tdate = new Date(_date);\n+\t\t\tif (!date.getTime()) {\n+\t\t\t\tthis._base_setDateDatepicker.apply(this, arguments);\n+\t\t\t\tdate = $(target).datepicker('getDate');\n+\t\t\t}\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tvar tp_date;\n+\t\tif (date instanceof Date) {\n+\t\t\ttp_date = new Date(date.getTime());\n+\t\t\ttp_date.setMicroseconds(date.getMicroseconds());\n+\t\t} else {\n+\t\t\ttp_date = date;\n+\t\t}\n+\n+\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\n+\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\n+\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\n+\t\t\u002F\u002F If a timezone is different in tp, keep the timezone as is\n+\t\tif (tp_inst && tp_date) {\n+\t\t\t\u002F\u002F look out for DST if tz wasn't specified\n+\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n+\t\t\t\ttp_inst.timezone = tp_date.getTimezoneOffset() * -1;\n+\t\t\t}\n+\t\t\tdate = $.timepicker.timezoneAdjust(date, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()), tp_inst.timezone);\n+\t\t\ttp_date = $.timepicker.timezoneAdjust(tp_date, $.timepicker.timezoneOffsetString(-tp_date.getTimezoneOffset()), tp_inst.timezone);\n+\t\t}\n+\n+\t\tthis._updateDatepicker(inst);\n+\t\tthis._base_setDateDatepicker.apply(this, arguments);\n+\t\tthis._setTimeDatepicker(target, tp_date, true);\n+\t};\n+\n+\t\u002F*\n+\t* override getDate() to allow getting time too within Date object\n+\t*\u002F\n+\t$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;\n+\t$.datepicker._getDateDatepicker = function (target, noDefault) {\n+\t\tvar inst = this._getInst(target);\n+\t\tif (!inst) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\n+\t\tif (tp_inst) {\n+\t\t\t\u002F\u002F if it hasn't yet been defined, grab from field\n+\t\t\tif (inst.lastVal === undefined) {\n+\t\t\t\tthis._setDateFromField(inst, noDefault);\n+\t\t\t}\n+\n+\t\t\tvar date = this._getDate(inst);\n+\n+\t\t\tvar currDT = null;\n+\n+\t\t\tif (tp_inst.$altInput && tp_inst._defaults.altFieldTimeOnly) {\n+\t\t\t\tcurrDT = tp_inst.$input.val() + ' ' + tp_inst.$altInput.val();\n+\t\t\t}\n+\t\t\telse if (tp_inst.$input.get(0).tagName !== 'INPUT' && tp_inst.$altInput) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * in case the datetimepicker has been applied to a non-input tag for inline UI,\n+\t\t\t\t * and the user has not configured the plugin to display only time in altInput,\n+\t\t\t\t * pick current date time from the altInput (and hope for the best, for now, until \"ER1\" is applied)\n+\t\t\t\t *\n+\t\t\t\t * @todo ER1. Since altInput can have a totally difference format, convert it to standard format by reading input format from \"altFormat\" and \"altTimeFormat\" option values\n+\t\t\t\t *\u002F\n+\t\t\t\tcurrDT = tp_inst.$altInput.val();\n+\t\t\t}\n+\t\t\telse {\n+\t\t\t\tcurrDT = tp_inst.$input.val();\n+\t\t\t}\n+\n+\t\t\tif (date && tp_inst._parseTime(currDT, !inst.settings.timeOnly)) {\n+\t\t\t\tdate.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second, tp_inst.millisec);\n+\t\t\t\tdate.setMicroseconds(tp_inst.microsec);\n+\n+\t\t\t\t\u002F\u002F This is important if you are using the timezone option, javascript's Date\n+\t\t\t\t\u002F\u002F object will only return the timezone offset for the current locale, so we\n+\t\t\t\t\u002F\u002F adjust it accordingly.  If not using timezone option this won't matter..\n+\t\t\t\tif (tp_inst.timezone != null) {\n+\t\t\t\t\t\u002F\u002F look out for DST if tz wasn't specified\n+\t\t\t\t\tif (!tp_inst.support.timezone && tp_inst._defaults.timezone === null) {\n+\t\t\t\t\t\ttp_inst.timezone = date.getTimezoneOffset() * -1;\n+\t\t\t\t\t}\n+\t\t\t\t\tdate = $.timepicker.timezoneAdjust(date, tp_inst.timezone, $.timepicker.timezoneOffsetString(-date.getTimezoneOffset()));\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\treturn date;\n+\t\t}\n+\t\treturn this._base_getDateDatepicker(target, noDefault);\n+\t};\n+\n+\t\u002F*\n+\t* override parseDate() because UI 1.8.14 throws an error about \"Extra characters\"\n+\t* An option in datapicker to ignore extra format characters would be nicer.\n+\t*\u002F\n+\t$.datepicker._base_parseDate = $.datepicker.parseDate;\n+\t$.datepicker.parseDate = function (format, value, settings) {\n+\t\tvar date;\n+\t\ttry {\n+\t\t\tdate = this._base_parseDate(format, value, settings);\n+\t\t} catch (err) {\n+\t\t\t\u002F\u002F Hack!  The error message ends with a colon, a space, and\n+\t\t\t\u002F\u002F the \"extra\" characters.  We rely on that instead of\n+\t\t\t\u002F\u002F attempting to perfectly reproduce the parsing algorithm.\n+\t\t\tif (err.indexOf(\":\") >= 0) {\n+\t\t\t\tdate = this._base_parseDate(format, value.substring(0, value.length - (err.length - err.indexOf(':') - 2)), settings);\n+\t\t\t\t$.timepicker.log(\"Error parsing the date string: \" + err + \"\\ndate string = \" + value + \"\\ndate format = \" + format);\n+\t\t\t} else {\n+\t\t\t\tthrow err;\n+\t\t\t}\n+\t\t}\n+\t\treturn date;\n+\t};\n+\n+\t\u002F*\n+\t* override formatDate to set date with time to the input\n+\t*\u002F\n+\t$.datepicker._base_formatDate = $.datepicker._formatDate;\n+\t$.datepicker._formatDate = function (inst, day, month, year) {\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\ttp_inst._updateDateTime(inst);\n+\t\t\treturn tp_inst.$input.val();\n+\t\t}\n+\t\treturn this._base_formatDate(inst);\n+\t};\n+\n+\t\u002F*\n+\t* override options setter to add time to maxDate(Time) and minDate(Time). MaxDate\n+\t*\u002F\n+\t$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;\n+\t$.datepicker._optionDatepicker = function (target, name, value) {\n+\t\tvar inst = this._getInst(target),\n+\t\t\tname_clone;\n+\t\tif (!inst) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\tvar tp_inst = this._get(inst, 'timepicker');\n+\t\tif (tp_inst) {\n+\t\t\tvar min = null,\n+\t\t\t\tmax = null,\n+\t\t\t\tonselect = null,\n+\t\t\t\toverrides = tp_inst._defaults.evnts,\n+\t\t\t\tfns = {},\n+\t\t\t\tprop,\n+\t\t\t\tret,\n+\t\t\t\toldVal,\n+\t\t\t\t$target;\n+\t\t\tif (typeof name === 'string') { \u002F\u002F if min\u002Fmax was set with the string\n+\t\t\t\tif (name === 'minDate' || name === 'minDateTime') {\n+\t\t\t\t\tmin = value;\n+\t\t\t\t} else if (name === 'maxDate' || name === 'maxDateTime') {\n+\t\t\t\t\tmax = value;\n+\t\t\t\t} else if (name === 'onSelect') {\n+\t\t\t\t\tonselect = value;\n+\t\t\t\t} else if (overrides.hasOwnProperty(name)) {\n+\t\t\t\t\tif (typeof (value) === 'undefined') {\n+\t\t\t\t\t\treturn overrides[name];\n+\t\t\t\t\t}\n+\t\t\t\t\tfns[name] = value;\n+\t\t\t\t\tname_clone = {}; \u002F\u002Fempty results in exiting function after overrides updated\n+\t\t\t\t}\n+\t\t\t} else if (typeof name === 'object') { \u002F\u002Fif min\u002Fmax was set with the JSON\n+\t\t\t\tif (name.minDate) {\n+\t\t\t\t\tmin = name.minDate;\n+\t\t\t\t} else if (name.minDateTime) {\n+\t\t\t\t\tmin = name.minDateTime;\n+\t\t\t\t} else if (name.maxDate) {\n+\t\t\t\t\tmax = name.maxDate;\n+\t\t\t\t} else if (name.maxDateTime) {\n+\t\t\t\t\tmax = name.maxDateTime;\n+\t\t\t\t}\n+\t\t\t\tfor (prop in overrides) {\n+\t\t\t\t\tif (overrides.hasOwnProperty(prop) && name[prop]) {\n+\t\t\t\t\t\tfns[prop] = name[prop];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tfor (prop in fns) {\n+\t\t\t\tif (fns.hasOwnProperty(prop)) {\n+\t\t\t\t\toverrides[prop] = fns[prop];\n+\t\t\t\t\tif (!name_clone) { name_clone = $.extend({}, name); }\n+\t\t\t\t\tdelete name_clone[prop];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tif (name_clone && isEmptyObject(name_clone)) { return; }\n+\t\t\tif (min) { \u002F\u002Fif min was set\n+\t\t\t\tif (min === 0) {\n+\t\t\t\t\tmin = new Date();\n+\t\t\t\t} else {\n+\t\t\t\t\tmin = new Date(min);\n+\t\t\t\t}\n+\t\t\t\ttp_inst._defaults.minDate = min;\n+\t\t\t\ttp_inst._defaults.minDateTime = min;\n+\t\t\t} else if (max) { \u002F\u002Fif max was set\n+\t\t\t\tif (max === 0) {\n+\t\t\t\t\tmax = new Date();\n+\t\t\t\t} else {\n+\t\t\t\t\tmax = new Date(max);\n+\t\t\t\t}\n+\t\t\t\ttp_inst._defaults.maxDate = max;\n+\t\t\t\ttp_inst._defaults.maxDateTime = max;\n+\t\t\t} else if (onselect) {\n+\t\t\t\ttp_inst._defaults.onSelect = onselect;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Datepicker will override our date when we call _base_optionDatepicker when\n+\t\t\t\u002F\u002F calling minDate\u002FmaxDate, so we will first grab the value, call\n+\t\t\t\u002F\u002F _base_optionDatepicker, then set our value back.\n+\t\t\tif(min || max){\n+\t\t\t\t$target = $(target);\n+\t\t\t\toldVal = $target.datetimepicker('getDate');\n+\t\t\t\tret = this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n+\t\t\t\t$target.datetimepicker('setDate', oldVal);\n+\t\t\t\treturn ret;\n+\t\t\t}\n+\t\t}\n+\t\tif (value === undefined) {\n+\t\t\treturn this._base_optionDatepicker.call($.datepicker, target, name);\n+\t\t}\n+\t\treturn this._base_optionDatepicker.call($.datepicker, target, name_clone || name, value);\n+\t};\n+\n+\t\u002F*\n+\t* jQuery isEmptyObject does not check hasOwnProperty - if someone has added to the object prototype,\n+\t* it will return false for all objects\n+\t*\u002F\n+\tvar isEmptyObject = function (obj) {\n+\t\tvar prop;\n+\t\tfor (prop in obj) {\n+\t\t\tif (obj.hasOwnProperty(prop)) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\t\treturn true;\n+\t};\n+\n+\t\u002F*\n+\t* jQuery extend now ignores nulls!\n+\t*\u002F\n+\tvar extendRemove = function (target, props) {\n+\t\t$.extend(target, props);\n+\t\tfor (var name in props) {\n+\t\t\tif (props[name] === null || props[name] === undefined) {\n+\t\t\t\ttarget[name] = props[name];\n+\t\t\t}\n+\t\t}\n+\t\treturn target;\n+\t};\n+\n+\t\u002F*\n+\t* Determine by the time format which units are supported\n+\t* Returns an object of booleans for each unit\n+\t*\u002F\n+\tvar detectSupport = function (timeFormat) {\n+\t\tvar tf = timeFormat.replace(\u002F'.*?'\u002Fg, '').toLowerCase(), \u002F\u002F removes literals\n+\t\t\tisIn = function (f, t) { \u002F\u002F does the format contain the token?\n+\t\t\t\t\treturn f.indexOf(t) !== -1 ? true : false;\n+\t\t\t\t};\n+\t\treturn {\n+\t\t\t\thour: isIn(tf, 'h'),\n+\t\t\t\tminute: isIn(tf, 'm'),\n+\t\t\t\tsecond: isIn(tf, 's'),\n+\t\t\t\tmillisec: isIn(tf, 'l'),\n+\t\t\t\tmicrosec: isIn(tf, 'c'),\n+\t\t\t\ttimezone: isIn(tf, 'z'),\n+\t\t\t\tampm: isIn(tf, 't') && isIn(timeFormat, 'h'),\n+\t\t\t\tiso8601: isIn(timeFormat, 'Z')\n+\t\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Converts 24 hour format into 12 hour\n+\t* Returns 12 hour without leading 0\n+\t*\u002F\n+\tvar convert24to12 = function (hour) {\n+\t\thour %= 12;\n+\n+\t\tif (hour === 0) {\n+\t\t\thour = 12;\n+\t\t}\n+\n+\t\treturn String(hour);\n+\t};\n+\n+\tvar computeEffectiveSetting = function (settings, property) {\n+\t\treturn settings && settings[property] ? settings[property] : $.timepicker._defaults[property];\n+\t};\n+\n+\t\u002F*\n+\t* Splits datetime string into date and time substrings.\n+\t* Throws exception when date can't be parsed\n+\t* Returns {dateString: dateString, timeString: timeString}\n+\t*\u002F\n+\tvar splitDateTime = function (dateTimeString, timeSettings) {\n+\t\t\u002F\u002F The idea is to get the number separator occurrences in datetime and the time format requested (since time has\n+\t\t\u002F\u002F fewer unknowns, mostly numbers and am\u002Fpm). We will use the time pattern to split.\n+\t\tvar separator = computeEffectiveSetting(timeSettings, 'separator'),\n+\t\t\tformat = computeEffectiveSetting(timeSettings, 'timeFormat'),\n+\t\t\ttimeParts = format.split(separator), \u002F\u002F how many occurrences of separator may be in our format?\n+\t\t\ttimePartsLen = timeParts.length,\n+\t\t\tallParts = dateTimeString.split(separator),\n+\t\t\tallPartsLen = allParts.length;\n+\n+\t\tif (allPartsLen > 1) {\n+\t\t\treturn {\n+\t\t\t\tdateString: allParts.splice(0, allPartsLen - timePartsLen).join(separator),\n+\t\t\t\ttimeString: allParts.splice(0, timePartsLen).join(separator)\n+\t\t\t};\n+\t\t}\n+\n+\t\treturn {\n+\t\t\tdateString: dateTimeString,\n+\t\t\ttimeString: ''\n+\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Internal function to parse datetime interval\n+\t* Returns: {date: Date, timeObj: Object}, where\n+\t*   date - parsed date without time (type Date)\n+\t*   timeObj = {hour: , minute: , second: , millisec: , microsec: } - parsed time. Optional\n+\t*\u002F\n+\tvar parseDateTimeInternal = function (dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {\n+\t\tvar date,\n+\t\t\tparts,\n+\t\t\tparsedTime;\n+\n+\t\tparts = splitDateTime(dateTimeString, timeSettings);\n+\t\tdate = $.datepicker._base_parseDate(dateFormat, parts.dateString, dateSettings);\n+\n+\t\tif (parts.timeString === '') {\n+\t\t\treturn {\n+\t\t\t\tdate: date\n+\t\t\t};\n+\t\t}\n+\n+\t\tparsedTime = $.datepicker.parseTime(timeFormat, parts.timeString, timeSettings);\n+\n+\t\tif (!parsedTime) {\n+\t\t\tthrow 'Wrong time format';\n+\t\t}\n+\n+\t\treturn {\n+\t\t\tdate: date,\n+\t\t\ttimeObj: parsedTime\n+\t\t};\n+\t};\n+\n+\t\u002F*\n+\t* Internal function to set timezone_select to the local timezone\n+\t*\u002F\n+\tvar selectLocalTimezone = function (tp_inst, date) {\n+\t\tif (tp_inst && tp_inst.timezone_select) {\n+\t\t\tvar now = date || new Date();\n+\t\t\ttp_inst.timezone_select.val(-now.getTimezoneOffset());\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t* Create a Singleton Instance\n+\t*\u002F\n+\t$.timepicker = new Timepicker();\n+\n+\t\u002F**\n+\t * Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)\n+\t * @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned\n+\t * @param {boolean} iso8601 if true formats in accordance to iso8601 \"+12:45\"\n+\t * @return {string}\n+\t *\u002F\n+\t$.timepicker.timezoneOffsetString = function (tzMinutes, iso8601) {\n+\t\tif (isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes \u003C -720) {\n+\t\t\treturn tzMinutes;\n+\t\t}\n+\n+\t\tvar off = tzMinutes,\n+\t\t\tminutes = off % 60,\n+\t\t\thours = (off - minutes) \u002F 60,\n+\t\t\tiso = iso8601 ? ':' : '',\n+\t\t\ttz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);\n+\n+\t\tif (tz === '+00:00') {\n+\t\t\treturn 'Z';\n+\t\t}\n+\t\treturn tz;\n+\t};\n+\n+\t\u002F**\n+\t * Get the number in minutes that represents a timezone string\n+\t * @param  {string} tzString formatted like \"+0500\", \"-1245\", \"Z\"\n+\t * @return {number} the offset minutes or the original string if it doesn't match expectations\n+\t *\u002F\n+\t$.timepicker.timezoneOffsetNumber = function (tzString) {\n+\t\tvar normalized = tzString.toString().replace(':', ''); \u002F\u002F excuse any iso8601, end up with \"+1245\"\n+\n+\t\tif (normalized.toUpperCase() === 'Z') { \u002F\u002F if iso8601 with Z, its 0 minute offset\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\tif (!\u002F^(\\-|\\+)\\d{4}$\u002F.test(normalized)) { \u002F\u002F possibly a user defined tz, so just give it back\n+\t\t\treturn parseInt(tzString, 10);\n+\t\t}\n+\n+\t\treturn ((normalized.substr(0, 1) === '-' ? -1 : 1) * \u002F\u002F plus or minus\n+\t\t\t\t\t((parseInt(normalized.substr(1, 2), 10) * 60) + \u002F\u002F hours (converted to minutes)\n+\t\t\t\t\tparseInt(normalized.substr(3, 2), 10))); \u002F\u002F minutes\n+\t};\n+\n+\t\u002F**\n+\t * No way to set timezone in js Date, so we must adjust the minutes to compensate. (think setDate, getDate)\n+\t * @param  {Date} date\n+\t * @param  {string} fromTimezone formatted like \"+0500\", \"-1245\"\n+\t * @param  {string} toTimezone formatted like \"+0500\", \"-1245\"\n+\t * @return {Date}\n+\t *\u002F\n+\t$.timepicker.timezoneAdjust = function (date, fromTimezone, toTimezone) {\n+\t\tvar fromTz = $.timepicker.timezoneOffsetNumber(fromTimezone);\n+\t\tvar toTz = $.timepicker.timezoneOffsetNumber(toTimezone);\n+\t\tif (!isNaN(toTz)) {\n+\t\t\tdate.setMinutes(date.getMinutes() + (-fromTz) - (-toTz));\n+\t\t}\n+\t\treturn date;\n+\t};\n+\n+\t\u002F**\n+\t * Calls `timepicker()` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * n.b. The input value must be correctly formatted (reformatting is not supported)\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the timepicker() call\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.timeRange = function (startTime, endTime, options) {\n+\t\treturn $.timepicker.handleRange('timepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `datetimepicker` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @param  {string} method Can be used to specify the type of picker to be added\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.datetimeRange = function (startTime, endTime, options) {\n+\t\t$.timepicker.handleRange('datetimepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `datepicker` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.dateRange = function (startTime, endTime, options) {\n+\t\t$.timepicker.handleRange('datepicker', startTime, endTime, options);\n+\t};\n+\n+\t\u002F**\n+\t * Calls `method` on the `startTime` and `endTime` elements, and configures them to\n+\t * enforce date range limits.\n+\t * @param  {string} method Can be used to specify the type of picker to be added\n+\t * @param  {Element} startTime\n+\t * @param  {Element} endTime\n+\t * @param  {Object} options Options for the `timepicker()` call. Also supports `reformat`,\n+\t *   a boolean value that can be used to reformat the input values to the `dateFormat`.\n+\t * @return {jQuery}\n+\t *\u002F\n+\t$.timepicker.handleRange = function (method, startTime, endTime, options) {\n+\t\toptions = $.extend({}, {\n+\t\t\tminInterval: 0, \u002F\u002F min allowed interval in milliseconds\n+\t\t\tmaxInterval: 0, \u002F\u002F max allowed interval in milliseconds\n+\t\t\tstart: {},      \u002F\u002F options for start picker\n+\t\t\tend: {}         \u002F\u002F options for end picker\n+\t\t}, options);\n+\n+\t\t\u002F\u002F for the mean time this fixes an issue with calling getDate with timepicker()\n+\t\tvar timeOnly = false;\n+\t\tif(method === 'timepicker'){\n+\t\t\ttimeOnly = true;\n+\t\t\tmethod = 'datetimepicker';\n+\t\t}\n+\n+\t\tfunction checkDates(changed, other) {\n+\t\t\tvar startdt = startTime[method]('getDate'),\n+\t\t\t\tenddt = endTime[method]('getDate'),\n+\t\t\t\tchangeddt = changed[method]('getDate');\n+\n+\t\t\tif (startdt !== null) {\n+\t\t\t\tvar minDate = new Date(startdt.getTime()),\n+\t\t\t\t\tmaxDate = new Date(startdt.getTime());\n+\n+\t\t\t\tminDate.setMilliseconds(minDate.getMilliseconds() + options.minInterval);\n+\t\t\t\tmaxDate.setMilliseconds(maxDate.getMilliseconds() + options.maxInterval);\n+\n+\t\t\t\tif (options.minInterval > 0 && minDate > enddt) { \u002F\u002F minInterval check\n+\t\t\t\t\tendTime[method]('setDate', minDate);\n+\t\t\t\t}\n+\t\t\t\telse if (options.maxInterval > 0 && maxDate \u003C enddt) { \u002F\u002F max interval check\n+\t\t\t\t\tendTime[method]('setDate', maxDate);\n+\t\t\t\t}\n+\t\t\t\telse if (startdt > enddt) {\n+\t\t\t\t\tother[method]('setDate', changeddt);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tfunction selected(changed, other, option) {\n+\t\t\tif (!changed.val()) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tvar date = changed[method].call(changed, 'getDate');\n+\t\t\tif (date !== null && options.minInterval > 0) {\n+\t\t\t\tif (option === 'minDate') {\n+\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() + options.minInterval);\n+\t\t\t\t}\n+\t\t\t\tif (option === 'maxDate') {\n+\t\t\t\t\tdate.setMilliseconds(date.getMilliseconds() - options.minInterval);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif (date.getTime) {\n+\t\t\t\tother[method].call(other, 'option', option, date);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$.fn[method].call(startTime, $.extend({\n+\t\t\ttimeOnly: timeOnly,\n+\t\t\tonClose: function (dateText, inst) {\n+\t\t\t\tcheckDates($(this), endTime);\n+\t\t\t},\n+\t\t\tonSelect: function (selectedDateTime) {\n+\t\t\t\tselected($(this), endTime, 'minDate');\n+\t\t\t}\n+\t\t}, options, options.start));\n+\t\t$.fn[method].call(endTime, $.extend({\n+\t\t\ttimeOnly: timeOnly,\n+\t\t\tonClose: function (dateText, inst) {\n+\t\t\t\tcheckDates($(this), startTime);\n+\t\t\t},\n+\t\t\tonSelect: function (selectedDateTime) {\n+\t\t\t\tselected($(this), startTime, 'maxDate');\n+\t\t\t}\n+\t\t}, options, options.end));\n+\n+\t\tcheckDates(startTime, endTime);\n+\n+\t\tselected(startTime, endTime, 'minDate');\n+\t\tselected(endTime, startTime, 'maxDate');\n+\n+\t\treturn $([startTime.get(0), endTime.get(0)]);\n+\t};\n+\n+\t\u002F**\n+\t * Log error or data to the console during error or debugging\n+\t * @param  {Object} err pass any type object to log to the console during error or debugging\n+\t * @return {void}\n+\t *\u002F\n+\t$.timepicker.log = function () {\n+\t\t\u002F\u002F Older IE (9, maybe 10) throw error on accessing `window.console.log.apply`, so check first.\n+\t\tif (window.console && window.console.log && window.console.log.apply) {\n+\t\t\twindow.console.log.apply(window.console, Array.prototype.slice.call(arguments));\n+\t\t}\n+\t};\n+\n+\t\u002F*\n+\t * Add util object to allow access to private methods for testability.\n+\t *\u002F\n+\t$.timepicker._util = {\n+\t\t_extendRemove: extendRemove,\n+\t\t_isEmptyObject: isEmptyObject,\n+\t\t_convert24to12: convert24to12,\n+\t\t_detectSupport: detectSupport,\n+\t\t_selectLocalTimezone: selectLocalTimezone,\n+\t\t_computeEffectiveSetting: computeEffectiveSetting,\n+\t\t_splitDateTime: splitDateTime,\n+\t\t_parseDateTimeInternal: parseDateTimeInternal\n+\t};\n+\n+\t\u002F*\n+\t* Microsecond support\n+\t*\u002F\n+\tif (!Date.prototype.getMicroseconds) {\n+\t\tDate.prototype.microseconds = 0;\n+\t\tDate.prototype.getMicroseconds = function () { return this.microseconds; };\n+\t\tDate.prototype.setMicroseconds = function (m) {\n+\t\t\tthis.setMilliseconds(this.getMilliseconds() + Math.floor(m \u002F 1000));\n+\t\t\tthis.microseconds = m % 1000;\n+\t\t\treturn this;\n+\t\t};\n+\t}\n+\n+\t\u002F*\n+\t* Keep up with the version\n+\t*\u002F\n+\t$.timepicker.version = \"1.6.3\";\n+\n+}));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2 +1,2 @@\n-\u002F*! Select2 4.0.13 | https:\u002F\u002Fgithub.com\u002Fselect2\u002Fselect2\u002Fblob\u002Fmaster\u002FLICENSE.md *\u002F\r\n+\u002F*! Select2 4.0.13 | https:\u002F\u002Fgithub.com\u002Fselect2\u002Fselect2\u002Fblob\u002Fmaster\u002FLICENSE.md *\u002F\n !function(n){\"function\"==typeof define&&define.amd?define([\"jquery\"],n):\"object\"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t=\"undefined\"!=typeof window?require(\"jquery\"):require(\"jquery\")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split(\"\u002F\"),f=y.map,g=f&&f[\"*\"]||{};if(e){for(s=(e=e.split(\"\u002F\")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,\"\")),\".\"===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u\u003Ce.length;u++)if(\".\"===(p=e[u]))e.splice(u,1),u-=1;else if(\"..\"===p){if(0===u||1===u&&\"..\"===e[2]||\"..\"===e[u-1])continue;0\u003Cu&&(e.splice(u-1,2),u-=2)}e=e.join(\"\u002F\")}if((h||g)&&f){for(u=(n=e.split(\"\u002F\")).length;0\u003Cu;u-=1){if(i=n.slice(0,u).join(\"\u002F\"),h)for(d=h.length;0\u003Cd;d-=1)if(r=(r=f[h.slice(0,d).join(\"\u002F\")])&&r[i]){o=r,a=u;break}if(o)break;!l&&g&&g[i]&&(l=g[i],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join(\"\u002F\"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return\"string\"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!b(m,e)&&!b(_,e))throw new Error(\"No \"+e);return m[e]}function u(e){var t,n=e?e.indexOf(\"!\"):-1;return-1\u003Cn&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?u(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},r=Object.prototype.hasOwnProperty,a=[].slice,w=\u002F\\.js$\u002F,f=function(e,t){var n,i=u(e),r=i[0],o=t[1];return e=i[1],r&&(n=D(r=c(r,o))),r?e=n&&n.normalize?n.normalize(e,function(t){return function(e){return c(e,t)}}(o)):c(e,o):(r=(i=u(e=c(e,o)))[0],e=i[1],r&&(n=D(r))),{f:r?r+\"!\"+e:e,n:e,pr:r,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:\"\",exports:m[e],config:function(e){return function(){return y&&y.config&&y.config[e]||{}}}(e)}}},o=function(e,t,n,i){var r,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(i=i||e),\"undefined\"==p||\"function\"==p){for(t=!t.length&&n.length?[\"require\",\"exports\",\"module\"]:t,l=0;l\u003Ct.length;l+=1)if(\"require\"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if(\"exports\"===o)d[l]=g.exports(e),u=!0;else if(\"module\"===o)r=d[l]=g.module(e);else if(b(m,o)||b(v,o)||b(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+\" missing \"+o);a.p.load(a.n,A(i,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(r&&r.exports!==h&&r.exports!==m[e]?m[e]=r.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,i,r){if(\"string\"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},\"function\"==typeof n&&(n=i,i=r),i?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(i=function(e,t,n){if(\"string\"!=typeof e)throw new Error(\"See almond README: incorrect module build, no module name\");t.splice||(n=t,t=[]),b(m,e)||b(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=i),e.define(\"almond\",function(){}),e.define(\"jquery\",[],function(){var e=d||$;return null==e&&console&&console.error&&console.error(\"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"),e}),e.define(\"select2\u002Futils\",[\"jquery\"],function(o){var r={};function u(e){var t=e.prototype,n=[];for(var i in t){\"function\"==typeof t[i]&&\"constructor\"!==i&&n.push(i)}return n}r.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},r.Decorate=function(i,r){var e=u(r),t=u(i);function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.length,n=i.prototype.constructor;0\u003Ct&&(e.call(arguments,i.prototype.constructor),n=r.prototype.constructor),n.apply(this,arguments)}r.displayName=i.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n\u003Ct.length;n++){var s=t[n];o.prototype[s]=i.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=r.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l\u003Ce.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),\"*\"in this.listeners&&this.invoke(this.listeners[\"*\"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,i=e.length;n\u003Ci;n++)e[n].apply(this,t)},r.Observable=e,r.generateChars=function(e){for(var t=\"\",n=0;n\u003Ce;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},r.bind=function(e,t){return function(){e.apply(t,arguments)}},r._convertData=function(e){for(var t in e){var n=t.split(\"-\"),i=e;if(1!==n.length){for(var r=0;r\u003Cn.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},r.hasScroll=function(e,t){var n=o(t),i=t.style.overflowX,r=t.style.overflowY;return(i!==r||\"hidden\"!==r&&\"visible\"!==r)&&(\"scroll\"===i||\"scroll\"===r||(n.innerHeight()\u003Ct.scrollHeight||n.innerWidth()\u003Ct.scrollWidth))},r.escapeMarkup=function(e){var t={\"\\\\\":\"&#92;\",\"&\":\"&amp;\",\"\u003C\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"\u002F\":\"&#47;\"};return\"string\"!=typeof e?e:String(e).replace(\u002F[&\u003C>\"'\\\u002F\\\\]\u002Fg,function(e){return t[e]})},r.appendMany=function(e,t){if(\"1.7\"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute(\"data-select2-id\");return null==t&&(e.id?(t=e.id,e.setAttribute(\"data-select2-id\",t)):(e.setAttribute(\"data-select2-id\",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute(\"data-select2-id\")},r}),e.define(\"select2\u002Fresults\",[\"jquery\",\".\u002Futils\"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('\u003Cul class=\"select2-results__options\" role=\"listbox\">\u003C\u002Ful>');return this.options.get(\"multiple\")&&e.attr(\"aria-multiselectable\",\"true\"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get(\"escapeMarkup\");this.clear(),this.hideLoading();var n=h('\u003Cli role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\">\u003C\u002Fli>'),i=this.options.get(\"translations\").get(e.message);n.append(t(i(e.args))),n[0].className+=\" select2-results__message\",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(\".select2-results__message\").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n\u003Ce.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger(\"results:message\",{message:\"noResults\"})},i.prototype.position=function(e,t){t.find(\".select2-results\").append(e)},i.prototype.sort=function(e){return this.options.get(\"sorter\")(e)},i.prototype.highlightFirstItem=function(){var e=this.$results.find(\".select2-results__option[aria-selected]\"),t=e.filter(\"[aria-selected=true]\");0\u003Ct.length?t.first().trigger(\"mouseenter\"):e.first().trigger(\"mouseenter\"),this.ensureHighlightVisible()},i.prototype.setClasses=function(){var t=this;this.data.current(function(e){var i=h.map(e,function(e){return e.id.toString()});t.$results.find(\".select2-results__option[aria-selected]\").each(function(){var e=h(this),t=f.GetData(this,\"data\"),n=\"\"+t.id;null!=t.element&&t.element.selected||null==t.element&&-1\u003Ch.inArray(n,i)?e.attr(\"aria-selected\",\"true\"):e.attr(\"aria-selected\",\"false\")})})},i.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get(\"translations\").get(\"searching\")(e)},n=this.option(t);n.className+=\" loading-results\",this.$results.prepend(n)},i.prototype.hideLoading=function(){this.$results.find(\".loading-results\").remove()},i.prototype.option=function(e){var t=document.createElement(\"li\");t.className=\"select2-results__option\";var n={role:\"option\",\"aria-selected\":\"false\"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var r in(null!=e.element&&i.call(e.element,\":disabled\")||null==e.element&&e.disabled)&&(delete n[\"aria-selected\"],n[\"aria-disabled\"]=\"true\"),null==e.id&&delete n[\"aria-selected\"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role=\"group\",n[\"aria-label\"]=e.text,delete n[\"aria-selected\"]),n){var o=n[r];t.setAttribute(r,o)}if(e.children){var s=h(t),a=document.createElement(\"strong\");a.className=\"select2-results__group\";h(a);this.template(e,a);for(var l=[],c=0;c\u003Ce.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h(\"\u003Cul>\u003C\u002Ful>\",{class:\"select2-results__options select2-results__options--nested\"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,\"data\",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+\"-results\";this.$results.attr(\"id\",n),t.on(\"results:all\",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on(\"results:append\",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on(\"query\",function(e){l.hideMessages(),l.showLoading(e)}),t.on(\"select\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"unselect\",function(){t.isOpen()&&(l.setClasses(),l.options.get(\"scrollAfterSelect\")&&l.highlightFirstItem())}),t.on(\"open\",function(){l.$results.attr(\"aria-expanded\",\"true\"),l.$results.attr(\"aria-hidden\",\"false\"),l.setClasses(),l.ensureHighlightVisible()}),t.on(\"close\",function(){l.$results.attr(\"aria-expanded\",\"false\"),l.$results.attr(\"aria-hidden\",\"true\"),l.$results.removeAttr(\"aria-activedescendant\")}),t.on(\"results:toggle\",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger(\"mouseup\")}),t.on(\"results:select\",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],\"data\");\"true\"==e.attr(\"aria-selected\")?l.trigger(\"close\",{}):l.trigger(\"select\",{data:t})}}),t.on(\"results:previous\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e);if(!(n\u003C=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger(\"mouseenter\");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o\u003C0&&l.$results.scrollTop(a)}}),t.on(\"results:next\",function(){var e=l.getHighlightedResults(),t=l.$results.find(\"[aria-selected]\"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger(\"mouseenter\");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):r\u003Co&&l.$results.scrollTop(s)}}),t.on(\"results:focus\",function(e){e.element.addClass(\"select2-results__option--highlighted\")}),t.on(\"results:message\",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on(\"mousewheel\",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,i=0\u003Ce.deltaY&&t-e.deltaY\u003C=0,r=e.deltaY\u003C0&&n\u003C=l.$results.height();i?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):r&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on(\"mouseup\",\".select2-results__option[aria-selected]\",function(e){var t=h(this),n=f.GetData(this,\"data\");\"true\"!==t.attr(\"aria-selected\")?l.trigger(\"select\",{originalEvent:e,data:n}):l.options.get(\"multiple\")?l.trigger(\"unselect\",{originalEvent:e,data:n}):l.trigger(\"close\",{})}),this.$results.on(\"mouseenter\",\".select2-results__option[aria-selected]\",function(e){var t=f.GetData(this,\"data\");l.getHighlightedResults().removeClass(\"select2-results__option--highlighted\"),l.trigger(\"results:focus\",{data:t,element:h(this)})})},i.prototype.getHighlightedResults=function(){return this.$results.find(\".select2-results__option--highlighted\")},i.prototype.destroy=function(){this.$results.remove()},i.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find(\"[aria-selected]\").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t\u003C=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o\u003C0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get(\"templateResult\"),i=this.options.get(\"escapeMarkup\"),r=n(e,t);null==r?t.style.display=\"none\":\"string\"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define(\"select2\u002Fkeys\",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define(\"select2\u002Fselection\u002Fbase\",[\"jquery\",\"..\u002Futils\",\"..\u002Fkeys\"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('\u003Cspan class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\">\u003C\u002Fspan>');return this._tabindex=0,null!=i.GetData(this.$element[0],\"old-tabindex\")?this._tabindex=i.GetData(this.$element[0],\"old-tabindex\"):null!=this.$element.attr(\"tabindex\")&&(this._tabindex=this.$element.attr(\"tabindex\")),e.attr(\"title\",this.$element.attr(\"title\")),e.attr(\"tabindex\",this._tabindex),e.attr(\"aria-disabled\",\"false\"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+\"-results\";this.container=e,this.$selection.on(\"focus\",function(e){n.trigger(\"focus\",e)}),this.$selection.on(\"blur\",function(e){n._handleBlur(e)}),this.$selection.on(\"keydown\",function(e){n.trigger(\"keypress\",e),e.which===r.SPACE&&e.preventDefault()}),e.on(\"results:focus\",function(e){n.$selection.attr(\"aria-activedescendant\",e.data._resultId)}),e.on(\"selection:update\",function(e){n.update(e.data)}),e.on(\"open\",function(){n.$selection.attr(\"aria-expanded\",\"true\"),n.$selection.attr(\"aria-owns\",i),n._attachCloseHandler(e)}),e.on(\"close\",function(){n.$selection.attr(\"aria-expanded\",\"false\"),n.$selection.removeAttr(\"aria-activedescendant\"),n.$selection.removeAttr(\"aria-owns\"),n.$selection.trigger(\"focus\"),n._detachCloseHandler(e)}),e.on(\"enable\",function(){n.$selection.attr(\"tabindex\",n._tabindex),n.$selection.attr(\"aria-disabled\",\"false\")}),e.on(\"disable\",function(){n.$selection.attr(\"tabindex\",\"-1\"),n.$selection.attr(\"aria-disabled\",\"true\")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger(\"blur\",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on(\"mousedown.select2.\"+e.id,function(e){var t=n(e.target).closest(\".select2\");n(\".select2.select2-container--open\").each(function(){this!=t[0]&&i.GetData(this,\"element\").select2(\"close\")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off(\"mousedown.select2.\"+e.id)},o.prototype.position=function(e,t){t.find(\".selection\").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error(\"The `update` method must be defined in child classes.\")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get(\"disabled\")},o}),e.define(\"select2\u002Fselection\u002Fsingle\",[\"jquery\",\".\u002Fbase\",\"..\u002Futils\",\"..\u002Fkeys\"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass(\"select2-selection--single\"),e.html('\u003Cspan class=\"select2-selection__rendered\">\u003C\u002Fspan>\u003Cspan class=\"select2-selection__arrow\" role=\"presentation\">\u003Cb role=\"presentation\">\u003C\u002Fb>\u003C\u002Fspan>'),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+\"-container\";this.$selection.find(\".select2-selection__rendered\").attr(\"id\",i).attr(\"role\",\"textbox\").attr(\"aria-readonly\",\"true\"),this.$selection.attr(\"aria-labelledby\",i),this.$selection.on(\"mousedown\",function(e){1===e.which&&n.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"focus\",function(e){}),this.$selection.on(\"blur\",function(e){}),t.on(\"focus\",function(e){t.isOpen()||n.$selection.trigger(\"focus\")})},r.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},r.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},r.prototype.selectionContainer=function(){return e(\"\u003Cspan>\u003C\u002Fspan>\")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(\".select2-selection__rendered\"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr(\"title\",r):n.removeAttr(\"title\")}else this.clear()},r}),e.define(\"select2\u002Fselection\u002Fmultiple\",[\"jquery\",\".\u002Fbase\",\"..\u002Futils\"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass(\"select2-selection--multiple\"),e.html('\u003Cul class=\"select2-selection__rendered\">\u003C\u002Ful>'),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on(\"click\",function(e){i.trigger(\"toggle\",{originalEvent:e})}),this.$selection.on(\"click\",\".select2-selection__choice__remove\",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],\"data\");i.trigger(\"unselect\",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(\".select2-selection__rendered\");e.empty(),e.removeAttr(\"title\")},n.prototype.display=function(e,t){var n=this.options.get(\"templateSelection\");return this.options.get(\"escapeMarkup\")(n(e,t))},n.prototype.selectionContainer=function(){return r('\u003Cli class=\"select2-selection__choice\">\u003Cspan class=\"select2-selection__choice__remove\" role=\"presentation\">&times;\u003C\u002Fspan>\u003C\u002Fli>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n],r=this.selectionContainer(),o=this.display(i,r);r.append(o);var s=i.title||i.text;s&&r.attr(\"title\",s),l.StoreData(r[0],\"data\",i),t.push(r)}var a=this.$selection.find(\".select2-selection__rendered\");l.appendMany(a,t)}},n}),e.define(\"select2\u002Fselection\u002Fplaceholder\",[\"..\u002Futils\"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1\u003Ct.length||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(\".select2-selection__rendered\").append(i)},t}),e.define(\"select2\u002Fselection\u002FallowClear\",[\"jquery\",\"..\u002Fkeys\",\"..\u002Futils\"],function(r,i,a){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get(\"debug\")&&window.console&&console.error&&console.error(\"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"),this.$selection.on(\"mousedown\",\".select2-selection__clear\",function(e){i._handleClear(e)}),t.on(\"keypress\",function(e){i._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(\".select2-selection__clear\");if(0!==n.length){t.stopPropagation();var i=a.GetData(n[0],\"data\"),r=this.$element.val();this.$element.val(this.placeholder.id);var o={data:i};if(this.trigger(\"clear\",o),o.prevented)this.$element.val(r);else{for(var s=0;s\u003Ci.length;s++)if(o={data:i[s]},this.trigger(\"unselect\",o),o.prevented)return void this.$element.val(r);this.$element.trigger(\"input\").trigger(\"change\"),this.trigger(\"toggle\",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=i.DELETE&&t.which!=i.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0\u003Cthis.$selection.find(\".select2-selection__placeholder\").length||0===t.length)){var n=this.options.get(\"translations\").get(\"removeAllItems\"),i=r('\u003Cspan class=\"select2-selection__clear\" title=\"'+n()+'\">&times;\u003C\u002Fspan>');a.StoreData(i[0],\"data\",t),this.$selection.find(\".select2-selection__rendered\").prepend(i)}},e}),e.define(\"select2\u002Fselection\u002Fsearch\",[\"jquery\",\"..\u002Futils\",\"..\u002Fkeys\"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('\u003Cli class=\"select2-search select2-search--inline\">\u003Cinput class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" \u002F>\u003C\u002Fli>');this.$searchContainer=t,this.$search=t.find(\"input\");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),t.on(\"open\",function(){i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\")}),t.on(\"close\",function(){i.$search.val(\"\"),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.trigger(\"focus\")}),t.on(\"enable\",function(){i.$search.prop(\"disabled\",!1),i._transferTabIndex()}),t.on(\"disable\",function(){i.$search.prop(\"disabled\",!0)}),t.on(\"focus\",function(e){i.$search.trigger(\"focus\")}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")}),this.$selection.on(\"focusin\",\".select2-search--inline\",function(e){i.trigger(\"focus\",e)}),this.$selection.on(\"focusout\",\".select2-search--inline\",function(e){i._handleBlur(e)}),this.$selection.on(\"keydown\",\".select2-search--inline\",function(e){if(e.stopPropagation(),i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&\"\"===i.$search.val()){var t=i.$searchContainer.prev(\".select2-selection__choice\");if(0\u003Ct.length){var n=a.GetData(t[0],\"data\");i.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on(\"click\",\".select2-search--inline\",function(e){i.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o\u003C=11;this.$selection.on(\"input.searchcheck\",\".select2-search--inline\",function(e){s?i.$selection.off(\"input.search input.searchcheck\"):i.$selection.off(\"keyup.search\")}),this.$selection.on(\"keyup.search input.search\",\".select2-search--inline\",function(e){if(s&&\"input\"===e.type)i.$selection.off(\"input.search input.searchcheck\");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&i.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr(\"tabindex\",this.$selection.attr(\"tabindex\")),this.$selection.attr(\"tabindex\",\"-1\")},e.prototype.createPlaceholder=function(e,t){this.$search.attr(\"placeholder\",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr(\"placeholder\",\"\"),e.call(this,t),this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger(\"focus\")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger(\"query\",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger(\"unselect\",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css(\"width\",\"25px\");var e=\"\";\"\"!==this.$search.attr(\"placeholder\")?e=this.$selection.find(\".select2-selection__rendered\").width():e=.75*(this.$search.val().length+1)+\"em\";this.$search.css(\"width\",e)},e}),e.define(\"select2\u002Fselection\u002FeventRelay\",[\"jquery\"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var i=this,r=[\"open\",\"opening\",\"close\",\"closing\",\"select\",\"selecting\",\"unselect\",\"unselecting\",\"clear\",\"clearing\"],o=[\"opening\",\"closing\",\"selecting\",\"unselecting\",\"clearing\"];e.call(this,t,n),t.on(\"*\",function(e,t){if(-1!==s.inArray(e,r)){t=t||{};var n=s.Event(\"select2:\"+e,{params:t});i.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define(\"select2\u002Ftranslation\",[\"jquery\",\"require\"],function(t,n){function i(e){this.dict=e||{}}return i.prototype.all=function(){return this.dict},i.prototype.get=function(e){return this.dict[e]},i.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},i._cache={},i.loadPath=function(e){if(!(e in i._cache)){var t=n(e);i._cache[e]=t}return new i(i._cache[e])},i}),e.define(\"select2\u002Fdiacritics\",[],function(){return{\"Ⓐ\":\"A\",\"Ａ\":\"A\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ầ\":\"A\",\"Ấ\":\"A\",\"Ẫ\":\"A\",\"Ẩ\":\"A\",\"Ã\":\"A\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ằ\":\"A\",\"Ắ\":\"A\",\"Ẵ\":\"A\",\"Ẳ\":\"A\",\"Ȧ\":\"A\",\"Ǡ\":\"A\",\"Ä\":\"A\",\"Ǟ\":\"A\",\"Ả\":\"A\",\"Å\":\"A\",\"Ǻ\":\"A\",\"Ǎ\":\"A\",\"Ȁ\":\"A\",\"Ȃ\":\"A\",\"Ạ\":\"A\",\"Ậ\":\"A\",\"Ặ\":\"A\",\"Ḁ\":\"A\",\"Ą\":\"A\",\"Ⱥ\":\"A\",\"Ɐ\":\"A\",\"Ꜳ\":\"AA\",\"Æ\":\"AE\",\"Ǽ\":\"AE\",\"Ǣ\":\"AE\",\"Ꜵ\":\"AO\",\"Ꜷ\":\"AU\",\"Ꜹ\":\"AV\",\"Ꜻ\":\"AV\",\"Ꜽ\":\"AY\",\"Ⓑ\":\"B\",\"Ｂ\":\"B\",\"Ḃ\":\"B\",\"Ḅ\":\"B\",\"Ḇ\":\"B\",\"Ƀ\":\"B\",\"Ƃ\":\"B\",\"Ɓ\":\"B\",\"Ⓒ\":\"C\",\"Ｃ\":\"C\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"Ç\":\"C\",\"Ḉ\":\"C\",\"Ƈ\":\"C\",\"Ȼ\":\"C\",\"Ꜿ\":\"C\",\"Ⓓ\":\"D\",\"Ｄ\":\"D\",\"Ḋ\":\"D\",\"Ď\":\"D\",\"Ḍ\":\"D\",\"Ḑ\":\"D\",\"Ḓ\":\"D\",\"Ḏ\":\"D\",\"Đ\":\"D\",\"Ƌ\":\"D\",\"Ɗ\":\"D\",\"Ɖ\":\"D\",\"Ꝺ\":\"D\",\"Ǳ\":\"DZ\",\"Ǆ\":\"DZ\",\"ǲ\":\"Dz\",\"ǅ\":\"Dz\",\"Ⓔ\":\"E\",\"Ｅ\":\"E\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ề\":\"E\",\"Ế\":\"E\",\"Ễ\":\"E\",\"Ể\":\"E\",\"Ẽ\":\"E\",\"Ē\":\"E\",\"Ḕ\":\"E\",\"Ḗ\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ë\":\"E\",\"Ẻ\":\"E\",\"Ě\":\"E\",\"Ȅ\":\"E\",\"Ȇ\":\"E\",\"Ẹ\":\"E\",\"Ệ\":\"E\",\"Ȩ\":\"E\",\"Ḝ\":\"E\",\"Ę\":\"E\",\"Ḙ\":\"E\",\"Ḛ\":\"E\",\"Ɛ\":\"E\",\"Ǝ\":\"E\",\"Ⓕ\":\"F\",\"Ｆ\":\"F\",\"Ḟ\":\"F\",\"Ƒ\":\"F\",\"Ꝼ\":\"F\",\"Ⓖ\":\"G\",\"Ｇ\":\"G\",\"Ǵ\":\"G\",\"Ĝ\":\"G\",\"Ḡ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ǧ\":\"G\",\"Ģ\":\"G\",\"Ǥ\":\"G\",\"Ɠ\":\"G\",\"Ꞡ\":\"G\",\"Ᵹ\":\"G\",\"Ꝿ\":\"G\",\"Ⓗ\":\"H\",\"Ｈ\":\"H\",\"Ĥ\":\"H\",\"Ḣ\":\"H\",\"Ḧ\":\"H\",\"Ȟ\":\"H\",\"Ḥ\":\"H\",\"Ḩ\":\"H\",\"Ḫ\":\"H\",\"Ħ\":\"H\",\"Ⱨ\":\"H\",\"Ⱶ\":\"H\",\"Ɥ\":\"H\",\"Ⓘ\":\"I\",\"Ｉ\":\"I\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"İ\":\"I\",\"Ï\":\"I\",\"Ḯ\":\"I\",\"Ỉ\":\"I\",\"Ǐ\":\"I\",\"Ȉ\":\"I\",\"Ȋ\":\"I\",\"Ị\":\"I\",\"Į\":\"I\",\"Ḭ\":\"I\",\"Ɨ\":\"I\",\"Ⓙ\":\"J\",\"Ｊ\":\"J\",\"Ĵ\":\"J\",\"Ɉ\":\"J\",\"Ⓚ\":\"K\",\"Ｋ\":\"K\",\"Ḱ\":\"K\",\"Ǩ\":\"K\",\"Ḳ\":\"K\",\"Ķ\":\"K\",\"Ḵ\":\"K\",\"Ƙ\":\"K\",\"Ⱪ\":\"K\",\"Ꝁ\":\"K\",\"Ꝃ\":\"K\",\"Ꝅ\":\"K\",\"Ꞣ\":\"K\",\"Ⓛ\":\"L\",\"Ｌ\":\"L\",\"Ŀ\":\"L\",\"Ĺ\":\"L\",\"Ľ\":\"L\",\"Ḷ\":\"L\",\"Ḹ\":\"L\",\"Ļ\":\"L\",\"Ḽ\":\"L\",\"Ḻ\":\"L\",\"Ł\":\"L\",\"Ƚ\":\"L\",\"Ɫ\":\"L\",\"Ⱡ\":\"L\",\"Ꝉ\":\"L\",\"Ꝇ\":\"L\",\"Ꞁ\":\"L\",\"Ǉ\":\"LJ\",\"ǈ\":\"Lj\",\"Ⓜ\":\"M\",\"Ｍ\":\"M\",\"Ḿ\":\"M\",\"Ṁ\":\"M\",\"Ṃ\":\"M\",\"Ɱ\":\"M\",\"Ɯ\":\"M\",\"Ⓝ\":\"N\",\"Ｎ\":\"N\",\"Ǹ\":\"N\",\"Ń\":\"N\",\"Ñ\":\"N\",\"Ṅ\":\"N\",\"Ň\":\"N\",\"Ṇ\":\"N\",\"Ņ\":\"N\",\"Ṋ\":\"N\",\"Ṉ\":\"N\",\"Ƞ\":\"N\",\"Ɲ\":\"N\",\"Ꞑ\":\"N\",\"Ꞥ\":\"N\",\"Ǌ\":\"NJ\",\"ǋ\":\"Nj\",\"Ⓞ\":\"O\",\"Ｏ\":\"O\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Ồ\":\"O\",\"Ố\":\"O\",\"Ỗ\":\"O\",\"Ổ\":\"O\",\"Õ\":\"O\",\"Ṍ\":\"O\",\"Ȭ\":\"O\",\"Ṏ\":\"O\",\"Ō\":\"O\",\"Ṑ\":\"O\",\"Ṓ\":\"O\",\"Ŏ\":\"O\",\"Ȯ\":\"O\",\"Ȱ\":\"O\",\"Ö\":\"O\",\"Ȫ\":\"O\",\"Ỏ\":\"O\",\"Ő\":\"O\",\"Ǒ\":\"O\",\"Ȍ\":\"O\",\"Ȏ\":\"O\",\"Ơ\":\"O\",\"Ờ\":\"O\",\"Ớ\":\"O\",\"Ỡ\":\"O\",\"Ở\":\"O\",\"Ợ\":\"O\",\"Ọ\":\"O\",\"Ộ\":\"O\",\"Ǫ\":\"O\",\"Ǭ\":\"O\",\"Ø\":\"O\",\"Ǿ\":\"O\",\"Ɔ\":\"O\",\"Ɵ\":\"O\",\"Ꝋ\":\"O\",\"Ꝍ\":\"O\",\"Œ\":\"OE\",\"Ƣ\":\"OI\",\"Ꝏ\":\"OO\",\"Ȣ\":\"OU\",\"Ⓟ\":\"P\",\"Ｐ\":\"P\",\"Ṕ\":\"P\",\"Ṗ\":\"P\",\"Ƥ\":\"P\",\"Ᵽ\":\"P\",\"Ꝑ\":\"P\",\"Ꝓ\":\"P\",\"Ꝕ\":\"P\",\"Ⓠ\":\"Q\",\"Ｑ\":\"Q\",\"Ꝗ\":\"Q\",\"Ꝙ\":\"Q\",\"Ɋ\":\"Q\",\"Ⓡ\":\"R\",\"Ｒ\":\"R\",\"Ŕ\":\"R\",\"Ṙ\":\"R\",\"Ř\":\"R\",\"Ȑ\":\"R\",\"Ȓ\":\"R\",\"Ṛ\":\"R\",\"Ṝ\":\"R\",\"Ŗ\":\"R\",\"Ṟ\":\"R\",\"Ɍ\":\"R\",\"Ɽ\":\"R\",\"Ꝛ\":\"R\",\"Ꞧ\":\"R\",\"Ꞃ\":\"R\",\"Ⓢ\":\"S\",\"Ｓ\":\"S\",\"ẞ\":\"S\",\"Ś\":\"S\",\"Ṥ\":\"S\",\"Ŝ\":\"S\",\"Ṡ\":\"S\",\"Š\":\"S\",\"Ṧ\":\"S\",\"Ṣ\":\"S\",\"Ṩ\":\"S\",\"Ș\":\"S\",\"Ş\":\"S\",\"Ȿ\":\"S\",\"Ꞩ\":\"S\",\"Ꞅ\":\"S\",\"Ⓣ\":\"T\",\"Ｔ\":\"T\",\"Ṫ\":\"T\",\"Ť\":\"T\",\"Ṭ\":\"T\",\"Ț\":\"T\",\"Ţ\":\"T\",\"Ṱ\":\"T\",\"Ṯ\":\"T\",\"Ŧ\":\"T\",\"Ƭ\":\"T\",\"Ʈ\":\"T\",\"Ⱦ\":\"T\",\"Ꞇ\":\"T\",\"Ꜩ\":\"TZ\",\"Ⓤ\":\"U\",\"Ｕ\":\"U\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ũ\":\"U\",\"Ṹ\":\"U\",\"Ū\":\"U\",\"Ṻ\":\"U\",\"Ŭ\":\"U\",\"Ü\":\"U\",\"Ǜ\":\"U\",\"Ǘ\":\"U\",\"Ǖ\":\"U\",\"Ǚ\":\"U\",\"Ủ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ǔ\":\"U\",\"Ȕ\":\"U\",\"Ȗ\":\"U\",\"Ư\":\"U\",\"Ừ\":\"U\",\"Ứ\":\"U\",\"Ữ\":\"U\",\"Ử\":\"U\",\"Ự\":\"U\",\"Ụ\":\"U\",\"Ṳ\":\"U\",\"Ų\":\"U\",\"Ṷ\":\"U\",\"Ṵ\":\"U\",\"Ʉ\":\"U\",\"Ⓥ\":\"V\",\"Ｖ\":\"V\",\"Ṽ\":\"V\",\"Ṿ\":\"V\",\"Ʋ\":\"V\",\"Ꝟ\":\"V\",\"Ʌ\":\"V\",\"Ꝡ\":\"VY\",\"Ⓦ\":\"W\",\"Ｗ\":\"W\",\"Ẁ\":\"W\",\"Ẃ\":\"W\",\"Ŵ\":\"W\",\"Ẇ\":\"W\",\"Ẅ\":\"W\",\"Ẉ\":\"W\",\"Ⱳ\":\"W\",\"Ⓧ\":\"X\",\"Ｘ\":\"X\",\"Ẋ\":\"X\",\"Ẍ\":\"X\",\"Ⓨ\":\"Y\",\"Ｙ\":\"Y\",\"Ỳ\":\"Y\",\"Ý\":\"Y\",\"Ŷ\":\"Y\",\"Ỹ\":\"Y\",\"Ȳ\":\"Y\",\"Ẏ\":\"Y\",\"Ÿ\":\"Y\",\"Ỷ\":\"Y\",\"Ỵ\":\"Y\",\"Ƴ\":\"Y\",\"Ɏ\":\"Y\",\"Ỿ\":\"Y\",\"Ⓩ\":\"Z\",\"Ｚ\":\"Z\",\"Ź\":\"Z\",\"Ẑ\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"Ẓ\":\"Z\",\"Ẕ\":\"Z\",\"Ƶ\":\"Z\",\"Ȥ\":\"Z\",\"Ɀ\":\"Z\",\"Ⱬ\":\"Z\",\"Ꝣ\":\"Z\",\"ⓐ\":\"a\",\"ａ\":\"a\",\"ẚ\":\"a\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ầ\":\"a\",\"ấ\":\"a\",\"ẫ\":\"a\",\"ẩ\":\"a\",\"ã\":\"a\",\"ā\":\"a\",\"ă\":\"a\",\"ằ\":\"a\",\"ắ\":\"a\",\"ẵ\":\"a\",\"ẳ\":\"a\",\"ȧ\":\"a\",\"ǡ\":\"a\",\"ä\":\"a\",\"ǟ\":\"a\",\"ả\":\"a\",\"å\":\"a\",\"ǻ\":\"a\",\"ǎ\":\"a\",\"ȁ\":\"a\",\"ȃ\":\"a\",\"ạ\":\"a\",\"ậ\":\"a\",\"ặ\":\"a\",\"ḁ\":\"a\",\"ą\":\"a\",\"ⱥ\":\"a\",\"ɐ\":\"a\",\"ꜳ\":\"aa\",\"æ\":\"ae\",\"ǽ\":\"ae\",\"ǣ\":\"ae\",\"ꜵ\":\"ao\",\"ꜷ\":\"au\",\"ꜹ\":\"av\",\"ꜻ\":\"av\",\"ꜽ\":\"ay\",\"ⓑ\":\"b\",\"ｂ\":\"b\",\"ḃ\":\"b\",\"ḅ\":\"b\",\"ḇ\":\"b\",\"ƀ\":\"b\",\"ƃ\":\"b\",\"ɓ\":\"b\",\"ⓒ\":\"c\",\"ｃ\":\"c\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"ç\":\"c\",\"ḉ\":\"c\",\"ƈ\":\"c\",\"ȼ\":\"c\",\"ꜿ\":\"c\",\"ↄ\":\"c\",\"ⓓ\":\"d\",\"ｄ\":\"d\",\"ḋ\":\"d\",\"ď\":\"d\",\"ḍ\":\"d\",\"ḑ\":\"d\",\"ḓ\":\"d\",\"ḏ\":\"d\",\"đ\":\"d\",\"ƌ\":\"d\",\"ɖ\":\"d\",\"ɗ\":\"d\",\"ꝺ\":\"d\",\"ǳ\":\"dz\",\"ǆ\":\"dz\",\"ⓔ\":\"e\",\"ｅ\":\"e\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ề\":\"e\",\"ế\":\"e\",\"ễ\":\"e\",\"ể\":\"e\",\"ẽ\":\"e\",\"ē\":\"e\",\"ḕ\":\"e\",\"ḗ\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ë\":\"e\",\"ẻ\":\"e\",\"ě\":\"e\",\"ȅ\":\"e\",\"ȇ\":\"e\",\"ẹ\":\"e\",\"ệ\":\"e\",\"ȩ\":\"e\",\"ḝ\":\"e\",\"ę\":\"e\",\"ḙ\":\"e\",\"ḛ\":\"e\",\"ɇ\":\"e\",\"ɛ\":\"e\",\"ǝ\":\"e\",\"ⓕ\":\"f\",\"ｆ\":\"f\",\"ḟ\":\"f\",\"ƒ\":\"f\",\"ꝼ\":\"f\",\"ⓖ\":\"g\",\"ｇ\":\"g\",\"ǵ\":\"g\",\"ĝ\":\"g\",\"ḡ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ǧ\":\"g\",\"ģ\":\"g\",\"ǥ\":\"g\",\"ɠ\":\"g\",\"ꞡ\":\"g\",\"ᵹ\":\"g\",\"ꝿ\":\"g\",\"ⓗ\":\"h\",\"ｈ\":\"h\",\"ĥ\":\"h\",\"ḣ\":\"h\",\"ḧ\":\"h\",\"ȟ\":\"h\",\"ḥ\":\"h\",\"ḩ\":\"h\",\"ḫ\":\"h\",\"ẖ\":\"h\",\"ħ\":\"h\",\"ⱨ\":\"h\",\"ⱶ\":\"h\",\"ɥ\":\"h\",\"ƕ\":\"hv\",\"ⓘ\":\"i\",\"ｉ\":\"i\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"ï\":\"i\",\"ḯ\":\"i\",\"ỉ\":\"i\",\"ǐ\":\"i\",\"ȉ\":\"i\",\"ȋ\":\"i\",\"ị\":\"i\",\"į\":\"i\",\"ḭ\":\"i\",\"ɨ\":\"i\",\"ı\":\"i\",\"ⓙ\":\"j\",\"ｊ\":\"j\",\"ĵ\":\"j\",\"ǰ\":\"j\",\"ɉ\":\"j\",\"ⓚ\":\"k\",\"ｋ\":\"k\",\"ḱ\":\"k\",\"ǩ\":\"k\",\"ḳ\":\"k\",\"ķ\":\"k\",\"ḵ\":\"k\",\"ƙ\":\"k\",\"ⱪ\":\"k\",\"ꝁ\":\"k\",\"ꝃ\":\"k\",\"ꝅ\":\"k\",\"ꞣ\":\"k\",\"ⓛ\":\"l\",\"ｌ\":\"l\",\"ŀ\":\"l\",\"ĺ\":\"l\",\"ľ\":\"l\",\"ḷ\":\"l\",\"ḹ\":\"l\",\"ļ\":\"l\",\"ḽ\":\"l\",\"ḻ\":\"l\",\"ſ\":\"l\",\"ł\":\"l\",\"ƚ\":\"l\",\"ɫ\":\"l\",\"ⱡ\":\"l\",\"ꝉ\":\"l\",\"ꞁ\":\"l\",\"ꝇ\":\"l\",\"ǉ\":\"lj\",\"ⓜ\":\"m\",\"ｍ\":\"m\",\"ḿ\":\"m\",\"ṁ\":\"m\",\"ṃ\":\"m\",\"ɱ\":\"m\",\"ɯ\":\"m\",\"ⓝ\":\"n\",\"ｎ\":\"n\",\"ǹ\":\"n\",\"ń\":\"n\",\"ñ\":\"n\",\"ṅ\":\"n\",\"ň\":\"n\",\"ṇ\":\"n\",\"ņ\":\"n\",\"ṋ\":\"n\",\"ṉ\":\"n\",\"ƞ\":\"n\",\"ɲ\":\"n\",\"ŉ\":\"n\",\"ꞑ\":\"n\",\"ꞥ\":\"n\",\"ǌ\":\"nj\",\"ⓞ\":\"o\",\"ｏ\":\"o\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"ồ\":\"o\",\"ố\":\"o\",\"ỗ\":\"o\",\"ổ\":\"o\",\"õ\":\"o\",\"ṍ\":\"o\",\"ȭ\":\"o\",\"ṏ\":\"o\",\"ō\":\"o\",\"ṑ\":\"o\",\"ṓ\":\"o\",\"ŏ\":\"o\",\"ȯ\":\"o\",\"ȱ\":\"o\",\"ö\":\"o\",\"ȫ\":\"o\",\"ỏ\":\"o\",\"ő\":\"o\",\"ǒ\":\"o\",\"ȍ\":\"o\",\"ȏ\":\"o\",\"ơ\":\"o\",\"ờ\":\"o\",\"ớ\":\"o\",\"ỡ\":\"o\",\"ở\":\"o\",\"ợ\":\"o\",\"ọ\":\"o\",\"ộ\":\"o\",\"ǫ\":\"o\",\"ǭ\":\"o\",\"ø\":\"o\",\"ǿ\":\"o\",\"ɔ\":\"o\",\"ꝋ\":\"o\",\"ꝍ\":\"o\",\"ɵ\":\"o\",\"œ\":\"oe\",\"ƣ\":\"oi\",\"ȣ\":\"ou\",\"ꝏ\":\"oo\",\"ⓟ\":\"p\",\"ｐ\":\"p\",\"ṕ\":\"p\",\"ṗ\":\"p\",\"ƥ\":\"p\",\"ᵽ\":\"p\",\"ꝑ\":\"p\",\"ꝓ\":\"p\",\"ꝕ\":\"p\",\"ⓠ\":\"q\",\"ｑ\":\"q\",\"ɋ\":\"q\",\"ꝗ\":\"q\",\"ꝙ\":\"q\",\"ⓡ\":\"r\",\"ｒ\":\"r\",\"ŕ\":\"r\",\"ṙ\":\"r\",\"ř\":\"r\",\"ȑ\":\"r\",\"ȓ\":\"r\",\"ṛ\":\"r\",\"ṝ\":\"r\",\"ŗ\":\"r\",\"ṟ\":\"r\",\"ɍ\":\"r\",\"ɽ\":\"r\",\"ꝛ\":\"r\",\"ꞧ\":\"r\",\"ꞃ\":\"r\",\"ⓢ\":\"s\",\"ｓ\":\"s\",\"ß\":\"s\",\"ś\":\"s\",\"ṥ\":\"s\",\"ŝ\":\"s\",\"ṡ\":\"s\",\"š\":\"s\",\"ṧ\":\"s\",\"ṣ\":\"s\",\"ṩ\":\"s\",\"ș\":\"s\",\"ş\":\"s\",\"ȿ\":\"s\",\"ꞩ\":\"s\",\"ꞅ\":\"s\",\"ẛ\":\"s\",\"ⓣ\":\"t\",\"ｔ\":\"t\",\"ṫ\":\"t\",\"ẗ\":\"t\",\"ť\":\"t\",\"ṭ\":\"t\",\"ț\":\"t\",\"ţ\":\"t\",\"ṱ\":\"t\",\"ṯ\":\"t\",\"ŧ\":\"t\",\"ƭ\":\"t\",\"ʈ\":\"t\",\"ⱦ\":\"t\",\"ꞇ\":\"t\",\"ꜩ\":\"tz\",\"ⓤ\":\"u\",\"ｕ\":\"u\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ũ\":\"u\",\"ṹ\":\"u\",\"ū\":\"u\",\"ṻ\":\"u\",\"ŭ\":\"u\",\"ü\":\"u\",\"ǜ\":\"u\",\"ǘ\":\"u\",\"ǖ\":\"u\",\"ǚ\":\"u\",\"ủ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ǔ\":\"u\",\"ȕ\":\"u\",\"ȗ\":\"u\",\"ư\":\"u\",\"ừ\":\"u\",\"ứ\":\"u\",\"ữ\":\"u\",\"ử\":\"u\",\"ự\":\"u\",\"ụ\":\"u\",\"ṳ\":\"u\",\"ų\":\"u\",\"ṷ\":\"u\",\"ṵ\":\"u\",\"ʉ\":\"u\",\"ⓥ\":\"v\",\"ｖ\":\"v\",\"ṽ\":\"v\",\"ṿ\":\"v\",\"ʋ\":\"v\",\"ꝟ\":\"v\",\"ʌ\":\"v\",\"ꝡ\":\"vy\",\"ⓦ\":\"w\",\"ｗ\":\"w\",\"ẁ\":\"w\",\"ẃ\":\"w\",\"ŵ\":\"w\",\"ẇ\":\"w\",\"ẅ\":\"w\",\"ẘ\":\"w\",\"ẉ\":\"w\",\"ⱳ\":\"w\",\"ⓧ\":\"x\",\"ｘ\":\"x\",\"ẋ\":\"x\",\"ẍ\":\"x\",\"ⓨ\":\"y\",\"ｙ\":\"y\",\"ỳ\":\"y\",\"ý\":\"y\",\"ŷ\":\"y\",\"ỹ\":\"y\",\"ȳ\":\"y\",\"ẏ\":\"y\",\"ÿ\":\"y\",\"ỷ\":\"y\",\"ẙ\":\"y\",\"ỵ\":\"y\",\"ƴ\":\"y\",\"ɏ\":\"y\",\"ỿ\":\"y\",\"ⓩ\":\"z\",\"ｚ\":\"z\",\"ź\":\"z\",\"ẑ\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"ẓ\":\"z\",\"ẕ\":\"z\",\"ƶ\":\"z\",\"ȥ\":\"z\",\"ɀ\":\"z\",\"ⱬ\":\"z\",\"ꝣ\":\"z\",\"Ά\":\"Α\",\"Έ\":\"Ε\",\"Ή\":\"Η\",\"Ί\":\"Ι\",\"Ϊ\":\"Ι\",\"Ό\":\"Ο\",\"Ύ\":\"Υ\",\"Ϋ\":\"Υ\",\"Ώ\":\"Ω\",\"ά\":\"α\",\"έ\":\"ε\",\"ή\":\"η\",\"ί\":\"ι\",\"ϊ\":\"ι\",\"ΐ\":\"ι\",\"ό\":\"ο\",\"ύ\":\"υ\",\"ϋ\":\"υ\",\"ΰ\":\"υ\",\"ώ\":\"ω\",\"ς\":\"σ\",\"’\":\"'\"}}),e.define(\"select2\u002Fdata\u002Fbase\",[\"..\u002Futils\"],function(i){function n(e,t){n.__super__.constructor.call(this)}return i.Extend(n,i.Observable),n.prototype.current=function(e){throw new Error(\"The `current` method must be defined in child classes.\")},n.prototype.query=function(e,t){throw new Error(\"The `query` method must be defined in child classes.\")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+\"-result-\";return n+=i.generateChars(4),null!=t.id?n+=\"-\"+t.id.toString():n+=\"-\"+i.generateChars(4),n},n}),e.define(\"select2\u002Fdata\u002Fselect\",[\".\u002Fbase\",\"..\u002Futils\",\"jquery\"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],i=this;this.$element.find(\":selected\").each(function(){var e=l(this),t=i.item(e);n.push(t)}),e(n)},n.prototype.select=function(r){var o=this;if(r.selected=!0,l(r.element).is(\"option\"))return r.element.selected=!0,void this.$element.trigger(\"input\").trigger(\"change\");if(this.$element.prop(\"multiple\"))this.current(function(e){var t=[];(r=[r]).push.apply(r,e);for(var n=0;n\u003Cr.length;n++){var i=r[n].id;-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")});else{var e=r.id;this.$element.val(e),this.$element.trigger(\"input\").trigger(\"change\")}},n.prototype.unselect=function(r){var o=this;if(this.$element.prop(\"multiple\")){if(r.selected=!1,l(r.element).is(\"option\"))return r.element.selected=!1,void this.$element.trigger(\"input\").trigger(\"change\");this.current(function(e){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n].id;i!==r.id&&-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger(\"input\").trigger(\"change\")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on(\"select\",function(e){n.select(e.data)}),e.on(\"unselect\",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find(\"*\").each(function(){a.RemoveData(this)})},n.prototype.query=function(i,e){var r=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is(\"option\")||e.is(\"optgroup\")){var t=o.item(e),n=o.matches(i,t);null!==n&&r.push(n)}}),e({results:r})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement(\"optgroup\")).label=e.text:void 0!==(t=document.createElement(\"option\")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),i=this._normalizeItem(e);return i.element=t,a.StoreData(t,\"data\",i),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],\"data\")))return t;if(e.is(\"option\"))t={id:e.val(),text:e.text(),disabled:e.prop(\"disabled\"),selected:e.prop(\"selected\"),title:e.prop(\"title\")};else if(e.is(\"optgroup\")){t={text:e.prop(\"label\"),children:[],title:e.prop(\"title\")};for(var n=e.children(\"option\"),i=[],r=0;r\u003Cn.length;r++){var o=l(n[r]),s=this.item(o);i.push(s)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],\"data\",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:\"\"},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get(\"matcher\")(e,t)},n}),e.define(\"select2\u002Fdata\u002Farray\",[\".\u002Fselect\",\"..\u002Futils\",\"jquery\"],function(e,f,g){function i(e,t){this._dataToConvert=t.get(\"data\")||[],i.__super__.constructor.call(this,e,t)}return f.Extend(i,e),i.prototype.bind=function(e,t){i.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},i.prototype.select=function(n){var e=this.$element.find(\"option\").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),i.__super__.select.call(this,n)},i.prototype.convertToOptions=function(e){var t=this,n=this.$element.find(\"option\"),i=n.map(function(){return t.item(g(this)).id}).get(),r=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s\u003Ce.length;s++){var a=this._normalizeItem(e[s]);if(0\u003C=g.inArray(a.id,i)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}r.push(p)}}return r},i}),e.define(\"select2\u002Fdata\u002Fajax\",[\".\u002Farray\",\"..\u002Futils\",\"jquery\"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get(\"ajax\")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var i=o.ajax(e);return i.then(t),i.fail(n),i}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,i){var r=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:\"GET\"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n);r.options.get(\"debug\")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error(\"Select2: The AJAX results did not return an array in the `results` key of the response.\")),i(t)},function(){\"status\"in e&&(0===e.status||\"0\"===e.status)||r.trigger(\"results:message\",{message:\"errorLoading\"})});r._request=e}\"function\"==typeof t.url&&(t.url=t.url.call(this.$element,n)),\"function\"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define(\"select2\u002Fdata\u002Ftags\",[\"jquery\"],function(u){function e(e,t,n){var i=n.get(\"tags\"),r=n.get(\"createTag\");void 0!==r&&(this.createTag=r);var o=n.get(\"insertTag\");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(i))for(var s=0;s\u003Ci.length;s++){var a=i[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var i=t.results,r=0;r\u003Ci.length;r++){var o=i[r],s=null!=o.children&&!e({results:o.children},!0);if((o.text||\"\").toUpperCase()===(c.term||\"\").toUpperCase()||s)return!n&&(t.data=i,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr(\"data-select2-tag\",!0),d.addOptions([l]),d.insertTag(i,a)}t.results=i,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return\"\"===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find(\"option[data-select2-tag]\").each(function(){this.selected||u(this).remove()})},e}),e.define(\"select2\u002Fdata\u002Ftokenizer\",[\"jquery\"],function(d){function e(e,t,n){var i=n.get(\"tokenizer\");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(\".select2-search__field\")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||\"\";var r=this.tokenizer(t,this.options,function(e){var t=i._normalizeItem(e);if(!i.$element.find(\"option\").filter(function(){return d(this).val()===t.id}).length){var n=i.option(t);n.attr(\"data-select2-tag\",!0),i._removeOldTags(),i.addOptions([n])}!function(e){i.trigger(\"select\",{data:e})}(t)});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger(\"focus\")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,i){for(var r=n.get(\"tokenSeparators\")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s\u003Co.length;){var l=o[s];if(-1!==d.inArray(l,r)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(i(u),o=o.substr(s+1)||\"\",s=0):s++}else s++}return{term:o}},e}),e.define(\"select2\u002Fdata\u002FminimumInputLength\",[],function(){function e(e,t,n){this.minimumInputLength=n.get(\"minimumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",t.term.length\u003Cthis.minimumInputLength?this.trigger(\"results:message\",{message:\"inputTooShort\",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2\u002Fdata\u002FmaximumInputLength\",[],function(){function e(e,t,n){this.maximumInputLength=n.get(\"maximumInputLength\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||\"\",0\u003Cthis.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger(\"results:message\",{message:\"inputTooLong\",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define(\"select2\u002Fdata\u002FmaximumSelectionLength\",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get(\"maximumSelectionLength\"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0\u003Ci.maximumSelectionLength&&t>=i.maximumSelectionLength?i.trigger(\"results:message\",{message:\"maximumSelected\",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define(\"select2\u002Fdropdown\",[\"jquery\",\".\u002Futils\"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('\u003Cspan class=\"select2-dropdown\">\u003Cspan class=\"select2-results\">\u003C\u002Fspan>\u003C\u002Fspan>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define(\"select2\u002Fdropdown\u002Fsearch\",[\"jquery\",\"..\u002Futils\"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('\u003Cspan class=\"select2-search select2-search--dropdown\">\u003Cinput class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" \u002F>\u003C\u002Fspan>');return this.$searchContainer=n,this.$search=n.find(\"input\"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+\"-results\";e.call(this,t,n),this.$search.on(\"keydown\",function(e){i.trigger(\"keypress\",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on(\"input\",function(e){o(this).off(\"keyup\")}),this.$search.on(\"keyup input\",function(e){i.handleSearch(e)}),t.on(\"open\",function(){i.$search.attr(\"tabindex\",0),i.$search.attr(\"aria-controls\",r),i.$search.trigger(\"focus\"),window.setTimeout(function(){i.$search.trigger(\"focus\")},0)}),t.on(\"close\",function(){i.$search.attr(\"tabindex\",-1),i.$search.removeAttr(\"aria-controls\"),i.$search.removeAttr(\"aria-activedescendant\"),i.$search.val(\"\"),i.$search.trigger(\"blur\")}),t.on(\"focus\",function(){t.isOpen()||i.$search.trigger(\"focus\")}),t.on(\"results:all\",function(e){null!=e.query.term&&\"\"!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass(\"select2-search--hide\"):i.$searchContainer.addClass(\"select2-search--hide\"))}),t.on(\"results:focus\",function(e){e.data._resultId?i.$search.attr(\"aria-activedescendant\",e.data._resultId):i.$search.removeAttr(\"aria-activedescendant\")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger(\"query\",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define(\"select2\u002Fdropdown\u002FhidePlaceholder\",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get(\"placeholder\")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return\"string\"==typeof t&&(t={id:\"\",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0\u003C=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define(\"select2\u002Fdropdown\u002FinfiniteScroll\",[\"jquery\"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"query\",function(e){i.lastParams=e,i.loading=!0}),t.on(\"query:append\",function(e){i.lastParams=e,i.loading=!0}),this.$results.on(\"scroll\",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)\u003C=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger(\"query:append\",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('\u003Cli class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\">\u003C\u002Fli>'),t=this.options.get(\"translations\").get(\"loadingMore\");return e.html(t(this.lastParams)),e},e}),e.define(\"select2\u002Fdropdown\u002FattachBody\",[\"jquery\",\"..\u002Futils\"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get(\"dropdownParent\")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"open\",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on(\"close\",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on(\"mousedown\",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr(\"class\",n.attr(\"class\")),t.removeClass(\"select2\"),t.addClass(\"select2-container--open\"),t.css({position:\"absolute\",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(\"\u003Cspan>\u003C\u002Fspan>\"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on(\"results:all\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:append\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"results:message\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"select\",function(){n._positionDropdown(),n._resizeDropdown()}),t.on(\"unselect\",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i=\"scroll.select2.\"+t.id,r=\"resize.select2.\"+t.id,o=\"orientationchange.select2.\"+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,\"select2-scroll-position\",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,\"select2-scroll-position\");f(this).scrollTop(t.y)}),f(window).on(i+\" \"+r+\" \"+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n=\"scroll.select2.\"+t.id,i=\"resize.select2.\"+t.id,r=\"orientationchange.select2.\"+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+\" \"+i+\" \"+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass(\"select2-dropdown--above\"),n=this.$dropdown.hasClass(\"select2-dropdown--below\"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a\u003Cr.top-s,u=l>r.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;\"static\"===p.css(\"position\")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i=\"below\"),u||!c||t?!c&&u&&t&&(i=\"below\"):i=\"above\",(\"above\"==i||t&&\"below\"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\"+i),this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+\"px\"};this.options.get(\"dropdownAutoWidth\")&&(e.minWidth=e.width,e.position=\"relative\",e.width=\"auto\"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define(\"select2\u002Fdropdown\u002FminimumResultsForSearch\",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get(\"minimumResultsForSearch\"),this.minimumResultsForSearch\u003C0&&(this.minimumResultsForSearch=1\u002F0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i\u003Ct.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)\u003Cthis.minimumResultsForSearch)&&e.call(this,t)},e}),e.define(\"select2\u002Fdropdown\u002FselectOnClose\",[\"..\u002Futils\"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"close\",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if(\"select\"===n._type||\"unselect\"===n._type)return}var i=this.getHighlightedResults();if(!(i.length\u003C1)){var r=o.GetData(i[0],\"data\");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger(\"select\",{data:r})}},e}),e.define(\"select2\u002Fdropdown\u002FcloseOnSelect\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on(\"select\",function(e){i._selectTriggered(e)}),t.on(\"unselect\",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger(\"close\",{originalEvent:n,originalSelect2Event:t})},e}),e.define(\"select2\u002Fi18n\u002Fen\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Please delete \"+t+\" character\";return 1!=t&&(n+=\"s\"),n},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var t=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(t+=\"s\"),t},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define(\"select2\u002Fdefaults\",[\"jquery\",\"require\",\".\u002Fresults\",\".\u002Fselection\u002Fsingle\",\".\u002Fselection\u002Fmultiple\",\".\u002Fselection\u002Fplaceholder\",\".\u002Fselection\u002FallowClear\",\".\u002Fselection\u002Fsearch\",\".\u002Fselection\u002FeventRelay\",\".\u002Futils\",\".\u002Ftranslation\",\".\u002Fdiacritics\",\".\u002Fdata\u002Fselect\",\".\u002Fdata\u002Farray\",\".\u002Fdata\u002Fajax\",\".\u002Fdata\u002Ftags\",\".\u002Fdata\u002Ftokenizer\",\".\u002Fdata\u002FminimumInputLength\",\".\u002Fdata\u002FmaximumInputLength\",\".\u002Fdata\u002FmaximumSelectionLength\",\".\u002Fdropdown\",\".\u002Fdropdown\u002Fsearch\",\".\u002Fdropdown\u002FhidePlaceholder\",\".\u002Fdropdown\u002FinfiniteScroll\",\".\u002Fdropdown\u002FattachBody\",\".\u002Fdropdown\u002FminimumResultsForSearch\",\".\u002Fdropdown\u002FselectOnClose\",\".\u002Fdropdown\u002FcloseOnSelect\",\".\u002Fi18n\u002Fen\"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,w,$,b,A,x,D,S,C,E,O,T,q,j,L,I,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=$:null!=e.data?e.dataAdapter=w:e.dataAdapter=_,0\u003Ce.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0\u003Ce.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0\u003Ce.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,b)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+\"compat\u002Fquery\");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+\"compat\u002FinitSelection\");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,L))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=C;else{var i=y.Decorate(C,E);e.dropdownAdapter=i}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,I)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var r=u(e.amdBase+\"compat\u002FdropdownCss\");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,r)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+\"compat\u002FcontainerCss\");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push(\"en\");for(var s=[],a=0;a\u003Ce.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(\u002F[^\\u0000-\\u007E]\u002Fg,function(e){return t[e]||e})}this.defaults={amdBase:\".\u002F\",amdLanguageBase:\".\u002Fi18n\u002F\",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(\"\"===c.trim(t.term))return n;if(n.children&&0\u003Cn.children.length){for(var i=c.extend(!0,{},n),r=n.children.length-1;0\u003C=r;r--)null==e(t,n.children[r])&&i.children.splice(r,1);return 0\u003Ci.children.length?i:e(t,i)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1\u003Co.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:\"default\",width:\"resolve\"}},n.prototype.applyFromElement=function(e,t){var n=e.language,i=this.defaults.language,r=t.prop(\"lang\"),o=t.closest(\"[lang]\").prop(\"lang\"),s=Array.prototype.concat.call(this._resolveLanguage(r),this._resolveLanguage(n),this._resolveLanguage(i),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],i=0;i\u003Ct.length;i++)if(n.push(t[i]),\"string\"==typeof t[i]&&0\u003Ct[i].indexOf(\"-\")){var r=t[i].split(\"-\")[0];n.push(r)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,i=0;i\u003Ce.length;i++){var r=new s,o=e[i];if(\"string\"==typeof o)try{r=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,r=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for \"'+o+'\" could not be automatically loaded. A fallback will be used instead.')}}else r=c.isPlainObject(o)?new s(o):o;n.extend(r)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var i=y._convertData(n);c.extend(!0,this.defaults,i)},new n}),e.define(\"select2\u002Foptions\",[\"require\",\"jquery\",\".\u002Fdefaults\",\".\u002Futils\"],function(i,d,r,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=r.applyFromElement(this.options,t)),this.options=r.apply(this.options),t&&t.is(\"input\")){var n=i(this.get(\"amdBase\")+\"compat\u002FinputData\");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=[\"select2\"];null==this.options.multiple&&(this.options.multiple=e.prop(\"multiple\")),null==this.options.disabled&&(this.options.disabled=e.prop(\"disabled\")),null==this.options.dir&&(e.prop(\"dir\")?this.options.dir=e.prop(\"dir\"):e.closest(\"[dir]\").prop(\"dir\")?this.options.dir=e.closest(\"[dir]\").prop(\"dir\"):this.options.dir=\"ltr\"),e.prop(\"disabled\",this.options.disabled),e.prop(\"multiple\",this.options.multiple),p.GetData(e[0],\"select2Tags\")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],\"data\",p.GetData(e[0],\"select2Tags\")),p.StoreData(e[0],\"tags\",!0)),p.GetData(e[0],\"ajaxUrl\")&&(this.options.debug&&window.console&&console.warn&&console.warn(\"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"),e.attr(\"ajax--url\",p.GetData(e[0],\"ajaxUrl\")),p.StoreData(e[0],\"ajax-Url\",p.GetData(e[0],\"ajaxUrl\")));var n={};function i(e,t){return t.toUpperCase()}for(var r=0;r\u003Ce[0].attributes.length;r++){var o=e[0].attributes[r].name,s=\"data-\";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(\u002F-([a-z])\u002Fg,i)]=l}}d.fn.jquery&&\"1.\"==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1\u003Cd.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define(\"select2\u002Fcore\",[\"jquery\",\".\u002Foptions\",\".\u002Futils\",\".\u002Fkeys\"],function(o,c,u,i){var d=function(e,t){null!=u.GetData(e[0],\"select2\")&&u.GetData(e[0],\"select2\").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr(\"tabindex\")||0;u.StoreData(e[0],\"old-tabindex\",n),e.attr(\"tabindex\",\"-1\");var i=this.options.get(\"dataAdapter\");this.dataAdapter=new i(e,this.options);var r=this.render();this._placeContainer(r);var o=this.options.get(\"selectionAdapter\");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,r);var s=this.options.get(\"dropdownAdapter\");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,r);var a=this.options.get(\"resultsAdapter\");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger(\"selection:update\",{data:e})}),e.addClass(\"select2-hidden-accessible\"),e.attr(\"aria-hidden\",\"true\"),this._syncAttributes(),u.StoreData(e[0],\"select2\",this),e.data(\"select2\",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return\"select2-\"+(null!=e.attr(\"id\")?e.attr(\"id\"):null!=e.attr(\"name\")?e.attr(\"name\")+\"-\"+u.generateChars(2):u.generateChars(4)).replace(\u002F(:|\\.|\\[|\\]|,)\u002Fg,\"\")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get(\"width\"));null!=t&&e.css(\"width\",t)},d.prototype._resolveWidth=function(e,t){var n=\u002F^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))\u002Fi;if(\"resolve\"==t){var i=this._resolveWidth(e,\"style\");return null!=i?i:this._resolveWidth(e,\"element\")}if(\"element\"==t){var r=e.outerWidth(!1);return r\u003C=0?\"auto\":r+\"px\"}if(\"style\"!=t)return\"computedstyle\"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr(\"style\");if(\"string\"!=typeof o)return null;for(var s=o.split(\";\"),a=0,l=s.length;a\u003Cl;a+=1){var c=s[a].replace(\u002F\\s\u002Fg,\"\").match(n);if(null!==c&&1\u003C=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on(\"change.select2\",function(){t.dataAdapter.current(function(e){t.trigger(\"selection:update\",{data:e})})}),this.$element.on(\"focus.select2\",function(e){t.trigger(\"focus\",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent(\"onpropertychange\",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener(\"DOMAttrModified\",t._syncA,!1),this.$element[0].addEventListener(\"DOMNodeInserted\",t._syncS,!1),this.$element[0].addEventListener(\"DOMNodeRemoved\",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,i=[\"toggle\",\"focus\"];this.selection.on(\"toggle\",function(){n.toggleDropdown()}),this.selection.on(\"focus\",function(e){n.focus(e)}),this.selection.on(\"*\",function(e,t){-1===o.inArray(e,i)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on(\"*\",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on(\"open\",function(){n.$container.addClass(\"select2-container--open\")}),this.on(\"close\",function(){n.$container.removeClass(\"select2-container--open\")}),this.on(\"enable\",function(){n.$container.removeClass(\"select2-container--disabled\")}),this.on(\"disable\",function(){n.$container.addClass(\"select2-container--disabled\")}),this.on(\"blur\",function(){n.$container.removeClass(\"select2-container--focus\")}),this.on(\"query\",function(t){n.isOpen()||n.trigger(\"open\",{}),this.dataAdapter.query(t,function(e){n.trigger(\"results:all\",{data:e,query:t})})}),this.on(\"query:append\",function(t){this.dataAdapter.query(t,function(e){n.trigger(\"results:append\",{data:e,query:t})})}),this.on(\"keypress\",function(e){var t=e.which;n.isOpen()?t===i.ESC||t===i.TAB||t===i.UP&&e.altKey?(n.close(e),e.preventDefault()):t===i.ENTER?(n.trigger(\"results:select\",{}),e.preventDefault()):t===i.SPACE&&e.ctrlKey?(n.trigger(\"results:toggle\",{}),e.preventDefault()):t===i.UP?(n.trigger(\"results:previous\",{}),e.preventDefault()):t===i.DOWN&&(n.trigger(\"results:next\",{}),e.preventDefault()):(t===i.ENTER||t===i.SPACE||t===i.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set(\"disabled\",this.$element.prop(\"disabled\")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger(\"disable\",{})):this.trigger(\"enable\",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,i=this;if(!e||!e.target||\"OPTION\"===e.target.nodeName||\"OPTGROUP\"===e.target.nodeName){if(t)if(t.addedNodes&&0\u003Ct.addedNodes.length)for(var r=0;r\u003Ct.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&0\u003Ct.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(i._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),i=this;n&&this.dataAdapter.current(function(e){i.trigger(\"selection:update\",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,i={open:\"opening\",close:\"closing\",select:\"selecting\",unselect:\"unselecting\",clear:\"clearing\"};if(void 0===t&&(t={}),e in i){var r=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,r,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger(\"query\",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger(\"close\",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get(\"disabled\")},d.prototype.isOpen=function(){return this.$container.hasClass(\"select2-container--open\")},d.prototype.hasFocus=function(){return this.$container.hasClass(\"select2-container--focus\")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass(\"select2-container--focus\"),this.trigger(\"focus\",{}))},d.prototype.enable=function(e){this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop(\"disabled\",t)},d.prototype.data=function(){this.options.get(\"debug\")&&0\u003Carguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get(\"debug\")&&window.console&&console.warn&&console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger(\"input\").trigger(\"change\")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent(\"onpropertychange\",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener(\"DOMAttrModified\",this._syncA,!1),this.$element[0].removeEventListener(\"DOMNodeInserted\",this._syncS,!1),this.$element[0].removeEventListener(\"DOMNodeRemoved\",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(\".select2\"),this.$element.attr(\"tabindex\",u.GetData(this.$element[0],\"old-tabindex\")),this.$element.removeClass(\"select2-hidden-accessible\"),this.$element.attr(\"aria-hidden\",\"false\"),u.RemoveData(this.$element[0]),this.$element.removeData(\"select2\"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('\u003Cspan class=\"select2 select2-container\">\u003Cspan class=\"selection\">\u003C\u002Fspan>\u003Cspan class=\"dropdown-wrapper\" aria-hidden=\"true\">\u003C\u002Fspan>\u003C\u002Fspan>');return e.attr(\"dir\",this.options.get(\"dir\")),this.$container=e,this.$container.addClass(\"select2-container--\"+this.options.get(\"theme\")),u.StoreData(e[0],\"element\",this.$element),e},d}),e.define(\"select2\u002Fcompat\u002Futils\",[\"jquery\"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr(\"class\")))&&s((i=\"\"+i).split(\u002F\\s+\u002F)).each(function(){0===this.indexOf(\"select2-\")&&o.push(this)}),(i=s.trim(t.attr(\"class\")))&&s((i=\"\"+i).split(\u002F\\s+\u002F)).each(function(){0!==this.indexOf(\"select2-\")&&null!=(r=n(this))&&o.push(r)}),e.attr(\"class\",o.join(\" \"))}}}),e.define(\"select2\u002Fcompat\u002FcontainerCss\",[\"jquery\",\".\u002Futils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"containerCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptContainerCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"containerCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2\u002Fcompat\u002FdropdownCss\",[\"jquery\",\".\u002Futils\"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get(\"dropdownCssClass\")||\"\";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get(\"adaptDropdownCssClass\");if(i=i||l,-1!==n.indexOf(\":all:\")){n=n.replace(\":all:\",\"\");var r=i;i=function(e){var t=r(e);return null!=t?t+\" \"+e:e}}var o=this.options.get(\"dropdownCss\")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define(\"select2\u002Fcompat\u002FinitSelection\",[\"jquery\"],function(i){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2\"),this.initSelection=n.get(\"initSelection\"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define(\"select2\u002Fcompat\u002FinputData\",[\"jquery\",\"..\u002Futils\"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get(\"valueSeparator\")||\",\",\"hidden\"===t.prop(\"type\")&&n.get(\"debug\")&&console&&console.warn&&console.warn(\"Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `\u003Cselect>` element instead.\"),e.call(this,t,n)}return e.prototype.current=function(e,t){function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.selected=!0,n.push(e)):e.selected=!1,e.children&&n.push.apply(n,i(e.children,t)),n}for(var n=[],r=0;r\u003Cthis._currentData.length;r++){var o=this._currentData[r];n.push.apply(n,i(o,this.$element.val().split(this._valueSeparator)))}t(n)},e.prototype.select=function(e,t){if(this.options.get(\"multiple\")){var n=this.$element.val();n+=this._valueSeparator+t.id,this.$element.val(n),this.$element.trigger(\"input\").trigger(\"change\")}else this.current(function(e){s.map(e,function(e){e.selected=!1})}),this.$element.val(t.id),this.$element.trigger(\"input\").trigger(\"change\")},e.prototype.unselect=function(e,r){var o=this;r.selected=!1,this.current(function(e){for(var t=[],n=0;n\u003Ce.length;n++){var i=e[n];r.id!=i.id&&t.push(i.id)}o.$element.val(t.join(o._valueSeparator)),o.$element.trigger(\"input\").trigger(\"change\")})},e.prototype.query=function(e,t,n){for(var i=[],r=0;r\u003Cthis._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},e.prototype.addOptions=function(e,t){var n=s.map(t,function(e){return i.GetData(e[0],\"data\")});this._currentData.push.apply(this._currentData,n)},e}),e.define(\"select2\u002Fcompat\u002Fmatcher\",[\"jquery\"],function(s){return function(o){return function(e,t){var n=s.extend(!0,{},t);if(null==e.term||\"\"===s.trim(e.term))return n;if(t.children){for(var i=t.children.length-1;0\u003C=i;i--){var r=t.children[i];o(e.term,r.text,r)||n.children.splice(i,1)}if(0\u003Cn.children.length)return n}return o(e.term,t.text,t)?n:null}}}),e.define(\"select2\u002Fcompat\u002Fquery\",[],function(){function e(e,t,n){n.get(\"debug\")&&window.console&&console.warn&&console.warn(\"Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2.\"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get(\"query\").call(null,t)},e}),e.define(\"select2\u002Fdropdown\u002FattachContainer\",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(\".dropdown-wrapper\").append(t),t.addClass(\"select2-dropdown--below\"),n.addClass(\"select2-container--below\")},e}),e.define(\"select2\u002Fdropdown\u002FstopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),e.define(\"select2\u002Fselection\u002FstopPropagation\",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on([\"blur\",\"change\",\"click\",\"dblclick\",\"focus\",\"focusin\",\"focusout\",\"input\",\"keydown\",\"keyup\",\"keypress\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseover\",\"mouseup\",\"search\",\"touchend\",\"touchstart\"].join(\" \"),function(e){e.stopPropagation()})},e}),l=function(p){var h,f,e=[\"wheel\",\"mousewheel\",\"DOMMouseScroll\",\"MozMousePixelScroll\"],t=\"onwheel\"in document||9\u003C=document.documentMode?[\"wheel\"]:[\"mousewheel\",\"DomMouseScroll\",\"MozMousePixelScroll\"],g=Array.prototype.slice;if(p.event.fixHooks)for(var n=e.length;n;)p.event.fixHooks[e[--n]]=p.event.mouseHooks;var m=p.event.special.mousewheel={version:\"3.1.12\",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],i,!1);else this.onmousewheel=i;p.data(this,\"mousewheel-line-height\",m.getLineHeight(this)),p.data(this,\"mousewheel-page-height\",m.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],i,!1);else this.onmousewheel=null;p.removeData(this,\"mousewheel-line-height\"),p.removeData(this,\"mousewheel-page-height\")},getLineHeight:function(e){var t=p(e),n=t[\"offsetParent\"in p.fn?\"offsetParent\":\"parent\"]();return n.length||(n=p(\"body\")),parseInt(n.css(\"fontSize\"),10)||parseInt(t.css(\"fontSize\"),10)||16},getPageHeight:function(e){return p(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,a=0,l=0;if((e=p.event.fix(n)).type=\"mousewheel\",\"detail\"in n&&(s=-1*n.detail),\"wheelDelta\"in n&&(s=n.wheelDelta),\"wheelDeltaY\"in n&&(s=n.wheelDeltaY),\"wheelDeltaX\"in n&&(o=-1*n.wheelDeltaX),\"axis\"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*s,s=0),r=0===s?o:s,\"deltaY\"in n&&(r=s=-1*n.deltaY),\"deltaX\"in n&&(o=n.deltaX,0===s&&(r=-1*o)),0!==s||0!==o){if(1===n.deltaMode){var c=p.data(this,\"mousewheel-line-height\");r*=c,s*=c,o*=c}else if(2===n.deltaMode){var u=p.data(this,\"mousewheel-page-height\");r*=u,s*=u,o*=u}if(t=Math.max(Math.abs(s),Math.abs(o)),(!f||t\u003Cf)&&y(n,f=t)&&(f\u002F=40),y(n,t)&&(r\u002F=40,o\u002F=40,s\u002F=40),r=Math[1\u003C=r?\"floor\":\"ceil\"](r\u002Ff),o=Math[1\u003C=o?\"floor\":\"ceil\"](o\u002Ff),s=Math[1\u003C=s?\"floor\":\"ceil\"](s\u002Ff),m.settings.normalizeOffset&&this.getBoundingClientRect){var d=this.getBoundingClientRect();a=e.clientX-d.left,l=e.clientY-d.top}return e.deltaX=o,e.deltaY=s,e.deltaFactor=f,e.offsetX=a,e.offsetY=l,e.deltaMode=0,i.unshift(e,r,o,s),h&&clearTimeout(h),h=setTimeout(v,200),(p.event.dispatch||p.event.handle).apply(this,i)}}function v(){f=null}function y(e,t){return m.settings.adjustOldDeltas&&\"mousewheel\"===e.type&&t%120==0}p.fn.extend({mousewheel:function(e){return e?this.bind(\"mousewheel\",e):this.trigger(\"mousewheel\")},unmousewheel:function(e){return this.unbind(\"mousewheel\",e)}})},\"function\"==typeof e.define&&e.define.amd?e.define(\"jquery-mousewheel\",[\"jquery\"],l):\"object\"==typeof exports?module.exports=l:l(d),e.define(\"jquery.select2\",[\"jquery\",\"jquery-mousewheel\",\".\u002Fselect2\u002Fcore\",\".\u002Fselect2\u002Fdefaults\",\".\u002Fselect2\u002Futils\"],function(r,e,o,t,s){if(null==r.fn.select2){var a=[\"open\",\"close\",\"destroy\"];r.fn.select2=function(t){if(\"object\"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new o(r(this),e)}),this;if(\"string\"!=typeof t)throw new Error(\"Invalid arguments for Select2: \"+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,\"select2\");null==e&&window.console&&console.error&&console.error(\"The select2('\"+t+\"') method was called on an element that is not using Select2.\"),n=e[t].apply(e,i)}),-1\u003Cr.inArray(t,a)?this:n}}return null==r.fn.select2.defaults&&(r.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require(\"jquery.select2\");return d.fn.select2.amd=e,t});\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-draggable.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,373 +1,373 @@\n-'use strict';\r\n-var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\r\n-\r\n-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\r\n-\r\n-(function () {\r\n-  \"use strict\";\r\n-\r\n-  if (!Array.from) {\r\n-    Array.from = function (object) {\r\n-      return [].slice.call(object);\r\n-    };\r\n-  }\r\n-\r\n-  function buildDraggable(Sortable) {\r\n-    function removeNode(node) {\r\n-      node.parentElement.removeChild(node);\r\n-    }\r\n-\r\n-    function insertNodeAt(fatherNode, node, position) {\r\n-      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\r\n-      fatherNode.insertBefore(node, refNode);\r\n-    }\r\n-\r\n-    function computeVmIndex(vnodes, element) {\r\n-      return vnodes.map(function (elt) {\r\n-        return elt.elm;\r\n-      }).indexOf(element);\r\n-    }\r\n-\r\n-    function _computeIndexes(slots, children, isTransition) {\r\n-      if (!slots) {\r\n-        return [];\r\n-      }\r\n-\r\n-      var elmFromNodes = slots.map(function (elt) {\r\n-        return elt.elm;\r\n-      });\r\n-      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\r\n-        return elmFromNodes.indexOf(elt);\r\n-      });\r\n-      return isTransition ? rawIndexes.filter(function (ind) {\r\n-        return ind !== -1;\r\n-      }) : rawIndexes;\r\n-    }\r\n-\r\n-    function emit(evtName, evtData) {\r\n-      var _this = this;\r\n-\r\n-      this.$nextTick(function () {\r\n-        return _this.$emit(evtName.toLowerCase(), evtData);\r\n-      });\r\n-    }\r\n-\r\n-    function delegateAndEmit(evtName) {\r\n-      var _this2 = this;\r\n-\r\n-      return function (evtData) {\r\n-        if (_this2.realList !== null) {\r\n-          _this2['onDrag' + evtName](evtData);\r\n-        }\r\n-        emit.call(_this2, evtName, evtData);\r\n-      };\r\n-    }\r\n-\r\n-    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\r\n-    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\r\n-    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\r\n-      return 'on' + evt;\r\n-    });\r\n-    var draggingElement = null;\r\n-\r\n-    var props = {\r\n-      options: Object,\r\n-      list: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      value: {\r\n-        type: Array,\r\n-        required: false,\r\n-        default: null\r\n-      },\r\n-      noTransitionOnDrag: {\r\n-        type: Boolean,\r\n-        default: false\r\n-      },\r\n-      clone: {\r\n-        type: Function,\r\n-        default: function _default(original) {\r\n-          return original;\r\n-        }\r\n-      },\r\n-      element: {\r\n-        type: String,\r\n-        default: 'div'\r\n-      },\r\n-      move: {\r\n-        type: Function,\r\n-        default: null\r\n-      }\r\n-    };\r\n-\r\n-    var draggableComponent = {\r\n-      name: 'draggable',\r\n-\r\n-      props: props,\r\n-\r\n-      data: function data() {\r\n-        return {\r\n-          transitionMode: false,\r\n-          componentMode: false\r\n-        };\r\n-      },\r\n-      render: function render(h) {\r\n-        var slots = this.$slots.default;\r\n-        if (slots && slots.length === 1) {\r\n-          var child = slots[0];\r\n-          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\r\n-            this.transitionMode = true;\r\n-          }\r\n-        }\r\n-        var children = slots;\r\n-        var footer = this.$slots.footer;\r\n-\r\n-        if (footer) {\r\n-          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\r\n-        }\r\n-        return h(this.element, null, children);\r\n-      },\r\n-      mounted: function mounted() {\r\n-        var _this3 = this;\r\n-\r\n-        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\r\n-        if (this.componentMode && this.transitionMode) {\r\n-          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\r\n-        }\r\n-        var optionsAdded = {};\r\n-        eventsListened.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\r\n-        });\r\n-\r\n-        eventsToEmit.forEach(function (elt) {\r\n-          optionsAdded['on' + elt] = emit.bind(_this3, elt);\r\n-        });\r\n-\r\n-        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\r\n-            return _this3.onDragMove(evt, originalEvent);\r\n-          } });\r\n-        !('draggable' in options) && (options.draggable = '>*');\r\n-        this._sortable = new Sortable(this.rootContainer, options);\r\n-        this.computeIndexes();\r\n-      },\r\n-      beforeDestroy: function beforeDestroy() {\r\n-        this._sortable.destroy();\r\n-      },\r\n-\r\n-\r\n-      computed: {\r\n-        rootContainer: function rootContainer() {\r\n-          return this.transitionMode ? this.$el.children[0] : this.$el;\r\n-        },\r\n-        isCloning: function isCloning() {\r\n-          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\r\n-        },\r\n-        realList: function realList() {\r\n-          return !!this.list ? this.list : this.value;\r\n-        }\r\n-      },\r\n-\r\n-      watch: {\r\n-        options: {\r\n-          handler: function handler(newOptionValue) {\r\n-            for (var property in newOptionValue) {\r\n-              if (readonlyProperties.indexOf(property) == -1) {\r\n-                this._sortable.option(property, newOptionValue[property]);\r\n-              }\r\n-            }\r\n-          },\r\n-\r\n-          deep: true\r\n-        },\r\n-\r\n-        realList: function realList() {\r\n-          this.computeIndexes();\r\n-        }\r\n-      },\r\n-\r\n-      methods: {\r\n-        getChildrenNodes: function getChildrenNodes() {\r\n-          if (this.componentMode) {\r\n-            return this.$children[0].$slots.default;\r\n-          }\r\n-          var rawNodes = this.$slots.default;\r\n-          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\r\n-        },\r\n-        computeIndexes: function computeIndexes() {\r\n-          var _this4 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\r\n-          });\r\n-        },\r\n-        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\r\n-          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\r\n-          if (index === -1) {\r\n-            \u002F\u002FEdge case during move callback: related element might be\r\n-            \u002F\u002Fan element different from collection\r\n-            return null;\r\n-          }\r\n-          var element = this.realList[index];\r\n-          return { index: index, element: element };\r\n-        },\r\n-        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\r\n-          var __vue__ = _ref.__vue__;\r\n-\r\n-          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\r\n-            return __vue__;\r\n-          }\r\n-          return __vue__.$parent;\r\n-        },\r\n-        emitChanges: function emitChanges(evt) {\r\n-          var _this5 = this;\r\n-\r\n-          this.$nextTick(function () {\r\n-            _this5.$emit('change', evt);\r\n-          });\r\n-        },\r\n-        alterList: function alterList(onList) {\r\n-          if (!!this.list) {\r\n-            onList(this.list);\r\n-          } else {\r\n-            var newList = [].concat(_toConsumableArray(this.value));\r\n-            onList(newList);\r\n-            this.$emit('input', newList);\r\n-          }\r\n-        },\r\n-        spliceList: function spliceList() {\r\n-          var _arguments = arguments;\r\n-\r\n-          var spliceList = function spliceList(list) {\r\n-            return list.splice.apply(list, _arguments);\r\n-          };\r\n-          this.alterList(spliceList);\r\n-        },\r\n-        updatePosition: function updatePosition(oldIndex, newIndex) {\r\n-          var updatePosition = function updatePosition(list) {\r\n-            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\r\n-          };\r\n-          this.alterList(updatePosition);\r\n-        },\r\n-        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\r\n-          var to = _ref2.to,\r\n-              related = _ref2.related;\r\n-\r\n-          var component = this.getUnderlyingPotencialDraggableComponent(to);\r\n-          if (!component) {\r\n-            return { component: component };\r\n-          }\r\n-          var list = component.realList;\r\n-          var context = { list: list, component: component };\r\n-          if (to !== related && list && component.getUnderlyingVm) {\r\n-            var destination = component.getUnderlyingVm(related);\r\n-            if (destination) {\r\n-              return _extends(destination, context);\r\n-            }\r\n-          }\r\n-\r\n-          return context;\r\n-        },\r\n-        getVmIndex: function getVmIndex(domIndex) {\r\n-          var indexes = this.visibleIndexes;\r\n-          var numberIndexes = indexes.length;\r\n-          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\r\n-        },\r\n-        getComponent: function getComponent() {\r\n-          return this.$slots.default[0].componentInstance;\r\n-        },\r\n-        resetTransitionData: function resetTransitionData(index) {\r\n-          if (!this.noTransitionOnDrag || !this.transitionMode) {\r\n-            return;\r\n-          }\r\n-          var nodes = this.getChildrenNodes();\r\n-          nodes[index].data = null;\r\n-          var transitionContainer = this.getComponent();\r\n-          transitionContainer.children = [];\r\n-          transitionContainer.kept = undefined;\r\n-        },\r\n-        onDragStart: function onDragStart(evt) {\r\n-          this.context = this.getUnderlyingVm(evt.item);\r\n-          evt.item._underlying_vm_ = this.clone(this.context.element);\r\n-          draggingElement = evt.item;\r\n-        },\r\n-        onDragAdd: function onDragAdd(evt) {\r\n-          var element = evt.item._underlying_vm_;\r\n-          if (element === undefined) {\r\n-            return;\r\n-          }\r\n-          removeNode(evt.item);\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.spliceList(newIndex, 0, element);\r\n-          this.computeIndexes();\r\n-          var added = { element: element, newIndex: newIndex };\r\n-          this.emitChanges({ added: added });\r\n-        },\r\n-        onDragRemove: function onDragRemove(evt) {\r\n-          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\r\n-          if (this.isCloning) {\r\n-            removeNode(evt.clone);\r\n-            return;\r\n-          }\r\n-          var oldIndex = this.context.index;\r\n-          this.spliceList(oldIndex, 1);\r\n-          var removed = { element: this.context.element, oldIndex: oldIndex };\r\n-          this.resetTransitionData(oldIndex);\r\n-          this.emitChanges({ removed: removed });\r\n-        },\r\n-        onDragUpdate: function onDragUpdate(evt) {\r\n-          removeNode(evt.item);\r\n-          insertNodeAt(evt.from, evt.item, evt.oldIndex);\r\n-          var oldIndex = this.context.index;\r\n-          var newIndex = this.getVmIndex(evt.newIndex);\r\n-          this.updatePosition(oldIndex, newIndex);\r\n-          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\r\n-          this.emitChanges({ moved: moved });\r\n-        },\r\n-        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\r\n-          if (!relatedContext.element) {\r\n-            return 0;\r\n-          }\r\n-          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\r\n-            return el.style['display'] !== 'none';\r\n-          });\r\n-          var currentDOMIndex = domChildren.indexOf(evt.related);\r\n-          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\r\n-          var draggedInList = domChildren.indexOf(draggingElement) != -1;\r\n-          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\r\n-        },\r\n-        onDragMove: function onDragMove(evt, originalEvent) {\r\n-          var onMove = this.move;\r\n-          if (!onMove || !this.realList) {\r\n-            return true;\r\n-          }\r\n-\r\n-          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\r\n-          var draggedContext = this.context;\r\n-          var futureIndex = this.computeFutureIndex(relatedContext, evt);\r\n-          _extends(draggedContext, { futureIndex: futureIndex });\r\n-          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\r\n-          return onMove(evt, originalEvent);\r\n-        },\r\n-        onDragEnd: function onDragEnd(evt) {\r\n-          this.computeIndexes();\r\n-          draggingElement = null;\r\n-        }\r\n-      }\r\n-    };\r\n-    return draggableComponent;\r\n-  }\r\n-\r\n-  if (typeof exports == \"object\") {\r\n-    \u002F\u002F var Sortable = require(\"sortablejs\");\r\n-    \u002F\u002F module.exports = buildDraggable(Sortable);\r\n-  } else if (typeof define == \"function\" && define.amd) {\r\n-    define(['sortablejs'], function (Sortable) {\r\n-      return buildDraggable(Sortable);\r\n-    });\r\n-  } else if (window && window.Vue && window.Sortable) {\r\n-    var draggable = buildDraggable(window.Sortable);\r\n-    Vue.component('draggable', draggable);\r\n-  }\r\n+'use strict';\n+var _extends = Object.assign || function (target) { for (var i = 1; i \u003C arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n+\n+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i \u003C arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n+\n+(function () {\n+  \"use strict\";\n+\n+  if (!Array.from) {\n+    Array.from = function (object) {\n+      return [].slice.call(object);\n+    };\n+  }\n+\n+  function buildDraggable(Sortable) {\n+    function removeNode(node) {\n+      node.parentElement.removeChild(node);\n+    }\n+\n+    function insertNodeAt(fatherNode, node, position) {\n+      var refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;\n+      fatherNode.insertBefore(node, refNode);\n+    }\n+\n+    function computeVmIndex(vnodes, element) {\n+      return vnodes.map(function (elt) {\n+        return elt.elm;\n+      }).indexOf(element);\n+    }\n+\n+    function _computeIndexes(slots, children, isTransition) {\n+      if (!slots) {\n+        return [];\n+      }\n+\n+      var elmFromNodes = slots.map(function (elt) {\n+        return elt.elm;\n+      });\n+      var rawIndexes = [].concat(_toConsumableArray(children)).map(function (elt) {\n+        return elmFromNodes.indexOf(elt);\n+      });\n+      return isTransition ? rawIndexes.filter(function (ind) {\n+        return ind !== -1;\n+      }) : rawIndexes;\n+    }\n+\n+    function emit(evtName, evtData) {\n+      var _this = this;\n+\n+      this.$nextTick(function () {\n+        return _this.$emit(evtName.toLowerCase(), evtData);\n+      });\n+    }\n+\n+    function delegateAndEmit(evtName) {\n+      var _this2 = this;\n+\n+      return function (evtData) {\n+        if (_this2.realList !== null) {\n+          _this2['onDrag' + evtName](evtData);\n+        }\n+        emit.call(_this2, evtName, evtData);\n+      };\n+    }\n+\n+    var eventsListened = ['Start', 'Add', 'Remove', 'Update', 'End'];\n+    var eventsToEmit = ['Choose', 'Sort', 'Filter', 'Clone'];\n+    var readonlyProperties = ['Move'].concat(eventsListened, eventsToEmit).map(function (evt) {\n+      return 'on' + evt;\n+    });\n+    var draggingElement = null;\n+\n+    var props = {\n+      options: Object,\n+      list: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      value: {\n+        type: Array,\n+        required: false,\n+        default: null\n+      },\n+      noTransitionOnDrag: {\n+        type: Boolean,\n+        default: false\n+      },\n+      clone: {\n+        type: Function,\n+        default: function _default(original) {\n+          return original;\n+        }\n+      },\n+      element: {\n+        type: String,\n+        default: 'div'\n+      },\n+      move: {\n+        type: Function,\n+        default: null\n+      }\n+    };\n+\n+    var draggableComponent = {\n+      name: 'draggable',\n+\n+      props: props,\n+\n+      data: function data() {\n+        return {\n+          transitionMode: false,\n+          componentMode: false\n+        };\n+      },\n+      render: function render(h) {\n+        var slots = this.$slots.default;\n+        if (slots && slots.length === 1) {\n+          var child = slots[0];\n+          if (child.componentOptions && child.componentOptions.tag === \"transition-group\") {\n+            this.transitionMode = true;\n+          }\n+        }\n+        var children = slots;\n+        var footer = this.$slots.footer;\n+\n+        if (footer) {\n+          children = slots ? [].concat(_toConsumableArray(slots), _toConsumableArray(footer)) : [].concat(_toConsumableArray(footer));\n+        }\n+        return h(this.element, null, children);\n+      },\n+      mounted: function mounted() {\n+        var _this3 = this;\n+\n+        this.componentMode = this.element.toLowerCase() !== this.$el.nodeName.toLowerCase();\n+        if (this.componentMode && this.transitionMode) {\n+          throw new Error('Transition-group inside component is not supported. Please alter element value or remove transition-group. Current element value: ' + this.element);\n+        }\n+        var optionsAdded = {};\n+        eventsListened.forEach(function (elt) {\n+          optionsAdded['on' + elt] = delegateAndEmit.call(_this3, elt);\n+        });\n+\n+        eventsToEmit.forEach(function (elt) {\n+          optionsAdded['on' + elt] = emit.bind(_this3, elt);\n+        });\n+\n+        var options = _extends({}, this.options, optionsAdded, { onMove: function onMove(evt, originalEvent) {\n+            return _this3.onDragMove(evt, originalEvent);\n+          } });\n+        !('draggable' in options) && (options.draggable = '>*');\n+        this._sortable = new Sortable(this.rootContainer, options);\n+        this.computeIndexes();\n+      },\n+      beforeDestroy: function beforeDestroy() {\n+        this._sortable.destroy();\n+      },\n+\n+\n+      computed: {\n+        rootContainer: function rootContainer() {\n+          return this.transitionMode ? this.$el.children[0] : this.$el;\n+        },\n+        isCloning: function isCloning() {\n+          return !!this.options && !!this.options.group && this.options.group.pull === 'clone';\n+        },\n+        realList: function realList() {\n+          return !!this.list ? this.list : this.value;\n+        }\n+      },\n+\n+      watch: {\n+        options: {\n+          handler: function handler(newOptionValue) {\n+            for (var property in newOptionValue) {\n+              if (readonlyProperties.indexOf(property) == -1) {\n+                this._sortable.option(property, newOptionValue[property]);\n+              }\n+            }\n+          },\n+\n+          deep: true\n+        },\n+\n+        realList: function realList() {\n+          this.computeIndexes();\n+        }\n+      },\n+\n+      methods: {\n+        getChildrenNodes: function getChildrenNodes() {\n+          if (this.componentMode) {\n+            return this.$children[0].$slots.default;\n+          }\n+          var rawNodes = this.$slots.default;\n+          return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes;\n+        },\n+        computeIndexes: function computeIndexes() {\n+          var _this4 = this;\n+\n+          this.$nextTick(function () {\n+            _this4.visibleIndexes = _computeIndexes(_this4.getChildrenNodes(), _this4.rootContainer.children, _this4.transitionMode);\n+          });\n+        },\n+        getUnderlyingVm: function getUnderlyingVm(htmlElt) {\n+          var index = computeVmIndex(this.getChildrenNodes() || [], htmlElt);\n+          if (index === -1) {\n+            \u002F\u002FEdge case during move callback: related element might be\n+            \u002F\u002Fan element different from collection\n+            return null;\n+          }\n+          var element = this.realList[index];\n+          return { index: index, element: element };\n+        },\n+        getUnderlyingPotencialDraggableComponent: function getUnderlyingPotencialDraggableComponent(_ref) {\n+          var __vue__ = _ref.__vue__;\n+\n+          if (!__vue__ || !__vue__.$options || __vue__.$options._componentTag !== \"transition-group\") {\n+            return __vue__;\n+          }\n+          return __vue__.$parent;\n+        },\n+        emitChanges: function emitChanges(evt) {\n+          var _this5 = this;\n+\n+          this.$nextTick(function () {\n+            _this5.$emit('change', evt);\n+          });\n+        },\n+        alterList: function alterList(onList) {\n+          if (!!this.list) {\n+            onList(this.list);\n+          } else {\n+            var newList = [].concat(_toConsumableArray(this.value));\n+            onList(newList);\n+            this.$emit('input', newList);\n+          }\n+        },\n+        spliceList: function spliceList() {\n+          var _arguments = arguments;\n+\n+          var spliceList = function spliceList(list) {\n+            return list.splice.apply(list, _arguments);\n+          };\n+          this.alterList(spliceList);\n+        },\n+        updatePosition: function updatePosition(oldIndex, newIndex) {\n+          var updatePosition = function updatePosition(list) {\n+            return list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]);\n+          };\n+          this.alterList(updatePosition);\n+        },\n+        getRelatedContextFromMoveEvent: function getRelatedContextFromMoveEvent(_ref2) {\n+          var to = _ref2.to,\n+              related = _ref2.related;\n+\n+          var component = this.getUnderlyingPotencialDraggableComponent(to);\n+          if (!component) {\n+            return { component: component };\n+          }\n+          var list = component.realList;\n+          var context = { list: list, component: component };\n+          if (to !== related && list && component.getUnderlyingVm) {\n+            var destination = component.getUnderlyingVm(related);\n+            if (destination) {\n+              return _extends(destination, context);\n+            }\n+          }\n+\n+          return context;\n+        },\n+        getVmIndex: function getVmIndex(domIndex) {\n+          var indexes = this.visibleIndexes;\n+          var numberIndexes = indexes.length;\n+          return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];\n+        },\n+        getComponent: function getComponent() {\n+          return this.$slots.default[0].componentInstance;\n+        },\n+        resetTransitionData: function resetTransitionData(index) {\n+          if (!this.noTransitionOnDrag || !this.transitionMode) {\n+            return;\n+          }\n+          var nodes = this.getChildrenNodes();\n+          nodes[index].data = null;\n+          var transitionContainer = this.getComponent();\n+          transitionContainer.children = [];\n+          transitionContainer.kept = undefined;\n+        },\n+        onDragStart: function onDragStart(evt) {\n+          this.context = this.getUnderlyingVm(evt.item);\n+          evt.item._underlying_vm_ = this.clone(this.context.element);\n+          draggingElement = evt.item;\n+        },\n+        onDragAdd: function onDragAdd(evt) {\n+          var element = evt.item._underlying_vm_;\n+          if (element === undefined) {\n+            return;\n+          }\n+          removeNode(evt.item);\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.spliceList(newIndex, 0, element);\n+          this.computeIndexes();\n+          var added = { element: element, newIndex: newIndex };\n+          this.emitChanges({ added: added });\n+        },\n+        onDragRemove: function onDragRemove(evt) {\n+          insertNodeAt(this.rootContainer, evt.item, evt.oldIndex);\n+          if (this.isCloning) {\n+            removeNode(evt.clone);\n+            return;\n+          }\n+          var oldIndex = this.context.index;\n+          this.spliceList(oldIndex, 1);\n+          var removed = { element: this.context.element, oldIndex: oldIndex };\n+          this.resetTransitionData(oldIndex);\n+          this.emitChanges({ removed: removed });\n+        },\n+        onDragUpdate: function onDragUpdate(evt) {\n+          removeNode(evt.item);\n+          insertNodeAt(evt.from, evt.item, evt.oldIndex);\n+          var oldIndex = this.context.index;\n+          var newIndex = this.getVmIndex(evt.newIndex);\n+          this.updatePosition(oldIndex, newIndex);\n+          var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };\n+          this.emitChanges({ moved: moved });\n+        },\n+        computeFutureIndex: function computeFutureIndex(relatedContext, evt) {\n+          if (!relatedContext.element) {\n+            return 0;\n+          }\n+          var domChildren = [].concat(_toConsumableArray(evt.to.children)).filter(function (el) {\n+            return el.style['display'] !== 'none';\n+          });\n+          var currentDOMIndex = domChildren.indexOf(evt.related);\n+          var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);\n+          var draggedInList = domChildren.indexOf(draggingElement) != -1;\n+          return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;\n+        },\n+        onDragMove: function onDragMove(evt, originalEvent) {\n+          var onMove = this.move;\n+          if (!onMove || !this.realList) {\n+            return true;\n+          }\n+\n+          var relatedContext = this.getRelatedContextFromMoveEvent(evt);\n+          var draggedContext = this.context;\n+          var futureIndex = this.computeFutureIndex(relatedContext, evt);\n+          _extends(draggedContext, { futureIndex: futureIndex });\n+          _extends(evt, { relatedContext: relatedContext, draggedContext: draggedContext });\n+          return onMove(evt, originalEvent);\n+        },\n+        onDragEnd: function onDragEnd(evt) {\n+          this.computeIndexes();\n+          draggingElement = null;\n+        }\n+      }\n+    };\n+    return draggableComponent;\n+  }\n+\n+  if (typeof exports == \"object\") {\n+    \u002F\u002F var Sortable = require(\"sortablejs\");\n+    \u002F\u002F module.exports = buildDraggable(Sortable);\n+  } else if (typeof define == \"function\" && define.amd) {\n+    define(['sortablejs'], function (Sortable) {\n+      return buildDraggable(Sortable);\n+    });\n+  } else if (window && window.Vue && window.Sortable) {\n+    var draggable = buildDraggable(window.Sortable);\n+    Vue.component('draggable', draggable);\n+  }\n })();\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11945 +1,11945 @@\n-\u002F*!\r\n- * Vue.js v2.6.10\r\n- * (c) 2014-2019 Evan You\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vue = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var emptyObject = Object.freeze({});\r\n-\r\n-    \u002F\u002F These helpers produce better VM code in JS engines due to their\r\n-    \u002F\u002F explicitness and function inlining.\r\n-    function isUndef (v) {\r\n-        return v === undefined || v === null\r\n-    }\r\n-\r\n-    function isDef (v) {\r\n-        return v !== undefined && v !== null\r\n-    }\r\n-\r\n-    function isTrue (v) {\r\n-        return v === true\r\n-    }\r\n-\r\n-    function isFalse (v) {\r\n-        return v === false\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if value is primitive.\r\n-     *\u002F\r\n-    function isPrimitive (value) {\r\n-        return (\r\n-            typeof value === 'string' ||\r\n-            typeof value === 'number' ||\r\n-            \u002F\u002F $flow-disable-line\r\n-            typeof value === 'symbol' ||\r\n-            typeof value === 'boolean'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Quick object check - this is primarily used to tell\r\n-     * Objects from primitive values when we know the value\r\n-     * is a JSON-compliant type.\r\n-     *\u002F\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the raw type string of a value, e.g., [object Object].\r\n-     *\u002F\r\n-    var _toString = Object.prototype.toString;\r\n-\r\n-    function toRawType (value) {\r\n-        return _toString.call(value).slice(8, -1)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Strict object type check. Only returns true\r\n-     * for plain JavaScript objects.\r\n-     *\u002F\r\n-    function isPlainObject (obj) {\r\n-        return _toString.call(obj) === '[object Object]'\r\n-    }\r\n-\r\n-    function isRegExp (v) {\r\n-        return _toString.call(v) === '[object RegExp]'\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if val is a valid array index.\r\n-     *\u002F\r\n-    function isValidArrayIndex (val) {\r\n-        var n = parseFloat(String(val));\r\n-        return n >= 0 && Math.floor(n) === n && isFinite(val)\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return (\r\n-            isDef(val) &&\r\n-            typeof val.then === 'function' &&\r\n-            typeof val.catch === 'function'\r\n-        )\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert a value to a string that is actually rendered.\r\n-     *\u002F\r\n-    function toString (val) {\r\n-        return val == null\r\n-            ? ''\r\n-            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\r\n-                ? JSON.stringify(val, null, 2)\r\n-                : String(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert an input value to a number for persistence.\r\n-     * If the conversion fails, return original string.\r\n-     *\u002F\r\n-    function toNumber (val) {\r\n-        var n = parseFloat(val);\r\n-        return isNaN(n) ? val : n\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Make a map and return a function for checking if a key\r\n-     * is in that map.\r\n-     *\u002F\r\n-    function makeMap (\r\n-        str,\r\n-        expectsLowerCase\r\n-    ) {\r\n-        var map = Object.create(null);\r\n-        var list = str.split(',');\r\n-        for (var i = 0; i \u003C list.length; i++) {\r\n-            map[list[i]] = true;\r\n-        }\r\n-        return expectsLowerCase\r\n-            ? function (val) { return map[val.toLowerCase()]; }\r\n-            : function (val) { return map[val]; }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if a tag is a built-in tag.\r\n-     *\u002F\r\n-    var isBuiltInTag = makeMap('slot,component', true);\r\n-\r\n-    \u002F**\r\n-     * Check if an attribute is a reserved attribute.\r\n-     *\u002F\r\n-    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\r\n-\r\n-    \u002F**\r\n-     * Remove an item from an array.\r\n-     *\u002F\r\n-    function remove (arr, item) {\r\n-        if (arr.length) {\r\n-            var index = arr.indexOf(item);\r\n-            if (index > -1) {\r\n-                return arr.splice(index, 1)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check whether an object has the property.\r\n-     *\u002F\r\n-    var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n-    function hasOwn (obj, key) {\r\n-        return hasOwnProperty.call(obj, key)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Create a cached version of a pure function.\r\n-     *\u002F\r\n-    function cached (fn) {\r\n-        var cache = Object.create(null);\r\n-        return (function cachedFn (str) {\r\n-            var hit = cache[str];\r\n-            return hit || (cache[str] = fn(str))\r\n-        })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Camelize a hyphen-delimited string.\r\n-     *\u002F\r\n-    var camelizeRE = \u002F-(\\w)\u002Fg;\r\n-    var camelize = cached(function (str) {\r\n-        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Capitalize a string.\r\n-     *\u002F\r\n-    var capitalize = cached(function (str) {\r\n-        return str.charAt(0).toUpperCase() + str.slice(1)\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Hyphenate a camelCase string.\r\n-     *\u002F\r\n-    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\r\n-    var hyphenate = cached(function (str) {\r\n-        return str.replace(hyphenateRE, '-$1').toLowerCase()\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Simple bind polyfill for environments that do not support it,\r\n-     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\r\n-     * since native bind is now performant enough in most browsers.\r\n-     * But removing it would mean breaking code that was able to run in\r\n-     * PhantomJS 1.x, so this must be kept for backward compatibility.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function polyfillBind (fn, ctx) {\r\n-        function boundFn (a) {\r\n-            var l = arguments.length;\r\n-            return l\r\n-                ? l > 1\r\n-                    ? fn.apply(ctx, arguments)\r\n-                    : fn.call(ctx, a)\r\n-                : fn.call(ctx)\r\n-        }\r\n-\r\n-        boundFn._length = fn.length;\r\n-        return boundFn\r\n-    }\r\n-\r\n-    function nativeBind (fn, ctx) {\r\n-        return fn.bind(ctx)\r\n-    }\r\n-\r\n-    var bind = Function.prototype.bind\r\n-        ? nativeBind\r\n-        : polyfillBind;\r\n-\r\n-    \u002F**\r\n-     * Convert an Array-like object to a real Array.\r\n-     *\u002F\r\n-    function toArray (list, start) {\r\n-        start = start || 0;\r\n-        var i = list.length - start;\r\n-        var ret = new Array(i);\r\n-        while (i--) {\r\n-            ret[i] = list[i + start];\r\n-        }\r\n-        return ret\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Mix properties into target object.\r\n-     *\u002F\r\n-    function extend (to, _from) {\r\n-        for (var key in _from) {\r\n-            to[key] = _from[key];\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge an Array of Objects into a single Object.\r\n-     *\u002F\r\n-    function toObject (arr) {\r\n-        var res = {};\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (arr[i]) {\r\n-                extend(res, arr[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Perform no operation.\r\n-     * Stubbing args to make Flow happy without leaving useless transpiled code\r\n-     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\r\n-     *\u002F\r\n-    function noop (a, b, c) {}\r\n-\r\n-    \u002F**\r\n-     * Always return false.\r\n-     *\u002F\r\n-    var no = function (a, b, c) { return false; };\r\n-\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    \u002F**\r\n-     * Return the same value.\r\n-     *\u002F\r\n-    var identity = function (_) { return _; };\r\n-\r\n-    \u002F**\r\n-     * Generate a string containing static keys from compiler modules.\r\n-     *\u002F\r\n-    function genStaticKeys (modules) {\r\n-        return modules.reduce(function (keys, m) {\r\n-            return keys.concat(m.staticKeys || [])\r\n-        }, []).join(',')\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Check if two values are loosely equal - that is,\r\n-     * if they are plain objects, do they have the same shape?\r\n-     *\u002F\r\n-    function looseEqual (a, b) {\r\n-        if (a === b) { return true }\r\n-        var isObjectA = isObject(a);\r\n-        var isObjectB = isObject(b);\r\n-        if (isObjectA && isObjectB) {\r\n-            try {\r\n-                var isArrayA = Array.isArray(a);\r\n-                var isArrayB = Array.isArray(b);\r\n-                if (isArrayA && isArrayB) {\r\n-                    return a.length === b.length && a.every(function (e, i) {\r\n-                            return looseEqual(e, b[i])\r\n-                        })\r\n-                } else if (a instanceof Date && b instanceof Date) {\r\n-                    return a.getTime() === b.getTime()\r\n-                } else if (!isArrayA && !isArrayB) {\r\n-                    var keysA = Object.keys(a);\r\n-                    var keysB = Object.keys(b);\r\n-                    return keysA.length === keysB.length && keysA.every(function (key) {\r\n-                            return looseEqual(a[key], b[key])\r\n-                        })\r\n-                } else {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    return false\r\n-                }\r\n-            } catch (e) {\r\n-              \u002F* istanbul ignore next *\u002F\r\n-                return false\r\n-            }\r\n-        } else if (!isObjectA && !isObjectB) {\r\n-            return String(a) === String(b)\r\n-        } else {\r\n-            return false\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return the first index at which a loosely equal value can be\r\n-     * found in the array (if value is a plain object, the array must\r\n-     * contain an object of the same shape), or -1 if it is not present.\r\n-     *\u002F\r\n-    function looseIndexOf (arr, val) {\r\n-        for (var i = 0; i \u003C arr.length; i++) {\r\n-            if (looseEqual(arr[i], val)) { return i }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure a function is called only once.\r\n-     *\u002F\r\n-    function once (fn) {\r\n-        var called = false;\r\n-        return function () {\r\n-            if (!called) {\r\n-                called = true;\r\n-                fn.apply(this, arguments);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var SSR_ATTR = 'data-server-rendered';\r\n-\r\n-    var ASSET_TYPES = [\r\n-        'component',\r\n-        'directive',\r\n-        'filter'\r\n-    ];\r\n-\r\n-    var LIFECYCLE_HOOKS = [\r\n-        'beforeCreate',\r\n-        'created',\r\n-        'beforeMount',\r\n-        'mounted',\r\n-        'beforeUpdate',\r\n-        'updated',\r\n-        'beforeDestroy',\r\n-        'destroyed',\r\n-        'activated',\r\n-        'deactivated',\r\n-        'errorCaptured',\r\n-        'serverPrefetch'\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var config = ({\r\n-        \u002F**\r\n-         * Option merge strategies (used in core\u002Futil\u002Foptions)\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        optionMergeStrategies: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Whether to suppress warnings.\r\n-         *\u002F\r\n-        silent: false,\r\n-\r\n-        \u002F**\r\n-         * Show production mode tip message on boot?\r\n-         *\u002F\r\n-        productionTip: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to enable devtools\r\n-         *\u002F\r\n-        devtools: \"development\" !== 'production',\r\n-\r\n-        \u002F**\r\n-         * Whether to record perf\r\n-         *\u002F\r\n-        performance: false,\r\n-\r\n-        \u002F**\r\n-         * Error handler for watcher errors\r\n-         *\u002F\r\n-        errorHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Warn handler for watcher warns\r\n-         *\u002F\r\n-        warnHandler: null,\r\n-\r\n-        \u002F**\r\n-         * Ignore certain custom elements\r\n-         *\u002F\r\n-        ignoredElements: [],\r\n-\r\n-        \u002F**\r\n-         * Custom user key aliases for v-on\r\n-         *\u002F\r\n-        \u002F\u002F $flow-disable-line\r\n-        keyCodes: Object.create(null),\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is reserved so that it cannot be registered as a\r\n-         * component. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedTag: no,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute is reserved so that it cannot be used as a component\r\n-         * prop. This is platform-dependent and may be overwritten.\r\n-         *\u002F\r\n-        isReservedAttr: no,\r\n-\r\n-        \u002F**\r\n-         * Check if a tag is an unknown element.\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        isUnknownElement: no,\r\n-\r\n-        \u002F**\r\n-         * Get the namespace of an element\r\n-         *\u002F\r\n-        getTagNamespace: noop,\r\n-\r\n-        \u002F**\r\n-         * Parse the real tag name for the specific platform.\r\n-         *\u002F\r\n-        parsePlatformTagName: identity,\r\n-\r\n-        \u002F**\r\n-         * Check if an attribute must be bound using property, e.g. value\r\n-         * Platform-dependent.\r\n-         *\u002F\r\n-        mustUseProp: no,\r\n-\r\n-        \u002F**\r\n-         * Perform updates asynchronously. Intended to be used by Vue Test Utils\r\n-         * This will significantly reduce performance if set to false.\r\n-         *\u002F\r\n-        async: true,\r\n-\r\n-        \u002F**\r\n-         * Exposed for legacy reasons\r\n-         *\u002F\r\n-        _lifecycleHooks: LIFECYCLE_HOOKS\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * unicode letters used for parsing html tags, component names and property paths.\r\n-     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\r\n-     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\r\n-     *\u002F\r\n-    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\r\n-\r\n-    \u002F**\r\n-     * Check if a string starts with $ or _\r\n-     *\u002F\r\n-    function isReserved (str) {\r\n-        var c = (str + '').charCodeAt(0);\r\n-        return c === 0x24 || c === 0x5F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a property.\r\n-     *\u002F\r\n-    function def (obj, key, val, enumerable) {\r\n-        Object.defineProperty(obj, key, {\r\n-            value: val,\r\n-            enumerable: !!enumerable,\r\n-            writable: true,\r\n-            configurable: true\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse simple path.\r\n-     *\u002F\r\n-    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\r\n-    function parsePath (path) {\r\n-        if (bailRE.test(path)) {\r\n-            return\r\n-        }\r\n-        var segments = path.split('.');\r\n-        return function (obj) {\r\n-            for (var i = 0; i \u003C segments.length; i++) {\r\n-                if (!obj) { return }\r\n-                obj = obj[segments[i]];\r\n-            }\r\n-            return obj\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F can we use __proto__?\r\n-    var hasProto = '__proto__' in {};\r\n-\r\n-    \u002F\u002F Browser environment sniffing\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\r\n-    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\r\n-    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\r\n-    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\r\n-    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\r\n-    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\r\n-    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\r\n-    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\r\n-    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\r\n-    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\r\n-    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\r\n-\r\n-    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\r\n-    var nativeWatch = ({}).watch;\r\n-\r\n-    var supportsPassive = false;\r\n-    if (inBrowser) {\r\n-        try {\r\n-            var opts = {};\r\n-            Object.defineProperty(opts, 'passive', ({\r\n-                get: function get () {\r\n-                  \u002F* istanbul ignore next *\u002F\r\n-                    supportsPassive = true;\r\n-                }\r\n-            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\r\n-            window.addEventListener('test-passive', null, opts);\r\n-        } catch (e) {}\r\n-    }\r\n-\r\n-    \u002F\u002F this needs to be lazy-evaled because vue may be required before\r\n-    \u002F\u002F vue-server-renderer can set VUE_ENV\r\n-    var _isServer;\r\n-    var isServerRendering = function () {\r\n-        if (_isServer === undefined) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\r\n-                \u002F\u002F detect presence of vue-server-renderer and avoid\r\n-                \u002F\u002F Webpack shimming the process\r\n-                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\r\n-            } else {\r\n-                _isServer = false;\r\n-            }\r\n-        }\r\n-        return _isServer\r\n-    };\r\n-\r\n-    \u002F\u002F detect devtools\r\n-    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function isNative (Ctor) {\r\n-        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\r\n-    }\r\n-\r\n-    var hasSymbol =\r\n-        typeof Symbol !== 'undefined' && isNative(Symbol) &&\r\n-        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\r\n-\r\n-    var _Set;\r\n-  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\r\n-    if (typeof Set !== 'undefined' && isNative(Set)) {\r\n-        \u002F\u002F use native Set when available.\r\n-        _Set = Set;\r\n-    } else {\r\n-        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\r\n-        _Set = \u002F*@__PURE__*\u002F(function () {\r\n-            function Set () {\r\n-                this.set = Object.create(null);\r\n-            }\r\n-            Set.prototype.has = function has (key) {\r\n-                return this.set[key] === true\r\n-            };\r\n-            Set.prototype.add = function add (key) {\r\n-                this.set[key] = true;\r\n-            };\r\n-            Set.prototype.clear = function clear () {\r\n-                this.set = Object.create(null);\r\n-            };\r\n-\r\n-            return Set;\r\n-        }());\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn = noop;\r\n-    var tip = noop;\r\n-    var generateComponentTrace = (noop); \u002F\u002F work around flow check\r\n-    var formatComponentName = (noop);\r\n-\r\n-    {\r\n-        var hasConsole = typeof console !== 'undefined';\r\n-        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\r\n-        var classify = function (str) { return str\r\n-            .replace(classifyRE, function (c) { return c.toUpperCase(); })\r\n-            .replace(\u002F[-_]\u002Fg, ''); };\r\n-\r\n-        warn = function (msg, vm) {\r\n-            var trace = vm ? generateComponentTrace(vm) : '';\r\n-\r\n-            if (config.warnHandler) {\r\n-                config.warnHandler.call(null, msg, vm, trace);\r\n-            } else if (hasConsole && (!config.silent)) {\r\n-                console.error((\"[Vue warn]: \" + msg + trace));\r\n-            }\r\n-        };\r\n-\r\n-        tip = function (msg, vm) {\r\n-            if (hasConsole && (!config.silent)) {\r\n-                console.warn(\"[Vue tip]: \" + msg + (\r\n-                        vm ? generateComponentTrace(vm) : ''\r\n-                    ));\r\n-            }\r\n-        };\r\n-\r\n-        formatComponentName = function (vm, includeFile) {\r\n-            if (vm.$root === vm) {\r\n-                return '\u003CRoot>'\r\n-            }\r\n-            var options = typeof vm === 'function' && vm.cid != null\r\n-                ? vm.options\r\n-                : vm._isVue\r\n-                    ? vm.$options || vm.constructor.options\r\n-                    : vm;\r\n-            var name = options.name || options._componentTag;\r\n-            var file = options.__file;\r\n-            if (!name && file) {\r\n-                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\r\n-                name = match && match[1];\r\n-            }\r\n-\r\n-            return (\r\n-                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\r\n-                (file && includeFile !== false ? (\" at \" + file) : '')\r\n-            )\r\n-        };\r\n-\r\n-        var repeat = function (str, n) {\r\n-            var res = '';\r\n-            while (n) {\r\n-                if (n % 2 === 1) { res += str; }\r\n-                if (n > 1) { str += str; }\r\n-                n >>= 1;\r\n-            }\r\n-            return res\r\n-        };\r\n-\r\n-        generateComponentTrace = function (vm) {\r\n-            if (vm._isVue && vm.$parent) {\r\n-                var tree = [];\r\n-                var currentRecursiveSequence = 0;\r\n-                while (vm) {\r\n-                    if (tree.length > 0) {\r\n-                        var last = tree[tree.length - 1];\r\n-                        if (last.constructor === vm.constructor) {\r\n-                            currentRecursiveSequence++;\r\n-                            vm = vm.$parent;\r\n-                            continue\r\n-                        } else if (currentRecursiveSequence > 0) {\r\n-                            tree[tree.length - 1] = [last, currentRecursiveSequence];\r\n-                            currentRecursiveSequence = 0;\r\n-                        }\r\n-                    }\r\n-                    tree.push(vm);\r\n-                    vm = vm.$parent;\r\n-                }\r\n-                return '\\n\\nfound in\\n\\n' + tree\r\n-                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\r\n-                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\r\n-                            : formatComponentName(vm))); })\r\n-                        .join('\\n')\r\n-            } else {\r\n-                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid = 0;\r\n-\r\n-    \u002F**\r\n-     * A dep is an observable that can have multiple\r\n-     * directives subscribing to it.\r\n-     *\u002F\r\n-    var Dep = function Dep () {\r\n-        this.id = uid++;\r\n-        this.subs = [];\r\n-    };\r\n-\r\n-    Dep.prototype.addSub = function addSub (sub) {\r\n-        this.subs.push(sub);\r\n-    };\r\n-\r\n-    Dep.prototype.removeSub = function removeSub (sub) {\r\n-        remove(this.subs, sub);\r\n-    };\r\n-\r\n-    Dep.prototype.depend = function depend () {\r\n-        if (Dep.target) {\r\n-            Dep.target.addDep(this);\r\n-        }\r\n-    };\r\n-\r\n-    Dep.prototype.notify = function notify () {\r\n-        \u002F\u002F stabilize the subscriber list first\r\n-        var subs = this.subs.slice();\r\n-        if (!config.async) {\r\n-            \u002F\u002F subs aren't sorted in scheduler if not running async\r\n-            \u002F\u002F we need to sort them now to make sure they fire in correct\r\n-            \u002F\u002F order\r\n-            subs.sort(function (a, b) { return a.id - b.id; });\r\n-        }\r\n-        for (var i = 0, l = subs.length; i \u003C l; i++) {\r\n-            subs[i].update();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F The current target watcher being evaluated.\r\n-    \u002F\u002F This is globally unique because only one watcher\r\n-    \u002F\u002F can be evaluated at a time.\r\n-    Dep.target = null;\r\n-    var targetStack = [];\r\n-\r\n-    function pushTarget (target) {\r\n-        targetStack.push(target);\r\n-        Dep.target = target;\r\n-    }\r\n-\r\n-    function popTarget () {\r\n-        targetStack.pop();\r\n-        Dep.target = targetStack[targetStack.length - 1];\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var VNode = function VNode (\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        text,\r\n-        elm,\r\n-        context,\r\n-        componentOptions,\r\n-        asyncFactory\r\n-    ) {\r\n-        this.tag = tag;\r\n-        this.data = data;\r\n-        this.children = children;\r\n-        this.text = text;\r\n-        this.elm = elm;\r\n-        this.ns = undefined;\r\n-        this.context = context;\r\n-        this.fnContext = undefined;\r\n-        this.fnOptions = undefined;\r\n-        this.fnScopeId = undefined;\r\n-        this.key = data && data.key;\r\n-        this.componentOptions = componentOptions;\r\n-        this.componentInstance = undefined;\r\n-        this.parent = undefined;\r\n-        this.raw = false;\r\n-        this.isStatic = false;\r\n-        this.isRootInsert = true;\r\n-        this.isComment = false;\r\n-        this.isCloned = false;\r\n-        this.isOnce = false;\r\n-        this.asyncFactory = asyncFactory;\r\n-        this.asyncMeta = undefined;\r\n-        this.isAsyncPlaceholder = false;\r\n-    };\r\n-\r\n-    var prototypeAccessors = { child: { configurable: true } };\r\n-\r\n-    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    prototypeAccessors.child.get = function () {\r\n-        return this.componentInstance\r\n-    };\r\n-\r\n-    Object.defineProperties( VNode.prototype, prototypeAccessors );\r\n-\r\n-    var createEmptyVNode = function (text) {\r\n-        if ( text === void 0 ) text = '';\r\n-\r\n-        var node = new VNode();\r\n-        node.text = text;\r\n-        node.isComment = true;\r\n-        return node\r\n-    };\r\n-\r\n-    function createTextVNode (val) {\r\n-        return new VNode(undefined, undefined, undefined, String(val))\r\n-    }\r\n-\r\n-    \u002F\u002F optimized shallow clone\r\n-    \u002F\u002F used for static nodes and slot nodes because they may be reused across\r\n-    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\r\n-    \u002F\u002F on their elm reference.\r\n-    function cloneVNode (vnode) {\r\n-        var cloned = new VNode(\r\n-            vnode.tag,\r\n-            vnode.data,\r\n-            \u002F\u002F #7975\r\n-            \u002F\u002F clone children array to avoid mutating original in case of cloning\r\n-            \u002F\u002F a child.\r\n-            vnode.children && vnode.children.slice(),\r\n-            vnode.text,\r\n-            vnode.elm,\r\n-            vnode.context,\r\n-            vnode.componentOptions,\r\n-            vnode.asyncFactory\r\n-        );\r\n-        cloned.ns = vnode.ns;\r\n-        cloned.isStatic = vnode.isStatic;\r\n-        cloned.key = vnode.key;\r\n-        cloned.isComment = vnode.isComment;\r\n-        cloned.fnContext = vnode.fnContext;\r\n-        cloned.fnOptions = vnode.fnOptions;\r\n-        cloned.fnScopeId = vnode.fnScopeId;\r\n-        cloned.asyncMeta = vnode.asyncMeta;\r\n-        cloned.isCloned = true;\r\n-        return cloned\r\n-    }\r\n-\r\n-  \u002F*\r\n-   * not type checking this file because flow doesn't play well with\r\n-   * dynamically accessing methods on Array prototype\r\n-   *\u002F\r\n-\r\n-    var arrayProto = Array.prototype;\r\n-    var arrayMethods = Object.create(arrayProto);\r\n-\r\n-    var methodsToPatch = [\r\n-        'push',\r\n-        'pop',\r\n-        'shift',\r\n-        'unshift',\r\n-        'splice',\r\n-        'sort',\r\n-        'reverse'\r\n-    ];\r\n-\r\n-    \u002F**\r\n-     * Intercept mutating methods and emit events\r\n-     *\u002F\r\n-    methodsToPatch.forEach(function (method) {\r\n-        \u002F\u002F cache original method\r\n-        var original = arrayProto[method];\r\n-        def(arrayMethods, method, function mutator () {\r\n-            var args = [], len = arguments.length;\r\n-            while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-            var result = original.apply(this, args);\r\n-            var ob = this.__ob__;\r\n-            var inserted;\r\n-            switch (method) {\r\n-                case 'push':\r\n-                case 'unshift':\r\n-                    inserted = args;\r\n-                    break\r\n-                case 'splice':\r\n-                    inserted = args.slice(2);\r\n-                    break\r\n-            }\r\n-            if (inserted) { ob.observeArray(inserted); }\r\n-            \u002F\u002F notify change\r\n-            ob.dep.notify();\r\n-            return result\r\n-        });\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\r\n-\r\n-    \u002F**\r\n-     * In some cases we may want to disable observation inside a component's\r\n-     * update computation.\r\n-     *\u002F\r\n-    var shouldObserve = true;\r\n-\r\n-    function toggleObserving (value) {\r\n-        shouldObserve = value;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Observer class that is attached to each observed\r\n-     * object. Once attached, the observer converts the target\r\n-     * object's property keys into getter\u002Fsetters that\r\n-     * collect dependencies and dispatch updates.\r\n-     *\u002F\r\n-    var Observer = function Observer (value) {\r\n-        this.value = value;\r\n-        this.dep = new Dep();\r\n-        this.vmCount = 0;\r\n-        def(value, '__ob__', this);\r\n-        if (Array.isArray(value)) {\r\n-            if (hasProto) {\r\n-                protoAugment(value, arrayMethods);\r\n-            } else {\r\n-                copyAugment(value, arrayMethods, arrayKeys);\r\n-            }\r\n-            this.observeArray(value);\r\n-        } else {\r\n-            this.walk(value);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Walk through all properties and convert them into\r\n-     * getter\u002Fsetters. This method should only be called when\r\n-     * value type is Object.\r\n-     *\u002F\r\n-    Observer.prototype.walk = function walk (obj) {\r\n-        var keys = Object.keys(obj);\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            defineReactive$$1(obj, keys[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Observe a list of Array items.\r\n-     *\u002F\r\n-    Observer.prototype.observeArray = function observeArray (items) {\r\n-        for (var i = 0, l = items.length; i \u003C l; i++) {\r\n-            observe(items[i]);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F\u002F helpers\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by intercepting\r\n-     * the prototype chain using __proto__\r\n-     *\u002F\r\n-    function protoAugment (target, src) {\r\n-      \u002F* eslint-disable no-proto *\u002F\r\n-        target.__proto__ = src;\r\n-      \u002F* eslint-enable no-proto *\u002F\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Augment a target Object or Array by defining\r\n-     * hidden properties.\r\n-     *\u002F\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function copyAugment (target, src, keys) {\r\n-        for (var i = 0, l = keys.length; i \u003C l; i++) {\r\n-            var key = keys[i];\r\n-            def(target, key, src[key]);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Attempt to create an observer instance for a value,\r\n-     * returns the new observer if successfully observed,\r\n-     * or the existing observer if the value already has one.\r\n-     *\u002F\r\n-    function observe (value, asRootData) {\r\n-        if (!isObject(value) || value instanceof VNode) {\r\n-            return\r\n-        }\r\n-        var ob;\r\n-        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\r\n-            ob = value.__ob__;\r\n-        } else if (\r\n-            shouldObserve &&\r\n-            !isServerRendering() &&\r\n-            (Array.isArray(value) || isPlainObject(value)) &&\r\n-            Object.isExtensible(value) &&\r\n-            !value._isVue\r\n-        ) {\r\n-            ob = new Observer(value);\r\n-        }\r\n-        if (asRootData && ob) {\r\n-            ob.vmCount++;\r\n-        }\r\n-        return ob\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Define a reactive property on an Object.\r\n-     *\u002F\r\n-    function defineReactive$$1 (\r\n-        obj,\r\n-        key,\r\n-        val,\r\n-        customSetter,\r\n-        shallow\r\n-    ) {\r\n-        var dep = new Dep();\r\n-\r\n-        var property = Object.getOwnPropertyDescriptor(obj, key);\r\n-        if (property && property.configurable === false) {\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F cater for pre-defined getter\u002Fsetters\r\n-        var getter = property && property.get;\r\n-        var setter = property && property.set;\r\n-        if ((!getter || setter) && arguments.length === 2) {\r\n-            val = obj[key];\r\n-        }\r\n-\r\n-        var childOb = !shallow && observe(val);\r\n-        Object.defineProperty(obj, key, {\r\n-            enumerable: true,\r\n-            configurable: true,\r\n-            get: function reactiveGetter () {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-                if (Dep.target) {\r\n-                    dep.depend();\r\n-                    if (childOb) {\r\n-                        childOb.dep.depend();\r\n-                        if (Array.isArray(value)) {\r\n-                            dependArray(value);\r\n-                        }\r\n-                    }\r\n-                }\r\n-                return value\r\n-            },\r\n-            set: function reactiveSetter (newVal) {\r\n-                var value = getter ? getter.call(obj) : val;\r\n-              \u002F* eslint-disable no-self-compare *\u002F\r\n-                if (newVal === value || (newVal !== newVal && value !== value)) {\r\n-                    return\r\n-                }\r\n-              \u002F* eslint-enable no-self-compare *\u002F\r\n-                if (customSetter) {\r\n-                    customSetter();\r\n-                }\r\n-                \u002F\u002F #7981: for accessor properties without setter\r\n-                if (getter && !setter) { return }\r\n-                if (setter) {\r\n-                    setter.call(obj, newVal);\r\n-                } else {\r\n-                    val = newVal;\r\n-                }\r\n-                childOb = !shallow && observe(newVal);\r\n-                dep.notify();\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Set a property on an object. Adds the new property and\r\n-     * triggers change notification if the property doesn't\r\n-     * already exist.\r\n-     *\u002F\r\n-    function set (target, key, val) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.length = Math.max(target.length, key);\r\n-            target.splice(key, 1, val);\r\n-            return val\r\n-        }\r\n-        if (key in target && !(key in Object.prototype)) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid adding reactive properties to a Vue instance or its root $data ' +\r\n-                'at runtime - declare it upfront in the data option.'\r\n-            );\r\n-            return val\r\n-        }\r\n-        if (!ob) {\r\n-            target[key] = val;\r\n-            return val\r\n-        }\r\n-        defineReactive$$1(ob.value, key, val);\r\n-        ob.dep.notify();\r\n-        return val\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Delete a property and trigger change if necessary.\r\n-     *\u002F\r\n-    function del (target, key) {\r\n-        if (isUndef(target) || isPrimitive(target)\r\n-        ) {\r\n-            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\r\n-        }\r\n-        if (Array.isArray(target) && isValidArrayIndex(key)) {\r\n-            target.splice(key, 1);\r\n-            return\r\n-        }\r\n-        var ob = (target).__ob__;\r\n-        if (target._isVue || (ob && ob.vmCount)) {\r\n-            warn(\r\n-                'Avoid deleting properties on a Vue instance or its root $data ' +\r\n-                '- just set it to null.'\r\n-            );\r\n-            return\r\n-        }\r\n-        if (!hasOwn(target, key)) {\r\n-            return\r\n-        }\r\n-        delete target[key];\r\n-        if (!ob) {\r\n-            return\r\n-        }\r\n-        ob.dep.notify();\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Collect dependencies on array elements when the array is touched, since\r\n-     * we cannot intercept array element access like property getters.\r\n-     *\u002F\r\n-    function dependArray (value) {\r\n-        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\r\n-            e = value[i];\r\n-            e && e.__ob__ && e.__ob__.dep.depend();\r\n-            if (Array.isArray(e)) {\r\n-                dependArray(e);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Option overwriting strategies are functions that handle\r\n-     * how to merge a parent option value and a child option\r\n-     * value into the final value.\r\n-     *\u002F\r\n-    var strats = config.optionMergeStrategies;\r\n-\r\n-    \u002F**\r\n-     * Options with restrictions\r\n-     *\u002F\r\n-    {\r\n-        strats.el = strats.propsData = function (parent, child, vm, key) {\r\n-            if (!vm) {\r\n-                warn(\r\n-                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\r\n-                    'creation with the `new` keyword.'\r\n-                );\r\n-            }\r\n-            return defaultStrat(parent, child)\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Helper that recursively merges two data objects together.\r\n-     *\u002F\r\n-    function mergeData (to, from) {\r\n-        if (!from) { return to }\r\n-        var key, toVal, fromVal;\r\n-\r\n-        var keys = hasSymbol\r\n-            ? Reflect.ownKeys(from)\r\n-            : Object.keys(from);\r\n-\r\n-        for (var i = 0; i \u003C keys.length; i++) {\r\n-            key = keys[i];\r\n-            \u002F\u002F in case the object is already observed...\r\n-            if (key === '__ob__') { continue }\r\n-            toVal = to[key];\r\n-            fromVal = from[key];\r\n-            if (!hasOwn(to, key)) {\r\n-                set(to, key, fromVal);\r\n-            } else if (\r\n-                toVal !== fromVal &&\r\n-                isPlainObject(toVal) &&\r\n-                isPlainObject(fromVal)\r\n-            ) {\r\n-                mergeData(toVal, fromVal);\r\n-            }\r\n-        }\r\n-        return to\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Data\r\n-     *\u002F\r\n-    function mergeDataOrFn (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            \u002F\u002F in a Vue.extend merge, both should be functions\r\n-            if (!childVal) {\r\n-                return parentVal\r\n-            }\r\n-            if (!parentVal) {\r\n-                return childVal\r\n-            }\r\n-            \u002F\u002F when parentVal & childVal are both present,\r\n-            \u002F\u002F we need to return a function that returns the\r\n-            \u002F\u002F merged result of both functions... no need to\r\n-            \u002F\u002F check if parentVal is a function here because\r\n-            \u002F\u002F it has to be a function to pass previous merges.\r\n-            return function mergedDataFn () {\r\n-                return mergeData(\r\n-                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\r\n-                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\r\n-                )\r\n-            }\r\n-        } else {\r\n-            return function mergedInstanceDataFn () {\r\n-                \u002F\u002F instance merge\r\n-                var instanceData = typeof childVal === 'function'\r\n-                    ? childVal.call(vm, vm)\r\n-                    : childVal;\r\n-                var defaultData = typeof parentVal === 'function'\r\n-                    ? parentVal.call(vm, vm)\r\n-                    : parentVal;\r\n-                if (instanceData) {\r\n-                    return mergeData(instanceData, defaultData)\r\n-                } else {\r\n-                    return defaultData\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    strats.data = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm\r\n-    ) {\r\n-        if (!vm) {\r\n-            if (childVal && typeof childVal !== 'function') {\r\n-                warn(\r\n-                    'The \"data\" option should be a function ' +\r\n-                    'that returns a per-instance value in component ' +\r\n-                    'definitions.',\r\n-                    vm\r\n-                );\r\n-\r\n-                return parentVal\r\n-            }\r\n-            return mergeDataOrFn(parentVal, childVal)\r\n-        }\r\n-\r\n-        return mergeDataOrFn(parentVal, childVal, vm)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Hooks and props are merged as arrays.\r\n-     *\u002F\r\n-    function mergeHook (\r\n-        parentVal,\r\n-        childVal\r\n-    ) {\r\n-        var res = childVal\r\n-            ? parentVal\r\n-                ? parentVal.concat(childVal)\r\n-                : Array.isArray(childVal)\r\n-                    ? childVal\r\n-                    : [childVal]\r\n-            : parentVal;\r\n-        return res\r\n-            ? dedupeHooks(res)\r\n-            : res\r\n-    }\r\n-\r\n-    function dedupeHooks (hooks) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C hooks.length; i++) {\r\n-            if (res.indexOf(hooks[i]) === -1) {\r\n-                res.push(hooks[i]);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    LIFECYCLE_HOOKS.forEach(function (hook) {\r\n-        strats[hook] = mergeHook;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Assets\r\n-     *\r\n-     * When a vm is present (instance creation), we need to do\r\n-     * a three-way merge between constructor options, instance\r\n-     * options and parent options.\r\n-     *\u002F\r\n-    function mergeAssets (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        var res = Object.create(parentVal || null);\r\n-        if (childVal) {\r\n-            assertObjectType(key, childVal, vm);\r\n-            return extend(res, childVal)\r\n-        } else {\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    ASSET_TYPES.forEach(function (type) {\r\n-        strats[type + 's'] = mergeAssets;\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Watchers.\r\n-     *\r\n-     * Watchers hashes should not overwrite one\r\n-     * another, so we merge them as arrays.\r\n-     *\u002F\r\n-    strats.watch = function (\r\n-        parentVal,\r\n-        childVal,\r\n-        vm,\r\n-        key\r\n-    ) {\r\n-        \u002F\u002F work around Firefox's Object.prototype.watch...\r\n-        if (parentVal === nativeWatch) { parentVal = undefined; }\r\n-        if (childVal === nativeWatch) { childVal = undefined; }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!childVal) { return Object.create(parentVal || null) }\r\n-        {\r\n-            assertObjectType(key, childVal, vm);\r\n-        }\r\n-        if (!parentVal) { return childVal }\r\n-        var ret = {};\r\n-        extend(ret, parentVal);\r\n-        for (var key$1 in childVal) {\r\n-            var parent = ret[key$1];\r\n-            var child = childVal[key$1];\r\n-            if (parent && !Array.isArray(parent)) {\r\n-                parent = [parent];\r\n-            }\r\n-            ret[key$1] = parent\r\n-                ? parent.concat(child)\r\n-                : Array.isArray(child) ? child : [child];\r\n-        }\r\n-        return ret\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Other object hashes.\r\n-     *\u002F\r\n-    strats.props =\r\n-        strats.methods =\r\n-            strats.inject =\r\n-                strats.computed = function (\r\n-                    parentVal,\r\n-                    childVal,\r\n-                    vm,\r\n-                    key\r\n-                ) {\r\n-                    if (childVal && \"development\" !== 'production') {\r\n-                        assertObjectType(key, childVal, vm);\r\n-                    }\r\n-                    if (!parentVal) { return childVal }\r\n-                    var ret = Object.create(null);\r\n-                    extend(ret, parentVal);\r\n-                    if (childVal) { extend(ret, childVal); }\r\n-                    return ret\r\n-                };\r\n-    strats.provide = mergeDataOrFn;\r\n-\r\n-    \u002F**\r\n-     * Default strategy.\r\n-     *\u002F\r\n-    var defaultStrat = function (parentVal, childVal) {\r\n-        return childVal === undefined\r\n-            ? parentVal\r\n-            : childVal\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Validate component names\r\n-     *\u002F\r\n-    function checkComponents (options) {\r\n-        for (var key in options.components) {\r\n-            validateComponentName(key);\r\n-        }\r\n-    }\r\n-\r\n-    function validateComponentName (name) {\r\n-        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\r\n-            warn(\r\n-                'Invalid component name: \"' + name + '\". Component names ' +\r\n-                'should conform to valid custom element name in html5 specification.'\r\n-            );\r\n-        }\r\n-        if (isBuiltInTag(name) || config.isReservedTag(name)) {\r\n-            warn(\r\n-                'Do not use built-in or reserved HTML elements as component ' +\r\n-                'id: ' + name\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Ensure all props option syntax are normalized into the\r\n-     * Object-based format.\r\n-     *\u002F\r\n-    function normalizeProps (options, vm) {\r\n-        var props = options.props;\r\n-        if (!props) { return }\r\n-        var res = {};\r\n-        var i, val, name;\r\n-        if (Array.isArray(props)) {\r\n-            i = props.length;\r\n-            while (i--) {\r\n-                val = props[i];\r\n-                if (typeof val === 'string') {\r\n-                    name = camelize(val);\r\n-                    res[name] = { type: null };\r\n-                } else {\r\n-                    warn('props must be strings when using array syntax.');\r\n-                }\r\n-            }\r\n-        } else if (isPlainObject(props)) {\r\n-            for (var key in props) {\r\n-                val = props[key];\r\n-                name = camelize(key);\r\n-                res[name] = isPlainObject(val)\r\n-                    ? val\r\n-                    : { type: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(props)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-        options.props = res;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize all injections into Object-based format\r\n-     *\u002F\r\n-    function normalizeInject (options, vm) {\r\n-        var inject = options.inject;\r\n-        if (!inject) { return }\r\n-        var normalized = options.inject = {};\r\n-        if (Array.isArray(inject)) {\r\n-            for (var i = 0; i \u003C inject.length; i++) {\r\n-                normalized[inject[i]] = { from: inject[i] };\r\n-            }\r\n-        } else if (isPlainObject(inject)) {\r\n-            for (var key in inject) {\r\n-                var val = inject[key];\r\n-                normalized[key] = isPlainObject(val)\r\n-                    ? extend({ from: key }, val)\r\n-                    : { from: val };\r\n-            }\r\n-        } else {\r\n-            warn(\r\n-                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\r\n-                \"but got \" + (toRawType(inject)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize raw function directives into object format.\r\n-     *\u002F\r\n-    function normalizeDirectives (options) {\r\n-        var dirs = options.directives;\r\n-        if (dirs) {\r\n-            for (var key in dirs) {\r\n-                var def$$1 = dirs[key];\r\n-                if (typeof def$$1 === 'function') {\r\n-                    dirs[key] = { bind: def$$1, update: def$$1 };\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function assertObjectType (name, value, vm) {\r\n-        if (!isPlainObject(value)) {\r\n-            warn(\r\n-                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\r\n-                \"but got \" + (toRawType(value)) + \".\",\r\n-                vm\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Merge two option objects into a new one.\r\n-     * Core utility used in both instantiation and inheritance.\r\n-     *\u002F\r\n-    function mergeOptions (\r\n-        parent,\r\n-        child,\r\n-        vm\r\n-    ) {\r\n-        {\r\n-            checkComponents(child);\r\n-        }\r\n-\r\n-        if (typeof child === 'function') {\r\n-            child = child.options;\r\n-        }\r\n-\r\n-        normalizeProps(child, vm);\r\n-        normalizeInject(child, vm);\r\n-        normalizeDirectives(child);\r\n-\r\n-        \u002F\u002F Apply extends and mixins on the child options,\r\n-        \u002F\u002F but only if it is a raw options object that isn't\r\n-        \u002F\u002F the result of another mergeOptions call.\r\n-        \u002F\u002F Only merged options has the _base property.\r\n-        if (!child._base) {\r\n-            if (child.extends) {\r\n-                parent = mergeOptions(parent, child.extends, vm);\r\n-            }\r\n-            if (child.mixins) {\r\n-                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\r\n-                    parent = mergeOptions(parent, child.mixins[i], vm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var options = {};\r\n-        var key;\r\n-        for (key in parent) {\r\n-            mergeField(key);\r\n-        }\r\n-        for (key in child) {\r\n-            if (!hasOwn(parent, key)) {\r\n-                mergeField(key);\r\n-            }\r\n-        }\r\n-        function mergeField (key) {\r\n-            var strat = strats[key] || defaultStrat;\r\n-            options[key] = strat(parent[key], child[key], vm, key);\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Resolve an asset.\r\n-     * This function is used because child instances need access\r\n-     * to assets defined in its ancestor chain.\r\n-     *\u002F\r\n-    function resolveAsset (\r\n-        options,\r\n-        type,\r\n-        id,\r\n-        warnMissing\r\n-    ) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (typeof id !== 'string') {\r\n-            return\r\n-        }\r\n-        var assets = options[type];\r\n-        \u002F\u002F check local registration variations first\r\n-        if (hasOwn(assets, id)) { return assets[id] }\r\n-        var camelizedId = camelize(id);\r\n-        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\r\n-        var PascalCaseId = capitalize(camelizedId);\r\n-        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\r\n-        \u002F\u002F fallback to prototype chain\r\n-        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\r\n-        if (warnMissing && !res) {\r\n-            warn(\r\n-                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\r\n-                options\r\n-            );\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function validateProp (\r\n-        key,\r\n-        propOptions,\r\n-        propsData,\r\n-        vm\r\n-    ) {\r\n-        var prop = propOptions[key];\r\n-        var absent = !hasOwn(propsData, key);\r\n-        var value = propsData[key];\r\n-        \u002F\u002F boolean casting\r\n-        var booleanIndex = getTypeIndex(Boolean, prop.type);\r\n-        if (booleanIndex > -1) {\r\n-            if (absent && !hasOwn(prop, 'default')) {\r\n-                value = false;\r\n-            } else if (value === '' || value === hyphenate(key)) {\r\n-                \u002F\u002F only cast empty string \u002F same name to boolean if\r\n-                \u002F\u002F boolean has higher priority\r\n-                var stringIndex = getTypeIndex(String, prop.type);\r\n-                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\r\n-                    value = true;\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F check default value\r\n-        if (value === undefined) {\r\n-            value = getPropDefaultValue(vm, prop, key);\r\n-            \u002F\u002F since the default value is a fresh copy,\r\n-            \u002F\u002F make sure to observe it.\r\n-            var prevShouldObserve = shouldObserve;\r\n-            toggleObserving(true);\r\n-            observe(value);\r\n-            toggleObserving(prevShouldObserve);\r\n-        }\r\n-        {\r\n-            assertProp(prop, key, value, vm, absent);\r\n-        }\r\n-        return value\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the default value of a prop.\r\n-     *\u002F\r\n-    function getPropDefaultValue (vm, prop, key) {\r\n-        \u002F\u002F no default, return undefined\r\n-        if (!hasOwn(prop, 'default')) {\r\n-            return undefined\r\n-        }\r\n-        var def = prop.default;\r\n-        \u002F\u002F warn against non-factory defaults for Object & Array\r\n-        if (isObject(def)) {\r\n-            warn(\r\n-                'Invalid default value for prop \"' + key + '\": ' +\r\n-                'Props with type Object\u002FArray must use a factory function ' +\r\n-                'to return the default value.',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F the raw prop value was also undefined from previous render,\r\n-        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\r\n-        if (vm && vm.$options.propsData &&\r\n-            vm.$options.propsData[key] === undefined &&\r\n-            vm._props[key] !== undefined\r\n-        ) {\r\n-            return vm._props[key]\r\n-        }\r\n-        \u002F\u002F call factory function for non-Function types\r\n-        \u002F\u002F a value is Function if its prototype is function even across different execution context\r\n-        return typeof def === 'function' && getType(prop.type) !== 'Function'\r\n-            ? def.call(vm)\r\n-            : def\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Assert whether a prop is valid.\r\n-     *\u002F\r\n-    function assertProp (\r\n-        prop,\r\n-        name,\r\n-        value,\r\n-        vm,\r\n-        absent\r\n-    ) {\r\n-        if (prop.required && absent) {\r\n-            warn(\r\n-                'Missing required prop: \"' + name + '\"',\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        if (value == null && !prop.required) {\r\n-            return\r\n-        }\r\n-        var type = prop.type;\r\n-        var valid = !type || type === true;\r\n-        var expectedTypes = [];\r\n-        if (type) {\r\n-            if (!Array.isArray(type)) {\r\n-                type = [type];\r\n-            }\r\n-            for (var i = 0; i \u003C type.length && !valid; i++) {\r\n-                var assertedType = assertType(value, type[i]);\r\n-                expectedTypes.push(assertedType.expectedType || '');\r\n-                valid = assertedType.valid;\r\n-            }\r\n-        }\r\n-\r\n-        if (!valid) {\r\n-            warn(\r\n-                getInvalidTypeMessage(name, value, expectedTypes),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var validator = prop.validator;\r\n-        if (validator) {\r\n-            if (!validator(value)) {\r\n-                warn(\r\n-                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\r\n-\r\n-    function assertType (value, type) {\r\n-        var valid;\r\n-        var expectedType = getType(type);\r\n-        if (simpleCheckRE.test(expectedType)) {\r\n-            var t = typeof value;\r\n-            valid = t === expectedType.toLowerCase();\r\n-            \u002F\u002F for primitive wrapper objects\r\n-            if (!valid && t === 'object') {\r\n-                valid = value instanceof type;\r\n-            }\r\n-        } else if (expectedType === 'Object') {\r\n-            valid = isPlainObject(value);\r\n-        } else if (expectedType === 'Array') {\r\n-            valid = Array.isArray(value);\r\n-        } else {\r\n-            valid = value instanceof type;\r\n-        }\r\n-        return {\r\n-            valid: valid,\r\n-            expectedType: expectedType\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Use function string name to check built-in types,\r\n-     * because a simple equality check will fail when running\r\n-     * across different vms \u002F iframes.\r\n-     *\u002F\r\n-    function getType (fn) {\r\n-        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\r\n-        return match ? match[1] : ''\r\n-    }\r\n-\r\n-    function isSameType (a, b) {\r\n-        return getType(a) === getType(b)\r\n-    }\r\n-\r\n-    function getTypeIndex (type, expectedTypes) {\r\n-        if (!Array.isArray(expectedTypes)) {\r\n-            return isSameType(expectedTypes, type) ? 0 : -1\r\n-        }\r\n-        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\r\n-            if (isSameType(expectedTypes[i], type)) {\r\n-                return i\r\n-            }\r\n-        }\r\n-        return -1\r\n-    }\r\n-\r\n-    function getInvalidTypeMessage (name, value, expectedTypes) {\r\n-        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\r\n-            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\r\n-        var expectedType = expectedTypes[0];\r\n-        var receivedType = toRawType(value);\r\n-        var expectedValue = styleValue(value, expectedType);\r\n-        var receivedValue = styleValue(value, receivedType);\r\n-        \u002F\u002F check if we need to specify expected value\r\n-        if (expectedTypes.length === 1 &&\r\n-            isExplicable(expectedType) &&\r\n-            !isBoolean(expectedType, receivedType)) {\r\n-            message += \" with value \" + expectedValue;\r\n-        }\r\n-        message += \", got \" + receivedType + \" \";\r\n-        \u002F\u002F check if we need to specify received value\r\n-        if (isExplicable(receivedType)) {\r\n-            message += \"with value \" + receivedValue + \".\";\r\n-        }\r\n-        return message\r\n-    }\r\n-\r\n-    function styleValue (value, type) {\r\n-        if (type === 'String') {\r\n-            return (\"\\\"\" + value + \"\\\"\")\r\n-        } else if (type === 'Number') {\r\n-            return (\"\" + (Number(value)))\r\n-        } else {\r\n-            return (\"\" + value)\r\n-        }\r\n-    }\r\n-\r\n-    function isExplicable (value) {\r\n-        var explicitTypes = ['string', 'number', 'boolean'];\r\n-        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\r\n-    }\r\n-\r\n-    function isBoolean () {\r\n-        var args = [], len = arguments.length;\r\n-        while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function handleError (err, vm, info) {\r\n-        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\r\n-        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\r\n-        pushTarget();\r\n-        try {\r\n-            if (vm) {\r\n-                var cur = vm;\r\n-                while ((cur = cur.$parent)) {\r\n-                    var hooks = cur.$options.errorCaptured;\r\n-                    if (hooks) {\r\n-                        for (var i = 0; i \u003C hooks.length; i++) {\r\n-                            try {\r\n-                                var capture = hooks[i].call(cur, err, vm, info) === false;\r\n-                                if (capture) { return }\r\n-                            } catch (e) {\r\n-                                globalHandleError(e, cur, 'errorCaptured hook');\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            globalHandleError(err, vm, info);\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    function invokeWithErrorHandling (\r\n-        handler,\r\n-        context,\r\n-        args,\r\n-        vm,\r\n-        info\r\n-    ) {\r\n-        var res;\r\n-        try {\r\n-            res = args ? handler.apply(context, args) : handler.call(context);\r\n-            if (res && !res._isVue && isPromise(res) && !res._handled) {\r\n-                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\r\n-                \u002F\u002F issue #9511\r\n-                \u002F\u002F avoid catch triggering multiple times when nested calls\r\n-                res._handled = true;\r\n-            }\r\n-        } catch (e) {\r\n-            handleError(e, vm, info);\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function globalHandleError (err, vm, info) {\r\n-        if (config.errorHandler) {\r\n-            try {\r\n-                return config.errorHandler.call(null, err, vm, info)\r\n-            } catch (e) {\r\n-                \u002F\u002F if the user intentionally throws the original error in the handler,\r\n-                \u002F\u002F do not log it twice\r\n-                if (e !== err) {\r\n-                    logError(e, null, 'config.errorHandler');\r\n-                }\r\n-            }\r\n-        }\r\n-        logError(err, vm, info);\r\n-    }\r\n-\r\n-    function logError (err, vm, info) {\r\n-        {\r\n-            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\r\n-            console.error(err);\r\n-        } else {\r\n-            throw err\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUsingMicroTask = false;\r\n-\r\n-    var callbacks = [];\r\n-    var pending = false;\r\n-\r\n-    function flushCallbacks () {\r\n-        pending = false;\r\n-        var copies = callbacks.slice(0);\r\n-        callbacks.length = 0;\r\n-        for (var i = 0; i \u003C copies.length; i++) {\r\n-            copies[i]();\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F Here we have async deferring wrappers using microtasks.\r\n-    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\r\n-    \u002F\u002F However, it has subtle problems when state is changed right before repaint\r\n-    \u002F\u002F (e.g. #6813, out-in transitions).\r\n-    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\r\n-    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\r\n-    \u002F\u002F So we now use microtasks everywhere, again.\r\n-    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\r\n-    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\r\n-    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\r\n-    \u002F\u002F or even between bubbling of the same event (#6566).\r\n-    var timerFunc;\r\n-\r\n-    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\r\n-    \u002F\u002F via either native Promise.then or MutationObserver.\r\n-    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\r\n-    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\r\n-    \u002F\u002F completely stops working after triggering a few times... so, if native\r\n-    \u002F\u002F Promise is available, we will use it:\r\n-  \u002F* istanbul ignore next, $flow-disable-line *\u002F\r\n-    if (typeof Promise !== 'undefined' && isNative(Promise)) {\r\n-        var p = Promise.resolve();\r\n-        timerFunc = function () {\r\n-            p.then(flushCallbacks);\r\n-            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\r\n-            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\r\n-            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\r\n-            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\r\n-            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\r\n-            if (isIOS) { setTimeout(noop); }\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\r\n-            isNative(MutationObserver) ||\r\n-            \u002F\u002F PhantomJS and iOS 7.x\r\n-            MutationObserver.toString() === '[object MutationObserverConstructor]'\r\n-        )) {\r\n-        \u002F\u002F Use MutationObserver where native Promise is not available,\r\n-        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\r\n-        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\r\n-        var counter = 1;\r\n-        var observer = new MutationObserver(flushCallbacks);\r\n-        var textNode = document.createTextNode(String(counter));\r\n-        observer.observe(textNode, {\r\n-            characterData: true\r\n-        });\r\n-        timerFunc = function () {\r\n-            counter = (counter + 1) % 2;\r\n-            textNode.data = String(counter);\r\n-        };\r\n-        isUsingMicroTask = true;\r\n-    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\r\n-        \u002F\u002F Fallback to setImmediate.\r\n-        \u002F\u002F Techinically it leverages the (macro) task queue,\r\n-        \u002F\u002F but it is still a better choice than setTimeout.\r\n-        timerFunc = function () {\r\n-            setImmediate(flushCallbacks);\r\n-        };\r\n-    } else {\r\n-        \u002F\u002F Fallback to setTimeout.\r\n-        timerFunc = function () {\r\n-            setTimeout(flushCallbacks, 0);\r\n-        };\r\n-    }\r\n-\r\n-    function nextTick (cb, ctx) {\r\n-        var _resolve;\r\n-        callbacks.push(function () {\r\n-            if (cb) {\r\n-                try {\r\n-                    cb.call(ctx);\r\n-                } catch (e) {\r\n-                    handleError(e, ctx, 'nextTick');\r\n-                }\r\n-            } else if (_resolve) {\r\n-                _resolve(ctx);\r\n-            }\r\n-        });\r\n-        if (!pending) {\r\n-            pending = true;\r\n-            timerFunc();\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        if (!cb && typeof Promise !== 'undefined') {\r\n-            return new Promise(function (resolve) {\r\n-                _resolve = resolve;\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var mark;\r\n-    var measure;\r\n-\r\n-    {\r\n-        var perf = inBrowser && window.performance;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            perf &&\r\n-            perf.mark &&\r\n-            perf.measure &&\r\n-            perf.clearMarks &&\r\n-            perf.clearMeasures\r\n-        ) {\r\n-            mark = function (tag) { return perf.mark(tag); };\r\n-            measure = function (name, startTag, endTag) {\r\n-                perf.measure(name, startTag, endTag);\r\n-                perf.clearMarks(startTag);\r\n-                perf.clearMarks(endTag);\r\n-                \u002F\u002F perf.clearMeasures(name)\r\n-            };\r\n-        }\r\n-    }\r\n-\r\n-  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\r\n-\r\n-    var initProxy;\r\n-\r\n-    {\r\n-        var allowedGlobals = makeMap(\r\n-            'Infinity,undefined,NaN,isFinite,isNaN,' +\r\n-            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\r\n-            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\r\n-            'require' \u002F\u002F for Webpack\u002FBrowserify\r\n-        );\r\n-\r\n-        var warnNonPresent = function (target, key) {\r\n-            warn(\r\n-                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\r\n-                'referenced during render. Make sure that this property is reactive, ' +\r\n-                'either in the data option, or for class-based components, by ' +\r\n-                'initializing the property. ' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var warnReservedPrefix = function (target, key) {\r\n-            warn(\r\n-                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\r\n-                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\r\n-                'prevent conflicts with Vue internals' +\r\n-                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\r\n-                target\r\n-            );\r\n-        };\r\n-\r\n-        var hasProxy =\r\n-            typeof Proxy !== 'undefined' && isNative(Proxy);\r\n-\r\n-        if (hasProxy) {\r\n-            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\r\n-            config.keyCodes = new Proxy(config.keyCodes, {\r\n-                set: function set (target, key, value) {\r\n-                    if (isBuiltInModifier(key)) {\r\n-                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\r\n-                        return false\r\n-                    } else {\r\n-                        target[key] = value;\r\n-                        return true\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        var hasHandler = {\r\n-            has: function has (target, key) {\r\n-                var has = key in target;\r\n-                var isAllowed = allowedGlobals(key) ||\r\n-                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\r\n-                if (!has && !isAllowed) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return has || !isAllowed\r\n-            }\r\n-        };\r\n-\r\n-        var getHandler = {\r\n-            get: function get (target, key) {\r\n-                if (typeof key === 'string' && !(key in target)) {\r\n-                    if (key in target.$data) { warnReservedPrefix(target, key); }\r\n-                    else { warnNonPresent(target, key); }\r\n-                }\r\n-                return target[key]\r\n-            }\r\n-        };\r\n-\r\n-        initProxy = function initProxy (vm) {\r\n-            if (hasProxy) {\r\n-                \u002F\u002F determine which proxy handler to use\r\n-                var options = vm.$options;\r\n-                var handlers = options.render && options.render._withStripped\r\n-                    ? getHandler\r\n-                    : hasHandler;\r\n-                vm._renderProxy = new Proxy(vm, handlers);\r\n-            } else {\r\n-                vm._renderProxy = vm;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var seenObjects = new _Set();\r\n-\r\n-    \u002F**\r\n-     * Recursively traverse an object to evoke all converted\r\n-     * getters, so that every nested property inside the object\r\n-     * is collected as a \"deep\" dependency.\r\n-     *\u002F\r\n-    function traverse (val) {\r\n-        _traverse(val, seenObjects);\r\n-        seenObjects.clear();\r\n-    }\r\n-\r\n-    function _traverse (val, seen) {\r\n-        var i, keys;\r\n-        var isA = Array.isArray(val);\r\n-        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\r\n-            return\r\n-        }\r\n-        if (val.__ob__) {\r\n-            var depId = val.__ob__.dep.id;\r\n-            if (seen.has(depId)) {\r\n-                return\r\n-            }\r\n-            seen.add(depId);\r\n-        }\r\n-        if (isA) {\r\n-            i = val.length;\r\n-            while (i--) { _traverse(val[i], seen); }\r\n-        } else {\r\n-            keys = Object.keys(val);\r\n-            i = keys.length;\r\n-            while (i--) { _traverse(val[keys[i]], seen); }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var normalizeEvent = cached(function (name) {\r\n-        var passive = name.charAt(0) === '&';\r\n-        name = passive ? name.slice(1) : name;\r\n-        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\r\n-        name = once$$1 ? name.slice(1) : name;\r\n-        var capture = name.charAt(0) === '!';\r\n-        name = capture ? name.slice(1) : name;\r\n-        return {\r\n-            name: name,\r\n-            once: once$$1,\r\n-            capture: capture,\r\n-            passive: passive\r\n-        }\r\n-    });\r\n-\r\n-    function createFnInvoker (fns, vm) {\r\n-        function invoker () {\r\n-            var arguments$1 = arguments;\r\n-\r\n-            var fns = invoker.fns;\r\n-            if (Array.isArray(fns)) {\r\n-                var cloned = fns.slice();\r\n-                for (var i = 0; i \u003C cloned.length; i++) {\r\n-                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F return handler return value for single handlers\r\n-                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\r\n-            }\r\n-        }\r\n-        invoker.fns = fns;\r\n-        return invoker\r\n-    }\r\n-\r\n-    function updateListeners (\r\n-        on,\r\n-        oldOn,\r\n-        add,\r\n-        remove$$1,\r\n-        createOnceHandler,\r\n-        vm\r\n-    ) {\r\n-        var name, def$$1, cur, old, event;\r\n-        for (name in on) {\r\n-            def$$1 = cur = on[name];\r\n-            old = oldOn[name];\r\n-            event = normalizeEvent(name);\r\n-            if (isUndef(cur)) {\r\n-                warn(\r\n-                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\r\n-                    vm\r\n-                );\r\n-            } else if (isUndef(old)) {\r\n-                if (isUndef(cur.fns)) {\r\n-                    cur = on[name] = createFnInvoker(cur, vm);\r\n-                }\r\n-                if (isTrue(event.once)) {\r\n-                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\r\n-                }\r\n-                add(event.name, cur, event.capture, event.passive, event.params);\r\n-            } else if (cur !== old) {\r\n-                old.fns = cur;\r\n-                on[name] = old;\r\n-            }\r\n-        }\r\n-        for (name in oldOn) {\r\n-            if (isUndef(on[name])) {\r\n-                event = normalizeEvent(name);\r\n-                remove$$1(event.name, oldOn[name], event.capture);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function mergeVNodeHook (def, hookKey, hook) {\r\n-        if (def instanceof VNode) {\r\n-            def = def.data.hook || (def.data.hook = {});\r\n-        }\r\n-        var invoker;\r\n-        var oldHook = def[hookKey];\r\n-\r\n-        function wrappedHook () {\r\n-            hook.apply(this, arguments);\r\n-            \u002F\u002F important: remove merged hook to ensure it's called only once\r\n-            \u002F\u002F and prevent memory leak\r\n-            remove(invoker.fns, wrappedHook);\r\n-        }\r\n-\r\n-        if (isUndef(oldHook)) {\r\n-            \u002F\u002F no existing hook\r\n-            invoker = createFnInvoker([wrappedHook]);\r\n-        } else {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\r\n-                \u002F\u002F already a merged invoker\r\n-                invoker = oldHook;\r\n-                invoker.fns.push(wrappedHook);\r\n-            } else {\r\n-                \u002F\u002F existing plain hook\r\n-                invoker = createFnInvoker([oldHook, wrappedHook]);\r\n-            }\r\n-        }\r\n-\r\n-        invoker.merged = true;\r\n-        def[hookKey] = invoker;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function extractPropsFromVNodeData (\r\n-        data,\r\n-        Ctor,\r\n-        tag\r\n-    ) {\r\n-        \u002F\u002F we are only extracting raw values here.\r\n-        \u002F\u002F validation and default values are handled in the child\r\n-        \u002F\u002F component itself.\r\n-        var propOptions = Ctor.options.props;\r\n-        if (isUndef(propOptions)) {\r\n-            return\r\n-        }\r\n-        var res = {};\r\n-        var attrs = data.attrs;\r\n-        var props = data.props;\r\n-        if (isDef(attrs) || isDef(props)) {\r\n-            for (var key in propOptions) {\r\n-                var altKey = hyphenate(key);\r\n-                {\r\n-                    var keyInLowerCase = key.toLowerCase();\r\n-                    if (\r\n-                        key !== keyInLowerCase &&\r\n-                        attrs && hasOwn(attrs, keyInLowerCase)\r\n-                    ) {\r\n-                        tip(\r\n-                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\r\n-                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\r\n-                            \" \\\"\" + key + \"\\\". \" +\r\n-                            \"Note that HTML attributes are case-insensitive and camelCased \" +\r\n-                            \"props need to use their kebab-case equivalents when using in-DOM \" +\r\n-                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\r\n-                        );\r\n-                    }\r\n-                }\r\n-                checkProp(res, props, key, altKey, true) ||\r\n-                checkProp(res, attrs, key, altKey, false);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkProp (\r\n-        res,\r\n-        hash,\r\n-        key,\r\n-        altKey,\r\n-        preserve\r\n-    ) {\r\n-        if (isDef(hash)) {\r\n-            if (hasOwn(hash, key)) {\r\n-                res[key] = hash[key];\r\n-                if (!preserve) {\r\n-                    delete hash[key];\r\n-                }\r\n-                return true\r\n-            } else if (hasOwn(hash, altKey)) {\r\n-                res[key] = hash[altKey];\r\n-                if (!preserve) {\r\n-                    delete hash[altKey];\r\n-                }\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F The template compiler attempts to minimize the need for normalization by\r\n-    \u002F\u002F statically analyzing the template at compile time.\r\n-    \u002F\u002F\r\n-    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\r\n-    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\r\n-    \u002F\u002F two cases where extra normalization is needed:\r\n-\r\n-    \u002F\u002F 1. When the children contains components - because a functional component\r\n-    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\r\n-    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\r\n-    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\r\n-    \u002F\u002F because functional components already normalize their own children.\r\n-    function simpleNormalizeChildren (children) {\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            if (Array.isArray(children[i])) {\r\n-                return Array.prototype.concat.apply([], children)\r\n-            }\r\n-        }\r\n-        return children\r\n-    }\r\n-\r\n-    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\r\n-    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\r\n-    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\r\n-    \u002F\u002F is needed to cater to all possible types of children values.\r\n-    function normalizeChildren (children) {\r\n-        return isPrimitive(children)\r\n-            ? [createTextVNode(children)]\r\n-            : Array.isArray(children)\r\n-                ? normalizeArrayChildren(children)\r\n-                : undefined\r\n-    }\r\n-\r\n-    function isTextNode (node) {\r\n-        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\r\n-    }\r\n-\r\n-    function normalizeArrayChildren (children, nestedIndex) {\r\n-        var res = [];\r\n-        var i, c, lastIndex, last;\r\n-        for (i = 0; i \u003C children.length; i++) {\r\n-            c = children[i];\r\n-            if (isUndef(c) || typeof c === 'boolean') { continue }\r\n-            lastIndex = res.length - 1;\r\n-            last = res[lastIndex];\r\n-            \u002F\u002F  nested\r\n-            if (Array.isArray(c)) {\r\n-                if (c.length > 0) {\r\n-                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    if (isTextNode(c[0]) && isTextNode(last)) {\r\n-                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\r\n-                        c.shift();\r\n-                    }\r\n-                    res.push.apply(res, c);\r\n-                }\r\n-            } else if (isPrimitive(c)) {\r\n-                if (isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    \u002F\u002F this is necessary for SSR hydration because text nodes are\r\n-                    \u002F\u002F essentially merged when rendered to HTML strings\r\n-                    res[lastIndex] = createTextVNode(last.text + c);\r\n-                } else if (c !== '') {\r\n-                    \u002F\u002F convert primitive to vnode\r\n-                    res.push(createTextVNode(c));\r\n-                }\r\n-            } else {\r\n-                if (isTextNode(c) && isTextNode(last)) {\r\n-                    \u002F\u002F merge adjacent text nodes\r\n-                    res[lastIndex] = createTextVNode(last.text + c.text);\r\n-                } else {\r\n-                    \u002F\u002F default key for nested array children (likely generated by v-for)\r\n-                    if (isTrue(children._isVList) &&\r\n-                        isDef(c.tag) &&\r\n-                        isUndef(c.key) &&\r\n-                        isDef(nestedIndex)) {\r\n-                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\r\n-                    }\r\n-                    res.push(c);\r\n-                }\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initProvide (vm) {\r\n-        var provide = vm.$options.provide;\r\n-        if (provide) {\r\n-            vm._provided = typeof provide === 'function'\r\n-                ? provide.call(vm)\r\n-                : provide;\r\n-        }\r\n-    }\r\n-\r\n-    function initInjections (vm) {\r\n-        var result = resolveInject(vm.$options.inject, vm);\r\n-        if (result) {\r\n-            toggleObserving(false);\r\n-            Object.keys(result).forEach(function (key) {\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                {\r\n-                    defineReactive$$1(vm, key, result[key], function () {\r\n-                        warn(\r\n-                            \"Avoid mutating an injected value directly since the changes will be \" +\r\n-                            \"overwritten whenever the provided component re-renders. \" +\r\n-                            \"injection being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    });\r\n-                }\r\n-            });\r\n-            toggleObserving(true);\r\n-        }\r\n-    }\r\n-\r\n-    function resolveInject (inject, vm) {\r\n-        if (inject) {\r\n-            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\r\n-            var result = Object.create(null);\r\n-            var keys = hasSymbol\r\n-                ? Reflect.ownKeys(inject)\r\n-                : Object.keys(inject);\r\n-\r\n-            for (var i = 0; i \u003C keys.length; i++) {\r\n-                var key = keys[i];\r\n-                \u002F\u002F #6574 in case the inject object is observed...\r\n-                if (key === '__ob__') { continue }\r\n-                var provideKey = inject[key].from;\r\n-                var source = vm;\r\n-                while (source) {\r\n-                    if (source._provided && hasOwn(source._provided, provideKey)) {\r\n-                        result[key] = source._provided[provideKey];\r\n-                        break\r\n-                    }\r\n-                    source = source.$parent;\r\n-                }\r\n-                if (!source) {\r\n-                    if ('default' in inject[key]) {\r\n-                        var provideDefault = inject[key].default;\r\n-                        result[key] = typeof provideDefault === 'function'\r\n-                            ? provideDefault.call(vm)\r\n-                            : provideDefault;\r\n-                    } else {\r\n-                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\r\n-                    }\r\n-                }\r\n-            }\r\n-            return result\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving raw children VNodes into a slot object.\r\n-     *\u002F\r\n-    function resolveSlots (\r\n-        children,\r\n-        context\r\n-    ) {\r\n-        if (!children || !children.length) {\r\n-            return {}\r\n-        }\r\n-        var slots = {};\r\n-        for (var i = 0, l = children.length; i \u003C l; i++) {\r\n-            var child = children[i];\r\n-            var data = child.data;\r\n-            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\r\n-            if (data && data.attrs && data.attrs.slot) {\r\n-                delete data.attrs.slot;\r\n-            }\r\n-            \u002F\u002F named slots should only be respected if the vnode was rendered in the\r\n-            \u002F\u002F same context.\r\n-            if ((child.context === context || child.fnContext === context) &&\r\n-                data && data.slot != null\r\n-            ) {\r\n-                var name = data.slot;\r\n-                var slot = (slots[name] || (slots[name] = []));\r\n-                if (child.tag === 'template') {\r\n-                    slot.push.apply(slot, child.children || []);\r\n-                } else {\r\n-                    slot.push(child);\r\n-                }\r\n-            } else {\r\n-                (slots.default || (slots.default = [])).push(child);\r\n-            }\r\n-        }\r\n-        \u002F\u002F ignore slots that contains only whitespace\r\n-        for (var name$1 in slots) {\r\n-            if (slots[name$1].every(isWhitespace)) {\r\n-                delete slots[name$1];\r\n-            }\r\n-        }\r\n-        return slots\r\n-    }\r\n-\r\n-    function isWhitespace (node) {\r\n-        return (node.isComment && !node.asyncFactory) || node.text === ' '\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function normalizeScopedSlots (\r\n-        slots,\r\n-        normalSlots,\r\n-        prevSlots\r\n-    ) {\r\n-        var res;\r\n-        var hasNormalSlots = Object.keys(normalSlots).length > 0;\r\n-        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\r\n-        var key = slots && slots.$key;\r\n-        if (!slots) {\r\n-            res = {};\r\n-        } else if (slots._normalized) {\r\n-            \u002F\u002F fast path 1: child component re-render only, parent did not change\r\n-            return slots._normalized\r\n-        } else if (\r\n-            isStable &&\r\n-            prevSlots &&\r\n-            prevSlots !== emptyObject &&\r\n-            key === prevSlots.$key &&\r\n-            !hasNormalSlots &&\r\n-            !prevSlots.$hasNormal\r\n-        ) {\r\n-            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\r\n-            \u002F\u002F only need to normalize once\r\n-            return prevSlots\r\n-        } else {\r\n-            res = {};\r\n-            for (var key$1 in slots) {\r\n-                if (slots[key$1] && key$1[0] !== '$') {\r\n-                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\r\n-                }\r\n-            }\r\n-        }\r\n-        \u002F\u002F expose normal slots on scopedSlots\r\n-        for (var key$2 in normalSlots) {\r\n-            if (!(key$2 in res)) {\r\n-                res[key$2] = proxyNormalSlot(normalSlots, key$2);\r\n-            }\r\n-        }\r\n-        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\r\n-        \u002F\u002F and when that is passed down this would cause an error\r\n-        if (slots && Object.isExtensible(slots)) {\r\n-            (slots)._normalized = res;\r\n-        }\r\n-        def(res, '$stable', isStable);\r\n-        def(res, '$key', key);\r\n-        def(res, '$hasNormal', hasNormalSlots);\r\n-        return res\r\n-    }\r\n-\r\n-    function normalizeScopedSlot(normalSlots, key, fn) {\r\n-        var normalized = function () {\r\n-            var res = arguments.length ? fn.apply(null, arguments) : fn({});\r\n-            res = res && typeof res === 'object' && !Array.isArray(res)\r\n-                ? [res] \u002F\u002F single vnode\r\n-                : normalizeChildren(res);\r\n-            return res && (\r\n-                res.length === 0 ||\r\n-                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\r\n-            ) ? undefined\r\n-                : res\r\n-        };\r\n-        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\r\n-        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\r\n-        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\r\n-        if (fn.proxy) {\r\n-            Object.defineProperty(normalSlots, key, {\r\n-                get: normalized,\r\n-                enumerable: true,\r\n-                configurable: true\r\n-            });\r\n-        }\r\n-        return normalized\r\n-    }\r\n-\r\n-    function proxyNormalSlot(slots, key) {\r\n-        return function () { return slots[key]; }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering v-for lists.\r\n-     *\u002F\r\n-    function renderList (\r\n-        val,\r\n-        render\r\n-    ) {\r\n-        var ret, i, l, keys, key;\r\n-        if (Array.isArray(val) || typeof val === 'string') {\r\n-            ret = new Array(val.length);\r\n-            for (i = 0, l = val.length; i \u003C l; i++) {\r\n-                ret[i] = render(val[i], i);\r\n-            }\r\n-        } else if (typeof val === 'number') {\r\n-            ret = new Array(val);\r\n-            for (i = 0; i \u003C val; i++) {\r\n-                ret[i] = render(i + 1, i);\r\n-            }\r\n-        } else if (isObject(val)) {\r\n-            if (hasSymbol && val[Symbol.iterator]) {\r\n-                ret = [];\r\n-                var iterator = val[Symbol.iterator]();\r\n-                var result = iterator.next();\r\n-                while (!result.done) {\r\n-                    ret.push(render(result.value, ret.length));\r\n-                    result = iterator.next();\r\n-                }\r\n-            } else {\r\n-                keys = Object.keys(val);\r\n-                ret = new Array(keys.length);\r\n-                for (i = 0, l = keys.length; i \u003C l; i++) {\r\n-                    key = keys[i];\r\n-                    ret[i] = render(val[key], key, i);\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isDef(ret)) {\r\n-            ret = [];\r\n-        }\r\n-        (ret)._isVList = true;\r\n-        return ret\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering \u003Cslot>\r\n-     *\u002F\r\n-    function renderSlot (\r\n-        name,\r\n-        fallback,\r\n-        props,\r\n-        bindObject\r\n-    ) {\r\n-        var scopedSlotFn = this.$scopedSlots[name];\r\n-        var nodes;\r\n-        if (scopedSlotFn) { \u002F\u002F scoped slot\r\n-            props = props || {};\r\n-            if (bindObject) {\r\n-                if (!isObject(bindObject)) {\r\n-                    warn(\r\n-                        'slot v-bind without argument expects an Object',\r\n-                        this\r\n-                    );\r\n-                }\r\n-                props = extend(extend({}, bindObject), props);\r\n-            }\r\n-            nodes = scopedSlotFn(props) || fallback;\r\n-        } else {\r\n-            nodes = this.$slots[name] || fallback;\r\n-        }\r\n-\r\n-        var target = props && props.slot;\r\n-        if (target) {\r\n-            return this.$createElement('template', { slot: target }, nodes)\r\n-        } else {\r\n-            return nodes\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for resolving filters\r\n-     *\u002F\r\n-    function resolveFilter (id) {\r\n-        return resolveAsset(this.$options, 'filters', id, true) || identity\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isKeyNotMatch (expect, actual) {\r\n-        if (Array.isArray(expect)) {\r\n-            return expect.indexOf(actual) === -1\r\n-        } else {\r\n-            return expect !== actual\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for checking keyCodes from config.\r\n-     * exposed as Vue.prototype._k\r\n-     * passing in eventKeyName as last argument separately for backwards compat\r\n-     *\u002F\r\n-    function checkKeyCodes (\r\n-        eventKeyCode,\r\n-        key,\r\n-        builtInKeyCode,\r\n-        eventKeyName,\r\n-        builtInKeyName\r\n-    ) {\r\n-        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\r\n-        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\r\n-            return isKeyNotMatch(builtInKeyName, eventKeyName)\r\n-        } else if (mappedKeyCode) {\r\n-            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\r\n-        } else if (eventKeyName) {\r\n-            return hyphenate(eventKeyName) !== key\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\r\n-     *\u002F\r\n-    function bindObjectProps (\r\n-        data,\r\n-        tag,\r\n-        value,\r\n-        asProp,\r\n-        isSync\r\n-    ) {\r\n-        if (value) {\r\n-            if (!isObject(value)) {\r\n-                warn(\r\n-                    'v-bind without argument expects an Object or Array value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                if (Array.isArray(value)) {\r\n-                    value = toObject(value);\r\n-                }\r\n-                var hash;\r\n-                var loop = function ( key ) {\r\n-                    if (\r\n-                        key === 'class' ||\r\n-                        key === 'style' ||\r\n-                        isReservedAttribute(key)\r\n-                    ) {\r\n-                        hash = data;\r\n-                    } else {\r\n-                        var type = data.attrs && data.attrs.type;\r\n-                        hash = asProp || config.mustUseProp(tag, type, key)\r\n-                            ? data.domProps || (data.domProps = {})\r\n-                            : data.attrs || (data.attrs = {});\r\n-                    }\r\n-                    var camelizedKey = camelize(key);\r\n-                    var hyphenatedKey = hyphenate(key);\r\n-                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\r\n-                        hash[key] = value[key];\r\n-\r\n-                        if (isSync) {\r\n-                            var on = data.on || (data.on = {});\r\n-                            on[(\"update:\" + key)] = function ($event) {\r\n-                                value[key] = $event;\r\n-                            };\r\n-                        }\r\n-                    }\r\n-                };\r\n-\r\n-                for (var key in value) loop( key );\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for rendering static trees.\r\n-     *\u002F\r\n-    function renderStatic (\r\n-        index,\r\n-        isInFor\r\n-    ) {\r\n-        var cached = this._staticTrees || (this._staticTrees = []);\r\n-        var tree = cached[index];\r\n-        \u002F\u002F if has already-rendered static tree and not inside v-for,\r\n-        \u002F\u002F we can reuse the same tree.\r\n-        if (tree && !isInFor) {\r\n-            return tree\r\n-        }\r\n-        \u002F\u002F otherwise, render a fresh tree.\r\n-        tree = cached[index] = this.$options.staticRenderFns[index].call(\r\n-            this._renderProxy,\r\n-            null,\r\n-            this \u002F\u002F for render fns generated for functional component templates\r\n-        );\r\n-        markStatic(tree, (\"__static__\" + index), false);\r\n-        return tree\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Runtime helper for v-once.\r\n-     * Effectively it means marking the node as static with a unique key.\r\n-     *\u002F\r\n-    function markOnce (\r\n-        tree,\r\n-        index,\r\n-        key\r\n-    ) {\r\n-        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\r\n-        return tree\r\n-    }\r\n-\r\n-    function markStatic (\r\n-        tree,\r\n-        key,\r\n-        isOnce\r\n-    ) {\r\n-        if (Array.isArray(tree)) {\r\n-            for (var i = 0; i \u003C tree.length; i++) {\r\n-                if (tree[i] && typeof tree[i] !== 'string') {\r\n-                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\r\n-                }\r\n-            }\r\n-        } else {\r\n-            markStaticNode(tree, key, isOnce);\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticNode (node, key, isOnce) {\r\n-        node.isStatic = true;\r\n-        node.key = key;\r\n-        node.isOnce = isOnce;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindObjectListeners (data, value) {\r\n-        if (value) {\r\n-            if (!isPlainObject(value)) {\r\n-                warn(\r\n-                    'v-on without argument expects an Object value',\r\n-                    this\r\n-                );\r\n-            } else {\r\n-                var on = data.on = data.on ? extend({}, data.on) : {};\r\n-                for (var key in value) {\r\n-                    var existing = on[key];\r\n-                    var ours = value[key];\r\n-                    on[key] = existing ? [].concat(existing, ours) : ours;\r\n-                }\r\n-            }\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveScopedSlots (\r\n-        fns, \u002F\u002F see flow\u002Fvnode\r\n-        res,\r\n-        \u002F\u002F the following are added in 2.6\r\n-        hasDynamicKeys,\r\n-        contentHashKey\r\n-    ) {\r\n-        res = res || { $stable: !hasDynamicKeys };\r\n-        for (var i = 0; i \u003C fns.length; i++) {\r\n-            var slot = fns[i];\r\n-            if (Array.isArray(slot)) {\r\n-                resolveScopedSlots(slot, res, hasDynamicKeys);\r\n-            } else if (slot) {\r\n-                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\r\n-                if (slot.proxy) {\r\n-                    slot.fn.proxy = true;\r\n-                }\r\n-                res[slot.key] = slot.fn;\r\n-            }\r\n-        }\r\n-        if (contentHashKey) {\r\n-            (res).$key = contentHashKey;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bindDynamicKeys (baseObj, values) {\r\n-        for (var i = 0; i \u003C values.length; i += 2) {\r\n-            var key = values[i];\r\n-            if (typeof key === 'string' && key) {\r\n-                baseObj[values[i]] = values[i + 1];\r\n-            } else if (key !== '' && key !== null) {\r\n-                \u002F\u002F null is a speical value for explicitly removing a binding\r\n-                warn(\r\n-                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\r\n-                    this\r\n-                );\r\n-            }\r\n-        }\r\n-        return baseObj\r\n-    }\r\n-\r\n-    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\r\n-    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\r\n-    \u002F\u002F to string and cause the type check to miss.\r\n-    function prependModifier (value, symbol) {\r\n-        return typeof value === 'string' ? symbol + value : value\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function installRenderHelpers (target) {\r\n-        target._o = markOnce;\r\n-        target._n = toNumber;\r\n-        target._s = toString;\r\n-        target._l = renderList;\r\n-        target._t = renderSlot;\r\n-        target._q = looseEqual;\r\n-        target._i = looseIndexOf;\r\n-        target._m = renderStatic;\r\n-        target._f = resolveFilter;\r\n-        target._k = checkKeyCodes;\r\n-        target._b = bindObjectProps;\r\n-        target._v = createTextVNode;\r\n-        target._e = createEmptyVNode;\r\n-        target._u = resolveScopedSlots;\r\n-        target._g = bindObjectListeners;\r\n-        target._d = bindDynamicKeys;\r\n-        target._p = prependModifier;\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function FunctionalRenderContext (\r\n-        data,\r\n-        props,\r\n-        children,\r\n-        parent,\r\n-        Ctor\r\n-    ) {\r\n-        var this$1 = this;\r\n-\r\n-        var options = Ctor.options;\r\n-        \u002F\u002F ensure the createElement function in functional components\r\n-        \u002F\u002F gets a unique context - this is necessary for correct named slot check\r\n-        var contextVm;\r\n-        if (hasOwn(parent, '_uid')) {\r\n-            contextVm = Object.create(parent);\r\n-            \u002F\u002F $flow-disable-line\r\n-            contextVm._original = parent;\r\n-        } else {\r\n-            \u002F\u002F the context vm passed in is a functional context as well.\r\n-            \u002F\u002F in this case we want to make sure we are able to get a hold to the\r\n-            \u002F\u002F real context instance.\r\n-            contextVm = parent;\r\n-            \u002F\u002F $flow-disable-line\r\n-            parent = parent._original;\r\n-        }\r\n-        var isCompiled = isTrue(options._compiled);\r\n-        var needNormalization = !isCompiled;\r\n-\r\n-        this.data = data;\r\n-        this.props = props;\r\n-        this.children = children;\r\n-        this.parent = parent;\r\n-        this.listeners = data.on || emptyObject;\r\n-        this.injections = resolveInject(options.inject, parent);\r\n-        this.slots = function () {\r\n-            if (!this$1.$slots) {\r\n-                normalizeScopedSlots(\r\n-                    data.scopedSlots,\r\n-                    this$1.$slots = resolveSlots(children, parent)\r\n-                );\r\n-            }\r\n-            return this$1.$slots\r\n-        };\r\n-\r\n-        Object.defineProperty(this, 'scopedSlots', ({\r\n-            enumerable: true,\r\n-            get: function get () {\r\n-                return normalizeScopedSlots(data.scopedSlots, this.slots())\r\n-            }\r\n-        }));\r\n-\r\n-        \u002F\u002F support for compiled functional template\r\n-        if (isCompiled) {\r\n-            \u002F\u002F exposing $options for renderStatic()\r\n-            this.$options = options;\r\n-            \u002F\u002F pre-resolve slots for renderSlot()\r\n-            this.$slots = this.slots();\r\n-            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\r\n-        }\r\n-\r\n-        if (options._scopeId) {\r\n-            this._c = function (a, b, c, d) {\r\n-                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\r\n-                if (vnode && !Array.isArray(vnode)) {\r\n-                    vnode.fnScopeId = options._scopeId;\r\n-                    vnode.fnContext = parent;\r\n-                }\r\n-                return vnode\r\n-            };\r\n-        } else {\r\n-            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\r\n-        }\r\n-    }\r\n-\r\n-    installRenderHelpers(FunctionalRenderContext.prototype);\r\n-\r\n-    function createFunctionalComponent (\r\n-        Ctor,\r\n-        propsData,\r\n-        data,\r\n-        contextVm,\r\n-        children\r\n-    ) {\r\n-        var options = Ctor.options;\r\n-        var props = {};\r\n-        var propOptions = options.props;\r\n-        if (isDef(propOptions)) {\r\n-            for (var key in propOptions) {\r\n-                props[key] = validateProp(key, propOptions, propsData || emptyObject);\r\n-            }\r\n-        } else {\r\n-            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\r\n-            if (isDef(data.props)) { mergeProps(props, data.props); }\r\n-        }\r\n-\r\n-        var renderContext = new FunctionalRenderContext(\r\n-            data,\r\n-            props,\r\n-            children,\r\n-            contextVm,\r\n-            Ctor\r\n-        );\r\n-\r\n-        var vnode = options.render.call(null, renderContext._c, renderContext);\r\n-\r\n-        if (vnode instanceof VNode) {\r\n-            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\r\n-        } else if (Array.isArray(vnode)) {\r\n-            var vnodes = normalizeChildren(vnode) || [];\r\n-            var res = new Array(vnodes.length);\r\n-            for (var i = 0; i \u003C vnodes.length; i++) {\r\n-                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\r\n-            }\r\n-            return res\r\n-        }\r\n-    }\r\n-\r\n-    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\r\n-        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\r\n-        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\r\n-        \u002F\u002F that should not be matched to match.\r\n-        var clone = cloneVNode(vnode);\r\n-        clone.fnContext = contextVm;\r\n-        clone.fnOptions = options;\r\n-        {\r\n-            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\r\n-        }\r\n-        if (data.slot) {\r\n-            (clone.data || (clone.data = {})).slot = data.slot;\r\n-        }\r\n-        return clone\r\n-    }\r\n-\r\n-    function mergeProps (to, from) {\r\n-        for (var key in from) {\r\n-            to[camelize(key)] = from[key];\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F inline hooks to be invoked on component VNodes during patch\r\n-    var componentVNodeHooks = {\r\n-        init: function init (vnode, hydrating) {\r\n-            if (\r\n-                vnode.componentInstance &&\r\n-                !vnode.componentInstance._isDestroyed &&\r\n-                vnode.data.keepAlive\r\n-            ) {\r\n-                \u002F\u002F kept-alive components, treat as a patch\r\n-                var mountedNode = vnode; \u002F\u002F work around flow\r\n-                componentVNodeHooks.prepatch(mountedNode, mountedNode);\r\n-            } else {\r\n-                var child = vnode.componentInstance = createComponentInstanceForVnode(\r\n-                    vnode,\r\n-                    activeInstance\r\n-                );\r\n-                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\r\n-            }\r\n-        },\r\n-\r\n-        prepatch: function prepatch (oldVnode, vnode) {\r\n-            var options = vnode.componentOptions;\r\n-            var child = vnode.componentInstance = oldVnode.componentInstance;\r\n-            updateChildComponent(\r\n-                child,\r\n-                options.propsData, \u002F\u002F updated props\r\n-                options.listeners, \u002F\u002F updated listeners\r\n-                vnode, \u002F\u002F new parent vnode\r\n-                options.children \u002F\u002F new children\r\n-            );\r\n-        },\r\n-\r\n-        insert: function insert (vnode) {\r\n-            var context = vnode.context;\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isMounted) {\r\n-                componentInstance._isMounted = true;\r\n-                callHook(componentInstance, 'mounted');\r\n-            }\r\n-            if (vnode.data.keepAlive) {\r\n-                if (context._isMounted) {\r\n-                    \u002F\u002F vue-router#1212\r\n-                    \u002F\u002F During updates, a kept-alive component's child components may\r\n-                    \u002F\u002F change, so directly walking the tree here may call activated hooks\r\n-                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\r\n-                    \u002F\u002F be processed after the whole patch process ended.\r\n-                    queueActivatedComponent(componentInstance);\r\n-                } else {\r\n-                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        destroy: function destroy (vnode) {\r\n-            var componentInstance = vnode.componentInstance;\r\n-            if (!componentInstance._isDestroyed) {\r\n-                if (!vnode.data.keepAlive) {\r\n-                    componentInstance.$destroy();\r\n-                } else {\r\n-                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var hooksToMerge = Object.keys(componentVNodeHooks);\r\n-\r\n-    function createComponent (\r\n-        Ctor,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        if (isUndef(Ctor)) {\r\n-            return\r\n-        }\r\n-\r\n-        var baseCtor = context.$options._base;\r\n-\r\n-        \u002F\u002F plain options object: turn it into a constructor\r\n-        if (isObject(Ctor)) {\r\n-            Ctor = baseCtor.extend(Ctor);\r\n-        }\r\n-\r\n-        \u002F\u002F if at this stage it's not a constructor or an async component factory,\r\n-        \u002F\u002F reject.\r\n-        if (typeof Ctor !== 'function') {\r\n-            {\r\n-                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        \u002F\u002F async component\r\n-        var asyncFactory;\r\n-        if (isUndef(Ctor.cid)) {\r\n-            asyncFactory = Ctor;\r\n-            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\r\n-            if (Ctor === undefined) {\r\n-                \u002F\u002F return a placeholder node for async component, which is rendered\r\n-                \u002F\u002F as a comment node but preserves all the raw information for the node.\r\n-                \u002F\u002F the information will be used for async server-rendering and hydration.\r\n-                return createAsyncPlaceholder(\r\n-                    asyncFactory,\r\n-                    data,\r\n-                    context,\r\n-                    children,\r\n-                    tag\r\n-                )\r\n-            }\r\n-        }\r\n-\r\n-        data = data || {};\r\n-\r\n-        \u002F\u002F resolve constructor options in case global mixins are applied after\r\n-        \u002F\u002F component constructor creation\r\n-        resolveConstructorOptions(Ctor);\r\n-\r\n-        \u002F\u002F transform component v-model data into props & events\r\n-        if (isDef(data.model)) {\r\n-            transformModel(Ctor.options, data);\r\n-        }\r\n-\r\n-        \u002F\u002F extract props\r\n-        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\r\n-\r\n-        \u002F\u002F functional component\r\n-        if (isTrue(Ctor.options.functional)) {\r\n-            return createFunctionalComponent(Ctor, propsData, data, context, children)\r\n-        }\r\n-\r\n-        \u002F\u002F extract listeners, since these needs to be treated as\r\n-        \u002F\u002F child component listeners instead of DOM listeners\r\n-        var listeners = data.on;\r\n-        \u002F\u002F replace with listeners with .native modifier\r\n-        \u002F\u002F so it gets processed during parent component patch.\r\n-        data.on = data.nativeOn;\r\n-\r\n-        if (isTrue(Ctor.options.abstract)) {\r\n-            \u002F\u002F abstract components do not keep anything\r\n-            \u002F\u002F other than props & listeners & slot\r\n-\r\n-            \u002F\u002F work around flow\r\n-            var slot = data.slot;\r\n-            data = {};\r\n-            if (slot) {\r\n-                data.slot = slot;\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F install component management hooks onto the placeholder node\r\n-        installComponentHooks(data);\r\n-\r\n-        \u002F\u002F return a placeholder vnode\r\n-        var name = Ctor.options.name || tag;\r\n-        var vnode = new VNode(\r\n-            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\r\n-            data, undefined, undefined, undefined, context,\r\n-            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\r\n-            asyncFactory\r\n-        );\r\n-\r\n-        return vnode\r\n-    }\r\n-\r\n-    function createComponentInstanceForVnode (\r\n-        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\r\n-        parent \u002F\u002F activeInstance in lifecycle state\r\n-    ) {\r\n-        var options = {\r\n-            _isComponent: true,\r\n-            _parentVnode: vnode,\r\n-            parent: parent\r\n-        };\r\n-        \u002F\u002F check inline-template render functions\r\n-        var inlineTemplate = vnode.data.inlineTemplate;\r\n-        if (isDef(inlineTemplate)) {\r\n-            options.render = inlineTemplate.render;\r\n-            options.staticRenderFns = inlineTemplate.staticRenderFns;\r\n-        }\r\n-        return new vnode.componentOptions.Ctor(options)\r\n-    }\r\n-\r\n-    function installComponentHooks (data) {\r\n-        var hooks = data.hook || (data.hook = {});\r\n-        for (var i = 0; i \u003C hooksToMerge.length; i++) {\r\n-            var key = hooksToMerge[i];\r\n-            var existing = hooks[key];\r\n-            var toMerge = componentVNodeHooks[key];\r\n-            if (existing !== toMerge && !(existing && existing._merged)) {\r\n-                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function mergeHook$1 (f1, f2) {\r\n-        var merged = function (a, b) {\r\n-            \u002F\u002F flow complains about extra args which is why we use any\r\n-            f1(a, b);\r\n-            f2(a, b);\r\n-        };\r\n-        merged._merged = true;\r\n-        return merged\r\n-    }\r\n-\r\n-    \u002F\u002F transform component v-model info (value and callback) into\r\n-    \u002F\u002F prop and event handler respectively.\r\n-    function transformModel (options, data) {\r\n-        var prop = (options.model && options.model.prop) || 'value';\r\n-        var event = (options.model && options.model.event) || 'input'\r\n-        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\r\n-        var on = data.on || (data.on = {});\r\n-        var existing = on[event];\r\n-        var callback = data.model.callback;\r\n-        if (isDef(existing)) {\r\n-            if (\r\n-                Array.isArray(existing)\r\n-                    ? existing.indexOf(callback) === -1\r\n-                    : existing !== callback\r\n-            ) {\r\n-                on[event] = [callback].concat(existing);\r\n-            }\r\n-        } else {\r\n-            on[event] = callback;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var SIMPLE_NORMALIZE = 1;\r\n-    var ALWAYS_NORMALIZE = 2;\r\n-\r\n-    \u002F\u002F wrapper function for providing a more flexible interface\r\n-    \u002F\u002F without getting yelled at by flow\r\n-    function createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType,\r\n-        alwaysNormalize\r\n-    ) {\r\n-        if (Array.isArray(data) || isPrimitive(data)) {\r\n-            normalizationType = children;\r\n-            children = data;\r\n-            data = undefined;\r\n-        }\r\n-        if (isTrue(alwaysNormalize)) {\r\n-            normalizationType = ALWAYS_NORMALIZE;\r\n-        }\r\n-        return _createElement(context, tag, data, children, normalizationType)\r\n-    }\r\n-\r\n-    function _createElement (\r\n-        context,\r\n-        tag,\r\n-        data,\r\n-        children,\r\n-        normalizationType\r\n-    ) {\r\n-        if (isDef(data) && isDef((data).__ob__)) {\r\n-            warn(\r\n-                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\r\n-                'Always create fresh vnode data objects in each render!',\r\n-                context\r\n-            );\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F object syntax in v-bind\r\n-        if (isDef(data) && isDef(data.is)) {\r\n-            tag = data.is;\r\n-        }\r\n-        if (!tag) {\r\n-            \u002F\u002F in case of component :is set to falsy value\r\n-            return createEmptyVNode()\r\n-        }\r\n-        \u002F\u002F warn against non-primitive key\r\n-        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\r\n-        ) {\r\n-            {\r\n-                warn(\r\n-                    'Avoid using non-primitive value as key, ' +\r\n-                    'use string\u002Fnumber value instead.',\r\n-                    context\r\n-                );\r\n-            }\r\n-        }\r\n-        \u002F\u002F support single function children as default scoped slot\r\n-        if (Array.isArray(children) &&\r\n-            typeof children[0] === 'function'\r\n-        ) {\r\n-            data = data || {};\r\n-            data.scopedSlots = { default: children[0] };\r\n-            children.length = 0;\r\n-        }\r\n-        if (normalizationType === ALWAYS_NORMALIZE) {\r\n-            children = normalizeChildren(children);\r\n-        } else if (normalizationType === SIMPLE_NORMALIZE) {\r\n-            children = simpleNormalizeChildren(children);\r\n-        }\r\n-        var vnode, ns;\r\n-        if (typeof tag === 'string') {\r\n-            var Ctor;\r\n-            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\r\n-            if (config.isReservedTag(tag)) {\r\n-                \u002F\u002F platform built-in elements\r\n-                vnode = new VNode(\r\n-                    config.parsePlatformTagName(tag), data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\r\n-                \u002F\u002F component\r\n-                vnode = createComponent(Ctor, data, context, children, tag);\r\n-            } else {\r\n-                \u002F\u002F unknown or unlisted namespaced elements\r\n-                \u002F\u002F check at runtime because it may get assigned a namespace when its\r\n-                \u002F\u002F parent normalizes children\r\n-                vnode = new VNode(\r\n-                    tag, data, children,\r\n-                    undefined, undefined, context\r\n-                );\r\n-            }\r\n-        } else {\r\n-            \u002F\u002F direct component options \u002F constructor\r\n-            vnode = createComponent(tag, data, context, children);\r\n-        }\r\n-        if (Array.isArray(vnode)) {\r\n-            return vnode\r\n-        } else if (isDef(vnode)) {\r\n-            if (isDef(ns)) { applyNS(vnode, ns); }\r\n-            if (isDef(data)) { registerDeepBindings(data); }\r\n-            return vnode\r\n-        } else {\r\n-            return createEmptyVNode()\r\n-        }\r\n-    }\r\n-\r\n-    function applyNS (vnode, ns, force) {\r\n-        vnode.ns = ns;\r\n-        if (vnode.tag === 'foreignObject') {\r\n-            \u002F\u002F use default namespace inside foreignObject\r\n-            ns = undefined;\r\n-            force = true;\r\n-        }\r\n-        if (isDef(vnode.children)) {\r\n-            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\r\n-                var child = vnode.children[i];\r\n-                if (isDef(child.tag) && (\r\n-                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\r\n-                    applyNS(child, ns, force);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F ref #5318\r\n-    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\r\n-    \u002F\u002F :class are used on slot nodes\r\n-    function registerDeepBindings (data) {\r\n-        if (isObject(data.style)) {\r\n-            traverse(data.style);\r\n-        }\r\n-        if (isObject(data.class)) {\r\n-            traverse(data.class);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initRender (vm) {\r\n-        vm._vnode = null; \u002F\u002F the root of the child tree\r\n-        vm._staticTrees = null; \u002F\u002F v-once cached trees\r\n-        var options = vm.$options;\r\n-        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\r\n-        var renderContext = parentVnode && parentVnode.context;\r\n-        vm.$slots = resolveSlots(options._renderChildren, renderContext);\r\n-        vm.$scopedSlots = emptyObject;\r\n-        \u002F\u002F bind the createElement fn to this instance\r\n-        \u002F\u002F so that we get proper render context inside it.\r\n-        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\r\n-        \u002F\u002F internal version is used by render functions compiled from templates\r\n-        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\r\n-        \u002F\u002F normalization is always applied for the public version, used in\r\n-        \u002F\u002F user-written render functions.\r\n-        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\r\n-\r\n-        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\r\n-        \u002F\u002F they need to be reactive so that HOCs using them are always updated\r\n-        var parentData = parentVnode && parentVnode.data;\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        {\r\n-            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\r\n-            }, true);\r\n-            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\r\n-                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\r\n-            }, true);\r\n-        }\r\n-    }\r\n-\r\n-    var currentRenderingInstance = null;\r\n-\r\n-    function renderMixin (Vue) {\r\n-        \u002F\u002F install runtime convenience helpers\r\n-        installRenderHelpers(Vue.prototype);\r\n-\r\n-        Vue.prototype.$nextTick = function (fn) {\r\n-            return nextTick(fn, this)\r\n-        };\r\n-\r\n-        Vue.prototype._render = function () {\r\n-            var vm = this;\r\n-            var ref = vm.$options;\r\n-            var render = ref.render;\r\n-            var _parentVnode = ref._parentVnode;\r\n-\r\n-            if (_parentVnode) {\r\n-                vm.$scopedSlots = normalizeScopedSlots(\r\n-                    _parentVnode.data.scopedSlots,\r\n-                    vm.$slots,\r\n-                    vm.$scopedSlots\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F set parent vnode. this allows render functions to have access\r\n-            \u002F\u002F to the data on the placeholder node.\r\n-            vm.$vnode = _parentVnode;\r\n-            \u002F\u002F render self\r\n-            var vnode;\r\n-            try {\r\n-                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\r\n-                \u002F\u002F separately from one another. Nested component's render fns are called\r\n-                \u002F\u002F when parent component is patched.\r\n-                currentRenderingInstance = vm;\r\n-                vnode = render.call(vm._renderProxy, vm.$createElement);\r\n-            } catch (e) {\r\n-                handleError(e, vm, \"render\");\r\n-                \u002F\u002F return error render result,\r\n-                \u002F\u002F or previous vnode to prevent render error causing blank component\r\n-              \u002F* istanbul ignore else *\u002F\r\n-                if (vm.$options.renderError) {\r\n-                    try {\r\n-                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\r\n-                    } catch (e) {\r\n-                        handleError(e, vm, \"renderError\");\r\n-                        vnode = vm._vnode;\r\n-                    }\r\n-                } else {\r\n-                    vnode = vm._vnode;\r\n-                }\r\n-            } finally {\r\n-                currentRenderingInstance = null;\r\n-            }\r\n-            \u002F\u002F if the returned array contains only a single node, allow it\r\n-            if (Array.isArray(vnode) && vnode.length === 1) {\r\n-                vnode = vnode[0];\r\n-            }\r\n-            \u002F\u002F return empty vnode in case the render function errored out\r\n-            if (!(vnode instanceof VNode)) {\r\n-                if (Array.isArray(vnode)) {\r\n-                    warn(\r\n-                        'Multiple root nodes returned from render function. Render function ' +\r\n-                        'should return a single root node.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                vnode = createEmptyVNode();\r\n-            }\r\n-            \u002F\u002F set parent\r\n-            vnode.parent = _parentVnode;\r\n-            return vnode\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function ensureCtor (comp, base) {\r\n-        if (\r\n-            comp.__esModule ||\r\n-            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\r\n-        ) {\r\n-            comp = comp.default;\r\n-        }\r\n-        return isObject(comp)\r\n-            ? base.extend(comp)\r\n-            : comp\r\n-    }\r\n-\r\n-    function createAsyncPlaceholder (\r\n-        factory,\r\n-        data,\r\n-        context,\r\n-        children,\r\n-        tag\r\n-    ) {\r\n-        var node = createEmptyVNode();\r\n-        node.asyncFactory = factory;\r\n-        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\r\n-        return node\r\n-    }\r\n-\r\n-    function resolveAsyncComponent (\r\n-        factory,\r\n-        baseCtor\r\n-    ) {\r\n-        if (isTrue(factory.error) && isDef(factory.errorComp)) {\r\n-            return factory.errorComp\r\n-        }\r\n-\r\n-        if (isDef(factory.resolved)) {\r\n-            return factory.resolved\r\n-        }\r\n-\r\n-        var owner = currentRenderingInstance;\r\n-        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\r\n-            \u002F\u002F already pending\r\n-            factory.owners.push(owner);\r\n-        }\r\n-\r\n-        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\r\n-            return factory.loadingComp\r\n-        }\r\n-\r\n-        if (owner && !isDef(factory.owners)) {\r\n-            var owners = factory.owners = [owner];\r\n-            var sync = true;\r\n-            var timerLoading = null;\r\n-            var timerTimeout = null\r\n-\r\n-            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\r\n-\r\n-            var forceRender = function (renderCompleted) {\r\n-                for (var i = 0, l = owners.length; i \u003C l; i++) {\r\n-                    (owners[i]).$forceUpdate();\r\n-                }\r\n-\r\n-                if (renderCompleted) {\r\n-                    owners.length = 0;\r\n-                    if (timerLoading !== null) {\r\n-                        clearTimeout(timerLoading);\r\n-                        timerLoading = null;\r\n-                    }\r\n-                    if (timerTimeout !== null) {\r\n-                        clearTimeout(timerTimeout);\r\n-                        timerTimeout = null;\r\n-                    }\r\n-                }\r\n-            };\r\n-\r\n-            var resolve = once(function (res) {\r\n-                \u002F\u002F cache resolved\r\n-                factory.resolved = ensureCtor(res, baseCtor);\r\n-                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\r\n-                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\r\n-                if (!sync) {\r\n-                    forceRender(true);\r\n-                } else {\r\n-                    owners.length = 0;\r\n-                }\r\n-            });\r\n-\r\n-            var reject = once(function (reason) {\r\n-                warn(\r\n-                    \"Failed to resolve async component: \" + (String(factory)) +\r\n-                    (reason ? (\"\\nReason: \" + reason) : '')\r\n-                );\r\n-                if (isDef(factory.errorComp)) {\r\n-                    factory.error = true;\r\n-                    forceRender(true);\r\n-                }\r\n-            });\r\n-\r\n-            var res = factory(resolve, reject);\r\n-\r\n-            if (isObject(res)) {\r\n-                if (isPromise(res)) {\r\n-                    \u002F\u002F () => Promise\r\n-                    if (isUndef(factory.resolved)) {\r\n-                        res.then(resolve, reject);\r\n-                    }\r\n-                } else if (isPromise(res.component)) {\r\n-                    res.component.then(resolve, reject);\r\n-\r\n-                    if (isDef(res.error)) {\r\n-                        factory.errorComp = ensureCtor(res.error, baseCtor);\r\n-                    }\r\n-\r\n-                    if (isDef(res.loading)) {\r\n-                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\r\n-                        if (res.delay === 0) {\r\n-                            factory.loading = true;\r\n-                        } else {\r\n-                            timerLoading = setTimeout(function () {\r\n-                                timerLoading = null;\r\n-                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\r\n-                                    factory.loading = true;\r\n-                                    forceRender(false);\r\n-                                }\r\n-                            }, res.delay || 200);\r\n-                        }\r\n-                    }\r\n-\r\n-                    if (isDef(res.timeout)) {\r\n-                        timerTimeout = setTimeout(function () {\r\n-                            timerTimeout = null;\r\n-                            if (isUndef(factory.resolved)) {\r\n-                                reject(\r\n-                                    \"timeout (\" + (res.timeout) + \"ms)\"\r\n-                                );\r\n-                            }\r\n-                        }, res.timeout);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            sync = false;\r\n-            \u002F\u002F return in case resolved synchronously\r\n-            return factory.loading\r\n-                ? factory.loadingComp\r\n-                : factory.resolved\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function isAsyncPlaceholder (node) {\r\n-        return node.isComment && node.asyncFactory\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function getFirstComponentChild (children) {\r\n-        if (Array.isArray(children)) {\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var c = children[i];\r\n-                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\r\n-                    return c\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initEvents (vm) {\r\n-        vm._events = Object.create(null);\r\n-        vm._hasHookEvent = false;\r\n-        \u002F\u002F init parent attached events\r\n-        var listeners = vm.$options._parentListeners;\r\n-        if (listeners) {\r\n-            updateComponentListeners(vm, listeners);\r\n-        }\r\n-    }\r\n-\r\n-    var target;\r\n-\r\n-    function add (event, fn) {\r\n-        target.$on(event, fn);\r\n-    }\r\n-\r\n-    function remove$1 (event, fn) {\r\n-        target.$off(event, fn);\r\n-    }\r\n-\r\n-    function createOnceHandler (event, fn) {\r\n-        var _target = target;\r\n-        return function onceHandler () {\r\n-            var res = fn.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                _target.$off(event, onceHandler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function updateComponentListeners (\r\n-        vm,\r\n-        listeners,\r\n-        oldListeners\r\n-    ) {\r\n-        target = vm;\r\n-        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\r\n-        target = undefined;\r\n-    }\r\n-\r\n-    function eventsMixin (Vue) {\r\n-        var hookRE = \u002F^hook:\u002F;\r\n-        Vue.prototype.$on = function (event, fn) {\r\n-            var vm = this;\r\n-            if (Array.isArray(event)) {\r\n-                for (var i = 0, l = event.length; i \u003C l; i++) {\r\n-                    vm.$on(event[i], fn);\r\n-                }\r\n-            } else {\r\n-                (vm._events[event] || (vm._events[event] = [])).push(fn);\r\n-                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\r\n-                \u002F\u002F instead of a hash lookup\r\n-                if (hookRE.test(event)) {\r\n-                    vm._hasHookEvent = true;\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$once = function (event, fn) {\r\n-            var vm = this;\r\n-            function on () {\r\n-                vm.$off(event, on);\r\n-                fn.apply(vm, arguments);\r\n-            }\r\n-            on.fn = fn;\r\n-            vm.$on(event, on);\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$off = function (event, fn) {\r\n-            var vm = this;\r\n-            \u002F\u002F all\r\n-            if (!arguments.length) {\r\n-                vm._events = Object.create(null);\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F array of events\r\n-            if (Array.isArray(event)) {\r\n-                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\r\n-                    vm.$off(event[i$1], fn);\r\n-                }\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific event\r\n-            var cbs = vm._events[event];\r\n-            if (!cbs) {\r\n-                return vm\r\n-            }\r\n-            if (!fn) {\r\n-                vm._events[event] = null;\r\n-                return vm\r\n-            }\r\n-            \u002F\u002F specific handler\r\n-            var cb;\r\n-            var i = cbs.length;\r\n-            while (i--) {\r\n-                cb = cbs[i];\r\n-                if (cb === fn || cb.fn === fn) {\r\n-                    cbs.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-\r\n-        Vue.prototype.$emit = function (event) {\r\n-            var vm = this;\r\n-            {\r\n-                var lowerCaseEvent = event.toLowerCase();\r\n-                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\r\n-                    tip(\r\n-                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\r\n-                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\r\n-                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\r\n-                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\r\n-                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            var cbs = vm._events[event];\r\n-            if (cbs) {\r\n-                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\r\n-                var args = toArray(arguments, 1);\r\n-                var info = \"event handler for \\\"\" + event + \"\\\"\";\r\n-                for (var i = 0, l = cbs.length; i \u003C l; i++) {\r\n-                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\r\n-                }\r\n-            }\r\n-            return vm\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var activeInstance = null;\r\n-    var isUpdatingChildComponent = false;\r\n-\r\n-    function setActiveInstance(vm) {\r\n-        var prevActiveInstance = activeInstance;\r\n-        activeInstance = vm;\r\n-        return function () {\r\n-            activeInstance = prevActiveInstance;\r\n-        }\r\n-    }\r\n-\r\n-    function initLifecycle (vm) {\r\n-        var options = vm.$options;\r\n-\r\n-        \u002F\u002F locate first non-abstract parent\r\n-        var parent = options.parent;\r\n-        if (parent && !options.abstract) {\r\n-            while (parent.$options.abstract && parent.$parent) {\r\n-                parent = parent.$parent;\r\n-            }\r\n-            parent.$children.push(vm);\r\n-        }\r\n-\r\n-        vm.$parent = parent;\r\n-        vm.$root = parent ? parent.$root : vm;\r\n-\r\n-        vm.$children = [];\r\n-        vm.$refs = {};\r\n-\r\n-        vm._watcher = null;\r\n-        vm._inactive = null;\r\n-        vm._directInactive = false;\r\n-        vm._isMounted = false;\r\n-        vm._isDestroyed = false;\r\n-        vm._isBeingDestroyed = false;\r\n-    }\r\n-\r\n-    function lifecycleMixin (Vue) {\r\n-        Vue.prototype._update = function (vnode, hydrating) {\r\n-            var vm = this;\r\n-            var prevEl = vm.$el;\r\n-            var prevVnode = vm._vnode;\r\n-            var restoreActiveInstance = setActiveInstance(vm);\r\n-            vm._vnode = vnode;\r\n-            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\r\n-            \u002F\u002F based on the rendering backend used.\r\n-            if (!prevVnode) {\r\n-                \u002F\u002F initial render\r\n-                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\r\n-            } else {\r\n-                \u002F\u002F updates\r\n-                vm.$el = vm.__patch__(prevVnode, vnode);\r\n-            }\r\n-            restoreActiveInstance();\r\n-            \u002F\u002F update __vue__ reference\r\n-            if (prevEl) {\r\n-                prevEl.__vue__ = null;\r\n-            }\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = vm;\r\n-            }\r\n-            \u002F\u002F if parent is an HOC, update its $el as well\r\n-            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\r\n-                vm.$parent.$el = vm.$el;\r\n-            }\r\n-            \u002F\u002F updated hook is called by the scheduler to ensure that children are\r\n-            \u002F\u002F updated in a parent's updated hook.\r\n-        };\r\n-\r\n-        Vue.prototype.$forceUpdate = function () {\r\n-            var vm = this;\r\n-            if (vm._watcher) {\r\n-                vm._watcher.update();\r\n-            }\r\n-        };\r\n-\r\n-        Vue.prototype.$destroy = function () {\r\n-            var vm = this;\r\n-            if (vm._isBeingDestroyed) {\r\n-                return\r\n-            }\r\n-            callHook(vm, 'beforeDestroy');\r\n-            vm._isBeingDestroyed = true;\r\n-            \u002F\u002F remove self from parent\r\n-            var parent = vm.$parent;\r\n-            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\r\n-                remove(parent.$children, vm);\r\n-            }\r\n-            \u002F\u002F teardown watchers\r\n-            if (vm._watcher) {\r\n-                vm._watcher.teardown();\r\n-            }\r\n-            var i = vm._watchers.length;\r\n-            while (i--) {\r\n-                vm._watchers[i].teardown();\r\n-            }\r\n-            \u002F\u002F remove reference from data ob\r\n-            \u002F\u002F frozen object may not have observer.\r\n-            if (vm._data.__ob__) {\r\n-                vm._data.__ob__.vmCount--;\r\n-            }\r\n-            \u002F\u002F call the last hook...\r\n-            vm._isDestroyed = true;\r\n-            \u002F\u002F invoke destroy hooks on current rendered tree\r\n-            vm.__patch__(vm._vnode, null);\r\n-            \u002F\u002F fire destroyed hook\r\n-            callHook(vm, 'destroyed');\r\n-            \u002F\u002F turn off all instance listeners.\r\n-            vm.$off();\r\n-            \u002F\u002F remove __vue__ reference\r\n-            if (vm.$el) {\r\n-                vm.$el.__vue__ = null;\r\n-            }\r\n-            \u002F\u002F release circular reference (#6759)\r\n-            if (vm.$vnode) {\r\n-                vm.$vnode.parent = null;\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function mountComponent (\r\n-        vm,\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        vm.$el = el;\r\n-        if (!vm.$options.render) {\r\n-            vm.$options.render = createEmptyVNode;\r\n-            {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\r\n-                    vm.$options.el || el) {\r\n-                    warn(\r\n-                        'You are using the runtime-only build of Vue where the template ' +\r\n-                        'compiler is not available. Either pre-compile the templates into ' +\r\n-                        'render functions, or use the compiler-included build.',\r\n-                        vm\r\n-                    );\r\n-                } else {\r\n-                    warn(\r\n-                        'Failed to mount component: template or render function not defined.',\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-        }\r\n-        callHook(vm, 'beforeMount');\r\n-\r\n-        var updateComponent;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (config.performance && mark) {\r\n-            updateComponent = function () {\r\n-                var name = vm._name;\r\n-                var id = vm._uid;\r\n-                var startTag = \"vue-perf-start:\" + id;\r\n-                var endTag = \"vue-perf-end:\" + id;\r\n-\r\n-                mark(startTag);\r\n-                var vnode = vm._render();\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" render\"), startTag, endTag);\r\n-\r\n-                mark(startTag);\r\n-                vm._update(vnode, hydrating);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + name + \" patch\"), startTag, endTag);\r\n-            };\r\n-        } else {\r\n-            updateComponent = function () {\r\n-                vm._update(vm._render(), hydrating);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\r\n-        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\r\n-        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\r\n-        new Watcher(vm, updateComponent, noop, {\r\n-            before: function before () {\r\n-                if (vm._isMounted && !vm._isDestroyed) {\r\n-                    callHook(vm, 'beforeUpdate');\r\n-                }\r\n-            }\r\n-        }, true \u002F* isRenderWatcher *\u002F);\r\n-        hydrating = false;\r\n-\r\n-        \u002F\u002F manually mounted instance, call mounted on self\r\n-        \u002F\u002F mounted is called for render-created child components in its inserted hook\r\n-        if (vm.$vnode == null) {\r\n-            vm._isMounted = true;\r\n-            callHook(vm, 'mounted');\r\n-        }\r\n-        return vm\r\n-    }\r\n-\r\n-    function updateChildComponent (\r\n-        vm,\r\n-        propsData,\r\n-        listeners,\r\n-        parentVnode,\r\n-        renderChildren\r\n-    ) {\r\n-        {\r\n-            isUpdatingChildComponent = true;\r\n-        }\r\n-\r\n-        \u002F\u002F determine whether component has slot children\r\n-        \u002F\u002F we need to do this before overwriting $options._renderChildren.\r\n-\r\n-        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\r\n-        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\r\n-        \u002F\u002F \"$stable\" marker.\r\n-        var newScopedSlots = parentVnode.data.scopedSlots;\r\n-        var oldScopedSlots = vm.$scopedSlots;\r\n-        var hasDynamicScopedSlot = !!(\r\n-            (newScopedSlots && !newScopedSlots.$stable) ||\r\n-            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\r\n-            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\r\n-        );\r\n-\r\n-        \u002F\u002F Any static slot children from the parent may have changed during parent's\r\n-        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\r\n-        \u002F\u002F update is necessary to ensure correctness.\r\n-        var needsForceUpdate = !!(\r\n-            renderChildren ||               \u002F\u002F has new static slots\r\n-            vm.$options._renderChildren ||  \u002F\u002F has old static slots\r\n-            hasDynamicScopedSlot\r\n-        );\r\n-\r\n-        vm.$options._parentVnode = parentVnode;\r\n-        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\r\n-\r\n-        if (vm._vnode) { \u002F\u002F update child tree's parent\r\n-            vm._vnode.parent = parentVnode;\r\n-        }\r\n-        vm.$options._renderChildren = renderChildren;\r\n-\r\n-        \u002F\u002F update $attrs and $listeners hash\r\n-        \u002F\u002F these are also reactive so they may trigger child update if the child\r\n-        \u002F\u002F used them during render\r\n-        vm.$attrs = parentVnode.data.attrs || emptyObject;\r\n-        vm.$listeners = listeners || emptyObject;\r\n-\r\n-        \u002F\u002F update props\r\n-        if (propsData && vm.$options.props) {\r\n-            toggleObserving(false);\r\n-            var props = vm._props;\r\n-            var propKeys = vm.$options._propKeys || [];\r\n-            for (var i = 0; i \u003C propKeys.length; i++) {\r\n-                var key = propKeys[i];\r\n-                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\r\n-                props[key] = validateProp(key, propOptions, propsData, vm);\r\n-            }\r\n-            toggleObserving(true);\r\n-            \u002F\u002F keep a copy of raw propsData\r\n-            vm.$options.propsData = propsData;\r\n-        }\r\n-\r\n-        \u002F\u002F update listeners\r\n-        listeners = listeners || emptyObject;\r\n-        var oldListeners = vm.$options._parentListeners;\r\n-        vm.$options._parentListeners = listeners;\r\n-        updateComponentListeners(vm, listeners, oldListeners);\r\n-\r\n-        \u002F\u002F resolve slots + force update if has children\r\n-        if (needsForceUpdate) {\r\n-            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\r\n-            vm.$forceUpdate();\r\n-        }\r\n-\r\n-        {\r\n-            isUpdatingChildComponent = false;\r\n-        }\r\n-    }\r\n-\r\n-    function isInInactiveTree (vm) {\r\n-        while (vm && (vm = vm.$parent)) {\r\n-            if (vm._inactive) { return true }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function activateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = false;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        } else if (vm._directInactive) {\r\n-            return\r\n-        }\r\n-        if (vm._inactive || vm._inactive === null) {\r\n-            vm._inactive = false;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                activateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'activated');\r\n-        }\r\n-    }\r\n-\r\n-    function deactivateChildComponent (vm, direct) {\r\n-        if (direct) {\r\n-            vm._directInactive = true;\r\n-            if (isInInactiveTree(vm)) {\r\n-                return\r\n-            }\r\n-        }\r\n-        if (!vm._inactive) {\r\n-            vm._inactive = true;\r\n-            for (var i = 0; i \u003C vm.$children.length; i++) {\r\n-                deactivateChildComponent(vm.$children[i]);\r\n-            }\r\n-            callHook(vm, 'deactivated');\r\n-        }\r\n-    }\r\n-\r\n-    function callHook (vm, hook) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\r\n-        pushTarget();\r\n-        var handlers = vm.$options[hook];\r\n-        var info = hook + \" hook\";\r\n-        if (handlers) {\r\n-            for (var i = 0, j = handlers.length; i \u003C j; i++) {\r\n-                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\r\n-            }\r\n-        }\r\n-        if (vm._hasHookEvent) {\r\n-            vm.$emit('hook:' + hook);\r\n-        }\r\n-        popTarget();\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var MAX_UPDATE_COUNT = 100;\r\n-\r\n-    var queue = [];\r\n-    var activatedChildren = [];\r\n-    var has = {};\r\n-    var circular = {};\r\n-    var waiting = false;\r\n-    var flushing = false;\r\n-    var index = 0;\r\n-\r\n-    \u002F**\r\n-     * Reset the scheduler's state.\r\n-     *\u002F\r\n-    function resetSchedulerState () {\r\n-        index = queue.length = activatedChildren.length = 0;\r\n-        has = {};\r\n-        {\r\n-            circular = {};\r\n-        }\r\n-        waiting = flushing = false;\r\n-    }\r\n-\r\n-    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\r\n-    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\r\n-    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\r\n-    \u002F\u002F every time the scheduler flushes and use that for all event listeners\r\n-    \u002F\u002F attached during that flush.\r\n-    var currentFlushTimestamp = 0;\r\n-\r\n-    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\r\n-    var getNow = Date.now;\r\n-\r\n-    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\r\n-    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\r\n-    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\r\n-    \u002F\u002F same timestamp type when saving the flush timestamp.\r\n-    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\r\n-    \u002F\u002F implementations (#9632)\r\n-    if (inBrowser && !isIE) {\r\n-        var performance = window.performance;\r\n-        if (\r\n-            performance &&\r\n-            typeof performance.now === 'function' &&\r\n-            getNow() > document.createEvent('Event').timeStamp\r\n-        ) {\r\n-            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\r\n-            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\r\n-            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\r\n-            \u002F\u002F well.\r\n-            getNow = function () { return performance.now(); };\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Flush both queues and run the watchers.\r\n-     *\u002F\r\n-    function flushSchedulerQueue () {\r\n-        currentFlushTimestamp = getNow();\r\n-        flushing = true;\r\n-        var watcher, id;\r\n-\r\n-        \u002F\u002F Sort queue before flush.\r\n-        \u002F\u002F This ensures that:\r\n-        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\r\n-        \u002F\u002F    created before the child)\r\n-        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\r\n-        \u002F\u002F    user watchers are created before the render watcher)\r\n-        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\r\n-        \u002F\u002F    its watchers can be skipped.\r\n-        queue.sort(function (a, b) { return a.id - b.id; });\r\n-\r\n-        \u002F\u002F do not cache length because more watchers might be pushed\r\n-        \u002F\u002F as we run existing watchers\r\n-        for (index = 0; index \u003C queue.length; index++) {\r\n-            watcher = queue[index];\r\n-            if (watcher.before) {\r\n-                watcher.before();\r\n-            }\r\n-            id = watcher.id;\r\n-            has[id] = null;\r\n-            watcher.run();\r\n-            \u002F\u002F in dev build, check and stop circular updates.\r\n-            if (has[id] != null) {\r\n-                circular[id] = (circular[id] || 0) + 1;\r\n-                if (circular[id] > MAX_UPDATE_COUNT) {\r\n-                    warn(\r\n-                        'You may have an infinite update loop ' + (\r\n-                            watcher.user\r\n-                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\r\n-                                : \"in a component render function.\"\r\n-                        ),\r\n-                        watcher.vm\r\n-                    );\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F keep copies of post queues before resetting state\r\n-        var activatedQueue = activatedChildren.slice();\r\n-        var updatedQueue = queue.slice();\r\n-\r\n-        resetSchedulerState();\r\n-\r\n-        \u002F\u002F call component updated and activated hooks\r\n-        callActivatedHooks(activatedQueue);\r\n-        callUpdatedHooks(updatedQueue);\r\n-\r\n-        \u002F\u002F devtool hook\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (devtools && config.devtools) {\r\n-            devtools.emit('flush');\r\n-        }\r\n-    }\r\n-\r\n-    function callUpdatedHooks (queue) {\r\n-        var i = queue.length;\r\n-        while (i--) {\r\n-            var watcher = queue[i];\r\n-            var vm = watcher.vm;\r\n-            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\r\n-                callHook(vm, 'updated');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Queue a kept-alive component that was activated during patch.\r\n-     * The queue will be processed after the entire tree has been patched.\r\n-     *\u002F\r\n-    function queueActivatedComponent (vm) {\r\n-        \u002F\u002F setting _inactive to false here so that a render function can\r\n-        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\r\n-        vm._inactive = false;\r\n-        activatedChildren.push(vm);\r\n-    }\r\n-\r\n-    function callActivatedHooks (queue) {\r\n-        for (var i = 0; i \u003C queue.length; i++) {\r\n-            queue[i]._inactive = true;\r\n-            activateChildComponent(queue[i], true \u002F* true *\u002F);\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Push a watcher into the watcher queue.\r\n-     * Jobs with duplicate IDs will be skipped unless it's\r\n-     * pushed when the queue is being flushed.\r\n-     *\u002F\r\n-    function queueWatcher (watcher) {\r\n-        var id = watcher.id;\r\n-        if (has[id] == null) {\r\n-            has[id] = true;\r\n-            if (!flushing) {\r\n-                queue.push(watcher);\r\n-            } else {\r\n-                \u002F\u002F if already flushing, splice the watcher based on its id\r\n-                \u002F\u002F if already past its id, it will be run next immediately.\r\n-                var i = queue.length - 1;\r\n-                while (i > index && queue[i].id > watcher.id) {\r\n-                    i--;\r\n-                }\r\n-                queue.splice(i + 1, 0, watcher);\r\n-            }\r\n-            \u002F\u002F queue the flush\r\n-            if (!waiting) {\r\n-                waiting = true;\r\n-\r\n-                if (!config.async) {\r\n-                    flushSchedulerQueue();\r\n-                    return\r\n-                }\r\n-                nextTick(flushSchedulerQueue);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    var uid$2 = 0;\r\n-\r\n-    \u002F**\r\n-     * A watcher parses an expression, collects dependencies,\r\n-     * and fires callback when the expression value changes.\r\n-     * This is used for both the $watch() api and directives.\r\n-     *\u002F\r\n-    var Watcher = function Watcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        cb,\r\n-        options,\r\n-        isRenderWatcher\r\n-    ) {\r\n-        this.vm = vm;\r\n-        if (isRenderWatcher) {\r\n-            vm._watcher = this;\r\n-        }\r\n-        vm._watchers.push(this);\r\n-        \u002F\u002F options\r\n-        if (options) {\r\n-            this.deep = !!options.deep;\r\n-            this.user = !!options.user;\r\n-            this.lazy = !!options.lazy;\r\n-            this.sync = !!options.sync;\r\n-            this.before = options.before;\r\n-        } else {\r\n-            this.deep = this.user = this.lazy = this.sync = false;\r\n-        }\r\n-        this.cb = cb;\r\n-        this.id = ++uid$2; \u002F\u002F uid for batching\r\n-        this.active = true;\r\n-        this.dirty = this.lazy; \u002F\u002F for lazy watchers\r\n-        this.deps = [];\r\n-        this.newDeps = [];\r\n-        this.depIds = new _Set();\r\n-        this.newDepIds = new _Set();\r\n-        this.expression = expOrFn.toString();\r\n-        \u002F\u002F parse expression for getter\r\n-        if (typeof expOrFn === 'function') {\r\n-            this.getter = expOrFn;\r\n-        } else {\r\n-            this.getter = parsePath(expOrFn);\r\n-            if (!this.getter) {\r\n-                this.getter = noop;\r\n-                warn(\r\n-                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\r\n-                    'Watcher only accepts simple dot-delimited paths. ' +\r\n-                    'For full control, use a function instead.',\r\n-                    vm\r\n-                );\r\n-            }\r\n-        }\r\n-        this.value = this.lazy\r\n-            ? undefined\r\n-            : this.get();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the getter, and re-collect dependencies.\r\n-     *\u002F\r\n-    Watcher.prototype.get = function get () {\r\n-        pushTarget(this);\r\n-        var value;\r\n-        var vm = this.vm;\r\n-        try {\r\n-            value = this.getter.call(vm, vm);\r\n-        } catch (e) {\r\n-            if (this.user) {\r\n-                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-            } else {\r\n-                throw e\r\n-            }\r\n-        } finally {\r\n-            \u002F\u002F \"touch\" every property so they are all tracked as\r\n-            \u002F\u002F dependencies for deep watching\r\n-            if (this.deep) {\r\n-                traverse(value);\r\n-            }\r\n-            popTarget();\r\n-            this.cleanupDeps();\r\n-        }\r\n-        return value\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Add a dependency to this directive.\r\n-     *\u002F\r\n-    Watcher.prototype.addDep = function addDep (dep) {\r\n-        var id = dep.id;\r\n-        if (!this.newDepIds.has(id)) {\r\n-            this.newDepIds.add(id);\r\n-            this.newDeps.push(dep);\r\n-            if (!this.depIds.has(id)) {\r\n-                dep.addSub(this);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Clean up for dependency collection.\r\n-     *\u002F\r\n-    Watcher.prototype.cleanupDeps = function cleanupDeps () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            var dep = this.deps[i];\r\n-            if (!this.newDepIds.has(dep.id)) {\r\n-                dep.removeSub(this);\r\n-            }\r\n-        }\r\n-        var tmp = this.depIds;\r\n-        this.depIds = this.newDepIds;\r\n-        this.newDepIds = tmp;\r\n-        this.newDepIds.clear();\r\n-        tmp = this.deps;\r\n-        this.deps = this.newDeps;\r\n-        this.newDeps = tmp;\r\n-        this.newDeps.length = 0;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Subscriber interface.\r\n-     * Will be called when a dependency changes.\r\n-     *\u002F\r\n-    Watcher.prototype.update = function update () {\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (this.lazy) {\r\n-            this.dirty = true;\r\n-        } else if (this.sync) {\r\n-            this.run();\r\n-        } else {\r\n-            queueWatcher(this);\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Scheduler job interface.\r\n-     * Will be called by the scheduler.\r\n-     *\u002F\r\n-    Watcher.prototype.run = function run () {\r\n-        if (this.active) {\r\n-            var value = this.get();\r\n-            if (\r\n-                value !== this.value ||\r\n-                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\r\n-                \u002F\u002F when the value is the same, because the value may\r\n-                \u002F\u002F have mutated.\r\n-                isObject(value) ||\r\n-                this.deep\r\n-            ) {\r\n-                \u002F\u002F set new value\r\n-                var oldValue = this.value;\r\n-                this.value = value;\r\n-                if (this.user) {\r\n-                    try {\r\n-                        this.cb.call(this.vm, value, oldValue);\r\n-                    } catch (e) {\r\n-                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\r\n-                    }\r\n-                } else {\r\n-                    this.cb.call(this.vm, value, oldValue);\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Evaluate the value of the watcher.\r\n-     * This only gets called for lazy watchers.\r\n-     *\u002F\r\n-    Watcher.prototype.evaluate = function evaluate () {\r\n-        this.value = this.get();\r\n-        this.dirty = false;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Depend on all deps collected by this watcher.\r\n-     *\u002F\r\n-    Watcher.prototype.depend = function depend () {\r\n-        var i = this.deps.length;\r\n-        while (i--) {\r\n-            this.deps[i].depend();\r\n-        }\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Remove self from all dependencies' subscriber list.\r\n-     *\u002F\r\n-    Watcher.prototype.teardown = function teardown () {\r\n-        if (this.active) {\r\n-            \u002F\u002F remove self from vm's watcher list\r\n-            \u002F\u002F this is a somewhat expensive operation so we skip it\r\n-            \u002F\u002F if the vm is being destroyed.\r\n-            if (!this.vm._isBeingDestroyed) {\r\n-                remove(this.vm._watchers, this);\r\n-            }\r\n-            var i = this.deps.length;\r\n-            while (i--) {\r\n-                this.deps[i].removeSub(this);\r\n-            }\r\n-            this.active = false;\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var sharedPropertyDefinition = {\r\n-        enumerable: true,\r\n-        configurable: true,\r\n-        get: noop,\r\n-        set: noop\r\n-    };\r\n-\r\n-    function proxy (target, sourceKey, key) {\r\n-        sharedPropertyDefinition.get = function proxyGetter () {\r\n-            return this[sourceKey][key]\r\n-        };\r\n-        sharedPropertyDefinition.set = function proxySetter (val) {\r\n-            this[sourceKey][key] = val;\r\n-        };\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function initState (vm) {\r\n-        vm._watchers = [];\r\n-        var opts = vm.$options;\r\n-        if (opts.props) { initProps(vm, opts.props); }\r\n-        if (opts.methods) { initMethods(vm, opts.methods); }\r\n-        if (opts.data) {\r\n-            initData(vm);\r\n-        } else {\r\n-            observe(vm._data = {}, true \u002F* asRootData *\u002F);\r\n-        }\r\n-        if (opts.computed) { initComputed(vm, opts.computed); }\r\n-        if (opts.watch && opts.watch !== nativeWatch) {\r\n-            initWatch(vm, opts.watch);\r\n-        }\r\n-    }\r\n-\r\n-    function initProps (vm, propsOptions) {\r\n-        var propsData = vm.$options.propsData || {};\r\n-        var props = vm._props = {};\r\n-        \u002F\u002F cache prop keys so that future props updates can iterate using Array\r\n-        \u002F\u002F instead of dynamic object key enumeration.\r\n-        var keys = vm.$options._propKeys = [];\r\n-        var isRoot = !vm.$parent;\r\n-        \u002F\u002F root instance props should be converted\r\n-        if (!isRoot) {\r\n-            toggleObserving(false);\r\n-        }\r\n-        var loop = function ( key ) {\r\n-            keys.push(key);\r\n-            var value = validateProp(key, propsOptions, propsData, vm);\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                var hyphenatedKey = hyphenate(key);\r\n-                if (isReservedAttribute(hyphenatedKey) ||\r\n-                    config.isReservedAttr(hyphenatedKey)) {\r\n-                    warn(\r\n-                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                defineReactive$$1(props, key, value, function () {\r\n-                    if (!isRoot && !isUpdatingChildComponent) {\r\n-                        warn(\r\n-                            \"Avoid mutating a prop directly since the value will be \" +\r\n-                            \"overwritten whenever the parent component re-renders. \" +\r\n-                            \"Instead, use a data or computed property based on the prop's \" +\r\n-                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                });\r\n-            }\r\n-            \u002F\u002F static props are already proxied on the component's prototype\r\n-            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\r\n-            \u002F\u002F instantiation here.\r\n-            if (!(key in vm)) {\r\n-                proxy(vm, \"_props\", key);\r\n-            }\r\n-        };\r\n-\r\n-        for (var key in propsOptions) loop( key );\r\n-        toggleObserving(true);\r\n-    }\r\n-\r\n-    function initData (vm) {\r\n-        var data = vm.$options.data;\r\n-        data = vm._data = typeof data === 'function'\r\n-            ? getData(data, vm)\r\n-            : data || {};\r\n-        if (!isPlainObject(data)) {\r\n-            data = {};\r\n-            warn(\r\n-                'data functions should return an object:\\n' +\r\n-                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\r\n-                vm\r\n-            );\r\n-        }\r\n-        \u002F\u002F proxy data on instance\r\n-        var keys = Object.keys(data);\r\n-        var props = vm.$options.props;\r\n-        var methods = vm.$options.methods;\r\n-        var i = keys.length;\r\n-        while (i--) {\r\n-            var key = keys[i];\r\n-            {\r\n-                if (methods && hasOwn(methods, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (props && hasOwn(props, key)) {\r\n-                warn(\r\n-                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\r\n-                    \"Use prop default value instead.\",\r\n-                    vm\r\n-                );\r\n-            } else if (!isReserved(key)) {\r\n-                proxy(vm, \"_data\", key);\r\n-            }\r\n-        }\r\n-        \u002F\u002F observe data\r\n-        observe(data, true \u002F* asRootData *\u002F);\r\n-    }\r\n-\r\n-    function getData (data, vm) {\r\n-        \u002F\u002F #7573 disable dep collection when invoking data getters\r\n-        pushTarget();\r\n-        try {\r\n-            return data.call(vm, vm)\r\n-        } catch (e) {\r\n-            handleError(e, vm, \"data()\");\r\n-            return {}\r\n-        } finally {\r\n-            popTarget();\r\n-        }\r\n-    }\r\n-\r\n-    var computedWatcherOptions = { lazy: true };\r\n-\r\n-    function initComputed (vm, computed) {\r\n-        \u002F\u002F $flow-disable-line\r\n-        var watchers = vm._computedWatchers = Object.create(null);\r\n-        \u002F\u002F computed properties are just getters during SSR\r\n-        var isSSR = isServerRendering();\r\n-\r\n-        for (var key in computed) {\r\n-            var userDef = computed[key];\r\n-            var getter = typeof userDef === 'function' ? userDef : userDef.get;\r\n-            if (getter == null) {\r\n-                warn(\r\n-                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\r\n-                    vm\r\n-                );\r\n-            }\r\n-\r\n-            if (!isSSR) {\r\n-                \u002F\u002F create internal watcher for the computed property.\r\n-                watchers[key] = new Watcher(\r\n-                    vm,\r\n-                    getter || noop,\r\n-                    noop,\r\n-                    computedWatcherOptions\r\n-                );\r\n-            }\r\n-\r\n-            \u002F\u002F component-defined computed properties are already defined on the\r\n-            \u002F\u002F component prototype. We only need to define computed properties defined\r\n-            \u002F\u002F at instantiation here.\r\n-            if (!(key in vm)) {\r\n-                defineComputed(vm, key, userDef);\r\n-            } else {\r\n-                if (key in vm.$data) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\r\n-                } else if (vm.$options.props && key in vm.$options.props) {\r\n-                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function defineComputed (\r\n-        target,\r\n-        key,\r\n-        userDef\r\n-    ) {\r\n-        var shouldCache = !isServerRendering();\r\n-        if (typeof userDef === 'function') {\r\n-            sharedPropertyDefinition.get = shouldCache\r\n-                ? createComputedGetter(key)\r\n-                : createGetterInvoker(userDef);\r\n-            sharedPropertyDefinition.set = noop;\r\n-        } else {\r\n-            sharedPropertyDefinition.get = userDef.get\r\n-                ? shouldCache && userDef.cache !== false\r\n-                    ? createComputedGetter(key)\r\n-                    : createGetterInvoker(userDef.get)\r\n-                : noop;\r\n-            sharedPropertyDefinition.set = userDef.set || noop;\r\n-        }\r\n-        if (sharedPropertyDefinition.set === noop) {\r\n-            sharedPropertyDefinition.set = function () {\r\n-                warn(\r\n-                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\r\n-                    this\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(target, key, sharedPropertyDefinition);\r\n-    }\r\n-\r\n-    function createComputedGetter (key) {\r\n-        return function computedGetter () {\r\n-            var watcher = this._computedWatchers && this._computedWatchers[key];\r\n-            if (watcher) {\r\n-                if (watcher.dirty) {\r\n-                    watcher.evaluate();\r\n-                }\r\n-                if (Dep.target) {\r\n-                    watcher.depend();\r\n-                }\r\n-                return watcher.value\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createGetterInvoker(fn) {\r\n-        return function computedGetter () {\r\n-            return fn.call(this, this)\r\n-        }\r\n-    }\r\n-\r\n-    function initMethods (vm, methods) {\r\n-        var props = vm.$options.props;\r\n-        for (var key in methods) {\r\n-            {\r\n-                if (typeof methods[key] !== 'function') {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\r\n-                        \"Did you reference the function correctly?\",\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if (props && hasOwn(props, key)) {\r\n-                    warn(\r\n-                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-                if ((key in vm) && isReserved(key)) {\r\n-                    warn(\r\n-                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\r\n-                        \"Avoid defining component methods that start with _ or $.\"\r\n-                    );\r\n-                }\r\n-            }\r\n-            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\r\n-        }\r\n-    }\r\n-\r\n-    function initWatch (vm, watch) {\r\n-        for (var key in watch) {\r\n-            var handler = watch[key];\r\n-            if (Array.isArray(handler)) {\r\n-                for (var i = 0; i \u003C handler.length; i++) {\r\n-                    createWatcher(vm, key, handler[i]);\r\n-                }\r\n-            } else {\r\n-                createWatcher(vm, key, handler);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function createWatcher (\r\n-        vm,\r\n-        expOrFn,\r\n-        handler,\r\n-        options\r\n-    ) {\r\n-        if (isPlainObject(handler)) {\r\n-            options = handler;\r\n-            handler = handler.handler;\r\n-        }\r\n-        if (typeof handler === 'string') {\r\n-            handler = vm[handler];\r\n-        }\r\n-        return vm.$watch(expOrFn, handler, options)\r\n-    }\r\n-\r\n-    function stateMixin (Vue) {\r\n-        \u002F\u002F flow somehow has problems with directly declared definition object\r\n-        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\r\n-        \u002F\u002F the object here.\r\n-        var dataDef = {};\r\n-        dataDef.get = function () { return this._data };\r\n-        var propsDef = {};\r\n-        propsDef.get = function () { return this._props };\r\n-        {\r\n-            dataDef.set = function () {\r\n-                warn(\r\n-                    'Avoid replacing instance root $data. ' +\r\n-                    'Use nested data properties instead.',\r\n-                    this\r\n-                );\r\n-            };\r\n-            propsDef.set = function () {\r\n-                warn(\"$props is readonly.\", this);\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue.prototype, '$data', dataDef);\r\n-        Object.defineProperty(Vue.prototype, '$props', propsDef);\r\n-\r\n-        Vue.prototype.$set = set;\r\n-        Vue.prototype.$delete = del;\r\n-\r\n-        Vue.prototype.$watch = function (\r\n-            expOrFn,\r\n-            cb,\r\n-            options\r\n-        ) {\r\n-            var vm = this;\r\n-            if (isPlainObject(cb)) {\r\n-                return createWatcher(vm, expOrFn, cb, options)\r\n-            }\r\n-            options = options || {};\r\n-            options.user = true;\r\n-            var watcher = new Watcher(vm, expOrFn, cb, options);\r\n-            if (options.immediate) {\r\n-                try {\r\n-                    cb.call(vm, watcher.value);\r\n-                } catch (error) {\r\n-                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\r\n-                }\r\n-            }\r\n-            return function unwatchFn () {\r\n-                watcher.teardown();\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var uid$3 = 0;\r\n-\r\n-    function initMixin (Vue) {\r\n-        Vue.prototype._init = function (options) {\r\n-            var vm = this;\r\n-            \u002F\u002F a uid\r\n-            vm._uid = uid$3++;\r\n-\r\n-            var startTag, endTag;\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                startTag = \"vue-perf-start:\" + (vm._uid);\r\n-                endTag = \"vue-perf-end:\" + (vm._uid);\r\n-                mark(startTag);\r\n-            }\r\n-\r\n-            \u002F\u002F a flag to avoid this being observed\r\n-            vm._isVue = true;\r\n-            \u002F\u002F merge options\r\n-            if (options && options._isComponent) {\r\n-                \u002F\u002F optimize internal component instantiation\r\n-                \u002F\u002F since dynamic options merging is pretty slow, and none of the\r\n-                \u002F\u002F internal component options needs special treatment.\r\n-                initInternalComponent(vm, options);\r\n-            } else {\r\n-                vm.$options = mergeOptions(\r\n-                    resolveConstructorOptions(vm.constructor),\r\n-                    options || {},\r\n-                    vm\r\n-                );\r\n-            }\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            {\r\n-                initProxy(vm);\r\n-            }\r\n-            \u002F\u002F expose real self\r\n-            vm._self = vm;\r\n-            initLifecycle(vm);\r\n-            initEvents(vm);\r\n-            initRender(vm);\r\n-            callHook(vm, 'beforeCreate');\r\n-            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\r\n-            initState(vm);\r\n-            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\r\n-            callHook(vm, 'created');\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (config.performance && mark) {\r\n-                vm._name = formatComponentName(vm, false);\r\n-                mark(endTag);\r\n-                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\r\n-            }\r\n-\r\n-            if (vm.$options.el) {\r\n-                vm.$mount(vm.$options.el);\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function initInternalComponent (vm, options) {\r\n-        var opts = vm.$options = Object.create(vm.constructor.options);\r\n-        \u002F\u002F doing this because it's faster than dynamic enumeration.\r\n-        var parentVnode = options._parentVnode;\r\n-        opts.parent = options.parent;\r\n-        opts._parentVnode = parentVnode;\r\n-\r\n-        var vnodeComponentOptions = parentVnode.componentOptions;\r\n-        opts.propsData = vnodeComponentOptions.propsData;\r\n-        opts._parentListeners = vnodeComponentOptions.listeners;\r\n-        opts._renderChildren = vnodeComponentOptions.children;\r\n-        opts._componentTag = vnodeComponentOptions.tag;\r\n-\r\n-        if (options.render) {\r\n-            opts.render = options.render;\r\n-            opts.staticRenderFns = options.staticRenderFns;\r\n-        }\r\n-    }\r\n-\r\n-    function resolveConstructorOptions (Ctor) {\r\n-        var options = Ctor.options;\r\n-        if (Ctor.super) {\r\n-            var superOptions = resolveConstructorOptions(Ctor.super);\r\n-            var cachedSuperOptions = Ctor.superOptions;\r\n-            if (superOptions !== cachedSuperOptions) {\r\n-                \u002F\u002F super option changed,\r\n-                \u002F\u002F need to resolve new options.\r\n-                Ctor.superOptions = superOptions;\r\n-                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\r\n-                var modifiedOptions = resolveModifiedOptions(Ctor);\r\n-                \u002F\u002F update base extend options\r\n-                if (modifiedOptions) {\r\n-                    extend(Ctor.extendOptions, modifiedOptions);\r\n-                }\r\n-                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\r\n-                if (options.name) {\r\n-                    options.components[options.name] = Ctor;\r\n-                }\r\n-            }\r\n-        }\r\n-        return options\r\n-    }\r\n-\r\n-    function resolveModifiedOptions (Ctor) {\r\n-        var modified;\r\n-        var latest = Ctor.options;\r\n-        var sealed = Ctor.sealedOptions;\r\n-        for (var key in latest) {\r\n-            if (latest[key] !== sealed[key]) {\r\n-                if (!modified) { modified = {}; }\r\n-                modified[key] = latest[key];\r\n-            }\r\n-        }\r\n-        return modified\r\n-    }\r\n-\r\n-    function Vue (options) {\r\n-        if (!(this instanceof Vue)\r\n-        ) {\r\n-            warn('Vue is a constructor and should be called with the `new` keyword');\r\n-        }\r\n-        this._init(options);\r\n-    }\r\n-\r\n-    initMixin(Vue);\r\n-    stateMixin(Vue);\r\n-    eventsMixin(Vue);\r\n-    lifecycleMixin(Vue);\r\n-    renderMixin(Vue);\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initUse (Vue) {\r\n-        Vue.use = function (plugin) {\r\n-            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\r\n-            if (installedPlugins.indexOf(plugin) > -1) {\r\n-                return this\r\n-            }\r\n-\r\n-            \u002F\u002F additional parameters\r\n-            var args = toArray(arguments, 1);\r\n-            args.unshift(this);\r\n-            if (typeof plugin.install === 'function') {\r\n-                plugin.install.apply(plugin, args);\r\n-            } else if (typeof plugin === 'function') {\r\n-                plugin.apply(null, args);\r\n-            }\r\n-            installedPlugins.push(plugin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initMixin$1 (Vue) {\r\n-        Vue.mixin = function (mixin) {\r\n-            this.options = mergeOptions(this.options, mixin);\r\n-            return this\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initExtend (Vue) {\r\n-        \u002F**\r\n-         * Each instance constructor, including Vue, has a unique\r\n-         * cid. This enables us to create wrapped \"child\r\n-         * constructors\" for prototypal inheritance and cache them.\r\n-         *\u002F\r\n-        Vue.cid = 0;\r\n-        var cid = 1;\r\n-\r\n-        \u002F**\r\n-         * Class inheritance\r\n-         *\u002F\r\n-        Vue.extend = function (extendOptions) {\r\n-            extendOptions = extendOptions || {};\r\n-            var Super = this;\r\n-            var SuperId = Super.cid;\r\n-            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\r\n-            if (cachedCtors[SuperId]) {\r\n-                return cachedCtors[SuperId]\r\n-            }\r\n-\r\n-            var name = extendOptions.name || Super.options.name;\r\n-            if (name) {\r\n-                validateComponentName(name);\r\n-            }\r\n-\r\n-            var Sub = function VueComponent (options) {\r\n-                this._init(options);\r\n-            };\r\n-            Sub.prototype = Object.create(Super.prototype);\r\n-            Sub.prototype.constructor = Sub;\r\n-            Sub.cid = cid++;\r\n-            Sub.options = mergeOptions(\r\n-                Super.options,\r\n-                extendOptions\r\n-            );\r\n-            Sub['super'] = Super;\r\n-\r\n-            \u002F\u002F For props and computed properties, we define the proxy getters on\r\n-            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\r\n-            \u002F\u002F avoids Object.defineProperty calls for each instance created.\r\n-            if (Sub.options.props) {\r\n-                initProps$1(Sub);\r\n-            }\r\n-            if (Sub.options.computed) {\r\n-                initComputed$1(Sub);\r\n-            }\r\n-\r\n-            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\r\n-            Sub.extend = Super.extend;\r\n-            Sub.mixin = Super.mixin;\r\n-            Sub.use = Super.use;\r\n-\r\n-            \u002F\u002F create asset registers, so extended classes\r\n-            \u002F\u002F can have their private assets too.\r\n-            ASSET_TYPES.forEach(function (type) {\r\n-                Sub[type] = Super[type];\r\n-            });\r\n-            \u002F\u002F enable recursive self-lookup\r\n-            if (name) {\r\n-                Sub.options.components[name] = Sub;\r\n-            }\r\n-\r\n-            \u002F\u002F keep a reference to the super options at extension time.\r\n-            \u002F\u002F later at instantiation we can check if Super's options have\r\n-            \u002F\u002F been updated.\r\n-            Sub.superOptions = Super.options;\r\n-            Sub.extendOptions = extendOptions;\r\n-            Sub.sealedOptions = extend({}, Sub.options);\r\n-\r\n-            \u002F\u002F cache constructor\r\n-            cachedCtors[SuperId] = Sub;\r\n-            return Sub\r\n-        };\r\n-    }\r\n-\r\n-    function initProps$1 (Comp) {\r\n-        var props = Comp.options.props;\r\n-        for (var key in props) {\r\n-            proxy(Comp.prototype, \"_props\", key);\r\n-        }\r\n-    }\r\n-\r\n-    function initComputed$1 (Comp) {\r\n-        var computed = Comp.options.computed;\r\n-        for (var key in computed) {\r\n-            defineComputed(Comp.prototype, key, computed[key]);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initAssetRegisters (Vue) {\r\n-        \u002F**\r\n-         * Create asset registration methods.\r\n-         *\u002F\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue[type] = function (\r\n-                id,\r\n-                definition\r\n-            ) {\r\n-                if (!definition) {\r\n-                    return this.options[type + 's'][id]\r\n-                } else {\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (type === 'component') {\r\n-                        validateComponentName(id);\r\n-                    }\r\n-                    if (type === 'component' && isPlainObject(definition)) {\r\n-                        definition.name = definition.name || id;\r\n-                        definition = this.options._base.extend(definition);\r\n-                    }\r\n-                    if (type === 'directive' && typeof definition === 'function') {\r\n-                        definition = { bind: definition, update: definition };\r\n-                    }\r\n-                    this.options[type + 's'][id] = definition;\r\n-                    return definition\r\n-                }\r\n-            };\r\n-        });\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function getComponentName (opts) {\r\n-        return opts && (opts.Ctor.options.name || opts.tag)\r\n-    }\r\n-\r\n-    function matches (pattern, name) {\r\n-        if (Array.isArray(pattern)) {\r\n-            return pattern.indexOf(name) > -1\r\n-        } else if (typeof pattern === 'string') {\r\n-            return pattern.split(',').indexOf(name) > -1\r\n-        } else if (isRegExp(pattern)) {\r\n-            return pattern.test(name)\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return false\r\n-    }\r\n-\r\n-    function pruneCache (keepAliveInstance, filter) {\r\n-        var cache = keepAliveInstance.cache;\r\n-        var keys = keepAliveInstance.keys;\r\n-        var _vnode = keepAliveInstance._vnode;\r\n-        for (var key in cache) {\r\n-            var cachedNode = cache[key];\r\n-            if (cachedNode) {\r\n-                var name = getComponentName(cachedNode.componentOptions);\r\n-                if (name && !filter(name)) {\r\n-                    pruneCacheEntry(cache, key, keys, _vnode);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function pruneCacheEntry (\r\n-        cache,\r\n-        key,\r\n-        keys,\r\n-        current\r\n-    ) {\r\n-        var cached$$1 = cache[key];\r\n-        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\r\n-            cached$$1.componentInstance.$destroy();\r\n-        }\r\n-        cache[key] = null;\r\n-        remove(keys, key);\r\n-    }\r\n-\r\n-    var patternTypes = [String, RegExp, Array];\r\n-\r\n-    var KeepAlive = {\r\n-        name: 'keep-alive',\r\n-        abstract: true,\r\n-\r\n-        props: {\r\n-            include: patternTypes,\r\n-            exclude: patternTypes,\r\n-            max: [String, Number]\r\n-        },\r\n-\r\n-        created: function created () {\r\n-            this.cache = Object.create(null);\r\n-            this.keys = [];\r\n-        },\r\n-\r\n-        destroyed: function destroyed () {\r\n-            for (var key in this.cache) {\r\n-                pruneCacheEntry(this.cache, key, this.keys);\r\n-            }\r\n-        },\r\n-\r\n-        mounted: function mounted () {\r\n-            var this$1 = this;\r\n-\r\n-            this.$watch('include', function (val) {\r\n-                pruneCache(this$1, function (name) { return matches(val, name); });\r\n-            });\r\n-            this.$watch('exclude', function (val) {\r\n-                pruneCache(this$1, function (name) { return !matches(val, name); });\r\n-            });\r\n-        },\r\n-\r\n-        render: function render () {\r\n-            var slot = this.$slots.default;\r\n-            var vnode = getFirstComponentChild(slot);\r\n-            var componentOptions = vnode && vnode.componentOptions;\r\n-            if (componentOptions) {\r\n-                \u002F\u002F check pattern\r\n-                var name = getComponentName(componentOptions);\r\n-                var ref = this;\r\n-                var include = ref.include;\r\n-                var exclude = ref.exclude;\r\n-                if (\r\n-                    \u002F\u002F not included\r\n-                (include && (!name || !matches(include, name))) ||\r\n-                \u002F\u002F excluded\r\n-                (exclude && name && matches(exclude, name))\r\n-                ) {\r\n-                    return vnode\r\n-                }\r\n-\r\n-                var ref$1 = this;\r\n-                var cache = ref$1.cache;\r\n-                var keys = ref$1.keys;\r\n-                var key = vnode.key == null\r\n-                    \u002F\u002F same constructor may get registered as different local components\r\n-                    \u002F\u002F so cid alone is not enough (#3269)\r\n-                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\r\n-                    : vnode.key;\r\n-                if (cache[key]) {\r\n-                    vnode.componentInstance = cache[key].componentInstance;\r\n-                    \u002F\u002F make current key freshest\r\n-                    remove(keys, key);\r\n-                    keys.push(key);\r\n-                } else {\r\n-                    cache[key] = vnode;\r\n-                    keys.push(key);\r\n-                    \u002F\u002F prune oldest entry\r\n-                    if (this.max && keys.length > parseInt(this.max)) {\r\n-                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.data.keepAlive = true;\r\n-            }\r\n-            return vnode || (slot && slot[0])\r\n-        }\r\n-    };\r\n-\r\n-    var builtInComponents = {\r\n-        KeepAlive: KeepAlive\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function initGlobalAPI (Vue) {\r\n-        \u002F\u002F config\r\n-        var configDef = {};\r\n-        configDef.get = function () { return config; };\r\n-        {\r\n-            configDef.set = function () {\r\n-                warn(\r\n-                    'Do not replace the Vue.config object, set individual fields instead.'\r\n-                );\r\n-            };\r\n-        }\r\n-        Object.defineProperty(Vue, 'config', configDef);\r\n-\r\n-        \u002F\u002F exposed util methods.\r\n-        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\r\n-        \u002F\u002F them unless you are aware of the risk.\r\n-        Vue.util = {\r\n-            warn: warn,\r\n-            extend: extend,\r\n-            mergeOptions: mergeOptions,\r\n-            defineReactive: defineReactive$$1\r\n-        };\r\n-\r\n-        Vue.set = set;\r\n-        Vue.delete = del;\r\n-        Vue.nextTick = nextTick;\r\n-\r\n-        \u002F\u002F 2.6 explicit observable API\r\n-        Vue.observable = function (obj) {\r\n-            observe(obj);\r\n-            return obj\r\n-        };\r\n-\r\n-        Vue.options = Object.create(null);\r\n-        ASSET_TYPES.forEach(function (type) {\r\n-            Vue.options[type + 's'] = Object.create(null);\r\n-        });\r\n-\r\n-        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\r\n-        \u002F\u002F components with in Weex's multi-instance scenarios.\r\n-        Vue.options._base = Vue;\r\n-\r\n-        extend(Vue.options.components, builtInComponents);\r\n-\r\n-        initUse(Vue);\r\n-        initMixin$1(Vue);\r\n-        initExtend(Vue);\r\n-        initAssetRegisters(Vue);\r\n-    }\r\n-\r\n-    initGlobalAPI(Vue);\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$isServer', {\r\n-        get: isServerRendering\r\n-    });\r\n-\r\n-    Object.defineProperty(Vue.prototype, '$ssrContext', {\r\n-        get: function get () {\r\n-          \u002F* istanbul ignore next *\u002F\r\n-            return this.$vnode && this.$vnode.ssrContext\r\n-        }\r\n-    });\r\n-\r\n-    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\r\n-    Object.defineProperty(Vue, 'FunctionalRenderContext', {\r\n-        value: FunctionalRenderContext\r\n-    });\r\n-\r\n-    Vue.version = '2.6.10';\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F these are reserved for web because they are directly compiled away\r\n-    \u002F\u002F during template compilation\r\n-    var isReservedAttr = makeMap('style,class');\r\n-\r\n-    \u002F\u002F attributes that should be using props for binding\r\n-    var acceptValue = makeMap('input,textarea,option,select,progress');\r\n-    var mustUseProp = function (tag, type, attr) {\r\n-        return (\r\n-            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\r\n-            (attr === 'selected' && tag === 'option') ||\r\n-            (attr === 'checked' && tag === 'input') ||\r\n-            (attr === 'muted' && tag === 'video')\r\n-        )\r\n-    };\r\n-\r\n-    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\r\n-\r\n-    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\r\n-\r\n-    var convertEnumeratedValue = function (key, value) {\r\n-        return isFalsyAttrValue(value) || value === 'false'\r\n-            ? 'false'\r\n-            \u002F\u002F allow arbitrary string value for contenteditable\r\n-            : key === 'contenteditable' && isValidContentEditableValue(value)\r\n-                ? value\r\n-                : 'true'\r\n-    };\r\n-\r\n-    var isBooleanAttr = makeMap(\r\n-        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\r\n-        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\r\n-        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\r\n-        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\r\n-        'required,reversed,scoped,seamless,selected,sortable,translate,' +\r\n-        'truespeed,typemustmatch,visible'\r\n-    );\r\n-\r\n-    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\r\n-\r\n-    var isXlink = function (name) {\r\n-        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\r\n-    };\r\n-\r\n-    var getXlinkProp = function (name) {\r\n-        return isXlink(name) ? name.slice(6, name.length) : ''\r\n-    };\r\n-\r\n-    var isFalsyAttrValue = function (val) {\r\n-        return val == null || val === false\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function genClassForVnode (vnode) {\r\n-        var data = vnode.data;\r\n-        var parentNode = vnode;\r\n-        var childNode = vnode;\r\n-        while (isDef(childNode.componentInstance)) {\r\n-            childNode = childNode.componentInstance._vnode;\r\n-            if (childNode && childNode.data) {\r\n-                data = mergeClassData(childNode.data, data);\r\n-            }\r\n-        }\r\n-        while (isDef(parentNode = parentNode.parent)) {\r\n-            if (parentNode && parentNode.data) {\r\n-                data = mergeClassData(data, parentNode.data);\r\n-            }\r\n-        }\r\n-        return renderClass(data.staticClass, data.class)\r\n-    }\r\n-\r\n-    function mergeClassData (child, parent) {\r\n-        return {\r\n-            staticClass: concat(child.staticClass, parent.staticClass),\r\n-            class: isDef(child.class)\r\n-                ? [child.class, parent.class]\r\n-                : parent.class\r\n-        }\r\n-    }\r\n-\r\n-    function renderClass (\r\n-        staticClass,\r\n-        dynamicClass\r\n-    ) {\r\n-        if (isDef(staticClass) || isDef(dynamicClass)) {\r\n-            return concat(staticClass, stringifyClass(dynamicClass))\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function concat (a, b) {\r\n-        return a ? b ? (a + ' ' + b) : a : (b || '')\r\n-    }\r\n-\r\n-    function stringifyClass (value) {\r\n-        if (Array.isArray(value)) {\r\n-            return stringifyArray(value)\r\n-        }\r\n-        if (isObject(value)) {\r\n-            return stringifyObject(value)\r\n-        }\r\n-        if (typeof value === 'string') {\r\n-            return value\r\n-        }\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        return ''\r\n-    }\r\n-\r\n-    function stringifyArray (value) {\r\n-        var res = '';\r\n-        var stringified;\r\n-        for (var i = 0, l = value.length; i \u003C l; i++) {\r\n-            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\r\n-                if (res) { res += ' '; }\r\n-                res += stringified;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function stringifyObject (value) {\r\n-        var res = '';\r\n-        for (var key in value) {\r\n-            if (value[key]) {\r\n-                if (res) { res += ' '; }\r\n-                res += key;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var namespaceMap = {\r\n-        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\r\n-        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\r\n-    };\r\n-\r\n-    var isHTMLTag = makeMap(\r\n-        'html,body,base,head,link,meta,style,title,' +\r\n-        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\r\n-        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\r\n-        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\r\n-        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\r\n-        'embed,object,param,source,canvas,script,noscript,del,ins,' +\r\n-        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\r\n-        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\r\n-        'output,progress,select,textarea,' +\r\n-        'details,dialog,menu,menuitem,summary,' +\r\n-        'content,element,shadow,template,blockquote,iframe,tfoot'\r\n-    );\r\n-\r\n-    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\r\n-    \u002F\u002F contain child elements.\r\n-    var isSVG = makeMap(\r\n-        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\r\n-        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\r\n-        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\r\n-        true\r\n-    );\r\n-\r\n-    var isPreTag = function (tag) { return tag === 'pre'; };\r\n-\r\n-    var isReservedTag = function (tag) {\r\n-        return isHTMLTag(tag) || isSVG(tag)\r\n-    };\r\n-\r\n-    function getTagNamespace (tag) {\r\n-        if (isSVG(tag)) {\r\n-            return 'svg'\r\n-        }\r\n-        \u002F\u002F basic support for MathML\r\n-        \u002F\u002F note it doesn't support other MathML elements being component roots\r\n-        if (tag === 'math') {\r\n-            return 'math'\r\n-        }\r\n-    }\r\n-\r\n-    var unknownElementCache = Object.create(null);\r\n-    function isUnknownElement (tag) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!inBrowser) {\r\n-            return true\r\n-        }\r\n-        if (isReservedTag(tag)) {\r\n-            return false\r\n-        }\r\n-        tag = tag.toLowerCase();\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (unknownElementCache[tag] != null) {\r\n-            return unknownElementCache[tag]\r\n-        }\r\n-        var el = document.createElement(tag);\r\n-        if (tag.indexOf('-') > -1) {\r\n-            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\r\n-            return (unknownElementCache[tag] = (\r\n-                el.constructor === window.HTMLUnknownElement ||\r\n-                el.constructor === window.HTMLElement\r\n-            ))\r\n-        } else {\r\n-            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\r\n-        }\r\n-    }\r\n-\r\n-    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Query an element selector if it's not an element already.\r\n-     *\u002F\r\n-    function query (el) {\r\n-        if (typeof el === 'string') {\r\n-            var selected = document.querySelector(el);\r\n-            if (!selected) {\r\n-                warn(\r\n-                    'Cannot find element: ' + el\r\n-                );\r\n-                return document.createElement('div')\r\n-            }\r\n-            return selected\r\n-        } else {\r\n-            return el\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createElement$1 (tagName, vnode) {\r\n-        var elm = document.createElement(tagName);\r\n-        if (tagName !== 'select') {\r\n-            return elm\r\n-        }\r\n-        \u002F\u002F false or null will remove the attribute but undefined will not\r\n-        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\r\n-            elm.setAttribute('multiple', 'multiple');\r\n-        }\r\n-        return elm\r\n-    }\r\n-\r\n-    function createElementNS (namespace, tagName) {\r\n-        return document.createElementNS(namespaceMap[namespace], tagName)\r\n-    }\r\n-\r\n-    function createTextNode (text) {\r\n-        return document.createTextNode(text)\r\n-    }\r\n-\r\n-    function createComment (text) {\r\n-        return document.createComment(text)\r\n-    }\r\n-\r\n-    function insertBefore (parentNode, newNode, referenceNode) {\r\n-        parentNode.insertBefore(newNode, referenceNode);\r\n-    }\r\n-\r\n-    function removeChild (node, child) {\r\n-        node.removeChild(child);\r\n-    }\r\n-\r\n-    function appendChild (node, child) {\r\n-        node.appendChild(child);\r\n-    }\r\n-\r\n-    function parentNode (node) {\r\n-        return node.parentNode\r\n-    }\r\n-\r\n-    function nextSibling (node) {\r\n-        return node.nextSibling\r\n-    }\r\n-\r\n-    function tagName (node) {\r\n-        return node.tagName\r\n-    }\r\n-\r\n-    function setTextContent (node, text) {\r\n-        node.textContent = text;\r\n-    }\r\n-\r\n-    function setStyleScope (node, scopeId) {\r\n-        node.setAttribute(scopeId, '');\r\n-    }\r\n-\r\n-    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\r\n-        createElement: createElement$1,\r\n-        createElementNS: createElementNS,\r\n-        createTextNode: createTextNode,\r\n-        createComment: createComment,\r\n-        insertBefore: insertBefore,\r\n-        removeChild: removeChild,\r\n-        appendChild: appendChild,\r\n-        parentNode: parentNode,\r\n-        nextSibling: nextSibling,\r\n-        tagName: tagName,\r\n-        setTextContent: setTextContent,\r\n-        setStyleScope: setStyleScope\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref = {\r\n-        create: function create (_, vnode) {\r\n-            registerRef(vnode);\r\n-        },\r\n-        update: function update (oldVnode, vnode) {\r\n-            if (oldVnode.data.ref !== vnode.data.ref) {\r\n-                registerRef(oldVnode, true);\r\n-                registerRef(vnode);\r\n-            }\r\n-        },\r\n-        destroy: function destroy (vnode) {\r\n-            registerRef(vnode, true);\r\n-        }\r\n-    };\r\n-\r\n-    function registerRef (vnode, isRemoval) {\r\n-        var key = vnode.data.ref;\r\n-        if (!isDef(key)) { return }\r\n-\r\n-        var vm = vnode.context;\r\n-        var ref = vnode.componentInstance || vnode.elm;\r\n-        var refs = vm.$refs;\r\n-        if (isRemoval) {\r\n-            if (Array.isArray(refs[key])) {\r\n-                remove(refs[key], ref);\r\n-            } else if (refs[key] === ref) {\r\n-                refs[key] = undefined;\r\n-            }\r\n-        } else {\r\n-            if (vnode.data.refInFor) {\r\n-                if (!Array.isArray(refs[key])) {\r\n-                    refs[key] = [ref];\r\n-                } else if (refs[key].indexOf(ref) \u003C 0) {\r\n-                    \u002F\u002F $flow-disable-line\r\n-                    refs[key].push(ref);\r\n-                }\r\n-            } else {\r\n-                refs[key] = ref;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Virtual DOM patching algorithm based on Snabbdom by\r\n-     * Simon Friis Vindum (@paldepind)\r\n-     * Licensed under the MIT License\r\n-     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\r\n-     *\r\n-     * modified by Evan You (@yyx990803)\r\n-     *\r\n-     * Not type-checking this because this file is perf-critical and the cost\r\n-     * of making flow understand it is not worth it.\r\n-     *\u002F\r\n-\r\n-    var emptyNode = new VNode('', {}, []);\r\n-\r\n-    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\r\n-\r\n-    function sameVnode (a, b) {\r\n-        return (\r\n-            a.key === b.key && (\r\n-                (\r\n-                    a.tag === b.tag &&\r\n-                    a.isComment === b.isComment &&\r\n-                    isDef(a.data) === isDef(b.data) &&\r\n-                    sameInputType(a, b)\r\n-                ) || (\r\n-                    isTrue(a.isAsyncPlaceholder) &&\r\n-                    a.asyncFactory === b.asyncFactory &&\r\n-                    isUndef(b.asyncFactory.error)\r\n-                )\r\n-            )\r\n-        )\r\n-    }\r\n-\r\n-    function sameInputType (a, b) {\r\n-        if (a.tag !== 'input') { return true }\r\n-        var i;\r\n-        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\r\n-        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\r\n-        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\r\n-    }\r\n-\r\n-    function createKeyToOldIdx (children, beginIdx, endIdx) {\r\n-        var i, key;\r\n-        var map = {};\r\n-        for (i = beginIdx; i \u003C= endIdx; ++i) {\r\n-            key = children[i].key;\r\n-            if (isDef(key)) { map[key] = i; }\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    function createPatchFunction (backend) {\r\n-        var i, j;\r\n-        var cbs = {};\r\n-\r\n-        var modules = backend.modules;\r\n-        var nodeOps = backend.nodeOps;\r\n-\r\n-        for (i = 0; i \u003C hooks.length; ++i) {\r\n-            cbs[hooks[i]] = [];\r\n-            for (j = 0; j \u003C modules.length; ++j) {\r\n-                if (isDef(modules[j][hooks[i]])) {\r\n-                    cbs[hooks[i]].push(modules[j][hooks[i]]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function emptyNodeAt (elm) {\r\n-            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\r\n-        }\r\n-\r\n-        function createRmCb (childElm, listeners) {\r\n-            function remove$$1 () {\r\n-                if (--remove$$1.listeners === 0) {\r\n-                    removeNode(childElm);\r\n-                }\r\n-            }\r\n-            remove$$1.listeners = listeners;\r\n-            return remove$$1\r\n-        }\r\n-\r\n-        function removeNode (el) {\r\n-            var parent = nodeOps.parentNode(el);\r\n-            \u002F\u002F element may have already been removed due to v-html \u002F v-text\r\n-            if (isDef(parent)) {\r\n-                nodeOps.removeChild(parent, el);\r\n-            }\r\n-        }\r\n-\r\n-        function isUnknownElement$$1 (vnode, inVPre) {\r\n-            return (\r\n-                !inVPre &&\r\n-                !vnode.ns &&\r\n-                !(\r\n-                    config.ignoredElements.length &&\r\n-                    config.ignoredElements.some(function (ignore) {\r\n-                        return isRegExp(ignore)\r\n-                            ? ignore.test(vnode.tag)\r\n-                            : ignore === vnode.tag\r\n-                    })\r\n-                ) &&\r\n-                config.isUnknownElement(vnode.tag)\r\n-            )\r\n-        }\r\n-\r\n-        var creatingElmInVPre = 0;\r\n-\r\n-        function createElm (\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            parentElm,\r\n-            refElm,\r\n-            nested,\r\n-            ownerArray,\r\n-            index\r\n-        ) {\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F This vnode was used in a previous render!\r\n-                \u002F\u002F now it's used as a new node, overwriting its elm would cause\r\n-                \u002F\u002F potential patch errors down the road when it's used as an insertion\r\n-                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\r\n-                \u002F\u002F associated DOM element for it.\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\r\n-            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\r\n-                return\r\n-            }\r\n-\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            var tag = vnode.tag;\r\n-            if (isDef(tag)) {\r\n-                {\r\n-                    if (data && data.pre) {\r\n-                        creatingElmInVPre++;\r\n-                    }\r\n-                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\r\n-                        warn(\r\n-                            'Unknown custom element: \u003C' + tag + '> - did you ' +\r\n-                            'register the component correctly? For recursive components, ' +\r\n-                            'make sure to provide the \"name\" option.',\r\n-                            vnode.context\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                vnode.elm = vnode.ns\r\n-                    ? nodeOps.createElementNS(vnode.ns, tag)\r\n-                    : nodeOps.createElement(tag, vnode);\r\n-                setScope(vnode);\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                {\r\n-                    createChildren(vnode, children, insertedVnodeQueue);\r\n-                    if (isDef(data)) {\r\n-                        invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                    }\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                }\r\n-\r\n-                if (data && data.pre) {\r\n-                    creatingElmInVPre--;\r\n-                }\r\n-            } else if (isTrue(vnode.isComment)) {\r\n-                vnode.elm = nodeOps.createComment(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            } else {\r\n-                vnode.elm = nodeOps.createTextNode(vnode.text);\r\n-                insert(parentElm, vnode.elm, refElm);\r\n-            }\r\n-        }\r\n-\r\n-        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i = vnode.data;\r\n-            if (isDef(i)) {\r\n-                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\r\n-                if (isDef(i = i.hook) && isDef(i = i.init)) {\r\n-                    i(vnode, false \u002F* hydrating *\u002F);\r\n-                }\r\n-                \u002F\u002F after calling the init hook, if the vnode is a child component\r\n-                \u002F\u002F it should've created a child instance and mounted it. the child\r\n-                \u002F\u002F component also has set the placeholder vnode's elm.\r\n-                \u002F\u002F in that case we can just return the element and be done.\r\n-                if (isDef(vnode.componentInstance)) {\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    insert(parentElm, vnode.elm, refElm);\r\n-                    if (isTrue(isReactivated)) {\r\n-                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\r\n-                    }\r\n-                    return true\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function initComponent (vnode, insertedVnodeQueue) {\r\n-            if (isDef(vnode.data.pendingInsert)) {\r\n-                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\r\n-                vnode.data.pendingInsert = null;\r\n-            }\r\n-            vnode.elm = vnode.componentInstance.$el;\r\n-            if (isPatchable(vnode)) {\r\n-                invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                setScope(vnode);\r\n-            } else {\r\n-                \u002F\u002F empty component root.\r\n-                \u002F\u002F skip all element-related modules except for ref (#3455)\r\n-                registerRef(vnode);\r\n-                \u002F\u002F make sure to invoke the insert hook\r\n-                insertedVnodeQueue.push(vnode);\r\n-            }\r\n-        }\r\n-\r\n-        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\r\n-            var i;\r\n-            \u002F\u002F hack for #4339: a reactivated component with inner transition\r\n-            \u002F\u002F does not trigger because the inner node's created hooks are not called\r\n-            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\r\n-            \u002F\u002F there doesn't seem to be a better way to do it.\r\n-            var innerNode = vnode;\r\n-            while (innerNode.componentInstance) {\r\n-                innerNode = innerNode.componentInstance._vnode;\r\n-                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\r\n-                    for (i = 0; i \u003C cbs.activate.length; ++i) {\r\n-                        cbs.activate[i](emptyNode, innerNode);\r\n-                    }\r\n-                    insertedVnodeQueue.push(innerNode);\r\n-                    break\r\n-                }\r\n-            }\r\n-            \u002F\u002F unlike a newly created component,\r\n-            \u002F\u002F a reactivated keep-alive component doesn't insert itself\r\n-            insert(parentElm, vnode.elm, refElm);\r\n-        }\r\n-\r\n-        function insert (parent, elm, ref$$1) {\r\n-            if (isDef(parent)) {\r\n-                if (isDef(ref$$1)) {\r\n-                    if (nodeOps.parentNode(ref$$1) === parent) {\r\n-                        nodeOps.insertBefore(parent, elm, ref$$1);\r\n-                    }\r\n-                } else {\r\n-                    nodeOps.appendChild(parent, elm);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function createChildren (vnode, children, insertedVnodeQueue) {\r\n-            if (Array.isArray(children)) {\r\n-                {\r\n-                    checkDuplicateKeys(children);\r\n-                }\r\n-                for (var i = 0; i \u003C children.length; ++i) {\r\n-                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\r\n-                }\r\n-            } else if (isPrimitive(vnode.text)) {\r\n-                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\r\n-            }\r\n-        }\r\n-\r\n-        function isPatchable (vnode) {\r\n-            while (vnode.componentInstance) {\r\n-                vnode = vnode.componentInstance._vnode;\r\n-            }\r\n-            return isDef(vnode.tag)\r\n-        }\r\n-\r\n-        function invokeCreateHooks (vnode, insertedVnodeQueue) {\r\n-            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                cbs.create[i$1](emptyNode, vnode);\r\n-            }\r\n-            i = vnode.data.hook; \u002F\u002F Reuse variable\r\n-            if (isDef(i)) {\r\n-                if (isDef(i.create)) { i.create(emptyNode, vnode); }\r\n-                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F set scope id attribute for scoped CSS.\r\n-        \u002F\u002F this is implemented as a special case to avoid the overhead\r\n-        \u002F\u002F of going through the normal attribute patching process.\r\n-        function setScope (vnode) {\r\n-            var i;\r\n-            if (isDef(i = vnode.fnScopeId)) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            } else {\r\n-                var ancestor = vnode;\r\n-                while (ancestor) {\r\n-                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\r\n-                        nodeOps.setStyleScope(vnode.elm, i);\r\n-                    }\r\n-                    ancestor = ancestor.parent;\r\n-                }\r\n-            }\r\n-            \u002F\u002F for slot content they should also get the scopeId from the host instance.\r\n-            if (isDef(i = activeInstance) &&\r\n-                i !== vnode.context &&\r\n-                i !== vnode.fnContext &&\r\n-                isDef(i = i.$options._scopeId)\r\n-            ) {\r\n-                nodeOps.setStyleScope(vnode.elm, i);\r\n-            }\r\n-        }\r\n-\r\n-        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function invokeDestroyHook (vnode) {\r\n-            var i, j;\r\n-            var data = vnode.data;\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\r\n-                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\r\n-            }\r\n-            if (isDef(i = vnode.children)) {\r\n-                for (j = 0; j \u003C vnode.children.length; ++j) {\r\n-                    invokeDestroyHook(vnode.children[j]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\r\n-            for (; startIdx \u003C= endIdx; ++startIdx) {\r\n-                var ch = vnodes[startIdx];\r\n-                if (isDef(ch)) {\r\n-                    if (isDef(ch.tag)) {\r\n-                        removeAndInvokeRemoveHook(ch);\r\n-                        invokeDestroyHook(ch);\r\n-                    } else { \u002F\u002F Text node\r\n-                        removeNode(ch.elm);\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function removeAndInvokeRemoveHook (vnode, rm) {\r\n-            if (isDef(rm) || isDef(vnode.data)) {\r\n-                var i;\r\n-                var listeners = cbs.remove.length + 1;\r\n-                if (isDef(rm)) {\r\n-                    \u002F\u002F we have a recursively passed down rm callback\r\n-                    \u002F\u002F increase the listeners count\r\n-                    rm.listeners += listeners;\r\n-                } else {\r\n-                    \u002F\u002F directly removing\r\n-                    rm = createRmCb(vnode.elm, listeners);\r\n-                }\r\n-                \u002F\u002F recursively invoke hooks on child component root node\r\n-                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\r\n-                    removeAndInvokeRemoveHook(i, rm);\r\n-                }\r\n-                for (i = 0; i \u003C cbs.remove.length; ++i) {\r\n-                    cbs.remove[i](vnode, rm);\r\n-                }\r\n-                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\r\n-                    i(vnode, rm);\r\n-                } else {\r\n-                    rm();\r\n-                }\r\n-            } else {\r\n-                removeNode(vnode.elm);\r\n-            }\r\n-        }\r\n-\r\n-        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\r\n-            var oldStartIdx = 0;\r\n-            var newStartIdx = 0;\r\n-            var oldEndIdx = oldCh.length - 1;\r\n-            var oldStartVnode = oldCh[0];\r\n-            var oldEndVnode = oldCh[oldEndIdx];\r\n-            var newEndIdx = newCh.length - 1;\r\n-            var newStartVnode = newCh[0];\r\n-            var newEndVnode = newCh[newEndIdx];\r\n-            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\r\n-\r\n-            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\r\n-            \u002F\u002F to ensure removed elements stay in correct relative positions\r\n-            \u002F\u002F during leaving transitions\r\n-            var canMove = !removeOnly;\r\n-\r\n-            {\r\n-                checkDuplicateKeys(newCh);\r\n-            }\r\n-\r\n-            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\r\n-                if (isUndef(oldStartVnode)) {\r\n-                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\r\n-                } else if (isUndef(oldEndVnode)) {\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newStartVnode)) {\r\n-                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else if (sameVnode(oldEndVnode, newEndVnode)) {\r\n-                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\r\n-                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\r\n-                    oldStartVnode = oldCh[++oldStartIdx];\r\n-                    newEndVnode = newCh[--newEndIdx];\r\n-                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\r\n-                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\r\n-                    oldEndVnode = oldCh[--oldEndIdx];\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                } else {\r\n-                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\r\n-                    idxInOld = isDef(newStartVnode.key)\r\n-                        ? oldKeyToIdx[newStartVnode.key]\r\n-                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\r\n-                    if (isUndef(idxInOld)) { \u002F\u002F New element\r\n-                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                    } else {\r\n-                        vnodeToMove = oldCh[idxInOld];\r\n-                        if (sameVnode(vnodeToMove, newStartVnode)) {\r\n-                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\r\n-                            oldCh[idxInOld] = undefined;\r\n-                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\r\n-                        } else {\r\n-                            \u002F\u002F same key but different element. treat as new element\r\n-                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\r\n-                        }\r\n-                    }\r\n-                    newStartVnode = newCh[++newStartIdx];\r\n-                }\r\n-            }\r\n-            if (oldStartIdx > oldEndIdx) {\r\n-                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\r\n-                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\r\n-            } else if (newStartIdx > newEndIdx) {\r\n-                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\r\n-            }\r\n-        }\r\n-\r\n-        function checkDuplicateKeys (children) {\r\n-            var seenKeys = {};\r\n-            for (var i = 0; i \u003C children.length; i++) {\r\n-                var vnode = children[i];\r\n-                var key = vnode.key;\r\n-                if (isDef(key)) {\r\n-                    if (seenKeys[key]) {\r\n-                        warn(\r\n-                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\r\n-                            vnode.context\r\n-                        );\r\n-                    } else {\r\n-                        seenKeys[key] = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function findIdxInOld (node, oldCh, start, end) {\r\n-            for (var i = start; i \u003C end; i++) {\r\n-                var c = oldCh[i];\r\n-                if (isDef(c) && sameVnode(node, c)) { return i }\r\n-            }\r\n-        }\r\n-\r\n-        function patchVnode (\r\n-            oldVnode,\r\n-            vnode,\r\n-            insertedVnodeQueue,\r\n-            ownerArray,\r\n-            index,\r\n-            removeOnly\r\n-        ) {\r\n-            if (oldVnode === vnode) {\r\n-                return\r\n-            }\r\n-\r\n-            if (isDef(vnode.elm) && isDef(ownerArray)) {\r\n-                \u002F\u002F clone reused vnode\r\n-                vnode = ownerArray[index] = cloneVNode(vnode);\r\n-            }\r\n-\r\n-            var elm = vnode.elm = oldVnode.elm;\r\n-\r\n-            if (isTrue(oldVnode.isAsyncPlaceholder)) {\r\n-                if (isDef(vnode.asyncFactory.resolved)) {\r\n-                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\r\n-                } else {\r\n-                    vnode.isAsyncPlaceholder = true;\r\n-                }\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F reuse element for static trees.\r\n-            \u002F\u002F note we only do this if the vnode is cloned -\r\n-            \u002F\u002F if the new node is not cloned it means the render functions have been\r\n-            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\r\n-            if (isTrue(vnode.isStatic) &&\r\n-                isTrue(oldVnode.isStatic) &&\r\n-                vnode.key === oldVnode.key &&\r\n-                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\r\n-            ) {\r\n-                vnode.componentInstance = oldVnode.componentInstance;\r\n-                return\r\n-            }\r\n-\r\n-            var i;\r\n-            var data = vnode.data;\r\n-            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\r\n-                i(oldVnode, vnode);\r\n-            }\r\n-\r\n-            var oldCh = oldVnode.children;\r\n-            var ch = vnode.children;\r\n-            if (isDef(data) && isPatchable(vnode)) {\r\n-                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\r\n-                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\r\n-            }\r\n-            if (isUndef(vnode.text)) {\r\n-                if (isDef(oldCh) && isDef(ch)) {\r\n-                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\r\n-                } else if (isDef(ch)) {\r\n-                    {\r\n-                        checkDuplicateKeys(ch);\r\n-                    }\r\n-                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\r\n-                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\r\n-                } else if (isDef(oldCh)) {\r\n-                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\r\n-                } else if (isDef(oldVnode.text)) {\r\n-                    nodeOps.setTextContent(elm, '');\r\n-                }\r\n-            } else if (oldVnode.text !== vnode.text) {\r\n-                nodeOps.setTextContent(elm, vnode.text);\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\r\n-            }\r\n-        }\r\n-\r\n-        function invokeInsertHook (vnode, queue, initial) {\r\n-            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\r\n-            \u002F\u002F element is really inserted\r\n-            if (isTrue(initial) && isDef(vnode.parent)) {\r\n-                vnode.parent.data.pendingInsert = queue;\r\n-            } else {\r\n-                for (var i = 0; i \u003C queue.length; ++i) {\r\n-                    queue[i].data.hook.insert(queue[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        var hydrationBailed = false;\r\n-        \u002F\u002F list of modules that can skip create hook during hydration because they\r\n-        \u002F\u002F are already rendered on the client or has no need for initialization\r\n-        \u002F\u002F Note: style is excluded because it relies on initial clone for future\r\n-        \u002F\u002F deep updates (#7063).\r\n-        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\r\n-\r\n-        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\r\n-        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\r\n-            var i;\r\n-            var tag = vnode.tag;\r\n-            var data = vnode.data;\r\n-            var children = vnode.children;\r\n-            inVPre = inVPre || (data && data.pre);\r\n-            vnode.elm = elm;\r\n-\r\n-            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\r\n-                vnode.isAsyncPlaceholder = true;\r\n-                return true\r\n-            }\r\n-            \u002F\u002F assert node match\r\n-            {\r\n-                if (!assertNodeMatch(elm, vnode, inVPre)) {\r\n-                    return false\r\n-                }\r\n-            }\r\n-            if (isDef(data)) {\r\n-                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\r\n-                if (isDef(i = vnode.componentInstance)) {\r\n-                    \u002F\u002F child component. it should have hydrated its own tree.\r\n-                    initComponent(vnode, insertedVnodeQueue);\r\n-                    return true\r\n-                }\r\n-            }\r\n-            if (isDef(tag)) {\r\n-                if (isDef(children)) {\r\n-                    \u002F\u002F empty element, allow client to pick up and populate children\r\n-                    if (!elm.hasChildNodes()) {\r\n-                        createChildren(vnode, children, insertedVnodeQueue);\r\n-                    } else {\r\n-                        \u002F\u002F v-html and domProps: innerHTML\r\n-                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\r\n-                            if (i !== elm.innerHTML) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('server innerHTML: ', i);\r\n-                                    console.warn('client innerHTML: ', elm.innerHTML);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        } else {\r\n-                            \u002F\u002F iterate and compare children lists\r\n-                            var childrenMatch = true;\r\n-                            var childNode = elm.firstChild;\r\n-                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\r\n-                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\r\n-                                    childrenMatch = false;\r\n-                                    break\r\n-                                }\r\n-                                childNode = childNode.nextSibling;\r\n-                            }\r\n-                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\r\n-                            \u002F\u002F longer than the virtual children list.\r\n-                            if (!childrenMatch || childNode) {\r\n-                              \u002F* istanbul ignore if *\u002F\r\n-                                if (typeof console !== 'undefined' &&\r\n-                                    !hydrationBailed\r\n-                                ) {\r\n-                                    hydrationBailed = true;\r\n-                                    console.warn('Parent: ', elm);\r\n-                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\r\n-                                }\r\n-                                return false\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                }\r\n-                if (isDef(data)) {\r\n-                    var fullInvoke = false;\r\n-                    for (var key in data) {\r\n-                        if (!isRenderedModule(key)) {\r\n-                            fullInvoke = true;\r\n-                            invokeCreateHooks(vnode, insertedVnodeQueue);\r\n-                            break\r\n-                        }\r\n-                    }\r\n-                    if (!fullInvoke && data['class']) {\r\n-                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\r\n-                        traverse(data['class']);\r\n-                    }\r\n-                }\r\n-            } else if (elm.data !== vnode.text) {\r\n-                elm.data = vnode.text;\r\n-            }\r\n-            return true\r\n-        }\r\n-\r\n-        function assertNodeMatch (node, vnode, inVPre) {\r\n-            if (isDef(vnode.tag)) {\r\n-                return vnode.tag.indexOf('vue-component') === 0 || (\r\n-                        !isUnknownElement$$1(vnode, inVPre) &&\r\n-                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\r\n-                    )\r\n-            } else {\r\n-                return node.nodeType === (vnode.isComment ? 8 : 3)\r\n-            }\r\n-        }\r\n-\r\n-        return function patch (oldVnode, vnode, hydrating, removeOnly) {\r\n-            if (isUndef(vnode)) {\r\n-                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\r\n-                return\r\n-            }\r\n-\r\n-            var isInitialPatch = false;\r\n-            var insertedVnodeQueue = [];\r\n-\r\n-            if (isUndef(oldVnode)) {\r\n-                \u002F\u002F empty mount (likely as component), create new root element\r\n-                isInitialPatch = true;\r\n-                createElm(vnode, insertedVnodeQueue);\r\n-            } else {\r\n-                var isRealElement = isDef(oldVnode.nodeType);\r\n-                if (!isRealElement && sameVnode(oldVnode, vnode)) {\r\n-                    \u002F\u002F patch existing root node\r\n-                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\r\n-                } else {\r\n-                    if (isRealElement) {\r\n-                        \u002F\u002F mounting to a real element\r\n-                        \u002F\u002F check if this is server-rendered content and if we can perform\r\n-                        \u002F\u002F a successful hydration.\r\n-                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\r\n-                            oldVnode.removeAttribute(SSR_ATTR);\r\n-                            hydrating = true;\r\n-                        }\r\n-                        if (isTrue(hydrating)) {\r\n-                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\r\n-                                invokeInsertHook(vnode, insertedVnodeQueue, true);\r\n-                                return oldVnode\r\n-                            } else {\r\n-                                warn(\r\n-                                    'The client-side rendered virtual DOM tree is not matching ' +\r\n-                                    'server-rendered content. This is likely caused by incorrect ' +\r\n-                                    'HTML markup, for example nesting block-level elements inside ' +\r\n-                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\r\n-                                    'full client-side render.'\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                        \u002F\u002F either not server-rendered, or hydration failed.\r\n-                        \u002F\u002F create an empty node and replace it\r\n-                        oldVnode = emptyNodeAt(oldVnode);\r\n-                    }\r\n-\r\n-                    \u002F\u002F replacing existing element\r\n-                    var oldElm = oldVnode.elm;\r\n-                    var parentElm = nodeOps.parentNode(oldElm);\r\n-\r\n-                    \u002F\u002F create new node\r\n-                    createElm(\r\n-                        vnode,\r\n-                        insertedVnodeQueue,\r\n-                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\r\n-                        \u002F\u002F leaving transition. Only happens when combining transition +\r\n-                        \u002F\u002F keep-alive + HOCs. (#4590)\r\n-                        oldElm._leaveCb ? null : parentElm,\r\n-                        nodeOps.nextSibling(oldElm)\r\n-                    );\r\n-\r\n-                    \u002F\u002F update parent placeholder node element, recursively\r\n-                    if (isDef(vnode.parent)) {\r\n-                        var ancestor = vnode.parent;\r\n-                        var patchable = isPatchable(vnode);\r\n-                        while (ancestor) {\r\n-                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\r\n-                                cbs.destroy[i](ancestor);\r\n-                            }\r\n-                            ancestor.elm = vnode.elm;\r\n-                            if (patchable) {\r\n-                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\r\n-                                    cbs.create[i$1](emptyNode, ancestor);\r\n-                                }\r\n-                                \u002F\u002F #6513\r\n-                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\r\n-                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\r\n-                                var insert = ancestor.data.hook.insert;\r\n-                                if (insert.merged) {\r\n-                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\r\n-                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\r\n-                                        insert.fns[i$2]();\r\n-                                    }\r\n-                                }\r\n-                            } else {\r\n-                                registerRef(ancestor);\r\n-                            }\r\n-                            ancestor = ancestor.parent;\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F destroy old node\r\n-                    if (isDef(parentElm)) {\r\n-                        removeVnodes(parentElm, [oldVnode], 0, 0);\r\n-                    } else if (isDef(oldVnode.tag)) {\r\n-                        invokeDestroyHook(oldVnode);\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\r\n-            return vnode.elm\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var directives = {\r\n-        create: updateDirectives,\r\n-        update: updateDirectives,\r\n-        destroy: function unbindDirectives (vnode) {\r\n-            updateDirectives(vnode, emptyNode);\r\n-        }\r\n-    };\r\n-\r\n-    function updateDirectives (oldVnode, vnode) {\r\n-        if (oldVnode.data.directives || vnode.data.directives) {\r\n-            _update(oldVnode, vnode);\r\n-        }\r\n-    }\r\n-\r\n-    function _update (oldVnode, vnode) {\r\n-        var isCreate = oldVnode === emptyNode;\r\n-        var isDestroy = vnode === emptyNode;\r\n-        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\r\n-        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\r\n-\r\n-        var dirsWithInsert = [];\r\n-        var dirsWithPostpatch = [];\r\n-\r\n-        var key, oldDir, dir;\r\n-        for (key in newDirs) {\r\n-            oldDir = oldDirs[key];\r\n-            dir = newDirs[key];\r\n-            if (!oldDir) {\r\n-                \u002F\u002F new directive, bind\r\n-                callHook$1(dir, 'bind', vnode, oldVnode);\r\n-                if (dir.def && dir.def.inserted) {\r\n-                    dirsWithInsert.push(dir);\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F existing directive, update\r\n-                dir.oldValue = oldDir.value;\r\n-                dir.oldArg = oldDir.arg;\r\n-                callHook$1(dir, 'update', vnode, oldVnode);\r\n-                if (dir.def && dir.def.componentUpdated) {\r\n-                    dirsWithPostpatch.push(dir);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithInsert.length) {\r\n-            var callInsert = function () {\r\n-                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\r\n-                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\r\n-                }\r\n-            };\r\n-            if (isCreate) {\r\n-                mergeVNodeHook(vnode, 'insert', callInsert);\r\n-            } else {\r\n-                callInsert();\r\n-            }\r\n-        }\r\n-\r\n-        if (dirsWithPostpatch.length) {\r\n-            mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\r\n-                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (!isCreate) {\r\n-            for (key in oldDirs) {\r\n-                if (!newDirs[key]) {\r\n-                    \u002F\u002F no longer present, unbind\r\n-                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var emptyModifiers = Object.create(null);\r\n-\r\n-    function normalizeDirectives$1 (\r\n-        dirs,\r\n-        vm\r\n-    ) {\r\n-        var res = Object.create(null);\r\n-        if (!dirs) {\r\n-            \u002F\u002F $flow-disable-line\r\n-            return res\r\n-        }\r\n-        var i, dir;\r\n-        for (i = 0; i \u003C dirs.length; i++) {\r\n-            dir = dirs[i];\r\n-            if (!dir.modifiers) {\r\n-                \u002F\u002F $flow-disable-line\r\n-                dir.modifiers = emptyModifiers;\r\n-            }\r\n-            res[getRawDirName(dir)] = dir;\r\n-            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\r\n-        }\r\n-        \u002F\u002F $flow-disable-line\r\n-        return res\r\n-    }\r\n-\r\n-    function getRawDirName (dir) {\r\n-        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\r\n-    }\r\n-\r\n-    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\r\n-        var fn = dir.def && dir.def[hook];\r\n-        if (fn) {\r\n-            try {\r\n-                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\r\n-            } catch (e) {\r\n-                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var baseModules = [\r\n-        ref,\r\n-        directives\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateAttrs (oldVnode, vnode) {\r\n-        var opts = vnode.componentOptions;\r\n-        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\r\n-            return\r\n-        }\r\n-        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\r\n-            return\r\n-        }\r\n-        var key, cur, old;\r\n-        var elm = vnode.elm;\r\n-        var oldAttrs = oldVnode.data.attrs || {};\r\n-        var attrs = vnode.data.attrs || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(attrs.__ob__)) {\r\n-            attrs = vnode.data.attrs = extend({}, attrs);\r\n-        }\r\n-\r\n-        for (key in attrs) {\r\n-            cur = attrs[key];\r\n-            old = oldAttrs[key];\r\n-            if (old !== cur) {\r\n-                setAttr(elm, key, cur);\r\n-            }\r\n-        }\r\n-        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\r\n-        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\r\n-            setAttr(elm, 'value', attrs.value);\r\n-        }\r\n-        for (key in oldAttrs) {\r\n-            if (isUndef(attrs[key])) {\r\n-                if (isXlink(key)) {\r\n-                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-                } else if (!isEnumeratedAttr(key)) {\r\n-                    elm.removeAttribute(key);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function setAttr (el, key, value) {\r\n-        if (el.tagName.indexOf('-') > -1) {\r\n-            baseSetAttr(el, key, value);\r\n-        } else if (isBooleanAttr(key)) {\r\n-            \u002F\u002F set attribute for blank value\r\n-            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttribute(key);\r\n-            } else {\r\n-                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\r\n-                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\r\n-                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\r\n-                    ? 'true'\r\n-                    : key;\r\n-                el.setAttribute(key, value);\r\n-            }\r\n-        } else if (isEnumeratedAttr(key)) {\r\n-            el.setAttribute(key, convertEnumeratedValue(key, value));\r\n-        } else if (isXlink(key)) {\r\n-            if (isFalsyAttrValue(value)) {\r\n-                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\r\n-            } else {\r\n-                el.setAttributeNS(xlinkNS, key, value);\r\n-            }\r\n-        } else {\r\n-            baseSetAttr(el, key, value);\r\n-        }\r\n-    }\r\n-\r\n-    function baseSetAttr (el, key, value) {\r\n-        if (isFalsyAttrValue(value)) {\r\n-            el.removeAttribute(key);\r\n-        } else {\r\n-            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\r\n-            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\r\n-            \u002F\u002F immediately.\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (\r\n-                isIE && !isIE9 &&\r\n-                el.tagName === 'TEXTAREA' &&\r\n-                key === 'placeholder' && value !== '' && !el.__ieph\r\n-            ) {\r\n-                var blocker = function (e) {\r\n-                    e.stopImmediatePropagation();\r\n-                    el.removeEventListener('input', blocker);\r\n-                };\r\n-                el.addEventListener('input', blocker);\r\n-                \u002F\u002F $flow-disable-line\r\n-                el.__ieph = true; \u002F* IE placeholder patched *\u002F\r\n-            }\r\n-            el.setAttribute(key, value);\r\n-        }\r\n-    }\r\n-\r\n-    var attrs = {\r\n-        create: updateAttrs,\r\n-        update: updateAttrs\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function updateClass (oldVnode, vnode) {\r\n-        var el = vnode.elm;\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-        if (\r\n-            isUndef(data.staticClass) &&\r\n-            isUndef(data.class) && (\r\n-                isUndef(oldData) || (\r\n-                    isUndef(oldData.staticClass) &&\r\n-                    isUndef(oldData.class)\r\n-                )\r\n-            )\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cls = genClassForVnode(vnode);\r\n-\r\n-        \u002F\u002F handle transition classes\r\n-        var transitionClass = el._transitionClasses;\r\n-        if (isDef(transitionClass)) {\r\n-            cls = concat(cls, stringifyClass(transitionClass));\r\n-        }\r\n-\r\n-        \u002F\u002F set the class\r\n-        if (cls !== el._prevClass) {\r\n-            el.setAttribute('class', cls);\r\n-            el._prevClass = cls;\r\n-        }\r\n-    }\r\n-\r\n-    var klass = {\r\n-        create: updateClass,\r\n-        update: updateClass\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\r\n-\r\n-    function parseFilters (exp) {\r\n-        var inSingle = false;\r\n-        var inDouble = false;\r\n-        var inTemplateString = false;\r\n-        var inRegex = false;\r\n-        var curly = 0;\r\n-        var square = 0;\r\n-        var paren = 0;\r\n-        var lastFilterIndex = 0;\r\n-        var c, prev, i, expression, filters;\r\n-\r\n-        for (i = 0; i \u003C exp.length; i++) {\r\n-            prev = c;\r\n-            c = exp.charCodeAt(i);\r\n-            if (inSingle) {\r\n-                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\r\n-            } else if (inDouble) {\r\n-                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\r\n-            } else if (inTemplateString) {\r\n-                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\r\n-            } else if (inRegex) {\r\n-                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\r\n-            } else if (\r\n-                c === 0x7C && \u002F\u002F pipe\r\n-                exp.charCodeAt(i + 1) !== 0x7C &&\r\n-                exp.charCodeAt(i - 1) !== 0x7C &&\r\n-                !curly && !square && !paren\r\n-            ) {\r\n-                if (expression === undefined) {\r\n-                    \u002F\u002F first filter, end of expression\r\n-                    lastFilterIndex = i + 1;\r\n-                    expression = exp.slice(0, i).trim();\r\n-                } else {\r\n-                    pushFilter();\r\n-                }\r\n-            } else {\r\n-                switch (c) {\r\n-                    case 0x22: inDouble = true; break         \u002F\u002F \"\r\n-                    case 0x27: inSingle = true; break         \u002F\u002F '\r\n-                    case 0x60: inTemplateString = true; break \u002F\u002F `\r\n-                    case 0x28: paren++; break                 \u002F\u002F (\r\n-                    case 0x29: paren--; break                 \u002F\u002F )\r\n-                    case 0x5B: square++; break                \u002F\u002F [\r\n-                    case 0x5D: square--; break                \u002F\u002F ]\r\n-                    case 0x7B: curly++; break                 \u002F\u002F {\r\n-                    case 0x7D: curly--; break                 \u002F\u002F }\r\n-                }\r\n-                if (c === 0x2f) { \u002F\u002F \u002F\r\n-                    var j = i - 1;\r\n-                    var p = (void 0);\r\n-                    \u002F\u002F find first non-whitespace prev char\r\n-                    for (; j >= 0; j--) {\r\n-                        p = exp.charAt(j);\r\n-                        if (p !== ' ') { break }\r\n-                    }\r\n-                    if (!p || !validDivisionCharRE.test(p)) {\r\n-                        inRegex = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if (expression === undefined) {\r\n-            expression = exp.slice(0, i).trim();\r\n-        } else if (lastFilterIndex !== 0) {\r\n-            pushFilter();\r\n-        }\r\n-\r\n-        function pushFilter () {\r\n-            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\r\n-            lastFilterIndex = i + 1;\r\n-        }\r\n-\r\n-        if (filters) {\r\n-            for (i = 0; i \u003C filters.length; i++) {\r\n-                expression = wrapFilter(expression, filters[i]);\r\n-            }\r\n-        }\r\n-\r\n-        return expression\r\n-    }\r\n-\r\n-    function wrapFilter (exp, filter) {\r\n-        var i = filter.indexOf('(');\r\n-        if (i \u003C 0) {\r\n-            \u002F\u002F _f: resolveFilter\r\n-            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\r\n-        } else {\r\n-            var name = filter.slice(0, i);\r\n-            var args = filter.slice(i + 1);\r\n-            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-  \u002F* eslint-disable no-unused-vars *\u002F\r\n-    function baseWarn (msg, range) {\r\n-        console.error((\"[Vue compiler]: \" + msg));\r\n-    }\r\n-  \u002F* eslint-enable no-unused-vars *\u002F\r\n-\r\n-    function pluckModuleFunction (\r\n-        modules,\r\n-        key\r\n-    ) {\r\n-        return modules\r\n-            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\r\n-            : []\r\n-    }\r\n-\r\n-    function addProp (el, name, value, range, dynamic) {\r\n-        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function addAttr (el, name, value, range, dynamic) {\r\n-        var attrs = dynamic\r\n-            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\r\n-            : (el.attrs || (el.attrs = []));\r\n-        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    \u002F\u002F add a raw attr (use this in preTransforms)\r\n-    function addRawAttr (el, name, value, range) {\r\n-        el.attrsMap[name] = value;\r\n-        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\r\n-    }\r\n-\r\n-    function addDirective (\r\n-        el,\r\n-        name,\r\n-        rawName,\r\n-        value,\r\n-        arg,\r\n-        isDynamicArg,\r\n-        modifiers,\r\n-        range\r\n-    ) {\r\n-        (el.directives || (el.directives = [])).push(rangeSetItem({\r\n-            name: name,\r\n-            rawName: rawName,\r\n-            value: value,\r\n-            arg: arg,\r\n-            isDynamicArg: isDynamicArg,\r\n-            modifiers: modifiers\r\n-        }, range));\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function prependModifierMarker (symbol, name, dynamic) {\r\n-        return dynamic\r\n-            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\r\n-            : symbol + name \u002F\u002F mark the event as captured\r\n-    }\r\n-\r\n-    function addHandler (\r\n-        el,\r\n-        name,\r\n-        value,\r\n-        modifiers,\r\n-        important,\r\n-        warn,\r\n-        range,\r\n-        dynamic\r\n-    ) {\r\n-        modifiers = modifiers || emptyObject;\r\n-        \u002F\u002F warn prevent and passive modifier\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (\r\n-            warn &&\r\n-            modifiers.prevent && modifiers.passive\r\n-        ) {\r\n-            warn(\r\n-                'passive and prevent can\\'t be used together. ' +\r\n-                'Passive handler can\\'t prevent default event.',\r\n-                range\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F normalize click.right and click.middle since they don't actually fire\r\n-        \u002F\u002F this is technically browser-specific, but at least for now browsers are\r\n-        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\r\n-        if (modifiers.right) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'contextmenu';\r\n-                delete modifiers.right;\r\n-            }\r\n-        } else if (modifiers.middle) {\r\n-            if (dynamic) {\r\n-                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\r\n-            } else if (name === 'click') {\r\n-                name = 'mouseup';\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F check capture modifier\r\n-        if (modifiers.capture) {\r\n-            delete modifiers.capture;\r\n-            name = prependModifierMarker('!', name, dynamic);\r\n-        }\r\n-        if (modifiers.once) {\r\n-            delete modifiers.once;\r\n-            name = prependModifierMarker('~', name, dynamic);\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (modifiers.passive) {\r\n-            delete modifiers.passive;\r\n-            name = prependModifierMarker('&', name, dynamic);\r\n-        }\r\n-\r\n-        var events;\r\n-        if (modifiers.native) {\r\n-            delete modifiers.native;\r\n-            events = el.nativeEvents || (el.nativeEvents = {});\r\n-        } else {\r\n-            events = el.events || (el.events = {});\r\n-        }\r\n-\r\n-        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\r\n-        if (modifiers !== emptyObject) {\r\n-            newHandler.modifiers = modifiers;\r\n-        }\r\n-\r\n-        var handlers = events[name];\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (Array.isArray(handlers)) {\r\n-            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\r\n-        } else if (handlers) {\r\n-            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\r\n-        } else {\r\n-            events[name] = newHandler;\r\n-        }\r\n-\r\n-        el.plain = false;\r\n-    }\r\n-\r\n-    function getRawBindingAttr (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        return el.rawAttrsMap[':' + name] ||\r\n-            el.rawAttrsMap['v-bind:' + name] ||\r\n-            el.rawAttrsMap[name]\r\n-    }\r\n-\r\n-    function getBindingAttr (\r\n-        el,\r\n-        name,\r\n-        getStatic\r\n-    ) {\r\n-        var dynamicValue =\r\n-            getAndRemoveAttr(el, ':' + name) ||\r\n-            getAndRemoveAttr(el, 'v-bind:' + name);\r\n-        if (dynamicValue != null) {\r\n-            return parseFilters(dynamicValue)\r\n-        } else if (getStatic !== false) {\r\n-            var staticValue = getAndRemoveAttr(el, name);\r\n-            if (staticValue != null) {\r\n-                return JSON.stringify(staticValue)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\r\n-    \u002F\u002F doesn't get processed by processAttrs.\r\n-    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\r\n-    \u002F\u002F needed during codegen.\r\n-    function getAndRemoveAttr (\r\n-        el,\r\n-        name,\r\n-        removeFromMap\r\n-    ) {\r\n-        var val;\r\n-        if ((val = el.attrsMap[name]) != null) {\r\n-            var list = el.attrsList;\r\n-            for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-                if (list[i].name === name) {\r\n-                    list.splice(i, 1);\r\n-                    break\r\n-                }\r\n-            }\r\n-        }\r\n-        if (removeFromMap) {\r\n-            delete el.attrsMap[name];\r\n-        }\r\n-        return val\r\n-    }\r\n-\r\n-    function getAndRemoveAttrByRegex (\r\n-        el,\r\n-        name\r\n-    ) {\r\n-        var list = el.attrsList;\r\n-        for (var i = 0, l = list.length; i \u003C l; i++) {\r\n-            var attr = list[i];\r\n-            if (name.test(attr.name)) {\r\n-                list.splice(i, 1);\r\n-                return attr\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function rangeSetItem (\r\n-        item,\r\n-        range\r\n-    ) {\r\n-        if (range) {\r\n-            if (range.start != null) {\r\n-                item.start = range.start;\r\n-            }\r\n-            if (range.end != null) {\r\n-                item.end = range.end;\r\n-            }\r\n-        }\r\n-        return item\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F**\r\n-     * Cross-platform code generation for component v-model\r\n-     *\u002F\r\n-    function genComponentModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var ref = modifiers || {};\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-\r\n-        var baseValueExpression = '$$v';\r\n-        var valueExpression = baseValueExpression;\r\n-        if (trim) {\r\n-            valueExpression =\r\n-                \"(typeof \" + baseValueExpression + \" === 'string'\" +\r\n-                \"? \" + baseValueExpression + \".trim()\" +\r\n-                \": \" + baseValueExpression + \")\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-        var assignment = genAssignmentCode(value, valueExpression);\r\n-\r\n-        el.model = {\r\n-            value: (\"(\" + value + \")\"),\r\n-            expression: JSON.stringify(value),\r\n-            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\r\n-        };\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Cross-platform codegen helper for generating v-model value assignment code.\r\n-     *\u002F\r\n-    function genAssignmentCode (\r\n-        value,\r\n-        assignment\r\n-    ) {\r\n-        var res = parseModel(value);\r\n-        if (res.key === null) {\r\n-            return (value + \"=\" + assignment)\r\n-        } else {\r\n-            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Parse a v-model expression into a base path and a final key segment.\r\n-     * Handles both dot-path and possible square brackets.\r\n-     *\r\n-     * Possible cases:\r\n-     *\r\n-     * - test\r\n-     * - test[key]\r\n-     * - test[test1[key]]\r\n-     * - test[\"a\"][key]\r\n-     * - xxx.test[a[a].test1[key]]\r\n-     * - test.xxx.a[\"asa\"][test1[key]]\r\n-     *\r\n-     *\u002F\r\n-\r\n-    var len, str, chr, index$1, expressionPos, expressionEndPos;\r\n-\r\n-\r\n-\r\n-    function parseModel (val) {\r\n-        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\r\n-        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\r\n-        val = val.trim();\r\n-        len = val.length;\r\n-\r\n-        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\r\n-            index$1 = val.lastIndexOf('.');\r\n-            if (index$1 > -1) {\r\n-                return {\r\n-                    exp: val.slice(0, index$1),\r\n-                    key: '\"' + val.slice(index$1 + 1) + '\"'\r\n-                }\r\n-            } else {\r\n-                return {\r\n-                    exp: val,\r\n-                    key: null\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        str = val;\r\n-        index$1 = expressionPos = expressionEndPos = 0;\r\n-\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-            } else if (chr === 0x5B) {\r\n-                parseBracket(chr);\r\n-            }\r\n-        }\r\n-\r\n-        return {\r\n-            exp: val.slice(0, expressionPos),\r\n-            key: val.slice(expressionPos + 1, expressionEndPos)\r\n-        }\r\n-    }\r\n-\r\n-    function next () {\r\n-        return str.charCodeAt(++index$1)\r\n-    }\r\n-\r\n-    function eof () {\r\n-        return index$1 >= len\r\n-    }\r\n-\r\n-    function isStringStart (chr) {\r\n-        return chr === 0x22 || chr === 0x27\r\n-    }\r\n-\r\n-    function parseBracket (chr) {\r\n-        var inBracket = 1;\r\n-        expressionPos = index$1;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (isStringStart(chr)) {\r\n-                parseString(chr);\r\n-                continue\r\n-            }\r\n-            if (chr === 0x5B) { inBracket++; }\r\n-            if (chr === 0x5D) { inBracket--; }\r\n-            if (inBracket === 0) {\r\n-                expressionEndPos = index$1;\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function parseString (chr) {\r\n-        var stringQuote = chr;\r\n-        while (!eof()) {\r\n-            chr = next();\r\n-            if (chr === stringQuote) {\r\n-                break\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var warn$1;\r\n-\r\n-    \u002F\u002F in some cases, the event used has to be determined at runtime\r\n-    \u002F\u002F so we used some reserved tokens during compile.\r\n-    var RANGE_TOKEN = '__r';\r\n-    var CHECKBOX_RADIO_TOKEN = '__c';\r\n-\r\n-    function model (\r\n-        el,\r\n-        dir,\r\n-        _warn\r\n-    ) {\r\n-        warn$1 = _warn;\r\n-        var value = dir.value;\r\n-        var modifiers = dir.modifiers;\r\n-        var tag = el.tag;\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        {\r\n-            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\r\n-            \u002F\u002F value will throw an error.\r\n-            if (tag === 'input' && type === 'file') {\r\n-                warn$1(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\r\n-                    \"File inputs are read only. Use a v-on:change listener instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        if (el.component) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else if (tag === 'select') {\r\n-            genSelect(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'checkbox') {\r\n-            genCheckboxModel(el, value, modifiers);\r\n-        } else if (tag === 'input' && type === 'radio') {\r\n-            genRadioModel(el, value, modifiers);\r\n-        } else if (tag === 'input' || tag === 'textarea') {\r\n-            genDefaultModel(el, value, modifiers);\r\n-        } else if (!config.isReservedTag(tag)) {\r\n-            genComponentModel(el, value, modifiers);\r\n-            \u002F\u002F component v-model doesn't need extra runtime\r\n-            return false\r\n-        } else {\r\n-            warn$1(\r\n-                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                \"v-model is not supported on this element type. \" +\r\n-                'If you are working with contenteditable, it\\'s recommended to ' +\r\n-                'wrap a library dedicated for that purpose inside a custom component.',\r\n-                el.rawAttrsMap['v-model']\r\n-            );\r\n-        }\r\n-\r\n-        \u002F\u002F ensure runtime directive metadata\r\n-        return true\r\n-    }\r\n-\r\n-    function genCheckboxModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\r\n-        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\r\n-        addProp(el, 'checked',\r\n-            \"Array.isArray(\" + value + \")\" +\r\n-            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\r\n-                trueValueBinding === 'true'\r\n-                    ? (\":(\" + value + \")\")\r\n-                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\r\n-            )\r\n-        );\r\n-        addHandler(el, 'change',\r\n-            \"var $$a=\" + value + \",\" +\r\n-            '$$el=$event.target,' +\r\n-            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\r\n-            'if(Array.isArray($$a)){' +\r\n-            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\r\n-            '$$i=_i($$a,$$v);' +\r\n-            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\r\n-            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\r\n-            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\r\n-            null, true\r\n-        );\r\n-    }\r\n-\r\n-    function genRadioModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var valueBinding = getBindingAttr(el, 'value') || 'null';\r\n-        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\r\n-        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\r\n-        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\r\n-    }\r\n-\r\n-    function genSelect (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var number = modifiers && modifiers.number;\r\n-        var selectedVal = \"Array.prototype.filter\" +\r\n-            \".call($event.target.options,function(o){return o.selected})\" +\r\n-            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\r\n-            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\r\n-\r\n-        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\r\n-        var code = \"var $$selectedVal = \" + selectedVal + \";\";\r\n-        code = code + \" \" + (genAssignmentCode(value, assignment));\r\n-        addHandler(el, 'change', code, null, true);\r\n-    }\r\n-\r\n-    function genDefaultModel (\r\n-        el,\r\n-        value,\r\n-        modifiers\r\n-    ) {\r\n-        var type = el.attrsMap.type;\r\n-\r\n-        \u002F\u002F warn if v-bind:value conflicts with v-model\r\n-        \u002F\u002F except for inputs with v-bind:type\r\n-        {\r\n-            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\r\n-            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\r\n-            if (value$1 && !typeBinding) {\r\n-                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\r\n-                warn$1(\r\n-                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\r\n-                    'because the latter already expands to a value binding internally',\r\n-                    el.rawAttrsMap[binding]\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        var ref = modifiers || {};\r\n-        var lazy = ref.lazy;\r\n-        var number = ref.number;\r\n-        var trim = ref.trim;\r\n-        var needCompositionGuard = !lazy && type !== 'range';\r\n-        var event = lazy\r\n-            ? 'change'\r\n-            : type === 'range'\r\n-                ? RANGE_TOKEN\r\n-                : 'input';\r\n-\r\n-        var valueExpression = '$event.target.value';\r\n-        if (trim) {\r\n-            valueExpression = \"$event.target.value.trim()\";\r\n-        }\r\n-        if (number) {\r\n-            valueExpression = \"_n(\" + valueExpression + \")\";\r\n-        }\r\n-\r\n-        var code = genAssignmentCode(value, valueExpression);\r\n-        if (needCompositionGuard) {\r\n-            code = \"if($event.target.composing)return;\" + code;\r\n-        }\r\n-\r\n-        addProp(el, 'value', (\"(\" + value + \")\"));\r\n-        addHandler(el, event, code, null, true);\r\n-        if (trim || number) {\r\n-            addHandler(el, 'blur', '$forceUpdate()');\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\r\n-    \u002F\u002F it's important to place the event as the first in the array because\r\n-    \u002F\u002F the whole point is ensuring the v-model callback gets called before\r\n-    \u002F\u002F user-attached handlers.\r\n-    function normalizeEvents (on) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[RANGE_TOKEN])) {\r\n-            \u002F\u002F IE input[type=range] only supports `change` event\r\n-            var event = isIE ? 'change' : 'input';\r\n-            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\r\n-            delete on[RANGE_TOKEN];\r\n-        }\r\n-        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\r\n-        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\r\n-            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\r\n-            delete on[CHECKBOX_RADIO_TOKEN];\r\n-        }\r\n-    }\r\n-\r\n-    var target$1;\r\n-\r\n-    function createOnceHandler$1 (event, handler, capture) {\r\n-        var _target = target$1; \u002F\u002F save current target element in closure\r\n-        return function onceHandler () {\r\n-            var res = handler.apply(null, arguments);\r\n-            if (res !== null) {\r\n-                remove$2(event, onceHandler, capture, _target);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\r\n-    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\r\n-    \u002F\u002F safe to exclude.\r\n-    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\r\n-\r\n-    function add$1 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        passive\r\n-    ) {\r\n-        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\r\n-        \u002F\u002F attached to outer element during patch, and triggered again. This\r\n-        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\r\n-        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\r\n-        \u002F\u002F and the handler would only fire if the event passed to it was fired\r\n-        \u002F\u002F AFTER it was attached.\r\n-        if (useMicrotaskFix) {\r\n-            var attachedTimestamp = currentFlushTimestamp;\r\n-            var original = handler;\r\n-            handler = original._wrapper = function (e) {\r\n-                if (\r\n-                    \u002F\u002F no bubbling, should always fire.\r\n-                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\r\n-                \u002F\u002F certain weird environments...\r\n-                e.target === e.currentTarget ||\r\n-                \u002F\u002F event is fired after handler attachment\r\n-                e.timeStamp >= attachedTimestamp ||\r\n-                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\r\n-                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\r\n-                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\r\n-                e.timeStamp \u003C= 0 ||\r\n-                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\r\n-                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\r\n-                \u002F\u002F starting reference\r\n-                e.target.ownerDocument !== document\r\n-                ) {\r\n-                    return original.apply(this, arguments)\r\n-                }\r\n-            };\r\n-        }\r\n-        target$1.addEventListener(\r\n-            name,\r\n-            handler,\r\n-            supportsPassive\r\n-                ? { capture: capture, passive: passive }\r\n-                : capture\r\n-        );\r\n-    }\r\n-\r\n-    function remove$2 (\r\n-        name,\r\n-        handler,\r\n-        capture,\r\n-        _target\r\n-    ) {\r\n-        (_target || target$1).removeEventListener(\r\n-            name,\r\n-            handler._wrapper || handler,\r\n-            capture\r\n-        );\r\n-    }\r\n-\r\n-    function updateDOMListeners (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\r\n-            return\r\n-        }\r\n-        var on = vnode.data.on || {};\r\n-        var oldOn = oldVnode.data.on || {};\r\n-        target$1 = vnode.elm;\r\n-        normalizeEvents(on);\r\n-        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\r\n-        target$1 = undefined;\r\n-    }\r\n-\r\n-    var events = {\r\n-        create: updateDOMListeners,\r\n-        update: updateDOMListeners\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var svgContainer;\r\n-\r\n-    function updateDOMProps (oldVnode, vnode) {\r\n-        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\r\n-            return\r\n-        }\r\n-        var key, cur;\r\n-        var elm = vnode.elm;\r\n-        var oldProps = oldVnode.data.domProps || {};\r\n-        var props = vnode.data.domProps || {};\r\n-        \u002F\u002F clone observed objects, as the user probably wants to mutate it\r\n-        if (isDef(props.__ob__)) {\r\n-            props = vnode.data.domProps = extend({}, props);\r\n-        }\r\n-\r\n-        for (key in oldProps) {\r\n-            if (!(key in props)) {\r\n-                elm[key] = '';\r\n-            }\r\n-        }\r\n-\r\n-        for (key in props) {\r\n-            cur = props[key];\r\n-            \u002F\u002F ignore children if the node has textContent or innerHTML,\r\n-            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\r\n-            \u002F\u002F on subsequent patches (#3360)\r\n-            if (key === 'textContent' || key === 'innerHTML') {\r\n-                if (vnode.children) { vnode.children.length = 0; }\r\n-                if (cur === oldProps[key]) { continue }\r\n-                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\r\n-                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\r\n-                if (elm.childNodes.length === 1) {\r\n-                    elm.removeChild(elm.childNodes[0]);\r\n-                }\r\n-            }\r\n-\r\n-            if (key === 'value' && elm.tagName !== 'PROGRESS') {\r\n-                \u002F\u002F store value as _value as well since\r\n-                \u002F\u002F non-string values will be stringified\r\n-                elm._value = cur;\r\n-                \u002F\u002F avoid resetting cursor position when value is the same\r\n-                var strCur = isUndef(cur) ? '' : String(cur);\r\n-                if (shouldUpdateValue(elm, strCur)) {\r\n-                    elm.value = strCur;\r\n-                }\r\n-            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\r\n-                \u002F\u002F IE doesn't support innerHTML for SVG elements\r\n-                svgContainer = svgContainer || document.createElement('div');\r\n-                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\r\n-                var svg = svgContainer.firstChild;\r\n-                while (elm.firstChild) {\r\n-                    elm.removeChild(elm.firstChild);\r\n-                }\r\n-                while (svg.firstChild) {\r\n-                    elm.appendChild(svg.firstChild);\r\n-                }\r\n-            } else if (\r\n-                \u002F\u002F skip the update if old and new VDOM state is the same.\r\n-            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\r\n-            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\r\n-            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\r\n-            cur !== oldProps[key]\r\n-            ) {\r\n-                \u002F\u002F some property updates can throw\r\n-                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\r\n-                try {\r\n-                    elm[key] = cur;\r\n-                } catch (e) {}\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\r\n-\r\n-\r\n-    function shouldUpdateValue (elm, checkVal) {\r\n-        return (!elm.composing && (\r\n-            elm.tagName === 'OPTION' ||\r\n-            isNotInFocusAndDirty(elm, checkVal) ||\r\n-            isDirtyWithModifiers(elm, checkVal)\r\n-        ))\r\n-    }\r\n-\r\n-    function isNotInFocusAndDirty (elm, checkVal) {\r\n-        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\r\n-        \u002F\u002F not equal to the updated value\r\n-        var notInFocus = true;\r\n-        \u002F\u002F #6157\r\n-        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\r\n-        try { notInFocus = document.activeElement !== elm; } catch (e) {}\r\n-        return notInFocus && elm.value !== checkVal\r\n-    }\r\n-\r\n-    function isDirtyWithModifiers (elm, newVal) {\r\n-        var value = elm.value;\r\n-        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\r\n-        if (isDef(modifiers)) {\r\n-            if (modifiers.number) {\r\n-                return toNumber(value) !== toNumber(newVal)\r\n-            }\r\n-            if (modifiers.trim) {\r\n-                return value.trim() !== newVal.trim()\r\n-            }\r\n-        }\r\n-        return value !== newVal\r\n-    }\r\n-\r\n-    var domProps = {\r\n-        create: updateDOMProps,\r\n-        update: updateDOMProps\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var parseStyleText = cached(function (cssText) {\r\n-        var res = {};\r\n-        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\r\n-        var propertyDelimiter = \u002F:(.+)\u002F;\r\n-        cssText.split(listDelimiter).forEach(function (item) {\r\n-            if (item) {\r\n-                var tmp = item.split(propertyDelimiter);\r\n-                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\r\n-            }\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F\u002F merge static and dynamic style data on the same vnode\r\n-    function normalizeStyleData (data) {\r\n-        var style = normalizeStyleBinding(data.style);\r\n-        \u002F\u002F static style is pre-processed into an object during compilation\r\n-        \u002F\u002F and is always a fresh object, so it's safe to merge into it\r\n-        return data.staticStyle\r\n-            ? extend(data.staticStyle, style)\r\n-            : style\r\n-    }\r\n-\r\n-    \u002F\u002F normalize possible array \u002F string values into Object\r\n-    function normalizeStyleBinding (bindingStyle) {\r\n-        if (Array.isArray(bindingStyle)) {\r\n-            return toObject(bindingStyle)\r\n-        }\r\n-        if (typeof bindingStyle === 'string') {\r\n-            return parseStyleText(bindingStyle)\r\n-        }\r\n-        return bindingStyle\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * parent component style should be after child's\r\n-     * so that parent component's style could override it\r\n-     *\u002F\r\n-    function getStyle (vnode, checkChild) {\r\n-        var res = {};\r\n-        var styleData;\r\n-\r\n-        if (checkChild) {\r\n-            var childNode = vnode;\r\n-            while (childNode.componentInstance) {\r\n-                childNode = childNode.componentInstance._vnode;\r\n-                if (\r\n-                    childNode && childNode.data &&\r\n-                    (styleData = normalizeStyleData(childNode.data))\r\n-                ) {\r\n-                    extend(res, styleData);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        if ((styleData = normalizeStyleData(vnode.data))) {\r\n-            extend(res, styleData);\r\n-        }\r\n-\r\n-        var parentNode = vnode;\r\n-        while ((parentNode = parentNode.parent)) {\r\n-            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\r\n-                extend(res, styleData);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var cssVarRE = \u002F^--\u002F;\r\n-    var importantRE = \u002F\\s*!important$\u002F;\r\n-    var setProp = function (el, name, val) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (cssVarRE.test(name)) {\r\n-            el.style.setProperty(name, val);\r\n-        } else if (importantRE.test(val)) {\r\n-            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\r\n-        } else {\r\n-            var normalizedName = normalize(name);\r\n-            if (Array.isArray(val)) {\r\n-                \u002F\u002F Support values array created by autoprefixer, e.g.\r\n-                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\r\n-                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\r\n-                for (var i = 0, len = val.length; i \u003C len; i++) {\r\n-                    el.style[normalizedName] = val[i];\r\n-                }\r\n-            } else {\r\n-                el.style[normalizedName] = val;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var vendorNames = ['Webkit', 'Moz', 'ms'];\r\n-\r\n-    var emptyStyle;\r\n-    var normalize = cached(function (prop) {\r\n-        emptyStyle = emptyStyle || document.createElement('div').style;\r\n-        prop = camelize(prop);\r\n-        if (prop !== 'filter' && (prop in emptyStyle)) {\r\n-            return prop\r\n-        }\r\n-        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\r\n-        for (var i = 0; i \u003C vendorNames.length; i++) {\r\n-            var name = vendorNames[i] + capName;\r\n-            if (name in emptyStyle) {\r\n-                return name\r\n-            }\r\n-        }\r\n-    });\r\n-\r\n-    function updateStyle (oldVnode, vnode) {\r\n-        var data = vnode.data;\r\n-        var oldData = oldVnode.data;\r\n-\r\n-        if (isUndef(data.staticStyle) && isUndef(data.style) &&\r\n-            isUndef(oldData.staticStyle) && isUndef(oldData.style)\r\n-        ) {\r\n-            return\r\n-        }\r\n-\r\n-        var cur, name;\r\n-        var el = vnode.elm;\r\n-        var oldStaticStyle = oldData.staticStyle;\r\n-        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\r\n-\r\n-        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\r\n-        var oldStyle = oldStaticStyle || oldStyleBinding;\r\n-\r\n-        var style = normalizeStyleBinding(vnode.data.style) || {};\r\n-\r\n-        \u002F\u002F store normalized style under a different key for next diff\r\n-        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\r\n-        \u002F\u002F to mutate it.\r\n-        vnode.data.normalizedStyle = isDef(style.__ob__)\r\n-            ? extend({}, style)\r\n-            : style;\r\n-\r\n-        var newStyle = getStyle(vnode, true);\r\n-\r\n-        for (name in oldStyle) {\r\n-            if (isUndef(newStyle[name])) {\r\n-                setProp(el, name, '');\r\n-            }\r\n-        }\r\n-        for (name in newStyle) {\r\n-            cur = newStyle[name];\r\n-            if (cur !== oldStyle[name]) {\r\n-                \u002F\u002F ie9 setting to null has no effect, must use empty string\r\n-                setProp(el, name, cur == null ? '' : cur);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var style = {\r\n-        create: updateStyle,\r\n-        update: updateStyle\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var whitespaceRE = \u002F\\s+\u002F;\r\n-\r\n-    \u002F**\r\n-     * Add class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function addClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\r\n-            } else {\r\n-                el.classList.add(cls);\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\r\n-                el.setAttribute('class', (cur + cls).trim());\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Remove class with compatibility for SVG since classList is not supported on\r\n-     * SVG elements in IE\r\n-     *\u002F\r\n-    function removeClass (el, cls) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (!cls || !(cls = cls.trim())) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (el.classList) {\r\n-            if (cls.indexOf(' ') > -1) {\r\n-                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\r\n-            } else {\r\n-                el.classList.remove(cls);\r\n-            }\r\n-            if (!el.classList.length) {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        } else {\r\n-            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\r\n-            var tar = ' ' + cls + ' ';\r\n-            while (cur.indexOf(tar) >= 0) {\r\n-                cur = cur.replace(tar, ' ');\r\n-            }\r\n-            cur = cur.trim();\r\n-            if (cur) {\r\n-                el.setAttribute('class', cur);\r\n-            } else {\r\n-                el.removeAttribute('class');\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function resolveTransition (def$$1) {\r\n-        if (!def$$1) {\r\n-            return\r\n-        }\r\n-      \u002F* istanbul ignore else *\u002F\r\n-        if (typeof def$$1 === 'object') {\r\n-            var res = {};\r\n-            if (def$$1.css !== false) {\r\n-                extend(res, autoCssTransition(def$$1.name || 'v'));\r\n-            }\r\n-            extend(res, def$$1);\r\n-            return res\r\n-        } else if (typeof def$$1 === 'string') {\r\n-            return autoCssTransition(def$$1)\r\n-        }\r\n-    }\r\n-\r\n-    var autoCssTransition = cached(function (name) {\r\n-        return {\r\n-            enterClass: (name + \"-enter\"),\r\n-            enterToClass: (name + \"-enter-to\"),\r\n-            enterActiveClass: (name + \"-enter-active\"),\r\n-            leaveClass: (name + \"-leave\"),\r\n-            leaveToClass: (name + \"-leave-to\"),\r\n-            leaveActiveClass: (name + \"-leave-active\")\r\n-        }\r\n-    });\r\n-\r\n-    var hasTransition = inBrowser && !isIE9;\r\n-    var TRANSITION = 'transition';\r\n-    var ANIMATION = 'animation';\r\n-\r\n-    \u002F\u002F Transition property\u002Fevent sniffing\r\n-    var transitionProp = 'transition';\r\n-    var transitionEndEvent = 'transitionend';\r\n-    var animationProp = 'animation';\r\n-    var animationEndEvent = 'animationend';\r\n-    if (hasTransition) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (window.ontransitionend === undefined &&\r\n-            window.onwebkittransitionend !== undefined\r\n-        ) {\r\n-            transitionProp = 'WebkitTransition';\r\n-            transitionEndEvent = 'webkitTransitionEnd';\r\n-        }\r\n-        if (window.onanimationend === undefined &&\r\n-            window.onwebkitanimationend !== undefined\r\n-        ) {\r\n-            animationProp = 'WebkitAnimation';\r\n-            animationEndEvent = 'webkitAnimationEnd';\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\r\n-    var raf = inBrowser\r\n-        ? window.requestAnimationFrame\r\n-            ? window.requestAnimationFrame.bind(window)\r\n-            : setTimeout\r\n-        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\r\n-\r\n-    function nextFrame (fn) {\r\n-        raf(function () {\r\n-            raf(fn);\r\n-        });\r\n-    }\r\n-\r\n-    function addTransitionClass (el, cls) {\r\n-        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\r\n-        if (transitionClasses.indexOf(cls) \u003C 0) {\r\n-            transitionClasses.push(cls);\r\n-            addClass(el, cls);\r\n-        }\r\n-    }\r\n-\r\n-    function removeTransitionClass (el, cls) {\r\n-        if (el._transitionClasses) {\r\n-            remove(el._transitionClasses, cls);\r\n-        }\r\n-        removeClass(el, cls);\r\n-    }\r\n-\r\n-    function whenTransitionEnds (\r\n-        el,\r\n-        expectedType,\r\n-        cb\r\n-    ) {\r\n-        var ref = getTransitionInfo(el, expectedType);\r\n-        var type = ref.type;\r\n-        var timeout = ref.timeout;\r\n-        var propCount = ref.propCount;\r\n-        if (!type) { return cb() }\r\n-        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\r\n-        var ended = 0;\r\n-        var end = function () {\r\n-            el.removeEventListener(event, onEnd);\r\n-            cb();\r\n-        };\r\n-        var onEnd = function (e) {\r\n-            if (e.target === el) {\r\n-                if (++ended >= propCount) {\r\n-                    end();\r\n-                }\r\n-            }\r\n-        };\r\n-        setTimeout(function () {\r\n-            if (ended \u003C propCount) {\r\n-                end();\r\n-            }\r\n-        }, timeout + 1);\r\n-        el.addEventListener(event, onEnd);\r\n-    }\r\n-\r\n-    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\r\n-\r\n-    function getTransitionInfo (el, expectedType) {\r\n-        var styles = window.getComputedStyle(el);\r\n-        \u002F\u002F JSDOM may return undefined for transition properties\r\n-        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\r\n-        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\r\n-        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\r\n-        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\r\n-        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\r\n-        var animationTimeout = getTimeout(animationDelays, animationDurations);\r\n-\r\n-        var type;\r\n-        var timeout = 0;\r\n-        var propCount = 0;\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (expectedType === TRANSITION) {\r\n-            if (transitionTimeout > 0) {\r\n-                type = TRANSITION;\r\n-                timeout = transitionTimeout;\r\n-                propCount = transitionDurations.length;\r\n-            }\r\n-        } else if (expectedType === ANIMATION) {\r\n-            if (animationTimeout > 0) {\r\n-                type = ANIMATION;\r\n-                timeout = animationTimeout;\r\n-                propCount = animationDurations.length;\r\n-            }\r\n-        } else {\r\n-            timeout = Math.max(transitionTimeout, animationTimeout);\r\n-            type = timeout > 0\r\n-                ? transitionTimeout > animationTimeout\r\n-                    ? TRANSITION\r\n-                    : ANIMATION\r\n-                : null;\r\n-            propCount = type\r\n-                ? type === TRANSITION\r\n-                    ? transitionDurations.length\r\n-                    : animationDurations.length\r\n-                : 0;\r\n-        }\r\n-        var hasTransform =\r\n-            type === TRANSITION &&\r\n-            transformRE.test(styles[transitionProp + 'Property']);\r\n-        return {\r\n-            type: type,\r\n-            timeout: timeout,\r\n-            propCount: propCount,\r\n-            hasTransform: hasTransform\r\n-        }\r\n-    }\r\n-\r\n-    function getTimeout (delays, durations) {\r\n-      \u002F* istanbul ignore next *\u002F\r\n-        while (delays.length \u003C durations.length) {\r\n-            delays = delays.concat(delays);\r\n-        }\r\n-\r\n-        return Math.max.apply(null, durations.map(function (d, i) {\r\n-            return toMs(d) + toMs(delays[i])\r\n-        }))\r\n-    }\r\n-\r\n-    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\r\n-    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\r\n-    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\r\n-    \u002F\u002F as a floor function) causing unexpected behaviors\r\n-    function toMs (s) {\r\n-        return Number(s.slice(0, -1).replace(',', '.')) * 1000\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function enter (vnode, toggleDisplay) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call leave callback now\r\n-        if (isDef(el._leaveCb)) {\r\n-            el._leaveCb.cancelled = true;\r\n-            el._leaveCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data)) {\r\n-            return\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._enterCb) || el.nodeType !== 1) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var enterClass = data.enterClass;\r\n-        var enterToClass = data.enterToClass;\r\n-        var enterActiveClass = data.enterActiveClass;\r\n-        var appearClass = data.appearClass;\r\n-        var appearToClass = data.appearToClass;\r\n-        var appearActiveClass = data.appearActiveClass;\r\n-        var beforeEnter = data.beforeEnter;\r\n-        var enter = data.enter;\r\n-        var afterEnter = data.afterEnter;\r\n-        var enterCancelled = data.enterCancelled;\r\n-        var beforeAppear = data.beforeAppear;\r\n-        var appear = data.appear;\r\n-        var afterAppear = data.afterAppear;\r\n-        var appearCancelled = data.appearCancelled;\r\n-        var duration = data.duration;\r\n-\r\n-        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\r\n-        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\r\n-        \u002F\u002F as the root node of a child component. In that case we need to check\r\n-        \u002F\u002F \u003Ctransition>'s parent for appear check.\r\n-        var context = activeInstance;\r\n-        var transitionNode = activeInstance.$vnode;\r\n-        while (transitionNode && transitionNode.parent) {\r\n-            context = transitionNode.context;\r\n-            transitionNode = transitionNode.parent;\r\n-        }\r\n-\r\n-        var isAppear = !context._isMounted || !vnode.isRootInsert;\r\n-\r\n-        if (isAppear && !appear && appear !== '') {\r\n-            return\r\n-        }\r\n-\r\n-        var startClass = isAppear && appearClass\r\n-            ? appearClass\r\n-            : enterClass;\r\n-        var activeClass = isAppear && appearActiveClass\r\n-            ? appearActiveClass\r\n-            : enterActiveClass;\r\n-        var toClass = isAppear && appearToClass\r\n-            ? appearToClass\r\n-            : enterToClass;\r\n-\r\n-        var beforeEnterHook = isAppear\r\n-            ? (beforeAppear || beforeEnter)\r\n-            : beforeEnter;\r\n-        var enterHook = isAppear\r\n-            ? (typeof appear === 'function' ? appear : enter)\r\n-            : enter;\r\n-        var afterEnterHook = isAppear\r\n-            ? (afterAppear || afterEnter)\r\n-            : afterEnter;\r\n-        var enterCancelledHook = isAppear\r\n-            ? (appearCancelled || enterCancelled)\r\n-            : enterCancelled;\r\n-\r\n-        var explicitEnterDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.enter\r\n-                : duration\r\n-        );\r\n-\r\n-        if (explicitEnterDuration != null) {\r\n-            checkDuration(explicitEnterDuration, 'enter', vnode);\r\n-        }\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(enterHook);\r\n-\r\n-        var cb = el._enterCb = once(function () {\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, toClass);\r\n-                removeTransitionClass(el, activeClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, startClass);\r\n-                }\r\n-                enterCancelledHook && enterCancelledHook(el);\r\n-            } else {\r\n-                afterEnterHook && afterEnterHook(el);\r\n-            }\r\n-            el._enterCb = null;\r\n-        });\r\n-\r\n-        if (!vnode.data.show) {\r\n-            \u002F\u002F remove pending leave element on enter by injecting an insert hook\r\n-            mergeVNodeHook(vnode, 'insert', function () {\r\n-                var parent = el.parentNode;\r\n-                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\r\n-                if (pendingNode &&\r\n-                    pendingNode.tag === vnode.tag &&\r\n-                    pendingNode.elm._leaveCb\r\n-                ) {\r\n-                    pendingNode.elm._leaveCb();\r\n-                }\r\n-                enterHook && enterHook(el, cb);\r\n-            });\r\n-        }\r\n-\r\n-        \u002F\u002F start enter transition\r\n-        beforeEnterHook && beforeEnterHook(el);\r\n-        if (expectsCSS) {\r\n-            addTransitionClass(el, startClass);\r\n-            addTransitionClass(el, activeClass);\r\n-            nextFrame(function () {\r\n-                removeTransitionClass(el, startClass);\r\n-                if (!cb.cancelled) {\r\n-                    addTransitionClass(el, toClass);\r\n-                    if (!userWantsControl) {\r\n-                        if (isValidDuration(explicitEnterDuration)) {\r\n-                            setTimeout(cb, explicitEnterDuration);\r\n-                        } else {\r\n-                            whenTransitionEnds(el, type, cb);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            });\r\n-        }\r\n-\r\n-        if (vnode.data.show) {\r\n-            toggleDisplay && toggleDisplay();\r\n-            enterHook && enterHook(el, cb);\r\n-        }\r\n-\r\n-        if (!expectsCSS && !userWantsControl) {\r\n-            cb();\r\n-        }\r\n-    }\r\n-\r\n-    function leave (vnode, rm) {\r\n-        var el = vnode.elm;\r\n-\r\n-        \u002F\u002F call enter callback now\r\n-        if (isDef(el._enterCb)) {\r\n-            el._enterCb.cancelled = true;\r\n-            el._enterCb();\r\n-        }\r\n-\r\n-        var data = resolveTransition(vnode.data.transition);\r\n-        if (isUndef(data) || el.nodeType !== 1) {\r\n-            return rm()\r\n-        }\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isDef(el._leaveCb)) {\r\n-            return\r\n-        }\r\n-\r\n-        var css = data.css;\r\n-        var type = data.type;\r\n-        var leaveClass = data.leaveClass;\r\n-        var leaveToClass = data.leaveToClass;\r\n-        var leaveActiveClass = data.leaveActiveClass;\r\n-        var beforeLeave = data.beforeLeave;\r\n-        var leave = data.leave;\r\n-        var afterLeave = data.afterLeave;\r\n-        var leaveCancelled = data.leaveCancelled;\r\n-        var delayLeave = data.delayLeave;\r\n-        var duration = data.duration;\r\n-\r\n-        var expectsCSS = css !== false && !isIE9;\r\n-        var userWantsControl = getHookArgumentsLength(leave);\r\n-\r\n-        var explicitLeaveDuration = toNumber(\r\n-            isObject(duration)\r\n-                ? duration.leave\r\n-                : duration\r\n-        );\r\n-\r\n-        if (isDef(explicitLeaveDuration)) {\r\n-            checkDuration(explicitLeaveDuration, 'leave', vnode);\r\n-        }\r\n-\r\n-        var cb = el._leaveCb = once(function () {\r\n-            if (el.parentNode && el.parentNode._pending) {\r\n-                el.parentNode._pending[vnode.key] = null;\r\n-            }\r\n-            if (expectsCSS) {\r\n-                removeTransitionClass(el, leaveToClass);\r\n-                removeTransitionClass(el, leaveActiveClass);\r\n-            }\r\n-            if (cb.cancelled) {\r\n-                if (expectsCSS) {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                }\r\n-                leaveCancelled && leaveCancelled(el);\r\n-            } else {\r\n-                rm();\r\n-                afterLeave && afterLeave(el);\r\n-            }\r\n-            el._leaveCb = null;\r\n-        });\r\n-\r\n-        if (delayLeave) {\r\n-            delayLeave(performLeave);\r\n-        } else {\r\n-            performLeave();\r\n-        }\r\n-\r\n-        function performLeave () {\r\n-            \u002F\u002F the delayed leave may have already been cancelled\r\n-            if (cb.cancelled) {\r\n-                return\r\n-            }\r\n-            \u002F\u002F record leaving element\r\n-            if (!vnode.data.show && el.parentNode) {\r\n-                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\r\n-            }\r\n-            beforeLeave && beforeLeave(el);\r\n-            if (expectsCSS) {\r\n-                addTransitionClass(el, leaveClass);\r\n-                addTransitionClass(el, leaveActiveClass);\r\n-                nextFrame(function () {\r\n-                    removeTransitionClass(el, leaveClass);\r\n-                    if (!cb.cancelled) {\r\n-                        addTransitionClass(el, leaveToClass);\r\n-                        if (!userWantsControl) {\r\n-                            if (isValidDuration(explicitLeaveDuration)) {\r\n-                                setTimeout(cb, explicitLeaveDuration);\r\n-                            } else {\r\n-                                whenTransitionEnds(el, type, cb);\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                });\r\n-            }\r\n-            leave && leave(el, cb);\r\n-            if (!expectsCSS && !userWantsControl) {\r\n-                cb();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F only used in dev mode\r\n-    function checkDuration (val, name, vnode) {\r\n-        if (typeof val !== 'number') {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\r\n-                \"got \" + (JSON.stringify(val)) + \".\",\r\n-                vnode.context\r\n-            );\r\n-        } else if (isNaN(val)) {\r\n-            warn(\r\n-                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\r\n-                'the duration expression might be incorrect.',\r\n-                vnode.context\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function isValidDuration (val) {\r\n-        return typeof val === 'number' && !isNaN(val)\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Normalize a transition hook's argument length. The hook may be:\r\n-     * - a merged hook (invoker) with the original in .fns\r\n-     * - a wrapped component method (check ._length)\r\n-     * - a plain function (.length)\r\n-     *\u002F\r\n-    function getHookArgumentsLength (fn) {\r\n-        if (isUndef(fn)) {\r\n-            return false\r\n-        }\r\n-        var invokerFns = fn.fns;\r\n-        if (isDef(invokerFns)) {\r\n-            \u002F\u002F invoker\r\n-            return getHookArgumentsLength(\r\n-                Array.isArray(invokerFns)\r\n-                    ? invokerFns[0]\r\n-                    : invokerFns\r\n-            )\r\n-        } else {\r\n-            return (fn._length || fn.length) > 1\r\n-        }\r\n-    }\r\n-\r\n-    function _enter (_, vnode) {\r\n-        if (vnode.data.show !== true) {\r\n-            enter(vnode);\r\n-        }\r\n-    }\r\n-\r\n-    var transition = inBrowser ? {\r\n-        create: _enter,\r\n-        activate: _enter,\r\n-        remove: function remove$$1 (vnode, rm) {\r\n-          \u002F* istanbul ignore else *\u002F\r\n-            if (vnode.data.show !== true) {\r\n-                leave(vnode, rm);\r\n-            } else {\r\n-                rm();\r\n-            }\r\n-        }\r\n-    } : {};\r\n-\r\n-    var platformModules = [\r\n-        attrs,\r\n-        klass,\r\n-        events,\r\n-        domProps,\r\n-        style,\r\n-        transition\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F the directive module should be applied last, after all\r\n-    \u002F\u002F built-in modules have been applied.\r\n-    var modules = platformModules.concat(baseModules);\r\n-\r\n-    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\r\n-\r\n-    \u002F**\r\n-     * Not type checking this file because flow doesn't like attaching\r\n-     * properties to Elements.\r\n-     *\u002F\r\n-\r\n-  \u002F* istanbul ignore if *\u002F\r\n-    if (isIE9) {\r\n-        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\r\n-        document.addEventListener('selectionchange', function () {\r\n-            var el = document.activeElement;\r\n-            if (el && el.vmodel) {\r\n-                trigger(el, 'input');\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    var directive = {\r\n-        inserted: function inserted (el, binding, vnode, oldVnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                \u002F\u002F #6903\r\n-                if (oldVnode.elm && !oldVnode.elm._vOptions) {\r\n-                    mergeVNodeHook(vnode, 'postpatch', function () {\r\n-                        directive.componentUpdated(el, binding, vnode);\r\n-                    });\r\n-                } else {\r\n-                    setSelected(el, binding, vnode.context);\r\n-                }\r\n-                el._vOptions = [].map.call(el.options, getValue);\r\n-            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\r\n-                el._vModifiers = binding.modifiers;\r\n-                if (!binding.modifiers.lazy) {\r\n-                    el.addEventListener('compositionstart', onCompositionStart);\r\n-                    el.addEventListener('compositionend', onCompositionEnd);\r\n-                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\r\n-                    \u002F\u002F switching focus before confirming composition choice\r\n-                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\r\n-                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\r\n-                    el.addEventListener('change', onCompositionEnd);\r\n-                  \u002F* istanbul ignore if *\u002F\r\n-                    if (isIE9) {\r\n-                        el.vmodel = true;\r\n-                    }\r\n-                }\r\n-            }\r\n-        },\r\n-\r\n-        componentUpdated: function componentUpdated (el, binding, vnode) {\r\n-            if (vnode.tag === 'select') {\r\n-                setSelected(el, binding, vnode.context);\r\n-                \u002F\u002F in case the options rendered by v-for have changed,\r\n-                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\r\n-                \u002F\u002F detect such cases and filter out values that no longer has a matching\r\n-                \u002F\u002F option in the DOM.\r\n-                var prevOptions = el._vOptions;\r\n-                var curOptions = el._vOptions = [].map.call(el.options, getValue);\r\n-                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\r\n-                    \u002F\u002F trigger change event if\r\n-                    \u002F\u002F no matching option found for at least one value\r\n-                    var needReset = el.multiple\r\n-                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\r\n-                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\r\n-                    if (needReset) {\r\n-                        trigger(el, 'change');\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function setSelected (el, binding, vm) {\r\n-        actuallySetSelected(el, binding, vm);\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (isIE || isEdge) {\r\n-            setTimeout(function () {\r\n-                actuallySetSelected(el, binding, vm);\r\n-            }, 0);\r\n-        }\r\n-    }\r\n-\r\n-    function actuallySetSelected (el, binding, vm) {\r\n-        var value = binding.value;\r\n-        var isMultiple = el.multiple;\r\n-        if (isMultiple && !Array.isArray(value)) {\r\n-            warn(\r\n-                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\r\n-                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\r\n-                vm\r\n-            );\r\n-            return\r\n-        }\r\n-        var selected, option;\r\n-        for (var i = 0, l = el.options.length; i \u003C l; i++) {\r\n-            option = el.options[i];\r\n-            if (isMultiple) {\r\n-                selected = looseIndexOf(value, getValue(option)) > -1;\r\n-                if (option.selected !== selected) {\r\n-                    option.selected = selected;\r\n-                }\r\n-            } else {\r\n-                if (looseEqual(getValue(option), value)) {\r\n-                    if (el.selectedIndex !== i) {\r\n-                        el.selectedIndex = i;\r\n-                    }\r\n-                    return\r\n-                }\r\n-            }\r\n-        }\r\n-        if (!isMultiple) {\r\n-            el.selectedIndex = -1;\r\n-        }\r\n-    }\r\n-\r\n-    function hasNoMatchingOption (value, options) {\r\n-        return options.every(function (o) { return !looseEqual(o, value); })\r\n-    }\r\n-\r\n-    function getValue (option) {\r\n-        return '_value' in option\r\n-            ? option._value\r\n-            : option.value\r\n-    }\r\n-\r\n-    function onCompositionStart (e) {\r\n-        e.target.composing = true;\r\n-    }\r\n-\r\n-    function onCompositionEnd (e) {\r\n-        \u002F\u002F prevent triggering an input event for no reason\r\n-        if (!e.target.composing) { return }\r\n-        e.target.composing = false;\r\n-        trigger(e.target, 'input');\r\n-    }\r\n-\r\n-    function trigger (el, type) {\r\n-        var e = document.createEvent('HTMLEvents');\r\n-        e.initEvent(type, true, true);\r\n-        el.dispatchEvent(e);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F recursively search for possible transition defined inside the component root\r\n-    function locateNode (vnode) {\r\n-        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\r\n-            ? locateNode(vnode.componentInstance._vnode)\r\n-            : vnode\r\n-    }\r\n-\r\n-    var show = {\r\n-        bind: function bind (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            var originalDisplay = el.__vOriginalDisplay =\r\n-                el.style.display === 'none' ? '' : el.style.display;\r\n-            if (value && transition$$1) {\r\n-                vnode.data.show = true;\r\n-                enter(vnode, function () {\r\n-                    el.style.display = originalDisplay;\r\n-                });\r\n-            } else {\r\n-                el.style.display = value ? originalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        update: function update (el, ref, vnode) {\r\n-            var value = ref.value;\r\n-            var oldValue = ref.oldValue;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!value === !oldValue) { return }\r\n-            vnode = locateNode(vnode);\r\n-            var transition$$1 = vnode.data && vnode.data.transition;\r\n-            if (transition$$1) {\r\n-                vnode.data.show = true;\r\n-                if (value) {\r\n-                    enter(vnode, function () {\r\n-                        el.style.display = el.__vOriginalDisplay;\r\n-                    });\r\n-                } else {\r\n-                    leave(vnode, function () {\r\n-                        el.style.display = 'none';\r\n-                    });\r\n-                }\r\n-            } else {\r\n-                el.style.display = value ? el.__vOriginalDisplay : 'none';\r\n-            }\r\n-        },\r\n-\r\n-        unbind: function unbind (\r\n-            el,\r\n-            binding,\r\n-            vnode,\r\n-            oldVnode,\r\n-            isDestroy\r\n-        ) {\r\n-            if (!isDestroy) {\r\n-                el.style.display = el.__vOriginalDisplay;\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    var platformDirectives = {\r\n-        model: directive,\r\n-        show: show\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var transitionProps = {\r\n-        name: String,\r\n-        appear: Boolean,\r\n-        css: Boolean,\r\n-        mode: String,\r\n-        type: String,\r\n-        enterClass: String,\r\n-        leaveClass: String,\r\n-        enterToClass: String,\r\n-        leaveToClass: String,\r\n-        enterActiveClass: String,\r\n-        leaveActiveClass: String,\r\n-        appearClass: String,\r\n-        appearActiveClass: String,\r\n-        appearToClass: String,\r\n-        duration: [Number, String, Object]\r\n-    };\r\n-\r\n-    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\r\n-    \u002F\u002F we want to recursively retrieve the real component to be rendered\r\n-    function getRealChild (vnode) {\r\n-        var compOptions = vnode && vnode.componentOptions;\r\n-        if (compOptions && compOptions.Ctor.options.abstract) {\r\n-            return getRealChild(getFirstComponentChild(compOptions.children))\r\n-        } else {\r\n-            return vnode\r\n-        }\r\n-    }\r\n-\r\n-    function extractTransitionData (comp) {\r\n-        var data = {};\r\n-        var options = comp.$options;\r\n-        \u002F\u002F props\r\n-        for (var key in options.propsData) {\r\n-            data[key] = comp[key];\r\n-        }\r\n-        \u002F\u002F events.\r\n-        \u002F\u002F extract listeners and pass them directly to the transition methods\r\n-        var listeners = options._parentListeners;\r\n-        for (var key$1 in listeners) {\r\n-            data[camelize(key$1)] = listeners[key$1];\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function placeholder (h, rawChild) {\r\n-        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\r\n-            return h('keep-alive', {\r\n-                props: rawChild.componentOptions.propsData\r\n-            })\r\n-        }\r\n-    }\r\n-\r\n-    function hasParentTransition (vnode) {\r\n-        while ((vnode = vnode.parent)) {\r\n-            if (vnode.data.transition) {\r\n-                return true\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isSameChild (child, oldChild) {\r\n-        return oldChild.key === child.key && oldChild.tag === child.tag\r\n-    }\r\n-\r\n-    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\r\n-\r\n-    var isVShowDirective = function (d) { return d.name === 'show'; };\r\n-\r\n-    var Transition = {\r\n-        name: 'transition',\r\n-        props: transitionProps,\r\n-        abstract: true,\r\n-\r\n-        render: function render (h) {\r\n-            var this$1 = this;\r\n-\r\n-            var children = this.$slots.default;\r\n-            if (!children) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F filter out text nodes (possible whitespaces)\r\n-            children = children.filter(isNotTextNode);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!children.length) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F warn multiple elements\r\n-            if (children.length > 1) {\r\n-                warn(\r\n-                    '\u003Ctransition> can only be used on a single element. Use ' +\r\n-                    '\u003Ctransition-group> for lists.',\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var mode = this.mode;\r\n-\r\n-            \u002F\u002F warn invalid mode\r\n-            if (mode && mode !== 'in-out' && mode !== 'out-in'\r\n-            ) {\r\n-                warn(\r\n-                    'invalid \u003Ctransition> mode: ' + mode,\r\n-                    this.$parent\r\n-                );\r\n-            }\r\n-\r\n-            var rawChild = children[0];\r\n-\r\n-            \u002F\u002F if this is a component root node and the component's\r\n-            \u002F\u002F parent container node also has transition, skip.\r\n-            if (hasParentTransition(this.$vnode)) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            \u002F\u002F apply transition data to child\r\n-            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\r\n-            var child = getRealChild(rawChild);\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (!child) {\r\n-                return rawChild\r\n-            }\r\n-\r\n-            if (this._leaving) {\r\n-                return placeholder(h, rawChild)\r\n-            }\r\n-\r\n-            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\r\n-            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\r\n-            \u002F\u002F during entering.\r\n-            var id = \"__transition-\" + (this._uid) + \"-\";\r\n-            child.key = child.key == null\r\n-                ? child.isComment\r\n-                    ? id + 'comment'\r\n-                    : id + child.tag\r\n-                : isPrimitive(child.key)\r\n-                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\r\n-                    : child.key;\r\n-\r\n-            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\r\n-            var oldRawChild = this._vnode;\r\n-            var oldChild = getRealChild(oldRawChild);\r\n-\r\n-            \u002F\u002F mark v-show\r\n-            \u002F\u002F so that the transition module can hand over the control to the directive\r\n-            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\r\n-                child.data.show = true;\r\n-            }\r\n-\r\n-            if (\r\n-                oldChild &&\r\n-                oldChild.data &&\r\n-                !isSameChild(child, oldChild) &&\r\n-                !isAsyncPlaceholder(oldChild) &&\r\n-                \u002F\u002F #6687 component root is a comment node\r\n-                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\r\n-            ) {\r\n-                \u002F\u002F replace old child transition data with fresh one\r\n-                \u002F\u002F important for dynamic transitions!\r\n-                var oldData = oldChild.data.transition = extend({}, data);\r\n-                \u002F\u002F handle transition mode\r\n-                if (mode === 'out-in') {\r\n-                    \u002F\u002F return placeholder node and queue update when leave finishes\r\n-                    this._leaving = true;\r\n-                    mergeVNodeHook(oldData, 'afterLeave', function () {\r\n-                        this$1._leaving = false;\r\n-                        this$1.$forceUpdate();\r\n-                    });\r\n-                    return placeholder(h, rawChild)\r\n-                } else if (mode === 'in-out') {\r\n-                    if (isAsyncPlaceholder(child)) {\r\n-                        return oldRawChild\r\n-                    }\r\n-                    var delayedLeave;\r\n-                    var performLeave = function () { delayedLeave(); };\r\n-                    mergeVNodeHook(data, 'afterEnter', performLeave);\r\n-                    mergeVNodeHook(data, 'enterCancelled', performLeave);\r\n-                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\r\n-                }\r\n-            }\r\n-\r\n-            return rawChild\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var props = extend({\r\n-        tag: String,\r\n-        moveClass: String\r\n-    }, transitionProps);\r\n-\r\n-    delete props.mode;\r\n-\r\n-    var TransitionGroup = {\r\n-        props: props,\r\n-\r\n-        beforeMount: function beforeMount () {\r\n-            var this$1 = this;\r\n-\r\n-            var update = this._update;\r\n-            this._update = function (vnode, hydrating) {\r\n-                var restoreActiveInstance = setActiveInstance(this$1);\r\n-                \u002F\u002F force removing pass\r\n-                this$1.__patch__(\r\n-                    this$1._vnode,\r\n-                    this$1.kept,\r\n-                    false, \u002F\u002F hydrating\r\n-                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\r\n-                );\r\n-                this$1._vnode = this$1.kept;\r\n-                restoreActiveInstance();\r\n-                update.call(this$1, vnode, hydrating);\r\n-            };\r\n-        },\r\n-\r\n-        render: function render (h) {\r\n-            var tag = this.tag || this.$vnode.data.tag || 'span';\r\n-            var map = Object.create(null);\r\n-            var prevChildren = this.prevChildren = this.children;\r\n-            var rawChildren = this.$slots.default || [];\r\n-            var children = this.children = [];\r\n-            var transitionData = extractTransitionData(this);\r\n-\r\n-            for (var i = 0; i \u003C rawChildren.length; i++) {\r\n-                var c = rawChildren[i];\r\n-                if (c.tag) {\r\n-                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\r\n-                        children.push(c);\r\n-                        map[c.key] = c\r\n-                        ;(c.data || (c.data = {})).transition = transitionData;\r\n-                    } else {\r\n-                        var opts = c.componentOptions;\r\n-                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\r\n-                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            if (prevChildren) {\r\n-                var kept = [];\r\n-                var removed = [];\r\n-                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\r\n-                    var c$1 = prevChildren[i$1];\r\n-                    c$1.data.transition = transitionData;\r\n-                    c$1.data.pos = c$1.elm.getBoundingClientRect();\r\n-                    if (map[c$1.key]) {\r\n-                        kept.push(c$1);\r\n-                    } else {\r\n-                        removed.push(c$1);\r\n-                    }\r\n-                }\r\n-                this.kept = h(tag, null, kept);\r\n-                this.removed = removed;\r\n-            }\r\n-\r\n-            return h(tag, null, children)\r\n-        },\r\n-\r\n-        updated: function updated () {\r\n-            var children = this.prevChildren;\r\n-            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\r\n-            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\r\n-                return\r\n-            }\r\n-\r\n-            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\r\n-            \u002F\u002F in each iteration - which helps prevent layout thrashing.\r\n-            children.forEach(callPendingCbs);\r\n-            children.forEach(recordPosition);\r\n-            children.forEach(applyTranslation);\r\n-\r\n-            \u002F\u002F force reflow to put everything in position\r\n-            \u002F\u002F assign to this to avoid being removed in tree-shaking\r\n-            \u002F\u002F $flow-disable-line\r\n-            this._reflow = document.body.offsetHeight;\r\n-\r\n-            children.forEach(function (c) {\r\n-                if (c.data.moved) {\r\n-                    var el = c.elm;\r\n-                    var s = el.style;\r\n-                    addTransitionClass(el, moveClass);\r\n-                    s.transform = s.WebkitTransform = s.transitionDuration = '';\r\n-                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\r\n-                        if (e && e.target !== el) {\r\n-                            return\r\n-                        }\r\n-                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\r\n-                            el.removeEventListener(transitionEndEvent, cb);\r\n-                            el._moveCb = null;\r\n-                            removeTransitionClass(el, moveClass);\r\n-                        }\r\n-                    });\r\n-                }\r\n-            });\r\n-        },\r\n-\r\n-        methods: {\r\n-            hasMove: function hasMove (el, moveClass) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (!hasTransition) {\r\n-                    return false\r\n-                }\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (this._hasMove) {\r\n-                    return this._hasMove\r\n-                }\r\n-                \u002F\u002F Detect whether an element with the move class applied has\r\n-                \u002F\u002F CSS transitions. Since the element may be inside an entering\r\n-                \u002F\u002F transition at this very moment, we make a clone of it and remove\r\n-                \u002F\u002F all other transition classes applied to ensure only the move class\r\n-                \u002F\u002F is applied.\r\n-                var clone = el.cloneNode();\r\n-                if (el._transitionClasses) {\r\n-                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\r\n-                }\r\n-                addClass(clone, moveClass);\r\n-                clone.style.display = 'none';\r\n-                this.$el.appendChild(clone);\r\n-                var info = getTransitionInfo(clone);\r\n-                this.$el.removeChild(clone);\r\n-                return (this._hasMove = info.hasTransform)\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    function callPendingCbs (c) {\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._moveCb) {\r\n-            c.elm._moveCb();\r\n-        }\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (c.elm._enterCb) {\r\n-            c.elm._enterCb();\r\n-        }\r\n-    }\r\n-\r\n-    function recordPosition (c) {\r\n-        c.data.newPos = c.elm.getBoundingClientRect();\r\n-    }\r\n-\r\n-    function applyTranslation (c) {\r\n-        var oldPos = c.data.pos;\r\n-        var newPos = c.data.newPos;\r\n-        var dx = oldPos.left - newPos.left;\r\n-        var dy = oldPos.top - newPos.top;\r\n-        if (dx || dy) {\r\n-            c.data.moved = true;\r\n-            var s = c.elm.style;\r\n-            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\r\n-            s.transitionDuration = '0s';\r\n-        }\r\n-    }\r\n-\r\n-    var platformComponents = {\r\n-        Transition: Transition,\r\n-        TransitionGroup: TransitionGroup\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F install platform specific utils\r\n-    Vue.config.mustUseProp = mustUseProp;\r\n-    Vue.config.isReservedTag = isReservedTag;\r\n-    Vue.config.isReservedAttr = isReservedAttr;\r\n-    Vue.config.getTagNamespace = getTagNamespace;\r\n-    Vue.config.isUnknownElement = isUnknownElement;\r\n-\r\n-    \u002F\u002F install platform runtime directives & components\r\n-    extend(Vue.options.directives, platformDirectives);\r\n-    extend(Vue.options.components, platformComponents);\r\n-\r\n-    \u002F\u002F install platform patch function\r\n-    Vue.prototype.__patch__ = inBrowser ? patch : noop;\r\n-\r\n-    \u002F\u002F public mount method\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && inBrowser ? query(el) : undefined;\r\n-        return mountComponent(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F\u002F devtools global hook\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    if (inBrowser) {\r\n-        setTimeout(function () {\r\n-            if (config.devtools) {\r\n-                if (devtools) {\r\n-                    devtools.emit('init', Vue);\r\n-                } else {\r\n-                    console[console.info ? 'info' : 'log'](\r\n-                        'Download the Vue Devtools extension for a better development experience:\\n' +\r\n-                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (config.productionTip !== false &&\r\n-                typeof console !== 'undefined'\r\n-            ) {\r\n-                console[console.info ? 'info' : 'log'](\r\n-                    \"You are running Vue in development mode.\\n\" +\r\n-                    \"Make sure to turn on production mode when deploying for production.\\n\" +\r\n-                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\r\n-                );\r\n-            }\r\n-        }, 0);\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\r\n-    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\r\n-\r\n-    var buildRegex = cached(function (delimiters) {\r\n-        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\r\n-        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\r\n-        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\r\n-    });\r\n-\r\n-\r\n-\r\n-    function parseText (\r\n-        text,\r\n-        delimiters\r\n-    ) {\r\n-        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\r\n-        if (!tagRE.test(text)) {\r\n-            return\r\n-        }\r\n-        var tokens = [];\r\n-        var rawTokens = [];\r\n-        var lastIndex = tagRE.lastIndex = 0;\r\n-        var match, index, tokenValue;\r\n-        while ((match = tagRE.exec(text))) {\r\n-            index = match.index;\r\n-            \u002F\u002F push text token\r\n-            if (index > lastIndex) {\r\n-                rawTokens.push(tokenValue = text.slice(lastIndex, index));\r\n-                tokens.push(JSON.stringify(tokenValue));\r\n-            }\r\n-            \u002F\u002F tag token\r\n-            var exp = parseFilters(match[1].trim());\r\n-            tokens.push((\"_s(\" + exp + \")\"));\r\n-            rawTokens.push({ '@binding': exp });\r\n-            lastIndex = index + match[0].length;\r\n-        }\r\n-        if (lastIndex \u003C text.length) {\r\n-            rawTokens.push(tokenValue = text.slice(lastIndex));\r\n-            tokens.push(JSON.stringify(tokenValue));\r\n-        }\r\n-        return {\r\n-            expression: tokens.join('+'),\r\n-            tokens: rawTokens\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticClass = getAndRemoveAttr(el, 'class');\r\n-        if (staticClass) {\r\n-            var res = parseText(staticClass, options.delimiters);\r\n-            if (res) {\r\n-                warn(\r\n-                    \"class=\\\"\" + staticClass + \"\\\": \" +\r\n-                    'Interpolation inside attributes has been removed. ' +\r\n-                    'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\r\n-                    el.rawAttrsMap['class']\r\n-                );\r\n-            }\r\n-        }\r\n-        if (staticClass) {\r\n-            el.staticClass = JSON.stringify(staticClass);\r\n-        }\r\n-        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\r\n-        if (classBinding) {\r\n-            el.classBinding = classBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData (el) {\r\n-        var data = '';\r\n-        if (el.staticClass) {\r\n-            data += \"staticClass:\" + (el.staticClass) + \",\";\r\n-        }\r\n-        if (el.classBinding) {\r\n-            data += \"class:\" + (el.classBinding) + \",\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var klass$1 = {\r\n-        staticKeys: ['staticClass'],\r\n-        transformNode: transformNode,\r\n-        genData: genData\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function transformNode$1 (el, options) {\r\n-        var warn = options.warn || baseWarn;\r\n-        var staticStyle = getAndRemoveAttr(el, 'style');\r\n-        if (staticStyle) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                var res = parseText(staticStyle, options.delimiters);\r\n-                if (res) {\r\n-                    warn(\r\n-                        \"style=\\\"\" + staticStyle + \"\\\": \" +\r\n-                        'Interpolation inside attributes has been removed. ' +\r\n-                        'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\r\n-                        el.rawAttrsMap['style']\r\n-                    );\r\n-                }\r\n-            }\r\n-            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\r\n-        }\r\n-\r\n-        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\r\n-        if (styleBinding) {\r\n-            el.styleBinding = styleBinding;\r\n-        }\r\n-    }\r\n-\r\n-    function genData$1 (el) {\r\n-        var data = '';\r\n-        if (el.staticStyle) {\r\n-            data += \"staticStyle:\" + (el.staticStyle) + \",\";\r\n-        }\r\n-        if (el.styleBinding) {\r\n-            data += \"style:(\" + (el.styleBinding) + \"),\";\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    var style$1 = {\r\n-        staticKeys: ['staticStyle'],\r\n-        transformNode: transformNode$1,\r\n-        genData: genData$1\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var decoder;\r\n-\r\n-    var he = {\r\n-        decode: function decode (html) {\r\n-            decoder = decoder || document.createElement('div');\r\n-            decoder.innerHTML = html;\r\n-            return decoder.textContent\r\n-        }\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isUnaryTag = makeMap(\r\n-        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\r\n-        'link,meta,param,source,track,wbr'\r\n-    );\r\n-\r\n-    \u002F\u002F Elements that you can, intentionally, leave open\r\n-    \u002F\u002F (and which close themselves)\r\n-    var canBeLeftOpenTag = makeMap(\r\n-        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\r\n-    );\r\n-\r\n-    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\r\n-    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\r\n-    var isNonPhrasingTag = makeMap(\r\n-        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\r\n-        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\r\n-        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\r\n-        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\r\n-        'title,tr,track'\r\n-    );\r\n-\r\n-    \u002F**\r\n-     * Not type-checking this file because it's mostly vendor code.\r\n-     *\u002F\r\n-\r\n-        \u002F\u002F Regular Expressions for parsing tags and attributes\r\n-    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\r\n-    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\r\n-    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\r\n-    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\r\n-    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\r\n-    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\r\n-    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\r\n-    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\r\n-    var comment = \u002F^\u003C!\\--\u002F;\r\n-    var conditionalComment = \u002F^\u003C!\\[\u002F;\r\n-\r\n-    \u002F\u002F Special Elements (can contain anything)\r\n-    var isPlainTextElement = makeMap('script,style,textarea', true);\r\n-    var reCache = {};\r\n-\r\n-    var decodingMap = {\r\n-        '&lt;': '\u003C',\r\n-        '&gt;': '>',\r\n-        '&quot;': '\"',\r\n-        '&amp;': '&',\r\n-        '&#10;': '\\n',\r\n-        '&#9;': '\\t',\r\n-        '&#39;': \"'\"\r\n-    };\r\n-    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\r\n-    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\r\n-\r\n-    \u002F\u002F #5992\r\n-    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\r\n-    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\r\n-\r\n-    function decodeAttr (value, shouldDecodeNewlines) {\r\n-        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\r\n-        return value.replace(re, function (match) { return decodingMap[match]; })\r\n-    }\r\n-\r\n-    function parseHTML (html, options) {\r\n-        var stack = [];\r\n-        var expectHTML = options.expectHTML;\r\n-        var isUnaryTag$$1 = options.isUnaryTag || no;\r\n-        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\r\n-        var index = 0;\r\n-        var last, lastTag;\r\n-        while (html) {\r\n-            last = html;\r\n-            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\r\n-            if (!lastTag || !isPlainTextElement(lastTag)) {\r\n-                var textEnd = html.indexOf('\u003C');\r\n-                if (textEnd === 0) {\r\n-                    \u002F\u002F Comment:\r\n-                    if (comment.test(html)) {\r\n-                        var commentEnd = html.indexOf('-->');\r\n-\r\n-                        if (commentEnd >= 0) {\r\n-                            if (options.shouldKeepComment) {\r\n-                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\r\n-                            }\r\n-                            advance(commentEnd + 3);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\r\n-                    if (conditionalComment.test(html)) {\r\n-                        var conditionalEnd = html.indexOf(']>');\r\n-\r\n-                        if (conditionalEnd >= 0) {\r\n-                            advance(conditionalEnd + 2);\r\n-                            continue\r\n-                        }\r\n-                    }\r\n-\r\n-                    \u002F\u002F Doctype:\r\n-                    var doctypeMatch = html.match(doctype);\r\n-                    if (doctypeMatch) {\r\n-                        advance(doctypeMatch[0].length);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F End tag:\r\n-                    var endTagMatch = html.match(endTag);\r\n-                    if (endTagMatch) {\r\n-                        var curIndex = index;\r\n-                        advance(endTagMatch[0].length);\r\n-                        parseEndTag(endTagMatch[1], curIndex, index);\r\n-                        continue\r\n-                    }\r\n-\r\n-                    \u002F\u002F Start tag:\r\n-                    var startTagMatch = parseStartTag();\r\n-                    if (startTagMatch) {\r\n-                        handleStartTag(startTagMatch);\r\n-                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\r\n-                            advance(1);\r\n-                        }\r\n-                        continue\r\n-                    }\r\n-                }\r\n-\r\n-                var text = (void 0), rest = (void 0), next = (void 0);\r\n-                if (textEnd >= 0) {\r\n-                    rest = html.slice(textEnd);\r\n-                    while (\r\n-                    !endTag.test(rest) &&\r\n-                    !startTagOpen.test(rest) &&\r\n-                    !comment.test(rest) &&\r\n-                    !conditionalComment.test(rest)\r\n-                        ) {\r\n-                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\r\n-                        next = rest.indexOf('\u003C', 1);\r\n-                        if (next \u003C 0) { break }\r\n-                        textEnd += next;\r\n-                        rest = html.slice(textEnd);\r\n-                    }\r\n-                    text = html.substring(0, textEnd);\r\n-                }\r\n-\r\n-                if (textEnd \u003C 0) {\r\n-                    text = html;\r\n-                }\r\n-\r\n-                if (text) {\r\n-                    advance(text.length);\r\n-                }\r\n-\r\n-                if (options.chars && text) {\r\n-                    options.chars(text, index - text.length, index);\r\n-                }\r\n-            } else {\r\n-                var endTagLength = 0;\r\n-                var stackedTag = lastTag.toLowerCase();\r\n-                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\r\n-                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\r\n-                    endTagLength = endTag.length;\r\n-                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\r\n-                        text = text\r\n-                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\r\n-                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\r\n-                    }\r\n-                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\r\n-                        text = text.slice(1);\r\n-                    }\r\n-                    if (options.chars) {\r\n-                        options.chars(text);\r\n-                    }\r\n-                    return ''\r\n-                });\r\n-                index += html.length - rest$1.length;\r\n-                html = rest$1;\r\n-                parseEndTag(stackedTag, index - endTagLength, index);\r\n-            }\r\n-\r\n-            if (html === last) {\r\n-                options.chars && options.chars(html);\r\n-                if (!stack.length && options.warn) {\r\n-                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F Clean up any remaining tags\r\n-        parseEndTag();\r\n-\r\n-        function advance (n) {\r\n-            index += n;\r\n-            html = html.substring(n);\r\n-        }\r\n-\r\n-        function parseStartTag () {\r\n-            var start = html.match(startTagOpen);\r\n-            if (start) {\r\n-                var match = {\r\n-                    tagName: start[1],\r\n-                    attrs: [],\r\n-                    start: index\r\n-                };\r\n-                advance(start[0].length);\r\n-                var end, attr;\r\n-                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\r\n-                    attr.start = index;\r\n-                    advance(attr[0].length);\r\n-                    attr.end = index;\r\n-                    match.attrs.push(attr);\r\n-                }\r\n-                if (end) {\r\n-                    match.unarySlash = end[1];\r\n-                    advance(end[0].length);\r\n-                    match.end = index;\r\n-                    return match\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function handleStartTag (match) {\r\n-            var tagName = match.tagName;\r\n-            var unarySlash = match.unarySlash;\r\n-\r\n-            if (expectHTML) {\r\n-                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\r\n-                    parseEndTag(lastTag);\r\n-                }\r\n-                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\r\n-                    parseEndTag(tagName);\r\n-                }\r\n-            }\r\n-\r\n-            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\r\n-\r\n-            var l = match.attrs.length;\r\n-            var attrs = new Array(l);\r\n-            for (var i = 0; i \u003C l; i++) {\r\n-                var args = match.attrs[i];\r\n-                var value = args[3] || args[4] || args[5] || '';\r\n-                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\r\n-                    ? options.shouldDecodeNewlinesForHref\r\n-                    : options.shouldDecodeNewlines;\r\n-                attrs[i] = {\r\n-                    name: args[1],\r\n-                    value: decodeAttr(value, shouldDecodeNewlines)\r\n-                };\r\n-                if (options.outputSourceRange) {\r\n-                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\r\n-                    attrs[i].end = args.end;\r\n-                }\r\n-            }\r\n-\r\n-            if (!unary) {\r\n-                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\r\n-                lastTag = tagName;\r\n-            }\r\n-\r\n-            if (options.start) {\r\n-                options.start(tagName, attrs, unary, match.start, match.end);\r\n-            }\r\n-        }\r\n-\r\n-        function parseEndTag (tagName, start, end) {\r\n-            var pos, lowerCasedTagName;\r\n-            if (start == null) { start = index; }\r\n-            if (end == null) { end = index; }\r\n-\r\n-            \u002F\u002F Find the closest opened tag of the same type\r\n-            if (tagName) {\r\n-                lowerCasedTagName = tagName.toLowerCase();\r\n-                for (pos = stack.length - 1; pos >= 0; pos--) {\r\n-                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\r\n-                        break\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F If no tag name is provided, clean shop\r\n-                pos = 0;\r\n-            }\r\n-\r\n-            if (pos >= 0) {\r\n-                \u002F\u002F Close all the open elements, up the stack\r\n-                for (var i = stack.length - 1; i >= pos; i--) {\r\n-                    if (i > pos || !tagName &&\r\n-                        options.warn\r\n-                    ) {\r\n-                        options.warn(\r\n-                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\r\n-                            { start: stack[i].start, end: stack[i].end }\r\n-                        );\r\n-                    }\r\n-                    if (options.end) {\r\n-                        options.end(stack[i].tag, start, end);\r\n-                    }\r\n-                }\r\n-\r\n-                \u002F\u002F Remove the open elements from the stack\r\n-                stack.length = pos;\r\n-                lastTag = pos && stack[pos - 1].tag;\r\n-            } else if (lowerCasedTagName === 'br') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], true, start, end);\r\n-                }\r\n-            } else if (lowerCasedTagName === 'p') {\r\n-                if (options.start) {\r\n-                    options.start(tagName, [], false, start, end);\r\n-                }\r\n-                if (options.end) {\r\n-                    options.end(tagName, start, end);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var onRE = \u002F^@|^v-on:\u002F;\r\n-    var dirRE = \u002F^v-|^@|^:\u002F;\r\n-    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\r\n-    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\r\n-    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\r\n-    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\r\n-\r\n-    var argRE = \u002F:(.*)$\u002F;\r\n-    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\r\n-    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\r\n-\r\n-    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\r\n-\r\n-    var lineBreakRE = \u002F[\\r\\n]\u002F;\r\n-    var whitespaceRE$1 = \u002F\\s+\u002Fg;\r\n-\r\n-    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\r\n-\r\n-    var decodeHTMLCached = cached(he.decode);\r\n-\r\n-    var emptySlotScopeToken = \"_empty_\";\r\n-\r\n-    \u002F\u002F configurable state\r\n-    var warn$2;\r\n-    var delimiters;\r\n-    var transforms;\r\n-    var preTransforms;\r\n-    var postTransforms;\r\n-    var platformIsPreTag;\r\n-    var platformMustUseProp;\r\n-    var platformGetTagNamespace;\r\n-    var maybeComponent;\r\n-\r\n-    function createASTElement (\r\n-        tag,\r\n-        attrs,\r\n-        parent\r\n-    ) {\r\n-        return {\r\n-            type: 1,\r\n-            tag: tag,\r\n-            attrsList: attrs,\r\n-            attrsMap: makeAttrsMap(attrs),\r\n-            rawAttrsMap: {},\r\n-            parent: parent,\r\n-            children: []\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Convert HTML string to AST.\r\n-     *\u002F\r\n-    function parse (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        warn$2 = options.warn || baseWarn;\r\n-\r\n-        platformIsPreTag = options.isPreTag || no;\r\n-        platformMustUseProp = options.mustUseProp || no;\r\n-        platformGetTagNamespace = options.getTagNamespace || no;\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-\r\n-        transforms = pluckModuleFunction(options.modules, 'transformNode');\r\n-        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\r\n-        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\r\n-\r\n-        delimiters = options.delimiters;\r\n-\r\n-        var stack = [];\r\n-        var preserveWhitespace = options.preserveWhitespace !== false;\r\n-        var whitespaceOption = options.whitespace;\r\n-        var root;\r\n-        var currentParent;\r\n-        var inVPre = false;\r\n-        var inPre = false;\r\n-        var warned = false;\r\n-\r\n-        function warnOnce (msg, range) {\r\n-            if (!warned) {\r\n-                warned = true;\r\n-                warn$2(msg, range);\r\n-            }\r\n-        }\r\n-\r\n-        function closeElement (element) {\r\n-            trimEndingWhitespace(element);\r\n-            if (!inVPre && !element.processed) {\r\n-                element = processElement(element, options);\r\n-            }\r\n-            \u002F\u002F tree management\r\n-            if (!stack.length && element !== root) {\r\n-                \u002F\u002F allow root elements with v-if, v-else-if and v-else\r\n-                if (root.if && (element.elseif || element.else)) {\r\n-                    {\r\n-                        checkRootConstraints(element);\r\n-                    }\r\n-                    addIfCondition(root, {\r\n-                        exp: element.elseif,\r\n-                        block: element\r\n-                    });\r\n-                } else {\r\n-                    warnOnce(\r\n-                        \"Component template should contain exactly one root element. \" +\r\n-                        \"If you are using v-if on multiple elements, \" +\r\n-                        \"use v-else-if to chain them instead.\",\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-            }\r\n-            if (currentParent && !element.forbidden) {\r\n-                if (element.elseif || element.else) {\r\n-                    processIfConditions(element, currentParent);\r\n-                } else {\r\n-                    if (element.slotScope) {\r\n-                        \u002F\u002F scoped slot\r\n-                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\r\n-                        \u002F\u002F find it as the prev node.\r\n-                        var name = element.slotTarget || '\"default\"'\r\n-                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\r\n-                    }\r\n-                    currentParent.children.push(element);\r\n-                    element.parent = currentParent;\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F final children cleanup\r\n-            \u002F\u002F filter out scoped slots\r\n-            element.children = element.children.filter(function (c) { return !(c).slotScope; });\r\n-            \u002F\u002F remove trailing whitespace node again\r\n-            trimEndingWhitespace(element);\r\n-\r\n-            \u002F\u002F check pre state\r\n-            if (element.pre) {\r\n-                inVPre = false;\r\n-            }\r\n-            if (platformIsPreTag(element.tag)) {\r\n-                inPre = false;\r\n-            }\r\n-            \u002F\u002F apply post-transforms\r\n-            for (var i = 0; i \u003C postTransforms.length; i++) {\r\n-                postTransforms[i](element, options);\r\n-            }\r\n-        }\r\n-\r\n-        function trimEndingWhitespace (el) {\r\n-            \u002F\u002F remove trailing whitespace node\r\n-            if (!inPre) {\r\n-                var lastNode;\r\n-                while (\r\n-                (lastNode = el.children[el.children.length - 1]) &&\r\n-                lastNode.type === 3 &&\r\n-                lastNode.text === ' '\r\n-                    ) {\r\n-                    el.children.pop();\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        function checkRootConstraints (el) {\r\n-            if (el.tag === 'slot' || el.tag === 'template') {\r\n-                warnOnce(\r\n-                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\r\n-                    'contain multiple nodes.',\r\n-                    { start: el.start }\r\n-                );\r\n-            }\r\n-            if (el.attrsMap.hasOwnProperty('v-for')) {\r\n-                warnOnce(\r\n-                    'Cannot use v-for on stateful component root element because ' +\r\n-                    'it renders multiple elements.',\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-\r\n-        parseHTML(template, {\r\n-            warn: warn$2,\r\n-            expectHTML: options.expectHTML,\r\n-            isUnaryTag: options.isUnaryTag,\r\n-            canBeLeftOpenTag: options.canBeLeftOpenTag,\r\n-            shouldDecodeNewlines: options.shouldDecodeNewlines,\r\n-            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\r\n-            shouldKeepComment: options.comments,\r\n-            outputSourceRange: options.outputSourceRange,\r\n-            start: function start (tag, attrs, unary, start$1, end) {\r\n-                \u002F\u002F check namespace.\r\n-                \u002F\u002F inherit parent ns if there is one\r\n-                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\r\n-\r\n-                \u002F\u002F handle IE svg bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE && ns === 'svg') {\r\n-                    attrs = guardIESVGBug(attrs);\r\n-                }\r\n-\r\n-                var element = createASTElement(tag, attrs, currentParent);\r\n-                if (ns) {\r\n-                    element.ns = ns;\r\n-                }\r\n-\r\n-                {\r\n-                    if (options.outputSourceRange) {\r\n-                        element.start = start$1;\r\n-                        element.end = end;\r\n-                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\r\n-                            cumulated[attr.name] = attr;\r\n-                            return cumulated\r\n-                        }, {});\r\n-                    }\r\n-                    attrs.forEach(function (attr) {\r\n-                        if (invalidAttributeRE.test(attr.name)) {\r\n-                            warn$2(\r\n-                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\r\n-                                \"spaces, quotes, \u003C, >, \u002F or =.\",\r\n-                                {\r\n-                                    start: attr.start + attr.name.indexOf(\"[\"),\r\n-                                    end: attr.start + attr.name.length\r\n-                                }\r\n-                            );\r\n-                        }\r\n-                    });\r\n-                }\r\n-\r\n-                if (isForbiddenTag(element) && !isServerRendering()) {\r\n-                    element.forbidden = true;\r\n-                    warn$2(\r\n-                        'Templates should only be responsible for mapping the state to the ' +\r\n-                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\r\n-                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\r\n-                        { start: element.start }\r\n-                    );\r\n-                }\r\n-\r\n-                \u002F\u002F apply pre-transforms\r\n-                for (var i = 0; i \u003C preTransforms.length; i++) {\r\n-                    element = preTransforms[i](element, options) || element;\r\n-                }\r\n-\r\n-                if (!inVPre) {\r\n-                    processPre(element);\r\n-                    if (element.pre) {\r\n-                        inVPre = true;\r\n-                    }\r\n-                }\r\n-                if (platformIsPreTag(element.tag)) {\r\n-                    inPre = true;\r\n-                }\r\n-                if (inVPre) {\r\n-                    processRawAttrs(element);\r\n-                } else if (!element.processed) {\r\n-                    \u002F\u002F structural directives\r\n-                    processFor(element);\r\n-                    processIf(element);\r\n-                    processOnce(element);\r\n-                }\r\n-\r\n-                if (!root) {\r\n-                    root = element;\r\n-                    {\r\n-                        checkRootConstraints(root);\r\n-                    }\r\n-                }\r\n-\r\n-                if (!unary) {\r\n-                    currentParent = element;\r\n-                    stack.push(element);\r\n-                } else {\r\n-                    closeElement(element);\r\n-                }\r\n-            },\r\n-\r\n-            end: function end (tag, start, end$1) {\r\n-                var element = stack[stack.length - 1];\r\n-                \u002F\u002F pop stack\r\n-                stack.length -= 1;\r\n-                currentParent = stack[stack.length - 1];\r\n-                if (options.outputSourceRange) {\r\n-                    element.end = end$1;\r\n-                }\r\n-                closeElement(element);\r\n-            },\r\n-\r\n-            chars: function chars (text, start, end) {\r\n-                if (!currentParent) {\r\n-                    {\r\n-                        if (text === template) {\r\n-                            warnOnce(\r\n-                                'Component template requires a root element, rather than just text.',\r\n-                                { start: start }\r\n-                            );\r\n-                        } else if ((text = text.trim())) {\r\n-                            warnOnce(\r\n-                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\r\n-                                { start: start }\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    return\r\n-                }\r\n-                \u002F\u002F IE textarea placeholder bug\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (isIE &&\r\n-                    currentParent.tag === 'textarea' &&\r\n-                    currentParent.attrsMap.placeholder === text\r\n-                ) {\r\n-                    return\r\n-                }\r\n-                var children = currentParent.children;\r\n-                if (inPre || text.trim()) {\r\n-                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\r\n-                } else if (!children.length) {\r\n-                    \u002F\u002F remove the whitespace-only node right after an opening tag\r\n-                    text = '';\r\n-                } else if (whitespaceOption) {\r\n-                    if (whitespaceOption === 'condense') {\r\n-                        \u002F\u002F in condense mode, remove the whitespace node if it contains\r\n-                        \u002F\u002F line break, otherwise condense to a single space\r\n-                        text = lineBreakRE.test(text) ? '' : ' ';\r\n-                    } else {\r\n-                        text = ' ';\r\n-                    }\r\n-                } else {\r\n-                    text = preserveWhitespace ? ' ' : '';\r\n-                }\r\n-                if (text) {\r\n-                    if (!inPre && whitespaceOption === 'condense') {\r\n-                        \u002F\u002F condense consecutive whitespaces into single space\r\n-                        text = text.replace(whitespaceRE$1, ' ');\r\n-                    }\r\n-                    var res;\r\n-                    var child;\r\n-                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\r\n-                        child = {\r\n-                            type: 2,\r\n-                            expression: res.expression,\r\n-                            tokens: res.tokens,\r\n-                            text: text\r\n-                        };\r\n-                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\r\n-                        child = {\r\n-                            type: 3,\r\n-                            text: text\r\n-                        };\r\n-                    }\r\n-                    if (child) {\r\n-                        if (options.outputSourceRange) {\r\n-                            child.start = start;\r\n-                            child.end = end;\r\n-                        }\r\n-                        children.push(child);\r\n-                    }\r\n-                }\r\n-            },\r\n-            comment: function comment (text, start, end) {\r\n-                \u002F\u002F adding anyting as a sibling to the root node is forbidden\r\n-                \u002F\u002F comments should still be allowed, but ignored\r\n-                if (currentParent) {\r\n-                    var child = {\r\n-                        type: 3,\r\n-                        text: text,\r\n-                        isComment: true\r\n-                    };\r\n-                    if (options.outputSourceRange) {\r\n-                        child.start = start;\r\n-                        child.end = end;\r\n-                    }\r\n-                    currentParent.children.push(child);\r\n-                }\r\n-            }\r\n-        });\r\n-        return root\r\n-    }\r\n-\r\n-    function processPre (el) {\r\n-        if (getAndRemoveAttr(el, 'v-pre') != null) {\r\n-            el.pre = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processRawAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var len = list.length;\r\n-        if (len) {\r\n-            var attrs = el.attrs = new Array(len);\r\n-            for (var i = 0; i \u003C len; i++) {\r\n-                attrs[i] = {\r\n-                    name: list[i].name,\r\n-                    value: JSON.stringify(list[i].value)\r\n-                };\r\n-                if (list[i].start != null) {\r\n-                    attrs[i].start = list[i].start;\r\n-                    attrs[i].end = list[i].end;\r\n-                }\r\n-            }\r\n-        } else if (!el.pre) {\r\n-            \u002F\u002F non root node in pre blocks with no attributes\r\n-            el.plain = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processElement (\r\n-        element,\r\n-        options\r\n-    ) {\r\n-        processKey(element);\r\n-\r\n-        \u002F\u002F determine whether this is a plain element after\r\n-        \u002F\u002F removing structural attributes\r\n-        element.plain = (\r\n-            !element.key &&\r\n-            !element.scopedSlots &&\r\n-            !element.attrsList.length\r\n-        );\r\n-\r\n-        processRef(element);\r\n-        processSlotContent(element);\r\n-        processSlotOutlet(element);\r\n-        processComponent(element);\r\n-        for (var i = 0; i \u003C transforms.length; i++) {\r\n-            element = transforms[i](element, options) || element;\r\n-        }\r\n-        processAttrs(element);\r\n-        return element\r\n-    }\r\n-\r\n-    function processKey (el) {\r\n-        var exp = getBindingAttr(el, 'key');\r\n-        if (exp) {\r\n-            {\r\n-                if (el.tag === 'template') {\r\n-                    warn$2(\r\n-                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\r\n-                        getRawBindingAttr(el, 'key')\r\n-                    );\r\n-                }\r\n-                if (el.for) {\r\n-                    var iterator = el.iterator2 || el.iterator1;\r\n-                    var parent = el.parent;\r\n-                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\r\n-                        warn$2(\r\n-                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\r\n-                            \"this is the same as not using keys.\",\r\n-                            getRawBindingAttr(el, 'key'),\r\n-                            true \u002F* tip *\u002F\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-            el.key = exp;\r\n-        }\r\n-    }\r\n-\r\n-    function processRef (el) {\r\n-        var ref = getBindingAttr(el, 'ref');\r\n-        if (ref) {\r\n-            el.ref = ref;\r\n-            el.refInFor = checkInFor(el);\r\n-        }\r\n-    }\r\n-\r\n-    function processFor (el) {\r\n-        var exp;\r\n-        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\r\n-            var res = parseFor(exp);\r\n-            if (res) {\r\n-                extend(el, res);\r\n-            } else {\r\n-                warn$2(\r\n-                    (\"Invalid v-for expression: \" + exp),\r\n-                    el.rawAttrsMap['v-for']\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-\r\n-\r\n-    function parseFor (exp) {\r\n-        var inMatch = exp.match(forAliasRE);\r\n-        if (!inMatch) { return }\r\n-        var res = {};\r\n-        res.for = inMatch[2].trim();\r\n-        var alias = inMatch[1].trim().replace(stripParensRE, '');\r\n-        var iteratorMatch = alias.match(forIteratorRE);\r\n-        if (iteratorMatch) {\r\n-            res.alias = alias.replace(forIteratorRE, '').trim();\r\n-            res.iterator1 = iteratorMatch[1].trim();\r\n-            if (iteratorMatch[2]) {\r\n-                res.iterator2 = iteratorMatch[2].trim();\r\n-            }\r\n-        } else {\r\n-            res.alias = alias;\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function processIf (el) {\r\n-        var exp = getAndRemoveAttr(el, 'v-if');\r\n-        if (exp) {\r\n-            el.if = exp;\r\n-            addIfCondition(el, {\r\n-                exp: exp,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            if (getAndRemoveAttr(el, 'v-else') != null) {\r\n-                el.else = true;\r\n-            }\r\n-            var elseif = getAndRemoveAttr(el, 'v-else-if');\r\n-            if (elseif) {\r\n-                el.elseif = elseif;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processIfConditions (el, parent) {\r\n-        var prev = findPrevElement(parent.children);\r\n-        if (prev && prev.if) {\r\n-            addIfCondition(prev, {\r\n-                exp: el.elseif,\r\n-                block: el\r\n-            });\r\n-        } else {\r\n-            warn$2(\r\n-                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\r\n-                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\r\n-                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\r\n-            );\r\n-        }\r\n-    }\r\n-\r\n-    function findPrevElement (children) {\r\n-        var i = children.length;\r\n-        while (i--) {\r\n-            if (children[i].type === 1) {\r\n-                return children[i]\r\n-            } else {\r\n-                if (children[i].text !== ' ') {\r\n-                    warn$2(\r\n-                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\r\n-                        \"will be ignored.\",\r\n-                        children[i]\r\n-                    );\r\n-                }\r\n-                children.pop();\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function addIfCondition (el, condition) {\r\n-        if (!el.ifConditions) {\r\n-            el.ifConditions = [];\r\n-        }\r\n-        el.ifConditions.push(condition);\r\n-    }\r\n-\r\n-    function processOnce (el) {\r\n-        var once$$1 = getAndRemoveAttr(el, 'v-once');\r\n-        if (once$$1 != null) {\r\n-            el.once = true;\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F handle content being passed to a component as slot,\r\n-    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\r\n-    function processSlotContent (el) {\r\n-        var slotScope;\r\n-        if (el.tag === 'template') {\r\n-            slotScope = getAndRemoveAttr(el, 'scope');\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (slotScope) {\r\n-                warn$2(\r\n-                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\r\n-                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\r\n-                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\r\n-                    \"denote scoped slots.\",\r\n-                    el.rawAttrsMap['scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\r\n-        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            if (el.attrsMap['v-for']) {\r\n-                warn$2(\r\n-                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\r\n-                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\r\n-                    \"scoped slot to make it clearer.\",\r\n-                    el.rawAttrsMap['slot-scope'],\r\n-                    true\r\n-                );\r\n-            }\r\n-            el.slotScope = slotScope;\r\n-        }\r\n-\r\n-        \u002F\u002F slot=\"xxx\"\r\n-        var slotTarget = getBindingAttr(el, 'slot');\r\n-        if (slotTarget) {\r\n-            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\r\n-            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\r\n-            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\r\n-            \u002F\u002F only for non-scoped slots.\r\n-            if (el.tag !== 'template' && !el.slotScope) {\r\n-                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\r\n-            }\r\n-        }\r\n-\r\n-        \u002F\u002F 2.6 v-slot syntax\r\n-        {\r\n-            if (el.tag === 'template') {\r\n-                \u002F\u002F v-slot on \u003Ctemplate>\r\n-                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding) {\r\n-                    {\r\n-                        if (el.slotTarget || el.slotScope) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.parent && !maybeComponent(el.parent)) {\r\n-                            warn$2(\r\n-                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\r\n-                                \"the receiving the component\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    var ref = getSlotName(slotBinding);\r\n-                    var name = ref.name;\r\n-                    var dynamic = ref.dynamic;\r\n-                    el.slotTarget = name;\r\n-                    el.slotTargetDynamic = dynamic;\r\n-                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F v-slot on component, denotes default slot\r\n-                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\r\n-                if (slotBinding$1) {\r\n-                    {\r\n-                        if (!maybeComponent(el)) {\r\n-                            warn$2(\r\n-                                \"v-slot can only be used on components or \u003Ctemplate>.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                        if (el.slotScope || el.slotTarget) {\r\n-                            warn$2(\r\n-                                \"Unexpected mixed usage of different slot syntaxes.\",\r\n-                                el\r\n-                            );\r\n-                        }\r\n-                        if (el.scopedSlots) {\r\n-                            warn$2(\r\n-                                \"To avoid scope ambiguity, the default slot should also use \" +\r\n-                                \"\u003Ctemplate> syntax when there are other named slots.\",\r\n-                                slotBinding$1\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                    \u002F\u002F add the component's children to its default slot\r\n-                    var slots = el.scopedSlots || (el.scopedSlots = {});\r\n-                    var ref$1 = getSlotName(slotBinding$1);\r\n-                    var name$1 = ref$1.name;\r\n-                    var dynamic$1 = ref$1.dynamic;\r\n-                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\r\n-                    slotContainer.slotTarget = name$1;\r\n-                    slotContainer.slotTargetDynamic = dynamic$1;\r\n-                    slotContainer.children = el.children.filter(function (c) {\r\n-                        if (!c.slotScope) {\r\n-                            c.parent = slotContainer;\r\n-                            return true\r\n-                        }\r\n-                    });\r\n-                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\r\n-                    \u002F\u002F remove children as they are returned from scopedSlots now\r\n-                    el.children = [];\r\n-                    \u002F\u002F mark el non-plain so data gets generated\r\n-                    el.plain = false;\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function getSlotName (binding) {\r\n-        var name = binding.name.replace(slotRE, '');\r\n-        if (!name) {\r\n-            if (binding.name[0] !== '#') {\r\n-                name = 'default';\r\n-            } else {\r\n-                warn$2(\r\n-                    \"v-slot shorthand syntax requires a slot name.\",\r\n-                    binding\r\n-                );\r\n-            }\r\n-        }\r\n-        return dynamicArgRE.test(name)\r\n-            \u002F\u002F dynamic [name]\r\n-            ? { name: name.slice(1, -1), dynamic: true }\r\n-            \u002F\u002F static name\r\n-            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\r\n-    }\r\n-\r\n-    \u002F\u002F handle \u003Cslot\u002F> outlets\r\n-    function processSlotOutlet (el) {\r\n-        if (el.tag === 'slot') {\r\n-            el.slotName = getBindingAttr(el, 'name');\r\n-            if (el.key) {\r\n-                warn$2(\r\n-                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\r\n-                    \"and can possibly expand into multiple elements. \" +\r\n-                    \"Use the key on a wrapping element instead.\",\r\n-                    getRawBindingAttr(el, 'key')\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function processComponent (el) {\r\n-        var binding;\r\n-        if ((binding = getBindingAttr(el, 'is'))) {\r\n-            el.component = binding;\r\n-        }\r\n-        if (getAndRemoveAttr(el, 'inline-template') != null) {\r\n-            el.inlineTemplate = true;\r\n-        }\r\n-    }\r\n-\r\n-    function processAttrs (el) {\r\n-        var list = el.attrsList;\r\n-        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\r\n-        for (i = 0, l = list.length; i \u003C l; i++) {\r\n-            name = rawName = list[i].name;\r\n-            value = list[i].value;\r\n-            if (dirRE.test(name)) {\r\n-                \u002F\u002F mark element as dynamic\r\n-                el.hasBindings = true;\r\n-                \u002F\u002F modifiers\r\n-                modifiers = parseModifiers(name.replace(dirRE, ''));\r\n-                \u002F\u002F support .foo shorthand syntax for the .prop modifier\r\n-                if (modifiers) {\r\n-                    name = name.replace(modifierRE, '');\r\n-                }\r\n-                if (bindRE.test(name)) { \u002F\u002F v-bind\r\n-                    name = name.replace(bindRE, '');\r\n-                    value = parseFilters(value);\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    if (\r\n-                        value.trim().length === 0\r\n-                    ) {\r\n-                        warn$2(\r\n-                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\r\n-                        );\r\n-                    }\r\n-                    if (modifiers) {\r\n-                        if (modifiers.prop && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                            if (name === 'innerHtml') { name = 'innerHTML'; }\r\n-                        }\r\n-                        if (modifiers.camel && !isDynamic) {\r\n-                            name = camelize(name);\r\n-                        }\r\n-                        if (modifiers.sync) {\r\n-                            syncGen = genAssignmentCode(value, \"$event\");\r\n-                            if (!isDynamic) {\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"update:\" + (camelize(name))),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i]\r\n-                                );\r\n-                                if (hyphenate(name) !== camelize(name)) {\r\n-                                    addHandler(\r\n-                                        el,\r\n-                                        (\"update:\" + (hyphenate(name))),\r\n-                                        syncGen,\r\n-                                        null,\r\n-                                        false,\r\n-                                        warn$2,\r\n-                                        list[i]\r\n-                                    );\r\n-                                }\r\n-                            } else {\r\n-                                \u002F\u002F handler w\u002F dynamic event name\r\n-                                addHandler(\r\n-                                    el,\r\n-                                    (\"\\\"update:\\\"+(\" + name + \")\"),\r\n-                                    syncGen,\r\n-                                    null,\r\n-                                    false,\r\n-                                    warn$2,\r\n-                                    list[i],\r\n-                                    true \u002F\u002F dynamic\r\n-                                );\r\n-                            }\r\n-                        }\r\n-                    }\r\n-                    if ((modifiers && modifiers.prop) || (\r\n-                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\r\n-                        )) {\r\n-                        addProp(el, name, value, list[i], isDynamic);\r\n-                    } else {\r\n-                        addAttr(el, name, value, list[i], isDynamic);\r\n-                    }\r\n-                } else if (onRE.test(name)) { \u002F\u002F v-on\r\n-                    name = name.replace(onRE, '');\r\n-                    isDynamic = dynamicArgRE.test(name);\r\n-                    if (isDynamic) {\r\n-                        name = name.slice(1, -1);\r\n-                    }\r\n-                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\r\n-                } else { \u002F\u002F normal directives\r\n-                    name = name.replace(dirRE, '');\r\n-                    \u002F\u002F parse arg\r\n-                    var argMatch = name.match(argRE);\r\n-                    var arg = argMatch && argMatch[1];\r\n-                    isDynamic = false;\r\n-                    if (arg) {\r\n-                        name = name.slice(0, -(arg.length + 1));\r\n-                        if (dynamicArgRE.test(arg)) {\r\n-                            arg = arg.slice(1, -1);\r\n-                            isDynamic = true;\r\n-                        }\r\n-                    }\r\n-                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\r\n-                    if (name === 'model') {\r\n-                        checkForAliasModel(el, value);\r\n-                    }\r\n-                }\r\n-            } else {\r\n-                \u002F\u002F literal attribute\r\n-                {\r\n-                    var res = parseText(value, delimiters);\r\n-                    if (res) {\r\n-                        warn$2(\r\n-                            name + \"=\\\"\" + value + \"\\\": \" +\r\n-                            'Interpolation inside attributes has been removed. ' +\r\n-                            'Use v-bind or the colon shorthand instead. For example, ' +\r\n-                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\r\n-                            list[i]\r\n-                        );\r\n-                    }\r\n-                }\r\n-                addAttr(el, name, JSON.stringify(value), list[i]);\r\n-                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\r\n-                \u002F\u002F even immediately after element creation\r\n-                if (!el.component &&\r\n-                    name === 'muted' &&\r\n-                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\r\n-                    addProp(el, name, 'true', list[i]);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkInFor (el) {\r\n-        var parent = el;\r\n-        while (parent) {\r\n-            if (parent.for !== undefined) {\r\n-                return true\r\n-            }\r\n-            parent = parent.parent;\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function parseModifiers (name) {\r\n-        var match = name.match(modifierRE);\r\n-        if (match) {\r\n-            var ret = {};\r\n-            match.forEach(function (m) { ret[m.slice(1)] = true; });\r\n-            return ret\r\n-        }\r\n-    }\r\n-\r\n-    function makeAttrsMap (attrs) {\r\n-        var map = {};\r\n-        for (var i = 0, l = attrs.length; i \u003C l; i++) {\r\n-            if (\r\n-                map[attrs[i].name] && !isIE && !isEdge\r\n-            ) {\r\n-                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\r\n-            }\r\n-            map[attrs[i].name] = attrs[i].value;\r\n-        }\r\n-        return map\r\n-    }\r\n-\r\n-    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\r\n-    function isTextTag (el) {\r\n-        return el.tag === 'script' || el.tag === 'style'\r\n-    }\r\n-\r\n-    function isForbiddenTag (el) {\r\n-        return (\r\n-            el.tag === 'style' ||\r\n-            (el.tag === 'script' && (\r\n-                !el.attrsMap.type ||\r\n-                el.attrsMap.type === 'text\u002Fjavascript'\r\n-            ))\r\n-        )\r\n-    }\r\n-\r\n-    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\r\n-    var ieNSPrefix = \u002F^NS\\d+:\u002F;\r\n-\r\n-  \u002F* istanbul ignore next *\u002F\r\n-    function guardIESVGBug (attrs) {\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C attrs.length; i++) {\r\n-            var attr = attrs[i];\r\n-            if (!ieNSBug.test(attr.name)) {\r\n-                attr.name = attr.name.replace(ieNSPrefix, '');\r\n-                res.push(attr);\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function checkForAliasModel (el, value) {\r\n-        var _el = el;\r\n-        while (_el) {\r\n-            if (_el.for && _el.alias === value) {\r\n-                warn$2(\r\n-                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\r\n-                    \"You are binding v-model directly to a v-for iteration alias. \" +\r\n-                    \"This will not be able to modify the v-for source array because \" +\r\n-                    \"writing to the alias is like modifying a function local variable. \" +\r\n-                    \"Consider using an array of objects and use v-model on an object property instead.\",\r\n-                    el.rawAttrsMap['v-model']\r\n-                );\r\n-            }\r\n-            _el = _el.parent;\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function preTransformNode (el, options) {\r\n-        if (el.tag === 'input') {\r\n-            var map = el.attrsMap;\r\n-            if (!map['v-model']) {\r\n-                return\r\n-            }\r\n-\r\n-            var typeBinding;\r\n-            if (map[':type'] || map['v-bind:type']) {\r\n-                typeBinding = getBindingAttr(el, 'type');\r\n-            }\r\n-            if (!map.type && !typeBinding && map['v-bind']) {\r\n-                typeBinding = \"(\" + (map['v-bind']) + \").type\";\r\n-            }\r\n-\r\n-            if (typeBinding) {\r\n-                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\r\n-                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\r\n-                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\r\n-                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\r\n-                \u002F\u002F 1. checkbox\r\n-                var branch0 = cloneASTElement(el);\r\n-                \u002F\u002F process for on the main node\r\n-                processFor(branch0);\r\n-                addRawAttr(branch0, 'type', 'checkbox');\r\n-                processElement(branch0, options);\r\n-                branch0.processed = true; \u002F\u002F prevent it from double-processed\r\n-                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\r\n-                addIfCondition(branch0, {\r\n-                    exp: branch0.if,\r\n-                    block: branch0\r\n-                });\r\n-                \u002F\u002F 2. add radio else-if condition\r\n-                var branch1 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch1, 'v-for', true);\r\n-                addRawAttr(branch1, 'type', 'radio');\r\n-                processElement(branch1, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\r\n-                    block: branch1\r\n-                });\r\n-                \u002F\u002F 3. other\r\n-                var branch2 = cloneASTElement(el);\r\n-                getAndRemoveAttr(branch2, 'v-for', true);\r\n-                addRawAttr(branch2, ':type', typeBinding);\r\n-                processElement(branch2, options);\r\n-                addIfCondition(branch0, {\r\n-                    exp: ifCondition,\r\n-                    block: branch2\r\n-                });\r\n-\r\n-                if (hasElse) {\r\n-                    branch0.else = true;\r\n-                } else if (elseIfCondition) {\r\n-                    branch0.elseif = elseIfCondition;\r\n-                }\r\n-\r\n-                return branch0\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function cloneASTElement (el) {\r\n-        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\r\n-    }\r\n-\r\n-    var model$1 = {\r\n-        preTransformNode: preTransformNode\r\n-    };\r\n-\r\n-    var modules$1 = [\r\n-        klass$1,\r\n-        style$1,\r\n-        model$1\r\n-    ];\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function text (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function html (el, dir) {\r\n-        if (dir.value) {\r\n-            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\r\n-        }\r\n-    }\r\n-\r\n-    var directives$1 = {\r\n-        model: model,\r\n-        text: text,\r\n-        html: html\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseOptions = {\r\n-        expectHTML: true,\r\n-        modules: modules$1,\r\n-        directives: directives$1,\r\n-        isPreTag: isPreTag,\r\n-        isUnaryTag: isUnaryTag,\r\n-        mustUseProp: mustUseProp,\r\n-        canBeLeftOpenTag: canBeLeftOpenTag,\r\n-        isReservedTag: isReservedTag,\r\n-        getTagNamespace: getTagNamespace,\r\n-        staticKeys: genStaticKeys(modules$1)\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var isStaticKey;\r\n-    var isPlatformReservedTag;\r\n-\r\n-    var genStaticKeysCached = cached(genStaticKeys$1);\r\n-\r\n-    \u002F**\r\n-     * Goal of the optimizer: walk the generated template AST tree\r\n-     * and detect sub-trees that are purely static, i.e. parts of\r\n-     * the DOM that never needs to change.\r\n-     *\r\n-     * Once we detect these sub-trees, we can:\r\n-     *\r\n-     * 1. Hoist them into constants, so that we no longer need to\r\n-     *    create fresh nodes for them on each re-render;\r\n-     * 2. Completely skip them in the patching process.\r\n-     *\u002F\r\n-    function optimize (root, options) {\r\n-        if (!root) { return }\r\n-        isStaticKey = genStaticKeysCached(options.staticKeys || '');\r\n-        isPlatformReservedTag = options.isReservedTag || no;\r\n-        \u002F\u002F first pass: mark all non-static nodes.\r\n-        markStatic$1(root);\r\n-        \u002F\u002F second pass: mark static roots.\r\n-        markStaticRoots(root, false);\r\n-    }\r\n-\r\n-    function genStaticKeys$1 (keys) {\r\n-        return makeMap(\r\n-            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\r\n-            (keys ? ',' + keys : '')\r\n-        )\r\n-    }\r\n-\r\n-    function markStatic$1 (node) {\r\n-        node.static = isStatic(node);\r\n-        if (node.type === 1) {\r\n-            \u002F\u002F do not make component slot content static. this avoids\r\n-            \u002F\u002F 1. components not able to mutate slot nodes\r\n-            \u002F\u002F 2. static slot content fails for hot-reloading\r\n-            if (\r\n-                !isPlatformReservedTag(node.tag) &&\r\n-                node.tag !== 'slot' &&\r\n-                node.attrsMap['inline-template'] == null\r\n-            ) {\r\n-                return\r\n-            }\r\n-            for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                var child = node.children[i];\r\n-                markStatic$1(child);\r\n-                if (!child.static) {\r\n-                    node.static = false;\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    var block = node.ifConditions[i$1].block;\r\n-                    markStatic$1(block);\r\n-                    if (!block.static) {\r\n-                        node.static = false;\r\n-                    }\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function markStaticRoots (node, isInFor) {\r\n-        if (node.type === 1) {\r\n-            if (node.static || node.once) {\r\n-                node.staticInFor = isInFor;\r\n-            }\r\n-            \u002F\u002F For a node to qualify as a static root, it should have children that\r\n-            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\r\n-            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\r\n-            if (node.static && node.children.length && !(\r\n-                    node.children.length === 1 &&\r\n-                    node.children[0].type === 3\r\n-                )) {\r\n-                node.staticRoot = true;\r\n-                return\r\n-            } else {\r\n-                node.staticRoot = false;\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0, l = node.children.length; i \u003C l; i++) {\r\n-                    markStaticRoots(node.children[i], isInFor || !!node.for);\r\n-                }\r\n-            }\r\n-            if (node.ifConditions) {\r\n-                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\r\n-                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\r\n-                }\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function isStatic (node) {\r\n-        if (node.type === 2) { \u002F\u002F expression\r\n-            return false\r\n-        }\r\n-        if (node.type === 3) { \u002F\u002F text\r\n-            return true\r\n-        }\r\n-        return !!(node.pre || (\r\n-            !node.hasBindings && \u002F\u002F no dynamic bindings\r\n-            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\r\n-            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\r\n-            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\r\n-            !isDirectChildOfTemplateFor(node) &&\r\n-            Object.keys(node).every(isStaticKey)\r\n-        ))\r\n-    }\r\n-\r\n-    function isDirectChildOfTemplateFor (node) {\r\n-        while (node.parent) {\r\n-            node = node.parent;\r\n-            if (node.tag !== 'template') {\r\n-                return false\r\n-            }\r\n-            if (node.for) {\r\n-                return true\r\n-            }\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\r\n-    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\r\n-    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\r\n-\r\n-    \u002F\u002F KeyboardEvent.keyCode aliases\r\n-    var keyCodes = {\r\n-        esc: 27,\r\n-        tab: 9,\r\n-        enter: 13,\r\n-        space: 32,\r\n-        up: 38,\r\n-        left: 37,\r\n-        right: 39,\r\n-        down: 40,\r\n-        'delete': [8, 46]\r\n-    };\r\n-\r\n-    \u002F\u002F KeyboardEvent.key aliases\r\n-    var keyNames = {\r\n-        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\r\n-        esc: ['Esc', 'Escape'],\r\n-        tab: 'Tab',\r\n-        enter: 'Enter',\r\n-        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\r\n-        space: [' ', 'Spacebar'],\r\n-        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\r\n-        up: ['Up', 'ArrowUp'],\r\n-        left: ['Left', 'ArrowLeft'],\r\n-        right: ['Right', 'ArrowRight'],\r\n-        down: ['Down', 'ArrowDown'],\r\n-        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\r\n-        'delete': ['Backspace', 'Delete', 'Del']\r\n-    };\r\n-\r\n-    \u002F\u002F #4868: modifiers that prevent the execution of the listener\r\n-    \u002F\u002F need to explicitly return null so that we can determine whether to remove\r\n-    \u002F\u002F the listener for .once\r\n-    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\r\n-\r\n-    var modifierCode = {\r\n-        stop: '$event.stopPropagation();',\r\n-        prevent: '$event.preventDefault();',\r\n-        self: genGuard(\"$event.target !== $event.currentTarget\"),\r\n-        ctrl: genGuard(\"!$event.ctrlKey\"),\r\n-        shift: genGuard(\"!$event.shiftKey\"),\r\n-        alt: genGuard(\"!$event.altKey\"),\r\n-        meta: genGuard(\"!$event.metaKey\"),\r\n-        left: genGuard(\"'button' in $event && $event.button !== 0\"),\r\n-        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\r\n-        right: genGuard(\"'button' in $event && $event.button !== 2\")\r\n-    };\r\n-\r\n-    function genHandlers (\r\n-        events,\r\n-        isNative\r\n-    ) {\r\n-        var prefix = isNative ? 'nativeOn:' : 'on:';\r\n-        var staticHandlers = \"\";\r\n-        var dynamicHandlers = \"\";\r\n-        for (var name in events) {\r\n-            var handlerCode = genHandler(events[name]);\r\n-            if (events[name] && events[name].dynamic) {\r\n-                dynamicHandlers += name + \",\" + handlerCode + \",\";\r\n-            } else {\r\n-                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\r\n-            }\r\n-        }\r\n-        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\r\n-        if (dynamicHandlers) {\r\n-            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\r\n-        } else {\r\n-            return prefix + staticHandlers\r\n-        }\r\n-    }\r\n-\r\n-    function genHandler (handler) {\r\n-        if (!handler) {\r\n-            return 'function(){}'\r\n-        }\r\n-\r\n-        if (Array.isArray(handler)) {\r\n-            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\r\n-        }\r\n-\r\n-        var isMethodPath = simplePathRE.test(handler.value);\r\n-        var isFunctionExpression = fnExpRE.test(handler.value);\r\n-        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\r\n-\r\n-        if (!handler.modifiers) {\r\n-            if (isMethodPath || isFunctionExpression) {\r\n-                return handler.value\r\n-            }\r\n-            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\r\n-        } else {\r\n-            var code = '';\r\n-            var genModifierCode = '';\r\n-            var keys = [];\r\n-            for (var key in handler.modifiers) {\r\n-                if (modifierCode[key]) {\r\n-                    genModifierCode += modifierCode[key];\r\n-                    \u002F\u002F left\u002Fright\r\n-                    if (keyCodes[key]) {\r\n-                        keys.push(key);\r\n-                    }\r\n-                } else if (key === 'exact') {\r\n-                    var modifiers = (handler.modifiers);\r\n-                    genModifierCode += genGuard(\r\n-                        ['ctrl', 'shift', 'alt', 'meta']\r\n-                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\r\n-                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\r\n-                            .join('||')\r\n-                    );\r\n-                } else {\r\n-                    keys.push(key);\r\n-                }\r\n-            }\r\n-            if (keys.length) {\r\n-                code += genKeyFilter(keys);\r\n-            }\r\n-            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\r\n-            if (genModifierCode) {\r\n-                code += genModifierCode;\r\n-            }\r\n-            var handlerCode = isMethodPath\r\n-                ? (\"return \" + (handler.value) + \"($event)\")\r\n-                : isFunctionExpression\r\n-                    ? (\"return (\" + (handler.value) + \")($event)\")\r\n-                    : isFunctionInvocation\r\n-                        ? (\"return \" + (handler.value))\r\n-                        : handler.value;\r\n-            return (\"function($event){\" + code + handlerCode + \"}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genKeyFilter (keys) {\r\n-        return (\r\n-            \u002F\u002F make sure the key filters only apply to KeyboardEvents\r\n-            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\r\n-            \u002F\u002F key events that do not have keyCode property...\r\n-            \"if(!$event.type.indexOf('key')&&\" +\r\n-            (keys.map(genFilterCode).join('&&')) + \")return null;\"\r\n-        )\r\n-    }\r\n-\r\n-    function genFilterCode (key) {\r\n-        var keyVal = parseInt(key, 10);\r\n-        if (keyVal) {\r\n-            return (\"$event.keyCode!==\" + keyVal)\r\n-        }\r\n-        var keyCode = keyCodes[key];\r\n-        var keyName = keyNames[key];\r\n-        return (\r\n-            \"_k($event.keyCode,\" +\r\n-            (JSON.stringify(key)) + \",\" +\r\n-            (JSON.stringify(keyCode)) + \",\" +\r\n-            \"$event.key,\" +\r\n-            \"\" + (JSON.stringify(keyName)) +\r\n-            \")\"\r\n-        )\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function on (el, dir) {\r\n-        if (dir.modifiers) {\r\n-            warn(\"v-on without argument does not support modifiers.\");\r\n-        }\r\n-        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function bind$1 (el, dir) {\r\n-        el.wrapData = function (code) {\r\n-            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\r\n-        };\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var baseDirectives = {\r\n-        on: on,\r\n-        bind: bind$1,\r\n-        cloak: noop\r\n-    };\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-\r\n-\r\n-    var CodegenState = function CodegenState (options) {\r\n-        this.options = options;\r\n-        this.warn = options.warn || baseWarn;\r\n-        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\r\n-        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\r\n-        this.directives = extend(extend({}, baseDirectives), options.directives);\r\n-        var isReservedTag = options.isReservedTag || no;\r\n-        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\r\n-        this.onceId = 0;\r\n-        this.staticRenderFns = [];\r\n-        this.pre = false;\r\n-    };\r\n-\r\n-\r\n-\r\n-    function generate (\r\n-        ast,\r\n-        options\r\n-    ) {\r\n-        var state = new CodegenState(options);\r\n-        var code = ast ? genElement(ast, state) : '_c(\"div\")';\r\n-        return {\r\n-            render: (\"with(this){return \" + code + \"}\"),\r\n-            staticRenderFns: state.staticRenderFns\r\n-        }\r\n-    }\r\n-\r\n-    function genElement (el, state) {\r\n-        if (el.parent) {\r\n-            el.pre = el.pre || el.parent.pre;\r\n-        }\r\n-\r\n-        if (el.staticRoot && !el.staticProcessed) {\r\n-            return genStatic(el, state)\r\n-        } else if (el.once && !el.onceProcessed) {\r\n-            return genOnce(el, state)\r\n-        } else if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state)\r\n-        } else if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\r\n-            return genChildren(el, state) || 'void 0'\r\n-        } else if (el.tag === 'slot') {\r\n-            return genSlot(el, state)\r\n-        } else {\r\n-            \u002F\u002F component or element\r\n-            var code;\r\n-            if (el.component) {\r\n-                code = genComponent(el.component, el, state);\r\n-            } else {\r\n-                var data;\r\n-                if (!el.plain || (el.pre && state.maybeComponent(el))) {\r\n-                    data = genData$2(el, state);\r\n-                }\r\n-\r\n-                var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\r\n-            }\r\n-            \u002F\u002F module transforms\r\n-            for (var i = 0; i \u003C state.transforms.length; i++) {\r\n-                code = state.transforms[i](el, code);\r\n-            }\r\n-            return code\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F hoist static sub-trees out\r\n-    function genStatic (el, state) {\r\n-        el.staticProcessed = true;\r\n-        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\r\n-        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\r\n-        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\r\n-        var originalPreState = state.pre;\r\n-        if (el.pre) {\r\n-            state.pre = el.pre;\r\n-        }\r\n-        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\r\n-        state.pre = originalPreState;\r\n-        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\r\n-    }\r\n-\r\n-    \u002F\u002F v-once\r\n-    function genOnce (el, state) {\r\n-        el.onceProcessed = true;\r\n-        if (el.if && !el.ifProcessed) {\r\n-            return genIf(el, state)\r\n-        } else if (el.staticInFor) {\r\n-            var key = '';\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (parent.for) {\r\n-                    key = parent.key;\r\n-                    break\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-            if (!key) {\r\n-                state.warn(\r\n-                    \"v-once can only be used inside v-for that is keyed. \",\r\n-                    el.rawAttrsMap['v-once']\r\n-                );\r\n-                return genElement(el, state)\r\n-            }\r\n-            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\r\n-        } else {\r\n-            return genStatic(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genIf (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        el.ifProcessed = true; \u002F\u002F avoid recursion\r\n-        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\r\n-    }\r\n-\r\n-    function genIfConditions (\r\n-        conditions,\r\n-        state,\r\n-        altGen,\r\n-        altEmpty\r\n-    ) {\r\n-        if (!conditions.length) {\r\n-            return altEmpty || '_e()'\r\n-        }\r\n-\r\n-        var condition = conditions.shift();\r\n-        if (condition.exp) {\r\n-            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\r\n-        } else {\r\n-            return (\"\" + (genTernaryExp(condition.block)))\r\n-        }\r\n-\r\n-        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\r\n-        function genTernaryExp (el) {\r\n-            return altGen\r\n-                ? altGen(el, state)\r\n-                : el.once\r\n-                    ? genOnce(el, state)\r\n-                    : genElement(el, state)\r\n-        }\r\n-    }\r\n-\r\n-    function genFor (\r\n-        el,\r\n-        state,\r\n-        altGen,\r\n-        altHelper\r\n-    ) {\r\n-        var exp = el.for;\r\n-        var alias = el.alias;\r\n-        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\r\n-        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\r\n-\r\n-        if (state.maybeComponent(el) &&\r\n-            el.tag !== 'slot' &&\r\n-            el.tag !== 'template' &&\r\n-            !el.key\r\n-        ) {\r\n-            state.warn(\r\n-                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\r\n-                \"v-for should have explicit keys. \" +\r\n-                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\r\n-                el.rawAttrsMap['v-for'],\r\n-                true \u002F* tip *\u002F\r\n-            );\r\n-        }\r\n-\r\n-        el.forProcessed = true; \u002F\u002F avoid recursion\r\n-        return (altHelper || '_l') + \"((\" + exp + \"),\" +\r\n-            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\r\n-            \"return \" + ((altGen || genElement)(el, state)) +\r\n-            '})'\r\n-    }\r\n-\r\n-    function genData$2 (el, state) {\r\n-        var data = '{';\r\n-\r\n-        \u002F\u002F directives first.\r\n-        \u002F\u002F directives may mutate the el's other properties before they are generated.\r\n-        var dirs = genDirectives(el, state);\r\n-        if (dirs) { data += dirs + ','; }\r\n-\r\n-        \u002F\u002F key\r\n-        if (el.key) {\r\n-            data += \"key:\" + (el.key) + \",\";\r\n-        }\r\n-        \u002F\u002F ref\r\n-        if (el.ref) {\r\n-            data += \"ref:\" + (el.ref) + \",\";\r\n-        }\r\n-        if (el.refInFor) {\r\n-            data += \"refInFor:true,\";\r\n-        }\r\n-        \u002F\u002F pre\r\n-        if (el.pre) {\r\n-            data += \"pre:true,\";\r\n-        }\r\n-        \u002F\u002F record original tag name for components using \"is\" attribute\r\n-        if (el.component) {\r\n-            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\r\n-        }\r\n-        \u002F\u002F module data generation functions\r\n-        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\r\n-            data += state.dataGenFns[i](el);\r\n-        }\r\n-        \u002F\u002F attributes\r\n-        if (el.attrs) {\r\n-            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\r\n-        }\r\n-        \u002F\u002F DOM props\r\n-        if (el.props) {\r\n-            data += \"domProps:\" + (genProps(el.props)) + \",\";\r\n-        }\r\n-        \u002F\u002F event handlers\r\n-        if (el.events) {\r\n-            data += (genHandlers(el.events, false)) + \",\";\r\n-        }\r\n-        if (el.nativeEvents) {\r\n-            data += (genHandlers(el.nativeEvents, true)) + \",\";\r\n-        }\r\n-        \u002F\u002F slot target\r\n-        \u002F\u002F only for non-scoped slots\r\n-        if (el.slotTarget && !el.slotScope) {\r\n-            data += \"slot:\" + (el.slotTarget) + \",\";\r\n-        }\r\n-        \u002F\u002F scoped slots\r\n-        if (el.scopedSlots) {\r\n-            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\r\n-        }\r\n-        \u002F\u002F component v-model\r\n-        if (el.model) {\r\n-            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\r\n-        }\r\n-        \u002F\u002F inline-template\r\n-        if (el.inlineTemplate) {\r\n-            var inlineTemplate = genInlineTemplate(el, state);\r\n-            if (inlineTemplate) {\r\n-                data += inlineTemplate + \",\";\r\n-            }\r\n-        }\r\n-        data = data.replace(\u002F,$\u002F, '') + '}';\r\n-        \u002F\u002F v-bind dynamic argument wrap\r\n-        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\r\n-        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\r\n-        if (el.dynamicAttrs) {\r\n-            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\r\n-        }\r\n-        \u002F\u002F v-bind data wrap\r\n-        if (el.wrapData) {\r\n-            data = el.wrapData(data);\r\n-        }\r\n-        \u002F\u002F v-on data wrap\r\n-        if (el.wrapListeners) {\r\n-            data = el.wrapListeners(data);\r\n-        }\r\n-        return data\r\n-    }\r\n-\r\n-    function genDirectives (el, state) {\r\n-        var dirs = el.directives;\r\n-        if (!dirs) { return }\r\n-        var res = 'directives:[';\r\n-        var hasRuntime = false;\r\n-        var i, l, dir, needRuntime;\r\n-        for (i = 0, l = dirs.length; i \u003C l; i++) {\r\n-            dir = dirs[i];\r\n-            needRuntime = true;\r\n-            var gen = state.directives[dir.name];\r\n-            if (gen) {\r\n-                \u002F\u002F compile-time directive that manipulates AST.\r\n-                \u002F\u002F returns true if it also needs a runtime counterpart.\r\n-                needRuntime = !!gen(el, dir, state.warn);\r\n-            }\r\n-            if (needRuntime) {\r\n-                hasRuntime = true;\r\n-                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\r\n-            }\r\n-        }\r\n-        if (hasRuntime) {\r\n-            return res.slice(0, -1) + ']'\r\n-        }\r\n-    }\r\n-\r\n-    function genInlineTemplate (el, state) {\r\n-        var ast = el.children[0];\r\n-        if (el.children.length !== 1 || ast.type !== 1) {\r\n-            state.warn(\r\n-                'Inline-template components must have exactly one child element.',\r\n-                { start: el.start }\r\n-            );\r\n-        }\r\n-        if (ast && ast.type === 1) {\r\n-            var inlineRenderFns = generate(ast, state.options);\r\n-            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\r\n-        }\r\n-    }\r\n-\r\n-    function genScopedSlots (\r\n-        el,\r\n-        slots,\r\n-        state\r\n-    ) {\r\n-        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\r\n-        \u002F\u002F components with only scoped slots to skip forced updates from parent.\r\n-        \u002F\u002F but in some cases we have to bail-out of this optimization\r\n-        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\r\n-        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\r\n-                var slot = slots[key];\r\n-                return (\r\n-                    slot.slotTargetDynamic ||\r\n-                    slot.if ||\r\n-                    slot.for ||\r\n-                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\r\n-                )\r\n-            });\r\n-\r\n-        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\r\n-        \u002F\u002F it's possible for the same component to be reused but with different\r\n-        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\r\n-        \u002F\u002F the generated code of all the slot contents.\r\n-        var needsKey = !!el.if;\r\n-\r\n-        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\r\n-        \u002F\u002F disconnected due to the intermediate scope variable)\r\n-        \u002F\u002F #9438, #9506\r\n-        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\r\n-        \u002F\u002F and skip force updating ones that do not actually use scope variables.\r\n-        if (!needsForceUpdate) {\r\n-            var parent = el.parent;\r\n-            while (parent) {\r\n-                if (\r\n-                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\r\n-                    parent.for\r\n-                ) {\r\n-                    needsForceUpdate = true;\r\n-                    break\r\n-                }\r\n-                if (parent.if) {\r\n-                    needsKey = true;\r\n-                }\r\n-                parent = parent.parent;\r\n-            }\r\n-        }\r\n-\r\n-        var generatedSlots = Object.keys(slots)\r\n-            .map(function (key) { return genScopedSlot(slots[key], state); })\r\n-            .join(',');\r\n-\r\n-        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\r\n-    }\r\n-\r\n-    function hash(str) {\r\n-        var hash = 5381;\r\n-        var i = str.length;\r\n-        while(i) {\r\n-            hash = (hash * 33) ^ str.charCodeAt(--i);\r\n-        }\r\n-        return hash >>> 0\r\n-    }\r\n-\r\n-    function containsSlotChild (el) {\r\n-        if (el.type === 1) {\r\n-            if (el.tag === 'slot') {\r\n-                return true\r\n-            }\r\n-            return el.children.some(containsSlotChild)\r\n-        }\r\n-        return false\r\n-    }\r\n-\r\n-    function genScopedSlot (\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var isLegacySyntax = el.attrsMap['slot-scope'];\r\n-        if (el.if && !el.ifProcessed && !isLegacySyntax) {\r\n-            return genIf(el, state, genScopedSlot, \"null\")\r\n-        }\r\n-        if (el.for && !el.forProcessed) {\r\n-            return genFor(el, state, genScopedSlot)\r\n-        }\r\n-        var slotScope = el.slotScope === emptySlotScopeToken\r\n-            ? \"\"\r\n-            : String(el.slotScope);\r\n-        var fn = \"function(\" + slotScope + \"){\" +\r\n-            \"return \" + (el.tag === 'template'\r\n-                ? el.if && isLegacySyntax\r\n-                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\r\n-                    : genChildren(el, state) || 'undefined'\r\n-                : genElement(el, state)) + \"}\";\r\n-        \u002F\u002F reverse proxy v-slot without scope on this.$slots\r\n-        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\r\n-        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\r\n-    }\r\n-\r\n-    function genChildren (\r\n-        el,\r\n-        state,\r\n-        checkSkip,\r\n-        altGenElement,\r\n-        altGenNode\r\n-    ) {\r\n-        var children = el.children;\r\n-        if (children.length) {\r\n-            var el$1 = children[0];\r\n-            \u002F\u002F optimize single v-for\r\n-            if (children.length === 1 &&\r\n-                el$1.for &&\r\n-                el$1.tag !== 'template' &&\r\n-                el$1.tag !== 'slot'\r\n-            ) {\r\n-                var normalizationType = checkSkip\r\n-                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\r\n-                    : \"\";\r\n-                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\r\n-            }\r\n-            var normalizationType$1 = checkSkip\r\n-                ? getNormalizationType(children, state.maybeComponent)\r\n-                : 0;\r\n-            var gen = altGenNode || genNode;\r\n-            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F determine the normalization needed for the children array.\r\n-    \u002F\u002F 0: no normalization needed\r\n-    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\r\n-    \u002F\u002F 2: full normalization needed\r\n-    function getNormalizationType (\r\n-        children,\r\n-        maybeComponent\r\n-    ) {\r\n-        var res = 0;\r\n-        for (var i = 0; i \u003C children.length; i++) {\r\n-            var el = children[i];\r\n-            if (el.type !== 1) {\r\n-                continue\r\n-            }\r\n-            if (needsNormalization(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\r\n-                res = 2;\r\n-                break\r\n-            }\r\n-            if (maybeComponent(el) ||\r\n-                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\r\n-                res = 1;\r\n-            }\r\n-        }\r\n-        return res\r\n-    }\r\n-\r\n-    function needsNormalization (el) {\r\n-        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\r\n-    }\r\n-\r\n-    function genNode (node, state) {\r\n-        if (node.type === 1) {\r\n-            return genElement(node, state)\r\n-        } else if (node.type === 3 && node.isComment) {\r\n-            return genComment(node)\r\n-        } else {\r\n-            return genText(node)\r\n-        }\r\n-    }\r\n-\r\n-    function genText (text) {\r\n-        return (\"_v(\" + (text.type === 2\r\n-            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\r\n-            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\r\n-    }\r\n-\r\n-    function genComment (comment) {\r\n-        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\r\n-    }\r\n-\r\n-    function genSlot (el, state) {\r\n-        var slotName = el.slotName || '\"default\"';\r\n-        var children = genChildren(el, state);\r\n-        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\r\n-        var attrs = el.attrs || el.dynamicAttrs\r\n-            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\r\n-                \u002F\u002F slot props are camelized\r\n-                name: camelize(attr.name),\r\n-                value: attr.value,\r\n-                dynamic: attr.dynamic\r\n-            }); }))\r\n-            : null;\r\n-        var bind$$1 = el.attrsMap['v-bind'];\r\n-        if ((attrs || bind$$1) && !children) {\r\n-            res += \",null\";\r\n-        }\r\n-        if (attrs) {\r\n-            res += \",\" + attrs;\r\n-        }\r\n-        if (bind$$1) {\r\n-            res += (attrs ? '' : ',null') + \",\" + bind$$1;\r\n-        }\r\n-        return res + ')'\r\n-    }\r\n-\r\n-    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\r\n-    function genComponent (\r\n-        componentName,\r\n-        el,\r\n-        state\r\n-    ) {\r\n-        var children = el.inlineTemplate ? null : genChildren(el, state, true);\r\n-        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\r\n-    }\r\n-\r\n-    function genProps (props) {\r\n-        var staticProps = \"\";\r\n-        var dynamicProps = \"\";\r\n-        for (var i = 0; i \u003C props.length; i++) {\r\n-            var prop = props[i];\r\n-            var value = transformSpecialNewlines(prop.value);\r\n-            if (prop.dynamic) {\r\n-                dynamicProps += (prop.name) + \",\" + value + \",\";\r\n-            } else {\r\n-                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\r\n-            }\r\n-        }\r\n-        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\r\n-        if (dynamicProps) {\r\n-            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\r\n-        } else {\r\n-            return staticProps\r\n-        }\r\n-    }\r\n-\r\n-    \u002F\u002F #3895, #4268\r\n-    function transformSpecialNewlines (text) {\r\n-        return text\r\n-            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\r\n-            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    \u002F\u002F these keywords should not appear inside expressions, but operators like\r\n-    \u002F\u002F typeof, instanceof and in are allowed\r\n-    var prohibitedKeywordRE = new RegExp('\\\\b' + (\r\n-            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\r\n-            'super,throw,while,yield,delete,export,import,return,switch,default,' +\r\n-            'extends,finally,continue,debugger,function,arguments'\r\n-        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\r\n-\r\n-    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\r\n-    var unaryOperatorsRE = new RegExp('\\\\b' + (\r\n-            'delete,typeof,void'\r\n-        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\r\n-\r\n-    \u002F\u002F strip strings in expressions\r\n-    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\r\n-\r\n-    \u002F\u002F detect problematic expressions in a template\r\n-    function detectErrors (ast, warn) {\r\n-        if (ast) {\r\n-            checkNode(ast, warn);\r\n-        }\r\n-    }\r\n-\r\n-    function checkNode (node, warn) {\r\n-        if (node.type === 1) {\r\n-            for (var name in node.attrsMap) {\r\n-                if (dirRE.test(name)) {\r\n-                    var value = node.attrsMap[name];\r\n-                    if (value) {\r\n-                        var range = node.rawAttrsMap[name];\r\n-                        if (name === 'v-for') {\r\n-                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else if (onRE.test(name)) {\r\n-                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        } else {\r\n-                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\r\n-                        }\r\n-                    }\r\n-                }\r\n-            }\r\n-            if (node.children) {\r\n-                for (var i = 0; i \u003C node.children.length; i++) {\r\n-                    checkNode(node.children[i], warn);\r\n-                }\r\n-            }\r\n-        } else if (node.type === 2) {\r\n-            checkExpression(node.expression, node.text, warn, node);\r\n-        }\r\n-    }\r\n-\r\n-    function checkEvent (exp, text, warn, range) {\r\n-        var stipped = exp.replace(stripStringRE, '');\r\n-        var keywordMatch = stipped.match(unaryOperatorsRE);\r\n-        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\r\n-            warn(\r\n-                \"avoid using JavaScript unary operator as property name: \" +\r\n-                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\r\n-                range\r\n-            );\r\n-        }\r\n-        checkExpression(exp, text, warn, range);\r\n-    }\r\n-\r\n-    function checkFor (node, text, warn, range) {\r\n-        checkExpression(node.for || '', text, warn, range);\r\n-        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\r\n-        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\r\n-        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\r\n-    }\r\n-\r\n-    function checkIdentifier (\r\n-        ident,\r\n-        type,\r\n-        text,\r\n-        warn,\r\n-        range\r\n-    ) {\r\n-        if (typeof ident === 'string') {\r\n-            try {\r\n-                new Function((\"var \" + ident + \"=_\"));\r\n-            } catch (e) {\r\n-                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function checkExpression (exp, text, warn, range) {\r\n-        try {\r\n-            new Function((\"return \" + exp));\r\n-        } catch (e) {\r\n-            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\r\n-            if (keywordMatch) {\r\n-                warn(\r\n-                    \"avoid using JavaScript keyword as property name: \" +\r\n-                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\r\n-                    range\r\n-                );\r\n-            } else {\r\n-                warn(\r\n-                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\r\n-                    \"    \" + exp + \"\\n\\n\" +\r\n-                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\r\n-                    range\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var range = 2;\r\n-\r\n-    function generateCodeFrame (\r\n-        source,\r\n-        start,\r\n-        end\r\n-    ) {\r\n-        if ( start === void 0 ) start = 0;\r\n-        if ( end === void 0 ) end = source.length;\r\n-\r\n-        var lines = source.split(\u002F\\r?\\n\u002F);\r\n-        var count = 0;\r\n-        var res = [];\r\n-        for (var i = 0; i \u003C lines.length; i++) {\r\n-            count += lines[i].length + 1;\r\n-            if (count >= start) {\r\n-                for (var j = i - range; j \u003C= i + range || end > count; j++) {\r\n-                    if (j \u003C 0 || j >= lines.length) { continue }\r\n-                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\r\n-                    var lineLength = lines[j].length;\r\n-                    if (j === i) {\r\n-                        \u002F\u002F push underline\r\n-                        var pad = start - (count - lineLength) + 1;\r\n-                        var length = end > count ? lineLength - pad : end - start;\r\n-                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\r\n-                    } else if (j > i) {\r\n-                        if (end > count) {\r\n-                            var length$1 = Math.min(end - count, lineLength);\r\n-                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\r\n-                        }\r\n-                        count += lineLength + 1;\r\n-                    }\r\n-                }\r\n-                break\r\n-            }\r\n-        }\r\n-        return res.join('\\n')\r\n-    }\r\n-\r\n-    function repeat$1 (str, n) {\r\n-        var result = '';\r\n-        if (n > 0) {\r\n-            while (true) { \u002F\u002F eslint-disable-line\r\n-                if (n & 1) { result += str; }\r\n-                n >>>= 1;\r\n-                if (n \u003C= 0) { break }\r\n-                str += str;\r\n-            }\r\n-        }\r\n-        return result\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-\r\n-\r\n-    function createFunction (code, errors) {\r\n-        try {\r\n-            return new Function(code)\r\n-        } catch (err) {\r\n-            errors.push({ err: err, code: code });\r\n-            return noop\r\n-        }\r\n-    }\r\n-\r\n-    function createCompileToFunctionFn (compile) {\r\n-        var cache = Object.create(null);\r\n-\r\n-        return function compileToFunctions (\r\n-            template,\r\n-            options,\r\n-            vm\r\n-        ) {\r\n-            options = extend({}, options);\r\n-            var warn$$1 = options.warn || warn;\r\n-            delete options.warn;\r\n-\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                \u002F\u002F detect possible CSP restriction\r\n-                try {\r\n-                    new Function('return 1');\r\n-                } catch (e) {\r\n-                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\r\n-                        warn$$1(\r\n-                            'It seems you are using the standalone build of Vue.js in an ' +\r\n-                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\r\n-                            'The template compiler cannot work in this environment. Consider ' +\r\n-                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\r\n-                            'templates into render functions.'\r\n-                        );\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F check cache\r\n-            var key = options.delimiters\r\n-                ? String(options.delimiters) + template\r\n-                : template;\r\n-            if (cache[key]) {\r\n-                return cache[key]\r\n-            }\r\n-\r\n-            \u002F\u002F compile\r\n-            var compiled = compile(template, options);\r\n-\r\n-            \u002F\u002F check compilation errors\u002Ftips\r\n-            {\r\n-                if (compiled.errors && compiled.errors.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.errors.forEach(function (e) {\r\n-                            warn$$1(\r\n-                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\r\n-                                generateCodeFrame(template, e.start, e.end),\r\n-                                vm\r\n-                            );\r\n-                        });\r\n-                    } else {\r\n-                        warn$$1(\r\n-                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\r\n-                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\r\n-                            vm\r\n-                        );\r\n-                    }\r\n-                }\r\n-                if (compiled.tips && compiled.tips.length) {\r\n-                    if (options.outputSourceRange) {\r\n-                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\r\n-                    } else {\r\n-                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\r\n-                    }\r\n-                }\r\n-            }\r\n-\r\n-            \u002F\u002F turn code into functions\r\n-            var res = {};\r\n-            var fnGenErrors = [];\r\n-            res.render = createFunction(compiled.render, fnGenErrors);\r\n-            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\r\n-                return createFunction(code, fnGenErrors)\r\n-            });\r\n-\r\n-            \u002F\u002F check function generation errors.\r\n-            \u002F\u002F this should only happen if there is a bug in the compiler itself.\r\n-            \u002F\u002F mostly for codegen development use\r\n-          \u002F* istanbul ignore if *\u002F\r\n-            {\r\n-                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\r\n-                    warn$$1(\r\n-                        \"Failed to generate render function:\\n\\n\" +\r\n-                        fnGenErrors.map(function (ref) {\r\n-                            var err = ref.err;\r\n-                            var code = ref.code;\r\n-\r\n-                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\r\n-                        }).join('\\n'),\r\n-                        vm\r\n-                    );\r\n-                }\r\n-            }\r\n-\r\n-            return (cache[key] = res)\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    function createCompilerCreator (baseCompile) {\r\n-        return function createCompiler (baseOptions) {\r\n-            function compile (\r\n-                template,\r\n-                options\r\n-            ) {\r\n-                var finalOptions = Object.create(baseOptions);\r\n-                var errors = [];\r\n-                var tips = [];\r\n-\r\n-                var warn = function (msg, range, tip) {\r\n-                    (tip ? tips : errors).push(msg);\r\n-                };\r\n-\r\n-                if (options) {\r\n-                    if (options.outputSourceRange) {\r\n-                        \u002F\u002F $flow-disable-line\r\n-                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\r\n-\r\n-                        warn = function (msg, range, tip) {\r\n-                            var data = { msg: msg };\r\n-                            if (range) {\r\n-                                if (range.start != null) {\r\n-                                    data.start = range.start + leadingSpaceLength;\r\n-                                }\r\n-                                if (range.end != null) {\r\n-                                    data.end = range.end + leadingSpaceLength;\r\n-                                }\r\n-                            }\r\n-                            (tip ? tips : errors).push(data);\r\n-                        };\r\n-                    }\r\n-                    \u002F\u002F merge custom modules\r\n-                    if (options.modules) {\r\n-                        finalOptions.modules =\r\n-                            (baseOptions.modules || []).concat(options.modules);\r\n-                    }\r\n-                    \u002F\u002F merge custom directives\r\n-                    if (options.directives) {\r\n-                        finalOptions.directives = extend(\r\n-                            Object.create(baseOptions.directives || null),\r\n-                            options.directives\r\n-                        );\r\n-                    }\r\n-                    \u002F\u002F copy other options\r\n-                    for (var key in options) {\r\n-                        if (key !== 'modules' && key !== 'directives') {\r\n-                            finalOptions[key] = options[key];\r\n-                        }\r\n-                    }\r\n-                }\r\n-\r\n-                finalOptions.warn = warn;\r\n-\r\n-                var compiled = baseCompile(template.trim(), finalOptions);\r\n-                {\r\n-                    detectErrors(compiled.ast, warn);\r\n-                }\r\n-                compiled.errors = errors;\r\n-                compiled.tips = tips;\r\n-                return compiled\r\n-            }\r\n-\r\n-            return {\r\n-                compile: compile,\r\n-                compileToFunctions: createCompileToFunctionFn(compile)\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\r\n-    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\r\n-    \u002F\u002F Here we just export a default compiler using the default parts.\r\n-    var createCompiler = createCompilerCreator(function baseCompile (\r\n-        template,\r\n-        options\r\n-    ) {\r\n-        var ast = parse(template.trim(), options);\r\n-        if (options.optimize !== false) {\r\n-            optimize(ast, options);\r\n-        }\r\n-        var code = generate(ast, options);\r\n-        return {\r\n-            ast: ast,\r\n-            render: code.render,\r\n-            staticRenderFns: code.staticRenderFns\r\n-        }\r\n-    });\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var ref$1 = createCompiler(baseOptions);\r\n-    var compile = ref$1.compile;\r\n-    var compileToFunctions = ref$1.compileToFunctions;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    \u002F\u002F check whether current browser encodes a char inside attribute values\r\n-    var div;\r\n-    function getShouldDecode (href) {\r\n-        div = div || document.createElement('div');\r\n-        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\r\n-        return div.innerHTML.indexOf('&#10;') > 0\r\n-    }\r\n-\r\n-    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\r\n-    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\r\n-    \u002F\u002F #6828: chrome encodes content in a[href]\r\n-    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\r\n-\r\n-  \u002F*  *\u002F\r\n-\r\n-    var idToTemplate = cached(function (id) {\r\n-        var el = query(id);\r\n-        return el && el.innerHTML\r\n-    });\r\n-\r\n-    var mount = Vue.prototype.$mount;\r\n-    Vue.prototype.$mount = function (\r\n-        el,\r\n-        hydrating\r\n-    ) {\r\n-        el = el && query(el);\r\n-\r\n-      \u002F* istanbul ignore if *\u002F\r\n-        if (el === document.body || el === document.documentElement) {\r\n-            warn(\r\n-                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\r\n-            );\r\n-            return this\r\n-        }\r\n-\r\n-        var options = this.$options;\r\n-        \u002F\u002F resolve template\u002Fel and convert to render function\r\n-        if (!options.render) {\r\n-            var template = options.template;\r\n-            if (template) {\r\n-                if (typeof template === 'string') {\r\n-                    if (template.charAt(0) === '#') {\r\n-                        template = idToTemplate(template);\r\n-                      \u002F* istanbul ignore if *\u002F\r\n-                        if (!template) {\r\n-                            warn(\r\n-                                (\"Template element not found or is empty: \" + (options.template)),\r\n-                                this\r\n-                            );\r\n-                        }\r\n-                    }\r\n-                } else if (template.nodeType) {\r\n-                    template = template.innerHTML;\r\n-                } else {\r\n-                    {\r\n-                        warn('invalid template option:' + template, this);\r\n-                    }\r\n-                    return this\r\n-                }\r\n-            } else if (el) {\r\n-                template = getOuterHTML(el);\r\n-            }\r\n-            if (template) {\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile');\r\n-                }\r\n-\r\n-                var ref = compileToFunctions(template, {\r\n-                    outputSourceRange: \"development\" !== 'production',\r\n-                    shouldDecodeNewlines: shouldDecodeNewlines,\r\n-                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\r\n-                    delimiters: options.delimiters,\r\n-                    comments: options.comments\r\n-                }, this);\r\n-                var render = ref.render;\r\n-                var staticRenderFns = ref.staticRenderFns;\r\n-                options.render = render;\r\n-                options.staticRenderFns = staticRenderFns;\r\n-\r\n-              \u002F* istanbul ignore if *\u002F\r\n-                if (config.performance && mark) {\r\n-                    mark('compile end');\r\n-                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\r\n-                }\r\n-            }\r\n-        }\r\n-        return mount.call(this, el, hydrating)\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Get outerHTML of elements, taking care\r\n-     * of SVG elements in IE as well.\r\n-     *\u002F\r\n-    function getOuterHTML (el) {\r\n-        if (el.outerHTML) {\r\n-            return el.outerHTML\r\n-        } else {\r\n-            var container = document.createElement('div');\r\n-            container.appendChild(el.cloneNode(true));\r\n-            return container.innerHTML\r\n-        }\r\n-    }\r\n-\r\n-    Vue.compile = compileToFunctions;\r\n-\r\n-    return Vue;\r\n-\r\n+\u002F*!\n+ * Vue.js v2.6.10\n+ * (c) 2014-2019 Evan You\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vue = factory());\n+}(this, function () { 'use strict';\n+\n+  \u002F*  *\u002F\n+\n+    var emptyObject = Object.freeze({});\n+\n+    \u002F\u002F These helpers produce better VM code in JS engines due to their\n+    \u002F\u002F explicitness and function inlining.\n+    function isUndef (v) {\n+        return v === undefined || v === null\n+    }\n+\n+    function isDef (v) {\n+        return v !== undefined && v !== null\n+    }\n+\n+    function isTrue (v) {\n+        return v === true\n+    }\n+\n+    function isFalse (v) {\n+        return v === false\n+    }\n+\n+    \u002F**\n+     * Check if value is primitive.\n+     *\u002F\n+    function isPrimitive (value) {\n+        return (\n+            typeof value === 'string' ||\n+            typeof value === 'number' ||\n+            \u002F\u002F $flow-disable-line\n+            typeof value === 'symbol' ||\n+            typeof value === 'boolean'\n+        )\n+    }\n+\n+    \u002F**\n+     * Quick object check - this is primarily used to tell\n+     * Objects from primitive values when we know the value\n+     * is a JSON-compliant type.\n+     *\u002F\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    \u002F**\n+     * Get the raw type string of a value, e.g., [object Object].\n+     *\u002F\n+    var _toString = Object.prototype.toString;\n+\n+    function toRawType (value) {\n+        return _toString.call(value).slice(8, -1)\n+    }\n+\n+    \u002F**\n+     * Strict object type check. Only returns true\n+     * for plain JavaScript objects.\n+     *\u002F\n+    function isPlainObject (obj) {\n+        return _toString.call(obj) === '[object Object]'\n+    }\n+\n+    function isRegExp (v) {\n+        return _toString.call(v) === '[object RegExp]'\n+    }\n+\n+    \u002F**\n+     * Check if val is a valid array index.\n+     *\u002F\n+    function isValidArrayIndex (val) {\n+        var n = parseFloat(String(val));\n+        return n >= 0 && Math.floor(n) === n && isFinite(val)\n+    }\n+\n+    function isPromise (val) {\n+        return (\n+            isDef(val) &&\n+            typeof val.then === 'function' &&\n+            typeof val.catch === 'function'\n+        )\n+    }\n+\n+    \u002F**\n+     * Convert a value to a string that is actually rendered.\n+     *\u002F\n+    function toString (val) {\n+        return val == null\n+            ? ''\n+            : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n+                ? JSON.stringify(val, null, 2)\n+                : String(val)\n+    }\n+\n+    \u002F**\n+     * Convert an input value to a number for persistence.\n+     * If the conversion fails, return original string.\n+     *\u002F\n+    function toNumber (val) {\n+        var n = parseFloat(val);\n+        return isNaN(n) ? val : n\n+    }\n+\n+    \u002F**\n+     * Make a map and return a function for checking if a key\n+     * is in that map.\n+     *\u002F\n+    function makeMap (\n+        str,\n+        expectsLowerCase\n+    ) {\n+        var map = Object.create(null);\n+        var list = str.split(',');\n+        for (var i = 0; i \u003C list.length; i++) {\n+            map[list[i]] = true;\n+        }\n+        return expectsLowerCase\n+            ? function (val) { return map[val.toLowerCase()]; }\n+            : function (val) { return map[val]; }\n+    }\n+\n+    \u002F**\n+     * Check if a tag is a built-in tag.\n+     *\u002F\n+    var isBuiltInTag = makeMap('slot,component', true);\n+\n+    \u002F**\n+     * Check if an attribute is a reserved attribute.\n+     *\u002F\n+    var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n+\n+    \u002F**\n+     * Remove an item from an array.\n+     *\u002F\n+    function remove (arr, item) {\n+        if (arr.length) {\n+            var index = arr.indexOf(item);\n+            if (index > -1) {\n+                return arr.splice(index, 1)\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Check whether an object has the property.\n+     *\u002F\n+    var hasOwnProperty = Object.prototype.hasOwnProperty;\n+    function hasOwn (obj, key) {\n+        return hasOwnProperty.call(obj, key)\n+    }\n+\n+    \u002F**\n+     * Create a cached version of a pure function.\n+     *\u002F\n+    function cached (fn) {\n+        var cache = Object.create(null);\n+        return (function cachedFn (str) {\n+            var hit = cache[str];\n+            return hit || (cache[str] = fn(str))\n+        })\n+    }\n+\n+    \u002F**\n+     * Camelize a hyphen-delimited string.\n+     *\u002F\n+    var camelizeRE = \u002F-(\\w)\u002Fg;\n+    var camelize = cached(function (str) {\n+        return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n+    });\n+\n+    \u002F**\n+     * Capitalize a string.\n+     *\u002F\n+    var capitalize = cached(function (str) {\n+        return str.charAt(0).toUpperCase() + str.slice(1)\n+    });\n+\n+    \u002F**\n+     * Hyphenate a camelCase string.\n+     *\u002F\n+    var hyphenateRE = \u002F\\B([A-Z])\u002Fg;\n+    var hyphenate = cached(function (str) {\n+        return str.replace(hyphenateRE, '-$1').toLowerCase()\n+    });\n+\n+    \u002F**\n+     * Simple bind polyfill for environments that do not support it,\n+     * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n+     * since native bind is now performant enough in most browsers.\n+     * But removing it would mean breaking code that was able to run in\n+     * PhantomJS 1.x, so this must be kept for backward compatibility.\n+     *\u002F\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function polyfillBind (fn, ctx) {\n+        function boundFn (a) {\n+            var l = arguments.length;\n+            return l\n+                ? l > 1\n+                    ? fn.apply(ctx, arguments)\n+                    : fn.call(ctx, a)\n+                : fn.call(ctx)\n+        }\n+\n+        boundFn._length = fn.length;\n+        return boundFn\n+    }\n+\n+    function nativeBind (fn, ctx) {\n+        return fn.bind(ctx)\n+    }\n+\n+    var bind = Function.prototype.bind\n+        ? nativeBind\n+        : polyfillBind;\n+\n+    \u002F**\n+     * Convert an Array-like object to a real Array.\n+     *\u002F\n+    function toArray (list, start) {\n+        start = start || 0;\n+        var i = list.length - start;\n+        var ret = new Array(i);\n+        while (i--) {\n+            ret[i] = list[i + start];\n+        }\n+        return ret\n+    }\n+\n+    \u002F**\n+     * Mix properties into target object.\n+     *\u002F\n+    function extend (to, _from) {\n+        for (var key in _from) {\n+            to[key] = _from[key];\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Merge an Array of Objects into a single Object.\n+     *\u002F\n+    function toObject (arr) {\n+        var res = {};\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (arr[i]) {\n+                extend(res, arr[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Perform no operation.\n+     * Stubbing args to make Flow happy without leaving useless transpiled code\n+     * with ...rest (https:\u002F\u002Fflow.org\u002Fblog\u002F2017\u002F05\u002F07\u002FStrict-Function-Call-Arity\u002F).\n+     *\u002F\n+    function noop (a, b, c) {}\n+\n+    \u002F**\n+     * Always return false.\n+     *\u002F\n+    var no = function (a, b, c) { return false; };\n+\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    \u002F**\n+     * Return the same value.\n+     *\u002F\n+    var identity = function (_) { return _; };\n+\n+    \u002F**\n+     * Generate a string containing static keys from compiler modules.\n+     *\u002F\n+    function genStaticKeys (modules) {\n+        return modules.reduce(function (keys, m) {\n+            return keys.concat(m.staticKeys || [])\n+        }, []).join(',')\n+    }\n+\n+    \u002F**\n+     * Check if two values are loosely equal - that is,\n+     * if they are plain objects, do they have the same shape?\n+     *\u002F\n+    function looseEqual (a, b) {\n+        if (a === b) { return true }\n+        var isObjectA = isObject(a);\n+        var isObjectB = isObject(b);\n+        if (isObjectA && isObjectB) {\n+            try {\n+                var isArrayA = Array.isArray(a);\n+                var isArrayB = Array.isArray(b);\n+                if (isArrayA && isArrayB) {\n+                    return a.length === b.length && a.every(function (e, i) {\n+                            return looseEqual(e, b[i])\n+                        })\n+                } else if (a instanceof Date && b instanceof Date) {\n+                    return a.getTime() === b.getTime()\n+                } else if (!isArrayA && !isArrayB) {\n+                    var keysA = Object.keys(a);\n+                    var keysB = Object.keys(b);\n+                    return keysA.length === keysB.length && keysA.every(function (key) {\n+                            return looseEqual(a[key], b[key])\n+                        })\n+                } else {\n+                  \u002F* istanbul ignore next *\u002F\n+                    return false\n+                }\n+            } catch (e) {\n+              \u002F* istanbul ignore next *\u002F\n+                return false\n+            }\n+        } else if (!isObjectA && !isObjectB) {\n+            return String(a) === String(b)\n+        } else {\n+            return false\n+        }\n+    }\n+\n+    \u002F**\n+     * Return the first index at which a loosely equal value can be\n+     * found in the array (if value is a plain object, the array must\n+     * contain an object of the same shape), or -1 if it is not present.\n+     *\u002F\n+    function looseIndexOf (arr, val) {\n+        for (var i = 0; i \u003C arr.length; i++) {\n+            if (looseEqual(arr[i], val)) { return i }\n+        }\n+        return -1\n+    }\n+\n+    \u002F**\n+     * Ensure a function is called only once.\n+     *\u002F\n+    function once (fn) {\n+        var called = false;\n+        return function () {\n+            if (!called) {\n+                called = true;\n+                fn.apply(this, arguments);\n+            }\n+        }\n+    }\n+\n+    var SSR_ATTR = 'data-server-rendered';\n+\n+    var ASSET_TYPES = [\n+        'component',\n+        'directive',\n+        'filter'\n+    ];\n+\n+    var LIFECYCLE_HOOKS = [\n+        'beforeCreate',\n+        'created',\n+        'beforeMount',\n+        'mounted',\n+        'beforeUpdate',\n+        'updated',\n+        'beforeDestroy',\n+        'destroyed',\n+        'activated',\n+        'deactivated',\n+        'errorCaptured',\n+        'serverPrefetch'\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var config = ({\n+        \u002F**\n+         * Option merge strategies (used in core\u002Futil\u002Foptions)\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        optionMergeStrategies: Object.create(null),\n+\n+        \u002F**\n+         * Whether to suppress warnings.\n+         *\u002F\n+        silent: false,\n+\n+        \u002F**\n+         * Show production mode tip message on boot?\n+         *\u002F\n+        productionTip: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to enable devtools\n+         *\u002F\n+        devtools: \"development\" !== 'production',\n+\n+        \u002F**\n+         * Whether to record perf\n+         *\u002F\n+        performance: false,\n+\n+        \u002F**\n+         * Error handler for watcher errors\n+         *\u002F\n+        errorHandler: null,\n+\n+        \u002F**\n+         * Warn handler for watcher warns\n+         *\u002F\n+        warnHandler: null,\n+\n+        \u002F**\n+         * Ignore certain custom elements\n+         *\u002F\n+        ignoredElements: [],\n+\n+        \u002F**\n+         * Custom user key aliases for v-on\n+         *\u002F\n+        \u002F\u002F $flow-disable-line\n+        keyCodes: Object.create(null),\n+\n+        \u002F**\n+         * Check if a tag is reserved so that it cannot be registered as a\n+         * component. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedTag: no,\n+\n+        \u002F**\n+         * Check if an attribute is reserved so that it cannot be used as a component\n+         * prop. This is platform-dependent and may be overwritten.\n+         *\u002F\n+        isReservedAttr: no,\n+\n+        \u002F**\n+         * Check if a tag is an unknown element.\n+         * Platform-dependent.\n+         *\u002F\n+        isUnknownElement: no,\n+\n+        \u002F**\n+         * Get the namespace of an element\n+         *\u002F\n+        getTagNamespace: noop,\n+\n+        \u002F**\n+         * Parse the real tag name for the specific platform.\n+         *\u002F\n+        parsePlatformTagName: identity,\n+\n+        \u002F**\n+         * Check if an attribute must be bound using property, e.g. value\n+         * Platform-dependent.\n+         *\u002F\n+        mustUseProp: no,\n+\n+        \u002F**\n+         * Perform updates asynchronously. Intended to be used by Vue Test Utils\n+         * This will significantly reduce performance if set to false.\n+         *\u002F\n+        async: true,\n+\n+        \u002F**\n+         * Exposed for legacy reasons\n+         *\u002F\n+        _lifecycleHooks: LIFECYCLE_HOOKS\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * unicode letters used for parsing html tags, component names and property paths.\n+     * using https:\u002F\u002Fwww.w3.org\u002FTR\u002Fhtml53\u002Fsemantics-scripting.html#potentialcustomelementname\n+     * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n+     *\u002F\n+    var unicodeRegExp = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\n+\n+    \u002F**\n+     * Check if a string starts with $ or _\n+     *\u002F\n+    function isReserved (str) {\n+        var c = (str + '').charCodeAt(0);\n+        return c === 0x24 || c === 0x5F\n+    }\n+\n+    \u002F**\n+     * Define a property.\n+     *\u002F\n+    function def (obj, key, val, enumerable) {\n+        Object.defineProperty(obj, key, {\n+            value: val,\n+            enumerable: !!enumerable,\n+            writable: true,\n+            configurable: true\n+        });\n+    }\n+\n+    \u002F**\n+     * Parse simple path.\n+     *\u002F\n+    var bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\n+    function parsePath (path) {\n+        if (bailRE.test(path)) {\n+            return\n+        }\n+        var segments = path.split('.');\n+        return function (obj) {\n+            for (var i = 0; i \u003C segments.length; i++) {\n+                if (!obj) { return }\n+                obj = obj[segments[i]];\n+            }\n+            return obj\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F can we use __proto__?\n+    var hasProto = '__proto__' in {};\n+\n+    \u002F\u002F Browser environment sniffing\n+    var inBrowser = typeof window !== 'undefined';\n+    var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\n+    var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\n+    var UA = inBrowser && window.navigator.userAgent.toLowerCase();\n+    var isIE = UA && \u002Fmsie|trident\u002F.test(UA);\n+    var isIE9 = UA && UA.indexOf('msie 9.0') > 0;\n+    var isEdge = UA && UA.indexOf('edge\u002F') > 0;\n+    var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\n+    var isIOS = (UA && \u002Fiphone|ipad|ipod|ios\u002F.test(UA)) || (weexPlatform === 'ios');\n+    var isChrome = UA && \u002Fchrome\\\u002F\\d+\u002F.test(UA) && !isEdge;\n+    var isPhantomJS = UA && \u002Fphantomjs\u002F.test(UA);\n+    var isFF = UA && UA.match(\u002Ffirefox\\\u002F(\\d+)\u002F);\n+\n+    \u002F\u002F Firefox has a \"watch\" function on Object.prototype...\n+    var nativeWatch = ({}).watch;\n+\n+    var supportsPassive = false;\n+    if (inBrowser) {\n+        try {\n+            var opts = {};\n+            Object.defineProperty(opts, 'passive', ({\n+                get: function get () {\n+                  \u002F* istanbul ignore next *\u002F\n+                    supportsPassive = true;\n+                }\n+            })); \u002F\u002F https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fflow\u002Fissues\u002F285\n+            window.addEventListener('test-passive', null, opts);\n+        } catch (e) {}\n+    }\n+\n+    \u002F\u002F this needs to be lazy-evaled because vue may be required before\n+    \u002F\u002F vue-server-renderer can set VUE_ENV\n+    var _isServer;\n+    var isServerRendering = function () {\n+        if (_isServer === undefined) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n+                \u002F\u002F detect presence of vue-server-renderer and avoid\n+                \u002F\u002F Webpack shimming the process\n+                _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n+            } else {\n+                _isServer = false;\n+            }\n+        }\n+        return _isServer\n+    };\n+\n+    \u002F\u002F detect devtools\n+    var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function isNative (Ctor) {\n+        return typeof Ctor === 'function' && \u002Fnative code\u002F.test(Ctor.toString())\n+    }\n+\n+    var hasSymbol =\n+        typeof Symbol !== 'undefined' && isNative(Symbol) &&\n+        typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n+\n+    var _Set;\n+  \u002F* istanbul ignore if *\u002F \u002F\u002F $flow-disable-line\n+    if (typeof Set !== 'undefined' && isNative(Set)) {\n+        \u002F\u002F use native Set when available.\n+        _Set = Set;\n+    } else {\n+        \u002F\u002F a non-standard Set polyfill that only works with primitive keys.\n+        _Set = \u002F*@__PURE__*\u002F(function () {\n+            function Set () {\n+                this.set = Object.create(null);\n+            }\n+            Set.prototype.has = function has (key) {\n+                return this.set[key] === true\n+            };\n+            Set.prototype.add = function add (key) {\n+                this.set[key] = true;\n+            };\n+            Set.prototype.clear = function clear () {\n+                this.set = Object.create(null);\n+            };\n+\n+            return Set;\n+        }());\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn = noop;\n+    var tip = noop;\n+    var generateComponentTrace = (noop); \u002F\u002F work around flow check\n+    var formatComponentName = (noop);\n+\n+    {\n+        var hasConsole = typeof console !== 'undefined';\n+        var classifyRE = \u002F(?:^|[-_])(\\w)\u002Fg;\n+        var classify = function (str) { return str\n+            .replace(classifyRE, function (c) { return c.toUpperCase(); })\n+            .replace(\u002F[-_]\u002Fg, ''); };\n+\n+        warn = function (msg, vm) {\n+            var trace = vm ? generateComponentTrace(vm) : '';\n+\n+            if (config.warnHandler) {\n+                config.warnHandler.call(null, msg, vm, trace);\n+            } else if (hasConsole && (!config.silent)) {\n+                console.error((\"[Vue warn]: \" + msg + trace));\n+            }\n+        };\n+\n+        tip = function (msg, vm) {\n+            if (hasConsole && (!config.silent)) {\n+                console.warn(\"[Vue tip]: \" + msg + (\n+                        vm ? generateComponentTrace(vm) : ''\n+                    ));\n+            }\n+        };\n+\n+        formatComponentName = function (vm, includeFile) {\n+            if (vm.$root === vm) {\n+                return '\u003CRoot>'\n+            }\n+            var options = typeof vm === 'function' && vm.cid != null\n+                ? vm.options\n+                : vm._isVue\n+                    ? vm.$options || vm.constructor.options\n+                    : vm;\n+            var name = options.name || options._componentTag;\n+            var file = options.__file;\n+            if (!name && file) {\n+                var match = file.match(\u002F([^\u002F\\\\]+)\\.vue$\u002F);\n+                name = match && match[1];\n+            }\n+\n+            return (\n+                (name ? (\"\u003C\" + (classify(name)) + \">\") : \"\u003CAnonymous>\") +\n+                (file && includeFile !== false ? (\" at \" + file) : '')\n+            )\n+        };\n+\n+        var repeat = function (str, n) {\n+            var res = '';\n+            while (n) {\n+                if (n % 2 === 1) { res += str; }\n+                if (n > 1) { str += str; }\n+                n >>= 1;\n+            }\n+            return res\n+        };\n+\n+        generateComponentTrace = function (vm) {\n+            if (vm._isVue && vm.$parent) {\n+                var tree = [];\n+                var currentRecursiveSequence = 0;\n+                while (vm) {\n+                    if (tree.length > 0) {\n+                        var last = tree[tree.length - 1];\n+                        if (last.constructor === vm.constructor) {\n+                            currentRecursiveSequence++;\n+                            vm = vm.$parent;\n+                            continue\n+                        } else if (currentRecursiveSequence > 0) {\n+                            tree[tree.length - 1] = [last, currentRecursiveSequence];\n+                            currentRecursiveSequence = 0;\n+                        }\n+                    }\n+                    tree.push(vm);\n+                    vm = vm.$parent;\n+                }\n+                return '\\n\\nfound in\\n\\n' + tree\n+                        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n+                            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n+                            : formatComponentName(vm))); })\n+                        .join('\\n')\n+            } else {\n+                return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid = 0;\n+\n+    \u002F**\n+     * A dep is an observable that can have multiple\n+     * directives subscribing to it.\n+     *\u002F\n+    var Dep = function Dep () {\n+        this.id = uid++;\n+        this.subs = [];\n+    };\n+\n+    Dep.prototype.addSub = function addSub (sub) {\n+        this.subs.push(sub);\n+    };\n+\n+    Dep.prototype.removeSub = function removeSub (sub) {\n+        remove(this.subs, sub);\n+    };\n+\n+    Dep.prototype.depend = function depend () {\n+        if (Dep.target) {\n+            Dep.target.addDep(this);\n+        }\n+    };\n+\n+    Dep.prototype.notify = function notify () {\n+        \u002F\u002F stabilize the subscriber list first\n+        var subs = this.subs.slice();\n+        if (!config.async) {\n+            \u002F\u002F subs aren't sorted in scheduler if not running async\n+            \u002F\u002F we need to sort them now to make sure they fire in correct\n+            \u002F\u002F order\n+            subs.sort(function (a, b) { return a.id - b.id; });\n+        }\n+        for (var i = 0, l = subs.length; i \u003C l; i++) {\n+            subs[i].update();\n+        }\n+    };\n+\n+    \u002F\u002F The current target watcher being evaluated.\n+    \u002F\u002F This is globally unique because only one watcher\n+    \u002F\u002F can be evaluated at a time.\n+    Dep.target = null;\n+    var targetStack = [];\n+\n+    function pushTarget (target) {\n+        targetStack.push(target);\n+        Dep.target = target;\n+    }\n+\n+    function popTarget () {\n+        targetStack.pop();\n+        Dep.target = targetStack[targetStack.length - 1];\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var VNode = function VNode (\n+        tag,\n+        data,\n+        children,\n+        text,\n+        elm,\n+        context,\n+        componentOptions,\n+        asyncFactory\n+    ) {\n+        this.tag = tag;\n+        this.data = data;\n+        this.children = children;\n+        this.text = text;\n+        this.elm = elm;\n+        this.ns = undefined;\n+        this.context = context;\n+        this.fnContext = undefined;\n+        this.fnOptions = undefined;\n+        this.fnScopeId = undefined;\n+        this.key = data && data.key;\n+        this.componentOptions = componentOptions;\n+        this.componentInstance = undefined;\n+        this.parent = undefined;\n+        this.raw = false;\n+        this.isStatic = false;\n+        this.isRootInsert = true;\n+        this.isComment = false;\n+        this.isCloned = false;\n+        this.isOnce = false;\n+        this.asyncFactory = asyncFactory;\n+        this.asyncMeta = undefined;\n+        this.isAsyncPlaceholder = false;\n+    };\n+\n+    var prototypeAccessors = { child: { configurable: true } };\n+\n+    \u002F\u002F DEPRECATED: alias for componentInstance for backwards compat.\n+  \u002F* istanbul ignore next *\u002F\n+    prototypeAccessors.child.get = function () {\n+        return this.componentInstance\n+    };\n+\n+    Object.defineProperties( VNode.prototype, prototypeAccessors );\n+\n+    var createEmptyVNode = function (text) {\n+        if ( text === void 0 ) text = '';\n+\n+        var node = new VNode();\n+        node.text = text;\n+        node.isComment = true;\n+        return node\n+    };\n+\n+    function createTextVNode (val) {\n+        return new VNode(undefined, undefined, undefined, String(val))\n+    }\n+\n+    \u002F\u002F optimized shallow clone\n+    \u002F\u002F used for static nodes and slot nodes because they may be reused across\n+    \u002F\u002F multiple renders, cloning them avoids errors when DOM manipulations rely\n+    \u002F\u002F on their elm reference.\n+    function cloneVNode (vnode) {\n+        var cloned = new VNode(\n+            vnode.tag,\n+            vnode.data,\n+            \u002F\u002F #7975\n+            \u002F\u002F clone children array to avoid mutating original in case of cloning\n+            \u002F\u002F a child.\n+            vnode.children && vnode.children.slice(),\n+            vnode.text,\n+            vnode.elm,\n+            vnode.context,\n+            vnode.componentOptions,\n+            vnode.asyncFactory\n+        );\n+        cloned.ns = vnode.ns;\n+        cloned.isStatic = vnode.isStatic;\n+        cloned.key = vnode.key;\n+        cloned.isComment = vnode.isComment;\n+        cloned.fnContext = vnode.fnContext;\n+        cloned.fnOptions = vnode.fnOptions;\n+        cloned.fnScopeId = vnode.fnScopeId;\n+        cloned.asyncMeta = vnode.asyncMeta;\n+        cloned.isCloned = true;\n+        return cloned\n+    }\n+\n+  \u002F*\n+   * not type checking this file because flow doesn't play well with\n+   * dynamically accessing methods on Array prototype\n+   *\u002F\n+\n+    var arrayProto = Array.prototype;\n+    var arrayMethods = Object.create(arrayProto);\n+\n+    var methodsToPatch = [\n+        'push',\n+        'pop',\n+        'shift',\n+        'unshift',\n+        'splice',\n+        'sort',\n+        'reverse'\n+    ];\n+\n+    \u002F**\n+     * Intercept mutating methods and emit events\n+     *\u002F\n+    methodsToPatch.forEach(function (method) {\n+        \u002F\u002F cache original method\n+        var original = arrayProto[method];\n+        def(arrayMethods, method, function mutator () {\n+            var args = [], len = arguments.length;\n+            while ( len-- ) args[ len ] = arguments[ len ];\n+\n+            var result = original.apply(this, args);\n+            var ob = this.__ob__;\n+            var inserted;\n+            switch (method) {\n+                case 'push':\n+                case 'unshift':\n+                    inserted = args;\n+                    break\n+                case 'splice':\n+                    inserted = args.slice(2);\n+                    break\n+            }\n+            if (inserted) { ob.observeArray(inserted); }\n+            \u002F\u002F notify change\n+            ob.dep.notify();\n+            return result\n+        });\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n+\n+    \u002F**\n+     * In some cases we may want to disable observation inside a component's\n+     * update computation.\n+     *\u002F\n+    var shouldObserve = true;\n+\n+    function toggleObserving (value) {\n+        shouldObserve = value;\n+    }\n+\n+    \u002F**\n+     * Observer class that is attached to each observed\n+     * object. Once attached, the observer converts the target\n+     * object's property keys into getter\u002Fsetters that\n+     * collect dependencies and dispatch updates.\n+     *\u002F\n+    var Observer = function Observer (value) {\n+        this.value = value;\n+        this.dep = new Dep();\n+        this.vmCount = 0;\n+        def(value, '__ob__', this);\n+        if (Array.isArray(value)) {\n+            if (hasProto) {\n+                protoAugment(value, arrayMethods);\n+            } else {\n+                copyAugment(value, arrayMethods, arrayKeys);\n+            }\n+            this.observeArray(value);\n+        } else {\n+            this.walk(value);\n+        }\n+    };\n+\n+    \u002F**\n+     * Walk through all properties and convert them into\n+     * getter\u002Fsetters. This method should only be called when\n+     * value type is Object.\n+     *\u002F\n+    Observer.prototype.walk = function walk (obj) {\n+        var keys = Object.keys(obj);\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            defineReactive$$1(obj, keys[i]);\n+        }\n+    };\n+\n+    \u002F**\n+     * Observe a list of Array items.\n+     *\u002F\n+    Observer.prototype.observeArray = function observeArray (items) {\n+        for (var i = 0, l = items.length; i \u003C l; i++) {\n+            observe(items[i]);\n+        }\n+    };\n+\n+    \u002F\u002F helpers\n+\n+    \u002F**\n+     * Augment a target Object or Array by intercepting\n+     * the prototype chain using __proto__\n+     *\u002F\n+    function protoAugment (target, src) {\n+      \u002F* eslint-disable no-proto *\u002F\n+        target.__proto__ = src;\n+      \u002F* eslint-enable no-proto *\u002F\n+    }\n+\n+    \u002F**\n+     * Augment a target Object or Array by defining\n+     * hidden properties.\n+     *\u002F\n+  \u002F* istanbul ignore next *\u002F\n+    function copyAugment (target, src, keys) {\n+        for (var i = 0, l = keys.length; i \u003C l; i++) {\n+            var key = keys[i];\n+            def(target, key, src[key]);\n+        }\n+    }\n+\n+    \u002F**\n+     * Attempt to create an observer instance for a value,\n+     * returns the new observer if successfully observed,\n+     * or the existing observer if the value already has one.\n+     *\u002F\n+    function observe (value, asRootData) {\n+        if (!isObject(value) || value instanceof VNode) {\n+            return\n+        }\n+        var ob;\n+        if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n+            ob = value.__ob__;\n+        } else if (\n+            shouldObserve &&\n+            !isServerRendering() &&\n+            (Array.isArray(value) || isPlainObject(value)) &&\n+            Object.isExtensible(value) &&\n+            !value._isVue\n+        ) {\n+            ob = new Observer(value);\n+        }\n+        if (asRootData && ob) {\n+            ob.vmCount++;\n+        }\n+        return ob\n+    }\n+\n+    \u002F**\n+     * Define a reactive property on an Object.\n+     *\u002F\n+    function defineReactive$$1 (\n+        obj,\n+        key,\n+        val,\n+        customSetter,\n+        shallow\n+    ) {\n+        var dep = new Dep();\n+\n+        var property = Object.getOwnPropertyDescriptor(obj, key);\n+        if (property && property.configurable === false) {\n+            return\n+        }\n+\n+        \u002F\u002F cater for pre-defined getter\u002Fsetters\n+        var getter = property && property.get;\n+        var setter = property && property.set;\n+        if ((!getter || setter) && arguments.length === 2) {\n+            val = obj[key];\n+        }\n+\n+        var childOb = !shallow && observe(val);\n+        Object.defineProperty(obj, key, {\n+            enumerable: true,\n+            configurable: true,\n+            get: function reactiveGetter () {\n+                var value = getter ? getter.call(obj) : val;\n+                if (Dep.target) {\n+                    dep.depend();\n+                    if (childOb) {\n+                        childOb.dep.depend();\n+                        if (Array.isArray(value)) {\n+                            dependArray(value);\n+                        }\n+                    }\n+                }\n+                return value\n+            },\n+            set: function reactiveSetter (newVal) {\n+                var value = getter ? getter.call(obj) : val;\n+              \u002F* eslint-disable no-self-compare *\u002F\n+                if (newVal === value || (newVal !== newVal && value !== value)) {\n+                    return\n+                }\n+              \u002F* eslint-enable no-self-compare *\u002F\n+                if (customSetter) {\n+                    customSetter();\n+                }\n+                \u002F\u002F #7981: for accessor properties without setter\n+                if (getter && !setter) { return }\n+                if (setter) {\n+                    setter.call(obj, newVal);\n+                } else {\n+                    val = newVal;\n+                }\n+                childOb = !shallow && observe(newVal);\n+                dep.notify();\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * Set a property on an object. Adds the new property and\n+     * triggers change notification if the property doesn't\n+     * already exist.\n+     *\u002F\n+    function set (target, key, val) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.length = Math.max(target.length, key);\n+            target.splice(key, 1, val);\n+            return val\n+        }\n+        if (key in target && !(key in Object.prototype)) {\n+            target[key] = val;\n+            return val\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid adding reactive properties to a Vue instance or its root $data ' +\n+                'at runtime - declare it upfront in the data option.'\n+            );\n+            return val\n+        }\n+        if (!ob) {\n+            target[key] = val;\n+            return val\n+        }\n+        defineReactive$$1(ob.value, key, val);\n+        ob.dep.notify();\n+        return val\n+    }\n+\n+    \u002F**\n+     * Delete a property and trigger change if necessary.\n+     *\u002F\n+    function del (target, key) {\n+        if (isUndef(target) || isPrimitive(target)\n+        ) {\n+            warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n+        }\n+        if (Array.isArray(target) && isValidArrayIndex(key)) {\n+            target.splice(key, 1);\n+            return\n+        }\n+        var ob = (target).__ob__;\n+        if (target._isVue || (ob && ob.vmCount)) {\n+            warn(\n+                'Avoid deleting properties on a Vue instance or its root $data ' +\n+                '- just set it to null.'\n+            );\n+            return\n+        }\n+        if (!hasOwn(target, key)) {\n+            return\n+        }\n+        delete target[key];\n+        if (!ob) {\n+            return\n+        }\n+        ob.dep.notify();\n+    }\n+\n+    \u002F**\n+     * Collect dependencies on array elements when the array is touched, since\n+     * we cannot intercept array element access like property getters.\n+     *\u002F\n+    function dependArray (value) {\n+        for (var e = (void 0), i = 0, l = value.length; i \u003C l; i++) {\n+            e = value[i];\n+            e && e.__ob__ && e.__ob__.dep.depend();\n+            if (Array.isArray(e)) {\n+                dependArray(e);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Option overwriting strategies are functions that handle\n+     * how to merge a parent option value and a child option\n+     * value into the final value.\n+     *\u002F\n+    var strats = config.optionMergeStrategies;\n+\n+    \u002F**\n+     * Options with restrictions\n+     *\u002F\n+    {\n+        strats.el = strats.propsData = function (parent, child, vm, key) {\n+            if (!vm) {\n+                warn(\n+                    \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n+                    'creation with the `new` keyword.'\n+                );\n+            }\n+            return defaultStrat(parent, child)\n+        };\n+    }\n+\n+    \u002F**\n+     * Helper that recursively merges two data objects together.\n+     *\u002F\n+    function mergeData (to, from) {\n+        if (!from) { return to }\n+        var key, toVal, fromVal;\n+\n+        var keys = hasSymbol\n+            ? Reflect.ownKeys(from)\n+            : Object.keys(from);\n+\n+        for (var i = 0; i \u003C keys.length; i++) {\n+            key = keys[i];\n+            \u002F\u002F in case the object is already observed...\n+            if (key === '__ob__') { continue }\n+            toVal = to[key];\n+            fromVal = from[key];\n+            if (!hasOwn(to, key)) {\n+                set(to, key, fromVal);\n+            } else if (\n+                toVal !== fromVal &&\n+                isPlainObject(toVal) &&\n+                isPlainObject(fromVal)\n+            ) {\n+                mergeData(toVal, fromVal);\n+            }\n+        }\n+        return to\n+    }\n+\n+    \u002F**\n+     * Data\n+     *\u002F\n+    function mergeDataOrFn (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            \u002F\u002F in a Vue.extend merge, both should be functions\n+            if (!childVal) {\n+                return parentVal\n+            }\n+            if (!parentVal) {\n+                return childVal\n+            }\n+            \u002F\u002F when parentVal & childVal are both present,\n+            \u002F\u002F we need to return a function that returns the\n+            \u002F\u002F merged result of both functions... no need to\n+            \u002F\u002F check if parentVal is a function here because\n+            \u002F\u002F it has to be a function to pass previous merges.\n+            return function mergedDataFn () {\n+                return mergeData(\n+                    typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n+                    typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n+                )\n+            }\n+        } else {\n+            return function mergedInstanceDataFn () {\n+                \u002F\u002F instance merge\n+                var instanceData = typeof childVal === 'function'\n+                    ? childVal.call(vm, vm)\n+                    : childVal;\n+                var defaultData = typeof parentVal === 'function'\n+                    ? parentVal.call(vm, vm)\n+                    : parentVal;\n+                if (instanceData) {\n+                    return mergeData(instanceData, defaultData)\n+                } else {\n+                    return defaultData\n+                }\n+            }\n+        }\n+    }\n+\n+    strats.data = function (\n+        parentVal,\n+        childVal,\n+        vm\n+    ) {\n+        if (!vm) {\n+            if (childVal && typeof childVal !== 'function') {\n+                warn(\n+                    'The \"data\" option should be a function ' +\n+                    'that returns a per-instance value in component ' +\n+                    'definitions.',\n+                    vm\n+                );\n+\n+                return parentVal\n+            }\n+            return mergeDataOrFn(parentVal, childVal)\n+        }\n+\n+        return mergeDataOrFn(parentVal, childVal, vm)\n+    };\n+\n+    \u002F**\n+     * Hooks and props are merged as arrays.\n+     *\u002F\n+    function mergeHook (\n+        parentVal,\n+        childVal\n+    ) {\n+        var res = childVal\n+            ? parentVal\n+                ? parentVal.concat(childVal)\n+                : Array.isArray(childVal)\n+                    ? childVal\n+                    : [childVal]\n+            : parentVal;\n+        return res\n+            ? dedupeHooks(res)\n+            : res\n+    }\n+\n+    function dedupeHooks (hooks) {\n+        var res = [];\n+        for (var i = 0; i \u003C hooks.length; i++) {\n+            if (res.indexOf(hooks[i]) === -1) {\n+                res.push(hooks[i]);\n+            }\n+        }\n+        return res\n+    }\n+\n+    LIFECYCLE_HOOKS.forEach(function (hook) {\n+        strats[hook] = mergeHook;\n+    });\n+\n+    \u002F**\n+     * Assets\n+     *\n+     * When a vm is present (instance creation), we need to do\n+     * a three-way merge between constructor options, instance\n+     * options and parent options.\n+     *\u002F\n+    function mergeAssets (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        var res = Object.create(parentVal || null);\n+        if (childVal) {\n+            assertObjectType(key, childVal, vm);\n+            return extend(res, childVal)\n+        } else {\n+            return res\n+        }\n+    }\n+\n+    ASSET_TYPES.forEach(function (type) {\n+        strats[type + 's'] = mergeAssets;\n+    });\n+\n+    \u002F**\n+     * Watchers.\n+     *\n+     * Watchers hashes should not overwrite one\n+     * another, so we merge them as arrays.\n+     *\u002F\n+    strats.watch = function (\n+        parentVal,\n+        childVal,\n+        vm,\n+        key\n+    ) {\n+        \u002F\u002F work around Firefox's Object.prototype.watch...\n+        if (parentVal === nativeWatch) { parentVal = undefined; }\n+        if (childVal === nativeWatch) { childVal = undefined; }\n+      \u002F* istanbul ignore if *\u002F\n+        if (!childVal) { return Object.create(parentVal || null) }\n+        {\n+            assertObjectType(key, childVal, vm);\n+        }\n+        if (!parentVal) { return childVal }\n+        var ret = {};\n+        extend(ret, parentVal);\n+        for (var key$1 in childVal) {\n+            var parent = ret[key$1];\n+            var child = childVal[key$1];\n+            if (parent && !Array.isArray(parent)) {\n+                parent = [parent];\n+            }\n+            ret[key$1] = parent\n+                ? parent.concat(child)\n+                : Array.isArray(child) ? child : [child];\n+        }\n+        return ret\n+    };\n+\n+    \u002F**\n+     * Other object hashes.\n+     *\u002F\n+    strats.props =\n+        strats.methods =\n+            strats.inject =\n+                strats.computed = function (\n+                    parentVal,\n+                    childVal,\n+                    vm,\n+                    key\n+                ) {\n+                    if (childVal && \"development\" !== 'production') {\n+                        assertObjectType(key, childVal, vm);\n+                    }\n+                    if (!parentVal) { return childVal }\n+                    var ret = Object.create(null);\n+                    extend(ret, parentVal);\n+                    if (childVal) { extend(ret, childVal); }\n+                    return ret\n+                };\n+    strats.provide = mergeDataOrFn;\n+\n+    \u002F**\n+     * Default strategy.\n+     *\u002F\n+    var defaultStrat = function (parentVal, childVal) {\n+        return childVal === undefined\n+            ? parentVal\n+            : childVal\n+    };\n+\n+    \u002F**\n+     * Validate component names\n+     *\u002F\n+    function checkComponents (options) {\n+        for (var key in options.components) {\n+            validateComponentName(key);\n+        }\n+    }\n+\n+    function validateComponentName (name) {\n+        if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n+            warn(\n+                'Invalid component name: \"' + name + '\". Component names ' +\n+                'should conform to valid custom element name in html5 specification.'\n+            );\n+        }\n+        if (isBuiltInTag(name) || config.isReservedTag(name)) {\n+            warn(\n+                'Do not use built-in or reserved HTML elements as component ' +\n+                'id: ' + name\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Ensure all props option syntax are normalized into the\n+     * Object-based format.\n+     *\u002F\n+    function normalizeProps (options, vm) {\n+        var props = options.props;\n+        if (!props) { return }\n+        var res = {};\n+        var i, val, name;\n+        if (Array.isArray(props)) {\n+            i = props.length;\n+            while (i--) {\n+                val = props[i];\n+                if (typeof val === 'string') {\n+                    name = camelize(val);\n+                    res[name] = { type: null };\n+                } else {\n+                    warn('props must be strings when using array syntax.');\n+                }\n+            }\n+        } else if (isPlainObject(props)) {\n+            for (var key in props) {\n+                val = props[key];\n+                name = camelize(key);\n+                res[name] = isPlainObject(val)\n+                    ? val\n+                    : { type: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(props)) + \".\",\n+                vm\n+            );\n+        }\n+        options.props = res;\n+    }\n+\n+    \u002F**\n+     * Normalize all injections into Object-based format\n+     *\u002F\n+    function normalizeInject (options, vm) {\n+        var inject = options.inject;\n+        if (!inject) { return }\n+        var normalized = options.inject = {};\n+        if (Array.isArray(inject)) {\n+            for (var i = 0; i \u003C inject.length; i++) {\n+                normalized[inject[i]] = { from: inject[i] };\n+            }\n+        } else if (isPlainObject(inject)) {\n+            for (var key in inject) {\n+                var val = inject[key];\n+                normalized[key] = isPlainObject(val)\n+                    ? extend({ from: key }, val)\n+                    : { from: val };\n+            }\n+        } else {\n+            warn(\n+                \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n+                \"but got \" + (toRawType(inject)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Normalize raw function directives into object format.\n+     *\u002F\n+    function normalizeDirectives (options) {\n+        var dirs = options.directives;\n+        if (dirs) {\n+            for (var key in dirs) {\n+                var def$$1 = dirs[key];\n+                if (typeof def$$1 === 'function') {\n+                    dirs[key] = { bind: def$$1, update: def$$1 };\n+                }\n+            }\n+        }\n+    }\n+\n+    function assertObjectType (name, value, vm) {\n+        if (!isPlainObject(value)) {\n+            warn(\n+                \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n+                \"but got \" + (toRawType(value)) + \".\",\n+                vm\n+            );\n+        }\n+    }\n+\n+    \u002F**\n+     * Merge two option objects into a new one.\n+     * Core utility used in both instantiation and inheritance.\n+     *\u002F\n+    function mergeOptions (\n+        parent,\n+        child,\n+        vm\n+    ) {\n+        {\n+            checkComponents(child);\n+        }\n+\n+        if (typeof child === 'function') {\n+            child = child.options;\n+        }\n+\n+        normalizeProps(child, vm);\n+        normalizeInject(child, vm);\n+        normalizeDirectives(child);\n+\n+        \u002F\u002F Apply extends and mixins on the child options,\n+        \u002F\u002F but only if it is a raw options object that isn't\n+        \u002F\u002F the result of another mergeOptions call.\n+        \u002F\u002F Only merged options has the _base property.\n+        if (!child._base) {\n+            if (child.extends) {\n+                parent = mergeOptions(parent, child.extends, vm);\n+            }\n+            if (child.mixins) {\n+                for (var i = 0, l = child.mixins.length; i \u003C l; i++) {\n+                    parent = mergeOptions(parent, child.mixins[i], vm);\n+                }\n+            }\n+        }\n+\n+        var options = {};\n+        var key;\n+        for (key in parent) {\n+            mergeField(key);\n+        }\n+        for (key in child) {\n+            if (!hasOwn(parent, key)) {\n+                mergeField(key);\n+            }\n+        }\n+        function mergeField (key) {\n+            var strat = strats[key] || defaultStrat;\n+            options[key] = strat(parent[key], child[key], vm, key);\n+        }\n+        return options\n+    }\n+\n+    \u002F**\n+     * Resolve an asset.\n+     * This function is used because child instances need access\n+     * to assets defined in its ancestor chain.\n+     *\u002F\n+    function resolveAsset (\n+        options,\n+        type,\n+        id,\n+        warnMissing\n+    ) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (typeof id !== 'string') {\n+            return\n+        }\n+        var assets = options[type];\n+        \u002F\u002F check local registration variations first\n+        if (hasOwn(assets, id)) { return assets[id] }\n+        var camelizedId = camelize(id);\n+        if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n+        var PascalCaseId = capitalize(camelizedId);\n+        if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n+        \u002F\u002F fallback to prototype chain\n+        var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n+        if (warnMissing && !res) {\n+            warn(\n+                'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n+                options\n+            );\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function validateProp (\n+        key,\n+        propOptions,\n+        propsData,\n+        vm\n+    ) {\n+        var prop = propOptions[key];\n+        var absent = !hasOwn(propsData, key);\n+        var value = propsData[key];\n+        \u002F\u002F boolean casting\n+        var booleanIndex = getTypeIndex(Boolean, prop.type);\n+        if (booleanIndex > -1) {\n+            if (absent && !hasOwn(prop, 'default')) {\n+                value = false;\n+            } else if (value === '' || value === hyphenate(key)) {\n+                \u002F\u002F only cast empty string \u002F same name to boolean if\n+                \u002F\u002F boolean has higher priority\n+                var stringIndex = getTypeIndex(String, prop.type);\n+                if (stringIndex \u003C 0 || booleanIndex \u003C stringIndex) {\n+                    value = true;\n+                }\n+            }\n+        }\n+        \u002F\u002F check default value\n+        if (value === undefined) {\n+            value = getPropDefaultValue(vm, prop, key);\n+            \u002F\u002F since the default value is a fresh copy,\n+            \u002F\u002F make sure to observe it.\n+            var prevShouldObserve = shouldObserve;\n+            toggleObserving(true);\n+            observe(value);\n+            toggleObserving(prevShouldObserve);\n+        }\n+        {\n+            assertProp(prop, key, value, vm, absent);\n+        }\n+        return value\n+    }\n+\n+    \u002F**\n+     * Get the default value of a prop.\n+     *\u002F\n+    function getPropDefaultValue (vm, prop, key) {\n+        \u002F\u002F no default, return undefined\n+        if (!hasOwn(prop, 'default')) {\n+            return undefined\n+        }\n+        var def = prop.default;\n+        \u002F\u002F warn against non-factory defaults for Object & Array\n+        if (isObject(def)) {\n+            warn(\n+                'Invalid default value for prop \"' + key + '\": ' +\n+                'Props with type Object\u002FArray must use a factory function ' +\n+                'to return the default value.',\n+                vm\n+            );\n+        }\n+        \u002F\u002F the raw prop value was also undefined from previous render,\n+        \u002F\u002F return previous default value to avoid unnecessary watcher trigger\n+        if (vm && vm.$options.propsData &&\n+            vm.$options.propsData[key] === undefined &&\n+            vm._props[key] !== undefined\n+        ) {\n+            return vm._props[key]\n+        }\n+        \u002F\u002F call factory function for non-Function types\n+        \u002F\u002F a value is Function if its prototype is function even across different execution context\n+        return typeof def === 'function' && getType(prop.type) !== 'Function'\n+            ? def.call(vm)\n+            : def\n+    }\n+\n+    \u002F**\n+     * Assert whether a prop is valid.\n+     *\u002F\n+    function assertProp (\n+        prop,\n+        name,\n+        value,\n+        vm,\n+        absent\n+    ) {\n+        if (prop.required && absent) {\n+            warn(\n+                'Missing required prop: \"' + name + '\"',\n+                vm\n+            );\n+            return\n+        }\n+        if (value == null && !prop.required) {\n+            return\n+        }\n+        var type = prop.type;\n+        var valid = !type || type === true;\n+        var expectedTypes = [];\n+        if (type) {\n+            if (!Array.isArray(type)) {\n+                type = [type];\n+            }\n+            for (var i = 0; i \u003C type.length && !valid; i++) {\n+                var assertedType = assertType(value, type[i]);\n+                expectedTypes.push(assertedType.expectedType || '');\n+                valid = assertedType.valid;\n+            }\n+        }\n+\n+        if (!valid) {\n+            warn(\n+                getInvalidTypeMessage(name, value, expectedTypes),\n+                vm\n+            );\n+            return\n+        }\n+        var validator = prop.validator;\n+        if (validator) {\n+            if (!validator(value)) {\n+                warn(\n+                    'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n+                    vm\n+                );\n+            }\n+        }\n+    }\n+\n+    var simpleCheckRE = \u002F^(String|Number|Boolean|Function|Symbol)$\u002F;\n+\n+    function assertType (value, type) {\n+        var valid;\n+        var expectedType = getType(type);\n+        if (simpleCheckRE.test(expectedType)) {\n+            var t = typeof value;\n+            valid = t === expectedType.toLowerCase();\n+            \u002F\u002F for primitive wrapper objects\n+            if (!valid && t === 'object') {\n+                valid = value instanceof type;\n+            }\n+        } else if (expectedType === 'Object') {\n+            valid = isPlainObject(value);\n+        } else if (expectedType === 'Array') {\n+            valid = Array.isArray(value);\n+        } else {\n+            valid = value instanceof type;\n+        }\n+        return {\n+            valid: valid,\n+            expectedType: expectedType\n+        }\n+    }\n+\n+    \u002F**\n+     * Use function string name to check built-in types,\n+     * because a simple equality check will fail when running\n+     * across different vms \u002F iframes.\n+     *\u002F\n+    function getType (fn) {\n+        var match = fn && fn.toString().match(\u002F^\\s*function (\\w+)\u002F);\n+        return match ? match[1] : ''\n+    }\n+\n+    function isSameType (a, b) {\n+        return getType(a) === getType(b)\n+    }\n+\n+    function getTypeIndex (type, expectedTypes) {\n+        if (!Array.isArray(expectedTypes)) {\n+            return isSameType(expectedTypes, type) ? 0 : -1\n+        }\n+        for (var i = 0, len = expectedTypes.length; i \u003C len; i++) {\n+            if (isSameType(expectedTypes[i], type)) {\n+                return i\n+            }\n+        }\n+        return -1\n+    }\n+\n+    function getInvalidTypeMessage (name, value, expectedTypes) {\n+        var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n+            \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n+        var expectedType = expectedTypes[0];\n+        var receivedType = toRawType(value);\n+        var expectedValue = styleValue(value, expectedType);\n+        var receivedValue = styleValue(value, receivedType);\n+        \u002F\u002F check if we need to specify expected value\n+        if (expectedTypes.length === 1 &&\n+            isExplicable(expectedType) &&\n+            !isBoolean(expectedType, receivedType)) {\n+            message += \" with value \" + expectedValue;\n+        }\n+        message += \", got \" + receivedType + \" \";\n+        \u002F\u002F check if we need to specify received value\n+        if (isExplicable(receivedType)) {\n+            message += \"with value \" + receivedValue + \".\";\n+        }\n+        return message\n+    }\n+\n+    function styleValue (value, type) {\n+        if (type === 'String') {\n+            return (\"\\\"\" + value + \"\\\"\")\n+        } else if (type === 'Number') {\n+            return (\"\" + (Number(value)))\n+        } else {\n+            return (\"\" + value)\n+        }\n+    }\n+\n+    function isExplicable (value) {\n+        var explicitTypes = ['string', 'number', 'boolean'];\n+        return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n+    }\n+\n+    function isBoolean () {\n+        var args = [], len = arguments.length;\n+        while ( len-- ) args[ len ] = arguments[ len ];\n+\n+        return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function handleError (err, vm, info) {\n+        \u002F\u002F Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n+        \u002F\u002F See: https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvuex\u002Fissues\u002F1505\n+        pushTarget();\n+        try {\n+            if (vm) {\n+                var cur = vm;\n+                while ((cur = cur.$parent)) {\n+                    var hooks = cur.$options.errorCaptured;\n+                    if (hooks) {\n+                        for (var i = 0; i \u003C hooks.length; i++) {\n+                            try {\n+                                var capture = hooks[i].call(cur, err, vm, info) === false;\n+                                if (capture) { return }\n+                            } catch (e) {\n+                                globalHandleError(e, cur, 'errorCaptured hook');\n+                            }\n+                        }\n+                    }\n+                }\n+            }\n+            globalHandleError(err, vm, info);\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    function invokeWithErrorHandling (\n+        handler,\n+        context,\n+        args,\n+        vm,\n+        info\n+    ) {\n+        var res;\n+        try {\n+            res = args ? handler.apply(context, args) : handler.call(context);\n+            if (res && !res._isVue && isPromise(res) && !res._handled) {\n+                res.catch(function (e) { return handleError(e, vm, info + \" (Promise\u002Fasync)\"); });\n+                \u002F\u002F issue #9511\n+                \u002F\u002F avoid catch triggering multiple times when nested calls\n+                res._handled = true;\n+            }\n+        } catch (e) {\n+            handleError(e, vm, info);\n+        }\n+        return res\n+    }\n+\n+    function globalHandleError (err, vm, info) {\n+        if (config.errorHandler) {\n+            try {\n+                return config.errorHandler.call(null, err, vm, info)\n+            } catch (e) {\n+                \u002F\u002F if the user intentionally throws the original error in the handler,\n+                \u002F\u002F do not log it twice\n+                if (e !== err) {\n+                    logError(e, null, 'config.errorHandler');\n+                }\n+            }\n+        }\n+        logError(err, vm, info);\n+    }\n+\n+    function logError (err, vm, info) {\n+        {\n+            warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n+            console.error(err);\n+        } else {\n+            throw err\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var isUsingMicroTask = false;\n+\n+    var callbacks = [];\n+    var pending = false;\n+\n+    function flushCallbacks () {\n+        pending = false;\n+        var copies = callbacks.slice(0);\n+        callbacks.length = 0;\n+        for (var i = 0; i \u003C copies.length; i++) {\n+            copies[i]();\n+        }\n+    }\n+\n+    \u002F\u002F Here we have async deferring wrappers using microtasks.\n+    \u002F\u002F In 2.5 we used (macro) tasks (in combination with microtasks).\n+    \u002F\u002F However, it has subtle problems when state is changed right before repaint\n+    \u002F\u002F (e.g. #6813, out-in transitions).\n+    \u002F\u002F Also, using (macro) tasks in event handler would cause some weird behaviors\n+    \u002F\u002F that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n+    \u002F\u002F So we now use microtasks everywhere, again.\n+    \u002F\u002F A major drawback of this tradeoff is that there are some scenarios\n+    \u002F\u002F where microtasks have too high a priority and fire in between supposedly\n+    \u002F\u002F sequential events (e.g. #4521, #6690, which have workarounds)\n+    \u002F\u002F or even between bubbling of the same event (#6566).\n+    var timerFunc;\n+\n+    \u002F\u002F The nextTick behavior leverages the microtask queue, which can be accessed\n+    \u002F\u002F via either native Promise.then or MutationObserver.\n+    \u002F\u002F MutationObserver has wider support, however it is seriously bugged in\n+    \u002F\u002F UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n+    \u002F\u002F completely stops working after triggering a few times... so, if native\n+    \u002F\u002F Promise is available, we will use it:\n+  \u002F* istanbul ignore next, $flow-disable-line *\u002F\n+    if (typeof Promise !== 'undefined' && isNative(Promise)) {\n+        var p = Promise.resolve();\n+        timerFunc = function () {\n+            p.then(flushCallbacks);\n+            \u002F\u002F In problematic UIWebViews, Promise.then doesn't completely break, but\n+            \u002F\u002F it can get stuck in a weird state where callbacks are pushed into the\n+            \u002F\u002F microtask queue but the queue isn't being flushed, until the browser\n+            \u002F\u002F needs to do some other work, e.g. handle a timer. Therefore we can\n+            \u002F\u002F \"force\" the microtask queue to be flushed by adding an empty timer.\n+            if (isIOS) { setTimeout(noop); }\n+        };\n+        isUsingMicroTask = true;\n+    } else if (!isIE && typeof MutationObserver !== 'undefined' && (\n+            isNative(MutationObserver) ||\n+            \u002F\u002F PhantomJS and iOS 7.x\n+            MutationObserver.toString() === '[object MutationObserverConstructor]'\n+        )) {\n+        \u002F\u002F Use MutationObserver where native Promise is not available,\n+        \u002F\u002F e.g. PhantomJS, iOS7, Android 4.4\n+        \u002F\u002F (#6466 MutationObserver is unreliable in IE11)\n+        var counter = 1;\n+        var observer = new MutationObserver(flushCallbacks);\n+        var textNode = document.createTextNode(String(counter));\n+        observer.observe(textNode, {\n+            characterData: true\n+        });\n+        timerFunc = function () {\n+            counter = (counter + 1) % 2;\n+            textNode.data = String(counter);\n+        };\n+        isUsingMicroTask = true;\n+    } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n+        \u002F\u002F Fallback to setImmediate.\n+        \u002F\u002F Techinically it leverages the (macro) task queue,\n+        \u002F\u002F but it is still a better choice than setTimeout.\n+        timerFunc = function () {\n+            setImmediate(flushCallbacks);\n+        };\n+    } else {\n+        \u002F\u002F Fallback to setTimeout.\n+        timerFunc = function () {\n+            setTimeout(flushCallbacks, 0);\n+        };\n+    }\n+\n+    function nextTick (cb, ctx) {\n+        var _resolve;\n+        callbacks.push(function () {\n+            if (cb) {\n+                try {\n+                    cb.call(ctx);\n+                } catch (e) {\n+                    handleError(e, ctx, 'nextTick');\n+                }\n+            } else if (_resolve) {\n+                _resolve(ctx);\n+            }\n+        });\n+        if (!pending) {\n+            pending = true;\n+            timerFunc();\n+        }\n+        \u002F\u002F $flow-disable-line\n+        if (!cb && typeof Promise !== 'undefined') {\n+            return new Promise(function (resolve) {\n+                _resolve = resolve;\n+            })\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var mark;\n+    var measure;\n+\n+    {\n+        var perf = inBrowser && window.performance;\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            perf &&\n+            perf.mark &&\n+            perf.measure &&\n+            perf.clearMarks &&\n+            perf.clearMeasures\n+        ) {\n+            mark = function (tag) { return perf.mark(tag); };\n+            measure = function (name, startTag, endTag) {\n+                perf.measure(name, startTag, endTag);\n+                perf.clearMarks(startTag);\n+                perf.clearMarks(endTag);\n+                \u002F\u002F perf.clearMeasures(name)\n+            };\n+        }\n+    }\n+\n+  \u002F* not type checking this file because flow doesn't play well with Proxy *\u002F\n+\n+    var initProxy;\n+\n+    {\n+        var allowedGlobals = makeMap(\n+            'Infinity,undefined,NaN,isFinite,isNaN,' +\n+            'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n+            'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n+            'require' \u002F\u002F for Webpack\u002FBrowserify\n+        );\n+\n+        var warnNonPresent = function (target, key) {\n+            warn(\n+                \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n+                'referenced during render. Make sure that this property is reactive, ' +\n+                'either in the data option, or for class-based components, by ' +\n+                'initializing the property. ' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Freactivity.html#Declaring-Reactive-Properties.',\n+                target\n+            );\n+        };\n+\n+        var warnReservedPrefix = function (target, key) {\n+            warn(\n+                \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n+                'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n+                'prevent conflicts with Vue internals' +\n+                'See: https:\u002F\u002Fvuejs.org\u002Fv2\u002Fapi\u002F#data',\n+                target\n+            );\n+        };\n+\n+        var hasProxy =\n+            typeof Proxy !== 'undefined' && isNative(Proxy);\n+\n+        if (hasProxy) {\n+            var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n+            config.keyCodes = new Proxy(config.keyCodes, {\n+                set: function set (target, key, value) {\n+                    if (isBuiltInModifier(key)) {\n+                        warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n+                        return false\n+                    } else {\n+                        target[key] = value;\n+                        return true\n+                    }\n+                }\n+            });\n+        }\n+\n+        var hasHandler = {\n+            has: function has (target, key) {\n+                var has = key in target;\n+                var isAllowed = allowedGlobals(key) ||\n+                    (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n+                if (!has && !isAllowed) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return has || !isAllowed\n+            }\n+        };\n+\n+        var getHandler = {\n+            get: function get (target, key) {\n+                if (typeof key === 'string' && !(key in target)) {\n+                    if (key in target.$data) { warnReservedPrefix(target, key); }\n+                    else { warnNonPresent(target, key); }\n+                }\n+                return target[key]\n+            }\n+        };\n+\n+        initProxy = function initProxy (vm) {\n+            if (hasProxy) {\n+                \u002F\u002F determine which proxy handler to use\n+                var options = vm.$options;\n+                var handlers = options.render && options.render._withStripped\n+                    ? getHandler\n+                    : hasHandler;\n+                vm._renderProxy = new Proxy(vm, handlers);\n+            } else {\n+                vm._renderProxy = vm;\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var seenObjects = new _Set();\n+\n+    \u002F**\n+     * Recursively traverse an object to evoke all converted\n+     * getters, so that every nested property inside the object\n+     * is collected as a \"deep\" dependency.\n+     *\u002F\n+    function traverse (val) {\n+        _traverse(val, seenObjects);\n+        seenObjects.clear();\n+    }\n+\n+    function _traverse (val, seen) {\n+        var i, keys;\n+        var isA = Array.isArray(val);\n+        if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n+            return\n+        }\n+        if (val.__ob__) {\n+            var depId = val.__ob__.dep.id;\n+            if (seen.has(depId)) {\n+                return\n+            }\n+            seen.add(depId);\n+        }\n+        if (isA) {\n+            i = val.length;\n+            while (i--) { _traverse(val[i], seen); }\n+        } else {\n+            keys = Object.keys(val);\n+            i = keys.length;\n+            while (i--) { _traverse(val[keys[i]], seen); }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var normalizeEvent = cached(function (name) {\n+        var passive = name.charAt(0) === '&';\n+        name = passive ? name.slice(1) : name;\n+        var once$$1 = name.charAt(0) === '~'; \u002F\u002F Prefixed last, checked first\n+        name = once$$1 ? name.slice(1) : name;\n+        var capture = name.charAt(0) === '!';\n+        name = capture ? name.slice(1) : name;\n+        return {\n+            name: name,\n+            once: once$$1,\n+            capture: capture,\n+            passive: passive\n+        }\n+    });\n+\n+    function createFnInvoker (fns, vm) {\n+        function invoker () {\n+            var arguments$1 = arguments;\n+\n+            var fns = invoker.fns;\n+            if (Array.isArray(fns)) {\n+                var cloned = fns.slice();\n+                for (var i = 0; i \u003C cloned.length; i++) {\n+                    invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n+                }\n+            } else {\n+                \u002F\u002F return handler return value for single handlers\n+                return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n+            }\n+        }\n+        invoker.fns = fns;\n+        return invoker\n+    }\n+\n+    function updateListeners (\n+        on,\n+        oldOn,\n+        add,\n+        remove$$1,\n+        createOnceHandler,\n+        vm\n+    ) {\n+        var name, def$$1, cur, old, event;\n+        for (name in on) {\n+            def$$1 = cur = on[name];\n+            old = oldOn[name];\n+            event = normalizeEvent(name);\n+            if (isUndef(cur)) {\n+                warn(\n+                    \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n+                    vm\n+                );\n+            } else if (isUndef(old)) {\n+                if (isUndef(cur.fns)) {\n+                    cur = on[name] = createFnInvoker(cur, vm);\n+                }\n+                if (isTrue(event.once)) {\n+                    cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n+                }\n+                add(event.name, cur, event.capture, event.passive, event.params);\n+            } else if (cur !== old) {\n+                old.fns = cur;\n+                on[name] = old;\n+            }\n+        }\n+        for (name in oldOn) {\n+            if (isUndef(on[name])) {\n+                event = normalizeEvent(name);\n+                remove$$1(event.name, oldOn[name], event.capture);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function mergeVNodeHook (def, hookKey, hook) {\n+        if (def instanceof VNode) {\n+            def = def.data.hook || (def.data.hook = {});\n+        }\n+        var invoker;\n+        var oldHook = def[hookKey];\n+\n+        function wrappedHook () {\n+            hook.apply(this, arguments);\n+            \u002F\u002F important: remove merged hook to ensure it's called only once\n+            \u002F\u002F and prevent memory leak\n+            remove(invoker.fns, wrappedHook);\n+        }\n+\n+        if (isUndef(oldHook)) {\n+            \u002F\u002F no existing hook\n+            invoker = createFnInvoker([wrappedHook]);\n+        } else {\n+          \u002F* istanbul ignore if *\u002F\n+            if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n+                \u002F\u002F already a merged invoker\n+                invoker = oldHook;\n+                invoker.fns.push(wrappedHook);\n+            } else {\n+                \u002F\u002F existing plain hook\n+                invoker = createFnInvoker([oldHook, wrappedHook]);\n+            }\n+        }\n+\n+        invoker.merged = true;\n+        def[hookKey] = invoker;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function extractPropsFromVNodeData (\n+        data,\n+        Ctor,\n+        tag\n+    ) {\n+        \u002F\u002F we are only extracting raw values here.\n+        \u002F\u002F validation and default values are handled in the child\n+        \u002F\u002F component itself.\n+        var propOptions = Ctor.options.props;\n+        if (isUndef(propOptions)) {\n+            return\n+        }\n+        var res = {};\n+        var attrs = data.attrs;\n+        var props = data.props;\n+        if (isDef(attrs) || isDef(props)) {\n+            for (var key in propOptions) {\n+                var altKey = hyphenate(key);\n+                {\n+                    var keyInLowerCase = key.toLowerCase();\n+                    if (\n+                        key !== keyInLowerCase &&\n+                        attrs && hasOwn(attrs, keyInLowerCase)\n+                    ) {\n+                        tip(\n+                            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n+                            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n+                            \" \\\"\" + key + \"\\\". \" +\n+                            \"Note that HTML attributes are case-insensitive and camelCased \" +\n+                            \"props need to use their kebab-case equivalents when using in-DOM \" +\n+                            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n+                        );\n+                    }\n+                }\n+                checkProp(res, props, key, altKey, true) ||\n+                checkProp(res, attrs, key, altKey, false);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkProp (\n+        res,\n+        hash,\n+        key,\n+        altKey,\n+        preserve\n+    ) {\n+        if (isDef(hash)) {\n+            if (hasOwn(hash, key)) {\n+                res[key] = hash[key];\n+                if (!preserve) {\n+                    delete hash[key];\n+                }\n+                return true\n+            } else if (hasOwn(hash, altKey)) {\n+                res[key] = hash[altKey];\n+                if (!preserve) {\n+                    delete hash[altKey];\n+                }\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F The template compiler attempts to minimize the need for normalization by\n+    \u002F\u002F statically analyzing the template at compile time.\n+    \u002F\u002F\n+    \u002F\u002F For plain HTML markup, normalization can be completely skipped because the\n+    \u002F\u002F generated render function is guaranteed to return Array\u003CVNode>. There are\n+    \u002F\u002F two cases where extra normalization is needed:\n+\n+    \u002F\u002F 1. When the children contains components - because a functional component\n+    \u002F\u002F may return an Array instead of a single root. In this case, just a simple\n+    \u002F\u002F normalization is needed - if any child is an Array, we flatten the whole\n+    \u002F\u002F thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n+    \u002F\u002F because functional components already normalize their own children.\n+    function simpleNormalizeChildren (children) {\n+        for (var i = 0; i \u003C children.length; i++) {\n+            if (Array.isArray(children[i])) {\n+                return Array.prototype.concat.apply([], children)\n+            }\n+        }\n+        return children\n+    }\n+\n+    \u002F\u002F 2. When the children contains constructs that always generated nested Arrays,\n+    \u002F\u002F e.g. \u003Ctemplate>, \u003Cslot>, v-for, or when the children is provided by user\n+    \u002F\u002F with hand-written render functions \u002F JSX. In such cases a full normalization\n+    \u002F\u002F is needed to cater to all possible types of children values.\n+    function normalizeChildren (children) {\n+        return isPrimitive(children)\n+            ? [createTextVNode(children)]\n+            : Array.isArray(children)\n+                ? normalizeArrayChildren(children)\n+                : undefined\n+    }\n+\n+    function isTextNode (node) {\n+        return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n+    }\n+\n+    function normalizeArrayChildren (children, nestedIndex) {\n+        var res = [];\n+        var i, c, lastIndex, last;\n+        for (i = 0; i \u003C children.length; i++) {\n+            c = children[i];\n+            if (isUndef(c) || typeof c === 'boolean') { continue }\n+            lastIndex = res.length - 1;\n+            last = res[lastIndex];\n+            \u002F\u002F  nested\n+            if (Array.isArray(c)) {\n+                if (c.length > 0) {\n+                    c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n+                    \u002F\u002F merge adjacent text nodes\n+                    if (isTextNode(c[0]) && isTextNode(last)) {\n+                        res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n+                        c.shift();\n+                    }\n+                    res.push.apply(res, c);\n+                }\n+            } else if (isPrimitive(c)) {\n+                if (isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    \u002F\u002F this is necessary for SSR hydration because text nodes are\n+                    \u002F\u002F essentially merged when rendered to HTML strings\n+                    res[lastIndex] = createTextVNode(last.text + c);\n+                } else if (c !== '') {\n+                    \u002F\u002F convert primitive to vnode\n+                    res.push(createTextVNode(c));\n+                }\n+            } else {\n+                if (isTextNode(c) && isTextNode(last)) {\n+                    \u002F\u002F merge adjacent text nodes\n+                    res[lastIndex] = createTextVNode(last.text + c.text);\n+                } else {\n+                    \u002F\u002F default key for nested array children (likely generated by v-for)\n+                    if (isTrue(children._isVList) &&\n+                        isDef(c.tag) &&\n+                        isUndef(c.key) &&\n+                        isDef(nestedIndex)) {\n+                        c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n+                    }\n+                    res.push(c);\n+                }\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initProvide (vm) {\n+        var provide = vm.$options.provide;\n+        if (provide) {\n+            vm._provided = typeof provide === 'function'\n+                ? provide.call(vm)\n+                : provide;\n+        }\n+    }\n+\n+    function initInjections (vm) {\n+        var result = resolveInject(vm.$options.inject, vm);\n+        if (result) {\n+            toggleObserving(false);\n+            Object.keys(result).forEach(function (key) {\n+              \u002F* istanbul ignore else *\u002F\n+                {\n+                    defineReactive$$1(vm, key, result[key], function () {\n+                        warn(\n+                            \"Avoid mutating an injected value directly since the changes will be \" +\n+                            \"overwritten whenever the provided component re-renders. \" +\n+                            \"injection being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    });\n+                }\n+            });\n+            toggleObserving(true);\n+        }\n+    }\n+\n+    function resolveInject (inject, vm) {\n+        if (inject) {\n+            \u002F\u002F inject is :any because flow is not smart enough to figure out cached\n+            var result = Object.create(null);\n+            var keys = hasSymbol\n+                ? Reflect.ownKeys(inject)\n+                : Object.keys(inject);\n+\n+            for (var i = 0; i \u003C keys.length; i++) {\n+                var key = keys[i];\n+                \u002F\u002F #6574 in case the inject object is observed...\n+                if (key === '__ob__') { continue }\n+                var provideKey = inject[key].from;\n+                var source = vm;\n+                while (source) {\n+                    if (source._provided && hasOwn(source._provided, provideKey)) {\n+                        result[key] = source._provided[provideKey];\n+                        break\n+                    }\n+                    source = source.$parent;\n+                }\n+                if (!source) {\n+                    if ('default' in inject[key]) {\n+                        var provideDefault = inject[key].default;\n+                        result[key] = typeof provideDefault === 'function'\n+                            ? provideDefault.call(vm)\n+                            : provideDefault;\n+                    } else {\n+                        warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n+                    }\n+                }\n+            }\n+            return result\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F**\n+     * Runtime helper for resolving raw children VNodes into a slot object.\n+     *\u002F\n+    function resolveSlots (\n+        children,\n+        context\n+    ) {\n+        if (!children || !children.length) {\n+            return {}\n+        }\n+        var slots = {};\n+        for (var i = 0, l = children.length; i \u003C l; i++) {\n+            var child = children[i];\n+            var data = child.data;\n+            \u002F\u002F remove slot attribute if the node is resolved as a Vue slot node\n+            if (data && data.attrs && data.attrs.slot) {\n+                delete data.attrs.slot;\n+            }\n+            \u002F\u002F named slots should only be respected if the vnode was rendered in the\n+            \u002F\u002F same context.\n+            if ((child.context === context || child.fnContext === context) &&\n+                data && data.slot != null\n+            ) {\n+                var name = data.slot;\n+                var slot = (slots[name] || (slots[name] = []));\n+                if (child.tag === 'template') {\n+                    slot.push.apply(slot, child.children || []);\n+                } else {\n+                    slot.push(child);\n+                }\n+            } else {\n+                (slots.default || (slots.default = [])).push(child);\n+            }\n+        }\n+        \u002F\u002F ignore slots that contains only whitespace\n+        for (var name$1 in slots) {\n+            if (slots[name$1].every(isWhitespace)) {\n+                delete slots[name$1];\n+            }\n+        }\n+        return slots\n+    }\n+\n+    function isWhitespace (node) {\n+        return (node.isComment && !node.asyncFactory) || node.text === ' '\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function normalizeScopedSlots (\n+        slots,\n+        normalSlots,\n+        prevSlots\n+    ) {\n+        var res;\n+        var hasNormalSlots = Object.keys(normalSlots).length > 0;\n+        var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n+        var key = slots && slots.$key;\n+        if (!slots) {\n+            res = {};\n+        } else if (slots._normalized) {\n+            \u002F\u002F fast path 1: child component re-render only, parent did not change\n+            return slots._normalized\n+        } else if (\n+            isStable &&\n+            prevSlots &&\n+            prevSlots !== emptyObject &&\n+            key === prevSlots.$key &&\n+            !hasNormalSlots &&\n+            !prevSlots.$hasNormal\n+        ) {\n+            \u002F\u002F fast path 2: stable scoped slots w\u002F no normal slots to proxy,\n+            \u002F\u002F only need to normalize once\n+            return prevSlots\n+        } else {\n+            res = {};\n+            for (var key$1 in slots) {\n+                if (slots[key$1] && key$1[0] !== '$') {\n+                    res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n+                }\n+            }\n+        }\n+        \u002F\u002F expose normal slots on scopedSlots\n+        for (var key$2 in normalSlots) {\n+            if (!(key$2 in res)) {\n+                res[key$2] = proxyNormalSlot(normalSlots, key$2);\n+            }\n+        }\n+        \u002F\u002F avoriaz seems to mock a non-extensible $scopedSlots object\n+        \u002F\u002F and when that is passed down this would cause an error\n+        if (slots && Object.isExtensible(slots)) {\n+            (slots)._normalized = res;\n+        }\n+        def(res, '$stable', isStable);\n+        def(res, '$key', key);\n+        def(res, '$hasNormal', hasNormalSlots);\n+        return res\n+    }\n+\n+    function normalizeScopedSlot(normalSlots, key, fn) {\n+        var normalized = function () {\n+            var res = arguments.length ? fn.apply(null, arguments) : fn({});\n+            res = res && typeof res === 'object' && !Array.isArray(res)\n+                ? [res] \u002F\u002F single vnode\n+                : normalizeChildren(res);\n+            return res && (\n+                res.length === 0 ||\n+                (res.length === 1 && res[0].isComment) \u002F\u002F #9658\n+            ) ? undefined\n+                : res\n+        };\n+        \u002F\u002F this is a slot using the new v-slot syntax without scope. although it is\n+        \u002F\u002F compiled as a scoped slot, render fn users would expect it to be present\n+        \u002F\u002F on this.$slots because the usage is semantically a normal slot.\n+        if (fn.proxy) {\n+            Object.defineProperty(normalSlots, key, {\n+                get: normalized,\n+                enumerable: true,\n+                configurable: true\n+            });\n+        }\n+        return normalized\n+    }\n+\n+    function proxyNormalSlot(slots, key) {\n+        return function () { return slots[key]; }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering v-for lists.\n+     *\u002F\n+    function renderList (\n+        val,\n+        render\n+    ) {\n+        var ret, i, l, keys, key;\n+        if (Array.isArray(val) || typeof val === 'string') {\n+            ret = new Array(val.length);\n+            for (i = 0, l = val.length; i \u003C l; i++) {\n+                ret[i] = render(val[i], i);\n+            }\n+        } else if (typeof val === 'number') {\n+            ret = new Array(val);\n+            for (i = 0; i \u003C val; i++) {\n+                ret[i] = render(i + 1, i);\n+            }\n+        } else if (isObject(val)) {\n+            if (hasSymbol && val[Symbol.iterator]) {\n+                ret = [];\n+                var iterator = val[Symbol.iterator]();\n+                var result = iterator.next();\n+                while (!result.done) {\n+                    ret.push(render(result.value, ret.length));\n+                    result = iterator.next();\n+                }\n+            } else {\n+                keys = Object.keys(val);\n+                ret = new Array(keys.length);\n+                for (i = 0, l = keys.length; i \u003C l; i++) {\n+                    key = keys[i];\n+                    ret[i] = render(val[key], key, i);\n+                }\n+            }\n+        }\n+        if (!isDef(ret)) {\n+            ret = [];\n+        }\n+        (ret)._isVList = true;\n+        return ret\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering \u003Cslot>\n+     *\u002F\n+    function renderSlot (\n+        name,\n+        fallback,\n+        props,\n+        bindObject\n+    ) {\n+        var scopedSlotFn = this.$scopedSlots[name];\n+        var nodes;\n+        if (scopedSlotFn) { \u002F\u002F scoped slot\n+            props = props || {};\n+            if (bindObject) {\n+                if (!isObject(bindObject)) {\n+                    warn(\n+                        'slot v-bind without argument expects an Object',\n+                        this\n+                    );\n+                }\n+                props = extend(extend({}, bindObject), props);\n+            }\n+            nodes = scopedSlotFn(props) || fallback;\n+        } else {\n+            nodes = this.$slots[name] || fallback;\n+        }\n+\n+        var target = props && props.slot;\n+        if (target) {\n+            return this.$createElement('template', { slot: target }, nodes)\n+        } else {\n+            return nodes\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for resolving filters\n+     *\u002F\n+    function resolveFilter (id) {\n+        return resolveAsset(this.$options, 'filters', id, true) || identity\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isKeyNotMatch (expect, actual) {\n+        if (Array.isArray(expect)) {\n+            return expect.indexOf(actual) === -1\n+        } else {\n+            return expect !== actual\n+        }\n+    }\n+\n+    \u002F**\n+     * Runtime helper for checking keyCodes from config.\n+     * exposed as Vue.prototype._k\n+     * passing in eventKeyName as last argument separately for backwards compat\n+     *\u002F\n+    function checkKeyCodes (\n+        eventKeyCode,\n+        key,\n+        builtInKeyCode,\n+        eventKeyName,\n+        builtInKeyName\n+    ) {\n+        var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n+        if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n+            return isKeyNotMatch(builtInKeyName, eventKeyName)\n+        } else if (mappedKeyCode) {\n+            return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n+        } else if (eventKeyName) {\n+            return hyphenate(eventKeyName) !== key\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n+     *\u002F\n+    function bindObjectProps (\n+        data,\n+        tag,\n+        value,\n+        asProp,\n+        isSync\n+    ) {\n+        if (value) {\n+            if (!isObject(value)) {\n+                warn(\n+                    'v-bind without argument expects an Object or Array value',\n+                    this\n+                );\n+            } else {\n+                if (Array.isArray(value)) {\n+                    value = toObject(value);\n+                }\n+                var hash;\n+                var loop = function ( key ) {\n+                    if (\n+                        key === 'class' ||\n+                        key === 'style' ||\n+                        isReservedAttribute(key)\n+                    ) {\n+                        hash = data;\n+                    } else {\n+                        var type = data.attrs && data.attrs.type;\n+                        hash = asProp || config.mustUseProp(tag, type, key)\n+                            ? data.domProps || (data.domProps = {})\n+                            : data.attrs || (data.attrs = {});\n+                    }\n+                    var camelizedKey = camelize(key);\n+                    var hyphenatedKey = hyphenate(key);\n+                    if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n+                        hash[key] = value[key];\n+\n+                        if (isSync) {\n+                            var on = data.on || (data.on = {});\n+                            on[(\"update:\" + key)] = function ($event) {\n+                                value[key] = $event;\n+                            };\n+                        }\n+                    }\n+                };\n+\n+                for (var key in value) loop( key );\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Runtime helper for rendering static trees.\n+     *\u002F\n+    function renderStatic (\n+        index,\n+        isInFor\n+    ) {\n+        var cached = this._staticTrees || (this._staticTrees = []);\n+        var tree = cached[index];\n+        \u002F\u002F if has already-rendered static tree and not inside v-for,\n+        \u002F\u002F we can reuse the same tree.\n+        if (tree && !isInFor) {\n+            return tree\n+        }\n+        \u002F\u002F otherwise, render a fresh tree.\n+        tree = cached[index] = this.$options.staticRenderFns[index].call(\n+            this._renderProxy,\n+            null,\n+            this \u002F\u002F for render fns generated for functional component templates\n+        );\n+        markStatic(tree, (\"__static__\" + index), false);\n+        return tree\n+    }\n+\n+    \u002F**\n+     * Runtime helper for v-once.\n+     * Effectively it means marking the node as static with a unique key.\n+     *\u002F\n+    function markOnce (\n+        tree,\n+        index,\n+        key\n+    ) {\n+        markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n+        return tree\n+    }\n+\n+    function markStatic (\n+        tree,\n+        key,\n+        isOnce\n+    ) {\n+        if (Array.isArray(tree)) {\n+            for (var i = 0; i \u003C tree.length; i++) {\n+                if (tree[i] && typeof tree[i] !== 'string') {\n+                    markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n+                }\n+            }\n+        } else {\n+            markStaticNode(tree, key, isOnce);\n+        }\n+    }\n+\n+    function markStaticNode (node, key, isOnce) {\n+        node.isStatic = true;\n+        node.key = key;\n+        node.isOnce = isOnce;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindObjectListeners (data, value) {\n+        if (value) {\n+            if (!isPlainObject(value)) {\n+                warn(\n+                    'v-on without argument expects an Object value',\n+                    this\n+                );\n+            } else {\n+                var on = data.on = data.on ? extend({}, data.on) : {};\n+                for (var key in value) {\n+                    var existing = on[key];\n+                    var ours = value[key];\n+                    on[key] = existing ? [].concat(existing, ours) : ours;\n+                }\n+            }\n+        }\n+        return data\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveScopedSlots (\n+        fns, \u002F\u002F see flow\u002Fvnode\n+        res,\n+        \u002F\u002F the following are added in 2.6\n+        hasDynamicKeys,\n+        contentHashKey\n+    ) {\n+        res = res || { $stable: !hasDynamicKeys };\n+        for (var i = 0; i \u003C fns.length; i++) {\n+            var slot = fns[i];\n+            if (Array.isArray(slot)) {\n+                resolveScopedSlots(slot, res, hasDynamicKeys);\n+            } else if (slot) {\n+                \u002F\u002F marker for reverse proxying v-slot without scope on this.$slots\n+                if (slot.proxy) {\n+                    slot.fn.proxy = true;\n+                }\n+                res[slot.key] = slot.fn;\n+            }\n+        }\n+        if (contentHashKey) {\n+            (res).$key = contentHashKey;\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bindDynamicKeys (baseObj, values) {\n+        for (var i = 0; i \u003C values.length; i += 2) {\n+            var key = values[i];\n+            if (typeof key === 'string' && key) {\n+                baseObj[values[i]] = values[i + 1];\n+            } else if (key !== '' && key !== null) {\n+                \u002F\u002F null is a speical value for explicitly removing a binding\n+                warn(\n+                    (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n+                    this\n+                );\n+            }\n+        }\n+        return baseObj\n+    }\n+\n+    \u002F\u002F helper to dynamically append modifier runtime markers to event names.\n+    \u002F\u002F ensure only append when value is already string, otherwise it will be cast\n+    \u002F\u002F to string and cause the type check to miss.\n+    function prependModifier (value, symbol) {\n+        return typeof value === 'string' ? symbol + value : value\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function installRenderHelpers (target) {\n+        target._o = markOnce;\n+        target._n = toNumber;\n+        target._s = toString;\n+        target._l = renderList;\n+        target._t = renderSlot;\n+        target._q = looseEqual;\n+        target._i = looseIndexOf;\n+        target._m = renderStatic;\n+        target._f = resolveFilter;\n+        target._k = checkKeyCodes;\n+        target._b = bindObjectProps;\n+        target._v = createTextVNode;\n+        target._e = createEmptyVNode;\n+        target._u = resolveScopedSlots;\n+        target._g = bindObjectListeners;\n+        target._d = bindDynamicKeys;\n+        target._p = prependModifier;\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function FunctionalRenderContext (\n+        data,\n+        props,\n+        children,\n+        parent,\n+        Ctor\n+    ) {\n+        var this$1 = this;\n+\n+        var options = Ctor.options;\n+        \u002F\u002F ensure the createElement function in functional components\n+        \u002F\u002F gets a unique context - this is necessary for correct named slot check\n+        var contextVm;\n+        if (hasOwn(parent, '_uid')) {\n+            contextVm = Object.create(parent);\n+            \u002F\u002F $flow-disable-line\n+            contextVm._original = parent;\n+        } else {\n+            \u002F\u002F the context vm passed in is a functional context as well.\n+            \u002F\u002F in this case we want to make sure we are able to get a hold to the\n+            \u002F\u002F real context instance.\n+            contextVm = parent;\n+            \u002F\u002F $flow-disable-line\n+            parent = parent._original;\n+        }\n+        var isCompiled = isTrue(options._compiled);\n+        var needNormalization = !isCompiled;\n+\n+        this.data = data;\n+        this.props = props;\n+        this.children = children;\n+        this.parent = parent;\n+        this.listeners = data.on || emptyObject;\n+        this.injections = resolveInject(options.inject, parent);\n+        this.slots = function () {\n+            if (!this$1.$slots) {\n+                normalizeScopedSlots(\n+                    data.scopedSlots,\n+                    this$1.$slots = resolveSlots(children, parent)\n+                );\n+            }\n+            return this$1.$slots\n+        };\n+\n+        Object.defineProperty(this, 'scopedSlots', ({\n+            enumerable: true,\n+            get: function get () {\n+                return normalizeScopedSlots(data.scopedSlots, this.slots())\n+            }\n+        }));\n+\n+        \u002F\u002F support for compiled functional template\n+        if (isCompiled) {\n+            \u002F\u002F exposing $options for renderStatic()\n+            this.$options = options;\n+            \u002F\u002F pre-resolve slots for renderSlot()\n+            this.$slots = this.slots();\n+            this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n+        }\n+\n+        if (options._scopeId) {\n+            this._c = function (a, b, c, d) {\n+                var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n+                if (vnode && !Array.isArray(vnode)) {\n+                    vnode.fnScopeId = options._scopeId;\n+                    vnode.fnContext = parent;\n+                }\n+                return vnode\n+            };\n+        } else {\n+            this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n+        }\n+    }\n+\n+    installRenderHelpers(FunctionalRenderContext.prototype);\n+\n+    function createFunctionalComponent (\n+        Ctor,\n+        propsData,\n+        data,\n+        contextVm,\n+        children\n+    ) {\n+        var options = Ctor.options;\n+        var props = {};\n+        var propOptions = options.props;\n+        if (isDef(propOptions)) {\n+            for (var key in propOptions) {\n+                props[key] = validateProp(key, propOptions, propsData || emptyObject);\n+            }\n+        } else {\n+            if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n+            if (isDef(data.props)) { mergeProps(props, data.props); }\n+        }\n+\n+        var renderContext = new FunctionalRenderContext(\n+            data,\n+            props,\n+            children,\n+            contextVm,\n+            Ctor\n+        );\n+\n+        var vnode = options.render.call(null, renderContext._c, renderContext);\n+\n+        if (vnode instanceof VNode) {\n+            return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n+        } else if (Array.isArray(vnode)) {\n+            var vnodes = normalizeChildren(vnode) || [];\n+            var res = new Array(vnodes.length);\n+            for (var i = 0; i \u003C vnodes.length; i++) {\n+                res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n+            }\n+            return res\n+        }\n+    }\n+\n+    function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n+        \u002F\u002F #7817 clone node before setting fnContext, otherwise if the node is reused\n+        \u002F\u002F (e.g. it was from a cached normal slot) the fnContext causes named slots\n+        \u002F\u002F that should not be matched to match.\n+        var clone = cloneVNode(vnode);\n+        clone.fnContext = contextVm;\n+        clone.fnOptions = options;\n+        {\n+            (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n+        }\n+        if (data.slot) {\n+            (clone.data || (clone.data = {})).slot = data.slot;\n+        }\n+        return clone\n+    }\n+\n+    function mergeProps (to, from) {\n+        for (var key in from) {\n+            to[camelize(key)] = from[key];\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F inline hooks to be invoked on component VNodes during patch\n+    var componentVNodeHooks = {\n+        init: function init (vnode, hydrating) {\n+            if (\n+                vnode.componentInstance &&\n+                !vnode.componentInstance._isDestroyed &&\n+                vnode.data.keepAlive\n+            ) {\n+                \u002F\u002F kept-alive components, treat as a patch\n+                var mountedNode = vnode; \u002F\u002F work around flow\n+                componentVNodeHooks.prepatch(mountedNode, mountedNode);\n+            } else {\n+                var child = vnode.componentInstance = createComponentInstanceForVnode(\n+                    vnode,\n+                    activeInstance\n+                );\n+                child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n+            }\n+        },\n+\n+        prepatch: function prepatch (oldVnode, vnode) {\n+            var options = vnode.componentOptions;\n+            var child = vnode.componentInstance = oldVnode.componentInstance;\n+            updateChildComponent(\n+                child,\n+                options.propsData, \u002F\u002F updated props\n+                options.listeners, \u002F\u002F updated listeners\n+                vnode, \u002F\u002F new parent vnode\n+                options.children \u002F\u002F new children\n+            );\n+        },\n+\n+        insert: function insert (vnode) {\n+            var context = vnode.context;\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isMounted) {\n+                componentInstance._isMounted = true;\n+                callHook(componentInstance, 'mounted');\n+            }\n+            if (vnode.data.keepAlive) {\n+                if (context._isMounted) {\n+                    \u002F\u002F vue-router#1212\n+                    \u002F\u002F During updates, a kept-alive component's child components may\n+                    \u002F\u002F change, so directly walking the tree here may call activated hooks\n+                    \u002F\u002F on incorrect children. Instead we push them into a queue which will\n+                    \u002F\u002F be processed after the whole patch process ended.\n+                    queueActivatedComponent(componentInstance);\n+                } else {\n+                    activateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        },\n+\n+        destroy: function destroy (vnode) {\n+            var componentInstance = vnode.componentInstance;\n+            if (!componentInstance._isDestroyed) {\n+                if (!vnode.data.keepAlive) {\n+                    componentInstance.$destroy();\n+                } else {\n+                    deactivateChildComponent(componentInstance, true \u002F* direct *\u002F);\n+                }\n+            }\n+        }\n+    };\n+\n+    var hooksToMerge = Object.keys(componentVNodeHooks);\n+\n+    function createComponent (\n+        Ctor,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        if (isUndef(Ctor)) {\n+            return\n+        }\n+\n+        var baseCtor = context.$options._base;\n+\n+        \u002F\u002F plain options object: turn it into a constructor\n+        if (isObject(Ctor)) {\n+            Ctor = baseCtor.extend(Ctor);\n+        }\n+\n+        \u002F\u002F if at this stage it's not a constructor or an async component factory,\n+        \u002F\u002F reject.\n+        if (typeof Ctor !== 'function') {\n+            {\n+                warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n+            }\n+            return\n+        }\n+\n+        \u002F\u002F async component\n+        var asyncFactory;\n+        if (isUndef(Ctor.cid)) {\n+            asyncFactory = Ctor;\n+            Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n+            if (Ctor === undefined) {\n+                \u002F\u002F return a placeholder node for async component, which is rendered\n+                \u002F\u002F as a comment node but preserves all the raw information for the node.\n+                \u002F\u002F the information will be used for async server-rendering and hydration.\n+                return createAsyncPlaceholder(\n+                    asyncFactory,\n+                    data,\n+                    context,\n+                    children,\n+                    tag\n+                )\n+            }\n+        }\n+\n+        data = data || {};\n+\n+        \u002F\u002F resolve constructor options in case global mixins are applied after\n+        \u002F\u002F component constructor creation\n+        resolveConstructorOptions(Ctor);\n+\n+        \u002F\u002F transform component v-model data into props & events\n+        if (isDef(data.model)) {\n+            transformModel(Ctor.options, data);\n+        }\n+\n+        \u002F\u002F extract props\n+        var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n+\n+        \u002F\u002F functional component\n+        if (isTrue(Ctor.options.functional)) {\n+            return createFunctionalComponent(Ctor, propsData, data, context, children)\n+        }\n+\n+        \u002F\u002F extract listeners, since these needs to be treated as\n+        \u002F\u002F child component listeners instead of DOM listeners\n+        var listeners = data.on;\n+        \u002F\u002F replace with listeners with .native modifier\n+        \u002F\u002F so it gets processed during parent component patch.\n+        data.on = data.nativeOn;\n+\n+        if (isTrue(Ctor.options.abstract)) {\n+            \u002F\u002F abstract components do not keep anything\n+            \u002F\u002F other than props & listeners & slot\n+\n+            \u002F\u002F work around flow\n+            var slot = data.slot;\n+            data = {};\n+            if (slot) {\n+                data.slot = slot;\n+            }\n+        }\n+\n+        \u002F\u002F install component management hooks onto the placeholder node\n+        installComponentHooks(data);\n+\n+        \u002F\u002F return a placeholder vnode\n+        var name = Ctor.options.name || tag;\n+        var vnode = new VNode(\n+            (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n+            data, undefined, undefined, undefined, context,\n+            { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n+            asyncFactory\n+        );\n+\n+        return vnode\n+    }\n+\n+    function createComponentInstanceForVnode (\n+        vnode, \u002F\u002F we know it's MountedComponentVNode but flow doesn't\n+        parent \u002F\u002F activeInstance in lifecycle state\n+    ) {\n+        var options = {\n+            _isComponent: true,\n+            _parentVnode: vnode,\n+            parent: parent\n+        };\n+        \u002F\u002F check inline-template render functions\n+        var inlineTemplate = vnode.data.inlineTemplate;\n+        if (isDef(inlineTemplate)) {\n+            options.render = inlineTemplate.render;\n+            options.staticRenderFns = inlineTemplate.staticRenderFns;\n+        }\n+        return new vnode.componentOptions.Ctor(options)\n+    }\n+\n+    function installComponentHooks (data) {\n+        var hooks = data.hook || (data.hook = {});\n+        for (var i = 0; i \u003C hooksToMerge.length; i++) {\n+            var key = hooksToMerge[i];\n+            var existing = hooks[key];\n+            var toMerge = componentVNodeHooks[key];\n+            if (existing !== toMerge && !(existing && existing._merged)) {\n+                hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n+            }\n+        }\n+    }\n+\n+    function mergeHook$1 (f1, f2) {\n+        var merged = function (a, b) {\n+            \u002F\u002F flow complains about extra args which is why we use any\n+            f1(a, b);\n+            f2(a, b);\n+        };\n+        merged._merged = true;\n+        return merged\n+    }\n+\n+    \u002F\u002F transform component v-model info (value and callback) into\n+    \u002F\u002F prop and event handler respectively.\n+    function transformModel (options, data) {\n+        var prop = (options.model && options.model.prop) || 'value';\n+        var event = (options.model && options.model.event) || 'input'\n+        ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n+        var on = data.on || (data.on = {});\n+        var existing = on[event];\n+        var callback = data.model.callback;\n+        if (isDef(existing)) {\n+            if (\n+                Array.isArray(existing)\n+                    ? existing.indexOf(callback) === -1\n+                    : existing !== callback\n+            ) {\n+                on[event] = [callback].concat(existing);\n+            }\n+        } else {\n+            on[event] = callback;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var SIMPLE_NORMALIZE = 1;\n+    var ALWAYS_NORMALIZE = 2;\n+\n+    \u002F\u002F wrapper function for providing a more flexible interface\n+    \u002F\u002F without getting yelled at by flow\n+    function createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType,\n+        alwaysNormalize\n+    ) {\n+        if (Array.isArray(data) || isPrimitive(data)) {\n+            normalizationType = children;\n+            children = data;\n+            data = undefined;\n+        }\n+        if (isTrue(alwaysNormalize)) {\n+            normalizationType = ALWAYS_NORMALIZE;\n+        }\n+        return _createElement(context, tag, data, children, normalizationType)\n+    }\n+\n+    function _createElement (\n+        context,\n+        tag,\n+        data,\n+        children,\n+        normalizationType\n+    ) {\n+        if (isDef(data) && isDef((data).__ob__)) {\n+            warn(\n+                \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n+                'Always create fresh vnode data objects in each render!',\n+                context\n+            );\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F object syntax in v-bind\n+        if (isDef(data) && isDef(data.is)) {\n+            tag = data.is;\n+        }\n+        if (!tag) {\n+            \u002F\u002F in case of component :is set to falsy value\n+            return createEmptyVNode()\n+        }\n+        \u002F\u002F warn against non-primitive key\n+        if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n+        ) {\n+            {\n+                warn(\n+                    'Avoid using non-primitive value as key, ' +\n+                    'use string\u002Fnumber value instead.',\n+                    context\n+                );\n+            }\n+        }\n+        \u002F\u002F support single function children as default scoped slot\n+        if (Array.isArray(children) &&\n+            typeof children[0] === 'function'\n+        ) {\n+            data = data || {};\n+            data.scopedSlots = { default: children[0] };\n+            children.length = 0;\n+        }\n+        if (normalizationType === ALWAYS_NORMALIZE) {\n+            children = normalizeChildren(children);\n+        } else if (normalizationType === SIMPLE_NORMALIZE) {\n+            children = simpleNormalizeChildren(children);\n+        }\n+        var vnode, ns;\n+        if (typeof tag === 'string') {\n+            var Ctor;\n+            ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n+            if (config.isReservedTag(tag)) {\n+                \u002F\u002F platform built-in elements\n+                vnode = new VNode(\n+                    config.parsePlatformTagName(tag), data, children,\n+                    undefined, undefined, context\n+                );\n+            } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n+                \u002F\u002F component\n+                vnode = createComponent(Ctor, data, context, children, tag);\n+            } else {\n+                \u002F\u002F unknown or unlisted namespaced elements\n+                \u002F\u002F check at runtime because it may get assigned a namespace when its\n+                \u002F\u002F parent normalizes children\n+                vnode = new VNode(\n+                    tag, data, children,\n+                    undefined, undefined, context\n+                );\n+            }\n+        } else {\n+            \u002F\u002F direct component options \u002F constructor\n+            vnode = createComponent(tag, data, context, children);\n+        }\n+        if (Array.isArray(vnode)) {\n+            return vnode\n+        } else if (isDef(vnode)) {\n+            if (isDef(ns)) { applyNS(vnode, ns); }\n+            if (isDef(data)) { registerDeepBindings(data); }\n+            return vnode\n+        } else {\n+            return createEmptyVNode()\n+        }\n+    }\n+\n+    function applyNS (vnode, ns, force) {\n+        vnode.ns = ns;\n+        if (vnode.tag === 'foreignObject') {\n+            \u002F\u002F use default namespace inside foreignObject\n+            ns = undefined;\n+            force = true;\n+        }\n+        if (isDef(vnode.children)) {\n+            for (var i = 0, l = vnode.children.length; i \u003C l; i++) {\n+                var child = vnode.children[i];\n+                if (isDef(child.tag) && (\n+                    isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n+                    applyNS(child, ns, force);\n+                }\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F ref #5318\n+    \u002F\u002F necessary to ensure parent re-render when deep bindings like :style and\n+    \u002F\u002F :class are used on slot nodes\n+    function registerDeepBindings (data) {\n+        if (isObject(data.style)) {\n+            traverse(data.style);\n+        }\n+        if (isObject(data.class)) {\n+            traverse(data.class);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initRender (vm) {\n+        vm._vnode = null; \u002F\u002F the root of the child tree\n+        vm._staticTrees = null; \u002F\u002F v-once cached trees\n+        var options = vm.$options;\n+        var parentVnode = vm.$vnode = options._parentVnode; \u002F\u002F the placeholder node in parent tree\n+        var renderContext = parentVnode && parentVnode.context;\n+        vm.$slots = resolveSlots(options._renderChildren, renderContext);\n+        vm.$scopedSlots = emptyObject;\n+        \u002F\u002F bind the createElement fn to this instance\n+        \u002F\u002F so that we get proper render context inside it.\n+        \u002F\u002F args order: tag, data, children, normalizationType, alwaysNormalize\n+        \u002F\u002F internal version is used by render functions compiled from templates\n+        vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n+        \u002F\u002F normalization is always applied for the public version, used in\n+        \u002F\u002F user-written render functions.\n+        vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n+\n+        \u002F\u002F $attrs & $listeners are exposed for easier HOC creation.\n+        \u002F\u002F they need to be reactive so that HOCs using them are always updated\n+        var parentData = parentVnode && parentVnode.data;\n+\n+      \u002F* istanbul ignore else *\u002F\n+        {\n+            defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n+            }, true);\n+            defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n+                !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n+            }, true);\n+        }\n+    }\n+\n+    var currentRenderingInstance = null;\n+\n+    function renderMixin (Vue) {\n+        \u002F\u002F install runtime convenience helpers\n+        installRenderHelpers(Vue.prototype);\n+\n+        Vue.prototype.$nextTick = function (fn) {\n+            return nextTick(fn, this)\n+        };\n+\n+        Vue.prototype._render = function () {\n+            var vm = this;\n+            var ref = vm.$options;\n+            var render = ref.render;\n+            var _parentVnode = ref._parentVnode;\n+\n+            if (_parentVnode) {\n+                vm.$scopedSlots = normalizeScopedSlots(\n+                    _parentVnode.data.scopedSlots,\n+                    vm.$slots,\n+                    vm.$scopedSlots\n+                );\n+            }\n+\n+            \u002F\u002F set parent vnode. this allows render functions to have access\n+            \u002F\u002F to the data on the placeholder node.\n+            vm.$vnode = _parentVnode;\n+            \u002F\u002F render self\n+            var vnode;\n+            try {\n+                \u002F\u002F There's no need to maintain a stack becaues all render fns are called\n+                \u002F\u002F separately from one another. Nested component's render fns are called\n+                \u002F\u002F when parent component is patched.\n+                currentRenderingInstance = vm;\n+                vnode = render.call(vm._renderProxy, vm.$createElement);\n+            } catch (e) {\n+                handleError(e, vm, \"render\");\n+                \u002F\u002F return error render result,\n+                \u002F\u002F or previous vnode to prevent render error causing blank component\n+              \u002F* istanbul ignore else *\u002F\n+                if (vm.$options.renderError) {\n+                    try {\n+                        vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n+                    } catch (e) {\n+                        handleError(e, vm, \"renderError\");\n+                        vnode = vm._vnode;\n+                    }\n+                } else {\n+                    vnode = vm._vnode;\n+                }\n+            } finally {\n+                currentRenderingInstance = null;\n+            }\n+            \u002F\u002F if the returned array contains only a single node, allow it\n+            if (Array.isArray(vnode) && vnode.length === 1) {\n+                vnode = vnode[0];\n+            }\n+            \u002F\u002F return empty vnode in case the render function errored out\n+            if (!(vnode instanceof VNode)) {\n+                if (Array.isArray(vnode)) {\n+                    warn(\n+                        'Multiple root nodes returned from render function. Render function ' +\n+                        'should return a single root node.',\n+                        vm\n+                    );\n+                }\n+                vnode = createEmptyVNode();\n+            }\n+            \u002F\u002F set parent\n+            vnode.parent = _parentVnode;\n+            return vnode\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function ensureCtor (comp, base) {\n+        if (\n+            comp.__esModule ||\n+            (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n+        ) {\n+            comp = comp.default;\n+        }\n+        return isObject(comp)\n+            ? base.extend(comp)\n+            : comp\n+    }\n+\n+    function createAsyncPlaceholder (\n+        factory,\n+        data,\n+        context,\n+        children,\n+        tag\n+    ) {\n+        var node = createEmptyVNode();\n+        node.asyncFactory = factory;\n+        node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n+        return node\n+    }\n+\n+    function resolveAsyncComponent (\n+        factory,\n+        baseCtor\n+    ) {\n+        if (isTrue(factory.error) && isDef(factory.errorComp)) {\n+            return factory.errorComp\n+        }\n+\n+        if (isDef(factory.resolved)) {\n+            return factory.resolved\n+        }\n+\n+        var owner = currentRenderingInstance;\n+        if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n+            \u002F\u002F already pending\n+            factory.owners.push(owner);\n+        }\n+\n+        if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n+            return factory.loadingComp\n+        }\n+\n+        if (owner && !isDef(factory.owners)) {\n+            var owners = factory.owners = [owner];\n+            var sync = true;\n+            var timerLoading = null;\n+            var timerTimeout = null\n+\n+            ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n+\n+            var forceRender = function (renderCompleted) {\n+                for (var i = 0, l = owners.length; i \u003C l; i++) {\n+                    (owners[i]).$forceUpdate();\n+                }\n+\n+                if (renderCompleted) {\n+                    owners.length = 0;\n+                    if (timerLoading !== null) {\n+                        clearTimeout(timerLoading);\n+                        timerLoading = null;\n+                    }\n+                    if (timerTimeout !== null) {\n+                        clearTimeout(timerTimeout);\n+                        timerTimeout = null;\n+                    }\n+                }\n+            };\n+\n+            var resolve = once(function (res) {\n+                \u002F\u002F cache resolved\n+                factory.resolved = ensureCtor(res, baseCtor);\n+                \u002F\u002F invoke callbacks only if this is not a synchronous resolve\n+                \u002F\u002F (async resolves are shimmed as synchronous during SSR)\n+                if (!sync) {\n+                    forceRender(true);\n+                } else {\n+                    owners.length = 0;\n+                }\n+            });\n+\n+            var reject = once(function (reason) {\n+                warn(\n+                    \"Failed to resolve async component: \" + (String(factory)) +\n+                    (reason ? (\"\\nReason: \" + reason) : '')\n+                );\n+                if (isDef(factory.errorComp)) {\n+                    factory.error = true;\n+                    forceRender(true);\n+                }\n+            });\n+\n+            var res = factory(resolve, reject);\n+\n+            if (isObject(res)) {\n+                if (isPromise(res)) {\n+                    \u002F\u002F () => Promise\n+                    if (isUndef(factory.resolved)) {\n+                        res.then(resolve, reject);\n+                    }\n+                } else if (isPromise(res.component)) {\n+                    res.component.then(resolve, reject);\n+\n+                    if (isDef(res.error)) {\n+                        factory.errorComp = ensureCtor(res.error, baseCtor);\n+                    }\n+\n+                    if (isDef(res.loading)) {\n+                        factory.loadingComp = ensureCtor(res.loading, baseCtor);\n+                        if (res.delay === 0) {\n+                            factory.loading = true;\n+                        } else {\n+                            timerLoading = setTimeout(function () {\n+                                timerLoading = null;\n+                                if (isUndef(factory.resolved) && isUndef(factory.error)) {\n+                                    factory.loading = true;\n+                                    forceRender(false);\n+                                }\n+                            }, res.delay || 200);\n+                        }\n+                    }\n+\n+                    if (isDef(res.timeout)) {\n+                        timerTimeout = setTimeout(function () {\n+                            timerTimeout = null;\n+                            if (isUndef(factory.resolved)) {\n+                                reject(\n+                                    \"timeout (\" + (res.timeout) + \"ms)\"\n+                                );\n+                            }\n+                        }, res.timeout);\n+                    }\n+                }\n+            }\n+\n+            sync = false;\n+            \u002F\u002F return in case resolved synchronously\n+            return factory.loading\n+                ? factory.loadingComp\n+                : factory.resolved\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function isAsyncPlaceholder (node) {\n+        return node.isComment && node.asyncFactory\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function getFirstComponentChild (children) {\n+        if (Array.isArray(children)) {\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var c = children[i];\n+                if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n+                    return c\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+  \u002F*  *\u002F\n+\n+    function initEvents (vm) {\n+        vm._events = Object.create(null);\n+        vm._hasHookEvent = false;\n+        \u002F\u002F init parent attached events\n+        var listeners = vm.$options._parentListeners;\n+        if (listeners) {\n+            updateComponentListeners(vm, listeners);\n+        }\n+    }\n+\n+    var target;\n+\n+    function add (event, fn) {\n+        target.$on(event, fn);\n+    }\n+\n+    function remove$1 (event, fn) {\n+        target.$off(event, fn);\n+    }\n+\n+    function createOnceHandler (event, fn) {\n+        var _target = target;\n+        return function onceHandler () {\n+            var res = fn.apply(null, arguments);\n+            if (res !== null) {\n+                _target.$off(event, onceHandler);\n+            }\n+        }\n+    }\n+\n+    function updateComponentListeners (\n+        vm,\n+        listeners,\n+        oldListeners\n+    ) {\n+        target = vm;\n+        updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n+        target = undefined;\n+    }\n+\n+    function eventsMixin (Vue) {\n+        var hookRE = \u002F^hook:\u002F;\n+        Vue.prototype.$on = function (event, fn) {\n+            var vm = this;\n+            if (Array.isArray(event)) {\n+                for (var i = 0, l = event.length; i \u003C l; i++) {\n+                    vm.$on(event[i], fn);\n+                }\n+            } else {\n+                (vm._events[event] || (vm._events[event] = [])).push(fn);\n+                \u002F\u002F optimize hook:event cost by using a boolean flag marked at registration\n+                \u002F\u002F instead of a hash lookup\n+                if (hookRE.test(event)) {\n+                    vm._hasHookEvent = true;\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$once = function (event, fn) {\n+            var vm = this;\n+            function on () {\n+                vm.$off(event, on);\n+                fn.apply(vm, arguments);\n+            }\n+            on.fn = fn;\n+            vm.$on(event, on);\n+            return vm\n+        };\n+\n+        Vue.prototype.$off = function (event, fn) {\n+            var vm = this;\n+            \u002F\u002F all\n+            if (!arguments.length) {\n+                vm._events = Object.create(null);\n+                return vm\n+            }\n+            \u002F\u002F array of events\n+            if (Array.isArray(event)) {\n+                for (var i$1 = 0, l = event.length; i$1 \u003C l; i$1++) {\n+                    vm.$off(event[i$1], fn);\n+                }\n+                return vm\n+            }\n+            \u002F\u002F specific event\n+            var cbs = vm._events[event];\n+            if (!cbs) {\n+                return vm\n+            }\n+            if (!fn) {\n+                vm._events[event] = null;\n+                return vm\n+            }\n+            \u002F\u002F specific handler\n+            var cb;\n+            var i = cbs.length;\n+            while (i--) {\n+                cb = cbs[i];\n+                if (cb === fn || cb.fn === fn) {\n+                    cbs.splice(i, 1);\n+                    break\n+                }\n+            }\n+            return vm\n+        };\n+\n+        Vue.prototype.$emit = function (event) {\n+            var vm = this;\n+            {\n+                var lowerCaseEvent = event.toLowerCase();\n+                if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n+                    tip(\n+                        \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n+                        (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n+                        \"Note that HTML attributes are case-insensitive and you cannot use \" +\n+                        \"v-on to listen to camelCase events when using in-DOM templates. \" +\n+                        \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n+                    );\n+                }\n+            }\n+            var cbs = vm._events[event];\n+            if (cbs) {\n+                cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n+                var args = toArray(arguments, 1);\n+                var info = \"event handler for \\\"\" + event + \"\\\"\";\n+                for (var i = 0, l = cbs.length; i \u003C l; i++) {\n+                    invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n+                }\n+            }\n+            return vm\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var activeInstance = null;\n+    var isUpdatingChildComponent = false;\n+\n+    function setActiveInstance(vm) {\n+        var prevActiveInstance = activeInstance;\n+        activeInstance = vm;\n+        return function () {\n+            activeInstance = prevActiveInstance;\n+        }\n+    }\n+\n+    function initLifecycle (vm) {\n+        var options = vm.$options;\n+\n+        \u002F\u002F locate first non-abstract parent\n+        var parent = options.parent;\n+        if (parent && !options.abstract) {\n+            while (parent.$options.abstract && parent.$parent) {\n+                parent = parent.$parent;\n+            }\n+            parent.$children.push(vm);\n+        }\n+\n+        vm.$parent = parent;\n+        vm.$root = parent ? parent.$root : vm;\n+\n+        vm.$children = [];\n+        vm.$refs = {};\n+\n+        vm._watcher = null;\n+        vm._inactive = null;\n+        vm._directInactive = false;\n+        vm._isMounted = false;\n+        vm._isDestroyed = false;\n+        vm._isBeingDestroyed = false;\n+    }\n+\n+    function lifecycleMixin (Vue) {\n+        Vue.prototype._update = function (vnode, hydrating) {\n+            var vm = this;\n+            var prevEl = vm.$el;\n+            var prevVnode = vm._vnode;\n+            var restoreActiveInstance = setActiveInstance(vm);\n+            vm._vnode = vnode;\n+            \u002F\u002F Vue.prototype.__patch__ is injected in entry points\n+            \u002F\u002F based on the rendering backend used.\n+            if (!prevVnode) {\n+                \u002F\u002F initial render\n+                vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false \u002F* removeOnly *\u002F);\n+            } else {\n+                \u002F\u002F updates\n+                vm.$el = vm.__patch__(prevVnode, vnode);\n+            }\n+            restoreActiveInstance();\n+            \u002F\u002F update __vue__ reference\n+            if (prevEl) {\n+                prevEl.__vue__ = null;\n+            }\n+            if (vm.$el) {\n+                vm.$el.__vue__ = vm;\n+            }\n+            \u002F\u002F if parent is an HOC, update its $el as well\n+            if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n+                vm.$parent.$el = vm.$el;\n+            }\n+            \u002F\u002F updated hook is called by the scheduler to ensure that children are\n+            \u002F\u002F updated in a parent's updated hook.\n+        };\n+\n+        Vue.prototype.$forceUpdate = function () {\n+            var vm = this;\n+            if (vm._watcher) {\n+                vm._watcher.update();\n+            }\n+        };\n+\n+        Vue.prototype.$destroy = function () {\n+            var vm = this;\n+            if (vm._isBeingDestroyed) {\n+                return\n+            }\n+            callHook(vm, 'beforeDestroy');\n+            vm._isBeingDestroyed = true;\n+            \u002F\u002F remove self from parent\n+            var parent = vm.$parent;\n+            if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n+                remove(parent.$children, vm);\n+            }\n+            \u002F\u002F teardown watchers\n+            if (vm._watcher) {\n+                vm._watcher.teardown();\n+            }\n+            var i = vm._watchers.length;\n+            while (i--) {\n+                vm._watchers[i].teardown();\n+            }\n+            \u002F\u002F remove reference from data ob\n+            \u002F\u002F frozen object may not have observer.\n+            if (vm._data.__ob__) {\n+                vm._data.__ob__.vmCount--;\n+            }\n+            \u002F\u002F call the last hook...\n+            vm._isDestroyed = true;\n+            \u002F\u002F invoke destroy hooks on current rendered tree\n+            vm.__patch__(vm._vnode, null);\n+            \u002F\u002F fire destroyed hook\n+            callHook(vm, 'destroyed');\n+            \u002F\u002F turn off all instance listeners.\n+            vm.$off();\n+            \u002F\u002F remove __vue__ reference\n+            if (vm.$el) {\n+                vm.$el.__vue__ = null;\n+            }\n+            \u002F\u002F release circular reference (#6759)\n+            if (vm.$vnode) {\n+                vm.$vnode.parent = null;\n+            }\n+        };\n+    }\n+\n+    function mountComponent (\n+        vm,\n+        el,\n+        hydrating\n+    ) {\n+        vm.$el = el;\n+        if (!vm.$options.render) {\n+            vm.$options.render = createEmptyVNode;\n+            {\n+              \u002F* istanbul ignore if *\u002F\n+                if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n+                    vm.$options.el || el) {\n+                    warn(\n+                        'You are using the runtime-only build of Vue where the template ' +\n+                        'compiler is not available. Either pre-compile the templates into ' +\n+                        'render functions, or use the compiler-included build.',\n+                        vm\n+                    );\n+                } else {\n+                    warn(\n+                        'Failed to mount component: template or render function not defined.',\n+                        vm\n+                    );\n+                }\n+            }\n+        }\n+        callHook(vm, 'beforeMount');\n+\n+        var updateComponent;\n+      \u002F* istanbul ignore if *\u002F\n+        if (config.performance && mark) {\n+            updateComponent = function () {\n+                var name = vm._name;\n+                var id = vm._uid;\n+                var startTag = \"vue-perf-start:\" + id;\n+                var endTag = \"vue-perf-end:\" + id;\n+\n+                mark(startTag);\n+                var vnode = vm._render();\n+                mark(endTag);\n+                measure((\"vue \" + name + \" render\"), startTag, endTag);\n+\n+                mark(startTag);\n+                vm._update(vnode, hydrating);\n+                mark(endTag);\n+                measure((\"vue \" + name + \" patch\"), startTag, endTag);\n+            };\n+        } else {\n+            updateComponent = function () {\n+                vm._update(vm._render(), hydrating);\n+            };\n+        }\n+\n+        \u002F\u002F we set this to vm._watcher inside the watcher's constructor\n+        \u002F\u002F since the watcher's initial patch may call $forceUpdate (e.g. inside child\n+        \u002F\u002F component's mounted hook), which relies on vm._watcher being already defined\n+        new Watcher(vm, updateComponent, noop, {\n+            before: function before () {\n+                if (vm._isMounted && !vm._isDestroyed) {\n+                    callHook(vm, 'beforeUpdate');\n+                }\n+            }\n+        }, true \u002F* isRenderWatcher *\u002F);\n+        hydrating = false;\n+\n+        \u002F\u002F manually mounted instance, call mounted on self\n+        \u002F\u002F mounted is called for render-created child components in its inserted hook\n+        if (vm.$vnode == null) {\n+            vm._isMounted = true;\n+            callHook(vm, 'mounted');\n+        }\n+        return vm\n+    }\n+\n+    function updateChildComponent (\n+        vm,\n+        propsData,\n+        listeners,\n+        parentVnode,\n+        renderChildren\n+    ) {\n+        {\n+            isUpdatingChildComponent = true;\n+        }\n+\n+        \u002F\u002F determine whether component has slot children\n+        \u002F\u002F we need to do this before overwriting $options._renderChildren.\n+\n+        \u002F\u002F check if there are dynamic scopedSlots (hand-written or compiled but with\n+        \u002F\u002F dynamic slot names). Static scoped slots compiled from template has the\n+        \u002F\u002F \"$stable\" marker.\n+        var newScopedSlots = parentVnode.data.scopedSlots;\n+        var oldScopedSlots = vm.$scopedSlots;\n+        var hasDynamicScopedSlot = !!(\n+            (newScopedSlots && !newScopedSlots.$stable) ||\n+            (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n+            (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n+        );\n+\n+        \u002F\u002F Any static slot children from the parent may have changed during parent's\n+        \u002F\u002F update. Dynamic scoped slots may also have changed. In such cases, a forced\n+        \u002F\u002F update is necessary to ensure correctness.\n+        var needsForceUpdate = !!(\n+            renderChildren ||               \u002F\u002F has new static slots\n+            vm.$options._renderChildren ||  \u002F\u002F has old static slots\n+            hasDynamicScopedSlot\n+        );\n+\n+        vm.$options._parentVnode = parentVnode;\n+        vm.$vnode = parentVnode; \u002F\u002F update vm's placeholder node without re-render\n+\n+        if (vm._vnode) { \u002F\u002F update child tree's parent\n+            vm._vnode.parent = parentVnode;\n+        }\n+        vm.$options._renderChildren = renderChildren;\n+\n+        \u002F\u002F update $attrs and $listeners hash\n+        \u002F\u002F these are also reactive so they may trigger child update if the child\n+        \u002F\u002F used them during render\n+        vm.$attrs = parentVnode.data.attrs || emptyObject;\n+        vm.$listeners = listeners || emptyObject;\n+\n+        \u002F\u002F update props\n+        if (propsData && vm.$options.props) {\n+            toggleObserving(false);\n+            var props = vm._props;\n+            var propKeys = vm.$options._propKeys || [];\n+            for (var i = 0; i \u003C propKeys.length; i++) {\n+                var key = propKeys[i];\n+                var propOptions = vm.$options.props; \u002F\u002F wtf flow?\n+                props[key] = validateProp(key, propOptions, propsData, vm);\n+            }\n+            toggleObserving(true);\n+            \u002F\u002F keep a copy of raw propsData\n+            vm.$options.propsData = propsData;\n+        }\n+\n+        \u002F\u002F update listeners\n+        listeners = listeners || emptyObject;\n+        var oldListeners = vm.$options._parentListeners;\n+        vm.$options._parentListeners = listeners;\n+        updateComponentListeners(vm, listeners, oldListeners);\n+\n+        \u002F\u002F resolve slots + force update if has children\n+        if (needsForceUpdate) {\n+            vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n+            vm.$forceUpdate();\n+        }\n+\n+        {\n+            isUpdatingChildComponent = false;\n+        }\n+    }\n+\n+    function isInInactiveTree (vm) {\n+        while (vm && (vm = vm.$parent)) {\n+            if (vm._inactive) { return true }\n+        }\n+        return false\n+    }\n+\n+    function activateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = false;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        } else if (vm._directInactive) {\n+            return\n+        }\n+        if (vm._inactive || vm._inactive === null) {\n+            vm._inactive = false;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                activateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'activated');\n+        }\n+    }\n+\n+    function deactivateChildComponent (vm, direct) {\n+        if (direct) {\n+            vm._directInactive = true;\n+            if (isInInactiveTree(vm)) {\n+                return\n+            }\n+        }\n+        if (!vm._inactive) {\n+            vm._inactive = true;\n+            for (var i = 0; i \u003C vm.$children.length; i++) {\n+                deactivateChildComponent(vm.$children[i]);\n+            }\n+            callHook(vm, 'deactivated');\n+        }\n+    }\n+\n+    function callHook (vm, hook) {\n+        \u002F\u002F #7573 disable dep collection when invoking lifecycle hooks\n+        pushTarget();\n+        var handlers = vm.$options[hook];\n+        var info = hook + \" hook\";\n+        if (handlers) {\n+            for (var i = 0, j = handlers.length; i \u003C j; i++) {\n+                invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n+            }\n+        }\n+        if (vm._hasHookEvent) {\n+            vm.$emit('hook:' + hook);\n+        }\n+        popTarget();\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var MAX_UPDATE_COUNT = 100;\n+\n+    var queue = [];\n+    var activatedChildren = [];\n+    var has = {};\n+    var circular = {};\n+    var waiting = false;\n+    var flushing = false;\n+    var index = 0;\n+\n+    \u002F**\n+     * Reset the scheduler's state.\n+     *\u002F\n+    function resetSchedulerState () {\n+        index = queue.length = activatedChildren.length = 0;\n+        has = {};\n+        {\n+            circular = {};\n+        }\n+        waiting = flushing = false;\n+    }\n+\n+    \u002F\u002F Async edge case #6566 requires saving the timestamp when event listeners are\n+    \u002F\u002F attached. However, calling performance.now() has a perf overhead especially\n+    \u002F\u002F if the page has thousands of event listeners. Instead, we take a timestamp\n+    \u002F\u002F every time the scheduler flushes and use that for all event listeners\n+    \u002F\u002F attached during that flush.\n+    var currentFlushTimestamp = 0;\n+\n+    \u002F\u002F Async edge case fix requires storing an event listener's attach timestamp.\n+    var getNow = Date.now;\n+\n+    \u002F\u002F Determine what event timestamp the browser is using. Annoyingly, the\n+    \u002F\u002F timestamp can either be hi-res (relative to page load) or low-res\n+    \u002F\u002F (relative to UNIX epoch), so in order to compare time we have to use the\n+    \u002F\u002F same timestamp type when saving the flush timestamp.\n+    \u002F\u002F All IE versions use low-res event timestamps, and have problematic clock\n+    \u002F\u002F implementations (#9632)\n+    if (inBrowser && !isIE) {\n+        var performance = window.performance;\n+        if (\n+            performance &&\n+            typeof performance.now === 'function' &&\n+            getNow() > document.createEvent('Event').timeStamp\n+        ) {\n+            \u002F\u002F if the event timestamp, although evaluated AFTER the Date.now(), is\n+            \u002F\u002F smaller than it, it means the event is using a hi-res timestamp,\n+            \u002F\u002F and we need to use the hi-res version for event listener timestamps as\n+            \u002F\u002F well.\n+            getNow = function () { return performance.now(); };\n+        }\n+    }\n+\n+    \u002F**\n+     * Flush both queues and run the watchers.\n+     *\u002F\n+    function flushSchedulerQueue () {\n+        currentFlushTimestamp = getNow();\n+        flushing = true;\n+        var watcher, id;\n+\n+        \u002F\u002F Sort queue before flush.\n+        \u002F\u002F This ensures that:\n+        \u002F\u002F 1. Components are updated from parent to child. (because parent is always\n+        \u002F\u002F    created before the child)\n+        \u002F\u002F 2. A component's user watchers are run before its render watcher (because\n+        \u002F\u002F    user watchers are created before the render watcher)\n+        \u002F\u002F 3. If a component is destroyed during a parent component's watcher run,\n+        \u002F\u002F    its watchers can be skipped.\n+        queue.sort(function (a, b) { return a.id - b.id; });\n+\n+        \u002F\u002F do not cache length because more watchers might be pushed\n+        \u002F\u002F as we run existing watchers\n+        for (index = 0; index \u003C queue.length; index++) {\n+            watcher = queue[index];\n+            if (watcher.before) {\n+                watcher.before();\n+            }\n+            id = watcher.id;\n+            has[id] = null;\n+            watcher.run();\n+            \u002F\u002F in dev build, check and stop circular updates.\n+            if (has[id] != null) {\n+                circular[id] = (circular[id] || 0) + 1;\n+                if (circular[id] > MAX_UPDATE_COUNT) {\n+                    warn(\n+                        'You may have an infinite update loop ' + (\n+                            watcher.user\n+                                ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n+                                : \"in a component render function.\"\n+                        ),\n+                        watcher.vm\n+                    );\n+                    break\n+                }\n+            }\n+        }\n+\n+        \u002F\u002F keep copies of post queues before resetting state\n+        var activatedQueue = activatedChildren.slice();\n+        var updatedQueue = queue.slice();\n+\n+        resetSchedulerState();\n+\n+        \u002F\u002F call component updated and activated hooks\n+        callActivatedHooks(activatedQueue);\n+        callUpdatedHooks(updatedQueue);\n+\n+        \u002F\u002F devtool hook\n+      \u002F* istanbul ignore if *\u002F\n+        if (devtools && config.devtools) {\n+            devtools.emit('flush');\n+        }\n+    }\n+\n+    function callUpdatedHooks (queue) {\n+        var i = queue.length;\n+        while (i--) {\n+            var watcher = queue[i];\n+            var vm = watcher.vm;\n+            if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n+                callHook(vm, 'updated');\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Queue a kept-alive component that was activated during patch.\n+     * The queue will be processed after the entire tree has been patched.\n+     *\u002F\n+    function queueActivatedComponent (vm) {\n+        \u002F\u002F setting _inactive to false here so that a render function can\n+        \u002F\u002F rely on checking whether it's in an inactive tree (e.g. router-view)\n+        vm._inactive = false;\n+        activatedChildren.push(vm);\n+    }\n+\n+    function callActivatedHooks (queue) {\n+        for (var i = 0; i \u003C queue.length; i++) {\n+            queue[i]._inactive = true;\n+            activateChildComponent(queue[i], true \u002F* true *\u002F);\n+        }\n+    }\n+\n+    \u002F**\n+     * Push a watcher into the watcher queue.\n+     * Jobs with duplicate IDs will be skipped unless it's\n+     * pushed when the queue is being flushed.\n+     *\u002F\n+    function queueWatcher (watcher) {\n+        var id = watcher.id;\n+        if (has[id] == null) {\n+            has[id] = true;\n+            if (!flushing) {\n+                queue.push(watcher);\n+            } else {\n+                \u002F\u002F if already flushing, splice the watcher based on its id\n+                \u002F\u002F if already past its id, it will be run next immediately.\n+                var i = queue.length - 1;\n+                while (i > index && queue[i].id > watcher.id) {\n+                    i--;\n+                }\n+                queue.splice(i + 1, 0, watcher);\n+            }\n+            \u002F\u002F queue the flush\n+            if (!waiting) {\n+                waiting = true;\n+\n+                if (!config.async) {\n+                    flushSchedulerQueue();\n+                    return\n+                }\n+                nextTick(flushSchedulerQueue);\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    var uid$2 = 0;\n+\n+    \u002F**\n+     * A watcher parses an expression, collects dependencies,\n+     * and fires callback when the expression value changes.\n+     * This is used for both the $watch() api and directives.\n+     *\u002F\n+    var Watcher = function Watcher (\n+        vm,\n+        expOrFn,\n+        cb,\n+        options,\n+        isRenderWatcher\n+    ) {\n+        this.vm = vm;\n+        if (isRenderWatcher) {\n+            vm._watcher = this;\n+        }\n+        vm._watchers.push(this);\n+        \u002F\u002F options\n+        if (options) {\n+            this.deep = !!options.deep;\n+            this.user = !!options.user;\n+            this.lazy = !!options.lazy;\n+            this.sync = !!options.sync;\n+            this.before = options.before;\n+        } else {\n+            this.deep = this.user = this.lazy = this.sync = false;\n+        }\n+        this.cb = cb;\n+        this.id = ++uid$2; \u002F\u002F uid for batching\n+        this.active = true;\n+        this.dirty = this.lazy; \u002F\u002F for lazy watchers\n+        this.deps = [];\n+        this.newDeps = [];\n+        this.depIds = new _Set();\n+        this.newDepIds = new _Set();\n+        this.expression = expOrFn.toString();\n+        \u002F\u002F parse expression for getter\n+        if (typeof expOrFn === 'function') {\n+            this.getter = expOrFn;\n+        } else {\n+            this.getter = parsePath(expOrFn);\n+            if (!this.getter) {\n+                this.getter = noop;\n+                warn(\n+                    \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n+                    'Watcher only accepts simple dot-delimited paths. ' +\n+                    'For full control, use a function instead.',\n+                    vm\n+                );\n+            }\n+        }\n+        this.value = this.lazy\n+            ? undefined\n+            : this.get();\n+    };\n+\n+    \u002F**\n+     * Evaluate the getter, and re-collect dependencies.\n+     *\u002F\n+    Watcher.prototype.get = function get () {\n+        pushTarget(this);\n+        var value;\n+        var vm = this.vm;\n+        try {\n+            value = this.getter.call(vm, vm);\n+        } catch (e) {\n+            if (this.user) {\n+                handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+            } else {\n+                throw e\n+            }\n+        } finally {\n+            \u002F\u002F \"touch\" every property so they are all tracked as\n+            \u002F\u002F dependencies for deep watching\n+            if (this.deep) {\n+                traverse(value);\n+            }\n+            popTarget();\n+            this.cleanupDeps();\n+        }\n+        return value\n+    };\n+\n+    \u002F**\n+     * Add a dependency to this directive.\n+     *\u002F\n+    Watcher.prototype.addDep = function addDep (dep) {\n+        var id = dep.id;\n+        if (!this.newDepIds.has(id)) {\n+            this.newDepIds.add(id);\n+            this.newDeps.push(dep);\n+            if (!this.depIds.has(id)) {\n+                dep.addSub(this);\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Clean up for dependency collection.\n+     *\u002F\n+    Watcher.prototype.cleanupDeps = function cleanupDeps () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            var dep = this.deps[i];\n+            if (!this.newDepIds.has(dep.id)) {\n+                dep.removeSub(this);\n+            }\n+        }\n+        var tmp = this.depIds;\n+        this.depIds = this.newDepIds;\n+        this.newDepIds = tmp;\n+        this.newDepIds.clear();\n+        tmp = this.deps;\n+        this.deps = this.newDeps;\n+        this.newDeps = tmp;\n+        this.newDeps.length = 0;\n+    };\n+\n+    \u002F**\n+     * Subscriber interface.\n+     * Will be called when a dependency changes.\n+     *\u002F\n+    Watcher.prototype.update = function update () {\n+      \u002F* istanbul ignore else *\u002F\n+        if (this.lazy) {\n+            this.dirty = true;\n+        } else if (this.sync) {\n+            this.run();\n+        } else {\n+            queueWatcher(this);\n+        }\n+    };\n+\n+    \u002F**\n+     * Scheduler job interface.\n+     * Will be called by the scheduler.\n+     *\u002F\n+    Watcher.prototype.run = function run () {\n+        if (this.active) {\n+            var value = this.get();\n+            if (\n+                value !== this.value ||\n+                \u002F\u002F Deep watchers and watchers on Object\u002FArrays should fire even\n+                \u002F\u002F when the value is the same, because the value may\n+                \u002F\u002F have mutated.\n+                isObject(value) ||\n+                this.deep\n+            ) {\n+                \u002F\u002F set new value\n+                var oldValue = this.value;\n+                this.value = value;\n+                if (this.user) {\n+                    try {\n+                        this.cb.call(this.vm, value, oldValue);\n+                    } catch (e) {\n+                        handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n+                    }\n+                } else {\n+                    this.cb.call(this.vm, value, oldValue);\n+                }\n+            }\n+        }\n+    };\n+\n+    \u002F**\n+     * Evaluate the value of the watcher.\n+     * This only gets called for lazy watchers.\n+     *\u002F\n+    Watcher.prototype.evaluate = function evaluate () {\n+        this.value = this.get();\n+        this.dirty = false;\n+    };\n+\n+    \u002F**\n+     * Depend on all deps collected by this watcher.\n+     *\u002F\n+    Watcher.prototype.depend = function depend () {\n+        var i = this.deps.length;\n+        while (i--) {\n+            this.deps[i].depend();\n+        }\n+    };\n+\n+    \u002F**\n+     * Remove self from all dependencies' subscriber list.\n+     *\u002F\n+    Watcher.prototype.teardown = function teardown () {\n+        if (this.active) {\n+            \u002F\u002F remove self from vm's watcher list\n+            \u002F\u002F this is a somewhat expensive operation so we skip it\n+            \u002F\u002F if the vm is being destroyed.\n+            if (!this.vm._isBeingDestroyed) {\n+                remove(this.vm._watchers, this);\n+            }\n+            var i = this.deps.length;\n+            while (i--) {\n+                this.deps[i].removeSub(this);\n+            }\n+            this.active = false;\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var sharedPropertyDefinition = {\n+        enumerable: true,\n+        configurable: true,\n+        get: noop,\n+        set: noop\n+    };\n+\n+    function proxy (target, sourceKey, key) {\n+        sharedPropertyDefinition.get = function proxyGetter () {\n+            return this[sourceKey][key]\n+        };\n+        sharedPropertyDefinition.set = function proxySetter (val) {\n+            this[sourceKey][key] = val;\n+        };\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function initState (vm) {\n+        vm._watchers = [];\n+        var opts = vm.$options;\n+        if (opts.props) { initProps(vm, opts.props); }\n+        if (opts.methods) { initMethods(vm, opts.methods); }\n+        if (opts.data) {\n+            initData(vm);\n+        } else {\n+            observe(vm._data = {}, true \u002F* asRootData *\u002F);\n+        }\n+        if (opts.computed) { initComputed(vm, opts.computed); }\n+        if (opts.watch && opts.watch !== nativeWatch) {\n+            initWatch(vm, opts.watch);\n+        }\n+    }\n+\n+    function initProps (vm, propsOptions) {\n+        var propsData = vm.$options.propsData || {};\n+        var props = vm._props = {};\n+        \u002F\u002F cache prop keys so that future props updates can iterate using Array\n+        \u002F\u002F instead of dynamic object key enumeration.\n+        var keys = vm.$options._propKeys = [];\n+        var isRoot = !vm.$parent;\n+        \u002F\u002F root instance props should be converted\n+        if (!isRoot) {\n+            toggleObserving(false);\n+        }\n+        var loop = function ( key ) {\n+            keys.push(key);\n+            var value = validateProp(key, propsOptions, propsData, vm);\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                var hyphenatedKey = hyphenate(key);\n+                if (isReservedAttribute(hyphenatedKey) ||\n+                    config.isReservedAttr(hyphenatedKey)) {\n+                    warn(\n+                        (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n+                        vm\n+                    );\n+                }\n+                defineReactive$$1(props, key, value, function () {\n+                    if (!isRoot && !isUpdatingChildComponent) {\n+                        warn(\n+                            \"Avoid mutating a prop directly since the value will be \" +\n+                            \"overwritten whenever the parent component re-renders. \" +\n+                            \"Instead, use a data or computed property based on the prop's \" +\n+                            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n+                            vm\n+                        );\n+                    }\n+                });\n+            }\n+            \u002F\u002F static props are already proxied on the component's prototype\n+            \u002F\u002F during Vue.extend(). We only need to proxy props defined at\n+            \u002F\u002F instantiation here.\n+            if (!(key in vm)) {\n+                proxy(vm, \"_props\", key);\n+            }\n+        };\n+\n+        for (var key in propsOptions) loop( key );\n+        toggleObserving(true);\n+    }\n+\n+    function initData (vm) {\n+        var data = vm.$options.data;\n+        data = vm._data = typeof data === 'function'\n+            ? getData(data, vm)\n+            : data || {};\n+        if (!isPlainObject(data)) {\n+            data = {};\n+            warn(\n+                'data functions should return an object:\\n' +\n+                'https:\u002F\u002Fvuejs.org\u002Fv2\u002Fguide\u002Fcomponents.html#data-Must-Be-a-Function',\n+                vm\n+            );\n+        }\n+        \u002F\u002F proxy data on instance\n+        var keys = Object.keys(data);\n+        var props = vm.$options.props;\n+        var methods = vm.$options.methods;\n+        var i = keys.length;\n+        while (i--) {\n+            var key = keys[i];\n+            {\n+                if (methods && hasOwn(methods, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n+                        vm\n+                    );\n+                }\n+            }\n+            if (props && hasOwn(props, key)) {\n+                warn(\n+                    \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n+                    \"Use prop default value instead.\",\n+                    vm\n+                );\n+            } else if (!isReserved(key)) {\n+                proxy(vm, \"_data\", key);\n+            }\n+        }\n+        \u002F\u002F observe data\n+        observe(data, true \u002F* asRootData *\u002F);\n+    }\n+\n+    function getData (data, vm) {\n+        \u002F\u002F #7573 disable dep collection when invoking data getters\n+        pushTarget();\n+        try {\n+            return data.call(vm, vm)\n+        } catch (e) {\n+            handleError(e, vm, \"data()\");\n+            return {}\n+        } finally {\n+            popTarget();\n+        }\n+    }\n+\n+    var computedWatcherOptions = { lazy: true };\n+\n+    function initComputed (vm, computed) {\n+        \u002F\u002F $flow-disable-line\n+        var watchers = vm._computedWatchers = Object.create(null);\n+        \u002F\u002F computed properties are just getters during SSR\n+        var isSSR = isServerRendering();\n+\n+        for (var key in computed) {\n+            var userDef = computed[key];\n+            var getter = typeof userDef === 'function' ? userDef : userDef.get;\n+            if (getter == null) {\n+                warn(\n+                    (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n+                    vm\n+                );\n+            }\n+\n+            if (!isSSR) {\n+                \u002F\u002F create internal watcher for the computed property.\n+                watchers[key] = new Watcher(\n+                    vm,\n+                    getter || noop,\n+                    noop,\n+                    computedWatcherOptions\n+                );\n+            }\n+\n+            \u002F\u002F component-defined computed properties are already defined on the\n+            \u002F\u002F component prototype. We only need to define computed properties defined\n+            \u002F\u002F at instantiation here.\n+            if (!(key in vm)) {\n+                defineComputed(vm, key, userDef);\n+            } else {\n+                if (key in vm.$data) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n+                } else if (vm.$options.props && key in vm.$options.props) {\n+                    warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n+                }\n+            }\n+        }\n+    }\n+\n+    function defineComputed (\n+        target,\n+        key,\n+        userDef\n+    ) {\n+        var shouldCache = !isServerRendering();\n+        if (typeof userDef === 'function') {\n+            sharedPropertyDefinition.get = shouldCache\n+                ? createComputedGetter(key)\n+                : createGetterInvoker(userDef);\n+            sharedPropertyDefinition.set = noop;\n+        } else {\n+            sharedPropertyDefinition.get = userDef.get\n+                ? shouldCache && userDef.cache !== false\n+                    ? createComputedGetter(key)\n+                    : createGetterInvoker(userDef.get)\n+                : noop;\n+            sharedPropertyDefinition.set = userDef.set || noop;\n+        }\n+        if (sharedPropertyDefinition.set === noop) {\n+            sharedPropertyDefinition.set = function () {\n+                warn(\n+                    (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n+                    this\n+                );\n+            };\n+        }\n+        Object.defineProperty(target, key, sharedPropertyDefinition);\n+    }\n+\n+    function createComputedGetter (key) {\n+        return function computedGetter () {\n+            var watcher = this._computedWatchers && this._computedWatchers[key];\n+            if (watcher) {\n+                if (watcher.dirty) {\n+                    watcher.evaluate();\n+                }\n+                if (Dep.target) {\n+                    watcher.depend();\n+                }\n+                return watcher.value\n+            }\n+        }\n+    }\n+\n+    function createGetterInvoker(fn) {\n+        return function computedGetter () {\n+            return fn.call(this, this)\n+        }\n+    }\n+\n+    function initMethods (vm, methods) {\n+        var props = vm.$options.props;\n+        for (var key in methods) {\n+            {\n+                if (typeof methods[key] !== 'function') {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n+                        \"Did you reference the function correctly?\",\n+                        vm\n+                    );\n+                }\n+                if (props && hasOwn(props, key)) {\n+                    warn(\n+                        (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n+                        vm\n+                    );\n+                }\n+                if ((key in vm) && isReserved(key)) {\n+                    warn(\n+                        \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n+                        \"Avoid defining component methods that start with _ or $.\"\n+                    );\n+                }\n+            }\n+            vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n+        }\n+    }\n+\n+    function initWatch (vm, watch) {\n+        for (var key in watch) {\n+            var handler = watch[key];\n+            if (Array.isArray(handler)) {\n+                for (var i = 0; i \u003C handler.length; i++) {\n+                    createWatcher(vm, key, handler[i]);\n+                }\n+            } else {\n+                createWatcher(vm, key, handler);\n+            }\n+        }\n+    }\n+\n+    function createWatcher (\n+        vm,\n+        expOrFn,\n+        handler,\n+        options\n+    ) {\n+        if (isPlainObject(handler)) {\n+            options = handler;\n+            handler = handler.handler;\n+        }\n+        if (typeof handler === 'string') {\n+            handler = vm[handler];\n+        }\n+        return vm.$watch(expOrFn, handler, options)\n+    }\n+\n+    function stateMixin (Vue) {\n+        \u002F\u002F flow somehow has problems with directly declared definition object\n+        \u002F\u002F when using Object.defineProperty, so we have to procedurally build up\n+        \u002F\u002F the object here.\n+        var dataDef = {};\n+        dataDef.get = function () { return this._data };\n+        var propsDef = {};\n+        propsDef.get = function () { return this._props };\n+        {\n+            dataDef.set = function () {\n+                warn(\n+                    'Avoid replacing instance root $data. ' +\n+                    'Use nested data properties instead.',\n+                    this\n+                );\n+            };\n+            propsDef.set = function () {\n+                warn(\"$props is readonly.\", this);\n+            };\n+        }\n+        Object.defineProperty(Vue.prototype, '$data', dataDef);\n+        Object.defineProperty(Vue.prototype, '$props', propsDef);\n+\n+        Vue.prototype.$set = set;\n+        Vue.prototype.$delete = del;\n+\n+        Vue.prototype.$watch = function (\n+            expOrFn,\n+            cb,\n+            options\n+        ) {\n+            var vm = this;\n+            if (isPlainObject(cb)) {\n+                return createWatcher(vm, expOrFn, cb, options)\n+            }\n+            options = options || {};\n+            options.user = true;\n+            var watcher = new Watcher(vm, expOrFn, cb, options);\n+            if (options.immediate) {\n+                try {\n+                    cb.call(vm, watcher.value);\n+                } catch (error) {\n+                    handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n+                }\n+            }\n+            return function unwatchFn () {\n+                watcher.teardown();\n+            }\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var uid$3 = 0;\n+\n+    function initMixin (Vue) {\n+        Vue.prototype._init = function (options) {\n+            var vm = this;\n+            \u002F\u002F a uid\n+            vm._uid = uid$3++;\n+\n+            var startTag, endTag;\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                startTag = \"vue-perf-start:\" + (vm._uid);\n+                endTag = \"vue-perf-end:\" + (vm._uid);\n+                mark(startTag);\n+            }\n+\n+            \u002F\u002F a flag to avoid this being observed\n+            vm._isVue = true;\n+            \u002F\u002F merge options\n+            if (options && options._isComponent) {\n+                \u002F\u002F optimize internal component instantiation\n+                \u002F\u002F since dynamic options merging is pretty slow, and none of the\n+                \u002F\u002F internal component options needs special treatment.\n+                initInternalComponent(vm, options);\n+            } else {\n+                vm.$options = mergeOptions(\n+                    resolveConstructorOptions(vm.constructor),\n+                    options || {},\n+                    vm\n+                );\n+            }\n+          \u002F* istanbul ignore else *\u002F\n+            {\n+                initProxy(vm);\n+            }\n+            \u002F\u002F expose real self\n+            vm._self = vm;\n+            initLifecycle(vm);\n+            initEvents(vm);\n+            initRender(vm);\n+            callHook(vm, 'beforeCreate');\n+            initInjections(vm); \u002F\u002F resolve injections before data\u002Fprops\n+            initState(vm);\n+            initProvide(vm); \u002F\u002F resolve provide after data\u002Fprops\n+            callHook(vm, 'created');\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (config.performance && mark) {\n+                vm._name = formatComponentName(vm, false);\n+                mark(endTag);\n+                measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n+            }\n+\n+            if (vm.$options.el) {\n+                vm.$mount(vm.$options.el);\n+            }\n+        };\n+    }\n+\n+    function initInternalComponent (vm, options) {\n+        var opts = vm.$options = Object.create(vm.constructor.options);\n+        \u002F\u002F doing this because it's faster than dynamic enumeration.\n+        var parentVnode = options._parentVnode;\n+        opts.parent = options.parent;\n+        opts._parentVnode = parentVnode;\n+\n+        var vnodeComponentOptions = parentVnode.componentOptions;\n+        opts.propsData = vnodeComponentOptions.propsData;\n+        opts._parentListeners = vnodeComponentOptions.listeners;\n+        opts._renderChildren = vnodeComponentOptions.children;\n+        opts._componentTag = vnodeComponentOptions.tag;\n+\n+        if (options.render) {\n+            opts.render = options.render;\n+            opts.staticRenderFns = options.staticRenderFns;\n+        }\n+    }\n+\n+    function resolveConstructorOptions (Ctor) {\n+        var options = Ctor.options;\n+        if (Ctor.super) {\n+            var superOptions = resolveConstructorOptions(Ctor.super);\n+            var cachedSuperOptions = Ctor.superOptions;\n+            if (superOptions !== cachedSuperOptions) {\n+                \u002F\u002F super option changed,\n+                \u002F\u002F need to resolve new options.\n+                Ctor.superOptions = superOptions;\n+                \u002F\u002F check if there are any late-modified\u002Fattached options (#4976)\n+                var modifiedOptions = resolveModifiedOptions(Ctor);\n+                \u002F\u002F update base extend options\n+                if (modifiedOptions) {\n+                    extend(Ctor.extendOptions, modifiedOptions);\n+                }\n+                options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n+                if (options.name) {\n+                    options.components[options.name] = Ctor;\n+                }\n+            }\n+        }\n+        return options\n+    }\n+\n+    function resolveModifiedOptions (Ctor) {\n+        var modified;\n+        var latest = Ctor.options;\n+        var sealed = Ctor.sealedOptions;\n+        for (var key in latest) {\n+            if (latest[key] !== sealed[key]) {\n+                if (!modified) { modified = {}; }\n+                modified[key] = latest[key];\n+            }\n+        }\n+        return modified\n+    }\n+\n+    function Vue (options) {\n+        if (!(this instanceof Vue)\n+        ) {\n+            warn('Vue is a constructor and should be called with the `new` keyword');\n+        }\n+        this._init(options);\n+    }\n+\n+    initMixin(Vue);\n+    stateMixin(Vue);\n+    eventsMixin(Vue);\n+    lifecycleMixin(Vue);\n+    renderMixin(Vue);\n+\n+  \u002F*  *\u002F\n+\n+    function initUse (Vue) {\n+        Vue.use = function (plugin) {\n+            var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n+            if (installedPlugins.indexOf(plugin) > -1) {\n+                return this\n+            }\n+\n+            \u002F\u002F additional parameters\n+            var args = toArray(arguments, 1);\n+            args.unshift(this);\n+            if (typeof plugin.install === 'function') {\n+                plugin.install.apply(plugin, args);\n+            } else if (typeof plugin === 'function') {\n+                plugin.apply(null, args);\n+            }\n+            installedPlugins.push(plugin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initMixin$1 (Vue) {\n+        Vue.mixin = function (mixin) {\n+            this.options = mergeOptions(this.options, mixin);\n+            return this\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initExtend (Vue) {\n+        \u002F**\n+         * Each instance constructor, including Vue, has a unique\n+         * cid. This enables us to create wrapped \"child\n+         * constructors\" for prototypal inheritance and cache them.\n+         *\u002F\n+        Vue.cid = 0;\n+        var cid = 1;\n+\n+        \u002F**\n+         * Class inheritance\n+         *\u002F\n+        Vue.extend = function (extendOptions) {\n+            extendOptions = extendOptions || {};\n+            var Super = this;\n+            var SuperId = Super.cid;\n+            var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n+            if (cachedCtors[SuperId]) {\n+                return cachedCtors[SuperId]\n+            }\n+\n+            var name = extendOptions.name || Super.options.name;\n+            if (name) {\n+                validateComponentName(name);\n+            }\n+\n+            var Sub = function VueComponent (options) {\n+                this._init(options);\n+            };\n+            Sub.prototype = Object.create(Super.prototype);\n+            Sub.prototype.constructor = Sub;\n+            Sub.cid = cid++;\n+            Sub.options = mergeOptions(\n+                Super.options,\n+                extendOptions\n+            );\n+            Sub['super'] = Super;\n+\n+            \u002F\u002F For props and computed properties, we define the proxy getters on\n+            \u002F\u002F the Vue instances at extension time, on the extended prototype. This\n+            \u002F\u002F avoids Object.defineProperty calls for each instance created.\n+            if (Sub.options.props) {\n+                initProps$1(Sub);\n+            }\n+            if (Sub.options.computed) {\n+                initComputed$1(Sub);\n+            }\n+\n+            \u002F\u002F allow further extension\u002Fmixin\u002Fplugin usage\n+            Sub.extend = Super.extend;\n+            Sub.mixin = Super.mixin;\n+            Sub.use = Super.use;\n+\n+            \u002F\u002F create asset registers, so extended classes\n+            \u002F\u002F can have their private assets too.\n+            ASSET_TYPES.forEach(function (type) {\n+                Sub[type] = Super[type];\n+            });\n+            \u002F\u002F enable recursive self-lookup\n+            if (name) {\n+                Sub.options.components[name] = Sub;\n+            }\n+\n+            \u002F\u002F keep a reference to the super options at extension time.\n+            \u002F\u002F later at instantiation we can check if Super's options have\n+            \u002F\u002F been updated.\n+            Sub.superOptions = Super.options;\n+            Sub.extendOptions = extendOptions;\n+            Sub.sealedOptions = extend({}, Sub.options);\n+\n+            \u002F\u002F cache constructor\n+            cachedCtors[SuperId] = Sub;\n+            return Sub\n+        };\n+    }\n+\n+    function initProps$1 (Comp) {\n+        var props = Comp.options.props;\n+        for (var key in props) {\n+            proxy(Comp.prototype, \"_props\", key);\n+        }\n+    }\n+\n+    function initComputed$1 (Comp) {\n+        var computed = Comp.options.computed;\n+        for (var key in computed) {\n+            defineComputed(Comp.prototype, key, computed[key]);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function initAssetRegisters (Vue) {\n+        \u002F**\n+         * Create asset registration methods.\n+         *\u002F\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue[type] = function (\n+                id,\n+                definition\n+            ) {\n+                if (!definition) {\n+                    return this.options[type + 's'][id]\n+                } else {\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (type === 'component') {\n+                        validateComponentName(id);\n+                    }\n+                    if (type === 'component' && isPlainObject(definition)) {\n+                        definition.name = definition.name || id;\n+                        definition = this.options._base.extend(definition);\n+                    }\n+                    if (type === 'directive' && typeof definition === 'function') {\n+                        definition = { bind: definition, update: definition };\n+                    }\n+                    this.options[type + 's'][id] = definition;\n+                    return definition\n+                }\n+            };\n+        });\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function getComponentName (opts) {\n+        return opts && (opts.Ctor.options.name || opts.tag)\n+    }\n+\n+    function matches (pattern, name) {\n+        if (Array.isArray(pattern)) {\n+            return pattern.indexOf(name) > -1\n+        } else if (typeof pattern === 'string') {\n+            return pattern.split(',').indexOf(name) > -1\n+        } else if (isRegExp(pattern)) {\n+            return pattern.test(name)\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return false\n+    }\n+\n+    function pruneCache (keepAliveInstance, filter) {\n+        var cache = keepAliveInstance.cache;\n+        var keys = keepAliveInstance.keys;\n+        var _vnode = keepAliveInstance._vnode;\n+        for (var key in cache) {\n+            var cachedNode = cache[key];\n+            if (cachedNode) {\n+                var name = getComponentName(cachedNode.componentOptions);\n+                if (name && !filter(name)) {\n+                    pruneCacheEntry(cache, key, keys, _vnode);\n+                }\n+            }\n+        }\n+    }\n+\n+    function pruneCacheEntry (\n+        cache,\n+        key,\n+        keys,\n+        current\n+    ) {\n+        var cached$$1 = cache[key];\n+        if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n+            cached$$1.componentInstance.$destroy();\n+        }\n+        cache[key] = null;\n+        remove(keys, key);\n+    }\n+\n+    var patternTypes = [String, RegExp, Array];\n+\n+    var KeepAlive = {\n+        name: 'keep-alive',\n+        abstract: true,\n+\n+        props: {\n+            include: patternTypes,\n+            exclude: patternTypes,\n+            max: [String, Number]\n+        },\n+\n+        created: function created () {\n+            this.cache = Object.create(null);\n+            this.keys = [];\n+        },\n+\n+        destroyed: function destroyed () {\n+            for (var key in this.cache) {\n+                pruneCacheEntry(this.cache, key, this.keys);\n+            }\n+        },\n+\n+        mounted: function mounted () {\n+            var this$1 = this;\n+\n+            this.$watch('include', function (val) {\n+                pruneCache(this$1, function (name) { return matches(val, name); });\n+            });\n+            this.$watch('exclude', function (val) {\n+                pruneCache(this$1, function (name) { return !matches(val, name); });\n+            });\n+        },\n+\n+        render: function render () {\n+            var slot = this.$slots.default;\n+            var vnode = getFirstComponentChild(slot);\n+            var componentOptions = vnode && vnode.componentOptions;\n+            if (componentOptions) {\n+                \u002F\u002F check pattern\n+                var name = getComponentName(componentOptions);\n+                var ref = this;\n+                var include = ref.include;\n+                var exclude = ref.exclude;\n+                if (\n+                    \u002F\u002F not included\n+                (include && (!name || !matches(include, name))) ||\n+                \u002F\u002F excluded\n+                (exclude && name && matches(exclude, name))\n+                ) {\n+                    return vnode\n+                }\n+\n+                var ref$1 = this;\n+                var cache = ref$1.cache;\n+                var keys = ref$1.keys;\n+                var key = vnode.key == null\n+                    \u002F\u002F same constructor may get registered as different local components\n+                    \u002F\u002F so cid alone is not enough (#3269)\n+                    ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n+                    : vnode.key;\n+                if (cache[key]) {\n+                    vnode.componentInstance = cache[key].componentInstance;\n+                    \u002F\u002F make current key freshest\n+                    remove(keys, key);\n+                    keys.push(key);\n+                } else {\n+                    cache[key] = vnode;\n+                    keys.push(key);\n+                    \u002F\u002F prune oldest entry\n+                    if (this.max && keys.length > parseInt(this.max)) {\n+                        pruneCacheEntry(cache, keys[0], keys, this._vnode);\n+                    }\n+                }\n+\n+                vnode.data.keepAlive = true;\n+            }\n+            return vnode || (slot && slot[0])\n+        }\n+    };\n+\n+    var builtInComponents = {\n+        KeepAlive: KeepAlive\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function initGlobalAPI (Vue) {\n+        \u002F\u002F config\n+        var configDef = {};\n+        configDef.get = function () { return config; };\n+        {\n+            configDef.set = function () {\n+                warn(\n+                    'Do not replace the Vue.config object, set individual fields instead.'\n+                );\n+            };\n+        }\n+        Object.defineProperty(Vue, 'config', configDef);\n+\n+        \u002F\u002F exposed util methods.\n+        \u002F\u002F NOTE: these are not considered part of the public API - avoid relying on\n+        \u002F\u002F them unless you are aware of the risk.\n+        Vue.util = {\n+            warn: warn,\n+            extend: extend,\n+            mergeOptions: mergeOptions,\n+            defineReactive: defineReactive$$1\n+        };\n+\n+        Vue.set = set;\n+        Vue.delete = del;\n+        Vue.nextTick = nextTick;\n+\n+        \u002F\u002F 2.6 explicit observable API\n+        Vue.observable = function (obj) {\n+            observe(obj);\n+            return obj\n+        };\n+\n+        Vue.options = Object.create(null);\n+        ASSET_TYPES.forEach(function (type) {\n+            Vue.options[type + 's'] = Object.create(null);\n+        });\n+\n+        \u002F\u002F this is used to identify the \"base\" constructor to extend all plain-object\n+        \u002F\u002F components with in Weex's multi-instance scenarios.\n+        Vue.options._base = Vue;\n+\n+        extend(Vue.options.components, builtInComponents);\n+\n+        initUse(Vue);\n+        initMixin$1(Vue);\n+        initExtend(Vue);\n+        initAssetRegisters(Vue);\n+    }\n+\n+    initGlobalAPI(Vue);\n+\n+    Object.defineProperty(Vue.prototype, '$isServer', {\n+        get: isServerRendering\n+    });\n+\n+    Object.defineProperty(Vue.prototype, '$ssrContext', {\n+        get: function get () {\n+          \u002F* istanbul ignore next *\u002F\n+            return this.$vnode && this.$vnode.ssrContext\n+        }\n+    });\n+\n+    \u002F\u002F expose FunctionalRenderContext for ssr runtime helper installation\n+    Object.defineProperty(Vue, 'FunctionalRenderContext', {\n+        value: FunctionalRenderContext\n+    });\n+\n+    Vue.version = '2.6.10';\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F these are reserved for web because they are directly compiled away\n+    \u002F\u002F during template compilation\n+    var isReservedAttr = makeMap('style,class');\n+\n+    \u002F\u002F attributes that should be using props for binding\n+    var acceptValue = makeMap('input,textarea,option,select,progress');\n+    var mustUseProp = function (tag, type, attr) {\n+        return (\n+            (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n+            (attr === 'selected' && tag === 'option') ||\n+            (attr === 'checked' && tag === 'input') ||\n+            (attr === 'muted' && tag === 'video')\n+        )\n+    };\n+\n+    var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n+\n+    var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n+\n+    var convertEnumeratedValue = function (key, value) {\n+        return isFalsyAttrValue(value) || value === 'false'\n+            ? 'false'\n+            \u002F\u002F allow arbitrary string value for contenteditable\n+            : key === 'contenteditable' && isValidContentEditableValue(value)\n+                ? value\n+                : 'true'\n+    };\n+\n+    var isBooleanAttr = makeMap(\n+        'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n+        'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n+        'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n+        'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n+        'required,reversed,scoped,seamless,selected,sortable,translate,' +\n+        'truespeed,typemustmatch,visible'\n+    );\n+\n+    var xlinkNS = 'http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink';\n+\n+    var isXlink = function (name) {\n+        return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n+    };\n+\n+    var getXlinkProp = function (name) {\n+        return isXlink(name) ? name.slice(6, name.length) : ''\n+    };\n+\n+    var isFalsyAttrValue = function (val) {\n+        return val == null || val === false\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function genClassForVnode (vnode) {\n+        var data = vnode.data;\n+        var parentNode = vnode;\n+        var childNode = vnode;\n+        while (isDef(childNode.componentInstance)) {\n+            childNode = childNode.componentInstance._vnode;\n+            if (childNode && childNode.data) {\n+                data = mergeClassData(childNode.data, data);\n+            }\n+        }\n+        while (isDef(parentNode = parentNode.parent)) {\n+            if (parentNode && parentNode.data) {\n+                data = mergeClassData(data, parentNode.data);\n+            }\n+        }\n+        return renderClass(data.staticClass, data.class)\n+    }\n+\n+    function mergeClassData (child, parent) {\n+        return {\n+            staticClass: concat(child.staticClass, parent.staticClass),\n+            class: isDef(child.class)\n+                ? [child.class, parent.class]\n+                : parent.class\n+        }\n+    }\n+\n+    function renderClass (\n+        staticClass,\n+        dynamicClass\n+    ) {\n+        if (isDef(staticClass) || isDef(dynamicClass)) {\n+            return concat(staticClass, stringifyClass(dynamicClass))\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function concat (a, b) {\n+        return a ? b ? (a + ' ' + b) : a : (b || '')\n+    }\n+\n+    function stringifyClass (value) {\n+        if (Array.isArray(value)) {\n+            return stringifyArray(value)\n+        }\n+        if (isObject(value)) {\n+            return stringifyObject(value)\n+        }\n+        if (typeof value === 'string') {\n+            return value\n+        }\n+      \u002F* istanbul ignore next *\u002F\n+        return ''\n+    }\n+\n+    function stringifyArray (value) {\n+        var res = '';\n+        var stringified;\n+        for (var i = 0, l = value.length; i \u003C l; i++) {\n+            if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n+                if (res) { res += ' '; }\n+                res += stringified;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function stringifyObject (value) {\n+        var res = '';\n+        for (var key in value) {\n+            if (value[key]) {\n+                if (res) { res += ' '; }\n+                res += key;\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var namespaceMap = {\n+        svg: 'http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg',\n+        math: 'http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML'\n+    };\n+\n+    var isHTMLTag = makeMap(\n+        'html,body,base,head,link,meta,style,title,' +\n+        'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n+        'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n+        'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n+        's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n+        'embed,object,param,source,canvas,script,noscript,del,ins,' +\n+        'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n+        'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n+        'output,progress,select,textarea,' +\n+        'details,dialog,menu,menuitem,summary,' +\n+        'content,element,shadow,template,blockquote,iframe,tfoot'\n+    );\n+\n+    \u002F\u002F this map is intentionally selective, only covering SVG elements that may\n+    \u002F\u002F contain child elements.\n+    var isSVG = makeMap(\n+        'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n+        'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n+        'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n+        true\n+    );\n+\n+    var isPreTag = function (tag) { return tag === 'pre'; };\n+\n+    var isReservedTag = function (tag) {\n+        return isHTMLTag(tag) || isSVG(tag)\n+    };\n+\n+    function getTagNamespace (tag) {\n+        if (isSVG(tag)) {\n+            return 'svg'\n+        }\n+        \u002F\u002F basic support for MathML\n+        \u002F\u002F note it doesn't support other MathML elements being component roots\n+        if (tag === 'math') {\n+            return 'math'\n+        }\n+    }\n+\n+    var unknownElementCache = Object.create(null);\n+    function isUnknownElement (tag) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!inBrowser) {\n+            return true\n+        }\n+        if (isReservedTag(tag)) {\n+            return false\n+        }\n+        tag = tag.toLowerCase();\n+      \u002F* istanbul ignore if *\u002F\n+        if (unknownElementCache[tag] != null) {\n+            return unknownElementCache[tag]\n+        }\n+        var el = document.createElement(tag);\n+        if (tag.indexOf('-') > -1) {\n+            \u002F\u002F http:\u002F\u002Fstackoverflow.com\u002Fa\u002F28210364\u002F1070244\n+            return (unknownElementCache[tag] = (\n+                el.constructor === window.HTMLUnknownElement ||\n+                el.constructor === window.HTMLElement\n+            ))\n+        } else {\n+            return (unknownElementCache[tag] = \u002FHTMLUnknownElement\u002F.test(el.toString()))\n+        }\n+    }\n+\n+    var isTextInputType = makeMap('text,number,password,search,email,tel,url');\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Query an element selector if it's not an element already.\n+     *\u002F\n+    function query (el) {\n+        if (typeof el === 'string') {\n+            var selected = document.querySelector(el);\n+            if (!selected) {\n+                warn(\n+                    'Cannot find element: ' + el\n+                );\n+                return document.createElement('div')\n+            }\n+            return selected\n+        } else {\n+            return el\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createElement$1 (tagName, vnode) {\n+        var elm = document.createElement(tagName);\n+        if (tagName !== 'select') {\n+            return elm\n+        }\n+        \u002F\u002F false or null will remove the attribute but undefined will not\n+        if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n+            elm.setAttribute('multiple', 'multiple');\n+        }\n+        return elm\n+    }\n+\n+    function createElementNS (namespace, tagName) {\n+        return document.createElementNS(namespaceMap[namespace], tagName)\n+    }\n+\n+    function createTextNode (text) {\n+        return document.createTextNode(text)\n+    }\n+\n+    function createComment (text) {\n+        return document.createComment(text)\n+    }\n+\n+    function insertBefore (parentNode, newNode, referenceNode) {\n+        parentNode.insertBefore(newNode, referenceNode);\n+    }\n+\n+    function removeChild (node, child) {\n+        node.removeChild(child);\n+    }\n+\n+    function appendChild (node, child) {\n+        node.appendChild(child);\n+    }\n+\n+    function parentNode (node) {\n+        return node.parentNode\n+    }\n+\n+    function nextSibling (node) {\n+        return node.nextSibling\n+    }\n+\n+    function tagName (node) {\n+        return node.tagName\n+    }\n+\n+    function setTextContent (node, text) {\n+        node.textContent = text;\n+    }\n+\n+    function setStyleScope (node, scopeId) {\n+        node.setAttribute(scopeId, '');\n+    }\n+\n+    var nodeOps = \u002F*#__PURE__*\u002FObject.freeze({\n+        createElement: createElement$1,\n+        createElementNS: createElementNS,\n+        createTextNode: createTextNode,\n+        createComment: createComment,\n+        insertBefore: insertBefore,\n+        removeChild: removeChild,\n+        appendChild: appendChild,\n+        parentNode: parentNode,\n+        nextSibling: nextSibling,\n+        tagName: tagName,\n+        setTextContent: setTextContent,\n+        setStyleScope: setStyleScope\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref = {\n+        create: function create (_, vnode) {\n+            registerRef(vnode);\n+        },\n+        update: function update (oldVnode, vnode) {\n+            if (oldVnode.data.ref !== vnode.data.ref) {\n+                registerRef(oldVnode, true);\n+                registerRef(vnode);\n+            }\n+        },\n+        destroy: function destroy (vnode) {\n+            registerRef(vnode, true);\n+        }\n+    };\n+\n+    function registerRef (vnode, isRemoval) {\n+        var key = vnode.data.ref;\n+        if (!isDef(key)) { return }\n+\n+        var vm = vnode.context;\n+        var ref = vnode.componentInstance || vnode.elm;\n+        var refs = vm.$refs;\n+        if (isRemoval) {\n+            if (Array.isArray(refs[key])) {\n+                remove(refs[key], ref);\n+            } else if (refs[key] === ref) {\n+                refs[key] = undefined;\n+            }\n+        } else {\n+            if (vnode.data.refInFor) {\n+                if (!Array.isArray(refs[key])) {\n+                    refs[key] = [ref];\n+                } else if (refs[key].indexOf(ref) \u003C 0) {\n+                    \u002F\u002F $flow-disable-line\n+                    refs[key].push(ref);\n+                }\n+            } else {\n+                refs[key] = ref;\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Virtual DOM patching algorithm based on Snabbdom by\n+     * Simon Friis Vindum (@paldepind)\n+     * Licensed under the MIT License\n+     * https:\u002F\u002Fgithub.com\u002Fpaldepind\u002Fsnabbdom\u002Fblob\u002Fmaster\u002FLICENSE\n+     *\n+     * modified by Evan You (@yyx990803)\n+     *\n+     * Not type-checking this because this file is perf-critical and the cost\n+     * of making flow understand it is not worth it.\n+     *\u002F\n+\n+    var emptyNode = new VNode('', {}, []);\n+\n+    var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n+\n+    function sameVnode (a, b) {\n+        return (\n+            a.key === b.key && (\n+                (\n+                    a.tag === b.tag &&\n+                    a.isComment === b.isComment &&\n+                    isDef(a.data) === isDef(b.data) &&\n+                    sameInputType(a, b)\n+                ) || (\n+                    isTrue(a.isAsyncPlaceholder) &&\n+                    a.asyncFactory === b.asyncFactory &&\n+                    isUndef(b.asyncFactory.error)\n+                )\n+            )\n+        )\n+    }\n+\n+    function sameInputType (a, b) {\n+        if (a.tag !== 'input') { return true }\n+        var i;\n+        var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n+        var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n+        return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n+    }\n+\n+    function createKeyToOldIdx (children, beginIdx, endIdx) {\n+        var i, key;\n+        var map = {};\n+        for (i = beginIdx; i \u003C= endIdx; ++i) {\n+            key = children[i].key;\n+            if (isDef(key)) { map[key] = i; }\n+        }\n+        return map\n+    }\n+\n+    function createPatchFunction (backend) {\n+        var i, j;\n+        var cbs = {};\n+\n+        var modules = backend.modules;\n+        var nodeOps = backend.nodeOps;\n+\n+        for (i = 0; i \u003C hooks.length; ++i) {\n+            cbs[hooks[i]] = [];\n+            for (j = 0; j \u003C modules.length; ++j) {\n+                if (isDef(modules[j][hooks[i]])) {\n+                    cbs[hooks[i]].push(modules[j][hooks[i]]);\n+                }\n+            }\n+        }\n+\n+        function emptyNodeAt (elm) {\n+            return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n+        }\n+\n+        function createRmCb (childElm, listeners) {\n+            function remove$$1 () {\n+                if (--remove$$1.listeners === 0) {\n+                    removeNode(childElm);\n+                }\n+            }\n+            remove$$1.listeners = listeners;\n+            return remove$$1\n+        }\n+\n+        function removeNode (el) {\n+            var parent = nodeOps.parentNode(el);\n+            \u002F\u002F element may have already been removed due to v-html \u002F v-text\n+            if (isDef(parent)) {\n+                nodeOps.removeChild(parent, el);\n+            }\n+        }\n+\n+        function isUnknownElement$$1 (vnode, inVPre) {\n+            return (\n+                !inVPre &&\n+                !vnode.ns &&\n+                !(\n+                    config.ignoredElements.length &&\n+                    config.ignoredElements.some(function (ignore) {\n+                        return isRegExp(ignore)\n+                            ? ignore.test(vnode.tag)\n+                            : ignore === vnode.tag\n+                    })\n+                ) &&\n+                config.isUnknownElement(vnode.tag)\n+            )\n+        }\n+\n+        var creatingElmInVPre = 0;\n+\n+        function createElm (\n+            vnode,\n+            insertedVnodeQueue,\n+            parentElm,\n+            refElm,\n+            nested,\n+            ownerArray,\n+            index\n+        ) {\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F This vnode was used in a previous render!\n+                \u002F\u002F now it's used as a new node, overwriting its elm would cause\n+                \u002F\u002F potential patch errors down the road when it's used as an insertion\n+                \u002F\u002F reference node. Instead, we clone the node on-demand before creating\n+                \u002F\u002F associated DOM element for it.\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            vnode.isRootInsert = !nested; \u002F\u002F for transition enter check\n+            if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n+                return\n+            }\n+\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            var tag = vnode.tag;\n+            if (isDef(tag)) {\n+                {\n+                    if (data && data.pre) {\n+                        creatingElmInVPre++;\n+                    }\n+                    if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n+                        warn(\n+                            'Unknown custom element: \u003C' + tag + '> - did you ' +\n+                            'register the component correctly? For recursive components, ' +\n+                            'make sure to provide the \"name\" option.',\n+                            vnode.context\n+                        );\n+                    }\n+                }\n+\n+                vnode.elm = vnode.ns\n+                    ? nodeOps.createElementNS(vnode.ns, tag)\n+                    : nodeOps.createElement(tag, vnode);\n+                setScope(vnode);\n+\n+              \u002F* istanbul ignore if *\u002F\n+                {\n+                    createChildren(vnode, children, insertedVnodeQueue);\n+                    if (isDef(data)) {\n+                        invokeCreateHooks(vnode, insertedVnodeQueue);\n+                    }\n+                    insert(parentElm, vnode.elm, refElm);\n+                }\n+\n+                if (data && data.pre) {\n+                    creatingElmInVPre--;\n+                }\n+            } else if (isTrue(vnode.isComment)) {\n+                vnode.elm = nodeOps.createComment(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            } else {\n+                vnode.elm = nodeOps.createTextNode(vnode.text);\n+                insert(parentElm, vnode.elm, refElm);\n+            }\n+        }\n+\n+        function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i = vnode.data;\n+            if (isDef(i)) {\n+                var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n+                if (isDef(i = i.hook) && isDef(i = i.init)) {\n+                    i(vnode, false \u002F* hydrating *\u002F);\n+                }\n+                \u002F\u002F after calling the init hook, if the vnode is a child component\n+                \u002F\u002F it should've created a child instance and mounted it. the child\n+                \u002F\u002F component also has set the placeholder vnode's elm.\n+                \u002F\u002F in that case we can just return the element and be done.\n+                if (isDef(vnode.componentInstance)) {\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    insert(parentElm, vnode.elm, refElm);\n+                    if (isTrue(isReactivated)) {\n+                        reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n+                    }\n+                    return true\n+                }\n+            }\n+        }\n+\n+        function initComponent (vnode, insertedVnodeQueue) {\n+            if (isDef(vnode.data.pendingInsert)) {\n+                insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n+                vnode.data.pendingInsert = null;\n+            }\n+            vnode.elm = vnode.componentInstance.$el;\n+            if (isPatchable(vnode)) {\n+                invokeCreateHooks(vnode, insertedVnodeQueue);\n+                setScope(vnode);\n+            } else {\n+                \u002F\u002F empty component root.\n+                \u002F\u002F skip all element-related modules except for ref (#3455)\n+                registerRef(vnode);\n+                \u002F\u002F make sure to invoke the insert hook\n+                insertedVnodeQueue.push(vnode);\n+            }\n+        }\n+\n+        function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n+            var i;\n+            \u002F\u002F hack for #4339: a reactivated component with inner transition\n+            \u002F\u002F does not trigger because the inner node's created hooks are not called\n+            \u002F\u002F again. It's not ideal to involve module-specific logic in here but\n+            \u002F\u002F there doesn't seem to be a better way to do it.\n+            var innerNode = vnode;\n+            while (innerNode.componentInstance) {\n+                innerNode = innerNode.componentInstance._vnode;\n+                if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n+                    for (i = 0; i \u003C cbs.activate.length; ++i) {\n+                        cbs.activate[i](emptyNode, innerNode);\n+                    }\n+                    insertedVnodeQueue.push(innerNode);\n+                    break\n+                }\n+            }\n+            \u002F\u002F unlike a newly created component,\n+            \u002F\u002F a reactivated keep-alive component doesn't insert itself\n+            insert(parentElm, vnode.elm, refElm);\n+        }\n+\n+        function insert (parent, elm, ref$$1) {\n+            if (isDef(parent)) {\n+                if (isDef(ref$$1)) {\n+                    if (nodeOps.parentNode(ref$$1) === parent) {\n+                        nodeOps.insertBefore(parent, elm, ref$$1);\n+                    }\n+                } else {\n+                    nodeOps.appendChild(parent, elm);\n+                }\n+            }\n+        }\n+\n+        function createChildren (vnode, children, insertedVnodeQueue) {\n+            if (Array.isArray(children)) {\n+                {\n+                    checkDuplicateKeys(children);\n+                }\n+                for (var i = 0; i \u003C children.length; ++i) {\n+                    createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n+                }\n+            } else if (isPrimitive(vnode.text)) {\n+                nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n+            }\n+        }\n+\n+        function isPatchable (vnode) {\n+            while (vnode.componentInstance) {\n+                vnode = vnode.componentInstance._vnode;\n+            }\n+            return isDef(vnode.tag)\n+        }\n+\n+        function invokeCreateHooks (vnode, insertedVnodeQueue) {\n+            for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                cbs.create[i$1](emptyNode, vnode);\n+            }\n+            i = vnode.data.hook; \u002F\u002F Reuse variable\n+            if (isDef(i)) {\n+                if (isDef(i.create)) { i.create(emptyNode, vnode); }\n+                if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n+            }\n+        }\n+\n+        \u002F\u002F set scope id attribute for scoped CSS.\n+        \u002F\u002F this is implemented as a special case to avoid the overhead\n+        \u002F\u002F of going through the normal attribute patching process.\n+        function setScope (vnode) {\n+            var i;\n+            if (isDef(i = vnode.fnScopeId)) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            } else {\n+                var ancestor = vnode;\n+                while (ancestor) {\n+                    if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n+                        nodeOps.setStyleScope(vnode.elm, i);\n+                    }\n+                    ancestor = ancestor.parent;\n+                }\n+            }\n+            \u002F\u002F for slot content they should also get the scopeId from the host instance.\n+            if (isDef(i = activeInstance) &&\n+                i !== vnode.context &&\n+                i !== vnode.fnContext &&\n+                isDef(i = i.$options._scopeId)\n+            ) {\n+                nodeOps.setStyleScope(vnode.elm, i);\n+            }\n+        }\n+\n+        function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n+            }\n+        }\n+\n+        function invokeDestroyHook (vnode) {\n+            var i, j;\n+            var data = vnode.data;\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n+                for (i = 0; i \u003C cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n+            }\n+            if (isDef(i = vnode.children)) {\n+                for (j = 0; j \u003C vnode.children.length; ++j) {\n+                    invokeDestroyHook(vnode.children[j]);\n+                }\n+            }\n+        }\n+\n+        function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n+            for (; startIdx \u003C= endIdx; ++startIdx) {\n+                var ch = vnodes[startIdx];\n+                if (isDef(ch)) {\n+                    if (isDef(ch.tag)) {\n+                        removeAndInvokeRemoveHook(ch);\n+                        invokeDestroyHook(ch);\n+                    } else { \u002F\u002F Text node\n+                        removeNode(ch.elm);\n+                    }\n+                }\n+            }\n+        }\n+\n+        function removeAndInvokeRemoveHook (vnode, rm) {\n+            if (isDef(rm) || isDef(vnode.data)) {\n+                var i;\n+                var listeners = cbs.remove.length + 1;\n+                if (isDef(rm)) {\n+                    \u002F\u002F we have a recursively passed down rm callback\n+                    \u002F\u002F increase the listeners count\n+                    rm.listeners += listeners;\n+                } else {\n+                    \u002F\u002F directly removing\n+                    rm = createRmCb(vnode.elm, listeners);\n+                }\n+                \u002F\u002F recursively invoke hooks on child component root node\n+                if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n+                    removeAndInvokeRemoveHook(i, rm);\n+                }\n+                for (i = 0; i \u003C cbs.remove.length; ++i) {\n+                    cbs.remove[i](vnode, rm);\n+                }\n+                if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n+                    i(vnode, rm);\n+                } else {\n+                    rm();\n+                }\n+            } else {\n+                removeNode(vnode.elm);\n+            }\n+        }\n+\n+        function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n+            var oldStartIdx = 0;\n+            var newStartIdx = 0;\n+            var oldEndIdx = oldCh.length - 1;\n+            var oldStartVnode = oldCh[0];\n+            var oldEndVnode = oldCh[oldEndIdx];\n+            var newEndIdx = newCh.length - 1;\n+            var newStartVnode = newCh[0];\n+            var newEndVnode = newCh[newEndIdx];\n+            var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n+\n+            \u002F\u002F removeOnly is a special flag used only by \u003Ctransition-group>\n+            \u002F\u002F to ensure removed elements stay in correct relative positions\n+            \u002F\u002F during leaving transitions\n+            var canMove = !removeOnly;\n+\n+            {\n+                checkDuplicateKeys(newCh);\n+            }\n+\n+            while (oldStartIdx \u003C= oldEndIdx && newStartIdx \u003C= newEndIdx) {\n+                if (isUndef(oldStartVnode)) {\n+                    oldStartVnode = oldCh[++oldStartIdx]; \u002F\u002F Vnode has been moved left\n+                } else if (isUndef(oldEndVnode)) {\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                } else if (sameVnode(oldStartVnode, newStartVnode)) {\n+                    patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else if (sameVnode(oldEndVnode, newEndVnode)) {\n+                    patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldStartVnode, newEndVnode)) { \u002F\u002F Vnode moved right\n+                    patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n+                    oldStartVnode = oldCh[++oldStartIdx];\n+                    newEndVnode = newCh[--newEndIdx];\n+                } else if (sameVnode(oldEndVnode, newStartVnode)) { \u002F\u002F Vnode moved left\n+                    patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                    canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n+                    oldEndVnode = oldCh[--oldEndIdx];\n+                    newStartVnode = newCh[++newStartIdx];\n+                } else {\n+                    if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n+                    idxInOld = isDef(newStartVnode.key)\n+                        ? oldKeyToIdx[newStartVnode.key]\n+                        : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n+                    if (isUndef(idxInOld)) { \u002F\u002F New element\n+                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                    } else {\n+                        vnodeToMove = oldCh[idxInOld];\n+                        if (sameVnode(vnodeToMove, newStartVnode)) {\n+                            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n+                            oldCh[idxInOld] = undefined;\n+                            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n+                        } else {\n+                            \u002F\u002F same key but different element. treat as new element\n+                            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n+                        }\n+                    }\n+                    newStartVnode = newCh[++newStartIdx];\n+                }\n+            }\n+            if (oldStartIdx > oldEndIdx) {\n+                refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n+                addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n+            } else if (newStartIdx > newEndIdx) {\n+                removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n+            }\n+        }\n+\n+        function checkDuplicateKeys (children) {\n+            var seenKeys = {};\n+            for (var i = 0; i \u003C children.length; i++) {\n+                var vnode = children[i];\n+                var key = vnode.key;\n+                if (isDef(key)) {\n+                    if (seenKeys[key]) {\n+                        warn(\n+                            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n+                            vnode.context\n+                        );\n+                    } else {\n+                        seenKeys[key] = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        function findIdxInOld (node, oldCh, start, end) {\n+            for (var i = start; i \u003C end; i++) {\n+                var c = oldCh[i];\n+                if (isDef(c) && sameVnode(node, c)) { return i }\n+            }\n+        }\n+\n+        function patchVnode (\n+            oldVnode,\n+            vnode,\n+            insertedVnodeQueue,\n+            ownerArray,\n+            index,\n+            removeOnly\n+        ) {\n+            if (oldVnode === vnode) {\n+                return\n+            }\n+\n+            if (isDef(vnode.elm) && isDef(ownerArray)) {\n+                \u002F\u002F clone reused vnode\n+                vnode = ownerArray[index] = cloneVNode(vnode);\n+            }\n+\n+            var elm = vnode.elm = oldVnode.elm;\n+\n+            if (isTrue(oldVnode.isAsyncPlaceholder)) {\n+                if (isDef(vnode.asyncFactory.resolved)) {\n+                    hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n+                } else {\n+                    vnode.isAsyncPlaceholder = true;\n+                }\n+                return\n+            }\n+\n+            \u002F\u002F reuse element for static trees.\n+            \u002F\u002F note we only do this if the vnode is cloned -\n+            \u002F\u002F if the new node is not cloned it means the render functions have been\n+            \u002F\u002F reset by the hot-reload-api and we need to do a proper re-render.\n+            if (isTrue(vnode.isStatic) &&\n+                isTrue(oldVnode.isStatic) &&\n+                vnode.key === oldVnode.key &&\n+                (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n+            ) {\n+                vnode.componentInstance = oldVnode.componentInstance;\n+                return\n+            }\n+\n+            var i;\n+            var data = vnode.data;\n+            if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n+                i(oldVnode, vnode);\n+            }\n+\n+            var oldCh = oldVnode.children;\n+            var ch = vnode.children;\n+            if (isDef(data) && isPatchable(vnode)) {\n+                for (i = 0; i \u003C cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n+                if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n+            }\n+            if (isUndef(vnode.text)) {\n+                if (isDef(oldCh) && isDef(ch)) {\n+                    if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n+                } else if (isDef(ch)) {\n+                    {\n+                        checkDuplicateKeys(ch);\n+                    }\n+                    if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n+                    addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n+                } else if (isDef(oldCh)) {\n+                    removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n+                } else if (isDef(oldVnode.text)) {\n+                    nodeOps.setTextContent(elm, '');\n+                }\n+            } else if (oldVnode.text !== vnode.text) {\n+                nodeOps.setTextContent(elm, vnode.text);\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n+            }\n+        }\n+\n+        function invokeInsertHook (vnode, queue, initial) {\n+            \u002F\u002F delay insert hooks for component root nodes, invoke them after the\n+            \u002F\u002F element is really inserted\n+            if (isTrue(initial) && isDef(vnode.parent)) {\n+                vnode.parent.data.pendingInsert = queue;\n+            } else {\n+                for (var i = 0; i \u003C queue.length; ++i) {\n+                    queue[i].data.hook.insert(queue[i]);\n+                }\n+            }\n+        }\n+\n+        var hydrationBailed = false;\n+        \u002F\u002F list of modules that can skip create hook during hydration because they\n+        \u002F\u002F are already rendered on the client or has no need for initialization\n+        \u002F\u002F Note: style is excluded because it relies on initial clone for future\n+        \u002F\u002F deep updates (#7063).\n+        var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n+\n+        \u002F\u002F Note: this is a browser-only function so we can assume elms are DOM nodes.\n+        function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n+            var i;\n+            var tag = vnode.tag;\n+            var data = vnode.data;\n+            var children = vnode.children;\n+            inVPre = inVPre || (data && data.pre);\n+            vnode.elm = elm;\n+\n+            if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n+                vnode.isAsyncPlaceholder = true;\n+                return true\n+            }\n+            \u002F\u002F assert node match\n+            {\n+                if (!assertNodeMatch(elm, vnode, inVPre)) {\n+                    return false\n+                }\n+            }\n+            if (isDef(data)) {\n+                if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true \u002F* hydrating *\u002F); }\n+                if (isDef(i = vnode.componentInstance)) {\n+                    \u002F\u002F child component. it should have hydrated its own tree.\n+                    initComponent(vnode, insertedVnodeQueue);\n+                    return true\n+                }\n+            }\n+            if (isDef(tag)) {\n+                if (isDef(children)) {\n+                    \u002F\u002F empty element, allow client to pick up and populate children\n+                    if (!elm.hasChildNodes()) {\n+                        createChildren(vnode, children, insertedVnodeQueue);\n+                    } else {\n+                        \u002F\u002F v-html and domProps: innerHTML\n+                        if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n+                            if (i !== elm.innerHTML) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('server innerHTML: ', i);\n+                                    console.warn('client innerHTML: ', elm.innerHTML);\n+                                }\n+                                return false\n+                            }\n+                        } else {\n+                            \u002F\u002F iterate and compare children lists\n+                            var childrenMatch = true;\n+                            var childNode = elm.firstChild;\n+                            for (var i$1 = 0; i$1 \u003C children.length; i$1++) {\n+                                if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n+                                    childrenMatch = false;\n+                                    break\n+                                }\n+                                childNode = childNode.nextSibling;\n+                            }\n+                            \u002F\u002F if childNode is not null, it means the actual childNodes list is\n+                            \u002F\u002F longer than the virtual children list.\n+                            if (!childrenMatch || childNode) {\n+                              \u002F* istanbul ignore if *\u002F\n+                                if (typeof console !== 'undefined' &&\n+                                    !hydrationBailed\n+                                ) {\n+                                    hydrationBailed = true;\n+                                    console.warn('Parent: ', elm);\n+                                    console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n+                                }\n+                                return false\n+                            }\n+                        }\n+                    }\n+                }\n+                if (isDef(data)) {\n+                    var fullInvoke = false;\n+                    for (var key in data) {\n+                        if (!isRenderedModule(key)) {\n+                            fullInvoke = true;\n+                            invokeCreateHooks(vnode, insertedVnodeQueue);\n+                            break\n+                        }\n+                    }\n+                    if (!fullInvoke && data['class']) {\n+                        \u002F\u002F ensure collecting deps for deep class bindings for future updates\n+                        traverse(data['class']);\n+                    }\n+                }\n+            } else if (elm.data !== vnode.text) {\n+                elm.data = vnode.text;\n+            }\n+            return true\n+        }\n+\n+        function assertNodeMatch (node, vnode, inVPre) {\n+            if (isDef(vnode.tag)) {\n+                return vnode.tag.indexOf('vue-component') === 0 || (\n+                        !isUnknownElement$$1(vnode, inVPre) &&\n+                        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n+                    )\n+            } else {\n+                return node.nodeType === (vnode.isComment ? 8 : 3)\n+            }\n+        }\n+\n+        return function patch (oldVnode, vnode, hydrating, removeOnly) {\n+            if (isUndef(vnode)) {\n+                if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n+                return\n+            }\n+\n+            var isInitialPatch = false;\n+            var insertedVnodeQueue = [];\n+\n+            if (isUndef(oldVnode)) {\n+                \u002F\u002F empty mount (likely as component), create new root element\n+                isInitialPatch = true;\n+                createElm(vnode, insertedVnodeQueue);\n+            } else {\n+                var isRealElement = isDef(oldVnode.nodeType);\n+                if (!isRealElement && sameVnode(oldVnode, vnode)) {\n+                    \u002F\u002F patch existing root node\n+                    patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n+                } else {\n+                    if (isRealElement) {\n+                        \u002F\u002F mounting to a real element\n+                        \u002F\u002F check if this is server-rendered content and if we can perform\n+                        \u002F\u002F a successful hydration.\n+                        if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n+                            oldVnode.removeAttribute(SSR_ATTR);\n+                            hydrating = true;\n+                        }\n+                        if (isTrue(hydrating)) {\n+                            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n+                                invokeInsertHook(vnode, insertedVnodeQueue, true);\n+                                return oldVnode\n+                            } else {\n+                                warn(\n+                                    'The client-side rendered virtual DOM tree is not matching ' +\n+                                    'server-rendered content. This is likely caused by incorrect ' +\n+                                    'HTML markup, for example nesting block-level elements inside ' +\n+                                    '\u003Cp>, or missing \u003Ctbody>. Bailing hydration and performing ' +\n+                                    'full client-side render.'\n+                                );\n+                            }\n+                        }\n+                        \u002F\u002F either not server-rendered, or hydration failed.\n+                        \u002F\u002F create an empty node and replace it\n+                        oldVnode = emptyNodeAt(oldVnode);\n+                    }\n+\n+                    \u002F\u002F replacing existing element\n+                    var oldElm = oldVnode.elm;\n+                    var parentElm = nodeOps.parentNode(oldElm);\n+\n+                    \u002F\u002F create new node\n+                    createElm(\n+                        vnode,\n+                        insertedVnodeQueue,\n+                        \u002F\u002F extremely rare edge case: do not insert if old element is in a\n+                        \u002F\u002F leaving transition. Only happens when combining transition +\n+                        \u002F\u002F keep-alive + HOCs. (#4590)\n+                        oldElm._leaveCb ? null : parentElm,\n+                        nodeOps.nextSibling(oldElm)\n+                    );\n+\n+                    \u002F\u002F update parent placeholder node element, recursively\n+                    if (isDef(vnode.parent)) {\n+                        var ancestor = vnode.parent;\n+                        var patchable = isPatchable(vnode);\n+                        while (ancestor) {\n+                            for (var i = 0; i \u003C cbs.destroy.length; ++i) {\n+                                cbs.destroy[i](ancestor);\n+                            }\n+                            ancestor.elm = vnode.elm;\n+                            if (patchable) {\n+                                for (var i$1 = 0; i$1 \u003C cbs.create.length; ++i$1) {\n+                                    cbs.create[i$1](emptyNode, ancestor);\n+                                }\n+                                \u002F\u002F #6513\n+                                \u002F\u002F invoke insert hooks that may have been merged by create hooks.\n+                                \u002F\u002F e.g. for directives that uses the \"inserted\" hook.\n+                                var insert = ancestor.data.hook.insert;\n+                                if (insert.merged) {\n+                                    \u002F\u002F start at index 1 to avoid re-invoking component mounted hook\n+                                    for (var i$2 = 1; i$2 \u003C insert.fns.length; i$2++) {\n+                                        insert.fns[i$2]();\n+                                    }\n+                                }\n+                            } else {\n+                                registerRef(ancestor);\n+                            }\n+                            ancestor = ancestor.parent;\n+                        }\n+                    }\n+\n+                    \u002F\u002F destroy old node\n+                    if (isDef(parentElm)) {\n+                        removeVnodes(parentElm, [oldVnode], 0, 0);\n+                    } else if (isDef(oldVnode.tag)) {\n+                        invokeDestroyHook(oldVnode);\n+                    }\n+                }\n+            }\n+\n+            invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n+            return vnode.elm\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var directives = {\n+        create: updateDirectives,\n+        update: updateDirectives,\n+        destroy: function unbindDirectives (vnode) {\n+            updateDirectives(vnode, emptyNode);\n+        }\n+    };\n+\n+    function updateDirectives (oldVnode, vnode) {\n+        if (oldVnode.data.directives || vnode.data.directives) {\n+            _update(oldVnode, vnode);\n+        }\n+    }\n+\n+    function _update (oldVnode, vnode) {\n+        var isCreate = oldVnode === emptyNode;\n+        var isDestroy = vnode === emptyNode;\n+        var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n+        var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n+\n+        var dirsWithInsert = [];\n+        var dirsWithPostpatch = [];\n+\n+        var key, oldDir, dir;\n+        for (key in newDirs) {\n+            oldDir = oldDirs[key];\n+            dir = newDirs[key];\n+            if (!oldDir) {\n+                \u002F\u002F new directive, bind\n+                callHook$1(dir, 'bind', vnode, oldVnode);\n+                if (dir.def && dir.def.inserted) {\n+                    dirsWithInsert.push(dir);\n+                }\n+            } else {\n+                \u002F\u002F existing directive, update\n+                dir.oldValue = oldDir.value;\n+                dir.oldArg = oldDir.arg;\n+                callHook$1(dir, 'update', vnode, oldVnode);\n+                if (dir.def && dir.def.componentUpdated) {\n+                    dirsWithPostpatch.push(dir);\n+                }\n+            }\n+        }\n+\n+        if (dirsWithInsert.length) {\n+            var callInsert = function () {\n+                for (var i = 0; i \u003C dirsWithInsert.length; i++) {\n+                    callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n+                }\n+            };\n+            if (isCreate) {\n+                mergeVNodeHook(vnode, 'insert', callInsert);\n+            } else {\n+                callInsert();\n+            }\n+        }\n+\n+        if (dirsWithPostpatch.length) {\n+            mergeVNodeHook(vnode, 'postpatch', function () {\n+                for (var i = 0; i \u003C dirsWithPostpatch.length; i++) {\n+                    callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n+                }\n+            });\n+        }\n+\n+        if (!isCreate) {\n+            for (key in oldDirs) {\n+                if (!newDirs[key]) {\n+                    \u002F\u002F no longer present, unbind\n+                    callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n+                }\n+            }\n+        }\n+    }\n+\n+    var emptyModifiers = Object.create(null);\n+\n+    function normalizeDirectives$1 (\n+        dirs,\n+        vm\n+    ) {\n+        var res = Object.create(null);\n+        if (!dirs) {\n+            \u002F\u002F $flow-disable-line\n+            return res\n+        }\n+        var i, dir;\n+        for (i = 0; i \u003C dirs.length; i++) {\n+            dir = dirs[i];\n+            if (!dir.modifiers) {\n+                \u002F\u002F $flow-disable-line\n+                dir.modifiers = emptyModifiers;\n+            }\n+            res[getRawDirName(dir)] = dir;\n+            dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n+        }\n+        \u002F\u002F $flow-disable-line\n+        return res\n+    }\n+\n+    function getRawDirName (dir) {\n+        return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n+    }\n+\n+    function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n+        var fn = dir.def && dir.def[hook];\n+        if (fn) {\n+            try {\n+                fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n+            } catch (e) {\n+                handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n+            }\n+        }\n+    }\n+\n+    var baseModules = [\n+        ref,\n+        directives\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function updateAttrs (oldVnode, vnode) {\n+        var opts = vnode.componentOptions;\n+        if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n+            return\n+        }\n+        if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n+            return\n+        }\n+        var key, cur, old;\n+        var elm = vnode.elm;\n+        var oldAttrs = oldVnode.data.attrs || {};\n+        var attrs = vnode.data.attrs || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(attrs.__ob__)) {\n+            attrs = vnode.data.attrs = extend({}, attrs);\n+        }\n+\n+        for (key in attrs) {\n+            cur = attrs[key];\n+            old = oldAttrs[key];\n+            if (old !== cur) {\n+                setAttr(elm, key, cur);\n+            }\n+        }\n+        \u002F\u002F #4391: in IE9, setting type can reset value for input[type=radio]\n+        \u002F\u002F #6666: IE\u002FEdge forces progress value down to 1 before setting a max\n+      \u002F* istanbul ignore if *\u002F\n+        if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n+            setAttr(elm, 'value', attrs.value);\n+        }\n+        for (key in oldAttrs) {\n+            if (isUndef(attrs[key])) {\n+                if (isXlink(key)) {\n+                    elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+                } else if (!isEnumeratedAttr(key)) {\n+                    elm.removeAttribute(key);\n+                }\n+            }\n+        }\n+    }\n+\n+    function setAttr (el, key, value) {\n+        if (el.tagName.indexOf('-') > -1) {\n+            baseSetAttr(el, key, value);\n+        } else if (isBooleanAttr(key)) {\n+            \u002F\u002F set attribute for blank value\n+            \u002F\u002F e.g. \u003Coption disabled>Select one\u003C\u002Foption>\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttribute(key);\n+            } else {\n+                \u002F\u002F technically allowfullscreen is a boolean attribute for \u003Ciframe>,\n+                \u002F\u002F but Flash expects a value of \"true\" when used on \u003Cembed> tag\n+                value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n+                    ? 'true'\n+                    : key;\n+                el.setAttribute(key, value);\n+            }\n+        } else if (isEnumeratedAttr(key)) {\n+            el.setAttribute(key, convertEnumeratedValue(key, value));\n+        } else if (isXlink(key)) {\n+            if (isFalsyAttrValue(value)) {\n+                el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n+            } else {\n+                el.setAttributeNS(xlinkNS, key, value);\n+            }\n+        } else {\n+            baseSetAttr(el, key, value);\n+        }\n+    }\n+\n+    function baseSetAttr (el, key, value) {\n+        if (isFalsyAttrValue(value)) {\n+            el.removeAttribute(key);\n+        } else {\n+            \u002F\u002F #7138: IE10 & 11 fires input event when setting placeholder on\n+            \u002F\u002F \u003Ctextarea>... block the first input event and remove the blocker\n+            \u002F\u002F immediately.\n+          \u002F* istanbul ignore if *\u002F\n+            if (\n+                isIE && !isIE9 &&\n+                el.tagName === 'TEXTAREA' &&\n+                key === 'placeholder' && value !== '' && !el.__ieph\n+            ) {\n+                var blocker = function (e) {\n+                    e.stopImmediatePropagation();\n+                    el.removeEventListener('input', blocker);\n+                };\n+                el.addEventListener('input', blocker);\n+                \u002F\u002F $flow-disable-line\n+                el.__ieph = true; \u002F* IE placeholder patched *\u002F\n+            }\n+            el.setAttribute(key, value);\n+        }\n+    }\n+\n+    var attrs = {\n+        create: updateAttrs,\n+        update: updateAttrs\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function updateClass (oldVnode, vnode) {\n+        var el = vnode.elm;\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+        if (\n+            isUndef(data.staticClass) &&\n+            isUndef(data.class) && (\n+                isUndef(oldData) || (\n+                    isUndef(oldData.staticClass) &&\n+                    isUndef(oldData.class)\n+                )\n+            )\n+        ) {\n+            return\n+        }\n+\n+        var cls = genClassForVnode(vnode);\n+\n+        \u002F\u002F handle transition classes\n+        var transitionClass = el._transitionClasses;\n+        if (isDef(transitionClass)) {\n+            cls = concat(cls, stringifyClass(transitionClass));\n+        }\n+\n+        \u002F\u002F set the class\n+        if (cls !== el._prevClass) {\n+            el.setAttribute('class', cls);\n+            el._prevClass = cls;\n+        }\n+    }\n+\n+    var klass = {\n+        create: updateClass,\n+        update: updateClass\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var validDivisionCharRE = \u002F[\\w).+\\-_$\\]]\u002F;\n+\n+    function parseFilters (exp) {\n+        var inSingle = false;\n+        var inDouble = false;\n+        var inTemplateString = false;\n+        var inRegex = false;\n+        var curly = 0;\n+        var square = 0;\n+        var paren = 0;\n+        var lastFilterIndex = 0;\n+        var c, prev, i, expression, filters;\n+\n+        for (i = 0; i \u003C exp.length; i++) {\n+            prev = c;\n+            c = exp.charCodeAt(i);\n+            if (inSingle) {\n+                if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n+            } else if (inDouble) {\n+                if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n+            } else if (inTemplateString) {\n+                if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n+            } else if (inRegex) {\n+                if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n+            } else if (\n+                c === 0x7C && \u002F\u002F pipe\n+                exp.charCodeAt(i + 1) !== 0x7C &&\n+                exp.charCodeAt(i - 1) !== 0x7C &&\n+                !curly && !square && !paren\n+            ) {\n+                if (expression === undefined) {\n+                    \u002F\u002F first filter, end of expression\n+                    lastFilterIndex = i + 1;\n+                    expression = exp.slice(0, i).trim();\n+                } else {\n+                    pushFilter();\n+                }\n+            } else {\n+                switch (c) {\n+                    case 0x22: inDouble = true; break         \u002F\u002F \"\n+                    case 0x27: inSingle = true; break         \u002F\u002F '\n+                    case 0x60: inTemplateString = true; break \u002F\u002F `\n+                    case 0x28: paren++; break                 \u002F\u002F (\n+                    case 0x29: paren--; break                 \u002F\u002F )\n+                    case 0x5B: square++; break                \u002F\u002F [\n+                    case 0x5D: square--; break                \u002F\u002F ]\n+                    case 0x7B: curly++; break                 \u002F\u002F {\n+                    case 0x7D: curly--; break                 \u002F\u002F }\n+                }\n+                if (c === 0x2f) { \u002F\u002F \u002F\n+                    var j = i - 1;\n+                    var p = (void 0);\n+                    \u002F\u002F find first non-whitespace prev char\n+                    for (; j >= 0; j--) {\n+                        p = exp.charAt(j);\n+                        if (p !== ' ') { break }\n+                    }\n+                    if (!p || !validDivisionCharRE.test(p)) {\n+                        inRegex = true;\n+                    }\n+                }\n+            }\n+        }\n+\n+        if (expression === undefined) {\n+            expression = exp.slice(0, i).trim();\n+        } else if (lastFilterIndex !== 0) {\n+            pushFilter();\n+        }\n+\n+        function pushFilter () {\n+            (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n+            lastFilterIndex = i + 1;\n+        }\n+\n+        if (filters) {\n+            for (i = 0; i \u003C filters.length; i++) {\n+                expression = wrapFilter(expression, filters[i]);\n+            }\n+        }\n+\n+        return expression\n+    }\n+\n+    function wrapFilter (exp, filter) {\n+        var i = filter.indexOf('(');\n+        if (i \u003C 0) {\n+            \u002F\u002F _f: resolveFilter\n+            return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n+        } else {\n+            var name = filter.slice(0, i);\n+            var args = filter.slice(i + 1);\n+            return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+  \u002F* eslint-disable no-unused-vars *\u002F\n+    function baseWarn (msg, range) {\n+        console.error((\"[Vue compiler]: \" + msg));\n+    }\n+  \u002F* eslint-enable no-unused-vars *\u002F\n+\n+    function pluckModuleFunction (\n+        modules,\n+        key\n+    ) {\n+        return modules\n+            ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n+            : []\n+    }\n+\n+    function addProp (el, name, value, range, dynamic) {\n+        (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    function addAttr (el, name, value, range, dynamic) {\n+        var attrs = dynamic\n+            ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n+            : (el.attrs || (el.attrs = []));\n+        attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n+        el.plain = false;\n+    }\n+\n+    \u002F\u002F add a raw attr (use this in preTransforms)\n+    function addRawAttr (el, name, value, range) {\n+        el.attrsMap[name] = value;\n+        el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n+    }\n+\n+    function addDirective (\n+        el,\n+        name,\n+        rawName,\n+        value,\n+        arg,\n+        isDynamicArg,\n+        modifiers,\n+        range\n+    ) {\n+        (el.directives || (el.directives = [])).push(rangeSetItem({\n+            name: name,\n+            rawName: rawName,\n+            value: value,\n+            arg: arg,\n+            isDynamicArg: isDynamicArg,\n+            modifiers: modifiers\n+        }, range));\n+        el.plain = false;\n+    }\n+\n+    function prependModifierMarker (symbol, name, dynamic) {\n+        return dynamic\n+            ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n+            : symbol + name \u002F\u002F mark the event as captured\n+    }\n+\n+    function addHandler (\n+        el,\n+        name,\n+        value,\n+        modifiers,\n+        important,\n+        warn,\n+        range,\n+        dynamic\n+    ) {\n+        modifiers = modifiers || emptyObject;\n+        \u002F\u002F warn prevent and passive modifier\n+      \u002F* istanbul ignore if *\u002F\n+        if (\n+            warn &&\n+            modifiers.prevent && modifiers.passive\n+        ) {\n+            warn(\n+                'passive and prevent can\\'t be used together. ' +\n+                'Passive handler can\\'t prevent default event.',\n+                range\n+            );\n+        }\n+\n+        \u002F\u002F normalize click.right and click.middle since they don't actually fire\n+        \u002F\u002F this is technically browser-specific, but at least for now browsers are\n+        \u002F\u002F the only target envs that have right\u002Fmiddle clicks.\n+        if (modifiers.right) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'contextmenu';\n+                delete modifiers.right;\n+            }\n+        } else if (modifiers.middle) {\n+            if (dynamic) {\n+                name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n+            } else if (name === 'click') {\n+                name = 'mouseup';\n+            }\n+        }\n+\n+        \u002F\u002F check capture modifier\n+        if (modifiers.capture) {\n+            delete modifiers.capture;\n+            name = prependModifierMarker('!', name, dynamic);\n+        }\n+        if (modifiers.once) {\n+            delete modifiers.once;\n+            name = prependModifierMarker('~', name, dynamic);\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (modifiers.passive) {\n+            delete modifiers.passive;\n+            name = prependModifierMarker('&', name, dynamic);\n+        }\n+\n+        var events;\n+        if (modifiers.native) {\n+            delete modifiers.native;\n+            events = el.nativeEvents || (el.nativeEvents = {});\n+        } else {\n+            events = el.events || (el.events = {});\n+        }\n+\n+        var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n+        if (modifiers !== emptyObject) {\n+            newHandler.modifiers = modifiers;\n+        }\n+\n+        var handlers = events[name];\n+      \u002F* istanbul ignore if *\u002F\n+        if (Array.isArray(handlers)) {\n+            important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n+        } else if (handlers) {\n+            events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n+        } else {\n+            events[name] = newHandler;\n+        }\n+\n+        el.plain = false;\n+    }\n+\n+    function getRawBindingAttr (\n+        el,\n+        name\n+    ) {\n+        return el.rawAttrsMap[':' + name] ||\n+            el.rawAttrsMap['v-bind:' + name] ||\n+            el.rawAttrsMap[name]\n+    }\n+\n+    function getBindingAttr (\n+        el,\n+        name,\n+        getStatic\n+    ) {\n+        var dynamicValue =\n+            getAndRemoveAttr(el, ':' + name) ||\n+            getAndRemoveAttr(el, 'v-bind:' + name);\n+        if (dynamicValue != null) {\n+            return parseFilters(dynamicValue)\n+        } else if (getStatic !== false) {\n+            var staticValue = getAndRemoveAttr(el, name);\n+            if (staticValue != null) {\n+                return JSON.stringify(staticValue)\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F note: this only removes the attr from the Array (attrsList) so that it\n+    \u002F\u002F doesn't get processed by processAttrs.\n+    \u002F\u002F By default it does NOT remove it from the map (attrsMap) because the map is\n+    \u002F\u002F needed during codegen.\n+    function getAndRemoveAttr (\n+        el,\n+        name,\n+        removeFromMap\n+    ) {\n+        var val;\n+        if ((val = el.attrsMap[name]) != null) {\n+            var list = el.attrsList;\n+            for (var i = 0, l = list.length; i \u003C l; i++) {\n+                if (list[i].name === name) {\n+                    list.splice(i, 1);\n+                    break\n+                }\n+            }\n+        }\n+        if (removeFromMap) {\n+            delete el.attrsMap[name];\n+        }\n+        return val\n+    }\n+\n+    function getAndRemoveAttrByRegex (\n+        el,\n+        name\n+    ) {\n+        var list = el.attrsList;\n+        for (var i = 0, l = list.length; i \u003C l; i++) {\n+            var attr = list[i];\n+            if (name.test(attr.name)) {\n+                list.splice(i, 1);\n+                return attr\n+            }\n+        }\n+    }\n+\n+    function rangeSetItem (\n+        item,\n+        range\n+    ) {\n+        if (range) {\n+            if (range.start != null) {\n+                item.start = range.start;\n+            }\n+            if (range.end != null) {\n+                item.end = range.end;\n+            }\n+        }\n+        return item\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F**\n+     * Cross-platform code generation for component v-model\n+     *\u002F\n+    function genComponentModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var ref = modifiers || {};\n+        var number = ref.number;\n+        var trim = ref.trim;\n+\n+        var baseValueExpression = '$$v';\n+        var valueExpression = baseValueExpression;\n+        if (trim) {\n+            valueExpression =\n+                \"(typeof \" + baseValueExpression + \" === 'string'\" +\n+                \"? \" + baseValueExpression + \".trim()\" +\n+                \": \" + baseValueExpression + \")\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+        var assignment = genAssignmentCode(value, valueExpression);\n+\n+        el.model = {\n+            value: (\"(\" + value + \")\"),\n+            expression: JSON.stringify(value),\n+            callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n+        };\n+    }\n+\n+    \u002F**\n+     * Cross-platform codegen helper for generating v-model value assignment code.\n+     *\u002F\n+    function genAssignmentCode (\n+        value,\n+        assignment\n+    ) {\n+        var res = parseModel(value);\n+        if (res.key === null) {\n+            return (value + \"=\" + assignment)\n+        } else {\n+            return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n+        }\n+    }\n+\n+    \u002F**\n+     * Parse a v-model expression into a base path and a final key segment.\n+     * Handles both dot-path and possible square brackets.\n+     *\n+     * Possible cases:\n+     *\n+     * - test\n+     * - test[key]\n+     * - test[test1[key]]\n+     * - test[\"a\"][key]\n+     * - xxx.test[a[a].test1[key]]\n+     * - test.xxx.a[\"asa\"][test1[key]]\n+     *\n+     *\u002F\n+\n+    var len, str, chr, index$1, expressionPos, expressionEndPos;\n+\n+\n+\n+    function parseModel (val) {\n+        \u002F\u002F Fix https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue\u002Fpull\u002F7730\n+        \u002F\u002F allow v-model=\"obj.val \" (trailing whitespace)\n+        val = val.trim();\n+        len = val.length;\n+\n+        if (val.indexOf('[') \u003C 0 || val.lastIndexOf(']') \u003C len - 1) {\n+            index$1 = val.lastIndexOf('.');\n+            if (index$1 > -1) {\n+                return {\n+                    exp: val.slice(0, index$1),\n+                    key: '\"' + val.slice(index$1 + 1) + '\"'\n+                }\n+            } else {\n+                return {\n+                    exp: val,\n+                    key: null\n+                }\n+            }\n+        }\n+\n+        str = val;\n+        index$1 = expressionPos = expressionEndPos = 0;\n+\n+        while (!eof()) {\n+            chr = next();\n+          \u002F* istanbul ignore if *\u002F\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+            } else if (chr === 0x5B) {\n+                parseBracket(chr);\n+            }\n+        }\n+\n+        return {\n+            exp: val.slice(0, expressionPos),\n+            key: val.slice(expressionPos + 1, expressionEndPos)\n+        }\n+    }\n+\n+    function next () {\n+        return str.charCodeAt(++index$1)\n+    }\n+\n+    function eof () {\n+        return index$1 >= len\n+    }\n+\n+    function isStringStart (chr) {\n+        return chr === 0x22 || chr === 0x27\n+    }\n+\n+    function parseBracket (chr) {\n+        var inBracket = 1;\n+        expressionPos = index$1;\n+        while (!eof()) {\n+            chr = next();\n+            if (isStringStart(chr)) {\n+                parseString(chr);\n+                continue\n+            }\n+            if (chr === 0x5B) { inBracket++; }\n+            if (chr === 0x5D) { inBracket--; }\n+            if (inBracket === 0) {\n+                expressionEndPos = index$1;\n+                break\n+            }\n+        }\n+    }\n+\n+    function parseString (chr) {\n+        var stringQuote = chr;\n+        while (!eof()) {\n+            chr = next();\n+            if (chr === stringQuote) {\n+                break\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var warn$1;\n+\n+    \u002F\u002F in some cases, the event used has to be determined at runtime\n+    \u002F\u002F so we used some reserved tokens during compile.\n+    var RANGE_TOKEN = '__r';\n+    var CHECKBOX_RADIO_TOKEN = '__c';\n+\n+    function model (\n+        el,\n+        dir,\n+        _warn\n+    ) {\n+        warn$1 = _warn;\n+        var value = dir.value;\n+        var modifiers = dir.modifiers;\n+        var tag = el.tag;\n+        var type = el.attrsMap.type;\n+\n+        {\n+            \u002F\u002F inputs with type=\"file\" are read only and setting the input's\n+            \u002F\u002F value will throw an error.\n+            if (tag === 'input' && type === 'file') {\n+                warn$1(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n+                    \"File inputs are read only. Use a v-on:change listener instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+        }\n+\n+        if (el.component) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else if (tag === 'select') {\n+            genSelect(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'checkbox') {\n+            genCheckboxModel(el, value, modifiers);\n+        } else if (tag === 'input' && type === 'radio') {\n+            genRadioModel(el, value, modifiers);\n+        } else if (tag === 'input' || tag === 'textarea') {\n+            genDefaultModel(el, value, modifiers);\n+        } else if (!config.isReservedTag(tag)) {\n+            genComponentModel(el, value, modifiers);\n+            \u002F\u002F component v-model doesn't need extra runtime\n+            return false\n+        } else {\n+            warn$1(\n+                \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                \"v-model is not supported on this element type. \" +\n+                'If you are working with contenteditable, it\\'s recommended to ' +\n+                'wrap a library dedicated for that purpose inside a custom component.',\n+                el.rawAttrsMap['v-model']\n+            );\n+        }\n+\n+        \u002F\u002F ensure runtime directive metadata\n+        return true\n+    }\n+\n+    function genCheckboxModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n+        var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n+        addProp(el, 'checked',\n+            \"Array.isArray(\" + value + \")\" +\n+            \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n+                trueValueBinding === 'true'\n+                    ? (\":(\" + value + \")\")\n+                    : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n+            )\n+        );\n+        addHandler(el, 'change',\n+            \"var $$a=\" + value + \",\" +\n+            '$$el=$event.target,' +\n+            \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n+            'if(Array.isArray($$a)){' +\n+            \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n+            '$$i=_i($$a,$$v);' +\n+            \"if($$el.checked){$$i\u003C0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n+            \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n+            \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n+            null, true\n+        );\n+    }\n+\n+    function genRadioModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var valueBinding = getBindingAttr(el, 'value') || 'null';\n+        valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n+        addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n+        addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n+    }\n+\n+    function genSelect (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var number = modifiers && modifiers.number;\n+        var selectedVal = \"Array.prototype.filter\" +\n+            \".call($event.target.options,function(o){return o.selected})\" +\n+            \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n+            \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n+\n+        var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n+        var code = \"var $$selectedVal = \" + selectedVal + \";\";\n+        code = code + \" \" + (genAssignmentCode(value, assignment));\n+        addHandler(el, 'change', code, null, true);\n+    }\n+\n+    function genDefaultModel (\n+        el,\n+        value,\n+        modifiers\n+    ) {\n+        var type = el.attrsMap.type;\n+\n+        \u002F\u002F warn if v-bind:value conflicts with v-model\n+        \u002F\u002F except for inputs with v-bind:type\n+        {\n+            var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n+            var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n+            if (value$1 && !typeBinding) {\n+                var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n+                warn$1(\n+                    binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n+                    'because the latter already expands to a value binding internally',\n+                    el.rawAttrsMap[binding]\n+                );\n+            }\n+        }\n+\n+        var ref = modifiers || {};\n+        var lazy = ref.lazy;\n+        var number = ref.number;\n+        var trim = ref.trim;\n+        var needCompositionGuard = !lazy && type !== 'range';\n+        var event = lazy\n+            ? 'change'\n+            : type === 'range'\n+                ? RANGE_TOKEN\n+                : 'input';\n+\n+        var valueExpression = '$event.target.value';\n+        if (trim) {\n+            valueExpression = \"$event.target.value.trim()\";\n+        }\n+        if (number) {\n+            valueExpression = \"_n(\" + valueExpression + \")\";\n+        }\n+\n+        var code = genAssignmentCode(value, valueExpression);\n+        if (needCompositionGuard) {\n+            code = \"if($event.target.composing)return;\" + code;\n+        }\n+\n+        addProp(el, 'value', (\"(\" + value + \")\"));\n+        addHandler(el, event, code, null, true);\n+        if (trim || number) {\n+            addHandler(el, 'blur', '$forceUpdate()');\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F normalize v-model event tokens that can only be determined at runtime.\n+    \u002F\u002F it's important to place the event as the first in the array because\n+    \u002F\u002F the whole point is ensuring the v-model callback gets called before\n+    \u002F\u002F user-attached handlers.\n+    function normalizeEvents (on) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[RANGE_TOKEN])) {\n+            \u002F\u002F IE input[type=range] only supports `change` event\n+            var event = isIE ? 'change' : 'input';\n+            on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n+            delete on[RANGE_TOKEN];\n+        }\n+        \u002F\u002F This was originally intended to fix #4521 but no longer necessary\n+        \u002F\u002F after 2.5. Keeping it for backwards compat with generated code from \u003C 2.4\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n+            on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n+            delete on[CHECKBOX_RADIO_TOKEN];\n+        }\n+    }\n+\n+    var target$1;\n+\n+    function createOnceHandler$1 (event, handler, capture) {\n+        var _target = target$1; \u002F\u002F save current target element in closure\n+        return function onceHandler () {\n+            var res = handler.apply(null, arguments);\n+            if (res !== null) {\n+                remove$2(event, onceHandler, capture, _target);\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F #9446: Firefox \u003C= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n+    \u002F\u002F implementation and does not fire microtasks in between event propagation, so\n+    \u002F\u002F safe to exclude.\n+    var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) \u003C= 53);\n+\n+    function add$1 (\n+        name,\n+        handler,\n+        capture,\n+        passive\n+    ) {\n+        \u002F\u002F async edge case #6566: inner click event triggers patch, event handler\n+        \u002F\u002F attached to outer element during patch, and triggered again. This\n+        \u002F\u002F happens because browsers fire microtask ticks between event propagation.\n+        \u002F\u002F the solution is simple: we save the timestamp when a handler is attached,\n+        \u002F\u002F and the handler would only fire if the event passed to it was fired\n+        \u002F\u002F AFTER it was attached.\n+        if (useMicrotaskFix) {\n+            var attachedTimestamp = currentFlushTimestamp;\n+            var original = handler;\n+            handler = original._wrapper = function (e) {\n+                if (\n+                    \u002F\u002F no bubbling, should always fire.\n+                \u002F\u002F this is just a safety net in case event.timeStamp is unreliable in\n+                \u002F\u002F certain weird environments...\n+                e.target === e.currentTarget ||\n+                \u002F\u002F event is fired after handler attachment\n+                e.timeStamp >= attachedTimestamp ||\n+                \u002F\u002F bail for environments that have buggy event.timeStamp implementations\n+                \u002F\u002F #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n+                \u002F\u002F #9681 QtWebEngine event.timeStamp is negative value\n+                e.timeStamp \u003C= 0 ||\n+                \u002F\u002F #9448 bail if event is fired in another document in a multi-page\n+                \u002F\u002F electron\u002Fnw.js app, since event.timeStamp will be using a different\n+                \u002F\u002F starting reference\n+                e.target.ownerDocument !== document\n+                ) {\n+                    return original.apply(this, arguments)\n+                }\n+            };\n+        }\n+        target$1.addEventListener(\n+            name,\n+            handler,\n+            supportsPassive\n+                ? { capture: capture, passive: passive }\n+                : capture\n+        );\n+    }\n+\n+    function remove$2 (\n+        name,\n+        handler,\n+        capture,\n+        _target\n+    ) {\n+        (_target || target$1).removeEventListener(\n+            name,\n+            handler._wrapper || handler,\n+            capture\n+        );\n+    }\n+\n+    function updateDOMListeners (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n+            return\n+        }\n+        var on = vnode.data.on || {};\n+        var oldOn = oldVnode.data.on || {};\n+        target$1 = vnode.elm;\n+        normalizeEvents(on);\n+        updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n+        target$1 = undefined;\n+    }\n+\n+    var events = {\n+        create: updateDOMListeners,\n+        update: updateDOMListeners\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var svgContainer;\n+\n+    function updateDOMProps (oldVnode, vnode) {\n+        if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n+            return\n+        }\n+        var key, cur;\n+        var elm = vnode.elm;\n+        var oldProps = oldVnode.data.domProps || {};\n+        var props = vnode.data.domProps || {};\n+        \u002F\u002F clone observed objects, as the user probably wants to mutate it\n+        if (isDef(props.__ob__)) {\n+            props = vnode.data.domProps = extend({}, props);\n+        }\n+\n+        for (key in oldProps) {\n+            if (!(key in props)) {\n+                elm[key] = '';\n+            }\n+        }\n+\n+        for (key in props) {\n+            cur = props[key];\n+            \u002F\u002F ignore children if the node has textContent or innerHTML,\n+            \u002F\u002F as these will throw away existing DOM nodes and cause removal errors\n+            \u002F\u002F on subsequent patches (#3360)\n+            if (key === 'textContent' || key === 'innerHTML') {\n+                if (vnode.children) { vnode.children.length = 0; }\n+                if (cur === oldProps[key]) { continue }\n+                \u002F\u002F #6601 work around Chrome version \u003C= 55 bug where single textNode\n+                \u002F\u002F replaced by innerHTML\u002FtextContent retains its parentNode property\n+                if (elm.childNodes.length === 1) {\n+                    elm.removeChild(elm.childNodes[0]);\n+                }\n+            }\n+\n+            if (key === 'value' && elm.tagName !== 'PROGRESS') {\n+                \u002F\u002F store value as _value as well since\n+                \u002F\u002F non-string values will be stringified\n+                elm._value = cur;\n+                \u002F\u002F avoid resetting cursor position when value is the same\n+                var strCur = isUndef(cur) ? '' : String(cur);\n+                if (shouldUpdateValue(elm, strCur)) {\n+                    elm.value = strCur;\n+                }\n+            } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n+                \u002F\u002F IE doesn't support innerHTML for SVG elements\n+                svgContainer = svgContainer || document.createElement('div');\n+                svgContainer.innerHTML = \"\u003Csvg>\" + cur + \"\u003C\u002Fsvg>\";\n+                var svg = svgContainer.firstChild;\n+                while (elm.firstChild) {\n+                    elm.removeChild(elm.firstChild);\n+                }\n+                while (svg.firstChild) {\n+                    elm.appendChild(svg.firstChild);\n+                }\n+            } else if (\n+                \u002F\u002F skip the update if old and new VDOM state is the same.\n+            \u002F\u002F `value` is handled separately because the DOM value may be temporarily\n+            \u002F\u002F out of sync with VDOM state due to focus, composition and modifiers.\n+            \u002F\u002F This  #4521 by skipping the unnecesarry `checked` update.\n+            cur !== oldProps[key]\n+            ) {\n+                \u002F\u002F some property updates can throw\n+                \u002F\u002F e.g. `value` on \u003Cprogress> w\u002F non-finite value\n+                try {\n+                    elm[key] = cur;\n+                } catch (e) {}\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F check platforms\u002Fweb\u002Futil\u002Fattrs.js acceptValue\n+\n+\n+    function shouldUpdateValue (elm, checkVal) {\n+        return (!elm.composing && (\n+            elm.tagName === 'OPTION' ||\n+            isNotInFocusAndDirty(elm, checkVal) ||\n+            isDirtyWithModifiers(elm, checkVal)\n+        ))\n+    }\n+\n+    function isNotInFocusAndDirty (elm, checkVal) {\n+        \u002F\u002F return true when textbox (.number and .trim) loses focus and its value is\n+        \u002F\u002F not equal to the updated value\n+        var notInFocus = true;\n+        \u002F\u002F #6157\n+        \u002F\u002F work around IE bug when accessing document.activeElement in an iframe\n+        try { notInFocus = document.activeElement !== elm; } catch (e) {}\n+        return notInFocus && elm.value !== checkVal\n+    }\n+\n+    function isDirtyWithModifiers (elm, newVal) {\n+        var value = elm.value;\n+        var modifiers = elm._vModifiers; \u002F\u002F injected by v-model runtime\n+        if (isDef(modifiers)) {\n+            if (modifiers.number) {\n+                return toNumber(value) !== toNumber(newVal)\n+            }\n+            if (modifiers.trim) {\n+                return value.trim() !== newVal.trim()\n+            }\n+        }\n+        return value !== newVal\n+    }\n+\n+    var domProps = {\n+        create: updateDOMProps,\n+        update: updateDOMProps\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var parseStyleText = cached(function (cssText) {\n+        var res = {};\n+        var listDelimiter = \u002F;(?![^(]*\\))\u002Fg;\n+        var propertyDelimiter = \u002F:(.+)\u002F;\n+        cssText.split(listDelimiter).forEach(function (item) {\n+            if (item) {\n+                var tmp = item.split(propertyDelimiter);\n+                tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n+            }\n+        });\n+        return res\n+    });\n+\n+    \u002F\u002F merge static and dynamic style data on the same vnode\n+    function normalizeStyleData (data) {\n+        var style = normalizeStyleBinding(data.style);\n+        \u002F\u002F static style is pre-processed into an object during compilation\n+        \u002F\u002F and is always a fresh object, so it's safe to merge into it\n+        return data.staticStyle\n+            ? extend(data.staticStyle, style)\n+            : style\n+    }\n+\n+    \u002F\u002F normalize possible array \u002F string values into Object\n+    function normalizeStyleBinding (bindingStyle) {\n+        if (Array.isArray(bindingStyle)) {\n+            return toObject(bindingStyle)\n+        }\n+        if (typeof bindingStyle === 'string') {\n+            return parseStyleText(bindingStyle)\n+        }\n+        return bindingStyle\n+    }\n+\n+    \u002F**\n+     * parent component style should be after child's\n+     * so that parent component's style could override it\n+     *\u002F\n+    function getStyle (vnode, checkChild) {\n+        var res = {};\n+        var styleData;\n+\n+        if (checkChild) {\n+            var childNode = vnode;\n+            while (childNode.componentInstance) {\n+                childNode = childNode.componentInstance._vnode;\n+                if (\n+                    childNode && childNode.data &&\n+                    (styleData = normalizeStyleData(childNode.data))\n+                ) {\n+                    extend(res, styleData);\n+                }\n+            }\n+        }\n+\n+        if ((styleData = normalizeStyleData(vnode.data))) {\n+            extend(res, styleData);\n+        }\n+\n+        var parentNode = vnode;\n+        while ((parentNode = parentNode.parent)) {\n+            if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n+                extend(res, styleData);\n+            }\n+        }\n+        return res\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var cssVarRE = \u002F^--\u002F;\n+    var importantRE = \u002F\\s*!important$\u002F;\n+    var setProp = function (el, name, val) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (cssVarRE.test(name)) {\n+            el.style.setProperty(name, val);\n+        } else if (importantRE.test(val)) {\n+            el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n+        } else {\n+            var normalizedName = normalize(name);\n+            if (Array.isArray(val)) {\n+                \u002F\u002F Support values array created by autoprefixer, e.g.\n+                \u002F\u002F {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n+                \u002F\u002F Set them one by one, and the browser will only set those it can recognize\n+                for (var i = 0, len = val.length; i \u003C len; i++) {\n+                    el.style[normalizedName] = val[i];\n+                }\n+            } else {\n+                el.style[normalizedName] = val;\n+            }\n+        }\n+    };\n+\n+    var vendorNames = ['Webkit', 'Moz', 'ms'];\n+\n+    var emptyStyle;\n+    var normalize = cached(function (prop) {\n+        emptyStyle = emptyStyle || document.createElement('div').style;\n+        prop = camelize(prop);\n+        if (prop !== 'filter' && (prop in emptyStyle)) {\n+            return prop\n+        }\n+        var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n+        for (var i = 0; i \u003C vendorNames.length; i++) {\n+            var name = vendorNames[i] + capName;\n+            if (name in emptyStyle) {\n+                return name\n+            }\n+        }\n+    });\n+\n+    function updateStyle (oldVnode, vnode) {\n+        var data = vnode.data;\n+        var oldData = oldVnode.data;\n+\n+        if (isUndef(data.staticStyle) && isUndef(data.style) &&\n+            isUndef(oldData.staticStyle) && isUndef(oldData.style)\n+        ) {\n+            return\n+        }\n+\n+        var cur, name;\n+        var el = vnode.elm;\n+        var oldStaticStyle = oldData.staticStyle;\n+        var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n+\n+        \u002F\u002F if static style exists, stylebinding already merged into it when doing normalizeStyleData\n+        var oldStyle = oldStaticStyle || oldStyleBinding;\n+\n+        var style = normalizeStyleBinding(vnode.data.style) || {};\n+\n+        \u002F\u002F store normalized style under a different key for next diff\n+        \u002F\u002F make sure to clone it if it's reactive, since the user likely wants\n+        \u002F\u002F to mutate it.\n+        vnode.data.normalizedStyle = isDef(style.__ob__)\n+            ? extend({}, style)\n+            : style;\n+\n+        var newStyle = getStyle(vnode, true);\n+\n+        for (name in oldStyle) {\n+            if (isUndef(newStyle[name])) {\n+                setProp(el, name, '');\n+            }\n+        }\n+        for (name in newStyle) {\n+            cur = newStyle[name];\n+            if (cur !== oldStyle[name]) {\n+                \u002F\u002F ie9 setting to null has no effect, must use empty string\n+                setProp(el, name, cur == null ? '' : cur);\n+            }\n+        }\n+    }\n+\n+    var style = {\n+        create: updateStyle,\n+        update: updateStyle\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var whitespaceRE = \u002F\\s+\u002F;\n+\n+    \u002F**\n+     * Add class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function addClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n+            } else {\n+                el.classList.add(cls);\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            if (cur.indexOf(' ' + cls + ' ') \u003C 0) {\n+                el.setAttribute('class', (cur + cls).trim());\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Remove class with compatibility for SVG since classList is not supported on\n+     * SVG elements in IE\n+     *\u002F\n+    function removeClass (el, cls) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (!cls || !(cls = cls.trim())) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore else *\u002F\n+        if (el.classList) {\n+            if (cls.indexOf(' ') > -1) {\n+                cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n+            } else {\n+                el.classList.remove(cls);\n+            }\n+            if (!el.classList.length) {\n+                el.removeAttribute('class');\n+            }\n+        } else {\n+            var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n+            var tar = ' ' + cls + ' ';\n+            while (cur.indexOf(tar) >= 0) {\n+                cur = cur.replace(tar, ' ');\n+            }\n+            cur = cur.trim();\n+            if (cur) {\n+                el.setAttribute('class', cur);\n+            } else {\n+                el.removeAttribute('class');\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function resolveTransition (def$$1) {\n+        if (!def$$1) {\n+            return\n+        }\n+      \u002F* istanbul ignore else *\u002F\n+        if (typeof def$$1 === 'object') {\n+            var res = {};\n+            if (def$$1.css !== false) {\n+                extend(res, autoCssTransition(def$$1.name || 'v'));\n+            }\n+            extend(res, def$$1);\n+            return res\n+        } else if (typeof def$$1 === 'string') {\n+            return autoCssTransition(def$$1)\n+        }\n+    }\n+\n+    var autoCssTransition = cached(function (name) {\n+        return {\n+            enterClass: (name + \"-enter\"),\n+            enterToClass: (name + \"-enter-to\"),\n+            enterActiveClass: (name + \"-enter-active\"),\n+            leaveClass: (name + \"-leave\"),\n+            leaveToClass: (name + \"-leave-to\"),\n+            leaveActiveClass: (name + \"-leave-active\")\n+        }\n+    });\n+\n+    var hasTransition = inBrowser && !isIE9;\n+    var TRANSITION = 'transition';\n+    var ANIMATION = 'animation';\n+\n+    \u002F\u002F Transition property\u002Fevent sniffing\n+    var transitionProp = 'transition';\n+    var transitionEndEvent = 'transitionend';\n+    var animationProp = 'animation';\n+    var animationEndEvent = 'animationend';\n+    if (hasTransition) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (window.ontransitionend === undefined &&\n+            window.onwebkittransitionend !== undefined\n+        ) {\n+            transitionProp = 'WebkitTransition';\n+            transitionEndEvent = 'webkitTransitionEnd';\n+        }\n+        if (window.onanimationend === undefined &&\n+            window.onwebkitanimationend !== undefined\n+        ) {\n+            animationProp = 'WebkitAnimation';\n+            animationEndEvent = 'webkitAnimationEnd';\n+        }\n+    }\n+\n+    \u002F\u002F binding to window is necessary to make hot reload work in IE in strict mode\n+    var raf = inBrowser\n+        ? window.requestAnimationFrame\n+            ? window.requestAnimationFrame.bind(window)\n+            : setTimeout\n+        : \u002F* istanbul ignore next *\u002F function (fn) { return fn(); };\n+\n+    function nextFrame (fn) {\n+        raf(function () {\n+            raf(fn);\n+        });\n+    }\n+\n+    function addTransitionClass (el, cls) {\n+        var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n+        if (transitionClasses.indexOf(cls) \u003C 0) {\n+            transitionClasses.push(cls);\n+            addClass(el, cls);\n+        }\n+    }\n+\n+    function removeTransitionClass (el, cls) {\n+        if (el._transitionClasses) {\n+            remove(el._transitionClasses, cls);\n+        }\n+        removeClass(el, cls);\n+    }\n+\n+    function whenTransitionEnds (\n+        el,\n+        expectedType,\n+        cb\n+    ) {\n+        var ref = getTransitionInfo(el, expectedType);\n+        var type = ref.type;\n+        var timeout = ref.timeout;\n+        var propCount = ref.propCount;\n+        if (!type) { return cb() }\n+        var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n+        var ended = 0;\n+        var end = function () {\n+            el.removeEventListener(event, onEnd);\n+            cb();\n+        };\n+        var onEnd = function (e) {\n+            if (e.target === el) {\n+                if (++ended >= propCount) {\n+                    end();\n+                }\n+            }\n+        };\n+        setTimeout(function () {\n+            if (ended \u003C propCount) {\n+                end();\n+            }\n+        }, timeout + 1);\n+        el.addEventListener(event, onEnd);\n+    }\n+\n+    var transformRE = \u002F\\b(transform|all)(,|$)\u002F;\n+\n+    function getTransitionInfo (el, expectedType) {\n+        var styles = window.getComputedStyle(el);\n+        \u002F\u002F JSDOM may return undefined for transition properties\n+        var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n+        var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n+        var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n+        var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n+        var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n+        var animationTimeout = getTimeout(animationDelays, animationDurations);\n+\n+        var type;\n+        var timeout = 0;\n+        var propCount = 0;\n+      \u002F* istanbul ignore if *\u002F\n+        if (expectedType === TRANSITION) {\n+            if (transitionTimeout > 0) {\n+                type = TRANSITION;\n+                timeout = transitionTimeout;\n+                propCount = transitionDurations.length;\n+            }\n+        } else if (expectedType === ANIMATION) {\n+            if (animationTimeout > 0) {\n+                type = ANIMATION;\n+                timeout = animationTimeout;\n+                propCount = animationDurations.length;\n+            }\n+        } else {\n+            timeout = Math.max(transitionTimeout, animationTimeout);\n+            type = timeout > 0\n+                ? transitionTimeout > animationTimeout\n+                    ? TRANSITION\n+                    : ANIMATION\n+                : null;\n+            propCount = type\n+                ? type === TRANSITION\n+                    ? transitionDurations.length\n+                    : animationDurations.length\n+                : 0;\n+        }\n+        var hasTransform =\n+            type === TRANSITION &&\n+            transformRE.test(styles[transitionProp + 'Property']);\n+        return {\n+            type: type,\n+            timeout: timeout,\n+            propCount: propCount,\n+            hasTransform: hasTransform\n+        }\n+    }\n+\n+    function getTimeout (delays, durations) {\n+      \u002F* istanbul ignore next *\u002F\n+        while (delays.length \u003C durations.length) {\n+            delays = delays.concat(delays);\n+        }\n+\n+        return Math.max.apply(null, durations.map(function (d, i) {\n+            return toMs(d) + toMs(delays[i])\n+        }))\n+    }\n+\n+    \u002F\u002F Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n+    \u002F\u002F in a locale-dependent way, using a comma instead of a dot.\n+    \u002F\u002F If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n+    \u002F\u002F as a floor function) causing unexpected behaviors\n+    function toMs (s) {\n+        return Number(s.slice(0, -1).replace(',', '.')) * 1000\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function enter (vnode, toggleDisplay) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call leave callback now\n+        if (isDef(el._leaveCb)) {\n+            el._leaveCb.cancelled = true;\n+            el._leaveCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data)) {\n+            return\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._enterCb) || el.nodeType !== 1) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var enterClass = data.enterClass;\n+        var enterToClass = data.enterToClass;\n+        var enterActiveClass = data.enterActiveClass;\n+        var appearClass = data.appearClass;\n+        var appearToClass = data.appearToClass;\n+        var appearActiveClass = data.appearActiveClass;\n+        var beforeEnter = data.beforeEnter;\n+        var enter = data.enter;\n+        var afterEnter = data.afterEnter;\n+        var enterCancelled = data.enterCancelled;\n+        var beforeAppear = data.beforeAppear;\n+        var appear = data.appear;\n+        var afterAppear = data.afterAppear;\n+        var appearCancelled = data.appearCancelled;\n+        var duration = data.duration;\n+\n+        \u002F\u002F activeInstance will always be the \u003Ctransition> component managing this\n+        \u002F\u002F transition. One edge case to check is when the \u003Ctransition> is placed\n+        \u002F\u002F as the root node of a child component. In that case we need to check\n+        \u002F\u002F \u003Ctransition>'s parent for appear check.\n+        var context = activeInstance;\n+        var transitionNode = activeInstance.$vnode;\n+        while (transitionNode && transitionNode.parent) {\n+            context = transitionNode.context;\n+            transitionNode = transitionNode.parent;\n+        }\n+\n+        var isAppear = !context._isMounted || !vnode.isRootInsert;\n+\n+        if (isAppear && !appear && appear !== '') {\n+            return\n+        }\n+\n+        var startClass = isAppear && appearClass\n+            ? appearClass\n+            : enterClass;\n+        var activeClass = isAppear && appearActiveClass\n+            ? appearActiveClass\n+            : enterActiveClass;\n+        var toClass = isAppear && appearToClass\n+            ? appearToClass\n+            : enterToClass;\n+\n+        var beforeEnterHook = isAppear\n+            ? (beforeAppear || beforeEnter)\n+            : beforeEnter;\n+        var enterHook = isAppear\n+            ? (typeof appear === 'function' ? appear : enter)\n+            : enter;\n+        var afterEnterHook = isAppear\n+            ? (afterAppear || afterEnter)\n+            : afterEnter;\n+        var enterCancelledHook = isAppear\n+            ? (appearCancelled || enterCancelled)\n+            : enterCancelled;\n+\n+        var explicitEnterDuration = toNumber(\n+            isObject(duration)\n+                ? duration.enter\n+                : duration\n+        );\n+\n+        if (explicitEnterDuration != null) {\n+            checkDuration(explicitEnterDuration, 'enter', vnode);\n+        }\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(enterHook);\n+\n+        var cb = el._enterCb = once(function () {\n+            if (expectsCSS) {\n+                removeTransitionClass(el, toClass);\n+                removeTransitionClass(el, activeClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, startClass);\n+                }\n+                enterCancelledHook && enterCancelledHook(el);\n+            } else {\n+                afterEnterHook && afterEnterHook(el);\n+            }\n+            el._enterCb = null;\n+        });\n+\n+        if (!vnode.data.show) {\n+            \u002F\u002F remove pending leave element on enter by injecting an insert hook\n+            mergeVNodeHook(vnode, 'insert', function () {\n+                var parent = el.parentNode;\n+                var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n+                if (pendingNode &&\n+                    pendingNode.tag === vnode.tag &&\n+                    pendingNode.elm._leaveCb\n+                ) {\n+                    pendingNode.elm._leaveCb();\n+                }\n+                enterHook && enterHook(el, cb);\n+            });\n+        }\n+\n+        \u002F\u002F start enter transition\n+        beforeEnterHook && beforeEnterHook(el);\n+        if (expectsCSS) {\n+            addTransitionClass(el, startClass);\n+            addTransitionClass(el, activeClass);\n+            nextFrame(function () {\n+                removeTransitionClass(el, startClass);\n+                if (!cb.cancelled) {\n+                    addTransitionClass(el, toClass);\n+                    if (!userWantsControl) {\n+                        if (isValidDuration(explicitEnterDuration)) {\n+                            setTimeout(cb, explicitEnterDuration);\n+                        } else {\n+                            whenTransitionEnds(el, type, cb);\n+                        }\n+                    }\n+                }\n+            });\n+        }\n+\n+        if (vnode.data.show) {\n+            toggleDisplay && toggleDisplay();\n+            enterHook && enterHook(el, cb);\n+        }\n+\n+        if (!expectsCSS && !userWantsControl) {\n+            cb();\n+        }\n+    }\n+\n+    function leave (vnode, rm) {\n+        var el = vnode.elm;\n+\n+        \u002F\u002F call enter callback now\n+        if (isDef(el._enterCb)) {\n+            el._enterCb.cancelled = true;\n+            el._enterCb();\n+        }\n+\n+        var data = resolveTransition(vnode.data.transition);\n+        if (isUndef(data) || el.nodeType !== 1) {\n+            return rm()\n+        }\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (isDef(el._leaveCb)) {\n+            return\n+        }\n+\n+        var css = data.css;\n+        var type = data.type;\n+        var leaveClass = data.leaveClass;\n+        var leaveToClass = data.leaveToClass;\n+        var leaveActiveClass = data.leaveActiveClass;\n+        var beforeLeave = data.beforeLeave;\n+        var leave = data.leave;\n+        var afterLeave = data.afterLeave;\n+        var leaveCancelled = data.leaveCancelled;\n+        var delayLeave = data.delayLeave;\n+        var duration = data.duration;\n+\n+        var expectsCSS = css !== false && !isIE9;\n+        var userWantsControl = getHookArgumentsLength(leave);\n+\n+        var explicitLeaveDuration = toNumber(\n+            isObject(duration)\n+                ? duration.leave\n+                : duration\n+        );\n+\n+        if (isDef(explicitLeaveDuration)) {\n+            checkDuration(explicitLeaveDuration, 'leave', vnode);\n+        }\n+\n+        var cb = el._leaveCb = once(function () {\n+            if (el.parentNode && el.parentNode._pending) {\n+                el.parentNode._pending[vnode.key] = null;\n+            }\n+            if (expectsCSS) {\n+                removeTransitionClass(el, leaveToClass);\n+                removeTransitionClass(el, leaveActiveClass);\n+            }\n+            if (cb.cancelled) {\n+                if (expectsCSS) {\n+                    removeTransitionClass(el, leaveClass);\n+                }\n+                leaveCancelled && leaveCancelled(el);\n+            } else {\n+                rm();\n+                afterLeave && afterLeave(el);\n+            }\n+            el._leaveCb = null;\n+        });\n+\n+        if (delayLeave) {\n+            delayLeave(performLeave);\n+        } else {\n+            performLeave();\n+        }\n+\n+        function performLeave () {\n+            \u002F\u002F the delayed leave may have already been cancelled\n+            if (cb.cancelled) {\n+                return\n+            }\n+            \u002F\u002F record leaving element\n+            if (!vnode.data.show && el.parentNode) {\n+                (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n+            }\n+            beforeLeave && beforeLeave(el);\n+            if (expectsCSS) {\n+                addTransitionClass(el, leaveClass);\n+                addTransitionClass(el, leaveActiveClass);\n+                nextFrame(function () {\n+                    removeTransitionClass(el, leaveClass);\n+                    if (!cb.cancelled) {\n+                        addTransitionClass(el, leaveToClass);\n+                        if (!userWantsControl) {\n+                            if (isValidDuration(explicitLeaveDuration)) {\n+                                setTimeout(cb, explicitLeaveDuration);\n+                            } else {\n+                                whenTransitionEnds(el, type, cb);\n+                            }\n+                        }\n+                    }\n+                });\n+            }\n+            leave && leave(el, cb);\n+            if (!expectsCSS && !userWantsControl) {\n+                cb();\n+            }\n+        }\n+    }\n+\n+    \u002F\u002F only used in dev mode\n+    function checkDuration (val, name, vnode) {\n+        if (typeof val !== 'number') {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is not a valid number - \" +\n+                \"got \" + (JSON.stringify(val)) + \".\",\n+                vnode.context\n+            );\n+        } else if (isNaN(val)) {\n+            warn(\n+                \"\u003Ctransition> explicit \" + name + \" duration is NaN - \" +\n+                'the duration expression might be incorrect.',\n+                vnode.context\n+            );\n+        }\n+    }\n+\n+    function isValidDuration (val) {\n+        return typeof val === 'number' && !isNaN(val)\n+    }\n+\n+    \u002F**\n+     * Normalize a transition hook's argument length. The hook may be:\n+     * - a merged hook (invoker) with the original in .fns\n+     * - a wrapped component method (check ._length)\n+     * - a plain function (.length)\n+     *\u002F\n+    function getHookArgumentsLength (fn) {\n+        if (isUndef(fn)) {\n+            return false\n+        }\n+        var invokerFns = fn.fns;\n+        if (isDef(invokerFns)) {\n+            \u002F\u002F invoker\n+            return getHookArgumentsLength(\n+                Array.isArray(invokerFns)\n+                    ? invokerFns[0]\n+                    : invokerFns\n+            )\n+        } else {\n+            return (fn._length || fn.length) > 1\n+        }\n+    }\n+\n+    function _enter (_, vnode) {\n+        if (vnode.data.show !== true) {\n+            enter(vnode);\n+        }\n+    }\n+\n+    var transition = inBrowser ? {\n+        create: _enter,\n+        activate: _enter,\n+        remove: function remove$$1 (vnode, rm) {\n+          \u002F* istanbul ignore else *\u002F\n+            if (vnode.data.show !== true) {\n+                leave(vnode, rm);\n+            } else {\n+                rm();\n+            }\n+        }\n+    } : {};\n+\n+    var platformModules = [\n+        attrs,\n+        klass,\n+        events,\n+        domProps,\n+        style,\n+        transition\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F the directive module should be applied last, after all\n+    \u002F\u002F built-in modules have been applied.\n+    var modules = platformModules.concat(baseModules);\n+\n+    var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n+\n+    \u002F**\n+     * Not type checking this file because flow doesn't like attaching\n+     * properties to Elements.\n+     *\u002F\n+\n+  \u002F* istanbul ignore if *\u002F\n+    if (isIE9) {\n+        \u002F\u002F http:\u002F\u002Fwww.matts411.com\u002Fpost\u002Finternet-explorer-9-oninput\u002F\n+        document.addEventListener('selectionchange', function () {\n+            var el = document.activeElement;\n+            if (el && el.vmodel) {\n+                trigger(el, 'input');\n+            }\n+        });\n+    }\n+\n+    var directive = {\n+        inserted: function inserted (el, binding, vnode, oldVnode) {\n+            if (vnode.tag === 'select') {\n+                \u002F\u002F #6903\n+                if (oldVnode.elm && !oldVnode.elm._vOptions) {\n+                    mergeVNodeHook(vnode, 'postpatch', function () {\n+                        directive.componentUpdated(el, binding, vnode);\n+                    });\n+                } else {\n+                    setSelected(el, binding, vnode.context);\n+                }\n+                el._vOptions = [].map.call(el.options, getValue);\n+            } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n+                el._vModifiers = binding.modifiers;\n+                if (!binding.modifiers.lazy) {\n+                    el.addEventListener('compositionstart', onCompositionStart);\n+                    el.addEventListener('compositionend', onCompositionEnd);\n+                    \u002F\u002F Safari \u003C 10.2 & UIWebView doesn't fire compositionend when\n+                    \u002F\u002F switching focus before confirming composition choice\n+                    \u002F\u002F this also fixes the issue where some browsers e.g. iOS Chrome\n+                    \u002F\u002F fires \"change\" instead of \"input\" on autocomplete.\n+                    el.addEventListener('change', onCompositionEnd);\n+                  \u002F* istanbul ignore if *\u002F\n+                    if (isIE9) {\n+                        el.vmodel = true;\n+                    }\n+                }\n+            }\n+        },\n+\n+        componentUpdated: function componentUpdated (el, binding, vnode) {\n+            if (vnode.tag === 'select') {\n+                setSelected(el, binding, vnode.context);\n+                \u002F\u002F in case the options rendered by v-for have changed,\n+                \u002F\u002F it's possible that the value is out-of-sync with the rendered options.\n+                \u002F\u002F detect such cases and filter out values that no longer has a matching\n+                \u002F\u002F option in the DOM.\n+                var prevOptions = el._vOptions;\n+                var curOptions = el._vOptions = [].map.call(el.options, getValue);\n+                if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n+                    \u002F\u002F trigger change event if\n+                    \u002F\u002F no matching option found for at least one value\n+                    var needReset = el.multiple\n+                        ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n+                        : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n+                    if (needReset) {\n+                        trigger(el, 'change');\n+                    }\n+                }\n+            }\n+        }\n+    };\n+\n+    function setSelected (el, binding, vm) {\n+        actuallySetSelected(el, binding, vm);\n+      \u002F* istanbul ignore if *\u002F\n+        if (isIE || isEdge) {\n+            setTimeout(function () {\n+                actuallySetSelected(el, binding, vm);\n+            }, 0);\n+        }\n+    }\n+\n+    function actuallySetSelected (el, binding, vm) {\n+        var value = binding.value;\n+        var isMultiple = el.multiple;\n+        if (isMultiple && !Array.isArray(value)) {\n+            warn(\n+                \"\u003Cselect multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n+                \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n+                vm\n+            );\n+            return\n+        }\n+        var selected, option;\n+        for (var i = 0, l = el.options.length; i \u003C l; i++) {\n+            option = el.options[i];\n+            if (isMultiple) {\n+                selected = looseIndexOf(value, getValue(option)) > -1;\n+                if (option.selected !== selected) {\n+                    option.selected = selected;\n+                }\n+            } else {\n+                if (looseEqual(getValue(option), value)) {\n+                    if (el.selectedIndex !== i) {\n+                        el.selectedIndex = i;\n+                    }\n+                    return\n+                }\n+            }\n+        }\n+        if (!isMultiple) {\n+            el.selectedIndex = -1;\n+        }\n+    }\n+\n+    function hasNoMatchingOption (value, options) {\n+        return options.every(function (o) { return !looseEqual(o, value); })\n+    }\n+\n+    function getValue (option) {\n+        return '_value' in option\n+            ? option._value\n+            : option.value\n+    }\n+\n+    function onCompositionStart (e) {\n+        e.target.composing = true;\n+    }\n+\n+    function onCompositionEnd (e) {\n+        \u002F\u002F prevent triggering an input event for no reason\n+        if (!e.target.composing) { return }\n+        e.target.composing = false;\n+        trigger(e.target, 'input');\n+    }\n+\n+    function trigger (el, type) {\n+        var e = document.createEvent('HTMLEvents');\n+        e.initEvent(type, true, true);\n+        el.dispatchEvent(e);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F recursively search for possible transition defined inside the component root\n+    function locateNode (vnode) {\n+        return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n+            ? locateNode(vnode.componentInstance._vnode)\n+            : vnode\n+    }\n+\n+    var show = {\n+        bind: function bind (el, ref, vnode) {\n+            var value = ref.value;\n+\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            var originalDisplay = el.__vOriginalDisplay =\n+                el.style.display === 'none' ? '' : el.style.display;\n+            if (value && transition$$1) {\n+                vnode.data.show = true;\n+                enter(vnode, function () {\n+                    el.style.display = originalDisplay;\n+                });\n+            } else {\n+                el.style.display = value ? originalDisplay : 'none';\n+            }\n+        },\n+\n+        update: function update (el, ref, vnode) {\n+            var value = ref.value;\n+            var oldValue = ref.oldValue;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            if (!value === !oldValue) { return }\n+            vnode = locateNode(vnode);\n+            var transition$$1 = vnode.data && vnode.data.transition;\n+            if (transition$$1) {\n+                vnode.data.show = true;\n+                if (value) {\n+                    enter(vnode, function () {\n+                        el.style.display = el.__vOriginalDisplay;\n+                    });\n+                } else {\n+                    leave(vnode, function () {\n+                        el.style.display = 'none';\n+                    });\n+                }\n+            } else {\n+                el.style.display = value ? el.__vOriginalDisplay : 'none';\n+            }\n+        },\n+\n+        unbind: function unbind (\n+            el,\n+            binding,\n+            vnode,\n+            oldVnode,\n+            isDestroy\n+        ) {\n+            if (!isDestroy) {\n+                el.style.display = el.__vOriginalDisplay;\n+            }\n+        }\n+    };\n+\n+    var platformDirectives = {\n+        model: directive,\n+        show: show\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var transitionProps = {\n+        name: String,\n+        appear: Boolean,\n+        css: Boolean,\n+        mode: String,\n+        type: String,\n+        enterClass: String,\n+        leaveClass: String,\n+        enterToClass: String,\n+        leaveToClass: String,\n+        enterActiveClass: String,\n+        leaveActiveClass: String,\n+        appearClass: String,\n+        appearActiveClass: String,\n+        appearToClass: String,\n+        duration: [Number, String, Object]\n+    };\n+\n+    \u002F\u002F in case the child is also an abstract component, e.g. \u003Ckeep-alive>\n+    \u002F\u002F we want to recursively retrieve the real component to be rendered\n+    function getRealChild (vnode) {\n+        var compOptions = vnode && vnode.componentOptions;\n+        if (compOptions && compOptions.Ctor.options.abstract) {\n+            return getRealChild(getFirstComponentChild(compOptions.children))\n+        } else {\n+            return vnode\n+        }\n+    }\n+\n+    function extractTransitionData (comp) {\n+        var data = {};\n+        var options = comp.$options;\n+        \u002F\u002F props\n+        for (var key in options.propsData) {\n+            data[key] = comp[key];\n+        }\n+        \u002F\u002F events.\n+        \u002F\u002F extract listeners and pass them directly to the transition methods\n+        var listeners = options._parentListeners;\n+        for (var key$1 in listeners) {\n+            data[camelize(key$1)] = listeners[key$1];\n+        }\n+        return data\n+    }\n+\n+    function placeholder (h, rawChild) {\n+        if (\u002F\\d-keep-alive$\u002F.test(rawChild.tag)) {\n+            return h('keep-alive', {\n+                props: rawChild.componentOptions.propsData\n+            })\n+        }\n+    }\n+\n+    function hasParentTransition (vnode) {\n+        while ((vnode = vnode.parent)) {\n+            if (vnode.data.transition) {\n+                return true\n+            }\n+        }\n+    }\n+\n+    function isSameChild (child, oldChild) {\n+        return oldChild.key === child.key && oldChild.tag === child.tag\n+    }\n+\n+    var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n+\n+    var isVShowDirective = function (d) { return d.name === 'show'; };\n+\n+    var Transition = {\n+        name: 'transition',\n+        props: transitionProps,\n+        abstract: true,\n+\n+        render: function render (h) {\n+            var this$1 = this;\n+\n+            var children = this.$slots.default;\n+            if (!children) {\n+                return\n+            }\n+\n+            \u002F\u002F filter out text nodes (possible whitespaces)\n+            children = children.filter(isNotTextNode);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!children.length) {\n+                return\n+            }\n+\n+            \u002F\u002F warn multiple elements\n+            if (children.length > 1) {\n+                warn(\n+                    '\u003Ctransition> can only be used on a single element. Use ' +\n+                    '\u003Ctransition-group> for lists.',\n+                    this.$parent\n+                );\n+            }\n+\n+            var mode = this.mode;\n+\n+            \u002F\u002F warn invalid mode\n+            if (mode && mode !== 'in-out' && mode !== 'out-in'\n+            ) {\n+                warn(\n+                    'invalid \u003Ctransition> mode: ' + mode,\n+                    this.$parent\n+                );\n+            }\n+\n+            var rawChild = children[0];\n+\n+            \u002F\u002F if this is a component root node and the component's\n+            \u002F\u002F parent container node also has transition, skip.\n+            if (hasParentTransition(this.$vnode)) {\n+                return rawChild\n+            }\n+\n+            \u002F\u002F apply transition data to child\n+            \u002F\u002F use getRealChild() to ignore abstract components e.g. keep-alive\n+            var child = getRealChild(rawChild);\n+          \u002F* istanbul ignore if *\u002F\n+            if (!child) {\n+                return rawChild\n+            }\n+\n+            if (this._leaving) {\n+                return placeholder(h, rawChild)\n+            }\n+\n+            \u002F\u002F ensure a key that is unique to the vnode type and to this transition\n+            \u002F\u002F component instance. This key will be used to remove pending leaving nodes\n+            \u002F\u002F during entering.\n+            var id = \"__transition-\" + (this._uid) + \"-\";\n+            child.key = child.key == null\n+                ? child.isComment\n+                    ? id + 'comment'\n+                    : id + child.tag\n+                : isPrimitive(child.key)\n+                    ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n+                    : child.key;\n+\n+            var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n+            var oldRawChild = this._vnode;\n+            var oldChild = getRealChild(oldRawChild);\n+\n+            \u002F\u002F mark v-show\n+            \u002F\u002F so that the transition module can hand over the control to the directive\n+            if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n+                child.data.show = true;\n+            }\n+\n+            if (\n+                oldChild &&\n+                oldChild.data &&\n+                !isSameChild(child, oldChild) &&\n+                !isAsyncPlaceholder(oldChild) &&\n+                \u002F\u002F #6687 component root is a comment node\n+                !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n+            ) {\n+                \u002F\u002F replace old child transition data with fresh one\n+                \u002F\u002F important for dynamic transitions!\n+                var oldData = oldChild.data.transition = extend({}, data);\n+                \u002F\u002F handle transition mode\n+                if (mode === 'out-in') {\n+                    \u002F\u002F return placeholder node and queue update when leave finishes\n+                    this._leaving = true;\n+                    mergeVNodeHook(oldData, 'afterLeave', function () {\n+                        this$1._leaving = false;\n+                        this$1.$forceUpdate();\n+                    });\n+                    return placeholder(h, rawChild)\n+                } else if (mode === 'in-out') {\n+                    if (isAsyncPlaceholder(child)) {\n+                        return oldRawChild\n+                    }\n+                    var delayedLeave;\n+                    var performLeave = function () { delayedLeave(); };\n+                    mergeVNodeHook(data, 'afterEnter', performLeave);\n+                    mergeVNodeHook(data, 'enterCancelled', performLeave);\n+                    mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n+                }\n+            }\n+\n+            return rawChild\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var props = extend({\n+        tag: String,\n+        moveClass: String\n+    }, transitionProps);\n+\n+    delete props.mode;\n+\n+    var TransitionGroup = {\n+        props: props,\n+\n+        beforeMount: function beforeMount () {\n+            var this$1 = this;\n+\n+            var update = this._update;\n+            this._update = function (vnode, hydrating) {\n+                var restoreActiveInstance = setActiveInstance(this$1);\n+                \u002F\u002F force removing pass\n+                this$1.__patch__(\n+                    this$1._vnode,\n+                    this$1.kept,\n+                    false, \u002F\u002F hydrating\n+                    true \u002F\u002F removeOnly (!important, avoids unnecessary moves)\n+                );\n+                this$1._vnode = this$1.kept;\n+                restoreActiveInstance();\n+                update.call(this$1, vnode, hydrating);\n+            };\n+        },\n+\n+        render: function render (h) {\n+            var tag = this.tag || this.$vnode.data.tag || 'span';\n+            var map = Object.create(null);\n+            var prevChildren = this.prevChildren = this.children;\n+            var rawChildren = this.$slots.default || [];\n+            var children = this.children = [];\n+            var transitionData = extractTransitionData(this);\n+\n+            for (var i = 0; i \u003C rawChildren.length; i++) {\n+                var c = rawChildren[i];\n+                if (c.tag) {\n+                    if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n+                        children.push(c);\n+                        map[c.key] = c\n+                        ;(c.data || (c.data = {})).transition = transitionData;\n+                    } else {\n+                        var opts = c.componentOptions;\n+                        var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n+                        warn((\"\u003Ctransition-group> children must be keyed: \u003C\" + name + \">\"));\n+                    }\n+                }\n+            }\n+\n+            if (prevChildren) {\n+                var kept = [];\n+                var removed = [];\n+                for (var i$1 = 0; i$1 \u003C prevChildren.length; i$1++) {\n+                    var c$1 = prevChildren[i$1];\n+                    c$1.data.transition = transitionData;\n+                    c$1.data.pos = c$1.elm.getBoundingClientRect();\n+                    if (map[c$1.key]) {\n+                        kept.push(c$1);\n+                    } else {\n+                        removed.push(c$1);\n+                    }\n+                }\n+                this.kept = h(tag, null, kept);\n+                this.removed = removed;\n+            }\n+\n+            return h(tag, null, children)\n+        },\n+\n+        updated: function updated () {\n+            var children = this.prevChildren;\n+            var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n+            if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n+                return\n+            }\n+\n+            \u002F\u002F we divide the work into three loops to avoid mixing DOM reads and writes\n+            \u002F\u002F in each iteration - which helps prevent layout thrashing.\n+            children.forEach(callPendingCbs);\n+            children.forEach(recordPosition);\n+            children.forEach(applyTranslation);\n+\n+            \u002F\u002F force reflow to put everything in position\n+            \u002F\u002F assign to this to avoid being removed in tree-shaking\n+            \u002F\u002F $flow-disable-line\n+            this._reflow = document.body.offsetHeight;\n+\n+            children.forEach(function (c) {\n+                if (c.data.moved) {\n+                    var el = c.elm;\n+                    var s = el.style;\n+                    addTransitionClass(el, moveClass);\n+                    s.transform = s.WebkitTransform = s.transitionDuration = '';\n+                    el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n+                        if (e && e.target !== el) {\n+                            return\n+                        }\n+                        if (!e || \u002Ftransform$\u002F.test(e.propertyName)) {\n+                            el.removeEventListener(transitionEndEvent, cb);\n+                            el._moveCb = null;\n+                            removeTransitionClass(el, moveClass);\n+                        }\n+                    });\n+                }\n+            });\n+        },\n+\n+        methods: {\n+            hasMove: function hasMove (el, moveClass) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (!hasTransition) {\n+                    return false\n+                }\n+              \u002F* istanbul ignore if *\u002F\n+                if (this._hasMove) {\n+                    return this._hasMove\n+                }\n+                \u002F\u002F Detect whether an element with the move class applied has\n+                \u002F\u002F CSS transitions. Since the element may be inside an entering\n+                \u002F\u002F transition at this very moment, we make a clone of it and remove\n+                \u002F\u002F all other transition classes applied to ensure only the move class\n+                \u002F\u002F is applied.\n+                var clone = el.cloneNode();\n+                if (el._transitionClasses) {\n+                    el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n+                }\n+                addClass(clone, moveClass);\n+                clone.style.display = 'none';\n+                this.$el.appendChild(clone);\n+                var info = getTransitionInfo(clone);\n+                this.$el.removeChild(clone);\n+                return (this._hasMove = info.hasTransform)\n+            }\n+        }\n+    };\n+\n+    function callPendingCbs (c) {\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._moveCb) {\n+            c.elm._moveCb();\n+        }\n+      \u002F* istanbul ignore if *\u002F\n+        if (c.elm._enterCb) {\n+            c.elm._enterCb();\n+        }\n+    }\n+\n+    function recordPosition (c) {\n+        c.data.newPos = c.elm.getBoundingClientRect();\n+    }\n+\n+    function applyTranslation (c) {\n+        var oldPos = c.data.pos;\n+        var newPos = c.data.newPos;\n+        var dx = oldPos.left - newPos.left;\n+        var dy = oldPos.top - newPos.top;\n+        if (dx || dy) {\n+            c.data.moved = true;\n+            var s = c.elm.style;\n+            s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n+            s.transitionDuration = '0s';\n+        }\n+    }\n+\n+    var platformComponents = {\n+        Transition: Transition,\n+        TransitionGroup: TransitionGroup\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F install platform specific utils\n+    Vue.config.mustUseProp = mustUseProp;\n+    Vue.config.isReservedTag = isReservedTag;\n+    Vue.config.isReservedAttr = isReservedAttr;\n+    Vue.config.getTagNamespace = getTagNamespace;\n+    Vue.config.isUnknownElement = isUnknownElement;\n+\n+    \u002F\u002F install platform runtime directives & components\n+    extend(Vue.options.directives, platformDirectives);\n+    extend(Vue.options.components, platformComponents);\n+\n+    \u002F\u002F install platform patch function\n+    Vue.prototype.__patch__ = inBrowser ? patch : noop;\n+\n+    \u002F\u002F public mount method\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && inBrowser ? query(el) : undefined;\n+        return mountComponent(this, el, hydrating)\n+    };\n+\n+    \u002F\u002F devtools global hook\n+  \u002F* istanbul ignore next *\u002F\n+    if (inBrowser) {\n+        setTimeout(function () {\n+            if (config.devtools) {\n+                if (devtools) {\n+                    devtools.emit('init', Vue);\n+                } else {\n+                    console[console.info ? 'info' : 'log'](\n+                        'Download the Vue Devtools extension for a better development experience:\\n' +\n+                        'https:\u002F\u002Fgithub.com\u002Fvuejs\u002Fvue-devtools'\n+                    );\n+                }\n+            }\n+            if (config.productionTip !== false &&\n+                typeof console !== 'undefined'\n+            ) {\n+                console[console.info ? 'info' : 'log'](\n+                    \"You are running Vue in development mode.\\n\" +\n+                    \"Make sure to turn on production mode when deploying for production.\\n\" +\n+                    \"See more tips at https:\u002F\u002Fvuejs.org\u002Fguide\u002Fdeployment.html\"\n+                );\n+            }\n+        }, 0);\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var defaultTagRE = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg;\n+    var regexEscapeRE = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg;\n+\n+    var buildRegex = cached(function (delimiters) {\n+        var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n+        var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n+        return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n+    });\n+\n+\n+\n+    function parseText (\n+        text,\n+        delimiters\n+    ) {\n+        var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n+        if (!tagRE.test(text)) {\n+            return\n+        }\n+        var tokens = [];\n+        var rawTokens = [];\n+        var lastIndex = tagRE.lastIndex = 0;\n+        var match, index, tokenValue;\n+        while ((match = tagRE.exec(text))) {\n+            index = match.index;\n+            \u002F\u002F push text token\n+            if (index > lastIndex) {\n+                rawTokens.push(tokenValue = text.slice(lastIndex, index));\n+                tokens.push(JSON.stringify(tokenValue));\n+            }\n+            \u002F\u002F tag token\n+            var exp = parseFilters(match[1].trim());\n+            tokens.push((\"_s(\" + exp + \")\"));\n+            rawTokens.push({ '@binding': exp });\n+            lastIndex = index + match[0].length;\n+        }\n+        if (lastIndex \u003C text.length) {\n+            rawTokens.push(tokenValue = text.slice(lastIndex));\n+            tokens.push(JSON.stringify(tokenValue));\n+        }\n+        return {\n+            expression: tokens.join('+'),\n+            tokens: rawTokens\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticClass = getAndRemoveAttr(el, 'class');\n+        if (staticClass) {\n+            var res = parseText(staticClass, options.delimiters);\n+            if (res) {\n+                warn(\n+                    \"class=\\\"\" + staticClass + \"\\\": \" +\n+                    'Interpolation inside attributes has been removed. ' +\n+                    'Use v-bind or the colon shorthand instead. For example, ' +\n+                    'instead of \u003Cdiv class=\"{{ val }}\">, use \u003Cdiv :class=\"val\">.',\n+                    el.rawAttrsMap['class']\n+                );\n+            }\n+        }\n+        if (staticClass) {\n+            el.staticClass = JSON.stringify(staticClass);\n+        }\n+        var classBinding = getBindingAttr(el, 'class', false \u002F* getStatic *\u002F);\n+        if (classBinding) {\n+            el.classBinding = classBinding;\n+        }\n+    }\n+\n+    function genData (el) {\n+        var data = '';\n+        if (el.staticClass) {\n+            data += \"staticClass:\" + (el.staticClass) + \",\";\n+        }\n+        if (el.classBinding) {\n+            data += \"class:\" + (el.classBinding) + \",\";\n+        }\n+        return data\n+    }\n+\n+    var klass$1 = {\n+        staticKeys: ['staticClass'],\n+        transformNode: transformNode,\n+        genData: genData\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    function transformNode$1 (el, options) {\n+        var warn = options.warn || baseWarn;\n+        var staticStyle = getAndRemoveAttr(el, 'style');\n+        if (staticStyle) {\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                var res = parseText(staticStyle, options.delimiters);\n+                if (res) {\n+                    warn(\n+                        \"style=\\\"\" + staticStyle + \"\\\": \" +\n+                        'Interpolation inside attributes has been removed. ' +\n+                        'Use v-bind or the colon shorthand instead. For example, ' +\n+                        'instead of \u003Cdiv style=\"{{ val }}\">, use \u003Cdiv :style=\"val\">.',\n+                        el.rawAttrsMap['style']\n+                    );\n+                }\n+            }\n+            el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n+        }\n+\n+        var styleBinding = getBindingAttr(el, 'style', false \u002F* getStatic *\u002F);\n+        if (styleBinding) {\n+            el.styleBinding = styleBinding;\n+        }\n+    }\n+\n+    function genData$1 (el) {\n+        var data = '';\n+        if (el.staticStyle) {\n+            data += \"staticStyle:\" + (el.staticStyle) + \",\";\n+        }\n+        if (el.styleBinding) {\n+            data += \"style:(\" + (el.styleBinding) + \"),\";\n+        }\n+        return data\n+    }\n+\n+    var style$1 = {\n+        staticKeys: ['staticStyle'],\n+        transformNode: transformNode$1,\n+        genData: genData$1\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var decoder;\n+\n+    var he = {\n+        decode: function decode (html) {\n+            decoder = decoder || document.createElement('div');\n+            decoder.innerHTML = html;\n+            return decoder.textContent\n+        }\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isUnaryTag = makeMap(\n+        'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n+        'link,meta,param,source,track,wbr'\n+    );\n+\n+    \u002F\u002F Elements that you can, intentionally, leave open\n+    \u002F\u002F (and which close themselves)\n+    var canBeLeftOpenTag = makeMap(\n+        'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n+    );\n+\n+    \u002F\u002F HTML5 tags https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Findices.html#elements-3\n+    \u002F\u002F Phrasing Content https:\u002F\u002Fhtml.spec.whatwg.org\u002Fmultipage\u002Fdom.html#phrasing-content\n+    var isNonPhrasingTag = makeMap(\n+        'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n+        'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n+        'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n+        'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n+        'title,tr,track'\n+    );\n+\n+    \u002F**\n+     * Not type-checking this file because it's mostly vendor code.\n+     *\u002F\n+\n+        \u002F\u002F Regular Expressions for parsing tags and attributes\n+    var attribute = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var dynamicArgAttribute = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F;\n+    var ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\n+    var qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\n+    var startTagOpen = new RegExp((\"^\u003C\" + qnameCapture));\n+    var startTagClose = \u002F^\\s*(\\\u002F?)>\u002F;\n+    var endTag = new RegExp((\"^\u003C\\\\\u002F\" + qnameCapture + \"[^>]*>\"));\n+    var doctype = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi;\n+    \u002F\u002F #7298: escape - to avoid being pased as HTML comment when inlined in page\n+    var comment = \u002F^\u003C!\\--\u002F;\n+    var conditionalComment = \u002F^\u003C!\\[\u002F;\n+\n+    \u002F\u002F Special Elements (can contain anything)\n+    var isPlainTextElement = makeMap('script,style,textarea', true);\n+    var reCache = {};\n+\n+    var decodingMap = {\n+        '&lt;': '\u003C',\n+        '&gt;': '>',\n+        '&quot;': '\"',\n+        '&amp;': '&',\n+        '&#10;': '\\n',\n+        '&#9;': '\\t',\n+        '&#39;': \"'\"\n+    };\n+    var encodedAttr = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg;\n+    var encodedAttrWithNewLines = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg;\n+\n+    \u002F\u002F #5992\n+    var isIgnoreNewlineTag = makeMap('pre,textarea', true);\n+    var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n+\n+    function decodeAttr (value, shouldDecodeNewlines) {\n+        var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n+        return value.replace(re, function (match) { return decodingMap[match]; })\n+    }\n+\n+    function parseHTML (html, options) {\n+        var stack = [];\n+        var expectHTML = options.expectHTML;\n+        var isUnaryTag$$1 = options.isUnaryTag || no;\n+        var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n+        var index = 0;\n+        var last, lastTag;\n+        while (html) {\n+            last = html;\n+            \u002F\u002F Make sure we're not in a plaintext content element like script\u002Fstyle\n+            if (!lastTag || !isPlainTextElement(lastTag)) {\n+                var textEnd = html.indexOf('\u003C');\n+                if (textEnd === 0) {\n+                    \u002F\u002F Comment:\n+                    if (comment.test(html)) {\n+                        var commentEnd = html.indexOf('-->');\n+\n+                        if (commentEnd >= 0) {\n+                            if (options.shouldKeepComment) {\n+                                options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n+                            }\n+                            advance(commentEnd + 3);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FConditional_comment#Downlevel-revealed_conditional_comment\n+                    if (conditionalComment.test(html)) {\n+                        var conditionalEnd = html.indexOf(']>');\n+\n+                        if (conditionalEnd >= 0) {\n+                            advance(conditionalEnd + 2);\n+                            continue\n+                        }\n+                    }\n+\n+                    \u002F\u002F Doctype:\n+                    var doctypeMatch = html.match(doctype);\n+                    if (doctypeMatch) {\n+                        advance(doctypeMatch[0].length);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F End tag:\n+                    var endTagMatch = html.match(endTag);\n+                    if (endTagMatch) {\n+                        var curIndex = index;\n+                        advance(endTagMatch[0].length);\n+                        parseEndTag(endTagMatch[1], curIndex, index);\n+                        continue\n+                    }\n+\n+                    \u002F\u002F Start tag:\n+                    var startTagMatch = parseStartTag();\n+                    if (startTagMatch) {\n+                        handleStartTag(startTagMatch);\n+                        if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n+                            advance(1);\n+                        }\n+                        continue\n+                    }\n+                }\n+\n+                var text = (void 0), rest = (void 0), next = (void 0);\n+                if (textEnd >= 0) {\n+                    rest = html.slice(textEnd);\n+                    while (\n+                    !endTag.test(rest) &&\n+                    !startTagOpen.test(rest) &&\n+                    !comment.test(rest) &&\n+                    !conditionalComment.test(rest)\n+                        ) {\n+                        \u002F\u002F \u003C in plain text, be forgiving and treat it as text\n+                        next = rest.indexOf('\u003C', 1);\n+                        if (next \u003C 0) { break }\n+                        textEnd += next;\n+                        rest = html.slice(textEnd);\n+                    }\n+                    text = html.substring(0, textEnd);\n+                }\n+\n+                if (textEnd \u003C 0) {\n+                    text = html;\n+                }\n+\n+                if (text) {\n+                    advance(text.length);\n+                }\n+\n+                if (options.chars && text) {\n+                    options.chars(text, index - text.length, index);\n+                }\n+            } else {\n+                var endTagLength = 0;\n+                var stackedTag = lastTag.toLowerCase();\n+                var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(\u003C\u002F' + stackedTag + '[^>]*>)', 'i'));\n+                var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n+                    endTagLength = endTag.length;\n+                    if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n+                        text = text\n+                            .replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, '$1') \u002F\u002F #7298\n+                            .replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, '$1');\n+                    }\n+                    if (shouldIgnoreFirstNewline(stackedTag, text)) {\n+                        text = text.slice(1);\n+                    }\n+                    if (options.chars) {\n+                        options.chars(text);\n+                    }\n+                    return ''\n+                });\n+                index += html.length - rest$1.length;\n+                html = rest$1;\n+                parseEndTag(stackedTag, index - endTagLength, index);\n+            }\n+\n+            if (html === last) {\n+                options.chars && options.chars(html);\n+                if (!stack.length && options.warn) {\n+                    options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n+                }\n+                break\n+            }\n+        }\n+\n+        \u002F\u002F Clean up any remaining tags\n+        parseEndTag();\n+\n+        function advance (n) {\n+            index += n;\n+            html = html.substring(n);\n+        }\n+\n+        function parseStartTag () {\n+            var start = html.match(startTagOpen);\n+            if (start) {\n+                var match = {\n+                    tagName: start[1],\n+                    attrs: [],\n+                    start: index\n+                };\n+                advance(start[0].length);\n+                var end, attr;\n+                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n+                    attr.start = index;\n+                    advance(attr[0].length);\n+                    attr.end = index;\n+                    match.attrs.push(attr);\n+                }\n+                if (end) {\n+                    match.unarySlash = end[1];\n+                    advance(end[0].length);\n+                    match.end = index;\n+                    return match\n+                }\n+            }\n+        }\n+\n+        function handleStartTag (match) {\n+            var tagName = match.tagName;\n+            var unarySlash = match.unarySlash;\n+\n+            if (expectHTML) {\n+                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n+                    parseEndTag(lastTag);\n+                }\n+                if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n+                    parseEndTag(tagName);\n+                }\n+            }\n+\n+            var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n+\n+            var l = match.attrs.length;\n+            var attrs = new Array(l);\n+            for (var i = 0; i \u003C l; i++) {\n+                var args = match.attrs[i];\n+                var value = args[3] || args[4] || args[5] || '';\n+                var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n+                    ? options.shouldDecodeNewlinesForHref\n+                    : options.shouldDecodeNewlines;\n+                attrs[i] = {\n+                    name: args[1],\n+                    value: decodeAttr(value, shouldDecodeNewlines)\n+                };\n+                if (options.outputSourceRange) {\n+                    attrs[i].start = args.start + args[0].match(\u002F^\\s*\u002F).length;\n+                    attrs[i].end = args.end;\n+                }\n+            }\n+\n+            if (!unary) {\n+                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n+                lastTag = tagName;\n+            }\n+\n+            if (options.start) {\n+                options.start(tagName, attrs, unary, match.start, match.end);\n+            }\n+        }\n+\n+        function parseEndTag (tagName, start, end) {\n+            var pos, lowerCasedTagName;\n+            if (start == null) { start = index; }\n+            if (end == null) { end = index; }\n+\n+            \u002F\u002F Find the closest opened tag of the same type\n+            if (tagName) {\n+                lowerCasedTagName = tagName.toLowerCase();\n+                for (pos = stack.length - 1; pos >= 0; pos--) {\n+                    if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n+                        break\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F If no tag name is provided, clean shop\n+                pos = 0;\n+            }\n+\n+            if (pos >= 0) {\n+                \u002F\u002F Close all the open elements, up the stack\n+                for (var i = stack.length - 1; i >= pos; i--) {\n+                    if (i > pos || !tagName &&\n+                        options.warn\n+                    ) {\n+                        options.warn(\n+                            (\"tag \u003C\" + (stack[i].tag) + \"> has no matching end tag.\"),\n+                            { start: stack[i].start, end: stack[i].end }\n+                        );\n+                    }\n+                    if (options.end) {\n+                        options.end(stack[i].tag, start, end);\n+                    }\n+                }\n+\n+                \u002F\u002F Remove the open elements from the stack\n+                stack.length = pos;\n+                lastTag = pos && stack[pos - 1].tag;\n+            } else if (lowerCasedTagName === 'br') {\n+                if (options.start) {\n+                    options.start(tagName, [], true, start, end);\n+                }\n+            } else if (lowerCasedTagName === 'p') {\n+                if (options.start) {\n+                    options.start(tagName, [], false, start, end);\n+                }\n+                if (options.end) {\n+                    options.end(tagName, start, end);\n+                }\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var onRE = \u002F^@|^v-on:\u002F;\n+    var dirRE = \u002F^v-|^@|^:\u002F;\n+    var forAliasRE = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F;\n+    var forIteratorRE = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F;\n+    var stripParensRE = \u002F^\\(|\\)$\u002Fg;\n+    var dynamicArgRE = \u002F^\\[.*\\]$\u002F;\n+\n+    var argRE = \u002F:(.*)$\u002F;\n+    var bindRE = \u002F^:|^\\.|^v-bind:\u002F;\n+    var modifierRE = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg;\n+\n+    var slotRE = \u002F^v-slot(:|$)|^#\u002F;\n+\n+    var lineBreakRE = \u002F[\\r\\n]\u002F;\n+    var whitespaceRE$1 = \u002F\\s+\u002Fg;\n+\n+    var invalidAttributeRE = \u002F[\\s\"'\u003C>\\\u002F=]\u002F;\n+\n+    var decodeHTMLCached = cached(he.decode);\n+\n+    var emptySlotScopeToken = \"_empty_\";\n+\n+    \u002F\u002F configurable state\n+    var warn$2;\n+    var delimiters;\n+    var transforms;\n+    var preTransforms;\n+    var postTransforms;\n+    var platformIsPreTag;\n+    var platformMustUseProp;\n+    var platformGetTagNamespace;\n+    var maybeComponent;\n+\n+    function createASTElement (\n+        tag,\n+        attrs,\n+        parent\n+    ) {\n+        return {\n+            type: 1,\n+            tag: tag,\n+            attrsList: attrs,\n+            attrsMap: makeAttrsMap(attrs),\n+            rawAttrsMap: {},\n+            parent: parent,\n+            children: []\n+        }\n+    }\n+\n+    \u002F**\n+     * Convert HTML string to AST.\n+     *\u002F\n+    function parse (\n+        template,\n+        options\n+    ) {\n+        warn$2 = options.warn || baseWarn;\n+\n+        platformIsPreTag = options.isPreTag || no;\n+        platformMustUseProp = options.mustUseProp || no;\n+        platformGetTagNamespace = options.getTagNamespace || no;\n+        var isReservedTag = options.isReservedTag || no;\n+        maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+\n+        transforms = pluckModuleFunction(options.modules, 'transformNode');\n+        preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n+        postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n+\n+        delimiters = options.delimiters;\n+\n+        var stack = [];\n+        var preserveWhitespace = options.preserveWhitespace !== false;\n+        var whitespaceOption = options.whitespace;\n+        var root;\n+        var currentParent;\n+        var inVPre = false;\n+        var inPre = false;\n+        var warned = false;\n+\n+        function warnOnce (msg, range) {\n+            if (!warned) {\n+                warned = true;\n+                warn$2(msg, range);\n+            }\n+        }\n+\n+        function closeElement (element) {\n+            trimEndingWhitespace(element);\n+            if (!inVPre && !element.processed) {\n+                element = processElement(element, options);\n+            }\n+            \u002F\u002F tree management\n+            if (!stack.length && element !== root) {\n+                \u002F\u002F allow root elements with v-if, v-else-if and v-else\n+                if (root.if && (element.elseif || element.else)) {\n+                    {\n+                        checkRootConstraints(element);\n+                    }\n+                    addIfCondition(root, {\n+                        exp: element.elseif,\n+                        block: element\n+                    });\n+                } else {\n+                    warnOnce(\n+                        \"Component template should contain exactly one root element. \" +\n+                        \"If you are using v-if on multiple elements, \" +\n+                        \"use v-else-if to chain them instead.\",\n+                        { start: element.start }\n+                    );\n+                }\n+            }\n+            if (currentParent && !element.forbidden) {\n+                if (element.elseif || element.else) {\n+                    processIfConditions(element, currentParent);\n+                } else {\n+                    if (element.slotScope) {\n+                        \u002F\u002F scoped slot\n+                        \u002F\u002F keep it in the children list so that v-else(-if) conditions can\n+                        \u002F\u002F find it as the prev node.\n+                        var name = element.slotTarget || '\"default\"'\n+                        ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n+                    }\n+                    currentParent.children.push(element);\n+                    element.parent = currentParent;\n+                }\n+            }\n+\n+            \u002F\u002F final children cleanup\n+            \u002F\u002F filter out scoped slots\n+            element.children = element.children.filter(function (c) { return !(c).slotScope; });\n+            \u002F\u002F remove trailing whitespace node again\n+            trimEndingWhitespace(element);\n+\n+            \u002F\u002F check pre state\n+            if (element.pre) {\n+                inVPre = false;\n+            }\n+            if (platformIsPreTag(element.tag)) {\n+                inPre = false;\n+            }\n+            \u002F\u002F apply post-transforms\n+            for (var i = 0; i \u003C postTransforms.length; i++) {\n+                postTransforms[i](element, options);\n+            }\n+        }\n+\n+        function trimEndingWhitespace (el) {\n+            \u002F\u002F remove trailing whitespace node\n+            if (!inPre) {\n+                var lastNode;\n+                while (\n+                (lastNode = el.children[el.children.length - 1]) &&\n+                lastNode.type === 3 &&\n+                lastNode.text === ' '\n+                    ) {\n+                    el.children.pop();\n+                }\n+            }\n+        }\n+\n+        function checkRootConstraints (el) {\n+            if (el.tag === 'slot' || el.tag === 'template') {\n+                warnOnce(\n+                    \"Cannot use \u003C\" + (el.tag) + \"> as component root element because it may \" +\n+                    'contain multiple nodes.',\n+                    { start: el.start }\n+                );\n+            }\n+            if (el.attrsMap.hasOwnProperty('v-for')) {\n+                warnOnce(\n+                    'Cannot use v-for on stateful component root element because ' +\n+                    'it renders multiple elements.',\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+\n+        parseHTML(template, {\n+            warn: warn$2,\n+            expectHTML: options.expectHTML,\n+            isUnaryTag: options.isUnaryTag,\n+            canBeLeftOpenTag: options.canBeLeftOpenTag,\n+            shouldDecodeNewlines: options.shouldDecodeNewlines,\n+            shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n+            shouldKeepComment: options.comments,\n+            outputSourceRange: options.outputSourceRange,\n+            start: function start (tag, attrs, unary, start$1, end) {\n+                \u002F\u002F check namespace.\n+                \u002F\u002F inherit parent ns if there is one\n+                var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n+\n+                \u002F\u002F handle IE svg bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE && ns === 'svg') {\n+                    attrs = guardIESVGBug(attrs);\n+                }\n+\n+                var element = createASTElement(tag, attrs, currentParent);\n+                if (ns) {\n+                    element.ns = ns;\n+                }\n+\n+                {\n+                    if (options.outputSourceRange) {\n+                        element.start = start$1;\n+                        element.end = end;\n+                        element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n+                            cumulated[attr.name] = attr;\n+                            return cumulated\n+                        }, {});\n+                    }\n+                    attrs.forEach(function (attr) {\n+                        if (invalidAttributeRE.test(attr.name)) {\n+                            warn$2(\n+                                \"Invalid dynamic argument expression: attribute names cannot contain \" +\n+                                \"spaces, quotes, \u003C, >, \u002F or =.\",\n+                                {\n+                                    start: attr.start + attr.name.indexOf(\"[\"),\n+                                    end: attr.start + attr.name.length\n+                                }\n+                            );\n+                        }\n+                    });\n+                }\n+\n+                if (isForbiddenTag(element) && !isServerRendering()) {\n+                    element.forbidden = true;\n+                    warn$2(\n+                        'Templates should only be responsible for mapping the state to the ' +\n+                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n+                        \"\u003C\" + tag + \">\" + ', as they will not be parsed.',\n+                        { start: element.start }\n+                    );\n+                }\n+\n+                \u002F\u002F apply pre-transforms\n+                for (var i = 0; i \u003C preTransforms.length; i++) {\n+                    element = preTransforms[i](element, options) || element;\n+                }\n+\n+                if (!inVPre) {\n+                    processPre(element);\n+                    if (element.pre) {\n+                        inVPre = true;\n+                    }\n+                }\n+                if (platformIsPreTag(element.tag)) {\n+                    inPre = true;\n+                }\n+                if (inVPre) {\n+                    processRawAttrs(element);\n+                } else if (!element.processed) {\n+                    \u002F\u002F structural directives\n+                    processFor(element);\n+                    processIf(element);\n+                    processOnce(element);\n+                }\n+\n+                if (!root) {\n+                    root = element;\n+                    {\n+                        checkRootConstraints(root);\n+                    }\n+                }\n+\n+                if (!unary) {\n+                    currentParent = element;\n+                    stack.push(element);\n+                } else {\n+                    closeElement(element);\n+                }\n+            },\n+\n+            end: function end (tag, start, end$1) {\n+                var element = stack[stack.length - 1];\n+                \u002F\u002F pop stack\n+                stack.length -= 1;\n+                currentParent = stack[stack.length - 1];\n+                if (options.outputSourceRange) {\n+                    element.end = end$1;\n+                }\n+                closeElement(element);\n+            },\n+\n+            chars: function chars (text, start, end) {\n+                if (!currentParent) {\n+                    {\n+                        if (text === template) {\n+                            warnOnce(\n+                                'Component template requires a root element, rather than just text.',\n+                                { start: start }\n+                            );\n+                        } else if ((text = text.trim())) {\n+                            warnOnce(\n+                                (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n+                                { start: start }\n+                            );\n+                        }\n+                    }\n+                    return\n+                }\n+                \u002F\u002F IE textarea placeholder bug\n+              \u002F* istanbul ignore if *\u002F\n+                if (isIE &&\n+                    currentParent.tag === 'textarea' &&\n+                    currentParent.attrsMap.placeholder === text\n+                ) {\n+                    return\n+                }\n+                var children = currentParent.children;\n+                if (inPre || text.trim()) {\n+                    text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n+                } else if (!children.length) {\n+                    \u002F\u002F remove the whitespace-only node right after an opening tag\n+                    text = '';\n+                } else if (whitespaceOption) {\n+                    if (whitespaceOption === 'condense') {\n+                        \u002F\u002F in condense mode, remove the whitespace node if it contains\n+                        \u002F\u002F line break, otherwise condense to a single space\n+                        text = lineBreakRE.test(text) ? '' : ' ';\n+                    } else {\n+                        text = ' ';\n+                    }\n+                } else {\n+                    text = preserveWhitespace ? ' ' : '';\n+                }\n+                if (text) {\n+                    if (!inPre && whitespaceOption === 'condense') {\n+                        \u002F\u002F condense consecutive whitespaces into single space\n+                        text = text.replace(whitespaceRE$1, ' ');\n+                    }\n+                    var res;\n+                    var child;\n+                    if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n+                        child = {\n+                            type: 2,\n+                            expression: res.expression,\n+                            tokens: res.tokens,\n+                            text: text\n+                        };\n+                    } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n+                        child = {\n+                            type: 3,\n+                            text: text\n+                        };\n+                    }\n+                    if (child) {\n+                        if (options.outputSourceRange) {\n+                            child.start = start;\n+                            child.end = end;\n+                        }\n+                        children.push(child);\n+                    }\n+                }\n+            },\n+            comment: function comment (text, start, end) {\n+                \u002F\u002F adding anyting as a sibling to the root node is forbidden\n+                \u002F\u002F comments should still be allowed, but ignored\n+                if (currentParent) {\n+                    var child = {\n+                        type: 3,\n+                        text: text,\n+                        isComment: true\n+                    };\n+                    if (options.outputSourceRange) {\n+                        child.start = start;\n+                        child.end = end;\n+                    }\n+                    currentParent.children.push(child);\n+                }\n+            }\n+        });\n+        return root\n+    }\n+\n+    function processPre (el) {\n+        if (getAndRemoveAttr(el, 'v-pre') != null) {\n+            el.pre = true;\n+        }\n+    }\n+\n+    function processRawAttrs (el) {\n+        var list = el.attrsList;\n+        var len = list.length;\n+        if (len) {\n+            var attrs = el.attrs = new Array(len);\n+            for (var i = 0; i \u003C len; i++) {\n+                attrs[i] = {\n+                    name: list[i].name,\n+                    value: JSON.stringify(list[i].value)\n+                };\n+                if (list[i].start != null) {\n+                    attrs[i].start = list[i].start;\n+                    attrs[i].end = list[i].end;\n+                }\n+            }\n+        } else if (!el.pre) {\n+            \u002F\u002F non root node in pre blocks with no attributes\n+            el.plain = true;\n+        }\n+    }\n+\n+    function processElement (\n+        element,\n+        options\n+    ) {\n+        processKey(element);\n+\n+        \u002F\u002F determine whether this is a plain element after\n+        \u002F\u002F removing structural attributes\n+        element.plain = (\n+            !element.key &&\n+            !element.scopedSlots &&\n+            !element.attrsList.length\n+        );\n+\n+        processRef(element);\n+        processSlotContent(element);\n+        processSlotOutlet(element);\n+        processComponent(element);\n+        for (var i = 0; i \u003C transforms.length; i++) {\n+            element = transforms[i](element, options) || element;\n+        }\n+        processAttrs(element);\n+        return element\n+    }\n+\n+    function processKey (el) {\n+        var exp = getBindingAttr(el, 'key');\n+        if (exp) {\n+            {\n+                if (el.tag === 'template') {\n+                    warn$2(\n+                        \"\u003Ctemplate> cannot be keyed. Place the key on real elements instead.\",\n+                        getRawBindingAttr(el, 'key')\n+                    );\n+                }\n+                if (el.for) {\n+                    var iterator = el.iterator2 || el.iterator1;\n+                    var parent = el.parent;\n+                    if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n+                        warn$2(\n+                            \"Do not use v-for index as key on \u003Ctransition-group> children, \" +\n+                            \"this is the same as not using keys.\",\n+                            getRawBindingAttr(el, 'key'),\n+                            true \u002F* tip *\u002F\n+                        );\n+                    }\n+                }\n+            }\n+            el.key = exp;\n+        }\n+    }\n+\n+    function processRef (el) {\n+        var ref = getBindingAttr(el, 'ref');\n+        if (ref) {\n+            el.ref = ref;\n+            el.refInFor = checkInFor(el);\n+        }\n+    }\n+\n+    function processFor (el) {\n+        var exp;\n+        if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n+            var res = parseFor(exp);\n+            if (res) {\n+                extend(el, res);\n+            } else {\n+                warn$2(\n+                    (\"Invalid v-for expression: \" + exp),\n+                    el.rawAttrsMap['v-for']\n+                );\n+            }\n+        }\n+    }\n+\n+\n+\n+    function parseFor (exp) {\n+        var inMatch = exp.match(forAliasRE);\n+        if (!inMatch) { return }\n+        var res = {};\n+        res.for = inMatch[2].trim();\n+        var alias = inMatch[1].trim().replace(stripParensRE, '');\n+        var iteratorMatch = alias.match(forIteratorRE);\n+        if (iteratorMatch) {\n+            res.alias = alias.replace(forIteratorRE, '').trim();\n+            res.iterator1 = iteratorMatch[1].trim();\n+            if (iteratorMatch[2]) {\n+                res.iterator2 = iteratorMatch[2].trim();\n+            }\n+        } else {\n+            res.alias = alias;\n+        }\n+        return res\n+    }\n+\n+    function processIf (el) {\n+        var exp = getAndRemoveAttr(el, 'v-if');\n+        if (exp) {\n+            el.if = exp;\n+            addIfCondition(el, {\n+                exp: exp,\n+                block: el\n+            });\n+        } else {\n+            if (getAndRemoveAttr(el, 'v-else') != null) {\n+                el.else = true;\n+            }\n+            var elseif = getAndRemoveAttr(el, 'v-else-if');\n+            if (elseif) {\n+                el.elseif = elseif;\n+            }\n+        }\n+    }\n+\n+    function processIfConditions (el, parent) {\n+        var prev = findPrevElement(parent.children);\n+        if (prev && prev.if) {\n+            addIfCondition(prev, {\n+                exp: el.elseif,\n+                block: el\n+            });\n+        } else {\n+            warn$2(\n+                \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n+                \"used on element \u003C\" + (el.tag) + \"> without corresponding v-if.\",\n+                el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n+            );\n+        }\n+    }\n+\n+    function findPrevElement (children) {\n+        var i = children.length;\n+        while (i--) {\n+            if (children[i].type === 1) {\n+                return children[i]\n+            } else {\n+                if (children[i].text !== ' ') {\n+                    warn$2(\n+                        \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n+                        \"will be ignored.\",\n+                        children[i]\n+                    );\n+                }\n+                children.pop();\n+            }\n+        }\n+    }\n+\n+    function addIfCondition (el, condition) {\n+        if (!el.ifConditions) {\n+            el.ifConditions = [];\n+        }\n+        el.ifConditions.push(condition);\n+    }\n+\n+    function processOnce (el) {\n+        var once$$1 = getAndRemoveAttr(el, 'v-once');\n+        if (once$$1 != null) {\n+            el.once = true;\n+        }\n+    }\n+\n+    \u002F\u002F handle content being passed to a component as slot,\n+    \u002F\u002F e.g. \u003Ctemplate slot=\"xxx\">, \u003Cdiv slot-scope=\"xxx\">\n+    function processSlotContent (el) {\n+        var slotScope;\n+        if (el.tag === 'template') {\n+            slotScope = getAndRemoveAttr(el, 'scope');\n+          \u002F* istanbul ignore if *\u002F\n+            if (slotScope) {\n+                warn$2(\n+                    \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n+                    \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n+                    \"can also be used on plain elements in addition to \u003Ctemplate> to \" +\n+                    \"denote scoped slots.\",\n+                    el.rawAttrsMap['scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n+        } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n+          \u002F* istanbul ignore if *\u002F\n+            if (el.attrsMap['v-for']) {\n+                warn$2(\n+                    \"Ambiguous combined usage of slot-scope and v-for on \u003C\" + (el.tag) + \"> \" +\n+                    \"(v-for takes higher priority). Use a wrapper \u003Ctemplate> for the \" +\n+                    \"scoped slot to make it clearer.\",\n+                    el.rawAttrsMap['slot-scope'],\n+                    true\n+                );\n+            }\n+            el.slotScope = slotScope;\n+        }\n+\n+        \u002F\u002F slot=\"xxx\"\n+        var slotTarget = getBindingAttr(el, 'slot');\n+        if (slotTarget) {\n+            el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n+            el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n+            \u002F\u002F preserve slot as an attribute for native shadow DOM compat\n+            \u002F\u002F only for non-scoped slots.\n+            if (el.tag !== 'template' && !el.slotScope) {\n+                addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n+            }\n+        }\n+\n+        \u002F\u002F 2.6 v-slot syntax\n+        {\n+            if (el.tag === 'template') {\n+                \u002F\u002F v-slot on \u003Ctemplate>\n+                var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding) {\n+                    {\n+                        if (el.slotTarget || el.slotScope) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.parent && !maybeComponent(el.parent)) {\n+                            warn$2(\n+                                \"\u003Ctemplate v-slot> can only appear at the root level inside \" +\n+                                \"the receiving the component\",\n+                                el\n+                            );\n+                        }\n+                    }\n+                    var ref = getSlotName(slotBinding);\n+                    var name = ref.name;\n+                    var dynamic = ref.dynamic;\n+                    el.slotTarget = name;\n+                    el.slotTargetDynamic = dynamic;\n+                    el.slotScope = slotBinding.value || emptySlotScopeToken; \u002F\u002F force it into a scoped slot for perf\n+                }\n+            } else {\n+                \u002F\u002F v-slot on component, denotes default slot\n+                var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n+                if (slotBinding$1) {\n+                    {\n+                        if (!maybeComponent(el)) {\n+                            warn$2(\n+                                \"v-slot can only be used on components or \u003Ctemplate>.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                        if (el.slotScope || el.slotTarget) {\n+                            warn$2(\n+                                \"Unexpected mixed usage of different slot syntaxes.\",\n+                                el\n+                            );\n+                        }\n+                        if (el.scopedSlots) {\n+                            warn$2(\n+                                \"To avoid scope ambiguity, the default slot should also use \" +\n+                                \"\u003Ctemplate> syntax when there are other named slots.\",\n+                                slotBinding$1\n+                            );\n+                        }\n+                    }\n+                    \u002F\u002F add the component's children to its default slot\n+                    var slots = el.scopedSlots || (el.scopedSlots = {});\n+                    var ref$1 = getSlotName(slotBinding$1);\n+                    var name$1 = ref$1.name;\n+                    var dynamic$1 = ref$1.dynamic;\n+                    var slotContainer = slots[name$1] = createASTElement('template', [], el);\n+                    slotContainer.slotTarget = name$1;\n+                    slotContainer.slotTargetDynamic = dynamic$1;\n+                    slotContainer.children = el.children.filter(function (c) {\n+                        if (!c.slotScope) {\n+                            c.parent = slotContainer;\n+                            return true\n+                        }\n+                    });\n+                    slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n+                    \u002F\u002F remove children as they are returned from scopedSlots now\n+                    el.children = [];\n+                    \u002F\u002F mark el non-plain so data gets generated\n+                    el.plain = false;\n+                }\n+            }\n+        }\n+    }\n+\n+    function getSlotName (binding) {\n+        var name = binding.name.replace(slotRE, '');\n+        if (!name) {\n+            if (binding.name[0] !== '#') {\n+                name = 'default';\n+            } else {\n+                warn$2(\n+                    \"v-slot shorthand syntax requires a slot name.\",\n+                    binding\n+                );\n+            }\n+        }\n+        return dynamicArgRE.test(name)\n+            \u002F\u002F dynamic [name]\n+            ? { name: name.slice(1, -1), dynamic: true }\n+            \u002F\u002F static name\n+            : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n+    }\n+\n+    \u002F\u002F handle \u003Cslot\u002F> outlets\n+    function processSlotOutlet (el) {\n+        if (el.tag === 'slot') {\n+            el.slotName = getBindingAttr(el, 'name');\n+            if (el.key) {\n+                warn$2(\n+                    \"`key` does not work on \u003Cslot> because slots are abstract outlets \" +\n+                    \"and can possibly expand into multiple elements. \" +\n+                    \"Use the key on a wrapping element instead.\",\n+                    getRawBindingAttr(el, 'key')\n+                );\n+            }\n+        }\n+    }\n+\n+    function processComponent (el) {\n+        var binding;\n+        if ((binding = getBindingAttr(el, 'is'))) {\n+            el.component = binding;\n+        }\n+        if (getAndRemoveAttr(el, 'inline-template') != null) {\n+            el.inlineTemplate = true;\n+        }\n+    }\n+\n+    function processAttrs (el) {\n+        var list = el.attrsList;\n+        var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n+        for (i = 0, l = list.length; i \u003C l; i++) {\n+            name = rawName = list[i].name;\n+            value = list[i].value;\n+            if (dirRE.test(name)) {\n+                \u002F\u002F mark element as dynamic\n+                el.hasBindings = true;\n+                \u002F\u002F modifiers\n+                modifiers = parseModifiers(name.replace(dirRE, ''));\n+                \u002F\u002F support .foo shorthand syntax for the .prop modifier\n+                if (modifiers) {\n+                    name = name.replace(modifierRE, '');\n+                }\n+                if (bindRE.test(name)) { \u002F\u002F v-bind\n+                    name = name.replace(bindRE, '');\n+                    value = parseFilters(value);\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    if (\n+                        value.trim().length === 0\n+                    ) {\n+                        warn$2(\n+                            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n+                        );\n+                    }\n+                    if (modifiers) {\n+                        if (modifiers.prop && !isDynamic) {\n+                            name = camelize(name);\n+                            if (name === 'innerHtml') { name = 'innerHTML'; }\n+                        }\n+                        if (modifiers.camel && !isDynamic) {\n+                            name = camelize(name);\n+                        }\n+                        if (modifiers.sync) {\n+                            syncGen = genAssignmentCode(value, \"$event\");\n+                            if (!isDynamic) {\n+                                addHandler(\n+                                    el,\n+                                    (\"update:\" + (camelize(name))),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i]\n+                                );\n+                                if (hyphenate(name) !== camelize(name)) {\n+                                    addHandler(\n+                                        el,\n+                                        (\"update:\" + (hyphenate(name))),\n+                                        syncGen,\n+                                        null,\n+                                        false,\n+                                        warn$2,\n+                                        list[i]\n+                                    );\n+                                }\n+                            } else {\n+                                \u002F\u002F handler w\u002F dynamic event name\n+                                addHandler(\n+                                    el,\n+                                    (\"\\\"update:\\\"+(\" + name + \")\"),\n+                                    syncGen,\n+                                    null,\n+                                    false,\n+                                    warn$2,\n+                                    list[i],\n+                                    true \u002F\u002F dynamic\n+                                );\n+                            }\n+                        }\n+                    }\n+                    if ((modifiers && modifiers.prop) || (\n+                            !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n+                        )) {\n+                        addProp(el, name, value, list[i], isDynamic);\n+                    } else {\n+                        addAttr(el, name, value, list[i], isDynamic);\n+                    }\n+                } else if (onRE.test(name)) { \u002F\u002F v-on\n+                    name = name.replace(onRE, '');\n+                    isDynamic = dynamicArgRE.test(name);\n+                    if (isDynamic) {\n+                        name = name.slice(1, -1);\n+                    }\n+                    addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n+                } else { \u002F\u002F normal directives\n+                    name = name.replace(dirRE, '');\n+                    \u002F\u002F parse arg\n+                    var argMatch = name.match(argRE);\n+                    var arg = argMatch && argMatch[1];\n+                    isDynamic = false;\n+                    if (arg) {\n+                        name = name.slice(0, -(arg.length + 1));\n+                        if (dynamicArgRE.test(arg)) {\n+                            arg = arg.slice(1, -1);\n+                            isDynamic = true;\n+                        }\n+                    }\n+                    addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n+                    if (name === 'model') {\n+                        checkForAliasModel(el, value);\n+                    }\n+                }\n+            } else {\n+                \u002F\u002F literal attribute\n+                {\n+                    var res = parseText(value, delimiters);\n+                    if (res) {\n+                        warn$2(\n+                            name + \"=\\\"\" + value + \"\\\": \" +\n+                            'Interpolation inside attributes has been removed. ' +\n+                            'Use v-bind or the colon shorthand instead. For example, ' +\n+                            'instead of \u003Cdiv id=\"{{ val }}\">, use \u003Cdiv :id=\"val\">.',\n+                            list[i]\n+                        );\n+                    }\n+                }\n+                addAttr(el, name, JSON.stringify(value), list[i]);\n+                \u002F\u002F #6887 firefox doesn't update muted state if set via attribute\n+                \u002F\u002F even immediately after element creation\n+                if (!el.component &&\n+                    name === 'muted' &&\n+                    platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n+                    addProp(el, name, 'true', list[i]);\n+                }\n+            }\n+        }\n+    }\n+\n+    function checkInFor (el) {\n+        var parent = el;\n+        while (parent) {\n+            if (parent.for !== undefined) {\n+                return true\n+            }\n+            parent = parent.parent;\n+        }\n+        return false\n+    }\n+\n+    function parseModifiers (name) {\n+        var match = name.match(modifierRE);\n+        if (match) {\n+            var ret = {};\n+            match.forEach(function (m) { ret[m.slice(1)] = true; });\n+            return ret\n+        }\n+    }\n+\n+    function makeAttrsMap (attrs) {\n+        var map = {};\n+        for (var i = 0, l = attrs.length; i \u003C l; i++) {\n+            if (\n+                map[attrs[i].name] && !isIE && !isEdge\n+            ) {\n+                warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n+            }\n+            map[attrs[i].name] = attrs[i].value;\n+        }\n+        return map\n+    }\n+\n+    \u002F\u002F for script (e.g. type=\"x\u002Ftemplate\") or style, do not decode content\n+    function isTextTag (el) {\n+        return el.tag === 'script' || el.tag === 'style'\n+    }\n+\n+    function isForbiddenTag (el) {\n+        return (\n+            el.tag === 'style' ||\n+            (el.tag === 'script' && (\n+                !el.attrsMap.type ||\n+                el.attrsMap.type === 'text\u002Fjavascript'\n+            ))\n+        )\n+    }\n+\n+    var ieNSBug = \u002F^xmlns:NS\\d+\u002F;\n+    var ieNSPrefix = \u002F^NS\\d+:\u002F;\n+\n+  \u002F* istanbul ignore next *\u002F\n+    function guardIESVGBug (attrs) {\n+        var res = [];\n+        for (var i = 0; i \u003C attrs.length; i++) {\n+            var attr = attrs[i];\n+            if (!ieNSBug.test(attr.name)) {\n+                attr.name = attr.name.replace(ieNSPrefix, '');\n+                res.push(attr);\n+            }\n+        }\n+        return res\n+    }\n+\n+    function checkForAliasModel (el, value) {\n+        var _el = el;\n+        while (_el) {\n+            if (_el.for && _el.alias === value) {\n+                warn$2(\n+                    \"\u003C\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n+                    \"You are binding v-model directly to a v-for iteration alias. \" +\n+                    \"This will not be able to modify the v-for source array because \" +\n+                    \"writing to the alias is like modifying a function local variable. \" +\n+                    \"Consider using an array of objects and use v-model on an object property instead.\",\n+                    el.rawAttrsMap['v-model']\n+                );\n+            }\n+            _el = _el.parent;\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function preTransformNode (el, options) {\n+        if (el.tag === 'input') {\n+            var map = el.attrsMap;\n+            if (!map['v-model']) {\n+                return\n+            }\n+\n+            var typeBinding;\n+            if (map[':type'] || map['v-bind:type']) {\n+                typeBinding = getBindingAttr(el, 'type');\n+            }\n+            if (!map.type && !typeBinding && map['v-bind']) {\n+                typeBinding = \"(\" + (map['v-bind']) + \").type\";\n+            }\n+\n+            if (typeBinding) {\n+                var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n+                var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n+                var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n+                var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n+                \u002F\u002F 1. checkbox\n+                var branch0 = cloneASTElement(el);\n+                \u002F\u002F process for on the main node\n+                processFor(branch0);\n+                addRawAttr(branch0, 'type', 'checkbox');\n+                processElement(branch0, options);\n+                branch0.processed = true; \u002F\u002F prevent it from double-processed\n+                branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n+                addIfCondition(branch0, {\n+                    exp: branch0.if,\n+                    block: branch0\n+                });\n+                \u002F\u002F 2. add radio else-if condition\n+                var branch1 = cloneASTElement(el);\n+                getAndRemoveAttr(branch1, 'v-for', true);\n+                addRawAttr(branch1, 'type', 'radio');\n+                processElement(branch1, options);\n+                addIfCondition(branch0, {\n+                    exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n+                    block: branch1\n+                });\n+                \u002F\u002F 3. other\n+                var branch2 = cloneASTElement(el);\n+                getAndRemoveAttr(branch2, 'v-for', true);\n+                addRawAttr(branch2, ':type', typeBinding);\n+                processElement(branch2, options);\n+                addIfCondition(branch0, {\n+                    exp: ifCondition,\n+                    block: branch2\n+                });\n+\n+                if (hasElse) {\n+                    branch0.else = true;\n+                } else if (elseIfCondition) {\n+                    branch0.elseif = elseIfCondition;\n+                }\n+\n+                return branch0\n+            }\n+        }\n+    }\n+\n+    function cloneASTElement (el) {\n+        return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n+    }\n+\n+    var model$1 = {\n+        preTransformNode: preTransformNode\n+    };\n+\n+    var modules$1 = [\n+        klass$1,\n+        style$1,\n+        model$1\n+    ];\n+\n+  \u002F*  *\u002F\n+\n+    function text (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function html (el, dir) {\n+        if (dir.value) {\n+            addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n+        }\n+    }\n+\n+    var directives$1 = {\n+        model: model,\n+        text: text,\n+        html: html\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var baseOptions = {\n+        expectHTML: true,\n+        modules: modules$1,\n+        directives: directives$1,\n+        isPreTag: isPreTag,\n+        isUnaryTag: isUnaryTag,\n+        mustUseProp: mustUseProp,\n+        canBeLeftOpenTag: canBeLeftOpenTag,\n+        isReservedTag: isReservedTag,\n+        getTagNamespace: getTagNamespace,\n+        staticKeys: genStaticKeys(modules$1)\n+    };\n+\n+  \u002F*  *\u002F\n+\n+    var isStaticKey;\n+    var isPlatformReservedTag;\n+\n+    var genStaticKeysCached = cached(genStaticKeys$1);\n+\n+    \u002F**\n+     * Goal of the optimizer: walk the generated template AST tree\n+     * and detect sub-trees that are purely static, i.e. parts of\n+     * the DOM that never needs to change.\n+     *\n+     * Once we detect these sub-trees, we can:\n+     *\n+     * 1. Hoist them into constants, so that we no longer need to\n+     *    create fresh nodes for them on each re-render;\n+     * 2. Completely skip them in the patching process.\n+     *\u002F\n+    function optimize (root, options) {\n+        if (!root) { return }\n+        isStaticKey = genStaticKeysCached(options.staticKeys || '');\n+        isPlatformReservedTag = options.isReservedTag || no;\n+        \u002F\u002F first pass: mark all non-static nodes.\n+        markStatic$1(root);\n+        \u002F\u002F second pass: mark static roots.\n+        markStaticRoots(root, false);\n+    }\n+\n+    function genStaticKeys$1 (keys) {\n+        return makeMap(\n+            'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n+            (keys ? ',' + keys : '')\n+        )\n+    }\n+\n+    function markStatic$1 (node) {\n+        node.static = isStatic(node);\n+        if (node.type === 1) {\n+            \u002F\u002F do not make component slot content static. this avoids\n+            \u002F\u002F 1. components not able to mutate slot nodes\n+            \u002F\u002F 2. static slot content fails for hot-reloading\n+            if (\n+                !isPlatformReservedTag(node.tag) &&\n+                node.tag !== 'slot' &&\n+                node.attrsMap['inline-template'] == null\n+            ) {\n+                return\n+            }\n+            for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                var child = node.children[i];\n+                markStatic$1(child);\n+                if (!child.static) {\n+                    node.static = false;\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    var block = node.ifConditions[i$1].block;\n+                    markStatic$1(block);\n+                    if (!block.static) {\n+                        node.static = false;\n+                    }\n+                }\n+            }\n+        }\n+    }\n+\n+    function markStaticRoots (node, isInFor) {\n+        if (node.type === 1) {\n+            if (node.static || node.once) {\n+                node.staticInFor = isInFor;\n+            }\n+            \u002F\u002F For a node to qualify as a static root, it should have children that\n+            \u002F\u002F are not just static text. Otherwise the cost of hoisting out will\n+            \u002F\u002F outweigh the benefits and it's better off to just always render it fresh.\n+            if (node.static && node.children.length && !(\n+                    node.children.length === 1 &&\n+                    node.children[0].type === 3\n+                )) {\n+                node.staticRoot = true;\n+                return\n+            } else {\n+                node.staticRoot = false;\n+            }\n+            if (node.children) {\n+                for (var i = 0, l = node.children.length; i \u003C l; i++) {\n+                    markStaticRoots(node.children[i], isInFor || !!node.for);\n+                }\n+            }\n+            if (node.ifConditions) {\n+                for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 \u003C l$1; i$1++) {\n+                    markStaticRoots(node.ifConditions[i$1].block, isInFor);\n+                }\n+            }\n+        }\n+    }\n+\n+    function isStatic (node) {\n+        if (node.type === 2) { \u002F\u002F expression\n+            return false\n+        }\n+        if (node.type === 3) { \u002F\u002F text\n+            return true\n+        }\n+        return !!(node.pre || (\n+            !node.hasBindings && \u002F\u002F no dynamic bindings\n+            !node.if && !node.for && \u002F\u002F not v-if or v-for or v-else\n+            !isBuiltInTag(node.tag) && \u002F\u002F not a built-in\n+            isPlatformReservedTag(node.tag) && \u002F\u002F not a component\n+            !isDirectChildOfTemplateFor(node) &&\n+            Object.keys(node).every(isStaticKey)\n+        ))\n+    }\n+\n+    function isDirectChildOfTemplateFor (node) {\n+        while (node.parent) {\n+            node = node.parent;\n+            if (node.tag !== 'template') {\n+                return false\n+            }\n+            if (node.for) {\n+                return true\n+            }\n+        }\n+        return false\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var fnExpRE = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F;\n+    var fnInvokeRE = \u002F\\([^)]*?\\);*$\u002F;\n+    var simplePathRE = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F;\n+\n+    \u002F\u002F KeyboardEvent.keyCode aliases\n+    var keyCodes = {\n+        esc: 27,\n+        tab: 9,\n+        enter: 13,\n+        space: 32,\n+        up: 38,\n+        left: 37,\n+        right: 39,\n+        down: 40,\n+        'delete': [8, 46]\n+    };\n+\n+    \u002F\u002F KeyboardEvent.key aliases\n+    var keyNames = {\n+        \u002F\u002F #7880: IE11 and Edge use `Esc` for Escape key name.\n+        esc: ['Esc', 'Escape'],\n+        tab: 'Tab',\n+        enter: 'Enter',\n+        \u002F\u002F #9112: IE11 uses `Spacebar` for Space key name.\n+        space: [' ', 'Spacebar'],\n+        \u002F\u002F #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n+        up: ['Up', 'ArrowUp'],\n+        left: ['Left', 'ArrowLeft'],\n+        right: ['Right', 'ArrowRight'],\n+        down: ['Down', 'ArrowDown'],\n+        \u002F\u002F #9112: IE11 uses `Del` for Delete key name.\n+        'delete': ['Backspace', 'Delete', 'Del']\n+    };\n+\n+    \u002F\u002F #4868: modifiers that prevent the execution of the listener\n+    \u002F\u002F need to explicitly return null so that we can determine whether to remove\n+    \u002F\u002F the listener for .once\n+    var genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n+\n+    var modifierCode = {\n+        stop: '$event.stopPropagation();',\n+        prevent: '$event.preventDefault();',\n+        self: genGuard(\"$event.target !== $event.currentTarget\"),\n+        ctrl: genGuard(\"!$event.ctrlKey\"),\n+        shift: genGuard(\"!$event.shiftKey\"),\n+        alt: genGuard(\"!$event.altKey\"),\n+        meta: genGuard(\"!$event.metaKey\"),\n+        left: genGuard(\"'button' in $event && $event.button !== 0\"),\n+        middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n+        right: genGuard(\"'button' in $event && $event.button !== 2\")\n+    };\n+\n+    function genHandlers (\n+        events,\n+        isNative\n+    ) {\n+        var prefix = isNative ? 'nativeOn:' : 'on:';\n+        var staticHandlers = \"\";\n+        var dynamicHandlers = \"\";\n+        for (var name in events) {\n+            var handlerCode = genHandler(events[name]);\n+            if (events[name] && events[name].dynamic) {\n+                dynamicHandlers += name + \",\" + handlerCode + \",\";\n+            } else {\n+                staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n+            }\n+        }\n+        staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n+        if (dynamicHandlers) {\n+            return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n+        } else {\n+            return prefix + staticHandlers\n+        }\n+    }\n+\n+    function genHandler (handler) {\n+        if (!handler) {\n+            return 'function(){}'\n+        }\n+\n+        if (Array.isArray(handler)) {\n+            return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n+        }\n+\n+        var isMethodPath = simplePathRE.test(handler.value);\n+        var isFunctionExpression = fnExpRE.test(handler.value);\n+        var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n+\n+        if (!handler.modifiers) {\n+            if (isMethodPath || isFunctionExpression) {\n+                return handler.value\n+            }\n+            return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") \u002F\u002F inline statement\n+        } else {\n+            var code = '';\n+            var genModifierCode = '';\n+            var keys = [];\n+            for (var key in handler.modifiers) {\n+                if (modifierCode[key]) {\n+                    genModifierCode += modifierCode[key];\n+                    \u002F\u002F left\u002Fright\n+                    if (keyCodes[key]) {\n+                        keys.push(key);\n+                    }\n+                } else if (key === 'exact') {\n+                    var modifiers = (handler.modifiers);\n+                    genModifierCode += genGuard(\n+                        ['ctrl', 'shift', 'alt', 'meta']\n+                            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n+                            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n+                            .join('||')\n+                    );\n+                } else {\n+                    keys.push(key);\n+                }\n+            }\n+            if (keys.length) {\n+                code += genKeyFilter(keys);\n+            }\n+            \u002F\u002F Make sure modifiers like prevent and stop get executed after key filtering\n+            if (genModifierCode) {\n+                code += genModifierCode;\n+            }\n+            var handlerCode = isMethodPath\n+                ? (\"return \" + (handler.value) + \"($event)\")\n+                : isFunctionExpression\n+                    ? (\"return (\" + (handler.value) + \")($event)\")\n+                    : isFunctionInvocation\n+                        ? (\"return \" + (handler.value))\n+                        : handler.value;\n+            return (\"function($event){\" + code + handlerCode + \"}\")\n+        }\n+    }\n+\n+    function genKeyFilter (keys) {\n+        return (\n+            \u002F\u002F make sure the key filters only apply to KeyboardEvents\n+            \u002F\u002F #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n+            \u002F\u002F key events that do not have keyCode property...\n+            \"if(!$event.type.indexOf('key')&&\" +\n+            (keys.map(genFilterCode).join('&&')) + \")return null;\"\n+        )\n+    }\n+\n+    function genFilterCode (key) {\n+        var keyVal = parseInt(key, 10);\n+        if (keyVal) {\n+            return (\"$event.keyCode!==\" + keyVal)\n+        }\n+        var keyCode = keyCodes[key];\n+        var keyName = keyNames[key];\n+        return (\n+            \"_k($event.keyCode,\" +\n+            (JSON.stringify(key)) + \",\" +\n+            (JSON.stringify(keyCode)) + \",\" +\n+            \"$event.key,\" +\n+            \"\" + (JSON.stringify(keyName)) +\n+            \")\"\n+        )\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function on (el, dir) {\n+        if (dir.modifiers) {\n+            warn(\"v-on without argument does not support modifiers.\");\n+        }\n+        el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function bind$1 (el, dir) {\n+        el.wrapData = function (code) {\n+            return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n+        };\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var baseDirectives = {\n+        on: on,\n+        bind: bind$1,\n+        cloak: noop\n+    };\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+\n+\n+    var CodegenState = function CodegenState (options) {\n+        this.options = options;\n+        this.warn = options.warn || baseWarn;\n+        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n+        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n+        this.directives = extend(extend({}, baseDirectives), options.directives);\n+        var isReservedTag = options.isReservedTag || no;\n+        this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n+        this.onceId = 0;\n+        this.staticRenderFns = [];\n+        this.pre = false;\n+    };\n+\n+\n+\n+    function generate (\n+        ast,\n+        options\n+    ) {\n+        var state = new CodegenState(options);\n+        var code = ast ? genElement(ast, state) : '_c(\"div\")';\n+        return {\n+            render: (\"with(this){return \" + code + \"}\"),\n+            staticRenderFns: state.staticRenderFns\n+        }\n+    }\n+\n+    function genElement (el, state) {\n+        if (el.parent) {\n+            el.pre = el.pre || el.parent.pre;\n+        }\n+\n+        if (el.staticRoot && !el.staticProcessed) {\n+            return genStatic(el, state)\n+        } else if (el.once && !el.onceProcessed) {\n+            return genOnce(el, state)\n+        } else if (el.for && !el.forProcessed) {\n+            return genFor(el, state)\n+        } else if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n+            return genChildren(el, state) || 'void 0'\n+        } else if (el.tag === 'slot') {\n+            return genSlot(el, state)\n+        } else {\n+            \u002F\u002F component or element\n+            var code;\n+            if (el.component) {\n+                code = genComponent(el.component, el, state);\n+            } else {\n+                var data;\n+                if (!el.plain || (el.pre && state.maybeComponent(el))) {\n+                    data = genData$2(el, state);\n+                }\n+\n+                var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+                code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n+            }\n+            \u002F\u002F module transforms\n+            for (var i = 0; i \u003C state.transforms.length; i++) {\n+                code = state.transforms[i](el, code);\n+            }\n+            return code\n+        }\n+    }\n+\n+    \u002F\u002F hoist static sub-trees out\n+    function genStatic (el, state) {\n+        el.staticProcessed = true;\n+        \u002F\u002F Some elements (templates) need to behave differently inside of a v-pre\n+        \u002F\u002F node.  All pre nodes are static roots, so we can use this as a location to\n+        \u002F\u002F wrap a state change and reset it upon exiting the pre node.\n+        var originalPreState = state.pre;\n+        if (el.pre) {\n+            state.pre = el.pre;\n+        }\n+        state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n+        state.pre = originalPreState;\n+        return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n+    }\n+\n+    \u002F\u002F v-once\n+    function genOnce (el, state) {\n+        el.onceProcessed = true;\n+        if (el.if && !el.ifProcessed) {\n+            return genIf(el, state)\n+        } else if (el.staticInFor) {\n+            var key = '';\n+            var parent = el.parent;\n+            while (parent) {\n+                if (parent.for) {\n+                    key = parent.key;\n+                    break\n+                }\n+                parent = parent.parent;\n+            }\n+            if (!key) {\n+                state.warn(\n+                    \"v-once can only be used inside v-for that is keyed. \",\n+                    el.rawAttrsMap['v-once']\n+                );\n+                return genElement(el, state)\n+            }\n+            return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n+        } else {\n+            return genStatic(el, state)\n+        }\n+    }\n+\n+    function genIf (\n+        el,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        el.ifProcessed = true; \u002F\u002F avoid recursion\n+        return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n+    }\n+\n+    function genIfConditions (\n+        conditions,\n+        state,\n+        altGen,\n+        altEmpty\n+    ) {\n+        if (!conditions.length) {\n+            return altEmpty || '_e()'\n+        }\n+\n+        var condition = conditions.shift();\n+        if (condition.exp) {\n+            return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n+        } else {\n+            return (\"\" + (genTernaryExp(condition.block)))\n+        }\n+\n+        \u002F\u002F v-if with v-once should generate code like (a)?_m(0):_m(1)\n+        function genTernaryExp (el) {\n+            return altGen\n+                ? altGen(el, state)\n+                : el.once\n+                    ? genOnce(el, state)\n+                    : genElement(el, state)\n+        }\n+    }\n+\n+    function genFor (\n+        el,\n+        state,\n+        altGen,\n+        altHelper\n+    ) {\n+        var exp = el.for;\n+        var alias = el.alias;\n+        var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n+        var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n+\n+        if (state.maybeComponent(el) &&\n+            el.tag !== 'slot' &&\n+            el.tag !== 'template' &&\n+            !el.key\n+        ) {\n+            state.warn(\n+                \"\u003C\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n+                \"v-for should have explicit keys. \" +\n+                \"See https:\u002F\u002Fvuejs.org\u002Fguide\u002Flist.html#key for more info.\",\n+                el.rawAttrsMap['v-for'],\n+                true \u002F* tip *\u002F\n+            );\n+        }\n+\n+        el.forProcessed = true; \u002F\u002F avoid recursion\n+        return (altHelper || '_l') + \"((\" + exp + \"),\" +\n+            \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n+            \"return \" + ((altGen || genElement)(el, state)) +\n+            '})'\n+    }\n+\n+    function genData$2 (el, state) {\n+        var data = '{';\n+\n+        \u002F\u002F directives first.\n+        \u002F\u002F directives may mutate the el's other properties before they are generated.\n+        var dirs = genDirectives(el, state);\n+        if (dirs) { data += dirs + ','; }\n+\n+        \u002F\u002F key\n+        if (el.key) {\n+            data += \"key:\" + (el.key) + \",\";\n+        }\n+        \u002F\u002F ref\n+        if (el.ref) {\n+            data += \"ref:\" + (el.ref) + \",\";\n+        }\n+        if (el.refInFor) {\n+            data += \"refInFor:true,\";\n+        }\n+        \u002F\u002F pre\n+        if (el.pre) {\n+            data += \"pre:true,\";\n+        }\n+        \u002F\u002F record original tag name for components using \"is\" attribute\n+        if (el.component) {\n+            data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n+        }\n+        \u002F\u002F module data generation functions\n+        for (var i = 0; i \u003C state.dataGenFns.length; i++) {\n+            data += state.dataGenFns[i](el);\n+        }\n+        \u002F\u002F attributes\n+        if (el.attrs) {\n+            data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n+        }\n+        \u002F\u002F DOM props\n+        if (el.props) {\n+            data += \"domProps:\" + (genProps(el.props)) + \",\";\n+        }\n+        \u002F\u002F event handlers\n+        if (el.events) {\n+            data += (genHandlers(el.events, false)) + \",\";\n+        }\n+        if (el.nativeEvents) {\n+            data += (genHandlers(el.nativeEvents, true)) + \",\";\n+        }\n+        \u002F\u002F slot target\n+        \u002F\u002F only for non-scoped slots\n+        if (el.slotTarget && !el.slotScope) {\n+            data += \"slot:\" + (el.slotTarget) + \",\";\n+        }\n+        \u002F\u002F scoped slots\n+        if (el.scopedSlots) {\n+            data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n+        }\n+        \u002F\u002F component v-model\n+        if (el.model) {\n+            data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n+        }\n+        \u002F\u002F inline-template\n+        if (el.inlineTemplate) {\n+            var inlineTemplate = genInlineTemplate(el, state);\n+            if (inlineTemplate) {\n+                data += inlineTemplate + \",\";\n+            }\n+        }\n+        data = data.replace(\u002F,$\u002F, '') + '}';\n+        \u002F\u002F v-bind dynamic argument wrap\n+        \u002F\u002F v-bind with dynamic arguments must be applied using the same v-bind object\n+        \u002F\u002F merge helper so that class\u002Fstyle\u002FmustUseProp attrs are handled correctly.\n+        if (el.dynamicAttrs) {\n+            data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n+        }\n+        \u002F\u002F v-bind data wrap\n+        if (el.wrapData) {\n+            data = el.wrapData(data);\n+        }\n+        \u002F\u002F v-on data wrap\n+        if (el.wrapListeners) {\n+            data = el.wrapListeners(data);\n+        }\n+        return data\n+    }\n+\n+    function genDirectives (el, state) {\n+        var dirs = el.directives;\n+        if (!dirs) { return }\n+        var res = 'directives:[';\n+        var hasRuntime = false;\n+        var i, l, dir, needRuntime;\n+        for (i = 0, l = dirs.length; i \u003C l; i++) {\n+            dir = dirs[i];\n+            needRuntime = true;\n+            var gen = state.directives[dir.name];\n+            if (gen) {\n+                \u002F\u002F compile-time directive that manipulates AST.\n+                \u002F\u002F returns true if it also needs a runtime counterpart.\n+                needRuntime = !!gen(el, dir, state.warn);\n+            }\n+            if (needRuntime) {\n+                hasRuntime = true;\n+                res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n+            }\n+        }\n+        if (hasRuntime) {\n+            return res.slice(0, -1) + ']'\n+        }\n+    }\n+\n+    function genInlineTemplate (el, state) {\n+        var ast = el.children[0];\n+        if (el.children.length !== 1 || ast.type !== 1) {\n+            state.warn(\n+                'Inline-template components must have exactly one child element.',\n+                { start: el.start }\n+            );\n+        }\n+        if (ast && ast.type === 1) {\n+            var inlineRenderFns = generate(ast, state.options);\n+            return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n+        }\n+    }\n+\n+    function genScopedSlots (\n+        el,\n+        slots,\n+        state\n+    ) {\n+        \u002F\u002F by default scoped slots are considered \"stable\", this allows child\n+        \u002F\u002F components with only scoped slots to skip forced updates from parent.\n+        \u002F\u002F but in some cases we have to bail-out of this optimization\n+        \u002F\u002F for example if the slot contains dynamic names, has v-if or v-for on them...\n+        var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n+                var slot = slots[key];\n+                return (\n+                    slot.slotTargetDynamic ||\n+                    slot.if ||\n+                    slot.for ||\n+                    containsSlotChild(slot) \u002F\u002F is passing down slot from parent which may be dynamic\n+                )\n+            });\n+\n+        \u002F\u002F #9534: if a component with scoped slots is inside a conditional branch,\n+        \u002F\u002F it's possible for the same component to be reused but with different\n+        \u002F\u002F compiled slot content. To avoid that, we generate a unique key based on\n+        \u002F\u002F the generated code of all the slot contents.\n+        var needsKey = !!el.if;\n+\n+        \u002F\u002F OR when it is inside another scoped slot or v-for (the reactivity may be\n+        \u002F\u002F disconnected due to the intermediate scope variable)\n+        \u002F\u002F #9438, #9506\n+        \u002F\u002F TODO: this can be further optimized by properly analyzing in-scope bindings\n+        \u002F\u002F and skip force updating ones that do not actually use scope variables.\n+        if (!needsForceUpdate) {\n+            var parent = el.parent;\n+            while (parent) {\n+                if (\n+                    (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n+                    parent.for\n+                ) {\n+                    needsForceUpdate = true;\n+                    break\n+                }\n+                if (parent.if) {\n+                    needsKey = true;\n+                }\n+                parent = parent.parent;\n+            }\n+        }\n+\n+        var generatedSlots = Object.keys(slots)\n+            .map(function (key) { return genScopedSlot(slots[key], state); })\n+            .join(',');\n+\n+        return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n+    }\n+\n+    function hash(str) {\n+        var hash = 5381;\n+        var i = str.length;\n+        while(i) {\n+            hash = (hash * 33) ^ str.charCodeAt(--i);\n+        }\n+        return hash >>> 0\n+    }\n+\n+    function containsSlotChild (el) {\n+        if (el.type === 1) {\n+            if (el.tag === 'slot') {\n+                return true\n+            }\n+            return el.children.some(containsSlotChild)\n+        }\n+        return false\n+    }\n+\n+    function genScopedSlot (\n+        el,\n+        state\n+    ) {\n+        var isLegacySyntax = el.attrsMap['slot-scope'];\n+        if (el.if && !el.ifProcessed && !isLegacySyntax) {\n+            return genIf(el, state, genScopedSlot, \"null\")\n+        }\n+        if (el.for && !el.forProcessed) {\n+            return genFor(el, state, genScopedSlot)\n+        }\n+        var slotScope = el.slotScope === emptySlotScopeToken\n+            ? \"\"\n+            : String(el.slotScope);\n+        var fn = \"function(\" + slotScope + \"){\" +\n+            \"return \" + (el.tag === 'template'\n+                ? el.if && isLegacySyntax\n+                    ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n+                    : genChildren(el, state) || 'undefined'\n+                : genElement(el, state)) + \"}\";\n+        \u002F\u002F reverse proxy v-slot without scope on this.$slots\n+        var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n+        return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n+    }\n+\n+    function genChildren (\n+        el,\n+        state,\n+        checkSkip,\n+        altGenElement,\n+        altGenNode\n+    ) {\n+        var children = el.children;\n+        if (children.length) {\n+            var el$1 = children[0];\n+            \u002F\u002F optimize single v-for\n+            if (children.length === 1 &&\n+                el$1.for &&\n+                el$1.tag !== 'template' &&\n+                el$1.tag !== 'slot'\n+            ) {\n+                var normalizationType = checkSkip\n+                    ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n+                    : \"\";\n+                return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n+            }\n+            var normalizationType$1 = checkSkip\n+                ? getNormalizationType(children, state.maybeComponent)\n+                : 0;\n+            var gen = altGenNode || genNode;\n+            return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n+        }\n+    }\n+\n+    \u002F\u002F determine the normalization needed for the children array.\n+    \u002F\u002F 0: no normalization needed\n+    \u002F\u002F 1: simple normalization needed (possible 1-level deep nested array)\n+    \u002F\u002F 2: full normalization needed\n+    function getNormalizationType (\n+        children,\n+        maybeComponent\n+    ) {\n+        var res = 0;\n+        for (var i = 0; i \u003C children.length; i++) {\n+            var el = children[i];\n+            if (el.type !== 1) {\n+                continue\n+            }\n+            if (needsNormalization(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n+                res = 2;\n+                break\n+            }\n+            if (maybeComponent(el) ||\n+                (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n+                res = 1;\n+            }\n+        }\n+        return res\n+    }\n+\n+    function needsNormalization (el) {\n+        return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n+    }\n+\n+    function genNode (node, state) {\n+        if (node.type === 1) {\n+            return genElement(node, state)\n+        } else if (node.type === 3 && node.isComment) {\n+            return genComment(node)\n+        } else {\n+            return genText(node)\n+        }\n+    }\n+\n+    function genText (text) {\n+        return (\"_v(\" + (text.type === 2\n+            ? text.expression \u002F\u002F no need for () because already wrapped in _s()\n+            : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n+    }\n+\n+    function genComment (comment) {\n+        return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n+    }\n+\n+    function genSlot (el, state) {\n+        var slotName = el.slotName || '\"default\"';\n+        var children = genChildren(el, state);\n+        var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n+        var attrs = el.attrs || el.dynamicAttrs\n+            ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n+                \u002F\u002F slot props are camelized\n+                name: camelize(attr.name),\n+                value: attr.value,\n+                dynamic: attr.dynamic\n+            }); }))\n+            : null;\n+        var bind$$1 = el.attrsMap['v-bind'];\n+        if ((attrs || bind$$1) && !children) {\n+            res += \",null\";\n+        }\n+        if (attrs) {\n+            res += \",\" + attrs;\n+        }\n+        if (bind$$1) {\n+            res += (attrs ? '' : ',null') + \",\" + bind$$1;\n+        }\n+        return res + ')'\n+    }\n+\n+    \u002F\u002F componentName is el.component, take it as argument to shun flow's pessimistic refinement\n+    function genComponent (\n+        componentName,\n+        el,\n+        state\n+    ) {\n+        var children = el.inlineTemplate ? null : genChildren(el, state, true);\n+        return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n+    }\n+\n+    function genProps (props) {\n+        var staticProps = \"\";\n+        var dynamicProps = \"\";\n+        for (var i = 0; i \u003C props.length; i++) {\n+            var prop = props[i];\n+            var value = transformSpecialNewlines(prop.value);\n+            if (prop.dynamic) {\n+                dynamicProps += (prop.name) + \",\" + value + \",\";\n+            } else {\n+                staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n+            }\n+        }\n+        staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n+        if (dynamicProps) {\n+            return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n+        } else {\n+            return staticProps\n+        }\n+    }\n+\n+    \u002F\u002F #3895, #4268\n+    function transformSpecialNewlines (text) {\n+        return text\n+            .replace(\u002F\\u2028\u002Fg, '\\\\u2028')\n+            .replace(\u002F\\u2029\u002Fg, '\\\\u2029')\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    \u002F\u002F these keywords should not appear inside expressions, but operators like\n+    \u002F\u002F typeof, instanceof and in are allowed\n+    var prohibitedKeywordRE = new RegExp('\\\\b' + (\n+            'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n+            'super,throw,while,yield,delete,export,import,return,switch,default,' +\n+            'extends,finally,continue,debugger,function,arguments'\n+        ).split(',').join('\\\\b|\\\\b') + '\\\\b');\n+\n+    \u002F\u002F these unary operators should not be used as property\u002Fmethod names\n+    var unaryOperatorsRE = new RegExp('\\\\b' + (\n+            'delete,typeof,void'\n+        ).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n+\n+    \u002F\u002F strip strings in expressions\n+    var stripStringRE = \u002F'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`\u002Fg;\n+\n+    \u002F\u002F detect problematic expressions in a template\n+    function detectErrors (ast, warn) {\n+        if (ast) {\n+            checkNode(ast, warn);\n+        }\n+    }\n+\n+    function checkNode (node, warn) {\n+        if (node.type === 1) {\n+            for (var name in node.attrsMap) {\n+                if (dirRE.test(name)) {\n+                    var value = node.attrsMap[name];\n+                    if (value) {\n+                        var range = node.rawAttrsMap[name];\n+                        if (name === 'v-for') {\n+                            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else if (onRE.test(name)) {\n+                            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        } else {\n+                            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n+                        }\n+                    }\n+                }\n+            }\n+            if (node.children) {\n+                for (var i = 0; i \u003C node.children.length; i++) {\n+                    checkNode(node.children[i], warn);\n+                }\n+            }\n+        } else if (node.type === 2) {\n+            checkExpression(node.expression, node.text, warn, node);\n+        }\n+    }\n+\n+    function checkEvent (exp, text, warn, range) {\n+        var stipped = exp.replace(stripStringRE, '');\n+        var keywordMatch = stipped.match(unaryOperatorsRE);\n+        if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n+            warn(\n+                \"avoid using JavaScript unary operator as property name: \" +\n+                \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n+                range\n+            );\n+        }\n+        checkExpression(exp, text, warn, range);\n+    }\n+\n+    function checkFor (node, text, warn, range) {\n+        checkExpression(node.for || '', text, warn, range);\n+        checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n+        checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n+        checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n+    }\n+\n+    function checkIdentifier (\n+        ident,\n+        type,\n+        text,\n+        warn,\n+        range\n+    ) {\n+        if (typeof ident === 'string') {\n+            try {\n+                new Function((\"var \" + ident + \"=_\"));\n+            } catch (e) {\n+                warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n+            }\n+        }\n+    }\n+\n+    function checkExpression (exp, text, warn, range) {\n+        try {\n+            new Function((\"return \" + exp));\n+        } catch (e) {\n+            var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n+            if (keywordMatch) {\n+                warn(\n+                    \"avoid using JavaScript keyword as property name: \" +\n+                    \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n+                    range\n+                );\n+            } else {\n+                warn(\n+                    \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n+                    \"    \" + exp + \"\\n\\n\" +\n+                    \"  Raw expression: \" + (text.trim()) + \"\\n\",\n+                    range\n+                );\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    var range = 2;\n+\n+    function generateCodeFrame (\n+        source,\n+        start,\n+        end\n+    ) {\n+        if ( start === void 0 ) start = 0;\n+        if ( end === void 0 ) end = source.length;\n+\n+        var lines = source.split(\u002F\\r?\\n\u002F);\n+        var count = 0;\n+        var res = [];\n+        for (var i = 0; i \u003C lines.length; i++) {\n+            count += lines[i].length + 1;\n+            if (count >= start) {\n+                for (var j = i - range; j \u003C= i + range || end > count; j++) {\n+                    if (j \u003C 0 || j >= lines.length) { continue }\n+                    res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n+                    var lineLength = lines[j].length;\n+                    if (j === i) {\n+                        \u002F\u002F push underline\n+                        var pad = start - (count - lineLength) + 1;\n+                        var length = end > count ? lineLength - pad : end - start;\n+                        res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n+                    } else if (j > i) {\n+                        if (end > count) {\n+                            var length$1 = Math.min(end - count, lineLength);\n+                            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n+                        }\n+                        count += lineLength + 1;\n+                    }\n+                }\n+                break\n+            }\n+        }\n+        return res.join('\\n')\n+    }\n+\n+    function repeat$1 (str, n) {\n+        var result = '';\n+        if (n > 0) {\n+            while (true) { \u002F\u002F eslint-disable-line\n+                if (n & 1) { result += str; }\n+                n >>>= 1;\n+                if (n \u003C= 0) { break }\n+                str += str;\n+            }\n+        }\n+        return result\n+    }\n+\n+  \u002F*  *\u002F\n+\n+\n+\n+    function createFunction (code, errors) {\n+        try {\n+            return new Function(code)\n+        } catch (err) {\n+            errors.push({ err: err, code: code });\n+            return noop\n+        }\n+    }\n+\n+    function createCompileToFunctionFn (compile) {\n+        var cache = Object.create(null);\n+\n+        return function compileToFunctions (\n+            template,\n+            options,\n+            vm\n+        ) {\n+            options = extend({}, options);\n+            var warn$$1 = options.warn || warn;\n+            delete options.warn;\n+\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                \u002F\u002F detect possible CSP restriction\n+                try {\n+                    new Function('return 1');\n+                } catch (e) {\n+                    if (e.toString().match(\u002Funsafe-eval|CSP\u002F)) {\n+                        warn$$1(\n+                            'It seems you are using the standalone build of Vue.js in an ' +\n+                            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n+                            'The template compiler cannot work in this environment. Consider ' +\n+                            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n+                            'templates into render functions.'\n+                        );\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F check cache\n+            var key = options.delimiters\n+                ? String(options.delimiters) + template\n+                : template;\n+            if (cache[key]) {\n+                return cache[key]\n+            }\n+\n+            \u002F\u002F compile\n+            var compiled = compile(template, options);\n+\n+            \u002F\u002F check compilation errors\u002Ftips\n+            {\n+                if (compiled.errors && compiled.errors.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.errors.forEach(function (e) {\n+                            warn$$1(\n+                                \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n+                                generateCodeFrame(template, e.start, e.end),\n+                                vm\n+                            );\n+                        });\n+                    } else {\n+                        warn$$1(\n+                            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n+                            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n+                            vm\n+                        );\n+                    }\n+                }\n+                if (compiled.tips && compiled.tips.length) {\n+                    if (options.outputSourceRange) {\n+                        compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n+                    } else {\n+                        compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n+                    }\n+                }\n+            }\n+\n+            \u002F\u002F turn code into functions\n+            var res = {};\n+            var fnGenErrors = [];\n+            res.render = createFunction(compiled.render, fnGenErrors);\n+            res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n+                return createFunction(code, fnGenErrors)\n+            });\n+\n+            \u002F\u002F check function generation errors.\n+            \u002F\u002F this should only happen if there is a bug in the compiler itself.\n+            \u002F\u002F mostly for codegen development use\n+          \u002F* istanbul ignore if *\u002F\n+            {\n+                if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n+                    warn$$1(\n+                        \"Failed to generate render function:\\n\\n\" +\n+                        fnGenErrors.map(function (ref) {\n+                            var err = ref.err;\n+                            var code = ref.code;\n+\n+                            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n+                        }).join('\\n'),\n+                        vm\n+                    );\n+                }\n+            }\n+\n+            return (cache[key] = res)\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    function createCompilerCreator (baseCompile) {\n+        return function createCompiler (baseOptions) {\n+            function compile (\n+                template,\n+                options\n+            ) {\n+                var finalOptions = Object.create(baseOptions);\n+                var errors = [];\n+                var tips = [];\n+\n+                var warn = function (msg, range, tip) {\n+                    (tip ? tips : errors).push(msg);\n+                };\n+\n+                if (options) {\n+                    if (options.outputSourceRange) {\n+                        \u002F\u002F $flow-disable-line\n+                        var leadingSpaceLength = template.match(\u002F^\\s*\u002F)[0].length;\n+\n+                        warn = function (msg, range, tip) {\n+                            var data = { msg: msg };\n+                            if (range) {\n+                                if (range.start != null) {\n+                                    data.start = range.start + leadingSpaceLength;\n+                                }\n+                                if (range.end != null) {\n+                                    data.end = range.end + leadingSpaceLength;\n+                                }\n+                            }\n+                            (tip ? tips : errors).push(data);\n+                        };\n+                    }\n+                    \u002F\u002F merge custom modules\n+                    if (options.modules) {\n+                        finalOptions.modules =\n+                            (baseOptions.modules || []).concat(options.modules);\n+                    }\n+                    \u002F\u002F merge custom directives\n+                    if (options.directives) {\n+                        finalOptions.directives = extend(\n+                            Object.create(baseOptions.directives || null),\n+                            options.directives\n+                        );\n+                    }\n+                    \u002F\u002F copy other options\n+                    for (var key in options) {\n+                        if (key !== 'modules' && key !== 'directives') {\n+                            finalOptions[key] = options[key];\n+                        }\n+                    }\n+                }\n+\n+                finalOptions.warn = warn;\n+\n+                var compiled = baseCompile(template.trim(), finalOptions);\n+                {\n+                    detectErrors(compiled.ast, warn);\n+                }\n+                compiled.errors = errors;\n+                compiled.tips = tips;\n+                return compiled\n+            }\n+\n+            return {\n+                compile: compile,\n+                compileToFunctions: createCompileToFunctionFn(compile)\n+            }\n+        }\n+    }\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F `createCompilerCreator` allows creating compilers that use alternative\n+    \u002F\u002F parser\u002Foptimizer\u002Fcodegen, e.g the SSR optimizing compiler.\n+    \u002F\u002F Here we just export a default compiler using the default parts.\n+    var createCompiler = createCompilerCreator(function baseCompile (\n+        template,\n+        options\n+    ) {\n+        var ast = parse(template.trim(), options);\n+        if (options.optimize !== false) {\n+            optimize(ast, options);\n+        }\n+        var code = generate(ast, options);\n+        return {\n+            ast: ast,\n+            render: code.render,\n+            staticRenderFns: code.staticRenderFns\n+        }\n+    });\n+\n+  \u002F*  *\u002F\n+\n+    var ref$1 = createCompiler(baseOptions);\n+    var compile = ref$1.compile;\n+    var compileToFunctions = ref$1.compileToFunctions;\n+\n+  \u002F*  *\u002F\n+\n+    \u002F\u002F check whether current browser encodes a char inside attribute values\n+    var div;\n+    function getShouldDecode (href) {\n+        div = div || document.createElement('div');\n+        div.innerHTML = href ? \"\u003Ca href=\\\"\\n\\\"\u002F>\" : \"\u003Cdiv a=\\\"\\n\\\"\u002F>\";\n+        return div.innerHTML.indexOf('&#10;') > 0\n+    }\n+\n+    \u002F\u002F #3663: IE encodes newlines inside attribute values while other browsers don't\n+    var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n+    \u002F\u002F #6828: chrome encodes content in a[href]\n+    var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n+\n+  \u002F*  *\u002F\n+\n+    var idToTemplate = cached(function (id) {\n+        var el = query(id);\n+        return el && el.innerHTML\n+    });\n+\n+    var mount = Vue.prototype.$mount;\n+    Vue.prototype.$mount = function (\n+        el,\n+        hydrating\n+    ) {\n+        el = el && query(el);\n+\n+      \u002F* istanbul ignore if *\u002F\n+        if (el === document.body || el === document.documentElement) {\n+            warn(\n+                \"Do not mount Vue to \u003Chtml> or \u003Cbody> - mount to normal elements instead.\"\n+            );\n+            return this\n+        }\n+\n+        var options = this.$options;\n+        \u002F\u002F resolve template\u002Fel and convert to render function\n+        if (!options.render) {\n+            var template = options.template;\n+            if (template) {\n+                if (typeof template === 'string') {\n+                    if (template.charAt(0) === '#') {\n+                        template = idToTemplate(template);\n+                      \u002F* istanbul ignore if *\u002F\n+                        if (!template) {\n+                            warn(\n+                                (\"Template element not found or is empty: \" + (options.template)),\n+                                this\n+                            );\n+                        }\n+                    }\n+                } else if (template.nodeType) {\n+                    template = template.innerHTML;\n+                } else {\n+                    {\n+                        warn('invalid template option:' + template, this);\n+                    }\n+                    return this\n+                }\n+            } else if (el) {\n+                template = getOuterHTML(el);\n+            }\n+            if (template) {\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile');\n+                }\n+\n+                var ref = compileToFunctions(template, {\n+                    outputSourceRange: \"development\" !== 'production',\n+                    shouldDecodeNewlines: shouldDecodeNewlines,\n+                    shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n+                    delimiters: options.delimiters,\n+                    comments: options.comments\n+                }, this);\n+                var render = ref.render;\n+                var staticRenderFns = ref.staticRenderFns;\n+                options.render = render;\n+                options.staticRenderFns = staticRenderFns;\n+\n+              \u002F* istanbul ignore if *\u002F\n+                if (config.performance && mark) {\n+                    mark('compile end');\n+                    measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n+                }\n+            }\n+        }\n+        return mount.call(this, el, hydrating)\n+    };\n+\n+    \u002F**\n+     * Get outerHTML of elements, taking care\n+     * of SVG elements in IE as well.\n+     *\u002F\n+    function getOuterHTML (el) {\n+        if (el.outerHTML) {\n+            return el.outerHTML\n+        } else {\n+            var container = document.createElement('div');\n+            container.appendChild(el.cloneNode(true));\n+            return container.innerHTML\n+        }\n+    }\n+\n+    Vue.compile = compileToFunctions;\n+\n+    return Vue;\n+\n }));\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5625 +1,5625 @@\n-var isFunction;\r\n-!(function (t, e) {\r\n-  \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : ((t = t || self).Vue = e());\r\n-})(this, function () {\r\n-  \"use strict\";\r\n-  var d = Object.freeze({});\r\n-  function P(t) {\r\n-    return null == t;\r\n-  }\r\n-  function I(t) {\r\n-    return null != t;\r\n-  }\r\n-  function O(t) {\r\n-    return !0 === t;\r\n-  }\r\n-  function l(t) {\r\n-    return \"string\" == typeof t || \"number\" == typeof t || \"symbol\" == typeof t || \"boolean\" == typeof t;\r\n-  }\r\n-  function L(t) {\r\n-    return null !== t && \"object\" == typeof t;\r\n-  }\r\n-  var n = Object.prototype.toString;\r\n-  function c(t) {\r\n-    return \"[object Object]\" === n.call(t);\r\n-  }\r\n-  function o(t) {\r\n-    var e = parseFloat(String(t));\r\n-    return 0 \u003C= e && Math.floor(e) === e && isFinite(t);\r\n-  }\r\n-  function h(t) {\r\n-    return I(t) && \"function\" == typeof t.then && \"function\" == typeof t.catch;\r\n-  }\r\n-  function e(t) {\r\n-    return null == t ? \"\" : Array.isArray(t) || (c(t) && t.toString === n) ? JSON.stringify(t, null, 2) : String(t);\r\n-  }\r\n-  function N(t) {\r\n-    var e = parseFloat(t);\r\n-    return isNaN(e) ? t : e;\r\n-  }\r\n-  function a(t, e) {\r\n-    for (var n = Object.create(null), r = t.split(\",\"), o = 0; o \u003C r.length; o++) n[r[o]] = !0;\r\n-    return e\r\n-        ? function (t) {\r\n-          return n[t.toLowerCase()];\r\n-        }\r\n-        : function (t) {\r\n-          return n[t];\r\n-        };\r\n-  }\r\n-  var u = a(\"slot,component\", !0),\r\n-      f = a(\"key,ref,slot,slot-scope,is\");\r\n-  function v(t, e) {\r\n-    if (t.length) {\r\n-      e = t.indexOf(e);\r\n-      if (-1 \u003C e) return t.splice(e, 1);\r\n-    }\r\n-  }\r\n-  var r = Object.prototype.hasOwnProperty;\r\n-  function p(t, e) {\r\n-    return r.call(t, e);\r\n-  }\r\n-  function t(e) {\r\n-    var n = Object.create(null);\r\n-    return function (t) {\r\n-      return n[t] || (n[t] = e(t));\r\n-    };\r\n-  }\r\n-  var i = \u002F-(\\w)\u002Fg,\r\n-      m = t(function (t) {\r\n-        return t.replace(i, function (t, e) {\r\n-          return e ? e.toUpperCase() : \"\";\r\n-        });\r\n-      }),\r\n-      s = t(function (t) {\r\n-        return t.charAt(0).toUpperCase() + t.slice(1);\r\n-      }),\r\n-      y = \u002F\\B([A-Z])\u002Fg,\r\n-      g = t(function (t) {\r\n-        return t.replace(y, \"-$1\").toLowerCase();\r\n-      }),\r\n-      _ = Function.prototype.bind\r\n-          ? function (t, e) {\r\n-            return t.bind(e);\r\n-          }\r\n-          : function (n, r) {\r\n-            function t(t) {\r\n-              var e = arguments.length;\r\n-              return e ? (1 \u003C e ? n.apply(r, arguments) : n.call(r, t)) : n.call(r);\r\n-            }\r\n-            return (t._length = n.length), t;\r\n-          };\r\n-  function b(t, e) {\r\n-    e = e || 0;\r\n-    for (var n = t.length - e, r = new Array(n); n--; ) r[n] = t[n + e];\r\n-    return r;\r\n-  }\r\n-  function w(t, e) {\r\n-    for (var n in e) t[n] = e[n];\r\n-    return t;\r\n-  }\r\n-  function x(t) {\r\n-    for (var e = {}, n = 0; n \u003C t.length; n++) t[n] && w(e, t[n]);\r\n-    return e;\r\n-  }\r\n-  function $(t, e, n) {}\r\n-  function k(t, e, n) {\r\n-    return !1;\r\n-  }\r\n-  var C = function (t) {\r\n-    return t;\r\n-  };\r\n-  function A(e, n) {\r\n-    if (e === n) return !0;\r\n-    var t = L(e),\r\n-        r = L(n);\r\n-    if (!t || !r) return !t && !r && String(e) === String(n);\r\n-    try {\r\n-      var o = Array.isArray(e),\r\n-          i = Array.isArray(n);\r\n-      if (o && i)\r\n-        return (\r\n-            e.length === n.length &&\r\n-            e.every(function (t, e) {\r\n-              return A(t, n[e]);\r\n-            })\r\n-        );\r\n-      if (e instanceof Date && n instanceof Date) return e.getTime() === n.getTime();\r\n-      if (o || i) return !1;\r\n-      (o = Object.keys(e)), (i = Object.keys(n));\r\n-      return (\r\n-          o.length === i.length &&\r\n-          o.every(function (t) {\r\n-            return A(e[t], n[t]);\r\n-          })\r\n-      );\r\n-    } catch (e) {\r\n-      return !1;\r\n-    }\r\n-  }\r\n-  function S(t, e) {\r\n-    for (var n = 0; n \u003C t.length; n++) if (A(t[n], e)) return n;\r\n-    return -1;\r\n-  }\r\n-  function D(t) {\r\n-    var e = !1;\r\n-    return function () {\r\n-      e || ((e = !0), t.apply(this, arguments));\r\n-    };\r\n-  }\r\n-  var T = \"data-server-rendered\",\r\n-      j = [\"component\", \"directive\", \"filter\"],\r\n-      E = [\"beforeCreate\", \"created\", \"beforeMount\", \"mounted\", \"beforeUpdate\", \"updated\", \"beforeDestroy\", \"destroyed\", \"activated\", \"deactivated\", \"errorCaptured\", \"serverPrefetch\"],\r\n-      M = {\r\n-        optionMergeStrategies: Object.create(null),\r\n-        silent: !1,\r\n-        productionTip: !1,\r\n-        devtools: !1,\r\n-        performance: !1,\r\n-        errorHandler: null,\r\n-        warnHandler: null,\r\n-        ignoredElements: [],\r\n-        keyCodes: Object.create(null),\r\n-        isReservedTag: k,\r\n-        isReservedAttr: k,\r\n-        isUnknownElement: k,\r\n-        getTagNamespace: $,\r\n-        parsePlatformTagName: C,\r\n-        mustUseProp: k,\r\n-        async: !0,\r\n-        _lifecycleHooks: E,\r\n-      },\r\n-      F = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\r\n-  function R(t, e, n, r) {\r\n-    Object.defineProperty(t, e, { value: n, enumerable: !!r, writable: !0, configurable: !0 });\r\n-  }\r\n-  var z,\r\n-      H = new RegExp(\"[^\" + F.source + \".$_\\\\d]\"),\r\n-      U = \"__proto__\" in {},\r\n-      B = \"undefined\" != typeof window,\r\n-      V = \"undefined\" != typeof WXEnvironment && !!WXEnvironment.platform,\r\n-      W = V && WXEnvironment.platform.toLowerCase(),\r\n-      q = B && window.navigator.userAgent.toLowerCase(),\r\n-      J = q && \u002Fmsie|trident\u002F.test(q),\r\n-      G = q && 0 \u003C q.indexOf(\"msie 9.0\"),\r\n-      K = q && 0 \u003C q.indexOf(\"edge\u002F\"),\r\n-      X = (q && q.indexOf(\"android\"), (q && \u002Fiphone|ipad|ipod|ios\u002F.test(q)) || \"ios\" === W),\r\n-      Q = (q && \u002Fchrome\\\u002F\\d+\u002F.test(q), q && \u002Fphantomjs\u002F.test(q), q && q.match(\u002Ffirefox\\\u002F(\\d+)\u002F)),\r\n-      Y = {}.watch,\r\n-      Z = !1;\r\n-  if (B)\r\n-    try {\r\n-      var tt = {};\r\n-      Object.defineProperty(tt, \"passive\", {\r\n-        get: function () {\r\n-          Z = !0;\r\n-        },\r\n-      }),\r\n-          window.addEventListener(\"test-passive\", null, tt);\r\n-    } catch (d) {}\r\n-  var et = function () {\r\n-        return void 0 === z && (z = !B && !V && \"undefined\" != typeof global && global.process && \"server\" === global.process.env.VUE_ENV), z;\r\n-      },\r\n-      nt = B && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-  function rt(t) {\r\n-    return \"function\" == typeof t && \u002Fnative code\u002F.test(t.toString());\r\n-  }\r\n-  var ot,\r\n-      it = \"undefined\" != typeof Symbol && rt(Symbol) && \"undefined\" != typeof Reflect && rt(Reflect.ownKeys);\r\n-  function at() {\r\n-    this.set = Object.create(null);\r\n-  }\r\n-  ot =\r\n-      \"undefined\" != typeof Set && rt(Set)\r\n-          ? Set\r\n-          : ((at.prototype.has = function (t) {\r\n-            return !0 === this.set[t];\r\n-          }),\r\n-              (at.prototype.add = function (t) {\r\n-                this.set[t] = !0;\r\n-              }),\r\n-              (at.prototype.clear = function () {\r\n-                this.set = Object.create(null);\r\n-              }),\r\n-              at);\r\n-  var st = $,\r\n-      ct = 0,\r\n-      lt = function () {\r\n-        (this.id = ct++), (this.subs = []);\r\n-      };\r\n-  (lt.prototype.addSub = function (t) {\r\n-    this.subs.push(t);\r\n-  }),\r\n-      (lt.prototype.removeSub = function (t) {\r\n-        v(this.subs, t);\r\n-      }),\r\n-      (lt.prototype.depend = function () {\r\n-        lt.target && lt.target.addDep(this);\r\n-      }),\r\n-      (lt.prototype.notify = function () {\r\n-        for (var t = this.subs.slice(), e = 0, n = t.length; e \u003C n; e++) t[e].update();\r\n-      }),\r\n-      (lt.target = null);\r\n-  var ut = [];\r\n-  function ft(t) {\r\n-    ut.push(t), (lt.target = t);\r\n-  }\r\n-  function pt() {\r\n-    ut.pop(), (lt.target = ut[ut.length - 1]);\r\n-  }\r\n-  var dt = function (t, e, n, r, o, i, a, s) {\r\n-        (this.tag = t),\r\n-            (this.data = e),\r\n-            (this.children = n),\r\n-            (this.text = r),\r\n-            (this.elm = o),\r\n-            (this.ns = void 0),\r\n-            (this.context = i),\r\n-            (this.fnContext = void 0),\r\n-            (this.fnOptions = void 0),\r\n-            (this.fnScopeId = void 0),\r\n-            (this.key = e && e.key),\r\n-            (this.componentOptions = a),\r\n-            (this.componentInstance = void 0),\r\n-            (this.parent = void 0),\r\n-            (this.raw = !1),\r\n-            (this.isStatic = !1),\r\n-            (this.isRootInsert = !0),\r\n-            (this.isComment = !1),\r\n-            (this.isCloned = !1),\r\n-            (this.isOnce = !1),\r\n-            (this.asyncFactory = s),\r\n-            (this.asyncMeta = void 0),\r\n-            (this.isAsyncPlaceholder = !1);\r\n-      },\r\n-      ht = { child: { configurable: !0 } };\r\n-  (ht.child.get = function () {\r\n-    return this.componentInstance;\r\n-  }),\r\n-      Object.defineProperties(dt.prototype, ht);\r\n-  var vt = function (t) {\r\n-    void 0 === t && (t = \"\");\r\n-    var e = new dt();\r\n-    return (e.text = t), (e.isComment = !0), e;\r\n-  };\r\n-  function mt(t) {\r\n-    return new dt(void 0, void 0, void 0, String(t));\r\n-  }\r\n-  function yt(t) {\r\n-    var e = new dt(t.tag, t.data, t.children && t.children.slice(), t.text, t.elm, t.context, t.componentOptions, t.asyncFactory);\r\n-    return (e.ns = t.ns), (e.isStatic = t.isStatic), (e.key = t.key), (e.isComment = t.isComment), (e.fnContext = t.fnContext), (e.fnOptions = t.fnOptions), (e.fnScopeId = t.fnScopeId), (e.asyncMeta = t.asyncMeta), (e.isCloned = !0), e;\r\n-  }\r\n-  var gt = Array.prototype,\r\n-      _t = Object.create(gt);\r\n-  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\", \"sort\", \"reverse\"].forEach(function (i) {\r\n-    var a = gt[i];\r\n-    R(_t, i, function () {\r\n-      for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\r\n-      var n,\r\n-          r = a.apply(this, t),\r\n-          o = this.__ob__;\r\n-      switch (i) {\r\n-      case \"push\":\r\n-      case \"unshift\":\r\n-        n = t;\r\n-        break;\r\n-      case \"splice\":\r\n-        n = t.slice(2);\r\n-      }\r\n-      return n && o.observeArray(n), o.dep.notify(), r;\r\n-    });\r\n-  });\r\n-  var bt = Object.getOwnPropertyNames(_t),\r\n-      wt = !0;\r\n-  function xt(t) {\r\n-    wt = t;\r\n-  }\r\n-  var $t = function (t) {\r\n-    (this.value = t),\r\n-        (this.dep = new lt()),\r\n-        (this.vmCount = 0),\r\n-        R(t, \"__ob__\", this),\r\n-        Array.isArray(t)\r\n-            ? (U\r\n-            ? (t.__proto__ = _t)\r\n-            : (function (t, e, n) {\r\n-              for (var r = 0, o = n.length; r \u003C o; r++) {\r\n-                var i = n[r];\r\n-                R(t, i, e[i]);\r\n-              }\r\n-            })(t, _t, bt),\r\n-                this.observeArray(t))\r\n-            : this.walk(t);\r\n-  };\r\n-  function kt(t, e) {\r\n-    var n;\r\n-    if (L(t) && !(t instanceof dt)) return p(t, \"__ob__\") && t.__ob__ instanceof $t ? (n = t.__ob__) : wt && !et() && (Array.isArray(t) || c(t)) && Object.isExtensible(t) && !t._isVue && (n = new $t(t)), e && n && n.vmCount++, n;\r\n-  }\r\n-  function Ct(n, t, r, e, o) {\r\n-    var i,\r\n-        a,\r\n-        s,\r\n-        c = new lt(),\r\n-        l = Object.getOwnPropertyDescriptor(n, t);\r\n-    (l && !1 === l.configurable) ||\r\n-    ((i = l && l.get),\r\n-        (a = l && l.set),\r\n-    (i && !a) || 2 !== arguments.length || (r = n[t]),\r\n-        (s = !o && kt(r)),\r\n-        Object.defineProperty(n, t, {\r\n-          enumerable: !0,\r\n-          configurable: !0,\r\n-          get: function () {\r\n-            var t = i ? i.call(n) : r;\r\n-            return (\r\n-                lt.target &&\r\n-                (c.depend(),\r\n-                s &&\r\n-                (s.dep.depend(),\r\n-                Array.isArray(t) &&\r\n-                (function t(e) {\r\n-                  for (var n = void 0, r = 0, o = e.length; r \u003C o; r++) (n = e[r]) && n.__ob__ && n.__ob__.dep.depend(), Array.isArray(n) && t(n);\r\n-                })(t))),\r\n-                    t\r\n-            );\r\n-          },\r\n-          set: function (t) {\r\n-            var e = i ? i.call(n) : r;\r\n-            t === e || (t != t && e != e) || (i && !a) || (a ? a.call(n, t) : (r = t), (s = !o && kt(t)), c.notify());\r\n-          },\r\n-        }));\r\n-  }\r\n-  function Ot(t, e, n) {\r\n-    if (Array.isArray(t) && o(e)) return (t.length = Math.max(t.length, e)), t.splice(e, 1, n), n;\r\n-    if (e in t && !(e in Object.prototype)) return (t[e] = n);\r\n-    var r = t.__ob__;\r\n-    return t._isVue || (r && r.vmCount) || (r ? (Ct(r.value, e, n), r.dep.notify()) : (t[e] = n)), n;\r\n-  }\r\n-  function At(t, e) {\r\n-    var n;\r\n-    Array.isArray(t) && o(e) ? t.splice(e, 1) : ((n = t.__ob__), t._isVue || (n && n.vmCount) || (p(t, e) && (delete t[e], n && n.dep.notify())));\r\n-  }\r\n-  ($t.prototype.walk = function (t) {\r\n-    for (var e = Object.keys(t), n = 0; n \u003C e.length; n++) Ct(t, e[n]);\r\n-  }),\r\n-      ($t.prototype.observeArray = function (t) {\r\n-        for (var e = 0, n = t.length; e \u003C n; e++) kt(t[e]);\r\n-      });\r\n-  var St = M.optionMergeStrategies;\r\n-  function Tt(t, e) {\r\n-    if (!e) return t;\r\n-    for (var n, r, o, i = it ? Reflect.ownKeys(e) : Object.keys(e), a = 0; a \u003C i.length; a++) \"__ob__\" !== (n = i[a]) && ((r = t[n]), (o = e[n]), p(t, n) ? r !== o && c(r) && c(o) && Tt(r, o) : Ot(t, n, o));\r\n-    return t;\r\n-  }\r\n-  function jt(n, r, o) {\r\n-    return o\r\n-        ? function () {\r\n-          var t = \"function\" == typeof r ? r.call(o, o) : r,\r\n-              e = \"function\" == typeof n ? n.call(o, o) : n;\r\n-          return t ? Tt(t, e) : e;\r\n-        }\r\n-        : r\r\n-            ? n\r\n-                ? function () {\r\n-                  return Tt(\"function\" == typeof r ? r.call(this, this) : r, \"function\" == typeof n ? n.call(this, this) : n);\r\n-                }\r\n-                : r\r\n-            : n;\r\n-  }\r\n-  function Et(t, e) {\r\n-    t = e ? (t ? t.concat(e) : Array.isArray(e) ? e : [e]) : t;\r\n-    return (\r\n-        t &&\r\n-        (function (t) {\r\n-          for (var e = [], n = 0; n \u003C t.length; n++) -1 === e.indexOf(t[n]) && e.push(t[n]);\r\n-          return e;\r\n-        })(t)\r\n-    );\r\n-  }\r\n-  function Mt(t, e, n, r) {\r\n-    t = Object.create(t || null);\r\n-    return e ? w(t, e) : t;\r\n-  }\r\n-  (St.data = function (t, e, n) {\r\n-    return n ? jt(t, e, n) : e && \"function\" != typeof e ? t : jt(t, e);\r\n-  }),\r\n-      E.forEach(function (t) {\r\n-        St[t] = Et;\r\n-      }),\r\n-      j.forEach(function (t) {\r\n-        St[t + \"s\"] = Mt;\r\n-      }),\r\n-      (St.watch = function (t, e, n, r) {\r\n-        if ((t === Y && (t = void 0), e === Y && (e = void 0), !e)) return Object.create(t || null);\r\n-        if (!t) return e;\r\n-        var o,\r\n-            i = {};\r\n-        for (o in (w(i, t), e)) {\r\n-          var a = i[o],\r\n-              s = e[o];\r\n-          a && !Array.isArray(a) && (a = [a]), (i[o] = a ? a.concat(s) : Array.isArray(s) ? s : [s]);\r\n-        }\r\n-        return i;\r\n-      }),\r\n-      (St.props = St.methods = St.inject = St.computed = function (t, e, n, r) {\r\n-        if (!t) return e;\r\n-        var o = Object.create(null);\r\n-        return w(o, t), e && w(o, e), o;\r\n-      }),\r\n-      (St.provide = jt);\r\n-  var Pt = function (t, e) {\r\n-    return void 0 === e ? t : e;\r\n-  };\r\n-  function It(n, i, r) {\r\n-    if (\r\n-        (\"function\" == typeof i && (i = i.options),\r\n-            (function (t) {\r\n-              var e = t.props;\r\n-              if (e) {\r\n-                var n,\r\n-                    r,\r\n-                    o = {};\r\n-                if (Array.isArray(e)) for (n = e.length; n--; ) \"string\" == typeof (r = e[n]) && (o[m(r)] = { type: null });\r\n-                else if (c(e)) for (var i in e) (r = e[i]), (o[m(i)] = c(r) ? r : { type: r });\r\n-                t.props = o;\r\n-              }\r\n-            })(i),\r\n-            (function () {\r\n-              var t = i.inject;\r\n-              if (t) {\r\n-                var e = (i.inject = {});\r\n-                if (Array.isArray(t)) for (var n = 0; n \u003C t.length; n++) e[t[n]] = { from: t[n] };\r\n-                else if (c(t))\r\n-                  for (var r in t) {\r\n-                    var o = t[r];\r\n-                    e[r] = c(o) ? w({ from: r }, o) : { from: o };\r\n-                  }\r\n-              }\r\n-            })(),\r\n-            (function () {\r\n-              var t = i.directives;\r\n-              if (t)\r\n-                for (var e in t) {\r\n-                  var n = t[e];\r\n-                  \"function\" == typeof n && (t[e] = { bind: n, update: n });\r\n-                }\r\n-            })(),\r\n-        !i._base && (i.extends && (n = It(n, i.extends, r)), i.mixins))\r\n-    )\r\n-      for (var t = 0, e = i.mixins.length; t \u003C e; t++) n = It(n, i.mixins[t], r);\r\n-    var o,\r\n-        a = {};\r\n-    for (o in n) s(o);\r\n-    for (o in i) p(n, o) || s(o);\r\n-    function s(t) {\r\n-      var e = St[t] || Pt;\r\n-      a[t] = e(n[t], i[t], r, t);\r\n-    }\r\n-    return a;\r\n-  }\r\n-  function Lt(t, e, n) {\r\n-    if (\"string\" == typeof n) {\r\n-      var r = t[e];\r\n-      if (p(r, n)) return r[n];\r\n-      t = m(n);\r\n-      if (p(r, t)) return r[t];\r\n-      e = s(t);\r\n-      return (!p(r, e) && (r[n] || r[t])) || r[e];\r\n-    }\r\n-  }\r\n-  function Nt(t, e, n, r) {\r\n-    var o = e[t],\r\n-        i = !p(n, t),\r\n-        e = n[t],\r\n-        n = Rt(Boolean, o.type);\r\n-    return (\r\n-        -1 \u003C n && (i && !p(o, \"default\") ? (e = !1) : (\"\" !== e && e !== g(t)) || (((i = Rt(String, o.type)) \u003C 0 || n \u003C i) && (e = !0))),\r\n-        void 0 === e &&\r\n-        ((e = (function (t, e, n) {\r\n-          if (p(e, \"default\")) {\r\n-            var r = e.default;\r\n-            return t && t.$options.propsData && void 0 === t.$options.propsData[n] && void 0 !== t._props[n] ? t._props[n] : \"function\" == typeof r && \"Function\" !== Dt(e.type) ? r.call(t) : r;\r\n-          }\r\n-        })(r, o, t)),\r\n-            (t = wt),\r\n-            xt(!0),\r\n-            kt(e),\r\n-            xt(t)),\r\n-            e\r\n-    );\r\n-  }\r\n-  function Dt(t) {\r\n-    t = t && t.toString().match(\u002F^\\s*function (\\w+)\u002F);\r\n-    return t ? t[1] : \"\";\r\n-  }\r\n-  function Ft(t, e) {\r\n-    return Dt(t) === Dt(e);\r\n-  }\r\n-  function Rt(t, e) {\r\n-    if (!Array.isArray(e)) return Ft(e, t) ? 0 : -1;\r\n-    for (var n = 0, r = e.length; n \u003C r; n++) if (Ft(e[n], t)) return n;\r\n-    return -1;\r\n-  }\r\n-  function zt(t, e, n) {\r\n-    ft();\r\n-    try {\r\n-      if (e)\r\n-        for (var r = e; (r = r.$parent); ) {\r\n-          var o = r.$options.errorCaptured;\r\n-          if (o)\r\n-            for (var i = 0; i \u003C o.length; i++)\r\n-              try {\r\n-                if (!1 === o[i].call(r, t, e, n)) return;\r\n-              } catch (t) {\r\n-                Ut(t, r, \"errorCaptured hook\");\r\n-              }\r\n-        }\r\n-      Ut(t, e, n);\r\n-    } finally {\r\n-      pt();\r\n-    }\r\n-  }\r\n-  function Ht(t, e, n, r, o) {\r\n-    var i;\r\n-    try {\r\n-      (i = n ? t.apply(e, n) : t.call(e)) &&\r\n-      !i._isVue &&\r\n-      h(i) &&\r\n-      !i._handled &&\r\n-      (i.catch(function (t) {\r\n-        return zt(t, r, o + \" (Promise\u002Fasync)\");\r\n-      }),\r\n-          (i._handled = !0));\r\n-    } catch (t) {\r\n-      zt(t, r, o);\r\n-    }\r\n-    return i;\r\n-  }\r\n-  function Ut(t, e, n) {\r\n-    if (M.errorHandler)\r\n-      try {\r\n-        return M.errorHandler.call(null, t, e, n);\r\n-      } catch (e) {\r\n-        e !== t && Bt(e);\r\n-      }\r\n-    Bt(t);\r\n-  }\r\n-  function Bt(t) {\r\n-    if ((!B && !V) || \"undefined\" == typeof console) throw t;\r\n-    console.error(t);\r\n-  }\r\n-  var Vt,\r\n-      Wt,\r\n-      qt,\r\n-      Jt,\r\n-      Gt = !1,\r\n-      Kt = [],\r\n-      Xt = !1;\r\n-  function Qt() {\r\n-    Xt = !1;\r\n-    for (var t = Kt.slice(0), e = (Kt.length = 0); e \u003C t.length; e++) t[e]();\r\n-  }\r\n-  function Yt(t, e) {\r\n-    var n;\r\n-    if (\r\n-        (Kt.push(function () {\r\n-          if (t)\r\n-            try {\r\n-              t.call(e);\r\n-            } catch (t) {\r\n-              zt(t, e, \"nextTick\");\r\n-            }\r\n-          else n && n(e);\r\n-        }),\r\n-        Xt || ((Xt = !0), Wt()),\r\n-        !t && \"undefined\" != typeof Promise)\r\n-    )\r\n-      return new Promise(function (t) {\r\n-        n = t;\r\n-      });\r\n-  }\r\n-  \"undefined\" != typeof Promise && rt(Promise)\r\n-      ? ((Vt = Promise.resolve()),\r\n-          (Wt = function () {\r\n-            Vt.then(Qt), X && setTimeout($);\r\n-          }),\r\n-          (Gt = !0))\r\n-      : J || \"undefined\" == typeof MutationObserver || (!rt(MutationObserver) && \"[object MutationObserverConstructor]\" !== MutationObserver.toString())\r\n-      ? (Wt =\r\n-          \"undefined\" != typeof setImmediate && rt(setImmediate)\r\n-              ? function () {\r\n-                setImmediate(Qt);\r\n-              }\r\n-              : function () {\r\n-                setTimeout(Qt, 0);\r\n-              })\r\n-      : ((qt = 1),\r\n-          (On = new MutationObserver(Qt)),\r\n-          (Jt = document.createTextNode(String(qt))),\r\n-          On.observe(Jt, { characterData: !0 }),\r\n-          (Wt = function () {\r\n-            (qt = (qt + 1) % 2), (Jt.data = String(qt));\r\n-          }),\r\n-          (Gt = !0));\r\n-  var Zt = new ot();\r\n-  function te(t) {\r\n-    !(function t(e, n) {\r\n-      var r,\r\n-          o,\r\n-          i = Array.isArray(e);\r\n-      if (!((!i && !L(e)) || Object.isFrozen(e) || e instanceof dt)) {\r\n-        if (e.__ob__) {\r\n-          var a = e.__ob__.dep.id;\r\n-          if (n.has(a)) return;\r\n-          n.add(a);\r\n-        }\r\n-        if (i) for (r = e.length; r--; ) t(e[r], n);\r\n-        else for (r = (o = Object.keys(e)).length; r--; ) t(e[o[r]], n);\r\n-      }\r\n-    })(t, Zt),\r\n-        Zt.clear();\r\n-  }\r\n-  var ee = t(function (t) {\r\n-    var e = \"&\" === t.charAt(0),\r\n-        n = \"~\" === (t = e ? t.slice(1) : t).charAt(0),\r\n-        r = \"!\" === (t = n ? t.slice(1) : t).charAt(0);\r\n-    return { name: (t = r ? t.slice(1) : t), once: n, capture: r, passive: e };\r\n-  });\r\n-  function ne(t, o) {\r\n-    function i() {\r\n-      var t = arguments,\r\n-          e = i.fns;\r\n-      if (!Array.isArray(e)) return Ht(e, null, arguments, o, \"v-on handler\");\r\n-      for (var n = e.slice(), r = 0; r \u003C n.length; r++) Ht(n[r], null, t, o, \"v-on handler\");\r\n-    }\r\n-    return (i.fns = t), i;\r\n-  }\r\n-  function re(t, e, n, r, o, i) {\r\n-    var a, s, c, l;\r\n-    for (a in t)\r\n-      (s = t[a]), (c = e[a]), (l = ee(a)), P(s) || (P(c) ? (P(s.fns) && (s = t[a] = ne(s, i)), O(l.once) && (s = t[a] = o(l.name, s, l.capture)), n(l.name, s, l.capture, l.passive, l.params)) : s !== c && ((c.fns = s), (t[a] = c)));\r\n-    for (a in e) P(t[a]) && r((l = ee(a)).name, e[a], l.capture);\r\n-  }\r\n-  function oe(t, e, n) {\r\n-    var r;\r\n-    t instanceof dt && (t = t.data.hook || (t.data.hook = {}));\r\n-    var o = t[e];\r\n-    function i() {\r\n-      n.apply(this, arguments), v(r.fns, i);\r\n-    }\r\n-    P(o) ? (r = ne([i])) : I(o.fns) && O(o.merged) ? (r = o).fns.push(i) : (r = ne([o, i])), (r.merged = !0), (t[e] = r);\r\n-  }\r\n-  function ie(t, e, n, r, o) {\r\n-    if (I(e)) {\r\n-      if (p(e, n)) return (t[n] = e[n]), o || delete e[n], 1;\r\n-      if (p(e, r)) return (t[n] = e[r]), o || delete e[r], 1;\r\n-    }\r\n-  }\r\n-  function ae(t) {\r\n-    return l(t)\r\n-        ? [mt(t)]\r\n-        : Array.isArray(t)\r\n-            ? (function t(e, n) {\r\n-              for (var r, o, i, a = [], s = 0; s \u003C e.length; s++)\r\n-                P((r = e[s])) ||\r\n-                \"boolean\" == typeof r ||\r\n-                ((i = a[(o = a.length - 1)]),\r\n-                    Array.isArray(r)\r\n-                        ? 0 \u003C r.length && (se((r = t(r, (n || \"\") + \"_\" + s))[0]) && se(i) && ((a[o] = mt(i.text + r[0].text)), r.shift()), a.push.apply(a, r))\r\n-                        : l(r)\r\n-                        ? se(i)\r\n-                            ? (a[o] = mt(i.text + r))\r\n-                            : \"\" !== r && a.push(mt(r))\r\n-                        : se(r) && se(i)\r\n-                            ? (a[o] = mt(i.text + r.text))\r\n-                            : (O(e._isVList) && I(r.tag) && P(r.key) && I(n) && (r.key = \"__vlist\" + n + \"_\" + s + \"__\"), a.push(r)));\r\n-              return a;\r\n-            })(t)\r\n-            : void 0;\r\n-  }\r\n-  function se(t) {\r\n-    return I(t) && I(t.text) && !1 === t.isComment;\r\n-  }\r\n-  function ce(t, e) {\r\n-    if (t) {\r\n-      for (var n = Object.create(null), r = it ? Reflect.ownKeys(t) : Object.keys(t), o = 0; o \u003C r.length; o++) {\r\n-        var i = r[o];\r\n-        if (\"__ob__\" !== i) {\r\n-          for (var a, s = t[i].from, c = e; c; ) {\r\n-            if (c._provided && p(c._provided, s)) {\r\n-              n[i] = c._provided[s];\r\n-              break;\r\n-            }\r\n-            c = c.$parent;\r\n-          }\r\n-          !c && \"default\" in t[i] && ((a = t[i].default), (n[i] = \"function\" == typeof a ? a.call(e) : a));\r\n-        }\r\n-      }\r\n-      return n;\r\n-    }\r\n-  }\r\n-  function le(t, e) {\r\n-    if (!t || !t.length) return {};\r\n-    for (var n, r = {}, o = 0, i = t.length; o \u003C i; o++) {\r\n-      var a = t[o],\r\n-          s = a.data;\r\n-      s && s.attrs && s.attrs.slot && delete s.attrs.slot,\r\n-          (a.context !== e && a.fnContext !== e) || !s || null == s.slot ? (r.default || (r.default = [])).push(a) : ((s = r[(s = s.slot)] || (r[s] = [])), \"template\" === a.tag ? s.push.apply(s, a.children || []) : s.push(a));\r\n-    }\r\n-    for (n in r) r[n].every(ue) && delete r[n];\r\n-    return r;\r\n-  }\r\n-  function ue(t) {\r\n-    return (t.isComment && !t.asyncFactory) || \" \" === t.text;\r\n-  }\r\n-  function fe(t, e, n) {\r\n-    var r,\r\n-        o,\r\n-        i = 0 \u003C Object.keys(e).length,\r\n-        a = t ? !!t.$stable : !i,\r\n-        s = t && t.$key;\r\n-    if (t) {\r\n-      if (t._normalized) return t._normalized;\r\n-      if (a && n && n !== d && s === n.$key && !i && !n.$hasNormal) return n;\r\n-      for (var c in ((r = {}), t))\r\n-        t[c] &&\r\n-        \"$\" !== c[0] &&\r\n-        (r[c] = (function (t, e, n) {\r\n-          function r() {\r\n-            var t = arguments.length ? n.apply(null, arguments) : n({});\r\n-            return (t = t && \"object\" == typeof t && !Array.isArray(t) ? [t] : ae(t)) && (0 === t.length || (1 === t.length && t[0].isComment)) ? void 0 : t;\r\n-          }\r\n-          return n.proxy && Object.defineProperty(t, e, { get: r, enumerable: !0, configurable: !0 }), r;\r\n-        })(e, c, t[c]));\r\n-    } else r = {};\r\n-    for (o in e)\r\n-      o in r ||\r\n-      (r[o] = (function (t, e) {\r\n-        return function () {\r\n-          return t[e];\r\n-        };\r\n-      })(e, o));\r\n-    return t && Object.isExtensible(t) && (t._normalized = r), R(r, \"$stable\", a), R(r, \"$key\", s), R(r, \"$hasNormal\", i), r;\r\n-  }\r\n-  function pe(t, e) {\r\n-    var n, r, o, i, a;\r\n-    if (Array.isArray(t) || \"string\" == typeof t) for (n = new Array(t.length), r = 0, o = t.length; r \u003C o; r++) n[r] = e(t[r], r);\r\n-    else if (\"number\" == typeof t) for (n = new Array(t), r = 0; r \u003C t; r++) n[r] = e(r + 1, r);\r\n-    else if (L(t))\r\n-      if (it && t[Symbol.iterator]) {\r\n-        n = [];\r\n-        for (var s = t[Symbol.iterator](), c = s.next(); !c.done; ) n.push(e(c.value, n.length)), (c = s.next());\r\n-      } else for (i = Object.keys(t), n = new Array(i.length), r = 0, o = i.length; r \u003C o; r++) (a = i[r]), (n[r] = e(t[a], a, r));\r\n-    return I(n) || (n = []), (n._isVList = !0), n;\r\n-  }\r\n-  function de(t, e, n, r) {\r\n-    var o = this.$scopedSlots[t],\r\n-        e = o ? ((n = n || {}), r && (n = w(w({}, r), n)), o(n) || e) : this.$slots[t] || e,\r\n-        n = n && n.slot;\r\n-    return n ? this.$createElement(\"template\", { slot: n }, e) : e;\r\n-  }\r\n-  function he(t) {\r\n-    return Lt(this.$options, \"filters\", t) || C;\r\n-  }\r\n-  function ve(t, e) {\r\n-    return Array.isArray(t) ? -1 === t.indexOf(e) : t !== e;\r\n-  }\r\n-  function me(t, e, n, r, o) {\r\n-    n = M.keyCodes[e] || n;\r\n-    return o && r && !M.keyCodes[e] ? ve(o, r) : n ? ve(n, t) : r ? g(r) !== e : void 0;\r\n-  }\r\n-  function ye(r, o, i, a, s) {\r\n-    if (i && L(i)) {\r\n-      var c;\r\n-      Array.isArray(i) && (i = x(i));\r\n-      for (var t in i)\r\n-        !(function (e) {\r\n-          c = \"class\" === e || \"style\" === e || f(e) ? r : ((n = r.attrs && r.attrs.type), a || M.mustUseProp(o, n, e) ? r.domProps || (r.domProps = {}) : r.attrs || (r.attrs = {}));\r\n-          var t = m(e),\r\n-              n = g(e);\r\n-          t in c ||\r\n-          n in c ||\r\n-          ((c[e] = i[e]),\r\n-          s &&\r\n-          ((r.on || (r.on = {}))[\"update:\" + e] = function (t) {\r\n-            i[e] = t;\r\n-          }));\r\n-        })(t);\r\n-    }\r\n-    return r;\r\n-  }\r\n-  function ge(t, e) {\r\n-    var n = this._staticTrees || (this._staticTrees = []),\r\n-        r = n[t];\r\n-    return (r && !e) || be((r = n[t] = this.$options.staticRenderFns[t].call(this._renderProxy, null, this)), \"__static__\" + t, !1), r;\r\n-  }\r\n-  function _e(t, e, n) {\r\n-    return be(t, \"__once__\" + e + (n ? \"_\" + n : \"\"), !0), t;\r\n-  }\r\n-  function be(t, e, n) {\r\n-    if (Array.isArray(t)) for (var r = 0; r \u003C t.length; r++) t[r] && \"string\" != typeof t[r] && we(t[r], e + \"_\" + r, n);\r\n-    else we(t, e, n);\r\n-  }\r\n-  function we(t, e, n) {\r\n-    (t.isStatic = !0), (t.key = e), (t.isOnce = n);\r\n-  }\r\n-  function xe(t, e) {\r\n-    if (e && c(e)) {\r\n-      var n,\r\n-          r = (t.on = t.on ? w({}, t.on) : {});\r\n-      for (n in e) {\r\n-        var o = r[n],\r\n-            i = e[n];\r\n-        r[n] = o ? [].concat(o, i) : i;\r\n-      }\r\n-    }\r\n-    return t;\r\n-  }\r\n-  function $e(t, e, n, r) {\r\n-    e = e || { $stable: !n };\r\n-    for (var o = 0; o \u003C t.length; o++) {\r\n-      var i = t[o];\r\n-      Array.isArray(i) ? $e(i, e, n) : i && (i.proxy && (i.fn.proxy = !0), (e[i.key] = i.fn));\r\n-    }\r\n-    return r && (e.$key = r), e;\r\n-  }\r\n-  function ke(t, e) {\r\n-    for (var n = 0; n \u003C e.length; n += 2) {\r\n-      var r = e[n];\r\n-      \"string\" == typeof r && r && (t[e[n]] = e[n + 1]);\r\n-    }\r\n-    return t;\r\n-  }\r\n-  function Ce(t, e) {\r\n-    return \"string\" == typeof t ? e + t : t;\r\n-  }\r\n-  function Oe(t) {\r\n-    (t._o = _e), (t._n = N), (t._s = e), (t._l = pe), (t._t = de), (t._q = A), (t._i = S), (t._m = ge), (t._f = he), (t._k = me), (t._b = ye), (t._v = mt), (t._e = vt), (t._u = $e), (t._g = xe), (t._d = ke), (t._p = Ce);\r\n-  }\r\n-  function Ae(t, e, n, o, r) {\r\n-    var i,\r\n-        a = this,\r\n-        s = r.options;\r\n-    p(o, \"_uid\") ? ((i = Object.create(o))._original = o) : (o = (i = o)._original);\r\n-    var r = O(s._compiled),\r\n-        c = !r;\r\n-    (this.data = t),\r\n-        (this.props = e),\r\n-        (this.children = n),\r\n-        (this.parent = o),\r\n-        (this.listeners = t.on || d),\r\n-        (this.injections = ce(s.inject, o)),\r\n-        (this.slots = function () {\r\n-          return a.$slots || fe(t.scopedSlots, (a.$slots = le(n, o))), a.$slots;\r\n-        }),\r\n-        Object.defineProperty(this, \"scopedSlots\", {\r\n-          enumerable: !0,\r\n-          get: function () {\r\n-            return fe(t.scopedSlots, this.slots());\r\n-          },\r\n-        }),\r\n-    r && ((this.$options = s), (this.$slots = this.slots()), (this.$scopedSlots = fe(t.scopedSlots, this.$slots))),\r\n-        s._scopeId\r\n-            ? (this._c = function (t, e, n, r) {\r\n-              r = Le(i, t, e, n, r, c);\r\n-              return r && !Array.isArray(r) && ((r.fnScopeId = s._scopeId), (r.fnContext = o)), r;\r\n-            })\r\n-            : (this._c = function (t, e, n, r) {\r\n-              return Le(i, t, e, n, r, c);\r\n-            });\r\n-  }\r\n-  function Se(t, e, n, r) {\r\n-    t = yt(t);\r\n-    return (t.fnContext = n), (t.fnOptions = r), e.slot && ((t.data || (t.data = {})).slot = e.slot), t;\r\n-  }\r\n-  function Te(t, e) {\r\n-    for (var n in e) t[m(n)] = e[n];\r\n-  }\r\n-  Oe(Ae.prototype);\r\n-  var je = {\r\n-        init: function (t, e) {\r\n-          var n, r, o;\r\n-          t.componentInstance && !t.componentInstance._isDestroyed && t.data.keepAlive\r\n-              ? je.prepatch(t, t)\r\n-              : (t.componentInstance =\r\n-                  ((r = { _isComponent: !0, _parentVnode: (n = t), parent: We }), I((o = n.data.inlineTemplate)) && ((r.render = o.render), (r.staticRenderFns = o.staticRenderFns)), new n.componentOptions.Ctor(r))).$mount(\r\n-              e ? t.elm : void 0,\r\n-              e\r\n-              );\r\n-        },\r\n-        prepatch: function (t, e) {\r\n-          var n = e.componentOptions;\r\n-          !(function (t, e, n, r, o) {\r\n-            var i = r.data.scopedSlots,\r\n-                a = t.$scopedSlots,\r\n-                a = !!((i && !i.$stable) || (a !== d && !a.$stable) || (i && t.$scopedSlots.$key !== i.$key)),\r\n-                i = !!(o || t.$options._renderChildren || a);\r\n-            if (((t.$options._parentVnode = r), (t.$vnode = r), t._vnode && (t._vnode.parent = r), (t.$options._renderChildren = o), (t.$attrs = r.data.attrs || d), (t.$listeners = n || d), e && t.$options.props)) {\r\n-              xt(!1);\r\n-              for (var s = t._props, c = t.$options._propKeys || [], l = 0; l \u003C c.length; l++) {\r\n-                var u = c[l],\r\n-                    f = t.$options.props;\r\n-                s[u] = Nt(u, f, e, t);\r\n-              }\r\n-              xt(!0), (t.$options.propsData = e);\r\n-            }\r\n-            n = n || d;\r\n-            a = t.$options._parentListeners;\r\n-            (t.$options._parentListeners = n), Ve(t, n, a), i && ((t.$slots = le(o, r.context)), t.$forceUpdate());\r\n-          })((e.componentInstance = t.componentInstance), n.propsData, n.listeners, e, n.children);\r\n-        },\r\n-        insert: function (t) {\r\n-          var e = t.context,\r\n-              n = t.componentInstance;\r\n-          n._isMounted || ((n._isMounted = !0), Ke(n, \"mounted\")), t.data.keepAlive && (e._isMounted ? ((n._inactive = !1), Ye.push(n)) : Ge(n, !0));\r\n-        },\r\n-        destroy: function (t) {\r\n-          var e = t.componentInstance;\r\n-          e._isDestroyed ||\r\n-          (t.data.keepAlive\r\n-              ? (function t(e, n) {\r\n-                if (!((n && ((e._directInactive = !0), Je(e))) || e._inactive)) {\r\n-                  e._inactive = !0;\r\n-                  for (var r = 0; r \u003C e.$children.length; r++) t(e.$children[r]);\r\n-                  Ke(e, \"deactivated\");\r\n-                }\r\n-              })(e, !0)\r\n-              : e.$destroy());\r\n-        },\r\n-      },\r\n-      Ee = Object.keys(je);\r\n-  function Me(a, s, t, e, n) {\r\n-    if (!P(a)) {\r\n-      var r,\r\n-          o = t.$options._base;\r\n-      if ((L(a) && (a = o.extend(a)), \"function\" == typeof a)) {\r\n-        if (\r\n-            P(a.cid) &&\r\n-            void 0 ===\r\n-            (a = (function (e, n) {\r\n-              if (O(e.error) && I(e.errorComp)) return e.errorComp;\r\n-              if (I(e.resolved)) return e.resolved;\r\n-              var t = De;\r\n-              if ((t && I(e.owners) && -1 === e.owners.indexOf(t) && e.owners.push(t), O(e.loading) && I(e.loadingComp))) return e.loadingComp;\r\n-              if (t && !I(e.owners)) {\r\n-                var r = (e.owners = [t]),\r\n-                    o = !0,\r\n-                    i = null,\r\n-                    a = null;\r\n-                t.$on(\"hook:destroyed\", function () {\r\n-                  return v(r, t);\r\n-                });\r\n-                var s = function (t) {\r\n-                      for (var e = 0, n = r.length; e \u003C n; e++) r[e].$forceUpdate();\r\n-                      t && ((r.length = 0), null !== i && (clearTimeout(i), (i = null)), null !== a && (clearTimeout(a), (a = null)));\r\n-                    },\r\n-                    c = D(function (t) {\r\n-                      (e.resolved = Fe(t, n)), o ? (r.length = 0) : s(!0);\r\n-                    }),\r\n-                    l = D(function (t) {\r\n-                      I(e.errorComp) && ((e.error = !0), s(!0));\r\n-                    }),\r\n-                    u = e(c, l);\r\n-                return (\r\n-                    L(u) &&\r\n-                    (h(u)\r\n-                        ? P(e.resolved) && u.then(c, l)\r\n-                        : h(u.component) &&\r\n-                        (u.component.then(c, l),\r\n-                        I(u.error) && (e.errorComp = Fe(u.error, n)),\r\n-                        I(u.loading) &&\r\n-                        ((e.loadingComp = Fe(u.loading, n)),\r\n-                            0 === u.delay\r\n-                                ? (e.loading = !0)\r\n-                                : (i = setTimeout(function () {\r\n-                                  (i = null), P(e.resolved) && P(e.error) && ((e.loading = !0), s(!1));\r\n-                                }, u.delay || 200))),\r\n-                        I(u.timeout) &&\r\n-                        (a = setTimeout(function () {\r\n-                          (a = null), P(e.resolved) && l(null);\r\n-                        }, u.timeout)))),\r\n-                        (o = !1),\r\n-                        e.loading ? e.loadingComp : e.resolved\r\n-                );\r\n-              }\r\n-            })((r = a), o))\r\n-        )\r\n-          return (c = r), (l = s), (u = t), (o = e), (f = n), ((p = vt()).asyncFactory = c), (p.asyncMeta = { data: l, context: u, children: o, tag: f }), p;\r\n-        (s = s || {}),\r\n-            gn(a),\r\n-        I(s.model) &&\r\n-        (function (t, e) {\r\n-          var n = (t.model && t.model.prop) || \"value\",\r\n-              r = (t.model && t.model.event) || \"input\";\r\n-          (e.attrs || (e.attrs = {}))[n] = e.model.value;\r\n-          (t = e.on || (e.on = {})), (n = t[r]), (e = e.model.callback);\r\n-          I(n) ? (Array.isArray(n) ? -1 === n.indexOf(e) : n !== e) && (t[r] = [e].concat(n)) : (t[r] = e);\r\n-        })(a.options, s);\r\n-        f = (function () {\r\n-          var t = a.options.props;\r\n-          if (!P(t)) {\r\n-            var e = {},\r\n-                n = s.attrs,\r\n-                r = s.props;\r\n-            if (I(n) || I(r))\r\n-              for (var o in t) {\r\n-                var i = g(o);\r\n-                ie(e, r, o, i, !0) || ie(e, n, o, i, !1);\r\n-              }\r\n-            return e;\r\n-          }\r\n-        })();\r\n-        if (O(a.options.functional))\r\n-          return (function (t, e, n, r, o) {\r\n-            var i = t.options,\r\n-                a = {},\r\n-                s = i.props;\r\n-            if (I(s)) for (var c in s) a[c] = Nt(c, s, e || d);\r\n-            else I(n.attrs) && Te(a, n.attrs), I(n.props) && Te(a, n.props);\r\n-            var l = new Ae(n, a, o, r, t),\r\n-                t = i.render.call(null, l._c, l);\r\n-            if (t instanceof dt) return Se(t, n, l.parent, i);\r\n-            if (Array.isArray(t)) {\r\n-              for (var u = ae(t) || [], f = new Array(u.length), p = 0; p \u003C u.length; p++) f[p] = Se(u[p], n, l.parent, i);\r\n-              return f;\r\n-            }\r\n-          })(a, f, s, t, e);\r\n-        p = s.on;\r\n-        (s.on = s.nativeOn),\r\n-        O(a.options.abstract) && ((i = s.slot), (s = {}), i && (s.slot = i)),\r\n-            (function () {\r\n-              for (var t = s.hook || (s.hook = {}), e = 0; e \u003C Ee.length; e++) {\r\n-                var n = Ee[e],\r\n-                    r = t[n],\r\n-                    o = je[n];\r\n-                r === o ||\r\n-                (r && r._merged) ||\r\n-                (t[n] = r\r\n-                    ? (function (n, r) {\r\n-                      function t(t, e) {\r\n-                        n(t, e), r(t, e);\r\n-                      }\r\n-                      return (t._merged = !0), t;\r\n-                    })(o, r)\r\n-                    : o);\r\n-              }\r\n-            })();\r\n-        var i = a.options.name || n;\r\n-        return new dt(\"vue-component-\" + a.cid + (i ? \"-\" + i : \"\"), s, void 0, void 0, void 0, t, { Ctor: a, propsData: f, listeners: p, tag: n, children: e }, r);\r\n-      }\r\n-    }\r\n-    var c, l, u, f, p;\r\n-  }\r\n-  var Pe = 1,\r\n-      Ie = 2;\r\n-  function Le(t, e, n, r, o, i) {\r\n-    return (\r\n-        (Array.isArray(n) || l(n)) && ((o = r), (r = n), (n = void 0)),\r\n-        O(i) && (o = Ie),\r\n-            (t = t),\r\n-            (e = e),\r\n-            (r = r),\r\n-            (o = o),\r\n-            I((n = n)) && I(n.__ob__)\r\n-                ? vt()\r\n-                : (I(n) && I(n.is) && (e = n.is),\r\n-                    e\r\n-                        ? (Array.isArray(r) && \"function\" == typeof r[0] && (((n = n || {}).scopedSlots = { default: r[0] }), (r.length = 0)),\r\n-                            o === Ie\r\n-                                ? (r = ae(r))\r\n-                                : o === Pe &&\r\n-                                (r = (function (t) {\r\n-                                  for (var e = 0; e \u003C t.length; e++) if (Array.isArray(t[e])) return Array.prototype.concat.apply([], t);\r\n-                                  return t;\r\n-                                })(r)),\r\n-                            (r =\r\n-                                \"string\" == typeof e\r\n-                                    ? ((a = (t.$vnode && t.$vnode.ns) || M.getTagNamespace(e)),\r\n-                                        M.isReservedTag(e) ? new dt(M.parsePlatformTagName(e), n, r, void 0, void 0, t) : (n && n.pre) || !I((s = Lt(t.$options, \"components\", e))) ? new dt(e, n, r, void 0, void 0, t) : Me(s, n, t, r, e))\r\n-                                    : Me(e, n, t, r)),\r\n-                            Array.isArray(r)\r\n-                                ? r\r\n-                                : I(r)\r\n-                                ? (I(a) &&\r\n-                                (function t(e, n, r) {\r\n-                                  if (((e.ns = n), \"foreignObject\" === e.tag && (r = !(n = void 0)), I(e.children)))\r\n-                                    for (var o = 0, i = e.children.length; o \u003C i; o++) {\r\n-                                      var a = e.children[o];\r\n-                                      I(a.tag) && (P(a.ns) || (O(r) && \"svg\" !== a.tag)) && t(a, n, r);\r\n-                                    }\r\n-                                })(r, a),\r\n-                                I(n) && (L((n = n).style) && te(n.style), L(n.class) && te(n.class)),\r\n-                                    r)\r\n-                                : vt())\r\n-                        : vt())\r\n-    );\r\n-    var a, s;\r\n-  }\r\n-  var Ne,\r\n-      De = null;\r\n-  function Fe(t, e) {\r\n-    return (t.__esModule || (it && \"Module\" === t[Symbol.toStringTag])) && (t = t.default), L(t) ? e.extend(t) : t;\r\n-  }\r\n-  function Re(t) {\r\n-    return t.isComment && t.asyncFactory;\r\n-  }\r\n-  function ze(t) {\r\n-    if (Array.isArray(t))\r\n-      for (var e = 0; e \u003C t.length; e++) {\r\n-        var n = t[e];\r\n-        if (I(n) && (I(n.componentOptions) || Re(n))) return n;\r\n-      }\r\n-  }\r\n-  function He(t, e) {\r\n-    Ne.$on(t, e);\r\n-  }\r\n-  function Ue(t, e) {\r\n-    Ne.$off(t, e);\r\n-  }\r\n-  function Be(e, n) {\r\n-    var r = Ne;\r\n-    return function t() {\r\n-      null !== n.apply(null, arguments) && r.$off(e, t);\r\n-    };\r\n-  }\r\n-  function Ve(t, e, n) {\r\n-    re(e, n || {}, He, Ue, Be, (Ne = t)), (Ne = void 0);\r\n-  }\r\n-  var We = null;\r\n-  function qe(t) {\r\n-    var e = We;\r\n-    return (\r\n-        (We = t),\r\n-            function () {\r\n-              We = e;\r\n-            }\r\n-    );\r\n-  }\r\n-  function Je(t) {\r\n-    for (; (t = t && t.$parent); ) if (t._inactive) return 1;\r\n-  }\r\n-  function Ge(t, e) {\r\n-    if (e) {\r\n-      if (((t._directInactive = !1), Je(t))) return;\r\n-    } else if (t._directInactive) return;\r\n-    if (t._inactive || null === t._inactive) {\r\n-      t._inactive = !1;\r\n-      for (var n = 0; n \u003C t.$children.length; n++) Ge(t.$children[n]);\r\n-      Ke(t, \"activated\");\r\n-    }\r\n-  }\r\n-  function Ke(t, e) {\r\n-    ft();\r\n-    var n = t.$options[e],\r\n-        r = e + \" hook\";\r\n-    if (n) for (var o = 0, i = n.length; o \u003C i; o++) Ht(n[o], t, null, t, r);\r\n-    t._hasHookEvent && t.$emit(\"hook:\" + e), pt();\r\n-  }\r\n-  var Xe,\r\n-      Qe = [],\r\n-      Ye = [],\r\n-      Ze = {},\r\n-      tn = !1,\r\n-      en = !1,\r\n-      nn = 0,\r\n-      rn = 0,\r\n-      on = Date.now;\r\n-  function an() {\r\n-    var t, e;\r\n-    for (\r\n-        rn = on(),\r\n-            en = !0,\r\n-            Qe.sort(function (t, e) {\r\n-              return t.id - e.id;\r\n-            }),\r\n-            nn = 0;\r\n-        nn \u003C Qe.length;\r\n-        nn++\r\n-    )\r\n-      (t = Qe[nn]).before && t.before(), (e = t.id), (Ze[e] = null), t.run();\r\n-    var n = Ye.slice(),\r\n-        r = Qe.slice();\r\n-    (nn = Qe.length = Ye.length = 0),\r\n-        (tn = en = !(Ze = {})),\r\n-        (function (t) {\r\n-          for (var e = 0; e \u003C t.length; e++) (t[e]._inactive = !0), Ge(t[e], !0);\r\n-        })(n),\r\n-        (function (t) {\r\n-          for (var e = t.length; e--; ) {\r\n-            var n = t[e],\r\n-                r = n.vm;\r\n-            r._watcher === n && r._isMounted && !r._isDestroyed && Ke(r, \"updated\");\r\n-          }\r\n-        })(r),\r\n-    nt && M.devtools && nt.emit(\"flush\");\r\n-  }\r\n-  function sn(t, e, n, r, o) {\r\n-    (this.vm = t),\r\n-    o && (t._watcher = this),\r\n-        t._watchers.push(this),\r\n-        r ? ((this.deep = !!r.deep), (this.user = !!r.user), (this.lazy = !!r.lazy), (this.sync = !!r.sync), (this.before = r.before)) : (this.deep = this.user = this.lazy = this.sync = !1),\r\n-        (this.cb = n),\r\n-        (this.id = ++cn),\r\n-        (this.active = !0),\r\n-        (this.dirty = this.lazy),\r\n-        (this.deps = []),\r\n-        (this.newDeps = []),\r\n-        (this.depIds = new ot()),\r\n-        (this.newDepIds = new ot()),\r\n-        (this.expression = \"\"),\r\n-        \"function\" == typeof e\r\n-            ? (this.getter = e)\r\n-            : ((this.getter = (function (t) {\r\n-              if (!H.test(t)) {\r\n-                var n = t.split(\".\");\r\n-                return function (t) {\r\n-                  for (var e = 0; e \u003C n.length; e++) {\r\n-                    if (!t) return;\r\n-                    t = t[n[e]];\r\n-                  }\r\n-                  return t;\r\n-                };\r\n-              }\r\n-            })(e)),\r\n-            this.getter || (this.getter = $)),\r\n-        (this.value = this.lazy ? void 0 : this.get());\r\n-  }\r\n-  !B ||\r\n-  J ||\r\n-  ((Xe = window.performance) &&\r\n-      \"function\" == typeof Xe.now &&\r\n-      on() > document.createEvent(\"Event\").timeStamp &&\r\n-      (on = function () {\r\n-        return Xe.now();\r\n-      }));\r\n-  var cn = 0;\r\n-  (sn.prototype.get = function () {\r\n-    var t;\r\n-    ft(this);\r\n-    var e = this.vm;\r\n-    try {\r\n-      t = this.getter.call(e, e);\r\n-    } catch (t) {\r\n-      if (!this.user) throw t;\r\n-      zt(t, e, 'getter for watcher \"' + this.expression + '\"');\r\n-    } finally {\r\n-      this.deep && te(t), pt(), this.cleanupDeps();\r\n-    }\r\n-    return t;\r\n-  }),\r\n-      (sn.prototype.addDep = function (t) {\r\n-        var e = t.id;\r\n-        this.newDepIds.has(e) || (this.newDepIds.add(e), this.newDeps.push(t), this.depIds.has(e) || t.addSub(this));\r\n-      }),\r\n-      (sn.prototype.cleanupDeps = function () {\r\n-        for (var t = this.deps.length; t--; ) {\r\n-          var e = this.deps[t];\r\n-          this.newDepIds.has(e.id) || e.removeSub(this);\r\n-        }\r\n-        var n = this.depIds;\r\n-        (this.depIds = this.newDepIds), (this.newDepIds = n), this.newDepIds.clear(), (n = this.deps), (this.deps = this.newDeps), (this.newDeps = n), (this.newDeps.length = 0);\r\n-      }),\r\n-      (sn.prototype.update = function () {\r\n-        this.lazy\r\n-            ? (this.dirty = !0)\r\n-            : this.sync\r\n-            ? this.run()\r\n-            : (function (t) {\r\n-              var e = t.id;\r\n-              if (null == Ze[e]) {\r\n-                if (((Ze[e] = !0), en)) {\r\n-                  for (var n = Qe.length - 1; nn \u003C n && Qe[n].id > t.id; ) n--;\r\n-                  Qe.splice(n + 1, 0, t);\r\n-                } else Qe.push(t);\r\n-                tn || ((tn = !0), Yt(an));\r\n-              }\r\n-            })(this);\r\n-      }),\r\n-      (sn.prototype.run = function () {\r\n-        if (this.active) {\r\n-          var t = this.get();\r\n-          if (t !== this.value || L(t) || this.deep) {\r\n-            var e = this.value;\r\n-            if (((this.value = t), this.user))\r\n-              try {\r\n-                this.cb.call(this.vm, t, e);\r\n-              } catch (t) {\r\n-                zt(t, this.vm, 'callback for watcher \"' + this.expression + '\"');\r\n-              }\r\n-            else this.cb.call(this.vm, t, e);\r\n-          }\r\n-        }\r\n-      }),\r\n-      (sn.prototype.evaluate = function () {\r\n-        (this.value = this.get()), (this.dirty = !1);\r\n-      }),\r\n-      (sn.prototype.depend = function () {\r\n-        for (var t = this.deps.length; t--; ) this.deps[t].depend();\r\n-      }),\r\n-      (sn.prototype.teardown = function () {\r\n-        if (this.active) {\r\n-          this.vm._isBeingDestroyed || v(this.vm._watchers, this);\r\n-          for (var t = this.deps.length; t--; ) this.deps[t].removeSub(this);\r\n-          this.active = !1;\r\n-        }\r\n-      });\r\n-  var ln = { enumerable: !0, configurable: !0, get: $, set: $ };\r\n-  function un(t, e, n) {\r\n-    (ln.get = function () {\r\n-      return this[e][n];\r\n-    }),\r\n-        (ln.set = function (t) {\r\n-          this[e][n] = t;\r\n-        }),\r\n-        Object.defineProperty(t, n, ln);\r\n-  }\r\n-  var fn = { lazy: !0 };\r\n-  function pn(t, e, n) {\r\n-    var r = !et();\r\n-    \"function\" == typeof n ? ((ln.get = r ? dn(e) : hn(n)), (ln.set = $)) : ((ln.get = n.get ? (r && !1 !== n.cache ? dn(e) : hn(n.get)) : $), (ln.set = n.set || $)), Object.defineProperty(t, e, ln);\r\n-  }\r\n-  function dn(e) {\r\n-    return function () {\r\n-      var t = this._computedWatchers && this._computedWatchers[e];\r\n-      if (t) return t.dirty && t.evaluate(), lt.target && t.depend(), t.value;\r\n-    };\r\n-  }\r\n-  function hn(t) {\r\n-    return function () {\r\n-      return t.call(this, this);\r\n-    };\r\n-  }\r\n-  function vn(t, e, n, r) {\r\n-    return c(n) && (n = (r = n).handler), \"string\" == typeof n && (n = t[n]), t.$watch(e, n, r);\r\n-  }\r\n-  var mn,\r\n-      yn = 0;\r\n-  function gn(o) {\r\n-    var t,\r\n-        e,\r\n-        n = o.options;\r\n-    return (\r\n-        !o.super ||\r\n-        ((t = gn(o.super)) !== o.superOptions &&\r\n-            ((o.superOptions = t),\r\n-            (e = (function () {\r\n-              var t,\r\n-                  e,\r\n-                  n = o.options,\r\n-                  r = o.sealedOptions;\r\n-              for (e in n) n[e] !== r[e] && ((t = t || {})[e] = n[e]);\r\n-              return t;\r\n-            })()) && w(o.extendOptions, e),\r\n-            (n = o.options = It(t, o.extendOptions)).name && (n.components[n.name] = o))),\r\n-            n\r\n-    );\r\n-  }\r\n-  function _n(t) {\r\n-    this._init(t);\r\n-  }\r\n-  function bn(t) {\r\n-    return t && (t.Ctor.options.name || t.tag);\r\n-  }\r\n-  function wn(t, e) {\r\n-    return Array.isArray(t) ? -1 \u003C t.indexOf(e) : \"string\" == typeof t ? -1 \u003C t.split(\",\").indexOf(e) : \"[object RegExp]\" === n.call(t) && t.test(e);\r\n-  }\r\n-  function xn(t, e) {\r\n-    var n,\r\n-        r = t.cache,\r\n-        o = t.keys,\r\n-        i = t._vnode;\r\n-    for (n in r) {\r\n-      var a = r[n];\r\n-      !a || ((a = bn(a.componentOptions)) && !e(a) && $n(r, n, o, i));\r\n-    }\r\n-  }\r\n-  function $n(t, e, n, r) {\r\n-    var o = t[e];\r\n-    !o || (r && o.tag === r.tag) || o.componentInstance.$destroy(), (t[e] = null), v(n, e);\r\n-  }\r\n-  (_n.prototype._init = function (t) {\r\n-    var e,\r\n-        n,\r\n-        r = this;\r\n-    (r._uid = yn++),\r\n-        (r._isVue = !0),\r\n-        t && t._isComponent\r\n-            ? (function (t) {\r\n-              var e = (r.$options = Object.create(r.constructor.options)),\r\n-                  n = t._parentVnode;\r\n-              e.parent = t.parent;\r\n-              n = (e._parentVnode = n).componentOptions;\r\n-              (e.propsData = n.propsData), (e._parentListeners = n.listeners), (e._renderChildren = n.children), (e._componentTag = n.tag), t.render && ((e.render = t.render), (e.staticRenderFns = t.staticRenderFns));\r\n-            })(t)\r\n-            : (r.$options = It(gn(r.constructor), t || {}, r)),\r\n-        (function (t) {\r\n-          var e = t.$options,\r\n-              n = e.parent;\r\n-          if (n && !e.abstract) {\r\n-            for (; n.$options.abstract && n.$parent; ) n = n.$parent;\r\n-            n.$children.push(t);\r\n-          }\r\n-          (t.$parent = n), (t.$root = n ? n.$root : t), (t.$children = []), (t.$refs = {}), (t._watcher = null), (t._inactive = null), (t._directInactive = !1), (t._isMounted = !1), (t._isDestroyed = !1), (t._isBeingDestroyed = !1);\r\n-        })(((r._renderProxy = r)._self = r)),\r\n-        (function (t) {\r\n-          (t._events = Object.create(null)), (t._hasHookEvent = !1);\r\n-          var e = t.$options._parentListeners;\r\n-          e && Ve(t, e);\r\n-        })(r),\r\n-        (function (o) {\r\n-          (o._vnode = null), (o._staticTrees = null);\r\n-          var t = o.$options,\r\n-              e = (o.$vnode = t._parentVnode),\r\n-              n = e && e.context;\r\n-          (o.$slots = le(t._renderChildren, n)),\r\n-              (o.$scopedSlots = d),\r\n-              (o._c = function (t, e, n, r) {\r\n-                return Le(o, t, e, n, r, !1);\r\n-              }),\r\n-              (o.$createElement = function (t, e, n, r) {\r\n-                return Le(o, t, e, n, r, !0);\r\n-              });\r\n-          e = e && e.data;\r\n-          Ct(o, \"$attrs\", (e && e.attrs) || d, null, !0), Ct(o, \"$listeners\", t._parentListeners || d, null, !0);\r\n-        })(r),\r\n-        Ke(r, \"beforeCreate\"),\r\n-    (n = ce((e = r).$options.inject, e)) &&\r\n-    (xt(!1),\r\n-        Object.keys(n).forEach(function (t) {\r\n-          Ct(e, t, n[t]);\r\n-        }),\r\n-        xt(!0)),\r\n-        (function (t) {\r\n-          t._watchers = [];\r\n-          var e = t.$options;\r\n-          e.props &&\r\n-          (function (n, r) {\r\n-            var t,\r\n-                o = n.$options.propsData || {},\r\n-                i = (n._props = {}),\r\n-                a = (n.$options._propKeys = []);\r\n-            for (t in (n.$parent && xt(!1), r))\r\n-              !(function (t) {\r\n-                a.push(t);\r\n-                var e = Nt(t, r, o, n);\r\n-                Ct(i, t, e), t in n || un(n, \"_props\", t);\r\n-              })(t);\r\n-            xt(!0);\r\n-          })(t, e.props),\r\n-          e.methods &&\r\n-          (function (t, e) {\r\n-            for (var n in (t.$options.props, e)) t[n] = \"function\" != typeof e[n] ? $ : _(e[n], t);\r\n-          })(t, e.methods),\r\n-              e.data\r\n-                  ? (function (t) {\r\n-                    var e = t.$options.data;\r\n-                    c(\r\n-                        (e = t._data =\r\n-                            \"function\" == typeof e\r\n-                                ? (function (t, e) {\r\n-                                  ft();\r\n-                                  try {\r\n-                                    return t.call(e, e);\r\n-                                  } catch (t) {\r\n-                                    return zt(t, e, \"data()\"), {};\r\n-                                  } finally {\r\n-                                    pt();\r\n-                                  }\r\n-                                })(e, t)\r\n-                                : e || {})\r\n-                    ) || (e = {});\r\n-                    for (var n, r = Object.keys(e), o = t.$options.props, i = (t.$options.methods, r.length); i--; ) {\r\n-                      var a = r[i];\r\n-                      (o && p(o, a)) || (36 !== (n = (a + \"\").charCodeAt(0)) && 95 !== n && un(t, \"_data\", a));\r\n-                    }\r\n-                    kt(e, !0);\r\n-                  })(t)\r\n-                  : kt((t._data = {}), !0),\r\n-          e.computed &&\r\n-          (function (t, e) {\r\n-            var n,\r\n-                r = (t._computedWatchers = Object.create(null)),\r\n-                o = et();\r\n-            for (n in e) {\r\n-              var i = e[n],\r\n-                  a = \"function\" == typeof i ? i : i.get;\r\n-              o || (r[n] = new sn(t, a || $, $, fn)), n in t || pn(t, n, i);\r\n-            }\r\n-          })(t, e.computed),\r\n-          e.watch &&\r\n-          e.watch !== Y &&\r\n-          (function (t, e) {\r\n-            for (var n in e) {\r\n-              var r = e[n];\r\n-              if (Array.isArray(r)) for (var o = 0; o \u003C r.length; o++) vn(t, n, r[o]);\r\n-              else vn(t, n, r);\r\n-            }\r\n-          })(t, e.watch);\r\n-        })(r),\r\n-    (t = r.$options.provide) && (r._provided = \"function\" == typeof t ? t.call(r) : t),\r\n-        Ke(r, \"created\"),\r\n-    r.$options.el && r.$mount(r.$options.el);\r\n-  }),\r\n-      (W = _n),\r\n-      Object.defineProperty(W.prototype, \"$data\", {\r\n-        get: function () {\r\n-          return this._data;\r\n-        },\r\n-      }),\r\n-      Object.defineProperty(W.prototype, \"$props\", {\r\n-        get: function () {\r\n-          return this._props;\r\n-        },\r\n-      }),\r\n-      (W.prototype.$set = Ot),\r\n-      (W.prototype.$delete = At),\r\n-      (W.prototype.$watch = function (t, e, n) {\r\n-        if (c(e)) return vn(this, t, e, n);\r\n-        (n = n || {}).user = !0;\r\n-        var r = new sn(this, t, e, n);\r\n-        if (n.immediate)\r\n-          try {\r\n-            e.call(this, r.value);\r\n-          } catch (t) {\r\n-            zt(t, this, 'callback for immediate watcher \"' + r.expression + '\"');\r\n-          }\r\n-        return function () {\r\n-          r.teardown();\r\n-        };\r\n-      }),\r\n-      (mn = \u002F^hook:\u002F),\r\n-      ((q = _n).prototype.$on = function (t, e) {\r\n-        var n = this;\r\n-        if (Array.isArray(t)) for (var r = 0, o = t.length; r \u003C o; r++) n.$on(t[r], e);\r\n-        else (n._events[t] || (n._events[t] = [])).push(e), mn.test(t) && (n._hasHookEvent = !0);\r\n-        return n;\r\n-      }),\r\n-      (q.prototype.$once = function (t, e) {\r\n-        var n = this;\r\n-        function r() {\r\n-          n.$off(t, r), e.apply(n, arguments);\r\n-        }\r\n-        return (r.fn = e), n.$on(t, r), n;\r\n-      }),\r\n-      (q.prototype.$off = function (t, e) {\r\n-        var n = this;\r\n-        if (!arguments.length) return (n._events = Object.create(null)), n;\r\n-        if (Array.isArray(t)) {\r\n-          for (var r = 0, o = t.length; r \u003C o; r++) n.$off(t[r], e);\r\n-          return n;\r\n-        }\r\n-        var i,\r\n-            a = n._events[t];\r\n-        if (!a) return n;\r\n-        if (!e) return (n._events[t] = null), n;\r\n-        for (var s = a.length; s--; )\r\n-          if ((i = a[s]) === e || i.fn === e) {\r\n-            a.splice(s, 1);\r\n-            break;\r\n-          }\r\n-        return n;\r\n-      }),\r\n-      (q.prototype.$emit = function (t) {\r\n-        var e = this._events[t];\r\n-        if (e) {\r\n-          e = 1 \u003C e.length ? b(e) : e;\r\n-          for (var n = b(arguments, 1), r = 'event handler for \"' + t + '\"', o = 0, i = e.length; o \u003C i; o++) Ht(e[o], this, n, this, r);\r\n-        }\r\n-        return this;\r\n-      }),\r\n-      ((ht = _n).prototype._update = function (t, e) {\r\n-        var n = this,\r\n-            r = n.$el,\r\n-            o = n._vnode,\r\n-            i = qe(n);\r\n-        (n._vnode = t), (n.$el = o ? n.__patch__(o, t) : n.__patch__(n.$el, t, e, !1)), i(), r && (r.__vue__ = null), n.$el && (n.$el.__vue__ = n), n.$vnode && n.$parent && n.$vnode === n.$parent._vnode && (n.$parent.$el = n.$el);\r\n-      }),\r\n-      (ht.prototype.$forceUpdate = function () {\r\n-        this._watcher && this._watcher.update();\r\n-      }),\r\n-      (ht.prototype.$destroy = function () {\r\n-        var t = this;\r\n-        if (!t._isBeingDestroyed) {\r\n-          Ke(t, \"beforeDestroy\"), (t._isBeingDestroyed = !0);\r\n-          var e = t.$parent;\r\n-          !e || e._isBeingDestroyed || t.$options.abstract || v(e.$children, t), t._watcher && t._watcher.teardown();\r\n-          for (var n = t._watchers.length; n--; ) t._watchers[n].teardown();\r\n-          t._data.__ob__ && t._data.__ob__.vmCount--, (t._isDestroyed = !0), t.__patch__(t._vnode, null), Ke(t, \"destroyed\"), t.$off(), t.$el && (t.$el.__vue__ = null), t.$vnode && (t.$vnode.parent = null);\r\n-        }\r\n-      }),\r\n-      Oe((E = _n).prototype),\r\n-      (E.prototype.$nextTick = function (t) {\r\n-        return Yt(t, this);\r\n-      }),\r\n-      (E.prototype._render = function () {\r\n-        var t,\r\n-            e = this,\r\n-            n = e.$options,\r\n-            r = n.render,\r\n-            o = n._parentVnode;\r\n-        o && (e.$scopedSlots = fe(o.data.scopedSlots, e.$slots, e.$scopedSlots)), (e.$vnode = o);\r\n-        try {\r\n-          (De = e), (t = r.call(e._renderProxy, e.$createElement));\r\n-        } catch (n) {\r\n-          zt(n, e, \"render\"), (t = e._vnode);\r\n-        } finally {\r\n-          De = null;\r\n-        }\r\n-        return Array.isArray(t) && 1 === t.length && (t = t[0]), t instanceof dt || (t = vt()), (t.parent = o), t;\r\n-      });\r\n-  var kn,\r\n-      Cn,\r\n-      On = [String, RegExp, Array],\r\n-      W = {\r\n-        KeepAlive: {\r\n-          name: \"keep-alive\",\r\n-          abstract: !0,\r\n-          props: { include: On, exclude: On, max: [String, Number] },\r\n-          created: function () {\r\n-            (this.cache = Object.create(null)), (this.keys = []);\r\n-          },\r\n-          destroyed: function () {\r\n-            for (var t in this.cache) $n(this.cache, t, this.keys);\r\n-          },\r\n-          mounted: function () {\r\n-            var t = this;\r\n-            this.$watch(\"include\", function (e) {\r\n-              xn(t, function (t) {\r\n-                return wn(e, t);\r\n-              });\r\n-            }),\r\n-                this.$watch(\"exclude\", function (e) {\r\n-                  xn(t, function (t) {\r\n-                    return !wn(e, t);\r\n-                  });\r\n-                });\r\n-          },\r\n-          render: function () {\r\n-            var t = this.$slots.default,\r\n-                e = ze(t),\r\n-                n = e && e.componentOptions;\r\n-            if (n) {\r\n-              var r = bn(n),\r\n-                  o = this.include,\r\n-                  i = this.exclude;\r\n-              if ((o && (!r || !wn(o, r))) || (i && r && wn(i, r))) return e;\r\n-              (i = this.cache), (r = this.keys), (n = null == e.key ? n.Ctor.cid + (n.tag ? \"::\" + n.tag : \"\") : e.key);\r\n-              i[n] ? ((e.componentInstance = i[n].componentInstance), v(r, n), r.push(n)) : ((i[n] = e), r.push(n), this.max && r.length > parseInt(this.max) && $n(i, r[0], r, this._vnode)), (e.data.keepAlive = !0);\r\n-            }\r\n-            return e || (t && t[0]);\r\n-          },\r\n-        },\r\n-      };\r\n-  function An(t, e, n) {\r\n-    return (\"value\" === n && Sn(t) && \"button\" !== e) || (\"selected\" === n && \"option\" === t) || (\"checked\" === n && \"input\" === t) || (\"muted\" === n && \"video\" === t);\r\n-  }\r\n-  (kn = _n),\r\n-      (q = {\r\n-        get: function () {\r\n-          return M;\r\n-        },\r\n-      }),\r\n-      Object.defineProperty(kn, \"config\", q),\r\n-      (kn.util = { warn: st, extend: w, mergeOptions: It, defineReactive: Ct }),\r\n-      (kn.set = Ot),\r\n-      (kn.delete = At),\r\n-      (kn.nextTick = Yt),\r\n-      (kn.observable = function (t) {\r\n-        return kt(t), t;\r\n-      }),\r\n-      (kn.options = Object.create(null)),\r\n-      j.forEach(function (t) {\r\n-        kn.options[t + \"s\"] = Object.create(null);\r\n-      }),\r\n-      w((kn.options._base = kn).options.components, W),\r\n-      (kn.use = function (t) {\r\n-        var e = this._installedPlugins || (this._installedPlugins = []);\r\n-        if (-1 \u003C e.indexOf(t)) return this;\r\n-        var n = b(arguments, 1);\r\n-        return n.unshift(this), \"function\" == typeof t.install ? t.install.apply(t, n) : \"function\" == typeof t && t.apply(null, n), e.push(t), this;\r\n-      }),\r\n-      (kn.mixin = function (t) {\r\n-        return (this.options = It(this.options, t)), this;\r\n-      }),\r\n-      (function (t) {\r\n-        t.cid = 0;\r\n-        var a = 1;\r\n-        t.extend = function (t) {\r\n-          t = t || {};\r\n-          var e = this,\r\n-              n = e.cid,\r\n-              r = t._Ctor || (t._Ctor = {});\r\n-          if (r[n]) return r[n];\r\n-          function o(t) {\r\n-            this._init(t);\r\n-          }\r\n-          var i = t.name || e.options.name;\r\n-          return (\r\n-              (((o.prototype = Object.create(e.prototype)).constructor = o).cid = a++),\r\n-                  (o.options = It(e.options, t)),\r\n-                  (o.super = e),\r\n-              o.options.props &&\r\n-              (function (t) {\r\n-                for (var e in t.options.props) un(t.prototype, \"_props\", e);\r\n-              })(o),\r\n-              o.options.computed &&\r\n-              (function (t) {\r\n-                var e,\r\n-                    n = t.options.computed;\r\n-                for (e in n) pn(t.prototype, e, n[e]);\r\n-              })(o),\r\n-                  (o.extend = e.extend),\r\n-                  (o.mixin = e.mixin),\r\n-                  (o.use = e.use),\r\n-                  j.forEach(function (t) {\r\n-                    o[t] = e[t];\r\n-                  }),\r\n-              i && (o.options.components[i] = o),\r\n-                  (o.superOptions = e.options),\r\n-                  (o.extendOptions = t),\r\n-                  (o.sealedOptions = w({}, o.options)),\r\n-                  (r[n] = o)\r\n-          );\r\n-        };\r\n-      })(kn),\r\n-      (Cn = kn),\r\n-      j.forEach(function (n) {\r\n-        Cn[n] = function (t, e) {\r\n-          return e\r\n-              ? (\"component\" === n && c(e) && ((e.name = e.name || t), (e = this.options._base.extend(e))), \"directive\" === n && \"function\" == typeof e && (e = { bind: e, update: e }), (this.options[n + \"s\"][t] = e))\r\n-              : this.options[n + \"s\"][t];\r\n-        };\r\n-      }),\r\n-      Object.defineProperty(_n.prototype, \"$isServer\", { get: et }),\r\n-      Object.defineProperty(_n.prototype, \"$ssrContext\", {\r\n-        get: function () {\r\n-          return this.$vnode && this.$vnode.ssrContext;\r\n-        },\r\n-      }),\r\n-      Object.defineProperty(_n, \"FunctionalRenderContext\", { value: Ae }),\r\n-      (_n.version = \"2.6.10\");\r\n-  var ht = a(\"style,class\"),\r\n-      Sn = a(\"input,textarea,option,select,progress\"),\r\n-      Tn = a(\"contenteditable,draggable,spellcheck\"),\r\n-      jn = a(\"events,caret,typing,plaintext-only\"),\r\n-      En = function (t, e) {\r\n-        return Nn(e) || \"false\" === e ? \"false\" : \"contenteditable\" === t && jn(e) ? e : \"true\";\r\n-      },\r\n-      Mn = a(\r\n-          \"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"\r\n-      ),\r\n-      Pn = \"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\",\r\n-      In = function (t) {\r\n-        return \":\" === t.charAt(5) && \"xlink\" === t.slice(0, 5);\r\n-      },\r\n-      Ln = function (t) {\r\n-        return In(t) ? t.slice(6, t.length) : \"\";\r\n-      },\r\n-      Nn = function (t) {\r\n-        return null == t || !1 === t;\r\n-      };\r\n-  function Dn(t, e) {\r\n-    return { staticClass: Fn(t.staticClass, e.staticClass), class: I(t.class) ? [t.class, e.class] : e.class };\r\n-  }\r\n-  function Fn(t, e) {\r\n-    return t ? (e ? t + \" \" + e : t) : e || \"\";\r\n-  }\r\n-  function Rn(t) {\r\n-    return Array.isArray(t)\r\n-        ? (function (t) {\r\n-          for (var e, n = \"\", r = 0, o = t.length; r \u003C o; r++) I((e = Rn(t[r]))) && \"\" !== e && (n && (n += \" \"), (n += e));\r\n-          return n;\r\n-        })(t)\r\n-        : L(t)\r\n-            ? (function (t) {\r\n-              var e,\r\n-                  n = \"\";\r\n-              for (e in t) t[e] && (n && (n += \" \"), (n += e));\r\n-              return n;\r\n-            })(t)\r\n-            : \"string\" == typeof t\r\n-                ? t\r\n-                : \"\";\r\n-  }\r\n-  function zn(t) {\r\n-    return Un(t) || Bn(t);\r\n-  }\r\n-  var Hn = { svg: \"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\", math: \"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML\" },\r\n-      Un = a(\r\n-          \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"\r\n-      ),\r\n-      Bn = a(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\", !0);\r\n-  function Vn(t) {\r\n-    return Bn(t) ? \"svg\" : \"math\" === t ? \"math\" : void 0;\r\n-  }\r\n-  var Wn = Object.create(null),\r\n-      qn = a(\"text,number,password,search,email,tel,url\");\r\n-  function Jn(t) {\r\n-    return \"string\" != typeof t ? t : document.querySelector(t) || document.createElement(\"div\");\r\n-  }\r\n-  (E = Object.freeze({\r\n-    createElement: function (t, e) {\r\n-      var n = document.createElement(t);\r\n-      return \"select\" !== t || (e.data && e.data.attrs && void 0 !== e.data.attrs.multiple && n.setAttribute(\"multiple\", \"multiple\")), n;\r\n-    },\r\n-    createElementNS: function (t, e) {\r\n-      return document.createElementNS(Hn[t], e);\r\n-    },\r\n-    createTextNode: function (t) {\r\n-      return document.createTextNode(t);\r\n-    },\r\n-    createComment: function (t) {\r\n-      return document.createComment(t);\r\n-    },\r\n-    insertBefore: function (t, e, n) {\r\n-      t.insertBefore(e, n);\r\n-    },\r\n-    removeChild: function (t, e) {\r\n-      t.removeChild(e);\r\n-    },\r\n-    appendChild: function (t, e) {\r\n-      t.appendChild(e);\r\n-    },\r\n-    parentNode: function (t) {\r\n-      return t.parentNode;\r\n-    },\r\n-    nextSibling: function (t) {\r\n-      return t.nextSibling;\r\n-    },\r\n-    tagName: function (t) {\r\n-      return t.tagName;\r\n-    },\r\n-    setTextContent: function (t, e) {\r\n-      t.textContent = e;\r\n-    },\r\n-    setStyleScope: function (t, e) {\r\n-      t.setAttribute(e, \"\");\r\n-    },\r\n-  })),\r\n-      (On = {\r\n-        create: function (t, e) {\r\n-          Gn(e);\r\n-        },\r\n-        update: function (t, e) {\r\n-          t.data.ref !== e.data.ref && (Gn(t, !0), Gn(e));\r\n-        },\r\n-        destroy: function (t) {\r\n-          Gn(t, !0);\r\n-        },\r\n-      });\r\n-  function Gn(t, e) {\r\n-    var n,\r\n-        r,\r\n-        o = t.data.ref;\r\n-    I(o) &&\r\n-    ((r = t.context),\r\n-        (n = t.componentInstance || t.elm),\r\n-        (r = r.$refs),\r\n-        e ? (Array.isArray(r[o]) ? v(r[o], n) : r[o] === n && (r[o] = void 0)) : t.data.refInFor ? (Array.isArray(r[o]) ? r[o].indexOf(n) \u003C 0 && r[o].push(n) : (r[o] = [n])) : (r[o] = n));\r\n-  }\r\n-  var Kn = new dt(\"\", {}, []),\r\n-      Xn = [\"create\", \"activate\", \"update\", \"remove\", \"destroy\"];\r\n-  function Qn(n, r) {\r\n-    return (\r\n-        n.key === r.key &&\r\n-        ((n.tag === r.tag &&\r\n-            n.isComment === r.isComment &&\r\n-            I(n.data) === I(r.data) &&\r\n-            (function () {\r\n-              if (\"input\" !== n.tag) return 1;\r\n-              var t = I((e = n.data)) && I((e = e.attrs)) && e.type,\r\n-                  e = I((e = r.data)) && I((e = e.attrs)) && e.type;\r\n-              return t === e || (qn(t) && qn(e));\r\n-            })()) ||\r\n-            (O(n.isAsyncPlaceholder) && n.asyncFactory === r.asyncFactory && P(r.asyncFactory.error)))\r\n-    );\r\n-  }\r\n-  q = {\r\n-    create: Yn,\r\n-    update: Yn,\r\n-    destroy: function (t) {\r\n-      Yn(t, Kn);\r\n-    },\r\n-  };\r\n-  function Yn(t, e) {\r\n-    (t.data.directives || e.data.directives) &&\r\n-    (function (e, n) {\r\n-      var t,\r\n-          r,\r\n-          o,\r\n-          i,\r\n-          a = e === Kn,\r\n-          s = n === Kn,\r\n-          c = tr(e.data.directives, e.context),\r\n-          l = tr(n.data.directives, n.context),\r\n-          u = [],\r\n-          f = [];\r\n-      for (t in l) (r = c[t]), (o = l[t]), r ? ((o.oldValue = r.value), (o.oldArg = r.arg), er(o, \"update\", n, e), o.def && o.def.componentUpdated && f.push(o)) : (er(o, \"bind\", n, e), o.def && o.def.inserted && u.push(o));\r\n-      if (\r\n-          (u.length &&\r\n-          ((i = function () {\r\n-            for (var t = 0; t \u003C u.length; t++) er(u[t], \"inserted\", n, e);\r\n-          }),\r\n-              a ? oe(n, \"insert\", i) : i()),\r\n-          f.length &&\r\n-          oe(n, \"postpatch\", function () {\r\n-            for (var t = 0; t \u003C f.length; t++) er(f[t], \"componentUpdated\", n, e);\r\n-          }),\r\n-              !a)\r\n-      )\r\n-        for (t in c) l[t] || er(c[t], \"unbind\", e, e, s);\r\n-    })(t, e);\r\n-  }\r\n-  var Zn = Object.create(null);\r\n-  function tr(t, e) {\r\n-    var n,\r\n-        r,\r\n-        o = Object.create(null);\r\n-    if (!t) return o;\r\n-    for (n = 0; n \u003C t.length; n++) (r = t[n]).modifiers || (r.modifiers = Zn), ((o[r.rawName || r.name + \".\" + Object.keys(r.modifiers || {}).join(\".\")] = r).def = Lt(e.$options, \"directives\", r.name));\r\n-    return o;\r\n-  }\r\n-  function er(t, e, n, r, o) {\r\n-    var i = t.def && t.def[e];\r\n-    if (i)\r\n-      try {\r\n-        i(n.elm, t, n, r, o);\r\n-      } catch (r) {\r\n-        zt(r, n.context, \"directive \" + t.name + \" \" + e + \" hook\");\r\n-      }\r\n-  }\r\n-  st = [On, q];\r\n-  function nr(t, e) {\r\n-    var n = e.componentOptions;\r\n-    if (!((I(n) && !1 === n.Ctor.options.inheritAttrs) || (P(t.data.attrs) && P(e.data.attrs)))) {\r\n-      var r,\r\n-          o,\r\n-          i = e.elm,\r\n-          a = t.data.attrs || {},\r\n-          s = e.data.attrs || {};\r\n-      for (r in (I(s.__ob__) && (s = e.data.attrs = w({}, s)), s)) (o = s[r]), a[r] !== o && rr(i, r, o);\r\n-      for (r in ((J || K) && s.value !== a.value && rr(i, \"value\", s.value), a)) P(s[r]) && (In(r) ? i.removeAttributeNS(Pn, Ln(r)) : Tn(r) || i.removeAttribute(r));\r\n-    }\r\n-  }\r\n-  function rr(t, e, n) {\r\n-    -1 \u003C t.tagName.indexOf(\"-\")\r\n-        ? or(t, e, n)\r\n-        : Mn(e)\r\n-        ? Nn(n)\r\n-            ? t.removeAttribute(e)\r\n-            : ((n = \"allowfullscreen\" === e && \"EMBED\" === t.tagName ? \"true\" : e), t.setAttribute(e, n))\r\n-        : Tn(e)\r\n-            ? t.setAttribute(e, En(e, n))\r\n-            : In(e)\r\n-                ? Nn(n)\r\n-                    ? t.removeAttributeNS(Pn, Ln(e))\r\n-                    : t.setAttributeNS(Pn, e, n)\r\n-                : or(t, e, n);\r\n-  }\r\n-  function or(e, t, n) {\r\n-    var r;\r\n-    Nn(n)\r\n-        ? e.removeAttribute(t)\r\n-        : (!J ||\r\n-        G ||\r\n-        \"TEXTAREA\" !== e.tagName ||\r\n-        \"placeholder\" !== t ||\r\n-        \"\" === n ||\r\n-        e.__ieph ||\r\n-        ((r = function (t) {\r\n-          t.stopImmediatePropagation(), e.removeEventListener(\"input\", r);\r\n-        }),\r\n-            e.addEventListener(\"input\", r),\r\n-            (e.__ieph = !0)),\r\n-            e.setAttribute(t, n));\r\n-  }\r\n-  W = { create: nr, update: nr };\r\n-  function ir(t, i) {\r\n-    var e = i.elm,\r\n-        n = i.data,\r\n-        t = t.data;\r\n-    (P(n.staticClass) && P(n.class) && (P(t) || (P(t.staticClass) && P(t.class)))) ||\r\n-    ((n = (function () {\r\n-      for (var t, e, n = i.data, r = i, o = i; I(o.componentInstance); ) (o = o.componentInstance._vnode) && o.data && (n = Dn(o.data, n));\r\n-      for (; I((r = r.parent)); ) r && r.data && (n = Dn(n, r.data));\r\n-      return (t = n.staticClass), (e = n.class), I(t) || I(e) ? Fn(t, Rn(e)) : \"\";\r\n-    })()),\r\n-    I((t = e._transitionClasses)) && (n = Fn(n, Rn(t))),\r\n-    n !== e._prevClass && (e.setAttribute(\"class\", n), (e._prevClass = n)));\r\n-  }\r\n-  var ar,\r\n-      sr,\r\n-      cr,\r\n-      lr,\r\n-      ur,\r\n-      fr,\r\n-      On = { create: ir, update: ir },\r\n-      pr = \u002F[\\w).+\\-_$\\]]\u002F;\r\n-  function dr(t) {\r\n-    for (var e, n, r, o, i = !1, a = !1, s = !1, c = !1, l = 0, u = 0, f = 0, p = 0, d = 0; d \u003C t.length; d++)\r\n-      if (((n = e), (e = t.charCodeAt(d)), i)) 39 === e && 92 !== n && (i = !1);\r\n-      else if (a) 34 === e && 92 !== n && (a = !1);\r\n-      else if (s) 96 === e && 92 !== n && (s = !1);\r\n-      else if (c) 47 === e && 92 !== n && (c = !1);\r\n-      else if (124 !== e || 124 === t.charCodeAt(d + 1) || 124 === t.charCodeAt(d - 1) || l || u || f) {\r\n-        switch (e) {\r\n-        case 34:\r\n-          a = !0;\r\n-          break;\r\n-        case 39:\r\n-          i = !0;\r\n-          break;\r\n-        case 96:\r\n-          s = !0;\r\n-          break;\r\n-        case 40:\r\n-          f++;\r\n-          break;\r\n-        case 41:\r\n-          f--;\r\n-          break;\r\n-        case 91:\r\n-          u++;\r\n-          break;\r\n-        case 93:\r\n-          u--;\r\n-          break;\r\n-        case 123:\r\n-          l++;\r\n-          break;\r\n-        case 125:\r\n-          l--;\r\n-        }\r\n-        if (47 === e) {\r\n-          for (var h = d - 1, v = void 0; 0 \u003C= h && \" \" === (v = t.charAt(h)); h--);\r\n-          (v && pr.test(v)) || (c = !0);\r\n-        }\r\n-      } else void 0 === r ? ((p = d + 1), (r = t.slice(0, d).trim())) : m();\r\n-    function m() {\r\n-      (o = o || []).push(t.slice(p, d).trim()), (p = d + 1);\r\n-    }\r\n-    if ((void 0 === r ? (r = t.slice(0, d).trim()) : 0 !== p && m(), o))\r\n-      for (d = 0; d \u003C o.length; d++)\r\n-        r = (function (t, e) {\r\n-          var n = e.indexOf(\"(\");\r\n-          if (n \u003C 0) return '_f(\"' + e + '\")(' + t + \")\";\r\n-          var r = e.slice(0, n),\r\n-              n = e.slice(n + 1);\r\n-          return '_f(\"' + r + '\")(' + t + (\")\" !== n ? \",\" + n : n);\r\n-        })(r, o[d]);\r\n-    return r;\r\n-  }\r\n-  function hr(t, e) {\r\n-    console.error(\"[Vue compiler]: \" + t);\r\n-  }\r\n-  function vr(t, e) {\r\n-    return t\r\n-        ? t\r\n-        .map(function (t) {\r\n-          return t[e];\r\n-        })\r\n-        .filter(function (t) {\r\n-          return t;\r\n-        })\r\n-        : [];\r\n-  }\r\n-  function mr(t, e, n, r, o) {\r\n-    (t.props || (t.props = [])).push(kr({ name: e, value: n, dynamic: o }, r)), (t.plain = !1);\r\n-  }\r\n-  function yr(t, e, n, r, o) {\r\n-    (o ? t.dynamicAttrs || (t.dynamicAttrs = []) : t.attrs || (t.attrs = [])).push(kr({ name: e, value: n, dynamic: o }, r)), (t.plain = !1);\r\n-  }\r\n-  function gr(t, e, n, r) {\r\n-    (t.attrsMap[e] = n), t.attrsList.push(kr({ name: e, value: n }, r));\r\n-  }\r\n-  function _r(t, e, n) {\r\n-    return n ? \"_p(\" + e + ',\"' + t + '\")' : t + e;\r\n-  }\r\n-  function br(t, e, n, r, o, i, a, s) {\r\n-    var c;\r\n-    (r = r || d).right\r\n-        ? s\r\n-        ? (e = \"(\" + e + \")==='click'?'contextmenu':(\" + e + \")\")\r\n-        : \"click\" === e && ((e = \"contextmenu\"), delete r.right)\r\n-        : r.middle && (s ? (e = \"(\" + e + \")==='click'?'mouseup':(\" + e + \")\") : \"click\" === e && (e = \"mouseup\")),\r\n-    r.capture && (delete r.capture, (e = _r(\"!\", e, s))),\r\n-    r.once && (delete r.once, (e = _r(\"~\", e, s))),\r\n-    r.passive && (delete r.passive, (e = _r(\"&\", e, s))),\r\n-        (c = r.native ? (delete r.native, t.nativeEvents || (t.nativeEvents = {})) : t.events || (t.events = {}));\r\n-    a = kr({ value: n.trim(), dynamic: s }, a);\r\n-    r !== d && (a.modifiers = r);\r\n-    r = c[e];\r\n-    Array.isArray(r) ? (o ? r.unshift(a) : r.push(a)) : (c[e] = r ? (o ? [a, r] : [r, a]) : a), (t.plain = !1);\r\n-  }\r\n-  function wr(t, e, n) {\r\n-    var r = xr(t, \":\" + e) || xr(t, \"v-bind:\" + e);\r\n-    if (null != r) return dr(r);\r\n-    if (!1 !== n) {\r\n-      e = xr(t, e);\r\n-      if (null != e) return JSON.stringify(e);\r\n-    }\r\n-  }\r\n-  function xr(t, e, n) {\r\n-    var r;\r\n-    if (null != (r = t.attrsMap[e]))\r\n-      for (var o = t.attrsList, i = 0, a = o.length; i \u003C a; i++)\r\n-        if (o[i].name === e) {\r\n-          o.splice(i, 1);\r\n-          break;\r\n-        }\r\n-    return n && delete t.attrsMap[e], r;\r\n-  }\r\n-  function $r(t, e) {\r\n-    for (var n = t.attrsList, r = 0, o = n.length; r \u003C o; r++) {\r\n-      var i = n[r];\r\n-      if (e.test(i.name)) return n.splice(r, 1), i;\r\n-    }\r\n-  }\r\n-  function kr(t, e) {\r\n-    return e && (null != e.start && (t.start = e.start), null != e.end && (t.end = e.end)), t;\r\n-  }\r\n-  function Cr(t, e, n) {\r\n-    var r = n || {},\r\n-        n = r.trim ? \"(typeof $$v === 'string'? $$v.trim(): $$v)\" : \"$$v\";\r\n-    r.number && (n = \"_n(\" + n + \")\");\r\n-    n = Or(e, n);\r\n-    t.model = { value: \"(\" + e + \")\", expression: JSON.stringify(e), callback: \"function ($$v) {\" + n + \"}\" };\r\n-  }\r\n-  function Or(t, e) {\r\n-    var n = (function (t) {\r\n-      if (((t = t.trim()), (ar = t.length), t.indexOf(\"[\") \u003C 0 || t.lastIndexOf(\"]\") \u003C ar - 1)) return -1 \u003C (lr = t.lastIndexOf(\".\")) ? { exp: t.slice(0, lr), key: '\"' + t.slice(lr + 1) + '\"' } : { exp: t, key: null };\r\n-      for (sr = t, lr = ur = fr = 0; !Sr(); )\r\n-        Tr((cr = Ar()))\r\n-            ? jr(cr)\r\n-            : 91 === cr &&\r\n-            (function (t) {\r\n-              var e = 1;\r\n-              for (ur = lr; !Sr(); )\r\n-                if (Tr((t = Ar()))) jr(t);\r\n-                else if ((91 === t && e++, 93 === t && e--, 0 === e)) {\r\n-                  fr = lr;\r\n-                  break;\r\n-                }\r\n-            })(cr);\r\n-      return { exp: t.slice(0, ur), key: t.slice(ur + 1, fr) };\r\n-    })(t);\r\n-    return null === n.key ? t + \"=\" + e : \"$set(\" + n.exp + \", \" + n.key + \", \" + e + \")\";\r\n-  }\r\n-  function Ar() {\r\n-    return sr.charCodeAt(++lr);\r\n-  }\r\n-  function Sr() {\r\n-    return ar \u003C= lr;\r\n-  }\r\n-  function Tr(t) {\r\n-    return 34 === t || 39 === t;\r\n-  }\r\n-  function jr(t) {\r\n-    for (var e = t; !Sr() && (t = Ar()) !== e; );\r\n-  }\r\n-  var Er;\r\n-  function Mr(e, n, r) {\r\n-    var o = Er;\r\n-    return function t() {\r\n-      null !== n.apply(null, arguments) && Lr(e, t, r, o);\r\n-    };\r\n-  }\r\n-  var Pr = Gt && !(Q && Number(Q[1]) \u003C= 53);\r\n-  function Ir(t, e, n, r) {\r\n-    var o, i;\r\n-    Pr &&\r\n-    ((o = rn),\r\n-        (e = (i = e)._wrapper = function (t) {\r\n-          if (t.target === t.currentTarget || t.timeStamp >= o || t.timeStamp \u003C= 0 || t.target.ownerDocument !== document) return i.apply(this, arguments);\r\n-        })),\r\n-        Er.addEventListener(t, e, Z ? { capture: n, passive: r } : n);\r\n-  }\r\n-  function Lr(t, e, n, r) {\r\n-    (r || Er).removeEventListener(t, e._wrapper || e, n);\r\n-  }\r\n-  function Nr(t, e) {\r\n-    var n, r, o;\r\n-    (P(t.data.on) && P(e.data.on)) ||\r\n-    ((n = e.data.on || {}),\r\n-        (r = t.data.on || {}),\r\n-        (Er = e.elm),\r\n-    I((o = n).__r) && ((o[(t = J ? \"change\" : \"input\")] = [].concat(o.__r, o[t] || [])), delete o.__r),\r\n-    I(o.__c) && ((o.change = [].concat(o.__c, o.change || [])), delete o.__c),\r\n-        re(n, r, Ir, Lr, Mr, e.context),\r\n-        (Er = void 0));\r\n-  }\r\n-  var Dr,\r\n-      q = { create: Nr, update: Nr };\r\n-  function Fr(t, e) {\r\n-    if (!P(t.data.domProps) || !P(e.data.domProps)) {\r\n-      var n,\r\n-          r,\r\n-          o = e.elm,\r\n-          i = t.data.domProps || {},\r\n-          a = e.data.domProps || {};\r\n-      for (n in (I(a.__ob__) && (a = e.data.domProps = w({}, a)), i)) n in a || (o[n] = \"\");\r\n-      for (n in a) {\r\n-        if (((r = a[n]), \"textContent\" === n || \"innerHTML\" === n)) {\r\n-          if ((e.children && (e.children.length = 0), r === i[n])) continue;\r\n-          1 === o.childNodes.length && o.removeChild(o.childNodes[0]);\r\n-        }\r\n-        if (\"value\" === n && \"PROGRESS\" !== o.tagName) {\r\n-          var s = P((o._value = r)) ? \"\" : String(r),\r\n-              c = s;\r\n-          (u = o).composing ||\r\n-          (\"OPTION\" !== u.tagName &&\r\n-              !(function (t, e) {\r\n-                var n = !0;\r\n-                try {\r\n-                  n = document.activeElement !== t;\r\n-                } catch (t) {}\r\n-                return n && t.value !== e;\r\n-              })(u, c) &&\r\n-              !(function (t) {\r\n-                var e = u.value,\r\n-                    n = u._vModifiers;\r\n-                if (I(n)) {\r\n-                  if (n.number) return N(e) !== N(t);\r\n-                  if (n.trim) return e.trim() !== t.trim();\r\n-                }\r\n-                return e !== t;\r\n-              })(c)) ||\r\n-          (o.value = s);\r\n-        } else if (\"innerHTML\" === n && Bn(o.tagName) && P(o.innerHTML)) {\r\n-          (Dr = Dr || document.createElement(\"div\")).innerHTML = \"\u003Csvg>\" + r + \"\u003C\u002Fsvg>\";\r\n-          for (var l = Dr.firstChild; o.firstChild; ) o.removeChild(o.firstChild);\r\n-          for (; l.firstChild; ) o.appendChild(l.firstChild);\r\n-        } else if (r !== i[n])\r\n-          try {\r\n-            o[n] = r;\r\n-          } catch (t) {}\r\n-      }\r\n-    }\r\n-    var u, c;\r\n-  }\r\n-  var Gt = { create: Fr, update: Fr },\r\n-      Rr = t(function (t) {\r\n-        var e = {},\r\n-            n = \u002F:(.+)\u002F;\r\n-        return (\r\n-            t.split(\u002F;(?![^(]*\\))\u002Fg).forEach(function (t) {\r\n-              !t || (1 \u003C (t = t.split(n)).length && (e[t[0].trim()] = t[1].trim()));\r\n-            }),\r\n-                e\r\n-        );\r\n-      });\r\n-  function zr(t) {\r\n-    var e = Hr(t.style);\r\n-    return t.staticStyle ? w(t.staticStyle, e) : e;\r\n-  }\r\n-  function Hr(t) {\r\n-    return Array.isArray(t) ? x(t) : \"string\" == typeof t ? Rr(t) : t;\r\n-  }\r\n-  function Ur(t, e, n) {\r\n-    if (Vr.test(e)) t.style.setProperty(e, n);\r\n-    else if (Wr.test(n)) t.style.setProperty(g(e), n.replace(Wr, \"\"), \"important\");\r\n-    else {\r\n-      var r = Jr(e);\r\n-      if (Array.isArray(n)) for (var o = 0, i = n.length; o \u003C i; o++) t.style[r] = n[o];\r\n-      else t.style[r] = n;\r\n-    }\r\n-  }\r\n-  var Br,\r\n-      Vr = \u002F^--\u002F,\r\n-      Wr = \u002F\\s*!important$\u002F,\r\n-      qr = [\"Webkit\", \"Moz\", \"ms\"],\r\n-      Jr = t(function (t) {\r\n-        if (((Br = Br || document.createElement(\"div\").style), \"filter\" !== (t = m(t)) && t in Br)) return t;\r\n-        for (var e = t.charAt(0).toUpperCase() + t.slice(1), n = 0; n \u003C qr.length; n++) {\r\n-          var r = qr[n] + e;\r\n-          if (r in Br) return r;\r\n-        }\r\n-      });\r\n-  function Gr(t, e) {\r\n-    var n = e.data,\r\n-        t = t.data;\r\n-    if (!(P(n.staticStyle) && P(n.style) && P(t.staticStyle) && P(t.style))) {\r\n-      var r,\r\n-          o,\r\n-          i = e.elm,\r\n-          n = t.staticStyle,\r\n-          t = t.normalizedStyle || t.style || {},\r\n-          a = n || t,\r\n-          t = Hr(e.data.style) || {};\r\n-      e.data.normalizedStyle = I(t.__ob__) ? w({}, t) : t;\r\n-      var s = (function (t) {\r\n-        for (var e, n = {}, r = t; r.componentInstance; ) (r = r.componentInstance._vnode) && r.data && (e = zr(r.data)) && w(n, e);\r\n-        (e = zr(t.data)) && w(n, e);\r\n-        for (var o = t; (o = o.parent); ) o.data && (e = zr(o.data)) && w(n, e);\r\n-        return n;\r\n-      })(e);\r\n-      for (o in a) P(s[o]) && Ur(i, o, \"\");\r\n-      for (o in s) (r = s[o]) !== a[o] && Ur(i, o, null == r ? \"\" : r);\r\n-    }\r\n-  }\r\n-  var Q = { create: Gr, update: Gr },\r\n-      Kr = \u002F\\s+\u002F;\r\n-  function Xr(e, t) {\r\n-    var n;\r\n-    (t = t && t.trim()) &&\r\n-    (e.classList\r\n-        ? -1 \u003C t.indexOf(\" \")\r\n-            ? t.split(Kr).forEach(function (t) {\r\n-              return e.classList.add(t);\r\n-            })\r\n-            : e.classList.add(t)\r\n-        : (n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \").indexOf(\" \" + t + \" \") \u003C 0 && e.setAttribute(\"class\", (n + t).trim()));\r\n-  }\r\n-  function Qr(e, t) {\r\n-    if ((t = t && t.trim()))\r\n-      if (e.classList)\r\n-        -1 \u003C t.indexOf(\" \")\r\n-            ? t.split(Kr).forEach(function (t) {\r\n-              return e.classList.remove(t);\r\n-            })\r\n-            : e.classList.remove(t),\r\n-        e.classList.length || e.removeAttribute(\"class\");\r\n-      else {\r\n-        for (var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \", r = \" \" + t + \" \"; 0 \u003C= n.indexOf(r); ) n = n.replace(r, \" \");\r\n-        (n = n.trim()) ? e.setAttribute(\"class\", n) : e.removeAttribute(\"class\");\r\n-      }\r\n-  }\r\n-  function Yr(t) {\r\n-    if (t) {\r\n-      if (\"object\" != typeof t) return \"string\" == typeof t ? Zr(t) : void 0;\r\n-      var e = {};\r\n-      return !1 !== t.css && w(e, Zr(t.name || \"v\")), w(e, t), e;\r\n-    }\r\n-  }\r\n-  var Zr = t(function (t) {\r\n-        return { enterClass: t + \"-enter\", enterToClass: t + \"-enter-to\", enterActiveClass: t + \"-enter-active\", leaveClass: t + \"-leave\", leaveToClass: t + \"-leave-to\", leaveActiveClass: t + \"-leave-active\" };\r\n-      }),\r\n-      to = B && !G,\r\n-      eo = \"transition\",\r\n-      no = \"animation\",\r\n-      ro = \"transition\",\r\n-      oo = \"transitionend\",\r\n-      io = \"animation\",\r\n-      ao = \"animationend\";\r\n-  to &&\r\n-  (void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend && ((ro = \"WebkitTransition\"), (oo = \"webkitTransitionEnd\")),\r\n-  void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend && ((io = \"WebkitAnimation\"), (ao = \"webkitAnimationEnd\")));\r\n-  var so = B\r\n-      ? window.requestAnimationFrame\r\n-          ? window.requestAnimationFrame.bind(window)\r\n-          : setTimeout\r\n-      : function (t) {\r\n-        return t();\r\n-      };\r\n-  function co(t) {\r\n-    so(function () {\r\n-      so(t);\r\n-    });\r\n-  }\r\n-  function lo(t, e) {\r\n-    var n = t._transitionClasses || (t._transitionClasses = []);\r\n-    n.indexOf(e) \u003C 0 && (n.push(e), Xr(t, e));\r\n-  }\r\n-  function uo(t, e) {\r\n-    t._transitionClasses && v(t._transitionClasses, e), Qr(t, e);\r\n-  }\r\n-  function fo(e, t, n) {\r\n-    var r = ho(e, t),\r\n-        o = r.type,\r\n-        t = r.timeout,\r\n-        i = r.propCount;\r\n-    if (!o) return n();\r\n-    function a() {\r\n-      e.removeEventListener(s, l), n();\r\n-    }\r\n-    var s = o === eo ? oo : ao,\r\n-        c = 0,\r\n-        l = function (t) {\r\n-          t.target === e && ++c >= i && a();\r\n-        };\r\n-    setTimeout(function () {\r\n-      c \u003C i && a();\r\n-    }, t + 1),\r\n-        e.addEventListener(s, l);\r\n-  }\r\n-  var po = \u002F\\b(transform|all)(,|$)\u002F;\r\n-  function ho(t, e) {\r\n-    var n,\r\n-        r = window.getComputedStyle(t),\r\n-        o = (r[ro + \"Delay\"] || \"\").split(\", \"),\r\n-        i = (r[ro + \"Duration\"] || \"\").split(\", \"),\r\n-        a = vo(o, i),\r\n-        s = (r[io + \"Delay\"] || \"\").split(\", \"),\r\n-        c = (r[io + \"Duration\"] || \"\").split(\", \"),\r\n-        t = vo(s, c),\r\n-        o = 0,\r\n-        s = 0;\r\n-    return (\r\n-        e === eo ? 0 \u003C a && ((n = eo), (o = a), (s = i.length)) : e === no ? 0 \u003C t && ((n = no), (o = t), (s = c.length)) : (s = (n = 0 \u003C (o = Math.max(a, t)) ? (t \u003C a ? eo : no) : null) ? (n === eo ? i : c).length : 0),\r\n-            { type: n, timeout: o, propCount: s, hasTransform: n === eo && po.test(r[ro + \"Property\"]) }\r\n-    );\r\n-  }\r\n-  function vo(n, t) {\r\n-    for (; n.length \u003C t.length; ) n = n.concat(n);\r\n-    return Math.max.apply(\r\n-        null,\r\n-        t.map(function (t, e) {\r\n-          return mo(t) + mo(n[e]);\r\n-        })\r\n-    );\r\n-  }\r\n-  function mo(t) {\r\n-    return 1e3 * Number(t.slice(0, -1).replace(\",\", \".\"));\r\n-  }\r\n-  function yo(e, t) {\r\n-    var n = e.elm;\r\n-    I(n._leaveCb) && ((n._leaveCb.cancelled = !0), n._leaveCb());\r\n-    var r = Yr(e.data.transition);\r\n-    if (!P(r) && !I(n._enterCb) && 1 === n.nodeType) {\r\n-      for (\r\n-          var o = r.css,\r\n-              i = r.type,\r\n-              a = r.enterClass,\r\n-              s = r.enterToClass,\r\n-              c = r.enterActiveClass,\r\n-              l = r.appearClass,\r\n-              u = r.appearToClass,\r\n-              f = r.appearActiveClass,\r\n-              p = r.beforeEnter,\r\n-              d = r.enter,\r\n-              h = r.afterEnter,\r\n-              v = r.enterCancelled,\r\n-              m = r.beforeAppear,\r\n-              y = r.appear,\r\n-              g = r.afterAppear,\r\n-              _ = r.appearCancelled,\r\n-              b = r.duration,\r\n-              w = We,\r\n-              x = We.$vnode;\r\n-          x && x.parent;\r\n-\r\n-      )\r\n-        (w = x.context), (x = x.parent);\r\n-      var $,\r\n-          k,\r\n-          C,\r\n-          O,\r\n-          A,\r\n-          S,\r\n-          T,\r\n-          j,\r\n-          E,\r\n-          M,\r\n-          r = !w._isMounted || !e.isRootInsert;\r\n-      (r && !y && \"\" !== y) ||\r\n-      (($ = r && l ? l : a),\r\n-          (k = r && f ? f : c),\r\n-          (C = r && u ? u : s),\r\n-          (p = (r && m) || p),\r\n-          (O = r && \"function\" == typeof y ? y : d),\r\n-          (A = (r && g) || h),\r\n-          (S = (r && _) || v),\r\n-          (T = N(L(b) ? b.enter : b)),\r\n-          (j = !1 !== o && !G),\r\n-          (E = bo(O)),\r\n-          (M = n._enterCb = D(function () {\r\n-            j && (uo(n, C), uo(n, k)), M.cancelled ? (j && uo(n, $), S && S(n)) : A && A(n), (n._enterCb = null);\r\n-          })),\r\n-      e.data.show ||\r\n-      oe(e, \"insert\", function () {\r\n-        var t = n.parentNode,\r\n-            t = t && t._pending && t._pending[e.key];\r\n-        t && t.tag === e.tag && t.elm._leaveCb && t.elm._leaveCb(), O && O(n, M);\r\n-      }),\r\n-      p && p(n),\r\n-      j &&\r\n-      (lo(n, $),\r\n-          lo(n, k),\r\n-          co(function () {\r\n-            uo(n, $), M.cancelled || (lo(n, C), E || (_o(T) ? setTimeout(M, T) : fo(n, i, M)));\r\n-          })),\r\n-      e.data.show && (t && t(), O && O(n, M)),\r\n-      j || E || M());\r\n-    }\r\n-  }\r\n-  function go(t, e) {\r\n-    var n = t.elm;\r\n-    I(n._enterCb) && ((n._enterCb.cancelled = !0), n._enterCb());\r\n-    var r,\r\n-        o,\r\n-        i,\r\n-        a,\r\n-        s,\r\n-        c,\r\n-        l,\r\n-        u,\r\n-        f,\r\n-        p,\r\n-        d,\r\n-        h,\r\n-        v,\r\n-        m,\r\n-        y = Yr(t.data.transition);\r\n-    if (P(y) || 1 !== n.nodeType) return e();\r\n-    function g() {\r\n-      m.cancelled ||\r\n-      (!t.data.show && n.parentNode && ((n.parentNode._pending || (n.parentNode._pending = {}))[t.key] = t),\r\n-      c && c(n),\r\n-      d &&\r\n-      (lo(n, i),\r\n-          lo(n, s),\r\n-          co(function () {\r\n-            uo(n, i), m.cancelled || (lo(n, a), h || (_o(v) ? setTimeout(m, v) : fo(n, o, m)));\r\n-          })),\r\n-      l && l(n, m),\r\n-      d || h || m());\r\n-    }\r\n-    I(n._leaveCb) ||\r\n-    ((r = y.css),\r\n-        (o = y.type),\r\n-        (i = y.leaveClass),\r\n-        (a = y.leaveToClass),\r\n-        (s = y.leaveActiveClass),\r\n-        (c = y.beforeLeave),\r\n-        (l = y.leave),\r\n-        (u = y.afterLeave),\r\n-        (f = y.leaveCancelled),\r\n-        (p = y.delayLeave),\r\n-        (y = y.duration),\r\n-        (d = !1 !== r && !G),\r\n-        (h = bo(l)),\r\n-        (v = N(L(y) ? y.leave : y)),\r\n-        (m = n._leaveCb = D(function () {\r\n-          n.parentNode && n.parentNode._pending && (n.parentNode._pending[t.key] = null), d && (uo(n, a), uo(n, s)), m.cancelled ? (d && uo(n, i), f && f(n)) : (e(), u && u(n)), (n._leaveCb = null);\r\n-        })),\r\n-        p ? p(g) : g());\r\n-  }\r\n-  function _o(t) {\r\n-    return \"number\" == typeof t && !isNaN(t);\r\n-  }\r\n-  function bo(t) {\r\n-    if (P(t)) return !1;\r\n-    var e = t.fns;\r\n-    return I(e) ? bo(Array.isArray(e) ? e[0] : e) : 1 \u003C (t._length || t.length);\r\n-  }\r\n-  function wo(t, e) {\r\n-    !0 !== e.data.show && yo(e);\r\n-  }\r\n-  q = (function (t) {\r\n-    for (var e, h = {}, n = t.modules, g = t.nodeOps, r = 0; r \u003C Xn.length; ++r) for (h[Xn[r]] = [], e = 0; e \u003C n.length; ++e) I(n[e][Xn[r]]) && h[Xn[r]].push(n[e][Xn[r]]);\r\n-    function i(t) {\r\n-      var e = g.parentNode(t);\r\n-      I(e) && g.removeChild(e, t);\r\n-    }\r\n-    function _(t, e, n, r, o, i, a) {\r\n-      I(t.elm) && I(i) && (t = i[a] = yt(t)),\r\n-          (t.isRootInsert = !o),\r\n-      (function (t, e, n, r) {\r\n-        var o = t.data;\r\n-        if (I(o)) {\r\n-          var i = I(t.componentInstance) && o.keepAlive;\r\n-          return (I((o = o.hook)) && I((o = o.init)) && o(t, !1), I(t.componentInstance))\r\n-              ? (d(t, e),\r\n-                  s(n, t.elm, r),\r\n-              O(i) &&\r\n-              (function (t, e, n, r) {\r\n-                for (var o, i = t; i.componentInstance; )\r\n-                  if (I((o = (i = i.componentInstance._vnode).data)) && I((o = o.transition))) {\r\n-                    for (o = 0; o \u003C h.activate.length; ++o) h.activate[o](Kn, i);\r\n-                    e.push(i);\r\n-                    break;\r\n-                  }\r\n-                s(n, t.elm, r);\r\n-              })(t, e, n, r),\r\n-                  1)\r\n-              : void 0;\r\n-        }\r\n-      })(t, e, n, r) ||\r\n-      ((i = t.data),\r\n-          (a = t.children),\r\n-          I((o = t.tag)) ? ((t.elm = t.ns ? g.createElementNS(t.ns, o) : g.createElement(o, t)), c(t), v(t, a, e), I(i) && m(t, e)) : O(t.isComment) ? (t.elm = g.createComment(t.text)) : (t.elm = g.createTextNode(t.text)),\r\n-          s(n, t.elm, r));\r\n-    }\r\n-    function d(t, e) {\r\n-      I(t.data.pendingInsert) && (e.push.apply(e, t.data.pendingInsert), (t.data.pendingInsert = null)), (t.elm = t.componentInstance.$el), b(t) ? (m(t, e), c(t)) : (Gn(t), e.push(t));\r\n-    }\r\n-    function s(t, e, n) {\r\n-      I(t) && (I(n) ? g.parentNode(n) === t && g.insertBefore(t, e, n) : g.appendChild(t, e));\r\n-    }\r\n-    function v(t, e, n) {\r\n-      if (Array.isArray(e)) for (var r = 0; r \u003C e.length; ++r) _(e[r], n, t.elm, null, !0, e, r);\r\n-      else l(t.text) && g.appendChild(t.elm, g.createTextNode(String(t.text)));\r\n-    }\r\n-    function b(t) {\r\n-      for (; t.componentInstance; ) t = t.componentInstance._vnode;\r\n-      return I(t.tag);\r\n-    }\r\n-    function m(t, e) {\r\n-      for (var n = 0; n \u003C h.create.length; ++n) h.create[n](Kn, t);\r\n-      I((r = t.data.hook)) && (I(r.create) && r.create(Kn, t), I(r.insert) && e.push(t));\r\n-    }\r\n-    function c(t) {\r\n-      var e;\r\n-      if (I((e = t.fnScopeId))) g.setStyleScope(t.elm, e);\r\n-      else for (var n = t; n; ) I((e = n.context)) && I((e = e.$options._scopeId)) && g.setStyleScope(t.elm, e), (n = n.parent);\r\n-      I((e = We)) && e !== t.context && e !== t.fnContext && I((e = e.$options._scopeId)) && g.setStyleScope(t.elm, e);\r\n-    }\r\n-    function w(t, e, n, r, o, i) {\r\n-      for (; r \u003C= o; ++r) _(n[r], i, t, e, !1, n, r);\r\n-    }\r\n-    function y(t) {\r\n-      var e,\r\n-          n,\r\n-          r = t.data;\r\n-      if (I(r)) for (I((e = r.hook)) && I((e = e.destroy)) && e(t), e = 0; e \u003C h.destroy.length; ++e) h.destroy[e](t);\r\n-      if (I((e = t.children))) for (n = 0; n \u003C t.children.length; ++n) y(t.children[n]);\r\n-    }\r\n-    function x(t, e, n, r) {\r\n-      for (; n \u003C= r; ++n) {\r\n-        var o = e[n];\r\n-        I(o) &&\r\n-        (I(o.tag)\r\n-            ? ((function t(e, n) {\r\n-              if (I(n) || I(e.data)) {\r\n-                var r,\r\n-                    o = h.remove.length + 1;\r\n-                for (\r\n-                    I(n)\r\n-                        ? (n.listeners += o)\r\n-                        : (n = (function (t) {\r\n-                          function e() {\r\n-                            0 == --e.listeners && i(t);\r\n-                          }\r\n-                          return (e.listeners = o), e;\r\n-                        })(e.elm)),\r\n-                    I((r = e.componentInstance)) && I((r = r._vnode)) && I(r.data) && t(r, n),\r\n-                        r = 0;\r\n-                    r \u003C h.remove.length;\r\n-                    ++r\r\n-                )\r\n-                  h.remove[r](e, n);\r\n-                I((r = e.data.hook)) && I((r = r.remove)) ? r(e, n) : n();\r\n-              } else i(e.elm);\r\n-            })(o),\r\n-                y(o))\r\n-            : i(o.elm));\r\n-      }\r\n-    }\r\n-    function $(t, e, n) {\r\n-      if (O(n) && I(t.parent)) t.parent.data.pendingInsert = e;\r\n-      else for (var r = 0; r \u003C e.length; ++r) e[r].data.hook.insert(e[r]);\r\n-    }\r\n-    var k = a(\"attrs,class,staticClass,staticStyle,key\");\r\n-    function C(t, e, n, r) {\r\n-      var o,\r\n-          i = e.tag,\r\n-          a = e.data,\r\n-          s = e.children;\r\n-      if (((r = r || (a && a.pre)), (e.elm = t), O(e.isComment) && I(e.asyncFactory))) return (e.isAsyncPlaceholder = !0);\r\n-      if (I(a) && (I((o = a.hook)) && I((o = o.init)) && o(e, !0), I((o = e.componentInstance)))) return d(e, n), 1;\r\n-      if (I(i)) {\r\n-        if (I(s))\r\n-          if (t.hasChildNodes())\r\n-            if (I((o = a)) && I((o = o.domProps)) && I((o = o.innerHTML))) {\r\n-              if (o !== t.innerHTML) return;\r\n-            } else {\r\n-              for (var c = !0, l = t.firstChild, u = 0; u \u003C s.length; u++) {\r\n-                if (!l || !C(l, s[u], n, r)) {\r\n-                  c = !1;\r\n-                  break;\r\n-                }\r\n-                l = l.nextSibling;\r\n-              }\r\n-              if (!c || l) return;\r\n-            }\r\n-          else v(e, s, n);\r\n-        if (I(a)) {\r\n-          var f,\r\n-              p = !1;\r\n-          for (f in a)\r\n-            if (!k(f)) {\r\n-              (p = !0), m(e, n);\r\n-              break;\r\n-            }\r\n-          !p && a.class && te(a.class);\r\n-        }\r\n-      } else t.data !== e.text && (t.data = e.text);\r\n-      return 1;\r\n-    }\r\n-    return function (t, e, n, r) {\r\n-      if (!P(e)) {\r\n-        var o = !1,\r\n-            i = [];\r\n-        if (P(t)) (o = !0), _(e, i);\r\n-        else {\r\n-          var a = I(t.nodeType);\r\n-          if (!a && Qn(t, e))\r\n-            !(function m(t, e, n, r, o, y) {\r\n-              if (t !== e) {\r\n-                I(e.elm) && I(r) && (e = r[o] = yt(e));\r\n-                var i = (e.elm = t.elm);\r\n-                if (O(t.isAsyncPlaceholder)) I(e.asyncFactory.resolved) ? C(t.elm, e, n) : (e.isAsyncPlaceholder = !0);\r\n-                else if (O(e.isStatic) && O(t.isStatic) && e.key === t.key && (O(e.isCloned) || O(e.isOnce))) e.componentInstance = t.componentInstance;\r\n-                else {\r\n-                  var a,\r\n-                      s = e.data;\r\n-                  I(s) && I((a = s.hook)) && I((a = a.prepatch)) && a(t, e);\r\n-                  (r = t.children), (o = e.children);\r\n-                  if (I(s) && b(e)) {\r\n-                    for (a = 0; a \u003C h.update.length; ++a) h.update[a](t, e);\r\n-                    I((a = s.hook)) && I((a = a.update)) && a(t, e);\r\n-                  }\r\n-                  P(e.text)\r\n-                      ? I(r) && I(o)\r\n-                      ? r !== o &&\r\n-                      (function (t, e, n, r) {\r\n-                        for (var o, i, a, s = 0, c = 0, l = e.length - 1, u = e[0], f = e[l], p = n.length - 1, d = n[0], h = n[p], v = !y; s \u003C= l && c \u003C= p; )\r\n-                          P(u)\r\n-                              ? (u = e[++s])\r\n-                              : P(f)\r\n-                              ? (f = e[--l])\r\n-                              : Qn(u, d)\r\n-                                  ? (m(u, d, r, n, c), (u = e[++s]), (d = n[++c]))\r\n-                                  : Qn(f, h)\r\n-                                      ? (m(f, h, r, n, p), (f = e[--l]), (h = n[--p]))\r\n-                                      : Qn(u, h)\r\n-                                          ? (m(u, h, r, n, p), v && g.insertBefore(t, u.elm, g.nextSibling(f.elm)), (u = e[++s]), (h = n[--p]))\r\n-                                          : (Qn(f, d)\r\n-                                              ? (m(f, d, r, n, c), v && g.insertBefore(t, f.elm, u.elm), (f = e[--l]))\r\n-                                              : (P(o) &&\r\n-                                              (o = (function (t, e, n) {\r\n-                                                for (var r, o = {}, i = e; i \u003C= n; ++i) I((r = t[i].key)) && (o[r] = i);\r\n-                                                return o;\r\n-                                              })(e, s, l)),\r\n-                                                  !P(\r\n-                                                      (i = I(d.key)\r\n-                                                          ? o[d.key]\r\n-                                                          : (function (t, e, n, r) {\r\n-                                                            for (var o = n; o \u003C r; o++) {\r\n-                                                              var i = e[o];\r\n-                                                              if (I(i) && Qn(t, i)) return o;\r\n-                                                            }\r\n-                                                          })(d, e, s, l))\r\n-                                                  ) && Qn((a = e[i]), d)\r\n-                                                      ? (m(a, d, r, n, c), (e[i] = void 0), v && g.insertBefore(t, a.elm, u.elm))\r\n-                                                      : _(d, r, t, u.elm, !1, n, c)),\r\n-                                              (d = n[++c]));\r\n-                        l \u003C s ? w(t, P(n[p + 1]) ? null : n[p + 1].elm, n, c, p, r) : p \u003C c && x(0, e, s, l);\r\n-                      })(i, r, o, n)\r\n-                      : I(o)\r\n-                          ? (I(t.text) && g.setTextContent(i, \"\"), w(i, null, o, 0, o.length - 1, n))\r\n-                          : I(r)\r\n-                              ? x(0, r, 0, r.length - 1)\r\n-                              : I(t.text) && g.setTextContent(i, \"\")\r\n-                      : t.text !== e.text && g.setTextContent(i, e.text),\r\n-                  I(s) && I((a = s.hook)) && I((a = a.postpatch)) && a(t, e);\r\n-                }\r\n-              }\r\n-            })(t, e, i, null, null, r);\r\n-          else {\r\n-            if (a) {\r\n-              if ((1 === t.nodeType && t.hasAttribute(T) && (t.removeAttribute(T), (n = !0)), O(n) && C(t, e, i))) return $(e, i, !0), t;\r\n-              (s = t), (t = new dt(g.tagName(s).toLowerCase(), {}, [], void 0, s));\r\n-            }\r\n-            var n = t.elm,\r\n-                s = g.parentNode(n);\r\n-            if ((_(e, i, n._leaveCb ? null : s, g.nextSibling(n)), I(e.parent)))\r\n-              for (var c = e.parent, l = b(e); c; ) {\r\n-                for (var u = 0; u \u003C h.destroy.length; ++u) h.destroy[u](c);\r\n-                if (((c.elm = e.elm), l)) {\r\n-                  for (var f = 0; f \u003C h.create.length; ++f) h.create[f](Kn, c);\r\n-                  var p = c.data.hook.insert;\r\n-                  if (p.merged) for (var d = 1; d \u003C p.fns.length; d++) p.fns[d]();\r\n-                } else Gn(c);\r\n-                c = c.parent;\r\n-              }\r\n-            I(s) ? x(0, [t], 0, 0) : I(t.tag) && y(t);\r\n-          }\r\n-        }\r\n-        return $(e, i, o), e.elm;\r\n-      }\r\n-      I(t) && y(t);\r\n-    };\r\n-  })({\r\n-    nodeOps: E,\r\n-    modules: [\r\n-      W,\r\n-      On,\r\n-      q,\r\n-      Gt,\r\n-      Q,\r\n-      B\r\n-          ? {\r\n-            create: wo,\r\n-            activate: wo,\r\n-            remove: function (t, e) {\r\n-              !0 !== t.data.show ? go(t, e) : e();\r\n-            },\r\n-          }\r\n-          : {},\r\n-    ].concat(st),\r\n-  });\r\n-  G &&\r\n-  document.addEventListener(\"selectionchange\", function () {\r\n-    var t = document.activeElement;\r\n-    t && t.vmodel && To(t, \"input\");\r\n-  });\r\n-  var xo = {\r\n-    inserted: function (t, e, n, r) {\r\n-      \"select\" === n.tag\r\n-          ? (r.elm && !r.elm._vOptions\r\n-          ? oe(n, \"postpatch\", function () {\r\n-            xo.componentUpdated(t, e, n);\r\n-          })\r\n-          : $o(t, e, n.context),\r\n-              (t._vOptions = [].map.call(t.options, Oo)))\r\n-          : (\"textarea\" !== n.tag && !qn(t.type)) ||\r\n-          ((t._vModifiers = e.modifiers), e.modifiers.lazy || (t.addEventListener(\"compositionstart\", Ao), t.addEventListener(\"compositionend\", So), t.addEventListener(\"change\", So), G && (t.vmodel = !0)));\r\n-    },\r\n-    componentUpdated: function (t, e, n) {\r\n-      var r, o;\r\n-      \"select\" === n.tag &&\r\n-      ($o(t, e, n.context),\r\n-          (r = t._vOptions),\r\n-      (o = t._vOptions = [].map.call(t.options, Oo)).some(function (t, e) {\r\n-        return !A(t, r[e]);\r\n-      }) &&\r\n-      (t.multiple\r\n-          ? e.value.some(function (t) {\r\n-            return Co(t, o);\r\n-          })\r\n-          : e.value !== e.oldValue && Co(e.value, o)) &&\r\n-      To(t, \"change\"));\r\n-    },\r\n-  };\r\n-  function $o(t, e) {\r\n-    ko(t, e),\r\n-    (J || K) &&\r\n-    setTimeout(function () {\r\n-      ko(t, e);\r\n-    }, 0);\r\n-  }\r\n-  function ko(t, e) {\r\n-    var n = e.value,\r\n-        r = t.multiple;\r\n-    if (!r || Array.isArray(n)) {\r\n-      for (var o, i, a = 0, s = t.options.length; a \u003C s; a++)\r\n-        if (((i = t.options[a]), r)) (o = -1 \u003C S(n, Oo(i))), i.selected !== o && (i.selected = o);\r\n-        else if (A(Oo(i), n)) return t.selectedIndex !== a && (t.selectedIndex = a), 0;\r\n-      r || (t.selectedIndex = -1);\r\n-    }\r\n-  }\r\n-  function Co(e, t) {\r\n-    return t.every(function (t) {\r\n-      return !A(t, e);\r\n-    });\r\n-  }\r\n-  function Oo(t) {\r\n-    return \"_value\" in t ? t._value : t.value;\r\n-  }\r\n-  function Ao(t) {\r\n-    t.target.composing = !0;\r\n-  }\r\n-  function So(t) {\r\n-    t.target.composing && ((t.target.composing = !1), To(t.target, \"input\"));\r\n-  }\r\n-  function To(t, e) {\r\n-    var n = document.createEvent(\"HTMLEvents\");\r\n-    n.initEvent(e, !0, !0), t.dispatchEvent(n);\r\n-  }\r\n-  function jo(t) {\r\n-    return !t.componentInstance || (t.data && t.data.transition) ? t : jo(t.componentInstance._vnode);\r\n-  }\r\n-  (Gt = {\r\n-    model: xo,\r\n-    show: {\r\n-      bind: function (t, e, n) {\r\n-        var r = e.value,\r\n-            e = (n = jo(n)).data && n.data.transition,\r\n-            o = (t.__vOriginalDisplay = \"none\" === t.style.display ? \"\" : t.style.display);\r\n-        r && e\r\n-            ? ((n.data.show = !0),\r\n-                yo(n, function () {\r\n-                  t.style.display = o;\r\n-                }))\r\n-            : (t.style.display = r ? o : \"none\");\r\n-      },\r\n-      update: function (t, e, n) {\r\n-        var r = e.value;\r\n-        !r != !e.oldValue &&\r\n-        ((n = jo(n)).data && n.data.transition\r\n-            ? ((n.data.show = !0),\r\n-                r\r\n-                    ? yo(n, function () {\r\n-                      t.style.display = t.__vOriginalDisplay;\r\n-                    })\r\n-                    : go(n, function () {\r\n-                      t.style.display = \"none\";\r\n-                    }))\r\n-            : (t.style.display = r ? t.__vOriginalDisplay : \"none\"));\r\n-      },\r\n-      unbind: function (t, e, n, r, o) {\r\n-        o || (t.style.display = t.__vOriginalDisplay);\r\n-      },\r\n-    },\r\n-  }),\r\n-      (Q = {\r\n-        name: String,\r\n-        appear: Boolean,\r\n-        css: Boolean,\r\n-        mode: String,\r\n-        type: String,\r\n-        enterClass: String,\r\n-        leaveClass: String,\r\n-        enterToClass: String,\r\n-        leaveToClass: String,\r\n-        enterActiveClass: String,\r\n-        leaveActiveClass: String,\r\n-        appearClass: String,\r\n-        appearActiveClass: String,\r\n-        appearToClass: String,\r\n-        duration: [Number, String, Object],\r\n-      });\r\n-  function Eo(t) {\r\n-    var e = t && t.componentOptions;\r\n-    return e && e.Ctor.options.abstract ? Eo(ze(e.children)) : t;\r\n-  }\r\n-  function Mo(t) {\r\n-    var e,\r\n-        n = {},\r\n-        r = t.$options;\r\n-    for (e in r.propsData) n[e] = t[e];\r\n-    var o,\r\n-        i = r._parentListeners;\r\n-    for (o in i) n[m(o)] = i[o];\r\n-    return n;\r\n-  }\r\n-  function Po(t, e) {\r\n-    if (\u002F\\d-keep-alive$\u002F.test(e.tag)) return t(\"keep-alive\", { props: e.componentOptions.propsData });\r\n-  }\r\n-  function Io(t) {\r\n-    return t.tag || Re(t);\r\n-  }\r\n-  function Lo(t) {\r\n-    return \"show\" === t.name;\r\n-  }\r\n-  (st = {\r\n-    name: \"transition\",\r\n-    props: Q,\r\n-    abstract: !0,\r\n-    render: function (t) {\r\n-      var e = this,\r\n-          n = this.$slots.default;\r\n-      if (n && (n = n.filter(Io)).length) {\r\n-        var r = this.mode,\r\n-            o = n[0];\r\n-        if (\r\n-            (function (t) {\r\n-              for (; (t = t.parent); ) if (t.data.transition) return 1;\r\n-            })(this.$vnode)\r\n-        )\r\n-          return o;\r\n-        var i = Eo(o);\r\n-        if (!i) return o;\r\n-        if (this._leaving) return Po(t, o);\r\n-        var a = \"__transition-\" + this._uid + \"-\";\r\n-        i.key = null == i.key ? (i.isComment ? a + \"comment\" : a + i.tag) : !l(i.key) || 0 === String(i.key).indexOf(a) ? i.key : a + i.key;\r\n-        var s = ((i.data || (i.data = {})).transition = Mo(this)),\r\n-            n = this._vnode,\r\n-            a = Eo(n);\r\n-        if ((i.data.directives && i.data.directives.some(Lo) && (i.data.show = !0), a && a.data && (a.key !== i.key || a.tag !== i.tag) && !Re(a) && (!a.componentInstance || !a.componentInstance._vnode.isComment))) {\r\n-          a = a.data.transition = w({}, s);\r\n-          if (\"out-in\" === r)\r\n-            return (\r\n-                (this._leaving = !0),\r\n-                    oe(a, \"afterLeave\", function () {\r\n-                      (e._leaving = !1), e.$forceUpdate();\r\n-                    }),\r\n-                    Po(t, o)\r\n-            );\r\n-          if (\"in-out\" === r) {\r\n-            if (Re(i)) return n;\r\n-            var c,\r\n-                n = function () {\r\n-                  c();\r\n-                };\r\n-            oe(s, \"afterEnter\", n),\r\n-                oe(s, \"enterCancelled\", n),\r\n-                oe(a, \"delayLeave\", function (t) {\r\n-                  c = t;\r\n-                });\r\n-          }\r\n-        }\r\n-        return o;\r\n-      }\r\n-    },\r\n-  }),\r\n-      (Q = w({ tag: String, moveClass: String }, Q));\r\n-  function No(t) {\r\n-    t.elm._moveCb && t.elm._moveCb(), t.elm._enterCb && t.elm._enterCb();\r\n-  }\r\n-  function Do(t) {\r\n-    t.data.newPos = t.elm.getBoundingClientRect();\r\n-  }\r\n-  function Fo(t) {\r\n-    var e = t.data.pos,\r\n-        n = t.data.newPos,\r\n-        r = e.left - n.left,\r\n-        n = e.top - n.top;\r\n-    (r || n) && ((t.data.moved = !0), ((t = t.elm.style).transform = t.WebkitTransform = \"translate(\" + r + \"px,\" + n + \"px)\"), (t.transitionDuration = \"0s\"));\r\n-  }\r\n-  delete Q.mode;\r\n-  Q = {\r\n-    Transition: st,\r\n-    TransitionGroup: {\r\n-      props: Q,\r\n-      beforeMount: function () {\r\n-        var r = this,\r\n-            o = this._update;\r\n-        this._update = function (t, e) {\r\n-          var n = qe(r);\r\n-          r.__patch__(r._vnode, r.kept, !1, !0), (r._vnode = r.kept), n(), o.call(r, t, e);\r\n-        };\r\n-      },\r\n-      render: function (t) {\r\n-        for (var e = this.tag || this.$vnode.data.tag || \"span\", n = Object.create(null), r = (this.prevChildren = this.children), o = this.$slots.default || [], i = (this.children = []), a = Mo(this), s = 0; s \u003C o.length; s++) {\r\n-          var c = o[s];\r\n-          c.tag && null != c.key && 0 !== String(c.key).indexOf(\"__vlist\") && (i.push(c), (((n[c.key] = c).data || (c.data = {})).transition = a));\r\n-        }\r\n-        if (r) {\r\n-          for (var l = [], u = [], f = 0; f \u003C r.length; f++) {\r\n-            var p = r[f];\r\n-            (p.data.transition = a), (p.data.pos = p.elm.getBoundingClientRect()), (n[p.key] ? l : u).push(p);\r\n-          }\r\n-          (this.kept = t(e, null, l)), (this.removed = u);\r\n-        }\r\n-        return t(e, null, i);\r\n-      },\r\n-      updated: function () {\r\n-        var t = this.prevChildren,\r\n-            r = this.moveClass || (this.name || \"v\") + \"-move\";\r\n-        t.length &&\r\n-        this.hasMove(t[0].elm, r) &&\r\n-        (t.forEach(No),\r\n-            t.forEach(Do),\r\n-            t.forEach(Fo),\r\n-            (this._reflow = document.body.offsetHeight),\r\n-            t.forEach(function (t) {\r\n-              var n;\r\n-              t.data.moved &&\r\n-              ((t = (n = t.elm).style),\r\n-                  lo(n, r),\r\n-                  (t.transform = t.WebkitTransform = t.transitionDuration = \"\"),\r\n-                  n.addEventListener(\r\n-                      oo,\r\n-                      (n._moveCb = function t(e) {\r\n-                        (e && e.target !== n) || (e && !\u002Ftransform$\u002F.test(e.propertyName)) || (n.removeEventListener(oo, t), (n._moveCb = null), uo(n, r));\r\n-                      })\r\n-                  ));\r\n-            }));\r\n-      },\r\n-      methods: {\r\n-        hasMove: function (t, e) {\r\n-          if (!to) return !1;\r\n-          if (this._hasMove) return this._hasMove;\r\n-          var n = t.cloneNode();\r\n-          t._transitionClasses &&\r\n-          t._transitionClasses.forEach(function (t) {\r\n-            Qr(n, t);\r\n-          }),\r\n-              Xr(n, e),\r\n-              (n.style.display = \"none\"),\r\n-              this.$el.appendChild(n);\r\n-          e = ho(n);\r\n-          return this.$el.removeChild(n), (this._hasMove = e.hasTransform);\r\n-        },\r\n-      },\r\n-    },\r\n-  };\r\n-  function Ro(t, e) {\r\n-    return t && pi(t) && \"\\n\" === e[0];\r\n-  }\r\n-  (_n.config.mustUseProp = An),\r\n-      (_n.config.isReservedTag = zn),\r\n-      (_n.config.isReservedAttr = ht),\r\n-      (_n.config.getTagNamespace = Vn),\r\n-      (_n.config.isUnknownElement = function (t) {\r\n-        if (!B) return !0;\r\n-        if (zn(t)) return !1;\r\n-        if (((t = t.toLowerCase()), null != Wn[t])) return Wn[t];\r\n-        var e = document.createElement(t);\r\n-        return -1 \u003C t.indexOf(\"-\") ? (Wn[t] = e.constructor === window.HTMLUnknownElement || e.constructor === window.HTMLElement) : (Wn[t] = \u002FHTMLUnknownElement\u002F.test(e.toString()));\r\n-      }),\r\n-      w(_n.options.directives, Gt),\r\n-      w(_n.options.components, Q),\r\n-      (_n.prototype.__patch__ = B ? q : $),\r\n-      (_n.prototype.$mount = function (t, e) {\r\n-        return (\r\n-            (n = this),\r\n-                (t = t = t && B ? Jn(t) : void 0),\r\n-                (r = e),\r\n-                (n.$el = t),\r\n-            n.$options.render || (n.$options.render = vt),\r\n-                Ke(n, \"beforeMount\"),\r\n-                (t = function () {\r\n-                  n._update(n._render(), r);\r\n-                }),\r\n-                new sn(\r\n-                    n,\r\n-                    t,\r\n-                    $,\r\n-                    {\r\n-                      before: function () {\r\n-                        n._isMounted && !n._isDestroyed && Ke(n, \"beforeUpdate\");\r\n-                      },\r\n-                    },\r\n-                    !0\r\n-                ),\r\n-                (r = !1),\r\n-            null == n.$vnode && ((n._isMounted = !0), Ke(n, \"mounted\")),\r\n-                n\r\n-        );\r\n-        var n, r;\r\n-      }),\r\n-  B &&\r\n-  setTimeout(function () {\r\n-    M.devtools && nt && nt.emit(\"init\", _n);\r\n-  }, 0);\r\n-  var zo,\r\n-      Ho,\r\n-      Uo,\r\n-      Bo,\r\n-      Vo,\r\n-      Wo,\r\n-      qo,\r\n-      Jo,\r\n-      Go,\r\n-      Ko = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg,\r\n-      Xo = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg,\r\n-      Qo = t(function (t) {\r\n-        var e = t[0].replace(Xo, \"\\\\$&\"),\r\n-            t = t[1].replace(Xo, \"\\\\$&\");\r\n-        return new RegExp(e + \"((?:.|\\\\n)+?)\" + t, \"g\");\r\n-      }),\r\n-      ht = {\r\n-        staticKeys: [\"staticClass\"],\r\n-        transformNode: function (t, e) {\r\n-          e.warn;\r\n-          e = xr(t, \"class\");\r\n-          e && (t.staticClass = JSON.stringify(e));\r\n-          e = wr(t, \"class\", !1);\r\n-          e && (t.classBinding = e);\r\n-        },\r\n-        genData: function (t) {\r\n-          var e = \"\";\r\n-          return t.staticClass && (e += \"staticClass:\" + t.staticClass + \",\"), t.classBinding && (e += \"class:\" + t.classBinding + \",\"), e;\r\n-        },\r\n-      },\r\n-      Gt = {\r\n-        staticKeys: [\"staticStyle\"],\r\n-        transformNode: function (t, e) {\r\n-          e.warn;\r\n-          e = xr(t, \"style\");\r\n-          e && (t.staticStyle = JSON.stringify(Rr(e)));\r\n-          e = wr(t, \"style\", !1);\r\n-          e && (t.styleBinding = e);\r\n-        },\r\n-        genData: function (t) {\r\n-          var e = \"\";\r\n-          return t.staticStyle && (e += \"staticStyle:\" + t.staticStyle + \",\"), t.styleBinding && (e += \"style:(\" + t.styleBinding + \"),\"), e;\r\n-        },\r\n-      },\r\n-      Q = a(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),\r\n-      q = a(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),\r\n-      Yo = a(\r\n-          \"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"\r\n-      ),\r\n-      Zo = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,\r\n-      ti = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,\r\n-      F = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + F.source + \"]*\",\r\n-      F = \"((?:\" + F + \"\\\\:)?\" + F + \")\",\r\n-      ei = new RegExp(\"^\u003C\" + F),\r\n-      ni = \u002F^\\s*(\\\u002F?)>\u002F,\r\n-      ri = new RegExp(\"^\u003C\\\\\u002F\" + F + \"[^>]*>\"),\r\n-      oi = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi,\r\n-      ii = \u002F^\u003C!\\--\u002F,\r\n-      ai = \u002F^\u003C!\\[\u002F,\r\n-      si = a(\"script,style,textarea\", !0),\r\n-      ci = {},\r\n-      li = { \"&lt;\": \"\u003C\", \"&gt;\": \">\", \"&quot;\": '\"', \"&amp;\": \"&\", \"&#10;\": \"\\n\", \"&#9;\": \"\\t\", \"&#39;\": \"'\" },\r\n-      ui = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg,\r\n-      fi = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg,\r\n-      pi = a(\"pre,textarea\", !0),\r\n-      di = \u002F^@|^v-on:\u002F,\r\n-      hi = \u002F^v-|^@|^:\u002F,\r\n-      vi = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F,\r\n-      mi = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F,\r\n-      yi = \u002F^\\(|\\)$\u002Fg,\r\n-      gi = \u002F^\\[.*\\]$\u002F,\r\n-      _i = \u002F:(.*)$\u002F,\r\n-      bi = \u002F^:|^\\.|^v-bind:\u002F,\r\n-      wi = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg,\r\n-      xi = \u002F^v-slot(:|$)|^#\u002F,\r\n-      $i = \u002F[\\r\\n]\u002F,\r\n-      ki = \u002F\\s+\u002Fg,\r\n-      Ci = t(function (t) {\r\n-        return ((zo = zo || document.createElement(\"div\")).innerHTML = t), zo.textContent;\r\n-      }),\r\n-      Oi = \"_empty_\";\r\n-  function Ai(t, e, n) {\r\n-    return {\r\n-      type: 1,\r\n-      tag: t,\r\n-      attrsList: e,\r\n-      attrsMap: (function (t) {\r\n-        for (var e = {}, n = 0, r = t.length; n \u003C r; n++) e[t[n].name] = t[n].value;\r\n-        return e;\r\n-      })(e),\r\n-      rawAttrsMap: {},\r\n-      parent: n,\r\n-      children: [],\r\n-    };\r\n-  }\r\n-  function Si(t, e) {\r\n-    var n, r, o;\r\n-    (n = wr((o = t), \"key\")) && (o.key = n),\r\n-        (t.plain = !t.key && !t.scopedSlots && !t.attrsList.length),\r\n-    (o = wr((r = t), \"ref\")) &&\r\n-    ((r.ref = o),\r\n-        (r.refInFor = (function () {\r\n-          for (var t = r; t; ) {\r\n-            if (void 0 !== t.for) return !0;\r\n-            t = t.parent;\r\n-          }\r\n-          return !1;\r\n-        })())),\r\n-        (function (t) {\r\n-          \"template\" === t.tag ? ((a = xr(t, \"scope\")), (t.slotScope = a || xr(t, \"slot-scope\"))) : (a = xr(t, \"slot-scope\")) && (t.slotScope = a);\r\n-          var e,\r\n-              n,\r\n-              r,\r\n-              o,\r\n-              i,\r\n-              a = wr(t, \"slot\");\r\n-          a &&\r\n-          ((t.slotTarget = '\"\"' === a ? '\"default\"' : a),\r\n-              (t.slotTargetDynamic = !(!t.attrsMap[\":slot\"] && !t.attrsMap[\"v-bind:slot\"])),\r\n-          \"template\" === t.tag || t.slotScope || yr(t, \"slot\", a, ((a = \"slot\"), t.rawAttrsMap[\":\" + a] || t.rawAttrsMap[\"v-bind:\" + a] || t.rawAttrsMap[a]))),\r\n-              \"template\" === t.tag\r\n-                  ? (r = $r(t, xi)) && ((n = (e = Ei(r)).name), (o = e.dynamic), (t.slotTarget = n), (t.slotTargetDynamic = o), (t.slotScope = r.value || Oi))\r\n-                  : (e = $r(t, xi)) &&\r\n-                  ((n = t.scopedSlots || (t.scopedSlots = {})),\r\n-                      (r = (o = Ei(e)).name),\r\n-                      (o = o.dynamic),\r\n-                      ((i = n[r] = Ai(\"template\", [], t)).slotTarget = r),\r\n-                      (i.slotTargetDynamic = o),\r\n-                      (i.children = t.children.filter(function (t) {\r\n-                        if (!t.slotScope) return (t.parent = i), !0;\r\n-                      })),\r\n-                      (i.slotScope = e.value || Oi),\r\n-                      (t.children = []),\r\n-                      (t.plain = !1));\r\n-        })(t),\r\n-    \"slot\" === t.tag && (t.slotName = wr(t, \"name\")),\r\n-    (o = wr((n = t), \"is\")) && (n.component = o),\r\n-    null != xr(n, \"inline-template\") && (n.inlineTemplate = !0);\r\n-    for (var i = 0; i \u003C Bo.length; i++) t = Bo[i](t, e) || t;\r\n-    return (\r\n-        (function (t) {\r\n-          for (var e, n, r, o, i, a, s, c, l, u, f, p = t.attrsList, d = 0, h = p.length; d \u003C h; d++)\r\n-            (e = s = p[d].name),\r\n-                (n = p[d].value),\r\n-                hi.test(e)\r\n-                    ? ((t.hasBindings = !0),\r\n-                    (c = (function (t) {\r\n-                      t = t.match(wi);\r\n-                      if (t) {\r\n-                        var e = {};\r\n-                        return (\r\n-                            t.forEach(function (t) {\r\n-                              e[t.slice(1)] = !0;\r\n-                            }),\r\n-                                e\r\n-                        );\r\n-                      }\r\n-                    })(e.replace(hi, \"\"))) && (e = e.replace(wi, \"\")),\r\n-                        bi.test(e)\r\n-                            ? ((e = e.replace(bi, \"\")),\r\n-                                (n = dr(n)),\r\n-                            (f = gi.test(e)) && (e = e.slice(1, -1)),\r\n-                            c &&\r\n-                            (c.prop && !f && \"innerHtml\" === (e = m(e)) && (e = \"innerHTML\"),\r\n-                            c.camel && !f && (e = m(e)),\r\n-                            c.sync &&\r\n-                            ((a = Or(n, \"$event\")),\r\n-                                f ? br(t, '\"update:\"+(' + e + \")\", a, null, !1, 0, p[d], !0) : (br(t, \"update:\" + m(e), a, null, !1, 0, p[d]), g(e) !== m(e) && br(t, \"update:\" + g(e), a, null, !1, 0, p[d])))),\r\n-                                ((c && c.prop) || (!t.component && Jo(t.tag, t.attrsMap.type, e)) ? mr : yr)(t, e, n, p[d], f))\r\n-                            : di.test(e)\r\n-                            ? ((e = e.replace(di, \"\")), (f = gi.test(e)) && (e = e.slice(1, -1)), br(t, e, n, c, !1, 0, p[d], f))\r\n-                            : ((f = !1),\r\n-                            (u = (l = (e = e.replace(hi, \"\")).match(_i)) && l[1]) && ((e = e.slice(0, -(u.length + 1))), gi.test(u) && ((u = u.slice(1, -1)), (f = !0))),\r\n-                                (r = t),\r\n-                                (o = e),\r\n-                                (i = s),\r\n-                                (a = n),\r\n-                                (l = u),\r\n-                                (s = f),\r\n-                                (u = c),\r\n-                                (c = p[d]),\r\n-                                (r.directives || (r.directives = [])).push(kr({ name: o, rawName: i, value: a, arg: l, isDynamicArg: s, modifiers: u }, c)),\r\n-                                (r.plain = !1)))\r\n-                    : (yr(t, e, JSON.stringify(n), p[d]), !t.component && \"muted\" === e && Jo(t.tag, t.attrsMap.type, e) && mr(t, e, \"true\", p[d]));\r\n-        })(t),\r\n-            t\r\n-    );\r\n-  }\r\n-  function Ti(t) {\r\n-    var r, e;\r\n-    !(r = xr(t, \"v-for\")) ||\r\n-    ((e = (function () {\r\n-          var t = r.match(vi);\r\n-          if (t) {\r\n-            var e = {};\r\n-            e.for = t[2].trim();\r\n-            var n = t[1].trim().replace(yi, \"\"),\r\n-                t = n.match(mi);\r\n-            return t ? ((e.alias = n.replace(mi, \"\").trim()), (e.iterator1 = t[1].trim()), t[2] && (e.iterator2 = t[2].trim())) : (e.alias = n), e;\r\n-          }\r\n-        })()) &&\r\n-        w(t, e));\r\n-  }\r\n-  function ji(t, e) {\r\n-    t.ifConditions || (t.ifConditions = []), t.ifConditions.push(e);\r\n-  }\r\n-  function Ei(t) {\r\n-    var e = t.name.replace(xi, \"\");\r\n-    return e || (\"#\" !== t.name[0] && (e = \"default\")), gi.test(e) ? { name: e.slice(1, -1), dynamic: !0 } : { name: '\"' + e + '\"', dynamic: !1 };\r\n-  }\r\n-  var Mi = \u002F^xmlns:NS\\d+\u002F,\r\n-      Pi = \u002F^NS\\d+:\u002F;\r\n-  function Ii(t) {\r\n-    return Ai(t.tag, t.attrsList.slice(), t.parent);\r\n-  }\r\n-  var Li,\r\n-      Ni,\r\n-      Gt = [\r\n-        ht,\r\n-        Gt,\r\n-        {\r\n-          preTransformNode: function (t, e) {\r\n-            if (\"input\" === t.tag) {\r\n-              var n,\r\n-                  r = t.attrsMap;\r\n-              if (r[\"v-model\"] && ((r[\":type\"] || r[\"v-bind:type\"]) && (n = wr(t, \"type\")), r.type || n || !r[\"v-bind\"] || (n = \"(\" + r[\"v-bind\"] + \").type\"), n)) {\r\n-                var o = xr(t, \"v-if\", !0),\r\n-                    i = o ? \"&&(\" + o + \")\" : \"\",\r\n-                    a = null != xr(t, \"v-else\", !0),\r\n-                    s = xr(t, \"v-else-if\", !0),\r\n-                    c = Ii(t);\r\n-                Ti(c), gr(c, \"type\", \"checkbox\"), Si(c, e), (c.processed = !0), (c.if = \"(\" + n + \")==='checkbox'\" + i), ji(c, { exp: c.if, block: c });\r\n-                r = Ii(t);\r\n-                xr(r, \"v-for\", !0), gr(r, \"type\", \"radio\"), Si(r, e), ji(c, { exp: \"(\" + n + \")==='radio'\" + i, block: r });\r\n-                t = Ii(t);\r\n-                return xr(t, \"v-for\", !0), gr(t, \":type\", n), Si(t, e), ji(c, { exp: o, block: t }), a ? (c.else = !0) : s && (c.elseif = s), c;\r\n-              }\r\n-            }\r\n-          },\r\n-        },\r\n-      ],\r\n-      Gt = {\r\n-        expectHTML: !0,\r\n-        modules: Gt,\r\n-        directives: {\r\n-          model: function (t, e, n) {\r\n-            var r,\r\n-                o,\r\n-                i,\r\n-                a,\r\n-                s,\r\n-                c = e.value,\r\n-                l = e.modifiers,\r\n-                u = t.tag,\r\n-                f = t.attrsMap.type;\r\n-            if (t.component) return Cr(t, c, l), !1;\r\n-            if (\"select\" === u)\r\n-              br(\r\n-                  t,\r\n-                  \"change\",\r\n-                  'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return ' +\r\n-                  (l && l.number ? \"_n(val)\" : \"val\") +\r\n-                  \"});\" +\r\n-                  \" \" +\r\n-                  Or(c, \"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),\r\n-                  null,\r\n-                  !0\r\n-              );\r\n-            else if (\"input\" === u && \"checkbox\" === f)\r\n-              (r = t),\r\n-                  (o = c),\r\n-                  (i = l && l.number),\r\n-                  (a = wr(r, \"value\") || \"null\"),\r\n-                  (s = wr(r, \"true-value\") || \"true\"),\r\n-                  (e = wr(r, \"false-value\") || \"false\"),\r\n-                  mr(r, \"checked\", \"Array.isArray(\" + o + \")?_i(\" + o + \",\" + a + \")>-1\" + (\"true\" === s ? \":(\" + o + \")\" : \":_q(\" + o + \",\" + s + \")\")),\r\n-                  br(\r\n-                      r,\r\n-                      \"change\",\r\n-                      \"var $$a=\" +\r\n-                      o +\r\n-                      \",$$el=$event.target,$$c=$$el.checked?(\" +\r\n-                      s +\r\n-                      \"):(\" +\r\n-                      e +\r\n-                      \");if(Array.isArray($$a)){var $$v=\" +\r\n-                      (i ? \"_n(\" + a + \")\" : a) +\r\n-                      \",$$i=_i($$a,$$v);if($$el.checked){$$i\u003C0&&(\" +\r\n-                      Or(o, \"$$a.concat([$$v])\") +\r\n-                      \")}else{$$i>-1&&(\" +\r\n-                      Or(o, \"$$a.slice(0,$$i).concat($$a.slice($$i+1))\") +\r\n-                      \")}}else{\" +\r\n-                      Or(o, \"$$c\") +\r\n-                      \"}\",\r\n-                      null,\r\n-                      !0\r\n-                  );\r\n-            else if (\"input\" === u && \"radio\" === f)\r\n-              (i = t), (a = c), (o = l && l.number), (f = wr(i, \"value\") || \"null\"), mr(i, \"checked\", \"_q(\" + a + \",\" + (f = o ? \"_n(\" + f + \")\" : f) + \")\"), br(i, \"change\", Or(a, f), null, !0);\r\n-            else if (\"input\" === u || \"textarea\" === u)\r\n-              !(function (t, e) {\r\n-                var n = t.attrsMap.type,\r\n-                    r = l || {},\r\n-                    o = r.lazy,\r\n-                    i = r.number,\r\n-                    a = r.trim,\r\n-                    r = !o && \"range\" !== n,\r\n-                    o = o ? \"change\" : \"range\" === n ? \"__r\" : \"input\",\r\n-                    n = a ? \"$event.target.value.trim()\" : \"$event.target.value\";\r\n-                i && (n = \"_n(\" + n + \")\");\r\n-                n = Or(e, n);\r\n-                r && (n = \"if($event.target.composing)return;\" + n), mr(t, \"value\", \"(\" + e + \")\"), br(t, o, n, null, !0), (a || i) && br(t, \"blur\", \"$forceUpdate()\");\r\n-              })(t, c);\r\n-            else if (!M.isReservedTag(u)) return Cr(t, c, l), !1;\r\n-            return !0;\r\n-          },\r\n-          text: function (t, e) {\r\n-            e.value && mr(t, \"textContent\", \"_s(\" + e.value + \")\", e);\r\n-          },\r\n-          html: function (t, e) {\r\n-            e.value && mr(t, \"innerHTML\", \"_s(\" + e.value + \")\", e);\r\n-          },\r\n-        },\r\n-        isPreTag: function (t) {\r\n-          return \"pre\" === t;\r\n-        },\r\n-        isUnaryTag: Q,\r\n-        mustUseProp: An,\r\n-        canBeLeftOpenTag: q,\r\n-        isReservedTag: zn,\r\n-        getTagNamespace: Vn,\r\n-        staticKeys: Gt.reduce(function (t, e) {\r\n-          return t.concat(e.staticKeys || []);\r\n-        }, []).join(\",\"),\r\n-      },\r\n-      Di = t(function (t) {\r\n-        return a(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\" + (t ? \",\" + t : \"\"));\r\n-      }),\r\n-      Fi = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F,\r\n-      Ri = \u002F\\([^)]*?\\);*$\u002F,\r\n-      zi = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F,\r\n-      Hi = { esc: 27, tab: 9, enter: 13, space: 32, up: 38, left: 37, right: 39, down: 40, delete: [8, 46] },\r\n-      Ui = {\r\n-        esc: [\"Esc\", \"Escape\"],\r\n-        tab: \"Tab\",\r\n-        enter: \"Enter\",\r\n-        space: [\" \", \"Spacebar\"],\r\n-        up: [\"Up\", \"ArrowUp\"],\r\n-        left: [\"Left\", \"ArrowLeft\"],\r\n-        right: [\"Right\", \"ArrowRight\"],\r\n-        down: [\"Down\", \"ArrowDown\"],\r\n-        delete: [\"Backspace\", \"Delete\", \"Del\"],\r\n-      },\r\n-      Bi = function (t) {\r\n-        return \"if(\" + t + \")return null;\";\r\n-      },\r\n-      Vi = {\r\n-        stop: \"$event.stopPropagation();\",\r\n-        prevent: \"$event.preventDefault();\",\r\n-        self: Bi(\"$event.target !== $event.currentTarget\"),\r\n-        ctrl: Bi(\"!$event.ctrlKey\"),\r\n-        shift: Bi(\"!$event.shiftKey\"),\r\n-        alt: Bi(\"!$event.altKey\"),\r\n-        meta: Bi(\"!$event.metaKey\"),\r\n-        left: Bi(\"'button' in $event && $event.button !== 0\"),\r\n-        middle: Bi(\"'button' in $event && $event.button !== 1\"),\r\n-        right: Bi(\"'button' in $event && $event.button !== 2\"),\r\n-      };\r\n-  function Wi(t, e) {\r\n-    var n,\r\n-        e = e ? \"nativeOn:\" : \"on:\",\r\n-        r = \"\",\r\n-        o = \"\";\r\n-    for (n in t) {\r\n-      var i = (function e(t) {\r\n-        if (!t) return \"function(){}\";\r\n-        if (Array.isArray(t))\r\n-          return (\r\n-              \"[\" +\r\n-              t\r\n-              .map(function (t) {\r\n-                return e(t);\r\n-              })\r\n-              .join(\",\") +\r\n-              \"]\"\r\n-          );\r\n-        var n = zi.test(t.value),\r\n-            r = Fi.test(t.value),\r\n-            o = zi.test(t.value.replace(Ri, \"\"));\r\n-        if (t.modifiers) {\r\n-          var i,\r\n-              a,\r\n-              s = \"\",\r\n-              c = \"\",\r\n-              l = [];\r\n-          for (i in t.modifiers)\r\n-            Vi[i]\r\n-                ? ((c += Vi[i]), Hi[i] && l.push(i))\r\n-                : \"exact\" === i\r\n-                ? ((a = t.modifiers),\r\n-                    (c += Bi(\r\n-                        [\"ctrl\", \"shift\", \"alt\", \"meta\"]\r\n-                        .filter(function (t) {\r\n-                          return !a[t];\r\n-                        })\r\n-                        .map(function (t) {\r\n-                          return \"$event.\" + t + \"Key\";\r\n-                        })\r\n-                        .join(\"||\")\r\n-                    )))\r\n-                : l.push(i);\r\n-          return (\r\n-              l.length && (s += \"if(!$event.type.indexOf('key')&&\" + l.map(qi).join(\"&&\") + \")return null;\"),\r\n-              c && (s += c),\r\n-              \"function($event){\" + s + (n ? \"return \" + t.value + \"($event)\" : r ? \"return (\" + t.value + \")($event)\" : o ? \"return \" + t.value : t.value) + \"}\"\r\n-          );\r\n-        }\r\n-        return n || r ? t.value : \"function($event){\" + (o ? \"return \" + t.value : t.value) + \"}\";\r\n-      })(t[n]);\r\n-      t[n] && t[n].dynamic ? (o += n + \",\" + i + \",\") : (r += '\"' + n + '\":' + i + \",\");\r\n-    }\r\n-    return (r = \"{\" + r.slice(0, -1) + \"}\"), o ? e + \"_d(\" + r + \",[\" + o.slice(0, -1) + \"])\" : e + r;\r\n-  }\r\n-  function qi(t) {\r\n-    var e = parseInt(t, 10);\r\n-    if (e) return \"$event.keyCode!==\" + e;\r\n-    var n = Hi[t],\r\n-        e = Ui[t];\r\n-    return \"_k($event.keyCode,\" + JSON.stringify(t) + \",\" + JSON.stringify(n) + \",$event.key,\" + JSON.stringify(e) + \")\";\r\n-  }\r\n-  var Ji = {\r\n-        on: function (t, e) {\r\n-          t.wrapListeners = function (t) {\r\n-            return \"_g(\" + t + \",\" + e.value + \")\";\r\n-          };\r\n-        },\r\n-        bind: function (e, n) {\r\n-          e.wrapData = function (t) {\r\n-            return \"_b(\" + t + \",'\" + e.tag + \"',\" + n.value + \",\" + (n.modifiers && n.modifiers.prop ? \"true\" : \"false\") + (n.modifiers && n.modifiers.sync ? \",true\" : \"\") + \")\";\r\n-          };\r\n-        },\r\n-        cloak: $,\r\n-      },\r\n-      Gi = function (t) {\r\n-        (this.options = t), (this.warn = t.warn || hr), (this.transforms = vr(t.modules, \"transformCode\")), (this.dataGenFns = vr(t.modules, \"genData\")), (this.directives = w(w({}, Ji), t.directives));\r\n-        var e = t.isReservedTag || k;\r\n-        (this.maybeComponent = function (t) {\r\n-          return !!t.component || !e(t.tag);\r\n-        }),\r\n-            (this.onceId = 0),\r\n-            (this.staticRenderFns = []),\r\n-            (this.pre = !1);\r\n-      };\r\n-  function Ki(t, e) {\r\n-    e = new Gi(e);\r\n-    return { render: \"with(this){return \" + (t ? Xi(t, e) : '_c(\"div\")') + \"}\", staticRenderFns: e.staticRenderFns };\r\n-  }\r\n-  function Xi(t, e) {\r\n-    if ((t.parent && (t.pre = t.pre || t.parent.pre), t.staticRoot && !t.staticProcessed)) return Qi(t, e);\r\n-    if (t.once && !t.onceProcessed) return Yi(t, e);\r\n-    if (t.for && !t.forProcessed) return ta(t, e);\r\n-    if (t.if && !t.ifProcessed) return Zi(t, e);\r\n-    if (\"template\" !== t.tag || t.slotTarget || e.pre) {\r\n-      if (\"slot\" === t.tag)\r\n-        return (\r\n-            (s = \"_t(\" + ((l = t).slotName || '\"default\"') + ((a = oa(l, e)) ? \",\" + a : \"\")),\r\n-                (c =\r\n-                    l.attrs || l.dynamicAttrs\r\n-                        ? sa(\r\n-                        (l.attrs || []).concat(l.dynamicAttrs || []).map(function (t) {\r\n-                          return { name: m(t.name), value: t.value, dynamic: t.dynamic };\r\n-                        })\r\n-                        )\r\n-                        : null),\r\n-                (l = l.attrsMap[\"v-bind\"]),\r\n-            (!c && !l) || a || (s += \",null\"),\r\n-            c && (s += \",\" + c),\r\n-            l && (s += (c ? \"\" : \",null\") + \",\" + l),\r\n-            s + \")\"\r\n-        );\r\n-      var n, r;\r\n-      r = t.component\r\n-          ? ((c = t.component), (l = e), (i = (s = t).inlineTemplate ? null : oa(s, l, !0)), \"_c(\" + c + \",\" + ea(s, l) + (i ? \",\" + i : \"\") + \")\")\r\n-          : ((!t.plain || (t.pre && e.maybeComponent(t))) && (n = ea(t, e)), (i = t.inlineTemplate ? null : oa(t, e, !0)), \"_c('\" + t.tag + \"'\" + (n ? \",\" + n : \"\") + (i ? \",\" + i : \"\") + \")\");\r\n-      for (var o = 0; o \u003C e.transforms.length; o++) r = e.transforms[o](t, r);\r\n-      return r;\r\n-    }\r\n-    var i, a, s, c, l;\r\n-    return oa(t, e) || \"void 0\";\r\n-  }\r\n-  function Qi(t, e) {\r\n-    t.staticProcessed = !0;\r\n-    var n = e.pre;\r\n-    return t.pre && (e.pre = t.pre), e.staticRenderFns.push(\"with(this){return \" + Xi(t, e) + \"}\"), (e.pre = n), \"_m(\" + (e.staticRenderFns.length - 1) + (t.staticInFor ? \",true\" : \"\") + \")\";\r\n-  }\r\n-  function Yi(t, e) {\r\n-    if (((t.onceProcessed = !0), t.if && !t.ifProcessed)) return Zi(t, e);\r\n-    if (t.staticInFor) {\r\n-      for (var n = \"\", r = t.parent; r; ) {\r\n-        if (r.for) {\r\n-          n = r.key;\r\n-          break;\r\n-        }\r\n-        r = r.parent;\r\n-      }\r\n-      return n ? \"_o(\" + Xi(t, e) + \",\" + e.onceId++ + \",\" + n + \")\" : Xi(t, e);\r\n-    }\r\n-    return Qi(t, e);\r\n-  }\r\n-  function Zi(t, e, n, r) {\r\n-    return (\r\n-        (t.ifProcessed = !0),\r\n-            (function t(e, n, r, o) {\r\n-              if (!e.length) return o || \"_e()\";\r\n-              var i = e.shift();\r\n-              return i.exp ? \"(\" + i.exp + \")?\" + a(i.block) + \":\" + t(e, n, r, o) : \"\" + a(i.block);\r\n-              function a(t) {\r\n-                return (r || (t.once ? Yi : Xi))(t, n);\r\n-              }\r\n-            })(t.ifConditions.slice(), e, n, r)\r\n-    );\r\n-  }\r\n-  function ta(t, e, n, r) {\r\n-    var o = t.for,\r\n-        i = t.alias,\r\n-        a = t.iterator1 ? \",\" + t.iterator1 : \"\",\r\n-        s = t.iterator2 ? \",\" + t.iterator2 : \"\";\r\n-    return (t.forProcessed = !0), (r || \"_l\") + \"((\" + o + \"),function(\" + i + a + s + \"){return \" + (n || Xi)(t, e) + \"})\";\r\n-  }\r\n-  function ea(e, n) {\r\n-    var t = \"{\",\r\n-        r = (function (t, e) {\r\n-          var n = t.directives;\r\n-          if (n) {\r\n-            for (var r, o, i = \"directives:[\", a = !1, s = 0, c = n.length; s \u003C c; s++) {\r\n-              (r = n[s]), (o = !0);\r\n-              var l = e.directives[r.name];\r\n-              l && (o = !!l(t, r, e.warn)),\r\n-              o &&\r\n-              ((a = !0),\r\n-                  (i +=\r\n-                      '{name:\"' +\r\n-                      r.name +\r\n-                      '\",rawName:\"' +\r\n-                      r.rawName +\r\n-                      '\"' +\r\n-                      (r.value ? \",value:(\" + r.value + \"),expression:\" + JSON.stringify(r.value) : \"\") +\r\n-                      (r.arg ? \",arg:\" + (r.isDynamicArg ? r.arg : '\"' + r.arg + '\"') : \"\") +\r\n-                      (r.modifiers ? \",modifiers:\" + JSON.stringify(r.modifiers) : \"\") +\r\n-                      \"},\"));\r\n-            }\r\n-            return a ? i.slice(0, -1) + \"]\" : void 0;\r\n-          }\r\n-        })(e, n);\r\n-    r && (t += r + \",\"), e.key && (t += \"key:\" + e.key + \",\"), e.ref && (t += \"ref:\" + e.ref + \",\"), e.refInFor && (t += \"refInFor:true,\"), e.pre && (t += \"pre:true,\"), e.component && (t += 'tag:\"' + e.tag + '\",');\r\n-    for (var o, i = 0; i \u003C n.dataGenFns.length; i++) t += n.dataGenFns[i](e);\r\n-    return (\r\n-        e.attrs && (t += \"attrs:\" + sa(e.attrs) + \",\"),\r\n-        e.props && (t += \"domProps:\" + sa(e.props) + \",\"),\r\n-        e.events && (t += Wi(e.events, !1) + \",\"),\r\n-        e.nativeEvents && (t += Wi(e.nativeEvents, !0) + \",\"),\r\n-        e.slotTarget && !e.slotScope && (t += \"slot:\" + e.slotTarget + \",\"),\r\n-        e.scopedSlots &&\r\n-        (t +=\r\n-            (function (t, e, n) {\r\n-              var r =\r\n-                  t.for ||\r\n-                  Object.keys(e).some(function (t) {\r\n-                    t = e[t];\r\n-                    return t.slotTargetDynamic || t.if || t.for || na(t);\r\n-                  }),\r\n-                  o = !!t.if;\r\n-              if (!r)\r\n-                for (var i = t.parent; i; ) {\r\n-                  if ((i.slotScope && i.slotScope !== Oi) || i.for) {\r\n-                    r = !0;\r\n-                    break;\r\n-                  }\r\n-                  i.if && (o = !0), (i = i.parent);\r\n-                }\r\n-              t = Object.keys(e)\r\n-              .map(function (t) {\r\n-                return ra(e[t], n);\r\n-              })\r\n-              .join(\",\");\r\n-              return (\r\n-                  \"scopedSlots:_u([\" +\r\n-                  t +\r\n-                  \"]\" +\r\n-                  (r ? \",null,true\" : \"\") +\r\n-                  (!r && o\r\n-                      ? \",null,false,\" +\r\n-                      (function (t) {\r\n-                        for (var e = 5381, n = t.length; n; ) e = (33 * e) ^ t.charCodeAt(--n);\r\n-                        return e >>> 0;\r\n-                      })(t)\r\n-                      : \"\") +\r\n-                  \")\"\r\n-              );\r\n-            })(e, e.scopedSlots, n) + \",\"),\r\n-        e.model && (t += \"model:{value:\" + e.model.value + \",callback:\" + e.model.callback + \",expression:\" + e.model.expression + \"},\"),\r\n-        e.inlineTemplate &&\r\n-        (o = (function () {\r\n-          var t = e.children[0];\r\n-          if (t && 1 === t.type) {\r\n-            t = Ki(t, n.options);\r\n-            return (\r\n-                \"inlineTemplate:{render:function(){\" +\r\n-                t.render +\r\n-                \"},staticRenderFns:[\" +\r\n-                t.staticRenderFns\r\n-                .map(function (t) {\r\n-                  return \"function(){\" + t + \"}\";\r\n-                })\r\n-                .join(\",\") +\r\n-                \"]}\"\r\n-            );\r\n-          }\r\n-        })()) &&\r\n-        (t += o + \",\"),\r\n-            (t = t.replace(\u002F,$\u002F, \"\") + \"}\"),\r\n-        e.dynamicAttrs && (t = \"_b(\" + t + ',\"' + e.tag + '\",' + sa(e.dynamicAttrs) + \")\"),\r\n-        e.wrapData && (t = e.wrapData(t)),\r\n-        e.wrapListeners && (t = e.wrapListeners(t)),\r\n-            t\r\n-    );\r\n-  }\r\n-  function na(t) {\r\n-    return 1 === t.type && (\"slot\" === t.tag || t.children.some(na));\r\n-  }\r\n-  function ra(t, e) {\r\n-    var n = t.attrsMap[\"slot-scope\"];\r\n-    if (t.if && !t.ifProcessed && !n) return Zi(t, e, ra, \"null\");\r\n-    if (t.for && !t.forProcessed) return ta(t, e, ra);\r\n-    var r = t.slotScope === Oi ? \"\" : String(t.slotScope),\r\n-        e = \"function(\" + r + \"){return \" + (\"template\" === t.tag ? (t.if && n ? \"(\" + t.if + \")?\" + (oa(t, e) || \"undefined\") + \":undefined\" : oa(t, e) || \"undefined\") : Xi(t, e)) + \"}\",\r\n-        r = r ? \"\" : \",proxy:true\";\r\n-    return \"{key:\" + (t.slotTarget || '\"default\"') + \",fn:\" + e + r + \"}\";\r\n-  }\r\n-  function oa(t, e, n, r, o) {\r\n-    var i = t.children;\r\n-    if (i.length) {\r\n-      var a = i[0];\r\n-      if (1 === i.length && a.for && \"template\" !== a.tag && \"slot\" !== a.tag) {\r\n-        t = n ? (e.maybeComponent(a) ? \",1\" : \",0\") : \"\";\r\n-        return (r || Xi)(a, e) + t;\r\n-      }\r\n-      var n = n\r\n-          ? (function (t, e) {\r\n-            for (var n = 0, r = 0; r \u003C t.length; r++) {\r\n-              var o = t[r];\r\n-              if (1 === o.type) {\r\n-                if (\r\n-                    ia(o) ||\r\n-                    (o.ifConditions &&\r\n-                        o.ifConditions.some(function (t) {\r\n-                          return ia(t.block);\r\n-                        }))\r\n-                ) {\r\n-                  n = 2;\r\n-                  break;\r\n-                }\r\n-                (e(o) ||\r\n-                    (o.ifConditions &&\r\n-                        o.ifConditions.some(function (t) {\r\n-                          return e(t.block);\r\n-                        }))) &&\r\n-                (n = 1);\r\n-              }\r\n-            }\r\n-            return n;\r\n-          })(i, e.maybeComponent)\r\n-          : 0,\r\n-          s = o || aa;\r\n-      return (\r\n-          \"[\" +\r\n-          i\r\n-          .map(function (t) {\r\n-            return s(t, e);\r\n-          })\r\n-          .join(\",\") +\r\n-          \"]\" +\r\n-          (n ? \",\" + n : \"\")\r\n-      );\r\n-    }\r\n-  }\r\n-  function ia(t) {\r\n-    return void 0 !== t.for || \"template\" === t.tag || \"slot\" === t.tag;\r\n-  }\r\n-  function aa(t, e) {\r\n-    return 1 === t.type ? Xi(t, e) : 3 === t.type && t.isComment ? \"_e(\" + JSON.stringify(t.text) + \")\" : \"_v(\" + (2 === t.type ? t.expression : ca(JSON.stringify(t.text))) + \")\";\r\n-  }\r\n-  function sa(t) {\r\n-    for (var e = \"\", n = \"\", r = 0; r \u003C t.length; r++) {\r\n-      var o = t[r],\r\n-          i = ca(o.value);\r\n-      o.dynamic ? (n += o.name + \",\" + i + \",\") : (e += '\"' + o.name + '\":' + i + \",\");\r\n-    }\r\n-    return (e = \"{\" + e.slice(0, -1) + \"}\"), n ? \"_d(\" + e + \",[\" + n.slice(0, -1) + \"])\" : e;\r\n-  }\r\n-  function ca(t) {\r\n-    return t.replace(\u002F\\u2028\u002Fg, \"\\\\u2028\").replace(\u002F\\u2029\u002Fg, \"\\\\u2029\");\r\n-  }\r\n-  function la(e, n) {\r\n-    try {\r\n-      return new Function(e);\r\n-    } catch (t) {\r\n-      return n.push({ err: t, code: e }), $;\r\n-    }\r\n-  }\r\n-  new RegExp(\r\n-      \"\\\\b\" +\r\n-      \"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\") +\r\n-      \"\\\\b\"\r\n-  );\r\n-  var ua,\r\n-      fa,\r\n-      pa,\r\n-      da,\r\n-      ha,\r\n-      va =\r\n-          ((ua = function (t, e) {\r\n-            var n,\r\n-                r = (function (t, l) {\r\n-                  (Ho = l.warn || hr),\r\n-                      (qo = l.isPreTag || k),\r\n-                      (Jo = l.mustUseProp || k),\r\n-                      (Go = l.getTagNamespace || k),\r\n-                      l.isReservedTag,\r\n-                      (Bo = vr(l.modules, \"transformNode\")),\r\n-                      (Vo = vr(l.modules, \"preTransformNode\")),\r\n-                      (Wo = vr(l.modules, \"postTransformNode\")),\r\n-                      (Uo = l.delimiters);\r\n-                  var u,\r\n-                      f,\r\n-                      p = [],\r\n-                      a = !1 !== l.preserveWhitespace,\r\n-                      s = l.whitespace,\r\n-                      d = !1,\r\n-                      h = !1;\r\n-                  function v(t) {\r\n-                    var e, n;\r\n-                    o(t),\r\n-                    d || t.processed || (t = Si(t, l)),\r\n-                    p.length || t === u || (u.if && (t.elseif || t.else) && ji(u, { exp: t.elseif, block: t })),\r\n-                    f &&\r\n-                    !t.forbidden &&\r\n-                    (t.elseif || t.else\r\n-                        ? ((e = t),\r\n-                        (n = (function (t) {\r\n-                          for (var e = t.length; e--; ) {\r\n-                            if (1 === t[e].type) return t[e];\r\n-                            t.pop();\r\n-                          }\r\n-                        })(f.children)) &&\r\n-                        n.if &&\r\n-                        ji(n, { exp: e.elseif, block: e }))\r\n-                        : (t.slotScope && ((e = t.slotTarget || '\"default\"'), ((f.scopedSlots || (f.scopedSlots = {}))[e] = t)), f.children.push(t), (t.parent = f))),\r\n-                        (t.children = t.children.filter(function (t) {\r\n-                          return !t.slotScope;\r\n-                        })),\r\n-                        o(t),\r\n-                    t.pre && (d = !1),\r\n-                    qo(t.tag) && (h = !1);\r\n-                    for (var r = 0; r \u003C Wo.length; r++) Wo[r](t, l);\r\n-                  }\r\n-                  function o(t) {\r\n-                    if (!h) for (var e; (e = t.children[t.children.length - 1]) && 3 === e.type && \" \" === e.text; ) t.children.pop();\r\n-                  }\r\n-                  return (\r\n-                      (function (o, l) {\r\n-                        for (var t, u, f = [], p = l.expectHTML, d = l.isUnaryTag || k, h = l.canBeLeftOpenTag || k, a = 0; o; ) {\r\n-                          if (((t = o), u && si(u))) {\r\n-                            var r = 0,\r\n-                                i = u.toLowerCase(),\r\n-                                e = ci[i] || (ci[i] = new RegExp(\"([\\\\s\\\\S]*?)(\u003C\u002F\" + i + \"[^>]*>)\", \"i\")),\r\n-                                e = o.replace(e, function (t, e, n) {\r\n-                                  return (\r\n-                                      (r = n.length),\r\n-                                      si(i) || \"noscript\" === i || (e = e.replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, \"$1\").replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, \"$1\")),\r\n-                                      Ro(i, e) && (e = e.slice(1)),\r\n-                                      l.chars && l.chars(e),\r\n-                                          \"\"\r\n-                                  );\r\n-                                });\r\n-                            (a += o.length - e.length), (o = e), g(i, a - r, a);\r\n-                          } else {\r\n-                            var n = o.indexOf(\"\u003C\");\r\n-                            if (0 === n) {\r\n-                              if (ii.test(o)) {\r\n-                                e = o.indexOf(\"--\\x3e\");\r\n-                                if (0 \u003C= e) {\r\n-                                  l.shouldKeepComment && l.comment(o.substring(4, e), a, a + e + 3), y(e + 3);\r\n-                                  continue;\r\n-                                }\r\n-                              }\r\n-                              if (ai.test(o)) {\r\n-                                var s = o.indexOf(\"]>\");\r\n-                                if (0 \u003C= s) {\r\n-                                  y(s + 2);\r\n-                                  continue;\r\n-                                }\r\n-                              }\r\n-                              s = o.match(oi);\r\n-                              if (s) {\r\n-                                y(s[0].length);\r\n-                                continue;\r\n-                              }\r\n-                              s = o.match(ri);\r\n-                              if (s) {\r\n-                                var c = a;\r\n-                                y(s[0].length), g(s[1], c, a);\r\n-                                continue;\r\n-                              }\r\n-                              c = (function () {\r\n-                                var t = o.match(ei);\r\n-                                if (t) {\r\n-                                  var e,\r\n-                                      n,\r\n-                                      r = { tagName: t[1], attrs: [], start: a };\r\n-                                  for (y(t[0].length); !(e = o.match(ni)) && (n = o.match(ti) || o.match(Zo)); ) (n.start = a), y(n[0].length), (n.end = a), r.attrs.push(n);\r\n-                                  if (e) return (r.unarySlash = e[1]), y(e[0].length), (r.end = a), r;\r\n-                                }\r\n-                              })();\r\n-                              if (c) {\r\n-                                (function (t) {\r\n-                                  var e = t.tagName,\r\n-                                      n = t.unarySlash;\r\n-                                  p && (\"p\" === u && Yo(e) && g(u), h(e) && u === e && g(e));\r\n-                                  for (var n = d(e) || !!n, r = t.attrs.length, o = new Array(r), i = 0; i \u003C r; i++) {\r\n-                                    var a = t.attrs[i],\r\n-                                        s = a[3] || a[4] || a[5] || \"\",\r\n-                                        c = \"a\" === e && \"href\" === a[1] ? l.shouldDecodeNewlinesForHref : l.shouldDecodeNewlines;\r\n-                                    o[i] = {\r\n-                                      name: a[1],\r\n-                                      value:\r\n-                                          ((c = c ? fi : ui),\r\n-                                              s.replace(c, function (t) {\r\n-                                                return li[t];\r\n-                                              })),\r\n-                                    };\r\n-                                  }\r\n-                                  n || (f.push({ tag: e, lowerCasedTag: e.toLowerCase(), attrs: o, start: t.start, end: t.end }), (u = e)), l.start && l.start(e, o, n, t.start, t.end);\r\n-                                })(c),\r\n-                                Ro(c.tagName, o) && y(1);\r\n-                                continue;\r\n-                              }\r\n-                            }\r\n-                            var c = void 0,\r\n-                                v = void 0,\r\n-                                m = void 0;\r\n-                            if (0 \u003C= n) {\r\n-                              for (v = o.slice(n); !(ri.test(v) || ei.test(v) || ii.test(v) || ai.test(v) || (m = v.indexOf(\"\u003C\", 1)) \u003C 0); ) (n += m), (v = o.slice(n));\r\n-                              c = o.substring(0, n);\r\n-                            }\r\n-                            n \u003C 0 && (c = o), c && y(c.length), l.chars && c && l.chars(c, a - c.length, a);\r\n-                          }\r\n-                          if (o === t) {\r\n-                            l.chars && l.chars(o);\r\n-                            break;\r\n-                          }\r\n-                        }\r\n-                        function y(t) {\r\n-                          (a += t), (o = o.substring(t));\r\n-                        }\r\n-                        function g(t, e, n) {\r\n-                          var r, o;\r\n-                          if ((null == e && (e = a), null == n && (n = a), t)) for (o = t.toLowerCase(), r = f.length - 1; 0 \u003C= r && f[r].lowerCasedTag !== o; r--);\r\n-                          else r = 0;\r\n-                          if (0 \u003C= r) {\r\n-                            for (var i = f.length - 1; r \u003C= i; i--) l.end && l.end(f[i].tag, e, n);\r\n-                            (f.length = r), (u = r && f[r - 1].tag);\r\n-                          } else \"br\" === o ? l.start && l.start(t, [], !0, e, n) : \"p\" === o && (l.start && l.start(t, [], !1, e, n), l.end && l.end(t, e, n));\r\n-                        }\r\n-                        g();\r\n-                      })(t, {\r\n-                        warn: Ho,\r\n-                        expectHTML: l.expectHTML,\r\n-                        isUnaryTag: l.isUnaryTag,\r\n-                        canBeLeftOpenTag: l.canBeLeftOpenTag,\r\n-                        shouldDecodeNewlines: l.shouldDecodeNewlines,\r\n-                        shouldDecodeNewlinesForHref: l.shouldDecodeNewlinesForHref,\r\n-                        shouldKeepComment: l.comments,\r\n-                        outputSourceRange: l.outputSourceRange,\r\n-                        start: function (t, e, n, r, o) {\r\n-                          var i = (f && f.ns) || Go(t);\r\n-                          J &&\r\n-                          \"svg\" === i &&\r\n-                          (e = (function (t) {\r\n-                            for (var e = [], n = 0; n \u003C t.length; n++) {\r\n-                              var r = t[n];\r\n-                              Mi.test(r.name) || ((r.name = r.name.replace(Pi, \"\")), e.push(r));\r\n-                            }\r\n-                            return e;\r\n-                          })(e));\r\n-                          var a = Ai(t, e, f);\r\n-                          i && (a.ns = i), (\"style\" !== a.tag && (\"script\" !== a.tag || (a.attrsMap.type && \"text\u002Fjavascript\" !== a.attrsMap.type))) || et() || (a.forbidden = !0);\r\n-                          for (var s, c = 0; c \u003C Vo.length; c++) a = Vo[c](a, l) || a;\r\n-                          d || (null != xr((s = a), \"v-pre\") && (s.pre = !0), a.pre && (d = !0)),\r\n-                          qo(a.tag) && (h = !0),\r\n-                              d\r\n-                                  ? (function (t) {\r\n-                                    var e = t.attrsList,\r\n-                                        n = e.length;\r\n-                                    if (n)\r\n-                                      for (var r = (t.attrs = new Array(n)), o = 0; o \u003C n; o++)\r\n-                                        (r[o] = { name: e[o].name, value: JSON.stringify(e[o].value) }), null != e[o].start && ((r[o].start = e[o].start), (r[o].end = e[o].end));\r\n-                                    else t.pre || (t.plain = !0);\r\n-                                  })(a)\r\n-                                  : a.processed ||\r\n-                                  (Ti(a),\r\n-                                      (s = xr((i = a), \"v-if\")) ? ((i.if = s), ji(i, { exp: s, block: i })) : (null != xr(i, \"v-else\") && (i.else = !0), (s = xr(i, \"v-else-if\")) && (i.elseif = s)),\r\n-                                  null != xr((s = a), \"v-once\") && (s.once = !0)),\r\n-                              (u = u || a),\r\n-                              n ? v(a) : ((f = a), p.push(a));\r\n-                        },\r\n-                        end: function (t, e, n) {\r\n-                          var r = p[p.length - 1];\r\n-                          --p.length, (f = p[p.length - 1]), v(r);\r\n-                        },\r\n-                        chars: function (t, e, n) {\r\n-                          var r, o, i;\r\n-                          !f ||\r\n-                          (J && \"textarea\" === f.tag && f.attrsMap.placeholder === t) ||\r\n-                          ((i = f.children),\r\n-                          (t = h || t.trim() ? (\"script\" === f.tag || \"style\" === f.tag ? t : Ci(t)) : i.length ? (s ? (\"condense\" === s && $i.test(t) ? \"\" : \" \") : a ? \" \" : \"\") : \"\") &&\r\n-                          (h || \"condense\" !== s || (t = t.replace(ki, \" \")),\r\n-                              !d &&\r\n-                              \" \" !== t &&\r\n-                              (r = (function (t) {\r\n-                                var e = Uo ? Qo(Uo) : Ko;\r\n-                                if (e.test(t)) {\r\n-                                  for (var n, r, o, i = [], a = [], s = (e.lastIndex = 0); (n = e.exec(t)); ) {\r\n-                                    (r = n.index) > s && (a.push((o = t.slice(s, r))), i.push(JSON.stringify(o)));\r\n-                                    var c = dr(n[1].trim());\r\n-                                    i.push(\"_s(\" + c + \")\"), a.push({ \"@binding\": c }), (s = r + n[0].length);\r\n-                                  }\r\n-                                  return s \u003C t.length && (a.push((o = t.slice(s))), i.push(JSON.stringify(o))), { expression: i.join(\"+\"), tokens: a };\r\n-                                }\r\n-                              })(t))\r\n-                                  ? (o = { type: 2, expression: r.expression, tokens: r.tokens, text: t })\r\n-                                  : (\" \" === t && i.length && \" \" === i[i.length - 1].text) || (o = { type: 3, text: t }),\r\n-                          o && i.push(o)));\r\n-                        },\r\n-                        comment: function (t, e, n) {\r\n-                          f && ((t = { type: 3, text: t, isComment: !0 }), f.children.push(t));\r\n-                        },\r\n-                      }),\r\n-                          u\r\n-                  );\r\n-                })(t.trim(), e);\r\n-            !1 !== e.optimize &&\r\n-            ((n = e),\r\n-            (t = r) &&\r\n-            ((Li = Di(n.staticKeys || \"\")),\r\n-                (Ni = n.isReservedTag || k),\r\n-                (function t(e) {\r\n-                  var n;\r\n-                  if (\r\n-                      ((e.static =\r\n-                          2 !== (n = e).type &&\r\n-                          (3 === n.type ||\r\n-                              !(\r\n-                                  !n.pre &&\r\n-                                  (n.hasBindings ||\r\n-                                      n.if ||\r\n-                                      n.for ||\r\n-                                      u(n.tag) ||\r\n-                                      !Ni(n.tag) ||\r\n-                                      (function (t) {\r\n-                                        for (; t.parent; ) {\r\n-                                          if (\"template\" !== (t = t.parent).tag) return;\r\n-                                          if (t.for) return 1;\r\n-                                        }\r\n-                                      })(n) ||\r\n-                                      !Object.keys(n).every(Li))\r\n-                              ))),\r\n-                      1 === e.type && (Ni(e.tag) || \"slot\" === e.tag || null != e.attrsMap[\"inline-template\"]))\r\n-                  ) {\r\n-                    for (var r = 0, o = e.children.length; r \u003C o; r++) {\r\n-                      var i = e.children[r];\r\n-                      t(i), i.static || (e.static = !1);\r\n-                    }\r\n-                    if (e.ifConditions)\r\n-                      for (var a = 1, s = e.ifConditions.length; a \u003C s; a++) {\r\n-                        var c = e.ifConditions[a].block;\r\n-                        t(c), c.static || (e.static = !1);\r\n-                      }\r\n-                  }\r\n-                })(t),\r\n-                (function t(e, n) {\r\n-                  if (1 === e.type) {\r\n-                    if (((e.static || e.once) && (e.staticInFor = n), e.static && e.children.length && (1 !== e.children.length || 3 !== e.children[0].type))) return (e.staticRoot = !0), 0;\r\n-                    if (((e.staticRoot = !1), e.children)) for (var r = 0, o = e.children.length; r \u003C o; r++) t(e.children[r], n || !!e.for);\r\n-                    if (e.ifConditions) for (var i = 1, a = e.ifConditions.length; i \u003C a; i++) t(e.ifConditions[i].block, n);\r\n-                  }\r\n-                })(t, !1)));\r\n-            e = Ki(r, e);\r\n-            return { ast: r, render: e.render, staticRenderFns: e.staticRenderFns };\r\n-          }),\r\n-              (ha = Gt),\r\n-              (pa = ma),\r\n-              (da = Object.create(null)),\r\n-              function (t, e, n) {\r\n-                (e = w({}, e)).warn, delete e.warn;\r\n-                var r = e.delimiters ? String(e.delimiters) + t : t;\r\n-                if (da[r]) return da[r];\r\n-                var t = pa(t, e),\r\n-                    e = {},\r\n-                    o = [];\r\n-                return (\r\n-                    (e.render = la(t.render, o)),\r\n-                        (e.staticRenderFns = t.staticRenderFns.map(function (t) {\r\n-                          return la(t, o);\r\n-                        })),\r\n-                        (da[r] = e)\r\n-                );\r\n-              });\r\n-  function ma(t, e) {\r\n-    var n = Object.create(ha),\r\n-        r = [],\r\n-        o = [];\r\n-    if (e)\r\n-      for (var i in (e.modules && (n.modules = (ha.modules || []).concat(e.modules)), e.directives && (n.directives = w(Object.create(ha.directives || null), e.directives)), e)) \"modules\" !== i && \"directives\" !== i && (n[i] = e[i]);\r\n-    n.warn = function (t, e, n) {\r\n-      (n ? o : r).push(t);\r\n-    };\r\n-    t = ua(t.trim(), n);\r\n-    return (t.errors = r), (t.tips = o), t;\r\n-  }\r\n-  function ya(t) {\r\n-    return ((fa = fa || document.createElement(\"div\")).innerHTML = t ? '\u003Ca href=\"\\n\"\u002F>' : '\u003Cdiv a=\"\\n\"\u002F>'), 0 \u003C fa.innerHTML.indexOf(\"&#10;\");\r\n-  }\r\n-  var ga = !!B && ya(!1),\r\n-      _a = !!B && ya(!0),\r\n-      ba = t(function (t) {\r\n-        t = Jn(t);\r\n-        return t && t.innerHTML;\r\n-      }),\r\n-      wa = _n.prototype.$mount;\r\n-  return (\r\n-      (_n.prototype.$mount = function (t, e) {\r\n-        if ((t = t && Jn(t)) === document.body || t === document.documentElement) return this;\r\n-        var n = this.$options;\r\n-        if (!n.render) {\r\n-          var r,\r\n-              o = n.template;\r\n-          if (o)\r\n-            if (\"string\" == typeof o) \"#\" === o.charAt(0) && (o = ba(o));\r\n-            else {\r\n-              if (!o.nodeType) return this;\r\n-              o = o.innerHTML;\r\n-            }\r\n-          else\r\n-            t &&\r\n-            (o = (function (t) {\r\n-              if (t.outerHTML) return t.outerHTML;\r\n-              var e = document.createElement(\"div\");\r\n-              return e.appendChild(t.cloneNode(!0)), e.innerHTML;\r\n-            })(t));\r\n-          o &&\r\n-          ((o = (r = va(o, { outputSourceRange: !1, shouldDecodeNewlines: ga, shouldDecodeNewlinesForHref: _a, delimiters: n.delimiters, comments: n.comments }, this)).render),\r\n-              (r = r.staticRenderFns),\r\n-              (n.render = o),\r\n-              (n.staticRenderFns = r));\r\n-        }\r\n-        return wa.call(this, t, e);\r\n-      }),\r\n-          (_n.compile = va),\r\n-          _n\r\n-  );\r\n-}),\r\n-    (function (t, e) {\r\n-      \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : ((t = t || self).Vuex = e());\r\n-    })(this, function () {\r\n-      \"use strict\";\r\n-      var l = \"undefined\" != typeof window && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-      function s(e, n) {\r\n-        Object.keys(e).forEach(function (t) {\r\n-          return n(e[t], t);\r\n-        });\r\n-      }\r\n-      function u(t, e) {\r\n-        if (!t) throw new Error(\"[vuex] \" + e);\r\n-      }\r\n-      function i(t, e) {\r\n-        (this.runtime = e), (this._children = Object.create(null)), (t = (this._rawModule = t).state), (this.state = (\"function\" == typeof t ? t() : t) || {});\r\n-      }\r\n-      var t = { namespaced: { configurable: !0 } };\r\n-      (t.namespaced.get = function () {\r\n-        return !!this._rawModule.namespaced;\r\n-      }),\r\n-          (i.prototype.addChild = function (t, e) {\r\n-            this._children[t] = e;\r\n-          }),\r\n-          (i.prototype.removeChild = function (t) {\r\n-            delete this._children[t];\r\n-          }),\r\n-          (i.prototype.getChild = function (t) {\r\n-            return this._children[t];\r\n-          }),\r\n-          (i.prototype.update = function (t) {\r\n-            (this._rawModule.namespaced = t.namespaced), t.actions && (this._rawModule.actions = t.actions), t.mutations && (this._rawModule.mutations = t.mutations), t.getters && (this._rawModule.getters = t.getters);\r\n-          }),\r\n-          (i.prototype.forEachChild = function (t) {\r\n-            s(this._children, t);\r\n-          }),\r\n-          (i.prototype.forEachGetter = function (t) {\r\n-            this._rawModule.getters && s(this._rawModule.getters, t);\r\n-          }),\r\n-          (i.prototype.forEachAction = function (t) {\r\n-            this._rawModule.actions && s(this._rawModule.actions, t);\r\n-          }),\r\n-          (i.prototype.forEachMutation = function (t) {\r\n-            this._rawModule.mutations && s(this._rawModule.mutations, t);\r\n-          }),\r\n-          Object.defineProperties(i.prototype, t);\r\n-      function f(t) {\r\n-        this.register([], t, !1);\r\n-      }\r\n-      (f.prototype.get = function (t) {\r\n-        return t.reduce(function (t, e) {\r\n-          return t.getChild(e);\r\n-        }, this.root);\r\n-      }),\r\n-          (f.prototype.getNamespace = function (t) {\r\n-            var n = this.root;\r\n-            return t.reduce(function (t, e) {\r\n-              return t + ((n = n.getChild(e)).namespaced ? e + \"\u002F\" : \"\");\r\n-            }, \"\");\r\n-          }),\r\n-          (f.prototype.update = function (t) {\r\n-            !(function t(e, n, r) {\r\n-              c(e, r);\r\n-              n.update(r);\r\n-              if (r.modules)\r\n-                for (var o in r.modules) {\r\n-                  if (!n.getChild(o)) return void console.warn(\"[vuex] trying to add a new module '\" + o + \"' on hot reloading, manual reload is needed\");\r\n-                  t(e.concat(o), n.getChild(o), r.modules[o]);\r\n-                }\r\n-            })([], this.root, t);\r\n-          }),\r\n-          (f.prototype.register = function (n, t, r) {\r\n-            var o = this;\r\n-            void 0 === r && (r = !0), c(n, t);\r\n-            var e = new i(t, r);\r\n-            0 === n.length ? (this.root = e) : this.get(n.slice(0, -1)).addChild(n[n.length - 1], e),\r\n-            t.modules &&\r\n-            s(t.modules, function (t, e) {\r\n-              o.register(n.concat(e), t, r);\r\n-            });\r\n-          }),\r\n-          (f.prototype.unregister = function (t) {\r\n-            var e = this.get(t.slice(0, -1)),\r\n-                t = t[t.length - 1];\r\n-            e.getChild(t).runtime && e.removeChild(t);\r\n-          });\r\n-      var h,\r\n-          e = {\r\n-            assert: function (t) {\r\n-              return \"function\" == typeof t;\r\n-            },\r\n-            expected: \"function\",\r\n-          },\r\n-          a = {\r\n-            getters: e,\r\n-            mutations: e,\r\n-            actions: {\r\n-              assert: function (t) {\r\n-                return \"function\" == typeof t || (\"object\" == typeof t && \"function\" == typeof t.handler);\r\n-              },\r\n-              expected: 'function or object with \"handler\" function',\r\n-            },\r\n-          };\r\n-      function c(o, t) {\r\n-        Object.keys(a).forEach(function (n) {\r\n-          var r;\r\n-          t[n] &&\r\n-          ((r = a[n]),\r\n-              s(t[n], function (t, e) {\r\n-                u(\r\n-                    r.assert(t),\r\n-                    (function (t, e, n, r, o) {\r\n-                      n = e + \" should be \" + o + ' but \"' + e + \".\" + n + '\"';\r\n-                      0 \u003C t.length && (n += ' in module \"' + t.join(\".\") + '\"');\r\n-                      return (n += \" is \" + JSON.stringify(r) + \".\");\r\n-                    })(o, n, e, t, r.expected)\r\n-                );\r\n-              }));\r\n-        });\r\n-      }\r\n-      (t = function t(e) {\r\n-        var n = this;\r\n-        void 0 === e && (e = {}),\r\n-        !h && \"undefined\" != typeof window && window.Vue && d(window.Vue),\r\n-            u(h, \"must call Vue.use(Vuex) before creating a store instance.\"),\r\n-            u(\"undefined\" != typeof Promise, \"vuex requires a Promise polyfill in this browser.\"),\r\n-            u(this instanceof t, \"store must be called with the new operator.\");\r\n-        var r = e.plugins;\r\n-        void 0 === r && (r = []);\r\n-        var o = e.strict;\r\n-        void 0 === o && (o = !1),\r\n-            (this._committing = !1),\r\n-            (this._actions = Object.create(null)),\r\n-            (this._actionSubscribers = []),\r\n-            (this._mutations = Object.create(null)),\r\n-            (this._wrappedGetters = Object.create(null)),\r\n-            (this._modules = new f(e)),\r\n-            (this._modulesNamespaceMap = Object.create(null)),\r\n-            (this._subscribers = []),\r\n-            (this._watcherVM = new h());\r\n-        var i = this,\r\n-            a = this.dispatch,\r\n-            s = this.commit;\r\n-        (this.dispatch = function (t, e) {\r\n-          return a.call(i, t, e);\r\n-        }),\r\n-            (this.commit = function (t, e, n) {\r\n-              return s.call(i, t, e, n);\r\n-            }),\r\n-            (this.strict = o);\r\n-        var c,\r\n-            o = this._modules.root.state;\r\n-        v(this, o, [], this._modules.root),\r\n-            p(this, o),\r\n-            r.forEach(function (t) {\r\n-              return t(n);\r\n-            }),\r\n-        (void 0 !== e.devtools ? e : h.config).devtools &&\r\n-        ((c = this),\r\n-        l &&\r\n-        ((c._devtoolHook = l).emit(\"vuex:init\", c),\r\n-            l.on(\"vuex:travel-to-state\", function (t) {\r\n-              c.replaceState(t);\r\n-            }),\r\n-            c.subscribe(function (t, e) {\r\n-              l.emit(\"vuex:mutation\", t, e);\r\n-            })));\r\n-      }),\r\n-          (e = { state: { configurable: !0 } });\r\n-      function n(e, n) {\r\n-        return (\r\n-            n.indexOf(e) \u003C 0 && n.push(e),\r\n-                function () {\r\n-                  var t = n.indexOf(e);\r\n-                  -1 \u003C t && n.splice(t, 1);\r\n-                }\r\n-        );\r\n-      }\r\n-      function r(t, e) {\r\n-        (t._actions = Object.create(null)), (t._mutations = Object.create(null)), (t._wrappedGetters = Object.create(null)), (t._modulesNamespaceMap = Object.create(null));\r\n-        var n = t.state;\r\n-        v(t, n, [], t._modules.root, !0), p(t, n, e);\r\n-      }\r\n-      function p(n, t, e) {\r\n-        var r = n._vm;\r\n-        n.getters = {};\r\n-        var o = n._wrappedGetters,\r\n-            i = {};\r\n-        s(o, function (t, e) {\r\n-          (i[e] = function () {\r\n-            return t(n);\r\n-          }),\r\n-              Object.defineProperty(n.getters, e, {\r\n-                get: function () {\r\n-                  return n._vm[e];\r\n-                },\r\n-                enumerable: !0,\r\n-              });\r\n-        });\r\n-        var a,\r\n-            o = h.config.silent;\r\n-        (h.config.silent = !0),\r\n-            (n._vm = new h({ data: { $$state: t }, computed: i })),\r\n-            (h.config.silent = o),\r\n-        n.strict &&\r\n-        (a = n)._vm.$watch(\r\n-            function () {\r\n-              return this._data.$$state;\r\n-            },\r\n-            function () {\r\n-              u(a._committing, \"do not mutate vuex store state outside mutation handlers.\");\r\n-            },\r\n-            { deep: !0, sync: !0 }\r\n-        ),\r\n-        r &&\r\n-        (e &&\r\n-        n._withCommit(function () {\r\n-          r._data.$$state = null;\r\n-        }),\r\n-            h.nextTick(function () {\r\n-              return r.$destroy();\r\n-            }));\r\n-      }\r\n-      function v(i, n, r, t, o) {\r\n-        var e,\r\n-            a,\r\n-            s = !r.length,\r\n-            c = i._modules.getNamespace(r);\r\n-        t.namespaced && (i._modulesNamespaceMap[c] = t),\r\n-        s ||\r\n-        o ||\r\n-        ((e = m(n, r.slice(0, -1))),\r\n-            (a = r[r.length - 1]),\r\n-            i._withCommit(function () {\r\n-              h.set(e, a, t.state);\r\n-            }));\r\n-        var l,\r\n-            u,\r\n-            f,\r\n-            p,\r\n-            d = (t.context =\r\n-                ((l = i),\r\n-                    (f = r),\r\n-                    (s = {\r\n-                      dispatch: (p = \"\" === (u = c))\r\n-                          ? l.dispatch\r\n-                          : function (t, e, n) {\r\n-                            var r = y(t, e, n),\r\n-                                t = r.payload,\r\n-                                e = r.options,\r\n-                                n = r.type;\r\n-                            if ((e && e.root) || ((n = u + n), l._actions[n])) return l.dispatch(n, t);\r\n-                            console.error(\"[vuex] unknown local action type: \" + r.type + \", global type: \" + n);\r\n-                          },\r\n-                      commit: p\r\n-                          ? l.commit\r\n-                          : function (t, e, n) {\r\n-                            var r = y(t, e, n),\r\n-                                t = r.payload,\r\n-                                e = r.options,\r\n-                                n = r.type;\r\n-                            (e && e.root) || ((n = u + n), l._mutations[n]) ? l.commit(n, t, e) : console.error(\"[vuex] unknown local mutation type: \" + r.type + \", global type: \" + n);\r\n-                          },\r\n-                    }),\r\n-                    Object.defineProperties(s, {\r\n-                      getters: {\r\n-                        get: p\r\n-                            ? function () {\r\n-                              return l.getters;\r\n-                            }\r\n-                            : function () {\r\n-                              return (\r\n-                                  (n = l),\r\n-                                      (o = {}),\r\n-                                      (i = (r = u).length),\r\n-                                      Object.keys(n.getters).forEach(function (t) {\r\n-                                        var e;\r\n-                                        t.slice(0, i) === r &&\r\n-                                        ((e = t.slice(i)),\r\n-                                            Object.defineProperty(o, e, {\r\n-                                              get: function () {\r\n-                                                return n.getters[t];\r\n-                                              },\r\n-                                              enumerable: !0,\r\n-                                            }));\r\n-                                      }),\r\n-                                      o\r\n-                              );\r\n-                              var n, r, o, i;\r\n-                            },\r\n-                      },\r\n-                      state: {\r\n-                        get: function () {\r\n-                          return m(l.state, f);\r\n-                        },\r\n-                      },\r\n-                    }),\r\n-                    s));\r\n-        t.forEachMutation(function (t, e) {\r\n-          var n, r, o;\r\n-          (e = c + e),\r\n-              (r = t),\r\n-              (o = d),\r\n-              ((n = i)._mutations[e] || (n._mutations[e] = [])).push(function (t) {\r\n-                r.call(n, o.state, t);\r\n-              });\r\n-        }),\r\n-            t.forEachAction(function (t, e) {\r\n-              var n,\r\n-                  r,\r\n-                  o,\r\n-                  e = t.root ? e : c + e,\r\n-                  t = t.handler || t;\r\n-              (e = e),\r\n-                  (r = t),\r\n-                  (o = d),\r\n-                  ((n = i)._actions[e] || (n._actions[e] = [])).push(function (t, e) {\r\n-                    t = r.call(n, { dispatch: o.dispatch, commit: o.commit, getters: o.getters, state: o.state, rootGetters: n.getters, rootState: n.state }, t, e);\r\n-                    return (\r\n-                        ((e = t) && \"function\" == typeof e.then) || (t = Promise.resolve(t)),\r\n-                            n._devtoolHook\r\n-                                ? t.catch(function (t) {\r\n-                                  throw (n._devtoolHook.emit(\"vuex:error\", t), t);\r\n-                                })\r\n-                                : t\r\n-                    );\r\n-                  });\r\n-            }),\r\n-            t.forEachGetter(function (t, e) {\r\n-              !(function (t, e, n, r) {\r\n-                if (t._wrappedGetters[e]) return console.error(\"[vuex] duplicate getter key: \" + e);\r\n-                t._wrappedGetters[e] = function (t) {\r\n-                  return n(r.state, r.getters, t.state, t.getters);\r\n-                };\r\n-              })(i, c + e, t, d);\r\n-            }),\r\n-            t.forEachChild(function (t, e) {\r\n-              v(i, n, r.concat(e), t, o);\r\n-            });\r\n-      }\r\n-      function m(t, e) {\r\n-        return e.length\r\n-            ? e.reduce(function (t, e) {\r\n-              return t[e];\r\n-            }, t)\r\n-            : t;\r\n-      }\r\n-      function y(t, e, n) {\r\n-        var r;\r\n-        return null !== (r = t) && \"object\" == typeof r && t.type && ((n = e), (t = (e = t).type)), u(\"string\" == typeof t, \"expects string as the type, but found \" + typeof t + \".\"), { type: t, payload: e, options: n };\r\n-      }\r\n-      function d(t) {\r\n-        var e;\r\n-        function n() {\r\n-          var t = this.$options;\r\n-          t.store ? (this.$store = \"function\" == typeof t.store ? t.store() : t.store) : t.parent && t.parent.$store && (this.$store = t.parent.$store);\r\n-        }\r\n-        h && t === h\r\n-            ? console.error(\"[vuex] already installed. Vue.use(Vuex) should be called only once.\")\r\n-            : ((t = h = t),\r\n-                2 \u003C= Number(t.version.split(\".\")[0])\r\n-                    ? t.mixin({ beforeCreate: n })\r\n-                    : ((e = t.prototype._init),\r\n-                        (t.prototype._init = function (t) {\r\n-                          void 0 === t && (t = {}), (t.init = t.init ? [n].concat(t.init) : n), e.call(this, t);\r\n-                        })));\r\n-      }\r\n-      (e.state.get = function () {\r\n-        return this._vm._data.$$state;\r\n-      }),\r\n-          (e.state.set = function (t) {\r\n-            u(!1, \"use store.replaceState() to explicit replace store state.\");\r\n-          }),\r\n-          (t.prototype.commit = function (t, e, n) {\r\n-            var r = this,\r\n-                e = y(t, e, n),\r\n-                n = e.type,\r\n-                o = e.payload,\r\n-                e = e.options,\r\n-                i = { type: n, payload: o },\r\n-                a = this._mutations[n];\r\n-            a\r\n-                ? (this._withCommit(function () {\r\n-                  a.forEach(function (t) {\r\n-                    t(o);\r\n-                  });\r\n-                }),\r\n-                    this._subscribers.forEach(function (t) {\r\n-                      return t(i, r.state);\r\n-                    }),\r\n-                e && e.silent && console.warn(\"[vuex] mutation type: \" + n + \". Silent option has been removed. Use the filter functionality in the vue-devtools\"))\r\n-                : console.error(\"[vuex] unknown mutation type: \" + n);\r\n-          }),\r\n-          (t.prototype.dispatch = function (t, e) {\r\n-            var n = this,\r\n-                t = y(t, e),\r\n-                e = t.type,\r\n-                r = t.payload,\r\n-                o = { type: e, payload: r },\r\n-                t = this._actions[e];\r\n-            if (t) {\r\n-              try {\r\n-                this._actionSubscribers\r\n-                .filter(function (t) {\r\n-                  return t.before;\r\n-                })\r\n-                .forEach(function (t) {\r\n-                  return t.before(o, n.state);\r\n-                });\r\n-              } catch (t) {\r\n-                console.warn(\"[vuex] error in before action subscribers: \"), console.error(t);\r\n-              }\r\n-              return (1 \u003C t.length\r\n-                      ? Promise.all(\r\n-                          t.map(function (t) {\r\n-                            return t(r);\r\n-                          })\r\n-                      )\r\n-                      : t[0](r)\r\n-              ).then(function (t) {\r\n-                try {\r\n-                  n._actionSubscribers\r\n-                  .filter(function (t) {\r\n-                    return t.after;\r\n-                  })\r\n-                  .forEach(function (t) {\r\n-                    return t.after(o, n.state);\r\n-                  });\r\n-                } catch (t) {\r\n-                  console.warn(\"[vuex] error in after action subscribers: \"), console.error(t);\r\n-                }\r\n-                return t;\r\n-              });\r\n-            }\r\n-            console.error(\"[vuex] unknown action type: \" + e);\r\n-          }),\r\n-          (t.prototype.subscribe = function (t) {\r\n-            return n(t, this._subscribers);\r\n-          }),\r\n-          (t.prototype.subscribeAction = function (t) {\r\n-            return n(\"function\" == typeof t ? { before: t } : t, this._actionSubscribers);\r\n-          }),\r\n-          (t.prototype.watch = function (t, e, n) {\r\n-            var r = this;\r\n-            return (\r\n-                u(\"function\" == typeof t, \"store.watch only accepts a function.\"),\r\n-                    this._watcherVM.$watch(\r\n-                        function () {\r\n-                          return t(r.state, r.getters);\r\n-                        },\r\n-                        e,\r\n-                        n\r\n-                    )\r\n-            );\r\n-          }),\r\n-          (t.prototype.replaceState = function (t) {\r\n-            var e = this;\r\n-            this._withCommit(function () {\r\n-              e._vm._data.$$state = t;\r\n-            });\r\n-          }),\r\n-          (t.prototype.registerModule = function (t, e, n) {\r\n-            void 0 === n && (n = {}),\r\n-            \"string\" == typeof t && (t = [t]),\r\n-                u(Array.isArray(t), \"module path must be a string or an Array.\"),\r\n-                u(0 \u003C t.length, \"cannot register the root module by using registerModule.\"),\r\n-                this._modules.register(t, e),\r\n-                v(this, this.state, t, this._modules.get(t), n.preserveState),\r\n-                p(this, this.state);\r\n-          }),\r\n-          (t.prototype.unregisterModule = function (e) {\r\n-            var n = this;\r\n-            \"string\" == typeof e && (e = [e]),\r\n-                u(Array.isArray(e), \"module path must be a string or an Array.\"),\r\n-                this._modules.unregister(e),\r\n-                this._withCommit(function () {\r\n-                  var t = m(n.state, e.slice(0, -1));\r\n-                  h.delete(t, e[e.length - 1]);\r\n-                }),\r\n-                r(this);\r\n-          }),\r\n-          (t.prototype.hotUpdate = function (t) {\r\n-            this._modules.update(t), r(this, !0);\r\n-          }),\r\n-          (t.prototype._withCommit = function (t) {\r\n-            var e = this._committing;\r\n-            (this._committing = !0), t(), (this._committing = e);\r\n-          }),\r\n-          Object.defineProperties(t.prototype, e);\r\n-      var o = x(function (o, t) {\r\n-            var n = {};\r\n-            return (\r\n-                w(t).forEach(function (t) {\r\n-                  var e = t.key,\r\n-                      r = t.val;\r\n-                  (n[e] = function () {\r\n-                    var t = this.$store.state,\r\n-                        e = this.$store.getters;\r\n-                    if (o) {\r\n-                      var n = $(this.$store, \"mapState\", o);\r\n-                      if (!n) return;\r\n-                      (t = n.context.state), (e = n.context.getters);\r\n-                    }\r\n-                    return \"function\" == typeof r ? r.call(this, t, e) : t[r];\r\n-                  }),\r\n-                      (n[e].vuex = !0);\r\n-                }),\r\n-                    n\r\n-            );\r\n-          }),\r\n-          g = x(function (i, t) {\r\n-            var n = {};\r\n-            return (\r\n-                w(t).forEach(function (t) {\r\n-                  var e = t.key,\r\n-                      o = t.val;\r\n-                  n[e] = function () {\r\n-                    for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\r\n-                    var n = this.$store.commit;\r\n-                    if (i) {\r\n-                      var r = $(this.$store, \"mapMutations\", i);\r\n-                      if (!r) return;\r\n-                      n = r.context.commit;\r\n-                    }\r\n-                    return \"function\" == typeof o ? o.apply(this, [n].concat(t)) : n.apply(this.$store, [o].concat(t));\r\n-                  };\r\n-                }),\r\n-                    n\r\n-            );\r\n-          }),\r\n-          _ = x(function (r, t) {\r\n-            var o = {};\r\n-            return (\r\n-                w(t).forEach(function (t) {\r\n-                  var e = t.key,\r\n-                      n = t.val,\r\n-                      n = r + n;\r\n-                  (o[e] = function () {\r\n-                    if (!r || $(this.$store, \"mapGetters\", r)) {\r\n-                      if (n in this.$store.getters) return this.$store.getters[n];\r\n-                      console.error(\"[vuex] unknown getter: \" + n);\r\n-                    }\r\n-                  }),\r\n-                      (o[e].vuex = !0);\r\n-                }),\r\n-                    o\r\n-            );\r\n-          }),\r\n-          b = x(function (i, t) {\r\n-            var n = {};\r\n-            return (\r\n-                w(t).forEach(function (t) {\r\n-                  var e = t.key,\r\n-                      o = t.val;\r\n-                  n[e] = function () {\r\n-                    for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\r\n-                    var n = this.$store.dispatch;\r\n-                    if (i) {\r\n-                      var r = $(this.$store, \"mapActions\", i);\r\n-                      if (!r) return;\r\n-                      n = r.context.dispatch;\r\n-                    }\r\n-                    return \"function\" == typeof o ? o.apply(this, [n].concat(t)) : n.apply(this.$store, [o].concat(t));\r\n-                  };\r\n-                }),\r\n-                    n\r\n-            );\r\n-          });\r\n-      function w(e) {\r\n-        return Array.isArray(e)\r\n-            ? e.map(function (t) {\r\n-              return { key: t, val: t };\r\n-            })\r\n-            : Object.keys(e).map(function (t) {\r\n-              return { key: t, val: e[t] };\r\n-            });\r\n-      }\r\n-      function x(n) {\r\n-        return function (t, e) {\r\n-          return \"string\" != typeof t ? ((e = t), (t = \"\")) : \"\u002F\" !== t.charAt(t.length - 1) && (t += \"\u002F\"), n(t, e);\r\n-        };\r\n-      }\r\n-      function $(t, e, n) {\r\n-        t = t._modulesNamespaceMap[n];\r\n-        return t || console.error(\"[vuex] module namespace not found in \" + e + \"(): \" + n), t;\r\n-      }\r\n-      return {\r\n-        Store: t,\r\n-        install: d,\r\n-        version: \"3.1.0\",\r\n-        mapState: o,\r\n-        mapMutations: g,\r\n-        mapGetters: _,\r\n-        mapActions: b,\r\n-        createNamespacedHelpers: function (t) {\r\n-          return { mapState: o.bind(null, t), mapGetters: _.bind(null, t), mapMutations: g.bind(null, t), mapActions: b.bind(null, t) };\r\n-        },\r\n-      };\r\n-    }),\r\n-    (function (t, e) {\r\n-      \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : (t.VueResource = e());\r\n-    })(this, function () {\r\n-      \"use strict\";\r\n-      function a(t) {\r\n-        (this.state = 2), (this.value = void 0), (this.deferred = []);\r\n-        var e = this;\r\n-        try {\r\n-          t(\r\n-              function (t) {\r\n-                e.resolve(t);\r\n-              },\r\n-              function (t) {\r\n-                e.reject(t);\r\n-              }\r\n-          );\r\n-        } catch (t) {\r\n-          e.reject(t);\r\n-        }\r\n-      }\r\n-      (a.reject = function (n) {\r\n-        return new a(function (t, e) {\r\n-          e(n);\r\n-        });\r\n-      }),\r\n-          (a.resolve = function (n) {\r\n-            return new a(function (t, e) {\r\n-              t(n);\r\n-            });\r\n-          }),\r\n-          (a.all = function (i) {\r\n-            return new a(function (n, t) {\r\n-              var r = 0,\r\n-                  o = [];\r\n-              0 === i.length && n(o);\r\n-              for (var e = 0; e \u003C i.length; e += 1)\r\n-                a.resolve(i[e]).then(\r\n-                    (function (e) {\r\n-                      return function (t) {\r\n-                        (o[e] = t), (r += 1) === i.length && n(o);\r\n-                      };\r\n-                    })(e),\r\n-                    t\r\n-                );\r\n-            });\r\n-          }),\r\n-          (a.race = function (r) {\r\n-            return new a(function (t, e) {\r\n-              for (var n = 0; n \u003C r.length; n += 1) a.resolve(r[n]).then(t, e);\r\n-            });\r\n-          });\r\n-      var t = a.prototype;\r\n-      function u(t, e) {\r\n-        t instanceof Promise ? (this.promise = t) : (this.promise = new Promise(t.bind(e))), (this.context = e);\r\n-      }\r\n-      (t.resolve = function (t) {\r\n-        var e = this;\r\n-        if (2 === e.state) {\r\n-          if (t === e) throw new TypeError(\"Promise settled with itself.\");\r\n-          var n = !1;\r\n-          try {\r\n-            var r = t && t.then;\r\n-            if (null !== t && \"object\" == typeof t && \"function\" == typeof r)\r\n-              return void r.call(\r\n-                  t,\r\n-                  function (t) {\r\n-                    n || e.resolve(t), (n = !0);\r\n-                  },\r\n-                  function (t) {\r\n-                    n || e.reject(t), (n = !0);\r\n-                  }\r\n-              );\r\n-          } catch (t) {\r\n-            return void (n || e.reject(t));\r\n-          }\r\n-          (e.state = 0), (e.value = t), e.notify();\r\n-        }\r\n-      }),\r\n-          (t.reject = function (t) {\r\n-            var e = this;\r\n-            if (2 === e.state) {\r\n-              if (t === e) throw new TypeError(\"Promise settled with itself.\");\r\n-              (e.state = 1), (e.value = t), e.notify();\r\n-            }\r\n-          }),\r\n-          (t.notify = function () {\r\n-            var i = this;\r\n-            n(function () {\r\n-              if (2 !== i.state)\r\n-                for (; i.deferred.length; ) {\r\n-                  var t = i.deferred.shift(),\r\n-                      e = t[0],\r\n-                      n = t[1],\r\n-                      r = t[2],\r\n-                      o = t[3];\r\n-                  try {\r\n-                    0 === i.state ? r(\"function\" == typeof e ? e.call(void 0, i.value) : i.value) : 1 === i.state && (\"function\" == typeof n ? r(n.call(void 0, i.value)) : o(i.value));\r\n-                  } catch (t) {\r\n-                    o(t);\r\n-                  }\r\n-                }\r\n-            }, void 0);\r\n-          }),\r\n-          (t.then = function (n, r) {\r\n-            var o = this;\r\n-            return new a(function (t, e) {\r\n-              o.deferred.push([n, r, t, e]), o.notify();\r\n-            });\r\n-          }),\r\n-          (t.catch = function (t) {\r\n-            return this.then(void 0, t);\r\n-          }),\r\n-      \"undefined\" == typeof Promise && (window.Promise = a),\r\n-          (u.all = function (t, e) {\r\n-            return new u(Promise.all(t), e);\r\n-          }),\r\n-          (u.resolve = function (t, e) {\r\n-            return new u(Promise.resolve(t), e);\r\n-          }),\r\n-          (u.reject = function (t, e) {\r\n-            return new u(Promise.reject(t), e);\r\n-          }),\r\n-          (u.race = function (t, e) {\r\n-            return new u(Promise.race(t), e);\r\n-          });\r\n-      t = u.prototype;\r\n-      (t.bind = function (t) {\r\n-        return (this.context = t), this;\r\n-      }),\r\n-          (t.then = function (t, e) {\r\n-            return t && t.bind && this.context && (t = t.bind(this.context)), e && e.bind && this.context && (e = e.bind(this.context)), new u(this.promise.then(t, e), this.context);\r\n-          }),\r\n-          (t.catch = function (t) {\r\n-            return t && t.bind && this.context && (t = t.bind(this.context)), new u(this.promise.catch(t), this.context);\r\n-          }),\r\n-          (t.finally = function (e) {\r\n-            return this.then(\r\n-                function (t) {\r\n-                  return e.call(this), t;\r\n-                },\r\n-                function (t) {\r\n-                  return e.call(this), Promise.reject(t);\r\n-                }\r\n-            );\r\n-          });\r\n-      var n,\r\n-          o = {}.hasOwnProperty,\r\n-          r = [].slice,\r\n-          f = !1,\r\n-          i = \"undefined\" != typeof window,\r\n-          e = function (t) {\r\n-            var e = t.config,\r\n-                t = t.nextTick;\r\n-            (n = t), (f = e.debug || !e.silent);\r\n-          };\r\n-      function c(t) {\r\n-        return t ? t.replace(\u002F^\\s*|\\s*$\u002Fg, \"\") : \"\";\r\n-      }\r\n-      function s(t) {\r\n-        return t ? t.toLowerCase() : \"\";\r\n-      }\r\n-      var l = Array.isArray;\r\n-      function p(t) {\r\n-        return \"string\" == typeof t;\r\n-      }\r\n-      function d(t) {\r\n-        return \"function\" == typeof t;\r\n-      }\r\n-      function h(t) {\r\n-        return null !== t && \"object\" == typeof t;\r\n-      }\r\n-      function v(t) {\r\n-        return h(t) && Object.getPrototypeOf(t) == Object.prototype;\r\n-      }\r\n-      function m(t, e, n) {\r\n-        t = u.resolve(t);\r\n-        return arguments.length \u003C 2 ? t : t.then(e, n);\r\n-      }\r\n-      function y(t, e, n) {\r\n-        return d((n = n || {})) && (n = n.call(e)), b(t.bind({ $vm: e, $options: n }), t, { $options: n });\r\n-      }\r\n-      function g(t, e) {\r\n-        var n, r;\r\n-        if (l(t)) for (n = 0; n \u003C t.length; n++) e.call(t[n], t[n], n);\r\n-        else if (h(t)) for (r in t) o.call(t, r) && e.call(t[r], t[r], r);\r\n-        return t;\r\n-      }\r\n-      var _ =\r\n-          Object.assign ||\r\n-          function (e) {\r\n-            return (\r\n-                r.call(arguments, 1).forEach(function (t) {\r\n-                  w(e, t);\r\n-                }),\r\n-                    e\r\n-            );\r\n-          };\r\n-      function b(e) {\r\n-        return (\r\n-            r.call(arguments, 1).forEach(function (t) {\r\n-              w(e, t, !0);\r\n-            }),\r\n-                e\r\n-        );\r\n-      }\r\n-      function w(t, e, n) {\r\n-        for (var r in e) n && (v(e[r]) || l(e[r])) ? (v(e[r]) && !v(t[r]) && (t[r] = {}), l(e[r]) && !l(t[r]) && (t[r] = []), w(t[r], e[r], n)) : void 0 !== e[r] && (t[r] = e[r]);\r\n-      }\r\n-      function x(t, e, n) {\r\n-        var r,\r\n-            a,\r\n-            s,\r\n-            t =\r\n-                ((r = t),\r\n-                    (a = [\"+\", \"#\", \".\", \"\u002F\", \";\", \"?\", \"&\"]),\r\n-                    {\r\n-                      vars: (s = []),\r\n-                      expand: function (i) {\r\n-                        return r.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (t, e, n) {\r\n-                          if (e) {\r\n-                            var r = null,\r\n-                                o = [];\r\n-                            if (\r\n-                                (-1 !== a.indexOf(e.charAt(0)) && ((r = e.charAt(0)), (e = e.substr(1))),\r\n-                                    e.split(\u002F,\u002Fg).forEach(function (t) {\r\n-                                      t = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(t);\r\n-                                      o.push.apply(\r\n-                                          o,\r\n-                                          (function (t, e, n, r) {\r\n-                                            var o = t[n],\r\n-                                                i = [];\r\n-                                            {\r\n-                                              var a;\r\n-                                              $(o) && \"\" !== o\r\n-                                                  ? \"string\" == typeof o || \"number\" == typeof o || \"boolean\" == typeof o\r\n-                                                  ? ((o = o.toString()), r && \"*\" !== r && (o = o.substring(0, parseInt(r, 10))), i.push(C(e, o, k(e) ? n : null)))\r\n-                                                  : \"*\" === r\r\n-                                                      ? Array.isArray(o)\r\n-                                                          ? o.filter($).forEach(function (t) {\r\n-                                                            i.push(C(e, t, k(e) ? n : null));\r\n-                                                          })\r\n-                                                          : Object.keys(o).forEach(function (t) {\r\n-                                                            $(o[t]) && i.push(C(e, o[t], t));\r\n-                                                          })\r\n-                                                      : ((a = []),\r\n-                                                          Array.isArray(o)\r\n-                                                              ? o.filter($).forEach(function (t) {\r\n-                                                                a.push(C(e, t));\r\n-                                                              })\r\n-                                                              : Object.keys(o).forEach(function (t) {\r\n-                                                                $(o[t]) && (a.push(encodeURIComponent(t)), a.push(C(e, o[t].toString())));\r\n-                                                              }),\r\n-                                                          k(e) ? i.push(encodeURIComponent(n) + \"=\" + a.join(\",\")) : 0 !== a.length && i.push(a.join(\",\")))\r\n-                                                  : \";\" === e\r\n-                                                  ? i.push(encodeURIComponent(n))\r\n-                                                  : \"\" !== o || (\"&\" !== e && \"?\" !== e)\r\n-                                                      ? \"\" === o && i.push(\"\")\r\n-                                                      : i.push(encodeURIComponent(n) + \"=\");\r\n-                                            }\r\n-                                            return i;\r\n-                                          })(i, r, t[1], t[2] || t[3])\r\n-                                      ),\r\n-                                          s.push(t[1]);\r\n-                                    }),\r\n-                                r && \"+\" !== r)\r\n-                            ) {\r\n-                              e = \",\";\r\n-                              return \"?\" === r ? (e = \"&\") : \"#\" !== r && (e = r), (0 !== o.length ? r : \"\") + o.join(e);\r\n-                            }\r\n-                            return o.join(\",\");\r\n-                          }\r\n-                          return O(n);\r\n-                        });\r\n-                      },\r\n-                    }),\r\n-            e = t.expand(e);\r\n-        return n && n.push.apply(n, t.vars), e;\r\n-      }\r\n-      function $(t) {\r\n-        return null != t;\r\n-      }\r\n-      function k(t) {\r\n-        return \";\" === t || \"&\" === t || \"?\" === t;\r\n-      }\r\n-      function C(t, e, n) {\r\n-        return (e = (\"+\" === t || \"#\" === t ? O : encodeURIComponent)(e)), n ? encodeURIComponent(n) + \"=\" + e : e;\r\n-      }\r\n-      function O(t) {\r\n-        return t\r\n-        .split(\u002F(%[0-9A-Fa-f]{2})\u002Fg)\r\n-        .map(function (t) {\r\n-          return \u002F%[0-9A-Fa-f]\u002F.test(t) || (t = encodeURI(t)), t;\r\n-        })\r\n-        .join(\"\");\r\n-      }\r\n-      function A(t, e) {\r\n-        var o,\r\n-            i = this || {},\r\n-            n = t;\r\n-        return (\r\n-            p(t) && (n = { url: t, params: e }),\r\n-                (n = b({}, A.options, i.$options, n)),\r\n-                A.transforms.forEach(function (t) {\r\n-                  var e, n, r;\r\n-                  p(t) && (t = A.transform[t]),\r\n-                  d(t) &&\r\n-                  ((e = t),\r\n-                      (n = o),\r\n-                      (r = i.$vm),\r\n-                      (o = function (t) {\r\n-                        return e.call(r, t, n);\r\n-                      }));\r\n-                }),\r\n-                o(n)\r\n-        );\r\n-      }\r\n-      (A.options = { url: \"\", root: null, params: {} }),\r\n-          (A.transform = {\r\n-            template: function (e) {\r\n-              var t = [],\r\n-                  n = x(e.url, e.params, t);\r\n-              return (\r\n-                  t.forEach(function (t) {\r\n-                    delete e.params[t];\r\n-                  }),\r\n-                      n\r\n-              );\r\n-            },\r\n-            query: function (t, e) {\r\n-              var n = Object.keys(A.options.params),\r\n-                  r = {},\r\n-                  e = e(t);\r\n-              return (\r\n-                  g(t.params, function (t, e) {\r\n-                    -1 === n.indexOf(e) && (r[e] = t);\r\n-                  }),\r\n-                  (r = A.params(r)) && (e += (-1 == e.indexOf(\"?\") ? \"?\" : \"&\") + r),\r\n-                      e\r\n-              );\r\n-            },\r\n-            root: function (t, e) {\r\n-              var n = e(t);\r\n-              return p(t.root) && !\u002F^(https?:)?\\\u002F\u002F.test(n) && ((e = t.root), (t = \"\u002F\"), (n = (e && void 0 === t ? e.replace(\u002F\\s+$\u002F, \"\") : e && t ? e.replace(new RegExp(\"[\" + t + \"]+$\"), \"\") : e) + \"\u002F\" + n)), n;\r\n-            },\r\n-          }),\r\n-          (A.transforms = [\"template\", \"query\", \"root\"]),\r\n-          (A.params = function (t) {\r\n-            var e = [],\r\n-                n = encodeURIComponent;\r\n-            return (\r\n-                (e.add = function (t, e) {\r\n-                  d(e) && (e = e()), null === e && (e = \"\"), this.push(n(t) + \"=\" + n(e));\r\n-                }),\r\n-                    (function n(r, t, o) {\r\n-                      var i,\r\n-                          a = l(t),\r\n-                          s = v(t);\r\n-                      g(t, function (t, e) {\r\n-                        (i = h(t) || l(t)), o && (e = o + \"[\" + (s || i ? e : \"\") + \"]\"), !o && a ? r.add(t.name, t.value) : i ? n(r, t, e) : r.add(e, t);\r\n-                      });\r\n-                    })(e, t),\r\n-                    e.join(\"&\").replace(\u002F%20\u002Fg, \"+\")\r\n-            );\r\n-          }),\r\n-          (A.parse = function (t) {\r\n-            var e = document.createElement(\"a\");\r\n-            return (\r\n-                document.documentMode && ((e.href = t), (t = e.href)),\r\n-                    (e.href = t),\r\n-                    {\r\n-                      href: e.href,\r\n-                      protocol: e.protocol ? e.protocol.replace(\u002F:$\u002F, \"\") : \"\",\r\n-                      port: e.port,\r\n-                      host: e.host,\r\n-                      hostname: e.hostname,\r\n-                      pathname: \"\u002F\" === e.pathname.charAt(0) ? e.pathname : \"\u002F\" + e.pathname,\r\n-                      search: e.search ? e.search.replace(\u002F^\\?\u002F, \"\") : \"\",\r\n-                      hash: e.hash ? e.hash.replace(\u002F^#\u002F, \"\") : \"\",\r\n-                    }\r\n-            );\r\n-          });\r\n-      function S(o) {\r\n-        return new u(function (n) {\r\n-          function t(t) {\r\n-            var e = t.type,\r\n-                t = 0;\r\n-            \"load\" === e ? (t = 200) : \"error\" === e && (t = 500), n(o.respondWith(r.responseText, { status: t }));\r\n-          }\r\n-          var r = new XDomainRequest();\r\n-          (o.abort = function () {\r\n-            return r.abort();\r\n-          }),\r\n-              r.open(o.method, o.getUrl()),\r\n-          o.timeout && (r.timeout = o.timeout),\r\n-              (r.onload = t),\r\n-              (r.onabort = t),\r\n-              (r.onerror = t),\r\n-              (r.ontimeout = t),\r\n-              (r.onprogress = function () {}),\r\n-              r.send(o.getBody());\r\n-        });\r\n-      }\r\n-      var T = i && \"withCredentials\" in new XMLHttpRequest();\r\n-      function j(a) {\r\n-        return new u(function (n) {\r\n-          var r,\r\n-              t = a.jsonp || \"callback\",\r\n-              o = a.jsonpCallback || \"_jsonp\" + Math.random().toString(36).substr(2),\r\n-              i = null,\r\n-              e = function (t) {\r\n-                var e = t.type,\r\n-                    t = 0;\r\n-                \"load\" === e && null !== i ? (t = 200) : \"error\" === e && (t = 500), t && window[o] && (delete window[o], document.body.removeChild(r)), n(a.respondWith(i, { status: t }));\r\n-              };\r\n-          (window[o] = function (t) {\r\n-            i = JSON.stringify(t);\r\n-          }),\r\n-              (a.abort = function () {\r\n-                e({ type: \"abort\" });\r\n-              }),\r\n-              (a.params[t] = o),\r\n-          a.timeout && setTimeout(a.abort, a.timeout),\r\n-              ((r = document.createElement(\"script\")).src = a.getUrl()),\r\n-              (r.type = \"text\u002Fjavascript\"),\r\n-              (r.async = !0),\r\n-              (r.onload = e),\r\n-              (r.onerror = e),\r\n-              document.body.appendChild(r);\r\n-        });\r\n-      }\r\n-      function E(o) {\r\n-        return new u(function (n) {\r\n-          function t(t) {\r\n-            var e = o.respondWith(\"response\" in r ? r.response : r.responseText, { status: 1223 === r.status ? 204 : r.status, statusText: 1223 === r.status ? \"No Content\" : c(r.statusText) });\r\n-            g(c(r.getAllResponseHeaders()).split(\"\\n\"), function (t) {\r\n-              e.headers.append(t.slice(0, t.indexOf(\":\")), t.slice(t.indexOf(\":\") + 1));\r\n-            }),\r\n-                n(e);\r\n-          }\r\n-          var r = new XMLHttpRequest();\r\n-          (o.abort = function () {\r\n-            return r.abort();\r\n-          }),\r\n-          o.progress && (\"GET\" === o.method ? r.addEventListener(\"progress\", o.progress) : \u002F^(POST|PUT)$\u002Fi.test(o.method) && r.upload.addEventListener(\"progress\", o.progress)),\r\n-              r.open(o.method, o.getUrl(), !0),\r\n-          o.timeout && (r.timeout = o.timeout),\r\n-          o.responseType && \"responseType\" in r && (r.responseType = o.responseType),\r\n-          (o.withCredentials || o.credentials) && (r.withCredentials = !0),\r\n-          o.crossOrigin || o.headers.set(\"X-Requested-With\", \"XMLHttpRequest\"),\r\n-              o.headers.forEach(function (t, e) {\r\n-                r.setRequestHeader(e, t);\r\n-              }),\r\n-              (r.onload = t),\r\n-              (r.onabort = t),\r\n-              (r.onerror = t),\r\n-              (r.ontimeout = t),\r\n-              r.send(o.getBody());\r\n-        });\r\n-      }\r\n-      function M(a) {\r\n-        var s = require(\"got\");\r\n-        return new u(function (e) {\r\n-          var n,\r\n-              t = a.getUrl(),\r\n-              r = a.getBody(),\r\n-              o = a.method,\r\n-              i = {};\r\n-          a.headers.forEach(function (t, e) {\r\n-            i[e] = t;\r\n-          }),\r\n-              s(t, { body: r, method: o, headers: i }).then(\r\n-                  (n = function (t) {\r\n-                    var n = a.respondWith(t.body, { status: t.statusCode, statusText: c(t.statusMessage) });\r\n-                    g(t.headers, function (t, e) {\r\n-                      n.headers.set(e, t);\r\n-                    }),\r\n-                        e(n);\r\n-                  }),\r\n-                  function (t) {\r\n-                    return n(t.response);\r\n-                  }\r\n-              );\r\n-        });\r\n-      }\r\n-      var P = function (a) {\r\n-        var s,\r\n-            c = [I],\r\n-            l = [];\r\n-        function t(i) {\r\n-          return new u(function (e, n) {\r\n-            function r() {\r\n-              var t;\r\n-              d((s = c.pop())) ? s.call(a, i, o) : ((t = \"Invalid interceptor of type \" + typeof s + \", must be a function\"), \"undefined\" != typeof console && f && console.warn(\"[VueResource warn]: \" + t), o());\r\n-            }\r\n-            function o(t) {\r\n-              if (d(t)) l.unshift(t);\r\n-              else if (h(t))\r\n-                return (\r\n-                    l.forEach(function (e) {\r\n-                      t = m(\r\n-                          t,\r\n-                          function (t) {\r\n-                            return e.call(a, t) || t;\r\n-                          },\r\n-                          n\r\n-                      );\r\n-                    }),\r\n-                        void m(t, e, n)\r\n-                );\r\n-              r();\r\n-            }\r\n-            r();\r\n-          }, a);\r\n-        }\r\n-        return (\r\n-            h(a) || (a = null),\r\n-                (t.use = function (t) {\r\n-                  c.push(t);\r\n-                }),\r\n-                t\r\n-        );\r\n-      };\r\n-      function I(t, e) {\r\n-        e((t.client || (i ? E : M))(t));\r\n-      }\r\n-      function L(t) {\r\n-        var n = this;\r\n-        (this.map = {}),\r\n-            g(t, function (t, e) {\r\n-              return n.append(e, t);\r\n-            });\r\n-      }\r\n-      function N(t, n) {\r\n-        return Object.keys(t).reduce(function (t, e) {\r\n-          return s(n) === s(e) ? e : t;\r\n-        }, null);\r\n-      }\r\n-      (L.prototype.has = function (t) {\r\n-        return null !== N(this.map, t);\r\n-      }),\r\n-          (L.prototype.get = function (t) {\r\n-            t = this.map[N(this.map, t)];\r\n-            return t ? t.join() : null;\r\n-          }),\r\n-          (L.prototype.getAll = function (t) {\r\n-            return this.map[N(this.map, t)] || [];\r\n-          }),\r\n-          (L.prototype.set = function (t, e) {\r\n-            this.map[\r\n-                (function (t) {\r\n-                  if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(t)) throw new TypeError(\"Invalid character in header field name\");\r\n-                  return c(t);\r\n-                })(N(this.map, t) || t)\r\n-                ] = [c(e)];\r\n-          }),\r\n-          (L.prototype.append = function (t, e) {\r\n-            var n = this.map[N(this.map, t)];\r\n-            n ? n.push(c(e)) : this.set(t, e);\r\n-          }),\r\n-          (L.prototype.delete = function (t) {\r\n-            delete this.map[N(this.map, t)];\r\n-          }),\r\n-          (L.prototype.deleteAll = function () {\r\n-            this.map = {};\r\n-          }),\r\n-          (L.prototype.forEach = function (n, r) {\r\n-            var o = this;\r\n-            g(this.map, function (t, e) {\r\n-              g(t, function (t) {\r\n-                return n.call(r, t, e, o);\r\n-              });\r\n-            });\r\n-          });\r\n-      function D(t, e) {\r\n-        var n,\r\n-            r = e.url,\r\n-            o = e.headers,\r\n-            i = e.status,\r\n-            e = e.statusText;\r\n-        (this.url = r),\r\n-            (this.ok = 200 \u003C= i && i \u003C 300),\r\n-            (this.status = i || 0),\r\n-            (this.statusText = e || \"\"),\r\n-            (this.headers = new L(o)),\r\n-            p((this.body = t))\r\n-                ? (this.bodyText = t)\r\n-                : ((o = t),\r\n-                \"undefined\" != typeof Blob &&\r\n-                o instanceof Blob &&\r\n-                ((this.bodyBlob = t),\r\n-                (0 !== (o = t).type.indexOf(\"text\") && -1 === o.type.indexOf(\"json\")) ||\r\n-                (this.bodyText =\r\n-                    ((n = t),\r\n-                        new u(function (t) {\r\n-                          var e = new FileReader();\r\n-                          e.readAsText(n),\r\n-                              (e.onload = function () {\r\n-                                t(e.result);\r\n-                              });\r\n-                        })))));\r\n-      }\r\n-      (D.prototype.blob = function () {\r\n-        return m(this.bodyBlob);\r\n-      }),\r\n-          (D.prototype.text = function () {\r\n-            return m(this.bodyText);\r\n-          }),\r\n-          (D.prototype.json = function () {\r\n-            return m(this.text(), function (t) {\r\n-              return JSON.parse(t);\r\n-            });\r\n-          }),\r\n-          Object.defineProperty(D.prototype, \"data\", {\r\n-            get: function () {\r\n-              return this.body;\r\n-            },\r\n-            set: function (t) {\r\n-              this.body = t;\r\n-            },\r\n-          });\r\n-      var F = function (t) {\r\n-        (this.body = null), (this.params = {}), _(this, t, { method: (t = t.method || \"GET\") ? t.toUpperCase() : \"\" }), this.headers instanceof L || (this.headers = new L(this.headers));\r\n-      };\r\n-      (F.prototype.getUrl = function () {\r\n-        return A(this);\r\n-      }),\r\n-          (F.prototype.getBody = function () {\r\n-            return this.body;\r\n-          }),\r\n-          (F.prototype.respondWith = function (t, e) {\r\n-            return new D(t, _(e || {}, { url: this.getUrl() }));\r\n-          });\r\n-      t = { \"Content-Type\": \"application\u002Fjson;charset=utf-8\" };\r\n-      function R(t) {\r\n-        var e = this || {},\r\n-            n = P(e.$vm);\r\n-        return (\r\n-            (function (n) {\r\n-              r.call(arguments, 1).forEach(function (t) {\r\n-                for (var e in t) void 0 === n[e] && (n[e] = t[e]);\r\n-              });\r\n-            })(t || {}, e.$options, R.options),\r\n-                R.interceptors.forEach(function (t) {\r\n-                  p(t) && (t = R.interceptor[t]), d(t) && n.use(t);\r\n-                }),\r\n-                n(new F(t)).then(\r\n-                    function (t) {\r\n-                      return t.ok ? t : u.reject(t);\r\n-                    },\r\n-                    function (t) {\r\n-                      var e;\r\n-                      return t instanceof Error && ((e = t), \"undefined\" != typeof console && console.error(e)), u.reject(t);\r\n-                    }\r\n-                )\r\n-        );\r\n-      }\r\n-      function z(n, r, t, o) {\r\n-        var i = this || {},\r\n-            a = {};\r\n-        return (\r\n-            g((t = _({}, z.actions, t)), function (t, e) {\r\n-              (t = b({ url: n, params: _({}, r) }, o, t)),\r\n-                  (a[e] = function () {\r\n-                    return (i.$http || R)(\r\n-                        (function (t, e) {\r\n-                          var n,\r\n-                              r = _({}, t),\r\n-                              t = {};\r\n-                          switch (e.length) {\r\n-                          case 2:\r\n-                            (t = e[0]), (n = e[1]);\r\n-                            break;\r\n-                          case 1:\r\n-                            \u002F^(POST|PUT|PATCH)$\u002Fi.test(r.method) ? (n = e[0]) : (t = e[0]);\r\n-                            break;\r\n-                          case 0:\r\n-                            break;\r\n-                          default:\r\n-                            throw \"Expected up to 2 arguments [params, body], got \" + e.length + \" arguments\";\r\n-                          }\r\n-                          return (r.body = n), (r.params = _({}, r.params, t)), r;\r\n-                        })(t, arguments)\r\n-                    );\r\n-                  });\r\n-            }),\r\n-                a\r\n-        );\r\n-      }\r\n-      function H(n) {\r\n-        H.installed ||\r\n-        (e(n),\r\n-            (n.url = A),\r\n-            (n.http = R),\r\n-            (n.resource = z),\r\n-            (n.Promise = u),\r\n-            Object.defineProperties(n.prototype, {\r\n-              $url: {\r\n-                get: function () {\r\n-                  return y(n.url, this, this.$options.url);\r\n-                },\r\n-              },\r\n-              $http: {\r\n-                get: function () {\r\n-                  return y(n.http, this, this.$options.http);\r\n-                },\r\n-              },\r\n-              $resource: {\r\n-                get: function () {\r\n-                  return n.resource.bind(this);\r\n-                },\r\n-              },\r\n-              $promise: {\r\n-                get: function () {\r\n-                  var e = this;\r\n-                  return function (t) {\r\n-                    return new n.Promise(t, e);\r\n-                  };\r\n-                },\r\n-              },\r\n-            }));\r\n-      }\r\n-      return (\r\n-          (R.options = {}),\r\n-              (R.headers = { put: t, post: t, patch: t, delete: t, common: { Accept: \"application\u002Fjson, text\u002Fplain, *\u002F*\" }, custom: {} }),\r\n-              (R.interceptor = {\r\n-                before: function (t, e) {\r\n-                  d(t.before) && t.before.call(this, t), e();\r\n-                },\r\n-                method: function (t, e) {\r\n-                  t.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(t.method) && (t.headers.set(\"X-HTTP-Method-Override\", t.method), (t.method = \"POST\")), e();\r\n-                },\r\n-                jsonp: function (t, e) {\r\n-                  \"JSONP\" == t.method && (t.client = j), e();\r\n-                },\r\n-                json: function (t, e) {\r\n-                  var o = t.headers.get(\"Content-Type\") || \"\";\r\n-                  h(t.body) && 0 === o.indexOf(\"application\u002Fjson\") && (t.body = JSON.stringify(t.body)),\r\n-                      e(function (r) {\r\n-                        return r.bodyText\r\n-                            ? m(r.text(), function (t) {\r\n-                              if (0 === (o = r.headers.get(\"Content-Type\") || \"\").indexOf(\"application\u002Fjson\") || ((n = (e = t).match(\u002F^\\[|^\\{(?!\\{)\u002F)) && { \"[\": \u002F]$\u002F, \"{\": \u002F}$\u002F }[n[0]].test(e)))\r\n-                                try {\r\n-                                  r.body = JSON.parse(t);\r\n-                                } catch (t) {\r\n-                                  r.body = null;\r\n-                                }\r\n-                              else r.body = t;\r\n-                              var e, n;\r\n-                              return r;\r\n-                            })\r\n-                            : r;\r\n-                      });\r\n-                },\r\n-                form: function (t, e) {\r\n-                  var n;\r\n-                  (n = t.body),\r\n-                      \"undefined\" != typeof FormData && n instanceof FormData\r\n-                          ? t.headers.delete(\"Content-Type\")\r\n-                          : h(t.body) && t.emulateJSON && ((t.body = A.params(t.body)), t.headers.set(\"Content-Type\", \"application\u002Fx-www-form-urlencoded\")),\r\n-                      e();\r\n-                },\r\n-                header: function (n, t) {\r\n-                  g(_({}, R.headers.common, n.crossOrigin ? {} : R.headers.custom, R.headers[s(n.method)]), function (t, e) {\r\n-                    n.headers.has(e) || n.headers.set(e, t);\r\n-                  }),\r\n-                      t();\r\n-                },\r\n-                cors: function (t, e) {\r\n-                  var n, r;\r\n-                  i && ((n = A.parse(location.href)), ((r = A.parse(t.getUrl())).protocol === n.protocol && r.host === n.host) || ((t.crossOrigin = !0), (t.emulateHTTP = !1), T || (t.client = S))), e();\r\n-                },\r\n-              }),\r\n-              (R.interceptors = [\"before\", \"method\", \"jsonp\", \"json\", \"form\", \"header\", \"cors\"]),\r\n-              [\"get\", \"delete\", \"head\", \"jsonp\"].forEach(function (n) {\r\n-                R[n] = function (t, e) {\r\n-                  return this(_(e || {}, { url: t, method: n }));\r\n-                };\r\n-              }),\r\n-              [\"post\", \"put\", \"patch\"].forEach(function (r) {\r\n-                R[r] = function (t, e, n) {\r\n-                  return this(_(n || {}, { url: t, method: r, body: e }));\r\n-                };\r\n-              }),\r\n-              (z.actions = { get: { method: \"GET\" }, save: { method: \"POST\" }, query: { method: \"GET\" }, update: { method: \"PUT\" }, remove: { method: \"DELETE\" }, delete: { method: \"DELETE\" } }),\r\n-          \"undefined\" != typeof window && window.Vue && window.Vue.use(H),\r\n-              H\r\n-      );\r\n-    })\r\n+var isFunction;\n+!(function (t, e) {\n+  \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : ((t = t || self).Vue = e());\n+})(this, function () {\n+  \"use strict\";\n+  var d = Object.freeze({});\n+  function P(t) {\n+    return null == t;\n+  }\n+  function I(t) {\n+    return null != t;\n+  }\n+  function O(t) {\n+    return !0 === t;\n+  }\n+  function l(t) {\n+    return \"string\" == typeof t || \"number\" == typeof t || \"symbol\" == typeof t || \"boolean\" == typeof t;\n+  }\n+  function L(t) {\n+    return null !== t && \"object\" == typeof t;\n+  }\n+  var n = Object.prototype.toString;\n+  function c(t) {\n+    return \"[object Object]\" === n.call(t);\n+  }\n+  function o(t) {\n+    var e = parseFloat(String(t));\n+    return 0 \u003C= e && Math.floor(e) === e && isFinite(t);\n+  }\n+  function h(t) {\n+    return I(t) && \"function\" == typeof t.then && \"function\" == typeof t.catch;\n+  }\n+  function e(t) {\n+    return null == t ? \"\" : Array.isArray(t) || (c(t) && t.toString === n) ? JSON.stringify(t, null, 2) : String(t);\n+  }\n+  function N(t) {\n+    var e = parseFloat(t);\n+    return isNaN(e) ? t : e;\n+  }\n+  function a(t, e) {\n+    for (var n = Object.create(null), r = t.split(\",\"), o = 0; o \u003C r.length; o++) n[r[o]] = !0;\n+    return e\n+        ? function (t) {\n+          return n[t.toLowerCase()];\n+        }\n+        : function (t) {\n+          return n[t];\n+        };\n+  }\n+  var u = a(\"slot,component\", !0),\n+      f = a(\"key,ref,slot,slot-scope,is\");\n+  function v(t, e) {\n+    if (t.length) {\n+      e = t.indexOf(e);\n+      if (-1 \u003C e) return t.splice(e, 1);\n+    }\n+  }\n+  var r = Object.prototype.hasOwnProperty;\n+  function p(t, e) {\n+    return r.call(t, e);\n+  }\n+  function t(e) {\n+    var n = Object.create(null);\n+    return function (t) {\n+      return n[t] || (n[t] = e(t));\n+    };\n+  }\n+  var i = \u002F-(\\w)\u002Fg,\n+      m = t(function (t) {\n+        return t.replace(i, function (t, e) {\n+          return e ? e.toUpperCase() : \"\";\n+        });\n+      }),\n+      s = t(function (t) {\n+        return t.charAt(0).toUpperCase() + t.slice(1);\n+      }),\n+      y = \u002F\\B([A-Z])\u002Fg,\n+      g = t(function (t) {\n+        return t.replace(y, \"-$1\").toLowerCase();\n+      }),\n+      _ = Function.prototype.bind\n+          ? function (t, e) {\n+            return t.bind(e);\n+          }\n+          : function (n, r) {\n+            function t(t) {\n+              var e = arguments.length;\n+              return e ? (1 \u003C e ? n.apply(r, arguments) : n.call(r, t)) : n.call(r);\n+            }\n+            return (t._length = n.length), t;\n+          };\n+  function b(t, e) {\n+    e = e || 0;\n+    for (var n = t.length - e, r = new Array(n); n--; ) r[n] = t[n + e];\n+    return r;\n+  }\n+  function w(t, e) {\n+    for (var n in e) t[n] = e[n];\n+    return t;\n+  }\n+  function x(t) {\n+    for (var e = {}, n = 0; n \u003C t.length; n++) t[n] && w(e, t[n]);\n+    return e;\n+  }\n+  function $(t, e, n) {}\n+  function k(t, e, n) {\n+    return !1;\n+  }\n+  var C = function (t) {\n+    return t;\n+  };\n+  function A(e, n) {\n+    if (e === n) return !0;\n+    var t = L(e),\n+        r = L(n);\n+    if (!t || !r) return !t && !r && String(e) === String(n);\n+    try {\n+      var o = Array.isArray(e),\n+          i = Array.isArray(n);\n+      if (o && i)\n+        return (\n+            e.length === n.length &&\n+            e.every(function (t, e) {\n+              return A(t, n[e]);\n+            })\n+        );\n+      if (e instanceof Date && n instanceof Date) return e.getTime() === n.getTime();\n+      if (o || i) return !1;\n+      (o = Object.keys(e)), (i = Object.keys(n));\n+      return (\n+          o.length === i.length &&\n+          o.every(function (t) {\n+            return A(e[t], n[t]);\n+          })\n+      );\n+    } catch (e) {\n+      return !1;\n+    }\n+  }\n+  function S(t, e) {\n+    for (var n = 0; n \u003C t.length; n++) if (A(t[n], e)) return n;\n+    return -1;\n+  }\n+  function D(t) {\n+    var e = !1;\n+    return function () {\n+      e || ((e = !0), t.apply(this, arguments));\n+    };\n+  }\n+  var T = \"data-server-rendered\",\n+      j = [\"component\", \"directive\", \"filter\"],\n+      E = [\"beforeCreate\", \"created\", \"beforeMount\", \"mounted\", \"beforeUpdate\", \"updated\", \"beforeDestroy\", \"destroyed\", \"activated\", \"deactivated\", \"errorCaptured\", \"serverPrefetch\"],\n+      M = {\n+        optionMergeStrategies: Object.create(null),\n+        silent: !1,\n+        productionTip: !1,\n+        devtools: !1,\n+        performance: !1,\n+        errorHandler: null,\n+        warnHandler: null,\n+        ignoredElements: [],\n+        keyCodes: Object.create(null),\n+        isReservedTag: k,\n+        isReservedAttr: k,\n+        isUnknownElement: k,\n+        getTagNamespace: $,\n+        parsePlatformTagName: C,\n+        mustUseProp: k,\n+        async: !0,\n+        _lifecycleHooks: E,\n+      },\n+      F = \u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;\n+  function R(t, e, n, r) {\n+    Object.defineProperty(t, e, { value: n, enumerable: !!r, writable: !0, configurable: !0 });\n+  }\n+  var z,\n+      H = new RegExp(\"[^\" + F.source + \".$_\\\\d]\"),\n+      U = \"__proto__\" in {},\n+      B = \"undefined\" != typeof window,\n+      V = \"undefined\" != typeof WXEnvironment && !!WXEnvironment.platform,\n+      W = V && WXEnvironment.platform.toLowerCase(),\n+      q = B && window.navigator.userAgent.toLowerCase(),\n+      J = q && \u002Fmsie|trident\u002F.test(q),\n+      G = q && 0 \u003C q.indexOf(\"msie 9.0\"),\n+      K = q && 0 \u003C q.indexOf(\"edge\u002F\"),\n+      X = (q && q.indexOf(\"android\"), (q && \u002Fiphone|ipad|ipod|ios\u002F.test(q)) || \"ios\" === W),\n+      Q = (q && \u002Fchrome\\\u002F\\d+\u002F.test(q), q && \u002Fphantomjs\u002F.test(q), q && q.match(\u002Ffirefox\\\u002F(\\d+)\u002F)),\n+      Y = {}.watch,\n+      Z = !1;\n+  if (B)\n+    try {\n+      var tt = {};\n+      Object.defineProperty(tt, \"passive\", {\n+        get: function () {\n+          Z = !0;\n+        },\n+      }),\n+          window.addEventListener(\"test-passive\", null, tt);\n+    } catch (d) {}\n+  var et = function () {\n+        return void 0 === z && (z = !B && !V && \"undefined\" != typeof global && global.process && \"server\" === global.process.env.VUE_ENV), z;\n+      },\n+      nt = B && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+  function rt(t) {\n+    return \"function\" == typeof t && \u002Fnative code\u002F.test(t.toString());\n+  }\n+  var ot,\n+      it = \"undefined\" != typeof Symbol && rt(Symbol) && \"undefined\" != typeof Reflect && rt(Reflect.ownKeys);\n+  function at() {\n+    this.set = Object.create(null);\n+  }\n+  ot =\n+      \"undefined\" != typeof Set && rt(Set)\n+          ? Set\n+          : ((at.prototype.has = function (t) {\n+            return !0 === this.set[t];\n+          }),\n+              (at.prototype.add = function (t) {\n+                this.set[t] = !0;\n+              }),\n+              (at.prototype.clear = function () {\n+                this.set = Object.create(null);\n+              }),\n+              at);\n+  var st = $,\n+      ct = 0,\n+      lt = function () {\n+        (this.id = ct++), (this.subs = []);\n+      };\n+  (lt.prototype.addSub = function (t) {\n+    this.subs.push(t);\n+  }),\n+      (lt.prototype.removeSub = function (t) {\n+        v(this.subs, t);\n+      }),\n+      (lt.prototype.depend = function () {\n+        lt.target && lt.target.addDep(this);\n+      }),\n+      (lt.prototype.notify = function () {\n+        for (var t = this.subs.slice(), e = 0, n = t.length; e \u003C n; e++) t[e].update();\n+      }),\n+      (lt.target = null);\n+  var ut = [];\n+  function ft(t) {\n+    ut.push(t), (lt.target = t);\n+  }\n+  function pt() {\n+    ut.pop(), (lt.target = ut[ut.length - 1]);\n+  }\n+  var dt = function (t, e, n, r, o, i, a, s) {\n+        (this.tag = t),\n+            (this.data = e),\n+            (this.children = n),\n+            (this.text = r),\n+            (this.elm = o),\n+            (this.ns = void 0),\n+            (this.context = i),\n+            (this.fnContext = void 0),\n+            (this.fnOptions = void 0),\n+            (this.fnScopeId = void 0),\n+            (this.key = e && e.key),\n+            (this.componentOptions = a),\n+            (this.componentInstance = void 0),\n+            (this.parent = void 0),\n+            (this.raw = !1),\n+            (this.isStatic = !1),\n+            (this.isRootInsert = !0),\n+            (this.isComment = !1),\n+            (this.isCloned = !1),\n+            (this.isOnce = !1),\n+            (this.asyncFactory = s),\n+            (this.asyncMeta = void 0),\n+            (this.isAsyncPlaceholder = !1);\n+      },\n+      ht = { child: { configurable: !0 } };\n+  (ht.child.get = function () {\n+    return this.componentInstance;\n+  }),\n+      Object.defineProperties(dt.prototype, ht);\n+  var vt = function (t) {\n+    void 0 === t && (t = \"\");\n+    var e = new dt();\n+    return (e.text = t), (e.isComment = !0), e;\n+  };\n+  function mt(t) {\n+    return new dt(void 0, void 0, void 0, String(t));\n+  }\n+  function yt(t) {\n+    var e = new dt(t.tag, t.data, t.children && t.children.slice(), t.text, t.elm, t.context, t.componentOptions, t.asyncFactory);\n+    return (e.ns = t.ns), (e.isStatic = t.isStatic), (e.key = t.key), (e.isComment = t.isComment), (e.fnContext = t.fnContext), (e.fnOptions = t.fnOptions), (e.fnScopeId = t.fnScopeId), (e.asyncMeta = t.asyncMeta), (e.isCloned = !0), e;\n+  }\n+  var gt = Array.prototype,\n+      _t = Object.create(gt);\n+  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\", \"sort\", \"reverse\"].forEach(function (i) {\n+    var a = gt[i];\n+    R(_t, i, function () {\n+      for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\n+      var n,\n+          r = a.apply(this, t),\n+          o = this.__ob__;\n+      switch (i) {\n+      case \"push\":\n+      case \"unshift\":\n+        n = t;\n+        break;\n+      case \"splice\":\n+        n = t.slice(2);\n+      }\n+      return n && o.observeArray(n), o.dep.notify(), r;\n+    });\n+  });\n+  var bt = Object.getOwnPropertyNames(_t),\n+      wt = !0;\n+  function xt(t) {\n+    wt = t;\n+  }\n+  var $t = function (t) {\n+    (this.value = t),\n+        (this.dep = new lt()),\n+        (this.vmCount = 0),\n+        R(t, \"__ob__\", this),\n+        Array.isArray(t)\n+            ? (U\n+            ? (t.__proto__ = _t)\n+            : (function (t, e, n) {\n+              for (var r = 0, o = n.length; r \u003C o; r++) {\n+                var i = n[r];\n+                R(t, i, e[i]);\n+              }\n+            })(t, _t, bt),\n+                this.observeArray(t))\n+            : this.walk(t);\n+  };\n+  function kt(t, e) {\n+    var n;\n+    if (L(t) && !(t instanceof dt)) return p(t, \"__ob__\") && t.__ob__ instanceof $t ? (n = t.__ob__) : wt && !et() && (Array.isArray(t) || c(t)) && Object.isExtensible(t) && !t._isVue && (n = new $t(t)), e && n && n.vmCount++, n;\n+  }\n+  function Ct(n, t, r, e, o) {\n+    var i,\n+        a,\n+        s,\n+        c = new lt(),\n+        l = Object.getOwnPropertyDescriptor(n, t);\n+    (l && !1 === l.configurable) ||\n+    ((i = l && l.get),\n+        (a = l && l.set),\n+    (i && !a) || 2 !== arguments.length || (r = n[t]),\n+        (s = !o && kt(r)),\n+        Object.defineProperty(n, t, {\n+          enumerable: !0,\n+          configurable: !0,\n+          get: function () {\n+            var t = i ? i.call(n) : r;\n+            return (\n+                lt.target &&\n+                (c.depend(),\n+                s &&\n+                (s.dep.depend(),\n+                Array.isArray(t) &&\n+                (function t(e) {\n+                  for (var n = void 0, r = 0, o = e.length; r \u003C o; r++) (n = e[r]) && n.__ob__ && n.__ob__.dep.depend(), Array.isArray(n) && t(n);\n+                })(t))),\n+                    t\n+            );\n+          },\n+          set: function (t) {\n+            var e = i ? i.call(n) : r;\n+            t === e || (t != t && e != e) || (i && !a) || (a ? a.call(n, t) : (r = t), (s = !o && kt(t)), c.notify());\n+          },\n+        }));\n+  }\n+  function Ot(t, e, n) {\n+    if (Array.isArray(t) && o(e)) return (t.length = Math.max(t.length, e)), t.splice(e, 1, n), n;\n+    if (e in t && !(e in Object.prototype)) return (t[e] = n);\n+    var r = t.__ob__;\n+    return t._isVue || (r && r.vmCount) || (r ? (Ct(r.value, e, n), r.dep.notify()) : (t[e] = n)), n;\n+  }\n+  function At(t, e) {\n+    var n;\n+    Array.isArray(t) && o(e) ? t.splice(e, 1) : ((n = t.__ob__), t._isVue || (n && n.vmCount) || (p(t, e) && (delete t[e], n && n.dep.notify())));\n+  }\n+  ($t.prototype.walk = function (t) {\n+    for (var e = Object.keys(t), n = 0; n \u003C e.length; n++) Ct(t, e[n]);\n+  }),\n+      ($t.prototype.observeArray = function (t) {\n+        for (var e = 0, n = t.length; e \u003C n; e++) kt(t[e]);\n+      });\n+  var St = M.optionMergeStrategies;\n+  function Tt(t, e) {\n+    if (!e) return t;\n+    for (var n, r, o, i = it ? Reflect.ownKeys(e) : Object.keys(e), a = 0; a \u003C i.length; a++) \"__ob__\" !== (n = i[a]) && ((r = t[n]), (o = e[n]), p(t, n) ? r !== o && c(r) && c(o) && Tt(r, o) : Ot(t, n, o));\n+    return t;\n+  }\n+  function jt(n, r, o) {\n+    return o\n+        ? function () {\n+          var t = \"function\" == typeof r ? r.call(o, o) : r,\n+              e = \"function\" == typeof n ? n.call(o, o) : n;\n+          return t ? Tt(t, e) : e;\n+        }\n+        : r\n+            ? n\n+                ? function () {\n+                  return Tt(\"function\" == typeof r ? r.call(this, this) : r, \"function\" == typeof n ? n.call(this, this) : n);\n+                }\n+                : r\n+            : n;\n+  }\n+  function Et(t, e) {\n+    t = e ? (t ? t.concat(e) : Array.isArray(e) ? e : [e]) : t;\n+    return (\n+        t &&\n+        (function (t) {\n+          for (var e = [], n = 0; n \u003C t.length; n++) -1 === e.indexOf(t[n]) && e.push(t[n]);\n+          return e;\n+        })(t)\n+    );\n+  }\n+  function Mt(t, e, n, r) {\n+    t = Object.create(t || null);\n+    return e ? w(t, e) : t;\n+  }\n+  (St.data = function (t, e, n) {\n+    return n ? jt(t, e, n) : e && \"function\" != typeof e ? t : jt(t, e);\n+  }),\n+      E.forEach(function (t) {\n+        St[t] = Et;\n+      }),\n+      j.forEach(function (t) {\n+        St[t + \"s\"] = Mt;\n+      }),\n+      (St.watch = function (t, e, n, r) {\n+        if ((t === Y && (t = void 0), e === Y && (e = void 0), !e)) return Object.create(t || null);\n+        if (!t) return e;\n+        var o,\n+            i = {};\n+        for (o in (w(i, t), e)) {\n+          var a = i[o],\n+              s = e[o];\n+          a && !Array.isArray(a) && (a = [a]), (i[o] = a ? a.concat(s) : Array.isArray(s) ? s : [s]);\n+        }\n+        return i;\n+      }),\n+      (St.props = St.methods = St.inject = St.computed = function (t, e, n, r) {\n+        if (!t) return e;\n+        var o = Object.create(null);\n+        return w(o, t), e && w(o, e), o;\n+      }),\n+      (St.provide = jt);\n+  var Pt = function (t, e) {\n+    return void 0 === e ? t : e;\n+  };\n+  function It(n, i, r) {\n+    if (\n+        (\"function\" == typeof i && (i = i.options),\n+            (function (t) {\n+              var e = t.props;\n+              if (e) {\n+                var n,\n+                    r,\n+                    o = {};\n+                if (Array.isArray(e)) for (n = e.length; n--; ) \"string\" == typeof (r = e[n]) && (o[m(r)] = { type: null });\n+                else if (c(e)) for (var i in e) (r = e[i]), (o[m(i)] = c(r) ? r : { type: r });\n+                t.props = o;\n+              }\n+            })(i),\n+            (function () {\n+              var t = i.inject;\n+              if (t) {\n+                var e = (i.inject = {});\n+                if (Array.isArray(t)) for (var n = 0; n \u003C t.length; n++) e[t[n]] = { from: t[n] };\n+                else if (c(t))\n+                  for (var r in t) {\n+                    var o = t[r];\n+                    e[r] = c(o) ? w({ from: r }, o) : { from: o };\n+                  }\n+              }\n+            })(),\n+            (function () {\n+              var t = i.directives;\n+              if (t)\n+                for (var e in t) {\n+                  var n = t[e];\n+                  \"function\" == typeof n && (t[e] = { bind: n, update: n });\n+                }\n+            })(),\n+        !i._base && (i.extends && (n = It(n, i.extends, r)), i.mixins))\n+    )\n+      for (var t = 0, e = i.mixins.length; t \u003C e; t++) n = It(n, i.mixins[t], r);\n+    var o,\n+        a = {};\n+    for (o in n) s(o);\n+    for (o in i) p(n, o) || s(o);\n+    function s(t) {\n+      var e = St[t] || Pt;\n+      a[t] = e(n[t], i[t], r, t);\n+    }\n+    return a;\n+  }\n+  function Lt(t, e, n) {\n+    if (\"string\" == typeof n) {\n+      var r = t[e];\n+      if (p(r, n)) return r[n];\n+      t = m(n);\n+      if (p(r, t)) return r[t];\n+      e = s(t);\n+      return (!p(r, e) && (r[n] || r[t])) || r[e];\n+    }\n+  }\n+  function Nt(t, e, n, r) {\n+    var o = e[t],\n+        i = !p(n, t),\n+        e = n[t],\n+        n = Rt(Boolean, o.type);\n+    return (\n+        -1 \u003C n && (i && !p(o, \"default\") ? (e = !1) : (\"\" !== e && e !== g(t)) || (((i = Rt(String, o.type)) \u003C 0 || n \u003C i) && (e = !0))),\n+        void 0 === e &&\n+        ((e = (function (t, e, n) {\n+          if (p(e, \"default\")) {\n+            var r = e.default;\n+            return t && t.$options.propsData && void 0 === t.$options.propsData[n] && void 0 !== t._props[n] ? t._props[n] : \"function\" == typeof r && \"Function\" !== Dt(e.type) ? r.call(t) : r;\n+          }\n+        })(r, o, t)),\n+            (t = wt),\n+            xt(!0),\n+            kt(e),\n+            xt(t)),\n+            e\n+    );\n+  }\n+  function Dt(t) {\n+    t = t && t.toString().match(\u002F^\\s*function (\\w+)\u002F);\n+    return t ? t[1] : \"\";\n+  }\n+  function Ft(t, e) {\n+    return Dt(t) === Dt(e);\n+  }\n+  function Rt(t, e) {\n+    if (!Array.isArray(e)) return Ft(e, t) ? 0 : -1;\n+    for (var n = 0, r = e.length; n \u003C r; n++) if (Ft(e[n], t)) return n;\n+    return -1;\n+  }\n+  function zt(t, e, n) {\n+    ft();\n+    try {\n+      if (e)\n+        for (var r = e; (r = r.$parent); ) {\n+          var o = r.$options.errorCaptured;\n+          if (o)\n+            for (var i = 0; i \u003C o.length; i++)\n+              try {\n+                if (!1 === o[i].call(r, t, e, n)) return;\n+              } catch (t) {\n+                Ut(t, r, \"errorCaptured hook\");\n+              }\n+        }\n+      Ut(t, e, n);\n+    } finally {\n+      pt();\n+    }\n+  }\n+  function Ht(t, e, n, r, o) {\n+    var i;\n+    try {\n+      (i = n ? t.apply(e, n) : t.call(e)) &&\n+      !i._isVue &&\n+      h(i) &&\n+      !i._handled &&\n+      (i.catch(function (t) {\n+        return zt(t, r, o + \" (Promise\u002Fasync)\");\n+      }),\n+          (i._handled = !0));\n+    } catch (t) {\n+      zt(t, r, o);\n+    }\n+    return i;\n+  }\n+  function Ut(t, e, n) {\n+    if (M.errorHandler)\n+      try {\n+        return M.errorHandler.call(null, t, e, n);\n+      } catch (e) {\n+        e !== t && Bt(e);\n+      }\n+    Bt(t);\n+  }\n+  function Bt(t) {\n+    if ((!B && !V) || \"undefined\" == typeof console) throw t;\n+    console.error(t);\n+  }\n+  var Vt,\n+      Wt,\n+      qt,\n+      Jt,\n+      Gt = !1,\n+      Kt = [],\n+      Xt = !1;\n+  function Qt() {\n+    Xt = !1;\n+    for (var t = Kt.slice(0), e = (Kt.length = 0); e \u003C t.length; e++) t[e]();\n+  }\n+  function Yt(t, e) {\n+    var n;\n+    if (\n+        (Kt.push(function () {\n+          if (t)\n+            try {\n+              t.call(e);\n+            } catch (t) {\n+              zt(t, e, \"nextTick\");\n+            }\n+          else n && n(e);\n+        }),\n+        Xt || ((Xt = !0), Wt()),\n+        !t && \"undefined\" != typeof Promise)\n+    )\n+      return new Promise(function (t) {\n+        n = t;\n+      });\n+  }\n+  \"undefined\" != typeof Promise && rt(Promise)\n+      ? ((Vt = Promise.resolve()),\n+          (Wt = function () {\n+            Vt.then(Qt), X && setTimeout($);\n+          }),\n+          (Gt = !0))\n+      : J || \"undefined\" == typeof MutationObserver || (!rt(MutationObserver) && \"[object MutationObserverConstructor]\" !== MutationObserver.toString())\n+      ? (Wt =\n+          \"undefined\" != typeof setImmediate && rt(setImmediate)\n+              ? function () {\n+                setImmediate(Qt);\n+              }\n+              : function () {\n+                setTimeout(Qt, 0);\n+              })\n+      : ((qt = 1),\n+          (On = new MutationObserver(Qt)),\n+          (Jt = document.createTextNode(String(qt))),\n+          On.observe(Jt, { characterData: !0 }),\n+          (Wt = function () {\n+            (qt = (qt + 1) % 2), (Jt.data = String(qt));\n+          }),\n+          (Gt = !0));\n+  var Zt = new ot();\n+  function te(t) {\n+    !(function t(e, n) {\n+      var r,\n+          o,\n+          i = Array.isArray(e);\n+      if (!((!i && !L(e)) || Object.isFrozen(e) || e instanceof dt)) {\n+        if (e.__ob__) {\n+          var a = e.__ob__.dep.id;\n+          if (n.has(a)) return;\n+          n.add(a);\n+        }\n+        if (i) for (r = e.length; r--; ) t(e[r], n);\n+        else for (r = (o = Object.keys(e)).length; r--; ) t(e[o[r]], n);\n+      }\n+    })(t, Zt),\n+        Zt.clear();\n+  }\n+  var ee = t(function (t) {\n+    var e = \"&\" === t.charAt(0),\n+        n = \"~\" === (t = e ? t.slice(1) : t).charAt(0),\n+        r = \"!\" === (t = n ? t.slice(1) : t).charAt(0);\n+    return { name: (t = r ? t.slice(1) : t), once: n, capture: r, passive: e };\n+  });\n+  function ne(t, o) {\n+    function i() {\n+      var t = arguments,\n+          e = i.fns;\n+      if (!Array.isArray(e)) return Ht(e, null, arguments, o, \"v-on handler\");\n+      for (var n = e.slice(), r = 0; r \u003C n.length; r++) Ht(n[r], null, t, o, \"v-on handler\");\n+    }\n+    return (i.fns = t), i;\n+  }\n+  function re(t, e, n, r, o, i) {\n+    var a, s, c, l;\n+    for (a in t)\n+      (s = t[a]), (c = e[a]), (l = ee(a)), P(s) || (P(c) ? (P(s.fns) && (s = t[a] = ne(s, i)), O(l.once) && (s = t[a] = o(l.name, s, l.capture)), n(l.name, s, l.capture, l.passive, l.params)) : s !== c && ((c.fns = s), (t[a] = c)));\n+    for (a in e) P(t[a]) && r((l = ee(a)).name, e[a], l.capture);\n+  }\n+  function oe(t, e, n) {\n+    var r;\n+    t instanceof dt && (t = t.data.hook || (t.data.hook = {}));\n+    var o = t[e];\n+    function i() {\n+      n.apply(this, arguments), v(r.fns, i);\n+    }\n+    P(o) ? (r = ne([i])) : I(o.fns) && O(o.merged) ? (r = o).fns.push(i) : (r = ne([o, i])), (r.merged = !0), (t[e] = r);\n+  }\n+  function ie(t, e, n, r, o) {\n+    if (I(e)) {\n+      if (p(e, n)) return (t[n] = e[n]), o || delete e[n], 1;\n+      if (p(e, r)) return (t[n] = e[r]), o || delete e[r], 1;\n+    }\n+  }\n+  function ae(t) {\n+    return l(t)\n+        ? [mt(t)]\n+        : Array.isArray(t)\n+            ? (function t(e, n) {\n+              for (var r, o, i, a = [], s = 0; s \u003C e.length; s++)\n+                P((r = e[s])) ||\n+                \"boolean\" == typeof r ||\n+                ((i = a[(o = a.length - 1)]),\n+                    Array.isArray(r)\n+                        ? 0 \u003C r.length && (se((r = t(r, (n || \"\") + \"_\" + s))[0]) && se(i) && ((a[o] = mt(i.text + r[0].text)), r.shift()), a.push.apply(a, r))\n+                        : l(r)\n+                        ? se(i)\n+                            ? (a[o] = mt(i.text + r))\n+                            : \"\" !== r && a.push(mt(r))\n+                        : se(r) && se(i)\n+                            ? (a[o] = mt(i.text + r.text))\n+                            : (O(e._isVList) && I(r.tag) && P(r.key) && I(n) && (r.key = \"__vlist\" + n + \"_\" + s + \"__\"), a.push(r)));\n+              return a;\n+            })(t)\n+            : void 0;\n+  }\n+  function se(t) {\n+    return I(t) && I(t.text) && !1 === t.isComment;\n+  }\n+  function ce(t, e) {\n+    if (t) {\n+      for (var n = Object.create(null), r = it ? Reflect.ownKeys(t) : Object.keys(t), o = 0; o \u003C r.length; o++) {\n+        var i = r[o];\n+        if (\"__ob__\" !== i) {\n+          for (var a, s = t[i].from, c = e; c; ) {\n+            if (c._provided && p(c._provided, s)) {\n+              n[i] = c._provided[s];\n+              break;\n+            }\n+            c = c.$parent;\n+          }\n+          !c && \"default\" in t[i] && ((a = t[i].default), (n[i] = \"function\" == typeof a ? a.call(e) : a));\n+        }\n+      }\n+      return n;\n+    }\n+  }\n+  function le(t, e) {\n+    if (!t || !t.length) return {};\n+    for (var n, r = {}, o = 0, i = t.length; o \u003C i; o++) {\n+      var a = t[o],\n+          s = a.data;\n+      s && s.attrs && s.attrs.slot && delete s.attrs.slot,\n+          (a.context !== e && a.fnContext !== e) || !s || null == s.slot ? (r.default || (r.default = [])).push(a) : ((s = r[(s = s.slot)] || (r[s] = [])), \"template\" === a.tag ? s.push.apply(s, a.children || []) : s.push(a));\n+    }\n+    for (n in r) r[n].every(ue) && delete r[n];\n+    return r;\n+  }\n+  function ue(t) {\n+    return (t.isComment && !t.asyncFactory) || \" \" === t.text;\n+  }\n+  function fe(t, e, n) {\n+    var r,\n+        o,\n+        i = 0 \u003C Object.keys(e).length,\n+        a = t ? !!t.$stable : !i,\n+        s = t && t.$key;\n+    if (t) {\n+      if (t._normalized) return t._normalized;\n+      if (a && n && n !== d && s === n.$key && !i && !n.$hasNormal) return n;\n+      for (var c in ((r = {}), t))\n+        t[c] &&\n+        \"$\" !== c[0] &&\n+        (r[c] = (function (t, e, n) {\n+          function r() {\n+            var t = arguments.length ? n.apply(null, arguments) : n({});\n+            return (t = t && \"object\" == typeof t && !Array.isArray(t) ? [t] : ae(t)) && (0 === t.length || (1 === t.length && t[0].isComment)) ? void 0 : t;\n+          }\n+          return n.proxy && Object.defineProperty(t, e, { get: r, enumerable: !0, configurable: !0 }), r;\n+        })(e, c, t[c]));\n+    } else r = {};\n+    for (o in e)\n+      o in r ||\n+      (r[o] = (function (t, e) {\n+        return function () {\n+          return t[e];\n+        };\n+      })(e, o));\n+    return t && Object.isExtensible(t) && (t._normalized = r), R(r, \"$stable\", a), R(r, \"$key\", s), R(r, \"$hasNormal\", i), r;\n+  }\n+  function pe(t, e) {\n+    var n, r, o, i, a;\n+    if (Array.isArray(t) || \"string\" == typeof t) for (n = new Array(t.length), r = 0, o = t.length; r \u003C o; r++) n[r] = e(t[r], r);\n+    else if (\"number\" == typeof t) for (n = new Array(t), r = 0; r \u003C t; r++) n[r] = e(r + 1, r);\n+    else if (L(t))\n+      if (it && t[Symbol.iterator]) {\n+        n = [];\n+        for (var s = t[Symbol.iterator](), c = s.next(); !c.done; ) n.push(e(c.value, n.length)), (c = s.next());\n+      } else for (i = Object.keys(t), n = new Array(i.length), r = 0, o = i.length; r \u003C o; r++) (a = i[r]), (n[r] = e(t[a], a, r));\n+    return I(n) || (n = []), (n._isVList = !0), n;\n+  }\n+  function de(t, e, n, r) {\n+    var o = this.$scopedSlots[t],\n+        e = o ? ((n = n || {}), r && (n = w(w({}, r), n)), o(n) || e) : this.$slots[t] || e,\n+        n = n && n.slot;\n+    return n ? this.$createElement(\"template\", { slot: n }, e) : e;\n+  }\n+  function he(t) {\n+    return Lt(this.$options, \"filters\", t) || C;\n+  }\n+  function ve(t, e) {\n+    return Array.isArray(t) ? -1 === t.indexOf(e) : t !== e;\n+  }\n+  function me(t, e, n, r, o) {\n+    n = M.keyCodes[e] || n;\n+    return o && r && !M.keyCodes[e] ? ve(o, r) : n ? ve(n, t) : r ? g(r) !== e : void 0;\n+  }\n+  function ye(r, o, i, a, s) {\n+    if (i && L(i)) {\n+      var c;\n+      Array.isArray(i) && (i = x(i));\n+      for (var t in i)\n+        !(function (e) {\n+          c = \"class\" === e || \"style\" === e || f(e) ? r : ((n = r.attrs && r.attrs.type), a || M.mustUseProp(o, n, e) ? r.domProps || (r.domProps = {}) : r.attrs || (r.attrs = {}));\n+          var t = m(e),\n+              n = g(e);\n+          t in c ||\n+          n in c ||\n+          ((c[e] = i[e]),\n+          s &&\n+          ((r.on || (r.on = {}))[\"update:\" + e] = function (t) {\n+            i[e] = t;\n+          }));\n+        })(t);\n+    }\n+    return r;\n+  }\n+  function ge(t, e) {\n+    var n = this._staticTrees || (this._staticTrees = []),\n+        r = n[t];\n+    return (r && !e) || be((r = n[t] = this.$options.staticRenderFns[t].call(this._renderProxy, null, this)), \"__static__\" + t, !1), r;\n+  }\n+  function _e(t, e, n) {\n+    return be(t, \"__once__\" + e + (n ? \"_\" + n : \"\"), !0), t;\n+  }\n+  function be(t, e, n) {\n+    if (Array.isArray(t)) for (var r = 0; r \u003C t.length; r++) t[r] && \"string\" != typeof t[r] && we(t[r], e + \"_\" + r, n);\n+    else we(t, e, n);\n+  }\n+  function we(t, e, n) {\n+    (t.isStatic = !0), (t.key = e), (t.isOnce = n);\n+  }\n+  function xe(t, e) {\n+    if (e && c(e)) {\n+      var n,\n+          r = (t.on = t.on ? w({}, t.on) : {});\n+      for (n in e) {\n+        var o = r[n],\n+            i = e[n];\n+        r[n] = o ? [].concat(o, i) : i;\n+      }\n+    }\n+    return t;\n+  }\n+  function $e(t, e, n, r) {\n+    e = e || { $stable: !n };\n+    for (var o = 0; o \u003C t.length; o++) {\n+      var i = t[o];\n+      Array.isArray(i) ? $e(i, e, n) : i && (i.proxy && (i.fn.proxy = !0), (e[i.key] = i.fn));\n+    }\n+    return r && (e.$key = r), e;\n+  }\n+  function ke(t, e) {\n+    for (var n = 0; n \u003C e.length; n += 2) {\n+      var r = e[n];\n+      \"string\" == typeof r && r && (t[e[n]] = e[n + 1]);\n+    }\n+    return t;\n+  }\n+  function Ce(t, e) {\n+    return \"string\" == typeof t ? e + t : t;\n+  }\n+  function Oe(t) {\n+    (t._o = _e), (t._n = N), (t._s = e), (t._l = pe), (t._t = de), (t._q = A), (t._i = S), (t._m = ge), (t._f = he), (t._k = me), (t._b = ye), (t._v = mt), (t._e = vt), (t._u = $e), (t._g = xe), (t._d = ke), (t._p = Ce);\n+  }\n+  function Ae(t, e, n, o, r) {\n+    var i,\n+        a = this,\n+        s = r.options;\n+    p(o, \"_uid\") ? ((i = Object.create(o))._original = o) : (o = (i = o)._original);\n+    var r = O(s._compiled),\n+        c = !r;\n+    (this.data = t),\n+        (this.props = e),\n+        (this.children = n),\n+        (this.parent = o),\n+        (this.listeners = t.on || d),\n+        (this.injections = ce(s.inject, o)),\n+        (this.slots = function () {\n+          return a.$slots || fe(t.scopedSlots, (a.$slots = le(n, o))), a.$slots;\n+        }),\n+        Object.defineProperty(this, \"scopedSlots\", {\n+          enumerable: !0,\n+          get: function () {\n+            return fe(t.scopedSlots, this.slots());\n+          },\n+        }),\n+    r && ((this.$options = s), (this.$slots = this.slots()), (this.$scopedSlots = fe(t.scopedSlots, this.$slots))),\n+        s._scopeId\n+            ? (this._c = function (t, e, n, r) {\n+              r = Le(i, t, e, n, r, c);\n+              return r && !Array.isArray(r) && ((r.fnScopeId = s._scopeId), (r.fnContext = o)), r;\n+            })\n+            : (this._c = function (t, e, n, r) {\n+              return Le(i, t, e, n, r, c);\n+            });\n+  }\n+  function Se(t, e, n, r) {\n+    t = yt(t);\n+    return (t.fnContext = n), (t.fnOptions = r), e.slot && ((t.data || (t.data = {})).slot = e.slot), t;\n+  }\n+  function Te(t, e) {\n+    for (var n in e) t[m(n)] = e[n];\n+  }\n+  Oe(Ae.prototype);\n+  var je = {\n+        init: function (t, e) {\n+          var n, r, o;\n+          t.componentInstance && !t.componentInstance._isDestroyed && t.data.keepAlive\n+              ? je.prepatch(t, t)\n+              : (t.componentInstance =\n+                  ((r = { _isComponent: !0, _parentVnode: (n = t), parent: We }), I((o = n.data.inlineTemplate)) && ((r.render = o.render), (r.staticRenderFns = o.staticRenderFns)), new n.componentOptions.Ctor(r))).$mount(\n+              e ? t.elm : void 0,\n+              e\n+              );\n+        },\n+        prepatch: function (t, e) {\n+          var n = e.componentOptions;\n+          !(function (t, e, n, r, o) {\n+            var i = r.data.scopedSlots,\n+                a = t.$scopedSlots,\n+                a = !!((i && !i.$stable) || (a !== d && !a.$stable) || (i && t.$scopedSlots.$key !== i.$key)),\n+                i = !!(o || t.$options._renderChildren || a);\n+            if (((t.$options._parentVnode = r), (t.$vnode = r), t._vnode && (t._vnode.parent = r), (t.$options._renderChildren = o), (t.$attrs = r.data.attrs || d), (t.$listeners = n || d), e && t.$options.props)) {\n+              xt(!1);\n+              for (var s = t._props, c = t.$options._propKeys || [], l = 0; l \u003C c.length; l++) {\n+                var u = c[l],\n+                    f = t.$options.props;\n+                s[u] = Nt(u, f, e, t);\n+              }\n+              xt(!0), (t.$options.propsData = e);\n+            }\n+            n = n || d;\n+            a = t.$options._parentListeners;\n+            (t.$options._parentListeners = n), Ve(t, n, a), i && ((t.$slots = le(o, r.context)), t.$forceUpdate());\n+          })((e.componentInstance = t.componentInstance), n.propsData, n.listeners, e, n.children);\n+        },\n+        insert: function (t) {\n+          var e = t.context,\n+              n = t.componentInstance;\n+          n._isMounted || ((n._isMounted = !0), Ke(n, \"mounted\")), t.data.keepAlive && (e._isMounted ? ((n._inactive = !1), Ye.push(n)) : Ge(n, !0));\n+        },\n+        destroy: function (t) {\n+          var e = t.componentInstance;\n+          e._isDestroyed ||\n+          (t.data.keepAlive\n+              ? (function t(e, n) {\n+                if (!((n && ((e._directInactive = !0), Je(e))) || e._inactive)) {\n+                  e._inactive = !0;\n+                  for (var r = 0; r \u003C e.$children.length; r++) t(e.$children[r]);\n+                  Ke(e, \"deactivated\");\n+                }\n+              })(e, !0)\n+              : e.$destroy());\n+        },\n+      },\n+      Ee = Object.keys(je);\n+  function Me(a, s, t, e, n) {\n+    if (!P(a)) {\n+      var r,\n+          o = t.$options._base;\n+      if ((L(a) && (a = o.extend(a)), \"function\" == typeof a)) {\n+        if (\n+            P(a.cid) &&\n+            void 0 ===\n+            (a = (function (e, n) {\n+              if (O(e.error) && I(e.errorComp)) return e.errorComp;\n+              if (I(e.resolved)) return e.resolved;\n+              var t = De;\n+              if ((t && I(e.owners) && -1 === e.owners.indexOf(t) && e.owners.push(t), O(e.loading) && I(e.loadingComp))) return e.loadingComp;\n+              if (t && !I(e.owners)) {\n+                var r = (e.owners = [t]),\n+                    o = !0,\n+                    i = null,\n+                    a = null;\n+                t.$on(\"hook:destroyed\", function () {\n+                  return v(r, t);\n+                });\n+                var s = function (t) {\n+                      for (var e = 0, n = r.length; e \u003C n; e++) r[e].$forceUpdate();\n+                      t && ((r.length = 0), null !== i && (clearTimeout(i), (i = null)), null !== a && (clearTimeout(a), (a = null)));\n+                    },\n+                    c = D(function (t) {\n+                      (e.resolved = Fe(t, n)), o ? (r.length = 0) : s(!0);\n+                    }),\n+                    l = D(function (t) {\n+                      I(e.errorComp) && ((e.error = !0), s(!0));\n+                    }),\n+                    u = e(c, l);\n+                return (\n+                    L(u) &&\n+                    (h(u)\n+                        ? P(e.resolved) && u.then(c, l)\n+                        : h(u.component) &&\n+                        (u.component.then(c, l),\n+                        I(u.error) && (e.errorComp = Fe(u.error, n)),\n+                        I(u.loading) &&\n+                        ((e.loadingComp = Fe(u.loading, n)),\n+                            0 === u.delay\n+                                ? (e.loading = !0)\n+                                : (i = setTimeout(function () {\n+                                  (i = null), P(e.resolved) && P(e.error) && ((e.loading = !0), s(!1));\n+                                }, u.delay || 200))),\n+                        I(u.timeout) &&\n+                        (a = setTimeout(function () {\n+                          (a = null), P(e.resolved) && l(null);\n+                        }, u.timeout)))),\n+                        (o = !1),\n+                        e.loading ? e.loadingComp : e.resolved\n+                );\n+              }\n+            })((r = a), o))\n+        )\n+          return (c = r), (l = s), (u = t), (o = e), (f = n), ((p = vt()).asyncFactory = c), (p.asyncMeta = { data: l, context: u, children: o, tag: f }), p;\n+        (s = s || {}),\n+            gn(a),\n+        I(s.model) &&\n+        (function (t, e) {\n+          var n = (t.model && t.model.prop) || \"value\",\n+              r = (t.model && t.model.event) || \"input\";\n+          (e.attrs || (e.attrs = {}))[n] = e.model.value;\n+          (t = e.on || (e.on = {})), (n = t[r]), (e = e.model.callback);\n+          I(n) ? (Array.isArray(n) ? -1 === n.indexOf(e) : n !== e) && (t[r] = [e].concat(n)) : (t[r] = e);\n+        })(a.options, s);\n+        f = (function () {\n+          var t = a.options.props;\n+          if (!P(t)) {\n+            var e = {},\n+                n = s.attrs,\n+                r = s.props;\n+            if (I(n) || I(r))\n+              for (var o in t) {\n+                var i = g(o);\n+                ie(e, r, o, i, !0) || ie(e, n, o, i, !1);\n+              }\n+            return e;\n+          }\n+        })();\n+        if (O(a.options.functional))\n+          return (function (t, e, n, r, o) {\n+            var i = t.options,\n+                a = {},\n+                s = i.props;\n+            if (I(s)) for (var c in s) a[c] = Nt(c, s, e || d);\n+            else I(n.attrs) && Te(a, n.attrs), I(n.props) && Te(a, n.props);\n+            var l = new Ae(n, a, o, r, t),\n+                t = i.render.call(null, l._c, l);\n+            if (t instanceof dt) return Se(t, n, l.parent, i);\n+            if (Array.isArray(t)) {\n+              for (var u = ae(t) || [], f = new Array(u.length), p = 0; p \u003C u.length; p++) f[p] = Se(u[p], n, l.parent, i);\n+              return f;\n+            }\n+          })(a, f, s, t, e);\n+        p = s.on;\n+        (s.on = s.nativeOn),\n+        O(a.options.abstract) && ((i = s.slot), (s = {}), i && (s.slot = i)),\n+            (function () {\n+              for (var t = s.hook || (s.hook = {}), e = 0; e \u003C Ee.length; e++) {\n+                var n = Ee[e],\n+                    r = t[n],\n+                    o = je[n];\n+                r === o ||\n+                (r && r._merged) ||\n+                (t[n] = r\n+                    ? (function (n, r) {\n+                      function t(t, e) {\n+                        n(t, e), r(t, e);\n+                      }\n+                      return (t._merged = !0), t;\n+                    })(o, r)\n+                    : o);\n+              }\n+            })();\n+        var i = a.options.name || n;\n+        return new dt(\"vue-component-\" + a.cid + (i ? \"-\" + i : \"\"), s, void 0, void 0, void 0, t, { Ctor: a, propsData: f, listeners: p, tag: n, children: e }, r);\n+      }\n+    }\n+    var c, l, u, f, p;\n+  }\n+  var Pe = 1,\n+      Ie = 2;\n+  function Le(t, e, n, r, o, i) {\n+    return (\n+        (Array.isArray(n) || l(n)) && ((o = r), (r = n), (n = void 0)),\n+        O(i) && (o = Ie),\n+            (t = t),\n+            (e = e),\n+            (r = r),\n+            (o = o),\n+            I((n = n)) && I(n.__ob__)\n+                ? vt()\n+                : (I(n) && I(n.is) && (e = n.is),\n+                    e\n+                        ? (Array.isArray(r) && \"function\" == typeof r[0] && (((n = n || {}).scopedSlots = { default: r[0] }), (r.length = 0)),\n+                            o === Ie\n+                                ? (r = ae(r))\n+                                : o === Pe &&\n+                                (r = (function (t) {\n+                                  for (var e = 0; e \u003C t.length; e++) if (Array.isArray(t[e])) return Array.prototype.concat.apply([], t);\n+                                  return t;\n+                                })(r)),\n+                            (r =\n+                                \"string\" == typeof e\n+                                    ? ((a = (t.$vnode && t.$vnode.ns) || M.getTagNamespace(e)),\n+                                        M.isReservedTag(e) ? new dt(M.parsePlatformTagName(e), n, r, void 0, void 0, t) : (n && n.pre) || !I((s = Lt(t.$options, \"components\", e))) ? new dt(e, n, r, void 0, void 0, t) : Me(s, n, t, r, e))\n+                                    : Me(e, n, t, r)),\n+                            Array.isArray(r)\n+                                ? r\n+                                : I(r)\n+                                ? (I(a) &&\n+                                (function t(e, n, r) {\n+                                  if (((e.ns = n), \"foreignObject\" === e.tag && (r = !(n = void 0)), I(e.children)))\n+                                    for (var o = 0, i = e.children.length; o \u003C i; o++) {\n+                                      var a = e.children[o];\n+                                      I(a.tag) && (P(a.ns) || (O(r) && \"svg\" !== a.tag)) && t(a, n, r);\n+                                    }\n+                                })(r, a),\n+                                I(n) && (L((n = n).style) && te(n.style), L(n.class) && te(n.class)),\n+                                    r)\n+                                : vt())\n+                        : vt())\n+    );\n+    var a, s;\n+  }\n+  var Ne,\n+      De = null;\n+  function Fe(t, e) {\n+    return (t.__esModule || (it && \"Module\" === t[Symbol.toStringTag])) && (t = t.default), L(t) ? e.extend(t) : t;\n+  }\n+  function Re(t) {\n+    return t.isComment && t.asyncFactory;\n+  }\n+  function ze(t) {\n+    if (Array.isArray(t))\n+      for (var e = 0; e \u003C t.length; e++) {\n+        var n = t[e];\n+        if (I(n) && (I(n.componentOptions) || Re(n))) return n;\n+      }\n+  }\n+  function He(t, e) {\n+    Ne.$on(t, e);\n+  }\n+  function Ue(t, e) {\n+    Ne.$off(t, e);\n+  }\n+  function Be(e, n) {\n+    var r = Ne;\n+    return function t() {\n+      null !== n.apply(null, arguments) && r.$off(e, t);\n+    };\n+  }\n+  function Ve(t, e, n) {\n+    re(e, n || {}, He, Ue, Be, (Ne = t)), (Ne = void 0);\n+  }\n+  var We = null;\n+  function qe(t) {\n+    var e = We;\n+    return (\n+        (We = t),\n+            function () {\n+              We = e;\n+            }\n+    );\n+  }\n+  function Je(t) {\n+    for (; (t = t && t.$parent); ) if (t._inactive) return 1;\n+  }\n+  function Ge(t, e) {\n+    if (e) {\n+      if (((t._directInactive = !1), Je(t))) return;\n+    } else if (t._directInactive) return;\n+    if (t._inactive || null === t._inactive) {\n+      t._inactive = !1;\n+      for (var n = 0; n \u003C t.$children.length; n++) Ge(t.$children[n]);\n+      Ke(t, \"activated\");\n+    }\n+  }\n+  function Ke(t, e) {\n+    ft();\n+    var n = t.$options[e],\n+        r = e + \" hook\";\n+    if (n) for (var o = 0, i = n.length; o \u003C i; o++) Ht(n[o], t, null, t, r);\n+    t._hasHookEvent && t.$emit(\"hook:\" + e), pt();\n+  }\n+  var Xe,\n+      Qe = [],\n+      Ye = [],\n+      Ze = {},\n+      tn = !1,\n+      en = !1,\n+      nn = 0,\n+      rn = 0,\n+      on = Date.now;\n+  function an() {\n+    var t, e;\n+    for (\n+        rn = on(),\n+            en = !0,\n+            Qe.sort(function (t, e) {\n+              return t.id - e.id;\n+            }),\n+            nn = 0;\n+        nn \u003C Qe.length;\n+        nn++\n+    )\n+      (t = Qe[nn]).before && t.before(), (e = t.id), (Ze[e] = null), t.run();\n+    var n = Ye.slice(),\n+        r = Qe.slice();\n+    (nn = Qe.length = Ye.length = 0),\n+        (tn = en = !(Ze = {})),\n+        (function (t) {\n+          for (var e = 0; e \u003C t.length; e++) (t[e]._inactive = !0), Ge(t[e], !0);\n+        })(n),\n+        (function (t) {\n+          for (var e = t.length; e--; ) {\n+            var n = t[e],\n+                r = n.vm;\n+            r._watcher === n && r._isMounted && !r._isDestroyed && Ke(r, \"updated\");\n+          }\n+        })(r),\n+    nt && M.devtools && nt.emit(\"flush\");\n+  }\n+  function sn(t, e, n, r, o) {\n+    (this.vm = t),\n+    o && (t._watcher = this),\n+        t._watchers.push(this),\n+        r ? ((this.deep = !!r.deep), (this.user = !!r.user), (this.lazy = !!r.lazy), (this.sync = !!r.sync), (this.before = r.before)) : (this.deep = this.user = this.lazy = this.sync = !1),\n+        (this.cb = n),\n+        (this.id = ++cn),\n+        (this.active = !0),\n+        (this.dirty = this.lazy),\n+        (this.deps = []),\n+        (this.newDeps = []),\n+        (this.depIds = new ot()),\n+        (this.newDepIds = new ot()),\n+        (this.expression = \"\"),\n+        \"function\" == typeof e\n+            ? (this.getter = e)\n+            : ((this.getter = (function (t) {\n+              if (!H.test(t)) {\n+                var n = t.split(\".\");\n+                return function (t) {\n+                  for (var e = 0; e \u003C n.length; e++) {\n+                    if (!t) return;\n+                    t = t[n[e]];\n+                  }\n+                  return t;\n+                };\n+              }\n+            })(e)),\n+            this.getter || (this.getter = $)),\n+        (this.value = this.lazy ? void 0 : this.get());\n+  }\n+  !B ||\n+  J ||\n+  ((Xe = window.performance) &&\n+      \"function\" == typeof Xe.now &&\n+      on() > document.createEvent(\"Event\").timeStamp &&\n+      (on = function () {\n+        return Xe.now();\n+      }));\n+  var cn = 0;\n+  (sn.prototype.get = function () {\n+    var t;\n+    ft(this);\n+    var e = this.vm;\n+    try {\n+      t = this.getter.call(e, e);\n+    } catch (t) {\n+      if (!this.user) throw t;\n+      zt(t, e, 'getter for watcher \"' + this.expression + '\"');\n+    } finally {\n+      this.deep && te(t), pt(), this.cleanupDeps();\n+    }\n+    return t;\n+  }),\n+      (sn.prototype.addDep = function (t) {\n+        var e = t.id;\n+        this.newDepIds.has(e) || (this.newDepIds.add(e), this.newDeps.push(t), this.depIds.has(e) || t.addSub(this));\n+      }),\n+      (sn.prototype.cleanupDeps = function () {\n+        for (var t = this.deps.length; t--; ) {\n+          var e = this.deps[t];\n+          this.newDepIds.has(e.id) || e.removeSub(this);\n+        }\n+        var n = this.depIds;\n+        (this.depIds = this.newDepIds), (this.newDepIds = n), this.newDepIds.clear(), (n = this.deps), (this.deps = this.newDeps), (this.newDeps = n), (this.newDeps.length = 0);\n+      }),\n+      (sn.prototype.update = function () {\n+        this.lazy\n+            ? (this.dirty = !0)\n+            : this.sync\n+            ? this.run()\n+            : (function (t) {\n+              var e = t.id;\n+              if (null == Ze[e]) {\n+                if (((Ze[e] = !0), en)) {\n+                  for (var n = Qe.length - 1; nn \u003C n && Qe[n].id > t.id; ) n--;\n+                  Qe.splice(n + 1, 0, t);\n+                } else Qe.push(t);\n+                tn || ((tn = !0), Yt(an));\n+              }\n+            })(this);\n+      }),\n+      (sn.prototype.run = function () {\n+        if (this.active) {\n+          var t = this.get();\n+          if (t !== this.value || L(t) || this.deep) {\n+            var e = this.value;\n+            if (((this.value = t), this.user))\n+              try {\n+                this.cb.call(this.vm, t, e);\n+              } catch (t) {\n+                zt(t, this.vm, 'callback for watcher \"' + this.expression + '\"');\n+              }\n+            else this.cb.call(this.vm, t, e);\n+          }\n+        }\n+      }),\n+      (sn.prototype.evaluate = function () {\n+        (this.value = this.get()), (this.dirty = !1);\n+      }),\n+      (sn.prototype.depend = function () {\n+        for (var t = this.deps.length; t--; ) this.deps[t].depend();\n+      }),\n+      (sn.prototype.teardown = function () {\n+        if (this.active) {\n+          this.vm._isBeingDestroyed || v(this.vm._watchers, this);\n+          for (var t = this.deps.length; t--; ) this.deps[t].removeSub(this);\n+          this.active = !1;\n+        }\n+      });\n+  var ln = { enumerable: !0, configurable: !0, get: $, set: $ };\n+  function un(t, e, n) {\n+    (ln.get = function () {\n+      return this[e][n];\n+    }),\n+        (ln.set = function (t) {\n+          this[e][n] = t;\n+        }),\n+        Object.defineProperty(t, n, ln);\n+  }\n+  var fn = { lazy: !0 };\n+  function pn(t, e, n) {\n+    var r = !et();\n+    \"function\" == typeof n ? ((ln.get = r ? dn(e) : hn(n)), (ln.set = $)) : ((ln.get = n.get ? (r && !1 !== n.cache ? dn(e) : hn(n.get)) : $), (ln.set = n.set || $)), Object.defineProperty(t, e, ln);\n+  }\n+  function dn(e) {\n+    return function () {\n+      var t = this._computedWatchers && this._computedWatchers[e];\n+      if (t) return t.dirty && t.evaluate(), lt.target && t.depend(), t.value;\n+    };\n+  }\n+  function hn(t) {\n+    return function () {\n+      return t.call(this, this);\n+    };\n+  }\n+  function vn(t, e, n, r) {\n+    return c(n) && (n = (r = n).handler), \"string\" == typeof n && (n = t[n]), t.$watch(e, n, r);\n+  }\n+  var mn,\n+      yn = 0;\n+  function gn(o) {\n+    var t,\n+        e,\n+        n = o.options;\n+    return (\n+        !o.super ||\n+        ((t = gn(o.super)) !== o.superOptions &&\n+            ((o.superOptions = t),\n+            (e = (function () {\n+              var t,\n+                  e,\n+                  n = o.options,\n+                  r = o.sealedOptions;\n+              for (e in n) n[e] !== r[e] && ((t = t || {})[e] = n[e]);\n+              return t;\n+            })()) && w(o.extendOptions, e),\n+            (n = o.options = It(t, o.extendOptions)).name && (n.components[n.name] = o))),\n+            n\n+    );\n+  }\n+  function _n(t) {\n+    this._init(t);\n+  }\n+  function bn(t) {\n+    return t && (t.Ctor.options.name || t.tag);\n+  }\n+  function wn(t, e) {\n+    return Array.isArray(t) ? -1 \u003C t.indexOf(e) : \"string\" == typeof t ? -1 \u003C t.split(\",\").indexOf(e) : \"[object RegExp]\" === n.call(t) && t.test(e);\n+  }\n+  function xn(t, e) {\n+    var n,\n+        r = t.cache,\n+        o = t.keys,\n+        i = t._vnode;\n+    for (n in r) {\n+      var a = r[n];\n+      !a || ((a = bn(a.componentOptions)) && !e(a) && $n(r, n, o, i));\n+    }\n+  }\n+  function $n(t, e, n, r) {\n+    var o = t[e];\n+    !o || (r && o.tag === r.tag) || o.componentInstance.$destroy(), (t[e] = null), v(n, e);\n+  }\n+  (_n.prototype._init = function (t) {\n+    var e,\n+        n,\n+        r = this;\n+    (r._uid = yn++),\n+        (r._isVue = !0),\n+        t && t._isComponent\n+            ? (function (t) {\n+              var e = (r.$options = Object.create(r.constructor.options)),\n+                  n = t._parentVnode;\n+              e.parent = t.parent;\n+              n = (e._parentVnode = n).componentOptions;\n+              (e.propsData = n.propsData), (e._parentListeners = n.listeners), (e._renderChildren = n.children), (e._componentTag = n.tag), t.render && ((e.render = t.render), (e.staticRenderFns = t.staticRenderFns));\n+            })(t)\n+            : (r.$options = It(gn(r.constructor), t || {}, r)),\n+        (function (t) {\n+          var e = t.$options,\n+              n = e.parent;\n+          if (n && !e.abstract) {\n+            for (; n.$options.abstract && n.$parent; ) n = n.$parent;\n+            n.$children.push(t);\n+          }\n+          (t.$parent = n), (t.$root = n ? n.$root : t), (t.$children = []), (t.$refs = {}), (t._watcher = null), (t._inactive = null), (t._directInactive = !1), (t._isMounted = !1), (t._isDestroyed = !1), (t._isBeingDestroyed = !1);\n+        })(((r._renderProxy = r)._self = r)),\n+        (function (t) {\n+          (t._events = Object.create(null)), (t._hasHookEvent = !1);\n+          var e = t.$options._parentListeners;\n+          e && Ve(t, e);\n+        })(r),\n+        (function (o) {\n+          (o._vnode = null), (o._staticTrees = null);\n+          var t = o.$options,\n+              e = (o.$vnode = t._parentVnode),\n+              n = e && e.context;\n+          (o.$slots = le(t._renderChildren, n)),\n+              (o.$scopedSlots = d),\n+              (o._c = function (t, e, n, r) {\n+                return Le(o, t, e, n, r, !1);\n+              }),\n+              (o.$createElement = function (t, e, n, r) {\n+                return Le(o, t, e, n, r, !0);\n+              });\n+          e = e && e.data;\n+          Ct(o, \"$attrs\", (e && e.attrs) || d, null, !0), Ct(o, \"$listeners\", t._parentListeners || d, null, !0);\n+        })(r),\n+        Ke(r, \"beforeCreate\"),\n+    (n = ce((e = r).$options.inject, e)) &&\n+    (xt(!1),\n+        Object.keys(n).forEach(function (t) {\n+          Ct(e, t, n[t]);\n+        }),\n+        xt(!0)),\n+        (function (t) {\n+          t._watchers = [];\n+          var e = t.$options;\n+          e.props &&\n+          (function (n, r) {\n+            var t,\n+                o = n.$options.propsData || {},\n+                i = (n._props = {}),\n+                a = (n.$options._propKeys = []);\n+            for (t in (n.$parent && xt(!1), r))\n+              !(function (t) {\n+                a.push(t);\n+                var e = Nt(t, r, o, n);\n+                Ct(i, t, e), t in n || un(n, \"_props\", t);\n+              })(t);\n+            xt(!0);\n+          })(t, e.props),\n+          e.methods &&\n+          (function (t, e) {\n+            for (var n in (t.$options.props, e)) t[n] = \"function\" != typeof e[n] ? $ : _(e[n], t);\n+          })(t, e.methods),\n+              e.data\n+                  ? (function (t) {\n+                    var e = t.$options.data;\n+                    c(\n+                        (e = t._data =\n+                            \"function\" == typeof e\n+                                ? (function (t, e) {\n+                                  ft();\n+                                  try {\n+                                    return t.call(e, e);\n+                                  } catch (t) {\n+                                    return zt(t, e, \"data()\"), {};\n+                                  } finally {\n+                                    pt();\n+                                  }\n+                                })(e, t)\n+                                : e || {})\n+                    ) || (e = {});\n+                    for (var n, r = Object.keys(e), o = t.$options.props, i = (t.$options.methods, r.length); i--; ) {\n+                      var a = r[i];\n+                      (o && p(o, a)) || (36 !== (n = (a + \"\").charCodeAt(0)) && 95 !== n && un(t, \"_data\", a));\n+                    }\n+                    kt(e, !0);\n+                  })(t)\n+                  : kt((t._data = {}), !0),\n+          e.computed &&\n+          (function (t, e) {\n+            var n,\n+                r = (t._computedWatchers = Object.create(null)),\n+                o = et();\n+            for (n in e) {\n+              var i = e[n],\n+                  a = \"function\" == typeof i ? i : i.get;\n+              o || (r[n] = new sn(t, a || $, $, fn)), n in t || pn(t, n, i);\n+            }\n+          })(t, e.computed),\n+          e.watch &&\n+          e.watch !== Y &&\n+          (function (t, e) {\n+            for (var n in e) {\n+              var r = e[n];\n+              if (Array.isArray(r)) for (var o = 0; o \u003C r.length; o++) vn(t, n, r[o]);\n+              else vn(t, n, r);\n+            }\n+          })(t, e.watch);\n+        })(r),\n+    (t = r.$options.provide) && (r._provided = \"function\" == typeof t ? t.call(r) : t),\n+        Ke(r, \"created\"),\n+    r.$options.el && r.$mount(r.$options.el);\n+  }),\n+      (W = _n),\n+      Object.defineProperty(W.prototype, \"$data\", {\n+        get: function () {\n+          return this._data;\n+        },\n+      }),\n+      Object.defineProperty(W.prototype, \"$props\", {\n+        get: function () {\n+          return this._props;\n+        },\n+      }),\n+      (W.prototype.$set = Ot),\n+      (W.prototype.$delete = At),\n+      (W.prototype.$watch = function (t, e, n) {\n+        if (c(e)) return vn(this, t, e, n);\n+        (n = n || {}).user = !0;\n+        var r = new sn(this, t, e, n);\n+        if (n.immediate)\n+          try {\n+            e.call(this, r.value);\n+          } catch (t) {\n+            zt(t, this, 'callback for immediate watcher \"' + r.expression + '\"');\n+          }\n+        return function () {\n+          r.teardown();\n+        };\n+      }),\n+      (mn = \u002F^hook:\u002F),\n+      ((q = _n).prototype.$on = function (t, e) {\n+        var n = this;\n+        if (Array.isArray(t)) for (var r = 0, o = t.length; r \u003C o; r++) n.$on(t[r], e);\n+        else (n._events[t] || (n._events[t] = [])).push(e), mn.test(t) && (n._hasHookEvent = !0);\n+        return n;\n+      }),\n+      (q.prototype.$once = function (t, e) {\n+        var n = this;\n+        function r() {\n+          n.$off(t, r), e.apply(n, arguments);\n+        }\n+        return (r.fn = e), n.$on(t, r), n;\n+      }),\n+      (q.prototype.$off = function (t, e) {\n+        var n = this;\n+        if (!arguments.length) return (n._events = Object.create(null)), n;\n+        if (Array.isArray(t)) {\n+          for (var r = 0, o = t.length; r \u003C o; r++) n.$off(t[r], e);\n+          return n;\n+        }\n+        var i,\n+            a = n._events[t];\n+        if (!a) return n;\n+        if (!e) return (n._events[t] = null), n;\n+        for (var s = a.length; s--; )\n+          if ((i = a[s]) === e || i.fn === e) {\n+            a.splice(s, 1);\n+            break;\n+          }\n+        return n;\n+      }),\n+      (q.prototype.$emit = function (t) {\n+        var e = this._events[t];\n+        if (e) {\n+          e = 1 \u003C e.length ? b(e) : e;\n+          for (var n = b(arguments, 1), r = 'event handler for \"' + t + '\"', o = 0, i = e.length; o \u003C i; o++) Ht(e[o], this, n, this, r);\n+        }\n+        return this;\n+      }),\n+      ((ht = _n).prototype._update = function (t, e) {\n+        var n = this,\n+            r = n.$el,\n+            o = n._vnode,\n+            i = qe(n);\n+        (n._vnode = t), (n.$el = o ? n.__patch__(o, t) : n.__patch__(n.$el, t, e, !1)), i(), r && (r.__vue__ = null), n.$el && (n.$el.__vue__ = n), n.$vnode && n.$parent && n.$vnode === n.$parent._vnode && (n.$parent.$el = n.$el);\n+      }),\n+      (ht.prototype.$forceUpdate = function () {\n+        this._watcher && this._watcher.update();\n+      }),\n+      (ht.prototype.$destroy = function () {\n+        var t = this;\n+        if (!t._isBeingDestroyed) {\n+          Ke(t, \"beforeDestroy\"), (t._isBeingDestroyed = !0);\n+          var e = t.$parent;\n+          !e || e._isBeingDestroyed || t.$options.abstract || v(e.$children, t), t._watcher && t._watcher.teardown();\n+          for (var n = t._watchers.length; n--; ) t._watchers[n].teardown();\n+          t._data.__ob__ && t._data.__ob__.vmCount--, (t._isDestroyed = !0), t.__patch__(t._vnode, null), Ke(t, \"destroyed\"), t.$off(), t.$el && (t.$el.__vue__ = null), t.$vnode && (t.$vnode.parent = null);\n+        }\n+      }),\n+      Oe((E = _n).prototype),\n+      (E.prototype.$nextTick = function (t) {\n+        return Yt(t, this);\n+      }),\n+      (E.prototype._render = function () {\n+        var t,\n+            e = this,\n+            n = e.$options,\n+            r = n.render,\n+            o = n._parentVnode;\n+        o && (e.$scopedSlots = fe(o.data.scopedSlots, e.$slots, e.$scopedSlots)), (e.$vnode = o);\n+        try {\n+          (De = e), (t = r.call(e._renderProxy, e.$createElement));\n+        } catch (n) {\n+          zt(n, e, \"render\"), (t = e._vnode);\n+        } finally {\n+          De = null;\n+        }\n+        return Array.isArray(t) && 1 === t.length && (t = t[0]), t instanceof dt || (t = vt()), (t.parent = o), t;\n+      });\n+  var kn,\n+      Cn,\n+      On = [String, RegExp, Array],\n+      W = {\n+        KeepAlive: {\n+          name: \"keep-alive\",\n+          abstract: !0,\n+          props: { include: On, exclude: On, max: [String, Number] },\n+          created: function () {\n+            (this.cache = Object.create(null)), (this.keys = []);\n+          },\n+          destroyed: function () {\n+            for (var t in this.cache) $n(this.cache, t, this.keys);\n+          },\n+          mounted: function () {\n+            var t = this;\n+            this.$watch(\"include\", function (e) {\n+              xn(t, function (t) {\n+                return wn(e, t);\n+              });\n+            }),\n+                this.$watch(\"exclude\", function (e) {\n+                  xn(t, function (t) {\n+                    return !wn(e, t);\n+                  });\n+                });\n+          },\n+          render: function () {\n+            var t = this.$slots.default,\n+                e = ze(t),\n+                n = e && e.componentOptions;\n+            if (n) {\n+              var r = bn(n),\n+                  o = this.include,\n+                  i = this.exclude;\n+              if ((o && (!r || !wn(o, r))) || (i && r && wn(i, r))) return e;\n+              (i = this.cache), (r = this.keys), (n = null == e.key ? n.Ctor.cid + (n.tag ? \"::\" + n.tag : \"\") : e.key);\n+              i[n] ? ((e.componentInstance = i[n].componentInstance), v(r, n), r.push(n)) : ((i[n] = e), r.push(n), this.max && r.length > parseInt(this.max) && $n(i, r[0], r, this._vnode)), (e.data.keepAlive = !0);\n+            }\n+            return e || (t && t[0]);\n+          },\n+        },\n+      };\n+  function An(t, e, n) {\n+    return (\"value\" === n && Sn(t) && \"button\" !== e) || (\"selected\" === n && \"option\" === t) || (\"checked\" === n && \"input\" === t) || (\"muted\" === n && \"video\" === t);\n+  }\n+  (kn = _n),\n+      (q = {\n+        get: function () {\n+          return M;\n+        },\n+      }),\n+      Object.defineProperty(kn, \"config\", q),\n+      (kn.util = { warn: st, extend: w, mergeOptions: It, defineReactive: Ct }),\n+      (kn.set = Ot),\n+      (kn.delete = At),\n+      (kn.nextTick = Yt),\n+      (kn.observable = function (t) {\n+        return kt(t), t;\n+      }),\n+      (kn.options = Object.create(null)),\n+      j.forEach(function (t) {\n+        kn.options[t + \"s\"] = Object.create(null);\n+      }),\n+      w((kn.options._base = kn).options.components, W),\n+      (kn.use = function (t) {\n+        var e = this._installedPlugins || (this._installedPlugins = []);\n+        if (-1 \u003C e.indexOf(t)) return this;\n+        var n = b(arguments, 1);\n+        return n.unshift(this), \"function\" == typeof t.install ? t.install.apply(t, n) : \"function\" == typeof t && t.apply(null, n), e.push(t), this;\n+      }),\n+      (kn.mixin = function (t) {\n+        return (this.options = It(this.options, t)), this;\n+      }),\n+      (function (t) {\n+        t.cid = 0;\n+        var a = 1;\n+        t.extend = function (t) {\n+          t = t || {};\n+          var e = this,\n+              n = e.cid,\n+              r = t._Ctor || (t._Ctor = {});\n+          if (r[n]) return r[n];\n+          function o(t) {\n+            this._init(t);\n+          }\n+          var i = t.name || e.options.name;\n+          return (\n+              (((o.prototype = Object.create(e.prototype)).constructor = o).cid = a++),\n+                  (o.options = It(e.options, t)),\n+                  (o.super = e),\n+              o.options.props &&\n+              (function (t) {\n+                for (var e in t.options.props) un(t.prototype, \"_props\", e);\n+              })(o),\n+              o.options.computed &&\n+              (function (t) {\n+                var e,\n+                    n = t.options.computed;\n+                for (e in n) pn(t.prototype, e, n[e]);\n+              })(o),\n+                  (o.extend = e.extend),\n+                  (o.mixin = e.mixin),\n+                  (o.use = e.use),\n+                  j.forEach(function (t) {\n+                    o[t] = e[t];\n+                  }),\n+              i && (o.options.components[i] = o),\n+                  (o.superOptions = e.options),\n+                  (o.extendOptions = t),\n+                  (o.sealedOptions = w({}, o.options)),\n+                  (r[n] = o)\n+          );\n+        };\n+      })(kn),\n+      (Cn = kn),\n+      j.forEach(function (n) {\n+        Cn[n] = function (t, e) {\n+          return e\n+              ? (\"component\" === n && c(e) && ((e.name = e.name || t), (e = this.options._base.extend(e))), \"directive\" === n && \"function\" == typeof e && (e = { bind: e, update: e }), (this.options[n + \"s\"][t] = e))\n+              : this.options[n + \"s\"][t];\n+        };\n+      }),\n+      Object.defineProperty(_n.prototype, \"$isServer\", { get: et }),\n+      Object.defineProperty(_n.prototype, \"$ssrContext\", {\n+        get: function () {\n+          return this.$vnode && this.$vnode.ssrContext;\n+        },\n+      }),\n+      Object.defineProperty(_n, \"FunctionalRenderContext\", { value: Ae }),\n+      (_n.version = \"2.6.10\");\n+  var ht = a(\"style,class\"),\n+      Sn = a(\"input,textarea,option,select,progress\"),\n+      Tn = a(\"contenteditable,draggable,spellcheck\"),\n+      jn = a(\"events,caret,typing,plaintext-only\"),\n+      En = function (t, e) {\n+        return Nn(e) || \"false\" === e ? \"false\" : \"contenteditable\" === t && jn(e) ? e : \"true\";\n+      },\n+      Mn = a(\n+          \"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"\n+      ),\n+      Pn = \"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\",\n+      In = function (t) {\n+        return \":\" === t.charAt(5) && \"xlink\" === t.slice(0, 5);\n+      },\n+      Ln = function (t) {\n+        return In(t) ? t.slice(6, t.length) : \"\";\n+      },\n+      Nn = function (t) {\n+        return null == t || !1 === t;\n+      };\n+  function Dn(t, e) {\n+    return { staticClass: Fn(t.staticClass, e.staticClass), class: I(t.class) ? [t.class, e.class] : e.class };\n+  }\n+  function Fn(t, e) {\n+    return t ? (e ? t + \" \" + e : t) : e || \"\";\n+  }\n+  function Rn(t) {\n+    return Array.isArray(t)\n+        ? (function (t) {\n+          for (var e, n = \"\", r = 0, o = t.length; r \u003C o; r++) I((e = Rn(t[r]))) && \"\" !== e && (n && (n += \" \"), (n += e));\n+          return n;\n+        })(t)\n+        : L(t)\n+            ? (function (t) {\n+              var e,\n+                  n = \"\";\n+              for (e in t) t[e] && (n && (n += \" \"), (n += e));\n+              return n;\n+            })(t)\n+            : \"string\" == typeof t\n+                ? t\n+                : \"\";\n+  }\n+  function zn(t) {\n+    return Un(t) || Bn(t);\n+  }\n+  var Hn = { svg: \"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\", math: \"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML\" },\n+      Un = a(\n+          \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"\n+      ),\n+      Bn = a(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\", !0);\n+  function Vn(t) {\n+    return Bn(t) ? \"svg\" : \"math\" === t ? \"math\" : void 0;\n+  }\n+  var Wn = Object.create(null),\n+      qn = a(\"text,number,password,search,email,tel,url\");\n+  function Jn(t) {\n+    return \"string\" != typeof t ? t : document.querySelector(t) || document.createElement(\"div\");\n+  }\n+  (E = Object.freeze({\n+    createElement: function (t, e) {\n+      var n = document.createElement(t);\n+      return \"select\" !== t || (e.data && e.data.attrs && void 0 !== e.data.attrs.multiple && n.setAttribute(\"multiple\", \"multiple\")), n;\n+    },\n+    createElementNS: function (t, e) {\n+      return document.createElementNS(Hn[t], e);\n+    },\n+    createTextNode: function (t) {\n+      return document.createTextNode(t);\n+    },\n+    createComment: function (t) {\n+      return document.createComment(t);\n+    },\n+    insertBefore: function (t, e, n) {\n+      t.insertBefore(e, n);\n+    },\n+    removeChild: function (t, e) {\n+      t.removeChild(e);\n+    },\n+    appendChild: function (t, e) {\n+      t.appendChild(e);\n+    },\n+    parentNode: function (t) {\n+      return t.parentNode;\n+    },\n+    nextSibling: function (t) {\n+      return t.nextSibling;\n+    },\n+    tagName: function (t) {\n+      return t.tagName;\n+    },\n+    setTextContent: function (t, e) {\n+      t.textContent = e;\n+    },\n+    setStyleScope: function (t, e) {\n+      t.setAttribute(e, \"\");\n+    },\n+  })),\n+      (On = {\n+        create: function (t, e) {\n+          Gn(e);\n+        },\n+        update: function (t, e) {\n+          t.data.ref !== e.data.ref && (Gn(t, !0), Gn(e));\n+        },\n+        destroy: function (t) {\n+          Gn(t, !0);\n+        },\n+      });\n+  function Gn(t, e) {\n+    var n,\n+        r,\n+        o = t.data.ref;\n+    I(o) &&\n+    ((r = t.context),\n+        (n = t.componentInstance || t.elm),\n+        (r = r.$refs),\n+        e ? (Array.isArray(r[o]) ? v(r[o], n) : r[o] === n && (r[o] = void 0)) : t.data.refInFor ? (Array.isArray(r[o]) ? r[o].indexOf(n) \u003C 0 && r[o].push(n) : (r[o] = [n])) : (r[o] = n));\n+  }\n+  var Kn = new dt(\"\", {}, []),\n+      Xn = [\"create\", \"activate\", \"update\", \"remove\", \"destroy\"];\n+  function Qn(n, r) {\n+    return (\n+        n.key === r.key &&\n+        ((n.tag === r.tag &&\n+            n.isComment === r.isComment &&\n+            I(n.data) === I(r.data) &&\n+            (function () {\n+              if (\"input\" !== n.tag) return 1;\n+              var t = I((e = n.data)) && I((e = e.attrs)) && e.type,\n+                  e = I((e = r.data)) && I((e = e.attrs)) && e.type;\n+              return t === e || (qn(t) && qn(e));\n+            })()) ||\n+            (O(n.isAsyncPlaceholder) && n.asyncFactory === r.asyncFactory && P(r.asyncFactory.error)))\n+    );\n+  }\n+  q = {\n+    create: Yn,\n+    update: Yn,\n+    destroy: function (t) {\n+      Yn(t, Kn);\n+    },\n+  };\n+  function Yn(t, e) {\n+    (t.data.directives || e.data.directives) &&\n+    (function (e, n) {\n+      var t,\n+          r,\n+          o,\n+          i,\n+          a = e === Kn,\n+          s = n === Kn,\n+          c = tr(e.data.directives, e.context),\n+          l = tr(n.data.directives, n.context),\n+          u = [],\n+          f = [];\n+      for (t in l) (r = c[t]), (o = l[t]), r ? ((o.oldValue = r.value), (o.oldArg = r.arg), er(o, \"update\", n, e), o.def && o.def.componentUpdated && f.push(o)) : (er(o, \"bind\", n, e), o.def && o.def.inserted && u.push(o));\n+      if (\n+          (u.length &&\n+          ((i = function () {\n+            for (var t = 0; t \u003C u.length; t++) er(u[t], \"inserted\", n, e);\n+          }),\n+              a ? oe(n, \"insert\", i) : i()),\n+          f.length &&\n+          oe(n, \"postpatch\", function () {\n+            for (var t = 0; t \u003C f.length; t++) er(f[t], \"componentUpdated\", n, e);\n+          }),\n+              !a)\n+      )\n+        for (t in c) l[t] || er(c[t], \"unbind\", e, e, s);\n+    })(t, e);\n+  }\n+  var Zn = Object.create(null);\n+  function tr(t, e) {\n+    var n,\n+        r,\n+        o = Object.create(null);\n+    if (!t) return o;\n+    for (n = 0; n \u003C t.length; n++) (r = t[n]).modifiers || (r.modifiers = Zn), ((o[r.rawName || r.name + \".\" + Object.keys(r.modifiers || {}).join(\".\")] = r).def = Lt(e.$options, \"directives\", r.name));\n+    return o;\n+  }\n+  function er(t, e, n, r, o) {\n+    var i = t.def && t.def[e];\n+    if (i)\n+      try {\n+        i(n.elm, t, n, r, o);\n+      } catch (r) {\n+        zt(r, n.context, \"directive \" + t.name + \" \" + e + \" hook\");\n+      }\n+  }\n+  st = [On, q];\n+  function nr(t, e) {\n+    var n = e.componentOptions;\n+    if (!((I(n) && !1 === n.Ctor.options.inheritAttrs) || (P(t.data.attrs) && P(e.data.attrs)))) {\n+      var r,\n+          o,\n+          i = e.elm,\n+          a = t.data.attrs || {},\n+          s = e.data.attrs || {};\n+      for (r in (I(s.__ob__) && (s = e.data.attrs = w({}, s)), s)) (o = s[r]), a[r] !== o && rr(i, r, o);\n+      for (r in ((J || K) && s.value !== a.value && rr(i, \"value\", s.value), a)) P(s[r]) && (In(r) ? i.removeAttributeNS(Pn, Ln(r)) : Tn(r) || i.removeAttribute(r));\n+    }\n+  }\n+  function rr(t, e, n) {\n+    -1 \u003C t.tagName.indexOf(\"-\")\n+        ? or(t, e, n)\n+        : Mn(e)\n+        ? Nn(n)\n+            ? t.removeAttribute(e)\n+            : ((n = \"allowfullscreen\" === e && \"EMBED\" === t.tagName ? \"true\" : e), t.setAttribute(e, n))\n+        : Tn(e)\n+            ? t.setAttribute(e, En(e, n))\n+            : In(e)\n+                ? Nn(n)\n+                    ? t.removeAttributeNS(Pn, Ln(e))\n+                    : t.setAttributeNS(Pn, e, n)\n+                : or(t, e, n);\n+  }\n+  function or(e, t, n) {\n+    var r;\n+    Nn(n)\n+        ? e.removeAttribute(t)\n+        : (!J ||\n+        G ||\n+        \"TEXTAREA\" !== e.tagName ||\n+        \"placeholder\" !== t ||\n+        \"\" === n ||\n+        e.__ieph ||\n+        ((r = function (t) {\n+          t.stopImmediatePropagation(), e.removeEventListener(\"input\", r);\n+        }),\n+            e.addEventListener(\"input\", r),\n+            (e.__ieph = !0)),\n+            e.setAttribute(t, n));\n+  }\n+  W = { create: nr, update: nr };\n+  function ir(t, i) {\n+    var e = i.elm,\n+        n = i.data,\n+        t = t.data;\n+    (P(n.staticClass) && P(n.class) && (P(t) || (P(t.staticClass) && P(t.class)))) ||\n+    ((n = (function () {\n+      for (var t, e, n = i.data, r = i, o = i; I(o.componentInstance); ) (o = o.componentInstance._vnode) && o.data && (n = Dn(o.data, n));\n+      for (; I((r = r.parent)); ) r && r.data && (n = Dn(n, r.data));\n+      return (t = n.staticClass), (e = n.class), I(t) || I(e) ? Fn(t, Rn(e)) : \"\";\n+    })()),\n+    I((t = e._transitionClasses)) && (n = Fn(n, Rn(t))),\n+    n !== e._prevClass && (e.setAttribute(\"class\", n), (e._prevClass = n)));\n+  }\n+  var ar,\n+      sr,\n+      cr,\n+      lr,\n+      ur,\n+      fr,\n+      On = { create: ir, update: ir },\n+      pr = \u002F[\\w).+\\-_$\\]]\u002F;\n+  function dr(t) {\n+    for (var e, n, r, o, i = !1, a = !1, s = !1, c = !1, l = 0, u = 0, f = 0, p = 0, d = 0; d \u003C t.length; d++)\n+      if (((n = e), (e = t.charCodeAt(d)), i)) 39 === e && 92 !== n && (i = !1);\n+      else if (a) 34 === e && 92 !== n && (a = !1);\n+      else if (s) 96 === e && 92 !== n && (s = !1);\n+      else if (c) 47 === e && 92 !== n && (c = !1);\n+      else if (124 !== e || 124 === t.charCodeAt(d + 1) || 124 === t.charCodeAt(d - 1) || l || u || f) {\n+        switch (e) {\n+        case 34:\n+          a = !0;\n+          break;\n+        case 39:\n+          i = !0;\n+          break;\n+        case 96:\n+          s = !0;\n+          break;\n+        case 40:\n+          f++;\n+          break;\n+        case 41:\n+          f--;\n+          break;\n+        case 91:\n+          u++;\n+          break;\n+        case 93:\n+          u--;\n+          break;\n+        case 123:\n+          l++;\n+          break;\n+        case 125:\n+          l--;\n+        }\n+        if (47 === e) {\n+          for (var h = d - 1, v = void 0; 0 \u003C= h && \" \" === (v = t.charAt(h)); h--);\n+          (v && pr.test(v)) || (c = !0);\n+        }\n+      } else void 0 === r ? ((p = d + 1), (r = t.slice(0, d).trim())) : m();\n+    function m() {\n+      (o = o || []).push(t.slice(p, d).trim()), (p = d + 1);\n+    }\n+    if ((void 0 === r ? (r = t.slice(0, d).trim()) : 0 !== p && m(), o))\n+      for (d = 0; d \u003C o.length; d++)\n+        r = (function (t, e) {\n+          var n = e.indexOf(\"(\");\n+          if (n \u003C 0) return '_f(\"' + e + '\")(' + t + \")\";\n+          var r = e.slice(0, n),\n+              n = e.slice(n + 1);\n+          return '_f(\"' + r + '\")(' + t + (\")\" !== n ? \",\" + n : n);\n+        })(r, o[d]);\n+    return r;\n+  }\n+  function hr(t, e) {\n+    console.error(\"[Vue compiler]: \" + t);\n+  }\n+  function vr(t, e) {\n+    return t\n+        ? t\n+        .map(function (t) {\n+          return t[e];\n+        })\n+        .filter(function (t) {\n+          return t;\n+        })\n+        : [];\n+  }\n+  function mr(t, e, n, r, o) {\n+    (t.props || (t.props = [])).push(kr({ name: e, value: n, dynamic: o }, r)), (t.plain = !1);\n+  }\n+  function yr(t, e, n, r, o) {\n+    (o ? t.dynamicAttrs || (t.dynamicAttrs = []) : t.attrs || (t.attrs = [])).push(kr({ name: e, value: n, dynamic: o }, r)), (t.plain = !1);\n+  }\n+  function gr(t, e, n, r) {\n+    (t.attrsMap[e] = n), t.attrsList.push(kr({ name: e, value: n }, r));\n+  }\n+  function _r(t, e, n) {\n+    return n ? \"_p(\" + e + ',\"' + t + '\")' : t + e;\n+  }\n+  function br(t, e, n, r, o, i, a, s) {\n+    var c;\n+    (r = r || d).right\n+        ? s\n+        ? (e = \"(\" + e + \")==='click'?'contextmenu':(\" + e + \")\")\n+        : \"click\" === e && ((e = \"contextmenu\"), delete r.right)\n+        : r.middle && (s ? (e = \"(\" + e + \")==='click'?'mouseup':(\" + e + \")\") : \"click\" === e && (e = \"mouseup\")),\n+    r.capture && (delete r.capture, (e = _r(\"!\", e, s))),\n+    r.once && (delete r.once, (e = _r(\"~\", e, s))),\n+    r.passive && (delete r.passive, (e = _r(\"&\", e, s))),\n+        (c = r.native ? (delete r.native, t.nativeEvents || (t.nativeEvents = {})) : t.events || (t.events = {}));\n+    a = kr({ value: n.trim(), dynamic: s }, a);\n+    r !== d && (a.modifiers = r);\n+    r = c[e];\n+    Array.isArray(r) ? (o ? r.unshift(a) : r.push(a)) : (c[e] = r ? (o ? [a, r] : [r, a]) : a), (t.plain = !1);\n+  }\n+  function wr(t, e, n) {\n+    var r = xr(t, \":\" + e) || xr(t, \"v-bind:\" + e);\n+    if (null != r) return dr(r);\n+    if (!1 !== n) {\n+      e = xr(t, e);\n+      if (null != e) return JSON.stringify(e);\n+    }\n+  }\n+  function xr(t, e, n) {\n+    var r;\n+    if (null != (r = t.attrsMap[e]))\n+      for (var o = t.attrsList, i = 0, a = o.length; i \u003C a; i++)\n+        if (o[i].name === e) {\n+          o.splice(i, 1);\n+          break;\n+        }\n+    return n && delete t.attrsMap[e], r;\n+  }\n+  function $r(t, e) {\n+    for (var n = t.attrsList, r = 0, o = n.length; r \u003C o; r++) {\n+      var i = n[r];\n+      if (e.test(i.name)) return n.splice(r, 1), i;\n+    }\n+  }\n+  function kr(t, e) {\n+    return e && (null != e.start && (t.start = e.start), null != e.end && (t.end = e.end)), t;\n+  }\n+  function Cr(t, e, n) {\n+    var r = n || {},\n+        n = r.trim ? \"(typeof $$v === 'string'? $$v.trim(): $$v)\" : \"$$v\";\n+    r.number && (n = \"_n(\" + n + \")\");\n+    n = Or(e, n);\n+    t.model = { value: \"(\" + e + \")\", expression: JSON.stringify(e), callback: \"function ($$v) {\" + n + \"}\" };\n+  }\n+  function Or(t, e) {\n+    var n = (function (t) {\n+      if (((t = t.trim()), (ar = t.length), t.indexOf(\"[\") \u003C 0 || t.lastIndexOf(\"]\") \u003C ar - 1)) return -1 \u003C (lr = t.lastIndexOf(\".\")) ? { exp: t.slice(0, lr), key: '\"' + t.slice(lr + 1) + '\"' } : { exp: t, key: null };\n+      for (sr = t, lr = ur = fr = 0; !Sr(); )\n+        Tr((cr = Ar()))\n+            ? jr(cr)\n+            : 91 === cr &&\n+            (function (t) {\n+              var e = 1;\n+              for (ur = lr; !Sr(); )\n+                if (Tr((t = Ar()))) jr(t);\n+                else if ((91 === t && e++, 93 === t && e--, 0 === e)) {\n+                  fr = lr;\n+                  break;\n+                }\n+            })(cr);\n+      return { exp: t.slice(0, ur), key: t.slice(ur + 1, fr) };\n+    })(t);\n+    return null === n.key ? t + \"=\" + e : \"$set(\" + n.exp + \", \" + n.key + \", \" + e + \")\";\n+  }\n+  function Ar() {\n+    return sr.charCodeAt(++lr);\n+  }\n+  function Sr() {\n+    return ar \u003C= lr;\n+  }\n+  function Tr(t) {\n+    return 34 === t || 39 === t;\n+  }\n+  function jr(t) {\n+    for (var e = t; !Sr() && (t = Ar()) !== e; );\n+  }\n+  var Er;\n+  function Mr(e, n, r) {\n+    var o = Er;\n+    return function t() {\n+      null !== n.apply(null, arguments) && Lr(e, t, r, o);\n+    };\n+  }\n+  var Pr = Gt && !(Q && Number(Q[1]) \u003C= 53);\n+  function Ir(t, e, n, r) {\n+    var o, i;\n+    Pr &&\n+    ((o = rn),\n+        (e = (i = e)._wrapper = function (t) {\n+          if (t.target === t.currentTarget || t.timeStamp >= o || t.timeStamp \u003C= 0 || t.target.ownerDocument !== document) return i.apply(this, arguments);\n+        })),\n+        Er.addEventListener(t, e, Z ? { capture: n, passive: r } : n);\n+  }\n+  function Lr(t, e, n, r) {\n+    (r || Er).removeEventListener(t, e._wrapper || e, n);\n+  }\n+  function Nr(t, e) {\n+    var n, r, o;\n+    (P(t.data.on) && P(e.data.on)) ||\n+    ((n = e.data.on || {}),\n+        (r = t.data.on || {}),\n+        (Er = e.elm),\n+    I((o = n).__r) && ((o[(t = J ? \"change\" : \"input\")] = [].concat(o.__r, o[t] || [])), delete o.__r),\n+    I(o.__c) && ((o.change = [].concat(o.__c, o.change || [])), delete o.__c),\n+        re(n, r, Ir, Lr, Mr, e.context),\n+        (Er = void 0));\n+  }\n+  var Dr,\n+      q = { create: Nr, update: Nr };\n+  function Fr(t, e) {\n+    if (!P(t.data.domProps) || !P(e.data.domProps)) {\n+      var n,\n+          r,\n+          o = e.elm,\n+          i = t.data.domProps || {},\n+          a = e.data.domProps || {};\n+      for (n in (I(a.__ob__) && (a = e.data.domProps = w({}, a)), i)) n in a || (o[n] = \"\");\n+      for (n in a) {\n+        if (((r = a[n]), \"textContent\" === n || \"innerHTML\" === n)) {\n+          if ((e.children && (e.children.length = 0), r === i[n])) continue;\n+          1 === o.childNodes.length && o.removeChild(o.childNodes[0]);\n+        }\n+        if (\"value\" === n && \"PROGRESS\" !== o.tagName) {\n+          var s = P((o._value = r)) ? \"\" : String(r),\n+              c = s;\n+          (u = o).composing ||\n+          (\"OPTION\" !== u.tagName &&\n+              !(function (t, e) {\n+                var n = !0;\n+                try {\n+                  n = document.activeElement !== t;\n+                } catch (t) {}\n+                return n && t.value !== e;\n+              })(u, c) &&\n+              !(function (t) {\n+                var e = u.value,\n+                    n = u._vModifiers;\n+                if (I(n)) {\n+                  if (n.number) return N(e) !== N(t);\n+                  if (n.trim) return e.trim() !== t.trim();\n+                }\n+                return e !== t;\n+              })(c)) ||\n+          (o.value = s);\n+        } else if (\"innerHTML\" === n && Bn(o.tagName) && P(o.innerHTML)) {\n+          (Dr = Dr || document.createElement(\"div\")).innerHTML = \"\u003Csvg>\" + r + \"\u003C\u002Fsvg>\";\n+          for (var l = Dr.firstChild; o.firstChild; ) o.removeChild(o.firstChild);\n+          for (; l.firstChild; ) o.appendChild(l.firstChild);\n+        } else if (r !== i[n])\n+          try {\n+            o[n] = r;\n+          } catch (t) {}\n+      }\n+    }\n+    var u, c;\n+  }\n+  var Gt = { create: Fr, update: Fr },\n+      Rr = t(function (t) {\n+        var e = {},\n+            n = \u002F:(.+)\u002F;\n+        return (\n+            t.split(\u002F;(?![^(]*\\))\u002Fg).forEach(function (t) {\n+              !t || (1 \u003C (t = t.split(n)).length && (e[t[0].trim()] = t[1].trim()));\n+            }),\n+                e\n+        );\n+      });\n+  function zr(t) {\n+    var e = Hr(t.style);\n+    return t.staticStyle ? w(t.staticStyle, e) : e;\n+  }\n+  function Hr(t) {\n+    return Array.isArray(t) ? x(t) : \"string\" == typeof t ? Rr(t) : t;\n+  }\n+  function Ur(t, e, n) {\n+    if (Vr.test(e)) t.style.setProperty(e, n);\n+    else if (Wr.test(n)) t.style.setProperty(g(e), n.replace(Wr, \"\"), \"important\");\n+    else {\n+      var r = Jr(e);\n+      if (Array.isArray(n)) for (var o = 0, i = n.length; o \u003C i; o++) t.style[r] = n[o];\n+      else t.style[r] = n;\n+    }\n+  }\n+  var Br,\n+      Vr = \u002F^--\u002F,\n+      Wr = \u002F\\s*!important$\u002F,\n+      qr = [\"Webkit\", \"Moz\", \"ms\"],\n+      Jr = t(function (t) {\n+        if (((Br = Br || document.createElement(\"div\").style), \"filter\" !== (t = m(t)) && t in Br)) return t;\n+        for (var e = t.charAt(0).toUpperCase() + t.slice(1), n = 0; n \u003C qr.length; n++) {\n+          var r = qr[n] + e;\n+          if (r in Br) return r;\n+        }\n+      });\n+  function Gr(t, e) {\n+    var n = e.data,\n+        t = t.data;\n+    if (!(P(n.staticStyle) && P(n.style) && P(t.staticStyle) && P(t.style))) {\n+      var r,\n+          o,\n+          i = e.elm,\n+          n = t.staticStyle,\n+          t = t.normalizedStyle || t.style || {},\n+          a = n || t,\n+          t = Hr(e.data.style) || {};\n+      e.data.normalizedStyle = I(t.__ob__) ? w({}, t) : t;\n+      var s = (function (t) {\n+        for (var e, n = {}, r = t; r.componentInstance; ) (r = r.componentInstance._vnode) && r.data && (e = zr(r.data)) && w(n, e);\n+        (e = zr(t.data)) && w(n, e);\n+        for (var o = t; (o = o.parent); ) o.data && (e = zr(o.data)) && w(n, e);\n+        return n;\n+      })(e);\n+      for (o in a) P(s[o]) && Ur(i, o, \"\");\n+      for (o in s) (r = s[o]) !== a[o] && Ur(i, o, null == r ? \"\" : r);\n+    }\n+  }\n+  var Q = { create: Gr, update: Gr },\n+      Kr = \u002F\\s+\u002F;\n+  function Xr(e, t) {\n+    var n;\n+    (t = t && t.trim()) &&\n+    (e.classList\n+        ? -1 \u003C t.indexOf(\" \")\n+            ? t.split(Kr).forEach(function (t) {\n+              return e.classList.add(t);\n+            })\n+            : e.classList.add(t)\n+        : (n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \").indexOf(\" \" + t + \" \") \u003C 0 && e.setAttribute(\"class\", (n + t).trim()));\n+  }\n+  function Qr(e, t) {\n+    if ((t = t && t.trim()))\n+      if (e.classList)\n+        -1 \u003C t.indexOf(\" \")\n+            ? t.split(Kr).forEach(function (t) {\n+              return e.classList.remove(t);\n+            })\n+            : e.classList.remove(t),\n+        e.classList.length || e.removeAttribute(\"class\");\n+      else {\n+        for (var n = \" \" + (e.getAttribute(\"class\") || \"\") + \" \", r = \" \" + t + \" \"; 0 \u003C= n.indexOf(r); ) n = n.replace(r, \" \");\n+        (n = n.trim()) ? e.setAttribute(\"class\", n) : e.removeAttribute(\"class\");\n+      }\n+  }\n+  function Yr(t) {\n+    if (t) {\n+      if (\"object\" != typeof t) return \"string\" == typeof t ? Zr(t) : void 0;\n+      var e = {};\n+      return !1 !== t.css && w(e, Zr(t.name || \"v\")), w(e, t), e;\n+    }\n+  }\n+  var Zr = t(function (t) {\n+        return { enterClass: t + \"-enter\", enterToClass: t + \"-enter-to\", enterActiveClass: t + \"-enter-active\", leaveClass: t + \"-leave\", leaveToClass: t + \"-leave-to\", leaveActiveClass: t + \"-leave-active\" };\n+      }),\n+      to = B && !G,\n+      eo = \"transition\",\n+      no = \"animation\",\n+      ro = \"transition\",\n+      oo = \"transitionend\",\n+      io = \"animation\",\n+      ao = \"animationend\";\n+  to &&\n+  (void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend && ((ro = \"WebkitTransition\"), (oo = \"webkitTransitionEnd\")),\n+  void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend && ((io = \"WebkitAnimation\"), (ao = \"webkitAnimationEnd\")));\n+  var so = B\n+      ? window.requestAnimationFrame\n+          ? window.requestAnimationFrame.bind(window)\n+          : setTimeout\n+      : function (t) {\n+        return t();\n+      };\n+  function co(t) {\n+    so(function () {\n+      so(t);\n+    });\n+  }\n+  function lo(t, e) {\n+    var n = t._transitionClasses || (t._transitionClasses = []);\n+    n.indexOf(e) \u003C 0 && (n.push(e), Xr(t, e));\n+  }\n+  function uo(t, e) {\n+    t._transitionClasses && v(t._transitionClasses, e), Qr(t, e);\n+  }\n+  function fo(e, t, n) {\n+    var r = ho(e, t),\n+        o = r.type,\n+        t = r.timeout,\n+        i = r.propCount;\n+    if (!o) return n();\n+    function a() {\n+      e.removeEventListener(s, l), n();\n+    }\n+    var s = o === eo ? oo : ao,\n+        c = 0,\n+        l = function (t) {\n+          t.target === e && ++c >= i && a();\n+        };\n+    setTimeout(function () {\n+      c \u003C i && a();\n+    }, t + 1),\n+        e.addEventListener(s, l);\n+  }\n+  var po = \u002F\\b(transform|all)(,|$)\u002F;\n+  function ho(t, e) {\n+    var n,\n+        r = window.getComputedStyle(t),\n+        o = (r[ro + \"Delay\"] || \"\").split(\", \"),\n+        i = (r[ro + \"Duration\"] || \"\").split(\", \"),\n+        a = vo(o, i),\n+        s = (r[io + \"Delay\"] || \"\").split(\", \"),\n+        c = (r[io + \"Duration\"] || \"\").split(\", \"),\n+        t = vo(s, c),\n+        o = 0,\n+        s = 0;\n+    return (\n+        e === eo ? 0 \u003C a && ((n = eo), (o = a), (s = i.length)) : e === no ? 0 \u003C t && ((n = no), (o = t), (s = c.length)) : (s = (n = 0 \u003C (o = Math.max(a, t)) ? (t \u003C a ? eo : no) : null) ? (n === eo ? i : c).length : 0),\n+            { type: n, timeout: o, propCount: s, hasTransform: n === eo && po.test(r[ro + \"Property\"]) }\n+    );\n+  }\n+  function vo(n, t) {\n+    for (; n.length \u003C t.length; ) n = n.concat(n);\n+    return Math.max.apply(\n+        null,\n+        t.map(function (t, e) {\n+          return mo(t) + mo(n[e]);\n+        })\n+    );\n+  }\n+  function mo(t) {\n+    return 1e3 * Number(t.slice(0, -1).replace(\",\", \".\"));\n+  }\n+  function yo(e, t) {\n+    var n = e.elm;\n+    I(n._leaveCb) && ((n._leaveCb.cancelled = !0), n._leaveCb());\n+    var r = Yr(e.data.transition);\n+    if (!P(r) && !I(n._enterCb) && 1 === n.nodeType) {\n+      for (\n+          var o = r.css,\n+              i = r.type,\n+              a = r.enterClass,\n+              s = r.enterToClass,\n+              c = r.enterActiveClass,\n+              l = r.appearClass,\n+              u = r.appearToClass,\n+              f = r.appearActiveClass,\n+              p = r.beforeEnter,\n+              d = r.enter,\n+              h = r.afterEnter,\n+              v = r.enterCancelled,\n+              m = r.beforeAppear,\n+              y = r.appear,\n+              g = r.afterAppear,\n+              _ = r.appearCancelled,\n+              b = r.duration,\n+              w = We,\n+              x = We.$vnode;\n+          x && x.parent;\n+\n+      )\n+        (w = x.context), (x = x.parent);\n+      var $,\n+          k,\n+          C,\n+          O,\n+          A,\n+          S,\n+          T,\n+          j,\n+          E,\n+          M,\n+          r = !w._isMounted || !e.isRootInsert;\n+      (r && !y && \"\" !== y) ||\n+      (($ = r && l ? l : a),\n+          (k = r && f ? f : c),\n+          (C = r && u ? u : s),\n+          (p = (r && m) || p),\n+          (O = r && \"function\" == typeof y ? y : d),\n+          (A = (r && g) || h),\n+          (S = (r && _) || v),\n+          (T = N(L(b) ? b.enter : b)),\n+          (j = !1 !== o && !G),\n+          (E = bo(O)),\n+          (M = n._enterCb = D(function () {\n+            j && (uo(n, C), uo(n, k)), M.cancelled ? (j && uo(n, $), S && S(n)) : A && A(n), (n._enterCb = null);\n+          })),\n+      e.data.show ||\n+      oe(e, \"insert\", function () {\n+        var t = n.parentNode,\n+            t = t && t._pending && t._pending[e.key];\n+        t && t.tag === e.tag && t.elm._leaveCb && t.elm._leaveCb(), O && O(n, M);\n+      }),\n+      p && p(n),\n+      j &&\n+      (lo(n, $),\n+          lo(n, k),\n+          co(function () {\n+            uo(n, $), M.cancelled || (lo(n, C), E || (_o(T) ? setTimeout(M, T) : fo(n, i, M)));\n+          })),\n+      e.data.show && (t && t(), O && O(n, M)),\n+      j || E || M());\n+    }\n+  }\n+  function go(t, e) {\n+    var n = t.elm;\n+    I(n._enterCb) && ((n._enterCb.cancelled = !0), n._enterCb());\n+    var r,\n+        o,\n+        i,\n+        a,\n+        s,\n+        c,\n+        l,\n+        u,\n+        f,\n+        p,\n+        d,\n+        h,\n+        v,\n+        m,\n+        y = Yr(t.data.transition);\n+    if (P(y) || 1 !== n.nodeType) return e();\n+    function g() {\n+      m.cancelled ||\n+      (!t.data.show && n.parentNode && ((n.parentNode._pending || (n.parentNode._pending = {}))[t.key] = t),\n+      c && c(n),\n+      d &&\n+      (lo(n, i),\n+          lo(n, s),\n+          co(function () {\n+            uo(n, i), m.cancelled || (lo(n, a), h || (_o(v) ? setTimeout(m, v) : fo(n, o, m)));\n+          })),\n+      l && l(n, m),\n+      d || h || m());\n+    }\n+    I(n._leaveCb) ||\n+    ((r = y.css),\n+        (o = y.type),\n+        (i = y.leaveClass),\n+        (a = y.leaveToClass),\n+        (s = y.leaveActiveClass),\n+        (c = y.beforeLeave),\n+        (l = y.leave),\n+        (u = y.afterLeave),\n+        (f = y.leaveCancelled),\n+        (p = y.delayLeave),\n+        (y = y.duration),\n+        (d = !1 !== r && !G),\n+        (h = bo(l)),\n+        (v = N(L(y) ? y.leave : y)),\n+        (m = n._leaveCb = D(function () {\n+          n.parentNode && n.parentNode._pending && (n.parentNode._pending[t.key] = null), d && (uo(n, a), uo(n, s)), m.cancelled ? (d && uo(n, i), f && f(n)) : (e(), u && u(n)), (n._leaveCb = null);\n+        })),\n+        p ? p(g) : g());\n+  }\n+  function _o(t) {\n+    return \"number\" == typeof t && !isNaN(t);\n+  }\n+  function bo(t) {\n+    if (P(t)) return !1;\n+    var e = t.fns;\n+    return I(e) ? bo(Array.isArray(e) ? e[0] : e) : 1 \u003C (t._length || t.length);\n+  }\n+  function wo(t, e) {\n+    !0 !== e.data.show && yo(e);\n+  }\n+  q = (function (t) {\n+    for (var e, h = {}, n = t.modules, g = t.nodeOps, r = 0; r \u003C Xn.length; ++r) for (h[Xn[r]] = [], e = 0; e \u003C n.length; ++e) I(n[e][Xn[r]]) && h[Xn[r]].push(n[e][Xn[r]]);\n+    function i(t) {\n+      var e = g.parentNode(t);\n+      I(e) && g.removeChild(e, t);\n+    }\n+    function _(t, e, n, r, o, i, a) {\n+      I(t.elm) && I(i) && (t = i[a] = yt(t)),\n+          (t.isRootInsert = !o),\n+      (function (t, e, n, r) {\n+        var o = t.data;\n+        if (I(o)) {\n+          var i = I(t.componentInstance) && o.keepAlive;\n+          return (I((o = o.hook)) && I((o = o.init)) && o(t, !1), I(t.componentInstance))\n+              ? (d(t, e),\n+                  s(n, t.elm, r),\n+              O(i) &&\n+              (function (t, e, n, r) {\n+                for (var o, i = t; i.componentInstance; )\n+                  if (I((o = (i = i.componentInstance._vnode).data)) && I((o = o.transition))) {\n+                    for (o = 0; o \u003C h.activate.length; ++o) h.activate[o](Kn, i);\n+                    e.push(i);\n+                    break;\n+                  }\n+                s(n, t.elm, r);\n+              })(t, e, n, r),\n+                  1)\n+              : void 0;\n+        }\n+      })(t, e, n, r) ||\n+      ((i = t.data),\n+          (a = t.children),\n+          I((o = t.tag)) ? ((t.elm = t.ns ? g.createElementNS(t.ns, o) : g.createElement(o, t)), c(t), v(t, a, e), I(i) && m(t, e)) : O(t.isComment) ? (t.elm = g.createComment(t.text)) : (t.elm = g.createTextNode(t.text)),\n+          s(n, t.elm, r));\n+    }\n+    function d(t, e) {\n+      I(t.data.pendingInsert) && (e.push.apply(e, t.data.pendingInsert), (t.data.pendingInsert = null)), (t.elm = t.componentInstance.$el), b(t) ? (m(t, e), c(t)) : (Gn(t), e.push(t));\n+    }\n+    function s(t, e, n) {\n+      I(t) && (I(n) ? g.parentNode(n) === t && g.insertBefore(t, e, n) : g.appendChild(t, e));\n+    }\n+    function v(t, e, n) {\n+      if (Array.isArray(e)) for (var r = 0; r \u003C e.length; ++r) _(e[r], n, t.elm, null, !0, e, r);\n+      else l(t.text) && g.appendChild(t.elm, g.createTextNode(String(t.text)));\n+    }\n+    function b(t) {\n+      for (; t.componentInstance; ) t = t.componentInstance._vnode;\n+      return I(t.tag);\n+    }\n+    function m(t, e) {\n+      for (var n = 0; n \u003C h.create.length; ++n) h.create[n](Kn, t);\n+      I((r = t.data.hook)) && (I(r.create) && r.create(Kn, t), I(r.insert) && e.push(t));\n+    }\n+    function c(t) {\n+      var e;\n+      if (I((e = t.fnScopeId))) g.setStyleScope(t.elm, e);\n+      else for (var n = t; n; ) I((e = n.context)) && I((e = e.$options._scopeId)) && g.setStyleScope(t.elm, e), (n = n.parent);\n+      I((e = We)) && e !== t.context && e !== t.fnContext && I((e = e.$options._scopeId)) && g.setStyleScope(t.elm, e);\n+    }\n+    function w(t, e, n, r, o, i) {\n+      for (; r \u003C= o; ++r) _(n[r], i, t, e, !1, n, r);\n+    }\n+    function y(t) {\n+      var e,\n+          n,\n+          r = t.data;\n+      if (I(r)) for (I((e = r.hook)) && I((e = e.destroy)) && e(t), e = 0; e \u003C h.destroy.length; ++e) h.destroy[e](t);\n+      if (I((e = t.children))) for (n = 0; n \u003C t.children.length; ++n) y(t.children[n]);\n+    }\n+    function x(t, e, n, r) {\n+      for (; n \u003C= r; ++n) {\n+        var o = e[n];\n+        I(o) &&\n+        (I(o.tag)\n+            ? ((function t(e, n) {\n+              if (I(n) || I(e.data)) {\n+                var r,\n+                    o = h.remove.length + 1;\n+                for (\n+                    I(n)\n+                        ? (n.listeners += o)\n+                        : (n = (function (t) {\n+                          function e() {\n+                            0 == --e.listeners && i(t);\n+                          }\n+                          return (e.listeners = o), e;\n+                        })(e.elm)),\n+                    I((r = e.componentInstance)) && I((r = r._vnode)) && I(r.data) && t(r, n),\n+                        r = 0;\n+                    r \u003C h.remove.length;\n+                    ++r\n+                )\n+                  h.remove[r](e, n);\n+                I((r = e.data.hook)) && I((r = r.remove)) ? r(e, n) : n();\n+              } else i(e.elm);\n+            })(o),\n+                y(o))\n+            : i(o.elm));\n+      }\n+    }\n+    function $(t, e, n) {\n+      if (O(n) && I(t.parent)) t.parent.data.pendingInsert = e;\n+      else for (var r = 0; r \u003C e.length; ++r) e[r].data.hook.insert(e[r]);\n+    }\n+    var k = a(\"attrs,class,staticClass,staticStyle,key\");\n+    function C(t, e, n, r) {\n+      var o,\n+          i = e.tag,\n+          a = e.data,\n+          s = e.children;\n+      if (((r = r || (a && a.pre)), (e.elm = t), O(e.isComment) && I(e.asyncFactory))) return (e.isAsyncPlaceholder = !0);\n+      if (I(a) && (I((o = a.hook)) && I((o = o.init)) && o(e, !0), I((o = e.componentInstance)))) return d(e, n), 1;\n+      if (I(i)) {\n+        if (I(s))\n+          if (t.hasChildNodes())\n+            if (I((o = a)) && I((o = o.domProps)) && I((o = o.innerHTML))) {\n+              if (o !== t.innerHTML) return;\n+            } else {\n+              for (var c = !0, l = t.firstChild, u = 0; u \u003C s.length; u++) {\n+                if (!l || !C(l, s[u], n, r)) {\n+                  c = !1;\n+                  break;\n+                }\n+                l = l.nextSibling;\n+              }\n+              if (!c || l) return;\n+            }\n+          else v(e, s, n);\n+        if (I(a)) {\n+          var f,\n+              p = !1;\n+          for (f in a)\n+            if (!k(f)) {\n+              (p = !0), m(e, n);\n+              break;\n+            }\n+          !p && a.class && te(a.class);\n+        }\n+      } else t.data !== e.text && (t.data = e.text);\n+      return 1;\n+    }\n+    return function (t, e, n, r) {\n+      if (!P(e)) {\n+        var o = !1,\n+            i = [];\n+        if (P(t)) (o = !0), _(e, i);\n+        else {\n+          var a = I(t.nodeType);\n+          if (!a && Qn(t, e))\n+            !(function m(t, e, n, r, o, y) {\n+              if (t !== e) {\n+                I(e.elm) && I(r) && (e = r[o] = yt(e));\n+                var i = (e.elm = t.elm);\n+                if (O(t.isAsyncPlaceholder)) I(e.asyncFactory.resolved) ? C(t.elm, e, n) : (e.isAsyncPlaceholder = !0);\n+                else if (O(e.isStatic) && O(t.isStatic) && e.key === t.key && (O(e.isCloned) || O(e.isOnce))) e.componentInstance = t.componentInstance;\n+                else {\n+                  var a,\n+                      s = e.data;\n+                  I(s) && I((a = s.hook)) && I((a = a.prepatch)) && a(t, e);\n+                  (r = t.children), (o = e.children);\n+                  if (I(s) && b(e)) {\n+                    for (a = 0; a \u003C h.update.length; ++a) h.update[a](t, e);\n+                    I((a = s.hook)) && I((a = a.update)) && a(t, e);\n+                  }\n+                  P(e.text)\n+                      ? I(r) && I(o)\n+                      ? r !== o &&\n+                      (function (t, e, n, r) {\n+                        for (var o, i, a, s = 0, c = 0, l = e.length - 1, u = e[0], f = e[l], p = n.length - 1, d = n[0], h = n[p], v = !y; s \u003C= l && c \u003C= p; )\n+                          P(u)\n+                              ? (u = e[++s])\n+                              : P(f)\n+                              ? (f = e[--l])\n+                              : Qn(u, d)\n+                                  ? (m(u, d, r, n, c), (u = e[++s]), (d = n[++c]))\n+                                  : Qn(f, h)\n+                                      ? (m(f, h, r, n, p), (f = e[--l]), (h = n[--p]))\n+                                      : Qn(u, h)\n+                                          ? (m(u, h, r, n, p), v && g.insertBefore(t, u.elm, g.nextSibling(f.elm)), (u = e[++s]), (h = n[--p]))\n+                                          : (Qn(f, d)\n+                                              ? (m(f, d, r, n, c), v && g.insertBefore(t, f.elm, u.elm), (f = e[--l]))\n+                                              : (P(o) &&\n+                                              (o = (function (t, e, n) {\n+                                                for (var r, o = {}, i = e; i \u003C= n; ++i) I((r = t[i].key)) && (o[r] = i);\n+                                                return o;\n+                                              })(e, s, l)),\n+                                                  !P(\n+                                                      (i = I(d.key)\n+                                                          ? o[d.key]\n+                                                          : (function (t, e, n, r) {\n+                                                            for (var o = n; o \u003C r; o++) {\n+                                                              var i = e[o];\n+                                                              if (I(i) && Qn(t, i)) return o;\n+                                                            }\n+                                                          })(d, e, s, l))\n+                                                  ) && Qn((a = e[i]), d)\n+                                                      ? (m(a, d, r, n, c), (e[i] = void 0), v && g.insertBefore(t, a.elm, u.elm))\n+                                                      : _(d, r, t, u.elm, !1, n, c)),\n+                                              (d = n[++c]));\n+                        l \u003C s ? w(t, P(n[p + 1]) ? null : n[p + 1].elm, n, c, p, r) : p \u003C c && x(0, e, s, l);\n+                      })(i, r, o, n)\n+                      : I(o)\n+                          ? (I(t.text) && g.setTextContent(i, \"\"), w(i, null, o, 0, o.length - 1, n))\n+                          : I(r)\n+                              ? x(0, r, 0, r.length - 1)\n+                              : I(t.text) && g.setTextContent(i, \"\")\n+                      : t.text !== e.text && g.setTextContent(i, e.text),\n+                  I(s) && I((a = s.hook)) && I((a = a.postpatch)) && a(t, e);\n+                }\n+              }\n+            })(t, e, i, null, null, r);\n+          else {\n+            if (a) {\n+              if ((1 === t.nodeType && t.hasAttribute(T) && (t.removeAttribute(T), (n = !0)), O(n) && C(t, e, i))) return $(e, i, !0), t;\n+              (s = t), (t = new dt(g.tagName(s).toLowerCase(), {}, [], void 0, s));\n+            }\n+            var n = t.elm,\n+                s = g.parentNode(n);\n+            if ((_(e, i, n._leaveCb ? null : s, g.nextSibling(n)), I(e.parent)))\n+              for (var c = e.parent, l = b(e); c; ) {\n+                for (var u = 0; u \u003C h.destroy.length; ++u) h.destroy[u](c);\n+                if (((c.elm = e.elm), l)) {\n+                  for (var f = 0; f \u003C h.create.length; ++f) h.create[f](Kn, c);\n+                  var p = c.data.hook.insert;\n+                  if (p.merged) for (var d = 1; d \u003C p.fns.length; d++) p.fns[d]();\n+                } else Gn(c);\n+                c = c.parent;\n+              }\n+            I(s) ? x(0, [t], 0, 0) : I(t.tag) && y(t);\n+          }\n+        }\n+        return $(e, i, o), e.elm;\n+      }\n+      I(t) && y(t);\n+    };\n+  })({\n+    nodeOps: E,\n+    modules: [\n+      W,\n+      On,\n+      q,\n+      Gt,\n+      Q,\n+      B\n+          ? {\n+            create: wo,\n+            activate: wo,\n+            remove: function (t, e) {\n+              !0 !== t.data.show ? go(t, e) : e();\n+            },\n+          }\n+          : {},\n+    ].concat(st),\n+  });\n+  G &&\n+  document.addEventListener(\"selectionchange\", function () {\n+    var t = document.activeElement;\n+    t && t.vmodel && To(t, \"input\");\n+  });\n+  var xo = {\n+    inserted: function (t, e, n, r) {\n+      \"select\" === n.tag\n+          ? (r.elm && !r.elm._vOptions\n+          ? oe(n, \"postpatch\", function () {\n+            xo.componentUpdated(t, e, n);\n+          })\n+          : $o(t, e, n.context),\n+              (t._vOptions = [].map.call(t.options, Oo)))\n+          : (\"textarea\" !== n.tag && !qn(t.type)) ||\n+          ((t._vModifiers = e.modifiers), e.modifiers.lazy || (t.addEventListener(\"compositionstart\", Ao), t.addEventListener(\"compositionend\", So), t.addEventListener(\"change\", So), G && (t.vmodel = !0)));\n+    },\n+    componentUpdated: function (t, e, n) {\n+      var r, o;\n+      \"select\" === n.tag &&\n+      ($o(t, e, n.context),\n+          (r = t._vOptions),\n+      (o = t._vOptions = [].map.call(t.options, Oo)).some(function (t, e) {\n+        return !A(t, r[e]);\n+      }) &&\n+      (t.multiple\n+          ? e.value.some(function (t) {\n+            return Co(t, o);\n+          })\n+          : e.value !== e.oldValue && Co(e.value, o)) &&\n+      To(t, \"change\"));\n+    },\n+  };\n+  function $o(t, e) {\n+    ko(t, e),\n+    (J || K) &&\n+    setTimeout(function () {\n+      ko(t, e);\n+    }, 0);\n+  }\n+  function ko(t, e) {\n+    var n = e.value,\n+        r = t.multiple;\n+    if (!r || Array.isArray(n)) {\n+      for (var o, i, a = 0, s = t.options.length; a \u003C s; a++)\n+        if (((i = t.options[a]), r)) (o = -1 \u003C S(n, Oo(i))), i.selected !== o && (i.selected = o);\n+        else if (A(Oo(i), n)) return t.selectedIndex !== a && (t.selectedIndex = a), 0;\n+      r || (t.selectedIndex = -1);\n+    }\n+  }\n+  function Co(e, t) {\n+    return t.every(function (t) {\n+      return !A(t, e);\n+    });\n+  }\n+  function Oo(t) {\n+    return \"_value\" in t ? t._value : t.value;\n+  }\n+  function Ao(t) {\n+    t.target.composing = !0;\n+  }\n+  function So(t) {\n+    t.target.composing && ((t.target.composing = !1), To(t.target, \"input\"));\n+  }\n+  function To(t, e) {\n+    var n = document.createEvent(\"HTMLEvents\");\n+    n.initEvent(e, !0, !0), t.dispatchEvent(n);\n+  }\n+  function jo(t) {\n+    return !t.componentInstance || (t.data && t.data.transition) ? t : jo(t.componentInstance._vnode);\n+  }\n+  (Gt = {\n+    model: xo,\n+    show: {\n+      bind: function (t, e, n) {\n+        var r = e.value,\n+            e = (n = jo(n)).data && n.data.transition,\n+            o = (t.__vOriginalDisplay = \"none\" === t.style.display ? \"\" : t.style.display);\n+        r && e\n+            ? ((n.data.show = !0),\n+                yo(n, function () {\n+                  t.style.display = o;\n+                }))\n+            : (t.style.display = r ? o : \"none\");\n+      },\n+      update: function (t, e, n) {\n+        var r = e.value;\n+        !r != !e.oldValue &&\n+        ((n = jo(n)).data && n.data.transition\n+            ? ((n.data.show = !0),\n+                r\n+                    ? yo(n, function () {\n+                      t.style.display = t.__vOriginalDisplay;\n+                    })\n+                    : go(n, function () {\n+                      t.style.display = \"none\";\n+                    }))\n+            : (t.style.display = r ? t.__vOriginalDisplay : \"none\"));\n+      },\n+      unbind: function (t, e, n, r, o) {\n+        o || (t.style.display = t.__vOriginalDisplay);\n+      },\n+    },\n+  }),\n+      (Q = {\n+        name: String,\n+        appear: Boolean,\n+        css: Boolean,\n+        mode: String,\n+        type: String,\n+        enterClass: String,\n+        leaveClass: String,\n+        enterToClass: String,\n+        leaveToClass: String,\n+        enterActiveClass: String,\n+        leaveActiveClass: String,\n+        appearClass: String,\n+        appearActiveClass: String,\n+        appearToClass: String,\n+        duration: [Number, String, Object],\n+      });\n+  function Eo(t) {\n+    var e = t && t.componentOptions;\n+    return e && e.Ctor.options.abstract ? Eo(ze(e.children)) : t;\n+  }\n+  function Mo(t) {\n+    var e,\n+        n = {},\n+        r = t.$options;\n+    for (e in r.propsData) n[e] = t[e];\n+    var o,\n+        i = r._parentListeners;\n+    for (o in i) n[m(o)] = i[o];\n+    return n;\n+  }\n+  function Po(t, e) {\n+    if (\u002F\\d-keep-alive$\u002F.test(e.tag)) return t(\"keep-alive\", { props: e.componentOptions.propsData });\n+  }\n+  function Io(t) {\n+    return t.tag || Re(t);\n+  }\n+  function Lo(t) {\n+    return \"show\" === t.name;\n+  }\n+  (st = {\n+    name: \"transition\",\n+    props: Q,\n+    abstract: !0,\n+    render: function (t) {\n+      var e = this,\n+          n = this.$slots.default;\n+      if (n && (n = n.filter(Io)).length) {\n+        var r = this.mode,\n+            o = n[0];\n+        if (\n+            (function (t) {\n+              for (; (t = t.parent); ) if (t.data.transition) return 1;\n+            })(this.$vnode)\n+        )\n+          return o;\n+        var i = Eo(o);\n+        if (!i) return o;\n+        if (this._leaving) return Po(t, o);\n+        var a = \"__transition-\" + this._uid + \"-\";\n+        i.key = null == i.key ? (i.isComment ? a + \"comment\" : a + i.tag) : !l(i.key) || 0 === String(i.key).indexOf(a) ? i.key : a + i.key;\n+        var s = ((i.data || (i.data = {})).transition = Mo(this)),\n+            n = this._vnode,\n+            a = Eo(n);\n+        if ((i.data.directives && i.data.directives.some(Lo) && (i.data.show = !0), a && a.data && (a.key !== i.key || a.tag !== i.tag) && !Re(a) && (!a.componentInstance || !a.componentInstance._vnode.isComment))) {\n+          a = a.data.transition = w({}, s);\n+          if (\"out-in\" === r)\n+            return (\n+                (this._leaving = !0),\n+                    oe(a, \"afterLeave\", function () {\n+                      (e._leaving = !1), e.$forceUpdate();\n+                    }),\n+                    Po(t, o)\n+            );\n+          if (\"in-out\" === r) {\n+            if (Re(i)) return n;\n+            var c,\n+                n = function () {\n+                  c();\n+                };\n+            oe(s, \"afterEnter\", n),\n+                oe(s, \"enterCancelled\", n),\n+                oe(a, \"delayLeave\", function (t) {\n+                  c = t;\n+                });\n+          }\n+        }\n+        return o;\n+      }\n+    },\n+  }),\n+      (Q = w({ tag: String, moveClass: String }, Q));\n+  function No(t) {\n+    t.elm._moveCb && t.elm._moveCb(), t.elm._enterCb && t.elm._enterCb();\n+  }\n+  function Do(t) {\n+    t.data.newPos = t.elm.getBoundingClientRect();\n+  }\n+  function Fo(t) {\n+    var e = t.data.pos,\n+        n = t.data.newPos,\n+        r = e.left - n.left,\n+        n = e.top - n.top;\n+    (r || n) && ((t.data.moved = !0), ((t = t.elm.style).transform = t.WebkitTransform = \"translate(\" + r + \"px,\" + n + \"px)\"), (t.transitionDuration = \"0s\"));\n+  }\n+  delete Q.mode;\n+  Q = {\n+    Transition: st,\n+    TransitionGroup: {\n+      props: Q,\n+      beforeMount: function () {\n+        var r = this,\n+            o = this._update;\n+        this._update = function (t, e) {\n+          var n = qe(r);\n+          r.__patch__(r._vnode, r.kept, !1, !0), (r._vnode = r.kept), n(), o.call(r, t, e);\n+        };\n+      },\n+      render: function (t) {\n+        for (var e = this.tag || this.$vnode.data.tag || \"span\", n = Object.create(null), r = (this.prevChildren = this.children), o = this.$slots.default || [], i = (this.children = []), a = Mo(this), s = 0; s \u003C o.length; s++) {\n+          var c = o[s];\n+          c.tag && null != c.key && 0 !== String(c.key).indexOf(\"__vlist\") && (i.push(c), (((n[c.key] = c).data || (c.data = {})).transition = a));\n+        }\n+        if (r) {\n+          for (var l = [], u = [], f = 0; f \u003C r.length; f++) {\n+            var p = r[f];\n+            (p.data.transition = a), (p.data.pos = p.elm.getBoundingClientRect()), (n[p.key] ? l : u).push(p);\n+          }\n+          (this.kept = t(e, null, l)), (this.removed = u);\n+        }\n+        return t(e, null, i);\n+      },\n+      updated: function () {\n+        var t = this.prevChildren,\n+            r = this.moveClass || (this.name || \"v\") + \"-move\";\n+        t.length &&\n+        this.hasMove(t[0].elm, r) &&\n+        (t.forEach(No),\n+            t.forEach(Do),\n+            t.forEach(Fo),\n+            (this._reflow = document.body.offsetHeight),\n+            t.forEach(function (t) {\n+              var n;\n+              t.data.moved &&\n+              ((t = (n = t.elm).style),\n+                  lo(n, r),\n+                  (t.transform = t.WebkitTransform = t.transitionDuration = \"\"),\n+                  n.addEventListener(\n+                      oo,\n+                      (n._moveCb = function t(e) {\n+                        (e && e.target !== n) || (e && !\u002Ftransform$\u002F.test(e.propertyName)) || (n.removeEventListener(oo, t), (n._moveCb = null), uo(n, r));\n+                      })\n+                  ));\n+            }));\n+      },\n+      methods: {\n+        hasMove: function (t, e) {\n+          if (!to) return !1;\n+          if (this._hasMove) return this._hasMove;\n+          var n = t.cloneNode();\n+          t._transitionClasses &&\n+          t._transitionClasses.forEach(function (t) {\n+            Qr(n, t);\n+          }),\n+              Xr(n, e),\n+              (n.style.display = \"none\"),\n+              this.$el.appendChild(n);\n+          e = ho(n);\n+          return this.$el.removeChild(n), (this._hasMove = e.hasTransform);\n+        },\n+      },\n+    },\n+  };\n+  function Ro(t, e) {\n+    return t && pi(t) && \"\\n\" === e[0];\n+  }\n+  (_n.config.mustUseProp = An),\n+      (_n.config.isReservedTag = zn),\n+      (_n.config.isReservedAttr = ht),\n+      (_n.config.getTagNamespace = Vn),\n+      (_n.config.isUnknownElement = function (t) {\n+        if (!B) return !0;\n+        if (zn(t)) return !1;\n+        if (((t = t.toLowerCase()), null != Wn[t])) return Wn[t];\n+        var e = document.createElement(t);\n+        return -1 \u003C t.indexOf(\"-\") ? (Wn[t] = e.constructor === window.HTMLUnknownElement || e.constructor === window.HTMLElement) : (Wn[t] = \u002FHTMLUnknownElement\u002F.test(e.toString()));\n+      }),\n+      w(_n.options.directives, Gt),\n+      w(_n.options.components, Q),\n+      (_n.prototype.__patch__ = B ? q : $),\n+      (_n.prototype.$mount = function (t, e) {\n+        return (\n+            (n = this),\n+                (t = t = t && B ? Jn(t) : void 0),\n+                (r = e),\n+                (n.$el = t),\n+            n.$options.render || (n.$options.render = vt),\n+                Ke(n, \"beforeMount\"),\n+                (t = function () {\n+                  n._update(n._render(), r);\n+                }),\n+                new sn(\n+                    n,\n+                    t,\n+                    $,\n+                    {\n+                      before: function () {\n+                        n._isMounted && !n._isDestroyed && Ke(n, \"beforeUpdate\");\n+                      },\n+                    },\n+                    !0\n+                ),\n+                (r = !1),\n+            null == n.$vnode && ((n._isMounted = !0), Ke(n, \"mounted\")),\n+                n\n+        );\n+        var n, r;\n+      }),\n+  B &&\n+  setTimeout(function () {\n+    M.devtools && nt && nt.emit(\"init\", _n);\n+  }, 0);\n+  var zo,\n+      Ho,\n+      Uo,\n+      Bo,\n+      Vo,\n+      Wo,\n+      qo,\n+      Jo,\n+      Go,\n+      Ko = \u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg,\n+      Xo = \u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg,\n+      Qo = t(function (t) {\n+        var e = t[0].replace(Xo, \"\\\\$&\"),\n+            t = t[1].replace(Xo, \"\\\\$&\");\n+        return new RegExp(e + \"((?:.|\\\\n)+?)\" + t, \"g\");\n+      }),\n+      ht = {\n+        staticKeys: [\"staticClass\"],\n+        transformNode: function (t, e) {\n+          e.warn;\n+          e = xr(t, \"class\");\n+          e && (t.staticClass = JSON.stringify(e));\n+          e = wr(t, \"class\", !1);\n+          e && (t.classBinding = e);\n+        },\n+        genData: function (t) {\n+          var e = \"\";\n+          return t.staticClass && (e += \"staticClass:\" + t.staticClass + \",\"), t.classBinding && (e += \"class:\" + t.classBinding + \",\"), e;\n+        },\n+      },\n+      Gt = {\n+        staticKeys: [\"staticStyle\"],\n+        transformNode: function (t, e) {\n+          e.warn;\n+          e = xr(t, \"style\");\n+          e && (t.staticStyle = JSON.stringify(Rr(e)));\n+          e = wr(t, \"style\", !1);\n+          e && (t.styleBinding = e);\n+        },\n+        genData: function (t) {\n+          var e = \"\";\n+          return t.staticStyle && (e += \"staticStyle:\" + t.staticStyle + \",\"), t.styleBinding && (e += \"style:(\" + t.styleBinding + \"),\"), e;\n+        },\n+      },\n+      Q = a(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),\n+      q = a(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),\n+      Yo = a(\n+          \"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"\n+      ),\n+      Zo = \u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,\n+      ti = \u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,\n+      F = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + F.source + \"]*\",\n+      F = \"((?:\" + F + \"\\\\:)?\" + F + \")\",\n+      ei = new RegExp(\"^\u003C\" + F),\n+      ni = \u002F^\\s*(\\\u002F?)>\u002F,\n+      ri = new RegExp(\"^\u003C\\\\\u002F\" + F + \"[^>]*>\"),\n+      oi = \u002F^\u003C!DOCTYPE [^>]+>\u002Fi,\n+      ii = \u002F^\u003C!\\--\u002F,\n+      ai = \u002F^\u003C!\\[\u002F,\n+      si = a(\"script,style,textarea\", !0),\n+      ci = {},\n+      li = { \"&lt;\": \"\u003C\", \"&gt;\": \">\", \"&quot;\": '\"', \"&amp;\": \"&\", \"&#10;\": \"\\n\", \"&#9;\": \"\\t\", \"&#39;\": \"'\" },\n+      ui = \u002F&(?:lt|gt|quot|amp|#39);\u002Fg,\n+      fi = \u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg,\n+      pi = a(\"pre,textarea\", !0),\n+      di = \u002F^@|^v-on:\u002F,\n+      hi = \u002F^v-|^@|^:\u002F,\n+      vi = \u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F,\n+      mi = \u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F,\n+      yi = \u002F^\\(|\\)$\u002Fg,\n+      gi = \u002F^\\[.*\\]$\u002F,\n+      _i = \u002F:(.*)$\u002F,\n+      bi = \u002F^:|^\\.|^v-bind:\u002F,\n+      wi = \u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg,\n+      xi = \u002F^v-slot(:|$)|^#\u002F,\n+      $i = \u002F[\\r\\n]\u002F,\n+      ki = \u002F\\s+\u002Fg,\n+      Ci = t(function (t) {\n+        return ((zo = zo || document.createElement(\"div\")).innerHTML = t), zo.textContent;\n+      }),\n+      Oi = \"_empty_\";\n+  function Ai(t, e, n) {\n+    return {\n+      type: 1,\n+      tag: t,\n+      attrsList: e,\n+      attrsMap: (function (t) {\n+        for (var e = {}, n = 0, r = t.length; n \u003C r; n++) e[t[n].name] = t[n].value;\n+        return e;\n+      })(e),\n+      rawAttrsMap: {},\n+      parent: n,\n+      children: [],\n+    };\n+  }\n+  function Si(t, e) {\n+    var n, r, o;\n+    (n = wr((o = t), \"key\")) && (o.key = n),\n+        (t.plain = !t.key && !t.scopedSlots && !t.attrsList.length),\n+    (o = wr((r = t), \"ref\")) &&\n+    ((r.ref = o),\n+        (r.refInFor = (function () {\n+          for (var t = r; t; ) {\n+            if (void 0 !== t.for) return !0;\n+            t = t.parent;\n+          }\n+          return !1;\n+        })())),\n+        (function (t) {\n+          \"template\" === t.tag ? ((a = xr(t, \"scope\")), (t.slotScope = a || xr(t, \"slot-scope\"))) : (a = xr(t, \"slot-scope\")) && (t.slotScope = a);\n+          var e,\n+              n,\n+              r,\n+              o,\n+              i,\n+              a = wr(t, \"slot\");\n+          a &&\n+          ((t.slotTarget = '\"\"' === a ? '\"default\"' : a),\n+              (t.slotTargetDynamic = !(!t.attrsMap[\":slot\"] && !t.attrsMap[\"v-bind:slot\"])),\n+          \"template\" === t.tag || t.slotScope || yr(t, \"slot\", a, ((a = \"slot\"), t.rawAttrsMap[\":\" + a] || t.rawAttrsMap[\"v-bind:\" + a] || t.rawAttrsMap[a]))),\n+              \"template\" === t.tag\n+                  ? (r = $r(t, xi)) && ((n = (e = Ei(r)).name), (o = e.dynamic), (t.slotTarget = n), (t.slotTargetDynamic = o), (t.slotScope = r.value || Oi))\n+                  : (e = $r(t, xi)) &&\n+                  ((n = t.scopedSlots || (t.scopedSlots = {})),\n+                      (r = (o = Ei(e)).name),\n+                      (o = o.dynamic),\n+                      ((i = n[r] = Ai(\"template\", [], t)).slotTarget = r),\n+                      (i.slotTargetDynamic = o),\n+                      (i.children = t.children.filter(function (t) {\n+                        if (!t.slotScope) return (t.parent = i), !0;\n+                      })),\n+                      (i.slotScope = e.value || Oi),\n+                      (t.children = []),\n+                      (t.plain = !1));\n+        })(t),\n+    \"slot\" === t.tag && (t.slotName = wr(t, \"name\")),\n+    (o = wr((n = t), \"is\")) && (n.component = o),\n+    null != xr(n, \"inline-template\") && (n.inlineTemplate = !0);\n+    for (var i = 0; i \u003C Bo.length; i++) t = Bo[i](t, e) || t;\n+    return (\n+        (function (t) {\n+          for (var e, n, r, o, i, a, s, c, l, u, f, p = t.attrsList, d = 0, h = p.length; d \u003C h; d++)\n+            (e = s = p[d].name),\n+                (n = p[d].value),\n+                hi.test(e)\n+                    ? ((t.hasBindings = !0),\n+                    (c = (function (t) {\n+                      t = t.match(wi);\n+                      if (t) {\n+                        var e = {};\n+                        return (\n+                            t.forEach(function (t) {\n+                              e[t.slice(1)] = !0;\n+                            }),\n+                                e\n+                        );\n+                      }\n+                    })(e.replace(hi, \"\"))) && (e = e.replace(wi, \"\")),\n+                        bi.test(e)\n+                            ? ((e = e.replace(bi, \"\")),\n+                                (n = dr(n)),\n+                            (f = gi.test(e)) && (e = e.slice(1, -1)),\n+                            c &&\n+                            (c.prop && !f && \"innerHtml\" === (e = m(e)) && (e = \"innerHTML\"),\n+                            c.camel && !f && (e = m(e)),\n+                            c.sync &&\n+                            ((a = Or(n, \"$event\")),\n+                                f ? br(t, '\"update:\"+(' + e + \")\", a, null, !1, 0, p[d], !0) : (br(t, \"update:\" + m(e), a, null, !1, 0, p[d]), g(e) !== m(e) && br(t, \"update:\" + g(e), a, null, !1, 0, p[d])))),\n+                                ((c && c.prop) || (!t.component && Jo(t.tag, t.attrsMap.type, e)) ? mr : yr)(t, e, n, p[d], f))\n+                            : di.test(e)\n+                            ? ((e = e.replace(di, \"\")), (f = gi.test(e)) && (e = e.slice(1, -1)), br(t, e, n, c, !1, 0, p[d], f))\n+                            : ((f = !1),\n+                            (u = (l = (e = e.replace(hi, \"\")).match(_i)) && l[1]) && ((e = e.slice(0, -(u.length + 1))), gi.test(u) && ((u = u.slice(1, -1)), (f = !0))),\n+                                (r = t),\n+                                (o = e),\n+                                (i = s),\n+                                (a = n),\n+                                (l = u),\n+                                (s = f),\n+                                (u = c),\n+                                (c = p[d]),\n+                                (r.directives || (r.directives = [])).push(kr({ name: o, rawName: i, value: a, arg: l, isDynamicArg: s, modifiers: u }, c)),\n+                                (r.plain = !1)))\n+                    : (yr(t, e, JSON.stringify(n), p[d]), !t.component && \"muted\" === e && Jo(t.tag, t.attrsMap.type, e) && mr(t, e, \"true\", p[d]));\n+        })(t),\n+            t\n+    );\n+  }\n+  function Ti(t) {\n+    var r, e;\n+    !(r = xr(t, \"v-for\")) ||\n+    ((e = (function () {\n+          var t = r.match(vi);\n+          if (t) {\n+            var e = {};\n+            e.for = t[2].trim();\n+            var n = t[1].trim().replace(yi, \"\"),\n+                t = n.match(mi);\n+            return t ? ((e.alias = n.replace(mi, \"\").trim()), (e.iterator1 = t[1].trim()), t[2] && (e.iterator2 = t[2].trim())) : (e.alias = n), e;\n+          }\n+        })()) &&\n+        w(t, e));\n+  }\n+  function ji(t, e) {\n+    t.ifConditions || (t.ifConditions = []), t.ifConditions.push(e);\n+  }\n+  function Ei(t) {\n+    var e = t.name.replace(xi, \"\");\n+    return e || (\"#\" !== t.name[0] && (e = \"default\")), gi.test(e) ? { name: e.slice(1, -1), dynamic: !0 } : { name: '\"' + e + '\"', dynamic: !1 };\n+  }\n+  var Mi = \u002F^xmlns:NS\\d+\u002F,\n+      Pi = \u002F^NS\\d+:\u002F;\n+  function Ii(t) {\n+    return Ai(t.tag, t.attrsList.slice(), t.parent);\n+  }\n+  var Li,\n+      Ni,\n+      Gt = [\n+        ht,\n+        Gt,\n+        {\n+          preTransformNode: function (t, e) {\n+            if (\"input\" === t.tag) {\n+              var n,\n+                  r = t.attrsMap;\n+              if (r[\"v-model\"] && ((r[\":type\"] || r[\"v-bind:type\"]) && (n = wr(t, \"type\")), r.type || n || !r[\"v-bind\"] || (n = \"(\" + r[\"v-bind\"] + \").type\"), n)) {\n+                var o = xr(t, \"v-if\", !0),\n+                    i = o ? \"&&(\" + o + \")\" : \"\",\n+                    a = null != xr(t, \"v-else\", !0),\n+                    s = xr(t, \"v-else-if\", !0),\n+                    c = Ii(t);\n+                Ti(c), gr(c, \"type\", \"checkbox\"), Si(c, e), (c.processed = !0), (c.if = \"(\" + n + \")==='checkbox'\" + i), ji(c, { exp: c.if, block: c });\n+                r = Ii(t);\n+                xr(r, \"v-for\", !0), gr(r, \"type\", \"radio\"), Si(r, e), ji(c, { exp: \"(\" + n + \")==='radio'\" + i, block: r });\n+                t = Ii(t);\n+                return xr(t, \"v-for\", !0), gr(t, \":type\", n), Si(t, e), ji(c, { exp: o, block: t }), a ? (c.else = !0) : s && (c.elseif = s), c;\n+              }\n+            }\n+          },\n+        },\n+      ],\n+      Gt = {\n+        expectHTML: !0,\n+        modules: Gt,\n+        directives: {\n+          model: function (t, e, n) {\n+            var r,\n+                o,\n+                i,\n+                a,\n+                s,\n+                c = e.value,\n+                l = e.modifiers,\n+                u = t.tag,\n+                f = t.attrsMap.type;\n+            if (t.component) return Cr(t, c, l), !1;\n+            if (\"select\" === u)\n+              br(\n+                  t,\n+                  \"change\",\n+                  'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return ' +\n+                  (l && l.number ? \"_n(val)\" : \"val\") +\n+                  \"});\" +\n+                  \" \" +\n+                  Or(c, \"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),\n+                  null,\n+                  !0\n+              );\n+            else if (\"input\" === u && \"checkbox\" === f)\n+              (r = t),\n+                  (o = c),\n+                  (i = l && l.number),\n+                  (a = wr(r, \"value\") || \"null\"),\n+                  (s = wr(r, \"true-value\") || \"true\"),\n+                  (e = wr(r, \"false-value\") || \"false\"),\n+                  mr(r, \"checked\", \"Array.isArray(\" + o + \")?_i(\" + o + \",\" + a + \")>-1\" + (\"true\" === s ? \":(\" + o + \")\" : \":_q(\" + o + \",\" + s + \")\")),\n+                  br(\n+                      r,\n+                      \"change\",\n+                      \"var $$a=\" +\n+                      o +\n+                      \",$$el=$event.target,$$c=$$el.checked?(\" +\n+                      s +\n+                      \"):(\" +\n+                      e +\n+                      \");if(Array.isArray($$a)){var $$v=\" +\n+                      (i ? \"_n(\" + a + \")\" : a) +\n+                      \",$$i=_i($$a,$$v);if($$el.checked){$$i\u003C0&&(\" +\n+                      Or(o, \"$$a.concat([$$v])\") +\n+                      \")}else{$$i>-1&&(\" +\n+                      Or(o, \"$$a.slice(0,$$i).concat($$a.slice($$i+1))\") +\n+                      \")}}else{\" +\n+                      Or(o, \"$$c\") +\n+                      \"}\",\n+                      null,\n+                      !0\n+                  );\n+            else if (\"input\" === u && \"radio\" === f)\n+              (i = t), (a = c), (o = l && l.number), (f = wr(i, \"value\") || \"null\"), mr(i, \"checked\", \"_q(\" + a + \",\" + (f = o ? \"_n(\" + f + \")\" : f) + \")\"), br(i, \"change\", Or(a, f), null, !0);\n+            else if (\"input\" === u || \"textarea\" === u)\n+              !(function (t, e) {\n+                var n = t.attrsMap.type,\n+                    r = l || {},\n+                    o = r.lazy,\n+                    i = r.number,\n+                    a = r.trim,\n+                    r = !o && \"range\" !== n,\n+                    o = o ? \"change\" : \"range\" === n ? \"__r\" : \"input\",\n+                    n = a ? \"$event.target.value.trim()\" : \"$event.target.value\";\n+                i && (n = \"_n(\" + n + \")\");\n+                n = Or(e, n);\n+                r && (n = \"if($event.target.composing)return;\" + n), mr(t, \"value\", \"(\" + e + \")\"), br(t, o, n, null, !0), (a || i) && br(t, \"blur\", \"$forceUpdate()\");\n+              })(t, c);\n+            else if (!M.isReservedTag(u)) return Cr(t, c, l), !1;\n+            return !0;\n+          },\n+          text: function (t, e) {\n+            e.value && mr(t, \"textContent\", \"_s(\" + e.value + \")\", e);\n+          },\n+          html: function (t, e) {\n+            e.value && mr(t, \"innerHTML\", \"_s(\" + e.value + \")\", e);\n+          },\n+        },\n+        isPreTag: function (t) {\n+          return \"pre\" === t;\n+        },\n+        isUnaryTag: Q,\n+        mustUseProp: An,\n+        canBeLeftOpenTag: q,\n+        isReservedTag: zn,\n+        getTagNamespace: Vn,\n+        staticKeys: Gt.reduce(function (t, e) {\n+          return t.concat(e.staticKeys || []);\n+        }, []).join(\",\"),\n+      },\n+      Di = t(function (t) {\n+        return a(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\" + (t ? \",\" + t : \"\"));\n+      }),\n+      Fi = \u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F,\n+      Ri = \u002F\\([^)]*?\\);*$\u002F,\n+      zi = \u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F,\n+      Hi = { esc: 27, tab: 9, enter: 13, space: 32, up: 38, left: 37, right: 39, down: 40, delete: [8, 46] },\n+      Ui = {\n+        esc: [\"Esc\", \"Escape\"],\n+        tab: \"Tab\",\n+        enter: \"Enter\",\n+        space: [\" \", \"Spacebar\"],\n+        up: [\"Up\", \"ArrowUp\"],\n+        left: [\"Left\", \"ArrowLeft\"],\n+        right: [\"Right\", \"ArrowRight\"],\n+        down: [\"Down\", \"ArrowDown\"],\n+        delete: [\"Backspace\", \"Delete\", \"Del\"],\n+      },\n+      Bi = function (t) {\n+        return \"if(\" + t + \")return null;\";\n+      },\n+      Vi = {\n+        stop: \"$event.stopPropagation();\",\n+        prevent: \"$event.preventDefault();\",\n+        self: Bi(\"$event.target !== $event.currentTarget\"),\n+        ctrl: Bi(\"!$event.ctrlKey\"),\n+        shift: Bi(\"!$event.shiftKey\"),\n+        alt: Bi(\"!$event.altKey\"),\n+        meta: Bi(\"!$event.metaKey\"),\n+        left: Bi(\"'button' in $event && $event.button !== 0\"),\n+        middle: Bi(\"'button' in $event && $event.button !== 1\"),\n+        right: Bi(\"'button' in $event && $event.button !== 2\"),\n+      };\n+  function Wi(t, e) {\n+    var n,\n+        e = e ? \"nativeOn:\" : \"on:\",\n+        r = \"\",\n+        o = \"\";\n+    for (n in t) {\n+      var i = (function e(t) {\n+        if (!t) return \"function(){}\";\n+        if (Array.isArray(t))\n+          return (\n+              \"[\" +\n+              t\n+              .map(function (t) {\n+                return e(t);\n+              })\n+              .join(\",\") +\n+              \"]\"\n+          );\n+        var n = zi.test(t.value),\n+            r = Fi.test(t.value),\n+            o = zi.test(t.value.replace(Ri, \"\"));\n+        if (t.modifiers) {\n+          var i,\n+              a,\n+              s = \"\",\n+              c = \"\",\n+              l = [];\n+          for (i in t.modifiers)\n+            Vi[i]\n+                ? ((c += Vi[i]), Hi[i] && l.push(i))\n+                : \"exact\" === i\n+                ? ((a = t.modifiers),\n+                    (c += Bi(\n+                        [\"ctrl\", \"shift\", \"alt\", \"meta\"]\n+                        .filter(function (t) {\n+                          return !a[t];\n+                        })\n+                        .map(function (t) {\n+                          return \"$event.\" + t + \"Key\";\n+                        })\n+                        .join(\"||\")\n+                    )))\n+                : l.push(i);\n+          return (\n+              l.length && (s += \"if(!$event.type.indexOf('key')&&\" + l.map(qi).join(\"&&\") + \")return null;\"),\n+              c && (s += c),\n+              \"function($event){\" + s + (n ? \"return \" + t.value + \"($event)\" : r ? \"return (\" + t.value + \")($event)\" : o ? \"return \" + t.value : t.value) + \"}\"\n+          );\n+        }\n+        return n || r ? t.value : \"function($event){\" + (o ? \"return \" + t.value : t.value) + \"}\";\n+      })(t[n]);\n+      t[n] && t[n].dynamic ? (o += n + \",\" + i + \",\") : (r += '\"' + n + '\":' + i + \",\");\n+    }\n+    return (r = \"{\" + r.slice(0, -1) + \"}\"), o ? e + \"_d(\" + r + \",[\" + o.slice(0, -1) + \"])\" : e + r;\n+  }\n+  function qi(t) {\n+    var e = parseInt(t, 10);\n+    if (e) return \"$event.keyCode!==\" + e;\n+    var n = Hi[t],\n+        e = Ui[t];\n+    return \"_k($event.keyCode,\" + JSON.stringify(t) + \",\" + JSON.stringify(n) + \",$event.key,\" + JSON.stringify(e) + \")\";\n+  }\n+  var Ji = {\n+        on: function (t, e) {\n+          t.wrapListeners = function (t) {\n+            return \"_g(\" + t + \",\" + e.value + \")\";\n+          };\n+        },\n+        bind: function (e, n) {\n+          e.wrapData = function (t) {\n+            return \"_b(\" + t + \",'\" + e.tag + \"',\" + n.value + \",\" + (n.modifiers && n.modifiers.prop ? \"true\" : \"false\") + (n.modifiers && n.modifiers.sync ? \",true\" : \"\") + \")\";\n+          };\n+        },\n+        cloak: $,\n+      },\n+      Gi = function (t) {\n+        (this.options = t), (this.warn = t.warn || hr), (this.transforms = vr(t.modules, \"transformCode\")), (this.dataGenFns = vr(t.modules, \"genData\")), (this.directives = w(w({}, Ji), t.directives));\n+        var e = t.isReservedTag || k;\n+        (this.maybeComponent = function (t) {\n+          return !!t.component || !e(t.tag);\n+        }),\n+            (this.onceId = 0),\n+            (this.staticRenderFns = []),\n+            (this.pre = !1);\n+      };\n+  function Ki(t, e) {\n+    e = new Gi(e);\n+    return { render: \"with(this){return \" + (t ? Xi(t, e) : '_c(\"div\")') + \"}\", staticRenderFns: e.staticRenderFns };\n+  }\n+  function Xi(t, e) {\n+    if ((t.parent && (t.pre = t.pre || t.parent.pre), t.staticRoot && !t.staticProcessed)) return Qi(t, e);\n+    if (t.once && !t.onceProcessed) return Yi(t, e);\n+    if (t.for && !t.forProcessed) return ta(t, e);\n+    if (t.if && !t.ifProcessed) return Zi(t, e);\n+    if (\"template\" !== t.tag || t.slotTarget || e.pre) {\n+      if (\"slot\" === t.tag)\n+        return (\n+            (s = \"_t(\" + ((l = t).slotName || '\"default\"') + ((a = oa(l, e)) ? \",\" + a : \"\")),\n+                (c =\n+                    l.attrs || l.dynamicAttrs\n+                        ? sa(\n+                        (l.attrs || []).concat(l.dynamicAttrs || []).map(function (t) {\n+                          return { name: m(t.name), value: t.value, dynamic: t.dynamic };\n+                        })\n+                        )\n+                        : null),\n+                (l = l.attrsMap[\"v-bind\"]),\n+            (!c && !l) || a || (s += \",null\"),\n+            c && (s += \",\" + c),\n+            l && (s += (c ? \"\" : \",null\") + \",\" + l),\n+            s + \")\"\n+        );\n+      var n, r;\n+      r = t.component\n+          ? ((c = t.component), (l = e), (i = (s = t).inlineTemplate ? null : oa(s, l, !0)), \"_c(\" + c + \",\" + ea(s, l) + (i ? \",\" + i : \"\") + \")\")\n+          : ((!t.plain || (t.pre && e.maybeComponent(t))) && (n = ea(t, e)), (i = t.inlineTemplate ? null : oa(t, e, !0)), \"_c('\" + t.tag + \"'\" + (n ? \",\" + n : \"\") + (i ? \",\" + i : \"\") + \")\");\n+      for (var o = 0; o \u003C e.transforms.length; o++) r = e.transforms[o](t, r);\n+      return r;\n+    }\n+    var i, a, s, c, l;\n+    return oa(t, e) || \"void 0\";\n+  }\n+  function Qi(t, e) {\n+    t.staticProcessed = !0;\n+    var n = e.pre;\n+    return t.pre && (e.pre = t.pre), e.staticRenderFns.push(\"with(this){return \" + Xi(t, e) + \"}\"), (e.pre = n), \"_m(\" + (e.staticRenderFns.length - 1) + (t.staticInFor ? \",true\" : \"\") + \")\";\n+  }\n+  function Yi(t, e) {\n+    if (((t.onceProcessed = !0), t.if && !t.ifProcessed)) return Zi(t, e);\n+    if (t.staticInFor) {\n+      for (var n = \"\", r = t.parent; r; ) {\n+        if (r.for) {\n+          n = r.key;\n+          break;\n+        }\n+        r = r.parent;\n+      }\n+      return n ? \"_o(\" + Xi(t, e) + \",\" + e.onceId++ + \",\" + n + \")\" : Xi(t, e);\n+    }\n+    return Qi(t, e);\n+  }\n+  function Zi(t, e, n, r) {\n+    return (\n+        (t.ifProcessed = !0),\n+            (function t(e, n, r, o) {\n+              if (!e.length) return o || \"_e()\";\n+              var i = e.shift();\n+              return i.exp ? \"(\" + i.exp + \")?\" + a(i.block) + \":\" + t(e, n, r, o) : \"\" + a(i.block);\n+              function a(t) {\n+                return (r || (t.once ? Yi : Xi))(t, n);\n+              }\n+            })(t.ifConditions.slice(), e, n, r)\n+    );\n+  }\n+  function ta(t, e, n, r) {\n+    var o = t.for,\n+        i = t.alias,\n+        a = t.iterator1 ? \",\" + t.iterator1 : \"\",\n+        s = t.iterator2 ? \",\" + t.iterator2 : \"\";\n+    return (t.forProcessed = !0), (r || \"_l\") + \"((\" + o + \"),function(\" + i + a + s + \"){return \" + (n || Xi)(t, e) + \"})\";\n+  }\n+  function ea(e, n) {\n+    var t = \"{\",\n+        r = (function (t, e) {\n+          var n = t.directives;\n+          if (n) {\n+            for (var r, o, i = \"directives:[\", a = !1, s = 0, c = n.length; s \u003C c; s++) {\n+              (r = n[s]), (o = !0);\n+              var l = e.directives[r.name];\n+              l && (o = !!l(t, r, e.warn)),\n+              o &&\n+              ((a = !0),\n+                  (i +=\n+                      '{name:\"' +\n+                      r.name +\n+                      '\",rawName:\"' +\n+                      r.rawName +\n+                      '\"' +\n+                      (r.value ? \",value:(\" + r.value + \"),expression:\" + JSON.stringify(r.value) : \"\") +\n+                      (r.arg ? \",arg:\" + (r.isDynamicArg ? r.arg : '\"' + r.arg + '\"') : \"\") +\n+                      (r.modifiers ? \",modifiers:\" + JSON.stringify(r.modifiers) : \"\") +\n+                      \"},\"));\n+            }\n+            return a ? i.slice(0, -1) + \"]\" : void 0;\n+          }\n+        })(e, n);\n+    r && (t += r + \",\"), e.key && (t += \"key:\" + e.key + \",\"), e.ref && (t += \"ref:\" + e.ref + \",\"), e.refInFor && (t += \"refInFor:true,\"), e.pre && (t += \"pre:true,\"), e.component && (t += 'tag:\"' + e.tag + '\",');\n+    for (var o, i = 0; i \u003C n.dataGenFns.length; i++) t += n.dataGenFns[i](e);\n+    return (\n+        e.attrs && (t += \"attrs:\" + sa(e.attrs) + \",\"),\n+        e.props && (t += \"domProps:\" + sa(e.props) + \",\"),\n+        e.events && (t += Wi(e.events, !1) + \",\"),\n+        e.nativeEvents && (t += Wi(e.nativeEvents, !0) + \",\"),\n+        e.slotTarget && !e.slotScope && (t += \"slot:\" + e.slotTarget + \",\"),\n+        e.scopedSlots &&\n+        (t +=\n+            (function (t, e, n) {\n+              var r =\n+                  t.for ||\n+                  Object.keys(e).some(function (t) {\n+                    t = e[t];\n+                    return t.slotTargetDynamic || t.if || t.for || na(t);\n+                  }),\n+                  o = !!t.if;\n+              if (!r)\n+                for (var i = t.parent; i; ) {\n+                  if ((i.slotScope && i.slotScope !== Oi) || i.for) {\n+                    r = !0;\n+                    break;\n+                  }\n+                  i.if && (o = !0), (i = i.parent);\n+                }\n+              t = Object.keys(e)\n+              .map(function (t) {\n+                return ra(e[t], n);\n+              })\n+              .join(\",\");\n+              return (\n+                  \"scopedSlots:_u([\" +\n+                  t +\n+                  \"]\" +\n+                  (r ? \",null,true\" : \"\") +\n+                  (!r && o\n+                      ? \",null,false,\" +\n+                      (function (t) {\n+                        for (var e = 5381, n = t.length; n; ) e = (33 * e) ^ t.charCodeAt(--n);\n+                        return e >>> 0;\n+                      })(t)\n+                      : \"\") +\n+                  \")\"\n+              );\n+            })(e, e.scopedSlots, n) + \",\"),\n+        e.model && (t += \"model:{value:\" + e.model.value + \",callback:\" + e.model.callback + \",expression:\" + e.model.expression + \"},\"),\n+        e.inlineTemplate &&\n+        (o = (function () {\n+          var t = e.children[0];\n+          if (t && 1 === t.type) {\n+            t = Ki(t, n.options);\n+            return (\n+                \"inlineTemplate:{render:function(){\" +\n+                t.render +\n+                \"},staticRenderFns:[\" +\n+                t.staticRenderFns\n+                .map(function (t) {\n+                  return \"function(){\" + t + \"}\";\n+                })\n+                .join(\",\") +\n+                \"]}\"\n+            );\n+          }\n+        })()) &&\n+        (t += o + \",\"),\n+            (t = t.replace(\u002F,$\u002F, \"\") + \"}\"),\n+        e.dynamicAttrs && (t = \"_b(\" + t + ',\"' + e.tag + '\",' + sa(e.dynamicAttrs) + \")\"),\n+        e.wrapData && (t = e.wrapData(t)),\n+        e.wrapListeners && (t = e.wrapListeners(t)),\n+            t\n+    );\n+  }\n+  function na(t) {\n+    return 1 === t.type && (\"slot\" === t.tag || t.children.some(na));\n+  }\n+  function ra(t, e) {\n+    var n = t.attrsMap[\"slot-scope\"];\n+    if (t.if && !t.ifProcessed && !n) return Zi(t, e, ra, \"null\");\n+    if (t.for && !t.forProcessed) return ta(t, e, ra);\n+    var r = t.slotScope === Oi ? \"\" : String(t.slotScope),\n+        e = \"function(\" + r + \"){return \" + (\"template\" === t.tag ? (t.if && n ? \"(\" + t.if + \")?\" + (oa(t, e) || \"undefined\") + \":undefined\" : oa(t, e) || \"undefined\") : Xi(t, e)) + \"}\",\n+        r = r ? \"\" : \",proxy:true\";\n+    return \"{key:\" + (t.slotTarget || '\"default\"') + \",fn:\" + e + r + \"}\";\n+  }\n+  function oa(t, e, n, r, o) {\n+    var i = t.children;\n+    if (i.length) {\n+      var a = i[0];\n+      if (1 === i.length && a.for && \"template\" !== a.tag && \"slot\" !== a.tag) {\n+        t = n ? (e.maybeComponent(a) ? \",1\" : \",0\") : \"\";\n+        return (r || Xi)(a, e) + t;\n+      }\n+      var n = n\n+          ? (function (t, e) {\n+            for (var n = 0, r = 0; r \u003C t.length; r++) {\n+              var o = t[r];\n+              if (1 === o.type) {\n+                if (\n+                    ia(o) ||\n+                    (o.ifConditions &&\n+                        o.ifConditions.some(function (t) {\n+                          return ia(t.block);\n+                        }))\n+                ) {\n+                  n = 2;\n+                  break;\n+                }\n+                (e(o) ||\n+                    (o.ifConditions &&\n+                        o.ifConditions.some(function (t) {\n+                          return e(t.block);\n+                        }))) &&\n+                (n = 1);\n+              }\n+            }\n+            return n;\n+          })(i, e.maybeComponent)\n+          : 0,\n+          s = o || aa;\n+      return (\n+          \"[\" +\n+          i\n+          .map(function (t) {\n+            return s(t, e);\n+          })\n+          .join(\",\") +\n+          \"]\" +\n+          (n ? \",\" + n : \"\")\n+      );\n+    }\n+  }\n+  function ia(t) {\n+    return void 0 !== t.for || \"template\" === t.tag || \"slot\" === t.tag;\n+  }\n+  function aa(t, e) {\n+    return 1 === t.type ? Xi(t, e) : 3 === t.type && t.isComment ? \"_e(\" + JSON.stringify(t.text) + \")\" : \"_v(\" + (2 === t.type ? t.expression : ca(JSON.stringify(t.text))) + \")\";\n+  }\n+  function sa(t) {\n+    for (var e = \"\", n = \"\", r = 0; r \u003C t.length; r++) {\n+      var o = t[r],\n+          i = ca(o.value);\n+      o.dynamic ? (n += o.name + \",\" + i + \",\") : (e += '\"' + o.name + '\":' + i + \",\");\n+    }\n+    return (e = \"{\" + e.slice(0, -1) + \"}\"), n ? \"_d(\" + e + \",[\" + n.slice(0, -1) + \"])\" : e;\n+  }\n+  function ca(t) {\n+    return t.replace(\u002F\\u2028\u002Fg, \"\\\\u2028\").replace(\u002F\\u2029\u002Fg, \"\\\\u2029\");\n+  }\n+  function la(e, n) {\n+    try {\n+      return new Function(e);\n+    } catch (t) {\n+      return n.push({ err: t, code: e }), $;\n+    }\n+  }\n+  new RegExp(\n+      \"\\\\b\" +\n+      \"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\") +\n+      \"\\\\b\"\n+  );\n+  var ua,\n+      fa,\n+      pa,\n+      da,\n+      ha,\n+      va =\n+          ((ua = function (t, e) {\n+            var n,\n+                r = (function (t, l) {\n+                  (Ho = l.warn || hr),\n+                      (qo = l.isPreTag || k),\n+                      (Jo = l.mustUseProp || k),\n+                      (Go = l.getTagNamespace || k),\n+                      l.isReservedTag,\n+                      (Bo = vr(l.modules, \"transformNode\")),\n+                      (Vo = vr(l.modules, \"preTransformNode\")),\n+                      (Wo = vr(l.modules, \"postTransformNode\")),\n+                      (Uo = l.delimiters);\n+                  var u,\n+                      f,\n+                      p = [],\n+                      a = !1 !== l.preserveWhitespace,\n+                      s = l.whitespace,\n+                      d = !1,\n+                      h = !1;\n+                  function v(t) {\n+                    var e, n;\n+                    o(t),\n+                    d || t.processed || (t = Si(t, l)),\n+                    p.length || t === u || (u.if && (t.elseif || t.else) && ji(u, { exp: t.elseif, block: t })),\n+                    f &&\n+                    !t.forbidden &&\n+                    (t.elseif || t.else\n+                        ? ((e = t),\n+                        (n = (function (t) {\n+                          for (var e = t.length; e--; ) {\n+                            if (1 === t[e].type) return t[e];\n+                            t.pop();\n+                          }\n+                        })(f.children)) &&\n+                        n.if &&\n+                        ji(n, { exp: e.elseif, block: e }))\n+                        : (t.slotScope && ((e = t.slotTarget || '\"default\"'), ((f.scopedSlots || (f.scopedSlots = {}))[e] = t)), f.children.push(t), (t.parent = f))),\n+                        (t.children = t.children.filter(function (t) {\n+                          return !t.slotScope;\n+                        })),\n+                        o(t),\n+                    t.pre && (d = !1),\n+                    qo(t.tag) && (h = !1);\n+                    for (var r = 0; r \u003C Wo.length; r++) Wo[r](t, l);\n+                  }\n+                  function o(t) {\n+                    if (!h) for (var e; (e = t.children[t.children.length - 1]) && 3 === e.type && \" \" === e.text; ) t.children.pop();\n+                  }\n+                  return (\n+                      (function (o, l) {\n+                        for (var t, u, f = [], p = l.expectHTML, d = l.isUnaryTag || k, h = l.canBeLeftOpenTag || k, a = 0; o; ) {\n+                          if (((t = o), u && si(u))) {\n+                            var r = 0,\n+                                i = u.toLowerCase(),\n+                                e = ci[i] || (ci[i] = new RegExp(\"([\\\\s\\\\S]*?)(\u003C\u002F\" + i + \"[^>]*>)\", \"i\")),\n+                                e = o.replace(e, function (t, e, n) {\n+                                  return (\n+                                      (r = n.length),\n+                                      si(i) || \"noscript\" === i || (e = e.replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg, \"$1\").replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg, \"$1\")),\n+                                      Ro(i, e) && (e = e.slice(1)),\n+                                      l.chars && l.chars(e),\n+                                          \"\"\n+                                  );\n+                                });\n+                            (a += o.length - e.length), (o = e), g(i, a - r, a);\n+                          } else {\n+                            var n = o.indexOf(\"\u003C\");\n+                            if (0 === n) {\n+                              if (ii.test(o)) {\n+                                e = o.indexOf(\"--\\x3e\");\n+                                if (0 \u003C= e) {\n+                                  l.shouldKeepComment && l.comment(o.substring(4, e), a, a + e + 3), y(e + 3);\n+                                  continue;\n+                                }\n+                              }\n+                              if (ai.test(o)) {\n+                                var s = o.indexOf(\"]>\");\n+                                if (0 \u003C= s) {\n+                                  y(s + 2);\n+                                  continue;\n+                                }\n+                              }\n+                              s = o.match(oi);\n+                              if (s) {\n+                                y(s[0].length);\n+                                continue;\n+                              }\n+                              s = o.match(ri);\n+                              if (s) {\n+                                var c = a;\n+                                y(s[0].length), g(s[1], c, a);\n+                                continue;\n+                              }\n+                              c = (function () {\n+                                var t = o.match(ei);\n+                                if (t) {\n+                                  var e,\n+                                      n,\n+                                      r = { tagName: t[1], attrs: [], start: a };\n+                                  for (y(t[0].length); !(e = o.match(ni)) && (n = o.match(ti) || o.match(Zo)); ) (n.start = a), y(n[0].length), (n.end = a), r.attrs.push(n);\n+                                  if (e) return (r.unarySlash = e[1]), y(e[0].length), (r.end = a), r;\n+                                }\n+                              })();\n+                              if (c) {\n+                                (function (t) {\n+                                  var e = t.tagName,\n+                                      n = t.unarySlash;\n+                                  p && (\"p\" === u && Yo(e) && g(u), h(e) && u === e && g(e));\n+                                  for (var n = d(e) || !!n, r = t.attrs.length, o = new Array(r), i = 0; i \u003C r; i++) {\n+                                    var a = t.attrs[i],\n+                                        s = a[3] || a[4] || a[5] || \"\",\n+                                        c = \"a\" === e && \"href\" === a[1] ? l.shouldDecodeNewlinesForHref : l.shouldDecodeNewlines;\n+                                    o[i] = {\n+                                      name: a[1],\n+                                      value:\n+                                          ((c = c ? fi : ui),\n+                                              s.replace(c, function (t) {\n+                                                return li[t];\n+                                              })),\n+                                    };\n+                                  }\n+                                  n || (f.push({ tag: e, lowerCasedTag: e.toLowerCase(), attrs: o, start: t.start, end: t.end }), (u = e)), l.start && l.start(e, o, n, t.start, t.end);\n+                                })(c),\n+                                Ro(c.tagName, o) && y(1);\n+                                continue;\n+                              }\n+                            }\n+                            var c = void 0,\n+                                v = void 0,\n+                                m = void 0;\n+                            if (0 \u003C= n) {\n+                              for (v = o.slice(n); !(ri.test(v) || ei.test(v) || ii.test(v) || ai.test(v) || (m = v.indexOf(\"\u003C\", 1)) \u003C 0); ) (n += m), (v = o.slice(n));\n+                              c = o.substring(0, n);\n+                            }\n+                            n \u003C 0 && (c = o), c && y(c.length), l.chars && c && l.chars(c, a - c.length, a);\n+                          }\n+                          if (o === t) {\n+                            l.chars && l.chars(o);\n+                            break;\n+                          }\n+                        }\n+                        function y(t) {\n+                          (a += t), (o = o.substring(t));\n+                        }\n+                        function g(t, e, n) {\n+                          var r, o;\n+                          if ((null == e && (e = a), null == n && (n = a), t)) for (o = t.toLowerCase(), r = f.length - 1; 0 \u003C= r && f[r].lowerCasedTag !== o; r--);\n+                          else r = 0;\n+                          if (0 \u003C= r) {\n+                            for (var i = f.length - 1; r \u003C= i; i--) l.end && l.end(f[i].tag, e, n);\n+                            (f.length = r), (u = r && f[r - 1].tag);\n+                          } else \"br\" === o ? l.start && l.start(t, [], !0, e, n) : \"p\" === o && (l.start && l.start(t, [], !1, e, n), l.end && l.end(t, e, n));\n+                        }\n+                        g();\n+                      })(t, {\n+                        warn: Ho,\n+                        expectHTML: l.expectHTML,\n+                        isUnaryTag: l.isUnaryTag,\n+                        canBeLeftOpenTag: l.canBeLeftOpenTag,\n+                        shouldDecodeNewlines: l.shouldDecodeNewlines,\n+                        shouldDecodeNewlinesForHref: l.shouldDecodeNewlinesForHref,\n+                        shouldKeepComment: l.comments,\n+                        outputSourceRange: l.outputSourceRange,\n+                        start: function (t, e, n, r, o) {\n+                          var i = (f && f.ns) || Go(t);\n+                          J &&\n+                          \"svg\" === i &&\n+                          (e = (function (t) {\n+                            for (var e = [], n = 0; n \u003C t.length; n++) {\n+                              var r = t[n];\n+                              Mi.test(r.name) || ((r.name = r.name.replace(Pi, \"\")), e.push(r));\n+                            }\n+                            return e;\n+                          })(e));\n+                          var a = Ai(t, e, f);\n+                          i && (a.ns = i), (\"style\" !== a.tag && (\"script\" !== a.tag || (a.attrsMap.type && \"text\u002Fjavascript\" !== a.attrsMap.type))) || et() || (a.forbidden = !0);\n+                          for (var s, c = 0; c \u003C Vo.length; c++) a = Vo[c](a, l) || a;\n+                          d || (null != xr((s = a), \"v-pre\") && (s.pre = !0), a.pre && (d = !0)),\n+                          qo(a.tag) && (h = !0),\n+                              d\n+                                  ? (function (t) {\n+                                    var e = t.attrsList,\n+                                        n = e.length;\n+                                    if (n)\n+                                      for (var r = (t.attrs = new Array(n)), o = 0; o \u003C n; o++)\n+                                        (r[o] = { name: e[o].name, value: JSON.stringify(e[o].value) }), null != e[o].start && ((r[o].start = e[o].start), (r[o].end = e[o].end));\n+                                    else t.pre || (t.plain = !0);\n+                                  })(a)\n+                                  : a.processed ||\n+                                  (Ti(a),\n+                                      (s = xr((i = a), \"v-if\")) ? ((i.if = s), ji(i, { exp: s, block: i })) : (null != xr(i, \"v-else\") && (i.else = !0), (s = xr(i, \"v-else-if\")) && (i.elseif = s)),\n+                                  null != xr((s = a), \"v-once\") && (s.once = !0)),\n+                              (u = u || a),\n+                              n ? v(a) : ((f = a), p.push(a));\n+                        },\n+                        end: function (t, e, n) {\n+                          var r = p[p.length - 1];\n+                          --p.length, (f = p[p.length - 1]), v(r);\n+                        },\n+                        chars: function (t, e, n) {\n+                          var r, o, i;\n+                          !f ||\n+                          (J && \"textarea\" === f.tag && f.attrsMap.placeholder === t) ||\n+                          ((i = f.children),\n+                          (t = h || t.trim() ? (\"script\" === f.tag || \"style\" === f.tag ? t : Ci(t)) : i.length ? (s ? (\"condense\" === s && $i.test(t) ? \"\" : \" \") : a ? \" \" : \"\") : \"\") &&\n+                          (h || \"condense\" !== s || (t = t.replace(ki, \" \")),\n+                              !d &&\n+                              \" \" !== t &&\n+                              (r = (function (t) {\n+                                var e = Uo ? Qo(Uo) : Ko;\n+                                if (e.test(t)) {\n+                                  for (var n, r, o, i = [], a = [], s = (e.lastIndex = 0); (n = e.exec(t)); ) {\n+                                    (r = n.index) > s && (a.push((o = t.slice(s, r))), i.push(JSON.stringify(o)));\n+                                    var c = dr(n[1].trim());\n+                                    i.push(\"_s(\" + c + \")\"), a.push({ \"@binding\": c }), (s = r + n[0].length);\n+                                  }\n+                                  return s \u003C t.length && (a.push((o = t.slice(s))), i.push(JSON.stringify(o))), { expression: i.join(\"+\"), tokens: a };\n+                                }\n+                              })(t))\n+                                  ? (o = { type: 2, expression: r.expression, tokens: r.tokens, text: t })\n+                                  : (\" \" === t && i.length && \" \" === i[i.length - 1].text) || (o = { type: 3, text: t }),\n+                          o && i.push(o)));\n+                        },\n+                        comment: function (t, e, n) {\n+                          f && ((t = { type: 3, text: t, isComment: !0 }), f.children.push(t));\n+                        },\n+                      }),\n+                          u\n+                  );\n+                })(t.trim(), e);\n+            !1 !== e.optimize &&\n+            ((n = e),\n+            (t = r) &&\n+            ((Li = Di(n.staticKeys || \"\")),\n+                (Ni = n.isReservedTag || k),\n+                (function t(e) {\n+                  var n;\n+                  if (\n+                      ((e.static =\n+                          2 !== (n = e).type &&\n+                          (3 === n.type ||\n+                              !(\n+                                  !n.pre &&\n+                                  (n.hasBindings ||\n+                                      n.if ||\n+                                      n.for ||\n+                                      u(n.tag) ||\n+                                      !Ni(n.tag) ||\n+                                      (function (t) {\n+                                        for (; t.parent; ) {\n+                                          if (\"template\" !== (t = t.parent).tag) return;\n+                                          if (t.for) return 1;\n+                                        }\n+                                      })(n) ||\n+                                      !Object.keys(n).every(Li))\n+                              ))),\n+                      1 === e.type && (Ni(e.tag) || \"slot\" === e.tag || null != e.attrsMap[\"inline-template\"]))\n+                  ) {\n+                    for (var r = 0, o = e.children.length; r \u003C o; r++) {\n+                      var i = e.children[r];\n+                      t(i), i.static || (e.static = !1);\n+                    }\n+                    if (e.ifConditions)\n+                      for (var a = 1, s = e.ifConditions.length; a \u003C s; a++) {\n+                        var c = e.ifConditions[a].block;\n+                        t(c), c.static || (e.static = !1);\n+                      }\n+                  }\n+                })(t),\n+                (function t(e, n) {\n+                  if (1 === e.type) {\n+                    if (((e.static || e.once) && (e.staticInFor = n), e.static && e.children.length && (1 !== e.children.length || 3 !== e.children[0].type))) return (e.staticRoot = !0), 0;\n+                    if (((e.staticRoot = !1), e.children)) for (var r = 0, o = e.children.length; r \u003C o; r++) t(e.children[r], n || !!e.for);\n+                    if (e.ifConditions) for (var i = 1, a = e.ifConditions.length; i \u003C a; i++) t(e.ifConditions[i].block, n);\n+                  }\n+                })(t, !1)));\n+            e = Ki(r, e);\n+            return { ast: r, render: e.render, staticRenderFns: e.staticRenderFns };\n+          }),\n+              (ha = Gt),\n+              (pa = ma),\n+              (da = Object.create(null)),\n+              function (t, e, n) {\n+                (e = w({}, e)).warn, delete e.warn;\n+                var r = e.delimiters ? String(e.delimiters) + t : t;\n+                if (da[r]) return da[r];\n+                var t = pa(t, e),\n+                    e = {},\n+                    o = [];\n+                return (\n+                    (e.render = la(t.render, o)),\n+                        (e.staticRenderFns = t.staticRenderFns.map(function (t) {\n+                          return la(t, o);\n+                        })),\n+                        (da[r] = e)\n+                );\n+              });\n+  function ma(t, e) {\n+    var n = Object.create(ha),\n+        r = [],\n+        o = [];\n+    if (e)\n+      for (var i in (e.modules && (n.modules = (ha.modules || []).concat(e.modules)), e.directives && (n.directives = w(Object.create(ha.directives || null), e.directives)), e)) \"modules\" !== i && \"directives\" !== i && (n[i] = e[i]);\n+    n.warn = function (t, e, n) {\n+      (n ? o : r).push(t);\n+    };\n+    t = ua(t.trim(), n);\n+    return (t.errors = r), (t.tips = o), t;\n+  }\n+  function ya(t) {\n+    return ((fa = fa || document.createElement(\"div\")).innerHTML = t ? '\u003Ca href=\"\\n\"\u002F>' : '\u003Cdiv a=\"\\n\"\u002F>'), 0 \u003C fa.innerHTML.indexOf(\"&#10;\");\n+  }\n+  var ga = !!B && ya(!1),\n+      _a = !!B && ya(!0),\n+      ba = t(function (t) {\n+        t = Jn(t);\n+        return t && t.innerHTML;\n+      }),\n+      wa = _n.prototype.$mount;\n+  return (\n+      (_n.prototype.$mount = function (t, e) {\n+        if ((t = t && Jn(t)) === document.body || t === document.documentElement) return this;\n+        var n = this.$options;\n+        if (!n.render) {\n+          var r,\n+              o = n.template;\n+          if (o)\n+            if (\"string\" == typeof o) \"#\" === o.charAt(0) && (o = ba(o));\n+            else {\n+              if (!o.nodeType) return this;\n+              o = o.innerHTML;\n+            }\n+          else\n+            t &&\n+            (o = (function (t) {\n+              if (t.outerHTML) return t.outerHTML;\n+              var e = document.createElement(\"div\");\n+              return e.appendChild(t.cloneNode(!0)), e.innerHTML;\n+            })(t));\n+          o &&\n+          ((o = (r = va(o, { outputSourceRange: !1, shouldDecodeNewlines: ga, shouldDecodeNewlinesForHref: _a, delimiters: n.delimiters, comments: n.comments }, this)).render),\n+              (r = r.staticRenderFns),\n+              (n.render = o),\n+              (n.staticRenderFns = r));\n+        }\n+        return wa.call(this, t, e);\n+      }),\n+          (_n.compile = va),\n+          _n\n+  );\n+}),\n+    (function (t, e) {\n+      \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : ((t = t || self).Vuex = e());\n+    })(this, function () {\n+      \"use strict\";\n+      var l = \"undefined\" != typeof window && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+      function s(e, n) {\n+        Object.keys(e).forEach(function (t) {\n+          return n(e[t], t);\n+        });\n+      }\n+      function u(t, e) {\n+        if (!t) throw new Error(\"[vuex] \" + e);\n+      }\n+      function i(t, e) {\n+        (this.runtime = e), (this._children = Object.create(null)), (t = (this._rawModule = t).state), (this.state = (\"function\" == typeof t ? t() : t) || {});\n+      }\n+      var t = { namespaced: { configurable: !0 } };\n+      (t.namespaced.get = function () {\n+        return !!this._rawModule.namespaced;\n+      }),\n+          (i.prototype.addChild = function (t, e) {\n+            this._children[t] = e;\n+          }),\n+          (i.prototype.removeChild = function (t) {\n+            delete this._children[t];\n+          }),\n+          (i.prototype.getChild = function (t) {\n+            return this._children[t];\n+          }),\n+          (i.prototype.update = function (t) {\n+            (this._rawModule.namespaced = t.namespaced), t.actions && (this._rawModule.actions = t.actions), t.mutations && (this._rawModule.mutations = t.mutations), t.getters && (this._rawModule.getters = t.getters);\n+          }),\n+          (i.prototype.forEachChild = function (t) {\n+            s(this._children, t);\n+          }),\n+          (i.prototype.forEachGetter = function (t) {\n+            this._rawModule.getters && s(this._rawModule.getters, t);\n+          }),\n+          (i.prototype.forEachAction = function (t) {\n+            this._rawModule.actions && s(this._rawModule.actions, t);\n+          }),\n+          (i.prototype.forEachMutation = function (t) {\n+            this._rawModule.mutations && s(this._rawModule.mutations, t);\n+          }),\n+          Object.defineProperties(i.prototype, t);\n+      function f(t) {\n+        this.register([], t, !1);\n+      }\n+      (f.prototype.get = function (t) {\n+        return t.reduce(function (t, e) {\n+          return t.getChild(e);\n+        }, this.root);\n+      }),\n+          (f.prototype.getNamespace = function (t) {\n+            var n = this.root;\n+            return t.reduce(function (t, e) {\n+              return t + ((n = n.getChild(e)).namespaced ? e + \"\u002F\" : \"\");\n+            }, \"\");\n+          }),\n+          (f.prototype.update = function (t) {\n+            !(function t(e, n, r) {\n+              c(e, r);\n+              n.update(r);\n+              if (r.modules)\n+                for (var o in r.modules) {\n+                  if (!n.getChild(o)) return void console.warn(\"[vuex] trying to add a new module '\" + o + \"' on hot reloading, manual reload is needed\");\n+                  t(e.concat(o), n.getChild(o), r.modules[o]);\n+                }\n+            })([], this.root, t);\n+          }),\n+          (f.prototype.register = function (n, t, r) {\n+            var o = this;\n+            void 0 === r && (r = !0), c(n, t);\n+            var e = new i(t, r);\n+            0 === n.length ? (this.root = e) : this.get(n.slice(0, -1)).addChild(n[n.length - 1], e),\n+            t.modules &&\n+            s(t.modules, function (t, e) {\n+              o.register(n.concat(e), t, r);\n+            });\n+          }),\n+          (f.prototype.unregister = function (t) {\n+            var e = this.get(t.slice(0, -1)),\n+                t = t[t.length - 1];\n+            e.getChild(t).runtime && e.removeChild(t);\n+          });\n+      var h,\n+          e = {\n+            assert: function (t) {\n+              return \"function\" == typeof t;\n+            },\n+            expected: \"function\",\n+          },\n+          a = {\n+            getters: e,\n+            mutations: e,\n+            actions: {\n+              assert: function (t) {\n+                return \"function\" == typeof t || (\"object\" == typeof t && \"function\" == typeof t.handler);\n+              },\n+              expected: 'function or object with \"handler\" function',\n+            },\n+          };\n+      function c(o, t) {\n+        Object.keys(a).forEach(function (n) {\n+          var r;\n+          t[n] &&\n+          ((r = a[n]),\n+              s(t[n], function (t, e) {\n+                u(\n+                    r.assert(t),\n+                    (function (t, e, n, r, o) {\n+                      n = e + \" should be \" + o + ' but \"' + e + \".\" + n + '\"';\n+                      0 \u003C t.length && (n += ' in module \"' + t.join(\".\") + '\"');\n+                      return (n += \" is \" + JSON.stringify(r) + \".\");\n+                    })(o, n, e, t, r.expected)\n+                );\n+              }));\n+        });\n+      }\n+      (t = function t(e) {\n+        var n = this;\n+        void 0 === e && (e = {}),\n+        !h && \"undefined\" != typeof window && window.Vue && d(window.Vue),\n+            u(h, \"must call Vue.use(Vuex) before creating a store instance.\"),\n+            u(\"undefined\" != typeof Promise, \"vuex requires a Promise polyfill in this browser.\"),\n+            u(this instanceof t, \"store must be called with the new operator.\");\n+        var r = e.plugins;\n+        void 0 === r && (r = []);\n+        var o = e.strict;\n+        void 0 === o && (o = !1),\n+            (this._committing = !1),\n+            (this._actions = Object.create(null)),\n+            (this._actionSubscribers = []),\n+            (this._mutations = Object.create(null)),\n+            (this._wrappedGetters = Object.create(null)),\n+            (this._modules = new f(e)),\n+            (this._modulesNamespaceMap = Object.create(null)),\n+            (this._subscribers = []),\n+            (this._watcherVM = new h());\n+        var i = this,\n+            a = this.dispatch,\n+            s = this.commit;\n+        (this.dispatch = function (t, e) {\n+          return a.call(i, t, e);\n+        }),\n+            (this.commit = function (t, e, n) {\n+              return s.call(i, t, e, n);\n+            }),\n+            (this.strict = o);\n+        var c,\n+            o = this._modules.root.state;\n+        v(this, o, [], this._modules.root),\n+            p(this, o),\n+            r.forEach(function (t) {\n+              return t(n);\n+            }),\n+        (void 0 !== e.devtools ? e : h.config).devtools &&\n+        ((c = this),\n+        l &&\n+        ((c._devtoolHook = l).emit(\"vuex:init\", c),\n+            l.on(\"vuex:travel-to-state\", function (t) {\n+              c.replaceState(t);\n+            }),\n+            c.subscribe(function (t, e) {\n+              l.emit(\"vuex:mutation\", t, e);\n+            })));\n+      }),\n+          (e = { state: { configurable: !0 } });\n+      function n(e, n) {\n+        return (\n+            n.indexOf(e) \u003C 0 && n.push(e),\n+                function () {\n+                  var t = n.indexOf(e);\n+                  -1 \u003C t && n.splice(t, 1);\n+                }\n+        );\n+      }\n+      function r(t, e) {\n+        (t._actions = Object.create(null)), (t._mutations = Object.create(null)), (t._wrappedGetters = Object.create(null)), (t._modulesNamespaceMap = Object.create(null));\n+        var n = t.state;\n+        v(t, n, [], t._modules.root, !0), p(t, n, e);\n+      }\n+      function p(n, t, e) {\n+        var r = n._vm;\n+        n.getters = {};\n+        var o = n._wrappedGetters,\n+            i = {};\n+        s(o, function (t, e) {\n+          (i[e] = function () {\n+            return t(n);\n+          }),\n+              Object.defineProperty(n.getters, e, {\n+                get: function () {\n+                  return n._vm[e];\n+                },\n+                enumerable: !0,\n+              });\n+        });\n+        var a,\n+            o = h.config.silent;\n+        (h.config.silent = !0),\n+            (n._vm = new h({ data: { $$state: t }, computed: i })),\n+            (h.config.silent = o),\n+        n.strict &&\n+        (a = n)._vm.$watch(\n+            function () {\n+              return this._data.$$state;\n+            },\n+            function () {\n+              u(a._committing, \"do not mutate vuex store state outside mutation handlers.\");\n+            },\n+            { deep: !0, sync: !0 }\n+        ),\n+        r &&\n+        (e &&\n+        n._withCommit(function () {\n+          r._data.$$state = null;\n+        }),\n+            h.nextTick(function () {\n+              return r.$destroy();\n+            }));\n+      }\n+      function v(i, n, r, t, o) {\n+        var e,\n+            a,\n+            s = !r.length,\n+            c = i._modules.getNamespace(r);\n+        t.namespaced && (i._modulesNamespaceMap[c] = t),\n+        s ||\n+        o ||\n+        ((e = m(n, r.slice(0, -1))),\n+            (a = r[r.length - 1]),\n+            i._withCommit(function () {\n+              h.set(e, a, t.state);\n+            }));\n+        var l,\n+            u,\n+            f,\n+            p,\n+            d = (t.context =\n+                ((l = i),\n+                    (f = r),\n+                    (s = {\n+                      dispatch: (p = \"\" === (u = c))\n+                          ? l.dispatch\n+                          : function (t, e, n) {\n+                            var r = y(t, e, n),\n+                                t = r.payload,\n+                                e = r.options,\n+                                n = r.type;\n+                            if ((e && e.root) || ((n = u + n), l._actions[n])) return l.dispatch(n, t);\n+                            console.error(\"[vuex] unknown local action type: \" + r.type + \", global type: \" + n);\n+                          },\n+                      commit: p\n+                          ? l.commit\n+                          : function (t, e, n) {\n+                            var r = y(t, e, n),\n+                                t = r.payload,\n+                                e = r.options,\n+                                n = r.type;\n+                            (e && e.root) || ((n = u + n), l._mutations[n]) ? l.commit(n, t, e) : console.error(\"[vuex] unknown local mutation type: \" + r.type + \", global type: \" + n);\n+                          },\n+                    }),\n+                    Object.defineProperties(s, {\n+                      getters: {\n+                        get: p\n+                            ? function () {\n+                              return l.getters;\n+                            }\n+                            : function () {\n+                              return (\n+                                  (n = l),\n+                                      (o = {}),\n+                                      (i = (r = u).length),\n+                                      Object.keys(n.getters).forEach(function (t) {\n+                                        var e;\n+                                        t.slice(0, i) === r &&\n+                                        ((e = t.slice(i)),\n+                                            Object.defineProperty(o, e, {\n+                                              get: function () {\n+                                                return n.getters[t];\n+                                              },\n+                                              enumerable: !0,\n+                                            }));\n+                                      }),\n+                                      o\n+                              );\n+                              var n, r, o, i;\n+                            },\n+                      },\n+                      state: {\n+                        get: function () {\n+                          return m(l.state, f);\n+                        },\n+                      },\n+                    }),\n+                    s));\n+        t.forEachMutation(function (t, e) {\n+          var n, r, o;\n+          (e = c + e),\n+              (r = t),\n+              (o = d),\n+              ((n = i)._mutations[e] || (n._mutations[e] = [])).push(function (t) {\n+                r.call(n, o.state, t);\n+              });\n+        }),\n+            t.forEachAction(function (t, e) {\n+              var n,\n+                  r,\n+                  o,\n+                  e = t.root ? e : c + e,\n+                  t = t.handler || t;\n+              (e = e),\n+                  (r = t),\n+                  (o = d),\n+                  ((n = i)._actions[e] || (n._actions[e] = [])).push(function (t, e) {\n+                    t = r.call(n, { dispatch: o.dispatch, commit: o.commit, getters: o.getters, state: o.state, rootGetters: n.getters, rootState: n.state }, t, e);\n+                    return (\n+                        ((e = t) && \"function\" == typeof e.then) || (t = Promise.resolve(t)),\n+                            n._devtoolHook\n+                                ? t.catch(function (t) {\n+                                  throw (n._devtoolHook.emit(\"vuex:error\", t), t);\n+                                })\n+                                : t\n+                    );\n+                  });\n+            }),\n+            t.forEachGetter(function (t, e) {\n+              !(function (t, e, n, r) {\n+                if (t._wrappedGetters[e]) return console.error(\"[vuex] duplicate getter key: \" + e);\n+                t._wrappedGetters[e] = function (t) {\n+                  return n(r.state, r.getters, t.state, t.getters);\n+                };\n+              })(i, c + e, t, d);\n+            }),\n+            t.forEachChild(function (t, e) {\n+              v(i, n, r.concat(e), t, o);\n+            });\n+      }\n+      function m(t, e) {\n+        return e.length\n+            ? e.reduce(function (t, e) {\n+              return t[e];\n+            }, t)\n+            : t;\n+      }\n+      function y(t, e, n) {\n+        var r;\n+        return null !== (r = t) && \"object\" == typeof r && t.type && ((n = e), (t = (e = t).type)), u(\"string\" == typeof t, \"expects string as the type, but found \" + typeof t + \".\"), { type: t, payload: e, options: n };\n+      }\n+      function d(t) {\n+        var e;\n+        function n() {\n+          var t = this.$options;\n+          t.store ? (this.$store = \"function\" == typeof t.store ? t.store() : t.store) : t.parent && t.parent.$store && (this.$store = t.parent.$store);\n+        }\n+        h && t === h\n+            ? console.error(\"[vuex] already installed. Vue.use(Vuex) should be called only once.\")\n+            : ((t = h = t),\n+                2 \u003C= Number(t.version.split(\".\")[0])\n+                    ? t.mixin({ beforeCreate: n })\n+                    : ((e = t.prototype._init),\n+                        (t.prototype._init = function (t) {\n+                          void 0 === t && (t = {}), (t.init = t.init ? [n].concat(t.init) : n), e.call(this, t);\n+                        })));\n+      }\n+      (e.state.get = function () {\n+        return this._vm._data.$$state;\n+      }),\n+          (e.state.set = function (t) {\n+            u(!1, \"use store.replaceState() to explicit replace store state.\");\n+          }),\n+          (t.prototype.commit = function (t, e, n) {\n+            var r = this,\n+                e = y(t, e, n),\n+                n = e.type,\n+                o = e.payload,\n+                e = e.options,\n+                i = { type: n, payload: o },\n+                a = this._mutations[n];\n+            a\n+                ? (this._withCommit(function () {\n+                  a.forEach(function (t) {\n+                    t(o);\n+                  });\n+                }),\n+                    this._subscribers.forEach(function (t) {\n+                      return t(i, r.state);\n+                    }),\n+                e && e.silent && console.warn(\"[vuex] mutation type: \" + n + \". Silent option has been removed. Use the filter functionality in the vue-devtools\"))\n+                : console.error(\"[vuex] unknown mutation type: \" + n);\n+          }),\n+          (t.prototype.dispatch = function (t, e) {\n+            var n = this,\n+                t = y(t, e),\n+                e = t.type,\n+                r = t.payload,\n+                o = { type: e, payload: r },\n+                t = this._actions[e];\n+            if (t) {\n+              try {\n+                this._actionSubscribers\n+                .filter(function (t) {\n+                  return t.before;\n+                })\n+                .forEach(function (t) {\n+                  return t.before(o, n.state);\n+                });\n+              } catch (t) {\n+                console.warn(\"[vuex] error in before action subscribers: \"), console.error(t);\n+              }\n+              return (1 \u003C t.length\n+                      ? Promise.all(\n+                          t.map(function (t) {\n+                            return t(r);\n+                          })\n+                      )\n+                      : t[0](r)\n+              ).then(function (t) {\n+                try {\n+                  n._actionSubscribers\n+                  .filter(function (t) {\n+                    return t.after;\n+                  })\n+                  .forEach(function (t) {\n+                    return t.after(o, n.state);\n+                  });\n+                } catch (t) {\n+                  console.warn(\"[vuex] error in after action subscribers: \"), console.error(t);\n+                }\n+                return t;\n+              });\n+            }\n+            console.error(\"[vuex] unknown action type: \" + e);\n+          }),\n+          (t.prototype.subscribe = function (t) {\n+            return n(t, this._subscribers);\n+          }),\n+          (t.prototype.subscribeAction = function (t) {\n+            return n(\"function\" == typeof t ? { before: t } : t, this._actionSubscribers);\n+          }),\n+          (t.prototype.watch = function (t, e, n) {\n+            var r = this;\n+            return (\n+                u(\"function\" == typeof t, \"store.watch only accepts a function.\"),\n+                    this._watcherVM.$watch(\n+                        function () {\n+                          return t(r.state, r.getters);\n+                        },\n+                        e,\n+                        n\n+                    )\n+            );\n+          }),\n+          (t.prototype.replaceState = function (t) {\n+            var e = this;\n+            this._withCommit(function () {\n+              e._vm._data.$$state = t;\n+            });\n+          }),\n+          (t.prototype.registerModule = function (t, e, n) {\n+            void 0 === n && (n = {}),\n+            \"string\" == typeof t && (t = [t]),\n+                u(Array.isArray(t), \"module path must be a string or an Array.\"),\n+                u(0 \u003C t.length, \"cannot register the root module by using registerModule.\"),\n+                this._modules.register(t, e),\n+                v(this, this.state, t, this._modules.get(t), n.preserveState),\n+                p(this, this.state);\n+          }),\n+          (t.prototype.unregisterModule = function (e) {\n+            var n = this;\n+            \"string\" == typeof e && (e = [e]),\n+                u(Array.isArray(e), \"module path must be a string or an Array.\"),\n+                this._modules.unregister(e),\n+                this._withCommit(function () {\n+                  var t = m(n.state, e.slice(0, -1));\n+                  h.delete(t, e[e.length - 1]);\n+                }),\n+                r(this);\n+          }),\n+          (t.prototype.hotUpdate = function (t) {\n+            this._modules.update(t), r(this, !0);\n+          }),\n+          (t.prototype._withCommit = function (t) {\n+            var e = this._committing;\n+            (this._committing = !0), t(), (this._committing = e);\n+          }),\n+          Object.defineProperties(t.prototype, e);\n+      var o = x(function (o, t) {\n+            var n = {};\n+            return (\n+                w(t).forEach(function (t) {\n+                  var e = t.key,\n+                      r = t.val;\n+                  (n[e] = function () {\n+                    var t = this.$store.state,\n+                        e = this.$store.getters;\n+                    if (o) {\n+                      var n = $(this.$store, \"mapState\", o);\n+                      if (!n) return;\n+                      (t = n.context.state), (e = n.context.getters);\n+                    }\n+                    return \"function\" == typeof r ? r.call(this, t, e) : t[r];\n+                  }),\n+                      (n[e].vuex = !0);\n+                }),\n+                    n\n+            );\n+          }),\n+          g = x(function (i, t) {\n+            var n = {};\n+            return (\n+                w(t).forEach(function (t) {\n+                  var e = t.key,\n+                      o = t.val;\n+                  n[e] = function () {\n+                    for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\n+                    var n = this.$store.commit;\n+                    if (i) {\n+                      var r = $(this.$store, \"mapMutations\", i);\n+                      if (!r) return;\n+                      n = r.context.commit;\n+                    }\n+                    return \"function\" == typeof o ? o.apply(this, [n].concat(t)) : n.apply(this.$store, [o].concat(t));\n+                  };\n+                }),\n+                    n\n+            );\n+          }),\n+          _ = x(function (r, t) {\n+            var o = {};\n+            return (\n+                w(t).forEach(function (t) {\n+                  var e = t.key,\n+                      n = t.val,\n+                      n = r + n;\n+                  (o[e] = function () {\n+                    if (!r || $(this.$store, \"mapGetters\", r)) {\n+                      if (n in this.$store.getters) return this.$store.getters[n];\n+                      console.error(\"[vuex] unknown getter: \" + n);\n+                    }\n+                  }),\n+                      (o[e].vuex = !0);\n+                }),\n+                    o\n+            );\n+          }),\n+          b = x(function (i, t) {\n+            var n = {};\n+            return (\n+                w(t).forEach(function (t) {\n+                  var e = t.key,\n+                      o = t.val;\n+                  n[e] = function () {\n+                    for (var t = [], e = arguments.length; e--; ) t[e] = arguments[e];\n+                    var n = this.$store.dispatch;\n+                    if (i) {\n+                      var r = $(this.$store, \"mapActions\", i);\n+                      if (!r) return;\n+                      n = r.context.dispatch;\n+                    }\n+                    return \"function\" == typeof o ? o.apply(this, [n].concat(t)) : n.apply(this.$store, [o].concat(t));\n+                  };\n+                }),\n+                    n\n+            );\n+          });\n+      function w(e) {\n+        return Array.isArray(e)\n+            ? e.map(function (t) {\n+              return { key: t, val: t };\n+            })\n+            : Object.keys(e).map(function (t) {\n+              return { key: t, val: e[t] };\n+            });\n+      }\n+      function x(n) {\n+        return function (t, e) {\n+          return \"string\" != typeof t ? ((e = t), (t = \"\")) : \"\u002F\" !== t.charAt(t.length - 1) && (t += \"\u002F\"), n(t, e);\n+        };\n+      }\n+      function $(t, e, n) {\n+        t = t._modulesNamespaceMap[n];\n+        return t || console.error(\"[vuex] module namespace not found in \" + e + \"(): \" + n), t;\n+      }\n+      return {\n+        Store: t,\n+        install: d,\n+        version: \"3.1.0\",\n+        mapState: o,\n+        mapMutations: g,\n+        mapGetters: _,\n+        mapActions: b,\n+        createNamespacedHelpers: function (t) {\n+          return { mapState: o.bind(null, t), mapGetters: _.bind(null, t), mapMutations: g.bind(null, t), mapActions: b.bind(null, t) };\n+        },\n+      };\n+    }),\n+    (function (t, e) {\n+      \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : (t.VueResource = e());\n+    })(this, function () {\n+      \"use strict\";\n+      function a(t) {\n+        (this.state = 2), (this.value = void 0), (this.deferred = []);\n+        var e = this;\n+        try {\n+          t(\n+              function (t) {\n+                e.resolve(t);\n+              },\n+              function (t) {\n+                e.reject(t);\n+              }\n+          );\n+        } catch (t) {\n+          e.reject(t);\n+        }\n+      }\n+      (a.reject = function (n) {\n+        return new a(function (t, e) {\n+          e(n);\n+        });\n+      }),\n+          (a.resolve = function (n) {\n+            return new a(function (t, e) {\n+              t(n);\n+            });\n+          }),\n+          (a.all = function (i) {\n+            return new a(function (n, t) {\n+              var r = 0,\n+                  o = [];\n+              0 === i.length && n(o);\n+              for (var e = 0; e \u003C i.length; e += 1)\n+                a.resolve(i[e]).then(\n+                    (function (e) {\n+                      return function (t) {\n+                        (o[e] = t), (r += 1) === i.length && n(o);\n+                      };\n+                    })(e),\n+                    t\n+                );\n+            });\n+          }),\n+          (a.race = function (r) {\n+            return new a(function (t, e) {\n+              for (var n = 0; n \u003C r.length; n += 1) a.resolve(r[n]).then(t, e);\n+            });\n+          });\n+      var t = a.prototype;\n+      function u(t, e) {\n+        t instanceof Promise ? (this.promise = t) : (this.promise = new Promise(t.bind(e))), (this.context = e);\n+      }\n+      (t.resolve = function (t) {\n+        var e = this;\n+        if (2 === e.state) {\n+          if (t === e) throw new TypeError(\"Promise settled with itself.\");\n+          var n = !1;\n+          try {\n+            var r = t && t.then;\n+            if (null !== t && \"object\" == typeof t && \"function\" == typeof r)\n+              return void r.call(\n+                  t,\n+                  function (t) {\n+                    n || e.resolve(t), (n = !0);\n+                  },\n+                  function (t) {\n+                    n || e.reject(t), (n = !0);\n+                  }\n+              );\n+          } catch (t) {\n+            return void (n || e.reject(t));\n+          }\n+          (e.state = 0), (e.value = t), e.notify();\n+        }\n+      }),\n+          (t.reject = function (t) {\n+            var e = this;\n+            if (2 === e.state) {\n+              if (t === e) throw new TypeError(\"Promise settled with itself.\");\n+              (e.state = 1), (e.value = t), e.notify();\n+            }\n+          }),\n+          (t.notify = function () {\n+            var i = this;\n+            n(function () {\n+              if (2 !== i.state)\n+                for (; i.deferred.length; ) {\n+                  var t = i.deferred.shift(),\n+                      e = t[0],\n+                      n = t[1],\n+                      r = t[2],\n+                      o = t[3];\n+                  try {\n+                    0 === i.state ? r(\"function\" == typeof e ? e.call(void 0, i.value) : i.value) : 1 === i.state && (\"function\" == typeof n ? r(n.call(void 0, i.value)) : o(i.value));\n+                  } catch (t) {\n+                    o(t);\n+                  }\n+                }\n+            }, void 0);\n+          }),\n+          (t.then = function (n, r) {\n+            var o = this;\n+            return new a(function (t, e) {\n+              o.deferred.push([n, r, t, e]), o.notify();\n+            });\n+          }),\n+          (t.catch = function (t) {\n+            return this.then(void 0, t);\n+          }),\n+      \"undefined\" == typeof Promise && (window.Promise = a),\n+          (u.all = function (t, e) {\n+            return new u(Promise.all(t), e);\n+          }),\n+          (u.resolve = function (t, e) {\n+            return new u(Promise.resolve(t), e);\n+          }),\n+          (u.reject = function (t, e) {\n+            return new u(Promise.reject(t), e);\n+          }),\n+          (u.race = function (t, e) {\n+            return new u(Promise.race(t), e);\n+          });\n+      t = u.prototype;\n+      (t.bind = function (t) {\n+        return (this.context = t), this;\n+      }),\n+          (t.then = function (t, e) {\n+            return t && t.bind && this.context && (t = t.bind(this.context)), e && e.bind && this.context && (e = e.bind(this.context)), new u(this.promise.then(t, e), this.context);\n+          }),\n+          (t.catch = function (t) {\n+            return t && t.bind && this.context && (t = t.bind(this.context)), new u(this.promise.catch(t), this.context);\n+          }),\n+          (t.finally = function (e) {\n+            return this.then(\n+                function (t) {\n+                  return e.call(this), t;\n+                },\n+                function (t) {\n+                  return e.call(this), Promise.reject(t);\n+                }\n+            );\n+          });\n+      var n,\n+          o = {}.hasOwnProperty,\n+          r = [].slice,\n+          f = !1,\n+          i = \"undefined\" != typeof window,\n+          e = function (t) {\n+            var e = t.config,\n+                t = t.nextTick;\n+            (n = t), (f = e.debug || !e.silent);\n+          };\n+      function c(t) {\n+        return t ? t.replace(\u002F^\\s*|\\s*$\u002Fg, \"\") : \"\";\n+      }\n+      function s(t) {\n+        return t ? t.toLowerCase() : \"\";\n+      }\n+      var l = Array.isArray;\n+      function p(t) {\n+        return \"string\" == typeof t;\n+      }\n+      function d(t) {\n+        return \"function\" == typeof t;\n+      }\n+      function h(t) {\n+        return null !== t && \"object\" == typeof t;\n+      }\n+      function v(t) {\n+        return h(t) && Object.getPrototypeOf(t) == Object.prototype;\n+      }\n+      function m(t, e, n) {\n+        t = u.resolve(t);\n+        return arguments.length \u003C 2 ? t : t.then(e, n);\n+      }\n+      function y(t, e, n) {\n+        return d((n = n || {})) && (n = n.call(e)), b(t.bind({ $vm: e, $options: n }), t, { $options: n });\n+      }\n+      function g(t, e) {\n+        var n, r;\n+        if (l(t)) for (n = 0; n \u003C t.length; n++) e.call(t[n], t[n], n);\n+        else if (h(t)) for (r in t) o.call(t, r) && e.call(t[r], t[r], r);\n+        return t;\n+      }\n+      var _ =\n+          Object.assign ||\n+          function (e) {\n+            return (\n+                r.call(arguments, 1).forEach(function (t) {\n+                  w(e, t);\n+                }),\n+                    e\n+            );\n+          };\n+      function b(e) {\n+        return (\n+            r.call(arguments, 1).forEach(function (t) {\n+              w(e, t, !0);\n+            }),\n+                e\n+        );\n+      }\n+      function w(t, e, n) {\n+        for (var r in e) n && (v(e[r]) || l(e[r])) ? (v(e[r]) && !v(t[r]) && (t[r] = {}), l(e[r]) && !l(t[r]) && (t[r] = []), w(t[r], e[r], n)) : void 0 !== e[r] && (t[r] = e[r]);\n+      }\n+      function x(t, e, n) {\n+        var r,\n+            a,\n+            s,\n+            t =\n+                ((r = t),\n+                    (a = [\"+\", \"#\", \".\", \"\u002F\", \";\", \"?\", \"&\"]),\n+                    {\n+                      vars: (s = []),\n+                      expand: function (i) {\n+                        return r.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (t, e, n) {\n+                          if (e) {\n+                            var r = null,\n+                                o = [];\n+                            if (\n+                                (-1 !== a.indexOf(e.charAt(0)) && ((r = e.charAt(0)), (e = e.substr(1))),\n+                                    e.split(\u002F,\u002Fg).forEach(function (t) {\n+                                      t = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(t);\n+                                      o.push.apply(\n+                                          o,\n+                                          (function (t, e, n, r) {\n+                                            var o = t[n],\n+                                                i = [];\n+                                            {\n+                                              var a;\n+                                              $(o) && \"\" !== o\n+                                                  ? \"string\" == typeof o || \"number\" == typeof o || \"boolean\" == typeof o\n+                                                  ? ((o = o.toString()), r && \"*\" !== r && (o = o.substring(0, parseInt(r, 10))), i.push(C(e, o, k(e) ? n : null)))\n+                                                  : \"*\" === r\n+                                                      ? Array.isArray(o)\n+                                                          ? o.filter($).forEach(function (t) {\n+                                                            i.push(C(e, t, k(e) ? n : null));\n+                                                          })\n+                                                          : Object.keys(o).forEach(function (t) {\n+                                                            $(o[t]) && i.push(C(e, o[t], t));\n+                                                          })\n+                                                      : ((a = []),\n+                                                          Array.isArray(o)\n+                                                              ? o.filter($).forEach(function (t) {\n+                                                                a.push(C(e, t));\n+                                                              })\n+                                                              : Object.keys(o).forEach(function (t) {\n+                                                                $(o[t]) && (a.push(encodeURIComponent(t)), a.push(C(e, o[t].toString())));\n+                                                              }),\n+                                                          k(e) ? i.push(encodeURIComponent(n) + \"=\" + a.join(\",\")) : 0 !== a.length && i.push(a.join(\",\")))\n+                                                  : \";\" === e\n+                                                  ? i.push(encodeURIComponent(n))\n+                                                  : \"\" !== o || (\"&\" !== e && \"?\" !== e)\n+                                                      ? \"\" === o && i.push(\"\")\n+                                                      : i.push(encodeURIComponent(n) + \"=\");\n+                                            }\n+                                            return i;\n+                                          })(i, r, t[1], t[2] || t[3])\n+                                      ),\n+                                          s.push(t[1]);\n+                                    }),\n+                                r && \"+\" !== r)\n+                            ) {\n+                              e = \",\";\n+                              return \"?\" === r ? (e = \"&\") : \"#\" !== r && (e = r), (0 !== o.length ? r : \"\") + o.join(e);\n+                            }\n+                            return o.join(\",\");\n+                          }\n+                          return O(n);\n+                        });\n+                      },\n+                    }),\n+            e = t.expand(e);\n+        return n && n.push.apply(n, t.vars), e;\n+      }\n+      function $(t) {\n+        return null != t;\n+      }\n+      function k(t) {\n+        return \";\" === t || \"&\" === t || \"?\" === t;\n+      }\n+      function C(t, e, n) {\n+        return (e = (\"+\" === t || \"#\" === t ? O : encodeURIComponent)(e)), n ? encodeURIComponent(n) + \"=\" + e : e;\n+      }\n+      function O(t) {\n+        return t\n+        .split(\u002F(%[0-9A-Fa-f]{2})\u002Fg)\n+        .map(function (t) {\n+          return \u002F%[0-9A-Fa-f]\u002F.test(t) || (t = encodeURI(t)), t;\n+        })\n+        .join(\"\");\n+      }\n+      function A(t, e) {\n+        var o,\n+            i = this || {},\n+            n = t;\n+        return (\n+            p(t) && (n = { url: t, params: e }),\n+                (n = b({}, A.options, i.$options, n)),\n+                A.transforms.forEach(function (t) {\n+                  var e, n, r;\n+                  p(t) && (t = A.transform[t]),\n+                  d(t) &&\n+                  ((e = t),\n+                      (n = o),\n+                      (r = i.$vm),\n+                      (o = function (t) {\n+                        return e.call(r, t, n);\n+                      }));\n+                }),\n+                o(n)\n+        );\n+      }\n+      (A.options = { url: \"\", root: null, params: {} }),\n+          (A.transform = {\n+            template: function (e) {\n+              var t = [],\n+                  n = x(e.url, e.params, t);\n+              return (\n+                  t.forEach(function (t) {\n+                    delete e.params[t];\n+                  }),\n+                      n\n+              );\n+            },\n+            query: function (t, e) {\n+              var n = Object.keys(A.options.params),\n+                  r = {},\n+                  e = e(t);\n+              return (\n+                  g(t.params, function (t, e) {\n+                    -1 === n.indexOf(e) && (r[e] = t);\n+                  }),\n+                  (r = A.params(r)) && (e += (-1 == e.indexOf(\"?\") ? \"?\" : \"&\") + r),\n+                      e\n+              );\n+            },\n+            root: function (t, e) {\n+              var n = e(t);\n+              return p(t.root) && !\u002F^(https?:)?\\\u002F\u002F.test(n) && ((e = t.root), (t = \"\u002F\"), (n = (e && void 0 === t ? e.replace(\u002F\\s+$\u002F, \"\") : e && t ? e.replace(new RegExp(\"[\" + t + \"]+$\"), \"\") : e) + \"\u002F\" + n)), n;\n+            },\n+          }),\n+          (A.transforms = [\"template\", \"query\", \"root\"]),\n+          (A.params = function (t) {\n+            var e = [],\n+                n = encodeURIComponent;\n+            return (\n+                (e.add = function (t, e) {\n+                  d(e) && (e = e()), null === e && (e = \"\"), this.push(n(t) + \"=\" + n(e));\n+                }),\n+                    (function n(r, t, o) {\n+                      var i,\n+                          a = l(t),\n+                          s = v(t);\n+                      g(t, function (t, e) {\n+                        (i = h(t) || l(t)), o && (e = o + \"[\" + (s || i ? e : \"\") + \"]\"), !o && a ? r.add(t.name, t.value) : i ? n(r, t, e) : r.add(e, t);\n+                      });\n+                    })(e, t),\n+                    e.join(\"&\").replace(\u002F%20\u002Fg, \"+\")\n+            );\n+          }),\n+          (A.parse = function (t) {\n+            var e = document.createElement(\"a\");\n+            return (\n+                document.documentMode && ((e.href = t), (t = e.href)),\n+                    (e.href = t),\n+                    {\n+                      href: e.href,\n+                      protocol: e.protocol ? e.protocol.replace(\u002F:$\u002F, \"\") : \"\",\n+                      port: e.port,\n+                      host: e.host,\n+                      hostname: e.hostname,\n+                      pathname: \"\u002F\" === e.pathname.charAt(0) ? e.pathname : \"\u002F\" + e.pathname,\n+                      search: e.search ? e.search.replace(\u002F^\\?\u002F, \"\") : \"\",\n+                      hash: e.hash ? e.hash.replace(\u002F^#\u002F, \"\") : \"\",\n+                    }\n+            );\n+          });\n+      function S(o) {\n+        return new u(function (n) {\n+          function t(t) {\n+            var e = t.type,\n+                t = 0;\n+            \"load\" === e ? (t = 200) : \"error\" === e && (t = 500), n(o.respondWith(r.responseText, { status: t }));\n+          }\n+          var r = new XDomainRequest();\n+          (o.abort = function () {\n+            return r.abort();\n+          }),\n+              r.open(o.method, o.getUrl()),\n+          o.timeout && (r.timeout = o.timeout),\n+              (r.onload = t),\n+              (r.onabort = t),\n+              (r.onerror = t),\n+              (r.ontimeout = t),\n+              (r.onprogress = function () {}),\n+              r.send(o.getBody());\n+        });\n+      }\n+      var T = i && \"withCredentials\" in new XMLHttpRequest();\n+      function j(a) {\n+        return new u(function (n) {\n+          var r,\n+              t = a.jsonp || \"callback\",\n+              o = a.jsonpCallback || \"_jsonp\" + Math.random().toString(36).substr(2),\n+              i = null,\n+              e = function (t) {\n+                var e = t.type,\n+                    t = 0;\n+                \"load\" === e && null !== i ? (t = 200) : \"error\" === e && (t = 500), t && window[o] && (delete window[o], document.body.removeChild(r)), n(a.respondWith(i, { status: t }));\n+              };\n+          (window[o] = function (t) {\n+            i = JSON.stringify(t);\n+          }),\n+              (a.abort = function () {\n+                e({ type: \"abort\" });\n+              }),\n+              (a.params[t] = o),\n+          a.timeout && setTimeout(a.abort, a.timeout),\n+              ((r = document.createElement(\"script\")).src = a.getUrl()),\n+              (r.type = \"text\u002Fjavascript\"),\n+              (r.async = !0),\n+              (r.onload = e),\n+              (r.onerror = e),\n+              document.body.appendChild(r);\n+        });\n+      }\n+      function E(o) {\n+        return new u(function (n) {\n+          function t(t) {\n+            var e = o.respondWith(\"response\" in r ? r.response : r.responseText, { status: 1223 === r.status ? 204 : r.status, statusText: 1223 === r.status ? \"No Content\" : c(r.statusText) });\n+            g(c(r.getAllResponseHeaders()).split(\"\\n\"), function (t) {\n+              e.headers.append(t.slice(0, t.indexOf(\":\")), t.slice(t.indexOf(\":\") + 1));\n+            }),\n+                n(e);\n+          }\n+          var r = new XMLHttpRequest();\n+          (o.abort = function () {\n+            return r.abort();\n+          }),\n+          o.progress && (\"GET\" === o.method ? r.addEventListener(\"progress\", o.progress) : \u002F^(POST|PUT)$\u002Fi.test(o.method) && r.upload.addEventListener(\"progress\", o.progress)),\n+              r.open(o.method, o.getUrl(), !0),\n+          o.timeout && (r.timeout = o.timeout),\n+          o.responseType && \"responseType\" in r && (r.responseType = o.responseType),\n+          (o.withCredentials || o.credentials) && (r.withCredentials = !0),\n+          o.crossOrigin || o.headers.set(\"X-Requested-With\", \"XMLHttpRequest\"),\n+              o.headers.forEach(function (t, e) {\n+                r.setRequestHeader(e, t);\n+              }),\n+              (r.onload = t),\n+              (r.onabort = t),\n+              (r.onerror = t),\n+              (r.ontimeout = t),\n+              r.send(o.getBody());\n+        });\n+      }\n+      function M(a) {\n+        var s = require(\"got\");\n+        return new u(function (e) {\n+          var n,\n+              t = a.getUrl(),\n+              r = a.getBody(),\n+              o = a.method,\n+              i = {};\n+          a.headers.forEach(function (t, e) {\n+            i[e] = t;\n+          }),\n+              s(t, { body: r, method: o, headers: i }).then(\n+                  (n = function (t) {\n+                    var n = a.respondWith(t.body, { status: t.statusCode, statusText: c(t.statusMessage) });\n+                    g(t.headers, function (t, e) {\n+                      n.headers.set(e, t);\n+                    }),\n+                        e(n);\n+                  }),\n+                  function (t) {\n+                    return n(t.response);\n+                  }\n+              );\n+        });\n+      }\n+      var P = function (a) {\n+        var s,\n+            c = [I],\n+            l = [];\n+        function t(i) {\n+          return new u(function (e, n) {\n+            function r() {\n+              var t;\n+              d((s = c.pop())) ? s.call(a, i, o) : ((t = \"Invalid interceptor of type \" + typeof s + \", must be a function\"), \"undefined\" != typeof console && f && console.warn(\"[VueResource warn]: \" + t), o());\n+            }\n+            function o(t) {\n+              if (d(t)) l.unshift(t);\n+              else if (h(t))\n+                return (\n+                    l.forEach(function (e) {\n+                      t = m(\n+                          t,\n+                          function (t) {\n+                            return e.call(a, t) || t;\n+                          },\n+                          n\n+                      );\n+                    }),\n+                        void m(t, e, n)\n+                );\n+              r();\n+            }\n+            r();\n+          }, a);\n+        }\n+        return (\n+            h(a) || (a = null),\n+                (t.use = function (t) {\n+                  c.push(t);\n+                }),\n+                t\n+        );\n+      };\n+      function I(t, e) {\n+        e((t.client || (i ? E : M))(t));\n+      }\n+      function L(t) {\n+        var n = this;\n+        (this.map = {}),\n+            g(t, function (t, e) {\n+              return n.append(e, t);\n+            });\n+      }\n+      function N(t, n) {\n+        return Object.keys(t).reduce(function (t, e) {\n+          return s(n) === s(e) ? e : t;\n+        }, null);\n+      }\n+      (L.prototype.has = function (t) {\n+        return null !== N(this.map, t);\n+      }),\n+          (L.prototype.get = function (t) {\n+            t = this.map[N(this.map, t)];\n+            return t ? t.join() : null;\n+          }),\n+          (L.prototype.getAll = function (t) {\n+            return this.map[N(this.map, t)] || [];\n+          }),\n+          (L.prototype.set = function (t, e) {\n+            this.map[\n+                (function (t) {\n+                  if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(t)) throw new TypeError(\"Invalid character in header field name\");\n+                  return c(t);\n+                })(N(this.map, t) || t)\n+                ] = [c(e)];\n+          }),\n+          (L.prototype.append = function (t, e) {\n+            var n = this.map[N(this.map, t)];\n+            n ? n.push(c(e)) : this.set(t, e);\n+          }),\n+          (L.prototype.delete = function (t) {\n+            delete this.map[N(this.map, t)];\n+          }),\n+          (L.prototype.deleteAll = function () {\n+            this.map = {};\n+          }),\n+          (L.prototype.forEach = function (n, r) {\n+            var o = this;\n+            g(this.map, function (t, e) {\n+              g(t, function (t) {\n+                return n.call(r, t, e, o);\n+              });\n+            });\n+          });\n+      function D(t, e) {\n+        var n,\n+            r = e.url,\n+            o = e.headers,\n+            i = e.status,\n+            e = e.statusText;\n+        (this.url = r),\n+            (this.ok = 200 \u003C= i && i \u003C 300),\n+            (this.status = i || 0),\n+            (this.statusText = e || \"\"),\n+            (this.headers = new L(o)),\n+            p((this.body = t))\n+                ? (this.bodyText = t)\n+                : ((o = t),\n+                \"undefined\" != typeof Blob &&\n+                o instanceof Blob &&\n+                ((this.bodyBlob = t),\n+                (0 !== (o = t).type.indexOf(\"text\") && -1 === o.type.indexOf(\"json\")) ||\n+                (this.bodyText =\n+                    ((n = t),\n+                        new u(function (t) {\n+                          var e = new FileReader();\n+                          e.readAsText(n),\n+                              (e.onload = function () {\n+                                t(e.result);\n+                              });\n+                        })))));\n+      }\n+      (D.prototype.blob = function () {\n+        return m(this.bodyBlob);\n+      }),\n+          (D.prototype.text = function () {\n+            return m(this.bodyText);\n+          }),\n+          (D.prototype.json = function () {\n+            return m(this.text(), function (t) {\n+              return JSON.parse(t);\n+            });\n+          }),\n+          Object.defineProperty(D.prototype, \"data\", {\n+            get: function () {\n+              return this.body;\n+            },\n+            set: function (t) {\n+              this.body = t;\n+            },\n+          });\n+      var F = function (t) {\n+        (this.body = null), (this.params = {}), _(this, t, { method: (t = t.method || \"GET\") ? t.toUpperCase() : \"\" }), this.headers instanceof L || (this.headers = new L(this.headers));\n+      };\n+      (F.prototype.getUrl = function () {\n+        return A(this);\n+      }),\n+          (F.prototype.getBody = function () {\n+            return this.body;\n+          }),\n+          (F.prototype.respondWith = function (t, e) {\n+            return new D(t, _(e || {}, { url: this.getUrl() }));\n+          });\n+      t = { \"Content-Type\": \"application\u002Fjson;charset=utf-8\" };\n+      function R(t) {\n+        var e = this || {},\n+            n = P(e.$vm);\n+        return (\n+            (function (n) {\n+              r.call(arguments, 1).forEach(function (t) {\n+                for (var e in t) void 0 === n[e] && (n[e] = t[e]);\n+              });\n+            })(t || {}, e.$options, R.options),\n+                R.interceptors.forEach(function (t) {\n+                  p(t) && (t = R.interceptor[t]), d(t) && n.use(t);\n+                }),\n+                n(new F(t)).then(\n+                    function (t) {\n+                      return t.ok ? t : u.reject(t);\n+                    },\n+                    function (t) {\n+                      var e;\n+                      return t instanceof Error && ((e = t), \"undefined\" != typeof console && console.error(e)), u.reject(t);\n+                    }\n+                )\n+        );\n+      }\n+      function z(n, r, t, o) {\n+        var i = this || {},\n+            a = {};\n+        return (\n+            g((t = _({}, z.actions, t)), function (t, e) {\n+              (t = b({ url: n, params: _({}, r) }, o, t)),\n+                  (a[e] = function () {\n+                    return (i.$http || R)(\n+                        (function (t, e) {\n+                          var n,\n+                              r = _({}, t),\n+                              t = {};\n+                          switch (e.length) {\n+                          case 2:\n+                            (t = e[0]), (n = e[1]);\n+                            break;\n+                          case 1:\n+                            \u002F^(POST|PUT|PATCH)$\u002Fi.test(r.method) ? (n = e[0]) : (t = e[0]);\n+                            break;\n+                          case 0:\n+                            break;\n+                          default:\n+                            throw \"Expected up to 2 arguments [params, body], got \" + e.length + \" arguments\";\n+                          }\n+                          return (r.body = n), (r.params = _({}, r.params, t)), r;\n+                        })(t, arguments)\n+                    );\n+                  });\n+            }),\n+                a\n+        );\n+      }\n+      function H(n) {\n+        H.installed ||\n+        (e(n),\n+            (n.url = A),\n+            (n.http = R),\n+            (n.resource = z),\n+            (n.Promise = u),\n+            Object.defineProperties(n.prototype, {\n+              $url: {\n+                get: function () {\n+                  return y(n.url, this, this.$options.url);\n+                },\n+              },\n+              $http: {\n+                get: function () {\n+                  return y(n.http, this, this.$options.http);\n+                },\n+              },\n+              $resource: {\n+                get: function () {\n+                  return n.resource.bind(this);\n+                },\n+              },\n+              $promise: {\n+                get: function () {\n+                  var e = this;\n+                  return function (t) {\n+                    return new n.Promise(t, e);\n+                  };\n+                },\n+              },\n+            }));\n+      }\n+      return (\n+          (R.options = {}),\n+              (R.headers = { put: t, post: t, patch: t, delete: t, common: { Accept: \"application\u002Fjson, text\u002Fplain, *\u002F*\" }, custom: {} }),\n+              (R.interceptor = {\n+                before: function (t, e) {\n+                  d(t.before) && t.before.call(this, t), e();\n+                },\n+                method: function (t, e) {\n+                  t.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(t.method) && (t.headers.set(\"X-HTTP-Method-Override\", t.method), (t.method = \"POST\")), e();\n+                },\n+                jsonp: function (t, e) {\n+                  \"JSONP\" == t.method && (t.client = j), e();\n+                },\n+                json: function (t, e) {\n+                  var o = t.headers.get(\"Content-Type\") || \"\";\n+                  h(t.body) && 0 === o.indexOf(\"application\u002Fjson\") && (t.body = JSON.stringify(t.body)),\n+                      e(function (r) {\n+                        return r.bodyText\n+                            ? m(r.text(), function (t) {\n+                              if (0 === (o = r.headers.get(\"Content-Type\") || \"\").indexOf(\"application\u002Fjson\") || ((n = (e = t).match(\u002F^\\[|^\\{(?!\\{)\u002F)) && { \"[\": \u002F]$\u002F, \"{\": \u002F}$\u002F }[n[0]].test(e)))\n+                                try {\n+                                  r.body = JSON.parse(t);\n+                                } catch (t) {\n+                                  r.body = null;\n+                                }\n+                              else r.body = t;\n+                              var e, n;\n+                              return r;\n+                            })\n+                            : r;\n+                      });\n+                },\n+                form: function (t, e) {\n+                  var n;\n+                  (n = t.body),\n+                      \"undefined\" != typeof FormData && n instanceof FormData\n+                          ? t.headers.delete(\"Content-Type\")\n+                          : h(t.body) && t.emulateJSON && ((t.body = A.params(t.body)), t.headers.set(\"Content-Type\", \"application\u002Fx-www-form-urlencoded\")),\n+                      e();\n+                },\n+                header: function (n, t) {\n+                  g(_({}, R.headers.common, n.crossOrigin ? {} : R.headers.custom, R.headers[s(n.method)]), function (t, e) {\n+                    n.headers.has(e) || n.headers.set(e, t);\n+                  }),\n+                      t();\n+                },\n+                cors: function (t, e) {\n+                  var n, r;\n+                  i && ((n = A.parse(location.href)), ((r = A.parse(t.getUrl())).protocol === n.protocol && r.host === n.host) || ((t.crossOrigin = !0), (t.emulateHTTP = !1), T || (t.client = S))), e();\n+                },\n+              }),\n+              (R.interceptors = [\"before\", \"method\", \"jsonp\", \"json\", \"form\", \"header\", \"cors\"]),\n+              [\"get\", \"delete\", \"head\", \"jsonp\"].forEach(function (n) {\n+                R[n] = function (t, e) {\n+                  return this(_(e || {}, { url: t, method: n }));\n+                };\n+              }),\n+              [\"post\", \"put\", \"patch\"].forEach(function (r) {\n+                R[r] = function (t, e, n) {\n+                  return this(_(n || {}, { url: t, method: r, body: e }));\n+                };\n+              }),\n+              (z.actions = { get: { method: \"GET\" }, save: { method: \"POST\" }, query: { method: \"GET\" }, update: { method: \"PUT\" }, remove: { method: \"DELETE\" }, delete: { method: \"DELETE\" } }),\n+          \"undefined\" != typeof window && window.Vue && window.Vue.use(H),\n+              H\n+      );\n+    })\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\u002F*!\r\n- * Vue.js v2.6.10\r\n- * (c) 2014-2019 Evan You\r\n- * Released under the MIT License.\r\n- *\u002F\r\n+\u002F*!\n+ * Vue.js v2.6.10\n+ * (c) 2014-2019 Evan You\n+ * Released under the MIT License.\n+ *\u002F\n !function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){\"use strict\";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function o(e){return null!==e&&\"object\"==typeof e}var a=Object.prototype.toString;function s(e){return\"[object Object]\"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function l(e){return null==e?\"\":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(\",\"),i=0;i\u003Cr.length;i++)n[r[i]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var d=p(\"slot,component\",!0),v=p(\"key,ref,slot,slot-scope,is\");function h(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=\u002F-(\\w)\u002Fg,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():\"\"})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=\u002F\\B([A-Z])\u002Fg,C=g(function(e){return e.replace(w,\"-$1\").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n\u003Ce.length;n++)e[n]&&A(t,e[n]);return t}function S(e,t,n){}var T=function(e,t,n){return!1},E=function(e){return e};function N(e,t){if(e===t)return!0;var n=o(e),r=o(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var i=Array.isArray(e),a=Array.isArray(t);if(i&&a)return e.length===t.length&&e.every(function(e,n){return N(e,t[n])});if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(i||a)return!1;var s=Object.keys(e),c=Object.keys(t);return s.length===c.length&&s.every(function(n){return N(e[n],t[n])})}catch(e){return!1}}function j(e,t){for(var n=0;n\u003Ce.length;n++)if(N(e[n],t))return n;return-1}function D(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var L=\"data-server-rendered\",M=[\"component\",\"directive\",\"filter\"],I=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],F={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:T,isReservedAttr:T,isUnknownElement:T,getTagNamespace:S,parsePlatformTagName:E,mustUseProp:T,async:!0,_lifecycleHooks:I},P=\u002Fa-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\u002F;function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H=new RegExp(\"[^\"+P.source+\".$_\\\\d]\");var B,U=\"__proto__\"in{},z=\"undefined\"!=typeof window,V=\"undefined\"!=typeof WXEnvironment&&!!WXEnvironment.platform,K=V&&WXEnvironment.platform.toLowerCase(),J=z&&window.navigator.userAgent.toLowerCase(),q=J&&\u002Fmsie|trident\u002F.test(J),W=J&&J.indexOf(\"msie 9.0\")>0,Z=J&&J.indexOf(\"edge\u002F\")>0,G=(J&&J.indexOf(\"android\"),J&&\u002Fiphone|ipad|ipod|ios\u002F.test(J)||\"ios\"===K),X=(J&&\u002Fchrome\\\u002F\\d+\u002F.test(J),J&&\u002Fphantomjs\u002F.test(J),J&&J.match(\u002Ffirefox\\\u002F(\\d+)\u002F)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,\"passive\",{get:function(){Q=!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&\"undefined\"!=typeof global&&(global.process&&\"server\"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"==typeof e&&\u002Fnative code\u002F.test(e.toString())}var ie,oe=\"undefined\"!=typeof Symbol&&re(Symbol)&&\"undefined\"!=typeof Reflect&&re(Reflect.ownKeys);ie=\"undefined\"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t\u003Cn;t++)e[t].update()},ce.target=null;var ue=[];function le(e){ue.push(e),ce.target=e}function fe(){ue.pop(),ce.target=ue[ue.length-1]}var pe=function(e,t,n,r,i,o,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},de={child:{configurable:!0}};de.child.get=function(){return this.componentInstance},Object.defineProperties(pe.prototype,de);var ve=function(e){void 0===e&&(e=\"\");var t=new pe;return t.text=e,t.isComment=!0,t};function he(e){return new pe(void 0,void 0,void 0,String(e))}function me(e){var t=new pe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var ye=Array.prototype,ge=Object.create(ye);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(e){var t=ye[e];R(ge,e,function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var i,o=t.apply(this,n),a=this.__ob__;switch(e){case\"push\":case\"unshift\":i=n;break;case\"splice\":i=n.slice(2)}return i&&a.observeArray(i),a.dep.notify(),o})});var _e=Object.getOwnPropertyNames(ge),be=!0;function $e(e){be=e}var we=function(e){var t;this.value=e,this.dep=new ce,this.vmCount=0,R(e,\"__ob__\",this),Array.isArray(e)?(U?(t=ge,e.__proto__=t):function(e,t,n){for(var r=0,i=n.length;r\u003Ci;r++){var o=n[r];R(e,o,t[o])}}(e,ge,_e),this.observeArray(e)):this.walk(e)};function Ce(e,t){var n;if(o(e)&&!(e instanceof pe))return y(e,\"__ob__\")&&e.__ob__ instanceof we?n=e.__ob__:be&&!te()&&(Array.isArray(e)||s(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new we(e)),t&&n&&n.vmCount++,n}function xe(e,t,n,r,i){var o=new ce,a=Object.getOwnPropertyDescriptor(e,t);if(!a||!1!==a.configurable){var s=a&&a.get,c=a&&a.set;s&&!c||2!==arguments.length||(n=e[t]);var u=!i&&Ce(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=s?s.call(e):n;return ce.target&&(o.depend(),u&&(u.dep.depend(),Array.isArray(t)&&function e(t){for(var n=void 0,r=0,i=t.length;r\u003Ci;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&e(n)}(t))),t},set:function(t){var r=s?s.call(e):n;t===r||t!=t&&r!=r||s&&!c||(c?c.call(e,t):n=t,u=!i&&Ce(t),o.notify())}})}}function ke(e,t,n){if(Array.isArray(e)&&c(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(xe(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function Ae(e,t){if(Array.isArray(e)&&c(t))e.splice(t,1);else{var n=e.__ob__;e._isVue||n&&n.vmCount||y(e,t)&&(delete e[t],n&&n.dep.notify())}}we.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n\u003Ct.length;n++)xe(e,t[n])},we.prototype.observeArray=function(e){for(var t=0,n=e.length;t\u003Cn;t++)Ce(e[t])};var Oe=F.optionMergeStrategies;function Se(e,t){if(!t)return e;for(var n,r,i,o=oe?Reflect.ownKeys(t):Object.keys(t),a=0;a\u003Co.length;a++)\"__ob__\"!==(n=o[a])&&(r=e[n],i=t[n],y(e,n)?r!==i&&s(r)&&s(i)&&Se(r,i):ke(e,n,i));return e}function Te(e,t,n){return n?function(){var r=\"function\"==typeof t?t.call(n,n):t,i=\"function\"==typeof e?e.call(n,n):e;return r?Se(r,i):i}:t?e?function(){return Se(\"function\"==typeof t?t.call(this,this):t,\"function\"==typeof e?e.call(this,this):e)}:t:e}function Ee(e,t){var n=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return n?function(e){for(var t=[],n=0;n\u003Ce.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}function Ne(e,t,n,r){var i=Object.create(e||null);return t?A(i,t):i}Oe.data=function(e,t,n){return n?Te(e,t,n):t&&\"function\"!=typeof t?e:Te(e,t)},I.forEach(function(e){Oe[e]=Ee}),M.forEach(function(e){Oe[e+\"s\"]=Ne}),Oe.watch=function(e,t,n,r){if(e===Y&&(e=void 0),t===Y&&(t=void 0),!t)return Object.create(e||null);if(!e)return t;var i={};for(var o in A(i,e),t){var a=i[o],s=t[o];a&&!Array.isArray(a)&&(a=[a]),i[o]=a?a.concat(s):Array.isArray(s)?s:[s]}return i},Oe.props=Oe.methods=Oe.inject=Oe.computed=function(e,t,n,r){if(!e)return t;var i=Object.create(null);return A(i,e),t&&A(i,t),i},Oe.provide=Te;var je=function(e,t){return void 0===t?e:t};function De(e,t,n){if(\"function\"==typeof t&&(t=t.options),function(e,t){var n=e.props;if(n){var r,i,o={};if(Array.isArray(n))for(r=n.length;r--;)\"string\"==typeof(i=n[r])&&(o[b(i)]={type:null});else if(s(n))for(var a in n)i=n[a],o[b(a)]=s(i)?i:{type:i};e.props=o}}(t),function(e,t){var n=e.inject;if(n){var r=e.inject={};if(Array.isArray(n))for(var i=0;i\u003Cn.length;i++)r[n[i]]={from:n[i]};else if(s(n))for(var o in n){var a=n[o];r[o]=s(a)?A({from:o},a):{from:a}}}}(t),function(e){var t=e.directives;if(t)for(var n in t){var r=t[n];\"function\"==typeof r&&(t[n]={bind:r,update:r})}}(t),!t._base&&(t.extends&&(e=De(e,t.extends,n)),t.mixins))for(var r=0,i=t.mixins.length;r\u003Ci;r++)e=De(e,t.mixins[r],n);var o,a={};for(o in e)c(o);for(o in t)y(e,o)||c(o);function c(r){var i=Oe[r]||je;a[r]=i(e[r],t[r],n,r)}return a}function Le(e,t,n,r){if(\"string\"==typeof n){var i=e[t];if(y(i,n))return i[n];var o=b(n);if(y(i,o))return i[o];var a=$(o);return y(i,a)?i[a]:i[n]||i[o]||i[a]}}function Me(e,t,n,r){var i=t[e],o=!y(n,e),a=n[e],s=Pe(Boolean,i.type);if(s>-1)if(o&&!y(i,\"default\"))a=!1;else if(\"\"===a||a===C(e)){var c=Pe(String,i.type);(c\u003C0||s\u003Cc)&&(a=!0)}if(void 0===a){a=function(e,t,n){if(!y(t,\"default\"))return;var r=t.default;if(e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n])return e._props[n];return\"function\"==typeof r&&\"Function\"!==Ie(t.type)?r.call(e):r}(r,i,e);var u=be;$e(!0),Ce(a),$e(u)}return a}function Ie(e){var t=e&&e.toString().match(\u002F^\\s*function (\\w+)\u002F);return t?t[1]:\"\"}function Fe(e,t){return Ie(e)===Ie(t)}function Pe(e,t){if(!Array.isArray(t))return Fe(t,e)?0:-1;for(var n=0,r=t.length;n\u003Cr;n++)if(Fe(t[n],e))return n;return-1}function Re(e,t,n){le();try{if(t)for(var r=t;r=r.$parent;){var i=r.$options.errorCaptured;if(i)for(var o=0;o\u003Ci.length;o++)try{if(!1===i[o].call(r,e,t,n))return}catch(e){Be(e,r,\"errorCaptured hook\")}}Be(e,t,n)}finally{fe()}}function He(e,t,n,r,i){var o;try{(o=n?e.apply(t,n):e.call(t))&&!o._isVue&&u(o)&&!o._handled&&(o.catch(function(e){return Re(e,r,i+\" (Promise\u002Fasync)\")}),o._handled=!0)}catch(e){Re(e,r,i)}return o}function Be(e,t,n){if(F.errorHandler)try{return F.errorHandler.call(null,e,t,n)}catch(t){t!==e&&Ue(t,null,\"config.errorHandler\")}Ue(e,t,n)}function Ue(e,t,n){if(!z&&!V||\"undefined\"==typeof console)throw e;console.error(e)}var ze,Ve=!1,Ke=[],Je=!1;function qe(){Je=!1;var e=Ke.slice(0);Ke.length=0;for(var t=0;t\u003Ce.length;t++)e[t]()}if(\"undefined\"!=typeof Promise&&re(Promise)){var We=Promise.resolve();ze=function(){We.then(qe),G&&setTimeout(S)},Ve=!0}else if(q||\"undefined\"==typeof MutationObserver||!re(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())ze=\"undefined\"!=typeof setImmediate&&re(setImmediate)?function(){setImmediate(qe)}:function(){setTimeout(qe,0)};else{var Ze=1,Ge=new MutationObserver(qe),Xe=document.createTextNode(String(Ze));Ge.observe(Xe,{characterData:!0}),ze=function(){Ze=(Ze+1)%2,Xe.data=String(Ze)},Ve=!0}function Ye(e,t){var n;if(Ke.push(function(){if(e)try{e.call(t)}catch(e){Re(e,t,\"nextTick\")}else n&&n(t)}),Je||(Je=!0,ze()),!e&&\"undefined\"!=typeof Promise)return new Promise(function(e){n=e})}var Qe=new ie;function et(e){!function e(t,n){var r,i;var a=Array.isArray(t);if(!a&&!o(t)||Object.isFrozen(t)||t instanceof pe)return;if(t.__ob__){var s=t.__ob__.dep.id;if(n.has(s))return;n.add(s)}if(a)for(r=t.length;r--;)e(t[r],n);else for(i=Object.keys(t),r=i.length;r--;)e(t[i[r]],n)}(e,Qe),Qe.clear()}var tt=g(function(e){var t=\"&\"===e.charAt(0),n=\"~\"===(e=t?e.slice(1):e).charAt(0),r=\"!\"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}});function nt(e,t){function n(){var e=arguments,r=n.fns;if(!Array.isArray(r))return He(r,null,arguments,t,\"v-on handler\");for(var i=r.slice(),o=0;o\u003Ci.length;o++)He(i[o],null,e,t,\"v-on handler\")}return n.fns=e,n}function rt(e,n,i,o,a,s){var c,u,l,f;for(c in e)u=e[c],l=n[c],f=tt(c),t(u)||(t(l)?(t(u.fns)&&(u=e[c]=nt(u,s)),r(f.once)&&(u=e[c]=a(f.name,u,f.capture)),i(f.name,u,f.capture,f.passive,f.params)):u!==l&&(l.fns=u,e[c]=l));for(c in n)t(e[c])&&o((f=tt(c)).name,n[c],f.capture)}function it(e,i,o){var a;e instanceof pe&&(e=e.data.hook||(e.data.hook={}));var s=e[i];function c(){o.apply(this,arguments),h(a.fns,c)}t(s)?a=nt([c]):n(s.fns)&&r(s.merged)?(a=s).fns.push(c):a=nt([s,c]),a.merged=!0,e[i]=a}function ot(e,t,r,i,o){if(n(t)){if(y(t,r))return e[r]=t[r],o||delete t[r],!0;if(y(t,i))return e[r]=t[i],o||delete t[i],!0}return!1}function at(e){return i(e)?[he(e)]:Array.isArray(e)?function e(o,a){var s=[];var c,u,l,f;for(c=0;c\u003Co.length;c++)t(u=o[c])||\"boolean\"==typeof u||(l=s.length-1,f=s[l],Array.isArray(u)?u.length>0&&(st((u=e(u,(a||\"\")+\"_\"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):\"\"!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key=\"__vlist\"+a+\"_\"+c+\"__\"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i\u003Cr.length;i++){var o=r[i];if(\"__ob__\"!==o){for(var a=e[o].from,s=t;s;){if(s._provided&&y(s._provided,a)){n[o]=s._provided[a];break}s=s.$parent}if(!s&&\"default\"in e[o]){var c=e[o].default;n[o]=\"function\"==typeof c?c.call(t):c}}}return n}}function ut(e,t){if(!e||!e.length)return{};for(var n={},r=0,i=e.length;r\u003Ci;r++){var o=e[r],a=o.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,o.context!==t&&o.fnContext!==t||!a||null==a.slot)(n.default||(n.default=[])).push(o);else{var s=a.slot,c=n[s]||(n[s]=[]);\"template\"===o.tag?c.push.apply(c,o.children||[]):c.push(o)}}for(var u in n)n[u].every(lt)&&delete n[u];return n}function lt(e){return e.isComment&&!e.asyncFactory||\" \"===e.text}function ft(t,n,r){var i,o=Object.keys(n).length>0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&\"$\"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,\"$stable\",a),R(i,\"$key\",s),R(i,\"$hasNormal\",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&\"object\"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||\"string\"==typeof e)for(r=new Array(e.length),i=0,a=e.length;i\u003Ca;i++)r[i]=t(e[i],i);else if(\"number\"==typeof e)for(r=new Array(e),i=0;i\u003Ce;i++)r[i]=t(i+1,i);else if(o(e))if(oe&&e[Symbol.iterator]){r=[];for(var u=e[Symbol.iterator](),l=u.next();!l.done;)r.push(t(l.value,r.length)),l=u.next()}else for(s=Object.keys(e),r=new Array(s.length),i=0,a=s.length;i\u003Ca;i++)c=s[i],r[i]=t(e[c],c,i);return n(r)||(r=[]),r._isVList=!0,r}function ht(e,t,n,r){var i,o=this.$scopedSlots[e];o?(n=n||{},r&&(n=A(A({},r),n)),i=o(n)||t):i=this.$slots[e]||t;var a=n&&n.slot;return a?this.$createElement(\"template\",{slot:a},i):i}function mt(e){return Le(this.$options,\"filters\",e)||E}function yt(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function gt(e,t,n,r,i){var o=F.keyCodes[t]||n;return i&&r&&!F.keyCodes[t]?yt(i,r):o?yt(o,e):r?C(r)!==t:void 0}function _t(e,t,n,r,i){if(n)if(o(n)){var a;Array.isArray(n)&&(n=O(n));var s=function(o){if(\"class\"===o||\"style\"===o||v(o))a=e;else{var s=e.attrs&&e.attrs.type;a=r||F.mustUseProp(t,s,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var c=b(o),u=C(o);c in a||u in a||(a[o]=n[o],i&&((e.on||(e.on={}))[\"update:\"+o]=function(e){n[o]=e}))};for(var c in n)s(c)}else;return e}function bt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t?r:(wt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r)}function $t(e,t,n){return wt(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function wt(e,t,n){if(Array.isArray(e))for(var r=0;r\u003Ce.length;r++)e[r]&&\"string\"!=typeof e[r]&&Ct(e[r],t+\"_\"+r,n);else Ct(e,t,n)}function Ct(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function xt(e,t){if(t)if(s(t)){var n=e.on=e.on?A({},e.on):{};for(var r in t){var i=n[r],o=t[r];n[r]=i?[].concat(i,o):o}}else;return e}function kt(e,t,n,r){t=t||{$stable:!n};for(var i=0;i\u003Ce.length;i++){var o=e[i];Array.isArray(o)?kt(o,t,n):o&&(o.proxy&&(o.fn.proxy=!0),t[o.key]=o.fn)}return r&&(t.$key=r),t}function At(e,t){for(var n=0;n\u003Ct.length;n+=2){var r=t[n];\"string\"==typeof r&&r&&(e[t[n]]=t[n+1])}return e}function Ot(e,t){return\"string\"==typeof e?t+e:e}function St(e){e._o=$t,e._n=f,e._s=l,e._l=vt,e._t=ht,e._q=N,e._i=j,e._m=bt,e._f=mt,e._k=gt,e._b=_t,e._v=he,e._e=ve,e._u=kt,e._g=xt,e._d=At,e._p=Ot}function Tt(t,n,i,o,a){var s,c=this,u=a.options;y(o,\"_uid\")?(s=Object.create(o))._original=o:(s=o,o=o._original);var l=r(u._compiled),f=!l;this.data=t,this.props=n,this.children=i,this.parent=o,this.listeners=t.on||e,this.injections=ct(u.inject,o),this.slots=function(){return c.$slots||ft(t.scopedSlots,c.$slots=ut(i,o)),c.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return ft(t.scopedSlots,this.slots())}}),l&&(this.$options=u,this.$slots=this.slots(),this.$scopedSlots=ft(t.scopedSlots,this.$slots)),u._scopeId?this._c=function(e,t,n,r){var i=Pt(s,e,t,n,r,f);return i&&!Array.isArray(i)&&(i.fnScopeId=u._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return Pt(s,e,t,n,r,f)}}function Et(e,t,n,r,i){var o=me(e);return o.fnContext=n,o.fnOptions=r,t.slot&&((o.data||(o.data={})).slot=t.slot),o}function Nt(e,t){for(var n in t)e[b(n)]=t[n]}St(Tt.prototype);var jt={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var r=e;jt.prepatch(r,r)}else{(e.componentInstance=function(e,t){var r={_isComponent:!0,_parentVnode:e,parent:t},i=e.data.inlineTemplate;n(i)&&(r.render=i.render,r.staticRenderFns=i.staticRenderFns);return new e.componentOptions.Ctor(r)}(e,Wt)).$mount(t?e.elm:void 0,t)}},prepatch:function(t,n){var r=n.componentOptions;!function(t,n,r,i,o){var a=i.data.scopedSlots,s=t.$scopedSlots,c=!!(a&&!a.$stable||s!==e&&!s.$stable||a&&t.$scopedSlots.$key!==a.$key),u=!!(o||t.$options._renderChildren||c);t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i);if(t.$options._renderChildren=o,t.$attrs=i.data.attrs||e,t.$listeners=r||e,n&&t.$options.props){$e(!1);for(var l=t._props,f=t.$options._propKeys||[],p=0;p\u003Cf.length;p++){var d=f[p],v=t.$options.props;l[d]=Me(d,v,n,t)}$e(!0),t.$options.propsData=n}r=r||e;var h=t.$options._parentListeners;t.$options._parentListeners=r,qt(t,r,h),u&&(t.$slots=ut(o,i.context),t.$forceUpdate())}(n.componentInstance=t.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(e){var t,n=e.context,r=e.componentInstance;r._isMounted||(r._isMounted=!0,Yt(r,\"mounted\")),e.data.keepAlive&&(n._isMounted?((t=r)._inactive=!1,en.push(t)):Xt(r,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(n&&(t._directInactive=!0,Gt(t)))return;if(!t._inactive){t._inactive=!0;for(var r=0;r\u003Ct.$children.length;r++)e(t.$children[r]);Yt(t,\"deactivated\")}}(t,!0):t.$destroy())}},Dt=Object.keys(jt);function Lt(i,a,s,c,l){if(!t(i)){var f=s.$options._base;if(o(i)&&(i=f.extend(i)),\"function\"==typeof i){var p;if(t(i.cid)&&void 0===(i=function(e,i){if(r(e.error)&&n(e.errorComp))return e.errorComp;if(n(e.resolved))return e.resolved;var a=Ht;a&&n(e.owners)&&-1===e.owners.indexOf(a)&&e.owners.push(a);if(r(e.loading)&&n(e.loadingComp))return e.loadingComp;if(a&&!n(e.owners)){var s=e.owners=[a],c=!0,l=null,f=null;a.$on(\"hook:destroyed\",function(){return h(s,a)});var p=function(e){for(var t=0,n=s.length;t\u003Cn;t++)s[t].$forceUpdate();e&&(s.length=0,null!==l&&(clearTimeout(l),l=null),null!==f&&(clearTimeout(f),f=null))},d=D(function(t){e.resolved=Bt(t,i),c?s.length=0:p(!0)}),v=D(function(t){n(e.errorComp)&&(e.error=!0,p(!0))}),m=e(d,v);return o(m)&&(u(m)?t(e.resolved)&&m.then(d,v):u(m.component)&&(m.component.then(d,v),n(m.error)&&(e.errorComp=Bt(m.error,i)),n(m.loading)&&(e.loadingComp=Bt(m.loading,i),0===m.delay?e.loading=!0:l=setTimeout(function(){l=null,t(e.resolved)&&t(e.error)&&(e.loading=!0,p(!1))},m.delay||200)),n(m.timeout)&&(f=setTimeout(function(){f=null,t(e.resolved)&&v(null)},m.timeout)))),c=!1,e.loading?e.loadingComp:e.resolved}}(p=i,f)))return function(e,t,n,r,i){var o=ve();return o.asyncFactory=e,o.asyncMeta={data:t,context:n,children:r,tag:i},o}(p,a,s,c,l);a=a||{},$n(i),n(a.model)&&function(e,t){var r=e.model&&e.model.prop||\"value\",i=e.model&&e.model.event||\"input\";(t.attrs||(t.attrs={}))[r]=t.model.value;var o=t.on||(t.on={}),a=o[i],s=t.model.callback;n(a)?(Array.isArray(a)?-1===a.indexOf(s):a!==s)&&(o[i]=[s].concat(a)):o[i]=s}(i.options,a);var d=function(e,r,i){var o=r.options.props;if(!t(o)){var a={},s=e.attrs,c=e.props;if(n(s)||n(c))for(var u in o){var l=C(u);ot(a,c,u,l,!0)||ot(a,s,u,l,!1)}return a}}(a,i);if(r(i.options.functional))return function(t,r,i,o,a){var s=t.options,c={},u=s.props;if(n(u))for(var l in u)c[l]=Me(l,u,r||e);else n(i.attrs)&&Nt(c,i.attrs),n(i.props)&&Nt(c,i.props);var f=new Tt(i,c,a,o,t),p=s.render.call(null,f._c,f);if(p instanceof pe)return Et(p,i,f.parent,s);if(Array.isArray(p)){for(var d=at(p)||[],v=new Array(d.length),h=0;h\u003Cd.length;h++)v[h]=Et(d[h],i,f.parent,s);return v}}(i,d,a,s,c);var v=a.on;if(a.on=a.nativeOn,r(i.options.abstract)){var m=a.slot;a={},m&&(a.slot=m)}!function(e){for(var t=e.hook||(e.hook={}),n=0;n\u003CDt.length;n++){var r=Dt[n],i=t[r],o=jt[r];i===o||i&&i._merged||(t[r]=i?Mt(o,i):o)}}(a);var y=i.options.name||l;return new pe(\"vue-component-\"+i.cid+(y?\"-\"+y:\"\"),a,void 0,void 0,void 0,s,{Ctor:i,propsData:d,listeners:v,tag:l,children:c},p)}}}function Mt(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}var It=1,Ft=2;function Pt(e,a,s,c,u,l){return(Array.isArray(s)||i(s))&&(u=c,c=s,s=void 0),r(l)&&(u=Ft),function(e,i,a,s,c){if(n(a)&&n(a.__ob__))return ve();n(a)&&n(a.is)&&(i=a.is);if(!i)return ve();Array.isArray(s)&&\"function\"==typeof s[0]&&((a=a||{}).scopedSlots={default:s[0]},s.length=0);c===Ft?s=at(s):c===It&&(s=function(e){for(var t=0;t\u003Ce.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(s));var u,l;if(\"string\"==typeof i){var f;l=e.$vnode&&e.$vnode.ns||F.getTagNamespace(i),u=F.isReservedTag(i)?new pe(F.parsePlatformTagName(i),a,s,void 0,void 0,e):a&&a.pre||!n(f=Le(e.$options,\"components\",i))?new pe(i,a,s,void 0,void 0,e):Lt(f,a,e,s,i)}else u=Lt(i,a,e,s);return Array.isArray(u)?u:n(u)?(n(l)&&function e(i,o,a){i.ns=o;\"foreignObject\"===i.tag&&(o=void 0,a=!0);if(n(i.children))for(var s=0,c=i.children.length;s\u003Cc;s++){var u=i.children[s];n(u.tag)&&(t(u.ns)||r(a)&&\"svg\"!==u.tag)&&e(u,o,a)}}(u,l),n(a)&&function(e){o(e.style)&&et(e.style);o(e.class)&&et(e.class)}(a),u):ve()}(e,a,s,c,u)}var Rt,Ht=null;function Bt(e,t){return(e.__esModule||oe&&\"Module\"===e[Symbol.toStringTag])&&(e=e.default),o(e)?t.extend(e):e}function Ut(e){return e.isComment&&e.asyncFactory}function zt(e){if(Array.isArray(e))for(var t=0;t\u003Ce.length;t++){var r=e[t];if(n(r)&&(n(r.componentOptions)||Ut(r)))return r}}function Vt(e,t){Rt.$on(e,t)}function Kt(e,t){Rt.$off(e,t)}function Jt(e,t){var n=Rt;return function r(){null!==t.apply(null,arguments)&&n.$off(e,r)}}function qt(e,t,n){Rt=e,rt(t,n||{},Vt,Kt,Jt,e),Rt=void 0}var Wt=null;function Zt(e){var t=Wt;return Wt=e,function(){Wt=t}}function Gt(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function Xt(e,t){if(t){if(e._directInactive=!1,Gt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n\u003Ce.$children.length;n++)Xt(e.$children[n]);Yt(e,\"activated\")}}function Yt(e,t){le();var n=e.$options[t],r=t+\" hook\";if(n)for(var i=0,o=n.length;i\u003Co;i++)He(n[i],e,null,e,r);e._hasHookEvent&&e.$emit(\"hook:\"+t),fe()}var Qt=[],en=[],tn={},nn=!1,rn=!1,on=0;var an=0,sn=Date.now;if(z&&!q){var cn=window.performance;cn&&\"function\"==typeof cn.now&&sn()>document.createEvent(\"Event\").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;on\u003CQt.length;on++)(e=Qt[on]).before&&e.before(),t=e.id,tn[t]=null,e.run();var n=en.slice(),r=Qt.slice();on=Qt.length=en.length=0,tn={},nn=rn=!1,function(e){for(var t=0;t\u003Ce.length;t++)e[t]._inactive=!0,Xt(e[t],!0)}(n),function(e){var t=e.length;for(;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&Yt(r,\"updated\")}}(r),ne&&F.devtools&&ne.emit(\"flush\")}var ln=0,fn=function(e,t,n,r,i){this.vm=e,i&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++ln,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ie,this.newDepIds=new ie,this.expression=\"\",\"function\"==typeof t?this.getter=t:(this.getter=function(e){if(!H.test(e)){var t=e.split(\".\");return function(e){for(var n=0;n\u003Ct.length;n++){if(!e)return;e=e[t[n]]}return e}}}(t),this.getter||(this.getter=S)),this.value=this.lazy?void 0:this.get()};fn.prototype.get=function(){var e;le(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;Re(e,t,'getter for watcher \"'+this.expression+'\"')}finally{this.deep&&et(e),fe(),this.cleanupDeps()}return e},fn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},fn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},fn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==tn[t]){if(tn[t]=!0,rn){for(var n=Qt.length-1;n>on&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,\"_props\",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=\"function\"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data=\"function\"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,\"data()\"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+\"\").charCodeAt(0))&&95!==a&&dn(e,\"_data\",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a=\"function\"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i\u003Cr.length;i++)_n(e,n,r[i]);else _n(e,n,r)}}(e,t.watch)}var hn={lazy:!0};function mn(e,t,n){var r=!te();\"function\"==typeof n?(pn.get=r?yn(t):gn(n),pn.set=S):(pn.get=n.get?r&&!1!==n.cache?yn(t):gn(n.get):S,pn.set=n.set||S),Object.defineProperty(e,t,pn)}function yn(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),ce.target&&t.depend(),t.value}}function gn(e){return function(){return e.call(this,this)}}function _n(e,t,n,r){return s(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=e[n]),e.$watch(t,n,r)}var bn=0;function $n(e){var t=e.options;if(e.super){var n=$n(e.super);if(n!==e.superOptions){e.superOptions=n;var r=function(e){var t,n=e.options,r=e.sealedOptions;for(var i in n)n[i]!==r[i]&&(t||(t={}),t[i]=n[i]);return t}(e);r&&A(e.extendOptions,r),(t=e.options=De(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function wn(e){this._init(e)}function Cn(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,i=e._Ctor||(e._Ctor={});if(i[r])return i[r];var o=e.name||n.options.name,a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=De(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)dn(e.prototype,\"_props\",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)mn(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,M.forEach(function(e){a[e]=n[e]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=A({},a.options),i[r]=a,a}}function xn(e){return e&&(e.Ctor.options.name||e.tag)}function kn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:\"string\"==typeof e?e.split(\",\").indexOf(t)>-1:(n=e,\"[object RegExp]\"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,\"$attrs\",o&&o.attrs||e,null,!0),xe(t,\"$listeners\",n._parentListeners||e,null,!0)}(n),Yt(n,\"beforeCreate\"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided=\"function\"==typeof t?t.call(e):t)}(n),Yt(n,\"created\"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,\"$data\",t),Object.defineProperty(e.prototype,\"$props\",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher \"'+r.expression+'\"')}return function(){r.teardown()}}}(wn),function(e){var t=\u002F^hook:\u002F;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i\u003Co;i++)r.$on(e[i],n);else(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0);return r},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,i=e.length;r\u003Ci;r++)n.$off(e[r],t);return n}var o,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var s=a.length;s--;)if((o=a[s])===t||o.fn===t){a.splice(s,1);break}return n},e.prototype.$emit=function(e){var t=this._events[e];if(t){t=t.length>1?k(t):t;for(var n=k(arguments,1),r='event handler for \"'+e+'\"',i=0,o=t.length;i\u003Co;i++)He(t[i],this,n,this,r)}return this}}(wn),function(e){e.prototype._update=function(e,t){var n=this,r=n.$el,i=n._vnode,o=Zt(n);n._vnode=e,n.$el=i?n.__patch__(i,e):n.__patch__(n.$el,e,t,!1),o(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Yt(e,\"beforeDestroy\"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),Yt(e,\"destroyed\"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(wn),function(e){St(e.prototype),e.prototype.$nextTick=function(e){return Ye(e,this)},e.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,i=n._parentVnode;i&&(t.$scopedSlots=ft(i.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=i;try{Ht=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){Re(n,t,\"render\"),e=t._vnode}finally{Ht=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof pe||(e=ve()),e.parent=i,e}}(wn);var Sn=[String,RegExp,Array],Tn={KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:Sn,exclude:Sn,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)On(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch(\"include\",function(t){An(e,function(e){return kn(t,e)})}),this.$watch(\"exclude\",function(t){An(e,function(e){return!kn(t,e)})})},render:function(){var e=this.$slots.default,t=zt(e),n=t&&t.componentOptions;if(n){var r=xn(n),i=this.include,o=this.exclude;if(i&&(!r||!kn(i,r))||o&&r&&kn(o,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;a[c]?(t.componentInstance=a[c].componentInstance,h(s,c),s.push(c)):(a[c]=t,s.push(c),this.max&&s.length>parseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,\"config\",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+\"s\"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),\"function\"==typeof e.install?e.install.apply(e,n):\"function\"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?(\"component\"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),\"directive\"===t&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[t+\"s\"][e]=n,n):this.options[t+\"s\"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,\"$isServer\",{get:te}),Object.defineProperty(wn.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,\"FunctionalRenderContext\",{value:Tt}),wn.version=\"2.6.10\";var En=p(\"style,class\"),Nn=p(\"input,textarea,option,select,progress\"),jn=function(e,t,n){return\"value\"===n&&Nn(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},Dn=p(\"contenteditable,draggable,spellcheck\"),Ln=p(\"events,caret,typing,plaintext-only\"),Mn=function(e,t){return Hn(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&Ln(t)?t:\"true\"},In=p(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),Fn=\"http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink\",Pn=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):\"\"},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return\"\"}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Vn(e){return Array.isArray(e)?function(e){for(var t,r=\"\",i=0,o=e.length;i\u003Co;i++)n(t=Vn(e[i]))&&\"\"!==t&&(r&&(r+=\" \"),r+=t);return r}(e):o(e)?function(e){var t=\"\";for(var n in e)e[n]&&(t&&(t+=\" \"),t+=n);return t}(e):\"string\"==typeof e?e:\"\"}var Kn={svg:\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\",math:\"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML\"},Jn=p(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),qn=p(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Wn=function(e){return Jn(e)||qn(e)};function Zn(e){return qn(e)?\"svg\":\"math\"===e?\"math\":void 0}var Gn=Object.create(null);var Xn=p(\"text,number,password,search,email,tel,url\");function Yn(e){if(\"string\"==typeof e){var t=document.querySelector(e);return t||document.createElement(\"div\")}return e}var Qn=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return\"select\"!==e?n:(t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n)},createElementNS:function(e,t){return document.createElementNS(Kn[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),er={create:function(e,t){tr(t)},update:function(e,t){e.data.ref!==t.data.ref&&(tr(e,!0),tr(t))},destroy:function(e){tr(e,!0)}};function tr(e,t){var r=e.data.ref;if(n(r)){var i=e.context,o=e.componentInstance||e.elm,a=i.$refs;t?Array.isArray(a[r])?h(a[r],o):a[r]===o&&(a[r]=void 0):e.data.refInFor?Array.isArray(a[r])?a[r].indexOf(o)\u003C0&&a[r].push(o):a[r]=[o]:a[r]=o}}var nr=new pe(\"\",{},[]),rr=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function ir(e,i){return e.key===i.key&&(e.tag===i.tag&&e.isComment===i.isComment&&n(e.data)===n(i.data)&&function(e,t){if(\"input\"!==e.tag)return!0;var r,i=n(r=e.data)&&n(r=r.attrs)&&r.type,o=n(r=t.data)&&n(r=r.attrs)&&r.type;return i===o||Xn(i)&&Xn(o)}(e,i)||r(e.isAsyncPlaceholder)&&e.asyncFactory===i.asyncFactory&&t(i.asyncFactory.error))}function or(e,t,r){var i,o,a={};for(i=t;i\u003C=r;++i)n(o=e[i].key)&&(a[o]=i);return a}var ar={create:sr,update:sr,destroy:function(e){sr(e,nr)}};function sr(e,t){(e.data.directives||t.data.directives)&&function(e,t){var n,r,i,o=e===nr,a=t===nr,s=ur(e.data.directives,e.context),c=ur(t.data.directives,t.context),u=[],l=[];for(n in c)r=s[n],i=c[n],r?(i.oldValue=r.value,i.oldArg=r.arg,fr(i,\"update\",t,e),i.def&&i.def.componentUpdated&&l.push(i)):(fr(i,\"bind\",t,e),i.def&&i.def.inserted&&u.push(i));if(u.length){var f=function(){for(var n=0;n\u003Cu.length;n++)fr(u[n],\"inserted\",t,e)};o?it(t,\"insert\",f):f()}l.length&&it(t,\"postpatch\",function(){for(var n=0;n\u003Cl.length;n++)fr(l[n],\"componentUpdated\",t,e)});if(!o)for(n in s)c[n]||fr(s[n],\"unbind\",e,e,a)}(e,t)}var cr=Object.create(null);function ur(e,t){var n,r,i=Object.create(null);if(!e)return i;for(n=0;n\u003Ce.length;n++)(r=e[n]).modifiers||(r.modifiers=cr),i[lr(r)]=r,r.def=Le(t.$options,\"directives\",r.name);return i}function lr(e){return e.rawName||e.name+\".\"+Object.keys(e.modifiers||{}).join(\".\")}function fr(e,t,n,r,i){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,r,i)}catch(r){Re(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}var pr=[er,ar];function dr(e,r){var i=r.componentOptions;if(!(n(i)&&!1===i.Ctor.options.inheritAttrs||t(e.data.attrs)&&t(r.data.attrs))){var o,a,s=r.elm,c=e.data.attrs||{},u=r.data.attrs||{};for(o in n(u.__ob__)&&(u=r.data.attrs=A({},u)),u)a=u[o],c[o]!==a&&vr(s,o,a);for(o in(q||Z)&&u.value!==c.value&&vr(s,\"value\",u.value),c)t(u[o])&&(Pn(o)?s.removeAttributeNS(Fn,Rn(o)):Dn(o)||s.removeAttribute(o))}}function vr(e,t,n){e.tagName.indexOf(\"-\")>-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&\"TEXTAREA\"===e.tagName&&\"placeholder\"===t&&\"\"!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener(\"input\",r)};e.addEventListener(\"input\",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute(\"class\",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=\u002F[\\w).+\\-_$\\]]\u002F;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r\u003Ce.length;r++)if(n=t,t=e.charCodeAt(r),a)39===t&&92!==n&&(a=!1);else if(s)34===t&&92!==n&&(s=!1);else if(c)96===t&&92!==n&&(c=!1);else if(u)47===t&&92!==n&&(u=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||l||f||p){switch(t){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:p++;break;case 41:p--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47===t){for(var v=r-1,h=void 0;v>=0&&\" \"===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r\u003Co.length;r++)i=Or(i,o[r]);return i}function Or(e,t){var n=t.indexOf(\"(\");if(n\u003C0)return'_f(\"'+t+'\")('+e+\")\";var r=t.slice(0,n),i=t.slice(n+1);return'_f(\"'+r+'\")('+e+(\")\"!==i?\",\"+i:i)}function Sr(e,t){console.error(\"[Vue compiler]: \"+e)}function Tr(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function Er(e,t,n,r,i){(e.props||(e.props=[])).push(Rr({name:t,value:n,dynamic:i},r)),e.plain=!1}function Nr(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(Rr({name:t,value:n,dynamic:i},r)),e.plain=!1}function jr(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(Rr({name:t,value:n},r))}function Dr(e,t,n,r,i,o,a,s){(e.directives||(e.directives=[])).push(Rr({name:t,rawName:n,value:r,arg:i,isDynamicArg:o,modifiers:a},s)),e.plain=!1}function Lr(e,t,n){return n?\"_p(\"+t+',\"'+e+'\")':e+t}function Mr(t,n,r,i,o,a,s,c){var u;(i=i||e).right?c?n=\"(\"+n+\")==='click'?'contextmenu':(\"+n+\")\":\"click\"===n&&(n=\"contextmenu\",delete i.right):i.middle&&(c?n=\"(\"+n+\")==='click'?'mouseup':(\"+n+\")\":\"click\"===n&&(n=\"mouseup\")),i.capture&&(delete i.capture,n=Lr(\"!\",n,c)),i.once&&(delete i.once,n=Lr(\"~\",n,c)),i.passive&&(delete i.passive,n=Lr(\"&\",n,c)),i.native?(delete i.native,u=t.nativeEvents||(t.nativeEvents={})):u=t.events||(t.events={});var l=Rr({value:r.trim(),dynamic:c},s);i!==e&&(l.modifiers=i);var f=u[n];Array.isArray(f)?o?f.unshift(l):f.push(l):u[n]=f?o?[l,f]:[f,l]:l,t.plain=!1}function Ir(e,t,n){var r=Fr(e,\":\"+t)||Fr(e,\"v-bind:\"+t);if(null!=r)return Ar(r);if(!1!==n){var i=Fr(e,t);if(null!=i)return JSON.stringify(i)}}function Fr(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var i=e.attrsList,o=0,a=i.length;o\u003Ca;o++)if(i[o].name===t){i.splice(o,1);break}return n&&delete e.attrsMap[t],r}function Pr(e,t){for(var n=e.attrsList,r=0,i=n.length;r\u003Ci;r++){var o=n[r];if(t.test(o.name))return n.splice(r,1),o}}function Rr(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function Hr(e,t,n){var r=n||{},i=r.number,o=\"$$v\";r.trim&&(o=\"(typeof $$v === 'string'? $$v.trim(): $$v)\"),i&&(o=\"_n(\"+o+\")\");var a=Br(t,o);e.model={value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+a+\"}\"}}function Br(e,t){var n=function(e){if(e=e.trim(),gr=e.length,e.indexOf(\"[\")\u003C0||e.lastIndexOf(\"]\")\u003Cgr-1)return($r=e.lastIndexOf(\".\"))>-1?{exp:e.slice(0,$r),key:'\"'+e.slice($r+1)+'\"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+\"=\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr=\"__r\",Zr=\"__c\";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])\u003C=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp\u003C=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?\"change\":\"input\";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]=\"\");for(i in c){if(o=c[i],\"textContent\"===i||\"innerHTML\"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if(\"value\"===i&&\"PROGRESS\"!==a.tagName){a._value=o;var u=t(o)?\"\":String(o);ii(a,u)&&(a.value=u)}else if(\"innerHTML\"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement(\"div\")).innerHTML=\"\u003Csvg>\"+o+\"\u003C\u002Fsvg>\";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&(\"OPTION\"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=\u002F:(.+)\u002F;return e.split(\u002F;(?![^(]*\\))\u002Fg).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):\"string\"==typeof e?ai(e):e}var ui,li=\u002F^--\u002F,fi=\u002F\\s*!important$\u002F,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,\"\"),\"important\");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i\u003Co;i++)e.style[r]=n[i];else e.style[r]=n}},di=[\"Webkit\",\"Moz\",\"ms\"],vi=g(function(e){if(ui=ui||document.createElement(\"div\").style,\"filter\"!==(e=b(e))&&e in ui)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n\u003Cdi.length;n++){var r=di[n]+t;if(r in ui)return r}});function hi(e,r){var i=r.data,o=e.data;if(!(t(i.staticStyle)&&t(i.style)&&t(o.staticStyle)&&t(o.style))){var a,s,c=r.elm,u=o.staticStyle,l=o.normalizedStyle||o.style||{},f=u||l,p=ci(r.data.style)||{};r.data.normalizedStyle=n(p.__ob__)?A({},p):p;var d=function(e,t){var n,r={};if(t)for(var i=e;i.componentInstance;)(i=i.componentInstance._vnode)&&i.data&&(n=si(i.data))&&A(r,n);(n=si(e.data))&&A(r,n);for(var o=e;o=o.parent;)o.data&&(n=si(o.data))&&A(r,n);return r}(r,!0);for(s in f)t(d[s])&&pi(c,s,\"\");for(s in d)(a=d[s])!==f[s]&&pi(c,s,null==a?\"\":a)}}var mi={create:hi,update:hi},yi=\u002F\\s+\u002F;function gi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+t+\" \")\u003C0&&e.setAttribute(\"class\",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(\" \")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute(\"class\");else{for(var n=\" \"+(e.getAttribute(\"class\")||\"\")+\" \",r=\" \"+t+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");(n=n.trim())?e.setAttribute(\"class\",n):e.removeAttribute(\"class\")}}function bi(e){if(e){if(\"object\"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||\"v\")),A(t,e),t}return\"string\"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),wi=z&&!W,Ci=\"transition\",xi=\"animation\",ki=\"transition\",Ai=\"transitionend\",Oi=\"animation\",Si=\"animationend\";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki=\"WebkitTransition\",Ai=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi=\"WebkitAnimation\",Si=\"webkitAnimationEnd\"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)\u003C0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c\u003Ca&&u()},o+1),e.addEventListener(s,l)}var Li=\u002F\\b(transform|all)(,|$)\u002F;function Mi(e,t){var n,r=window.getComputedStyle(e),i=(r[ki+\"Delay\"]||\"\").split(\", \"),o=(r[ki+\"Duration\"]||\"\").split(\", \"),a=Ii(i,o),s=(r[Oi+\"Delay\"]||\"\").split(\", \"),c=(r[Oi+\"Duration\"]||\"\").split(\", \"),u=Ii(s,c),l=0,f=0;return t===Ci?a>0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+\"Property\"])}}function Ii(e,t){for(;e.length\u003Ct.length;)e=e.concat(e);return Math.max.apply(null,t.map(function(t,n){return Fi(t)+Fi(e[n])}))}function Fi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function Pi(e,r){var i=e.elm;n(i._leaveCb)&&(i._leaveCb.cancelled=!0,i._leaveCb());var a=bi(e.data.transition);if(!t(a)&&!n(i._enterCb)&&1===i.nodeType){for(var s=a.css,c=a.type,u=a.enterClass,l=a.enterToClass,p=a.enterActiveClass,d=a.appearClass,v=a.appearToClass,h=a.appearActiveClass,m=a.beforeEnter,y=a.enter,g=a.afterEnter,_=a.enterCancelled,b=a.beforeAppear,$=a.appear,w=a.afterAppear,C=a.appearCancelled,x=a.duration,k=Wt,A=Wt.$vnode;A&&A.parent;)k=A.context,A=A.parent;var O=!k._isMounted||!e.isRootInsert;if(!O||$||\"\"===$){var S=O&&d?d:u,T=O&&h?h:p,E=O&&v?v:l,N=O&&b||m,j=O&&\"function\"==typeof $?$:y,L=O&&w||g,M=O&&C||_,I=f(o(x)?x.enter:x),F=!1!==s&&!W,P=Bi(j),R=i._enterCb=D(function(){F&&(ji(i,E),ji(i,T)),R.cancelled?(F&&ji(i,S),M&&M(i)):L&&L(i),i._enterCb=null});e.data.show||it(e,\"insert\",function(){var t=i.parentNode,n=t&&t._pending&&t._pending[e.key];n&&n.tag===e.tag&&n.elm._leaveCb&&n.elm._leaveCb(),j&&j(i,R)}),N&&N(i),F&&(Ni(i,S),Ni(i,T),Ei(function(){ji(i,S),R.cancelled||(Ni(i,E),P||(Hi(I)?setTimeout(R,I):Di(i,c,R)))})),e.data.show&&(r&&r(),j&&j(i,R)),F||P||R()}}}function Ri(e,r){var i=e.elm;n(i._enterCb)&&(i._enterCb.cancelled=!0,i._enterCb());var a=bi(e.data.transition);if(t(a)||1!==i.nodeType)return r();if(!n(i._leaveCb)){var s=a.css,c=a.type,u=a.leaveClass,l=a.leaveToClass,p=a.leaveActiveClass,d=a.beforeLeave,v=a.leave,h=a.afterLeave,m=a.leaveCancelled,y=a.delayLeave,g=a.duration,_=!1!==s&&!W,b=Bi(v),$=f(o(g)?g.leave:g),w=i._leaveCb=D(function(){i.parentNode&&i.parentNode._pending&&(i.parentNode._pending[e.key]=null),_&&(ji(i,l),ji(i,p)),w.cancelled?(_&&ji(i,u),m&&m(i)):(r(),h&&h(i)),i._leaveCb=null});y?y(C):C()}function C(){w.cancelled||(!e.data.show&&i.parentNode&&((i.parentNode._pending||(i.parentNode._pending={}))[e.key]=e),d&&d(i),_&&(Ni(i,u),Ni(i,p),Ei(function(){ji(i,u),w.cancelled||(Ni(i,l),b||(Hi($)?setTimeout(w,$):Di(i,c,w)))})),v&&v(i,w),_||b||w())}}function Hi(e){return\"number\"==typeof e&&!isNaN(e)}function Bi(e){if(t(e))return!1;var r=e.fns;return n(r)?Bi(Array.isArray(r)?r[0]:r):(e._length||e.length)>1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;o\u003Crr.length;++o)for(s[rr[o]]=[],a=0;a\u003Cc.length;++a)n(c[a][rr[o]])&&s[rr[o]].push(c[a][rr[o]]);function l(e){var t=u.parentNode(e);n(t)&&u.removeChild(t,e)}function f(e,t,i,o,a,c,l){if(n(e.elm)&&n(c)&&(e=c[l]=me(e)),e.isRootInsert=!a,!function(e,t,i,o){var a=e.data;if(n(a)){var c=n(e.componentInstance)&&a.keepAlive;if(n(a=a.hook)&&n(a=a.init)&&a(e,!1),n(e.componentInstance))return d(e,t),v(i,e.elm,o),r(c)&&function(e,t,r,i){for(var o,a=e;a.componentInstance;)if(a=a.componentInstance._vnode,n(o=a.data)&&n(o=o.transition)){for(o=0;o\u003Cs.activate.length;++o)s.activate[o](nr,a);t.push(a);break}v(r,e.elm,i)}(e,t,i,o),!0}}(e,t,i,o)){var f=e.data,p=e.children,m=e.tag;n(m)?(e.elm=e.ns?u.createElementNS(e.ns,m):u.createElement(m,e),g(e),h(e,p,t),n(f)&&y(e,t),v(i,e.elm,o)):r(e.isComment)?(e.elm=u.createComment(e.text),v(i,e.elm,o)):(e.elm=u.createTextNode(e.text),v(i,e.elm,o))}}function d(e,t){n(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,m(e)?(y(e,t),g(e)):(tr(e),t.push(e))}function v(e,t,r){n(e)&&(n(r)?u.parentNode(r)===e&&u.insertBefore(e,t,r):u.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r=0;r\u003Ct.length;++r)f(t[r],n,e.elm,null,!0,t,r);else i(e.text)&&u.appendChild(e.elm,u.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return n(e.tag)}function y(e,t){for(var r=0;r\u003Cs.create.length;++r)s.create[r](nr,e);n(o=e.data.hook)&&(n(o.create)&&o.create(nr,e),n(o.insert)&&t.push(e))}function g(e){var t;if(n(t=e.fnScopeId))u.setStyleScope(e.elm,t);else for(var r=e;r;)n(t=r.context)&&n(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t),r=r.parent;n(t=Wt)&&t!==e.context&&t!==e.fnContext&&n(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t)}function _(e,t,n,r,i,o){for(;r\u003C=i;++r)f(n[r],o,e,t,!1,n,r)}function b(e){var t,r,i=e.data;if(n(i))for(n(t=i.hook)&&n(t=t.destroy)&&t(e),t=0;t\u003Cs.destroy.length;++t)s.destroy[t](e);if(n(t=e.children))for(r=0;r\u003Ce.children.length;++r)b(e.children[r])}function $(e,t,r,i){for(;r\u003C=i;++r){var o=t[r];n(o)&&(n(o.tag)?(w(o),b(o)):l(o.elm))}}function w(e,t){if(n(t)||n(e.data)){var r,i=s.remove.length+1;for(n(t)?t.listeners+=i:t=function(e,t){function n(){0==--n.listeners&&l(e)}return n.listeners=t,n}(e.elm,i),n(r=e.componentInstance)&&n(r=r._vnode)&&n(r.data)&&w(r,t),r=0;r\u003Cs.remove.length;++r)s.remove[r](e,t);n(r=e.data.hook)&&n(r=r.remove)?r(e,t):t()}else l(e.elm)}function C(e,t,r,i){for(var o=r;o\u003Ci;o++){var a=t[o];if(n(a)&&ir(e,a))return o}}function x(e,i,o,a,c,l){if(e!==i){n(i.elm)&&n(a)&&(i=a[c]=me(i));var p=i.elm=e.elm;if(r(e.isAsyncPlaceholder))n(i.asyncFactory.resolved)?O(e.elm,i,o):i.isAsyncPlaceholder=!0;else if(r(i.isStatic)&&r(e.isStatic)&&i.key===e.key&&(r(i.isCloned)||r(i.isOnce)))i.componentInstance=e.componentInstance;else{var d,v=i.data;n(v)&&n(d=v.hook)&&n(d=d.prepatch)&&d(e,i);var h=e.children,y=i.children;if(n(v)&&m(i)){for(d=0;d\u003Cs.update.length;++d)s.update[d](e,i);n(d=v.hook)&&n(d=d.update)&&d(e,i)}t(i.text)?n(h)&&n(y)?h!==y&&function(e,r,i,o,a){for(var s,c,l,p=0,d=0,v=r.length-1,h=r[0],m=r[v],y=i.length-1,g=i[0],b=i[y],w=!a;p\u003C=v&&d\u003C=y;)t(h)?h=r[++p]:t(m)?m=r[--v]:ir(h,g)?(x(h,g,o,i,d),h=r[++p],g=i[++d]):ir(m,b)?(x(m,b,o,i,y),m=r[--v],b=i[--y]):ir(h,b)?(x(h,b,o,i,y),w&&u.insertBefore(e,h.elm,u.nextSibling(m.elm)),h=r[++p],b=i[--y]):ir(m,g)?(x(m,g,o,i,d),w&&u.insertBefore(e,m.elm,h.elm),m=r[--v],g=i[++d]):(t(s)&&(s=or(r,p,v)),t(c=n(g.key)?s[g.key]:C(g,r,p,v))?f(g,o,e,h.elm,!1,i,d):ir(l=r[c],g)?(x(l,g,o,i,d),r[c]=void 0,w&&u.insertBefore(e,l.elm,h.elm)):f(g,o,e,h.elm,!1,i,d),g=i[++d]);p>v?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(0,r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,\"\"),_(p,null,y,0,y.length-1,o)):n(h)?$(0,h,0,h.length-1):n(e.text)&&u.setTextContent(p,\"\"):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o\u003Ct.length;++o)t[o].data.hook.insert(t[o])}var A=p(\"attrs,class,staticClass,staticStyle,key\");function O(e,t,i,o){var a,s=t.tag,c=t.data,u=t.children;if(o=o||c&&c.pre,t.elm=e,r(t.isComment)&&n(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(n(c)&&(n(a=c.hook)&&n(a=a.init)&&a(t,!0),n(a=t.componentInstance)))return d(t,i),!0;if(n(s)){if(n(u))if(e.hasChildNodes())if(n(a=c)&&n(a=a.domProps)&&n(a=a.innerHTML)){if(a!==e.innerHTML)return!1}else{for(var l=!0,f=e.firstChild,p=0;p\u003Cu.length;p++){if(!f||!O(f,u[p],i,o)){l=!1;break}f=f.nextSibling}if(!l||f)return!1}else h(t,u,i);if(n(c)){var v=!1;for(var m in c)if(!A(m)){v=!0,y(t,i);break}!v&&c.class&&et(c.class)}}else e.data!==t.text&&(e.data=t.text);return!0}return function(e,i,o,a){if(!t(i)){var c,l=!1,p=[];if(t(e))l=!0,f(i,p);else{var d=n(e.nodeType);if(!d&&ir(e,i))x(e,i,p,null,null,a);else{if(d){if(1===e.nodeType&&e.hasAttribute(L)&&(e.removeAttribute(L),o=!0),r(o)&&O(e,i,p))return k(i,p,!0),e;c=e,e=new pe(u.tagName(c).toLowerCase(),{},[],void 0,c)}var v=e.elm,h=u.parentNode(v);if(f(i,p,v._leaveCb?null:h,u.nextSibling(v)),n(i.parent))for(var y=i.parent,g=m(i);y;){for(var _=0;_\u003Cs.destroy.length;++_)s.destroy[_](y);if(y.elm=i.elm,g){for(var w=0;w\u003Cs.create.length;++w)s.create[w](nr,y);var C=y.data.hook.insert;if(C.merged)for(var A=1;A\u003CC.fns.length;A++)C.fns[A]()}else tr(y);y=y.parent}n(h)?$(0,[e],0,0):n(e.tag)&&b(e)}}return k(i,p,l),i.elm}n(e)&&b(e)}}({nodeOps:Qn,modules:[mr,xr,ni,oi,mi,z?{create:Ui,activate:Ui,remove:function(e,t){!0!==e.data.show?Ri(e,t):t()}}:{}].concat(pr)});W&&document.addEventListener(\"selectionchange\",function(){var e=document.activeElement;e&&e.vmodel&&Xi(e,\"input\")});var Vi={inserted:function(e,t,n,r){\"select\"===n.tag?(r.elm&&!r.elm._vOptions?it(n,\"postpatch\",function(){Vi.componentUpdated(e,t,n)}):Ki(e,t,n.context),e._vOptions=[].map.call(e.options,Wi)):(\"textarea\"===n.tag||Xn(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Zi),e.addEventListener(\"compositionend\",Gi),e.addEventListener(\"change\",Gi),W&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if(\"select\"===n.tag){Ki(e,t,n.context);var r=e._vOptions,i=e._vOptions=[].map.call(e.options,Wi);if(i.some(function(e,t){return!N(e,r[t])}))(e.multiple?t.value.some(function(e){return qi(e,i)}):t.value!==t.oldValue&&qi(t.value,i))&&Xi(e,\"change\")}}};function Ki(e,t,n){Ji(e,t,n),(q||Z)&&setTimeout(function(){Ji(e,t,n)},0)}function Ji(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s\u003Cc;s++)if(a=e.options[s],i)o=j(r,Wi(a))>-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return\"_value\"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,\"input\"))}function Xi(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display=\"none\"})):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(\u002F\\d-keep-alive$\u002F.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return\"show\"===e.name},ao={name:\"transition\",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s=\"__transition-\"+this._uid+\"-\";a.key=null==a.key?a.isComment?s+\"comment\":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if(\"out-in\"===r)return this._leaving=!0,it(f,\"afterLeave\",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if(\"in-out\"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,\"afterEnter\",d),it(c,\"enterCancelled\",d),it(f,\"delayLeave\",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform=\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration=\"0s\"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s\u003Ci.length;s++){var c=i[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf(\"__vlist\")&&(o.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a)}if(r){for(var u=[],l=[],f=0;f\u003Cr.length;f++){var p=r[f];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?u.push(p):l.push(p)}this.kept=e(t,null,u),this.removed=l}return e(t,null,o)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||\"v\")+\"-move\";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(co),e.forEach(uo),e.forEach(lo),this._reflow=document.body.offsetHeight,e.forEach(function(e){if(e.data.moved){var n=e.elm,r=n.style;Ni(n,t),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(Ai,n._moveCb=function e(r){r&&r.target!==n||r&&!\u002Ftransform$\u002F.test(r.propertyName)||(n.removeEventListener(Ai,e),n._moveCb=null,ji(n,t))})}}))},methods:{hasMove:function(e,t){if(!wi)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach(function(e){_i(n,e)}),gi(n,t),n.style.display=\"none\",this.$el.appendChild(n);var r=Mi(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};wn.config.mustUseProp=jn,wn.config.isReservedTag=Wn,wn.config.isReservedAttr=En,wn.config.getTagNamespace=Zn,wn.config.isUnknownElement=function(e){if(!z)return!0;if(Wn(e))return!1;if(e=e.toLowerCase(),null!=Gn[e])return Gn[e];var t=document.createElement(e);return e.indexOf(\"-\")>-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=\u002FHTMLUnknownElement\u002F.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,\"beforeMount\"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,\"beforeUpdate\")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,\"mounted\")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit(\"init\",wn)},0);var po=\u002F\\{\\{((?:.|\\r?\\n)+?)\\}\\}\u002Fg,vo=\u002F[-.*+?^${}()|[\\]\\\u002F\\\\]\u002Fg,ho=g(function(e){var t=e[0].replace(vo,\"\\\\$&\"),n=e[1].replace(vo,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+n,\"g\")});var mo={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;var n=Fr(e,\"class\");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,\"class\",!1);r&&(e.classBinding=r)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\"+e.staticClass+\",\"),e.classBinding&&(t+=\"class:\"+e.classBinding+\",\"),t}};var yo,go={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;var n=Fr(e,\"style\");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,\"style\",!1);r&&(e.styleBinding=r)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding&&(t+=\"style:(\"+e.styleBinding+\"),\"),t}},_o=function(e){return(yo=yo||document.createElement(\"div\")).innerHTML=e,yo.textContent},bo=p(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),$o=p(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),wo=p(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),Co=\u002F^\\s*([^\\s\"'\u003C>\\\u002F=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,xo=\u002F^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'\u003C>\\\u002F=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=\u003C>`]+)))?\u002F,ko=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",Ao=\"((?:\"+ko+\"\\\\:)?\"+ko+\")\",Oo=new RegExp(\"^\u003C\"+Ao),So=\u002F^\\s*(\\\u002F?)>\u002F,To=new RegExp(\"^\u003C\\\\\u002F\"+Ao+\"[^>]*>\"),Eo=\u002F^\u003C!DOCTYPE [^>]+>\u002Fi,No=\u002F^\u003C!\\--\u002F,jo=\u002F^\u003C!\\[\u002F,Do=p(\"script,style,textarea\",!0),Lo={},Mo={\"&lt;\":\"\u003C\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\",\"&#9;\":\"\\t\",\"&#39;\":\"'\"},Io=\u002F&(?:lt|gt|quot|amp|#39);\u002Fg,Fo=\u002F&(?:lt|gt|quot|amp|#39|#10|#9);\u002Fg,Po=p(\"pre,textarea\",!0),Ro=function(e,t){return e&&Po(e)&&\"\\n\"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=\u002F^@|^v-on:\u002F,Go=\u002F^v-|^@|^:\u002F,Xo=\u002F([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)\u002F,Yo=\u002F,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$\u002F,Qo=\u002F^\\(|\\)$\u002Fg,ea=\u002F^\\[.*\\]$\u002F,ta=\u002F:(.*)$\u002F,na=\u002F^:|^\\.|^v-bind:\u002F,ra=\u002F\\.[^.\\]]+(?=[^\\]]*$)\u002Fg,ia=\u002F^v-slot(:|$)|^#\u002F,oa=\u002F[\\r\\n]\u002F,aa=\u002F\\s+\u002Fg,sa=g(_o),ca=\"_empty_\";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,\"transformNode\"),Vo=Tr(t.modules,\"preTransformNode\"),Ko=Tr(t.modules,\"postTransformNode\"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'\"default\"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f\u003CKo.length;f++)Ko[f](e,t)}function l(e){if(!c)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&\" \"===t.text;)e.children.pop()}return function(e,t){for(var n,r,i=[],o=t.expectHTML,a=t.isUnaryTag||T,s=t.canBeLeftOpenTag||T,c=0;e;){if(n=e,r&&Do(r)){var u=0,l=r.toLowerCase(),f=Lo[l]||(Lo[l]=new RegExp(\"([\\\\s\\\\S]*?)(\u003C\u002F\"+l+\"[^>]*>)\",\"i\")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||\"noscript\"===l||(n=n.replace(\u002F\u003C!\\--([\\s\\S]*?)-->\u002Fg,\"$1\").replace(\u002F\u003C!\\[CDATA\\[([\\s\\S]*?)]]>\u002Fg,\"$1\")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),\"\"});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf(\"\u003C\");if(0===d){if(No.test(e)){var v=e.indexOf(\"--\\x3e\");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf(\"]>\");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf(\"\u003C\",1))\u003C0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d\u003C0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&(\"p\"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p\u003Cl;p++){var d=e.attrs[p],v=d[3]||d[4]||d[5]||\"\",h=\"a\"===n&&\"href\"===d[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;f[p]={name:d[1],value:Ho(v,h)}}u||(i.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:f,start:e.start,end:e.end}),r=n),t.start&&t.start(n,f,u,e.start,e.end)}function A(e,n,o){var a,s;if(null==n&&(n=c),null==o&&(o=c),e)for(s=e.toLowerCase(),a=i.length-1;a>=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else\"br\"===s?t.start&&t.start(e,[],!0,n,o):\"p\"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&\"svg\"===p&&(o=function(e){for(var t=[],n=0;n\u003Ce.length;n++){var r=e[n];ya.test(r.name)||(r.name=r.name.replace(ga,\"\"),t.push(r))}return t}(o));var d,v=ua(e,o,r);p&&(v.ns=p),\"style\"!==(d=v).tag&&(\"script\"!==d.tag||d.attrsMap.type&&\"text\u002Fjavascript\"!==d.attrsMap.type)||te()||(v.forbidden=!0);for(var h=0;h\u003CVo.length;h++)v=Vo[h](v,t)||v;s||(!function(e){null!=Fr(e,\"v-pre\")&&(e.pre=!0)}(v),v.pre&&(s=!0)),Jo(v.tag)&&(c=!0),s?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),i=0;i\u003Cn;i++)r[i]={name:t[i].name,value:JSON.stringify(t[i].value)},null!=t[i].start&&(r[i].start=t[i].start,r[i].end=t[i].end);else e.pre||(e.plain=!0)}(v):v.processed||(pa(v),function(e){var t=Fr(e,\"v-if\");if(t)e.if=t,da(e,{exp:t,block:e});else{null!=Fr(e,\"v-else\")&&(e.else=!0);var n=Fr(e,\"v-else-if\");n&&(e.elseif=n)}}(v),function(e){null!=Fr(e,\"v-once\")&&(e.once=!0)}(v)),n||(n=v),a?u(v):(r=v,i.push(v))},end:function(e,t,n){var o=i[i.length-1];i.length-=1,r=i[i.length-1],u(o)},chars:function(e,t,n){if(r&&(!q||\"textarea\"!==r.tag||r.attrsMap.placeholder!==e)){var i,u,l,f=r.children;if(e=c||e.trim()?\"script\"===(i=r).tag||\"style\"===i.tag?e:sa(e):f.length?a?\"condense\"===a&&oa.test(e)?\"\":\" \":o?\" \":\"\":\"\")c||\"condense\"!==a||(e=e.replace(aa,\" \")),!s&&\" \"!==e&&(u=function(e,t){var n=t?ho(t):po;if(n.test(e)){for(var r,i,o,a=[],s=[],c=n.lastIndex=0;r=n.exec(e);){(i=r.index)>c&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push(\"_s(\"+u+\")\"),s.push({\"@binding\":u}),c=i+r[0].length}return c\u003Ce.length&&(s.push(o=e.slice(c)),a.push(JSON.stringify(o))),{expression:a.join(\"+\"),tokens:s}}}(e,Uo))?l={type:2,expression:u.expression,tokens:u.tokens,text:e}:\" \"===e&&f.length&&\" \"===f[f.length-1].text||(l={type:3,text:e}),l&&f.push(l)}},comment:function(e,t,n){if(r){var i={type:3,text:e,isComment:!0};r.children.push(i)}}}),n}function fa(e,t){var n,r;(r=Ir(n=e,\"key\"))&&(n.key=r),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,function(e){var t=Ir(e,\"ref\");t&&(e.ref=t,e.refInFor=function(e){var t=e;for(;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}(e))}(e),function(e){var t;\"template\"===e.tag?(t=Fr(e,\"scope\"),e.slotScope=t||Fr(e,\"slot-scope\")):(t=Fr(e,\"slot-scope\"))&&(e.slotScope=t);var n=Ir(e,\"slot\");n&&(e.slotTarget='\"\"'===n?'\"default\"':n,e.slotTargetDynamic=!(!e.attrsMap[\":slot\"]&&!e.attrsMap[\"v-bind:slot\"]),\"template\"===e.tag||e.slotScope||Nr(e,\"slot\",n,function(e,t){return e.rawAttrsMap[\":\"+t]||e.rawAttrsMap[\"v-bind:\"+t]||e.rawAttrsMap[t]}(e,\"slot\")));if(\"template\"===e.tag){var r=Pr(e,ia);if(r){var i=va(r),o=i.name,a=i.dynamic;e.slotTarget=o,e.slotTargetDynamic=a,e.slotScope=r.value||ca}}else{var s=Pr(e,ia);if(s){var c=e.scopedSlots||(e.scopedSlots={}),u=va(s),l=u.name,f=u.dynamic,p=c[l]=ua(\"template\",[],e);p.slotTarget=l,p.slotTargetDynamic=f,p.children=e.children.filter(function(e){if(!e.slotScope)return e.parent=p,!0}),p.slotScope=s.value||ca,e.children=[],e.plain=!1}}}(e),function(e){\"slot\"===e.tag&&(e.slotName=Ir(e,\"name\"))}(e),function(e){var t;(t=Ir(e,\"is\"))&&(e.component=t);null!=Fr(e,\"inline-template\")&&(e.inlineTemplate=!0)}(e);for(var i=0;i\u003Czo.length;i++)e=zo[i](e,t)||e;return function(e){var t,n,r,i,o,a,s,c,u=e.attrsList;for(t=0,n=u.length;t\u003Cn;t++)if(r=i=u[t].name,o=u[t].value,Go.test(r))if(e.hasBindings=!0,(a=ha(r.replace(Go,\"\")))&&(r=r.replace(ra,\"\")),na.test(r))r=r.replace(na,\"\"),o=Ar(o),(c=ea.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!c&&\"innerHtml\"===(r=b(r))&&(r=\"innerHTML\"),a.camel&&!c&&(r=b(r)),a.sync&&(s=Br(o,\"$event\"),c?Mr(e,'\"update:\"+('+r+\")\",s,null,!1,0,u[t],!0):(Mr(e,\"update:\"+b(r),s,null,!1,0,u[t]),C(r)!==b(r)&&Mr(e,\"update:\"+C(r),s,null,!1,0,u[t])))),a&&a.prop||!e.component&&qo(e.tag,e.attrsMap.type,r)?Er(e,r,o,u[t],c):Nr(e,r,o,u[t],c);else if(Zo.test(r))r=r.replace(Zo,\"\"),(c=ea.test(r))&&(r=r.slice(1,-1)),Mr(e,r,o,a,!1,0,u[t],c);else{var l=(r=r.replace(Go,\"\")).match(ta),f=l&&l[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),ea.test(f)&&(f=f.slice(1,-1),c=!0)),Dr(e,r,i,o,f,c,a,u[t])}else Nr(e,r,JSON.stringify(o),u[t]),!e.component&&\"muted\"===r&&qo(e.tag,e.attrsMap.type,r)&&Er(e,r,\"true\",u[t])}(e),e}function pa(e){var t;if(t=Fr(e,\"v-for\")){var n=function(e){var t=e.match(Xo);if(!t)return;var n={};n.for=t[2].trim();var r=t[1].trim().replace(Qo,\"\"),i=r.match(Yo);i?(n.alias=r.replace(Yo,\"\").trim(),n.iterator1=i[1].trim(),i[2]&&(n.iterator2=i[2].trim())):n.alias=r;return n}(t);n&&A(e,n)}}function da(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function va(e){var t=e.name.replace(ia,\"\");return t||\"#\"!==e.name[0]&&(t=\"default\"),ea.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'\"'+t+'\"',dynamic:!1}}function ha(e){var t=e.match(ra);if(t){var n={};return t.forEach(function(e){n[e.slice(1)]=!0}),n}}function ma(e){for(var t={},n=0,r=e.length;n\u003Cr;n++)t[e[n].name]=e[n].value;return t}var ya=\u002F^xmlns:NS\\d+\u002F,ga=\u002F^NS\\d+:\u002F;function _a(e){return ua(e.tag,e.attrsList.slice(),e.parent)}var ba=[mo,go,{preTransformNode:function(e,t){if(\"input\"===e.tag){var n,r=e.attrsMap;if(!r[\"v-model\"])return;if((r[\":type\"]||r[\"v-bind:type\"])&&(n=Ir(e,\"type\")),r.type||n||!r[\"v-bind\"]||(n=\"(\"+r[\"v-bind\"]+\").type\"),n){var i=Fr(e,\"v-if\",!0),o=i?\"&&(\"+i+\")\":\"\",a=null!=Fr(e,\"v-else\",!0),s=Fr(e,\"v-else-if\",!0),c=_a(e);pa(c),jr(c,\"type\",\"checkbox\"),fa(c,t),c.processed=!0,c.if=\"(\"+n+\")==='checkbox'\"+o,da(c,{exp:c.if,block:c});var u=_a(e);Fr(u,\"v-for\",!0),jr(u,\"type\",\"radio\"),fa(u,t),da(c,{exp:\"(\"+n+\")==='radio'\"+o,block:u});var l=_a(e);return Fr(l,\"v-for\",!0),jr(l,\":type\",n),fa(l,t),da(c,{exp:i,block:l}),a?c.else=!0:s&&(c.elseif=s),c}}}}];var $a,wa,Ca={expectHTML:!0,modules:ba,directives:{model:function(e,t,n){var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;if(e.component)return Hr(e,r,i),!1;if(\"select\"===o)!function(e,t,n){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(n&&n.number?\"_n(val)\":\"val\")+\"});\";r=r+\" \"+Br(t,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),Mr(e,\"change\",r,null,!0)}(e,r,i);else if(\"input\"===o&&\"checkbox\"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,\"value\")||\"null\",o=Ir(e,\"true-value\")||\"true\",a=Ir(e,\"false-value\")||\"false\";Er(e,\"checked\",\"Array.isArray(\"+t+\")?_i(\"+t+\",\"+i+\")>-1\"+(\"true\"===o?\":(\"+t+\")\":\":_q(\"+t+\",\"+o+\")\")),Mr(e,\"change\",\"var $$a=\"+t+\",$$el=$event.target,$$c=$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+i+\")\":i)+\",$$i=_i($$a,$$v);if($$el.checked){$$i\u003C0&&(\"+Br(t,\"$$a.concat([$$v])\")+\")}else{$$i>-1&&(\"+Br(t,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Br(t,\"$$c\")+\"}\",null,!0)}(e,r,i);else if(\"input\"===o&&\"radio\"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,\"value\")||\"null\";Er(e,\"checked\",\"_q(\"+t+\",\"+(i=r?\"_n(\"+i+\")\":i)+\")\"),Mr(e,\"change\",Br(t,i),null,!0)}(e,r,i);else if(\"input\"===o||\"textarea\"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&\"range\"!==r,u=o?\"change\":\"range\"===r?Wr:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=Br(t,l);c&&(f=\"if($event.target.composing)return;\"+f),Er(e,\"value\",\"(\"+t+\")\"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,\"blur\",\"$forceUpdate()\")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value&&Er(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")}(ba)},xa=g(function(e){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function ka(e,t){e&&($a=xa(t.staticKeys||\"\"),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var n=0,r=t.children.length;n\u003Cr;n++){var i=t.children[n];e(i),i.static||(t.static=!1)}if(t.ifConditions)for(var o=1,a=t.ifConditions.length;o\u003Ca;o++){var s=t.ifConditions[o].block;e(s),s.static||(t.static=!1)}}}(e),function e(t,n){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=n),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var r=0,i=t.children.length;r\u003Ci;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var o=1,a=t.ifConditions.length;o\u003Ca;o++)e(t.ifConditions[o].block,n)}}(e,!1))}var Aa=\u002F^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(\u002F,Oa=\u002F\\([^)]*?\\);*$\u002F,Sa=\u002F^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$\u002F,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},Na=function(e){return\"if(\"+e+\")return null;\"},ja={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:Na(\"$event.target !== $event.currentTarget\"),ctrl:Na(\"!$event.ctrlKey\"),shift:Na(\"!$event.shiftKey\"),alt:Na(\"!$event.altKey\"),meta:Na(\"!$event.metaKey\"),left:Na(\"'button' in $event && $event.button !== 0\"),middle:Na(\"'button' in $event && $event.button !== 1\"),right:Na(\"'button' in $event && $event.button !== 2\")};function Da(e,t){var n=t?\"nativeOn:\":\"on:\",r=\"\",i=\"\";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+\",\"+a+\",\":r+='\"'+o+'\":'+a+\",\"}return r=\"{\"+r.slice(0,-1)+\"}\",i?n+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":n+r}function La(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return La(e)}).join(\",\")+\"]\";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,\"\"));if(e.modifiers){var i=\"\",o=\"\",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if(\"exact\"===s){var c=e.modifiers;o+=Na([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!c[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))}else a.push(s);return a.length&&(i+=function(e){return\"if(!$event.type.indexOf('key')&&\"+e.map(Ma).join(\"&&\")+\")return null;\"}(a)),o&&(i+=o),\"function($event){\"+i+(t?\"return \"+e.value+\"($event)\":n?\"return (\"+e.value+\")($event)\":r?\"return \"+e.value:e.value)+\"}\"}return t||n?e.value:\"function($event){\"+(r?\"return \"+e.value:e.value)+\"}\"}function Ma(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\"+t;var n=Ta[e],r=Ea[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(r)+\")\"}var Ia={on:function(e,t){e.wrapListeners=function(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(e,t){e.wrapData=function(n){return\"_b(\"+n+\",'\"+e.tag+\"',\"+t.value+\",\"+(t.modifiers&&t.modifiers.prop?\"true\":\"false\")+(t.modifiers&&t.modifiers.sync?\",true\":\"\")+\")\"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,\"transformCode\"),this.dataGenFns=Tr(e.modules,\"genData\"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:\"with(this){return \"+(e?Ra(e,n):'_c(\"div\")')+\"}\",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return function(e,t){var n=e.slotName||'\"default\"',r=qa(e,t),i=\"_t(\"+n+(r?\",\"+r:\"\"),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap[\"v-bind\"];!o&&!a||r||(i+=\",null\");o&&(i+=\",\"+o);a&&(i+=(o?\"\":\",null\")+\",\"+a);return i+\")\"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return\"_c(\"+e+\",\"+Va(t,n)+(r?\",\"+r:\"\")+\")\"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n=\"_c('\"+e.tag+\"'\"+(r?\",\"+r:\"\")+(i?\",\"+i:\"\")+\")\"}for(var o=0;o\u003Ct.transforms.length;o++)n=t.transforms[o](e,n);return n}return qa(e,t)||\"void 0\"}function Ha(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push(\"with(this){return \"+Ra(e,t)+\"}\"),t.pre=n,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function Ba(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ua(e,t);if(e.staticInFor){for(var n=\"\",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?\"_o(\"+Ra(e,t)+\",\"+t.onceId+++\",\"+n+\")\":Ra(e,t)}return Ha(e,t)}function Ua(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,i){if(!t.length)return i||\"_e()\";var o=t.shift();return o.exp?\"(\"+o.exp+\")?\"+a(o.block)+\":\"+e(t,n,r,i):\"\"+a(o.block);function a(e){return r?r(e,n):e.once?Ba(e,n):Ra(e,n)}}(e.ifConditions.slice(),t,n,r)}function za(e,t,n,r){var i=e.for,o=e.alias,a=e.iterator1?\",\"+e.iterator1:\"\",s=e.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed=!0,(r||\"_l\")+\"((\"+i+\"),function(\"+o+a+s+\"){return \"+(n||Ra)(e,t)+\"})\"}function Va(e,t){var n=\"{\",r=function(e,t){var n=e.directives;if(!n)return;var r,i,o,a,s=\"directives:[\",c=!1;for(r=0,i=n.length;r\u003Ci;r++){o=n[r],a=!0;var u=t.directives[o.name];u&&(a=!!u(e,o,t.warn)),a&&(c=!0,s+='{name:\"'+o.name+'\",rawName:\"'+o.rawName+'\"'+(o.value?\",value:(\"+o.value+\"),expression:\"+JSON.stringify(o.value):\"\")+(o.arg?\",arg:\"+(o.isDynamicArg?o.arg:'\"'+o.arg+'\"'):\"\")+(o.modifiers?\",modifiers:\"+JSON.stringify(o.modifiers):\"\")+\"},\")}if(c)return s.slice(0,-1)+\"]\"}(e,t);r&&(n+=r+\",\"),e.key&&(n+=\"key:\"+e.key+\",\"),e.ref&&(n+=\"ref:\"+e.ref+\",\"),e.refInFor&&(n+=\"refInFor:true,\"),e.pre&&(n+=\"pre:true,\"),e.component&&(n+='tag:\"'+e.tag+'\",');for(var i=0;i\u003Ct.dataGenFns.length;i++)n+=t.dataGenFns[i](e);if(e.attrs&&(n+=\"attrs:\"+Ga(e.attrs)+\",\"),e.props&&(n+=\"domProps:\"+Ga(e.props)+\",\"),e.events&&(n+=Da(e.events,!1)+\",\"),e.nativeEvents&&(n+=Da(e.nativeEvents,!0)+\",\"),e.slotTarget&&!e.slotScope&&(n+=\"slot:\"+e.slotTarget+\",\"),e.scopedSlots&&(n+=function(e,t,n){var r=e.for||Object.keys(t).some(function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||Ka(n)}),i=!!e.if;if(!r)for(var o=e.parent;o;){if(o.slotScope&&o.slotScope!==ca||o.for){r=!0;break}o.if&&(i=!0),o=o.parent}var a=Object.keys(t).map(function(e){return Ja(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+a+\"]\"+(r?\",null,true\":\"\")+(!r&&i?\",null,false,\"+function(e){var t=5381,n=e.length;for(;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(a):\"\")+\")\"}(e,e.scopedSlots,t)+\",\"),e.model&&(n+=\"model:{value:\"+e.model.value+\",callback:\"+e.model.callback+\",expression:\"+e.model.expression+\"},\"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return\"inlineTemplate:{render:function(){\"+r.render+\"},staticRenderFns:[\"+r.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}(e,t);o&&(n+=o+\",\")}return n=n.replace(\u002F,$\u002F,\"\")+\"}\",e.dynamicAttrs&&(n=\"_b(\"+n+',\"'+e.tag+'\",'+Ga(e.dynamicAttrs)+\")\"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,\"null\");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?\"\":String(e.slotScope),i=\"function(\"+r+\"){return \"+(\"template\"===e.tag?e.if&&n?\"(\"+e.if+\")?\"+(qa(e,t)||\"undefined\")+\":undefined\":qa(e,t)||\"undefined\":Ra(e,t))+\"}\",o=r?\"\":\",proxy:true\";return\"{key:\"+(e.slotTarget||'\"default\"')+\",fn:\"+i+o+\"}\"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&\"template\"!==a.tag&&\"slot\"!==a.tag){var s=n?t.maybeComponent(a)?\",1\":\",0\":\"\";return\"\"+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r\u003Ce.length;r++){var i=e[r];if(1===i.type){if(Wa(i)||i.ifConditions&&i.ifConditions.some(function(e){return Wa(e.block)})){n=2;break}(t(i)||i.ifConditions&&i.ifConditions.some(function(e){return t(e.block)}))&&(n=1)}}return n}(o,t.maybeComponent):0,u=i||Za;return\"[\"+o.map(function(e){return u(e,t)}).join(\",\")+\"]\"+(c?\",\"+c:\"\")}}function Wa(e){return void 0!==e.for||\"template\"===e.tag||\"slot\"===e.tag}function Za(e,t){return 1===e.type?Ra(e,t):3===e.type&&e.isComment?(r=e,\"_e(\"+JSON.stringify(r.text)+\")\"):\"_v(\"+(2===(n=e).type?n.expression:Xa(JSON.stringify(n.text)))+\")\";var n,r}function Ga(e){for(var t=\"\",n=\"\",r=0;r\u003Ce.length;r++){var i=e[r],o=Xa(i.value);i.dynamic?n+=i.name+\",\"+o+\",\":t+='\"'+i.name+'\":'+o+\",\"}return t=\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function Xa(e){return e.replace(\u002F\\u2028\u002Fg,\"\\\\u2028\").replace(\u002F\\u2029\u002Fg,\"\\\\u2029\")}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");function Ya(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),S}}function Qa(e){var t=Object.create(null);return function(n,r,i){(r=A({},r)).warn;delete r.warn;var o=r.delimiters?String(r.delimiters)+n:n;if(t[o])return t[o];var a=e(n,r),s={},c=[];return s.render=Ya(a.render,c),s.staticRenderFns=a.staticRenderFns.map(function(e){return Ya(e,c)}),t[o]=s}}var es,ts,ns=(es=function(e,t){var n=la(e.trim(),t);!1!==t.optimize&&ka(n,t);var r=Pa(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(e){function t(t,n){var r=Object.create(e),i=[],o=[];if(n)for(var a in n.modules&&(r.modules=(e.modules||[]).concat(n.modules)),n.directives&&(r.directives=A(Object.create(e.directives||null),n.directives)),n)\"modules\"!==a&&\"directives\"!==a&&(r[a]=n[a]);r.warn=function(e,t,n){(n?o:i).push(e)};var s=es(t.trim(),r);return s.errors=i,s.tips=o,s}return{compile:t,compileToFunctions:Qa(t)}})(Ca),rs=(ns.compile,ns.compileToFunctions);function is(e){return(ts=ts||document.createElement(\"div\")).innerHTML=e?'\u003Ca href=\"\\n\"\u002F>':'\u003Cdiv a=\"\\n\"\u002F>',ts.innerHTML.indexOf(\"&#10;\")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn});\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvue-resource.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1574 +1,1574 @@\n-\u002F*!\r\n- * vue-resource v1.3.4\r\n- * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\r\n- * Released under the MIT License.\r\n- *\u002F\r\n-\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global.VueResource = factory());\r\n-}(this, (function () { 'use strict';\r\n-\r\n-    \u002F**\r\n-     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\r\n-     *\u002F\r\n-\r\n-    var RESOLVED = 0;\r\n-    var REJECTED = 1;\r\n-    var PENDING  = 2;\r\n-\r\n-    function Promise$1(executor) {\r\n-\r\n-        this.state = PENDING;\r\n-        this.value = undefined;\r\n-        this.deferred = [];\r\n-\r\n-        var promise = this;\r\n-\r\n-        try {\r\n-            executor(function (x) {\r\n-                promise.resolve(x);\r\n-            }, function (r) {\r\n-                promise.reject(r);\r\n-            });\r\n-        } catch (e) {\r\n-            promise.reject(e);\r\n-        }\r\n-    }\r\n-\r\n-    Promise$1.reject = function (r) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            reject(r);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.resolve = function (x) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            resolve(x);\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.all = function all(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            var count = 0, result = [];\r\n-\r\n-            if (iterable.length === 0) {\r\n-                resolve(result);\r\n-            }\r\n-\r\n-            function resolver(i) {\r\n-                return function (x) {\r\n-                    result[i] = x;\r\n-                    count += 1;\r\n-\r\n-                    if (count === iterable.length) {\r\n-                        resolve(result);\r\n-                    }\r\n-                };\r\n-            }\r\n-\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    Promise$1.race = function race(iterable) {\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            for (var i = 0; i \u003C iterable.length; i += 1) {\r\n-                Promise$1.resolve(iterable[i]).then(resolve, reject);\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    var p$1 = Promise$1.prototype;\r\n-\r\n-    p$1.resolve = function resolve(x) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (x === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            var called = false;\r\n-\r\n-            try {\r\n-                var then = x && x['then'];\r\n-\r\n-                if (x !== null && typeof x === 'object' && typeof then === 'function') {\r\n-                    then.call(x, function (x) {\r\n-                        if (!called) {\r\n-                            promise.resolve(x);\r\n-                        }\r\n-                        called = true;\r\n-\r\n-                    }, function (r) {\r\n-                        if (!called) {\r\n-                            promise.reject(r);\r\n-                        }\r\n-                        called = true;\r\n-                    });\r\n-                    return;\r\n-                }\r\n-            } catch (e) {\r\n-                if (!called) {\r\n-                    promise.reject(e);\r\n-                }\r\n-                return;\r\n-            }\r\n-\r\n-            promise.state = RESOLVED;\r\n-            promise.value = x;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.reject = function reject(reason) {\r\n-        var promise = this;\r\n-\r\n-        if (promise.state === PENDING) {\r\n-            if (reason === promise) {\r\n-                throw new TypeError('Promise settled with itself.');\r\n-            }\r\n-\r\n-            promise.state = REJECTED;\r\n-            promise.value = reason;\r\n-            promise.notify();\r\n-        }\r\n-    };\r\n-\r\n-    p$1.notify = function notify() {\r\n-        var promise = this;\r\n-\r\n-        nextTick(function () {\r\n-            if (promise.state !== PENDING) {\r\n-                while (promise.deferred.length) {\r\n-                    var deferred = promise.deferred.shift(),\r\n-                        onResolved = deferred[0],\r\n-                        onRejected = deferred[1],\r\n-                        resolve = deferred[2],\r\n-                        reject = deferred[3];\r\n-\r\n-                    try {\r\n-                        if (promise.state === RESOLVED) {\r\n-                            if (typeof onResolved === 'function') {\r\n-                                resolve(onResolved.call(undefined, promise.value));\r\n-                            } else {\r\n-                                resolve(promise.value);\r\n-                            }\r\n-                        } else if (promise.state === REJECTED) {\r\n-                            if (typeof onRejected === 'function') {\r\n-                                resolve(onRejected.call(undefined, promise.value));\r\n-                            } else {\r\n-                                reject(promise.value);\r\n-                            }\r\n-                        }\r\n-                    } catch (e) {\r\n-                        reject(e);\r\n-                    }\r\n-                }\r\n-            }\r\n-        });\r\n-    };\r\n-\r\n-    p$1.then = function then(onResolved, onRejected) {\r\n-        var promise = this;\r\n-\r\n-        return new Promise$1(function (resolve, reject) {\r\n-            promise.deferred.push([onResolved, onRejected, resolve, reject]);\r\n-            promise.notify();\r\n-        });\r\n-    };\r\n-\r\n-    p$1.catch = function (onRejected) {\r\n-        return this.then(undefined, onRejected);\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Promise adapter.\r\n-     *\u002F\r\n-\r\n-    if (typeof Promise === 'undefined') {\r\n-        window.Promise = Promise$1;\r\n-    }\r\n-\r\n-    function PromiseObj(executor, context) {\r\n-\r\n-        if (executor instanceof Promise) {\r\n-            this.promise = executor;\r\n-        } else {\r\n-            this.promise = new Promise(executor.bind(context));\r\n-        }\r\n-\r\n-        this.context = context;\r\n-    }\r\n-\r\n-    PromiseObj.all = function (iterable, context) {\r\n-        return new PromiseObj(Promise.all(iterable), context);\r\n-    };\r\n-\r\n-    PromiseObj.resolve = function (value, context) {\r\n-        return new PromiseObj(Promise.resolve(value), context);\r\n-    };\r\n-\r\n-    PromiseObj.reject = function (reason, context) {\r\n-        return new PromiseObj(Promise.reject(reason), context);\r\n-    };\r\n-\r\n-    PromiseObj.race = function (iterable, context) {\r\n-        return new PromiseObj(Promise.race(iterable), context);\r\n-    };\r\n-\r\n-    var p = PromiseObj.prototype;\r\n-\r\n-    p.bind = function (context) {\r\n-        this.context = context;\r\n-        return this;\r\n-    };\r\n-\r\n-    p.then = function (fulfilled, rejected) {\r\n-\r\n-        if (fulfilled && fulfilled.bind && this.context) {\r\n-            fulfilled = fulfilled.bind(this.context);\r\n-        }\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\r\n-    };\r\n-\r\n-    p.catch = function (rejected) {\r\n-\r\n-        if (rejected && rejected.bind && this.context) {\r\n-            rejected = rejected.bind(this.context);\r\n-        }\r\n-\r\n-        return new PromiseObj(this.promise.catch(rejected), this.context);\r\n-    };\r\n-\r\n-    p.finally = function (callback) {\r\n-\r\n-        return this.then(function (value) {\r\n-                callback.call(this);\r\n-                return value;\r\n-            }, function (reason) {\r\n-                callback.call(this);\r\n-                return Promise.reject(reason);\r\n-            }\r\n-        );\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Utility functions.\r\n-     *\u002F\r\n-\r\n-    var ref = {};\r\n-    var hasOwnProperty = ref.hasOwnProperty;\r\n-\r\n-    var ref$1 = [];\r\n-    var slice = ref$1.slice;\r\n-    var debug = false;\r\n-    var ntick;\r\n-\r\n-    var inBrowser = typeof window !== 'undefined';\r\n-\r\n-    var Util = function (ref) {\r\n-        var config = ref.config;\r\n-        var nextTick = ref.nextTick;\r\n-\r\n-        ntick = nextTick;\r\n-        debug = config.debug || !config.silent;\r\n-    };\r\n-\r\n-    function warn(msg) {\r\n-        if (typeof console !== 'undefined' && debug) {\r\n-            console.warn('[VueResource warn]: ' + msg);\r\n-        }\r\n-    }\r\n-\r\n-    function error(msg) {\r\n-        if (typeof console !== 'undefined') {\r\n-            console.error(msg);\r\n-        }\r\n-    }\r\n-\r\n-    function nextTick(cb, ctx) {\r\n-        return ntick(cb, ctx);\r\n-    }\r\n-\r\n-    function trim(str) {\r\n-        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\r\n-    }\r\n-\r\n-    function trimEnd(str, chars) {\r\n-\r\n-        if (str && chars === undefined) {\r\n-            return str.replace(\u002F\\s+$\u002F, '');\r\n-        }\r\n-\r\n-        if (!str || !chars) {\r\n-            return str;\r\n-        }\r\n-\r\n-        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\r\n-    }\r\n-\r\n-    function toLower(str) {\r\n-        return str ? str.toLowerCase() : '';\r\n-    }\r\n-\r\n-    function toUpper(str) {\r\n-        return str ? str.toUpperCase() : '';\r\n-    }\r\n-\r\n-    var isArray = Array.isArray;\r\n-\r\n-    function isString(val) {\r\n-        return typeof val === 'string';\r\n-    }\r\n-\r\n-\r\n-\r\n-    function isFunction(val) {\r\n-        return typeof val === 'function';\r\n-    }\r\n-\r\n-    function isObject(obj) {\r\n-        return obj !== null && typeof obj === 'object';\r\n-    }\r\n-\r\n-    function isPlainObject(obj) {\r\n-        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\r\n-    }\r\n-\r\n-    function isBlob(obj) {\r\n-        return typeof Blob !== 'undefined' && obj instanceof Blob;\r\n-    }\r\n-\r\n-    function isFormData(obj) {\r\n-        return typeof FormData !== 'undefined' && obj instanceof FormData;\r\n-    }\r\n-\r\n-    function when(value, fulfilled, rejected) {\r\n-\r\n-        var promise = PromiseObj.resolve(value);\r\n-\r\n-        if (arguments.length \u003C 2) {\r\n-            return promise;\r\n-        }\r\n-\r\n-        return promise.then(fulfilled, rejected);\r\n-    }\r\n-\r\n-    function options(fn, obj, opts) {\r\n-\r\n-        opts = opts || {};\r\n-\r\n-        if (isFunction(opts)) {\r\n-            opts = opts.call(obj);\r\n-        }\r\n-\r\n-        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\r\n-    }\r\n-\r\n-    function each(obj, iterator) {\r\n-\r\n-        var i, key;\r\n-\r\n-        if (isArray(obj)) {\r\n-            for (i = 0; i \u003C obj.length; i++) {\r\n-                iterator.call(obj[i], obj[i], i);\r\n-            }\r\n-        } else if (isObject(obj)) {\r\n-            for (key in obj) {\r\n-                if (hasOwnProperty.call(obj, key)) {\r\n-                    iterator.call(obj[key], obj[key], key);\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        return obj;\r\n-    }\r\n-\r\n-    var assign = Object.assign || _assign;\r\n-\r\n-    function merge(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source, true);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function defaults(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-\r\n-            for (var key in source) {\r\n-                if (target[key] === undefined) {\r\n-                    target[key] = source[key];\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _assign(target) {\r\n-\r\n-        var args = slice.call(arguments, 1);\r\n-\r\n-        args.forEach(function (source) {\r\n-            _merge(target, source);\r\n-        });\r\n-\r\n-        return target;\r\n-    }\r\n-\r\n-    function _merge(target, source, deep) {\r\n-        for (var key in source) {\r\n-            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\r\n-                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\r\n-                    target[key] = {};\r\n-                }\r\n-                if (isArray(source[key]) && !isArray(target[key])) {\r\n-                    target[key] = [];\r\n-                }\r\n-                _merge(target[key], source[key], deep);\r\n-            } else if (source[key] !== undefined) {\r\n-                target[key] = source[key];\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Root Prefix Transform.\r\n-     *\u002F\r\n-\r\n-    var root = function (options$$1, next) {\r\n-\r\n-        var url = next(options$$1);\r\n-\r\n-        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\r\n-            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Query Parameter Transform.\r\n-     *\u002F\r\n-\r\n-    var query = function (options$$1, next) {\r\n-\r\n-        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\r\n-\r\n-        each(options$$1.params, function (value, key) {\r\n-            if (urlParams.indexOf(key) === -1) {\r\n-                query[key] = value;\r\n-            }\r\n-        });\r\n-\r\n-        query = Url.params(query);\r\n-\r\n-        if (query) {\r\n-            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\r\n-        }\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\r\n-     *\u002F\r\n-\r\n-    function expand(url, params, variables) {\r\n-\r\n-        var tmpl = parse(url), expanded = tmpl.expand(params);\r\n-\r\n-        if (variables) {\r\n-            variables.push.apply(variables, tmpl.vars);\r\n-        }\r\n-\r\n-        return expanded;\r\n-    }\r\n-\r\n-    function parse(template) {\r\n-\r\n-        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\r\n-\r\n-        return {\r\n-            vars: variables,\r\n-            expand: function expand(context) {\r\n-                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\r\n-                    if (expression) {\r\n-\r\n-                        var operator = null, values = [];\r\n-\r\n-                        if (operators.indexOf(expression.charAt(0)) !== -1) {\r\n-                            operator = expression.charAt(0);\r\n-                            expression = expression.substr(1);\r\n-                        }\r\n-\r\n-                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\r\n-                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\r\n-                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\r\n-                            variables.push(tmp[1]);\r\n-                        });\r\n-\r\n-                        if (operator && operator !== '+') {\r\n-\r\n-                            var separator = ',';\r\n-\r\n-                            if (operator === '?') {\r\n-                                separator = '&';\r\n-                            } else if (operator !== '#') {\r\n-                                separator = operator;\r\n-                            }\r\n-\r\n-                            return (values.length !== 0 ? operator : '') + values.join(separator);\r\n-                        } else {\r\n-                            return values.join(',');\r\n-                        }\r\n-\r\n-                    } else {\r\n-                        return encodeReserved(literal);\r\n-                    }\r\n-                });\r\n-            }\r\n-        };\r\n-    }\r\n-\r\n-    function getValues(context, operator, key, modifier) {\r\n-\r\n-        var value = context[key], result = [];\r\n-\r\n-        if (isDefined(value) && value !== '') {\r\n-            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n-                value = value.toString();\r\n-\r\n-                if (modifier && modifier !== '*') {\r\n-                    value = value.substring(0, parseInt(modifier, 10));\r\n-                }\r\n-\r\n-                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-            } else {\r\n-                if (modifier === '*') {\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                result.push(encodeValue(operator, value[k], k));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-                } else {\r\n-                    var tmp = [];\r\n-\r\n-                    if (Array.isArray(value)) {\r\n-                        value.filter(isDefined).forEach(function (value) {\r\n-                            tmp.push(encodeValue(operator, value));\r\n-                        });\r\n-                    } else {\r\n-                        Object.keys(value).forEach(function (k) {\r\n-                            if (isDefined(value[k])) {\r\n-                                tmp.push(encodeURIComponent(k));\r\n-                                tmp.push(encodeValue(operator, value[k].toString()));\r\n-                            }\r\n-                        });\r\n-                    }\r\n-\r\n-                    if (isKeyOperator(operator)) {\r\n-                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\r\n-                    } else if (tmp.length !== 0) {\r\n-                        result.push(tmp.join(','));\r\n-                    }\r\n-                }\r\n-            }\r\n-        } else {\r\n-            if (operator === ';') {\r\n-                result.push(encodeURIComponent(key));\r\n-            } else if (value === '' && (operator === '&' || operator === '?')) {\r\n-                result.push(encodeURIComponent(key) + '=');\r\n-            } else if (value === '') {\r\n-                result.push('');\r\n-            }\r\n-        }\r\n-\r\n-        return result;\r\n-    }\r\n-\r\n-    function isDefined(value) {\r\n-        return value !== undefined && value !== null;\r\n-    }\r\n-\r\n-    function isKeyOperator(operator) {\r\n-        return operator === ';' || operator === '&' || operator === '?';\r\n-    }\r\n-\r\n-    function encodeValue(operator, value, key) {\r\n-\r\n-        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\r\n-\r\n-        if (key) {\r\n-            return encodeURIComponent(key) + '=' + value;\r\n-        } else {\r\n-            return value;\r\n-        }\r\n-    }\r\n-\r\n-    function encodeReserved(str) {\r\n-        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\r\n-            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\r\n-                part = encodeURI(part);\r\n-            }\r\n-            return part;\r\n-        }).join('');\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * URL Template (RFC 6570) Transform.\r\n-     *\u002F\r\n-\r\n-    var template = function (options) {\r\n-\r\n-        var variables = [], url = expand(options.url, options.params, variables);\r\n-\r\n-        variables.forEach(function (key) {\r\n-            delete options.params[key];\r\n-        });\r\n-\r\n-        return url;\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for URL templating.\r\n-     *\u002F\r\n-\r\n-    function Url(url, params) {\r\n-\r\n-        var self = this || {}, options$$1 = url, transform;\r\n-\r\n-        if (isString(url)) {\r\n-            options$$1 = {url: url, params: params};\r\n-        }\r\n-\r\n-        options$$1 = merge({}, Url.options, self.$options, options$$1);\r\n-\r\n-        Url.transforms.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Url.transform[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                transform = factory(handler, transform, self.$vm);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return transform(options$$1);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Url options.\r\n-     *\u002F\r\n-\r\n-    Url.options = {\r\n-        url: '',\r\n-        root: null,\r\n-        params: {}\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Url transforms.\r\n-     *\u002F\r\n-\r\n-    Url.transform = {template: template, query: query, root: root};\r\n-    Url.transforms = ['template', 'query', 'root'];\r\n-\r\n-    \u002F**\r\n-     * Encodes a Url parameter string.\r\n-     *\r\n-     * @param {Object} obj\r\n-     *\u002F\r\n-\r\n-    Url.params = function (obj) {\r\n-\r\n-        var params = [], escape = encodeURIComponent;\r\n-\r\n-        params.add = function (key, value) {\r\n-\r\n-            if (isFunction(value)) {\r\n-                value = value();\r\n-            }\r\n-\r\n-            if (value === null) {\r\n-                value = '';\r\n-            }\r\n-\r\n-            this.push(escape(key) + '=' + escape(value));\r\n-        };\r\n-\r\n-        serialize(params, obj);\r\n-\r\n-        return params.join('&').replace(\u002F%20\u002Fg, '+');\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Parse a URL and return its components.\r\n-     *\r\n-     * @param {String} url\r\n-     *\u002F\r\n-\r\n-    Url.parse = function (url) {\r\n-\r\n-        var el = document.createElement('a');\r\n-\r\n-        if (document.documentMode) {\r\n-            el.href = url;\r\n-            url = el.href;\r\n-        }\r\n-\r\n-        el.href = url;\r\n-\r\n-        return {\r\n-            href: el.href,\r\n-            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\r\n-            port: el.port,\r\n-            host: el.host,\r\n-            hostname: el.hostname,\r\n-            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\r\n-            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\r\n-            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\r\n-        };\r\n-    };\r\n-\r\n-    function factory(handler, next, vm) {\r\n-        return function (options$$1) {\r\n-            return handler.call(vm, options$$1, next);\r\n-        };\r\n-    }\r\n-\r\n-    function serialize(params, obj, scope) {\r\n-\r\n-        var array = isArray(obj), plain = isPlainObject(obj), hash;\r\n-\r\n-        each(obj, function (value, key) {\r\n-\r\n-            hash = isObject(value) || isArray(value);\r\n-\r\n-            if (scope) {\r\n-                key = scope + '[' + (plain || hash ? key : '') + ']';\r\n-            }\r\n-\r\n-            if (!scope && array) {\r\n-                params.add(value.name, value.value);\r\n-            } else if (hash) {\r\n-                serialize(params, value, key);\r\n-            } else {\r\n-                params.add(key, value);\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * XDomain client (Internet Explorer).\r\n-     *\u002F\r\n-\r\n-    var xdrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xdr = new XDomainRequest(), handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load') {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                resolve(request.respondWith(xdr.responseText, {status: status}));\r\n-            };\r\n-\r\n-            request.abort = function () { return xdr.abort(); };\r\n-\r\n-            xdr.open(request.method, request.getUrl());\r\n-\r\n-            if (request.timeout) {\r\n-                xdr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            xdr.onload = handler;\r\n-            xdr.onabort = handler;\r\n-            xdr.onerror = handler;\r\n-            xdr.ontimeout = handler;\r\n-            xdr.onprogress = function () {};\r\n-            xdr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * CORS Interceptor.\r\n-     *\u002F\r\n-\r\n-    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\r\n-\r\n-    var cors = function (request, next) {\r\n-\r\n-        if (inBrowser) {\r\n-\r\n-            var orgUrl = Url.parse(location.href);\r\n-            var reqUrl = Url.parse(request.getUrl());\r\n-\r\n-            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\r\n-\r\n-                request.crossOrigin = true;\r\n-                request.emulateHTTP = false;\r\n-\r\n-                if (!SUPPORTS_CORS) {\r\n-                    request.client = xdrClient;\r\n-                }\r\n-            }\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Form data Interceptor.\r\n-     *\u002F\r\n-\r\n-    var form = function (request, next) {\r\n-\r\n-        if (isFormData(request.body)) {\r\n-\r\n-            request.headers.delete('Content-Type');\r\n-\r\n-        } else if (isObject(request.body) && request.emulateJSON) {\r\n-\r\n-            request.body = Url.params(request.body);\r\n-            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSON Interceptor.\r\n-     *\u002F\r\n-\r\n-    var json = function (request, next) {\r\n-\r\n-        var type = request.headers.get('Content-Type') || '';\r\n-\r\n-        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\r\n-            request.body = JSON.stringify(request.body);\r\n-        }\r\n-\r\n-        next(function (response) {\r\n-\r\n-            return response.bodyText ? when(response.text(), function (text) {\r\n-\r\n-                type = response.headers.get('Content-Type') || '';\r\n-\r\n-                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\r\n-\r\n-                    try {\r\n-                        response.body = JSON.parse(text);\r\n-                    } catch (e) {\r\n-                        response.body = null;\r\n-                    }\r\n-\r\n-                } else {\r\n-                    response.body = text;\r\n-                }\r\n-\r\n-                return response;\r\n-\r\n-            }) : response;\r\n-\r\n-        });\r\n-    };\r\n-\r\n-    function isJson(str) {\r\n-\r\n-        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\r\n-\r\n-        return start && end[start[0]].test(str);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * JSONP client (Browser).\r\n-     *\u002F\r\n-\r\n-    var jsonpClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\r\n-\r\n-            handler = function (ref) {\r\n-                var type = ref.type;\r\n-\r\n-\r\n-                var status = 0;\r\n-\r\n-                if (type === 'load' && body !== null) {\r\n-                    status = 200;\r\n-                } else if (type === 'error') {\r\n-                    status = 500;\r\n-                }\r\n-\r\n-                if (status && window[callback]) {\r\n-                    delete window[callback];\r\n-                    document.body.removeChild(script);\r\n-                }\r\n-\r\n-                resolve(request.respondWith(body, {status: status}));\r\n-            };\r\n-\r\n-            window[callback] = function (result) {\r\n-                body = JSON.stringify(result);\r\n-            };\r\n-\r\n-            request.abort = function () {\r\n-                handler({type: 'abort'});\r\n-            };\r\n-\r\n-            request.params[name] = callback;\r\n-\r\n-            if (request.timeout) {\r\n-                setTimeout(request.abort, request.timeout);\r\n-            }\r\n-\r\n-            script = document.createElement('script');\r\n-            script.src = request.getUrl();\r\n-            script.type = 'text\u002Fjavascript';\r\n-            script.async = true;\r\n-            script.onload = handler;\r\n-            script.onerror = handler;\r\n-\r\n-            document.body.appendChild(script);\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * JSONP Interceptor.\r\n-     *\u002F\r\n-\r\n-    var jsonp = function (request, next) {\r\n-\r\n-        if (request.method == 'JSONP') {\r\n-            request.client = jsonpClient;\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Before Interceptor.\r\n-     *\u002F\r\n-\r\n-    var before = function (request, next) {\r\n-\r\n-        if (isFunction(request.before)) {\r\n-            request.before.call(this, request);\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * HTTP method override Interceptor.\r\n-     *\u002F\r\n-\r\n-    var method = function (request, next) {\r\n-\r\n-        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\r\n-            request.headers.set('X-HTTP-Method-Override', request.method);\r\n-            request.method = 'POST';\r\n-        }\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Header Interceptor.\r\n-     *\u002F\r\n-\r\n-    var header = function (request, next) {\r\n-\r\n-        var headers = assign({}, Http.headers.common,\r\n-            !request.crossOrigin ? Http.headers.custom : {},\r\n-            Http.headers[toLower(request.method)]\r\n-        );\r\n-\r\n-        each(headers, function (value, name) {\r\n-            if (!request.headers.has(name)) {\r\n-                request.headers.set(name, value);\r\n-            }\r\n-        });\r\n-\r\n-        next();\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * XMLHttp client (Browser).\r\n-     *\u002F\r\n-\r\n-    var xhrClient = function (request) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var xhr = new XMLHttpRequest(), handler = function (event) {\r\n-\r\n-                var response = request.respondWith(\r\n-                    'response' in xhr ? xhr.response : xhr.responseText, {\r\n-                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\r\n-                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\r\n-                    }\r\n-                );\r\n-\r\n-                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\r\n-                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\r\n-                });\r\n-\r\n-                resolve(response);\r\n-            };\r\n-\r\n-            request.abort = function () { return xhr.abort(); };\r\n-\r\n-            if (request.progress) {\r\n-                if (request.method === 'GET') {\r\n-                    xhr.addEventListener('progress', request.progress);\r\n-                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\r\n-                    xhr.upload.addEventListener('progress', request.progress);\r\n-                }\r\n-            }\r\n-\r\n-            xhr.open(request.method, request.getUrl(), true);\r\n-\r\n-            if (request.timeout) {\r\n-                xhr.timeout = request.timeout;\r\n-            }\r\n-\r\n-            if (request.responseType && 'responseType' in xhr) {\r\n-                xhr.responseType = request.responseType;\r\n-            }\r\n-\r\n-            if (request.withCredentials || request.credentials) {\r\n-                xhr.withCredentials = true;\r\n-            }\r\n-\r\n-            if (!request.crossOrigin) {\r\n-                request.headers.set('X-Requested-With', 'XMLHttpRequest');\r\n-            }\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                xhr.setRequestHeader(name, value);\r\n-            });\r\n-\r\n-            xhr.onload = handler;\r\n-            xhr.onabort = handler;\r\n-            xhr.onerror = handler;\r\n-            xhr.ontimeout = handler;\r\n-            xhr.send(request.getBody());\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Http client (Node).\r\n-     *\u002F\r\n-\r\n-    var nodeClient = function (request) {\r\n-\r\n-        var client = require('got');\r\n-\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var url = request.getUrl();\r\n-            var body = request.getBody();\r\n-            var method = request.method;\r\n-            var headers = {}, handler;\r\n-\r\n-            request.headers.forEach(function (value, name) {\r\n-                headers[name] = value;\r\n-            });\r\n-\r\n-            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\r\n-\r\n-                var response = request.respondWith(resp.body, {\r\n-                        status: resp.statusCode,\r\n-                        statusText: trim(resp.statusMessage)\r\n-                    }\r\n-                );\r\n-\r\n-                each(resp.headers, function (value, name) {\r\n-                    response.headers.set(name, value);\r\n-                });\r\n-\r\n-                resolve(response);\r\n-\r\n-            }, function (error$$1) { return handler(error$$1.response); });\r\n-        });\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Base client.\r\n-     *\u002F\r\n-\r\n-    var Client = function (context) {\r\n-\r\n-        var reqHandlers = [sendRequest], resHandlers = [], handler;\r\n-\r\n-        if (!isObject(context)) {\r\n-            context = null;\r\n-        }\r\n-\r\n-        function Client(request) {\r\n-            return new PromiseObj(function (resolve, reject) {\r\n-\r\n-                function exec() {\r\n-\r\n-                    handler = reqHandlers.pop();\r\n-\r\n-                    if (isFunction(handler)) {\r\n-                        handler.call(context, request, next);\r\n-                    } else {\r\n-                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\r\n-                        next();\r\n-                    }\r\n-                }\r\n-\r\n-                function next(response) {\r\n-\r\n-                    if (isFunction(response)) {\r\n-\r\n-                        resHandlers.unshift(response);\r\n-\r\n-                    } else if (isObject(response)) {\r\n-\r\n-                        resHandlers.forEach(function (handler) {\r\n-                            response = when(response, function (response) {\r\n-                                return handler.call(context, response) || response;\r\n-                            }, reject);\r\n-                        });\r\n-\r\n-                        when(response, resolve, reject);\r\n-\r\n-                        return;\r\n-                    }\r\n-\r\n-                    exec();\r\n-                }\r\n-\r\n-                exec();\r\n-\r\n-            }, context);\r\n-        }\r\n-\r\n-        Client.use = function (handler) {\r\n-            reqHandlers.push(handler);\r\n-        };\r\n-\r\n-        return Client;\r\n-    };\r\n-\r\n-    function sendRequest(request, resolve) {\r\n-\r\n-        var client = request.client || (inBrowser ? xhrClient : nodeClient);\r\n-\r\n-        resolve(client(request));\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Headers.\r\n-     *\u002F\r\n-\r\n-    var Headers = function Headers(headers) {\r\n-        var this$1 = this;\r\n-\r\n-\r\n-        this.map = {};\r\n-\r\n-        each(headers, function (value, name) { return this$1.append(name, value); });\r\n-    };\r\n-\r\n-    Headers.prototype.has = function has (name) {\r\n-        return getName(this.map, name) !== null;\r\n-    };\r\n-\r\n-    Headers.prototype.get = function get (name) {\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        return list ? list.join() : null;\r\n-    };\r\n-\r\n-    Headers.prototype.getAll = function getAll (name) {\r\n-        return this.map[getName(this.map, name)] || [];\r\n-    };\r\n-\r\n-    Headers.prototype.set = function set (name, value) {\r\n-        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\r\n-    };\r\n-\r\n-    Headers.prototype.append = function append (name, value){\r\n-\r\n-        var list = this.map[getName(this.map, name)];\r\n-\r\n-        if (list) {\r\n-            list.push(trim(value));\r\n-        } else {\r\n-            this.set(name, value);\r\n-        }\r\n-    };\r\n-\r\n-    Headers.prototype.delete = function delete$1 (name){\r\n-        delete this.map[getName(this.map, name)];\r\n-    };\r\n-\r\n-    Headers.prototype.deleteAll = function deleteAll (){\r\n-        this.map = {};\r\n-    };\r\n-\r\n-    Headers.prototype.forEach = function forEach (callback, thisArg) {\r\n-        var this$1 = this;\r\n-\r\n-        each(this.map, function (list, name) {\r\n-            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\r\n-        });\r\n-    };\r\n-\r\n-    function getName(map, name) {\r\n-        return Object.keys(map).reduce(function (prev, curr) {\r\n-            return toLower(name) === toLower(curr) ? curr : prev;\r\n-        }, null);\r\n-    }\r\n-\r\n-    function normalizeName(name) {\r\n-\r\n-        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\r\n-            throw new TypeError('Invalid character in header field name');\r\n-        }\r\n-\r\n-        return trim(name);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Response.\r\n-     *\u002F\r\n-\r\n-    var Response = function Response(body, ref) {\r\n-        var url = ref.url;\r\n-        var headers = ref.headers;\r\n-        var status = ref.status;\r\n-        var statusText = ref.statusText;\r\n-\r\n-\r\n-        this.url = url;\r\n-        this.ok = status >= 200 && status \u003C 300;\r\n-        this.status = status || 0;\r\n-        this.statusText = statusText || '';\r\n-        this.headers = new Headers(headers);\r\n-        this.body = body;\r\n-\r\n-        if (isString(body)) {\r\n-\r\n-            this.bodyText = body;\r\n-\r\n-        } else if (isBlob(body)) {\r\n-\r\n-            this.bodyBlob = body;\r\n-\r\n-            if (isBlobText(body)) {\r\n-                this.bodyText = blobText(body);\r\n-            }\r\n-        }\r\n-    };\r\n-\r\n-    Response.prototype.blob = function blob () {\r\n-        return when(this.bodyBlob);\r\n-    };\r\n-\r\n-    Response.prototype.text = function text () {\r\n-        return when(this.bodyText);\r\n-    };\r\n-\r\n-    Response.prototype.json = function json () {\r\n-        return when(this.text(), function (text) { return JSON.parse(text); });\r\n-    };\r\n-\r\n-    Object.defineProperty(Response.prototype, 'data', {\r\n-\r\n-        get: function get() {\r\n-            return this.body;\r\n-        },\r\n-\r\n-        set: function set(body) {\r\n-            this.body = body;\r\n-        }\r\n-\r\n-    });\r\n-\r\n-    function blobText(body) {\r\n-        return new PromiseObj(function (resolve) {\r\n-\r\n-            var reader = new FileReader();\r\n-\r\n-            reader.readAsText(body);\r\n-            reader.onload = function () {\r\n-                resolve(reader.result);\r\n-            };\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    function isBlobText(body) {\r\n-        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * HTTP Request.\r\n-     *\u002F\r\n-\r\n-    var Request = function Request(options$$1) {\r\n-\r\n-        this.body = null;\r\n-        this.params = {};\r\n-\r\n-        assign(this, options$$1, {\r\n-            method: toUpper(options$$1.method || 'GET')\r\n-        });\r\n-\r\n-        if (!(this.headers instanceof Headers)) {\r\n-            this.headers = new Headers(this.headers);\r\n-        }\r\n-    };\r\n-\r\n-    Request.prototype.getUrl = function getUrl (){\r\n-        return Url(this);\r\n-    };\r\n-\r\n-    Request.prototype.getBody = function getBody (){\r\n-        return this.body;\r\n-    };\r\n-\r\n-    Request.prototype.respondWith = function respondWith (body, options$$1) {\r\n-        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Service for sending network requests.\r\n-     *\u002F\r\n-\r\n-    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\r\n-    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\r\n-\r\n-    function Http(options$$1) {\r\n-\r\n-        var self = this || {}, client = Client(self.$vm);\r\n-\r\n-        defaults(options$$1 || {}, self.$options, Http.options);\r\n-\r\n-        Http.interceptors.forEach(function (handler) {\r\n-\r\n-            if (isString(handler)) {\r\n-                handler = Http.interceptor[handler];\r\n-            }\r\n-\r\n-            if (isFunction(handler)) {\r\n-                client.use(handler);\r\n-            }\r\n-\r\n-        });\r\n-\r\n-        return client(new Request(options$$1)).then(function (response) {\r\n-\r\n-            return response.ok ? response : PromiseObj.reject(response);\r\n-\r\n-        }, function (response) {\r\n-\r\n-            if (response instanceof Error) {\r\n-                error(response);\r\n-            }\r\n-\r\n-            return PromiseObj.reject(response);\r\n-        });\r\n-    }\r\n-\r\n-    Http.options = {};\r\n-\r\n-    Http.headers = {\r\n-        put: JSON_CONTENT_TYPE,\r\n-        post: JSON_CONTENT_TYPE,\r\n-        patch: JSON_CONTENT_TYPE,\r\n-        delete: JSON_CONTENT_TYPE,\r\n-        common: COMMON_HEADERS,\r\n-        custom: {}\r\n-    };\r\n-\r\n-    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\r\n-    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\r\n-\r\n-    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    ['post', 'put', 'patch'].forEach(function (method$$1) {\r\n-\r\n-        Http[method$$1] = function (url, body, options$$1) {\r\n-            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\r\n-        };\r\n-\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Service for interacting with RESTful services.\r\n-     *\u002F\r\n-\r\n-    function Resource(url, params, actions, options$$1) {\r\n-\r\n-        var self = this || {}, resource = {};\r\n-\r\n-        actions = assign({},\r\n-            Resource.actions,\r\n-            actions\r\n-        );\r\n-\r\n-        each(actions, function (action, name) {\r\n-\r\n-            action = merge({url: url, params: assign({}, params)}, options$$1, action);\r\n-\r\n-            resource[name] = function () {\r\n-                return (self.$http || Http)(opts(action, arguments));\r\n-            };\r\n-        });\r\n-\r\n-        return resource;\r\n-    }\r\n-\r\n-    function opts(action, args) {\r\n-\r\n-        var options$$1 = assign({}, action), params = {}, body;\r\n-\r\n-        switch (args.length) {\r\n-\r\n-            case 2:\r\n-\r\n-                params = args[0];\r\n-                body = args[1];\r\n-\r\n-                break;\r\n-\r\n-            case 1:\r\n-\r\n-                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\r\n-                    body = args[0];\r\n-                } else {\r\n-                    params = args[0];\r\n-                }\r\n-\r\n-                break;\r\n-\r\n-            case 0:\r\n-\r\n-                break;\r\n-\r\n-            default:\r\n-\r\n-                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\r\n-        }\r\n-\r\n-        options$$1.body = body;\r\n-        options$$1.params = assign({}, options$$1.params, params);\r\n-\r\n-        return options$$1;\r\n-    }\r\n-\r\n-    Resource.actions = {\r\n-\r\n-        get: {method: 'GET'},\r\n-        save: {method: 'POST'},\r\n-        query: {method: 'GET'},\r\n-        update: {method: 'PUT'},\r\n-        remove: {method: 'DELETE'},\r\n-        delete: {method: 'DELETE'}\r\n-\r\n-    };\r\n-\r\n-    \u002F**\r\n-     * Install plugin.\r\n-     *\u002F\r\n-\r\n-    function plugin(Vue) {\r\n-\r\n-        if (plugin.installed) {\r\n-            return;\r\n-        }\r\n-\r\n-        Util(Vue);\r\n-\r\n-        Vue.url = Url;\r\n-        Vue.http = Http;\r\n-        Vue.resource = Resource;\r\n-        Vue.Promise = PromiseObj;\r\n-\r\n-        Object.defineProperties(Vue.prototype, {\r\n-\r\n-            $url: {\r\n-                get: function get() {\r\n-                    return options(Vue.url, this, this.$options.url);\r\n-                }\r\n-            },\r\n-\r\n-            $http: {\r\n-                get: function get() {\r\n-                    return options(Vue.http, this, this.$options.http);\r\n-                }\r\n-            },\r\n-\r\n-            $resource: {\r\n-                get: function get() {\r\n-                    return Vue.resource.bind(this);\r\n-                }\r\n-            },\r\n-\r\n-            $promise: {\r\n-                get: function get() {\r\n-                    var this$1 = this;\r\n-\r\n-                    return function (executor) { return new Vue.Promise(executor, this$1); };\r\n-                }\r\n-            }\r\n-\r\n-        });\r\n-    }\r\n-\r\n-    if (typeof window !== 'undefined' && window.Vue) {\r\n-        window.Vue.use(plugin);\r\n-    }\r\n-\r\n-    return plugin;\r\n-\r\n-})));\r\n+\u002F*!\n+ * vue-resource v1.3.4\n+ * https:\u002F\u002Fgithub.com\u002Fpagekit\u002Fvue-resource\n+ * Released under the MIT License.\n+ *\u002F\n+\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global.VueResource = factory());\n+}(this, (function () { 'use strict';\n+\n+    \u002F**\n+     * Promises\u002FA+ polyfill v1.1.4 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Fpromis)\n+     *\u002F\n+\n+    var RESOLVED = 0;\n+    var REJECTED = 1;\n+    var PENDING  = 2;\n+\n+    function Promise$1(executor) {\n+\n+        this.state = PENDING;\n+        this.value = undefined;\n+        this.deferred = [];\n+\n+        var promise = this;\n+\n+        try {\n+            executor(function (x) {\n+                promise.resolve(x);\n+            }, function (r) {\n+                promise.reject(r);\n+            });\n+        } catch (e) {\n+            promise.reject(e);\n+        }\n+    }\n+\n+    Promise$1.reject = function (r) {\n+        return new Promise$1(function (resolve, reject) {\n+            reject(r);\n+        });\n+    };\n+\n+    Promise$1.resolve = function (x) {\n+        return new Promise$1(function (resolve, reject) {\n+            resolve(x);\n+        });\n+    };\n+\n+    Promise$1.all = function all(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            var count = 0, result = [];\n+\n+            if (iterable.length === 0) {\n+                resolve(result);\n+            }\n+\n+            function resolver(i) {\n+                return function (x) {\n+                    result[i] = x;\n+                    count += 1;\n+\n+                    if (count === iterable.length) {\n+                        resolve(result);\n+                    }\n+                };\n+            }\n+\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolver(i), reject);\n+            }\n+        });\n+    };\n+\n+    Promise$1.race = function race(iterable) {\n+        return new Promise$1(function (resolve, reject) {\n+            for (var i = 0; i \u003C iterable.length; i += 1) {\n+                Promise$1.resolve(iterable[i]).then(resolve, reject);\n+            }\n+        });\n+    };\n+\n+    var p$1 = Promise$1.prototype;\n+\n+    p$1.resolve = function resolve(x) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (x === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            var called = false;\n+\n+            try {\n+                var then = x && x['then'];\n+\n+                if (x !== null && typeof x === 'object' && typeof then === 'function') {\n+                    then.call(x, function (x) {\n+                        if (!called) {\n+                            promise.resolve(x);\n+                        }\n+                        called = true;\n+\n+                    }, function (r) {\n+                        if (!called) {\n+                            promise.reject(r);\n+                        }\n+                        called = true;\n+                    });\n+                    return;\n+                }\n+            } catch (e) {\n+                if (!called) {\n+                    promise.reject(e);\n+                }\n+                return;\n+            }\n+\n+            promise.state = RESOLVED;\n+            promise.value = x;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.reject = function reject(reason) {\n+        var promise = this;\n+\n+        if (promise.state === PENDING) {\n+            if (reason === promise) {\n+                throw new TypeError('Promise settled with itself.');\n+            }\n+\n+            promise.state = REJECTED;\n+            promise.value = reason;\n+            promise.notify();\n+        }\n+    };\n+\n+    p$1.notify = function notify() {\n+        var promise = this;\n+\n+        nextTick(function () {\n+            if (promise.state !== PENDING) {\n+                while (promise.deferred.length) {\n+                    var deferred = promise.deferred.shift(),\n+                        onResolved = deferred[0],\n+                        onRejected = deferred[1],\n+                        resolve = deferred[2],\n+                        reject = deferred[3];\n+\n+                    try {\n+                        if (promise.state === RESOLVED) {\n+                            if (typeof onResolved === 'function') {\n+                                resolve(onResolved.call(undefined, promise.value));\n+                            } else {\n+                                resolve(promise.value);\n+                            }\n+                        } else if (promise.state === REJECTED) {\n+                            if (typeof onRejected === 'function') {\n+                                resolve(onRejected.call(undefined, promise.value));\n+                            } else {\n+                                reject(promise.value);\n+                            }\n+                        }\n+                    } catch (e) {\n+                        reject(e);\n+                    }\n+                }\n+            }\n+        });\n+    };\n+\n+    p$1.then = function then(onResolved, onRejected) {\n+        var promise = this;\n+\n+        return new Promise$1(function (resolve, reject) {\n+            promise.deferred.push([onResolved, onRejected, resolve, reject]);\n+            promise.notify();\n+        });\n+    };\n+\n+    p$1.catch = function (onRejected) {\n+        return this.then(undefined, onRejected);\n+    };\n+\n+    \u002F**\n+     * Promise adapter.\n+     *\u002F\n+\n+    if (typeof Promise === 'undefined') {\n+        window.Promise = Promise$1;\n+    }\n+\n+    function PromiseObj(executor, context) {\n+\n+        if (executor instanceof Promise) {\n+            this.promise = executor;\n+        } else {\n+            this.promise = new Promise(executor.bind(context));\n+        }\n+\n+        this.context = context;\n+    }\n+\n+    PromiseObj.all = function (iterable, context) {\n+        return new PromiseObj(Promise.all(iterable), context);\n+    };\n+\n+    PromiseObj.resolve = function (value, context) {\n+        return new PromiseObj(Promise.resolve(value), context);\n+    };\n+\n+    PromiseObj.reject = function (reason, context) {\n+        return new PromiseObj(Promise.reject(reason), context);\n+    };\n+\n+    PromiseObj.race = function (iterable, context) {\n+        return new PromiseObj(Promise.race(iterable), context);\n+    };\n+\n+    var p = PromiseObj.prototype;\n+\n+    p.bind = function (context) {\n+        this.context = context;\n+        return this;\n+    };\n+\n+    p.then = function (fulfilled, rejected) {\n+\n+        if (fulfilled && fulfilled.bind && this.context) {\n+            fulfilled = fulfilled.bind(this.context);\n+        }\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);\n+    };\n+\n+    p.catch = function (rejected) {\n+\n+        if (rejected && rejected.bind && this.context) {\n+            rejected = rejected.bind(this.context);\n+        }\n+\n+        return new PromiseObj(this.promise.catch(rejected), this.context);\n+    };\n+\n+    p.finally = function (callback) {\n+\n+        return this.then(function (value) {\n+                callback.call(this);\n+                return value;\n+            }, function (reason) {\n+                callback.call(this);\n+                return Promise.reject(reason);\n+            }\n+        );\n+    };\n+\n+    \u002F**\n+     * Utility functions.\n+     *\u002F\n+\n+    var ref = {};\n+    var hasOwnProperty = ref.hasOwnProperty;\n+\n+    var ref$1 = [];\n+    var slice = ref$1.slice;\n+    var debug = false;\n+    var ntick;\n+\n+    var inBrowser = typeof window !== 'undefined';\n+\n+    var Util = function (ref) {\n+        var config = ref.config;\n+        var nextTick = ref.nextTick;\n+\n+        ntick = nextTick;\n+        debug = config.debug || !config.silent;\n+    };\n+\n+    function warn(msg) {\n+        if (typeof console !== 'undefined' && debug) {\n+            console.warn('[VueResource warn]: ' + msg);\n+        }\n+    }\n+\n+    function error(msg) {\n+        if (typeof console !== 'undefined') {\n+            console.error(msg);\n+        }\n+    }\n+\n+    function nextTick(cb, ctx) {\n+        return ntick(cb, ctx);\n+    }\n+\n+    function trim(str) {\n+        return str ? str.replace(\u002F^\\s*|\\s*$\u002Fg, '') : '';\n+    }\n+\n+    function trimEnd(str, chars) {\n+\n+        if (str && chars === undefined) {\n+            return str.replace(\u002F\\s+$\u002F, '');\n+        }\n+\n+        if (!str || !chars) {\n+            return str;\n+        }\n+\n+        return str.replace(new RegExp((\"[\" + chars + \"]+$\")), '');\n+    }\n+\n+    function toLower(str) {\n+        return str ? str.toLowerCase() : '';\n+    }\n+\n+    function toUpper(str) {\n+        return str ? str.toUpperCase() : '';\n+    }\n+\n+    var isArray = Array.isArray;\n+\n+    function isString(val) {\n+        return typeof val === 'string';\n+    }\n+\n+\n+\n+    function isFunction(val) {\n+        return typeof val === 'function';\n+    }\n+\n+    function isObject(obj) {\n+        return obj !== null && typeof obj === 'object';\n+    }\n+\n+    function isPlainObject(obj) {\n+        return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n+    }\n+\n+    function isBlob(obj) {\n+        return typeof Blob !== 'undefined' && obj instanceof Blob;\n+    }\n+\n+    function isFormData(obj) {\n+        return typeof FormData !== 'undefined' && obj instanceof FormData;\n+    }\n+\n+    function when(value, fulfilled, rejected) {\n+\n+        var promise = PromiseObj.resolve(value);\n+\n+        if (arguments.length \u003C 2) {\n+            return promise;\n+        }\n+\n+        return promise.then(fulfilled, rejected);\n+    }\n+\n+    function options(fn, obj, opts) {\n+\n+        opts = opts || {};\n+\n+        if (isFunction(opts)) {\n+            opts = opts.call(obj);\n+        }\n+\n+        return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});\n+    }\n+\n+    function each(obj, iterator) {\n+\n+        var i, key;\n+\n+        if (isArray(obj)) {\n+            for (i = 0; i \u003C obj.length; i++) {\n+                iterator.call(obj[i], obj[i], i);\n+            }\n+        } else if (isObject(obj)) {\n+            for (key in obj) {\n+                if (hasOwnProperty.call(obj, key)) {\n+                    iterator.call(obj[key], obj[key], key);\n+                }\n+            }\n+        }\n+\n+        return obj;\n+    }\n+\n+    var assign = Object.assign || _assign;\n+\n+    function merge(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source, true);\n+        });\n+\n+        return target;\n+    }\n+\n+    function defaults(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+\n+            for (var key in source) {\n+                if (target[key] === undefined) {\n+                    target[key] = source[key];\n+                }\n+            }\n+\n+        });\n+\n+        return target;\n+    }\n+\n+    function _assign(target) {\n+\n+        var args = slice.call(arguments, 1);\n+\n+        args.forEach(function (source) {\n+            _merge(target, source);\n+        });\n+\n+        return target;\n+    }\n+\n+    function _merge(target, source, deep) {\n+        for (var key in source) {\n+            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n+                if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n+                    target[key] = {};\n+                }\n+                if (isArray(source[key]) && !isArray(target[key])) {\n+                    target[key] = [];\n+                }\n+                _merge(target[key], source[key], deep);\n+            } else if (source[key] !== undefined) {\n+                target[key] = source[key];\n+            }\n+        }\n+    }\n+\n+    \u002F**\n+     * Root Prefix Transform.\n+     *\u002F\n+\n+    var root = function (options$$1, next) {\n+\n+        var url = next(options$$1);\n+\n+        if (isString(options$$1.root) && !\u002F^(https?:)?\\\u002F\u002F.test(url)) {\n+            url = trimEnd(options$$1.root, '\u002F') + '\u002F' + url;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Query Parameter Transform.\n+     *\u002F\n+\n+    var query = function (options$$1, next) {\n+\n+        var urlParams = Object.keys(Url.options.params), query = {}, url = next(options$$1);\n+\n+        each(options$$1.params, function (value, key) {\n+            if (urlParams.indexOf(key) === -1) {\n+                query[key] = value;\n+            }\n+        });\n+\n+        query = Url.params(query);\n+\n+        if (query) {\n+            url += (url.indexOf('?') == -1 ? '?' : '&') + query;\n+        }\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * URL Template v2.0.6 (https:\u002F\u002Fgithub.com\u002Fbramstein\u002Furl-template)\n+     *\u002F\n+\n+    function expand(url, params, variables) {\n+\n+        var tmpl = parse(url), expanded = tmpl.expand(params);\n+\n+        if (variables) {\n+            variables.push.apply(variables, tmpl.vars);\n+        }\n+\n+        return expanded;\n+    }\n+\n+    function parse(template) {\n+\n+        var operators = ['+', '#', '.', '\u002F', ';', '?', '&'], variables = [];\n+\n+        return {\n+            vars: variables,\n+            expand: function expand(context) {\n+                return template.replace(\u002F\\{([^\\{\\}]+)\\}|([^\\{\\}]+)\u002Fg, function (_, expression, literal) {\n+                    if (expression) {\n+\n+                        var operator = null, values = [];\n+\n+                        if (operators.indexOf(expression.charAt(0)) !== -1) {\n+                            operator = expression.charAt(0);\n+                            expression = expression.substr(1);\n+                        }\n+\n+                        expression.split(\u002F,\u002Fg).forEach(function (variable) {\n+                            var tmp = \u002F([^:\\*]*)(?::(\\d+)|(\\*))?\u002F.exec(variable);\n+                            values.push.apply(values, getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n+                            variables.push(tmp[1]);\n+                        });\n+\n+                        if (operator && operator !== '+') {\n+\n+                            var separator = ',';\n+\n+                            if (operator === '?') {\n+                                separator = '&';\n+                            } else if (operator !== '#') {\n+                                separator = operator;\n+                            }\n+\n+                            return (values.length !== 0 ? operator : '') + values.join(separator);\n+                        } else {\n+                            return values.join(',');\n+                        }\n+\n+                    } else {\n+                        return encodeReserved(literal);\n+                    }\n+                });\n+            }\n+        };\n+    }\n+\n+    function getValues(context, operator, key, modifier) {\n+\n+        var value = context[key], result = [];\n+\n+        if (isDefined(value) && value !== '') {\n+            if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n+                value = value.toString();\n+\n+                if (modifier && modifier !== '*') {\n+                    value = value.substring(0, parseInt(modifier, 10));\n+                }\n+\n+                result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+            } else {\n+                if (modifier === '*') {\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : null));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                result.push(encodeValue(operator, value[k], k));\n+                            }\n+                        });\n+                    }\n+                } else {\n+                    var tmp = [];\n+\n+                    if (Array.isArray(value)) {\n+                        value.filter(isDefined).forEach(function (value) {\n+                            tmp.push(encodeValue(operator, value));\n+                        });\n+                    } else {\n+                        Object.keys(value).forEach(function (k) {\n+                            if (isDefined(value[k])) {\n+                                tmp.push(encodeURIComponent(k));\n+                                tmp.push(encodeValue(operator, value[k].toString()));\n+                            }\n+                        });\n+                    }\n+\n+                    if (isKeyOperator(operator)) {\n+                        result.push(encodeURIComponent(key) + '=' + tmp.join(','));\n+                    } else if (tmp.length !== 0) {\n+                        result.push(tmp.join(','));\n+                    }\n+                }\n+            }\n+        } else {\n+            if (operator === ';') {\n+                result.push(encodeURIComponent(key));\n+            } else if (value === '' && (operator === '&' || operator === '?')) {\n+                result.push(encodeURIComponent(key) + '=');\n+            } else if (value === '') {\n+                result.push('');\n+            }\n+        }\n+\n+        return result;\n+    }\n+\n+    function isDefined(value) {\n+        return value !== undefined && value !== null;\n+    }\n+\n+    function isKeyOperator(operator) {\n+        return operator === ';' || operator === '&' || operator === '?';\n+    }\n+\n+    function encodeValue(operator, value, key) {\n+\n+        value = (operator === '+' || operator === '#') ? encodeReserved(value) : encodeURIComponent(value);\n+\n+        if (key) {\n+            return encodeURIComponent(key) + '=' + value;\n+        } else {\n+            return value;\n+        }\n+    }\n+\n+    function encodeReserved(str) {\n+        return str.split(\u002F(%[0-9A-Fa-f]{2})\u002Fg).map(function (part) {\n+            if (!\u002F%[0-9A-Fa-f]\u002F.test(part)) {\n+                part = encodeURI(part);\n+            }\n+            return part;\n+        }).join('');\n+    }\n+\n+    \u002F**\n+     * URL Template (RFC 6570) Transform.\n+     *\u002F\n+\n+    var template = function (options) {\n+\n+        var variables = [], url = expand(options.url, options.params, variables);\n+\n+        variables.forEach(function (key) {\n+            delete options.params[key];\n+        });\n+\n+        return url;\n+    };\n+\n+    \u002F**\n+     * Service for URL templating.\n+     *\u002F\n+\n+    function Url(url, params) {\n+\n+        var self = this || {}, options$$1 = url, transform;\n+\n+        if (isString(url)) {\n+            options$$1 = {url: url, params: params};\n+        }\n+\n+        options$$1 = merge({}, Url.options, self.$options, options$$1);\n+\n+        Url.transforms.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Url.transform[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                transform = factory(handler, transform, self.$vm);\n+            }\n+\n+        });\n+\n+        return transform(options$$1);\n+    }\n+\n+    \u002F**\n+     * Url options.\n+     *\u002F\n+\n+    Url.options = {\n+        url: '',\n+        root: null,\n+        params: {}\n+    };\n+\n+    \u002F**\n+     * Url transforms.\n+     *\u002F\n+\n+    Url.transform = {template: template, query: query, root: root};\n+    Url.transforms = ['template', 'query', 'root'];\n+\n+    \u002F**\n+     * Encodes a Url parameter string.\n+     *\n+     * @param {Object} obj\n+     *\u002F\n+\n+    Url.params = function (obj) {\n+\n+        var params = [], escape = encodeURIComponent;\n+\n+        params.add = function (key, value) {\n+\n+            if (isFunction(value)) {\n+                value = value();\n+            }\n+\n+            if (value === null) {\n+                value = '';\n+            }\n+\n+            this.push(escape(key) + '=' + escape(value));\n+        };\n+\n+        serialize(params, obj);\n+\n+        return params.join('&').replace(\u002F%20\u002Fg, '+');\n+    };\n+\n+    \u002F**\n+     * Parse a URL and return its components.\n+     *\n+     * @param {String} url\n+     *\u002F\n+\n+    Url.parse = function (url) {\n+\n+        var el = document.createElement('a');\n+\n+        if (document.documentMode) {\n+            el.href = url;\n+            url = el.href;\n+        }\n+\n+        el.href = url;\n+\n+        return {\n+            href: el.href,\n+            protocol: el.protocol ? el.protocol.replace(\u002F:$\u002F, '') : '',\n+            port: el.port,\n+            host: el.host,\n+            hostname: el.hostname,\n+            pathname: el.pathname.charAt(0) === '\u002F' ? el.pathname : '\u002F' + el.pathname,\n+            search: el.search ? el.search.replace(\u002F^\\?\u002F, '') : '',\n+            hash: el.hash ? el.hash.replace(\u002F^#\u002F, '') : ''\n+        };\n+    };\n+\n+    function factory(handler, next, vm) {\n+        return function (options$$1) {\n+            return handler.call(vm, options$$1, next);\n+        };\n+    }\n+\n+    function serialize(params, obj, scope) {\n+\n+        var array = isArray(obj), plain = isPlainObject(obj), hash;\n+\n+        each(obj, function (value, key) {\n+\n+            hash = isObject(value) || isArray(value);\n+\n+            if (scope) {\n+                key = scope + '[' + (plain || hash ? key : '') + ']';\n+            }\n+\n+            if (!scope && array) {\n+                params.add(value.name, value.value);\n+            } else if (hash) {\n+                serialize(params, value, key);\n+            } else {\n+                params.add(key, value);\n+            }\n+        });\n+    }\n+\n+    \u002F**\n+     * XDomain client (Internet Explorer).\n+     *\u002F\n+\n+    var xdrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xdr = new XDomainRequest(), handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load') {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                resolve(request.respondWith(xdr.responseText, {status: status}));\n+            };\n+\n+            request.abort = function () { return xdr.abort(); };\n+\n+            xdr.open(request.method, request.getUrl());\n+\n+            if (request.timeout) {\n+                xdr.timeout = request.timeout;\n+            }\n+\n+            xdr.onload = handler;\n+            xdr.onabort = handler;\n+            xdr.onerror = handler;\n+            xdr.ontimeout = handler;\n+            xdr.onprogress = function () {};\n+            xdr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * CORS Interceptor.\n+     *\u002F\n+\n+    var SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();\n+\n+    var cors = function (request, next) {\n+\n+        if (inBrowser) {\n+\n+            var orgUrl = Url.parse(location.href);\n+            var reqUrl = Url.parse(request.getUrl());\n+\n+            if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {\n+\n+                request.crossOrigin = true;\n+                request.emulateHTTP = false;\n+\n+                if (!SUPPORTS_CORS) {\n+                    request.client = xdrClient;\n+                }\n+            }\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Form data Interceptor.\n+     *\u002F\n+\n+    var form = function (request, next) {\n+\n+        if (isFormData(request.body)) {\n+\n+            request.headers.delete('Content-Type');\n+\n+        } else if (isObject(request.body) && request.emulateJSON) {\n+\n+            request.body = Url.params(request.body);\n+            request.headers.set('Content-Type', 'application\u002Fx-www-form-urlencoded');\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * JSON Interceptor.\n+     *\u002F\n+\n+    var json = function (request, next) {\n+\n+        var type = request.headers.get('Content-Type') || '';\n+\n+        if (isObject(request.body) && type.indexOf('application\u002Fjson') === 0) {\n+            request.body = JSON.stringify(request.body);\n+        }\n+\n+        next(function (response) {\n+\n+            return response.bodyText ? when(response.text(), function (text) {\n+\n+                type = response.headers.get('Content-Type') || '';\n+\n+                if (type.indexOf('application\u002Fjson') === 0 || isJson(text)) {\n+\n+                    try {\n+                        response.body = JSON.parse(text);\n+                    } catch (e) {\n+                        response.body = null;\n+                    }\n+\n+                } else {\n+                    response.body = text;\n+                }\n+\n+                return response;\n+\n+            }) : response;\n+\n+        });\n+    };\n+\n+    function isJson(str) {\n+\n+        var start = str.match(\u002F^\\[|^\\{(?!\\{)\u002F), end = {'[': \u002F]$\u002F, '{': \u002F}$\u002F};\n+\n+        return start && end[start[0]].test(str);\n+    }\n+\n+    \u002F**\n+     * JSONP client (Browser).\n+     *\u002F\n+\n+    var jsonpClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;\n+\n+            handler = function (ref) {\n+                var type = ref.type;\n+\n+\n+                var status = 0;\n+\n+                if (type === 'load' && body !== null) {\n+                    status = 200;\n+                } else if (type === 'error') {\n+                    status = 500;\n+                }\n+\n+                if (status && window[callback]) {\n+                    delete window[callback];\n+                    document.body.removeChild(script);\n+                }\n+\n+                resolve(request.respondWith(body, {status: status}));\n+            };\n+\n+            window[callback] = function (result) {\n+                body = JSON.stringify(result);\n+            };\n+\n+            request.abort = function () {\n+                handler({type: 'abort'});\n+            };\n+\n+            request.params[name] = callback;\n+\n+            if (request.timeout) {\n+                setTimeout(request.abort, request.timeout);\n+            }\n+\n+            script = document.createElement('script');\n+            script.src = request.getUrl();\n+            script.type = 'text\u002Fjavascript';\n+            script.async = true;\n+            script.onload = handler;\n+            script.onerror = handler;\n+\n+            document.body.appendChild(script);\n+        });\n+    };\n+\n+    \u002F**\n+     * JSONP Interceptor.\n+     *\u002F\n+\n+    var jsonp = function (request, next) {\n+\n+        if (request.method == 'JSONP') {\n+            request.client = jsonpClient;\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Before Interceptor.\n+     *\u002F\n+\n+    var before = function (request, next) {\n+\n+        if (isFunction(request.before)) {\n+            request.before.call(this, request);\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * HTTP method override Interceptor.\n+     *\u002F\n+\n+    var method = function (request, next) {\n+\n+        if (request.emulateHTTP && \u002F^(PUT|PATCH|DELETE)$\u002Fi.test(request.method)) {\n+            request.headers.set('X-HTTP-Method-Override', request.method);\n+            request.method = 'POST';\n+        }\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * Header Interceptor.\n+     *\u002F\n+\n+    var header = function (request, next) {\n+\n+        var headers = assign({}, Http.headers.common,\n+            !request.crossOrigin ? Http.headers.custom : {},\n+            Http.headers[toLower(request.method)]\n+        );\n+\n+        each(headers, function (value, name) {\n+            if (!request.headers.has(name)) {\n+                request.headers.set(name, value);\n+            }\n+        });\n+\n+        next();\n+    };\n+\n+    \u002F**\n+     * XMLHttp client (Browser).\n+     *\u002F\n+\n+    var xhrClient = function (request) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var xhr = new XMLHttpRequest(), handler = function (event) {\n+\n+                var response = request.respondWith(\n+                    'response' in xhr ? xhr.response : xhr.responseText, {\n+                        status: xhr.status === 1223 ? 204 : xhr.status, \u002F\u002F IE9 status bug\n+                        statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)\n+                    }\n+                );\n+\n+                each(trim(xhr.getAllResponseHeaders()).split('\\n'), function (row) {\n+                    response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));\n+                });\n+\n+                resolve(response);\n+            };\n+\n+            request.abort = function () { return xhr.abort(); };\n+\n+            if (request.progress) {\n+                if (request.method === 'GET') {\n+                    xhr.addEventListener('progress', request.progress);\n+                } else if (\u002F^(POST|PUT)$\u002Fi.test(request.method)) {\n+                    xhr.upload.addEventListener('progress', request.progress);\n+                }\n+            }\n+\n+            xhr.open(request.method, request.getUrl(), true);\n+\n+            if (request.timeout) {\n+                xhr.timeout = request.timeout;\n+            }\n+\n+            if (request.responseType && 'responseType' in xhr) {\n+                xhr.responseType = request.responseType;\n+            }\n+\n+            if (request.withCredentials || request.credentials) {\n+                xhr.withCredentials = true;\n+            }\n+\n+            if (!request.crossOrigin) {\n+                request.headers.set('X-Requested-With', 'XMLHttpRequest');\n+            }\n+\n+            request.headers.forEach(function (value, name) {\n+                xhr.setRequestHeader(name, value);\n+            });\n+\n+            xhr.onload = handler;\n+            xhr.onabort = handler;\n+            xhr.onerror = handler;\n+            xhr.ontimeout = handler;\n+            xhr.send(request.getBody());\n+        });\n+    };\n+\n+    \u002F**\n+     * Http client (Node).\n+     *\u002F\n+\n+    var nodeClient = function (request) {\n+\n+        var client = require('got');\n+\n+        return new PromiseObj(function (resolve) {\n+\n+            var url = request.getUrl();\n+            var body = request.getBody();\n+            var method = request.method;\n+            var headers = {}, handler;\n+\n+            request.headers.forEach(function (value, name) {\n+                headers[name] = value;\n+            });\n+\n+            client(url, {body: body, method: method, headers: headers}).then(handler = function (resp) {\n+\n+                var response = request.respondWith(resp.body, {\n+                        status: resp.statusCode,\n+                        statusText: trim(resp.statusMessage)\n+                    }\n+                );\n+\n+                each(resp.headers, function (value, name) {\n+                    response.headers.set(name, value);\n+                });\n+\n+                resolve(response);\n+\n+            }, function (error$$1) { return handler(error$$1.response); });\n+        });\n+    };\n+\n+    \u002F**\n+     * Base client.\n+     *\u002F\n+\n+    var Client = function (context) {\n+\n+        var reqHandlers = [sendRequest], resHandlers = [], handler;\n+\n+        if (!isObject(context)) {\n+            context = null;\n+        }\n+\n+        function Client(request) {\n+            return new PromiseObj(function (resolve, reject) {\n+\n+                function exec() {\n+\n+                    handler = reqHandlers.pop();\n+\n+                    if (isFunction(handler)) {\n+                        handler.call(context, request, next);\n+                    } else {\n+                        warn((\"Invalid interceptor of type \" + (typeof handler) + \", must be a function\"));\n+                        next();\n+                    }\n+                }\n+\n+                function next(response) {\n+\n+                    if (isFunction(response)) {\n+\n+                        resHandlers.unshift(response);\n+\n+                    } else if (isObject(response)) {\n+\n+                        resHandlers.forEach(function (handler) {\n+                            response = when(response, function (response) {\n+                                return handler.call(context, response) || response;\n+                            }, reject);\n+                        });\n+\n+                        when(response, resolve, reject);\n+\n+                        return;\n+                    }\n+\n+                    exec();\n+                }\n+\n+                exec();\n+\n+            }, context);\n+        }\n+\n+        Client.use = function (handler) {\n+            reqHandlers.push(handler);\n+        };\n+\n+        return Client;\n+    };\n+\n+    function sendRequest(request, resolve) {\n+\n+        var client = request.client || (inBrowser ? xhrClient : nodeClient);\n+\n+        resolve(client(request));\n+    }\n+\n+    \u002F**\n+     * HTTP Headers.\n+     *\u002F\n+\n+    var Headers = function Headers(headers) {\n+        var this$1 = this;\n+\n+\n+        this.map = {};\n+\n+        each(headers, function (value, name) { return this$1.append(name, value); });\n+    };\n+\n+    Headers.prototype.has = function has (name) {\n+        return getName(this.map, name) !== null;\n+    };\n+\n+    Headers.prototype.get = function get (name) {\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        return list ? list.join() : null;\n+    };\n+\n+    Headers.prototype.getAll = function getAll (name) {\n+        return this.map[getName(this.map, name)] || [];\n+    };\n+\n+    Headers.prototype.set = function set (name, value) {\n+        this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];\n+    };\n+\n+    Headers.prototype.append = function append (name, value){\n+\n+        var list = this.map[getName(this.map, name)];\n+\n+        if (list) {\n+            list.push(trim(value));\n+        } else {\n+            this.set(name, value);\n+        }\n+    };\n+\n+    Headers.prototype.delete = function delete$1 (name){\n+        delete this.map[getName(this.map, name)];\n+    };\n+\n+    Headers.prototype.deleteAll = function deleteAll (){\n+        this.map = {};\n+    };\n+\n+    Headers.prototype.forEach = function forEach (callback, thisArg) {\n+        var this$1 = this;\n+\n+        each(this.map, function (list, name) {\n+            each(list, function (value) { return callback.call(thisArg, value, name, this$1); });\n+        });\n+    };\n+\n+    function getName(map, name) {\n+        return Object.keys(map).reduce(function (prev, curr) {\n+            return toLower(name) === toLower(curr) ? curr : prev;\n+        }, null);\n+    }\n+\n+    function normalizeName(name) {\n+\n+        if (\u002F[^a-z0-9\\-#$%&'*+.\\^_`|~]\u002Fi.test(name)) {\n+            throw new TypeError('Invalid character in header field name');\n+        }\n+\n+        return trim(name);\n+    }\n+\n+    \u002F**\n+     * HTTP Response.\n+     *\u002F\n+\n+    var Response = function Response(body, ref) {\n+        var url = ref.url;\n+        var headers = ref.headers;\n+        var status = ref.status;\n+        var statusText = ref.statusText;\n+\n+\n+        this.url = url;\n+        this.ok = status >= 200 && status \u003C 300;\n+        this.status = status || 0;\n+        this.statusText = statusText || '';\n+        this.headers = new Headers(headers);\n+        this.body = body;\n+\n+        if (isString(body)) {\n+\n+            this.bodyText = body;\n+\n+        } else if (isBlob(body)) {\n+\n+            this.bodyBlob = body;\n+\n+            if (isBlobText(body)) {\n+                this.bodyText = blobText(body);\n+            }\n+        }\n+    };\n+\n+    Response.prototype.blob = function blob () {\n+        return when(this.bodyBlob);\n+    };\n+\n+    Response.prototype.text = function text () {\n+        return when(this.bodyText);\n+    };\n+\n+    Response.prototype.json = function json () {\n+        return when(this.text(), function (text) { return JSON.parse(text); });\n+    };\n+\n+    Object.defineProperty(Response.prototype, 'data', {\n+\n+        get: function get() {\n+            return this.body;\n+        },\n+\n+        set: function set(body) {\n+            this.body = body;\n+        }\n+\n+    });\n+\n+    function blobText(body) {\n+        return new PromiseObj(function (resolve) {\n+\n+            var reader = new FileReader();\n+\n+            reader.readAsText(body);\n+            reader.onload = function () {\n+                resolve(reader.result);\n+            };\n+\n+        });\n+    }\n+\n+    function isBlobText(body) {\n+        return body.type.indexOf('text') === 0 || body.type.indexOf('json') !== -1;\n+    }\n+\n+    \u002F**\n+     * HTTP Request.\n+     *\u002F\n+\n+    var Request = function Request(options$$1) {\n+\n+        this.body = null;\n+        this.params = {};\n+\n+        assign(this, options$$1, {\n+            method: toUpper(options$$1.method || 'GET')\n+        });\n+\n+        if (!(this.headers instanceof Headers)) {\n+            this.headers = new Headers(this.headers);\n+        }\n+    };\n+\n+    Request.prototype.getUrl = function getUrl (){\n+        return Url(this);\n+    };\n+\n+    Request.prototype.getBody = function getBody (){\n+        return this.body;\n+    };\n+\n+    Request.prototype.respondWith = function respondWith (body, options$$1) {\n+        return new Response(body, assign(options$$1 || {}, {url: this.getUrl()}));\n+    };\n+\n+    \u002F**\n+     * Service for sending network requests.\n+     *\u002F\n+\n+    var COMMON_HEADERS = {'Accept': 'application\u002Fjson, text\u002Fplain, *\u002F*'};\n+    var JSON_CONTENT_TYPE = {'Content-Type': 'application\u002Fjson;charset=utf-8'};\n+\n+    function Http(options$$1) {\n+\n+        var self = this || {}, client = Client(self.$vm);\n+\n+        defaults(options$$1 || {}, self.$options, Http.options);\n+\n+        Http.interceptors.forEach(function (handler) {\n+\n+            if (isString(handler)) {\n+                handler = Http.interceptor[handler];\n+            }\n+\n+            if (isFunction(handler)) {\n+                client.use(handler);\n+            }\n+\n+        });\n+\n+        return client(new Request(options$$1)).then(function (response) {\n+\n+            return response.ok ? response : PromiseObj.reject(response);\n+\n+        }, function (response) {\n+\n+            if (response instanceof Error) {\n+                error(response);\n+            }\n+\n+            return PromiseObj.reject(response);\n+        });\n+    }\n+\n+    Http.options = {};\n+\n+    Http.headers = {\n+        put: JSON_CONTENT_TYPE,\n+        post: JSON_CONTENT_TYPE,\n+        patch: JSON_CONTENT_TYPE,\n+        delete: JSON_CONTENT_TYPE,\n+        common: COMMON_HEADERS,\n+        custom: {}\n+    };\n+\n+    Http.interceptor = {before: before, method: method, jsonp: jsonp, json: json, form: form, header: header, cors: cors};\n+    Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];\n+\n+    ['get', 'delete', 'head', 'jsonp'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1}));\n+        };\n+\n+    });\n+\n+    ['post', 'put', 'patch'].forEach(function (method$$1) {\n+\n+        Http[method$$1] = function (url, body, options$$1) {\n+            return this(assign(options$$1 || {}, {url: url, method: method$$1, body: body}));\n+        };\n+\n+    });\n+\n+    \u002F**\n+     * Service for interacting with RESTful services.\n+     *\u002F\n+\n+    function Resource(url, params, actions, options$$1) {\n+\n+        var self = this || {}, resource = {};\n+\n+        actions = assign({},\n+            Resource.actions,\n+            actions\n+        );\n+\n+        each(actions, function (action, name) {\n+\n+            action = merge({url: url, params: assign({}, params)}, options$$1, action);\n+\n+            resource[name] = function () {\n+                return (self.$http || Http)(opts(action, arguments));\n+            };\n+        });\n+\n+        return resource;\n+    }\n+\n+    function opts(action, args) {\n+\n+        var options$$1 = assign({}, action), params = {}, body;\n+\n+        switch (args.length) {\n+\n+            case 2:\n+\n+                params = args[0];\n+                body = args[1];\n+\n+                break;\n+\n+            case 1:\n+\n+                if (\u002F^(POST|PUT|PATCH)$\u002Fi.test(options$$1.method)) {\n+                    body = args[0];\n+                } else {\n+                    params = args[0];\n+                }\n+\n+                break;\n+\n+            case 0:\n+\n+                break;\n+\n+            default:\n+\n+                throw 'Expected up to 2 arguments [params, body], got ' + args.length + ' arguments';\n+        }\n+\n+        options$$1.body = body;\n+        options$$1.params = assign({}, options$$1.params, params);\n+\n+        return options$$1;\n+    }\n+\n+    Resource.actions = {\n+\n+        get: {method: 'GET'},\n+        save: {method: 'POST'},\n+        query: {method: 'GET'},\n+        update: {method: 'PUT'},\n+        remove: {method: 'DELETE'},\n+        delete: {method: 'DELETE'}\n+\n+    };\n+\n+    \u002F**\n+     * Install plugin.\n+     *\u002F\n+\n+    function plugin(Vue) {\n+\n+        if (plugin.installed) {\n+            return;\n+        }\n+\n+        Util(Vue);\n+\n+        Vue.url = Url;\n+        Vue.http = Http;\n+        Vue.resource = Resource;\n+        Vue.Promise = PromiseObj;\n+\n+        Object.defineProperties(Vue.prototype, {\n+\n+            $url: {\n+                get: function get() {\n+                    return options(Vue.url, this, this.$options.url);\n+                }\n+            },\n+\n+            $http: {\n+                get: function get() {\n+                    return options(Vue.http, this, this.$options.http);\n+                }\n+            },\n+\n+            $resource: {\n+                get: function get() {\n+                    return Vue.resource.bind(this);\n+                }\n+            },\n+\n+            $promise: {\n+                get: function get() {\n+                    var this$1 = this;\n+\n+                    return function (executor) { return new Vue.Promise(executor, this$1); };\n+                }\n+            }\n+\n+        });\n+    }\n+\n+    if (typeof window !== 'undefined' && window.Vue) {\n+        window.Vue.use(plugin);\n+    }\n+\n+    return plugin;\n+\n+})));\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fvue\u002Fvuex.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1005 +1,1005 @@\n-\u002F**\r\n- * vuex v3.1.0\r\n- * (c) 2019 Evan You\r\n- * @license MIT\r\n- *\u002F\r\n-(function (global, factory) {\r\n-    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\r\n-        typeof define === 'function' && define.amd ? define(factory) :\r\n-            (global = global || self, global.Vuex = factory());\r\n-}(this, function () { 'use strict';\r\n-\r\n-    function applyMixin (Vue) {\r\n-        var version = Number(Vue.version.split('.')[0]);\r\n-\r\n-        if (version >= 2) {\r\n-            Vue.mixin({ beforeCreate: vuexInit });\r\n-        } else {\r\n-            \u002F\u002F override init and inject vuex init procedure\r\n-            \u002F\u002F for 1.x backwards compatibility.\r\n-            var _init = Vue.prototype._init;\r\n-            Vue.prototype._init = function (options) {\r\n-                if ( options === void 0 ) options = {};\r\n-\r\n-                options.init = options.init\r\n-                    ? [vuexInit].concat(options.init)\r\n-                    : vuexInit;\r\n-                _init.call(this, options);\r\n-            };\r\n-        }\r\n-\r\n-        \u002F**\r\n-         * Vuex init hook, injected into each instances init hooks list.\r\n-         *\u002F\r\n-\r\n-        function vuexInit () {\r\n-            var options = this.$options;\r\n-            \u002F\u002F store injection\r\n-            if (options.store) {\r\n-                this.$store = typeof options.store === 'function'\r\n-                    ? options.store()\r\n-                    : options.store;\r\n-            } else if (options.parent && options.parent.$store) {\r\n-                this.$store = options.parent.$store;\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var devtoolHook =\r\n-        typeof window !== 'undefined' &&\r\n-        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\r\n-\r\n-    function devtoolPlugin (store) {\r\n-        if (!devtoolHook) { return }\r\n-\r\n-        store._devtoolHook = devtoolHook;\r\n-\r\n-        devtoolHook.emit('vuex:init', store);\r\n-\r\n-        devtoolHook.on('vuex:travel-to-state', function (targetState) {\r\n-            store.replaceState(targetState);\r\n-        });\r\n-\r\n-        store.subscribe(function (mutation, state) {\r\n-            devtoolHook.emit('vuex:mutation', mutation, state);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Get the first item that pass the test\r\n-     * by second argument function\r\n-     *\r\n-     * @param {Array} list\r\n-     * @param {Function} f\r\n-     * @return {*}\r\n-     *\u002F\r\n-\r\n-    \u002F**\r\n-     * forEach for object\r\n-     *\u002F\r\n-    function forEachValue (obj, fn) {\r\n-        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\r\n-    }\r\n-\r\n-    function isObject (obj) {\r\n-        return obj !== null && typeof obj === 'object'\r\n-    }\r\n-\r\n-    function isPromise (val) {\r\n-        return val && typeof val.then === 'function'\r\n-    }\r\n-\r\n-    function assert (condition, msg) {\r\n-        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\r\n-    }\r\n-\r\n-    \u002F\u002F Base data struct for store's module, package with some attribute and method\r\n-    var Module = function Module (rawModule, runtime) {\r\n-        this.runtime = runtime;\r\n-        \u002F\u002F Store some children item\r\n-        this._children = Object.create(null);\r\n-        \u002F\u002F Store the origin module object which passed by programmer\r\n-        this._rawModule = rawModule;\r\n-        var rawState = rawModule.state;\r\n-\r\n-        \u002F\u002F Store the origin module's state\r\n-        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\r\n-    };\r\n-\r\n-    var prototypeAccessors = { namespaced: { configurable: true } };\r\n-\r\n-    prototypeAccessors.namespaced.get = function () {\r\n-        return !!this._rawModule.namespaced\r\n-    };\r\n-\r\n-    Module.prototype.addChild = function addChild (key, module) {\r\n-        this._children[key] = module;\r\n-    };\r\n-\r\n-    Module.prototype.removeChild = function removeChild (key) {\r\n-        delete this._children[key];\r\n-    };\r\n-\r\n-    Module.prototype.getChild = function getChild (key) {\r\n-        return this._children[key]\r\n-    };\r\n-\r\n-    Module.prototype.update = function update (rawModule) {\r\n-        this._rawModule.namespaced = rawModule.namespaced;\r\n-        if (rawModule.actions) {\r\n-            this._rawModule.actions = rawModule.actions;\r\n-        }\r\n-        if (rawModule.mutations) {\r\n-            this._rawModule.mutations = rawModule.mutations;\r\n-        }\r\n-        if (rawModule.getters) {\r\n-            this._rawModule.getters = rawModule.getters;\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachChild = function forEachChild (fn) {\r\n-        forEachValue(this._children, fn);\r\n-    };\r\n-\r\n-    Module.prototype.forEachGetter = function forEachGetter (fn) {\r\n-        if (this._rawModule.getters) {\r\n-            forEachValue(this._rawModule.getters, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachAction = function forEachAction (fn) {\r\n-        if (this._rawModule.actions) {\r\n-            forEachValue(this._rawModule.actions, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Module.prototype.forEachMutation = function forEachMutation (fn) {\r\n-        if (this._rawModule.mutations) {\r\n-            forEachValue(this._rawModule.mutations, fn);\r\n-        }\r\n-    };\r\n-\r\n-    Object.defineProperties( Module.prototype, prototypeAccessors );\r\n-\r\n-    var ModuleCollection = function ModuleCollection (rawRootModule) {\r\n-        \u002F\u002F register root module (Vuex.Store options)\r\n-        this.register([], rawRootModule, false);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.get = function get (path) {\r\n-        return path.reduce(function (module, key) {\r\n-            return module.getChild(key)\r\n-        }, this.root)\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\r\n-        var module = this.root;\r\n-        return path.reduce(function (namespace, key) {\r\n-            module = module.getChild(key);\r\n-            return namespace + (module.namespaced ? key + '\u002F' : '')\r\n-        }, '')\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\r\n-        update([], this.root, rawRootModule);\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\r\n-        var this$1 = this;\r\n-        if ( runtime === void 0 ) runtime = true;\r\n-\r\n-        {\r\n-            assertRawModule(path, rawModule);\r\n-        }\r\n-\r\n-        var newModule = new Module(rawModule, runtime);\r\n-        if (path.length === 0) {\r\n-            this.root = newModule;\r\n-        } else {\r\n-            var parent = this.get(path.slice(0, -1));\r\n-            parent.addChild(path[path.length - 1], newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F register nested modules\r\n-        if (rawModule.modules) {\r\n-            forEachValue(rawModule.modules, function (rawChildModule, key) {\r\n-                this$1.register(path.concat(key), rawChildModule, runtime);\r\n-            });\r\n-        }\r\n-    };\r\n-\r\n-    ModuleCollection.prototype.unregister = function unregister (path) {\r\n-        var parent = this.get(path.slice(0, -1));\r\n-        var key = path[path.length - 1];\r\n-        if (!parent.getChild(key).runtime) { return }\r\n-\r\n-        parent.removeChild(key);\r\n-    };\r\n-\r\n-    function update (path, targetModule, newModule) {\r\n-        {\r\n-            assertRawModule(path, newModule);\r\n-        }\r\n-\r\n-        \u002F\u002F update target module\r\n-        targetModule.update(newModule);\r\n-\r\n-        \u002F\u002F update nested modules\r\n-        if (newModule.modules) {\r\n-            for (var key in newModule.modules) {\r\n-                if (!targetModule.getChild(key)) {\r\n-                    {\r\n-                        console.warn(\r\n-                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\r\n-                            'manual reload is needed'\r\n-                        );\r\n-                    }\r\n-                    return\r\n-                }\r\n-                update(\r\n-                    path.concat(key),\r\n-                    targetModule.getChild(key),\r\n-                    newModule.modules[key]\r\n-                );\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    var functionAssert = {\r\n-        assert: function (value) { return typeof value === 'function'; },\r\n-        expected: 'function'\r\n-    };\r\n-\r\n-    var objectAssert = {\r\n-        assert: function (value) { return typeof value === 'function' ||\r\n-            (typeof value === 'object' && typeof value.handler === 'function'); },\r\n-        expected: 'function or object with \"handler\" function'\r\n-    };\r\n-\r\n-    var assertTypes = {\r\n-        getters: functionAssert,\r\n-        mutations: functionAssert,\r\n-        actions: objectAssert\r\n-    };\r\n-\r\n-    function assertRawModule (path, rawModule) {\r\n-        Object.keys(assertTypes).forEach(function (key) {\r\n-            if (!rawModule[key]) { return }\r\n-\r\n-            var assertOptions = assertTypes[key];\r\n-\r\n-            forEachValue(rawModule[key], function (value, type) {\r\n-                assert(\r\n-                    assertOptions.assert(value),\r\n-                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\r\n-                );\r\n-            });\r\n-        });\r\n-    }\r\n-\r\n-    function makeAssertionMessage (path, key, type, value, expected) {\r\n-        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\r\n-        if (path.length > 0) {\r\n-            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\r\n-        }\r\n-        buf += \" is \" + (JSON.stringify(value)) + \".\";\r\n-        return buf\r\n-    }\r\n-\r\n-    var Vue; \u002F\u002F bind on install\r\n-\r\n-    var Store = function Store (options) {\r\n-        var this$1 = this;\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\r\n-        \u002F\u002F To allow users to avoid auto-installation in some cases,\r\n-        \u002F\u002F this code should be placed here. See #731\r\n-        if (!Vue && typeof window !== 'undefined' && window.Vue) {\r\n-            install(window.Vue);\r\n-        }\r\n-\r\n-        {\r\n-            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\r\n-            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\r\n-            assert(this instanceof Store, \"store must be called with the new operator.\");\r\n-        }\r\n-\r\n-        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\r\n-        var strict = options.strict; if ( strict === void 0 ) strict = false;\r\n-\r\n-        \u002F\u002F store internal state\r\n-        this._committing = false;\r\n-        this._actions = Object.create(null);\r\n-        this._actionSubscribers = [];\r\n-        this._mutations = Object.create(null);\r\n-        this._wrappedGetters = Object.create(null);\r\n-        this._modules = new ModuleCollection(options);\r\n-        this._modulesNamespaceMap = Object.create(null);\r\n-        this._subscribers = [];\r\n-        this._watcherVM = new Vue();\r\n-\r\n-        \u002F\u002F bind commit and dispatch to self\r\n-        var store = this;\r\n-        var ref = this;\r\n-        var dispatch = ref.dispatch;\r\n-        var commit = ref.commit;\r\n-        this.dispatch = function boundDispatch (type, payload) {\r\n-            return dispatch.call(store, type, payload)\r\n-        };\r\n-        this.commit = function boundCommit (type, payload, options) {\r\n-            return commit.call(store, type, payload, options)\r\n-        };\r\n-\r\n-        \u002F\u002F strict mode\r\n-        this.strict = strict;\r\n-\r\n-        var state = this._modules.root.state;\r\n-\r\n-        \u002F\u002F init root module.\r\n-        \u002F\u002F this also recursively registers all sub-modules\r\n-        \u002F\u002F and collects all module getters inside this._wrappedGetters\r\n-        installModule(this, state, [], this._modules.root);\r\n-\r\n-        \u002F\u002F initialize the store vm, which is responsible for the reactivity\r\n-        \u002F\u002F (also registers _wrappedGetters as computed properties)\r\n-        resetStoreVM(this, state);\r\n-\r\n-        \u002F\u002F apply plugins\r\n-        plugins.forEach(function (plugin) { return plugin(this$1); });\r\n-\r\n-        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\r\n-        if (useDevtools) {\r\n-            devtoolPlugin(this);\r\n-        }\r\n-    };\r\n-\r\n-    var prototypeAccessors$1 = { state: { configurable: true } };\r\n-\r\n-    prototypeAccessors$1.state.get = function () {\r\n-        return this._vm._data.$$state\r\n-    };\r\n-\r\n-    prototypeAccessors$1.state.set = function (v) {\r\n-        {\r\n-            assert(false, \"use store.replaceState() to explicit replace store state.\");\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.commit = function commit (_type, _payload, _options) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style commit\r\n-        var ref = unifyObjectStyle(_type, _payload, _options);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-        var options = ref.options;\r\n-\r\n-        var mutation = { type: type, payload: payload };\r\n-        var entry = this._mutations[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown mutation type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        this._withCommit(function () {\r\n-            entry.forEach(function commitIterator (handler) {\r\n-                handler(payload);\r\n-            });\r\n-        });\r\n-        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\r\n-\r\n-        if (\r\n-            options && options.silent\r\n-        ) {\r\n-            console.warn(\r\n-                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\r\n-                'Use the filter functionality in the vue-devtools'\r\n-            );\r\n-        }\r\n-    };\r\n-\r\n-    Store.prototype.dispatch = function dispatch (_type, _payload) {\r\n-        var this$1 = this;\r\n-\r\n-        \u002F\u002F check object-style dispatch\r\n-        var ref = unifyObjectStyle(_type, _payload);\r\n-        var type = ref.type;\r\n-        var payload = ref.payload;\r\n-\r\n-        var action = { type: type, payload: payload };\r\n-        var entry = this._actions[type];\r\n-        if (!entry) {\r\n-            {\r\n-                console.error((\"[vuex] unknown action type: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-\r\n-        try {\r\n-            this._actionSubscribers\r\n-                .filter(function (sub) { return sub.before; })\r\n-                .forEach(function (sub) { return sub.before(action, this$1.state); });\r\n-        } catch (e) {\r\n-            {\r\n-                console.warn(\"[vuex] error in before action subscribers: \");\r\n-                console.error(e);\r\n-            }\r\n-        }\r\n-\r\n-        var result = entry.length > 1\r\n-            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\r\n-            : entry[0](payload);\r\n-\r\n-        return result.then(function (res) {\r\n-            try {\r\n-                this$1._actionSubscribers\r\n-                    .filter(function (sub) { return sub.after; })\r\n-                    .forEach(function (sub) { return sub.after(action, this$1.state); });\r\n-            } catch (e) {\r\n-                {\r\n-                    console.warn(\"[vuex] error in after action subscribers: \");\r\n-                    console.error(e);\r\n-                }\r\n-            }\r\n-            return res\r\n-        })\r\n-    };\r\n-\r\n-    Store.prototype.subscribe = function subscribe (fn) {\r\n-        return genericSubscribe(fn, this._subscribers)\r\n-    };\r\n-\r\n-    Store.prototype.subscribeAction = function subscribeAction (fn) {\r\n-        var subs = typeof fn === 'function' ? { before: fn } : fn;\r\n-        return genericSubscribe(subs, this._actionSubscribers)\r\n-    };\r\n-\r\n-    Store.prototype.watch = function watch (getter, cb, options) {\r\n-        var this$1 = this;\r\n-\r\n-        {\r\n-            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\r\n-        }\r\n-        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\r\n-    };\r\n-\r\n-    Store.prototype.replaceState = function replaceState (state) {\r\n-        var this$1 = this;\r\n-\r\n-        this._withCommit(function () {\r\n-            this$1._vm._data.$$state = state;\r\n-        });\r\n-    };\r\n-\r\n-    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\r\n-        if ( options === void 0 ) options = {};\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-            assert(path.length > 0, 'cannot register the root module by using registerModule.');\r\n-        }\r\n-\r\n-        this._modules.register(path, rawModule);\r\n-        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\r\n-        \u002F\u002F reset store to update getters...\r\n-        resetStoreVM(this, this.state);\r\n-    };\r\n-\r\n-    Store.prototype.unregisterModule = function unregisterModule (path) {\r\n-        var this$1 = this;\r\n-\r\n-        if (typeof path === 'string') { path = [path]; }\r\n-\r\n-        {\r\n-            assert(Array.isArray(path), \"module path must be a string or an Array.\");\r\n-        }\r\n-\r\n-        this._modules.unregister(path);\r\n-        this._withCommit(function () {\r\n-            var parentState = getNestedState(this$1.state, path.slice(0, -1));\r\n-            Vue.delete(parentState, path[path.length - 1]);\r\n-        });\r\n-        resetStore(this);\r\n-    };\r\n-\r\n-    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\r\n-        this._modules.update(newOptions);\r\n-        resetStore(this, true);\r\n-    };\r\n-\r\n-    Store.prototype._withCommit = function _withCommit (fn) {\r\n-        var committing = this._committing;\r\n-        this._committing = true;\r\n-        fn();\r\n-        this._committing = committing;\r\n-    };\r\n-\r\n-    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\r\n-\r\n-    function genericSubscribe (fn, subs) {\r\n-        if (subs.indexOf(fn) \u003C 0) {\r\n-            subs.push(fn);\r\n-        }\r\n-        return function () {\r\n-            var i = subs.indexOf(fn);\r\n-            if (i > -1) {\r\n-                subs.splice(i, 1);\r\n-            }\r\n-        }\r\n-    }\r\n-\r\n-    function resetStore (store, hot) {\r\n-        store._actions = Object.create(null);\r\n-        store._mutations = Object.create(null);\r\n-        store._wrappedGetters = Object.create(null);\r\n-        store._modulesNamespaceMap = Object.create(null);\r\n-        var state = store.state;\r\n-        \u002F\u002F init all modules\r\n-        installModule(store, state, [], store._modules.root, true);\r\n-        \u002F\u002F reset vm\r\n-        resetStoreVM(store, state, hot);\r\n-    }\r\n-\r\n-    function resetStoreVM (store, state, hot) {\r\n-        var oldVm = store._vm;\r\n-\r\n-        \u002F\u002F bind store public getters\r\n-        store.getters = {};\r\n-        var wrappedGetters = store._wrappedGetters;\r\n-        var computed = {};\r\n-        forEachValue(wrappedGetters, function (fn, key) {\r\n-            \u002F\u002F use computed to leverage its lazy-caching mechanism\r\n-            computed[key] = function () { return fn(store); };\r\n-            Object.defineProperty(store.getters, key, {\r\n-                get: function () { return store._vm[key]; },\r\n-                enumerable: true \u002F\u002F for local getters\r\n-            });\r\n-        });\r\n-\r\n-        \u002F\u002F use a Vue instance to store the state tree\r\n-        \u002F\u002F suppress warnings just in case the user has added\r\n-        \u002F\u002F some funky global mixins\r\n-        var silent = Vue.config.silent;\r\n-        Vue.config.silent = true;\r\n-        store._vm = new Vue({\r\n-            data: {\r\n-                $$state: state\r\n-            },\r\n-            computed: computed\r\n-        });\r\n-        Vue.config.silent = silent;\r\n-\r\n-        \u002F\u002F enable strict mode for new vm\r\n-        if (store.strict) {\r\n-            enableStrictMode(store);\r\n-        }\r\n-\r\n-        if (oldVm) {\r\n-            if (hot) {\r\n-                \u002F\u002F dispatch changes in all subscribed watchers\r\n-                \u002F\u002F to force getter re-evaluation for hot reloading.\r\n-                store._withCommit(function () {\r\n-                    oldVm._data.$$state = null;\r\n-                });\r\n-            }\r\n-            Vue.nextTick(function () { return oldVm.$destroy(); });\r\n-        }\r\n-    }\r\n-\r\n-    function installModule (store, rootState, path, module, hot) {\r\n-        var isRoot = !path.length;\r\n-        var namespace = store._modules.getNamespace(path);\r\n-\r\n-        \u002F\u002F register in namespace map\r\n-        if (module.namespaced) {\r\n-            store._modulesNamespaceMap[namespace] = module;\r\n-        }\r\n-\r\n-        \u002F\u002F set state\r\n-        if (!isRoot && !hot) {\r\n-            var parentState = getNestedState(rootState, path.slice(0, -1));\r\n-            var moduleName = path[path.length - 1];\r\n-            store._withCommit(function () {\r\n-                Vue.set(parentState, moduleName, module.state);\r\n-            });\r\n-        }\r\n-\r\n-        var local = module.context = makeLocalContext(store, namespace, path);\r\n-\r\n-        module.forEachMutation(function (mutation, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerMutation(store, namespacedType, mutation, local);\r\n-        });\r\n-\r\n-        module.forEachAction(function (action, key) {\r\n-            var type = action.root ? key : namespace + key;\r\n-            var handler = action.handler || action;\r\n-            registerAction(store, type, handler, local);\r\n-        });\r\n-\r\n-        module.forEachGetter(function (getter, key) {\r\n-            var namespacedType = namespace + key;\r\n-            registerGetter(store, namespacedType, getter, local);\r\n-        });\r\n-\r\n-        module.forEachChild(function (child, key) {\r\n-            installModule(store, rootState, path.concat(key), child, hot);\r\n-        });\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * make localized dispatch, commit, getters and state\r\n-     * if there is no namespace, just use root ones\r\n-     *\u002F\r\n-    function makeLocalContext (store, namespace, path) {\r\n-        var noNamespace = namespace === '';\r\n-\r\n-        var local = {\r\n-            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._actions[type]) {\r\n-                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                return store.dispatch(type, payload)\r\n-            },\r\n-\r\n-            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\r\n-                var args = unifyObjectStyle(_type, _payload, _options);\r\n-                var payload = args.payload;\r\n-                var options = args.options;\r\n-                var type = args.type;\r\n-\r\n-                if (!options || !options.root) {\r\n-                    type = namespace + type;\r\n-                    if (!store._mutations[type]) {\r\n-                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\r\n-                        return\r\n-                    }\r\n-                }\r\n-\r\n-                store.commit(type, payload, options);\r\n-            }\r\n-        };\r\n-\r\n-        \u002F\u002F getters and state object must be gotten lazily\r\n-        \u002F\u002F because they will be changed by vm update\r\n-        Object.defineProperties(local, {\r\n-            getters: {\r\n-                get: noNamespace\r\n-                    ? function () { return store.getters; }\r\n-                    : function () { return makeLocalGetters(store, namespace); }\r\n-            },\r\n-            state: {\r\n-                get: function () { return getNestedState(store.state, path); }\r\n-            }\r\n-        });\r\n-\r\n-        return local\r\n-    }\r\n-\r\n-    function makeLocalGetters (store, namespace) {\r\n-        var gettersProxy = {};\r\n-\r\n-        var splitPos = namespace.length;\r\n-        Object.keys(store.getters).forEach(function (type) {\r\n-            \u002F\u002F skip if the target getter is not match this namespace\r\n-            if (type.slice(0, splitPos) !== namespace) { return }\r\n-\r\n-            \u002F\u002F extract local getter type\r\n-            var localType = type.slice(splitPos);\r\n-\r\n-            \u002F\u002F Add a port to the getters proxy.\r\n-            \u002F\u002F Define as getter property because\r\n-            \u002F\u002F we do not want to evaluate the getters in this time.\r\n-            Object.defineProperty(gettersProxy, localType, {\r\n-                get: function () { return store.getters[type]; },\r\n-                enumerable: true\r\n-            });\r\n-        });\r\n-\r\n-        return gettersProxy\r\n-    }\r\n-\r\n-    function registerMutation (store, type, handler, local) {\r\n-        var entry = store._mutations[type] || (store._mutations[type] = []);\r\n-        entry.push(function wrappedMutationHandler (payload) {\r\n-            handler.call(store, local.state, payload);\r\n-        });\r\n-    }\r\n-\r\n-    function registerAction (store, type, handler, local) {\r\n-        var entry = store._actions[type] || (store._actions[type] = []);\r\n-        entry.push(function wrappedActionHandler (payload, cb) {\r\n-            var res = handler.call(store, {\r\n-                dispatch: local.dispatch,\r\n-                commit: local.commit,\r\n-                getters: local.getters,\r\n-                state: local.state,\r\n-                rootGetters: store.getters,\r\n-                rootState: store.state\r\n-            }, payload, cb);\r\n-            if (!isPromise(res)) {\r\n-                res = Promise.resolve(res);\r\n-            }\r\n-            if (store._devtoolHook) {\r\n-                return res.catch(function (err) {\r\n-                    store._devtoolHook.emit('vuex:error', err);\r\n-                    throw err\r\n-                })\r\n-            } else {\r\n-                return res\r\n-            }\r\n-        });\r\n-    }\r\n-\r\n-    function registerGetter (store, type, rawGetter, local) {\r\n-        if (store._wrappedGetters[type]) {\r\n-            {\r\n-                console.error((\"[vuex] duplicate getter key: \" + type));\r\n-            }\r\n-            return\r\n-        }\r\n-        store._wrappedGetters[type] = function wrappedGetter (store) {\r\n-            return rawGetter(\r\n-                local.state, \u002F\u002F local state\r\n-                local.getters, \u002F\u002F local getters\r\n-                store.state, \u002F\u002F root state\r\n-                store.getters \u002F\u002F root getters\r\n-            )\r\n-        };\r\n-    }\r\n-\r\n-    function enableStrictMode (store) {\r\n-        store._vm.$watch(function () { return this._data.$$state }, function () {\r\n-            {\r\n-                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\r\n-            }\r\n-        }, { deep: true, sync: true });\r\n-    }\r\n-\r\n-    function getNestedState (state, path) {\r\n-        return path.length\r\n-            ? path.reduce(function (state, key) { return state[key]; }, state)\r\n-            : state\r\n-    }\r\n-\r\n-    function unifyObjectStyle (type, payload, options) {\r\n-        if (isObject(type) && type.type) {\r\n-            options = payload;\r\n-            payload = type;\r\n-            type = type.type;\r\n-        }\r\n-\r\n-        {\r\n-            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\r\n-        }\r\n-\r\n-        return { type: type, payload: payload, options: options }\r\n-    }\r\n-\r\n-    function install (_Vue) {\r\n-        if (Vue && _Vue === Vue) {\r\n-            {\r\n-                console.error(\r\n-                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\r\n-                );\r\n-            }\r\n-            return\r\n-        }\r\n-        Vue = _Vue;\r\n-        applyMixin(Vue);\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the state.\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\r\n-     * @param {Object}\r\n-     *\u002F\r\n-    var mapState = normalizeNamespace(function (namespace, states) {\r\n-        var res = {};\r\n-        normalizeMap(states).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedState () {\r\n-                var state = this.$store.state;\r\n-                var getters = this.$store.getters;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    state = module.context.state;\r\n-                    getters = module.context.getters;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.call(this, state, getters)\r\n-                    : state[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for committing the mutation\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapMutations = normalizeNamespace(function (namespace, mutations) {\r\n-        var res = {};\r\n-        normalizeMap(mutations).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedMutation () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F Get the commit method from store\r\n-                var commit = this.$store.commit;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    commit = module.context.commit;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [commit].concat(args))\r\n-                    : commit.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for getting the getters\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} getters\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapGetters = normalizeNamespace(function (namespace, getters) {\r\n-        var res = {};\r\n-        normalizeMap(getters).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            \u002F\u002F The namespace has been mutated by normalizeNamespace\r\n-            val = namespace + val;\r\n-            res[key] = function mappedGetter () {\r\n-                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\r\n-                    return\r\n-                }\r\n-                if (!(val in this.$store.getters)) {\r\n-                    console.error((\"[vuex] unknown getter: \" + val));\r\n-                    return\r\n-                }\r\n-                return this.$store.getters[val]\r\n-            };\r\n-            \u002F\u002F mark vuex getter for devtools\r\n-            res[key].vuex = true;\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Reduce the code which written in Vue.js for dispatch the action\r\n-     * @param {String} [namespace] - Module's namespace\r\n-     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var mapActions = normalizeNamespace(function (namespace, actions) {\r\n-        var res = {};\r\n-        normalizeMap(actions).forEach(function (ref) {\r\n-            var key = ref.key;\r\n-            var val = ref.val;\r\n-\r\n-            res[key] = function mappedAction () {\r\n-                var args = [], len = arguments.length;\r\n-                while ( len-- ) args[ len ] = arguments[ len ];\r\n-\r\n-                \u002F\u002F get dispatch function from store\r\n-                var dispatch = this.$store.dispatch;\r\n-                if (namespace) {\r\n-                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\r\n-                    if (!module) {\r\n-                        return\r\n-                    }\r\n-                    dispatch = module.context.dispatch;\r\n-                }\r\n-                return typeof val === 'function'\r\n-                    ? val.apply(this, [dispatch].concat(args))\r\n-                    : dispatch.apply(this.$store, [val].concat(args))\r\n-            };\r\n-        });\r\n-        return res\r\n-    });\r\n-\r\n-    \u002F**\r\n-     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    var createNamespacedHelpers = function (namespace) { return ({\r\n-        mapState: mapState.bind(null, namespace),\r\n-        mapGetters: mapGetters.bind(null, namespace),\r\n-        mapMutations: mapMutations.bind(null, namespace),\r\n-        mapActions: mapActions.bind(null, namespace)\r\n-    }); };\r\n-\r\n-    \u002F**\r\n-     * Normalize the map\r\n-     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\r\n-     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\r\n-     * @param {Array|Object} map\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function normalizeMap (map) {\r\n-        return Array.isArray(map)\r\n-            ? map.map(function (key) { return ({ key: key, val: key }); })\r\n-            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\r\n-     * @param {Function} fn\r\n-     * @return {Function}\r\n-     *\u002F\r\n-    function normalizeNamespace (fn) {\r\n-        return function (namespace, map) {\r\n-            if (typeof namespace !== 'string') {\r\n-                map = namespace;\r\n-                namespace = '';\r\n-            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\r\n-                namespace += '\u002F';\r\n-            }\r\n-            return fn(namespace, map)\r\n-        }\r\n-    }\r\n-\r\n-    \u002F**\r\n-     * Search a special module from store by namespace. if module not exist, print error message.\r\n-     * @param {Object} store\r\n-     * @param {String} helper\r\n-     * @param {String} namespace\r\n-     * @return {Object}\r\n-     *\u002F\r\n-    function getModuleByNamespace (store, helper, namespace) {\r\n-        var module = store._modulesNamespaceMap[namespace];\r\n-        if (!module) {\r\n-            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\r\n-        }\r\n-        return module\r\n-    }\r\n-\r\n-    var index = {\r\n-        Store: Store,\r\n-        install: install,\r\n-        version: '3.1.0',\r\n-        mapState: mapState,\r\n-        mapMutations: mapMutations,\r\n-        mapGetters: mapGetters,\r\n-        mapActions: mapActions,\r\n-        createNamespacedHelpers: createNamespacedHelpers\r\n-    };\r\n-\r\n-    return index;\r\n-\r\n+\u002F**\n+ * vuex v3.1.0\n+ * (c) 2019 Evan You\n+ * @license MIT\n+ *\u002F\n+(function (global, factory) {\n+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n+        typeof define === 'function' && define.amd ? define(factory) :\n+            (global = global || self, global.Vuex = factory());\n+}(this, function () { 'use strict';\n+\n+    function applyMixin (Vue) {\n+        var version = Number(Vue.version.split('.')[0]);\n+\n+        if (version >= 2) {\n+            Vue.mixin({ beforeCreate: vuexInit });\n+        } else {\n+            \u002F\u002F override init and inject vuex init procedure\n+            \u002F\u002F for 1.x backwards compatibility.\n+            var _init = Vue.prototype._init;\n+            Vue.prototype._init = function (options) {\n+                if ( options === void 0 ) options = {};\n+\n+                options.init = options.init\n+                    ? [vuexInit].concat(options.init)\n+                    : vuexInit;\n+                _init.call(this, options);\n+            };\n+        }\n+\n+        \u002F**\n+         * Vuex init hook, injected into each instances init hooks list.\n+         *\u002F\n+\n+        function vuexInit () {\n+            var options = this.$options;\n+            \u002F\u002F store injection\n+            if (options.store) {\n+                this.$store = typeof options.store === 'function'\n+                    ? options.store()\n+                    : options.store;\n+            } else if (options.parent && options.parent.$store) {\n+                this.$store = options.parent.$store;\n+            }\n+        }\n+    }\n+\n+    var devtoolHook =\n+        typeof window !== 'undefined' &&\n+        window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n+\n+    function devtoolPlugin (store) {\n+        if (!devtoolHook) { return }\n+\n+        store._devtoolHook = devtoolHook;\n+\n+        devtoolHook.emit('vuex:init', store);\n+\n+        devtoolHook.on('vuex:travel-to-state', function (targetState) {\n+            store.replaceState(targetState);\n+        });\n+\n+        store.subscribe(function (mutation, state) {\n+            devtoolHook.emit('vuex:mutation', mutation, state);\n+        });\n+    }\n+\n+    \u002F**\n+     * Get the first item that pass the test\n+     * by second argument function\n+     *\n+     * @param {Array} list\n+     * @param {Function} f\n+     * @return {*}\n+     *\u002F\n+\n+    \u002F**\n+     * forEach for object\n+     *\u002F\n+    function forEachValue (obj, fn) {\n+        Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });\n+    }\n+\n+    function isObject (obj) {\n+        return obj !== null && typeof obj === 'object'\n+    }\n+\n+    function isPromise (val) {\n+        return val && typeof val.then === 'function'\n+    }\n+\n+    function assert (condition, msg) {\n+        if (!condition) { throw new Error((\"[vuex] \" + msg)) }\n+    }\n+\n+    \u002F\u002F Base data struct for store's module, package with some attribute and method\n+    var Module = function Module (rawModule, runtime) {\n+        this.runtime = runtime;\n+        \u002F\u002F Store some children item\n+        this._children = Object.create(null);\n+        \u002F\u002F Store the origin module object which passed by programmer\n+        this._rawModule = rawModule;\n+        var rawState = rawModule.state;\n+\n+        \u002F\u002F Store the origin module's state\n+        this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};\n+    };\n+\n+    var prototypeAccessors = { namespaced: { configurable: true } };\n+\n+    prototypeAccessors.namespaced.get = function () {\n+        return !!this._rawModule.namespaced\n+    };\n+\n+    Module.prototype.addChild = function addChild (key, module) {\n+        this._children[key] = module;\n+    };\n+\n+    Module.prototype.removeChild = function removeChild (key) {\n+        delete this._children[key];\n+    };\n+\n+    Module.prototype.getChild = function getChild (key) {\n+        return this._children[key]\n+    };\n+\n+    Module.prototype.update = function update (rawModule) {\n+        this._rawModule.namespaced = rawModule.namespaced;\n+        if (rawModule.actions) {\n+            this._rawModule.actions = rawModule.actions;\n+        }\n+        if (rawModule.mutations) {\n+            this._rawModule.mutations = rawModule.mutations;\n+        }\n+        if (rawModule.getters) {\n+            this._rawModule.getters = rawModule.getters;\n+        }\n+    };\n+\n+    Module.prototype.forEachChild = function forEachChild (fn) {\n+        forEachValue(this._children, fn);\n+    };\n+\n+    Module.prototype.forEachGetter = function forEachGetter (fn) {\n+        if (this._rawModule.getters) {\n+            forEachValue(this._rawModule.getters, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachAction = function forEachAction (fn) {\n+        if (this._rawModule.actions) {\n+            forEachValue(this._rawModule.actions, fn);\n+        }\n+    };\n+\n+    Module.prototype.forEachMutation = function forEachMutation (fn) {\n+        if (this._rawModule.mutations) {\n+            forEachValue(this._rawModule.mutations, fn);\n+        }\n+    };\n+\n+    Object.defineProperties( Module.prototype, prototypeAccessors );\n+\n+    var ModuleCollection = function ModuleCollection (rawRootModule) {\n+        \u002F\u002F register root module (Vuex.Store options)\n+        this.register([], rawRootModule, false);\n+    };\n+\n+    ModuleCollection.prototype.get = function get (path) {\n+        return path.reduce(function (module, key) {\n+            return module.getChild(key)\n+        }, this.root)\n+    };\n+\n+    ModuleCollection.prototype.getNamespace = function getNamespace (path) {\n+        var module = this.root;\n+        return path.reduce(function (namespace, key) {\n+            module = module.getChild(key);\n+            return namespace + (module.namespaced ? key + '\u002F' : '')\n+        }, '')\n+    };\n+\n+    ModuleCollection.prototype.update = function update$1 (rawRootModule) {\n+        update([], this.root, rawRootModule);\n+    };\n+\n+    ModuleCollection.prototype.register = function register (path, rawModule, runtime) {\n+        var this$1 = this;\n+        if ( runtime === void 0 ) runtime = true;\n+\n+        {\n+            assertRawModule(path, rawModule);\n+        }\n+\n+        var newModule = new Module(rawModule, runtime);\n+        if (path.length === 0) {\n+            this.root = newModule;\n+        } else {\n+            var parent = this.get(path.slice(0, -1));\n+            parent.addChild(path[path.length - 1], newModule);\n+        }\n+\n+        \u002F\u002F register nested modules\n+        if (rawModule.modules) {\n+            forEachValue(rawModule.modules, function (rawChildModule, key) {\n+                this$1.register(path.concat(key), rawChildModule, runtime);\n+            });\n+        }\n+    };\n+\n+    ModuleCollection.prototype.unregister = function unregister (path) {\n+        var parent = this.get(path.slice(0, -1));\n+        var key = path[path.length - 1];\n+        if (!parent.getChild(key).runtime) { return }\n+\n+        parent.removeChild(key);\n+    };\n+\n+    function update (path, targetModule, newModule) {\n+        {\n+            assertRawModule(path, newModule);\n+        }\n+\n+        \u002F\u002F update target module\n+        targetModule.update(newModule);\n+\n+        \u002F\u002F update nested modules\n+        if (newModule.modules) {\n+            for (var key in newModule.modules) {\n+                if (!targetModule.getChild(key)) {\n+                    {\n+                        console.warn(\n+                            \"[vuex] trying to add a new module '\" + key + \"' on hot reloading, \" +\n+                            'manual reload is needed'\n+                        );\n+                    }\n+                    return\n+                }\n+                update(\n+                    path.concat(key),\n+                    targetModule.getChild(key),\n+                    newModule.modules[key]\n+                );\n+            }\n+        }\n+    }\n+\n+    var functionAssert = {\n+        assert: function (value) { return typeof value === 'function'; },\n+        expected: 'function'\n+    };\n+\n+    var objectAssert = {\n+        assert: function (value) { return typeof value === 'function' ||\n+            (typeof value === 'object' && typeof value.handler === 'function'); },\n+        expected: 'function or object with \"handler\" function'\n+    };\n+\n+    var assertTypes = {\n+        getters: functionAssert,\n+        mutations: functionAssert,\n+        actions: objectAssert\n+    };\n+\n+    function assertRawModule (path, rawModule) {\n+        Object.keys(assertTypes).forEach(function (key) {\n+            if (!rawModule[key]) { return }\n+\n+            var assertOptions = assertTypes[key];\n+\n+            forEachValue(rawModule[key], function (value, type) {\n+                assert(\n+                    assertOptions.assert(value),\n+                    makeAssertionMessage(path, key, type, value, assertOptions.expected)\n+                );\n+            });\n+        });\n+    }\n+\n+    function makeAssertionMessage (path, key, type, value, expected) {\n+        var buf = key + \" should be \" + expected + \" but \\\"\" + key + \".\" + type + \"\\\"\";\n+        if (path.length > 0) {\n+            buf += \" in module \\\"\" + (path.join('.')) + \"\\\"\";\n+        }\n+        buf += \" is \" + (JSON.stringify(value)) + \".\";\n+        return buf\n+    }\n+\n+    var Vue; \u002F\u002F bind on install\n+\n+    var Store = function Store (options) {\n+        var this$1 = this;\n+        if ( options === void 0 ) options = {};\n+\n+        \u002F\u002F Auto install if it is not done yet and `window` has `Vue`.\n+        \u002F\u002F To allow users to avoid auto-installation in some cases,\n+        \u002F\u002F this code should be placed here. See #731\n+        if (!Vue && typeof window !== 'undefined' && window.Vue) {\n+            install(window.Vue);\n+        }\n+\n+        {\n+            assert(Vue, \"must call Vue.use(Vuex) before creating a store instance.\");\n+            assert(typeof Promise !== 'undefined', \"vuex requires a Promise polyfill in this browser.\");\n+            assert(this instanceof Store, \"store must be called with the new operator.\");\n+        }\n+\n+        var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];\n+        var strict = options.strict; if ( strict === void 0 ) strict = false;\n+\n+        \u002F\u002F store internal state\n+        this._committing = false;\n+        this._actions = Object.create(null);\n+        this._actionSubscribers = [];\n+        this._mutations = Object.create(null);\n+        this._wrappedGetters = Object.create(null);\n+        this._modules = new ModuleCollection(options);\n+        this._modulesNamespaceMap = Object.create(null);\n+        this._subscribers = [];\n+        this._watcherVM = new Vue();\n+\n+        \u002F\u002F bind commit and dispatch to self\n+        var store = this;\n+        var ref = this;\n+        var dispatch = ref.dispatch;\n+        var commit = ref.commit;\n+        this.dispatch = function boundDispatch (type, payload) {\n+            return dispatch.call(store, type, payload)\n+        };\n+        this.commit = function boundCommit (type, payload, options) {\n+            return commit.call(store, type, payload, options)\n+        };\n+\n+        \u002F\u002F strict mode\n+        this.strict = strict;\n+\n+        var state = this._modules.root.state;\n+\n+        \u002F\u002F init root module.\n+        \u002F\u002F this also recursively registers all sub-modules\n+        \u002F\u002F and collects all module getters inside this._wrappedGetters\n+        installModule(this, state, [], this._modules.root);\n+\n+        \u002F\u002F initialize the store vm, which is responsible for the reactivity\n+        \u002F\u002F (also registers _wrappedGetters as computed properties)\n+        resetStoreVM(this, state);\n+\n+        \u002F\u002F apply plugins\n+        plugins.forEach(function (plugin) { return plugin(this$1); });\n+\n+        var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;\n+        if (useDevtools) {\n+            devtoolPlugin(this);\n+        }\n+    };\n+\n+    var prototypeAccessors$1 = { state: { configurable: true } };\n+\n+    prototypeAccessors$1.state.get = function () {\n+        return this._vm._data.$$state\n+    };\n+\n+    prototypeAccessors$1.state.set = function (v) {\n+        {\n+            assert(false, \"use store.replaceState() to explicit replace store state.\");\n+        }\n+    };\n+\n+    Store.prototype.commit = function commit (_type, _payload, _options) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style commit\n+        var ref = unifyObjectStyle(_type, _payload, _options);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+        var options = ref.options;\n+\n+        var mutation = { type: type, payload: payload };\n+        var entry = this._mutations[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown mutation type: \" + type));\n+            }\n+            return\n+        }\n+        this._withCommit(function () {\n+            entry.forEach(function commitIterator (handler) {\n+                handler(payload);\n+            });\n+        });\n+        this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); });\n+\n+        if (\n+            options && options.silent\n+        ) {\n+            console.warn(\n+                \"[vuex] mutation type: \" + type + \". Silent option has been removed. \" +\n+                'Use the filter functionality in the vue-devtools'\n+            );\n+        }\n+    };\n+\n+    Store.prototype.dispatch = function dispatch (_type, _payload) {\n+        var this$1 = this;\n+\n+        \u002F\u002F check object-style dispatch\n+        var ref = unifyObjectStyle(_type, _payload);\n+        var type = ref.type;\n+        var payload = ref.payload;\n+\n+        var action = { type: type, payload: payload };\n+        var entry = this._actions[type];\n+        if (!entry) {\n+            {\n+                console.error((\"[vuex] unknown action type: \" + type));\n+            }\n+            return\n+        }\n+\n+        try {\n+            this._actionSubscribers\n+                .filter(function (sub) { return sub.before; })\n+                .forEach(function (sub) { return sub.before(action, this$1.state); });\n+        } catch (e) {\n+            {\n+                console.warn(\"[vuex] error in before action subscribers: \");\n+                console.error(e);\n+            }\n+        }\n+\n+        var result = entry.length > 1\n+            ? Promise.all(entry.map(function (handler) { return handler(payload); }))\n+            : entry[0](payload);\n+\n+        return result.then(function (res) {\n+            try {\n+                this$1._actionSubscribers\n+                    .filter(function (sub) { return sub.after; })\n+                    .forEach(function (sub) { return sub.after(action, this$1.state); });\n+            } catch (e) {\n+                {\n+                    console.warn(\"[vuex] error in after action subscribers: \");\n+                    console.error(e);\n+                }\n+            }\n+            return res\n+        })\n+    };\n+\n+    Store.prototype.subscribe = function subscribe (fn) {\n+        return genericSubscribe(fn, this._subscribers)\n+    };\n+\n+    Store.prototype.subscribeAction = function subscribeAction (fn) {\n+        var subs = typeof fn === 'function' ? { before: fn } : fn;\n+        return genericSubscribe(subs, this._actionSubscribers)\n+    };\n+\n+    Store.prototype.watch = function watch (getter, cb, options) {\n+        var this$1 = this;\n+\n+        {\n+            assert(typeof getter === 'function', \"store.watch only accepts a function.\");\n+        }\n+        return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)\n+    };\n+\n+    Store.prototype.replaceState = function replaceState (state) {\n+        var this$1 = this;\n+\n+        this._withCommit(function () {\n+            this$1._vm._data.$$state = state;\n+        });\n+    };\n+\n+    Store.prototype.registerModule = function registerModule (path, rawModule, options) {\n+        if ( options === void 0 ) options = {};\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+            assert(path.length > 0, 'cannot register the root module by using registerModule.');\n+        }\n+\n+        this._modules.register(path, rawModule);\n+        installModule(this, this.state, path, this._modules.get(path), options.preserveState);\n+        \u002F\u002F reset store to update getters...\n+        resetStoreVM(this, this.state);\n+    };\n+\n+    Store.prototype.unregisterModule = function unregisterModule (path) {\n+        var this$1 = this;\n+\n+        if (typeof path === 'string') { path = [path]; }\n+\n+        {\n+            assert(Array.isArray(path), \"module path must be a string or an Array.\");\n+        }\n+\n+        this._modules.unregister(path);\n+        this._withCommit(function () {\n+            var parentState = getNestedState(this$1.state, path.slice(0, -1));\n+            Vue.delete(parentState, path[path.length - 1]);\n+        });\n+        resetStore(this);\n+    };\n+\n+    Store.prototype.hotUpdate = function hotUpdate (newOptions) {\n+        this._modules.update(newOptions);\n+        resetStore(this, true);\n+    };\n+\n+    Store.prototype._withCommit = function _withCommit (fn) {\n+        var committing = this._committing;\n+        this._committing = true;\n+        fn();\n+        this._committing = committing;\n+    };\n+\n+    Object.defineProperties( Store.prototype, prototypeAccessors$1 );\n+\n+    function genericSubscribe (fn, subs) {\n+        if (subs.indexOf(fn) \u003C 0) {\n+            subs.push(fn);\n+        }\n+        return function () {\n+            var i = subs.indexOf(fn);\n+            if (i > -1) {\n+                subs.splice(i, 1);\n+            }\n+        }\n+    }\n+\n+    function resetStore (store, hot) {\n+        store._actions = Object.create(null);\n+        store._mutations = Object.create(null);\n+        store._wrappedGetters = Object.create(null);\n+        store._modulesNamespaceMap = Object.create(null);\n+        var state = store.state;\n+        \u002F\u002F init all modules\n+        installModule(store, state, [], store._modules.root, true);\n+        \u002F\u002F reset vm\n+        resetStoreVM(store, state, hot);\n+    }\n+\n+    function resetStoreVM (store, state, hot) {\n+        var oldVm = store._vm;\n+\n+        \u002F\u002F bind store public getters\n+        store.getters = {};\n+        var wrappedGetters = store._wrappedGetters;\n+        var computed = {};\n+        forEachValue(wrappedGetters, function (fn, key) {\n+            \u002F\u002F use computed to leverage its lazy-caching mechanism\n+            computed[key] = function () { return fn(store); };\n+            Object.defineProperty(store.getters, key, {\n+                get: function () { return store._vm[key]; },\n+                enumerable: true \u002F\u002F for local getters\n+            });\n+        });\n+\n+        \u002F\u002F use a Vue instance to store the state tree\n+        \u002F\u002F suppress warnings just in case the user has added\n+        \u002F\u002F some funky global mixins\n+        var silent = Vue.config.silent;\n+        Vue.config.silent = true;\n+        store._vm = new Vue({\n+            data: {\n+                $$state: state\n+            },\n+            computed: computed\n+        });\n+        Vue.config.silent = silent;\n+\n+        \u002F\u002F enable strict mode for new vm\n+        if (store.strict) {\n+            enableStrictMode(store);\n+        }\n+\n+        if (oldVm) {\n+            if (hot) {\n+                \u002F\u002F dispatch changes in all subscribed watchers\n+                \u002F\u002F to force getter re-evaluation for hot reloading.\n+                store._withCommit(function () {\n+                    oldVm._data.$$state = null;\n+                });\n+            }\n+            Vue.nextTick(function () { return oldVm.$destroy(); });\n+        }\n+    }\n+\n+    function installModule (store, rootState, path, module, hot) {\n+        var isRoot = !path.length;\n+        var namespace = store._modules.getNamespace(path);\n+\n+        \u002F\u002F register in namespace map\n+        if (module.namespaced) {\n+            store._modulesNamespaceMap[namespace] = module;\n+        }\n+\n+        \u002F\u002F set state\n+        if (!isRoot && !hot) {\n+            var parentState = getNestedState(rootState, path.slice(0, -1));\n+            var moduleName = path[path.length - 1];\n+            store._withCommit(function () {\n+                Vue.set(parentState, moduleName, module.state);\n+            });\n+        }\n+\n+        var local = module.context = makeLocalContext(store, namespace, path);\n+\n+        module.forEachMutation(function (mutation, key) {\n+            var namespacedType = namespace + key;\n+            registerMutation(store, namespacedType, mutation, local);\n+        });\n+\n+        module.forEachAction(function (action, key) {\n+            var type = action.root ? key : namespace + key;\n+            var handler = action.handler || action;\n+            registerAction(store, type, handler, local);\n+        });\n+\n+        module.forEachGetter(function (getter, key) {\n+            var namespacedType = namespace + key;\n+            registerGetter(store, namespacedType, getter, local);\n+        });\n+\n+        module.forEachChild(function (child, key) {\n+            installModule(store, rootState, path.concat(key), child, hot);\n+        });\n+    }\n+\n+    \u002F**\n+     * make localized dispatch, commit, getters and state\n+     * if there is no namespace, just use root ones\n+     *\u002F\n+    function makeLocalContext (store, namespace, path) {\n+        var noNamespace = namespace === '';\n+\n+        var local = {\n+            dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._actions[type]) {\n+                        console.error((\"[vuex] unknown local action type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                return store.dispatch(type, payload)\n+            },\n+\n+            commit: noNamespace ? store.commit : function (_type, _payload, _options) {\n+                var args = unifyObjectStyle(_type, _payload, _options);\n+                var payload = args.payload;\n+                var options = args.options;\n+                var type = args.type;\n+\n+                if (!options || !options.root) {\n+                    type = namespace + type;\n+                    if (!store._mutations[type]) {\n+                        console.error((\"[vuex] unknown local mutation type: \" + (args.type) + \", global type: \" + type));\n+                        return\n+                    }\n+                }\n+\n+                store.commit(type, payload, options);\n+            }\n+        };\n+\n+        \u002F\u002F getters and state object must be gotten lazily\n+        \u002F\u002F because they will be changed by vm update\n+        Object.defineProperties(local, {\n+            getters: {\n+                get: noNamespace\n+                    ? function () { return store.getters; }\n+                    : function () { return makeLocalGetters(store, namespace); }\n+            },\n+            state: {\n+                get: function () { return getNestedState(store.state, path); }\n+            }\n+        });\n+\n+        return local\n+    }\n+\n+    function makeLocalGetters (store, namespace) {\n+        var gettersProxy = {};\n+\n+        var splitPos = namespace.length;\n+        Object.keys(store.getters).forEach(function (type) {\n+            \u002F\u002F skip if the target getter is not match this namespace\n+            if (type.slice(0, splitPos) !== namespace) { return }\n+\n+            \u002F\u002F extract local getter type\n+            var localType = type.slice(splitPos);\n+\n+            \u002F\u002F Add a port to the getters proxy.\n+            \u002F\u002F Define as getter property because\n+            \u002F\u002F we do not want to evaluate the getters in this time.\n+            Object.defineProperty(gettersProxy, localType, {\n+                get: function () { return store.getters[type]; },\n+                enumerable: true\n+            });\n+        });\n+\n+        return gettersProxy\n+    }\n+\n+    function registerMutation (store, type, handler, local) {\n+        var entry = store._mutations[type] || (store._mutations[type] = []);\n+        entry.push(function wrappedMutationHandler (payload) {\n+            handler.call(store, local.state, payload);\n+        });\n+    }\n+\n+    function registerAction (store, type, handler, local) {\n+        var entry = store._actions[type] || (store._actions[type] = []);\n+        entry.push(function wrappedActionHandler (payload, cb) {\n+            var res = handler.call(store, {\n+                dispatch: local.dispatch,\n+                commit: local.commit,\n+                getters: local.getters,\n+                state: local.state,\n+                rootGetters: store.getters,\n+                rootState: store.state\n+            }, payload, cb);\n+            if (!isPromise(res)) {\n+                res = Promise.resolve(res);\n+            }\n+            if (store._devtoolHook) {\n+                return res.catch(function (err) {\n+                    store._devtoolHook.emit('vuex:error', err);\n+                    throw err\n+                })\n+            } else {\n+                return res\n+            }\n+        });\n+    }\n+\n+    function registerGetter (store, type, rawGetter, local) {\n+        if (store._wrappedGetters[type]) {\n+            {\n+                console.error((\"[vuex] duplicate getter key: \" + type));\n+            }\n+            return\n+        }\n+        store._wrappedGetters[type] = function wrappedGetter (store) {\n+            return rawGetter(\n+                local.state, \u002F\u002F local state\n+                local.getters, \u002F\u002F local getters\n+                store.state, \u002F\u002F root state\n+                store.getters \u002F\u002F root getters\n+            )\n+        };\n+    }\n+\n+    function enableStrictMode (store) {\n+        store._vm.$watch(function () { return this._data.$$state }, function () {\n+            {\n+                assert(store._committing, \"do not mutate vuex store state outside mutation handlers.\");\n+            }\n+        }, { deep: true, sync: true });\n+    }\n+\n+    function getNestedState (state, path) {\n+        return path.length\n+            ? path.reduce(function (state, key) { return state[key]; }, state)\n+            : state\n+    }\n+\n+    function unifyObjectStyle (type, payload, options) {\n+        if (isObject(type) && type.type) {\n+            options = payload;\n+            payload = type;\n+            type = type.type;\n+        }\n+\n+        {\n+            assert(typeof type === 'string', (\"expects string as the type, but found \" + (typeof type) + \".\"));\n+        }\n+\n+        return { type: type, payload: payload, options: options }\n+    }\n+\n+    function install (_Vue) {\n+        if (Vue && _Vue === Vue) {\n+            {\n+                console.error(\n+                    '[vuex] already installed. Vue.use(Vuex) should be called only once.'\n+                );\n+            }\n+            return\n+        }\n+        Vue = _Vue;\n+        applyMixin(Vue);\n+    }\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the state.\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.\n+     * @param {Object}\n+     *\u002F\n+    var mapState = normalizeNamespace(function (namespace, states) {\n+        var res = {};\n+        normalizeMap(states).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedState () {\n+                var state = this.$store.state;\n+                var getters = this.$store.getters;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapState', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    state = module.context.state;\n+                    getters = module.context.getters;\n+                }\n+                return typeof val === 'function'\n+                    ? val.call(this, state, getters)\n+                    : state[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for committing the mutation\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapMutations = normalizeNamespace(function (namespace, mutations) {\n+        var res = {};\n+        normalizeMap(mutations).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedMutation () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F Get the commit method from store\n+                var commit = this.$store.commit;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    commit = module.context.commit;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [commit].concat(args))\n+                    : commit.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for getting the getters\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} getters\n+     * @return {Object}\n+     *\u002F\n+    var mapGetters = normalizeNamespace(function (namespace, getters) {\n+        var res = {};\n+        normalizeMap(getters).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            \u002F\u002F The namespace has been mutated by normalizeNamespace\n+            val = namespace + val;\n+            res[key] = function mappedGetter () {\n+                if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {\n+                    return\n+                }\n+                if (!(val in this.$store.getters)) {\n+                    console.error((\"[vuex] unknown getter: \" + val));\n+                    return\n+                }\n+                return this.$store.getters[val]\n+            };\n+            \u002F\u002F mark vuex getter for devtools\n+            res[key].vuex = true;\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Reduce the code which written in Vue.js for dispatch the action\n+     * @param {String} [namespace] - Module's namespace\n+     * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.\n+     * @return {Object}\n+     *\u002F\n+    var mapActions = normalizeNamespace(function (namespace, actions) {\n+        var res = {};\n+        normalizeMap(actions).forEach(function (ref) {\n+            var key = ref.key;\n+            var val = ref.val;\n+\n+            res[key] = function mappedAction () {\n+                var args = [], len = arguments.length;\n+                while ( len-- ) args[ len ] = arguments[ len ];\n+\n+                \u002F\u002F get dispatch function from store\n+                var dispatch = this.$store.dispatch;\n+                if (namespace) {\n+                    var module = getModuleByNamespace(this.$store, 'mapActions', namespace);\n+                    if (!module) {\n+                        return\n+                    }\n+                    dispatch = module.context.dispatch;\n+                }\n+                return typeof val === 'function'\n+                    ? val.apply(this, [dispatch].concat(args))\n+                    : dispatch.apply(this.$store, [val].concat(args))\n+            };\n+        });\n+        return res\n+    });\n+\n+    \u002F**\n+     * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    var createNamespacedHelpers = function (namespace) { return ({\n+        mapState: mapState.bind(null, namespace),\n+        mapGetters: mapGetters.bind(null, namespace),\n+        mapMutations: mapMutations.bind(null, namespace),\n+        mapActions: mapActions.bind(null, namespace)\n+    }); };\n+\n+    \u002F**\n+     * Normalize the map\n+     * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]\n+     * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]\n+     * @param {Array|Object} map\n+     * @return {Object}\n+     *\u002F\n+    function normalizeMap (map) {\n+        return Array.isArray(map)\n+            ? map.map(function (key) { return ({ key: key, val: key }); })\n+            : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })\n+    }\n+\n+    \u002F**\n+     * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.\n+     * @param {Function} fn\n+     * @return {Function}\n+     *\u002F\n+    function normalizeNamespace (fn) {\n+        return function (namespace, map) {\n+            if (typeof namespace !== 'string') {\n+                map = namespace;\n+                namespace = '';\n+            } else if (namespace.charAt(namespace.length - 1) !== '\u002F') {\n+                namespace += '\u002F';\n+            }\n+            return fn(namespace, map)\n+        }\n+    }\n+\n+    \u002F**\n+     * Search a special module from store by namespace. if module not exist, print error message.\n+     * @param {Object} store\n+     * @param {String} helper\n+     * @param {String} namespace\n+     * @return {Object}\n+     *\u002F\n+    function getModuleByNamespace (store, helper, namespace) {\n+        var module = store._modulesNamespaceMap[namespace];\n+        if (!module) {\n+            console.error((\"[vuex] module namespace not found in \" + helper + \"(): \" + namespace));\n+        }\n+        return module\n+    }\n+\n+    var index = {\n+        Store: Store,\n+        install: install,\n+        version: '3.1.0',\n+        mapState: mapState,\n+        mapMutations: mapMutations,\n+        mapGetters: mapGetters,\n+        mapActions: mapActions,\n+        createNamespacedHelpers: createNamespacedHelpers\n+    };\n+\n+    return index;\n+\n }));\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-if (!Object.prototype.watchChange) {\r\n-    var isFunction = function (fn) {\r\n-        return fn && {}.toString.call(fn) === '[object Function]';\r\n-    };\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'watchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop, handler) {\r\n-                var obj = this;\r\n-\r\n-                function x(prop, handler) {\r\n-                    var oldval = obj[prop],\r\n-                        newval = oldval,\r\n-                        getter = function () {\r\n-                            return newval;\r\n-                        },\r\n-                        setter = function (val) {\r\n-                            return newval = handler.call(obj, prop, oldval, val);\r\n-                        };\r\n-\r\n-                    if (delete obj[prop]) {\r\n-                        Object.defineProperty(\r\n-                            obj,\r\n-                            prop,\r\n-                            {\r\n-                                get: getter,\r\n-                                set: setter,\r\n-                                enumerable: true,\r\n-                                configurable: true\r\n-                            }\r\n-                        );\r\n-                    }\r\n-                }\r\n-\r\n-                if (isFunction(prop)) {\r\n-                    for (var k in this) {\r\n-                        new x(k, prop);\r\n-                    }\r\n-                } else {\r\n-                    new x(prop, handler)\r\n-                }\r\n-            }\r\n-        });\r\n-}\r\n-\r\n-if (!Object.prototype.unwatchChange) {\r\n-    Object.defineProperty(\r\n-        Object.prototype,\r\n-        'unwatchChange',\r\n-        {\r\n-            enumerable: false,\r\n-            configurable: true,\r\n-            writable: false,\r\n-            value: function (prop) {\r\n-                var val = this[prop];\r\n-                delete this[prop];\r\n-                this[prop] = val;\r\n-            }\r\n-        }\r\n-    );\r\n+if (!Object.prototype.watchChange) {\n+    var isFunction = function (fn) {\n+        return fn && {}.toString.call(fn) === '[object Function]';\n+    };\n+    Object.defineProperty(\n+        Object.prototype,\n+        'watchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop, handler) {\n+                var obj = this;\n+\n+                function x(prop, handler) {\n+                    var oldval = obj[prop],\n+                        newval = oldval,\n+                        getter = function () {\n+                            return newval;\n+                        },\n+                        setter = function (val) {\n+                            return newval = handler.call(obj, prop, oldval, val);\n+                        };\n+\n+                    if (delete obj[prop]) {\n+                        Object.defineProperty(\n+                            obj,\n+                            prop,\n+                            {\n+                                get: getter,\n+                                set: setter,\n+                                enumerable: true,\n+                                configurable: true\n+                            }\n+                        );\n+                    }\n+                }\n+\n+                if (isFunction(prop)) {\n+                    for (var k in this) {\n+                        new x(k, prop);\n+                    }\n+                } else {\n+                    new x(prop, handler)\n+                }\n+            }\n+        });\n+}\n+\n+if (!Object.prototype.unwatchChange) {\n+    Object.defineProperty(\n+        Object.prototype,\n+        'unwatchChange',\n+        {\n+            enumerable: false,\n+            configurable: true,\n+            writable: false,\n+            value: function (prop) {\n+                var val = this[prop];\n+                delete this[prop];\n+                this[prop] = val;\n+            }\n+        }\n+    );\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.min.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.min.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.min.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fassets\u002Fsrc\u002Fjs\u002Fvendor\u002Fwatch.min.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-if(!Object.prototype.watchChange){var isFunction=function(e){return e&&\"[object Function]\"==={}.toString.call(e)};Object.defineProperty(Object.prototype,\"watchChange\",{enumerable:!1,configurable:!0,writable:!1,value:function(e,t){var n=this;function r(e,t){var r=n[e],i=r;delete n[e]&&Object.defineProperty(n,e,{get:function(){return i},set:function(c){return i=t.call(n,e,r,c)},enumerable:!0,configurable:!0})}if(isFunction(e))for(var i in this)new r(i,e);else new r(e,t)}})}Object.prototype.unwatchChange||Object.defineProperty(Object.prototype,\"unwatchChange\",{enumerable:!1,configurable:!0,writable:!1,value:function(e){var t=this[e];delete this[e],this[e]=t}});\r\n+if(!Object.prototype.watchChange){var isFunction=function(e){return e&&\"[object Function]\"==={}.toString.call(e)};Object.defineProperty(Object.prototype,\"watchChange\",{enumerable:!1,configurable:!0,writable:!1,value:function(e,t){var n=this;function r(e,t){var r=n[e],i=r;delete n[e]&&Object.defineProperty(n,e,{get:function(){return i},set:function(c){return i=t.call(n,e,r,c)},enumerable:!0,configurable:!0})}if(isFunction(e))for(var i in this)new r(i,e);else new r(e,t)}})}Object.prototype.unwatchChange||Object.defineProperty(Object.prototype,\"unwatchChange\",{enumerable:!1,configurable:!0,writable:!1,value:function(e){var t=this[e];delete this[e],this[e]=t}});\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fchangelog.txt \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fchangelog.txt\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fchangelog.txt\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fchangelog.txt\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1071 +1,1071 @@\n-= 4.2.7.5 (2024-12-17) =\r\n-~ Added: option Price prefix, Price suffix for course.\r\n-~ Fixed: shortcode [learn_press_button_course].\r\n-~ Fixed: error status item's course, case option course set \"no require enroll\" (user enrolled).\r\n-~ Fixed: error lose tab on Profile when install SiteOrigin plugin.\r\n-~ Updated: library TomSelect, ChartJS to the latest.\r\n-\r\n-= 4.2.7.4 (2024-12-03) =\r\n-~ Fixed: image cover profile with theme Twenty Five.\r\n-~ Fixed: error some sites not show notes(Waring) on the Admin Dashboard.\r\n-~ Fixed: security.\r\n-~ Tweak order show material on the item lesson.\r\n-~ Tweak load text domain compatible with WP 6.7 and later.\r\n-~ Tweak: format_human_time_diff method.\r\n-~ Tweak: UserItemModel, UserCourseModel, UserModel, CourseModel  classes.\r\n-~ Deprecated: get_info_extra_for_fast_query method.\r\n-~ Deprecated: _learn_press_usort_terms_by_ID, learn_press_course_item_format_exclude, learn_press_get_course_curriculum, learn_press_is_enrolled_course, learn_press_get_user_course_statuslearn_press_is_free_course, learn_press_course_enroll_required, learn_press_search_post_excerpt, learn_press_course_add_support_item_type, learn_press_course_add_support_item_type, learn_press_get_user_question_answer, need_to_updating, learn_press_get_course_sections, lean_press_get_course_sections, learn_press_get_course_item_url, learn_press_edit_item_link, learn_press_get_course_results_tooltip.\r\n-~ Set cache get instructors API for App.\r\n-~ Added: get_i18n_string_plural method on the class LP_Helper.\r\n-\r\n-= 4.2.7.3 (2024-11-12) =\r\n-~ Fixed: error course private admin\u002Fauthor can't see on the frontend.\r\n-~ Fixed: only show label \"Final\" of Quiz when choose \"Evaluate via results of the final quiz\".\r\n-~ Fixed: send mail enroll for user Guest not exists user.\r\n-~ Tweak: enroll\u002Fpurchase course buttons.\r\n-~ Tweak: condition can enroll\u002Fpurchase course.\r\n-~ Tweak: API enroll\u002Fpurchase course.\r\n-~ Tweak: when order completed.\r\n-~ Tweak: set upload Avatar to PNG, instead of JPG.\r\n-~ Deprecated: hooks learn-press\u002Fuser\u002Fcan-enroll-course, learn-press\u002Fuser\u002Fcan-purchase-course. Replace to learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse, learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse.\r\n-\r\n-= 4.2.7.2 (2024-10-21) =\r\n-~ Fixed: security.\r\n-~ Fixed: set size for Gravatar user.\r\n-~ Fixed: slug item's course use urldecode when edited.\r\n-~ Fixed: display name courses has special character Mobile.\r\n-~ Fixed: error save Enable\u002FDisable all emails.\r\n-~ Added: get_all_items method for LP_Order class, for fix case \"Paid Memberships\" assign more than 50 courses.\r\n-~ Added: cover image feature on the Profile page.\r\n-~ Tweak: handle tomSelect.\r\n-~ Tweak: class LP_Datetime.\r\n-~ Tweak: style page Archive Courses.\r\n-~ Tweak: style page Profile.\r\n-~ Tweak: layout Offline course.\r\n-~ Update: lp icon fonts.\r\n-\r\n-= 4.2.7.1 (2024-09-11) =\r\n-~ Fixed: security.\r\n-~ Use TomSelect instead of Select2 on settings.\r\n-~ Fixed: minor bugs.\r\n-\r\n-= 4.2.7 (2024-08-27) =\r\n-~ Added: feature course offline.\r\n-~ Added: duration info for App API list courses.\r\n-~ Tweak: API get instructor info.\r\n-~ Fixed: error empty email content reset password.\r\n-~ Fixed: error empty image header.\r\n-~ Fixed: error create new section not send section_order.\r\n-~ Fixed: case search LP orders by user.\r\n-~ Fixed: error sort by total on list orders.\r\n-\r\n-= 4.2.6.9.4 (2024-08-07) =\r\n-~ Fixed: security.\r\n-\r\n-= 4.2.6.9.3 (2024-08-02) =\r\n-~ Tweak: added courses to LP Order manual.\r\n-~ Tweak: list orders status trash.\r\n-~ Tweak: message out of stock, no enroll requirement.\r\n-~ Fixed: material lesson display with case no enroll requirement.\r\n-~ Fixed: error not show email on Order detail when buy with Guest.\r\n-~ Fixed: error can't remove empty fields on \"Extra Information\" options.\r\n-~ Fixed: error clean break row (\\n) on \"Featured review\" option.\r\n-~ Fixed: query Statistics by role.\r\n-~ Fixed: error max student when user bought.\r\n-~ Fixed: case no enroll requirement with course price.\r\n-~ Remove: jquery-ui-timepicker-addon jquery library.\r\n-\r\n-= 4.2.6.9.2 (2024-07-25) =\r\n-~ Fixed: error lose section when update section of course.\r\n-\r\n-= 4.2.6.9.1 (2024-07-24) =\r\n-~ Fixed: error check paths override of theme.\r\n-\r\n-= 4.2.6.9 (2024-07-24) =\r\n-~ Fixed: security.\r\n-~ Optimize courses.\r\n-~ Create table learnpress_courses from posts to query faster.\r\n-~ Tweak: choose users when create manual LP Order.\r\n-~ Tweak: filed search instructor on list courses, orders, lessons, quizzes,...\r\n-~ Tweak: get options list author via API when edit courses (make edit load screen edit courses faster).\r\n-~ Fixed: show tab material with course no require enroll.\r\n-\r\n-= 4.2.6.8.2 (2024-06-28) =\r\n-~ Added: function retrieve_password_message override message reset password.\r\n-~ Fixed: security.\r\n-~ Fixed: style login\u002Fregister for Divi theme.\r\n-~ Fixed: responsive curriculum.\r\n-\r\n-= 4.2.6.8.1 (2024-06-03) =\r\n-~ Fixed: security.\r\n-~ Fixed: query by status on list LP Orders.\r\n-~ Fixed: minor bugs.\r\n-~ Added: translate text grid, list.\r\n-\r\n-= 4.2.6.8 (2024-05-27) =\r\n-~ Fixed: error create answers question.\r\n-~ Fixed: minor bugs.\r\n-\r\n-= 4.2.6.7 (2024-05-20) =\r\n-~ Fixed: security.\r\n-~ Fixed: error conflict with CookieYes plugin.\r\n-~ Fixed: sale course price with config timezone of WordPress.\r\n-~ Optimize: style.\r\n-~ Remove Font Awesome and replace it with Font LearnPress.\r\n-~ Tweak: query search LP Order.\r\n-\r\n-= 4.2.6.6 (2024-05-09) =\r\n-~ Fixed: security.\r\n-~ Fixed: delete user item when remove order item.\r\n-~ Tweak: material files feature.\r\n-~ Excluded: questions from search via param ?s of WordPress.\r\n-~ Compare the sale dates of courses through WordPress's Timezone.\r\n-\r\n-= 4.2.6.5 (2024-04-17) =\r\n-~ Fixed: security.\r\n-~ Added: option \"Load courses of subcategory\", get all the courses in the child category that are not selected in the parent category.\r\n-~ Added: option \"Number level category want to show\" for widget course filter.\r\n-~ Added: option \"show\u002Fhide author Admin on list instructors\".\r\n-\r\n-= 4.2.6.4 (2024-04-01) =\r\n-~ Compatible with WordPress 6.5.\r\n-~ Fixed: security.\r\n-~ Fixed: error remove question_anwsermeta when create new post question.\r\n-~ Fixed: compatible PHP8 on get_materials_by_item method.\r\n-~ Fixed: minor bug save order on the backend.\r\n-~ Fixed: error wrong link continue item, reason by old data still save item assigned to course, but deleted on post.\r\n-~ Fixed: minor bug profile shortcode.\r\n-~ Fixed: error shortcode list courses when add on Elementor.\r\n-~ Deprecated: get_downloadable_material method.\r\n-\r\n-= 4.2.6.3 (2024-02-29) =\r\n-~ Fixed: error wrong avatar's instructor.\r\n-~ Fixed: error page Profile with user not login.\r\n-\r\n-= 4.2.6.2 (2024-02-28) =\r\n-~ Added: param lang on url when submit filter courses.\r\n-~ Added: ProfileOrdersTemplate show layout orders on the Profile page.\r\n-~ Tweak: get_first_item_id method.\r\n-~ Tweak: methods Profile, templates Profile.\r\n-~ Fixed: error js hiddenQuestions.find not a function.\r\n-~ Fixed: avatar url profile with old value.\r\n-~ Fixed: error payment PayPal with Currency EUR.\r\n-~ Check user current can view content of tab Profile.\r\n-~ Deprecated hook 'learn-press\u002Fprofile\u002Forders', dashboard_featured_courses, dashboard_latest_courses, tab_dashboard methods.\r\n-\r\n-= 4.2.6.1 (2024-02-20) =\r\n-~ Fixed: missing translate on \"html_count_student\" function.\r\n-~ Fixed: missing translate on profile avatar function.\r\n-~ Fixed: error when only has a payment method, will be not show payment form.\r\n-~ Fixed: error widget list courses elementor with theme override content-course.php.\r\n-~ Fixed: course query filter with polylang.\r\n-\r\n-= 4.2.6 (2024-01-29) =\r\n-~ Tweak: courses js.\r\n-~ Tweak: course filter js.\r\n-~ Added: some class has -no-css for purpose not set style on this class.\r\n-~ Added: fake student on count students show on list courses.\r\n-~ Added: get_tags function for single courses.\r\n-~ Tweak: checkout js, not use serializeJSON() of JQuery.\r\n-~ Added: defer js some script.\r\n-~ Fixed: add param lang if exist for loadAjax.\r\n-~ Added: option \"Class of list courses want to filter\" on the Widget Filter Courses.\r\n-~ Added: icon drag material.\r\n-~ Remove callback hook learn-press\u002Fbefore-courses-loop-item, learn-press\u002Fafter-courses-loop-item.\r\n-~ Fixed: code searching post by taxonomies make error block Woocommerce.\r\n-\r\n-= 4.2.5.9 (2024-01-09) =\r\n-~ Added: show notification addons bought near expire support.\r\n-~ Fixed: error \"Fib in blank\" question case duplicate, when submit quiz wrong result.\r\n-~ Fixed widget course filter: error WPML handle wrong if link send not param lang.\r\n-\r\n-= 4.2.5.8 (2023-12-25) =\r\n-~ Fixed: security.\r\n-~ Fixed: translate some text.\r\n-~ Tweak: layout list courses, set hooks for override, will soon stop support override template file.\r\n-~ Fixed: clear cache quiz question_ids when add\u002Fremove\u002Fdelete\u002Fclone question on the quiz.\r\n-~ Added: code use for flutter.\r\n-\r\n-= 4.2.5.7 (2023-12-06) =\r\n-~ Added: new feature \"Assign\u002FUnassign Courses\" on the Tools Backend.\r\n-~ Added: courses filter support multiple language.\r\n-~ Dev: widget elementor filter courses.\r\n-~ Dev: widget elementor list courses.\r\n-~ Fixed: save sale price.\r\n-\r\n-= 4.2.5.6 (2023-11-24) =\r\n-~ Tweak: logic load Widget Filter Courses.\r\n-~ Dev: assign\u002Funassign course to user.\r\n-~ Fixed: error still show price when user has bought course but not start course.\r\n-~ Fixed: search suggest courses on Widget Filter Courses.\r\n-~ Fixed: not call function calculate price when edit course with user is instructor.\r\n-\r\n-= 4.2.5.5 (2023-11-16) =\r\n-~ Fixed: security issue.\r\n-~ Added: new feature Statistic on the Backend.\r\n-~ Fixed: minor bug material.\r\n-~ Added: strategy defer\u002Fasync for some script (WP 6.3 or higher will run).\r\n-~ Fixed: label 'Free' not show on the single free course.\r\n-~ Fixed: error sanitize key, make certificate can't save.\r\n-\r\n-= 4.2.5.4 (2023-11-07) =\r\n-~ Fixed: security issue.\r\n-~ Tweak: display Category for filter courses.\r\n-~ Added: attribute disable if filter count = 0.\r\n-~ Tweak: widgets.js use fetch instead of wp.apiFetch.\r\n-~ Added: page tool clear cache.\r\n-\r\n-= 4.2.5.3 (2023-11-02) =\r\n-~ Fixed: security issue.\r\n-~ Tweak: only show 1 level categories right behind cate parent, on the widget \"Course Filter\".\r\n-~ Added: method count students enrolled of course.\r\n-~ Added: method count courses free.\r\n-~ Added: cache for count.\r\n-\r\n-= 4.2.5.3 (2023-10-27) =\r\n-~ Fixed: security issue.\r\n-~ Fixed: miss hook start quiz, retake quiz.\r\n-~ Fixed: minor bug material.\r\n-~ Fixed: error same course when access any single course.\r\n-~ Fixed: error don't hide info price\u002Ffree when user enrolled course.\r\n-\r\n-= 4.2.5.2 (2023-10-24) =\r\n-~ Fixed: security issue.\r\n-~ Compatible with WP 6.4.\r\n-\r\n-= 4.2.5 (2023-10-19) =\r\n-~ Tweak: start quiz, retake quiz.\r\n-~ Tweaks: icon social.\r\n-~ Fixed: error font Arabic when export invoice.\r\n-~ Fixed: minus point when skip question.\r\n-~ Fixed: error duplicate message \"out of stock\" on the single course.\r\n-~ Fixed: error not show material of lesson.\r\n-~ Fixed: error set 0 to not show material.\r\n-\r\n-= 4.2.4 (2023-10-03) =\r\n-~ Fixed: error Paypal Standard (use IPN), replace to use API REST, client ID, client secret.\r\n-~ Clean resource.\r\n-~ Check load Widget Elementor on hooks plugins_loaded.\r\n-~ Tweak: load Curriculum when edit course, query on Frontend.\r\n-~ Tweak: layout single instructor.\r\n-~ Fixed: error set Section Per Page = 0 or \u003C -1.\r\n-~ Fixed: error set load curriculum item = 0.\r\n-~ Tweak: logic create\u002Fdelete user_item.\r\n-\r\n-= 4.2.3.6 (2023-09-18) =\r\n-~ Tweak: display Date Time, time zone by format of WP.\r\n-~ Fixed: count Progress course on the Single Item.\r\n-~ Fixed: current item active on the Curriculum.\r\n-~ Fixed: error not show price course when user repurchase course.\r\n-\r\n-= 4.2.3.5 (2023-09-14) =\r\n-~ Tweak: checkout.\r\n-~ Fixed: case start quiz but user_item_id = 0.\r\n-~ Added: dynamic tag Course for Elementor.\r\n-~ Tweak: breadcrumb.\r\n-~ Set 404 if user not login, view page single instructor\u002Fno-slug-instructor.\r\n-~ Fixed: expire date, end date format i18n on Profile Page.\r\n-\r\n-= 4.2.3.4 (2023-08-24) =\r\n-~ Fixed: error when use same namespace class JWT library, with some plugin like Google Listings and Ads.\r\n-\r\n-= 4.2.3.3 (2023-08-08) =\r\n-~ Added: feature choose type Pagination when load courses on page Archive: navigation Number, Load more, Infinite scroll.\r\n-~ Added: feature \"Downloadable Materials\", manager can upload files document for each course, lesson, so student can download it.\r\n-~ Fixed: error with WPML, show wrong list courses with lang.\r\n-~ Fixed: sidebar Course Filter show wrong with Firefox.\r\n-~ Fixed: error fonts tiny with theme OceanWP.\r\n-~ Fixed: error 404 when view item's course with Polylang.\r\n-~ Fixed: SEO, show title of Category & Tag of Courses.\r\n-~ Tweak: checkout function.\r\n-\r\n-= 4.2.3.2 (2023-07-19) =\r\n-~ Added: widget filter courses, option enable fields want to filter, sort fields, option load widget on REST.\r\n-~ Added: Search course suggest (AJAX).\r\n-~ Added: shortcode filter courses [learn_press_filter_course].\r\n-~ Fixed: error install\u002Fupdate Addon.\r\n-\r\n-= 4.2.3.1 (2023-07-05) =\r\n-~ Fixed: Security.\r\n-~ Item Course: completed, display Date Time by format WP.\r\n-~ Tweak: message of LearnPress.\r\n-~ Fixed: function “Add course to Order manual”\r\n-\r\n-= 4.2.3 (2023-07-03) =\r\n-~ Added: page list instructors.\r\n-~ Added: page single instructor.\r\n-~ Added: option set number instructor per page.\r\n-~ Added: shortcode show list instructors [learn_press_instructors].\r\n-~ Added: shortcode show single instructor [learn_press_single_instructor].\r\n-~ Auto add shortcode if page is list instructors or single instructor, if enable Elementor will not auto add.\r\n-~ Added: Widgets For Elementor: list instructors, instructor title, instructor description.\r\n-~ Added: Template default for list instructors on path \"config\u002Felementor\u002Ftemplate-default\", can import via Elementor.\r\n-~ Tweak: Widgets For Elementor: list courses, become a teacher, login form, register form.\r\n-~ Profile: added tab My Courses, display course attend of User.\r\n-~ Profile: tab My Courses, display statistic: total course enrolled, course in-progress, course finish, course passed, course failed.\r\n-~ Profile: tweak tab Courses, display course created by User (Admin, Instructor).\r\n-~ Profile: tab Courses, display statistic: total course created, course publish, course pending, total student, student in-progress.\r\n-~ Tweak: set default section_per_page, course_item_per_page = -1 to load full.\r\n-~ Added: format_human_time_diff method.\r\n-~ Tweak: get cart from session.\r\n-~ Check: $course->get_instructor() is null.\r\n-~ Added: hook do_action( 'lp\u002Forder-completed\u002Fupdate\u002Fuser-item', $item, $order ), for case buy item not course.\r\n-~ Added: hook do_action( 'lp\u002Forder-pending\u002Fupdate\u002Fuser-item', $item, $order ), for case buy item not course.\r\n-~ Added: nest_elements, print_sections methods on class Template, for easy override template without override file.\r\n-~ Tweak: statistic student\u002Finstructor on profile page.\r\n-~ Added: method \"count_courses_of_author\" instead \"count_courses_publish_of_author\"\r\n-~ Tweak: method \"count_status_by_items\"\r\n-~ Profile: added text \"upload\" translate on localize script.\r\n-~ Apply: add internal scripts to head on page List Instructors.\r\n-~ Fixed: error buy item with Guest, order is no item.\r\n-~ Fixed: Security Broken Access Control.\r\n-~ Added: hook login\u002Fregister of WP on page LP Checkout for plugin captcha display.\r\n-~ Fixed: error 404 function comment on the lesson.\r\n-\r\n-= 4.2.2.4 (2023-04-04) =\r\n-~ Compatible theme Gutenberg.\r\n-~ Compatible WP 6.2.\r\n-~ Fixed: auto add shortcode Profile.\r\n-~ Show notification: Addons has new version.\r\n-~ Fixed: error buy with Guest display pending Order.\r\n-~ Tweak: shortcode learn_press_button_course.\r\n-~ Fixed: error display title on mobile app.\r\n-~ Lesson: stop support post-formats.\r\n-\r\n-= 4.2.2.3 (2023-03-21) =\r\n-~ Fixed: some error with Profile, LP_Profile_Tabs class.\r\n-~ Fixed: make some page builder like: elementor, visual composer work incorrect.\r\n-~ Remove implements ArrayAccess of LP_Query_List_Table class (to compatible with PHP8.1).\r\n-\r\n-= 4.2.2.2 (2023-03-09) =\r\n-~ Fixed: permalink item 404 when install \"YoastSeo\" plugin.\r\n-~ Fixed: error not show tab Avatar on Profile Page.\r\n-~ Modified: rewrite rules.\r\n-\r\n-= 4.2.2.1 (2023-03-03) =\r\n-~ Fixed: error link course with '%course_category%', on screen list courses Backend.\r\n-~ Fixed: some theme load only course on Archive Course Page.\r\n-~ Fixed: error not save basic info on Profile page.\r\n-~ Fixed: url current has symbol like الاعدادات.\r\n-~ Fixed: error not show message when save info Profile.\r\n-\r\n-= 4.2.2 (2023-03-01) =\r\n-~ Optimized performance.\r\n-~ Optimize: rewrite \"add_rewrite_rules\" method, only call on \"admin_init\" hook.\r\n-~ Optimize: flush_rewrite_rules only when save settings.\r\n-~ Optimize: not call get_available_payment_gateways on hook 'wp_loaded'.\r\n-~ Optimize: not call learn_press_get_current_profile_tab on hook 'init'.\r\n-~ Optimize: add thim_cache table for cache (apply for site not install plugin Object Cache - or cache not working).\r\n-~ Optimize: set\u002Fget\u002Fclear cache for count total students enrolled.\r\n-~ Optimize: set\u002Fget\u002Fclear cache user_course (user_items) data.\r\n-~ Optimize: only load class REST when call on url of API.\r\n-~ Optimize: modified set cookie session for user Guest(user not login).\r\n-~ Added: a slash to the end of the course item link.\r\n-~ Fixed: some functions make out of memory.\r\n-~ Fixed: some functions use static not correct make out of memory.\r\n-~ Deprecated \"learn_press_get_the_course\" function, replace with \"learn_press_get_course\" function.\r\n-~ Deprecated: \"learn_press_get_current_url\" function, replace with \"LP_Helper::getUrlCurrent\" method.\r\n-~ Temporary comment _get_theme_info, plugin info, because very low.\r\n-~ Comment: hook learn_press_lesson_comment_form_fields, learn_press_get_only_content_permalink, learn_press_lesson_before_delete_post\r\n-\r\n-= 4.2.1.1 (2023-02-04) =\r\n-~ Fixed: error js when add user on LP Order manual.\r\n-~ Modified: Not translate course slug base (permalink).\r\n-\r\n-= 4.2.1 (2023-02-03) =\r\n-~ Added: feature manager addons of LearnPress, download, update, activate, deactivate.\r\n-~ Fixed: style button.\r\n-~ Fixed: deprecated register widget elementor.\r\n-~ Added: 'get_evaluation_type' function.\r\n-~ Modified: 'get_passing_condition' function.\r\n-~ Added: 'get_evaluation_type' function.\r\n-~ Added: hook 'lp\u002Fcourse\u002Fextra-info\u002Fbefore-save'.\r\n-~ Added: hook 'learn-press\u002Flogin-redirect'.\r\n-~ Added: hook 'learn-press\u002Fregister-redirect'.\r\n-~ Added: \"status\" row on LP Order Receiver.\r\n-~ Fixed: error not set pagination page numbers questions when retake quiz.\r\n-~ Modified: \"set_title_pages\" function.\r\n-~ Modified: \"get_order_status_html\" function, now can translate status LP Order.\r\n-~ Fixed: error \"load more\" on Profile page.\r\n-~ Fixed: error can't set Sale price to 0.\r\n-~ Modified: step of input Passing Grade from 1 to 0.01.\r\n-\r\n-= 4.2.0 (2022-12-20) =\r\n-~ Fixed: compatibility with WordPress PHP 8.1.\r\n-~ Not implements ArrayAccess, Iterator, Countable of PHP on classes: LP_Datetime, LP_Session_Handler, LP_User_Item_Course, LP_User_Item, LP_Quiz_Results, LP_Course_Item, LP_Quiz, LP_Array_Access, LP_Profile_Tabs.\r\n-~ Except class LP_Query_List_Table we still keep implements ArrayAccess (will notice the warning, but don't worry, you only need to disable WP_DEBUG mode), because addons: learnpress-h5p(version 4.0.1 and lower), learnpress-assignment(version 4.0.7 and lower) require it. So you need to update to the higher version of these plugins to make sure.\r\n-~ Modified: LP_Datetime, deprecated method: toLocal, toRFC822, toUnix, setGMT, getSqlNullDate, addDuration, getPeriod.\r\n-~ Deprecated: get_time_remaining, get_time of the class LP_User_Item, get_finishing_type of the class LP_User_Item_Course.\r\n-~ Deprecated: get_course_remaining_time on the class LP_Abstract_User.\r\n-~ Modified: get_expiration_time, deprecated param $format (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F17502a02d5328c399f33ea1219f0c9e71f1a257d'>17502a0\u003C\u002Fa>).\r\n-~ Modified: class LP_Question_True_Or_False, LP_Question_Single_Choice, LP_Question_Multi_Choice, LP_Question_Fill_In_Blanks (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc'>3af1d1c\u003C\u002Fa>).\r\n-~ Modified: class LP_Question, deprecated method: _get_default_answers, _filter_meta_box_meta, update_answer_orders (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc'>3af1d1c\u003C\u002Fa>)\r\n-~ Modified: method 'get_answers' of class LP_Question (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc#diff-24bccff44021f19220835ca960719a15beb4bbc8d3ffea086cccd6d42054ec7cR633'>3af1d1c\u003C\u002Fa>)\r\n-~ Deprecated: 'learn_press_course_question_permalink_friendly' function.\r\n-~ Added: 'LP_Question_Cache', LP_Session_Filter class.\r\n-~ Commented: 'learn_press_mark_user_just_logged_in' function.\r\n-~ Not store key 'order_awaiting_payment' in session, you need update 'learnpress-certificate' addon to version 4.0.4 or higher.\r\n-~ Not call: 'learn_press_clear_cart_after_payment' on hook 'get_header'.\r\n-~ Not call: 'learn_press_custom_checkout_cart' on hook 'learn_press_checkout_cart'.\r\n-~ Deprecated: 'learn_press_add_order' function.\r\n-~ Deprecated: learn_press_generate_transaction_object function.\r\n-~ Modified: LP_Shortcode_Checkout class.\r\n-~ Fixed: shortcode [learn_press_checkout] working right.\r\n-~ Deprecated: 'LP_Request_Handler' class, your need to update addons 'Course Review' (version 4.0.4 or higher), 'Wishlist' (version 4.0.4 or higher).\r\n-~ Not call 'learn_press_set_user_cookie_for_guest' function on hook 'wp'.\r\n-~ Commented: 'set_cookie' method on class LP_Request. \u003Ca href=''>c12c4b54\u003C\u002Fa>\r\n-~ Modified: 'LP_Session_Handler' class (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002Fc12c4b546548b750c3d05cb108162b3bee458d9b'>c12c4b54\u003C\u002Fa>).\r\n-~ Optimized: handle session.\r\n-~ Only set the cookie when the user does not log in.\r\n-~ When a user login is successful, the previous session of the guest user is deleted.\r\n-~ When a user logs out, expired sessions are deleted.\r\n-~ Modified: 'save_data' method of class LP_Session_Handler (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002Fc12c4b546548b750c3d05cb108162b3bee458d9b'>c12c4b5\u003C\u002Fa>).\r\n-~ Modified: 'get_cart_from_session', 'get_session_data', 'save_data' methods on class LP_Session_Handler.\r\n-~ Change name 'get_session' method to 'get_session_by_customer_id'.\r\n-~ Modified: 'update_session_timestamp', 'delete_session' methods on class LP_Session_Handler.\r\n-~ Modified: 'LP_Cart', optimize how to set session for cart, get cart items when called, instance of set on hook 'wp_loaded' always call, not call 'set_cart_cookies' when 'add_to_cart' method called.\r\n-~ Modified: 'calculate_totals' on class LP_Cart.\r\n-~ Deprecated: method 'get_cart_for_session' on class LP_Cart.\r\n-~ Modified: 'LP_Profile_Tabs' class.\r\n-~ Replace all access via array to fields and methods of classes LP_Query_List_Table, LP_Profile, LP_Profile_Tab.\r\n-~ Deprecated: 'offsetExists', 'offsetGet', 'get_current_question', 'get_question_position', 'check_question', 'get_question_link' methods LP_Quiz class.\r\n-~ Modified: 'create_order' method on class 'LP_Checkout'.\r\n-~ Deprecated: 'instructions' method on 'LP_Gateway_Offline_Payment' class.\r\n-~ Moved: settings permalink Profile to tab Permalinks.\r\n-~ Fixed security: inject SQL (CVE-2022-45820).\r\n-~ Fixed security: XSS.\r\n-~ Fixed: styles Backend, Frontend.\r\n-~ Remove save lesson preview on list lessons on the Backend.\r\n-~ Remove sortable between multiple section.\r\n-~ Modified: method \"list_courses\", change how call the template.\r\n-~ Checked: price is valid.\r\n-~ Fixed: search course in term with Polylang.\r\n-~ Modified: statistic of LP Order.\r\n-~ Checked: MathJax.Hub undefined.\r\n-~ Fixed: error json syntax API search courses, curriculum.\r\n-\r\n-= 4.1.7.3.2 (2022-11-18) - \u003Ca href='https:\u002F\u002Fthimpress.com\u002Flearnpress-v4-1-7-3-2-update\u002F' target='_blank' rel='noopener'>View detail\u003C\u002Fa> =\r\n-~ Added: tab permalink option.\r\n-~ Modified: remove border style on the tab single course.\r\n-~ Modified: style popup complete item.\r\n-~ Show: notice check wp_remote_get if the call fail.\r\n-~ Show: notice if LearnPress has beta version.\r\n-~ Changed: text 'Enable' to 'Sticky Quiz Paging' on the Advanced Settings.\r\n-\r\n-= 4.1.7.3.1 (2022-11-03) =\r\n-~ Fixed: error build missing styles.\r\n-\r\n-= 4.1.7.3 (2022-11-02) =\r\n-~ Updated: text grammar.\r\n-~ Modified: LP_DateTime class.\r\n-~ Added: Course category and tag to menu.\r\n-~ Changed: input type regular price, sale price to text.\r\n-~ Call quiz get_questions function to get_question_ids.\r\n-~ Fixed: upgrade LP3 to LP4 missing result of lesson.\r\n-~ Remove file class-lp-backward-plugins.php, class-lp-factory.php, class-lp-query-search.php, class-lp-course-utils.php, class-lp-rest-authentication.php\r\n-~ Remove code deprecated before.\r\n-\r\n-= 4.1.7.2 (2022-10-03) =\r\n-~ Removed: delete file mu-plugin (Moved to the plugin Thim Optimize).\r\n-~ Fixed: CVE-2022-3360 security.\r\n-~ Fixed: error \"Quiz is not auto submitted when the time is expired\".\r\n-~ Fixed: error \"Completed item is not redirected to the next item\".\r\n-~ Modified: Shortcode button LP.\r\n-~ Removed: delete shortcode 'learn_press_button_enroll'. We recommend using the shortcode 'learn_press_button_course' instead.\r\n-~ Fixed: error \"Email content on one line when you save\".\r\n-\r\n-= 4.1.7.1 (2022-09-16) =\r\n-~ Fixed: non-LP plugins causing errors.\r\n-\r\n-= 4.1.7 (2022-09-13) =\r\n-~ Fixed: IPN paypal.\r\n-~ Added: autocomplete meta-box field.\r\n-~ Fixed: h5p error in curriculum editor.\r\n-~ Modified: duplicate course, sections, items.\r\n-~ Handle multiple button Continue course.\r\n-~ Modified: has_completed_item() function.\r\n-~ Fixed: custom fields register not show on the Profile page.\r\n-~ Fixed: save order status.\r\n-~ Added: hook 'learn-press\u002Fuser-item\u002Fexpiration-time'.\r\n-~ Added: function duplicate question answer-meta when duplicate question.\r\n-~ Fixed: error show content of quiz when user doing questions.\r\n-~ Fixed: error fetch api has x-wp-nonce with cache expire.\r\n-~ Fixed: sidebar toggle on mobile with theme Eduma.\r\n-~ Added: autocomplete meta-box field.\r\n-~ Fixed: error not send mail when register user on page checkout.\r\n-~ Fixed: error wrong status graduation when set Passing Grade is 100% on Quiz.\r\n-~ Fixed: header, footer email of LP not detect variable.\r\n-~ Fixed: error duplicated items, section when double click.\r\n-\r\n-= 4.1.6.9.3 (2022-08-10) =\r\n-~ Fixed: show wrong shortcode on course, item's course.\r\n-\r\n-= 4.1.6.9.2 (2022-08-09) =\r\n-~ Fixed: show wrong special character (Ex: ü) on Section title, description.\r\n-~ Fixed: error on duplicate course, item function not same content old course, item.\r\n-~ Fixed: button sidebar toggle not show on default theme WP.\r\n-~ Fixed: ESC make error with payment gateway.\r\n-\r\n-= 4.1.6.9.1 (2022-08-04) =\r\n-~ Fixed: error ESC content of course, items' course make iframe, embed not working.\r\n-~ Fixed: error complete lesson, do quiz on API for App mobile.\r\n-\r\n-= 4.1.6.9 (2022-08-03) =\r\n-~ Modified: read items, read sections of course. (optimize read speed).\r\n-~ Modified: 'set_viewing_item' method.\r\n-~ Modified: set thumbnail image size on the 'Profile Page' by width setting on 'Avatar Dimensions'.\r\n-~ Fixed: error search no courses but return all (Archive courses).\r\n-~ Fixed: error LP_Shortcode_Course_Curriculum with Elementor.\r\n-~ Sanitize, ESC.\r\n-~ Deleted: folder attributes, files: 'class-lp-gdpr.php', 'class-lp-hard-cache.php', 'class-lp-repair-database.php', 'class-lp-utils.php'.\r\n-~ Clear, optimize codes.\r\n-~ Added: hook do_action 'lp\u002Fbackground\u002Fcourse\u002Fsave'.\r\n-~ Added: hooks for addon LP - WPML.\r\n-~ Deprecated: methods 'load_curriculum'.\r\n-~ Style: FAQs on single course, spacing items progress, space in single tab.\r\n-~ Change: 'Course Item Per Page' set default is 10.\r\n-\r\n-= 4.1.6.8 (2022-07-05) =\r\n-~ Fixed: click pagination when enable 2 option Load Courses Ajax.\r\n-~ Added: loading, error message(if it has) when start quick.\r\n-~ Fixed: error sort by popular with theme Eduma.\r\n-~ Fixed: Wordfence denied param: \"author\", convert to \"user\" on API.\r\n-~ Fixed: query popular courses for app.\r\n-~ Added: return price format for app.\r\n-~ Added: API delete account for app.\r\n-~ Merged: addon Offline Payment.\r\n-~ Fixed: styles with themes: Avada, Divi, Flastsome, Bridget, Astra, The 7.\r\n-~ Fixed: security.\r\n-\r\n-= 4.1.6.7 (2022-06-20) =\r\n-~ Fixed: errors quiz when call API LP remove action 'wp_loaded'.\r\n-~ Fixed: some minor bugs.\r\n-~ Fixed: install tables for multiple sites.\r\n-~ Fixed: save settings always return tab General.\r\n-~ Fixed: layout 'select items' popup when edit course.=\r\n-\r\n-= 4.1.6.6 (2022-06-13) =\r\n-~ Fixed: security.\r\n-~ Added: option \"Enable loading ajax Courses on the Archive Course page\".\r\n-~ Added: option \"No Page load Courses Ajax\".\r\n-\r\n-= 4.1.6.5 (2022-05-16) =\r\n-~ Fixed: error with block theme 2022.\r\n-~ Fixed: error with LP Addon Frontend Editor.\r\n-\r\n-= 4.1.6.4 (2022-05-05) =\r\n-~ Modified: setup require tables for LearnPress when activate plugin.\r\n-~ Modified: setup wizard.\r\n-~ Optimized: code.\r\n-~ Fixed don't scroll to item of section > config \"Section Per Page\".\r\n-\r\n-= 4.1.6.3 (2022-04-20) =\r\n-~ Fixed: sort section of course.\r\n-~ Fixed: sort item of course's section when edit course.\r\n-~ Fixed: sometime call get_curriculum empty.\r\n-~ Modified: fixed when set seconds big (about 100 hours), can't convert to format time right.\r\n-~ Fixed: duplicate course not duplicate sections, items.\r\n-~ Fixed: error wp.media on page Email setting.\r\n-~ Fixed: count wrong order on the backend.\r\n-\r\n-= 4.1.6.2 (2022-04-04) =\r\n-~ Fixed: go to last item of section still show button \"load more items\".\r\n-~ Fixed: \"Undefined\" when click \"load more sections\" on theme Eduma.\r\n-\r\n-= 4.1.6.1 (2022-04-01) =\r\n-~ Optimize.\r\n-~ Fixed: error show input when retake Fill In Blank - off option \"Show correct answer\".\r\n-~ Modified: filter query courses API.\r\n-~ Hide load more item button which section it hide.\r\n-~ Fixed: save course is sale when edit course.\r\n-~ Added: hook \"learn-press\u002Fuser\u002Fquiz-finished\".\r\n-~ Fixed: error site use sub-folder domain will be error 301 when checkout.\r\n-~ Fixed: error show \"The item is not assigned to this course\" on Page builder.\r\n-~ Fixed: error style RTL item-actions.\r\n-~ Fixed: case user guest buy course and not login, back to this course will not show button \"purchase course\".\r\n-~ Added: hook do_action( 'login_form' ) on the page LP Checkout, form \"Login\".\r\n-\r\n-= 4.1.6 (2022-03-14) =\r\n-~ Compatible: with \"Polylang\" plugin.\r\n-~ Compatible LP Shortcode with Elementor.\r\n-~ Compatible: with block theme (Gutenberg).\r\n-~ Added: set -1 value for no limit Retake Quiz.\r\n-~ Added: order by popular courses on API.\r\n-~ Fixed: case set duration quiz = 0.\r\n-~ Fixed: case set password for quiz.\r\n-~ Fixed: create new question didn't set type.\r\n-~ Fixed: when search global WP with ?s= will not search item's course and question not assign.\r\n-~ Fixed: \"Active Courses\" empty on the Profile page.\r\n-~ Fixed: security does not sanitise and escape the lp-dismiss-notice.\r\n-~ Fixed: error many times redirect when access link domain\u002Ftype\u002Fnot_found.\r\n-~ Fixed: compare string answer not set \"Match case\" type Fill In Blank Question.\r\n-\r\n-= 4.1.5 (2022-01-24) =\r\n-~ Modified: optimize, handle cache for query courses.\r\n-~ Added: meta key '_lp_regular_price'.\r\n-~ Modified: get price of course.\r\n-~ Added: \"get_user_courses\" function.\r\n-~ Fixed: security avatar image (Arbitrary Image Renaming).\r\n-~ Modified: upload avatar image.\r\n-~ Fixed: RTL style.\r\n-~ Modified: optimize load Curriculum via API, fast for big data (larger thousands items).\r\n-\r\n-= 4.1.4.1 (2021-12-22) =\r\n-~ Added: settings redirect when finish course.\r\n-~ Added: enqueue script by shortcode button purchase.\r\n-~ Fixed: error save value on the textarea format code HTML.\r\n-~ Fixed: error timezone is different UTC-0 will finish quiz soon.\r\n-~ Save info total items (quiz, question,...) of course when saving the course - improve performance.\r\n-~ Fixed: error change user Guest to another user on LP Order not save.\r\n-~ Fixed: Guest buy course with user exists.\r\n-~ Fixed: Guest buy course with create account.\r\n-~ Fixed: High CPU (many query) when user login view single course.\r\n-~ Fixed: No require enroll.\r\n-~ Changed: view course's user on the Backend to the profile's user.\r\n-~ Modified: submit quiz, get result course, quiz.\r\n-~ Fixed: query get orders on Profile page.\r\n-~ Fixed: query get orders by user (multiple user) on the Backend.\r\n-~ Modified: delete course will delete section, section_items, lp_user_items, user_itemmeta.\r\n-~ Saved: info total items of course when save course - to make call fast.\r\n-~ Rewrite: function count total items of the Course.\r\n-~ Fixed: get course id when click Get Passing Grade in Evaluate via results of the final quiz.\r\n-~ Fixed: count Unassigned questions.\r\n-~ Changed logic check \"fill in blank\" question: user answer right all fields will get point of question, one of answer wrong, the question is fail and get point = 0.\r\n-\r\n-= 4.1.4 (2021-11-08) =\r\n-~ Fixed security: when user share profile, another user can see settings as change password, change info.\r\n-~ Modify: not scroll to title courses when load first.\r\n-~ Fixed: get incorrect key setting \"archive course layout\".\r\n-~ Fixed: get value \"From name\", \"Footer text\" setting Email.\r\n-~ Removed: option set \"From address\" email, removed hook \"wp_mail_from\" make some site can't send email when install LP.\r\n-~ Comment some functions deprecated: \"_learn_press_restrict_view_items\", \"_learn_press_set_user_items\".\r\n-~ Added: hook \"learnpress\u002Fcourse\u002Ftemplate\u002Fprice\u002Fcan-show\".\r\n-~ Added: filter \"before_show_lp_widget_content\".\r\n-~ Show icons on the child Settings tab - Profile page.\r\n-~ Fixed: case answer's question Fill in blank = \"0\" always incorrect.\r\n-~ Fixed: case content of question answers will change by hook apply_filters( 'the_content') when reload page, change to do_shortcode().\r\n-~ Fixed: store answer of user when reload page will lose.\r\n-~ Added: hooks apply_filters('learnpress\u002Fprofile\u002Ftab\u002Fenrolled\u002Fsubtab-active'), apply_filters('learnpress\u002Fprofile\u002Ftab-active').\r\n-~ Modified: functions course_external_button, can_enroll_course with case course is external and purchased course.\r\n-~ Sanitize: email_footer, email_header.\r\n-~ Removed: some functions not use on file class-lp-email.php: \"get_variable\", \"get_object\", \"get_common_template_data\", \"data_to_variables\"\r\n-~ Fix show explanation when reload site.\r\n-~ Fix show message: \"Your order is waiting for processing\" when LP Order status is processing.\r\n-~ Fixed: condition get link last item if all items completed - on button continue.\r\n-~ Fixed: show explanation.\r\n-~ Fixed: error user login with mail buy as Guest and LP Oder completed but can't view course.\r\n-~ Fixed: error, \u003Ca href=\"https:\u002F\u002Fblog.szfszf.top\u002Fstatic\u002Fpapers\u002FLearnPress_4.1.3.2_sql_injection_1cf8665be17b7708a3f180067fd2d50b.html\">sql injection\u003C\u002Fa>, sanitize feature duplicate post (Course, Lesson, Quiz v.v...)\r\n-\r\n-= 4.1.3.2 (2021-10-15) =\r\n-~ Fixed: security CVE-2021-39348, set sanitize for some params missing.\r\n-\r\n-= 4.1.3.1 (2021-09-15) =\r\n-~ Fixed: some shortcode of latex show incorrect on question answer.\r\n-~ Added: hooks for course_continue_button, course_purchase_button, course_enroll_button.\r\n-~ Fixed: Fatal error LP_Abstract_User::get_course_data() when upgrade from LP3 to LP4.\r\n-~ Moved: function \"Email hook notify\" to hook \"plugin_loaded\".\r\n-~ Added: hooks \"learnpress\u002Fhook\u002Fbefore-addons-call-hook-learnpress-ready\".\r\n-~ Fixed security: Cross Site Scripting (XSS) on fields: External Link, Requirements, Target Audience, Key Features, FAQs.\r\n-~ Fixed: click button continue redirect wrong item.\r\n-~ Added: functions get_user_ids_enrolled, get_total_user_enrolled.\r\n-~ Fixed: error WP_Filesystem_Direct::exist not exist.\r\n-\r\n-= 4.1.3 (2021-09-07) =\r\n-~ Modified: Learnpress order status on Dashboard of Wordpress.\r\n-~ Fixed: Widgets: Popular course, Feature course, Recent course, Course Progress, Course Info, Course Extra. All widget compatible with Elementor.\r\n-~ Fixed: Info Order have courses deleted on page Profile .\r\n-~ Fixed: error user can't learn course set external link when Admin created Order manual Completed has this course.\r\n-~ Improve performance.\r\n-~ Modify function set cache.\r\n-~ Modify custom post type of LP.\r\n-~ Modify feature run progress on background.\r\n-~ Handle send all email of LP (New Order, Processing Order, Completed Order, Cancelled Order, Enrolled Course, Finished Course, Become An Instructor) on Background.\r\n-~ Remove child order when Admin created Order manual.\r\n-~ Modify enroll\u002Fbuy course (user, guest).\r\n-~ Added wysiwyg field for metabox.\r\n-~ Compatible with MathJax-LateX plugin.\r\n-\r\n-= 4.1.2 =\r\n-~ Modify, optimize Archive course page - call API - make faster\r\n-~ Added: back icon on item page\r\n-~ Fixed: some where call old function \"get_profile_socials\" not has param $user_id\r\n-\r\n-= 4.1.1 =\r\n-~ Added: tool clean \"table session\" clean sessions expire after 1 days.\r\n-~ Fixed: not show button \"continue\" when course is blocked.\r\n-~ Fixed: course doesn't has any item will be not show button \"continue\", \"finish\", \"retake\".\r\n-~ Updated: file languages\r\n-\r\n-= 4.1.0 =\r\n-~ Added: feature \"Allow repurchase option\". Manager can set fixed: Reset\u002FKeep course progress of course or allow student choice.\r\n-~ Fixed: show incorrect \"Active Courses\" on page profile.\r\n-~ Fixed: show fake student.\r\n-~ Fixed: duplicate label on form Register custom fields.\r\n-\r\n-= 4.0.9 =\r\n-~ Added: option enable sticky navigation pagination when user answer question on quiz.\r\n-~ Fixed: set again current item when manager remove item current when edit course.\r\n-~ Modified: page profile - load ajax call API, show more info.\r\n-~ Fixed: can't upgrade DB from 3 to 4 because user translate menu \"LearnPress\".\r\n-~ Modified: Navigation on page quiz - change icon next, previous to text.\r\n-~ Fixed: function \"duplicate course\" not duplicate \"answer option\"\r\n-~ Fixed: Social icons on page profile when user view another user.\r\n-~ Fixed: on multiple site enable option \"Registration is disabled\" will not show form register on page Profile.\r\n-\r\n-= 4.0.8 =\r\n-~ Added: feature \"Allow Repurchase course\"\r\n-~ Added: feature \"No require enroll\"\r\n-~ Fixed: Custom register fields error with some name not utf8\r\n-~ Added: field \"confirm password\" on register form profile\r\n-~ Fixed: file config.js permission 403 on some sites, change name to lp-configs.js\r\n-~ Fixed: When edit course, Admin can add item of another user\r\n-\r\n-= 4.0.7 =\r\n-~ Fixed: CPU runs high\r\n-~ Fixed: \"start quiz\" error with some cases have cached.\r\n-~ Fixed: make Elementor pro show wrong: header, footer... (theme builder)\r\n-\r\n-= 4.0.6 =\r\n-~ Fixed: Page profile not show login\u002Fregister form\r\n-~ Fixed: translated text on js function \"Quiz\"\r\n-~ Fixed: js scroll to item viewing\r\n-~ Fixed: show html title question\r\n-~ Fixed: Order change status from \"completed\" to \"pending\" => user can't learn courses in this order\r\n-~ Added: Option \"Logout Redirect\"\r\n-~ Fixed: Set default sidebar curriculum will be hide on mobile\r\n-~ Modify: Remove course on Overview tab when enable \"Publish Profile\"\r\n-~ Fixed: Elementor pro make archive course show wrong\r\n-\r\n-= 4.0.5 =\r\n-~ Fixed: error \"Duplicate entry\" for case upgrade LP4, if user install LP4 and save setting before Upgrade Database\r\n-~ Fixed: get option 'avatar_dimensions' set default value if user not set\r\n-~ Fixed: get option 'course_thumbnail_dimensions' set default value if user not set\r\n-~ Modify template Profile\r\n-~ Fixed: tool \"Reset course progress\"\r\n-~ Fixed: get options \"Courses per page\"\r\n-\r\n-= 4.0.4 =\r\n-~ Fixed: get option \"archive_course_limit\" default value if empty.\r\n-~ Fixed: Profile shortcode.\r\n-~ Fixed: error table \"learnpress_user_itemmeta\" doesn’t exist when install new.\r\n-~ Fixed: style comment function.\r\n-~ Added: form comment on course.\r\n-~ Fixed: js itemProgress undefined in Eduma theme\r\n-\r\n-= 4.0.3 =\r\n-~ Fixed: tool \"Reset course progress\"\r\n-~ Fixed: tool \"Reset user progress\"\r\n-~ Added: tool \"Create Database Indexes\"\r\n-~ Fixed js button \"Retake course\" if you have more than one.\r\n-~ Added: tool \"Re upgrade Database\" ~ If DB upgrade not success\r\n-~ Fixed: show button finish when completed quiz - if assessment passed\r\n-\r\n-= 4.0.2 =\r\n-~ Upgrade library chart.js to v3.2.1\r\n-~ Optimize query with cache get list questions on a quiz\r\n-~ Show content(description) on page LP Profile, LP Archive\r\n-~ Fixed: errors when activated \"Metabox\" plugin\r\n-~ Fixed: broken layout profile page when activated \"All in one seo\" plugin\r\n-~ Removed: tool \"Remove current Data\"\r\n-~ Removed: tool \"Remove outdated Data\"\r\n-~ Removed: tool \"Repair database\"\r\n-\r\n-= 4.0.1 =\r\n-~ Fixed: upgrade LP error if mysql version \u003C 5.7 - \"Specified key was too long\".\r\n-~ Fixed: minor bugs.\r\n-\r\n-= 4.0.0 =\r\n-~ Added new UI\u002FUX for Quiz screen in frontend.\r\n-~ Added enable Gutenberg for lesson and quiz and question.\r\n-~ Added extra meta for course: Requirements, Target Audience, Key Features.\r\n-~ Improved quiz settings that made it simpler and easy to use.\r\n-~ Improved single course page.\r\n-~ Improved archive course page.\r\n-~ Restructure database tables.\r\n-~ Added some hooks\u002Ffilters.\r\n-\r\n-= 3.2.8.8 =\r\n-~ Fix compatible PHP 8.0.3\r\n-~ Fix Yoat SEO course category title not working\r\n-\r\n-= 3.2.8.7 =\r\n-~ Fix: start quiz 404\r\n-~ Optimize\r\n-\r\n-= 3.2.8.6 =\r\n-~ Fix minor bug\r\n-~ Optimize enroll course\r\n-~ Add cache get items' course\r\n-~ Add reset progress by course_id\r\n-~ Fix \"Enroll Button\" is not appearing when disable \"Auto Enroll\" option\r\n-\r\n-= 3.2.8.5 =\r\n-~ Fix header lesson style error on iphone\r\n-~ Fix scrollbar error some themes\r\n-~ Fix scroll js to item user viewing\r\n-~ Add filter 'lp\u002Femail\u002Ftype-order\u002Fobject', 'lp\u002Femail\u002Forder\u002Fsupport_variable'\r\n-\r\n-= 3.2.8.4 =\r\n-~ Add function Scan database if have not index in table will create\r\n-~ Add function Repurchase course when course finished or block duration expire\r\n-~ Fix function Statistics\r\n-~ Fix error content lesson conflict when activated elementor & yoast seo\r\n-~ Fix order status on Dashboard screen\r\n-~ Remove js scrollbar jquery\r\n-~ Add option 'Enable Popup Confirm Finish Course, Complete Item\r\n-~ Add message block duration\r\n-\r\n-= 3.2.8.3 =\r\n-~ Fix compatible PHP 8.0\r\n-~ Fix checkout message error\r\n-~ Optimize\r\n-\r\n-= 3.2.8.2 =\r\n-~ Fix compatible WP 5.6\r\n-~ Fix error Yoast-Seo in course archive page\r\n-~ Error file global.js on 'Twenty Seventeen' theme\r\n-~ Fix error page course archive with YoastSeo\r\n-~ Fix count students enrolled course on list course backend\r\n-~ Fix toggle curriculum bar for right-to-left\r\n-\r\n-= 3.2.8.1 =\r\n-~ Fix WPBakery load style inline on course's item page\r\n-~ Fix make co-instructor not show list courses on backend\r\n-~ Fix miss lib vue js on LearnPress \u002F Tools \u002F Course page\r\n-\r\n-= 3.2.8 =\r\n-~ Fix query get posts (courses, items courses) on Backend - multiple site\r\n-~ Fix error not same param on hook of Yoast SEO vs Yoast SEO premium\r\n-~ Fix security XSS function view_log\r\n-~ Fix check if get user on function learn_press_course_purchase_button() is null\r\n-~ Fix create statics pages LP on 'lp setup' page\r\n-~ Show message duplicate class RWMB_Field with another plugins\r\n-\r\n-= 3.2.7.9 =\r\n-~ Fix question not show description\r\n-\r\n-= 3.2.7.8 =\r\n-~ Fix save author id when add item when edit course\r\n-~ Fix title, description item course when install yoast seo plugin\r\n-~ Fix Retake when not enable duration expire\r\n-~ Fix function 'Instructors Registration'\r\n-~ Add function Export order invoice PDF\r\n-\r\n-= 3.2.7.7 =\r\n-~ Add Evaluate via questions\r\n-~ Add Evaluate via mark\r\n-~ Fixed duration expire course\r\n-~ Fixed link 'Preview change' button when edit item course\r\n-~ Fixed title of course archive page\r\n-~ Fixed if quiz has only one question will not show paginate\r\n-\r\n-= 3.2.7.6 =\r\n-~ Fix missing file class-lp-course-database.php\r\n-\r\n-= 3.2.7.5 =\r\n-~ Fixed run Elementor with question.\r\n-~ Fixed lesson preview not show button complete when user enrolled.\r\n-~ Add tag apply_filter 'learn-press\u002Forder-item-not-course-id' on received-order.\r\n-~ Add tag apply_filter 'learn-press\u002Ftmpl-button-purchase-course' before return button purchase course.\r\n-~ Optimize (permalink of items course).\r\n-~ Show finish course button when items of course completed although the course not passed.\r\n-~ Fixed explanation of question when user completed quiz.\r\n-~ Hide description of quiz when the quiz completed.\r\n-\r\n-= 3.2.7.4 =\r\n-~ Fix can't load items when select on Order Backend\r\n-\r\n-= 3.2.7.3 =\r\n-~ Fixed error get_image() return bool not string on the file \\templates\\loop\\course\\thumbnail.php\r\n-~ Modify description for the function 'External Link'\r\n-~ Fixed LP_Datetime error with date = '0000-00-00 00:00:00'\r\n-~ Fixed not show number Duration of Lesson when translate text\r\n-~ Fixed not send mail for instructor when have new order\r\n-~ Remove hook get avatar of Ultimate member plugin\r\n-~ Fixed get value with, height image_size on LP setting\r\n-~ Fixed security, clear sanitize\r\n-~ Wilfried, security ninja at Synacktiv\r\n-~ Fixed compatible with Elementor on items of course (lesson, quizz, question v.v...)\r\n-\r\n-= 3.2.7.2 =\r\n-~ Fixed email setting not save tag html\r\n-\r\n-= 3.2.7.1 =\r\n-~ Fix save settings\r\n-\r\n-= 3.2.7 =\r\n-~ Fix sanitize\r\n-\r\n-= 3.2.6.10 =\r\n-~ Fix add-on GradeBook\r\n-\r\n-= 3.2.6.9 =\r\n-~ Revert library meta-box to v4.15.7\r\n-\r\n-= 3.2.6.8 =\r\n-~ Fixed security: remove functions low security\r\n-~ Fixed some minor bugs\r\n-~ Fixed confusing \"external link button\" name default of course\r\n-~ Fixed filter items of course\r\n-~ Fixed create same name, slug page Checkout with Woo\r\n-~ Improve performance\r\n-\r\n-= 3.2.6.7 (2020.03.16) =\r\n-~ Fixed security issues (CVE-2020-7916): uer logged can change role all users to Instructor\r\n-~ Fixed security issues (CVE-2020-7917): remove function low security\r\n-~ Fixed error preview Assignment\r\n-\r\n-= 3.2.6.6 =\r\n-~ Fixed option Block Lessons not working\r\n-\r\n-= 3.2.6.5 (20.11.2019) =\r\n-~ Fixed email doesn't send.\r\n-~ Fixed some js errors.\r\n-~ Fixed js call twice times.\r\n-~ Fixed question doesn't show after added to quiz.\r\n-~ Fixed ignore some metadata when copying course.\r\n-~ Fixed search orders in backend.\r\n-\r\n-= 3.2.6.4 =\r\n-~ Fixed some errors.\r\n-\r\n-= 3.2.6.3 =\r\n-~ Fixed css conflict with text block of vc.\r\n-~ Fixed show message 'Out of stock' for course reached limitation users.\r\n-~ Fixed show checked answers when review quiz.\r\n-~ Fixed review quiz option does not work properly.\r\n-~ Fixed update view after removing order's items.\r\n-\r\n-= 3.2.6.2 =\r\n-~ Fixed cannt add items to course.\r\n-\r\n-= 3.2.6 =\r\n-~ Added option to exclude js\u002Fcss libraries unnecessary (used in theme or other plugins).\r\n-~ Added alt prop to user profile avatar.\r\n-~ Fixed can't next\u002Fprev questions when doing quiz.\r\n-~ Fixed wrong items navigation when learning course.\r\n-~ Fixed missing js of some pages in admin.\r\n-~ Fixed can't close admin notices.\r\n-~ Updated envato api to newer version.\r\n-\r\n-= 3.2.5.6 =\r\n-~ Added new strings for translating.\r\n-~ Corrected currency of Rwandan franc.\r\n-~ Fixed missing utils library when adding manually the orders.\r\n-~ Fixed upgrade function that doesn't hide the message when it done.\r\n-~ Fixed can't create new page in settings.\r\n-\r\n-= 3.2.5.5 =\r\n-~ Fixed guest can not start quiz with no require enroll course option.\r\n-~ Fixed sql to filter orders by user ID.\r\n-~ Fixed issue of sending email when finished course: not correct Grade.\r\n-~ Fixed can not see Actions buttons when adding questions into the quiz.\r\n-~ Fixed changed the logic of Continue button for Course: continue with the next incomplete item.\r\n-~ Fixed wrong code to pick up instructor email.\r\n-\r\n-= 3.2.5.4 =\r\n-~ Fixed load js missing dependencies and only in LP page.\r\n-\r\n-= 3.2.5.3 =\r\n-~ Changed SQL to read course items by user item ID.\r\n-~ Improved performance in admin orders page.\r\n-~ Upgraded Vue\u002FVuex to latest version.\r\n-~ Added new theme to LP ad.\r\n-\r\n-= 3.2.5.2 =\r\n-~ Fixed bug can't access course after purchased.\r\n-~ Fixed bug user can't redo quiz with option 'Retake' is 1.\r\n-~ Fixed bug can't order questions by date in questions bank.\r\n-~ Extracted purchased date to date and time in order emails.\r\n-~ Show point of quiz in result page.\r\n-\r\n-= 3.2.5.1 =\r\n-~ Fixed can not next\u002Fprev question when doing quiz.\r\n-~ Fixed get wrong total student of a course.\r\n-~ Updated language .POT file.\r\n-\r\n-= 3.2.5 =\r\n-~ Fixed button for creating LP pages does not work properly.\r\n-~ Fixed warning when getting course items does not exists.\r\n-~ Added button to close warning for outdated templates.\r\n-~ Fixed search order not working.\r\n-~ Fixed get course items in incorrect order.\r\n-~ Fixed can't start quiz when the course is not required enroll.\r\n-~ Fixed the amount number of enrolled users isn't updated correctly.\r\n-\r\n-= 3.2.4 =\r\n-~ Fixed cannot enroll course.\r\n-~ Fixed prev question button not working correct.\r\n-~ Fixed one extra answer option when add new question.\r\n-~ Fixed some deprecated keywords for PHP 7.3.\r\n-~ Fixed item is null for an item which doesn't support it's type (like assignment after deactivate).\r\n-~ Fixed bug the next and prev button not work in review mode of quiz.\r\n-\r\n-= 3.2.3 =\r\n-~ Removed un-security code in PP library.\r\n-~ Fixed get curriculum item types doesn't work properly.\r\n-~ Fixed sort sections\u002Fitems wrong in SQL query.\r\n-\r\n-= 3.2.2 =\r\n-~ Fixed review quiz doesn't work properly.\r\n-~ Fixed table session create a lot of rows.\r\n-~ Fixed can't enroll to a course purchased.\r\n-~ Removed unused functions.\r\n-\r\n-= 3.2.1 =\r\n-~ Fixed can't enroll course.\r\n-~ Fixed upload issue and drag user avatar on mobile.\r\n-~ Fixed course duration does not work properly.\r\n-~ Fixed question with multi language.\r\n-~ Fixed mail to user 2 times when completed course.\r\n-\r\n-= 3.2.0 =\r\n-~ Fixed issue info of order added manual not correct.\r\n-~ Fixed issue course duplicated is published.\r\n-~ Fixed issue Course content column show as \"No Content\".\r\n-~ Fixed some issues related to cache.\r\n-\r\n-= 3.1.0 =\r\n-~ Fixed issue vulnerabilities.\r\n-~ Fixed issue related to object cache when doing quiz.\r\n-~ Fixed lesson 404 with Polylang.\r\n-~ Fixed PHP Fatal error class ‘LP_Plugins_Helper’ not found\r\n-\r\n-= 3.0.12 =\r\n-~ Fixed minor bug in gradebook list in admin\r\n-~ Made hook learn-press\u002Fcourse-tabs work\r\n-~ Fixed bug: not auto complete quiz. Add 1 more filter hook for checking publicity in profile page\r\n-~ Fixed bug: auto enroll course without permission to enroll course\r\n-~ Changed filter tag for get_default_meta of lesson\r\n-~ Auto full-screen in mobile view\r\n-~ Fixed bug: wrong count number in No Preview at Lessons List back-end page\r\n-~ Fixed bug: Instructor user cannot see comments of lesson\r\n-~ Changed version for template files\r\n-~ Added base url for construct nav in user profile\r\n-~ Added param for get_nav method\r\n-~ Fixed bug: answer correct all question but quiz result is failed with 0%\r\n-~ Fixed small bug in quiz editor\r\n-~ Fixed bug: wrong count number of the courses in back end because of the status of preview course\r\n-~ Fixed bug: not redirect to correct page after logged in in Profile page\r\n-~ Fixed bug fatal error include file\r\n-~ Added icon for chat-type-format of content item\r\n-~ Fixed header-sent when log file\r\n-\r\n-= 3.0.10 =\r\n-~ Added quiz option to minus a number of points for each wrong question in quiz\r\n-~ Added admin email to send to admin when an order is completed\r\n-~ Added button allows wp admin can send a request to subscriber\r\n-~ Improved auto redirecting to current question when user go to a quiz\r\n-~ Improved UI of course editor for RTL\r\n-~ Improved content of email sending to admin and instructor\r\n-~ Fixed page show 404 with pagination in courses page (conflict with WPML)\r\n-~ Fixed course price is still showing after user enrolled course\r\n-~ Fixed not auto redirecting to checkout after logged in\r\n-~ Fixed some issues made question can't edit\r\n-~ Fixed issue for requesting to get related themes\u002Faddons in admin\r\n-~ Fixed some issues with content header when viewing in Safari\r\n-~ Fixed wrong ordering of course item when adding new\r\n-~ Fixed order for multiple users is not show in list of orders\r\n-~ Fixed some text is not translatable\r\n-~ Fixed breadcrumb not show page name when viewing archive course\r\n-~ Fixed archive course show header is title of first course\r\n+= 4.2.7.5 (2024-12-17) =\n+~ Added: option Price prefix, Price suffix for course.\n+~ Fixed: shortcode [learn_press_button_course].\n+~ Fixed: error status item's course, case option course set \"no require enroll\" (user enrolled).\n+~ Fixed: error lose tab on Profile when install SiteOrigin plugin.\n+~ Updated: library TomSelect, ChartJS to the latest.\n+\n+= 4.2.7.4 (2024-12-03) =\n+~ Fixed: image cover profile with theme Twenty Five.\n+~ Fixed: error some sites not show notes(Waring) on the Admin Dashboard.\n+~ Fixed: security.\n+~ Tweak order show material on the item lesson.\n+~ Tweak load text domain compatible with WP 6.7 and later.\n+~ Tweak: format_human_time_diff method.\n+~ Tweak: UserItemModel, UserCourseModel, UserModel, CourseModel  classes.\n+~ Deprecated: get_info_extra_for_fast_query method.\n+~ Deprecated: _learn_press_usort_terms_by_ID, learn_press_course_item_format_exclude, learn_press_get_course_curriculum, learn_press_is_enrolled_course, learn_press_get_user_course_statuslearn_press_is_free_course, learn_press_course_enroll_required, learn_press_search_post_excerpt, learn_press_course_add_support_item_type, learn_press_course_add_support_item_type, learn_press_get_user_question_answer, need_to_updating, learn_press_get_course_sections, lean_press_get_course_sections, learn_press_get_course_item_url, learn_press_edit_item_link, learn_press_get_course_results_tooltip.\n+~ Set cache get instructors API for App.\n+~ Added: get_i18n_string_plural method on the class LP_Helper.\n+\n+= 4.2.7.3 (2024-11-12) =\n+~ Fixed: error course private admin\u002Fauthor can't see on the frontend.\n+~ Fixed: only show label \"Final\" of Quiz when choose \"Evaluate via results of the final quiz\".\n+~ Fixed: send mail enroll for user Guest not exists user.\n+~ Tweak: enroll\u002Fpurchase course buttons.\n+~ Tweak: condition can enroll\u002Fpurchase course.\n+~ Tweak: API enroll\u002Fpurchase course.\n+~ Tweak: when order completed.\n+~ Tweak: set upload Avatar to PNG, instead of JPG.\n+~ Deprecated: hooks learn-press\u002Fuser\u002Fcan-enroll-course, learn-press\u002Fuser\u002Fcan-purchase-course. Replace to learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse, learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse.\n+\n+= 4.2.7.2 (2024-10-21) =\n+~ Fixed: security.\n+~ Fixed: set size for Gravatar user.\n+~ Fixed: slug item's course use urldecode when edited.\n+~ Fixed: display name courses has special character Mobile.\n+~ Fixed: error save Enable\u002FDisable all emails.\n+~ Added: get_all_items method for LP_Order class, for fix case \"Paid Memberships\" assign more than 50 courses.\n+~ Added: cover image feature on the Profile page.\n+~ Tweak: handle tomSelect.\n+~ Tweak: class LP_Datetime.\n+~ Tweak: style page Archive Courses.\n+~ Tweak: style page Profile.\n+~ Tweak: layout Offline course.\n+~ Update: lp icon fonts.\n+\n+= 4.2.7.1 (2024-09-11) =\n+~ Fixed: security.\n+~ Use TomSelect instead of Select2 on settings.\n+~ Fixed: minor bugs.\n+\n+= 4.2.7 (2024-08-27) =\n+~ Added: feature course offline.\n+~ Added: duration info for App API list courses.\n+~ Tweak: API get instructor info.\n+~ Fixed: error empty email content reset password.\n+~ Fixed: error empty image header.\n+~ Fixed: error create new section not send section_order.\n+~ Fixed: case search LP orders by user.\n+~ Fixed: error sort by total on list orders.\n+\n+= 4.2.6.9.4 (2024-08-07) =\n+~ Fixed: security.\n+\n+= 4.2.6.9.3 (2024-08-02) =\n+~ Tweak: added courses to LP Order manual.\n+~ Tweak: list orders status trash.\n+~ Tweak: message out of stock, no enroll requirement.\n+~ Fixed: material lesson display with case no enroll requirement.\n+~ Fixed: error not show email on Order detail when buy with Guest.\n+~ Fixed: error can't remove empty fields on \"Extra Information\" options.\n+~ Fixed: error clean break row (\\n) on \"Featured review\" option.\n+~ Fixed: query Statistics by role.\n+~ Fixed: error max student when user bought.\n+~ Fixed: case no enroll requirement with course price.\n+~ Remove: jquery-ui-timepicker-addon jquery library.\n+\n+= 4.2.6.9.2 (2024-07-25) =\n+~ Fixed: error lose section when update section of course.\n+\n+= 4.2.6.9.1 (2024-07-24) =\n+~ Fixed: error check paths override of theme.\n+\n+= 4.2.6.9 (2024-07-24) =\n+~ Fixed: security.\n+~ Optimize courses.\n+~ Create table learnpress_courses from posts to query faster.\n+~ Tweak: choose users when create manual LP Order.\n+~ Tweak: filed search instructor on list courses, orders, lessons, quizzes,...\n+~ Tweak: get options list author via API when edit courses (make edit load screen edit courses faster).\n+~ Fixed: show tab material with course no require enroll.\n+\n+= 4.2.6.8.2 (2024-06-28) =\n+~ Added: function retrieve_password_message override message reset password.\n+~ Fixed: security.\n+~ Fixed: style login\u002Fregister for Divi theme.\n+~ Fixed: responsive curriculum.\n+\n+= 4.2.6.8.1 (2024-06-03) =\n+~ Fixed: security.\n+~ Fixed: query by status on list LP Orders.\n+~ Fixed: minor bugs.\n+~ Added: translate text grid, list.\n+\n+= 4.2.6.8 (2024-05-27) =\n+~ Fixed: error create answers question.\n+~ Fixed: minor bugs.\n+\n+= 4.2.6.7 (2024-05-20) =\n+~ Fixed: security.\n+~ Fixed: error conflict with CookieYes plugin.\n+~ Fixed: sale course price with config timezone of WordPress.\n+~ Optimize: style.\n+~ Remove Font Awesome and replace it with Font LearnPress.\n+~ Tweak: query search LP Order.\n+\n+= 4.2.6.6 (2024-05-09) =\n+~ Fixed: security.\n+~ Fixed: delete user item when remove order item.\n+~ Tweak: material files feature.\n+~ Excluded: questions from search via param ?s of WordPress.\n+~ Compare the sale dates of courses through WordPress's Timezone.\n+\n+= 4.2.6.5 (2024-04-17) =\n+~ Fixed: security.\n+~ Added: option \"Load courses of subcategory\", get all the courses in the child category that are not selected in the parent category.\n+~ Added: option \"Number level category want to show\" for widget course filter.\n+~ Added: option \"show\u002Fhide author Admin on list instructors\".\n+\n+= 4.2.6.4 (2024-04-01) =\n+~ Compatible with WordPress 6.5.\n+~ Fixed: security.\n+~ Fixed: error remove question_anwsermeta when create new post question.\n+~ Fixed: compatible PHP8 on get_materials_by_item method.\n+~ Fixed: minor bug save order on the backend.\n+~ Fixed: error wrong link continue item, reason by old data still save item assigned to course, but deleted on post.\n+~ Fixed: minor bug profile shortcode.\n+~ Fixed: error shortcode list courses when add on Elementor.\n+~ Deprecated: get_downloadable_material method.\n+\n+= 4.2.6.3 (2024-02-29) =\n+~ Fixed: error wrong avatar's instructor.\n+~ Fixed: error page Profile with user not login.\n+\n+= 4.2.6.2 (2024-02-28) =\n+~ Added: param lang on url when submit filter courses.\n+~ Added: ProfileOrdersTemplate show layout orders on the Profile page.\n+~ Tweak: get_first_item_id method.\n+~ Tweak: methods Profile, templates Profile.\n+~ Fixed: error js hiddenQuestions.find not a function.\n+~ Fixed: avatar url profile with old value.\n+~ Fixed: error payment PayPal with Currency EUR.\n+~ Check user current can view content of tab Profile.\n+~ Deprecated hook 'learn-press\u002Fprofile\u002Forders', dashboard_featured_courses, dashboard_latest_courses, tab_dashboard methods.\n+\n+= 4.2.6.1 (2024-02-20) =\n+~ Fixed: missing translate on \"html_count_student\" function.\n+~ Fixed: missing translate on profile avatar function.\n+~ Fixed: error when only has a payment method, will be not show payment form.\n+~ Fixed: error widget list courses elementor with theme override content-course.php.\n+~ Fixed: course query filter with polylang.\n+\n+= 4.2.6 (2024-01-29) =\n+~ Tweak: courses js.\n+~ Tweak: course filter js.\n+~ Added: some class has -no-css for purpose not set style on this class.\n+~ Added: fake student on count students show on list courses.\n+~ Added: get_tags function for single courses.\n+~ Tweak: checkout js, not use serializeJSON() of JQuery.\n+~ Added: defer js some script.\n+~ Fixed: add param lang if exist for loadAjax.\n+~ Added: option \"Class of list courses want to filter\" on the Widget Filter Courses.\n+~ Added: icon drag material.\n+~ Remove callback hook learn-press\u002Fbefore-courses-loop-item, learn-press\u002Fafter-courses-loop-item.\n+~ Fixed: code searching post by taxonomies make error block Woocommerce.\n+\n+= 4.2.5.9 (2024-01-09) =\n+~ Added: show notification addons bought near expire support.\n+~ Fixed: error \"Fib in blank\" question case duplicate, when submit quiz wrong result.\n+~ Fixed widget course filter: error WPML handle wrong if link send not param lang.\n+\n+= 4.2.5.8 (2023-12-25) =\n+~ Fixed: security.\n+~ Fixed: translate some text.\n+~ Tweak: layout list courses, set hooks for override, will soon stop support override template file.\n+~ Fixed: clear cache quiz question_ids when add\u002Fremove\u002Fdelete\u002Fclone question on the quiz.\n+~ Added: code use for flutter.\n+\n+= 4.2.5.7 (2023-12-06) =\n+~ Added: new feature \"Assign\u002FUnassign Courses\" on the Tools Backend.\n+~ Added: courses filter support multiple language.\n+~ Dev: widget elementor filter courses.\n+~ Dev: widget elementor list courses.\n+~ Fixed: save sale price.\n+\n+= 4.2.5.6 (2023-11-24) =\n+~ Tweak: logic load Widget Filter Courses.\n+~ Dev: assign\u002Funassign course to user.\n+~ Fixed: error still show price when user has bought course but not start course.\n+~ Fixed: search suggest courses on Widget Filter Courses.\n+~ Fixed: not call function calculate price when edit course with user is instructor.\n+\n+= 4.2.5.5 (2023-11-16) =\n+~ Fixed: security issue.\n+~ Added: new feature Statistic on the Backend.\n+~ Fixed: minor bug material.\n+~ Added: strategy defer\u002Fasync for some script (WP 6.3 or higher will run).\n+~ Fixed: label 'Free' not show on the single free course.\n+~ Fixed: error sanitize key, make certificate can't save.\n+\n+= 4.2.5.4 (2023-11-07) =\n+~ Fixed: security issue.\n+~ Tweak: display Category for filter courses.\n+~ Added: attribute disable if filter count = 0.\n+~ Tweak: widgets.js use fetch instead of wp.apiFetch.\n+~ Added: page tool clear cache.\n+\n+= 4.2.5.3 (2023-11-02) =\n+~ Fixed: security issue.\n+~ Tweak: only show 1 level categories right behind cate parent, on the widget \"Course Filter\".\n+~ Added: method count students enrolled of course.\n+~ Added: method count courses free.\n+~ Added: cache for count.\n+\n+= 4.2.5.3 (2023-10-27) =\n+~ Fixed: security issue.\n+~ Fixed: miss hook start quiz, retake quiz.\n+~ Fixed: minor bug material.\n+~ Fixed: error same course when access any single course.\n+~ Fixed: error don't hide info price\u002Ffree when user enrolled course.\n+\n+= 4.2.5.2 (2023-10-24) =\n+~ Fixed: security issue.\n+~ Compatible with WP 6.4.\n+\n+= 4.2.5 (2023-10-19) =\n+~ Tweak: start quiz, retake quiz.\n+~ Tweaks: icon social.\n+~ Fixed: error font Arabic when export invoice.\n+~ Fixed: minus point when skip question.\n+~ Fixed: error duplicate message \"out of stock\" on the single course.\n+~ Fixed: error not show material of lesson.\n+~ Fixed: error set 0 to not show material.\n+\n+= 4.2.4 (2023-10-03) =\n+~ Fixed: error Paypal Standard (use IPN), replace to use API REST, client ID, client secret.\n+~ Clean resource.\n+~ Check load Widget Elementor on hooks plugins_loaded.\n+~ Tweak: load Curriculum when edit course, query on Frontend.\n+~ Tweak: layout single instructor.\n+~ Fixed: error set Section Per Page = 0 or \u003C -1.\n+~ Fixed: error set load curriculum item = 0.\n+~ Tweak: logic create\u002Fdelete user_item.\n+\n+= 4.2.3.6 (2023-09-18) =\n+~ Tweak: display Date Time, time zone by format of WP.\n+~ Fixed: count Progress course on the Single Item.\n+~ Fixed: current item active on the Curriculum.\n+~ Fixed: error not show price course when user repurchase course.\n+\n+= 4.2.3.5 (2023-09-14) =\n+~ Tweak: checkout.\n+~ Fixed: case start quiz but user_item_id = 0.\n+~ Added: dynamic tag Course for Elementor.\n+~ Tweak: breadcrumb.\n+~ Set 404 if user not login, view page single instructor\u002Fno-slug-instructor.\n+~ Fixed: expire date, end date format i18n on Profile Page.\n+\n+= 4.2.3.4 (2023-08-24) =\n+~ Fixed: error when use same namespace class JWT library, with some plugin like Google Listings and Ads.\n+\n+= 4.2.3.3 (2023-08-08) =\n+~ Added: feature choose type Pagination when load courses on page Archive: navigation Number, Load more, Infinite scroll.\n+~ Added: feature \"Downloadable Materials\", manager can upload files document for each course, lesson, so student can download it.\n+~ Fixed: error with WPML, show wrong list courses with lang.\n+~ Fixed: sidebar Course Filter show wrong with Firefox.\n+~ Fixed: error fonts tiny with theme OceanWP.\n+~ Fixed: error 404 when view item's course with Polylang.\n+~ Fixed: SEO, show title of Category & Tag of Courses.\n+~ Tweak: checkout function.\n+\n+= 4.2.3.2 (2023-07-19) =\n+~ Added: widget filter courses, option enable fields want to filter, sort fields, option load widget on REST.\n+~ Added: Search course suggest (AJAX).\n+~ Added: shortcode filter courses [learn_press_filter_course].\n+~ Fixed: error install\u002Fupdate Addon.\n+\n+= 4.2.3.1 (2023-07-05) =\n+~ Fixed: Security.\n+~ Item Course: completed, display Date Time by format WP.\n+~ Tweak: message of LearnPress.\n+~ Fixed: function “Add course to Order manual”\n+\n+= 4.2.3 (2023-07-03) =\n+~ Added: page list instructors.\n+~ Added: page single instructor.\n+~ Added: option set number instructor per page.\n+~ Added: shortcode show list instructors [learn_press_instructors].\n+~ Added: shortcode show single instructor [learn_press_single_instructor].\n+~ Auto add shortcode if page is list instructors or single instructor, if enable Elementor will not auto add.\n+~ Added: Widgets For Elementor: list instructors, instructor title, instructor description.\n+~ Added: Template default for list instructors on path \"config\u002Felementor\u002Ftemplate-default\", can import via Elementor.\n+~ Tweak: Widgets For Elementor: list courses, become a teacher, login form, register form.\n+~ Profile: added tab My Courses, display course attend of User.\n+~ Profile: tab My Courses, display statistic: total course enrolled, course in-progress, course finish, course passed, course failed.\n+~ Profile: tweak tab Courses, display course created by User (Admin, Instructor).\n+~ Profile: tab Courses, display statistic: total course created, course publish, course pending, total student, student in-progress.\n+~ Tweak: set default section_per_page, course_item_per_page = -1 to load full.\n+~ Added: format_human_time_diff method.\n+~ Tweak: get cart from session.\n+~ Check: $course->get_instructor() is null.\n+~ Added: hook do_action( 'lp\u002Forder-completed\u002Fupdate\u002Fuser-item', $item, $order ), for case buy item not course.\n+~ Added: hook do_action( 'lp\u002Forder-pending\u002Fupdate\u002Fuser-item', $item, $order ), for case buy item not course.\n+~ Added: nest_elements, print_sections methods on class Template, for easy override template without override file.\n+~ Tweak: statistic student\u002Finstructor on profile page.\n+~ Added: method \"count_courses_of_author\" instead \"count_courses_publish_of_author\"\n+~ Tweak: method \"count_status_by_items\"\n+~ Profile: added text \"upload\" translate on localize script.\n+~ Apply: add internal scripts to head on page List Instructors.\n+~ Fixed: error buy item with Guest, order is no item.\n+~ Fixed: Security Broken Access Control.\n+~ Added: hook login\u002Fregister of WP on page LP Checkout for plugin captcha display.\n+~ Fixed: error 404 function comment on the lesson.\n+\n+= 4.2.2.4 (2023-04-04) =\n+~ Compatible theme Gutenberg.\n+~ Compatible WP 6.2.\n+~ Fixed: auto add shortcode Profile.\n+~ Show notification: Addons has new version.\n+~ Fixed: error buy with Guest display pending Order.\n+~ Tweak: shortcode learn_press_button_course.\n+~ Fixed: error display title on mobile app.\n+~ Lesson: stop support post-formats.\n+\n+= 4.2.2.3 (2023-03-21) =\n+~ Fixed: some error with Profile, LP_Profile_Tabs class.\n+~ Fixed: make some page builder like: elementor, visual composer work incorrect.\n+~ Remove implements ArrayAccess of LP_Query_List_Table class (to compatible with PHP8.1).\n+\n+= 4.2.2.2 (2023-03-09) =\n+~ Fixed: permalink item 404 when install \"YoastSeo\" plugin.\n+~ Fixed: error not show tab Avatar on Profile Page.\n+~ Modified: rewrite rules.\n+\n+= 4.2.2.1 (2023-03-03) =\n+~ Fixed: error link course with '%course_category%', on screen list courses Backend.\n+~ Fixed: some theme load only course on Archive Course Page.\n+~ Fixed: error not save basic info on Profile page.\n+~ Fixed: url current has symbol like الاعدادات.\n+~ Fixed: error not show message when save info Profile.\n+\n+= 4.2.2 (2023-03-01) =\n+~ Optimized performance.\n+~ Optimize: rewrite \"add_rewrite_rules\" method, only call on \"admin_init\" hook.\n+~ Optimize: flush_rewrite_rules only when save settings.\n+~ Optimize: not call get_available_payment_gateways on hook 'wp_loaded'.\n+~ Optimize: not call learn_press_get_current_profile_tab on hook 'init'.\n+~ Optimize: add thim_cache table for cache (apply for site not install plugin Object Cache - or cache not working).\n+~ Optimize: set\u002Fget\u002Fclear cache for count total students enrolled.\n+~ Optimize: set\u002Fget\u002Fclear cache user_course (user_items) data.\n+~ Optimize: only load class REST when call on url of API.\n+~ Optimize: modified set cookie session for user Guest(user not login).\n+~ Added: a slash to the end of the course item link.\n+~ Fixed: some functions make out of memory.\n+~ Fixed: some functions use static not correct make out of memory.\n+~ Deprecated \"learn_press_get_the_course\" function, replace with \"learn_press_get_course\" function.\n+~ Deprecated: \"learn_press_get_current_url\" function, replace with \"LP_Helper::getUrlCurrent\" method.\n+~ Temporary comment _get_theme_info, plugin info, because very low.\n+~ Comment: hook learn_press_lesson_comment_form_fields, learn_press_get_only_content_permalink, learn_press_lesson_before_delete_post\n+\n+= 4.2.1.1 (2023-02-04) =\n+~ Fixed: error js when add user on LP Order manual.\n+~ Modified: Not translate course slug base (permalink).\n+\n+= 4.2.1 (2023-02-03) =\n+~ Added: feature manager addons of LearnPress, download, update, activate, deactivate.\n+~ Fixed: style button.\n+~ Fixed: deprecated register widget elementor.\n+~ Added: 'get_evaluation_type' function.\n+~ Modified: 'get_passing_condition' function.\n+~ Added: 'get_evaluation_type' function.\n+~ Added: hook 'lp\u002Fcourse\u002Fextra-info\u002Fbefore-save'.\n+~ Added: hook 'learn-press\u002Flogin-redirect'.\n+~ Added: hook 'learn-press\u002Fregister-redirect'.\n+~ Added: \"status\" row on LP Order Receiver.\n+~ Fixed: error not set pagination page numbers questions when retake quiz.\n+~ Modified: \"set_title_pages\" function.\n+~ Modified: \"get_order_status_html\" function, now can translate status LP Order.\n+~ Fixed: error \"load more\" on Profile page.\n+~ Fixed: error can't set Sale price to 0.\n+~ Modified: step of input Passing Grade from 1 to 0.01.\n+\n+= 4.2.0 (2022-12-20) =\n+~ Fixed: compatibility with WordPress PHP 8.1.\n+~ Not implements ArrayAccess, Iterator, Countable of PHP on classes: LP_Datetime, LP_Session_Handler, LP_User_Item_Course, LP_User_Item, LP_Quiz_Results, LP_Course_Item, LP_Quiz, LP_Array_Access, LP_Profile_Tabs.\n+~ Except class LP_Query_List_Table we still keep implements ArrayAccess (will notice the warning, but don't worry, you only need to disable WP_DEBUG mode), because addons: learnpress-h5p(version 4.0.1 and lower), learnpress-assignment(version 4.0.7 and lower) require it. So you need to update to the higher version of these plugins to make sure.\n+~ Modified: LP_Datetime, deprecated method: toLocal, toRFC822, toUnix, setGMT, getSqlNullDate, addDuration, getPeriod.\n+~ Deprecated: get_time_remaining, get_time of the class LP_User_Item, get_finishing_type of the class LP_User_Item_Course.\n+~ Deprecated: get_course_remaining_time on the class LP_Abstract_User.\n+~ Modified: get_expiration_time, deprecated param $format (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F17502a02d5328c399f33ea1219f0c9e71f1a257d'>17502a0\u003C\u002Fa>).\n+~ Modified: class LP_Question_True_Or_False, LP_Question_Single_Choice, LP_Question_Multi_Choice, LP_Question_Fill_In_Blanks (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc'>3af1d1c\u003C\u002Fa>).\n+~ Modified: class LP_Question, deprecated method: _get_default_answers, _filter_meta_box_meta, update_answer_orders (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc'>3af1d1c\u003C\u002Fa>)\n+~ Modified: method 'get_answers' of class LP_Question (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002F3af1d1c78d3097f3d3b053ceecaf4264840eb1dc#diff-24bccff44021f19220835ca960719a15beb4bbc8d3ffea086cccd6d42054ec7cR633'>3af1d1c\u003C\u002Fa>)\n+~ Deprecated: 'learn_press_course_question_permalink_friendly' function.\n+~ Added: 'LP_Question_Cache', LP_Session_Filter class.\n+~ Commented: 'learn_press_mark_user_just_logged_in' function.\n+~ Not store key 'order_awaiting_payment' in session, you need update 'learnpress-certificate' addon to version 4.0.4 or higher.\n+~ Not call: 'learn_press_clear_cart_after_payment' on hook 'get_header'.\n+~ Not call: 'learn_press_custom_checkout_cart' on hook 'learn_press_checkout_cart'.\n+~ Deprecated: 'learn_press_add_order' function.\n+~ Deprecated: learn_press_generate_transaction_object function.\n+~ Modified: LP_Shortcode_Checkout class.\n+~ Fixed: shortcode [learn_press_checkout] working right.\n+~ Deprecated: 'LP_Request_Handler' class, your need to update addons 'Course Review' (version 4.0.4 or higher), 'Wishlist' (version 4.0.4 or higher).\n+~ Not call 'learn_press_set_user_cookie_for_guest' function on hook 'wp'.\n+~ Commented: 'set_cookie' method on class LP_Request. \u003Ca href=''>c12c4b54\u003C\u002Fa>\n+~ Modified: 'LP_Session_Handler' class (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002Fc12c4b546548b750c3d05cb108162b3bee458d9b'>c12c4b54\u003C\u002Fa>).\n+~ Optimized: handle session.\n+~ Only set the cookie when the user does not log in.\n+~ When a user login is successful, the previous session of the guest user is deleted.\n+~ When a user logs out, expired sessions are deleted.\n+~ Modified: 'save_data' method of class LP_Session_Handler (\u003Ca href='https:\u002F\u002Fgithub.com\u002FLearnPress\u002Flearnpress\u002Fcommit\u002Fc12c4b546548b750c3d05cb108162b3bee458d9b'>c12c4b5\u003C\u002Fa>).\n+~ Modified: 'get_cart_from_session', 'get_session_data', 'save_data' methods on class LP_Session_Handler.\n+~ Change name 'get_session' method to 'get_session_by_customer_id'.\n+~ Modified: 'update_session_timestamp', 'delete_session' methods on class LP_Session_Handler.\n+~ Modified: 'LP_Cart', optimize how to set session for cart, get cart items when called, instance of set on hook 'wp_loaded' always call, not call 'set_cart_cookies' when 'add_to_cart' method called.\n+~ Modified: 'calculate_totals' on class LP_Cart.\n+~ Deprecated: method 'get_cart_for_session' on class LP_Cart.\n+~ Modified: 'LP_Profile_Tabs' class.\n+~ Replace all access via array to fields and methods of classes LP_Query_List_Table, LP_Profile, LP_Profile_Tab.\n+~ Deprecated: 'offsetExists', 'offsetGet', 'get_current_question', 'get_question_position', 'check_question', 'get_question_link' methods LP_Quiz class.\n+~ Modified: 'create_order' method on class 'LP_Checkout'.\n+~ Deprecated: 'instructions' method on 'LP_Gateway_Offline_Payment' class.\n+~ Moved: settings permalink Profile to tab Permalinks.\n+~ Fixed security: inject SQL (CVE-2022-45820).\n+~ Fixed security: XSS.\n+~ Fixed: styles Backend, Frontend.\n+~ Remove save lesson preview on list lessons on the Backend.\n+~ Remove sortable between multiple section.\n+~ Modified: method \"list_courses\", change how call the template.\n+~ Checked: price is valid.\n+~ Fixed: search course in term with Polylang.\n+~ Modified: statistic of LP Order.\n+~ Checked: MathJax.Hub undefined.\n+~ Fixed: error json syntax API search courses, curriculum.\n+\n+= 4.1.7.3.2 (2022-11-18) - \u003Ca href='https:\u002F\u002Fthimpress.com\u002Flearnpress-v4-1-7-3-2-update\u002F' target='_blank' rel='noopener'>View detail\u003C\u002Fa> =\n+~ Added: tab permalink option.\n+~ Modified: remove border style on the tab single course.\n+~ Modified: style popup complete item.\n+~ Show: notice check wp_remote_get if the call fail.\n+~ Show: notice if LearnPress has beta version.\n+~ Changed: text 'Enable' to 'Sticky Quiz Paging' on the Advanced Settings.\n+\n+= 4.1.7.3.1 (2022-11-03) =\n+~ Fixed: error build missing styles.\n+\n+= 4.1.7.3 (2022-11-02) =\n+~ Updated: text grammar.\n+~ Modified: LP_DateTime class.\n+~ Added: Course category and tag to menu.\n+~ Changed: input type regular price, sale price to text.\n+~ Call quiz get_questions function to get_question_ids.\n+~ Fixed: upgrade LP3 to LP4 missing result of lesson.\n+~ Remove file class-lp-backward-plugins.php, class-lp-factory.php, class-lp-query-search.php, class-lp-course-utils.php, class-lp-rest-authentication.php\n+~ Remove code deprecated before.\n+\n+= 4.1.7.2 (2022-10-03) =\n+~ Removed: delete file mu-plugin (Moved to the plugin Thim Optimize).\n+~ Fixed: CVE-2022-3360 security.\n+~ Fixed: error \"Quiz is not auto submitted when the time is expired\".\n+~ Fixed: error \"Completed item is not redirected to the next item\".\n+~ Modified: Shortcode button LP.\n+~ Removed: delete shortcode 'learn_press_button_enroll'. We recommend using the shortcode 'learn_press_button_course' instead.\n+~ Fixed: error \"Email content on one line when you save\".\n+\n+= 4.1.7.1 (2022-09-16) =\n+~ Fixed: non-LP plugins causing errors.\n+\n+= 4.1.7 (2022-09-13) =\n+~ Fixed: IPN paypal.\n+~ Added: autocomplete meta-box field.\n+~ Fixed: h5p error in curriculum editor.\n+~ Modified: duplicate course, sections, items.\n+~ Handle multiple button Continue course.\n+~ Modified: has_completed_item() function.\n+~ Fixed: custom fields register not show on the Profile page.\n+~ Fixed: save order status.\n+~ Added: hook 'learn-press\u002Fuser-item\u002Fexpiration-time'.\n+~ Added: function duplicate question answer-meta when duplicate question.\n+~ Fixed: error show content of quiz when user doing questions.\n+~ Fixed: error fetch api has x-wp-nonce with cache expire.\n+~ Fixed: sidebar toggle on mobile with theme Eduma.\n+~ Added: autocomplete meta-box field.\n+~ Fixed: error not send mail when register user on page checkout.\n+~ Fixed: error wrong status graduation when set Passing Grade is 100% on Quiz.\n+~ Fixed: header, footer email of LP not detect variable.\n+~ Fixed: error duplicated items, section when double click.\n+\n+= 4.1.6.9.3 (2022-08-10) =\n+~ Fixed: show wrong shortcode on course, item's course.\n+\n+= 4.1.6.9.2 (2022-08-09) =\n+~ Fixed: show wrong special character (Ex: ü) on Section title, description.\n+~ Fixed: error on duplicate course, item function not same content old course, item.\n+~ Fixed: button sidebar toggle not show on default theme WP.\n+~ Fixed: ESC make error with payment gateway.\n+\n+= 4.1.6.9.1 (2022-08-04) =\n+~ Fixed: error ESC content of course, items' course make iframe, embed not working.\n+~ Fixed: error complete lesson, do quiz on API for App mobile.\n+\n+= 4.1.6.9 (2022-08-03) =\n+~ Modified: read items, read sections of course. (optimize read speed).\n+~ Modified: 'set_viewing_item' method.\n+~ Modified: set thumbnail image size on the 'Profile Page' by width setting on 'Avatar Dimensions'.\n+~ Fixed: error search no courses but return all (Archive courses).\n+~ Fixed: error LP_Shortcode_Course_Curriculum with Elementor.\n+~ Sanitize, ESC.\n+~ Deleted: folder attributes, files: 'class-lp-gdpr.php', 'class-lp-hard-cache.php', 'class-lp-repair-database.php', 'class-lp-utils.php'.\n+~ Clear, optimize codes.\n+~ Added: hook do_action 'lp\u002Fbackground\u002Fcourse\u002Fsave'.\n+~ Added: hooks for addon LP - WPML.\n+~ Deprecated: methods 'load_curriculum'.\n+~ Style: FAQs on single course, spacing items progress, space in single tab.\n+~ Change: 'Course Item Per Page' set default is 10.\n+\n+= 4.1.6.8 (2022-07-05) =\n+~ Fixed: click pagination when enable 2 option Load Courses Ajax.\n+~ Added: loading, error message(if it has) when start quick.\n+~ Fixed: error sort by popular with theme Eduma.\n+~ Fixed: Wordfence denied param: \"author\", convert to \"user\" on API.\n+~ Fixed: query popular courses for app.\n+~ Added: return price format for app.\n+~ Added: API delete account for app.\n+~ Merged: addon Offline Payment.\n+~ Fixed: styles with themes: Avada, Divi, Flastsome, Bridget, Astra, The 7.\n+~ Fixed: security.\n+\n+= 4.1.6.7 (2022-06-20) =\n+~ Fixed: errors quiz when call API LP remove action 'wp_loaded'.\n+~ Fixed: some minor bugs.\n+~ Fixed: install tables for multiple sites.\n+~ Fixed: save settings always return tab General.\n+~ Fixed: layout 'select items' popup when edit course.=\n+\n+= 4.1.6.6 (2022-06-13) =\n+~ Fixed: security.\n+~ Added: option \"Enable loading ajax Courses on the Archive Course page\".\n+~ Added: option \"No Page load Courses Ajax\".\n+\n+= 4.1.6.5 (2022-05-16) =\n+~ Fixed: error with block theme 2022.\n+~ Fixed: error with LP Addon Frontend Editor.\n+\n+= 4.1.6.4 (2022-05-05) =\n+~ Modified: setup require tables for LearnPress when activate plugin.\n+~ Modified: setup wizard.\n+~ Optimized: code.\n+~ Fixed don't scroll to item of section > config \"Section Per Page\".\n+\n+= 4.1.6.3 (2022-04-20) =\n+~ Fixed: sort section of course.\n+~ Fixed: sort item of course's section when edit course.\n+~ Fixed: sometime call get_curriculum empty.\n+~ Modified: fixed when set seconds big (about 100 hours), can't convert to format time right.\n+~ Fixed: duplicate course not duplicate sections, items.\n+~ Fixed: error wp.media on page Email setting.\n+~ Fixed: count wrong order on the backend.\n+\n+= 4.1.6.2 (2022-04-04) =\n+~ Fixed: go to last item of section still show button \"load more items\".\n+~ Fixed: \"Undefined\" when click \"load more sections\" on theme Eduma.\n+\n+= 4.1.6.1 (2022-04-01) =\n+~ Optimize.\n+~ Fixed: error show input when retake Fill In Blank - off option \"Show correct answer\".\n+~ Modified: filter query courses API.\n+~ Hide load more item button which section it hide.\n+~ Fixed: save course is sale when edit course.\n+~ Added: hook \"learn-press\u002Fuser\u002Fquiz-finished\".\n+~ Fixed: error site use sub-folder domain will be error 301 when checkout.\n+~ Fixed: error show \"The item is not assigned to this course\" on Page builder.\n+~ Fixed: error style RTL item-actions.\n+~ Fixed: case user guest buy course and not login, back to this course will not show button \"purchase course\".\n+~ Added: hook do_action( 'login_form' ) on the page LP Checkout, form \"Login\".\n+\n+= 4.1.6 (2022-03-14) =\n+~ Compatible: with \"Polylang\" plugin.\n+~ Compatible LP Shortcode with Elementor.\n+~ Compatible: with block theme (Gutenberg).\n+~ Added: set -1 value for no limit Retake Quiz.\n+~ Added: order by popular courses on API.\n+~ Fixed: case set duration quiz = 0.\n+~ Fixed: case set password for quiz.\n+~ Fixed: create new question didn't set type.\n+~ Fixed: when search global WP with ?s= will not search item's course and question not assign.\n+~ Fixed: \"Active Courses\" empty on the Profile page.\n+~ Fixed: security does not sanitise and escape the lp-dismiss-notice.\n+~ Fixed: error many times redirect when access link domain\u002Ftype\u002Fnot_found.\n+~ Fixed: compare string answer not set \"Match case\" type Fill In Blank Question.\n+\n+= 4.1.5 (2022-01-24) =\n+~ Modified: optimize, handle cache for query courses.\n+~ Added: meta key '_lp_regular_price'.\n+~ Modified: get price of course.\n+~ Added: \"get_user_courses\" function.\n+~ Fixed: security avatar image (Arbitrary Image Renaming).\n+~ Modified: upload avatar image.\n+~ Fixed: RTL style.\n+~ Modified: optimize load Curriculum via API, fast for big data (larger thousands items).\n+\n+= 4.1.4.1 (2021-12-22) =\n+~ Added: settings redirect when finish course.\n+~ Added: enqueue script by shortcode button purchase.\n+~ Fixed: error save value on the textarea format code HTML.\n+~ Fixed: error timezone is different UTC-0 will finish quiz soon.\n+~ Save info total items (quiz, question,...) of course when saving the course - improve performance.\n+~ Fixed: error change user Guest to another user on LP Order not save.\n+~ Fixed: Guest buy course with user exists.\n+~ Fixed: Guest buy course with create account.\n+~ Fixed: High CPU (many query) when user login view single course.\n+~ Fixed: No require enroll.\n+~ Changed: view course's user on the Backend to the profile's user.\n+~ Modified: submit quiz, get result course, quiz.\n+~ Fixed: query get orders on Profile page.\n+~ Fixed: query get orders by user (multiple user) on the Backend.\n+~ Modified: delete course will delete section, section_items, lp_user_items, user_itemmeta.\n+~ Saved: info total items of course when save course - to make call fast.\n+~ Rewrite: function count total items of the Course.\n+~ Fixed: get course id when click Get Passing Grade in Evaluate via results of the final quiz.\n+~ Fixed: count Unassigned questions.\n+~ Changed logic check \"fill in blank\" question: user answer right all fields will get point of question, one of answer wrong, the question is fail and get point = 0.\n+\n+= 4.1.4 (2021-11-08) =\n+~ Fixed security: when user share profile, another user can see settings as change password, change info.\n+~ Modify: not scroll to title courses when load first.\n+~ Fixed: get incorrect key setting \"archive course layout\".\n+~ Fixed: get value \"From name\", \"Footer text\" setting Email.\n+~ Removed: option set \"From address\" email, removed hook \"wp_mail_from\" make some site can't send email when install LP.\n+~ Comment some functions deprecated: \"_learn_press_restrict_view_items\", \"_learn_press_set_user_items\".\n+~ Added: hook \"learnpress\u002Fcourse\u002Ftemplate\u002Fprice\u002Fcan-show\".\n+~ Added: filter \"before_show_lp_widget_content\".\n+~ Show icons on the child Settings tab - Profile page.\n+~ Fixed: case answer's question Fill in blank = \"0\" always incorrect.\n+~ Fixed: case content of question answers will change by hook apply_filters( 'the_content') when reload page, change to do_shortcode().\n+~ Fixed: store answer of user when reload page will lose.\n+~ Added: hooks apply_filters('learnpress\u002Fprofile\u002Ftab\u002Fenrolled\u002Fsubtab-active'), apply_filters('learnpress\u002Fprofile\u002Ftab-active').\n+~ Modified: functions course_external_button, can_enroll_course with case course is external and purchased course.\n+~ Sanitize: email_footer, email_header.\n+~ Removed: some functions not use on file class-lp-email.php: \"get_variable\", \"get_object\", \"get_common_template_data\", \"data_to_variables\"\n+~ Fix show explanation when reload site.\n+~ Fix show message: \"Your order is waiting for processing\" when LP Order status is processing.\n+~ Fixed: condition get link last item if all items completed - on button continue.\n+~ Fixed: show explanation.\n+~ Fixed: error user login with mail buy as Guest and LP Oder completed but can't view course.\n+~ Fixed: error, \u003Ca href=\"https:\u002F\u002Fblog.szfszf.top\u002Fstatic\u002Fpapers\u002FLearnPress_4.1.3.2_sql_injection_1cf8665be17b7708a3f180067fd2d50b.html\">sql injection\u003C\u002Fa>, sanitize feature duplicate post (Course, Lesson, Quiz v.v...)\n+\n+= 4.1.3.2 (2021-10-15) =\n+~ Fixed: security CVE-2021-39348, set sanitize for some params missing.\n+\n+= 4.1.3.1 (2021-09-15) =\n+~ Fixed: some shortcode of latex show incorrect on question answer.\n+~ Added: hooks for course_continue_button, course_purchase_button, course_enroll_button.\n+~ Fixed: Fatal error LP_Abstract_User::get_course_data() when upgrade from LP3 to LP4.\n+~ Moved: function \"Email hook notify\" to hook \"plugin_loaded\".\n+~ Added: hooks \"learnpress\u002Fhook\u002Fbefore-addons-call-hook-learnpress-ready\".\n+~ Fixed security: Cross Site Scripting (XSS) on fields: External Link, Requirements, Target Audience, Key Features, FAQs.\n+~ Fixed: click button continue redirect wrong item.\n+~ Added: functions get_user_ids_enrolled, get_total_user_enrolled.\n+~ Fixed: error WP_Filesystem_Direct::exist not exist.\n+\n+= 4.1.3 (2021-09-07) =\n+~ Modified: Learnpress order status on Dashboard of Wordpress.\n+~ Fixed: Widgets: Popular course, Feature course, Recent course, Course Progress, Course Info, Course Extra. All widget compatible with Elementor.\n+~ Fixed: Info Order have courses deleted on page Profile .\n+~ Fixed: error user can't learn course set external link when Admin created Order manual Completed has this course.\n+~ Improve performance.\n+~ Modify function set cache.\n+~ Modify custom post type of LP.\n+~ Modify feature run progress on background.\n+~ Handle send all email of LP (New Order, Processing Order, Completed Order, Cancelled Order, Enrolled Course, Finished Course, Become An Instructor) on Background.\n+~ Remove child order when Admin created Order manual.\n+~ Modify enroll\u002Fbuy course (user, guest).\n+~ Added wysiwyg field for metabox.\n+~ Compatible with MathJax-LateX plugin.\n+\n+= 4.1.2 =\n+~ Modify, optimize Archive course page - call API - make faster\n+~ Added: back icon on item page\n+~ Fixed: some where call old function \"get_profile_socials\" not has param $user_id\n+\n+= 4.1.1 =\n+~ Added: tool clean \"table session\" clean sessions expire after 1 days.\n+~ Fixed: not show button \"continue\" when course is blocked.\n+~ Fixed: course doesn't has any item will be not show button \"continue\", \"finish\", \"retake\".\n+~ Updated: file languages\n+\n+= 4.1.0 =\n+~ Added: feature \"Allow repurchase option\". Manager can set fixed: Reset\u002FKeep course progress of course or allow student choice.\n+~ Fixed: show incorrect \"Active Courses\" on page profile.\n+~ Fixed: show fake student.\n+~ Fixed: duplicate label on form Register custom fields.\n+\n+= 4.0.9 =\n+~ Added: option enable sticky navigation pagination when user answer question on quiz.\n+~ Fixed: set again current item when manager remove item current when edit course.\n+~ Modified: page profile - load ajax call API, show more info.\n+~ Fixed: can't upgrade DB from 3 to 4 because user translate menu \"LearnPress\".\n+~ Modified: Navigation on page quiz - change icon next, previous to text.\n+~ Fixed: function \"duplicate course\" not duplicate \"answer option\"\n+~ Fixed: Social icons on page profile when user view another user.\n+~ Fixed: on multiple site enable option \"Registration is disabled\" will not show form register on page Profile.\n+\n+= 4.0.8 =\n+~ Added: feature \"Allow Repurchase course\"\n+~ Added: feature \"No require enroll\"\n+~ Fixed: Custom register fields error with some name not utf8\n+~ Added: field \"confirm password\" on register form profile\n+~ Fixed: file config.js permission 403 on some sites, change name to lp-configs.js\n+~ Fixed: When edit course, Admin can add item of another user\n+\n+= 4.0.7 =\n+~ Fixed: CPU runs high\n+~ Fixed: \"start quiz\" error with some cases have cached.\n+~ Fixed: make Elementor pro show wrong: header, footer... (theme builder)\n+\n+= 4.0.6 =\n+~ Fixed: Page profile not show login\u002Fregister form\n+~ Fixed: translated text on js function \"Quiz\"\n+~ Fixed: js scroll to item viewing\n+~ Fixed: show html title question\n+~ Fixed: Order change status from \"completed\" to \"pending\" => user can't learn courses in this order\n+~ Added: Option \"Logout Redirect\"\n+~ Fixed: Set default sidebar curriculum will be hide on mobile\n+~ Modify: Remove course on Overview tab when enable \"Publish Profile\"\n+~ Fixed: Elementor pro make archive course show wrong\n+\n+= 4.0.5 =\n+~ Fixed: error \"Duplicate entry\" for case upgrade LP4, if user install LP4 and save setting before Upgrade Database\n+~ Fixed: get option 'avatar_dimensions' set default value if user not set\n+~ Fixed: get option 'course_thumbnail_dimensions' set default value if user not set\n+~ Modify template Profile\n+~ Fixed: tool \"Reset course progress\"\n+~ Fixed: get options \"Courses per page\"\n+\n+= 4.0.4 =\n+~ Fixed: get option \"archive_course_limit\" default value if empty.\n+~ Fixed: Profile shortcode.\n+~ Fixed: error table \"learnpress_user_itemmeta\" doesn’t exist when install new.\n+~ Fixed: style comment function.\n+~ Added: form comment on course.\n+~ Fixed: js itemProgress undefined in Eduma theme\n+\n+= 4.0.3 =\n+~ Fixed: tool \"Reset course progress\"\n+~ Fixed: tool \"Reset user progress\"\n+~ Added: tool \"Create Database Indexes\"\n+~ Fixed js button \"Retake course\" if you have more than one.\n+~ Added: tool \"Re upgrade Database\" ~ If DB upgrade not success\n+~ Fixed: show button finish when completed quiz - if assessment passed\n+\n+= 4.0.2 =\n+~ Upgrade library chart.js to v3.2.1\n+~ Optimize query with cache get list questions on a quiz\n+~ Show content(description) on page LP Profile, LP Archive\n+~ Fixed: errors when activated \"Metabox\" plugin\n+~ Fixed: broken layout profile page when activated \"All in one seo\" plugin\n+~ Removed: tool \"Remove current Data\"\n+~ Removed: tool \"Remove outdated Data\"\n+~ Removed: tool \"Repair database\"\n+\n+= 4.0.1 =\n+~ Fixed: upgrade LP error if mysql version \u003C 5.7 - \"Specified key was too long\".\n+~ Fixed: minor bugs.\n+\n+= 4.0.0 =\n+~ Added new UI\u002FUX for Quiz screen in frontend.\n+~ Added enable Gutenberg for lesson and quiz and question.\n+~ Added extra meta for course: Requirements, Target Audience, Key Features.\n+~ Improved quiz settings that made it simpler and easy to use.\n+~ Improved single course page.\n+~ Improved archive course page.\n+~ Restructure database tables.\n+~ Added some hooks\u002Ffilters.\n+\n+= 3.2.8.8 =\n+~ Fix compatible PHP 8.0.3\n+~ Fix Yoat SEO course category title not working\n+\n+= 3.2.8.7 =\n+~ Fix: start quiz 404\n+~ Optimize\n+\n+= 3.2.8.6 =\n+~ Fix minor bug\n+~ Optimize enroll course\n+~ Add cache get items' course\n+~ Add reset progress by course_id\n+~ Fix \"Enroll Button\" is not appearing when disable \"Auto Enroll\" option\n+\n+= 3.2.8.5 =\n+~ Fix header lesson style error on iphone\n+~ Fix scrollbar error some themes\n+~ Fix scroll js to item user viewing\n+~ Add filter 'lp\u002Femail\u002Ftype-order\u002Fobject', 'lp\u002Femail\u002Forder\u002Fsupport_variable'\n+\n+= 3.2.8.4 =\n+~ Add function Scan database if have not index in table will create\n+~ Add function Repurchase course when course finished or block duration expire\n+~ Fix function Statistics\n+~ Fix error content lesson conflict when activated elementor & yoast seo\n+~ Fix order status on Dashboard screen\n+~ Remove js scrollbar jquery\n+~ Add option 'Enable Popup Confirm Finish Course, Complete Item\n+~ Add message block duration\n+\n+= 3.2.8.3 =\n+~ Fix compatible PHP 8.0\n+~ Fix checkout message error\n+~ Optimize\n+\n+= 3.2.8.2 =\n+~ Fix compatible WP 5.6\n+~ Fix error Yoast-Seo in course archive page\n+~ Error file global.js on 'Twenty Seventeen' theme\n+~ Fix error page course archive with YoastSeo\n+~ Fix count students enrolled course on list course backend\n+~ Fix toggle curriculum bar for right-to-left\n+\n+= 3.2.8.1 =\n+~ Fix WPBakery load style inline on course's item page\n+~ Fix make co-instructor not show list courses on backend\n+~ Fix miss lib vue js on LearnPress \u002F Tools \u002F Course page\n+\n+= 3.2.8 =\n+~ Fix query get posts (courses, items courses) on Backend - multiple site\n+~ Fix error not same param on hook of Yoast SEO vs Yoast SEO premium\n+~ Fix security XSS function view_log\n+~ Fix check if get user on function learn_press_course_purchase_button() is null\n+~ Fix create statics pages LP on 'lp setup' page\n+~ Show message duplicate class RWMB_Field with another plugins\n+\n+= 3.2.7.9 =\n+~ Fix question not show description\n+\n+= 3.2.7.8 =\n+~ Fix save author id when add item when edit course\n+~ Fix title, description item course when install yoast seo plugin\n+~ Fix Retake when not enable duration expire\n+~ Fix function 'Instructors Registration'\n+~ Add function Export order invoice PDF\n+\n+= 3.2.7.7 =\n+~ Add Evaluate via questions\n+~ Add Evaluate via mark\n+~ Fixed duration expire course\n+~ Fixed link 'Preview change' button when edit item course\n+~ Fixed title of course archive page\n+~ Fixed if quiz has only one question will not show paginate\n+\n+= 3.2.7.6 =\n+~ Fix missing file class-lp-course-database.php\n+\n+= 3.2.7.5 =\n+~ Fixed run Elementor with question.\n+~ Fixed lesson preview not show button complete when user enrolled.\n+~ Add tag apply_filter 'learn-press\u002Forder-item-not-course-id' on received-order.\n+~ Add tag apply_filter 'learn-press\u002Ftmpl-button-purchase-course' before return button purchase course.\n+~ Optimize (permalink of items course).\n+~ Show finish course button when items of course completed although the course not passed.\n+~ Fixed explanation of question when user completed quiz.\n+~ Hide description of quiz when the quiz completed.\n+\n+= 3.2.7.4 =\n+~ Fix can't load items when select on Order Backend\n+\n+= 3.2.7.3 =\n+~ Fixed error get_image() return bool not string on the file \\templates\\loop\\course\\thumbnail.php\n+~ Modify description for the function 'External Link'\n+~ Fixed LP_Datetime error with date = '0000-00-00 00:00:00'\n+~ Fixed not show number Duration of Lesson when translate text\n+~ Fixed not send mail for instructor when have new order\n+~ Remove hook get avatar of Ultimate member plugin\n+~ Fixed get value with, height image_size on LP setting\n+~ Fixed security, clear sanitize\n+~ Wilfried, security ninja at Synacktiv\n+~ Fixed compatible with Elementor on items of course (lesson, quizz, question v.v...)\n+\n+= 3.2.7.2 =\n+~ Fixed email setting not save tag html\n+\n+= 3.2.7.1 =\n+~ Fix save settings\n+\n+= 3.2.7 =\n+~ Fix sanitize\n+\n+= 3.2.6.10 =\n+~ Fix add-on GradeBook\n+\n+= 3.2.6.9 =\n+~ Revert library meta-box to v4.15.7\n+\n+= 3.2.6.8 =\n+~ Fixed security: remove functions low security\n+~ Fixed some minor bugs\n+~ Fixed confusing \"external link button\" name default of course\n+~ Fixed filter items of course\n+~ Fixed create same name, slug page Checkout with Woo\n+~ Improve performance\n+\n+= 3.2.6.7 (2020.03.16) =\n+~ Fixed security issues (CVE-2020-7916): uer logged can change role all users to Instructor\n+~ Fixed security issues (CVE-2020-7917): remove function low security\n+~ Fixed error preview Assignment\n+\n+= 3.2.6.6 =\n+~ Fixed option Block Lessons not working\n+\n+= 3.2.6.5 (20.11.2019) =\n+~ Fixed email doesn't send.\n+~ Fixed some js errors.\n+~ Fixed js call twice times.\n+~ Fixed question doesn't show after added to quiz.\n+~ Fixed ignore some metadata when copying course.\n+~ Fixed search orders in backend.\n+\n+= 3.2.6.4 =\n+~ Fixed some errors.\n+\n+= 3.2.6.3 =\n+~ Fixed css conflict with text block of vc.\n+~ Fixed show message 'Out of stock' for course reached limitation users.\n+~ Fixed show checked answers when review quiz.\n+~ Fixed review quiz option does not work properly.\n+~ Fixed update view after removing order's items.\n+\n+= 3.2.6.2 =\n+~ Fixed cannt add items to course.\n+\n+= 3.2.6 =\n+~ Added option to exclude js\u002Fcss libraries unnecessary (used in theme or other plugins).\n+~ Added alt prop to user profile avatar.\n+~ Fixed can't next\u002Fprev questions when doing quiz.\n+~ Fixed wrong items navigation when learning course.\n+~ Fixed missing js of some pages in admin.\n+~ Fixed can't close admin notices.\n+~ Updated envato api to newer version.\n+\n+= 3.2.5.6 =\n+~ Added new strings for translating.\n+~ Corrected currency of Rwandan franc.\n+~ Fixed missing utils library when adding manually the orders.\n+~ Fixed upgrade function that doesn't hide the message when it done.\n+~ Fixed can't create new page in settings.\n+\n+= 3.2.5.5 =\n+~ Fixed guest can not start quiz with no require enroll course option.\n+~ Fixed sql to filter orders by user ID.\n+~ Fixed issue of sending email when finished course: not correct Grade.\n+~ Fixed can not see Actions buttons when adding questions into the quiz.\n+~ Fixed changed the logic of Continue button for Course: continue with the next incomplete item.\n+~ Fixed wrong code to pick up instructor email.\n+\n+= 3.2.5.4 =\n+~ Fixed load js missing dependencies and only in LP page.\n+\n+= 3.2.5.3 =\n+~ Changed SQL to read course items by user item ID.\n+~ Improved performance in admin orders page.\n+~ Upgraded Vue\u002FVuex to latest version.\n+~ Added new theme to LP ad.\n+\n+= 3.2.5.2 =\n+~ Fixed bug can't access course after purchased.\n+~ Fixed bug user can't redo quiz with option 'Retake' is 1.\n+~ Fixed bug can't order questions by date in questions bank.\n+~ Extracted purchased date to date and time in order emails.\n+~ Show point of quiz in result page.\n+\n+= 3.2.5.1 =\n+~ Fixed can not next\u002Fprev question when doing quiz.\n+~ Fixed get wrong total student of a course.\n+~ Updated language .POT file.\n+\n+= 3.2.5 =\n+~ Fixed button for creating LP pages does not work properly.\n+~ Fixed warning when getting course items does not exists.\n+~ Added button to close warning for outdated templates.\n+~ Fixed search order not working.\n+~ Fixed get course items in incorrect order.\n+~ Fixed can't start quiz when the course is not required enroll.\n+~ Fixed the amount number of enrolled users isn't updated correctly.\n+\n+= 3.2.4 =\n+~ Fixed cannot enroll course.\n+~ Fixed prev question button not working correct.\n+~ Fixed one extra answer option when add new question.\n+~ Fixed some deprecated keywords for PHP 7.3.\n+~ Fixed item is null for an item which doesn't support it's type (like assignment after deactivate).\n+~ Fixed bug the next and prev button not work in review mode of quiz.\n+\n+= 3.2.3 =\n+~ Removed un-security code in PP library.\n+~ Fixed get curriculum item types doesn't work properly.\n+~ Fixed sort sections\u002Fitems wrong in SQL query.\n+\n+= 3.2.2 =\n+~ Fixed review quiz doesn't work properly.\n+~ Fixed table session create a lot of rows.\n+~ Fixed can't enroll to a course purchased.\n+~ Removed unused functions.\n+\n+= 3.2.1 =\n+~ Fixed can't enroll course.\n+~ Fixed upload issue and drag user avatar on mobile.\n+~ Fixed course duration does not work properly.\n+~ Fixed question with multi language.\n+~ Fixed mail to user 2 times when completed course.\n+\n+= 3.2.0 =\n+~ Fixed issue info of order added manual not correct.\n+~ Fixed issue course duplicated is published.\n+~ Fixed issue Course content column show as \"No Content\".\n+~ Fixed some issues related to cache.\n+\n+= 3.1.0 =\n+~ Fixed issue vulnerabilities.\n+~ Fixed issue related to object cache when doing quiz.\n+~ Fixed lesson 404 with Polylang.\n+~ Fixed PHP Fatal error class ‘LP_Plugins_Helper’ not found\n+\n+= 3.0.12 =\n+~ Fixed minor bug in gradebook list in admin\n+~ Made hook learn-press\u002Fcourse-tabs work\n+~ Fixed bug: not auto complete quiz. Add 1 more filter hook for checking publicity in profile page\n+~ Fixed bug: auto enroll course without permission to enroll course\n+~ Changed filter tag for get_default_meta of lesson\n+~ Auto full-screen in mobile view\n+~ Fixed bug: wrong count number in No Preview at Lessons List back-end page\n+~ Fixed bug: Instructor user cannot see comments of lesson\n+~ Changed version for template files\n+~ Added base url for construct nav in user profile\n+~ Added param for get_nav method\n+~ Fixed bug: answer correct all question but quiz result is failed with 0%\n+~ Fixed small bug in quiz editor\n+~ Fixed bug: wrong count number of the courses in back end because of the status of preview course\n+~ Fixed bug: not redirect to correct page after logged in in Profile page\n+~ Fixed bug fatal error include file\n+~ Added icon for chat-type-format of content item\n+~ Fixed header-sent when log file\n+\n+= 3.0.10 =\n+~ Added quiz option to minus a number of points for each wrong question in quiz\n+~ Added admin email to send to admin when an order is completed\n+~ Added button allows wp admin can send a request to subscriber\n+~ Improved auto redirecting to current question when user go to a quiz\n+~ Improved UI of course editor for RTL\n+~ Improved content of email sending to admin and instructor\n+~ Fixed page show 404 with pagination in courses page (conflict with WPML)\n+~ Fixed course price is still showing after user enrolled course\n+~ Fixed not auto redirecting to checkout after logged in\n+~ Fixed some issues made question can't edit\n+~ Fixed issue for requesting to get related themes\u002Faddons in admin\n+~ Fixed some issues with content header when viewing in Safari\n+~ Fixed wrong ordering of course item when adding new\n+~ Fixed order for multiple users is not show in list of orders\n+~ Fixed some text is not translatable\n+~ Fixed breadcrumb not show page name when viewing archive course\n+~ Fixed archive course show header is title of first course\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig: course-builder\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fcourse-deliver-type.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fcourse-deliver-type.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fcourse-deliver-type.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fcourse-deliver-type.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Profile tabs\r\n- *\r\n- * @since 4.2.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-$options = [\r\n-\t'private_1_1'     => esc_html__( 'Private 1-1', 'learnpress' ),\r\n-\t'in_person_class' => esc_html__( 'In-person class', 'learnpress' ),\r\n-\t'live_class'      => esc_html__( 'Live class', 'learnpress' ),\r\n-];\r\n-\r\n-return apply_filters( 'learn-press\u002Fcourse\u002Fdeliver-type', $options );\r\n+\u003C?php\n+\u002F**\n+ * Profile tabs\n+ *\n+ * @since 4.2.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+$options = [\n+\t'private_1_1'     => esc_html__( 'Private 1-1', 'learnpress' ),\n+\t'in_person_class' => esc_html__( 'In-person class', 'learnpress' ),\n+\t'live_class'      => esc_html__( 'Live class', 'learnpress' ),\n+];\n+\n+return apply_filters( 'learn-press\u002Fcourse\u002Fdeliver-type', $options );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fcourse-price.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fcourse-price.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fcourse-price.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fcourse-price.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,112 +1,112 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Course price settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Elementor\\Group_Control_Typography;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'style_regular_price',\r\n-        esc_html__( 'Regular Price', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\t[\r\n-\t\t\t'price_align'         => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'price_align',\r\n-\t\t\t\t__( 'Alignment', 'learnpress' ),\r\n-\t\t\t\t'left',\r\n-\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t'left'   => [\r\n-\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'center' => [\r\n-\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'right'  => [\r\n-\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'toggle'    => false,\r\n-\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t'{{WRAPPER}}' => 'text-align: {{VALUE}};',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'regular_price_color'       => LPElementorControls::add_control_type_color(\r\n-\t\t\t\t'regular_price_color',\r\n-\t\t\t\tesc_html__( 'Color', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{WRAPPER}} .course-item-price' => 'color: {{VALUE}};',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'regular_price_typography'    => LPElementorControls::add_group_control_type(\r\n-\t\t\t\t'regular_price_typography',\r\n-\t\t\t\tGroup_Control_Typography::get_type(),\r\n-\t\t\t\t'{{WRAPPER}} .course-item-price'\r\n-\t\t\t),\r\n-\t\t]\r\n-    ),\r\n-    LPElementorControls::add_fields_in_section(\r\n-\t\t'style_origin_price',\r\n-        esc_html__( 'Origin Price', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\t[\r\n-\t\t\t'origin_price_color'       => LPElementorControls::add_control_type_color(\r\n-\t\t\t\t'origin_price_color',\r\n-\t\t\t\tesc_html__( 'Color', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price' => 'color: {{VALUE}};',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'origin_price_typography'    => LPElementorControls::add_group_control_type(\r\n-\t\t\t\t'origin_price_typography',\r\n-\t\t\t\tGroup_Control_Typography::get_type(),\r\n-\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price'\r\n-\t\t\t),\r\n-\t\t\t'origin_price_padding'       => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'origin_price_padding',\r\n-\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'style_free_price',\r\n-        esc_html__( 'Free Price', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\t[\r\n-\t\t\t'free_price_color'       => LPElementorControls::add_control_type_color(\r\n-\t\t\t\t'free_price_color',\r\n-\t\t\t\tesc_html__( 'Color', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{WRAPPER}} .course-item-price .free' => 'color: {{VALUE}};',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t]\r\n-\t)\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Fcourse-price',\r\n-\tapply_filters(\r\n-\t\t'learn-press\u002Felementor\u002Fcourse-price\u002Ftab-styles',\r\n-\t\t$style_fields\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Course price settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use Elementor\\Group_Control_Typography;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'style_regular_price',\n+        esc_html__( 'Regular Price', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\t[\n+\t\t\t'price_align'         => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'price_align',\n+\t\t\t\t__( 'Alignment', 'learnpress' ),\n+\t\t\t\t'left',\n+\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t[\n+\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t'left'   => [\n+\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\n+\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'center' => [\n+\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\n+\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'right'  => [\n+\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\n+\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t],\n+\t\t\t\t\t'toggle'    => false,\n+\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t'{{WRAPPER}}' => 'text-align: {{VALUE}};',\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'regular_price_color'       => LPElementorControls::add_control_type_color(\n+\t\t\t\t'regular_price_color',\n+\t\t\t\tesc_html__( 'Color', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'{{WRAPPER}} .course-item-price' => 'color: {{VALUE}};',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'regular_price_typography'    => LPElementorControls::add_group_control_type(\n+\t\t\t\t'regular_price_typography',\n+\t\t\t\tGroup_Control_Typography::get_type(),\n+\t\t\t\t'{{WRAPPER}} .course-item-price'\n+\t\t\t),\n+\t\t]\n+    ),\n+    LPElementorControls::add_fields_in_section(\n+\t\t'style_origin_price',\n+        esc_html__( 'Origin Price', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\t[\n+\t\t\t'origin_price_color'       => LPElementorControls::add_control_type_color(\n+\t\t\t\t'origin_price_color',\n+\t\t\t\tesc_html__( 'Color', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price' => 'color: {{VALUE}};',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'origin_price_typography'    => LPElementorControls::add_group_control_type(\n+\t\t\t\t'origin_price_typography',\n+\t\t\t\tGroup_Control_Typography::get_type(),\n+\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price'\n+\t\t\t),\n+\t\t\t'origin_price_padding'       => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'origin_price_padding',\n+\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .course-item-price .origin-price' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t)\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'style_free_price',\n+        esc_html__( 'Free Price', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\t[\n+\t\t\t'free_price_color'       => LPElementorControls::add_control_type_color(\n+\t\t\t\t'free_price_color',\n+\t\t\t\tesc_html__( 'Color', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'{{WRAPPER}} .course-item-price .free' => 'color: {{VALUE}};',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t]\n+\t)\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Fcourse-price',\n+\tapply_filters(\n+\t\t'learn-press\u002Felementor\u002Fcourse-price\u002Ftab-styles',\n+\t\t$style_fields\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Ffilter-course-el.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Ffilter-course-el.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Ffilter-course-el.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Ffilter-course-el.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,780 +1,780 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget filter course settings.\r\n- *\r\n- * @since 4.2.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Elementor\\Group_Control_Border;\r\n-use Elementor\\Group_Control_Box_Shadow;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_area',\r\n-\t\tesc_html__( 'Filter Area', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'item_filter',\r\n-\t\t\t\tesc_html__( 'Fields', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'item_fields' => 'category',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'item_fields' => 'btn_submit',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\tControls_Manager::REPEATER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fields'        => [\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'    => 'item_fields',\r\n-\t\t\t\t\t\t\t'label'   => esc_html__( 'Filter By', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'    => Controls_Manager::SELECT,\r\n-\t\t\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t\t\t'search'     => esc_html__( 'Keyword', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'price'      => esc_html__( 'Price', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'category'   => esc_html__( 'Course Category', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'tag'        => esc_html__( 'Course Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'author'     => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'level'      => esc_html__( 'Level', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'btn_submit' => esc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'btn_reset'  => esc_html__( 'Button Reset', 'learnpress' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F [\r\n-\t\t\t\t\t\t\u002F\u002F \t'name'      => 'type_source',\r\n-\t\t\t\t\t\t\u002F\u002F \t'label'     => esc_html__( 'Type Source', 'learnpress' ),\r\n-\t\t\t\t\t\t\u002F\u002F \t'type'      => Controls_Manager::SELECT,\r\n-\t\t\t\t\t\t\u002F\u002F \t'default'   => 'checkbox',\r\n-\t\t\t\t\t\t\u002F\u002F \t'options'   => array(\r\n-\t\t\t\t\t\t\u002F\u002F \t\t'checkbox' => esc_html__( 'Check Box', 'learnpress' ),\r\n-\t\t\t\t\t\t\u002F\u002F \t\t'dropdown' => esc_html__( 'Drop Down (Coming Soon)', 'learnpress' ),\r\n-\t\t\t\t\t\t\u002F\u002F \t),\r\n-\t\t\t\t\t\t\u002F\u002F \t'condition' => [\r\n-\t\t\t\t\t\t\u002F\u002F \t\t'item_fields' => [ 'price', 'category', 'tag', 'author', 'level' ],\r\n-\t\t\t\t\t\t\u002F\u002F \t],\r\n-\t\t\t\t\t\t\u002F\u002F ],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'enable_count',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Show Count', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\r\n-\t\t\t\t\t\t\t'default'      => 'yes',\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t\t\t'item_fields' => [ 'price', 'category', 'tag', 'author', 'level' ],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'heading_setting',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Heading Setting', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::POPOVER_TOGGLE,\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Default', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Custom', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t\t\t'item_fields!' => [ 'btn_submit', 'btn_reset' ],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'method' => 'start_popover' ],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'enable_heading',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Enable Heading', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\r\n-\t\t\t\t\t\t\t'default'      => 'yes',\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'toggle_content',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Toggle Content', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\r\n-\t\t\t\t\t\t\t'default'      => 'no',\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t\t\t'enable_heading' => 'yes',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'default_toggle_on',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Default Toggle On', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\r\n-\t\t\t\t\t\t\t'default'      => 'yes',\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t\t\t'enable_heading' => 'yes',\r\n-\t\t\t\t\t\t\t\t'toggle_content' => 'yes',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'method' => 'end_popover' ],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'prevent_empty' => false,\r\n-\t\t\t\t\t'title_field'   => '{{{ item_fields }}}',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'extra_option',\r\n-\t\tesc_html__( 'Extra Option', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'show_in_rest',\r\n-\t\t\t\tesc_html__( 'Load widget via REST', 'learnpress' ),\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'search_suggestion',\r\n-\t\t\t\tesc_html__( 'Enable Keyword Search Suggestion', 'learnpress' ),\r\n-\t\t\t\t'0',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'1'            => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'0'            => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => '1',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'filter_toggle_button',\r\n-\t\t\t\tesc_html__( 'Filter Toggle Button', 'learnpress' ),\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::POPOVER_TOGGLE,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'popover_start' => [\r\n-\t\t\t\t'method' => 'start_popover',\r\n-\t\t\t],\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'enable_filter_button',\r\n-\t\t\t\tesc_html__( 'Filter Toggle Button', 'learnpress' ),\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'text_filter_button',\r\n-\t\t\t\tesc_html__( 'Text Button', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Filter', 'learnpress' ),\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_block' => false,\r\n-\t\t\t\t\t'condition'   => [\r\n-\t\t\t\t\t\t'enable_filter_button' => 'yes',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'enable_icon_filter_button',\r\n-\t\t\t\tesc_html__( 'Button Icon', 'learnpress' ),\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t'enable_filter_button' => 'yes',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'icon_filter_button',\r\n-\t\t\t\tesc_html__( 'Icon', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::ICONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'skin'        => 'inline',\r\n-\t\t\t\t\t'label_block' => false,\r\n-\t\t\t\t\t'condition'   => [\r\n-\t\t\t\t\t\t'enable_filter_button'      => 'yes',\r\n-\t\t\t\t\t\t'enable_icon_filter_button' => 'yes',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type_select(\r\n-\t\t\t\t'icon_position',\r\n-\t\t\t\tesc_html__( 'Icon Position', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'left'  => esc_html__( 'Before', 'learnpress' ),\r\n-\t\t\t\t\t'right' => esc_html__( 'After', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'left',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'condition' => [\r\n-\t\t\t\t\t\t'enable_filter_button'      => 'yes',\r\n-\t\t\t\t\t\t'enable_icon_filter_button' => 'yes',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'filter_selected_number',\r\n-\t\t\t\tesc_html__( 'Filter Selected Number', 'learnpress' ),\r\n-\t\t\t\t'yes',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t'enable_filter_button' => 'yes',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t]\r\n-            ),\r\n-            LPElementorControls::add_responsive_control_type(\r\n-                \"filter_section_width\",\r\n-                esc_html__( 'Width', 'learnpress' ),\r\n-                [\r\n-                    'size' => 300,\r\n-                ],\r\n-                Controls_Manager::SLIDER,\r\n-                [\r\n-                    'size_units' => array( 'px', '%', 'custom' ),\r\n-                    'range'      => array(\r\n-                        'px' => array(\r\n-                            'min' => 1,\r\n-                            'max' => 1000,\r\n-                            'step'=> 5\r\n-                        ),\r\n-                    ),\r\n-                    'selectors'  => array(\r\n-                        '{{WRAPPER}} .lp-form-course-filter' => 'width: {{SIZE}}{{UNIT}};',\r\n-                    ),\r\n-                    'condition' => [\r\n-                        'enable_filter_button'    => 'yes',\r\n-                    ] \r\n-                ]\r\n-            ),\r\n-            'popover_end' => [\r\n-                'method' => 'end_popover',\r\n-            ],\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'filter_selected_list',\r\n-\t\t\t\tesc_html__( 'Filter Selected List', 'learnpress' ),\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_section',\r\n-\t\tesc_html__( 'Section', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\t[\r\n-\t\t\t'filter_section_margin'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'filter_section_margin',\r\n-\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'filter_section_padding'    => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'filter_section_padding',\r\n-\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'filter_section_border'     => LPElementorControls::add_group_control_type(\r\n-\t\t\t\t'filter_section_border',\r\n-\t\t\t\tGroup_Control_Border::get_type(),\r\n-\t\t\t\t'{{WRAPPER}} .lp-form-course-filter'\r\n-\t\t\t),\r\n-\t\t\t'filter_section_background' => LPElementorControls::add_control_type_color(\r\n-\t\t\t\t'filter_section_background',\r\n-\t\t\t\tesc_html__( 'Background', 'learnpress' ),\r\n-\t\t\t\t[ '{{WRAPPER}} .lp-form-course-filter' => 'background: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t\t'filter_section_radius'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'filter_section_radius',\r\n-\t\t\t\tesc_html__( 'Radius', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'filter_section_Shadow'     => LPElementorControls::add_group_control_type(\r\n-\t\t\t\t'filter_section_Shadow',\r\n-\t\t\t\tGroup_Control_Box_Shadow::get_type(),\r\n-\t\t\t\t'{{WRAPPER}} .lp-form-course-filter'\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_item',\r\n-\t\tesc_html__( 'Item', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\t[\r\n-\t\t\t'item_margin'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'item_margin',\r\n-\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'item_padding'    => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'item_padding',\r\n-\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'item_border'     => LPElementorControls::add_group_control_type(\r\n-\t\t\t\t'item_border',\r\n-\t\t\t\tGroup_Control_Border::get_type(),\r\n-\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item'\r\n-\t\t\t),\r\n-\t\t\t'item_background' => LPElementorControls::add_control_type_color(\r\n-\t\t\t\t'layout_background',\r\n-\t\t\t\tesc_html__( 'Background', 'learnpress' ),\r\n-\t\t\t\t[ '{{WRAPPER}} .lp-form-course-filter__item' => 'background: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t\t'item_radius'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t'item_radius',\r\n-\t\t\t\tesc_html__( 'Radius', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-            'toggle_offset_x'    => LPElementorControls::add_responsive_control_type(  \r\n-                'toggle_offset_x',\r\n-                esc_html__( 'Toggle Offset X (px)', 'learnpress' ),\r\n-                '',\r\n-                Controls_Manager::NUMBER,\r\n-                [\r\n-                    'label_block' => false,\r\n-                    'selectors'   => array(\r\n-                        '{{WRAPPER}} .toggle-content >.icon-toggle-filter' => 'right:{{VALUE}}px',\r\n-                    ),\r\n-                ]\r\n-            ),\r\n-            'toggle_offset_y'    => LPElementorControls::add_responsive_control_type(  \r\n-                'toggle_offset_y',\r\n-                esc_html__( 'Toggle Offset Y (px)', 'learnpress' ),\r\n-                '',\r\n-                Controls_Manager::NUMBER,\r\n-                [\r\n-                    'label_block' => false,\r\n-                    'selectors'   => array(\r\n-                        '{{WRAPPER}} .toggle-content >.icon-toggle-filter' => 'top:{{VALUE}}px',\r\n-                    ),\r\n-                ]\r\n-            ),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_title',\r\n-\t\tesc_html__( 'Title', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'filter_title',\r\n-\t\t\t'.lp-form-course-filter .lp-form-course-filter__title',\r\n-\t\t\t[],\r\n-\t\t\t[ 'text_display','text_background', 'text_background_hover' ]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_content',\r\n-\t\tesc_html__( 'Label', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tarray_merge(\r\n-\t\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t\t'filter_content',\r\n-\t\t\t\t'.lp-form-course-filter .lp-form-course-filter__item .lp-form-course-filter__content label',\r\n-\t\t\t\t[],\r\n-\t\t\t\t[ 'text_display', 'text_shadow', 'text_background', 'text_background_hover' ]\r\n-\t\t\t),\r\n-\t\t\t[\r\n-\t\t\t\t'horizontal_align' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'horizontal_align',\r\n-\t\t\t\t\tesc_html__( 'Horizontal Align', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t\t'row-reverse' => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-h-align-left',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'row'         => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-h-align-right',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item .lp-form-course-filter__content .lp-course-filter__field' => 'flex-direction: {{VALUE}};',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'filter_count',\r\n-\t\tesc_html__( 'Count', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'filter_count',\r\n-\t\t\t'.lp-form-course-filter .lp-form-course-filter__item .lp-form-course-filter__content .count',\r\n-\t\t\t[],\r\n-\t\t\t[ 'text_display','text_shadow', 'text_background', 'text_background_hover' ]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'input_search',\r\n-\t\tesc_html__( 'Search', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'input_search',\r\n-\t\t\t'.lp-form-course-filter__content .lp-course-filter-search-field input',\r\n-\t\t\t[],\r\n-\t\t\t[ 'text_display','text_shadow', 'text_color_hover', 'text_background', 'text_background_hover' ]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_submit',\r\n-\t\tesc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'btn_submit',\r\n-\t\t\t'.course-filter-submit',\r\n-\t\t\t[\r\n-\t\t\t\t'btn_submit_align' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'btn_submit_align',\r\n-\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t\t'left'   => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'center' => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'right'  => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-submit' => 'text-align: {{VALUE}};',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn_submit_width' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'btn_submit_width',\r\n-\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tControls_Manager::SLIDER,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\r\n-\t\t\t\t\t\t'range'      => array(\r\n-\t\t\t\t\t\t\t'px' => array(\r\n-\t\t\t\t\t\t\t\t'min'  => 1,\r\n-\t\t\t\t\t\t\t\t'max'  => 500,\r\n-\t\t\t\t\t\t\t\t'step' => 5,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-submit' => 'width: {{SIZE}}{{UNIT}};',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t],\r\n-\t\t\t[ 'text_display' ]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_reset',\r\n-\t\tesc_html__( 'Button Reset', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'btn_reset',\r\n-\t\t\t'.course-filter-reset',\r\n-\t\t\t[\r\n-\t\t\t\t'btn_reset_align'    => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'btn_reset_align',\r\n-\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t\t'left'   => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'center' => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'right'  => [\r\n-\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-reset' => 'text-align: {{VALUE}};',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn_reset_width'    => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'btn_reset_width',\r\n-\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tControls_Manager::SLIDER,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\r\n-\t\t\t\t\t\t'range'      => array(\r\n-\t\t\t\t\t\t\t'px' => array(\r\n-\t\t\t\t\t\t\t\t'min'  => 1,\r\n-\t\t\t\t\t\t\t\t'max'  => 500,\r\n-\t\t\t\t\t\t\t\t'step' => 5,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-reset' => 'width: {{SIZE}}{{UNIT}};',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn_reset_position' => LPElementorControls::add_control_type_select(\r\n-\t\t\t\t\t'btn_reset_position',\r\n-\t\t\t\t\tesc_html__( 'Position', 'learnpress' ),\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'static'   => esc_html__( 'Static', 'learnpress' ),\r\n-\t\t\t\t\t\t'absolute' => esc_html__( 'Absolute', 'learnpress' ),\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'static',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'position: {{VALUE}};',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t'reset_offset_x'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'reset_offset_x',\r\n-\t\t\t\t\tesc_html__( 'Offset X (px)', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'label_block' => false,\r\n-\t\t\t\t\t\t'selectors'   => array(\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'right:{{VALUE}}px',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'condition'   => [\r\n-\t\t\t\t\t\t\t'btn_reset_position' => 'absolute',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t'reset_offset_y'     => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t'reset_offset_y',\r\n-\t\t\t\t\tesc_html__( 'Offset Y (px)', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'label_block' => false,\r\n-\t\t\t\t\t\t'selectors'   => array(\r\n-\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'top:{{VALUE}}px',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'condition'   => [\r\n-\t\t\t\t\t\t\t'btn_reset_position' => 'absolute',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t],\r\n-\t\t\t[ 'text_display' ]\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_popup',\r\n-\t\tesc_html__( 'Button Popup', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tarray_merge(\r\n-\t\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t\t'btn_popup',\r\n-\t\t\t\t'.lp-button-popup',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'btn_popup_align' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t\t'btn_popup_align',\r\n-\t\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t\t\t'left'   => [\r\n-\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t'center' => [\r\n-\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t'right'  => [\r\n-\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} .lp-button-popup' => 'text-align: {{VALUE}};',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'btn_popup_width' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t\t'btn_popup_width',\r\n-\t\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\r\n-\t\t\t\t\t\t[],\r\n-\t\t\t\t\t\tControls_Manager::SLIDER,\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\r\n-\t\t\t\t\t\t\t'range'      => array(\r\n-\t\t\t\t\t\t\t\t'px' => array(\r\n-\t\t\t\t\t\t\t\t\t'min'  => 1,\r\n-\t\t\t\t\t\t\t\t\t'max'  => 500,\r\n-\t\t\t\t\t\t\t\t\t'step' => 5,\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} .lp-button-popup' => 'width: {{SIZE}}{{UNIT}};',\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[ 'text_display' ]\r\n-\t\t\t),\r\n-\t\t\t[\r\n-\t\t\t\t'heading_selected_list' => LPElementorControls::add_control_type(\r\n-\t\t\t\t\t'heading_selected_list',\r\n-\t\t\t\t\tesc_html__( 'Selected List', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::HEADING,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'separator' => 'before',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t],\r\n-\t\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t\t'selected_list',\r\n-\t\t\t\t'.selected-list span',\r\n-\t\t\t\t[],\r\n-\t\t\t\t[ 'text_display', 'text_shadow' ]\r\n-\t\t\t),\r\n-\t\t\t[\r\n-\t\t\t\t'heading_selected_number' => LPElementorControls::add_control_type(\r\n-\t\t\t\t\t'heading_selected_number',\r\n-\t\t\t\t\tesc_html__( 'Selected Number', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tControls_Manager::HEADING,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'separator' => 'before',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t],\r\n-\t\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t\t'selected_number',\r\n-\t\t\t\t'.selected-filter',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'selected_number_width' => LPElementorControls::add_responsive_control_type(\r\n-\t\t\t\t\t\t'selected_number_width',\r\n-\t\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\r\n-\t\t\t\t\t\t[],\r\n-\t\t\t\t\t\tControls_Manager::SLIDER,\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\r\n-\t\t\t\t\t\t\t'range'      => array(\r\n-\t\t\t\t\t\t\t\t'px' => array(\r\n-\t\t\t\t\t\t\t\t\t'min'  => 1,\r\n-\t\t\t\t\t\t\t\t\t'max'  => 50,\r\n-\t\t\t\t\t\t\t\t\t'step' => 1,\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} .selected-filter' => 'width: {{SIZE}}{{UNIT}};',\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[ 'text_display', 'text_shadow' ]\r\n-\t\t\t)\r\n-\t\t)\r\n-\t)\r\n-);\r\n-\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget filter course settings.\n+ *\n+ * @since 4.2.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use Elementor\\Group_Control_Border;\n+use Elementor\\Group_Control_Box_Shadow;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_area',\n+\t\tesc_html__( 'Filter Area', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'item_filter',\n+\t\t\t\tesc_html__( 'Fields', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'item_fields' => 'category',\n+\t\t\t\t\t],\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'item_fields' => 'btn_submit',\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\tControls_Manager::REPEATER,\n+\t\t\t\t[\n+\t\t\t\t\t'fields'        => [\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'    => 'item_fields',\n+\t\t\t\t\t\t\t'label'   => esc_html__( 'Filter By', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'    => Controls_Manager::SELECT,\n+\t\t\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t\t\t'search'     => esc_html__( 'Keyword', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'price'      => esc_html__( 'Price', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'category'   => esc_html__( 'Course Category', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'tag'        => esc_html__( 'Course Tag', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'author'     => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'level'      => esc_html__( 'Level', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'btn_submit' => esc_html__( 'Button Submit', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'btn_reset'  => esc_html__( 'Button Reset', 'learnpress' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F [\n+\t\t\t\t\t\t\u002F\u002F \t'name'      => 'type_source',\n+\t\t\t\t\t\t\u002F\u002F \t'label'     => esc_html__( 'Type Source', 'learnpress' ),\n+\t\t\t\t\t\t\u002F\u002F \t'type'      => Controls_Manager::SELECT,\n+\t\t\t\t\t\t\u002F\u002F \t'default'   => 'checkbox',\n+\t\t\t\t\t\t\u002F\u002F \t'options'   => array(\n+\t\t\t\t\t\t\u002F\u002F \t\t'checkbox' => esc_html__( 'Check Box', 'learnpress' ),\n+\t\t\t\t\t\t\u002F\u002F \t\t'dropdown' => esc_html__( 'Drop Down (Coming Soon)', 'learnpress' ),\n+\t\t\t\t\t\t\u002F\u002F \t),\n+\t\t\t\t\t\t\u002F\u002F \t'condition' => [\n+\t\t\t\t\t\t\u002F\u002F \t\t'item_fields' => [ 'price', 'category', 'tag', 'author', 'level' ],\n+\t\t\t\t\t\t\u002F\u002F \t],\n+\t\t\t\t\t\t\u002F\u002F ],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'enable_count',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Show Count', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\n+\t\t\t\t\t\t\t'default'      => 'yes',\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t\t\t'item_fields' => [ 'price', 'category', 'tag', 'author', 'level' ],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'heading_setting',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Heading Setting', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::POPOVER_TOGGLE,\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Default', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Custom', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t\t\t'item_fields!' => [ 'btn_submit', 'btn_reset' ],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'method' => 'start_popover' ],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'enable_heading',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Enable Heading', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\n+\t\t\t\t\t\t\t'default'      => 'yes',\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'toggle_content',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Toggle Content', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\n+\t\t\t\t\t\t\t'default'      => 'no',\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t\t\t'enable_heading' => 'yes',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'default_toggle_on',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Default Toggle On', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::SWITCHER,\n+\t\t\t\t\t\t\t'default'      => 'yes',\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t\t\t'enable_heading' => 'yes',\n+\t\t\t\t\t\t\t\t'toggle_content' => 'yes',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'method' => 'end_popover' ],\n+\t\t\t\t\t],\n+\t\t\t\t\t'prevent_empty' => false,\n+\t\t\t\t\t'title_field'   => '{{{ item_fields }}}',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'extra_option',\n+\t\tesc_html__( 'Extra Option', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'show_in_rest',\n+\t\t\t\tesc_html__( 'Load widget via REST', 'learnpress' ),\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'search_suggestion',\n+\t\t\t\tesc_html__( 'Enable Keyword Search Suggestion', 'learnpress' ),\n+\t\t\t\t'0',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'1'            => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'0'            => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => '1',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'filter_toggle_button',\n+\t\t\t\tesc_html__( 'Filter Toggle Button', 'learnpress' ),\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::POPOVER_TOGGLE,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'popover_start' => [\n+\t\t\t\t'method' => 'start_popover',\n+\t\t\t],\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'enable_filter_button',\n+\t\t\t\tesc_html__( 'Filter Toggle Button', 'learnpress' ),\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'text_filter_button',\n+\t\t\t\tesc_html__( 'Text Button', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Filter', 'learnpress' ),\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'label_block' => false,\n+\t\t\t\t\t'condition'   => [\n+\t\t\t\t\t\t'enable_filter_button' => 'yes',\n+\t\t\t\t\t]\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'enable_icon_filter_button',\n+\t\t\t\tesc_html__( 'Button Icon', 'learnpress' ),\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t'enable_filter_button' => 'yes',\n+\t\t\t\t\t]\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'icon_filter_button',\n+\t\t\t\tesc_html__( 'Icon', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::ICONS,\n+\t\t\t\t[\n+\t\t\t\t\t'skin'        => 'inline',\n+\t\t\t\t\t'label_block' => false,\n+\t\t\t\t\t'condition'   => [\n+\t\t\t\t\t\t'enable_filter_button'      => 'yes',\n+\t\t\t\t\t\t'enable_icon_filter_button' => 'yes',\n+\t\t\t\t\t]\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type_select(\n+\t\t\t\t'icon_position',\n+\t\t\t\tesc_html__( 'Icon Position', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'left'  => esc_html__( 'Before', 'learnpress' ),\n+\t\t\t\t\t'right' => esc_html__( 'After', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'left',\n+\t\t\t\t[\n+\t\t\t\t\t'condition' => [\n+\t\t\t\t\t\t'enable_filter_button'      => 'yes',\n+\t\t\t\t\t\t'enable_icon_filter_button' => 'yes',\n+\t\t\t\t\t]\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'filter_selected_number',\n+\t\t\t\tesc_html__( 'Filter Selected Number', 'learnpress' ),\n+\t\t\t\t'yes',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t'enable_filter_button' => 'yes',\n+\t\t\t\t\t]\n+\t\t\t\t]\n+            ),\n+            LPElementorControls::add_responsive_control_type(\n+                \"filter_section_width\",\n+                esc_html__( 'Width', 'learnpress' ),\n+                [\n+                    'size' => 300,\n+                ],\n+                Controls_Manager::SLIDER,\n+                [\n+                    'size_units' => array( 'px', '%', 'custom' ),\n+                    'range'      => array(\n+                        'px' => array(\n+                            'min' => 1,\n+                            'max' => 1000,\n+                            'step'=> 5\n+                        ),\n+                    ),\n+                    'selectors'  => array(\n+                        '{{WRAPPER}} .lp-form-course-filter' => 'width: {{SIZE}}{{UNIT}};',\n+                    ),\n+                    'condition' => [\n+                        'enable_filter_button'    => 'yes',\n+                    ] \n+                ]\n+            ),\n+            'popover_end' => [\n+                'method' => 'end_popover',\n+            ],\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'filter_selected_list',\n+\t\t\t\tesc_html__( 'Filter Selected List', 'learnpress' ),\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_section',\n+\t\tesc_html__( 'Section', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\t[\n+\t\t\t'filter_section_margin'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'filter_section_margin',\n+\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'filter_section_padding'    => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'filter_section_padding',\n+\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'filter_section_border'     => LPElementorControls::add_group_control_type(\n+\t\t\t\t'filter_section_border',\n+\t\t\t\tGroup_Control_Border::get_type(),\n+\t\t\t\t'{{WRAPPER}} .lp-form-course-filter'\n+\t\t\t),\n+\t\t\t'filter_section_background' => LPElementorControls::add_control_type_color(\n+\t\t\t\t'filter_section_background',\n+\t\t\t\tesc_html__( 'Background', 'learnpress' ),\n+\t\t\t\t[ '{{WRAPPER}} .lp-form-course-filter' => 'background: {{VALUE}}' ]\n+\t\t\t),\n+\t\t\t'filter_section_radius'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'filter_section_radius',\n+\t\t\t\tesc_html__( 'Radius', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'filter_section_Shadow'     => LPElementorControls::add_group_control_type(\n+\t\t\t\t'filter_section_Shadow',\n+\t\t\t\tGroup_Control_Box_Shadow::get_type(),\n+\t\t\t\t'{{WRAPPER}} .lp-form-course-filter'\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_item',\n+\t\tesc_html__( 'Item', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\t[\n+\t\t\t'item_margin'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'item_margin',\n+\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'item_padding'    => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'item_padding',\n+\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'item_border'     => LPElementorControls::add_group_control_type(\n+\t\t\t\t'item_border',\n+\t\t\t\tGroup_Control_Border::get_type(),\n+\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item'\n+\t\t\t),\n+\t\t\t'item_background' => LPElementorControls::add_control_type_color(\n+\t\t\t\t'layout_background',\n+\t\t\t\tesc_html__( 'Background', 'learnpress' ),\n+\t\t\t\t[ '{{WRAPPER}} .lp-form-course-filter__item' => 'background: {{VALUE}}' ]\n+\t\t\t),\n+\t\t\t'item_radius'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t'item_radius',\n+\t\t\t\tesc_html__( 'Radius', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+            'toggle_offset_x'    => LPElementorControls::add_responsive_control_type(  \n+                'toggle_offset_x',\n+                esc_html__( 'Toggle Offset X (px)', 'learnpress' ),\n+                '',\n+                Controls_Manager::NUMBER,\n+                [\n+                    'label_block' => false,\n+                    'selectors'   => array(\n+                        '{{WRAPPER}} .toggle-content >.icon-toggle-filter' => 'right:{{VALUE}}px',\n+                    ),\n+                ]\n+            ),\n+            'toggle_offset_y'    => LPElementorControls::add_responsive_control_type(  \n+                'toggle_offset_y',\n+                esc_html__( 'Toggle Offset Y (px)', 'learnpress' ),\n+                '',\n+                Controls_Manager::NUMBER,\n+                [\n+                    'label_block' => false,\n+                    'selectors'   => array(\n+                        '{{WRAPPER}} .toggle-content >.icon-toggle-filter' => 'top:{{VALUE}}px',\n+                    ),\n+                ]\n+            ),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_title',\n+\t\tesc_html__( 'Title', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'filter_title',\n+\t\t\t'.lp-form-course-filter .lp-form-course-filter__title',\n+\t\t\t[],\n+\t\t\t[ 'text_display','text_background', 'text_background_hover' ]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_content',\n+\t\tesc_html__( 'Label', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tarray_merge(\n+\t\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t\t'filter_content',\n+\t\t\t\t'.lp-form-course-filter .lp-form-course-filter__item .lp-form-course-filter__content label',\n+\t\t\t\t[],\n+\t\t\t\t[ 'text_display', 'text_shadow', 'text_background', 'text_background_hover' ]\n+\t\t\t),\n+\t\t\t[\n+\t\t\t\t'horizontal_align' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'horizontal_align',\n+\t\t\t\t\tesc_html__( 'Horizontal Align', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t\t'row-reverse' => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-h-align-left',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'row'         => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-h-align-right',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter__item .lp-form-course-filter__content .lp-course-filter__field' => 'flex-direction: {{VALUE}};',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'filter_count',\n+\t\tesc_html__( 'Count', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'filter_count',\n+\t\t\t'.lp-form-course-filter .lp-form-course-filter__item .lp-form-course-filter__content .count',\n+\t\t\t[],\n+\t\t\t[ 'text_display','text_shadow', 'text_background', 'text_background_hover' ]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'input_search',\n+\t\tesc_html__( 'Search', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'input_search',\n+\t\t\t'.lp-form-course-filter__content .lp-course-filter-search-field input',\n+\t\t\t[],\n+\t\t\t[ 'text_display','text_shadow', 'text_color_hover', 'text_background', 'text_background_hover' ]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_submit',\n+\t\tesc_html__( 'Button Submit', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'btn_submit',\n+\t\t\t'.course-filter-submit',\n+\t\t\t[\n+\t\t\t\t'btn_submit_align' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'btn_submit_align',\n+\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t\t'left'   => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'center' => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'right'  => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-submit' => 'text-align: {{VALUE}};',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t'btn_submit_width' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'btn_submit_width',\n+\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tControls_Manager::SLIDER,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\n+\t\t\t\t\t\t'range'      => array(\n+\t\t\t\t\t\t\t'px' => array(\n+\t\t\t\t\t\t\t\t'min'  => 1,\n+\t\t\t\t\t\t\t\t'max'  => 500,\n+\t\t\t\t\t\t\t\t'step' => 5,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-submit' => 'width: {{SIZE}}{{UNIT}};',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t],\n+\t\t\t[ 'text_display' ]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_reset',\n+\t\tesc_html__( 'Button Reset', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'btn_reset',\n+\t\t\t'.course-filter-reset',\n+\t\t\t[\n+\t\t\t\t'btn_reset_align'    => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'btn_reset_align',\n+\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t\t'left'   => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'center' => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'right'  => [\n+\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-reset' => 'text-align: {{VALUE}};',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t'btn_reset_width'    => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'btn_reset_width',\n+\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tControls_Manager::SLIDER,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\n+\t\t\t\t\t\t'range'      => array(\n+\t\t\t\t\t\t\t'px' => array(\n+\t\t\t\t\t\t\t\t'min'  => 1,\n+\t\t\t\t\t\t\t\t'max'  => 500,\n+\t\t\t\t\t\t\t\t'step' => 5,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\t'{{WRAPPER}} .course-filter-reset' => 'width: {{SIZE}}{{UNIT}};',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t'btn_reset_position' => LPElementorControls::add_control_type_select(\n+\t\t\t\t\t'btn_reset_position',\n+\t\t\t\t\tesc_html__( 'Position', 'learnpress' ),\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'static'   => esc_html__( 'Static', 'learnpress' ),\n+\t\t\t\t\t\t'absolute' => esc_html__( 'Absolute', 'learnpress' ),\n+\t\t\t\t\t],\n+\t\t\t\t\t'static',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'position: {{VALUE}};',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t'reset_offset_x'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'reset_offset_x',\n+\t\t\t\t\tesc_html__( 'Offset X (px)', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'label_block' => false,\n+\t\t\t\t\t\t'selectors'   => array(\n+\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'right:{{VALUE}}px',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'condition'   => [\n+\t\t\t\t\t\t\t'btn_reset_position' => 'absolute',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t'reset_offset_y'     => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t'reset_offset_y',\n+\t\t\t\t\tesc_html__( 'Offset Y (px)', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'label_block' => false,\n+\t\t\t\t\t\t'selectors'   => array(\n+\t\t\t\t\t\t\t'{{WRAPPER}} .lp-form-course-filter .course-filter-reset' => 'top:{{VALUE}}px',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'condition'   => [\n+\t\t\t\t\t\t\t'btn_reset_position' => 'absolute',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t],\n+\t\t\t[ 'text_display' ]\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_popup',\n+\t\tesc_html__( 'Button Popup', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tarray_merge(\n+\t\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t\t'btn_popup',\n+\t\t\t\t'.lp-button-popup',\n+\t\t\t\t[\n+\t\t\t\t\t'btn_popup_align' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t\t'btn_popup_align',\n+\t\t\t\t\t\tesc_html__( 'Alignment', 'learnpress' ),\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t\t\t'left'   => [\n+\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Left', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-left',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t'center' => [\n+\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Center', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-center',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t'right'  => [\n+\t\t\t\t\t\t\t\t\t'title' => esc_html__( 'Right', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t'icon'  => 'eicon-text-align-right',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} .lp-button-popup' => 'text-align: {{VALUE}};',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t\t'btn_popup_width' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t\t'btn_popup_width',\n+\t\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\n+\t\t\t\t\t\t[],\n+\t\t\t\t\t\tControls_Manager::SLIDER,\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\n+\t\t\t\t\t\t\t'range'      => array(\n+\t\t\t\t\t\t\t\t'px' => array(\n+\t\t\t\t\t\t\t\t\t'min'  => 1,\n+\t\t\t\t\t\t\t\t\t'max'  => 500,\n+\t\t\t\t\t\t\t\t\t'step' => 5,\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} .lp-button-popup' => 'width: {{SIZE}}{{UNIT}};',\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[ 'text_display' ]\n+\t\t\t),\n+\t\t\t[\n+\t\t\t\t'heading_selected_list' => LPElementorControls::add_control_type(\n+\t\t\t\t\t'heading_selected_list',\n+\t\t\t\t\tesc_html__( 'Selected List', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::HEADING,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'separator' => 'before',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t],\n+\t\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t\t'selected_list',\n+\t\t\t\t'.selected-list span',\n+\t\t\t\t[],\n+\t\t\t\t[ 'text_display', 'text_shadow' ]\n+\t\t\t),\n+\t\t\t[\n+\t\t\t\t'heading_selected_number' => LPElementorControls::add_control_type(\n+\t\t\t\t\t'heading_selected_number',\n+\t\t\t\t\tesc_html__( 'Selected Number', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tControls_Manager::HEADING,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'separator' => 'before',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t],\n+\t\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t\t'selected_number',\n+\t\t\t\t'.selected-filter',\n+\t\t\t\t[\n+\t\t\t\t\t'selected_number_width' => LPElementorControls::add_responsive_control_type(\n+\t\t\t\t\t\t'selected_number_width',\n+\t\t\t\t\t\tesc_html__( 'Width', 'learnpress' ),\n+\t\t\t\t\t\t[],\n+\t\t\t\t\t\tControls_Manager::SLIDER,\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'size_units' => array( 'px', '%', 'custom' ),\n+\t\t\t\t\t\t\t'range'      => array(\n+\t\t\t\t\t\t\t\t'px' => array(\n+\t\t\t\t\t\t\t\t\t'min'  => 1,\n+\t\t\t\t\t\t\t\t\t'max'  => 50,\n+\t\t\t\t\t\t\t\t\t'step' => 1,\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} .selected-filter' => 'width: {{SIZE}}{{UNIT}};',\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[ 'text_display', 'text_shadow' ]\n+\t\t\t)\n+\t\t)\n+\t)\n+);\n+\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Ffilter-course-el\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,200 +1,200 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Courses.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-use LearnPress\\Models\\Courses;\r\n-\r\n-$option_data = [];\r\n-if ( isset( $options ) ) {\r\n-\t$option_data = $options;\r\n-}\r\n-\r\n-$filter              = new LP_Course_Filter();\r\n-$filter->limit       = - 1;\r\n-$filter->only_fields = array( 'ID', 'post_title' );\r\n-$filter->post_status = [ 'publish' ];\r\n-$courses_obj         = (array) Courses::get_courses( $filter );\r\n-$courses             = [];\r\n-$categories          = [];\r\n-\r\n-\u002F\u002F Only show courses and categories in Admin\r\n-if ( is_admin() ) {\r\n-\tforeach ( $courses_obj as $course ) {\r\n-\t\t$courses[ $course->ID ] = $course->post_title;\r\n-\t}\r\n-\r\n-\t$categories_obj = LP_Course::get_all_categories();\r\n-\tforeach ( $categories_obj as $category ) {\r\n-\t\t$categories[ $category->term_id ] = $category->name;\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'skin',\r\n-\t\tesc_html__( 'Skin', 'learnpress' )\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'option_load_rest_api',\r\n-\t\tesc_html__( 'Option load REST API', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\t'courses_rest'              => LPElementorControls::add_control_type(\r\n-\t\t\t\t'courses_rest',\r\n-\t\t\t\t'Courses REST API enable',\r\n-\t\t\t\t'no',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'default'      => 'no',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'courses_rest_no_load_page' => LPElementorControls::add_control_type(\r\n-\t\t\t\t'courses_rest_no_load_page',\r\n-\t\t\t\t'Courses REST no load page',\r\n-\t\t\t\t'yes',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'default'      => 'no',\r\n-\t\t\t\t\t'condition'    => [\r\n-\t\t\t\t\t\t'courses_rest' => 'yes',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'layout',\r\n-\t\tesc_html__( 'Layout', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\t'el_result_count' => LPElementorControls::add_control_type(\r\n-\t\t\t\t'el_result_count',\r\n-\t\t\t\t'Show result count',\r\n-\t\t\t\t'yes',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'default'      => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'el_sorting'      => LPElementorControls::add_control_type(\r\n-\t\t\t\t'el_sorting',\r\n-\t\t\t\t'Show sorting',\r\n-\t\t\t\t'yes',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t'default'      => 'yes',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'query',\r\n-\t\tesc_html__( 'Query', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\t'courses_limit'            => LPElementorControls::add_control_type(\r\n-\t\t\t\t'courses_limit',\r\n-\t\t\t\tesc_html__( 'Courses limit', 'learnpress' ),\r\n-\t\t\t\t0,\r\n-\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'min'         => 0,\r\n-\t\t\t\t\t'step'        => 1,\r\n-\t\t\t\t\t'description' => esc_html__( 'Total courses you want to query, default 0 is no limit', 'learnpress' ),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'courses_per_page'         => LPElementorControls::add_control_type(\r\n-\t\t\t\t'courses_per_page',\r\n-\t\t\t\tesc_html__( 'Courses Per Page', 'learnpress' ),\r\n-\t\t\t\t8,\r\n-\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'min'         => 0,\r\n-\t\t\t\t\t'step'        => 1,\r\n-\t\t\t\t\t'description' => esc_html__( 'Number courses show on 1 page. Default 0 is show all of Courses Limit', 'learnpress' ),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'courses_order_by_default' => LPElementorControls::add_control_type_select(\r\n-\t\t\t\t'courses_order_by_default',\r\n-\t\t\t\tesc_html__( 'Order By Default', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'post_date'       => esc_html__( 'Newest', 'learnpress' ),\r\n-\t\t\t\t\t'post_title'      => esc_html__( 'Title a-z', 'learnpress' ),\r\n-\t\t\t\t\t'post_title_desc' => esc_html__( 'Title z-a', 'learnpress' ),\r\n-\t\t\t\t\t'price'           => esc_html__( 'Price High to Low', 'learnpress' ),\r\n-\t\t\t\t\t'price_low'       => esc_html__( 'Price Low to High', 'learnpress' ),\r\n-\t\t\t\t\t'popular'         => esc_html__( 'Popular', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'post_date'\r\n-\t\t\t),\r\n-\t\t\t'courses_category_ids'             => LPElementorControls::add_control_type(\r\n-\t\t\t\t'courses_category_ids',\r\n-\t\t\t\tesc_html__( 'Select Categories', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::SELECT2,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'multiple' => true,\r\n-\t\t\t\t\t'options'  => $categories,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'pagination',\r\n-\t\tesc_html__( 'Pagination', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\t'pagination_type' => LPElementorControls::add_control_type_select(\r\n-\t\t\t\t'pagination_type',\r\n-\t\t\t\tesc_html__( 'Pagination type', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t''          => esc_html__( 'Nonce', 'learnpress' ),\r\n-\t\t\t\t\t'number'    => esc_html__( 'Number', 'learnpress' ),\r\n-\t\t\t\t\t'load-more' => esc_html__( 'Load more', 'learnpress' ),\r\n-\t\t\t\t\t'infinite'  => esc_html__( 'Infinite scroll', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'number'\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\t[],\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Flist-courses-by-page',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flist-courses-by-page\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flist-courses-by-page\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Courses.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.1\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+use LearnPress\\Models\\Courses;\n+\n+$option_data = [];\n+if ( isset( $options ) ) {\n+\t$option_data = $options;\n+}\n+\n+$filter              = new LP_Course_Filter();\n+$filter->limit       = - 1;\n+$filter->only_fields = array( 'ID', 'post_title' );\n+$filter->post_status = [ 'publish' ];\n+$courses_obj         = (array) Courses::get_courses( $filter );\n+$courses             = [];\n+$categories          = [];\n+\n+\u002F\u002F Only show courses and categories in Admin\n+if ( is_admin() ) {\n+\tforeach ( $courses_obj as $course ) {\n+\t\t$courses[ $course->ID ] = $course->post_title;\n+\t}\n+\n+\t$categories_obj = LP_Course::get_all_categories();\n+\tforeach ( $categories_obj as $category ) {\n+\t\t$categories[ $category->term_id ] = $category->name;\n+\t}\n+}\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'skin',\n+\t\tesc_html__( 'Skin', 'learnpress' )\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'option_load_rest_api',\n+\t\tesc_html__( 'Option load REST API', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\t'courses_rest'              => LPElementorControls::add_control_type(\n+\t\t\t\t'courses_rest',\n+\t\t\t\t'Courses REST API enable',\n+\t\t\t\t'no',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'default'      => 'no',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'courses_rest_no_load_page' => LPElementorControls::add_control_type(\n+\t\t\t\t'courses_rest_no_load_page',\n+\t\t\t\t'Courses REST no load page',\n+\t\t\t\t'yes',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'default'      => 'no',\n+\t\t\t\t\t'condition'    => [\n+\t\t\t\t\t\t'courses_rest' => 'yes',\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'layout',\n+\t\tesc_html__( 'Layout', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\t'el_result_count' => LPElementorControls::add_control_type(\n+\t\t\t\t'el_result_count',\n+\t\t\t\t'Show result count',\n+\t\t\t\t'yes',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'default'      => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'el_sorting'      => LPElementorControls::add_control_type(\n+\t\t\t\t'el_sorting',\n+\t\t\t\t'Show sorting',\n+\t\t\t\t'yes',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'label_on'     => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t'default'      => 'yes',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'query',\n+\t\tesc_html__( 'Query', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\t'courses_limit'            => LPElementorControls::add_control_type(\n+\t\t\t\t'courses_limit',\n+\t\t\t\tesc_html__( 'Courses limit', 'learnpress' ),\n+\t\t\t\t0,\n+\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t[\n+\t\t\t\t\t'min'         => 0,\n+\t\t\t\t\t'step'        => 1,\n+\t\t\t\t\t'description' => esc_html__( 'Total courses you want to query, default 0 is no limit', 'learnpress' ),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'courses_per_page'         => LPElementorControls::add_control_type(\n+\t\t\t\t'courses_per_page',\n+\t\t\t\tesc_html__( 'Courses Per Page', 'learnpress' ),\n+\t\t\t\t8,\n+\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t[\n+\t\t\t\t\t'min'         => 0,\n+\t\t\t\t\t'step'        => 1,\n+\t\t\t\t\t'description' => esc_html__( 'Number courses show on 1 page. Default 0 is show all of Courses Limit', 'learnpress' ),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'courses_order_by_default' => LPElementorControls::add_control_type_select(\n+\t\t\t\t'courses_order_by_default',\n+\t\t\t\tesc_html__( 'Order By Default', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'post_date'       => esc_html__( 'Newest', 'learnpress' ),\n+\t\t\t\t\t'post_title'      => esc_html__( 'Title a-z', 'learnpress' ),\n+\t\t\t\t\t'post_title_desc' => esc_html__( 'Title z-a', 'learnpress' ),\n+\t\t\t\t\t'price'           => esc_html__( 'Price High to Low', 'learnpress' ),\n+\t\t\t\t\t'price_low'       => esc_html__( 'Price Low to High', 'learnpress' ),\n+\t\t\t\t\t'popular'         => esc_html__( 'Popular', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'post_date'\n+\t\t\t),\n+\t\t\t'courses_category_ids'             => LPElementorControls::add_control_type(\n+\t\t\t\t'courses_category_ids',\n+\t\t\t\tesc_html__( 'Select Categories', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::SELECT2,\n+\t\t\t\t[\n+\t\t\t\t\t'multiple' => true,\n+\t\t\t\t\t'options'  => $categories,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'pagination',\n+\t\tesc_html__( 'Pagination', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\t'pagination_type' => LPElementorControls::add_control_type_select(\n+\t\t\t\t'pagination_type',\n+\t\t\t\tesc_html__( 'Pagination type', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t''          => esc_html__( 'Nonce', 'learnpress' ),\n+\t\t\t\t\t'number'    => esc_html__( 'Number', 'learnpress' ),\n+\t\t\t\t\t'load-more' => esc_html__( 'Load more', 'learnpress' ),\n+\t\t\t\t\t'infinite'  => esc_html__( 'Infinite scroll', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'number'\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\t[],\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Flist-courses-by-page',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flist-courses-by-page\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flist-courses-by-page\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Flist-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,153 +1,153 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-use LearnPress\\Models\\Courses;\r\n-\r\n-$filter              = new LP_Course_Filter();\r\n-$filter->limit       = -1;\r\n-$filter->only_fields = array( 'ID', 'post_title' );\r\n-$filter->post_status = [ 'publish' ];\r\n-$courses_obj         = (array) Courses::get_courses( $filter );\r\n-$courses             = [];\r\n-$categories          = [];\r\n-\r\n-\u002F\u002F Only show courses and categories in Admin\r\n-if ( is_admin() ) {\r\n-\tforeach ( $courses_obj as $course ) {\r\n-\t\t$courses[ $course->ID ] = $course->post_title;\r\n-\t}\r\n-\r\n-\t$categories_obj = LP_Course::get_all_categories();\r\n-\tforeach ( $categories_obj as $category ) {\r\n-\t\t$categories[ $category->term_id ] = $category->name;\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = LPElementorControls::add_fields_in_section(\r\n-\t'content',\r\n-\tesc_html__( 'Content', 'learnpress' ),\r\n-\tControls_Manager::TAB_CONTENT,\r\n-\t[\r\n-\t\t'layout'       => LPElementorControls::add_control_type_select(\r\n-\t\t\t'layout',\r\n-\t\t\tesc_html__( 'Layout', 'learnpress' ),\r\n-\t\t\t[\r\n-\t\t\t\t'list' => esc_html__( 'List', 'learnpress' ),\r\n-\t\t\t\t'grid' => esc_html__( 'Grid', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t\t'grid'\r\n-\t\t),\r\n-\t\t'courses_ids'  => LPElementorControls::add_control_type(\r\n-\t\t\t'courses_ids',\r\n-\t\t\tesc_html__( 'Select Courses', 'learnpress' ),\r\n-\t\t\t[],\r\n-\t\t\tControls_Manager::SELECT2,\r\n-\t\t\t[\r\n-\t\t\t\t'multiple' => true,\r\n-\t\t\t\t'options'  => $courses,\r\n-\t\t\t]\r\n-\t\t),\r\n-\t\t'category_ids' => LPElementorControls::add_control_type(\r\n-\t\t\t'category_ids',\r\n-\t\t\tesc_html__( 'Select Categories', 'learnpress' ),\r\n-\t\t\t[],\r\n-\t\t\tControls_Manager::SELECT2,\r\n-\t\t\t[\r\n-\t\t\t\t'multiple' => true,\r\n-\t\t\t\t'options'  => $categories,\r\n-\t\t\t]\r\n-\t\t),\r\n-\t\t'sort_in'      => LPElementorControls::add_control_type_select(\r\n-\t\t\t'sort_in',\r\n-\t\t\tesc_html__( 'Sort In', 'learnpress' ),\r\n-\t\t\t[\r\n-\t\t\t\t''         => esc_html__( 'Default', 'learnpress' ),\r\n-\t\t\t\t'recent'   => esc_html__( 'Recent', 'learnpress' ),\r\n-\t\t\t\t'popular'  => esc_html__( 'Popular', 'learnpress' ),\r\n-\t\t\t\t'featured' => esc_html__( 'Featured', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t\t''\r\n-\t\t),\r\n-\t\t'order_by'     => LPElementorControls::add_control_type_select(\r\n-\t\t\t'order_by',\r\n-\t\t\tesc_html__( 'Order By', 'learnpress' ),\r\n-\t\t\t[\r\n-\t\t\t\t'DESC' => esc_html__( 'DESC', 'learnpress' ),\r\n-\t\t\t\t'ASC'  => esc_html__( 'ASC', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t\t'ASC'\r\n-\t\t),\r\n-\t\t'limit'        => LPElementorControls::add_control_type(\r\n-\t\t\t'limit',\r\n-\t\t\tesc_html__( 'Limit', 'learnpress' ),\r\n-\t\t\t5,\r\n-\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t[\r\n-\t\t\t\t'min' => -1,\r\n-\t\t\t\t'max' => 100,\r\n-\t\t\t]\r\n-\t\t),\r\n-\t]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'title',\r\n-\t\tesc_html__( 'Title Course', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'title',\r\n-\t\t\t'.learn-press-courses .course-item .course-title'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor',\r\n-\t\tesc_html__( 'Title Instructor', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'instructor',\r\n-\t\t\t'.learn-press-courses .course-item .course-instructor a'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'price',\r\n-\t\tesc_html__( 'Price', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'price',\r\n-\t\t\t'.learn-press-courses .course-item .course-price'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'course_image',\r\n-\t\tesc_html__( 'Course Image', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_image(\r\n-\t\t\t'course_image',\r\n-\t\t\t'.learn-press-courses .course-item img'\r\n-\t\t)\r\n-\t)\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+use LearnPress\\Models\\Courses;\n+\n+$filter              = new LP_Course_Filter();\n+$filter->limit       = -1;\n+$filter->only_fields = array( 'ID', 'post_title' );\n+$filter->post_status = [ 'publish' ];\n+$courses_obj         = (array) Courses::get_courses( $filter );\n+$courses             = [];\n+$categories          = [];\n+\n+\u002F\u002F Only show courses and categories in Admin\n+if ( is_admin() ) {\n+\tforeach ( $courses_obj as $course ) {\n+\t\t$courses[ $course->ID ] = $course->post_title;\n+\t}\n+\n+\t$categories_obj = LP_Course::get_all_categories();\n+\tforeach ( $categories_obj as $category ) {\n+\t\t$categories[ $category->term_id ] = $category->name;\n+\t}\n+}\n+\n+\u002F\u002F Fields tab content\n+$content_fields = LPElementorControls::add_fields_in_section(\n+\t'content',\n+\tesc_html__( 'Content', 'learnpress' ),\n+\tControls_Manager::TAB_CONTENT,\n+\t[\n+\t\t'layout'       => LPElementorControls::add_control_type_select(\n+\t\t\t'layout',\n+\t\t\tesc_html__( 'Layout', 'learnpress' ),\n+\t\t\t[\n+\t\t\t\t'list' => esc_html__( 'List', 'learnpress' ),\n+\t\t\t\t'grid' => esc_html__( 'Grid', 'learnpress' ),\n+\t\t\t],\n+\t\t\t'grid'\n+\t\t),\n+\t\t'courses_ids'  => LPElementorControls::add_control_type(\n+\t\t\t'courses_ids',\n+\t\t\tesc_html__( 'Select Courses', 'learnpress' ),\n+\t\t\t[],\n+\t\t\tControls_Manager::SELECT2,\n+\t\t\t[\n+\t\t\t\t'multiple' => true,\n+\t\t\t\t'options'  => $courses,\n+\t\t\t]\n+\t\t),\n+\t\t'category_ids' => LPElementorControls::add_control_type(\n+\t\t\t'category_ids',\n+\t\t\tesc_html__( 'Select Categories', 'learnpress' ),\n+\t\t\t[],\n+\t\t\tControls_Manager::SELECT2,\n+\t\t\t[\n+\t\t\t\t'multiple' => true,\n+\t\t\t\t'options'  => $categories,\n+\t\t\t]\n+\t\t),\n+\t\t'sort_in'      => LPElementorControls::add_control_type_select(\n+\t\t\t'sort_in',\n+\t\t\tesc_html__( 'Sort In', 'learnpress' ),\n+\t\t\t[\n+\t\t\t\t''         => esc_html__( 'Default', 'learnpress' ),\n+\t\t\t\t'recent'   => esc_html__( 'Recent', 'learnpress' ),\n+\t\t\t\t'popular'  => esc_html__( 'Popular', 'learnpress' ),\n+\t\t\t\t'featured' => esc_html__( 'Featured', 'learnpress' ),\n+\t\t\t],\n+\t\t\t''\n+\t\t),\n+\t\t'order_by'     => LPElementorControls::add_control_type_select(\n+\t\t\t'order_by',\n+\t\t\tesc_html__( 'Order By', 'learnpress' ),\n+\t\t\t[\n+\t\t\t\t'DESC' => esc_html__( 'DESC', 'learnpress' ),\n+\t\t\t\t'ASC'  => esc_html__( 'ASC', 'learnpress' ),\n+\t\t\t],\n+\t\t\t'ASC'\n+\t\t),\n+\t\t'limit'        => LPElementorControls::add_control_type(\n+\t\t\t'limit',\n+\t\t\tesc_html__( 'Limit', 'learnpress' ),\n+\t\t\t5,\n+\t\t\tControls_Manager::NUMBER,\n+\t\t\t[\n+\t\t\t\t'min' => -1,\n+\t\t\t\t'max' => 100,\n+\t\t\t]\n+\t\t),\n+\t]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'title',\n+\t\tesc_html__( 'Title Course', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'title',\n+\t\t\t'.learn-press-courses .course-item .course-title'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor',\n+\t\tesc_html__( 'Title Instructor', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'instructor',\n+\t\t\t'.learn-press-courses .course-item .course-instructor a'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'price',\n+\t\tesc_html__( 'Price', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'price',\n+\t\t\t'.learn-press-courses .course-item .course-price'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'course_image',\n+\t\tesc_html__( 'Course Image', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_image(\n+\t\t\t'course_image',\n+\t\t\t'.learn-press-courses .course-item img'\n+\t\t)\n+\t)\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fcourse\u002Flist-courses\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fmaterials.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fmaterials.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fmaterials.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fmaterials.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,115 +1,115 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\u002F\u002FStop this config\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-$content_fields = array_merge(\r\n-    LPElementorControls::add_fields_in_section(\r\n-        'layouts',\r\n-        esc_html__( 'Course\u002FLesson Materials', 'learnpress' ),\r\n-        Controls_Manager::TAB_CONTENT,\r\n-        [\r\n-            LPElementorControls::add_control_type(\r\n-                'item_layouts',\r\n-                esc_html__( 'Add layout and drag to top to set Active', 'learnpress' ),\r\n-                [\r\n-                    [\r\n-                        'layout_name' => 'Layout Default',\r\n-                        'layout_html' => '',\r\n-                    ],\r\n-                ],\r\n-                Controls_Manager::REPEATER,\r\n-                [\r\n-                    'fields'        => [\r\n-                        [\r\n-                            'name'        => 'column_name',\r\n-                            'label'       => esc_html__( 'Column Name', 'learnpress' ),\r\n-                            'type'        => Controls_Manager::TEXT,\r\n-                            'label_block' => true,\r\n-                        ],\r\n-                        [\r\n-                            'name'         => 'show_column',\r\n-                            'label'        => esc_html__( 'Show Column', 'learnpress' ),\r\n-                            'type'         => Controls_Manager::SWITCHER,\r\n-                            'label_on'     => esc_html__( 'Show', 'learnpress' ),\r\n-                            'label_off'    => esc_html__( 'Hide', 'learnpress' ),\r\n-                            'return_value' => 'yes',\r\n-                            'default'      => 'yes',\r\n-                        ],\r\n-                        [\r\n-                            'name'         => 'has_icon',\r\n-                            'type'         => Controls_Manager::HIDDEN,\r\n-                            'default'      => false,\r\n-                            'return_value' => true,\r\n-                        ],\r\n-                        [\r\n-                            'name'         => 'download_icon',\r\n-                            'label'        => esc_html__( 'Download Icon', 'learnpress' ),\r\n-                            'type'         => Controls_Manager::ICONS,\r\n-                            'default'      => [\r\n-                                    'value' => 'fas fa-file-download',\r\n-                                    'library' => 'fa-solid',\r\n-                                ],\r\n-                            'condition'    => [\r\n-                                'has_icon'    => 'yes',\r\n-                            ]\r\n-                        ],\r\n-                    ],\r\n-                    'default'       =>[\r\n-                        'file-name' => [\r\n-                            'column_name' => esc_html__( 'Name', 'learnpress' ),\r\n-                            'show_column' => esc_html__( 'yes', 'learnpress' ),\r\n-                            'has_icon'    => false,\r\n-                        ],\r\n-                        'file-type' =>[\r\n-                            'column_name' => esc_html__( 'Type', 'learnpress' ),\r\n-                            'show_column' => esc_html__( 'yes', 'learnpress' ),\r\n-                            'has_icon'    => false,\r\n-                        ],\r\n-                        'file-size' => [\r\n-                            'column_name' => esc_html__( 'Size', 'learnpress' ),\r\n-                            'show_column' => esc_html__( 'yes', 'learnpress' ),\r\n-                            'has_icon'    => false,\r\n-                        ],\r\n-                        'file-link' => [\r\n-                            'column_name' => esc_html__( 'Download', 'learnpress' ),\r\n-                            'show_column' => esc_html__( 'yes', 'learnpress' ),\r\n-                            'has_icon'    => 'yes',\r\n-                            'download_icon' => [\r\n-                                'value' => 'fas fa-file-download',\r\n-                            ],\r\n-                        ],\r\n-                    ],\r\n-                    'prevent_empty' => false,\r\n-                    'title_field'   => '{{{ column_name }}}',\r\n-                    'item_actions' => [\r\n-                        'add' => false,\r\n-                        'duplicate' => false,\r\n-                        'remove' => false,\r\n-                        'sort' => true,\r\n-                    ],\r\n-                ]\r\n-            ),\r\n-        ]\r\n-    ),\r\n-    []\r\n-);\r\n-return apply_filters(\r\n-    'learn-press\u002Felementor\u002Fcourse\u002Fcourse-material',\r\n-    array_merge(\r\n-        apply_filters(\r\n-            'learn-press\u002Felementor\u002Fcourse\u002Fcourse-material\u002Ftab-content',\r\n-            $content_fields\r\n-        ),\r\n-        \u002F\u002F apply_filters(\r\n-        \u002F\u002F     'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-styles',\r\n-        \u002F\u002F     $style_fields\r\n-        \u002F\u002F )\r\n-    )\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\u002F\u002FStop this config\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+$content_fields = array_merge(\n+    LPElementorControls::add_fields_in_section(\n+        'layouts',\n+        esc_html__( 'Course\u002FLesson Materials', 'learnpress' ),\n+        Controls_Manager::TAB_CONTENT,\n+        [\n+            LPElementorControls::add_control_type(\n+                'item_layouts',\n+                esc_html__( 'Add layout and drag to top to set Active', 'learnpress' ),\n+                [\n+                    [\n+                        'layout_name' => 'Layout Default',\n+                        'layout_html' => '',\n+                    ],\n+                ],\n+                Controls_Manager::REPEATER,\n+                [\n+                    'fields'        => [\n+                        [\n+                            'name'        => 'column_name',\n+                            'label'       => esc_html__( 'Column Name', 'learnpress' ),\n+                            'type'        => Controls_Manager::TEXT,\n+                            'label_block' => true,\n+                        ],\n+                        [\n+                            'name'         => 'show_column',\n+                            'label'        => esc_html__( 'Show Column', 'learnpress' ),\n+                            'type'         => Controls_Manager::SWITCHER,\n+                            'label_on'     => esc_html__( 'Show', 'learnpress' ),\n+                            'label_off'    => esc_html__( 'Hide', 'learnpress' ),\n+                            'return_value' => 'yes',\n+                            'default'      => 'yes',\n+                        ],\n+                        [\n+                            'name'         => 'has_icon',\n+                            'type'         => Controls_Manager::HIDDEN,\n+                            'default'      => false,\n+                            'return_value' => true,\n+                        ],\n+                        [\n+                            'name'         => 'download_icon',\n+                            'label'        => esc_html__( 'Download Icon', 'learnpress' ),\n+                            'type'         => Controls_Manager::ICONS,\n+                            'default'      => [\n+                                    'value' => 'fas fa-file-download',\n+                                    'library' => 'fa-solid',\n+                                ],\n+                            'condition'    => [\n+                                'has_icon'    => 'yes',\n+                            ]\n+                        ],\n+                    ],\n+                    'default'       =>[\n+                        'file-name' => [\n+                            'column_name' => esc_html__( 'Name', 'learnpress' ),\n+                            'show_column' => esc_html__( 'yes', 'learnpress' ),\n+                            'has_icon'    => false,\n+                        ],\n+                        'file-type' =>[\n+                            'column_name' => esc_html__( 'Type', 'learnpress' ),\n+                            'show_column' => esc_html__( 'yes', 'learnpress' ),\n+                            'has_icon'    => false,\n+                        ],\n+                        'file-size' => [\n+                            'column_name' => esc_html__( 'Size', 'learnpress' ),\n+                            'show_column' => esc_html__( 'yes', 'learnpress' ),\n+                            'has_icon'    => false,\n+                        ],\n+                        'file-link' => [\n+                            'column_name' => esc_html__( 'Download', 'learnpress' ),\n+                            'show_column' => esc_html__( 'yes', 'learnpress' ),\n+                            'has_icon'    => 'yes',\n+                            'download_icon' => [\n+                                'value' => 'fas fa-file-download',\n+                            ],\n+                        ],\n+                    ],\n+                    'prevent_empty' => false,\n+                    'title_field'   => '{{{ column_name }}}',\n+                    'item_actions' => [\n+                        'add' => false,\n+                        'duplicate' => false,\n+                        'remove' => false,\n+                        'sort' => true,\n+                    ],\n+                ]\n+            ),\n+        ]\n+    ),\n+    []\n+);\n+return apply_filters(\n+    'learn-press\u002Felementor\u002Fcourse\u002Fcourse-material',\n+    array_merge(\n+        apply_filters(\n+            'learn-press\u002Felementor\u002Fcourse\u002Fcourse-material\u002Ftab-content',\n+            $content_fields\n+        ),\n+        \u002F\u002F apply_filters(\n+        \u002F\u002F     'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-styles',\n+        \u002F\u002F     $style_fields\n+        \u002F\u002F )\n+    )\n );\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-grid.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-grid.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-grid.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-grid.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for skin Courses Grid.\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Thim_EL_Kit\\Functions;\r\n-\r\n-\u002F**\r\n- * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid $CoursesGrid\r\n- *\u002F\r\n-if ( ! isset( $CoursesGrid ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! class_exists( Functions::class ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$CoursesGrid->add_responsive_control(\r\n-\t'columns',\r\n-\tarray(\r\n-\t\t'label'          => esc_html__( 'Columns', 'learnpress' ),\r\n-\t\t'type'           => Controls_Manager::NUMBER,\r\n-\t\t'default'        => 3,\r\n-\t\t'min'            => 1,\r\n-\t\t'selectors'      => array(\r\n-\t\t\t'{{WRAPPER}}' => '--lp-el-courses-grid-columns: {{VALUE}}',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for skin Courses Grid.\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use Thim_EL_Kit\\Functions;\n+\n+\u002F**\n+ * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid $CoursesGrid\n+ *\u002F\n+if ( ! isset( $CoursesGrid ) ) {\n+\treturn;\n+}\n+\n+if ( ! class_exists( Functions::class ) ) {\n+\treturn;\n+}\n+\n+$CoursesGrid->add_responsive_control(\n+\t'columns',\n+\tarray(\n+\t\t'label'          => esc_html__( 'Columns', 'learnpress' ),\n+\t\t'type'           => Controls_Manager::NUMBER,\n+\t\t'default'        => 3,\n+\t\t'min'            => 1,\n+\t\t'selectors'      => array(\n+\t\t\t'{{WRAPPER}}' => '--lp-el-courses-grid-columns: {{VALUE}}',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-list.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-list.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-list.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-list.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for skin Courses List.\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList $CoursesList\r\n- *\u002F\r\n-if ( ! isset( $CoursesList ) ) {\r\n-\treturn;\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for skin Courses List.\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+\u002F**\n+ * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList $CoursesList\n+ *\u002F\n+if ( ! isset( $CoursesList ) ) {\n+\treturn;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-loop-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-loop-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-loop-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fcourse\u002Fskin\u002Fcourses-loop-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for skin Courses Loop Item.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Thim_EL_Kit\\Functions;\r\n-\r\n-\u002F**\r\n- * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem $CoursesLoopItem\r\n- *\u002F\r\n-if ( ! isset( $CoursesLoopItem ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! class_exists( Functions::class ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$layout_loop_items = Functions::instance()->get_pages_loop_item( 'lp_course' );\r\n-\r\n-$CoursesLoopItem->add_control(\r\n-\t'template_id',\r\n-\tarray(\r\n-\t\t'label'         => esc_html__( 'Choose a template', 'learnpress' ),\r\n-\t\t'type'          => Controls_Manager::SELECT2,\r\n-\t\t'default'       => '0',\r\n-\t\t'options'       => [ '0' => esc_html__( 'None', 'learnpress' ) ] + $layout_loop_items,\r\n-\t\t'prevent_empty' => false,\r\n-\t)\r\n-);\r\n-\r\n-$CoursesLoopItem->add_responsive_control(\r\n-\t'columns',\r\n-\tarray(\r\n-\t\t'label'          => esc_html__( 'Columns', 'learnpress' ),\r\n-\t\t'type'           => Controls_Manager::NUMBER,\r\n-\t\t'default'        => 3,\r\n-\t\t'min'            => 1,\r\n-\t\t'selectors'      => array(\r\n-\t\t\t'{{WRAPPER}}' => '--lp-el-list-courses-grid-columns: {{VALUE}}',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for skin Courses Loop Item.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use Thim_EL_Kit\\Functions;\n+\n+\u002F**\n+ * @var LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem $CoursesLoopItem\n+ *\u002F\n+if ( ! isset( $CoursesLoopItem ) ) {\n+\treturn;\n+}\n+\n+if ( ! class_exists( Functions::class ) ) {\n+\treturn;\n+}\n+\n+$layout_loop_items = Functions::instance()->get_pages_loop_item( 'lp_course' );\n+\n+$CoursesLoopItem->add_control(\n+\t'template_id',\n+\tarray(\n+\t\t'label'         => esc_html__( 'Choose a template', 'learnpress' ),\n+\t\t'type'          => Controls_Manager::SELECT2,\n+\t\t'default'       => '0',\n+\t\t'options'       => [ '0' => esc_html__( 'None', 'learnpress' ) ] + $layout_loop_items,\n+\t\t'prevent_empty' => false,\n+\t)\n+);\n+\n+$CoursesLoopItem->add_responsive_control(\n+\t'columns',\n+\tarray(\n+\t\t'label'          => esc_html__( 'Columns', 'learnpress' ),\n+\t\t'type'           => Controls_Manager::NUMBER,\n+\t\t'default'        => 3,\n+\t\t'min'            => 1,\n+\t\t'selectors'      => array(\n+\t\t\t'{{WRAPPER}}' => '--lp-el-list-courses-grid-columns: {{VALUE}}',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,103 +1,103 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = LPElementorControls::add_fields_in_section(\r\n-\t'content',\r\n-\tesc_html__( 'Content', 'learnpress' ),\r\n-\tControls_Manager::TAB_CONTENT,\r\n-\t[\r\n-\t\t'title'                      => LPElementorControls::add_control_type(\r\n-\t\t\t'title',\r\n-\t\t\tesc_html__( 'Title', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Become a teacher', 'learnpress' )\r\n-\t\t),\r\n-\t\t'description'                => LPElementorControls::add_control_type(\r\n-\t\t\t'description',\r\n-\t\t\tesc_html__( 'Description', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Fill in your information and send it to us to become a teacher.', 'learnpress' ),\r\n-\t\t\tControls_Manager::TEXTAREA\r\n-\t\t),\r\n-\t\t'submit_button_text'         => LPElementorControls::add_control_type(\r\n-\t\t\t'submit_button_text',\r\n-\t\t\tesc_html__( 'Button text', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Submit', 'learnpress' )\r\n-\t\t),\r\n-\t\t'submit_button_process_text' => LPElementorControls::add_control_type(\r\n-\t\t\t'submit_button_process_text',\r\n-\t\t\tesc_html__( 'Button Processing text', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Processing', 'learnpress' )\r\n-\t\t),\r\n-\t]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'style_title',\r\n-\t\tesc_html__( 'Title', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'title',\r\n-\t\t\t'#learn-press-become-teacher-form h3'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'style_description',\r\n-\t\tesc_html__( 'Description', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'description',\r\n-\t\t\t'.become-teacher-form__description'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_label',\r\n-\t\tesc_html__( 'Form Label', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'form_label',\r\n-\t\t\t'.become-teacher-form label'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_input_text',\r\n-\t\tesc_html__( 'Form Input', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form_input_text',\r\n-\t\t\t'.become-teacher-form input[type=text], .become-teacher-form textarea'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_submit',\r\n-\t\tesc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form',\r\n-\t\t\t'.become-teacher-form button'\r\n-\t\t)\r\n-\t)\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = LPElementorControls::add_fields_in_section(\n+\t'content',\n+\tesc_html__( 'Content', 'learnpress' ),\n+\tControls_Manager::TAB_CONTENT,\n+\t[\n+\t\t'title'                      => LPElementorControls::add_control_type(\n+\t\t\t'title',\n+\t\t\tesc_html__( 'Title', 'learnpress' ),\n+\t\t\tesc_html__( 'Become a teacher', 'learnpress' )\n+\t\t),\n+\t\t'description'                => LPElementorControls::add_control_type(\n+\t\t\t'description',\n+\t\t\tesc_html__( 'Description', 'learnpress' ),\n+\t\t\tesc_html__( 'Fill in your information and send it to us to become a teacher.', 'learnpress' ),\n+\t\t\tControls_Manager::TEXTAREA\n+\t\t),\n+\t\t'submit_button_text'         => LPElementorControls::add_control_type(\n+\t\t\t'submit_button_text',\n+\t\t\tesc_html__( 'Button text', 'learnpress' ),\n+\t\t\tesc_html__( 'Submit', 'learnpress' )\n+\t\t),\n+\t\t'submit_button_process_text' => LPElementorControls::add_control_type(\n+\t\t\t'submit_button_process_text',\n+\t\t\tesc_html__( 'Button Processing text', 'learnpress' ),\n+\t\t\tesc_html__( 'Processing', 'learnpress' )\n+\t\t),\n+\t]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'style_title',\n+\t\tesc_html__( 'Title', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'title',\n+\t\t\t'#learn-press-become-teacher-form h3'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'style_description',\n+\t\tesc_html__( 'Description', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'description',\n+\t\t\t'.become-teacher-form__description'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_label',\n+\t\tesc_html__( 'Form Label', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'form_label',\n+\t\t\t'.become-teacher-form label'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_input_text',\n+\t\tesc_html__( 'Form Input', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form_input_text',\n+\t\t\t'.become-teacher-form input[type=text], .become-teacher-form textarea'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_submit',\n+\t\tesc_html__( 'Button Submit', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form',\n+\t\t\t'.become-teacher-form button'\n+\t\t)\n+\t)\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fbecome-a-teacher\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Flist-instructors.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Flist-instructors.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Flist-instructors.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Flist-instructors.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,240 +1,240 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Elementor\\Group_Control_Border;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-$option_data = [];\r\n-if ( isset( $options ) ) {\r\n-\t$option_data = $options;\r\n-}\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'layouts',\r\n-\t\tesc_html__( 'Layout Item Instructor', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'item_layouts',\r\n-\t\t\t\tesc_html__( 'Add layout and drag to top to set Active', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'layout_name' => 'Layout Default',\r\n-\t\t\t\t\t\t'layout_html' => '{{instructor_avatar}}\u003Ca href=\"{{instructor_url}}\" style=\"display: block\">{{instructor_display_name}}\u003C\u002Fa>\u003Cp>{{instructor_total_courses}}\u003C\u002Fp>{{instructor_total_students}}',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\tControls_Manager::REPEATER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fields'        => [\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'layout_name',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Layout Name', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'layout_html',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Layout HTML', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::WYSIWYG,\r\n-\t\t\t\t\t\t\t'description' => 'Sections: {{instructor_avatar}}, {{instructor_url}}, {{instructor_display_name}}, {{instructor_total_courses}}, {{instructor_total_students}}',\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Toggle Style Ul\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'         => 'toggle-ul-style',\r\n-\t\t\t\t\t\t\t'label'        => esc_html__( 'Ul Style', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'         => Controls_Manager::POPOVER_TOGGLE,\r\n-\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Default', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Custom', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'return_value' => 'yes',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'method' => 'start_popover',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'grid_columns',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Column number', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'method'      => 'add_responsive_control',\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::NUMBER,\r\n-\t\t\t\t\t\t\t'min'         => 1,\r\n-\t\t\t\t\t\t\t'max'         => 6,\r\n-\t\t\t\t\t\t\t'default'     => 2,\r\n-\t\t\t\t\t\t\t'description' => 'Number of columns to show.',\r\n-\t\t\t\t\t\t\t'selectors'   => [\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors' => 'display: grid;list-style: none;grid-template-columns: repeat({{VALUE}}, 1fr);padding: 0;margin: 0;',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'gap_column',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Gap', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'method'      => 'add_responsive_control',\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::SLIDER,\r\n-\t\t\t\t\t\t\t'default'     => [\r\n-\t\t\t\t\t\t\t\t'unit' => 'px',\r\n-\t\t\t\t\t\t\t\t'size' => 10,\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'unit'        => 'px',\r\n-\t\t\t\t\t\t\t'min'         => 0,\r\n-\t\t\t\t\t\t\t'max'         => 100,\r\n-\t\t\t\t\t\t\t'description' => 'Space between items. (px)',\r\n-\t\t\t\t\t\t\t'selectors'   => [\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors' => 'grid-gap: {{SIZE}}{{UNIT}};',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'      => 'item_padding',\r\n-\t\t\t\t\t\t\t'label'     => esc_html__( 'Item Padding', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'method'    => 'add_responsive_control',\r\n-\t\t\t\t\t\t\t'type'      => Controls_Manager::DIMENSIONS,\r\n-\t\t\t\t\t\t\t'default'   => [\r\n-\t\t\t\t\t\t\t\t'top'    => '10',\r\n-\t\t\t\t\t\t\t\t'right'  => '10',\r\n-\t\t\t\t\t\t\t\t'bottom' => '10',\r\n-\t\t\t\t\t\t\t\t'left'   => '10',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'method' => 'end_popover' ],\r\n-\t\t\t\t\t\t\u002F\u002F Toggle Item Border\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'  => 'toggle-item-border',\r\n-\t\t\t\t\t\t\t'label' => esc_html__( 'Item border', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'  => Controls_Manager::POPOVER_TOGGLE,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'method' => 'start_popover',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'           => 'item_border',\r\n-\t\t\t\t\t\t\t'label'          => esc_html__( 'Item Border', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'method'         => 'add_group_control',\r\n-\t\t\t\t\t\t\t'type'           => Group_Control_Border::get_type(),\r\n-\t\t\t\t\t\t\t'description'    => 'Number of columns to show.',\r\n-\t\t\t\t\t\t\t'selector'       => '{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor',\r\n-\t\t\t\t\t\t\t'fields_options' => [\r\n-\t\t\t\t\t\t\t\t'border' => [\r\n-\t\t\t\t\t\t\t\t\t'default' => 'none',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t'width'  => [\r\n-\t\t\t\t\t\t\t\t\t'default' => [\r\n-\t\t\t\t\t\t\t\t\t\t'top'      => '1',\r\n-\t\t\t\t\t\t\t\t\t\t'right'    => '1',\r\n-\t\t\t\t\t\t\t\t\t\t'bottom'   => '1',\r\n-\t\t\t\t\t\t\t\t\t\t'left'     => '1',\r\n-\t\t\t\t\t\t\t\t\t\t'isLinked' => true,\r\n-\t\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t'color'  => [\r\n-\t\t\t\t\t\t\t\t\t'default' => '#D4D4D4',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'      => 'item_border_radius',\r\n-\t\t\t\t\t\t\t'label'     => esc_html__( 'Border Radius', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'      => Controls_Manager::DIMENSIONS,\r\n-\t\t\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'method' => 'end_popover' ],\r\n-\t\t\t\t\t\t\u002F\u002F Toggle Custom Css\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'  => 'toggle-custom-css',\r\n-\t\t\t\t\t\t\t'label' => esc_html__( 'Advanced Css', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'  => Controls_Manager::POPOVER_TOGGLE,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'method' => 'start_popover',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'layout_custom_css',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Custom CSS', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::CODE,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t\t'language'    => 'css',\r\n-\t\t\t\t\t\t\t'description' => 'Should start with selector before style. Ex: selector .[className] {color: red;}',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[ 'method' => 'end_popover' ],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'prevent_empty' => false,\r\n-\t\t\t\t\t'title_field'   => '{{{ layout_name }}}',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'content',\r\n-\t\tesc_html__( 'Content', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\t\u002F*'instructor_ids' => LPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_ids',\r\n-\t\t\t\tesc_html__( 'Select Instructor ID', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'ID of Instructor separated by comma. Ex: 1,2,3',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'item_per_page' => LPElementorControls::add_control_type(\r\n-\t\t\t\t'item_per_page',\r\n-\t\t\t\tesc_html__( 'Item per page', 'learnpress' ),\r\n-\t\t\t\t5,\r\n-\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'min' => -1,\r\n-\t\t\t\t\t'max' => 100,\r\n-\t\t\t\t]\r\n-\t\t\t),*\u002F\r\n-\t\t\t'order_by' => LPElementorControls::add_control_type_select(\r\n-\t\t\t\t'order_by',\r\n-\t\t\t\tesc_html__( 'Order By', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'name'      => esc_html__( 'Name a-z', 'learnpress' ),\r\n-\t\t\t\t\t'desc_name' => esc_html__( 'Name z-a', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'name'\r\n-\t\t\t),\r\n-\t\t\t'limit'    => LPElementorControls::add_control_type(\r\n-\t\t\t\t'limit',\r\n-\t\t\t\tesc_html__( 'Limit', 'learnpress' ),\r\n-\t\t\t\t5,\r\n-\t\t\t\tControls_Manager::NUMBER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'min'         => - 1,\r\n-\t\t\t\t\t'max'         => 100,\r\n-\t\t\t\t\t'description' => 'Number of items to show. Enter -1 to show all instructors.',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = [];\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Flist-instructors',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use Elementor\\Group_Control_Border;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+$option_data = [];\n+if ( isset( $options ) ) {\n+\t$option_data = $options;\n+}\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'layouts',\n+\t\tesc_html__( 'Layout Item Instructor', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'item_layouts',\n+\t\t\t\tesc_html__( 'Add layout and drag to top to set Active', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'layout_name' => 'Layout Default',\n+\t\t\t\t\t\t'layout_html' => '{{instructor_avatar}}\u003Ca href=\"{{instructor_url}}\" style=\"display: block\">{{instructor_display_name}}\u003C\u002Fa>\u003Cp>{{instructor_total_courses}}\u003C\u002Fp>{{instructor_total_students}}',\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\tControls_Manager::REPEATER,\n+\t\t\t\t[\n+\t\t\t\t\t'fields'        => [\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'layout_name',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Layout Name', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'layout_html',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Layout HTML', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::WYSIWYG,\n+\t\t\t\t\t\t\t'description' => 'Sections: {{instructor_avatar}}, {{instructor_url}}, {{instructor_display_name}}, {{instructor_total_courses}}, {{instructor_total_students}}',\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Toggle Style Ul\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'         => 'toggle-ul-style',\n+\t\t\t\t\t\t\t'label'        => esc_html__( 'Ul Style', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'         => Controls_Manager::POPOVER_TOGGLE,\n+\t\t\t\t\t\t\t'label_off'    => esc_html__( 'Default', 'learnpress' ),\n+\t\t\t\t\t\t\t'label_on'     => esc_html__( 'Custom', 'learnpress' ),\n+\t\t\t\t\t\t\t'return_value' => 'yes',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'method' => 'start_popover',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'grid_columns',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Column number', 'learnpress' ),\n+\t\t\t\t\t\t\t'method'      => 'add_responsive_control',\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::NUMBER,\n+\t\t\t\t\t\t\t'min'         => 1,\n+\t\t\t\t\t\t\t'max'         => 6,\n+\t\t\t\t\t\t\t'default'     => 2,\n+\t\t\t\t\t\t\t'description' => 'Number of columns to show.',\n+\t\t\t\t\t\t\t'selectors'   => [\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors' => 'display: grid;list-style: none;grid-template-columns: repeat({{VALUE}}, 1fr);padding: 0;margin: 0;',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'gap_column',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Gap', 'learnpress' ),\n+\t\t\t\t\t\t\t'method'      => 'add_responsive_control',\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::SLIDER,\n+\t\t\t\t\t\t\t'default'     => [\n+\t\t\t\t\t\t\t\t'unit' => 'px',\n+\t\t\t\t\t\t\t\t'size' => 10,\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'unit'        => 'px',\n+\t\t\t\t\t\t\t'min'         => 0,\n+\t\t\t\t\t\t\t'max'         => 100,\n+\t\t\t\t\t\t\t'description' => 'Space between items. (px)',\n+\t\t\t\t\t\t\t'selectors'   => [\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors' => 'grid-gap: {{SIZE}}{{UNIT}};',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'      => 'item_padding',\n+\t\t\t\t\t\t\t'label'     => esc_html__( 'Item Padding', 'learnpress' ),\n+\t\t\t\t\t\t\t'method'    => 'add_responsive_control',\n+\t\t\t\t\t\t\t'type'      => Controls_Manager::DIMENSIONS,\n+\t\t\t\t\t\t\t'default'   => [\n+\t\t\t\t\t\t\t\t'top'    => '10',\n+\t\t\t\t\t\t\t\t'right'  => '10',\n+\t\t\t\t\t\t\t\t'bottom' => '10',\n+\t\t\t\t\t\t\t\t'left'   => '10',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'method' => 'end_popover' ],\n+\t\t\t\t\t\t\u002F\u002F Toggle Item Border\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'  => 'toggle-item-border',\n+\t\t\t\t\t\t\t'label' => esc_html__( 'Item border', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'  => Controls_Manager::POPOVER_TOGGLE,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'method' => 'start_popover',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'           => 'item_border',\n+\t\t\t\t\t\t\t'label'          => esc_html__( 'Item Border', 'learnpress' ),\n+\t\t\t\t\t\t\t'method'         => 'add_group_control',\n+\t\t\t\t\t\t\t'type'           => Group_Control_Border::get_type(),\n+\t\t\t\t\t\t\t'description'    => 'Number of columns to show.',\n+\t\t\t\t\t\t\t'selector'       => '{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor',\n+\t\t\t\t\t\t\t'fields_options' => [\n+\t\t\t\t\t\t\t\t'border' => [\n+\t\t\t\t\t\t\t\t\t'default' => 'none',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t'width'  => [\n+\t\t\t\t\t\t\t\t\t'default' => [\n+\t\t\t\t\t\t\t\t\t\t'top'      => '1',\n+\t\t\t\t\t\t\t\t\t\t'right'    => '1',\n+\t\t\t\t\t\t\t\t\t\t'bottom'   => '1',\n+\t\t\t\t\t\t\t\t\t\t'left'     => '1',\n+\t\t\t\t\t\t\t\t\t\t'isLinked' => true,\n+\t\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t'color'  => [\n+\t\t\t\t\t\t\t\t\t'default' => '#D4D4D4',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'      => 'item_border_radius',\n+\t\t\t\t\t\t\t'label'     => esc_html__( 'Border Radius', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'      => Controls_Manager::DIMENSIONS,\n+\t\t\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\t\t'{{WRAPPER}} {{CURRENT_ITEM}} .list-instructors .item-instructor' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'method' => 'end_popover' ],\n+\t\t\t\t\t\t\u002F\u002F Toggle Custom Css\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'  => 'toggle-custom-css',\n+\t\t\t\t\t\t\t'label' => esc_html__( 'Advanced Css', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'  => Controls_Manager::POPOVER_TOGGLE,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'method' => 'start_popover',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'layout_custom_css',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Custom CSS', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::CODE,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t\t'language'    => 'css',\n+\t\t\t\t\t\t\t'description' => 'Should start with selector before style. Ex: selector .[className] {color: red;}',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[ 'method' => 'end_popover' ],\n+\t\t\t\t\t],\n+\t\t\t\t\t'prevent_empty' => false,\n+\t\t\t\t\t'title_field'   => '{{{ layout_name }}}',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'content',\n+\t\tesc_html__( 'Content', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\t\u002F*'instructor_ids' => LPElementorControls::add_control_type(\n+\t\t\t\t'instructor_ids',\n+\t\t\t\tesc_html__( 'Select Instructor ID', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'ID of Instructor separated by comma. Ex: 1,2,3',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'item_per_page' => LPElementorControls::add_control_type(\n+\t\t\t\t'item_per_page',\n+\t\t\t\tesc_html__( 'Item per page', 'learnpress' ),\n+\t\t\t\t5,\n+\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t[\n+\t\t\t\t\t'min' => -1,\n+\t\t\t\t\t'max' => 100,\n+\t\t\t\t]\n+\t\t\t),*\u002F\n+\t\t\t'order_by' => LPElementorControls::add_control_type_select(\n+\t\t\t\t'order_by',\n+\t\t\t\tesc_html__( 'Order By', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t'name'      => esc_html__( 'Name a-z', 'learnpress' ),\n+\t\t\t\t\t'desc_name' => esc_html__( 'Name z-a', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'name'\n+\t\t\t),\n+\t\t\t'limit'    => LPElementorControls::add_control_type(\n+\t\t\t\t'limit',\n+\t\t\t\tesc_html__( 'Limit', 'learnpress' ),\n+\t\t\t\t5,\n+\t\t\t\tControls_Manager::NUMBER,\n+\t\t\t\t[\n+\t\t\t\t\t'min'         => - 1,\n+\t\t\t\t\t'max'         => 100,\n+\t\t\t\t\t'description' => 'Number of items to show. Enter -1 to show all instructors.',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = [];\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Flist-instructors',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flist-instructors\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Favatar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Favatar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Favatar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Favatar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Instructor Avatar settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor_avatar',\r\n-\t\tesc_html__( 'Instructor avatar', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_image(\r\n-\t\t\t'avatar',\r\n-\t\t\t'.instructor-avatar img'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Favatar',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Favatar\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Favatar\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Instructor Avatar settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor_avatar',\n+\t\tesc_html__( 'Instructor avatar', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_image(\n+\t\t\t'avatar',\n+\t\t\t'.instructor-avatar img'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Favatar',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Favatar\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Favatar\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fbutton_view.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fbutton_view.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fbutton_view.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fbutton_view.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'wrapper_tags',\r\n-\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Button View', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"\">',\r\n-\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\tControls_Manager::REPEATER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fields'        => [\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'open_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'close_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'prevent_empty' => false,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor_btn_view',\r\n-\t\tesc_html__( 'Instructor Button View', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'instructor_btn_view',\r\n-\t\t\t'.instructor-btn-view'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'wrapper_tags',\n+\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Button View', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"\">',\n+\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\tControls_Manager::REPEATER,\n+\t\t\t\t[\n+\t\t\t\t\t'fields'        => [\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'open_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'close_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\n+\t\t\t\t\t],\n+\t\t\t\t\t'prevent_empty' => false,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor_btn_view',\n+\t\tesc_html__( 'Instructor Button View', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'instructor_btn_view',\n+\t\t\t'.instructor-btn-view'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Instructor Count Courses settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor_count_courses',\r\n-\t\tesc_html__( 'Instructor Count Courses', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'count_courses',\r\n-\t\t\t'.instructor-total-courses'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Instructor Count Courses settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor_count_courses',\n+\t\tesc_html__( 'Instructor Count Courses', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'count_courses',\n+\t\t\t'.instructor-total-courses'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-courses\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_students.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_students.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_students.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fcount_students.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Instructor Count Students settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor_count_students',\r\n-\t\tesc_html__( 'Instructor Count Students', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'count_students',\r\n-\t\t\t'.instructor-total-students'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Instructor Count Students settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor_count_students',\n+\t\tesc_html__( 'Instructor Count Students', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'count_students',\n+\t\t\t'.instructor-total-students'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fcount-students\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fdescription.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fdescription.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fdescription.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Fdescription.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'wrapper_tags',\r\n-\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Description', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"div\">',\r\n-\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\tControls_Manager::REPEATER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fields'        => [\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'open_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'close_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'prevent_empty' => false,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'description',\r\n-\t\tesc_html__( 'Instructor Description', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'description',\r\n-\t\t\t'.instructor-description'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'wrapper_tags',\n+\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Description', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"div\">',\n+\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\tControls_Manager::REPEATER,\n+\t\t\t\t[\n+\t\t\t\t\t'fields'        => [\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'open_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'close_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\n+\t\t\t\t\t],\n+\t\t\t\t\t'prevent_empty' => false,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'description',\n+\t\tesc_html__( 'Instructor Description', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'description',\n+\t\t\t'.instructor-description'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Fdescription\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsections\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Instructor Display Name settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'wrapper',\r\n-\t\tesc_html__( 'Wrapper', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_CONTENT,\r\n-\t\t[\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'instructor_id',\r\n-\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::TEXT,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\tLPElementorControls::add_control_type(\r\n-\t\t\t\t'wrapper_tags',\r\n-\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Name', 'learnpress' ),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"\">',\r\n-\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\tControls_Manager::REPEATER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fields'        => [\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'open_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'name'        => 'close_tag',\r\n-\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\r\n-\t\t\t\t\t\t\t'label_block' => true,\r\n-\t\t\t\t\t\t],\r\n-\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'prevent_empty' => false,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t]\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'instructor_name',\r\n-\t\tesc_html__( 'Instructor name', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'title',\r\n-\t\t\t'.instructor-display-name'\r\n-\t\t)\r\n-\t),\r\n-\t[]\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Instructor Display Name settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'wrapper',\n+\t\tesc_html__( 'Wrapper', 'learnpress' ),\n+\t\tControls_Manager::TAB_CONTENT,\n+\t\t[\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'instructor_id',\n+\t\t\t\tesc_html__( 'Set Instructor ID', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::TEXT,\n+\t\t\t\t[\n+\t\t\t\t\t'description' => 'If widget include on page is Single Instructor, will be get instructor id automatic, from query var.',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\tLPElementorControls::add_control_type(\n+\t\t\t\t'wrapper_tags',\n+\t\t\t\tesc_html__( 'Add html tag wrapper Instructor Name', 'learnpress' ),\n+\t\t\t\t[\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'open_tag'  => '\u003Cdiv class=\"\">',\n+\t\t\t\t\t\t'close_tag' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\tControls_Manager::REPEATER,\n+\t\t\t\t[\n+\t\t\t\t\t'fields'        => [\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'open_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Open tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'name'        => 'close_tag',\n+\t\t\t\t\t\t\t'label'       => esc_html__( 'Html Close tag', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => Controls_Manager::TEXT,\n+\t\t\t\t\t\t\t'label_block' => true,\n+\t\t\t\t\t\t],\n+\n+\t\t\t\t\t],\n+\t\t\t\t\t'prevent_empty' => false,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t]\n+\t),\n+\t[]\n+);\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'instructor_name',\n+\t\tesc_html__( 'Instructor name', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'title',\n+\t\t\t'.instructor-display-name'\n+\t\t)\n+\t),\n+\t[]\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Finstructor\u002Ftitle\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsingle-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsingle-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Finstructor\u002Fsingle-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Finstructor\u002Fsingle-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for instructor settings.\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Fsingle-instructor',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fsingle-instructor\u002Ftab-content\u002Ffields',\r\n-\t\t\t[\r\n-\t\t\t\t'section_content' => [\r\n-\t\t\t\t\t'type_detect' => 'section',\r\n-\t\t\t\t\t'label'       => esc_html__( 'Content', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'grid_list_type'  => [\r\n-\t\t\t\t\t'type_detect' => 'control',\r\n-\t\t\t\t\t'label'       => esc_html__( 'Layout Type', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => Controls_Manager::SELECT,\r\n-\t\t\t\t\t'options'     => array(\r\n-\t\t\t\t\t\t'list' => esc_html__( 'List', 'learnpress' ),\r\n-\t\t\t\t\t\t'grid' => esc_html__( 'Grid', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'default'     => 'grid',\r\n-\t\t\t\t],\r\n-\t\t\t\t'end_section'     => [],\r\n-\t\t\t]\r\n-\t\t),\r\n-\t\t[]\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for instructor settings.\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Fsingle-instructor',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fsingle-instructor\u002Ftab-content\u002Ffields',\n+\t\t\t[\n+\t\t\t\t'section_content' => [\n+\t\t\t\t\t'type_detect' => 'section',\n+\t\t\t\t\t'label'       => esc_html__( 'Content', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'grid_list_type'  => [\n+\t\t\t\t\t'type_detect' => 'control',\n+\t\t\t\t\t'label'       => esc_html__( 'Layout Type', 'learnpress' ),\n+\t\t\t\t\t'type'        => Controls_Manager::SELECT,\n+\t\t\t\t\t'options'     => array(\n+\t\t\t\t\t\t'list' => esc_html__( 'List', 'learnpress' ),\n+\t\t\t\t\t\t'grid' => esc_html__( 'Grid', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'default'     => 'grid',\n+\t\t\t\t],\n+\t\t\t\t'end_section'     => [],\n+\t\t\t]\n+\t\t),\n+\t\t[]\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Flogin-user-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Flogin-user-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Flogin-user-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Flogin-user-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = [];\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'title',\r\n-\t\tesc_html__( 'Title', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'title',\r\n-\t\t\t'.learn-press-form-login h3'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_label',\r\n-\t\tesc_html__( 'Form Label', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'form_label',\r\n-\t\t\t'.learn-press-form-login label'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_input_text',\r\n-\t\tesc_html__( 'Form Input', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form_input_text',\r\n-\t\t\t'.learn-press-form-login input, .learn-press-form-login textarea'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_submit',\r\n-\t\tesc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form',\r\n-\t\t\t'.learn-press-form-login button'\r\n-\t\t)\r\n-\t)\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Flogin-user-form',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flogin-user-form\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Flogin-user-form\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = [];\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'title',\n+\t\tesc_html__( 'Title', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'title',\n+\t\t\t'.learn-press-form-login h3'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_label',\n+\t\tesc_html__( 'Form Label', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'form_label',\n+\t\t\t'.learn-press-form-login label'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_input_text',\n+\t\tesc_html__( 'Form Input', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form_input_text',\n+\t\t\t'.learn-press-form-login input, .learn-press-form-login textarea'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_submit',\n+\t\tesc_html__( 'Button Submit', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form',\n+\t\t\t'.learn-press-form-login button'\n+\t\t)\n+\t)\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Flogin-user-form',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flogin-user-form\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Flogin-user-form\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fregister-user-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fregister-user-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Felementor\u002Fregister-user-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Felementor\u002Fregister-user-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\u002F**\r\n- * Elementor Controls for widget Become a teacher settings.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\r\n-\r\n-\u002F\u002F Fields tab content\r\n-$content_fields = [];\r\n-\r\n-\u002F\u002F Fields tab style\r\n-$style_fields = array_merge(\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'title',\r\n-\t\tesc_html__( 'Title', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'title',\r\n-\t\t\t'.learn-press-form-register h3'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_label',\r\n-\t\tesc_html__( 'Form Label', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_text(\r\n-\t\t\t'form_label',\r\n-\t\t\t'.learn-press-form-register label'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'form_input_text',\r\n-\t\tesc_html__( 'Form Input', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form_input_text',\r\n-\t\t\t'.learn-press-form-register input, .learn-press-form-register textarea'\r\n-\t\t)\r\n-\t),\r\n-\tLPElementorControls::add_fields_in_section(\r\n-\t\t'btn_submit',\r\n-\t\tesc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\tControls_Manager::TAB_STYLE,\r\n-\t\tLPElementorControls::add_controls_style_button(\r\n-\t\t\t'form',\r\n-\t\t\t'.learn-press-form-register button'\r\n-\t\t)\r\n-\t)\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Felementor\u002Fregister-user-form',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fregister-user-form\u002Ftab-content',\r\n-\t\t\t$content_fields\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Felementor\u002Fregister-user-form\u002Ftab-styles',\r\n-\t\t\t$style_fields\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Elementor Controls for widget Become a teacher settings.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+use Elementor\\Controls_Manager;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorControls;\n+\n+\u002F\u002F Fields tab content\n+$content_fields = [];\n+\n+\u002F\u002F Fields tab style\n+$style_fields = array_merge(\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'title',\n+\t\tesc_html__( 'Title', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'title',\n+\t\t\t'.learn-press-form-register h3'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_label',\n+\t\tesc_html__( 'Form Label', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_text(\n+\t\t\t'form_label',\n+\t\t\t'.learn-press-form-register label'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'form_input_text',\n+\t\tesc_html__( 'Form Input', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form_input_text',\n+\t\t\t'.learn-press-form-register input, .learn-press-form-register textarea'\n+\t\t)\n+\t),\n+\tLPElementorControls::add_fields_in_section(\n+\t\t'btn_submit',\n+\t\tesc_html__( 'Button Submit', 'learnpress' ),\n+\t\tControls_Manager::TAB_STYLE,\n+\t\tLPElementorControls::add_controls_style_button(\n+\t\t\t'form',\n+\t\t\t'.learn-press-form-register button'\n+\t\t)\n+\t)\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Felementor\u002Fregister-user-form',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fregister-user-form\u002Ftab-content',\n+\t\t\t$content_fields\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Felementor\u002Fregister-user-form\u002Ftab-styles',\n+\t\t\t$style_fields\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Ffields\u002Fedit-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Ffields\u002Fedit-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Ffields\u002Fedit-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Ffields\u002Fedit-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-\u003C?php\r\n-\u002F**\r\n- * Fields edit course\r\n- *\r\n- * @since 4.2.7.6\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-if ( ! isset( $post_id ) ) {\r\n-\treturn;\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Fields edit course\n+ *\n+ * @since 4.2.7.6\n+ * @version 1.0.0\n+ *\u002F\n+\n+if ( ! isset( $post_id ) ) {\n+\treturn;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fgutenberg\u002Fblock-elements.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fgutenberg\u002Fblock-elements.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fgutenberg\u002Fblock-elements.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fgutenberg\u002Fblock-elements.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,140 +1,140 @@\n-\u003C?php\r\n-\u002F**\r\n- * Declare block type elements\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilter\\CourseFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\ButtonResetFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\ButtonSubmitFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseAuthorFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseCategoriesFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseLevelFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CoursePriceFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseSearchFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseTagFilterBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Breadcrumb\\BreadcrumbBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Courses\\ListCoursesBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseItemTemplateBlock;\r\n-use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseOrderByBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseResultsBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseSearchBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\Legacy\\SingleCourseBlockLegacy;\r\n-use LearnPress\\Gutenberg\\Blocks\\Legacy\\ArchiveCourseBlockLegacy;\r\n-use LearnPress\\Gutenberg\\Blocks\\Legacy\\CourseItemLegacyBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourse\\SingleCourseBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseAddressBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseButtonBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseButtonReadMoreBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCapacityBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCategoriesBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCurriculumBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDeliveryBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDescriptionBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDurationBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFaqsBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeaturedBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeatureReviewBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeaturesBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseImageBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseInstructorBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseInstructorInfoBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseLessonBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseLevelBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseOfflineLessonBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseMaterialBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CoursePriceBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseProgressBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseQuizBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseRequirementsBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseShareBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseStudentBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseTargetAudiencesBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseTitleBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCloseBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCommentBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemContentBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCurriculumBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemHiddenSidebarBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemNavigationBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemProgressBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemSearchBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructor\\SingleInstructorBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorAvatarBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorBackgroundBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorCourseBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorDescriptionBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorNameBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorSocialBlockType;\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorStudentBlockType;\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fconfig\u002Fblock-elements',\r\n-\tarray(\r\n-\t\tnew SingleCourseBlockLegacy(),\r\n-\t\tnew ArchiveCourseBlockLegacy(),\r\n-\t\tnew CourseAddressBlockType(),\r\n-\t\tnew CourseTitleBlockType(),\r\n-\t\tnew CourseFeaturedBlockType(),\r\n-\t\tnew CourseInstructorBlockType(),\r\n-\t\tnew CourseCapacityBlockType(),\r\n-\t\tnew CourseCategoriesBlockType(),\r\n-\t\tnew CourseDeliveryBlockType(),\r\n-\t\tnew CourseDescriptionBlockType(),\r\n-\t\tnew CourseFeaturesBlockType(),\r\n-\t\tnew CourseTargetAudiencesBlockType(),\r\n-\t\tnew CourseRequirementsBlockType(),\r\n-\t\tnew CourseFaqsBlockType(),\r\n-\t\tnew CourseCurriculumBlockType(),\r\n-\t\tnew CourseItemLegacyBlockType(),\r\n-\t\tnew CourseInstructorInfoBlockType(),\r\n-\t\tnew CourseImageBlockType(),\r\n-\t\tnew CoursePriceBlockType(),\r\n-\t\tnew CourseMaterialBlockType(),\r\n-\t\tnew CourseProgressBlockType(),\r\n-\t\tnew CourseStudentBlockType(),\r\n-\t\tnew CourseLessonBlockType(),\r\n-\t\tnew CourseOfflineLessonBlockType(),\r\n-\t\tnew CourseDurationBlockType(),\r\n-\t\tnew CourseQuizBlockType(),\r\n-\t\tnew CourseLevelBlockType(),\r\n-\t\tnew CourseButtonBlockType(),\r\n-\t\tnew CourseButtonReadMoreBlockType(),\r\n-\t\tnew CourseShareBlockType(),\r\n-\t\tnew CourseFeatureReviewBlockType(),\r\n-\t\tnew CourseSearchBlockType(),\r\n-\t\tnew CourseOrderByBlockType(),\r\n-\t\tnew CourseFilterBlockType(),\r\n-\t\tnew CourseSearchFilterBlockType(),\r\n-\t\tnew CourseAuthorFilterBlockType(),\r\n-\t\tnew CourseLevelFilterBlockType(),\r\n-\t\tnew CoursePriceFilterBlockType(),\r\n-\t\tnew CourseCategoriesFilterBlockType(),\r\n-\t\tnew CourseTagFilterBlockType(),\r\n-\t\tnew ButtonSubmitFilterBlockType(),\r\n-\t\tnew ButtonResetFilterBlockType(),\r\n-\t\tnew InstructorBackgroundBlockType(),\r\n-\t\tnew InstructorAvatarBlockType(),\r\n-\t\tnew InstructorNameBlockType(),\r\n-\t\tnew InstructorSocialBlockType(),\r\n-\t\tnew InstructorCourseBlockType(),\r\n-\t\tnew InstructorStudentBlockType(),\r\n-\t\tnew InstructorDescriptionBlockType(),\r\n-\t\tnew BreadcrumbBlockType(),\r\n-\t\t\u002F\u002Fnew SingleCourseBlockType(),\r\n-\t\t\u002F\u002F new SingleInstructorBlockType(),\r\n-\t\tnew ListCoursesBlockType(),\r\n-\t\tnew CourseItemTemplateBlock(),\r\n-\t\tnew CourseResultsBlockType(),\r\n-\t\tnew ItemCloseBlockType(),\r\n-\t\tnew ItemCommentBlockType(),\r\n-\t\tnew ItemContentBlockType(),\r\n-\t\tnew ItemCurriculumBlockType(),\r\n-\t\tnew ItemHiddenSidebarBlockType(),\r\n-\t\tnew ItemNavigationBlockType(),\r\n-\t\tnew ItemProgressBlockType(),\r\n-\t\tnew ItemSearchBlockType(),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Declare block type elements\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.0\n+ *\u002F\n+\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilter\\CourseFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\ButtonResetFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\ButtonSubmitFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseAuthorFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseCategoriesFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseLevelFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CoursePriceFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseSearchFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\CourseFilterElements\\CourseTagFilterBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Breadcrumb\\BreadcrumbBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Courses\\ListCoursesBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseItemTemplateBlock;\n+use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseOrderByBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseResultsBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Courses\\CourseSearchBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\Legacy\\SingleCourseBlockLegacy;\n+use LearnPress\\Gutenberg\\Blocks\\Legacy\\ArchiveCourseBlockLegacy;\n+use LearnPress\\Gutenberg\\Blocks\\Legacy\\CourseItemLegacyBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourse\\SingleCourseBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseAddressBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseButtonBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseButtonReadMoreBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCapacityBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCategoriesBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseCurriculumBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDeliveryBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDescriptionBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseDurationBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFaqsBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeaturedBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeatureReviewBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseFeaturesBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseImageBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseInstructorBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseInstructorInfoBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseLessonBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseLevelBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseOfflineLessonBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseMaterialBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CoursePriceBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseProgressBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseQuizBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseRequirementsBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseShareBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseStudentBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseTargetAudiencesBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\CourseTitleBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCloseBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCommentBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemContentBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemCurriculumBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemHiddenSidebarBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemNavigationBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemProgressBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements\\ItemSearchBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructor\\SingleInstructorBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorAvatarBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorBackgroundBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorCourseBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorDescriptionBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorNameBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorSocialBlockType;\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\InstructorStudentBlockType;\n+\n+return apply_filters(\n+\t'learn-press\u002Fconfig\u002Fblock-elements',\n+\tarray(\n+\t\tnew SingleCourseBlockLegacy(),\n+\t\tnew ArchiveCourseBlockLegacy(),\n+\t\tnew CourseAddressBlockType(),\n+\t\tnew CourseTitleBlockType(),\n+\t\tnew CourseFeaturedBlockType(),\n+\t\tnew CourseInstructorBlockType(),\n+\t\tnew CourseCapacityBlockType(),\n+\t\tnew CourseCategoriesBlockType(),\n+\t\tnew CourseDeliveryBlockType(),\n+\t\tnew CourseDescriptionBlockType(),\n+\t\tnew CourseFeaturesBlockType(),\n+\t\tnew CourseTargetAudiencesBlockType(),\n+\t\tnew CourseRequirementsBlockType(),\n+\t\tnew CourseFaqsBlockType(),\n+\t\tnew CourseCurriculumBlockType(),\n+\t\tnew CourseItemLegacyBlockType(),\n+\t\tnew CourseInstructorInfoBlockType(),\n+\t\tnew CourseImageBlockType(),\n+\t\tnew CoursePriceBlockType(),\n+\t\tnew CourseMaterialBlockType(),\n+\t\tnew CourseProgressBlockType(),\n+\t\tnew CourseStudentBlockType(),\n+\t\tnew CourseLessonBlockType(),\n+\t\tnew CourseOfflineLessonBlockType(),\n+\t\tnew CourseDurationBlockType(),\n+\t\tnew CourseQuizBlockType(),\n+\t\tnew CourseLevelBlockType(),\n+\t\tnew CourseButtonBlockType(),\n+\t\tnew CourseButtonReadMoreBlockType(),\n+\t\tnew CourseShareBlockType(),\n+\t\tnew CourseFeatureReviewBlockType(),\n+\t\tnew CourseSearchBlockType(),\n+\t\tnew CourseOrderByBlockType(),\n+\t\tnew CourseFilterBlockType(),\n+\t\tnew CourseSearchFilterBlockType(),\n+\t\tnew CourseAuthorFilterBlockType(),\n+\t\tnew CourseLevelFilterBlockType(),\n+\t\tnew CoursePriceFilterBlockType(),\n+\t\tnew CourseCategoriesFilterBlockType(),\n+\t\tnew CourseTagFilterBlockType(),\n+\t\tnew ButtonSubmitFilterBlockType(),\n+\t\tnew ButtonResetFilterBlockType(),\n+\t\tnew InstructorBackgroundBlockType(),\n+\t\tnew InstructorAvatarBlockType(),\n+\t\tnew InstructorNameBlockType(),\n+\t\tnew InstructorSocialBlockType(),\n+\t\tnew InstructorCourseBlockType(),\n+\t\tnew InstructorStudentBlockType(),\n+\t\tnew InstructorDescriptionBlockType(),\n+\t\tnew BreadcrumbBlockType(),\n+\t\t\u002F\u002Fnew SingleCourseBlockType(),\n+\t\t\u002F\u002F new SingleInstructorBlockType(),\n+\t\tnew ListCoursesBlockType(),\n+\t\tnew CourseItemTemplateBlock(),\n+\t\tnew CourseResultsBlockType(),\n+\t\tnew ItemCloseBlockType(),\n+\t\tnew ItemCommentBlockType(),\n+\t\tnew ItemContentBlockType(),\n+\t\tnew ItemCurriculumBlockType(),\n+\t\tnew ItemHiddenSidebarBlockType(),\n+\t\tnew ItemNavigationBlockType(),\n+\t\tnew ItemProgressBlockType(),\n+\t\tnew ItemSearchBlockType(),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fgutenberg\u002Fblock-templates.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fgutenberg\u002Fblock-templates.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fgutenberg\u002Fblock-templates.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fgutenberg\u002Fblock-templates.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Declare block type template\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockCategoryTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockTagTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\SingleCourseBlockTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\SingleCourseItemBlockTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\SingleCourseOfflineBlockTemplate;\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fconfig\u002Fblock-templates',\r\n-\t[\r\n-\t\tnew SingleCourseBlockTemplate(),\r\n-\t\tnew ArchiveCoursesBlockTemplate(),\r\n-\t\tnew ArchiveCoursesBlockCategoryTemplate(),\r\n-\t\tnew ArchiveCoursesBlockTagTemplate(),\r\n-\t\tnew SingleCourseItemBlockTemplate(),\r\n-\t\tnew SingleCourseOfflineBlockTemplate(),\r\n-\t]\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Declare block type template\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.0\n+ *\u002F\n+\n+use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockTemplate;\n+use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockCategoryTemplate;\n+use LearnPress\\Gutenberg\\Templates\\ArchiveCoursesBlockTagTemplate;\n+use LearnPress\\Gutenberg\\Templates\\SingleCourseBlockTemplate;\n+use LearnPress\\Gutenberg\\Templates\\SingleCourseItemBlockTemplate;\n+use LearnPress\\Gutenberg\\Templates\\SingleCourseOfflineBlockTemplate;\n+\n+return apply_filters(\n+\t'learn-press\u002Fconfig\u002Fblock-templates',\n+\t[\n+\t\tnew SingleCourseBlockTemplate(),\n+\t\tnew ArchiveCoursesBlockTemplate(),\n+\t\tnew ArchiveCoursesBlockCategoryTemplate(),\n+\t\tnew ArchiveCoursesBlockTagTemplate(),\n+\t\tnew SingleCourseItemBlockTemplate(),\n+\t\tnew SingleCourseOfflineBlockTemplate(),\n+\t]\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fprofile-tabs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fprofile-tabs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fprofile-tabs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fprofile-tabs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\u002F**\r\n- * Profile tabs\r\n- *\r\n- * @since 4.2.6.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileOrderTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileQuizzesTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileStudentEnrolledTemplate;\r\n-\r\n-$settings         = LP_Settings::instance();\r\n-$default_settings = array(\r\n-\t'courses'           => array(\r\n-\t\t'title'    => esc_html__( 'Courses', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.courses', 'courses' ),\r\n-\t\t'callback' => array( LP_Template_Profile::class, 'tab_courses' ),\r\n-\t\t'priority' => 1,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-book-open\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'my-courses'        => array(\r\n-\t\t'title'    => esc_html__( 'My Courses', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.my-courses', 'my-courses' ),\r\n-\t\t'callback' => array( LP_Template_Profile::class, 'tab_my_courses' ),\r\n-\t\t'priority' => 1,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-my-courses\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'quizzes'           => array(\r\n-\t\t'title'    => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.quizzes', 'quizzes' ),\r\n-\t\t'callback' => [ ProfileQuizzesTemplate::class, 'tab_content' ],\r\n-\t\t'priority' => 20,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'orders'            => array(\r\n-\t\t'title'    => esc_html__( 'Orders', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.orders', 'orders' ),\r\n-\t\t'callback' => [ ProfileOrdersTemplate::class, 'tab_content' ],\r\n-\t\t'priority' => 25,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-shopping-cart\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'order-details'     => array(\r\n-\t\t'title'    => esc_html__( 'Order details', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.order-details', 'order-details' ),\r\n-\t\t'hidden'   => true,\r\n-\t\t'callback' => [ ProfileOrderTemplate::class, 'content' ],\r\n-\t\t'priority' => 30,\r\n-\t),\r\n-\t'enrolled-students' => array(\r\n-\t\t'title'    => __( 'Enrolled Students', 'learnpress' ),\r\n-\t\t'slug'     => 'enrolled-students',\r\n-\t\t'callback' => [ ProfileStudentEnrolledTemplate::class, 'tab_content' ],\r\n-\t\t'priority' => 35,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-user-secret\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'settings'          => array(\r\n-\t\t'title'    => esc_html__( 'Settings', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.settings', 'settings' ),\r\n-\t\t'callback' => false,\r\n-\t\t'sections' => array(\r\n-\t\t\t'basic-information' => array(\r\n-\t\t\t\t'title'    => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-basic-information', 'basic-information' ),\r\n-\t\t\t\t'callback' => false,\r\n-\t\t\t\t'priority' => 10,\r\n-\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-home\">\u003C\u002Fi>',\r\n-\t\t\t),\r\n-\t\t\t'avatar'            => array(\r\n-\t\t\t\t'title'    => esc_html__( 'Avatar', 'learnpress' ),\r\n-\t\t\t\t'callback' => [ LP_Template_Profile::class, 'tab_avatar' ],\r\n-\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-avatar', 'avatar' ),\r\n-\t\t\t\t'priority' => 20,\r\n-\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-user-circle\">\u003C\u002Fi>',\r\n-\t\t\t),\r\n-\t\t\t'cover-image'       => array(\r\n-\t\t\t\t'title'    => esc_html__( 'Cover Image', 'learnpress' ),\r\n-\t\t\t\t'callback' => array( LP_Template_Profile::class, 'tab_cover_image' ),\r\n-\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-cover-image', 'cover-image' ),\r\n-\t\t\t\t'priority' => 21,\r\n-\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-file-picture\">\u003C\u002Fi>',\r\n-\t\t\t),\r\n-\t\t\t'change-password'   => array(\r\n-\t\t\t\t'title'    => esc_html__( 'Password', 'learnpress' ),\r\n-\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-change-password', 'change-password' ),\r\n-\t\t\t\t'callback' => false,\r\n-\t\t\t\t'priority' => 30,\r\n-\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-key\">\u003C\u002Fi>',\r\n-\t\t\t),\r\n-\t\t),\r\n-\t\t'priority' => 90,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-cog\">\u003C\u002Fi>',\r\n-\t),\r\n-\t'logout'            => array(\r\n-\t\t'title'    => esc_html__( 'Logout', 'learnpress' ),\r\n-\t\t'slug'     => learn_press_profile_logout_slug(),\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-sign-out\">\u003C\u002Fi>',\r\n-\t\t'priority' => 100,\r\n-\t),\r\n-);\r\n-\r\n-if ( 'yes' === LP_Profile::get_option_publish_profile() ) {\r\n-\t$default_settings['settings']['sections']['privacy'] = array(\r\n-\t\t'title'    => esc_html__( 'Privacy', 'learnpress' ),\r\n-\t\t'slug'     => $settings->get( 'profile_endpoints.settings-privacy', 'privacy' ),\r\n-\t\t'priority' => 40,\r\n-\t\t'callback' => false,\r\n-\t\t'icon'     => '\u003Ci class=\"lp-icon-user-secret\">\u003C\u002Fi>',\r\n-\t);\r\n-}\r\n-\r\n-return apply_filters( 'learn-press\u002Fprofile-tabs', $default_settings );\r\n+\u003C?php\n+\u002F**\n+ * Profile tabs\n+ *\n+ * @since 4.2.6.4\n+ * @version 1.0.1\n+ *\u002F\n+\n+use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileOrderTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileQuizzesTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileStudentEnrolledTemplate;\n+\n+$settings         = LP_Settings::instance();\n+$default_settings = array(\n+\t'courses'           => array(\n+\t\t'title'    => esc_html__( 'Courses', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.courses', 'courses' ),\n+\t\t'callback' => array( LP_Template_Profile::class, 'tab_courses' ),\n+\t\t'priority' => 1,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-book-open\">\u003C\u002Fi>',\n+\t),\n+\t'my-courses'        => array(\n+\t\t'title'    => esc_html__( 'My Courses', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.my-courses', 'my-courses' ),\n+\t\t'callback' => array( LP_Template_Profile::class, 'tab_my_courses' ),\n+\t\t'priority' => 1,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-my-courses\">\u003C\u002Fi>',\n+\t),\n+\t'quizzes'           => array(\n+\t\t'title'    => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.quizzes', 'quizzes' ),\n+\t\t'callback' => [ ProfileQuizzesTemplate::class, 'tab_content' ],\n+\t\t'priority' => 20,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>',\n+\t),\n+\t'orders'            => array(\n+\t\t'title'    => esc_html__( 'Orders', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.orders', 'orders' ),\n+\t\t'callback' => [ ProfileOrdersTemplate::class, 'tab_content' ],\n+\t\t'priority' => 25,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-shopping-cart\">\u003C\u002Fi>',\n+\t),\n+\t'order-details'     => array(\n+\t\t'title'    => esc_html__( 'Order details', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.order-details', 'order-details' ),\n+\t\t'hidden'   => true,\n+\t\t'callback' => [ ProfileOrderTemplate::class, 'content' ],\n+\t\t'priority' => 30,\n+\t),\n+\t'enrolled-students' => array(\n+\t\t'title'    => __( 'Enrolled Students', 'learnpress' ),\n+\t\t'slug'     => 'enrolled-students',\n+\t\t'callback' => [ ProfileStudentEnrolledTemplate::class, 'tab_content' ],\n+\t\t'priority' => 35,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-user-secret\">\u003C\u002Fi>',\n+\t),\n+\t'settings'          => array(\n+\t\t'title'    => esc_html__( 'Settings', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.settings', 'settings' ),\n+\t\t'callback' => false,\n+\t\t'sections' => array(\n+\t\t\t'basic-information' => array(\n+\t\t\t\t'title'    => esc_html__( 'General', 'learnpress' ),\n+\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-basic-information', 'basic-information' ),\n+\t\t\t\t'callback' => false,\n+\t\t\t\t'priority' => 10,\n+\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-home\">\u003C\u002Fi>',\n+\t\t\t),\n+\t\t\t'avatar'            => array(\n+\t\t\t\t'title'    => esc_html__( 'Avatar', 'learnpress' ),\n+\t\t\t\t'callback' => [ LP_Template_Profile::class, 'tab_avatar' ],\n+\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-avatar', 'avatar' ),\n+\t\t\t\t'priority' => 20,\n+\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-user-circle\">\u003C\u002Fi>',\n+\t\t\t),\n+\t\t\t'cover-image'       => array(\n+\t\t\t\t'title'    => esc_html__( 'Cover Image', 'learnpress' ),\n+\t\t\t\t'callback' => array( LP_Template_Profile::class, 'tab_cover_image' ),\n+\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-cover-image', 'cover-image' ),\n+\t\t\t\t'priority' => 21,\n+\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-file-picture\">\u003C\u002Fi>',\n+\t\t\t),\n+\t\t\t'change-password'   => array(\n+\t\t\t\t'title'    => esc_html__( 'Password', 'learnpress' ),\n+\t\t\t\t'slug'     => $settings->get( 'profile_endpoints.settings-change-password', 'change-password' ),\n+\t\t\t\t'callback' => false,\n+\t\t\t\t'priority' => 30,\n+\t\t\t\t'icon'     => '\u003Ci class=\"lp-icon-key\">\u003C\u002Fi>',\n+\t\t\t),\n+\t\t),\n+\t\t'priority' => 90,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-cog\">\u003C\u002Fi>',\n+\t),\n+\t'logout'            => array(\n+\t\t'title'    => esc_html__( 'Logout', 'learnpress' ),\n+\t\t'slug'     => learn_press_profile_logout_slug(),\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-sign-out\">\u003C\u002Fi>',\n+\t\t'priority' => 100,\n+\t),\n+);\n+\n+if ( 'yes' === LP_Profile::get_option_publish_profile() ) {\n+\t$default_settings['settings']['sections']['privacy'] = array(\n+\t\t'title'    => esc_html__( 'Privacy', 'learnpress' ),\n+\t\t'slug'     => $settings->get( 'profile_endpoints.settings-privacy', 'privacy' ),\n+\t\t'priority' => 40,\n+\t\t'callback' => false,\n+\t\t'icon'     => '\u003Ci class=\"lp-icon-user-secret\">\u003C\u002Fi>',\n+\t);\n+}\n+\n+return apply_filters( 'learn-press\u002Fprofile-tabs', $default_settings );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fadvanced.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fadvanced.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fadvanced.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fadvanced.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,92 @@\n-\u003C?php\r\n-\u002F**\r\n- * Setting tab Advanced\r\n- *\u002F\r\n-\r\n-return apply_filters(\r\n-\t'learn_press_advanced_settings',\r\n-\tarray(\r\n-\t\tarray(\r\n-\t\t\t'type'  => 'title',\r\n-\t\t\t'title' => esc_html__( 'Style', 'learnpress' ),\r\n-\t\t\t'id'    => 'lp_metabox_setting_advanced',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Width container', 'learnpress' ),\r\n-\t\t\t'desc'     => sprintf( '%s', __( 'With of container, Ex: 1140px, 80rem', 'learnpress' ) ),\r\n-\t\t\t'id'       => 'width_container',\r\n-\t\t\t'type'     => 'text',\r\n-\t\t\t'default'  => '1290px',\r\n-\t\t\t'desc_tip' => true,\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Primary color', 'learnpress' ),\r\n-\t\t\t'desc'     => sprintf( __( 'Default: %s', 'learnpress' ), '\u003Ccode>#ffb606\u003C\u002Fcode>' ),\r\n-\t\t\t'id'       => 'primary_color',\r\n-\t\t\t'type'     => 'color',\r\n-\t\t\t'css'      => 'width:6em;',\r\n-\t\t\t'default'  => '#ffb606',\r\n-\t\t\t'autoload' => false,\r\n-\t\t\t'desc_tip' => true,\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Secondary color', 'learnpress' ),\r\n-\t\t\t'desc'     => sprintf( __( 'Default: %s', 'learnpress' ), '\u003Ccode>#442e66\u003C\u002Fcode>' ),\r\n-\t\t\t'id'       => 'secondary_color',\r\n-\t\t\t'type'     => 'color',\r\n-\t\t\t'css'      => 'width:6em;',\r\n-\t\t\t'default'  => '#442e66',\r\n-\t\t\t'autoload' => false,\r\n-\t\t\t'desc_tip' => true,\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t\t'id'   => 'lp_metabox_setting_advanced',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type'  => 'title',\r\n-\t\t\t'title' => esc_html__( 'Other', 'learnpress' ),\r\n-\t\t\t'id'    => 'lp_metabox_advanced_other',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'         => esc_html__( 'Enable gutenberg', 'learnpress' ),\r\n-\t\t\t'id'            => 'enable_gutenberg_course',\r\n-\t\t\t'default'       => 'no',\r\n-\t\t\t'type'          => 'checkbox',\r\n-\t\t\t'checkboxgroup' => 'start',\r\n-\t\t\t'desc'          => esc_html__( 'Course', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'id'            => 'enable_gutenberg_lesson',\r\n-\t\t\t'default'       => 'no',\r\n-\t\t\t'type'          => 'checkbox',\r\n-\t\t\t'checkboxgroup' => '',\r\n-\t\t\t'desc'          => esc_html__( 'Lesson', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'id'            => 'enable_gutenberg_quiz',\r\n-\t\t\t'default'       => 'no',\r\n-\t\t\t'type'          => 'checkbox',\r\n-\t\t\t'checkboxgroup' => '',\r\n-\t\t\t'desc'          => esc_html__( 'Quiz', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'id'            => 'enable_gutenberg_question',\r\n-\t\t\t'default'       => 'no',\r\n-\t\t\t'type'          => 'checkbox',\r\n-\t\t\t'checkboxgroup' => 'end',\r\n-\t\t\t'desc'          => esc_html__( 'Question', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Debug Mode', 'learnpress' ),\r\n-\t\t\t'id'      => 'debug',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => esc_html__( 'Enable debug mode for the developer.', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t\t'id'   => 'lp_metabox_advanced_other',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Setting tab Advanced\n+ *\u002F\n+\n+return apply_filters(\n+\t'learn_press_advanced_settings',\n+\tarray(\n+\t\tarray(\n+\t\t\t'type'  => 'title',\n+\t\t\t'title' => esc_html__( 'Style', 'learnpress' ),\n+\t\t\t'id'    => 'lp_metabox_setting_advanced',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Width container', 'learnpress' ),\n+\t\t\t'desc'     => sprintf( '%s', __( 'With of container, Ex: 1140px, 80rem', 'learnpress' ) ),\n+\t\t\t'id'       => 'width_container',\n+\t\t\t'type'     => 'text',\n+\t\t\t'default'  => '1290px',\n+\t\t\t'desc_tip' => true,\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Primary color', 'learnpress' ),\n+\t\t\t'desc'     => sprintf( __( 'Default: %s', 'learnpress' ), '\u003Ccode>#ffb606\u003C\u002Fcode>' ),\n+\t\t\t'id'       => 'primary_color',\n+\t\t\t'type'     => 'color',\n+\t\t\t'css'      => 'width:6em;',\n+\t\t\t'default'  => '#ffb606',\n+\t\t\t'autoload' => false,\n+\t\t\t'desc_tip' => true,\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Secondary color', 'learnpress' ),\n+\t\t\t'desc'     => sprintf( __( 'Default: %s', 'learnpress' ), '\u003Ccode>#442e66\u003C\u002Fcode>' ),\n+\t\t\t'id'       => 'secondary_color',\n+\t\t\t'type'     => 'color',\n+\t\t\t'css'      => 'width:6em;',\n+\t\t\t'default'  => '#442e66',\n+\t\t\t'autoload' => false,\n+\t\t\t'desc_tip' => true,\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t\t'id'   => 'lp_metabox_setting_advanced',\n+\t\t),\n+\t\tarray(\n+\t\t\t'type'  => 'title',\n+\t\t\t'title' => esc_html__( 'Other', 'learnpress' ),\n+\t\t\t'id'    => 'lp_metabox_advanced_other',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'         => esc_html__( 'Enable gutenberg', 'learnpress' ),\n+\t\t\t'id'            => 'enable_gutenberg_course',\n+\t\t\t'default'       => 'no',\n+\t\t\t'type'          => 'checkbox',\n+\t\t\t'checkboxgroup' => 'start',\n+\t\t\t'desc'          => esc_html__( 'Course', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'id'            => 'enable_gutenberg_lesson',\n+\t\t\t'default'       => 'no',\n+\t\t\t'type'          => 'checkbox',\n+\t\t\t'checkboxgroup' => '',\n+\t\t\t'desc'          => esc_html__( 'Lesson', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'id'            => 'enable_gutenberg_quiz',\n+\t\t\t'default'       => 'no',\n+\t\t\t'type'          => 'checkbox',\n+\t\t\t'checkboxgroup' => '',\n+\t\t\t'desc'          => esc_html__( 'Quiz', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'id'            => 'enable_gutenberg_question',\n+\t\t\t'default'       => 'no',\n+\t\t\t'type'          => 'checkbox',\n+\t\t\t'checkboxgroup' => 'end',\n+\t\t\t'desc'          => esc_html__( 'Question', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Debug Mode', 'learnpress' ),\n+\t\t\t'id'      => 'debug',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => esc_html__( 'Enable debug mode for the developer.', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t\t'id'   => 'lp_metabox_advanced_other',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcourse.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcourse.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcourse.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcourse.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,334 +1,334 @@\n-\u003C?php\r\n-\u002F**\r\n- * Settings Courses\r\n- *\u002F\r\n-$generate_course_thumbnail         = get_option( 'learn_press_generate_course_thumbnail', 'no' );\r\n-$des_option_redirect_finish_course = wp_sprintf(\r\n-\t'%s\u003Cbr>%s',\r\n-\tesc_html__( 'The site will be redirected to the URL added after clicking the finish course button.', 'learnpress' ),\r\n-\tesc_html__( 'Set blank, the site will be redirected to the single course page', 'learnpress' )\r\n-);\r\n-$layout_single_course_default      = LP_Settings::get_option( 'layout_single_course', '' );\r\n-if ( empty( $layout_single_course_default ) ) {\r\n-\t$layout_single_course_default = 'classic';\r\n-}\r\n-\r\n-\u002F\u002F Temporary hide fields for the Modern layout.\r\n-add_filter(\r\n-\t'learn-press\u002Fcourse-settings-fields\u002Fcurriculum',\r\n-\tfunction ( $fields ) use ( $layout_single_course_default ) {\r\n-\t\tif ( $layout_single_course_default === 'modern' ) {\r\n-\t\t\tunset( $fields[2] );\r\n-\t\t\tunset( $fields[3] );\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-);\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fcourses-settings-fields',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fgeneral',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Layout single course', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Layout default display for single course. (Not apply for theme Gutenberg)', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'layout_single_course',\r\n-\t\t\t\t\t'default' => $layout_single_course_default,\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'modern'  => esc_html__( 'Modern', 'learnpress' ),\r\n-\t\t\t\t\t\t'classic' => esc_html__( 'Classic', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Review courses', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Courses created by instructors will be pending review first.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'required_review',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Auto start', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'auto_enroll',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Students will get started on courses immediately after successfully purchasing them.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => __( 'Confirmation popup', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => __( 'Show a confirmation popup before finishing the course or completing the item.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'enable_popup_confirm_finish',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Archive page layout', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Display the List course type on the Course Archive page.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'archive_courses_layout',\r\n-\t\t\t\t\t'default' => 'list',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => learn_press_courses_layouts(),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'             => esc_html__( 'Courses per page', 'learnpress' ),\r\n-\t\t\t\t\t'desc'              => esc_html__( 'The number of displayed courses per page.', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'archive_course_limit',\r\n-\t\t\t\t\t'default'           => '8',\r\n-\t\t\t\t\t'type'              => 'number',\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'min' => '1',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'css'               => 'min-width: 50px; width: 50px;',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Include courses in subcategory', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Show all courses within the subcategory that have not been chosen in the parent category.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'get_courses_of_subcategory',\r\n-\t\t\t\t\t'default' => 'no',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'css'     => 'min-width: 50px; width: 50px;',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Loading ajax Courses', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => __( 'On\u002FOff \u003Ci>loading ajax courses on the Course Archive page \u003C\u002Fi>.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'courses_load_ajax',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'           => esc_html__( 'Do not run Ajax when reloading the Course Archive page', 'learnpress' ),\r\n-\t\t\t\t\t'desc'            => esc_html__( 'Ajax is only applied when selecting pagination, filtering, searching, and sorting. Not applicable when reloading the Course Archive page.', 'learnpress' ),\r\n-\t\t\t\t\t'id'              => 'courses_first_no_ajax',\r\n-\t\t\t\t\t'default'         => 'no',\r\n-\t\t\t\t\t'type'            => 'checkbox',\r\n-\t\t\t\t\t'show_if_checked' => 'courses_load_ajax',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'           => esc_html__( 'Pagination Type', 'learnpress' ),\r\n-\t\t\t\t\t'desc'            => esc_html__( 'Display the pagination type on the Course Archive page.', 'learnpress' ),\r\n-\t\t\t\t\t'id'              => 'course_pagination_type',\r\n-\t\t\t\t\t'default'         => 'standard',\r\n-\t\t\t\t\t'type'            => 'select',\r\n-\t\t\t\t\t'options'         => array(\r\n-\t\t\t\t\t\t'number'    => esc_html__( 'Number', 'learnpress' ),\r\n-\t\t\t\t\t\t'load-more' => esc_html__( 'Load More', 'learnpress' ),\r\n-\t\t\t\t\t\t'infinite'  => esc_html__( 'Infinite Scroll', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'show_if_checked' => 'courses_load_ajax',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Thumbnail dimensions', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'course_thumbnail_dimensions',\r\n-\t\t\t\t\t'default' => array( 500, 300, 'yes' ),\r\n-\t\t\t\t\t'type'    => 'image-dimensions',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Redirect when finishing the course', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'course_finish_redirect',\r\n-\t\t\t\t\t'default'     => '',\r\n-\t\t\t\t\t'type'        => 'url',\r\n-\t\t\t\t\t'placeholder' => 'https:\u002F\u002Flearnpresslms.com\u002F',\r\n-\t\t\t\t\t'desc'        => $des_option_redirect_finish_course,\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fcurriculum',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'title' => esc_html__( 'Curriculum Settings', 'learnpress' ),\r\n-\t\t\t\t\t'id'    => 'lp_metabox_curriculum_setting',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Curriculum display', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'curriculum_display',\r\n-\t\t\t\t\t'default' => 'expand_first_section',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'expand_first_section' => esc_html__( 'Expand first section', 'learnpress' ),\r\n-\t\t\t\t\t\t'expand_all'           => esc_html__( 'Expand all sections', 'learnpress' ),\r\n-\t\t\t\t\t\t'collapse_all'         => esc_html__( 'Collapse all sections', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Currently, apply for the Modern single course layout only.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Section Per Page', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'section_per_page',\r\n-\t\t\t\t\t'default' => -1,\r\n-\t\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t\t'min'     => '-1',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed sections per page (Enter -1 to display all sections).', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Course Item Per Page', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'course_item_per_page',\r\n-\t\t\t\t\t'default' => -1,\r\n-\t\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t\t'min'     => '-1',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed course items per page in a section (Enter -1 to display all course items).', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t'id'   => 'lp_metabox_curriculum_setting',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fquiz',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'title' => esc_html__( 'Quiz Settings', 'learnpress' ),\r\n-\t\t\t\t\t'id'    => 'lp_metabox_setting_quiz',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Sticky Quiz Paging', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'navigation_position',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'The question\\'s navigation position is sticky. If this option is disabled, the question navigation position will be below the quiz content', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t'id'   => 'lp_metabox_setting_quiz',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fmaterial',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'title' => esc_html__( 'Material Settings', 'learnpress' ),\r\n-\t\t\t\t\t'id'    => 'lp_course_material_setting',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'             => esc_html__( 'File Type', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'material_allow_file_type',\r\n-\t\t\t\t\t'type'              => 'multiselect',\r\n-\t\t\t\t\t'is_optgroup'       => '1',\r\n-\t\t\t\t\t'class'             => 'lp-tom-select',\r\n-\t\t\t\t\t'default'           => array( 'pdf', 'txt' ),\r\n-\t\t\t\t\t'desc'              => esc_html__( 'Which types of file will be allowed uploading?', 'learnpress' ),\r\n-\t\t\t\t\t'options'           => array(\r\n-\t\t\t\t\t\t'document'           => array(\r\n-\t\t\t\t\t\t\t'txt'      => '.txt(text\u002Fplain)',\r\n-\t\t\t\t\t\t\t'doc,docx' => '.doc, .docx (Microsoft Word)',\r\n-\t\t\t\t\t\t\t'pdf'      => '.pdf (Portable Document Format)',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'image'              => array(\r\n-\t\t\t\t\t\t\t'jpg,jpeg' => '.jpg, .jpeg (Joint Photographic Experts Group)',\r\n-\t\t\t\t\t\t\t'png'      => '.png (Portable Network Graphics)',\r\n-\t\t\t\t\t\t\t'gif'      => '.gif (Graphics Interchange Format)',\r\n-\t\t\t\t\t\t\t'bmp'      => '.bmp (Bitmap)',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'audio'              => array(\r\n-\t\t\t\t\t\t\t'mp3' => '.mp3 (MPEG Audio Layer 3)',\r\n-\t\t\t\t\t\t\t'wav' => '.wav (Waveform Audio File Format)',\r\n-\t\t\t\t\t\t\t'wma' => '.wma (Windows Media Audio)',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'video'              => array(\r\n-\t\t\t\t\t\t\t'mp4' => '.mp4 (MPEG-4 Part 14)',\r\n-\t\t\t\t\t\t\t'avi' => '.avi (Audio Video Interleave)',\r\n-\t\t\t\t\t\t\t'mov' => '.mov (QuickTime Movie)',\r\n-\t\t\t\t\t\t\t'wmv' => '.wmv (Windows Media Video)',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'spreadsheet'        => array(\r\n-\t\t\t\t\t\t\t'xls,xlsx' => '.xls, .xlsx (Microsoft Excel)',\r\n-\t\t\t\t\t\t\t'ods'      => '.ods (OpenDocument Spreadsheet)',\r\n-\t\t\t\t\t\t\t'csv'      => '.csv (Comma-Separated Values)',\r\n-\t\t\t\t\t\t\t'numbers'  => '.numbers (Apple Numbers)',\r\n-\t\t\t\t\t\t\t'tsv'      => '.tsv (Tab-Separated Values)',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'compressed archive' => array(\r\n-\t\t\t\t\t\t\t'zip' => 'ZIP archive',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'required' => '1',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'             => esc_html__( 'Upload Files', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'material_upload_files',\r\n-\t\t\t\t\t'default'           => 2,\r\n-\t\t\t\t\t'type'              => 'number',\r\n-\t\t\t\t\t'desc'              => esc_html__( 'Number files the user can upload. Set to 0 to disable', 'learnpress' ),\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'min' => '0',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'             => esc_html__( 'File Size Limit', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'material_max_file_size',\r\n-\t\t\t\t\t'default'           => 2,\r\n-\t\t\t\t\t'type'              => 'number',\r\n-\t\t\t\t\t'desc'              => esc_html__( 'Set Maximum Attachment size for upload (MB)', 'learnpress' ),\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'min' => '1',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'             => esc_html__( 'File Per Page', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'material_file_per_page',\r\n-\t\t\t\t\t'default'           => -1,\r\n-\t\t\t\t\t'type'              => 'number',\r\n-\t\t\t\t\t'desc'              => esc_html__( 'The number of displayed files per page (Enter -1 to display all files, set to 0 to disable).', 'learnpress' ),\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'min' => '-1',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Url nofollow', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Add rel=\"nofollow\" to material external link.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'material_url_nofollow',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t'id'   => 'lp_course_material_setting',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Finstructor',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'title' => esc_html__( 'Instructor Settings', 'learnpress' ),\r\n-\t\t\t\t\t'id'    => 'lp_metabox_instructor_setting',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Instructor Per Page', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'instructor_per_page',\r\n-\t\t\t\t\t'default' => 12,\r\n-\t\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed instructors per page (Enter -1 to display all sections).', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Show Admin on list', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'show_admin_on_list_instructors',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Show author Admin on list instructors.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t'id'   => 'lp_metabox_instructor_setting',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Settings Courses\n+ *\u002F\n+$generate_course_thumbnail         = get_option( 'learn_press_generate_course_thumbnail', 'no' );\n+$des_option_redirect_finish_course = wp_sprintf(\n+\t'%s\u003Cbr>%s',\n+\tesc_html__( 'The site will be redirected to the URL added after clicking the finish course button.', 'learnpress' ),\n+\tesc_html__( 'Set blank, the site will be redirected to the single course page', 'learnpress' )\n+);\n+$layout_single_course_default      = LP_Settings::get_option( 'layout_single_course', '' );\n+if ( empty( $layout_single_course_default ) ) {\n+\t$layout_single_course_default = 'classic';\n+}\n+\n+\u002F\u002F Temporary hide fields for the Modern layout.\n+add_filter(\n+\t'learn-press\u002Fcourse-settings-fields\u002Fcurriculum',\n+\tfunction ( $fields ) use ( $layout_single_course_default ) {\n+\t\tif ( $layout_single_course_default === 'modern' ) {\n+\t\t\tunset( $fields[2] );\n+\t\t\tunset( $fields[3] );\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+);\n+\n+return apply_filters(\n+\t'learn-press\u002Fcourses-settings-fields',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fgeneral',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => esc_html__( 'General', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Layout single course', 'learnpress' ),\n+\t\t\t\t\t'desc'    => esc_html__( 'Layout default display for single course. (Not apply for theme Gutenberg)', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'layout_single_course',\n+\t\t\t\t\t'default' => $layout_single_course_default,\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'modern'  => esc_html__( 'Modern', 'learnpress' ),\n+\t\t\t\t\t\t'classic' => esc_html__( 'Classic', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Review courses', 'learnpress' ),\n+\t\t\t\t\t'desc'    => esc_html__( 'Courses created by instructors will be pending review first.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'required_review',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Auto start', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'auto_enroll',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Students will get started on courses immediately after successfully purchasing them.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => __( 'Confirmation popup', 'learnpress' ),\n+\t\t\t\t\t'desc'    => __( 'Show a confirmation popup before finishing the course or completing the item.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'enable_popup_confirm_finish',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Archive page layout', 'learnpress' ),\n+\t\t\t\t\t'desc'    => esc_html__( 'Display the List course type on the Course Archive page.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'archive_courses_layout',\n+\t\t\t\t\t'default' => 'list',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => learn_press_courses_layouts(),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'             => esc_html__( 'Courses per page', 'learnpress' ),\n+\t\t\t\t\t'desc'              => esc_html__( 'The number of displayed courses per page.', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'archive_course_limit',\n+\t\t\t\t\t'default'           => '8',\n+\t\t\t\t\t'type'              => 'number',\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'min' => '1',\n+\t\t\t\t\t),\n+\t\t\t\t\t'css'               => 'min-width: 50px; width: 50px;',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Include courses in subcategory', 'learnpress' ),\n+\t\t\t\t\t'desc'    => esc_html__( 'Show all courses within the subcategory that have not been chosen in the parent category.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'get_courses_of_subcategory',\n+\t\t\t\t\t'default' => 'no',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'css'     => 'min-width: 50px; width: 50px;',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Loading ajax Courses', 'learnpress' ),\n+\t\t\t\t\t'desc'    => __( 'On\u002FOff \u003Ci>loading ajax courses on the Course Archive page \u003C\u002Fi>.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'courses_load_ajax',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'           => esc_html__( 'Do not run Ajax when reloading the Course Archive page', 'learnpress' ),\n+\t\t\t\t\t'desc'            => esc_html__( 'Ajax is only applied when selecting pagination, filtering, searching, and sorting. Not applicable when reloading the Course Archive page.', 'learnpress' ),\n+\t\t\t\t\t'id'              => 'courses_first_no_ajax',\n+\t\t\t\t\t'default'         => 'no',\n+\t\t\t\t\t'type'            => 'checkbox',\n+\t\t\t\t\t'show_if_checked' => 'courses_load_ajax',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'           => esc_html__( 'Pagination Type', 'learnpress' ),\n+\t\t\t\t\t'desc'            => esc_html__( 'Display the pagination type on the Course Archive page.', 'learnpress' ),\n+\t\t\t\t\t'id'              => 'course_pagination_type',\n+\t\t\t\t\t'default'         => 'standard',\n+\t\t\t\t\t'type'            => 'select',\n+\t\t\t\t\t'options'         => array(\n+\t\t\t\t\t\t'number'    => esc_html__( 'Number', 'learnpress' ),\n+\t\t\t\t\t\t'load-more' => esc_html__( 'Load More', 'learnpress' ),\n+\t\t\t\t\t\t'infinite'  => esc_html__( 'Infinite Scroll', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'show_if_checked' => 'courses_load_ajax',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Thumbnail dimensions', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'course_thumbnail_dimensions',\n+\t\t\t\t\t'default' => array( 500, 300, 'yes' ),\n+\t\t\t\t\t'type'    => 'image-dimensions',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Redirect when finishing the course', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'course_finish_redirect',\n+\t\t\t\t\t'default'     => '',\n+\t\t\t\t\t'type'        => 'url',\n+\t\t\t\t\t'placeholder' => 'https:\u002F\u002Flearnpresslms.com\u002F',\n+\t\t\t\t\t'desc'        => $des_option_redirect_finish_course,\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fcurriculum',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'title' => esc_html__( 'Curriculum Settings', 'learnpress' ),\n+\t\t\t\t\t'id'    => 'lp_metabox_curriculum_setting',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Curriculum display', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'curriculum_display',\n+\t\t\t\t\t'default' => 'expand_first_section',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'expand_first_section' => esc_html__( 'Expand first section', 'learnpress' ),\n+\t\t\t\t\t\t'expand_all'           => esc_html__( 'Expand all sections', 'learnpress' ),\n+\t\t\t\t\t\t'collapse_all'         => esc_html__( 'Collapse all sections', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'desc'    => esc_html__( 'Currently, apply for the Modern single course layout only.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Section Per Page', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'section_per_page',\n+\t\t\t\t\t'default' => -1,\n+\t\t\t\t\t'type'    => 'number',\n+\t\t\t\t\t'min'     => '-1',\n+\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed sections per page (Enter -1 to display all sections).', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Course Item Per Page', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'course_item_per_page',\n+\t\t\t\t\t'default' => -1,\n+\t\t\t\t\t'type'    => 'number',\n+\t\t\t\t\t'min'     => '-1',\n+\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed course items per page in a section (Enter -1 to display all course items).', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t'id'   => 'lp_metabox_curriculum_setting',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fquiz',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'title' => esc_html__( 'Quiz Settings', 'learnpress' ),\n+\t\t\t\t\t'id'    => 'lp_metabox_setting_quiz',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Sticky Quiz Paging', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'navigation_position',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'The question\\'s navigation position is sticky. If this option is disabled, the question navigation position will be below the quiz content', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t'id'   => 'lp_metabox_setting_quiz',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fmaterial',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'title' => esc_html__( 'Material Settings', 'learnpress' ),\n+\t\t\t\t\t'id'    => 'lp_course_material_setting',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'             => esc_html__( 'File Type', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'material_allow_file_type',\n+\t\t\t\t\t'type'              => 'multiselect',\n+\t\t\t\t\t'is_optgroup'       => '1',\n+\t\t\t\t\t'class'             => 'lp-tom-select',\n+\t\t\t\t\t'default'           => array( 'pdf', 'txt' ),\n+\t\t\t\t\t'desc'              => esc_html__( 'Which types of file will be allowed uploading?', 'learnpress' ),\n+\t\t\t\t\t'options'           => array(\n+\t\t\t\t\t\t'document'           => array(\n+\t\t\t\t\t\t\t'txt'      => '.txt(text\u002Fplain)',\n+\t\t\t\t\t\t\t'doc,docx' => '.doc, .docx (Microsoft Word)',\n+\t\t\t\t\t\t\t'pdf'      => '.pdf (Portable Document Format)',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'image'              => array(\n+\t\t\t\t\t\t\t'jpg,jpeg' => '.jpg, .jpeg (Joint Photographic Experts Group)',\n+\t\t\t\t\t\t\t'png'      => '.png (Portable Network Graphics)',\n+\t\t\t\t\t\t\t'gif'      => '.gif (Graphics Interchange Format)',\n+\t\t\t\t\t\t\t'bmp'      => '.bmp (Bitmap)',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'audio'              => array(\n+\t\t\t\t\t\t\t'mp3' => '.mp3 (MPEG Audio Layer 3)',\n+\t\t\t\t\t\t\t'wav' => '.wav (Waveform Audio File Format)',\n+\t\t\t\t\t\t\t'wma' => '.wma (Windows Media Audio)',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'video'              => array(\n+\t\t\t\t\t\t\t'mp4' => '.mp4 (MPEG-4 Part 14)',\n+\t\t\t\t\t\t\t'avi' => '.avi (Audio Video Interleave)',\n+\t\t\t\t\t\t\t'mov' => '.mov (QuickTime Movie)',\n+\t\t\t\t\t\t\t'wmv' => '.wmv (Windows Media Video)',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'spreadsheet'        => array(\n+\t\t\t\t\t\t\t'xls,xlsx' => '.xls, .xlsx (Microsoft Excel)',\n+\t\t\t\t\t\t\t'ods'      => '.ods (OpenDocument Spreadsheet)',\n+\t\t\t\t\t\t\t'csv'      => '.csv (Comma-Separated Values)',\n+\t\t\t\t\t\t\t'numbers'  => '.numbers (Apple Numbers)',\n+\t\t\t\t\t\t\t'tsv'      => '.tsv (Tab-Separated Values)',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'compressed archive' => array(\n+\t\t\t\t\t\t\t'zip' => 'ZIP archive',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'required' => '1',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'             => esc_html__( 'Upload Files', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'material_upload_files',\n+\t\t\t\t\t'default'           => 2,\n+\t\t\t\t\t'type'              => 'number',\n+\t\t\t\t\t'desc'              => esc_html__( 'Number files the user can upload. Set to 0 to disable', 'learnpress' ),\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'min' => '0',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'             => esc_html__( 'File Size Limit', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'material_max_file_size',\n+\t\t\t\t\t'default'           => 2,\n+\t\t\t\t\t'type'              => 'number',\n+\t\t\t\t\t'desc'              => esc_html__( 'Set Maximum Attachment size for upload (MB)', 'learnpress' ),\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'min' => '1',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'             => esc_html__( 'File Per Page', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'material_file_per_page',\n+\t\t\t\t\t'default'           => -1,\n+\t\t\t\t\t'type'              => 'number',\n+\t\t\t\t\t'desc'              => esc_html__( 'The number of displayed files per page (Enter -1 to display all files, set to 0 to disable).', 'learnpress' ),\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'min' => '-1',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Url nofollow', 'learnpress' ),\n+\t\t\t\t\t'desc'    => esc_html__( 'Add rel=\"nofollow\" to material external link.', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'material_url_nofollow',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t'id'   => 'lp_course_material_setting',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Finstructor',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'title' => esc_html__( 'Instructor Settings', 'learnpress' ),\n+\t\t\t\t\t'id'    => 'lp_metabox_instructor_setting',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Instructor Per Page', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'instructor_per_page',\n+\t\t\t\t\t'default' => 12,\n+\t\t\t\t\t'type'    => 'number',\n+\t\t\t\t\t'desc'    => esc_html__( 'The number of displayed instructors per page (Enter -1 to display all sections).', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Show Admin on list', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'show_admin_on_list_instructors',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Show author Admin on list instructors.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t'id'   => 'lp_metabox_instructor_setting',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcurrencies.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcurrencies.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcurrencies.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcurrencies.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,176 +1,176 @@\n-\u003C?php\r\n-\u002F**\r\n- * List currencies.\r\n- *\r\n- * @retrun array\r\n- *\u002F\r\n-\r\n-$currencies = [\r\n-\t'AED' => __( 'United Arab Emirates dirham', 'learnpress' ),\r\n-\t'AFN' => __( 'Afghan afghani', 'learnpress' ),\r\n-\t'ALL' => __( 'Albanian lek', 'learnpress' ),\r\n-\t'AMD' => __( 'Armenian dram', 'learnpress' ),\r\n-\t'ANG' => __( 'Netherlands Antillean guilder', 'learnpress' ),\r\n-\t'AOA' => __( 'Angolan kwanza', 'learnpress' ),\r\n-\t'ARS' => __( 'Argentine peso', 'learnpress' ),\r\n-\t'AUD' => __( 'Australian dollar', 'learnpress' ),\r\n-\t'AWG' => __( 'Aruban florin', 'learnpress' ),\r\n-\t'AZN' => __( 'Azerbaijani manat', 'learnpress' ),\r\n-\t'BAM' => __( 'Bosnia and Herzegovina convertible mark', 'learnpress' ),\r\n-\t'BBD' => __( 'Barbadian dollar', 'learnpress' ),\r\n-\t'BDT' => __( 'Bangladeshi taka', 'learnpress' ),\r\n-\t'BGN' => __( 'Bulgarian lev', 'learnpress' ),\r\n-\t'BHD' => __( 'Bahraini dinar', 'learnpress' ),\r\n-\t'BIF' => __( 'Burundian franc', 'learnpress' ),\r\n-\t'BMD' => __( 'Bermudian dollar', 'learnpress' ),\r\n-\t'BND' => __( 'Brunei dollar', 'learnpress' ),\r\n-\t'BOB' => __( 'Bolivian boliviano', 'learnpress' ),\r\n-\t'BRL' => __( 'Brazilian real', 'learnpress' ),\r\n-\t'BSD' => __( 'Bahamian dollar', 'learnpress' ),\r\n-\t'BTC' => __( 'Bitcoin', 'learnpress' ),\r\n-\t'BTN' => __( 'Bhutanese ngultrum', 'learnpress' ),\r\n-\t'BWP' => __( 'Botswana pula', 'learnpress' ),\r\n-\t'BYR' => __( 'Belarusian ruble (old)', 'learnpress' ),\r\n-\t'BYN' => __( 'Belarusian ruble', 'learnpress' ),\r\n-\t'BZD' => __( 'Belize dollar', 'learnpress' ),\r\n-\t'CAD' => __( 'Canadian dollar', 'learnpress' ),\r\n-\t'CDF' => __( 'Congolese franc', 'learnpress' ),\r\n-\t'CHF' => __( 'Swiss franc', 'learnpress' ),\r\n-\t'CLP' => __( 'Chilean peso', 'learnpress' ),\r\n-\t'CNY' => __( 'Chinese yuan', 'learnpress' ),\r\n-\t'COP' => __( 'Colombian peso', 'learnpress' ),\r\n-\t'CRC' => __( 'Costa Rican col&oacute;n', 'learnpress' ),\r\n-\t'CUC' => __( 'Cuban convertible peso', 'learnpress' ),\r\n-\t'CUP' => __( 'Cuban peso', 'learnpress' ),\r\n-\t'CVE' => __( 'Cape Verdean escudo', 'learnpress' ),\r\n-\t'CZK' => __( 'Czech koruna', 'learnpress' ),\r\n-\t'DJF' => __( 'Djiboutian franc', 'learnpress' ),\r\n-\t'DKK' => __( 'Danish krone', 'learnpress' ),\r\n-\t'DOP' => __( 'Dominican peso', 'learnpress' ),\r\n-\t'DZD' => __( 'Algerian dinar', 'learnpress' ),\r\n-\t'EGP' => __( 'Egyptian pound', 'learnpress' ),\r\n-\t'ERN' => __( 'Eritrean nakfa', 'learnpress' ),\r\n-\t'ETB' => __( 'Ethiopian birr', 'learnpress' ),\r\n-\t'EUR' => __( 'Euro', 'learnpress' ),\r\n-\t'FJD' => __( 'Fijian dollar', 'learnpress' ),\r\n-\t'FKP' => __( 'Falkland Islands pound', 'learnpress' ),\r\n-\t'GBP' => __( 'Pound sterling', 'learnpress' ),\r\n-\t'GEL' => __( 'Georgian lari', 'learnpress' ),\r\n-\t'GGP' => __( 'Guernsey pound', 'learnpress' ),\r\n-\t'GHS' => __( 'Ghana cedi', 'learnpress' ),\r\n-\t'GIP' => __( 'Gibraltar pound', 'learnpress' ),\r\n-\t'GMD' => __( 'Gambian dalasi', 'learnpress' ),\r\n-\t'GNF' => __( 'Guinean franc', 'learnpress' ),\r\n-\t'GTQ' => __( 'Guatemalan quetzal', 'learnpress' ),\r\n-\t'GYD' => __( 'Guyanese dollar', 'learnpress' ),\r\n-\t'HKD' => __( 'Hong Kong dollar', 'learnpress' ),\r\n-\t'HNL' => __( 'Honduran lempira', 'learnpress' ),\r\n-\t'HRK' => __( 'Croatian kuna', 'learnpress' ),\r\n-\t'HTG' => __( 'Haitian gourde', 'learnpress' ),\r\n-\t'HUF' => __( 'Hungarian forint', 'learnpress' ),\r\n-\t'IDR' => __( 'Indonesian rupiah', 'learnpress' ),\r\n-\t'ILS' => __( 'Israeli new shekel', 'learnpress' ),\r\n-\t'IMP' => __( 'Manx pound', 'learnpress' ),\r\n-\t'INR' => __( 'Indian rupee', 'learnpress' ),\r\n-\t'IQD' => __( 'Iraqi dinar', 'learnpress' ),\r\n-\t'IRR' => __( 'Iranian rial', 'learnpress' ),\r\n-\t'IRT' => __( 'Iranian toman', 'learnpress' ),\r\n-\t'ISK' => __( 'Icelandic kr&oacute;na', 'learnpress' ),\r\n-\t'JEP' => __( 'Jersey pound', 'learnpress' ),\r\n-\t'JMD' => __( 'Jamaican dollar', 'learnpress' ),\r\n-\t'JOD' => __( 'Jordanian dinar', 'learnpress' ),\r\n-\t'JPY' => __( 'Japanese yen', 'learnpress' ),\r\n-\t'KES' => __( 'Kenyan shilling', 'learnpress' ),\r\n-\t'KGS' => __( 'Kyrgyzstani som', 'learnpress' ),\r\n-\t'KHR' => __( 'Cambodian riel', 'learnpress' ),\r\n-\t'KMF' => __( 'Comorian franc', 'learnpress' ),\r\n-\t'KPW' => __( 'North Korean won', 'learnpress' ),\r\n-\t'KRW' => __( 'South Korean won', 'learnpress' ),\r\n-\t'KWD' => __( 'Kuwaiti dinar', 'learnpress' ),\r\n-\t'KYD' => __( 'Cayman Islands dollar', 'learnpress' ),\r\n-\t'KZT' => __( 'Kazakhstani tenge', 'learnpress' ),\r\n-\t'LAK' => __( 'Lao kip', 'learnpress' ),\r\n-\t'LBP' => __( 'Lebanese pound', 'learnpress' ),\r\n-\t'LKR' => __( 'Sri Lankan rupee', 'learnpress' ),\r\n-\t'LRD' => __( 'Liberian dollar', 'learnpress' ),\r\n-\t'LSL' => __( 'Lesotho loti', 'learnpress' ),\r\n-\t'LYD' => __( 'Libyan dinar', 'learnpress' ),\r\n-\t'MAD' => __( 'Moroccan dirham', 'learnpress' ),\r\n-\t'MDL' => __( 'Moldovan leu', 'learnpress' ),\r\n-\t'MGA' => __( 'Malagasy ariary', 'learnpress' ),\r\n-\t'MKD' => __( 'Macedonian denar', 'learnpress' ),\r\n-\t'MMK' => __( 'Burmese kyat', 'learnpress' ),\r\n-\t'MNT' => __( 'Mongolian t&ouml;gr&ouml;g', 'learnpress' ),\r\n-\t'MOP' => __( 'Macanese pataca', 'learnpress' ),\r\n-\t'MRU' => __( 'Mauritanian ouguiya', 'learnpress' ),\r\n-\t'MUR' => __( 'Mauritian rupee', 'learnpress' ),\r\n-\t'MVR' => __( 'Maldivian rufiyaa', 'learnpress' ),\r\n-\t'MWK' => __( 'Malawian kwacha', 'learnpress' ),\r\n-\t'MXN' => __( 'Mexican peso', 'learnpress' ),\r\n-\t'MYR' => __( 'Malaysian ringgit', 'learnpress' ),\r\n-\t'MZN' => __( 'Mozambican metical', 'learnpress' ),\r\n-\t'NAD' => __( 'Namibian dollar', 'learnpress' ),\r\n-\t'NGN' => __( 'Nigerian naira', 'learnpress' ),\r\n-\t'NIO' => __( 'Nicaraguan c&oacute;rdoba', 'learnpress' ),\r\n-\t'NOK' => __( 'Norwegian krone', 'learnpress' ),\r\n-\t'NPR' => __( 'Nepalese rupee', 'learnpress' ),\r\n-\t'NZD' => __( 'New Zealand dollar', 'learnpress' ),\r\n-\t'OMR' => __( 'Omani rial', 'learnpress' ),\r\n-\t'PAB' => __( 'Panamanian balboa', 'learnpress' ),\r\n-\t'PEN' => __( 'Sol', 'learnpress' ),\r\n-\t'PGK' => __( 'Papua New Guinean kina', 'learnpress' ),\r\n-\t'PHP' => __( 'Philippine peso', 'learnpress' ),\r\n-\t'PKR' => __( 'Pakistani rupee', 'learnpress' ),\r\n-\t'PLN' => __( 'Polish z&#x142;oty', 'learnpress' ),\r\n-\t'PRB' => __( 'Transnistrian ruble', 'learnpress' ),\r\n-\t'PYG' => __( 'Paraguayan guaran&iacute;', 'learnpress' ),\r\n-\t'QAR' => __( 'Qatari riyal', 'learnpress' ),\r\n-\t'RON' => __( 'Romanian leu', 'learnpress' ),\r\n-\t'RSD' => __( 'Serbian dinar', 'learnpress' ),\r\n-\t'RUB' => __( 'Russian ruble', 'learnpress' ),\r\n-\t'RWF' => __( 'Rwandan franc', 'learnpress' ),\r\n-\t'SAR' => __( 'Saudi riyal', 'learnpress' ),\r\n-\t'SBD' => __( 'Solomon Islands dollar', 'learnpress' ),\r\n-\t'SCR' => __( 'Seychellois rupee', 'learnpress' ),\r\n-\t'SDG' => __( 'Sudanese pound', 'learnpress' ),\r\n-\t'SEK' => __( 'Swedish krona', 'learnpress' ),\r\n-\t'SGD' => __( 'Singapore dollar', 'learnpress' ),\r\n-\t'SHP' => __( 'Saint Helena pound', 'learnpress' ),\r\n-\t'SLL' => __( 'Sierra Leonean leone', 'learnpress' ),\r\n-\t'SOS' => __( 'Somali shilling', 'learnpress' ),\r\n-\t'SRD' => __( 'Surinamese dollar', 'learnpress' ),\r\n-\t'SSP' => __( 'South Sudanese pound', 'learnpress' ),\r\n-\t'STN' => __( 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe dobra', 'learnpress' ),\r\n-\t'SYP' => __( 'Syrian pound', 'learnpress' ),\r\n-\t'SZL' => __( 'Swazi lilangeni', 'learnpress' ),\r\n-\t'THB' => __( 'Thai baht', 'learnpress' ),\r\n-\t'TJS' => __( 'Tajikistani somoni', 'learnpress' ),\r\n-\t'TMT' => __( 'Turkmenistan manat', 'learnpress' ),\r\n-\t'TND' => __( 'Tunisian dinar', 'learnpress' ),\r\n-\t'TOP' => __( 'Tongan pa&#x2bb;anga', 'learnpress' ),\r\n-\t'TRY' => __( 'Turkish lira', 'learnpress' ),\r\n-\t'TTD' => __( 'Trinidad and Tobago dollar', 'learnpress' ),\r\n-\t'TWD' => __( 'New Taiwan dollar', 'learnpress' ),\r\n-\t'TZS' => __( 'Tanzanian shilling', 'learnpress' ),\r\n-\t'UAH' => __( 'Ukrainian hryvnia', 'learnpress' ),\r\n-\t'UGX' => __( 'Ugandan shilling', 'learnpress' ),\r\n-\t'USD' => __( 'United States (US) dollar', 'learnpress' ),\r\n-\t'UYU' => __( 'Uruguayan peso', 'learnpress' ),\r\n-\t'UZS' => __( 'Uzbekistani som', 'learnpress' ),\r\n-\t'VEF' => __( 'Venezuelan bol&iacute;var (2008–2018)', 'learnpress' ),\r\n-\t'VES' => __( 'Venezuelan bol&iacute;var', 'learnpress' ),\r\n-\t'VND' => __( 'Vietnamese &#x111;&#x1ed3;ng', 'learnpress' ),\r\n-\t'VUV' => __( 'Vanuatu vatu', 'learnpress' ),\r\n-\t'WST' => __( 'Samoan t&#x101;l&#x101;', 'learnpress' ),\r\n-\t'XAF' => __( 'Central African CFA franc', 'learnpress' ),\r\n-\t'XCD' => __( 'East Caribbean dollar', 'learnpress' ),\r\n-\t'XOF' => __( 'West African CFA franc', 'learnpress' ),\r\n-\t'XPF' => __( 'CFP franc', 'learnpress' ),\r\n-\t'YER' => __( 'Yemeni rial', 'learnpress' ),\r\n-\t'ZAR' => __( 'South African rand', 'learnpress' ),\r\n-\t'ZMW' => __( 'Zambian kwacha', 'learnpress' ),\r\n-];\r\n-\r\n-asort( $currencies );\r\n-\r\n-return apply_filters( 'learn-press\u002Fcurrencies', array_unique( $currencies ) );\r\n+\u003C?php\n+\u002F**\n+ * List currencies.\n+ *\n+ * @retrun array\n+ *\u002F\n+\n+$currencies = [\n+\t'AED' => __( 'United Arab Emirates dirham', 'learnpress' ),\n+\t'AFN' => __( 'Afghan afghani', 'learnpress' ),\n+\t'ALL' => __( 'Albanian lek', 'learnpress' ),\n+\t'AMD' => __( 'Armenian dram', 'learnpress' ),\n+\t'ANG' => __( 'Netherlands Antillean guilder', 'learnpress' ),\n+\t'AOA' => __( 'Angolan kwanza', 'learnpress' ),\n+\t'ARS' => __( 'Argentine peso', 'learnpress' ),\n+\t'AUD' => __( 'Australian dollar', 'learnpress' ),\n+\t'AWG' => __( 'Aruban florin', 'learnpress' ),\n+\t'AZN' => __( 'Azerbaijani manat', 'learnpress' ),\n+\t'BAM' => __( 'Bosnia and Herzegovina convertible mark', 'learnpress' ),\n+\t'BBD' => __( 'Barbadian dollar', 'learnpress' ),\n+\t'BDT' => __( 'Bangladeshi taka', 'learnpress' ),\n+\t'BGN' => __( 'Bulgarian lev', 'learnpress' ),\n+\t'BHD' => __( 'Bahraini dinar', 'learnpress' ),\n+\t'BIF' => __( 'Burundian franc', 'learnpress' ),\n+\t'BMD' => __( 'Bermudian dollar', 'learnpress' ),\n+\t'BND' => __( 'Brunei dollar', 'learnpress' ),\n+\t'BOB' => __( 'Bolivian boliviano', 'learnpress' ),\n+\t'BRL' => __( 'Brazilian real', 'learnpress' ),\n+\t'BSD' => __( 'Bahamian dollar', 'learnpress' ),\n+\t'BTC' => __( 'Bitcoin', 'learnpress' ),\n+\t'BTN' => __( 'Bhutanese ngultrum', 'learnpress' ),\n+\t'BWP' => __( 'Botswana pula', 'learnpress' ),\n+\t'BYR' => __( 'Belarusian ruble (old)', 'learnpress' ),\n+\t'BYN' => __( 'Belarusian ruble', 'learnpress' ),\n+\t'BZD' => __( 'Belize dollar', 'learnpress' ),\n+\t'CAD' => __( 'Canadian dollar', 'learnpress' ),\n+\t'CDF' => __( 'Congolese franc', 'learnpress' ),\n+\t'CHF' => __( 'Swiss franc', 'learnpress' ),\n+\t'CLP' => __( 'Chilean peso', 'learnpress' ),\n+\t'CNY' => __( 'Chinese yuan', 'learnpress' ),\n+\t'COP' => __( 'Colombian peso', 'learnpress' ),\n+\t'CRC' => __( 'Costa Rican col&oacute;n', 'learnpress' ),\n+\t'CUC' => __( 'Cuban convertible peso', 'learnpress' ),\n+\t'CUP' => __( 'Cuban peso', 'learnpress' ),\n+\t'CVE' => __( 'Cape Verdean escudo', 'learnpress' ),\n+\t'CZK' => __( 'Czech koruna', 'learnpress' ),\n+\t'DJF' => __( 'Djiboutian franc', 'learnpress' ),\n+\t'DKK' => __( 'Danish krone', 'learnpress' ),\n+\t'DOP' => __( 'Dominican peso', 'learnpress' ),\n+\t'DZD' => __( 'Algerian dinar', 'learnpress' ),\n+\t'EGP' => __( 'Egyptian pound', 'learnpress' ),\n+\t'ERN' => __( 'Eritrean nakfa', 'learnpress' ),\n+\t'ETB' => __( 'Ethiopian birr', 'learnpress' ),\n+\t'EUR' => __( 'Euro', 'learnpress' ),\n+\t'FJD' => __( 'Fijian dollar', 'learnpress' ),\n+\t'FKP' => __( 'Falkland Islands pound', 'learnpress' ),\n+\t'GBP' => __( 'Pound sterling', 'learnpress' ),\n+\t'GEL' => __( 'Georgian lari', 'learnpress' ),\n+\t'GGP' => __( 'Guernsey pound', 'learnpress' ),\n+\t'GHS' => __( 'Ghana cedi', 'learnpress' ),\n+\t'GIP' => __( 'Gibraltar pound', 'learnpress' ),\n+\t'GMD' => __( 'Gambian dalasi', 'learnpress' ),\n+\t'GNF' => __( 'Guinean franc', 'learnpress' ),\n+\t'GTQ' => __( 'Guatemalan quetzal', 'learnpress' ),\n+\t'GYD' => __( 'Guyanese dollar', 'learnpress' ),\n+\t'HKD' => __( 'Hong Kong dollar', 'learnpress' ),\n+\t'HNL' => __( 'Honduran lempira', 'learnpress' ),\n+\t'HRK' => __( 'Croatian kuna', 'learnpress' ),\n+\t'HTG' => __( 'Haitian gourde', 'learnpress' ),\n+\t'HUF' => __( 'Hungarian forint', 'learnpress' ),\n+\t'IDR' => __( 'Indonesian rupiah', 'learnpress' ),\n+\t'ILS' => __( 'Israeli new shekel', 'learnpress' ),\n+\t'IMP' => __( 'Manx pound', 'learnpress' ),\n+\t'INR' => __( 'Indian rupee', 'learnpress' ),\n+\t'IQD' => __( 'Iraqi dinar', 'learnpress' ),\n+\t'IRR' => __( 'Iranian rial', 'learnpress' ),\n+\t'IRT' => __( 'Iranian toman', 'learnpress' ),\n+\t'ISK' => __( 'Icelandic kr&oacute;na', 'learnpress' ),\n+\t'JEP' => __( 'Jersey pound', 'learnpress' ),\n+\t'JMD' => __( 'Jamaican dollar', 'learnpress' ),\n+\t'JOD' => __( 'Jordanian dinar', 'learnpress' ),\n+\t'JPY' => __( 'Japanese yen', 'learnpress' ),\n+\t'KES' => __( 'Kenyan shilling', 'learnpress' ),\n+\t'KGS' => __( 'Kyrgyzstani som', 'learnpress' ),\n+\t'KHR' => __( 'Cambodian riel', 'learnpress' ),\n+\t'KMF' => __( 'Comorian franc', 'learnpress' ),\n+\t'KPW' => __( 'North Korean won', 'learnpress' ),\n+\t'KRW' => __( 'South Korean won', 'learnpress' ),\n+\t'KWD' => __( 'Kuwaiti dinar', 'learnpress' ),\n+\t'KYD' => __( 'Cayman Islands dollar', 'learnpress' ),\n+\t'KZT' => __( 'Kazakhstani tenge', 'learnpress' ),\n+\t'LAK' => __( 'Lao kip', 'learnpress' ),\n+\t'LBP' => __( 'Lebanese pound', 'learnpress' ),\n+\t'LKR' => __( 'Sri Lankan rupee', 'learnpress' ),\n+\t'LRD' => __( 'Liberian dollar', 'learnpress' ),\n+\t'LSL' => __( 'Lesotho loti', 'learnpress' ),\n+\t'LYD' => __( 'Libyan dinar', 'learnpress' ),\n+\t'MAD' => __( 'Moroccan dirham', 'learnpress' ),\n+\t'MDL' => __( 'Moldovan leu', 'learnpress' ),\n+\t'MGA' => __( 'Malagasy ariary', 'learnpress' ),\n+\t'MKD' => __( 'Macedonian denar', 'learnpress' ),\n+\t'MMK' => __( 'Burmese kyat', 'learnpress' ),\n+\t'MNT' => __( 'Mongolian t&ouml;gr&ouml;g', 'learnpress' ),\n+\t'MOP' => __( 'Macanese pataca', 'learnpress' ),\n+\t'MRU' => __( 'Mauritanian ouguiya', 'learnpress' ),\n+\t'MUR' => __( 'Mauritian rupee', 'learnpress' ),\n+\t'MVR' => __( 'Maldivian rufiyaa', 'learnpress' ),\n+\t'MWK' => __( 'Malawian kwacha', 'learnpress' ),\n+\t'MXN' => __( 'Mexican peso', 'learnpress' ),\n+\t'MYR' => __( 'Malaysian ringgit', 'learnpress' ),\n+\t'MZN' => __( 'Mozambican metical', 'learnpress' ),\n+\t'NAD' => __( 'Namibian dollar', 'learnpress' ),\n+\t'NGN' => __( 'Nigerian naira', 'learnpress' ),\n+\t'NIO' => __( 'Nicaraguan c&oacute;rdoba', 'learnpress' ),\n+\t'NOK' => __( 'Norwegian krone', 'learnpress' ),\n+\t'NPR' => __( 'Nepalese rupee', 'learnpress' ),\n+\t'NZD' => __( 'New Zealand dollar', 'learnpress' ),\n+\t'OMR' => __( 'Omani rial', 'learnpress' ),\n+\t'PAB' => __( 'Panamanian balboa', 'learnpress' ),\n+\t'PEN' => __( 'Sol', 'learnpress' ),\n+\t'PGK' => __( 'Papua New Guinean kina', 'learnpress' ),\n+\t'PHP' => __( 'Philippine peso', 'learnpress' ),\n+\t'PKR' => __( 'Pakistani rupee', 'learnpress' ),\n+\t'PLN' => __( 'Polish z&#x142;oty', 'learnpress' ),\n+\t'PRB' => __( 'Transnistrian ruble', 'learnpress' ),\n+\t'PYG' => __( 'Paraguayan guaran&iacute;', 'learnpress' ),\n+\t'QAR' => __( 'Qatari riyal', 'learnpress' ),\n+\t'RON' => __( 'Romanian leu', 'learnpress' ),\n+\t'RSD' => __( 'Serbian dinar', 'learnpress' ),\n+\t'RUB' => __( 'Russian ruble', 'learnpress' ),\n+\t'RWF' => __( 'Rwandan franc', 'learnpress' ),\n+\t'SAR' => __( 'Saudi riyal', 'learnpress' ),\n+\t'SBD' => __( 'Solomon Islands dollar', 'learnpress' ),\n+\t'SCR' => __( 'Seychellois rupee', 'learnpress' ),\n+\t'SDG' => __( 'Sudanese pound', 'learnpress' ),\n+\t'SEK' => __( 'Swedish krona', 'learnpress' ),\n+\t'SGD' => __( 'Singapore dollar', 'learnpress' ),\n+\t'SHP' => __( 'Saint Helena pound', 'learnpress' ),\n+\t'SLL' => __( 'Sierra Leonean leone', 'learnpress' ),\n+\t'SOS' => __( 'Somali shilling', 'learnpress' ),\n+\t'SRD' => __( 'Surinamese dollar', 'learnpress' ),\n+\t'SSP' => __( 'South Sudanese pound', 'learnpress' ),\n+\t'STN' => __( 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe dobra', 'learnpress' ),\n+\t'SYP' => __( 'Syrian pound', 'learnpress' ),\n+\t'SZL' => __( 'Swazi lilangeni', 'learnpress' ),\n+\t'THB' => __( 'Thai baht', 'learnpress' ),\n+\t'TJS' => __( 'Tajikistani somoni', 'learnpress' ),\n+\t'TMT' => __( 'Turkmenistan manat', 'learnpress' ),\n+\t'TND' => __( 'Tunisian dinar', 'learnpress' ),\n+\t'TOP' => __( 'Tongan pa&#x2bb;anga', 'learnpress' ),\n+\t'TRY' => __( 'Turkish lira', 'learnpress' ),\n+\t'TTD' => __( 'Trinidad and Tobago dollar', 'learnpress' ),\n+\t'TWD' => __( 'New Taiwan dollar', 'learnpress' ),\n+\t'TZS' => __( 'Tanzanian shilling', 'learnpress' ),\n+\t'UAH' => __( 'Ukrainian hryvnia', 'learnpress' ),\n+\t'UGX' => __( 'Ugandan shilling', 'learnpress' ),\n+\t'USD' => __( 'United States (US) dollar', 'learnpress' ),\n+\t'UYU' => __( 'Uruguayan peso', 'learnpress' ),\n+\t'UZS' => __( 'Uzbekistani som', 'learnpress' ),\n+\t'VEF' => __( 'Venezuelan bol&iacute;var (2008–2018)', 'learnpress' ),\n+\t'VES' => __( 'Venezuelan bol&iacute;var', 'learnpress' ),\n+\t'VND' => __( 'Vietnamese &#x111;&#x1ed3;ng', 'learnpress' ),\n+\t'VUV' => __( 'Vanuatu vatu', 'learnpress' ),\n+\t'WST' => __( 'Samoan t&#x101;l&#x101;', 'learnpress' ),\n+\t'XAF' => __( 'Central African CFA franc', 'learnpress' ),\n+\t'XCD' => __( 'East Caribbean dollar', 'learnpress' ),\n+\t'XOF' => __( 'West African CFA franc', 'learnpress' ),\n+\t'XPF' => __( 'CFP franc', 'learnpress' ),\n+\t'YER' => __( 'Yemeni rial', 'learnpress' ),\n+\t'ZAR' => __( 'South African rand', 'learnpress' ),\n+\t'ZMW' => __( 'Zambian kwacha', 'learnpress' ),\n+];\n+\n+asort( $currencies );\n+\n+return apply_filters( 'learn-press\u002Fcurrencies', array_unique( $currencies ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcurrency-symbols.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcurrency-symbols.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fcurrency-symbols.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fcurrency-symbols.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,175 +1,175 @@\n-\u003C?php\r\n-\u002F**\r\n- * List currencies.\r\n- *\r\n- * @retrun array\r\n- *\u002F\r\n-\r\n-$currency_symbols = [\r\n-\t'AED' => '&#x62f;.&#x625;',\r\n-\t'AFN' => '&#x60b;',\r\n-\t'ALL' => 'L',\r\n-\t'AMD' => 'AMD',\r\n-\t'ANG' => '&fnof;',\r\n-\t'AOA' => 'Kz',\r\n-\t'ARS' => '&#36;',\r\n-\t'AUD' => '&#36;',\r\n-\t'AWG' => 'Afl.',\r\n-\t'AZN' => '&#8380;',\r\n-\t'BAM' => 'KM',\r\n-\t'BBD' => '&#36;',\r\n-\t'BDT' => '&#2547;&nbsp;',\r\n-\t'BGN' => '&#1083;&#1074;.',\r\n-\t'BHD' => '.&#x62f;.&#x628;',\r\n-\t'BIF' => 'Fr',\r\n-\t'BMD' => '&#36;',\r\n-\t'BND' => '&#36;',\r\n-\t'BOB' => 'Bs.',\r\n-\t'BRL' => '&#82;&#36;',\r\n-\t'BSD' => '&#36;',\r\n-\t'BTC' => '&#3647;',\r\n-\t'BTN' => 'Nu.',\r\n-\t'BWP' => 'P',\r\n-\t'BYR' => 'Br',\r\n-\t'BYN' => 'Br',\r\n-\t'BZD' => '&#36;',\r\n-\t'CAD' => '&#36;',\r\n-\t'CDF' => 'Fr',\r\n-\t'CHF' => '&#67;&#72;&#70;',\r\n-\t'CLP' => '&#36;',\r\n-\t'CNY' => '&yen;',\r\n-\t'COP' => '&#36;',\r\n-\t'CRC' => '&#x20a1;',\r\n-\t'CUC' => '&#36;',\r\n-\t'CUP' => '&#36;',\r\n-\t'CVE' => '&#36;',\r\n-\t'CZK' => '&#75;&#269;',\r\n-\t'DJF' => 'Fr',\r\n-\t'DKK' => 'kr.',\r\n-\t'DOP' => 'RD&#36;',\r\n-\t'DZD' => '&#x62f;.&#x62c;',\r\n-\t'EGP' => 'EGP',\r\n-\t'ERN' => 'Nfk',\r\n-\t'ETB' => 'Br',\r\n-\t'EUR' => '&euro;',\r\n-\t'FJD' => '&#36;',\r\n-\t'FKP' => '&pound;',\r\n-\t'GBP' => '&pound;',\r\n-\t'GEL' => '&#x20be;',\r\n-\t'GGP' => '&pound;',\r\n-\t'GHS' => '&#x20b5;',\r\n-\t'GIP' => '&pound;',\r\n-\t'GMD' => 'D',\r\n-\t'GNF' => 'Fr',\r\n-\t'GTQ' => 'Q',\r\n-\t'GYD' => '&#36;',\r\n-\t'HKD' => '&#36;',\r\n-\t'HNL' => 'L',\r\n-\t'HRK' => 'kn',\r\n-\t'HTG' => 'G',\r\n-\t'HUF' => '&#70;&#116;',\r\n-\t'IDR' => 'Rp',\r\n-\t'ILS' => '&#8362;',\r\n-\t'IMP' => '&pound;',\r\n-\t'INR' => '&#8377;',\r\n-\t'IQD' => '&#x62f;.&#x639;',\r\n-\t'IRR' => '&#xfdfc;',\r\n-\t'IRT' => '&#x062A;&#x0648;&#x0645;&#x0627;&#x0646;',\r\n-\t'ISK' => 'kr.',\r\n-\t'JEP' => '&pound;',\r\n-\t'JMD' => '&#36;',\r\n-\t'JOD' => '&#x62f;.&#x627;',\r\n-\t'JPY' => '&yen;',\r\n-\t'KES' => 'KSh',\r\n-\t'KGS' => '&#x441;&#x43e;&#x43c;',\r\n-\t'KHR' => '&#x17db;',\r\n-\t'KMF' => 'Fr',\r\n-\t'KPW' => '&#x20a9;',\r\n-\t'KRW' => '&#8361;',\r\n-\t'KWD' => '&#x62f;.&#x643;',\r\n-\t'KYD' => '&#36;',\r\n-\t'KZT' => '&#8376;',\r\n-\t'LAK' => '&#8365;',\r\n-\t'LBP' => '&#x644;.&#x644;',\r\n-\t'LKR' => '&#xdbb;&#xdd4;',\r\n-\t'LRD' => '&#36;',\r\n-\t'LSL' => 'L',\r\n-\t'LYD' => '&#x62f;.&#x644;',\r\n-\t'MAD' => '&#x62f;.&#x645;.',\r\n-\t'MDL' => 'MDL',\r\n-\t'MGA' => 'Ar',\r\n-\t'MKD' => '&#x434;&#x435;&#x43d;',\r\n-\t'MMK' => 'Ks',\r\n-\t'MNT' => '&#x20ae;',\r\n-\t'MOP' => 'P',\r\n-\t'MRU' => 'UM',\r\n-\t'MUR' => '&#x20a8;',\r\n-\t'MVR' => '.&#x783;',\r\n-\t'MWK' => 'MK',\r\n-\t'MXN' => '&#36;',\r\n-\t'MYR' => '&#82;&#77;',\r\n-\t'MZN' => 'MT',\r\n-\t'NAD' => 'N&#36;',\r\n-\t'NGN' => '&#8358;',\r\n-\t'NIO' => 'C&#36;',\r\n-\t'NOK' => '&#107;&#114;',\r\n-\t'NPR' => '&#8360;',\r\n-\t'NZD' => '&#36;',\r\n-\t'OMR' => '&#x631;.&#x639;.',\r\n-\t'PAB' => 'B\u002F.',\r\n-\t'PEN' => 'S\u002F',\r\n-\t'PGK' => 'K',\r\n-\t'PHP' => '&#8369;',\r\n-\t'PKR' => '&#8360;',\r\n-\t'PLN' => '&#122;&#322;',\r\n-\t'PRB' => '&#x440;.',\r\n-\t'PYG' => '&#8370;',\r\n-\t'QAR' => '&#x631;.&#x642;',\r\n-\t'RMB' => '&yen;',\r\n-\t'RON' => 'lei',\r\n-\t'RSD' => '&#1088;&#1089;&#1076;',\r\n-\t'RUB' => '&#8381;',\r\n-\t'RWF' => 'Fr',\r\n-\t'SAR' => '&#x631;.&#x633;',\r\n-\t'SBD' => '&#36;',\r\n-\t'SCR' => '&#x20a8;',\r\n-\t'SDG' => '&#x62c;.&#x633;.',\r\n-\t'SEK' => '&#107;&#114;',\r\n-\t'SGD' => '&#36;',\r\n-\t'SHP' => '&pound;',\r\n-\t'SLL' => 'Le',\r\n-\t'SOS' => 'Sh',\r\n-\t'SRD' => '&#36;',\r\n-\t'SSP' => '&pound;',\r\n-\t'STN' => 'Db',\r\n-\t'SYP' => '&#x644;.&#x633;',\r\n-\t'SZL' => 'E',\r\n-\t'THB' => '&#3647;',\r\n-\t'TJS' => '&#x405;&#x41c;',\r\n-\t'TMT' => 'm',\r\n-\t'TND' => '&#x62f;.&#x62a;',\r\n-\t'TOP' => 'T&#36;',\r\n-\t'TRY' => '&#8378;',\r\n-\t'TTD' => '&#36;',\r\n-\t'TWD' => '&#78;&#84;&#36;',\r\n-\t'TZS' => 'Sh',\r\n-\t'UAH' => '&#8372;',\r\n-\t'UGX' => 'UGX',\r\n-\t'USD' => '&#36;',\r\n-\t'UYU' => '&#36;',\r\n-\t'UZS' => 'UZS',\r\n-\t'VEF' => 'Bs F',\r\n-\t'VES' => 'Bs.',\r\n-\t'VND' => '&#8363;',\r\n-\t'VUV' => 'Vt',\r\n-\t'WST' => 'T',\r\n-\t'XAF' => 'CFA',\r\n-\t'XCD' => '&#36;',\r\n-\t'XOF' => 'CFA',\r\n-\t'XPF' => 'XPF',\r\n-\t'YER' => '&#xfdfc;',\r\n-\t'ZAR' => '&#82;',\r\n-\t'ZMW' => 'ZK',\r\n-];\r\n-\r\n-return apply_filters( 'learn-press\u002Fcurrency-symbols', $currency_symbols );\r\n+\u003C?php\n+\u002F**\n+ * List currencies.\n+ *\n+ * @retrun array\n+ *\u002F\n+\n+$currency_symbols = [\n+\t'AED' => '&#x62f;.&#x625;',\n+\t'AFN' => '&#x60b;',\n+\t'ALL' => 'L',\n+\t'AMD' => 'AMD',\n+\t'ANG' => '&fnof;',\n+\t'AOA' => 'Kz',\n+\t'ARS' => '&#36;',\n+\t'AUD' => '&#36;',\n+\t'AWG' => 'Afl.',\n+\t'AZN' => '&#8380;',\n+\t'BAM' => 'KM',\n+\t'BBD' => '&#36;',\n+\t'BDT' => '&#2547;&nbsp;',\n+\t'BGN' => '&#1083;&#1074;.',\n+\t'BHD' => '.&#x62f;.&#x628;',\n+\t'BIF' => 'Fr',\n+\t'BMD' => '&#36;',\n+\t'BND' => '&#36;',\n+\t'BOB' => 'Bs.',\n+\t'BRL' => '&#82;&#36;',\n+\t'BSD' => '&#36;',\n+\t'BTC' => '&#3647;',\n+\t'BTN' => 'Nu.',\n+\t'BWP' => 'P',\n+\t'BYR' => 'Br',\n+\t'BYN' => 'Br',\n+\t'BZD' => '&#36;',\n+\t'CAD' => '&#36;',\n+\t'CDF' => 'Fr',\n+\t'CHF' => '&#67;&#72;&#70;',\n+\t'CLP' => '&#36;',\n+\t'CNY' => '&yen;',\n+\t'COP' => '&#36;',\n+\t'CRC' => '&#x20a1;',\n+\t'CUC' => '&#36;',\n+\t'CUP' => '&#36;',\n+\t'CVE' => '&#36;',\n+\t'CZK' => '&#75;&#269;',\n+\t'DJF' => 'Fr',\n+\t'DKK' => 'kr.',\n+\t'DOP' => 'RD&#36;',\n+\t'DZD' => '&#x62f;.&#x62c;',\n+\t'EGP' => 'EGP',\n+\t'ERN' => 'Nfk',\n+\t'ETB' => 'Br',\n+\t'EUR' => '&euro;',\n+\t'FJD' => '&#36;',\n+\t'FKP' => '&pound;',\n+\t'GBP' => '&pound;',\n+\t'GEL' => '&#x20be;',\n+\t'GGP' => '&pound;',\n+\t'GHS' => '&#x20b5;',\n+\t'GIP' => '&pound;',\n+\t'GMD' => 'D',\n+\t'GNF' => 'Fr',\n+\t'GTQ' => 'Q',\n+\t'GYD' => '&#36;',\n+\t'HKD' => '&#36;',\n+\t'HNL' => 'L',\n+\t'HRK' => 'kn',\n+\t'HTG' => 'G',\n+\t'HUF' => '&#70;&#116;',\n+\t'IDR' => 'Rp',\n+\t'ILS' => '&#8362;',\n+\t'IMP' => '&pound;',\n+\t'INR' => '&#8377;',\n+\t'IQD' => '&#x62f;.&#x639;',\n+\t'IRR' => '&#xfdfc;',\n+\t'IRT' => '&#x062A;&#x0648;&#x0645;&#x0627;&#x0646;',\n+\t'ISK' => 'kr.',\n+\t'JEP' => '&pound;',\n+\t'JMD' => '&#36;',\n+\t'JOD' => '&#x62f;.&#x627;',\n+\t'JPY' => '&yen;',\n+\t'KES' => 'KSh',\n+\t'KGS' => '&#x441;&#x43e;&#x43c;',\n+\t'KHR' => '&#x17db;',\n+\t'KMF' => 'Fr',\n+\t'KPW' => '&#x20a9;',\n+\t'KRW' => '&#8361;',\n+\t'KWD' => '&#x62f;.&#x643;',\n+\t'KYD' => '&#36;',\n+\t'KZT' => '&#8376;',\n+\t'LAK' => '&#8365;',\n+\t'LBP' => '&#x644;.&#x644;',\n+\t'LKR' => '&#xdbb;&#xdd4;',\n+\t'LRD' => '&#36;',\n+\t'LSL' => 'L',\n+\t'LYD' => '&#x62f;.&#x644;',\n+\t'MAD' => '&#x62f;.&#x645;.',\n+\t'MDL' => 'MDL',\n+\t'MGA' => 'Ar',\n+\t'MKD' => '&#x434;&#x435;&#x43d;',\n+\t'MMK' => 'Ks',\n+\t'MNT' => '&#x20ae;',\n+\t'MOP' => 'P',\n+\t'MRU' => 'UM',\n+\t'MUR' => '&#x20a8;',\n+\t'MVR' => '.&#x783;',\n+\t'MWK' => 'MK',\n+\t'MXN' => '&#36;',\n+\t'MYR' => '&#82;&#77;',\n+\t'MZN' => 'MT',\n+\t'NAD' => 'N&#36;',\n+\t'NGN' => '&#8358;',\n+\t'NIO' => 'C&#36;',\n+\t'NOK' => '&#107;&#114;',\n+\t'NPR' => '&#8360;',\n+\t'NZD' => '&#36;',\n+\t'OMR' => '&#x631;.&#x639;.',\n+\t'PAB' => 'B\u002F.',\n+\t'PEN' => 'S\u002F',\n+\t'PGK' => 'K',\n+\t'PHP' => '&#8369;',\n+\t'PKR' => '&#8360;',\n+\t'PLN' => '&#122;&#322;',\n+\t'PRB' => '&#x440;.',\n+\t'PYG' => '&#8370;',\n+\t'QAR' => '&#x631;.&#x642;',\n+\t'RMB' => '&yen;',\n+\t'RON' => 'lei',\n+\t'RSD' => '&#1088;&#1089;&#1076;',\n+\t'RUB' => '&#8381;',\n+\t'RWF' => 'Fr',\n+\t'SAR' => '&#x631;.&#x633;',\n+\t'SBD' => '&#36;',\n+\t'SCR' => '&#x20a8;',\n+\t'SDG' => '&#x62c;.&#x633;.',\n+\t'SEK' => '&#107;&#114;',\n+\t'SGD' => '&#36;',\n+\t'SHP' => '&pound;',\n+\t'SLL' => 'Le',\n+\t'SOS' => 'Sh',\n+\t'SRD' => '&#36;',\n+\t'SSP' => '&pound;',\n+\t'STN' => 'Db',\n+\t'SYP' => '&#x644;.&#x633;',\n+\t'SZL' => 'E',\n+\t'THB' => '&#3647;',\n+\t'TJS' => '&#x405;&#x41c;',\n+\t'TMT' => 'm',\n+\t'TND' => '&#x62f;.&#x62a;',\n+\t'TOP' => 'T&#36;',\n+\t'TRY' => '&#8378;',\n+\t'TTD' => '&#36;',\n+\t'TWD' => '&#78;&#84;&#36;',\n+\t'TZS' => 'Sh',\n+\t'UAH' => '&#8372;',\n+\t'UGX' => 'UGX',\n+\t'USD' => '&#36;',\n+\t'UYU' => '&#36;',\n+\t'UZS' => 'UZS',\n+\t'VEF' => 'Bs F',\n+\t'VES' => 'Bs.',\n+\t'VND' => '&#8363;',\n+\t'VUV' => 'Vt',\n+\t'WST' => 'T',\n+\t'XAF' => 'CFA',\n+\t'XCD' => '&#36;',\n+\t'XOF' => 'CFA',\n+\t'XPF' => 'XPF',\n+\t'YER' => '&#xfdfc;',\n+\t'ZAR' => '&#82;',\n+\t'ZMW' => 'ZK',\n+];\n+\n+return apply_filters( 'learn-press\u002Fcurrency-symbols', $currency_symbols );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgateway\u002Foffline-payment.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgateway\u002Foffline-payment.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgateway\u002Foffline-payment.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgateway\u002Foffline-payment.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\u002F**\r\n- * Fields settings Offline Payment\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * @var LP_Gateway_Offline_Payment $lp_gateway_offline_payment\r\n- *\u002F\r\n-if ( ! isset( $lp_gateway_offline_payment ) ) {\r\n-\treturn [];\r\n-}\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fgateway-payment\u002Foffline-payment\u002Fsettings',\r\n-\tarray(\r\n-\t\tarray(\r\n-\t\t\t'type' => 'title',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => __( 'Enable', 'learnpress' ),\r\n-\t\t\t'id'      => '[enable]',\r\n-\t\t\t'default' => 'yes',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => __( 'Testing Mode', 'learnpress' ),\r\n-\t\t\t'id'      => '[sandbox]',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => __( 'Auto complete the order for testing purpose.', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => __( 'Instruction', 'learnpress' ),\r\n-\t\t\t'id'      => '[description]',\r\n-\t\t\t'default' => $lp_gateway_offline_payment->description,\r\n-\t\t\t'type'    => 'textarea',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Fields settings Offline Payment\n+ *\u002F\n+\n+\u002F**\n+ * @var LP_Gateway_Offline_Payment $lp_gateway_offline_payment\n+ *\u002F\n+if ( ! isset( $lp_gateway_offline_payment ) ) {\n+\treturn [];\n+}\n+\n+return apply_filters(\n+\t'learn-press\u002Fgateway-payment\u002Foffline-payment\u002Fsettings',\n+\tarray(\n+\t\tarray(\n+\t\t\t'type' => 'title',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => __( 'Enable', 'learnpress' ),\n+\t\t\t'id'      => '[enable]',\n+\t\t\t'default' => 'yes',\n+\t\t\t'type'    => 'checkbox',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => __( 'Testing Mode', 'learnpress' ),\n+\t\t\t'id'      => '[sandbox]',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => __( 'Auto complete the order for testing purpose.', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => __( 'Instruction', 'learnpress' ),\n+\t\t\t'id'      => '[description]',\n+\t\t\t'default' => $lp_gateway_offline_payment->description,\n+\t\t\t'type'    => 'textarea',\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgateway\u002Fpaypal.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgateway\u002Fpaypal.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgateway\u002Fpaypal.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgateway\u002Fpaypal.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\u002F**\r\n- * Fields settings PayPal Payment\r\n- *\u002F\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fgateway-payment\u002Fpaypal\u002Fsettings',\r\n-\tarray(\r\n-\t\tarray(\r\n-\t\t\t'type' => 'title',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Enable\u002FDisable', 'learnpress' ),\r\n-\t\t\t'id'      => '[enable]',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => esc_html__( 'Enable PayPal', 'learnpress' ),\r\n-\t\t),\r\n-\t\t\u002F*array(\r\n-\t\t\t'title' => esc_html__( 'PayPal email', 'learnpress' ),\r\n-\t\t\t'id'    => '[paypal_email]',\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'desc'  => esc_html__( 'The old standard will not be supported in 2023\u002F11\u002F30.', 'learnpress' ),\r\n-\t\t),*\u002F\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Sandbox mode', 'learnpress' ),\r\n-\t\t\t'id'      => '[paypal_sandbox]',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => esc_html__( 'Enable PayPal sandbox', 'learnpress' ),\r\n-\t\t),\r\n-\t\t\u002F*array(\r\n-\t\t\t'title' => esc_html__( 'Sandbox email address', 'learnpress' ),\r\n-\t\t\t'id'    => '[paypal_sandbox_email]',\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'desc'  => esc_html__( 'The old standard will not be supported in 2023\u002F11\u002F30.', 'learnpress' ),\r\n-\t\t),*\u002F\r\n-\t\t\u002F*array(\r\n-\t\t\t'title'   => esc_html__( 'Use PayPal REST API', 'learnpress' ),\r\n-\t\t\t'id'      => '[use_paypal_rest]',\r\n-\t\t\t'default' => 'yes',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => esc_html__( '(Recommendations)', 'learnpress' ),\r\n-\t\t),*\u002F\r\n-\t\tarray(\r\n-\t\t\t'title' => esc_html__( 'Client ID', 'learnpress' ),\r\n-\t\t\t'id'    => '[app_client_id]',\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'desc'  => sprintf(\r\n-\t\t\t\t__( 'How to get \u003Ca href=\"%s\" target=\"_blank\">Client ID\u003C\u002Fa>', 'learnpress' ),\r\n-\t\t\t\t'https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002F#link-getclientidandclientsecret'\r\n-\t\t\t),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title' => esc_html__( 'Client Secret', 'learnpress' ),\r\n-\t\t\t'id'    => '[app_client_secret]',\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'desc'  => sprintf(\r\n-\t\t\t\t__( 'How to get \u003Ca href=\"%s\" target=\"_blank\">Client Secret\u003C\u002Fa>', 'learnpress' ),\r\n-\t\t\t\t'https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002F#link-getclientidandclientsecret'\r\n-\t\t\t),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Fields settings PayPal Payment\n+ *\u002F\n+\n+return apply_filters(\n+\t'learn-press\u002Fgateway-payment\u002Fpaypal\u002Fsettings',\n+\tarray(\n+\t\tarray(\n+\t\t\t'type' => 'title',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Enable\u002FDisable', 'learnpress' ),\n+\t\t\t'id'      => '[enable]',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => esc_html__( 'Enable PayPal', 'learnpress' ),\n+\t\t),\n+\t\t\u002F*array(\n+\t\t\t'title' => esc_html__( 'PayPal email', 'learnpress' ),\n+\t\t\t'id'    => '[paypal_email]',\n+\t\t\t'type'  => 'text',\n+\t\t\t'desc'  => esc_html__( 'The old standard will not be supported in 2023\u002F11\u002F30.', 'learnpress' ),\n+\t\t),*\u002F\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Sandbox mode', 'learnpress' ),\n+\t\t\t'id'      => '[paypal_sandbox]',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => esc_html__( 'Enable PayPal sandbox', 'learnpress' ),\n+\t\t),\n+\t\t\u002F*array(\n+\t\t\t'title' => esc_html__( 'Sandbox email address', 'learnpress' ),\n+\t\t\t'id'    => '[paypal_sandbox_email]',\n+\t\t\t'type'  => 'text',\n+\t\t\t'desc'  => esc_html__( 'The old standard will not be supported in 2023\u002F11\u002F30.', 'learnpress' ),\n+\t\t),*\u002F\n+\t\t\u002F*array(\n+\t\t\t'title'   => esc_html__( 'Use PayPal REST API', 'learnpress' ),\n+\t\t\t'id'      => '[use_paypal_rest]',\n+\t\t\t'default' => 'yes',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => esc_html__( '(Recommendations)', 'learnpress' ),\n+\t\t),*\u002F\n+\t\tarray(\n+\t\t\t'title' => esc_html__( 'Client ID', 'learnpress' ),\n+\t\t\t'id'    => '[app_client_id]',\n+\t\t\t'type'  => 'text',\n+\t\t\t'desc'  => sprintf(\n+\t\t\t\t__( 'How to get \u003Ca href=\"%s\" target=\"_blank\">Client ID\u003C\u002Fa>', 'learnpress' ),\n+\t\t\t\t'https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002F#link-getclientidandclientsecret'\n+\t\t\t),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title' => esc_html__( 'Client Secret', 'learnpress' ),\n+\t\t\t'id'    => '[app_client_secret]',\n+\t\t\t'type'  => 'text',\n+\t\t\t'desc'  => sprintf(\n+\t\t\t\t__( 'How to get \u003Ca href=\"%s\" target=\"_blank\">Client Secret\u003C\u002Fa>', 'learnpress' ),\n+\t\t\t\t'https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002F#link-getclientidandclientsecret'\n+\t\t\t),\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgeneral.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgeneral.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fgeneral.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fgeneral.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,161 +1,168 @@\n-\u003C?php\r\n-$currencies = learn_press_currencies();\r\n-\r\n-foreach ( $currencies as $code => $name ) {\r\n-\t$currency_symbol     = learn_press_get_currency_symbol( $code );\r\n-\t$currencies[ $code ] = sprintf( '%s (%s) - %s', $name, $currency_symbol, $code );\r\n-}\r\n-\r\n-$data_struct_currency = [\r\n-\t'setting' => [\r\n-\t\t'plugins' => [],\r\n-\t],\r\n-];\r\n-\r\n-return apply_filters(\r\n-\t'learn-press\u002Fgeneral-settings-fields',\r\n-\tarray(\r\n-\t\tarray(\r\n-\t\t\t'title' => esc_html__( 'Pages setup', 'learnpress' ),\r\n-\t\t\t'type'  => 'title',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'All courses page', 'learnpress' ),\r\n-\t\t\t'id'      => 'courses_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'courses' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'All instructors page', 'learnpress' ),\r\n-\t\t\t'id'      => 'instructors_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'instructors' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Single instructor page', 'learnpress' ),\r\n-\t\t\t'id'      => 'single_instructor_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'single_instructor' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Profile page', 'learnpress' ),\r\n-\t\t\t'id'      => 'profile_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'profile' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Checkout page', 'learnpress' ),\r\n-\t\t\t'id'      => 'checkout_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'checkout' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Become an instructors page', 'learnpress' ),\r\n-\t\t\t'id'      => 'become_a_teacher_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'become_a_teacher' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Terms and conditions page', 'learnpress' ),\r\n-\t\t\t'id'      => 'term_conditions_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'value'   => learn_press_get_page_id( 'term_conditions' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Logout Redirect', 'learnpress' ),\r\n-\t\t\t'id'      => 'logout_redirect_page_id',\r\n-\t\t\t'default' => '',\r\n-\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t'desc'    => __( 'The page where the user will be redirected to after logging out.', 'learnpress' ),\r\n-\t\t\t'value'   => learn_press_get_page_id( 'logout_redirect' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title' => esc_html__( 'Currency', 'learnpress' ),\r\n-\t\t\t'type'  => 'title',\r\n-\t\t\t'desc'  => esc_html__( 'Setting up your currency unit and its formatting.', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'             => esc_html__( 'Currency', 'learnpress' ),\r\n-\t\t\t'id'                => 'currency',\r\n-\t\t\t'default'           => 'USD',\r\n-\t\t\t'type'              => 'select',\r\n-\t\t\t'class'             => 'lp-tom-select',\r\n-\t\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_currency ) ) ],\r\n-\t\t\t'options'           => $currencies,\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Currency position', 'learnpress' ),\r\n-\t\t\t'desc_tip' => esc_html__( 'This controls the position of the currency symbol.', 'learnpress' ),\r\n-\t\t\t'id'       => 'currency_pos',\r\n-\t\t\t'default'  => 'left',\r\n-\t\t\t'type'     => 'select',\r\n-\t\t\t'options'  => learn_press_currency_positions(),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Thousands separator', 'learnpress' ),\r\n-\t\t\t'desc_tip' => esc_html__( 'This sets the thousands separator of displayed prices.', 'learnpress' ),\r\n-\t\t\t'id'       => 'thousands_separator',\r\n-\t\t\t'default'  => ',',\r\n-\t\t\t'type'     => 'text',\r\n-\t\t\t'css'      => 'min-width: 50px; width: 50px;',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Decimal separator', 'learnpress' ),\r\n-\t\t\t'desc_tip' => esc_html__( 'This sets the decimal separator of displayed prices.', 'learnpress' ),\r\n-\t\t\t'id'       => 'decimals_separator',\r\n-\t\t\t'default'  => '.',\r\n-\t\t\t'type'     => 'text',\r\n-\t\t\t'css'      => 'min-width: 50px; width: 50px;',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'The number of decimals', 'learnpress' ),\r\n-\t\t\t'desc_tip' => esc_html__( 'This sets the number of decimal points shown in the displayed prices.', 'learnpress' ),\r\n-\t\t\t'id'       => 'number_of_decimals',\r\n-\t\t\t'default'  => '2',\r\n-\t\t\t'type'     => 'number',\r\n-\t\t\t'css'      => 'width: 50px;',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title' => esc_html__( 'Other', 'learnpress' ),\r\n-\t\t\t'type'  => 'title',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'    => esc_html__( 'Publish profile', 'learnpress' ),\r\n-\t\t\t'id'       => 'publish_profile',\r\n-\t\t\t'default'  => 'no',\r\n-\t\t\t'type'     => 'checkbox',\r\n-\t\t\t'desc_tip' => esc_html__( 'This option will add a sub-item \\\"Privacy\\\" under the Setting tab on the Profile page. If users want to publish or hide their course, or quiz tab when other users visit their profile page, they need to enable\u002Fdisable that option in the Privacy section.', 'learnpress' ),\r\n-\t\t\t'desc'     => __( 'Public all user profile pages (only the overview tab).', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Instructor registration', 'learnpress' ),\r\n-\t\t\t'desc'    => esc_html__( 'Enable the option in all registration forms.', 'learnpress' ),\r\n-\t\t\t'id'      => 'instructor_registration',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Store IP Guest to handle checkout', 'learnpress' ),\r\n-\t\t\t'desc'    => esc_html__( 'Enable the option, IP of client is identifier user instead $_COOKIE', 'learnpress' ),\r\n-\t\t\t'id'      => 'store_ip_customer_session',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+$currencies = learn_press_currencies();\n+\n+foreach ( $currencies as $code => $name ) {\n+\t$currency_symbol     = learn_press_get_currency_symbol( $code );\n+\t$currencies[ $code ] = sprintf( '%s (%s) - %s', $name, $currency_symbol, $code );\n+}\n+\n+$data_struct_currency = [\n+\t'setting' => [\n+\t\t'plugins' => [],\n+\t],\n+];\n+\n+return apply_filters(\n+\t'learn-press\u002Fgeneral-settings-fields',\n+\tarray(\n+\t\tarray(\n+\t\t\t'title' => esc_html__( 'Pages setup', 'learnpress' ),\n+\t\t\t'type'  => 'title',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'All courses page', 'learnpress' ),\n+\t\t\t'id'      => 'courses_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'courses' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'All instructors page', 'learnpress' ),\n+\t\t\t'id'      => 'instructors_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'instructors' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Single instructor page', 'learnpress' ),\n+\t\t\t'id'      => 'single_instructor_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'single_instructor' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Profile page', 'learnpress' ),\n+\t\t\t'id'      => 'profile_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'profile' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Checkout page', 'learnpress' ),\n+\t\t\t'id'      => 'checkout_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'checkout' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Become an instructors page', 'learnpress' ),\n+\t\t\t'id'      => 'become_a_teacher_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'become_a_teacher' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Terms and conditions page', 'learnpress' ),\n+\t\t\t'id'      => 'term_conditions_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'value'   => learn_press_get_page_id( 'term_conditions' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Logout Redirect', 'learnpress' ),\n+\t\t\t'id'      => 'logout_redirect_page_id',\n+\t\t\t'default' => '',\n+\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t'desc'    => __( 'The page where the user will be redirected to after logging out.', 'learnpress' ),\n+\t\t\t'value'   => learn_press_get_page_id( 'logout_redirect' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title' => esc_html__( 'Currency', 'learnpress' ),\n+\t\t\t'type'  => 'title',\n+\t\t\t'desc'  => esc_html__( 'Setting up your currency unit and its formatting.', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'             => esc_html__( 'Currency', 'learnpress' ),\n+\t\t\t'id'                => 'currency',\n+\t\t\t'default'           => 'USD',\n+\t\t\t'type'              => 'select',\n+\t\t\t'class'             => 'lp-tom-select',\n+\t\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_currency ) ) ],\n+\t\t\t'options'           => $currencies,\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Currency position', 'learnpress' ),\n+\t\t\t'desc_tip' => esc_html__( 'This controls the position of the currency symbol.', 'learnpress' ),\n+\t\t\t'id'       => 'currency_pos',\n+\t\t\t'default'  => 'left',\n+\t\t\t'type'     => 'select',\n+\t\t\t'options'  => learn_press_currency_positions(),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Thousands separator', 'learnpress' ),\n+\t\t\t'desc_tip' => esc_html__( 'This sets the thousands separator of displayed prices.', 'learnpress' ),\n+\t\t\t'id'       => 'thousands_separator',\n+\t\t\t'default'  => ',',\n+\t\t\t'type'     => 'text',\n+\t\t\t'css'      => 'min-width: 50px; width: 50px;',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Decimal separator', 'learnpress' ),\n+\t\t\t'desc_tip' => esc_html__( 'This sets the decimal separator of displayed prices.', 'learnpress' ),\n+\t\t\t'id'       => 'decimals_separator',\n+\t\t\t'default'  => '.',\n+\t\t\t'type'     => 'text',\n+\t\t\t'css'      => 'min-width: 50px; width: 50px;',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'The number of decimals', 'learnpress' ),\n+\t\t\t'desc_tip' => esc_html__( 'This sets the number of decimal points shown in the displayed prices.', 'learnpress' ),\n+\t\t\t'id'       => 'number_of_decimals',\n+\t\t\t'default'  => '2',\n+\t\t\t'type'     => 'number',\n+\t\t\t'css'      => 'width: 50px;',\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title' => esc_html__( 'Other', 'learnpress' ),\n+\t\t\t'type'  => 'title',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'    => esc_html__( 'Publish profile', 'learnpress' ),\n+\t\t\t'id'       => 'publish_profile',\n+\t\t\t'default'  => 'no',\n+\t\t\t'type'     => 'checkbox',\n+\t\t\t'desc_tip' => esc_html__( 'This option will add a sub-item \\\"Privacy\\\" under the Setting tab on the Profile page. If users want to publish or hide their course, or quiz tab when other users visit their profile page, they need to enable\u002Fdisable that option in the Privacy section.', 'learnpress' ),\n+\t\t\t'desc'     => __( 'Public all user profile pages (only the overview tab).', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Redirect Instructors to Course Builder', 'learnpress' ),\n+\t\t\t'desc'    => esc_html__( 'When enabled, Instructors will be redirected to Course Builder when trying to access wp-admin. Administrators are not affected.', 'learnpress' ),\n+\t\t\t'id'      => 'hide_instructor_access_admin_screen',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Instructor registration', 'learnpress' ),\n+\t\t\t'desc'    => esc_html__( 'Enable the option in all registration forms.', 'learnpress' ),\n+\t\t\t'id'      => 'instructor_registration',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Store IP Guest to handle checkout', 'learnpress' ),\n+\t\t\t'desc'    => esc_html__( 'Enable the option, IP of client is identifier user instead $_COOKIE', 'learnpress' ),\n+\t\t\t'id'      => 'store_ip_customer_session',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fmcp.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fmcp.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fmcp.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fmcp.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Setting tab MCP.\r\n- *\u002F\r\n-\r\n-return apply_filters(\r\n-\t'learn_press_mcp_settings',\r\n-\tarray(\r\n-\t\tarray(\r\n-\t\t\t'type'  => 'title',\r\n-\t\t\t'title' => esc_html__( 'MCP Integration', 'learnpress' ),\r\n-\t\t\t'id'    => 'lp_metabox_mcp_general',\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'title'   => esc_html__( 'Enable MCP Integration', 'learnpress' ),\r\n-\t\t\t'id'      => 'enable_mcp_integration',\r\n-\t\t\t'default' => 'no',\r\n-\t\t\t'type'    => 'checkbox',\r\n-\t\t\t'desc'    => sprintf(\r\n-\t\t\t\t\u002F* translators: %s: MCP documentation URL. *\u002F\r\n-\t\t\t\t__(\r\n-\t\t\t\t\t'Enable Model Context Protocol integration for AI-powered LMS operations. Review all AI actions before executing. \u003Ca href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more\u003C\u002Fa>.',\r\n-\t\t\t\t\t'learnpress'\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_url( 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002Flearnpress-developer-documentation\u002Fmodel-context-protocol-mcp-integration\u002F' )\r\n-\t\t\t),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'type' => 'sectionend',\r\n-\t\t\t'id'   => 'lp_metabox_mcp_general',\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Setting tab MCP.\n+ *\u002F\n+\n+return apply_filters(\n+\t'learn_press_mcp_settings',\n+\tarray(\n+\t\tarray(\n+\t\t\t'type'  => 'title',\n+\t\t\t'title' => esc_html__( 'MCP Integration', 'learnpress' ),\n+\t\t\t'id'    => 'lp_metabox_mcp_general',\n+\t\t),\n+\t\tarray(\n+\t\t\t'title'   => esc_html__( 'Enable MCP Integration', 'learnpress' ),\n+\t\t\t'id'      => 'enable_mcp_integration',\n+\t\t\t'default' => 'no',\n+\t\t\t'type'    => 'checkbox',\n+\t\t\t'desc'    => sprintf(\n+\t\t\t\t\u002F* translators: %s: MCP documentation URL. *\u002F\n+\t\t\t\t__(\n+\t\t\t\t\t'Enable Model Context Protocol integration for AI-powered LMS operations. Review all AI actions before executing. \u003Ca href=\"%s\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more\u003C\u002Fa>.',\n+\t\t\t\t\t'learnpress'\n+\t\t\t\t),\n+\t\t\t\tesc_url( 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002Flearnpress-developer-documentation\u002Fmodel-context-protocol-mcp-integration\u002F' )\n+\t\t\t),\n+\t\t),\n+\t\tarray(\n+\t\t\t'type' => 'sectionend',\n+\t\t\t'id'   => 'lp_metabox_mcp_general',\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,127 +1,127 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prompt to create a course\r\n- *\u002F\r\n-if ( ! isset( $params ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F\u002F Course Intent\r\n-$role_persona     = $params['role_persona'] ?? '';\r\n-$target_audience  = $params['target_audience'] ?? 'Beginners';\r\n-$course_objective = $params['course_objective'] ?? '';\r\n-\r\n-\u002F\u002F AI Settings\r\n-$language        = $params['language'] ?? 'English';\r\n-$tone            = $params['tone'] ?? '';\r\n-$lesson_length   = $params['lessons_title_length'] ?? 300;\r\n-$reading_level   = $params['reading_level'] ?? 'High school';\r\n-$seo_emphasis    = $params['seo_emphasis'] ?? '';\r\n-$target_keywords = $params['target_keywords'] ?? '';\r\n-\r\n-\u002F\u002F Course Structure\r\n-$sections             = $params['section_number'] ?? 1;\r\n-$section_title_length = $params['section_title_length'] ?? 60;\r\n-$section_desc_length  = $params['section_desc_length'] ?? 160;\r\n-$lessons_per_section  = $params['lessons_per_section'] ?? 1;\r\n-$lesson_title_length  = $params['lesson_title_length'] ?? 60;\r\n-$quizzes_per_section  = $params['quizzes_per_section'] ?? 0;\r\n-$quiz_title_length    = $params['quiz_title_length'] ?? 60;\r\n-$questions_per_quiz   = $params['questions_per_quiz'] ?? 0;\r\n-\r\n-$quiz_structure_requirements = '';\r\n-$quiz_json_example           = '';\r\n-if ( $quizzes_per_section > 0 ) {\r\n-\t$quiz_structure_requirements = \u003C\u003C\u003CXML\r\n-        \u003Cquiz_requirements>\r\n-            - Each section MUST contain exactly **{$quizzes_per_section}** quiz object(s) within a \"quizzes\" array.\r\n-            - Each quiz MUST have a relevant \"quiz_title\" and \"quiz_description\".\r\n-            - Each quiz MUST contain exactly **{$questions_per_quiz}** question object(s) in a \"questions\" array.\r\n-            - Each question must be multiple-choice, testing concepts from the lessons in THAT SAME section.\r\n-            - Each question object MUST contain: \"question_title\", \"question_description\", \"options\" (an array of 4 strings), and \"correct_answer\" (a string matching one of the options).\r\n-        \u003C\u002Fquiz_requirements>\r\n-XML;\r\n-\r\n-\t$quiz_json_example = ',' . \u003C\u003C\u003CJSON\r\n-        \"quizzes\": [\r\n-          {\r\n-            \"quiz_title\": \"Quiz Title Here\",\r\n-            \"quiz_description\": \"Brief description of the quiz...\",\r\n-            \"questions\": [\r\n-              {\r\n-                \"question_title\": \"Question title here...\",\r\n-                \"question_description\": \"Question description task here...\",\r\n-                \"options\": [\"Option A\", \"Option B\", \"Correct Option\", \"Option D\"],\r\n-                \"correct_answer\": \"Correct Option\"\r\n-              }\r\n-            ]\r\n-          }\r\n-        ]\r\n-JSON;\r\n-}\r\n-\r\n-return \u003C\u003C\u003CXML\r\n-\u003Cprompt>\r\n-    \u003Crole_definition>\r\n-        You are an AI assistant specialized in instructional design and content creation. Your persona for this task is: **$role_persona**.\r\n-    \u003C\u002Frole_definition>\r\n-\r\n-    \u003Ccourse_context>\r\n-        \u003Cobjective>\r\n-            The primary goal of this course is: $course_objective\r\n-        \u003C\u002Fobjective>\r\n-        \u003Caudience>\r\n-            The target audience is: $target_audience\r\n-        \u003C\u002Faudience>\r\n-        \u003Ccontent_parameters>\r\n-            \u003Clanguage>$language\u003C\u002Flanguage>\r\n-            \u003Ctone>$tone\u003C\u002Ftone>\r\n-            \u003Creading_level>$reading_level\u003C\u002Freading_level>\r\n-        \u003C\u002Fcontent_parameters>\r\n-        \u003Cseo_parameters>\r\n-            \u003Cemphasis>$seo_emphasis\u003C\u002Femphasis>\r\n-            \u003Ckeywords>$target_keywords\u003C\u002Fkeywords>\r\n-        \u003C\u002Fseo_parameters>\r\n-    \u003C\u002Fcourse_context>\r\n-\r\n-    \u003Ctask_instructions>\r\n-        Your main task is to generate a complete, well-structured, and engaging online course based on all the provided context.\r\n-\r\n-        \u003Cstructure_requirements>\r\n-            - The course MUST have a compelling \"course_title\" and a concise \"course_description\".\r\n-            - The \"course_description\" must be between 200 and 1000 words, content have html like list, heading h3, paragraph to make content easy to read and eye-catching, and include one image with tag \u003Cimage> on the content.\r\n-            - The course MUST be divided into exactly **$sections** section(s).\r\n-            - \"section_title\" values MUST be concise, relevant, and no longer than **$section_title_length** characters.\r\n-            - \"section_description\" values MUST be concise, relevant, and no longer than **$section_desc_length** characters.\r\n-            - Each section MUST contain a relevant \"section_title\" and exactly **$lessons_per_section** lesson(s).\r\n-            - Each lesson MUST have a \"lesson_title\" and detailed \"lesson_description\".\r\n-            - \"lesson_title\" values MUST be concise, relevant, and no longer than **$lesson_title_length** characters.\r\n-        \u003C\u002Fstructure_requirements>\r\n-        $quiz_structure_requirements\r\n-    \u003C\u002Ftask_instructions>\r\n-\r\n-    \u003Coutput_format>\r\n-        - You MUST respond with ONLY a single, valid JSON object.\r\n-        - Do not include any introductory text, explanations, or markdown code fences like ```json.\r\n-        - The JSON structure must strictly follow this example:\r\n-        \u003Cjson_example>\r\n-\t\t\t{\r\n-\t\t\t  \"course_title\": \"Compelling Course Title Here\",\r\n-\t\t\t  \"course_description\": \"A brief summary of the course.\",\r\n-\t\t\t  \"sections\": [\r\n-\t\t\t    {\r\n-\t\t\t      \"section_title\": \"Section 1 Title Here\",\r\n-\t\t\t      \"section_description\": \"Section 1 description Here\",\r\n-\t\t\t      \"lessons\": [\r\n-\t\t\t        {\r\n-\t\t\t          \"lesson_title\": \"Lesson 1.1 Title Here\",\r\n-\t\t\t          \"lesson_description\": \"Detailed content for lesson 1.1...\"\r\n-\t\t\t        }\r\n-\t\t\t      ]$quiz_json_example\r\n-\t\t\t    }\r\n-\t\t\t  ]\r\n-\t\t\t}\r\n-        \u003C\u002Fjson_example>\r\n-    \u003C\u002Foutput_format>\r\n-\u003C\u002Fprompt>\r\n-XML;\r\n+\u003C?php\n+\u002F**\n+ * Prompt to create a course\n+ *\u002F\n+if ( ! isset( $params ) ) {\n+\treturn;\n+}\n+\n+\u002F\u002F Course Intent\n+$role_persona     = $params['role_persona'] ?? '';\n+$target_audience  = $params['target_audience'] ?? 'Beginners';\n+$course_objective = $params['course_objective'] ?? '';\n+\n+\u002F\u002F AI Settings\n+$language        = $params['language'] ?? 'English';\n+$tone            = $params['tone'] ?? '';\n+$lesson_length   = $params['lessons_title_length'] ?? 300;\n+$reading_level   = $params['reading_level'] ?? 'High school';\n+$seo_emphasis    = $params['seo_emphasis'] ?? '';\n+$target_keywords = $params['target_keywords'] ?? '';\n+\n+\u002F\u002F Course Structure\n+$sections             = $params['section_number'] ?? 1;\n+$section_title_length = $params['section_title_length'] ?? 60;\n+$section_desc_length  = $params['section_desc_length'] ?? 160;\n+$lessons_per_section  = $params['lessons_per_section'] ?? 1;\n+$lesson_title_length  = $params['lesson_title_length'] ?? 60;\n+$quizzes_per_section  = $params['quizzes_per_section'] ?? 0;\n+$quiz_title_length    = $params['quiz_title_length'] ?? 60;\n+$questions_per_quiz   = $params['questions_per_quiz'] ?? 0;\n+\n+$quiz_structure_requirements = '';\n+$quiz_json_example           = '';\n+if ( $quizzes_per_section > 0 ) {\n+\t$quiz_structure_requirements = \u003C\u003C\u003CXML\n+        \u003Cquiz_requirements>\n+            - Each section MUST contain exactly **{$quizzes_per_section}** quiz object(s) within a \"quizzes\" array.\n+            - Each quiz MUST have a relevant \"quiz_title\" and \"quiz_description\".\n+            - Each quiz MUST contain exactly **{$questions_per_quiz}** question object(s) in a \"questions\" array.\n+            - Each question must be multiple-choice, testing concepts from the lessons in THAT SAME section.\n+            - Each question object MUST contain: \"question_title\", \"question_description\", \"options\" (an array of 4 strings), and \"correct_answer\" (a string matching one of the options).\n+        \u003C\u002Fquiz_requirements>\n+XML;\n+\n+\t$quiz_json_example = ',' . \u003C\u003C\u003CJSON\n+        \"quizzes\": [\n+          {\n+            \"quiz_title\": \"Quiz Title Here\",\n+            \"quiz_description\": \"Brief description of the quiz...\",\n+            \"questions\": [\n+              {\n+                \"question_title\": \"Question title here...\",\n+                \"question_description\": \"Question description task here...\",\n+                \"options\": [\"Option A\", \"Option B\", \"Correct Option\", \"Option D\"],\n+                \"correct_answer\": \"Correct Option\"\n+              }\n+            ]\n+          }\n+        ]\n+JSON;\n+}\n+\n+return \u003C\u003C\u003CXML\n+\u003Cprompt>\n+    \u003Crole_definition>\n+        You are an AI assistant specialized in instructional design and content creation. Your persona for this task is: **$role_persona**.\n+    \u003C\u002Frole_definition>\n+\n+    \u003Ccourse_context>\n+        \u003Cobjective>\n+            The primary goal of this course is: $course_objective\n+        \u003C\u002Fobjective>\n+        \u003Caudience>\n+            The target audience is: $target_audience\n+        \u003C\u002Faudience>\n+        \u003Ccontent_parameters>\n+            \u003Clanguage>$language\u003C\u002Flanguage>\n+            \u003Ctone>$tone\u003C\u002Ftone>\n+            \u003Creading_level>$reading_level\u003C\u002Freading_level>\n+        \u003C\u002Fcontent_parameters>\n+        \u003Cseo_parameters>\n+            \u003Cemphasis>$seo_emphasis\u003C\u002Femphasis>\n+            \u003Ckeywords>$target_keywords\u003C\u002Fkeywords>\n+        \u003C\u002Fseo_parameters>\n+    \u003C\u002Fcourse_context>\n+\n+    \u003Ctask_instructions>\n+        Your main task is to generate a complete, well-structured, and engaging online course based on all the provided context.\n+\n+        \u003Cstructure_requirements>\n+            - The course MUST have a compelling \"course_title\" and a concise \"course_description\".\n+            - The \"course_description\" must be between 200 and 1000 words, content have html like list, heading h3, paragraph to make content easy to read and eye-catching, and include one image with tag \u003Cimage> on the content.\n+            - The course MUST be divided into exactly **$sections** section(s).\n+            - \"section_title\" values MUST be concise, relevant, and no longer than **$section_title_length** characters.\n+            - \"section_description\" values MUST be concise, relevant, and no longer than **$section_desc_length** characters.\n+            - Each section MUST contain a relevant \"section_title\" and exactly **$lessons_per_section** lesson(s).\n+            - Each lesson MUST have a \"lesson_title\" and detailed \"lesson_description\".\n+            - \"lesson_title\" values MUST be concise, relevant, and no longer than **$lesson_title_length** characters.\n+        \u003C\u002Fstructure_requirements>\n+        $quiz_structure_requirements\n+    \u003C\u002Ftask_instructions>\n+\n+    \u003Coutput_format>\n+        - You MUST respond with ONLY a single, valid JSON object.\n+        - Do not include any introductory text, explanations, or markdown code fences like ```json.\n+        - The JSON structure must strictly follow this example:\n+        \u003Cjson_example>\n+\t\t\t{\n+\t\t\t  \"course_title\": \"Compelling Course Title Here\",\n+\t\t\t  \"course_description\": \"A brief summary of the course.\",\n+\t\t\t  \"sections\": [\n+\t\t\t    {\n+\t\t\t      \"section_title\": \"Section 1 Title Here\",\n+\t\t\t      \"section_description\": \"Section 1 description Here\",\n+\t\t\t      \"lessons\": [\n+\t\t\t        {\n+\t\t\t          \"lesson_title\": \"Lesson 1.1 Title Here\",\n+\t\t\t          \"lesson_description\": \"Detailed content for lesson 1.1...\"\n+\t\t\t        }\n+\t\t\t      ]$quiz_json_example\n+\t\t\t    }\n+\t\t\t  ]\n+\t\t\t}\n+        \u003C\u002Fjson_example>\n+    \u003C\u002Foutput_format>\n+\u003C\u002Fprompt>\n+XML;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-description-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-description-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-description-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-description-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prompt to create a course\r\n- *\u002F\r\n-if ( ! isset( $params ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F\u002F Course Intent\r\n-$title            = $params['post-title'] ?? '';\r\n-$topic            = $params['topic'] ?? '';\r\n-$goal             = $params['goals'] ?? '';\r\n-$course_objective = trim( $params['course_objective'] ?? '' );\r\n-\r\n-\u002F\u002F AI Settings\r\n-$language = $params['language'] ?? 'English';\r\n-$audience = $params['audience'] ?? 'Students';\r\n-$tone     = $params['tone'] ?? 'analytical';\r\n-$length   = $params['length'] ?? 1000;\r\n-$outputs  = $params['outputs'] ?? 1;\r\n-\r\n-return \u003C\u003C\u003CXML\r\n-\u003Cprompt>\r\n-    \u003Ccourse_context>\r\n-        \u003Caudience>\r\n-            The target audience is: $audience\r\n-        \u003C\u002Faudience>\r\n-        \u003Ccontent_parameters>\r\n-            \u003Clanguage>$language\u003C\u002Flanguage>\r\n-            \u003Ctone>$tone\u003C\u002Ftone>\r\n-        \u003C\u002Fcontent_parameters>\r\n-    \u003C\u002Fcourse_context>\r\n-\r\n-    \u003Ctask_instructions>\r\n-        You are an expert course description creator.\r\n-\t\tCreate a course description directly based on the following:\r\n-\t\tCourse Title: {$title}\r\n-\t\tTopic: {$topic}\r\n-\t\tParagraph number: 1\r\n-\t\tGoal: Course about Subject \"$title\", content have html like list, heading h3, paragraph to make content easy to read and eye-catching.\r\n-\r\n-        \u003Cstructure_requirements>\r\n-\t\t\t- The description must be between 200 and {$length} words, and include one image on the content.\r\n-        \t- Generate EXACTLY **{$outputs}** course description(s) in a JSON array.\r\n-            - Each item MUST contain a relevant \"item\".\r\n-        \u003C\u002Fstructure_requirements>\r\n-    \u003C\u002Ftask_instructions>\r\n-\r\n-    \u003Coutput_format>\r\n-        - You MUST respond valid JSON array object.\r\n-        - Do not include any introductory text, explanations, or markdown code fences like ```json.\r\n-        - The JSON structure must strictly follow this example:\r\n-        \u003Cjson_example>\r\n-\t\t\t{\r\n-\t\t\t\t\"results\": [\r\n-\t\t\t\t\t{ \"item\": \"Compelling Course Description Here\" },\r\n-\t\t\t\t\t{ \"item\": \"Another Engaging Description\" }\r\n-\t\t\t\t]\r\n-\t\t\t}\r\n-        \u003C\u002Fjson_example>\r\n-    \u003C\u002Foutput_format>\r\n-\u003C\u002Fprompt>\r\n-XML;\r\n+\u003C?php\n+\u002F**\n+ * Prompt to create a course\n+ *\u002F\n+if ( ! isset( $params ) ) {\n+\treturn;\n+}\n+\n+\u002F\u002F Course Intent\n+$title            = $params['post-title'] ?? '';\n+$topic            = $params['topic'] ?? '';\n+$goal             = $params['goals'] ?? '';\n+$course_objective = trim( $params['course_objective'] ?? '' );\n+\n+\u002F\u002F AI Settings\n+$language = $params['language'] ?? 'English';\n+$audience = $params['audience'] ?? 'Students';\n+$tone     = $params['tone'] ?? 'analytical';\n+$length   = $params['length'] ?? 1000;\n+$outputs  = $params['outputs'] ?? 1;\n+\n+return \u003C\u003C\u003CXML\n+\u003Cprompt>\n+    \u003Ccourse_context>\n+        \u003Caudience>\n+            The target audience is: $audience\n+        \u003C\u002Faudience>\n+        \u003Ccontent_parameters>\n+            \u003Clanguage>$language\u003C\u002Flanguage>\n+            \u003Ctone>$tone\u003C\u002Ftone>\n+        \u003C\u002Fcontent_parameters>\n+    \u003C\u002Fcourse_context>\n+\n+    \u003Ctask_instructions>\n+        You are an expert course description creator.\n+\t\tCreate a course description directly based on the following:\n+\t\tCourse Title: {$title}\n+\t\tTopic: {$topic}\n+\t\tParagraph number: 1\n+\t\tGoal: Course about Subject \"$title\", content have html like list, heading h3, paragraph to make content easy to read and eye-catching.\n+\n+        \u003Cstructure_requirements>\n+\t\t\t- The description must be between 200 and {$length} words, and include one image on the content.\n+        \t- Generate EXACTLY **{$outputs}** course description(s) in a JSON array.\n+            - Each item MUST contain a relevant \"item\".\n+        \u003C\u002Fstructure_requirements>\n+    \u003C\u002Ftask_instructions>\n+\n+    \u003Coutput_format>\n+        - You MUST respond valid JSON array object.\n+        - Do not include any introductory text, explanations, or markdown code fences like ```json.\n+        - The JSON structure must strictly follow this example:\n+        \u003Cjson_example>\n+\t\t\t{\n+\t\t\t\t\"results\": [\n+\t\t\t\t\t{ \"item\": \"Compelling Course Description Here\" },\n+\t\t\t\t\t{ \"item\": \"Another Engaging Description\" }\n+\t\t\t\t]\n+\t\t\t}\n+        \u003C\u002Fjson_example>\n+    \u003C\u002Foutput_format>\n+\u003C\u002Fprompt>\n+XML;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-image-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-image-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-image-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-image-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prompt to create a course\r\n- *\u002F\r\n-if ( ! isset( $params ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$model_type = LP_Settings::get_option( 'open_ai_image_model_type', 'gpt-image-1' );\r\n-\r\n-\u002F\u002F Course Intent\r\n-$title    = wp_trim_words( $params['post-title'] ?? '', 100 );\r\n-$language = $params['language'] ?? 'English';\r\n-$quality  = $params['quality'] ?? 'auto';\r\n-\u002F\u002F$size     = $params['size'] ?? '256x256';\r\n-\u002F\u002F$outputs  = $params['outputs'] ?? 1;\r\n-$style = $params['style'] ?? 'Impressionism';\r\n-$goal  = wp_trim_words( $params['goal'] ?? '', 850 );\r\n-\r\n-$main_subject = ! empty( $goal ) ? \"The main subject of the image must be: $goal.\" : '';\r\n-$title        = ! empty( $title ) ? \"The image should be inspired by the course title: $title.\" : '';\r\n-\r\n-\u002F**\r\n- *A text description of the desired image(s).\r\n- * The maximum length is 32000 characters for gpt-image-1,\r\n- * 1000 characters for dall-e-2\r\n- * and 4000 characters for dall-e-3.\r\n- *\u002F\r\n-\r\n-return \u003C\u003C\u003CPROMPT\r\n-Create a feature image for an online course. With the following details:\r\n-$main_subject\r\n-$title\r\n-\r\n-The desired artistic style is: $style.\r\n-PROMPT;\r\n+\u003C?php\n+\u002F**\n+ * Prompt to create a course\n+ *\u002F\n+if ( ! isset( $params ) ) {\n+\treturn;\n+}\n+\n+$model_type = LP_Settings::get_option( 'open_ai_image_model_type', 'gpt-image-1' );\n+\n+\u002F\u002F Course Intent\n+$title    = wp_trim_words( $params['post-title'] ?? '', 100 );\n+$language = $params['language'] ?? 'English';\n+$quality  = $params['quality'] ?? 'auto';\n+\u002F\u002F$size     = $params['size'] ?? '256x256';\n+\u002F\u002F$outputs  = $params['outputs'] ?? 1;\n+$style = $params['style'] ?? 'Impressionism';\n+$goal  = wp_trim_words( $params['goal'] ?? '', 850 );\n+\n+$main_subject = ! empty( $goal ) ? \"The main subject of the image must be: $goal.\" : '';\n+$title        = ! empty( $title ) ? \"The image should be inspired by the course title: $title.\" : '';\n+\n+\u002F**\n+ *A text description of the desired image(s).\n+ * The maximum length is 32000 characters for gpt-image-1,\n+ * 1000 characters for dall-e-2\n+ * and 4000 characters for dall-e-3.\n+ *\u002F\n+\n+return \u003C\u003C\u003CPROMPT\n+Create a feature image for an online course. With the following details:\n+$main_subject\n+$title\n+\n+The desired artistic style is: $style.\n+PROMPT;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-title-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-title-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-title-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-create-title-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prompt to create a course\r\n- *\u002F\r\n-if ( ! isset( $params ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F\u002F Course Intent\r\n-$topic            = $params['topic'] ?? '';\r\n-$goal             = $params['goals'] ?? '';\r\n-$course_objective = trim( $params['course_objective'] ?? '' );\r\n-\r\n-\u002F\u002F AI Settings\r\n-$language = $params['language'] ?? 'English';\r\n-$audience = $params['audience'] ?? 'Students';\r\n-$tone     = $params['tone'] ?? 'analytical';\r\n-$length   = $params['length'] ?? 60;\r\n-$outputs   = $params['outputs'] ?? 1;\r\n-\r\n-return \u003C\u003C\u003CXML\r\n-\u003Cprompt>\r\n-    \u003Ccourse_context>\r\n-        \u003Caudience>\r\n-            The target audience is: $audience\r\n-        \u003C\u002Faudience>\r\n-        \u003Ccontent_parameters>\r\n-            \u003Clanguage>$language\u003C\u002Flanguage>\r\n-            \u003Ctone>$tone\u003C\u002Ftone>\r\n-        \u003C\u002Fcontent_parameters>\r\n-    \u003C\u002Fcourse_context>\r\n-\r\n-    \u003Ctask_instructions>\r\n-        You are an expert course title creator.\r\n-\t\tCreate a concise, compelling course title with the following details:\r\n-\t\t- Topic: {$topic}\r\n-\t\t- Goal: {$goal}\r\n-\r\n-        \u003Cstructure_requirements>\r\n-\t\t\t- The title must not exceed {$length} characters.\r\n-        \t- Generate EXACTLY **{$outputs}** course title(s) in a JSON array.\r\n-        \u003C\u002Fstructure_requirements>\r\n-    \u003C\u002Ftask_instructions>\r\n-\r\n-    \u003Coutput_format>\r\n-        - You MUST respond valid JSON array object.\r\n-        - Do not include any introductory text, explanations, or markdown code fences like ```json.\r\n-        - The JSON structure must strictly follow this example:\r\n-        \u003Cjson_example>\r\n-\t\t\t{\r\n-\t\t\t\t\"results\": [\r\n-\t\t\t\t\t{ \"item\": \"Compelling Course Title Here\" },\r\n-\t\t\t\t\t{ \"item\": \"Another Engaging Title\" }\r\n-\t\t\t\t]\r\n-\t\t\t}\r\n-        \u003C\u002Fjson_example>\r\n-    \u003C\u002Foutput_format>\r\n-\u003C\u002Fprompt>\r\n-XML;\r\n+\u003C?php\n+\u002F**\n+ * Prompt to create a course\n+ *\u002F\n+if ( ! isset( $params ) ) {\n+\treturn;\n+}\n+\n+\u002F\u002F Course Intent\n+$topic            = $params['topic'] ?? '';\n+$goal             = $params['goals'] ?? '';\n+$course_objective = trim( $params['course_objective'] ?? '' );\n+\n+\u002F\u002F AI Settings\n+$language = $params['language'] ?? 'English';\n+$audience = $params['audience'] ?? 'Students';\n+$tone     = $params['tone'] ?? 'analytical';\n+$length   = $params['length'] ?? 60;\n+$outputs   = $params['outputs'] ?? 1;\n+\n+return \u003C\u003C\u003CXML\n+\u003Cprompt>\n+    \u003Ccourse_context>\n+        \u003Caudience>\n+            The target audience is: $audience\n+        \u003C\u002Faudience>\n+        \u003Ccontent_parameters>\n+            \u003Clanguage>$language\u003C\u002Flanguage>\n+            \u003Ctone>$tone\u003C\u002Ftone>\n+        \u003C\u002Fcontent_parameters>\n+    \u003C\u002Fcourse_context>\n+\n+    \u003Ctask_instructions>\n+        You are an expert course title creator.\n+\t\tCreate a concise, compelling course title with the following details:\n+\t\t- Topic: {$topic}\n+\t\t- Goal: {$goal}\n+\n+        \u003Cstructure_requirements>\n+\t\t\t- The title must not exceed {$length} characters.\n+        \t- Generate EXACTLY **{$outputs}** course title(s) in a JSON array.\n+        \u003C\u002Fstructure_requirements>\n+    \u003C\u002Ftask_instructions>\n+\n+    \u003Coutput_format>\n+        - You MUST respond valid JSON array object.\n+        - Do not include any introductory text, explanations, or markdown code fences like ```json.\n+        - The JSON structure must strictly follow this example:\n+        \u003Cjson_example>\n+\t\t\t{\n+\t\t\t\t\"results\": [\n+\t\t\t\t\t{ \"item\": \"Compelling Course Title Here\" },\n+\t\t\t\t\t{ \"item\": \"Another Engaging Title\" }\n+\t\t\t\t]\n+\t\t\t}\n+        \u003C\u002Fjson_example>\n+    \u003C\u002Foutput_format>\n+\u003C\u002Fprompt>\n+XML;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-curriculum-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-curriculum-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-curriculum-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002FopenAi\u002Fprompt-curriculum-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,124 +1,124 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prompt to create a course\r\n- *\u002F\r\n-if ( ! isset( $params ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F\u002F Course Intent\r\n-$title            = $params['post-title'] ?? '';\r\n-$description      = $params['post-content'] ?? '';\r\n-$target_audience  = $params['target_audience'] ?? 'Beginners';\r\n-$course_objective = trim( $params['course_objective'] ?? '' );\r\n-\r\n-\u002F\u002F AI Settings\r\n-$language        = trim( $params['language'] ?? 'English' );\r\n-$tone            = trim( $params['tone'] ?? 'Informative and encouraging' );\r\n-$reading_level   = trim( $params['reading_level'] ?? 'High school' );\r\n-$target_keywords = trim( $params['target_keywords'] ?? '' );\r\n-\r\n-$goal                       = $params['goal'] ?? '';\r\n-$sections                   = $params['section_number'] ?? 3;\r\n-$section_title_length       = $params['section_title_length'] ?? 60;\r\n-$section_description_length = $params['section_description_length'] ?? 160;\r\n-$lessons_per_section        = $params['lessons_per_section'] ?? 5;\r\n-$lesson_title_length        = $params['lesson_title_length'] ?? 60;\r\n-$lesson_desc_length         = $params['lesson_desc_length'] ?? 1000;\r\n-$quizzes_per_section        = $params['quizzes_per_section'] ?? 1;\r\n-$quiz_title_length          = $params['quiz_title_length'] ?? 60;\r\n-$questions_per_quiz         = $params['questions_per_quiz'] ?? 2;\r\n-\r\n-$quiz_structure_requirements = '';\r\n-$quiz_json_example           = '';\r\n-if ( $quizzes_per_section > 0 ) {\r\n-\t$quiz_structure_requirements = \u003C\u003C\u003CXML\r\n-        \u003Cquiz_requirements>\r\n-            - Each section MUST contain exactly **{$quizzes_per_section}** quiz object(s) within a \"quizzes\" array.\r\n-            - Each quiz MUST have a relevant \"quiz_title\" and \"quiz_description\".\r\n-            - Each \"quiz_title\" approximately {$quiz_title_length} characters.\r\n-            - Each quiz MUST contain exactly **{$questions_per_quiz}** question object(s) in a \"questions\" array.\r\n-            - Each question must be multiple-choice, testing concepts from the lessons in THAT SAME section.\r\n-            - Each question object MUST contain: \"question_title\", \"question_description\", \"options\" (an array of 4 strings), and \"correct_answer\" (a string matching one of the options).\r\n-        \u003C\u002Fquiz_requirements>\r\n-XML;\r\n-\r\n-\t$quiz_json_example = ',' . \u003C\u003C\u003CJSON\r\n-        \"quizzes\": [\r\n-          {\r\n-            \"quiz_title\": \"Quiz Title Here\",\r\n-            \"quiz_description\": \"Brief description of the quiz...\",\r\n-            \"questions\": [\r\n-              {\r\n-                \"question_title\": \"Question title here...\",\r\n-                \"question_description\": \"Question description task here...\",\r\n-                \"options\": [\"Option A\", \"Option B\", \"Correct Option\", \"Option D\"],\r\n-                \"correct_answer\": \"Correct Option\"\r\n-              }\r\n-            ]\r\n-          }\r\n-        ]\r\n-JSON;\r\n-}\r\n-\r\n-return \u003C\u003C\u003CXML\r\n-\u003Cprompt>\r\n-    \u003Crole_definition>\r\n-        You are an AI assistant specialized in instructional design and content creation.\r\n-    \u003C\u002Frole_definition>\r\n-\r\n-    \u003Ccourse_context>\r\n-        \u003Cobjective>\r\n-            The primary goal of this structure course is:\r\n-            inspired by the course title: \"$title\",\r\n-            also reflect the course's content: \"$description\"\r\n-        \u003C\u002Fobjective>\r\n-        \u003Caudience>\r\n-            The target audience is: $target_audience\r\n-        \u003C\u002Faudience>\r\n-        \u003Ccontent_parameters>\r\n-            \u003Clanguage>$language\u003C\u002Flanguage>\r\n-            \u003Ctone>$tone\u003C\u002Ftone>\r\n-            \u003Creading_level>$reading_level\u003C\u002Freading_level>\r\n-        \u003C\u002Fcontent_parameters>\r\n-    \u003C\u002Fcourse_context>\r\n-\r\n-    \u003Ctask_instructions>\r\n-        Your main task is to generate a complete, well-structured, and engaging online course based on all the provided context.\r\n-\r\n-        \u003Cstructure_requirements>\r\n-            - The goal of course is {$goal}\r\n-            - The course MUST be divided into exactly **$sections** section(s).\r\n-            - Each \"section_title\" approximately {$section_title_length} characters.\r\n-            - Each \"section_description\" approximately {$section_description_length} characters.\r\n-            - Each section MUST contain a relevant \"section_title\" and exactly **$lessons_per_section** lesson(s).\r\n-            - Each lesson MUST have a \"lesson_title\" and detailed \"lesson_description\".\r\n-            - \"lesson_title\" values MUST be concise, relevant, and no longer than **$lesson_title_length** characters.\r\n-            - \"lesson_description\" values MUST be concise, relevant, and no longer than **$lesson_desc_length** characters.\r\n-        \u003C\u002Fstructure_requirements>\r\n-        $quiz_structure_requirements\r\n-    \u003C\u002Ftask_instructions>\r\n-\r\n-    \u003Coutput_format>\r\n-        - You MUST respond with ONLY a single, valid JSON object.\r\n-        - Do not include any introductory text, explanations, or markdown code fences like ```json.\r\n-        - The JSON structure must strictly follow this example:\r\n-        \u003Cjson_example>\r\n-\t\t\t{\r\n-\t\t\t  \"sections\": [\r\n-\t\t\t    {\r\n-\t\t\t      \"section_title\": \"Section 1 Title Here\",\r\n-\t\t\t      \"section_description\": \"Section 1 description Here\",\r\n-\t\t\t      \"lessons\": [\r\n-\t\t\t        {\r\n-\t\t\t          \"lesson_title\": \"Lesson 1.1 Title Here\",\r\n-\t\t\t          \"lesson_description\": \"Detailed content for lesson 1.1...\"\r\n-\t\t\t        }\r\n-\t\t\t      ]$quiz_json_example\r\n-\t\t\t    }\r\n-\t\t\t  ]\r\n-\t\t\t}\r\n-        \u003C\u002Fjson_example>\r\n-    \u003C\u002Foutput_format>\r\n-\u003C\u002Fprompt>\r\n-XML;\r\n+\u003C?php\n+\u002F**\n+ * Prompt to create a course\n+ *\u002F\n+if ( ! isset( $params ) ) {\n+\treturn;\n+}\n+\n+\u002F\u002F Course Intent\n+$title            = $params['post-title'] ?? '';\n+$description      = $params['post-content'] ?? '';\n+$target_audience  = $params['target_audience'] ?? 'Beginners';\n+$course_objective = trim( $params['course_objective'] ?? '' );\n+\n+\u002F\u002F AI Settings\n+$language        = trim( $params['language'] ?? 'English' );\n+$tone            = trim( $params['tone'] ?? 'Informative and encouraging' );\n+$reading_level   = trim( $params['reading_level'] ?? 'High school' );\n+$target_keywords = trim( $params['target_keywords'] ?? '' );\n+\n+$goal                       = $params['goal'] ?? '';\n+$sections                   = $params['section_number'] ?? 3;\n+$section_title_length       = $params['section_title_length'] ?? 60;\n+$section_description_length = $params['section_description_length'] ?? 160;\n+$lessons_per_section        = $params['lessons_per_section'] ?? 5;\n+$lesson_title_length        = $params['lesson_title_length'] ?? 60;\n+$lesson_desc_length         = $params['lesson_desc_length'] ?? 1000;\n+$quizzes_per_section        = $params['quizzes_per_section'] ?? 1;\n+$quiz_title_length          = $params['quiz_title_length'] ?? 60;\n+$questions_per_quiz         = $params['questions_per_quiz'] ?? 2;\n+\n+$quiz_structure_requirements = '';\n+$quiz_json_example           = '';\n+if ( $quizzes_per_section > 0 ) {\n+\t$quiz_structure_requirements = \u003C\u003C\u003CXML\n+        \u003Cquiz_requirements>\n+            - Each section MUST contain exactly **{$quizzes_per_section}** quiz object(s) within a \"quizzes\" array.\n+            - Each quiz MUST have a relevant \"quiz_title\" and \"quiz_description\".\n+            - Each \"quiz_title\" approximately {$quiz_title_length} characters.\n+            - Each quiz MUST contain exactly **{$questions_per_quiz}** question object(s) in a \"questions\" array.\n+            - Each question must be multiple-choice, testing concepts from the lessons in THAT SAME section.\n+            - Each question object MUST contain: \"question_title\", \"question_description\", \"options\" (an array of 4 strings), and \"correct_answer\" (a string matching one of the options).\n+        \u003C\u002Fquiz_requirements>\n+XML;\n+\n+\t$quiz_json_example = ',' . \u003C\u003C\u003CJSON\n+        \"quizzes\": [\n+          {\n+            \"quiz_title\": \"Quiz Title Here\",\n+            \"quiz_description\": \"Brief description of the quiz...\",\n+            \"questions\": [\n+              {\n+                \"question_title\": \"Question title here...\",\n+                \"question_description\": \"Question description task here...\",\n+                \"options\": [\"Option A\", \"Option B\", \"Correct Option\", \"Option D\"],\n+                \"correct_answer\": \"Correct Option\"\n+              }\n+            ]\n+          }\n+        ]\n+JSON;\n+}\n+\n+return \u003C\u003C\u003CXML\n+\u003Cprompt>\n+    \u003Crole_definition>\n+        You are an AI assistant specialized in instructional design and content creation.\n+    \u003C\u002Frole_definition>\n+\n+    \u003Ccourse_context>\n+        \u003Cobjective>\n+            The primary goal of this structure course is:\n+            inspired by the course title: \"$title\",\n+            also reflect the course's content: \"$description\"\n+        \u003C\u002Fobjective>\n+        \u003Caudience>\n+            The target audience is: $target_audience\n+        \u003C\u002Faudience>\n+        \u003Ccontent_parameters>\n+            \u003Clanguage>$language\u003C\u002Flanguage>\n+            \u003Ctone>$tone\u003C\u002Ftone>\n+            \u003Creading_level>$reading_level\u003C\u002Freading_level>\n+        \u003C\u002Fcontent_parameters>\n+    \u003C\u002Fcourse_context>\n+\n+    \u003Ctask_instructions>\n+        Your main task is to generate a complete, well-structured, and engaging online course based on all the provided context.\n+\n+        \u003Cstructure_requirements>\n+            - The goal of course is {$goal}\n+            - The course MUST be divided into exactly **$sections** section(s).\n+            - Each \"section_title\" approximately {$section_title_length} characters.\n+            - Each \"section_description\" approximately {$section_description_length} characters.\n+            - Each section MUST contain a relevant \"section_title\" and exactly **$lessons_per_section** lesson(s).\n+            - Each lesson MUST have a \"lesson_title\" and detailed \"lesson_description\".\n+            - \"lesson_title\" values MUST be concise, relevant, and no longer than **$lesson_title_length** characters.\n+            - \"lesson_description\" values MUST be concise, relevant, and no longer than **$lesson_desc_length** characters.\n+        \u003C\u002Fstructure_requirements>\n+        $quiz_structure_requirements\n+    \u003C\u002Ftask_instructions>\n+\n+    \u003Coutput_format>\n+        - You MUST respond with ONLY a single, valid JSON object.\n+        - Do not include any introductory text, explanations, or markdown code fences like ```json.\n+        - The JSON structure must strictly follow this example:\n+        \u003Cjson_example>\n+\t\t\t{\n+\t\t\t  \"sections\": [\n+\t\t\t    {\n+\t\t\t      \"section_title\": \"Section 1 Title Here\",\n+\t\t\t      \"section_description\": \"Section 1 description Here\",\n+\t\t\t      \"lessons\": [\n+\t\t\t        {\n+\t\t\t          \"lesson_title\": \"Lesson 1.1 Title Here\",\n+\t\t\t          \"lesson_description\": \"Detailed content for lesson 1.1...\"\n+\t\t\t        }\n+\t\t\t      ]$quiz_json_example\n+\t\t\t    }\n+\t\t\t  ]\n+\t\t\t}\n+        \u003C\u002Fjson_example>\n+    \u003C\u002Foutput_format>\n+\u003C\u002Fprompt>\n+XML;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fopen-ai-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fopen-ai-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fopen-ai-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fopen-ai-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,134 +1,134 @@\n-\u003C?php\r\n-return apply_filters(\r\n-\t'lp\u002Fsettings\u002Fopen-ai',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fsingle',\r\n-\t\t\t[\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => esc_html__( 'Open AI', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => esc_html__( 'Enable Open AI', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'enable_open_ai',\r\n-\t\t\t\t\t'default' => 'no',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Enable this option and enter your OpenAI Secret key below to activate the feature.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Secret key', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_secret_key',\r\n-\t\t\t\t\t'default' => '',\r\n-\t\t\t\t\t'type'    => 'textarea',\r\n-\t\t\t\t\t'desc'    => sprintf(\r\n-\t\t\t\t\t\u002F* translators: 1. profile url *\u002F\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'Get your Open AI secret key from \u003Ca href=\"%1$s\" target=\"_blank\">here\u003C\u002Fa>.\r\n-                            Read more guide from \u003Ca href=\"%2$s\" target=\"_blank\">here\u003C\u002Fa>.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'https:\u002F\u002Fplatform.openai.com\u002Faccount\u002Fapi-keys',\r\n-\t\t\t\t\t\t'https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fquickstart'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Text Model Type', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_text_model_type',\r\n-\t\t\t\t\t'default' => 'gpt-4.1',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'gpt-5.2'                => esc_html__( 'ChatGPT 5.2', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-5'                  => esc_html__( 'ChatGPT 5', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-5-mini'             => esc_html__( 'ChatGPT 5 mini', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-5-nano'             => esc_html__( 'ChatGPT 5 nano', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-4.1'                => esc_html__( 'ChatGPT 4.1', 'learnpress' ),\r\n-\t\t\t\t\t\t\u002F\u002F'chatgpt-4o-latest'      => esc_html__( 'ChatGPT 4o-Latest', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-4o'                 => esc_html__( 'GPT 4o', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-4o-mini'            => esc_html__( 'GPT 4o Mini', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-4'                  => esc_html__( 'GPT 4', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-3.5-turbo'          => esc_html__( 'GPT 3.5 Turbo', 'learnpress' ),\r\n-\t\t\t\t\t\t'gpt-3.5-turbo-instruct' => esc_html__( 'GPT 3.5 Turbo Instruct', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Image Model Type', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_image_model_type',\r\n-\t\t\t\t\t'default' => 'gpt-image-1',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'gpt-image-1' => esc_html__( 'GPT image 1', 'learnpress' ),\r\n-\t\t\t\t\t\t'dall-e-3'    => esc_html__( 'DALL E 3', 'learnpress' ),\r\n-\t\t\t\t\t\t'dall-e-2'    => esc_html__( 'DALL E 2 ', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Frequency Penalty Level', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_frequency_penalty_level',\r\n-\t\t\t\t\t'default' => '0.0',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'-2.0' => esc_html__( 'Very High Repetition (-2.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-1.5' => esc_html__( 'High Repetition (-1.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-1.0' => esc_html__( 'Moderate Repetition (-1.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-0.5' => esc_html__( 'Low Repetition (-0.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.0'  => esc_html__( 'No Penalty (0.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.5'  => esc_html__( 'Low Penalty (0.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.0'  => esc_html__( 'Moderate Penalty (1.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.5'  => esc_html__( 'High Penalty (1.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'2.0'  => esc_html__( 'Very High Penalty (2.0)', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Presence Penalty Level', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_presence_penalty_level',\r\n-\t\t\t\t\t'default' => '0.0',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'-2.0' => esc_html__( 'Very High Repetition Allowed (-2.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-1.5' => esc_html__( 'High Repetition Allowed (-1.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-1.0' => esc_html__( 'Moderate Repetition Allowed (-1.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'-0.5' => esc_html__( 'Low Repetition Allowed (-0.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.0'  => esc_html__( 'No Penalty (0.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.5'  => esc_html__( 'Low Penalty (0.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.0'  => esc_html__( 'Moderate Penalty (1.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.5'  => esc_html__( 'High Penalty (1.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'2.0'  => esc_html__( 'Very High Penalty (2.0)', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => __( 'Creativity Level', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'open_ai_creativity_level',\r\n-\t\t\t\t\t'default' => '1.0',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'0.0' => esc_html__( 'Very Low Creativity (0.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.2' => esc_html__( 'Low Creativity (0.2)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.3' => esc_html__( 'Low Creativity (0.3)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.5' => esc_html__( 'Moderate Creativity (0.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.7' => esc_html__( 'High Creativity (0.7)', 'learnpress' ),\r\n-\t\t\t\t\t\t'0.8' => esc_html__( 'High Creativity (0.8)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.0' => esc_html__( 'Very High Creativity (1.0)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.1' => esc_html__( 'Extreme Creativity (1.1)', 'learnpress' ),\r\n-\t\t\t\t\t\t'1.5' => esc_html__( 'Extreme Creativity (1.5)', 'learnpress' ),\r\n-\t\t\t\t\t\t'2.0' => esc_html__( 'Maximum Creativity (2.0)', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'             => __( 'Max Token', 'learnpress' ),\r\n-\t\t\t\t\t'id'                => 'open_ai_max_token',\r\n-\t\t\t\t\t'default'           => 4000,\r\n-\t\t\t\t\t'type'              => 'number',\r\n-\t\t\t\t\t'desc'              => esc_html__( 'Set 0 for no limit.', 'learnpress' ),\r\n-\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t'min'  => 0,\r\n-\t\t\t\t\t\t'step' => 1,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t],\r\n-\t\t\t]\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+return apply_filters(\n+\t'lp\u002Fsettings\u002Fopen-ai',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fsingle',\n+\t\t\t[\n+\t\t\t\t[\n+\t\t\t\t\t'title' => esc_html__( 'Open AI', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => esc_html__( 'Enable Open AI', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'enable_open_ai',\n+\t\t\t\t\t'default' => 'no',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Enable this option and enter your OpenAI Secret key below to activate the feature.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Secret key', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_secret_key',\n+\t\t\t\t\t'default' => '',\n+\t\t\t\t\t'type'    => 'textarea',\n+\t\t\t\t\t'desc'    => sprintf(\n+\t\t\t\t\t\u002F* translators: 1. profile url *\u002F\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'Get your Open AI secret key from \u003Ca href=\"%1$s\" target=\"_blank\">here\u003C\u002Fa>.\n+                            Read more guide from \u003Ca href=\"%2$s\" target=\"_blank\">here\u003C\u002Fa>.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'https:\u002F\u002Fplatform.openai.com\u002Faccount\u002Fapi-keys',\n+\t\t\t\t\t\t'https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fquickstart'\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Text Model Type', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_text_model_type',\n+\t\t\t\t\t'default' => 'gpt-4.1',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'gpt-5.2'                => esc_html__( 'ChatGPT 5.2', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-5'                  => esc_html__( 'ChatGPT 5', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-5-mini'             => esc_html__( 'ChatGPT 5 mini', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-5-nano'             => esc_html__( 'ChatGPT 5 nano', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-4.1'                => esc_html__( 'ChatGPT 4.1', 'learnpress' ),\n+\t\t\t\t\t\t\u002F\u002F'chatgpt-4o-latest'      => esc_html__( 'ChatGPT 4o-Latest', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-4o'                 => esc_html__( 'GPT 4o', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-4o-mini'            => esc_html__( 'GPT 4o Mini', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-4'                  => esc_html__( 'GPT 4', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-3.5-turbo'          => esc_html__( 'GPT 3.5 Turbo', 'learnpress' ),\n+\t\t\t\t\t\t'gpt-3.5-turbo-instruct' => esc_html__( 'GPT 3.5 Turbo Instruct', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Image Model Type', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_image_model_type',\n+\t\t\t\t\t'default' => 'gpt-image-1',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'gpt-image-1' => esc_html__( 'GPT image 1', 'learnpress' ),\n+\t\t\t\t\t\t'dall-e-3'    => esc_html__( 'DALL E 3', 'learnpress' ),\n+\t\t\t\t\t\t'dall-e-2'    => esc_html__( 'DALL E 2 ', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Frequency Penalty Level', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_frequency_penalty_level',\n+\t\t\t\t\t'default' => '0.0',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'-2.0' => esc_html__( 'Very High Repetition (-2.0)', 'learnpress' ),\n+\t\t\t\t\t\t'-1.5' => esc_html__( 'High Repetition (-1.5)', 'learnpress' ),\n+\t\t\t\t\t\t'-1.0' => esc_html__( 'Moderate Repetition (-1.0)', 'learnpress' ),\n+\t\t\t\t\t\t'-0.5' => esc_html__( 'Low Repetition (-0.5)', 'learnpress' ),\n+\t\t\t\t\t\t'0.0'  => esc_html__( 'No Penalty (0.0)', 'learnpress' ),\n+\t\t\t\t\t\t'0.5'  => esc_html__( 'Low Penalty (0.5)', 'learnpress' ),\n+\t\t\t\t\t\t'1.0'  => esc_html__( 'Moderate Penalty (1.0)', 'learnpress' ),\n+\t\t\t\t\t\t'1.5'  => esc_html__( 'High Penalty (1.5)', 'learnpress' ),\n+\t\t\t\t\t\t'2.0'  => esc_html__( 'Very High Penalty (2.0)', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Presence Penalty Level', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_presence_penalty_level',\n+\t\t\t\t\t'default' => '0.0',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'-2.0' => esc_html__( 'Very High Repetition Allowed (-2.0)', 'learnpress' ),\n+\t\t\t\t\t\t'-1.5' => esc_html__( 'High Repetition Allowed (-1.5)', 'learnpress' ),\n+\t\t\t\t\t\t'-1.0' => esc_html__( 'Moderate Repetition Allowed (-1.0)', 'learnpress' ),\n+\t\t\t\t\t\t'-0.5' => esc_html__( 'Low Repetition Allowed (-0.5)', 'learnpress' ),\n+\t\t\t\t\t\t'0.0'  => esc_html__( 'No Penalty (0.0)', 'learnpress' ),\n+\t\t\t\t\t\t'0.5'  => esc_html__( 'Low Penalty (0.5)', 'learnpress' ),\n+\t\t\t\t\t\t'1.0'  => esc_html__( 'Moderate Penalty (1.0)', 'learnpress' ),\n+\t\t\t\t\t\t'1.5'  => esc_html__( 'High Penalty (1.5)', 'learnpress' ),\n+\t\t\t\t\t\t'2.0'  => esc_html__( 'Very High Penalty (2.0)', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => __( 'Creativity Level', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'open_ai_creativity_level',\n+\t\t\t\t\t'default' => '1.0',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'0.0' => esc_html__( 'Very Low Creativity (0.0)', 'learnpress' ),\n+\t\t\t\t\t\t'0.2' => esc_html__( 'Low Creativity (0.2)', 'learnpress' ),\n+\t\t\t\t\t\t'0.3' => esc_html__( 'Low Creativity (0.3)', 'learnpress' ),\n+\t\t\t\t\t\t'0.5' => esc_html__( 'Moderate Creativity (0.5)', 'learnpress' ),\n+\t\t\t\t\t\t'0.7' => esc_html__( 'High Creativity (0.7)', 'learnpress' ),\n+\t\t\t\t\t\t'0.8' => esc_html__( 'High Creativity (0.8)', 'learnpress' ),\n+\t\t\t\t\t\t'1.0' => esc_html__( 'Very High Creativity (1.0)', 'learnpress' ),\n+\t\t\t\t\t\t'1.1' => esc_html__( 'Extreme Creativity (1.1)', 'learnpress' ),\n+\t\t\t\t\t\t'1.5' => esc_html__( 'Extreme Creativity (1.5)', 'learnpress' ),\n+\t\t\t\t\t\t'2.0' => esc_html__( 'Maximum Creativity (2.0)', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'             => __( 'Max Token', 'learnpress' ),\n+\t\t\t\t\t'id'                => 'open_ai_max_token',\n+\t\t\t\t\t'default'           => 4000,\n+\t\t\t\t\t'type'              => 'number',\n+\t\t\t\t\t'desc'              => esc_html__( 'Set 0 for no limit.', 'learnpress' ),\n+\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t'min'  => 0,\n+\t\t\t\t\t\t'step' => 1,\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t],\n+\t\t\t]\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fopen-ai-modal.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fopen-ai-modal.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fopen-ai-modal.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fopen-ai-modal.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,165 +1,165 @@\n-\u003C?php\r\n-return apply_filters(\r\n-\t'lp-open-ai-modal-config',\r\n-\t[\r\n-\t\t'language'                  => [\r\n-\t\t\t'US English' => esc_html__( 'US English', 'learnpress' ),\r\n-\t\t\t'UK English' => esc_html__( 'UK English', 'learnpress' ),\r\n-\t\t\t'Arabic'     => esc_html__( 'Arabic', 'learnpress' ),\r\n-\t\t\t'Bulgarian'  => esc_html__( 'Bulgarian', 'learnpress' ),\r\n-\t\t\t'Chinese'    => esc_html__( 'Chinese', 'learnpress' ),\r\n-\t\t\t'Czech'      => esc_html__( 'Czech', 'learnpress' ),\r\n-\t\t\t'Danish'     => esc_html__( 'Danish', 'learnpress' ),\r\n-\t\t\t'Dutch'      => esc_html__( 'Dutch', 'learnpress' ),\r\n-\t\t\t'Estonian'   => esc_html__( 'Estonian', 'learnpress' ),\r\n-\t\t\t'Finnish'    => esc_html__( 'Finnish', 'learnpress' ),\r\n-\t\t\t'French'     => esc_html__( 'French', 'learnpress' ),\r\n-\t\t\t'German'     => esc_html__( 'German', 'learnpress' ),\r\n-\t\t\t'Greek'      => esc_html__( 'Greek', 'learnpress' ),\r\n-\t\t\t'Hebrew'     => esc_html__( 'Hebrew', 'learnpress' ),\r\n-\t\t\t'Hungarian'  => esc_html__( 'Hungarian', 'learnpress' ),\r\n-\t\t\t'Indonesian' => esc_html__( 'Indonesian', 'learnpress' ),\r\n-\t\t\t'Italian'    => esc_html__( 'Italian', 'learnpress' ),\r\n-\t\t\t'Japanese'   => esc_html__( 'Japanese', 'learnpress' ),\r\n-\t\t\t'Korean'     => esc_html__( 'Korean', 'learnpress' ),\r\n-\t\t\t'Latvian'    => esc_html__( 'Latvian', 'learnpress' ),\r\n-\t\t\t'Lithuanian' => esc_html__( 'Lithuanian', 'learnpress' ),\r\n-\t\t\t'Norwegian'  => esc_html__( 'Norwegian', 'learnpress' ),\r\n-\t\t\t'Polish'     => esc_html__( 'Polish', 'learnpress' ),\r\n-\t\t\t'Portuguese' => esc_html__( 'Portuguese', 'learnpress' ),\r\n-\t\t\t'Romanian'   => esc_html__( 'Romanian', 'learnpress' ),\r\n-\t\t\t'Russian'    => esc_html__( 'Russian', 'learnpress' ),\r\n-\t\t\t'Slovak'     => esc_html__( 'Slovak', 'learnpress' ),\r\n-\t\t\t'Slovenian'  => esc_html__( 'Slovenian', 'learnpress' ),\r\n-\t\t\t'Spanish'    => esc_html__( 'Spanish', 'learnpress' ),\r\n-\t\t\t'Swedish'    => esc_html__( 'Swedish', 'learnpress' ),\r\n-\t\t\t'Turkish'    => esc_html__( 'Turkish', 'learnpress' ),\r\n-\t\t\t'Vietnamese' => esc_html__( 'Vietnamese', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'audience'                  => [\r\n-\t\t\t'Activists'                => esc_html__( 'Activists', 'learnpress' ),\r\n-\t\t\t'Artists'                  => esc_html__( 'Artists', 'learnpress' ),\r\n-\t\t\t'Authors'                  => esc_html__( 'Authors', 'learnpress' ),\r\n-\t\t\t'Bargain Hunters'          => esc_html__( 'Bargain Hunters', 'learnpress' ),\r\n-\t\t\t'Bloggers'                 => esc_html__( 'Bloggers', 'learnpress' ),\r\n-\t\t\t'Business Owners'          => esc_html__( 'Business Owners', 'learnpress' ),\r\n-\t\t\t'Collectors'               => esc_html__( 'Collectors', 'learnpress' ),\r\n-\t\t\t'Cooks'                    => esc_html__( 'Cooks', 'learnpress' ),\r\n-\t\t\t'Crafters'                 => esc_html__( 'Crafters', 'learnpress' ),\r\n-\t\t\t'Dancers'                  => esc_html__( 'Dancers', 'learnpress' ),\r\n-\t\t\t'DIYers'                   => esc_html__( 'DIYers', 'learnpress' ),\r\n-\t\t\t'Designers'                => esc_html__( 'Designers', 'learnpress' ),\r\n-\t\t\t'Educators'                => esc_html__( 'Educators', 'learnpress' ),\r\n-\t\t\t'Engineers'                => esc_html__( 'Engineers', 'learnpress' ),\r\n-\t\t\t'Entrepreneurs'            => esc_html__( 'Entrepreneurs', 'learnpress' ),\r\n-\t\t\t'Environmentalists'        => esc_html__( 'Environmentalists', 'learnpress' ),\r\n-\t\t\t'Fashionistas'             => esc_html__( 'Fashionistas', 'learnpress' ),\r\n-\t\t\t'Fitness Enthusiasts'      => esc_html__( 'Fitness Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Foodies'                  => esc_html__( 'Foodies', 'learnpress' ),\r\n-\t\t\t'Gaming Enthusiasts'       => esc_html__( 'Gaming Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Gardeners'                => esc_html__( 'Gardeners', 'learnpress' ),\r\n-\t\t\t'General Audience'         => esc_html__( 'General Audience', 'learnpress' ),\r\n-\t\t\t'Health Enthusiasts'       => esc_html__( 'Health Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Healthcare Professionals' => esc_html__( 'Healthcare Professionals', 'learnpress' ),\r\n-\t\t\t'Indoor Hobbyists'         => esc_html__( 'Indoor Hobbyists', 'learnpress' ),\r\n-\t\t\t'Investors'                => esc_html__( 'Investors', 'learnpress' ),\r\n-\t\t\t'Job Seekers'              => esc_html__( 'Job Seekers', 'learnpress' ),\r\n-\t\t\t'Movie Buffs'              => esc_html__( 'Movie Buffs', 'learnpress' ),\r\n-\t\t\t'Musicians'                => esc_html__( 'Musicians', 'learnpress' ),\r\n-\t\t\t'Outdoor Enthusiasts'      => esc_html__( 'Outdoor Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Parents'                  => esc_html__( 'Parents', 'learnpress' ),\r\n-\t\t\t'Pet Owners'               => esc_html__( 'Pet Owners', 'learnpress' ),\r\n-\t\t\t'Photographers'            => esc_html__( 'Photographers', 'learnpress' ),\r\n-\t\t\t'Podcast Listeners'        => esc_html__( 'Podcast Listeners', 'learnpress' ),\r\n-\t\t\t'Professionals'            => esc_html__( 'Professionals', 'learnpress' ),\r\n-\t\t\t'Retirees'                 => esc_html__( 'Retirees', 'learnpress' ),\r\n-\t\t\t'Russian'                  => esc_html__( 'Russian', 'learnpress' ),\r\n-\t\t\t'Seniors'                  => esc_html__( 'Seniors', 'learnpress' ),\r\n-\t\t\t'Social Media Users'       => esc_html__( 'Social Media Users', 'learnpress' ),\r\n-\t\t\t'Sports Fans'              => esc_html__( 'Sports Fans', 'learnpress' ),\r\n-\t\t\t'Students'                 => esc_html__( 'Students', 'learnpress' ),\r\n-\t\t\t'Tech Enthusiasts'         => esc_html__( 'Tech Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Travelers'                => esc_html__( 'Travelers', 'learnpress' ),\r\n-\t\t\t'TV Enthusiasts'           => esc_html__( 'TV Enthusiasts', 'learnpress' ),\r\n-\t\t\t'Video Creators'           => esc_html__( 'Video Creators', 'learnpress' ),\r\n-\t\t\t'Writers'                  => esc_html__( 'Writers', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'tone'                      => [\r\n-\t\t\t'Analytical'     => esc_html__( 'Analytical', 'learnpress' ),\r\n-\t\t\t'Argumentative'  => esc_html__( 'Argumentative', 'learnpress' ),\r\n-\t\t\t'Casual'         => esc_html__( 'Casual', 'learnpress' ),\r\n-\t\t\t'Conversational' => esc_html__( 'Conversational', 'learnpress' ),\r\n-\t\t\t'Creative'       => esc_html__( 'Creative', 'learnpress' ),\r\n-\t\t\t'Descriptive'    => esc_html__( 'Descriptive', 'learnpress' ),\r\n-\t\t\t'Emotional'      => esc_html__( 'Emotional', 'learnpress' ),\r\n-\t\t\t'Empathetic'     => esc_html__( 'Empathetic', 'learnpress' ),\r\n-\t\t\t'Expository'     => esc_html__( 'Expository', 'learnpress' ),\r\n-\t\t\t'Factual'        => esc_html__( 'Factual', 'learnpress' ),\r\n-\t\t\t'Formal'         => esc_html__( 'Formal', 'learnpress' ),\r\n-\t\t\t'Friendly'       => esc_html__( 'Friendly', 'learnpress' ),\r\n-\t\t\t'Humorous'       => esc_html__( 'Humorous', 'learnpress' ),\r\n-\t\t\t'Informal'       => esc_html__( 'Informal', 'learnpress' ),\r\n-\t\t\t'Journalese'     => esc_html__( 'Journalese', 'learnpress' ),\r\n-\t\t\t'Narrative'      => esc_html__( 'Narrative', 'learnpress' ),\r\n-\t\t\t'Objective'      => esc_html__( 'Objective', 'learnpress' ),\r\n-\t\t\t'Opinionated'    => esc_html__( 'Opinionated', 'learnpress' ),\r\n-\t\t\t'Persuasive'     => esc_html__( 'Persuasive', 'learnpress' ),\r\n-\t\t\t'Poetic'         => esc_html__( 'Poetic', 'learnpress' ),\r\n-\t\t\t'Satirical'      => esc_html__( 'Satirical', 'learnpress' ),\r\n-\t\t\t'Story-telling'  => esc_html__( 'Story-telling', 'learnpress' ),\r\n-\t\t\t'Subjective'     => esc_html__( 'Subjective', 'learnpress' ),\r\n-\t\t\t'Technical'      => esc_html__( 'Technical', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-size-gpt-image-1'    => [\r\n-\t\t\t'auto'      => esc_html__( 'Auto', 'learnpress' ),\r\n-\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\r\n-\t\t\t'1536x1024' => esc_html__( '1536x1024 (landscape)', 'learnpress' ),\r\n-\t\t\t'1024x1536' => esc_html__( '1024x1536 (portrait)', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-size-dall-e-2'       => [\r\n-\t\t\t'256x256'   => esc_html__( '256x256', 'learnpress' ),\r\n-\t\t\t'512x512'   => esc_html__( '512x512', 'learnpress' ),\r\n-\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-size-dall-e-3'       => [\r\n-\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\r\n-\t\t\t'1024x1792' => esc_html__( '1024x1792', 'learnpress' ),\r\n-\t\t\t'1792x1024' => esc_html__( '1792x1024', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-quality-gpt-image-1' => [\r\n-\t\t\t'auto'   => esc_html__( 'Auto', 'learnpress' ),\r\n-\t\t\t'high'   => esc_html__( 'High', 'learnpress' ),\r\n-\t\t\t'medium' => esc_html__( 'low', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-quality-dall-e-3'    => [\r\n-\t\t\t'auto'     => esc_html__( 'Auto', 'learnpress' ),\r\n-\t\t\t'hd'       => esc_html__( 'HD', 'learnpress' ),\r\n-\t\t\t'standard' => esc_html__( 'Standard', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-quality'             => [\r\n-\t\t\t'auto'     => esc_html__( 'Auto', 'learnpress' ),\r\n-\t\t\t'standard' => esc_html__( 'Standard', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'image-style'               => [\r\n-\t\t\t'Impressionism' => esc_html__( 'Impressionism', 'learnpress' ),\r\n-\t\t\t'Cubism'        => esc_html__( 'Cubism', 'learnpress' ),\r\n-\t\t\t'Surrealism'    => esc_html__( 'Surrealism', 'learnpress' ),\r\n-\t\t\t'Abstract'      => esc_html__( 'Abstract', 'learnpress' ),\r\n-\t\t\t'Realism'       => esc_html__( 'Realism', 'learnpress' ),\r\n-\t\t\t'Expressionism' => esc_html__( 'Expressionism', 'learnpress' ),\r\n-\t\t\t'Baroque'       => esc_html__( 'Baroque', 'learnpress' ),\r\n-\t\t\t'Renaissance'   => esc_html__( 'Renaissance', 'learnpress' ),\r\n-\t\t\t'Gothic'        => esc_html__( 'Gothic', 'learnpress' ),\r\n-\t\t\t'Pop Art'       => esc_html__( 'Pop Art', 'learnpress' ),\r\n-\t\t\t'Art Nouveau:'  => esc_html__( 'Art Nouveau', 'learnpress' ),\r\n-\t\t\t'Minimalism'    => esc_html__( 'Minimalism', 'learnpress' ),\r\n-\t\t\t'Fauvism'       => esc_html__( 'Fauvism', 'learnpress' ),\r\n-\t\t],\r\n-\t\t'reading_level'             => [\r\n-\t\t\t'Introductory' => esc_html__( 'Introductory', 'learnpress' ),\r\n-\t\t\t'Foundational' => esc_html__( 'Foundational', 'learnpress' ),\r\n-\t\t\t'Intermediate' => esc_html__( 'Intermediate', 'learnpress' ),\r\n-\t\t\t'Advanced'     => esc_html__( 'Advanced', 'learnpress' ),\r\n-\t\t],\r\n-\t]\r\n-);\r\n+\u003C?php\n+return apply_filters(\n+\t'lp-open-ai-modal-config',\n+\t[\n+\t\t'language'                  => [\n+\t\t\t'US English' => esc_html__( 'US English', 'learnpress' ),\n+\t\t\t'UK English' => esc_html__( 'UK English', 'learnpress' ),\n+\t\t\t'Arabic'     => esc_html__( 'Arabic', 'learnpress' ),\n+\t\t\t'Bulgarian'  => esc_html__( 'Bulgarian', 'learnpress' ),\n+\t\t\t'Chinese'    => esc_html__( 'Chinese', 'learnpress' ),\n+\t\t\t'Czech'      => esc_html__( 'Czech', 'learnpress' ),\n+\t\t\t'Danish'     => esc_html__( 'Danish', 'learnpress' ),\n+\t\t\t'Dutch'      => esc_html__( 'Dutch', 'learnpress' ),\n+\t\t\t'Estonian'   => esc_html__( 'Estonian', 'learnpress' ),\n+\t\t\t'Finnish'    => esc_html__( 'Finnish', 'learnpress' ),\n+\t\t\t'French'     => esc_html__( 'French', 'learnpress' ),\n+\t\t\t'German'     => esc_html__( 'German', 'learnpress' ),\n+\t\t\t'Greek'      => esc_html__( 'Greek', 'learnpress' ),\n+\t\t\t'Hebrew'     => esc_html__( 'Hebrew', 'learnpress' ),\n+\t\t\t'Hungarian'  => esc_html__( 'Hungarian', 'learnpress' ),\n+\t\t\t'Indonesian' => esc_html__( 'Indonesian', 'learnpress' ),\n+\t\t\t'Italian'    => esc_html__( 'Italian', 'learnpress' ),\n+\t\t\t'Japanese'   => esc_html__( 'Japanese', 'learnpress' ),\n+\t\t\t'Korean'     => esc_html__( 'Korean', 'learnpress' ),\n+\t\t\t'Latvian'    => esc_html__( 'Latvian', 'learnpress' ),\n+\t\t\t'Lithuanian' => esc_html__( 'Lithuanian', 'learnpress' ),\n+\t\t\t'Norwegian'  => esc_html__( 'Norwegian', 'learnpress' ),\n+\t\t\t'Polish'     => esc_html__( 'Polish', 'learnpress' ),\n+\t\t\t'Portuguese' => esc_html__( 'Portuguese', 'learnpress' ),\n+\t\t\t'Romanian'   => esc_html__( 'Romanian', 'learnpress' ),\n+\t\t\t'Russian'    => esc_html__( 'Russian', 'learnpress' ),\n+\t\t\t'Slovak'     => esc_html__( 'Slovak', 'learnpress' ),\n+\t\t\t'Slovenian'  => esc_html__( 'Slovenian', 'learnpress' ),\n+\t\t\t'Spanish'    => esc_html__( 'Spanish', 'learnpress' ),\n+\t\t\t'Swedish'    => esc_html__( 'Swedish', 'learnpress' ),\n+\t\t\t'Turkish'    => esc_html__( 'Turkish', 'learnpress' ),\n+\t\t\t'Vietnamese' => esc_html__( 'Vietnamese', 'learnpress' ),\n+\t\t],\n+\t\t'audience'                  => [\n+\t\t\t'Activists'                => esc_html__( 'Activists', 'learnpress' ),\n+\t\t\t'Artists'                  => esc_html__( 'Artists', 'learnpress' ),\n+\t\t\t'Authors'                  => esc_html__( 'Authors', 'learnpress' ),\n+\t\t\t'Bargain Hunters'          => esc_html__( 'Bargain Hunters', 'learnpress' ),\n+\t\t\t'Bloggers'                 => esc_html__( 'Bloggers', 'learnpress' ),\n+\t\t\t'Business Owners'          => esc_html__( 'Business Owners', 'learnpress' ),\n+\t\t\t'Collectors'               => esc_html__( 'Collectors', 'learnpress' ),\n+\t\t\t'Cooks'                    => esc_html__( 'Cooks', 'learnpress' ),\n+\t\t\t'Crafters'                 => esc_html__( 'Crafters', 'learnpress' ),\n+\t\t\t'Dancers'                  => esc_html__( 'Dancers', 'learnpress' ),\n+\t\t\t'DIYers'                   => esc_html__( 'DIYers', 'learnpress' ),\n+\t\t\t'Designers'                => esc_html__( 'Designers', 'learnpress' ),\n+\t\t\t'Educators'                => esc_html__( 'Educators', 'learnpress' ),\n+\t\t\t'Engineers'                => esc_html__( 'Engineers', 'learnpress' ),\n+\t\t\t'Entrepreneurs'            => esc_html__( 'Entrepreneurs', 'learnpress' ),\n+\t\t\t'Environmentalists'        => esc_html__( 'Environmentalists', 'learnpress' ),\n+\t\t\t'Fashionistas'             => esc_html__( 'Fashionistas', 'learnpress' ),\n+\t\t\t'Fitness Enthusiasts'      => esc_html__( 'Fitness Enthusiasts', 'learnpress' ),\n+\t\t\t'Foodies'                  => esc_html__( 'Foodies', 'learnpress' ),\n+\t\t\t'Gaming Enthusiasts'       => esc_html__( 'Gaming Enthusiasts', 'learnpress' ),\n+\t\t\t'Gardeners'                => esc_html__( 'Gardeners', 'learnpress' ),\n+\t\t\t'General Audience'         => esc_html__( 'General Audience', 'learnpress' ),\n+\t\t\t'Health Enthusiasts'       => esc_html__( 'Health Enthusiasts', 'learnpress' ),\n+\t\t\t'Healthcare Professionals' => esc_html__( 'Healthcare Professionals', 'learnpress' ),\n+\t\t\t'Indoor Hobbyists'         => esc_html__( 'Indoor Hobbyists', 'learnpress' ),\n+\t\t\t'Investors'                => esc_html__( 'Investors', 'learnpress' ),\n+\t\t\t'Job Seekers'              => esc_html__( 'Job Seekers', 'learnpress' ),\n+\t\t\t'Movie Buffs'              => esc_html__( 'Movie Buffs', 'learnpress' ),\n+\t\t\t'Musicians'                => esc_html__( 'Musicians', 'learnpress' ),\n+\t\t\t'Outdoor Enthusiasts'      => esc_html__( 'Outdoor Enthusiasts', 'learnpress' ),\n+\t\t\t'Parents'                  => esc_html__( 'Parents', 'learnpress' ),\n+\t\t\t'Pet Owners'               => esc_html__( 'Pet Owners', 'learnpress' ),\n+\t\t\t'Photographers'            => esc_html__( 'Photographers', 'learnpress' ),\n+\t\t\t'Podcast Listeners'        => esc_html__( 'Podcast Listeners', 'learnpress' ),\n+\t\t\t'Professionals'            => esc_html__( 'Professionals', 'learnpress' ),\n+\t\t\t'Retirees'                 => esc_html__( 'Retirees', 'learnpress' ),\n+\t\t\t'Russian'                  => esc_html__( 'Russian', 'learnpress' ),\n+\t\t\t'Seniors'                  => esc_html__( 'Seniors', 'learnpress' ),\n+\t\t\t'Social Media Users'       => esc_html__( 'Social Media Users', 'learnpress' ),\n+\t\t\t'Sports Fans'              => esc_html__( 'Sports Fans', 'learnpress' ),\n+\t\t\t'Students'                 => esc_html__( 'Students', 'learnpress' ),\n+\t\t\t'Tech Enthusiasts'         => esc_html__( 'Tech Enthusiasts', 'learnpress' ),\n+\t\t\t'Travelers'                => esc_html__( 'Travelers', 'learnpress' ),\n+\t\t\t'TV Enthusiasts'           => esc_html__( 'TV Enthusiasts', 'learnpress' ),\n+\t\t\t'Video Creators'           => esc_html__( 'Video Creators', 'learnpress' ),\n+\t\t\t'Writers'                  => esc_html__( 'Writers', 'learnpress' ),\n+\t\t],\n+\t\t'tone'                      => [\n+\t\t\t'Analytical'     => esc_html__( 'Analytical', 'learnpress' ),\n+\t\t\t'Argumentative'  => esc_html__( 'Argumentative', 'learnpress' ),\n+\t\t\t'Casual'         => esc_html__( 'Casual', 'learnpress' ),\n+\t\t\t'Conversational' => esc_html__( 'Conversational', 'learnpress' ),\n+\t\t\t'Creative'       => esc_html__( 'Creative', 'learnpress' ),\n+\t\t\t'Descriptive'    => esc_html__( 'Descriptive', 'learnpress' ),\n+\t\t\t'Emotional'      => esc_html__( 'Emotional', 'learnpress' ),\n+\t\t\t'Empathetic'     => esc_html__( 'Empathetic', 'learnpress' ),\n+\t\t\t'Expository'     => esc_html__( 'Expository', 'learnpress' ),\n+\t\t\t'Factual'        => esc_html__( 'Factual', 'learnpress' ),\n+\t\t\t'Formal'         => esc_html__( 'Formal', 'learnpress' ),\n+\t\t\t'Friendly'       => esc_html__( 'Friendly', 'learnpress' ),\n+\t\t\t'Humorous'       => esc_html__( 'Humorous', 'learnpress' ),\n+\t\t\t'Informal'       => esc_html__( 'Informal', 'learnpress' ),\n+\t\t\t'Journalese'     => esc_html__( 'Journalese', 'learnpress' ),\n+\t\t\t'Narrative'      => esc_html__( 'Narrative', 'learnpress' ),\n+\t\t\t'Objective'      => esc_html__( 'Objective', 'learnpress' ),\n+\t\t\t'Opinionated'    => esc_html__( 'Opinionated', 'learnpress' ),\n+\t\t\t'Persuasive'     => esc_html__( 'Persuasive', 'learnpress' ),\n+\t\t\t'Poetic'         => esc_html__( 'Poetic', 'learnpress' ),\n+\t\t\t'Satirical'      => esc_html__( 'Satirical', 'learnpress' ),\n+\t\t\t'Story-telling'  => esc_html__( 'Story-telling', 'learnpress' ),\n+\t\t\t'Subjective'     => esc_html__( 'Subjective', 'learnpress' ),\n+\t\t\t'Technical'      => esc_html__( 'Technical', 'learnpress' ),\n+\t\t],\n+\t\t'image-size-gpt-image-1'    => [\n+\t\t\t'auto'      => esc_html__( 'Auto', 'learnpress' ),\n+\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\n+\t\t\t'1536x1024' => esc_html__( '1536x1024 (landscape)', 'learnpress' ),\n+\t\t\t'1024x1536' => esc_html__( '1024x1536 (portrait)', 'learnpress' ),\n+\t\t],\n+\t\t'image-size-dall-e-2'       => [\n+\t\t\t'256x256'   => esc_html__( '256x256', 'learnpress' ),\n+\t\t\t'512x512'   => esc_html__( '512x512', 'learnpress' ),\n+\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\n+\t\t],\n+\t\t'image-size-dall-e-3'       => [\n+\t\t\t'1024x1024' => esc_html__( '1024x1024', 'learnpress' ),\n+\t\t\t'1024x1792' => esc_html__( '1024x1792', 'learnpress' ),\n+\t\t\t'1792x1024' => esc_html__( '1792x1024', 'learnpress' ),\n+\t\t],\n+\t\t'image-quality-gpt-image-1' => [\n+\t\t\t'auto'   => esc_html__( 'Auto', 'learnpress' ),\n+\t\t\t'high'   => esc_html__( 'High', 'learnpress' ),\n+\t\t\t'medium' => esc_html__( 'low', 'learnpress' ),\n+\t\t],\n+\t\t'image-quality-dall-e-3'    => [\n+\t\t\t'auto'     => esc_html__( 'Auto', 'learnpress' ),\n+\t\t\t'hd'       => esc_html__( 'HD', 'learnpress' ),\n+\t\t\t'standard' => esc_html__( 'Standard', 'learnpress' ),\n+\t\t],\n+\t\t'image-quality'             => [\n+\t\t\t'auto'     => esc_html__( 'Auto', 'learnpress' ),\n+\t\t\t'standard' => esc_html__( 'Standard', 'learnpress' ),\n+\t\t],\n+\t\t'image-style'               => [\n+\t\t\t'Impressionism' => esc_html__( 'Impressionism', 'learnpress' ),\n+\t\t\t'Cubism'        => esc_html__( 'Cubism', 'learnpress' ),\n+\t\t\t'Surrealism'    => esc_html__( 'Surrealism', 'learnpress' ),\n+\t\t\t'Abstract'      => esc_html__( 'Abstract', 'learnpress' ),\n+\t\t\t'Realism'       => esc_html__( 'Realism', 'learnpress' ),\n+\t\t\t'Expressionism' => esc_html__( 'Expressionism', 'learnpress' ),\n+\t\t\t'Baroque'       => esc_html__( 'Baroque', 'learnpress' ),\n+\t\t\t'Renaissance'   => esc_html__( 'Renaissance', 'learnpress' ),\n+\t\t\t'Gothic'        => esc_html__( 'Gothic', 'learnpress' ),\n+\t\t\t'Pop Art'       => esc_html__( 'Pop Art', 'learnpress' ),\n+\t\t\t'Art Nouveau:'  => esc_html__( 'Art Nouveau', 'learnpress' ),\n+\t\t\t'Minimalism'    => esc_html__( 'Minimalism', 'learnpress' ),\n+\t\t\t'Fauvism'       => esc_html__( 'Fauvism', 'learnpress' ),\n+\t\t],\n+\t\t'reading_level'             => [\n+\t\t\t'Introductory' => esc_html__( 'Introductory', 'learnpress' ),\n+\t\t\t'Foundational' => esc_html__( 'Foundational', 'learnpress' ),\n+\t\t\t'Intermediate' => esc_html__( 'Intermediate', 'learnpress' ),\n+\t\t\t'Advanced'     => esc_html__( 'Advanced', 'learnpress' ),\n+\t\t],\n+\t]\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fpermalink.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fpermalink.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fpermalink.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fpermalink.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,202 +1,211 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-$currencies = learn_press_currencies();\r\n-\r\n-foreach ( $currencies as $code => $name ) {\r\n-\t$currency_symbol     = learn_press_get_currency_symbol( $code );\r\n-\t$currencies[ $code ] = sprintf( '%s (%s)', $name, $currency_symbol );\r\n-}\r\n-\r\n-$settings      = LP_Settings::instance();\r\n-$userModel     = UserModel::find( get_current_user_id(), true );\r\n-$username      = $userModel->get_pretty_slug();\r\n-$settings_slug = $settings->get( 'profile_endpoints.settings', 'settings' );\r\n-$profile_slug  = 'profile';\r\n-\r\n-if ( learn_press_get_page_id( 'profile' ) ) {\r\n-\t$profile_post = get_post( learn_press_get_page_id( 'profile' ) );\r\n-\r\n-\tif ( $profile_post ) {\r\n-\t\t$profile_slug = $profile_post->post_name;\r\n-\t}\r\n-}\r\n-\r\n-$profile_url = site_url() . '\u002F' . $profile_slug . '\u002F' . $username;\r\n-\r\n-return apply_filters(\r\n-\t'lp\u002Fsettings\u002Fpermalinks',\r\n-\tarray_merge(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fsingle',\r\n-\t\t\t[\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => esc_html__( 'Permalinks Course', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => esc_html__( 'Course', 'learnpress' ),\r\n-\t\t\t\t\t'type'    => 'course-permalink',\r\n-\t\t\t\t\t'default' => '',\r\n-\t\t\t\t\t'id'      => 'course_base',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'       => esc_html__( 'Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'id'          => 'lesson_slug',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002Fsample-course\u002F\u003Ccode>lessons\u003C\u002Fcode>\u002Fsample-lesson\u002F', home_url() ),\r\n-\t\t\t\t\t'default'     => 'lessons',\r\n-\t\t\t\t\t'placeholder' => 'lesson',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'       => esc_html__( 'Quiz', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'id'          => 'quiz_slug',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002Fsample-course\u002F\u003Ccode>quizzes\u003C\u002Fcode>\u002Fsample-quiz\u002F', home_url() ),\r\n-\t\t\t\t\t'default'     => 'quizzes',\r\n-\t\t\t\t\t'placeholder' => 'quizzes',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'       => esc_html__( 'Category base', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'course_category_base',\r\n-\t\t\t\t\t'default'     => 'course-category',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'placeholder' => 'course-category',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002F%s\u002Fsample-category\u002F', home_url(), '\u003Ccode>course-category\u003C\u002Fcode>' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'       => esc_html__( 'Tag base', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'course_tag_base',\r\n-\t\t\t\t\t'default'     => 'course-tag',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'placeholder' => 'course-tag',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002F%s\u002Fsample-tag\u002F', home_url(), '\u003Ccode>course-tag\u003C\u002Fcode>' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t],\r\n-\t\t\t]\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fprofile-settings-fields\u002Fsub-tabs',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => esc_html__( 'Permalinks Profile', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'id'    => 'lp_profile_permalinks',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Courses', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[courses]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'courses',\r\n-\t\t\t\t\t'placeholder' => 'courses',\r\n-\t\t\t\t\t'desc'        => sprintf(\r\n-\t\t\t\t\t\t'%s. E.g: %s',\r\n-\t\t\t\t\t\t__( 'Courses created by user', 'learnpress' ),\r\n-\t\t\t\t\t\t\"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.courses', 'courses' ) . '\u003C\u002Fcode>'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'My Courses', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[my-courses]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'my-courses',\r\n-\t\t\t\t\t'placeholder' => 'my-courses',\r\n-\t\t\t\t\t'desc'        => sprintf(\r\n-\t\t\t\t\t\t'%s. E.g: %s',\r\n-\t\t\t\t\t\t__( 'Courses enrolled by user', 'learnpress' ),\r\n-\t\t\t\t\t\t\"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.my-courses', 'my-courses' ) . '\u003C\u002Fcode>'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[quizzes]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'quizzes',\r\n-\t\t\t\t\t'placeholder' => 'quizzes',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.quizzes', 'quizzes' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Orders', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[orders]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'orders',\r\n-\t\t\t\t\t'placeholder' => 'orders',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.orders', 'orders' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Order details', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[order-details]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'order-details',\r\n-\t\t\t\t\t'placeholder' => 'order-details',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.order-details', 'order-details' ) . '\u003C\u002Fcode>\u002F123' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Users pretty slug', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'lp_generate_user_slug_row',\r\n-\t\t\t\t\t'type'    => 'html',\r\n-\t\t\t\t\t'default' => sprintf(\r\n-\t\t\t\t\t\t'\u003Cbutton class=\"button\" type=\"submit\" name=\"lp_generate_user_slug\" value=\"yes\">%s\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\u003Cp>%s\u003Cbr>%s\u003C\u002Fp>',\r\n-\t\t\t\t\t\tesc_html__( 'Generate users slug', 'learnpress' ),\r\n-\t\t\t\t\t\tesc_html__( 'Generate public user slugs for existing users on old sites. Existing pretty slugs will be kept unchanged.', 'learnpress' ),\r\n-\t\t\t\t\t\tesc_html__( 'This slug replaces the default username in profile and instructor links to uniquely identify users.', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t$this\r\n-\t\t),\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fprofile-settings-fields\u002Fsettings-tab',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Settings', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[settings]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'settings',\r\n-\t\t\t\t\t'placeholder' => 'settings',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g.  %s', \"{$profile_url}\u002F\u003Ccode>{$settings_slug}\u003C\u002Fcode>\" ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => __( 'Basic Information \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[settings-basic-information]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'basic-information',\r\n-\t\t\t\t\t'placeholder' => 'basic-information',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-basic-information', 'basic-information' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => __( 'Avatar \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[settings-avatar]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'avatar',\r\n-\t\t\t\t\t'placeholder' => 'avatar',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-avatar', 'avatar' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => __( 'Change Password \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[settings-change-password]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'change-password',\r\n-\t\t\t\t\t'placeholder' => 'change-password',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-change-password', 'change-password' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => __( 'Privacy \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'profile_endpoints[settings-privacy]',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'default'     => 'privacy',\r\n-\t\t\t\t\t'placeholder' => 'privacy',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-privacy', 'privacy' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t'id'   => 'lp_profile_permalinks',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+\n+use LearnPress\\Models\\UserModel;\n+\n+$currencies = learn_press_currencies();\n+\n+foreach ( $currencies as $code => $name ) {\n+\t$currency_symbol     = learn_press_get_currency_symbol( $code );\n+\t$currencies[ $code ] = sprintf( '%s (%s)', $name, $currency_symbol );\n+}\n+\n+$settings      = LP_Settings::instance();\n+$userModel     = UserModel::find( get_current_user_id(), true );\n+$username      = $userModel->get_slug_link();\n+$settings_slug = $settings->get( 'profile_endpoints.settings', 'settings' );\n+$profile_slug  = 'profile';\n+\n+if ( learn_press_get_page_id( 'profile' ) ) {\n+\t$profile_post = get_post( learn_press_get_page_id( 'profile' ) );\n+\n+\tif ( $profile_post ) {\n+\t\t$profile_slug = $profile_post->post_name;\n+\t}\n+}\n+\n+\u002F\u002F$profile_url = site_url() . '\u002F' . $profile_slug . '\u002F' . $username;\n+$profile_url = home_url( $profile_slug . '\u002F' . $username );\n+\n+return apply_filters(\n+\t'lp\u002Fsettings\u002Fpermalinks',\n+\tarray_merge(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fcourse-settings-fields\u002Fsingle',\n+\t\t\t[\n+\t\t\t\t[\n+\t\t\t\t\t'title' => esc_html__( 'Permalinks Course', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => esc_html__( 'Course', 'learnpress' ),\n+\t\t\t\t\t'type'    => 'course-permalink',\n+\t\t\t\t\t'default' => '',\n+\t\t\t\t\t'id'      => 'course_base',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'       => esc_html__( 'Lesson', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'id'          => 'lesson_slug',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002Fsample-course\u002F\u003Ccode>lessons\u003C\u002Fcode>\u002Fsample-lesson\u002F', home_url() ),\n+\t\t\t\t\t'default'     => 'lessons',\n+\t\t\t\t\t'placeholder' => 'lesson',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'       => esc_html__( 'Quiz', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'id'          => 'quiz_slug',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002Fsample-course\u002F\u003Ccode>quizzes\u003C\u002Fcode>\u002Fsample-quiz\u002F', home_url() ),\n+\t\t\t\t\t'default'     => 'quizzes',\n+\t\t\t\t\t'placeholder' => 'quizzes',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'       => esc_html__( 'Category base', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'course_category_base',\n+\t\t\t\t\t'default'     => 'course-category',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'placeholder' => 'course-category',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002F%s\u002Fsample-category\u002F', home_url(), '\u003Ccode>course-category\u003C\u002Fcode>' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'       => esc_html__( 'Tag base', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'course_tag_base',\n+\t\t\t\t\t'default'     => 'course-tag',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'placeholder' => 'course-tag',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002Fcourse\u002F%s\u002Fsample-tag\u002F', home_url(), '\u003Ccode>course-tag\u003C\u002Fcode>' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title'       => esc_html__( 'Course Builder', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'course_builder',\n+\t\t\t\t\t'default'     => 'course-builder',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'placeholder' => 'course-builder',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s\u002F%s\u002F', home_url(), '\u003Ccode>course-builder\u003C\u002Fcode>' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t],\n+\t\t\t]\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fprofile-settings-fields\u002Fsub-tabs',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => esc_html__( 'Permalinks Profile', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'id'    => 'lp_profile_permalinks',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Courses', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[courses]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'courses',\n+\t\t\t\t\t'placeholder' => 'courses',\n+\t\t\t\t\t'desc'        => sprintf(\n+\t\t\t\t\t\t'%s. E.g: %s',\n+\t\t\t\t\t\t__( 'Courses created by user', 'learnpress' ),\n+\t\t\t\t\t\t\"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.courses', 'courses' ) . '\u003C\u002Fcode>'\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'My Courses', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[my-courses]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'my-courses',\n+\t\t\t\t\t'placeholder' => 'my-courses',\n+\t\t\t\t\t'desc'        => sprintf(\n+\t\t\t\t\t\t'%s. E.g: %s',\n+\t\t\t\t\t\t__( 'Courses enrolled by user', 'learnpress' ),\n+\t\t\t\t\t\t\"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.my-courses', 'my-courses' ) . '\u003C\u002Fcode>'\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[quizzes]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'quizzes',\n+\t\t\t\t\t'placeholder' => 'quizzes',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.quizzes', 'quizzes' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Orders', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[orders]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'orders',\n+\t\t\t\t\t'placeholder' => 'orders',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.orders', 'orders' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Order details', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[order-details]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'order-details',\n+\t\t\t\t\t'placeholder' => 'order-details',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.order-details', 'order-details' ) . '\u003C\u002Fcode>\u002F123' ),\n+\t\t\t\t),\n+\t\t\t\t\u002F*array(\n+\t\t\t\t\t'title'   => esc_html__( 'Users pretty slug', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'lp_generate_user_slug_row',\n+\t\t\t\t\t'type'    => 'html',\n+\t\t\t\t\t'default' => sprintf(\n+\t\t\t\t\t\t'\u003Cbutton class=\"button\" type=\"submit\" name=\"lp_generate_user_slug\" value=\"yes\">%s\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\u003Cp>%s\u003Cbr>%s\u003C\u002Fp>',\n+\t\t\t\t\t\tesc_html__( 'Generate users slug', 'learnpress' ),\n+\t\t\t\t\t\tesc_html__( 'Generate public user slugs for existing users on old sites. Existing pretty slugs will be kept unchanged.', 'learnpress' ),\n+\t\t\t\t\t\tesc_html__( 'This slug replaces the default username in profile and instructor links to uniquely identify users.', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t),*\u002F\n+\t\t\t),\n+\t\t\t$this\n+\t\t),\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fprofile-settings-fields\u002Fsettings-tab',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Settings', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[settings]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'settings',\n+\t\t\t\t\t'placeholder' => 'settings',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g.  %s', \"{$profile_url}\u002F\u003Ccode>{$settings_slug}\u003C\u002Fcode>\" ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => __( 'Basic Information \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[settings-basic-information]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'basic-information',\n+\t\t\t\t\t'placeholder' => 'basic-information',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-basic-information', 'basic-information' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => __( 'Avatar \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[settings-avatar]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'avatar',\n+\t\t\t\t\t'placeholder' => 'avatar',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-avatar', 'avatar' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => __( 'Change Password \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[settings-change-password]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'change-password',\n+\t\t\t\t\t'placeholder' => 'change-password',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-change-password', 'change-password' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => __( 'Privacy \u003Csmall>Settings\u003C\u002Fsmall>', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'profile_endpoints[settings-privacy]',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'default'     => 'privacy',\n+\t\t\t\t\t'placeholder' => 'privacy',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$profile_url}\u002F{$settings_slug}\u002F\u003Ccode>\" . $settings->get( 'profile_endpoints.settings-privacy', 'privacy' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t'id'   => 'lp_profile_permalinks',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fprofile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fprofile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fsettings\u002Fprofile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fsettings\u002Fprofile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,96 @@\n-\u003C?php\r\n-return apply_filters(\r\n-\t'lp\u002Fsettings\u002Fprofile',\r\n-\tapply_filters(\r\n-\t\t'learn-press\u002Fprofile-settings-fields\u002Fgeneral',\r\n-\t\tarray(\r\n-\t\t\tarray(\r\n-\t\t\t\t'title' => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t'id'    => 'lp_profile_general',\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Avatar Dimensions', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'avatar_dimensions',\r\n-\t\t\t\t'default' => array( 250, 250, 'yes' ),\r\n-\t\t\t\t'type'    => 'image-dimensions',\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Cover Image Dimensions', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'cover_image_dimensions',\r\n-\t\t\t\t'default' => array( 1290, 250, 'yes' ),\r\n-\t\t\t\t'type'    => 'image-dimensions',\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Enable login form', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'enable_login_profile',\r\n-\t\t\t\t'default' => 'no',\r\n-\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t'desc'    => esc_html__( 'If the user is not logged in, enable login from profile.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Enable register form', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'enable_register_profile',\r\n-\t\t\t\t'default' => 'no',\r\n-\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t'desc'    => esc_html__( 'If the user is not logged in, enable register from profile.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'         => esc_html__( 'Enable default fields', 'learnpress' ),\r\n-\t\t\t\t'id'            => 'enable_register_first_name',\r\n-\t\t\t\t'default'       => 'no',\r\n-\t\t\t\t'type'          => 'checkbox',\r\n-\t\t\t\t'checkboxgroup' => 'start',\r\n-\t\t\t\t'desc'          => esc_html__( 'First name', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'            => 'enable_register_last_name',\r\n-\t\t\t\t'default'       => 'no',\r\n-\t\t\t\t'type'          => 'checkbox',\r\n-\t\t\t\t'checkboxgroup' => '',\r\n-\t\t\t\t'desc'          => esc_html__( 'Last name', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'            => 'enable_register_display_name',\r\n-\t\t\t\t'default'       => 'no',\r\n-\t\t\t\t'type'          => 'checkbox',\r\n-\t\t\t\t'checkboxgroup' => 'end',\r\n-\t\t\t\t'desc'          => esc_html__( 'Display name', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Custom register fields', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'register_profile_fields',\r\n-\t\t\t\t'default' => array(),\r\n-\t\t\t\t'type'    => 'custom-fields',\r\n-\t\t\t\t'options' => array(\r\n-\t\t\t\t\t'name'     => array(\r\n-\t\t\t\t\t\t'title'       => esc_html__( 'Name', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t\t'desc_tip'    => esc_html__( 'Display field name.', 'learnpress' ),\r\n-\t\t\t\t\t\t'placeholder' => esc_html__( 'Display name', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'type'     => array(\r\n-\t\t\t\t\t\t'title'   => esc_html__( 'Type', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t\t'text'     => esc_html__( 'Text', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'textarea' => esc_html__( 'Textarea', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'checkbox' => esc_html__( 'Checkbox', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'url'      => esc_html__( 'URL', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'number'   => esc_html__( 'Number', 'learnpress' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'required' => array(\r\n-\t\t\t\t\t\t'title' => esc_html__( 'Required?', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'desc'    => esc_html__( 'Custom fields to the registration form.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t'id'   => 'lp_profile_general',\r\n-\t\t\t),\r\n-\t\t)\r\n-\t)\r\n-);\r\n+\u003C?php\n+return apply_filters(\n+\t'lp\u002Fsettings\u002Fprofile',\n+\tapply_filters(\n+\t\t'learn-press\u002Fprofile-settings-fields\u002Fgeneral',\n+\t\tarray(\n+\t\t\tarray(\n+\t\t\t\t'title' => esc_html__( 'General', 'learnpress' ),\n+\t\t\t\t'type'  => 'title',\n+\t\t\t\t'id'    => 'lp_profile_general',\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Avatar Dimensions', 'learnpress' ),\n+\t\t\t\t'id'      => 'avatar_dimensions',\n+\t\t\t\t'default' => array( 250, 250, 'yes' ),\n+\t\t\t\t'type'    => 'image-dimensions',\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Cover Image Dimensions', 'learnpress' ),\n+\t\t\t\t'id'      => 'cover_image_dimensions',\n+\t\t\t\t'default' => array( 1290, 250, 'yes' ),\n+\t\t\t\t'type'    => 'image-dimensions',\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Enable login form', 'learnpress' ),\n+\t\t\t\t'id'      => 'enable_login_profile',\n+\t\t\t\t'default' => 'no',\n+\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t'desc'    => esc_html__( 'If the user is not logged in, enable login from profile.', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Enable register form', 'learnpress' ),\n+\t\t\t\t'id'      => 'enable_register_profile',\n+\t\t\t\t'default' => 'no',\n+\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t'desc'    => esc_html__( 'If the user is not logged in, enable register from profile.', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'         => esc_html__( 'Enable default fields', 'learnpress' ),\n+\t\t\t\t'id'            => 'enable_register_first_name',\n+\t\t\t\t'default'       => 'no',\n+\t\t\t\t'type'          => 'checkbox',\n+\t\t\t\t'checkboxgroup' => 'start',\n+\t\t\t\t'desc'          => esc_html__( 'First name', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'id'            => 'enable_register_last_name',\n+\t\t\t\t'default'       => 'no',\n+\t\t\t\t'type'          => 'checkbox',\n+\t\t\t\t'checkboxgroup' => '',\n+\t\t\t\t'desc'          => esc_html__( 'Last name', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'id'            => 'enable_register_display_name',\n+\t\t\t\t'default'       => 'no',\n+\t\t\t\t'type'          => 'checkbox',\n+\t\t\t\t'checkboxgroup' => 'end',\n+\t\t\t\t'desc'          => esc_html__( 'Display name', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Custom register fields', 'learnpress' ),\n+\t\t\t\t'id'      => 'register_profile_fields',\n+\t\t\t\t'default' => array(),\n+\t\t\t\t'type'    => 'custom-fields',\n+\t\t\t\t'options' => array(\n+\t\t\t\t\t'name'     => array(\n+\t\t\t\t\t\t'title'       => esc_html__( 'Name', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t\t'desc_tip'    => esc_html__( 'Display field name.', 'learnpress' ),\n+\t\t\t\t\t\t'placeholder' => esc_html__( 'Display name', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'type'     => array(\n+\t\t\t\t\t\t'title'   => esc_html__( 'Type', 'learnpress' ),\n+\t\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t\t'text'     => esc_html__( 'Text', 'learnpress' ),\n+\t\t\t\t\t\t\t'textarea' => esc_html__( 'Textarea', 'learnpress' ),\n+\t\t\t\t\t\t\t'checkbox' => esc_html__( 'Checkbox', 'learnpress' ),\n+\t\t\t\t\t\t\t'url'      => esc_html__( 'URL', 'learnpress' ),\n+\t\t\t\t\t\t\t'number'   => esc_html__( 'Number', 'learnpress' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t\t'required' => array(\n+\t\t\t\t\t\t'title' => esc_html__( 'Required?', 'learnpress' ),\n+\t\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'desc'    => esc_html__( 'Custom fields to the registration form.', 'learnpress' ),\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t'id'   => 'lp_profile_general',\n+\t\t\t),\n+\t\t)\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Ftable\u002Ftables-v4.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Ftable\u002Ftables-v4.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Ftable\u002Ftables-v4.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Ftable\u002Ftables-v4.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,219 +1,219 @@\n-\u003C?php\r\n-\u002F**\r\n- * List tables for the database\r\n- *\r\n- * @version 4\r\n- * @since 4.1.6.4\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-$lp_db = LP_Database::getInstance();\r\n-\r\n-$collate = $lp_db->wpdb->has_cap( 'collation' ) ? $lp_db->wpdb->get_charset_collate() : '';\r\n-\r\n-\u002F\u002F Max DB index length. See wp_get_db_schema().\r\n-$max_index_length = 191;\r\n-\r\n-return array(\r\n-\t$lp_db->tb_lp_order_items         => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_order_items} (\r\n-\t\t\torder_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\torder_item_name longtext NOT NULL,\r\n-\t\t\torder_id bigint(20) unsigned NOT NULL DEFAULT 0,\r\n-\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT 0,\r\n-\t\t\titem_type varchar(45) NOT NULL DEFAULT '',\r\n-\t\t\tPRIMARY KEY (order_item_id),\r\n-\t\t    KEY order_id (order_id),\r\n-\t\t    KEY item_id (item_id),\r\n-\t\t    KEY item_type (item_type)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_order_itemmeta      => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_order_itemmeta} (\r\n-\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tlearnpress_order_item_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\tmeta_value varchar(255) NULL,\r\n-\t\t\textra_value longtext,\r\n-\t\t\tPRIMARY KEY (meta_id),\r\n-\t        KEY learnpress_order_item_id (learnpress_order_item_id),\r\n-\t        KEY meta_key (meta_key({$max_index_length})),\r\n-\t        KEY meta_value (meta_value({$max_index_length}))\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_question_answers    => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_question_answers} (\r\n-\t\t\tquestion_answer_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tquestion_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\ttitle text NOT NULL,\r\n-\t\t\t`value` varchar(32) NOT NULL,\r\n-\t\t\t`order` bigint(20) unsigned NOT NULL DEFAULT '1',\r\n-\t\t\tis_true varchar(3),\r\n-\t\t\tPRIMARY KEY (question_answer_id),\r\n-\t\t\tKEY question_id (question_id)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_question_answermeta => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_question_answermeta} (\r\n-\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tlearnpress_question_answer_id bigint(20) unsigned NOT NULL,\r\n-\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\tmeta_value longtext NULL,\r\n-\t\t\tPRIMARY KEY (meta_id),\r\n-\t\t\tKEY question_answer_meta (learnpress_question_answer_id, meta_key(150))\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_quiz_questions      => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_quiz_questions} (\r\n-\t\t\tquiz_question_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tquiz_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tquestion_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tquestion_order bigint(20) unsigned NOT NULL DEFAULT '1',\r\n-\t\t\tPRIMARY KEY (quiz_question_id),\r\n-\t\t\tKEY quiz_id (quiz_id),\r\n-\t\t\tKEY question_id (question_id)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_section_items       => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_section_items} (\r\n-\t\t\tsection_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tsection_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\titem_order bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\titem_type varchar(45),\r\n-\t\t\tPRIMARY KEY (section_item_id),\r\n-\t\t\tKEY section_item (`section_id`, `item_id`)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_sections            => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_sections} (\r\n-\t\t\tsection_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tsection_name varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\tsection_course_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tsection_order bigint(10) unsigned NOT NULL DEFAULT '1',\r\n-\t\t\tsection_description longtext NOT NULL,\r\n-\t\t\tPRIMARY KEY (section_id),\r\n-\t\t\tKEY section_course_id (section_course_id)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_sessions            => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_sessions} (\r\n-\t\t\tsession_id bigint(20) NOT NULL AUTO_INCREMENT,\r\n-\t\t\tsession_key char(32) NOT NULL,\r\n-\t\t\tsession_value longtext NOT NULL,\r\n-\t\t\tsession_expiry bigint(20) NOT NULL,\r\n-\t\t\tUNIQUE KEY session_id (session_id),\r\n-\t\t\tPRIMARY KEY (session_key)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_user_items          => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_items} (\r\n-\t\t\tuser_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tuser_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tstart_time datetime NULL DEFAULT NULL,\r\n-\t\t\tend_time datetime NULL DEFAULT NULL,\r\n-\t\t\titem_type varchar(45) NOT NULL DEFAULT '',\r\n-\t\t\tstatus varchar(45) NOT NULL DEFAULT '',\r\n-\t\t\tgraduation varchar(20) NULL DEFAULT NULL,\r\n-\t\t\taccess_level int(3) NOT NULL DEFAULT 50,\r\n-\t\t\tref_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tref_type varchar(45) DEFAULT '',\r\n-\t\t\tparent_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\tPRIMARY KEY (user_item_id),\r\n-\t\t\tKEY parent_id (parent_id),\r\n-\t\t\tKEY user_id (user_id),\r\n-\t\t\tKEY item_id (item_id),\r\n-\t\t\tKEY item_type (item_type),\r\n-\t\t\tKEY ref_id (ref_id),\r\n-\t\t\tKEY ref_type (ref_type),\r\n-\t\t\tKEY status (status)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_user_itemmeta       => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_itemmeta} (\r\n-\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tlearnpress_user_item_id bigint(20) unsigned NOT NULL,\r\n-\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\tmeta_value varchar(255) NULL,\r\n-\t\t\textra_value longtext NULL,\r\n-\t\t\tPRIMARY KEY (meta_id),\r\n-\t\t\tKEY learnpress_user_item_id (learnpress_user_item_id),\r\n-            KEY meta_key (meta_key({$max_index_length})),\r\n-            KEY meta_value (meta_value({$max_index_length}))\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_user_item_results   => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_item_results} (\r\n-\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\r\n-\t\t\tresult longtext NULL,\r\n-\t\t\tPRIMARY KEY (id),\r\n-\t\t\tKEY user_item_id (user_item_id)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_files               => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_files} (\r\n-\t\t\tfile_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tfile_name varchar(191) NOT NULL DEFAULT '',\r\n-\t\t\tfile_type varchar(100) NOT NULL DEFAULT '',\r\n-\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\titem_type varchar(100) NOT NULL DEFAULT '',\r\n-\t\t\tmethod varchar(10) NOT NULL DEFAULT 'upload',\r\n-\t\t\tfile_path varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\torders int(4) NOT NULL DEFAULT '0',\r\n-\t\t\tcreated_at datetime NULL DEFAULT NULL,\r\n-\t\t\tPRIMARY KEY (file_id),\r\n-\t\t\tKEY file_name (file_name),\r\n-\t\t\tKEY item_id (item_id),\r\n-\t\t\tKEY item_type (item_type)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_courses             => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_courses} (\r\n-\t\t\tID bigint(20) unsigned NOT NULL,\r\n-\t\t\tjson LONGTEXT NOT NULL,\r\n-\t\t\tprice_to_sort FLOAT,\r\n-\t\t\tis_sale int(1) default 0,\r\n-\t\t\tpost_author bigint unsigned,\r\n-\t\t\tpost_date_gmt datetime,\r\n-\t\t\tpost_content LONGTEXT,\r\n-\t\t\tpost_title text not null,\r\n-\t\t\tpost_status varchar(20) default 'publish' not null,\r\n-\t\t\tpost_name varchar(200) default '',\r\n-\t\t\tmenu_order int default 0,\r\n-\t\t\tlang varchar(20),\r\n-\t\t\tPRIMARY KEY (ID),\r\n-\t\t\tKEY post_title (post_title(191)),\r\n-\t\t\tKEY post_status (post_status),\r\n-\t\t\tKEY post_name (post_name(191)),\r\n-\t\t\tKEY id_status (ID, post_status)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_lp_mcp_api_keys        => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_mcp_api_keys} (\r\n-\t\t\tkey_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\tuser_id bigint(20) unsigned NOT NULL,\r\n-\t\t\tdescription varchar(200) NULL DEFAULT NULL,\r\n-\t\t\tpermissions varchar(10) NOT NULL DEFAULT 'read',\r\n-\t\t\tconsumer_key char(64) NOT NULL,\r\n-\t\t\tconsumer_secret char(64) NOT NULL,\r\n-\t\t\ttruncated_key char(7) NOT NULL,\r\n-\t\t\tlast_access datetime NULL DEFAULT NULL,\r\n-\t\t\tcall_count bigint(20) unsigned NOT NULL DEFAULT 0,\r\n-\t\t\tcreated_at datetime NOT NULL,\r\n-\t\t\tupdated_at datetime NULL DEFAULT NULL,\r\n-\t\t\tPRIMARY KEY (key_id),\r\n-\t\t\tUNIQUE KEY consumer_key (consumer_key),\r\n-\t\t\tKEY user_id (user_id)\r\n-\t\t) $collate;\r\n-\t\",\r\n-\t$lp_db->tb_thim_cache             => \"\r\n-\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_thim_cache} (\r\n-\t\t\tkey_cache VARCHAR (100) NOT NULL UNIQUE,\r\n-\t\t\tvalue LONGTEXT NOT NULL,\r\n-\t\t\texpiration VARCHAR (50),\r\n-\t\t\tPRIMARY KEY (key_cache)\r\n-\t\t) $collate;\r\n-\t\",\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * List tables for the database\n+ *\n+ * @version 4\n+ * @since 4.1.6.4\n+ * @version 1.0.1\n+ *\u002F\n+\n+$lp_db = LP_Database::getInstance();\n+\n+$collate = $lp_db->wpdb->has_cap( 'collation' ) ? $lp_db->wpdb->get_charset_collate() : '';\n+\n+\u002F\u002F Max DB index length. See wp_get_db_schema().\n+$max_index_length = 191;\n+\n+return array(\n+\t$lp_db->tb_lp_order_items         => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_order_items} (\n+\t\t\torder_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\torder_item_name longtext NOT NULL,\n+\t\t\torder_id bigint(20) unsigned NOT NULL DEFAULT 0,\n+\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT 0,\n+\t\t\titem_type varchar(45) NOT NULL DEFAULT '',\n+\t\t\tPRIMARY KEY (order_item_id),\n+\t\t    KEY order_id (order_id),\n+\t\t    KEY item_id (item_id),\n+\t\t    KEY item_type (item_type)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_order_itemmeta      => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_order_itemmeta} (\n+\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tlearnpress_order_item_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\n+\t\t\tmeta_value varchar(255) NULL,\n+\t\t\textra_value longtext,\n+\t\t\tPRIMARY KEY (meta_id),\n+\t        KEY learnpress_order_item_id (learnpress_order_item_id),\n+\t        KEY meta_key (meta_key({$max_index_length})),\n+\t        KEY meta_value (meta_value({$max_index_length}))\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_question_answers    => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_question_answers} (\n+\t\t\tquestion_answer_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tquestion_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\ttitle text NOT NULL,\n+\t\t\t`value` varchar(32) NOT NULL,\n+\t\t\t`order` bigint(20) unsigned NOT NULL DEFAULT '1',\n+\t\t\tis_true varchar(3),\n+\t\t\tPRIMARY KEY (question_answer_id),\n+\t\t\tKEY question_id (question_id)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_question_answermeta => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_question_answermeta} (\n+\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tlearnpress_question_answer_id bigint(20) unsigned NOT NULL,\n+\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\n+\t\t\tmeta_value longtext NULL,\n+\t\t\tPRIMARY KEY (meta_id),\n+\t\t\tKEY question_answer_meta (learnpress_question_answer_id, meta_key(150))\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_quiz_questions      => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_quiz_questions} (\n+\t\t\tquiz_question_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tquiz_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tquestion_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tquestion_order bigint(20) unsigned NOT NULL DEFAULT '1',\n+\t\t\tPRIMARY KEY (quiz_question_id),\n+\t\t\tKEY quiz_id (quiz_id),\n+\t\t\tKEY question_id (question_id)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_section_items       => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_section_items} (\n+\t\t\tsection_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tsection_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\titem_order bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\titem_type varchar(45),\n+\t\t\tPRIMARY KEY (section_item_id),\n+\t\t\tKEY section_item (`section_id`, `item_id`)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_sections            => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_sections} (\n+\t\t\tsection_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tsection_name varchar(255) NOT NULL DEFAULT '',\n+\t\t\tsection_course_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tsection_order bigint(10) unsigned NOT NULL DEFAULT '1',\n+\t\t\tsection_description longtext NOT NULL,\n+\t\t\tPRIMARY KEY (section_id),\n+\t\t\tKEY section_course_id (section_course_id)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_sessions            => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_sessions} (\n+\t\t\tsession_id bigint(20) NOT NULL AUTO_INCREMENT,\n+\t\t\tsession_key char(32) NOT NULL,\n+\t\t\tsession_value longtext NOT NULL,\n+\t\t\tsession_expiry bigint(20) NOT NULL,\n+\t\t\tUNIQUE KEY session_id (session_id),\n+\t\t\tPRIMARY KEY (session_key)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_user_items          => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_items} (\n+\t\t\tuser_item_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tuser_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tstart_time datetime NULL DEFAULT NULL,\n+\t\t\tend_time datetime NULL DEFAULT NULL,\n+\t\t\titem_type varchar(45) NOT NULL DEFAULT '',\n+\t\t\tstatus varchar(45) NOT NULL DEFAULT '',\n+\t\t\tgraduation varchar(20) NULL DEFAULT NULL,\n+\t\t\taccess_level int(3) NOT NULL DEFAULT 50,\n+\t\t\tref_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tref_type varchar(45) DEFAULT '',\n+\t\t\tparent_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\tPRIMARY KEY (user_item_id),\n+\t\t\tKEY parent_id (parent_id),\n+\t\t\tKEY user_id (user_id),\n+\t\t\tKEY item_id (item_id),\n+\t\t\tKEY item_type (item_type),\n+\t\t\tKEY ref_id (ref_id),\n+\t\t\tKEY ref_type (ref_type),\n+\t\t\tKEY status (status)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_user_itemmeta       => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_itemmeta} (\n+\t\t\tmeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tlearnpress_user_item_id bigint(20) unsigned NOT NULL,\n+\t\t\tmeta_key varchar(255) NOT NULL DEFAULT '',\n+\t\t\tmeta_value varchar(255) NULL,\n+\t\t\textra_value longtext NULL,\n+\t\t\tPRIMARY KEY (meta_id),\n+\t\t\tKEY learnpress_user_item_id (learnpress_user_item_id),\n+            KEY meta_key (meta_key({$max_index_length})),\n+            KEY meta_value (meta_value({$max_index_length}))\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_user_item_results   => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_user_item_results} (\n+\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\n+\t\t\tresult longtext NULL,\n+\t\t\tPRIMARY KEY (id),\n+\t\t\tKEY user_item_id (user_item_id)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_files               => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_files} (\n+\t\t\tfile_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tfile_name varchar(191) NOT NULL DEFAULT '',\n+\t\t\tfile_type varchar(100) NOT NULL DEFAULT '',\n+\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\titem_type varchar(100) NOT NULL DEFAULT '',\n+\t\t\tmethod varchar(10) NOT NULL DEFAULT 'upload',\n+\t\t\tfile_path varchar(255) NOT NULL DEFAULT '',\n+\t\t\torders int(4) NOT NULL DEFAULT '0',\n+\t\t\tcreated_at datetime NULL DEFAULT NULL,\n+\t\t\tPRIMARY KEY (file_id),\n+\t\t\tKEY file_name (file_name),\n+\t\t\tKEY item_id (item_id),\n+\t\t\tKEY item_type (item_type)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_courses             => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_courses} (\n+\t\t\tID bigint(20) unsigned NOT NULL,\n+\t\t\tjson LONGTEXT NOT NULL,\n+\t\t\tprice_to_sort FLOAT,\n+\t\t\tis_sale int(1) default 0,\n+\t\t\tpost_author bigint unsigned,\n+\t\t\tpost_date_gmt datetime,\n+\t\t\tpost_content LONGTEXT,\n+\t\t\tpost_title text not null,\n+\t\t\tpost_status varchar(20) default 'publish' not null,\n+\t\t\tpost_name varchar(200) default '',\n+\t\t\tmenu_order int default 0,\n+\t\t\tlang varchar(20),\n+\t\t\tPRIMARY KEY (ID),\n+\t\t\tKEY post_title (post_title(191)),\n+\t\t\tKEY post_status (post_status),\n+\t\t\tKEY post_name (post_name(191)),\n+\t\t\tKEY id_status (ID, post_status)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_lp_mcp_api_keys        => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_lp_mcp_api_keys} (\n+\t\t\tkey_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\tuser_id bigint(20) unsigned NOT NULL,\n+\t\t\tdescription varchar(200) NULL DEFAULT NULL,\n+\t\t\tpermissions varchar(10) NOT NULL DEFAULT 'read',\n+\t\t\tconsumer_key char(64) NOT NULL,\n+\t\t\tconsumer_secret char(64) NOT NULL,\n+\t\t\ttruncated_key char(7) NOT NULL,\n+\t\t\tlast_access datetime NULL DEFAULT NULL,\n+\t\t\tcall_count bigint(20) unsigned NOT NULL DEFAULT 0,\n+\t\t\tcreated_at datetime NOT NULL,\n+\t\t\tupdated_at datetime NULL DEFAULT NULL,\n+\t\t\tPRIMARY KEY (key_id),\n+\t\t\tUNIQUE KEY consumer_key (consumer_key),\n+\t\t\tKEY user_id (user_id)\n+\t\t) $collate;\n+\t\",\n+\t$lp_db->tb_thim_cache             => \"\n+\t\tCREATE TABLE IF NOT EXISTS {$lp_db->tb_thim_cache} (\n+\t\t\tkey_cache VARCHAR (100) NOT NULL UNIQUE,\n+\t\t\tvalue LONGTEXT NOT NULL,\n+\t\t\texpiration VARCHAR (50),\n+\t\t\tPRIMARY KEY (key_cache)\n+\t\t) $collate;\n+\t\",\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fwidgets\u002Fcourse\u002Ffilter-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fwidgets\u002Fcourse\u002Ffilter-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fconfig\u002Fwidgets\u002Fcourse\u002Ffilter-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fconfig\u002Fwidgets\u002Fcourse\u002Ffilter-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\u002F**\r\n- * Fields config widget Course Filter.\r\n- *\u002F\r\n-return apply_filters(\r\n-\t'learn-press\u002Fwidget\u002Fcourse-filter\u002Fsettings',\r\n-\tarray(\r\n-\t\t'title'                     => array(\r\n-\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'std'   => esc_html__( 'Course Filter', 'learnpress' ),\r\n-\t\t),\r\n-\t\t'number_level_category'     => array(\r\n-\t\t\t'label' => __( 'Level of category to display on Frontend', 'learnpress' ),\r\n-\t\t\t'type'  => 'number',\r\n-\t\t\t'std'   => 2,\r\n-\t\t\t'min'   => 1,\r\n-\t\t),\r\n-\t\t'class_list_courses_target' => array(\r\n-\t\t\t'label' => __( 'Class of list courses want to filter', 'learnpress' ),\r\n-\t\t\t'type'  => 'text',\r\n-\t\t\t'std'   => '.lp-list-courses-default',\r\n-\t\t),\r\n-\t\t'show_in_rest'              => array(\r\n-\t\t\t'label' => __( 'Load widget via REST', 'learnpress' ),\r\n-\t\t\t'type'  => 'checkbox',\r\n-\t\t\t'std'   => 1,\r\n-\t\t),\r\n-\t\t'hide_count_zero'           => array(\r\n-\t\t\t'label' => __( 'Hide field has count is zero', 'learnpress' ),\r\n-\t\t\t'type'  => 'checkbox',\r\n-\t\t\t'std'   => 1,\r\n-\t\t),\r\n-\t\t'search_suggestion'         => array(\r\n-\t\t\t'label' => __( 'Enable Keyword Search Suggestion', 'learnpress' ),\r\n-\t\t\t'type'  => 'checkbox',\r\n-\t\t\t'std'   => 1,\r\n-\t\t),\r\n-\t\t'fields_order'              => array(\r\n-\t\t\t'label' => '',\r\n-\t\t\t'type'  => 'hidden',\r\n-\t\t),\r\n-\t\t'fields'                    => array(\r\n-\t\t\t'label'   => __( 'Fields', 'learnpress' ),\r\n-\t\t\t'type'    => 'sortable-checkbox',\r\n-\t\t\t'options' => array(\r\n-\t\t\t\t'search'     => array(\r\n-\t\t\t\t\t'id'    => 'search',\r\n-\t\t\t\t\t'label' => esc_html__( 'Keyword', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'price'      => array(\r\n-\t\t\t\t\t'id'    => 'price',\r\n-\t\t\t\t\t'label' => esc_html__( 'Price', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'category'   => array(\r\n-\t\t\t\t\t'id'    => 'category',\r\n-\t\t\t\t\t'label' => esc_html__( 'Course Category', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'tag'        => array(\r\n-\t\t\t\t\t'id'    => 'tag',\r\n-\t\t\t\t\t'label' => esc_html__( 'Course Tag', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'author'     => array(\r\n-\t\t\t\t\t'id'    => 'author',\r\n-\t\t\t\t\t'label' => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'level'      => array(\r\n-\t\t\t\t\t'id'    => 'level',\r\n-\t\t\t\t\t'label' => esc_html__( 'Level', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'type'       => array(\r\n-\t\t\t\t\t'id'    => 'type',\r\n-\t\t\t\t\t'label' => esc_html__( 'Type (Online\u002FOffline)', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn_submit' => array(\r\n-\t\t\t\t\t'id'    => 'btn_submit',\r\n-\t\t\t\t\t'label' => esc_html__( 'Button Submit', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn_reset'  => array(\r\n-\t\t\t\t\t'id'    => 'level',\r\n-\t\t\t\t\t'label' => esc_html__( 'Button Reset', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'std'     => [\r\n-\t\t\t\t'search',\r\n-\t\t\t\t'price',\r\n-\t\t\t\t'category',\r\n-\t\t\t\t'tag',\r\n-\t\t\t\t'author',\r\n-\t\t\t\t'level',\r\n-\t\t\t\t'type',\r\n-\t\t\t\t'btn_submit',\r\n-\t\t\t\t'btn_reset',\r\n-\t\t\t],\r\n-\t\t),\r\n-\t)\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * Fields config widget Course Filter.\n+ *\u002F\n+return apply_filters(\n+\t'learn-press\u002Fwidget\u002Fcourse-filter\u002Fsettings',\n+\tarray(\n+\t\t'title'                     => array(\n+\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\n+\t\t\t'type'  => 'text',\n+\t\t\t'std'   => esc_html__( 'Course Filter', 'learnpress' ),\n+\t\t),\n+\t\t'number_level_category'     => array(\n+\t\t\t'label' => __( 'Level of category to display on Frontend', 'learnpress' ),\n+\t\t\t'type'  => 'number',\n+\t\t\t'std'   => 2,\n+\t\t\t'min'   => 1,\n+\t\t),\n+\t\t'class_list_courses_target' => array(\n+\t\t\t'label' => __( 'Class of list courses want to filter', 'learnpress' ),\n+\t\t\t'type'  => 'text',\n+\t\t\t'std'   => '.lp-list-courses-default',\n+\t\t),\n+\t\t'show_in_rest'              => array(\n+\t\t\t'label' => __( 'Load widget via REST', 'learnpress' ),\n+\t\t\t'type'  => 'checkbox',\n+\t\t\t'std'   => 1,\n+\t\t),\n+\t\t'hide_count_zero'           => array(\n+\t\t\t'label' => __( 'Hide field has count is zero', 'learnpress' ),\n+\t\t\t'type'  => 'checkbox',\n+\t\t\t'std'   => 1,\n+\t\t),\n+\t\t'search_suggestion'         => array(\n+\t\t\t'label' => __( 'Enable Keyword Search Suggestion', 'learnpress' ),\n+\t\t\t'type'  => 'checkbox',\n+\t\t\t'std'   => 1,\n+\t\t),\n+\t\t'fields_order'              => array(\n+\t\t\t'label' => '',\n+\t\t\t'type'  => 'hidden',\n+\t\t),\n+\t\t'fields'                    => array(\n+\t\t\t'label'   => __( 'Fields', 'learnpress' ),\n+\t\t\t'type'    => 'sortable-checkbox',\n+\t\t\t'options' => array(\n+\t\t\t\t'search'     => array(\n+\t\t\t\t\t'id'    => 'search',\n+\t\t\t\t\t'label' => esc_html__( 'Keyword', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'price'      => array(\n+\t\t\t\t\t'id'    => 'price',\n+\t\t\t\t\t'label' => esc_html__( 'Price', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'category'   => array(\n+\t\t\t\t\t'id'    => 'category',\n+\t\t\t\t\t'label' => esc_html__( 'Course Category', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'tag'        => array(\n+\t\t\t\t\t'id'    => 'tag',\n+\t\t\t\t\t'label' => esc_html__( 'Course Tag', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'author'     => array(\n+\t\t\t\t\t'id'    => 'author',\n+\t\t\t\t\t'label' => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'level'      => array(\n+\t\t\t\t\t'id'    => 'level',\n+\t\t\t\t\t'label' => esc_html__( 'Level', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'type'       => array(\n+\t\t\t\t\t'id'    => 'type',\n+\t\t\t\t\t'label' => esc_html__( 'Type (Online\u002FOffline)', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'btn_submit' => array(\n+\t\t\t\t\t'id'    => 'btn_submit',\n+\t\t\t\t\t'label' => esc_html__( 'Button Submit', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'btn_reset'  => array(\n+\t\t\t\t\t'id'    => 'level',\n+\t\t\t\t\t'label' => esc_html__( 'Button Reset', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'std'     => [\n+\t\t\t\t'search',\n+\t\t\t\t'price',\n+\t\t\t\t'category',\n+\t\t\t\t'tag',\n+\t\t\t\t'author',\n+\t\t\t\t'level',\n+\t\t\t\t'type',\n+\t\t\t\t'btn_submit',\n+\t\t\t\t'btn_reset',\n+\t\t\t],\n+\t\t),\n+\t)\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002FBILLING.SUBSCRIPTION.EXPIRED.md \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002FBILLING.SUBSCRIPTION.EXPIRED.md\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002FBILLING.SUBSCRIPTION.EXPIRED.md\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002FBILLING.SUBSCRIPTION.EXPIRED.md\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-# BILLING.SUBSCRIPTION.EXPIRED - Giải thích chi tiết\r\n-\r\n----\r\n-\r\n-## 1. Khi nào thì nhận được sự kiện `BILLING.SUBSCRIPTION.EXPIRED`?\r\n-\r\n-✅ **Sự kiện này CHỈ bắn về khi gói đăng ký của bạn có Điểm Kết Thúc (Fixed Term).**\r\n-\r\n-Trong thuộc tính `billing_cycles` khi tạo Plan trên PayPal, có một trường quan trọng là `total_cycles`:\r\n-\r\n-| Giá trị `total_cycles` | Loại gói | Hành vi | Nhận được `EXPIRED`? |\r\n-|---|---|---|---|\r\n-| `0` | **Gói vô hạn (Infinite)** | Gói sẽ chạy mãi mãi cho đến khi khách hàng hủy hoặc thanh toán lỗi | ❌ **KHÔNG BAO GIỜ** |\r\n-| `> 0` (ví dụ `12`) | **Gói có kỳ hạn cố định** | Sau khi khách hàng đã thanh toán đủ số kỳ, gói sẽ tự động kết thúc | ✅ PayPal sẽ gửi sự kiện này |\r\n-\r\n----\r\n-\r\n-## 2. Trường hợp: \"Hết 1 tháng là phải gia hạn\"\r\n-\r\n-Nếu bạn đang xây dựng mô hình:\r\n-> Khách hàng thanh toán từng tháng một, hệ thống tự động trừ tiền hàng tháng (Auto-renew)\r\n-\r\n-✅ **Cấu hình đúng:**\r\n-> Bạn **PHẢI** để `total_cycles: 0`\r\n-\r\n-### Kết quả với cấu hình đúng:\r\n-| Sự kiện | Khi nào nhận được |\r\n-|---|---|\r\n-| `PAYMENT.SALE.COMPLETED` | Mỗi tháng khi trừ tiền thành công |\r\n-| `BILLING.SUBSCRIPTION.CANCELLED` | Khi khách hàng chủ động nhấn Hủy gói |\r\n-| `BILLING.SUBSCRIPTION.SUSPENDED` | Khi thanh toán thất bại sau 3 lần thử |\r\n-| `BILLING.SUBSCRIPTION.EXPIRED` | ❌ **Bạn sẽ KHÔNG BAO GIỜ nhận được sự kiện này** |\r\n-\r\n----\r\n-\r\n-## 3. Tại sao không dùng `EXPIRED` cho gia hạn hàng tháng?\r\n-\r\n-> 💡 Theo triết lý thiết kế của PayPal:\r\n->\r\n-> **`Expired` nghĩa là gói dịch vụ đã hoàn tất vòng đời của nó hoàn toàn.**\r\n->\r\n-> Ví dụ đúng dùng `EXPIRED`:\r\n-> - Gói trả góp 12 tháng đã trả xong hết\r\n-> - Gói khóa học 6 tháng đã kết thúc\r\n-> - Gói thử nghiệm 14 ngày đã hết hạn\r\n-\r\n-Còn mô hình thuê bao phần mềm (SaaS), thành viên hàng tháng:\r\n-✅ Luôn là gói vô hạn `total_cycles = 0`\r\n-✅ Chỉ dừng khi một trong hai bên chủ động ngắt\r\n-\r\n----\r\n-\r\n-## ❌ Lỗi phổ biến nhất\r\n-\r\n-Rất nhiều nhà phát triển sai lầm khi cấu hình `total_cycles: 1` cho gói 1 tháng và mong đợi nhận `EXPIRED` mỗi cuối tháng để gia hạn.\r\n-\r\n-👉 **Đây là cách sai hoàn toàn theo thiết kế của PayPal.**\r\n-\r\n+# BILLING.SUBSCRIPTION.EXPIRED - Giải thích chi tiết\n+\n+---\n+\n+## 1. Khi nào thì nhận được sự kiện `BILLING.SUBSCRIPTION.EXPIRED`?\n+\n+✅ **Sự kiện này CHỈ bắn về khi gói đăng ký của bạn có Điểm Kết Thúc (Fixed Term).**\n+\n+Trong thuộc tính `billing_cycles` khi tạo Plan trên PayPal, có một trường quan trọng là `total_cycles`:\n+\n+| Giá trị `total_cycles` | Loại gói | Hành vi | Nhận được `EXPIRED`? |\n+|---|---|---|---|\n+| `0` | **Gói vô hạn (Infinite)** | Gói sẽ chạy mãi mãi cho đến khi khách hàng hủy hoặc thanh toán lỗi | ❌ **KHÔNG BAO GIỜ** |\n+| `> 0` (ví dụ `12`) | **Gói có kỳ hạn cố định** | Sau khi khách hàng đã thanh toán đủ số kỳ, gói sẽ tự động kết thúc | ✅ PayPal sẽ gửi sự kiện này |\n+\n+---\n+\n+## 2. Trường hợp: \"Hết 1 tháng là phải gia hạn\"\n+\n+Nếu bạn đang xây dựng mô hình:\n+> Khách hàng thanh toán từng tháng một, hệ thống tự động trừ tiền hàng tháng (Auto-renew)\n+\n+✅ **Cấu hình đúng:**\n+> Bạn **PHẢI** để `total_cycles: 0`\n+\n+### Kết quả với cấu hình đúng:\n+| Sự kiện | Khi nào nhận được |\n+|---|---|\n+| `PAYMENT.SALE.COMPLETED` | Mỗi tháng khi trừ tiền thành công |\n+| `BILLING.SUBSCRIPTION.CANCELLED` | Khi khách hàng chủ động nhấn Hủy gói |\n+| `BILLING.SUBSCRIPTION.SUSPENDED` | Khi thanh toán thất bại sau 3 lần thử |\n+| `BILLING.SUBSCRIPTION.EXPIRED` | ❌ **Bạn sẽ KHÔNG BAO GIỜ nhận được sự kiện này** |\n+\n+---\n+\n+## 3. Tại sao không dùng `EXPIRED` cho gia hạn hàng tháng?\n+\n+> 💡 Theo triết lý thiết kế của PayPal:\n+>\n+> **`Expired` nghĩa là gói dịch vụ đã hoàn tất vòng đời của nó hoàn toàn.**\n+>\n+> Ví dụ đúng dùng `EXPIRED`:\n+> - Gói trả góp 12 tháng đã trả xong hết\n+> - Gói khóa học 6 tháng đã kết thúc\n+> - Gói thử nghiệm 14 ngày đã hết hạn\n+\n+Còn mô hình thuê bao phần mềm (SaaS), thành viên hàng tháng:\n+✅ Luôn là gói vô hạn `total_cycles = 0`\n+✅ Chỉ dừng khi một trong hai bên chủ động ngắt\n+\n+---\n+\n+## ❌ Lỗi phổ biến nhất\n+\n+Rất nhiều nhà phát triển sai lầm khi cấu hình `total_cycles: 1` cho gói 1 tháng và mong đợi nhận `EXPIRED` mỗi cuối tháng để gia hạn.\n+\n+👉 **Đây là cách sai hoàn toàn theo thiết kế của PayPal.**\n+\n PayPal sẽ không tự động gia hạn gói có `total_cycles > 0`. Khi đến hạn, gói sẽ kết thúc vĩnh viễn và bạn không thể gia hạn nó nữa.\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec.md \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec.md\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec.md\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec.md\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,156 +1,156 @@\n-# PayPal Subscription Webhook Specification\r\n-\r\n-> **Document Version:** 1.0\r\n-> **Date:** 2026-04-07\r\n-> **Reference:** https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F\r\n-\r\n----\r\n-\r\n-## Overview\r\n-\r\n-This document defines the complete logic for handling PayPal subscription webhook callbacks in LearnPress. All events follow PayPal's official documentation and LearnPress subscription lifecycle rules.\r\n-\r\n----\r\n-\r\n-## 1. Webhook Endpoint\r\n-\r\n-| Item | Value |\r\n-|---|---|\r\n-| **Endpoint URL** | `\u002Fwp-json\u002Flp\u002Fv1\u002Fgateways\u002Fpaypal\u002Fsubscription-webhook` |\r\n-| **Method** | `POST` |\r\n-| **Authentication** | PayPal webhook signature verification |\r\n-| **Response Status** | Always return `200 OK` for valid requests |\r\n-\r\n-✅ **Important:** PayPal will retry webhook delivery **exponentially** for up to 3 days for any non-2xx response. Always return 200 even for unhandled or duplicate events.\r\n-\r\n----\r\n-\r\n-## 2. Processing Pipeline\r\n-\r\n-All webhook events go through this exact order:\r\n-\r\n-```\r\n-1. 🔐 Signature Verification\r\n-    ├─ Extract all PayPal headers\r\n-    ├─ Call PayPal verify API endpoint\r\n-    └─ FAIL → Return 403 (do not process)\r\n-\r\n-2. 🧾 Payload Validation\r\n-    ├─ Parse JSON payload\r\n-    ├─ Validate event structure\r\n-    └─ FAIL → Return 400\r\n-\r\n-3. 🆔 Event Duplicate Check\r\n-    ├─ Check if event ID has been processed before\r\n-    └─ ALREADY_PROCESSED → Return 200 OK\r\n-\r\n-4. 📦 Event Dispatching\r\n-    ├─ Lookup event handler from event map\r\n-    ├─ Execute handler logic\r\n-    └─ NO_HANDLER → Return 200 OK\r\n-\r\n-5. ✅ Mark Processed\r\n-    └─ Store event ID as processed\r\n-\r\n-6. 📨 Return Response\r\n-    └─ Always 200 OK\r\n-```\r\n-\r\n----\r\n-\r\n-## 3. Event Handler Matrix\r\n-\r\n-This is the official mapping of PayPal event types to LearnPress actions:\r\n-\r\n-| PayPal Event Type | LearnPress Action | Order Status | Subscription Status | Notes |\r\n-|---|---|---|---|---|\r\n-| **`BILLING.SUBSCRIPTION.CREATED`** | Store PayPal subscription ID | `pending` | `pending` | First event received when user subscribes |\r\n-| **`BILLING.SUBSCRIPTION.ACTIVATED`** | Activate subscription, grant course access | `completed` | `active` | Payment successfully authorized |\r\n-| **`BILLING.SUBSCRIPTION.CANCELLED`** | Schedule cancellation at period end | `completed` | `active` | ❗ **DO NOT CANCEL IMMEDIATELY** - user paid for current period |\r\n-| **`BILLING.SUBSCRIPTION.SUSPENDED`** | Suspend subscription, revoke access | `on-hold` | `on-hold` | PayPal suspended after failed payments |\r\n-| **`BILLING.SUBSCRIPTION.EXPIRED`** | Expire subscription permanently | `completed` | `expired` | Subscription reached end date |\r\n-| **`BILLING.SUBSCRIPTION.PAYMENT.FAILED`** | Log failure, send notification | `failed` | `active` | PayPal will retry 3 times before suspending |\r\n-| **`PAYMENT.SALE.COMPLETED`** | Process renewal payment, extend subscription | `completed` | `active` | Recurring payment received successfully |\r\n-| **`PAYMENT.SALE.REFUNDED`** | Refund order, adjust access | `refunded` | *depends* | Full refund = revoke access immediately |\r\n-| **`PAYMENT.SALE.REVERSED`** | Chargeback \u002F dispute | `refunded` | `suspended` | ❗ **IMMEDIATELY REVOKE ACCESS** |\r\n-\r\n----\r\n-\r\n-## 4. State Transition Rules\r\n-\r\n-### ✅ Normal Successful Flow\r\n-```\r\n-CREATED → ACTIVATED → [PAYMENT.COMPLETED] (repeat monthly) → [CANCELLED \u002F EXPIRED]\r\n-```\r\n-\r\n-### ❌ Failed Payment Flow\r\n-```\r\n-PAYMENT.FAILED → (Retry 1) → (Retry 2) → (Retry 3) → SUSPENDED\r\n-```\r\n-\r\n-### ⚠️ Chargeback Flow\r\n-```\r\n-PAYMENT.REVERSED → SUSPENDED (immediately)\r\n-```\r\n-\r\n----\r\n-\r\n-## 5. Idempotency Rules\r\n-\r\n-All handlers **MUST** be idempotent:\r\n-1. Always check existing state before making changes\r\n-2. Never process the same event ID twice\r\n-3. Processing an event multiple times produces exactly the same result\r\n-4. No side effects on duplicate delivery\r\n-\r\n-Stored event IDs are kept for **90 days** after processing.\r\n-\r\n----\r\n-\r\n-## 6. Error Handling\r\n-\r\n-| Scenario | Response Code | Action |\r\n-|---|---|---|\r\n-| Invalid signature | `403 Forbidden` | Log error, do not process |\r\n-| Invalid JSON payload | `400 Bad Request` | Log error |\r\n-| Missing required headers | `400 Bad Request` | Log error |\r\n-| Gateway not enabled | `404 Not Found` | Log error |\r\n-| Duplicate event | `200 OK` | Silently ignore |\r\n-| Unhandled event type | `200 OK` | Log for reference |\r\n-| Handler execution failed | `200 OK` | Log full error, PayPal will retry |\r\n-\r\n----\r\n-\r\n-## 7. Logging Requirements\r\n-\r\n-All webhook events **MUST** log:\r\n-- Event ID\r\n-- Event type\r\n-- PayPal subscription ID\r\n-- Processing result (success\u002Ffailure)\r\n-- Full error message on failure\r\n-\r\n-Logs are stored in: `wp-content\u002Fuploads\u002Flearnpress\u002Flogs\u002Fpaypal-webhooks.log`\r\n-\r\n----\r\n-\r\n-## 8. Testing Scenarios\r\n-\r\n-Required test cases for implementation:\r\n-\r\n-| Test Case | Expected Result |\r\n-|---|---|\r\n-| Valid signature | Event processed successfully |\r\n-| Invalid signature | 403 response, no changes |\r\n-| Duplicate event ID | 200 response, no changes |\r\n-| Unhandled event type | 200 response, logged |\r\n-| Order not found | 200 response, logged |\r\n-| Event processed out of order | State remains correct |\r\n-\r\n----\r\n-\r\n-## Reference Documents\r\n-\r\n-- [PayPal Subscription Webhooks Official Docs](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F)\r\n-- [PayPal Webhook Verification](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Fwebhooks\u002Fv1\u002F#verify-webhook-signature)\r\n-- [LearnPress Subscription Lifecycle](internal:\u002F\u002Fdocs\u002Fsubscriptions\u002Flifecycle.md)\r\n+# PayPal Subscription Webhook Specification\n+\n+> **Document Version:** 1.0\n+> **Date:** 2026-04-07\n+> **Reference:** https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F\n+\n+---\n+\n+## Overview\n+\n+This document defines the complete logic for handling PayPal subscription webhook callbacks in LearnPress. All events follow PayPal's official documentation and LearnPress subscription lifecycle rules.\n+\n+---\n+\n+## 1. Webhook Endpoint\n+\n+| Item | Value |\n+|---|---|\n+| **Endpoint URL** | `\u002Fwp-json\u002Flp\u002Fv1\u002Fgateways\u002Fpaypal\u002Fsubscription-webhook` |\n+| **Method** | `POST` |\n+| **Authentication** | PayPal webhook signature verification |\n+| **Response Status** | Always return `200 OK` for valid requests |\n+\n+✅ **Important:** PayPal will retry webhook delivery **exponentially** for up to 3 days for any non-2xx response. Always return 200 even for unhandled or duplicate events.\n+\n+---\n+\n+## 2. Processing Pipeline\n+\n+All webhook events go through this exact order:\n+\n+```\n+1. 🔐 Signature Verification\n+    ├─ Extract all PayPal headers\n+    ├─ Call PayPal verify API endpoint\n+    └─ FAIL → Return 403 (do not process)\n+\n+2. 🧾 Payload Validation\n+    ├─ Parse JSON payload\n+    ├─ Validate event structure\n+    └─ FAIL → Return 400\n+\n+3. 🆔 Event Duplicate Check\n+    ├─ Check if event ID has been processed before\n+    └─ ALREADY_PROCESSED → Return 200 OK\n+\n+4. 📦 Event Dispatching\n+    ├─ Lookup event handler from event map\n+    ├─ Execute handler logic\n+    └─ NO_HANDLER → Return 200 OK\n+\n+5. ✅ Mark Processed\n+    └─ Store event ID as processed\n+\n+6. 📨 Return Response\n+    └─ Always 200 OK\n+```\n+\n+---\n+\n+## 3. Event Handler Matrix\n+\n+This is the official mapping of PayPal event types to LearnPress actions:\n+\n+| PayPal Event Type | LearnPress Action | Order Status | Subscription Status | Notes |\n+|---|---|---|---|---|\n+| **`BILLING.SUBSCRIPTION.CREATED`** | Store PayPal subscription ID | `pending` | `pending` | First event received when user subscribes |\n+| **`BILLING.SUBSCRIPTION.ACTIVATED`** | Activate subscription, grant course access | `completed` | `active` | Payment successfully authorized |\n+| **`BILLING.SUBSCRIPTION.CANCELLED`** | Schedule cancellation at period end | `completed` | `active` | ❗ **DO NOT CANCEL IMMEDIATELY** - user paid for current period |\n+| **`BILLING.SUBSCRIPTION.SUSPENDED`** | Suspend subscription, revoke access | `on-hold` | `on-hold` | PayPal suspended after failed payments |\n+| **`BILLING.SUBSCRIPTION.EXPIRED`** | Expire subscription permanently | `completed` | `expired` | Subscription reached end date |\n+| **`BILLING.SUBSCRIPTION.PAYMENT.FAILED`** | Log failure, send notification | `failed` | `active` | PayPal will retry 3 times before suspending |\n+| **`PAYMENT.SALE.COMPLETED`** | Process renewal payment, extend subscription | `completed` | `active` | Recurring payment received successfully |\n+| **`PAYMENT.SALE.REFUNDED`** | Refund order, adjust access | `refunded` | *depends* | Full refund = revoke access immediately |\n+| **`PAYMENT.SALE.REVERSED`** | Chargeback \u002F dispute | `refunded` | `suspended` | ❗ **IMMEDIATELY REVOKE ACCESS** |\n+\n+---\n+\n+## 4. State Transition Rules\n+\n+### ✅ Normal Successful Flow\n+```\n+CREATED → ACTIVATED → [PAYMENT.COMPLETED] (repeat monthly) → [CANCELLED \u002F EXPIRED]\n+```\n+\n+### ❌ Failed Payment Flow\n+```\n+PAYMENT.FAILED → (Retry 1) → (Retry 2) → (Retry 3) → SUSPENDED\n+```\n+\n+### ⚠️ Chargeback Flow\n+```\n+PAYMENT.REVERSED → SUSPENDED (immediately)\n+```\n+\n+---\n+\n+## 5. Idempotency Rules\n+\n+All handlers **MUST** be idempotent:\n+1. Always check existing state before making changes\n+2. Never process the same event ID twice\n+3. Processing an event multiple times produces exactly the same result\n+4. No side effects on duplicate delivery\n+\n+Stored event IDs are kept for **90 days** after processing.\n+\n+---\n+\n+## 6. Error Handling\n+\n+| Scenario | Response Code | Action |\n+|---|---|---|\n+| Invalid signature | `403 Forbidden` | Log error, do not process |\n+| Invalid JSON payload | `400 Bad Request` | Log error |\n+| Missing required headers | `400 Bad Request` | Log error |\n+| Gateway not enabled | `404 Not Found` | Log error |\n+| Duplicate event | `200 OK` | Silently ignore |\n+| Unhandled event type | `200 OK` | Log for reference |\n+| Handler execution failed | `200 OK` | Log full error, PayPal will retry |\n+\n+---\n+\n+## 7. Logging Requirements\n+\n+All webhook events **MUST** log:\n+- Event ID\n+- Event type\n+- PayPal subscription ID\n+- Processing result (success\u002Ffailure)\n+- Full error message on failure\n+\n+Logs are stored in: `wp-content\u002Fuploads\u002Flearnpress\u002Flogs\u002Fpaypal-webhooks.log`\n+\n+---\n+\n+## 8. Testing Scenarios\n+\n+Required test cases for implementation:\n+\n+| Test Case | Expected Result |\n+|---|---|\n+| Valid signature | Event processed successfully |\n+| Invalid signature | 403 response, no changes |\n+| Duplicate event ID | 200 response, no changes |\n+| Unhandled event type | 200 response, logged |\n+| Order not found | 200 response, logged |\n+| Event processed out of order | State remains correct |\n+\n+---\n+\n+## Reference Documents\n+\n+- [PayPal Subscription Webhooks Official Docs](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F)\n+- [PayPal Webhook Verification](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Fwebhooks\u002Fv1\u002F#verify-webhook-signature)\n+- [LearnPress Subscription Lifecycle](internal:\u002F\u002Fdocs\u002Fsubscriptions\u002Flifecycle.md)\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec-vi.md \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec-vi.md\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec-vi.md\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fgateways\u002Fpaypal\u002Fpaypal-webhook-spec-vi.md\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,156 +1,156 @@\n-# Tài liệu Xử lý Webhook Đăng ký PayPal\r\n-\r\n-> **Phiên bản tài liệu:** 1.0\r\n-> **Ngày:** 07\u002F04\u002F2026\r\n-> **Tham khảo:** https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F\r\n-\r\n----\r\n-\r\n-## Tổng quan\r\n-\r\n-Tài liệu này định nghĩa đầy đủ logic xử lý callback webhook từ PayPal cho hệ thống đăng ký trong LearnPress. Tất cả các sự kiện đều tuân thủ tài liệu chính thức của PayPal và quy trình vòng đời đăng ký của LearnPress.\r\n-\r\n----\r\n-\r\n-## 1. Điểm cuối Webhook\r\n-\r\n-| Thông tin | Giá trị |\r\n-|---|---|\r\n-| **URL Endpoint** | `\u002Fwp-json\u002Flp\u002Fv1\u002Fgateways\u002Fpaypal\u002Fsubscription-webhook` |\r\n-| **Phương thức** | `POST` |\r\n-| **Xác thực** | Xác minh chữ ký webhook của PayPal |\r\n-| **Trạng thái phản hồi** | Luôn trả về `200 OK` cho các yêu cầu hợp lệ |\r\n-\r\n-✅ **Quan trọng:** PayPal sẽ thử gửi lại webhook **theo cấp số nhân** trong vòng 3 ngày nếu nhận được phản hồi không phải 2xx. Luôn trả về 200 ngay cả đối với sự kiện không được hỗ trợ hoặc đã xử lý rồi.\r\n-\r\n----\r\n-\r\n-## 2. Quy trình xử lý\r\n-\r\n-Tất cả sự kiện webhook đều đi qua đúng trình tự sau:\r\n-\r\n-```\r\n-1. 🔐 Xác minh chữ ký\r\n-    ├─ Trích xuất tất cả header của PayPal\r\n-    ├─ Gọi API xác minh của PayPal\r\n-    └─ LỖI → Trả về 403, không xử lý tiếp\r\n-\r\n-2. 🧾 Kiểm tra dữ liệu gửi lên\r\n-    ├─ Phân tích payload JSON\r\n-    ├─ Kiểm tra cấu trúc sự kiện\r\n-    └─ LỖI → Trả về 400\r\n-\r\n-3. 🆔 Kiểm tra sự kiện trùng lặp\r\n-    ├─ Kiểm tra xem ID sự kiện đã được xử lý chưa\r\n-    └─ ĐÃ XỬ LÝ → Trả về 200 OK\r\n-\r\n-4. 📦 Phân phối sự kiện\r\n-    ├─ Tìm handler tương ứng với loại sự kiện\r\n-    ├─ Thực thi logic xử lý\r\n-    └─ KHÔNG CÓ HANDLER → Trả về 200 OK\r\n-\r\n-5. ✅ Đánh dấu đã xử lý\r\n-    └─ Lưu ID sự kiện vào database\r\n-\r\n-6. 📨 Trả về phản hồi\r\n-    └─ Luôn là 200 OK\r\n-```\r\n-\r\n----\r\n-\r\n-## 3. Bảng ánh xạ sự kiện\r\n-\r\n-Đây là bảng ánh xạ chính thức các loại sự kiện PayPal với hành động tương ứng trong LearnPress:\r\n-\r\n-| Loại sự kiện PayPal | Hành động LearnPress | Trạng thái Đơn hàng | Trạng thái Đăng ký | Ghi chú |\r\n-|---|---|---|---|---|\r\n-| **`BILLING.SUBSCRIPTION.CREATED`** | Lưu ID đăng ký PayPal | `pending` (chờ xử lý) | `pending` | Sự kiện đầu tiên nhận được khi người dùng đăng ký |\r\n-| **`BILLING.SUBSCRIPTION.ACTIVATED`** | Kích hoạt đăng ký, cấp quyền truy cập khóa học | `completed` (hoàn thành) | `active` (đang hoạt động) | Thanh toán đã được xác nhận thành công |\r\n-| **`BILLING.SUBSCRIPTION.CANCELLED`** | Lên lịch hủy vào cuối kỳ hiện tại | `completed` | `active` | ❗ **KHÔNG HỦY NGAY LẬP TỨC** - người dùng đã thanh toán cho kỳ hiện tại |\r\n-| **`BILLING.SUBSCRIPTION.SUSPENDED`** | Tạm dừng đăng ký, thu hồi quyền truy cập | `on-hold` (tạm giữ) | `on-hold` | PayPal đã tạm dừng sau nhiều lần thanh toán thất bại |\r\n-| **`BILLING.SUBSCRIPTION.EXPIRED`** | Hết hạn đăng ký vĩnh viễn | `completed` | `expired` (đã hết hạn) | Đăng ký đã đến ngày kết thúc |\r\n-| **`BILLING.SUBSCRIPTION.PAYMENT.FAILED`** | Ghi lỗi, gửi thông báo cho người dùng | `failed` (thất bại) | `active` | PayPal sẽ thử gửi lại 3 lần trước khi tạm dừng |\r\n-| **`PAYMENT.SALE.COMPLETED`** | Xử lý thanh toán gia hạn, gia hạn thời gian đăng ký | `completed` | `active` | Thanh toán định kỳ nhận được thành công |\r\n-| **`PAYMENT.SALE.REFUNDED`** | Hoàn tiền đơn hàng, điều chỉnh quyền truy cập | `refunded` (đã hoàn tiền) | *tùy trường hợp* | Hoàn toàn bộ = thu hồi quyền truy cập ngay lập tức |\r\n-| **`PAYMENT.SALE.REVERSED`** | Tranh chấp \u002F Chargeback | `refunded` | `suspended` (đã tạm dừng) | ❗ **THU HỒI QUYỀN TRUY CẬP NGAY LẬP TỨC** |\r\n-\r\n----\r\n-\r\n-## 4. Quy tắc chuyển trạng thái\r\n-\r\n-### ✅ Luồng bình thường thành công\r\n-```\r\n-CREATED → ACTIVATED → [PAYMENT.COMPLETED] (lặp lại hàng tháng) → [CANCELLED \u002F EXPIRED]\r\n-```\r\n-\r\n-### ❌ Luồng thanh toán thất bại\r\n-```\r\n-PAYMENT.FAILED → (Thử lại 1) → (Thử lại 2) → (Thử lại 3) → SUSPENDED\r\n-```\r\n-\r\n-### ⚠️ Luồng tranh chấp\r\n-```\r\n-PAYMENT.REVERSED → SUSPENDED (ngay lập tức)\r\n-```\r\n-\r\n----\r\n-\r\n-## 5. Quy tắc Idempotency\r\n-\r\n-Tất cả các handler **PHẢI** là idempotent:\r\n-1. Luôn kiểm tra trạng thái hiện tại trước khi thay đổi\r\n-2. Không bao giờ xử lý cùng một ID sự kiện hai lần\r\n-3. Xử lý một sự kiện nhiều lần cho kết quả hoàn toàn giống nhau\r\n-4. Không có tác dụng phụ khi nhận sự kiện trùng lặp\r\n-\r\n-ID sự kiện đã xử lý sẽ được lưu trong **90 ngày**.\r\n-\r\n----\r\n-\r\n-## 6. Xử lý lỗi\r\n-\r\n-| Trường hợp | Mã phản hồi | Hành động |\r\n-|---|---|---|\r\n-| Chữ ký không hợp lệ | `403 Forbidden` | Ghi log lỗi, không xử lý |\r\n-| Dữ liệu JSON không hợp lệ | `400 Bad Request` | Ghi log lỗi |\r\n-| Thiếu header bắt buộc | `400 Bad Request` | Ghi log lỗi |\r\n-| Cổng thanh toán không được bật | `404 Not Found` | Ghi log lỗi |\r\n-| Sự kiện trùng lặp | `200 OK` | Bỏ qua |\r\n-| Loại sự kiện không được hỗ trợ | `200 OK` | Ghi log để tham khảo |\r\n-| Lỗi khi thực thi handler | `200 OK` | Ghi log đầy đủ lỗi, PayPal sẽ thử gửi lại |\r\n-\r\n----\r\n-\r\n-## 7. Yêu cầu Ghi log\r\n-\r\n-Tất cả sự kiện webhook **PHẢI** ghi lại:\r\n-- ID sự kiện\r\n-- Loại sự kiện\r\n-- ID đăng ký PayPal\r\n-- Kết quả xử lý (thành công \u002F thất bại)\r\n-- Thông báo lỗi đầy đủ khi có lỗi\r\n-\r\n-Log được lưu tại: `wp-content\u002Fuploads\u002Flearnpress\u002Flogs\u002Fpaypal-webhooks.log`\r\n-\r\n----\r\n-\r\n-## 8. Các trường hợp kiểm tra\r\n-\r\n-Các test case bắt buộc khi triển khai:\r\n-\r\n-| Trường hợp kiểm tra | Kết quả mong đợi |\r\n-|---|---|\r\n-| Chữ ký hợp lệ | Sự kiện được xử lý thành công |\r\n-| Chữ ký không hợp lệ | Phản hồi 403, không có thay đổi |\r\n-| ID sự kiện trùng lặp | Phản hồi 200, không có thay đổi |\r\n-| Loại sự kiện không được hỗ trợ | Phản hồi 200, được ghi log |\r\n-| Không tìm thấy đơn hàng | Phản hồi 200, được ghi log |\r\n-| Sự kiện đến sai thứ tự | Trạng thái vẫn đúng |\r\n-\r\n----\r\n-\r\n-## Tài liệu tham khảo\r\n-\r\n-- [Tài liệu chính thức Webhook Đăng ký PayPal](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F)\r\n-- [Xác minh Webhook PayPal](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Fwebhooks\u002Fv1\u002F#verify-webhook-signature)\r\n+# Tài liệu Xử lý Webhook Đăng ký PayPal\n+\n+> **Phiên bản tài liệu:** 1.0\n+> **Ngày:** 07\u002F04\u002F2026\n+> **Tham khảo:** https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F\n+\n+---\n+\n+## Tổng quan\n+\n+Tài liệu này định nghĩa đầy đủ logic xử lý callback webhook từ PayPal cho hệ thống đăng ký trong LearnPress. Tất cả các sự kiện đều tuân thủ tài liệu chính thức của PayPal và quy trình vòng đời đăng ký của LearnPress.\n+\n+---\n+\n+## 1. Điểm cuối Webhook\n+\n+| Thông tin | Giá trị |\n+|---|---|\n+| **URL Endpoint** | `\u002Fwp-json\u002Flp\u002Fv1\u002Fgateways\u002Fpaypal\u002Fsubscription-webhook` |\n+| **Phương thức** | `POST` |\n+| **Xác thực** | Xác minh chữ ký webhook của PayPal |\n+| **Trạng thái phản hồi** | Luôn trả về `200 OK` cho các yêu cầu hợp lệ |\n+\n+✅ **Quan trọng:** PayPal sẽ thử gửi lại webhook **theo cấp số nhân** trong vòng 3 ngày nếu nhận được phản hồi không phải 2xx. Luôn trả về 200 ngay cả đối với sự kiện không được hỗ trợ hoặc đã xử lý rồi.\n+\n+---\n+\n+## 2. Quy trình xử lý\n+\n+Tất cả sự kiện webhook đều đi qua đúng trình tự sau:\n+\n+```\n+1. 🔐 Xác minh chữ ký\n+    ├─ Trích xuất tất cả header của PayPal\n+    ├─ Gọi API xác minh của PayPal\n+    └─ LỖI → Trả về 403, không xử lý tiếp\n+\n+2. 🧾 Kiểm tra dữ liệu gửi lên\n+    ├─ Phân tích payload JSON\n+    ├─ Kiểm tra cấu trúc sự kiện\n+    └─ LỖI → Trả về 400\n+\n+3. 🆔 Kiểm tra sự kiện trùng lặp\n+    ├─ Kiểm tra xem ID sự kiện đã được xử lý chưa\n+    └─ ĐÃ XỬ LÝ → Trả về 200 OK\n+\n+4. 📦 Phân phối sự kiện\n+    ├─ Tìm handler tương ứng với loại sự kiện\n+    ├─ Thực thi logic xử lý\n+    └─ KHÔNG CÓ HANDLER → Trả về 200 OK\n+\n+5. ✅ Đánh dấu đã xử lý\n+    └─ Lưu ID sự kiện vào database\n+\n+6. 📨 Trả về phản hồi\n+    └─ Luôn là 200 OK\n+```\n+\n+---\n+\n+## 3. Bảng ánh xạ sự kiện\n+\n+Đây là bảng ánh xạ chính thức các loại sự kiện PayPal với hành động tương ứng trong LearnPress:\n+\n+| Loại sự kiện PayPal | Hành động LearnPress | Trạng thái Đơn hàng | Trạng thái Đăng ký | Ghi chú |\n+|---|---|---|---|---|\n+| **`BILLING.SUBSCRIPTION.CREATED`** | Lưu ID đăng ký PayPal | `pending` (chờ xử lý) | `pending` | Sự kiện đầu tiên nhận được khi người dùng đăng ký |\n+| **`BILLING.SUBSCRIPTION.ACTIVATED`** | Kích hoạt đăng ký, cấp quyền truy cập khóa học | `completed` (hoàn thành) | `active` (đang hoạt động) | Thanh toán đã được xác nhận thành công |\n+| **`BILLING.SUBSCRIPTION.CANCELLED`** | Lên lịch hủy vào cuối kỳ hiện tại | `completed` | `active` | ❗ **KHÔNG HỦY NGAY LẬP TỨC** - người dùng đã thanh toán cho kỳ hiện tại |\n+| **`BILLING.SUBSCRIPTION.SUSPENDED`** | Tạm dừng đăng ký, thu hồi quyền truy cập | `on-hold` (tạm giữ) | `on-hold` | PayPal đã tạm dừng sau nhiều lần thanh toán thất bại |\n+| **`BILLING.SUBSCRIPTION.EXPIRED`** | Hết hạn đăng ký vĩnh viễn | `completed` | `expired` (đã hết hạn) | Đăng ký đã đến ngày kết thúc |\n+| **`BILLING.SUBSCRIPTION.PAYMENT.FAILED`** | Ghi lỗi, gửi thông báo cho người dùng | `failed` (thất bại) | `active` | PayPal sẽ thử gửi lại 3 lần trước khi tạm dừng |\n+| **`PAYMENT.SALE.COMPLETED`** | Xử lý thanh toán gia hạn, gia hạn thời gian đăng ký | `completed` | `active` | Thanh toán định kỳ nhận được thành công |\n+| **`PAYMENT.SALE.REFUNDED`** | Hoàn tiền đơn hàng, điều chỉnh quyền truy cập | `refunded` (đã hoàn tiền) | *tùy trường hợp* | Hoàn toàn bộ = thu hồi quyền truy cập ngay lập tức |\n+| **`PAYMENT.SALE.REVERSED`** | Tranh chấp \u002F Chargeback | `refunded` | `suspended` (đã tạm dừng) | ❗ **THU HỒI QUYỀN TRUY CẬP NGAY LẬP TỨC** |\n+\n+---\n+\n+## 4. Quy tắc chuyển trạng thái\n+\n+### ✅ Luồng bình thường thành công\n+```\n+CREATED → ACTIVATED → [PAYMENT.COMPLETED] (lặp lại hàng tháng) → [CANCELLED \u002F EXPIRED]\n+```\n+\n+### ❌ Luồng thanh toán thất bại\n+```\n+PAYMENT.FAILED → (Thử lại 1) → (Thử lại 2) → (Thử lại 3) → SUSPENDED\n+```\n+\n+### ⚠️ Luồng tranh chấp\n+```\n+PAYMENT.REVERSED → SUSPENDED (ngay lập tức)\n+```\n+\n+---\n+\n+## 5. Quy tắc Idempotency\n+\n+Tất cả các handler **PHẢI** là idempotent:\n+1. Luôn kiểm tra trạng thái hiện tại trước khi thay đổi\n+2. Không bao giờ xử lý cùng một ID sự kiện hai lần\n+3. Xử lý một sự kiện nhiều lần cho kết quả hoàn toàn giống nhau\n+4. Không có tác dụng phụ khi nhận sự kiện trùng lặp\n+\n+ID sự kiện đã xử lý sẽ được lưu trong **90 ngày**.\n+\n+---\n+\n+## 6. Xử lý lỗi\n+\n+| Trường hợp | Mã phản hồi | Hành động |\n+|---|---|---|\n+| Chữ ký không hợp lệ | `403 Forbidden` | Ghi log lỗi, không xử lý |\n+| Dữ liệu JSON không hợp lệ | `400 Bad Request` | Ghi log lỗi |\n+| Thiếu header bắt buộc | `400 Bad Request` | Ghi log lỗi |\n+| Cổng thanh toán không được bật | `404 Not Found` | Ghi log lỗi |\n+| Sự kiện trùng lặp | `200 OK` | Bỏ qua |\n+| Loại sự kiện không được hỗ trợ | `200 OK` | Ghi log để tham khảo |\n+| Lỗi khi thực thi handler | `200 OK` | Ghi log đầy đủ lỗi, PayPal sẽ thử gửi lại |\n+\n+---\n+\n+## 7. Yêu cầu Ghi log\n+\n+Tất cả sự kiện webhook **PHẢI** ghi lại:\n+- ID sự kiện\n+- Loại sự kiện\n+- ID đăng ký PayPal\n+- Kết quả xử lý (thành công \u002F thất bại)\n+- Thông báo lỗi đầy đủ khi có lỗi\n+\n+Log được lưu tại: `wp-content\u002Fuploads\u002Flearnpress\u002Flogs\u002Fpaypal-webhooks.log`\n+\n+---\n+\n+## 8. Các trường hợp kiểm tra\n+\n+Các test case bắt buộc khi triển khai:\n+\n+| Trường hợp kiểm tra | Kết quả mong đợi |\n+|---|---|\n+| Chữ ký hợp lệ | Sự kiện được xử lý thành công |\n+| Chữ ký không hợp lệ | Phản hồi 403, không có thay đổi |\n+| ID sự kiện trùng lặp | Phản hồi 200, không có thay đổi |\n+| Loại sự kiện không được hỗ trợ | Phản hồi 200, được ghi log |\n+| Không tìm thấy đơn hàng | Phản hồi 200, được ghi log |\n+| Sự kiện đến sai thứ tự | Trạng thái vẫn đúng |\n+\n+---\n+\n+## Tài liệu tham khảo\n+\n+- [Tài liệu chính thức Webhook Đăng ký PayPal](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fsubscriptions\u002Freference\u002Fwebhooks\u002F)\n+- [Xác minh Webhook PayPal](https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Fwebhooks\u002Fv1\u002F#verify-webhook-signature)\n - [Vòng đời Đăng ký LearnPress](internal:\u002F\u002Fdocs\u002Fsubscriptions\u002Flifecycle.md)\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdocs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdocs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,273 +1,273 @@\n-# PayPal Subscription Webhook Handling Implementation Plan\r\n-\r\n-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.\r\n-\r\n-**Goal:** Implement complete handling for PayPal subscription webhook events according to official PayPal documentation, mapping each event type to correct order\u002Fsubscription state transitions in LearnPress.\r\n-\r\n-**Architecture:**\r\n-- Centralized webhook entrypoint already exists at `LP_REST_Gateway_Webhook_Controller`\r\n-- PayPal gateway will implement `listen_webhook_subscription()` method\r\n-- Event handler map dispatches each PayPal event type to dedicated handler method\r\n-- Idempotent processing: all events safely handle duplicate delivery\r\n-- State transitions follow LearnPress subscription lifecycle rules\r\n-\r\n-**Tech Stack:** WordPress REST API, LearnPress Gateway API, PayPal REST SDK\r\n-\r\n----\r\n-\r\n-## Task 1: Implement PayPal webhook signature verification\r\n-\r\n-**Files:**\r\n-- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\r\n-- Test: `tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php`\r\n-\r\n-- [ ] **Step 1: Write failing test for webhook signature verification**\r\n-\r\n-```php\r\n-public function test_webhook_signature_verification() {\r\n-    $gateway = LP_Gateways::instance()->get_gateway( 'paypal' );\r\n-    \r\n-    \u002F\u002F Valid request mock\r\n-    $request = new WP_REST_Request();\r\n-    $request->set_header( 'PAYPAL-TRANSMISSION-ID', 'test-id' );\r\n-    $request->set_header( 'PAYPAL-TRANSMISSION-TIME', time() );\r\n-    $request->set_header( 'PAYPAL-TRANSMISSION-SIG', 'valid-signature' );\r\n-    $request->set_header( 'PAYPAL-AUTH-ALGO', 'SHA256withRSA' );\r\n-    $request->set_body( json_encode( [ 'id' => 'test-event' ] ) );\r\n-    \r\n-    $result = $gateway->verify_webhook_signature( $request );\r\n-    $this->assertTrue( $result );\r\n-}\r\n-```\r\n-\r\n-- [ ] **Step 2: Run test to verify it fails**\r\n-  Run: `vendor\u002Fbin\u002Fphpunit tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php -v`\r\n-  Expected: FAIL with \"method verify_webhook_signature not found\"\r\n-\r\n-- [ ] **Step 3: Implement signature verification method**\r\n-\r\n-```php\r\n-\u002F**\r\n- * Verify PayPal webhook request signature.\r\n- *\r\n- * @param WP_REST_Request $request\r\n- * @return bool\r\n- *\u002F\r\n-public function verify_webhook_signature( WP_REST_Request $request ): bool {\r\n-    $transmission_id   = $request->get_header( 'PAYPAL-TRANSMISSION-ID' );\r\n-    $transmission_time  = $request->get_header( 'PAYPAL-TRANSMISSION-TIME' );\r\n-    $transmission_sig   = $request->get_header( 'PAYPAL-TRANSMISSION-SIG' );\r\n-    $auth_algo          = $request->get_header( 'PAYPAL-AUTH-ALGO' );\r\n-    $webhook_id         = $this->get_option( 'webhook_id' );\r\n-    \r\n-    $body = $request->get_body();\r\n-    \r\n-    \u002F\u002F Build verification string\r\n-    $verification_string = $transmission_id . '|' . $transmission_time . '|' . $webhook_id . '|' . crc32( $body );\r\n-    \r\n-    \u002F\u002F Verify signature using PayPal public key\r\n-    $pub_key = openssl_pkey_get_public( $this->get_paypal_public_key( $auth_algo ) );\r\n-    $result = openssl_verify( $verification_string, base64_decode( $transmission_sig ), $pub_key, OPENSSL_ALGO_SHA256 );\r\n-    \r\n-    return $result === 1;\r\n-}\r\n-```\r\n-\r\n-- [ ] **Step 4: Run test to verify it passes**\r\n-  Run: `vendor\u002Fbin\u002Fphpunit tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php -v`\r\n-  Expected: PASS\r\n-\r\n-- [ ] **Step 5: Commit**\r\n-\r\n-```bash\r\n-git add inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php\r\n-git commit -m \"feat(paypal): add webhook signature verification\"\r\n-```\r\n-\r\n----\r\n-\r\n-## Task 2: Implement webhook entrypoint and event dispatcher\r\n-\r\n-**Files:**\r\n-- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\r\n-\r\n-- [ ] **Step 1: Implement listen_webhook_subscription method**\r\n-\r\n-```php\r\n-\u002F**\r\n- * Handle incoming PayPal subscription webhook.\r\n- *\r\n- * @param WP_REST_Request $request\r\n- * @return array\r\n- * @throws Exception\r\n- *\u002F\r\n-public function listen_webhook_subscription( WP_REST_Request $request ): array {\r\n-    \u002F\u002F First verify signature\r\n-    if ( ! $this->verify_webhook_signature( $request ) ) {\r\n-        throw new Exception( 'Invalid webhook signature', 403 );\r\n-    }\r\n-    \r\n-    $payload = json_decode( $request->get_body(), true );\r\n-    \r\n-    if ( json_last_error() !== JSON_ERROR_NONE ) {\r\n-        throw new Exception( 'Invalid JSON payload', 400 );\r\n-    }\r\n-    \r\n-    $event_type = $payload['event_type'] ?? '';\r\n-    \r\n-    \u002F\u002F Event handler map\r\n-    $handlers = [\r\n-        'BILLING.SUBSCRIPTION.CREATED'       => 'handle_subscription_created',\r\n-        'BILLING.SUBSCRIPTION.ACTIVATED'     => 'handle_subscription_activated',\r\n-        'BILLING.SUBSCRIPTION.CANCELLED'     => 'handle_subscription_cancelled',\r\n-        'BILLING.SUBSCRIPTION.SUSPENDED'     => 'handle_subscription_suspended',\r\n-        'BILLING.SUBSCRIPTION.EXPIRED'       => 'handle_subscription_expired',\r\n-        'BILLING.SUBSCRIPTION.PAYMENT.FAILED'=> 'handle_subscription_payment_failed',\r\n-        'PAYMENT.SALE.COMPLETED'             => 'handle_payment_completed',\r\n-        'PAYMENT.SALE.REFUNDED'              => 'handle_payment_refunded',\r\n-        'PAYMENT.SALE.REVERSED'              => 'handle_payment_reversed',\r\n-    ];\r\n-    \r\n-    if ( isset( $handlers[ $event_type ] ) ) {\r\n-        $method = $handlers[ $event_type ];\r\n-        $this->$method( $payload );\r\n-    }\r\n-    \r\n-    \u002F\u002F Always return 200 OK to PayPal even for unhandled events\r\n-    return [\r\n-        'status' => 'success',\r\n-        'event_type' => $event_type,\r\n-        'processed' => isset( $handlers[ $event_type ] )\r\n-    ];\r\n-}\r\n-```\r\n-\r\n-- [ ] **Step 2: Add empty handler method stubs**\r\n-  Add empty methods for all event types in the handler map\r\n-\r\n-- [ ] **Step 3: Commit**\r\n-\r\n-```bash\r\n-git add inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php\r\n-git commit -m \"feat(paypal): add webhook dispatcher and event map\"\r\n-```\r\n-\r\n----\r\n-\r\n-## Task 3: Implement event handlers for subscription lifecycle events\r\n-\r\n-**Files:**\r\n-- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\r\n-- Test: `tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookEvents.php`\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.CREATED\r\n-- [ ] **Handler:** Store PayPal subscription ID on LearnPress subscription\r\n-- [ ] **Action:** Set subscription status to `pending`\r\n-- [ ] **Idempotency:** Skip if subscription already has PayPal ID\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.ACTIVATED\r\n-- [ ] **Handler:** Activate LearnPress subscription\r\n-- [ ] **Action:** Set status to `active`, grant course access\r\n-- [ ] **Log:** Record activation event in subscription history\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.CANCELLED\r\n-- [ ] **Handler:** Cancel LearnPress subscription\r\n-- [ ] **Action:** Set status to `cancelled`, keep access until period end\r\n-- [ ] **Note:** Do NOT revoke access immediately - customer paid for current period\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.SUSPENDED\r\n-- [ ] **Handler:** Suspend LearnPress subscription\r\n-- [ ] **Action:** Set status to `on-hold`, revoke course access\r\n-- [ ] **Trigger:** Send suspension notification email to user\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.EXPIRED\r\n-- [ ] **Handler:** Expire LearnPress subscription\r\n-- [ ] **Action:** Set status to `expired`, revoke course access permanently\r\n-\r\n-### Event: BILLING.SUBSCRIPTION.PAYMENT.FAILED\r\n-- [ ] **Handler:** Handle failed payment\r\n-- [ ] **Action:** Add failed payment note, do NOT suspend immediately\r\n-- [ ] **Logic:** PayPal will retry 3 times before suspending\r\n-\r\n----\r\n-\r\n-## Task 4: Implement payment event handlers\r\n-\r\n-**Files:**\r\n-- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\r\n-\r\n-### Event: PAYMENT.SALE.COMPLETED\r\n-- [ ] **Step 1: Extract subscription ID and amount from payload**\r\n-- [ ] **Step 2: Find corresponding LearnPress renewal order**\r\n-- [ ] **Step 3: Mark order as completed, process payment**\r\n-- [ ] **Step 4: Extend subscription next billing date**\r\n-- [ ] **Step 5: Generate invoice and send receipt email**\r\n-\r\n-### Event: PAYMENT.SALE.REFUNDED\r\n-- [ ] **Step 1: Find original order by PayPal transaction ID**\r\n-- [ ] **Step 2: Refund order, log refund reason**\r\n-- [ ] **Step 3: Adjust subscription access if applicable**\r\n-\r\n-### Event: PAYMENT.SALE.REVERSED\r\n-- [ ] **Step 1: Handle chargeback \u002F dispute**\r\n-- [ ] **Step 2: Immediately suspend subscription**\r\n-- [ ] **Step 3: Revoke course access**\r\n-- [ ] **Step 4: Log dispute for admin review**\r\n-\r\n----\r\n-\r\n-## Task 5: Idempotency and duplicate event protection\r\n-\r\n-**Files:**\r\n-- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\r\n-\r\n-- [ ] **Step 1: Add processed event ID storage**\r\n-  Store each processed PayPal event ID in post meta to prevent duplicate processing\r\n-\r\n-- [ ] **Step 2: Implement duplicate check at start of each handler**\r\n-\r\n-```php\r\n-protected function is_event_processed( string $event_id ): bool {\r\n-    return get_post_meta( $this->subscription_id, '_paypal_event_' . $event_id, true ) === 'processed';\r\n-}\r\n-\r\n-protected function mark_event_processed( string $event_id ): void {\r\n-    update_post_meta( $this->subscription_id, '_paypal_event_' . $event_id, 'processed' );\r\n-}\r\n-```\r\n-\r\n-- [ ] **Step 3: Always return 200 OK for duplicate events**\r\n-  PayPal retries webhooks on any non-2xx response\r\n-\r\n----\r\n-\r\n-## Task 6: Test full webhook flow\r\n-\r\n-**Files:**\r\n-- Test: `tests\u002FUnit\u002FRestApi\u002FTestGatewayWebhookController.php`\r\n-\r\n-- [ ] **Step 1: Test complete flow from controller to gateway**\r\n-- [ ] **Step 2: Test each event type individually**\r\n-- [ ] **Step 3: Test signature failure cases**\r\n-- [ ] **Step 4: Test duplicate event handling**\r\n-- [ ] **Step 5: Test invalid payload handling**\r\n-\r\n----\r\n-\r\n-## Self Review\r\n-\r\n-✅ **Spec coverage:** All PayPal webhook events from documentation are mapped to handlers\r\n-✅ **No placeholders:** Every handler has clear action items\r\n-✅ **Type consistency:** Method signatures and property names match existing codebase\r\n-✅ **Idempotency:** All events handle duplicate delivery correctly\r\n-✅ **Security:** Signature verification implemented before any processing\r\n-\r\n----\r\n-\r\n-Plan complete and saved to `docs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md`. Two execution options:\r\n-\r\n-**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration\r\n-\r\n-**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints\r\n-\r\n+# PayPal Subscription Webhook Handling Implementation Plan\n+\n+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.\n+\n+**Goal:** Implement complete handling for PayPal subscription webhook events according to official PayPal documentation, mapping each event type to correct order\u002Fsubscription state transitions in LearnPress.\n+\n+**Architecture:**\n+- Centralized webhook entrypoint already exists at `LP_REST_Gateway_Webhook_Controller`\n+- PayPal gateway will implement `listen_webhook_subscription()` method\n+- Event handler map dispatches each PayPal event type to dedicated handler method\n+- Idempotent processing: all events safely handle duplicate delivery\n+- State transitions follow LearnPress subscription lifecycle rules\n+\n+**Tech Stack:** WordPress REST API, LearnPress Gateway API, PayPal REST SDK\n+\n+---\n+\n+## Task 1: Implement PayPal webhook signature verification\n+\n+**Files:**\n+- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\n+- Test: `tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php`\n+\n+- [ ] **Step 1: Write failing test for webhook signature verification**\n+\n+```php\n+public function test_webhook_signature_verification() {\n+    $gateway = LP_Gateways::instance()->get_gateway( 'paypal' );\n+    \n+    \u002F\u002F Valid request mock\n+    $request = new WP_REST_Request();\n+    $request->set_header( 'PAYPAL-TRANSMISSION-ID', 'test-id' );\n+    $request->set_header( 'PAYPAL-TRANSMISSION-TIME', time() );\n+    $request->set_header( 'PAYPAL-TRANSMISSION-SIG', 'valid-signature' );\n+    $request->set_header( 'PAYPAL-AUTH-ALGO', 'SHA256withRSA' );\n+    $request->set_body( json_encode( [ 'id' => 'test-event' ] ) );\n+    \n+    $result = $gateway->verify_webhook_signature( $request );\n+    $this->assertTrue( $result );\n+}\n+```\n+\n+- [ ] **Step 2: Run test to verify it fails**\n+  Run: `vendor\u002Fbin\u002Fphpunit tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php -v`\n+  Expected: FAIL with \"method verify_webhook_signature not found\"\n+\n+- [ ] **Step 3: Implement signature verification method**\n+\n+```php\n+\u002F**\n+ * Verify PayPal webhook request signature.\n+ *\n+ * @param WP_REST_Request $request\n+ * @return bool\n+ *\u002F\n+public function verify_webhook_signature( WP_REST_Request $request ): bool {\n+    $transmission_id   = $request->get_header( 'PAYPAL-TRANSMISSION-ID' );\n+    $transmission_time  = $request->get_header( 'PAYPAL-TRANSMISSION-TIME' );\n+    $transmission_sig   = $request->get_header( 'PAYPAL-TRANSMISSION-SIG' );\n+    $auth_algo          = $request->get_header( 'PAYPAL-AUTH-ALGO' );\n+    $webhook_id         = $this->get_option( 'webhook_id' );\n+    \n+    $body = $request->get_body();\n+    \n+    \u002F\u002F Build verification string\n+    $verification_string = $transmission_id . '|' . $transmission_time . '|' . $webhook_id . '|' . crc32( $body );\n+    \n+    \u002F\u002F Verify signature using PayPal public key\n+    $pub_key = openssl_pkey_get_public( $this->get_paypal_public_key( $auth_algo ) );\n+    $result = openssl_verify( $verification_string, base64_decode( $transmission_sig ), $pub_key, OPENSSL_ALGO_SHA256 );\n+    \n+    return $result === 1;\n+}\n+```\n+\n+- [ ] **Step 4: Run test to verify it passes**\n+  Run: `vendor\u002Fbin\u002Fphpunit tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php -v`\n+  Expected: PASS\n+\n+- [ ] **Step 5: Commit**\n+\n+```bash\n+git add inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookVerification.php\n+git commit -m \"feat(paypal): add webhook signature verification\"\n+```\n+\n+---\n+\n+## Task 2: Implement webhook entrypoint and event dispatcher\n+\n+**Files:**\n+- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\n+\n+- [ ] **Step 1: Implement listen_webhook_subscription method**\n+\n+```php\n+\u002F**\n+ * Handle incoming PayPal subscription webhook.\n+ *\n+ * @param WP_REST_Request $request\n+ * @return array\n+ * @throws Exception\n+ *\u002F\n+public function listen_webhook_subscription( WP_REST_Request $request ): array {\n+    \u002F\u002F First verify signature\n+    if ( ! $this->verify_webhook_signature( $request ) ) {\n+        throw new Exception( 'Invalid webhook signature', 403 );\n+    }\n+    \n+    $payload = json_decode( $request->get_body(), true );\n+    \n+    if ( json_last_error() !== JSON_ERROR_NONE ) {\n+        throw new Exception( 'Invalid JSON payload', 400 );\n+    }\n+    \n+    $event_type = $payload['event_type'] ?? '';\n+    \n+    \u002F\u002F Event handler map\n+    $handlers = [\n+        'BILLING.SUBSCRIPTION.CREATED'       => 'handle_subscription_created',\n+        'BILLING.SUBSCRIPTION.ACTIVATED'     => 'handle_subscription_activated',\n+        'BILLING.SUBSCRIPTION.CANCELLED'     => 'handle_subscription_cancelled',\n+        'BILLING.SUBSCRIPTION.SUSPENDED'     => 'handle_subscription_suspended',\n+        'BILLING.SUBSCRIPTION.EXPIRED'       => 'handle_subscription_expired',\n+        'BILLING.SUBSCRIPTION.PAYMENT.FAILED'=> 'handle_subscription_payment_failed',\n+        'PAYMENT.SALE.COMPLETED'             => 'handle_payment_completed',\n+        'PAYMENT.SALE.REFUNDED'              => 'handle_payment_refunded',\n+        'PAYMENT.SALE.REVERSED'              => 'handle_payment_reversed',\n+    ];\n+    \n+    if ( isset( $handlers[ $event_type ] ) ) {\n+        $method = $handlers[ $event_type ];\n+        $this->$method( $payload );\n+    }\n+    \n+    \u002F\u002F Always return 200 OK to PayPal even for unhandled events\n+    return [\n+        'status' => 'success',\n+        'event_type' => $event_type,\n+        'processed' => isset( $handlers[ $event_type ] )\n+    ];\n+}\n+```\n+\n+- [ ] **Step 2: Add empty handler method stubs**\n+  Add empty methods for all event types in the handler map\n+\n+- [ ] **Step 3: Commit**\n+\n+```bash\n+git add inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php\n+git commit -m \"feat(paypal): add webhook dispatcher and event map\"\n+```\n+\n+---\n+\n+## Task 3: Implement event handlers for subscription lifecycle events\n+\n+**Files:**\n+- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\n+- Test: `tests\u002FUnit\u002FGateways\u002FPaypal\u002FTestWebhookEvents.php`\n+\n+### Event: BILLING.SUBSCRIPTION.CREATED\n+- [ ] **Handler:** Store PayPal subscription ID on LearnPress subscription\n+- [ ] **Action:** Set subscription status to `pending`\n+- [ ] **Idempotency:** Skip if subscription already has PayPal ID\n+\n+### Event: BILLING.SUBSCRIPTION.ACTIVATED\n+- [ ] **Handler:** Activate LearnPress subscription\n+- [ ] **Action:** Set status to `active`, grant course access\n+- [ ] **Log:** Record activation event in subscription history\n+\n+### Event: BILLING.SUBSCRIPTION.CANCELLED\n+- [ ] **Handler:** Cancel LearnPress subscription\n+- [ ] **Action:** Set status to `cancelled`, keep access until period end\n+- [ ] **Note:** Do NOT revoke access immediately - customer paid for current period\n+\n+### Event: BILLING.SUBSCRIPTION.SUSPENDED\n+- [ ] **Handler:** Suspend LearnPress subscription\n+- [ ] **Action:** Set status to `on-hold`, revoke course access\n+- [ ] **Trigger:** Send suspension notification email to user\n+\n+### Event: BILLING.SUBSCRIPTION.EXPIRED\n+- [ ] **Handler:** Expire LearnPress subscription\n+- [ ] **Action:** Set status to `expired`, revoke course access permanently\n+\n+### Event: BILLING.SUBSCRIPTION.PAYMENT.FAILED\n+- [ ] **Handler:** Handle failed payment\n+- [ ] **Action:** Add failed payment note, do NOT suspend immediately\n+- [ ] **Logic:** PayPal will retry 3 times before suspending\n+\n+---\n+\n+## Task 4: Implement payment event handlers\n+\n+**Files:**\n+- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\n+\n+### Event: PAYMENT.SALE.COMPLETED\n+- [ ] **Step 1: Extract subscription ID and amount from payload**\n+- [ ] **Step 2: Find corresponding LearnPress renewal order**\n+- [ ] **Step 3: Mark order as completed, process payment**\n+- [ ] **Step 4: Extend subscription next billing date**\n+- [ ] **Step 5: Generate invoice and send receipt email**\n+\n+### Event: PAYMENT.SALE.REFUNDED\n+- [ ] **Step 1: Find original order by PayPal transaction ID**\n+- [ ] **Step 2: Refund order, log refund reason**\n+- [ ] **Step 3: Adjust subscription access if applicable**\n+\n+### Event: PAYMENT.SALE.REVERSED\n+- [ ] **Step 1: Handle chargeback \u002F dispute**\n+- [ ] **Step 2: Immediately suspend subscription**\n+- [ ] **Step 3: Revoke course access**\n+- [ ] **Step 4: Log dispute for admin review**\n+\n+---\n+\n+## Task 5: Idempotency and duplicate event protection\n+\n+**Files:**\n+- Modify: `inc\u002Fgateways\u002Fclass-lp-gateway-paypal.php`\n+\n+- [ ] **Step 1: Add processed event ID storage**\n+  Store each processed PayPal event ID in post meta to prevent duplicate processing\n+\n+- [ ] **Step 2: Implement duplicate check at start of each handler**\n+\n+```php\n+protected function is_event_processed( string $event_id ): bool {\n+    return get_post_meta( $this->subscription_id, '_paypal_event_' . $event_id, true ) === 'processed';\n+}\n+\n+protected function mark_event_processed( string $event_id ): void {\n+    update_post_meta( $this->subscription_id, '_paypal_event_' . $event_id, 'processed' );\n+}\n+```\n+\n+- [ ] **Step 3: Always return 200 OK for duplicate events**\n+  PayPal retries webhooks on any non-2xx response\n+\n+---\n+\n+## Task 6: Test full webhook flow\n+\n+**Files:**\n+- Test: `tests\u002FUnit\u002FRestApi\u002FTestGatewayWebhookController.php`\n+\n+- [ ] **Step 1: Test complete flow from controller to gateway**\n+- [ ] **Step 2: Test each event type individually**\n+- [ ] **Step 3: Test signature failure cases**\n+- [ ] **Step 4: Test duplicate event handling**\n+- [ ] **Step 5: Test invalid payload handling**\n+\n+---\n+\n+## Self Review\n+\n+✅ **Spec coverage:** All PayPal webhook events from documentation are mapped to handlers\n+✅ **No placeholders:** Every handler has clear action items\n+✅ **Type consistency:** Method signatures and property names match existing codebase\n+✅ **Idempotency:** All events handle duplicate delivery correctly\n+✅ **Security:** Signature verification implemented before any processing\n+\n+---\n+\n+Plan complete and saved to `docs\u002Fsuperpowers\u002Fplans\u002F2026-04-07-paypal-subscription-webhooks.md`. Two execution options:\n+\n+**1. Subagent-Driven (recommended)** - I dispatch a fresh subagent per task, review between tasks, fast iteration\n+\n+**2. Inline Execution** - Execute tasks in this session using executing-plans, batch execution with checkpoints\n+\n Which approach?\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Fdummy-data.xml \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Fdummy-data.xml\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Fdummy-data.xml\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Fdummy-data.xml\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1566 +1,1566 @@\n-\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n-\u003Crss version=\"2.0\"\r\n-     xmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\r\n-     xmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\r\n-     xmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\r\n-     xmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\r\n-     xmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\r\n->\r\n-    \u003Cchannel>\r\n-        \u003Ctitle>DEV LearnPress 1.0\u003C\u002Ftitle>\r\n-        \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Flink>\r\n-        \u003Cdescription>Just another WordPress site\u003C\u002Fdescription>\r\n-        \u003CpubDate>Sat, 09 Jan 2016 07:59:54 +0000\u003C\u002FpubDate>\r\n-        \u003Clanguage>en-US\u003C\u002Flanguage>\r\n-        \u003Cwp:wxr_version>1.0\u003C\u002Fwp:wxr_version>\r\n-        \u003Cwp:base_site_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_site_url>\r\n-        \u003Cwp:base_blog_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_blog_url>\r\n-        \u003Cwp:plugin_name>learnpress\u003C\u002Fwp:plugin_name>\r\n-        \u003Cwp:plugin_version>1.0\u003C\u002Fwp:plugin_version>\r\n-        \u003Cwp:author>\r\n-            \u003Cwp:author_id>1\u003C\u002Fwp:author_id>\r\n-            \u003Cwp:author_login>admin\u003C\u002Fwp:author_login>\r\n-            \u003Cwp:author_email>tunnhn@gmail.com\u003C\u002Fwp:author_email>\r\n-            \u003Cwp:author_display_name>\u003C![CDATA[admin]]>\u003C\u002Fwp:author_display_name>\r\n-            \u003Cwp:author_first_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_first_name>\r\n-            \u003Cwp:author_last_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_last_name>\r\n-        \u003C\u002Fwp:author>\r\n-        \u003Citem>\r\n-            \u003Ctitle>This is a new course\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fthis-is-a-new-course\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Wed, 11 Nov 2015 10:45:53 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=873\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1511\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>207\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1511\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>207\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1512\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>word wide web 2222\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1512\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>What should be here?\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\r\n-\r\n-Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\r\n-\r\n-Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\r\n-\r\n-Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\r\n-\r\n-Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1513\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\r\n-                \u003C![CDATA[IT]]>\u003C\u002Fcategory>\r\n-            \u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\r\n-                \u003C![CDATA[Software]]>\u003C\u002Fcategory>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1452319104:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\r\n-                    \u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_payment\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1514\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1515\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1516\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1517\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1518\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1519\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>6\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1520\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>7\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1521\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>8\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1522\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>9\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1523\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>10\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1524\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>11\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1525\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>12\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1526\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>13\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1527\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>14\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>2\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\r\n-                    \u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1528\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1529\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1530\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1531\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>210\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>3\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>210\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1532\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>211\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>4\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>211\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1533\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>5\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1534\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1535\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1536\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1537\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1538\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-            \u003Cwp:section>\r\n-                \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-                \u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\r\n-                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-                \u003Cwp:section_order>6\u003C\u002Fwp:section_order>\r\n-                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1539\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1540\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-                \u003Cwp:section_item>\r\n-                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-                    \u003Cwp:item_id>1541\u003C\u002Fwp:item_id>\r\n-                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-                \u003C\u002Fwp:section_item>\r\n-            \u003C\u002Fwp:section>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1514\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>where are you now?\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\r\n-\r\n-Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\r\n-\r\n-In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\r\n-\r\n-Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\r\n-\r\n-Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1515\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>I am here, beside you\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1516\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1452319835:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:question>\r\n-                \u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\r\n-                \u003Cwp:question_id>1542\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\r\n-                \u003Cwp:question_order>\u003C\u002Fwp:question_order>\r\n-            \u003C\u002Fwp:question>\r\n-\r\n-\r\n-            \u003Cwp:question>\r\n-                \u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\r\n-                \u003Cwp:question_order>\u003C\u002Fwp:question_order>\r\n-            \u003C\u002Fwp:question>\r\n-\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Question #1\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Sat, 09 Jan 2016 06:12:35 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1542\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2016-01-09 06:12:35\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2016-01-09 06:12:35\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>question-1\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1452321706:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:4:\"True\";s:5:\"value\";s:4:\"true\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:11:\"Falseasdasd\";s:5:\"value\";s:5:\"false\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:13:\"asdasdasdadss\";s:5:\"value\";s:13:\"5690ac2667caa\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Question #2\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Sat, 09 Jan 2016 06:12:49 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1543\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2016-01-09 06:12:49\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2016-01-09 06:12:49\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>question-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1452326236:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option First\";s:5:\"value\";s:12:\"option_first\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:14:\"Option Seconds\";s:5:\"value\";s:14:\"option_seconds\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-            \u003Cwp:answer>\r\n-                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-                \u003Cwp:answer_data>\r\n-                    \u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option Third\";s:5:\"value\";s:12:\"option_third\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\r\n-                \u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\r\n-            \u003C\u002Fwp:answer>\r\n-\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>asdasdasd\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1517\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1518\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1519\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1520\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Lesson 3\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1521\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1522\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>trau va bo\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1523\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1524\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1525\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1526\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1527\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>How to create a course\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1528\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>What is your name\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1529\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1530\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1531\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1532\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1533\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1534\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1535\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1536\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1537\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1538\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1539\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>44444444\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1540\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-        \u003Citem>\r\n-            \u003Ctitle>cookie\u003C\u002Ftitle>\r\n-            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\r\n-            \u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\r\n-            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\r\n-            \u003Cdescription>\u003C\u002Fdescription>\r\n-            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-            \u003Cwp:post_id>1541\u003C\u002Fwp:post_id>\r\n-            \u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\r\n-            \u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\r\n-            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-            \u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\r\n-            \u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-            \u003Cwp:postmeta>\r\n-                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-            \u003C\u002Fwp:postmeta>\r\n-        \u003C\u002Fitem>\r\n-    \u003C\u002Fchannel>\r\n-\u003C\u002Frss>\r\n+\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n+\u003Crss version=\"2.0\"\n+     xmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\n+     xmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\n+     xmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\n+     xmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\n+     xmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\n+>\n+    \u003Cchannel>\n+        \u003Ctitle>DEV LearnPress 1.0\u003C\u002Ftitle>\n+        \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Flink>\n+        \u003Cdescription>Just another WordPress site\u003C\u002Fdescription>\n+        \u003CpubDate>Sat, 09 Jan 2016 07:59:54 +0000\u003C\u002FpubDate>\n+        \u003Clanguage>en-US\u003C\u002Flanguage>\n+        \u003Cwp:wxr_version>1.0\u003C\u002Fwp:wxr_version>\n+        \u003Cwp:base_site_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_site_url>\n+        \u003Cwp:base_blog_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_blog_url>\n+        \u003Cwp:plugin_name>learnpress\u003C\u002Fwp:plugin_name>\n+        \u003Cwp:plugin_version>1.0\u003C\u002Fwp:plugin_version>\n+        \u003Cwp:author>\n+            \u003Cwp:author_id>1\u003C\u002Fwp:author_id>\n+            \u003Cwp:author_login>admin\u003C\u002Fwp:author_login>\n+            \u003Cwp:author_email>tunnhn@gmail.com\u003C\u002Fwp:author_email>\n+            \u003Cwp:author_display_name>\u003C![CDATA[admin]]>\u003C\u002Fwp:author_display_name>\n+            \u003Cwp:author_first_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_first_name>\n+            \u003Cwp:author_last_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_last_name>\n+        \u003C\u002Fwp:author>\n+        \u003Citem>\n+            \u003Ctitle>This is a new course\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fthis-is-a-new-course\u002F\u003C\u002Flink>\n+            \u003CpubDate>Wed, 11 Nov 2015 10:45:53 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=873\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1511\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>207\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1511\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>207\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1512\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>word wide web 2222\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\n+            \u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1512\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>What should be here?\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\n+            \u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\n+\n+Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\n+\n+Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\n+\n+Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\n+\n+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1513\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\n+                \u003C![CDATA[IT]]>\u003C\u002Fcategory>\n+            \u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\n+                \u003C![CDATA[Software]]>\u003C\u002Fcategory>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1452319104:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\n+                    \u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_payment\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1514\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1515\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1516\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1517\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1518\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1519\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>6\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1520\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>7\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1521\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>8\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1522\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>9\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1523\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>10\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1524\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>11\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1525\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>12\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1526\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>13\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1527\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>14\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>2\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\n+                    \u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1528\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1529\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1530\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1531\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>210\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>3\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>210\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1532\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>211\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>4\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>211\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1533\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>5\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1534\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1535\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1536\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1537\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1538\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+            \u003Cwp:section>\n+                \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+                \u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\n+                \u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+                \u003Cwp:section_order>6\u003C\u002Fwp:section_order>\n+                \u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1539\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1540\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+                \u003Cwp:section_item>\n+                    \u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+                    \u003Cwp:item_id>1541\u003C\u002Fwp:item_id>\n+                    \u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+                    \u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+                \u003C\u002Fwp:section_item>\n+            \u003C\u002Fwp:section>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>333333333333\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1514\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>where are you now?\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\n+\n+Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\n+\n+In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\n+\n+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\n+\n+Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1515\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>I am here, beside you\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1516\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1452319835:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:question>\n+                \u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\n+                \u003Cwp:question_id>1542\u003C\u002Fwp:question_id>\n+                \u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\n+                \u003Cwp:question_order>\u003C\u002Fwp:question_order>\n+            \u003C\u002Fwp:question>\n+\n+\n+            \u003Cwp:question>\n+                \u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\n+                \u003Cwp:question_order>\u003C\u002Fwp:question_order>\n+            \u003C\u002Fwp:question>\n+\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Question #1\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Flink>\n+            \u003CpubDate>Sat, 09 Jan 2016 06:12:35 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1542\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2016-01-09 06:12:35\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2016-01-09 06:12:35\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>question-1\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1452321706:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:4:\"True\";s:5:\"value\";s:4:\"true\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:11:\"Falseasdasd\";s:5:\"value\";s:5:\"false\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:13:\"asdasdasdadss\";s:5:\"value\";s:13:\"5690ac2667caa\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Question #2\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Sat, 09 Jan 2016 06:12:49 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1543\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2016-01-09 06:12:49\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2016-01-09 06:12:49\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>question-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1452326236:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option First\";s:5:\"value\";s:12:\"option_first\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:14:\"Option Seconds\";s:5:\"value\";s:14:\"option_seconds\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+            \u003Cwp:answer>\n+                \u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+                \u003Cwp:answer_data>\n+                    \u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option Third\";s:5:\"value\";s:12:\"option_third\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\n+                \u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\n+            \u003C\u002Fwp:answer>\n+\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>asdasdasd\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1517\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1518\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1519\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1520\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Lesson 3\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1521\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1522\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>trau va bo\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1523\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1524\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1525\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1526\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1527\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>How to create a course\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1528\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>What is your name\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1529\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1530\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1531\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1532\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\n+            \u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1533\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>happy new year!\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1534\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>happy new year!\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1535\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\n+            \u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1536\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1537\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1538\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>333333333333\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1539\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>44444444\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1540\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+        \u003Citem>\n+            \u003Ctitle>cookie\u003C\u002Ftitle>\n+            \u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\n+            \u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\n+            \u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+            \u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\n+            \u003Cdescription>\u003C\u002Fdescription>\n+            \u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+            \u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+            \u003Cwp:post_id>1541\u003C\u002Fwp:post_id>\n+            \u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\n+            \u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\n+            \u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+            \u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+            \u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\n+            \u003Cwp:status>publish\u003C\u002Fwp:status>\n+            \u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+            \u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+            \u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+            \u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+            \u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+            \u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+            \u003Cwp:postmeta>\n+                \u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+                \u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+            \u003C\u002Fwp:postmeta>\n+        \u003C\u002Fitem>\n+    \u003C\u002Fchannel>\n+\u003C\u002Frss>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Flearnpress-how-to-use-learnpress.xml \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Flearnpress-how-to-use-learnpress.xml\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Flearnpress-how-to-use-learnpress.xml\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Flearnpress-how-to-use-learnpress.xml\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1347 +1,1347 @@\n-\r\n-\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n-\u003Crss version=\"2.0\"\r\n-\txmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\r\n-\txmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\r\n-\txmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\r\n-\txmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\r\n-\txmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\r\n->\r\n-\u003Cchannel>\r\n-\t\u003Ctitle>DEV LearnPress 1.0\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Flink>\r\n-\t\u003Cdescription>Just another WordPress site\u003C\u002Fdescription>\r\n-\t\u003CpubDate>Fri, 08 Jan 2016 07:01:22 +0000\u003C\u002FpubDate>\r\n-\t\u003Clanguage>en-US\u003C\u002Flanguage>\r\n-\t\u003Cwp:wxr_version>1.0\u003C\u002Fwp:wxr_version>\r\n-\t\u003Cwp:base_site_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_site_url>\r\n-\t\u003Cwp:base_blog_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_blog_url>\r\n-\t\u003Cwp:plugin_name>learnpress\u003C\u002Fwp:plugin_name>\r\n-\t\u003Cwp:plugin_version>1.0\u003C\u002Fwp:plugin_version>\r\n-\t\t\u003Cwp:author>\u003Cwp:author_id>1\u003C\u002Fwp:author_id>\u003Cwp:author_login>admin\u003C\u002Fwp:author_login>\u003Cwp:author_email>tunnhn@gmail.com\u003C\u002Fwp:author_email>\u003Cwp:author_display_name>\u003C![CDATA[admin]]>\u003C\u002Fwp:author_display_name>\u003Cwp:author_first_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_first_name>\u003Cwp:author_last_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_last_name>\u003C\u002Fwp:author>\r\n-\t\u003Cwp:author>\u003Cwp:author_id>4\u003C\u002Fwp:author_id>\u003Cwp:author_login>instructor\u003C\u002Fwp:author_login>\u003Cwp:author_email>tunn@foobla.com\u003C\u002Fwp:author_email>\u003Cwp:author_display_name>\u003C![CDATA[In Structor]]>\u003C\u002Fwp:author_display_name>\u003Cwp:author_first_name>\u003C![CDATA[In]]>\u003C\u002Fwp:author_first_name>\u003Cwp:author_last_name>\u003C![CDATA[Structor]]>\u003C\u002Fwp:author_last_name>\u003C\u002Fwp:author>\r\n-\t\t\t\u003Citem>\r\n-\t\u003Ctitle>This is a new course\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fthis-is-a-new-course\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Wed, 11 Nov 2015 10:45:53 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=873\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>873\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>144\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>873\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 144-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>144\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1232\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>word wide web 2222\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1232\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\t\t\t\u003Citem>\r\n-\t\u003Ctitle>What should be here?\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[instructor]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\r\n-\r\n-Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\r\n-\r\n-Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\r\n-\r\n-Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\r\n-\r\n-Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>908\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>4\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\u003C![CDATA[IT]]>\u003C\u002Fcategory>\r\n-\t\t\u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\u003C![CDATA[Software]]>\u003C\u002Fcategory>\r\n-\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1452156731:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 145-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1146\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1148\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1149\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1143\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1144\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1139\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>6\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1140\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>7\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1142\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>8\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1153\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>9\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1154\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>10\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1164\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>11\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1165\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>12\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1166\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>13\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1167\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>14\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>2\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 146-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1169\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1170\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1171\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1168\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>147\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>3\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 147-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>147\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1172\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>148\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>4\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 148-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>148\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1173\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>5\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 149-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1228\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1229\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1136\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1137\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1230\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\r\n-\t\t\t\u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\r\n-\t\t\t\u003Cwp:section_order>6\u003C\u002Fwp:section_order>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 150-->\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1145\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1227\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\t\u003Cwp:item_id>1231\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:comment>\r\n-\t\t\u003Cwp:comment_id>89\u003C\u002Fwp:comment_id>\r\n-\t\t\u003Cwp:comment_author>\u003C![CDATA[admin]]>\u003C\u002Fwp:comment_author>\r\n-\t\t\u003Cwp:comment_author_email>tunnhn@gmail.com\u003C\u002Fwp:comment_author_email>\r\n-\t\t\u003Cwp:comment_author_url>\u003C\u002Fwp:comment_author_url>\r\n-\t\t\u003Cwp:comment_author_IP>::1\u003C\u002Fwp:comment_author_IP>\r\n-\t\t\u003Cwp:comment_date>2016-01-07 03:50:26\u003C\u002Fwp:comment_date>\r\n-\t\t\u003Cwp:comment_date_gmt>2016-01-07 03:50:26\u003C\u002Fwp:comment_date_gmt>\r\n-\t\t\u003Cwp:comment_content>\u003C![CDATA[How create a course with LearnPress]]>\u003C\u002Fwp:comment_content>\r\n-\t\t\u003Cwp:comment_approved>1\u003C\u002Fwp:comment_approved>\r\n-\t\t\u003Cwp:comment_type>\u003C\u002Fwp:comment_type>\r\n-\t\t\u003Cwp:comment_parent>0\u003C\u002Fwp:comment_parent>\r\n-\t\t\u003Cwp:comment_user_id>1\u003C\u002Fwp:comment_user_id>\r\n-\t\t\u003C\u002Fwp:comment>\r\n-\t\u003Cwp:comment>\r\n-\t\t\u003Cwp:comment_id>90\u003C\u002Fwp:comment_id>\r\n-\t\t\u003Cwp:comment_author>\u003C![CDATA[admin]]>\u003C\u002Fwp:comment_author>\r\n-\t\t\u003Cwp:comment_author_email>tunnhn@gmail.com\u003C\u002Fwp:comment_author_email>\r\n-\t\t\u003Cwp:comment_author_url>\u003C\u002Fwp:comment_author_url>\r\n-\t\t\u003Cwp:comment_author_IP>::1\u003C\u002Fwp:comment_author_IP>\r\n-\t\t\u003Cwp:comment_date>2016-01-07 03:50:56\u003C\u002Fwp:comment_date>\r\n-\t\t\u003Cwp:comment_date_gmt>2016-01-07 03:50:56\u003C\u002Fwp:comment_date_gmt>\r\n-\t\t\u003Cwp:comment_content>\u003C![CDATA[Nam quam nunc blandit]]>\u003C\u002Fwp:comment_content>\r\n-\t\t\u003Cwp:comment_approved>1\u003C\u002Fwp:comment_approved>\r\n-\t\t\u003Cwp:comment_type>\u003C\u002Fwp:comment_type>\r\n-\t\t\u003Cwp:comment_parent>89\u003C\u002Fwp:comment_parent>\r\n-\t\t\u003Cwp:comment_user_id>1\u003C\u002Fwp:comment_user_id>\r\n-\t\t\u003C\u002Fwp:comment>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1146\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>where are you now?\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\r\n-\r\n-Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\r\n-\r\n-In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\r\n-\r\n-Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\r\n-\r\n-Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1148\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>I am here, beside you\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1149\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1450973326:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asdasdasd\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1143\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1144\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1139\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1140\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 3\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1142\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1153\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>trau va bo\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1154\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1164\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1165\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1166\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1167\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>How to create a course\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1169\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>What is your name\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1170\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1171\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1168\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1172\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1173\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1228\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1229\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1136\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1137\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1230\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1145\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>44444444\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1227\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>cookie\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1231\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\t\u003C\u002Fchannel>\r\n-\u003C\u002Frss>\r\n+\n+\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n+\u003Crss version=\"2.0\"\n+\txmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\n+\txmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\n+\txmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\n+\txmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\n+\txmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\n+>\n+\u003Cchannel>\n+\t\u003Ctitle>DEV LearnPress 1.0\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Flink>\n+\t\u003Cdescription>Just another WordPress site\u003C\u002Fdescription>\n+\t\u003CpubDate>Fri, 08 Jan 2016 07:01:22 +0000\u003C\u002FpubDate>\n+\t\u003Clanguage>en-US\u003C\u002Flanguage>\n+\t\u003Cwp:wxr_version>1.0\u003C\u002Fwp:wxr_version>\n+\t\u003Cwp:base_site_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_site_url>\n+\t\u003Cwp:base_blog_url>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u003C\u002Fwp:base_blog_url>\n+\t\u003Cwp:plugin_name>learnpress\u003C\u002Fwp:plugin_name>\n+\t\u003Cwp:plugin_version>1.0\u003C\u002Fwp:plugin_version>\n+\t\t\u003Cwp:author>\u003Cwp:author_id>1\u003C\u002Fwp:author_id>\u003Cwp:author_login>admin\u003C\u002Fwp:author_login>\u003Cwp:author_email>tunnhn@gmail.com\u003C\u002Fwp:author_email>\u003Cwp:author_display_name>\u003C![CDATA[admin]]>\u003C\u002Fwp:author_display_name>\u003Cwp:author_first_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_first_name>\u003Cwp:author_last_name>\u003C![CDATA[]]>\u003C\u002Fwp:author_last_name>\u003C\u002Fwp:author>\n+\t\u003Cwp:author>\u003Cwp:author_id>4\u003C\u002Fwp:author_id>\u003Cwp:author_login>instructor\u003C\u002Fwp:author_login>\u003Cwp:author_email>tunn@foobla.com\u003C\u002Fwp:author_email>\u003Cwp:author_display_name>\u003C![CDATA[In Structor]]>\u003C\u002Fwp:author_display_name>\u003Cwp:author_first_name>\u003C![CDATA[In]]>\u003C\u002Fwp:author_first_name>\u003Cwp:author_last_name>\u003C![CDATA[Structor]]>\u003C\u002Fwp:author_last_name>\u003C\u002Fwp:author>\n+\t\t\t\u003Citem>\n+\t\u003Ctitle>This is a new course\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fthis-is-a-new-course\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Wed, 11 Nov 2015 10:45:53 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=873\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>873\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>144\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>873\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 144-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>144\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1232\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>word wide web 2222\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1232\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\t\t\t\u003Citem>\n+\t\u003Ctitle>What should be here?\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[instructor]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\n+\n+Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\n+\n+Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\n+\n+Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\n+\n+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>908\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>4\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\u003C![CDATA[IT]]>\u003C\u002Fcategory>\n+\t\t\u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\u003C![CDATA[Software]]>\u003C\u002Fcategory>\n+\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1452156731:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 145-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1146\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1148\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1149\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1143\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1144\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1139\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>6\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1140\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>7\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1142\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>8\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1153\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>9\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1154\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>10\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1164\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>11\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1165\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>12\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1166\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>13\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>145\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1167\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>14\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>2\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 146-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1169\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1170\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1171\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>146\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1168\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>147\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>3\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 147-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>147\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1172\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>148\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>4\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 148-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>148\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1173\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>5\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 149-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1228\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1229\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1136\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1137\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>149\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1230\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\t\u003Cwp:section>\n+\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\n+\t\t\t\u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_course_id>908\u003C\u002Fwp:section_course_id>\n+\t\t\t\u003Cwp:section_order>6\u003C\u002Fwp:section_order>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\u003C!--SELECT si.*, p.post_type FROM wp_learnpress_section_items si INNER JOIN wp_posts p ON p.ID = si.item_id WHERE section_id = 150-->\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1145\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1227\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_id>150\u003C\u002Fwp:section_id>\n+\t\t\t\t\t\u003Cwp:item_id>1231\u003C\u002Fwp:item_id>\n+\t\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:comment>\n+\t\t\u003Cwp:comment_id>89\u003C\u002Fwp:comment_id>\n+\t\t\u003Cwp:comment_author>\u003C![CDATA[admin]]>\u003C\u002Fwp:comment_author>\n+\t\t\u003Cwp:comment_author_email>tunnhn@gmail.com\u003C\u002Fwp:comment_author_email>\n+\t\t\u003Cwp:comment_author_url>\u003C\u002Fwp:comment_author_url>\n+\t\t\u003Cwp:comment_author_IP>::1\u003C\u002Fwp:comment_author_IP>\n+\t\t\u003Cwp:comment_date>2016-01-07 03:50:26\u003C\u002Fwp:comment_date>\n+\t\t\u003Cwp:comment_date_gmt>2016-01-07 03:50:26\u003C\u002Fwp:comment_date_gmt>\n+\t\t\u003Cwp:comment_content>\u003C![CDATA[How create a course with LearnPress]]>\u003C\u002Fwp:comment_content>\n+\t\t\u003Cwp:comment_approved>1\u003C\u002Fwp:comment_approved>\n+\t\t\u003Cwp:comment_type>\u003C\u002Fwp:comment_type>\n+\t\t\u003Cwp:comment_parent>0\u003C\u002Fwp:comment_parent>\n+\t\t\u003Cwp:comment_user_id>1\u003C\u002Fwp:comment_user_id>\n+\t\t\u003C\u002Fwp:comment>\n+\t\u003Cwp:comment>\n+\t\t\u003Cwp:comment_id>90\u003C\u002Fwp:comment_id>\n+\t\t\u003Cwp:comment_author>\u003C![CDATA[admin]]>\u003C\u002Fwp:comment_author>\n+\t\t\u003Cwp:comment_author_email>tunnhn@gmail.com\u003C\u002Fwp:comment_author_email>\n+\t\t\u003Cwp:comment_author_url>\u003C\u002Fwp:comment_author_url>\n+\t\t\u003Cwp:comment_author_IP>::1\u003C\u002Fwp:comment_author_IP>\n+\t\t\u003Cwp:comment_date>2016-01-07 03:50:56\u003C\u002Fwp:comment_date>\n+\t\t\u003Cwp:comment_date_gmt>2016-01-07 03:50:56\u003C\u002Fwp:comment_date_gmt>\n+\t\t\u003Cwp:comment_content>\u003C![CDATA[Nam quam nunc blandit]]>\u003C\u002Fwp:comment_content>\n+\t\t\u003Cwp:comment_approved>1\u003C\u002Fwp:comment_approved>\n+\t\t\u003Cwp:comment_type>\u003C\u002Fwp:comment_type>\n+\t\t\u003Cwp:comment_parent>89\u003C\u002Fwp:comment_parent>\n+\t\t\u003Cwp:comment_user_id>1\u003C\u002Fwp:comment_user_id>\n+\t\t\u003C\u002Fwp:comment>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>333333333333\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1146\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>where are you now?\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\n+\n+Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\n+\n+In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\n+\n+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\n+\n+Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1148\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>I am here, beside you\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1149\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1450973326:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asdasdasd\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1143\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1144\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1139\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1140\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 3\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1142\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1153\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>trau va bo\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1154\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1164\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1165\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1166\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1167\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>How to create a course\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1169\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>What is your name\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1170\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1171\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1168\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1172\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1173\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1228\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1229\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1136\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1137\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1230\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>333333333333\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1145\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>44444444\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1227\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>cookie\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1231\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\t\u003C\u002Fchannel>\n+\u003C\u002Frss>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Fsample-data.xml \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Fsample-data.xml\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fdummy-data\u002Fsample-data.xml\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fdummy-data\u002Fsample-data.xml\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1424 +1,1424 @@\n-\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n-\u003Crss version=\"2.0\"\r\n-\txmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\r\n-\txmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\r\n-\txmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\r\n-\txmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\r\n-\txmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\r\n->\r\n-\u003Cchannel>\r\n-\t\u003Cwp:course>\r\n-\t\t\u003Cwp:course_name>Sample Course\u003C\u002Fwp:course_name>\r\n-\r\n-\t\t\u003Cwp:section>\r\n-\r\n-\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-\t\t\t\u003Cwp:section_description>\u003C![CDATA[Lorem ispul]]>\u003C\u002Fwp:section_description>\r\n-\r\n-\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:item_name>Lesson 1\u003C\u002Fwp:item_name>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\r\n-\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003C\u002Fwp:course>\r\n-\t\u003Citem>\r\n-\t\u003Ctitle>This is a new course\u003C\u002Ftitle>\r\n-\t\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\t\u003Cwp:post_id>1511\u003C\u002Fwp:post_id>\r\n-\t\t\u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\r\n-\t\t\u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\r\n-\t\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\t\u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\r\n-\t\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-\t\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>207\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1511\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>207\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1512\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>word wide web 2222\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1512\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\t\t\t\u003Citem>\r\n-\t\u003Ctitle>What should be here?\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\r\n-\r\n-Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\r\n-\r\n-Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\r\n-\r\n-Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\r\n-\r\n-Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1513\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\u003C![CDATA[IT]]>\u003C\u002Fcategory>\r\n-\t\t\u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\u003C![CDATA[Software]]>\u003C\u002Fcategory>\r\n-\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1452319104:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1514\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1515\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1516\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1517\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1518\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1519\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>6\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1520\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>7\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1521\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>8\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1522\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>9\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1523\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>10\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1524\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>11\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1525\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>12\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1526\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>13\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1527\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>14\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>2\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1528\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1529\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1530\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1531\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>210\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>3\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>210\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1532\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>211\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>4\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>211\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1533\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>5\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1534\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1535\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1536\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1537\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1538\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\t\u003Cwp:section>\r\n-\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-\t\t\u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\r\n-\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\r\n-\t\t\u003Cwp:section_order>6\u003C\u002Fwp:section_order>\r\n-\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1539\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1540\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\t\t\u003Cwp:section_item>\r\n-\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\r\n-\t\t\t\t\u003Cwp:item_id>1541\u003C\u002Fwp:item_id>\r\n-\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\r\n-\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\r\n-\t\t\t\u003C\u002Fwp:section_item>\r\n-\t\t\t\u003C\u002Fwp:section>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1514\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>where are you now?\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\r\n-\r\n-Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\r\n-\r\n-In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\r\n-\r\n-Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\r\n-\r\n-Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1515\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>I am here, beside you\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1516\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1452319835:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\u003Cwp:question>\r\n-\t\t\u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\r\n-\t\t\u003Cwp:question_id>1542\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\r\n-\t\t\u003Cwp:question_order>\u003C\u002Fwp:question_order>\r\n-\t\u003C\u002Fwp:question>\r\n-\r\n-\r\n-\t\u003Cwp:question>\r\n-\t\t\u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\r\n-\t\t\u003Cwp:question_order>\u003C\u002Fwp:question_order>\r\n-\t\u003C\u002Fwp:question>\r\n-\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Question #1\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Sat, 09 Jan 2016 06:12:35 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1542\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2016-01-09 06:12:35\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2016-01-09 06:12:35\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>question-1\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1452321706:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:4:\"True\";s:5:\"value\";s:4:\"true\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:11:\"Falseasdasd\";s:5:\"value\";s:5:\"false\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:13:\"asdasdasdadss\";s:5:\"value\";s:13:\"5690ac2667caa\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Question #2\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Sat, 09 Jan 2016 06:12:49 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1543\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2016-01-09 06:12:49\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2016-01-09 06:12:49\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>question-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1452326236:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option First\";s:5:\"value\";s:12:\"option_first\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:14:\"Option Seconds\";s:5:\"value\";s:14:\"option_seconds\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\t\u003Cwp:answer>\r\n-\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\r\n-\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option Third\";s:5:\"value\";s:12:\"option_third\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\r\n-\t\t\u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\r\n-\t\u003C\u002Fwp:answer>\r\n-\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asdasdasd\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1517\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1518\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1519\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1520\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 3\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1521\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1522\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>trau va bo\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1523\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1524\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1525\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1526\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1527\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>How to create a course\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1528\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>What is your name\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1529\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1530\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1531\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1532\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1533\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1534\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1535\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1536\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1537\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1538\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>333333333333\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1539\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>44444444\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1540\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\u003Citem>\r\n-\t\u003Ctitle>cookie\u003C\u002Ftitle>\r\n-\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\r\n-\t\u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\r\n-\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\r\n-\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\r\n-\t\u003Cdescription>\u003C\u002Fdescription>\r\n-\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\r\n-\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\r\n-\t\u003Cwp:post_id>1541\u003C\u002Fwp:post_id>\r\n-\t\u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\r\n-\t\u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\r\n-\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\r\n-\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\r\n-\t\u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\r\n-\t\u003Cwp:status>publish\u003C\u002Fwp:status>\r\n-\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\r\n-\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\r\n-\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\r\n-\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\r\n-\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\r\n-\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\r\n-\t\t\t\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\r\n-\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\r\n-\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\r\n-\t\t\u003C\u002Fwp:postmeta>\r\n-\u003C\u002Fitem>\t\u003C\u002Fchannel>\r\n-\u003C\u002Frss>\r\n+\u003C?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n+\u003Crss version=\"2.0\"\n+\txmlns:excerpt=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002Fexcerpt\u002F\"\n+\txmlns:content=\"http:\u002F\u002Fpurl.org\u002Frss\u002F1.0\u002Fmodules\u002Fcontent\u002F\"\n+\txmlns:wfw=\"http:\u002F\u002Fwellformedweb.org\u002FCommentAPI\u002F\"\n+\txmlns:dc=\"http:\u002F\u002Fpurl.org\u002Fdc\u002Felements\u002F1.1\u002F\"\n+\txmlns:wp=\"http:\u002F\u002Fwordpress.org\u002Fexport\u002FLPR_EXPORT_VER\u002F\"\n+>\n+\u003Cchannel>\n+\t\u003Cwp:course>\n+\t\t\u003Cwp:course_name>Sample Course\u003C\u002Fwp:course_name>\n+\n+\t\t\u003Cwp:section>\n+\n+\t\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+\t\t\t\u003Cwp:section_description>\u003C![CDATA[Lorem ispul]]>\u003C\u002Fwp:section_description>\n+\n+\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:item_name>Lesson 1\u003C\u002Fwp:item_name>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\n+\t\t\u003C\u002Fwp:section>\n+\n+\t\u003C\u002Fwp:course>\n+\t\u003Citem>\n+\t\u003Ctitle>This is a new course\u003C\u002Ftitle>\n+\t\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\t\u003Cwp:post_id>1511\u003C\u002Fwp:post_id>\n+\t\t\u003Cwp:post_date>2015-11-11 10:45:53\u003C\u002Fwp:post_date>\n+\t\t\u003Cwp:post_date_gmt>2015-11-11 10:45:53\u003C\u002Fwp:post_date_gmt>\n+\t\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\t\u003Cwp:post_name>this-is-a-new-course\u003C\u002Fwp:post_name>\n+\t\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+\t\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451441611:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>207\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1511\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>207\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1512\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>word wide web 2222\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwwwwwwwwwwwwwwwwwwww\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Wed, 30 Dec 2015 02:06:58 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_lesson&#038;p=1232\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1512\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-30 02:06:58\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-30 02:06:58\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>wwwwwwwwwwwwwwwwwwww\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451443416:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\t\t\t\u003Citem>\n+\t\u003Ctitle>What should be here?\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fdao-tao-cac-khoa-hoc-onine\u002Fwhat-should-be-here\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 07:08:08 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002F?post_type=lp_course&#038;p=908\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[Phasellus accumsan cursus velit. Phasellus nec sem in justo pellentesque facilisis. Fusce vel dui. Integer tincidunt. Quisque id odio.\n+\n+Sed hendrerit. Morbi mattis ullamcorper velit. Phasellus dolor. Sed libero. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.\n+\n+Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. Phasellus tempus. Donec posuere vulputate arcu. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Sed a libero.\n+\n+Nam eget dui. Quisque ut nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Nunc nec neque. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam.\n+\n+Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Vestibulum fringilla pede sit amet augue. Etiam rhoncus.]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1513\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 07:08:08\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 07:08:08\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>what-should-be-here\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_course\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\u003Ccategory domain=\"course_category\" nicename=\"it\" id=\"18\" parent=\"0\" description=\" \">\u003C![CDATA[IT]]>\u003C\u002Fcategory>\n+\t\t\u003Ccategory domain=\"course_category\" nicename=\"software\" id=\"19\" parent=\"18\" description=\" \">\u003C![CDATA[Software]]>\u003C\u002Fcategory>\n+\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1452319104:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_admin_hidden_sections\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[a:5:{i:0;s:3:\"132\";i:1;s:3:\"133\";i:2;s:3:\"134\";i:3;s:3:\"135\";i:4;s:0:\"\";}]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lpr_course_lesson_quiz\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_status\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[publish]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_course_result\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[evaluate_lesson]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_required_enroll\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #1\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>1\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[asd asd asdasd asdasd asdasd asda]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1514\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1515\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1516\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1517\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1518\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1519\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>6\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1520\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>7\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1521\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>8\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1522\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>9\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1523\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>10\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1524\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>11\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1525\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>12\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1526\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>13\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>208\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1527\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>14\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #2\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>2\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[asdas das d asdas das asdasd asdas dasdas dasdasd]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1528\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1529\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1530\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>209\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1531\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>210\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #3\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>3\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>210\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1532\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>211\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #4\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>4\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>211\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1533\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_quiz\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #5\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>5\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1534\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1535\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1536\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1537\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>4\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>212\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1538\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>5\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\t\u003Cwp:section>\n+\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+\t\t\u003Cwp:section_name>Section #6\u003C\u002Fwp:section_name>\n+\t\t\u003Cwp:section_course_id>1513\u003C\u002Fwp:section_course_id>\n+\t\t\u003Cwp:section_order>6\u003C\u002Fwp:section_order>\n+\t\t\u003Cwp:section_description>\u003C![CDATA[]]>\u003C\u002Fwp:section_description>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1539\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>1\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1540\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>2\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\t\t\u003Cwp:section_item>\n+\t\t\t\t\u003Cwp:section_id>213\u003C\u002Fwp:section_id>\n+\t\t\t\t\u003Cwp:item_id>1541\u003C\u002Fwp:item_id>\n+\t\t\t\t\u003Cwp:item_order>3\u003C\u002Fwp:item_order>\n+\t\t\t\t\u003Cwp:item_type>lp_lesson\u003C\u002Fwp:item_type>\n+\t\t\t\u003C\u002Fwp:section_item>\n+\t\t\t\u003C\u002Fwp:section>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>333333333333\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 04:19:22 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002F333333333333-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1514\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 04:19:22\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 04:19:22\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451469598:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[true_or_false]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>where are you now?\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 08:20:59 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhere-are-you-now\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[Nulla porta dolor. Ut varius tincidunt libero. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Fusce egestas elit eget lorem. Vivamus aliquet elit ac nisl.\n+\n+Cras ultricies mi eu turpis hendrerit fringilla. Quisque id mi. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas malesuada. Praesent nec nisl a purus blandit viverra.\n+\n+In auctor lobortis lacus. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Nam adipiscing. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Nam commodo suscipit quam.\n+\n+Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam accumsan lorem in dui. Cras varius. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Suspendisse non nisl sit amet velit hendrerit rutrum.\n+\n+Morbi ac felis. Etiam rhoncus. Praesent ac massa at ligula laoreet iaculis. Nunc nulla. In turpis.]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1515\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 08:20:59\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 08:20:59\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>where-are-you-now\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451449804:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>I am here, beside you\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 08:26:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fi-am-here-beside-you\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1516\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 08:26:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 08:26:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>i-am-here-beside-you\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1452319835:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_result\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_show_question_answer\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\u003Cwp:question>\n+\t\t\u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\n+\t\t\u003Cwp:question_id>1542\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\n+\t\t\u003Cwp:question_order>\u003C\u002Fwp:question_order>\n+\t\u003C\u002Fwp:question>\n+\n+\n+\t\u003Cwp:question>\n+\t\t\u003Cwp:quiz_id>1516\u003C\u002Fwp:quiz_id>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:params>\u003C![CDATA[]]>\u003C\u002Fwp:params>\n+\t\t\u003Cwp:question_order>\u003C\u002Fwp:question_order>\n+\t\u003C\u002Fwp:question>\n+\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Question #1\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Sat, 09 Jan 2016 06:12:35 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-1\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1542\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2016-01-09 06:12:35\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2016-01-09 06:12:35\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>question-1\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1452321706:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:4:\"True\";s:5:\"value\";s:4:\"true\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:11:\"Falseasdasd\";s:5:\"value\";s:5:\"false\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:13:\"asdasdasdadss\";s:5:\"value\";s:13:\"5690ac2667caa\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Question #2\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Sat, 09 Jan 2016 06:12:49 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquestions\u002Fquestion-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1543\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2016-01-09 06:12:49\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2016-01-09 06:12:49\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>question-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_question\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_type\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[multi_choice]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1452326236:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_last\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_mark\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option First\";s:5:\"value\";s:12:\"option_first\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>1\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:14:\"Option Seconds\";s:5:\"value\";s:14:\"option_seconds\";s:7:\"is_true\";s:3:\"yes\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>2\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\t\u003Cwp:answer>\n+\t\t\u003Cwp:question_id>1543\u003C\u002Fwp:question_id>\n+\t\t\u003Cwp:answer_data>\u003C![CDATA[a:3:{s:4:\"text\";s:12:\"Option Third\";s:5:\"value\";s:12:\"option_third\";s:7:\"is_true\";s:2:\"no\";}]]>\u003C\u002Fwp:answer_data>\n+\t\t\u003Cwp:answer_order>3\u003C\u002Fwp:answer_order>\n+\t\u003C\u002Fwp:answer>\n+\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asdasdasd\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:58:51 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasd\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1517\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:58:51\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:58:51\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asdasdasd\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>dsfsdfsdf\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:59:33 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fdsfsdfsdf\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1518\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:59:33\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:59:33\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>dsfsdfsdf\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1519\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-1-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:41:24 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1520\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:41:24\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:41:24\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-2-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 3\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 03:58:28 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-3\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1521\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 03:58:28\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 03:58:28\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-3\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>qqqqqqqqqqqqqqqqq\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 15:15:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fqqqqqqqqqqqqqqqqq\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1522\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 15:15:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 15:15:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>qqqqqqqqqqqqqqqqq\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1449589506:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>trau va bo\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 15:16:40 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Ftrau-va-bo\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1523\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 15:16:40\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 15:16:40\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>trau-va-bo\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>adasdasdasda asd as\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fadasdasdasda-asd-as\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1524\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>adasdasdasda-asd-as\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asd asda sdasdas da\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasd-asda-sdasdas-da\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1525\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asd-asda-sdasdas-da\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>asdasdasdasdasda\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fasdasdasdasdasda\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1526\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>asdasdasdasdasda\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>assasdasdasdasdasd\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 02:29:12 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fassasdasdasdasdasd\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1527\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 02:29:12\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 02:29:12\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>assasdasdasdasdasd\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>How to create a course\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhow-to-create-a-course\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1528\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>how-to-create-a-course\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>What is your name\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fwhat-is-your-name\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1529\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>what-is-your-name\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>My name is Tu Nguyen\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:13 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fmy-name-is-tu-nguyen\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1530\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:13\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:13\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>my-name-is-tu-nguyen\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdfsdfsdf sdf sdf sdf s\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:39:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsdfsdf-sdf-sdf-sdf-s\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1531\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:39:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:39:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdfsdfsdf-sdf-sdf-sdf-s\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdfsd fsd fsdf\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdfsd-fsd-fsdf\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1532\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdfsd-fsd-fsdf\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>sdf sdfsd fsdf sdfsd f\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Thu, 17 Dec 2015 03:44:14 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Fquizzes\u002Fsdf-sdfsd-fsdf-sdfsd-f\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1533\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-17 03:44:14\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-17 03:44:14\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>sdf-sdfsd-fsdf-sdfsd-f\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_quiz\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:25:33 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1534\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:25:33\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:25:33\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>happy-new-year\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>happy new year!\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:25:34 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fhappy-new-year-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1535\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:25:34\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:25:34\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>happy-new-year-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 1\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-1\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1536\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-1\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_max_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1000]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_students\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_retake_count\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[0]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_passing_condition\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[50]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_enroll_requirement\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[yes]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_edit_lock\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[1451567890:1]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>Lesson 2\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Fri, 04 Dec 2015 08:17:04 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Flesson-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1537\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-04 08:17:04\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-04 08:17:04\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>lesson-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>oi troi oi la troi\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:29:54 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Foi-troi-oi-la-troi\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1538\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:29:54\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:29:54\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>oi-troi-oi-la-troi\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>333333333333\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 08 Dec 2015 04:18:47 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F333333333333-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1539\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-08 04:18:47\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-08 04:18:47\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>open\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>open\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>333333333333-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>44444444\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:02:22 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002F44444444-2\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1540\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:02:22\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:02:22\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>44444444-2\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\u003Citem>\n+\t\u003Ctitle>cookie\u003C\u002Ftitle>\n+\t\u003Clink>http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Flink>\n+\t\u003CpubDate>Tue, 29 Dec 2015 09:33:07 +0000\u003C\u002FpubDate>\n+\t\u003Cdc:creator>\u003C![CDATA[admin]]>\u003C\u002Fdc:creator>\n+\t\u003Cguid isPermaLink=\"false\">http:\u002F\u002Flocalhost\u002Ffoobla\u002Flearnpress\u002F1.0\u002Flessons\u002Fcookie\u002F\u003C\u002Fguid>\n+\t\u003Cdescription>\u003C\u002Fdescription>\n+\t\u003Ccontent:encoded>\u003C![CDATA[]]>\u003C\u002Fcontent:encoded>\n+\t\u003Cexcerpt:encoded>\u003C![CDATA[]]>\u003C\u002Fexcerpt:encoded>\n+\t\u003Cwp:post_id>1541\u003C\u002Fwp:post_id>\n+\t\u003Cwp:post_date>2015-12-29 09:33:07\u003C\u002Fwp:post_date>\n+\t\u003Cwp:post_date_gmt>2015-12-29 09:33:07\u003C\u002Fwp:post_date_gmt>\n+\t\u003Cwp:comment_status>closed\u003C\u002Fwp:comment_status>\n+\t\u003Cwp:ping_status>closed\u003C\u002Fwp:ping_status>\n+\t\u003Cwp:post_name>cookie\u003C\u002Fwp:post_name>\n+\t\u003Cwp:status>publish\u003C\u002Fwp:status>\n+\t\u003Cwp:post_parent>0\u003C\u002Fwp:post_parent>\n+\t\u003Cwp:menu_order>0\u003C\u002Fwp:menu_order>\n+\t\u003Cwp:post_type>lp_lesson\u003C\u002Fwp:post_type>\n+\t\u003Cwp:post_password>\u003C\u002Fwp:post_password>\n+\t\u003Cwp:post_author_id>1\u003C\u002Fwp:post_author_id>\n+\t\u003Cwp:is_sticky>0\u003C\u002Fwp:is_sticky>\n+\t\t\t\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_duration\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[10]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\t\t\u003Cwp:postmeta>\n+\t\t\u003Cwp:meta_key>_lp_is_previewable\u003C\u002Fwp:meta_key>\n+\t\t\u003Cwp:meta_value>\u003C![CDATA[no]]>\u003C\u002Fwp:meta_value>\n+\t\t\u003C\u002Fwp:postmeta>\n+\u003C\u002Fitem>\t\u003C\u002Fchannel>\n+\u003C\u002Frss>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-addon.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-addon.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-addon.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-addon.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,407 +1,407 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_Addon\r\n- *\u002F\r\n-class LP_Addon {\r\n-\t\u002F**\r\n-\t * Current version of addon.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $version = 0;\r\n-\t\u002F**\r\n-\t * LearnPress require addon version\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprivate $lp_require_addon_version = '4.0.0';\r\n-\t\u002F**\r\n-\t * Required version for current version of addon.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $require_version = 0;\r\n-\t\u002F**\r\n-\t * Path to root file of addon.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $plugin_file = '';\r\n-\t\u002F**\r\n-\t * @var string folder path root of addon.\r\n-\t *\u002F\r\n-\tpublic $plugin_folder_path = '';\r\n-\t\u002F**\r\n-\t * Root folder name addon.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $plugin_folder_name = '';\r\n-\t\u002F**\r\n-\t * Plugin base addon.\r\n-\t *\r\n-\t * @var string contain root folder path and root file of addon\r\n-\t *\u002F\r\n-\tpublic $plugin_base = '';\r\n-\t\u002F**\r\n-\t * Base name addon.\r\n-\t *\r\n-\t * @var string root file name php of addon\r\n-\t *\u002F\r\n-\tpublic $plugin_base_name = '';\r\n-\t\u002F**\r\n-\t * Addon text-domain name.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $text_domain = '';\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected $_valid = null;\r\n-\t\u002F**\r\n-\t * Singleton instance of the addon.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $instances = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected static $_admin_notices = array();\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_template_path = '';\r\n-\r\n-\tprotected static $on_activate_plugins = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Addon constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->plugin_base        = plugin_basename( $this->plugin_file );\r\n-\t\t$this->plugin_base_name   = basename( $this->plugin_file );\r\n-\t\t$this->plugin_folder_path = dirname( $this->plugin_file );\r\n-\t\t$this->plugin_folder_name = str_replace( array( '\u002F', $this->plugin_base_name ), '', $this->plugin_base );\r\n-\t\t$this->_define_constants();\r\n-\t\t$this->_includes();\r\n-\t\t$this->load_text_domain();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Define add-on constants.\r\n-\t *\u002F\r\n-\tprotected function _define_constants() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Includes add-on files.\r\n-\t *\u002F\r\n-\tprotected function _includes() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check required version Addons.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_require_version_addon(): bool {\r\n-\t\t$flag = true;\r\n-\r\n-\t\tif ( version_compare( $this->lp_require_addon_version, $this->version, '>' ) ) {\r\n-\t\t\t$flag = false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $flag ) {\r\n-\t\t\tadd_action( 'admin_notices', array( $this, 'admin_notice_require_addon_version' ) );\r\n-\r\n-\t\t\t\u002F\u002F Deactivate plugin .\r\n-\t\t\tif ( ! empty( $this->plugin_base ) ) {\r\n-\t\t\t\tdeactivate_plugins( $this->plugin_base );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check required version LP on Addon.\r\n-\t * Should define require on each Addons by key \"Require_LP_Version\".\r\n-\t * After long time, when ready standard, need check not key \"Require_LP_Version\" will deactivate addon.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_require_version_lp(): bool {\r\n-\r\n-\t\t$flag = true;\r\n-\r\n-\t\t\u002F\u002F If addon not set, return false.\r\n-\t\tif ( empty( $this->require_version ) ) {\r\n-\t\t\t$flag = false;\r\n-\t\t}\r\n-\r\n-\t\tif ( version_compare( $this->require_version, LEARNPRESS_VERSION, '>' ) ) {\r\n-\t\t\t$flag = false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $flag ) {\r\n-\t\t\tadd_action( 'admin_notices', array( $this, 'admin_notice_require_lp_version' ) );\r\n-\r\n-\t\t\t\u002F\u002F Deactivate plugin .\r\n-\t\t\tif ( ! empty( $this->plugin_base ) ) {\r\n-\t\t\t\tdeactivate_plugins( plugin_basename( $this->plugin_base ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\tpublic function admin_notice_require_addon_version() {\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"notice notice-error\">\r\n-\t\t\t\u003Cp>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tprintf(\r\n-\t\t\t\t\twp_kses_post( __( '\u003Cstrong>LearnPress version %1$s require %2$s\u003C\u002Fstrong> version %3$s or higher', 'learnpress' ) ),\r\n-\t\t\t\t\tesc_html( LEARNPRESS_VERSION ),\r\n-\t\t\t\t\tesc_html( $this->get_name() ),\r\n-\t\t\t\t\tesc_html( $this->lp_require_addon_version )\r\n-\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Admin notices\r\n-\t *\u002F\r\n-\tpublic function admin_notice_require_lp_version() {\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"error\">\r\n-\t\t\t\u003Cp>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tprintf(\r\n-\t\t\t\t\twp_kses_post(\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'\u003Cstrong>%1$s\u003C\u002Fstrong> add-on version %2$s requires \u003Cstrong>LearnPress\u003C\u002Fstrong> version %3$s or higher %4$s',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tesc_html( $this->get_name() ),\r\n-\t\t\t\t\tesc_html( $this->version ),\r\n-\t\t\t\t\tesc_html( $this->require_version ),\r\n-\t\t\t\t\t'| Can addon invalid key Require_LP_Version'\r\n-\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_name() {\r\n-\t\tpreg_match( '\u002F([A-z].*)\\\u002F([A-z].*)\u002F', $this->plugin_base, $match );\r\n-\r\n-\t\t$name_addon = '';\r\n-\t\tif ( isset( $match[1] ) ) {\r\n-\t\t\t$name_addon = $match[1];\r\n-\t\t}\r\n-\r\n-\t\treturn $name_addon;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load text domain\r\n-\t *\u002F\r\n-\tpublic function load_text_domain() {\r\n-\t\tif ( empty( $this->plugin_file ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$text_domain = empty( $this->text_domain ) ? $this->plugin_folder_name : $this->text_domain;\r\n-\t\tif ( $text_domain ) {\r\n-\t\t\tload_plugin_textdomain( $text_domain, false, $this->plugin_folder_name . '\u002Flanguages' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load Addon\r\n-\t *\r\n-\t * @param string $instance\r\n-\t * @param string $path\r\n-\t * @param string $plugin_file\r\n-\t *\r\n-\t * @return void|mixed\r\n-\t *\u002F\r\n-\tpublic static function load( string $instance = '', string $path = '', string $plugin_file = '' ) {\r\n-\t\t$plugin_folder = '';\r\n-\r\n-\t\tif ( $plugin_file ) {\r\n-\t\t\t$plugin_folder = dirname( $plugin_file );\r\n-\t\t}\r\n-\r\n-\t\tif ( $plugin_folder ) {\r\n-\t\t\t$path = \"$plugin_folder\u002F$path\";\r\n-\t\t}\r\n-\r\n-\t\tif ( ! file_exists( $path ) ) {\r\n-\t\t\terror_log(\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( '%s plugin file does not exist.', 'learnpress' ),\r\n-\t\t\t\t\t$path\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tinclude_once $path;\r\n-\t\t$addon_instance = null;\r\n-\r\n-\t\tif ( ! array_key_exists( $instance, self::$instances ) ) {\r\n-\t\t\tif ( class_exists( $instance ) ) {\r\n-\t\t\t\t$addon_instance = new $instance();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $addon_instance ) {\r\n-\t\t\t\terror_log(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( '%s plugin class does not exist.', 'learnpress' ),\r\n-\t\t\t\t\t\t$instance\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$addon_instance->plugin_file = $plugin_file;\r\n-\r\n-\t\t\tself::$instances[ $instance ] = $addon_instance;\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instances[ $instance ];\r\n-\t}\r\n-\r\n-\tpublic function get_plugin_url( $sub = '\u002F' ) {\r\n-\t\treturn plugins_url( $sub, $this->plugin_file );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get content template of addon.\r\n-\t *\r\n-\t * @param string $template_name\r\n-\t * @param array $args\r\n-\t * @param bool $include\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_template( string $template_name = '', array $args = [], bool $include = true ) {\r\n-\t\t\u002F\u002F Check path file not extension php, will add extension .php\r\n-\t\tif ( ! preg_match( '\u002F\\.php$\u002F', $template_name ) ) {\r\n-\t\t\t$template_name .= '.php';\r\n-\t\t}\r\n-\t\t$default_path          = $this->plugin_folder_path . \"\u002Ftemplates\u002F$template_name\";\r\n-\t\t$folder_name_rewrite   = learn_press_template_path();\r\n-\t\t$from_child_theme_path = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s\u002F%s\u002F%s',\r\n-\t\t\tget_stylesheet_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t'addons',\r\n-\t\t\tstr_replace( 'learnpress-', '', $this->plugin_folder_name ),\r\n-\t\t\t$template_name\r\n-\t\t);\r\n-\t\t$from_theme_path       = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s\u002F%s\u002F%s',\r\n-\t\t\tget_template_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t'addons',\r\n-\t\t\tstr_replace( 'learnpress-', '', $this->plugin_folder_name ),\r\n-\t\t\t$template_name\r\n-\t\t);\r\n-\r\n-\t\t$path_load = $default_path;\r\n-\t\tif ( file_exists( $from_child_theme_path ) ) {\r\n-\t\t\t$path_load = $from_child_theme_path;\r\n-\t\t} elseif ( file_exists( $from_theme_path ) ) {\r\n-\t\t\t$path_load = $from_theme_path;\r\n-\t\t}\r\n-\t\tTemplate::instance( $include )->get_template( $path_load, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get content template of addon.\r\n-\t *\r\n-\t * @param string $template_name\r\n-\t * @param mixed $args\r\n-\t *\r\n-\t * @since 4.2.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_admin_template( string $template_name = '', $args = [] ) {\r\n-\t\tif ( ! preg_match( '\u002F\\.php$\u002F', $template_name ) ) {\r\n-\t\t\t$template_name .= '.php';\r\n-\t\t}\r\n-\t\t$template_path = \"{$this->plugin_folder_path}\u002Finc\u002Fadmin\u002Fviews\u002F$template_name\";\r\n-\t\tTemplate::instance()->get_template( $template_path, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output content of admin view file.\r\n-\t *\r\n-\t * @param string $view\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @since x.x.x\r\n-\t *\u002F\r\n-\tpublic function admin_view( $view, $args = array() ) {\r\n-\t\t$args['plugin_file'] = $this->plugin_file;\r\n-\t\tlearn_press_admin_view( $view, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.0, wishlist v4.0.8 still use\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\treturn new static();\r\n-\t\t\u002F*$name = self::_get_called_class();\r\n-\t\tif ( false === $name ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( self::$instances[ $name ] ) ) {\r\n-\t\t\tself::$instances[ $name ] = new $name();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instances[ $name ];*\u002F\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|string\r\n-\t * @deprecated 4.2.0\r\n-\t *\u002F\r\n-\t\u002F*protected static function _get_called_class() {\r\n-\t\tif ( function_exists( 'get_called_class' ) ) {\r\n-\t\t\treturn get_called_class();\r\n-\t\t}\r\n-\r\n-\t\t$backtrace = debug_backtrace();\r\n-\r\n-\t\tif ( empty( $backtrace[2] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $backtrace[2]['args'][0] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $backtrace[2]['args'][0];\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_Addon\n+ *\u002F\n+class LP_Addon {\n+\t\u002F**\n+\t * Current version of addon.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $version = 0;\n+\t\u002F**\n+\t * LearnPress require addon version\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprivate $lp_require_addon_version = '4.0.0';\n+\t\u002F**\n+\t * Required version for current version of addon.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $require_version = 0;\n+\t\u002F**\n+\t * Path to root file of addon.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $plugin_file = '';\n+\t\u002F**\n+\t * @var string folder path root of addon.\n+\t *\u002F\n+\tpublic $plugin_folder_path = '';\n+\t\u002F**\n+\t * Root folder name addon.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $plugin_folder_name = '';\n+\t\u002F**\n+\t * Plugin base addon.\n+\t *\n+\t * @var string contain root folder path and root file of addon\n+\t *\u002F\n+\tpublic $plugin_base = '';\n+\t\u002F**\n+\t * Base name addon.\n+\t *\n+\t * @var string root file name php of addon\n+\t *\u002F\n+\tpublic $plugin_base_name = '';\n+\t\u002F**\n+\t * Addon text-domain name.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $text_domain = '';\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprotected $_valid = null;\n+\t\u002F**\n+\t * Singleton instance of the addon.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic static $instances = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected static $_admin_notices = array();\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_template_path = '';\n+\n+\tprotected static $on_activate_plugins = array();\n+\n+\t\u002F**\n+\t * LP_Addon constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->plugin_base        = plugin_basename( $this->plugin_file );\n+\t\t$this->plugin_base_name   = basename( $this->plugin_file );\n+\t\t$this->plugin_folder_path = dirname( $this->plugin_file );\n+\t\t$this->plugin_folder_name = str_replace( array( '\u002F', $this->plugin_base_name ), '', $this->plugin_base );\n+\t\t$this->_define_constants();\n+\t\t$this->_includes();\n+\t\t$this->load_text_domain();\n+\t}\n+\n+\t\u002F**\n+\t * Define add-on constants.\n+\t *\u002F\n+\tprotected function _define_constants() {\n+\t}\n+\n+\t\u002F**\n+\t * Includes add-on files.\n+\t *\u002F\n+\tprotected function _includes() {\n+\t}\n+\n+\t\u002F**\n+\t * Check required version Addons.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_require_version_addon(): bool {\n+\t\t$flag = true;\n+\n+\t\tif ( version_compare( $this->lp_require_addon_version, $this->version, '>' ) ) {\n+\t\t\t$flag = false;\n+\t\t}\n+\n+\t\tif ( ! $flag ) {\n+\t\t\tadd_action( 'admin_notices', array( $this, 'admin_notice_require_addon_version' ) );\n+\n+\t\t\t\u002F\u002F Deactivate plugin .\n+\t\t\tif ( ! empty( $this->plugin_base ) ) {\n+\t\t\t\t\u002F\u002Fdeactivate_plugins( $this->plugin_base );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check required version LP on Addon.\n+\t * Should define require on each Addons by key \"Require_LP_Version\".\n+\t * After long time, when ready standard, need check not key \"Require_LP_Version\" will deactivate addon.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_require_version_lp(): bool {\n+\n+\t\t$flag = true;\n+\n+\t\t\u002F\u002F If addon not set, return false.\n+\t\tif ( empty( $this->require_version ) ) {\n+\t\t\t$flag = false;\n+\t\t}\n+\n+\t\tif ( version_compare( $this->require_version, LEARNPRESS_VERSION, '>' ) ) {\n+\t\t\t$flag = false;\n+\t\t}\n+\n+\t\tif ( ! $flag ) {\n+\t\t\tadd_action( 'admin_notices', array( $this, 'admin_notice_require_lp_version' ) );\n+\n+\t\t\t\u002F\u002F Deactivate plugin .\n+\t\t\tif ( ! empty( $this->plugin_base ) ) {\n+\t\t\t\t\u002F\u002Fdeactivate_plugins( plugin_basename( $this->plugin_base ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\tpublic function admin_notice_require_addon_version() {\n+\t\t?>\n+\t\t\u003Cdiv class=\"notice notice-error\">\n+\t\t\t\u003Cp>\n+\t\t\t\t\u003C?php\n+\t\t\t\tprintf(\n+\t\t\t\t\twp_kses_post( __( '\u003Cstrong>LearnPress version %1$s require %2$s\u003C\u002Fstrong> version %3$s or higher', 'learnpress' ) ),\n+\t\t\t\t\tesc_html( LEARNPRESS_VERSION ),\n+\t\t\t\t\tesc_html( $this->get_name() ),\n+\t\t\t\t\tesc_html( $this->lp_require_addon_version )\n+\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\n+\t\u002F**\n+\t * Admin notices\n+\t *\u002F\n+\tpublic function admin_notice_require_lp_version() {\n+\t\t?>\n+\t\t\u003Cdiv class=\"error\">\n+\t\t\t\u003Cp>\n+\t\t\t\t\u003C?php\n+\t\t\t\tprintf(\n+\t\t\t\t\twp_kses_post(\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'\u003Cstrong>%1$s\u003C\u002Fstrong> add-on version %2$s requires \u003Cstrong>LearnPress\u003C\u002Fstrong> version %3$s or higher %4$s',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\tesc_html( $this->get_name() ),\n+\t\t\t\t\tesc_html( $this->version ),\n+\t\t\t\t\tesc_html( $this->require_version ),\n+\t\t\t\t\t'| Can addon invalid key Require_LP_Version'\n+\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_name() {\n+\t\tpreg_match( '\u002F([A-z].*)\\\u002F([A-z].*)\u002F', $this->plugin_base, $match );\n+\n+\t\t$name_addon = '';\n+\t\tif ( isset( $match[1] ) ) {\n+\t\t\t$name_addon = $match[1];\n+\t\t}\n+\n+\t\treturn $name_addon;\n+\t}\n+\n+\t\u002F**\n+\t * Load text domain\n+\t *\u002F\n+\tpublic function load_text_domain() {\n+\t\tif ( empty( $this->plugin_file ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$text_domain = empty( $this->text_domain ) ? $this->plugin_folder_name : $this->text_domain;\n+\t\tif ( $text_domain ) {\n+\t\t\tload_plugin_textdomain( $text_domain, false, $this->plugin_folder_name . '\u002Flanguages' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Load Addon\n+\t *\n+\t * @param string $instance\n+\t * @param string $path\n+\t * @param string $plugin_file\n+\t *\n+\t * @return void|mixed\n+\t *\u002F\n+\tpublic static function load( string $instance = '', string $path = '', string $plugin_file = '' ) {\n+\t\t$plugin_folder = '';\n+\n+\t\tif ( $plugin_file ) {\n+\t\t\t$plugin_folder = dirname( $plugin_file );\n+\t\t}\n+\n+\t\tif ( $plugin_folder ) {\n+\t\t\t$path = \"$plugin_folder\u002F$path\";\n+\t\t}\n+\n+\t\tif ( ! file_exists( $path ) ) {\n+\t\t\terror_log(\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( '%s plugin file does not exist.', 'learnpress' ),\n+\t\t\t\t\t$path\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tinclude_once $path;\n+\t\t$addon_instance = null;\n+\n+\t\tif ( ! array_key_exists( $instance, self::$instances ) ) {\n+\t\t\tif ( class_exists( $instance ) ) {\n+\t\t\t\t$addon_instance = new $instance();\n+\t\t\t}\n+\n+\t\t\tif ( ! $addon_instance ) {\n+\t\t\t\terror_log(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( '%s plugin class does not exist.', 'learnpress' ),\n+\t\t\t\t\t\t$instance\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$addon_instance->plugin_file = $plugin_file;\n+\n+\t\t\tself::$instances[ $instance ] = $addon_instance;\n+\t\t}\n+\n+\t\treturn self::$instances[ $instance ];\n+\t}\n+\n+\tpublic function get_plugin_url( $sub = '\u002F' ) {\n+\t\treturn plugins_url( $sub, $this->plugin_file );\n+\t}\n+\n+\t\u002F**\n+\t * Get content template of addon.\n+\t *\n+\t * @param string $template_name\n+\t * @param array $args\n+\t * @param bool $include\n+\t *\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_template( string $template_name = '', array $args = [], bool $include = true ) {\n+\t\t\u002F\u002F Check path file not extension php, will add extension .php\n+\t\tif ( ! preg_match( '\u002F\\.php$\u002F', $template_name ) ) {\n+\t\t\t$template_name .= '.php';\n+\t\t}\n+\t\t$default_path          = $this->plugin_folder_path . \"\u002Ftemplates\u002F$template_name\";\n+\t\t$folder_name_rewrite   = learn_press_template_path();\n+\t\t$from_child_theme_path = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s\u002F%s\u002F%s',\n+\t\t\tget_stylesheet_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t'addons',\n+\t\t\tstr_replace( 'learnpress-', '', $this->plugin_folder_name ),\n+\t\t\t$template_name\n+\t\t);\n+\t\t$from_theme_path       = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s\u002F%s\u002F%s',\n+\t\t\tget_template_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t'addons',\n+\t\t\tstr_replace( 'learnpress-', '', $this->plugin_folder_name ),\n+\t\t\t$template_name\n+\t\t);\n+\n+\t\t$path_load = $default_path;\n+\t\tif ( file_exists( $from_child_theme_path ) ) {\n+\t\t\t$path_load = $from_child_theme_path;\n+\t\t} elseif ( file_exists( $from_theme_path ) ) {\n+\t\t\t$path_load = $from_theme_path;\n+\t\t}\n+\t\tTemplate::instance( $include )->get_template( $path_load, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Get content template of addon.\n+\t *\n+\t * @param string $template_name\n+\t * @param mixed $args\n+\t *\n+\t * @since 4.2.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_admin_template( string $template_name = '', $args = [] ) {\n+\t\tif ( ! preg_match( '\u002F\\.php$\u002F', $template_name ) ) {\n+\t\t\t$template_name .= '.php';\n+\t\t}\n+\t\t$template_path = \"{$this->plugin_folder_path}\u002Finc\u002Fadmin\u002Fviews\u002F$template_name\";\n+\t\tTemplate::instance()->get_template( $template_path, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Output content of admin view file.\n+\t *\n+\t * @param string $view\n+\t * @param array $args\n+\t *\n+\t * @since x.x.x\n+\t *\u002F\n+\tpublic function admin_view( $view, $args = array() ) {\n+\t\t$args['plugin_file'] = $this->plugin_file;\n+\t\tlearn_press_admin_view( $view, $args );\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.0, wishlist v4.0.8 still use\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\treturn new static();\n+\t\t\u002F*$name = self::_get_called_class();\n+\t\tif ( false === $name ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( empty( self::$instances[ $name ] ) ) {\n+\t\t\tself::$instances[ $name ] = new $name();\n+\t\t}\n+\n+\t\treturn self::$instances[ $name ];*\u002F\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|string\n+\t * @deprecated 4.2.0\n+\t *\u002F\n+\t\u002F*protected static function _get_called_class() {\n+\t\tif ( function_exists( 'get_called_class' ) ) {\n+\t\t\treturn get_called_class();\n+\t\t}\n+\n+\t\t$backtrace = debug_backtrace();\n+\n+\t\tif ( empty( $backtrace[2] ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( empty( $backtrace[2]['args'][0] ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $backtrace[2]['args'][0];\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-array-access.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-array-access.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-array-access.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-array-access.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,99 +1,99 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Array_Access\r\n- *\u002F\r\n-class LP_Array_Access {\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_data = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $_position = 0;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Array_Access constructor.\r\n-\t *\r\n-\t * @param $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data ) {\r\n-\t\t$this->_data = is_array( $data ) ? $data : (array) $data;\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\tif ( $offset ) {\r\n-\t\t\treturn array_key_exists( $offset, $this->_data );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\tif ( $offset ) {\r\n-\t\t\t$this->_data[ $offset ] = $value;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\treturn $this->offsetExists( $offset ) ? $this->_data[ $offset ] : false;\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\tif ( $this->offsetExists( $offset ) ) {\r\n-\t\t\tunset( $this->_data[ $offset ] );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Reset current position of answer options.\r\n-\t *\u002F\r\n-\tpublic function rewind() {\r\n-\t\t$this->_position = 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function current() {\r\n-\t\t$values = array_values( $this->_data );\r\n-\r\n-\t\treturn $values[ $this->_position ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function key() {\r\n-\t\t$keys = array_keys( $this->_data );\r\n-\r\n-\t\treturn $keys[ $this->_position ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Nex question.\r\n-\t *\u002F\r\n-\tpublic function next() {\r\n-\t\t++ $this->_position;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function valid() {\r\n-\t\t$values = array_values( $this->_data );\r\n-\r\n-\t\treturn isset( $values[ $this->_position ] );\r\n-\t}\r\n-\r\n-\tpublic function count() {\r\n-\t\treturn sizeof( $this->_data );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Array_Access\n+ *\u002F\n+class LP_Array_Access {\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_data = array();\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $_position = 0;\n+\n+\t\u002F**\n+\t * LP_Array_Access constructor.\n+\t *\n+\t * @param $data\n+\t *\u002F\n+\tpublic function __construct( $data ) {\n+\t\t$this->_data = is_array( $data ) ? $data : (array) $data;\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\tif ( $offset ) {\n+\t\t\treturn array_key_exists( $offset, $this->_data );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\tif ( $offset ) {\n+\t\t\t$this->_data[ $offset ] = $value;\n+\t\t}\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\treturn $this->offsetExists( $offset ) ? $this->_data[ $offset ] : false;\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\tif ( $this->offsetExists( $offset ) ) {\n+\t\t\tunset( $this->_data[ $offset ] );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Reset current position of answer options.\n+\t *\u002F\n+\tpublic function rewind() {\n+\t\t$this->_position = 0;\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function current() {\n+\t\t$values = array_values( $this->_data );\n+\n+\t\treturn $values[ $this->_position ];\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function key() {\n+\t\t$keys = array_keys( $this->_data );\n+\n+\t\treturn $keys[ $this->_position ];\n+\t}\n+\n+\t\u002F**\n+\t * Nex question.\n+\t *\u002F\n+\tpublic function next() {\n+\t\t++ $this->_position;\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t *\u002F\n+\tpublic function valid() {\n+\t\t$values = array_values( $this->_data );\n+\n+\t\treturn isset( $values[ $this->_position ] );\n+\t}\n+\n+\tpublic function count() {\n+\t\treturn sizeof( $this->_data );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-assets.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-assets.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-assets.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-assets.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,409 +1,409 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Abstract_Assets\r\n- *\r\n- * Abstract class for managing assets\r\n- *\u002F\r\n-abstract class LP_Abstract_Assets {\r\n-\r\n-\tprotected $_cache = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_scripts = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_styles = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_script_data = array();\r\n-\t\u002F**\r\n-\t * Path file min\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic static $_min_assets = '.min';\r\n-\t\u002F**\r\n-\t * Version file asset\r\n-\t *\r\n-\t * @var mixed|string\r\n-\t *\u002F\r\n-\tpublic static $_version_assets = LEARNPRESS_VERSION;\r\n-\t\u002F**\r\n-\t * Path file\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic static $_folder_source = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Abstract_Assets constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$priority = 1000;\r\n-\r\n-\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\tself::$_min_assets     = '';\r\n-\t\t\tself::$_version_assets = uniqid();\r\n-\t\t\tself::$_folder_source  = 'src\u002F';\r\n-\t\t}\r\n-\r\n-\t\tif ( is_admin() ) {\r\n-\t\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'load_scripts' ) );\r\n-\t\t\tadd_action( 'admin_print_scripts', array( $this, 'localize_printed_admin_scripts' ) );\r\n-\t\t\t\u002F\u002F Use for modal search items, modal search users when edit manual LP Order ue Vue js.\r\n-\t\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'localize_printed_admin_scripts' ) );\r\n-\t\t} else {\r\n-\t\t\tadd_action( 'wp_enqueue_scripts', array( $this, 'load_scripts' ), $priority );\r\n-\t\t\tadd_action( 'wp_print_scripts', array( $this, 'localize_printed_scripts' ), $priority + 10 );\r\n-\t\t\t\u002F\u002Fadd_action( 'wp_print_footer_scripts', array( $this, 'localize_printed_scripts' ), $priority + 10 );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tabstract function load_scripts();\r\n-\r\n-\t\u002F**\r\n-\t * Default scripts\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function _get_scripts(): array {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Default styles\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function _get_styles(): array {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register\u002FEnqueue script\r\n-\t *\r\n-\t * @param string $page_current\r\n-\t * @author tungnx\r\n-\t * @since 4.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tprotected function handle_js( string $page_current = '' ) {\r\n-\t\t$scripts = $this->_get_scripts();\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Asset_Key[] $scripts\r\n-\t\t *\u002F\r\n-\t\tforeach ( $scripts as $handle => $script ) {\r\n-\t\t\tif ( ! $script instanceof LP_Asset_Key ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For version addon.\r\n-\t\t\tif ( ! LP_Debug::is_debug() && ! empty( $script->_version ) ) {\r\n-\t\t\t\tself::$_version_assets = $script->_version;\r\n-\t\t\t} elseif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\tself::$_version_assets = time();\r\n-\t\t\t} else {\r\n-\t\t\t\tself::$_version_assets = LEARNPRESS_VERSION;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\twp_register_script( $handle, $script->_url, $script->_deps, self::$_version_assets, $script->_in_footer );\r\n-\t\t\t\u002F\u002F Add strategy for script defer\u002Fasync. @since 4.2.5.5\r\n-\t\t\tforeach ( $script->_strategy as $key => $value ) {\r\n-\t\t\t\twp_script_add_data( $handle, $key, $value );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $script->_only_register ) {\r\n-\t\t\t\t$can_load_js = $this->check_can_load_asset( $handle, $page_current, $script->_screens, $script->_exclude_screens );\r\n-\r\n-\t\t\t\tif ( $can_load_js ) {\r\n-\t\t\t\t\twp_enqueue_script( $handle );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set translate on file js of folder js\u002Fdist\r\n-\t\t * Path translate of a string on file \".pot\" if have must map to js\u002Fdist\r\n-\t\t *\u002F\r\n-\t\twp_set_script_translations( 'lp-quiz', 'learnpress' );\r\n-\t\twp_set_script_translations( 'lp-profile', 'learnpress' );\r\n-\t\twp_set_script_translations( 'lp-admin', 'learnpress' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register\u002FEnqueue style\r\n-\t *\r\n-\t * @param string $page_current\r\n-\t * @author tungnx\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function handle_style( string $page_current = '' ) {\r\n-\t\t$styles = $this->_get_styles();\r\n-\t\tif ( $styles ) {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var LP_Asset_Key[] $styles\r\n-\t\t\t *\u002F\r\n-\t\t\tforeach ( $styles as $handle => $style ) {\r\n-\t\t\t\tif ( ! $style instanceof LP_Asset_Key ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For version addon.\r\n-\t\t\t\tif ( ! LP_Debug::is_debug() && ! empty( $style->_version ) ) {\r\n-\t\t\t\t\tself::$_version_assets = $style->_version;\r\n-\t\t\t\t} elseif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\t\tself::$_version_assets = time();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tself::$_version_assets = LEARNPRESS_VERSION;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\twp_register_style( $handle, $style->_url, $style->_deps, self::$_version_assets );\r\n-\r\n-\t\t\t\tif ( ! $style->_only_register ) {\r\n-\t\t\t\t\t$can_load_style = $this->check_can_load_asset( $handle, $page_current, $style->_screens, $style->_exclude_screens );\r\n-\r\n-\t\t\t\t\tif ( $can_load_style ) {\r\n-\t\t\t\t\t\twp_enqueue_style( $handle );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check file assets can load on pages\r\n-\t *\r\n-\t * @param string $handle\r\n-\t * @param string $page_current\r\n-\t * @param array $include_screens\r\n-\t * @param array $exclude_screens\r\n-\t * @author tungnx\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.0\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function check_can_load_asset( string $handle, string $page_current, array $include_screens, array $exclude_screens ): bool {\r\n-\t\t$can_load = false;\r\n-\r\n-\t\tif ( ! empty( $include_screens ) ) {\r\n-\t\t\tif ( in_array( $page_current, $include_screens ) ) {\r\n-\t\t\t\t$can_load = true;\r\n-\t\t\t}\r\n-\t\t} elseif ( ! empty( $exclude_screens ) ) {\r\n-\t\t\tif ( ! in_array( $page_current, $exclude_screens ) ) {\r\n-\t\t\t\t$can_load = true;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$can_load = true;\r\n-\t\t}\r\n-\r\n-\t\t$is_on = 'admin';\r\n-\t\tif ( ! is_admin() ) {\r\n-\t\t\t$is_on = 'frontend';\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learnpress\u002F' . $is_on . '\u002Fcan-load-assets\u002F' . $handle,\r\n-\t\t\t$can_load,\r\n-\t\t\t$page_current,\r\n-\t\t\t$include_screens\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register style\r\n-\t *\r\n-\t * @param        $handle\r\n-\t * @param        $src\r\n-\t * @param array $deps\r\n-\t * @param bool $ver\r\n-\t * @param string $media\r\n-\t *\u002F\r\n-\tpublic function register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {\r\n-\t\tif ( ! isset( $this->_styles[ $handle ] ) ) {\r\n-\t\t\t$this->_styles[ $handle ] = array( $handle, $src, $deps, $ver, $media );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register script\r\n-\t *\r\n-\t * @param       $handle\r\n-\t * @param       $src\r\n-\t * @param array $deps\r\n-\t * @param bool $ver\r\n-\t * @param bool $in_footer\r\n-\t *\u002F\r\n-\tpublic function register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {\r\n-\t\tif ( ! isset( $this->_scripts[ $handle ] ) ) {\r\n-\t\t\t$this->_scripts[ $handle ] = array( $handle, $src, $deps, $ver, $in_footer );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enqueue style\r\n-\t *\r\n-\t * @param        $handle\r\n-\t * @param string $src\r\n-\t * @param array $deps\r\n-\t * @param bool $ver\r\n-\t * @param string $media\r\n-\t *\u002F\r\n-\tpublic function enqueue_style( $handle, $src = '', $deps = array(), $ver = false, $media = 'all' ) {\r\n-\t\t$this->register_style( $handle, $src, $deps, $ver, $media );\r\n-\t\tif ( did_action( 'init' ) || did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) ) {\r\n-\t\t\twp_enqueue_style( $handle, $src, $deps, $ver, $media );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enqueue script\r\n-\t *\r\n-\t * @param       $handle\r\n-\t * @param       $src\r\n-\t * @param array $deps\r\n-\t * @param bool $ver\r\n-\t * @param bool $in_footer\r\n-\t *\u002F\r\n-\tpublic function enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $in_footer = false ) {\r\n-\t\t$this->register_script( $handle, $src, $deps, $ver, $in_footer );\r\n-\t\tif ( did_action( 'init' ) || did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) ) {\r\n-\t\t\twp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function add_script_data( $handle, $key_or_array, $value = '' ) {\r\n-\t\tif ( empty( $this->_script_data[ $handle ] ) ) {\r\n-\t\t\t$this->_script_data[ $handle ] = array();\r\n-\t\t}\r\n-\r\n-\t\tif ( func_num_args() == 2 && is_array( $key_or_array ) ) {\r\n-\t\t\t$this->_script_data[ $handle ] = LP_Helper::array_merge_recursive( $this->_script_data[ $handle ], $key_or_array );\r\n-\t\t} else {\r\n-\t\t\t$this->_script_data[ $handle ][ $key_or_array ] = $value;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function _get_wp_styles() {\r\n-\t\tglobal $wp_styles;\r\n-\r\n-\t\tif ( empty( $wp_styles ) ) {\r\n-\t\t\t$wp_styles = new WP_Styles();\r\n-\t\t}\r\n-\r\n-\t\treturn $wp_styles;\r\n-\t}\r\n-\r\n-\tprotected function _get_wp_scripts() {\r\n-\t\tglobal $wp_scripts;\r\n-\r\n-\t\tif ( empty( $wp_scripts ) ) {\r\n-\t\t\t$wp_scripts = new WP_Scripts();\r\n-\t\t}\r\n-\r\n-\t\treturn $wp_scripts;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $handle\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_script_var_name( $handle ) {\r\n-\t\t$handle = str_replace( array( 'learn-press', 'lp', '_', '-' ), ' ', $handle );\r\n-\t\t$handle = ucwords( $handle );\r\n-\r\n-\t\treturn 'lp' . str_replace( ' ', '', $handle ) . 'Settings';\r\n-\t}\r\n-\r\n-\tpublic function localize_printed_scripts( $side = '' ) {\r\n-\t\t$scripts_data = $this->_get_script_data();\r\n-\r\n-\t\tif ( is_array( $scripts_data ) && is_array( $this->_script_data ) ) {\r\n-\t\t\t$scripts_data = LP_Helper::array_merge_recursive( $scripts_data, $this->_script_data );\r\n-\t\t} elseif ( is_array( $this->_script_data ) ) {\r\n-\t\t\t$scripts_data = $this->_script_data;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $scripts_data ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tglobal $wp_scripts;\r\n-\r\n-\t\tif ( ! $wp_scripts ) {\r\n-\t\t\t$wp_scripts = new WP_Scripts();\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $scripts_data as $handle => $data ) {\r\n-\t\t\t$data = apply_filters( 'learn-press\u002Fscript-data', $data, $handle );\r\n-\t\t\twp_localize_script( $handle, $this->get_script_var_name( $handle ), $data );\r\n-\r\n-\t\t\t\u002F\u002F comment by tungnx\r\n-\t\t\t\u002F\u002F Edit: Use in certificate - Nhamdv.\r\n-\t\t\tif ( isset( $wp_scripts->registered[ $handle ] ) ) {\r\n-\t\t\t\tif ( isset( $wp_scripts->registered[ $handle ]->extra['data'] ) ) {\r\n-\t\t\t\t\tif ( $wp_scripts->registered[ $handle ]->extra['data'] ) {\r\n-\t\t\t\t\t\t$data = $wp_scripts->registered[ $handle ]->extra['data'];\r\n-\t\t\t\t\t\t$data = preg_replace_callback( '~:\"(([0-9]+)([.,]?)([0-9]?)|true|false)\"~', array( $this, '_valid_json_number' ), $data );\r\n-\r\n-\t\t\t\t\t\t$wp_scripts->registered[ $handle ]->extra['data'] = $data;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\t$wp_scripts->print_extra_script( $handle );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function localize_printed_admin_scripts() {\r\n-\t\t$this->localize_printed_scripts( 'admin' );\r\n-\t}\r\n-\r\n-\tprotected function _valid_json_number( $m ) {\r\n-\t\treturn str_replace( array( ':\"', '\"' ), array( ':', '' ), $m[0] );\r\n-\t}\r\n-\r\n-\tprotected function _get_script_data() {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\tpublic function add_localize( $handle, $key_or_array, $value = '' ) {\r\n-\t\tif ( empty( $this->_script_data[ $handle ] ) ) {\r\n-\t\t\t$this->_script_data[ $handle ] = array();\r\n-\t\t}\r\n-\t\tif ( is_array( $key_or_array ) ) {\r\n-\t\t\t$this->_script_data[ $handle ] = array_merge( $this->_script_data[ $handle ], $key_or_array );\r\n-\t\t} else {\r\n-\t\t\t$this->_script_data[ $handle ][ $key_or_array ] = $value;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Shortcut to Addon file url.\r\n-\t *\r\n-\t * @param string $file\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function url( string $file = '' ): string {\r\n-\t\treturn LP_PLUGIN_URL . \"assets\u002F{$file}\";\r\n-\t}\r\n-\r\n-\t\u002F*public static function add_param() {\r\n-\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Abstract_Assets\n+ *\n+ * Abstract class for managing assets\n+ *\u002F\n+abstract class LP_Abstract_Assets {\n+\n+\tprotected $_cache = '';\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_scripts = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_styles = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_script_data = array();\n+\t\u002F**\n+\t * Path file min\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic static $_min_assets = '.min';\n+\t\u002F**\n+\t * Version file asset\n+\t *\n+\t * @var mixed|string\n+\t *\u002F\n+\tpublic static $_version_assets = LEARNPRESS_VERSION;\n+\t\u002F**\n+\t * Path file\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic static $_folder_source = '';\n+\n+\t\u002F**\n+\t * LP_Abstract_Assets constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$priority = 1000;\n+\n+\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\tself::$_min_assets     = '';\n+\t\t\tself::$_version_assets = uniqid();\n+\t\t\tself::$_folder_source  = 'src\u002F';\n+\t\t}\n+\n+\t\tif ( is_admin() ) {\n+\t\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'load_scripts' ) );\n+\t\t\tadd_action( 'admin_print_scripts', array( $this, 'localize_printed_admin_scripts' ) );\n+\t\t\t\u002F\u002F Use for modal search items, modal search users when edit manual LP Order ue Vue js.\n+\t\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'localize_printed_admin_scripts' ) );\n+\t\t} else {\n+\t\t\tadd_action( 'wp_enqueue_scripts', array( $this, 'load_scripts' ), $priority );\n+\t\t\tadd_action( 'wp_print_scripts', array( $this, 'localize_printed_scripts' ), $priority + 10 );\n+\t\t\t\u002F\u002Fadd_action( 'wp_print_footer_scripts', array( $this, 'localize_printed_scripts' ), $priority + 10 );\n+\t\t}\n+\t}\n+\n+\tabstract function load_scripts();\n+\n+\t\u002F**\n+\t * Default scripts\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function _get_scripts(): array {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Default styles\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function _get_styles(): array {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Register\u002FEnqueue script\n+\t *\n+\t * @param string $page_current\n+\t * @author tungnx\n+\t * @since 4.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tprotected function handle_js( string $page_current = '' ) {\n+\t\t$scripts = $this->_get_scripts();\n+\t\t\u002F**\n+\t\t * @var LP_Asset_Key[] $scripts\n+\t\t *\u002F\n+\t\tforeach ( $scripts as $handle => $script ) {\n+\t\t\tif ( ! $script instanceof LP_Asset_Key ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For version addon.\n+\t\t\tif ( ! LP_Debug::is_debug() && ! empty( $script->_version ) ) {\n+\t\t\t\tself::$_version_assets = $script->_version;\n+\t\t\t} elseif ( LP_Debug::is_debug() ) {\n+\t\t\t\tself::$_version_assets = time();\n+\t\t\t} else {\n+\t\t\t\tself::$_version_assets = LEARNPRESS_VERSION;\n+\t\t\t}\n+\t\t\t\u002F\u002F End\n+\n+\t\t\twp_register_script( $handle, $script->_url, $script->_deps, self::$_version_assets, $script->_in_footer );\n+\t\t\t\u002F\u002F Add strategy for script defer\u002Fasync. @since 4.2.5.5\n+\t\t\tforeach ( $script->_strategy as $key => $value ) {\n+\t\t\t\twp_script_add_data( $handle, $key, $value );\n+\t\t\t}\n+\n+\t\t\tif ( ! $script->_only_register ) {\n+\t\t\t\t$can_load_js = $this->check_can_load_asset( $handle, $page_current, $script->_screens, $script->_exclude_screens );\n+\n+\t\t\t\tif ( $can_load_js ) {\n+\t\t\t\t\twp_enqueue_script( $handle );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set translate on file js of folder js\u002Fdist\n+\t\t * Path translate of a string on file \".pot\" if have must map to js\u002Fdist\n+\t\t *\u002F\n+\t\twp_set_script_translations( 'lp-quiz', 'learnpress' );\n+\t\twp_set_script_translations( 'lp-profile', 'learnpress' );\n+\t\twp_set_script_translations( 'lp-admin', 'learnpress' );\n+\t}\n+\n+\t\u002F**\n+\t * Register\u002FEnqueue style\n+\t *\n+\t * @param string $page_current\n+\t * @author tungnx\n+\t * @since 4.1.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function handle_style( string $page_current = '' ) {\n+\t\t$styles = $this->_get_styles();\n+\t\tif ( $styles ) {\n+\t\t\t\u002F**\n+\t\t\t * @var LP_Asset_Key[] $styles\n+\t\t\t *\u002F\n+\t\t\tforeach ( $styles as $handle => $style ) {\n+\t\t\t\tif ( ! $style instanceof LP_Asset_Key ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For version addon.\n+\t\t\t\tif ( ! LP_Debug::is_debug() && ! empty( $style->_version ) ) {\n+\t\t\t\t\tself::$_version_assets = $style->_version;\n+\t\t\t\t} elseif ( LP_Debug::is_debug() ) {\n+\t\t\t\t\tself::$_version_assets = time();\n+\t\t\t\t} else {\n+\t\t\t\t\tself::$_version_assets = LEARNPRESS_VERSION;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F End\n+\n+\t\t\t\twp_register_style( $handle, $style->_url, $style->_deps, self::$_version_assets );\n+\n+\t\t\t\tif ( ! $style->_only_register ) {\n+\t\t\t\t\t$can_load_style = $this->check_can_load_asset( $handle, $page_current, $style->_screens, $style->_exclude_screens );\n+\n+\t\t\t\t\tif ( $can_load_style ) {\n+\t\t\t\t\t\twp_enqueue_style( $handle );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check file assets can load on pages\n+\t *\n+\t * @param string $handle\n+\t * @param string $page_current\n+\t * @param array $include_screens\n+\t * @param array $exclude_screens\n+\t * @author tungnx\n+\t * @since 4.1.3\n+\t * @version 1.0.0\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function check_can_load_asset( string $handle, string $page_current, array $include_screens, array $exclude_screens ): bool {\n+\t\t$can_load = false;\n+\n+\t\tif ( ! empty( $include_screens ) ) {\n+\t\t\tif ( in_array( $page_current, $include_screens ) ) {\n+\t\t\t\t$can_load = true;\n+\t\t\t}\n+\t\t} elseif ( ! empty( $exclude_screens ) ) {\n+\t\t\tif ( ! in_array( $page_current, $exclude_screens ) ) {\n+\t\t\t\t$can_load = true;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$can_load = true;\n+\t\t}\n+\n+\t\t$is_on = 'admin';\n+\t\tif ( ! is_admin() ) {\n+\t\t\t$is_on = 'frontend';\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learnpress\u002F' . $is_on . '\u002Fcan-load-assets\u002F' . $handle,\n+\t\t\t$can_load,\n+\t\t\t$page_current,\n+\t\t\t$include_screens\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Register style\n+\t *\n+\t * @param        $handle\n+\t * @param        $src\n+\t * @param array $deps\n+\t * @param bool $ver\n+\t * @param string $media\n+\t *\u002F\n+\tpublic function register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {\n+\t\tif ( ! isset( $this->_styles[ $handle ] ) ) {\n+\t\t\t$this->_styles[ $handle ] = array( $handle, $src, $deps, $ver, $media );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Register script\n+\t *\n+\t * @param       $handle\n+\t * @param       $src\n+\t * @param array $deps\n+\t * @param bool $ver\n+\t * @param bool $in_footer\n+\t *\u002F\n+\tpublic function register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {\n+\t\tif ( ! isset( $this->_scripts[ $handle ] ) ) {\n+\t\t\t$this->_scripts[ $handle ] = array( $handle, $src, $deps, $ver, $in_footer );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Enqueue style\n+\t *\n+\t * @param        $handle\n+\t * @param string $src\n+\t * @param array $deps\n+\t * @param bool $ver\n+\t * @param string $media\n+\t *\u002F\n+\tpublic function enqueue_style( $handle, $src = '', $deps = array(), $ver = false, $media = 'all' ) {\n+\t\t$this->register_style( $handle, $src, $deps, $ver, $media );\n+\t\tif ( did_action( 'init' ) || did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) ) {\n+\t\t\twp_enqueue_style( $handle, $src, $deps, $ver, $media );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Enqueue script\n+\t *\n+\t * @param       $handle\n+\t * @param       $src\n+\t * @param array $deps\n+\t * @param bool $ver\n+\t * @param bool $in_footer\n+\t *\u002F\n+\tpublic function enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $in_footer = false ) {\n+\t\t$this->register_script( $handle, $src, $deps, $ver, $in_footer );\n+\t\tif ( did_action( 'init' ) || did_action( 'admin_enqueue_scripts' ) || did_action( 'wp_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) ) {\n+\t\t\twp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );\n+\t\t}\n+\t}\n+\n+\tpublic function add_script_data( $handle, $key_or_array, $value = '' ) {\n+\t\tif ( empty( $this->_script_data[ $handle ] ) ) {\n+\t\t\t$this->_script_data[ $handle ] = array();\n+\t\t}\n+\n+\t\tif ( func_num_args() == 2 && is_array( $key_or_array ) ) {\n+\t\t\t$this->_script_data[ $handle ] = LP_Helper::array_merge_recursive( $this->_script_data[ $handle ], $key_or_array );\n+\t\t} else {\n+\t\t\t$this->_script_data[ $handle ][ $key_or_array ] = $value;\n+\t\t}\n+\t}\n+\n+\tprotected function _get_wp_styles() {\n+\t\tglobal $wp_styles;\n+\n+\t\tif ( empty( $wp_styles ) ) {\n+\t\t\t$wp_styles = new WP_Styles();\n+\t\t}\n+\n+\t\treturn $wp_styles;\n+\t}\n+\n+\tprotected function _get_wp_scripts() {\n+\t\tglobal $wp_scripts;\n+\n+\t\tif ( empty( $wp_scripts ) ) {\n+\t\t\t$wp_scripts = new WP_Scripts();\n+\t\t}\n+\n+\t\treturn $wp_scripts;\n+\t}\n+\n+\t\u002F**\n+\t * @param $handle\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_script_var_name( $handle ) {\n+\t\t$handle = str_replace( array( 'learn-press', 'lp', '_', '-' ), ' ', $handle );\n+\t\t$handle = ucwords( $handle );\n+\n+\t\treturn 'lp' . str_replace( ' ', '', $handle ) . 'Settings';\n+\t}\n+\n+\tpublic function localize_printed_scripts( $side = '' ) {\n+\t\t$scripts_data = $this->_get_script_data();\n+\n+\t\tif ( is_array( $scripts_data ) && is_array( $this->_script_data ) ) {\n+\t\t\t$scripts_data = LP_Helper::array_merge_recursive( $scripts_data, $this->_script_data );\n+\t\t} elseif ( is_array( $this->_script_data ) ) {\n+\t\t\t$scripts_data = $this->_script_data;\n+\t\t}\n+\n+\t\tif ( ! $scripts_data ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tglobal $wp_scripts;\n+\n+\t\tif ( ! $wp_scripts ) {\n+\t\t\t$wp_scripts = new WP_Scripts();\n+\t\t}\n+\n+\t\tforeach ( $scripts_data as $handle => $data ) {\n+\t\t\t$data = apply_filters( 'learn-press\u002Fscript-data', $data, $handle );\n+\t\t\twp_localize_script( $handle, $this->get_script_var_name( $handle ), $data );\n+\n+\t\t\t\u002F\u002F comment by tungnx\n+\t\t\t\u002F\u002F Edit: Use in certificate - Nhamdv.\n+\t\t\tif ( isset( $wp_scripts->registered[ $handle ] ) ) {\n+\t\t\t\tif ( isset( $wp_scripts->registered[ $handle ]->extra['data'] ) ) {\n+\t\t\t\t\tif ( $wp_scripts->registered[ $handle ]->extra['data'] ) {\n+\t\t\t\t\t\t$data = $wp_scripts->registered[ $handle ]->extra['data'];\n+\t\t\t\t\t\t$data = preg_replace_callback( '~:\"(([0-9]+)([.,]?)([0-9]?)|true|false)\"~', array( $this, '_valid_json_number' ), $data );\n+\n+\t\t\t\t\t\t$wp_scripts->registered[ $handle ]->extra['data'] = $data;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\t$wp_scripts->print_extra_script( $handle );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tpublic function localize_printed_admin_scripts() {\n+\t\t$this->localize_printed_scripts( 'admin' );\n+\t}\n+\n+\tprotected function _valid_json_number( $m ) {\n+\t\treturn str_replace( array( ':\"', '\"' ), array( ':', '' ), $m[0] );\n+\t}\n+\n+\tprotected function _get_script_data() {\n+\t\treturn array();\n+\t}\n+\n+\tpublic function add_localize( $handle, $key_or_array, $value = '' ) {\n+\t\tif ( empty( $this->_script_data[ $handle ] ) ) {\n+\t\t\t$this->_script_data[ $handle ] = array();\n+\t\t}\n+\t\tif ( is_array( $key_or_array ) ) {\n+\t\t\t$this->_script_data[ $handle ] = array_merge( $this->_script_data[ $handle ], $key_or_array );\n+\t\t} else {\n+\t\t\t$this->_script_data[ $handle ][ $key_or_array ] = $value;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Shortcut to Addon file url.\n+\t *\n+\t * @param string $file\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function url( string $file = '' ): string {\n+\t\treturn LP_PLUGIN_URL . \"assets\u002F{$file}\";\n+\t}\n+\n+\t\u002F*public static function add_param() {\n+\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-object-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-object-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-object-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-object-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,593 +1,593 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Abstract_Object_Data.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Abstract_Object_Data' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_Object_Data\r\n-\t *\u002F\r\n-\tabstract class LP_Abstract_Object_Data {\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected $_id = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_extra_data = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_no_cache = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_supports = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Store new changes\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_changes = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_extra_data_changes = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Object meta\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_meta_data = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_meta_keys = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * CURD class to manipulation with database.\r\n-\t\t *\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $_curd = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Mark the $post object is set up to this class\r\n-\t\t *\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_setup_postdata = false;\r\n-\r\n-\t\tpublic $object_type = 'object-data';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Abstract_Object_Data constructor.\r\n-\t\t *\r\n-\t\t * @param null $data\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $data = null ) {\r\n-\t\t\t$this->_data = (array) $data;\r\n-\t\t\tif ( array_key_exists( 'id', $this->_data ) ) {\r\n-\t\t\t\t$this->set_id( absint( $this->_data['id'] ) );\r\n-\t\t\t\tunset( $this->_data['id'] );\r\n-\t\t\t}\r\n-\t\t\t$this->load_curd();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load curd.\r\n-\t\t *\u002F\r\n-\t\tprotected function load_curd() {\r\n-\t\t\tif ( is_string( $this->_curd ) && $this->_curd ) {\r\n-\t\t\t\t$this->_curd = new $this->_curd();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set id of object in database\r\n-\t\t *\r\n-\t\t * @param $id\r\n-\t\t *\u002F\r\n-\t\tpublic function set_id( $id ) {\r\n-\t\t\t$this->_id = $id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get id of object in database\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_id() {\r\n-\t\t\treturn absint( $this->_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get post object assigned to this class.\r\n-\t\t *\r\n-\t\t * @return array|null|WP_Post\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_post() {\r\n-\t\t\treturn get_post( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get global $post object and set it up with new data\r\n-\t\t *\r\n-\t\t * @return bool|WP_Post\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function setup_postdata() {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\t$post = $this->get_post();\r\n-\r\n-\t\t\tif ( $post ) {\r\n-\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\t$this->_setup_postdata = true;\r\n-\r\n-\t\t\t\treturn $post;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Reset global $post to WP default.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function reset_postdata() {\r\n-\t\t\tif ( $this->_setup_postdata ) {\r\n-\t\t\t\twp_reset_postdata();\r\n-\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get object data.\r\n-\t\t *\r\n-\t\t * @updated 3.2.0\r\n-\t\t * @date    13 Nov 2018\r\n-\t\t *\r\n-\t\t * @param string $name - Optional. Name of data want to get, true if return all.\r\n-\t\t * @param mixed  $default\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_data( $name = '', $default = '' ) {\r\n-\t\t\tif ( is_string( $name ) && $name ) {\r\n-\t\t\t\treturn array_key_exists( $name, $this->_data ) ? $this->_data[ $name ] : ( array_key_exists( $name, $this->_extra_data ) ? $this->_extra_data[ $name ] : $default );\r\n-\t\t\t} elseif ( is_array( $name ) ) {\r\n-\t\t\t\t$data = array();\r\n-\r\n-\t\t\t\tforeach ( $name as $key ) {\r\n-\t\t\t\t\t$data[ $key ] = $this->get_data( $key, $default );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $data;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array_merge( $this->_data, $this->_extra_data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get data as LP_Datetime object\r\n-\t\t *\r\n-\t\t * @param string $name\r\n-\t\t *\r\n-\t\t * @return array|LP_Datetime|mixed\r\n-\t\t * @since 3.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_data_date( $name ) {\r\n-\t\t\t$data = $this->get_data( $name );\r\n-\r\n-\t\t\treturn is_a( $data, 'LP_Datetime' ) ? $data : new LP_Datetime( $data );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $name\r\n-\t\t * @param mixed $default\r\n-\t\t *\r\n-\t\t * @return array|bool|mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_extra_data( string $name = '', $default = false ) {\r\n-\t\t\tif ( is_string( $name ) ) {\r\n-\t\t\t\treturn array_key_exists( $name, $this->_extra_data ) && ! empty( $this->_extra_data[ $name ] ) ? $this->_extra_data[ $name ] : $default;\r\n-\t\t\t} elseif ( is_array( $name ) ) {\r\n-\t\t\t\t$data = array();\r\n-\t\t\t\tforeach ( $name as $key ) {\r\n-\t\t\t\t\t$data[ $key ] = $this->get_extra_data( $key, $default );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $data;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $default;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set object data.\r\n-\t\t *\r\n-\t\t * @param mixed $key_or_data\r\n-\t\t * @param mixed $value\r\n-\t\t * @param bool  $extra\r\n-\t\t *\u002F\r\n-\t\tprotected function _set_data( $key_or_data, $value = '', $extra = false ) {\r\n-\t\t\tif ( is_array( $key_or_data ) ) {\r\n-\t\t\t\tforeach ( $key_or_data as $key => $value ) {\r\n-\t\t\t\t\t$this->_set_data( $key, $value, $extra );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $key_or_data ) {\r\n-\t\t\t\tif ( $extra ) {\r\n-\t\t\t\t\t\u002F\u002F Do not allow to add extra data with the same key in data\r\n-\t\t\t\t\tif ( ! array_key_exists( $key_or_data, $this->_data ) ) {\r\n-\t\t\t\t\t\t$this->_extra_data[ $key_or_data ] = $value;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\ttry {\r\n-\t\t\t\t\t\tif ( ! is_string( $key_or_data ) && ! is_numeric( $key_or_data ) ) {\r\n-\t\t\t\t\t\t\tthrow new Exception( 'error' );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Only change the data is already existed\r\n-\t\t\t\t\t\t\u002F\u002F                      if ( array_key_exists( $key_or_data, $this->_data ) ) {\r\n-\t\t\t\t\t\t\t$this->_data[ $key_or_data ] = $value;\r\n-\t\t\t\t\t\t\u002F\u002F                      } else {\r\n-\t\t\t\t\t\t\u002F\u002F                          $this->_extra_data[ $key_or_data ] = $value;\r\n-\t\t\t\t\t\t\u002F\u002F                      }\r\n-\t\t\t\t\t} catch ( Throwable $ex ) {\r\n-\t\t\t\t\t\terror_log( $ex->getMessage() );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set extra data\r\n-\t\t *\r\n-\t\t * @param array|string $key_or_data\r\n-\t\t * @param string|mixed       $value\r\n-\t\t * @return $this\r\n-\t\t *\u002F\r\n-\t\tpublic function set_data( $key_or_data, $value = '' ) {\r\n-\t\t\t$this->_set_data( $key_or_data, $value );\r\n-\t\t\treturn $this;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set data datetime\r\n-\t\t * if $value is empty, not set is LP_Datetime object\r\n-\t\t *\r\n-\t\t * @param $key\r\n-\t\t * @param $value\r\n-\t\t *\r\n-\t\t * @version 4.0.1\r\n-\t\t * @return LP_Abstract_Object_Data\r\n-\t\t *\u002F\r\n-\t\tpublic function set_data_date( $key, $value ): LP_Abstract_Object_Data {\r\n-\t\t\t$lp_date = '';\r\n-\t\t\tif ( ! empty( $value ) ) {\r\n-\t\t\t\t$lp_date = new LP_Datetime( $value );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data( $key, $lp_date );\r\n-\r\n-\t\t\treturn $this;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $key\r\n-\t\t * @param $value\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tprotected function _set_data_date( $key, $value, $extra = false ) {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3', 'set_data_date' );\r\n-\t\t\t$this->set_data_date( $key, $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function set_data_null_date( $key ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\t$this->_set_data( $key, LP_Datetime::getSqlNullDate() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set data via methods in array\r\n-\t\t *\r\n-\t\t * @param array $data - Array with key is method and value is value to set\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function set_data_via_methods( $data ) {\r\n-\t\t\t$errors = array_keys( $data );\r\n-\t\t\tforeach ( $data as $prop => $value ) {\r\n-\t\t\t\t$setter = \"set_$prop\";\r\n-\t\t\t\tif ( is_callable( array( $this, $setter ) ) ) {\r\n-\t\t\t\t\t$reflection = new ReflectionMethod( $this, $setter );\r\n-\r\n-\t\t\t\t\tif ( $reflection->isPublic() ) {\r\n-\t\t\t\t\t\t$this->{$setter}( $value );\r\n-\t\t\t\t\t\t$errors = array_diff( $errors, array( $prop ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If there is at least one method failed\r\n-\t\t\tif ( $errors ) {\r\n-\t\t\t\t$errors = array_map( array( $this, 'prefix_set_method' ), $errors );\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The following functions %1$s do not exist in %2$s', 'learnpress' ), join( ',', $errors ), get_class( $this ) ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return the keys of data\r\n-\t\t *\r\n-\t\t * @param bool $extra - Optional. TRUE if including extra data\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_data_keys( $extra = true ) {\r\n-\t\t\treturn $extra ? array_merge( array_keys( $this->_data ), array_keys( $this->_extra_data ) ) : array_keys( $this->_data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $method\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function prefix_set_method( $method ) {\r\n-\t\t\treturn \"set_{$method}\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Apply the changes\r\n-\t\t *\u002F\r\n-\t\tpublic function apply_changes() {\r\n-\t\t\t$this->_data    = array_replace_recursive( $this->_data, $this->_changes );\r\n-\t\t\t$this->_changes = array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the changes.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_changes() {\r\n-\t\t\treturn $this->_changes;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if question is support feature.\r\n-\t\t *\r\n-\t\t * @param string $feature\r\n-\t\t * @param string $type\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_support( $feature, $type = '' ) {\r\n-\t\t\t$feature = $this->_sanitize_feature_key( $feature );\r\n-\r\n-\t\t\treturn LP_Global::object_is_support_feature( $this->object_type, $feature, $type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add a feature that question is supported\r\n-\t\t *\r\n-\t\t * @param        $feature\r\n-\t\t * @param string  $type\r\n-\t\t *\u002F\r\n-\t\tpublic function add_support( $feature, $type = 'yes' ) {\r\n-\r\n-\t\t\t$feature = $this->_sanitize_feature_key( $feature );\r\n-\t\t\tLP_Global::add_object_feature( $this->object_type, $feature, $type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $feature\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tprotected function _sanitize_feature_key( $feature ) {\r\n-\t\t\treturn preg_replace( '~[_]+~', '-', $feature );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all features are supported by question.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_supports() {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\r\n-\t\t\treturn LP_Global::get_object_supports( $this->object_type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $value\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function set_no_cache( $value ) {\r\n-\t\t\t$this->_no_cache = $value;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_no_cache() {\r\n-\t\t\treturn $this->_no_cache;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Read all metas and set to object\r\n-\t\t *\u002F\r\n-\t\tpublic function read_meta() {\r\n-\t\t\t$meta_data = $this->_curd->read_meta( $this );\r\n-\r\n-\t\t\tif ( $meta_data ) {\r\n-\t\t\t\t$external_metas = array_filter( $meta_data, array( $this, 'exclude_metas' ) );\r\n-\r\n-\t\t\t\tforeach ( $external_metas as $meta ) {\r\n-\t\t\t\t\t$this->_meta_data[] = $meta;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Callback function for excluding meta keys.\r\n-\t\t *\r\n-\t\t * @param $meta\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tprotected function exclude_metas( $meta ) {\r\n-\t\t\t$exclude_keys = array_merge( array_keys( $this->_meta_keys ), array_keys( $this->_data ) );\r\n-\r\n-\t\t\treturn ! in_array( $meta->meta_key, $exclude_keys ) && 0 !== stripos( $meta->meta_key, 'wp_' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add new meta data to object.\r\n-\t\t *\r\n-\t\t * @param string|array $key_or_array\r\n-\t\t * @param string       $value\r\n-\t\t *\u002F\r\n-\t\tpublic function add_meta( $key_or_array, $value = '' ) {\r\n-\t\t\tif ( is_array( $key_or_array ) ) {\r\n-\t\t\t\tforeach ( $key_or_array as $key => $value ) {\r\n-\t\t\t\t\t$this->add_meta( $key, $value );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( is_string( $key_or_array ) ) {\r\n-\t\t\t\t$this->_meta_data[] = (object) array(\r\n-\t\t\t\t\t'meta_key'   => $key_or_array,\r\n-\t\t\t\t\t'meta_value' => $value,\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->_meta_data[] = $key_or_array;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete meta data by key.\r\n-\t\t * If meta value is passed, compare with existing value in database (string only).\r\n-\t\t *\r\n-\t\t * @param string $meta_key\r\n-\t\t * @param bool   $meta_value - Optional. FALSE to abort comparison.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function delete_meta( $meta_key, $meta_value = false ) {\r\n-\t\t\tif ( empty( $this->_meta_data ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t} else {\r\n-\t\t\t\t$new_meta_data = array();\r\n-\t\t\t\tforeach ( $this->_meta_data as $k => $meta_data ) {\r\n-\t\t\t\t\tif ( $meta_data->meta_key === $meta_key ) {\r\n-\t\t\t\t\t\tif ( false !== $meta_value && $meta_data->meta_value === $meta_value ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$new_meta_data[] = $meta_data;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F Assign new meta\r\n-\t\t\t\t$this->_meta_data = $new_meta_data;\r\n-\r\n-\t\t\t\t\u002F\u002F Force to deleting from database\r\n-\t\t\t\tdelete_post_meta( $this->get_id(), $meta_key, $meta_value );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update item meta if it is already existed. Otherwise, add a new once.\r\n-\t\t *\r\n-\t\t * @param $meta_key\r\n-\t\t * @param $meta_value\r\n-\t\t *\u002F\r\n-\t\tpublic function set_meta( $meta_key, $meta_value ) {\r\n-\t\t\tif ( empty( $this->_meta_data ) ) {\r\n-\t\t\t\t$this->add_meta( $meta_key, $meta_value );\r\n-\t\t\t} else {\r\n-\t\t\t\t$found = false;\r\n-\t\t\t\tforeach ( $this->_meta_data as $k => $meta_data ) {\r\n-\t\t\t\t\tif ( $meta_data->meta_key === $meta_key ) {\r\n-\t\t\t\t\t\t$this->_meta_data[ $k ]->meta_value = $meta_value;\r\n-\t\t\t\t\t\t$found                              = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! $found ) {\r\n-\t\t\t\t\t$this->add_meta( $meta_key, $meta_value );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update meta.\r\n-\t\t *\r\n-\t\t * @updated 3.1.0\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t * @param mixed  $value\r\n-\t\t * @param mixed  $prev_value\r\n-\t\t *\u002F\r\n-\t\tpublic function update_meta( $key = '', $value = '', $prev_value = '' ) {\r\n-\t\t\tif ( func_num_args() == 0 ) {\r\n-\t\t\t\tif ( $this->_meta_data ) {\r\n-\t\t\t\t\tforeach ( $this->_meta_data as $meta_data ) {\r\n-\t\t\t\t\t\t$this->_curd->update_meta( $this, $meta_data );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$update = update_post_meta( $this->get_id(), $key, $value, $prev_value );\r\n-\t\t\t\tif ( ! is_bool( $update ) && $update ) {\r\n-\t\t\t\t\t$this->_meta_data = (object) array(\r\n-\t\t\t\t\t\t'meta_key'   => $key,\r\n-\t\t\t\t\t\t'meta_value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get meta keys.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_meta_keys() {\r\n-\t\t\treturn $this->_meta_keys;\r\n-\t\t}\r\n-\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Abstract_Object_Data.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Abstract_Object_Data' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_Object_Data\n+\t *\u002F\n+\tabstract class LP_Abstract_Object_Data {\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected $_id = 0;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_extra_data = array();\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_no_cache = false;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_supports = array();\n+\n+\t\t\u002F**\n+\t\t * Store new changes\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_changes = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_extra_data_changes = array();\n+\n+\t\t\u002F**\n+\t\t * Object meta\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_meta_data = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_meta_keys = array();\n+\n+\t\t\u002F**\n+\t\t * CURD class to manipulation with database.\n+\t\t *\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $_curd = null;\n+\n+\t\t\u002F**\n+\t\t * Mark the $post object is set up to this class\n+\t\t *\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_setup_postdata = false;\n+\n+\t\tpublic $object_type = 'object-data';\n+\n+\t\t\u002F**\n+\t\t * LP_Abstract_Object_Data constructor.\n+\t\t *\n+\t\t * @param null $data\n+\t\t *\u002F\n+\t\tpublic function __construct( $data = null ) {\n+\t\t\t$this->_data = (array) $data;\n+\t\t\tif ( array_key_exists( 'id', $this->_data ) ) {\n+\t\t\t\t$this->set_id( absint( $this->_data['id'] ) );\n+\t\t\t\tunset( $this->_data['id'] );\n+\t\t\t}\n+\t\t\t$this->load_curd();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load curd.\n+\t\t *\u002F\n+\t\tprotected function load_curd() {\n+\t\t\tif ( is_string( $this->_curd ) && $this->_curd ) {\n+\t\t\t\t$this->_curd = new $this->_curd();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set id of object in database\n+\t\t *\n+\t\t * @param $id\n+\t\t *\u002F\n+\t\tpublic function set_id( $id ) {\n+\t\t\t$this->_id = $id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get id of object in database\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_id() {\n+\t\t\treturn absint( $this->_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get post object assigned to this class.\n+\t\t *\n+\t\t * @return array|null|WP_Post\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_post() {\n+\t\t\treturn get_post( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get global $post object and set it up with new data\n+\t\t *\n+\t\t * @return bool|WP_Post\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function setup_postdata() {\n+\t\t\tglobal $post;\n+\n+\t\t\t$post = $this->get_post();\n+\n+\t\t\tif ( $post ) {\n+\t\t\t\tsetup_postdata( $post );\n+\t\t\t\t$this->_setup_postdata = true;\n+\n+\t\t\t\treturn $post;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Reset global $post to WP default.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function reset_postdata() {\n+\t\t\tif ( $this->_setup_postdata ) {\n+\t\t\t\twp_reset_postdata();\n+\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get object data.\n+\t\t *\n+\t\t * @updated 3.2.0\n+\t\t * @date    13 Nov 2018\n+\t\t *\n+\t\t * @param string $name - Optional. Name of data want to get, true if return all.\n+\t\t * @param mixed  $default\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_data( $name = '', $default = '' ) {\n+\t\t\tif ( is_string( $name ) && $name ) {\n+\t\t\t\treturn array_key_exists( $name, $this->_data ) ? $this->_data[ $name ] : ( array_key_exists( $name, $this->_extra_data ) ? $this->_extra_data[ $name ] : $default );\n+\t\t\t} elseif ( is_array( $name ) ) {\n+\t\t\t\t$data = array();\n+\n+\t\t\t\tforeach ( $name as $key ) {\n+\t\t\t\t\t$data[ $key ] = $this->get_data( $key, $default );\n+\t\t\t\t}\n+\n+\t\t\t\treturn $data;\n+\t\t\t}\n+\n+\t\t\treturn array_merge( $this->_data, $this->_extra_data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get data as LP_Datetime object\n+\t\t *\n+\t\t * @param string $name\n+\t\t *\n+\t\t * @return array|LP_Datetime|mixed\n+\t\t * @since 3.2.0\n+\t\t *\u002F\n+\t\tpublic function get_data_date( $name ) {\n+\t\t\t$data = $this->get_data( $name );\n+\n+\t\t\treturn is_a( $data, 'LP_Datetime' ) ? $data : new LP_Datetime( $data );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * @param string $name\n+\t\t * @param mixed $default\n+\t\t *\n+\t\t * @return array|bool|mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_extra_data( string $name = '', $default = false ) {\n+\t\t\tif ( is_string( $name ) ) {\n+\t\t\t\treturn array_key_exists( $name, $this->_extra_data ) && ! empty( $this->_extra_data[ $name ] ) ? $this->_extra_data[ $name ] : $default;\n+\t\t\t} elseif ( is_array( $name ) ) {\n+\t\t\t\t$data = array();\n+\t\t\t\tforeach ( $name as $key ) {\n+\t\t\t\t\t$data[ $key ] = $this->get_extra_data( $key, $default );\n+\t\t\t\t}\n+\n+\t\t\t\treturn $data;\n+\t\t\t}\n+\n+\t\t\treturn $default;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set object data.\n+\t\t *\n+\t\t * @param mixed $key_or_data\n+\t\t * @param mixed $value\n+\t\t * @param bool  $extra\n+\t\t *\u002F\n+\t\tprotected function _set_data( $key_or_data, $value = '', $extra = false ) {\n+\t\t\tif ( is_array( $key_or_data ) ) {\n+\t\t\t\tforeach ( $key_or_data as $key => $value ) {\n+\t\t\t\t\t$this->_set_data( $key, $value, $extra );\n+\t\t\t\t}\n+\t\t\t} elseif ( $key_or_data ) {\n+\t\t\t\tif ( $extra ) {\n+\t\t\t\t\t\u002F\u002F Do not allow to add extra data with the same key in data\n+\t\t\t\t\tif ( ! array_key_exists( $key_or_data, $this->_data ) ) {\n+\t\t\t\t\t\t$this->_extra_data[ $key_or_data ] = $value;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\ttry {\n+\t\t\t\t\t\tif ( ! is_string( $key_or_data ) && ! is_numeric( $key_or_data ) ) {\n+\t\t\t\t\t\t\tthrow new Exception( 'error' );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\u002F\u002F Only change the data is already existed\n+\t\t\t\t\t\t\u002F\u002F                      if ( array_key_exists( $key_or_data, $this->_data ) ) {\n+\t\t\t\t\t\t\t$this->_data[ $key_or_data ] = $value;\n+\t\t\t\t\t\t\u002F\u002F                      } else {\n+\t\t\t\t\t\t\u002F\u002F                          $this->_extra_data[ $key_or_data ] = $value;\n+\t\t\t\t\t\t\u002F\u002F                      }\n+\t\t\t\t\t} catch ( Throwable $ex ) {\n+\t\t\t\t\t\terror_log( $ex->getMessage() );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set extra data\n+\t\t *\n+\t\t * @param array|string $key_or_data\n+\t\t * @param string|mixed       $value\n+\t\t * @return $this\n+\t\t *\u002F\n+\t\tpublic function set_data( $key_or_data, $value = '' ) {\n+\t\t\t$this->_set_data( $key_or_data, $value );\n+\t\t\treturn $this;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set data datetime\n+\t\t * if $value is empty, not set is LP_Datetime object\n+\t\t *\n+\t\t * @param $key\n+\t\t * @param $value\n+\t\t *\n+\t\t * @version 4.0.1\n+\t\t * @return LP_Abstract_Object_Data\n+\t\t *\u002F\n+\t\tpublic function set_data_date( $key, $value ): LP_Abstract_Object_Data {\n+\t\t\t$lp_date = '';\n+\t\t\tif ( ! empty( $value ) ) {\n+\t\t\t\t$lp_date = new LP_Datetime( $value );\n+\t\t\t}\n+\n+\t\t\t$this->set_data( $key, $lp_date );\n+\n+\t\t\treturn $this;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $key\n+\t\t * @param $value\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tprotected function _set_data_date( $key, $value, $extra = false ) {\n+\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3', 'set_data_date' );\n+\t\t\t$this->set_data_date( $key, $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function set_data_null_date( $key ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\t$this->_set_data( $key, LP_Datetime::getSqlNullDate() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set data via methods in array\n+\t\t *\n+\t\t * @param array $data - Array with key is method and value is value to set\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function set_data_via_methods( $data ) {\n+\t\t\t$errors = array_keys( $data );\n+\t\t\tforeach ( $data as $prop => $value ) {\n+\t\t\t\t$setter = \"set_$prop\";\n+\t\t\t\tif ( is_callable( array( $this, $setter ) ) ) {\n+\t\t\t\t\t$reflection = new ReflectionMethod( $this, $setter );\n+\n+\t\t\t\t\tif ( $reflection->isPublic() ) {\n+\t\t\t\t\t\t$this->{$setter}( $value );\n+\t\t\t\t\t\t$errors = array_diff( $errors, array( $prop ) );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If there is at least one method failed\n+\t\t\tif ( $errors ) {\n+\t\t\t\t$errors = array_map( array( $this, 'prefix_set_method' ), $errors );\n+\t\t\t\tthrow new Exception( sprintf( __( 'The following functions %1$s do not exist in %2$s', 'learnpress' ), join( ',', $errors ), get_class( $this ) ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return the keys of data\n+\t\t *\n+\t\t * @param bool $extra - Optional. TRUE if including extra data\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_data_keys( $extra = true ) {\n+\t\t\treturn $extra ? array_merge( array_keys( $this->_data ), array_keys( $this->_extra_data ) ) : array_keys( $this->_data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $method\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function prefix_set_method( $method ) {\n+\t\t\treturn \"set_{$method}\";\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Apply the changes\n+\t\t *\u002F\n+\t\tpublic function apply_changes() {\n+\t\t\t$this->_data    = array_replace_recursive( $this->_data, $this->_changes );\n+\t\t\t$this->_changes = array();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the changes.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_changes() {\n+\t\t\treturn $this->_changes;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if question is support feature.\n+\t\t *\n+\t\t * @param string $feature\n+\t\t * @param string $type\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_support( $feature, $type = '' ) {\n+\t\t\t$feature = $this->_sanitize_feature_key( $feature );\n+\n+\t\t\treturn LP_Global::object_is_support_feature( $this->object_type, $feature, $type );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add a feature that question is supported\n+\t\t *\n+\t\t * @param        $feature\n+\t\t * @param string  $type\n+\t\t *\u002F\n+\t\tpublic function add_support( $feature, $type = 'yes' ) {\n+\n+\t\t\t$feature = $this->_sanitize_feature_key( $feature );\n+\t\t\tLP_Global::add_object_feature( $this->object_type, $feature, $type );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $feature\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tprotected function _sanitize_feature_key( $feature ) {\n+\t\t\treturn preg_replace( '~[_]+~', '-', $feature );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all features are supported by question.\n+\t\t *\n+\t\t * @return array\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function get_supports() {\n+\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\n+\t\t\treturn LP_Global::get_object_supports( $this->object_type );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $value\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\t\u002F*public function set_no_cache( $value ) {\n+\t\t\t$this->_no_cache = $value;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\t\u002F*public function get_no_cache() {\n+\t\t\treturn $this->_no_cache;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Read all metas and set to object\n+\t\t *\u002F\n+\t\tpublic function read_meta() {\n+\t\t\t$meta_data = $this->_curd->read_meta( $this );\n+\n+\t\t\tif ( $meta_data ) {\n+\t\t\t\t$external_metas = array_filter( $meta_data, array( $this, 'exclude_metas' ) );\n+\n+\t\t\t\tforeach ( $external_metas as $meta ) {\n+\t\t\t\t\t$this->_meta_data[] = $meta;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Callback function for excluding meta keys.\n+\t\t *\n+\t\t * @param $meta\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tprotected function exclude_metas( $meta ) {\n+\t\t\t$exclude_keys = array_merge( array_keys( $this->_meta_keys ), array_keys( $this->_data ) );\n+\n+\t\t\treturn ! in_array( $meta->meta_key, $exclude_keys ) && 0 !== stripos( $meta->meta_key, 'wp_' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add new meta data to object.\n+\t\t *\n+\t\t * @param string|array $key_or_array\n+\t\t * @param string       $value\n+\t\t *\u002F\n+\t\tpublic function add_meta( $key_or_array, $value = '' ) {\n+\t\t\tif ( is_array( $key_or_array ) ) {\n+\t\t\t\tforeach ( $key_or_array as $key => $value ) {\n+\t\t\t\t\t$this->add_meta( $key, $value );\n+\t\t\t\t}\n+\t\t\t} elseif ( is_string( $key_or_array ) ) {\n+\t\t\t\t$this->_meta_data[] = (object) array(\n+\t\t\t\t\t'meta_key'   => $key_or_array,\n+\t\t\t\t\t'meta_value' => $value,\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$this->_meta_data[] = $key_or_array;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete meta data by key.\n+\t\t * If meta value is passed, compare with existing value in database (string only).\n+\t\t *\n+\t\t * @param string $meta_key\n+\t\t * @param bool   $meta_value - Optional. FALSE to abort comparison.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function delete_meta( $meta_key, $meta_value = false ) {\n+\t\t\tif ( empty( $this->_meta_data ) ) {\n+\t\t\t\treturn false;\n+\t\t\t} else {\n+\t\t\t\t$new_meta_data = array();\n+\t\t\t\tforeach ( $this->_meta_data as $k => $meta_data ) {\n+\t\t\t\t\tif ( $meta_data->meta_key === $meta_key ) {\n+\t\t\t\t\t\tif ( false !== $meta_value && $meta_data->meta_value === $meta_value ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\t$new_meta_data[] = $meta_data;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F Assign new meta\n+\t\t\t\t$this->_meta_data = $new_meta_data;\n+\n+\t\t\t\t\u002F\u002F Force to deleting from database\n+\t\t\t\tdelete_post_meta( $this->get_id(), $meta_key, $meta_value );\n+\t\t\t}\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update item meta if it is already existed. Otherwise, add a new once.\n+\t\t *\n+\t\t * @param $meta_key\n+\t\t * @param $meta_value\n+\t\t *\u002F\n+\t\tpublic function set_meta( $meta_key, $meta_value ) {\n+\t\t\tif ( empty( $this->_meta_data ) ) {\n+\t\t\t\t$this->add_meta( $meta_key, $meta_value );\n+\t\t\t} else {\n+\t\t\t\t$found = false;\n+\t\t\t\tforeach ( $this->_meta_data as $k => $meta_data ) {\n+\t\t\t\t\tif ( $meta_data->meta_key === $meta_key ) {\n+\t\t\t\t\t\t$this->_meta_data[ $k ]->meta_value = $meta_value;\n+\t\t\t\t\t\t$found                              = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tif ( ! $found ) {\n+\t\t\t\t\t$this->add_meta( $meta_key, $meta_value );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update meta.\n+\t\t *\n+\t\t * @updated 3.1.0\n+\t\t *\n+\t\t * @param string $key\n+\t\t * @param mixed  $value\n+\t\t * @param mixed  $prev_value\n+\t\t *\u002F\n+\t\tpublic function update_meta( $key = '', $value = '', $prev_value = '' ) {\n+\t\t\tif ( func_num_args() == 0 ) {\n+\t\t\t\tif ( $this->_meta_data ) {\n+\t\t\t\t\tforeach ( $this->_meta_data as $meta_data ) {\n+\t\t\t\t\t\t$this->_curd->update_meta( $this, $meta_data );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$update = update_post_meta( $this->get_id(), $key, $value, $prev_value );\n+\t\t\t\tif ( ! is_bool( $update ) && $update ) {\n+\t\t\t\t\t$this->_meta_data = (object) array(\n+\t\t\t\t\t\t'meta_key'   => $key,\n+\t\t\t\t\t\t'meta_value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Get meta keys.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_meta_keys() {\n+\t\t\treturn $this->_meta_keys;\n+\t\t}\n+\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-object-query.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-object-query.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-object-query.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-object-query.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Object_Query\r\n- *\r\n- * Base class for query functionality on post type object.\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-abstract class LP_Object_Query {\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $query_vars = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Object_Query constructor.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\u002F\r\n-\tpublic function __construct( $args = array() ) {\r\n-\r\n-\t\t$this->query_vars = wp_parse_args( $args, $this->get_default_query_vars() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all query vars.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tpublic function get_query_vars() {\r\n-\t\treturn $this->query_vars;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value of a query var by key.\r\n-\t *\r\n-\t * @param string $var_name\r\n-\t * @param string $default\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tpublic function get( $var_name, $default = '' ) {\r\n-\t\tif ( isset( $this->query_vars[ $var_name ] ) ) {\r\n-\t\t\treturn $this->query_vars[ $var_name ];\r\n-\t\t}\r\n-\r\n-\t\treturn $default;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set new value for query var.\r\n-\t *\r\n-\t * @param string $var_name\r\n-\t * @param mixed  $value\r\n-\t * @param bool   $overwrite\r\n-\t *\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tpublic function set( $var_name, $value, $overwrite = false ) {\r\n-\r\n-\t\tif ( $overwrite || ! isset( $this->query_vars[ $var_name ] ) ) {\r\n-\t\t\t$this->query_vars[ $var_name ] = $value;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default query vars.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tprotected function get_default_query_vars() {\r\n-\t\treturn array(\r\n-\t\t\t'name'           => '',\r\n-\t\t\t'parent'         => '',\r\n-\t\t\t'parent_exclude' => '',\r\n-\t\t\t'exclude'        => '',\r\n-\t\t\t'limit'          => get_option( 'posts_per_page' ),\r\n-\t\t\t'paged'          => 1,\r\n-\t\t\t'offset'         => '',\r\n-\t\t\t'paginate'       => false,\r\n-\t\t\t'order'          => 'DESC',\r\n-\t\t\t'orderby'        => 'date',\r\n-\t\t\t'return'         => 'objects',\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Object_Query\n+ *\n+ * Base class for query functionality on post type object.\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+abstract class LP_Object_Query {\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $query_vars = array();\n+\n+\t\u002F**\n+\t * LP_Object_Query constructor.\n+\t *\n+\t * @param array $args\n+\t *\u002F\n+\tpublic function __construct( $args = array() ) {\n+\n+\t\t$this->query_vars = wp_parse_args( $args, $this->get_default_query_vars() );\n+\t}\n+\n+\t\u002F**\n+\t * Get all query vars.\n+\t *\n+\t * @return array\n+\t * @since 3.3.0\n+\t *\u002F\n+\tpublic function get_query_vars() {\n+\t\treturn $this->query_vars;\n+\t}\n+\n+\t\u002F**\n+\t * Get value of a query var by key.\n+\t *\n+\t * @param string $var_name\n+\t * @param string $default\n+\t *\n+\t * @return mixed|string\n+\t * @since 3.3.0\n+\t *\u002F\n+\tpublic function get( $var_name, $default = '' ) {\n+\t\tif ( isset( $this->query_vars[ $var_name ] ) ) {\n+\t\t\treturn $this->query_vars[ $var_name ];\n+\t\t}\n+\n+\t\treturn $default;\n+\t}\n+\n+\t\u002F**\n+\t * Set new value for query var.\n+\t *\n+\t * @param string $var_name\n+\t * @param mixed  $value\n+\t * @param bool   $overwrite\n+\t *\n+\t * @since 3.3.0\n+\t *\u002F\n+\tpublic function set( $var_name, $value, $overwrite = false ) {\n+\n+\t\tif ( $overwrite || ! isset( $this->query_vars[ $var_name ] ) ) {\n+\t\t\t$this->query_vars[ $var_name ] = $value;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get default query vars.\n+\t *\n+\t * @return array\n+\t * @since 3.3.0\n+\t *\u002F\n+\tprotected function get_default_query_vars() {\n+\t\treturn array(\n+\t\t\t'name'           => '',\n+\t\t\t'parent'         => '',\n+\t\t\t'parent_exclude' => '',\n+\t\t\t'exclude'        => '',\n+\t\t\t'limit'          => get_option( 'posts_per_page' ),\n+\t\t\t'paged'          => 1,\n+\t\t\t'offset'         => '',\n+\t\t\t'paginate'       => false,\n+\t\t\t'order'          => 'DESC',\n+\t\t\t'orderby'        => 'date',\n+\t\t\t'return'         => 'objects',\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-post-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-post-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-post-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-post-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,225 +1,225 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Abstract_Post_Data.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Abstract_Post_Data' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_Post_Data\r\n-\t *\u002F\r\n-\tclass LP_Abstract_Post_Data extends LP_Abstract_Object_Data {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_content = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Abstract_Post_Data constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $post\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $post, $args = null ) {\r\n-\t\t\t$id = 0;\r\n-\t\t\tif ( is_numeric( $post ) ) {\r\n-\t\t\t\t$id = absint( $post );\r\n-\t\t\t} elseif ( $post instanceof LP_Abstract_Post_Data ) {\r\n-\t\t\t\t$id = absint( $post->get_id() );\r\n-\t\t\t} elseif ( isset( $post->ID ) ) {\r\n-\t\t\t\t$id = absint( $post->ID );\r\n-\t\t\t}\r\n-\r\n-\t\t\tsettype( $args, 'array' );\r\n-\t\t\t$args['id'] = $id;\r\n-\t\t\tparent::__construct( $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get status of post.\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_status() {\r\n-\t\t\treturn $this->get_data( 'status' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the post of this instance is exists.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_exists() {\r\n-\t\t\treturn get_post_type( $this->get_id() ) === $this->_post_type;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the post in trash.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_trashed() {\r\n-\t\t\treturn get_post_status( $this->get_id() ) === 'trash';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the post is publish.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_publish() {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002F' . $this->_post_type . '\u002Fis-publish',\r\n-\t\t\t\tget_post_status( $this->get_id() ) === 'publish'\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the title.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_title( $context = '' ) {\r\n-\t\t\t$title = get_the_title( $this->get_id() );\r\n-\r\n-\t\t\tif ( 'display' === $context ) {\r\n-\t\t\t\t$title = do_shortcode( $title );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $title;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the content of course, course's item\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t * @param int $length\r\n-\t\t * @param string $more\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 4.0.0\r\n-\t\t * @editor tungnx\r\n-\t\t * todo: should rewrite this\r\n-\t\t * @reason Current all post type is item of course ex: lesson, quiz... use same page is course single\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content( $context = 'display', $length = - 1, $more = '' ) {\r\n-\t\t\tif ( 'display' === $context ) {\r\n-\t\t\t\tif ( ! $this->_content ) {\r\n-\t\t\t\t\tglobal $post, $wp_query;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Post not preview\r\n-\t\t\t\t\tif ( ! isset( $_REQUEST['preview'] ) ) {\r\n-\t\t\t\t\t\t\u002F\u002F Fix style, js if content is WP Bakery\r\n-\t\t\t\t\t\tif ( class_exists( 'WPBMap' ) && method_exists( 'WPBMap', 'addAllMappedShortcodes' ) ) {\r\n-\t\t\t\t\t\t\tWPBMap::addAllMappedShortcodes();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$post = get_post( $this->get_id() );\r\n-\r\n-\t\t\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$content_post   = get_the_content();\r\n-\t\t\t\t\t$content_post   = apply_filters( 'the_content', $content_post );\r\n-\t\t\t\t\t$content_post   = str_replace( ']]>', ']]&gt;', $content_post );\r\n-\t\t\t\t\t$this->_content = $content_post;\r\n-\t\t\t\t\twp_reset_postdata();\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$content = get_post_field( 'post_content', $this->get_id() );\r\n-\t\t\t\tif ( $length > 1 ) {\r\n-\t\t\t\t\t$content = wp_trim_words( $content, $length, $more );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->_content;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*\r\n-\t\t * Get post status.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_post_status() {\r\n-\t\t\treturn get_post_status( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get post type.\r\n-\t\t *\r\n-\t\t * @return false|string\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_post_type() {\r\n-\t\t\treturn get_post_type( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default post meta.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_meta() {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_edit_link() {\r\n-\t\t\treturn get_edit_post_link( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user can edit item\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function current_user_can_edit(): bool {\r\n-\t\t\treturn learn_press_get_current_user()->can_edit( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get post meta data.\r\n-\t\t * Check if the meta is not stored on database then return FALSE\r\n-\t\t *\r\n-\t\t * @updated 3.1.0\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t * @param bool $single\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_meta( $key, $single = true ) {\r\n-\t\t\tif ( ! metadata_exists( 'post', $this->get_id(), $key ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn get_post_meta( $this->get_id(), $key, $single );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Abstract_Post_Data.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Abstract_Post_Data' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_Post_Data\n+\t *\u002F\n+\tclass LP_Abstract_Post_Data extends LP_Abstract_Object_Data {\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = '';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_content = '';\n+\n+\t\t\u002F**\n+\t\t * LP_Abstract_Post_Data constructor.\n+\t\t *\n+\t\t * @param mixed $post\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function __construct( $post, $args = null ) {\n+\t\t\t$id = 0;\n+\t\t\tif ( is_numeric( $post ) ) {\n+\t\t\t\t$id = absint( $post );\n+\t\t\t} elseif ( $post instanceof LP_Abstract_Post_Data ) {\n+\t\t\t\t$id = absint( $post->get_id() );\n+\t\t\t} elseif ( isset( $post->ID ) ) {\n+\t\t\t\t$id = absint( $post->ID );\n+\t\t\t}\n+\n+\t\t\tsettype( $args, 'array' );\n+\t\t\t$args['id'] = $id;\n+\t\t\tparent::__construct( $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get status of post.\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_status() {\n+\t\t\treturn $this->get_data( 'status' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the post of this instance is exists.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function is_exists() {\n+\t\t\treturn get_post_type( $this->get_id() ) === $this->_post_type;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the post in trash.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function is_trashed() {\n+\t\t\treturn get_post_status( $this->get_id() ) === 'trash';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the post is publish.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function is_publish() {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002F' . $this->_post_type . '\u002Fis-publish',\n+\t\t\t\tget_post_status( $this->get_id() ) === 'publish'\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the title.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_title( $context = '' ) {\n+\t\t\t$title = get_the_title( $this->get_id() );\n+\n+\t\t\tif ( 'display' === $context ) {\n+\t\t\t\t$title = do_shortcode( $title );\n+\t\t\t}\n+\n+\t\t\treturn $title;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the content of course, course's item\n+\t\t *\n+\t\t * @param string $context\n+\t\t * @param int $length\n+\t\t * @param string $more\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 4.0.0\n+\t\t * @editor tungnx\n+\t\t * todo: should rewrite this\n+\t\t * @reason Current all post type is item of course ex: lesson, quiz... use same page is course single\n+\t\t *\u002F\n+\t\tpublic function get_content( $context = 'display', $length = - 1, $more = '' ) {\n+\t\t\tif ( 'display' === $context ) {\n+\t\t\t\tif ( ! $this->_content ) {\n+\t\t\t\t\tglobal $post, $wp_query;\n+\n+\t\t\t\t\t\u002F\u002F Post not preview\n+\t\t\t\t\tif ( ! isset( $_REQUEST['preview'] ) ) {\n+\t\t\t\t\t\t\u002F\u002F Fix style, js if content is WP Bakery\n+\t\t\t\t\t\tif ( class_exists( 'WPBMap' ) && method_exists( 'WPBMap', 'addAllMappedShortcodes' ) ) {\n+\t\t\t\t\t\t\tWPBMap::addAllMappedShortcodes();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$post = get_post( $this->get_id() );\n+\n+\t\t\t\t\t\tsetup_postdata( $post );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$content_post   = get_the_content();\n+\t\t\t\t\t$content_post   = apply_filters( 'the_content', $content_post );\n+\t\t\t\t\t$content_post   = str_replace( ']]>', ']]&gt;', $content_post );\n+\t\t\t\t\t$this->_content = $content_post;\n+\t\t\t\t\twp_reset_postdata();\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$content = get_post_field( 'post_content', $this->get_id() );\n+\t\t\t\tif ( $length > 1 ) {\n+\t\t\t\t\t$content = wp_trim_words( $content, $length, $more );\n+\t\t\t\t}\n+\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\treturn $this->_content;\n+\t\t}\n+\n+\t\t\u002F*\n+\t\t * Get post status.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_post_status() {\n+\t\t\treturn get_post_status( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get post type.\n+\t\t *\n+\t\t * @return false|string\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_post_type() {\n+\t\t\treturn get_post_type( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default post meta.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function get_default_meta() {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\tpublic function get_edit_link() {\n+\t\t\treturn get_edit_post_link( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user can edit item\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function current_user_can_edit(): bool {\n+\t\t\treturn learn_press_get_current_user()->can_edit( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get post meta data.\n+\t\t * Check if the meta is not stored on database then return FALSE\n+\t\t *\n+\t\t * @updated 3.1.0\n+\t\t *\n+\t\t * @param string $key\n+\t\t * @param bool $single\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_meta( $key, $single = true ) {\n+\t\t\tif ( ! metadata_exists( 'post', $this->get_id(), $key ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn get_post_meta( $this->get_id(), $key, $single );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-rest-api.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-rest-api.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-rest-api.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-rest-api.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,92 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_API_Base\r\n- *\r\n- * Base class for api\r\n- *\r\n- * @since 3.2.6\r\n- *\u002F\r\n-abstract class LP_Abstract_API {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $version = 'v1';\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $endpoint = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var WC_REST_Controller[]|string[]\r\n-\t *\u002F\r\n-\tpublic $controllers = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_API_Base constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->rest_api_init();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Init REST.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\u002F\r\n-\tpublic function rest_api_init() {\r\n-\t\tif ( ! class_exists( 'WP_REST_Server' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! LP_Helper::isRestApiLP() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->rest_api_includes();\r\n-\r\n-\t\tadd_action( 'rest_api_init', array( $this, 'rest_api_register_routes' ), 10 );\r\n-\r\n-\t}\r\n-\r\n-\tpublic function rest_api_includes() {\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register routes\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\u002F\r\n-\tpublic function rest_api_register_routes() {\r\n-\t\tif ( ! $this->controllers ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$controllers = array();\r\n-\r\n-\t\tforeach ( $this->controllers as $name => $controller ) {\r\n-\r\n-\t\t\tif ( is_string( $controller ) ) {\r\n-\t\t\t\t$name                 = $controller;\r\n-\t\t\t\t$controllers[ $name ] = new $controller();\r\n-\t\t\t} else {\r\n-\t\t\t\t$controllers[ $name ] = $controller;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$controllers[ $name ]->register_routes();\r\n-\t\t}\r\n-\r\n-\t\t$this->controllers = $controllers;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission if user is administrator.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function check_admin_permission(): bool {\r\n-\t\treturn current_user_can( ADMIN_ROLE );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_API_Base\n+ *\n+ * Base class for api\n+ *\n+ * @since 3.2.6\n+ *\u002F\n+abstract class LP_Abstract_API {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $version = 'v1';\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $endpoint = '';\n+\n+\t\u002F**\n+\t * @var WC_REST_Controller[]|string[]\n+\t *\u002F\n+\tpublic $controllers = array();\n+\n+\t\u002F**\n+\t * LP_API_Base constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->rest_api_init();\n+\t}\n+\n+\t\u002F**\n+\t * Init REST.\n+\t *\n+\t * @since 3.2.6\n+\t *\u002F\n+\tpublic function rest_api_init() {\n+\t\tif ( ! class_exists( 'WP_REST_Server' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! LP_Helper::isRestApiLP() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->rest_api_includes();\n+\n+\t\tadd_action( 'rest_api_init', array( $this, 'rest_api_register_routes' ), 10 );\n+\n+\t}\n+\n+\tpublic function rest_api_includes() {\n+\n+\t}\n+\n+\t\u002F**\n+\t * Register routes\n+\t *\n+\t * @since 3.2.6\n+\t *\u002F\n+\tpublic function rest_api_register_routes() {\n+\t\tif ( ! $this->controllers ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$controllers = array();\n+\n+\t\tforeach ( $this->controllers as $name => $controller ) {\n+\n+\t\t\tif ( is_string( $controller ) ) {\n+\t\t\t\t$name                 = $controller;\n+\t\t\t\t$controllers[ $name ] = new $controller();\n+\t\t\t} else {\n+\t\t\t\t$controllers[ $name ] = $controller;\n+\t\t\t}\n+\n+\t\t\t$controllers[ $name ]->register_routes();\n+\t\t}\n+\n+\t\t$this->controllers = $controllers;\n+\t}\n+\n+\t\u002F**\n+\t * Check permission if user is administrator.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function check_admin_permission(): bool {\n+\t\treturn current_user_can( ADMIN_ROLE );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-rest-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-rest-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-rest-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-rest-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Abstract_REST_Controller\r\n- *\u002F\r\n-class LP_Abstract_REST_Controller extends WP_REST_Controller {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $namespace = 'lp\u002Fv1';\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $rest_base = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $routes = array();\r\n-\r\n-\tpublic function __construct() {\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register routes for controller.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\r\n-\t\tif ( ! $this->routes ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $this->routes as $key => $args ) {\r\n-\t\t\t$rest_base = $this->rest_base;\r\n-\t\t\t$override  = false;\r\n-\r\n-\t\t\tif ( is_bool( end( $args ) ) ) {\r\n-\t\t\t\t$override = array_pop( $args );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_numeric( $key ) ) {\r\n-\t\t\t\t$rest_base = \"{$rest_base}\u002F{$key}\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tregister_rest_route( $this->namespace, '\u002F' . $rest_base, $args, $override );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function ensure_response( $data ) {\r\n-\t\tadd_filter( 'rest_pre_serve_request', array( $this, 'print_response' ), 10, 4 );\r\n-\r\n-\t\treturn rest_ensure_response( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param boolean          $false\r\n-\t * @param WP_REST_Response $result\r\n-\t * @param WP_REST_Request  $request\r\n-\t * @param WP_REST_Server   $server\r\n-\t *\u002F\r\n-\tpublic function print_response( $false, $result, $request, $server ) {\r\n-\t\tlearn_press_send_json( $result->get_data() );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Abstract_REST_Controller\n+ *\u002F\n+class LP_Abstract_REST_Controller extends WP_REST_Controller {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $namespace = 'lp\u002Fv1';\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $rest_base = '';\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $routes = array();\n+\n+\tpublic function __construct() {\n+\n+\t}\n+\n+\t\u002F**\n+\t * Register routes for controller.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\n+\t\tif ( ! $this->routes ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $this->routes as $key => $args ) {\n+\t\t\t$rest_base = $this->rest_base;\n+\t\t\t$override  = false;\n+\n+\t\t\tif ( is_bool( end( $args ) ) ) {\n+\t\t\t\t$override = array_pop( $args );\n+\t\t\t}\n+\n+\t\t\tif ( ! is_numeric( $key ) ) {\n+\t\t\t\t$rest_base = \"{$rest_base}\u002F{$key}\";\n+\t\t\t}\n+\n+\t\t\tregister_rest_route( $this->namespace, '\u002F' . $rest_base, $args, $override );\n+\t\t}\n+\t}\n+\n+\tpublic function ensure_response( $data ) {\n+\t\tadd_filter( 'rest_pre_serve_request', array( $this, 'print_response' ), 10, 4 );\n+\n+\t\treturn rest_ensure_response( $data );\n+\t}\n+\n+\t\u002F**\n+\t * @param boolean          $false\n+\t * @param WP_REST_Response $result\n+\t * @param WP_REST_Request  $request\n+\t * @param WP_REST_Server   $server\n+\t *\u002F\n+\tpublic function print_response( $false, $result, $request, $server ) {\n+\t\tlearn_press_send_json( $result->get_data() );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-shortcode-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-shortcode-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-shortcode-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-shortcode-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,144 +1,144 @@\n-\u003C?php\r\n-\u002F**\r\n- * Abstract Shortcode Courses.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Abstract\r\n- * @package  Learnpress\u002FClasses\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Abstract_Shortcode_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_Shortcode\r\n-\t *\r\n-\t * Abstract class for shortcodes\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tabstract class LP_Abstract_Shortcode_Courses extends LP_Abstract_Shortcode {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $curd = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $courses = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var WP_Query\r\n-\t\t *\u002F\r\n-\t\tprotected $_query = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Abstract_Shortcode_Courses constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\r\n-\t\t\t\u002F\u002F course curd\r\n-\t\t\t$this->curd = new LP_Course_CURD();\r\n-\r\n-\t\t\t\u002F\u002F shortcode atts\r\n-\t\t\t$this->_atts = wp_parse_args( $this->_atts, $this->get_atts() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query course\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tabstract function query_courses();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get shortcode atts.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_atts() {\r\n-\t\t\t$atts = parent::get_atts();\r\n-\r\n-\t\t\t$atts = wp_parse_args(\r\n-\t\t\t\t$atts,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'limit'    => 5,\r\n-\t\t\t\t\t'order_by' => 'post_date',\r\n-\t\t\t\t\t'order'    => 'DESC',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$order_by = $atts['order_by'];\r\n-\t\t\t$order    = $atts['order'];\r\n-\r\n-\t\t\t$arr_orders_by = array( 'post_date', 'post_title', 'post_status', 'comment_count' );\r\n-\t\t\tif ( ! in_array( $order_by, $arr_orders_by ) || ! in_array( 'post_' . $order_by, $arr_orders_by ) ) {\r\n-\t\t\t\t$atts['order_by'] = 'post_date';\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $order_by !== 'comment_count' ) {\r\n-\t\t\t\t\t$atts['order_by'] = 'post_' . $order_by;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$arr_orders = array( 'DESC', 'ASC' );\r\n-\t\t\t$order      = strtoupper( $order );\r\n-\r\n-\t\t\tif ( ! in_array( $order, $arr_orders ) ) {\r\n-\t\t\t\t$atts['order'] = 'DESC';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $atts;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output shortcode.\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\t$this->query_courses();\r\n-\t\t\t$this->output_courses();\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Loop course.\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function output_courses() {\r\n-\t\t\t$attrs = $this->get_atts();\r\n-\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\t\u002F\u002Fwp_enqueue_script( 'lp-courses' );\r\n-\r\n-\t\t\t$post_ids = $this->_query;\r\n-\r\n-\t\t\tif ( ! $post_ids ) {\r\n-\t\t\t\t$post_ids = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = new LP_Query_Course( array( 'post__in' => $post_ids ) );\r\n-\t\t\t$args  = $query->get_wp_query_vars();\r\n-\r\n-\t\t\t$query = new WP_Query( $args );\r\n-\r\n-\t\t\t$args_template = array( 'query' => $query );\r\n-\r\n-\t\t\tif ( ! empty( $attrs['title'] ) ) {\r\n-\t\t\t\t$args_template['title'] = $attrs['title'];\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_get_template( 'shortcode\u002Flist-courses', $args_template );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Abstract Shortcode Courses.\n+ *\n+ * @author  ThimPress\n+ * @category Abstract\n+ * @package  Learnpress\u002FClasses\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Abstract_Shortcode_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_Shortcode\n+\t *\n+\t * Abstract class for shortcodes\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tabstract class LP_Abstract_Shortcode_Courses extends LP_Abstract_Shortcode {\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $curd = null;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $courses = null;\n+\n+\t\t\u002F**\n+\t\t * @var WP_Query\n+\t\t *\u002F\n+\t\tprotected $_query = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Abstract_Shortcode_Courses constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\n+\t\t\t\u002F\u002F course curd\n+\t\t\t$this->curd = new LP_Course_CURD();\n+\n+\t\t\t\u002F\u002F shortcode atts\n+\t\t\t$this->_atts = wp_parse_args( $this->_atts, $this->get_atts() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query course\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tabstract function query_courses();\n+\n+\t\t\u002F**\n+\t\t * Get shortcode atts.\n+\t\t *\n+\t\t * @return array\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function get_atts() {\n+\t\t\t$atts = parent::get_atts();\n+\n+\t\t\t$atts = wp_parse_args(\n+\t\t\t\t$atts,\n+\t\t\t\tarray(\n+\t\t\t\t\t'limit'    => 5,\n+\t\t\t\t\t'order_by' => 'post_date',\n+\t\t\t\t\t'order'    => 'DESC',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$order_by = $atts['order_by'];\n+\t\t\t$order    = $atts['order'];\n+\n+\t\t\t$arr_orders_by = array( 'post_date', 'post_title', 'post_status', 'comment_count' );\n+\t\t\tif ( ! in_array( $order_by, $arr_orders_by ) || ! in_array( 'post_' . $order_by, $arr_orders_by ) ) {\n+\t\t\t\t$atts['order_by'] = 'post_date';\n+\t\t\t} else {\n+\t\t\t\tif ( $order_by !== 'comment_count' ) {\n+\t\t\t\t\t$atts['order_by'] = 'post_' . $order_by;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$arr_orders = array( 'DESC', 'ASC' );\n+\t\t\t$order      = strtoupper( $order );\n+\n+\t\t\tif ( ! in_array( $order, $arr_orders ) ) {\n+\t\t\t\t$atts['order'] = 'DESC';\n+\t\t\t}\n+\n+\t\t\treturn $atts;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output shortcode.\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\tob_start();\n+\n+\t\t\t$this->query_courses();\n+\t\t\t$this->output_courses();\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Loop course.\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function output_courses() {\n+\t\t\t$attrs = $this->get_atts();\n+\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\t\u002F\u002Fwp_enqueue_script( 'lp-courses' );\n+\n+\t\t\t$post_ids = $this->_query;\n+\n+\t\t\tif ( ! $post_ids ) {\n+\t\t\t\t$post_ids = array();\n+\t\t\t}\n+\n+\t\t\t$query = new LP_Query_Course( array( 'post__in' => $post_ids ) );\n+\t\t\t$args  = $query->get_wp_query_vars();\n+\n+\t\t\t$query = new WP_Query( $args );\n+\n+\t\t\t$args_template = array( 'query' => $query );\n+\n+\t\t\tif ( ! empty( $attrs['title'] ) ) {\n+\t\t\t\t$args_template['title'] = $attrs['title'];\n+\t\t\t}\n+\n+\t\t\tlearn_press_get_template( 'shortcode\u002Flist-courses', $args_template );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-shortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-shortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstracts\u002Fabstract-shortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstracts\u002Fabstract-shortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,84 +1,84 @@\n-\u003C?php\r\n-\u002F**\r\n- * Abstract Class for Shortcodes.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Abstract\r\n- * @package  Learnpress\u002FClasses\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\r\n-if ( ! class_exists( 'LP_Abstract_Shortcode' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_Shortcode\r\n-\t *\u002F\r\n-\tabstract class LP_Abstract_Shortcode {\r\n-\t\t\u002F**\r\n-\t\t * Shortcode attributes.\r\n-\t\t *\r\n-\t\t * @var array|null\r\n-\t\t *\u002F\r\n-\t\tprotected $_atts = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_name = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Abstract_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\t$this->_atts = (array) $atts;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return content of the shortcode.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tabstract function output();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get shortcode attributes.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_atts() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fshortcode-' . $this->get_name() . '-atts', $this->_atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default name of shortcode (without prefix learn_press_) if it is not set.\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_name() {\r\n-\t\t\tif ( ! $this->_name ) {\r\n-\t\t\t\tif ( preg_match( '~^lp_(.*)_shortcode$~i', get_class( $this ), $m ) ) {\r\n-\t\t\t\t\t$this->_name = preg_replace( '~_~', '-', strtolower( $m[1] ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->_name;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Convert to string\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function __toString() {\r\n-\t\t\treturn $this->output();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Abstract Class for Shortcodes.\n+ *\n+ * @author   ThimPress\n+ * @category Abstract\n+ * @package  Learnpress\u002FClasses\n+ * @version  3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+\n+if ( ! class_exists( 'LP_Abstract_Shortcode' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_Shortcode\n+\t *\u002F\n+\tabstract class LP_Abstract_Shortcode {\n+\t\t\u002F**\n+\t\t * Shortcode attributes.\n+\t\t *\n+\t\t * @var array|null\n+\t\t *\u002F\n+\t\tprotected $_atts = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_name = '';\n+\n+\t\t\u002F**\n+\t\t * LP_Abstract_Shortcode constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\t$this->_atts = (array) $atts;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return content of the shortcode.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tabstract function output();\n+\n+\t\t\u002F**\n+\t\t * Get shortcode attributes.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_atts() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fshortcode-' . $this->get_name() . '-atts', $this->_atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default name of shortcode (without prefix learn_press_) if it is not set.\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_name() {\n+\t\t\tif ( ! $this->_name ) {\n+\t\t\t\tif ( preg_match( '~^lp_(.*)_shortcode$~i', get_class( $this ), $m ) ) {\n+\t\t\t\t\t$this->_name = preg_replace( '~_~', '-', strtolower( $m[1] ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $this->_name;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Convert to string\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function __toString() {\n+\t\t\treturn $this->output();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstract-settings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstract-settings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fabstract-settings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fabstract-settings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,206 +1,206 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Abstract_Settings\r\n- *\u002F\r\n-abstract class LP_Abstract_Settings {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Abstract_Settings constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tadd_filter( 'learn-press\u002Fupdate-settings\u002Fredirect', array( $this, '_do_save' ) );\r\n-\t}\r\n-\r\n-\tpublic function _do_save( $url ) {\r\n-\t\t$this->save();\r\n-\r\n-\t\treturn $url;\r\n-\t}\r\n-\r\n-\tpublic function save() {\r\n-\t\t\u002F\u002F This function should be overwritten from its child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|mixed|array\r\n-\t *\u002F\r\n-\tpublic function get_settings() {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get name for field\r\n-\t *\r\n-\t * @param $name\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_admin_field_name( $name ) {\r\n-\t\t$items   = LP_Admin_Menu::instance()->get_menu_items();\r\n-\t\t$section = '';\r\n-\r\n-\t\tif ( ! empty( $items['settings'] ) ) {\r\n-\t\t\t$tab     = $items['settings']->get_active_tab();\r\n-\t\t\t$section = $items['settings']->get_active_section();\r\n-\t\t}\r\n-\r\n-\t\tif ( $tab === 'payments' && $section !== 'general' && ! empty( $name ) ) {\r\n-\t\t\tif ( strpos( $name, '[' ) === 0 ) {\r\n-\t\t\t\t$name = $section . $name;\r\n-\t\t\t} else {\r\n-\t\t\t\t$name = $section . '_' . $name;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $name ) ) {\r\n-\t\t\t$name = md5( microtime( true ) );\r\n-\t\t}\r\n-\r\n-\t\t$field_name = apply_filters( 'learn_press_settings_field_name_' . $name, \"learn_press_{$name}\" );\r\n-\r\n-\t\treturn $field_name;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get ID for field\r\n-\t *\r\n-\t * @param $name\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_admin_field_id( $name ) {\r\n-\t\treturn preg_replace( array( '!\\[|(\\]\\[)!', '!\\]!' ), array( '_', '' ), $this->get_field_name( $name ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Print admin fields options.\r\n-\t *\r\n-\t * @version 4.0.0\r\n-\t *\u002F\r\n-\tpublic function admin_option_settings() {\r\n-\t\t$settings = $this->get_settings();\r\n-\t\t$settings = $this->sanitize_settings( $settings );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fsettings-render' );\r\n-\r\n-\t\tif ( $settings ) {\r\n-\t\t\tLP_Meta_Box_Helper::output_fields( $settings );\r\n-\t\t} else {\r\n-\t\t\techo esc_html__( 'No settings available.', 'learnpress' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize settings before rendering.\r\n-\t * Fill std from database, reformat conditional fields...\r\n-\t *\r\n-\t * @param $settings\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function sanitize_settings( $settings ) {\r\n-\t\tif ( $settings ) {\r\n-\t\t\tforeach ( $settings as $k => $field ) {\r\n-\r\n-\t\t\t\t\u002F\u002F except heading options.\r\n-\t\t\t\tif ( isset( $field['id'] ) ) {\r\n-\r\n-\t\t\t\t\t$field['id'] = $this->get_admin_field_name( $field['id'] );\r\n-\r\n-\t\t\t\t\t\u002F\u002F A field is an array of values, find the real name.\r\n-\t\t\t\t\tif ( strpos( $field['id'], '[' ) !== false ) {\r\n-\t\t\t\t\t\tparse_str( $field['id'], $group );\r\n-\t\t\t\t\t\t$keys        = array_keys( $group );\r\n-\t\t\t\t\t\t$option_name = reset( $keys );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$option_name = $field['id'];\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Get value from option\r\n-\t\t\t\t\t$std = get_option( $option_name );\r\n-\t\t\t\t\tif ( false === $std ) {\r\n-\t\t\t\t\t\t$std = array_key_exists( 'default', $field ) ? $field['default'] : '';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F If the field is an array\r\n-\t\t\t\t\tif ( isset( $group ) && is_array( $std ) ) {\r\n-\t\t\t\t\t\t$loop = 0;\r\n-\t\t\t\t\t\twhile ( is_array( $group ) && $loop ++ \u003C 10 ) {\r\n-\t\t\t\t\t\t\tif ( ! empty( $group[ $option_name ] ) ) {\r\n-\t\t\t\t\t\t\t\t$option_keys = array_keys( $group[ $option_name ] );\r\n-\t\t\t\t\t\t\t\t$option_name = reset( $option_keys );\r\n-\t\t\t\t\t\t\t\t$group       = ! empty( $group[ $option_name ] ) ? $group[ $option_name ] : false;\r\n-\t\t\t\t\t\t\t\t$std         = ! empty( $std[ $option_name ] ) ? $std[ $option_name ] : false;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$field['std']                  = apply_filters( 'learn-press\u002Fsettings\u002Fdefault-field-value', $std, $field );\r\n-\t\t\t\t\t$field['learn-press-settings'] = 'yes';\r\n-\t\t\t\t\t$this->parse_conditional( $field );\r\n-\t\t\t\t\t$settings[ $k ] = $field;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $settings;\r\n-\t}\r\n-\r\n-\tpublic function parse_conditional( &$field ) {\r\n-\t\t\u002F\u002F Re-format conditional logic fields\r\n-\t\tif ( ! empty( $field['visibility'] ) ) {\r\n-\t\t\t$conditional = $field['visibility'];\r\n-\r\n-\t\t\tif ( ! array_key_exists( 0, $conditional['conditional'] ) ) {\r\n-\t\t\t\t$conditional['conditional'] = array(\r\n-\t\t\t\t\t$conditional['conditional'],\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $conditional['conditional'] as $kk => $conditional_field ) {\r\n-\t\t\t\t$conditional['conditional'][ $kk ]['field'] = $this->get_admin_field_name( $conditional_field['field'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$field['visibility'] = $conditional;\r\n-\t\t}\r\n-\r\n-\t\treturn $field;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param      $option_name\r\n-\t * @param null        $default\r\n-\t *\r\n-\t * @return array|null|string\r\n-\t *\u002F\r\n-\tpublic function get_option( $option_name, $default = null ) {\r\n-\t\tif ( strstr( $option_name, '[' ) ) {\r\n-\t\t\tparse_str( $option_name, $option_array );\r\n-\r\n-\t\t\t\u002F\u002F Option name is first key\r\n-\t\t\t$option_name = current( array_keys( $option_array ) );\r\n-\r\n-\t\t\t\u002F\u002F Get value\r\n-\t\t\t$option_values = get_option( $option_name, '' );\r\n-\r\n-\t\t\t$key = key( $option_array[ $option_name ] );\r\n-\r\n-\t\t\tif ( isset( $option_values[ $key ] ) ) {\r\n-\t\t\t\t$option_value = $option_values[ $key ];\r\n-\t\t\t} else {\r\n-\t\t\t\t$option_value = null;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Single value\r\n-\t\t} else {\r\n-\t\t\t$option_value = LP_Settings::instance()->get( preg_replace( '!^learn_press_!', '', $option_name ), null );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_array( $option_value ) ) {\r\n-\t\t\t$option_value = array_map( 'stripslashes', $option_value );\r\n-\t\t} elseif ( ! is_null( $option_value ) ) {\r\n-\t\t\t$option_value = stripslashes( $option_value );\r\n-\t\t}\r\n-\r\n-\t\treturn $option_value === null ? $default : $option_value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Abstract_Settings\n+ *\u002F\n+abstract class LP_Abstract_Settings {\n+\n+\t\u002F**\n+\t * LP_Abstract_Settings constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tadd_filter( 'learn-press\u002Fupdate-settings\u002Fredirect', array( $this, '_do_save' ) );\n+\t}\n+\n+\tpublic function _do_save( $url ) {\n+\t\t$this->save();\n+\n+\t\treturn $url;\n+\t}\n+\n+\tpublic function save() {\n+\t\t\u002F\u002F This function should be overwritten from its child\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|mixed|array\n+\t *\u002F\n+\tpublic function get_settings() {\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get name for field\n+\t *\n+\t * @param $name\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_admin_field_name( $name ) {\n+\t\t$items   = LP_Admin_Menu::instance()->get_menu_items();\n+\t\t$section = '';\n+\n+\t\tif ( ! empty( $items['settings'] ) ) {\n+\t\t\t$tab     = $items['settings']->get_active_tab();\n+\t\t\t$section = $items['settings']->get_active_section();\n+\t\t}\n+\n+\t\tif ( $tab === 'payments' && $section !== 'general' && ! empty( $name ) ) {\n+\t\t\tif ( strpos( $name, '[' ) === 0 ) {\n+\t\t\t\t$name = $section . $name;\n+\t\t\t} else {\n+\t\t\t\t$name = $section . '_' . $name;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( empty( $name ) ) {\n+\t\t\t$name = md5( microtime( true ) );\n+\t\t}\n+\n+\t\t$field_name = apply_filters( 'learn_press_settings_field_name_' . $name, \"learn_press_{$name}\" );\n+\n+\t\treturn $field_name;\n+\t}\n+\n+\t\u002F**\n+\t * Get ID for field\n+\t *\n+\t * @param $name\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_admin_field_id( $name ) {\n+\t\treturn preg_replace( array( '!\\[|(\\]\\[)!', '!\\]!' ), array( '_', '' ), $this->get_field_name( $name ) );\n+\t}\n+\n+\t\u002F**\n+\t * Print admin fields options.\n+\t *\n+\t * @version 4.0.0\n+\t *\u002F\n+\tpublic function admin_option_settings() {\n+\t\t$settings = $this->get_settings();\n+\t\t$settings = $this->sanitize_settings( $settings );\n+\n+\t\tdo_action( 'learn-press\u002Fsettings-render' );\n+\n+\t\tif ( $settings ) {\n+\t\t\tLP_Meta_Box_Helper::output_fields( $settings );\n+\t\t} else {\n+\t\t\techo esc_html__( 'No settings available.', 'learnpress' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize settings before rendering.\n+\t * Fill std from database, reformat conditional fields...\n+\t *\n+\t * @param $settings\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function sanitize_settings( $settings ) {\n+\t\tif ( $settings ) {\n+\t\t\tforeach ( $settings as $k => $field ) {\n+\n+\t\t\t\t\u002F\u002F except heading options.\n+\t\t\t\tif ( isset( $field['id'] ) ) {\n+\n+\t\t\t\t\t$field['id'] = $this->get_admin_field_name( $field['id'] );\n+\n+\t\t\t\t\t\u002F\u002F A field is an array of values, find the real name.\n+\t\t\t\t\tif ( strpos( $field['id'], '[' ) !== false ) {\n+\t\t\t\t\t\tparse_str( $field['id'], $group );\n+\t\t\t\t\t\t$keys        = array_keys( $group );\n+\t\t\t\t\t\t$option_name = reset( $keys );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$option_name = $field['id'];\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Get value from option\n+\t\t\t\t\t$std = get_option( $option_name );\n+\t\t\t\t\tif ( false === $std ) {\n+\t\t\t\t\t\t$std = array_key_exists( 'default', $field ) ? $field['default'] : '';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F If the field is an array\n+\t\t\t\t\tif ( isset( $group ) && is_array( $std ) ) {\n+\t\t\t\t\t\t$loop = 0;\n+\t\t\t\t\t\twhile ( is_array( $group ) && $loop ++ \u003C 10 ) {\n+\t\t\t\t\t\t\tif ( ! empty( $group[ $option_name ] ) ) {\n+\t\t\t\t\t\t\t\t$option_keys = array_keys( $group[ $option_name ] );\n+\t\t\t\t\t\t\t\t$option_name = reset( $option_keys );\n+\t\t\t\t\t\t\t\t$group       = ! empty( $group[ $option_name ] ) ? $group[ $option_name ] : false;\n+\t\t\t\t\t\t\t\t$std         = ! empty( $std[ $option_name ] ) ? $std[ $option_name ] : false;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$field['std']                  = apply_filters( 'learn-press\u002Fsettings\u002Fdefault-field-value', $std, $field );\n+\t\t\t\t\t$field['learn-press-settings'] = 'yes';\n+\t\t\t\t\t$this->parse_conditional( $field );\n+\t\t\t\t\t$settings[ $k ] = $field;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $settings;\n+\t}\n+\n+\tpublic function parse_conditional( &$field ) {\n+\t\t\u002F\u002F Re-format conditional logic fields\n+\t\tif ( ! empty( $field['visibility'] ) ) {\n+\t\t\t$conditional = $field['visibility'];\n+\n+\t\t\tif ( ! array_key_exists( 0, $conditional['conditional'] ) ) {\n+\t\t\t\t$conditional['conditional'] = array(\n+\t\t\t\t\t$conditional['conditional'],\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tforeach ( $conditional['conditional'] as $kk => $conditional_field ) {\n+\t\t\t\t$conditional['conditional'][ $kk ]['field'] = $this->get_admin_field_name( $conditional_field['field'] );\n+\t\t\t}\n+\n+\t\t\t$field['visibility'] = $conditional;\n+\t\t}\n+\n+\t\treturn $field;\n+\t}\n+\n+\t\u002F**\n+\t * @param      $option_name\n+\t * @param null        $default\n+\t *\n+\t * @return array|null|string\n+\t *\u002F\n+\tpublic function get_option( $option_name, $default = null ) {\n+\t\tif ( strstr( $option_name, '[' ) ) {\n+\t\t\tparse_str( $option_name, $option_array );\n+\n+\t\t\t\u002F\u002F Option name is first key\n+\t\t\t$option_name = current( array_keys( $option_array ) );\n+\n+\t\t\t\u002F\u002F Get value\n+\t\t\t$option_values = get_option( $option_name, '' );\n+\n+\t\t\t$key = key( $option_array[ $option_name ] );\n+\n+\t\t\tif ( isset( $option_values[ $key ] ) ) {\n+\t\t\t\t$option_value = $option_values[ $key ];\n+\t\t\t} else {\n+\t\t\t\t$option_value = null;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Single value\n+\t\t} else {\n+\t\t\t$option_value = LP_Settings::instance()->get( preg_replace( '!^learn_press_!', '', $option_name ), null );\n+\t\t}\n+\n+\t\tif ( is_array( $option_value ) ) {\n+\t\t\t$option_value = array_map( 'stripslashes', $option_value );\n+\t\t} elseif ( ! is_null( $option_value ) ) {\n+\t\t\t$option_value = stripslashes( $option_value );\n+\t\t}\n+\n+\t\treturn $option_value === null ? $default : $option_value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-ajax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-ajax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-ajax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-ajax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,712 +1,712 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Ajax\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Admin_Ajax' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Admin_Ajax\r\n-\t *\u002F\r\n-\tclass LP_Admin_Ajax {\r\n-\t\tpublic function __construct() {\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add action ajax\r\n-\t\t *\u002F\r\n-\t\tpublic static function init() {\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$ajax_events = array(\r\n-\t\t\t\t'create_page'            => false, \u002F\u002F Use create new page on Settings\r\n-\t\t\t\t\u002F\u002F'load_chart'             => false,\r\n-\t\t\t\t'search_course_category' => false,\r\n-\t\t\t\t\u002F\u002F'custom_stats'           => false,\r\n-\t\t\t\t'get_page_permalink'     => false,\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $ajax_events as $ajax_event => $nopriv ) {\r\n-\t\t\t\tadd_action( 'wp_ajax_learnpress_' . $ajax_event, array( __CLASS__, $ajax_event ) );\r\n-\r\n-\t\t\t\t\u002F\u002F enable for non-logged in users\r\n-\t\t\t\tif ( $nopriv ) {\r\n-\t\t\t\t\tadd_action( 'wp_ajax_nopriv_learnpress_' . $ajax_event, array( __CLASS__, $ajax_event ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fajax\u002Fadmin-load', __CLASS__ );\r\n-\r\n-\t\t\t$ajax_events = array(\r\n-\t\t\t\t'search_items' => 'modal_search_items',\r\n-\t\t\t\t'update-payment-order',\r\n-\t\t\t\t\u002F\u002F Update ordering of payments when user changing.\r\n-\t\t\t\t'update-payment-status',\r\n-\t\t\t\t\u002F\u002F Enable type payment\r\n-\r\n-\t\t\t\t\u002F\u002F admin editor\r\n-\t\t\t\t'admin_course_editor',\r\n-\t\t\t\t'admin_quiz_editor',\r\n-\t\t\t\t'admin_question_editor',\r\n-\t\t\t\t'duplicator',\r\n-\t\t\t\t\u002F\u002F Duplicate course, lesson, quiz, question.\r\n-\t\t\t\t'modal_search_items',\r\n-\t\t\t\t\u002F\u002F Used to search courses on LP Order\r\n-\t\t\t\t\u002F\u002F'modal_search_users',\r\n-\t\t\t\t\u002F\u002F Used to search users on LP Order\r\n-\t\t\t\t'add_items_to_order',\r\n-\t\t\t\t\u002F\u002F Used to add courses on LP Order\r\n-\t\t\t\t'remove_items_from_order',\r\n-\t\t\t\t\u002F\u002F Used to remove items from LP Order\r\n-\t\t\t\t'update_email_status',\r\n-\t\t\t\t\u002F\u002F Use for enable email on LP Settings\r\n-\t\t\t\t'search-authors',\r\n-\t\t\t\t\u002F\u002F Used to search username on input some page (list courses, lp orders, quizzes, questions... on the Backend\r\n-\t\t\t\t\u002F\u002F'skip-notice-install',\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $ajax_events as $action => $callback ) {\r\n-\t\t\t\tif ( is_numeric( $action ) ) {\r\n-\t\t\t\t\t$action = $callback;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$actions = LP_Request::parse_action( $action );\r\n-\t\t\t\t$method  = $actions['action'];\r\n-\r\n-\t\t\t\tif ( ! is_callable( $callback ) ) {\r\n-\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\r\n-\t\t\t\t\t$callback = array( __CLASS__, $method );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tLP_Request::register_ajax( $action, $callback );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Search user on some pages on the Backend\r\n-\t\t *\u002F\r\n-\t\tpublic static function search_authors() {\r\n-\t\t\t$args  = array(\r\n-\t\t\t\t'orderby'        => 'name',\r\n-\t\t\t\t'order'          => 'ASC',\r\n-\t\t\t\t'search'         => sprintf( '*%s*', esc_attr( LP_Request::get_string( 'term' ) ) ),\r\n-\t\t\t\t'search_columns' => array( 'user_login', 'user_email' ),\r\n-\t\t\t);\r\n-\t\t\t$q     = new WP_User_Query( $args );\r\n-\t\t\t$users = array();\r\n-\r\n-\t\t\t$results = $q->get_results();\r\n-\r\n-\t\t\tif ( $results ) {\r\n-\t\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\t\t$users[] = array(\r\n-\t\t\t\t\t\t'id'   => $result->ID,\r\n-\t\t\t\t\t\t'text' => learn_press_get_profile_display_name( $result->ID ),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\techo json_encode(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'results' => $users,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tdie();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle ajax admin course editor.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function admin_course_editor() {\r\n-\t\t\t$editor = LP_Admin_Editor::get_editor_course();\r\n-\t\t\tself::admin_editor( $editor );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle ajax admin question editor.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function admin_question_editor() {\r\n-\t\t\t$editor = LP_Admin_Editor::get_editor_question();\r\n-\t\t\tself::admin_editor( $editor );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle ajax admin quiz editor.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function admin_quiz_editor() {\r\n-\t\t\t$editor = LP_Admin_Editor::get_editor_quiz();\r\n-\t\t\tself::admin_editor( $editor );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param LP_Admin_Editor $editor\r\n-\t\t *\r\n-\t\t * @since 3.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic static function admin_editor( &$editor ) {\r\n-\t\t\t$result = $editor->dispatch();\r\n-\r\n-\t\t\tif ( is_wp_error( $result ) ) {\r\n-\t\t\t\tlearn_press_send_json_error( $result->get_error_message() );\r\n-\t\t\t} elseif ( ! $result ) {\r\n-\t\t\t\tlearn_press_send_json_error();\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_send_json_success( $result );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate course, lesson, quiz, question.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @note tungnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function duplicator() {\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tlearn_press_send_json_error( __( 'Nonce is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_id   = intval( $_GET['id'] ?? 0 );\r\n-\t\t\t$post_type = learn_press_get_post_type( $post_id );\r\n-\r\n-\t\t\tif ( ! $post_id ) {\r\n-\t\t\t\tlearn_press_send_json_error( __( 'Oops! ID not found', 'learnpress' ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$can_duplicate = apply_filters( 'learn-press\u002Fcan-duplicate-course', true, $post_id, $post_type );\r\n-\t\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t\t\t$post_author = get_post_field( 'post_author', $post_id );\r\n-\t\t\t\t\tif ( get_current_user_id() != $post_author ) {\r\n-\t\t\t\t\t\t$can_duplicate = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $can_duplicate ) {\r\n-\t\t\t\t\tlearn_press_send_json_error( __( 'You cannot duplicate this item.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$new_item_id    = '';\r\n-\t\t\t\t$duplicate_args = apply_filters( 'learn-press\u002Fduplicate-post-args', array( 'post_status' => 'publish' ) );\r\n-\r\n-\t\t\t\tswitch ( $post_type ) {\r\n-\t\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t\t$curd        = new LP_Course_CURD();\r\n-\t\t\t\t\t\t$new_item_id = $curd->duplicate(\r\n-\t\t\t\t\t\t\t$post_id,\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'exclude_meta' => array(\r\n-\t\t\t\t\t\t\t\t\t'order-pending',\r\n-\t\t\t\t\t\t\t\t\t'order-processing',\r\n-\t\t\t\t\t\t\t\t\t'order-completed',\r\n-\t\t\t\t\t\t\t\t\t'order-cancelled',\r\n-\t\t\t\t\t\t\t\t\t'order-failed',\r\n-\t\t\t\t\t\t\t\t\t'count_enrolled_users',\r\n-\t\t\t\t\t\t\t\t\t'_lp_sample_data',\r\n-\t\t\t\t\t\t\t\t\t'_lp_retake_count',\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t\t\t$curd        = new LP_Lesson_CURD();\r\n-\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t\t$curd        = new LP_Quiz_CURD();\r\n-\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t\t\t$curd        = new LP_Question_CURD();\r\n-\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( is_wp_error( $new_item_id ) ) {\r\n-\t\t\t\t\tlearn_press_send_json_error( __( 'Duplicate post failed. Please try again', 'learnpress' ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlearn_press_send_json_success( admin_url( 'post.php?post=' . $new_item_id . '&action=edit' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update ordering of payments when user changing.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @note tungnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function update_payment_order() {\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$payment_order = learn_press_get_request( 'order' );\r\n-\t\t\tupdate_option( 'learn_press_payment_order', $payment_order );\r\n-\r\n-\t\t\tdie( 'Order of Payment Gateway is updated success' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Enable type payment\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @note tungnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function update_payment_status() {\r\n-\t\t\t$payment_id = LP_Request::get_param( 'id' );\r\n-\t\t\t$status     = LP_Request::get_param( 'status' );\r\n-\t\t\t$payment    = LP_Gateways::instance()->get_gateway( $payment_id );\r\n-\r\n-\t\t\tif ( ! $payment ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response[ $payment->id ] = $payment->enable( $status == 'yes' );\r\n-\r\n-\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t\t$lp_settings_cache->clean_lp_settings();\r\n-\r\n-\t\t\tlearn_press_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * nable email on LP Settings\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @note tungnnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function update_email_status() {\r\n-\t\t\t$email_id = LP_Request::get_string( 'id' );\r\n-\t\t\t$status   = LP_Request::get_string( 'status' );\r\n-\t\t\t$response = array();\r\n-\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $email_id ) {\r\n-\r\n-\t\t\t\t$email = LP_Emails::get_email( $email_id );\r\n-\t\t\t\tif ( ! $email ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response[ $email->id ] = $email->enable( $status == 'yes' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$emails = LP_Emails::instance()->emails;\r\n-\t\t\t\tforeach ( $emails as $email ) {\r\n-\t\t\t\t\t$response[ $email->id ] = $email->enable( $status == 'yes' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t\t$lp_settings_cache->clean_lp_settings();\r\n-\r\n-\t\t\tlearn_press_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Search items by requesting params.\r\n-\t\t *\u002F\r\n-\t\tpublic static function modal_search_items() {\r\n-\t\t\t$term       = LP_Request::get_param( 'term' );\r\n-\t\t\t$type       = LP_Request::get_param( 'type' );\r\n-\t\t\t$context    = LP_Request::get_param( 'context' );\r\n-\t\t\t$context_id = LP_Request::get_param( 'context_id' );\r\n-\t\t\t$paged      = LP_Request::get_param( 'paged' );\r\n-\t\t\t$exclude    = LP_Request::get_param( 'exclude' );\r\n-\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security\r\n-\t\t\t\t$roles_accept = apply_filters( 'lp\u002Fbackend\u002Froles\u002Fcan-search-items', [ ADMIN_ROLE ] );\r\n-\r\n-\t\t\t\t$flag = false;\r\n-\t\t\t\tforeach ( $roles_accept as $role ) {\r\n-\t\t\t\t\tif ( current_user_can( $role ) ) {\r\n-\t\t\t\t\t\t$flag = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $flag ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$search = new LP_Modal_Search_Items( compact( 'term', 'type', 'context', 'context_id', 'paged', 'exclude' ) );\r\n-\r\n-\t\t\tlearn_press_send_json(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'html'  => $search->get_html_items(),\r\n-\t\t\t\t\t'nav'   => $search->get_pagination(),\r\n-\t\t\t\t\t'items' => $search->get_items(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Search items by requesting params.\r\n-\t\t *\r\n-\t\t * @note tungnx checked has use\r\n-\t\t * @deprecated 4.2.6.9.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function modal_search_users() {\r\n-\t\t\t$term         = LP_Request::get_param( 'term' );\r\n-\t\t\t$type         = LP_Request::get_param( 'type' );\r\n-\t\t\t$context      = LP_Request::get_param( 'context' );\r\n-\t\t\t$context_id   = LP_Request::get_param( 'context_id' );\r\n-\t\t\t$paged        = LP_Request::get_param( 'paged' );\r\n-\t\t\t$multiple     = LP_Request::get_param( 'multiple' ) == 'yes';\r\n-\t\t\t$text_format  = LP_Request::get_param( 'text_format' );\r\n-\t\t\t$exclude      = LP_Request::get_param( 'exclude' );\r\n-\t\t\t$roles_accept = apply_filters(\r\n-\t\t\t\t'lp\u002Fbackend\u002Froles\u002Fcan-search-users',\r\n-\t\t\t\t[ ADMIN_ROLE ]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$flag = false;\r\n-\t\t\tforeach ( $roles_accept as $role ) {\r\n-\t\t\t\tif ( current_user_can( $role ) ) {\r\n-\t\t\t\t\t$flag = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $flag ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$search = new LP_Modal_Search_Users( compact( 'term', 'type', 'context', 'context_id', 'paged', 'multiple', 'text_format', 'exclude' ) );\r\n-\r\n-\t\t\tlearn_press_send_json(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'html'  => $search->get_html_items(),\r\n-\t\t\t\t\t'nav'   => $search->get_pagination(),\r\n-\t\t\t\t\t'users' => $search->get_items(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Search course category.\r\n-\t\t *\u002F\r\n-\t\tpublic static function search_course_category() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$sql   = 'SELECT `t`.`term_id` as `id`, '\r\n-\t\t\t\t. ' `t`.`name` `text` '\r\n-\t\t\t\t. \" FROM {$wpdb->terms} t \"\r\n-\t\t\t\t. \"\t\tINNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' \"\r\n-\t\t\t\t. ' WHERE `t`.`name` LIKE %s';\r\n-\t\t\t$s     = '%' . filter_input( INPUT_GET, 'q' ) . '%';\r\n-\t\t\t$query = $wpdb->prepare( $sql, $s );\r\n-\t\t\t$items = $wpdb->get_results( $query );\r\n-\t\t\t$data  = array( 'items' => $items );\r\n-\t\t\techo json_encode( $data );\r\n-\t\t\texit();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove an item from lp order\r\n-\t\t *\r\n-\t\t * @note tungnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function remove_items_from_order() {\r\n-\t\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\t\t\u002F\u002F ensure that user has permission\r\n-\t\t\tif ( ! current_user_can( 'edit_lp_orders' ) ) {\r\n-\t\t\t\tdie( __( 'Access denied', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F verify nonce\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tdie( __( 'Nonce check failed', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F validate order\r\n-\t\t\t$order_id = LP_Request::get_param( 'order_id', 0, 'int' );\r\n-\t\t\tif ( learn_press_get_post_type( $order_id ) != 'lp_order' ) {\r\n-\t\t\t\tdie( __( 'Invalid order', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F validate item\r\n-\t\t\t$item_ids_str = LP_Request::get_param( 'items', '' );\r\n-\t\t\tif ( empty( $item_ids_str ) ) {\r\n-\t\t\t\tdie( __( 'Invalid item', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_ids = array_map( 'absint', explode( ',', $item_ids_str ) );\r\n-\t\t\t$order    = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\tforeach ( $item_ids as $item_id ) {\r\n-\t\t\t\t$order->remove_item( $item_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order_data                  = learn_press_update_order_items( $order_id );\r\n-\t\t\t$currency_symbol             = learn_press_get_currency_symbol( $order_data['currency'] );\r\n-\t\t\t$order_data['subtotal_html'] = learn_press_format_price( $order_data['subtotal'], $currency_symbol );\r\n-\t\t\t$order_data['total_html']    = learn_press_format_price( $order_data['total'], $currency_symbol );\r\n-\t\t\t$order_items                 = $order->get_items();\r\n-\t\t\t$html = '';\r\n-\t\t\tif ( $order_items ) {\r\n-\t\t\t\tforeach ( $order_items as $item ) {\r\n-\t\t\t\t\tob_start();\r\n-\t\t\t\t\tinclude learn_press_get_admin_view( 'meta-boxes\u002Forder\u002Forder-item.php' );\r\n-\t\t\t\t\t$html .= ob_get_clean();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->data->item_html  = $html;\r\n-\t\t\t$response->data->order_data = $order_data;\r\n-\r\n-\t\t\twp_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add courses to order\r\n-\t\t *\r\n-\t\t * @note tungnx checked has use\r\n-\t\t *\u002F\r\n-\t\tpublic static function add_items_to_order() {\r\n-\t\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\t\t$roles_accept = apply_filters( 'lp\u002Fbackend\u002Froles\u002Fcan-add-items', [ ADMIN_ROLE ] );\r\n-\r\n-\t\t\t$flag = false;\r\n-\t\t\tforeach ( $roles_accept as $role ) {\r\n-\t\t\t\tif ( current_user_can( $role ) ) {\r\n-\t\t\t\t\t$flag = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $flag ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F ensure that user has permission\r\n-\t\t\tif ( ! current_user_can( 'edit_lp_orders' ) ) {\r\n-\t\t\t\tdie( __( 'Permission denied', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F validate order\r\n-\t\t\t$order_id = LP_Request::get_param( 'order_id', 0 );\r\n-\t\t\tif ( ! is_numeric( $order_id ) || learn_press_get_post_type( $order_id ) != 'lp_order' ) {\r\n-\t\t\t\tdie( __( 'Invalid order', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F validate item\r\n-\t\t\t$item_ids_str = LP_Request::get_param( 'items', '' );\r\n-\t\t\tif ( empty( $item_ids_str ) ) {\r\n-\t\t\t\tdie( __( 'Invalid item', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_ids   = array_map( 'absint', explode( ',', $item_ids_str ) );\r\n-\t\t\t$order      = learn_press_get_order( $order_id );\r\n-\t\t\t$order_item = $order->add_items( $item_ids );\r\n-\t\t\tif ( $order_item ) {\r\n-\t\t\t\t$html                        = '';\r\n-\t\t\t\t$order_items                 = $order->get_items();\r\n-\t\t\t\t$order_data                  = learn_press_update_order_items( $order_id );\r\n-\t\t\t\t$currency_symbol             = learn_press_get_currency_symbol( $order_data['currency'] );\r\n-\t\t\t\t$order_data['subtotal_html'] = learn_press_format_price( $order_data['subtotal'], $currency_symbol );\r\n-\t\t\t\t$order_data['total_html']    = learn_press_format_price( $order_data['total'], $currency_symbol );\r\n-\r\n-\t\t\t\tif ( $order_items ) {\r\n-\t\t\t\t\tforeach ( $order_items as $item ) {\r\n-\t\t\t\t\t\tif ( ! in_array( $item['id'], $order_item ) ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tob_start();\r\n-\t\t\t\t\t\tTemplate::instance()->get_admin_template( 'meta-boxes\u002Forder\u002Forder-item.php', compact( 'item', 'order' ) );\r\n-\t\t\t\t\t\t$html .= ob_get_clean();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response->status           = 'success';\r\n-\t\t\t\t$response->data->item_html  = $html;\r\n-\t\t\t\t$response->data->order_data = $order_data;\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*public static function load_chart() {\r\n-\t\t\tif ( ! class_exists( 'LP_Submenu_Statistics' ) ) {\r\n-\t\t\t\t$statistic = include_once LP_PLUGIN_PATH . '\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php';\r\n-\t\t\t} else {\r\n-\t\t\t\t$statistic = new LP_Submenu_Statistics();\r\n-\t\t\t}\r\n-\t\t\t$statistic->load_chart();\r\n-\t\t}*\u002F\r\n-\r\n-\t\tpublic static function json_search_customer_name( $query ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$term = LP_Helper::sanitize_params_submitted( $_REQUEST['term'] );\r\n-\t\t\tif ( method_exists( $wpdb, 'esc_like' ) ) {\r\n-\t\t\t\t$term = $wpdb->esc_like( $term );\r\n-\t\t\t} else {\r\n-\t\t\t\t$term = $wpdb->esc_like( $term );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query->query_from  .= \" INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) \";\r\n-\t\t\t$query->query_where .= $wpdb->prepare( ' OR user_name.meta_value LIKE %s ', '%' . $term . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * create new page on LP Settings\r\n-\t\t *\r\n-\t\t * @note tungnnx checked use\r\n-\t\t *\u002F\r\n-\t\tpublic static function create_page() {\r\n-\t\t\t$response = array(\r\n-\t\t\t\t'code'    => 0,\r\n-\t\t\t\t'message' => '',\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check valid\r\n-\t\t\t *\r\n-\t\t\t * 1. Capability - user can edit pages (add\\edit\\delete)\r\n-\t\t\t * 2. Check nonce return true\r\n-\t\t\t * 3. param post page_name not empty\r\n-\t\t\t *\r\n-\t\t\t * @since  3.2.6.8\r\n-\t\t\t * @author tungnx\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! current_user_can( 'edit_pages' ) || empty( $_POST['page_name'] ) ) {\r\n-\t\t\t\t$response['message'] = 'Request invalid';\r\n-\t\t\t\tlearn_press_send_json( $response );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check nonce\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\t$response['message'] = 'Request invalid';\r\n-\t\t\t\tlearn_press_send_json( $response );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$page_name  = LP_Helper::sanitize_params_submitted( $_POST['page_name'] );\r\n-\t\t\t$field_name = LP_Request::get_param( 'field_name' );\r\n-\r\n-\t\t\tif ( $page_name ) {\r\n-\t\t\t\t$data_create_page = array(\r\n-\t\t\t\t\t'post_title' => $page_name,\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$page_id = LP_Helper::create_page( $data_create_page, $field_name );\r\n-\r\n-\t\t\t\tif ( $page_id ) {\r\n-\t\t\t\t\t$response['code']    = 1;\r\n-\t\t\t\t\t$response['message'] = 'create page success';\r\n-\t\t\t\t\t$response['page']    = get_post( $page_id );\r\n-\t\t\t\t\t$html                = learn_press_pages_dropdown( '', '', array( 'echo' => false ) );\r\n-\t\t\t\t\tpreg_match_all( '!value=\\\"([0-9]+)\\\"!', $html, $matches );\r\n-\t\t\t\t\t$response['positions'] = $matches[1];\r\n-\t\t\t\t\t$response['html']      = '\u003Ca href=\"' . get_edit_post_link( $page_id ) . '\" target=\"_blank\">' . __( 'Edit Page', 'learnpress' ) . '\u003C\u002Fa>&nbsp;';\r\n-\t\t\t\t\t$response['html']      .= '\u003Ca href=\"' . get_permalink( $page_id ) . '\" target=\"_blank\">' . __( 'View Page', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$response['error'] = __( 'Error! Page creation failed. Please try again.', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$response['error'] = __( 'Empty page name!', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t\tlearn_press_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get edit|view link of a page\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_page_permalink() {\r\n-\t\t\t$page_id = (int) $_REQUEST['page_id'] ?? 0;\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $page_id ); ?>\"\r\n-\t\t\t   target=\"_blank\">\u003C?php _e( 'Edit Page', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\u003Ca href=\"\u003C?php echo get_permalink( $page_id ); ?>\"\r\n-\t\t\t   target=\"_blank\">\u003C?php _e( 'View Page', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tdie();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get date from, to for static chart\r\n-\t\t *\r\n-\t\t * @deprecated 4.2.6.9.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function custom_stats() {\r\n-\t\t\t$from      = LP_Helper::sanitize_params_submitted( $_REQUEST['from'] ?? 0 );\r\n-\t\t\t$to        = LP_Helper::sanitize_params_submitted( $_REQUEST['to'] ?? 0 );\r\n-\t\t\t$date_diff = strtotime( $to ) - strtotime( $from );\r\n-\t\t\tif ( $date_diff \u003C= 0 || $from == 0 || $to == 0 ) {\r\n-\t\t\t\tdie();\r\n-\t\t\t}\r\n-\t\t\tlearn_press_process_chart( learn_press_get_chart_students( $to, 'days', floor( $date_diff \u002F ( 60 * 60 * 24 ) ) + 1 ) );\r\n-\t\t\tdie();\r\n-\t\t}*\u002F\r\n-\t}\r\n-\r\n-\tadd_action( 'init', array( 'LP_Admin_Ajax', 'init' ) );\r\n-}\r\n-\r\n-new LP_Admin_Ajax();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Admin_Ajax\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Admin_Ajax' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Admin_Ajax\n+\t *\u002F\n+\tclass LP_Admin_Ajax {\n+\t\tpublic function __construct() {\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add action ajax\n+\t\t *\u002F\n+\t\tpublic static function init() {\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$ajax_events = array(\n+\t\t\t\t'create_page'            => false, \u002F\u002F Use create new page on Settings\n+\t\t\t\t\u002F\u002F'load_chart'             => false,\n+\t\t\t\t'search_course_category' => false,\n+\t\t\t\t\u002F\u002F'custom_stats'           => false,\n+\t\t\t\t'get_page_permalink'     => false,\n+\t\t\t);\n+\n+\t\t\tforeach ( $ajax_events as $ajax_event => $nopriv ) {\n+\t\t\t\tadd_action( 'wp_ajax_learnpress_' . $ajax_event, array( __CLASS__, $ajax_event ) );\n+\n+\t\t\t\t\u002F\u002F enable for non-logged in users\n+\t\t\t\tif ( $nopriv ) {\n+\t\t\t\t\tadd_action( 'wp_ajax_nopriv_learnpress_' . $ajax_event, array( __CLASS__, $ajax_event ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fajax\u002Fadmin-load', __CLASS__ );\n+\n+\t\t\t$ajax_events = array(\n+\t\t\t\t'search_items' => 'modal_search_items',\n+\t\t\t\t'update-payment-order',\n+\t\t\t\t\u002F\u002F Update ordering of payments when user changing.\n+\t\t\t\t'update-payment-status',\n+\t\t\t\t\u002F\u002F Enable type payment\n+\n+\t\t\t\t\u002F\u002F admin editor\n+\t\t\t\t'admin_course_editor',\n+\t\t\t\t'admin_quiz_editor',\n+\t\t\t\t'admin_question_editor',\n+\t\t\t\t'duplicator',\n+\t\t\t\t\u002F\u002F Duplicate course, lesson, quiz, question.\n+\t\t\t\t'modal_search_items',\n+\t\t\t\t\u002F\u002F Used to search courses on LP Order\n+\t\t\t\t\u002F\u002F'modal_search_users',\n+\t\t\t\t\u002F\u002F Used to search users on LP Order\n+\t\t\t\t'add_items_to_order',\n+\t\t\t\t\u002F\u002F Used to add courses on LP Order\n+\t\t\t\t'remove_items_from_order',\n+\t\t\t\t\u002F\u002F Used to remove items from LP Order\n+\t\t\t\t'update_email_status',\n+\t\t\t\t\u002F\u002F Use for enable email on LP Settings\n+\t\t\t\t'search-authors',\n+\t\t\t\t\u002F\u002F Used to search username on input some page (list courses, lp orders, quizzes, questions... on the Backend\n+\t\t\t\t\u002F\u002F'skip-notice-install',\n+\t\t\t);\n+\n+\t\t\tforeach ( $ajax_events as $action => $callback ) {\n+\t\t\t\tif ( is_numeric( $action ) ) {\n+\t\t\t\t\t$action = $callback;\n+\t\t\t\t}\n+\n+\t\t\t\t$actions = LP_Request::parse_action( $action );\n+\t\t\t\t$method  = $actions['action'];\n+\n+\t\t\t\tif ( ! is_callable( $callback ) ) {\n+\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\n+\t\t\t\t\t$callback = array( __CLASS__, $method );\n+\t\t\t\t}\n+\n+\t\t\t\tLP_Request::register_ajax( $action, $callback );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Search user on some pages on the Backend\n+\t\t *\u002F\n+\t\tpublic static function search_authors() {\n+\t\t\t$args  = array(\n+\t\t\t\t'orderby'        => 'name',\n+\t\t\t\t'order'          => 'ASC',\n+\t\t\t\t'search'         => sprintf( '*%s*', esc_attr( LP_Request::get_string( 'term' ) ) ),\n+\t\t\t\t'search_columns' => array( 'user_login', 'user_email' ),\n+\t\t\t);\n+\t\t\t$q     = new WP_User_Query( $args );\n+\t\t\t$users = array();\n+\n+\t\t\t$results = $q->get_results();\n+\n+\t\t\tif ( $results ) {\n+\t\t\t\tforeach ( $results as $result ) {\n+\t\t\t\t\t$users[] = array(\n+\t\t\t\t\t\t'id'   => $result->ID,\n+\t\t\t\t\t\t'text' => learn_press_get_profile_display_name( $result->ID ),\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\techo json_encode(\n+\t\t\t\tarray(\n+\t\t\t\t\t'results' => $users,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tdie();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle ajax admin course editor.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function admin_course_editor() {\n+\t\t\t$editor = LP_Admin_Editor::get_editor_course();\n+\t\t\tself::admin_editor( $editor );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle ajax admin question editor.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function admin_question_editor() {\n+\t\t\t$editor = LP_Admin_Editor::get_editor_question();\n+\t\t\tself::admin_editor( $editor );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle ajax admin quiz editor.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function admin_quiz_editor() {\n+\t\t\t$editor = LP_Admin_Editor::get_editor_quiz();\n+\t\t\tself::admin_editor( $editor );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param LP_Admin_Editor $editor\n+\t\t *\n+\t\t * @since 3.0.2\n+\t\t *\u002F\n+\t\tpublic static function admin_editor( &$editor ) {\n+\t\t\t$result = $editor->dispatch();\n+\n+\t\t\tif ( is_wp_error( $result ) ) {\n+\t\t\t\tlearn_press_send_json_error( $result->get_error_message() );\n+\t\t\t} elseif ( ! $result ) {\n+\t\t\t\tlearn_press_send_json_error();\n+\t\t\t}\n+\n+\t\t\tlearn_press_send_json_success( $result );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate course, lesson, quiz, question.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @note tungnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function duplicator() {\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tlearn_press_send_json_error( __( 'Nonce is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$post_id   = intval( $_GET['id'] ?? 0 );\n+\t\t\t$post_type = learn_press_get_post_type( $post_id );\n+\n+\t\t\tif ( ! $post_id ) {\n+\t\t\t\tlearn_press_send_json_error( __( 'Oops! ID not found', 'learnpress' ) );\n+\t\t\t} else {\n+\t\t\t\t$can_duplicate = apply_filters( 'learn-press\u002Fcan-duplicate-course', true, $post_id, $post_type );\n+\t\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t\t\t$post_author = get_post_field( 'post_author', $post_id );\n+\t\t\t\t\tif ( get_current_user_id() != $post_author ) {\n+\t\t\t\t\t\t$can_duplicate = false;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $can_duplicate ) {\n+\t\t\t\t\tlearn_press_send_json_error( __( 'You cannot duplicate this item.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$new_item_id    = '';\n+\t\t\t\t$duplicate_args = apply_filters( 'learn-press\u002Fduplicate-post-args', array( 'post_status' => 'publish' ) );\n+\n+\t\t\t\tswitch ( $post_type ) {\n+\t\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t\t$curd        = new LP_Course_CURD();\n+\t\t\t\t\t\t$new_item_id = $curd->duplicate(\n+\t\t\t\t\t\t\t$post_id,\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'exclude_meta' => array(\n+\t\t\t\t\t\t\t\t\t'order-pending',\n+\t\t\t\t\t\t\t\t\t'order-processing',\n+\t\t\t\t\t\t\t\t\t'order-completed',\n+\t\t\t\t\t\t\t\t\t'order-cancelled',\n+\t\t\t\t\t\t\t\t\t'order-failed',\n+\t\t\t\t\t\t\t\t\t'count_enrolled_users',\n+\t\t\t\t\t\t\t\t\t'_lp_sample_data',\n+\t\t\t\t\t\t\t\t\t'_lp_retake_count',\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t\t\t$curd        = new LP_Lesson_CURD();\n+\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t\t$curd        = new LP_Quiz_CURD();\n+\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t\t\t$curd        = new LP_Question_CURD();\n+\t\t\t\t\t\t$new_item_id = $curd->duplicate( $post_id, $duplicate_args );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( is_wp_error( $new_item_id ) ) {\n+\t\t\t\t\tlearn_press_send_json_error( __( 'Duplicate post failed. Please try again', 'learnpress' ) );\n+\t\t\t\t} else {\n+\t\t\t\t\tlearn_press_send_json_success( admin_url( 'post.php?post=' . $new_item_id . '&action=edit' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update ordering of payments when user changing.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t * @note tungnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function update_payment_order() {\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$payment_order = learn_press_get_request( 'order' );\n+\t\t\tupdate_option( 'learn_press_payment_order', $payment_order );\n+\n+\t\t\tdie( 'Order of Payment Gateway is updated success' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Enable type payment\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t * @note tungnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function update_payment_status() {\n+\t\t\t$payment_id = LP_Request::get_param( 'id' );\n+\t\t\t$status     = LP_Request::get_param( 'status' );\n+\t\t\t$payment    = LP_Gateways::instance()->get_gateway( $payment_id );\n+\n+\t\t\tif ( ! $payment ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$response[ $payment->id ] = $payment->enable( $status == 'yes' );\n+\n+\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t\t$lp_settings_cache->clean_lp_settings();\n+\n+\t\t\tlearn_press_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * nable email on LP Settings\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @note tungnnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function update_email_status() {\n+\t\t\t$email_id = LP_Request::get_string( 'id' );\n+\t\t\t$status   = LP_Request::get_string( 'status' );\n+\t\t\t$response = array();\n+\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security.\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\tif ( $email_id ) {\n+\n+\t\t\t\t$email = LP_Emails::get_email( $email_id );\n+\t\t\t\tif ( ! $email ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$response[ $email->id ] = $email->enable( $status == 'yes' );\n+\t\t\t} else {\n+\t\t\t\t$emails = LP_Emails::instance()->emails;\n+\t\t\t\tforeach ( $emails as $email ) {\n+\t\t\t\t\t$response[ $email->id ] = $email->enable( $status == 'yes' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t\t$lp_settings_cache->clean_lp_settings();\n+\n+\t\t\tlearn_press_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Search items by requesting params.\n+\t\t *\u002F\n+\t\tpublic static function modal_search_items() {\n+\t\t\t$term       = LP_Request::get_param( 'term' );\n+\t\t\t$type       = LP_Request::get_param( 'type' );\n+\t\t\t$context    = LP_Request::get_param( 'context' );\n+\t\t\t$context_id = LP_Request::get_param( 'context_id' );\n+\t\t\t$paged      = LP_Request::get_param( 'paged' );\n+\t\t\t$exclude    = LP_Request::get_param( 'exclude' );\n+\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) { \u002F\u002F Fix security\n+\t\t\t\t$roles_accept = apply_filters( 'lp\u002Fbackend\u002Froles\u002Fcan-search-items', [ ADMIN_ROLE ] );\n+\n+\t\t\t\t$flag = false;\n+\t\t\t\tforeach ( $roles_accept as $role ) {\n+\t\t\t\t\tif ( current_user_can( $role ) ) {\n+\t\t\t\t\t\t$flag = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $flag ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$search = new LP_Modal_Search_Items( compact( 'term', 'type', 'context', 'context_id', 'paged', 'exclude' ) );\n+\n+\t\t\tlearn_press_send_json(\n+\t\t\t\tarray(\n+\t\t\t\t\t'html'  => $search->get_html_items(),\n+\t\t\t\t\t'nav'   => $search->get_pagination(),\n+\t\t\t\t\t'items' => $search->get_items(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Search items by requesting params.\n+\t\t *\n+\t\t * @note tungnx checked has use\n+\t\t * @deprecated 4.2.6.9.3\n+\t\t *\u002F\n+\t\t\u002F*public static function modal_search_users() {\n+\t\t\t$term         = LP_Request::get_param( 'term' );\n+\t\t\t$type         = LP_Request::get_param( 'type' );\n+\t\t\t$context      = LP_Request::get_param( 'context' );\n+\t\t\t$context_id   = LP_Request::get_param( 'context_id' );\n+\t\t\t$paged        = LP_Request::get_param( 'paged' );\n+\t\t\t$multiple     = LP_Request::get_param( 'multiple' ) == 'yes';\n+\t\t\t$text_format  = LP_Request::get_param( 'text_format' );\n+\t\t\t$exclude      = LP_Request::get_param( 'exclude' );\n+\t\t\t$roles_accept = apply_filters(\n+\t\t\t\t'lp\u002Fbackend\u002Froles\u002Fcan-search-users',\n+\t\t\t\t[ ADMIN_ROLE ]\n+\t\t\t);\n+\n+\t\t\t$flag = false;\n+\t\t\tforeach ( $roles_accept as $role ) {\n+\t\t\t\tif ( current_user_can( $role ) ) {\n+\t\t\t\t\t$flag = true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! $flag ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$search = new LP_Modal_Search_Users( compact( 'term', 'type', 'context', 'context_id', 'paged', 'multiple', 'text_format', 'exclude' ) );\n+\n+\t\t\tlearn_press_send_json(\n+\t\t\t\tarray(\n+\t\t\t\t\t'html'  => $search->get_html_items(),\n+\t\t\t\t\t'nav'   => $search->get_pagination(),\n+\t\t\t\t\t'users' => $search->get_items(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Search course category.\n+\t\t *\u002F\n+\t\tpublic static function search_course_category() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$sql   = 'SELECT `t`.`term_id` as `id`, '\n+\t\t\t\t. ' `t`.`name` `text` '\n+\t\t\t\t. \" FROM {$wpdb->terms} t \"\n+\t\t\t\t. \"\t\tINNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id AND taxonomy='course_category' \"\n+\t\t\t\t. ' WHERE `t`.`name` LIKE %s';\n+\t\t\t$s     = '%' . filter_input( INPUT_GET, 'q' ) . '%';\n+\t\t\t$query = $wpdb->prepare( $sql, $s );\n+\t\t\t$items = $wpdb->get_results( $query );\n+\t\t\t$data  = array( 'items' => $items );\n+\t\t\techo json_encode( $data );\n+\t\t\texit();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove an item from lp order\n+\t\t *\n+\t\t * @note tungnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function remove_items_from_order() {\n+\t\t\t$response = new LP_REST_Response();\n+\n+\t\t\t\u002F\u002F ensure that user has permission\n+\t\t\tif ( ! current_user_can( 'edit_lp_orders' ) ) {\n+\t\t\t\tdie( __( 'Access denied', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F verify nonce\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tdie( __( 'Nonce check failed', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F validate order\n+\t\t\t$order_id = LP_Request::get_param( 'order_id', 0, 'int' );\n+\t\t\tif ( learn_press_get_post_type( $order_id ) != 'lp_order' ) {\n+\t\t\t\tdie( __( 'Invalid order', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F validate item\n+\t\t\t$item_ids_str = LP_Request::get_param( 'items', '' );\n+\t\t\tif ( empty( $item_ids_str ) ) {\n+\t\t\t\tdie( __( 'Invalid item', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$item_ids = array_map( 'absint', explode( ',', $item_ids_str ) );\n+\t\t\t$order    = learn_press_get_order( $order_id );\n+\n+\t\t\tforeach ( $item_ids as $item_id ) {\n+\t\t\t\t$order->remove_item( $item_id );\n+\t\t\t}\n+\n+\t\t\t$order_data                  = learn_press_update_order_items( $order_id );\n+\t\t\t$currency_symbol             = learn_press_get_currency_symbol( $order_data['currency'] );\n+\t\t\t$order_data['subtotal_html'] = learn_press_format_price( $order_data['subtotal'], $currency_symbol );\n+\t\t\t$order_data['total_html']    = learn_press_format_price( $order_data['total'], $currency_symbol );\n+\t\t\t$order_items                 = $order->get_items();\n+\t\t\t$html = '';\n+\t\t\tif ( $order_items ) {\n+\t\t\t\tforeach ( $order_items as $item ) {\n+\t\t\t\t\tob_start();\n+\t\t\t\t\tinclude learn_press_get_admin_view( 'meta-boxes\u002Forder\u002Forder-item.php' );\n+\t\t\t\t\t$html .= ob_get_clean();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->data->item_html  = $html;\n+\t\t\t$response->data->order_data = $order_data;\n+\n+\t\t\twp_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add courses to order\n+\t\t *\n+\t\t * @note tungnx checked has use\n+\t\t *\u002F\n+\t\tpublic static function add_items_to_order() {\n+\t\t\t$response = new LP_REST_Response();\n+\n+\t\t\t$roles_accept = apply_filters( 'lp\u002Fbackend\u002Froles\u002Fcan-add-items', [ ADMIN_ROLE ] );\n+\n+\t\t\t$flag = false;\n+\t\t\tforeach ( $roles_accept as $role ) {\n+\t\t\t\tif ( current_user_can( $role ) ) {\n+\t\t\t\t\t$flag = true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! $flag ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tdie( 'Nonce is invalid!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F ensure that user has permission\n+\t\t\tif ( ! current_user_can( 'edit_lp_orders' ) ) {\n+\t\t\t\tdie( __( 'Permission denied', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F validate order\n+\t\t\t$order_id = LP_Request::get_param( 'order_id', 0 );\n+\t\t\tif ( ! is_numeric( $order_id ) || learn_press_get_post_type( $order_id ) != 'lp_order' ) {\n+\t\t\t\tdie( __( 'Invalid order', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F validate item\n+\t\t\t$item_ids_str = LP_Request::get_param( 'items', '' );\n+\t\t\tif ( empty( $item_ids_str ) ) {\n+\t\t\t\tdie( __( 'Invalid item', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$item_ids   = array_map( 'absint', explode( ',', $item_ids_str ) );\n+\t\t\t$order      = learn_press_get_order( $order_id );\n+\t\t\t$order_item = $order->add_items( $item_ids );\n+\t\t\tif ( $order_item ) {\n+\t\t\t\t$html                        = '';\n+\t\t\t\t$order_items                 = $order->get_items();\n+\t\t\t\t$order_data                  = learn_press_update_order_items( $order_id );\n+\t\t\t\t$currency_symbol             = learn_press_get_currency_symbol( $order_data['currency'] );\n+\t\t\t\t$order_data['subtotal_html'] = learn_press_format_price( $order_data['subtotal'], $currency_symbol );\n+\t\t\t\t$order_data['total_html']    = learn_press_format_price( $order_data['total'], $currency_symbol );\n+\n+\t\t\t\tif ( $order_items ) {\n+\t\t\t\t\tforeach ( $order_items as $item ) {\n+\t\t\t\t\t\tif ( ! in_array( $item['id'], $order_item ) ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tob_start();\n+\t\t\t\t\t\tTemplate::instance()->get_admin_template( 'meta-boxes\u002Forder\u002Forder-item.php', compact( 'item', 'order' ) );\n+\t\t\t\t\t\t$html .= ob_get_clean();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$response->status           = 'success';\n+\t\t\t\t$response->data->item_html  = $html;\n+\t\t\t\t$response->data->order_data = $order_data;\n+\t\t\t}\n+\n+\t\t\twp_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F*public static function load_chart() {\n+\t\t\tif ( ! class_exists( 'LP_Submenu_Statistics' ) ) {\n+\t\t\t\t$statistic = include_once LP_PLUGIN_PATH . '\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php';\n+\t\t\t} else {\n+\t\t\t\t$statistic = new LP_Submenu_Statistics();\n+\t\t\t}\n+\t\t\t$statistic->load_chart();\n+\t\t}*\u002F\n+\n+\t\tpublic static function json_search_customer_name( $query ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$term = LP_Helper::sanitize_params_submitted( $_REQUEST['term'] );\n+\t\t\tif ( method_exists( $wpdb, 'esc_like' ) ) {\n+\t\t\t\t$term = $wpdb->esc_like( $term );\n+\t\t\t} else {\n+\t\t\t\t$term = $wpdb->esc_like( $term );\n+\t\t\t}\n+\n+\t\t\t$query->query_from  .= \" INNER JOIN {$wpdb->usermeta} AS user_name ON {$wpdb->users}.ID = user_name.user_id AND ( user_name.meta_key = 'first_name' OR user_name.meta_key = 'last_name' ) \";\n+\t\t\t$query->query_where .= $wpdb->prepare( ' OR user_name.meta_value LIKE %s ', '%' . $term . '%' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * create new page on LP Settings\n+\t\t *\n+\t\t * @note tungnnx checked use\n+\t\t *\u002F\n+\t\tpublic static function create_page() {\n+\t\t\t$response = array(\n+\t\t\t\t'code'    => 0,\n+\t\t\t\t'message' => '',\n+\t\t\t);\n+\n+\t\t\t\u002F**\n+\t\t\t * Check valid\n+\t\t\t *\n+\t\t\t * 1. Capability - user can edit pages (add\\edit\\delete)\n+\t\t\t * 2. Check nonce return true\n+\t\t\t * 3. param post page_name not empty\n+\t\t\t *\n+\t\t\t * @since  3.2.6.8\n+\t\t\t * @author tungnx\n+\t\t\t *\u002F\n+\t\t\tif ( ! current_user_can( 'edit_pages' ) || empty( $_POST['page_name'] ) ) {\n+\t\t\t\t$response['message'] = 'Request invalid';\n+\t\t\t\tlearn_press_send_json( $response );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check nonce\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\t$response['message'] = 'Request invalid';\n+\t\t\t\tlearn_press_send_json( $response );\n+\t\t\t}\n+\n+\t\t\t$page_name  = LP_Helper::sanitize_params_submitted( $_POST['page_name'] );\n+\t\t\t$field_name = LP_Request::get_param( 'field_name' );\n+\n+\t\t\tif ( $page_name ) {\n+\t\t\t\t$data_create_page = array(\n+\t\t\t\t\t'post_title' => $page_name,\n+\t\t\t\t);\n+\n+\t\t\t\t$page_id = LP_Helper::create_page( $data_create_page, $field_name );\n+\n+\t\t\t\tif ( $page_id ) {\n+\t\t\t\t\t$response['code']    = 1;\n+\t\t\t\t\t$response['message'] = 'create page success';\n+\t\t\t\t\t$response['page']    = get_post( $page_id );\n+\t\t\t\t\t$html                = learn_press_pages_dropdown( '', '', array( 'echo' => false ) );\n+\t\t\t\t\tpreg_match_all( '!value=\\\"([0-9]+)\\\"!', $html, $matches );\n+\t\t\t\t\t$response['positions'] = $matches[1];\n+\t\t\t\t\t$response['html']      = '\u003Ca href=\"' . get_edit_post_link( $page_id ) . '\" target=\"_blank\">' . __( 'Edit Page', 'learnpress' ) . '\u003C\u002Fa>&nbsp;';\n+\t\t\t\t\t$response['html']      .= '\u003Ca href=\"' . get_permalink( $page_id ) . '\" target=\"_blank\">' . __( 'View Page', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\t\t\t} else {\n+\t\t\t\t\t$response['error'] = __( 'Error! Page creation failed. Please try again.', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$response['error'] = __( 'Empty page name!', 'learnpress' );\n+\t\t\t}\n+\t\t\tlearn_press_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get edit|view link of a page\n+\t\t *\u002F\n+\t\tpublic static function get_page_permalink() {\n+\t\t\t$page_id = (int) $_REQUEST['page_id'] ?? 0;\n+\t\t\t?>\n+\n+\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $page_id ); ?>\"\n+\t\t\t   target=\"_blank\">\u003C?php _e( 'Edit Page', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\u003Ca href=\"\u003C?php echo get_permalink( $page_id ); ?>\"\n+\t\t\t   target=\"_blank\">\u003C?php _e( 'View Page', 'learnpress' ); ?>\u003C\u002Fa>\n+\n+\t\t\t\u003C?php\n+\t\t\tdie();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get date from, to for static chart\n+\t\t *\n+\t\t * @deprecated 4.2.6.9.3\n+\t\t *\u002F\n+\t\t\u002F*public static function custom_stats() {\n+\t\t\t$from      = LP_Helper::sanitize_params_submitted( $_REQUEST['from'] ?? 0 );\n+\t\t\t$to        = LP_Helper::sanitize_params_submitted( $_REQUEST['to'] ?? 0 );\n+\t\t\t$date_diff = strtotime( $to ) - strtotime( $from );\n+\t\t\tif ( $date_diff \u003C= 0 || $from == 0 || $to == 0 ) {\n+\t\t\t\tdie();\n+\t\t\t}\n+\t\t\tlearn_press_process_chart( learn_press_get_chart_students( $to, 'days', floor( $date_diff \u002F ( 60 * 60 * 24 ) ) + 1 ) );\n+\t\t\tdie();\n+\t\t}*\u002F\n+\t}\n+\n+\tadd_action( 'init', array( 'LP_Admin_Ajax', 'init' ) );\n+}\n+\n+new LP_Admin_Ajax();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-assets.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-assets.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-assets.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-assets.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,675 +1,675 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Assets\r\n- *\r\n- * Manage admin assets\r\n- *\u002F\r\n-class LP_Admin_Assets extends LP_Abstract_Assets {\r\n-\tprotected static $_instance;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Admin_Assets constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'admin_footer', array( $this, 'add_elements_global' ) );\r\n-\t\tadd_action( 'admin_print_scripts', array( $this, 'load_scripts_styles_on_head' ), - 1 );\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add javascript to head\r\n-\t * Add style to head\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.5.6\r\n-\t *\u002F\r\n-\tpublic function load_scripts_styles_on_head() {\r\n-\t\tLP_Helper::print_inline_script_tag( 'lpDataAdmin', $this->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\r\n-\t\tLP_Helper::print_inline_script_tag( 'lpData', $this->localize_data_global(), [ 'id' => 'lpData' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Localize data for all page backend.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.5.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function localize_data_global(): array {\r\n-\t\t$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\r\n-\r\n-\t\tob_start();\r\n-\t\tTemplate::instance()->get_admin_template( 'search-author-field.php' );\r\n-\t\t$html_search_author_field = ob_get_clean();\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Flocalize-data-global',\r\n-\t\t\t[\r\n-\t\t\t\t'site_url'                 => site_url(),\r\n-\t\t\t\t'user_id'                  => get_current_user_id(),\r\n-\t\t\t\t'is_admin'                 => current_user_can( ADMIN_ROLE ),\r\n-\t\t\t\t'theme'                    => get_stylesheet(),\r\n-\t\t\t\t'lp_version'               => LP()->version,\r\n-\t\t\t\t'lp_rest_url'              => get_rest_url(),\r\n-\t\t\t\t'lp_rest_load_ajax'        => get_rest_url( null, 'lp\u002Fv1\u002Fload_content_via_ajax\u002F' ), \u002F\u002F @deprecated 4.3.0\r\n-\t\t\t\t'lpAjaxUrl'                => LP_Settings::url_handle_lp_ajax(),\r\n-\t\t\t\t'nonce'                    => wp_create_nonce( 'wp_rest' ),\r\n-\t\t\t\t'courses_url'              => learn_press_get_page_link( 'courses' ),\r\n-\t\t\t\t'urlParams'                => lp_archive_skeleton_get_args(),\r\n-\t\t\t\t'i18n'                     => [\r\n-\t\t\t\t\t'select_page'      => esc_html__( 'Select page', 'learnpress' ),\r\n-\t\t\t\t\t'yes'              => esc_html__( 'Yes' ),\r\n-\t\t\t\t\t'cancel'           => esc_html__( 'Cancel' ),\r\n-\t\t\t\t\t'generate_with_ai' => esc_html__( 'Generate with AI', 'learnpress' ),\r\n-\t\t\t\t\t'confirm_close_ai' => esc_html__( 'Are you sure you want to close? Generate data will stop.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'current_screen'           => $screen ? $screen->id : '',\r\n-\t\t\t\t'show_search_author_field' => empty( $html_search_author_field ) ? 0 : $html_search_author_field,\r\n-\t\t\t\t'toast'                    => [\r\n-\t\t\t\t\t'gravity'     => 'bottom',\r\n-\t\t\t\t\t'position'    => 'center',\r\n-\t\t\t\t\t'duration'    => 3000,\r\n-\t\t\t\t\t'close'       => 1,\r\n-\t\t\t\t\t'stopOnFocus' => 1,\r\n-\t\t\t\t\t'classPrefix' => 'lp-toast',\r\n-\t\t\t\t],\r\n-\t\t\t\t'single_instructor_id'     => learn_press_get_page_id( 'single_instructor' ),\r\n-\t\t\t\t'lpAi'                     => [\r\n-\t\t\t\t\t'config'     => Config::instance()->get( 'open-ai-modal', 'settings' ),\r\n-\t\t\t\t\t'modelImage' => LP_Settings::get_option( 'open_ai_image_model_type', 'dall-e-3' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'enable_open_ai'           => LP_Settings::get_option( 'enable_open_ai', 'no' ) === 'yes'\r\n-\t\t\t\t\t&& ! empty( LP_Settings::get_option( 'open_ai_secret_key', '' ) ),\r\n-\t\t\t]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get localize script\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function _get_script_data(): array {\r\n-\t\t$current_screen = get_current_screen();\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'learn-press-global'              => learn_press_global_script_params(),\r\n-\t\t\t'learn-press-meta-box-order'      => apply_filters(\r\n-\t\t\t\t'learn-press\u002Fmeta-box-order\u002Fscript-data',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'i18n_error' => esc_html__( 'Oops! Error.', 'learnpress' ),\r\n-\t\t\t\t\t'i18n_guest' => esc_html__( 'Guest', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'learn-press-update'              => apply_filters(\r\n-\t\t\t\t'learn-press\u002Fupgrade\u002Fscript-data',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'i18n_confirm' => esc_html__(\r\n-\t\t\t\t\t\t'Before taking this action, we strongly recommend you backup your site first before proceeding. If you encounter any problems, please do not hesitate to contact our support team. Are you sure to proceed with the update protocol?',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'lp-admin'                        => apply_filters(\r\n-\t\t\t\t'learn-press\u002Fadmin\u002Fscript-data',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ajax'                 => admin_url( 'admin-ajax.php' ),\r\n-\t\t\t\t\t'questionTypes'        => learn_press_question_types(),\r\n-\t\t\t\t\t'supportAnswerOptions' => learn_press_get_question_support_answer_options(),\r\n-\t\t\t\t\t'screen'               => $current_screen,\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'learn-press-admin-course-editor' => $this->get_course_data_for_editor_vue(),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default scripts in admin.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected function _get_scripts(): array {\r\n-\t\t$lp_admin_js = new LP_Asset_Key(\r\n-\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin' . self::$_min_assets . '.js' ),\r\n-\t\t\t[ 'wp-i18n', 'lp-utils', 'select2' ],\r\n-\t\t\t[],\r\n-\t\t\t0,\r\n-\t\t\t0,\r\n-\t\t\t'',\r\n-\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t);\r\n-\t\t$lp_admin_js->exclude_screen(\r\n-\t\t\t[\r\n-\t\t\t\t'plugin-install',\r\n-\t\t\t\t'learnpress_page_learn-press-statistics',\r\n-\t\t\t\t'learnpress_page_learn-press-addons',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$scripts = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin-default-scripts',\r\n-\t\t\tarray(\r\n-\t\t\t\t'lp-load-ajax'        => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002FloadAJAX' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F\u002F need build if change source vue\r\n-\t\t\t\t'vue-libs'            => new LP_Asset_Key( $this->url( 'js\u002Fvendor\u002Fvue\u002Fvue_libs.js' ) ),\r\n-\t\t\t\t'select2'             => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fselect2.full.min.js' ) ),\r\n-\t\t\t\t'jquery-tipsy'        => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js' ) ),\r\n-\t\t\t\t'html2pdf'            => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js' ) ),\r\n-\t\t\t\t'lp-utils'            => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Futils' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'dropdown-pages'      => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fdropdown-pages' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-utils', 'select2' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*'jquery-ui-timepicker-addon'        => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js' ),\r\n-\t\t\t\t\tarray( 'jquery-ui-datepicker' )\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'lp-addons'           => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Faddons' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[ 'learnpress_page_learn-press-addons' ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F\u002F'advanced-list'                     => new LP_Asset_Key( $this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fadvanced-list' . self::$_min_assets . '.js' ) ),\r\n-\t\t\t\t'learn-press-global'  => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fglobal' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery', 'underscore', 'utils', 'jquery-ui-sortable' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin'            => $lp_admin_js,\r\n-\t\t\t\t'lp-admin-mcp-api-keys' => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax' ],\r\n-\t\t\t\t\t[ 'learnpress_page_learn-press-settings' ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin-learnpress' => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Flearnpress' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'learn-press-global',\r\n-\t\t\t\t\t\t'wp-color-picker',\r\n-\t\t\t\t\t\t'jquery-tipsy',\r\n-\t\t\t\t\t\t'dropdown-pages',\r\n-\t\t\t\t\t\t'wp-api-fetch',\r\n-\t\t\t\t\t\t\u002F\u002F'jquery-ui-timepicker-addon',\r\n-\t\t\t\t\t\t\u002F\u002F'select2'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\tLP_LESSON_CPT,\r\n-\t\t\t\t\t\tLP_QUIZ_CPT,\r\n-\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\t\u002F\u002FLP_ORDER_CPT,\r\n-\t\t\t\t\t\t'learnpress_page_learn-press-settings',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-duplicate-post'   => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Flp-duplicate-post' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'edit-' . LP_COURSE_CPT,\r\n-\t\t\t\t\t\t'edit-' . LP_LESSON_CPT,\r\n-\t\t\t\t\t\t'edit-' . LP_QUESTION_CPT,\r\n-\t\t\t\t\t\t'edit-' . LP_QUIZ_CPT,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*'learn-press-admin-course-editor'   => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fcourse' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'vue-libs', 'lp-utils' ),\r\n-\t\t\t\t\tarray( LP_COURSE_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'lp-admin-courses'    => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fadmin-courses' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax', 'wp-i18n' ],\r\n-\t\t\t\t\t[ 'edit-' . LP_COURSE_CPT ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-course'      => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-course' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax' ],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-quiz'        => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-quiz' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax' ],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-question'    => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-question' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax' ],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*'learn-press-admin-quiz-editor'     => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fquiz' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'vue-libs', 'lp-utils' ),\r\n-\t\t\t\t\tarray( LP_QUIZ_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'learn-press-admin-question-editor' => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fquestion' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'vue-libs', 'lodash', 'lp-utils' ),\r\n-\t\t\t\t\tarray( LP_QUESTION_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'learn-press-meta-box-order'        => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fpartial\u002Fmeta-box-order' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'vue-libs',\r\n-\t\t\t\t\t\t'advanced-list',\r\n-\t\t\t\t\t\t\u002F\u002F'lp-modal-search-courses',\r\n-\t\t\t\t\t\t\u002F\u002F'lp-modal-search-users',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( LP_ORDER_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'lp-admin-order'      => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-order' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'html2pdf' ),\r\n-\t\t\t\t\tarray( LP_ORDER_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin-orders'     => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-orders' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray( 'edit-' . LP_ORDER_CPT ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\r\n-\t\t\t\t\u002F*'learn-press-sync-data'             => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsync-data' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'lp-setup'                          => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery', 'dropdown-pages' ),\r\n-\t\t\t\t\tarray( 'lp-page-setup' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'learn-press-statistic'             => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fstatistic' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery', 'jquery-ui-datepicker', 'chart' ),\r\n-\t\t\t\t\tarray( 'learnpress_page_learn-press-statistics' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'lp-modal-search-courses'           => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fmodal-search-courses' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'vue-libs',\r\n-\t\t\t\t\t\t'jquery',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( LP_ORDER_CPT ),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'lp-modal-search-users'             => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fmodal-search-users' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery' ),\r\n-\t\t\t\t\tarray( LP_ORDER_CPT ),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'lp-tools-course-tab' => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Ftools' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'jquery',\r\n-\t\t\t\t\t\t'wp-element',\r\n-\t\t\t\t\t\t'wp-compose',\r\n-\t\t\t\t\t\t'wp-components',\r\n-\t\t\t\t\t\t'wp-data',\r\n-\t\t\t\t\t\t'wp-hooks',\r\n-\t\t\t\t\t\t'wp-api-fetch',\r\n-\t\t\t\t\t\t'lodash',\r\n-\t\t\t\t\t\t'vue-libs',\r\n-\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*'lp-dashboard'        => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fdashboard' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tarray( 'dashboard' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'lp-widgets-admin'    => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'wp-url',\r\n-\t\t\t\t\t\t'wp-api-fetch',\r\n-\t\t\t\t\t\t'lodash',\r\n-\t\t\t\t\t\t'select2',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( 'widgets', 'elementor' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin-notices'    => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fadmin-notices' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-material'         => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fcourse-material' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\tLP_LESSON_CPT,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-list-students-enrolled' => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Flist-students-enrolled' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'lp-load-ajax' ),\r\n-\t\t\t\t\tarray( 'learnpress_page_lp-enrolled-students' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin-tools'      => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-tools' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-admin-statistic'  => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-statistic' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'wp-api-fetch' ),\r\n-\t\t\t\t\tarray( 'learnpress_page_learn-press-statistics' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t\u002F*$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\r\n-\t\tif ( $screen && $screen->id === 'site-editor' ) {\r\n-\t\t\t$scripts['editor-check'] = new LP_Asset_Key(\r\n-\t\t\t\tself::url( 'js\u002Fdist\u002Fgutenberg\u002Feditor-check' . self::$_min_assets . '.js' ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'wp-data',\r\n-\t\t\t\t\t'wp-edit-post',\r\n-\t\t\t\t\t'wp-editor',\r\n-\t\t\t\t),\r\n-\t\t\t\t[],\r\n-\t\t\t\t0,\r\n-\t\t\t\t0,\r\n-\t\t\t\t'1.0.0',\r\n-\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t);\r\n-\t\t}*\u002F\r\n-\r\n-\t\treturn $scripts;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default styles in admin.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected function _get_styles(): array {\r\n-\t\t$is_rtl = is_rtl() ? '-rtl' : '';\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin-default-styles',\r\n-\t\t\tarray(\r\n-\t\t\t\t'select2'               => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fselect2.min.css' )\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*'font-awesome'          => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css' )\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t\u002F*'jquery-ui'             => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'jquery-ui-timepicker'  => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css' )\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\t'jquery-tipsy'          => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery.tipsy.css' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'learn-press-admin'     => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'css\u002Fadmin\u002Fadmin' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'wp-color-picker',\r\n-\t\t\t\t\t\t'wp-components',\r\n-\t\t\t\t\t\t\u002F\u002F'select2',\r\n-\t\t\t\t\t\t\u002F\u002F'jquery-ui',\r\n-\t\t\t\t\t\t\u002F\u002F'jquery-ui-timepicker',\r\n-\t\t\t\t\t\t\u002F\u002F'font-awesome',\r\n-\t\t\t\t\t\t'jquery-tipsy',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-curriculum'    => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'css\u002Fedit-curriculum' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-quiz'          => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'css\u002Fedit-quiz' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-edit-question'      => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'css\u002Fedit-question' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'learn-press-statistic' => new LP_Asset_Key(\r\n-\t\t\t\t\tLP_CSS_URL . 'admin\u002Fstatistic' . $is_rtl . self::$_min_assets . '.css',\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray( 'learners_page_learn-press-statistics' ),\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-tom-select'         => new LP_Asset_Key(\r\n-\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Ftom-select.min.css' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register and enqueue needed js and styles\r\n-\t *\u002F\r\n-\tpublic function load_scripts() {\r\n-\t\t$screen_id = LP_Admin::instance()->get_screen_id();\r\n-\r\n-\t\tif ( empty( $screen_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Fwp_enqueue_media(); \u002F\u002FTodo: tungnx need check why call for that using.\r\n-\t\t$this->handle_js( $screen_id );\r\n-\t\t$this->handle_style( $screen_id );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show overlay\r\n-\t *\u002F\r\n-\tpublic function add_elements_global() {\r\n-\t\techo '\u003Cdiv class=\"lp-overlay\">';\r\n-\t\tapply_filters( 'learnpress\u002Fadmin\u002Fmodal-dialog', learn_press_get_template( 'global\u002Flp-modal-overlay' ) );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\r\n-\t\tapply_filters( 'learnpress\u002Fadmin\u002Fsteps', learn_press_get_template( 'global\u002Flp-group-step' ) );\r\n-\r\n-\t\t\u002F\u002F Added notify message when action done.\r\n-\t\tTemplate::instance()->get_admin_template( 'global\u002Fnotify-action.php' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course data for Vue Editor Course use.\r\n-\t *\r\n-\t * @return array|mixed|null\r\n-\t *\u002F\r\n-\tpublic function get_course_data_for_editor_vue() {\r\n-\t\tglobal $post, $pagenow;\r\n-\r\n-\t\tif ( empty( $post ) || ( get_post_type() !== LP_COURSE_CPT ) || ! in_array(\r\n-\t\t\t$pagenow,\r\n-\t\t\tarray(\r\n-\t\t\t\t'post.php',\r\n-\t\t\t\t'post-new.php',\r\n-\t\t\t)\r\n-\t\t) ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$course = CourseModel::find( $post->ID, true );\r\n-\t\tif ( $course ) {\r\n-\t\t\t$course_section_items = $course->get_section_items();\r\n-\t\t} else { \u002F\u002F Code old if not found course on the table learnpress_courses.\r\n-\t\t\t$course               = learn_press_get_course( $post->ID );\r\n-\t\t\t$course_section_items = $course->get_curriculum_raw();\r\n-\t\t}\r\n-\t\t$hidden_sections = get_post_meta( $post->ID, '_admin_hidden_sections', true );\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin-localize-course-editor',\r\n-\t\t\tarray(\r\n-\t\t\t\t'root'        => array(\r\n-\t\t\t\t\t'course_id'          => $post->ID,\r\n-\t\t\t\t\t'auto_draft'         => get_post_status( $post->ID ) == 'auto-draft',\r\n-\t\t\t\t\t'ajax'               => admin_url( 'index.php' ),\r\n-\t\t\t\t\t'disable_curriculum' => false,\r\n-\t\t\t\t\t'action'             => 'admin_course_editor',\r\n-\t\t\t\t\t'nonce'              => wp_create_nonce( 'learnpress_update_curriculum' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'chooseItems' => array(\r\n-\t\t\t\t\t'types'      => learn_press_course_get_support_item_types(),\r\n-\t\t\t\t\t'open'       => false,\r\n-\t\t\t\t\t'addedItems' => array(),\r\n-\t\t\t\t\t'items'      => array(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'i18n'        => array(\r\n-\t\t\t\t\t'item'                   => __( 'item', 'learnpress' ),\r\n-\t\t\t\t\t'new_section_item'       => __( 'Create a new', 'learnpress' ),\r\n-\t\t\t\t\t'back'                   => __( 'Back', 'learnpress' ),\r\n-\t\t\t\t\t'selected_items'         => __( 'Selected items', 'learnpress' ),\r\n-\t\t\t\t\t'confirm_remove_item'    => __( 'Do you want to remove the \"{{ITEM_NAME}}\" item from the course?', 'learnpress' ),\r\n-\t\t\t\t\t'confirm_trash_item'     => __( 'Do you want to move the \"{{ITEM_NAME}}\" item to the trash?', 'learnpress' ),\r\n-\t\t\t\t\t'item_labels'            => array(\r\n-\t\t\t\t\t\t'singular' => __( 'Item', 'learnpress' ),\r\n-\t\t\t\t\t\t'plural'   => __( 'Items', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'notice_sale_price'      => __( 'The course sale price must be less than the regular price', 'learnpress' ),\r\n-\t\t\t\t\t'notice_price'           => __( 'The course price must be greater than the sale price', 'learnpress' ),\r\n-\t\t\t\t\t'notice_sale_start_date' => __( 'The sale start date must be before the sale end date', 'learnpress' ),\r\n-\t\t\t\t\t'notice_sale_end_date'   => __( 'The sale end date must be after the sale start date', 'learnpress' ),\r\n-\t\t\t\t\t'notice_invalid_date'    => __( 'Invalid date', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'sections'    => array(\r\n-\t\t\t\t\t'sections'        => $course_section_items,\r\n-\t\t\t\t\t'hidden_sections' => ! empty( $hidden_sections ) ? $hidden_sections : array(),\r\n-\t\t\t\t\t'urlEdit'         => admin_url( 'post.php?action=edit&post=' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! is_admin() ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! self::$_instance ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Shortcut function to get instance of LP_Admin_Assets\r\n- *\r\n- * @return LP_Admin_Assets|null\r\n- * Addon Certificate, Import\u002FExport is using.\r\n- *\u002F\r\n-function learn_press_admin_assets() {\r\n-\treturn LP_Admin_Assets::instance();\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+\n+\u002F**\n+ * Class LP_Admin_Assets\n+ *\n+ * Manage admin assets\n+ *\u002F\n+class LP_Admin_Assets extends LP_Abstract_Assets {\n+\tprotected static $_instance;\n+\n+\t\u002F**\n+\t * LP_Admin_Assets constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\tadd_action( 'admin_footer', array( $this, 'add_elements_global' ) );\n+\t\tadd_action( 'admin_print_scripts', array( $this, 'load_scripts_styles_on_head' ), - 1 );\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Add javascript to head\n+\t * Add style to head\n+\t *\n+\t * @return void\n+\t * @version 1.0.0\n+\t * @since 4.2.5.6\n+\t *\u002F\n+\tpublic function load_scripts_styles_on_head() {\n+\t\tLP_Helper::print_inline_script_tag( 'lpDataAdmin', $this->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\n+\t\tLP_Helper::print_inline_script_tag( 'lpData', $this->localize_data_global(), [ 'id' => 'lpData' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Localize data for all page backend.\n+\t *\n+\t * @return array\n+\t * @since 4.2.5.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function localize_data_global(): array {\n+\t\t$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\n+\n+\t\tob_start();\n+\t\tTemplate::instance()->get_admin_template( 'search-author-field.php' );\n+\t\t$html_search_author_field = ob_get_clean();\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Flocalize-data-global',\n+\t\t\t[\n+\t\t\t\t'site_url'                 => site_url(),\n+\t\t\t\t'user_id'                  => get_current_user_id(),\n+\t\t\t\t'is_admin'                 => current_user_can( ADMIN_ROLE ),\n+\t\t\t\t'theme'                    => get_stylesheet(),\n+\t\t\t\t'lp_version'               => LP()->version,\n+\t\t\t\t'lp_rest_url'              => get_rest_url(),\n+\t\t\t\t'lp_rest_load_ajax'        => get_rest_url( null, 'lp\u002Fv1\u002Fload_content_via_ajax\u002F' ), \u002F\u002F @deprecated 4.3.0\n+\t\t\t\t'lpAjaxUrl'                => LP_Settings::url_handle_lp_ajax(),\n+\t\t\t\t'nonce'                    => wp_create_nonce( 'wp_rest' ),\n+\t\t\t\t'courses_url'              => learn_press_get_page_link( 'courses' ),\n+\t\t\t\t'urlParams'                => lp_archive_skeleton_get_args(),\n+\t\t\t\t'i18n'                     => [\n+\t\t\t\t\t'select_page'      => esc_html__( 'Select page', 'learnpress' ),\n+\t\t\t\t\t'yes'              => esc_html__( 'Yes' ),\n+\t\t\t\t\t'cancel'           => esc_html__( 'Cancel' ),\n+\t\t\t\t\t'generate_with_ai' => esc_html__( 'Generate with AI', 'learnpress' ),\n+\t\t\t\t\t'confirm_close_ai' => esc_html__( 'Are you sure you want to close? Generate data will stop.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'current_screen'           => $screen ? $screen->id : '',\n+\t\t\t\t'show_search_author_field' => empty( $html_search_author_field ) ? 0 : $html_search_author_field,\n+\t\t\t\t'toast'                    => [\n+\t\t\t\t\t'gravity'     => 'bottom',\n+\t\t\t\t\t'position'    => 'center',\n+\t\t\t\t\t'duration'    => 3000,\n+\t\t\t\t\t'close'       => 1,\n+\t\t\t\t\t'stopOnFocus' => 1,\n+\t\t\t\t\t'classPrefix' => 'lp-toast',\n+\t\t\t\t],\n+\t\t\t\t'single_instructor_id'     => learn_press_get_page_id( 'single_instructor' ),\n+\t\t\t\t'lpAi'                     => [\n+\t\t\t\t\t'config'     => Config::instance()->get( 'open-ai-modal', 'settings' ),\n+\t\t\t\t\t'modelImage' => LP_Settings::get_option( 'open_ai_image_model_type', 'dall-e-3' ),\n+\t\t\t\t],\n+\t\t\t\t'enable_open_ai'           => LP_Settings::get_option( 'enable_open_ai', 'no' ) === 'yes'\n+\t\t\t\t\t&& ! empty( LP_Settings::get_option( 'open_ai_secret_key', '' ) ),\n+\t\t\t]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get localize script\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function _get_script_data(): array {\n+\t\t$current_screen = get_current_screen();\n+\n+\t\treturn array(\n+\t\t\t'learn-press-global'              => learn_press_global_script_params(),\n+\t\t\t'learn-press-meta-box-order'      => apply_filters(\n+\t\t\t\t'learn-press\u002Fmeta-box-order\u002Fscript-data',\n+\t\t\t\tarray(\n+\t\t\t\t\t'i18n_error' => esc_html__( 'Oops! Error.', 'learnpress' ),\n+\t\t\t\t\t'i18n_guest' => esc_html__( 'Guest', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'learn-press-update'              => apply_filters(\n+\t\t\t\t'learn-press\u002Fupgrade\u002Fscript-data',\n+\t\t\t\tarray(\n+\t\t\t\t\t'i18n_confirm' => esc_html__(\n+\t\t\t\t\t\t'Before taking this action, we strongly recommend you backup your site first before proceeding. If you encounter any problems, please do not hesitate to contact our support team. Are you sure to proceed with the update protocol?',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'lp-admin'                        => apply_filters(\n+\t\t\t\t'learn-press\u002Fadmin\u002Fscript-data',\n+\t\t\t\tarray(\n+\t\t\t\t\t'ajax'                 => admin_url( 'admin-ajax.php' ),\n+\t\t\t\t\t'questionTypes'        => learn_press_question_types(),\n+\t\t\t\t\t'supportAnswerOptions' => learn_press_get_question_support_answer_options(),\n+\t\t\t\t\t'screen'               => $current_screen,\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'learn-press-admin-course-editor' => $this->get_course_data_for_editor_vue(),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get default scripts in admin.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tprotected function _get_scripts(): array {\n+\t\t$lp_admin_js = new LP_Asset_Key(\n+\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin' . self::$_min_assets . '.js' ),\n+\t\t\t[ 'wp-i18n', 'lp-utils', 'select2' ],\n+\t\t\t[],\n+\t\t\t0,\n+\t\t\t0,\n+\t\t\t'',\n+\t\t\t[ 'strategy' => 'async' ]\n+\t\t);\n+\t\t$lp_admin_js->exclude_screen(\n+\t\t\t[\n+\t\t\t\t'plugin-install',\n+\t\t\t\t'learnpress_page_learn-press-statistics',\n+\t\t\t\t'learnpress_page_learn-press-addons',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$scripts = apply_filters(\n+\t\t\t'learn-press\u002Fadmin-default-scripts',\n+\t\t\tarray(\n+\t\t\t\t'lp-load-ajax'        => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002FloadAJAX' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t\u002F\u002F need build if change source vue\n+\t\t\t\t'vue-libs'            => new LP_Asset_Key( $this->url( 'js\u002Fvendor\u002Fvue\u002Fvue_libs.js' ) ),\n+\t\t\t\t'select2'             => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fselect2.full.min.js' ) ),\n+\t\t\t\t'jquery-tipsy'        => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-tipsy.js' ) ),\n+\t\t\t\t'html2pdf'            => new LP_Asset_Key( $this->url( 'src\u002Fjs\u002Fvendor\u002Fhtml2pdf.bundle.min.js' ) ),\n+\t\t\t\t'lp-utils'            => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Futils' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'dropdown-pages'      => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fdropdown-pages' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-utils', 'select2' ]\n+\t\t\t\t),\n+\t\t\t\t\u002F*'jquery-ui-timepicker-addon'        => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fjs\u002Fvendor\u002Fjquery\u002Fjquery-ui-timepicker-addon.js' ),\n+\t\t\t\t\tarray( 'jquery-ui-datepicker' )\n+\t\t\t\t),*\u002F\n+\t\t\t\t'lp-addons'           => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Faddons' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[ 'learnpress_page_learn-press-addons' ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t\u002F\u002F'advanced-list'                     => new LP_Asset_Key( $this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fadvanced-list' . self::$_min_assets . '.js' ) ),\n+\t\t\t\t'learn-press-global'  => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fglobal' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery', 'underscore', 'utils', 'jquery-ui-sortable' )\n+\t\t\t\t),\n+\t\t\t\t'lp-admin'            => $lp_admin_js,\n+\t\t\t\t'lp-admin-mcp-api-keys' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fjs\u002Fadmin\u002Fmcp-api-keys.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax' ],\n+\t\t\t\t\t[ 'learnpress_page_learn-press-settings' ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-admin-learnpress' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Flearnpress' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'learn-press-global',\n+\t\t\t\t\t\t'wp-color-picker',\n+\t\t\t\t\t\t'jquery-tipsy',\n+\t\t\t\t\t\t'dropdown-pages',\n+\t\t\t\t\t\t'wp-api-fetch',\n+\t\t\t\t\t\t\u002F\u002F'jquery-ui-timepicker-addon',\n+\t\t\t\t\t\t\u002F\u002F'select2'\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\tLP_LESSON_CPT,\n+\t\t\t\t\t\tLP_QUIZ_CPT,\n+\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\t\u002F\u002FLP_ORDER_CPT,\n+\t\t\t\t\t\t'learnpress_page_learn-press-settings',\n+\t\t\t\t\t),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-duplicate-post'   => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Flp-duplicate-post' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'edit-' . LP_COURSE_CPT,\n+\t\t\t\t\t\t'edit-' . LP_LESSON_CPT,\n+\t\t\t\t\t\t'edit-' . LP_QUESTION_CPT,\n+\t\t\t\t\t\t'edit-' . LP_QUIZ_CPT,\n+\t\t\t\t\t),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t\u002F*'learn-press-admin-course-editor'   => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fcourse' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'vue-libs', 'lp-utils' ),\n+\t\t\t\t\tarray( LP_COURSE_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0\n+\t\t\t\t),*\u002F\n+\t\t\t\t'lp-admin-courses'    => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fadmin-courses' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax', 'wp-i18n' ],\n+\t\t\t\t\t[ 'edit-' . LP_COURSE_CPT ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-course'      => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-course' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax' ],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-quiz'        => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-quiz' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax' ],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-question'    => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Fedit-question' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax' ],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t\u002F*'learn-press-admin-quiz-editor'     => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fquiz' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'vue-libs', 'lp-utils' ),\n+\t\t\t\t\tarray( LP_QUIZ_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'learn-press-admin-question-editor' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Feditor\u002Fquestion' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'vue-libs', 'lodash', 'lp-utils' ),\n+\t\t\t\t\tarray( LP_QUESTION_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'learn-press-meta-box-order'        => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fpartial\u002Fmeta-box-order' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'vue-libs',\n+\t\t\t\t\t\t'advanced-list',\n+\t\t\t\t\t\t\u002F\u002F'lp-modal-search-courses',\n+\t\t\t\t\t\t\u002F\u002F'lp-modal-search-users',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( LP_ORDER_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t'lp-admin-order'      => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-order' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'html2pdf' ),\n+\t\t\t\t\tarray( LP_ORDER_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-admin-orders'     => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-orders' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray( 'edit-' . LP_ORDER_CPT ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\n+\t\t\t\t\u002F*'learn-press-sync-data'             => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsync-data' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'lp-setup'                          => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery', 'dropdown-pages' ),\n+\t\t\t\t\tarray( 'lp-page-setup' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'learn-press-statistic'             => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fstatistic' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery', 'jquery-ui-datepicker', 'chart' ),\n+\t\t\t\t\tarray( 'learnpress_page_learn-press-statistics' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'lp-modal-search-courses'           => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fmodal-search-courses' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'vue-libs',\n+\t\t\t\t\t\t'jquery',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( LP_ORDER_CPT ),\n+\t\t\t\t\t1,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'lp-modal-search-users'             => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( self::$_folder_source . 'js\u002Fadmin\u002Fshare\u002Fmodal-search-users' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery' ),\n+\t\t\t\t\tarray( LP_ORDER_CPT ),\n+\t\t\t\t\t1,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t'lp-tools-course-tab' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Ftools' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'jquery',\n+\t\t\t\t\t\t'wp-element',\n+\t\t\t\t\t\t'wp-compose',\n+\t\t\t\t\t\t'wp-components',\n+\t\t\t\t\t\t'wp-data',\n+\t\t\t\t\t\t'wp-hooks',\n+\t\t\t\t\t\t'wp-api-fetch',\n+\t\t\t\t\t\t'lodash',\n+\t\t\t\t\t\t'vue-libs',\n+\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t\u002F*'lp-dashboard'        => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fdashboard' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tarray( 'dashboard' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),*\u002F\n+\t\t\t\t'lp-widgets-admin'    => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'wp-url',\n+\t\t\t\t\t\t'wp-api-fetch',\n+\t\t\t\t\t\t'lodash',\n+\t\t\t\t\t\t'select2',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( 'widgets', 'elementor' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-admin-notices'    => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Fadmin\u002Fadmin-notices' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-material'         => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fcourse-material' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\tLP_LESSON_CPT,\n+\t\t\t\t\t),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-list-students-enrolled' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'dist\u002Fjs\u002Fadmin\u002Flist-students-enrolled' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'lp-load-ajax' ),\n+\t\t\t\t\tarray( 'learnpress_page_lp-enrolled-students' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-admin-tools'      => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-tools' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tarray( 'learnpress_page_learn-press-tools' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-admin-statistic'  => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'js\u002Fdist\u002Fadmin\u002Fadmin-statistic' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'wp-api-fetch' ),\n+\t\t\t\t\tarray( 'learnpress_page_learn-press-statistics' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t\u002F*$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\n+\t\tif ( $screen && $screen->id === 'site-editor' ) {\n+\t\t\t$scripts['editor-check'] = new LP_Asset_Key(\n+\t\t\t\tself::url( 'js\u002Fdist\u002Fgutenberg\u002Feditor-check' . self::$_min_assets . '.js' ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'wp-data',\n+\t\t\t\t\t'wp-edit-post',\n+\t\t\t\t\t'wp-editor',\n+\t\t\t\t),\n+\t\t\t\t[],\n+\t\t\t\t0,\n+\t\t\t\t0,\n+\t\t\t\t'1.0.0',\n+\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t);\n+\t\t}*\u002F\n+\n+\t\treturn $scripts;\n+\t}\n+\n+\t\u002F**\n+\t * Get default styles in admin.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tprotected function _get_styles(): array {\n+\t\t$is_rtl = is_rtl() ? '-rtl' : '';\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fadmin-default-styles',\n+\t\t\tarray(\n+\t\t\t\t'select2'               => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fselect2.min.css' )\n+\t\t\t\t),\n+\t\t\t\t\u002F*'font-awesome'          => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Ffont-awesome-5.min.css' )\n+\t\t\t\t),*\u002F\n+\t\t\t\t\u002F*'jquery-ui'             => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery-ui\u002Fjquery-ui.min.css' )\n+\t\t\t\t),\n+\t\t\t\t'jquery-ui-timepicker'  => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery-ui-timepicker-addon.css' )\n+\t\t\t\t),*\u002F\n+\t\t\t\t'jquery-tipsy'          => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Fjquery.tipsy.css' )\n+\t\t\t\t),\n+\t\t\t\t'learn-press-admin'     => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fadmin\u002Fadmin' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'wp-color-picker',\n+\t\t\t\t\t\t'wp-components',\n+\t\t\t\t\t\t\u002F\u002F'select2',\n+\t\t\t\t\t\t\u002F\u002F'jquery-ui',\n+\t\t\t\t\t\t\u002F\u002F'jquery-ui-timepicker',\n+\t\t\t\t\t\t\u002F\u002F'font-awesome',\n+\t\t\t\t\t\t'jquery-tipsy',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-curriculum'    => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-curriculum' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-quiz'          => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-quiz' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-question'      => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-question' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'learn-press-statistic' => new LP_Asset_Key(\n+\t\t\t\t\tLP_CSS_URL . 'admin\u002Fstatistic' . $is_rtl . self::$_min_assets . '.css',\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray( 'learners_page_learn-press-statistics' ),\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t\t'lp-tom-select'         => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'src\u002Fcss\u002Fvendor\u002Ftom-select.min.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Register and enqueue needed js and styles\n+\t *\u002F\n+\tpublic function load_scripts() {\n+\t\t$screen_id = LP_Admin::instance()->get_screen_id();\n+\n+\t\tif ( empty( $screen_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002Fwp_enqueue_media(); \u002F\u002FTodo: tungnx need check why call for that using.\n+\t\t$this->handle_js( $screen_id );\n+\t\t$this->handle_style( $screen_id );\n+\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts' );\n+\t}\n+\n+\t\u002F**\n+\t * Show overlay\n+\t *\u002F\n+\tpublic function add_elements_global() {\n+\t\techo '\u003Cdiv class=\"lp-overlay\">';\n+\t\tapply_filters( 'learnpress\u002Fadmin\u002Fmodal-dialog', learn_press_get_template( 'global\u002Flp-modal-overlay' ) );\n+\t\techo '\u003C\u002Fdiv>';\n+\n+\t\tapply_filters( 'learnpress\u002Fadmin\u002Fsteps', learn_press_get_template( 'global\u002Flp-group-step' ) );\n+\n+\t\t\u002F\u002F Added notify message when action done.\n+\t\tTemplate::instance()->get_admin_template( 'global\u002Fnotify-action.php' );\n+\t}\n+\n+\t\u002F**\n+\t * Get course data for Vue Editor Course use.\n+\t *\n+\t * @return array|mixed|null\n+\t *\u002F\n+\tpublic function get_course_data_for_editor_vue() {\n+\t\tglobal $post, $pagenow;\n+\n+\t\tif ( empty( $post ) || ( get_post_type() !== LP_COURSE_CPT ) || ! in_array(\n+\t\t\t$pagenow,\n+\t\t\tarray(\n+\t\t\t\t'post.php',\n+\t\t\t\t'post-new.php',\n+\t\t\t)\n+\t\t) ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$course = CourseModel::find( $post->ID, true );\n+\t\tif ( $course ) {\n+\t\t\t$course_section_items = $course->get_section_items();\n+\t\t} else { \u002F\u002F Code old if not found course on the table learnpress_courses.\n+\t\t\t$course               = learn_press_get_course( $post->ID );\n+\t\t\t$course_section_items = $course->get_curriculum_raw();\n+\t\t}\n+\t\t$hidden_sections = get_post_meta( $post->ID, '_admin_hidden_sections', true );\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fadmin-localize-course-editor',\n+\t\t\tarray(\n+\t\t\t\t'root'        => array(\n+\t\t\t\t\t'course_id'          => $post->ID,\n+\t\t\t\t\t'auto_draft'         => get_post_status( $post->ID ) == 'auto-draft',\n+\t\t\t\t\t'ajax'               => admin_url( 'index.php' ),\n+\t\t\t\t\t'disable_curriculum' => false,\n+\t\t\t\t\t'action'             => 'admin_course_editor',\n+\t\t\t\t\t'nonce'              => wp_create_nonce( 'learnpress_update_curriculum' ),\n+\t\t\t\t),\n+\t\t\t\t'chooseItems' => array(\n+\t\t\t\t\t'types'      => learn_press_course_get_support_item_types(),\n+\t\t\t\t\t'open'       => false,\n+\t\t\t\t\t'addedItems' => array(),\n+\t\t\t\t\t'items'      => array(),\n+\t\t\t\t),\n+\t\t\t\t'i18n'        => array(\n+\t\t\t\t\t'item'                   => __( 'item', 'learnpress' ),\n+\t\t\t\t\t'new_section_item'       => __( 'Create a new', 'learnpress' ),\n+\t\t\t\t\t'back'                   => __( 'Back', 'learnpress' ),\n+\t\t\t\t\t'selected_items'         => __( 'Selected items', 'learnpress' ),\n+\t\t\t\t\t'confirm_remove_item'    => __( 'Do you want to remove the \"{{ITEM_NAME}}\" item from the course?', 'learnpress' ),\n+\t\t\t\t\t'confirm_trash_item'     => __( 'Do you want to move the \"{{ITEM_NAME}}\" item to the trash?', 'learnpress' ),\n+\t\t\t\t\t'item_labels'            => array(\n+\t\t\t\t\t\t'singular' => __( 'Item', 'learnpress' ),\n+\t\t\t\t\t\t'plural'   => __( 'Items', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'notice_sale_price'      => __( 'The course sale price must be less than the regular price', 'learnpress' ),\n+\t\t\t\t\t'notice_price'           => __( 'The course price must be greater than the sale price', 'learnpress' ),\n+\t\t\t\t\t'notice_sale_start_date' => __( 'The sale start date must be before the sale end date', 'learnpress' ),\n+\t\t\t\t\t'notice_sale_end_date'   => __( 'The sale end date must be after the sale start date', 'learnpress' ),\n+\t\t\t\t\t'notice_invalid_date'    => __( 'Invalid date', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'sections'    => array(\n+\t\t\t\t\t'sections'        => $course_section_items,\n+\t\t\t\t\t'hidden_sections' => ! empty( $hidden_sections ) ? $hidden_sections : array(),\n+\t\t\t\t\t'urlEdit'         => admin_url( 'post.php?action=edit&post=' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( ! is_admin() ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\tif ( ! self::$_instance ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+\u002F**\n+ * Shortcut function to get instance of LP_Admin_Assets\n+ *\n+ * @return LP_Admin_Assets|null\n+ * Addon Certificate, Import\u002FExport is using.\n+ *\u002F\n+function learn_press_admin_assets() {\n+\treturn LP_Admin_Assets::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-dashboard.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-dashboard.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-dashboard.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-dashboard.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,183 +1,183 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-\r\n-if ( ! class_exists( 'LP_Admin_Dashboard' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Admin_Dashboard\r\n-\t *\r\n-\t * Displays widgets in admin.\r\n-\t *\u002F\r\n-\tclass LP_Admin_Dashboard {\r\n-\t\t\u002F**\r\n-\t\t * LP_Admin_Dashboard constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t\u002F\u002F Ignore heartbeat requests.\r\n-\t\t\tif ( isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tadd_action( 'wp_dashboard_setup', array( $this, 'register' ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function register() {\r\n-\t\t\t$screens = [\r\n-\t\t\t\t'learn_press_dashboard_order_statuses' => [\r\n-\t\t\t\t\t'label'    => esc_html__( 'LearnPress order status', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => [ $this, 'order_statuses' ],\r\n-\t\t\t\t],\r\n-\t\t\t\t'learn_press_dashboard_plugin_status'  => [\r\n-\t\t\t\t\t'label'    => esc_html__( 'LearnPress status', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => [ $this, 'plugin_status' ],\r\n-\t\t\t\t],\r\n-\t\t\t];\r\n-\r\n-\t\t\tforeach ( $screens as $id => $screen ) {\r\n-\t\t\t\twp_add_dashboard_widget(\r\n-\t\t\t\t\t$id,\r\n-\t\t\t\t\t$screen['label'],\r\n-\t\t\t\t\t$screen['callback']\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Order status widget\r\n-\t\t *\u002F\r\n-\t\tpublic function order_statuses() {\r\n-\t\t\t$args = [\r\n-\t\t\t\t'id_url' => 'order-statistic-dashboard',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @uses order_statistic\r\n-\t\t\t *\u002F\r\n-\t\t\t$callback = [\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'order_statistic',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get order statistic content\r\n-\t\t *\r\n-\t\t * @return stdClass\r\n-\t\t *\u002F\r\n-\t\tpublic static function order_statistic(): stdClass {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\twp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order_statuses = LP_Order::get_order_statuses();\r\n-\t\t\t$lp_order_icons = LP_Order::get_icons_status();\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\t$data = compact( 'order_statuses', 'lp_order_icons' );\r\n-\t\t\tTemplate::instance()->get_admin_template( 'dashboard\u002Fhtml-orders', $data );\r\n-\t\t\t$content          = new stdClass();\r\n-\t\t\t$content->content = sprintf(\r\n-\t\t\t\t'\u003Cul class=\"lp-order-statuses lp_append_data\">%s\u003C\u002Ful>',\r\n-\t\t\t\tob_get_clean()\r\n-\t\t\t);\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Plugin status widget\r\n-\t\t *\u002F\r\n-\t\tpublic function plugin_status() {\r\n-\t\t\t$args = [\r\n-\t\t\t\t'id_url' => 'plugin-status-dashboard',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @uses plugin_status_content\r\n-\t\t\t *\u002F\r\n-\t\t\t$callback = [\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'plugin_status_content',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t}\r\n-\r\n-\t\tpublic static function plugin_status_content() {\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\twp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\r\n-\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\r\n-\r\n-\t\t\t$api = plugins_api(\r\n-\t\t\t\t'plugin_information',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'slug'   => 'learnpress',\r\n-\t\t\t\t\t'fields' => array(\r\n-\t\t\t\t\t\t'active_installs'   => true,\r\n-\t\t\t\t\t\t'short_description' => true,\r\n-\t\t\t\t\t\t'description'       => true,\r\n-\t\t\t\t\t\t'ratings'           => true,\r\n-\t\t\t\t\t\t'downloaded'        => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrap'            => '\u003Cdiv class=\"lp-plugin-status-wrap\">',\r\n-\t\t\t\t'banner'          => sprintf(\r\n-\t\t\t\t\t'\u003Cimage class=\"lp-plugin-banner\" src=\"%s\" style=\"%s\" \u002F>',\r\n-\t\t\t\t\t$api->banners ? ( $api->banners['low'] ?? '' ) : '',\r\n-\t\t\t\t\t'max-width:100%;height:auto;'\r\n-\t\t\t\t),\r\n-\t\t\t\t'active_installs' => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-active-installs\">%s: \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Active Installations', 'learnpress' ),\r\n-\t\t\t\t\tnumber_format_i18n( $api->active_installs )\r\n-\t\t\t\t),\r\n-\t\t\t\t'downloaded'      => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-downloaded\">%s: \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Total Downloads', 'learnpress' ),\r\n-\t\t\t\t\tnumber_format_i18n( $api->downloaded )\r\n-\t\t\t\t),\r\n-\t\t\t\t'ratings'         => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-ratings\">%s \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Ratings 5 stars is:', 'learnpress' ),\r\n-\t\t\t\t\t$api->ratings[5] ?? '0'\r\n-\t\t\t\t),\r\n-\t\t\t\t'requires'        => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-requires\">%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Required WordPress version:', 'learnpress' ),\r\n-\t\t\t\t\t$api->requires ?? esc_html__( 'N\u002FA', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'requires_php'    => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-requires_php\">%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Required PHP version:', 'learnpress' ),\r\n-\t\t\t\t\t$api->requires_php ?? esc_html__( 'N\u002FA', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'tested'          => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-tested\">%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Tested with WordPress version:', 'learnpress' ),\r\n-\t\t\t\t\t$api->tested ?? esc_html__( 'N\u002FA', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'last_updated'    => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-last_updated\">%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Latest updated:', 'learnpress' ),\r\n-\t\t\t\t\t$api->last_updated ?? esc_html__( 'N\u002FA', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap-end'        => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content          = new stdClass();\r\n-\t\t\t$content->content = Template::combine_components( $section );\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-new LP_Admin_Dashboard();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+\n+if ( ! class_exists( 'LP_Admin_Dashboard' ) ) {\n+\t\u002F**\n+\t * Class LP_Admin_Dashboard\n+\t *\n+\t * Displays widgets in admin.\n+\t *\u002F\n+\tclass LP_Admin_Dashboard {\n+\t\t\u002F**\n+\t\t * LP_Admin_Dashboard constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t\u002F\u002F Ignore heartbeat requests.\n+\t\t\tif ( isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tadd_action( 'wp_dashboard_setup', array( $this, 'register' ) );\n+\t\t}\n+\n+\t\tpublic function register() {\n+\t\t\t$screens = [\n+\t\t\t\t'learn_press_dashboard_order_statuses' => [\n+\t\t\t\t\t'label'    => esc_html__( 'LearnPress order status', 'learnpress' ),\n+\t\t\t\t\t'callback' => [ $this, 'order_statuses' ],\n+\t\t\t\t],\n+\t\t\t\t'learn_press_dashboard_plugin_status'  => [\n+\t\t\t\t\t'label'    => esc_html__( 'LearnPress status', 'learnpress' ),\n+\t\t\t\t\t'callback' => [ $this, 'plugin_status' ],\n+\t\t\t\t],\n+\t\t\t];\n+\n+\t\t\tforeach ( $screens as $id => $screen ) {\n+\t\t\t\twp_add_dashboard_widget(\n+\t\t\t\t\t$id,\n+\t\t\t\t\t$screen['label'],\n+\t\t\t\t\t$screen['callback']\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Order status widget\n+\t\t *\u002F\n+\t\tpublic function order_statuses() {\n+\t\t\t$args = [\n+\t\t\t\t'id_url' => 'order-statistic-dashboard',\n+\t\t\t];\n+\n+\t\t\t\u002F**\n+\t\t\t * @uses order_statistic\n+\t\t\t *\u002F\n+\t\t\t$callback = [\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'order_statistic',\n+\t\t\t];\n+\n+\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get order statistic content\n+\t\t *\n+\t\t * @return stdClass\n+\t\t *\u002F\n+\t\tpublic static function order_statistic(): stdClass {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\twp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$order_statuses = LP_Order::get_order_statuses();\n+\t\t\t$lp_order_icons = LP_Order::get_icons_status();\n+\n+\t\t\tob_start();\n+\t\t\t$data = compact( 'order_statuses', 'lp_order_icons' );\n+\t\t\tTemplate::instance()->get_admin_template( 'dashboard\u002Fhtml-orders', $data );\n+\t\t\t$content          = new stdClass();\n+\t\t\t$content->content = sprintf(\n+\t\t\t\t'\u003Cul class=\"lp-order-statuses lp_append_data\">%s\u003C\u002Ful>',\n+\t\t\t\tob_get_clean()\n+\t\t\t);\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Plugin status widget\n+\t\t *\u002F\n+\t\tpublic function plugin_status() {\n+\t\t\t$args = [\n+\t\t\t\t'id_url' => 'plugin-status-dashboard',\n+\t\t\t];\n+\n+\t\t\t\u002F**\n+\t\t\t * @uses plugin_status_content\n+\t\t\t *\u002F\n+\t\t\t$callback = [\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'plugin_status_content',\n+\t\t\t];\n+\n+\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t}\n+\n+\t\tpublic static function plugin_status_content() {\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\twp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\n+\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\n+\n+\t\t\t$api = plugins_api(\n+\t\t\t\t'plugin_information',\n+\t\t\t\tarray(\n+\t\t\t\t\t'slug'   => 'learnpress',\n+\t\t\t\t\t'fields' => array(\n+\t\t\t\t\t\t'active_installs'   => true,\n+\t\t\t\t\t\t'short_description' => true,\n+\t\t\t\t\t\t'description'       => true,\n+\t\t\t\t\t\t'ratings'           => true,\n+\t\t\t\t\t\t'downloaded'        => true,\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$section = [\n+\t\t\t\t'wrap'            => '\u003Cdiv class=\"lp-plugin-status-wrap\">',\n+\t\t\t\t'banner'          => sprintf(\n+\t\t\t\t\t'\u003Cimage class=\"lp-plugin-banner\" src=\"%s\" style=\"%s\" \u002F>',\n+\t\t\t\t\t$api->banners ? ( $api->banners['low'] ?? '' ) : '',\n+\t\t\t\t\t'max-width:100%;height:auto;'\n+\t\t\t\t),\n+\t\t\t\t'active_installs' => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-active-installs\">%s: \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Active Installations', 'learnpress' ),\n+\t\t\t\t\tnumber_format_i18n( $api->active_installs )\n+\t\t\t\t),\n+\t\t\t\t'downloaded'      => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-downloaded\">%s: \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Total Downloads', 'learnpress' ),\n+\t\t\t\t\tnumber_format_i18n( $api->downloaded )\n+\t\t\t\t),\n+\t\t\t\t'ratings'         => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-ratings\">%s \u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Ratings 5 stars is:', 'learnpress' ),\n+\t\t\t\t\t$api->ratings[5] ?? '0'\n+\t\t\t\t),\n+\t\t\t\t'requires'        => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-requires\">%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Required WordPress version:', 'learnpress' ),\n+\t\t\t\t\t$api->requires ?? esc_html__( 'N\u002FA', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'requires_php'    => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-requires_php\">%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Required PHP version:', 'learnpress' ),\n+\t\t\t\t\t$api->requires_php ?? esc_html__( 'N\u002FA', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'tested'          => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-tested\">%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Tested with WordPress version:', 'learnpress' ),\n+\t\t\t\t\t$api->tested ?? esc_html__( 'N\u002FA', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'last_updated'    => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-plugin-last_updated\">%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Latest updated:', 'learnpress' ),\n+\t\t\t\t\t$api->last_updated ?? esc_html__( 'N\u002FA', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'wrap-end'        => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$content          = new stdClass();\n+\t\t\t$content->content = Template::combine_components( $section );\n+\t\t\treturn $content;\n+\t\t}\n+\t}\n+}\n+new LP_Admin_Dashboard();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,228 +1,228 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\MCP\\Auth\\ApiKeysRepository;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Admin controller for LearnPress MCP API keys UI and actions.\r\n- *\u002F\r\n-class LP_Admin_MCP_API_Keys {\r\n-\t\u002F**\r\n-\t * @var self|null\r\n-\t *\u002F\r\n-\tprotected static $instance;\r\n-\r\n-\t\u002F**\r\n-\t * @var ApiKeysRepository\r\n-\t *\u002F\r\n-\tprotected $repository;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $required_capability = 'manage_options';\r\n-\r\n-\t\u002F**\r\n-\t * Get singleton instance for MCP API keys admin controller.\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register admin hooks and required table dependency.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$this->repository = new ApiKeysRepository();\r\n-\r\n-\t\tadd_action( 'admin_init', array( $this, 'handle_admin_actions' ) );\r\n-\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'localize_admin_script' ) );\r\n-\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Localize MCP API key settings and i18n labels to admin JavaScript.\r\n-\t *\r\n-\t * Data is exposed under `window.lpMcpApiKeysSettings` and consumed by\r\n-\t * `lp-admin-mcp-api-keys` runtime script.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function localize_admin_script(): void {\r\n-\t\tif ( ! $this->is_mcp_adapter_active() || ! wp_script_is( 'lp-admin-mcp-api-keys', 'enqueued' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\twp_localize_script(\r\n-\t\t\t'lp-admin-mcp-api-keys',\r\n-\t\t\t'lpMcpApiKeysSettings',\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_mcp_keys_section' => $this->is_mcp_keys_settings_screen(),\r\n-\t\t\t\t'actions' => array(\r\n-\t\t\t\t\t'create' => 'mcp_create_api_key',\r\n-\t\t\t\t),\r\n-\t\t\t\t'i18n'     => array(\r\n-\t\t\t\t\t'processing'      => __( 'Processing...', 'learnpress' ),\r\n-\t\t\t\t\t'created'         => __( 'API key created.', 'learnpress' ),\r\n-\t\t\t\t\t'request_failed'  => __( 'Request failed. Please try again.', 'learnpress' ),\r\n-\t\t\t\t\t'confirm_revoke'  => __( 'Revoke this API key?', 'learnpress' ),\r\n-\t\t\t\t\t'copy_success'    => __( 'Copied.', 'learnpress' ),\r\n-\t\t\t\t\t'copy_fallback'   => __( 'Copy this value manually.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render MCP API key management screen inside LearnPress settings.\r\n-\t *\r\n-\t * Prepares list-table data and user options before loading the section template.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render_page(): void {\r\n-\t\tif ( ! current_user_can( $this->required_capability ) ) {\r\n-\t\t\twp_die( esc_html__( 'Sorry, you are not allowed to manage MCP API keys.', 'learnpress' ) );\r\n-\t\t}\r\n-\t\tif ( ! $this->is_mcp_adapter_active() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$table = new LP_Admin_MCP_API_Keys_Table_List( $this->repository );\r\n-\t\t$table->prepare_items();\r\n-\r\n-\t\t$users        = get_users(\r\n-\t\t\tarray(\r\n-\t\t\t\t'fields'  => array( 'ID', 'user_login', 'display_name' ),\r\n-\t\t\t\t'orderby' => 'display_name',\r\n-\t\t\t\t'order'   => 'ASC',\r\n-\t\t\t\t'number'  => 200,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$message_code = sanitize_key( $_GET['lp_mcp_notice'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$message      = $this->notice_from_code( $message_code );\r\n-\r\n-\t\trequire LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process row and bulk revoke actions submitted from the list table.\r\n-\t *\r\n-\t * Supported actions:\r\n-\t * - `lp_mcp_key_action = revoke`\r\n-\t * - `action\u002Faction2 = bulk-revoke`\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function handle_admin_actions(): void {\r\n-\t\tif ( ! $this->is_mcp_keys_settings_screen() || ! current_user_can( $this->required_capability ) || ! $this->is_mcp_adapter_active() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$action = sanitize_key( $_REQUEST['lp_mcp_key_action'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\tif ( 'revoke' === $action ) {\r\n-\t\t\t$key_id = absint( $_REQUEST['key_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tcheck_admin_referer( 'lp_mcp_revoke_key_' . $key_id );\r\n-\t\t\t$this->repository->revoke_key( $key_id );\r\n-\t\t\t$this->redirect_with_notice( 'revoked' );\r\n-\t\t}\r\n-\r\n-\t\t$bulk_action = '';\r\n-\t\tif ( isset( $_REQUEST['action'] ) && '-1' !== $_REQUEST['action'] ) { \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t\t$bulk_action = sanitize_key( wp_unslash( $_REQUEST['action'] ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t} elseif ( isset( $_REQUEST['action2'] ) && '-1' !== $_REQUEST['action2'] ) { \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t\t$bulk_action = sanitize_key( wp_unslash( $_REQUEST['action2'] ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t}\r\n-\r\n-\t\tif ( 'bulk-revoke' !== $bulk_action ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tcheck_admin_referer( 'lp_mcp_bulk_revoke_action', 'lp_mcp_bulk_revoke_nonce' );\r\n-\r\n-\t\t$key_ids = $_REQUEST['key_ids'] ?? array(); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$key_ids = is_array( $key_ids ) ? $key_ids : array();\r\n-\t\t$deleted = $this->repository->revoke_keys( $key_ids );\r\n-\r\n-\t\t$this->redirect_with_notice( $deleted > 0 ? 'bulk_revoked' : 'no_selection' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Redirect back to MCP keys section with notice code.\r\n-\t *\r\n-\t * @param string $notice_code Notice key used by `notice_from_code`.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function redirect_with_notice( string $notice_code ): void {\r\n-\t\t$url = add_query_arg(\r\n-\t\t\tarray(\r\n-\t\t\t\t'page'          => 'learn-press-settings',\r\n-\t\t\t\t'tab'           => 'mcp',\r\n-\t\t\t\t'lp_mcp_notice' => $notice_code,\r\n-\t\t\t),\r\n-\t\t\tadmin_url( 'admin.php' )\r\n-\t\t);\r\n-\r\n-\t\twp_safe_redirect( $url );\r\n-\t\texit;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert notice code to display payload.\r\n-\t *\r\n-\t * @param string $code Notice code from query string.\r\n-\t *\r\n-\t * @return array\u003Cstring, string>|null\r\n-\t *\u002F\r\n-\tprotected function notice_from_code( string $code ): ?array {\r\n-\t\t$map = array(\r\n-\t\t\t'revoked'      => array( 'type' => 'success', 'message' => __( 'API key revoked.', 'learnpress' ) ),\r\n-\t\t\t'bulk_revoked' => array( 'type' => 'success', 'message' => __( 'Selected API keys revoked.', 'learnpress' ) ),\r\n-\t\t\t'no_selection' => array( 'type' => 'warning', 'message' => __( 'No API keys selected.', 'learnpress' ) ),\r\n-\t\t);\r\n-\r\n-\t\treturn $map[ $code ] ?? null;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check whether MCP Adapter plugin is active.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_mcp_adapter_active(): bool {\r\n-\t\tif ( ! function_exists( 'is_plugin_active' ) ) {\r\n-\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\r\n-\t\t}\r\n-\r\n-\t\treturn function_exists( 'is_plugin_active' ) && is_plugin_active( 'mcp-adapter\u002Fmcp-adapter.php' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Is current request LearnPress MCP settings screen.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_mcp_keys_settings_screen(): bool {\r\n-\t\t$page    = sanitize_key( $_REQUEST['page'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$tab     = sanitize_key( $_REQUEST['tab'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\r\n-\t\treturn 'learn-press-settings' === $page\r\n-\t\t\t&& 'mcp' === $tab;\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\MCP\\Auth\\ApiKeysRepository;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Admin controller for LearnPress MCP API keys UI and actions.\n+ *\u002F\n+class LP_Admin_MCP_API_Keys {\n+\t\u002F**\n+\t * @var self|null\n+\t *\u002F\n+\tprotected static $instance;\n+\n+\t\u002F**\n+\t * @var ApiKeysRepository\n+\t *\u002F\n+\tprotected $repository;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $required_capability = 'manage_options';\n+\n+\t\u002F**\n+\t * Get singleton instance for MCP API keys admin controller.\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\t\u002F**\n+\t * Register admin hooks and required table dependency.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$this->repository = new ApiKeysRepository();\n+\n+\t\tadd_action( 'admin_init', array( $this, 'handle_admin_actions' ) );\n+\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'localize_admin_script' ) );\n+\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php';\n+\t}\n+\n+\t\u002F**\n+\t * Localize MCP API key settings and i18n labels to admin JavaScript.\n+\t *\n+\t * Data is exposed under `window.lpMcpApiKeysSettings` and consumed by\n+\t * `lp-admin-mcp-api-keys` runtime script.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function localize_admin_script(): void {\n+\t\tif ( ! $this->is_mcp_adapter_active() || ! wp_script_is( 'lp-admin-mcp-api-keys', 'enqueued' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\twp_localize_script(\n+\t\t\t'lp-admin-mcp-api-keys',\n+\t\t\t'lpMcpApiKeysSettings',\n+\t\t\tarray(\n+\t\t\t\t'is_mcp_keys_section' => $this->is_mcp_keys_settings_screen(),\n+\t\t\t\t'actions' => array(\n+\t\t\t\t\t'create' => 'mcp_create_api_key',\n+\t\t\t\t),\n+\t\t\t\t'i18n'     => array(\n+\t\t\t\t\t'processing'      => __( 'Processing...', 'learnpress' ),\n+\t\t\t\t\t'created'         => __( 'API key created.', 'learnpress' ),\n+\t\t\t\t\t'request_failed'  => __( 'Request failed. Please try again.', 'learnpress' ),\n+\t\t\t\t\t'confirm_revoke'  => __( 'Revoke this API key?', 'learnpress' ),\n+\t\t\t\t\t'copy_success'    => __( 'Copied.', 'learnpress' ),\n+\t\t\t\t\t'copy_fallback'   => __( 'Copy this value manually.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Render MCP API key management screen inside LearnPress settings.\n+\t *\n+\t * Prepares list-table data and user options before loading the section template.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render_page(): void {\n+\t\tif ( ! current_user_can( $this->required_capability ) ) {\n+\t\t\twp_die( esc_html__( 'Sorry, you are not allowed to manage MCP API keys.', 'learnpress' ) );\n+\t\t}\n+\t\tif ( ! $this->is_mcp_adapter_active() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$table = new LP_Admin_MCP_API_Keys_Table_List( $this->repository );\n+\t\t$table->prepare_items();\n+\n+\t\t$users        = get_users(\n+\t\t\tarray(\n+\t\t\t\t'fields'  => array( 'ID', 'user_login', 'display_name' ),\n+\t\t\t\t'orderby' => 'display_name',\n+\t\t\t\t'order'   => 'ASC',\n+\t\t\t\t'number'  => 200,\n+\t\t\t)\n+\t\t);\n+\t\t$message_code = sanitize_key( $_GET['lp_mcp_notice'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$message      = $this->notice_from_code( $message_code );\n+\n+\t\trequire LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php';\n+\t}\n+\n+\t\u002F**\n+\t * Process row and bulk revoke actions submitted from the list table.\n+\t *\n+\t * Supported actions:\n+\t * - `lp_mcp_key_action = revoke`\n+\t * - `action\u002Faction2 = bulk-revoke`\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function handle_admin_actions(): void {\n+\t\tif ( ! $this->is_mcp_keys_settings_screen() || ! current_user_can( $this->required_capability ) || ! $this->is_mcp_adapter_active() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$action = sanitize_key( $_REQUEST['lp_mcp_key_action'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\tif ( 'revoke' === $action ) {\n+\t\t\t$key_id = absint( $_REQUEST['key_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tcheck_admin_referer( 'lp_mcp_revoke_key_' . $key_id );\n+\t\t\t$this->repository->revoke_key( $key_id );\n+\t\t\t$this->redirect_with_notice( 'revoked' );\n+\t\t}\n+\n+\t\t$bulk_action = '';\n+\t\tif ( isset( $_REQUEST['action'] ) && '-1' !== $_REQUEST['action'] ) { \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t\t$bulk_action = sanitize_key( wp_unslash( $_REQUEST['action'] ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t} elseif ( isset( $_REQUEST['action2'] ) && '-1' !== $_REQUEST['action2'] ) { \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t\t$bulk_action = sanitize_key( wp_unslash( $_REQUEST['action2'] ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t}\n+\n+\t\tif ( 'bulk-revoke' !== $bulk_action ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tcheck_admin_referer( 'lp_mcp_bulk_revoke_action', 'lp_mcp_bulk_revoke_nonce' );\n+\n+\t\t$key_ids = $_REQUEST['key_ids'] ?? array(); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$key_ids = is_array( $key_ids ) ? $key_ids : array();\n+\t\t$deleted = $this->repository->revoke_keys( $key_ids );\n+\n+\t\t$this->redirect_with_notice( $deleted > 0 ? 'bulk_revoked' : 'no_selection' );\n+\t}\n+\n+\t\u002F**\n+\t * Redirect back to MCP keys section with notice code.\n+\t *\n+\t * @param string $notice_code Notice key used by `notice_from_code`.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function redirect_with_notice( string $notice_code ): void {\n+\t\t$url = add_query_arg(\n+\t\t\tarray(\n+\t\t\t\t'page'          => 'learn-press-settings',\n+\t\t\t\t'tab'           => 'mcp',\n+\t\t\t\t'lp_mcp_notice' => $notice_code,\n+\t\t\t),\n+\t\t\tadmin_url( 'admin.php' )\n+\t\t);\n+\n+\t\twp_safe_redirect( $url );\n+\t\texit;\n+\t}\n+\n+\t\u002F**\n+\t * Convert notice code to display payload.\n+\t *\n+\t * @param string $code Notice code from query string.\n+\t *\n+\t * @return array\u003Cstring, string>|null\n+\t *\u002F\n+\tprotected function notice_from_code( string $code ): ?array {\n+\t\t$map = array(\n+\t\t\t'revoked'      => array( 'type' => 'success', 'message' => __( 'API key revoked.', 'learnpress' ) ),\n+\t\t\t'bulk_revoked' => array( 'type' => 'success', 'message' => __( 'Selected API keys revoked.', 'learnpress' ) ),\n+\t\t\t'no_selection' => array( 'type' => 'warning', 'message' => __( 'No API keys selected.', 'learnpress' ) ),\n+\t\t);\n+\n+\t\treturn $map[ $code ] ?? null;\n+\t}\n+\n+\t\u002F**\n+\t * Check whether MCP Adapter plugin is active.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_mcp_adapter_active(): bool {\n+\t\tif ( ! function_exists( 'is_plugin_active' ) ) {\n+\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\n+\t\t}\n+\n+\t\treturn function_exists( 'is_plugin_active' ) && is_plugin_active( 'mcp-adapter\u002Fmcp-adapter.php' );\n+\t}\n+\n+\t\u002F**\n+\t * Is current request LearnPress MCP settings screen.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_mcp_keys_settings_screen(): bool {\n+\t\t$page    = sanitize_key( $_REQUEST['page'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$tab     = sanitize_key( $_REQUEST['tab'] ?? '' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\n+\t\treturn 'learn-press-settings' === $page\n+\t\t\t&& 'mcp' === $tab;\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-mcp-api-keys-table-list.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,248 +1,248 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\MCP\\Auth\\ApiKeysRepository;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'WP_List_Table' ) ) {\r\n-\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fclass-wp-list-table.php';\r\n-}\r\n-\r\n-\u002F**\r\n- * Admin table for LearnPress MCP API keys.\r\n- *\u002F\r\n-class LP_Admin_MCP_API_Keys_Table_List extends WP_List_Table {\r\n-\t\u002F**\r\n-\t * @var ApiKeysRepository\r\n-\t *\u002F\r\n-\tprotected $repository;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\u003Cint, object>\r\n-\t *\u002F\r\n-\tprotected $users_with_keys = array();\r\n-\r\n-\t\u002F**\r\n-\t * Initialize list-table with MCP keys repository dependency.\r\n-\t *\r\n-\t * @param ApiKeysRepository $repository Repository for querying and mutating key records.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function __construct( ApiKeysRepository $repository ) {\r\n-\t\t$this->repository = $repository;\r\n-\r\n-\t\tparent::__construct(\r\n-\t\t\tarray(\r\n-\t\t\t\t'singular' => 'lp_mcp_api_key',\r\n-\t\t\t\t'plural'   => 'lp_mcp_api_keys',\r\n-\t\t\t\t'ajax'     => false,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Define visible columns for MCP API key table.\r\n-\t *\r\n-\t * @return array\u003Cstring, string>\r\n-\t *\u002F\r\n-\tpublic function get_columns() {\r\n-\t\treturn array(\r\n-\t\t\t'cb'          => '\u003Cinput type=\"checkbox\" \u002F>',\r\n-\t\t\t'description' => esc_html__( 'Description', 'learnpress' ),\r\n-\t\t\t'key_ending'  => esc_html__( 'Key Ending', 'learnpress' ),\r\n-\t\t\t'user'        => esc_html__( 'User', 'learnpress' ),\r\n-\t\t\t'permissions' => esc_html__( 'Permissions', 'learnpress' ),\r\n-\t\t\t'last_access' => esc_html__( 'Last Access', 'learnpress' ),\r\n-\t\t\t'call_count'  => esc_html__( 'Calls', 'learnpress' ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Define sortable columns and default sort directions.\r\n-\t *\r\n-\t * @return array\u003Cstring, array{0:string,1:bool}>\r\n-\t *\u002F\r\n-\tprotected function get_sortable_columns() {\r\n-\t\treturn array(\r\n-\t\t\t'description' => array( 'description', false ),\r\n-\t\t\t'user'        => array( 'user', false ),\r\n-\t\t\t'permissions' => array( 'permissions', false ),\r\n-\t\t\t'last_access' => array( 'last_access', true ),\r\n-\t\t\t'call_count'  => array( 'call_count', true ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Define supported bulk actions for selected keys.\r\n-\t *\r\n-\t * @return array\u003Cstring, string>\r\n-\t *\u002F\r\n-\tprotected function get_bulk_actions() {\r\n-\t\treturn array(\r\n-\t\t\t'bulk-revoke' => esc_html__( 'Revoke', 'learnpress' ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render row checkbox used by bulk actions.\r\n-\t *\r\n-\t * @param object $item Current key row object.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function column_cb( $item ) {\r\n-\t\treturn sprintf( '\u003Cinput type=\"checkbox\" name=\"key_ids[]\" value=\"%d\" \u002F>', absint( $item->key_id ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render description column with inline row actions.\r\n-\t *\r\n-\t * Row actions include revoke link.\r\n-\t *\r\n-\t * @param object $item Current key row object.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function column_description( $item ) {\r\n-\t\t$description = $item->description ? $item->description : esc_html__( '(No description)', 'learnpress' );\r\n-\r\n-\t\t$base_url = add_query_arg(\r\n-\t\t\tarray(\r\n-\t\t\t\t'page'    => 'learn-press-settings',\r\n-\t\t\t\t'tab'     => 'mcp',\r\n-\t\t\t),\r\n-\t\t\tadmin_url( 'admin.php' )\r\n-\t\t);\r\n-\r\n-\t\t$revoke_url = wp_nonce_url(\r\n-\t\t\tadd_query_arg(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'lp_mcp_key_action' => 'revoke',\r\n-\t\t\t\t\t'key_id'            => absint( $item->key_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t$base_url\r\n-\t\t\t),\r\n-\t\t\t'lp_mcp_revoke_key_' . absint( $item->key_id )\r\n-\t\t);\r\n-\r\n-\t\t$actions = array(\r\n-\t\t\t'revoke' => sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\" onclick=\"return confirm(\\'%s\\');\">%s\u003C\u002Fa>',\r\n-\t\t\t\tesc_url( $revoke_url ),\r\n-\t\t\t\tesc_js( __( 'Revoke this API key?', 'learnpress' ) ),\r\n-\t\t\t\tesc_html__( 'Revoke', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn sprintf( '%1$s %2$s', esc_html( $description ), $this->row_actions( $actions ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render non-custom columns by column key.\r\n-\t *\r\n-\t * @param object $item        Current key row object.\r\n-\t * @param string $column_name Current column key.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function column_default( $item, $column_name ) {\r\n-\t\tswitch ( $column_name ) {\r\n-\t\t\tcase 'key_ending':\r\n-\t\t\t\treturn '...' . esc_html( (string) $item->truncated_key );\r\n-\t\t\tcase 'user':\r\n-\t\t\t\t$name = $item->user_display_name ?: $item->user_login;\r\n-\t\t\t\tif ( ! $name ) {\r\n-\t\t\t\t\t$name = esc_html__( '(Missing user)', 'learnpress' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn esc_html( $name );\r\n-\t\t\tcase 'permissions':\r\n-\t\t\t\treturn esc_html( (string) $item->permissions );\r\n-\t\t\tcase 'last_access':\r\n-\t\t\t\tif ( empty( $item->last_access ) ) {\r\n-\t\t\t\t\treturn '&mdash;';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn esc_html( get_date_from_gmt( (string) $item->last_access, 'Y-m-d H:i:s' ) );\r\n-\t\t\tcase 'call_count':\r\n-\t\t\t\treturn esc_html( (string) absint( $item->call_count ) );\r\n-\t\t}\r\n-\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render extra controls above table: user filter dropdown.\r\n-\t *\r\n-\t * @param string $which Table position (`top` or `bottom`).\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function extra_tablenav( $which ) {\r\n-\t\tif ( 'top' !== $which ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user_filter = absint( $_REQUEST['mcp_user_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\r\n-\t\techo '\u003Cdiv class=\"alignleft actions\">';\r\n-\t\techo '\u003Clabel class=\"screen-reader-text\" for=\"mcp_user_id\">' . esc_html__( 'Filter by user', 'learnpress' ) . '\u003C\u002Flabel>';\r\n-\t\techo '\u003Cselect id=\"mcp_user_id\" name=\"mcp_user_id\">';\r\n-\t\techo '\u003Coption value=\"0\">' . esc_html__( 'All users', 'learnpress' ) . '\u003C\u002Foption>';\r\n-\r\n-\t\tforeach ( $this->users_with_keys as $user ) {\r\n-\t\t\techo '\u003Coption value=\"' . esc_attr( $user->ID ) . '\" ' . selected( $user_filter, absint( $user->ID ), false ) . '>' . esc_html( $user->display_name ) . '\u003C\u002Foption>';\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Fselect>';\r\n-\r\n-\t\tsubmit_button( __( 'Filter', 'learnpress' ), 'button', 'filter_action', false );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query and prepare list-table items and pagination metadata.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function prepare_items() {\r\n-\t\t$search   = sanitize_text_field( wp_unslash( $_REQUEST['s'] ?? '' ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$user_id  = absint( $_REQUEST['mcp_user_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$orderby  = sanitize_key( $_REQUEST['orderby'] ?? 'created_at' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$order    = sanitize_key( $_REQUEST['order'] ?? 'desc' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$page_num = $this->get_pagenum();\r\n-\r\n-\t\t$results = $this->repository->query_keys(\r\n-\t\t\tarray(\r\n-\t\t\t\t'page'     => $page_num,\r\n-\t\t\t\t'per_page' => 20,\r\n-\t\t\t\t'search'   => $search,\r\n-\t\t\t\t'user_id'  => $user_id,\r\n-\t\t\t\t'orderby'  => $orderby,\r\n-\t\t\t\t'order'    => $order,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$this->items           = $results['items'];\r\n-\t\t$this->users_with_keys = $this->repository->users_with_keys();\r\n-\r\n-\t\t$this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );\r\n-\r\n-\t\t$this->set_pagination_args(\r\n-\t\t\tarray(\r\n-\t\t\t\t'total_items' => $results['total'],\r\n-\t\t\t\t'per_page'    => 20,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render empty state when no keys match current filters.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function no_items() {\r\n-\t\techo esc_html__( 'No MCP API keys found.', 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\MCP\\Auth\\ApiKeysRepository;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'WP_List_Table' ) ) {\n+\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fclass-wp-list-table.php';\n+}\n+\n+\u002F**\n+ * Admin table for LearnPress MCP API keys.\n+ *\u002F\n+class LP_Admin_MCP_API_Keys_Table_List extends WP_List_Table {\n+\t\u002F**\n+\t * @var ApiKeysRepository\n+\t *\u002F\n+\tprotected $repository;\n+\n+\t\u002F**\n+\t * @var array\u003Cint, object>\n+\t *\u002F\n+\tprotected $users_with_keys = array();\n+\n+\t\u002F**\n+\t * Initialize list-table with MCP keys repository dependency.\n+\t *\n+\t * @param ApiKeysRepository $repository Repository for querying and mutating key records.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function __construct( ApiKeysRepository $repository ) {\n+\t\t$this->repository = $repository;\n+\n+\t\tparent::__construct(\n+\t\t\tarray(\n+\t\t\t\t'singular' => 'lp_mcp_api_key',\n+\t\t\t\t'plural'   => 'lp_mcp_api_keys',\n+\t\t\t\t'ajax'     => false,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Define visible columns for MCP API key table.\n+\t *\n+\t * @return array\u003Cstring, string>\n+\t *\u002F\n+\tpublic function get_columns() {\n+\t\treturn array(\n+\t\t\t'cb'          => '\u003Cinput type=\"checkbox\" \u002F>',\n+\t\t\t'description' => esc_html__( 'Description', 'learnpress' ),\n+\t\t\t'key_ending'  => esc_html__( 'Key Ending', 'learnpress' ),\n+\t\t\t'user'        => esc_html__( 'User', 'learnpress' ),\n+\t\t\t'permissions' => esc_html__( 'Permissions', 'learnpress' ),\n+\t\t\t'last_access' => esc_html__( 'Last Access', 'learnpress' ),\n+\t\t\t'call_count'  => esc_html__( 'Calls', 'learnpress' ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Define sortable columns and default sort directions.\n+\t *\n+\t * @return array\u003Cstring, array{0:string,1:bool}>\n+\t *\u002F\n+\tprotected function get_sortable_columns() {\n+\t\treturn array(\n+\t\t\t'description' => array( 'description', false ),\n+\t\t\t'user'        => array( 'user', false ),\n+\t\t\t'permissions' => array( 'permissions', false ),\n+\t\t\t'last_access' => array( 'last_access', true ),\n+\t\t\t'call_count'  => array( 'call_count', true ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Define supported bulk actions for selected keys.\n+\t *\n+\t * @return array\u003Cstring, string>\n+\t *\u002F\n+\tprotected function get_bulk_actions() {\n+\t\treturn array(\n+\t\t\t'bulk-revoke' => esc_html__( 'Revoke', 'learnpress' ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Render row checkbox used by bulk actions.\n+\t *\n+\t * @param object $item Current key row object.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function column_cb( $item ) {\n+\t\treturn sprintf( '\u003Cinput type=\"checkbox\" name=\"key_ids[]\" value=\"%d\" \u002F>', absint( $item->key_id ) );\n+\t}\n+\n+\t\u002F**\n+\t * Render description column with inline row actions.\n+\t *\n+\t * Row actions include revoke link.\n+\t *\n+\t * @param object $item Current key row object.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function column_description( $item ) {\n+\t\t$description = $item->description ? $item->description : esc_html__( '(No description)', 'learnpress' );\n+\n+\t\t$base_url = add_query_arg(\n+\t\t\tarray(\n+\t\t\t\t'page'    => 'learn-press-settings',\n+\t\t\t\t'tab'     => 'mcp',\n+\t\t\t),\n+\t\t\tadmin_url( 'admin.php' )\n+\t\t);\n+\n+\t\t$revoke_url = wp_nonce_url(\n+\t\t\tadd_query_arg(\n+\t\t\t\tarray(\n+\t\t\t\t\t'lp_mcp_key_action' => 'revoke',\n+\t\t\t\t\t'key_id'            => absint( $item->key_id ),\n+\t\t\t\t),\n+\t\t\t\t$base_url\n+\t\t\t),\n+\t\t\t'lp_mcp_revoke_key_' . absint( $item->key_id )\n+\t\t);\n+\n+\t\t$actions = array(\n+\t\t\t'revoke' => sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\" onclick=\"return confirm(\\'%s\\');\">%s\u003C\u002Fa>',\n+\t\t\t\tesc_url( $revoke_url ),\n+\t\t\t\tesc_js( __( 'Revoke this API key?', 'learnpress' ) ),\n+\t\t\t\tesc_html__( 'Revoke', 'learnpress' )\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn sprintf( '%1$s %2$s', esc_html( $description ), $this->row_actions( $actions ) );\n+\t}\n+\n+\t\u002F**\n+\t * Render non-custom columns by column key.\n+\t *\n+\t * @param object $item        Current key row object.\n+\t * @param string $column_name Current column key.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function column_default( $item, $column_name ) {\n+\t\tswitch ( $column_name ) {\n+\t\t\tcase 'key_ending':\n+\t\t\t\treturn '...' . esc_html( (string) $item->truncated_key );\n+\t\t\tcase 'user':\n+\t\t\t\t$name = $item->user_display_name ?: $item->user_login;\n+\t\t\t\tif ( ! $name ) {\n+\t\t\t\t\t$name = esc_html__( '(Missing user)', 'learnpress' );\n+\t\t\t\t}\n+\n+\t\t\t\treturn esc_html( $name );\n+\t\t\tcase 'permissions':\n+\t\t\t\treturn esc_html( (string) $item->permissions );\n+\t\t\tcase 'last_access':\n+\t\t\t\tif ( empty( $item->last_access ) ) {\n+\t\t\t\t\treturn '&mdash;';\n+\t\t\t\t}\n+\n+\t\t\t\treturn esc_html( get_date_from_gmt( (string) $item->last_access, 'Y-m-d H:i:s' ) );\n+\t\t\tcase 'call_count':\n+\t\t\t\treturn esc_html( (string) absint( $item->call_count ) );\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Render extra controls above table: user filter dropdown.\n+\t *\n+\t * @param string $which Table position (`top` or `bottom`).\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function extra_tablenav( $which ) {\n+\t\tif ( 'top' !== $which ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user_filter = absint( $_REQUEST['mcp_user_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\n+\t\techo '\u003Cdiv class=\"alignleft actions\">';\n+\t\techo '\u003Clabel class=\"screen-reader-text\" for=\"mcp_user_id\">' . esc_html__( 'Filter by user', 'learnpress' ) . '\u003C\u002Flabel>';\n+\t\techo '\u003Cselect id=\"mcp_user_id\" name=\"mcp_user_id\">';\n+\t\techo '\u003Coption value=\"0\">' . esc_html__( 'All users', 'learnpress' ) . '\u003C\u002Foption>';\n+\n+\t\tforeach ( $this->users_with_keys as $user ) {\n+\t\t\techo '\u003Coption value=\"' . esc_attr( $user->ID ) . '\" ' . selected( $user_filter, absint( $user->ID ), false ) . '>' . esc_html( $user->display_name ) . '\u003C\u002Foption>';\n+\t\t}\n+\n+\t\techo '\u003C\u002Fselect>';\n+\n+\t\tsubmit_button( __( 'Filter', 'learnpress' ), 'button', 'filter_action', false );\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\t\u002F**\n+\t * Query and prepare list-table items and pagination metadata.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function prepare_items() {\n+\t\t$search   = sanitize_text_field( wp_unslash( $_REQUEST['s'] ?? '' ) ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$user_id  = absint( $_REQUEST['mcp_user_id'] ?? 0 ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$orderby  = sanitize_key( $_REQUEST['orderby'] ?? 'created_at' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$order    = sanitize_key( $_REQUEST['order'] ?? 'desc' ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$page_num = $this->get_pagenum();\n+\n+\t\t$results = $this->repository->query_keys(\n+\t\t\tarray(\n+\t\t\t\t'page'     => $page_num,\n+\t\t\t\t'per_page' => 20,\n+\t\t\t\t'search'   => $search,\n+\t\t\t\t'user_id'  => $user_id,\n+\t\t\t\t'orderby'  => $orderby,\n+\t\t\t\t'order'    => $order,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$this->items           = $results['items'];\n+\t\t$this->users_with_keys = $this->repository->users_with_keys();\n+\n+\t\t$this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );\n+\n+\t\t$this->set_pagination_args(\n+\t\t\tarray(\n+\t\t\t\t'total_items' => $results['total'],\n+\t\t\t\t'per_page'    => 20,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Render empty state when no keys match current filters.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function no_items() {\n+\t\techo esc_html__( 'No MCP API keys found.', 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-menu.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-menu.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-menu.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-menu.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,202 +1,203 @@\n-\u003C?php\r\n-\u002F**\r\n- * Setup menus in WP admin.\r\n- *\r\n- * @author      ThimPress\r\n- * @package     LearnPress\r\n- * @version     1.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Menu\r\n- *\u002F\r\n-class LP_Admin_Menu {\r\n-\r\n-\t\u002F**\r\n-\t * Array of submenu items.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $menu_items = array();\r\n-\r\n-\t\u002F**\r\n-\t * Main menu capability.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $capability = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Admin_Menu Construct\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tadd_action( 'admin_menu', array( $this, 'admin_menu' ) );\r\n-\r\n-\t\tif ( apply_filters( 'learn_press_show_admin_bar_courses_page', true ) ) {\r\n-\t\t\tadd_action( 'admin_bar_menu', array( $this, 'admin_bar_menus' ), 50 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\t$this->capability = 'edit_' . LP_COURSE_CPT . 's';\r\n-\t\tinclude_once 'sub-menus\u002Fabstract-submenu.php';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Added url Pages of LP.\r\n-\t *\r\n-\t * @param WP_Admin_Bar $wp_admin_bar\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function admin_bar_menus( $wp_admin_bar ) {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$url_pages = [\r\n-\t\t\t'lp-courses'     => [\r\n-\t\t\t\t'title'  => esc_html__( 'View Page Courses', 'learnpress' ),\r\n-\t\t\t\t'href'   => learn_press_get_page_link( 'courses' ),\r\n-\t\t\t\t'parent' => 'site-name',\r\n-\t\t\t],\r\n-\t\t\t'lp-profile'     => [\r\n-\t\t\t\t'title'  => esc_html__( 'View Page Profile', 'learnpress' ),\r\n-\t\t\t\t'href'   => learn_press_get_page_link( 'profile' ),\r\n-\t\t\t\t'parent' => 'site-name',\r\n-\t\t\t],\r\n-\t\t\t'lp-instructors' => [\r\n-\t\t\t\t'title'  => esc_html__( 'View Page Instructors', 'learnpress' ),\r\n-\t\t\t\t'href'   => learn_press_get_page_link( 'instructors' ),\r\n-\t\t\t\t'parent' => 'site-name',\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $url_pages as $id => $url_page ) {\r\n-\t\t\t$wp_admin_bar->add_node(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'     => $id,\r\n-\t\t\t\t\t'parent' => $url_page['parent'] ?? 'appearance',\r\n-\t\t\t\t\t'title'  => sprintf( '\u003Cspan class=\"ab-label\">%s\u003C\u002Fspan>', $url_page['title'] ),\r\n-\t\t\t\t\t'href'   => $url_page['href'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get main menu capability.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_capability() {\r\n-\t\treturn $this->capability;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register for menu for admin\r\n-\t *\u002F\r\n-\tpublic function admin_menu() {\r\n-\t\t\u002F\u002F Not for translate menu_title, because it make compare $current_screen with \"learnpress_page_.*\" wrong\r\n-\t\tadd_menu_page(\r\n-\t\t\t__( 'Learning Management System', 'learnpress' ),\r\n-\t\t\t'LearnPress',\r\n-\t\t\t$this->get_capability(),\r\n-\t\t\t'learn_press',\r\n-\t\t\t'',\r\n-\t\t\tLP_PLUGIN_URL . '\u002Fassets\u002Fimages\u002Flogo-menu.png',\r\n-\t\t\t'3.14'\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Default submenu items\r\n-\t\t$menu_items               = array();\r\n-\t\t$menu_items['statistic']  = include_once 'sub-menus\u002Fclass-lp-submenu-statistics.php';\r\n-\t\t$menu_items['addons']     = include_once 'sub-menus\u002Fclass-lp-submenu-addons.php';\r\n-\t\t$menu_items['themes']     = include_once 'sub-menus\u002Fclass-lp-submenu-themes.php';\r\n-\t\t$menu_items['settings']   = include_once 'sub-menus\u002Fclass-lp-submenu-settings.php';\r\n-\t\t$menu_items['tools']      = include_once 'sub-menus\u002Fclass-lp-submenu-tools.php';\r\n-\t\t$menu_items['categories'] = include_once 'sub-menus\u002Fclass-lp-submenu-categories.php';\r\n-\t\t$menu_items['tags']       = include_once 'sub-menus\u002Fclass-lp-submenu-tags.php';\r\n-\r\n-\t\t$menu_items = apply_filters( 'learn-press\u002Fadmin\u002Fmenu-items', $menu_items );\r\n-\r\n-\t\t\u002F\u002F Sort menu items by its priority\r\n-\t\tuasort( $menu_items, 'learn_press_sort_list_by_priority_callback' );\r\n-\r\n-\t\tadd_action(\r\n-\t\t\t'parent_file',\r\n-\t\t\tfunction ( $parent_file ) {\r\n-\t\t\t\tglobal $current_screen;\r\n-\r\n-\t\t\t\t$taxonomy = $current_screen->taxonomy;\r\n-\t\t\t\tif ( $taxonomy == 'course_tag' ) {\r\n-\t\t\t\t\t$parent_file = 'learn_press';\r\n-\t\t\t\t} elseif ( $taxonomy == 'course_category' ) {\r\n-\t\t\t\t\t$parent_file = 'learn_press';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $parent_file;\r\n-\t\t\t}\r\n-\t\t);\r\n-\r\n-\t\tif ( $menu_items ) {\r\n-\t\t\tforeach ( $menu_items as $k => $item ) {\r\n-\t\t\t\tif ( is_string( $item ) && class_exists( $item ) ) {\r\n-\t\t\t\t\t$item = new $item();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $item instanceof LP_Abstract_Submenu ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( in_array( $k, [ 'tags', 'categories' ] ) ) {\r\n-\t\t\t\t\t$callback = false;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$callback = $item->get_callback();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tadd_submenu_page(\r\n-\t\t\t\t\t'learn_press',\r\n-\t\t\t\t\t$item->get_page_title(),\r\n-\t\t\t\t\t$item->get_menu_title(),\r\n-\t\t\t\t\t$item->get_capability(),\r\n-\t\t\t\t\t$item->get_id(),\r\n-\t\t\t\t\t$callback\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$this->menu_items = $menu_items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F$addons = LP_Admin::instance()->get_addons();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Callback function using for \"usort\".\r\n-\t *\r\n-\t * @param LP_Abstract_Submenu $a\r\n-\t * @param LP_Abstract_Submenu $b\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function sort_menu_items( $a, $b ) {\r\n-\t\treturn $a->get_priority() > $b->get_priority();\r\n-\t}\r\n-\r\n-\tpublic function get_menu_items() {\r\n-\t\treturn $this->menu_items;\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Admin_Menu::instance();\r\n+\u003C?php\n+\u002F**\n+ * Setup menus in WP admin.\n+ *\n+ * @author      ThimPress\n+ * @package     LearnPress\n+ * @version     1.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Class LP_Admin_Menu\n+ *\u002F\n+class LP_Admin_Menu {\n+\n+\t\u002F**\n+\t * Array of submenu items.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $menu_items = array();\n+\n+\t\u002F**\n+\t * Main menu capability.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $capability = '';\n+\n+\t\u002F**\n+\t * LP_Admin_Menu Construct\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tadd_action( 'admin_menu', array( $this, 'admin_menu' ) );\n+\n+\t\tif ( apply_filters( 'learn_press_show_admin_bar_courses_page', true ) ) {\n+\t\t\tadd_action( 'admin_bar_menu', array( $this, 'admin_bar_menus' ), 50 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\t$this->capability = 'edit_' . LP_COURSE_CPT . 's';\n+\t\tinclude_once 'sub-menus\u002Fabstract-submenu.php';\n+\t}\n+\n+\t\u002F**\n+\t * Added url Pages of LP.\n+\t *\n+\t * @param WP_Admin_Bar $wp_admin_bar\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function admin_bar_menus( $wp_admin_bar ) {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$url_pages = [\n+\t\t\t'lp-courses'     => [\n+\t\t\t\t'title'  => esc_html__( 'View Page Courses', 'learnpress' ),\n+\t\t\t\t'href'   => learn_press_get_page_link( 'courses' ),\n+\t\t\t\t'parent' => 'site-name',\n+\t\t\t],\n+\t\t\t'lp-profile'     => [\n+\t\t\t\t'title'  => esc_html__( 'View Page Profile', 'learnpress' ),\n+\t\t\t\t'href'   => learn_press_get_page_link( 'profile' ),\n+\t\t\t\t'parent' => 'site-name',\n+\t\t\t],\n+\t\t\t'lp-instructors' => [\n+\t\t\t\t'title'  => esc_html__( 'View Page Instructors', 'learnpress' ),\n+\t\t\t\t'href'   => learn_press_get_page_link( 'instructors' ),\n+\t\t\t\t'parent' => 'site-name',\n+\t\t\t],\n+\t\t];\n+\n+\t\tforeach ( $url_pages as $id => $url_page ) {\n+\t\t\t$wp_admin_bar->add_node(\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'     => $id,\n+\t\t\t\t\t'parent' => $url_page['parent'] ?? 'appearance',\n+\t\t\t\t\t'title'  => sprintf( '\u003Cspan class=\"ab-label\">%s\u003C\u002Fspan>', $url_page['title'] ),\n+\t\t\t\t\t'href'   => $url_page['href'],\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get main menu capability.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_capability() {\n+\t\treturn $this->capability;\n+\t}\n+\n+\t\u002F**\n+\t * Register for menu for admin\n+\t *\u002F\n+\tpublic function admin_menu() {\n+\t\t\u002F\u002F Not for translate menu_title, because it make compare $current_screen with \"learnpress_page_.*\" wrong\n+\t\tadd_menu_page(\n+\t\t\t__( 'Learning Management System', 'learnpress' ),\n+\t\t\t'LearnPress',\n+\t\t\t$this->get_capability(),\n+\t\t\t'learn_press',\n+\t\t\t'',\n+\t\t\tLP_PLUGIN_URL . '\u002Fassets\u002Fimages\u002Flogo-menu.png',\n+\t\t\t'3.14'\n+\t\t);\n+\n+\t\t\u002F\u002F Default submenu items\n+\t\t$menu_items                     = array();\n+\t\t$menu_items['statistic']        = include_once 'sub-menus\u002Fclass-lp-submenu-statistics.php';\n+\t\t$menu_items['student-enrolled'] = include_once 'sub-menus\u002Fclass-lp-submenu-students-enrolled.php';\n+\t\t$menu_items['addons']           = include_once 'sub-menus\u002Fclass-lp-submenu-addons.php';\n+\t\t$menu_items['themes']           = include_once 'sub-menus\u002Fclass-lp-submenu-themes.php';\n+\t\t$menu_items['settings']         = include_once 'sub-menus\u002Fclass-lp-submenu-settings.php';\n+\t\t$menu_items['tools']            = include_once 'sub-menus\u002Fclass-lp-submenu-tools.php';\n+\t\t$menu_items['categories']       = include_once 'sub-menus\u002Fclass-lp-submenu-categories.php';\n+\t\t$menu_items['tags']             = include_once 'sub-menus\u002Fclass-lp-submenu-tags.php';\n+\n+\t\t$menu_items = apply_filters( 'learn-press\u002Fadmin\u002Fmenu-items', $menu_items );\n+\n+\t\t\u002F\u002F Sort menu items by its priority\n+\t\tuasort( $menu_items, 'learn_press_sort_list_by_priority_callback' );\n+\n+\t\tadd_action(\n+\t\t\t'parent_file',\n+\t\t\tfunction ( $parent_file ) {\n+\t\t\t\tglobal $current_screen;\n+\n+\t\t\t\t$taxonomy = $current_screen->taxonomy;\n+\t\t\t\tif ( $taxonomy == 'course_tag' ) {\n+\t\t\t\t\t$parent_file = 'learn_press';\n+\t\t\t\t} elseif ( $taxonomy == 'course_category' ) {\n+\t\t\t\t\t$parent_file = 'learn_press';\n+\t\t\t\t}\n+\n+\t\t\t\treturn $parent_file;\n+\t\t\t}\n+\t\t);\n+\n+\t\tif ( $menu_items ) {\n+\t\t\tforeach ( $menu_items as $k => $item ) {\n+\t\t\t\tif ( is_string( $item ) && class_exists( $item ) ) {\n+\t\t\t\t\t$item = new $item();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $item instanceof LP_Abstract_Submenu ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( in_array( $k, [ 'tags', 'categories' ] ) ) {\n+\t\t\t\t\t$callback = false;\n+\t\t\t\t} else {\n+\t\t\t\t\t$callback = $item->get_callback();\n+\t\t\t\t}\n+\n+\t\t\t\tadd_submenu_page(\n+\t\t\t\t\t'learn_press',\n+\t\t\t\t\t$item->get_page_title(),\n+\t\t\t\t\t$item->get_menu_title(),\n+\t\t\t\t\t$item->get_capability(),\n+\t\t\t\t\t$item->get_id(),\n+\t\t\t\t\t$callback\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$this->menu_items = $menu_items;\n+\t\t}\n+\n+\t\t\u002F\u002F$addons = LP_Admin::instance()->get_addons();\n+\t}\n+\n+\t\u002F**\n+\t * Callback function using for \"usort\".\n+\t *\n+\t * @param LP_Abstract_Submenu $a\n+\t * @param LP_Abstract_Submenu $b\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function sort_menu_items( $a, $b ) {\n+\t\treturn $a->get_priority() > $b->get_priority();\n+\t}\n+\n+\tpublic function get_menu_items() {\n+\t\treturn $this->menu_items;\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tstatic $instance;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+}\n+\n+return LP_Admin_Menu::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-notice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-notice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin-notice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin-notice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,239 +1,239 @@\n-\u003C?php\r\n-\u002F**\r\n- * Manage the admin notices and display them in admin\r\n- *\r\n- * @package    LearnPress\r\n- * @author     ThimPress\r\n- * @version    1.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Notice\r\n- *\u002F\r\n-class LP_Admin_Notice {\r\n-\t\u002F**\r\n-\t * Store all notices which added anywhere before show\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected static $_notices = array();\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @var LP_Admin_Notice\r\n-\t *\u002F\r\n-\tprotected static $instance = false;\r\n-\r\n-\t\u002F**\r\n-\t * List of notices.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $notices = array();\r\n-\r\n-\t\u002F**\r\n-\t * Option key for storing notices.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $option_id = 'lp_admin_notices';\r\n-\r\n-\t\u002F**\r\n-\t * Check is right plugin base.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function check_plugin_base(): bool {\r\n-\t\treturn 0 !== strcmp( LP_PLUGIN_BASENAME, 'learnpress\u002Flearnpress.php' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check LP has beta version.\r\n-\t *\r\n-\t * @return bool|[]\r\n-\t *\u002F\r\n-\tpublic static function check_lp_beta_version() {\r\n-\t\t$url    = 'https:\u002F\u002Flearnpress.github.io\u002Flearnpress\u002Flp-beta-version.json';\r\n-\t\t$config = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$res = wp_remote_get( $url );\r\n-\t\t\tif ( is_wp_error( $res ) ) {\r\n-\t\t\t\tthrow new Exception( $res->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$config = json_decode( wp_remote_retrieve_body( $res ), true );\r\n-\t\t\tif ( json_last_error() ) {\r\n-\t\t\t\tthrow new Exception( json_last_error_msg() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$version = $config['version'] ?? 0;\r\n-\t\t\tif ( ! $version ) {\r\n-\t\t\t\tthrow new Exception( 'Version LP beta is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! version_compare( $version, LEARNPRESS_VERSION, '>' ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $config;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get description of beta version.\r\n-\t *\r\n-\t * @param array $config\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_data_lp_beta( array $config = [] ): array {\r\n-\t\ttry {\r\n-\t\t\t$keys        = array_keys( $config );\r\n-\t\t\t$title       = $config['title'] ?? '';\r\n-\t\t\t$description = $config['description'] ?? '';\r\n-\t\t\tforeach ( $keys as $key ) {\r\n-\t\t\t\t$description = str_replace( '[[' . $key . ']]', $config[ $key ], $description );\r\n-\t\t\t\t$title       = str_replace( '[[' . $key . ']]', $config[ $key ], $title );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$title       = '';\r\n-\t\t\t$description = '';\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn [\r\n-\t\t\t'title'       => $title,\r\n-\t\t\t'description' => $description,\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Tests the background handler's connection.\r\n-\t *\r\n-\t * @since 4.1.7.3.2\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function check_wp_remote() {\r\n-\t\t$test_url = add_query_arg( 'lp_test_wp_remote', 1, home_url() );\r\n-\t\t$args     = [\r\n-\t\t\t'timeout' => 30,\r\n-\t\t];\r\n-\t\t$result   = wp_remote_post( $test_url, $args );\r\n-\t\t$body     = ! is_wp_error( $result ) ? wp_remote_retrieve_body( $result ) : $result;\r\n-\r\n-\t\treturn $body === '[TEST_REMOTE]' ? true : $body;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add new notice to show in admin page.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @param string|WP_Error $message\r\n-\t * @param string          $type\r\n-\t * @param bool            $dismissible\r\n-\t * @param string          $id\r\n-\t * @param bool            $redirect\r\n-\t * @param bool            $override\r\n-\t *\r\n-\t * @return boolean\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function add( $message, $type = 'success', $dismissible = true, $id = '', $redirect = false, $override = false ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\treturn false;\r\n-\t\tif ( ! $id ) {\r\n-\t\t\t$id = uniqid();\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $this->notices[ $id ] ) || $override ) {\r\n-\t\t\t$this->notices[ $id ] = array(\r\n-\t\t\t\t'message'     => $message,\r\n-\t\t\t\t'type'        => $type ? $type : 'success',\r\n-\t\t\t\t'redirect'    => $redirect,\r\n-\t\t\t\t'dismissible' => $dismissible,\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove one or more notices from queue by ids.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @param string|array $notice\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic function remove( $notice ) {\r\n-\t\tsettype( $notice, 'array' );\r\n-\r\n-\t\tif ( ! $this->notices ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $notice as $id ) {\r\n-\t\t\tif ( ! empty( $this->notices[ $id ] ) ) {\r\n-\t\t\t\tunset( $this->notices[ $id ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Also remove in db\r\n-\t\t$redirects = get_option( $this->option_id );\r\n-\t\tif ( $redirects ) {\r\n-\t\t\tforeach ( $notice as $id ) {\r\n-\t\t\t\tif ( ! empty( $redirects[ $id ] ) ) {\r\n-\t\t\t\t\tunset( $redirects[ $id ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_option( $this->option_id, $redirects );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->notices;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear all notices.\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\u002F\r\n-\tpublic function clear() {\r\n-\t\t$this->notices = array();\r\n-\t\tdelete_option( $this->option_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get single instance of this class\r\n-\t *\r\n-\t * @since 3.2.6\r\n-\t *\r\n-\t * @return LP_Admin_Notice\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Admin_Notice::instance();\r\n+\u003C?php\n+\u002F**\n+ * Manage the admin notices and display them in admin\n+ *\n+ * @package    LearnPress\n+ * @author     ThimPress\n+ * @version    1.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+\u002F**\n+ * Class LP_Admin_Notice\n+ *\u002F\n+class LP_Admin_Notice {\n+\t\u002F**\n+\t * Store all notices which added anywhere before show\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected static $_notices = array();\n+\n+\t\u002F**\n+\t * @since 3.2.6\n+\t *\n+\t * @var LP_Admin_Notice\n+\t *\u002F\n+\tprotected static $instance = false;\n+\n+\t\u002F**\n+\t * List of notices.\n+\t *\n+\t * @since 3.2.6\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $notices = array();\n+\n+\t\u002F**\n+\t * Option key for storing notices.\n+\t *\n+\t * @since 3.2.6\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $option_id = 'lp_admin_notices';\n+\n+\t\u002F**\n+\t * Check is right plugin base.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function check_plugin_base(): bool {\n+\t\treturn 0 !== strcmp( LP_PLUGIN_BASENAME, 'learnpress\u002Flearnpress.php' );\n+\t}\n+\n+\t\u002F**\n+\t * Check LP has beta version.\n+\t *\n+\t * @return bool|[]\n+\t *\u002F\n+\tpublic static function check_lp_beta_version() {\n+\t\t$url    = 'https:\u002F\u002Flearnpress.github.io\u002Flearnpress\u002Flp-beta-version.json';\n+\t\t$config = [];\n+\n+\t\ttry {\n+\t\t\t$res = wp_remote_get( $url );\n+\t\t\tif ( is_wp_error( $res ) ) {\n+\t\t\t\tthrow new Exception( $res->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$config = json_decode( wp_remote_retrieve_body( $res ), true );\n+\t\t\tif ( json_last_error() ) {\n+\t\t\t\tthrow new Exception( json_last_error_msg() );\n+\t\t\t}\n+\n+\t\t\t$version = $config['version'] ?? 0;\n+\t\t\tif ( ! $version ) {\n+\t\t\t\tthrow new Exception( 'Version LP beta is invalid!' );\n+\t\t\t}\n+\n+\t\t\tif ( ! version_compare( $version, LEARNPRESS_VERSION, '>' ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $config;\n+\t}\n+\n+\t\u002F**\n+\t * Get description of beta version.\n+\t *\n+\t * @param array $config\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_data_lp_beta( array $config = [] ): array {\n+\t\ttry {\n+\t\t\t$keys        = array_keys( $config );\n+\t\t\t$title       = $config['title'] ?? '';\n+\t\t\t$description = $config['description'] ?? '';\n+\t\t\tforeach ( $keys as $key ) {\n+\t\t\t\t$description = str_replace( '[[' . $key . ']]', $config[ $key ], $description );\n+\t\t\t\t$title       = str_replace( '[[' . $key . ']]', $config[ $key ], $title );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$title       = '';\n+\t\t\t$description = '';\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn [\n+\t\t\t'title'       => $title,\n+\t\t\t'description' => $description,\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Tests the background handler's connection.\n+\t *\n+\t * @since 4.1.7.3.2\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tpublic static function check_wp_remote() {\n+\t\t$test_url = add_query_arg( 'lp_test_wp_remote', 1, home_url() );\n+\t\t$args     = [\n+\t\t\t'timeout' => 30,\n+\t\t];\n+\t\t$result   = wp_remote_post( $test_url, $args );\n+\t\t$body     = ! is_wp_error( $result ) ? wp_remote_retrieve_body( $result ) : $result;\n+\n+\t\treturn $body === '[TEST_REMOTE]' ? true : $body;\n+\t}\n+\n+\t\u002F**\n+\t * Add new notice to show in admin page.\n+\t *\n+\t * @since 3.2.6\n+\t *\n+\t * @param string|WP_Error $message\n+\t * @param string          $type\n+\t * @param bool            $dismissible\n+\t * @param string          $id\n+\t * @param bool            $redirect\n+\t * @param bool            $override\n+\t *\n+\t * @return boolean\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function add( $message, $type = 'success', $dismissible = true, $id = '', $redirect = false, $override = false ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\treturn false;\n+\t\tif ( ! $id ) {\n+\t\t\t$id = uniqid();\n+\t\t}\n+\n+\t\tif ( empty( $this->notices[ $id ] ) || $override ) {\n+\t\t\t$this->notices[ $id ] = array(\n+\t\t\t\t'message'     => $message,\n+\t\t\t\t'type'        => $type ? $type : 'success',\n+\t\t\t\t'redirect'    => $redirect,\n+\t\t\t\t'dismissible' => $dismissible,\n+\t\t\t);\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Remove one or more notices from queue by ids.\n+\t *\n+\t * @since 3.2.6\n+\t *\n+\t * @param string|array $notice\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic function remove( $notice ) {\n+\t\tsettype( $notice, 'array' );\n+\n+\t\tif ( ! $this->notices ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tforeach ( $notice as $id ) {\n+\t\t\tif ( ! empty( $this->notices[ $id ] ) ) {\n+\t\t\t\tunset( $this->notices[ $id ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Also remove in db\n+\t\t$redirects = get_option( $this->option_id );\n+\t\tif ( $redirects ) {\n+\t\t\tforeach ( $notice as $id ) {\n+\t\t\t\tif ( ! empty( $redirects[ $id ] ) ) {\n+\t\t\t\t\tunset( $redirects[ $id ] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tupdate_option( $this->option_id, $redirects );\n+\t\t}\n+\n+\t\treturn $this->notices;\n+\t}\n+\n+\t\u002F**\n+\t * Clear all notices.\n+\t *\n+\t * @since 3.2.6\n+\t *\u002F\n+\tpublic function clear() {\n+\t\t$this->notices = array();\n+\t\tdelete_option( $this->option_id );\n+\t}\n+\n+\t\u002F**\n+\t * Get single instance of this class\n+\t *\n+\t * @since 3.2.6\n+\t *\n+\t * @return LP_Admin_Notice\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+LP_Admin_Notice::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,953 +1,996 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FClasses\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Background\\LPBackgroundAjax;\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'LP_Admin' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Admin\r\n-\t *\u002F\r\n-\tclass LP_Admin {\r\n-\t\tprotected static $instance;\r\n-\r\n-\t\tprotected $pages = [];\r\n-\r\n-\t\t\u002F**\r\n-\t\t *  Constructor\r\n-\t\t *\u002F\r\n-\t\tprotected function __construct() {\r\n-\t\t\t$this->pages = [\r\n-\t\t\t\t'courses'           => __( 'Courses', 'learnpress' ),\r\n-\t\t\t\t'instructors'       => __( 'Instructors', 'learnpress' ),\r\n-\t\t\t\t'single_instructor' => __( 'Single Instructors', 'learnpress' ),\r\n-\t\t\t\t'profile'           => __( 'Profile', 'learnpress' ),\r\n-\t\t\t\t'checkout'          => __( 'Checkout', 'learnpress' ),\r\n-\t\t\t\t'become_a_teacher'  => __( 'Become an Instructor', 'learnpress' ),\r\n-\t\t\t];\r\n-\t\t\t$this->includes();\r\n-\t\t\tadd_action( 'delete_user', array( $this, 'delete_user_data' ) );\r\n-\t\t\t\u002F\u002Fadd_action( 'delete_user_form', array( $this, 'delete_user_form' ) );\r\n-\t\t\tadd_action( 'all_admin_notices', array( $this, 'admin_notices' ), - 1 );\r\n-\t\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'load_modal' ) );\r\n-\t\t\tadd_filter( 'admin_body_class', array( $this, 'body_class' ) );\r\n-\t\t\t\u002F\u002Fadd_filter( 'manage_users_custom_column', array( $this, 'users_custom_column' ), 10, 3 );\r\n-\t\t\t\u002F\u002Fadd_filter( 'manage_pages_columns', array( $this, 'page_columns_head' ) );\r\n-\t\t\t\u002F\u002Fadd_filter( 'manage_pages_custom_column', array( $this, 'page_columns_content' ), 10, 2 );\r\n-\t\t\tadd_filter( 'views_edit-page', array( $this, 'views_pages' ), 10 );\r\n-\t\t\tadd_filter( 'views_users', array( $this, 'views_users' ), 10, 1 );\r\n-\t\t\tadd_filter( 'user_row_actions', array( $this, 'user_row_actions' ), 10, 2 );\r\n-\t\t\tadd_filter( 'get_pages', array( $this, 'add_empty_page' ), 1000, 2 );\r\n-\t\t\tadd_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 1 );\r\n-\t\t\tadd_filter( 'views_plugins', array( $this, 'views_plugins' ) );\r\n-\r\n-\t\t\tLP_Request::register( 'lp-action', array( $this, 'filter_users' ) );\r\n-\r\n-\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items-args', array( $this, 'filter_modal_search' ) );\r\n-\r\n-\t\t\t\u002F*add_filter(\r\n-\t\t\t\t'learn-press\u002Fdismissed-notice-response',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t$this,\r\n-\t\t\t\t\t'on_dismissed_notice_response',\r\n-\t\t\t\t),\r\n-\t\t\t\t10,\r\n-\t\t\t\t2\r\n-\t\t\t);*\u002F\r\n-\r\n-\t\t\t\u002F\u002F get list items course of user | tungnx\r\n-\t\t\tadd_action( 'pre_get_posts', array( $this, 'get_course_items_of_user_backend' ), 10 );\r\n-\t\t\tadd_action( 'pre_get_posts', array( $this, 'get_pages_of_lp' ), 10 );\r\n-\r\n-\t\t\t\u002F\u002F Set link item course when edit on Backend | tungnx\r\n-\t\t\tadd_filter( 'get_sample_permalink_html', array( $this, 'lp_course_set_link_item_backend' ), 10, 5 );\r\n-\r\n-\t\t\t\u002F*add_action(\r\n-\t\t\t\t'admin_init',\r\n-\t\t\t\tfunction () {\r\n-\t\t\t\t\t\u002F\u002F From LP v4.2.3 temporary run create pages to add page instructors, single instructor for client upgrade LP.\r\n-\t\t\t\t\t\u002F\u002F After a long time, will remove this code.\r\n-\t\t\t\t\tif ( is_admin() && ! defined( 'DOING_AJAX' ) ) {\r\n-\t\t\t\t\t\tLP_Install::create_pages();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t);*\u002F\r\n-\r\n-\t\t\tadd_filter( 'users_list_table_query_args', [ $this, 'exclude_temp_users' ] );\r\n-\r\n-\t\t\t\u002F\u002F Show label 'LearnPress Page' for page of LearnPress.\r\n-\t\t\t\u002F\u002Fadd_filter('post_states_html');\r\n-\t\t\tadd_filter( 'display_post_states', [ $this, 'show_label_page_type' ], 10, 2 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @since 3.2.6\r\n-\t\t *\u002F\r\n-\t\tpublic function load_modal() {\r\n-\t\t\t\u002F\u002F Now only add item(s) when create new Order is using.\r\n-\t\t\tif ( in_array( get_post_type(), array( LP_ORDER_CPT ) ) ) {\r\n-\t\t\t\tLP_Modal_Search_Items::instance();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F*if ( in_array( get_post_type(), array( LP_ORDER_CPT ) ) ) {\r\n-\t\t\t\tLP_Modal_Search_Users::instance();\r\n-\t\t\t}*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $options\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function filter_modal_search( $options ) {\r\n-\t\t\t$options = wp_parse_args( array( 'title' => __( 'Available Courses', 'learnpress' ) ), $options );\r\n-\r\n-\t\t\treturn $options;\r\n-\t\t}\r\n-\r\n-\t\tpublic function add_empty_page( $pages, $args ) {\r\n-\t\t\tif ( empty( $pages ) && ! empty( $args['class'] ) && strpos( $args['class'], 'lp-list-pages' ) !== false ) {\r\n-\t\t\t\t$empty_page     = get_default_post_to_edit( 'page' );\r\n-\t\t\t\t$empty_page->ID = '00000';\r\n-\t\t\t\t$pages[]        = $empty_page;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $pages;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add 'LearnPress' tab into views of plugins manage.\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function views_plugins( $views ) {\r\n-\t\t\tglobal $s;\r\n-\r\n-\t\t\t$search          = $this->get_addons();\r\n-\t\t\t$count_activated = 0;\r\n-\r\n-\t\t\t$active_plugins = get_option( 'active_plugins' );\r\n-\r\n-\t\t\tif ( $active_plugins ) {\r\n-\t\t\t\tif ( $search ) {\r\n-\t\t\t\t\tforeach ( $search as $k => $v ) {\r\n-\t\t\t\t\t\tif ( in_array( $k, $active_plugins ) ) {\r\n-\t\t\t\t\t\t\t++ $count_activated;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $s && false !== stripos( $s, 'learnpress' ) ) {\r\n-\t\t\t\t$views['learnpress'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"current\">%s \u003Cspan class=\"count\">(%d\u002F%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'plugins.php?s=learnpress' ),\r\n-\t\t\t\t\t__( 'LearnPress', 'learnpress' ),\r\n-\t\t\t\t\t$count_activated,\r\n-\t\t\t\t\tsizeof( $search )\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$views['learnpress'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">%s \u003Cspan class=\"count\">(%d\u002F%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'plugins.php?s=learnpress' ),\r\n-\t\t\t\t\t__( 'LearnPress', 'learnpress' ),\r\n-\t\t\t\t\t$count_activated,\r\n-\t\t\t\t\tsizeof( $search )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_addons() {\r\n-\t\t\t$all_plugins = apply_filters( 'all_plugins', get_plugins() );\r\n-\r\n-\t\t\treturn array_filter( $all_plugins, array( $this, '_search_callback' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Callback function for searching plugins have 'learnpress' inside.\r\n-\t\t *\r\n-\t\t * @param array $plugin\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function _search_callback( $plugin ) {\r\n-\t\t\tforeach ( $plugin as $value ) {\r\n-\t\t\t\tif ( is_string( $value ) && false !== stripos( strip_tags( $value ), 'learnpress' ) ) {\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a page is set for WooCommerce.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\t\u002F*protected function _is_wc_page( $id ) {\r\n-\t\t\tif ( class_exists( 'WooCommerce' ) ) {\r\n-\t\t\t\tif ( ! class_exists( 'WC_Admin_Post_Types' ) ) {\r\n-\t\t\t\t\tinclude_once dirname( WC_PLUGIN_FILE ) . '\u002Fincludes\u002Fadmin\u002Fclass-wc-admin-post-types.php';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$wc_admin_post_types = new WC_Admin_Post_Types();\r\n-\t\t\t\tif ( is_callable( array( $wc_admin_post_types, 'add_display_post_states' ) ) ) {\r\n-\t\t\t\t\t$a = $wc_admin_post_types->add_display_post_states( array(), get_post( $id ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$a = $this->wc_add_display_post_states( array(), get_post( $id ) );\r\n-\t\t\t\t}\r\n-\t\t\t\t$wc_pages = array(\r\n-\t\t\t\t\t'wc_page_for_shop',\r\n-\t\t\t\t\t'wc_page_for_cart',\r\n-\t\t\t\t\t'wc_page_for_checkout',\r\n-\t\t\t\t\t'wc_page_for_myaccount',\r\n-\t\t\t\t\t'wc_page_for_terms',\r\n-\t\t\t\t);\r\n-\t\t\t\tforeach ( $wc_pages as $for_page ) {\r\n-\t\t\t\t\tif ( isset( $a[ $for_page ] ) ) {\r\n-\t\t\t\t\t\treturn $a[ $for_page ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F*public function wc_add_display_post_states( $post_states, $post ) {\r\n-\t\t\tif ( wc_get_page_id( 'shop' ) === $post->ID ) {\r\n-\t\t\t\t$post_states['wc_page_for_shop'] = __( 'Shop Page', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( wc_get_page_id( 'cart' ) === $post->ID ) {\r\n-\t\t\t\t$post_states['wc_page_for_cart'] = __( 'Cart Page', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( wc_get_page_id( 'checkout' ) === $post->ID ) {\r\n-\t\t\t\t$post_states['wc_page_for_checkout'] = __( 'Checkout Page', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( wc_get_page_id( 'myaccount' ) === $post->ID ) {\r\n-\t\t\t\t$post_states['wc_page_for_myaccount'] = __( 'My Account Page', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( wc_get_page_id( 'terms' ) === $post->ID ) {\r\n-\t\t\t\t$post_states['wc_page_for_terms'] = __( 'Terms and Conditions Page', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $post_states;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a page is set for Paid Membership Pro.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\t\u002F*protected function _is_pmpro_page( $id ) {\r\n-\t\t\tglobal $pmpro_pages;\r\n-\t\t\tif ( $pmpro_pages ) {\r\n-\t\t\t\t$pages = array(\r\n-\t\t\t\t\t'account'      => __( 'Account', 'learnpress' ),\r\n-\t\t\t\t\t'billing'      => __( 'Billing', 'learnpress' ),\r\n-\t\t\t\t\t'cancel'       => __( 'Cancel', 'learnpress' ),\r\n-\t\t\t\t\t'checkout'     => __( 'Checkout', 'learnpress' ),\r\n-\t\t\t\t\t'confirmation' => __( 'Confirmation', 'learnpress' ),\r\n-\t\t\t\t\t'invoice'      => __( 'Invoice', 'learnpress' ),\r\n-\t\t\t\t\t'levels'       => __( 'Levels', 'learnpress' ),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tforeach ( $pages as $name => $text ) {\r\n-\t\t\t\t\tif ( $pmpro_pages[ $name ] == $id ) {\r\n-\t\t\t\t\t\treturn $text;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a page is set for Paid Membership Pro.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\t\u002F*protected function _is_bp_page( $id ) {\r\n-\t\t\tif ( function_exists( 'buddypress' ) ) {\r\n-\t\t\t\t$bp_pages = get_option( 'bp-pages' );\r\n-\t\t\t\tif ( ! $bp_pages ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$pages = array(\r\n-\t\t\t\t\t'members'  => __( 'Members', 'learnpress' ),\r\n-\t\t\t\t\t'activity' => __( 'Activity', 'learnpress' ),\r\n-\t\t\t\t\t'register' => __( 'Register', 'learnpress' ),\r\n-\t\t\t\t\t'activate' => __( 'Activate', 'learnpress' ),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tforeach ( $pages as $name => $text ) {\r\n-\t\t\t\t\tif ( isset( $bp_pages[ $name ] ) && $bp_pages[ $name ] == $id ) {\r\n-\t\t\t\t\t\treturn $text;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get pages is publish set by LearnPress.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _get_static_pages(): array {\r\n-\t\t\t$static_pages = [];\r\n-\t\t\tforeach ( $this->pages as $name => $title ) {\r\n-\t\t\t\t$page_id = learn_press_get_page_id( $name );\r\n-\r\n-\t\t\t\tif ( $page_id && 'publish' === get_post_status( $page_id ) ) {\r\n-\t\t\t\t\t$static_pages[ $page_id ] = $title;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $static_pages;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Show label LearnPress Page for pages set by LearnPress.\r\n-\t\t *\r\n-\t\t * @param array $post_states\r\n-\t\t * @param WP_Post $post\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.3.2.6\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function show_label_page_type( $post_states, $post ) {\r\n-\t\t\t$post_type = get_post_type( $post );\r\n-\t\t\tif ( $post_type !== 'page' ) {\r\n-\t\t\t\treturn $post_states;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$page_id_compare = $post->ID;\r\n-\t\t\tforeach ( $this->_get_static_pages() as $page_id => $title ) {\r\n-\t\t\t\tif ( $page_id == $page_id_compare ) {\r\n-\t\t\t\t\t$post_states['lp_page'] = sprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"is-lp-page\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t'LearnPress ' . $title . ' Page'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $post_states;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add new column to WP Pages manage to show what page is assigned to.\r\n-\t\t *\r\n-\t\t * @param array $columns\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function page_columns_head( $columns ) {\r\n-\r\n-\t\t\t$_columns = $columns;\r\n-\t\t\t$columns  = array();\r\n-\r\n-\t\t\tforeach ( $_columns as $name => $text ) {\r\n-\t\t\t\tif ( $name === 'date' ) {\r\n-\t\t\t\t\t$columns['lp-page'] = __( 'LearnPress Page', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$columns[ $name ] = $text;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display the page is assigned to LP Page.\r\n-\t\t *\r\n-\t\t * @param string $column_name\r\n-\t\t * @param int $post\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function page_columns_content( $column_name, $post ) {\r\n-\t\t\t$pages = $this->_get_static_pages();\r\n-\t\t\tswitch ( $column_name ) {\r\n-\t\t\t\tcase 'lp-page':\r\n-\t\t\t\t\tif ( ! empty( $pages['learnpress'][ $post ] ) ) {\r\n-\t\t\t\t\t\techo wp_kses_post( $pages['learnpress'][ $post ] );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $pages as $plugin => $plugin_pages ) {\r\n-\t\t\t\t\t\tif ( $plugin === 'learnpress' ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( ! empty( $pages[ $plugin ][ $post ] ) ) {\r\n-\t\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t\t'\u003Cp class=\"for-plugin-page\">(%s - %s)\u003C\u002Fp>',\r\n-\t\t\t\t\t\t\t\t$plugin,\r\n-\t\t\t\t\t\t\t\t$pages[ $plugin ][ $post ]\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $actions\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function views_pages( $actions ) {\r\n-\t\t\t$pages = $this->_get_static_pages();\r\n-\r\n-\t\t\tif ( $pages ) {\r\n-\t\t\t\t$text = sprintf( __( 'LearnPress Pages (%d)', 'learnpress' ), sizeof( $pages ) );\r\n-\t\t\t\tif ( 'yes' !== LP_Request::get_param( 'lp-page' ) ) {\r\n-\t\t\t\t\t$actions['lp-page'] = sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tadmin_url( 'edit.php?post_type=page&lp-page=yes' ),\r\n-\t\t\t\t\t\t$text\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$actions['lp-page'] = $text;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $actions;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get pages set by LP with param url lp-page=yes\r\n-\t\t *\r\n-\t\t * @param WP_Query $q\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_pages_of_lp( $q ) {\r\n-\t\t\tif ( ! is_admin() || ! $q->is_main_query() ) {\r\n-\t\t\t\treturn $q;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 'page' == LP_Request::get_param( 'post_type' ) && 'yes' == LP_Request::get_param( 'lp-page' ) ) {\r\n-\t\t\t\t$ids = $this->_get_static_pages();\r\n-\r\n-\t\t\t\tif ( ! empty( $ids ) ) {\r\n-\t\t\t\t\t$ids = array_keys( $ids );\r\n-\t\t\t\t\t$q->set( 'post__in', $ids );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $q;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add actions to users list\r\n-\t\t *\r\n-\t\t * @param array $actions\r\n-\t\t * @param WP_User $user\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function user_row_actions( $actions, $user ) {\r\n-\t\t\t$pending_request = self::get_pending_requests();\r\n-\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' && $pending_request ) {\r\n-\t\t\t\t$actions = array();\r\n-\t\t\t\t$nonce   = 'nonce=' . wp_create_nonce( 'lp-action-permit-role-teacher' );\r\n-\t\t\t\tif ( in_array( $user->ID, $pending_request ) ) {\r\n-\t\t\t\t\t$actions['accept']      = sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tadmin_url( \"users.php?lp-action=accept-request&user_id={$user->ID}&{$nonce}\" ),\r\n-\t\t\t\t\t\t_x( 'Accept', 'pending-request', 'learnpress' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$actions['delete deny'] = sprintf(\r\n-\t\t\t\t\t\t'\u003Ca class=\"submitdelete\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tadmin_url( \"users.php?lp-action=deny-request&user_id={$user->ID}&{$nonce}\" ),\r\n-\t\t\t\t\t\t_x( 'Deny', 'pending-request', 'learnpress' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $actions;\r\n-\t\t}\r\n-\r\n-\t\tpublic function exclude_temp_users( $args ) {\r\n-\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' ) {\r\n-\t\t\t\t$args['include'] = self::get_pending_requests();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get pending requests be come a Teacher.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_pending_requests() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT ID\r\n-\t\t\t\tFROM {$wpdb->users} u\r\n-\t\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s\r\n-\t\t\t\tWHERE um.meta_value = %s\r\n-\t\t\t\t\",\r\n-\t\t\t\t'_requested_become_teacher',\r\n-\t\t\t\t'yes'\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $wpdb->get_col( $query );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filter user by custom param\r\n-\t\t *\r\n-\t\t * @param string $action\r\n-\t\t *\u002F\r\n-\t\tpublic function filter_users( $action ) {\r\n-\t\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id = LP_Request::get_param( 'user_id', 'int' );\r\n-\t\t\tif ( ! $user_id || ! get_user_by( 'id', $user_id ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-action-permit-role-teacher' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_data = get_userdata( $user_id );\r\n-\t\t\tif ( in_array( $action, array( 'accept-request', 'deny-request' ) ) ) {\r\n-\t\t\t\tdelete_user_meta( $user_id, '_requested_become_teacher' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $action ) {\r\n-\t\t\t\tcase 'accept-request':\r\n-\t\t\t\t\t$be_teacher = new WP_User( $user_id );\r\n-\t\t\t\t\t$be_teacher->set_role( LP_TEACHER_ROLE );\r\n-\r\n-\t\t\t\t\t\u002F**\r\n-\t\t\t\t\t * Send email to user when admin accept user become a teacher\r\n-\t\t\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_accept\r\n-\t\t\t\t\t *\u002F\r\n-\t\t\t\t\t$data_send = [\r\n-\t\t\t\t\t\t'params'       => [ $user_data->user_email ],\r\n-\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_accept',\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fuser-become-a-teacher-accept', $user_data->user_email );\r\n-\t\t\t\t\twp_redirect( admin_url( 'users.php?lp-action=accepted-request&user_id=' . $user_id ) );\r\n-\t\t\t\t\texit();\r\n-\t\t\t\tcase 'deny-request':\r\n-\t\t\t\t\t\u002F**\r\n-\t\t\t\t\t * Send email to user when admin accept user become a teacher\r\n-\t\t\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_deny\r\n-\t\t\t\t\t *\u002F\r\n-\t\t\t\t\t$data_send = [\r\n-\t\t\t\t\t\t'params'       => [ $user_data->user_email ],\r\n-\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_deny',\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fuser-become-a-teacher-deny', $user_data->user_email );\r\n-\t\t\t\t\twp_redirect( admin_url( 'users.php?lp-action=denied-request&user_id=' . $user_id ) );\r\n-\t\t\t\t\texit();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function users_custom_column( $content, $column_name, $user_id ) {\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add new view to users views for filtering user by \"pending request\" of \"become a teacher\".\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function views_users( $views ) {\r\n-\t\t\t$pending_request = self::get_pending_requests();\r\n-\r\n-\t\t\tif ( $pending_request ) {\r\n-\t\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' ) {\r\n-\t\t\t\t\t$class = ' class=\"current\"';\r\n-\t\t\t\t\tforeach ( $views as $k => $view ) {\r\n-\t\t\t\t\t\t$views[ $k ] = preg_replace( '!class=\"current\"!', '', $view );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$class = '';\r\n-\t\t\t\t}\r\n-\t\t\t\t$views['pending-request'] = '\u003Ca href=\"' . admin_url( 'users.php?lp-action=pending-request' ) . '\"' . $class . '>' . sprintf(\r\n-\t\t\t\t\t__(\r\n-\t\t\t\t\t\t'Pending Request %s',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'\u003Cspan class=\"count\">(' . count( $pending_request ) . ')\u003C\u002Fspan>'\r\n-\t\t\t\t) . '\u003C\u002Fa>';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Custom admin body classes.\r\n-\t\t *\r\n-\t\t * @param array $classes\r\n-\t\t *\r\n-\t\t * @return array|string\r\n-\t\t *\u002F\r\n-\t\tpublic function body_class( $classes ) {\r\n-\t\t\t$post_type = get_post_type();\r\n-\r\n-\t\t\tif ( preg_match( '~^lp_~', $post_type ) ) {\r\n-\t\t\t\tif ( $classes ) {\r\n-\t\t\t\t\t$classes = explode( ' ', $classes );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$classes = array();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$classes[] = 'learnpress';\r\n-\t\t\t\t$classes   = array_filter( $classes );\r\n-\t\t\t\t$classes   = array_unique( $classes );\r\n-\t\t\t\t$classes   = join( ' ', $classes );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $classes;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display notices on Backend.\r\n-\t\t *\u002F\r\n-\t\tpublic function admin_notices() {\r\n-\t\t\tif ( function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\t$wp_screen = get_current_screen();\r\n-\t\t\t\t\u002F\u002F Not run on course edit screen, it slows, can affect performance edit course.\r\n-\t\t\t\tif ( $wp_screen->id === LP_COURSE_CPT ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Show template file templates override.\r\n-\t\t\t$page = LP_Request::get_param( 'page' );\r\n-\t\t\t$tab  = LP_Request::get_param( 'tab' );\r\n-\t\t\tif ( $page == 'learn-press-tools' && $tab == 'templates' ) {\r\n-\t\t\t\tif ( LP_Outdated_Template_Helper::detect_outdated_template() ) {\r\n-\t\t\t\t\tlearn_press_admin_view( 'html-admin-notice-templates' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Request accept\u002Fdenied user can become a teacher.\r\n-\t\t\t$action_become_teacher      = LP_Request::get_param( 'lp-action' );\r\n-\t\t\t$user_id                    = LP_Request::get_param( 'user_id', 0, 'int' );\r\n-\t\t\t$type_action_become_teacher = array( 'accepted-request', 'denied-request' );\r\n-\t\t\tif ( in_array( $action_become_teacher, $type_action_become_teacher ) && $user_id && get_user_by( 'id', $user_id ) ) {\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cdiv class=\"updated notice\">\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t__( 'A user has %s to become a teacher.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$action_become_teacher == 'accepted-request' ? 'accepted' : 'denied'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_admin_view( 'admin-notices.php', [], true );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Admin footer add review.\r\n-\t\t *\r\n-\t\t * @param $footer_text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function admin_footer_text( $footer_text ) {\r\n-\t\t\t$current_screen = get_current_screen();\r\n-\t\t\t$pages          = learn_press_get_screens();\r\n-\r\n-\t\t\tif ( isset( $current_screen->id ) && apply_filters(\r\n-\t\t\t\t'learn_press_display_admin_footer_text',\r\n-\t\t\t\tin_array( $current_screen->id, $pages )\r\n-\t\t\t) ) {\r\n-\t\t\t\tif ( ! get_option( 'learn_press_message_user_rated' ) ) {\r\n-\t\t\t\t\t$footer_text = sprintf(\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'If you like \u003Cstrong>LearnPress\u003C\u002Fstrong> please leave us a %1$s&#9733;&#9733;&#9733;&#9733;&#9733;%2$s rating. A huge thanks from the LearnPress team for your generosity.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Flearnpress\u002Freviews\u002F?filter=5#postform\" target=\"_blank\" class=\"lp-rating-link\" data-rated=\"' . esc_attr__(\r\n-\t\t\t\t\t\t\t'Thanks :)',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t) . '\">',\r\n-\t\t\t\t\t\t'\u003C\u002Fa>'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $footer_text;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*function delete_user_form() {\r\n-\t\t\t\u002F\u002F What should be displayed here?\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete records related user being deleted in other tables\r\n-\t\t *\r\n-\t\t * @param int $user_id\r\n-\t\t *\u002F\r\n-\t\tfunction delete_user_data( $user_id ) {\r\n-\t\t\tlearn_press_delete_user_data( $user_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Send data to join newsletter or dismiss.\r\n-\t\t *\r\n-\t\t * @param array $data\r\n-\t\t * @param string $notice\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.10\r\n-\t\t * @deprecated 4.2.3.1\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function on_dismissed_notice_response( $data, $notice ) {\r\n-\t\t\tswitch ( $notice ) {\r\n-\t\t\t\tcase 'skip-setup-wizard':\r\n-\t\t\t\t\tdelete_option( 'learn_press_install' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'newsletter-button':\r\n-\t\t\t\t\t$context = LP_Request::get_string( 'context' );\r\n-\t\t\t\t\tif ( ! $context || $context != 'newsletter' ) {\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t\t\tif ( ! $user || $user->get_email() == '' ) {\r\n-\t\t\t\t\t\t$data['error'] = __( 'Failed while joining the newsletter! Please try again!', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$url      = 'https:\u002F\u002Fthimpress.com\u002Fmailster\u002Fsubscribe';\r\n-\t\t\t\t\t$response = wp_remote_post(\r\n-\t\t\t\t\t\t$url,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'method'      => 'POST',\r\n-\t\t\t\t\t\t\t'timeout'     => 45,\r\n-\t\t\t\t\t\t\t'redirection' => 5,\r\n-\t\t\t\t\t\t\t'httpversion' => '1.0',\r\n-\t\t\t\t\t\t\t'blocking'    => true,\r\n-\t\t\t\t\t\t\t'headers'     => array(),\r\n-\t\t\t\t\t\t\t'body'        => array(\r\n-\t\t\t\t\t\t\t\t'_referer' => 'extern',\r\n-\t\t\t\t\t\t\t\t'_nonce'   => '4b266caf7b',\r\n-\t\t\t\t\t\t\t\t'formid'   => '19',\r\n-\t\t\t\t\t\t\t\t'email'    => $user->get_email(),\r\n-\t\t\t\t\t\t\t\t'website'  => site_url(),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'cookies'     => array(),\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( is_wp_error( $response ) ) {\r\n-\t\t\t\t\t\t$error_message   = $response->get_error_message();\r\n-\t\t\t\t\t\t$data['message'] = __( 'Something went wrong: ', 'learnpress' ) . $error_message;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$data['message'] = __(\r\n-\t\t\t\t\t\t\t'Thank you for subscribing! Please check and click the confirmation link from the email that we\\'ve just sent to your inbox.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Include all classes and functions used for admin\r\n-\t\t *\u002F\r\n-\t\tpublic function includes() {\r\n-\t\t\t\u002F\u002F Common function used in admin\r\n-\t\t\tinclude_once 'lp-admin-functions.php';\r\n-\t\t\tinclude_once 'lp-admin-actions.php';\r\n-\t\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fbackground-process\u002Fclass-lp-background-query-items.php';\r\n-\t\t\tinclude_once 'class-lp-admin-assets.php';\r\n-\t\t\tLP_Admin_Assets::instance();\r\n-\t\t\tinclude_once 'class-lp-admin-mcp-api-keys.php';\r\n-\t\t\tLP_Admin_MCP_API_Keys::instance();\r\n-\t\t\tinclude_once 'class-lp-admin-dashboard.php';\r\n-\t\t\t\u002F\u002F include_once 'class-lp-admin-tools.php';\r\n-\t\t\tinclude_once 'class-lp-admin-ajax.php';\r\n-\t\t\tinclude_once 'editor\u002Fclass-lp-admin-editor.php';\r\n-\t\t\tinclude_once 'class-lp-admin-menu.php';\r\n-\t\t\tinclude_once 'helpers\u002Fclass-lp-outdated-template-helper.php';\r\n-\t\t\tinclude_once 'helpers\u002Fclass-lp-plugins-helper.php';\r\n-\t\t\tinclude_once 'class-lp-modal-search-items.php';\r\n-\t\t\t\u002F\u002Finclude_once 'class-lp-modal-search-users.php';\r\n-\t\t\tinclude_once 'class-lp-setup-wizard.php';\r\n-\t\t\t\u002F\u002F include_once 'class-lp-updater.php';\r\n-\t\t\tinclude_once 'class-lp-install-sample-data.php';\r\n-\t\t\tinclude_once 'class-lp-reset-data.php';\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php';\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php';\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php';\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php';\r\n-\t\t\t\u002F\u002Finclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get courses, item's courses on Backend page post_type\r\n-\t\t *\r\n-\t\t * @param WP_Query $query\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_items_of_user_backend( WP_Query $query ) {\r\n-\t\t\tif ( ! $query->is_main_query() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $post_type, $pagenow;\r\n-\r\n-\t\t\tif ( current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! current_user_can( LP_TEACHER_ROLE ) || ( $pagenow != 'edit.php' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_type_valid = apply_filters(\r\n-\t\t\t\t'learn-press\u002Ffilter-user-access-types',\r\n-\t\t\t\tarray( LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT )\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! in_array( $post_type, $post_type_valid ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F $query->set( 'author', get_current_user_id() );\r\n-\r\n-\t\t\t$query = apply_filters( 'learnpress\u002Fget-post-type-lp-on-backend', $query );\r\n-\r\n-\t\t\t\u002F\u002Fadd_filter( 'views_edit-' . $post_type . '', '_learn_press_restrict_view_items', 10 );\r\n-\t\t\t\u002F\u002Fremove_filter( 'pre_get_posts', array( $this, 'get_course_items_of_user_backend' ), 10 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set link item of course when edit item on Backend\r\n-\t\t *\r\n-\t\t * @param string $post_link\r\n-\t\t * @param int $post_id\r\n-\t\t * @param string $new_title\r\n-\t\t * @param string $new_slug\r\n-\t\t * @param WP_Post|null $post\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @author tungnx\r\n-\t\t * @since  3.2.7.5\r\n-\t\t * @version 4.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( in_array( $post->post_type, CourseModel::item_types_support() ) ) {\r\n-\t\t\t\t\t$course_id_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID );\r\n-\t\t\t\t\tif ( $course_id_of_item ) {\r\n-\t\t\t\t\t\t$course = learn_press_get_course( $course_id_of_item );\r\n-\t\t\t\t\t\tif ( $course ) {\r\n-\t\t\t\t\t\t\t$link_item           = urldecode( $course->get_item_link( $post->ID ) );\r\n-\t\t\t\t\t\t\t$post_slug           = $post->post_name;\r\n-\t\t\t\t\t\t\t$link_item_edit_slug = preg_replace( '\u002F' . $post_slug . '$\u002F', '', $link_item );\r\n-\r\n-\t\t\t\t\t\t\t\u002F\u002F For update new slug\r\n-\t\t\t\t\t\t\tif ( $new_slug ) {\r\n-\t\t\t\t\t\t\t\t$post_slug = $new_slug;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t$post_slug = urldecode( $post_slug );\r\n-\r\n-\t\t\t\t\t\t\t$slug_arr   = explode( '\u002F', $link_item_edit_slug );\r\n-\t\t\t\t\t\t\t$count_slug = count( $slug_arr );\r\n-\t\t\t\t\t\t\tunset( $slug_arr[ $count_slug - 2 ] );\r\n-\t\t\t\t\t\t\t$link_item_edit_slug = implode( '\u002F', $slug_arr );\r\n-\r\n-\t\t\t\t\t\t\t$post_link  = '\u003Cstrong>Permalink: \u003C\u002Fstrong>';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003Cspan id=\"sample-permalink\">';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003Ca href=\"' . $link_item . '\">' . $link_item_edit_slug . '\u003Cspan id=\"editable-post-name\">' . $post_slug . '\u003C\u002Fspan>\u002F\u003C\u002Fa>';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\t$post_link .= '&lrm;\u003Cspan id=\"edit-slug-buttons\">';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003Cbutton type=\"button\" class=\"edit-slug button button-small hide-if-no-js\" aria-label=\"Edit permalink\">Edit\u003C\u002Fbutton>';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\t$post_link .= '\u003Cspan id=\"editable-post-name-full\">' . $post_slug . '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$post_link_message = '\u003Cspan>' . __(\r\n-\t\t\t\t\t\t\t'Permalink is only available if the item is already assigned to a course.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t) . '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t$post_link         = sprintf( '\u003Cdiv id=\"learn-press-box-edit-slug\">%s\u003C\u002Fdiv>', $post_link_message );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( LP_COURSE_CPT === get_post_type( $post ) ) {\r\n-\t\t\t\t\t$post_link = LP_Helper::handle_lp_permalink_structure( $post_link, $post );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $post_link;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return false|string\r\n-\t\t * @since 3.2.8\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_screen_id() {\r\n-\t\t\tglobal $current_screen;\r\n-\r\n-\t\t\treturn $current_screen ? $current_screen->id : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get single instance of self\r\n-\t\t *\r\n-\t\t * @return bool|LP_Admin\r\n-\t\t * @return bool|LP_Admin\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$instance ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-return LP_Admin::instance();\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FClasses\n+ * @version 1.0.2\n+ *\u002F\n+\n+use LearnPress\\Background\\LPBackgroundAjax;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Course\\BuilderCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'LP_Admin' ) ) {\n+\t\u002F**\n+\t * Class LP_Admin\n+\t *\u002F\n+\tclass LP_Admin {\n+\t\tprotected static $instance;\n+\n+\t\tprotected $pages = [];\n+\n+\t\t\u002F**\n+\t\t *  Constructor\n+\t\t *\u002F\n+\t\tprotected function __construct() {\n+\t\t\t$this->pages = [\n+\t\t\t\t'courses'           => __( 'Courses', 'learnpress' ),\n+\t\t\t\t'instructors'       => __( 'Instructors', 'learnpress' ),\n+\t\t\t\t'single_instructor' => __( 'Single Instructors', 'learnpress' ),\n+\t\t\t\t'profile'           => __( 'Profile', 'learnpress' ),\n+\t\t\t\t'checkout'          => __( 'Checkout', 'learnpress' ),\n+\t\t\t\t'become_a_teacher'  => __( 'Become an Instructor', 'learnpress' ),\n+\t\t\t];\n+\t\t\t$this->includes();\n+\t\t\tadd_action( 'delete_user', array( $this, 'delete_user_data' ) );\n+\t\t\t\u002F\u002Fadd_action( 'delete_user_form', array( $this, 'delete_user_form' ) );\n+\t\t\tadd_action( 'all_admin_notices', array( $this, 'admin_notices' ), - 1 );\n+\t\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'load_modal' ) );\n+\t\t\tadd_filter( 'admin_body_class', array( $this, 'body_class' ) );\n+\t\t\t\u002F\u002Fadd_filter( 'manage_users_custom_column', array( $this, 'users_custom_column' ), 10, 3 );\n+\t\t\t\u002F\u002Fadd_filter( 'manage_pages_columns', array( $this, 'page_columns_head' ) );\n+\t\t\t\u002F\u002Fadd_filter( 'manage_pages_custom_column', array( $this, 'page_columns_content' ), 10, 2 );\n+\t\t\tadd_filter( 'views_edit-page', array( $this, 'views_pages' ), 10 );\n+\t\t\tadd_filter( 'views_users', array( $this, 'views_users' ), 10, 1 );\n+\t\t\tadd_filter( 'user_row_actions', array( $this, 'user_row_actions' ), 10, 2 );\n+\t\t\tadd_filter( 'get_pages', array( $this, 'add_empty_page' ), 1000, 2 );\n+\t\t\tadd_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ), 1 );\n+\t\t\tadd_filter( 'views_plugins', array( $this, 'views_plugins' ) );\n+\n+\t\t\tLP_Request::register( 'lp-action', array( $this, 'filter_users' ) );\n+\n+\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items-args', array( $this, 'filter_modal_search' ) );\n+\n+\t\t\t\u002F*add_filter(\n+\t\t\t\t'learn-press\u002Fdismissed-notice-response',\n+\t\t\t\tarray(\n+\t\t\t\t\t$this,\n+\t\t\t\t\t'on_dismissed_notice_response',\n+\t\t\t\t),\n+\t\t\t\t10,\n+\t\t\t\t2\n+\t\t\t);*\u002F\n+\n+\t\t\t\u002F\u002F get list items course of user | tungnx\n+\t\t\tadd_action( 'pre_get_posts', array( $this, 'get_course_items_of_user_backend' ), 10 );\n+\t\t\tadd_action( 'pre_get_posts', array( $this, 'get_pages_of_lp' ), 10 );\n+\n+\t\t\t\u002F\u002F Set link item course when edit on Backend | tungnx\n+\t\t\tadd_filter( 'get_sample_permalink_html', array( $this, 'lp_course_set_link_item_backend' ), 10, 5 );\n+\n+\t\t\t\u002F\u002F Add \"Edit with Course Builder\" button below title area for courses\n+\t\t\tadd_action( 'edit_form_after_title', array( $this, 'add_course_builder_button' ) );\n+\n+\t\t\t\u002F*add_action(\n+\t\t\t\t'admin_init',\n+\t\t\t\tfunction () {\n+\t\t\t\t\t\u002F\u002F From LP v4.2.3 temporary run create pages to add page instructors, single instructor for client upgrade LP.\n+\t\t\t\t\t\u002F\u002F After a long time, will remove this code.\n+\t\t\t\t\tif ( is_admin() && ! defined( 'DOING_AJAX' ) ) {\n+\t\t\t\t\t\tLP_Install::create_pages();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t);*\u002F\n+\n+\t\t\tadd_filter( 'users_list_table_query_args', [ $this, 'exclude_temp_users' ] );\n+\n+\t\t\t\u002F\u002F Show label 'LearnPress Page' for page of LearnPress.\n+\t\t\t\u002F\u002Fadd_filter('post_states_html');\n+\t\t\tadd_filter( 'display_post_states', [ $this, 'show_label_page_type' ], 10, 2 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @since 3.2.6\n+\t\t *\u002F\n+\t\tpublic function load_modal() {\n+\t\t\t\u002F\u002F Now only add item(s) when create new Order is using.\n+\t\t\tif ( in_array( get_post_type(), array( LP_ORDER_CPT ) ) ) {\n+\t\t\t\tLP_Modal_Search_Items::instance();\n+\t\t\t}\n+\n+\t\t\t\u002F*if ( in_array( get_post_type(), array( LP_ORDER_CPT ) ) ) {\n+\t\t\t\tLP_Modal_Search_Users::instance();\n+\t\t\t}*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $options\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function filter_modal_search( $options ) {\n+\t\t\t$options = wp_parse_args( array( 'title' => __( 'Available Courses', 'learnpress' ) ), $options );\n+\n+\t\t\treturn $options;\n+\t\t}\n+\n+\t\tpublic function add_empty_page( $pages, $args ) {\n+\t\t\tif ( empty( $pages ) && ! empty( $args['class'] ) && strpos( $args['class'], 'lp-list-pages' ) !== false ) {\n+\t\t\t\t$empty_page     = get_default_post_to_edit( 'page' );\n+\t\t\t\t$empty_page->ID = '00000';\n+\t\t\t\t$pages[]        = $empty_page;\n+\t\t\t}\n+\n+\t\t\treturn $pages;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add 'LearnPress' tab into views of plugins manage.\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function views_plugins( $views ) {\n+\t\t\tglobal $s;\n+\n+\t\t\t$search          = $this->get_addons();\n+\t\t\t$count_activated = 0;\n+\n+\t\t\t$active_plugins = get_option( 'active_plugins' );\n+\n+\t\t\tif ( $active_plugins ) {\n+\t\t\t\tif ( $search ) {\n+\t\t\t\t\tforeach ( $search as $k => $v ) {\n+\t\t\t\t\t\tif ( in_array( $k, $active_plugins ) ) {\n+\t\t\t\t\t\t\t++ $count_activated;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $s && false !== stripos( $s, 'learnpress' ) ) {\n+\t\t\t\t$views['learnpress'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"current\">%s \u003Cspan class=\"count\">(%d\u002F%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'plugins.php?s=learnpress' ),\n+\t\t\t\t\t__( 'LearnPress', 'learnpress' ),\n+\t\t\t\t\t$count_activated,\n+\t\t\t\t\tsizeof( $search )\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$views['learnpress'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">%s \u003Cspan class=\"count\">(%d\u002F%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'plugins.php?s=learnpress' ),\n+\t\t\t\t\t__( 'LearnPress', 'learnpress' ),\n+\t\t\t\t\t$count_activated,\n+\t\t\t\t\tsizeof( $search )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\tpublic function get_addons() {\n+\t\t\t$all_plugins = apply_filters( 'all_plugins', get_plugins() );\n+\n+\t\t\treturn array_filter( $all_plugins, array( $this, '_search_callback' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Callback function for searching plugins have 'learnpress' inside.\n+\t\t *\n+\t\t * @param array $plugin\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function _search_callback( $plugin ) {\n+\t\t\tforeach ( $plugin as $value ) {\n+\t\t\t\tif ( is_string( $value ) && false !== stripos( strip_tags( $value ), 'learnpress' ) ) {\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a page is set for WooCommerce.\n+\t\t *\n+\t\t * @param int $id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\t\u002F*protected function _is_wc_page( $id ) {\n+\t\t\tif ( class_exists( 'WooCommerce' ) ) {\n+\t\t\t\tif ( ! class_exists( 'WC_Admin_Post_Types' ) ) {\n+\t\t\t\t\tinclude_once dirname( WC_PLUGIN_FILE ) . '\u002Fincludes\u002Fadmin\u002Fclass-wc-admin-post-types.php';\n+\t\t\t\t}\n+\n+\t\t\t\t$wc_admin_post_types = new WC_Admin_Post_Types();\n+\t\t\t\tif ( is_callable( array( $wc_admin_post_types, 'add_display_post_states' ) ) ) {\n+\t\t\t\t\t$a = $wc_admin_post_types->add_display_post_states( array(), get_post( $id ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$a = $this->wc_add_display_post_states( array(), get_post( $id ) );\n+\t\t\t\t}\n+\t\t\t\t$wc_pages = array(\n+\t\t\t\t\t'wc_page_for_shop',\n+\t\t\t\t\t'wc_page_for_cart',\n+\t\t\t\t\t'wc_page_for_checkout',\n+\t\t\t\t\t'wc_page_for_myaccount',\n+\t\t\t\t\t'wc_page_for_terms',\n+\t\t\t\t);\n+\t\t\t\tforeach ( $wc_pages as $for_page ) {\n+\t\t\t\t\tif ( isset( $a[ $for_page ] ) ) {\n+\t\t\t\t\t\treturn $a[ $for_page ];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\t\u002F*public function wc_add_display_post_states( $post_states, $post ) {\n+\t\t\tif ( wc_get_page_id( 'shop' ) === $post->ID ) {\n+\t\t\t\t$post_states['wc_page_for_shop'] = __( 'Shop Page', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\tif ( wc_get_page_id( 'cart' ) === $post->ID ) {\n+\t\t\t\t$post_states['wc_page_for_cart'] = __( 'Cart Page', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\tif ( wc_get_page_id( 'checkout' ) === $post->ID ) {\n+\t\t\t\t$post_states['wc_page_for_checkout'] = __( 'Checkout Page', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\tif ( wc_get_page_id( 'myaccount' ) === $post->ID ) {\n+\t\t\t\t$post_states['wc_page_for_myaccount'] = __( 'My Account Page', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\tif ( wc_get_page_id( 'terms' ) === $post->ID ) {\n+\t\t\t\t$post_states['wc_page_for_terms'] = __( 'Terms and Conditions Page', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\treturn $post_states;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Check if a page is set for Paid Membership Pro.\n+\t\t *\n+\t\t * @param int $id\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\t\u002F*protected function _is_pmpro_page( $id ) {\n+\t\t\tglobal $pmpro_pages;\n+\t\t\tif ( $pmpro_pages ) {\n+\t\t\t\t$pages = array(\n+\t\t\t\t\t'account'      => __( 'Account', 'learnpress' ),\n+\t\t\t\t\t'billing'      => __( 'Billing', 'learnpress' ),\n+\t\t\t\t\t'cancel'       => __( 'Cancel', 'learnpress' ),\n+\t\t\t\t\t'checkout'     => __( 'Checkout', 'learnpress' ),\n+\t\t\t\t\t'confirmation' => __( 'Confirmation', 'learnpress' ),\n+\t\t\t\t\t'invoice'      => __( 'Invoice', 'learnpress' ),\n+\t\t\t\t\t'levels'       => __( 'Levels', 'learnpress' ),\n+\t\t\t\t);\n+\n+\t\t\t\tforeach ( $pages as $name => $text ) {\n+\t\t\t\t\tif ( $pmpro_pages[ $name ] == $id ) {\n+\t\t\t\t\t\treturn $text;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Check if a page is set for Paid Membership Pro.\n+\t\t *\n+\t\t * @param int $id\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\t\u002F*protected function _is_bp_page( $id ) {\n+\t\t\tif ( function_exists( 'buddypress' ) ) {\n+\t\t\t\t$bp_pages = get_option( 'bp-pages' );\n+\t\t\t\tif ( ! $bp_pages ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\n+\t\t\t\t$pages = array(\n+\t\t\t\t\t'members'  => __( 'Members', 'learnpress' ),\n+\t\t\t\t\t'activity' => __( 'Activity', 'learnpress' ),\n+\t\t\t\t\t'register' => __( 'Register', 'learnpress' ),\n+\t\t\t\t\t'activate' => __( 'Activate', 'learnpress' ),\n+\t\t\t\t);\n+\n+\t\t\t\tforeach ( $pages as $name => $text ) {\n+\t\t\t\t\tif ( isset( $bp_pages[ $name ] ) && $bp_pages[ $name ] == $id ) {\n+\t\t\t\t\t\treturn $text;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get pages is publish set by LearnPress.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _get_static_pages(): array {\n+\t\t\t$static_pages = [];\n+\t\t\tforeach ( $this->pages as $name => $title ) {\n+\t\t\t\t$page_id = learn_press_get_page_id( $name );\n+\n+\t\t\t\tif ( $page_id && 'publish' === get_post_status( $page_id ) ) {\n+\t\t\t\t\t$static_pages[ $page_id ] = $title;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $static_pages;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Show label LearnPress Page for pages set by LearnPress.\n+\t\t *\n+\t\t * @param array $post_states\n+\t\t * @param WP_Post $post\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.3.2.6\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function show_label_page_type( $post_states, $post ) {\n+\t\t\t$post_type = get_post_type( $post );\n+\t\t\tif ( $post_type !== 'page' ) {\n+\t\t\t\treturn $post_states;\n+\t\t\t}\n+\n+\t\t\t$page_id_compare = $post->ID;\n+\t\t\tforeach ( $this->_get_static_pages() as $page_id => $title ) {\n+\t\t\t\tif ( $page_id == $page_id_compare ) {\n+\t\t\t\t\t$post_states['lp_page'] = sprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"is-lp-page\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t'LearnPress ' . $title . ' Page'\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $post_states;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add new column to WP Pages manage to show what page is assigned to.\n+\t\t *\n+\t\t * @param array $columns\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\t\u002F*public function page_columns_head( $columns ) {\n+\n+\t\t\t$_columns = $columns;\n+\t\t\t$columns  = array();\n+\n+\t\t\tforeach ( $_columns as $name => $text ) {\n+\t\t\t\tif ( $name === 'date' ) {\n+\t\t\t\t\t$columns['lp-page'] = __( 'LearnPress Page', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t$columns[ $name ] = $text;\n+\t\t\t}\n+\n+\t\t\treturn $columns;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Display the page is assigned to LP Page.\n+\t\t *\n+\t\t * @param string $column_name\n+\t\t * @param int $post\n+\t\t *\u002F\n+\t\t\u002F*public function page_columns_content( $column_name, $post ) {\n+\t\t\t$pages = $this->_get_static_pages();\n+\t\t\tswitch ( $column_name ) {\n+\t\t\t\tcase 'lp-page':\n+\t\t\t\t\tif ( ! empty( $pages['learnpress'][ $post ] ) ) {\n+\t\t\t\t\t\techo wp_kses_post( $pages['learnpress'][ $post ] );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $pages as $plugin => $plugin_pages ) {\n+\t\t\t\t\t\tif ( $plugin === 'learnpress' ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( ! empty( $pages[ $plugin ][ $post ] ) ) {\n+\t\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t\t'\u003Cp class=\"for-plugin-page\">(%s - %s)\u003C\u002Fp>',\n+\t\t\t\t\t\t\t\t$plugin,\n+\t\t\t\t\t\t\t\t$pages[ $plugin ][ $post ]\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @param $actions\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function views_pages( $actions ) {\n+\t\t\t$pages = $this->_get_static_pages();\n+\n+\t\t\tif ( $pages ) {\n+\t\t\t\t$text = sprintf( __( 'LearnPress Pages (%d)', 'learnpress' ), sizeof( $pages ) );\n+\t\t\t\tif ( 'yes' !== LP_Request::get_param( 'lp-page' ) ) {\n+\t\t\t\t\t$actions['lp-page'] = sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\tadmin_url( 'edit.php?post_type=page&lp-page=yes' ),\n+\t\t\t\t\t\t$text\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\t$actions['lp-page'] = $text;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $actions;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get pages set by LP with param url lp-page=yes\n+\t\t *\n+\t\t * @param WP_Query $q\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_pages_of_lp( $q ) {\n+\t\t\tif ( ! is_admin() || ! $q->is_main_query() ) {\n+\t\t\t\treturn $q;\n+\t\t\t}\n+\n+\t\t\tif ( 'page' == LP_Request::get_param( 'post_type' ) && 'yes' == LP_Request::get_param( 'lp-page' ) ) {\n+\t\t\t\t$ids = $this->_get_static_pages();\n+\n+\t\t\t\tif ( ! empty( $ids ) ) {\n+\t\t\t\t\t$ids = array_keys( $ids );\n+\t\t\t\t\t$q->set( 'post__in', $ids );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $q;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add actions to users list\n+\t\t *\n+\t\t * @param array $actions\n+\t\t * @param WP_User $user\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function user_row_actions( $actions, $user ) {\n+\t\t\t$pending_request = self::get_pending_requests();\n+\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' && $pending_request ) {\n+\t\t\t\t$actions = array();\n+\t\t\t\t$nonce   = 'nonce=' . wp_create_nonce( 'lp-action-permit-role-teacher' );\n+\t\t\t\tif ( in_array( $user->ID, $pending_request ) ) {\n+\t\t\t\t\t$actions['accept']      = sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\tadmin_url( \"users.php?lp-action=accept-request&user_id={$user->ID}&{$nonce}\" ),\n+\t\t\t\t\t\t_x( 'Accept', 'pending-request', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t\t$actions['delete deny'] = sprintf(\n+\t\t\t\t\t\t'\u003Ca class=\"submitdelete\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\tadmin_url( \"users.php?lp-action=deny-request&user_id={$user->ID}&{$nonce}\" ),\n+\t\t\t\t\t\t_x( 'Deny', 'pending-request', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $actions;\n+\t\t}\n+\n+\t\tpublic function exclude_temp_users( $args ) {\n+\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' ) {\n+\t\t\t\t$args['include'] = self::get_pending_requests();\n+\t\t\t}\n+\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get pending requests be come a Teacher.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function get_pending_requests() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT ID\n+\t\t\t\tFROM {$wpdb->users} u\n+\t\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s\n+\t\t\t\tWHERE um.meta_value = %s\n+\t\t\t\t\",\n+\t\t\t\t'_requested_become_teacher',\n+\t\t\t\t'yes'\n+\t\t\t);\n+\n+\t\t\treturn $wpdb->get_col( $query );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Filter user by custom param\n+\t\t *\n+\t\t * @param string $action\n+\t\t *\u002F\n+\t\tpublic function filter_users( $action ) {\n+\t\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$user_id = LP_Request::get_param( 'user_id', 'int' );\n+\t\t\tif ( ! $user_id || ! get_user_by( 'id', $user_id ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'lp-action-permit-role-teacher' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$user_data = get_userdata( $user_id );\n+\t\t\tif ( in_array( $action, array( 'accept-request', 'deny-request' ) ) ) {\n+\t\t\t\tdelete_user_meta( $user_id, '_requested_become_teacher' );\n+\t\t\t}\n+\n+\t\t\tswitch ( $action ) {\n+\t\t\t\tcase 'accept-request':\n+\t\t\t\t\t$be_teacher = new WP_User( $user_id );\n+\t\t\t\t\t$be_teacher->set_role( LP_TEACHER_ROLE );\n+\n+\t\t\t\t\t\u002F**\n+\t\t\t\t\t * Send email to user when admin accept user become a teacher\n+\t\t\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_accept\n+\t\t\t\t\t *\u002F\n+\t\t\t\t\t$data_send = [\n+\t\t\t\t\t\t'params'       => [ $user_data->user_email ],\n+\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_accept',\n+\t\t\t\t\t];\n+\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Fuser-become-a-teacher-accept', $user_data->user_email );\n+\t\t\t\t\twp_redirect( admin_url( 'users.php?lp-action=accepted-request&user_id=' . $user_id ) );\n+\t\t\t\t\texit();\n+\t\t\t\tcase 'deny-request':\n+\t\t\t\t\t\u002F**\n+\t\t\t\t\t * Send email to user when admin accept user become a teacher\n+\t\t\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_deny\n+\t\t\t\t\t *\u002F\n+\t\t\t\t\t$data_send = [\n+\t\t\t\t\t\t'params'       => [ $user_data->user_email ],\n+\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_deny',\n+\t\t\t\t\t];\n+\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Fuser-become-a-teacher-deny', $user_data->user_email );\n+\t\t\t\t\twp_redirect( admin_url( 'users.php?lp-action=denied-request&user_id=' . $user_id ) );\n+\t\t\t\t\texit();\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function users_custom_column( $content, $column_name, $user_id ) {\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add new view to users views for filtering user by \"pending request\" of \"become a teacher\".\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function views_users( $views ) {\n+\t\t\t$pending_request = self::get_pending_requests();\n+\n+\t\t\tif ( $pending_request ) {\n+\t\t\t\tif ( LP_Request::get_param( 'lp-action' ) == 'pending-request' ) {\n+\t\t\t\t\t$class = ' class=\"current\"';\n+\t\t\t\t\tforeach ( $views as $k => $view ) {\n+\t\t\t\t\t\t$views[ $k ] = preg_replace( '!class=\"current\"!', '', $view );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t$class = '';\n+\t\t\t\t}\n+\t\t\t\t$views['pending-request'] = '\u003Ca href=\"' . admin_url( 'users.php?lp-action=pending-request' ) . '\"' . $class . '>' . sprintf(\n+\t\t\t\t\t__(\n+\t\t\t\t\t\t'Pending Request %s',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t),\n+\t\t\t\t\t'\u003Cspan class=\"count\">(' . count( $pending_request ) . ')\u003C\u002Fspan>'\n+\t\t\t\t) . '\u003C\u002Fa>';\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Custom admin body classes.\n+\t\t *\n+\t\t * @param array $classes\n+\t\t *\n+\t\t * @return array|string\n+\t\t *\u002F\n+\t\tpublic function body_class( $classes ) {\n+\t\t\t$post_type = get_post_type();\n+\n+\t\t\tif ( preg_match( '~^lp_~', $post_type ) ) {\n+\t\t\t\tif ( $classes ) {\n+\t\t\t\t\t$classes = explode( ' ', $classes );\n+\t\t\t\t} else {\n+\t\t\t\t\t$classes = array();\n+\t\t\t\t}\n+\n+\t\t\t\t$classes[] = 'learnpress';\n+\t\t\t\t$classes   = array_filter( $classes );\n+\t\t\t\t$classes   = array_unique( $classes );\n+\t\t\t\t$classes   = join( ' ', $classes );\n+\t\t\t}\n+\n+\t\t\treturn $classes;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display notices on Backend.\n+\t\t *\u002F\n+\t\tpublic function admin_notices() {\n+\t\t\tif ( function_exists( 'get_current_screen' ) ) {\n+\t\t\t\t$wp_screen = get_current_screen();\n+\t\t\t\t\u002F\u002F Not run on course edit screen, it slows, can affect performance edit course.\n+\t\t\t\tif ( $wp_screen->id === LP_COURSE_CPT ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Show template file templates override.\n+\t\t\t$page = LP_Request::get_param( 'page' );\n+\t\t\t$tab  = LP_Request::get_param( 'tab' );\n+\t\t\tif ( $page == 'learn-press-tools' && $tab == 'templates' ) {\n+\t\t\t\tif ( LP_Outdated_Template_Helper::detect_outdated_template() ) {\n+\t\t\t\t\tlearn_press_admin_view( 'html-admin-notice-templates' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Request accept\u002Fdenied user can become a teacher.\n+\t\t\t$action_become_teacher      = LP_Request::get_param( 'lp-action' );\n+\t\t\t$user_id                    = LP_Request::get_param( 'user_id', 0, 'int' );\n+\t\t\t$type_action_become_teacher = array( 'accepted-request', 'denied-request' );\n+\t\t\tif ( in_array( $action_become_teacher, $type_action_become_teacher ) && $user_id && get_user_by( 'id', $user_id ) ) {\n+\t\t\t\t?>\n+\t\t\t\t\u003Cdiv class=\"updated notice\">\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t__( 'A user has %s to become a teacher.', 'learnpress' ),\n+\t\t\t\t\t\t\t$action_become_teacher == 'accepted-request' ? 'accepted' : 'denied'\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\n+\t\t\tlearn_press_admin_view( 'admin-notices.php', [], true );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Admin footer add review.\n+\t\t *\n+\t\t * @param $footer_text\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function admin_footer_text( $footer_text ) {\n+\t\t\t$current_screen = get_current_screen();\n+\t\t\t$pages          = learn_press_get_screens();\n+\n+\t\t\tif ( isset( $current_screen->id ) && apply_filters(\n+\t\t\t\t'learn_press_display_admin_footer_text',\n+\t\t\t\tin_array( $current_screen->id, $pages )\n+\t\t\t) ) {\n+\t\t\t\tif ( ! get_option( 'learn_press_message_user_rated' ) ) {\n+\t\t\t\t\t$footer_text = sprintf(\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'If you like \u003Cstrong>LearnPress\u003C\u002Fstrong> please leave us a %1$s&#9733;&#9733;&#9733;&#9733;&#9733;%2$s rating. A huge thanks from the LearnPress team for your generosity.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Flearnpress\u002Freviews\u002F?filter=5#postform\" target=\"_blank\" class=\"lp-rating-link\" data-rated=\"' . esc_attr__(\n+\t\t\t\t\t\t\t'Thanks :)',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t) . '\">',\n+\t\t\t\t\t\t'\u003C\u002Fa>'\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $footer_text;\n+\t\t}\n+\n+\t\t\u002F*function delete_user_form() {\n+\t\t\t\u002F\u002F What should be displayed here?\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Delete records related user being deleted in other tables\n+\t\t *\n+\t\t * @param int $user_id\n+\t\t *\u002F\n+\t\tfunction delete_user_data( $user_id ) {\n+\t\t\tlearn_press_delete_user_data( $user_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Send data to join newsletter or dismiss.\n+\t\t *\n+\t\t * @param array $data\n+\t\t * @param string $notice\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.10\n+\t\t * @deprecated 4.2.3.1\n+\t\t *\u002F\n+\t\t\u002F*public function on_dismissed_notice_response( $data, $notice ) {\n+\t\t\tswitch ( $notice ) {\n+\t\t\t\tcase 'skip-setup-wizard':\n+\t\t\t\t\tdelete_option( 'learn_press_install' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'newsletter-button':\n+\t\t\t\t\t$context = LP_Request::get_string( 'context' );\n+\t\t\t\t\tif ( ! $context || $context != 'newsletter' ) {\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$user = learn_press_get_current_user();\n+\t\t\t\t\tif ( ! $user || $user->get_email() == '' ) {\n+\t\t\t\t\t\t$data['error'] = __( 'Failed while joining the newsletter! Please try again!', 'learnpress' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$url      = 'https:\u002F\u002Fthimpress.com\u002Fmailster\u002Fsubscribe';\n+\t\t\t\t\t$response = wp_remote_post(\n+\t\t\t\t\t\t$url,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'method'      => 'POST',\n+\t\t\t\t\t\t\t'timeout'     => 45,\n+\t\t\t\t\t\t\t'redirection' => 5,\n+\t\t\t\t\t\t\t'httpversion' => '1.0',\n+\t\t\t\t\t\t\t'blocking'    => true,\n+\t\t\t\t\t\t\t'headers'     => array(),\n+\t\t\t\t\t\t\t'body'        => array(\n+\t\t\t\t\t\t\t\t'_referer' => 'extern',\n+\t\t\t\t\t\t\t\t'_nonce'   => '4b266caf7b',\n+\t\t\t\t\t\t\t\t'formid'   => '19',\n+\t\t\t\t\t\t\t\t'email'    => $user->get_email(),\n+\t\t\t\t\t\t\t\t'website'  => site_url(),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'cookies'     => array(),\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( is_wp_error( $response ) ) {\n+\t\t\t\t\t\t$error_message   = $response->get_error_message();\n+\t\t\t\t\t\t$data['message'] = __( 'Something went wrong: ', 'learnpress' ) . $error_message;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$data['message'] = __(\n+\t\t\t\t\t\t\t'Thank you for subscribing! Please check and click the confirmation link from the email that we\\'ve just sent to your inbox.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Include all classes and functions used for admin\n+\t\t *\u002F\n+\t\tpublic function includes() {\n+\t\t\t\u002F\u002F Common function used in admin\n+\t\t\tinclude_once 'lp-admin-functions.php';\n+\t\t\tinclude_once 'lp-admin-actions.php';\n+\t\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fbackground-process\u002Fclass-lp-background-query-items.php';\n+\t\t\tinclude_once 'class-lp-admin-assets.php';\n+\t\t\tLP_Admin_Assets::instance();\n+\t\t\tinclude_once 'class-lp-admin-mcp-api-keys.php';\n+\t\t\tLP_Admin_MCP_API_Keys::instance();\n+\t\t\tinclude_once 'class-lp-admin-dashboard.php';\n+\t\t\t\u002F\u002F include_once 'class-lp-admin-tools.php';\n+\t\t\tinclude_once 'class-lp-admin-ajax.php';\n+\t\t\tinclude_once 'editor\u002Fclass-lp-admin-editor.php';\n+\t\t\tinclude_once 'class-lp-admin-menu.php';\n+\t\t\tinclude_once 'helpers\u002Fclass-lp-outdated-template-helper.php';\n+\t\t\tinclude_once 'helpers\u002Fclass-lp-plugins-helper.php';\n+\t\t\tinclude_once 'class-lp-modal-search-items.php';\n+\t\t\t\u002F\u002Finclude_once 'class-lp-modal-search-users.php';\n+\t\t\tinclude_once 'class-lp-setup-wizard.php';\n+\t\t\t\u002F\u002F include_once 'class-lp-updater.php';\n+\t\t\tinclude_once 'class-lp-install-sample-data.php';\n+\t\t\tinclude_once 'class-lp-reset-data.php';\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php';\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php';\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php';\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php';\n+\t\t\t\u002F\u002Finclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get courses, item's courses on Backend page post_type\n+\t\t *\n+\t\t * @param WP_Query $query\n+\t\t *\u002F\n+\t\tpublic function get_course_items_of_user_backend( WP_Query $query ) {\n+\t\t\tif ( ! $query->is_main_query() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tglobal $post_type, $pagenow;\n+\n+\t\t\tif ( current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! current_user_can( LP_TEACHER_ROLE ) || ( $pagenow != 'edit.php' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$post_type_valid = apply_filters(\n+\t\t\t\t'learn-press\u002Ffilter-user-access-types',\n+\t\t\t\tarray( LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT )\n+\t\t\t);\n+\n+\t\t\tif ( ! in_array( $post_type, $post_type_valid ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F $query->set( 'author', get_current_user_id() );\n+\n+\t\t\t$query = apply_filters( 'learnpress\u002Fget-post-type-lp-on-backend', $query );\n+\n+\t\t\t\u002F\u002Fadd_filter( 'views_edit-' . $post_type . '', '_learn_press_restrict_view_items', 10 );\n+\t\t\t\u002F\u002Fremove_filter( 'pre_get_posts', array( $this, 'get_course_items_of_user_backend' ), 10 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set link item of course when edit item on Backend\n+\t\t *\n+\t\t * @param string $post_link\n+\t\t * @param int $post_id\n+\t\t * @param string $new_title\n+\t\t * @param string $new_slug\n+\t\t * @param WP_Post|null $post\n+\t\t *\n+\t\t * @return string\n+\t\t * @author tungnx\n+\t\t * @since  3.2.7.5\n+\t\t * @version 4.0.1\n+\t\t *\u002F\n+\t\tpublic function lp_course_set_link_item_backend( $post_link = '', $post_id = 0, $new_title = '', $new_slug = '', $post = null ) {\n+\t\t\ttry {\n+\t\t\t\tif ( in_array( $post->post_type, CourseModel::item_types_support() ) ) {\n+\t\t\t\t\t$course_id_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID );\n+\t\t\t\t\tif ( $course_id_of_item ) {\n+\t\t\t\t\t\t$course = learn_press_get_course( $course_id_of_item );\n+\t\t\t\t\t\tif ( $course ) {\n+\t\t\t\t\t\t\t$link_item           = urldecode( $course->get_item_link( $post->ID ) );\n+\t\t\t\t\t\t\t$post_slug           = $post->post_name;\n+\t\t\t\t\t\t\t$link_item_edit_slug = preg_replace( '\u002F' . $post_slug . '$\u002F', '', $link_item );\n+\n+\t\t\t\t\t\t\t\u002F\u002F For update new slug\n+\t\t\t\t\t\t\tif ( $new_slug ) {\n+\t\t\t\t\t\t\t\t$post_slug = $new_slug;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t$post_slug = urldecode( $post_slug );\n+\n+\t\t\t\t\t\t\t$slug_arr   = explode( '\u002F', $link_item_edit_slug );\n+\t\t\t\t\t\t\t$count_slug = count( $slug_arr );\n+\t\t\t\t\t\t\tunset( $slug_arr[ $count_slug - 2 ] );\n+\t\t\t\t\t\t\t$link_item_edit_slug = implode( '\u002F', $slug_arr );\n+\n+\t\t\t\t\t\t\t$post_link  = '\u003Cstrong>Permalink: \u003C\u002Fstrong>';\n+\t\t\t\t\t\t\t$post_link .= '\u003Cspan id=\"sample-permalink\">';\n+\t\t\t\t\t\t\t$post_link .= '\u003Ca href=\"' . $link_item . '\">' . $link_item_edit_slug . '\u003Cspan id=\"editable-post-name\">' . $post_slug . '\u003C\u002Fspan>\u002F\u003C\u002Fa>';\n+\t\t\t\t\t\t\t$post_link .= '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\t$post_link .= '&lrm;\u003Cspan id=\"edit-slug-buttons\">';\n+\t\t\t\t\t\t\t$post_link .= '\u003Cbutton type=\"button\" class=\"edit-slug button button-small hide-if-no-js\" aria-label=\"Edit permalink\">Edit\u003C\u002Fbutton>';\n+\t\t\t\t\t\t\t$post_link .= '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\t$post_link .= '\u003Cspan id=\"editable-post-name-full\">' . $post_slug . '\u003C\u002Fspan>';\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$post_link_message = '\u003Cspan>' . __(\n+\t\t\t\t\t\t\t'Permalink is only available if the item is already assigned to a course.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t) . '\u003C\u002Fspan>';\n+\t\t\t\t\t\t$post_link         = sprintf( '\u003Cdiv id=\"learn-press-box-edit-slug\">%s\u003C\u002Fdiv>', $post_link_message );\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( LP_COURSE_CPT === get_post_type( $post ) ) {\n+\t\t\t\t\t$post_link = LP_Helper::handle_lp_permalink_structure( $post_link, $post );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $post_link;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add \"Edit with Course Builder\" button below title area for courses\n+\t\t *\n+\t\t * @param WP_Post $post\n+\t\t *\n+\t\t * @since 4.3.0\n+\t\t *\u002F\n+\t\tpublic function add_course_builder_button( $post ) {\n+\t\t\tif ( ! $post || LP_COURSE_CPT !== $post->post_type ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Only show for existing courses (not new)\n+\t\t\tif ( 'auto-draft' === $post->post_status ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$course_builder_url = BuilderCourseTemplate::instance()->get_link_edit( $post->ID ) ?? '';\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"lp-edit-with-course-builder\" style=\"margin: 10px 0 20px 0;\">\n+\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url( $course_builder_url ); ?>\" class=\"button button-primary button-large\" style=\"background: #7067ED; border-color: #7067ED; display: inline-flex; align-items: center; gap: 6px; padding: 0 16px; font-size: 14px; border-radius: 3px; line-height: 3;\">\n+\t\t\t\t\t\u003Csvg width=\"26\" height=\"18\" viewBox=\"0 0 69 48\" fill=\"none\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\">\n+\t\t\t\t\t\t\u003Cpath d=\"M50.9291 24.84L50.2591 21.69C50.5491 21.47 50.7391 21.11 50.7391 20.71C50.7391 20.03 50.1891 19.48 49.4991 19.48C48.8091 19.48 48.2591 20.03 48.2591 20.71C48.2591 21.11 48.4491 21.46 48.7391 21.69L48.0691 24.84C47.9891 25.21 48.1791 25.56 48.4791 25.56H50.5091C50.8091 25.56 50.9991 25.21 50.9191 24.84H50.9291Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M50.8892 13.24H50.0092V20.92H48.9892V13.21L46.2992 13.18C43.3992 8.47 38.1692 5.34 32.2192 5.34C30.8292 5.34 29.4792 5.51 28.1892 5.83L24.9492 2.53C24.7992 2.38 24.8892 2.14 25.0992 2.11L40.7292 0L48.5492 9.68L49.7592 11.17L51.0992 12.83C51.2292 12.99 51.1092 13.24 50.8992 13.23L50.8892 13.24Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M44.7392 13.1701L43.1392 17.1401C40.7292 13.1101 36.3092 10.4101 31.2592 10.4101C29.9992 10.4101 28.7892 10.5801 27.6292 10.8901L29.2292 6.93014C30.1992 6.74014 31.1992 6.64014 32.2192 6.64014C37.4092 6.64014 41.9892 9.22014 44.7392 13.1701Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M25.4692 23.6899V23.8499C25.4692 23.9599 25.4592 24.0699 25.4592 24.1899C25.4592 24.0199 25.4592 23.8499 25.4692 23.6899Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M43.3692 24.2601C43.3692 25.2901 43.2392 26.2901 42.9892 27.2501C42.3892 29.5401 41.1192 31.5601 39.4092 33.1001C37.9992 34.3601 36.2892 35.2901 34.3892 35.7701C33.4492 36.0101 32.4592 36.1401 31.4392 36.1401H27.9692V35.8001C27.9692 35.6601 27.9792 35.5301 27.9992 35.3901C28.2092 33.2201 29.5592 31.3901 31.4492 30.4901C31.6092 30.4101 31.7692 30.3401 31.9292 30.2801C32.1692 30.1901 32.4192 30.1201 32.6692 30.0601C32.7292 30.0501 32.7992 30.0301 32.8592 30.0201C35.4892 29.4101 37.4492 27.0601 37.4492 24.2501C37.4492 21.2701 35.2392 18.8001 32.3592 18.3901C32.0792 18.3501 31.7892 18.3301 31.4992 18.3301C31.2392 18.3301 30.9992 18.3501 30.7492 18.3801C28.2992 18.6901 26.2592 20.4801 25.6492 22.8201C25.5292 23.2901 25.4792 23.7701 25.4792 24.2401V42.7601C25.1492 45.6001 22.8092 47.8301 19.9092 47.9901H19.5592H16.4792C18.3092 46.6501 19.5092 44.5001 19.5092 42.0701V23.7001C19.5092 23.5601 19.5192 23.4301 19.5392 23.3001C19.6292 22.2301 19.8492 21.1901 20.2092 20.2201C20.4592 19.5401 20.7692 18.8801 21.1292 18.2501C21.7592 17.1801 22.5492 16.2201 23.4692 15.4001C24.6192 14.3701 25.9792 13.5601 27.4692 13.0401C28.7092 12.6001 30.0492 12.3701 31.4392 12.3701C32.4792 12.3701 33.4792 12.5001 34.4392 12.7501C36.6892 13.3301 38.6792 14.5401 40.2092 16.1901C40.2592 16.2401 40.3092 16.3001 40.3592 16.3501C40.3592 16.3501 40.3592 16.3501 40.3692 16.3601C41.9592 18.1401 43.0192 20.4101 43.2992 22.9001C43.3293 23.1701 43.3492 23.4501 43.3692 23.7201C43.3692 23.8901 43.3692 24.0601 43.3692 24.2401V24.2601Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M25.4692 23.6899V23.8499C25.4692 23.9599 25.4592 24.0699 25.4592 24.1899C25.4592 24.0199 25.4592 23.8499 25.4692 23.6899Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M6.13917 42.0799H18.0692C18.0592 45.3499 15.3792 47.9999 12.0892 47.9999H6.11917C2.83917 47.9999 0.16917 45.3499 0.14917 42.0799V12.3799H0.18917C3.46917 12.3799 6.13917 15.0299 6.13917 18.2999V42.0799Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M67.6736 23.2845L63.9566 19.5676C63.1998 18.8108 61.9757 18.8108 61.219 19.5676L59.0266 21.7599L65.4812 28.2145L67.6736 26.0222C68.4303 25.2654 68.4303 24.0413 67.6736 23.2845Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M45.4722 45.0411L46.3513 45.9203L42.078 46.7883C42.078 46.7883 42.0557 46.3432 41.477 45.7534C40.8983 45.1747 40.442 45.1524 40.442 45.1524L41.3101 40.879L42.1892 41.7582L59.817 24.1305L58.2256 22.5391L40.5979 40.1668L39.2513 46.7883C39.1066 47.4894 39.7298 48.1126 40.4309 47.968L47.0525 46.6214L64.6802 28.9937L63.0888 27.4023L45.4611 45.03L45.4722 45.0411Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\u003Cpath d=\"M60.6182 24.9316L42.9905 42.5594L44.6932 44.2621L62.3209 26.6343L60.6182 24.9316Z\" fill=\"white\">\u003C\u002Fpath>\n+\t\t\t\t\t\u003C\u002Fsvg>\n+\t\t\t\t\t\u003C?php esc_html_e( 'Edit with Course Builder', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return false|string\n+\t\t * @since 3.2.8\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function get_screen_id() {\n+\t\t\tglobal $current_screen;\n+\n+\t\t\treturn $current_screen ? $current_screen->id : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get single instance of self\n+\t\t *\n+\t\t * @return bool|LP_Admin\n+\t\t * @return bool|LP_Admin\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$instance ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\t}\n+}\n+\n+return LP_Admin::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-install-sample-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-install-sample-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-install-sample-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-install-sample-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,727 +1,727 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Install_Sample_Data\r\n- *\r\n- * Create sample course for testing purpose.\r\n- * This will create sections, items, questions, answers, ...\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_Install_Sample_Data {\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $section_range = array( 5, 10 );\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $item_range = array( 10, 15 );\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $question_range = array( 10, 15 );\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $answer_range = array( 3, 5 );\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic static $max_content_paragraph = 5;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $dummy_text = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Install_Sample_Data constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tadd_filter( 'learn-press\u002Fscript-data', array( $this, 'i18n' ), 10, 2 );\r\n-\r\n-\t\t$actions = array(\r\n-\t\t\t'lp-install-sample-data',\r\n-\t\t\t'lp-uninstall-sample-data',\r\n-\t\t);\r\n-\r\n-\t\tif ( ! in_array( LP_Request::get_param( 'page' ), $actions ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tadd_action( 'init', array( $this, 'install' ) );\r\n-\t\tadd_action( 'init', array( $this, 'uninstall' ) );\r\n-\t}\r\n-\r\n-\tpublic function i18n( $data, $handle ) {\r\n-\t\tif ( 'learn-press-global' !== $handle ) {\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\t$i18n = array(\r\n-\t\t\t'confirm_install_sample_data'   => esc_html__( 'Are you sure you want to install the sample course data?', 'learnpress' ),\r\n-\t\t\t'confirm_uninstall_sample_data' => esc_html__( 'Are you sure you want to delete the sample course data?', 'learnpress' ),\r\n-\t\t);\r\n-\r\n-\t\tif ( empty( $data['i18n'] ) ) {\r\n-\t\t\t$data['i18n'] = $i18n;\r\n-\t\t} else {\r\n-\t\t\t$data['i18n'] = array_merge( $data['i18n'], $i18n );\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Install\r\n-\t *\r\n-\t * @TODO - Need write to api, not hook init.\r\n-\t *\u002F\r\n-\tpublic function install() {\r\n-\t\tif ( ! wp_verify_nonce( LP_Request::get_param( '_wpnonce', 'key' ), 'install-sample-course' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', 0 );\r\n-\r\n-\t\t$data = [];\r\n-\r\n-\t\t$dummy_text       = LP_WP_Filesystem::instance()->file_get_contents( LP_PLUGIN_PATH . '\u002Fdummy-data\u002Fdummy-text.txt' );\r\n-\t\t$this->dummy_text = preg_split( '!\\s!', $dummy_text );\r\n-\r\n-\t\t$section_range = LP_Request::get_param( 'section-range', 0, 'int' );\r\n-\t\tif ( $section_range ) {\r\n-\t\t\tself::$section_range = $section_range;\r\n-\t\t}\r\n-\r\n-\t\t$item_range = LP_Request::get_param( 'item-range', 0, 'int' );\r\n-\t\tif ( $item_range ) {\r\n-\t\t\tself::$item_range = $item_range;\r\n-\t\t}\r\n-\r\n-\t\t$question_range = LP_Request::get_param( 'question-range', 0, 'int' );\r\n-\t\tif ( $question_range ) {\r\n-\t\t\tself::$question_range = $question_range;\r\n-\t\t}\r\n-\r\n-\t\t$answer_range = LP_Request::get_param( 'answer-range', 0, 'int' );\r\n-\t\tif ( $answer_range ) {\r\n-\t\t\tself::$answer_range = $answer_range;\r\n-\t\t}\r\n-\r\n-\t\t$data['price'] = LP_Request::get_param( 'course-price', 0, 'float' );\r\n-\t\t$data['name']  = LP_Request::get_param( 'custom-name' );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id = $this->create_course( $data );\r\n-\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\tthrow new Exception( 'Create course failed.' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->create_sections( $course_id );\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t\u002F\u002F Unset value of keys for calculate again\r\n-\t\t\tunset( $courseModel->first_item_id );\r\n-\t\t\tunset( $courseModel->total_items );\r\n-\t\t\tunset( $courseModel->sections_items );\r\n-\t\t\tunset( $courseModel->meta_data->_lp_final_quiz );\r\n-\t\t\t$courseModel->get_first_item_id();\r\n-\t\t\t$courseModel->get_total_items();\r\n-\t\t\t$courseModel->get_section_items();\r\n-\t\t\t$courseModel->get_final_quiz();\r\n-\t\t\t$courseModel->save();\r\n-\r\n-\t\t\t$link_course = get_the_permalink( $course_id );\r\n-\t\t\t$link_course = LP_Helper::handle_lp_permalink_structure( $link_course, get_post( $course_id ) );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"lp-install-sample__response success\">\r\n-\t\t\t\t\u003C?php printf( __( 'The Course \"%s\" has been created', 'learnpress' ), get_the_title( $course_id ) ); ?>\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link_course ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t|\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( admin_url( 'post.php?post=' . $course_id . '&action=edit' ) ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'Edit', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t} catch ( Exception $ex ) {\r\n-\t\t\techo '\u003Cdiv class=\"lp-install-sample__response fail\">';\r\n-\t\t\techo wp_kses_post( $ex->getMessage() );\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Un-install\r\n-\t *\u002F\r\n-\tpublic function uninstall() {\r\n-\t\tif ( ! wp_verify_nonce( LP_Request::get_param( '_wpnonce' ), 'uninstall-sample-course' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$posts = $this->get_sample_posts();\r\n-\t\ttry {\r\n-\t\t\tif ( ! $posts ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No data sample.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $posts as $post ) {\r\n-\t\t\t\tswitch ( $post->post_type ) {\r\n-\t\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t\t$this->_delete_course( $post->ID );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t\t$this->_delete_quiz( $post->ID );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t\t\t$this->_delete_question( $post->ID );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->_delete_post( $post->ID );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"lp-install-sample__response success\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'The sample data was successfully deleted!', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t} catch ( Exception $ex ) {\r\n-\r\n-\t\t\techo '\u003Cdiv class=\"lp-install-sample__response fail\">';\r\n-\t\t\techo 'Error: ' . $ex->getMessage();\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all posts marked as \"sample data\"\r\n-\t *\r\n-\t * @return array|null|object\r\n-\t *\u002F\r\n-\tpublic function get_sample_posts() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t        SELECT p.ID, post_type\r\n-\t        FROM {$wpdb->posts} p\r\n-\t        INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = %s AND pm.meta_value = %s\r\n-\t    \",\r\n-\t\t\t'_lp_sample_data',\r\n-\t\t\t'yes'\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_results( $query );\r\n-\t}\r\n-\r\n-\tprotected function _delete_course( $id ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t        SELECT section_id\r\n-\t        FROM {$wpdb->learnpress_sections}\r\n-\t        WHERE section_course_id = %d\r\n-\t    \",\r\n-\t\t\t$id\r\n-\t\t);\r\n-\r\n-\t\t$section_ids = $wpdb->get_col( $query );\r\n-\t\tif ( $section_ids ) {\r\n-\t\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_section_items} WHERE section_id IN(\" . join( ',', $section_ids ) . ')' );\r\n-\t\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_sections} WHERE section_id IN(\" . join( ',', $section_ids ) . ')' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function _delete_quiz( $id ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_quiz_questions} WHERE quiz_id = {$id}\" );\r\n-\t}\r\n-\r\n-\tprotected function _delete_question( $id ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_question_answers} WHERE question_id = {$id}\" );\r\n-\t}\r\n-\r\n-\tprotected function _delete_post( $post_id ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$wpdb->query( \"DELETE FROM {$wpdb->postmeta} WHERE post_id = $post_id\" );\r\n-\t\t$wpdb->query( \"DELETE FROM {$wpdb->posts} WHERE ID = $post_id\" );\r\n-\t}\r\n-\r\n-\tprotected function _delete_user_items( $ids ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\t\t$query  = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t        DELETE\r\n-\t        FROM {$wpdb->learnpress_user_items}\r\n-\t        WHERE item_id IN(\" . join( ',', $format ) . ')\r\n-\t    ',\r\n-\t\t\t$ids\r\n-\t\t);\r\n-\r\n-\t\t$wpdb->query( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate content with 'lorem' text.\r\n-\t *\r\n-\t * @param int $min\r\n-\t * @param int $max\r\n-\t * @param int $paragraphs\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function generate_content( $min = 100, $max = 500, $paragraphs = 10 ) {\r\n-\t\t$length = rand( $min, $max );\r\n-\t\t$max    = sizeof( $this->dummy_text ) - 1;\r\n-\t\t$words  = array();\r\n-\r\n-\t\tfor ( $i = 0; $i \u003C $length; $i++ ) {\r\n-\t\t\t$words[] = $this->dummy_text[ rand( 0, $max ) ];\r\n-\t\t}\r\n-\r\n-\t\t$p = array();\r\n-\r\n-\t\tif ( ! $paragraphs ) {\r\n-\t\t\t$paragraphs = self::$max_content_paragraph;\r\n-\t\t}\r\n-\r\n-\t\twhile ( $words && sizeof( $p ) \u003C $paragraphs ) {\r\n-\t\t\t$len = rand( 10, 20 );\r\n-\t\t\t$cut = array_splice( $words, 0, $len );\r\n-\t\t\t$p[] = '\u003Cp>' . ucfirst( join( ' ', $cut ) ) . '\u003C\u002Fp>';\r\n-\t\t}\r\n-\r\n-\t\treturn join( '', $p );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate title with 'lorem' text.\r\n-\t *\r\n-\t * @param int $min\r\n-\t * @param int $max\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function generate_title( $min = 10, $max = 15 ) {\r\n-\t\t$length = rand( $min, $max );\r\n-\t\t$max    = sizeof( $this->dummy_text ) - 1;\r\n-\t\t$words  = array();\r\n-\t\tfor ( $i = 0; $i \u003C $length; $i++ ) {\r\n-\t\t\t$words[] = $this->dummy_text[ rand( 0, $max ) ];\r\n-\t\t}\r\n-\r\n-\t\treturn ucfirst( join( ' ', $words ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create course.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int|WP_Error\r\n-\t *\u002F\r\n-\tprotected function create_course( array $data ) {\r\n-\t\t$title = $data['name'] ?? '';\r\n-\r\n-\t\t$data_insert = array(\r\n-\t\t\t'post_title'   => ! empty( $title ) ? $title : __( 'Sample course', 'learnpress' ),\r\n-\t\t\t'post_type'    => LP_COURSE_CPT,\r\n-\t\t\t'post_status'  => 'publish',\r\n-\t\t\t'post_content' => $this->generate_content( 25, 40, 5 ),\r\n-\t\t);\r\n-\r\n-\t\t$course_id = wp_insert_post( $data_insert );\r\n-\r\n-\t\tif ( $course_id ) {\r\n-\t\t\t$metas = [\r\n-\t\t\t\tCoursePostModel::META_KEY_DURATION    => '10 week',\r\n-\t\t\t\tCoursePostModel::META_KEY_SAMPLE_DATA => 'yes',\r\n-\t\t\t\tCoursePostModel::META_KEY_LEVEL       => 'all',\r\n-\t\t\t];\r\n-\t\t\tforeach ( $metas as $key => $value ) {\r\n-\t\t\t\tupdate_post_meta( $course_id, $key, $value );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->add_extra_info( $course_id );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\tprotected function add_extra_info( $course_id ) {\r\n-\t\t$features = array( 'requirements', 'target_audiences', 'key_features' );\r\n-\r\n-\t\t\u002F\u002F Requirements, Target audiences, Key Features\r\n-\t\tforeach ( $features as $feature ) {\r\n-\t\t\t$feature_data = array();\r\n-\t\t\tfor ( $i = 0, $n = rand( 5, 10 ); $i \u003C= $n; $i++ ) {\r\n-\t\t\t\t$feature_data[] = $this->generate_title();\r\n-\t\t\t}\r\n-\t\t\tupdate_post_meta( $course_id, '_lp_' . $feature, $feature_data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F FAQs\r\n-\t\t$feature_data = array();\r\n-\t\tfor ( $i = 0, $n = rand( 5, 10 ); $i \u003C= $n; $i++ ) {\r\n-\t\t\t$feature_data[] = array( $this->generate_title() . '?', $this->generate_content( 20, 30, 3 ) );\r\n-\t\t}\r\n-\t\tupdate_post_meta( $course_id, '_lp_faqs', $feature_data );\r\n-\r\n-\t\t\u002F\u002F Featured review\r\n-\t\tupdate_post_meta( $course_id, '_lp_featured_review', $this->generate_title( 30, 40 ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create sections.\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\u002F\r\n-\tprotected function create_sections( $course_id ) {\r\n-\t\t$section_length = call_user_func_array( 'rand', ( self::$section_range ) );\r\n-\r\n-\t\tfor ( $i = 1; $i \u003C= $section_length; $i++ ) {\r\n-\t\t\t$section_id = $this->create_section( 'Section ' . $i, $course_id );\r\n-\r\n-\t\t\tif ( $section_id ) {\r\n-\t\t\t\t$this->create_section_items( $section_id, $course_id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create section.\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param int    $course_id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprotected function create_section( $name, $course_id ) {\r\n-\t\tstatic $order = 1;\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$data = array(\r\n-\t\t\t'section_name'        => $name,\r\n-\t\t\t'section_course_id'   => $course_id,\r\n-\t\t\t'section_order'       => $order,\r\n-\t\t\t'section_description' => $this->generate_title(),\r\n-\t\t);\r\n-\r\n-\t\t$wpdb->insert(\r\n-\t\t\t$wpdb->learnpress_sections,\r\n-\t\t\t$data,\r\n-\t\t\tarray( '%s', '%d', '%d', '%s' )\r\n-\t\t);\r\n-\r\n-\t\tif ( $wpdb->insert_id ) {\r\n-\t\t\t++$order;\r\n-\r\n-\t\t\treturn $wpdb->insert_id;\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create section items.\r\n-\t *\r\n-\t * @param int $section_id\r\n-\t * @param int $course_id\r\n-\t *\u002F\r\n-\tprotected function create_section_items( $section_id, $course_id ) {\r\n-\r\n-\t\tstatic $lesson_count = 1;\r\n-\t\tstatic $quiz_count   = 1;\r\n-\r\n-\t\t$order = 0;\r\n-\r\n-\t\t$item_length = call_user_func_array( 'rand', self::$item_range );\r\n-\r\n-\t\tfor ( $i = 1; $i \u003C $item_length; $i++ ) {\r\n-\t\t\t$lesson_id = $this->create_lesson( 'Lesson ' . $lesson_count++, $section_id, $course_id, $order );\r\n-\r\n-\t\t\tif ( $lesson_id ) {\r\n-\t\t\t\t++$order;\r\n-\r\n-\t\t\t\tif ( $i == 1 ) {\r\n-\t\t\t\t\tupdate_post_meta( $lesson_id, '_lp_preview', 'yes' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$quiz_id = $this->create_quiz( 'Quiz ' . $quiz_count++, $section_id, $course_id, $order );\r\n-\r\n-\t\tif ( $quiz_id ) {\r\n-\t\t\t++$order;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create lesson.\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param int    $section_id\r\n-\t * @param int    $course_id\r\n-\t *\r\n-\t * @return int|WP_Error\r\n-\t *\u002F\r\n-\tprotected function create_lesson( $name, $section_id, $course_id, $order ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$data = array(\r\n-\t\t\t'post_title'   => $name,\r\n-\t\t\t'post_type'    => LP_LESSON_CPT,\r\n-\t\t\t'post_status'  => 'publish',\r\n-\t\t\t'post_content' => $this->generate_content(),\r\n-\t\t);\r\n-\r\n-\t\t$lesson_id = wp_insert_post( $data );\r\n-\r\n-\t\tif ( $lesson_id ) {\r\n-\r\n-\t\t\tupdate_post_meta( $lesson_id, '_lp_sample_data', 'yes' );\r\n-\r\n-\t\t\t$section_data = array(\r\n-\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t'item_id'    => $lesson_id,\r\n-\t\t\t\t'item_type'  => LP_LESSON_CPT,\r\n-\t\t\t\t'item_order' => absint( $order ),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t$section_data,\r\n-\t\t\t\tarray( '%d', '%d', '%s', '%d' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $lesson_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create quiz.\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param int    $section_id\r\n-\t * @param int    $course_id\r\n-\t *\r\n-\t * @return int|WP_Error\r\n-\t *\u002F\r\n-\tprotected function create_quiz( $name, $section_id, $course_id, $order ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$data = array(\r\n-\t\t\t'post_title'   => $name,\r\n-\t\t\t'post_type'    => LP_QUIZ_CPT,\r\n-\t\t\t'post_status'  => 'publish',\r\n-\t\t\t'post_content' => $this->generate_content( 25, 40, 2 ),\r\n-\t\t);\r\n-\r\n-\t\t$quiz_id = wp_insert_post( $data );\r\n-\r\n-\t\tif ( $quiz_id ) {\r\n-\r\n-\t\t\t$metas = array(\r\n-\t\t\t\t'_lp_preview'              => 'no',\r\n-\t\t\t\t\u002F\u002F '_lp_minus_points'         => 0,\r\n-\t\t\t\t\u002F\u002F '_lp_show_hide_question'   => 'no',\r\n-\t\t\t\t\u002F\u002F '_lp_review_questions'     => 'yes',\r\n-\t\t\t\t\u002F\u002F '_lp_show_result'          => 'yes',\r\n-\t\t\t\t'_lp_duration'             => ( rand( 1, 5 ) * 10 ) . ' ' . 'minute',\r\n-\t\t\t\t'_lp_passing_grade'        => rand( 5, 9 ) * 10,\r\n-\t\t\t\t\u002F\u002F '_lp_retake_count'         => rand( 0, 10 ),\r\n-\t\t\t\t\u002F\u002F '_lp_archive_history'      => 'no',\r\n-\t\t\t\t\u002F\u002F '_lp_show_check_answer'    => '0',\r\n-\t\t\t\t\u002F\u002F '_lp_show_hint'            => '0',\r\n-\t\t\t\t'_lp_sample_data'          => 'yes',\r\n-\t\t\t\t'_lp_negative_marking'     => 'no',\r\n-\t\t\t\t'_lp_minus_skip_questions' => 'no',\r\n-\t\t\t\t'_lp_instant_check'        => 'no',\r\n-\t\t\t\t'_lp_retake_count'         => '0',\r\n-\t\t\t\t'_lp_pagination'           => '1',\r\n-\t\t\t\t'_lp_review'               => 'yes',\r\n-\t\t\t\t'_lp_show_correct_review'  => 'yes',\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $metas as $key => $value ) {\r\n-\t\t\t\tupdate_post_meta( $quiz_id, $key, $value );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_data = array(\r\n-\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t'item_id'    => $quiz_id,\r\n-\t\t\t\t'item_type'  => LP_QUIZ_CPT,\r\n-\t\t\t\t'item_order' => absint( $order ),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t$section_data,\r\n-\t\t\t\tarray( '%d', '%d', '%s', '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->create_quiz_questions( $quiz_id );\r\n-\t\t}\r\n-\r\n-\t\treturn $quiz_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create questions of a quiz.\r\n-\t *\r\n-\t * @param int $quiz_id\r\n-\t *\u002F\r\n-\tprotected function create_quiz_questions( $quiz_id ) {\r\n-\t\tstatic $question_index = 1;\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$question_count = call_user_func_array( 'rand', self::$question_range );\r\n-\t\tfor ( $i = 1; $i \u003C= $question_count; $i++ ) {\r\n-\t\t\t$data = array(\r\n-\t\t\t\t'post_title'   => 'Question ' . $question_index++,\r\n-\t\t\t\t'post_type'    => LP_QUESTION_CPT,\r\n-\t\t\t\t'post_status'  => 'publish',\r\n-\t\t\t\t'post_content' => $this->generate_content( 25, 40, 2 ),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$question_id = wp_insert_post( $data );\r\n-\r\n-\t\t\tif ( ! $question_id ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$type = $this->get_question_type();\r\n-\r\n-\t\t\tupdate_post_meta( $question_id, '_lp_type', $type );\r\n-\t\t\tupdate_post_meta( $question_id, '_lp_sample_data', 'yes' );\r\n-\r\n-\t\t\t$quiz_question_data = array(\r\n-\t\t\t\t'quiz_id'     => $quiz_id,\r\n-\t\t\t\t'question_id' => $question_id,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_quiz_questions,\r\n-\t\t\t\t$quiz_question_data,\r\n-\t\t\t\tarray( '%d', '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $wpdb->insert_id ) {\r\n-\t\t\t\t$this->create_question_answers( $question_id, $type );\r\n-\t\t\t} else {\r\n-\t\t\t\terror_log( 'create_quiz_questions => ', $wpdb->last_error );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create answers for a question.\r\n-\t *\r\n-\t * @param int    $question_id\r\n-\t * @param string $type\r\n-\t *\u002F\r\n-\tprotected function create_question_answers( $question_id, $type ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$answers = $this->get_answers( $type );\r\n-\t\tforeach ( $answers as $order => $answer ) {\r\n-\t\t\t$data = array(\r\n-\t\t\t\t'question_id' => $question_id,\r\n-\t\t\t\t'title'       => $answer['title'],\r\n-\t\t\t\t'value'       => $answer['value'],\r\n-\t\t\t\t'is_true'     => $answer['is_true'],\r\n-\t\t\t\t'order'       => $order + 1,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t$data,\r\n-\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get random answers by type of question.\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_answers( $type ) {\r\n-\t\t$answers = array();\r\n-\r\n-\t\t$option_count = $type === 'true_or_false' ? 2 : call_user_func_array( 'rand', self::$answer_range );\r\n-\r\n-\t\tfor ( $i = 1; $i \u003C= $option_count; $i++ ) {\r\n-\t\t\t$answers[] = array(\r\n-\t\t\t\t'title'   => $this->generate_title(),\r\n-\t\t\t\t'value'   => learn_press_random_value(),\r\n-\t\t\t\t'is_true' => 'no',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set option is TRUE randomize\r\n-\t\tif ( $type !== 'multi_choice' ) {\r\n-\t\t\t$at                        = rand( 0, sizeof( $answers ) - 1 );\r\n-\t\t\t$answers[ $at ]['is_true'] = 'yes';\r\n-\t\t\t$answers[ $at ]['title']   = _x( '[TRUE] - ', 'install-sample-course', 'learnpress' ) . $answers[ $at ]['title'];\r\n-\t\t} else {\r\n-\t\t\t$has_true_option = false;\r\n-\t\t\twhile ( ! $has_true_option ) {\r\n-\t\t\t\tforeach ( $answers as $k => $v ) {\r\n-\t\t\t\t\t$answers[ $k ]['is_true'] = rand( 0, 100 ) % 2 ? 'yes' : 'no';\r\n-\r\n-\t\t\t\t\tif ( $answers[ $k ]['is_true'] === 'yes' ) {\r\n-\t\t\t\t\t\t$answers[ $k ]['title'] = _x( ' [TRUE] - ', 'install-sample-course', 'learnpress' ) . $answers[ $k ]['title'];\r\n-\t\t\t\t\t\t$has_true_option        = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $answers;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get random type for a question.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_question_type() {\r\n-\t\t$types = array(\r\n-\t\t\t'true_or_false',\r\n-\t\t\t'single_choice',\r\n-\t\t\t'multi_choice',\r\n-\t\t);\r\n-\r\n-\t\treturn $types[ rand( 0, sizeof( $types ) - 1 ) ];\r\n-\t}\r\n-}\r\n-\r\n-new LP_Install_Sample_Data();\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+\n+\u002F**\n+ * Class LP_Install_Sample_Data\n+ *\n+ * Create sample course for testing purpose.\n+ * This will create sections, items, questions, answers, ...\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_Install_Sample_Data {\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $section_range = array( 5, 10 );\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $item_range = array( 10, 15 );\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $question_range = array( 10, 15 );\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $answer_range = array( 3, 5 );\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic static $max_content_paragraph = 5;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $dummy_text = '';\n+\n+\t\u002F**\n+\t * LP_Install_Sample_Data constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tadd_filter( 'learn-press\u002Fscript-data', array( $this, 'i18n' ), 10, 2 );\n+\n+\t\t$actions = array(\n+\t\t\t'lp-install-sample-data',\n+\t\t\t'lp-uninstall-sample-data',\n+\t\t);\n+\n+\t\tif ( ! in_array( LP_Request::get_param( 'page' ), $actions ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tadd_action( 'init', array( $this, 'install' ) );\n+\t\tadd_action( 'init', array( $this, 'uninstall' ) );\n+\t}\n+\n+\tpublic function i18n( $data, $handle ) {\n+\t\tif ( 'learn-press-global' !== $handle ) {\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\t$i18n = array(\n+\t\t\t'confirm_install_sample_data'   => esc_html__( 'Are you sure you want to install the sample course data?', 'learnpress' ),\n+\t\t\t'confirm_uninstall_sample_data' => esc_html__( 'Are you sure you want to delete the sample course data?', 'learnpress' ),\n+\t\t);\n+\n+\t\tif ( empty( $data['i18n'] ) ) {\n+\t\t\t$data['i18n'] = $i18n;\n+\t\t} else {\n+\t\t\t$data['i18n'] = array_merge( $data['i18n'], $i18n );\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Install\n+\t *\n+\t * @TODO - Need write to api, not hook init.\n+\t *\u002F\n+\tpublic function install() {\n+\t\tif ( ! wp_verify_nonce( LP_Request::get_param( '_wpnonce', 'key' ), 'install-sample-course' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', 0 );\n+\n+\t\t$data = [];\n+\n+\t\t$dummy_text       = LP_WP_Filesystem::instance()->file_get_contents( LP_PLUGIN_PATH . '\u002Fdummy-data\u002Fdummy-text.txt' );\n+\t\t$this->dummy_text = preg_split( '!\\s!', $dummy_text );\n+\n+\t\t$section_range = LP_Request::get_param( 'section-range', 0, 'int' );\n+\t\tif ( $section_range ) {\n+\t\t\tself::$section_range = $section_range;\n+\t\t}\n+\n+\t\t$item_range = LP_Request::get_param( 'item-range', 0, 'int' );\n+\t\tif ( $item_range ) {\n+\t\t\tself::$item_range = $item_range;\n+\t\t}\n+\n+\t\t$question_range = LP_Request::get_param( 'question-range', 0, 'int' );\n+\t\tif ( $question_range ) {\n+\t\t\tself::$question_range = $question_range;\n+\t\t}\n+\n+\t\t$answer_range = LP_Request::get_param( 'answer-range', 0, 'int' );\n+\t\tif ( $answer_range ) {\n+\t\t\tself::$answer_range = $answer_range;\n+\t\t}\n+\n+\t\t$data['price'] = LP_Request::get_param( 'course-price', 0, 'float' );\n+\t\t$data['name']  = LP_Request::get_param( 'custom-name' );\n+\n+\t\ttry {\n+\t\t\t$course_id = $this->create_course( $data );\n+\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\tthrow new Exception( 'Create course failed.' );\n+\t\t\t}\n+\n+\t\t\t$this->create_sections( $course_id );\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t\u002F\u002F Unset value of keys for calculate again\n+\t\t\tunset( $courseModel->first_item_id );\n+\t\t\tunset( $courseModel->total_items );\n+\t\t\tunset( $courseModel->sections_items );\n+\t\t\tunset( $courseModel->meta_data->_lp_final_quiz );\n+\t\t\t$courseModel->get_first_item_id();\n+\t\t\t$courseModel->get_total_items();\n+\t\t\t$courseModel->get_section_items();\n+\t\t\t$courseModel->get_final_quiz();\n+\t\t\t$courseModel->save();\n+\n+\t\t\t$link_course = get_the_permalink( $course_id );\n+\t\t\t$link_course = LP_Helper::handle_lp_permalink_structure( $link_course, get_post( $course_id ) );\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"lp-install-sample__response success\">\n+\t\t\t\t\u003C?php printf( __( 'The Course \"%s\" has been created', 'learnpress' ), get_the_title( $course_id ) ); ?>\n+\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link_course ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t|\n+\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( admin_url( 'post.php?post=' . $course_id . '&action=edit' ) ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'Edit', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php\n+\t\t} catch ( Exception $ex ) {\n+\t\t\techo '\u003Cdiv class=\"lp-install-sample__response fail\">';\n+\t\t\techo wp_kses_post( $ex->getMessage() );\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\n+\t\tdie();\n+\t}\n+\n+\t\u002F**\n+\t * Un-install\n+\t *\u002F\n+\tpublic function uninstall() {\n+\t\tif ( ! wp_verify_nonce( LP_Request::get_param( '_wpnonce' ), 'uninstall-sample-course' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$posts = $this->get_sample_posts();\n+\t\ttry {\n+\t\t\tif ( ! $posts ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No data sample.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tforeach ( $posts as $post ) {\n+\t\t\t\tswitch ( $post->post_type ) {\n+\t\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t\t$this->_delete_course( $post->ID );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t\t$this->_delete_quiz( $post->ID );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t\t\t$this->_delete_question( $post->ID );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t$this->_delete_post( $post->ID );\n+\t\t\t}\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"lp-install-sample__response success\">\n+\t\t\t\t\u003C?php esc_html_e( 'The sample data was successfully deleted!', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php\n+\t\t} catch ( Exception $ex ) {\n+\n+\t\t\techo '\u003Cdiv class=\"lp-install-sample__response fail\">';\n+\t\t\techo 'Error: ' . $ex->getMessage();\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t}\n+\n+\t\tdie();\n+\t}\n+\n+\t\u002F**\n+\t * Get all posts marked as \"sample data\"\n+\t *\n+\t * @return array|null|object\n+\t *\u002F\n+\tpublic function get_sample_posts() {\n+\t\tglobal $wpdb;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t        SELECT p.ID, post_type\n+\t        FROM {$wpdb->posts} p\n+\t        INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = %s AND pm.meta_value = %s\n+\t    \",\n+\t\t\t'_lp_sample_data',\n+\t\t\t'yes'\n+\t\t);\n+\n+\t\treturn $wpdb->get_results( $query );\n+\t}\n+\n+\tprotected function _delete_course( $id ) {\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t        SELECT section_id\n+\t        FROM {$wpdb->learnpress_sections}\n+\t        WHERE section_course_id = %d\n+\t    \",\n+\t\t\t$id\n+\t\t);\n+\n+\t\t$section_ids = $wpdb->get_col( $query );\n+\t\tif ( $section_ids ) {\n+\t\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_section_items} WHERE section_id IN(\" . join( ',', $section_ids ) . ')' );\n+\t\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_sections} WHERE section_id IN(\" . join( ',', $section_ids ) . ')' );\n+\t\t}\n+\t}\n+\n+\tprotected function _delete_quiz( $id ) {\n+\t\tglobal $wpdb;\n+\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_quiz_questions} WHERE quiz_id = {$id}\" );\n+\t}\n+\n+\tprotected function _delete_question( $id ) {\n+\t\tglobal $wpdb;\n+\t\t$wpdb->query( \"DELETE FROM {$wpdb->learnpress_question_answers} WHERE question_id = {$id}\" );\n+\t}\n+\n+\tprotected function _delete_post( $post_id ) {\n+\t\tglobal $wpdb;\n+\t\t$wpdb->query( \"DELETE FROM {$wpdb->postmeta} WHERE post_id = $post_id\" );\n+\t\t$wpdb->query( \"DELETE FROM {$wpdb->posts} WHERE ID = $post_id\" );\n+\t}\n+\n+\tprotected function _delete_user_items( $ids ) {\n+\t\tglobal $wpdb;\n+\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\t\t$query  = $wpdb->prepare(\n+\t\t\t\"\n+\t        DELETE\n+\t        FROM {$wpdb->learnpress_user_items}\n+\t        WHERE item_id IN(\" . join( ',', $format ) . ')\n+\t    ',\n+\t\t\t$ids\n+\t\t);\n+\n+\t\t$wpdb->query( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Generate content with 'lorem' text.\n+\t *\n+\t * @param int $min\n+\t * @param int $max\n+\t * @param int $paragraphs\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function generate_content( $min = 100, $max = 500, $paragraphs = 10 ) {\n+\t\t$length = rand( $min, $max );\n+\t\t$max    = sizeof( $this->dummy_text ) - 1;\n+\t\t$words  = array();\n+\n+\t\tfor ( $i = 0; $i \u003C $length; $i++ ) {\n+\t\t\t$words[] = $this->dummy_text[ rand( 0, $max ) ];\n+\t\t}\n+\n+\t\t$p = array();\n+\n+\t\tif ( ! $paragraphs ) {\n+\t\t\t$paragraphs = self::$max_content_paragraph;\n+\t\t}\n+\n+\t\twhile ( $words && sizeof( $p ) \u003C $paragraphs ) {\n+\t\t\t$len = rand( 10, 20 );\n+\t\t\t$cut = array_splice( $words, 0, $len );\n+\t\t\t$p[] = '\u003Cp>' . ucfirst( join( ' ', $cut ) ) . '\u003C\u002Fp>';\n+\t\t}\n+\n+\t\treturn join( '', $p );\n+\t}\n+\n+\t\u002F**\n+\t * Generate title with 'lorem' text.\n+\t *\n+\t * @param int $min\n+\t * @param int $max\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function generate_title( $min = 10, $max = 15 ) {\n+\t\t$length = rand( $min, $max );\n+\t\t$max    = sizeof( $this->dummy_text ) - 1;\n+\t\t$words  = array();\n+\t\tfor ( $i = 0; $i \u003C $length; $i++ ) {\n+\t\t\t$words[] = $this->dummy_text[ rand( 0, $max ) ];\n+\t\t}\n+\n+\t\treturn ucfirst( join( ' ', $words ) );\n+\t}\n+\n+\t\u002F**\n+\t * Create course.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int|WP_Error\n+\t *\u002F\n+\tprotected function create_course( array $data ) {\n+\t\t$title = $data['name'] ?? '';\n+\n+\t\t$data_insert = array(\n+\t\t\t'post_title'   => ! empty( $title ) ? $title : __( 'Sample course', 'learnpress' ),\n+\t\t\t'post_type'    => LP_COURSE_CPT,\n+\t\t\t'post_status'  => 'publish',\n+\t\t\t'post_content' => $this->generate_content( 25, 40, 5 ),\n+\t\t);\n+\n+\t\t$course_id = wp_insert_post( $data_insert );\n+\n+\t\tif ( $course_id ) {\n+\t\t\t$metas = [\n+\t\t\t\tCoursePostModel::META_KEY_DURATION    => '10 week',\n+\t\t\t\tCoursePostModel::META_KEY_SAMPLE_DATA => 'yes',\n+\t\t\t\tCoursePostModel::META_KEY_LEVEL       => 'all',\n+\t\t\t];\n+\t\t\tforeach ( $metas as $key => $value ) {\n+\t\t\t\tupdate_post_meta( $course_id, $key, $value );\n+\t\t\t}\n+\n+\t\t\t$this->add_extra_info( $course_id );\n+\t\t}\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\tprotected function add_extra_info( $course_id ) {\n+\t\t$features = array( 'requirements', 'target_audiences', 'key_features' );\n+\n+\t\t\u002F\u002F Requirements, Target audiences, Key Features\n+\t\tforeach ( $features as $feature ) {\n+\t\t\t$feature_data = array();\n+\t\t\tfor ( $i = 0, $n = rand( 5, 10 ); $i \u003C= $n; $i++ ) {\n+\t\t\t\t$feature_data[] = $this->generate_title();\n+\t\t\t}\n+\t\t\tupdate_post_meta( $course_id, '_lp_' . $feature, $feature_data );\n+\t\t}\n+\n+\t\t\u002F\u002F FAQs\n+\t\t$feature_data = array();\n+\t\tfor ( $i = 0, $n = rand( 5, 10 ); $i \u003C= $n; $i++ ) {\n+\t\t\t$feature_data[] = array( $this->generate_title() . '?', $this->generate_content( 20, 30, 3 ) );\n+\t\t}\n+\t\tupdate_post_meta( $course_id, '_lp_faqs', $feature_data );\n+\n+\t\t\u002F\u002F Featured review\n+\t\tupdate_post_meta( $course_id, '_lp_featured_review', $this->generate_title( 30, 40 ) );\n+\t}\n+\n+\t\u002F**\n+\t * Create sections.\n+\t *\n+\t * @param int $course_id\n+\t *\u002F\n+\tprotected function create_sections( $course_id ) {\n+\t\t$section_length = call_user_func_array( 'rand', ( self::$section_range ) );\n+\n+\t\tfor ( $i = 1; $i \u003C= $section_length; $i++ ) {\n+\t\t\t$section_id = $this->create_section( 'Section ' . $i, $course_id );\n+\n+\t\t\tif ( $section_id ) {\n+\t\t\t\t$this->create_section_items( $section_id, $course_id );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Create section.\n+\t *\n+\t * @param string $name\n+\t * @param int    $course_id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprotected function create_section( $name, $course_id ) {\n+\t\tstatic $order = 1;\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$data = array(\n+\t\t\t'section_name'        => $name,\n+\t\t\t'section_course_id'   => $course_id,\n+\t\t\t'section_order'       => $order,\n+\t\t\t'section_description' => $this->generate_title(),\n+\t\t);\n+\n+\t\t$wpdb->insert(\n+\t\t\t$wpdb->learnpress_sections,\n+\t\t\t$data,\n+\t\t\tarray( '%s', '%d', '%d', '%s' )\n+\t\t);\n+\n+\t\tif ( $wpdb->insert_id ) {\n+\t\t\t++$order;\n+\n+\t\t\treturn $wpdb->insert_id;\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\t\u002F**\n+\t * Create section items.\n+\t *\n+\t * @param int $section_id\n+\t * @param int $course_id\n+\t *\u002F\n+\tprotected function create_section_items( $section_id, $course_id ) {\n+\n+\t\tstatic $lesson_count = 1;\n+\t\tstatic $quiz_count   = 1;\n+\n+\t\t$order = 0;\n+\n+\t\t$item_length = call_user_func_array( 'rand', self::$item_range );\n+\n+\t\tfor ( $i = 1; $i \u003C $item_length; $i++ ) {\n+\t\t\t$lesson_id = $this->create_lesson( 'Lesson ' . $lesson_count++, $section_id, $course_id, $order );\n+\n+\t\t\tif ( $lesson_id ) {\n+\t\t\t\t++$order;\n+\n+\t\t\t\tif ( $i == 1 ) {\n+\t\t\t\t\tupdate_post_meta( $lesson_id, '_lp_preview', 'yes' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$quiz_id = $this->create_quiz( 'Quiz ' . $quiz_count++, $section_id, $course_id, $order );\n+\n+\t\tif ( $quiz_id ) {\n+\t\t\t++$order;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Create lesson.\n+\t *\n+\t * @param string $name\n+\t * @param int    $section_id\n+\t * @param int    $course_id\n+\t *\n+\t * @return int|WP_Error\n+\t *\u002F\n+\tprotected function create_lesson( $name, $section_id, $course_id, $order ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$data = array(\n+\t\t\t'post_title'   => $name,\n+\t\t\t'post_type'    => LP_LESSON_CPT,\n+\t\t\t'post_status'  => 'publish',\n+\t\t\t'post_content' => $this->generate_content(),\n+\t\t);\n+\n+\t\t$lesson_id = wp_insert_post( $data );\n+\n+\t\tif ( $lesson_id ) {\n+\n+\t\t\tupdate_post_meta( $lesson_id, '_lp_sample_data', 'yes' );\n+\n+\t\t\t$section_data = array(\n+\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t'item_id'    => $lesson_id,\n+\t\t\t\t'item_type'  => LP_LESSON_CPT,\n+\t\t\t\t'item_order' => absint( $order ),\n+\t\t\t);\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t$section_data,\n+\t\t\t\tarray( '%d', '%d', '%s', '%d' )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $lesson_id;\n+\t}\n+\n+\t\u002F**\n+\t * Create quiz.\n+\t *\n+\t * @param string $name\n+\t * @param int    $section_id\n+\t * @param int    $course_id\n+\t *\n+\t * @return int|WP_Error\n+\t *\u002F\n+\tprotected function create_quiz( $name, $section_id, $course_id, $order ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$data = array(\n+\t\t\t'post_title'   => $name,\n+\t\t\t'post_type'    => LP_QUIZ_CPT,\n+\t\t\t'post_status'  => 'publish',\n+\t\t\t'post_content' => $this->generate_content( 25, 40, 2 ),\n+\t\t);\n+\n+\t\t$quiz_id = wp_insert_post( $data );\n+\n+\t\tif ( $quiz_id ) {\n+\n+\t\t\t$metas = array(\n+\t\t\t\t'_lp_preview'              => 'no',\n+\t\t\t\t\u002F\u002F '_lp_minus_points'         => 0,\n+\t\t\t\t\u002F\u002F '_lp_show_hide_question'   => 'no',\n+\t\t\t\t\u002F\u002F '_lp_review_questions'     => 'yes',\n+\t\t\t\t\u002F\u002F '_lp_show_result'          => 'yes',\n+\t\t\t\t'_lp_duration'             => ( rand( 1, 5 ) * 10 ) . ' ' . 'minute',\n+\t\t\t\t'_lp_passing_grade'        => rand( 5, 9 ) * 10,\n+\t\t\t\t\u002F\u002F '_lp_retake_count'         => rand( 0, 10 ),\n+\t\t\t\t\u002F\u002F '_lp_archive_history'      => 'no',\n+\t\t\t\t\u002F\u002F '_lp_show_check_answer'    => '0',\n+\t\t\t\t\u002F\u002F '_lp_show_hint'            => '0',\n+\t\t\t\t'_lp_sample_data'          => 'yes',\n+\t\t\t\t'_lp_negative_marking'     => 'no',\n+\t\t\t\t'_lp_minus_skip_questions' => 'no',\n+\t\t\t\t'_lp_instant_check'        => 'no',\n+\t\t\t\t'_lp_retake_count'         => '0',\n+\t\t\t\t'_lp_pagination'           => '1',\n+\t\t\t\t'_lp_review'               => 'yes',\n+\t\t\t\t'_lp_show_correct_review'  => 'yes',\n+\t\t\t);\n+\n+\t\t\tforeach ( $metas as $key => $value ) {\n+\t\t\t\tupdate_post_meta( $quiz_id, $key, $value );\n+\t\t\t}\n+\n+\t\t\t$section_data = array(\n+\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t'item_id'    => $quiz_id,\n+\t\t\t\t'item_type'  => LP_QUIZ_CPT,\n+\t\t\t\t'item_order' => absint( $order ),\n+\t\t\t);\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t$section_data,\n+\t\t\t\tarray( '%d', '%d', '%s', '%d' )\n+\t\t\t);\n+\n+\t\t\t$this->create_quiz_questions( $quiz_id );\n+\t\t}\n+\n+\t\treturn $quiz_id;\n+\t}\n+\n+\t\u002F**\n+\t * Create questions of a quiz.\n+\t *\n+\t * @param int $quiz_id\n+\t *\u002F\n+\tprotected function create_quiz_questions( $quiz_id ) {\n+\t\tstatic $question_index = 1;\n+\t\tglobal $wpdb;\n+\n+\t\t$question_count = call_user_func_array( 'rand', self::$question_range );\n+\t\tfor ( $i = 1; $i \u003C= $question_count; $i++ ) {\n+\t\t\t$data = array(\n+\t\t\t\t'post_title'   => 'Question ' . $question_index++,\n+\t\t\t\t'post_type'    => LP_QUESTION_CPT,\n+\t\t\t\t'post_status'  => 'publish',\n+\t\t\t\t'post_content' => $this->generate_content( 25, 40, 2 ),\n+\t\t\t);\n+\n+\t\t\t$question_id = wp_insert_post( $data );\n+\n+\t\t\tif ( ! $question_id ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$type = $this->get_question_type();\n+\n+\t\t\tupdate_post_meta( $question_id, '_lp_type', $type );\n+\t\t\tupdate_post_meta( $question_id, '_lp_sample_data', 'yes' );\n+\n+\t\t\t$quiz_question_data = array(\n+\t\t\t\t'quiz_id'     => $quiz_id,\n+\t\t\t\t'question_id' => $question_id,\n+\t\t\t);\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_quiz_questions,\n+\t\t\t\t$quiz_question_data,\n+\t\t\t\tarray( '%d', '%d' )\n+\t\t\t);\n+\n+\t\t\tif ( $wpdb->insert_id ) {\n+\t\t\t\t$this->create_question_answers( $question_id, $type );\n+\t\t\t} else {\n+\t\t\t\terror_log( 'create_quiz_questions => ', $wpdb->last_error );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Create answers for a question.\n+\t *\n+\t * @param int    $question_id\n+\t * @param string $type\n+\t *\u002F\n+\tprotected function create_question_answers( $question_id, $type ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$answers = $this->get_answers( $type );\n+\t\tforeach ( $answers as $order => $answer ) {\n+\t\t\t$data = array(\n+\t\t\t\t'question_id' => $question_id,\n+\t\t\t\t'title'       => $answer['title'],\n+\t\t\t\t'value'       => $answer['value'],\n+\t\t\t\t'is_true'     => $answer['is_true'],\n+\t\t\t\t'order'       => $order + 1,\n+\t\t\t);\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t$data,\n+\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get random answers by type of question.\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_answers( $type ) {\n+\t\t$answers = array();\n+\n+\t\t$option_count = $type === 'true_or_false' ? 2 : call_user_func_array( 'rand', self::$answer_range );\n+\n+\t\tfor ( $i = 1; $i \u003C= $option_count; $i++ ) {\n+\t\t\t$answers[] = array(\n+\t\t\t\t'title'   => $this->generate_title(),\n+\t\t\t\t'value'   => learn_press_random_value(),\n+\t\t\t\t'is_true' => 'no',\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Set option is TRUE randomize\n+\t\tif ( $type !== 'multi_choice' ) {\n+\t\t\t$at                        = rand( 0, sizeof( $answers ) - 1 );\n+\t\t\t$answers[ $at ]['is_true'] = 'yes';\n+\t\t\t$answers[ $at ]['title']   = _x( '[TRUE] - ', 'install-sample-course', 'learnpress' ) . $answers[ $at ]['title'];\n+\t\t} else {\n+\t\t\t$has_true_option = false;\n+\t\t\twhile ( ! $has_true_option ) {\n+\t\t\t\tforeach ( $answers as $k => $v ) {\n+\t\t\t\t\t$answers[ $k ]['is_true'] = rand( 0, 100 ) % 2 ? 'yes' : 'no';\n+\n+\t\t\t\t\tif ( $answers[ $k ]['is_true'] === 'yes' ) {\n+\t\t\t\t\t\t$answers[ $k ]['title'] = _x( ' [TRUE] - ', 'install-sample-course', 'learnpress' ) . $answers[ $k ]['title'];\n+\t\t\t\t\t\t$has_true_option        = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $answers;\n+\t}\n+\n+\t\u002F**\n+\t * Get random type for a question.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_question_type() {\n+\t\t$types = array(\n+\t\t\t'true_or_false',\n+\t\t\t'single_choice',\n+\t\t\t'multi_choice',\n+\t\t);\n+\n+\t\treturn $types[ rand( 0, sizeof( $types ) - 1 ) ];\n+\t}\n+}\n+\n+new LP_Install_Sample_Data();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-items.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-items.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-items.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-items.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,365 +1,365 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Modal_Search_Items.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Modal_Search_Items' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Modal_Search_Items\r\n-\t *\u002F\r\n-\tclass LP_Modal_Search_Items {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_options = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_query_args = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_items = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_changed = true;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Modal_Search_Items constructor.\r\n-\t\t *\r\n-\t\t * @param string $options\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $options = '' ) {\r\n-\t\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'js_template' ) );\r\n-\r\n-\t\t\t$this->_options = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fmodal-search-items-args',\r\n-\t\t\t\twp_parse_args(\r\n-\t\t\t\t\t$options,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type'         => '',\r\n-\t\t\t\t\t\t'context'      => '',\r\n-\t\t\t\t\t\t'context_id'   => '',\r\n-\t\t\t\t\t\t'exclude'      => '',\r\n-\t\t\t\t\t\t'term'         => '',\r\n-\t\t\t\t\t\t'add_button'   => __( 'Add', 'learnpress' ),\r\n-\t\t\t\t\t\t'close_button' => __( 'Close', 'learnpress' ),\r\n-\t\t\t\t\t\t'title'        => __( 'Search items', 'learnpress' ),\r\n-\t\t\t\t\t\t'limit'        => 10,\r\n-\t\t\t\t\t\t'paged'        => 1,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( is_string( $this->_options['exclude'] ) ) {\r\n-\t\t\t\t$this->_options['exclude'] = explode( ',', $this->_options['exclude'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items\u002Fexclude', array( $this, 'exclude_items' ), 10, 4 );\r\n-\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items\u002Fargs', array( $this, 'query_args' ), 10, 3 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Build query args from object options and get posts.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _get_items(): array {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\t\t$term       = $this->_options['term'];\r\n-\t\t\t$type       = $this->_options['type'];\r\n-\t\t\t$context    = $this->_options['context'];\r\n-\t\t\t$context_id = $this->_options['context_id'];\r\n-\r\n-\t\t\t$exclude = array_unique( (array) apply_filters( 'learn-press\u002Fmodal-search-items\u002Fexclude', $this->_options['exclude'], $type, $context, $context_id ) );\r\n-\r\n-\t\t\tif ( is_array( $exclude ) ) {\r\n-\t\t\t\t$exclude = array_map( 'intval', $exclude );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$paged = max( 1, $this->_options['paged'] );\r\n-\r\n-\t\t\t$args = array(\r\n-\t\t\t\t'post_type'      => array( $type ),\r\n-\t\t\t\t'post_status'    => 'publish',\r\n-\t\t\t\t'order'          => 'ASC',\r\n-\t\t\t\t'orderby'        => 'parent title',\r\n-\t\t\t\t'exclude'        => $exclude,\r\n-\t\t\t\t'posts_per_page' => $this->_options['limit'],\r\n-\t\t\t\t'offset'         => ( $paged - 1 ) * $this->_options['limit'],\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( 'order-items' === $context ) {\r\n-\t\t\t\t$context_id = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$context_id = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fcontext-id', $context_id, $context );\r\n-\t\t\tif ( $context_id ) {\r\n-\t\t\t\t\u002F\u002F Admin can get all items\r\n-\t\t\t\tif ( ! user_can( $user_id, 'administrator' ) ) {\r\n-\t\t\t\t\t$args['author'] = get_post_field( 'post_author', $context_id );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $term ) {\r\n-\t\t\t\t$args['s'] = $term;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_query_args = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fargs', $args, $context, $context_id );\r\n-\r\n-\t\t\t$posts = get_posts( $this->_query_args );\r\n-\r\n-\t\t\tif ( $posts ) {\r\n-\t\t\t\t$this->_items = wp_list_pluck( $posts, 'ID' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->_items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the items\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_items() {\r\n-\t\t\tif ( $this->_changed ) {\r\n-\t\t\t\t$this->_get_items();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->_items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get pagination in html.\r\n-\t\t *\r\n-\t\t * @param bool $html\r\n-\t\t *\r\n-\t\t * @return array|string\r\n-\t\t *\u002F\r\n-\t\tfunction get_pagination( $html = true ) {\r\n-\t\t\t$pagination = '';\r\n-\t\t\t$items      = $this->get_items();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\t$args = $this->_query_args;\r\n-\r\n-\t\t\t\tif ( ! empty( $args['exclude'] ) ) {\r\n-\t\t\t\t\t$args['post__not_in'] = $args['exclude'];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$q = new WP_Query( $args );\r\n-\r\n-\t\t\t\tif ( $this->_options['paged'] && $q->max_num_pages > 1 ) {\r\n-\t\t\t\t\t$pagenum_link = html_entity_decode( get_pagenum_link() );\r\n-\r\n-\t\t\t\t\t$query_args = array();\r\n-\t\t\t\t\t$url_parts  = explode( '?', $pagenum_link );\r\n-\r\n-\t\t\t\t\tif ( isset( $url_parts[1] ) ) {\r\n-\t\t\t\t\t\twp_parse_str( $url_parts[1], $query_args );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\r\n-\t\t\t\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\r\n-\r\n-\t\t\t\t\t$pagination = array(\r\n-\t\t\t\t\t\t'base'      => $pagenum_link,\r\n-\t\t\t\t\t\t'total'     => $q->max_num_pages,\r\n-\t\t\t\t\t\t'current'   => max( 1, $this->_options['paged'] ),\r\n-\t\t\t\t\t\t'mid_size'  => 1,\r\n-\t\t\t\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\r\n-\t\t\t\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\r\n-\t\t\t\t\t\t'next_text' => __( '>', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'      => '',\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( $html ) {\r\n-\t\t\t\t\t\t$pagination = paginate_links( $pagination );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t$this->_changed = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $pagination;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return string of list items\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_html_items() {\r\n-\t\t\tob_start();\r\n-\t\t\t$items = $this->get_items();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $id => $item ) {\r\n-\t\t\t\t\t$type        = get_post_type( $item );\r\n-\t\t\t\t\t$type_object = get_post_type_object( $type );\r\n-\t\t\t\t\t$type_name   = $type_object ? $type_object->labels->singular_name : '';\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\r\n-                    \u003Cli class=\"%s\" data-id=\"%2$d\" data-type=\"%4$s\" data-text=\"%3$s\">\r\n-                        \u003Clabel>\r\n-                            \u003Cinput type=\"checkbox\" value=\"%2$d\" name=\"selectedItems[]\">\r\n-                            \u003Cspan class=\"lp-item-text\">%3$s (%5$s - #%6$s)\u003C\u002Fspan>\r\n-                        \u003C\u002Flabel>\r\n-                    \u003C\u002Fli>\r\n-                    ',\r\n-\t\t\t\t\t\t'lp-result-item',\r\n-\t\t\t\t\t\t$item,\r\n-\t\t\t\t\t\tesc_attr( get_the_title( $item ) ),\r\n-\t\t\t\t\t\t$type,\r\n-\t\t\t\t\t\t$type_name,\r\n-\t\t\t\t\t\t$item\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\r\n-\t\t\t\t\u002F\u002F @since 3.0.0\r\n-\t\t\t\t$item_not_found = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fnot-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );\r\n-\r\n-\t\t\t\techo '\u003Cli>' . $item_not_found . '\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * JS Modal template.\r\n-\t\t *\u002F\r\n-\t\tpublic function js_template() {\r\n-\t\t\t$view = learn_press_get_admin_view( 'modal-search-items' );\r\n-\t\t\tinclude $view;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array  $args\r\n-\t\t * @param string $context\r\n-\t\t * @param string $context_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function query_args( $args, $context, $context_id ) {\r\n-\t\t\tif ( ( LP_ORDER_CPT === get_post_type( $context_id ) ) && ( LP_COURSE_CPT === $args['post_type'] ) ) {\r\n-\t\t\t\tif ( ! empty( $args['author'] ) ) {\r\n-\t\t\t\t\tunset( $args['author'] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filter to exclude the items has already added to it's parent.\r\n-\t\t * Each item only use one time\r\n-\t\t *\r\n-\t\t * @param        $exclude\r\n-\t\t * @param        $type\r\n-\t\t * @param string  $context\r\n-\t\t * @param null    $context_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function exclude_items( $exclude, $type, $context = '', $context_id = null ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$used_items = array();\r\n-\r\n-\t\t\tswitch ( $type ) {\r\n-\t\t\t\tcase 'lp_lesson':\r\n-\t\t\t\tcase 'lp_quiz':\r\n-\t\t\t\t\t$query      = $wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT item_id\r\n-\t\t\t\t\t\tFROM {$wpdb->prefix}learnpress_section_items si\r\n-\t\t\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id\r\n-\t\t\t\t\t\tINNER JOIN {$wpdb->posts} p ON p.ID = s.section_course_id\r\n-\t\t\t\t\t\tWHERE %d\r\n-\t\t\t\t\t\tAND p.post_type = %s\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t\t1,\r\n-\t\t\t\t\t\tLP_COURSE_CPT\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$used_items = $wpdb->get_col( $query );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'lp_question':\r\n-\t\t\t\t\t$query      = $wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT question_id\r\n-\t\t\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions AS qq\r\n-\t\t\t\t\t\tINNER JOIN {$wpdb->posts} q ON q.ID = qq.quiz_id\r\n-\t\t\t\t\t\tWHERE %d\r\n-\t\t\t\t\t\tAND q.post_type = %s\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t\t1,\r\n-\t\t\t\t\t\tLP_QUIZ_CPT\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$used_items = $wpdb->get_col( $query );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $used_items && $exclude ) {\r\n-\t\t\t\t$exclude = array_merge( $exclude, $used_items );\r\n-\t\t\t} elseif ( $used_items ) {\r\n-\t\t\t\t$exclude = $used_items;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn is_array( $exclude ) ? array_unique( $exclude ) : array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $message\r\n-\t\t * @param $type\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function items_not_found( $message, $type ) {\r\n-\t\t\tswitch ( $type ) {\r\n-\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t\t$message  = __( 'There are no available lessons for this course, please use ', 'learnpress' );\r\n-\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_lesson' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t$message  = __( 'There are no available quizzes for this course, please use ', 'learnpress' );\r\n-\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_quiz' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t\t$message  = __( 'There are no available questions for this quiz, please use ', 'learnpress' );\r\n-\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_question' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $message;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|LP_Modal_Search_Items\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tstatic $instance;\r\n-\t\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t\t$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $instance;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Modal_Search_Items.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Modal_Search_Items' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Modal_Search_Items\n+\t *\u002F\n+\tclass LP_Modal_Search_Items {\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_options = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_query_args = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_items = array();\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_changed = true;\n+\n+\t\t\u002F**\n+\t\t * LP_Modal_Search_Items constructor.\n+\t\t *\n+\t\t * @param string $options\n+\t\t *\u002F\n+\t\tpublic function __construct( $options = '' ) {\n+\t\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'js_template' ) );\n+\n+\t\t\t$this->_options = apply_filters(\n+\t\t\t\t'learn-press\u002Fmodal-search-items-args',\n+\t\t\t\twp_parse_args(\n+\t\t\t\t\t$options,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type'         => '',\n+\t\t\t\t\t\t'context'      => '',\n+\t\t\t\t\t\t'context_id'   => '',\n+\t\t\t\t\t\t'exclude'      => '',\n+\t\t\t\t\t\t'term'         => '',\n+\t\t\t\t\t\t'add_button'   => __( 'Add', 'learnpress' ),\n+\t\t\t\t\t\t'close_button' => __( 'Close', 'learnpress' ),\n+\t\t\t\t\t\t'title'        => __( 'Search items', 'learnpress' ),\n+\t\t\t\t\t\t'limit'        => 10,\n+\t\t\t\t\t\t'paged'        => 1,\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( is_string( $this->_options['exclude'] ) ) {\n+\t\t\t\t$this->_options['exclude'] = explode( ',', $this->_options['exclude'] );\n+\t\t\t}\n+\n+\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items\u002Fexclude', array( $this, 'exclude_items' ), 10, 4 );\n+\t\t\tadd_filter( 'learn-press\u002Fmodal-search-items\u002Fargs', array( $this, 'query_args' ), 10, 3 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Build query args from object options and get posts.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _get_items(): array {\n+\t\t\t$user_id = get_current_user_id();\n+\n+\t\t\t$term       = $this->_options['term'];\n+\t\t\t$type       = $this->_options['type'];\n+\t\t\t$context    = $this->_options['context'];\n+\t\t\t$context_id = $this->_options['context_id'];\n+\n+\t\t\t$exclude = array_unique( (array) apply_filters( 'learn-press\u002Fmodal-search-items\u002Fexclude', $this->_options['exclude'], $type, $context, $context_id ) );\n+\n+\t\t\tif ( is_array( $exclude ) ) {\n+\t\t\t\t$exclude = array_map( 'intval', $exclude );\n+\t\t\t}\n+\n+\t\t\t$paged = max( 1, $this->_options['paged'] );\n+\n+\t\t\t$args = array(\n+\t\t\t\t'post_type'      => array( $type ),\n+\t\t\t\t'post_status'    => 'publish',\n+\t\t\t\t'order'          => 'ASC',\n+\t\t\t\t'orderby'        => 'parent title',\n+\t\t\t\t'exclude'        => $exclude,\n+\t\t\t\t'posts_per_page' => $this->_options['limit'],\n+\t\t\t\t'offset'         => ( $paged - 1 ) * $this->_options['limit'],\n+\t\t\t);\n+\n+\t\t\tif ( 'order-items' === $context ) {\n+\t\t\t\t$context_id = false;\n+\t\t\t}\n+\n+\t\t\t$context_id = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fcontext-id', $context_id, $context );\n+\t\t\tif ( $context_id ) {\n+\t\t\t\t\u002F\u002F Admin can get all items\n+\t\t\t\tif ( ! user_can( $user_id, 'administrator' ) ) {\n+\t\t\t\t\t$args['author'] = get_post_field( 'post_author', $context_id );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $term ) {\n+\t\t\t\t$args['s'] = $term;\n+\t\t\t}\n+\n+\t\t\t$this->_query_args = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fargs', $args, $context, $context_id );\n+\n+\t\t\t$posts = get_posts( $this->_query_args );\n+\n+\t\t\tif ( $posts ) {\n+\t\t\t\t$this->_items = wp_list_pluck( $posts, 'ID' );\n+\t\t\t}\n+\n+\t\t\treturn $this->_items;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the items\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_items() {\n+\t\t\tif ( $this->_changed ) {\n+\t\t\t\t$this->_get_items();\n+\t\t\t}\n+\n+\t\t\treturn $this->_items;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get pagination in html.\n+\t\t *\n+\t\t * @param bool $html\n+\t\t *\n+\t\t * @return array|string\n+\t\t *\u002F\n+\t\tfunction get_pagination( $html = true ) {\n+\t\t\t$pagination = '';\n+\t\t\t$items      = $this->get_items();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\t$args = $this->_query_args;\n+\n+\t\t\t\tif ( ! empty( $args['exclude'] ) ) {\n+\t\t\t\t\t$args['post__not_in'] = $args['exclude'];\n+\t\t\t\t}\n+\n+\t\t\t\t$q = new WP_Query( $args );\n+\n+\t\t\t\tif ( $this->_options['paged'] && $q->max_num_pages > 1 ) {\n+\t\t\t\t\t$pagenum_link = html_entity_decode( get_pagenum_link() );\n+\n+\t\t\t\t\t$query_args = array();\n+\t\t\t\t\t$url_parts  = explode( '?', $pagenum_link );\n+\n+\t\t\t\t\tif ( isset( $url_parts[1] ) ) {\n+\t\t\t\t\t\twp_parse_str( $url_parts[1], $query_args );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\n+\t\t\t\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\n+\n+\t\t\t\t\t$pagination = array(\n+\t\t\t\t\t\t'base'      => $pagenum_link,\n+\t\t\t\t\t\t'total'     => $q->max_num_pages,\n+\t\t\t\t\t\t'current'   => max( 1, $this->_options['paged'] ),\n+\t\t\t\t\t\t'mid_size'  => 1,\n+\t\t\t\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\n+\t\t\t\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\n+\t\t\t\t\t\t'next_text' => __( '>', 'learnpress' ),\n+\t\t\t\t\t\t'type'      => '',\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( $html ) {\n+\t\t\t\t\t\t$pagination = paginate_links( $pagination );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$this->_changed = false;\n+\t\t\t}\n+\n+\t\t\treturn $pagination;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return string of list items\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_html_items() {\n+\t\t\tob_start();\n+\t\t\t$items = $this->get_items();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $id => $item ) {\n+\t\t\t\t\t$type        = get_post_type( $item );\n+\t\t\t\t\t$type_object = get_post_type_object( $type );\n+\t\t\t\t\t$type_name   = $type_object ? $type_object->labels->singular_name : '';\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\n+                    \u003Cli class=\"%s\" data-id=\"%2$d\" data-type=\"%4$s\" data-text=\"%3$s\">\n+                        \u003Clabel>\n+                            \u003Cinput type=\"checkbox\" value=\"%2$d\" name=\"selectedItems[]\">\n+                            \u003Cspan class=\"lp-item-text\">%3$s (%5$s - #%6$s)\u003C\u002Fspan>\n+                        \u003C\u002Flabel>\n+                    \u003C\u002Fli>\n+                    ',\n+\t\t\t\t\t\t'lp-result-item',\n+\t\t\t\t\t\t$item,\n+\t\t\t\t\t\tesc_attr( get_the_title( $item ) ),\n+\t\t\t\t\t\t$type,\n+\t\t\t\t\t\t$type_name,\n+\t\t\t\t\t\t$item\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t} else {\n+\n+\t\t\t\t\u002F\u002F @since 3.0.0\n+\t\t\t\t$item_not_found = apply_filters( 'learn-press\u002Fmodal-search-items\u002Fnot-found', __( 'No item found', 'learnpress' ), $this->_options['type'] );\n+\n+\t\t\t\techo '\u003Cli>' . $item_not_found . '\u003C\u002Fli>';\n+\t\t\t}\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * JS Modal template.\n+\t\t *\u002F\n+\t\tpublic function js_template() {\n+\t\t\t$view = learn_press_get_admin_view( 'modal-search-items' );\n+\t\t\tinclude $view;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array  $args\n+\t\t * @param string $context\n+\t\t * @param string $context_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function query_args( $args, $context, $context_id ) {\n+\t\t\tif ( ( LP_ORDER_CPT === get_post_type( $context_id ) ) && ( LP_COURSE_CPT === $args['post_type'] ) ) {\n+\t\t\t\tif ( ! empty( $args['author'] ) ) {\n+\t\t\t\t\tunset( $args['author'] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Filter to exclude the items has already added to it's parent.\n+\t\t * Each item only use one time\n+\t\t *\n+\t\t * @param        $exclude\n+\t\t * @param        $type\n+\t\t * @param string  $context\n+\t\t * @param null    $context_id\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function exclude_items( $exclude, $type, $context = '', $context_id = null ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$used_items = array();\n+\n+\t\t\tswitch ( $type ) {\n+\t\t\t\tcase 'lp_lesson':\n+\t\t\t\tcase 'lp_quiz':\n+\t\t\t\t\t$query      = $wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT item_id\n+\t\t\t\t\t\tFROM {$wpdb->prefix}learnpress_section_items si\n+\t\t\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id\n+\t\t\t\t\t\tINNER JOIN {$wpdb->posts} p ON p.ID = s.section_course_id\n+\t\t\t\t\t\tWHERE %d\n+\t\t\t\t\t\tAND p.post_type = %s\n+\t\t\t\t\t\",\n+\t\t\t\t\t\t1,\n+\t\t\t\t\t\tLP_COURSE_CPT\n+\t\t\t\t\t);\n+\t\t\t\t\t$used_items = $wpdb->get_col( $query );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'lp_question':\n+\t\t\t\t\t$query      = $wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT question_id\n+\t\t\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions AS qq\n+\t\t\t\t\t\tINNER JOIN {$wpdb->posts} q ON q.ID = qq.quiz_id\n+\t\t\t\t\t\tWHERE %d\n+\t\t\t\t\t\tAND q.post_type = %s\n+\t\t\t\t\t\",\n+\t\t\t\t\t\t1,\n+\t\t\t\t\t\tLP_QUIZ_CPT\n+\t\t\t\t\t);\n+\t\t\t\t\t$used_items = $wpdb->get_col( $query );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t}\n+\n+\t\t\tif ( $used_items && $exclude ) {\n+\t\t\t\t$exclude = array_merge( $exclude, $used_items );\n+\t\t\t} elseif ( $used_items ) {\n+\t\t\t\t$exclude = $used_items;\n+\t\t\t}\n+\n+\t\t\treturn is_array( $exclude ) ? array_unique( $exclude ) : array();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $message\n+\t\t * @param $type\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function items_not_found( $message, $type ) {\n+\t\t\tswitch ( $type ) {\n+\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t\t$message  = __( 'There are no available lessons for this course, please use ', 'learnpress' );\n+\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_lesson' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t$message  = __( 'There are no available quizzes for this course, please use ', 'learnpress' );\n+\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_quiz' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t\t$message  = __( 'There are no available questions for this quiz, please use ', 'learnpress' );\n+\t\t\t\t\t$message .= '\u003Ca target=\"_blank\" href=\"' . admin_url( 'post-new.php?post_type=lp_question' ) . '\">' . esc_html__( 'Add new item', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\treturn $message;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool|LP_Modal_Search_Items\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tstatic $instance;\n+\t\t\tif ( is_null( $instance ) ) {\n+\t\t\t\t$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn $instance;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-users.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-users.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-users.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-modal-search-users.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,222 +1,222 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Modal_Search_Users\r\n- *\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-class LP_Modal_Search_Users {\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_options = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_query_args = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var WP_User_Query\r\n-\t *\u002F\r\n-\tprotected $_query = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_items = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $_changed = true;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Modal_Search_Users constructor.\r\n-\t *\r\n-\t * @param string $options\r\n-\t *\u002F\r\n-\tpublic function __construct( $options = '' ) {\r\n-\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'js_template' ) );\r\n-\t\t$this->_options = wp_parse_args(\r\n-\t\t\t$options,\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'         => '',\r\n-\t\t\t\t'context'      => '',\r\n-\t\t\t\t'context_id'   => '',\r\n-\t\t\t\t'exclude'      => '',\r\n-\t\t\t\t'term'         => '',\r\n-\t\t\t\t'text_format'  => '{{display_name}} ({{email}})',\r\n-\t\t\t\t'add_button'   => __( 'Add', 'learnpress' ),\r\n-\t\t\t\t'close_button' => __( 'Close', 'learnpress' ),\r\n-\t\t\t\t'title'        => __( 'Search users', 'learnpress' ),\r\n-\t\t\t\t'number'       => 10,\r\n-\t\t\t\t'paged'        => 1,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( is_string( $this->_options['exclude'] ) ) {\r\n-\t\t\t$this->_options['exclude'] = explode( ',', $this->_options['exclude'] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function _get_items() {\r\n-\t\t$term       = $this->_options['term'];\r\n-\t\t$type       = $this->_options['type'];\r\n-\t\t$context    = $this->_options['context'];\r\n-\t\t$context_id = $this->_options['context_id'];\r\n-\r\n-\t\t$exclude = array_unique( (array) apply_filters( 'learn-press\u002Fmodal-search-user\u002Fexclude', $this->_options['exclude'], $type, $context, $context_id ) );\r\n-\r\n-\t\tif ( ! empty( $exclude ) ) {\r\n-\t\t\t$exclude = array_map( 'intval', $exclude );\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'number'  => $this->_options['number'],\r\n-\t\t\t'offset'  => ( $this->_options['paged'] - 1 ) * $this->_options['number'],\r\n-\t\t\t'exclude' => $exclude,\r\n-\t\t);\r\n-\t\tif ( $term ) {\r\n-\t\t\t$args['search']         = sprintf( '*%s*', esc_attr( $term ) );\r\n-\t\t\t$args['search_columns'] = array( 'user_login', 'user_email' );\r\n-\t\t}\r\n-\t\t$this->_query_args = apply_filters( 'learn-press\u002Fmodal-search-users\u002Fargs', $args, $context, $context_id );\r\n-\r\n-\t\t\u002F\u002F The Query\r\n-\t\t$this->_query = new WP_User_Query( $args );\r\n-\t\t$this->_items = array();\r\n-\r\n-\t\t$results = $this->_query->get_results();\r\n-\t\tif ( $results ) {\r\n-\t\t\tforeach ( $results as $user ) {\r\n-\t\t\t\t$this->_items[ $user->ID ] = $user->user_login;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this->_items;\r\n-\t}\r\n-\r\n-\tpublic function get_items() {\r\n-\t\tif ( $this->_changed ) {\r\n-\t\t\t$this->_get_items();\r\n-\t\t}\r\n-\r\n-\t\treturn $this->_items;\r\n-\t}\r\n-\r\n-\tfunction get_pagination() {\r\n-\r\n-\t\t$pagination = '';\r\n-\t\t$items      = $this->get_items();\r\n-\r\n-\t\tif ( $items && $this->_options['number'] > 0 ) {\r\n-\r\n-\t\t\t$number        = $this->_options['number'];\r\n-\t\t\t$total         = $this->_query->get_total();\r\n-\t\t\t$max_num_pages = intval( $total \u002F $number );\r\n-\r\n-\t\t\tif ( $total % $number ) {\r\n-\t\t\t\t$max_num_pages ++;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->_options['paged'] && $max_num_pages > 1 ) {\r\n-\t\t\t\t$pagenum_link = html_entity_decode( get_pagenum_link() );\r\n-\r\n-\t\t\t\t$query_args = array();\r\n-\t\t\t\t$url_parts  = explode( '?', $pagenum_link );\r\n-\r\n-\t\t\t\tif ( isset( $url_parts[1] ) ) {\r\n-\t\t\t\t\twp_parse_str( $url_parts[1], $query_args );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\r\n-\t\t\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\r\n-\r\n-\t\t\t\t$pagination = paginate_links(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'base'      => $pagenum_link,\r\n-\t\t\t\t\t\t'total'     => $max_num_pages,\r\n-\t\t\t\t\t\t'current'   => max( 1, $this->_options['paged'] ),\r\n-\t\t\t\t\t\t'mid_size'  => 1,\r\n-\t\t\t\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\r\n-\t\t\t\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\r\n-\t\t\t\t\t\t'next_text' => __( '>', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'      => '',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $pagination;\r\n-\t}\r\n-\r\n-\tpublic function get_html_items() {\r\n-\r\n-\t\t$variables = array(\r\n-\t\t\t'id',\r\n-\t\t\t'email',\r\n-\t\t\t'user_login',\r\n-\t\t\t'description',\r\n-\t\t\t'first_name',\r\n-\t\t\t'last_name',\r\n-\t\t\t'nickname',\r\n-\t\t\t'display_name',\r\n-\t\t);\r\n-\r\n-\t\tob_start();\r\n-\r\n-\t\t$items = $this->get_items();\r\n-\r\n-\t\tif ( $items ) {\r\n-\t\t\tforeach ( $items as $id => $item ) {\r\n-\t\t\t\t$the_user = learn_press_get_user( $id );\r\n-\t\t\t\t$text     = str_replace( '{{id}}', $the_user->get_id(), $this->_options['text_format'] );\r\n-\t\t\t\t$data     = array();\r\n-\t\t\t\tforeach ( $variables as $variable ) {\r\n-\t\t\t\t\t$text              = str_replace( '{{' . $variable . '}}', $the_user->get_data( $variable ), $text );\r\n-\t\t\t\t\t$data[ $variable ] = $the_user->get_data( $variable );\r\n-\t\t\t\t}\r\n-\t\t\t\t$data['id'] = $id;\r\n-\t\t\t\tprintf( '\u003Cli class=\"%s\" data-id=\"%d\" data-data=\"%s\">\u003Clabel>', 'lp-result-item user-' . $id, $id, esc_attr( wp_json_encode( $data ) ) );\r\n-\t\t\t\tif ( $this->_options['multiple'] ) {\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\r\n-                   \t\t\u003Cinput type=\"checkbox\" value=\"%d\" name=\"selectedItems[]\">\r\n-                        \u003Cspan class=\"lp-item-text\">%s\u003C\u002Fspan>\r\n-                    ',\r\n-\t\t\t\t\t\t$id,\r\n-\t\t\t\t\t\tesc_attr( $text )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\r\n-                        \u003Ca href=\"\">\u003Cspan class=\"lp-item-text\">%s\u003C\u002Fspan>\u003C\u002Fa>\r\n-                    ',\r\n-\t\t\t\t\t\tesc_attr( $text )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\techo '\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\techo '\u003Cli>' . apply_filters( 'learn-press\u002Fmodal-search-users\u002Fnot-found', __( 'No item found', 'learnpress' ), $this->_options['type'] ) . '\u003C\u002Fli>';\r\n-\t\t}\r\n-\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\tpublic function js_template() {\r\n-\t\t$view = learn_press_get_admin_view( 'modal-search-users' );\r\n-\t\tinclude $view;\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Modal_Search_Users\n+ *\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+class LP_Modal_Search_Users {\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_options = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_query_args = array();\n+\n+\t\u002F**\n+\t * @var WP_User_Query\n+\t *\u002F\n+\tprotected $_query = null;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_items = array();\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $_changed = true;\n+\n+\t\u002F**\n+\t * LP_Modal_Search_Users constructor.\n+\t *\n+\t * @param string $options\n+\t *\u002F\n+\tpublic function __construct( $options = '' ) {\n+\t\tadd_action( 'admin_print_footer_scripts', array( $this, 'js_template' ) );\n+\t\t$this->_options = wp_parse_args(\n+\t\t\t$options,\n+\t\t\tarray(\n+\t\t\t\t'type'         => '',\n+\t\t\t\t'context'      => '',\n+\t\t\t\t'context_id'   => '',\n+\t\t\t\t'exclude'      => '',\n+\t\t\t\t'term'         => '',\n+\t\t\t\t'text_format'  => '{{display_name}} ({{email}})',\n+\t\t\t\t'add_button'   => __( 'Add', 'learnpress' ),\n+\t\t\t\t'close_button' => __( 'Close', 'learnpress' ),\n+\t\t\t\t'title'        => __( 'Search users', 'learnpress' ),\n+\t\t\t\t'number'       => 10,\n+\t\t\t\t'paged'        => 1,\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( is_string( $this->_options['exclude'] ) ) {\n+\t\t\t$this->_options['exclude'] = explode( ',', $this->_options['exclude'] );\n+\t\t}\n+\t}\n+\n+\tprotected function _get_items() {\n+\t\t$term       = $this->_options['term'];\n+\t\t$type       = $this->_options['type'];\n+\t\t$context    = $this->_options['context'];\n+\t\t$context_id = $this->_options['context_id'];\n+\n+\t\t$exclude = array_unique( (array) apply_filters( 'learn-press\u002Fmodal-search-user\u002Fexclude', $this->_options['exclude'], $type, $context, $context_id ) );\n+\n+\t\tif ( ! empty( $exclude ) ) {\n+\t\t\t$exclude = array_map( 'intval', $exclude );\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'number'  => $this->_options['number'],\n+\t\t\t'offset'  => ( $this->_options['paged'] - 1 ) * $this->_options['number'],\n+\t\t\t'exclude' => $exclude,\n+\t\t);\n+\t\tif ( $term ) {\n+\t\t\t$args['search']         = sprintf( '*%s*', esc_attr( $term ) );\n+\t\t\t$args['search_columns'] = array( 'user_login', 'user_email' );\n+\t\t}\n+\t\t$this->_query_args = apply_filters( 'learn-press\u002Fmodal-search-users\u002Fargs', $args, $context, $context_id );\n+\n+\t\t\u002F\u002F The Query\n+\t\t$this->_query = new WP_User_Query( $args );\n+\t\t$this->_items = array();\n+\n+\t\t$results = $this->_query->get_results();\n+\t\tif ( $results ) {\n+\t\t\tforeach ( $results as $user ) {\n+\t\t\t\t$this->_items[ $user->ID ] = $user->user_login;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this->_items;\n+\t}\n+\n+\tpublic function get_items() {\n+\t\tif ( $this->_changed ) {\n+\t\t\t$this->_get_items();\n+\t\t}\n+\n+\t\treturn $this->_items;\n+\t}\n+\n+\tfunction get_pagination() {\n+\n+\t\t$pagination = '';\n+\t\t$items      = $this->get_items();\n+\n+\t\tif ( $items && $this->_options['number'] > 0 ) {\n+\n+\t\t\t$number        = $this->_options['number'];\n+\t\t\t$total         = $this->_query->get_total();\n+\t\t\t$max_num_pages = intval( $total \u002F $number );\n+\n+\t\t\tif ( $total % $number ) {\n+\t\t\t\t$max_num_pages ++;\n+\t\t\t}\n+\n+\t\t\tif ( $this->_options['paged'] && $max_num_pages > 1 ) {\n+\t\t\t\t$pagenum_link = html_entity_decode( get_pagenum_link() );\n+\n+\t\t\t\t$query_args = array();\n+\t\t\t\t$url_parts  = explode( '?', $pagenum_link );\n+\n+\t\t\t\tif ( isset( $url_parts[1] ) ) {\n+\t\t\t\t\twp_parse_str( $url_parts[1], $query_args );\n+\t\t\t\t}\n+\n+\t\t\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\n+\t\t\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\n+\n+\t\t\t\t$pagination = paginate_links(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'base'      => $pagenum_link,\n+\t\t\t\t\t\t'total'     => $max_num_pages,\n+\t\t\t\t\t\t'current'   => max( 1, $this->_options['paged'] ),\n+\t\t\t\t\t\t'mid_size'  => 1,\n+\t\t\t\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\n+\t\t\t\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\n+\t\t\t\t\t\t'next_text' => __( '>', 'learnpress' ),\n+\t\t\t\t\t\t'type'      => '',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $pagination;\n+\t}\n+\n+\tpublic function get_html_items() {\n+\n+\t\t$variables = array(\n+\t\t\t'id',\n+\t\t\t'email',\n+\t\t\t'user_login',\n+\t\t\t'description',\n+\t\t\t'first_name',\n+\t\t\t'last_name',\n+\t\t\t'nickname',\n+\t\t\t'display_name',\n+\t\t);\n+\n+\t\tob_start();\n+\n+\t\t$items = $this->get_items();\n+\n+\t\tif ( $items ) {\n+\t\t\tforeach ( $items as $id => $item ) {\n+\t\t\t\t$the_user = learn_press_get_user( $id );\n+\t\t\t\t$text     = str_replace( '{{id}}', $the_user->get_id(), $this->_options['text_format'] );\n+\t\t\t\t$data     = array();\n+\t\t\t\tforeach ( $variables as $variable ) {\n+\t\t\t\t\t$text              = str_replace( '{{' . $variable . '}}', $the_user->get_data( $variable ), $text );\n+\t\t\t\t\t$data[ $variable ] = $the_user->get_data( $variable );\n+\t\t\t\t}\n+\t\t\t\t$data['id'] = $id;\n+\t\t\t\tprintf( '\u003Cli class=\"%s\" data-id=\"%d\" data-data=\"%s\">\u003Clabel>', 'lp-result-item user-' . $id, $id, esc_attr( wp_json_encode( $data ) ) );\n+\t\t\t\tif ( $this->_options['multiple'] ) {\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\n+                   \t\t\u003Cinput type=\"checkbox\" value=\"%d\" name=\"selectedItems[]\">\n+                        \u003Cspan class=\"lp-item-text\">%s\u003C\u002Fspan>\n+                    ',\n+\t\t\t\t\t\t$id,\n+\t\t\t\t\t\tesc_attr( $text )\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\n+                        \u003Ca href=\"\">\u003Cspan class=\"lp-item-text\">%s\u003C\u002Fspan>\u003C\u002Fa>\n+                    ',\n+\t\t\t\t\t\tesc_attr( $text )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\techo '\u003C\u002Fli>';\n+\t\t\t}\n+\t\t} else {\n+\t\t\techo '\u003Cli>' . apply_filters( 'learn-press\u002Fmodal-search-users\u002Fnot-found', __( 'No item found', 'learnpress' ), $this->_options['type'] ) . '\u003C\u002Fli>';\n+\t\t}\n+\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\tpublic function js_template() {\n+\t\t$view = learn_press_get_admin_view( 'modal-search-users' );\n+\t\tinclude $view;\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tstatic $instance;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-post-type-actions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-post-type-actions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-post-type-actions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-post-type-actions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,195 +1,195 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Post_Type_Actions\r\n- *\r\n- * @since 3.1.0\r\n- *\u002F\r\n-class LP_Post_Type_Actions {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Post_Type_Actions\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $data = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Post_Type_Actions constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t\u002F\u002Fadd_action( 'save_post', array( $this, 'save_post' ) );\r\n-\t\t\u002F\u002Fadd_action( 'learn-press\u002Fadded-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );\r\n-\t\t\u002F\u002Fadd_action( 'learn-press\u002Fremoved-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );\r\n-\r\n-\t\tadd_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );\r\n-\t\tadd_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );\r\n-\r\n-\t\t\u002F\u002Fadd_filter( 'transition_post_status', array( $this, 'transition_post_status' ), 1000, 3 );\r\n-\t}\r\n-\r\n-\tpublic function __get( $key ) {\r\n-\t\treturn $this->get( $key );\r\n-\t}\r\n-\r\n-\tpublic function __set( $key, $value ) {\r\n-\t\t$this->data[ $key ] = $value;\r\n-\t}\r\n-\r\n-\tpublic function get( $key ) {\r\n-\t\treturn array_key_exists( $key, $this->data ) ? $this->data[ $key ] : false;\r\n-\t}\r\n-\r\n-\tpublic function add( $key, $value, $single = true ) {\r\n-\t\tif ( empty( $this->data[ $key ] ) ) {\r\n-\t\t\t$this->data[ $key ] = array();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $single || ! is_array( $value ) ) {\r\n-\t\t\t$this->data[ $key ][] = $value;\r\n-\t\t} else {\r\n-\t\t\tif ( is_array( $value ) ) {\r\n-\t\t\t\tforeach ( $value as $v ) {\r\n-\t\t\t\t\t$this->add( $key, $v );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->data[ $key ][] = $value;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_array( $value ) ) {\r\n-\t\t\t$this->data[ $key ][] = $value;\r\n-\t\t} else {\r\n-\t\t\tif ( array_search( $value, $this->data[ $key ] ) === false ) {\r\n-\t\t\t\t$this->data[ $key ][] = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function delete( $key ) {\r\n-\t\tif ( array_key_exists( $key, $this->data ) ) {\r\n-\t\t\tunset( $this->data[ $key ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param mixed   $null\r\n-\t * @param WP_Post $post\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function pre_trash_post( $null, $post ) {\r\n-\t\tif ( $this->is_course_item( $post ) ) {\r\n-\t\t\t$curd       = new LP_Course_CURD();\r\n-\t\t\t$course_ids = $curd->get_course_by_item( $post->ID );\r\n-\r\n-\t\t\tif ( $course_ids ) {\r\n-\t\t\t\t$this->add( 'item-courses-' . $post->ID, $course_ids );\r\n-\t\t\t}\r\n-\t\t} elseif ( $this->is_course( $post ) ) {\r\n-\t\t\t$this->add( 'trashed-course', $post->ID );\r\n-\t\t}\r\n-\r\n-\t\treturn $null;\r\n-\t}\r\n-\r\n-\tpublic function trashed_post( $post_id ) {\r\n-\t\tif ( $this->is_course_item( $post_id ) ) {\r\n-\t\t\t$course_ids = $this->get( 'item-courses-' . $post_id );\r\n-\r\n-\t\t\tif ( $course_ids ) {\r\n-\t\t\t\t$curd = new LP_Course_CURD();\r\n-\r\n-\t\t\t\tforeach ( $course_ids as $course_id ) {\r\n-\t\t\t\t\t$curd->remove_item( $post_id, $course_id );\r\n-\t\t\t\t\t\u002F\u002Fdo_action( 'learn-press\u002Fremoved-course-item', $course_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->delete( 'item-courses-' . $post_id );\r\n-\t\t\t}\r\n-\t\t} elseif ( $this->is_course( $post_id ) ) {\r\n-\t\t\tdo_action( 'learn-press\u002Ftrashed-course', $post_id );\r\n-\t\t} elseif ( get_post_type( $post_id ) == LP_QUESTION_CPT ) {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$wpdb->delete( $wpdb->prefix . 'learnpress_quiz_questions', array( 'question_id' => $post_id ), array( '%d' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1 - comment - not use\r\n-\t *\u002F\r\n-\t\u002F*public function transition_post_status( $old, $new, $post ) {\r\n-\t\tif ( $this->is_course( $post ) ) {\r\n-\r\n-\t\t} elseif ( $this->is_course_item( $post ) ) {\r\n-\t\t\t$curd       = new LP_Course_CURD();\r\n-\t\t\t$course_ids = $curd->get_course_by_item( $post->ID );\r\n-\r\n-\t\t\tif ( $course_ids ) {\r\n-\t\t\t\tforeach ( $course_ids as $course_id ) {\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Ftransition-course-item-status', $post->ID, $course_id, $old, $new );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\t\u002F*public function added_item_to_section( $item, $section_id, $course_id ) {\r\n-\t\tdo_action( 'learn-press\u002Fadded-course-item', $item['id'], $course_id );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F*public function removed_item_from_section( $item, $course_id ) {\r\n-\t\tdo_action( 'learn-press\u002Fremoved-course-item', $course_id );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1 comment - not use\r\n-\t *\u002F\r\n-\t\u002F*public function save_post( $post_id ) {\r\n-\t\t$post_type = get_post_type( $post_id );\r\n-\r\n-\t\tif ( LP_COURSE_CPT === $post_type ) {\r\n-\t\t\tdo_action( 'learn-press\u002Fsave-course', $post_id );\r\n-\t\t} elseif ( learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\t\t\t$this->add( 'update-post', $post_id );\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\tpublic function is_course( $post ) {\r\n-\t\tif ( is_numeric( $post ) ) {\r\n-\t\t\t$post_id = absint( $post );\r\n-\t\t} else {\r\n-\t\t\t$post_id = absint( $post->ID );\r\n-\t\t}\r\n-\r\n-\t\treturn LP_COURSE_CPT === get_post_type( $post_id );\r\n-\t}\r\n-\r\n-\tpublic function is_course_item( $post ) {\r\n-\t\tif ( is_numeric( $post ) ) {\r\n-\t\t\t$post_id = absint( $post );\r\n-\t\t} else {\r\n-\t\t\t$post_id = absint( $post->ID );\r\n-\t\t}\r\n-\r\n-\t\t$post_type = get_post_type( $post_id );\r\n-\r\n-\t\treturn learn_press_is_support_course_item_type( $post_type );\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Post_Type_Actions::instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Post_Type_Actions\n+ *\n+ * @since 3.1.0\n+ *\u002F\n+class LP_Post_Type_Actions {\n+\n+\t\u002F**\n+\t * @var LP_Post_Type_Actions\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $data = array();\n+\n+\t\u002F**\n+\t * LP_Post_Type_Actions constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t\u002F\u002Fadd_action( 'save_post', array( $this, 'save_post' ) );\n+\t\t\u002F\u002Fadd_action( 'learn-press\u002Fadded-item-to-section', array( $this, 'added_item_to_section' ), 10, 3 );\n+\t\t\u002F\u002Fadd_action( 'learn-press\u002Fremoved-item-from-section', array( $this, 'removed_item_from_section' ), 10, 2 );\n+\n+\t\tadd_filter( 'pre_trash_post', array( $this, 'pre_trash_post' ), 10, 2 );\n+\t\tadd_filter( 'trashed_post', array( $this, 'trashed_post' ), 1000, 1 );\n+\n+\t\t\u002F\u002Fadd_filter( 'transition_post_status', array( $this, 'transition_post_status' ), 1000, 3 );\n+\t}\n+\n+\tpublic function __get( $key ) {\n+\t\treturn $this->get( $key );\n+\t}\n+\n+\tpublic function __set( $key, $value ) {\n+\t\t$this->data[ $key ] = $value;\n+\t}\n+\n+\tpublic function get( $key ) {\n+\t\treturn array_key_exists( $key, $this->data ) ? $this->data[ $key ] : false;\n+\t}\n+\n+\tpublic function add( $key, $value, $single = true ) {\n+\t\tif ( empty( $this->data[ $key ] ) ) {\n+\t\t\t$this->data[ $key ] = array();\n+\t\t}\n+\n+\t\tif ( ! $single || ! is_array( $value ) ) {\n+\t\t\t$this->data[ $key ][] = $value;\n+\t\t} else {\n+\t\t\tif ( is_array( $value ) ) {\n+\t\t\t\tforeach ( $value as $v ) {\n+\t\t\t\t\t$this->add( $key, $v );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$this->data[ $key ][] = $value;\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( is_array( $value ) ) {\n+\t\t\t$this->data[ $key ][] = $value;\n+\t\t} else {\n+\t\t\tif ( array_search( $value, $this->data[ $key ] ) === false ) {\n+\t\t\t\t$this->data[ $key ][] = $value;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tpublic function delete( $key ) {\n+\t\tif ( array_key_exists( $key, $this->data ) ) {\n+\t\t\tunset( $this->data[ $key ] );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param mixed   $null\n+\t * @param WP_Post $post\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function pre_trash_post( $null, $post ) {\n+\t\tif ( $this->is_course_item( $post ) ) {\n+\t\t\t$curd       = new LP_Course_CURD();\n+\t\t\t$course_ids = $curd->get_course_by_item( $post->ID );\n+\n+\t\t\tif ( $course_ids ) {\n+\t\t\t\t$this->add( 'item-courses-' . $post->ID, $course_ids );\n+\t\t\t}\n+\t\t} elseif ( $this->is_course( $post ) ) {\n+\t\t\t$this->add( 'trashed-course', $post->ID );\n+\t\t}\n+\n+\t\treturn $null;\n+\t}\n+\n+\tpublic function trashed_post( $post_id ) {\n+\t\tif ( $this->is_course_item( $post_id ) ) {\n+\t\t\t$course_ids = $this->get( 'item-courses-' . $post_id );\n+\n+\t\t\tif ( $course_ids ) {\n+\t\t\t\t$curd = new LP_Course_CURD();\n+\n+\t\t\t\tforeach ( $course_ids as $course_id ) {\n+\t\t\t\t\t$curd->remove_item( $post_id, $course_id );\n+\t\t\t\t\t\u002F\u002Fdo_action( 'learn-press\u002Fremoved-course-item', $course_id );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->delete( 'item-courses-' . $post_id );\n+\t\t\t}\n+\t\t} elseif ( $this->is_course( $post_id ) ) {\n+\t\t\tdo_action( 'learn-press\u002Ftrashed-course', $post_id );\n+\t\t} elseif ( get_post_type( $post_id ) == LP_QUESTION_CPT ) {\n+\t\t\tglobal $wpdb;\n+\t\t\t$wpdb->delete( $wpdb->prefix . 'learnpress_quiz_questions', array( 'question_id' => $post_id ), array( '%d' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1 - comment - not use\n+\t *\u002F\n+\t\u002F*public function transition_post_status( $old, $new, $post ) {\n+\t\tif ( $this->is_course( $post ) ) {\n+\n+\t\t} elseif ( $this->is_course_item( $post ) ) {\n+\t\t\t$curd       = new LP_Course_CURD();\n+\t\t\t$course_ids = $curd->get_course_by_item( $post->ID );\n+\n+\t\t\tif ( $course_ids ) {\n+\t\t\t\tforeach ( $course_ids as $course_id ) {\n+\t\t\t\t\tdo_action( 'learn-press\u002Ftransition-course-item-status', $post->ID, $course_id, $old, $new );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}*\u002F\n+\n+\t\u002F*public function added_item_to_section( $item, $section_id, $course_id ) {\n+\t\tdo_action( 'learn-press\u002Fadded-course-item', $item['id'], $course_id );\n+\t}*\u002F\n+\n+\t\u002F*public function removed_item_from_section( $item, $course_id ) {\n+\t\tdo_action( 'learn-press\u002Fremoved-course-item', $course_id );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1 comment - not use\n+\t *\u002F\n+\t\u002F*public function save_post( $post_id ) {\n+\t\t$post_type = get_post_type( $post_id );\n+\n+\t\tif ( LP_COURSE_CPT === $post_type ) {\n+\t\t\tdo_action( 'learn-press\u002Fsave-course', $post_id );\n+\t\t} elseif ( learn_press_is_support_course_item_type( $post_type ) ) {\n+\t\t\t$this->add( 'update-post', $post_id );\n+\t\t}\n+\t}*\u002F\n+\n+\tpublic function is_course( $post ) {\n+\t\tif ( is_numeric( $post ) ) {\n+\t\t\t$post_id = absint( $post );\n+\t\t} else {\n+\t\t\t$post_id = absint( $post->ID );\n+\t\t}\n+\n+\t\treturn LP_COURSE_CPT === get_post_type( $post_id );\n+\t}\n+\n+\tpublic function is_course_item( $post ) {\n+\t\tif ( is_numeric( $post ) ) {\n+\t\t\t$post_id = absint( $post );\n+\t\t} else {\n+\t\t\t$post_id = absint( $post->ID );\n+\t\t}\n+\n+\t\t$post_type = get_post_type( $post_id );\n+\n+\t\treturn learn_press_is_support_course_item_type( $post_type );\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+return LP_Post_Type_Actions::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-reset-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-reset-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-reset-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-reset-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,326 +1,326 @@\n-\u003C?php\r\n-class LP_Reset_Data {\r\n-\tpublic static function init() {\r\n-\t\t$ajax_events = array(\r\n-\t\t\t'search-users',\r\n-\t\t\t'reset-user-courses' => 'ajax_reset_user_courses',\r\n-\t\t\t'reset-user-item'    => 'ajax_reset_user_item',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $ajax_events as $action => $callback ) {\r\n-\t\t\tif ( is_numeric( $action ) ) {\r\n-\t\t\t\t$action = $callback;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$actions = LP_Request::parse_action( $action );\r\n-\t\t\t$method  = $actions['action'];\r\n-\r\n-\t\t\tif ( ! is_callable( $callback ) ) {\r\n-\t\t\t\t$callback = array( __CLASS__, $callback );\r\n-\r\n-\t\t\t\tif ( ! is_callable( $callback ) ) {\r\n-\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\r\n-\t\t\t\t\t$callback = array( __CLASS__, $method );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tLP_Request::register_ajax( \"rs-{$action}\", $callback );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic static function ajax_reset_user_item() {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t}\r\n-\r\n-\t\t$user_id = LP_Request::get_string( 'user_id' );\r\n-\t\t$item_id = LP_Request::get_int( 'item_id' );\r\n-\r\n-\t\tif ( ! is_numeric( $user_id ) ) {\r\n-\t\t\t$user_email = get_user_by( 'email', $user_id );\r\n-\t\t\t$user_login = get_user_by( 'login', $user_id );\r\n-\r\n-\t\t\tif ( $user_email ) {\r\n-\t\t\t\t$user_id = $user_email->ID;\r\n-\t\t\t} elseif ( $user_login ) {\r\n-\t\t\t\t$user_id = $user_login->ID;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT user_item_id\r\n-\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\tWHERE user_id = %d AND item_id = %d\r\n-\t\t\",\r\n-\t\t\t$user_id,\r\n-\t\t\t$item_id\r\n-\t\t);\r\n-\r\n-\t\t$user_item_ids = $wpdb->get_col( $query );\r\n-\t\tif ( $user_item_ids ) {\r\n-\t\t\t$query   = \"\r\n-\t\t\t\tSELECT DISTINCT parent_id AS parent, item_id\r\n-\t\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\t\tWHERE user_item_id IN(\" . join( ',', $user_item_ids ) . ')\r\n-\t\t\t';\r\n-\t\t\t$parents = $wpdb->get_results( $query );\r\n-\r\n-\t\t\t$format = array_fill( 0, sizeof( $user_item_ids ), '%d' );\r\n-\t\t\t$query  = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE\r\n-\t\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\r\n-\t\t\t\tWHERE learnpress_user_item_id IN(\" . join( ',', $format ) . ')\r\n-\t\t\t',\r\n-\t\t\t\t$user_item_ids\r\n-\t\t\t);\r\n-\t\t\t$wpdb->query( $query );\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE\r\n-\t\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\t\tWHERE user_id = %d AND item_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t$user_id,\r\n-\t\t\t\t$item_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->query( $query );\r\n-\r\n-\t\t\tif ( $parents ) {\r\n-\t\t\t\tforeach ( $parents as $parent ) {\r\n-\t\t\t\t\t$retaken_items = learn_press_get_user_item_meta( $parent->parent, '_retaken_items', true );\r\n-\t\t\t\t\tif ( $retaken_items ) {\r\n-\t\t\t\t\t\tif ( ! isset( $retaken_items[ $parent->item_id ] ) ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tunset( $retaken_items[ $parent->item_id ] );\r\n-\t\t\t\t\t\tlearn_press_update_user_item_meta( $parent->parent, '_retaken_items', $retaken_items );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo __( 'Item progress is deleted', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\techo __( 'No data found', 'learnpress' );\r\n-\t\t}\r\n-\t\t\u002F\u002F LP_Debug::rollbackTransaction();\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\tpublic static function search_users() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$s     = LP_Request::get_string( 's' );\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT ID AS id, user_login AS username, user_email AS email, '' AS status\r\n-\t\t\tFROM {$wpdb->users}\r\n-\t\t\tWHERE user_login LIKE %s\r\n-\t\t\t\tOR user_email LIKE %s\r\n-\t\t\",\r\n-\t\t\t'%' . $wpdb->esc_like( $s ) . '%',\r\n-\t\t\t'%' . $wpdb->esc_like( $s ) . '%'\r\n-\t\t);\r\n-\r\n-\t\t$users = array();\r\n-\r\n-\t\t$rows = $wpdb->get_results( $query );\r\n-\t\tif ( $rows ) {\r\n-\t\t\t$user_ids = wp_list_pluck( $rows, 'id' );\r\n-\t\t\t$format   = array_fill( 0, sizeof( $user_ids ), '%d' );\r\n-\t\t\t$args     = $user_ids;\r\n-\t\t\t$args[]   = LP_COURSE_CPT;\r\n-\t\t\t$query    = $wpdb->prepare( \"SELECT user_id, item_id FROM {$wpdb->learnpress_user_items} WHERE user_id IN(\" . join( ',', $format ) . ') AND item_type = %s', $args );\r\n-\r\n-\t\t\t$items = $wpdb->get_results( $query );\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\t$uids = wp_list_pluck( $items, 'user_id' );\r\n-\t\t\t\tfor ( $n = sizeof( $rows ), $i = $n - 1; $i >= 0; $i -- ) {\r\n-\r\n-\t\t\t\t\tif ( ! in_array( $rows[ $i ]->id, $uids ) ) {\r\n-\t\t\t\t\t\tunset( $rows[ $i ] );\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( empty( $rows[ $i ]->courses ) ) {\r\n-\t\t\t\t\t\t$rows[ $i ]->courses = array();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\t\tif ( $item->user_id == $rows[ $i ]->id ) {\r\n-\t\t\t\t\t\t\t$rows[ $i ]->courses[ $item->item_id ] = array(\r\n-\t\t\t\t\t\t\t\t'url'   => get_the_permalink( $item->item_id ),\r\n-\t\t\t\t\t\t\t\t'id'    => $item->item_id,\r\n-\t\t\t\t\t\t\t\t'title' => get_the_title( $item->item_id ),\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$rows = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $rows ) {\r\n-\t\t\t\tforeach ( $rows as $k => $row ) {\r\n-\t\t\t\t\t$users[] = $row;\r\n-\t\t\t\t\tif ( sizeof( $users ) > 100 ) {\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_send_json( $users );\r\n-\t}\r\n-\r\n-\tpublic static function ajax_reset_user_courses() {\r\n-\t\t$user_id      = LP_Request::get_int( 'user_id' );\r\n-\t\t$course_id    = LP_Request::get_int( 'course_id' );\r\n-\t\t$object_reset = LP_Request::get_string( 'object_reset' );\r\n-\t\t$user         = learn_press_get_user( $user_id );\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$nonce = LP_Request::get_param( 'nonce' );\r\n-\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\tdie( 'Nonce is invalid!' );\r\n-\t\t}\r\n-\r\n-\t\tif ( $course_id && $object_reset == 'single' ) {\r\n-\t\t\t$user_course_data = $user->get_course_data( $course_id );\r\n-\t\t\tif ( ! $user_course_data ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set status, start_time, end_time of course to enrol.\r\n-\t\t\t$user_course_data->set_status( LP_COURSE_ENROLLED )\r\n-\t\t\t\t->set_start_time( time() )\r\n-\t\t\t\t->set_end_time()\r\n-\t\t\t\t->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )\r\n-\t\t\t\t->update();\r\n-\t\t\t\u002F\u002F Remove items' course user learned.\r\n-\t\t\t$filter_remove            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_remove->parent_id = $user_course_data->get_user_item_id();\r\n-\t\t\t$filter_remove->user_id   = $user_course_data->get_user_id();\r\n-\t\t\t$filter_remove->limit     = - 1;\r\n-\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\r\n-\t\t}\r\n-\t\tif ( $object_reset == 'all' && $user_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$query         = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT item_id\r\n-\t\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\t\tWHERE user_id = %d AND item_type='lp_course'\r\n-\t\t\t\t\",\r\n-\t\t\t\t$user_id\r\n-\t\t\t);\r\n-\t\t\t$user_item_ids = $wpdb->get_col( $query );\r\n-\t\t\tif ( $user_item_ids ) {\r\n-\t\t\t\tforeach ( $user_item_ids as $user_item_id ) {\r\n-\t\t\t\t\t$course_id        = $user_item_id;\r\n-\t\t\t\t\t$user_course_data = $user->get_course_data( $course_id );\r\n-\t\t\t\t\tif ( ! $user_course_data ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Set status, start_time, end_time of course to enrolled.\r\n-\t\t\t\t\t$user_course_data->set_status( LP_COURSE_ENROLLED )\r\n-\t\t\t\t\t\t->set_start_time( time() )\r\n-\t\t\t\t\t\t->set_end_time()\r\n-\t\t\t\t\t\t->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )\r\n-\t\t\t\t\t\t->update();\r\n-\t\t\t\t\t\u002F\u002F Remove items' course user learned.\r\n-\t\t\t\t\t$filter_remove            = new LP_User_Items_Filter();\r\n-\t\t\t\t\t$filter_remove->parent_id = $user_course_data->get_user_item_id();\r\n-\t\t\t\t\t$filter_remove->user_id   = $user_course_data->get_user_id();\r\n-\t\t\t\t\t$filter_remove->limit     = - 1;\r\n-\t\t\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\tpublic static function get_user_item_courses( $course_id, $user_id = 0 ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$where = '';\r\n-\t\tif ( $user_id ) {\r\n-\t\t\t$where = $wpdb->prepare( 'AND user_id = %d', $user_id );\r\n-\t\t}\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\tWHERE item_type = %s\r\n-\t\t\tAND item_id = %d\r\n-\t\t\t$where\r\n-\t\t\",\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\techo \"$query\\n\";\r\n-\r\n-\t\treturn $wpdb->get_results( $query );\r\n-\t}\r\n-\r\n-\tpublic static function delete_user_items_by_id( $ids ) {\r\n-\t\tsettype( $ids, 'array' );\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t\u002F\u002F Delete meta\r\n-\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\t\t$query  = $wpdb->prepare( \"DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id IN(\" . join( ',', $format ) . ')', $ids );\r\n-\t\t$wpdb->query( $query );\r\n-\t\techo \"$query\\n\";\r\n-\r\n-\t\t\u002F\u002F Delete items\r\n-\t\t$query = $wpdb->prepare( \"DELETE FROM {$wpdb->learnpress_user_items} WHERE user_item_id IN(\" . join( ',', $format ) . ')', $ids );\r\n-\t\t$wpdb->query( $query );\r\n-\r\n-\t\techo \"$query\\n\";\r\n-\r\n-\t}\r\n-\r\n-\tpublic static function get_user_items_by_parent( $parent_id ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\tWHERE parent_id = %d\r\n-\t\t\",\r\n-\t\t\t$parent_id\r\n-\t\t);\r\n-\r\n-\t\techo \"$query\\n\";\r\n-\r\n-\t\treturn $wpdb->get_results( $query );\r\n-\t}\r\n-}\r\n-LP_Reset_Data::init();\r\n+\u003C?php\n+class LP_Reset_Data {\n+\tpublic static function init() {\n+\t\t$ajax_events = array(\n+\t\t\t'search-users',\n+\t\t\t'reset-user-courses' => 'ajax_reset_user_courses',\n+\t\t\t'reset-user-item'    => 'ajax_reset_user_item',\n+\t\t);\n+\n+\t\tforeach ( $ajax_events as $action => $callback ) {\n+\t\t\tif ( is_numeric( $action ) ) {\n+\t\t\t\t$action = $callback;\n+\t\t\t}\n+\n+\t\t\t$actions = LP_Request::parse_action( $action );\n+\t\t\t$method  = $actions['action'];\n+\n+\t\t\tif ( ! is_callable( $callback ) ) {\n+\t\t\t\t$callback = array( __CLASS__, $callback );\n+\n+\t\t\t\tif ( ! is_callable( $callback ) ) {\n+\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\n+\t\t\t\t\t$callback = array( __CLASS__, $method );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tLP_Request::register_ajax( \"rs-{$action}\", $callback );\n+\t\t}\n+\t}\n+\n+\tpublic static function ajax_reset_user_item() {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\tdie( 'Nonce is invalid!' );\n+\t\t}\n+\n+\t\t$user_id = LP_Request::get_string( 'user_id' );\n+\t\t$item_id = LP_Request::get_int( 'item_id' );\n+\n+\t\tif ( ! is_numeric( $user_id ) ) {\n+\t\t\t$user_email = get_user_by( 'email', $user_id );\n+\t\t\t$user_login = get_user_by( 'login', $user_id );\n+\n+\t\t\tif ( $user_email ) {\n+\t\t\t\t$user_id = $user_email->ID;\n+\t\t\t} elseif ( $user_login ) {\n+\t\t\t\t$user_id = $user_login->ID;\n+\t\t\t}\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT user_item_id\n+\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\tWHERE user_id = %d AND item_id = %d\n+\t\t\",\n+\t\t\t$user_id,\n+\t\t\t$item_id\n+\t\t);\n+\n+\t\t$user_item_ids = $wpdb->get_col( $query );\n+\t\tif ( $user_item_ids ) {\n+\t\t\t$query   = \"\n+\t\t\t\tSELECT DISTINCT parent_id AS parent, item_id\n+\t\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\t\tWHERE user_item_id IN(\" . join( ',', $user_item_ids ) . ')\n+\t\t\t';\n+\t\t\t$parents = $wpdb->get_results( $query );\n+\n+\t\t\t$format = array_fill( 0, sizeof( $user_item_ids ), '%d' );\n+\t\t\t$query  = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tDELETE\n+\t\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\n+\t\t\t\tWHERE learnpress_user_item_id IN(\" . join( ',', $format ) . ')\n+\t\t\t',\n+\t\t\t\t$user_item_ids\n+\t\t\t);\n+\t\t\t$wpdb->query( $query );\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tDELETE\n+\t\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\t\tWHERE user_id = %d AND item_id = %d\n+\t\t\t\",\n+\t\t\t\t$user_id,\n+\t\t\t\t$item_id\n+\t\t\t);\n+\n+\t\t\t$wpdb->query( $query );\n+\n+\t\t\tif ( $parents ) {\n+\t\t\t\tforeach ( $parents as $parent ) {\n+\t\t\t\t\t$retaken_items = learn_press_get_user_item_meta( $parent->parent, '_retaken_items', true );\n+\t\t\t\t\tif ( $retaken_items ) {\n+\t\t\t\t\t\tif ( ! isset( $retaken_items[ $parent->item_id ] ) ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tunset( $retaken_items[ $parent->item_id ] );\n+\t\t\t\t\t\tlearn_press_update_user_item_meta( $parent->parent, '_retaken_items', $retaken_items );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo __( 'Item progress is deleted', 'learnpress' );\n+\t\t} else {\n+\t\t\techo __( 'No data found', 'learnpress' );\n+\t\t}\n+\t\t\u002F\u002F LP_Debug::rollbackTransaction();\n+\t\tdie();\n+\t}\n+\n+\tpublic static function search_users() {\n+\t\tglobal $wpdb;\n+\n+\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\tdie( 'Nonce is invalid!' );\n+\t\t}\n+\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$s     = LP_Request::get_string( 's' );\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT ID AS id, user_login AS username, user_email AS email, '' AS status\n+\t\t\tFROM {$wpdb->users}\n+\t\t\tWHERE user_login LIKE %s\n+\t\t\t\tOR user_email LIKE %s\n+\t\t\",\n+\t\t\t'%' . $wpdb->esc_like( $s ) . '%',\n+\t\t\t'%' . $wpdb->esc_like( $s ) . '%'\n+\t\t);\n+\n+\t\t$users = array();\n+\n+\t\t$rows = $wpdb->get_results( $query );\n+\t\tif ( $rows ) {\n+\t\t\t$user_ids = wp_list_pluck( $rows, 'id' );\n+\t\t\t$format   = array_fill( 0, sizeof( $user_ids ), '%d' );\n+\t\t\t$args     = $user_ids;\n+\t\t\t$args[]   = LP_COURSE_CPT;\n+\t\t\t$query    = $wpdb->prepare( \"SELECT user_id, item_id FROM {$wpdb->learnpress_user_items} WHERE user_id IN(\" . join( ',', $format ) . ') AND item_type = %s', $args );\n+\n+\t\t\t$items = $wpdb->get_results( $query );\n+\t\t\tif ( $items ) {\n+\t\t\t\t$uids = wp_list_pluck( $items, 'user_id' );\n+\t\t\t\tfor ( $n = sizeof( $rows ), $i = $n - 1; $i >= 0; $i -- ) {\n+\n+\t\t\t\t\tif ( ! in_array( $rows[ $i ]->id, $uids ) ) {\n+\t\t\t\t\t\tunset( $rows[ $i ] );\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( empty( $rows[ $i ]->courses ) ) {\n+\t\t\t\t\t\t$rows[ $i ]->courses = array();\n+\t\t\t\t\t}\n+\t\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\t\tif ( $item->user_id == $rows[ $i ]->id ) {\n+\t\t\t\t\t\t\t$rows[ $i ]->courses[ $item->item_id ] = array(\n+\t\t\t\t\t\t\t\t'url'   => get_the_permalink( $item->item_id ),\n+\t\t\t\t\t\t\t\t'id'    => $item->item_id,\n+\t\t\t\t\t\t\t\t'title' => get_the_title( $item->item_id ),\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$rows = array();\n+\t\t\t}\n+\n+\t\t\tif ( $rows ) {\n+\t\t\t\tforeach ( $rows as $k => $row ) {\n+\t\t\t\t\t$users[] = $row;\n+\t\t\t\t\tif ( sizeof( $users ) > 100 ) {\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tlearn_press_send_json( $users );\n+\t}\n+\n+\tpublic static function ajax_reset_user_courses() {\n+\t\t$user_id      = LP_Request::get_int( 'user_id' );\n+\t\t$course_id    = LP_Request::get_int( 'course_id' );\n+\t\t$object_reset = LP_Request::get_string( 'object_reset' );\n+\t\t$user         = learn_press_get_user( $user_id );\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$nonce = LP_Request::get_param( 'nonce' );\n+\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\tdie( 'Nonce is invalid!' );\n+\t\t}\n+\n+\t\tif ( $course_id && $object_reset == 'single' ) {\n+\t\t\t$user_course_data = $user->get_course_data( $course_id );\n+\t\t\tif ( ! $user_course_data ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set status, start_time, end_time of course to enrol.\n+\t\t\t$user_course_data->set_status( LP_COURSE_ENROLLED )\n+\t\t\t\t->set_start_time( time() )\n+\t\t\t\t->set_end_time()\n+\t\t\t\t->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )\n+\t\t\t\t->update();\n+\t\t\t\u002F\u002F Remove items' course user learned.\n+\t\t\t$filter_remove            = new LP_User_Items_Filter();\n+\t\t\t$filter_remove->parent_id = $user_course_data->get_user_item_id();\n+\t\t\t$filter_remove->user_id   = $user_course_data->get_user_id();\n+\t\t\t$filter_remove->limit     = - 1;\n+\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\n+\t\t}\n+\t\tif ( $object_reset == 'all' && $user_id ) {\n+\t\t\tglobal $wpdb;\n+\t\t\t$query         = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT item_id\n+\t\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\t\tWHERE user_id = %d AND item_type='lp_course'\n+\t\t\t\t\",\n+\t\t\t\t$user_id\n+\t\t\t);\n+\t\t\t$user_item_ids = $wpdb->get_col( $query );\n+\t\t\tif ( $user_item_ids ) {\n+\t\t\t\tforeach ( $user_item_ids as $user_item_id ) {\n+\t\t\t\t\t$course_id        = $user_item_id;\n+\t\t\t\t\t$user_course_data = $user->get_course_data( $course_id );\n+\t\t\t\t\tif ( ! $user_course_data ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Set status, start_time, end_time of course to enrolled.\n+\t\t\t\t\t$user_course_data->set_status( LP_COURSE_ENROLLED )\n+\t\t\t\t\t\t->set_start_time( time() )\n+\t\t\t\t\t\t->set_end_time()\n+\t\t\t\t\t\t->set_graduation( LP_COURSE_GRADUATION_IN_PROGRESS )\n+\t\t\t\t\t\t->update();\n+\t\t\t\t\t\u002F\u002F Remove items' course user learned.\n+\t\t\t\t\t$filter_remove            = new LP_User_Items_Filter();\n+\t\t\t\t\t$filter_remove->parent_id = $user_course_data->get_user_item_id();\n+\t\t\t\t\t$filter_remove->user_id   = $user_course_data->get_user_id();\n+\t\t\t\t\t$filter_remove->limit     = - 1;\n+\t\t\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tdie();\n+\t}\n+\n+\tpublic static function get_user_item_courses( $course_id, $user_id = 0 ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$where = '';\n+\t\tif ( $user_id ) {\n+\t\t\t$where = $wpdb->prepare( 'AND user_id = %d', $user_id );\n+\t\t}\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\tWHERE item_type = %s\n+\t\t\tAND item_id = %d\n+\t\t\t$where\n+\t\t\",\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\techo \"$query\\n\";\n+\n+\t\treturn $wpdb->get_results( $query );\n+\t}\n+\n+\tpublic static function delete_user_items_by_id( $ids ) {\n+\t\tsettype( $ids, 'array' );\n+\n+\t\tglobal $wpdb;\n+\n+\t\t\u002F\u002F Delete meta\n+\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\t\t$query  = $wpdb->prepare( \"DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id IN(\" . join( ',', $format ) . ')', $ids );\n+\t\t$wpdb->query( $query );\n+\t\techo \"$query\\n\";\n+\n+\t\t\u002F\u002F Delete items\n+\t\t$query = $wpdb->prepare( \"DELETE FROM {$wpdb->learnpress_user_items} WHERE user_item_id IN(\" . join( ',', $format ) . ')', $ids );\n+\t\t$wpdb->query( $query );\n+\n+\t\techo \"$query\\n\";\n+\n+\t}\n+\n+\tpublic static function get_user_items_by_parent( $parent_id ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\tWHERE parent_id = %d\n+\t\t\",\n+\t\t\t$parent_id\n+\t\t);\n+\n+\t\techo \"$query\\n\";\n+\n+\t\treturn $wpdb->get_results( $query );\n+\t}\n+}\n+LP_Reset_Data::init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-setup-wizard.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-setup-wizard.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-setup-wizard.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-setup-wizard.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,433 +1,437 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Setup_Wizard\r\n- *\r\n- * Class helper for displaying the Setup Wizard page.\r\n- *\r\n- * @since   3.0.0\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- *\u002F\r\n-class LP_Setup_Wizard {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_base_url = 'index.php?page=lp-setup';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Setup_Wizard constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'admin_menu', array( $this, 'admin_menu' ) );\r\n-\t\tadd_action( 'admin_init', array( $this, 'setup_wizard' ) );\r\n-\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );\r\n-\r\n-\t\t$actions = array(\r\n-\t\t\t'setup-create-pages' => 'create_pages',\r\n-\t\t\t'get-price-format'   => 'get_price_format',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $actions as $action => $callback ) {\r\n-\t\t\tLP_Request::register_ajax( $action, array( $this, $callback ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create static pages action\r\n-\t *\u002F\r\n-\tpublic function create_pages() {\r\n-\t\tif ( ! wp_verify_nonce( LP_Request::get_string( '_wpnonce', 'setup-create-pages' ) ) ) {\r\n-\t\t\tdie();\r\n-\t\t}\r\n-\r\n-\t\t$settings = LP_Request::get( 'settings' );\r\n-\t\tforeach ( $settings['pages'] as $page => $page_id ) {\r\n-\t\t\tif ( empty( $page_id ) ) {\r\n-\t\t\t\t$_REQUEST['settings']['pages'][ $page ] = $this->create_page( $page );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tLP_Request::$ajax_shutdown = false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sample format price\r\n-\t *\u002F\r\n-\tpublic static function get_price_format() {\r\n-\t\tself::instance()->save();\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create page by type.\r\n-\t *\r\n-\t * @param string $page\r\n-\t *\r\n-\t * @return int|WP_Error\r\n-\t *\u002F\r\n-\tpublic function create_page( $page ) {\r\n-\t\t$page_titles = array(\r\n-\t\t\t'courses_page_id'           => _x( 'LP Courses', 'static-page', 'learnpress' ),\r\n-\t\t\t'profile_page_id'           => _x( 'LP Profile', 'static-page', 'learnpress' ),\r\n-\t\t\t'checkout_page_id'          => _x( 'LP Checkout', 'static-page', 'learnpress' ),\r\n-\t\t\t'become_a_teacher_page_id'  => _x( 'LP Become a Teacher', 'static-page', 'learnpress' ),\r\n-\t\t\t'term_conditions_page_id'   => _x( 'LP Terms and Conditions', 'static-page', 'learnpress' ),\r\n-\t\t\t'instructors_page_id'       => _x( 'Instructors', 'static-page', 'learnpress' ),\r\n-\t\t\t'single_instructor_page_id' => _x( 'Instructor', 'static-page', 'learnpress' ),\r\n-\t\t);\r\n-\r\n-\t\tif ( $page === 'profile_page_id' ) {\r\n-\t\t\t$page_content = '\u003C!-- wp:shortcode -->[learn_press_profile]\u003C!-- \u002Fwp:shortcode -->';\r\n-\t\t} else {\r\n-\t\t\t$page_content = '';\r\n-\t\t}\r\n-\r\n-\t\treturn wp_insert_post(\r\n-\t\t\tarray(\r\n-\t\t\t\t'post_title'   => $page_titles[ $page ] ?? $page,\r\n-\t\t\t\t'post_status'  => 'publish',\r\n-\t\t\t\t'post_type'    => 'page',\r\n-\t\t\t\t'post_content' => $page_content,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add an empty menu item for validating page.\r\n-\t *\u002F\r\n-\tpublic function admin_menu() {\r\n-\t\tif ( 'lp-setup' !== LP_Request::get_string( 'page' ) || ! current_user_can( 'install_plugins' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tadd_dashboard_page( '', '', 'manage_options', 'lp-setup', '' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display setup page a ignore anything else in the rest\r\n-\t *\u002F\r\n-\tpublic function setup_wizard() {\r\n-\t\tif ( 'lp-setup' !== LP_Request::get_string( 'page' ) || ! current_user_can( 'install_plugins' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'finish' === LP_Request::get_string( 'step' ) ) {\r\n-\t\t\tupdate_option( 'learn_press_setup_wizard_completed', 'yes' );\r\n-\t\t}\r\n-\r\n-\t\t$this->save();\r\n-\r\n-\t\t\u002F\u002F Refresh new changes\r\n-\t\t\u002F\u002F LP_Settings::instance()->refresh();\r\n-\r\n-\t\t$assets = LP_Admin_Assets::instance();\r\n-\r\n-\t\t\u002F\u002F tungnx: fix error with Woocommerce\r\n-\t\tremove_action( 'admin_enqueue_scripts', array( 'Automattic\\WooCommerce\\Admin\\Loader', 'register_scripts' ) );\r\n-\t\tremove_action( 'admin_enqueue_scripts', array( 'Automattic\\WooCommerce\\Admin\\Loader', 'load_scripts' ), 15 );\r\n-\t\tremove_action( 'admin_enqueue_scripts', array(\r\n-\t\t\t'Automattic\\WooCommerce\\Admin\\Features\\Features',\r\n-\t\t\t'load_scripts'\r\n-\t\t), 15 );\r\n-\t\t\u002F\u002F End fix\r\n-\t\t\u002F\u002F @do_action( 'admin_enqueue_scripts' );\r\n-\r\n-\t\twp_enqueue_style( 'buttons' );\r\n-\t\twp_enqueue_style( 'common' );\r\n-\t\twp_enqueue_style( 'forms' );\r\n-\t\twp_enqueue_style( 'themes' );\r\n-\t\twp_enqueue_style( 'dashboard' );\r\n-\t\twp_enqueue_style( 'widgets' );\r\n-\t\twp_enqueue_style( 'lp-admin', $assets->url( 'css\u002Fadmin\u002Fadmin.css' ) );\r\n-\t\twp_enqueue_style( 'lp-setup', $assets->url( 'css\u002Fadmin\u002Fsetup.css' ) );\r\n-\t\twp_enqueue_style( 'lp-select2', $assets->url( 'src\u002Fcss\u002Fvendor\u002Fselect2.min.css' ) );\r\n-\t\twp_enqueue_style( 'lp-tom-select', $assets->url( 'src\u002Fcss\u002Fvendor\u002Ftom-select.min.css' ) );\r\n-\r\n-\t\twp_enqueue_script( 'lp-select2', $assets->url( 'src\u002Fjs\u002Fvendor\u002Fselect2.full.min.js' ) );\r\n-\t\twp_enqueue_script( 'lp-utils', $assets->url( 'js\u002Fdist\u002Futils.js' ) );\r\n-\t\twp_enqueue_script( 'lp-admin', $assets->url( 'js\u002Fdist\u002Fadmin\u002Fadmin.js' ), uniqid(), true );\r\n-\t\twp_enqueue_script( 'drop-down-page', $assets->url( 'src\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js' ), uniqid(), true );\r\n-\t\twp_register_script(\r\n-\t\t\t'lp-setup',\r\n-\t\t\t$assets->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js' ),\r\n-\t\t\tarray( 'jquery', 'lp-admin' ),\r\n-\t\t\tuniqid(),\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\t\twp_localize_script( 'lp-setup', 'lpGlobalSettings', learn_press_global_script_params() );\r\n-\t\t$lp_admin_assets = LP_Admin_Assets::instance();\r\n-\t\twp_localize_script( 'lp-setup', 'lpDataAdmin', $lp_admin_assets->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\r\n-\t\twp_localize_script( 'lp-setup', 'lpData', $lp_admin_assets->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\r\n-\t\twp_enqueue_script( 'lp-setup' );\r\n-\t\tlearn_press_admin_view( 'setup\u002Fheader' );\r\n-\t\tlearn_press_admin_view( 'setup\u002Fcontent', array( 'steps' => $this->get_steps() ) );\r\n-\t\tlearn_press_admin_view( 'setup\u002Ffooter' );\r\n-\r\n-\t\tdie();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @TODO tungnx - need review\r\n-\t *\u002F\r\n-\tpublic function save() {\r\n-\t\t$step = LP_Request::get_string( 'lp-setup-step' );\r\n-\r\n-\t\tif ( ! wp_verify_nonce( LP_Request::get_string( 'lp-setup-nonce' ), 'lp-setup-step-' . $step ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$postdata = LP_Request::get_param( 'settings' );\r\n-\t\t$steps    = array( 'payment', 'pages', 'currency', 'emails' );\r\n-\r\n-\t\tif ( ( 'yes' !== LP_Request::get_param( 'skip' ) ) && in_array( $step, $steps ) ) {\r\n-\t\t\tif ( array_key_exists( 'paypal', $postdata ) ) {\r\n-\t\t\t\tupdate_option( 'learn_press_paypal', $postdata['paypal'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( array_key_exists( 'currency', $postdata ) ) {\r\n-\t\t\t\tforeach ( $postdata['currency'] as $k => $v ) {\r\n-\t\t\t\t\tupdate_option( 'learn_press_' . $k, $v );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( array_key_exists( 'pages', $postdata ) ) {\r\n-\t\t\t\tforeach ( $postdata['pages'] as $k => $v ) {\r\n-\t\t\t\t\tupdate_option( 'learn_press_' . $k, $v );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( array_key_exists( 'emails', $postdata ) ) {\r\n-\t\t\t\tif ( ! empty( $postdata['emails']['enable'] ) && ( $postdata['emails']['enable'] === 'yes' ) ) {\r\n-\t\t\t\t\t$emails = LP_Emails::instance()->emails;\r\n-\r\n-\t\t\t\t\tif ( $emails ) {\r\n-\t\t\t\t\t\tforeach ( $emails as $email ) {\r\n-\t\t\t\t\t\t\t$response[ $email->id ] = $email->enable( true );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t\t$lp_settings_cache->clean_lp_settings();\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fsetup-wizard\u002Fupdate-settings', $postdata, $step );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return array of all steps are available when running setup wizard.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_steps() {\r\n-\t\tstatic $steps;\r\n-\t\tif ( is_null( $steps ) ) {\r\n-\t\t\t$steps = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsetup-wizard\u002Fsteps',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'welcome' => array(\r\n-\t\t\t\t\t\t'title'       => __( 'Welcome', 'learnpress' ),\r\n-\t\t\t\t\t\t'callback'    => array( $this, 'step_welcome' ),\r\n-\t\t\t\t\t\t'next_button' => __( 'Run Setup Wizard', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'pages'   => array(\r\n-\t\t\t\t\t\t'title'    => __( 'Pages', 'learnpress' ),\r\n-\t\t\t\t\t\t'callback' => array( $this, 'step_pages' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t\u002F\u002F 'currency' => array(\r\n-\t\t\t\t\t\u002F\u002F 'title'            => __( 'Currency', 'learnpress' ),\r\n-\t\t\t\t\t\u002F\u002F 'callback'         => array( $this, 'step_currency' ),\r\n-\t\t\t\t\t\u002F\u002F 'back_button'      => false,\r\n-\t\t\t\t\t\u002F\u002F 'skip_prev_button' => false\r\n-\t\t\t\t\t\u002F\u002F ),\r\n-\t\t\t\t\t'payment' => array(\r\n-\t\t\t\t\t\t'title'    => __( 'Payment', 'learnpress' ),\r\n-\t\t\t\t\t\t'callback' => array( $this, 'step_payment' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t\u002F\u002F 'emails'   => array(\r\n-\t\t\t\t\t\u002F\u002F 'title'    => __( 'Emails', 'learnpress' ),\r\n-\t\t\t\t\t\u002F\u002F 'callback' => array( $this, 'step_emails' )\r\n-\t\t\t\t\t\u002F\u002F ),\r\n-\t\t\t\t\t'finish'  => array(\r\n-\t\t\t\t\t\t'title'    => __( 'Finish', 'learnpress' ),\r\n-\t\t\t\t\t\t'callback' => array( $this, 'step_finish' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $steps;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all keys of available steps.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_step_keys() {\r\n-\t\treturn array_keys( $this->get_steps() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get key of current step.\r\n-\t *\r\n-\t * @param bool $key\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t *\u002F\r\n-\tpublic function get_current_step( $key = true ) {\r\n-\t\t$current = LP_Request::get_string( 'step' );\r\n-\t\t$steps   = $this->get_steps();\r\n-\r\n-\t\tif ( empty( $steps[ $current ] ) ) {\r\n-\t\t\t$key_steps = array_keys( $steps );\r\n-\t\t\t$current   = reset( $key_steps );\r\n-\t\t}\r\n-\r\n-\t\t$step = $steps[ $current ];\r\n-\t\tif ( empty( $step['slug'] ) ) {\r\n-\t\t\t$step['slug'] = $current;\r\n-\t\t}\r\n-\r\n-\t\treturn $key ? $current : $step;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if the first step is viewing.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_first_step() {\r\n-\t\t$steps = $this->get_step_keys();\r\n-\r\n-\t\treturn array_search( $this->get_current_step(), $steps ) === 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if the last steo is viewing.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_last_step() {\r\n-\t\t$steps = $this->get_step_keys();\r\n-\r\n-\t\treturn array_search( $this->get_current_step(), $steps ) === sizeof( $steps ) - 1;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get url of next step.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_next_url() {\r\n-\t\t$current = $this->get_current_step();\r\n-\t\t$steps   = $this->get_step_keys();\r\n-\t\t$at      = array_search( $current, $steps );\r\n-\t\tif ( $at \u003C sizeof( $steps ) - 1 ) {\r\n-\t\t\t$at ++;\r\n-\t\t}\r\n-\r\n-\t\treturn esc_url_raw( add_query_arg( 'step', $steps[ $at ], admin_url( $this->_base_url ) ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get url of prev step.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_prev_url() {\r\n-\t\t$current = $this->get_current_step();\r\n-\t\t$steps   = $this->get_step_keys();\r\n-\t\t$at      = array_search( $current, $steps );\r\n-\t\tif ( $at > 0 ) {\r\n-\t\t\t$at --;\r\n-\t\t}\r\n-\r\n-\t\treturn esc_url_raw( add_query_arg( 'step', $steps[ $at ], admin_url( $this->_base_url ) ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get position number of a step.\r\n-\t *\r\n-\t * @param string $step - Optional.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_step_position( $step = '' ) {\r\n-\t\tif ( ! $step ) {\r\n-\t\t\t$step = $this->get_current_step();\r\n-\t\t}\r\n-\r\n-\t\t$steps = $this->get_step_keys();\r\n-\r\n-\t\treturn array_search( $step, $steps );\r\n-\t}\r\n-\r\n-\tpublic function get_payments() {\r\n-\t\treturn array(\r\n-\t\t\t'paypal' => array(\r\n-\t\t\t\t'name'     => __( 'PayPal', 'learnpress' ),\r\n-\t\t\t\t'icon'     => LearnPress::instance()->plugin_url( 'assets\u002Fimages\u002Fpaypal-logo-preview.png' ),\r\n-\t\t\t\t'callback' => array( $this, 'setup_paypal' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function setup_paypal() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsetup-paypal' );\r\n-\t}\r\n-\r\n-\tpublic function setup_stripe() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsetup-stripe' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Welcome step content.\r\n-\t *\u002F\r\n-\tpublic function step_welcome() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fwelcome' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Currency step content.\r\n-\t *\u002F\r\n-\tpublic function step_currency() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fcurrency' );\r\n-\t}\r\n-\r\n-\tpublic function step_pages() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fpages' );\r\n-\t}\r\n-\r\n-\tpublic function step_payment() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fpayment' );\r\n-\t}\r\n-\r\n-\tpublic function step_emails() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Femails' );\r\n-\t}\r\n-\r\n-\tpublic function step_finish() {\r\n-\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Ffinish' );\r\n-\t}\r\n-\r\n-\tpublic function scripts() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get singleton instance\r\n-\t *\r\n-\t * @return bool|LP_Setup_Wizard\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Setup_Wizard::instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Setup_Wizard\n+ *\n+ * Class helper for displaying the Setup Wizard page.\n+ *\n+ * @since   3.0.0\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ *\u002F\n+class LP_Setup_Wizard {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_base_url = 'index.php?page=lp-setup';\n+\n+\t\u002F**\n+\t * LP_Setup_Wizard constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\tadd_action( 'admin_menu', array( $this, 'admin_menu' ) );\n+\t\tadd_action( 'admin_init', array( $this, 'setup_wizard' ) );\n+\t\tadd_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );\n+\n+\t\t$actions = array(\n+\t\t\t'setup-create-pages' => 'create_pages',\n+\t\t\t'get-price-format'   => 'get_price_format',\n+\t\t);\n+\n+\t\tforeach ( $actions as $action => $callback ) {\n+\t\t\tLP_Request::register_ajax( $action, array( $this, $callback ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Create static pages action\n+\t *\u002F\n+\tpublic function create_pages() {\n+\t\tif ( ! wp_verify_nonce( LP_Request::get_string( '_wpnonce', 'setup-create-pages' ) ) ) {\n+\t\t\tdie();\n+\t\t}\n+\n+\t\t$settings = LP_Request::get( 'settings' );\n+\t\tforeach ( $settings['pages'] as $page => $page_id ) {\n+\t\t\tif ( empty( $page_id ) ) {\n+\t\t\t\t$_REQUEST['settings']['pages'][ $page ] = $this->create_page( $page );\n+\t\t\t}\n+\t\t}\n+\n+\t\tLP_Request::$ajax_shutdown = false;\n+\t}\n+\n+\t\u002F**\n+\t * Get sample format price\n+\t *\u002F\n+\tpublic static function get_price_format() {\n+\t\tself::instance()->save();\n+\t\tdie();\n+\t}\n+\n+\t\u002F**\n+\t * Create page by type.\n+\t *\n+\t * @param string $page\n+\t *\n+\t * @return int|WP_Error\n+\t *\u002F\n+\tpublic function create_page( $page ) {\n+\t\t$page_titles = array(\n+\t\t\t'courses_page_id'           => _x( 'LP Courses', 'static-page', 'learnpress' ),\n+\t\t\t'profile_page_id'           => _x( 'LP Profile', 'static-page', 'learnpress' ),\n+\t\t\t'checkout_page_id'          => _x( 'LP Checkout', 'static-page', 'learnpress' ),\n+\t\t\t'become_a_teacher_page_id'  => _x( 'LP Become a Teacher', 'static-page', 'learnpress' ),\n+\t\t\t'term_conditions_page_id'   => _x( 'LP Terms and Conditions', 'static-page', 'learnpress' ),\n+\t\t\t'instructors_page_id'       => _x( 'Instructors', 'static-page', 'learnpress' ),\n+\t\t\t'single_instructor_page_id' => _x( 'Instructor', 'static-page', 'learnpress' ),\n+\t\t);\n+\n+\t\tif ( $page === 'profile_page_id' ) {\n+\t\t\t$page_content = '\u003C!-- wp:shortcode -->[learn_press_profile]\u003C!-- \u002Fwp:shortcode -->';\n+\t\t} else {\n+\t\t\t$page_content = '';\n+\t\t}\n+\n+\t\treturn wp_insert_post(\n+\t\t\tarray(\n+\t\t\t\t'post_title'   => $page_titles[ $page ] ?? $page,\n+\t\t\t\t'post_status'  => 'publish',\n+\t\t\t\t'post_type'    => 'page',\n+\t\t\t\t'post_content' => $page_content,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Add an empty menu item for validating page.\n+\t *\u002F\n+\tpublic function admin_menu() {\n+\t\tif ( 'lp-setup' !== LP_Request::get_string( 'page' ) || ! current_user_can( 'install_plugins' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tadd_dashboard_page( '', '', 'manage_options', 'lp-setup', '' );\n+\t}\n+\n+\t\u002F**\n+\t * Display setup page a ignore anything else in the rest\n+\t *\u002F\n+\tpublic function setup_wizard() {\n+\t\tif ( 'lp-setup' !== LP_Request::get_string( 'page' ) || ! current_user_can( 'install_plugins' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( 'finish' === LP_Request::get_string( 'step' ) ) {\n+\t\t\tupdate_option( 'learn_press_setup_wizard_completed', 'yes' );\n+\t\t}\n+\n+\t\t$this->save();\n+\n+\t\t\u002F\u002F Refresh new changes\n+\t\t\u002F\u002F LP_Settings::instance()->refresh();\n+\n+\t\t$assets = LP_Admin_Assets::instance();\n+\n+\t\t\u002F\u002F tungnx: fix error with Woocommerce\n+\t\tremove_action( 'admin_enqueue_scripts', array( 'Automattic\\WooCommerce\\Admin\\Loader', 'register_scripts' ) );\n+\t\tremove_action( 'admin_enqueue_scripts', array( 'Automattic\\WooCommerce\\Admin\\Loader', 'load_scripts' ), 15 );\n+\t\tremove_action(\n+\t\t\t'admin_enqueue_scripts',\n+\t\t\tarray(\n+\t\t\t\t'Automattic\\WooCommerce\\Admin\\Features\\Features',\n+\t\t\t\t'load_scripts',\n+\t\t\t),\n+\t\t\t15\n+\t\t);\n+\t\t\u002F\u002F End fix\n+\t\t\u002F\u002F @do_action( 'admin_enqueue_scripts' );\n+\n+\t\twp_enqueue_style( 'buttons' );\n+\t\twp_enqueue_style( 'common' );\n+\t\twp_enqueue_style( 'forms' );\n+\t\twp_enqueue_style( 'themes' );\n+\t\twp_enqueue_style( 'dashboard' );\n+\t\twp_enqueue_style( 'widgets' );\n+\t\twp_enqueue_style( 'lp-admin', $assets->url( 'css\u002Fadmin\u002Fadmin.css' ) );\n+\t\twp_enqueue_style( 'lp-setup', $assets->url( 'css\u002Fadmin\u002Fsetup.css' ) );\n+\t\twp_enqueue_style( 'lp-select2', $assets->url( 'src\u002Fcss\u002Fvendor\u002Fselect2.min.css' ) );\n+\t\twp_enqueue_style( 'lp-tom-select', $assets->url( 'src\u002Fcss\u002Fvendor\u002Ftom-select.min.css' ) );\n+\n+\t\twp_enqueue_script( 'lp-select2', $assets->url( 'src\u002Fjs\u002Fvendor\u002Fselect2.full.min.js' ) );\n+\t\twp_enqueue_script( 'lp-utils', $assets->url( 'js\u002Fdist\u002Futils.js' ) );\n+\t\twp_enqueue_script( 'lp-admin', $assets->url( 'js\u002Fdist\u002Fadmin\u002Fadmin.js' ), uniqid(), true );\n+\t\twp_enqueue_script( 'drop-down-page', $assets->url( 'src\u002Fjs\u002Fadmin\u002Fshare\u002Fdropdown-pages.js' ), uniqid(), true );\n+\t\twp_register_script(\n+\t\t\t'lp-setup',\n+\t\t\t$assets->url( 'js\u002Fdist\u002Fadmin\u002Fpages\u002Fsetup.js' ),\n+\t\t\tarray( 'jquery', 'lp-admin' ),\n+\t\t\tuniqid(),\n+\t\t\ttrue\n+\t\t);\n+\t\twp_localize_script( 'lp-setup', 'lpGlobalSettings', learn_press_global_script_params() );\n+\t\t$lp_admin_assets = LP_Admin_Assets::instance();\n+\t\twp_localize_script( 'lp-setup', 'lpDataAdmin', $lp_admin_assets->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\n+\t\twp_localize_script( 'lp-setup', 'lpData', $lp_admin_assets->localize_data_global(), [ 'id' => 'lpDataAdmin' ] );\n+\t\twp_enqueue_script( 'lp-setup' );\n+\t\tlearn_press_admin_view( 'setup\u002Fheader' );\n+\t\tlearn_press_admin_view( 'setup\u002Fcontent', array( 'steps' => $this->get_steps() ) );\n+\t\tlearn_press_admin_view( 'setup\u002Ffooter' );\n+\n+\t\tdie();\n+\t}\n+\n+\t\u002F**\n+\t * @TODO tungnx - need review\n+\t *\u002F\n+\tpublic function save() {\n+\t\t$step = LP_Request::get_string( 'lp-setup-step' );\n+\n+\t\tif ( ! wp_verify_nonce( LP_Request::get_string( 'lp-setup-nonce' ), 'lp-setup-step-' . $step ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$postdata = LP_Request::get_param( 'settings' );\n+\t\t$steps    = array( 'payment', 'pages', 'currency', 'emails' );\n+\n+\t\tif ( ( 'yes' !== LP_Request::get_param( 'skip' ) ) && in_array( $step, $steps ) ) {\n+\t\t\tif ( array_key_exists( 'paypal', $postdata ) ) {\n+\t\t\t\tupdate_option( 'learn_press_paypal', $postdata['paypal'] );\n+\t\t\t}\n+\n+\t\t\tif ( array_key_exists( 'currency', $postdata ) ) {\n+\t\t\t\tforeach ( $postdata['currency'] as $k => $v ) {\n+\t\t\t\t\tupdate_option( 'learn_press_' . $k, $v );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( array_key_exists( 'pages', $postdata ) ) {\n+\t\t\t\tforeach ( $postdata['pages'] as $k => $v ) {\n+\t\t\t\t\tupdate_option( 'learn_press_' . $k, $v );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( array_key_exists( 'emails', $postdata ) ) {\n+\t\t\t\tif ( ! empty( $postdata['emails']['enable'] ) && ( $postdata['emails']['enable'] === 'yes' ) ) {\n+\t\t\t\t\t$emails = LP_Emails::instance()->emails;\n+\n+\t\t\t\t\tif ( $emails ) {\n+\t\t\t\t\t\tforeach ( $emails as $email ) {\n+\t\t\t\t\t\t\t$response[ $email->id ] = $email->enable( true );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t\t$lp_settings_cache->clean_lp_settings();\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fsetup-wizard\u002Fupdate-settings', $postdata, $step );\n+\t}\n+\n+\t\u002F**\n+\t * Return array of all steps are available when running setup wizard.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_steps() {\n+\t\tstatic $steps;\n+\t\tif ( is_null( $steps ) ) {\n+\t\t\t$steps = apply_filters(\n+\t\t\t\t'learn-press\u002Fsetup-wizard\u002Fsteps',\n+\t\t\t\tarray(\n+\t\t\t\t\t'welcome' => array(\n+\t\t\t\t\t\t'title'       => __( 'Welcome', 'learnpress' ),\n+\t\t\t\t\t\t'callback'    => array( $this, 'step_welcome' ),\n+\t\t\t\t\t\t'next_button' => __( 'Run Setup Wizard', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'pages'   => array(\n+\t\t\t\t\t\t'title'    => __( 'Pages', 'learnpress' ),\n+\t\t\t\t\t\t'callback' => array( $this, 'step_pages' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t\u002F\u002F 'currency' => array(\n+\t\t\t\t\t\u002F\u002F 'title'            => __( 'Currency', 'learnpress' ),\n+\t\t\t\t\t\u002F\u002F 'callback'         => array( $this, 'step_currency' ),\n+\t\t\t\t\t\u002F\u002F 'back_button'      => false,\n+\t\t\t\t\t\u002F\u002F 'skip_prev_button' => false\n+\t\t\t\t\t\u002F\u002F ),\n+\t\t\t\t\t'payment' => array(\n+\t\t\t\t\t\t'title'    => __( 'Payment', 'learnpress' ),\n+\t\t\t\t\t\t'callback' => array( $this, 'step_payment' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t\u002F\u002F 'emails'   => array(\n+\t\t\t\t\t\u002F\u002F 'title'    => __( 'Emails', 'learnpress' ),\n+\t\t\t\t\t\u002F\u002F 'callback' => array( $this, 'step_emails' )\n+\t\t\t\t\t\u002F\u002F ),\n+\t\t\t\t\t'finish'  => array(\n+\t\t\t\t\t\t'title'    => __( 'Finish', 'learnpress' ),\n+\t\t\t\t\t\t'callback' => array( $this, 'step_finish' ),\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $steps;\n+\t}\n+\n+\t\u002F**\n+\t * Get all keys of available steps.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_step_keys() {\n+\t\treturn array_keys( $this->get_steps() );\n+\t}\n+\n+\t\u002F**\n+\t * Get key of current step.\n+\t *\n+\t * @param bool $key\n+\t *\n+\t * @return mixed|string\n+\t *\u002F\n+\tpublic function get_current_step( $key = true ) {\n+\t\t$current = LP_Request::get_string( 'step' );\n+\t\t$steps   = $this->get_steps();\n+\n+\t\tif ( empty( $steps[ $current ] ) ) {\n+\t\t\t$key_steps = array_keys( $steps );\n+\t\t\t$current   = reset( $key_steps );\n+\t\t}\n+\n+\t\t$step = $steps[ $current ];\n+\t\tif ( empty( $step['slug'] ) ) {\n+\t\t\t$step['slug'] = $current;\n+\t\t}\n+\n+\t\treturn $key ? $current : $step;\n+\t}\n+\n+\t\u002F**\n+\t * Return true if the first step is viewing.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_first_step() {\n+\t\t$steps = $this->get_step_keys();\n+\n+\t\treturn array_search( $this->get_current_step(), $steps ) === 0;\n+\t}\n+\n+\t\u002F**\n+\t * Return true if the last steo is viewing.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_last_step() {\n+\t\t$steps = $this->get_step_keys();\n+\n+\t\treturn array_search( $this->get_current_step(), $steps ) === sizeof( $steps ) - 1;\n+\t}\n+\n+\t\u002F**\n+\t * Get url of next step.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_next_url() {\n+\t\t$current = $this->get_current_step();\n+\t\t$steps   = $this->get_step_keys();\n+\t\t$at      = array_search( $current, $steps );\n+\t\tif ( $at \u003C sizeof( $steps ) - 1 ) {\n+\t\t\t++$at;\n+\t\t}\n+\n+\t\treturn esc_url_raw( add_query_arg( 'step', $steps[ $at ], admin_url( $this->_base_url ) ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get url of prev step.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_prev_url() {\n+\t\t$current = $this->get_current_step();\n+\t\t$steps   = $this->get_step_keys();\n+\t\t$at      = array_search( $current, $steps );\n+\t\tif ( $at > 0 ) {\n+\t\t\t--$at;\n+\t\t}\n+\n+\t\treturn esc_url_raw( add_query_arg( 'step', $steps[ $at ], admin_url( $this->_base_url ) ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get position number of a step.\n+\t *\n+\t * @param string $step - Optional.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_step_position( $step = '' ) {\n+\t\tif ( ! $step ) {\n+\t\t\t$step = $this->get_current_step();\n+\t\t}\n+\n+\t\t$steps = $this->get_step_keys();\n+\n+\t\treturn array_search( $step, $steps );\n+\t}\n+\n+\tpublic function get_payments() {\n+\t\treturn array(\n+\t\t\t'paypal' => array(\n+\t\t\t\t'name'     => __( 'PayPal', 'learnpress' ),\n+\t\t\t\t'icon'     => LearnPress::instance()->plugin_url( 'assets\u002Fimages\u002Fpaypal-logo-preview.png' ),\n+\t\t\t\t'callback' => array( $this, 'setup_paypal' ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\tpublic function setup_paypal() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsetup-paypal' );\n+\t}\n+\n+\tpublic function setup_stripe() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsetup-stripe' );\n+\t}\n+\n+\t\u002F**\n+\t * Welcome step content.\n+\t *\u002F\n+\tpublic function step_welcome() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fwelcome' );\n+\t}\n+\n+\t\u002F**\n+\t * Currency step content.\n+\t *\u002F\n+\tpublic function step_currency() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fcurrency' );\n+\t}\n+\n+\tpublic function step_pages() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fpages' );\n+\t}\n+\n+\tpublic function step_payment() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Fpayment' );\n+\t}\n+\n+\tpublic function step_emails() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Femails' );\n+\t}\n+\n+\tpublic function step_finish() {\n+\t\tlearn_press_admin_view( 'setup\u002Fsteps\u002Ffinish' );\n+\t}\n+\n+\tpublic function scripts() {\n+\t}\n+\n+\t\u002F**\n+\t * Get singleton instance\n+\t *\n+\t * @return bool|LP_Setup_Wizard\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tstatic $instance;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+}\n+\n+return LP_Setup_Wizard::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-updater.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-updater.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fclass-lp-updater.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fclass-lp-updater.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,125 +1,125 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Updater\r\n- *\r\n- * Update helper class providing update functions\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-class LP_Updater {\r\n-\t\u002F**\r\n-\t * Map version upgrade.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $db_map_version = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Updater constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$this->db_map_version = apply_filters(\r\n-\t\t\t'lp\u002Fupgrade\u002Fdb\u002Fmap_version',\r\n-\t\t\tarray(\r\n-\t\t\t\t'3' => 4, \u002F\u002F DB v3 need up DB v4\r\n-\t\t\t\t'4' => 5, \u002F\u002F DB v4 need up DB v5\r\n-\t\t\t\t'5' => 6, \u002F\u002F DB v4 need up DB v6\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check LP Database need upgrade.\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function check_lp_db_need_upgrade() {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$db_current_version = (int) get_option( LP_KEY_DB_VERSION, 0 );\r\n-\t\t\u002F*if ( ! $db_current_version ) {\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t$db_require_version = LearnPress::instance()->db_version;\r\n-\t\tif ( version_compare( $db_require_version, $db_current_version, '\u003C=' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( array_key_exists( $db_current_version, $this->db_map_version ) ) {\r\n-\t\t\treturn $this->db_map_version[ $db_current_version . '' ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * For case not have key \"learnpress_db_version\" on DB, still have columns of learnpress.\r\n-\t\t * After a long time, need remove fix fast\r\n-\t\t *\u002F\r\n-\t\t$lp_db                                = LP_Database::getInstance();\r\n-\t\t$check_tb_lp_order_items_exists       = $lp_db->check_table_exists( $lp_db->tb_lp_order_items );\r\n-\t\t$check_tb_lp_user_item_results_exists = $lp_db->check_table_exists( $lp_db->tb_lp_user_item_results );\r\n-\t\t$check_col_item_id_on_lp_order_items  = $lp_db->check_col_table( $lp_db->tb_lp_order_items, 'item_id' );\r\n-\r\n-\t\tif ( $check_tb_lp_order_items_exists && ( ! $check_tb_lp_user_item_results_exists || ! $check_col_item_id_on_lp_order_items ) ) {\r\n-\t\t\tupdate_option( LP_KEY_DB_VERSION, 3 );\r\n-\r\n-\t\t\treturn $this->db_map_version['3'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F End.\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load file upgrade database.\r\n-\t *\r\n-\t * @return null|object\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function load_file_version_upgrade_db() {\r\n-\t\t$class_handle     = null;\r\n-\t\t$db_version_up_to = $this->check_lp_db_need_upgrade();\r\n-\r\n-\t\tif ( $db_version_up_to ) {\r\n-\t\t\t$file_update = LP_PLUGIN_PATH . 'inc\u002Fupdates\u002Flearnpress-upgrade-' . $db_version_up_to . '.php';\r\n-\r\n-\t\t\tif ( file_exists( $file_update ) ) {\r\n-\t\t\t\tinclude_once $file_update;\r\n-\t\t\t\t$name_class_handle_upgrade = 'LP_Upgrade_' . $db_version_up_to;\r\n-\r\n-\t\t\t\tif ( class_exists( $name_class_handle_upgrade )\r\n-\t\t\t\t\t&& is_callable( array( $name_class_handle_upgrade, 'get_instance' ) ) ) {\r\n-\t\t\t\t\t$class_handle = $name_class_handle_upgrade::get_instance();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $class_handle;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get singleton instance of the class.\r\n-\t *\r\n-\t * @return bool|LP_Updater\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Updater::instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Updater\n+ *\n+ * Update helper class providing update functions\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+class LP_Updater {\n+\t\u002F**\n+\t * Map version upgrade.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $db_map_version = array();\n+\n+\t\u002F**\n+\t * LP_Updater constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$this->db_map_version = apply_filters(\n+\t\t\t'lp\u002Fupgrade\u002Fdb\u002Fmap_version',\n+\t\t\tarray(\n+\t\t\t\t'3' => 4, \u002F\u002F DB v3 need up DB v4\n+\t\t\t\t'4' => 5, \u002F\u002F DB v4 need up DB v5\n+\t\t\t\t'5' => 6, \u002F\u002F DB v4 need up DB v6\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Check LP Database need upgrade.\n+\t *\n+\t * @return bool|int\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function check_lp_db_need_upgrade() {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$db_current_version = (int) get_option( LP_KEY_DB_VERSION, 0 );\n+\t\t\u002F*if ( ! $db_current_version ) {\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\t$db_require_version = LearnPress::instance()->db_version;\n+\t\tif ( version_compare( $db_require_version, $db_current_version, '\u003C=' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( array_key_exists( $db_current_version, $this->db_map_version ) ) {\n+\t\t\treturn $this->db_map_version[ $db_current_version . '' ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * For case not have key \"learnpress_db_version\" on DB, still have columns of learnpress.\n+\t\t * After a long time, need remove fix fast\n+\t\t *\u002F\n+\t\t$lp_db                                = LP_Database::getInstance();\n+\t\t$check_tb_lp_order_items_exists       = $lp_db->check_table_exists( $lp_db->tb_lp_order_items );\n+\t\t$check_tb_lp_user_item_results_exists = $lp_db->check_table_exists( $lp_db->tb_lp_user_item_results );\n+\t\t$check_col_item_id_on_lp_order_items  = $lp_db->check_col_table( $lp_db->tb_lp_order_items, 'item_id' );\n+\n+\t\tif ( $check_tb_lp_order_items_exists && ( ! $check_tb_lp_user_item_results_exists || ! $check_col_item_id_on_lp_order_items ) ) {\n+\t\t\tupdate_option( LP_KEY_DB_VERSION, 3 );\n+\n+\t\t\treturn $this->db_map_version['3'];\n+\t\t}\n+\n+\t\t\u002F\u002F End.\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Load file upgrade database.\n+\t *\n+\t * @return null|object\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function load_file_version_upgrade_db() {\n+\t\t$class_handle     = null;\n+\t\t$db_version_up_to = $this->check_lp_db_need_upgrade();\n+\n+\t\tif ( $db_version_up_to ) {\n+\t\t\t$file_update = LP_PLUGIN_PATH . 'inc\u002Fupdates\u002Flearnpress-upgrade-' . $db_version_up_to . '.php';\n+\n+\t\t\tif ( file_exists( $file_update ) ) {\n+\t\t\t\tinclude_once $file_update;\n+\t\t\t\t$name_class_handle_upgrade = 'LP_Upgrade_' . $db_version_up_to;\n+\n+\t\t\t\tif ( class_exists( $name_class_handle_upgrade )\n+\t\t\t\t\t&& is_callable( array( $name_class_handle_upgrade, 'get_instance' ) ) ) {\n+\t\t\t\t\t$class_handle = $name_class_handle_upgrade::get_instance();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $class_handle;\n+\t}\n+\n+\t\u002F**\n+\t * Get singleton instance of the class.\n+\t *\n+\t * @return bool|LP_Updater\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tstatic $instance;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+}\n+\n+return LP_Updater::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,399 +1,399 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Editor_Course\r\n- *\r\n- * @since 3.0.2\r\n- *\u002F\r\n-class LP_Admin_Editor_Course extends LP_Admin_Editor {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Course_CURD\r\n-\t *\u002F\r\n-\tprotected $course_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Section_CURD\r\n-\t *\u002F\r\n-\tprotected $section_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Course\r\n-\t *\u002F\r\n-\tprotected $course = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Admin_Editor_Course constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Do the action depending on ajax calls with params\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\tcheck_ajax_referer( 'learnpress_update_curriculum', 'nonce' );\r\n-\r\n-\t\t$args      = wp_parse_args(\r\n-\t\t\t$_REQUEST,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'   => 0,\r\n-\t\t\t\t'type' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$course_id = $args['id'] ?? 0;\r\n-\t\t$course    = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->course       = $course;\r\n-\t\t$this->course_curd  = new LP_Course_CURD();\r\n-\t\t$this->section_curd = new LP_Section_CURD( $course_id );\r\n-\t\t$this->result       = array( $args['type'] );\r\n-\r\n-\t\t$this->call( $args['type'], array( $args ) );\r\n-\t\t\u002F\u002FLP_Course_Post_Type::instance()->save_post( $course_id, null, true );\r\n-\t\t$bg = LP_Background_Single_Course::instance();\r\n-\t\t$bg->data(\r\n-\t\t\tarray(\r\n-\t\t\t\t'handle_name' => 'save_post',\r\n-\t\t\t\t'course_id'   => $course_id,\r\n-\t\t\t\t'data'        => [],\r\n-\t\t\t)\r\n-\t\t)->dispatch();\r\n-\r\n-\t\treturn $this->get_result();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function draft_course( $args = array() ) {\r\n-\t\t$new_course = ! empty( $args['course'] ) ? $args['course'] : false;\r\n-\t\t$new_course = json_decode( wp_unslash( $new_course ), true );\r\n-\r\n-\t\tif ( ! $new_course ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$title   = $new_course['title'] ? $new_course['title'] : __( 'New Course', 'learnpress' );\r\n-\t\t$content = $new_course['content'] ? $new_course['content'] : '';\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'id'      => $this->course->get_id(),\r\n-\t\t\t'status'  => 'draft',\r\n-\t\t\t'title'   => $title,\r\n-\t\t\t'content' => $content,\r\n-\t\t);\r\n-\r\n-\t\t$this->course_curd->create( $args );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\u002F\r\n-\tpublic function hidden_sections( $args ) {\r\n-\t\t$hidden = ! empty( $args['hidden'] ) ? $args['hidden'] : false;\r\n-\t\tupdate_post_meta( $this->course->get_id(), '_admin_hidden_sections', $hidden );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sort sections\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\u002F\r\n-\tpublic function sort_sections( $args = array() ) {\r\n-\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\r\n-\t\t$order = json_decode( wp_unslash( $order ), true );\r\n-\r\n-\t\tif ( ! $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F$this->course ? $this->course->get_sections() : '';\r\n-\t\t$this->result = $this->section_curd->update_sections_order( $order );\r\n-\r\n-\t\t\u002F\u002F update final quiz\r\n-\t\t\u002F\u002F$this->section_curd->update_final_item();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function update_section( $args = array() ) {\r\n-\t\t$section = $args['section'] ?? false;\r\n-\t\t$section = json_decode( wp_unslash( $section ), true );\r\n-\r\n-\t\tif ( ! $section ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $section['course_id'] ) && ! isset( $section['id'] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$data = array(\r\n-\t\t\t'section_id'          => $section['id'] ?? $section['section_id'] ?? 0,\r\n-\t\t\t'section_name'        => $section['title'] ?? $section['section_name'] ?? '',\r\n-\t\t\t'section_description' => $section['description'] ?? $section['section_description'] ?? '',\r\n-\t\t\t'section_order'       => $section['order'] ?? $section['section_order'] ?? 0,\r\n-\t\t\t'section_course_id'   => $this->course->get_id(),\r\n-\t\t);\r\n-\r\n-\t\t$this->result = $this->section_curd->update( $data );\r\n-\r\n-\t\treturn $this->result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function remove_section( $args = array() ) {\r\n-\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\r\n-\r\n-\t\tif ( ! $section_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->section_curd->delete( $section_id );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function new_section( $args = array() ) {\r\n-\t\t$section_name = $args['section_name'] ?? '';\r\n-\t\t$temp_id      = $args['temp_id'] ?? 0;\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'section_course_id'   => $this->course->get_id(),\r\n-\t\t\t'section_description' => '',\r\n-\t\t\t'section_name'        => $section_name,\r\n-\t\t\t'items'               => array(),\r\n-\t\t);\r\n-\r\n-\t\t$section = $this->section_curd->create( $args );\r\n-\r\n-\t\t$this->result = array(\r\n-\t\t\t'temp_id'     => $temp_id,\r\n-\t\t\t'id'          => $section['section_id'],\r\n-\t\t\t'items'       => $section['items'],\r\n-\t\t\t'title'       => $section['section_name'],\r\n-\t\t\t'description' => $section['section_description'],\r\n-\t\t\t'course_id'   => $section['section_course_id'],\r\n-\t\t\t'order'       => $section['section_order'],\r\n-\t\t);\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function update_section_item( $args = array() ) {\r\n-\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\r\n-\t\t$item       = ! empty( $args['item'] ) ? $args['item'] : false;\r\n-\t\t$item       = json_decode( wp_unslash( $item ), true );\r\n-\r\n-\t\tif ( ! ( $section_id && $item ) ) {\r\n-\t\t\treturn func_get_args();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F update lesson, quiz title\r\n-\t\t$this->result = $this->section_curd->update_item( $item );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function remove_section_item( $args = array() ) {\r\n-\t\t$section_id = $args['section_id'] ?? 0;\r\n-\t\t$item_id    = $args['item_id'] ?? 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Instructor only remove item in my item.\r\n-\t\t\tif ( absint( get_post_field( 'post_author', $item_id ) ) !== absint( get_current_user_id() ) && ! current_user_can( 'administrator' ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You can not delete this item!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! ( $section_id && $item_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid params!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F remove item from course\r\n-\t\t\t$this->course_curd->remove_item( $item_id );\r\n-\t\t\t$this->result = true;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->result = new WP_Error( '2', $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function delete_section_item( $args = array() ) {\r\n-\t\t$section_id = $args['section_id'] ?? 0;\r\n-\t\t$item_id    = $args['item_id'] ?? 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Instructor only remove item in my item.\r\n-\t\t\tif ( absint( get_post_field( 'post_author', $item_id ) ) !== absint( get_current_user_id() ) && ! current_user_can( 'administrator' ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You can not delete this item!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! ( $section_id && $item_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid params!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->result = wp_trash_post( $item_id );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->result = new WP_Error( '2', $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic function new_section_item( $args = array() ) {\r\n-\t\t$section_id = $args['section_id'] ?? 0;\r\n-\t\t$item       = $args['item'] ?? '';\r\n-\t\t$item       = json_decode( wp_unslash( $item ), true );\r\n-\r\n-\t\tif ( ! ( $section_id && $item ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F create new lesson, quiz and add to course\r\n-\t\t$this->result = $this->section_curd->new_item( $section_id, $item );\r\n-\r\n-\t\t\u002F\u002F$this->section_curd->update_final_item();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function update_section_items( $args = array() ) {\r\n-\t\t$section_id = $args['section_id'] ?? 0;\r\n-\t\t$items      = $args['items'] ?? '';\r\n-\t\t$items      = json_decode( wp_unslash( $items ), true );\r\n-\r\n-\t\tif ( ! ( $section_id && $items ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = $this->section_curd->update_section_items( $section_id, $items );\r\n-\r\n-\t\t\u002F\u002F$this->section_curd->update_final_item();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function search_items( $args = array() ) {\r\n-\t\t$query   = isset( $args['query'] ) ? $args['query'] : '';\r\n-\t\t$type    = isset( $args['item_type'] ) ? $args['item_type'] : '';\r\n-\t\t$page    = ! empty( $args['page'] ) ? $args['page'] : 1;\r\n-\t\t$exclude = ! empty( $args['exclude'] ) ? $args['exclude'] : '';\r\n-\r\n-\t\tif ( $exclude ) {\r\n-\t\t\t$exclude = json_decode( $exclude, true );\r\n-\t\t}\r\n-\r\n-\t\t$ids_exclude = array();\r\n-\r\n-\t\tif ( is_array( $exclude ) ) {\r\n-\t\t\tforeach ( $exclude as $item ) {\r\n-\t\t\t\t$ids_exclude[] = $item['id'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$search = new LP_Modal_Search_Items(\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'       => $type,\r\n-\t\t\t\t'context'    => 'course',\r\n-\t\t\t\t'context_id' => $this->course->get_id(),\r\n-\t\t\t\t'term'       => $query,\r\n-\t\t\t\t'limit'      => apply_filters( 'learn-press\u002Fcourse-editor\u002Fchoose-items-limit', 10 ),\r\n-\t\t\t\t'paged'      => $page,\r\n-\t\t\t\t'exclude'    => $ids_exclude,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$id_items = $search->get_items();\r\n-\r\n-\t\t$items = array();\r\n-\t\tforeach ( $id_items as $id ) {\r\n-\t\t\t$post = get_post( $id );\r\n-\r\n-\t\t\t$items[] = array(\r\n-\t\t\t\t'id'    => $post->ID,\r\n-\t\t\t\t'title' => $post->post_title,\r\n-\t\t\t\t'type'  => $post->post_type,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$this->result = array(\r\n-\t\t\t'items'      => $items,\r\n-\t\t\t'pagination' => $search->get_pagination( false ),\r\n-\t\t);\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function add_items_to_section( $args = array() ) {\r\n-\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\r\n-\t\t$items      = ! empty( $args['items'] ) ? $args['items'] : false;\r\n-\t\t$items      = json_decode( wp_unslash( $items ), true );\r\n-\r\n-\t\tif ( ! $items || ! $section_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = $this->section_curd->add_items_section( $section_id, $items );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Admin_Editor_Course\n+ *\n+ * @since 3.0.2\n+ *\u002F\n+class LP_Admin_Editor_Course extends LP_Admin_Editor {\n+\n+\t\u002F**\n+\t * @var LP_Course_CURD\n+\t *\u002F\n+\tprotected $course_curd = null;\n+\n+\t\u002F**\n+\t * @var LP_Section_CURD\n+\t *\u002F\n+\tprotected $section_curd = null;\n+\n+\t\u002F**\n+\t * @var LP_Course\n+\t *\u002F\n+\tprotected $course = null;\n+\n+\t\u002F**\n+\t * LP_Admin_Editor_Course constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t}\n+\n+\t\u002F**\n+\t * Do the action depending on ajax calls with params\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\tcheck_ajax_referer( 'learnpress_update_curriculum', 'nonce' );\n+\n+\t\t$args      = wp_parse_args(\n+\t\t\t$_REQUEST,\n+\t\t\tarray(\n+\t\t\t\t'id'   => 0,\n+\t\t\t\t'type' => '',\n+\t\t\t)\n+\t\t);\n+\t\t$course_id = $args['id'] ?? 0;\n+\t\t$course    = learn_press_get_course( $course_id );\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->course       = $course;\n+\t\t$this->course_curd  = new LP_Course_CURD();\n+\t\t$this->section_curd = new LP_Section_CURD( $course_id );\n+\t\t$this->result       = array( $args['type'] );\n+\n+\t\t$this->call( $args['type'], array( $args ) );\n+\t\t\u002F\u002FLP_Course_Post_Type::instance()->save_post( $course_id, null, true );\n+\t\t$bg = LP_Background_Single_Course::instance();\n+\t\t$bg->data(\n+\t\t\tarray(\n+\t\t\t\t'handle_name' => 'save_post',\n+\t\t\t\t'course_id'   => $course_id,\n+\t\t\t\t'data'        => [],\n+\t\t\t)\n+\t\t)->dispatch();\n+\n+\t\treturn $this->get_result();\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function draft_course( $args = array() ) {\n+\t\t$new_course = ! empty( $args['course'] ) ? $args['course'] : false;\n+\t\t$new_course = json_decode( wp_unslash( $new_course ), true );\n+\n+\t\tif ( ! $new_course ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$title   = $new_course['title'] ? $new_course['title'] : __( 'New Course', 'learnpress' );\n+\t\t$content = $new_course['content'] ? $new_course['content'] : '';\n+\n+\t\t$args = array(\n+\t\t\t'id'      => $this->course->get_id(),\n+\t\t\t'status'  => 'draft',\n+\t\t\t'title'   => $title,\n+\t\t\t'content' => $content,\n+\t\t);\n+\n+\t\t$this->course_curd->create( $args );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\u002F\n+\tpublic function hidden_sections( $args ) {\n+\t\t$hidden = ! empty( $args['hidden'] ) ? $args['hidden'] : false;\n+\t\tupdate_post_meta( $this->course->get_id(), '_admin_hidden_sections', $hidden );\n+\t}\n+\n+\t\u002F**\n+\t * Sort sections\n+\t *\n+\t * @param array $args\n+\t *\u002F\n+\tpublic function sort_sections( $args = array() ) {\n+\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\n+\t\t$order = json_decode( wp_unslash( $order ), true );\n+\n+\t\tif ( ! $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F$this->course ? $this->course->get_sections() : '';\n+\t\t$this->result = $this->section_curd->update_sections_order( $order );\n+\n+\t\t\u002F\u002F update final quiz\n+\t\t\u002F\u002F$this->section_curd->update_final_item();\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function update_section( $args = array() ) {\n+\t\t$section = $args['section'] ?? false;\n+\t\t$section = json_decode( wp_unslash( $section ), true );\n+\n+\t\tif ( ! $section ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! isset( $section['course_id'] ) && ! isset( $section['id'] ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$data = array(\n+\t\t\t'section_id'          => $section['id'] ?? $section['section_id'] ?? 0,\n+\t\t\t'section_name'        => $section['title'] ?? $section['section_name'] ?? '',\n+\t\t\t'section_description' => $section['description'] ?? $section['section_description'] ?? '',\n+\t\t\t'section_order'       => $section['order'] ?? $section['section_order'] ?? 0,\n+\t\t\t'section_course_id'   => $this->course->get_id(),\n+\t\t);\n+\n+\t\t$this->result = $this->section_curd->update( $data );\n+\n+\t\treturn $this->result;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function remove_section( $args = array() ) {\n+\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\n+\n+\t\tif ( ! $section_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->section_curd->delete( $section_id );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function new_section( $args = array() ) {\n+\t\t$section_name = $args['section_name'] ?? '';\n+\t\t$temp_id      = $args['temp_id'] ?? 0;\n+\n+\t\t$args = array(\n+\t\t\t'section_course_id'   => $this->course->get_id(),\n+\t\t\t'section_description' => '',\n+\t\t\t'section_name'        => $section_name,\n+\t\t\t'items'               => array(),\n+\t\t);\n+\n+\t\t$section = $this->section_curd->create( $args );\n+\n+\t\t$this->result = array(\n+\t\t\t'temp_id'     => $temp_id,\n+\t\t\t'id'          => $section['section_id'],\n+\t\t\t'items'       => $section['items'],\n+\t\t\t'title'       => $section['section_name'],\n+\t\t\t'description' => $section['section_description'],\n+\t\t\t'course_id'   => $section['section_course_id'],\n+\t\t\t'order'       => $section['section_order'],\n+\t\t);\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function update_section_item( $args = array() ) {\n+\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\n+\t\t$item       = ! empty( $args['item'] ) ? $args['item'] : false;\n+\t\t$item       = json_decode( wp_unslash( $item ), true );\n+\n+\t\tif ( ! ( $section_id && $item ) ) {\n+\t\t\treturn func_get_args();\n+\t\t}\n+\n+\t\t\u002F\u002F update lesson, quiz title\n+\t\t$this->result = $this->section_curd->update_item( $item );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function remove_section_item( $args = array() ) {\n+\t\t$section_id = $args['section_id'] ?? 0;\n+\t\t$item_id    = $args['item_id'] ?? 0;\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Instructor only remove item in my item.\n+\t\t\tif ( absint( get_post_field( 'post_author', $item_id ) ) !== absint( get_current_user_id() ) && ! current_user_can( 'administrator' ) ) {\n+\t\t\t\tthrow new Exception( __( 'You can not delete this item!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! ( $section_id && $item_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid params!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F remove item from course\n+\t\t\t$this->course_curd->remove_item( $item_id );\n+\t\t\t$this->result = true;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->result = new WP_Error( '2', $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $this->result;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function delete_section_item( $args = array() ) {\n+\t\t$section_id = $args['section_id'] ?? 0;\n+\t\t$item_id    = $args['item_id'] ?? 0;\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Instructor only remove item in my item.\n+\t\t\tif ( absint( get_post_field( 'post_author', $item_id ) ) !== absint( get_current_user_id() ) && ! current_user_can( 'administrator' ) ) {\n+\t\t\t\tthrow new Exception( __( 'You can not delete this item!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! ( $section_id && $item_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid params!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$this->result = wp_trash_post( $item_id );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->result = new WP_Error( '2', $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $this->result;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic function new_section_item( $args = array() ) {\n+\t\t$section_id = $args['section_id'] ?? 0;\n+\t\t$item       = $args['item'] ?? '';\n+\t\t$item       = json_decode( wp_unslash( $item ), true );\n+\n+\t\tif ( ! ( $section_id && $item ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F create new lesson, quiz and add to course\n+\t\t$this->result = $this->section_curd->new_item( $section_id, $item );\n+\n+\t\t\u002F\u002F$this->section_curd->update_final_item();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function update_section_items( $args = array() ) {\n+\t\t$section_id = $args['section_id'] ?? 0;\n+\t\t$items      = $args['items'] ?? '';\n+\t\t$items      = json_decode( wp_unslash( $items ), true );\n+\n+\t\tif ( ! ( $section_id && $items ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = $this->section_curd->update_section_items( $section_id, $items );\n+\n+\t\t\u002F\u002F$this->section_curd->update_final_item();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function search_items( $args = array() ) {\n+\t\t$query   = isset( $args['query'] ) ? $args['query'] : '';\n+\t\t$type    = isset( $args['item_type'] ) ? $args['item_type'] : '';\n+\t\t$page    = ! empty( $args['page'] ) ? $args['page'] : 1;\n+\t\t$exclude = ! empty( $args['exclude'] ) ? $args['exclude'] : '';\n+\n+\t\tif ( $exclude ) {\n+\t\t\t$exclude = json_decode( $exclude, true );\n+\t\t}\n+\n+\t\t$ids_exclude = array();\n+\n+\t\tif ( is_array( $exclude ) ) {\n+\t\t\tforeach ( $exclude as $item ) {\n+\t\t\t\t$ids_exclude[] = $item['id'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t$search = new LP_Modal_Search_Items(\n+\t\t\tarray(\n+\t\t\t\t'type'       => $type,\n+\t\t\t\t'context'    => 'course',\n+\t\t\t\t'context_id' => $this->course->get_id(),\n+\t\t\t\t'term'       => $query,\n+\t\t\t\t'limit'      => apply_filters( 'learn-press\u002Fcourse-editor\u002Fchoose-items-limit', 10 ),\n+\t\t\t\t'paged'      => $page,\n+\t\t\t\t'exclude'    => $ids_exclude,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$id_items = $search->get_items();\n+\n+\t\t$items = array();\n+\t\tforeach ( $id_items as $id ) {\n+\t\t\t$post = get_post( $id );\n+\n+\t\t\t$items[] = array(\n+\t\t\t\t'id'    => $post->ID,\n+\t\t\t\t'title' => $post->post_title,\n+\t\t\t\t'type'  => $post->post_type,\n+\t\t\t);\n+\t\t}\n+\n+\t\t$this->result = array(\n+\t\t\t'items'      => $items,\n+\t\t\t'pagination' => $search->get_pagination( false ),\n+\t\t);\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function add_items_to_section( $args = array() ) {\n+\t\t$section_id = ! empty( $args['section_id'] ) ? $args['section_id'] : false;\n+\t\t$items      = ! empty( $args['items'] ) ? $args['items'] : false;\n+\t\t$items      = json_decode( wp_unslash( $items ), true );\n+\n+\t\tif ( ! $items || ! $section_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = $this->section_curd->add_items_section( $section_id, $items );\n+\n+\t\treturn true;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Admin_Editor\r\n- *\r\n- * @since 3.0.2\r\n- *\u002F\r\n-class LP_Admin_Editor {\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected static $editors = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $result = false;\r\n-\r\n-\t\u002F**\r\n-\t * Get admin editor type\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\tpublic static function get( $type ) {\r\n-\t\tif ( empty( self::$editors[ $type ] ) ) {\r\n-\t\t\t$suffix = preg_replace( '~\\s+~', '_', ucfirst( str_replace( '-', ' ', $type ) ) );\r\n-\t\t\t$class  = \"LP_Admin_Editor_{$suffix}\";\r\n-\r\n-\t\t\tif ( ! class_exists( $class ) ) {\r\n-\t\t\t\t$file = \"class-lp-admin-editor-{$type}.php\";\r\n-\t\t\t\tinclude_once $file;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( class_exists( $class ) ) {\r\n-\t\t\t\tself::$editors[ $type ] = new $class();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn ! empty( self::$editors[ $type ] ) ? self::$editors[ $type ] : false;\r\n-\t}\r\n-\r\n-\tpublic function call( $type, $args = array() ) {\r\n-\t\t$func     = str_replace( '-', '_', $type );\r\n-\t\t$callback = array( $this, $func );\r\n-\r\n-\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\u002F\u002FLP_Hard_Cache::flush();\r\n-\r\n-\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function heartbeat( $args = array() ) {\r\n-\t\t$this->result = true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed|WP_Error\r\n-\t *\u002F\r\n-\tpublic function get_result() {\r\n-\t\treturn $this->result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Admin_Editor_Course\r\n-\t *\u002F\r\n-\tpublic static function get_editor_course() {\r\n-\t\treturn self::get( 'course' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Admin_Editor_Quiz\r\n-\t *\u002F\r\n-\tpublic static function get_editor_quiz() {\r\n-\t\treturn self::get( 'quiz' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Admin_Editor_Question\r\n-\t *\u002F\r\n-\tpublic static function get_editor_question() {\r\n-\t\treturn self::get( 'question' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Admin_Editor\n+ *\n+ * @since 3.0.2\n+ *\u002F\n+class LP_Admin_Editor {\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected static $editors = array();\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $result = false;\n+\n+\t\u002F**\n+\t * Get admin editor type\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\tpublic static function get( $type ) {\n+\t\tif ( empty( self::$editors[ $type ] ) ) {\n+\t\t\t$suffix = preg_replace( '~\\s+~', '_', ucfirst( str_replace( '-', ' ', $type ) ) );\n+\t\t\t$class  = \"LP_Admin_Editor_{$suffix}\";\n+\n+\t\t\tif ( ! class_exists( $class ) ) {\n+\t\t\t\t$file = \"class-lp-admin-editor-{$type}.php\";\n+\t\t\t\tinclude_once $file;\n+\t\t\t}\n+\n+\t\t\tif ( class_exists( $class ) ) {\n+\t\t\t\tself::$editors[ $type ] = new $class();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn ! empty( self::$editors[ $type ] ) ? self::$editors[ $type ] : false;\n+\t}\n+\n+\tpublic function call( $type, $args = array() ) {\n+\t\t$func     = str_replace( '-', '_', $type );\n+\t\t$callback = array( $this, $func );\n+\n+\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\u002F\u002FLP_Hard_Cache::flush();\n+\n+\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function heartbeat( $args = array() ) {\n+\t\t$this->result = true;\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed|WP_Error\n+\t *\u002F\n+\tpublic function get_result() {\n+\t\treturn $this->result;\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Admin_Editor_Course\n+\t *\u002F\n+\tpublic static function get_editor_course() {\n+\t\treturn self::get( 'course' );\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Admin_Editor_Quiz\n+\t *\u002F\n+\tpublic static function get_editor_quiz() {\n+\t\treturn self::get( 'quiz' );\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Admin_Editor_Question\n+\t *\u002F\n+\tpublic static function get_editor_question() {\n+\t\treturn self::get( 'question' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-question.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-question.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-question.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-question.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,262 +1,262 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Editor_Question\r\n- *\r\n- * @since 3.0.2\r\n- *\u002F\r\n-class LP_Admin_Editor_Question extends LP_Admin_Editor {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Question\r\n-\t *\u002F\r\n-\tprotected $question = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Question_CURD\r\n-\t *\u002F\r\n-\tprotected $question_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Admin_Editor_Question constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t}\r\n-\r\n-\tpublic function dispatch() {\r\n-\t\tcheck_ajax_referer( 'learnpress_admin_question_editor', 'nonce' );\r\n-\r\n-\t\t$args        = wp_parse_args(\r\n-\t\t\t$_REQUEST,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'   => false,\r\n-\t\t\t\t'type' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$question_id = $args['id'];\r\n-\t\t$question    = LP_Question::get_question( $question_id );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->question      = $question;\r\n-\t\t$this->question_curd = new LP_Question_CURD();\r\n-\t\t$this->result        = array( 'status' => false );\r\n-\r\n-\t\t$this->call( $args['type'], array( $args ) );\r\n-\r\n-\t\treturn $this->get_result();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question data in admin question editor.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $question\r\n-\t * @param $object | if true, input in question object, do not need init LP_Question::get_question()\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_question_data_to_question_editor( $question, $object = false ) {\r\n-\t\tif ( ! $object ) {\r\n-\t\t\tif ( get_post_type( $question ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = LP_Question::get_question( $question );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t$question_id = $question->get_id();\r\n-\r\n-\t\t$data = array(\r\n-\t\t\t'id'      => $question_id,\r\n-\t\t\t'open'    => false,\r\n-\t\t\t'title'   => get_the_title( $question_id ),\r\n-\t\t\t'type'    => array(\r\n-\t\t\t\t'key'   => $question->get_type(),\r\n-\t\t\t\t'label' => $question->get_type_label(),\r\n-\t\t\t),\r\n-\t\t\t'answers' => is_array( $question->get_data( 'answer_options' ) ) ? array_values( $question->get_data( 'answer_options' ) ) : array(),\r\n-\t\t);\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Draft question.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param       $question_id\r\n-\t * @param array       $args\r\n-\t *\r\n-\t * @return bool|int|LP_Question\r\n-\t *\u002F\r\n-\tprivate function draft_question( $question_id, $args = array() ) {\r\n-\r\n-\t\tif ( get_post_status( $question_id ) != 'auto-draft' ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$curd = new LP_Question_CURD();\r\n-\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'             => $question_id,\r\n-\t\t\t\t'title'          => __( 'New Question', 'learnpress' ),\r\n-\t\t\t\t'content'        => '',\r\n-\t\t\t\t'status'         => 'draft',\r\n-\t\t\t\t'create_answers' => false,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$question = $curd->create( $args );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $question;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function change_question_type( $args = array() ) {\r\n-\t\t$type = ! empty( $args['question_type'] ) ? $args['question_type'] : false;\r\n-\r\n-\t\tif ( ! $type ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$question = $this->question;\r\n-\t\t$args     = $args['draft_question'] ? $args['draft_question'] : '';\r\n-\r\n-\t\tif ( $args ) {\r\n-\t\t\t$args  = (array) ( json_decode( wp_unslash( $args ), '' ) );\r\n-\t\t\t$draft = $this->draft_question( $this->question->get_id(), $args );\r\n-\r\n-\t\t\tif ( $draft ) {\r\n-\t\t\t\t$question = $draft;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $question ) ) {\r\n-\t\t\t$this->question_curd->change_question_type( $question, $type );\r\n-\t\t\t$this->result = $this->get_question_data_to_question_editor( $question, true );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function sort_answer( $args = array() ) {\r\n-\t\t\u002F\u002F answers order\r\n-\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\r\n-\r\n-\t\tif ( ! $order ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F sort answers\r\n-\t\t$this->question = $this->question_curd->sort_answers( $this->question->get_id(), $order );\r\n-\r\n-\t\t$this->result = array_values( $this->question->get_data( 'answer_options' ) );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_answer_title( $args = array() ) {\r\n-\t\t$answer = ! empty( $args['answer'] ) ? $args['answer'] : false;\r\n-\t\t$answer = is_string( $answer ) ? json_decode( wp_unslash( $answer ), true ) : $answer;\r\n-\r\n-\t\tif ( ! $answer ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F update answer title\r\n-\t\t$this->result = $this->question_curd->update_answer_title( $this->question->get_id(), $answer );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function change_correct( $args = array() ) {\r\n-\t\t$correct = ! empty( $args['correct'] ) ? $args['correct'] : false;\r\n-\t\t$correct = json_decode( wp_unslash( $correct ), true );\r\n-\r\n-\t\tif ( ! $correct ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->question = $this->question_curd->change_correct_answer( $this->question, $correct );\r\n-\r\n-\t\t$this->result = $this->_get_answers();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function delete_answer( $args = array() ) {\r\n-\t\t$answer_id = ! empty( $args['answer_id'] ) ? $args['answer_id'] : false;\r\n-\r\n-\t\tif ( ! $answer_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->question_curd->delete_answer( $this->question->get_id(), $answer_id );\r\n-\r\n-\t\t$this->result = $this->_get_answers();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function _get_answers() {\r\n-\t\t$answers = $this->question->get_data( 'answer_options' );\r\n-\r\n-\t\treturn $answers ? array_values( $answers ) : array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function new_answer( $args = array() ) {\r\n-\t\t$answer = LP_Question::get_default_answer();\r\n-\r\n-\t\t$this->question_curd->new_answer( $this->question->get_id(), $answer );\r\n-\r\n-\t\t$this->result = $this->_get_answers();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Admin_Editor_Question\n+ *\n+ * @since 3.0.2\n+ *\u002F\n+class LP_Admin_Editor_Question extends LP_Admin_Editor {\n+\n+\t\u002F**\n+\t * @var LP_Question\n+\t *\u002F\n+\tprotected $question = null;\n+\n+\t\u002F**\n+\t * @var LP_Question_CURD\n+\t *\u002F\n+\tprotected $question_curd = null;\n+\n+\t\u002F**\n+\t * LP_Admin_Editor_Question constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t}\n+\n+\tpublic function dispatch() {\n+\t\tcheck_ajax_referer( 'learnpress_admin_question_editor', 'nonce' );\n+\n+\t\t$args        = wp_parse_args(\n+\t\t\t$_REQUEST,\n+\t\t\tarray(\n+\t\t\t\t'id'   => false,\n+\t\t\t\t'type' => '',\n+\t\t\t)\n+\t\t);\n+\t\t$question_id = $args['id'];\n+\t\t$question    = LP_Question::get_question( $question_id );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->question      = $question;\n+\t\t$this->question_curd = new LP_Question_CURD();\n+\t\t$this->result        = array( 'status' => false );\n+\n+\t\t$this->call( $args['type'], array( $args ) );\n+\n+\t\treturn $this->get_result();\n+\t}\n+\n+\t\u002F**\n+\t * Get question data in admin question editor.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $question\n+\t * @param $object | if true, input in question object, do not need init LP_Question::get_question()\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_question_data_to_question_editor( $question, $object = false ) {\n+\t\tif ( ! $object ) {\n+\t\t\tif ( get_post_type( $question ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn array();\n+\t\t\t}\n+\n+\t\t\t$question = LP_Question::get_question( $question );\n+\t\t}\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t$question_id = $question->get_id();\n+\n+\t\t$data = array(\n+\t\t\t'id'      => $question_id,\n+\t\t\t'open'    => false,\n+\t\t\t'title'   => get_the_title( $question_id ),\n+\t\t\t'type'    => array(\n+\t\t\t\t'key'   => $question->get_type(),\n+\t\t\t\t'label' => $question->get_type_label(),\n+\t\t\t),\n+\t\t\t'answers' => is_array( $question->get_data( 'answer_options' ) ) ? array_values( $question->get_data( 'answer_options' ) ) : array(),\n+\t\t);\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Draft question.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param       $question_id\n+\t * @param array       $args\n+\t *\n+\t * @return bool|int|LP_Question\n+\t *\u002F\n+\tprivate function draft_question( $question_id, $args = array() ) {\n+\n+\t\tif ( get_post_status( $question_id ) != 'auto-draft' ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$curd = new LP_Question_CURD();\n+\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'id'             => $question_id,\n+\t\t\t\t'title'          => __( 'New Question', 'learnpress' ),\n+\t\t\t\t'content'        => '',\n+\t\t\t\t'status'         => 'draft',\n+\t\t\t\t'create_answers' => false,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$question = $curd->create( $args );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $question;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function change_question_type( $args = array() ) {\n+\t\t$type = ! empty( $args['question_type'] ) ? $args['question_type'] : false;\n+\n+\t\tif ( ! $type ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$question = $this->question;\n+\t\t$args     = $args['draft_question'] ? $args['draft_question'] : '';\n+\n+\t\tif ( $args ) {\n+\t\t\t$args  = (array) ( json_decode( wp_unslash( $args ), '' ) );\n+\t\t\t$draft = $this->draft_question( $this->question->get_id(), $args );\n+\n+\t\t\tif ( $draft ) {\n+\t\t\t\t$question = $draft;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( isset( $question ) ) {\n+\t\t\t$this->question_curd->change_question_type( $question, $type );\n+\t\t\t$this->result = $this->get_question_data_to_question_editor( $question, true );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function sort_answer( $args = array() ) {\n+\t\t\u002F\u002F answers order\n+\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\n+\n+\t\tif ( ! $order ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F sort answers\n+\t\t$this->question = $this->question_curd->sort_answers( $this->question->get_id(), $order );\n+\n+\t\t$this->result = array_values( $this->question->get_data( 'answer_options' ) );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_answer_title( $args = array() ) {\n+\t\t$answer = ! empty( $args['answer'] ) ? $args['answer'] : false;\n+\t\t$answer = is_string( $answer ) ? json_decode( wp_unslash( $answer ), true ) : $answer;\n+\n+\t\tif ( ! $answer ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F update answer title\n+\t\t$this->result = $this->question_curd->update_answer_title( $this->question->get_id(), $answer );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function change_correct( $args = array() ) {\n+\t\t$correct = ! empty( $args['correct'] ) ? $args['correct'] : false;\n+\t\t$correct = json_decode( wp_unslash( $correct ), true );\n+\n+\t\tif ( ! $correct ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->question = $this->question_curd->change_correct_answer( $this->question, $correct );\n+\n+\t\t$this->result = $this->_get_answers();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function delete_answer( $args = array() ) {\n+\t\t$answer_id = ! empty( $args['answer_id'] ) ? $args['answer_id'] : false;\n+\n+\t\tif ( ! $answer_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->question_curd->delete_answer( $this->question->get_id(), $answer_id );\n+\n+\t\t$this->result = $this->_get_answers();\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function _get_answers() {\n+\t\t$answers = $this->question->get_data( 'answer_options' );\n+\n+\t\treturn $answers ? array_values( $answers ) : array();\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function new_answer( $args = array() ) {\n+\t\t$answer = LP_Question::get_default_answer();\n+\n+\t\t$this->question_curd->new_answer( $this->question->get_id(), $answer );\n+\n+\t\t$this->result = $this->_get_answers();\n+\n+\t\treturn true;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,654 +1,654 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Admin_Editor_Quiz\r\n- *\r\n- * @since 3.0.2\r\n- *\u002F\r\n-class LP_Admin_Editor_Quiz extends LP_Admin_Editor {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Quiz_CURD\r\n-\t *\u002F\r\n-\tprotected $quiz_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Question_CURD\r\n-\t *\u002F\r\n-\tprotected $question_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Quiz\r\n-\t *\u002F\r\n-\tprotected $quiz = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Admin_Editor_Quiz constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Do the action depending on ajax calls with params\r\n-\t *\r\n-\t * @return bool|mixed|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\tcheck_ajax_referer( 'learnpress_admin_quiz_editor', 'nonce' );\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$_REQUEST,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'   => false,\r\n-\t\t\t\t'type' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F get quiz\r\n-\t\t$quiz_id = $args['id'];\r\n-\t\t$quiz    = learn_press_get_quiz( $quiz_id );\r\n-\r\n-\t\tif ( ! $quiz ) {\r\n-\t\t\treturn new WP_Error( 'INVALID_QUIZ', __( 'Invalid quiz', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->quiz          = $quiz;\r\n-\t\t$this->quiz_curd     = new LP_Quiz_CURD();\r\n-\t\t$this->question_curd = new LP_Question_CURD();\r\n-\t\t$this->result        = array( 'status' => false );\r\n-\r\n-\t\t$this->call( $args['type'], array( $args ) );\r\n-\r\n-\t\treturn $this->get_result();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question data in admin quiz editor.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param       $question\r\n-\t * @param       $object | if true, input in question object, do not need init LP_Question::get_question()\r\n-\t * @param array                                                                                    $args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_question_data_to_quiz_editor( $question, $object = false, $args = array() ) {\r\n-\r\n-\t\tif ( ! $object || ! $question ) {\r\n-\t\t\tif ( get_post_type( $question ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F get question\r\n-\t\t\t$question = LP_Question::get_question( $question );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F question id\r\n-\t\t$question_id = $question->get_id();\r\n-\t\t\u002F\u002F question answer\r\n-\t\t$answer_options = $question->get_data( 'answer_options' );\r\n-\t\t$answer         = array();\r\n-\t\tforeach ( $answer_options as $answer_option ) {\r\n-\t\t\tif ( ! isset( $answer[ $answer_option['question_answer_id'] ] ) ) {\r\n-\t\t\t\t$answer[ $answer_option['question_answer_id'] ] = $answer_option;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$answers = array_values( $answer );\r\n-\t\t$data    = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'       => $question_id,\r\n-\t\t\t\t'open'     => false,\r\n-\t\t\t\t'title'    => get_the_title( $question_id ),\r\n-\t\t\t\t'type'     => array(\r\n-\t\t\t\t\t'key'   => $question->get_type(),\r\n-\t\t\t\t\t'label' => $question->get_type_label(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'answers'  => $answers,\r\n-\t\t\t\t'settings' => array(\r\n-\t\t\t\t\t'mark'        => get_post_meta( $question_id, '_lp_mark', true ),\r\n-\t\t\t\t\t'explanation' => get_post_meta( $question_id, '_lp_explanation', true ),\r\n-\t\t\t\t\t'hint'        => get_post_meta( $question_id, '_lp_hint', true ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'order'    => count( $answers ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function hidden_questions( $args = array() ) {\r\n-\t\t$hidden = ! empty( $args['hidden'] ) ? $args['hidden'] : false;\r\n-\t\tupdate_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', $hidden );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function new_question( $args = array() ) {\r\n-\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\r\n-\t\t$question = json_decode( wp_unslash( $question ), true );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$quiz_id = $this->quiz->get_id();\r\n-\r\n-\t\t\u002F\u002F draft quiz\r\n-\t\tif ( get_post_status( $quiz_id ) == 'auto-draft' ) {\r\n-\r\n-\t\t\t$draft_quiz = ! empty( $args['draft_quiz'] ) ? $args['draft_quiz'] : '';\r\n-\t\t\t$draft_quiz = (array) ( json_decode( wp_unslash( $draft_quiz ), '' ) );\r\n-\r\n-\t\t\t$quiz_args = array(\r\n-\t\t\t\t'id'      => $this->quiz->get_id(),\r\n-\t\t\t\t'title'   => $draft_quiz['title'] ? $draft_quiz['title'] : __( 'New Quiz', 'learnpress' ),\r\n-\t\t\t\t'content' => $draft_quiz['content'],\r\n-\t\t\t\t'status'  => 'draft',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$quiz_id = $this->quiz_curd->create( $quiz_args );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $quiz_id ) ) {\r\n-\t\t\t$this->result = new WP_Error( 'CREATE_QUIZ_FAILED', __( 'Quiz creation failed.', 'learnpress' ) );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'quiz_id' => $quiz_id,\r\n-\t\t\t'title'   => $question['title'],\r\n-\t\t\t'type'    => $question['type'],\r\n-\t\t);\r\n-\r\n-\t\t$new_question = $this->question_curd->create( $args );\r\n-\t\t$this->clear_cache_of_quiz_questions( $quiz_id );\r\n-\r\n-\t\tif ( ! is_wp_error( $new_question ) ) {\r\n-\t\t\t\u002F\u002F update hidden questions in quiz meta\r\n-\t\t\t$quiz             = LP_Quiz::get_quiz( $quiz_id );\r\n-\t\t\t$hidden_questions = $quiz->get_question_ids();\r\n-\r\n-\t\t\tif ( $hidden_questions ) {\r\n-\t\t\t\t$index = array_search( $new_question->get_id(), $hidden_questions );\r\n-\t\t\t\tif ( $index !== false ) {\r\n-\t\t\t\t\tunset( $hidden_questions[ $index ] );\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F$hidden_questions = array_keys( $hidden_questions );\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_post_meta( $quiz_id, '_lp_hidden_questions', $hidden_questions );\r\n-\r\n-\t\t\t\u002F\u002F get new question data\r\n-\t\t\t$this->result = $this->get_question_data_to_quiz_editor( $new_question, true, array( 'open' => true ) );\r\n-\r\n-\t\t\tif ( isset( $question['id'] ) ) {\r\n-\t\t\t\t$this->result['temp_id'] = $question['id'];\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function sort_questions( $args = array() ) {\r\n-\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\r\n-\t\t$order = json_decode( wp_unslash( $order ), true );\r\n-\r\n-\t\tif ( ! $order ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = $this->quiz_curd->sort_questions( $order );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_question_title( $args = array() ) {\r\n-\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\r\n-\t\t$question = json_decode( wp_unslash( $question ), true );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\twp_update_post(\r\n-\t\t\tarray(\r\n-\t\t\t\t'ID'         => $question['id'],\r\n-\t\t\t\t'post_title' => $question['title'],\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$this->result['status'] = true;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function change_question_type( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\t\t$type        = ! empty( $args['question_type'] ) ? $args['question_type'] : false;\r\n-\r\n-\t\tif ( ! ( $question_id || $type ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t$this->question_curd->change_question_type( $question, $type );\r\n-\r\n-\t\t$this->result = $this->get_question_data_to_quiz_editor( $question, true );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function clone_question( $args = array() ) {\r\n-\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\r\n-\t\t$question = json_decode( wp_unslash( $question ), true );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F duplicate question\r\n-\t\t$new_question_id = $this->question_curd->duplicate( $question['id'], array( 'post_status' => 'publish' ) );\r\n-\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\r\n-\r\n-\t\tif ( ! is_wp_error( $new_question_id ) ) {\r\n-\r\n-\t\t\t\u002F\u002F add question to hidden questions in quiz meta\r\n-\t\t\t$hidden_questions = get_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', true );\r\n-\t\t\tif ( ! $hidden_questions ) {\r\n-\t\t\t\t$hidden_questions = array();\r\n-\t\t\t}\r\n-\t\t\t$hidden_questions[] = $new_question_id;\u002F\u002F add question to hidden questions in quiz meta\r\n-\t\t\tupdate_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', $hidden_questions );\r\n-\r\n-\t\t\t\u002F\u002F add question to quiz\r\n-\t\t\t$this->quiz_curd->add_question( $this->quiz->get_id(), $new_question_id );\r\n-\r\n-\t\t\t$this->result = $this->get_question_data_to_quiz_editor( $new_question_id );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function remove_question( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\tif ( ! $question_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = $this->quiz_curd->remove_questions( $this->quiz->get_id(), $question_id );\r\n-\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function delete_question( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\tif ( ! $question_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = wp_trash_post( $question_id );\r\n-\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function sort_question_answers( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\r\n-\t\t$order = json_decode( wp_unslash( $order ), true );\r\n-\r\n-\t\tif ( ! ( $question_id && $order ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F sort answer\r\n-\t\t$this->result = $this->question_curd->sort_answers( $question_id, $order );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_question_answer_title( $args = array() ) {\r\n-\t\t\u002F\u002F question id\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\t\u002F\u002F answers\r\n-\t\t$answer = ! empty( $args['answer'] ) ? $args['answer'] : false;\r\n-\t\t$answer = json_decode( wp_unslash( $answer ), true );\r\n-\r\n-\t\tif ( ! ( $question_id && $answer ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F update answer title\r\n-\t\t$this->result = $this->question_curd->update_answer_title( $question_id, $answer );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function change_question_correct_answer( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\t\u002F\u002F correct answer\r\n-\t\t$correct = ! empty( $args['correct'] ) ? $args['correct'] : false;\r\n-\t\t$correct = json_decode( wp_unslash( $correct ), true );\r\n-\r\n-\t\tif ( ! ( $question_id && $correct ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\u002F\u002F update correct answer, get new question\r\n-\t\t$question = $this->question_curd->change_correct_answer( $question, $correct );\r\n-\r\n-\t\t$this->result = $this->get_question_data_to_quiz_editor( $question, true );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function delete_question_answer( $args = array() ) {\r\n-\t\t$question_id = LP_Helper::sanitize_params_submitted( $_POST['question_id'] ?? 0 );\r\n-\t\t$answer_id   = LP_Helper::sanitize_params_submitted( $_POST['answer_id'] ?? 0 );\r\n-\r\n-\t\tif ( ! $question_id || ! $answer_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->result = $this->question_curd->delete_answer( $question_id, $answer_id );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function new_question_answer( $args = array() ) {\r\n-\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\r\n-\r\n-\t\tif ( ! $question_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$answer        = LP_Question::get_default_answer();\r\n-\t\t$new_answer_id = $this->question_curd->new_answer( $question_id, $answer );\r\n-\t\t$question      = LP_Question::get_question( $question_id );\r\n-\r\n-\t\tif ( $new_answer_id ) {\r\n-\t\t\t$this->result = array_merge(\r\n-\t\t\t\t$answer,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'temp_id'            => isset( $args['question_answer_id'] ) ? $args['question_answer_id'] : 0,\r\n-\t\t\t\t\t'question_answer_id' => $new_answer_id,\r\n-\t\t\t\t\t'question_id'        => $question_id,\r\n-\t\t\t\t\t'order'              => count( $question->get_data( 'answer_options' ) ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function update_quiz_questions_hidden( $args = array() ) {\r\n-\t\t$id        = $args['id'];\r\n-\t\t$questions = isset( $args['hidden'] ) ? $args['hidden'] : false;\r\n-\r\n-\t\tif ( $questions ) {\r\n-\t\t\tupdate_post_meta( $id, '_hidden_questions_settings', $questions );\r\n-\t\t} else {\r\n-\t\t\tdelete_post_meta( $id, '_hidden_questions_settings' );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_question_content( $args = array() ) {\r\n-\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\r\n-\t\t$question = json_decode( wp_unslash( $question ), true );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\twp_update_post(\r\n-\t\t\tarray(\r\n-\t\t\t\t'ID'           => $question['id'],\r\n-\t\t\t\t'post_content' => $question['settings']['content'],\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$this->result['status'] = true;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_question_meta( $args = array() ) {\r\n-\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\r\n-\t\t$question = json_decode( wp_unslash( $question ), true );\r\n-\r\n-\t\t$meta_key = ! empty( $args['meta_key'] ) ? $args['meta_key'] : false;\r\n-\r\n-\t\tif ( ! ( $question && $meta_key ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tupdate_post_meta( $question['id'], '_lp_' . $meta_key, $question['settings'][ $meta_key ] );\r\n-\r\n-\t\t$this->result['status'] = true;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function search_items( $args = array() ) {\r\n-\t\t$query   = ! empty( $args['query'] ) ? $args['query'] : '';\r\n-\t\t$page    = ! empty( $args['page'] ) ? intval( $args['page'] ) : 1;\r\n-\t\t$exclude = ! empty( $args['exclude'] ) ? intval( $args['exclude'] ) : '';\r\n-\r\n-\t\tif ( $exclude ) {\r\n-\t\t\t$exclude = json_decode( $exclude, true );\r\n-\t\t}\r\n-\r\n-\t\t$ids_exclude = array();\r\n-\t\tif ( is_array( $exclude ) ) {\r\n-\t\t\tforeach ( $exclude as $item ) {\r\n-\t\t\t\t$ids_exclude[] = $item['id'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$search = new LP_Modal_Search_Items(\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'       => 'lp_question',\r\n-\t\t\t\t'context'    => 'quiz',\r\n-\t\t\t\t'context_id' => $this->quiz->get_id(),\r\n-\t\t\t\t'term'       => $query,\r\n-\t\t\t\t'limit'      => apply_filters( 'learn-press\u002Fquiz-editor\u002Fchoose-items-limit', 10 ),\r\n-\t\t\t\t'paged'      => $page,\r\n-\t\t\t\t'exclude'    => $ids_exclude,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$ids_item = $search->get_items();\r\n-\r\n-\t\t$items = array();\r\n-\t\tforeach ( $ids_item as $id ) {\r\n-\t\t\t$post = get_post( $id );\r\n-\r\n-\t\t\t$items[] = array(\r\n-\t\t\t\t'id'    => $post->ID,\r\n-\t\t\t\t'title' => $post->post_title,\r\n-\t\t\t\t'type'  => $post->post_type,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$this->result = array(\r\n-\t\t\t'items'      => $items,\r\n-\t\t\t'pagination' => $search->get_pagination( false ),\r\n-\t\t);\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function add_questions_to_quiz( $args = array() ) {\r\n-\t\t$questions = LP_Helper::sanitize_params_submitted( $_POST['items'] ?? '' );\r\n-\r\n-\t\tif ( ! $questions ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$questions = json_decode( $questions, true );\r\n-\r\n-\t\t$quiz_id = $this->quiz->get_id();\r\n-\r\n-\t\tif ( get_post_status( $quiz_id ) == 'auto-draft' ) {\r\n-\t\t\t$draft_quiz = ! empty( $args['draft_quiz'] ) ? $args['draft_quiz'] : '';\r\n-\t\t\t$draft_quiz = (array) json_decode( $draft_quiz, '' );\r\n-\r\n-\t\t\t$quiz_args = array(\r\n-\t\t\t\t'id'      => $quiz_id,\r\n-\t\t\t\t'title'   => $draft_quiz['title'],\r\n-\t\t\t\t'content' => $draft_quiz['content'],\r\n-\t\t\t\t'status'  => 'draft',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$quiz_id = $this->quiz_curd->create( $quiz_args );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $quiz_id ) ) {\r\n-\t\t\t$this->result = new WP_Error( __( 'Quiz creation failed.', 'learnpress' ) );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( $questions ) {\r\n-\t\t\t$hidden_questions = get_post_meta( $quiz_id, '_lp_hidden_questions', true );\r\n-\r\n-\t\t\tif ( ! $hidden_questions ) {\r\n-\t\t\t\t$hidden_questions = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $questions as $key => $question ) {\r\n-\t\t\t\t$hidden_questions[] = $question['id'];\r\n-\t\t\t\t$this->quiz_curd->add_question( $quiz_id, $question['id'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$hidden_questions = array_unique( $hidden_questions );\r\n-\r\n-\t\t\tupdate_post_meta( $quiz_id, '_lp_hidden_questions', $hidden_questions );\r\n-\r\n-\t\t\t$this->clear_cache_of_quiz_questions( $quiz_id );\r\n-\t\t\t$this->result = $this->quiz->quiz_editor_get_questions();\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear cache when add\u002Fremove question to quiz\r\n-\t *\r\n-\t * @param $quiz_id\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function clear_cache_of_quiz_questions( $quiz_id ) {\r\n-\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\r\n-\t\t$key_cache     = \"$quiz_id\u002Fquestion_ids\";\r\n-\t\t$lp_quiz_cache->clear( $key_cache );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Admin_Editor_Quiz\n+ *\n+ * @since 3.0.2\n+ *\u002F\n+class LP_Admin_Editor_Quiz extends LP_Admin_Editor {\n+\n+\t\u002F**\n+\t * @var LP_Quiz_CURD\n+\t *\u002F\n+\tprotected $quiz_curd = null;\n+\n+\t\u002F**\n+\t * @var LP_Question_CURD\n+\t *\u002F\n+\tprotected $question_curd = null;\n+\n+\t\u002F**\n+\t * @var LP_Quiz\n+\t *\u002F\n+\tprotected $quiz = null;\n+\n+\t\u002F**\n+\t * LP_Admin_Editor_Quiz constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t}\n+\n+\t\u002F**\n+\t * Do the action depending on ajax calls with params\n+\t *\n+\t * @return bool|mixed|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\tcheck_ajax_referer( 'learnpress_admin_quiz_editor', 'nonce' );\n+\t\t$args = wp_parse_args(\n+\t\t\t$_REQUEST,\n+\t\t\tarray(\n+\t\t\t\t'id'   => false,\n+\t\t\t\t'type' => '',\n+\t\t\t)\n+\t\t);\n+\n+\t\t\u002F\u002F get quiz\n+\t\t$quiz_id = $args['id'];\n+\t\t$quiz    = learn_press_get_quiz( $quiz_id );\n+\n+\t\tif ( ! $quiz ) {\n+\t\t\treturn new WP_Error( 'INVALID_QUIZ', __( 'Invalid quiz', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$this->quiz          = $quiz;\n+\t\t$this->quiz_curd     = new LP_Quiz_CURD();\n+\t\t$this->question_curd = new LP_Question_CURD();\n+\t\t$this->result        = array( 'status' => false );\n+\n+\t\t$this->call( $args['type'], array( $args ) );\n+\n+\t\treturn $this->get_result();\n+\t}\n+\n+\t\u002F**\n+\t * Get question data in admin quiz editor.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param       $question\n+\t * @param       $object | if true, input in question object, do not need init LP_Question::get_question()\n+\t * @param array                                                                                    $args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_question_data_to_quiz_editor( $question, $object = false, $args = array() ) {\n+\n+\t\tif ( ! $object || ! $question ) {\n+\t\t\tif ( get_post_type( $question ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn array();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F get question\n+\t\t\t$question = LP_Question::get_question( $question );\n+\t\t}\n+\n+\t\t\u002F\u002F question id\n+\t\t$question_id = $question->get_id();\n+\t\t\u002F\u002F question answer\n+\t\t$answer_options = $question->get_data( 'answer_options' );\n+\t\t$answer         = array();\n+\t\tforeach ( $answer_options as $answer_option ) {\n+\t\t\tif ( ! isset( $answer[ $answer_option['question_answer_id'] ] ) ) {\n+\t\t\t\t$answer[ $answer_option['question_answer_id'] ] = $answer_option;\n+\t\t\t}\n+\t\t}\n+\t\t$answers = array_values( $answer );\n+\t\t$data    = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'id'       => $question_id,\n+\t\t\t\t'open'     => false,\n+\t\t\t\t'title'    => get_the_title( $question_id ),\n+\t\t\t\t'type'     => array(\n+\t\t\t\t\t'key'   => $question->get_type(),\n+\t\t\t\t\t'label' => $question->get_type_label(),\n+\t\t\t\t),\n+\t\t\t\t'answers'  => $answers,\n+\t\t\t\t'settings' => array(\n+\t\t\t\t\t'mark'        => get_post_meta( $question_id, '_lp_mark', true ),\n+\t\t\t\t\t'explanation' => get_post_meta( $question_id, '_lp_explanation', true ),\n+\t\t\t\t\t'hint'        => get_post_meta( $question_id, '_lp_hint', true ),\n+\t\t\t\t),\n+\t\t\t\t'order'    => count( $answers ),\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function hidden_questions( $args = array() ) {\n+\t\t$hidden = ! empty( $args['hidden'] ) ? $args['hidden'] : false;\n+\t\tupdate_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', $hidden );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function new_question( $args = array() ) {\n+\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\n+\t\t$question = json_decode( wp_unslash( $question ), true );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$quiz_id = $this->quiz->get_id();\n+\n+\t\t\u002F\u002F draft quiz\n+\t\tif ( get_post_status( $quiz_id ) == 'auto-draft' ) {\n+\n+\t\t\t$draft_quiz = ! empty( $args['draft_quiz'] ) ? $args['draft_quiz'] : '';\n+\t\t\t$draft_quiz = (array) ( json_decode( wp_unslash( $draft_quiz ), '' ) );\n+\n+\t\t\t$quiz_args = array(\n+\t\t\t\t'id'      => $this->quiz->get_id(),\n+\t\t\t\t'title'   => $draft_quiz['title'] ? $draft_quiz['title'] : __( 'New Quiz', 'learnpress' ),\n+\t\t\t\t'content' => $draft_quiz['content'],\n+\t\t\t\t'status'  => 'draft',\n+\t\t\t);\n+\n+\t\t\t$quiz_id = $this->quiz_curd->create( $quiz_args );\n+\t\t}\n+\n+\t\tif ( ! isset( $quiz_id ) ) {\n+\t\t\t$this->result = new WP_Error( 'CREATE_QUIZ_FAILED', __( 'Quiz creation failed.', 'learnpress' ) );\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'quiz_id' => $quiz_id,\n+\t\t\t'title'   => $question['title'],\n+\t\t\t'type'    => $question['type'],\n+\t\t);\n+\n+\t\t$new_question = $this->question_curd->create( $args );\n+\t\t$this->clear_cache_of_quiz_questions( $quiz_id );\n+\n+\t\tif ( ! is_wp_error( $new_question ) ) {\n+\t\t\t\u002F\u002F update hidden questions in quiz meta\n+\t\t\t$quiz             = LP_Quiz::get_quiz( $quiz_id );\n+\t\t\t$hidden_questions = $quiz->get_question_ids();\n+\n+\t\t\tif ( $hidden_questions ) {\n+\t\t\t\t$index = array_search( $new_question->get_id(), $hidden_questions );\n+\t\t\t\tif ( $index !== false ) {\n+\t\t\t\t\tunset( $hidden_questions[ $index ] );\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F$hidden_questions = array_keys( $hidden_questions );\n+\t\t\t}\n+\n+\t\t\tupdate_post_meta( $quiz_id, '_lp_hidden_questions', $hidden_questions );\n+\n+\t\t\t\u002F\u002F get new question data\n+\t\t\t$this->result = $this->get_question_data_to_quiz_editor( $new_question, true, array( 'open' => true ) );\n+\n+\t\t\tif ( isset( $question['id'] ) ) {\n+\t\t\t\t$this->result['temp_id'] = $question['id'];\n+\t\t\t}\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function sort_questions( $args = array() ) {\n+\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\n+\t\t$order = json_decode( wp_unslash( $order ), true );\n+\n+\t\tif ( ! $order ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = $this->quiz_curd->sort_questions( $order );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_question_title( $args = array() ) {\n+\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\n+\t\t$question = json_decode( wp_unslash( $question ), true );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\twp_update_post(\n+\t\t\tarray(\n+\t\t\t\t'ID'         => $question['id'],\n+\t\t\t\t'post_title' => $question['title'],\n+\t\t\t)\n+\t\t);\n+\n+\t\t$this->result['status'] = true;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function change_question_type( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\t\t$type        = ! empty( $args['question_type'] ) ? $args['question_type'] : false;\n+\n+\t\tif ( ! ( $question_id || $type ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$question = LP_Question::get_question( $question_id );\n+\n+\t\t$this->question_curd->change_question_type( $question, $type );\n+\n+\t\t$this->result = $this->get_question_data_to_quiz_editor( $question, true );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function clone_question( $args = array() ) {\n+\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\n+\t\t$question = json_decode( wp_unslash( $question ), true );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F duplicate question\n+\t\t$new_question_id = $this->question_curd->duplicate( $question['id'], array( 'post_status' => 'publish' ) );\n+\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\n+\n+\t\tif ( ! is_wp_error( $new_question_id ) ) {\n+\n+\t\t\t\u002F\u002F add question to hidden questions in quiz meta\n+\t\t\t$hidden_questions = get_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', true );\n+\t\t\tif ( ! $hidden_questions ) {\n+\t\t\t\t$hidden_questions = array();\n+\t\t\t}\n+\t\t\t$hidden_questions[] = $new_question_id;\u002F\u002F add question to hidden questions in quiz meta\n+\t\t\tupdate_post_meta( $this->quiz->get_id(), '_lp_hidden_questions', $hidden_questions );\n+\n+\t\t\t\u002F\u002F add question to quiz\n+\t\t\t$this->quiz_curd->add_question( $this->quiz->get_id(), $new_question_id );\n+\n+\t\t\t$this->result = $this->get_question_data_to_quiz_editor( $new_question_id );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function remove_question( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\tif ( ! $question_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = $this->quiz_curd->remove_questions( $this->quiz->get_id(), $question_id );\n+\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function delete_question( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\tif ( ! $question_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = wp_trash_post( $question_id );\n+\t\t$this->clear_cache_of_quiz_questions( $this->quiz->get_id() );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function sort_question_answers( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\t$order = ! empty( $args['order'] ) ? $args['order'] : false;\n+\t\t$order = json_decode( wp_unslash( $order ), true );\n+\n+\t\tif ( ! ( $question_id && $order ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F sort answer\n+\t\t$this->result = $this->question_curd->sort_answers( $question_id, $order );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_question_answer_title( $args = array() ) {\n+\t\t\u002F\u002F question id\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\t\u002F\u002F answers\n+\t\t$answer = ! empty( $args['answer'] ) ? $args['answer'] : false;\n+\t\t$answer = json_decode( wp_unslash( $answer ), true );\n+\n+\t\tif ( ! ( $question_id && $answer ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F update answer title\n+\t\t$this->result = $this->question_curd->update_answer_title( $question_id, $answer );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function change_question_correct_answer( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\t\u002F\u002F correct answer\n+\t\t$correct = ! empty( $args['correct'] ) ? $args['correct'] : false;\n+\t\t$correct = json_decode( wp_unslash( $correct ), true );\n+\n+\t\tif ( ! ( $question_id && $correct ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\u002F\u002F update correct answer, get new question\n+\t\t$question = $this->question_curd->change_correct_answer( $question, $correct );\n+\n+\t\t$this->result = $this->get_question_data_to_quiz_editor( $question, true );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function delete_question_answer( $args = array() ) {\n+\t\t$question_id = LP_Helper::sanitize_params_submitted( $_POST['question_id'] ?? 0 );\n+\t\t$answer_id   = LP_Helper::sanitize_params_submitted( $_POST['answer_id'] ?? 0 );\n+\n+\t\tif ( ! $question_id || ! $answer_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->result = $this->question_curd->delete_answer( $question_id, $answer_id );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function new_question_answer( $args = array() ) {\n+\t\t$question_id = ! empty( $args['question_id'] ) ? $args['question_id'] : false;\n+\n+\t\tif ( ! $question_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$answer        = LP_Question::get_default_answer();\n+\t\t$new_answer_id = $this->question_curd->new_answer( $question_id, $answer );\n+\t\t$question      = LP_Question::get_question( $question_id );\n+\n+\t\tif ( $new_answer_id ) {\n+\t\t\t$this->result = array_merge(\n+\t\t\t\t$answer,\n+\t\t\t\tarray(\n+\t\t\t\t\t'temp_id'            => isset( $args['question_answer_id'] ) ? $args['question_answer_id'] : 0,\n+\t\t\t\t\t'question_answer_id' => $new_answer_id,\n+\t\t\t\t\t'question_id'        => $question_id,\n+\t\t\t\t\t'order'              => count( $question->get_data( 'answer_options' ) ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function update_quiz_questions_hidden( $args = array() ) {\n+\t\t$id        = $args['id'];\n+\t\t$questions = isset( $args['hidden'] ) ? $args['hidden'] : false;\n+\n+\t\tif ( $questions ) {\n+\t\t\tupdate_post_meta( $id, '_hidden_questions_settings', $questions );\n+\t\t} else {\n+\t\t\tdelete_post_meta( $id, '_hidden_questions_settings' );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_question_content( $args = array() ) {\n+\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\n+\t\t$question = json_decode( wp_unslash( $question ), true );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\twp_update_post(\n+\t\t\tarray(\n+\t\t\t\t'ID'           => $question['id'],\n+\t\t\t\t'post_content' => $question['settings']['content'],\n+\t\t\t)\n+\t\t);\n+\n+\t\t$this->result['status'] = true;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_question_meta( $args = array() ) {\n+\t\t$question = ! empty( $args['question'] ) ? $args['question'] : false;\n+\t\t$question = json_decode( wp_unslash( $question ), true );\n+\n+\t\t$meta_key = ! empty( $args['meta_key'] ) ? $args['meta_key'] : false;\n+\n+\t\tif ( ! ( $question && $meta_key ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tupdate_post_meta( $question['id'], '_lp_' . $meta_key, $question['settings'][ $meta_key ] );\n+\n+\t\t$this->result['status'] = true;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function search_items( $args = array() ) {\n+\t\t$query   = ! empty( $args['query'] ) ? $args['query'] : '';\n+\t\t$page    = ! empty( $args['page'] ) ? intval( $args['page'] ) : 1;\n+\t\t$exclude = ! empty( $args['exclude'] ) ? intval( $args['exclude'] ) : '';\n+\n+\t\tif ( $exclude ) {\n+\t\t\t$exclude = json_decode( $exclude, true );\n+\t\t}\n+\n+\t\t$ids_exclude = array();\n+\t\tif ( is_array( $exclude ) ) {\n+\t\t\tforeach ( $exclude as $item ) {\n+\t\t\t\t$ids_exclude[] = $item['id'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t$search = new LP_Modal_Search_Items(\n+\t\t\tarray(\n+\t\t\t\t'type'       => 'lp_question',\n+\t\t\t\t'context'    => 'quiz',\n+\t\t\t\t'context_id' => $this->quiz->get_id(),\n+\t\t\t\t'term'       => $query,\n+\t\t\t\t'limit'      => apply_filters( 'learn-press\u002Fquiz-editor\u002Fchoose-items-limit', 10 ),\n+\t\t\t\t'paged'      => $page,\n+\t\t\t\t'exclude'    => $ids_exclude,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$ids_item = $search->get_items();\n+\n+\t\t$items = array();\n+\t\tforeach ( $ids_item as $id ) {\n+\t\t\t$post = get_post( $id );\n+\n+\t\t\t$items[] = array(\n+\t\t\t\t'id'    => $post->ID,\n+\t\t\t\t'title' => $post->post_title,\n+\t\t\t\t'type'  => $post->post_type,\n+\t\t\t);\n+\t\t}\n+\n+\t\t$this->result = array(\n+\t\t\t'items'      => $items,\n+\t\t\t'pagination' => $search->get_pagination( false ),\n+\t\t);\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function add_questions_to_quiz( $args = array() ) {\n+\t\t$questions = LP_Helper::sanitize_params_submitted( $_POST['items'] ?? '' );\n+\n+\t\tif ( ! $questions ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$questions = json_decode( $questions, true );\n+\n+\t\t$quiz_id = $this->quiz->get_id();\n+\n+\t\tif ( get_post_status( $quiz_id ) == 'auto-draft' ) {\n+\t\t\t$draft_quiz = ! empty( $args['draft_quiz'] ) ? $args['draft_quiz'] : '';\n+\t\t\t$draft_quiz = (array) json_decode( $draft_quiz, '' );\n+\n+\t\t\t$quiz_args = array(\n+\t\t\t\t'id'      => $quiz_id,\n+\t\t\t\t'title'   => $draft_quiz['title'],\n+\t\t\t\t'content' => $draft_quiz['content'],\n+\t\t\t\t'status'  => 'draft',\n+\t\t\t);\n+\n+\t\t\t$quiz_id = $this->quiz_curd->create( $quiz_args );\n+\t\t}\n+\n+\t\tif ( ! isset( $quiz_id ) ) {\n+\t\t\t$this->result = new WP_Error( __( 'Quiz creation failed.', 'learnpress' ) );\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( $questions ) {\n+\t\t\t$hidden_questions = get_post_meta( $quiz_id, '_lp_hidden_questions', true );\n+\n+\t\t\tif ( ! $hidden_questions ) {\n+\t\t\t\t$hidden_questions = array();\n+\t\t\t}\n+\n+\t\t\tforeach ( $questions as $key => $question ) {\n+\t\t\t\t$hidden_questions[] = $question['id'];\n+\t\t\t\t$this->quiz_curd->add_question( $quiz_id, $question['id'] );\n+\t\t\t}\n+\n+\t\t\t$hidden_questions = array_unique( $hidden_questions );\n+\n+\t\t\tupdate_post_meta( $quiz_id, '_lp_hidden_questions', $hidden_questions );\n+\n+\t\t\t$this->clear_cache_of_quiz_questions( $quiz_id );\n+\t\t\t$this->result = $this->quiz->quiz_editor_get_questions();\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Clear cache when add\u002Fremove question to quiz\n+\t *\n+\t * @param $quiz_id\n+\t *\n+\t * @return void\n+\t * @since 4.2.5.8\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function clear_cache_of_quiz_questions( $quiz_id ) {\n+\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\n+\t\t$key_cache     = \"$quiz_id\u002Fquestion_ids\";\n+\t\t$lp_quiz_cache->clear( $key_cache );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-outdated-template-helper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-outdated-template-helper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-outdated-template-helper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-outdated-template-helper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,249 +1,249 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Outdated_Template_Helper\r\n- *\r\n- * @author ThimPress\r\n- * @since  3.0.0\r\n- *\u002F\r\n-class LP_Outdated_Template_Helper {\r\n-\t\u002F**\r\n-\t * Template counter\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $counts = array(\r\n-\t\t'all'         => 0,\r\n-\t\t'outdated'    => 0,\r\n-\t\t'unversioned' => 0,\r\n-\t\t'up-to-date'  => 0,\r\n-\t);\r\n-\r\n-\t\u002F**\r\n-\t * Get list of template files are overwritten in the theme\r\n-\t *\r\n-\t * @param bool $check\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic static function get_theme_templates( $check = false ) {\r\n-\t\t$template_folder = learn_press_template_path();\r\n-\t\t$template_path   = LP_PLUGIN_PATH . '\u002Ftemplates\u002F';\r\n-\t\t$template_dir    = get_template_directory();\r\n-\t\t$stylesheet_dir  = get_stylesheet_directory();\r\n-\t\t$t_folder        = basename( $template_dir );\r\n-\t\t$s_folder        = basename( $stylesheet_dir );\r\n-\r\n-\t\t$found_files        = array(\r\n-\t\t\t$t_folder => array(),\r\n-\t\t\t$s_folder => array(),\r\n-\t\t);\r\n-\t\t$outdated_templates = false;\r\n-\r\n-\t\t$scanned_files = self::scan_template_files( $template_path );\r\n-\t\tforeach ( $scanned_files as $file ) {\r\n-\t\t\t$theme_folder = '';\r\n-\r\n-\t\t\tif ( file_exists( $stylesheet_dir . '\u002F' . $file ) ) {\r\n-\t\t\t\t$theme_file   = $stylesheet_dir . '\u002F' . $file;\r\n-\t\t\t\t$theme_folder = $s_folder;\r\n-\t\t\t} elseif ( file_exists( $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\r\n-\t\t\t\t$theme_file   = $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file;\r\n-\t\t\t\t$theme_folder = $s_folder;\r\n-\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $file ) ) {\r\n-\t\t\t\t$theme_file   = $template_dir . '\u002F' . $file;\r\n-\t\t\t\t$theme_folder = $t_folder;\r\n-\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\r\n-\t\t\t\t$theme_file   = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\r\n-\t\t\t\t$theme_folder = $t_folder;\r\n-\t\t\t} else {\r\n-\t\t\t\t$theme_file = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $theme_file ) ) {\r\n-\t\t\t\tself::$counts['all'] ++;\r\n-\t\t\t\t$core_version  = self::get_file_version( $template_path . $file );\r\n-\t\t\t\t$theme_version = self::get_file_version( $theme_file );\r\n-\r\n-\t\t\t\tif ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '\u003C' ) ) ) {\r\n-\t\t\t\t\tif ( ! $outdated_templates ) {\r\n-\t\t\t\t\t\t$outdated_templates = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$found_files[ $theme_folder ][] = array(\r\n-\t\t\t\t\t\tstr_replace( WP_CONTENT_DIR . '\u002Fthemes\u002F', '', $theme_file ),\r\n-\t\t\t\t\t\t$theme_version ? $theme_version : '-',\r\n-\t\t\t\t\t\t$core_version,\r\n-\t\t\t\t\t\ttrue,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( empty( $theme_version ) ) {\r\n-\t\t\t\t\t\tself::$counts['unversioned'] ++;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tself::$counts['outdated'] ++;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$found_files[ $theme_folder ][] = array(\r\n-\t\t\t\t\t\tstr_replace( WP_CONTENT_DIR . '\u002Fthemes\u002F', '', $theme_file ),\r\n-\t\t\t\t\t\t$theme_version ? $theme_version : '?',\r\n-\t\t\t\t\t\t$core_version ? $core_version : '?',\r\n-\t\t\t\t\t\tnull,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tif ( $check && $outdated_templates ) {\r\n-\t\t\t\treturn $outdated_templates;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif ( sizeof( $found_files ) > 1 ) {\r\n-\t\t\t$found_files = array_merge( $found_files[ $t_folder ], $found_files[ $s_folder ] );\r\n-\t\t} else {\r\n-\t\t\t$found_files = reset( $found_files );\r\n-\t\t}\r\n-\r\n-\t\tusort( $found_files, array( __CLASS__, '_sort_templates' ) );\r\n-\r\n-\t\treturn $check ? $outdated_templates : $found_files;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if there is any outdated template files in current theme.\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic static function detect_outdated_template() {\r\n-\t\t$template_folder = learn_press_template_path();\r\n-\t\t$template_path   = LP_PLUGIN_PATH . '\u002Ftemplates\u002F';\r\n-\t\t$template_dir    = get_template_directory();\r\n-\t\t$stylesheet_dir  = get_stylesheet_directory();\r\n-\t\t$scanned_files   = self::scan_template_files( $template_path );\r\n-\t\t$parent_item     = 0;\r\n-\t\t$child_item      = 0;\r\n-\r\n-\t\tforeach ( $scanned_files as $file ) {\r\n-\t\t\t$theme_file = false;\r\n-\t\t\t$cradle     = '';\r\n-\r\n-\t\t\tif ( $stylesheet_dir == $template_dir ) { \u002F\u002F Parent theme\r\n-\t\t\t\tif ( file_exists( $template_dir . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'parent';\r\n-\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'parent';\r\n-\t\t\t\t}\r\n-\t\t\t} else { \u002F\u002F Child Theme\r\n-\t\t\t\tif ( file_exists( $stylesheet_dir . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $stylesheet_dir . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'child';\r\n-\t\t\t\t} elseif ( file_exists( $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'child';\r\n-\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'parent';\r\n-\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\r\n-\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\r\n-\t\t\t\t\t$cradle     = 'parent';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $theme_file ) ) {\r\n-\t\t\t\t$core_version  = self::get_file_version( $template_path . $file );\r\n-\t\t\t\t$theme_version = self::get_file_version( $theme_file );\r\n-\r\n-\t\t\t\tif ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '\u003C' ) ) ) {\r\n-\t\t\t\t\tif ( $cradle == 'parent' ) {\r\n-\t\t\t\t\t\t$parent_item ++;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$child_item ++;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $child_item ) || ! empty( $parent_item ) ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'parent_item' => $parent_item,\r\n-\t\t\t\t'child_item'  => $child_item,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Scan all template files in a folder (and sub-folders).\r\n-\t *\r\n-\t * @param string $template_path\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function scan_template_files( $template_path ) {\r\n-\t\t$files  = @scandir( $template_path );\r\n-\t\t$result = array();\r\n-\r\n-\t\tif ( ! empty( $files ) ) {\r\n-\t\t\tforeach ( $files as $key => $value ) {\r\n-\t\t\t\tif ( ! in_array( $value, array( '.', '..', 'index.php', 'index.html' ) ) ) {\r\n-\t\t\t\t\tif ( is_dir( $template_path . '\u002F' . $value ) ) {\r\n-\t\t\t\t\t\t$sub_files = self::scan_template_files( $template_path . '\u002F' . $value );\r\n-\r\n-\t\t\t\t\t\tforeach ( $sub_files as $sub_file ) {\r\n-\t\t\t\t\t\t\t$result[] = $value . '\u002F' . $sub_file;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$result[] = $value;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number version of a template file.\r\n-\t *\r\n-\t * @param string $file\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_file_version( $file ) {\r\n-\t\tif ( ! file_exists( $file ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$fp        = fopen( $file, 'r' );\r\n-\t\t$file_data = fread( $fp, 8192 );\r\n-\t\tfclose( $fp );\r\n-\t\t$file_data = str_replace( \"\\r\", \"\\n\", $file_data );\r\n-\t\t$version   = '';\r\n-\r\n-\t\tif ( preg_match( '\u002F^[ \\t\\\u002F*#@]*' . preg_quote( '@version', '\u002F' ) . '(.*)$\u002Fmi', $file_data, $match ) && $match[1] ) {\r\n-\t\t\t$version = _cleanup_header_comment( $match[1] );\r\n-\t\t}\r\n-\r\n-\t\treturn $version;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sort overrides templates are outdated first\r\n-\t *\r\n-\t * @param array $a\r\n-\t * @param array $b\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function _sort_templates( $a, $b ) {\r\n-\t\tif ( $a[3] && $b[3] ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $a[3] ) {\r\n-\t\t\treturn - 1;\r\n-\t\t}\r\n-\r\n-\t\tif ( $b[3] ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Outdated_Template_Helper\n+ *\n+ * @author ThimPress\n+ * @since  3.0.0\n+ *\u002F\n+class LP_Outdated_Template_Helper {\n+\t\u002F**\n+\t * Template counter\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic static $counts = array(\n+\t\t'all'         => 0,\n+\t\t'outdated'    => 0,\n+\t\t'unversioned' => 0,\n+\t\t'up-to-date'  => 0,\n+\t);\n+\n+\t\u002F**\n+\t * Get list of template files are overwritten in the theme\n+\t *\n+\t * @param bool $check\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic static function get_theme_templates( $check = false ) {\n+\t\t$template_folder = learn_press_template_path();\n+\t\t$template_path   = LP_PLUGIN_PATH . '\u002Ftemplates\u002F';\n+\t\t$template_dir    = get_template_directory();\n+\t\t$stylesheet_dir  = get_stylesheet_directory();\n+\t\t$t_folder        = basename( $template_dir );\n+\t\t$s_folder        = basename( $stylesheet_dir );\n+\n+\t\t$found_files        = array(\n+\t\t\t$t_folder => array(),\n+\t\t\t$s_folder => array(),\n+\t\t);\n+\t\t$outdated_templates = false;\n+\n+\t\t$scanned_files = self::scan_template_files( $template_path );\n+\t\tforeach ( $scanned_files as $file ) {\n+\t\t\t$theme_folder = '';\n+\n+\t\t\tif ( file_exists( $stylesheet_dir . '\u002F' . $file ) ) {\n+\t\t\t\t$theme_file   = $stylesheet_dir . '\u002F' . $file;\n+\t\t\t\t$theme_folder = $s_folder;\n+\t\t\t} elseif ( file_exists( $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\n+\t\t\t\t$theme_file   = $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file;\n+\t\t\t\t$theme_folder = $s_folder;\n+\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $file ) ) {\n+\t\t\t\t$theme_file   = $template_dir . '\u002F' . $file;\n+\t\t\t\t$theme_folder = $t_folder;\n+\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\n+\t\t\t\t$theme_file   = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\n+\t\t\t\t$theme_folder = $t_folder;\n+\t\t\t} else {\n+\t\t\t\t$theme_file = false;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $theme_file ) ) {\n+\t\t\t\tself::$counts['all'] ++;\n+\t\t\t\t$core_version  = self::get_file_version( $template_path . $file );\n+\t\t\t\t$theme_version = self::get_file_version( $theme_file );\n+\n+\t\t\t\tif ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '\u003C' ) ) ) {\n+\t\t\t\t\tif ( ! $outdated_templates ) {\n+\t\t\t\t\t\t$outdated_templates = true;\n+\t\t\t\t\t}\n+\t\t\t\t\t$found_files[ $theme_folder ][] = array(\n+\t\t\t\t\t\tstr_replace( WP_CONTENT_DIR . '\u002Fthemes\u002F', '', $theme_file ),\n+\t\t\t\t\t\t$theme_version ? $theme_version : '-',\n+\t\t\t\t\t\t$core_version,\n+\t\t\t\t\t\ttrue,\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( empty( $theme_version ) ) {\n+\t\t\t\t\t\tself::$counts['unversioned'] ++;\n+\t\t\t\t\t}\n+\t\t\t\t\tself::$counts['outdated'] ++;\n+\t\t\t\t} else {\n+\t\t\t\t\t$found_files[ $theme_folder ][] = array(\n+\t\t\t\t\t\tstr_replace( WP_CONTENT_DIR . '\u002Fthemes\u002F', '', $theme_file ),\n+\t\t\t\t\t\t$theme_version ? $theme_version : '?',\n+\t\t\t\t\t\t$core_version ? $core_version : '?',\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tif ( $check && $outdated_templates ) {\n+\t\t\t\treturn $outdated_templates;\n+\t\t\t}\n+\t\t}\n+\t\tif ( sizeof( $found_files ) > 1 ) {\n+\t\t\t$found_files = array_merge( $found_files[ $t_folder ], $found_files[ $s_folder ] );\n+\t\t} else {\n+\t\t\t$found_files = reset( $found_files );\n+\t\t}\n+\n+\t\tusort( $found_files, array( __CLASS__, '_sort_templates' ) );\n+\n+\t\treturn $check ? $outdated_templates : $found_files;\n+\t}\n+\n+\t\u002F**\n+\t * Check if there is any outdated template files in current theme.\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic static function detect_outdated_template() {\n+\t\t$template_folder = learn_press_template_path();\n+\t\t$template_path   = LP_PLUGIN_PATH . '\u002Ftemplates\u002F';\n+\t\t$template_dir    = get_template_directory();\n+\t\t$stylesheet_dir  = get_stylesheet_directory();\n+\t\t$scanned_files   = self::scan_template_files( $template_path );\n+\t\t$parent_item     = 0;\n+\t\t$child_item      = 0;\n+\n+\t\tforeach ( $scanned_files as $file ) {\n+\t\t\t$theme_file = false;\n+\t\t\t$cradle     = '';\n+\n+\t\t\tif ( $stylesheet_dir == $template_dir ) { \u002F\u002F Parent theme\n+\t\t\t\tif ( file_exists( $template_dir . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'parent';\n+\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'parent';\n+\t\t\t\t}\n+\t\t\t} else { \u002F\u002F Child Theme\n+\t\t\t\tif ( file_exists( $stylesheet_dir . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $stylesheet_dir . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'child';\n+\t\t\t\t} elseif ( file_exists( $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $stylesheet_dir . '\u002F' . $template_folder . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'child';\n+\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'parent';\n+\t\t\t\t} elseif ( file_exists( $template_dir . '\u002F' . $template_folder . '\u002F' . $file ) ) {\n+\t\t\t\t\t$theme_file = $template_dir . '\u002F' . $template_folder . '\u002F' . $file;\n+\t\t\t\t\t$cradle     = 'parent';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $theme_file ) ) {\n+\t\t\t\t$core_version  = self::get_file_version( $template_path . $file );\n+\t\t\t\t$theme_version = self::get_file_version( $theme_file );\n+\n+\t\t\t\tif ( $core_version && ( empty( $theme_version ) || version_compare( $theme_version, $core_version, '\u003C' ) ) ) {\n+\t\t\t\t\tif ( $cradle == 'parent' ) {\n+\t\t\t\t\t\t$parent_item ++;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$child_item ++;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $child_item ) || ! empty( $parent_item ) ) {\n+\t\t\treturn array(\n+\t\t\t\t'parent_item' => $parent_item,\n+\t\t\t\t'child_item'  => $child_item,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Scan all template files in a folder (and sub-folders).\n+\t *\n+\t * @param string $template_path\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function scan_template_files( $template_path ) {\n+\t\t$files  = @scandir( $template_path );\n+\t\t$result = array();\n+\n+\t\tif ( ! empty( $files ) ) {\n+\t\t\tforeach ( $files as $key => $value ) {\n+\t\t\t\tif ( ! in_array( $value, array( '.', '..', 'index.php', 'index.html' ) ) ) {\n+\t\t\t\t\tif ( is_dir( $template_path . '\u002F' . $value ) ) {\n+\t\t\t\t\t\t$sub_files = self::scan_template_files( $template_path . '\u002F' . $value );\n+\n+\t\t\t\t\t\tforeach ( $sub_files as $sub_file ) {\n+\t\t\t\t\t\t\t$result[] = $value . '\u002F' . $sub_file;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$result[] = $value;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get number version of a template file.\n+\t *\n+\t * @param string $file\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_file_version( $file ) {\n+\t\tif ( ! file_exists( $file ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$fp        = fopen( $file, 'r' );\n+\t\t$file_data = fread( $fp, 8192 );\n+\t\tfclose( $fp );\n+\t\t$file_data = str_replace( \"\\r\", \"\\n\", $file_data );\n+\t\t$version   = '';\n+\n+\t\tif ( preg_match( '\u002F^[ \\t\\\u002F*#@]*' . preg_quote( '@version', '\u002F' ) . '(.*)$\u002Fmi', $file_data, $match ) && $match[1] ) {\n+\t\t\t$version = _cleanup_header_comment( $match[1] );\n+\t\t}\n+\n+\t\treturn $version;\n+\t}\n+\n+\t\u002F**\n+\t * Sort overrides templates are outdated first\n+\t *\n+\t * @param array $a\n+\t * @param array $b\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function _sort_templates( $a, $b ) {\n+\t\tif ( $a[3] && $b[3] ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\tif ( $a[3] ) {\n+\t\t\treturn - 1;\n+\t\t}\n+\n+\t\tif ( $b[3] ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,427 +1,427 @@\n-\u003C?php\r\n-\r\n-class LP_Plugins_Helper {\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic static $transient_timeout = HOUR_IN_SECONDS;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $plugins = array(\r\n-\t\t'installed' => false,\r\n-\t\t'free'      => false,\r\n-\t\t'premium'   => false,\r\n-\t);\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Background_Query_Items\r\n-\t *\u002F\r\n-\tprotected static $_background_query_items = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $themes = array(\r\n-\t\t'education' => false,\r\n-\t\t'other'     => false,\r\n-\t);\r\n-\r\n-\tpublic static function require_plugins_api() {\r\n-\t\tglobal $pagenow;\r\n-\r\n-\t\tif ( ! function_exists( 'plugins_api' ) && 'plugin-install.php' !== $pagenow ) {\r\n-\t\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all add-ons for LearnPress has installed.\r\n-\t * Identify a plugin is an add-on if it is already existing a tag 'learnpress' inside\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function get_plugins( $type = '' ) {\r\n-\t\tself::require_plugins_api();\r\n-\t\t$plugins = array();\r\n-\r\n-\t\tif ( ! function_exists( 'get_plugins' ) ) {\r\n-\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Fplugin.php';\r\n-\t\t}\r\n-\t\t\u002F*\r\n-\t\t * Delete cache so hook for extra plugin headers works\r\n-\t\t *\u002F\r\n-\t\t$all_plugins = get_plugins();\r\n-\r\n-\t\t\u002F\u002F If there is no plugin on our site.\r\n-\t\tif ( ! $all_plugins ) {\r\n-\t\t\treturn array_key_exists( $type, self::$plugins ) ? self::$plugins[ $type ] : self::$plugins;\r\n-\t\t}\r\n-\r\n-\t\t$wp_plugins        = self::get_plugins_from_wp();\r\n-\t\t$premium_plugins   = self::get_premium_plugins();\r\n-\t\t$wp_installed      = array();\r\n-\t\t$premium_installed = array();\r\n-\r\n-\t\t\u002F\u002F learn_press_debug( wp_list_pluck( $wp_plugins, 'name' ) );\r\n-\t\tforeach ( $all_plugins as $plugin_file => $plugin_data ) {\r\n-\r\n-\t\t\t\u002F\u002F If there is a tag\r\n-\t\t\tif ( empty( $plugin_data['Tags'] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If there is a tag named 'learnpress'\r\n-\t\t\t$tags = ( preg_split( '\u002F\\s*,\\s*\u002F', $plugin_data['Tags'] ) );\r\n-\t\t\tif ( ! in_array( 'learnpress', $tags ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$plugin_slug = dirname( $plugin_file );\r\n-\r\n-\t\t\tif ( isset( $wp_plugins[ $plugin_file ] ) ) {\r\n-\t\t\t\t$plugins[ $plugin_file ]           = (array) $wp_plugins[ $plugin_file ];\r\n-\t\t\t\t$plugins[ $plugin_file ]['source'] = 'wp';\r\n-\r\n-\t\t\t\t$wp_installed[ $plugin_file ] = true;\r\n-\t\t\t} elseif ( isset( $premium_plugins[ $plugin_file ] ) ) {\r\n-\t\t\t\t$plugins[ $plugin_file ]           = (array) $premium_plugins[ $plugin_file ];\r\n-\t\t\t\t$plugins[ $plugin_file ]['source'] = 'tp';\r\n-\t\t\t\t$premium_installed[ $plugin_file ] = true;\r\n-\t\t\t} else {\r\n-\t\t\t\t$plugin_data             = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, false, true );\r\n-\t\t\t\t$plugins[ $plugin_file ] = array(\r\n-\t\t\t\t\t'name'              => $plugin_data['Name'],\r\n-\t\t\t\t\t'slug'              => $plugin_slug,\r\n-\t\t\t\t\t'version'           => $plugin_data['Version'],\r\n-\t\t\t\t\t'author'            => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $plugin_data['AuthorURI'], $plugin_data['Author'] ),\r\n-\t\t\t\t\t'author_profile'    => '',\r\n-\t\t\t\t\t'contributors'      => array(),\r\n-\t\t\t\t\t'homepage'          => $plugin_data['PluginURI'],\r\n-\t\t\t\t\t'short_description' => $plugin_data['Description'],\r\n-\t\t\t\t\t'icons'             => self::get_add_on_icons( $plugin_data, $plugin_file ),\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( ! empty( $plugin_data['Requires at least'] ) ) {\r\n-\t\t\t\t\t$plugins[ $plugin_file ]['requires'] = $plugin_data['Requires at least'];\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! empty( $plugin_data['Tested up to'] ) ) {\r\n-\t\t\t\t\t$plugins[ $plugin_file ]['tested'] = $plugin_data['Tested up to'];\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! empty( $plugin_data['Last updated'] ) ) {\r\n-\t\t\t\t\t$plugins[ $plugin_file ]['last_updated'] = $plugin_data['Last updated'];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tself::$plugins['installed'] = $plugins;\r\n-\r\n-\t\tif ( is_array( $wp_plugins ) ) {\r\n-\t\t\tself::$plugins['free'] = array_diff_key( $wp_plugins, (array) $wp_installed );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_array( $premium_plugins ) ) {\r\n-\t\t\tself::$plugins['premium'] = array_diff_key( $premium_plugins, (array) $premium_installed );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort plugins\r\n-\t\tself::_sort_plugins();\r\n-\r\n-\t\treturn array_key_exists( $type, self::$plugins ) ? self::$plugins[ $type ] : self::$plugins;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query the list of add-ons from wordpress.org with keyword 'learnpress'\r\n-\t * This requires have a keyword named 'learnpress' in plugin header Tags\r\n-\t *\r\n-\t * @param array\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function get_plugins_from_wp( $args = null ) {\r\n-\t\treturn LP_Background_Query_Items::instance()->get_plugins_from_wp();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all premium addons from cache.\r\n-\t * If there is no addons, push an action to queue in order to\r\n-\t * trying query all addons from thimpress.com in next requesting.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function get_premium_plugins() {\r\n-\t\treturn LP_Background_Query_Items::instance()->get_plugins_from_tp();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get our related themes.\r\n-\t *\r\n-\t * @param string $type\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic static function get_related_themes( $type = '', $args = array() ) {\r\n-\t\t$themes = array();\r\n-\r\n-\t\tif ( self::$themes ) {\r\n-\t\t\t$themes = array_filter( self::$themes );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $themes ) {\r\n-\t\t\tself::$themes = LP_Background_Query_Items::instance()->get_related_themes();\r\n-\t\t}\r\n-\r\n-\t\tif ( $type && self::$themes && array_key_exists( $type, self::$themes ) ) {\r\n-\t\t\t$themes = self::$themes[ $type ];\r\n-\t\t\t$args   = wp_parse_args( $args, array( 'include' => '' ) );\r\n-\r\n-\t\t\tif ( $themes && $args['include'] ) {\r\n-\t\t\t\t$search_results = array();\r\n-\t\t\t\tforeach ( $themes as $theme ) {\r\n-\t\t\t\t\tif ( in_array( $theme['id'], $args['include'] ) ) {\r\n-\t\t\t\t\t\t$search_results[] = $theme;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$themes = $search_results;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$themes = self::$themes;\r\n-\t\t}\r\n-\r\n-\t\treturn $themes;\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * Count themes.\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function count_themes( $type = '' ) {\r\n-\t\t$count  = 0;\r\n-\t\t$themes = self::get_related_themes();\r\n-\r\n-\t\tif ( $themes ) {\r\n-\t\t\tif ( array_key_exists( $type, $themes ) ) {\r\n-\t\t\t\t$count = ! empty( $themes[ $type ] ) ? sizeof( $themes[ $type ] ) : 0;\r\n-\t\t\t} else {\r\n-\t\t\t\tforeach ( $themes as $k => $v ) {\r\n-\t\t\t\t\t$count += ! empty( $v ) ? sizeof( $v ) : 0;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $count;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get action links of a plugin.\r\n-\t *\r\n-\t * @param object $plugin\r\n-\t * @param string $file\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_add_on_action_link( $plugin, $file ) {\r\n-\t\t$action_links = array();\r\n-\t\tif ( ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) ) {\r\n-\t\t\t$name = '';\r\n-\t\t\t\u002F\u002F action links for publish add-ons\r\n-\t\t\tif ( ! empty( $plugin['source'] ) && $plugin['source'] == 'wp' ) {\r\n-\t\t\t\t$status = install_plugin_install_status( $plugin );\r\n-\t\t\t\tswitch ( $status['status'] ) {\r\n-\t\t\t\t\tcase 'install':\r\n-\t\t\t\t\t\tif ( $status['url'] ) {\r\n-\t\t\t\t\t\t\t\u002F* translators: 1: Plugin name and version. *\u002F\r\n-\t\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"install-now button\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $status['url'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Install %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\" data-success=\"Installed\">\u003Cspan>' . __( 'Install Now' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'update_available':\r\n-\t\t\t\t\t\tif ( $status['url'] ) {\r\n-\t\t\t\t\t\t\t\u002F* translators: 1: Plugin name and version *\u002F\r\n-\t\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"update-now button\" data-plugin=\"' . esc_attr( $status['file'] ) . '\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $status['url'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Update %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Update Now' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( learn_press_is_plugin_install( $file ) ) {\r\n-\t\t\t\t\tif ( is_plugin_active( $file ) ) {\r\n-\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button disable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Disable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Disable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button enable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Enable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Enable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F action links for premium add-ons installed\r\n-\t\t\t\tif ( learn_press_is_plugin_install( $file ) ) {\r\n-\t\t\t\t\tif ( is_plugin_active( $file ) ) {\r\n-\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button disable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Disable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Disable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button enable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Enable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Enable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F buy now button for premium add-ons\r\n-\t\t\t\t\tif ( isset( $plugin['permarklink'] ) ) {\r\n-\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"buy-now button\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $plugin['permarklink'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Buy %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">' . __( 'Buy Now', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $action_links;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $icons\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_add_on_icon( $icons ) {\r\n-\t\t$icon = '';\r\n-\t\tif ( ! empty( $icons['2x'] ) ) {\r\n-\t\t\t$icon = $icons['2x'];\r\n-\t\t} elseif ( ! empty( $icons['1x'] ) ) {\r\n-\t\t\t$icon = $icons['1x'];\r\n-\t\t} else {\r\n-\t\t\t$icon = LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficon-128x128.png';\r\n-\t\t}\r\n-\r\n-\t\treturn $icon;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get plugin icon.\r\n-\t *\r\n-\t * @param object $plugin_data\r\n-\t * @param string $plugin_file\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_add_on_icons( $plugin_data, $plugin_file ) {\r\n-\t\t$plugin_path = ABSPATH . basename( WP_CONTENT_DIR ) . '\u002Fplugins\u002F' . $plugin_file;\r\n-\t\t$icon_path   = dirname( $plugin_path ) . '\u002Fassets\u002Fimages';\r\n-\t\t$icons       = array(\r\n-\t\t\t'2x' => '',\r\n-\t\t\t'1x' => '',\r\n-\t\t);\r\n-\r\n-\t\t$icons_tmp = array(\r\n-\t\t\t'2x' => 'icon-256x256',\r\n-\t\t\t'1x' => 'icon-128x128',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $icons_tmp as $s => $name ) {\r\n-\t\t\tforeach ( array( 'png', 'svg' ) as $t ) {\r\n-\t\t\t\tif ( file_exists( $icon_path . \"\u002F{$name}.{$t}\" ) ) {\r\n-\t\t\t\t\t$icons[ $s ] = plugins_url( '\u002F', $plugin_path ) . \"assets\u002Fimages\u002F{$name}.{$t}\";\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $icons;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count plugins.\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function count_plugins( $type = '' ) {\r\n-\t\t$plugins = self::get_plugins();\r\n-\t\tif ( $type === 'installed' ) {\r\n-\t\t\treturn ! empty( $plugins['installed'] ) ? sizeof( $plugins['installed'] ) : 0;\r\n-\t\t} else {\r\n-\t\t\t$wp_plugins = ! empty( $plugins['free'] ) ? sizeof( $plugins['free'] ) : 0;\r\n-\t\t\t$tp_plugins = ! empty( $plugins['premium'] ) ? sizeof( $plugins['premium'] ) : 0;\r\n-\r\n-\t\t\treturn $wp_plugins + $tp_plugins;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Filter plugin if it slug is starts with 'learnpress'\r\n-\t *\r\n-\t * @param object $plugin\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function _filter_plugin( $plugin ) {\r\n-\t\t$slug = '';\r\n-\t\tif ( $plugin ) {\r\n-\t\t\t$slug = is_array( $plugin ) ? $plugin['slug'] : $plugin->slug;\r\n-\t\t}\r\n-\r\n-\t\treturn $slug && preg_match( '!^learnpress-.*!', $slug );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sort plugins.\r\n-\t *\u002F\r\n-\tpublic static function _sort_plugins() {\r\n-\t\tforeach ( self::$plugins as $k => $plugin ) {\r\n-\t\t\tif ( is_array( $plugin ) ) {\r\n-\t\t\t\tksort( $plugin );\r\n-\t\t\t\tself::$plugins[ $k ] = $plugin;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all slugs of plugins have installed on site\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_installed_plugin_slugs() {\r\n-\t\t$slugs = array();\r\n-\r\n-\t\t$plugin_info = get_site_transient( 'update_plugins' );\r\n-\t\tif ( isset( $plugin_info->no_update ) ) {\r\n-\t\t\tforeach ( $plugin_info->no_update as $plugin ) {\r\n-\t\t\t\t$slugs[] = $plugin->slug;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $plugin_info->response ) ) {\r\n-\t\t\tforeach ( $plugin_info->response as $plugin ) {\r\n-\t\t\t\t$slugs[] = $plugin->slug;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $slugs;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register extra headers for our plugins.\r\n-\t *\r\n-\t * @param $headers\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function add_on_header( $headers ) {\r\n-\t\t$headers['Tags']              = 'Tags';\r\n-\t\t$headers['Requires at least'] = 'Requires at least';\r\n-\t\t$headers['Tested up to']      = 'Tested up to';\r\n-\t\t$headers['Last updated']      = 'Last updated';\r\n-\r\n-\t\treturn $headers;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Fixed issue addons page doesn't show installed addons.\r\n- *\r\n- * @since 3.2.4\r\n- *\u002F\r\n-add_filter( 'extra_plugin_headers', array( 'LP_Plugins_Helper', 'add_on_header' ) );\r\n-\r\n-\u002F\u002F Init hooks, etc...\r\n-\u002F\u002F add_action( 'init', array( 'LP_Plugins_Helper', 'init' ) );\r\n+\u003C?php\n+\n+class LP_Plugins_Helper {\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic static $transient_timeout = HOUR_IN_SECONDS;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $plugins = array(\n+\t\t'installed' => false,\n+\t\t'free'      => false,\n+\t\t'premium'   => false,\n+\t);\n+\n+\t\u002F**\n+\t * @var LP_Background_Query_Items\n+\t *\u002F\n+\tprotected static $_background_query_items = null;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $themes = array(\n+\t\t'education' => false,\n+\t\t'other'     => false,\n+\t);\n+\n+\tpublic static function require_plugins_api() {\n+\t\tglobal $pagenow;\n+\n+\t\tif ( ! function_exists( 'plugins_api' ) && 'plugin-install.php' !== $pagenow ) {\n+\t\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get all add-ons for LearnPress has installed.\n+\t * Identify a plugin is an add-on if it is already existing a tag 'learnpress' inside\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function get_plugins( $type = '' ) {\n+\t\tself::require_plugins_api();\n+\t\t$plugins = array();\n+\n+\t\tif ( ! function_exists( 'get_plugins' ) ) {\n+\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Fplugin.php';\n+\t\t}\n+\t\t\u002F*\n+\t\t * Delete cache so hook for extra plugin headers works\n+\t\t *\u002F\n+\t\t$all_plugins = get_plugins();\n+\n+\t\t\u002F\u002F If there is no plugin on our site.\n+\t\tif ( ! $all_plugins ) {\n+\t\t\treturn array_key_exists( $type, self::$plugins ) ? self::$plugins[ $type ] : self::$plugins;\n+\t\t}\n+\n+\t\t$wp_plugins        = self::get_plugins_from_wp();\n+\t\t$premium_plugins   = self::get_premium_plugins();\n+\t\t$wp_installed      = array();\n+\t\t$premium_installed = array();\n+\n+\t\t\u002F\u002F learn_press_debug( wp_list_pluck( $wp_plugins, 'name' ) );\n+\t\tforeach ( $all_plugins as $plugin_file => $plugin_data ) {\n+\n+\t\t\t\u002F\u002F If there is a tag\n+\t\t\tif ( empty( $plugin_data['Tags'] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If there is a tag named 'learnpress'\n+\t\t\t$tags = ( preg_split( '\u002F\\s*,\\s*\u002F', $plugin_data['Tags'] ) );\n+\t\t\tif ( ! in_array( 'learnpress', $tags ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$plugin_slug = dirname( $plugin_file );\n+\n+\t\t\tif ( isset( $wp_plugins[ $plugin_file ] ) ) {\n+\t\t\t\t$plugins[ $plugin_file ]           = (array) $wp_plugins[ $plugin_file ];\n+\t\t\t\t$plugins[ $plugin_file ]['source'] = 'wp';\n+\n+\t\t\t\t$wp_installed[ $plugin_file ] = true;\n+\t\t\t} elseif ( isset( $premium_plugins[ $plugin_file ] ) ) {\n+\t\t\t\t$plugins[ $plugin_file ]           = (array) $premium_plugins[ $plugin_file ];\n+\t\t\t\t$plugins[ $plugin_file ]['source'] = 'tp';\n+\t\t\t\t$premium_installed[ $plugin_file ] = true;\n+\t\t\t} else {\n+\t\t\t\t$plugin_data             = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, false, true );\n+\t\t\t\t$plugins[ $plugin_file ] = array(\n+\t\t\t\t\t'name'              => $plugin_data['Name'],\n+\t\t\t\t\t'slug'              => $plugin_slug,\n+\t\t\t\t\t'version'           => $plugin_data['Version'],\n+\t\t\t\t\t'author'            => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $plugin_data['AuthorURI'], $plugin_data['Author'] ),\n+\t\t\t\t\t'author_profile'    => '',\n+\t\t\t\t\t'contributors'      => array(),\n+\t\t\t\t\t'homepage'          => $plugin_data['PluginURI'],\n+\t\t\t\t\t'short_description' => $plugin_data['Description'],\n+\t\t\t\t\t'icons'             => self::get_add_on_icons( $plugin_data, $plugin_file ),\n+\t\t\t\t);\n+\t\t\t\tif ( ! empty( $plugin_data['Requires at least'] ) ) {\n+\t\t\t\t\t$plugins[ $plugin_file ]['requires'] = $plugin_data['Requires at least'];\n+\t\t\t\t}\n+\t\t\t\tif ( ! empty( $plugin_data['Tested up to'] ) ) {\n+\t\t\t\t\t$plugins[ $plugin_file ]['tested'] = $plugin_data['Tested up to'];\n+\t\t\t\t}\n+\t\t\t\tif ( ! empty( $plugin_data['Last updated'] ) ) {\n+\t\t\t\t\t$plugins[ $plugin_file ]['last_updated'] = $plugin_data['Last updated'];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tself::$plugins['installed'] = $plugins;\n+\n+\t\tif ( is_array( $wp_plugins ) ) {\n+\t\t\tself::$plugins['free'] = array_diff_key( $wp_plugins, (array) $wp_installed );\n+\t\t}\n+\n+\t\tif ( is_array( $premium_plugins ) ) {\n+\t\t\tself::$plugins['premium'] = array_diff_key( $premium_plugins, (array) $premium_installed );\n+\t\t}\n+\n+\t\t\u002F\u002F Sort plugins\n+\t\tself::_sort_plugins();\n+\n+\t\treturn array_key_exists( $type, self::$plugins ) ? self::$plugins[ $type ] : self::$plugins;\n+\t}\n+\n+\t\u002F**\n+\t * Query the list of add-ons from wordpress.org with keyword 'learnpress'\n+\t * This requires have a keyword named 'learnpress' in plugin header Tags\n+\t *\n+\t * @param array\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function get_plugins_from_wp( $args = null ) {\n+\t\treturn LP_Background_Query_Items::instance()->get_plugins_from_wp();\n+\t}\n+\n+\t\u002F**\n+\t * Get all premium addons from cache.\n+\t * If there is no addons, push an action to queue in order to\n+\t * trying query all addons from thimpress.com in next requesting.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function get_premium_plugins() {\n+\t\treturn LP_Background_Query_Items::instance()->get_plugins_from_tp();\n+\t}\n+\n+\t\u002F**\n+\t * Get our related themes.\n+\t *\n+\t * @param string $type\n+\t * @param array $args\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic static function get_related_themes( $type = '', $args = array() ) {\n+\t\t$themes = array();\n+\n+\t\tif ( self::$themes ) {\n+\t\t\t$themes = array_filter( self::$themes );\n+\t\t}\n+\n+\t\tif ( ! $themes ) {\n+\t\t\tself::$themes = LP_Background_Query_Items::instance()->get_related_themes();\n+\t\t}\n+\n+\t\tif ( $type && self::$themes && array_key_exists( $type, self::$themes ) ) {\n+\t\t\t$themes = self::$themes[ $type ];\n+\t\t\t$args   = wp_parse_args( $args, array( 'include' => '' ) );\n+\n+\t\t\tif ( $themes && $args['include'] ) {\n+\t\t\t\t$search_results = array();\n+\t\t\t\tforeach ( $themes as $theme ) {\n+\t\t\t\t\tif ( in_array( $theme['id'], $args['include'] ) ) {\n+\t\t\t\t\t\t$search_results[] = $theme;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$themes = $search_results;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$themes = self::$themes;\n+\t\t}\n+\n+\t\treturn $themes;\n+\t}\n+\n+\n+\t\u002F**\n+\t * Count themes.\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function count_themes( $type = '' ) {\n+\t\t$count  = 0;\n+\t\t$themes = self::get_related_themes();\n+\n+\t\tif ( $themes ) {\n+\t\t\tif ( array_key_exists( $type, $themes ) ) {\n+\t\t\t\t$count = ! empty( $themes[ $type ] ) ? sizeof( $themes[ $type ] ) : 0;\n+\t\t\t} else {\n+\t\t\t\tforeach ( $themes as $k => $v ) {\n+\t\t\t\t\t$count += ! empty( $v ) ? sizeof( $v ) : 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $count;\n+\t}\n+\n+\t\u002F**\n+\t * Get action links of a plugin.\n+\t *\n+\t * @param object $plugin\n+\t * @param string $file\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_add_on_action_link( $plugin, $file ) {\n+\t\t$action_links = array();\n+\t\tif ( ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) ) {\n+\t\t\t$name = '';\n+\t\t\t\u002F\u002F action links for publish add-ons\n+\t\t\tif ( ! empty( $plugin['source'] ) && $plugin['source'] == 'wp' ) {\n+\t\t\t\t$status = install_plugin_install_status( $plugin );\n+\t\t\t\tswitch ( $status['status'] ) {\n+\t\t\t\t\tcase 'install':\n+\t\t\t\t\t\tif ( $status['url'] ) {\n+\t\t\t\t\t\t\t\u002F* translators: 1: Plugin name and version. *\u002F\n+\t\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"install-now button\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $status['url'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Install %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\" data-success=\"Installed\">\u003Cspan>' . __( 'Install Now' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'update_available':\n+\t\t\t\t\t\tif ( $status['url'] ) {\n+\t\t\t\t\t\t\t\u002F* translators: 1: Plugin name and version *\u002F\n+\t\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"update-now button\" data-plugin=\"' . esc_attr( $status['file'] ) . '\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $status['url'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Update %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Update Now' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\tif ( learn_press_is_plugin_install( $file ) ) {\n+\t\t\t\t\tif ( is_plugin_active( $file ) ) {\n+\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button disable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Disable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Disable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button enable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Enable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Enable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F action links for premium add-ons installed\n+\t\t\t\tif ( learn_press_is_plugin_install( $file ) ) {\n+\t\t\t\t\tif ( is_plugin_active( $file ) ) {\n+\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button disable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Disable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Disable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"button enable-now\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( wp_nonce_url( 'plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file ) ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Enable %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">\u003Cspan>' . __( 'Enable Now', 'learnpress' ) . '\u003C\u002Fspan>\u003C\u002Fa>';\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F buy now button for premium add-ons\n+\t\t\t\t\tif ( isset( $plugin['permarklink'] ) ) {\n+\t\t\t\t\t\t$action_links[] = '\u003Ca class=\"buy-now button\" data-slug=\"' . esc_attr( $plugin['slug'] ) . '\" href=\"' . esc_url_raw( $plugin['permarklink'] ) . '\" aria-label=\"' . esc_attr( sprintf( __( 'Buy %s now', 'learnpress' ), $name ) ) . '\" data-name=\"' . esc_attr( $name ) . '\">' . __( 'Buy Now', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $action_links;\n+\t}\n+\n+\t\u002F**\n+\t * @param $icons\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_add_on_icon( $icons ) {\n+\t\t$icon = '';\n+\t\tif ( ! empty( $icons['2x'] ) ) {\n+\t\t\t$icon = $icons['2x'];\n+\t\t} elseif ( ! empty( $icons['1x'] ) ) {\n+\t\t\t$icon = $icons['1x'];\n+\t\t} else {\n+\t\t\t$icon = LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficon-128x128.png';\n+\t\t}\n+\n+\t\treturn $icon;\n+\t}\n+\n+\t\u002F**\n+\t * Get plugin icon.\n+\t *\n+\t * @param object $plugin_data\n+\t * @param string $plugin_file\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_add_on_icons( $plugin_data, $plugin_file ) {\n+\t\t$plugin_path = ABSPATH . basename( WP_CONTENT_DIR ) . '\u002Fplugins\u002F' . $plugin_file;\n+\t\t$icon_path   = dirname( $plugin_path ) . '\u002Fassets\u002Fimages';\n+\t\t$icons       = array(\n+\t\t\t'2x' => '',\n+\t\t\t'1x' => '',\n+\t\t);\n+\n+\t\t$icons_tmp = array(\n+\t\t\t'2x' => 'icon-256x256',\n+\t\t\t'1x' => 'icon-128x128',\n+\t\t);\n+\n+\t\tforeach ( $icons_tmp as $s => $name ) {\n+\t\t\tforeach ( array( 'png', 'svg' ) as $t ) {\n+\t\t\t\tif ( file_exists( $icon_path . \"\u002F{$name}.{$t}\" ) ) {\n+\t\t\t\t\t$icons[ $s ] = plugins_url( '\u002F', $plugin_path ) . \"assets\u002Fimages\u002F{$name}.{$t}\";\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $icons;\n+\t}\n+\n+\t\u002F**\n+\t * Count plugins.\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function count_plugins( $type = '' ) {\n+\t\t$plugins = self::get_plugins();\n+\t\tif ( $type === 'installed' ) {\n+\t\t\treturn ! empty( $plugins['installed'] ) ? sizeof( $plugins['installed'] ) : 0;\n+\t\t} else {\n+\t\t\t$wp_plugins = ! empty( $plugins['free'] ) ? sizeof( $plugins['free'] ) : 0;\n+\t\t\t$tp_plugins = ! empty( $plugins['premium'] ) ? sizeof( $plugins['premium'] ) : 0;\n+\n+\t\t\treturn $wp_plugins + $tp_plugins;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Filter plugin if it slug is starts with 'learnpress'\n+\t *\n+\t * @param object $plugin\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function _filter_plugin( $plugin ) {\n+\t\t$slug = '';\n+\t\tif ( $plugin ) {\n+\t\t\t$slug = is_array( $plugin ) ? $plugin['slug'] : $plugin->slug;\n+\t\t}\n+\n+\t\treturn $slug && preg_match( '!^learnpress-.*!', $slug );\n+\t}\n+\n+\t\u002F**\n+\t * Sort plugins.\n+\t *\u002F\n+\tpublic static function _sort_plugins() {\n+\t\tforeach ( self::$plugins as $k => $plugin ) {\n+\t\t\tif ( is_array( $plugin ) ) {\n+\t\t\t\tksort( $plugin );\n+\t\t\t\tself::$plugins[ $k ] = $plugin;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get all slugs of plugins have installed on site\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_installed_plugin_slugs() {\n+\t\t$slugs = array();\n+\n+\t\t$plugin_info = get_site_transient( 'update_plugins' );\n+\t\tif ( isset( $plugin_info->no_update ) ) {\n+\t\t\tforeach ( $plugin_info->no_update as $plugin ) {\n+\t\t\t\t$slugs[] = $plugin->slug;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( isset( $plugin_info->response ) ) {\n+\t\t\tforeach ( $plugin_info->response as $plugin ) {\n+\t\t\t\t$slugs[] = $plugin->slug;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $slugs;\n+\t}\n+\n+\t\u002F**\n+\t * Register extra headers for our plugins.\n+\t *\n+\t * @param $headers\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function add_on_header( $headers ) {\n+\t\t$headers['Tags']              = 'Tags';\n+\t\t$headers['Requires at least'] = 'Requires at least';\n+\t\t$headers['Tested up to']      = 'Tested up to';\n+\t\t$headers['Last updated']      = 'Last updated';\n+\n+\t\treturn $headers;\n+\t}\n+}\n+\n+\u002F**\n+ * Fixed issue addons page doesn't show installed addons.\n+ *\n+ * @since 3.2.4\n+ *\u002F\n+add_filter( 'extra_plugin_headers', array( 'LP_Plugins_Helper', 'add_on_header' ) );\n+\n+\u002F\u002F Init hooks, etc...\n+\u002F\u002F add_action( 'init', array( 'LP_Plugins_Helper', 'init' ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Flp-admin-actions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Flp-admin-actions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Flp-admin-actions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Flp-admin-actions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,301 +1,301 @@\n-\u003C?php\r\n-\u002F**\r\n- * Defines the functions which called by hooks\r\n- *\u002F\r\n-\r\n-\u002F***************************************\u002F\r\n-\r\n-\u002F**\r\n- * Filter post types the user can access in admin\r\n- *\r\n- * @param $query\r\n- * @editor tungnx\r\n- * @modify 4.1.4 - comment - not use make redundancy\r\n- *\u002F\r\n-\u002F*function _learn_press_set_user_items( $query ) {\r\n-\tglobal $post_type, $pagenow, $wpdb;\r\n-\r\n-\tif ( ! function_exists( 'wp_get_current_user' ) ) {\r\n-\t\tinclude( ABSPATH . 'wp-includes\u002Fpluggable.php' );\r\n-\t}\r\n-\r\n-\tif ( ! did_action( 'plugin_loaded' ) || current_user_can( 'manage_options' ) || ! current_user_can( LP_TEACHER_ROLE ) || ! is_admin() || ( $pagenow != 'edit.php' ) ) {\r\n-\t\treturn $query;\r\n-\t}\r\n-\r\n-\tif ( ! in_array(\r\n-\t\t$post_type,\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Ffilter-user-access-types',\r\n-\t\t\tarray(\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\tLP_LESSON_CPT,\r\n-\t\t\t\tLP_QUIZ_CPT,\r\n-\t\t\t\tLP_QUESTION_CPT,\r\n-\t\t\t)\r\n-\t\t)\r\n-\t) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$items = $wpdb->get_col(\r\n-\t\t$wpdb->prepare(\r\n-\t\t\t\"SELECT ID FROM $wpdb->posts\r\n-\t\t\t\t\tWHERE post_type = %s\r\n-\t\t\t\t\tAND post_author = %d\",\r\n-\t\t\t$post_type,\r\n-\t\t\tget_current_user_id()\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( count( $items ) == 0 ) {\r\n-\t\t$query->set( 'post_type', 'no-item-access' );\r\n-\t} else {\r\n-\t\t$query->set( 'post__in', $items );\r\n-\t}\r\n-\tadd_filter( 'views_edit-' . $post_type . '', '_learn_press_restrict_view_items', 10 );\r\n-}\r\n-\r\n-add_action( 'pre_get_posts', '_learn_press_set_user_items', 10 );*\u002F\r\n-\r\n-\u002F**\r\n- * Restrict user views\r\n- *\r\n- * @param $views\r\n- *\r\n- * @return mixed\r\n- * @editor tungnx\r\n- * @modify 4.1.4 - comment - not see use anywhere\r\n- *\u002F\r\n-\u002F*function _learn_press_restrict_view_items( $views ) {\r\n-\t$post_type = get_query_var( 'post_type' );\r\n-\t$new_views = array(\r\n-\t\t'all'     => __( 'All', 'learnpress' ),\r\n-\t\t'publish' => __( 'Published', 'learnpress' ),\r\n-\t\t'private' => __( 'Private', 'learnpress' ),\r\n-\t\t'pending' => __( 'Pending Review', 'learnpress' ),\r\n-\t\t'future'  => __( 'Scheduled', 'learnpress' ),\r\n-\t\t'draft'   => __( 'Draft', 'learnpress' ),\r\n-\t\t'trash'   => __( 'Trash', 'learnpress' ),\r\n-\t);\r\n-\r\n-\t$url = 'edit.php';\r\n-\r\n-\tforeach ( $new_views as $view => $name ) {\r\n-\t\t$query = array(\r\n-\t\t\t'post_type' => $post_type,\r\n-\t\t);\r\n-\t\tif ( $view == 'all' ) {\r\n-\t\t\t$query['all_posts'] = 1;\r\n-\t\t\t$class              = ( get_query_var( 'all_posts' ) == 1 || ( get_query_var( 'post_status' ) == '' && get_query_var( 'author' ) == '' ) ) ? ' class=\"current\"' : '';\r\n-\t\t} else {\r\n-\t\t\t$query['post_status'] = $view;\r\n-\t\t\t$class                = ( get_query_var( 'post_status' ) == $view ) ? ' class=\"current\"' : '';\r\n-\t\t}\r\n-\t\t$result = new WP_Query( $query );\r\n-\r\n-\t\tif ( $result->found_posts > 0 ) {\r\n-\t\t\t$views[ $view ] = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\"' . $class . '>' . $name . ' \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\tesc_url_raw( add_query_arg( $query, $url ) ),\r\n-\t\t\t\t$result->found_posts\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\tunset( $views[ $view ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tunset( $views['mine'] );\r\n-\r\n-\treturn $views;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Update permalink structure for course\r\n- *\u002F\r\n-\u002F\u002F function learn_press_update_permalink_structure() {\r\n-\u002F\u002F \tglobal $pagenow;\r\n-\r\n-\u002F\u002F \tif ( $pagenow != 'options-permalink.php' ) {\r\n-\u002F\u002F \t\treturn;\r\n-\u002F\u002F \t}\r\n-\r\n-\u002F\u002F \tif ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {\r\n-\u002F\u002F \t\treturn;\r\n-\u002F\u002F \t}\r\n-\r\n-\u002F\u002F \t$rewrite_prefix      = '';\r\n-\u002F\u002F \t$permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';\r\n-\r\n-\u002F\u002F \tif ( $permalink_structure ) {\r\n-\u002F\u002F \t\t$rewrite_prefix = array();\r\n-\u002F\u002F \t\t$segs           = explode( '\u002F', $permalink_structure );\r\n-\r\n-\u002F\u002F \t\tif ( sizeof( $segs ) ) {\r\n-\u002F\u002F \t\t\tforeach ( $segs as $seg ) {\r\n-\u002F\u002F \t\t\t\tif ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {\r\n-\u002F\u002F \t\t\t\t\tbreak;\r\n-\u002F\u002F \t\t\t\t}\r\n-\u002F\u002F \t\t\t\t$rewrite_prefix[] = $seg;\r\n-\u002F\u002F \t\t\t}\r\n-\u002F\u002F \t\t}\r\n-\r\n-\u002F\u002F \t\t$rewrite_prefix = array_filter( $rewrite_prefix );\r\n-\r\n-\u002F\u002F \t\tif ( sizeof( $rewrite_prefix ) ) {\r\n-\u002F\u002F \t\t\t$rewrite_prefix = join( '\u002F', $rewrite_prefix ) . '\u002F';\r\n-\u002F\u002F \t\t} else {\r\n-\u002F\u002F \t\t\t$rewrite_prefix = '';\r\n-\u002F\u002F \t\t}\r\n-\u002F\u002F \t}\r\n-\r\n-\u002F\u002F \tupdate_option( 'learn_press_permalink_structure', $rewrite_prefix );\r\n-\u002F\u002F }\r\n-\u002F\u002F add_action( 'init', 'learn_press_update_permalink_structure' );\r\n-\r\n-\u002F**\r\n- * Active Courses menu under LearnPress\r\n- * when user is editing course and course\r\n- * category.\r\n- *\u002F\r\n-function learn_press_active_course_menu() {\r\n-\t$post_type = LP_Request::get( 'post_type' );\r\n-\r\n-\tif ( ! $post_type ) {\r\n-\t\treturn;\r\n-\t}\r\n-\t?>\r\n-\r\n-\t\u003Cscript>\r\n-\t\tjQuery( function( $ ) {\r\n-\t\t\tvar $lpMainMenu = $( '#toplevel_page_learn_press' ),\r\n-\t\t\t\thref = 'edit.php?post_type=\u003C?php echo esc_js( $_GET['post_type'] ); ?>',\r\n-\t\t\t\t$current = $( 'a[href=\"' + href + '\"]', $lpMainMenu );\r\n-\r\n-\t\t\tif ( $current.length ) {\r\n-\t\t\t\t$current.addClass( 'current' );\r\n-\t\t\t\t$current.parent( 'li' ).addClass( 'current' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u003C?php if ( $post_type === LP_COURSE_CPT && LP_Request::get( 'taxonomy' ) === 'course_category' ) { ?>\r\n-\t\t\t\t$( 'body' ).removeClass( 'sticky-menu' );\r\n-\t\t\t\t$lpMainMenu.addClass( 'wp-has-current-submenu wp-menu-open' ).removeClass( 'wp-not-current-submenu' );\r\n-\t\t\t\t$lpMainMenu.children( 'a' ).addClass( 'wp-has-current-submenu wp-menu-open' ).removeClass( 'wp-not-current-submenu' );\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t});\r\n-\t\u003C\u002Fscript>\r\n-\r\n-\t\u003C?php\r\n-}\r\n-add_action( 'admin_footer', 'learn_press_active_course_menu' );\r\n-\r\n-\u002F*\r\n- * Display tabs related to course in admin when user\r\n- * viewing\u002Fediting course\u002Fcategory\u002Ftags.\r\n- *\u002F\r\n-function learn_press_admin_course_tabs() {\r\n-\tif ( ! is_admin() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$wp_screen = get_current_screen();\r\n-\r\n-\tif ( ! $wp_screen || 'edit-lp_course' !== $wp_screen->id ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$admin_tabs = apply_filters(\r\n-\t\t'learn_press_admin_tabs_info',\r\n-\t\tarray(\r\n-\t\t\t10 => array(\r\n-\t\t\t\t'link' => 'edit.php?post_type=lp_course',\r\n-\t\t\t\t'name' => esc_html__( 'Courses', 'learnpress' ),\r\n-\t\t\t\t'id'   => 'edit-lp_course',\r\n-\t\t\t),\r\n-\t\t\t20 => array(\r\n-\t\t\t\t'link' => 'edit-tags.php?taxonomy=course_category',\r\n-\t\t\t\t'name' => esc_html__( 'Categories', 'learnpress' ),\r\n-\t\t\t\t'id'   => 'edit-course_category',\r\n-\t\t\t),\r\n-\t\t\t30 => array(\r\n-\t\t\t\t'link' => 'edit-tags.php?taxonomy=course_tag',\r\n-\t\t\t\t'name' => esc_html__( 'Tags', 'learnpress' ),\r\n-\t\t\t\t'id'   => 'edit-course_tag',\r\n-\t\t\t),\r\n-\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tksort( $admin_tabs );\r\n-\t$tabs = array();\r\n-\r\n-\tforeach ( $admin_tabs as $key => $value ) {\r\n-\t\tarray_push( $tabs, $key );\r\n-\t}\r\n-\r\n-\t$pages = apply_filters(\r\n-\t\t'learn_press_admin_tabs_on_pages',\r\n-\t\tarray( 'edit-lp_course', 'edit-course_category', 'edit-course_tag', 'lp_course' )\r\n-\t);\r\n-\r\n-\t$admin_tabs_on_page = array();\r\n-\r\n-\tforeach ( $pages as $page ) {\r\n-\t\t$admin_tabs_on_page[ $page ] = $tabs;\r\n-\t}\r\n-\r\n-\t$current_page_id = get_current_screen()->id;\r\n-\t$current_user    = wp_get_current_user();\r\n-\r\n-\tif ( ! in_array( 'administrator', $current_user->roles ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( ! empty( $admin_tabs_on_page[ $current_page_id ] ) && count( $admin_tabs_on_page[ $current_page_id ] ) ) {\r\n-\r\n-\t\techo '\u003Ch2 class=\"nav-tab-wrapper lp-nav-tab-wrapper\">';\r\n-\r\n-\t\tforeach ( $admin_tabs_on_page[ $current_page_id ] as $admin_tab_id ) {\r\n-\t\t\t$class = ( $admin_tabs[ $admin_tab_id ]['id'] == $current_page_id ) ? 'nav-tab nav-tab-active' : 'nav-tab';\r\n-\t\t\t\u002F\u002F echo '\u003Ca href=\"' . admin_url( $admin_tabs[ $admin_tab_id ]['link'] ) . '\" class=\"' . $class . ' nav-tab-' . $admin_tabs[ $admin_tab_id ]['id'] . '\">' . $admin_tabs[ $admin_tab_id ]['name'] . '\u003C\u002Fa>';\r\n-\t\t\techo wp_kses(\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( $admin_tabs[ $admin_tab_id ]['link'] ),\r\n-\t\t\t\t\t$class . ' nav-tab-' . $admin_tabs[ $admin_tab_id ]['id'],\r\n-\t\t\t\t\t$admin_tabs[ $admin_tab_id ]['name']\r\n-\t\t\t\t),\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Fh2>';\r\n-\t}\r\n-}\r\n-add_action( 'all_admin_notices', 'learn_press_admin_course_tabs' );\r\n-\r\n-\u002F**\r\n- * Create some warning messages:\r\n- *  + LP Profile page is not setup\r\n- *  + LP Checkout page is not setup\r\n- *\u002F\r\n-if ( ! function_exists( 'lp_remove_admin_warning' ) ) {\r\n-\tfunction lp_remove_admin_warning() {\r\n-\t\tif ( isset( $_POST['action'] ) && $_POST['action'] === 'lp_remove_admin_warning' && isset( $_POST['name'] ) ) {\r\n-\t\t\tif ( empty( $transient_profile ) ) {\r\n-\t\t\t\tset_transient( $_POST['name'], true, 60 * 60 * 12 );\r\n-\t\t\t}\r\n-\r\n-\t\t\techo 'success';\r\n-\t\t\twp_die();\r\n-\r\n-\t\t}\r\n-\r\n-\t\techo 'error';\r\n-\t\twp_die();\r\n-\t}\r\n-}\r\n-\u002F\u002Fadd_action( 'wp_ajax_lp_remove_admin_warning', 'lp_remove_admin_warning' );\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Defines the functions which called by hooks\n+ *\u002F\n+\n+\u002F***************************************\u002F\n+\n+\u002F**\n+ * Filter post types the user can access in admin\n+ *\n+ * @param $query\n+ * @editor tungnx\n+ * @modify 4.1.4 - comment - not use make redundancy\n+ *\u002F\n+\u002F*function _learn_press_set_user_items( $query ) {\n+\tglobal $post_type, $pagenow, $wpdb;\n+\n+\tif ( ! function_exists( 'wp_get_current_user' ) ) {\n+\t\tinclude( ABSPATH . 'wp-includes\u002Fpluggable.php' );\n+\t}\n+\n+\tif ( ! did_action( 'plugin_loaded' ) || current_user_can( 'manage_options' ) || ! current_user_can( LP_TEACHER_ROLE ) || ! is_admin() || ( $pagenow != 'edit.php' ) ) {\n+\t\treturn $query;\n+\t}\n+\n+\tif ( ! in_array(\n+\t\t$post_type,\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Ffilter-user-access-types',\n+\t\t\tarray(\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\tLP_LESSON_CPT,\n+\t\t\t\tLP_QUIZ_CPT,\n+\t\t\t\tLP_QUESTION_CPT,\n+\t\t\t)\n+\t\t)\n+\t) ) {\n+\t\treturn;\n+\t}\n+\n+\t$items = $wpdb->get_col(\n+\t\t$wpdb->prepare(\n+\t\t\t\"SELECT ID FROM $wpdb->posts\n+\t\t\t\t\tWHERE post_type = %s\n+\t\t\t\t\tAND post_author = %d\",\n+\t\t\t$post_type,\n+\t\t\tget_current_user_id()\n+\t\t)\n+\t);\n+\n+\tif ( count( $items ) == 0 ) {\n+\t\t$query->set( 'post_type', 'no-item-access' );\n+\t} else {\n+\t\t$query->set( 'post__in', $items );\n+\t}\n+\tadd_filter( 'views_edit-' . $post_type . '', '_learn_press_restrict_view_items', 10 );\n+}\n+\n+add_action( 'pre_get_posts', '_learn_press_set_user_items', 10 );*\u002F\n+\n+\u002F**\n+ * Restrict user views\n+ *\n+ * @param $views\n+ *\n+ * @return mixed\n+ * @editor tungnx\n+ * @modify 4.1.4 - comment - not see use anywhere\n+ *\u002F\n+\u002F*function _learn_press_restrict_view_items( $views ) {\n+\t$post_type = get_query_var( 'post_type' );\n+\t$new_views = array(\n+\t\t'all'     => __( 'All', 'learnpress' ),\n+\t\t'publish' => __( 'Published', 'learnpress' ),\n+\t\t'private' => __( 'Private', 'learnpress' ),\n+\t\t'pending' => __( 'Pending Review', 'learnpress' ),\n+\t\t'future'  => __( 'Scheduled', 'learnpress' ),\n+\t\t'draft'   => __( 'Draft', 'learnpress' ),\n+\t\t'trash'   => __( 'Trash', 'learnpress' ),\n+\t);\n+\n+\t$url = 'edit.php';\n+\n+\tforeach ( $new_views as $view => $name ) {\n+\t\t$query = array(\n+\t\t\t'post_type' => $post_type,\n+\t\t);\n+\t\tif ( $view == 'all' ) {\n+\t\t\t$query['all_posts'] = 1;\n+\t\t\t$class              = ( get_query_var( 'all_posts' ) == 1 || ( get_query_var( 'post_status' ) == '' && get_query_var( 'author' ) == '' ) ) ? ' class=\"current\"' : '';\n+\t\t} else {\n+\t\t\t$query['post_status'] = $view;\n+\t\t\t$class                = ( get_query_var( 'post_status' ) == $view ) ? ' class=\"current\"' : '';\n+\t\t}\n+\t\t$result = new WP_Query( $query );\n+\n+\t\tif ( $result->found_posts > 0 ) {\n+\t\t\t$views[ $view ] = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\"' . $class . '>' . $name . ' \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\tesc_url_raw( add_query_arg( $query, $url ) ),\n+\t\t\t\t$result->found_posts\n+\t\t\t);\n+\t\t} else {\n+\t\t\tunset( $views[ $view ] );\n+\t\t}\n+\t}\n+\n+\tunset( $views['mine'] );\n+\n+\treturn $views;\n+}*\u002F\n+\n+\u002F**\n+ * Update permalink structure for course\n+ *\u002F\n+\u002F\u002F function learn_press_update_permalink_structure() {\n+\u002F\u002F \tglobal $pagenow;\n+\n+\u002F\u002F \tif ( $pagenow != 'options-permalink.php' ) {\n+\u002F\u002F \t\treturn;\n+\u002F\u002F \t}\n+\n+\u002F\u002F \tif ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {\n+\u002F\u002F \t\treturn;\n+\u002F\u002F \t}\n+\n+\u002F\u002F \t$rewrite_prefix      = '';\n+\u002F\u002F \t$permalink_structure = ! empty( $_REQUEST['permalink_structure'] ) ? $_REQUEST['permalink_structure'] : '';\n+\n+\u002F\u002F \tif ( $permalink_structure ) {\n+\u002F\u002F \t\t$rewrite_prefix = array();\n+\u002F\u002F \t\t$segs           = explode( '\u002F', $permalink_structure );\n+\n+\u002F\u002F \t\tif ( sizeof( $segs ) ) {\n+\u002F\u002F \t\t\tforeach ( $segs as $seg ) {\n+\u002F\u002F \t\t\t\tif ( strpos( $seg, '%' ) !== false || $seg == 'archives' ) {\n+\u002F\u002F \t\t\t\t\tbreak;\n+\u002F\u002F \t\t\t\t}\n+\u002F\u002F \t\t\t\t$rewrite_prefix[] = $seg;\n+\u002F\u002F \t\t\t}\n+\u002F\u002F \t\t}\n+\n+\u002F\u002F \t\t$rewrite_prefix = array_filter( $rewrite_prefix );\n+\n+\u002F\u002F \t\tif ( sizeof( $rewrite_prefix ) ) {\n+\u002F\u002F \t\t\t$rewrite_prefix = join( '\u002F', $rewrite_prefix ) . '\u002F';\n+\u002F\u002F \t\t} else {\n+\u002F\u002F \t\t\t$rewrite_prefix = '';\n+\u002F\u002F \t\t}\n+\u002F\u002F \t}\n+\n+\u002F\u002F \tupdate_option( 'learn_press_permalink_structure', $rewrite_prefix );\n+\u002F\u002F }\n+\u002F\u002F add_action( 'init', 'learn_press_update_permalink_structure' );\n+\n+\u002F**\n+ * Active Courses menu under LearnPress\n+ * when user is editing course and course\n+ * category.\n+ *\u002F\n+function learn_press_active_course_menu() {\n+\t$post_type = LP_Request::get( 'post_type' );\n+\n+\tif ( ! $post_type ) {\n+\t\treturn;\n+\t}\n+\t?>\n+\n+\t\u003Cscript>\n+\t\tjQuery( function( $ ) {\n+\t\t\tvar $lpMainMenu = $( '#toplevel_page_learn_press' ),\n+\t\t\t\thref = 'edit.php?post_type=\u003C?php echo esc_js( $_GET['post_type'] ); ?>',\n+\t\t\t\t$current = $( 'a[href=\"' + href + '\"]', $lpMainMenu );\n+\n+\t\t\tif ( $current.length ) {\n+\t\t\t\t$current.addClass( 'current' );\n+\t\t\t\t$current.parent( 'li' ).addClass( 'current' );\n+\t\t\t}\n+\n+\t\t\t\u003C?php if ( $post_type === LP_COURSE_CPT && LP_Request::get( 'taxonomy' ) === 'course_category' ) { ?>\n+\t\t\t\t$( 'body' ).removeClass( 'sticky-menu' );\n+\t\t\t\t$lpMainMenu.addClass( 'wp-has-current-submenu wp-menu-open' ).removeClass( 'wp-not-current-submenu' );\n+\t\t\t\t$lpMainMenu.children( 'a' ).addClass( 'wp-has-current-submenu wp-menu-open' ).removeClass( 'wp-not-current-submenu' );\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t\t?>\n+\t\t});\n+\t\u003C\u002Fscript>\n+\n+\t\u003C?php\n+}\n+add_action( 'admin_footer', 'learn_press_active_course_menu' );\n+\n+\u002F*\n+ * Display tabs related to course in admin when user\n+ * viewing\u002Fediting course\u002Fcategory\u002Ftags.\n+ *\u002F\n+function learn_press_admin_course_tabs() {\n+\tif ( ! is_admin() ) {\n+\t\treturn;\n+\t}\n+\n+\t$wp_screen = get_current_screen();\n+\n+\tif ( ! $wp_screen || 'edit-lp_course' !== $wp_screen->id ) {\n+\t\treturn;\n+\t}\n+\n+\t$admin_tabs = apply_filters(\n+\t\t'learn_press_admin_tabs_info',\n+\t\tarray(\n+\t\t\t10 => array(\n+\t\t\t\t'link' => 'edit.php?post_type=lp_course',\n+\t\t\t\t'name' => esc_html__( 'Courses', 'learnpress' ),\n+\t\t\t\t'id'   => 'edit-lp_course',\n+\t\t\t),\n+\t\t\t20 => array(\n+\t\t\t\t'link' => 'edit-tags.php?taxonomy=course_category',\n+\t\t\t\t'name' => esc_html__( 'Categories', 'learnpress' ),\n+\t\t\t\t'id'   => 'edit-course_category',\n+\t\t\t),\n+\t\t\t30 => array(\n+\t\t\t\t'link' => 'edit-tags.php?taxonomy=course_tag',\n+\t\t\t\t'name' => esc_html__( 'Tags', 'learnpress' ),\n+\t\t\t\t'id'   => 'edit-course_tag',\n+\t\t\t),\n+\n+\t\t)\n+\t);\n+\n+\tksort( $admin_tabs );\n+\t$tabs = array();\n+\n+\tforeach ( $admin_tabs as $key => $value ) {\n+\t\tarray_push( $tabs, $key );\n+\t}\n+\n+\t$pages = apply_filters(\n+\t\t'learn_press_admin_tabs_on_pages',\n+\t\tarray( 'edit-lp_course', 'edit-course_category', 'edit-course_tag', 'lp_course' )\n+\t);\n+\n+\t$admin_tabs_on_page = array();\n+\n+\tforeach ( $pages as $page ) {\n+\t\t$admin_tabs_on_page[ $page ] = $tabs;\n+\t}\n+\n+\t$current_page_id = get_current_screen()->id;\n+\t$current_user    = wp_get_current_user();\n+\n+\tif ( ! in_array( 'administrator', $current_user->roles ) ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( ! empty( $admin_tabs_on_page[ $current_page_id ] ) && count( $admin_tabs_on_page[ $current_page_id ] ) ) {\n+\n+\t\techo '\u003Ch2 class=\"nav-tab-wrapper lp-nav-tab-wrapper\">';\n+\n+\t\tforeach ( $admin_tabs_on_page[ $current_page_id ] as $admin_tab_id ) {\n+\t\t\t$class = ( $admin_tabs[ $admin_tab_id ]['id'] == $current_page_id ) ? 'nav-tab nav-tab-active' : 'nav-tab';\n+\t\t\t\u002F\u002F echo '\u003Ca href=\"' . admin_url( $admin_tabs[ $admin_tab_id ]['link'] ) . '\" class=\"' . $class . ' nav-tab-' . $admin_tabs[ $admin_tab_id ]['id'] . '\">' . $admin_tabs[ $admin_tab_id ]['name'] . '\u003C\u002Fa>';\n+\t\t\techo wp_kses(\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( $admin_tabs[ $admin_tab_id ]['link'] ),\n+\t\t\t\t\t$class . ' nav-tab-' . $admin_tabs[ $admin_tab_id ]['id'],\n+\t\t\t\t\t$admin_tabs[ $admin_tab_id ]['name']\n+\t\t\t\t),\n+\t\t\t\ttrue\n+\t\t\t);\n+\t\t}\n+\n+\t\techo '\u003C\u002Fh2>';\n+\t}\n+}\n+add_action( 'all_admin_notices', 'learn_press_admin_course_tabs' );\n+\n+\u002F**\n+ * Create some warning messages:\n+ *  + LP Profile page is not setup\n+ *  + LP Checkout page is not setup\n+ *\u002F\n+if ( ! function_exists( 'lp_remove_admin_warning' ) ) {\n+\tfunction lp_remove_admin_warning() {\n+\t\tif ( isset( $_POST['action'] ) && $_POST['action'] === 'lp_remove_admin_warning' && isset( $_POST['name'] ) ) {\n+\t\t\tif ( empty( $transient_profile ) ) {\n+\t\t\t\tset_transient( $_POST['name'], true, 60 * 60 * 12 );\n+\t\t\t}\n+\n+\t\t\techo 'success';\n+\t\t\twp_die();\n+\n+\t\t}\n+\n+\t\techo 'error';\n+\t\twp_die();\n+\t}\n+}\n+\u002F\u002Fadd_action( 'wp_ajax_lp_remove_admin_warning', 'lp_remove_admin_warning' );\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Flp-admin-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Flp-admin-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Flp-admin-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Flp-admin-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2223 +1,2227 @@\n-\u003C?php\r\n-\u002F**\r\n- * Common functions used for admin\r\n- *\r\n- * @package   LearnPress\r\n- * @author    ThimPress\r\n- * @version   1.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! function_exists( 'learn_press_add_row_action_link' ) ) {\r\n-\t\u002F**\r\n-\t * Setup action links to the admin course, lesson, quiz, question. e.g: Add Duplicate link, hide View link for lesson, quiz so on.\r\n-\t *\r\n-\t * @param $actions\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tfunction learn_press_add_row_action_link( $actions ) {\r\n-\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( LP_COURSE_CPT == $post->post_type ) {\r\n-\t\t\t$duplicate_link = '#';\r\n-\t\t\t$duplicate_link = array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'link'  => $duplicate_link,\r\n-\t\t\t\t\t'title' => _x( 'Duplicate', 'copy course', 'learnpress' ),\r\n-\t\t\t\t\t'class' => 'lp-duplicate-post lp-duplicate-course',\r\n-\t\t\t\t\t'data'  => $post->ID,\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$links = apply_filters( 'learn_press_row_action_links', $duplicate_link );\r\n-\r\n-\t\t\tif ( count( $links ) > 1 ) {\r\n-\t\t\t\t$drop_down = array( '\u003Cul class=\"lpr-row-action-dropdown\">' );\r\n-\r\n-\t\t\t\tforeach ( $links as $link ) {\r\n-\t\t\t\t\t$drop_down[] = '\u003Cli>' . sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\" data-post-id=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$link['link'],\r\n-\t\t\t\t\t\t$link['class'],\r\n-\t\t\t\t\t\t$link['data'],\r\n-\t\t\t\t\t\t$link['title']\r\n-\t\t\t\t\t) . '\u003C\u002Fli>';\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\t$drop_down[] = '\u003C\u002Ful>';\r\n-\t\t\t\t$link        = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lpr-row-actions\">\u003Ca href=\"%s\">%s\u003C\u002Fa>%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'javascript: void(0);',\r\n-\t\t\t\t\t__( 'Course', 'learnpress' ),\r\n-\t\t\t\t\tjoin( \"\\n\", $drop_down )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t} else {\r\n-\t\t\t\t$link = array_shift( $links );\r\n-\t\t\t\t$link = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\" data-post-id=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t$link['link'],\r\n-\t\t\t\t\t$link['class'],\r\n-\t\t\t\t\t$link['data'],\r\n-\t\t\t\t\t$link['title']\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$actions['lp-duplicate-row-action'] = $link;\r\n-\r\n-\t\t} elseif ( LP_QUIZ_CPT === $post->post_type ) {\r\n-\t\t\tunset( $actions['view'] );\r\n-\t\t\t$link                               = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-quiz\" data-post-id=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$post->ID,\r\n-\t\t\t\t_x( 'Duplicate', 'copy quiz', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$actions['lp-duplicate-row-action'] = $link;\r\n-\r\n-\t\t} elseif ( LP_QUESTION_CPT === $post->post_type ) {\r\n-\t\t\tunset( $actions['view'] );\r\n-\t\t\t$link                               = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-question\" data-post-id=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$post->ID,\r\n-\t\t\t\t_x( 'Duplicate', 'copy question', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$actions['lp-duplicate-row-action'] = $link;\r\n-\r\n-\t\t} elseif ( LP_LESSON_CPT === $post->post_type ) {\r\n-\t\t\tunset( $actions['view'] );\r\n-\t\t\t$link                               = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-lesson\" data-post-id=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$post->ID,\r\n-\t\t\t\t_x( 'Duplicate', 'copy lesson', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$actions['lp-duplicate-row-action'] = $link;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Frow-action-links', $actions );\r\n-\t}\r\n-\r\n-\tadd_filter( 'post_row_actions', 'learn_press_add_row_action_link' );\r\n-\tadd_filter( 'page_row_actions', 'learn_press_add_row_action_link' );\r\n-}\r\n-\r\n-\u002F*function learn_press_is_hidden_post_box( $id, $user_id = 0 ) {\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\r\n-\t$data = learn_press_get_user_option( 'post-closed-box' );\r\n-\tif ( ! $data ) {\r\n-\t\t$data = array();\r\n-\t}\r\n-\r\n-\treturn false !== array_search( $id, $data );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * List all pages as a dropdown with \"Add New Page\" option\r\n- *\r\n- * @param            $name\r\n- * @param bool|false $selected\r\n- * @param array      $args\r\n- *\r\n- * @return mixed|string\r\n- *\u002F\r\n-function learn_press_pages_dropdown( $name, $selected = false, $args = array() ) {\r\n-\t$id           = null;\r\n-\t$class        = null;\r\n-\t$css          = null;\r\n-\t$before       = array(\r\n-\t\t'add_new_page' => __( '[ Add a new page ]', 'learnpress' ),\r\n-\t);\r\n-\t$after        = null;\r\n-\t$echo         = true;\r\n-\t$allow_create = true;\r\n-\r\n-\tif ( func_num_args() == 1 && is_array( $name ) ) {\r\n-\t\t$args = $name;\r\n-\t}\r\n-\r\n-\tis_array( $args ) && extract( $args );\r\n-\r\n-\tif ( empty( $id ) ) {\r\n-\t\t$id = $name;\r\n-\t}\r\n-\r\n-\t$class .= 'list-pages lp-list-pages lp-tom-select';\r\n-\r\n-\t$args    = array(\r\n-\t\t'name'             => $name,\r\n-\t\t'id'               => $id,\r\n-\t\t'sort_column'      => 'menu_order',\r\n-\t\t'sort_order'       => 'ASC',\r\n-\t\t'show_option_none' => __( 'Select Page', 'learnpress' ),\r\n-\t\t'class'            => $class,\r\n-\t\t'echo'             => false,\r\n-\t\t'selected'         => $selected,\r\n-\t\t'allow_create'     => true,\r\n-\t);\r\n-\t$output  = wp_dropdown_pages( $args );\r\n-\t$replace = '';\r\n-\r\n-\tif ( $class ) {\r\n-\t\t$replace .= ' class=\"' . $class . '\"';\r\n-\t}\r\n-\r\n-\tif ( $css ) {\r\n-\t\t$replace .= ' style=\"' . $css . '\"';\r\n-\t}\r\n-\r\n-\t$replace .= ' data-selected=\"' . $selected . '\"';\r\n-\t$replace .= \" data-placeholder='\" . __( 'Select a page&hellip;', 'learnpress' ) . \"' id=\";\r\n-\t$output   = '\u003Cdiv class=\"list-pages-wrapper\">' . str_replace( ' id=', $replace, $output );\r\n-\r\n-\tif ( $before ) {\r\n-\t\t$before_output = array();\r\n-\r\n-\t\tforeach ( $before as $v => $l ) {\r\n-\t\t\t$before_output[] = sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', $v, $l );\r\n-\t\t}\r\n-\r\n-\t\t$before_output = join( \"\\n\", $before_output );\r\n-\t\t$output        = preg_replace(\r\n-\t\t\t'!(\u003Coption class=\".*\" value=\"[0-9]+\".*>.*\u003C\u002Foption>)!',\r\n-\t\t\t$before_output . \"\\n$1\",\r\n-\t\t\t$output,\r\n-\t\t\t1\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t$output = str_replace( '\u003Coption class=\"level-0\" value=\"00000\">#0 (no title)\u003C\u002Foption>', '', $output );\r\n-\r\n-\tif ( $selected && get_post_status( $selected ) !== 'publish' ) {\r\n-\t\t$selected = 0;\r\n-\t}\r\n-\r\n-\tif ( $allow_create ) {\r\n-\t\tob_start(); ?>\r\n-\r\n-\t\t\u003C?php echo esc_html( _x( 'or', 'dropdown pages', 'learnpress' ) ); ?>\r\n-\r\n-\t\t\u003Cbutton class=\"button button-quick-add-page\" data-id=\"\u003C?php echo esc_attr( $id ); ?>\" type=\"button\">\r\n-\t\t\t\u003C?php esc_html_e( 'Create new', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\t\u003C?php echo '\u003C\u002Fdiv>'; ?>\r\n-\r\n-\t\t\u003Cp class=\"quick-add-page-inline \u003C?php echo esc_attr( $id ); ?> hide-if-js\">\r\n-\t\t\t\u003Cinput type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'New page title', 'learnpress' ); ?>\"\u002F>\r\n-\t\t\t\u003Cbutton class=\"button\" type=\"button\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003Ca href=\"\">\u003C?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003Cp class=\"quick-add-page-actions \u003C?php echo esc_attr( $id ); ?>\u003C?php echo esc_attr( $selected ? '' : ' hide-if-js' ); ?>\">\r\n-\t\t\t\u003Ca class=\"edit-page\" href=\"\u003C?php echo get_edit_post_link( $selected ); ?>\"\r\n-\t\t\t\ttarget=\"_blank\">\u003C?php esc_html_e( 'Edit page', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t&#124;\r\n-\t\t\t\u003Ca class=\"view-page\" href=\"\u003C?php echo get_permalink( $selected ); ?>\"\r\n-\t\t\t\ttarget=\"_blank\">\u003C?php esc_html_e( 'View page', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003C!-- Not use input on here, will be not save value -->\r\n-\t\t\u003Cdiv class=\"field_name\" name=\"\u003C?php echo esc_attr( $id ); ?>\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t$output .= ob_get_clean();\r\n-\t} else {\r\n-\t\t$output .= '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\t$output = sprintf( '\u003Cdiv class=\"learn-press-dropdown-pages\">%s\u003C\u002Fdiv>', $output );\r\n-\r\n-\tif ( $echo ) {\r\n-\t\t$allowed_html           = wp_kses_allowed_html( 'post' );\r\n-\t\t$allowed_html['select'] = [\r\n-\t\t\t'name'        => [],\r\n-\t\t\t'class'       => [],\r\n-\t\t];\r\n-\t\t$allowed_html['option'] = [\r\n-\t\t\t'value'    => [],\r\n-\t\t\t'selected' => [],\r\n-\t\t\t'class'    => [],\r\n-\t\t];\r\n-\t\t$allowed_html['input']  = [\r\n-\t\t\t'type'        => [],\r\n-\t\t\t'placeholder' => [],\r\n-\t\t\t'name'        => [],\r\n-\t\t\t'class'       => [],\r\n-\t\t];\r\n-\t\t$allowed_html['div']    = [\r\n-\t\t\t'name'  => [],\r\n-\t\t\t'class' => [],\r\n-\t\t];\r\n-\r\n-\t\techo wp_kses( $output, $allowed_html );\r\n-\t}\r\n-\r\n-\treturn $output;\r\n-}\r\n-\r\n-\u002F**\r\n- * List all registered question types into dropdown\r\n- *\r\n- * @param array\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_dropdown_question_types( $args = array() ) {\r\n-\t$args = wp_parse_args(\r\n-\t\t$args,\r\n-\t\tarray(\r\n-\t\t\t'name'     => 'learn-press-dropdown-question-types',\r\n-\t\t\t'id'       => '',\r\n-\t\t\t'class'    => '',\r\n-\t\t\t'selected' => '',\r\n-\t\t\t'echo'     => true,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( ! $args['id'] ) {\r\n-\t\t$args['id'] = $args['name'];\r\n-\t}\r\n-\r\n-\t$args['class'] = 'lp-dropdown-question-types' . ( $args['class'] ? ' ' . $args['class'] : '' );\r\n-\t$types         = learn_press_question_types();\r\n-\t$output        = sprintf(\r\n-\t\t'\u003Cselect name=\"%s\" id=\"%s\" class=\"%s\"%s>',\r\n-\t\t$args['name'],\r\n-\t\t$args['id'],\r\n-\t\t$args['class'],\r\n-\t\t$args['selected'] ? 'data-selected=\"' . $args['selected'] . '\"' : ''\r\n-\t);\r\n-\r\n-\tforeach ( $types as $slug => $name ) {\r\n-\t\t$output .= sprintf(\r\n-\t\t\t'\u003Coption value=\"%s\"%s>%s\u003C\u002Foption>',\r\n-\t\t\t$slug,\r\n-\t\t\tselected( $slug == $args['selected'], true, false ),\r\n-\t\t\t$name\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t$output .= '\u003C\u002Fselect>';\r\n-\r\n-\tif ( $args['echo'] ) {\r\n-\t\techo wp_kses_post( $output );\r\n-\t}\r\n-\r\n-\treturn $output;\r\n-}\r\n-\r\n-\u002F**\r\n- * List all registered question types into dropdown\r\n- *\r\n- * @param array       $args\r\n- * @param LP_Question $question\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_field_question_duration( $args = array(), $question = null ) {\r\n-\tglobal $post;\r\n-\r\n-\t$duration_type = get_post_meta( $post->ID, '_lp_duration_type', true );\r\n-\t$value         = get_post_meta( $question->id, '_question_duration', true );\r\n-\r\n-\t$wrap_class = 'learn-press-question-duration';\r\n-\r\n-\tif ( 'questions_duration' !== $duration_type ) {\r\n-\t\t$wrap_class .= ' hide';\r\n-\t}\r\n-\r\n-\t$args = wp_parse_args(\r\n-\t\t$args,\r\n-\t\tarray(\r\n-\t\t\t'name'        => 'learn_press_question[' . $question->id . '][duration]',\r\n-\t\t\t'id'          => 'learn-press-question-duration-' . $question->id,\r\n-\t\t\t'class'       => 'learn-press-question-duration',\r\n-\t\t\t'selected'    => '',\r\n-\t\t\t'echo'        => true,\r\n-\t\t\t'value'       => 0,\r\n-\t\t\t'step'        => 1,\r\n-\t\t\t'min'         => 0,\r\n-\t\t\t'placeholder' => __( 'Minutes', 'learnpress' ),\r\n-\t\t)\r\n-\t);\r\n-\r\n-\t$args['value'] = $value;\r\n-\r\n-\tif ( ! $args['id'] ) {\r\n-\t\t$args['id'] = $args['name'];\r\n-\t}\r\n-\r\n-\treturn '\u003Cspan class=\"' . esc_attr( $wrap_class ) . '\">' . sprintf(\r\n-\t\t'\u003Cinput type=\"number\" class=\"%s\" name=\"%s\" id=\"%s\" value=\"%s\" step=\"%s\" min=\"%s\" max=\"%s\" placeholder=\"%s\"\u002F>',\r\n-\t\t$args['class'],\r\n-\t\t$args['name'],\r\n-\t\tempty( $args['clone'] ) ? $args['id'] : '',\r\n-\t\t$args['value'],\r\n-\t\t$args['step'],\r\n-\t\t$args['min'],\r\n-\t\t! empty( $args['max'] ) ? $args['max'] : '',\r\n-\t\t$args['placeholder']\r\n-\t) . $args['placeholder'] . '\u003C\u002Fspan>';\r\n-}\r\n-\r\n-\u002F**\r\n- * Displays email formats support into a dropdown\r\n- *\r\n- * @param array $args\r\n- *\r\n- * @return string\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_email_formats_dropdown( $args = array() ) {\r\n-\t$args = wp_parse_args(\r\n-\t\t$args,\r\n-\t\tarray(\r\n-\t\t\t'name'        => 'learn-press-dropdown-email-formats',\r\n-\t\t\t'id'          => '',\r\n-\t\t\t'class'       => '',\r\n-\t\t\t'selected'    => '',\r\n-\t\t\t'option_none' => '',\r\n-\t\t\t'echo'        => true,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\t$formats = array(\r\n-\t\t'plain_text' => __( 'Plain Text', 'learnpress' ),\r\n-\t\t'html'       => __( 'HTML', 'learnpress' ),\r\n-\t);\r\n-\r\n-\tif ( empty( $args['id'] ) ) {\r\n-\t\t$args['id'] = sanitize_file_name( $args['name'] );\r\n-\t}\r\n-\r\n-\t$output = sprintf( '\u003Cselect name=\"%s\" id=\"%s\" class=\"%s\" %s>', $args['name'], $args['id'], $args['class'], '' );\r\n-\r\n-\tif ( $args['option_none'] ) {\r\n-\t\tif ( is_array( $args['option_none'] ) ) {\r\n-\t\t\t$text  = reset( $args['option_none'] );\r\n-\t\t\t$value = key( $args['option_none'] );\r\n-\t\t} else {\r\n-\t\t\t$text  = $args['option_none'];\r\n-\t\t\t$value = '';\r\n-\t\t}\r\n-\r\n-\t\t$output .= sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', $value, $text );\r\n-\t}\r\n-\r\n-\tforeach ( $formats as $name => $text ) {\r\n-\t\t$output .= sprintf(\r\n-\t\t\t'\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>',\r\n-\t\t\t$name,\r\n-\t\t\tselected( $args['selected'] == $name, true, false ),\r\n-\t\t\t$text\r\n-\t\t) . \"\\n\";\r\n-\t}\r\n-\t$output .= '\u003C\u002Fselect>';\r\n-\r\n-\tif ( $args['echo'] ) {\r\n-\t\techo wp_kses_post( $output );\r\n-\t}\r\n-\r\n-\treturn $output;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Return array of email formats.\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_email_formats() {\r\n-\t$formats = array(\r\n-\t\t'plain' => esc_html__( 'Plain Text', 'learnpress' ),\r\n-\t\t'html'  => esc_html__( 'HTML', 'learnpress' ),\r\n-\t);\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Femail-formats', $formats );\r\n-}\r\n-\r\n-function learn_press_trim_content( $content, $count = 0 ) {\r\n-\t$content = preg_replace( '\u002F(?\u003C=\\S,)(?=\\S)\u002F', ' ', $content );\r\n-\t$content = str_replace( \"\\n\", ' ', $content );\r\n-\t$content = explode( ' ', $content );\r\n-\r\n-\t$count = $count > 0 ? $count : sizeof( $content ) - 1;\r\n-\t$full  = $count >= sizeof( $content ) - 1;\r\n-\r\n-\t$content = array_slice( $content, 0, $count );\r\n-\t$content = implode( ' ', $content );\r\n-\r\n-\tif ( ! $full ) {\r\n-\t\t$content .= '...';\r\n-\t}\r\n-\r\n-\treturn $content;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get list of themes that support LearnPress.\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_education_themes() {\r\n-\r\n-\t\u002F\u002F New theme can be added here\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Feducation-themes',\r\n-\t\tarray(\r\n-\t\t\t'23451388' => 'kindergarten',\r\n-\t\t\t'22773871' => 'ivy-school',\r\n-\t\t\t'20370918' => 'wordpress-lms',\r\n-\t\t\t'14058034' => 'eduma',\r\n-\t\t\t'17097658' => 'coach',\r\n-\t\t\t'11797847' => 'lms',\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_get_item_referral' ) ) {\r\n-\t\u002F**\r\n-\t * Set item link referral.\r\n-\t *\r\n-\t * @param int|string $item_id\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tfunction learn_press_get_item_referral( $item_id ) {\r\n-\t\t$affiliate_links = array(\r\n-\t\t\t14058034 => 'https:\u002F\u002F1.envato.market\u002FG5Ook', \u002F\u002F Eduma\r\n-\t\t\t22773871 => 'https:\u002F\u002F1.envato.market\u002FakrzZ', \u002F\u002F Ivy-school\r\n-\t\t\t20370918 => 'https:\u002F\u002F1.envato.market\u002F13Zkd', \u002F\u002F Course Builder LMS\r\n-\t\t\t17097658 => 'https:\u002F\u002F1.envato.market\u002FXq2Ra', \u002F\u002F Coach\r\n-\t\t\t23451388 => 'https:\u002F\u002F1.envato.market\u002FoWov9', \u002F\u002F StarKid\r\n-\t\t\t11797847 => 'https:\u002F\u002F1.envato.market\u002FzknvM', \u002F\u002F Epsilon\r\n-\t\t\t13321455 => 'https:\u002F\u002F1.envato.market\u002FG5Rkk', \u002F\u002F Sailing\r\n-\t\t\t19029758 => 'https:\u002F\u002F1.envato.market\u002FmAYdZ', \u002F\u002F Travel Tour Booking\r\n-\t\t\t12124219 => 'https:\u002F\u002F1.envato.market\u002FqJYdO', \u002F\u002F Resca\r\n-\t\t\t18828322 => 'https:\u002F\u002F1.envato.market\u002FVW2K3', \u002F\u002F LuxStay\r\n-\t\t\t8254575  => 'https:\u002F\u002F1.envato.market\u002FxWYdO', \u002F\u002F Squareroot\r\n-\t\t\t13782850 => 'https:\u002F\u002F1.envato.market\u002FQo71z',\r\n-\t\t\t14025178 => 'https:\u002F\u002F1.envato.market\u002F9R0oQ',\r\n-\t\t\t17739078 => 'https:\u002F\u002F1.envato.market\u002FjkYda',\r\n-\t\t\t16210005 => 'https:\u002F\u002F1.envato.market\u002F56oJD',\r\n-\t\t\t11733602 => 'https:\u002F\u002F1.envato.market\u002FkeYdv',\r\n-\t\t\t13513609 => 'https:\u002F\u002F1.envato.market\u002Faq7dQ',\r\n-\t\t\t19693761 => 'https:\u002F\u002F1.envato.market\u002FA976D',\r\n-\t\t\t12532973 => 'https:\u002F\u002F1.envato.market\u002FGe79B',\r\n-\t\t\t19305239 => 'https:\u002F\u002F1.envato.market\u002F10JAB',\r\n-\t\t\t23716060 => 'https:\u002F\u002F1.envato.market\u002FZO7WW',\r\n-\t\t\t20466233 => 'https:\u002F\u002F1.envato.market\u002FgjYd0',\r\n-\t\t\t21070438 => 'https:\u002F\u002F1.envato.market\u002FxPz65',\r\n-\t\t\t20794183 => 'https:\u002F\u002F1.envato.market\u002Fo1YdY',\r\n-\t\t\t20979215 => 'https:\u002F\u002F1.envato.market\u002F03R5V',\r\n-\t\t\t11151269 => 'https:\u002F\u002F1.envato.market\u002FBr7L4',\r\n-\t\t\t8905392  => 'https:\u002F\u002F1.envato.market\u002FzEYd7',\r\n-\t\t\t23168294 => 'https:\u002F\u002F1.envato.market\u002FWn7on',\r\n-\t\t\t17719422 => 'https:\u002F\u002F1.envato.market\u002F0WVaL',\r\n-\t\t\t21680592 => 'https:\u002F\u002F1.envato.market\u002FqqO6y',\r\n-\t\t);\r\n-\r\n-\t\treturn $affiliate_links[ $item_id ] ?? 'https:\u002F\u002Fthemeforest.net\u002Fuser\u002Fthimpress\u002Fportfolio\u002F';\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Count number of orders between to dates\r\n- *\r\n- * @param string\r\n- * @param int\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_order_by_time( $by, $time ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$user_id = get_current_user_id();\r\n-\r\n-\t$y = gmdate( 'Y', $time );\r\n-\t$m = gmdate( 'm', $time );\r\n-\t$d = gmdate( 'd', $time );\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$orders = $wpdb->get_var(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT COUNT(*)\r\n-\t\t\t\t\tFROM $wpdb->posts AS p\r\n-\t\t\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\r\n-\t\t\t\t\tWHERE p.post_author = %d\r\n-\t\t\t\t\tAND p.post_type = %s\r\n-\t\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\t\tAND m.meta_key = %s\r\n-\t\t\t\t\tAND m.meta_value = %s\r\n-\t\t\t\t\tAND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s AND DAY(p.post_date) = %s\",\r\n-\t\t\t\t\t$user_id,\r\n-\t\t\t\t\tLP_ORDER_CPT,\r\n-\t\t\t\t\t'publish',\r\n-\t\t\t\t\t'_learn_press_transaction_status',\r\n-\t\t\t\t\t'completed',\r\n-\t\t\t\t\t$y,\r\n-\t\t\t\t\t$m,\r\n-\t\t\t\t\t$d\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tbreak;\r\n-\t\tcase 'months':\r\n-\t\t\t$orders = $wpdb->get_var(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT COUNT(*)\r\n-\t\t\t\t\tFROM $wpdb->posts AS p\r\n-\t\t\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\r\n-\t\t\t\t\tWHERE p.post_author = %d\r\n-\t\t\t\t\tAND p.post_type = %s\r\n-\t\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\t\tAND m.meta_key = %s\r\n-\t\t\t\t\tAND m.meta_value = %s\r\n-\t\t\t\t\tAND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s\",\r\n-\t\t\t\t\t$user_id,\r\n-\t\t\t\t\tLP_ORDER_CPT,\r\n-\t\t\t\t\t'publish',\r\n-\t\t\t\t\t'_learn_press_transaction_status',\r\n-\t\t\t\t\t'completed',\r\n-\t\t\t\t\t$y,\r\n-\t\t\t\t\t$m\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\treturn $orders;\r\n-}\r\n-\r\n-\u002F**\r\n- * Count number of orders by status\r\n- *\r\n- * @param string Status of the orders\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_courses_by_status( $status ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$user_id = get_current_user_id();\r\n-\r\n-\t$courses = $wpdb->get_var(\r\n-\t\t$wpdb->prepare(\r\n-\t\t\t\"SELECT COUNT(*)\r\n-\t\t\tFROM $wpdb->posts\r\n-\t\t\tWHERE post_author = %d\r\n-\t\t\tAND post_type = %s\r\n-\t\t\tAND post_status = %s\",\r\n-\t\t\t$user_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t$status\r\n-\t\t)\r\n-\t);\r\n-\r\n-\treturn $courses;\r\n-}\r\n-\r\n-\u002F**\r\n- * Count number of orders by price\r\n- *\r\n- * @param string\r\n- *\r\n- * @return int\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_courses_by_price( $fee ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$user_id = get_current_user_id();\r\n-\r\n-\t$courses = $wpdb->get_var(\r\n-\t\t$wpdb->prepare(\r\n-\t\t\t\"SELECT COUNT(*)\r\n-\t\t\tFROM $wpdb->posts AS p\r\n-\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\r\n-\t\t\tWHERE p.post_author = %d\r\n-\t\t\tAND p.post_type = %s\r\n-\t\t\tAND p.post_status IN (%s, %s)\r\n-\t\t\tAND m.meta_key = %s\r\n-\t\t\tAND m.meta_value = %s\",\r\n-\t\t\t$user_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t'publish',\r\n-\t\t\t'pending',\r\n-\t\t\t'_lpr_course_payment',\r\n-\t\t\t$fee\r\n-\t\t)\r\n-\t);\r\n-\r\n-\treturn $courses;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get data about students to render in chart\r\n- *\r\n- * @param null  $from\r\n- * @param null  $by\r\n- * @param float $time_ago\r\n- *\r\n- * @return array\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_chart_students( $from = null, $by = null, $time_ago = 0 ) {\r\n-\t$labels   = array();\r\n-\t$datasets = array();\r\n-\r\n-\tif ( is_null( $from ) ) {\r\n-\t\t$from = current_time( 'mysql', 1 );\r\n-\t}\r\n-\r\n-\tif ( is_null( $by ) ) {\r\n-\t\t$by = 'days';\r\n-\t}\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$date_format = 'M d';\r\n-\t\t\tbreak;\r\n-\t\tcase 'months':\r\n-\t\t\t$date_format = 'M Y';\r\n-\t\t\tbreak;\r\n-\t\tcase 'years':\r\n-\t\t\t$date_format = 'Y';\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\r\n-\t\t$labels[]              = gmdate( $date_format, strtotime( \"$i $by\", strtotime( $from ) ) );\r\n-\t\t$datasets[0]['data'][] = learn_press_get_order_by_time( $by, strtotime( \"$i $by\", strtotime( $from ) ) );\r\n-\t}\r\n-\r\n-\t$colors                              = learn_press_get_admin_colors();\r\n-\t$datasets[0]['fillColor']            = 'rgba(255,255,255,0.1)';\r\n-\t$datasets[0]['strokeColor']          = $colors[0];\r\n-\t$datasets[0]['pointColor']           = $colors[0];\r\n-\t$datasets[0]['pointStrokeColor']     = $colors[2];\r\n-\t$datasets[0]['pointHighlightFill']   = $colors[2];\r\n-\t$datasets[0]['pointHighlightStroke'] = $colors[0];\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get data about students to render in chart\r\n- *\r\n- * @param null  $from\r\n- * @param null  $by\r\n- * @param float $time_ago\r\n- *\r\n- * @return array\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_chart_users( $from = null, $by = null, $time_ago = 0 ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$labels   = array();\r\n-\t$datasets = array();\r\n-\r\n-\tif ( is_null( $from ) ) {\r\n-\t\t$from = current_time( 'mysql', 1 );\r\n-\t}\r\n-\r\n-\tif ( is_null( $by ) ) {\r\n-\t\t$by = 'days';\r\n-\t}\r\n-\r\n-\t$results = array(\r\n-\t\t'all'         => array(),\r\n-\t\t'instructors' => array(),\r\n-\t);\r\n-\r\n-\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$date_format = 'M d Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = gmdate( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$_to         = date( 'Y-m-d', $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m-%d';\r\n-\t\t\t$_key_format = 'Y-m-d';\r\n-\t\t\tbreak;\r\n-\t\tcase 'months':\r\n-\t\t\t$date_format = 'M Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m';\r\n-\t\t\t$_key_format = 'Y-m';\r\n-\t\t\tbreak;\r\n-\t\tcase 'years':\r\n-\t\t\t$date_format = 'Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y';\r\n-\t\t\t$_key_format = 'Y';\r\n-\r\n-\t\t\tbreak;\r\n-\t}\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d\r\n-\t\tFROM {$wpdb->users} u\r\n-\t\tWHERE 1\r\n-\t\tGROUP BY d\r\n-\t\tHAVING d BETWEEN %s AND %s\r\n-\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['all'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\tSELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d\r\n-\t\t\tFROM {$wpdb->users} u\r\n-\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s AND ( um.meta_value LIKE %s OR um.meta_value LIKE %s )\r\n-\t\t\tWHERE 1\r\n-\t\t\tGROUP BY d\r\n-\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'wp_capabilities',\r\n-\t\t'%' . $wpdb->esc_like( 's:13:\"administrator\"' ) . '%',\r\n-\t\t'%' . $wpdb->esc_like( 's:10:\"lp_teacher\"' ) . '%',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['instructors'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\r\n-\t\t$date     = strtotime( \"$i $by\", $from_time );\r\n-\t\t$labels[] = date( $date_format, $date );\r\n-\t\t$key      = date( $_key_format, $date );\r\n-\r\n-\t\t$all         = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\r\n-\t\t$instructors = ! empty( $results['instructors'][ $key ] ) ? $results['instructors'][ $key ]->c : 0;\r\n-\r\n-\t\t$datasets[0]['data'][] = $all;\r\n-\t\t$datasets[1]['data'][] = $instructors;\r\n-\t\t$datasets[2]['data'][] = $all - $instructors;\r\n-\t}\r\n-\r\n-\t$dataset_params = array(\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'All', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Instructors', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Students', 'learnpress' ),\r\n-\t\t),\r\n-\t);\r\n-\r\n-\tforeach ( $dataset_params as $k => $v ) {\r\n-\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\r\n-\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['label']                = $v['label'];\r\n-\t}\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t\t'sql'      => $query,\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\r\n-\u002F**\r\n- * Get data about students to render in chart\r\n- *\r\n- * @param null  $from\r\n- * @param null  $by\r\n- * @param float $time_ago\r\n- *\r\n- * @return array\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_chart_courses( $from = null, $by = null, $time_ago = 0 ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$labels   = array();\r\n-\t$datasets = array();\r\n-\r\n-\tif ( is_null( $from ) ) {\r\n-\t\t$from = current_time( 'mysql', 1 );\r\n-\t}\r\n-\r\n-\tif ( is_null( $by ) ) {\r\n-\t\t$by = 'days';\r\n-\t}\r\n-\r\n-\t$results = array(\r\n-\t\t'all'     => array(),\r\n-\t\t'public'  => array(),\r\n-\t\t'pending' => array(),\r\n-\t\t'free'    => array(),\r\n-\t\t'paid'    => array(),\r\n-\t);\r\n-\r\n-\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$date_format = 'M d Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$_to         = date( 'Y-m-d', $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m-%d';\r\n-\t\t\t$_key_format = 'Y-m-d';\r\n-\t\t\tbreak;\r\n-\t\tcase 'months':\r\n-\t\t\t$date_format = 'M Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m';\r\n-\t\t\t$_key_format = 'Y-m';\r\n-\t\t\tbreak;\r\n-\t\tcase 'years':\r\n-\t\t\t$date_format = 'Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y';\r\n-\t\t\t$_key_format = 'Y';\r\n-\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\t$query_where = '';\r\n-\r\n-\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\r\n-\t\t$user_id      = learn_press_get_current_user_id();\r\n-\t\t$query_where .= $wpdb->prepare( ' AND c.post_author=%d ', $user_id );\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\tFROM {$wpdb->posts} c\r\n-\t\tWHERE 1\r\n-\t\t{$query_where}\r\n-\t\tAND c.post_status IN('publish', 'pending') AND c.post_type = %s\r\n-\t\tGROUP BY d\r\n-\t\tHAVING d BETWEEN %s AND %s\r\n-\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['all'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\tFROM {$wpdb->posts} c\r\n-\t\tWHERE 1\r\n-\t\t{$query_where}\r\n-\t\tAND c.post_status = %s AND c.post_type = %s\r\n-\t\tGROUP BY d\r\n-\t\tHAVING d BETWEEN %s AND %s\r\n-\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'publish',\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\t$_results = $wpdb->get_results( $query );\r\n-\tif ( $_results ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['publish'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\t\tFROM {$wpdb->posts} c\r\n-\t\t\tINNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID\r\n-\t\t\tWHERE 1\r\n-\t\t\t{$query_where}\r\n-\t\t\tAND c.post_status = %s AND c.post_type = %s\r\n-\t\t\tGROUP BY d\r\n-\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'publish',\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\t$_results = $wpdb->get_results( $query );\r\n-\tif ( $_results ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['paid'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\r\n-\t\t$date     = strtotime( \"$i $by\", $from_time );\r\n-\t\t$labels[] = date( $date_format, $date );\r\n-\t\t$key      = date( $_key_format, $date );\r\n-\r\n-\t\t$all     = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\r\n-\t\t$publish = ! empty( $results['publish'][ $key ] ) ? $results['publish'][ $key ]->c : 0;\r\n-\t\t$paid    = ! empty( $results['paid'][ $key ] ) ? $results['paid'][ $key ]->c : 0;\r\n-\r\n-\t\t$datasets[0]['data'][] = $all;\r\n-\t\t$datasets[1]['data'][] = $publish;\r\n-\t\t$datasets[2]['data'][] = $all - $publish;\r\n-\t\t$datasets[3]['data'][] = $paid;\r\n-\t\t$datasets[4]['data'][] = $all - $paid;\r\n-\t}\r\n-\r\n-\t$dataset_params = array(\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'All', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Publish', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Pending', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Paid', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Free', 'learnpress' ),\r\n-\t\t),\r\n-\t);\r\n-\r\n-\tforeach ( $dataset_params as $k => $v ) {\r\n-\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\r\n-\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['label']                = $v['label'];\r\n-\t}\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t\t'sql'      => $query,\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\r\n-\u002F**\r\n- * Get data about students to render in chart\r\n- *\r\n- * @param null  $from\r\n- * @param null  $by\r\n- * @param float $time_ago\r\n- *\r\n- * @return array\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_chart_orders( $from = null, $by = null, $time_ago = 0 ) {\r\n-\tglobal $wpdb;\r\n-\t$sql_join = '';\r\n-\r\n-\t$report_sales_by = learn_press_get_request( 'report_sales_by' );\r\n-\t$course_id       = learn_press_get_request( 'course_id' );\r\n-\t$cat_id          = learn_press_get_request( 'cat_id' );\r\n-\r\n-\t$labels   = array();\r\n-\t$datasets = array();\r\n-\tif ( is_null( $from ) ) {\r\n-\t\t$from = current_time( 'mysql', 1 );\r\n-\t}\r\n-\tif ( is_null( $by ) ) {\r\n-\t\t$by = 'days';\r\n-\t}\r\n-\t$results   = array(\r\n-\t\t'all'       => array(),\r\n-\t\t'completed' => array(),\r\n-\t\t'pending'   => array(),\r\n-\t);\r\n-\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$date_format = 'M d Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$_to         = date( 'Y-m-d', $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m-%d';\r\n-\t\t\t$_key_format = 'Y-m-d';\r\n-\t\t\tbreak;\r\n-\t\tcase 'months':\r\n-\t\t\t$date_format = 'M Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m';\r\n-\t\t\t$_key_format = 'Y-m';\r\n-\t\t\tbreak;\r\n-\t\tcase 'years':\r\n-\t\t\t$date_format = 'Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y';\r\n-\t\t\t$_key_format = 'Y';\r\n-\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\t$query_join  = '';\r\n-\t$query_where = '';\r\n-\t$sql_join    = '';\r\n-\tif ( 'course' === $report_sales_by ) {\r\n-\t\t$sql_join .= \" INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` \"\r\n-\t\t\t\t\t . ' ON o.ID=lpoi.order_id '\r\n-\t\t\t\t\t . \" INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim \"\r\n-\t\t\t\t\t . ' ON lpoi.order_item_id=loim.learnpress_order_item_id '\r\n-\t\t\t\t\t . \" AND loim.meta_key='_course_id' \"\r\n-\t\t\t\t\t . ' AND CAST(loim.meta_value AS SIGNED)=%d ';\r\n-\t\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\r\n-\t\t\t$user_id   = learn_press_get_current_user_id();\r\n-\t\t\t$sql_join .= $wpdb->prepare(\r\n-\t\t\t\t' AND CAST(loim.meta_value AS SIGNED) IN '\r\n-\t\t\t\t. ' ( '\r\n-\t\t\t\t. \" SELECT ID FROM {$wpdb->posts} p WHERE p.ID = CAST(loim.meta_value AS SIGNED) AND `post_author`=\" . intval( $user_id )\r\n-\t\t\t\t. ' ) '\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$query_join .= $wpdb->prepare( $sql_join, $course_id );\r\n-\r\n-\t} elseif ( 'category' === $report_sales_by ) {\r\n-\t\t$sql_join .= \" INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` \"\r\n-\t\t\t\t\t   . ' ON o.ID=lpoi.order_id '\r\n-\t\t\t\t\t   . \" INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim \"\r\n-\t\t\t\t\t   . ' ON lpoi.order_item_id=loim.learnpress_order_item_id '\r\n-\t\t\t\t\t   . \" AND loim.meta_key='_course_id' \"\r\n-\t\t\t\t\t   . ' AND CAST(loim.meta_value AS SIGNED) IN('\r\n-\t\t\t\t\t   \u002F\u002F sub query\r\n-\t\t\t\t\t   . ' SELECT tr.object_id '\r\n-\t\t\t\t\t   . \" FROM {$wpdb->prefix}term_taxonomy tt INNER JOIN {$wpdb->prefix}term_relationships tr \"\r\n-\t\t\t\t\t   . \" ON tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy='course_category' \"\r\n-\t\t\t\t\t   . ' WHERE tt.term_id=%d)';\r\n-\t\t$query_join .= $wpdb->prepare( $sql_join, $cat_id );\r\n-\t}\r\n-\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\r\n-\t\t$user_id      = learn_press_get_current_user_id();\r\n-\t\t$query_where .= $wpdb->prepare(\r\n-\t\t\t\" AND o.ID IN( SELECT oi.order_id\r\n-\t\t\t\t\t\t\t\t\t\tFROM lptest.{$wpdb->prefix}learnpress_order_items oi\r\n-\t\t\t\t\t\t\t\t\t\t\tinner join {$wpdb->prefix}learnpress_order_itemmeta oim\r\n-\t\t\t\t\t\t\t\t\t\t\t\ton oi.order_item_id = oim.learnpress_order_item_id\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\tand oim.meta_key='_course_id'\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\tand cast(oim.meta_value as SIGNED) IN (\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT sp.ID FROM {$wpdb->prefix}posts sp WHERE sp.post_author=%d and sp.ID=cast(oim.meta_value as SIGNED)\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t\t\t) \",\r\n-\t\t\t$user_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\t\tSELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d\r\n-\t\t\t\tFROM {$wpdb->posts} o {$query_join}\r\n-\t\t\t\tWHERE 1 {$query_where}\r\n-\t\t\t\tAND o.post_status IN('lp-completed') AND o.post_type = %s\r\n-\t\t\t\tGROUP BY d\r\n-\t\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'lp_order',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['completed'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d\r\n-\t\tFROM {$wpdb->posts} o {$query_join}\r\n-\t\tWHERE 1 {$query_where}\r\n-\t\tAND o.post_status IN('lp-pending', 'lp-processing') AND o.post_type = %s\r\n-\t\tGROUP BY d\r\n-\t\tHAVING d BETWEEN %s AND %s\r\n-\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'lp_order',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['pending'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\r\n-\t\t$date     = strtotime( \"$i $by\", $from_time );\r\n-\t\t$labels[] = date( $date_format, $date );\r\n-\t\t$key      = date( $_key_format, $date );\r\n-\r\n-\t\t$completed = ! empty( $results['completed'][ $key ] ) ? $results['completed'][ $key ]->c : 0;\r\n-\t\t$pending   = ! empty( $results['pending'][ $key ] ) ? $results['pending'][ $key ]->c : 0;\r\n-\t\t$all       = $completed + $pending;\r\n-\r\n-\t\t$datasets[0]['data'][] = $all;\r\n-\t\t$datasets[1]['data'][] = $completed;\r\n-\t\t$datasets[2]['data'][] = $pending;\r\n-\t}\r\n-\r\n-\t$dataset_params = array(\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'All', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Completed', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Pending', 'learnpress' ),\r\n-\t\t),\r\n-\t);\r\n-\r\n-\tforeach ( $dataset_params as $k => $v ) {\r\n-\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\r\n-\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['label']                = $v['label'];\r\n-\t}\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t\t'sql'      => $query,\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get data about courses to render in the chart\r\n- *\r\n- * @return array\r\n- * @deprecated 4.2.6.9.3\r\n- *\u002F\r\n-\u002F*function learn_press_get_chart_courses2() {\r\n-\t$labels = array(\r\n-\t\t__( 'Pending Courses\u002FPublish Courses', 'learnpress' ),\r\n-\t\t__( 'Free Courses\u002FPaid Courses', 'learnpress' ),\r\n-\t);\r\n-\r\n-\t$datasets            = array();\r\n-\t$datasets[0]['data'] = array(\r\n-\t\tlearn_press_get_courses_by_status( 'pending' ),\r\n-\t\tlearn_press_get_courses_by_price( 'free' ),\r\n-\t);\r\n-\r\n-\t$datasets[1]['data'] = array(\r\n-\t\tlearn_press_get_courses_by_status( 'publish' ),\r\n-\t\tlearn_press_get_courses_by_price( 'not_free' ),\r\n-\t);\r\n-\r\n-\t$colors                     = learn_press_get_admin_colors();\r\n-\t$datasets[0]['fillColor']   = $colors[1];\r\n-\t$datasets[0]['strokeColor'] = $colors[1];\r\n-\t$datasets[1]['fillColor']   = $colors[3];\r\n-\t$datasets[1]['strokeColor'] = $colors[3];\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get colors setting up by admin user\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_get_admin_colors() {\r\n-\t$admin_color = get_user_meta( get_current_user_id(), 'admin_color', true );\r\n-\tglobal $_wp_admin_css_colors;\r\n-\t$colors = array();\r\n-\r\n-\tif ( ! empty( $_wp_admin_css_colors[ $admin_color ]->colors ) ) {\r\n-\t\t$colors = $_wp_admin_css_colors[ $admin_color ]->colors;\r\n-\t}\r\n-\r\n-\tif ( empty( $colors[0] ) ) {\r\n-\t\t$colors[0] = '#000000';\r\n-\t}\r\n-\r\n-\tif ( empty( $colors[2] ) ) {\r\n-\t\t$colors[2] = '#00FF00';\r\n-\t}\r\n-\r\n-\treturn $colors;\r\n-}\r\n-\r\n-\u002F**\r\n- * Convert an array to json format and print out to browser\r\n- *\r\n- * @param array $chart\r\n- *\u002F\r\n-function learn_press_process_chart( $chart = array() ) {\r\n-\t$data = json_encode(\r\n-\t\tarray(\r\n-\t\t\t'labels'   => $chart['labels'],\r\n-\t\t\t'datasets' => $chart['datasets'],\r\n-\t\t)\r\n-\t);\r\n-\techo wp_kses_post( $data );\r\n-}\r\n-\r\n-\u002F**\r\n- * Print out the configuration for admin chart\r\n- *\u002F\r\n-function learn_press_config_chart() {\r\n-\t$colors = learn_press_get_admin_colors();\r\n-\r\n-\t$config = array(\r\n-\t\t'scaleShowGridLines'      => true,\r\n-\t\t'scaleGridLineColor'      => '#777',\r\n-\t\t'scaleGridLineWidth'      => 0.3,\r\n-\t\t'scaleFontColor'          => '#444',\r\n-\t\t'scaleLineColor'          => $colors[0],\r\n-\t\t'bezierCurve'             => true,\r\n-\t\t'bezierCurveTension'      => 0.2,\r\n-\t\t'pointDotRadius'          => 5,\r\n-\t\t'pointDotStrokeWidth'     => 5,\r\n-\t\t'pointHitDetectionRadius' => 20,\r\n-\t\t'datasetStroke'           => true,\r\n-\t\t'responsive'              => true,\r\n-\t\t'tooltipFillColor'        => $colors[2],\r\n-\t\t'tooltipFontColor'        => '#eee',\r\n-\t\t'tooltipCornerRadius'     => 0,\r\n-\t\t'tooltipYPadding'         => 10,\r\n-\t\t'tooltipXPadding'         => 10,\r\n-\t\t'barDatasetSpacing'       => 10,\r\n-\t\t'barValueSpacing'         => 200,\r\n-\r\n-\t);\r\n-\r\n-\techo json_encode( $config );\r\n-}\r\n-\r\n-function set_post_order_in_admin( $wp_query ) {\r\n-\tglobal $pagenow;\r\n-\r\n-\tif ( isset( $_GET['post_type'] ) ) {\r\n-\t\t$post_type = LP_Helper::sanitize_params_submitted( $_GET['post_type'] );\r\n-\t} else {\r\n-\t\t$post_type = '';\r\n-\t}\r\n-\r\n-\tif ( is_admin() && 'edit.php' == $pagenow && $post_type == LP_COURSE_CPT && ! isset( $_GET['orderby'] ) ) {\r\n-\t\t$wp_query->set( 'orderby', 'date' );\r\n-\t\t$wp_query->set( 'order', 'DSC' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F add_filter( 'pre_get_posts', 'set_post_order_in_admin' );\r\n-\r\n-function learn_press_copy_post_meta( $from_id, $to_id ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$course_meta = $wpdb->get_results(\r\n-\t\t$wpdb->prepare( \"SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d\", $from_id )\r\n-\t);\r\n-\r\n-\tif ( count( $course_meta ) != 0 ) {\r\n-\t\t$sql_query     = \"INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) \";\r\n-\t\t$sql_query_sel = array();\r\n-\r\n-\t\tforeach ( $course_meta as $meta ) {\r\n-\t\t\t$meta_key   = $meta->meta_key;\r\n-\t\t\t$meta_value = addslashes( $meta->meta_value );\r\n-\r\n-\t\t\t$sql_query_sel[] = \"SELECT {$to_id}, '$meta_key', '$meta_value'\";\r\n-\t\t}\r\n-\r\n-\t\t$sql_query .= implode( ' UNION ALL ', $sql_query_sel );\r\n-\t\t$wpdb->query( $sql_query );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Check to see if a plugin is already installed or not\r\n- *\r\n- * @param $plugin\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_plugin_install( $plugin ) {\r\n-\t$installed_plugins = get_plugins();\r\n-\r\n-\treturn isset( $installed_plugins[ $plugin ] );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get plugin file that contains the information from slug\r\n- *\r\n- * @param $slug\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_plugin_basename_from_slug( $slug ) {\r\n-\t$keys = array_keys( get_plugins() );\r\n-\r\n-\tforeach ( $keys as $key ) {\r\n-\t\tif ( preg_match( '|^' . $slug . '\u002F|', $key ) ) {\r\n-\t\t\treturn $key;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $slug;\r\n-}\r\n-\r\n-function _learn_press_reset_course_data() {\r\n-\tif ( empty( $_REQUEST['reset-course-data'] ) ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tlearn_press_reset_course_data( intval( $_REQUEST['reset-course-data'] ) );\r\n-\r\n-\twp_redirect( esc_url_raw( remove_query_arg( 'reset-course-data' ) ) );\r\n-}\r\n-\r\n-add_action( 'init', '_learn_press_reset_course_data' );\r\n-\r\n-function learn_press_admin_section_loop_item_class( $item, $section ) {\r\n-\t$classes = array(\r\n-\t\t'lp-section-item',\r\n-\t);\r\n-\r\n-\t$classes[] = 'lp-item-' . $item->post_type;\r\n-\r\n-\tif ( ! absint( $item->ID ) ) {\r\n-\t\t$classes[] = 'lp-item-empty lp-item-new focus';\r\n-\t}\r\n-\r\n-\t$classes = apply_filters( 'learn_press_section_loop_item_class', $classes, $item, $section );\r\n-\r\n-\tif ( $classes ) {\r\n-\t\techo 'class=\"' . join( ' ', $classes ) . '\"';\r\n-\t}\r\n-\r\n-\treturn $classes;\r\n-}\r\n-\r\n-function learn_press_disable_checked_ontop( $args ) {\r\n-\r\n-\tif ( 'course_category' == $args['taxonomy'] ) {\r\n-\t\t$args['checked_ontop'] = false;\r\n-\t}\r\n-\r\n-\treturn $args;\r\n-}\r\n-\r\n-add_filter( 'wp_terms_checklist_args', 'learn_press_disable_checked_ontop' );\r\n-\r\n-function learn_press_get_screens() {\r\n-\t$screen_id = sanitize_title( __( 'LearnPress', 'learnpress' ) );\r\n-\r\n-\t$screens = array(\r\n-\t\t'toplevel_page_' . $screen_id,\r\n-\t\t$screen_id . '_page_learn-press-statistics',\r\n-\t\t$screen_id . '_page_learn-press-addons',\r\n-\t\t$screen_id . '_page_learn-press-settings',\r\n-\t\t$screen_id . '_page_learn-press-tools',\r\n-\t);\r\n-\r\n-\tforeach ( array( LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT, LP_ORDER_CPT ) as $post_type ) {\r\n-\t\t$screens[] = 'edit-' . $post_type;\r\n-\t\t$screens[] = $post_type;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_screen_ids', $screens );\r\n-}\r\n-\r\n-function learn_press_is_post_type_screen( $post_type, $union = 'OR' ) {\r\n-\tif ( is_array( $post_type ) ) {\r\n-\t\t$return = null;\r\n-\r\n-\t\tforeach ( $post_type as $_post_type ) {\r\n-\t\t\t$check = learn_press_is_post_type_screen( $_post_type );\r\n-\r\n-\t\t\tif ( $union == 'OR' && $check ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $return == null ) {\r\n-\t\t\t\t$return = $check;\r\n-\t\t\t} else {\r\n-\t\t\t\t$return = $return && $check;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $union !== 'OR' ) {\r\n-\t\t\t\treturn $return;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t$screen = get_current_screen();\r\n-\r\n-\tif ( ! $screen ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$screen_id = $screen->id;\r\n-\r\n-\treturn in_array( $screen_id, array( $post_type, \"edit-{$post_type}\" ) );\r\n-}\r\n-\r\n-function learn_press_get_notice_dismiss( $context, $type = 'transient' ) {\r\n-\tif ( $type == 'transient' ) {\r\n-\t\treturn get_transient( 'learn_press_dismiss_notice_' . $context );\r\n-\t}\r\n-\r\n-\treturn get_option( 'learn_press_dismiss_notice_' . $context );\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_insert_section' ) ) {\r\n-\tfunction learn_press_course_insert_section( $section = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$section = wp_parse_args(\r\n-\t\t\t$section,\r\n-\t\t\tarray(\r\n-\t\t\t\t'section_name'        => '',\r\n-\t\t\t\t'section_course_id'   => 0,\r\n-\t\t\t\t'section_order'       => 0,\r\n-\t\t\t\t'section_description' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$section = stripslashes_deep( $section );\r\n-\r\n-\t\textract( $section );\r\n-\r\n-\t\t$insert_data = compact( 'section_name', 'section_course_id', 'section_order', 'section_description' );\r\n-\r\n-\t\t$wpdb->insert(\r\n-\t\t\t$wpdb->learnpress_sections,\r\n-\t\t\t$insert_data,\r\n-\t\t\tarray( '%s', '%d', '%d' )\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->insert_id;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_insert_section_item' ) ) {\r\n-\tfunction learn_press_course_insert_section_item( $item_data = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$wpdb->insert(\r\n-\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\tarray(\r\n-\t\t\t\t'section_id' => $item_data['section_id'],\r\n-\t\t\t\t'item_id'    => $item_data['item_id'],\r\n-\t\t\t\t'item_order' => $item_data['item_order'],\r\n-\t\t\t\t'item_type'  => $item_data['item_type'],\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%s',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->insert_id;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_duplicate_post' ) ) {\r\n-\t\u002F**\r\n-\t * Duplicate post.\r\n-\t *\r\n-\t * @param null  $post_id\r\n-\t * @param array $args\r\n-\t * @param bool  $meta\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tfunction learn_press_duplicate_post( $post_id = null, $args = array(), $meta = true ) {\r\n-\t\t$post = get_post( $post_id );\r\n-\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$default = array(\r\n-\t\t\t'comment_status' => $post->comment_status,\r\n-\t\t\t'ping_status'    => $post->ping_status,\r\n-\t\t\t'post_author'    => get_current_user_id(),\r\n-\t\t\t'post_content'   => $post->post_content,\r\n-\t\t\t'post_excerpt'   => $post->post_excerpt,\r\n-\t\t\t'post_parent'    => $post->post_parent,\r\n-\t\t\t'post_password'  => $post->post_password,\r\n-\t\t\t'post_status'    => 'draft',\r\n-\t\t\t'post_title'     => $post->post_title . __( 'Copy', 'learnpress' ),\r\n-\t\t\t'post_type'      => $post->post_type,\r\n-\t\t\t'to_ping'        => $post->to_ping,\r\n-\t\t\t'menu_order'     => $post->menu_order,\r\n-\t\t\t'exclude_meta'   => array(),\r\n-\t\t);\r\n-\r\n-\t\t$args         = wp_parse_args( $args, $default );\r\n-\t\t$exclude_meta = array();\r\n-\r\n-\t\tif ( ! empty( $args['exclude_meta'] ) ) {\r\n-\t\t\t$exclude_meta = $args['exclude_meta'];\r\n-\t\t\tunset( $args['exclude_meta'] );\r\n-\t\t}\r\n-\r\n-\t\t$new_post_id = wp_insert_post( $args );\r\n-\r\n-\t\tif ( ! is_wp_error( $new_post_id ) && $meta ) {\r\n-\t\t\tlearn_press_duplicate_post_meta( $post_id, $new_post_id, $exclude_meta );\r\n-\r\n-\t\t\t$taxonomies = get_object_taxonomies( $post->post_type );\r\n-\r\n-\t\t\tforeach ( $taxonomies as $taxonomy ) {\r\n-\t\t\t\t$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );\r\n-\t\t\t\twp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn_press_duplicate_post', $new_post_id, $post_id );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Duplicate post meta.\r\n- *\r\n- * @editor tungnx\r\n- * @sicne 3.0.0\r\n- * @version 4.0.1\r\n- *\u002F\r\n-if ( ! function_exists( 'learn_press_duplicate_post_meta' ) ) {\r\n-\tfunction learn_press_duplicate_post_meta( $old_post_id, $new_post_id, $excerpt = array() ) {\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$excerpt           = array_merge( array( '_edit_lock', '_edit_last' ), $excerpt );\r\n-\t\t\t$excerpt_name_keys = implode( \"','\", $excerpt );\r\n-\t\t\t$sql_query         = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\"INSERT INTO $lp_db->tb_postmeta (post_id, meta_key, meta_value)\r\n-\t\t\t\tSELECT %d, pmc.meta_key, pmc.meta_value\r\n-\t\t\t\tFROM $lp_db->tb_postmeta AS pmc\r\n-\t\t\t\tWHERE post_id = %d\r\n-\t\t\t\tAND meta_key not in ('{$excerpt_name_keys}')\r\n-\t\t\t\t\",\r\n-\t\t\t\t$new_post_id,\r\n-\t\t\t\t$old_post_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$lp_db->wpdb->query( $sql_query );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_sort_questions' ) ) {\r\n-\tfunction learn_press_sort_questions( $types ) {\r\n-\t\t$user_id        = get_current_user_id();\r\n-\t\t$question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );\r\n-\r\n-\t\tif ( ! empty( $question_types ) ) {\r\n-\t\t\t$sort = array();\r\n-\t\t\tarsort( $types );\r\n-\t\t\t$new_types = array();\r\n-\t\t\t$ktypes    = array_keys( $types );\r\n-\r\n-\t\t\tfor ( $i = 0; $i \u003C count( $ktypes ) - 1; $i ++ ) {\r\n-\t\t\t\t$max = $i;\r\n-\r\n-\t\t\t\tif ( ! isset( $question_types[ $ktypes[ $i ] ] ) ) {\r\n-\t\t\t\t\t$question_types[ $ktypes[ $i ] ] = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tfor ( $j = $i + 1; $j \u003C count( $ktypes ); $j ++ ) {\r\n-\t\t\t\t\tif ( isset( $question_types[ $ktypes[ $j ] ], $question_types[ $ktypes[ $max ] ] )\r\n-\t\t\t\t\t\t && $question_types[ $ktypes[ $j ] ] > $question_types[ $ktypes[ $max ] ]\r\n-\t\t\t\t\t) {\r\n-\t\t\t\t\t\t$max = $j;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$tmp            = $ktypes[ $i ];\r\n-\t\t\t\t$ktypes[ $i ]   = $ktypes[ $max ];\r\n-\t\t\t\t$ktypes[ $max ] = $tmp;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$ktypes = array_flip( $ktypes );\r\n-\t\t\t$types  = array_merge( $ktypes, $types );\r\n-\t\t}\r\n-\r\n-\t\treturn $types;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_duplicate_question' ) ) {\r\n-\tfunction learn_press_duplicate_question( $question_id = null, $quiz_id = null, $args = array() ) {\r\n-\t\tif ( ! $question_id || ! get_post( $question_id ) ) {\r\n-\t\t\treturn new WP_Error( sprintf( __( 'Question id %s does not exist.', 'learnpress' ), $question_id ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( $quiz_id && ! get_post( $quiz_id ) ) {\r\n-\t\t\treturn new WP_Error( sprintf( __( 'Quiz id %s does not exist.', 'learnpress' ), $quiz_id ) );\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\t\t$new_question_id = learn_press_duplicate_post( $question_id, $args );\r\n-\r\n-\t\tif ( $quiz_id ) {\r\n-\t\t\t$sql = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-                SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d\r\n-                    \",\r\n-\t\t\t\t$quiz_id,\r\n-\t\t\t\t$question_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$quiz_question_data = $wpdb->get_row( $sql );\r\n-\t\t\t$max_order          = $wpdb->get_var(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT max(question_order) FROM {$wpdb->prefix}learnpress_quiz_questions WHERE quiz_id = %d\",\r\n-\t\t\t\t\t$quiz_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $quiz_question_data ) {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_quiz_questions,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'quiz_id'        => $quiz_id,\r\n-\t\t\t\t\t\t'question_id'    => $new_question_id,\r\n-\t\t\t\t\t\t'question_order' => $max_order + 1,\r\n-\t\t\t\t\t\t'params'         => $quiz_question_data->params,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$sql = $wpdb->prepare(\r\n-\t\t\t\"\r\n-                    SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d\r\n-                \",\r\n-\t\t\t$question_id\r\n-\t\t);\r\n-\r\n-\t\t$question_answers = $wpdb->get_results( $sql );\r\n-\r\n-\t\tif ( $question_answers ) {\r\n-\t\t\tforeach ( $question_answers as $q_a ) {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'question_id' => $new_question_id,\r\n-\t\t\t\t\t\t'title'       => $q_a->title,\r\n-\t\t\t\t\t\t'value'       => $q_a->value,\r\n-\t\t\t\t\t\t'is_true'     => $q_a->is_true,\r\n-\t\t\t\t\t\t'order'       => $q_a->order,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $new_question_id;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_duplicate_quiz' ) ) {\r\n-\r\n-\tfunction learn_press_duplicate_quiz( $quiz_id = null, $args = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$new_quiz_id = learn_press_duplicate_post( $quiz_id, $args, true );\r\n-\t\t$quiz        = LP_Quiz::get_quiz( $quiz_id );\r\n-\t\tif ( ! $quiz ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$questions = $quiz->get_question_ids();\r\n-\r\n-\t\tif ( $questions ) {\r\n-\t\t\tforeach ( $questions as $question_id ) {\r\n-\t\t\t\t$new_question_id = learn_press_duplicate_post( $question_id );\r\n-\r\n-\t\t\t\t$sql = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d\r\n-                        \",\r\n-\t\t\t\t\t$quiz_id,\r\n-\t\t\t\t\t$question_id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$quiz_question_data = $wpdb->get_row( $sql );\r\n-\r\n-\t\t\t\tif ( $quiz_question_data ) {\r\n-\t\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t\t$wpdb->learnpress_quiz_questions,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'quiz_id'        => $new_quiz_id,\r\n-\t\t\t\t\t\t\t'question_id'    => $new_question_id,\r\n-\t\t\t\t\t\t\t'question_order' => $quiz_question_data->question_order,\r\n-\t\t\t\t\t\t\t'params'         => $quiz_question_data->params,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$sql = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                            SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d\r\n-                        \",\r\n-\t\t\t\t\t$question_id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$question_answers = $wpdb->get_results( $sql );\r\n-\t\t\t\tif ( $question_answers ) {\r\n-\t\t\t\t\tforeach ( $question_answers as $q_a ) {\r\n-\t\t\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'question_id' => $new_question_id,\r\n-\t\t\t\t\t\t\t\t'title'       => $q_a->title,\r\n-\t\t\t\t\t\t\t\t'value'       => $q_a->value,\r\n-\t\t\t\t\t\t\t\t'is_true'     => $q_a->is_true,\r\n-\t\t\t\t\t\t\t\t'order'       => $q_a->order,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $new_quiz_id;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get general data to render in chart\r\n- *\r\n- * @param null  $from\r\n- * @param null  $by\r\n- * @param float $time_ago\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_get_chart_general( $from = null, $by = null, $time_ago = 0 ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$labels   = array();\r\n-\t$datasets = array();\r\n-\r\n-\tif ( is_null( $from ) ) {\r\n-\t\t$from = current_time( 'mysql', 1 );\r\n-\t}\r\n-\r\n-\tif ( is_null( $by ) ) {\r\n-\t\t$by = 'days';\r\n-\t}\r\n-\r\n-\t$results = array(\r\n-\t\t'all'     => array(),\r\n-\t\t'public'  => array(),\r\n-\t\t'pending' => array(),\r\n-\t\t'free'    => array(),\r\n-\t\t'paid'    => array(),\r\n-\t);\r\n-\r\n-\t$results = array(\r\n-\t\t'course'  => array(),\r\n-\t\t'lesson'  => array(),\r\n-\t\t'quiz'    => array(),\r\n-\t\t'student' => array(),\r\n-\t\t'teacher' => array(),\r\n-\t\t'revenue' => array(),\r\n-\t);\r\n-\r\n-\t$from_time   = is_numeric( $from ) ? $from : strtotime( $from );\r\n-\t$_from       = '';\r\n-\t$_to         = '';\r\n-\t$_sql_format = '';\r\n-\t$date_format = '';\r\n-\r\n-\tswitch ( $by ) {\r\n-\t\tcase 'days':\r\n-\t\t\t$date_format = 'M d Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$_to         = date( 'Y-m-d', $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m-%d';\r\n-\t\t\t$_key_format = 'Y-m-d';\r\n-\t\t\tbreak;\r\n-\r\n-\t\tcase 'months':\r\n-\t\t\t$date_format = 'M Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y-%m';\r\n-\t\t\t$_key_format = 'Y-m';\r\n-\t\t\tbreak;\r\n-\r\n-\t\tcase 'years':\r\n-\t\t\t$date_format = 'Y';\r\n-\t\t\t$_from       = - $time_ago + 1;\r\n-\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\r\n-\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\r\n-\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\r\n-\t\t\t$_sql_format = '%Y';\r\n-\t\t\t$_key_format = 'Y';\r\n-\t\t\tbreak;\r\n-\r\n-\t}\r\n-\r\n-\t$query_where = '';\r\n-\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\r\n-\t\t$user_id      = learn_press_get_current_user_id();\r\n-\t\t$query_where .= $wpdb->prepare( ' AND c.post_author=%d ', $user_id );\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\t\t\tFROM {$wpdb->posts} c\r\n-\t\t\t\tWHERE 1\r\n-\t\t\t\t{$query_where}\r\n-\t\t\t\tAND c.post_status IN('publish', 'pending') AND c.post_type = %s\r\n-\t\t\t\tGROUP BY d\r\n-\t\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['all'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\t\t\tFROM {$wpdb->posts} c\r\n-\t\t\t\tWHERE 1\r\n-\t\t\t\t{$query_where}\r\n-\t\t\t\tAND c.post_status = %s AND c.post_type = %s\r\n-\t\t\t\tGROUP BY d\r\n-\t\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'publish',\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['publish'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\r\n-\t\t\t\tFROM {$wpdb->posts} c\r\n-\t\t\t\tINNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID\r\n-\t\t\t\tWHERE 1\r\n-\t\t\t\t{$query_where}\r\n-\t\t\t\tAND c.post_status = %s AND c.post_type = %s\r\n-\t\t\t\tGROUP BY d\r\n-\t\t\t\tHAVING d BETWEEN %s AND %s\r\n-\t\t\t\tORDER BY d ASC\r\n-\t\t\t\",\r\n-\t\t$_sql_format,\r\n-\t\t'publish',\r\n-\t\t'lp_course',\r\n-\t\t$_from,\r\n-\t\t$_to\r\n-\t);\r\n-\r\n-\tif ( $_results = $wpdb->get_results( $query ) ) {\r\n-\t\tforeach ( $_results as $k => $v ) {\r\n-\t\t\t$results['paid'][ $v->d ] = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\r\n-\t\t$date     = strtotime( \"$i $by\", $from_time );\r\n-\t\t$labels[] = date( $date_format, $date );\r\n-\t\t$key      = date( $_key_format, $date );\r\n-\r\n-\t\t$all     = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\r\n-\t\t$publish = ! empty( $results['publish'][ $key ] ) ? $results['publish'][ $key ]->c : 0;\r\n-\t\t$paid    = ! empty( $results['paid'][ $key ] ) ? $results['paid'][ $key ]->c : 0;\r\n-\r\n-\t\t$datasets[0]['data'][] = $all;\r\n-\t\t$datasets[1]['data'][] = $publish;\r\n-\t\t$datasets[2]['data'][] = $all - $publish;\r\n-\t\t$datasets[3]['data'][] = $paid;\r\n-\t\t$datasets[4]['data'][] = $all - $paid;\r\n-\t}\r\n-\r\n-\t$dataset_params = array(\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'All', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Publish', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Pending', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Paid', 'learnpress' ),\r\n-\t\t),\r\n-\t\tarray(\r\n-\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\r\n-\t\t\t'color2' => '#FFF',\r\n-\t\t\t'label'  => __( 'Free', 'learnpress' ),\r\n-\t\t),\r\n-\t);\r\n-\r\n-\tforeach ( $dataset_params as $k => $v ) {\r\n-\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\r\n-\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\r\n-\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\r\n-\t\t$datasets[ $k ]['label']                = $v['label'];\r\n-\t}\r\n-\r\n-\treturn array(\r\n-\t\t'labels'   => $labels,\r\n-\t\t'datasets' => $datasets,\r\n-\t\t'sql'      => $query,\r\n-\t);\r\n-}\r\n-\r\n-function learn_press_get_default_section( $section = null ) {\r\n-\tif ( ! $section ) {\r\n-\t\t$section = new stdClass();\r\n-\t}\r\n-\tforeach (\r\n-\t\tarray(\r\n-\t\t\t'section_id'          => null,\r\n-\t\t\t'section_name'        => '',\r\n-\t\t\t'section_course_id'   => null,\r\n-\t\t\t'section_order'       => null,\r\n-\t\t\t'section_description' => '',\r\n-\t\t) as $k => $v\r\n-\t) {\r\n-\t\tif ( ! property_exists( $section, $k ) ) {\r\n-\t\t\t$section->{$k} = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $section;\r\n-}\r\n-\r\n-\u002F**\r\n- * Display time fields for a post in editing mode.\r\n- *\r\n- * @param int $edit\r\n- * @param int $for_post\r\n- * @param int $tab_index\r\n- * @param int $multi\r\n- *\u002F\r\n-function learn_press_touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {\r\n-\tglobal $wp_locale;\r\n-\t$post = get_post();\r\n-\r\n-\tif ( $for_post ) {\r\n-\t\t$edit = ! ( in_array(\r\n-\t\t\t$post->post_status,\r\n-\t\t\tarray(\r\n-\t\t\t\t'draft',\r\n-\t\t\t\t'pending',\r\n-\t\t\t)\r\n-\t\t) && ( ! $post->post_date_gmt || '0000-00-00 00:00:00' == $post->post_date_gmt ) );\r\n-\t}\r\n-\r\n-\t$tab_index_attribute = '';\r\n-\tif ( (int) $tab_index > 0 ) {\r\n-\t\t$tab_index_attribute = \" tabindex=\\\"$tab_index\\\"\";\r\n-\t}\r\n-\r\n-\t$time_adj  = current_time( 'timestamp' );\r\n-\t$post_date = ( $for_post ) ? $post->post_date : get_comment()->comment_date;\r\n-\t$jj        = ( $edit ) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj );\r\n-\t$mm        = ( $edit ) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj );\r\n-\t$aa        = ( $edit ) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj );\r\n-\t$hh        = ( $edit ) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj );\r\n-\t$mn        = ( $edit ) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj );\r\n-\t$ss        = ( $edit ) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj );\r\n-\r\n-\t$cur_jj = gmdate( 'd', $time_adj );\r\n-\t$cur_mm = gmdate( 'm', $time_adj );\r\n-\t$cur_aa = gmdate( 'Y', $time_adj );\r\n-\t$cur_hh = gmdate( 'H', $time_adj );\r\n-\t$cur_mn = gmdate( 'i', $time_adj );\r\n-\r\n-\t$map = array(\r\n-\t\t'mm' => array( $mm, $cur_mm ),\r\n-\t\t'jj' => array( $jj, $cur_jj ),\r\n-\t\t'aa' => array( $aa, $cur_aa ),\r\n-\t\t'hh' => array( $hh, $cur_hh ),\r\n-\t\t'mn' => array( $mn, $cur_mn ),\r\n-\t);\r\n-\r\n-\tforeach ( $map as $timeunit => $value ) {\r\n-\t\tlist( $unit, $curr ) = $value;\r\n-\r\n-\t\techo '\u003Cinput type=\"hidden\" id=\"hidden_' . $timeunit . '\" name=\"hidden_' . $timeunit . '\" value=\"' . $unit . '\" \u002F>' . \"\\n\";\r\n-\t\t$cur_timeunit = 'cur_' . $timeunit;\r\n-\t\techo '\u003Cinput type=\"hidden\" id=\"' . $cur_timeunit . '\" name=\"' . $cur_timeunit . '\" value=\"' . $curr . '\" \u002F>' . \"\\n\";\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Return id of current screen.\r\n- *\r\n- * @return bool|string\r\n- * @since 3.2.6\r\n- *\u002F\r\n-function learn_press_get_screen_id() {\r\n-\t_deprecated_function( __METHOD__, '4.2.3.6' );\r\n-\t$screen    = get_current_screen();\r\n-\t$screen_id = $screen ? $screen->id : false;\r\n-\r\n-\treturn $screen_id;\r\n-}\r\n-\r\n-require_once 'class-lp-post-type-actions.php';\r\n+\u003C?php\n+\u002F**\n+ * Common functions used for admin\n+ *\n+ * @package   LearnPress\n+ * @author    ThimPress\n+ * @version   1.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! function_exists( 'learn_press_add_row_action_link' ) ) {\n+\t\u002F**\n+\t * Setup action links to the admin course, lesson, quiz, question. e.g: Add Duplicate link, hide View link for lesson, quiz so on.\n+\t *\n+\t * @param $actions\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tfunction learn_press_add_row_action_link( $actions ) {\n+\n+\t\tglobal $post;\n+\n+\t\tif ( LP_COURSE_CPT == $post->post_type ) {\n+\t\t\t$duplicate_link = '#';\n+\t\t\t$duplicate_link = array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'link'  => $duplicate_link,\n+\t\t\t\t\t'title' => _x( 'Duplicate', 'copy course', 'learnpress' ),\n+\t\t\t\t\t'class' => 'lp-duplicate-post lp-duplicate-course',\n+\t\t\t\t\t'data'  => $post->ID,\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\t$links = apply_filters( 'learn_press_row_action_links', $duplicate_link );\n+\n+\t\t\tif ( count( $links ) > 1 ) {\n+\t\t\t\t$drop_down = array( '\u003Cul class=\"lpr-row-action-dropdown\">' );\n+\n+\t\t\t\tforeach ( $links as $link ) {\n+\t\t\t\t\t$drop_down[] = '\u003Cli>' . sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\" data-post-id=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t$link['link'],\n+\t\t\t\t\t\t$link['class'],\n+\t\t\t\t\t\t$link['data'],\n+\t\t\t\t\t\t$link['title']\n+\t\t\t\t\t) . '\u003C\u002Fli>';\n+\t\t\t\t}\n+\n+\t\t\t\t$drop_down[] = '\u003C\u002Ful>';\n+\t\t\t\t$link        = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lpr-row-actions\">\u003Ca href=\"%s\">%s\u003C\u002Fa>%s\u003C\u002Fdiv>',\n+\t\t\t\t\t'javascript: void(0);',\n+\t\t\t\t\t__( 'Course', 'learnpress' ),\n+\t\t\t\t\tjoin( \"\\n\", $drop_down )\n+\t\t\t\t);\n+\n+\t\t\t} else {\n+\t\t\t\t$link = array_shift( $links );\n+\t\t\t\t$link = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\" data-post-id=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t$link['link'],\n+\t\t\t\t\t$link['class'],\n+\t\t\t\t\t$link['data'],\n+\t\t\t\t\t$link['title']\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$actions['lp-duplicate-row-action'] = $link;\n+\n+\t\t} elseif ( LP_QUIZ_CPT === $post->post_type ) {\n+\t\t\tunset( $actions['view'] );\n+\t\t\t$link                               = sprintf(\n+\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-quiz\" data-post-id=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t$post->ID,\n+\t\t\t\t_x( 'Duplicate', 'copy quiz', 'learnpress' )\n+\t\t\t);\n+\t\t\t$actions['lp-duplicate-row-action'] = $link;\n+\n+\t\t} elseif ( LP_QUESTION_CPT === $post->post_type ) {\n+\t\t\tunset( $actions['view'] );\n+\t\t\t$link                               = sprintf(\n+\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-question\" data-post-id=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t$post->ID,\n+\t\t\t\t_x( 'Duplicate', 'copy question', 'learnpress' )\n+\t\t\t);\n+\t\t\t$actions['lp-duplicate-row-action'] = $link;\n+\n+\t\t} elseif ( LP_LESSON_CPT === $post->post_type ) {\n+\t\t\tunset( $actions['view'] );\n+\t\t\t$link                               = sprintf(\n+\t\t\t\t'\u003Ca href=\"#\" class=\"lp-duplicate-post lp-duplicate-lesson\" data-post-id=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t$post->ID,\n+\t\t\t\t_x( 'Duplicate', 'copy lesson', 'learnpress' )\n+\t\t\t);\n+\t\t\t$actions['lp-duplicate-row-action'] = $link;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Frow-action-links', $actions );\n+\t}\n+\n+\tadd_filter( 'post_row_actions', 'learn_press_add_row_action_link' );\n+\tadd_filter( 'page_row_actions', 'learn_press_add_row_action_link' );\n+}\n+\n+\u002F*function learn_press_is_hidden_post_box( $id, $user_id = 0 ) {\n+\tif ( ! $user_id ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\n+\t$data = learn_press_get_user_option( 'post-closed-box' );\n+\tif ( ! $data ) {\n+\t\t$data = array();\n+\t}\n+\n+\treturn false !== array_search( $id, $data );\n+}*\u002F\n+\n+\u002F**\n+ * List all pages as a dropdown with \"Add New Page\" option\n+ *\n+ * @param            $name\n+ * @param bool|false $selected\n+ * @param array      $args\n+ *\n+ * @return mixed|string\n+ *\u002F\n+function learn_press_pages_dropdown( $name, $selected = false, $args = array() ) {\n+\t$id           = null;\n+\t$class        = null;\n+\t$css          = null;\n+\t$before       = array(\n+\t\t'add_new_page' => __( '[ Add a new page ]', 'learnpress' ),\n+\t);\n+\t$after        = null;\n+\t$echo         = true;\n+\t$allow_create = true;\n+\n+\tif ( func_num_args() == 1 && is_array( $name ) ) {\n+\t\t$args = $name;\n+\t}\n+\n+\tis_array( $args ) && extract( $args );\n+\n+\tif ( empty( $id ) ) {\n+\t\t$id = $name;\n+\t}\n+\n+\t$class .= 'list-pages lp-list-pages lp-tom-select';\n+\n+\t$args    = array(\n+\t\t'name'             => $name,\n+\t\t'id'               => $id,\n+\t\t'sort_column'      => 'menu_order',\n+\t\t'sort_order'       => 'ASC',\n+\t\t'show_option_none' => __( 'Select Page', 'learnpress' ),\n+\t\t'class'            => $class,\n+\t\t'echo'             => false,\n+\t\t'selected'         => $selected,\n+\t\t'allow_create'     => true,\n+\t);\n+\t$output  = wp_dropdown_pages( $args );\n+\t$replace = '';\n+\n+\tif ( $class ) {\n+\t\t$replace .= ' class=\"' . $class . '\"';\n+\t}\n+\n+\tif ( $css ) {\n+\t\t$replace .= ' style=\"' . $css . '\"';\n+\t}\n+\n+\t$replace .= ' data-selected=\"' . $selected . '\"';\n+\t$replace .= \" data-placeholder='\" . __( 'Select a page&hellip;', 'learnpress' ) . \"' id=\";\n+\t$output   = '\u003Cdiv class=\"list-pages-wrapper\">' . str_replace( ' id=', $replace, $output );\n+\n+\tif ( $before ) {\n+\t\t$before_output = array();\n+\n+\t\tforeach ( $before as $v => $l ) {\n+\t\t\t$before_output[] = sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', $v, $l );\n+\t\t}\n+\n+\t\t$before_output = join( \"\\n\", $before_output );\n+\t\t$output        = preg_replace(\n+\t\t\t'!(\u003Coption class=\".*\" value=\"[0-9]+\".*>.*\u003C\u002Foption>)!',\n+\t\t\t$before_output . \"\\n$1\",\n+\t\t\t$output,\n+\t\t\t1\n+\t\t);\n+\t}\n+\n+\t$output = str_replace( '\u003Coption class=\"level-0\" value=\"00000\">#0 (no title)\u003C\u002Foption>', '', $output );\n+\n+\tif ( $selected && get_post_status( $selected ) !== 'publish' ) {\n+\t\t$selected = 0;\n+\t}\n+\n+\tif ( $allow_create ) {\n+\t\tob_start(); ?>\n+\n+\t\t\u003C?php echo esc_html( _x( 'or', 'dropdown pages', 'learnpress' ) ); ?>\n+\n+\t\t\u003Cbutton class=\"button button-quick-add-page\" data-id=\"\u003C?php echo esc_attr( $id ); ?>\" type=\"button\">\n+\t\t\t\u003C?php esc_html_e( 'Create new', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\t\u003C?php echo '\u003C\u002Fdiv>'; ?>\n+\n+\t\t\u003Cp class=\"quick-add-page-inline \u003C?php echo esc_attr( $id ); ?> hide-if-js\">\n+\t\t\t\u003Cinput type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'New page title', 'learnpress' ); ?>\"\u002F>\n+\t\t\t\u003Cbutton class=\"button\" type=\"button\">\n+\t\t\t\t\u003C?php esc_html_e( 'Ok [Enter]', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003Ca href=\"\">\u003C?php esc_html_e( 'Cancel [ESC]', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003Cp class=\"quick-add-page-actions \u003C?php echo esc_attr( $id ); ?>\u003C?php echo esc_attr( $selected ? '' : ' hide-if-js' ); ?>\">\n+\t\t\t\u003Ca class=\"edit-page\" href=\"\u003C?php echo get_edit_post_link( $selected ); ?>\"\n+\t\t\t\ttarget=\"_blank\">\u003C?php esc_html_e( 'Edit page', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t&#124;\n+\t\t\t\u003Ca class=\"view-page\" href=\"\u003C?php echo get_permalink( $selected ); ?>\"\n+\t\t\t\ttarget=\"_blank\">\u003C?php esc_html_e( 'View page', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fp>\n+\t\t\u003C!-- Not use input on here, will be not save value -->\n+\t\t\u003Cdiv class=\"field_name\" name=\"\u003C?php echo esc_attr( $id ); ?>\">\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t\t$output .= ob_get_clean();\n+\t} else {\n+\t\t$output .= '\u003C\u002Fdiv>';\n+\t}\n+\n+\t$output = sprintf( '\u003Cdiv class=\"learn-press-dropdown-pages\">%s\u003C\u002Fdiv>', $output );\n+\n+\tif ( $echo ) {\n+\t\t$allowed_html           = wp_kses_allowed_html( 'post' );\n+\t\t$allowed_html['select'] = [\n+\t\t\t'name'  => [],\n+\t\t\t'class' => [],\n+\t\t];\n+\t\t$allowed_html['option'] = [\n+\t\t\t'value'    => [],\n+\t\t\t'selected' => [],\n+\t\t\t'class'    => [],\n+\t\t];\n+\t\t$allowed_html['input']  = [\n+\t\t\t'type'        => [],\n+\t\t\t'placeholder' => [],\n+\t\t\t'name'        => [],\n+\t\t\t'class'       => [],\n+\t\t];\n+\t\t$allowed_html['div']    = [\n+\t\t\t'name'  => [],\n+\t\t\t'class' => [],\n+\t\t];\n+\n+\t\techo wp_kses( $output, $allowed_html );\n+\t}\n+\n+\treturn $output;\n+}\n+\n+\u002F**\n+ * List all registered question types into dropdown\n+ *\n+ * @param array\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_dropdown_question_types( $args = array() ) {\n+\t$args = wp_parse_args(\n+\t\t$args,\n+\t\tarray(\n+\t\t\t'name'     => 'learn-press-dropdown-question-types',\n+\t\t\t'id'       => '',\n+\t\t\t'class'    => '',\n+\t\t\t'selected' => '',\n+\t\t\t'echo'     => true,\n+\t\t)\n+\t);\n+\n+\tif ( ! $args['id'] ) {\n+\t\t$args['id'] = $args['name'];\n+\t}\n+\n+\t$args['class'] = 'lp-dropdown-question-types' . ( $args['class'] ? ' ' . $args['class'] : '' );\n+\t$types         = learn_press_question_types();\n+\t$output        = sprintf(\n+\t\t'\u003Cselect name=\"%s\" id=\"%s\" class=\"%s\"%s>',\n+\t\t$args['name'],\n+\t\t$args['id'],\n+\t\t$args['class'],\n+\t\t$args['selected'] ? 'data-selected=\"' . $args['selected'] . '\"' : ''\n+\t);\n+\n+\tforeach ( $types as $slug => $name ) {\n+\t\t$output .= sprintf(\n+\t\t\t'\u003Coption value=\"%s\"%s>%s\u003C\u002Foption>',\n+\t\t\t$slug,\n+\t\t\tselected( $slug == $args['selected'], true, false ),\n+\t\t\t$name\n+\t\t);\n+\t}\n+\n+\t$output .= '\u003C\u002Fselect>';\n+\n+\tif ( $args['echo'] ) {\n+\t\techo wp_kses_post( $output );\n+\t}\n+\n+\treturn $output;\n+}\n+\n+\u002F**\n+ * List all registered question types into dropdown\n+ *\n+ * @param array       $args\n+ * @param LP_Question $question\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_field_question_duration( $args = array(), $question = null ) {\n+\tglobal $post;\n+\n+\t$duration_type = get_post_meta( $post->ID, '_lp_duration_type', true );\n+\t$value         = get_post_meta( $question->id, '_question_duration', true );\n+\n+\t$wrap_class = 'learn-press-question-duration';\n+\n+\tif ( 'questions_duration' !== $duration_type ) {\n+\t\t$wrap_class .= ' hide';\n+\t}\n+\n+\t$args = wp_parse_args(\n+\t\t$args,\n+\t\tarray(\n+\t\t\t'name'        => 'learn_press_question[' . $question->id . '][duration]',\n+\t\t\t'id'          => 'learn-press-question-duration-' . $question->id,\n+\t\t\t'class'       => 'learn-press-question-duration',\n+\t\t\t'selected'    => '',\n+\t\t\t'echo'        => true,\n+\t\t\t'value'       => 0,\n+\t\t\t'step'        => 1,\n+\t\t\t'min'         => 0,\n+\t\t\t'placeholder' => __( 'Minutes', 'learnpress' ),\n+\t\t)\n+\t);\n+\n+\t$args['value'] = $value;\n+\n+\tif ( ! $args['id'] ) {\n+\t\t$args['id'] = $args['name'];\n+\t}\n+\n+\treturn '\u003Cspan class=\"' . esc_attr( $wrap_class ) . '\">' . sprintf(\n+\t\t'\u003Cinput type=\"number\" class=\"%s\" name=\"%s\" id=\"%s\" value=\"%s\" step=\"%s\" min=\"%s\" max=\"%s\" placeholder=\"%s\"\u002F>',\n+\t\t$args['class'],\n+\t\t$args['name'],\n+\t\tempty( $args['clone'] ) ? $args['id'] : '',\n+\t\t$args['value'],\n+\t\t$args['step'],\n+\t\t$args['min'],\n+\t\t! empty( $args['max'] ) ? $args['max'] : '',\n+\t\t$args['placeholder']\n+\t) . $args['placeholder'] . '\u003C\u002Fspan>';\n+}\n+\n+\u002F**\n+ * Displays email formats support into a dropdown\n+ *\n+ * @param array $args\n+ *\n+ * @return string\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_email_formats_dropdown( $args = array() ) {\n+\t$args = wp_parse_args(\n+\t\t$args,\n+\t\tarray(\n+\t\t\t'name'        => 'learn-press-dropdown-email-formats',\n+\t\t\t'id'          => '',\n+\t\t\t'class'       => '',\n+\t\t\t'selected'    => '',\n+\t\t\t'option_none' => '',\n+\t\t\t'echo'        => true,\n+\t\t)\n+\t);\n+\n+\t$formats = array(\n+\t\t'plain_text' => __( 'Plain Text', 'learnpress' ),\n+\t\t'html'       => __( 'HTML', 'learnpress' ),\n+\t);\n+\n+\tif ( empty( $args['id'] ) ) {\n+\t\t$args['id'] = sanitize_file_name( $args['name'] );\n+\t}\n+\n+\t$output = sprintf( '\u003Cselect name=\"%s\" id=\"%s\" class=\"%s\" %s>', $args['name'], $args['id'], $args['class'], '' );\n+\n+\tif ( $args['option_none'] ) {\n+\t\tif ( is_array( $args['option_none'] ) ) {\n+\t\t\t$text  = reset( $args['option_none'] );\n+\t\t\t$value = key( $args['option_none'] );\n+\t\t} else {\n+\t\t\t$text  = $args['option_none'];\n+\t\t\t$value = '';\n+\t\t}\n+\n+\t\t$output .= sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', $value, $text );\n+\t}\n+\n+\tforeach ( $formats as $name => $text ) {\n+\t\t$output .= sprintf(\n+\t\t\t'\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>',\n+\t\t\t$name,\n+\t\t\tselected( $args['selected'] == $name, true, false ),\n+\t\t\t$text\n+\t\t) . \"\\n\";\n+\t}\n+\t$output .= '\u003C\u002Fselect>';\n+\n+\tif ( $args['echo'] ) {\n+\t\techo wp_kses_post( $output );\n+\t}\n+\n+\treturn $output;\n+}*\u002F\n+\n+\u002F**\n+ * Return array of email formats.\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_email_formats() {\n+\t$formats = array(\n+\t\t'plain' => esc_html__( 'Plain Text', 'learnpress' ),\n+\t\t'html'  => esc_html__( 'HTML', 'learnpress' ),\n+\t);\n+\n+\treturn apply_filters( 'learn-press\u002Femail-formats', $formats );\n+}\n+\n+function learn_press_trim_content( $content, $count = 0 ) {\n+\t$content = preg_replace( '\u002F(?\u003C=\\S,)(?=\\S)\u002F', ' ', $content );\n+\t$content = str_replace( \"\\n\", ' ', $content );\n+\t$content = explode( ' ', $content );\n+\n+\t$count = $count > 0 ? $count : sizeof( $content ) - 1;\n+\t$full  = $count >= sizeof( $content ) - 1;\n+\n+\t$content = array_slice( $content, 0, $count );\n+\t$content = implode( ' ', $content );\n+\n+\tif ( ! $full ) {\n+\t\t$content .= '...';\n+\t}\n+\n+\treturn $content;\n+}\n+\n+\u002F**\n+ * Get list of themes that support LearnPress.\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_education_themes() {\n+\n+\t\u002F\u002F New theme can be added here\n+\treturn apply_filters(\n+\t\t'learn-press\u002Feducation-themes',\n+\t\tarray(\n+\t\t\t'23451388' => 'kindergarten',\n+\t\t\t'22773871' => 'ivy-school',\n+\t\t\t'20370918' => 'wordpress-lms',\n+\t\t\t'14058034' => 'eduma',\n+\t\t\t'17097658' => 'coach',\n+\t\t\t'11797847' => 'lms',\n+\t\t)\n+\t);\n+}\n+\n+if ( ! function_exists( 'learn_press_get_item_referral' ) ) {\n+\t\u002F**\n+\t * Set item link referral.\n+\t *\n+\t * @param int|string $item_id\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tfunction learn_press_get_item_referral( $item_id ) {\n+\t\t$affiliate_links = array(\n+\t\t\t14058034 => 'https:\u002F\u002F1.envato.market\u002FG5Ook', \u002F\u002F Eduma\n+\t\t\t22773871 => 'https:\u002F\u002F1.envato.market\u002FakrzZ', \u002F\u002F Ivy-school\n+\t\t\t20370918 => 'https:\u002F\u002F1.envato.market\u002F13Zkd', \u002F\u002F Course Builder LMS\n+\t\t\t17097658 => 'https:\u002F\u002F1.envato.market\u002FXq2Ra', \u002F\u002F Coach\n+\t\t\t23451388 => 'https:\u002F\u002F1.envato.market\u002FoWov9', \u002F\u002F StarKid\n+\t\t\t11797847 => 'https:\u002F\u002F1.envato.market\u002FzknvM', \u002F\u002F Epsilon\n+\t\t\t13321455 => 'https:\u002F\u002F1.envato.market\u002FG5Rkk', \u002F\u002F Sailing\n+\t\t\t19029758 => 'https:\u002F\u002F1.envato.market\u002FmAYdZ', \u002F\u002F Travel Tour Booking\n+\t\t\t12124219 => 'https:\u002F\u002F1.envato.market\u002FqJYdO', \u002F\u002F Resca\n+\t\t\t18828322 => 'https:\u002F\u002F1.envato.market\u002FVW2K3', \u002F\u002F LuxStay\n+\t\t\t8254575  => 'https:\u002F\u002F1.envato.market\u002FxWYdO', \u002F\u002F Squareroot\n+\t\t\t13782850 => 'https:\u002F\u002F1.envato.market\u002FQo71z',\n+\t\t\t14025178 => 'https:\u002F\u002F1.envato.market\u002F9R0oQ',\n+\t\t\t17739078 => 'https:\u002F\u002F1.envato.market\u002FjkYda',\n+\t\t\t16210005 => 'https:\u002F\u002F1.envato.market\u002F56oJD',\n+\t\t\t11733602 => 'https:\u002F\u002F1.envato.market\u002FkeYdv',\n+\t\t\t13513609 => 'https:\u002F\u002F1.envato.market\u002Faq7dQ',\n+\t\t\t19693761 => 'https:\u002F\u002F1.envato.market\u002FA976D',\n+\t\t\t12532973 => 'https:\u002F\u002F1.envato.market\u002FGe79B',\n+\t\t\t19305239 => 'https:\u002F\u002F1.envato.market\u002F10JAB',\n+\t\t\t23716060 => 'https:\u002F\u002F1.envato.market\u002FZO7WW',\n+\t\t\t20466233 => 'https:\u002F\u002F1.envato.market\u002FgjYd0',\n+\t\t\t21070438 => 'https:\u002F\u002F1.envato.market\u002FxPz65',\n+\t\t\t20794183 => 'https:\u002F\u002F1.envato.market\u002Fo1YdY',\n+\t\t\t20979215 => 'https:\u002F\u002F1.envato.market\u002F03R5V',\n+\t\t\t11151269 => 'https:\u002F\u002F1.envato.market\u002FBr7L4',\n+\t\t\t8905392  => 'https:\u002F\u002F1.envato.market\u002FzEYd7',\n+\t\t\t23168294 => 'https:\u002F\u002F1.envato.market\u002FWn7on',\n+\t\t\t17719422 => 'https:\u002F\u002F1.envato.market\u002F0WVaL',\n+\t\t\t21680592 => 'https:\u002F\u002F1.envato.market\u002FqqO6y',\n+\t\t);\n+\n+\t\treturn $affiliate_links[ $item_id ] ?? 'https:\u002F\u002Fthemeforest.net\u002Fuser\u002Fthimpress\u002Fportfolio\u002F';\n+\t}\n+}\n+\n+\u002F**\n+ * Count number of orders between to dates\n+ *\n+ * @param string\n+ * @param int\n+ *\n+ * @return int\n+ *\u002F\n+function learn_press_get_order_by_time( $by, $time ) {\n+\tglobal $wpdb;\n+\n+\t$user_id = get_current_user_id();\n+\n+\t$y = gmdate( 'Y', $time );\n+\t$m = gmdate( 'm', $time );\n+\t$d = gmdate( 'd', $time );\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$orders = $wpdb->get_var(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT COUNT(*)\n+\t\t\t\t\tFROM $wpdb->posts AS p\n+\t\t\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\n+\t\t\t\t\tWHERE p.post_author = %d\n+\t\t\t\t\tAND p.post_type = %s\n+\t\t\t\t\tAND p.post_status = %s\n+\t\t\t\t\tAND m.meta_key = %s\n+\t\t\t\t\tAND m.meta_value = %s\n+\t\t\t\t\tAND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s AND DAY(p.post_date) = %s\",\n+\t\t\t\t\t$user_id,\n+\t\t\t\t\tLP_ORDER_CPT,\n+\t\t\t\t\t'publish',\n+\t\t\t\t\t'_learn_press_transaction_status',\n+\t\t\t\t\t'completed',\n+\t\t\t\t\t$y,\n+\t\t\t\t\t$m,\n+\t\t\t\t\t$d\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tbreak;\n+\t\tcase 'months':\n+\t\t\t$orders = $wpdb->get_var(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT COUNT(*)\n+\t\t\t\t\tFROM $wpdb->posts AS p\n+\t\t\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\n+\t\t\t\t\tWHERE p.post_author = %d\n+\t\t\t\t\tAND p.post_type = %s\n+\t\t\t\t\tAND p.post_status = %s\n+\t\t\t\t\tAND m.meta_key = %s\n+\t\t\t\t\tAND m.meta_value = %s\n+\t\t\t\t\tAND YEAR(p.post_date) = %s AND MONTH(p.post_date) = %s\",\n+\t\t\t\t\t$user_id,\n+\t\t\t\t\tLP_ORDER_CPT,\n+\t\t\t\t\t'publish',\n+\t\t\t\t\t'_learn_press_transaction_status',\n+\t\t\t\t\t'completed',\n+\t\t\t\t\t$y,\n+\t\t\t\t\t$m\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tbreak;\n+\t}\n+\n+\treturn $orders;\n+}\n+\n+\u002F**\n+ * Count number of orders by status\n+ *\n+ * @param string Status of the orders\n+ *\n+ * @return int\n+ *\u002F\n+function learn_press_get_courses_by_status( $status ) {\n+\tglobal $wpdb;\n+\n+\t$user_id = get_current_user_id();\n+\n+\t$courses = $wpdb->get_var(\n+\t\t$wpdb->prepare(\n+\t\t\t\"SELECT COUNT(*)\n+\t\t\tFROM $wpdb->posts\n+\t\t\tWHERE post_author = %d\n+\t\t\tAND post_type = %s\n+\t\t\tAND post_status = %s\",\n+\t\t\t$user_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$status\n+\t\t)\n+\t);\n+\n+\treturn $courses;\n+}\n+\n+\u002F**\n+ * Count number of orders by price\n+ *\n+ * @param string\n+ *\n+ * @return int\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_courses_by_price( $fee ) {\n+\tglobal $wpdb;\n+\n+\t$user_id = get_current_user_id();\n+\n+\t$courses = $wpdb->get_var(\n+\t\t$wpdb->prepare(\n+\t\t\t\"SELECT COUNT(*)\n+\t\t\tFROM $wpdb->posts AS p\n+\t\t\tINNER JOIN $wpdb->postmeta AS m ON p.ID = m.post_id\n+\t\t\tWHERE p.post_author = %d\n+\t\t\tAND p.post_type = %s\n+\t\t\tAND p.post_status IN (%s, %s)\n+\t\t\tAND m.meta_key = %s\n+\t\t\tAND m.meta_value = %s\",\n+\t\t\t$user_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t'publish',\n+\t\t\t'pending',\n+\t\t\t'_lpr_course_payment',\n+\t\t\t$fee\n+\t\t)\n+\t);\n+\n+\treturn $courses;\n+}*\u002F\n+\n+\u002F**\n+ * Get data about students to render in chart\n+ *\n+ * @param null  $from\n+ * @param null  $by\n+ * @param float $time_ago\n+ *\n+ * @return array\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_chart_students( $from = null, $by = null, $time_ago = 0 ) {\n+\t$labels   = array();\n+\t$datasets = array();\n+\n+\tif ( is_null( $from ) ) {\n+\t\t$from = current_time( 'mysql', 1 );\n+\t}\n+\n+\tif ( is_null( $by ) ) {\n+\t\t$by = 'days';\n+\t}\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$date_format = 'M d';\n+\t\t\tbreak;\n+\t\tcase 'months':\n+\t\t\t$date_format = 'M Y';\n+\t\t\tbreak;\n+\t\tcase 'years':\n+\t\t\t$date_format = 'Y';\n+\t\t\tbreak;\n+\t}\n+\n+\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\n+\t\t$labels[]              = gmdate( $date_format, strtotime( \"$i $by\", strtotime( $from ) ) );\n+\t\t$datasets[0]['data'][] = learn_press_get_order_by_time( $by, strtotime( \"$i $by\", strtotime( $from ) ) );\n+\t}\n+\n+\t$colors                              = learn_press_get_admin_colors();\n+\t$datasets[0]['fillColor']            = 'rgba(255,255,255,0.1)';\n+\t$datasets[0]['strokeColor']          = $colors[0];\n+\t$datasets[0]['pointColor']           = $colors[0];\n+\t$datasets[0]['pointStrokeColor']     = $colors[2];\n+\t$datasets[0]['pointHighlightFill']   = $colors[2];\n+\t$datasets[0]['pointHighlightStroke'] = $colors[0];\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * Get data about students to render in chart\n+ *\n+ * @param null  $from\n+ * @param null  $by\n+ * @param float $time_ago\n+ *\n+ * @return array\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_chart_users( $from = null, $by = null, $time_ago = 0 ) {\n+\tglobal $wpdb;\n+\n+\t$labels   = array();\n+\t$datasets = array();\n+\n+\tif ( is_null( $from ) ) {\n+\t\t$from = current_time( 'mysql', 1 );\n+\t}\n+\n+\tif ( is_null( $by ) ) {\n+\t\t$by = 'days';\n+\t}\n+\n+\t$results = array(\n+\t\t'all'         => array(),\n+\t\t'instructors' => array(),\n+\t);\n+\n+\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$date_format = 'M d Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = gmdate( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$_to         = date( 'Y-m-d', $from_time );\n+\t\t\t$_sql_format = '%Y-%m-%d';\n+\t\t\t$_key_format = 'Y-m-d';\n+\t\t\tbreak;\n+\t\tcase 'months':\n+\t\t\t$date_format = 'M Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y-%m';\n+\t\t\t$_key_format = 'Y-m';\n+\t\t\tbreak;\n+\t\tcase 'years':\n+\t\t\t$date_format = 'Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y';\n+\t\t\t$_key_format = 'Y';\n+\n+\t\t\tbreak;\n+\t}\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d\n+\t\tFROM {$wpdb->users} u\n+\t\tWHERE 1\n+\t\tGROUP BY d\n+\t\tHAVING d BETWEEN %s AND %s\n+\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['all'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\tSELECT count(u.ID) as c, DATE_FORMAT( u.user_registered, %s) as d\n+\t\t\tFROM {$wpdb->users} u\n+\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s AND ( um.meta_value LIKE %s OR um.meta_value LIKE %s )\n+\t\t\tWHERE 1\n+\t\t\tGROUP BY d\n+\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'wp_capabilities',\n+\t\t'%' . $wpdb->esc_like( 's:13:\"administrator\"' ) . '%',\n+\t\t'%' . $wpdb->esc_like( 's:10:\"lp_teacher\"' ) . '%',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['instructors'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\n+\t\t$date     = strtotime( \"$i $by\", $from_time );\n+\t\t$labels[] = date( $date_format, $date );\n+\t\t$key      = date( $_key_format, $date );\n+\n+\t\t$all         = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\n+\t\t$instructors = ! empty( $results['instructors'][ $key ] ) ? $results['instructors'][ $key ]->c : 0;\n+\n+\t\t$datasets[0]['data'][] = $all;\n+\t\t$datasets[1]['data'][] = $instructors;\n+\t\t$datasets[2]['data'][] = $all - $instructors;\n+\t}\n+\n+\t$dataset_params = array(\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'All', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Instructors', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Students', 'learnpress' ),\n+\t\t),\n+\t);\n+\n+\tforeach ( $dataset_params as $k => $v ) {\n+\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\n+\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['label']                = $v['label'];\n+\t}\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t\t'sql'      => $query,\n+\t);\n+}*\u002F\n+\n+\n+\u002F**\n+ * Get data about students to render in chart\n+ *\n+ * @param null  $from\n+ * @param null  $by\n+ * @param float $time_ago\n+ *\n+ * @return array\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_chart_courses( $from = null, $by = null, $time_ago = 0 ) {\n+\tglobal $wpdb;\n+\n+\t$labels   = array();\n+\t$datasets = array();\n+\n+\tif ( is_null( $from ) ) {\n+\t\t$from = current_time( 'mysql', 1 );\n+\t}\n+\n+\tif ( is_null( $by ) ) {\n+\t\t$by = 'days';\n+\t}\n+\n+\t$results = array(\n+\t\t'all'     => array(),\n+\t\t'public'  => array(),\n+\t\t'pending' => array(),\n+\t\t'free'    => array(),\n+\t\t'paid'    => array(),\n+\t);\n+\n+\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$date_format = 'M d Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$_to         = date( 'Y-m-d', $from_time );\n+\t\t\t$_sql_format = '%Y-%m-%d';\n+\t\t\t$_key_format = 'Y-m-d';\n+\t\t\tbreak;\n+\t\tcase 'months':\n+\t\t\t$date_format = 'M Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y-%m';\n+\t\t\t$_key_format = 'Y-m';\n+\t\t\tbreak;\n+\t\tcase 'years':\n+\t\t\t$date_format = 'Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y';\n+\t\t\t$_key_format = 'Y';\n+\n+\t\t\tbreak;\n+\t}\n+\n+\t$query_where = '';\n+\n+\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\n+\t\t$user_id      = learn_press_get_current_user_id();\n+\t\t$query_where .= $wpdb->prepare( ' AND c.post_author=%d ', $user_id );\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\tFROM {$wpdb->posts} c\n+\t\tWHERE 1\n+\t\t{$query_where}\n+\t\tAND c.post_status IN('publish', 'pending') AND c.post_type = %s\n+\t\tGROUP BY d\n+\t\tHAVING d BETWEEN %s AND %s\n+\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['all'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\tFROM {$wpdb->posts} c\n+\t\tWHERE 1\n+\t\t{$query_where}\n+\t\tAND c.post_status = %s AND c.post_type = %s\n+\t\tGROUP BY d\n+\t\tHAVING d BETWEEN %s AND %s\n+\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'publish',\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\t$_results = $wpdb->get_results( $query );\n+\tif ( $_results ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['publish'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\t\tFROM {$wpdb->posts} c\n+\t\t\tINNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID\n+\t\t\tWHERE 1\n+\t\t\t{$query_where}\n+\t\t\tAND c.post_status = %s AND c.post_type = %s\n+\t\t\tGROUP BY d\n+\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'publish',\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\t$_results = $wpdb->get_results( $query );\n+\tif ( $_results ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['paid'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\n+\t\t$date     = strtotime( \"$i $by\", $from_time );\n+\t\t$labels[] = date( $date_format, $date );\n+\t\t$key      = date( $_key_format, $date );\n+\n+\t\t$all     = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\n+\t\t$publish = ! empty( $results['publish'][ $key ] ) ? $results['publish'][ $key ]->c : 0;\n+\t\t$paid    = ! empty( $results['paid'][ $key ] ) ? $results['paid'][ $key ]->c : 0;\n+\n+\t\t$datasets[0]['data'][] = $all;\n+\t\t$datasets[1]['data'][] = $publish;\n+\t\t$datasets[2]['data'][] = $all - $publish;\n+\t\t$datasets[3]['data'][] = $paid;\n+\t\t$datasets[4]['data'][] = $all - $paid;\n+\t}\n+\n+\t$dataset_params = array(\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'All', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Publish', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Pending', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Paid', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Free', 'learnpress' ),\n+\t\t),\n+\t);\n+\n+\tforeach ( $dataset_params as $k => $v ) {\n+\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\n+\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['label']                = $v['label'];\n+\t}\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t\t'sql'      => $query,\n+\t);\n+}*\u002F\n+\n+\n+\u002F**\n+ * Get data about students to render in chart\n+ *\n+ * @param null  $from\n+ * @param null  $by\n+ * @param float $time_ago\n+ *\n+ * @return array\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_chart_orders( $from = null, $by = null, $time_ago = 0 ) {\n+\tglobal $wpdb;\n+\t$sql_join = '';\n+\n+\t$report_sales_by = learn_press_get_request( 'report_sales_by' );\n+\t$course_id       = learn_press_get_request( 'course_id' );\n+\t$cat_id          = learn_press_get_request( 'cat_id' );\n+\n+\t$labels   = array();\n+\t$datasets = array();\n+\tif ( is_null( $from ) ) {\n+\t\t$from = current_time( 'mysql', 1 );\n+\t}\n+\tif ( is_null( $by ) ) {\n+\t\t$by = 'days';\n+\t}\n+\t$results   = array(\n+\t\t'all'       => array(),\n+\t\t'completed' => array(),\n+\t\t'pending'   => array(),\n+\t);\n+\t$from_time = is_numeric( $from ) ? $from : strtotime( $from );\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$date_format = 'M d Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$_to         = date( 'Y-m-d', $from_time );\n+\t\t\t$_sql_format = '%Y-%m-%d';\n+\t\t\t$_key_format = 'Y-m-d';\n+\t\t\tbreak;\n+\t\tcase 'months':\n+\t\t\t$date_format = 'M Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y-%m';\n+\t\t\t$_key_format = 'Y-m';\n+\t\t\tbreak;\n+\t\tcase 'years':\n+\t\t\t$date_format = 'Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y';\n+\t\t\t$_key_format = 'Y';\n+\n+\t\t\tbreak;\n+\t}\n+\n+\t$query_join  = '';\n+\t$query_where = '';\n+\t$sql_join    = '';\n+\tif ( 'course' === $report_sales_by ) {\n+\t\t$sql_join .= \" INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` \"\n+\t\t\t\t\t. ' ON o.ID=lpoi.order_id '\n+\t\t\t\t\t. \" INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim \"\n+\t\t\t\t\t. ' ON lpoi.order_item_id=loim.learnpress_order_item_id '\n+\t\t\t\t\t. \" AND loim.meta_key='_course_id' \"\n+\t\t\t\t\t. ' AND CAST(loim.meta_value AS SIGNED)=%d ';\n+\t\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\n+\t\t\t$user_id   = learn_press_get_current_user_id();\n+\t\t\t$sql_join .= $wpdb->prepare(\n+\t\t\t\t' AND CAST(loim.meta_value AS SIGNED) IN '\n+\t\t\t\t. ' ( '\n+\t\t\t\t. \" SELECT ID FROM {$wpdb->posts} p WHERE p.ID = CAST(loim.meta_value AS SIGNED) AND `post_author`=\" . intval( $user_id )\n+\t\t\t\t. ' ) '\n+\t\t\t);\n+\t\t}\n+\t\t$query_join .= $wpdb->prepare( $sql_join, $course_id );\n+\n+\t} elseif ( 'category' === $report_sales_by ) {\n+\t\t$sql_join .= \" INNER JOIN `{$wpdb->prefix}learnpress_order_items` `lpoi` \"\n+\t\t\t\t\t\t. ' ON o.ID=lpoi.order_id '\n+\t\t\t\t\t\t. \" INNER JOIN {$wpdb->prefix}learnpress_order_itemmeta loim \"\n+\t\t\t\t\t\t. ' ON lpoi.order_item_id=loim.learnpress_order_item_id '\n+\t\t\t\t\t\t. \" AND loim.meta_key='_course_id' \"\n+\t\t\t\t\t\t. ' AND CAST(loim.meta_value AS SIGNED) IN('\n+\t\t\t\t\t\t\u002F\u002F sub query\n+\t\t\t\t\t\t. ' SELECT tr.object_id '\n+\t\t\t\t\t\t. \" FROM {$wpdb->prefix}term_taxonomy tt INNER JOIN {$wpdb->prefix}term_relationships tr \"\n+\t\t\t\t\t\t. \" ON tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy='course_category' \"\n+\t\t\t\t\t\t. ' WHERE tt.term_id=%d)';\n+\t\t$query_join .= $wpdb->prepare( $sql_join, $cat_id );\n+\t}\n+\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\n+\t\t$user_id      = learn_press_get_current_user_id();\n+\t\t$query_where .= $wpdb->prepare(\n+\t\t\t\" AND o.ID IN( SELECT oi.order_id\n+\t\t\t\t\t\t\t\t\t\tFROM lptest.{$wpdb->prefix}learnpress_order_items oi\n+\t\t\t\t\t\t\t\t\t\t\tinner join {$wpdb->prefix}learnpress_order_itemmeta oim\n+\t\t\t\t\t\t\t\t\t\t\t\ton oi.order_item_id = oim.learnpress_order_item_id\n+\t\t\t\t\t\t\t\t\t\t\t\t\tand oim.meta_key='_course_id'\n+\t\t\t\t\t\t\t\t\t\t\t\t\tand cast(oim.meta_value as SIGNED) IN (\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\tSELECT sp.ID FROM {$wpdb->prefix}posts sp WHERE sp.post_author=%d and sp.ID=cast(oim.meta_value as SIGNED)\n+\t\t\t\t\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t\t\t) \",\n+\t\t\t$user_id\n+\t\t);\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\t\tSELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d\n+\t\t\t\tFROM {$wpdb->posts} o {$query_join}\n+\t\t\t\tWHERE 1 {$query_where}\n+\t\t\t\tAND o.post_status IN('lp-completed') AND o.post_type = %s\n+\t\t\t\tGROUP BY d\n+\t\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'lp_order',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['completed'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT count(o.ID) as c, DATE_FORMAT( o.post_date, %s) as d\n+\t\tFROM {$wpdb->posts} o {$query_join}\n+\t\tWHERE 1 {$query_where}\n+\t\tAND o.post_status IN('lp-pending', 'lp-processing') AND o.post_type = %s\n+\t\tGROUP BY d\n+\t\tHAVING d BETWEEN %s AND %s\n+\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'lp_order',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['pending'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\n+\t\t$date     = strtotime( \"$i $by\", $from_time );\n+\t\t$labels[] = date( $date_format, $date );\n+\t\t$key      = date( $_key_format, $date );\n+\n+\t\t$completed = ! empty( $results['completed'][ $key ] ) ? $results['completed'][ $key ]->c : 0;\n+\t\t$pending   = ! empty( $results['pending'][ $key ] ) ? $results['pending'][ $key ]->c : 0;\n+\t\t$all       = $completed + $pending;\n+\n+\t\t$datasets[0]['data'][] = $all;\n+\t\t$datasets[1]['data'][] = $completed;\n+\t\t$datasets[2]['data'][] = $pending;\n+\t}\n+\n+\t$dataset_params = array(\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'All', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Completed', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Pending', 'learnpress' ),\n+\t\t),\n+\t);\n+\n+\tforeach ( $dataset_params as $k => $v ) {\n+\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\n+\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['label']                = $v['label'];\n+\t}\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t\t'sql'      => $query,\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * Get data about courses to render in the chart\n+ *\n+ * @return array\n+ * @deprecated 4.2.6.9.3\n+ *\u002F\n+\u002F*function learn_press_get_chart_courses2() {\n+\t$labels = array(\n+\t\t__( 'Pending Courses\u002FPublish Courses', 'learnpress' ),\n+\t\t__( 'Free Courses\u002FPaid Courses', 'learnpress' ),\n+\t);\n+\n+\t$datasets            = array();\n+\t$datasets[0]['data'] = array(\n+\t\tlearn_press_get_courses_by_status( 'pending' ),\n+\t\tlearn_press_get_courses_by_price( 'free' ),\n+\t);\n+\n+\t$datasets[1]['data'] = array(\n+\t\tlearn_press_get_courses_by_status( 'publish' ),\n+\t\tlearn_press_get_courses_by_price( 'not_free' ),\n+\t);\n+\n+\t$colors                     = learn_press_get_admin_colors();\n+\t$datasets[0]['fillColor']   = $colors[1];\n+\t$datasets[0]['strokeColor'] = $colors[1];\n+\t$datasets[1]['fillColor']   = $colors[3];\n+\t$datasets[1]['strokeColor'] = $colors[3];\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * Get colors setting up by admin user\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_get_admin_colors() {\n+\t$admin_color = get_user_meta( get_current_user_id(), 'admin_color', true );\n+\tglobal $_wp_admin_css_colors;\n+\t$colors = array();\n+\n+\tif ( ! empty( $_wp_admin_css_colors[ $admin_color ]->colors ) ) {\n+\t\t$colors = $_wp_admin_css_colors[ $admin_color ]->colors;\n+\t}\n+\n+\tif ( empty( $colors[0] ) ) {\n+\t\t$colors[0] = '#000000';\n+\t}\n+\n+\tif ( empty( $colors[2] ) ) {\n+\t\t$colors[2] = '#00FF00';\n+\t}\n+\n+\treturn $colors;\n+}\n+\n+\u002F**\n+ * Convert an array to json format and print out to browser\n+ *\n+ * @param array $chart\n+ *\u002F\n+function learn_press_process_chart( $chart = array() ) {\n+\t$data = json_encode(\n+\t\tarray(\n+\t\t\t'labels'   => $chart['labels'],\n+\t\t\t'datasets' => $chart['datasets'],\n+\t\t)\n+\t);\n+\techo wp_kses_post( $data );\n+}\n+\n+\u002F**\n+ * Print out the configuration for admin chart\n+ *\u002F\n+function learn_press_config_chart() {\n+\t$colors = learn_press_get_admin_colors();\n+\n+\t$config = array(\n+\t\t'scaleShowGridLines'      => true,\n+\t\t'scaleGridLineColor'      => '#777',\n+\t\t'scaleGridLineWidth'      => 0.3,\n+\t\t'scaleFontColor'          => '#444',\n+\t\t'scaleLineColor'          => $colors[0],\n+\t\t'bezierCurve'             => true,\n+\t\t'bezierCurveTension'      => 0.2,\n+\t\t'pointDotRadius'          => 5,\n+\t\t'pointDotStrokeWidth'     => 5,\n+\t\t'pointHitDetectionRadius' => 20,\n+\t\t'datasetStroke'           => true,\n+\t\t'responsive'              => true,\n+\t\t'tooltipFillColor'        => $colors[2],\n+\t\t'tooltipFontColor'        => '#eee',\n+\t\t'tooltipCornerRadius'     => 0,\n+\t\t'tooltipYPadding'         => 10,\n+\t\t'tooltipXPadding'         => 10,\n+\t\t'barDatasetSpacing'       => 10,\n+\t\t'barValueSpacing'         => 200,\n+\n+\t);\n+\n+\techo json_encode( $config );\n+}\n+\n+function set_post_order_in_admin( $wp_query ) {\n+\tglobal $pagenow;\n+\n+\tif ( isset( $_GET['post_type'] ) ) {\n+\t\t$post_type = LP_Helper::sanitize_params_submitted( $_GET['post_type'] );\n+\t} else {\n+\t\t$post_type = '';\n+\t}\n+\n+\tif ( is_admin() && 'edit.php' == $pagenow && $post_type == LP_COURSE_CPT && ! isset( $_GET['orderby'] ) ) {\n+\t\t$wp_query->set( 'orderby', 'date' );\n+\t\t$wp_query->set( 'order', 'DSC' );\n+\t}\n+}\n+\n+\u002F\u002F add_filter( 'pre_get_posts', 'set_post_order_in_admin' );\n+\n+function learn_press_copy_post_meta( $from_id, $to_id ) {\n+\tglobal $wpdb;\n+\n+\t$course_meta = $wpdb->get_results(\n+\t\t$wpdb->prepare( \"SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id = %d\", $from_id )\n+\t);\n+\n+\tif ( count( $course_meta ) != 0 ) {\n+\t\t$sql_query     = \"INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) \";\n+\t\t$sql_query_sel = array();\n+\n+\t\tforeach ( $course_meta as $meta ) {\n+\t\t\t$meta_key   = $meta->meta_key;\n+\t\t\t$meta_value = addslashes( $meta->meta_value );\n+\n+\t\t\t$sql_query_sel[] = \"SELECT {$to_id}, '$meta_key', '$meta_value'\";\n+\t\t}\n+\n+\t\t$sql_query .= implode( ' UNION ALL ', $sql_query_sel );\n+\t\t$wpdb->query( $sql_query );\n+\t}\n+}\n+\n+\u002F**\n+ * Check to see if a plugin is already installed or not\n+ *\n+ * @param $plugin\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_plugin_install( $plugin ) {\n+\t$installed_plugins = get_plugins();\n+\n+\treturn isset( $installed_plugins[ $plugin ] );\n+}\n+\n+\u002F**\n+ * Get plugin file that contains the information from slug\n+ *\n+ * @param $slug\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_plugin_basename_from_slug( $slug ) {\n+\t$keys = array_keys( get_plugins() );\n+\n+\tforeach ( $keys as $key ) {\n+\t\tif ( preg_match( '|^' . $slug . '\u002F|', $key ) ) {\n+\t\t\treturn $key;\n+\t\t}\n+\t}\n+\n+\treturn $slug;\n+}\n+\n+function _learn_press_reset_course_data() {\n+\tif ( empty( $_REQUEST['reset-course-data'] ) ) {\n+\t\treturn false;\n+\t}\n+\n+\tlearn_press_reset_course_data( intval( $_REQUEST['reset-course-data'] ) );\n+\n+\twp_redirect( esc_url_raw( remove_query_arg( 'reset-course-data' ) ) );\n+}\n+\n+add_action( 'init', '_learn_press_reset_course_data' );\n+\n+function learn_press_admin_section_loop_item_class( $item, $section ) {\n+\t$classes = array(\n+\t\t'lp-section-item',\n+\t);\n+\n+\t$classes[] = 'lp-item-' . $item->post_type;\n+\n+\tif ( ! absint( $item->ID ) ) {\n+\t\t$classes[] = 'lp-item-empty lp-item-new focus';\n+\t}\n+\n+\t$classes = apply_filters( 'learn_press_section_loop_item_class', $classes, $item, $section );\n+\n+\tif ( $classes ) {\n+\t\techo 'class=\"' . join( ' ', $classes ) . '\"';\n+\t}\n+\n+\treturn $classes;\n+}\n+\n+function learn_press_disable_checked_ontop( $args ) {\n+\n+\tif ( 'course_category' == $args['taxonomy'] ) {\n+\t\t$args['checked_ontop'] = false;\n+\t}\n+\n+\treturn $args;\n+}\n+\n+add_filter( 'wp_terms_checklist_args', 'learn_press_disable_checked_ontop' );\n+\n+function learn_press_get_screens() {\n+\t$screen_id = sanitize_title( __( 'LearnPress', 'learnpress' ) );\n+\n+\t$screens = array(\n+\t\t'toplevel_page_' . $screen_id,\n+\t\t$screen_id . '_page_learn-press-statistics',\n+\t\t$screen_id . '_page_learn-press-addons',\n+\t\t$screen_id . '_page_learn-press-settings',\n+\t\t$screen_id . '_page_learn-press-tools',\n+\t);\n+\n+\tforeach ( array( LP_COURSE_CPT, LP_LESSON_CPT, LP_QUIZ_CPT, LP_QUESTION_CPT, LP_ORDER_CPT ) as $post_type ) {\n+\t\t$screens[] = 'edit-' . $post_type;\n+\t\t$screens[] = $post_type;\n+\t}\n+\n+\treturn apply_filters( 'learn_press_screen_ids', $screens );\n+}\n+\n+function learn_press_is_post_type_screen( $post_type, $union = 'OR' ) {\n+\tif ( is_array( $post_type ) ) {\n+\t\t$return = null;\n+\n+\t\tforeach ( $post_type as $_post_type ) {\n+\t\t\t$check = learn_press_is_post_type_screen( $_post_type );\n+\n+\t\t\tif ( $union == 'OR' && $check ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\tif ( $return == null ) {\n+\t\t\t\t$return = $check;\n+\t\t\t} else {\n+\t\t\t\t$return = $return && $check;\n+\t\t\t}\n+\n+\t\t\tif ( $union !== 'OR' ) {\n+\t\t\t\treturn $return;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t$screen = get_current_screen();\n+\n+\tif ( ! $screen ) {\n+\t\treturn;\n+\t}\n+\n+\t$screen_id = $screen->id;\n+\n+\treturn in_array( $screen_id, array( $post_type, \"edit-{$post_type}\" ) );\n+}\n+\n+function learn_press_get_notice_dismiss( $context, $type = 'transient' ) {\n+\tif ( $type == 'transient' ) {\n+\t\treturn get_transient( 'learn_press_dismiss_notice_' . $context );\n+\t}\n+\n+\treturn get_option( 'learn_press_dismiss_notice_' . $context );\n+}\n+\n+if ( ! function_exists( 'learn_press_course_insert_section' ) ) {\n+\tfunction learn_press_course_insert_section( $section = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$section = wp_parse_args(\n+\t\t\t$section,\n+\t\t\tarray(\n+\t\t\t\t'section_name'        => '',\n+\t\t\t\t'section_course_id'   => 0,\n+\t\t\t\t'section_order'       => 0,\n+\t\t\t\t'section_description' => '',\n+\t\t\t)\n+\t\t);\n+\n+\t\t$section = stripslashes_deep( $section );\n+\n+\t\textract( $section );\n+\n+\t\t$insert_data = compact( 'section_name', 'section_course_id', 'section_order', 'section_description' );\n+\n+\t\t$wpdb->insert(\n+\t\t\t$wpdb->learnpress_sections,\n+\t\t\t$insert_data,\n+\t\t\tarray( '%s', '%d', '%d' )\n+\t\t);\n+\n+\t\treturn $wpdb->insert_id;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_insert_section_item' ) ) {\n+\tfunction learn_press_course_insert_section_item( $item_data = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$wpdb->insert(\n+\t\t\t$wpdb->learnpress_section_items,\n+\t\t\tarray(\n+\t\t\t\t'section_id' => $item_data['section_id'],\n+\t\t\t\t'item_id'    => $item_data['item_id'],\n+\t\t\t\t'item_order' => $item_data['item_order'],\n+\t\t\t\t'item_type'  => $item_data['item_type'],\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'%d',\n+\t\t\t\t'%d',\n+\t\t\t\t'%d',\n+\t\t\t\t'%s',\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $wpdb->insert_id;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_duplicate_post' ) ) {\n+\t\u002F**\n+\t * Duplicate post.\n+\t *\n+\t * @param null  $post_id\n+\t * @param array $args\n+\t * @param bool  $meta\n+\t *\n+\t * @return bool|mixed\n+\t * @since 3.0.0\n+\t *\u002F\n+\tfunction learn_press_duplicate_post( $post_id = null, $args = array(), $meta = true ) {\n+\t\t$post = get_post( $post_id );\n+\n+\t\tif ( ! $post ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$default = array(\n+\t\t\t'comment_status' => $post->comment_status,\n+\t\t\t'ping_status'    => $post->ping_status,\n+\t\t\t'post_author'    => get_current_user_id(),\n+\t\t\t'post_content'   => $post->post_content,\n+\t\t\t'post_excerpt'   => $post->post_excerpt,\n+\t\t\t'post_parent'    => $post->post_parent,\n+\t\t\t'post_password'  => $post->post_password,\n+\t\t\t'post_status'    => 'draft',\n+\t\t\t'post_title'     => sprintf(\n+\t\t\t\t'%1$s (%2$s)',\n+\t\t\t\t$post->post_title,\n+\t\t\t\t_x( 'Copy', 'Duplicate item title suffix', 'learnpress' )\n+\t\t\t),\n+\t\t\t'post_type'      => $post->post_type,\n+\t\t\t'to_ping'        => $post->to_ping,\n+\t\t\t'menu_order'     => $post->menu_order,\n+\t\t\t'exclude_meta'   => array(),\n+\t\t);\n+\n+\t\t$args         = wp_parse_args( $args, $default );\n+\t\t$exclude_meta = array();\n+\n+\t\tif ( ! empty( $args['exclude_meta'] ) ) {\n+\t\t\t$exclude_meta = $args['exclude_meta'];\n+\t\t\tunset( $args['exclude_meta'] );\n+\t\t}\n+\n+\t\t$new_post_id = wp_insert_post( $args );\n+\n+\t\tif ( ! is_wp_error( $new_post_id ) && $meta ) {\n+\t\t\tlearn_press_duplicate_post_meta( $post_id, $new_post_id, $exclude_meta );\n+\n+\t\t\t$taxonomies = get_object_taxonomies( $post->post_type );\n+\n+\t\t\tforeach ( $taxonomies as $taxonomy ) {\n+\t\t\t\t$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );\n+\t\t\t\twp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn_press_duplicate_post', $new_post_id, $post_id );\n+\t}\n+}\n+\n+\u002F**\n+ * Duplicate post meta.\n+ *\n+ * @editor tungnx\n+ * @sicne 3.0.0\n+ * @version 4.0.1\n+ *\u002F\n+if ( ! function_exists( 'learn_press_duplicate_post_meta' ) ) {\n+\tfunction learn_press_duplicate_post_meta( $old_post_id, $new_post_id, $excerpt = array() ) {\n+\t\t$lp_db = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$excerpt           = array_merge( array( '_edit_lock', '_edit_last' ), $excerpt );\n+\t\t\t$excerpt_name_keys = implode( \"','\", $excerpt );\n+\t\t\t$sql_query         = $lp_db->wpdb->prepare(\n+\t\t\t\t\"INSERT INTO $lp_db->tb_postmeta (post_id, meta_key, meta_value)\n+\t\t\t\tSELECT %d, pmc.meta_key, pmc.meta_value\n+\t\t\t\tFROM $lp_db->tb_postmeta AS pmc\n+\t\t\t\tWHERE post_id = %d\n+\t\t\t\tAND meta_key not in ('{$excerpt_name_keys}')\n+\t\t\t\t\",\n+\t\t\t\t$new_post_id,\n+\t\t\t\t$old_post_id\n+\t\t\t);\n+\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$lp_db->wpdb->query( $sql_query );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_sort_questions' ) ) {\n+\tfunction learn_press_sort_questions( $types ) {\n+\t\t$user_id        = get_current_user_id();\n+\t\t$question_types = get_user_meta( $user_id, '_learn_press_memorize_question_types', true );\n+\n+\t\tif ( ! empty( $question_types ) ) {\n+\t\t\t$sort = array();\n+\t\t\tarsort( $types );\n+\t\t\t$new_types = array();\n+\t\t\t$ktypes    = array_keys( $types );\n+\n+\t\t\tfor ( $i = 0; $i \u003C count( $ktypes ) - 1; $i ++ ) {\n+\t\t\t\t$max = $i;\n+\n+\t\t\t\tif ( ! isset( $question_types[ $ktypes[ $i ] ] ) ) {\n+\t\t\t\t\t$question_types[ $ktypes[ $i ] ] = 0;\n+\t\t\t\t}\n+\n+\t\t\t\tfor ( $j = $i + 1; $j \u003C count( $ktypes ); $j ++ ) {\n+\t\t\t\t\tif ( isset( $question_types[ $ktypes[ $j ] ], $question_types[ $ktypes[ $max ] ] )\n+\t\t\t\t\t\t&& $question_types[ $ktypes[ $j ] ] > $question_types[ $ktypes[ $max ] ]\n+\t\t\t\t\t) {\n+\t\t\t\t\t\t$max = $j;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$tmp            = $ktypes[ $i ];\n+\t\t\t\t$ktypes[ $i ]   = $ktypes[ $max ];\n+\t\t\t\t$ktypes[ $max ] = $tmp;\n+\t\t\t}\n+\n+\t\t\t$ktypes = array_flip( $ktypes );\n+\t\t\t$types  = array_merge( $ktypes, $types );\n+\t\t}\n+\n+\t\treturn $types;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_duplicate_question' ) ) {\n+\tfunction learn_press_duplicate_question( $question_id = null, $quiz_id = null, $args = array() ) {\n+\t\tif ( ! $question_id || ! get_post( $question_id ) ) {\n+\t\t\treturn new WP_Error( sprintf( __( 'Question id %s does not exist.', 'learnpress' ), $question_id ) );\n+\t\t}\n+\n+\t\tif ( $quiz_id && ! get_post( $quiz_id ) ) {\n+\t\t\treturn new WP_Error( sprintf( __( 'Quiz id %s does not exist.', 'learnpress' ), $quiz_id ) );\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\t\t$new_question_id = learn_press_duplicate_post( $question_id, $args );\n+\n+\t\tif ( $quiz_id ) {\n+\t\t\t$sql = $wpdb->prepare(\n+\t\t\t\t\"\n+                SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d\n+                    \",\n+\t\t\t\t$quiz_id,\n+\t\t\t\t$question_id\n+\t\t\t);\n+\n+\t\t\t$quiz_question_data = $wpdb->get_row( $sql );\n+\t\t\t$max_order          = $wpdb->get_var(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT max(question_order) FROM {$wpdb->prefix}learnpress_quiz_questions WHERE quiz_id = %d\",\n+\t\t\t\t\t$quiz_id\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $quiz_question_data ) {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_quiz_questions,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'quiz_id'        => $quiz_id,\n+\t\t\t\t\t\t'question_id'    => $new_question_id,\n+\t\t\t\t\t\t'question_order' => $max_order + 1,\n+\t\t\t\t\t\t'params'         => $quiz_question_data->params,\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$sql = $wpdb->prepare(\n+\t\t\t\"\n+                    SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d\n+                \",\n+\t\t\t$question_id\n+\t\t);\n+\n+\t\t$question_answers = $wpdb->get_results( $sql );\n+\n+\t\tif ( $question_answers ) {\n+\t\t\tforeach ( $question_answers as $q_a ) {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'question_id' => $new_question_id,\n+\t\t\t\t\t\t'title'       => $q_a->title,\n+\t\t\t\t\t\t'value'       => $q_a->value,\n+\t\t\t\t\t\t'is_true'     => $q_a->is_true,\n+\t\t\t\t\t\t'order'       => $q_a->order,\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $new_question_id;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_duplicate_quiz' ) ) {\n+\n+\tfunction learn_press_duplicate_quiz( $quiz_id = null, $args = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$new_quiz_id = learn_press_duplicate_post( $quiz_id, $args, true );\n+\t\t$quiz        = LP_Quiz::get_quiz( $quiz_id );\n+\t\tif ( ! $quiz ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$questions = $quiz->get_question_ids();\n+\n+\t\tif ( $questions ) {\n+\t\t\tforeach ( $questions as $question_id ) {\n+\t\t\t\t$new_question_id = learn_press_duplicate_post( $question_id );\n+\n+\t\t\t\t$sql = $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    SELECT * FROM $wpdb->learnpress_quiz_questions WHERE quiz_id = %d AND question_id = %d\n+                        \",\n+\t\t\t\t\t$quiz_id,\n+\t\t\t\t\t$question_id\n+\t\t\t\t);\n+\n+\t\t\t\t$quiz_question_data = $wpdb->get_row( $sql );\n+\n+\t\t\t\tif ( $quiz_question_data ) {\n+\t\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t\t$wpdb->learnpress_quiz_questions,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'quiz_id'        => $new_quiz_id,\n+\t\t\t\t\t\t\t'question_id'    => $new_question_id,\n+\t\t\t\t\t\t\t'question_order' => $quiz_question_data->question_order,\n+\t\t\t\t\t\t\t'params'         => $quiz_question_data->params,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$sql = $wpdb->prepare(\n+\t\t\t\t\t\"\n+                            SELECT * FROM $wpdb->learnpress_question_answers WHERE question_id = %d\n+                        \",\n+\t\t\t\t\t$question_id\n+\t\t\t\t);\n+\n+\t\t\t\t$question_answers = $wpdb->get_results( $sql );\n+\t\t\t\tif ( $question_answers ) {\n+\t\t\t\t\tforeach ( $question_answers as $q_a ) {\n+\t\t\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'question_id' => $new_question_id,\n+\t\t\t\t\t\t\t\t'title'       => $q_a->title,\n+\t\t\t\t\t\t\t\t'value'       => $q_a->value,\n+\t\t\t\t\t\t\t\t'is_true'     => $q_a->is_true,\n+\t\t\t\t\t\t\t\t'order'       => $q_a->order,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $new_quiz_id;\n+\t}\n+}\n+\n+\u002F**\n+ * Get general data to render in chart\n+ *\n+ * @param null  $from\n+ * @param null  $by\n+ * @param float $time_ago\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_get_chart_general( $from = null, $by = null, $time_ago = 0 ) {\n+\tglobal $wpdb;\n+\n+\t$labels   = array();\n+\t$datasets = array();\n+\n+\tif ( is_null( $from ) ) {\n+\t\t$from = current_time( 'mysql', 1 );\n+\t}\n+\n+\tif ( is_null( $by ) ) {\n+\t\t$by = 'days';\n+\t}\n+\n+\t$results = array(\n+\t\t'all'     => array(),\n+\t\t'public'  => array(),\n+\t\t'pending' => array(),\n+\t\t'free'    => array(),\n+\t\t'paid'    => array(),\n+\t);\n+\n+\t$results = array(\n+\t\t'course'  => array(),\n+\t\t'lesson'  => array(),\n+\t\t'quiz'    => array(),\n+\t\t'student' => array(),\n+\t\t'teacher' => array(),\n+\t\t'revenue' => array(),\n+\t);\n+\n+\t$from_time   = is_numeric( $from ) ? $from : strtotime( $from );\n+\t$_from       = '';\n+\t$_to         = '';\n+\t$_sql_format = '';\n+\t$date_format = '';\n+\n+\tswitch ( $by ) {\n+\t\tcase 'days':\n+\t\t\t$date_format = 'M d Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-d', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$_to         = date( 'Y-m-d', $from_time );\n+\t\t\t$_sql_format = '%Y-%m-%d';\n+\t\t\t$_key_format = 'Y-m-d';\n+\t\t\tbreak;\n+\n+\t\tcase 'months':\n+\t\t\t$date_format = 'M Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-m-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-m-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y-%m';\n+\t\t\t$_key_format = 'Y-m';\n+\t\t\tbreak;\n+\n+\t\tcase 'years':\n+\t\t\t$date_format = 'Y';\n+\t\t\t$_from       = - $time_ago + 1;\n+\t\t\t$_from       = date( 'Y-01-01', strtotime( \"{$_from} {$by}\", $from_time ) );\n+\t\t\t$days        = date( 't', mktime( 0, 0, 0, date( 'm', $from_time ), 1, date( 'Y', $from_time ) ) );\n+\t\t\t$_to         = date( 'Y-12-' . $days, $from_time );\n+\t\t\t$_sql_format = '%Y';\n+\t\t\t$_key_format = 'Y';\n+\t\t\tbreak;\n+\n+\t}\n+\n+\t$query_where = '';\n+\tif ( current_user_can( LP_TEACHER_ROLE ) ) {\n+\t\t$user_id      = learn_press_get_current_user_id();\n+\t\t$query_where .= $wpdb->prepare( ' AND c.post_author=%d ', $user_id );\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\t\t\tFROM {$wpdb->posts} c\n+\t\t\t\tWHERE 1\n+\t\t\t\t{$query_where}\n+\t\t\t\tAND c.post_status IN('publish', 'pending') AND c.post_type = %s\n+\t\t\t\tGROUP BY d\n+\t\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['all'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\t\t\tFROM {$wpdb->posts} c\n+\t\t\t\tWHERE 1\n+\t\t\t\t{$query_where}\n+\t\t\t\tAND c.post_status = %s AND c.post_type = %s\n+\t\t\t\tGROUP BY d\n+\t\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'publish',\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['publish'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\t\t\tSELECT count(c.ID) as c, DATE_FORMAT( c.post_date, %s) as d\n+\t\t\t\tFROM {$wpdb->posts} c\n+\t\t\t\tINNER JOIN {$wpdb->postmeta} cm ON cm.post_id = c.ID\n+\t\t\t\tWHERE 1\n+\t\t\t\t{$query_where}\n+\t\t\t\tAND c.post_status = %s AND c.post_type = %s\n+\t\t\t\tGROUP BY d\n+\t\t\t\tHAVING d BETWEEN %s AND %s\n+\t\t\t\tORDER BY d ASC\n+\t\t\t\",\n+\t\t$_sql_format,\n+\t\t'publish',\n+\t\t'lp_course',\n+\t\t$_from,\n+\t\t$_to\n+\t);\n+\n+\tif ( $_results = $wpdb->get_results( $query ) ) {\n+\t\tforeach ( $_results as $k => $v ) {\n+\t\t\t$results['paid'][ $v->d ] = $v;\n+\t\t}\n+\t}\n+\n+\tfor ( $i = - $time_ago + 1; $i \u003C= 0; $i ++ ) {\n+\t\t$date     = strtotime( \"$i $by\", $from_time );\n+\t\t$labels[] = date( $date_format, $date );\n+\t\t$key      = date( $_key_format, $date );\n+\n+\t\t$all     = ! empty( $results['all'][ $key ] ) ? $results['all'][ $key ]->c : 0;\n+\t\t$publish = ! empty( $results['publish'][ $key ] ) ? $results['publish'][ $key ]->c : 0;\n+\t\t$paid    = ! empty( $results['paid'][ $key ] ) ? $results['paid'][ $key ]->c : 0;\n+\n+\t\t$datasets[0]['data'][] = $all;\n+\t\t$datasets[1]['data'][] = $publish;\n+\t\t$datasets[2]['data'][] = $all - $publish;\n+\t\t$datasets[3]['data'][] = $paid;\n+\t\t$datasets[4]['data'][] = $all - $paid;\n+\t}\n+\n+\t$dataset_params = array(\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(47, 167, 255, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'All', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(212, 208, 203, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Publish', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Pending', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Paid', 'learnpress' ),\n+\t\t),\n+\t\tarray(\n+\t\t\t'color1' => 'rgba(234, 199, 155, %s)',\n+\t\t\t'color2' => '#FFF',\n+\t\t\t'label'  => __( 'Free', 'learnpress' ),\n+\t\t),\n+\t);\n+\n+\tforeach ( $dataset_params as $k => $v ) {\n+\t\t$datasets[ $k ]['fillColor']            = sprintf( $v['color1'], '0.2' );\n+\t\t$datasets[ $k ]['strokeColor']          = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointColor']           = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['pointStrokeColor']     = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightFill']   = $v['color2'];\n+\t\t$datasets[ $k ]['pointHighlightStroke'] = sprintf( $v['color1'], '1' );\n+\t\t$datasets[ $k ]['label']                = $v['label'];\n+\t}\n+\n+\treturn array(\n+\t\t'labels'   => $labels,\n+\t\t'datasets' => $datasets,\n+\t\t'sql'      => $query,\n+\t);\n+}\n+\n+function learn_press_get_default_section( $section = null ) {\n+\tif ( ! $section ) {\n+\t\t$section = new stdClass();\n+\t}\n+\tforeach (\n+\t\tarray(\n+\t\t\t'section_id'          => null,\n+\t\t\t'section_name'        => '',\n+\t\t\t'section_course_id'   => null,\n+\t\t\t'section_order'       => null,\n+\t\t\t'section_description' => '',\n+\t\t) as $k => $v\n+\t) {\n+\t\tif ( ! property_exists( $section, $k ) ) {\n+\t\t\t$section->{$k} = $v;\n+\t\t}\n+\t}\n+\n+\treturn $section;\n+}\n+\n+\u002F**\n+ * Display time fields for a post in editing mode.\n+ *\n+ * @param int $edit\n+ * @param int $for_post\n+ * @param int $tab_index\n+ * @param int $multi\n+ *\u002F\n+function learn_press_touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {\n+\tglobal $wp_locale;\n+\t$post = get_post();\n+\n+\tif ( $for_post ) {\n+\t\t$edit = ! ( in_array(\n+\t\t\t$post->post_status,\n+\t\t\tarray(\n+\t\t\t\t'draft',\n+\t\t\t\t'pending',\n+\t\t\t)\n+\t\t) && ( ! $post->post_date_gmt || '0000-00-00 00:00:00' == $post->post_date_gmt ) );\n+\t}\n+\n+\t$tab_index_attribute = '';\n+\tif ( (int) $tab_index > 0 ) {\n+\t\t$tab_index_attribute = \" tabindex=\\\"$tab_index\\\"\";\n+\t}\n+\n+\t$time_adj  = current_time( 'timestamp' );\n+\t$post_date = ( $for_post ) ? $post->post_date : get_comment()->comment_date;\n+\t$jj        = ( $edit ) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj );\n+\t$mm        = ( $edit ) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj );\n+\t$aa        = ( $edit ) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj );\n+\t$hh        = ( $edit ) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj );\n+\t$mn        = ( $edit ) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj );\n+\t$ss        = ( $edit ) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj );\n+\n+\t$cur_jj = gmdate( 'd', $time_adj );\n+\t$cur_mm = gmdate( 'm', $time_adj );\n+\t$cur_aa = gmdate( 'Y', $time_adj );\n+\t$cur_hh = gmdate( 'H', $time_adj );\n+\t$cur_mn = gmdate( 'i', $time_adj );\n+\n+\t$map = array(\n+\t\t'mm' => array( $mm, $cur_mm ),\n+\t\t'jj' => array( $jj, $cur_jj ),\n+\t\t'aa' => array( $aa, $cur_aa ),\n+\t\t'hh' => array( $hh, $cur_hh ),\n+\t\t'mn' => array( $mn, $cur_mn ),\n+\t);\n+\n+\tforeach ( $map as $timeunit => $value ) {\n+\t\tlist( $unit, $curr ) = $value;\n+\n+\t\techo '\u003Cinput type=\"hidden\" id=\"hidden_' . $timeunit . '\" name=\"hidden_' . $timeunit . '\" value=\"' . $unit . '\" \u002F>' . \"\\n\";\n+\t\t$cur_timeunit = 'cur_' . $timeunit;\n+\t\techo '\u003Cinput type=\"hidden\" id=\"' . $cur_timeunit . '\" name=\"' . $cur_timeunit . '\" value=\"' . $curr . '\" \u002F>' . \"\\n\";\n+\t}\n+}\n+\n+\u002F**\n+ * Return id of current screen.\n+ *\n+ * @return bool|string\n+ * @since 3.2.6\n+ *\u002F\n+function learn_press_get_screen_id() {\n+\t_deprecated_function( __METHOD__, '4.2.3.6' );\n+\t$screen    = get_current_screen();\n+\t$screen_id = $screen ? $screen->id : false;\n+\n+\treturn $screen_id;\n+}\n+\n+require_once 'class-lp-post-type-actions.php';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,4 @@\n-\r\n-.learn-press-email-variables li {\r\n-\tdisplay: inline-block;\r\n-}\r\n+\n+.learn-press-email-variables li {\n+\tdisplay: inline-block;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-( function( $ ) {\r\n-\t$( '.lp-metabox-field__email-content' ).each( function() {\r\n-\t\tconst $field = $( this ),\r\n-\t\t\t$select = $field.find( 'select.lp-email-format' ),\r\n-\t\t\t$templates = $field.find( '.learn-press-email-template' ),\r\n-\t\t\t$variables = $field.find( '.learn-press-email-variables' );\r\n-\r\n-\t\tfunction _insertVariableToEditor( edId, variable ) {\r\n-\t\t\tlet editorId = null;\r\n-\t\t\tconst activeEditor = tinyMCE.activeEditor;\r\n-\r\n-\t\t\tfor ( editorId in tinyMCE.editors ) {\r\n-\t\t\t\tif ( editorId == edId ) {\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\teditorId = null;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! editorId ) {\r\n-\t\t\t\t_insertVariableToTextarea( edId, variable );\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( activeEditor && $( activeEditor.getElement() ).attr( 'id' ) == editorId ) {\r\n-\t\t\t\tactiveEditor.execCommand( 'insertHTML', false, variable );\r\n-\r\n-\t\t\t\tif ( $( activeEditor.getElement() ).is( ':visible' ) ) {\r\n-\t\t\t\t\t_insertVariableToTextarea( edId, variable );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tfunction _insertVariableToTextarea( eId, varibale ) {\r\n-\t\t\tconst $el = $( '#' + eId ).get( 0 );\r\n-\r\n-\t\t\tif ( document.selection ) {\r\n-\t\t\t\t$el.focus();\r\n-\t\t\t\tsel = document.selection.createRange();\r\n-\t\t\t\tsel.text = varibale;\r\n-\t\t\t\t$el.focus();\r\n-\t\t\t} else if ( $el.selectionStart || $el.selectionStart == '0' ) {\r\n-\t\t\t\tconst startPos = $el.selectionStart;\r\n-\t\t\t\tconst endPos = $el.selectionEnd;\r\n-\t\t\t\tconst scrollTop = $el.scrollTop;\r\n-\t\t\t\t$el.value = $el.value.substring( 0, startPos ) + varibale + $el.value.substring( endPos, $el.value.length );\r\n-\t\t\t\t$el.focus();\r\n-\t\t\t\t$el.selectionStart = startPos + varibale.length;\r\n-\t\t\t\t$el.selectionEnd = startPos + varibale.length;\r\n-\t\t\t\t$el.scrollTop = scrollTop;\r\n-\t\t\t} else {\r\n-\t\t\t\t$el.value += varibale;\r\n-\t\t\t\t$el.focus();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$select.on( 'change', function() {\r\n-\t\t\tif ( this.value ) {\r\n-\t\t\t\t$templates.filter( '.' + this.value ).removeClass( 'hide-if-js' ).siblings().addClass( 'hide-if-js' );\r\n-\t\t\t}\r\n-\t\t} ).trigger( 'change' );\r\n-\r\n-\t\t$variables.each( function() {\r\n-\t\t\tconst $list = $( this ),\r\n-\t\t\t\thasEditor = $list.hasClass( 'has-editor' );\r\n-\r\n-\t\t\t$list.on( 'click', 'li', function() {\r\n-\t\t\t\tif ( hasEditor ) {\r\n-\t\t\t\t\t_insertVariableToEditor( $list.attr( 'data-target' ), $( this ).data( 'variable' ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t_insertVariableToTextarea( $list.attr( 'data-target' ), $( this ).data( 'variable' ) );\r\n-\t\t\t\t}\r\n-\t\t\t} );\r\n-\t\t} );\r\n-\t} );\r\n-}( jQuery ) );\r\n+( function( $ ) {\n+\t$( '.lp-metabox-field__email-content' ).each( function() {\n+\t\tconst $field = $( this ),\n+\t\t\t$select = $field.find( 'select.lp-email-format' ),\n+\t\t\t$templates = $field.find( '.learn-press-email-template' ),\n+\t\t\t$variables = $field.find( '.learn-press-email-variables' );\n+\n+\t\tfunction _insertVariableToEditor( edId, variable ) {\n+\t\t\tlet editorId = null;\n+\t\t\tconst activeEditor = tinyMCE.activeEditor;\n+\n+\t\t\tfor ( editorId in tinyMCE.editors ) {\n+\t\t\t\tif ( editorId == edId ) {\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\teditorId = null;\n+\t\t\t}\n+\n+\t\t\tif ( ! editorId ) {\n+\t\t\t\t_insertVariableToTextarea( edId, variable );\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( activeEditor && $( activeEditor.getElement() ).attr( 'id' ) == editorId ) {\n+\t\t\t\tactiveEditor.execCommand( 'insertHTML', false, variable );\n+\n+\t\t\t\tif ( $( activeEditor.getElement() ).is( ':visible' ) ) {\n+\t\t\t\t\t_insertVariableToTextarea( edId, variable );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tfunction _insertVariableToTextarea( eId, varibale ) {\n+\t\t\tconst $el = $( '#' + eId ).get( 0 );\n+\n+\t\t\tif ( document.selection ) {\n+\t\t\t\t$el.focus();\n+\t\t\t\tsel = document.selection.createRange();\n+\t\t\t\tsel.text = varibale;\n+\t\t\t\t$el.focus();\n+\t\t\t} else if ( $el.selectionStart || $el.selectionStart == '0' ) {\n+\t\t\t\tconst startPos = $el.selectionStart;\n+\t\t\t\tconst endPos = $el.selectionEnd;\n+\t\t\t\tconst scrollTop = $el.scrollTop;\n+\t\t\t\t$el.value = $el.value.substring( 0, startPos ) + varibale + $el.value.substring( endPos, $el.value.length );\n+\t\t\t\t$el.focus();\n+\t\t\t\t$el.selectionStart = startPos + varibale.length;\n+\t\t\t\t$el.selectionEnd = startPos + varibale.length;\n+\t\t\t\t$el.scrollTop = scrollTop;\n+\t\t\t} else {\n+\t\t\t\t$el.value += varibale;\n+\t\t\t\t$el.focus();\n+\t\t\t}\n+\t\t}\n+\n+\t\t$select.on( 'change', function() {\n+\t\t\tif ( this.value ) {\n+\t\t\t\t$templates.filter( '.' + this.value ).removeClass( 'hide-if-js' ).siblings().addClass( 'hide-if-js' );\n+\t\t\t}\n+\t\t} ).trigger( 'change' );\n+\n+\t\t$variables.each( function() {\n+\t\t\tconst $list = $( this ),\n+\t\t\t\thasEditor = $list.hasClass( 'has-editor' );\n+\n+\t\t\t$list.on( 'click', 'li', function() {\n+\t\t\t\tif ( hasEditor ) {\n+\t\t\t\t\t_insertVariableToEditor( $list.attr( 'data-target' ), $( this ).data( 'variable' ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t_insertVariableToTextarea( $list.attr( 'data-target' ), $( this ).data( 'variable' ) );\n+\t\t\t\t}\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+}( jQuery ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,325 +1,325 @@\n-\u003C?php\r\n-if ( ! class_exists( 'LP_Meta_Box_Helper' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Meta_Box_Helper\r\n-\t *\u002F\r\n-\tclass LP_Meta_Box_Helper {\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected static $types = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected static $conditional_logic = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_screen = null;\r\n-\r\n-\t\tpublic static function output_fields( $options ) {\r\n-\t\t\tforeach ( $options as $value ) {\r\n-\t\t\t\tif ( ! isset( $value['type'] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['id'] ) ) {\r\n-\t\t\t\t\t$value['id'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['title'] ) ) {\r\n-\t\t\t\t\t$value['title'] = isset( $value['name'] ) ? $value['name'] : '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['class'] ) ) {\r\n-\t\t\t\t\t$value['class'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['css'] ) ) {\r\n-\t\t\t\t\t$value['css'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['default'] ) ) {\r\n-\t\t\t\t\t$value['default'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['desc'] ) ) {\r\n-\t\t\t\t\t$value['desc'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['desc_tip'] ) ) {\r\n-\t\t\t\t\t$value['desc_tip'] = false;\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['placeholder'] ) ) {\r\n-\t\t\t\t\t$value['placeholder'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['suffix'] ) ) {\r\n-\t\t\t\t\t$value['suffix'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! isset( $value['value'] ) ) {\r\n-\t\t\t\t\t$value['value'] = self::get_option( $value['id'], $value['default'] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$custom_attributes = array();\r\n-\r\n-\t\t\t\tif ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) {\r\n-\t\t\t\t\tforeach ( $value['custom_attributes'] as $attribute => $attribute_value ) {\r\n-\t\t\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $attribute_value ) . '\"';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$field_description = self::get_field_description( $value );\r\n-\t\t\t\t$description       = $field_description['description'];\r\n-\t\t\t\t$tooltip_html      = $field_description['tooltip_html'];\r\n-\r\n-\t\t\t\tswitch ( $value['type'] ) {\r\n-\t\t\t\t\tcase 'text':\r\n-\t\t\t\t\tcase 'password':\r\n-\t\t\t\t\tcase 'datetime':\r\n-\t\t\t\t\tcase 'datetime-local':\r\n-\t\t\t\t\tcase 'date':\r\n-\t\t\t\t\tcase 'month':\r\n-\t\t\t\t\tcase 'time':\r\n-\t\t\t\t\tcase 'week':\r\n-\t\t\t\t\tcase 'number':\r\n-\t\t\t\t\tcase 'email':\r\n-\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\tcase 'tel':\r\n-\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'select':\r\n-\t\t\t\t\tcase 'multiselect':\r\n-\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'image_advanced':\r\n-\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\tcase 'yes-no':\r\n-\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$file_meta_box_custom = LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002F' . $value['type'] . '.php';\r\n-\t\t\t\t\t\t$file_meta_box_custom = apply_filters( 'learnpress\u002Fmeta-box\u002Ffield-custom', $file_meta_box_custom );\r\n-\r\n-\t\t\t\t\t\t$pattern_find_match = '\u002F\\\u002Fadmin\\\u002Fmeta-box\\\u002Ffields\\\u002F\u002F';\r\n-\t\t\t\t\t\tpreg_match( $pattern_find_match, $file_meta_box_custom, $match );\r\n-\r\n-\t\t\t\t\t\tif ( empty( $match ) ) {\r\n-\t\t\t\t\t\t\techo sprintf( '\u003Cp class=\"lp-error\">Path file \"%s\" not valid. Format must is \u002Fadmin\u002Fmeta-box\u002Ffields\u003C\u002Fp>', $value['type'] );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( file_exists( $file_meta_box_custom ) ) {\r\n-\t\t\t\t\t\t\tinclude $file_meta_box_custom;\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\techo sprintf( '\u003Cp class=\"lp-error\">File meta box \"%s\" not exists\u003C\u002Fp>', $value['type'] );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic static function save_fields( $options, $data = null ) {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$update_options   = array();\r\n-\t\t\t$autoload_options = array();\r\n-\r\n-\t\t\tforeach ( $options as $option ) {\r\n-\t\t\t\tif ( ! isset( $option['id'] ) || ! isset( $option['type'] ) || ( isset( $option['is_option'] ) && false === $option['is_option'] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( strstr( $option['id'], '[' ) ) {\r\n-\t\t\t\t\tparse_str( $option['id'], $option_name_array );\r\n-\t\t\t\t\t$option_name  = current( array_keys( $option_name_array ) );\r\n-\t\t\t\t\t$setting_name = key( $option_name_array[ $option_name ] );\r\n-\t\t\t\t\t$raw_value    = isset( $data[ $option_name ][ $setting_name ] ) ? wp_unslash( $data[ $option_name ][ $setting_name ] ) : null;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$option_name  = $option['id'];\r\n-\t\t\t\t\t$setting_name = '';\r\n-\t\t\t\t\t$raw_value    = isset( $data[ $option['id'] ] ) ? wp_unslash( $data[ $option['id'] ] ) : null;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $option['type'] ) {\r\n-\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\tcase 'yes-no':\r\n-\t\t\t\t\t\t$value = '1' === $raw_value || 'yes' === $raw_value ? 'yes' : 'no';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t\t$value = trim( $raw_value );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'multiselect':\r\n-\t\t\t\t\tcase 'multi_select_countries':\r\n-\t\t\t\t\t\t$value = array_filter( array_map( 'learnpress_clean', (array) $raw_value ) );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'image-dimensions':\r\n-\t\t\t\t\t\t$value = array();\r\n-\t\t\t\t\t\tif ( isset( $raw_value['width'] ) ) {\r\n-\t\t\t\t\t\t\t$value['width']  = learnpress_clean( $raw_value['width'] );\r\n-\t\t\t\t\t\t\t$value['height'] = learnpress_clean( $raw_value['height'] );\r\n-\t\t\t\t\t\t\t$value['crop']   = isset( $raw_value['crop'] ) ? 1 : 0;\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$value['width']  = $option['default'][0];\r\n-\t\t\t\t\t\t\t$value['height'] = $option['default'][1];\r\n-\t\t\t\t\t\t\t$value['crop']   = $option['default'][2];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'select':\r\n-\t\t\t\t\t\t$allowed_values = empty( $option['options'] ) ? array() : array_map( 'strval', array_keys( $option['options'] ) );\r\n-\t\t\t\t\t\tif ( empty( $option['default'] ) && empty( $allowed_values ) ) {\r\n-\t\t\t\t\t\t\t$value = null;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$default = ( empty( $option['default'] ) ? $allowed_values[0] : $option['default'] );\r\n-\t\t\t\t\t\t$value   = in_array( $raw_value, $allowed_values, true ) ? $raw_value : $default;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'custom-fields':\r\n-\t\t\t\t\t\t$value = array();\r\n-\r\n-\t\t\t\t\t\tif ( is_array( $raw_value ) && ! empty( $raw_value ) ) {\r\n-\t\t\t\t\t\t\tforeach ( $raw_value as $feilds ) {\r\n-\t\t\t\t\t\t\t\tforeach ( $option['options'] as $cfkey => $cfoption ) {\r\n-\t\t\t\t\t\t\t\t\tif ( $cfoption['type'] === 'checkbox' ) {\r\n-\t\t\t\t\t\t\t\t\t\t$feilds[ $cfkey ] = ( isset( $feilds[ $cfkey ] ) && ( $feilds[ $cfkey ] === '1' || $feilds[ $cfkey ] === 'yes' ) ) ? 'yes' : 'no';\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\t$cfsort = $feilds['sort'];\r\n-\t\t\t\t\t\t\t\tunset( $feilds['sort'] );\r\n-\t\t\t\t\t\t\t\t$value[ $cfsort ] = $feilds;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F$value = LP_Helper::sanitize_params_submitted( $value );\r\n-\t\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\t\tcase 'image_advanced':\r\n-\t\t\t\t\t\t$value = ! empty( $raw_value ) ? array_filter( explode( ',', learnpress_clean( $raw_value ) ) ) : array();\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'image':\r\n-\t\t\t\t\t\t$value = ! empty( $raw_value ) ? absint( learnpress_clean( $raw_value ) ) : '';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'email-content':\r\n-\t\t\t\t\t\t$value = ! empty( $raw_value ) ? $raw_value : array();\r\n-\t\t\t\t\t\t\u002F\u002F$value = LP_Helper::sanitize_params_submitted( $value, 'html' );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\t\t$value = ! empty( $raw_value ) ? esc_url_raw( $raw_value ) : '';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$value = $raw_value;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Sanitize the value of an option.\r\n-\t\t\t\t *\r\n-\t\t\t\t * @since 4.0.0\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$value = apply_filters( 'learnpress_metabox_settings_sanitize_option', $value, $option, $raw_value );\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Sanitize the value of an option by option name.\r\n-\t\t\t\t *\r\n-\t\t\t\t * @since 4.0.0\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$value = apply_filters( \"learnpress_metabox_settings_sanitize_option_$option_name\", $value, $option, $raw_value );\r\n-\r\n-\t\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $option_name && $setting_name ) {\r\n-\t\t\t\t\tif ( ! isset( $update_options[ $option_name ] ) ) {\r\n-\t\t\t\t\t\t$update_options[ $option_name ] = get_option( $option_name, array() );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif ( ! is_array( $update_options[ $option_name ] ) ) {\r\n-\t\t\t\t\t\t$update_options[ $option_name ] = array();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$update_options[ $option_name ][ $setting_name ] = $value;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$update_options[ $option_name ] = $value;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$autoload_options[ $option_name ] = isset( $option['autoload'] ) ? (bool) $option['autoload'] : true;\r\n-\r\n-\t\t\t\tdo_action( 'learnpress_update_metabox_option', $option );\r\n-\r\n-\t\t\t\t\u002F\u002F Save all options in our array.\r\n-\t\t\t\tforeach ( $update_options as $name => $value ) {\r\n-\t\t\t\t\tupdate_option( $name, $value, $autoload_options[ $name ] ? 'yes' : 'no' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic static function get_field_description( $value ) {\r\n-\t\t\t$description  = '';\r\n-\t\t\t$tooltip_html = '';\r\n-\r\n-\t\t\tif ( true === $value['desc_tip'] ) {\r\n-\t\t\t\t$tooltip_html = $value['desc'];\r\n-\t\t\t} elseif ( ! empty( $value['desc_tip'] ) ) {\r\n-\t\t\t\t$description  = $value['desc'];\r\n-\t\t\t\t$tooltip_html = $value['desc_tip'];\r\n-\t\t\t} elseif ( ! empty( $value['desc'] ) ) {\r\n-\t\t\t\t$description = $value['desc'];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $description && in_array( $value['type'], array( 'textarea', 'radio' ), true ) ) {\r\n-\t\t\t\t$description = '\u003Cp style=\"margin-top:0\">' . wp_kses_post( $description ) . '\u003C\u002Fp>';\r\n-\t\t\t} elseif ( $description && in_array( $value['type'], array( 'checkbox', 'yes-no' ), true ) ) {\r\n-\t\t\t\t$description = wp_kses_post( $description );\r\n-\t\t\t} elseif ( $description ) {\r\n-\t\t\t\t$description = '\u003Cp class=\"description\">' . wp_kses_post( $description ) . '\u003C\u002Fp>';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $tooltip_html && in_array( $value['type'], array( 'checkbox' ), true ) ) {\r\n-\t\t\t\t$tooltip_html = '\u003Cp class=\"description\">' . $tooltip_html . '\u003C\u002Fp>';\r\n-\t\t\t} elseif ( $tooltip_html ) {\r\n-\t\t\t\t$tooltip_html = learn_press_quick_tip( $tooltip_html, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'description'  => $description,\r\n-\t\t\t\t'tooltip_html' => $tooltip_html,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tpublic static function get_option( $option_name, $default = '' ) {\r\n-\t\t\tif ( strstr( $option_name, '[' ) ) {\r\n-\t\t\t\tparse_str( $option_name, $option_array );\r\n-\r\n-\t\t\t\t\u002F\u002F Option name is first key\r\n-\t\t\t\t$option_name = current( array_keys( $option_array ) );\r\n-\r\n-\t\t\t\t\u002F\u002F Get value\r\n-\t\t\t\t$option_values = get_option( $option_name, '' );\r\n-\r\n-\t\t\t\t$key = key( $option_array[ $option_name ] );\r\n-\r\n-\t\t\t\tif ( is_array( $option_array[ $option_name ][ $key ] ) ) {\r\n-\t\t\t\t\t$key_child = key( $option_array[ $option_name ][ $key ] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( isset( $option_values[ $key ] ) ) {\r\n-\t\t\t\t\t$option_value = $option_values[ $key ];\r\n-\r\n-\t\t\t\t\tif ( is_array( $option_value ) && isset( $key_child )\r\n-\t\t\t\t\t\t&& array_key_exists( $key_child, $option_value ) ) {\r\n-\t\t\t\t\t\t$option_value = $option_value[ $key_child ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$option_value = null;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Single value\r\n-\t\t\t\t$option_value = LP_Settings::instance()->get( preg_replace( '!^learn_press_!', '', $option_name ), null );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_array( $option_value ) && ! is_null( $option_value ) ) {\r\n-\t\t\t\t$option_value = stripslashes( $option_value );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $option_value === null ? $default : $option_value;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+if ( ! class_exists( 'LP_Meta_Box_Helper' ) ) {\n+\t\u002F**\n+\t * Class LP_Meta_Box_Helper\n+\t *\u002F\n+\tclass LP_Meta_Box_Helper {\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected static $types = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected static $conditional_logic = array();\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_screen = null;\n+\n+\t\tpublic static function output_fields( $options ) {\n+\t\t\tforeach ( $options as $value ) {\n+\t\t\t\tif ( ! isset( $value['type'] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['id'] ) ) {\n+\t\t\t\t\t$value['id'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['title'] ) ) {\n+\t\t\t\t\t$value['title'] = isset( $value['name'] ) ? $value['name'] : '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['class'] ) ) {\n+\t\t\t\t\t$value['class'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['css'] ) ) {\n+\t\t\t\t\t$value['css'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['default'] ) ) {\n+\t\t\t\t\t$value['default'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['desc'] ) ) {\n+\t\t\t\t\t$value['desc'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['desc_tip'] ) ) {\n+\t\t\t\t\t$value['desc_tip'] = false;\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['placeholder'] ) ) {\n+\t\t\t\t\t$value['placeholder'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['suffix'] ) ) {\n+\t\t\t\t\t$value['suffix'] = '';\n+\t\t\t\t}\n+\t\t\t\tif ( ! isset( $value['value'] ) ) {\n+\t\t\t\t\t$value['value'] = self::get_option( $value['id'], $value['default'] );\n+\t\t\t\t}\n+\n+\t\t\t\t$custom_attributes = array();\n+\n+\t\t\t\tif ( ! empty( $value['custom_attributes'] ) && is_array( $value['custom_attributes'] ) ) {\n+\t\t\t\t\tforeach ( $value['custom_attributes'] as $attribute => $attribute_value ) {\n+\t\t\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $attribute_value ) . '\"';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$field_description = self::get_field_description( $value );\n+\t\t\t\t$description       = $field_description['description'];\n+\t\t\t\t$tooltip_html      = $field_description['tooltip_html'];\n+\n+\t\t\t\tswitch ( $value['type'] ) {\n+\t\t\t\t\tcase 'text':\n+\t\t\t\t\tcase 'password':\n+\t\t\t\t\tcase 'datetime':\n+\t\t\t\t\tcase 'datetime-local':\n+\t\t\t\t\tcase 'date':\n+\t\t\t\t\tcase 'month':\n+\t\t\t\t\tcase 'time':\n+\t\t\t\t\tcase 'week':\n+\t\t\t\t\tcase 'number':\n+\t\t\t\t\tcase 'email':\n+\t\t\t\t\tcase 'url':\n+\t\t\t\t\tcase 'tel':\n+\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'select':\n+\t\t\t\t\tcase 'multiselect':\n+\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'image_advanced':\n+\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\tcase 'yes-no':\n+\t\t\t\t\t\tinclude LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$file_meta_box_custom = LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002F' . $value['type'] . '.php';\n+\t\t\t\t\t\t$file_meta_box_custom = apply_filters( 'learnpress\u002Fmeta-box\u002Ffield-custom', $file_meta_box_custom );\n+\n+\t\t\t\t\t\t$pattern_find_match = '\u002F\\\u002Fadmin\\\u002Fmeta-box\\\u002Ffields\\\u002F\u002F';\n+\t\t\t\t\t\tpreg_match( $pattern_find_match, $file_meta_box_custom, $match );\n+\n+\t\t\t\t\t\tif ( empty( $match ) ) {\n+\t\t\t\t\t\t\techo sprintf( '\u003Cp class=\"lp-error\">Path file \"%s\" not valid. Format must is \u002Fadmin\u002Fmeta-box\u002Ffields\u003C\u002Fp>', $value['type'] );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( file_exists( $file_meta_box_custom ) ) {\n+\t\t\t\t\t\t\tinclude $file_meta_box_custom;\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\techo sprintf( '\u003Cp class=\"lp-error\">File meta box \"%s\" not exists\u003C\u002Fp>', $value['type'] );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic static function save_fields( $options, $data = null ) {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$update_options   = array();\n+\t\t\t$autoload_options = array();\n+\n+\t\t\tforeach ( $options as $option ) {\n+\t\t\t\tif ( ! isset( $option['id'] ) || ! isset( $option['type'] ) || ( isset( $option['is_option'] ) && false === $option['is_option'] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( strstr( $option['id'], '[' ) ) {\n+\t\t\t\t\tparse_str( $option['id'], $option_name_array );\n+\t\t\t\t\t$option_name  = current( array_keys( $option_name_array ) );\n+\t\t\t\t\t$setting_name = key( $option_name_array[ $option_name ] );\n+\t\t\t\t\t$raw_value    = isset( $data[ $option_name ][ $setting_name ] ) ? wp_unslash( $data[ $option_name ][ $setting_name ] ) : null;\n+\t\t\t\t} else {\n+\t\t\t\t\t$option_name  = $option['id'];\n+\t\t\t\t\t$setting_name = '';\n+\t\t\t\t\t$raw_value    = isset( $data[ $option['id'] ] ) ? wp_unslash( $data[ $option['id'] ] ) : null;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $option['type'] ) {\n+\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\tcase 'yes-no':\n+\t\t\t\t\t\t$value = '1' === $raw_value || 'yes' === $raw_value ? 'yes' : 'no';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'textarea':\n+\t\t\t\t\t\t$value = trim( $raw_value );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'multiselect':\n+\t\t\t\t\tcase 'multi_select_countries':\n+\t\t\t\t\t\t$value = array_filter( array_map( 'learnpress_clean', (array) $raw_value ) );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'image-dimensions':\n+\t\t\t\t\t\t$value = array();\n+\t\t\t\t\t\tif ( isset( $raw_value['width'] ) ) {\n+\t\t\t\t\t\t\t$value['width']  = learnpress_clean( $raw_value['width'] );\n+\t\t\t\t\t\t\t$value['height'] = learnpress_clean( $raw_value['height'] );\n+\t\t\t\t\t\t\t$value['crop']   = isset( $raw_value['crop'] ) ? 1 : 0;\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$value['width']  = $option['default'][0];\n+\t\t\t\t\t\t\t$value['height'] = $option['default'][1];\n+\t\t\t\t\t\t\t$value['crop']   = $option['default'][2];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'select':\n+\t\t\t\t\t\t$allowed_values = empty( $option['options'] ) ? array() : array_map( 'strval', array_keys( $option['options'] ) );\n+\t\t\t\t\t\tif ( empty( $option['default'] ) && empty( $allowed_values ) ) {\n+\t\t\t\t\t\t\t$value = null;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$default = ( empty( $option['default'] ) ? $allowed_values[0] : $option['default'] );\n+\t\t\t\t\t\t$value   = in_array( $raw_value, $allowed_values, true ) ? $raw_value : $default;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'custom-fields':\n+\t\t\t\t\t\t$value = array();\n+\n+\t\t\t\t\t\tif ( is_array( $raw_value ) && ! empty( $raw_value ) ) {\n+\t\t\t\t\t\t\tforeach ( $raw_value as $feilds ) {\n+\t\t\t\t\t\t\t\tforeach ( $option['options'] as $cfkey => $cfoption ) {\n+\t\t\t\t\t\t\t\t\tif ( $cfoption['type'] === 'checkbox' ) {\n+\t\t\t\t\t\t\t\t\t\t$feilds[ $cfkey ] = ( isset( $feilds[ $cfkey ] ) && ( $feilds[ $cfkey ] === '1' || $feilds[ $cfkey ] === 'yes' ) ) ? 'yes' : 'no';\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\t$cfsort = $feilds['sort'];\n+\t\t\t\t\t\t\t\tunset( $feilds['sort'] );\n+\t\t\t\t\t\t\t\t$value[ $cfsort ] = $feilds;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\u002F\u002F$value = LP_Helper::sanitize_params_submitted( $value );\n+\t\t\t\t\t\tbreak;\n+\n+\t\t\t\t\tcase 'image_advanced':\n+\t\t\t\t\t\t$value = ! empty( $raw_value ) ? array_filter( explode( ',', learnpress_clean( $raw_value ) ) ) : array();\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'image':\n+\t\t\t\t\t\t$value = ! empty( $raw_value ) ? absint( learnpress_clean( $raw_value ) ) : '';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'email-content':\n+\t\t\t\t\t\t$value = ! empty( $raw_value ) ? $raw_value : array();\n+\t\t\t\t\t\t\u002F\u002F$value = LP_Helper::sanitize_params_submitted( $value, 'html' );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'url':\n+\t\t\t\t\t\t$value = ! empty( $raw_value ) ? esc_url_raw( $raw_value ) : '';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$value = $raw_value;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Sanitize the value of an option.\n+\t\t\t\t *\n+\t\t\t\t * @since 4.0.0\n+\t\t\t\t *\u002F\n+\t\t\t\t$value = apply_filters( 'learnpress_metabox_settings_sanitize_option', $value, $option, $raw_value );\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Sanitize the value of an option by option name.\n+\t\t\t\t *\n+\t\t\t\t * @since 4.0.0\n+\t\t\t\t *\u002F\n+\t\t\t\t$value = apply_filters( \"learnpress_metabox_settings_sanitize_option_$option_name\", $value, $option, $raw_value );\n+\n+\t\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $option_name && $setting_name ) {\n+\t\t\t\t\tif ( ! isset( $update_options[ $option_name ] ) ) {\n+\t\t\t\t\t\t$update_options[ $option_name ] = get_option( $option_name, array() );\n+\t\t\t\t\t}\n+\t\t\t\t\tif ( ! is_array( $update_options[ $option_name ] ) ) {\n+\t\t\t\t\t\t$update_options[ $option_name ] = array();\n+\t\t\t\t\t}\n+\t\t\t\t\t$update_options[ $option_name ][ $setting_name ] = $value;\n+\t\t\t\t} else {\n+\t\t\t\t\t$update_options[ $option_name ] = $value;\n+\t\t\t\t}\n+\n+\t\t\t\t$autoload_options[ $option_name ] = isset( $option['autoload'] ) ? (bool) $option['autoload'] : true;\n+\n+\t\t\t\tdo_action( 'learnpress_update_metabox_option', $option );\n+\n+\t\t\t\t\u002F\u002F Save all options in our array.\n+\t\t\t\tforeach ( $update_options as $name => $value ) {\n+\t\t\t\t\tupdate_option( $name, $value, $autoload_options[ $name ] ? 'yes' : 'no' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic static function get_field_description( $value ) {\n+\t\t\t$description  = '';\n+\t\t\t$tooltip_html = '';\n+\n+\t\t\tif ( true === $value['desc_tip'] ) {\n+\t\t\t\t$tooltip_html = $value['desc'];\n+\t\t\t} elseif ( ! empty( $value['desc_tip'] ) ) {\n+\t\t\t\t$description  = $value['desc'];\n+\t\t\t\t$tooltip_html = $value['desc_tip'];\n+\t\t\t} elseif ( ! empty( $value['desc'] ) ) {\n+\t\t\t\t$description = $value['desc'];\n+\t\t\t}\n+\n+\t\t\tif ( $description && in_array( $value['type'], array( 'textarea', 'radio' ), true ) ) {\n+\t\t\t\t$description = '\u003Cp style=\"margin-top:0\">' . wp_kses_post( $description ) . '\u003C\u002Fp>';\n+\t\t\t} elseif ( $description && in_array( $value['type'], array( 'checkbox', 'yes-no' ), true ) ) {\n+\t\t\t\t$description = wp_kses_post( $description );\n+\t\t\t} elseif ( $description ) {\n+\t\t\t\t$description = '\u003Cp class=\"description\">' . wp_kses_post( $description ) . '\u003C\u002Fp>';\n+\t\t\t}\n+\n+\t\t\tif ( $tooltip_html && in_array( $value['type'], array( 'checkbox' ), true ) ) {\n+\t\t\t\t$tooltip_html = '\u003Cp class=\"description\">' . $tooltip_html . '\u003C\u002Fp>';\n+\t\t\t} elseif ( $tooltip_html ) {\n+\t\t\t\t$tooltip_html = learn_press_quick_tip( $tooltip_html, false );\n+\t\t\t}\n+\n+\t\t\treturn array(\n+\t\t\t\t'description'  => $description,\n+\t\t\t\t'tooltip_html' => $tooltip_html,\n+\t\t\t);\n+\t\t}\n+\n+\t\tpublic static function get_option( $option_name, $default = '' ) {\n+\t\t\tif ( strstr( $option_name, '[' ) ) {\n+\t\t\t\tparse_str( $option_name, $option_array );\n+\n+\t\t\t\t\u002F\u002F Option name is first key\n+\t\t\t\t$option_name = current( array_keys( $option_array ) );\n+\n+\t\t\t\t\u002F\u002F Get value\n+\t\t\t\t$option_values = get_option( $option_name, '' );\n+\n+\t\t\t\t$key = key( $option_array[ $option_name ] );\n+\n+\t\t\t\tif ( is_array( $option_array[ $option_name ][ $key ] ) ) {\n+\t\t\t\t\t$key_child = key( $option_array[ $option_name ][ $key ] );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( isset( $option_values[ $key ] ) ) {\n+\t\t\t\t\t$option_value = $option_values[ $key ];\n+\n+\t\t\t\t\tif ( is_array( $option_value ) && isset( $key_child )\n+\t\t\t\t\t\t&& array_key_exists( $key_child, $option_value ) ) {\n+\t\t\t\t\t\t$option_value = $option_value[ $key_child ];\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t$option_value = null;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Single value\n+\t\t\t\t$option_value = LP_Settings::instance()->get( preg_replace( '!^learn_press_!', '', $option_name ), null );\n+\t\t\t}\n+\n+\t\t\tif ( ! is_array( $option_value ) && ! is_null( $option_value ) ) {\n+\t\t\t\t$option_value = stripslashes( $option_value );\n+\t\t\t}\n+\n+\t\t\treturn $option_value === null ? $default : $option_value;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcheckbox.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-\r\n-if ( ! isset( $value ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$option_value     = $value['value'];\r\n-$visibility_class = array();\r\n-\r\n-if ( isset( $value['show_if_checked'] ) ) {\r\n-\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\r\n-\r\n-\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\r\n-\t\t$visibility_class[] = 'lp-option-disabled';\r\n-\t}\r\n-}\r\n-?>\r\n-\r\n-\u003C?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>\r\n-\t\u003Ctr class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\r\n-\t\t\u003Cth scope=\"row\" class=\"titledesc\">\u003C?php echo esc_html( $value['title'] ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd class=\"forminp forminp-checkbox\">\r\n-\t\t\t\u003Cfieldset>\r\n-\u003C?php else : ?>\r\n-\t\u003Cfieldset class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\r\n-\u003C?php endif; ?>\r\n-\r\n-\u003C?php if ( ! empty( $value['title'] ) ) : ?>\r\n-\t\u003Clegend class=\"screen-reader-text\">\u003Cspan>\u003C?php echo esc_html( $value['title'] ); ?>\u003C\u002Fspan>\u003C\u002Flegend>\r\n-\u003C?php endif; ?>\r\n-\r\n-\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\u003Cinput\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\ttype=\"checkbox\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ?? '' ); ?>\"\r\n-\t\t\tvalue=\"1\"\r\n-\t\t\u003C?php checked( $option_value, 'yes' ); ?>\r\n-\t\t\u003C?php echo implode( ' ', $custom_attributes ?? array() ); ?>\r\n-\t\t\u002F> \u003C?php echo wp_kses_post( $description ?? '' ); ?>\r\n-\t\u003C\u002Flabel> \u003C?php echo wp_kses_post( $tooltip_html ?? '' ); ?>\r\n-\r\n-\u003C?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>\r\n-\t\t\t\u003C\u002Ffieldset>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C?php else : ?>\r\n-\t\u003C\u002Ffieldset>\r\n-\t\u003C?php\r\n-endif;\r\n+\u003C?php\n+\n+if ( ! isset( $value ) ) {\n+\treturn;\n+}\n+\n+$option_value     = $value['value'];\n+$visibility_class = array();\n+\n+if ( isset( $value['show_if_checked'] ) ) {\n+\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\n+\n+\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\n+\t\t$visibility_class[] = 'lp-option-disabled';\n+\t}\n+}\n+?>\n+\n+\u003C?php if ( ! isset( $value['checkboxgroup'] ) || 'start' === $value['checkboxgroup'] ) : ?>\n+\t\u003Ctr class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\n+\t\t\u003Cth scope=\"row\" class=\"titledesc\">\u003C?php echo esc_html( $value['title'] ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd class=\"forminp forminp-checkbox\">\n+\t\t\t\u003Cfieldset>\n+\u003C?php else : ?>\n+\t\u003Cfieldset class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\n+\u003C?php endif; ?>\n+\n+\u003C?php if ( ! empty( $value['title'] ) ) : ?>\n+\t\u003Clegend class=\"screen-reader-text\">\u003Cspan>\u003C?php echo esc_html( $value['title'] ); ?>\u003C\u002Fspan>\u003C\u002Flegend>\n+\u003C?php endif; ?>\n+\n+\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\u003Cinput\n+\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\ttype=\"checkbox\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ?? '' ); ?>\"\n+\t\t\tvalue=\"1\"\n+\t\t\u003C?php checked( $option_value, 'yes' ); ?>\n+\t\t\u003C?php echo implode( ' ', $custom_attributes ?? array() ); ?>\n+\t\t\u002F> \u003C?php echo wp_kses_post( $description ?? '' ); ?>\n+\t\u003C\u002Flabel> \u003C?php echo wp_kses_post( $tooltip_html ?? '' ); ?>\n+\n+\u003C?php if ( ! isset( $value['checkboxgroup'] ) || 'end' === $value['checkboxgroup'] ) : ?>\n+\t\t\t\u003C\u002Ffieldset>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C?php else : ?>\n+\t\u003C\u002Ffieldset>\n+\t\u003C?php\n+endif;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcolor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcolor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcolor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcolor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php $option_value = $value['value']; ?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp lp-metabox-field__color forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003Cspan class=\"colorpickpreview\" style=\"background: \u003C?php echo esc_attr( $option_value ); ?>\">&nbsp;\u003C\u002Fspan>\r\n-\t\t\u003Cinput\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\ttype=\"text\"\r\n-\t\t\tdir=\"ltr\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\r\n-\t\t\tvalue=\"\u003C?php echo esc_attr( $option_value ); ?>\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?> colorpick lp-metabox__colorpick\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\r\n-\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\r\n-\t\t\t\u002F>\r\n-\t\t\u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\t\u003Cdiv id=\"colorPickerDiv_\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tclass=\"colorpickdiv\"\r\n-\t\t\tstyle=\"z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;display:none;\">\u003C\u002Fdiv>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php $option_value = $value['value']; ?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp lp-metabox-field__color forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003Cspan class=\"colorpickpreview\" style=\"background: \u003C?php echo esc_attr( $option_value ); ?>\">&nbsp;\u003C\u002Fspan>\n+\t\t\u003Cinput\n+\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\ttype=\"text\"\n+\t\t\tdir=\"ltr\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\n+\t\t\tvalue=\"\u003C?php echo esc_attr( $option_value ); ?>\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?> colorpick lp-metabox__colorpick\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\n+\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\n+\t\t\t\u002F>\n+\t\t\u003C?php echo wp_kses_post( $description ); ?>\n+\t\t\u003Cdiv id=\"colorPickerDiv_\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tclass=\"colorpickdiv\"\n+\t\t\tstyle=\"z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;display:none;\">\u003C\u002Fdiv>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcourse-permalink.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcourse-permalink.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcourse-permalink.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcourse-permalink.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F\u002Fflush_rewrite_rules();\r\n-\r\n-$settings = LP_Settings::instance();\r\n-global $wp_post_types;\r\n-\r\n-if ( ! empty( $wp_post_types[ LP_COURSE_CPT ] ) ) {\r\n-\t$course_type          = $wp_post_types[ LP_COURSE_CPT ];\r\n-\t$default_courses_slug = $course_type->rewrite['slug'];\r\n-} else {\r\n-\t$default_courses_slug = '';\r\n-}\r\n-\r\n-$courses_page_id  = learn_press_get_page_id( 'courses' );\r\n-$base_slug        = urldecode( ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : 'courses' );\r\n-$course_permalink = LP_Settings::get_option( 'course_base', '\u002F' . trailingslashit( $base_slug ) ); \u002F\u002F option 2\r\n-$course_base      = 'course';\r\n-\r\n-$structures = array(\r\n-\t1 => array(\r\n-\t\t'value' => '\u002F' . trailingslashit( $course_base ),\r\n-\t\t'text'  => esc_html__( 'Course', 'learnpress' ),\r\n-\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fsample-course\u002F', home_url(), $course_base ) ),\r\n-\t),\r\n-\t2 => array(\r\n-\t\t'value' => '\u002F' . trailingslashit( $base_slug ),\r\n-\t\t'text'  => esc_html__( 'Courses base', 'learnpress' ),\r\n-\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fsample-course\u002F', home_url(), $base_slug ) ),\r\n-\t),\r\n-\t3 => array(\r\n-\t\t'value' => '\u002F' . trailingslashit( $base_slug ) . trailingslashit( '%course_category%' ),\r\n-\t\t'text'  => esc_html__( 'Courses base with category', 'learnpress' ),\r\n-\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fcourse-category\u002Fsample-course\u002F', home_url(), $base_slug ) ),\r\n-\t),\r\n-);\r\n-\r\n-$base_type = get_option( 'learn_press_course_base_type' );\r\n-$is_custom = ( $base_type == 'custom' && $course_permalink != '' );\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003Cul>\r\n-\t\t\t\u003C?php foreach ( $structures as $k => $structure ) : ?>\r\n-\t\t\t\t\u003Cli class=\"learn-press-single-course-permalink\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( $k == 2 || $k == 3 ) {\r\n-\t\t\t\t\techo ' learn-press-courses-page-id';\r\n-\t\t\t\t\techo ! $courses_page_id ? ' hide-if-js' : '';\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\" style=\"margin-bottom: 20px;\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t$is_checked = ( $course_permalink == '' && $structure['value'] == '' ) || ( $structure['value'] == trailingslashit( $course_permalink ) );\r\n-\t\t\t\t\t$is_checked = checked( $is_checked, true, false );\r\n-\r\n-\t\t\t\t\tif ( $is_custom && $is_checked ) {\r\n-\t\t\t\t\t\t$is_custom = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" type=\"radio\"\r\n-\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $structure['value'] ); ?>\"\r\n-\t\t\t\t\t\t\tclass=\"learn-press-course-base\"\r\n-\t\t\t\t\t\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $is_checked ); ?> \u002F>\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $structure['text'] ); ?>\r\n-\t\t\t\t\t\t\u003Cp>\u003Ccode>\u003C?php echo wp_kses_post( $structure['code'] ); ?>\u003C\u002Fcode>\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\r\n-\t\t\t\u003Cli class=\"learn-press-single-course-permalink custom-base\">\r\n-\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" id=\"learn_press_custom_permalink\" type=\"radio\" value=\"custom\" \u003C?php checked( $is_custom, true ); ?> \u002F>\r\n-\t\t\t\t\t\u003C?php esc_html_e( 'Custom Base', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003Cinput name=\"course_permalink_structure\" id=\"course_permalink_structure\" readonly=\"\u003C?php echo ! $is_custom ? 'readonly' : false; ?>\" type=\"text\"\r\n-\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( trailingslashit( $course_permalink ) ); ?>\" class=\"regular-text code\"\u002F>\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Enter a custom base to use. A base must be set or WordPress will use default values instead.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+\u002F\u002Fflush_rewrite_rules();\n+\n+$settings = LP_Settings::instance();\n+global $wp_post_types;\n+\n+if ( ! empty( $wp_post_types[ LP_COURSE_CPT ] ) ) {\n+\t$course_type          = $wp_post_types[ LP_COURSE_CPT ];\n+\t$default_courses_slug = $course_type->rewrite['slug'];\n+} else {\n+\t$default_courses_slug = '';\n+}\n+\n+$courses_page_id  = learn_press_get_page_id( 'courses' );\n+$base_slug        = urldecode( ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : 'courses' );\n+$course_permalink = LP_Settings::get_option( 'course_base', '\u002F' . trailingslashit( $base_slug ) ); \u002F\u002F option 2\n+$course_base      = 'course';\n+\n+$structures = array(\n+\t1 => array(\n+\t\t'value' => '\u002F' . trailingslashit( $course_base ),\n+\t\t'text'  => esc_html__( 'Course', 'learnpress' ),\n+\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fsample-course\u002F', home_url(), $course_base ) ),\n+\t),\n+\t2 => array(\n+\t\t'value' => '\u002F' . trailingslashit( $base_slug ),\n+\t\t'text'  => esc_html__( 'Courses base', 'learnpress' ),\n+\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fsample-course\u002F', home_url(), $base_slug ) ),\n+\t),\n+\t3 => array(\n+\t\t'value' => '\u002F' . trailingslashit( $base_slug ) . trailingslashit( '%course_category%' ),\n+\t\t'text'  => esc_html__( 'Courses base with category', 'learnpress' ),\n+\t\t'code'  => esc_html( sprintf( '%s\u002F%s\u002Fcourse-category\u002Fsample-course\u002F', home_url(), $base_slug ) ),\n+\t),\n+);\n+\n+$base_type = get_option( 'learn_press_course_base_type' );\n+$is_custom = ( $base_type == 'custom' && $course_permalink != '' );\n+?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003Cul>\n+\t\t\t\u003C?php foreach ( $structures as $k => $structure ) : ?>\n+\t\t\t\t\u003Cli class=\"learn-press-single-course-permalink\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( $k == 2 || $k == 3 ) {\n+\t\t\t\t\techo ' learn-press-courses-page-id';\n+\t\t\t\t\techo ! $courses_page_id ? ' hide-if-js' : '';\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\" style=\"margin-bottom: 20px;\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t$is_checked = ( $course_permalink == '' && $structure['value'] == '' ) || ( $structure['value'] == trailingslashit( $course_permalink ) );\n+\t\t\t\t\t$is_checked = checked( $is_checked, true, false );\n+\n+\t\t\t\t\tif ( $is_custom && $is_checked ) {\n+\t\t\t\t\t\t$is_custom = false;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" type=\"radio\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $structure['value'] ); ?>\"\n+\t\t\t\t\t\t\tclass=\"learn-press-course-base\"\n+\t\t\t\t\t\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $is_checked ); ?> \u002F>\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $structure['text'] ); ?>\n+\t\t\t\t\t\t\u003Cp>\u003Ccode>\u003C?php echo wp_kses_post( $structure['code'] ); ?>\u003C\u002Fcode>\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\n+\t\t\t\u003Cli class=\"learn-press-single-course-permalink custom-base\">\n+\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" id=\"learn_press_custom_permalink\" type=\"radio\" value=\"custom\" \u003C?php checked( $is_custom, true ); ?> \u002F>\n+\t\t\t\t\t\u003C?php esc_html_e( 'Custom Base', 'learnpress' ); ?>\n+\t\t\t\t\t\u003Cinput name=\"course_permalink_structure\" id=\"course_permalink_structure\" readonly=\"\u003C?php echo ! $is_custom ? 'readonly' : false; ?>\" type=\"text\"\n+\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( trailingslashit( $course_permalink ) ); ?>\" class=\"regular-text code\"\u002F>\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Enter a custom base to use. A base must be set or WordPress will use default values instead.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcustom-fields.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcustom-fields.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcustom-fields.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcustom-fields.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php $option_value = $value['value']; ?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields\">\r\n-\t\t\u003Ctable class=\"widefat\">\r\n-\t\t\t\u003Cthead>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth class=\"sort\">&nbsp;\u003C\u002Fth>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( $value['options'] ) {\r\n-\t\t\t\t\t\tforeach ( $value['options'] as $key => $val ) {\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Cth>\u003C?php echo wp_kses_post( $value['options'][ $key ]['title'] ); ?> \u003C?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cth>&nbsp;\u003C\u002Fth>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( $option_value ) {\r\n-\t\t\t\t\tforeach ( $option_value as $key => $values ) {\r\n-\t\t\t\t\t\tlp_metabox_custom_fields( $value, $values, $key );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\u003Ctfoot>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth colspan=\"5\">\r\n-\t\t\t\t\t\t\u003Ca href=\"#\" class=\"button insert lp-metabox-custom-field-button\" data-row=\"\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tob_start();\r\n-\t\t\t\t\t\t\tlp_metabox_custom_fields( $value, '', 'lp_metabox_custom_fields_key' );\r\n-\t\t\t\t\t\t\techo esc_attr( ob_get_clean() );\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\">\u003C?php esc_html_e( 'Add new', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fth>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftfoot>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\t\u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php $option_value = $value['value']; ?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?> lp-metabox__custom-fields\">\n+\t\t\u003Ctable class=\"widefat\">\n+\t\t\t\u003Cthead>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth class=\"sort\">&nbsp;\u003C\u002Fth>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( $value['options'] ) {\n+\t\t\t\t\t\tforeach ( $value['options'] as $key => $val ) {\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Cth>\u003C?php echo wp_kses_post( $value['options'][ $key ]['title'] ); ?> \u003C?php echo isset( $value['options'][ $key ]['desc_tip'] ) ? learn_press_quick_tip( $value['options'][ $key ]['desc_tip'], false ) : ''; ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cth>&nbsp;\u003C\u002Fth>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>\n+\t\t\t\u003Ctbody>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( $option_value ) {\n+\t\t\t\t\tforeach ( $option_value as $key => $values ) {\n+\t\t\t\t\t\tlp_metabox_custom_fields( $value, $values, $key );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\t\u003Ctfoot>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth colspan=\"5\">\n+\t\t\t\t\t\t\u003Ca href=\"#\" class=\"button insert lp-metabox-custom-field-button\" data-row=\"\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tob_start();\n+\t\t\t\t\t\t\tlp_metabox_custom_fields( $value, '', 'lp_metabox_custom_fields_key' );\n+\t\t\t\t\t\t\techo esc_attr( ob_get_clean() );\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\">\u003C?php esc_html_e( 'Add new', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fth>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftfoot>\n+\t\t\u003C\u002Ftable>\n+\t\t\u003C?php echo wp_kses_post( $description ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Femail-content.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Femail-content.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Femail-content.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Femail-content.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,143 +1,143 @@\n-\u003C?php\r\n-wp_enqueue_script( 'learn-press-email-content-field', LearnPress::instance()->plugin_url( 'inc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js' ) );\r\n-wp_enqueue_style( 'learn-press-email-content-field', LearnPress::instance()->plugin_url( 'inc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css' ) );\r\n-\r\n-if ( ! isset( $value ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$meta = wp_parse_args(\r\n-\t$value['value'],\r\n-\tarray(\r\n-\t\t'format' => 'html',\r\n-\t\t'html'   => '',\r\n-\t\t'plain'  => '',\r\n-\t)\r\n-);\r\n-\r\n-$field = wp_parse_args(\r\n-\t$value,\r\n-\tarray(\r\n-\t\t'template_base'        => '',\r\n-\t\t'template_path'        => '',\r\n-\t\t'template_html'        => '',\r\n-\t\t'template_plain'       => '',\r\n-\t\t'template_html_local'  => '',\r\n-\t\t'template_plain_local' => '',\r\n-\t\t'support_variables'    => array(),\r\n-\t)\r\n-);\r\n-\r\n-$email_format = $meta['format'];\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel>\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ?? '' ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp lp-metabox-field__email-content forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003C?php\r\n-\t\t\u002F*learn_press_email_formats_dropdown(\r\n-\t\t\tarray(\r\n-\t\t\t\t'name'        => $value['id'] . '[format]',\r\n-\t\t\t\t'class'       => 'lp-email-format',\r\n-\t\t\t\t'selected'    => $email_format,\r\n-\t\t\t\t'option_none' => array( '' => esc_html__( 'General Settings', 'learnpress' ) ),\r\n-\t\t\t)\r\n-\t\t);*\u002F\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"lp-email-templates\">\r\n-\t\t\t\u003C?php\r\n-\t\t\t$templates = learn_press_email_formats();\r\n-\r\n-\t\t\tforeach ( $templates as $template_type => $title ) :\r\n-\t\t\t\t$template = ! empty( $field[ \"template_{$template_type}\" ] ) ? $field[ \"template_{$template_type}\" ] : null;\r\n-\r\n-\t\t\t\tif ( empty( $template ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$local_file    = ! empty( $field[ \"template_{$template_type}_local\" ] ) ? $field[ \"template_{$template_type}_local\" ] : null;\r\n-\t\t\t\t$template_file = $field['template_base'] . $template;\r\n-\t\t\t\t$template_dir  = $field['template_path'];\r\n-\t\t\t\t$classes       = array( 'learn-press-email-template' );\r\n-\r\n-\t\t\t\tif ( $template_type == 'html' ) {\r\n-\t\t\t\t\t$classes[] = $template_type . ' multipart';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$classes[] = 'plain_text';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $template_type == $email_format || ( ( $email_format == 'plain_text' || ! $email_format ) && $template_type == 'plain' ) ) {\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$classes[] = 'hide-if-js';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$content_html  = $meta['html'] ? stripslashes( $meta['html'] ) : LP_WP_Filesystem::instance()->file_get_contents( $template_file );\r\n-\t\t\t\t$content_plain = $meta['plain'] ? stripslashes( $meta['plain'] ) : LP_WP_Filesystem::instance()->file_get_contents( $template_file );\r\n-\r\n-\t\t\t\t$has_local_file = file_exists( $local_file );\r\n-\r\n-\t\t\t\t$theme_dir      = get_template_directory();\r\n-\t\t\t\t$stylesheet_dir = get_stylesheet_directory();\r\n-\r\n-\t\t\t\tif ( $theme_dir != $stylesheet_dir ) {\r\n-\t\t\t\t\t$theme_dir = $stylesheet_dir;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$theme_folder = basename( $theme_dir );\r\n-\t\t\t\t?>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\r\n-\t\t\t\t\t\u003C?php if ( $has_local_file ) : ?>\r\n-\t\t\t\t\t\t\u003Ctextarea rows=\"10\" style=\"width: 90%;\" readonly=\"readonly\">\u003C?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\u003Cp class=\"description\">\r\n-\t\t\t\t\t\t\t\u003C?php printf( __( 'This template has been overridden by your theme and can be found in: \u003Ccode>%s\u003C\u002Fcode>. \u003Cbr \u002F>Please open the file in an editor program to edit', 'learnpress' ), $theme_folder . '\u002F' . $template_dir . '\u002F' . $template ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( $has_local_file ? 'hide-if-js' : '' ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php if ( $template_type == 'html' ) : ?>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\twp_editor(\r\n-\t\t\t\t\t\t\t\t$content_html,\r\n-\t\t\t\t\t\t\t\tsanitize_key( $field['id'] . '-' . $template_type ),\r\n-\t\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t\t'textarea_rows' => 20,\r\n-\t\t\t\t\t\t\t\t\t'wpautop'       => false,\r\n-\t\t\t\t\t\t\t\t\t'textarea_name' => $field['id'] . '[html]',\r\n-\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C?php else : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"editor\">\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea\r\n-\t\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>\"\r\n-\t\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $field['id'] . '[plain]' ); ?>\"\r\n-\t\t\t\t\t\t\t\t\tclass=\"code\" cols=\"25\" rows=\"20\"\r\n-\t\t\t\t\t\t\t\t\tstyle=\"width: 97%;\">\u003C?php echo wp_kses_post( $content_plain ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t\u003C?php if ( ! $has_local_file ) : ?>\r\n-\t\t\t\t\t\t\u003C?php if ( $field['support_variables'] ) : ?>\r\n-\t\t\t\t\t\t\t\u003Col class=\"learn-press-email-variables\u003C?php echo esc_html( $template_type == 'html' ? ' has-editor' : '' ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-target=\"\u003C?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php foreach ( $field['support_variables'] as $variable ) : ?>\r\n-\t\t\t\t\t\t\t\t\t\u003Cli data-variable=\"\u003C?php echo esc_attr( $variable ); ?>\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ccode>\u003C?php echo esc_html( $variable ); ?>\u003C\u002Fcode>\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fol>\r\n-\r\n-\t\t\t\t\t\t\t\u003Cp class=\"description\">\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Click on any variables above to insert them into the email.', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+wp_enqueue_script( 'learn-press-email-content-field', LearnPress::instance()->plugin_url( 'inc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.js' ) );\n+wp_enqueue_style( 'learn-press-email-content-field', LearnPress::instance()->plugin_url( 'inc\u002Fadmin\u002Fmeta-box\u002Fassets\u002Femail-content.css' ) );\n+\n+if ( ! isset( $value ) ) {\n+\treturn;\n+}\n+\n+$meta = wp_parse_args(\n+\t$value['value'],\n+\tarray(\n+\t\t'format' => 'html',\n+\t\t'html'   => '',\n+\t\t'plain'  => '',\n+\t)\n+);\n+\n+$field = wp_parse_args(\n+\t$value,\n+\tarray(\n+\t\t'template_base'        => '',\n+\t\t'template_path'        => '',\n+\t\t'template_html'        => '',\n+\t\t'template_plain'       => '',\n+\t\t'template_html_local'  => '',\n+\t\t'template_plain_local' => '',\n+\t\t'support_variables'    => array(),\n+\t)\n+);\n+\n+$email_format = $meta['format'];\n+?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel>\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ?? '' ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp lp-metabox-field__email-content forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003C?php\n+\t\t\u002F*learn_press_email_formats_dropdown(\n+\t\t\tarray(\n+\t\t\t\t'name'        => $value['id'] . '[format]',\n+\t\t\t\t'class'       => 'lp-email-format',\n+\t\t\t\t'selected'    => $email_format,\n+\t\t\t\t'option_none' => array( '' => esc_html__( 'General Settings', 'learnpress' ) ),\n+\t\t\t)\n+\t\t);*\u002F\n+\t\t?>\n+\t\t\u003Cdiv class=\"lp-email-templates\">\n+\t\t\t\u003C?php\n+\t\t\t$templates = learn_press_email_formats();\n+\n+\t\t\tforeach ( $templates as $template_type => $title ) :\n+\t\t\t\t$template = ! empty( $field[ \"template_{$template_type}\" ] ) ? $field[ \"template_{$template_type}\" ] : null;\n+\n+\t\t\t\tif ( empty( $template ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$local_file    = ! empty( $field[ \"template_{$template_type}_local\" ] ) ? $field[ \"template_{$template_type}_local\" ] : null;\n+\t\t\t\t$template_file = $field['template_base'] . $template;\n+\t\t\t\t$template_dir  = $field['template_path'];\n+\t\t\t\t$classes       = array( 'learn-press-email-template' );\n+\n+\t\t\t\tif ( $template_type == 'html' ) {\n+\t\t\t\t\t$classes[] = $template_type . ' multipart';\n+\t\t\t\t} else {\n+\t\t\t\t\t$classes[] = 'plain_text';\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $template_type == $email_format || ( ( $email_format == 'plain_text' || ! $email_format ) && $template_type == 'plain' ) ) {\n+\t\t\t\t} else {\n+\t\t\t\t\t$classes[] = 'hide-if-js';\n+\t\t\t\t}\n+\n+\t\t\t\t$content_html  = $meta['html'] ? stripslashes( $meta['html'] ) : LP_WP_Filesystem::instance()->file_get_contents( $template_file );\n+\t\t\t\t$content_plain = $meta['plain'] ? stripslashes( $meta['plain'] ) : LP_WP_Filesystem::instance()->file_get_contents( $template_file );\n+\n+\t\t\t\t$has_local_file = file_exists( $local_file );\n+\n+\t\t\t\t$theme_dir      = get_template_directory();\n+\t\t\t\t$stylesheet_dir = get_stylesheet_directory();\n+\n+\t\t\t\tif ( $theme_dir != $stylesheet_dir ) {\n+\t\t\t\t\t$theme_dir = $stylesheet_dir;\n+\t\t\t\t}\n+\n+\t\t\t\t$theme_folder = basename( $theme_dir );\n+\t\t\t\t?>\n+\n+\t\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\n+\t\t\t\t\t\u003C?php if ( $has_local_file ) : ?>\n+\t\t\t\t\t\t\u003Ctextarea rows=\"10\" style=\"width: 90%;\" readonly=\"readonly\">\u003C?php echo stripslashes( LP_WP_Filesystem::instance()->file_get_contents( $local_file ) ); ?>\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\u003Cp class=\"description\">\n+\t\t\t\t\t\t\t\u003C?php printf( __( 'This template has been overridden by your theme and can be found in: \u003Ccode>%s\u003C\u002Fcode>. \u003Cbr \u002F>Please open the file in an editor program to edit', 'learnpress' ), $theme_folder . '\u002F' . $template_dir . '\u002F' . $template ); ?>\n+\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( $has_local_file ? 'hide-if-js' : '' ); ?>\">\n+\t\t\t\t\t\t\u003C?php if ( $template_type == 'html' ) : ?>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\twp_editor(\n+\t\t\t\t\t\t\t\t$content_html,\n+\t\t\t\t\t\t\t\tsanitize_key( $field['id'] . '-' . $template_type ),\n+\t\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t\t'textarea_rows' => 20,\n+\t\t\t\t\t\t\t\t\t'wpautop'       => false,\n+\t\t\t\t\t\t\t\t\t'textarea_name' => $field['id'] . '[html]',\n+\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C?php else : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"editor\">\n+\t\t\t\t\t\t\t\t\u003Ctextarea\n+\t\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>\"\n+\t\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $field['id'] . '[plain]' ); ?>\"\n+\t\t\t\t\t\t\t\t\tclass=\"code\" cols=\"25\" rows=\"20\"\n+\t\t\t\t\t\t\t\t\tstyle=\"width: 97%;\">\u003C?php echo wp_kses_post( $content_plain ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t\u003C?php if ( ! $has_local_file ) : ?>\n+\t\t\t\t\t\t\u003C?php if ( $field['support_variables'] ) : ?>\n+\t\t\t\t\t\t\t\u003Col class=\"learn-press-email-variables\u003C?php echo esc_html( $template_type == 'html' ? ' has-editor' : '' ); ?>\"\n+\t\t\t\t\t\t\t\tdata-target=\"\u003C?php echo esc_attr( sanitize_key( $field['id'] . '-' . $template_type ) ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php foreach ( $field['support_variables'] as $variable ) : ?>\n+\t\t\t\t\t\t\t\t\t\u003Cli data-variable=\"\u003C?php echo esc_attr( $variable ); ?>\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ccode>\u003C?php echo esc_html( $variable ); ?>\u003C\u002Fcode>\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\t\t\u003C\u002Fol>\n+\n+\t\t\t\t\t\t\t\u003Cp class=\"description\">\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Click on any variables above to insert them into the email.', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fhtml.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fhtml.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fhtml.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fhtml.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-if ( ! isset( $value ) || ! isset( $tooltip_html ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel>\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( $value['type'] ); ?>\">\r\n-\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $value['default'] ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+if ( ! isset( $value ) || ! isset( $tooltip_html ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel>\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( $value['type'] ); ?>\">\n+\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $value['default'] ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-advanced.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-\u003C?php $option_value = $value['value']; ?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp lp-metabox-field__image-advanced forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003Cul class=\"lp-metabox-field__image-advanced-images\">\r\n-\t\t\t\u003C?php\r\n-\t\t\t$update_meta         = false;\r\n-\t\t\t$updated_gallery_ids = array();\r\n-\r\n-\t\t\tif ( ! empty( $option_value ) ) {\r\n-\t\t\t\tforeach ( $option_value as $attachment_id ) {\r\n-\t\t\t\t\t$attachment = wp_get_attachment_image( $attachment_id, 'thumbnail' );\r\n-\r\n-\t\t\t\t\tif ( empty( $attachment ) ) {\r\n-\t\t\t\t\t\t$update_meta = true;\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cli class=\"image\" data-attachment_id=\"\u003C?php echo esc_attr( $attachment_id ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $attachment ); ?>\r\n-\t\t\t\t\t\t\u003Cul class=\"actions\">\r\n-\t\t\t\t\t\t\t\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t$updated_gallery_ids[] = $attachment_id;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003Cinput type=\"hidden\" id=\"lp-gallery-images-ids\" name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" value=\"\u003C?php echo esc_attr( implode( ',', $updated_gallery_ids ) ); ?>\" \u002F>\r\n-\r\n-\t\t\u003Cp class=\"lp-metabox-field__image-advanced-upload hide-if-no-js\">\r\n-\t\t\t\u003Ca href=\"#\" data-choose=\"\u003C?php esc_attr_e( 'Add images', 'learnpress' ); ?>\" data-update=\"\u003C?php esc_attr_e( 'Add to gallery', 'learnpress' ); ?>\" data-delete=\"\u003C?php esc_attr_e( 'Delete images', 'learnpress' ); ?>\" data-text=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\u003C?php esc_html_e( 'Add images', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php $option_value = $value['value']; ?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp lp-metabox-field__image-advanced forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003Cul class=\"lp-metabox-field__image-advanced-images\">\n+\t\t\t\u003C?php\n+\t\t\t$update_meta         = false;\n+\t\t\t$updated_gallery_ids = array();\n+\n+\t\t\tif ( ! empty( $option_value ) ) {\n+\t\t\t\tforeach ( $option_value as $attachment_id ) {\n+\t\t\t\t\t$attachment = wp_get_attachment_image( $attachment_id, 'thumbnail' );\n+\n+\t\t\t\t\tif ( empty( $attachment ) ) {\n+\t\t\t\t\t\t$update_meta = true;\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cli class=\"image\" data-attachment_id=\"\u003C?php echo esc_attr( $attachment_id ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $attachment ); ?>\n+\t\t\t\t\t\t\u003Cul class=\"actions\">\n+\t\t\t\t\t\t\t\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fli>\n+\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t$updated_gallery_ids[] = $attachment_id;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003Cinput type=\"hidden\" id=\"lp-gallery-images-ids\" name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" value=\"\u003C?php echo esc_attr( implode( ',', $updated_gallery_ids ) ); ?>\" \u002F>\n+\n+\t\t\u003Cp class=\"lp-metabox-field__image-advanced-upload hide-if-no-js\">\n+\t\t\t\u003Ca href=\"#\" data-choose=\"\u003C?php esc_attr_e( 'Add images', 'learnpress' ); ?>\" data-update=\"\u003C?php esc_attr_e( 'Add to gallery', 'learnpress' ); ?>\" data-delete=\"\u003C?php esc_attr_e( 'Delete images', 'learnpress' ); ?>\" data-text=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\u003C?php esc_html_e( 'Add images', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-dimensions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-dimensions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-dimensions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage-dimensions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-$size   = $value['value'];\r\n-$width  = isset( $size['width'] ) ? $size['width'] : $value['default'][0];\r\n-$height = isset( $size['height'] ) ? $size['height'] : $value['default'][1];\r\n-$crop   = isset( $size['crop'] ) ? $size['crop'] : $value['default'][2];\r\n-?>\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\u003Clabel>\r\n-\t\t\u003C?php echo esc_html( $value['title'] ); ?>\r\n-\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\u003C\u002Flabel>\r\n-\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp image_width_settings\">\r\n-\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>[width]\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>-width\" type=\"text\"\r\n-\t\t\tsize=\"5\" value=\"\u003C?php echo esc_attr( $width ); ?>\" \u002F>&times;\r\n-\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>[height]\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>-height\"\r\n-\t\t\ttype=\"text\" size=\"5\"\r\n-\t\t\tvalue=\"\u003C?php echo esc_attr( $height ); ?>\" \u002F>px\r\n-\t\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+$size   = $value['value'];\n+$width  = isset( $size['width'] ) ? $size['width'] : $value['default'][0];\n+$height = isset( $size['height'] ) ? $size['height'] : $value['default'][1];\n+$crop   = isset( $size['crop'] ) ? $size['crop'] : $value['default'][2];\n+?>\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\u003Clabel>\n+\t\t\u003C?php echo esc_html( $value['title'] ); ?>\n+\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\u003C\u002Flabel>\n+\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp image_width_settings\">\n+\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>[width]\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>-width\" type=\"text\"\n+\t\t\tsize=\"5\" value=\"\u003C?php echo esc_attr( $width ); ?>\" \u002F>&times;\n+\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $value['id'] ); ?>[height]\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>-height\"\n+\t\t\ttype=\"text\" size=\"5\"\n+\t\t\tvalue=\"\u003C?php echo esc_attr( $height ); ?>\" \u002F>px\n+\t\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-wp_enqueue_media();\r\n-$option_value = $value['value'];\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\r\n-\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp lp-metabox-field__image forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003Cdiv class=\"lp-metabox-field__image--image\">\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003C?php if ( ! empty( $option_value ) ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-metabox-field__image--inner\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_get_attachment_image( $option_value, 'thumbnail' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cinput type=\"hidden\" class=\"lp-metabox-field__image--id\" name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" value=\"\u003C?php echo esc_attr( $option_value ); ?>\" \u002F>\r\n-\r\n-\t\t\u003Cp class=\"lp-metabox-field__image--upload hide-if-no-js\">\r\n-\t\t\t\u003Ca href=\"#\" class=\"lp-metabox-field__image--add button\" data-choose=\"\u003C?php esc_attr_e( 'Select images', 'learnpress' ); ?>\" data-update=\"\u003C?php esc_attr_e( 'Select', 'learnpress' ); ?>\">\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\u003Ca href=\"#\" class=\"lp-metabox-field__image--delete button\" style=\"display: none;\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+wp_enqueue_media();\n+$option_value = $value['value'];\n+?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\n+\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp lp-metabox-field__image forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003Cdiv class=\"lp-metabox-field__image--image\">\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003C?php if ( ! empty( $option_value ) ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"lp-metabox-field__image--inner\">\n+\t\t\t\t\t\t\u003C?php echo wp_get_attachment_image( $option_value, 'thumbnail' ); ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cinput type=\"hidden\" class=\"lp-metabox-field__image--id\" name=\"\u003C?php echo esc_attr( $value['id'] ); ?>\" value=\"\u003C?php echo esc_attr( $option_value ); ?>\" \u002F>\n+\n+\t\t\u003Cp class=\"lp-metabox-field__image--upload hide-if-no-js\">\n+\t\t\t\u003Ca href=\"#\" class=\"lp-metabox-field__image--add button\" data-choose=\"\u003C?php esc_attr_e( 'Select images', 'learnpress' ); ?>\" data-update=\"\u003C?php esc_attr_e( 'Select', 'learnpress' ); ?>\">\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\u003Ca href=\"#\" class=\"lp-metabox-field__image--delete button\" style=\"display: none;\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Flist-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Flist-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Flist-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Flist-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-\u003C?php $emails = LP_Emails::instance()->emails; ?>\r\n-\r\n-\u003Ctable class=\"learn-press-emails\">\r\n-\t\u003Cthead>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C\u002Fth>\r\n-\t\t\u003Cth>\u003C?php esc_html_e( 'Email', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth>\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth>\u003C\u002Fth>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\r\n-\t\u003Ctbody>\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $emails as $email ) {\r\n-\t\t\t$group = '';\r\n-\r\n-\t\t\tif ( $email->group ) {\r\n-\t\t\t\t$url = esc_url_raw(\r\n-\t\t\t\t\tadd_query_arg(\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'section'     => $email->group->group_id,\r\n-\t\t\t\t\t\t\t'sub-section' => $email->id,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-settings&tab=emails' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$group = $email->group;\r\n-\t\t\t} else {\r\n-\t\t\t\t$url = esc_url_raw( add_query_arg( array( 'section' => $email->id ), admin_url( 'admin.php?page=learn-press-settings&tab=emails' ) ) );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Ctr id=\"email-\u003C?php echo esc_attr( $email->id ); ?>\">\r\n-\t\t\t\t\u003Ctd class=\"status \u003C?php echo esc_attr( $email->enable ? 'enabled' : '' ); ?>\">\r\n-\t\t\t\t\t\u003Cspan class=\"change-email-status dashicons dashicons-yes\" data-status=\"\u003C?php echo esc_attr( $email->enable ? 'on' : 'off' ); ?>\" data-id=\"\u003C?php echo esc_attr( $email->id ); ?>\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"name\">\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tif ( $group ) {\r\n-\t\t\t\t\t\t\techo join( ' &rarr; ', array( $group, $email->title ) );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\techo wp_kses_post( $email->title );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"description\">\u003C?php echo wp_kses_post( $email->description ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"manage\">\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\u003C?php esc_html_e( 'Manage', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php } ?>\r\n-\t\u003C\u002Ftbody>\r\n-\u003C\u002Ftable>\r\n-\r\n-\u003Cp class=\"email-actions\">\r\n-\t\u003Cbutton class=\"button\" id=\"learn-press-enable-emails\" data-status=\"yes\">\u003C?php esc_html_e( 'Enable all', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\u003Cbutton class=\"button\" id=\"learn-press-disable-emails\" data-status=\"no\">\u003C?php esc_html_e( 'Disable all', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\u003C\u002Fp>\r\n+\u003C?php $emails = LP_Emails::instance()->emails; ?>\n+\n+\u003Ctable class=\"learn-press-emails\">\n+\t\u003Cthead>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C\u002Fth>\n+\t\t\u003Cth>\u003C?php esc_html_e( 'Email', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth>\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth>\u003C\u002Fth>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\n+\t\u003Ctbody>\n+\t\t\u003C?php\n+\t\tforeach ( $emails as $email ) {\n+\t\t\t$group = '';\n+\n+\t\t\tif ( $email->group ) {\n+\t\t\t\t$url = esc_url_raw(\n+\t\t\t\t\tadd_query_arg(\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'section'     => $email->group->group_id,\n+\t\t\t\t\t\t\t'sub-section' => $email->id,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-settings&tab=emails' )\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$group = $email->group;\n+\t\t\t} else {\n+\t\t\t\t$url = esc_url_raw( add_query_arg( array( 'section' => $email->id ), admin_url( 'admin.php?page=learn-press-settings&tab=emails' ) ) );\n+\t\t\t}\n+\t\t\t?>\n+\n+\t\t\t\u003Ctr id=\"email-\u003C?php echo esc_attr( $email->id ); ?>\">\n+\t\t\t\t\u003Ctd class=\"status \u003C?php echo esc_attr( $email->enable ? 'enabled' : '' ); ?>\">\n+\t\t\t\t\t\u003Cspan class=\"change-email-status dashicons dashicons-yes\" data-status=\"\u003C?php echo esc_attr( $email->enable ? 'on' : 'off' ); ?>\" data-id=\"\u003C?php echo esc_attr( $email->id ); ?>\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"name\">\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tif ( $group ) {\n+\t\t\t\t\t\t\techo join( ' &rarr; ', array( $group, $email->title ) );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\techo wp_kses_post( $email->title );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"description\">\u003C?php echo wp_kses_post( $email->description ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"manage\">\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\u003C?php esc_html_e( 'Manage', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php } ?>\n+\t\u003C\u002Ftbody>\n+\u003C\u002Ftable>\n+\n+\u003Cp class=\"email-actions\">\n+\t\u003Cbutton class=\"button\" id=\"learn-press-enable-emails\" data-status=\"yes\">\u003C?php esc_html_e( 'Enable all', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\u003Cbutton class=\"button\" id=\"learn-press-disable-emails\" data-status=\"no\">\u003C?php esc_html_e( 'Disable all', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpages-dropdown.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpages-dropdown.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpages-dropdown.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpages-dropdown.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-$option_value = $value['value'];\r\n-\r\n-$page_dropdown_args = array(\r\n-\t'echo'     => true,\r\n-\t'name'     => $value['id'],\r\n-\t'selected' => $option_value,\r\n-);\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\r\n-\t\t\u003C?php learn_press_pages_dropdown( $page_dropdown_args ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+$option_value = $value['value'];\n+\n+$page_dropdown_args = array(\n+\t'echo'     => true,\n+\t'name'     => $value['id'],\n+\t'selected' => $option_value,\n+);\n+?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo wp_kses_post( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">&lrm;\n+\t\t\u003C?php learn_press_pages_dropdown( $page_dropdown_args ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpayment-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpayment-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpayment-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpayment-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php $gateways = LP_Gateways::instance()->get_gateways(); ?>\r\n-\r\n-\u003Ctable class=\"learn-press-payments\u003C?php echo sizeof( $gateways ) > 1 ? ' sortable' : ''; ?>\">\r\n-\t\u003Cthead>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth class=\"order\">\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"name\">\u003C?php esc_html_e( 'Payment', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"id\">\u003C?php esc_html_e( 'ID', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"description\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"status\">\u003C?php esc_html_e( 'Enable\u002FDisable', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\r\n-\t\u003Ctbody>\r\n-\t\t\u003C?php foreach ( $gateways as $gateway ) : ?>\r\n-\t\t\t\u003Ctr id=\"payment-\u003C?php echo esc_attr( $gateway->get_id() ); ?>\" data-payment=\"\u003C?php echo esc_attr( $gateway->get_id() ); ?>\">\r\n-\t\t\t\t\u003Ctd class=\"order\">\u003Cspan class=\"dashicons dashicons-menu\">\u003C\u002Fspan>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"name\">\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-settings&tab=payments&section=' . $gateway->get_id() ) ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo esc_html( $gateway->get_method_title() ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"id\">\u003C?php echo esc_html( $gateway->get_id() ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"description\">\u003C?php echo wp_kses_post( $gateway->get_method_description() ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"status\u003C?php echo esc_attr( $gateway->is_enabled() ? ' enabled' : '' ); ?>\">\r\n-\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-yes\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"payment-order\" value=\"\u003C?php echo esc_attr( $gateway->get_id() ); ?>\"\u002F>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C\u002Ftbody>\r\n-\u003C\u002Ftable>\r\n+\u003C?php $gateways = LP_Gateways::instance()->get_gateways(); ?>\n+\n+\u003Ctable class=\"learn-press-payments\u003C?php echo sizeof( $gateways ) > 1 ? ' sortable' : ''; ?>\">\n+\t\u003Cthead>\n+\t\u003Ctr>\n+\t\t\u003Cth class=\"order\">\u003C\u002Fth>\n+\t\t\u003Cth class=\"name\">\u003C?php esc_html_e( 'Payment', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth class=\"id\">\u003C?php esc_html_e( 'ID', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth class=\"description\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth class=\"status\">\u003C?php esc_html_e( 'Enable\u002FDisable', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\n+\t\u003Ctbody>\n+\t\t\u003C?php foreach ( $gateways as $gateway ) : ?>\n+\t\t\t\u003Ctr id=\"payment-\u003C?php echo esc_attr( $gateway->get_id() ); ?>\" data-payment=\"\u003C?php echo esc_attr( $gateway->get_id() ); ?>\">\n+\t\t\t\t\u003Ctd class=\"order\">\u003Cspan class=\"dashicons dashicons-menu\">\u003C\u002Fspan>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"name\">\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-settings&tab=payments&section=' . $gateway->get_id() ) ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo esc_html( $gateway->get_method_title() ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"id\">\u003C?php echo esc_html( $gateway->get_id() ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"description\">\u003C?php echo wp_kses_post( $gateway->get_method_description() ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"status\u003C?php echo esc_attr( $gateway->is_enabled() ? ' enabled' : '' ); ?>\">\n+\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-yes\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"payment-order\" value=\"\u003C?php echo esc_attr( $gateway->get_id() ); ?>\"\u002F>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C\u002Ftbody>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fradio.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fradio.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fradio.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fradio.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php $option_value = $value['value']; ?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\r\n-\t\t\u003Cfieldset>\r\n-\t\t\t\u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\t\t\u003Cul>\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $value['options'] as $key => $val ) {\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\u003Clabel>\u003Cinput\r\n-\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $key ); ?>\"\r\n-\t\t\t\t\t\ttype=\"radio\"\r\n-\t\t\t\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\r\n-\t\t\t\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\r\n-\t\t\t\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\r\n-\t\t\t\t\t\t\u003C?php checked( $key, $option_value ); ?>\r\n-\t\t\t\t\t\t\u002F> \u003C?php echo esc_html( $val ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C\u002Ffieldset>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n-\r\n+\u003C?php $option_value = $value['value']; ?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\n+\t\t\u003Cfieldset>\n+\t\t\t\u003C?php echo wp_kses_post( $description ); ?>\n+\t\t\t\u003Cul>\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $value['options'] as $key => $val ) {\n+\t\t\t\t?>\n+\t\t\t\t\u003Cli>\n+\t\t\t\t\t\u003Clabel>\u003Cinput\n+\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $key ); ?>\"\n+\t\t\t\t\t\ttype=\"radio\"\n+\t\t\t\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\n+\t\t\t\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\n+\t\t\t\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\n+\t\t\t\t\t\t\u003C?php checked( $key, $option_value ); ?>\n+\t\t\t\t\t\t\u002F> \u003C?php echo esc_html( $val ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C\u002Ffieldset>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fsectionend.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fsectionend.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fsectionend.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fsectionend.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\u003C?php\r\n-if ( ! empty( $value['id'] ) ) {\r\n-\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) . '_end' );\r\n-}\r\n-\r\n-echo '\u003C\u002Ftable>';\r\n-\r\n-if ( ! empty( $value['id'] ) ) {\r\n-\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) . '_after' );\r\n-}\r\n+\u003C?php\n+if ( ! empty( $value['id'] ) ) {\n+\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) . '_end' );\n+}\n+\n+echo '\u003C\u002Ftable>';\n+\n+if ( ! empty( $value['id'] ) ) {\n+\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) . '_after' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect-page.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect-page.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect-page.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect-page.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-$args = array(\r\n-\t'name'             => $value['id'],\r\n-\t'id'               => $value['id'],\r\n-\t'sort_column'      => 'menu_order',\r\n-\t'sort_order'       => 'ASC',\r\n-\t'show_option_none' => ' ',\r\n-\t'class'            => $value['class'],\r\n-\t'echo'             => false,\r\n-\t'selected'         => absint( $value['value'] ),\r\n-\t'post_status'      => 'publish,private,draft',\r\n-);\r\n-\r\n-if ( isset( $value['args'] ) ) {\r\n-\t$args = wp_parse_args( $value['args'], $args );\r\n-}\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\" class=\"single_select_page\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel>\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp\">\r\n-\t\u003C?php echo str_replace( ' id=', \" data-placeholder='\" . esc_attr__( 'Select a page&hellip;', 'learnpress' ) . \"' style='\" . $value['css'] . \"' class='\" . $value['class'] . \"' id=\", wp_dropdown_pages( $args ) ); ?> \u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+$args = array(\n+\t'name'             => $value['id'],\n+\t'id'               => $value['id'],\n+\t'sort_column'      => 'menu_order',\n+\t'sort_order'       => 'ASC',\n+\t'show_option_none' => ' ',\n+\t'class'            => $value['class'],\n+\t'echo'             => false,\n+\t'selected'         => absint( $value['value'] ),\n+\t'post_status'      => 'publish,private,draft',\n+);\n+\n+if ( isset( $value['args'] ) ) {\n+\t$args = wp_parse_args( $value['args'], $args );\n+}\n+?>\n+\n+\u003Ctr valign=\"top\" class=\"single_select_page\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel>\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp\">\n+\t\u003C?php echo str_replace( ' id=', \" data-placeholder='\" . esc_attr__( 'Select a page&hellip;', 'learnpress' ) . \"' style='\" . $value['css'] . \"' class='\" . $value['class'] . \"' id=\", wp_dropdown_pages( $args ) ); ?> \u003C?php echo wp_kses_post( $description ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fselect.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\r\n-if ( ! isset( $value ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$option_value     = $value['value'];\r\n-$visibility_class = array();\r\n-\r\n-if ( isset( $value['show_if_checked'] ) ) {\r\n-\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\r\n-\r\n-\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\r\n-\t\t$visibility_class[] = 'lp-option-disabled';\r\n-\t}\r\n-}\r\n-?>\r\n-\u003Ctr valign=\"top\" class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\r\n-\t\t\u003Cselect\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\u003C?php echo ( 'multiselect' === $value['type'] ) ? '[]' : ''; ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\r\n-\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\r\n-\t\t\t\u003C?php echo 'multiselect' === $value['type'] ? 'multiple=\"multiple\"' : ''; ?>\r\n-\t\t\t>\r\n-\t\t\t\u003C?php if ( isset( $value['is_optgroup'] ) && ! empty( $value['is_optgroup'] ) ) : ?>\r\n-\t\t\t\t\u003C?php foreach ( $value['options'] as $optgroup_label => $optgroup ) : ?>\r\n-\t\t\t\t\t\u003Coptgroup label=\"\u003C?php echo esc_html( ucfirst( $optgroup_label ) ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php foreach ( $optgroup as $key => $val ) : ?>\r\n-\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $key ); ?>\"\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tif ( is_array( $option_value ) ) {\r\n-\t\t\t\t\t\t\t\t\tselected( in_array( (string) $key, $option_value, true ), true );\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tselected( $option_value, (string) $key );\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t>\u003C?php echo esc_html( $val ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\u003C\u002Foptgroup>\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\u003C?php else : ?>\r\n-\t\t\t\t\u003C?php foreach ( $value['options'] as $key => $val ) { ?>\r\n-\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $key ); ?>\"\r\n-\t\t\t\t\t\u003C?php\r\n-\r\n-\t\t\t\t\tif ( is_array( $option_value ) ) {\r\n-\t\t\t\t\t\tselected( in_array( (string) $key, $option_value, true ), true );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tselected( $option_value, (string) $key );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t>\u003C?php echo esc_html( $val ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fselect>\u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+\n+if ( ! isset( $value ) ) {\n+\treturn;\n+}\n+\n+$option_value     = $value['value'];\n+$visibility_class = array();\n+\n+if ( isset( $value['show_if_checked'] ) ) {\n+\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\n+\n+\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\n+\t\t$visibility_class[] = 'lp-option-disabled';\n+\t}\n+}\n+?>\n+\u003Ctr valign=\"top\" class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\u003C?php echo esc_html( $value['title'] ); ?> \u003C?php echo wp_kses_post( $tooltip_html ); ?>\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\n+\t\t\u003Cselect\n+\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\u003C?php echo ( 'multiselect' === $value['type'] ) ? '[]' : ''; ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\n+\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\n+\t\t\t\u003C?php echo 'multiselect' === $value['type'] ? 'multiple=\"multiple\"' : ''; ?>\n+\t\t\t>\n+\t\t\t\u003C?php if ( isset( $value['is_optgroup'] ) && ! empty( $value['is_optgroup'] ) ) : ?>\n+\t\t\t\t\u003C?php foreach ( $value['options'] as $optgroup_label => $optgroup ) : ?>\n+\t\t\t\t\t\u003Coptgroup label=\"\u003C?php echo esc_html( ucfirst( $optgroup_label ) ); ?>\">\n+\t\t\t\t\t\t\u003C?php foreach ( $optgroup as $key => $val ) : ?>\n+\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $key ); ?>\"\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tif ( is_array( $option_value ) ) {\n+\t\t\t\t\t\t\t\t\tselected( in_array( (string) $key, $option_value, true ), true );\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tselected( $option_value, (string) $key );\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t>\u003C?php echo esc_html( $val ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\u003C\u002Foptgroup>\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\u003C?php else : ?>\n+\t\t\t\t\u003C?php foreach ( $value['options'] as $key => $val ) { ?>\n+\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $key ); ?>\"\n+\t\t\t\t\t\u003C?php\n+\n+\t\t\t\t\tif ( is_array( $option_value ) ) {\n+\t\t\t\t\t\tselected( in_array( (string) $key, $option_value, true ), true );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tselected( $option_value, (string) $key );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t?>\n+\t\t\t\t\t>\u003C?php echo esc_html( $val ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fselect>\u003C?php echo wp_kses_post( $description ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftextarea.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftextarea.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftextarea.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftextarea.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php $option_value = apply_filters( 'lp_metabox_setting_ouput_textarea', esc_textarea( $value['value'] ), $value, $value['value'] ); ?>\r\n-\r\n-\u003Ctr valign=\"top\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo esc_html( $value['title'] ); ?>\r\n-\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\r\n-\t\t\u003Ctextarea\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\r\n-\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\r\n-\t\t\t>\u003C?php echo wp_kses_post( $option_value ); ?>\u003C\u002Ftextarea>\r\n-\t\t\u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php $option_value = apply_filters( 'lp_metabox_setting_ouput_textarea', esc_textarea( $value['value'] ), $value, $value['value'] ); ?>\n+\n+\u003Ctr valign=\"top\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\t\u003C?php echo esc_html( $value['title'] ); ?>\n+\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\n+\t\t\u003Ctextarea\n+\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\n+\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\n+\t\t\t>\u003C?php echo wp_kses_post( $option_value ); ?>\u003C\u002Ftextarea>\n+\t\t\u003C?php echo wp_kses_post( $description ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftext.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\u002F**\r\n- * Support for type:\r\n- * text, Password, datetime, number, email, url, tel..\r\n- *\r\n- * @version 4.0.0\r\n- * @author Nhamdv \u003Cemail@email.com>\r\n- *\u002F\r\n-\r\n-$option_value     = $value['value'];\r\n-$visibility_class = [];\r\n-if ( isset( $value['show_if_checked'] ) ) {\r\n-\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\r\n-\r\n-\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\r\n-\t\t$visibility_class[] = 'lp-option-disabled';\r\n-\t}\r\n-}\r\n-?>\r\n-\r\n-\u003Ctr valign=\"top\" class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\r\n-\t\u003Cth scope=\"row\" class=\"titledesc\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\r\n-\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fth>\r\n-\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\r\n-\t\t\u003Cinput\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\r\n-\t\t\ttype=\"\u003C?php echo esc_attr( $value['type'] ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\r\n-\t\t\tvalue=\"\u003C?php echo esc_attr( $option_value ); ?>\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\r\n-\t\t\t\u003C?php echo isset( $value['min'] ) ? 'min=\"' . $value['min'] . '\"' : ''; ?>\r\n-\t\t\t\u003C?php echo isset( $value['max'] ) ? 'max=\"' . $value['max'] . '\"' : ''; ?>\r\n-\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\r\n-\t\t\t\u002F>\u003C?php echo esc_html( $value['suffix'] ); ?> \u003C?php echo wp_kses_post( $description ); ?>\r\n-\t\u003C\u002Ftd>\r\n-\u003C\u002Ftr>\r\n+\u003C?php\n+\u002F**\n+ * Support for type:\n+ * text, Password, datetime, number, email, url, tel..\n+ *\n+ * @version 4.0.0\n+ * @author Nhamdv \u003Cemail@email.com>\n+ *\u002F\n+\n+$option_value     = $value['value'];\n+$visibility_class = [];\n+if ( isset( $value['show_if_checked'] ) ) {\n+\t$visibility_class[] = 'show_if_' . $value['show_if_checked'];\n+\n+\tif ( 'no' === LP_Settings::get_option( $value['show_if_checked'] ) ) {\n+\t\t$visibility_class[] = 'lp-option-disabled';\n+\t}\n+}\n+?>\n+\n+\u003Ctr valign=\"top\" class=\"\u003C?php echo esc_attr( implode( ' ', $visibility_class ) ); ?>\">\n+\t\u003Cth scope=\"row\" class=\"titledesc\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $value['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $value['title'] ); ?>\n+\t\t\t\u003C?php echo wp_kses_post( $tooltip_html ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fth>\n+\t\u003Ctd class=\"forminp forminp-\u003C?php echo esc_attr( sanitize_title( $value['type'] ) ); ?>\">\n+\t\t\u003Cinput\n+\t\t\tname=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $value['id'] ); ?>\"\n+\t\t\ttype=\"\u003C?php echo esc_attr( $value['type'] ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $value['css'] ); ?>\"\n+\t\t\tvalue=\"\u003C?php echo esc_attr( $option_value ); ?>\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $value['class'] ); ?>\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr( $value['placeholder'] ); ?>\"\n+\t\t\t\u003C?php echo isset( $value['min'] ) ? 'min=\"' . $value['min'] . '\"' : ''; ?>\n+\t\t\t\u003C?php echo isset( $value['max'] ) ? 'max=\"' . $value['max'] . '\"' : ''; ?>\n+\t\t\t\u003C?php echo implode( ' ', $custom_attributes ); ?>\n+\t\t\t\u002F>\u003C?php echo esc_html( $value['suffix'] ); ?> \u003C?php echo wp_kses_post( $description ); ?>\n+\t\u003C\u002Ftd>\n+\u003C\u002Ftr>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-if ( ! empty( $value['title'] ) ) {\r\n-\techo '\u003Ch2>' . esc_html( $value['title'] ) . '\u003C\u002Fh2>';\r\n-}\r\n-if ( ! empty( $value['desc'] ) ) {\r\n-\techo '\u003Cdiv class=\"lp-metabox__desc\">' . wp_kses_post( $value['desc'] ) . '\u003C\u002Fdiv>';\r\n-}\r\n-\r\n-echo '\u003Ctable class=\"form-table lp-metabox__table\">';\r\n-\r\n-if ( ! empty( $value['id'] ) ) {\r\n-\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) );\r\n-}\r\n-\r\n+\u003C?php\n+if ( ! empty( $value['title'] ) ) {\n+\techo '\u003Ch2>' . esc_html( $value['title'] ) . '\u003C\u002Fh2>';\n+}\n+if ( ! empty( $value['desc'] ) ) {\n+\techo '\u003Cdiv class=\"lp-metabox__desc\">' . wp_kses_post( $value['desc'] ) . '\u003C\u002Fdiv>';\n+}\n+\n+echo '\u003Ctable class=\"form-table lp-metabox__table\">';\n+\n+if ( ! empty( $value['id'] ) ) {\n+\tdo_action( 'lp_metabox_settings_' . sanitize_title( $value['id'] ) );\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftoggle-switch.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftoggle-switch.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftoggle-switch.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Ftoggle-switch.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template show toggle switch field\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $data ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\u003Cdiv class=\"lp-toggle-switch\">\r\n-\t\u003Cinput class=\"lp-toggle-switch-input\"\r\n-\t\tname=\"\u003C?php echo esc_attr( $data['name'] ?? '' ); ?>\"\r\n-\t\tid=\"\u003C?php echo esc_attr( $data['id'] ?? '' ); ?>\"\r\n-\t\t\u003C?php echo esc_attr( $data['value'] ? 'checked' : '' ); ?>\r\n-\t\ttype=\"checkbox\" value=\"\u003C?php echo esc_attr( $data['value'] ?? 0 ); ?>\"\r\n-\t\t\u003C?php echo sanitize_text_field( $data['extra'] ?? '' ); ?>>\r\n-\t\u003Clabel class=\"lp-toggle-switch-label\" for=\"\u003C?php echo esc_attr( $data['id'] ?? '' ); ?>\">\r\n-\t\t\u003Cspan class=\"toggle-on\">\u003C\u002Fspan>\r\n-\t\t\u003Cspan class=\"toggle-off\">\u003C\u002Fspan>\r\n-\t\u003C\u002Flabel>\r\n-\t\u003Cspan class=\"dashicons dashicons-update\" style=\"display: none\">\u003C\u002Fspan>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template show toggle switch field\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $data ) ) {\n+\treturn;\n+}\n+?>\n+\u003Cdiv class=\"lp-toggle-switch\">\n+\t\u003Cinput class=\"lp-toggle-switch-input\"\n+\t\tname=\"\u003C?php echo esc_attr( $data['name'] ?? '' ); ?>\"\n+\t\tid=\"\u003C?php echo esc_attr( $data['id'] ?? '' ); ?>\"\n+\t\t\u003C?php echo esc_attr( $data['value'] ? 'checked' : '' ); ?>\n+\t\ttype=\"checkbox\" value=\"\u003C?php echo esc_attr( $data['value'] ?? 0 ); ?>\"\n+\t\t\u003C?php echo sanitize_text_field( $data['extra'] ?? '' ); ?>>\n+\t\u003Clabel class=\"lp-toggle-switch-label\" for=\"\u003C?php echo esc_attr( $data['id'] ?? '' ); ?>\">\n+\t\t\u003Cspan class=\"toggle-on\">\u003C\u002Fspan>\n+\t\t\u003Cspan class=\"toggle-off\">\u003C\u002Fspan>\n+\t\u003C\u002Flabel>\n+\t\u003Cspan class=\"dashicons dashicons-update\" style=\"display: none\">\u003C\u002Fspan>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Settings_Profile\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FClasses\u002FSettings\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Settings_Advanced extends LP_Abstract_Settings_Page {\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'advanced';\r\n-\t\t$this->text = esc_html__( 'Advanced', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function get_settings( $section = '', $tab = '' ) {\r\n-\t\treturn Config::instance()->get( 'advanced', 'settings' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sections for advanced settings.\r\n-\t *\r\n-\t * @return array\u003Cstring, string>\r\n-\t *\u002F\r\n-\tpublic function get_sections() {\r\n-\t\treturn array(\r\n-\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Advanced();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Settings_Profile\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FClasses\u002FSettings\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Settings_Advanced extends LP_Abstract_Settings_Page {\n+\n+\tpublic function __construct() {\n+\t\t$this->id   = 'advanced';\n+\t\t$this->text = esc_html__( 'Advanced', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function get_settings( $section = '', $tab = '' ) {\n+\t\treturn Config::instance()->get( 'advanced', 'settings' );\n+\t}\n+\n+\t\u002F**\n+\t * Get sections for advanced settings.\n+\t *\n+\t * @return array\u003Cstring, string>\n+\t *\u002F\n+\tpublic function get_sections() {\n+\t\treturn array(\n+\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\n+\t\t);\n+\t}\n+}\n+\n+return new LP_Settings_Advanced();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,217 +1,217 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Settings_Emails\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-require_once 'email-groups\u002Fclass-lp-settings-emails-group.php';\r\n-\r\n-class LP_Settings_Emails extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'emails';\r\n-\t\t$this->text = esc_html__( 'Emails', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\r\n-\t\tadd_filter( 'learn-press\u002Fadmin\u002Fsubmenu-section-title', array( $this, 'custom_section_title' ), 10, 2 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add tooltip to section title\r\n-\t *\r\n-\t * @param string $title\r\n-\t * @param string $slug\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function custom_section_title( $title, $slug ) {\r\n-\t\t$sections = $this->get_sections();\r\n-\r\n-\t\tif ( ! empty( $sections[ $slug ] ) && $sections[ $slug ] instanceof LP_Email ) {\r\n-\t\t\tif ( $sections[ $slug ]->description ) {\r\n-\t\t\t\t$title = $title . sprintf( '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"%s\">\u003C\u002Fspan>', esc_attr( $sections[ $slug ]->description ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sections\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_sections() {\r\n-\t\tstatic $sections;\r\n-\t\tif ( is_null( $sections ) ) {\r\n-\t\t\t$emails = LP_Emails::instance()->emails;\r\n-\r\n-\t\t\t$sections = array(\r\n-\t\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $emails ) {\r\n-\t\t\t\t$groups = array(\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-new-order-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-processing-order-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-completed-order-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-cancelled-order-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-enrolled-course-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-finished-course-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-become-teacher-emails.php',\r\n-\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-reset-password-emails.php',\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$groups = apply_filters( 'learn-press\u002Femail-section-classes', $groups );\r\n-\r\n-\t\t\t\tforeach ( $groups as $group ) {\r\n-\t\t\t\t\t$sections[ $group->group_id ] = $group;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $emails as $email ) {\r\n-\t\t\t\t\tif ( ! is_object( $email ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $groups as $group ) {\r\n-\t\t\t\t\t\tif ( is_object( $group ) && ! empty( $group->items[ $email->id ] ) ) {\r\n-\t\t\t\t\t\t\tcontinue 2;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( isset( $sections[ $email->id ] ) ) {\r\n-\t\t\t\t\t\t$sections[ $email->id ] = $email;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fsettings\u002Fsection\u002F' . $this->id, $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Settings fields of general section.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings_general() {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Femails-settings\u002Fgeneral',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => esc_html__( 'Email sender options', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'desc'  => esc_html__( 'For all outgoing LearnPress notification emails.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( '\"From\" name', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'emails_general[from_name]',\r\n-\t\t\t\t\t'default' => get_option( 'blogname' ),\r\n-\t\t\t\t\t'type'    => 'text',\r\n-\t\t\t\t\t'css'     => 'width:400px',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => esc_html__( 'Email template', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t\t'desc'  => esc_html__( 'This section lets you customize the LearnPress emails', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F*array(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Content type', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'emails_general[default_email_content]',\r\n-\t\t\t\t\t'default' => 'html',\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'plain' => esc_html__( 'Plain Text', 'learnpress' ),\r\n-\t\t\t\t\t\t'html'  => esc_html__( 'HTML', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),*\u002F\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Header image', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'emails_general[header_image]',\r\n-\t\t\t\t\t'default' => '',\r\n-\t\t\t\t\t'type'    => 'image',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Footer text', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'emails_general[footer_text]',\r\n-\t\t\t\t\t'default' => esc_html__( 'LearnPress', 'learnpress' ),\r\n-\t\t\t\t\t'type'    => 'textarea',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Emails', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'emails_general[list_emails]',\r\n-\t\t\t\t\t'default' => '',\r\n-\t\t\t\t\t'type'    => 'list-emails',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display admin page for payments settings tab.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t * @version 4.0.0\r\n-\t *\u002F\r\n-\tpublic function admin_page_settings( $section = null, $tab = null ) {\r\n-\t\t$sections = array();\r\n-\t\t$items    = LP_Admin_Menu::instance()->get_menu_items();\r\n-\r\n-\t\tif ( ! empty( $items['settings'] ) ) {\r\n-\t\t\t$tab      = $items['settings']->get_active_tab();\r\n-\t\t\t$section  = $items['settings']->get_active_section();\r\n-\t\t\t$sections = $items['settings']->get_sections();\r\n-\t\t}\r\n-\t\t$section_data = ! empty( $sections[ $section ] ) ? $sections[ $section ] : false;\r\n-\r\n-\t\tif ( $section_data instanceof LP_Email ) {\r\n-\t\t\t$section_data->admin_option_settings();\r\n-\t\t} else {\r\n-\t\t\tif ( is_callable( array( $this, 'admin_options_' . $section ) ) ) {\r\n-\t\t\t\tcall_user_func_array( array( $this, 'admin_options_' . $section ), array( $section, $tab ) );\r\n-\t\t\t} else {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $section, $tab );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output admin option of general page.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\u002F\r\n-\tpublic function admin_options_general( $section, $tab ) {\r\n-\t\tparent::admin_page_settings( $section, $tab );\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$_instance ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Settings_Emails::instance();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Settings_Emails\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+require_once 'email-groups\u002Fclass-lp-settings-emails-group.php';\n+\n+class LP_Settings_Emails extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprotected static $_instance = null;\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'emails';\n+\t\t$this->text = esc_html__( 'Emails', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\n+\t\tadd_filter( 'learn-press\u002Fadmin\u002Fsubmenu-section-title', array( $this, 'custom_section_title' ), 10, 2 );\n+\t}\n+\n+\t\u002F**\n+\t * Add tooltip to section title\n+\t *\n+\t * @param string $title\n+\t * @param string $slug\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function custom_section_title( $title, $slug ) {\n+\t\t$sections = $this->get_sections();\n+\n+\t\tif ( ! empty( $sections[ $slug ] ) && $sections[ $slug ] instanceof LP_Email ) {\n+\t\t\tif ( $sections[ $slug ]->description ) {\n+\t\t\t\t$title = $title . sprintf( '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"%s\">\u003C\u002Fspan>', esc_attr( $sections[ $slug ]->description ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $title;\n+\t}\n+\n+\t\u002F**\n+\t * Sections\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_sections() {\n+\t\tstatic $sections;\n+\t\tif ( is_null( $sections ) ) {\n+\t\t\t$emails = LP_Emails::instance()->emails;\n+\n+\t\t\t$sections = array(\n+\t\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\n+\t\t\t);\n+\n+\t\t\tif ( $emails ) {\n+\t\t\t\t$groups = array(\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-new-order-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-processing-order-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-completed-order-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-cancelled-order-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-enrolled-course-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-finished-course-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-become-teacher-emails.php',\n+\t\t\t\t\tinclude 'email-groups\u002Fclass-lp-settings-reset-password-emails.php',\n+\t\t\t\t);\n+\n+\t\t\t\t$groups = apply_filters( 'learn-press\u002Femail-section-classes', $groups );\n+\n+\t\t\t\tforeach ( $groups as $group ) {\n+\t\t\t\t\t$sections[ $group->group_id ] = $group;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $emails as $email ) {\n+\t\t\t\t\tif ( ! is_object( $email ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $groups as $group ) {\n+\t\t\t\t\t\tif ( is_object( $group ) && ! empty( $group->items[ $email->id ] ) ) {\n+\t\t\t\t\t\t\tcontinue 2;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( isset( $sections[ $email->id ] ) ) {\n+\t\t\t\t\t\t$sections[ $email->id ] = $email;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fsettings\u002Fsection\u002F' . $this->id, $sections );\n+\t}\n+\n+\t\u002F**\n+\t * Settings fields of general section.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_settings_general() {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Femails-settings\u002Fgeneral',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => esc_html__( 'Email sender options', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'desc'  => esc_html__( 'For all outgoing LearnPress notification emails.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( '\"From\" name', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'emails_general[from_name]',\n+\t\t\t\t\t'default' => get_option( 'blogname' ),\n+\t\t\t\t\t'type'    => 'text',\n+\t\t\t\t\t'css'     => 'width:400px',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => esc_html__( 'Email template', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t\t'desc'  => esc_html__( 'This section lets you customize the LearnPress emails', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t\u002F*array(\n+\t\t\t\t\t'title'   => esc_html__( 'Content type', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'emails_general[default_email_content]',\n+\t\t\t\t\t'default' => 'html',\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'plain' => esc_html__( 'Plain Text', 'learnpress' ),\n+\t\t\t\t\t\t'html'  => esc_html__( 'HTML', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t),*\u002F\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Header image', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'emails_general[header_image]',\n+\t\t\t\t\t'default' => '',\n+\t\t\t\t\t'type'    => 'image',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Footer text', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'emails_general[footer_text]',\n+\t\t\t\t\t'default' => esc_html__( 'LearnPress', 'learnpress' ),\n+\t\t\t\t\t'type'    => 'textarea',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Emails', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'emails_general[list_emails]',\n+\t\t\t\t\t'default' => '',\n+\t\t\t\t\t'type'    => 'list-emails',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Display admin page for payments settings tab.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t * @version 4.0.0\n+\t *\u002F\n+\tpublic function admin_page_settings( $section = null, $tab = null ) {\n+\t\t$sections = array();\n+\t\t$items    = LP_Admin_Menu::instance()->get_menu_items();\n+\n+\t\tif ( ! empty( $items['settings'] ) ) {\n+\t\t\t$tab      = $items['settings']->get_active_tab();\n+\t\t\t$section  = $items['settings']->get_active_section();\n+\t\t\t$sections = $items['settings']->get_sections();\n+\t\t}\n+\t\t$section_data = ! empty( $sections[ $section ] ) ? $sections[ $section ] : false;\n+\n+\t\tif ( $section_data instanceof LP_Email ) {\n+\t\t\t$section_data->admin_option_settings();\n+\t\t} else {\n+\t\t\tif ( is_callable( array( $this, 'admin_options_' . $section ) ) ) {\n+\t\t\t\tcall_user_func_array( array( $this, 'admin_options_' . $section ), array( $section, $tab ) );\n+\t\t\t} else {\n+\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $section, $tab );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Output admin option of general page.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\u002F\n+\tpublic function admin_options_general( $section, $tab ) {\n+\t\tparent::admin_page_settings( $section, $tab );\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( ! self::$_instance ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+return LP_Settings_Emails::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_General\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FSettings\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-class LP_Settings_General extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * Construct\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'general';\r\n-\t\t$this->text = esc_html__( 'General', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return fields for settings page.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = '', $tab = '' ) {\r\n-\t\treturn Config::instance()->get( 'general', 'settings' );\r\n-\t}\r\n-\r\n-}\r\n-\r\n-return new LP_Settings_General();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Config;\n+\n+\u002F**\n+ * Class LP_Settings_General\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FSettings\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+class LP_Settings_General extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * Construct\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'general';\n+\t\t$this->text = esc_html__( 'General', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Return fields for settings page.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_settings( $section = '', $tab = '' ) {\n+\t\treturn Config::instance()->get( 'general', 'settings' );\n+\t}\n+\n+}\n+\n+return new LP_Settings_General();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_OpenAi\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FSettings\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LP_Settings_OpenAi extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * Construct\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'open-ai';\r\n-\t\t$this->text = esc_html__( 'LearnPress AI', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return fields for settings page.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = '', $tab = '' ) {\r\n-\t\treturn Config::instance()->get( 'open-ai-admin', 'settings' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_OpenAi();\r\n+\u003C?php\n+\n+\n+use LearnPress\\Helpers\\Config;\n+\n+\u002F**\n+ * Class LP_Settings_OpenAi\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FSettings\n+ * @since 4.1.7.3.2\n+ * @version 1.0.1\n+ *\u002F\n+class LP_Settings_OpenAi extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * Construct\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'open-ai';\n+\t\t$this->text = esc_html__( 'LearnPress AI', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Return fields for settings page.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_settings( $section = '', $tab = '' ) {\n+\t\treturn Config::instance()->get( 'open-ai-admin', 'settings' );\n+\t}\n+}\n+\n+return new LP_Settings_OpenAi();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,164 +1,164 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Settings_Payment\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Payments\r\n- *\r\n- * Manage all payments are registered and settings to control order process.\r\n- *\r\n- *\u002F\r\n-class LP_Settings_Payments extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'payments';\r\n-\t\t$this->text = esc_html__( 'Payments', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\r\n-\t\tadd_filter( 'learn-press\u002Fadmin\u002Fsubmenu-section-title', array( $this, 'custom_section_title' ), 10, 2 );\r\n-\t}\r\n-\r\n-\tpublic function custom_section_title( $title, $slug ) {\r\n-\t\t$sections = $this->get_sections();\r\n-\r\n-\t\tif ( ! empty( $sections[ $slug ] ) && $sections[ $slug ] instanceof LP_Gateway_Abstract ) {\r\n-\t\t\t$title = $title . sprintf( '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"%s\">\u003C\u002Fspan>', esc_attr( $sections[ $slug ]->get_method_description() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sections.\r\n-\t * Add a general section and each registered payment is a section.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_sections() {\r\n-\t\tstatic $sections;\r\n-\t\tif ( is_null( $sections ) ) {\r\n-\t\t\t$gateways = LP_Gateways::instance()->get_gateways();\r\n-\t\t\t$sections = array(\r\n-\t\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $gateways ) {\r\n-\t\t\t\tforeach ( $gateways as $id => $gateway ) {\r\n-\t\t\t\t\t$sections[ $id ] = $gateway;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $sections;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Settings fields of general section.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings_general() {\r\n-\t\t$checkout_url = learn_press_get_checkout_url();\r\n-\r\n-\t\t$guest = apply_filters(\r\n-\t\t\t'learn-press\u002Fpayment-settings\u002Fgeneral',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'type' => 'title',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Guest checkout', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'guest_checkout',\r\n-\t\t\t\t\t'default' => 'no',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Enable guest checkout.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Account login', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'enable_login_checkout',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Enable the login form in the checkout.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => esc_html__( 'Account creation', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => 'enable_registration_checkout',\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t'desc'    => esc_html__( 'Enable the register form in the checkout.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$enpoints = apply_filters(\r\n-\t\t\t'learn-press\u002Fpayment-settings\u002Fcheckout-endpoints',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'       => esc_html__( 'Custom order slug', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'checkout_endpoints[lp_order_received]',\r\n-\t\t\t\t\t'default'     => 'lp-order-received',\r\n-\t\t\t\t\t'placeholder' => 'lp-order-received',\r\n-\t\t\t\t\t'type'        => 'text',\r\n-\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$checkout_url}\u003Ccode>\" . LP_Settings::instance()->get( 'checkout_endpoints.lp_order_received', 'lp-order-received' ) . '\u003C\u002Fcode>' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$payment = array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => esc_html__( 'Payments', 'learnpress' ),\r\n-\t\t\t\t'id'      => 'payment_order',\r\n-\t\t\t\t'default' => '',\r\n-\t\t\t\t'type'    => 'payment-order',\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fpayment-settings', array_merge( $guest, $enpoints, $payment ) );\r\n-\t}\r\n-\r\n-\tpublic function admin_page_settings( $section = null, $tab = null ) {\r\n-\t\t$sections = array();\r\n-\t\t$items    = LP_Admin_Menu::instance()->get_menu_items();\r\n-\r\n-\t\tif ( ! empty( $items['settings'] ) ) {\r\n-\t\t\t$tab      = $items['settings']->get_active_tab();\r\n-\t\t\t$section  = $items['settings']->get_active_section();\r\n-\t\t\t$sections = $items['settings']->get_sections();\r\n-\t\t}\r\n-\r\n-\t\t$section_data = ! empty( $sections[ $section ] ) ? $sections[ $section ] : false;\r\n-\r\n-\t\tif ( $section_data instanceof LP_Abstract_Settings ) {\r\n-\t\t\t$section_data->admin_option_settings();\r\n-\t\t} elseif ( is_callable( array( $this, 'admin_options_' . $section ) ) ) {\r\n-\t\t\tcall_user_func_array( array( $this, 'admin_options_' . $section ), array( $section, $tab ) );\r\n-\t\t} else {\r\n-\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $section, $tab );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output admin option of general page.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\u002F\r\n-\tpublic function admin_options_general( $section, $tab ) {\r\n-\t\tparent::admin_page_settings( $section, $tab );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Payments();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Settings_Payment\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Class LP_Settings_Payments\n+ *\n+ * Manage all payments are registered and settings to control order process.\n+ *\n+ *\u002F\n+class LP_Settings_Payments extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'payments';\n+\t\t$this->text = esc_html__( 'Payments', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\n+\t\tadd_filter( 'learn-press\u002Fadmin\u002Fsubmenu-section-title', array( $this, 'custom_section_title' ), 10, 2 );\n+\t}\n+\n+\tpublic function custom_section_title( $title, $slug ) {\n+\t\t$sections = $this->get_sections();\n+\n+\t\tif ( ! empty( $sections[ $slug ] ) && $sections[ $slug ] instanceof LP_Gateway_Abstract ) {\n+\t\t\t$title = $title . sprintf( '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"%s\">\u003C\u002Fspan>', esc_attr( $sections[ $slug ]->get_method_description() ) );\n+\t\t}\n+\n+\t\treturn $title;\n+\t}\n+\n+\t\u002F**\n+\t * Get sections.\n+\t * Add a general section and each registered payment is a section.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_sections() {\n+\t\tstatic $sections;\n+\t\tif ( is_null( $sections ) ) {\n+\t\t\t$gateways = LP_Gateways::instance()->get_gateways();\n+\t\t\t$sections = array(\n+\t\t\t\t'general' => esc_html__( 'General', 'learnpress' ),\n+\t\t\t);\n+\n+\t\t\tif ( $gateways ) {\n+\t\t\t\tforeach ( $gateways as $id => $gateway ) {\n+\t\t\t\t\t$sections[ $id ] = $gateway;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $sections;\n+\t}\n+\n+\t\u002F**\n+\t * Settings fields of general section.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_settings_general() {\n+\t\t$checkout_url = learn_press_get_checkout_url();\n+\n+\t\t$guest = apply_filters(\n+\t\t\t'learn-press\u002Fpayment-settings\u002Fgeneral',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'type' => 'title',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Guest checkout', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'guest_checkout',\n+\t\t\t\t\t'default' => 'no',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Enable guest checkout.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Account login', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'enable_login_checkout',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Enable the login form in the checkout.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => esc_html__( 'Account creation', 'learnpress' ),\n+\t\t\t\t\t'id'      => 'enable_registration_checkout',\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t'desc'    => esc_html__( 'Enable the register form in the checkout.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$enpoints = apply_filters(\n+\t\t\t'learn-press\u002Fpayment-settings\u002Fcheckout-endpoints',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'       => esc_html__( 'Custom order slug', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'checkout_endpoints[lp_order_received]',\n+\t\t\t\t\t'default'     => 'lp-order-received',\n+\t\t\t\t\t'placeholder' => 'lp-order-received',\n+\t\t\t\t\t'type'        => 'text',\n+\t\t\t\t\t'desc'        => sprintf( 'e.g. %s', \"{$checkout_url}\u003Ccode>\" . LP_Settings::instance()->get( 'checkout_endpoints.lp_order_received', 'lp-order-received' ) . '\u003C\u002Fcode>' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$payment = array(\n+\t\t\tarray(\n+\t\t\t\t'title'   => esc_html__( 'Payments', 'learnpress' ),\n+\t\t\t\t'id'      => 'payment_order',\n+\t\t\t\t'default' => '',\n+\t\t\t\t'type'    => 'payment-order',\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'type' => 'sectionend',\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn apply_filters( 'learn-press\u002Fpayment-settings', array_merge( $guest, $enpoints, $payment ) );\n+\t}\n+\n+\tpublic function admin_page_settings( $section = null, $tab = null ) {\n+\t\t$sections = array();\n+\t\t$items    = LP_Admin_Menu::instance()->get_menu_items();\n+\n+\t\tif ( ! empty( $items['settings'] ) ) {\n+\t\t\t$tab      = $items['settings']->get_active_tab();\n+\t\t\t$section  = $items['settings']->get_active_section();\n+\t\t\t$sections = $items['settings']->get_sections();\n+\t\t}\n+\n+\t\t$section_data = ! empty( $sections[ $section ] ) ? $sections[ $section ] : false;\n+\n+\t\tif ( $section_data instanceof LP_Abstract_Settings ) {\n+\t\t\t$section_data->admin_option_settings();\n+\t\t} elseif ( is_callable( array( $this, 'admin_options_' . $section ) ) ) {\n+\t\t\tcall_user_func_array( array( $this, 'admin_options_' . $section ), array( $section, $tab ) );\n+\t\t} else {\n+\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $section, $tab );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Output admin option of general page.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\u002F\n+\tpublic function admin_options_general( $section, $tab ) {\n+\t\tparent::admin_page_settings( $section, $tab );\n+\t}\n+}\n+\n+return new LP_Settings_Payments();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,74 +1,74 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Permalink\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FSettings\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Settings_Permalink extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * Construct\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'permalink';\r\n-\t\t$this->text = esc_html__( 'Permalinks', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return fields for settings page.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = '', $tab = '' ) {\r\n-\t\treturn Config::instance()->get( 'permalink', 'settings' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @since 4.3.2.3\r\n-\t *\r\n-\t * move from LP_Settings_Courses class to here\r\n-\t *\u002F\r\n-\tpublic function save() {\r\n-\t\t$course_permalink = trim( LP_Request::get_param( 'learn_press_course_base' ) );\r\n-\t\tif ( ! $course_permalink ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $course_permalink == 'custom' ) {\r\n-\t\t\t$course_permalink = trim( LP_Request::get_param( 'course_permalink_structure' ), '\u002F' );\r\n-\r\n-\t\t\tif ( '%course_category%' == $course_permalink ) {\r\n-\t\t\t\t$course_permalink = _x( 'courses', 'slug', 'learnpress' ) . '\u002F' . $course_permalink;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_permalink = '\u002F' . $course_permalink;\r\n-\t\t\tupdate_option( 'learn_press_course_base_type', 'custom' );\r\n-\t\t} else {\r\n-\t\t\tdelete_option( 'learn_press_course_base_type' );\r\n-\t\t}\r\n-\r\n-\t\t$course_base = untrailingslashit( $course_permalink );\r\n-\r\n-\t\tupdate_option( 'learn_press_course_base', $course_base );\r\n-\t\t\u002F\u002F$courses_page_id   = learn_press_get_page_id( 'courses' );\r\n-\t\t\u002F\u002F$courses_permalink = ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : _x( 'courses', 'default-slug', 'learnpress' );\r\n-\r\n-\t\t\u002F*if ( $courses_page_id && trim( $course_base, '\u002F' ) === $courses_permalink ) {\r\n-\t\t\tupdate_option( 'learn_press_use_verbose_page_rules', 'yes' );\r\n-\t\t} else {\r\n-\t\t\tdelete_option( 'learn_press_use_verbose_page_rules' );\r\n-\t\t}*\u002F\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Permalink();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Config;\n+\n+\u002F**\n+ * Class LP_Settings_Permalink\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FSettings\n+ * @since 4.1.7.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Settings_Permalink extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * Construct\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'permalink';\n+\t\t$this->text = esc_html__( 'Permalinks', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Return fields for settings page.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_settings( $section = '', $tab = '' ) {\n+\t\treturn Config::instance()->get( 'permalink', 'settings' );\n+\t}\n+\n+\t\u002F**\n+\t * @since 4.3.2.3\n+\t *\n+\t * move from LP_Settings_Courses class to here\n+\t *\u002F\n+\tpublic function save() {\n+\t\t$course_permalink = trim( LP_Request::get_param( 'learn_press_course_base' ) );\n+\t\tif ( ! $course_permalink ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $course_permalink == 'custom' ) {\n+\t\t\t$course_permalink = trim( LP_Request::get_param( 'course_permalink_structure' ), '\u002F' );\n+\n+\t\t\tif ( '%course_category%' == $course_permalink ) {\n+\t\t\t\t$course_permalink = _x( 'courses', 'slug', 'learnpress' ) . '\u002F' . $course_permalink;\n+\t\t\t}\n+\n+\t\t\t$course_permalink = '\u002F' . $course_permalink;\n+\t\t\tupdate_option( 'learn_press_course_base_type', 'custom' );\n+\t\t} else {\n+\t\t\tdelete_option( 'learn_press_course_base_type' );\n+\t\t}\n+\n+\t\t$course_base = untrailingslashit( $course_permalink );\n+\n+\t\tupdate_option( 'learn_press_course_base', $course_base );\n+\t\t\u002F\u002F$courses_page_id   = learn_press_get_page_id( 'courses' );\n+\t\t\u002F\u002F$courses_permalink = ( $courses_page_id > 0 && get_post( $courses_page_id ) ) ? get_page_uri( $courses_page_id ) : _x( 'courses', 'default-slug', 'learnpress' );\n+\n+\t\t\u002F*if ( $courses_page_id && trim( $course_base, '\u002F' ) === $courses_permalink ) {\n+\t\t\tupdate_option( 'learn_press_use_verbose_page_rules', 'yes' );\n+\t\t} else {\n+\t\t\tdelete_option( 'learn_press_use_verbose_page_rules' );\n+\t\t}*\u002F\n+\t}\n+}\n+\n+return new LP_Settings_Permalink();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Profile\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FClasses\u002FSettings\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( class_exists( 'LP_Settings_Profile', false ) ) {\r\n-\treturn new LP_Settings_Profile();\r\n-}\r\n-\r\n-class LP_Settings_Profile extends LP_Abstract_Settings_Page {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'profile';\r\n-\t\t$this->text = esc_html__( 'Profile', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = null, $tab = null ) {\r\n-\t\treturn Config::instance()->get( 'profile', 'settings' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Profile();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Profile\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FClasses\u002FSettings\n+ * @version 1.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( class_exists( 'LP_Settings_Profile', false ) ) {\n+\treturn new LP_Settings_Profile();\n+}\n+\n+class LP_Settings_Profile extends LP_Abstract_Settings_Page {\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'profile';\n+\t\t$this->text = esc_html__( 'Profile', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_settings( $section = null, $tab = null ) {\n+\t\treturn Config::instance()->get( 'profile', 'settings' );\n+\t}\n+}\n+\n+return new LP_Settings_Profile();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-become-teacher-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-become-teacher-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-become-teacher-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-become-teacher-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_New_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_Become_Teacher_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_New_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'become-teacher-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'become-an-instructor',\r\n-\t\t\t'instructor-accepted',\r\n-\t\t\t'instructor-denied',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Become an Instructor', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Become_Teacher_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_New_Order_Emails\n+ *\u002F\n+class LP_Settings_Become_Teacher_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_New_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'become-teacher-emails';\n+\t\t$this->items    = array(\n+\t\t\t'become-an-instructor',\n+\t\t\t'instructor-accepted',\n+\t\t\t'instructor-denied',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Become an Instructor', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Become_Teacher_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-cancelled-order-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-cancelled-order-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-cancelled-order-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-cancelled-order-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Cancelled_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_Cancelled_Order_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Cancelled_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'cancelled-order-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'cancelled-order-admin',\r\n-\t\t\t'cancelled-order-instructor',\r\n-\t\t\t'cancelled-order-user',\r\n-\t\t\t'cancelled-order-guest',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Cancelled Order', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Cancelled_Order_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Cancelled_Order_Emails\n+ *\u002F\n+class LP_Settings_Cancelled_Order_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Cancelled_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'cancelled-order-emails';\n+\t\t$this->items    = array(\n+\t\t\t'cancelled-order-admin',\n+\t\t\t'cancelled-order-instructor',\n+\t\t\t'cancelled-order-user',\n+\t\t\t'cancelled-order-guest',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Cancelled Order', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Cancelled_Order_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-completed-order-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-completed-order-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-completed-order-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-completed-order-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Completed_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_Completed_Order_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Completed_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'completed-order-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'completed-order-admin',\r\n-\t\t\t'completed-order-user',\r\n-\t\t\t'completed-order-guest',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Completed Order', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Completed_Order_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Completed_Order_Emails\n+ *\u002F\n+class LP_Settings_Completed_Order_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Completed_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'completed-order-emails';\n+\t\t$this->items    = array(\n+\t\t\t'completed-order-admin',\n+\t\t\t'completed-order-user',\n+\t\t\t'completed-order-guest',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Completed Order', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Completed_Order_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-course-review-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-course-review-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-course-review-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-course-review-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Course_Review_Emails\r\n- *\u002F\r\n-class LP_Settings_Course_Review_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Course_Review_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'course-review-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'new-course',\r\n-\t\t\t'rejected-course',\r\n-\t\t\t'published-course',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Review Course', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Course_Review_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Course_Review_Emails\n+ *\u002F\n+class LP_Settings_Course_Review_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Course_Review_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'course-review-emails';\n+\t\t$this->items    = array(\n+\t\t\t'new-course',\n+\t\t\t'rejected-course',\n+\t\t\t'published-course',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Review Course', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Course_Review_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-emails-group.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-emails-group.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-emails-group.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-emails-group.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,103 +1,103 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Emails_Group\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_Settings_Emails_Group extends LP_Settings {\r\n-\r\n-\t\u002F**\r\n-\t * Items\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $items = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $group_id = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Emails_Group constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\t$emails = LP_Emails::instance()->emails;\r\n-\t\t$this->items = apply_filters(\r\n-\t\t\t\"learn-press\u002Fsettings\u002Femails-group\u002F$this->group_id\u002Fkey-ids\",\r\n-\t\t\t$this->items\r\n-\t\t);\r\n-\r\n-\t\t$ids = [];\r\n-\t\tforeach ( $emails as $email ) {\r\n-\t\t\tif ( ! is_object( $email ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002FTodo: need review code here\r\n-\t\t\tif ( ! in_array( $email->id, $this->items ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\t$email->group      = $this;\r\n-\t\t\t$ids[ $email->id ] = $email;\r\n-\t\t}\r\n-\r\n-\t\t$this->items = $ids;\r\n-\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $this->group_id, array( $this, 'output_settings' ) );\r\n-\t\tadd_filter( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $this->group_id, array( $this, 'filter_get_settings' ) );\r\n-\t}\r\n-\r\n-\tpublic function output_settings() {\r\n-\t\t$current = $this->get_current_section();\r\n-\r\n-\t\techo '\u003Cul class=\"subsubsub\">';\r\n-\r\n-\t\tforeach ( $this->items as $email ) {\r\n-\t\t\tif ( ! is_object( $email ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tif ( $current == $email->id ) {\r\n-\t\t\t\techo '\u003Cli class=\"active\">\u003Cspan>' . wp_kses_post( $email->title ) . '\u003C\u002Fspan>\u003C\u002Fli>';\r\n-\t\t\t} else {\r\n-\t\t\t\techo '\u003Cli>\u003Ca href=\"' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '\">' . wp_kses_post( $email->title ) . '\u003C\u002Fa>\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Ful>';\r\n-\r\n-\t\tif ( ! empty( $this->items[ $current ] ) ) {\r\n-\t\t\t$this->items[ $current ]->admin_option_settings(); \u002F\u002F Email content show in here \u003Cnhamdv> LP_Abstract_Settings.\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Filter save setting.\r\n-\t *\r\n-\t * @return array list setting Email.\r\n-\t * @version 4.0.0\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tpublic function filter_get_settings() {\r\n-\t\t$current = $this->get_current_section();\r\n-\r\n-\t\tif ( ! empty( $this->items[ $current ] ) ) {\r\n-\t\t\treturn $this->items[ $current ]->get_settings();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function get_current_section() {\r\n-\t\t$ids = array_keys( $this->items );\r\n-\r\n-\t\treturn ! empty( $_REQUEST['sub-section'] ) ? sanitize_text_field( $_REQUEST['sub-section'] ) : reset( $ids );\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\t$name = str_replace( array( 'LP_Settings_', '_' ), array( '', ' ' ), get_class( $this ) );\r\n-\r\n-\t\treturn (string) $name;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Emails_Group\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_Settings_Emails_Group extends LP_Settings {\n+\n+\t\u002F**\n+\t * Items\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $items = array();\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $group_id = '';\n+\n+\t\u002F**\n+\t * LP_Settings_Emails_Group constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\t$emails = LP_Emails::instance()->emails;\n+\t\t$this->items = apply_filters(\n+\t\t\t\"learn-press\u002Fsettings\u002Femails-group\u002F$this->group_id\u002Fkey-ids\",\n+\t\t\t$this->items\n+\t\t);\n+\n+\t\t$ids = [];\n+\t\tforeach ( $emails as $email ) {\n+\t\t\tif ( ! is_object( $email ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002FTodo: need review code here\n+\t\t\tif ( ! in_array( $email->id, $this->items ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t$email->group      = $this;\n+\t\t\t$ids[ $email->id ] = $email;\n+\t\t}\n+\n+\t\t$this->items = $ids;\n+\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fsetting-payments\u002Fadmin-options-' . $this->group_id, array( $this, 'output_settings' ) );\n+\t\tadd_filter( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $this->group_id, array( $this, 'filter_get_settings' ) );\n+\t}\n+\n+\tpublic function output_settings() {\n+\t\t$current = $this->get_current_section();\n+\n+\t\techo '\u003Cul class=\"subsubsub\">';\n+\n+\t\tforeach ( $this->items as $email ) {\n+\t\t\tif ( ! is_object( $email ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tif ( $current == $email->id ) {\n+\t\t\t\techo '\u003Cli class=\"active\">\u003Cspan>' . wp_kses_post( $email->title ) . '\u003C\u002Fspan>\u003C\u002Fli>';\n+\t\t\t} else {\n+\t\t\t\techo '\u003Cli>\u003Ca href=\"' . esc_url_raw( add_query_arg( 'sub-section', $email->id ) ) . '\">' . wp_kses_post( $email->title ) . '\u003C\u002Fa>\u003C\u002Fli>';\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003C\u002Ful>';\n+\n+\t\tif ( ! empty( $this->items[ $current ] ) ) {\n+\t\t\t$this->items[ $current ]->admin_option_settings(); \u002F\u002F Email content show in here \u003Cnhamdv> LP_Abstract_Settings.\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Filter save setting.\n+\t *\n+\t * @return array list setting Email.\n+\t * @version 4.0.0\n+\t * @author Nhamdv\n+\t *\u002F\n+\tpublic function filter_get_settings() {\n+\t\t$current = $this->get_current_section();\n+\n+\t\tif ( ! empty( $this->items[ $current ] ) ) {\n+\t\t\treturn $this->items[ $current ]->get_settings();\n+\t\t}\n+\t}\n+\n+\tpublic function get_current_section() {\n+\t\t$ids = array_keys( $this->items );\n+\n+\t\treturn ! empty( $_REQUEST['sub-section'] ) ? sanitize_text_field( $_REQUEST['sub-section'] ) : reset( $ids );\n+\t}\n+\n+\tpublic function __toString() {\n+\t\t$name = str_replace( array( 'LP_Settings_', '_' ), array( '', ' ' ), get_class( $this ) );\n+\n+\t\treturn (string) $name;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-enrolled-course-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-enrolled-course-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-enrolled-course-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-enrolled-course-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Enrolled_Course_Emails\r\n- *\u002F\r\n-class LP_Settings_Enrolled_Course_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Enrolled_Course_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\r\n-\t\t$this->group_id = 'enrolled-course-emails';\r\n-\r\n-\t\t$this->items = apply_filters(\r\n-\t\t\t'learn-press\u002Femails\u002Fenrolled-course',\r\n-\t\t\tarray(\r\n-\t\t\t\t'enrolled-course-admin',\r\n-\t\t\t\t'enrolled-course-instructor',\r\n-\t\t\t\t'enrolled-course-user',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Enrolled Course', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Enrolled_Course_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Enrolled_Course_Emails\n+ *\u002F\n+class LP_Settings_Enrolled_Course_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Enrolled_Course_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\n+\t\t$this->group_id = 'enrolled-course-emails';\n+\n+\t\t$this->items = apply_filters(\n+\t\t\t'learn-press\u002Femails\u002Fenrolled-course',\n+\t\t\tarray(\n+\t\t\t\t'enrolled-course-admin',\n+\t\t\t\t'enrolled-course-instructor',\n+\t\t\t\t'enrolled-course-user',\n+\t\t\t)\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Enrolled Course', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Enrolled_Course_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-finished-course-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-finished-course-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-finished-course-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-finished-course-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Finished_Course_Emails\r\n- *\u002F\r\n-class LP_Settings_Finished_Course_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Finished_Course_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\r\n-\t\t$this->group_id = 'finished-course-emails';\r\n-\r\n-\t\t$this->items = apply_filters(\r\n-\t\t\t'learn-press\u002Femails\u002Ffinished-course',\r\n-\t\t\tarray(\r\n-\t\t\t\t'finished-course-admin',\r\n-\t\t\t\t'finished-course-instructor',\r\n-\t\t\t\t'finished-course-user',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Finished Course', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Finished_Course_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Finished_Course_Emails\n+ *\u002F\n+class LP_Settings_Finished_Course_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Finished_Course_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\n+\t\t$this->group_id = 'finished-course-emails';\n+\n+\t\t$this->items = apply_filters(\n+\t\t\t'learn-press\u002Femails\u002Ffinished-course',\n+\t\t\tarray(\n+\t\t\t\t'finished-course-admin',\n+\t\t\t\t'finished-course-instructor',\n+\t\t\t\t'finished-course-user',\n+\t\t\t)\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Finished Course', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Finished_Course_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-new-order-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-new-order-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-new-order-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-new-order-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_New_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_New_Order_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_New_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'new-order-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'new-order-admin',\r\n-\t\t\t'new-order-instructor',\r\n-\t\t\t'new-order-user',\r\n-\t\t\t'new-order-guest',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'New Order', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_New_Order_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_New_Order_Emails\n+ *\u002F\n+class LP_Settings_New_Order_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_New_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'new-order-emails';\n+\t\t$this->items    = array(\n+\t\t\t'new-order-admin',\n+\t\t\t'new-order-instructor',\n+\t\t\t'new-order-user',\n+\t\t\t'new-order-guest',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'New Order', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_New_Order_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-processing-order-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-processing-order-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-processing-order-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-processing-order-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Processing_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_Processing_Order_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Processing_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'processing-order-emails';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'processing-order-user',\r\n-\t\t\t'processing-order-guest',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Processing Order', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Processing_Order_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Processing_Order_Emails\n+ *\u002F\n+class LP_Settings_Processing_Order_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Processing_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'processing-order-emails';\n+\t\t$this->items    = array(\n+\t\t\t'processing-order-user',\n+\t\t\t'processing-order-guest',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Processing Order', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Processing_Order_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-reset-password-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-reset-password-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-reset-password-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-reset-password-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Processing_Order_Emails\r\n- *\u002F\r\n-class LP_Settings_Reset_Password_Emails extends LP_Settings_Emails_Group {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Settings_Processing_Order_Emails constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->group_id = 'reset-password';\r\n-\t\t$this->items    = array(\r\n-\t\t\t'reset-password',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn esc_html__( 'Reset Password', 'learnpress' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Settings_Reset_Password_Emails();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Processing_Order_Emails\n+ *\u002F\n+class LP_Settings_Reset_Password_Emails extends LP_Settings_Emails_Group {\n+\n+\t\u002F**\n+\t * LP_Settings_Processing_Order_Emails constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->group_id = 'reset-password';\n+\t\t$this->items    = array(\n+\t\t\t'reset-password',\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn esc_html__( 'Reset Password', 'learnpress' );\n+\t}\n+}\n+\n+return new LP_Settings_Reset_Password_Emails();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsettings\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsettings\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_Submenu_Addons\r\n- *\r\n- * @since 3.0.1\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LP_Submenu_Addons extends LP_Abstract_Submenu {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Submenu_Addons constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'learn-press-addons';\r\n-\t\t$this->menu_title = __( 'Add-ons', 'learnpress' ) . '\u003Cspan class=\"lp-notify has-addon-update\">\u003C\u002Fspan>';\r\n-\t\t$this->page_title = __( 'LearnPress Add-ons', 'learnpress' );\r\n-\t\t$this->priority   = 20;\r\n-\t\t$this->callback   = [ $this, 'display' ];\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function display() {\r\n-\t\tob_start();\r\n-\t\tlp_skeleton_animation_html( 20 );\r\n-\t\t$html_loading = ob_get_clean();\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fmanager-addons\u002Fsection',\r\n-\t\t\t[\r\n-\t\t\t\t'label'      => sprintf(\r\n-\t\t\t\t\t'\u003Ch1>%s\u003C\u002Fh1>',\r\n-\t\t\t\t\t__( 'LearnPress Add-ons', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'note-theme' => sprintf(\r\n-\t\t\t\t\t'\u003Cp style=\"color: rgba(255,0,0,0.76)\">\u003Cstrong>\u003Ci>%s\u003C\u002Fi>\u003C\u002Fstrong>\u003C\u002Fp>',\r\n-\t\t\t\t\t__( '* If you use a Premium Theme that includes LearnPress add-ons, you can go to the \u003Cstrong>Plugins\u003C\u002Fstrong> tab on Dashboard of theme to download or update them.', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'note-addon' => sprintf(\r\n-\t\t\t\t\t'\u003Cp>%s\u003C\u002Fp>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( 'If you have purchased a premium add-on separately, you can enter your purchase code (%s) to download or update the add-ons here.', 'learnpress' ),\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t\t'https:\u002F\u002Fthimpress.com\u002Fmy-account\u002F',\r\n-\t\t\t\t\t\t\t__( 'get from your account', 'learnpress' )\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'list'       => sprintf( '\u003Cdiv class=\"lp-addons-page\">%s\u003C\u002Fdiv>', $html_loading ),\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\techo Template::combine_components( $section );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Addons();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_Submenu_Addons\n+ *\n+ * @since 3.0.1\n+ * @version 1.0.1\n+ *\u002F\n+class LP_Submenu_Addons extends LP_Abstract_Submenu {\n+\n+\t\u002F**\n+\t * LP_Submenu_Addons constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'learn-press-addons';\n+\t\t$this->menu_title = __( 'Add-ons', 'learnpress' ) . '\u003Cspan class=\"lp-notify has-addon-update\">\u003C\u002Fspan>';\n+\t\t$this->page_title = __( 'LearnPress Add-ons', 'learnpress' );\n+\t\t$this->priority   = 20;\n+\t\t$this->callback   = [ $this, 'display' ];\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function display() {\n+\t\tob_start();\n+\t\tlp_skeleton_animation_html( 20 );\n+\t\t$html_loading = ob_get_clean();\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fmanager-addons\u002Fsection',\n+\t\t\t[\n+\t\t\t\t'label'      => sprintf(\n+\t\t\t\t\t'\u003Ch1>%s\u003C\u002Fh1>',\n+\t\t\t\t\t__( 'LearnPress Add-ons', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'note-theme' => sprintf(\n+\t\t\t\t\t'\u003Cp style=\"color: rgba(255,0,0,0.76)\">\u003Cstrong>\u003Ci>%s\u003C\u002Fi>\u003C\u002Fstrong>\u003C\u002Fp>',\n+\t\t\t\t\t__( '* If you use a Premium Theme that includes LearnPress add-ons, you can go to the \u003Cstrong>Plugins\u003C\u002Fstrong> tab on Dashboard of theme to download or update them.', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'note-addon' => sprintf(\n+\t\t\t\t\t'\u003Cp>%s\u003C\u002Fp>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( 'If you have purchased a premium add-on separately, you can enter your purchase code (%s) to download or update the add-ons here.', 'learnpress' ),\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t\t'https:\u002F\u002Fthimpress.com\u002Fmy-account\u002F',\n+\t\t\t\t\t\t\t__( 'get from your account', 'learnpress' )\n+\t\t\t\t\t\t)\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'list'       => sprintf( '\u003Cdiv class=\"lp-addons-page\">%s\u003C\u002Fdiv>', $html_loading ),\n+\t\t\t]\n+\t\t);\n+\n+\t\techo Template::combine_components( $section );\n+\t}\n+}\n+\n+return new LP_Submenu_Addons();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Submenu_Tools\r\n- *\u002F\r\n-class LP_Submenu_Categories extends LP_Abstract_Submenu {\r\n-\t\u002F**\r\n-\t * LP_Submenu_Tools constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'edit-tags.php?taxonomy=course_category';\r\n-\t\t$this->menu_title = __( 'Categories', 'learnpress' );\r\n-\t\t$this->page_title = __( 'Categories', 'learnpress' );\r\n-\t\t$this->priority   = 1;\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Categories();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Submenu_Tools\n+ *\u002F\n+class LP_Submenu_Categories extends LP_Abstract_Submenu {\n+\t\u002F**\n+\t * LP_Submenu_Tools constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'edit-tags.php?taxonomy=course_category';\n+\t\t$this->menu_title = __( 'Categories', 'learnpress' );\n+\t\t$this->page_title = __( 'Categories', 'learnpress' );\n+\t\t$this->priority   = 1;\n+\t}\n+}\n+\n+return new LP_Submenu_Categories();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,181 +1,181 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Services\\UserService;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LP_Submenu_Settings\r\n- *\u002F\r\n-class LP_Submenu_Settings extends LP_Abstract_Submenu {\r\n-\t\u002F**\r\n-\t * @var LP_Abstract_Settings_Page[]\r\n-\t *\u002F\r\n-\tprotected $tabs = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Submenu_Settings constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'learn-press-settings';\r\n-\t\t$this->menu_title = esc_html__( 'Settings', 'learnpress' );\r\n-\t\t$this->page_title = esc_html__( 'LearnPress Settings', 'learnpress' );\r\n-\t\t$this->priority   = 30;\r\n-\t\t$this->callback   = [ $this, 'display' ];\r\n-\r\n-\t\t$this->tabs = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fsettings-tabs-array',\r\n-\t\t\tarray(\r\n-\t\t\t\t'general'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php',\r\n-\t\t\t\t'courses'   => new LP_Settings_Courses(),\r\n-\t\t\t\t'profile'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php',\r\n-\t\t\t\t'payments'  => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php',\r\n-\t\t\t\t'emails'    => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php',\r\n-\t\t\t\t'permalink' => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php',\r\n-\t\t\t\t'mcp'       => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-mcp.php',\r\n-\t\t\t\t'advanced'  => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php',\r\n-\t\t\t\t'open-ai'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fpage-content-settings', array( $this, 'page_contents' ) );\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fpage-' . $this->_get_page() . '\u002Fsection-content', array( $this, 'section_content' ) );\r\n-\r\n-\t\t\u002F** Save metabox in LP4 *\u002F\r\n-\t\tadd_action( 'admin_init', array( $this, 'save_settings' ) );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display menu content\r\n-\t *\u002F\r\n-\tpublic function page_content() {\r\n-\t\tparent::page_content();\r\n-\t}\r\n-\r\n-\tpublic function page_contents() {\r\n-\t\t$active_tab = $this->get_active_tab();\r\n-\t\t$section    = $this->get_active_section();\r\n-\r\n-\t\tif ( 'permalink' === $active_tab && isset( $_GET['lp-user-slug-generated'] ) ) {\r\n-\t\t\t$processed = absint( $_GET['lp-user-slug-processed'] ?? 0 );\r\n-\t\t\t$generated = absint( $_GET['lp-user-slug-generated'] ?? 0 );\r\n-\t\t\t$skipped   = absint( $_GET['lp-user-slug-skipped'] ?? 0 );\r\n-\t\t\t$failed    = absint( $_GET['lp-user-slug-failed'] ?? 0 );\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"notice notice-success\">\r\n-\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\techo esc_html(\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t\u002F* translators: 1: processed users, 2: generated slugs, 3: skipped users, 4: failed users *\u002F\r\n-\t\t\t\t\t\t\t__( 'User slug generation finished. Processed: %1$d, Generated: %2$d, Skipped: %3$d, Failed: %4$d.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$processed,\r\n-\t\t\t\t\t\t\t$generated,\r\n-\t\t\t\t\t\t\t$skipped,\r\n-\t\t\t\t\t\t\t$failed\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\t$this->tabs[ $active_tab ]->admin_page_settings( $section, $this->get_sections() );\r\n-\r\n-\t\t$hide_save_button = false;\r\n-\t\tif ( 'mcp' === $active_tab && class_exists( 'LP_Settings_Mcp' ) ) {\r\n-\t\t\t$hide_save_button = ! LP_Settings_Mcp::is_mcp_adapter_active();\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php if ( ! $hide_save_button ) : ?>\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"lp-settings-nonce\" value=\"\u003C?php echo wp_create_nonce( 'lp-settings' ); ?>\">\r\n-\t\t\t\u003Cp class=\"lp-admin-settings-buttons\">\r\n-\t\t\t\t\u003Cbutton class=\"button button-primary\">\u003C?php esc_html_e( 'Save settings', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function section_content( $section ) {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update metabox setting\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 4.0.1\r\n-\t * @author ThimPress \u003Cnhamdv>\r\n-\t *\u002F\r\n-\tpublic function save_settings() {\r\n-\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t| ! is_admin() || ! isset( $_GET['page'] )\r\n-\t\t\t|| 'learn-press-settings' !== $_GET['page'] ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$nonce = learn_press_get_request( 'lp-settings-nonce' );\r\n-\r\n-\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$active_tab = $this->get_active_tab();\r\n-\r\n-\t\t$this->tabs[ $active_tab ]->save_settings( $this->get_active_section(), $this->get_sections() );\r\n-\r\n-\t\t$redirect_args = array();\r\n-\t\tif ( 'permalink' === $active_tab &&\r\n-\t\t\t'yes' === LP_Request::get_param( 'lp_generate_user_slug' ) ) {\r\n-\t\t\t$result        = UserService::instance()->generate_users_pretty_slug();\r\n-\t\t\t$redirect_args = array(\r\n-\t\t\t\t'lp-user-slug-generated' => $result['generated'],\r\n-\t\t\t\t'lp-user-slug-processed' => $result['processed'],\r\n-\t\t\t\t'lp-user-slug-skipped'   => $result['skipped'],\r\n-\t\t\t\t'lp-user-slug-failed'    => $result['failed'],\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fupdate-settings\u002Fupdated', $this );\r\n-\r\n-\t\t\u002F\u002F Clear cache settings\r\n-\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t$lp_settings_cache->clean_lp_settings();\r\n-\r\n-\t\t\u002F\u002F Clear cache lp rewrite rules\r\n-\t\t\u002F\u002F$lp_settings_cache->clean_lp_rewrite_rules();\r\n-\r\n-\t\t\u002F\u002F Flush rewrite rules after save settings.\r\n-\t\tif ( isset( $_REQUEST['tab'] ) && 'permalink' === $_REQUEST['tab'] ) {\r\n-\t\t\tflush_rewrite_rules();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Filter redirect\r\n-\t\t$redirect = apply_filters(\r\n-\t\t\t'learn-press\u002Fupdate-settings\u002Fredirect',\r\n-\t\t\tesc_url_raw(\r\n-\t\t\t\tadd_query_arg(\r\n-\t\t\t\t\tarray_merge(\r\n-\t\t\t\t\t\tarray( 'settings-updated' => 'yes' ),\r\n-\t\t\t\t\t\t$redirect_args\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t$this\r\n-\t\t);\r\n-\t\tif ( $redirect ) {\r\n-\t\t\twp_safe_redirect( $redirect );\r\n-\t\t\texit();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function save() {\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Settings();\r\n+\u003C?php\n+\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Services\\UserService;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LP_Submenu_Settings\n+ *\u002F\n+class LP_Submenu_Settings extends LP_Abstract_Submenu {\n+\t\u002F**\n+\t * @var LP_Abstract_Settings_Page[]\n+\t *\u002F\n+\tprotected $tabs = array();\n+\n+\t\u002F**\n+\t * LP_Submenu_Settings constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'learn-press-settings';\n+\t\t$this->menu_title = esc_html__( 'Settings', 'learnpress' );\n+\t\t$this->page_title = esc_html__( 'LearnPress Settings', 'learnpress' );\n+\t\t$this->priority   = 30;\n+\t\t$this->callback   = [ $this, 'display' ];\n+\n+\t\t$this->tabs = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fsettings-tabs-array',\n+\t\t\tarray(\n+\t\t\t\t'general'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-general.php',\n+\t\t\t\t'courses'   => new LP_Settings_Courses(),\n+\t\t\t\t'profile'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php',\n+\t\t\t\t'payments'  => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-payments.php',\n+\t\t\t\t'emails'    => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php',\n+\t\t\t\t'permalink' => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-permalink.php',\n+\t\t\t\t'mcp'       => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-mcp.php',\n+\t\t\t\t'advanced'  => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-advanced.php',\n+\t\t\t\t'open-ai'   => include_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php',\n+\t\t\t)\n+\t\t);\n+\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fpage-content-settings', array( $this, 'page_contents' ) );\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fpage-' . $this->_get_page() . '\u002Fsection-content', array( $this, 'section_content' ) );\n+\n+\t\t\u002F** Save metabox in LP4 *\u002F\n+\t\tadd_action( 'admin_init', array( $this, 'save_settings' ) );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Display menu content\n+\t *\u002F\n+\tpublic function page_content() {\n+\t\tparent::page_content();\n+\t}\n+\n+\tpublic function page_contents() {\n+\t\t$active_tab = $this->get_active_tab();\n+\t\t$section    = $this->get_active_section();\n+\n+\t\tif ( 'permalink' === $active_tab && isset( $_GET['lp-user-slug-generated'] ) ) {\n+\t\t\t$processed = absint( $_GET['lp-user-slug-processed'] ?? 0 );\n+\t\t\t$generated = absint( $_GET['lp-user-slug-generated'] ?? 0 );\n+\t\t\t$skipped   = absint( $_GET['lp-user-slug-skipped'] ?? 0 );\n+\t\t\t$failed    = absint( $_GET['lp-user-slug-failed'] ?? 0 );\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"notice notice-success\">\n+\t\t\t\t\u003Cp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\techo esc_html(\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t\u002F* translators: 1: processed users, 2: generated slugs, 3: skipped users, 4: failed users *\u002F\n+\t\t\t\t\t\t\t__( 'User slug generation finished. Processed: %1$d, Generated: %2$d, Skipped: %3$d, Failed: %4$d.', 'learnpress' ),\n+\t\t\t\t\t\t\t$processed,\n+\t\t\t\t\t\t\t$generated,\n+\t\t\t\t\t\t\t$skipped,\n+\t\t\t\t\t\t\t$failed\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fp>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\t$this->tabs[ $active_tab ]->admin_page_settings( $section, $this->get_sections() );\n+\n+\t\t$hide_save_button = false;\n+\t\tif ( 'mcp' === $active_tab && class_exists( 'LP_Settings_Mcp' ) ) {\n+\t\t\t$hide_save_button = ! LP_Settings_Mcp::is_mcp_adapter_active();\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php if ( ! $hide_save_button ) : ?>\n+\t\t\t\u003Cinput type=\"hidden\" name=\"lp-settings-nonce\" value=\"\u003C?php echo wp_create_nonce( 'lp-settings' ); ?>\">\n+\t\t\t\u003Cp class=\"lp-admin-settings-buttons\">\n+\t\t\t\t\u003Cbutton class=\"button button-primary\">\u003C?php esc_html_e( 'Save settings', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function section_content( $section ) {\n+\t}\n+\n+\t\u002F**\n+\t * Update metabox setting\n+\t *\n+\t * @return void\n+\t * @version 4.0.1\n+\t * @author ThimPress \u003Cnhamdv>\n+\t *\u002F\n+\tpublic function save_settings() {\n+\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t| ! is_admin() || ! isset( $_GET['page'] )\n+\t\t\t|| 'learn-press-settings' !== $_GET['page'] ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$nonce = learn_press_get_request( 'lp-settings-nonce' );\n+\n+\t\tif ( ! wp_verify_nonce( $nonce, 'lp-settings' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$active_tab = $this->get_active_tab();\n+\n+\t\t$this->tabs[ $active_tab ]->save_settings( $this->get_active_section(), $this->get_sections() );\n+\n+\t\t$redirect_args = array();\n+\t\tif ( 'permalink' === $active_tab &&\n+\t\t\t'yes' === LP_Request::get_param( 'lp_generate_user_slug' ) ) {\n+\t\t\t$result        = UserService::instance()->generate_users_pretty_slug();\n+\t\t\t$redirect_args = array(\n+\t\t\t\t'lp-user-slug-generated' => $result['generated'],\n+\t\t\t\t'lp-user-slug-processed' => $result['processed'],\n+\t\t\t\t'lp-user-slug-skipped'   => $result['skipped'],\n+\t\t\t\t'lp-user-slug-failed'    => $result['failed'],\n+\t\t\t);\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fupdate-settings\u002Fupdated', $this );\n+\n+\t\t\u002F\u002F Clear cache settings\n+\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t$lp_settings_cache->clean_lp_settings();\n+\n+\t\t\u002F\u002F Clear cache lp rewrite rules\n+\t\t\u002F\u002F$lp_settings_cache->clean_lp_rewrite_rules();\n+\n+\t\t\u002F\u002F Flush rewrite rules after save settings.\n+\t\tif ( isset( $_REQUEST['tab'] ) && 'permalink' === $_REQUEST['tab'] ) {\n+\t\t\tflush_rewrite_rules();\n+\t\t}\n+\n+\t\t\u002F\u002F Filter redirect\n+\t\t$redirect = apply_filters(\n+\t\t\t'learn-press\u002Fupdate-settings\u002Fredirect',\n+\t\t\tesc_url_raw(\n+\t\t\t\tadd_query_arg(\n+\t\t\t\t\tarray_merge(\n+\t\t\t\t\t\tarray( 'settings-updated' => 'yes' ),\n+\t\t\t\t\t\t$redirect_args\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t$this\n+\t\t);\n+\t\tif ( $redirect ) {\n+\t\t\twp_safe_redirect( $redirect );\n+\t\t\texit();\n+\t\t}\n+\t}\n+\n+\tpublic function save() {\n+\t}\n+}\n+\n+return new LP_Submenu_Settings();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,52 +1,52 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Submenu_Statistics\r\n- *\r\n- * @since 4.2.5.5\r\n- * @author khanhbd\r\n- *\u002F\r\n-class LP_Submenu_Statistics extends LP_Abstract_Submenu {\r\n-\t\u002F**\r\n-\t * LP_Submenu_Statistics_Beta constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'learn-press-statistics';\r\n-\t\t$this->menu_title = __( 'Statistics', 'learnpress' );\r\n-\t\t$this->page_title = __( 'LearnPress Statistics', 'learnpress' );\r\n-\t\t$this->priority   = 10;\r\n-\t\t$this->callback   = [ $this, 'display' ];\r\n-\t\t$tabs             = array(\r\n-\t\t\t'overview' => __( 'Overview', 'learnpress' ),\r\n-\t\t\t'orders'   => __( 'Orders', 'learnpress' ),\r\n-\t\t\t'courses'  => __( 'Courses', 'learnpress' ),\r\n-\t\t\t'users'    => __( 'Users', 'learnpress' ),\r\n-\t\t);\r\n-\t\t$this->tabs       = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fpage-statistic-tabs',\r\n-\t\t\t$tabs\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002Fadd_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function page_content_courses() {\r\n-\t\tlearn_press_admin_view( 'statistics\u002Fcourses' );\r\n-\t}\r\n-\r\n-\tpublic function page_content_overview() {\r\n-\t\tlearn_press_admin_view( 'statistics\u002Foverview' );\r\n-\t}\r\n-\r\n-\tpublic function page_content_users() {\r\n-\t\tlearn_press_admin_view( 'statistics\u002Fusers' );\r\n-\t}\r\n-\r\n-\tpublic function page_content_orders() {\r\n-\t\tlearn_press_admin_view( 'statistics\u002Forders' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Statistics();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Submenu_Statistics\n+ *\n+ * @since 4.2.5.5\n+ * @author khanhbd\n+ *\u002F\n+class LP_Submenu_Statistics extends LP_Abstract_Submenu {\n+\t\u002F**\n+\t * LP_Submenu_Statistics_Beta constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'learn-press-statistics';\n+\t\t$this->menu_title = __( 'Statistics', 'learnpress' );\n+\t\t$this->page_title = __( 'LearnPress Statistics', 'learnpress' );\n+\t\t$this->priority   = 10;\n+\t\t$this->callback   = [ $this, 'display' ];\n+\t\t$tabs             = array(\n+\t\t\t'overview' => __( 'Overview', 'learnpress' ),\n+\t\t\t'orders'   => __( 'Orders', 'learnpress' ),\n+\t\t\t'courses'  => __( 'Courses', 'learnpress' ),\n+\t\t\t'users'    => __( 'Users', 'learnpress' ),\n+\t\t);\n+\t\t$this->tabs       = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fpage-statistic-tabs',\n+\t\t\t$tabs\n+\t\t);\n+\n+\t\t\u002F\u002Fadd_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function page_content_courses() {\n+\t\tlearn_press_admin_view( 'statistics\u002Fcourses' );\n+\t}\n+\n+\tpublic function page_content_overview() {\n+\t\tlearn_press_admin_view( 'statistics\u002Foverview' );\n+\t}\n+\n+\tpublic function page_content_users() {\n+\t\tlearn_press_admin_view( 'statistics\u002Fusers' );\n+\t}\n+\n+\tpublic function page_content_orders() {\n+\t\tlearn_press_admin_view( 'statistics\u002Forders' );\n+\t}\n+}\n+\n+return new LP_Submenu_Statistics();\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus: class-lp-submenu-students-enrolled.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Submenu_Tools\r\n- *\u002F\r\n-class LP_Submenu_Tags extends LP_Abstract_Submenu {\r\n-\t\u002F**\r\n-\t * LP_Submenu_Tools constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'edit-tags.php?taxonomy=course_tag';\r\n-\t\t$this->menu_title = __( 'Tags', 'learnpress' );\r\n-\t\t$this->page_title = __( 'Tags', 'learnpress' );\r\n-\t\t$this->priority   = 2;\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Tags();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Submenu_Tools\n+ *\u002F\n+class LP_Submenu_Tags extends LP_Abstract_Submenu {\n+\t\u002F**\n+\t * LP_Submenu_Tools constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'edit-tags.php?taxonomy=course_tag';\n+\t\t$this->menu_title = __( 'Tags', 'learnpress' );\n+\t\t$this->page_title = __( 'Tags', 'learnpress' );\n+\t\t$this->priority   = 2;\n+\t}\n+}\n+\n+return new LP_Submenu_Tags();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-themes.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-themes.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-themes.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-themes.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Submenu_Themes\r\n- *\r\n- * @since 4.2.1\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Submenu_Themes extends LP_Abstract_Submenu {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Submenu_Addons constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'learn-press-themes';\r\n-\t\t$this->menu_title = __( 'Themes', 'learnpress' );\r\n-\t\t$this->page_title = __( 'LearnPress Themes', 'learnpress' );\r\n-\t\t$this->priority   = 20;\r\n-\t\t$this->callback   = [ $this, 'display' ];\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function display() {\r\n-\t\tlearn_press_admin_view( 'addons\u002Fhtml-themes' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Themes();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Submenu_Themes\n+ *\n+ * @since 4.2.1\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Submenu_Themes extends LP_Abstract_Submenu {\n+\n+\t\u002F**\n+\t * LP_Submenu_Addons constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'learn-press-themes';\n+\t\t$this->menu_title = __( 'Themes', 'learnpress' );\n+\t\t$this->page_title = __( 'LearnPress Themes', 'learnpress' );\n+\t\t$this->priority   = 20;\n+\t\t$this->callback   = [ $this, 'display' ];\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function display() {\n+\t\tlearn_press_admin_view( 'addons\u002Fhtml-themes' );\n+\t}\n+}\n+\n+return new LP_Submenu_Themes();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tools.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tools.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tools.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tools.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,106 +1,106 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Submenu_Tools\r\n- *\u002F\r\n-class LP_Submenu_Tools extends LP_Abstract_Submenu {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Submenu_Tools constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id         = 'learn-press-tools';\r\n-\t\t$this->menu_title = __( 'Tools', 'learnpress' );\r\n-\t\t$this->page_title = __( 'LearnPress Tools', 'learnpress' );\r\n-\t\t$this->priority   = 40;\r\n-\t\t$this->callback   = [ $this, 'display' ];\r\n-\r\n-\t\t$this->tabs = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Ftools-tabs',\r\n-\t\t\tarray(\r\n-\t\t\t\t'course'          => __( 'Course Data', 'learnpress' ),\r\n-\t\t\t\t'assign_course'   => __( 'Assign\u002FUnassigned Course', 'learnpress' ),\r\n-\t\t\t\t'database'        => __( 'Database', 'learnpress' ),\r\n-\t\t\t\t'template'        => __( 'Templates', 'learnpress' ),\r\n-\t\t\t\t'lp_beta_version' => __( 'LearnPress Beta Version', 'learnpress' ),\r\n-\t\t\t\t'cache'           => __( 'Cache', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show tools for database.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function page_content_database() {\r\n-\t\tlearn_press_admin_view( 'tools\u002Fhtml-database' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show template override by theme.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function page_content_template() {\r\n-\t\tlearn_press_admin_view( 'tools\u002Fhtml-template' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show tools course data.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function page_content_course() {\r\n-\t\tlearn_press_admin_view( 'tools\u002Fhtml-course' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show beta version LP.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function page_content_lp_beta_version() {\r\n-\t\t$lp_beta_version_info = LP_Admin_Notice::check_lp_beta_version();\r\n-\t\tlearn_press_admin_view(\r\n-\t\t\t'admin-notices\u002Fbeta-version',\r\n-\t\t\t[\r\n-\t\t\t\t'data' => [\r\n-\t\t\t\t\t'check' => 1,\r\n-\t\t\t\t\t'info'  => $lp_beta_version_info,\r\n-\t\t\t\t],\r\n-\t\t\t]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function page_content_assign_course() {\r\n-\t\tlearn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-assign-course' );\r\n-\t\tlearn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-unassign-course' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Temporary, go to this page run clear all cache\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function page_content_cache() {\r\n-\t\t$lp_cache = new LP_Cache( true );\r\n-\t\t$lp_cache->clear_all();\r\n-\r\n-\t\techo sprintf(\r\n-\t\t\t'\u003Cform action=\"\" method=\"post\">\u003Cbutton class=\"button button-primary\" type=\"submit\">%s\u003C\u002Fbutton>\u003C\u002Fform>',\r\n-\t\t\t__( 'Clear all cache', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display page\r\n-\t *\u002F\r\n-\tpublic function page_content() {\r\n-\t\tparent::page_content();\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Submenu_Tools();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Submenu_Tools\n+ *\u002F\n+class LP_Submenu_Tools extends LP_Abstract_Submenu {\n+\n+\t\u002F**\n+\t * LP_Submenu_Tools constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id         = 'learn-press-tools';\n+\t\t$this->menu_title = __( 'Tools', 'learnpress' );\n+\t\t$this->page_title = __( 'LearnPress Tools', 'learnpress' );\n+\t\t$this->priority   = 40;\n+\t\t$this->callback   = [ $this, 'display' ];\n+\n+\t\t$this->tabs = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Ftools-tabs',\n+\t\t\tarray(\n+\t\t\t\t'course'          => __( 'Course Data', 'learnpress' ),\n+\t\t\t\t'assign_course'   => __( 'Assign\u002FUnassigned Course', 'learnpress' ),\n+\t\t\t\t'database'        => __( 'Database', 'learnpress' ),\n+\t\t\t\t'template'        => __( 'Templates', 'learnpress' ),\n+\t\t\t\t'lp_beta_version' => __( 'LearnPress Beta Version', 'learnpress' ),\n+\t\t\t\t'cache'           => __( 'Cache', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Show tools for database.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function page_content_database() {\n+\t\tlearn_press_admin_view( 'tools\u002Fhtml-database' );\n+\t}\n+\n+\t\u002F**\n+\t * Show template override by theme.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function page_content_template() {\n+\t\tlearn_press_admin_view( 'tools\u002Fhtml-template' );\n+\t}\n+\n+\t\u002F**\n+\t * Show tools course data.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function page_content_course() {\n+\t\tlearn_press_admin_view( 'tools\u002Fhtml-course' );\n+\t}\n+\n+\t\u002F**\n+\t * Show beta version LP.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function page_content_lp_beta_version() {\n+\t\t$lp_beta_version_info = LP_Admin_Notice::check_lp_beta_version();\n+\t\tlearn_press_admin_view(\n+\t\t\t'admin-notices\u002Fbeta-version',\n+\t\t\t[\n+\t\t\t\t'data' => [\n+\t\t\t\t\t'check' => 1,\n+\t\t\t\t\t'info'  => $lp_beta_version_info,\n+\t\t\t\t],\n+\t\t\t]\n+\t\t);\n+\t}\n+\n+\tpublic function page_content_assign_course() {\n+\t\tlearn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-assign-course' );\n+\t\tlearn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-unassign-course' );\n+\t}\n+\n+\t\u002F**\n+\t * Temporary, go to this page run clear all cache\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function page_content_cache() {\n+\t\t$lp_cache = new LP_Cache( true );\n+\t\t$lp_cache->clear_all();\n+\n+\t\techo sprintf(\n+\t\t\t'\u003Cform action=\"\" method=\"post\">\u003Cbutton class=\"button button-primary\" type=\"submit\">%s\u003C\u002Fbutton>\u003C\u002Fform>',\n+\t\t\t__( 'Clear all cache', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Display page\n+\t *\u002F\n+\tpublic function page_content() {\n+\t\tparent::page_content();\n+\t}\n+}\n+\n+return new LP_Submenu_Tools();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fsub-menus\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fsub-menus\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-loop-theme.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-loop-theme.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-loop-theme.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-loop-theme.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,64 +1,64 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Displaying loop single related theme.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cli class=\"plugin-card-learnpress\" id=\"learn-press-theme-\u003C?php echo esc_attr( $theme['id'] ); ?>\">\r\n-\t\u003Cdiv class=\"plugin-card-top\">\r\n-\t\t\u003Cdiv class=\"image-thumbnail\">\r\n-\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\r\n-\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $theme['previews']['landscape_preview']['landscape_url'] ); ?>\" alt=\"\u003C?php echo esc_attr( $theme['name'] ); ?>\">\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"theme-content\">\r\n-\t\t\t\u003Ch2 class=\"theme-title\">\r\n-\t\t\t\t\u003Ca class=\"item-title\" href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $theme['name'] ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fh2>\r\n-\t\t\t\u003Cdiv class=\"theme-detail\">\r\n-\t\t\t\t\u003Cdiv class=\"theme-price\">\r\n-\t\t\t\t\t\u003C?php echo sprintf( '$%s', $theme['price_cents'] \u002F 100 ); ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"number-sale\">\r\n-\t\t\t\t\t\u003C?php echo sprintf( '%s %s', $theme['number_of_sales'], esc_html__( ' sales', 'learnpress' ) ); ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv class=\"theme-description\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$description = preg_replace( '~[\\r\\n]+~', '', $theme['description'] );\r\n-\t\t\t\t$description = preg_replace( '~\\s+~', ' ', $description );\r\n-\t\t\t\techo wp_kses_post( $description );\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"theme-footer\">\r\n-\t\t\t\t\u003C?php $demo_url = isset( $theme['attributes'][4] ) ? $theme['attributes'][4]['value'] : $theme['url']; ?>\r\n-\t\t\t\t\u003Ca class=\"button button-primary\" href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\u003C?php echo esc_html__( 'Get it now', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( $demo_url ); ?>\">\u003C?php esc_html_e( 'View Demo', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\u003Cdiv class=\"theme-rating\">\r\n-\t\t\t\t\t\u003Cspan>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\twp_star_rating(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'rating' => $theme['rating']['rating'],\r\n-\t\t\t\t\t\t\t\t'type'   => 'rating',\r\n-\t\t\t\t\t\t\t\t'number' => $theme['rating']['count'],\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"count-rating\">(\u003C?php echo esc_html( $theme['rating']['count'] ); ?>)\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Displaying loop single related theme.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cli class=\"plugin-card-learnpress\" id=\"learn-press-theme-\u003C?php echo esc_attr( $theme['id'] ); ?>\">\n+\t\u003Cdiv class=\"plugin-card-top\">\n+\t\t\u003Cdiv class=\"image-thumbnail\">\n+\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\n+\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $theme['previews']['landscape_preview']['landscape_url'] ); ?>\" alt=\"\u003C?php echo esc_attr( $theme['name'] ); ?>\">\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"theme-content\">\n+\t\t\t\u003Ch2 class=\"theme-title\">\n+\t\t\t\t\u003Ca class=\"item-title\" href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $theme['name'] ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fh2>\n+\t\t\t\u003Cdiv class=\"theme-detail\">\n+\t\t\t\t\u003Cdiv class=\"theme-price\">\n+\t\t\t\t\t\u003C?php echo sprintf( '$%s', $theme['price_cents'] \u002F 100 ); ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"number-sale\">\n+\t\t\t\t\t\u003C?php echo sprintf( '%s %s', $theme['number_of_sales'], esc_html__( ' sales', 'learnpress' ) ); ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv class=\"theme-description\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$description = preg_replace( '~[\\r\\n]+~', '', $theme['description'] );\n+\t\t\t\t$description = preg_replace( '~\\s+~', ' ', $description );\n+\t\t\t\techo wp_kses_post( $description );\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"theme-footer\">\n+\t\t\t\t\u003C?php $demo_url = isset( $theme['attributes'][4] ) ? $theme['attributes'][4]['value'] : $theme['url']; ?>\n+\t\t\t\t\u003Ca class=\"button button-primary\" href=\"\u003C?php echo esc_url_raw( $theme['url'] ); ?>\">\u003C?php echo esc_html__( 'Get it now', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( $demo_url ); ?>\">\u003C?php esc_html_e( 'View Demo', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\u003Cdiv class=\"theme-rating\">\n+\t\t\t\t\t\u003Cspan>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\twp_star_rating(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'rating' => $theme['rating']['rating'],\n+\t\t\t\t\t\t\t\t'type'   => 'rating',\n+\t\t\t\t\t\t\t\t'number' => $theme['rating']['count'],\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"count-rating\">(\u003C?php echo esc_html( $theme['rating']['count'] ); ?>)\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-themes.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-themes.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-themes.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons\u002Fhtml-themes.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Displaying all LearnPress's related themes.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F\u002F Thimpress Education themes\r\n-$education_themes = LP_Plugins_Helper::get_related_themes( 'education' );\r\n-\u002F\u002F Thimpress other themes\r\n-$other_themes = LP_Plugins_Helper::get_related_themes( 'other' );\r\n-\r\n-if ( ! ( $education_themes || $other_themes ) ) {\r\n-\t_e( 'No related themes.', 'learnpress' );\r\n-\treturn;\r\n-}\r\n-\r\n-$all_themes = array(\r\n-\tarray(\r\n-\t\t'title' => __( 'Education Support', 'learnpress' ),\r\n-\t\t'items' => $education_themes,\r\n-\t),\r\n-\tarray(\r\n-\t\t'title' => __( 'Other', 'learnpress' ),\r\n-\t\t'items' => $other_themes,\r\n-\t),\r\n-);\r\n-\r\n-$lp_query_items_bg = new LP_Background_Query_Items();\r\n-$lp_query_items_bg->query_related_themes();\r\n-\r\n-foreach ( $all_themes as $themes ) {\r\n-\tif ( $themes['items'] ) {\r\n-\t\t?>\r\n-\t\t\u003Ch2>\u003C?php echo sprintf( '%s (\u003Cspan>%s\u003C\u002Fspan>)', esc_html( $themes['title'] ), sizeof( $themes['items'] ) ); ?>\u003C\u002Fh2>\r\n-\t\t\u003Cul class=\"addons-browse related-themes widefat\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $themes['items'] as $key => $item ) {\r\n-\t\t\t\t$item['url'] = learn_press_get_item_referral( $item['id'] );\r\n-\r\n-\t\t\t\tlearn_press_admin_view(\r\n-\t\t\t\t\t'addons\u002Fhtml-loop-theme',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'theme' => $item,\r\n-\t\t\t\t\t\t'ref'   => '',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\t\u003C?php\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Displaying all LearnPress's related themes.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F\u002F Thimpress Education themes\n+$education_themes = LP_Plugins_Helper::get_related_themes( 'education' );\n+\u002F\u002F Thimpress other themes\n+$other_themes = LP_Plugins_Helper::get_related_themes( 'other' );\n+\n+if ( ! ( $education_themes || $other_themes ) ) {\n+\t_e( 'No related themes.', 'learnpress' );\n+\treturn;\n+}\n+\n+$all_themes = array(\n+\tarray(\n+\t\t'title' => __( 'Education Support', 'learnpress' ),\n+\t\t'items' => $education_themes,\n+\t),\n+\tarray(\n+\t\t'title' => __( 'Other', 'learnpress' ),\n+\t\t'items' => $other_themes,\n+\t),\n+);\n+\n+$lp_query_items_bg = new LP_Background_Query_Items();\n+$lp_query_items_bg->query_related_themes();\n+\n+foreach ( $all_themes as $themes ) {\n+\tif ( $themes['items'] ) {\n+\t\t?>\n+\t\t\u003Ch2>\u003C?php echo sprintf( '%s (\u003Cspan>%s\u003C\u002Fspan>)', esc_html( $themes['title'] ), sizeof( $themes['items'] ) ); ?>\u003C\u002Fh2>\n+\t\t\u003Cul class=\"addons-browse related-themes widefat\">\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $themes['items'] as $key => $item ) {\n+\t\t\t\t$item['url'] = learn_press_get_item_referral( $item['id'] );\n+\n+\t\t\t\tlearn_press_admin_view(\n+\t\t\t\t\t'addons\u002Fhtml-loop-theme',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'theme' => $item,\n+\t\t\t\t\t\t'ref'   => '',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Ful>\n+\t\t\u003C?php\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Faddons.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Faddons.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,299 +1,299 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template show list addons of LearnPress\r\n- *\r\n- * @version 1.0.1\r\n- * @since 4.2.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $addons ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-require_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\r\n-\r\n-$total_addon_free          = 0;\r\n-$total_addon_paid          = 0;\r\n-$total_addon_installed     = 0;\r\n-$total_addon_not_installed = 0;\r\n-$total_addon_activated     = 0;\r\n-$total_addon_update        = 0;\r\n-$total_addon_purchased     = 0;\r\n-$plugins_installed         = get_plugins();\r\n-$plugins_activated         = get_option( 'active_plugins', '' );\r\n-$active_tab                = ! empty( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : 'all';\r\n-$keys_purchase             = LP_Settings::get_option( LP_Manager_Addons::instance()->key_purchase_addons, [] );\r\n-?>\r\n-\u003Cdiv class=\"lp-addons-wrapper\">\r\n-\t\u003Cdiv id=\"lp-addons\">\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $addons as $slug => $addon ) :\r\n-\t\t\t$addon->slug     = $slug;\r\n-\t\t\t$is_installed    = false;\r\n-\t\t\t$is_activated    = false;\r\n-\t\t\t$is_updated      = false;\r\n-\t\t\t$is_free         = $addon->is_free;\r\n-\t\t\t$addon_base      = $addon->basename;\r\n-\t\t\t$version_latest  = $addon->version;\r\n-\t\t\t$version_current = 0;\r\n-\t\t\t$classes_status  = [];\r\n-\t\t\t$addon_purchased = $addon->purchase_info ?? false;\r\n-\t\t\t\u002F\u002F Addon is free or paid.\r\n-\t\t\tif ( 1 == $addon->is_free ) {\r\n-\t\t\t\t++$total_addon_free;\r\n-\t\t\t} else {\r\n-\t\t\t\t++$total_addon_paid;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addon is installed\r\n-\t\t\tif ( isset( $plugins_installed[ $addon_base ] ) ) {\r\n-\t\t\t\t$is_installed     = true;\r\n-\t\t\t\t$classes_status[] = 'installed';\r\n-\t\t\t\t$version_current  = $plugins_installed[ $addon_base ]['Version'];\r\n-\t\t\t\t++$total_addon_installed;\r\n-\t\t\t} else {\r\n-\t\t\t\t$classes_status[] = 'not_installed';\r\n-\t\t\t\t++$total_addon_not_installed;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addon is activated\r\n-\t\t\tif ( in_array( $addon_base, $plugins_activated ) ) {\r\n-\t\t\t\t$is_activated     = true;\r\n-\t\t\t\t$classes_status[] = 'activated';\r\n-\t\t\t\t++$total_addon_activated;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addon is having update\r\n-\t\t\tif ( $is_installed && version_compare( $version_current, $version_latest, '\u003C' ) ) {\r\n-\t\t\t\t++$total_addon_update;\r\n-\t\t\t\t$classes_status[] = 'update';\r\n-\t\t\t\t$is_updated       = true;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addon is purchased\r\n-\t\t\tif ( $addon_purchased ) {\r\n-\t\t\t\t$classes_status[] = 'license';\r\n-\t\t\t\t++$total_addon_purchased;\r\n-\t\t\t\t$date_expired_str = $addon_purchased->date_expire ?? '';\r\n-\t\t\t\t\u002F\u002F Test\r\n-\t\t\t\t\u002F\u002F$date_expired_str = '2024-02-01';\r\n-\t\t\t\t\u002F\u002F$date_expired_str = '2023-01-12';\r\n-\t\t\t\t\u002F\u002F End\r\n-\t\t\t\t$date_expired          = new DateTime( $date_expired_str );\r\n-\t\t\t\t$date_now              = new DateTime( gmdate( 'Y-m-d' ) );\r\n-\t\t\t\t$date_diff             = date_diff( $date_now, $date_expired );\r\n-\t\t\t\t$number_days_remaining = $date_diff->days;\r\n-\t\t\t\tif ( $date_diff->invert ) {\r\n-\t\t\t\t\t$number_days_remaining = 0;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Addon is paid on Thimpress\r\n-\t\t\tif ( ! $is_free ) {\r\n-\t\t\t\t$classes_status[] = 'purchase';\r\n-\t\t\t\t$purchase_code    = $keys_purchase[ $addon->slug ] ?? '';\r\n-\t\t\t} else { \u002F\u002F Addon is free\r\n-\t\t\t\t$classes_status[] = 'free';\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Show addons of tab.\r\n-\t\t\tif ( ! in_array( $active_tab, $classes_status ) && $active_tab != 'all' ) {\r\n-\t\t\t\t$classes_status[] = 'hide';\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"lp-addon-item \u003C?php echo implode( ' ', $classes_status ); ?>\"\r\n-\t\t\t\tdata-slug=\"\u003C?php echo $slug; ?>\">\r\n-\t\t\t\t\u003Cdiv class=\"lp-addon-item__content\">\r\n-\t\t\t\t\t\u003Cimg src=\"\u003C?php echo $addon->image; ?>\" alt=\"\u003C?php echo $addon->name; ?>\"\u002F>\r\n-\t\t\t\t\t\u003Ch3>\r\n-\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo $addon->link; ?>\" target=\"_blank\" rel=\"noopener\">\r\n-\t\t\t\t\t\t\t\u003C?php echo $addon->name; ?>\r\n-\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003Cspan style=\"display: block\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tif ( $version_current ) {\r\n-\t\t\t\t\t\t\techo \"Version \u003Cspan class='addon-version-current'>$version_current\u003C\u002Fspan>\";\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( isset( $addon->link_doc ) && ! empty( $addon->link_doc ) ) {\r\n-\t\t\t\t\t\t\techo \" | \u003Ca href='{$addon->link_doc}' target='_blank' rel='noopener'>Documentation\u003C\u002Fa>\";\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\u002F\u002F Show version latest.\r\n-\t\t\t\t\tif ( $is_updated ) {\r\n-\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"new-update\" style=\"color:#27BF49;display: block\">%s: %s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t__( 'Latest version', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$version_latest\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $addon_purchased ) {\r\n-\t\t\t\t\t\t$color_expire   = '#27BF49';\r\n-\t\t\t\t\t\t$message        = '';\r\n-\t\t\t\t\t\t$button_extends = sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cp>\u003Ca href=\"%s\" target=\"_blank\" rel=\"noopener\" style=\"color: #E64B50;text-decoration: underline\">%s\u003C\u002Fa>\u003C\u002Fp>',\r\n-\t\t\t\t\t\t\t$addon->link,\r\n-\t\t\t\t\t\t\t__( 'Extends Now', 'learnpress' )\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $number_days_remaining === 0 ) {\r\n-\t\t\t\t\t\t\t$color_expire = 'red';\r\n-\t\t\t\t\t\t\t$message      = __( 'Your update and support has expired!', 'learnpress' );\r\n-\r\n-\t\t\t\t\t\t} elseif ( $number_days_remaining \u003C 61 ) {\r\n-\t\t\t\t\t\t\t$color_expire = 'orange';\r\n-\t\t\t\t\t\t\t$message      = sprintf(\r\n-\t\t\t\t\t\t\t\t__( 'You have a license of for this item with %s days of update & support remaining. Please extend the update & support license to keep updating the latest versions & receive customer support from ThimPress before it expires.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\tsprintf( '\u003Cstrong style=\"color: #D93C65\">%d\u003C\u002Fstrong>', $number_days_remaining )\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$button_extends = '';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"need-extend\" style=\"display: block\">%s %s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$message,\r\n-\t\t\t\t\t\t\t$button_extends\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t'\u003Cp>%s on %s\u003C\u002Fp>',\r\n-\t\t\t\t\t\t$addon->is_free ? __( 'Free', 'learnpress' ) : __( 'Paid', 'learnpress' ),\r\n-\t\t\t\t\t\t$addon->is_org ? __( 'WP.org', 'learnpress' ) : __( 'Thimpress', 'learnpress' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( ! $is_free && $is_installed && empty( $purchase_code ) ) {\r\n-\t\t\t\t\t\techo '\u003Cp style=\"color: red; display: none\">Empty key purchase\u003C\u002Fp>';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp title=\"\u003C?php echo $addon->description; ?>\">\u003C?php echo $addon->description; ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions\">\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions__left\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tif ( isset( $addon->setting ) && ! empty( $addon->setting ) ) {\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo site_url( $addon->setting ); ?>\" target=\"_blank\" rel=\"noopener\">\r\n-\t\t\t\t\t\t\t\t\u003Cbutton data-action=\"setting\">\u003C?php _e( 'Settings', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update\"\r\n-\t\t\t\t\t\t\t\ttitle=\"\u003C?php echo sprintf( '%s %s require LP version %s', $addon->name, $version_latest, $addon->require_lp ); ?>\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan class=\"text\">Update\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update-purchase-code\"\r\n-\t\t\t\t\t\t\t\ttitle=\"\u003C?php _e( 'Change Purchase Code', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-ellipsis\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"install\"\r\n-\t\t\t\t\t\t\t\u003C?php echo $is_free ? 'data-link=\"' . $addon->link . '\"' : ''; ?>\r\n-\t\t\t\t\t\t>\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\r\n-\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Install', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\r\n-\t\t\t\t\t\t\t\tdata-action=\"purchase\">\u003C?php _e( 'Install', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions__right\">\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"deactivate\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\r\n-\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Deactivate', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"activate\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\r\n-\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Activate', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"lp-addon-item__purchase\">\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__purchase__wrapper\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"purchase-install\">\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003C?php _e( 'Purchase Code', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"enter-purchase-code\"\r\n-\t\t\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Enter Purchase Code', 'learnpress' ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"install\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\r\n-\t\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Submit', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\tOR\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"buy\" data-link=\"\u003C?php echo $addon->link; ?>\">\r\n-\t\t\t\t\t\t\t\tBuy\r\n-\t\t\t\t\t\t\t\tNow\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\r\n-\t\t\t\t\t\t\t\t\tdata-action=\"cancel\">\r\n-\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"purchase-update\">\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003C?php _e( 'Purchase Code', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"enter-purchase-code\" placeholder=\"\u003C?php esc_attr_e( 'Enter Purchase Code', 'learnpress' ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update-purchase\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\r\n-\t\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Save', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\r\n-\t\t\t\t\t\t\t\t\tdata-action=\"cancel\">\r\n-\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"purchase-code\"\r\n-\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\tendforeach;\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"lp-nav-tab-wrapper\" style=\"display: none\">\r\n-\t\t\u003C?php\r\n-\t\t$tabs = array(\r\n-\t\t\t'all'           => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'All', 'learnpress' ), count( (array) $addons ) ),\r\n-\t\t\t'installed'     => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Installed', 'learnpress' ), $total_addon_installed ),\r\n-\t\t\t'purchase'      => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Paid', 'learnpress' ), $total_addon_paid ),\r\n-\t\t\t'free'          => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Free', 'learnpress' ), $total_addon_free ),\r\n-\t\t\t'update'        => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Update', 'learnpress' ), $total_addon_update ),\r\n-\t\t\t'license'       => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'License', 'learnpress' ), $total_addon_purchased ),\r\n-\t\t\t'not_installed' => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Not Installed', 'learnpress' ), $total_addon_not_installed ),\r\n-\t\t);\r\n-\t\tforeach ( $tabs as $tab => $name ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003C?php\r\n-\r\n-\t\t\t$active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';\r\n-\t\t\t$tab_title    = apply_filters( 'learn-press\u002Fadmin\u002Fsubmenu-heading-tab-title', $name, $tab );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003C?php if ( $active_class ) { ?>\r\n-\t\t\t\t\u003Ca class=\"nav-tab\u003C?php echo esc_attr( $active_class ); ?>\"\r\n-\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $tab ); ?>\" href=\"#\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $tab_title ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C?php } else { ?>\r\n-\t\t\t\t\u003Ca class=\"nav-tab\"\r\n-\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $tab ); ?>\"\r\n-\t\t\t\t\thref=\"?page=learn-press-addons&tab=\u003C?php echo esc_attr( $tab ); ?>\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $tab_title ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C?php } ?>\r\n-\t\t\u003C?php } ?>\r\n-\t\t\u003Cdiv class=\"lp-search-addons\">\r\n-\t\t\t\u003Clabel>\r\n-\t\t\t\t\u003Cinput id=\"lp-search-addons__input\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Search name addon', 'learnpress' ); ?>\"\u002F>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template show list addons of LearnPress\n+ *\n+ * @version 1.0.1\n+ * @since 4.2.1\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $addons ) ) {\n+\treturn;\n+}\n+\n+require_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\n+\n+$total_addon_free          = 0;\n+$total_addon_paid          = 0;\n+$total_addon_installed     = 0;\n+$total_addon_not_installed = 0;\n+$total_addon_activated     = 0;\n+$total_addon_update        = 0;\n+$total_addon_purchased     = 0;\n+$plugins_installed         = get_plugins();\n+$plugins_activated         = get_option( 'active_plugins', '' );\n+$active_tab                = ! empty( $_REQUEST['tab'] ) ? $_REQUEST['tab'] : 'all';\n+$keys_purchase             = LP_Settings::get_option( LP_Manager_Addons::instance()->key_purchase_addons, [] );\n+?>\n+\u003Cdiv class=\"lp-addons-wrapper\">\n+\t\u003Cdiv id=\"lp-addons\">\n+\t\t\u003C?php\n+\t\tforeach ( $addons as $slug => $addon ) :\n+\t\t\t$addon->slug     = $slug;\n+\t\t\t$is_installed    = false;\n+\t\t\t$is_activated    = false;\n+\t\t\t$is_updated      = false;\n+\t\t\t$is_free         = $addon->is_free;\n+\t\t\t$addon_base      = $addon->basename;\n+\t\t\t$version_latest  = $addon->version;\n+\t\t\t$version_current = 0;\n+\t\t\t$classes_status  = [];\n+\t\t\t$addon_purchased = $addon->purchase_info ?? false;\n+\t\t\t\u002F\u002F Addon is free or paid.\n+\t\t\tif ( 1 == $addon->is_free ) {\n+\t\t\t\t++$total_addon_free;\n+\t\t\t} else {\n+\t\t\t\t++$total_addon_paid;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addon is installed\n+\t\t\tif ( isset( $plugins_installed[ $addon_base ] ) ) {\n+\t\t\t\t$is_installed     = true;\n+\t\t\t\t$classes_status[] = 'installed';\n+\t\t\t\t$version_current  = $plugins_installed[ $addon_base ]['Version'];\n+\t\t\t\t++$total_addon_installed;\n+\t\t\t} else {\n+\t\t\t\t$classes_status[] = 'not_installed';\n+\t\t\t\t++$total_addon_not_installed;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addon is activated\n+\t\t\tif ( in_array( $addon_base, $plugins_activated ) ) {\n+\t\t\t\t$is_activated     = true;\n+\t\t\t\t$classes_status[] = 'activated';\n+\t\t\t\t++$total_addon_activated;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addon is having update\n+\t\t\tif ( $is_installed && version_compare( $version_current, $version_latest, '\u003C' ) ) {\n+\t\t\t\t++$total_addon_update;\n+\t\t\t\t$classes_status[] = 'update';\n+\t\t\t\t$is_updated       = true;\n+\t\t\t}\n+\t\t\t\u002F\u002F Addon is purchased\n+\t\t\tif ( $addon_purchased ) {\n+\t\t\t\t$classes_status[] = 'license';\n+\t\t\t\t++$total_addon_purchased;\n+\t\t\t\t$date_expired_str = $addon_purchased->date_expire ?? '';\n+\t\t\t\t\u002F\u002F Test\n+\t\t\t\t\u002F\u002F$date_expired_str = '2024-02-01';\n+\t\t\t\t\u002F\u002F$date_expired_str = '2023-01-12';\n+\t\t\t\t\u002F\u002F End\n+\t\t\t\t$date_expired          = new DateTime( $date_expired_str );\n+\t\t\t\t$date_now              = new DateTime( gmdate( 'Y-m-d' ) );\n+\t\t\t\t$date_diff             = date_diff( $date_now, $date_expired );\n+\t\t\t\t$number_days_remaining = $date_diff->days;\n+\t\t\t\tif ( $date_diff->invert ) {\n+\t\t\t\t\t$number_days_remaining = 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F Addon is paid on Thimpress\n+\t\t\tif ( ! $is_free ) {\n+\t\t\t\t$classes_status[] = 'purchase';\n+\t\t\t\t$purchase_code    = $keys_purchase[ $addon->slug ] ?? '';\n+\t\t\t} else { \u002F\u002F Addon is free\n+\t\t\t\t$classes_status[] = 'free';\n+\t\t\t}\n+\t\t\t\u002F\u002F Show addons of tab.\n+\t\t\tif ( ! in_array( $active_tab, $classes_status ) && $active_tab != 'all' ) {\n+\t\t\t\t$classes_status[] = 'hide';\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"lp-addon-item \u003C?php echo implode( ' ', $classes_status ); ?>\"\n+\t\t\t\tdata-slug=\"\u003C?php echo $slug; ?>\">\n+\t\t\t\t\u003Cdiv class=\"lp-addon-item__content\">\n+\t\t\t\t\t\u003Cimg src=\"\u003C?php echo $addon->image; ?>\" alt=\"\u003C?php echo $addon->name; ?>\"\u002F>\n+\t\t\t\t\t\u003Ch3>\n+\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo $addon->link; ?>\" target=\"_blank\" rel=\"noopener\">\n+\t\t\t\t\t\t\t\u003C?php echo $addon->name; ?>\n+\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fh3>\n+\t\t\t\t\t\u003Cspan style=\"display: block\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tif ( $version_current ) {\n+\t\t\t\t\t\t\techo \"Version \u003Cspan class='addon-version-current'>$version_current\u003C\u002Fspan>\";\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( isset( $addon->link_doc ) && ! empty( $addon->link_doc ) ) {\n+\t\t\t\t\t\t\techo \" | \u003Ca href='{$addon->link_doc}' target='_blank' rel='noopener'>Documentation\u003C\u002Fa>\";\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\u002F\u002F Show version latest.\n+\t\t\t\t\tif ( $is_updated ) {\n+\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"new-update\" style=\"color:#27BF49;display: block\">%s: %s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t__( 'Latest version', 'learnpress' ),\n+\t\t\t\t\t\t\t$version_latest\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $addon_purchased ) {\n+\t\t\t\t\t\t$color_expire   = '#27BF49';\n+\t\t\t\t\t\t$message        = '';\n+\t\t\t\t\t\t$button_extends = sprintf(\n+\t\t\t\t\t\t\t'\u003Cp>\u003Ca href=\"%s\" target=\"_blank\" rel=\"noopener\" style=\"color: #E64B50;text-decoration: underline\">%s\u003C\u002Fa>\u003C\u002Fp>',\n+\t\t\t\t\t\t\t$addon->link,\n+\t\t\t\t\t\t\t__( 'Extends Now', 'learnpress' )\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $number_days_remaining === 0 ) {\n+\t\t\t\t\t\t\t$color_expire = 'red';\n+\t\t\t\t\t\t\t$message      = __( 'Your update and support has expired!', 'learnpress' );\n+\n+\t\t\t\t\t\t} elseif ( $number_days_remaining \u003C 61 ) {\n+\t\t\t\t\t\t\t$color_expire = 'orange';\n+\t\t\t\t\t\t\t$message      = sprintf(\n+\t\t\t\t\t\t\t\t__( 'You have a license of for this item with %s days of update & support remaining. Please extend the update & support license to keep updating the latest versions & receive customer support from ThimPress before it expires.', 'learnpress' ),\n+\t\t\t\t\t\t\t\tsprintf( '\u003Cstrong style=\"color: #D93C65\">%d\u003C\u002Fstrong>', $number_days_remaining )\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$button_extends = '';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"need-extend\" style=\"display: block\">%s %s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$message,\n+\t\t\t\t\t\t\t$button_extends\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t'\u003Cp>%s on %s\u003C\u002Fp>',\n+\t\t\t\t\t\t$addon->is_free ? __( 'Free', 'learnpress' ) : __( 'Paid', 'learnpress' ),\n+\t\t\t\t\t\t$addon->is_org ? __( 'WP.org', 'learnpress' ) : __( 'Thimpress', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( ! $is_free && $is_installed && empty( $purchase_code ) ) {\n+\t\t\t\t\t\techo '\u003Cp style=\"color: red; display: none\">Empty key purchase\u003C\u002Fp>';\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp title=\"\u003C?php echo $addon->description; ?>\">\u003C?php echo $addon->description; ?>\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions\">\n+\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions__left\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tif ( isset( $addon->setting ) && ! empty( $addon->setting ) ) {\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo site_url( $addon->setting ); ?>\" target=\"_blank\" rel=\"noopener\">\n+\t\t\t\t\t\t\t\t\u003Cbutton data-action=\"setting\">\u003C?php _e( 'Settings', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update\"\n+\t\t\t\t\t\t\t\ttitle=\"\u003C?php echo sprintf( '%s %s require LP version %s', $addon->name, $version_latest, $addon->require_lp ); ?>\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan class=\"text\">Update\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update-purchase-code\"\n+\t\t\t\t\t\t\t\ttitle=\"\u003C?php _e( 'Change Purchase Code', 'learnpress' ); ?>\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-ellipsis\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"install\"\n+\t\t\t\t\t\t\t\u003C?php echo $is_free ? 'data-link=\"' . $addon->link . '\"' : ''; ?>\n+\t\t\t\t\t\t>\n+\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\n+\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Install', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\n+\t\t\t\t\t\t\t\tdata-action=\"purchase\">\u003C?php _e( 'Install', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__actions__right\">\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"deactivate\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\n+\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Deactivate', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"activate\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\n+\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Activate', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"lp-addon-item__purchase\">\n+\t\t\t\t\t\u003Cdiv class=\"lp-addon-item__purchase__wrapper\">\n+\t\t\t\t\t\t\u003Cdiv class=\"purchase-install\">\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003C?php _e( 'Purchase Code', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"enter-purchase-code\"\n+\t\t\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Enter Purchase Code', 'learnpress' ); ?>\"\n+\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"install\">\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\n+\t\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Submit', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\tOR\n+\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"buy\" data-link=\"\u003C?php echo $addon->link; ?>\">\n+\t\t\t\t\t\t\t\tBuy\n+\t\t\t\t\t\t\t\tNow\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\n+\t\t\t\t\t\t\t\t\tdata-action=\"cancel\">\n+\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv class=\"purchase-update\">\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003C?php _e( 'Purchase Code', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"enter-purchase-code\" placeholder=\"\u003C?php esc_attr_e( 'Enter Purchase Code', 'learnpress' ); ?>\"\n+\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\" data-action=\"update-purchase\">\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-update\">\u003C\u002Fspan>\u003Cspan\n+\t\t\t\t\t\t\t\t\tclass=\"text\">\u003C?php _e( 'Save', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\u003Cbutton class=\"btn-addon-action\"\n+\t\t\t\t\t\t\t\t\tdata-action=\"cancel\">\n+\t\t\t\t\t\t\t\t\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"purchase-code\"\n+\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo $purchase_code ?? ''; ?>\">\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\tendforeach;\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"lp-nav-tab-wrapper\" style=\"display: none\">\n+\t\t\u003C?php\n+\t\t$tabs = array(\n+\t\t\t'all'           => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'All', 'learnpress' ), count( (array) $addons ) ),\n+\t\t\t'installed'     => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Installed', 'learnpress' ), $total_addon_installed ),\n+\t\t\t'purchase'      => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Paid', 'learnpress' ), $total_addon_paid ),\n+\t\t\t'free'          => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Free', 'learnpress' ), $total_addon_free ),\n+\t\t\t'update'        => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Update', 'learnpress' ), $total_addon_update ),\n+\t\t\t'license'       => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'License', 'learnpress' ), $total_addon_purchased ),\n+\t\t\t'not_installed' => sprintf( '%s (\u003Cspan>%d\u003C\u002Fspan>)', __( 'Not Installed', 'learnpress' ), $total_addon_not_installed ),\n+\t\t);\n+\t\tforeach ( $tabs as $tab => $name ) {\n+\t\t\t?>\n+\t\t\t\u003C?php\n+\n+\t\t\t$active_class = ( $tab == $active_tab ) ? ' nav-tab-active' : '';\n+\t\t\t$tab_title    = apply_filters( 'learn-press\u002Fadmin\u002Fsubmenu-heading-tab-title', $name, $tab );\n+\t\t\t?>\n+\n+\t\t\t\u003C?php if ( $active_class ) { ?>\n+\t\t\t\t\u003Ca class=\"nav-tab\u003C?php echo esc_attr( $active_class ); ?>\"\n+\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $tab ); ?>\" href=\"#\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $tab_title ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C?php } else { ?>\n+\t\t\t\t\u003Ca class=\"nav-tab\"\n+\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $tab ); ?>\"\n+\t\t\t\t\thref=\"?page=learn-press-addons&tab=\u003C?php echo esc_attr( $tab ); ?>\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $tab_title ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C?php } ?>\n+\t\t\u003C?php } ?>\n+\t\t\u003Cdiv class=\"lp-search-addons\">\n+\t\t\t\u003Clabel>\n+\t\t\t\t\u003Cinput id=\"lp-search-addons__input\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Search name addon', 'learnpress' ); ?>\"\u002F>\n+\t\t\t\u003C\u002Flabel>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display a notice in admin\r\n- * @deprecated 4.1.7.3.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $message ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! isset( $type ) ) {\r\n-\t$type = 'success';\r\n-}\r\n-\r\n-if ( ! isset( $dismissible ) ) {\r\n-\t$dismissible = true;\r\n-}\r\n-\r\n-if ( strpos( $type, 'notice-' ) === false ) {\r\n-\t$type = \"notice-{$type}\";\r\n-}\r\n-\r\n-$classes = array( 'lp-notice', 'notice', $type );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"\u003C?php echo esc_attr( $id ?? '' ); ?>\" class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\r\n-\t\u003Cp>\u003C?php echo esc_html( $message ); ?>\u003C\u002Fp>\r\n-\r\n-\t\u003C?php if ( $dismissible ) : ?>\r\n-\t\t\u003Cbutton class=\"notice-dismiss\" data-dismiss-notice=\"\u003C?php echo esc_attr( $id ?? '' ); ?>\">\u003C\u002Fbutton>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display a notice in admin\n+ * @deprecated 4.1.7.3.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $message ) ) {\n+\treturn;\n+}\n+\n+if ( ! isset( $type ) ) {\n+\t$type = 'success';\n+}\n+\n+if ( ! isset( $dismissible ) ) {\n+\t$dismissible = true;\n+}\n+\n+if ( strpos( $type, 'notice-' ) === false ) {\n+\t$type = \"notice-{$type}\";\n+}\n+\n+$classes = array( 'lp-notice', 'notice', $type );\n+?>\n+\n+\u003Cdiv id=\"\u003C?php echo esc_attr( $id ?? '' ); ?>\" class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\n+\t\u003Cp>\u003C?php echo esc_html( $message ); ?>\u003C\u002Fp>\n+\n+\t\u003C?php if ( $dismissible ) : ?>\n+\t\t\u003Cbutton class=\"notice-dismiss\" data-dismiss-notice=\"\u003C?php echo esc_attr( $id ?? '' ); ?>\">\u003C\u002Fbutton>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-new-version.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-new-version.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-new-version.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-new-version.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display error wrong permalink structure.\r\n- *\r\n- * @version 1.0.1\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || empty( $data['addons'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( empty( $data['dismiss'] ) ) {\r\n-\t?>\r\n-\t\u003Cdiv class=\"lp-notice notice notice-info\">\r\n-\t\t\u003C?php\r\n-\t\tif ( isset( $data['allow_dismiss'] ) ) {\r\n-\t\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-addons-new-version' ) );\r\n-\t\t}\r\n-\t\t?>\r\n-\t\t\u003Cp>\u003C?php echo sprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'New version Addons.', 'learnpress' ) ); ?>\u003C\u002Fp>\r\n-\t\t\u003Cp style=\"display: flex;gap: 5px;flex-wrap: wrap\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $data['addons'] as $addon ) {\r\n-\t\t\t\techo sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"button button-primary\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-addons&tab=update' ),\r\n-\t\t\t\t\t$addon->name\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n-?>\r\n-\u003Cinput type=\"hidden\" name=\"lp-addons-new-version-totals\" value=\"\u003C?php echo count( $data['addons'] ); ?>\"\u002F>\r\n+\u003C?php\n+\u002F**\n+ * Template for display error wrong permalink structure.\n+ *\n+ * @version 1.0.1\n+ * @since 3.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || empty( $data['addons'] ) ) {\n+\treturn;\n+}\n+\n+if ( empty( $data['dismiss'] ) ) {\n+\t?>\n+\t\u003Cdiv class=\"lp-notice notice notice-info\">\n+\t\t\u003C?php\n+\t\tif ( isset( $data['allow_dismiss'] ) ) {\n+\t\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-addons-new-version' ) );\n+\t\t}\n+\t\t?>\n+\t\t\u003Cp>\u003C?php echo sprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'New version Addons.', 'learnpress' ) ); ?>\u003C\u002Fp>\n+\t\t\u003Cp style=\"display: flex;gap: 5px;flex-wrap: wrap\">\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $data['addons'] as $addon ) {\n+\t\t\t\techo sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"button button-primary\">%s\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-addons&tab=update' ),\n+\t\t\t\t\t$addon->name\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\n+?>\n+\u003Cinput type=\"hidden\" name=\"lp-addons-new-version-totals\" value=\"\u003C?php echo count( $data['addons'] ); ?>\"\u002F>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-purchased-extend.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-purchased-extend.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-purchased-extend.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Faddons-purchased-extend.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display message notification addons purchased need extend.\r\n- *\r\n- * @version 1.0.1\r\n- * @since 4.2.5.9\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || empty( $data['need-extend'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( empty( $data['dismiss'] ) ) {\r\n-\t?>\r\n-\t\u003Cdiv class=\"lp-notice notice notice-info\">\r\n-\t\t\u003C?php\r\n-\t\tif ( isset( $data['allow_dismiss'] ) ) {\r\n-\t\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-addons-new-version' ) );\r\n-\t\t}\r\n-\t\t?>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003C?php\r\n-\t\t\techo sprintf(\r\n-\t\t\t\t'\u003Cstrong>%s %s\u003C\u002Fstrong>',\r\n-\t\t\t\t__( 'You have LearnPress Add-on licenses that need to be extended.', 'learnpress' ),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Ca style=\"color: #E64B50\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-addons&tab=license' ),\r\n-\t\t\t\t\t__( 'Check now!', 'learnpress' )\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n-?>\r\n+\u003C?php\n+\u002F**\n+ * Template for display message notification addons purchased need extend.\n+ *\n+ * @version 1.0.1\n+ * @since 4.2.5.9\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || empty( $data['need-extend'] ) ) {\n+\treturn;\n+}\n+\n+if ( empty( $data['dismiss'] ) ) {\n+\t?>\n+\t\u003Cdiv class=\"lp-notice notice notice-info\">\n+\t\t\u003C?php\n+\t\tif ( isset( $data['allow_dismiss'] ) ) {\n+\t\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-addons-new-version' ) );\n+\t\t}\n+\t\t?>\n+\t\t\u003Cp>\n+\t\t\t\u003C?php\n+\t\t\techo sprintf(\n+\t\t\t\t'\u003Cstrong>%s %s\u003C\u002Fstrong>',\n+\t\t\t\t__( 'You have LearnPress Add-on licenses that need to be extended.', 'learnpress' ),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Ca style=\"color: #E64B50\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-addons&tab=license' ),\n+\t\t\t\t\t__( 'Check now!', 'learnpress' )\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\n+?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbeta-version.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbeta-version.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbeta-version.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbeta-version.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display beta version of LP.\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$info = is_array( $data['info'] ) ? $data['info'] : [];\r\n-if ( empty( $info ) ) {\r\n-\techo '\u003Cp>No beta version\u003C\u002Fp>';\r\n-\treturn;\r\n-}\r\n-\r\n-$data_info = LP_Admin_Notice::get_data_lp_beta( $info );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-notice lp-mes-beta-version notice notice-info\">\r\n-\t\u003Ch3>\u003C?php echo wp_kses_post( $data_info['title'] ?? '' ); ?>\u003C\u002Fh3>\r\n-\t\u003C?php echo wp_kses_post( $data_info['description'] ?? '' ); ?>\r\n-\t\u003C?php\r\n-\tif ( isset( $data['allow_dismiss'] ) ) {\r\n-\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-beta-version' ) );\r\n-\t}\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display beta version of LP.\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\n+\treturn;\n+}\n+\n+$info = is_array( $data['info'] ) ? $data['info'] : [];\n+if ( empty( $info ) ) {\n+\techo '\u003Cp>No beta version\u003C\u002Fp>';\n+\treturn;\n+}\n+\n+$data_info = LP_Admin_Notice::get_data_lp_beta( $info );\n+?>\n+\n+\u003Cdiv class=\"lp-admin-notice lp-mes-beta-version notice notice-info\">\n+\t\u003Ch3>\u003C?php echo wp_kses_post( $data_info['title'] ?? '' ); ?>\u003C\u002Fh3>\n+\t\u003C?php echo wp_kses_post( $data_info['description'] ?? '' ); ?>\n+\t\u003C?php\n+\tif ( isset( $data['allow_dismiss'] ) ) {\n+\t\tTemplate::instance()->get_admin_template( 'admin-notices\u002Fbutton-dismiss.php', array( 'key' => 'lp-beta-version' ) );\n+\t}\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbutton-dismiss.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbutton-dismiss.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbutton-dismiss.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fbutton-dismiss.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template button dismiss notice.\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $key ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cbutton type=\"button\" class=\"notice-dismiss btn-lp-notice-dismiss\" data-dismiss=\"\u003C?php echo $key; ?>\" title=\"Dismiss notice\">\r\n-\t\u003Cspan class=\"screen-reader-text\">Dismiss this notice.\u003C\u002Fspan>\r\n-\u003C\u002Fbutton>\r\n+\u003C?php\n+\u002F**\n+ * Template button dismiss notice.\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $key ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cbutton type=\"button\" class=\"notice-dismiss btn-lp-notice-dismiss\" data-dismiss=\"\u003C?php echo $key; ?>\" title=\"Dismiss notice\">\n+\t\u003Cspan class=\"screen-reader-text\">Dismiss this notice.\u003C\u002Fspan>\n+\u003C\u002Fbutton>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fpermalink-wrong.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fpermalink-wrong.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fpermalink-wrong.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fpermalink-wrong.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display error wrong permalink structure.\r\n- *\r\n- * @since 3.0.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! $data['check'] ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"notice notice-warning\">\r\n-\t\u003Cp>\r\n-\t\t\u003C?php\r\n-\t\techo sprintf(\r\n-\t\t\t'LearnPress requires permalink option \u003Cstrong>Post name\u003C\u002Fstrong> is enabled. Please enable it \u003Ca href=\"%s\">here\u003C\u002Fa> to ensure that all functions work properly.',\r\n-\t\t\tadmin_url( 'options-permalink.php' )\r\n-\t\t)\r\n-\t\t?>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display error wrong permalink structure.\n+ *\n+ * @since 3.0.0\n+ * @version 1.0.1\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) ) {\n+\treturn;\n+}\n+\n+if ( ! $data['check'] ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"notice notice-warning\">\n+\t\u003Cp>\n+\t\t\u003C?php\n+\t\techo sprintf(\n+\t\t\t'LearnPress requires permalink option \u003Cstrong>Post name\u003C\u002Fstrong> is enabled. Please enable it \u003Ca href=\"%s\">here\u003C\u002Fa> to ensure that all functions work properly.',\n+\t\t\tadmin_url( 'options-permalink.php' )\n+\t\t)\n+\t\t?>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fplugin-base.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fplugin-base.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fplugin-base.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fplugin-base.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display error wrong name plugin learnpress\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"notice notice-warning\">\r\n-\t\u003Cp>\r\n-\t\t\u003C?php\r\n-\t\tprintf(\r\n-\t\t\t__(\r\n-\t\t\t\t'The LearnPress plugin base directory must be \u003Cstrong>learnpress\u002Flearnpres.php\u003C\u002Fstrong> (case-sensitive) to ensure all functions work properly and are fully operational (currently \u003Cstrong>%s\u003C\u002Fstrong>)',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t),\r\n-\t\t\tLP_PLUGIN_BASENAME\r\n-\t\t);\r\n-\t\t?>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display error wrong name plugin learnpress\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"notice notice-warning\">\n+\t\u003Cp>\n+\t\t\u003C?php\n+\t\tprintf(\n+\t\t\t__(\n+\t\t\t\t'The LearnPress plugin base directory must be \u003Cstrong>learnpress\u002Flearnpres.php\u003C\u002Fstrong> (case-sensitive) to ensure all functions work properly and are fully operational (currently \u003Cstrong>%s\u003C\u002Fstrong>)',\n+\t\t\t\t'learnpress'\n+\t\t\t),\n+\t\t\tLP_PLUGIN_BASENAME\n+\t\t);\n+\t\t?>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fsetup-wizard.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fsetup-wizard.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fsetup-wizard.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fsetup-wizard.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display error wrong permalink structure.\r\n- *\r\n- * @version 1.0.1\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\u003Cdiv id=\"notice-install\" class=\"lp-notice notice notice-info\">\r\n-\t\u003Cp>\u003C?php echo sprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'LearnPress LMS is ready to use.', 'learnpress' ) ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\r\n-\t\t\u003Ca class=\"button button-primary\" href=\"\u003C?php echo admin_url( 'index.php?page=lp-setup' ); ?>\">\u003C?php _e( 'Quick Setup', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C?php\r\n-\t\tif ( isset( $data['allow_dismiss'] ) ) :\r\n-\t\t\t?>\r\n-\t\t\t\u003Cbutton type=\"button\" class=\"notice-dismiss btn-lp-notice-dismiss\" data-dismiss=\"lp-setup-wizard\">\r\n-\t\t\t\t\u003Cspan class=\"screen-reader-text\">Dismiss this notice.\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display error wrong permalink structure.\n+ *\n+ * @version 1.0.1\n+ * @since 3.0.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\n+\treturn;\n+}\n+?>\n+\u003Cdiv id=\"notice-install\" class=\"lp-notice notice notice-info\">\n+\t\u003Cp>\u003C?php echo sprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'LearnPress LMS is ready to use.', 'learnpress' ) ); ?>\u003C\u002Fp>\n+\t\u003Cp>\n+\t\t\u003Ca class=\"button button-primary\" href=\"\u003C?php echo admin_url( 'index.php?page=lp-setup' ); ?>\">\u003C?php _e( 'Quick Setup', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C?php\n+\t\tif ( isset( $data['allow_dismiss'] ) ) :\n+\t\t\t?>\n+\t\t\t\u003Cbutton type=\"button\" class=\"notice-dismiss btn-lp-notice-dismiss\" data-dismiss=\"lp-setup-wizard\">\n+\t\t\t\t\u003Cspan class=\"screen-reader-text\">Dismiss this notice.\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fupgrade-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fupgrade-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fupgrade-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fupgrade-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying update message\r\n- *\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"notice notice-warning lp-notice-update-database\">\r\n-\t\u003Cp>\r\n-\t\t\u003C?php _e( '\u003Cstrong>LearnPress update\u003C\u002Fstrong> – We need to update your database to the latest version.', 'learnpress' ); ?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cp>\r\n-\t\t\u003Ca class=\"button button-primary lp-btn-go-upgrade-db\"\r\n-\t\t\tdata-context=\"message\"\r\n-\t\t\thref=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-tools&tab=database&action=upgrade-db' ) ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Go to Update', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying update message\n+ *\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) || ! $data['check'] ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"notice notice-warning lp-notice-update-database\">\n+\t\u003Cp>\n+\t\t\u003C?php _e( '\u003Cstrong>LearnPress update\u003C\u002Fstrong> – We need to update your database to the latest version.', 'learnpress' ); ?>\n+\t\u003C\u002Fp>\n+\t\u003Cp>\n+\t\t\u003Ca class=\"button button-primary lp-btn-go-upgrade-db\"\n+\t\t\tdata-context=\"message\"\n+\t\t\thref=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-tools&tab=database&action=upgrade-db' ) ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Go to Update', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fwp-remote.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fwp-remote.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fwp-remote.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fwp-remote.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display error wp_remote.\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['check'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! is_wp_error( $data['check'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * @var WP_Error $wp_error\r\n- *\u002F\r\n-$wp_error      = $data['check'];\r\n-$message_error = $wp_error->get_error_message();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-notice notice notice-error\">\r\n-\t\u003Cp>\r\n-\t\t\u003C?php\r\n-\t\techo sprintf(\r\n-\t\t\t'%s %s. \u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t'\u003Cstrong>wp_remote_get\u003C\u002Fstrong>: ',\r\n-\t\t\t$message_error,\r\n-\t\t\tadmin_url( 'site-health.php' ),\r\n-\t\t\t__( 'Check Site Health', 'learnpress' )\r\n-\t\t);\r\n-\t\t?>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display error wp_remote.\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $data ) || ! isset( $data['check'] ) ) {\n+\treturn;\n+}\n+\n+if ( ! is_wp_error( $data['check'] ) ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * @var WP_Error $wp_error\n+ *\u002F\n+$wp_error      = $data['check'];\n+$message_error = $wp_error->get_error_message();\n+?>\n+\n+\u003Cdiv class=\"lp-admin-notice notice notice-error\">\n+\t\u003Cp>\n+\t\t\u003C?php\n+\t\techo sprintf(\n+\t\t\t'%s %s. \u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t'\u003Cstrong>wp_remote_get\u003C\u002Fstrong>: ',\n+\t\t\t$message_error,\n+\t\t\tadmin_url( 'site-health.php' ),\n+\t\t\t__( 'Check Site Health', 'learnpress' )\n+\t\t);\n+\t\t?>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fadmin-notices.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for display a notice in admin\r\n- *\r\n- * @since 4.1.7.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-wp_enqueue_script( 'lp-admin-notices' );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-notices notice\">\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for display a notice in admin\n+ *\n+ * @since 4.1.7.3.2\n+ * @version 1.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+wp_enqueue_script( 'lp-admin-notices' );\n+?>\n+\n+\u003Cdiv class=\"lp-admin-notices notice\">\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,86 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying extra info in backend user profile.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FViews\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || die;\r\n-\r\n-\u002F**\r\n- * @var WP_User $user\r\n- *\u002F\r\n-\r\n-if ( empty( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$extra_profile_fields = learn_press_social_profiles();\r\n-$extra_profile        = learn_press_get_user_extra_profile_info( $user->ID );\r\n-\r\n-$custom_profile = lp_get_user_custom_register_fields( $user->ID );\r\n-$user_model     = new UserModel( $user );\r\n-$lp_message     = LP_Request::get_param( 'lp-message' );\r\n-?>\r\n-\r\n-\u003Ch3>\u003C?php esc_html_e( 'LearnPress User Profile', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\u003Ctable class=\"form-table\">\r\n-\t\u003Ctbody>\r\n-\t\u003C?php\r\n-\tdo_action( 'learn-press\u002Fadmin\u002Fuser\u002Flayout\u002Fgeneral-info-custom', $user, $custom_profile );\r\n-\r\n-\tif ( current_user_can( 'edit_users' ) ) {\r\n-\t\t?>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth>\r\n-\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\u003C?php esc_html_e( 'LP slug user name', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003Cinput class=\"regular-text\"\r\n-\t\t\t\t\ttype=\"text\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $user_model->get_pretty_slug( false ) ); ?>\"\r\n-\t\t\t\t\tname=\"lp_user_slug\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( ! empty( $lp_message ) ) {\r\n-\t\t\t\t\tTemplate::print_message( $lp_message, 'error' );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cp class=\"description\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'%s\u003Cbr>%s',\r\n-\t\t\t\t\t\tesc_html__( 'Custom slug to replace the WP login username, use for link lp profile\u002Finstructor. Must be unique.', 'learnpress' ),\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t\u002F* translators: 1: link to permalink settings page *\u002F\r\n-\t\t\t\t\t\t\t__( 'Set for all uses not exists pretty slug \u003Ca href=\"%s\">here\u003C\u002Fa>. Then click \"Generate users slug\"', 'learnpress' ),\r\n-\t\t\t\t\t\t\tesc_url( admin_url( 'admin.php?page=learn-press-settings&tab=permalink' ) )\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tforeach ( $extra_profile_fields as $key => $label ) {\r\n-\t\t$type = apply_filters( 'learn-press\u002Fextra-profile-field-type', 'text' );\r\n-\t\t?>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth>\r\n-\t\t\t\t\u003Clabel for=\"learn-press-user-profile-\u003C?php echo esc_attr( $key ); ?>\">\r\n-\t\t\t\t\t\u003C?php echo esc_html( $label ); ?>\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003Cinput id=\"learn-press-user-profile-\u003C?php echo esc_attr( $key ); ?>\"\r\n-\t\t\t\t\tclass=\"regular-text\" type=\"\u003C?php echo esc_attr( $type ); ?>\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $extra_profile[ $key ] ?? '' ); ?>\"\r\n-\t\t\t\t\tname=\"_lp_extra_info[\u003C?php echo esc_attr( $key ); ?>]\">\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C?php } ?>\r\n-\t\u003C\u002Ftbody>\r\n-\u003C\u002Ftable>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying extra info in backend user profile.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FViews\n+ * @version 4.0.3\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || die;\n+\n+\u002F**\n+ * @var WP_User $user\n+ *\u002F\n+if ( empty( $user ) ) {\n+\treturn;\n+}\n+\n+$extra_profile_fields = learn_press_social_profiles();\n+$extra_profile        = learn_press_get_user_extra_profile_info( $user->ID );\n+\n+$custom_profile = lp_get_user_custom_register_fields( $user->ID );\n+$userModel      = new UserModel( $user->data );\n+$lp_message     = LP_Request::get_param( 'lp-message' );\n+?>\n+\n+\u003Ch3>\u003C?php esc_html_e( 'LearnPress User Profile', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\u003Ctable class=\"form-table\">\n+\t\u003Ctbody>\n+\t\u003C?php\n+\tdo_action( 'learn-press\u002Fadmin\u002Fuser\u002Flayout\u002Fgeneral-info-custom', $user, $custom_profile );\n+\n+\tif ( current_user_can( 'edit_users' ) ) {\n+\t\t?>\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth>\n+\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\u003C?php esc_html_e( 'LP slug user name', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003Cinput class=\"regular-text\"\n+\t\t\t\t\ttype=\"text\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $userModel->get_slug_link() ); ?>\"\n+\t\t\t\t\tname=\"lp_user_slug\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( ! empty( $lp_message ) ) {\n+\t\t\t\t\tTemplate::print_message( $lp_message, 'error' );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\u003Cp class=\"description\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\tesc_html__( 'Custom slug to replace the WP login username, use for link lp profile\u002Finstructor. Must be unique.', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fp>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003C?php\n+\t}\n+\n+\tforeach ( $extra_profile_fields as $key => $label ) {\n+\t\t$type = apply_filters( 'learn-press\u002Fextra-profile-field-type', 'text' );\n+\t\t?>\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth>\n+\t\t\t\t\u003Clabel for=\"learn-press-user-profile-\u003C?php echo esc_attr( $key ); ?>\">\n+\t\t\t\t\t\u003C?php echo esc_html( $label ); ?>\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003Cinput id=\"learn-press-user-profile-\u003C?php echo esc_attr( $key ); ?>\"\n+\t\t\t\t\tclass=\"regular-text\" type=\"\u003C?php echo esc_attr( $type ); ?>\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $extra_profile[ $key ] ?? '' ); ?>\"\n+\t\t\t\t\tname=\"_lp_extra_info[\u003C?php echo esc_attr( $key ); ?>]\">\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\u003C?php } ?>\n+\t\u003C\u002Ftbody>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fadded-items-preview.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fadded-items-preview.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fadded-items-preview.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fadded-items-preview.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template added items preview.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-added-items-preview\">\r\n-\t\u003Cdiv class=\"lp-added-items-preview\" :class=\"{show:show}\">\r\n-\t\t\u003Cul class=\"list-added-items\">\r\n-\t\t\t\u003Ctemplate v-for=\"(item, index) in addedItems\">\r\n-\t\t\t\t\u003Cli @click=\"removeItem(item)\" class=\"section-item removable\" :class=\"item.type\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" checked>\r\n-\t\t\t\t\t\u003Cspan class=\"title\">{{item.title}}\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery(function() {\r\n-\t\t(function($store) {\r\n-\r\n-\t\t\t$Vue.component('lp-added-items-preview', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-added-items-preview',\r\n-\t\t\t\tprops: {\r\n-\t\t\t\t\tshow: true\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tremoveItem: function (item) {\r\n-\t\t\t\t\t\t$store.dispatch('ci\u002FremoveItem', item);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\taddedItems: function () {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002FaddedItems'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})(LP_Curriculum_Store);\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template added items preview.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-added-items-preview\">\n+\t\u003Cdiv class=\"lp-added-items-preview\" :class=\"{show:show}\">\n+\t\t\u003Cul class=\"list-added-items\">\n+\t\t\t\u003Ctemplate v-for=\"(item, index) in addedItems\">\n+\t\t\t\t\u003Cli @click=\"removeItem(item)\" class=\"section-item removable\" :class=\"item.type\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" checked>\n+\t\t\t\t\t\u003Cspan class=\"title\">{{item.title}}\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C\u002Ftemplate>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery(function() {\n+\t\t(function($store) {\n+\n+\t\t\t$Vue.component('lp-added-items-preview', {\n+\t\t\t\ttemplate: '#tmpl-lp-added-items-preview',\n+\t\t\t\tprops: {\n+\t\t\t\t\tshow: true\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tremoveItem: function (item) {\n+\t\t\t\t\t\t$store.dispatch('ci\u002FremoveItem', item);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\taddedItems: function () {\n+\t\t\t\t\t\treturn $store.getters['ci\u002FaddedItems'];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})(LP_Curriculum_Store);\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fcurriculum.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fcurriculum.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fcurriculum.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fcurriculum.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,89 +1,89 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template curriculum course.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'course\u002Fsections' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-curriculum\">\r\n-\t\u003Cdiv class=\"lp-course-curriculum\">\r\n-\t\t\u003Cdiv class=\"heading\">\r\n-\t\t\t\u003Ch4>\u003C?php esc_html_e( 'Details', 'learnpress' ); ?> \u003Cspan :class=\"['status', status]\">\u003C\u002Fspan>\u003C\u002Fh4>\r\n-\t\t\t\u003Cdiv class=\"section-item-counts\">\u003Cspan>{{countAllItems()}}\u003C\u002Fspan>\u003C\u002Fdiv>\r\n-\t\t\t\u003Cspan class=\"collapse-sections\" @click=\"toggle\" :class=\"isOpen ? 'open' : 'close'\">\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Clp-list-sections>\u003C\u002Flp-list-sections>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\r\n-\twindow.$Vue = window.$Vue = Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-curriculum', {\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tindexOfSection: 0,\r\n-\t\t\t\t\t\tsections_items: [],\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\ttemplate: '#tmpl-lp-course-curriculum',\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\tstatus: function() {\r\n-\t\t\t\t\t\treturn $store.getters.status;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tisOpen: function() {\r\n-\t\t\t\t\t\treturn ! $store.getters['ss\u002FisHiddenAllSections'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\ttoggle: function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FtoggleAllSections' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcountAllItems: function() {\r\n-\t\t\t\t\t\tvar count = 0,\r\n-\t\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].item_labels;\r\n-\r\n-\t\t\t\t\t\t$.each( $store.getters['ss\u002Fsections'], function ( i, section ) {\r\n-\t\t\t\t\t\t\tcount += section.items.length;\r\n-\t\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t\treturn count + ' ' + (count \u003C= 1 ? labels.singular : labels.plural);\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tadd: function ( indexOfSection ){\r\n-\t\t\t\t\t\tsetTimeout( () => {\r\n-\t\t\t\t\t\t\tconst dataSet = this.sections_items[ indexOfSection ];\r\n-\t\t\t\t\t\t\tif ( 'undefined' !== typeof dataSet ) {\r\n-\t\t\t\t\t\t\t\t$store.state.ss.sections.push( dataSet );\r\n-\t\t\t\t\t\t\t\tthis.indexOfSection++;\r\n-\t\t\t\t\t\t\t\tif ( this.sections_items.length > this.indexOfSection ) {\r\n-\t\t\t\t\t\t\t\t\tthis.add( this.indexOfSection );\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}, 100 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tbeforeMount: function() {\r\n-\t\t\t\t\tthis.sections_items = lpAdminCourseEditorSettings.sections.sections || [];\r\n-\t\t\t\t\tif ( this.sections_items.length > 0 ) {\r\n-\t\t\t\t\t\t$store.state.ss.sections = [ this.sections_items[0] ];\r\n-\t\t\t\t\t\tthis.indexOfSection++;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmounted: function() {\r\n-\t\t\t\t\tthis.firstLoad = false;\r\n-\t\t\t\t\tif ( this.sections_items.length > 1 ) {\r\n-\t\t\t\t\t\tthis.add( this.indexOfSection );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t});\r\n-\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template curriculum course.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'course\u002Fsections' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-curriculum\">\n+\t\u003Cdiv class=\"lp-course-curriculum\">\n+\t\t\u003Cdiv class=\"heading\">\n+\t\t\t\u003Ch4>\u003C?php esc_html_e( 'Details', 'learnpress' ); ?> \u003Cspan :class=\"['status', status]\">\u003C\u002Fspan>\u003C\u002Fh4>\n+\t\t\t\u003Cdiv class=\"section-item-counts\">\u003Cspan>{{countAllItems()}}\u003C\u002Fspan>\u003C\u002Fdiv>\n+\t\t\t\u003Cspan class=\"collapse-sections\" @click=\"toggle\" :class=\"isOpen ? 'open' : 'close'\">\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Clp-list-sections>\u003C\u002Flp-list-sections>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\n+\twindow.$Vue = window.$Vue = Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-curriculum', {\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tindexOfSection: 0,\n+\t\t\t\t\t\tsections_items: [],\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\ttemplate: '#tmpl-lp-course-curriculum',\n+\t\t\t\tcomputed: {\n+\t\t\t\t\tstatus: function() {\n+\t\t\t\t\t\treturn $store.getters.status;\n+\t\t\t\t\t},\n+\t\t\t\t\tisOpen: function() {\n+\t\t\t\t\t\treturn ! $store.getters['ss\u002FisHiddenAllSections'];\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\ttoggle: function() {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FtoggleAllSections' );\n+\t\t\t\t\t},\n+\t\t\t\t\tcountAllItems: function() {\n+\t\t\t\t\t\tvar count = 0,\n+\t\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].item_labels;\n+\n+\t\t\t\t\t\t$.each( $store.getters['ss\u002Fsections'], function ( i, section ) {\n+\t\t\t\t\t\t\tcount += section.items.length;\n+\t\t\t\t\t\t});\n+\n+\t\t\t\t\t\treturn count + ' ' + (count \u003C= 1 ? labels.singular : labels.plural);\n+\t\t\t\t\t},\n+\t\t\t\t\tadd: function ( indexOfSection ){\n+\t\t\t\t\t\tsetTimeout( () => {\n+\t\t\t\t\t\t\tconst dataSet = this.sections_items[ indexOfSection ];\n+\t\t\t\t\t\t\tif ( 'undefined' !== typeof dataSet ) {\n+\t\t\t\t\t\t\t\t$store.state.ss.sections.push( dataSet );\n+\t\t\t\t\t\t\t\tthis.indexOfSection++;\n+\t\t\t\t\t\t\t\tif ( this.sections_items.length > this.indexOfSection ) {\n+\t\t\t\t\t\t\t\t\tthis.add( this.indexOfSection );\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}, 100 );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tbeforeMount: function() {\n+\t\t\t\t\tthis.sections_items = lpAdminCourseEditorSettings.sections.sections || [];\n+\t\t\t\t\tif ( this.sections_items.length > 0 ) {\n+\t\t\t\t\t\t$store.state.ss.sections = [ this.sections_items[0] ];\n+\t\t\t\t\t\tthis.indexOfSection++;\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmounted: function() {\n+\t\t\t\t\tthis.firstLoad = false;\n+\t\t\t\t\tif ( this.sections_items.length > 1 ) {\n+\t\t\t\t\t\tthis.add( this.indexOfSection );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t});\n+\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Feditor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Feditor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Feditor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Feditor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\u002F**\r\n- * Course editor template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'course\u002Fcurriculum' );\r\n-learn_press_admin_view( 'course\u002Fmodal-choose-items' );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"admin-editor-lp_course\">\r\n-\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-editor\">\r\n-\t\u003Cdiv id=\"admin-editor-lp_course\" class='lp-admin-editor'>\r\n-\t\t\u003Cdiv v-if=\"heartbeat\">\r\n-\t\t\t\u003Cform @submit.prevent=\"\">\r\n-\t\t\t\t\u003Clp-curriculum>\u003C\u002Flp-curriculum>\r\n-\t\t\t\u003C\u002Fform>\r\n-\r\n-\t\t\t\u003Clp-curriculum-choose-items>\u003C\u002Flp-curriculum-choose-items>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv v-else>\r\n-\t\t\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\r\n-\t\t\t\t\u003Cdiv class=\"notify-reload\">\u003C?php esc_html_e( 'Something went wrong! Please reload to continue editing the curriculum.', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-course-editor', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-course-editor',\r\n-\t\t\t\tcreated: function() {\r\n-\t\t\t\t\t\u002F*setInterval( function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'heartbeat' );\r\n-\t\t\t\t\t}, 60 * 1000);*\u002F\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\theartbeat: function() {\r\n-\t\t\t\t\t\treturn $store.getters['heartbeat'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})(LP_Curriculum_Store);\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Course editor template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'course\u002Fcurriculum' );\n+learn_press_admin_view( 'course\u002Fmodal-choose-items' );\n+?>\n+\n+\u003Cdiv id=\"admin-editor-lp_course\">\n+\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-editor\">\n+\t\u003Cdiv id=\"admin-editor-lp_course\" class='lp-admin-editor'>\n+\t\t\u003Cdiv v-if=\"heartbeat\">\n+\t\t\t\u003Cform @submit.prevent=\"\">\n+\t\t\t\t\u003Clp-curriculum>\u003C\u002Flp-curriculum>\n+\t\t\t\u003C\u002Fform>\n+\n+\t\t\t\u003Clp-curriculum-choose-items>\u003C\u002Flp-curriculum-choose-items>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv v-else>\n+\t\t\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\n+\t\t\t\t\u003Cdiv class=\"notify-reload\">\u003C?php esc_html_e( 'Something went wrong! Please reload to continue editing the curriculum.', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-course-editor', {\n+\t\t\t\ttemplate: '#tmpl-lp-course-editor',\n+\t\t\t\tcreated: function() {\n+\t\t\t\t\t\u002F*setInterval( function() {\n+\t\t\t\t\t\t$store.dispatch( 'heartbeat' );\n+\t\t\t\t\t}, 60 * 1000);*\u002F\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\theartbeat: function() {\n+\t\t\t\t\t\treturn $store.getters['heartbeat'];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})(LP_Curriculum_Store);\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,262 +1,262 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template choose items.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'course\u002Fadded-items-preview' );\r\n-learn_press_admin_view( 'course\u002Fpagination' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-choose-item\">\r\n-\t\u003Cli class=\"section-item\" :class=\"[item.type, item.added ? 'added' : 'addable']\" @click=\"add\">\r\n-\t\t\u003Cinput type=\"checkbox\" :checked=\"item.added === true\">\r\n-\t\t\u003Cspan class=\"title\">{{item.title}} \u003Cstrong>(#{{item.id}})\u003C\u002Fstrong>\u003C\u002Fspan>\r\n-\t\u003C\u002Fli>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-course-choose-item', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-course-choose-item',\r\n-\t\t\t\tprops: ['item', 'added'],\r\n-\t\t\t\twatch: {\r\n-\t\t\t\t\tadded: function() {\r\n-\t\t\t\t\t\tthis.$forceUpdate();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tadd: function() {\r\n-\t\t\t\t\t\tif ( this.item.added ) {\r\n-\t\t\t\t\t\t\treturn this.remove();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.$emit( 'add', this.item );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremove: function() {\r\n-\t\t\t\t\t\tthis.$emit( 'remove', this.item );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})(LP_Curriculum_Store);\r\n-\t});\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-choose-items\">\r\n-\t\u003Cdiv id=\"lp-modal-choose-items\" :class=\"{show:show, loading: loading}\">\r\n-\t\t\u003Cdiv class=\"lp-choose-items\" :class=\"{'show-preview': showPreview}\">\r\n-\t\t\t\u003Cdiv class=\"header\">\r\n-\t\t\t\t\u003Cdiv class=\"preview-title\">\r\n-\t\t\t\t\t\u003Cspan>\u003C?php esc_html_e( 'Selected items', 'learnpress' ); ?> ({{addedItems.length}})\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Cul class=\"tabs\">\r\n-\t\t\t\t\t\u003Ctemplate v-for=\"(type, key) in types\">\r\n-\t\t\t\t\t\t\u003Cli :data-type=\"key\" :class=\"['tab', key === tab ? 'active': 'inactive']\" @click.prevent=\"changeTab(key)\">\r\n-\t\t\t\t\t\t\t\u003Ca href=\"#\" @click.prevent=\"\">{{type}}\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\u003Ca class=\"close\" @click=\"close\">\r\n-\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\" title=\"\u003C?php esc_attr_e( 'Close', 'learnpress' ); ?>\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"main\">\r\n-\t\t\t\t\u003Cform class=\"search\" @submit.prevent=\"\">\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"modal-search-input\" placeholder=\"\u003C?php esc_attr_e( 'Type here to search for an item', 'learnpress' ); ?>\" title=\"search\" @input=\"onChangeQuery\" v-model=\"query\">\r\n-\t\t\t\t\u003C\u002Fform>\r\n-\r\n-\t\t\t\t\u003Cul class=\"list-items\">\r\n-\t\t\t\t\t\u003Ctemplate v-if=\"!items.length\">\r\n-\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'No item found.', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Ftemplate>\r\n-\r\n-\t\t\t\t\t\u003Ctemplate v-for=\"item in items\">\r\n-\t\t\t\t\t\t\u003Clp-course-choose-item @add=\"addItem\" @remove=\"removeItem\" :added=\"item.added\" :item=\"item\">\u003C\u002Flp-course-choose-item>\r\n-\t\t\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\u003Clp-pagination :total=\"totalPage\" @update=\"changePage\">\u003C\u002Flp-pagination>\r\n-\t\t\t\t\u003Clp-added-items-preview :show=\"showPreview\">\u003C\u002Flp-added-items-preview>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv class=\"footer\">\r\n-\t\t\t\t\u003Cdiv class=\"cart\">\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary checkout\"\r\n-\t\t\t\t\t\t\t@click=\"checkout\" :disabled=\"!addedItems.length || adding\">\r\n-\t\t\t\t\t\t\u003Cspan v-if=\"!adding\">\u003C?php esc_html_e( 'Add', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cspan v-if=\"adding\">\u003C?php esc_html_e( 'Adding', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary edit-selected\"\r\n-\t\t\t\t\t\t\t:disabled=\"adding || (!addedItems.length && !showPreview)\"\r\n-\t\t\t\t\t\t\t@click.prevent=\"showPreview = !showPreview\">\r\n-\t\t\t\t\t\t{{textButtonEdit}}\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-curriculum-choose-items', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-course-choose-items',\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tquery: '',\r\n-\t\t\t\t\t\tpage: 1,\r\n-\t\t\t\t\t\ttab: 'lp_lesson',\r\n-\t\t\t\t\t\tdelayTimeout: null,\r\n-\t\t\t\t\t\tshowPreview: false,\r\n-\t\t\t\t\t\tadding: false\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tmounted: function() {\r\n-\t\t\t\t},\r\n-\t\t\t\tcreated: function() {\r\n-\t\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t\t$store.subscribe( function( mutation ) {\r\n-\t\t\t\t\t\tif ( ! mutation || mutation.type !== 'ci\u002FTOGGLE' ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( vm.show ) {\r\n-\t\t\t\t\t\t\tvm.init();\r\n-\r\n-\t\t\t\t\t\t\t$( 'body' ).addClass( 'lp-modal-choose-items-open' );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$( 'body' ).removeClass( 'lp-modal-choose-items-open' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\tstatus: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002Fstatus'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tloading: function() {\r\n-\t\t\t\t\t\treturn this.status === 'loading';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttextButtonEdit: function() {\r\n-\t\t\t\t\t\tif ( this.showPreview ) {\r\n-\t\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].back;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].selected_items + ' (' + this.addedItems.length + ')';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\taddedItems: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002FaddedItems'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tpagination: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002Fpagination'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttotalPage: function() {\r\n-\t\t\t\t\t\tif ( this.pagination ) {\r\n-\t\t\t\t\t\t\treturn parseInt(this.pagination.total) || 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\titems: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002Fitems'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tshow: function() {\r\n-\t\t\t\t\t\tvar isShow = $store.getters['ci\u002FisOpen'];\r\n-\r\n-\t\t\t\t\t\tif ( isShow ) {\r\n-\t\t\t\t\t\t\tthis.focusInput();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn isShow;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttypes: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002Ftypes'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tfirstType: function() {\r\n-\t\t\t\t\t\tfor ( var type in $store.getters['ci\u002Ftypes'] ) {\r\n-\t\t\t\t\t\t\treturn type;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tinit: function() {\r\n-\t\t\t\t\t\tthis.query = '';\r\n-\t\t\t\t\t\tthis.page = 1;\r\n-\t\t\t\t\t\tthis.tab = this.firstType;\r\n-\t\t\t\t\t\tthis.showPreview = false;\r\n-\t\t\t\t\t\tthis.adding = false;\r\n-\t\t\t\t\t\tthis.makeSearch();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tfocusInput: function() {\r\n-\t\t\t\t\t\tvar $input = $( this.$el ).find( '.main .search input[type=\"text\"]' ).focus();\r\n-\t\t\t\t\t\tsetTimeout( function () {\r\n-\t\t\t\t\t\t\t$input.focus();\r\n-\t\t\t\t\t\t}, 300 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcheckout: function() {\r\n-\t\t\t\t\t\tthis.adding = true;\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002FaddItemsToSection' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tchangePage: function( page ) {\r\n-\t\t\t\t\t\tif ( page === this.page ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.page = page;\r\n-\t\t\t\t\t\tthis.makeSearch();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\taddItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002FaddItem', item );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremoveItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002FremoveItem', item );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tclose: function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002Ftoggle' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tchangeTab: function( key ) {\r\n-\t\t\t\t\t\tif ( key === this.tab ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.tab = key;\r\n-\t\t\t\t\t\tthis.page = 1;\r\n-\t\t\t\t\t\tthis.makeSearch();\r\n-\t\t\t\t\t\tthis.focusInput();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tonChangeQuery: function() {\r\n-\t\t\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t\t\tif ( this.delayTimeout ) {\r\n-\t\t\t\t\t\t\tclearTimeout( this.delayTimeout );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.delayTimeout = setTimeout( function() {\r\n-\t\t\t\t\t\t\tvm.page = 1;\r\n-\t\t\t\t\t\t\tvm.makeSearch();\r\n-\t\t\t\t\t\t}, 500 );\r\n-\t\t\t\t\t},\r\n-\r\n-\t\t\t\t\tmakeSearch: function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002FsearchItems', {\r\n-\t\t\t\t\t\t\tquery: this.query,\r\n-\t\t\t\t\t\t\tpage: this.page,\r\n-\t\t\t\t\t\t\ttype: this.tab\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template choose items.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'course\u002Fadded-items-preview' );\n+learn_press_admin_view( 'course\u002Fpagination' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-choose-item\">\n+\t\u003Cli class=\"section-item\" :class=\"[item.type, item.added ? 'added' : 'addable']\" @click=\"add\">\n+\t\t\u003Cinput type=\"checkbox\" :checked=\"item.added === true\">\n+\t\t\u003Cspan class=\"title\">{{item.title}} \u003Cstrong>(#{{item.id}})\u003C\u002Fstrong>\u003C\u002Fspan>\n+\t\u003C\u002Fli>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-course-choose-item', {\n+\t\t\t\ttemplate: '#tmpl-lp-course-choose-item',\n+\t\t\t\tprops: ['item', 'added'],\n+\t\t\t\twatch: {\n+\t\t\t\t\tadded: function() {\n+\t\t\t\t\t\tthis.$forceUpdate();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tadd: function() {\n+\t\t\t\t\t\tif ( this.item.added ) {\n+\t\t\t\t\t\t\treturn this.remove();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.$emit( 'add', this.item );\n+\t\t\t\t\t},\n+\t\t\t\t\tremove: function() {\n+\t\t\t\t\t\tthis.$emit( 'remove', this.item );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})(LP_Curriculum_Store);\n+\t});\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-course-choose-items\">\n+\t\u003Cdiv id=\"lp-modal-choose-items\" :class=\"{show:show, loading: loading}\">\n+\t\t\u003Cdiv class=\"lp-choose-items\" :class=\"{'show-preview': showPreview}\">\n+\t\t\t\u003Cdiv class=\"header\">\n+\t\t\t\t\u003Cdiv class=\"preview-title\">\n+\t\t\t\t\t\u003Cspan>\u003C?php esc_html_e( 'Selected items', 'learnpress' ); ?> ({{addedItems.length}})\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Cul class=\"tabs\">\n+\t\t\t\t\t\u003Ctemplate v-for=\"(type, key) in types\">\n+\t\t\t\t\t\t\u003Cli :data-type=\"key\" :class=\"['tab', key === tab ? 'active': 'inactive']\" @click.prevent=\"changeTab(key)\">\n+\t\t\t\t\t\t\t\u003Ca href=\"#\" @click.prevent=\"\">{{type}}\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ftemplate>\n+\t\t\t\t\u003C\u002Ful>\n+\n+\t\t\t\t\u003Ca class=\"close\" @click=\"close\">\n+\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\" title=\"\u003C?php esc_attr_e( 'Close', 'learnpress' ); ?>\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"main\">\n+\t\t\t\t\u003Cform class=\"search\" @submit.prevent=\"\">\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"modal-search-input\" placeholder=\"\u003C?php esc_attr_e( 'Type here to search for an item', 'learnpress' ); ?>\" title=\"search\" @input=\"onChangeQuery\" v-model=\"query\">\n+\t\t\t\t\u003C\u002Fform>\n+\n+\t\t\t\t\u003Cul class=\"list-items\">\n+\t\t\t\t\t\u003Ctemplate v-if=\"!items.length\">\n+\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'No item found.', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Ftemplate>\n+\n+\t\t\t\t\t\u003Ctemplate v-for=\"item in items\">\n+\t\t\t\t\t\t\u003Clp-course-choose-item @add=\"addItem\" @remove=\"removeItem\" :added=\"item.added\" :item=\"item\">\u003C\u002Flp-course-choose-item>\n+\t\t\t\t\t\u003C\u002Ftemplate>\n+\t\t\t\t\u003C\u002Ful>\n+\n+\t\t\t\t\u003Clp-pagination :total=\"totalPage\" @update=\"changePage\">\u003C\u002Flp-pagination>\n+\t\t\t\t\u003Clp-added-items-preview :show=\"showPreview\">\u003C\u002Flp-added-items-preview>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv class=\"footer\">\n+\t\t\t\t\u003Cdiv class=\"cart\">\n+\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary checkout\"\n+\t\t\t\t\t\t\t@click=\"checkout\" :disabled=\"!addedItems.length || adding\">\n+\t\t\t\t\t\t\u003Cspan v-if=\"!adding\">\u003C?php esc_html_e( 'Add', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cspan v-if=\"adding\">\u003C?php esc_html_e( 'Adding', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\n+\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary edit-selected\"\n+\t\t\t\t\t\t\t:disabled=\"adding || (!addedItems.length && !showPreview)\"\n+\t\t\t\t\t\t\t@click.prevent=\"showPreview = !showPreview\">\n+\t\t\t\t\t\t{{textButtonEdit}}\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-curriculum-choose-items', {\n+\t\t\t\ttemplate: '#tmpl-lp-course-choose-items',\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tquery: '',\n+\t\t\t\t\t\tpage: 1,\n+\t\t\t\t\t\ttab: 'lp_lesson',\n+\t\t\t\t\t\tdelayTimeout: null,\n+\t\t\t\t\t\tshowPreview: false,\n+\t\t\t\t\t\tadding: false\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tmounted: function() {\n+\t\t\t\t},\n+\t\t\t\tcreated: function() {\n+\t\t\t\t\tvar vm = this;\n+\n+\t\t\t\t\t$store.subscribe( function( mutation ) {\n+\t\t\t\t\t\tif ( ! mutation || mutation.type !== 'ci\u002FTOGGLE' ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( vm.show ) {\n+\t\t\t\t\t\t\tvm.init();\n+\n+\t\t\t\t\t\t\t$( 'body' ).addClass( 'lp-modal-choose-items-open' );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$( 'body' ).removeClass( 'lp-modal-choose-items-open' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\tstatus: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002Fstatus'];\n+\t\t\t\t\t},\n+\t\t\t\t\tloading: function() {\n+\t\t\t\t\t\treturn this.status === 'loading';\n+\t\t\t\t\t},\n+\t\t\t\t\ttextButtonEdit: function() {\n+\t\t\t\t\t\tif ( this.showPreview ) {\n+\t\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].back;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].selected_items + ' (' + this.addedItems.length + ')';\n+\t\t\t\t\t},\n+\t\t\t\t\taddedItems: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002FaddedItems'];\n+\t\t\t\t\t},\n+\t\t\t\t\tpagination: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002Fpagination'];\n+\t\t\t\t\t},\n+\t\t\t\t\ttotalPage: function() {\n+\t\t\t\t\t\tif ( this.pagination ) {\n+\t\t\t\t\t\t\treturn parseInt(this.pagination.total) || 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\titems: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002Fitems'];\n+\t\t\t\t\t},\n+\t\t\t\t\tshow: function() {\n+\t\t\t\t\t\tvar isShow = $store.getters['ci\u002FisOpen'];\n+\n+\t\t\t\t\t\tif ( isShow ) {\n+\t\t\t\t\t\t\tthis.focusInput();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn isShow;\n+\t\t\t\t\t},\n+\t\t\t\t\ttypes: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002Ftypes'];\n+\t\t\t\t\t},\n+\t\t\t\t\tfirstType: function() {\n+\t\t\t\t\t\tfor ( var type in $store.getters['ci\u002Ftypes'] ) {\n+\t\t\t\t\t\t\treturn type;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tinit: function() {\n+\t\t\t\t\t\tthis.query = '';\n+\t\t\t\t\t\tthis.page = 1;\n+\t\t\t\t\t\tthis.tab = this.firstType;\n+\t\t\t\t\t\tthis.showPreview = false;\n+\t\t\t\t\t\tthis.adding = false;\n+\t\t\t\t\t\tthis.makeSearch();\n+\t\t\t\t\t},\n+\t\t\t\t\tfocusInput: function() {\n+\t\t\t\t\t\tvar $input = $( this.$el ).find( '.main .search input[type=\"text\"]' ).focus();\n+\t\t\t\t\t\tsetTimeout( function () {\n+\t\t\t\t\t\t\t$input.focus();\n+\t\t\t\t\t\t}, 300 );\n+\t\t\t\t\t},\n+\t\t\t\t\tcheckout: function() {\n+\t\t\t\t\t\tthis.adding = true;\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002FaddItemsToSection' );\n+\t\t\t\t\t},\n+\t\t\t\t\tchangePage: function( page ) {\n+\t\t\t\t\t\tif ( page === this.page ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.page = page;\n+\t\t\t\t\t\tthis.makeSearch();\n+\t\t\t\t\t},\n+\t\t\t\t\taddItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002FaddItem', item );\n+\t\t\t\t\t},\n+\t\t\t\t\tremoveItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002FremoveItem', item );\n+\t\t\t\t\t},\n+\t\t\t\t\tclose: function() {\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002Ftoggle' );\n+\t\t\t\t\t},\n+\t\t\t\t\tchangeTab: function( key ) {\n+\t\t\t\t\t\tif ( key === this.tab ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.tab = key;\n+\t\t\t\t\t\tthis.page = 1;\n+\t\t\t\t\t\tthis.makeSearch();\n+\t\t\t\t\t\tthis.focusInput();\n+\t\t\t\t\t},\n+\t\t\t\t\tonChangeQuery: function() {\n+\t\t\t\t\t\tvar vm = this;\n+\n+\t\t\t\t\t\tif ( this.delayTimeout ) {\n+\t\t\t\t\t\t\tclearTimeout( this.delayTimeout );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.delayTimeout = setTimeout( function() {\n+\t\t\t\t\t\t\tvm.page = 1;\n+\t\t\t\t\t\t\tvm.makeSearch();\n+\t\t\t\t\t\t}, 500 );\n+\t\t\t\t\t},\n+\n+\t\t\t\t\tmakeSearch: function() {\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002FsearchItems', {\n+\t\t\t\t\t\t\tquery: this.query,\n+\t\t\t\t\t\t\tpage: this.page,\n+\t\t\t\t\t\t\ttype: this.tab\n+\t\t\t\t\t\t});\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,134 +1,134 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Template new item section.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-new-section-item\">\r\n-\t\u003Cdiv class=\"new-section-item section-item\" @keyup.up=\"up\" @keyup.down=\"down\" :class=\"{choosing: choosingType}\">\r\n-\t\t\u003Cdiv class=\"drag lp-sortable-handle\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"types\" @mouseleave=\"mouseLeave\" @mouseover=\"mouseOver\">\r\n-\t\t\t\u003Ctemplate v-for=\"(_type, key) in types\">\r\n-\t\t\t\t\u003Clabel class=\"type\" :title=\"_type\" :class=\"[key, {current: (type==key)}]\">\r\n-\t\t\t\t\t\u003Cinput v-model=\"type\" type=\"radio\" name=\"lp-section-item-type\" :value=\"key\">\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"title\">\r\n-\t\t\t\u003Cinput type=\"text\" :placeholder=\"placeholderInput\" @keyup.enter=\"createItem($event)\" @blur=\"createItem($event)\" v-model=\"title\">\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-new-section-item', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-new-section-item',\r\n-\t\t\t\tprops: [],\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\ttype: '',\r\n-\t\t\t\t\t\ttitle: '',\r\n-\t\t\t\t\t\tchoosingType: false\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tcreated: function() {\r\n-\t\t\t\t\tthis.type = this.firstType;\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tup: function( e ) {\r\n-\t\t\t\t\t\tthis.changeType(true);\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tdown: function( e ) {\r\n-\t\t\t\t\t\tthis.changeType(false);\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tmouseOver: function() {\r\n-\t\t\t\t\t\tthis.choosingType = true;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tmouseLeave: function() {\r\n-\t\t\t\t\t\tthis.choosingType = false;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcreate: function() {\r\n-\t\t\t\t\t\tif (!this.title) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tthis.$emit( 'create', {\r\n-\t\t\t\t\t\t\tid: LP.uniqueId(),\r\n-\t\t\t\t\t\t\ttype: this.type,\r\n-\t\t\t\t\t\t\ttitle: this.title\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t\tthis.title = '';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcreateItem: function( e ) {\r\n-\t\t\t\t\t\tif ( ! this.title ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( e.key === 'Enter' ) {\r\n-\t\t\t\t\t\t\treturn this.create();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tsetTimeout(this.create, 300);\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tchangeType: function (next) {\r\n-\t\t\t\t\t\tif ( this.title ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tvar types = this.types;\r\n-\t\t\t\t\t\tvar current = this.type;\r\n-\t\t\t\t\t\tvar currentIndex = false;\r\n-\r\n-\t\t\t\t\t\tvar keys = [];\r\n-\t\t\t\t\t\tvar i = 0;\r\n-\t\t\t\t\t\tfor ( var type in types ) {\r\n-\t\t\t\t\t\t\tif ( type === current ) {\r\n-\t\t\t\t\t\t\t\tcurrentIndex = i;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tkeys.push( type );\r\n-\t\t\t\t\t\t\ti++;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tvar nextType = keys[currentIndex + 1] || keys[0];\r\n-\t\t\t\t\t\tvar previousType = keys[currentIndex - 1] || keys[keys.length - 1];\r\n-\r\n-\t\t\t\t\t\tif ( next ) {\r\n-\t\t\t\t\t\t\tthis.type = nextType;\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis.type = previousType;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\tplaceholderInput: function( e ) {\r\n-\t\t\t\t\t\tvar i18n = $store.getters['i18n\u002Fall'];\r\n-\t\t\t\t\t\tvar type = this.types[this.type] || '';\r\n-\r\n-\t\t\t\t\t\t$( this.$el ).find( '.title input' ).focus();\r\n-\t\t\t\t\t\treturn i18n.new_section_item + ' ' + type.toLowerCase();\r\n-\t\t\t\t\t},\r\n-\r\n-\t\t\t\t\ttypes: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ci\u002Ftypes'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tfirstType: function() {\r\n-\t\t\t\t\t\tfor ( var type in $store.getters['ci\u002Ftypes'] ) {\r\n-\t\t\t\t\t\t\treturn type;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\n+\u002F**\n+ * Template new item section.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-new-section-item\">\n+\t\u003Cdiv class=\"new-section-item section-item\" @keyup.up=\"up\" @keyup.down=\"down\" :class=\"{choosing: choosingType}\">\n+\t\t\u003Cdiv class=\"drag lp-sortable-handle\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"types\" @mouseleave=\"mouseLeave\" @mouseover=\"mouseOver\">\n+\t\t\t\u003Ctemplate v-for=\"(_type, key) in types\">\n+\t\t\t\t\u003Clabel class=\"type\" :title=\"_type\" :class=\"[key, {current: (type==key)}]\">\n+\t\t\t\t\t\u003Cinput v-model=\"type\" type=\"radio\" name=\"lp-section-item-type\" :value=\"key\">\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003C\u002Ftemplate>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"title\">\n+\t\t\t\u003Cinput type=\"text\" :placeholder=\"placeholderInput\" @keyup.enter=\"createItem($event)\" @blur=\"createItem($event)\" v-model=\"title\">\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-new-section-item', {\n+\t\t\t\ttemplate: '#tmpl-lp-new-section-item',\n+\t\t\t\tprops: [],\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\ttype: '',\n+\t\t\t\t\t\ttitle: '',\n+\t\t\t\t\t\tchoosingType: false\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tcreated: function() {\n+\t\t\t\t\tthis.type = this.firstType;\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tup: function( e ) {\n+\t\t\t\t\t\tthis.changeType(true);\n+\t\t\t\t\t},\n+\t\t\t\t\tdown: function( e ) {\n+\t\t\t\t\t\tthis.changeType(false);\n+\t\t\t\t\t},\n+\t\t\t\t\tmouseOver: function() {\n+\t\t\t\t\t\tthis.choosingType = true;\n+\t\t\t\t\t},\n+\t\t\t\t\tmouseLeave: function() {\n+\t\t\t\t\t\tthis.choosingType = false;\n+\t\t\t\t\t},\n+\t\t\t\t\tcreate: function() {\n+\t\t\t\t\t\tif (!this.title) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tthis.$emit( 'create', {\n+\t\t\t\t\t\t\tid: LP.uniqueId(),\n+\t\t\t\t\t\t\ttype: this.type,\n+\t\t\t\t\t\t\ttitle: this.title\n+\t\t\t\t\t\t});\n+\t\t\t\t\t\tthis.title = '';\n+\t\t\t\t\t},\n+\t\t\t\t\tcreateItem: function( e ) {\n+\t\t\t\t\t\tif ( ! this.title ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( e.key === 'Enter' ) {\n+\t\t\t\t\t\t\treturn this.create();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tsetTimeout(this.create, 300);\n+\t\t\t\t\t},\n+\t\t\t\t\tchangeType: function (next) {\n+\t\t\t\t\t\tif ( this.title ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tvar types = this.types;\n+\t\t\t\t\t\tvar current = this.type;\n+\t\t\t\t\t\tvar currentIndex = false;\n+\n+\t\t\t\t\t\tvar keys = [];\n+\t\t\t\t\t\tvar i = 0;\n+\t\t\t\t\t\tfor ( var type in types ) {\n+\t\t\t\t\t\t\tif ( type === current ) {\n+\t\t\t\t\t\t\t\tcurrentIndex = i;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tkeys.push( type );\n+\t\t\t\t\t\t\ti++;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tvar nextType = keys[currentIndex + 1] || keys[0];\n+\t\t\t\t\t\tvar previousType = keys[currentIndex - 1] || keys[keys.length - 1];\n+\n+\t\t\t\t\t\tif ( next ) {\n+\t\t\t\t\t\t\tthis.type = nextType;\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis.type = previousType;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\tplaceholderInput: function( e ) {\n+\t\t\t\t\t\tvar i18n = $store.getters['i18n\u002Fall'];\n+\t\t\t\t\t\tvar type = this.types[this.type] || '';\n+\n+\t\t\t\t\t\t$( this.$el ).find( '.title input' ).focus();\n+\t\t\t\t\t\treturn i18n.new_section_item + ' ' + type.toLowerCase();\n+\t\t\t\t\t},\n+\n+\t\t\t\t\ttypes: function() {\n+\t\t\t\t\t\treturn $store.getters['ci\u002Ftypes'];\n+\t\t\t\t\t},\n+\t\t\t\t\tfirstType: function() {\n+\t\t\t\t\t\tfor ( var type in $store.getters['ci\u002Ftypes'] ) {\n+\t\t\t\t\t\t\treturn type;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Template new section.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-new-section\">\r\n-\t\u003Cdiv class=\"section new-section\">\r\n-\t\t\u003Cform @submit.prevent=\"\">\r\n-\t\t\t\u003Cdiv class=\"section-head\">\r\n-\t\t\t\t\u003Cspan class=\"creatable\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cinput v-model=\"section_title\" type=\"text\" title=\"title\" class=\"title-input\" placeholder=\"\u003C?php esc_attr_e( 'Create a new section', 'learnpress' ); ?>\" @keyup.enter.prevent=\"newSection\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-new-section', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-new-section',\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tsection_title: ''\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tdraftCourse: function() {\r\n-\t\t\t\t\t\tif ( $store.getters['autoDraft'] ) {\r\n-\t\t\t\t\t\t\t$store.dispatch( 'draftCourse', {\r\n-\t\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\r\n-\t\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\r\n-\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnewSection: function() {\r\n-\t\t\t\t\t\tif ( this.section_title ) {\r\n-\t\t\t\t\t\t\tthis.draftCourse();\r\n-\r\n-\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FnewSection', this.section_title );\r\n-\t\t\t\t\t\t\tthis.section_title = '';\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\n+\u002F**\n+ * Template new section.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-new-section\">\n+\t\u003Cdiv class=\"section new-section\">\n+\t\t\u003Cform @submit.prevent=\"\">\n+\t\t\t\u003Cdiv class=\"section-head\">\n+\t\t\t\t\u003Cspan class=\"creatable\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cinput v-model=\"section_title\" type=\"text\" title=\"title\" class=\"title-input\" placeholder=\"\u003C?php esc_attr_e( 'Create a new section', 'learnpress' ); ?>\" @keyup.enter.prevent=\"newSection\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-new-section', {\n+\t\t\t\ttemplate: '#tmpl-lp-new-section',\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tsection_title: ''\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tdraftCourse: function() {\n+\t\t\t\t\t\tif ( $store.getters['autoDraft'] ) {\n+\t\t\t\t\t\t\t$store.dispatch( 'draftCourse', {\n+\t\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\n+\t\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\n+\t\t\t\t\t\t\t});\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tnewSection: function() {\n+\t\t\t\t\t\tif ( this.section_title ) {\n+\t\t\t\t\t\t\tthis.draftCourse();\n+\n+\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FnewSection', this.section_title );\n+\t\t\t\t\t\t\tthis.section_title = '';\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fpagination.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fpagination.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fpagination.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fpagination.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Pagination.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-pagination\">\r\n-\t\u003Cdiv class=\"pagination\" v-if=\"total > 1\">\r\n-\t\t\u003Cform prevent.submit=\"\">\r\n-\t\t\t\u003Cbutton class=\"button first\" :disabled=\"page == 1\" v-if=\"total > 2 && page > 1 && page != 2\"\r\n-\t\t\t\t\t@click.prevent=\"previousFirstPage\">«\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button previous\" :disabled=\"page == 1\"\r\n-\t\t\t\t\t@click.prevent=\"previousPage\">\u003C?php echo esc_html_x( 'Previous', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button next\" :disabled=\"page == total\"\r\n-\t\t\t\t\t@click.prevent=\"nextPage\">\u003C?php echo esc_html_x( 'Next', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button last\" :disabled=\"page == total\"\r\n-\t\t\t\t\tv-if=\"total > 2 && page \u003C total && page != (total - 1)\"\r\n-\t\t\t\t\t@click.prevent=\"nextLastPage\">»\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003Cspan class=\"index\">{{page}} \u002F {{total}}\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-pagination', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-pagination',\r\n-\t\t\t\tprops: ['total'],\r\n-\t\t\t\tdata: function () {\r\n-\t\t\t\t\treturn { page: 1 }\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tupdate: function() {\r\n-\t\t\t\t\t\tthis.$emit( 'update', this.page );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnextPage: function() {\r\n-\t\t\t\t\t\tif ( this.page \u003C this.total ) {\r\n-\t\t\t\t\t\t\tthis.page++;\r\n-\t\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnextLastPage: function() {\r\n-\t\t\t\t\t\tif ( this.page \u003C this.total ) {\r\n-\t\t\t\t\t\t\tthis.page = this.total;\r\n-\t\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tpreviousPage: function() {\r\n-\t\t\t\t\t\tif ( this.page > 1 ) {\r\n-\t\t\t\t\t\t\tthis.page--;\r\n-\t\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tpreviousFirstPage: function() {\r\n-\t\t\t\t\t\tif ( this.page > 1 ) {\r\n-\t\t\t\t\t\t\tthis.page = 1;\r\n-\t\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\n+\u002F**\n+ * Pagination.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-pagination\">\n+\t\u003Cdiv class=\"pagination\" v-if=\"total > 1\">\n+\t\t\u003Cform prevent.submit=\"\">\n+\t\t\t\u003Cbutton class=\"button first\" :disabled=\"page == 1\" v-if=\"total > 2 && page > 1 && page != 2\"\n+\t\t\t\t\t@click.prevent=\"previousFirstPage\">«\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button previous\" :disabled=\"page == 1\"\n+\t\t\t\t\t@click.prevent=\"previousPage\">\u003C?php echo esc_html_x( 'Previous', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button next\" :disabled=\"page == total\"\n+\t\t\t\t\t@click.prevent=\"nextPage\">\u003C?php echo esc_html_x( 'Next', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button last\" :disabled=\"page == total\"\n+\t\t\t\t\tv-if=\"total > 2 && page \u003C total && page != (total - 1)\"\n+\t\t\t\t\t@click.prevent=\"nextLastPage\">»\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003Cspan class=\"index\">{{page}} \u002F {{total}}\u003C\u002Fspan>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-pagination', {\n+\t\t\t\ttemplate: '#tmpl-lp-pagination',\n+\t\t\t\tprops: ['total'],\n+\t\t\t\tdata: function () {\n+\t\t\t\t\treturn { page: 1 }\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tupdate: function() {\n+\t\t\t\t\t\tthis.$emit( 'update', this.page );\n+\t\t\t\t\t},\n+\t\t\t\t\tnextPage: function() {\n+\t\t\t\t\t\tif ( this.page \u003C this.total ) {\n+\t\t\t\t\t\t\tthis.page++;\n+\t\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tnextLastPage: function() {\n+\t\t\t\t\t\tif ( this.page \u003C this.total ) {\n+\t\t\t\t\t\t\tthis.page = this.total;\n+\t\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tpreviousPage: function() {\n+\t\t\t\t\t\tif ( this.page > 1 ) {\n+\t\t\t\t\t\t\tthis.page--;\n+\t\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tpreviousFirstPage: function() {\n+\t\t\t\t\t\tif ( this.page > 1 ) {\n+\t\t\t\t\t\t\tthis.page = 1;\n+\t\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,143 +1,143 @@\n-\u003C?php\r\n-\u002F**\r\n- * Section item template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-section-item\">\r\n-\t\u003Cli :class=\"['section-item',item.type, isEmptyItem() ? 'empty-item' : '', {updating: updating, removing: removing}]\"\r\n-\t\t:data-item-id=\"item.id\"\r\n-\t\t:data-item-order=\"order\">\r\n-\t\t\u003Cdiv class=\"drag lp-sortable-handle\">\r\n-\t\t\t\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"icon\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"title\">\r\n-\t\t\t\u003Cinput v-model=\"item.title\" type=\"text\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\" @keyup=\"keyUp\">\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"item-actions\">\r\n-\t\t\t\u003Cdiv class=\"actions\">\r\n-\t\t\t\t\u003C?php do_action( 'learn_press_before_display_item_actions' ); ?>\r\n-\t\t\t\t\u003Cdiv class=\"action preview-item lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Enable\u002FDisable Preview', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons\" :class=\"previewClass\" @click=\"togglePreview\">\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"action edit-item lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Edit an item', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Ca :href=\"url\" target=\"_blank\" class=\"lp-btn-icon dashicons dashicons-edit\">\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"action delete-item\" v-if=\"!disableCurriculum\">\r\n-\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click.prevent=\"remove\">\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca @click.prevent=\"remove\">\u003C?php esc_html_e( 'Remove from the course', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca @click.prevent=\"deletePermanently\" class=\"delete-permanently\">\u003C?php esc_html_e( 'Move to trash', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php do_action( 'learn_press_after_display_item_actions' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fli>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component('lp-section-item', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-section-item',\r\n-\t\t\t\tprops: ['item', 'order', 'disableCurriculum'],\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\ttitle: this.item.title,\r\n-\t\t\t\t\t\tchanged: false,\r\n-\t\t\t\t\t\tremoving: false\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tcreated: function() {\r\n-\t\t\t\t\tthis.$ = jQuery;\r\n-\t\t\t\t},\r\n-\t\t\t\tmounted: function() {\r\n-\t\t\t\t\tthis.$nextTick( function() {\r\n-\t\t\t\t\t\tvar $ = jQuery;\r\n-\r\n-\t\t\t\t\t\t$( this.$el ).find( '.lp-title-attr-tip' ).LP( 'QuickTip', {\r\n-\t\t\t\t\t\t\tcloseInterval: 0,\r\n-\t\t\t\t\t\t\tarrowOffset: 'el',\r\n-\t\t\t\t\t\t\ttipClass: 'preview-item-tip'\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\turl: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ss\u002FurlEdit'] + this.item.id;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdating: function() {\r\n-\t\t\t\t\t\treturn this.removing || this.saving;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tstatus: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ss\u002FstatusUpdateSectionItem'][this.item.id] || '';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tsaving: function() {\r\n-\t\t\t\t\t\treturn this.status === 'updating';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tpreviewClass: function() {\r\n-\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\t'dashicons-visibility': this.item.preview,\r\n-\t\t\t\t\t\t\t'dashicons-hidden': !this.item.preview\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tisEmptyItem: function() {\r\n-\t\t\t\t\t\treturn isNaN(this.item.id)\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tchangeTitle: function() {\r\n-\t\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdateTitle: function() {\r\n-\t\t\t\t\t\tif ( this.changed ) {\r\n-\t\t\t\t\t\t\tthis.$emit( 'update', this.item );\r\n-\t\t\t\t\t\t\tthis.changed = false;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremove: function() {\r\n-\t\t\t\t\t\tif ( ! confirm( $store.getters['i18n\u002Fall'].confirm_remove_item.replace( '{{ITEM_NAME}}', this.item.title ) ) ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tthis.item.temp_id = LP.uniqueId();\r\n-\t\t\t\t\t\tthis.$emit( 'remove', this.item );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tdeletePermanently: function() {\r\n-\t\t\t\t\t\tif ( ! confirm( $store.getters['i18n\u002Fall'].confirm_trash_item.replace( '{{ITEM_NAME}}', this.item.title ) ) ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tthis.item.temp_id = LP.uniqueId();\r\n-\t\t\t\t\t\tthis.$emit('delete', this.item);\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tkeyUp: function( event ) {\r\n-\t\t\t\t\t\tvar keyCode = event.keyCode;\r\n-\r\n-\t\t\t\t\t\tif ( keyCode === 27 ) {\r\n-\t\t\t\t\t\t\tthis.item.title = this.title;\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis.$emit( 'nav', { key: event.keyCode, order: this.order } );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttogglePreview: function( evt ) {\r\n-\t\t\t\t\t\tthis.item.preview = ! this.item.preview;\r\n-\r\n-\t\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t\t\tthis.updateTitle();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t\u003C?php do_action( 'learn_press_after_section_item_script' ); ?>\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Section item template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-section-item\">\n+\t\u003Cli :class=\"['section-item',item.type, isEmptyItem() ? 'empty-item' : '', {updating: updating, removing: removing}]\"\n+\t\t:data-item-id=\"item.id\"\n+\t\t:data-item-order=\"order\">\n+\t\t\u003Cdiv class=\"drag lp-sortable-handle\">\n+\t\t\t\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"icon\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"title\">\n+\t\t\t\u003Cinput v-model=\"item.title\" type=\"text\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\" @keyup=\"keyUp\">\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"item-actions\">\n+\t\t\t\u003Cdiv class=\"actions\">\n+\t\t\t\t\u003C?php do_action( 'learn_press_before_display_item_actions' ); ?>\n+\t\t\t\t\u003Cdiv class=\"action preview-item lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Enable\u002FDisable Preview', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons\" :class=\"previewClass\" @click=\"togglePreview\">\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"action edit-item lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Edit an item', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Ca :href=\"url\" target=\"_blank\" class=\"lp-btn-icon dashicons dashicons-edit\">\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"action delete-item\" v-if=\"!disableCurriculum\">\n+\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click.prevent=\"remove\">\u003C\u002Fa>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca @click.prevent=\"remove\">\u003C?php esc_html_e( 'Remove from the course', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca @click.prevent=\"deletePermanently\" class=\"delete-permanently\">\u003C?php esc_html_e( 'Move to trash', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php do_action( 'learn_press_after_display_item_actions' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fli>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component('lp-section-item', {\n+\t\t\t\ttemplate: '#tmpl-lp-section-item',\n+\t\t\t\tprops: ['item', 'order', 'disableCurriculum'],\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\ttitle: this.item.title,\n+\t\t\t\t\t\tchanged: false,\n+\t\t\t\t\t\tremoving: false\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tcreated: function() {\n+\t\t\t\t\tthis.$ = jQuery;\n+\t\t\t\t},\n+\t\t\t\tmounted: function() {\n+\t\t\t\t\tthis.$nextTick( function() {\n+\t\t\t\t\t\tvar $ = jQuery;\n+\n+\t\t\t\t\t\t$( this.$el ).find( '.lp-title-attr-tip' ).LP( 'QuickTip', {\n+\t\t\t\t\t\t\tcloseInterval: 0,\n+\t\t\t\t\t\t\tarrowOffset: 'el',\n+\t\t\t\t\t\t\ttipClass: 'preview-item-tip'\n+\t\t\t\t\t\t});\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\turl: function() {\n+\t\t\t\t\t\treturn $store.getters['ss\u002FurlEdit'] + this.item.id;\n+\t\t\t\t\t},\n+\t\t\t\t\tupdating: function() {\n+\t\t\t\t\t\treturn this.removing || this.saving;\n+\t\t\t\t\t},\n+\t\t\t\t\tstatus: function() {\n+\t\t\t\t\t\treturn $store.getters['ss\u002FstatusUpdateSectionItem'][this.item.id] || '';\n+\t\t\t\t\t},\n+\t\t\t\t\tsaving: function() {\n+\t\t\t\t\t\treturn this.status === 'updating';\n+\t\t\t\t\t},\n+\t\t\t\t\tpreviewClass: function() {\n+\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\t'dashicons-visibility': this.item.preview,\n+\t\t\t\t\t\t\t'dashicons-hidden': !this.item.preview\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tisEmptyItem: function() {\n+\t\t\t\t\t\treturn isNaN(this.item.id)\n+\t\t\t\t\t},\n+\t\t\t\t\tchangeTitle: function() {\n+\t\t\t\t\t\tthis.changed = true;\n+\t\t\t\t\t},\n+\t\t\t\t\tupdateTitle: function() {\n+\t\t\t\t\t\tif ( this.changed ) {\n+\t\t\t\t\t\t\tthis.$emit( 'update', this.item );\n+\t\t\t\t\t\t\tthis.changed = false;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tremove: function() {\n+\t\t\t\t\t\tif ( ! confirm( $store.getters['i18n\u002Fall'].confirm_remove_item.replace( '{{ITEM_NAME}}', this.item.title ) ) ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tthis.item.temp_id = LP.uniqueId();\n+\t\t\t\t\t\tthis.$emit( 'remove', this.item );\n+\t\t\t\t\t},\n+\t\t\t\t\tdeletePermanently: function() {\n+\t\t\t\t\t\tif ( ! confirm( $store.getters['i18n\u002Fall'].confirm_trash_item.replace( '{{ITEM_NAME}}', this.item.title ) ) ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tthis.item.temp_id = LP.uniqueId();\n+\t\t\t\t\t\tthis.$emit('delete', this.item);\n+\t\t\t\t\t},\n+\t\t\t\t\tkeyUp: function( event ) {\n+\t\t\t\t\t\tvar keyCode = event.keyCode;\n+\n+\t\t\t\t\t\tif ( keyCode === 27 ) {\n+\t\t\t\t\t\t\tthis.item.title = this.title;\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis.$emit( 'nav', { key: event.keyCode, order: this.order } );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\ttogglePreview: function( evt ) {\n+\t\t\t\t\t\tthis.item.preview = ! this.item.preview;\n+\n+\t\t\t\t\t\tthis.changed = true;\n+\t\t\t\t\t\tthis.updateTitle();\n+\t\t\t\t\t}\n+\t\t\t\t\t\u003C?php do_action( 'learn_press_after_section_item_script' ); ?>\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,269 +1,269 @@\n-\u003C?php\r\n-\u002F**\r\n- * Section template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'course\u002Fsection-item' );\r\n-learn_press_admin_view( 'course\u002Fnew-section-item' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-section\">\r\n-\t\u003Cdiv class=\"section\" :class=\"[isOpen ? 'open' : 'close', status, isEmpty ? 'empty-section' : '']\" :data-section-order=\"index\" :data-section-id=\"section.id\">\r\n-\t\t\u003Cdiv class=\"section-head\" @dblclick=\"toggle\">\r\n-\t\t\t\u003Cspan class=\"movable lp-sortable-handle\">\u003C\u002Fspan>\r\n-\t\t\t\u003C!--Section title-->\r\n-\t\t\t\u003Cinput v-model=\"section.title\" type=\"text\" title=\"title\" class=\"title-input\" @change=\"updating\" @blur=\"completed\" @keyup.enter=\"completed\" placeholder=\"\u003C?php esc_attr_e( 'Create a new section', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cdiv class=\"section-item-counts\">\r\n-\t\t\t\t\u003Cspan v-for=\"item in countItems()\">{{item.count}} {{item.name}}\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C!--Section toggle-->\r\n-\t\t\t\u003Cdiv class=\"actions\">\r\n-\t\t\t\t\u003Cspan class=\"collapse\" :class=\"isOpen ? 'open' : 'close'\" @click.prevent=\"toggle\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"section-collapse\" ref=\"collapse\">\r\n-\t\t\t\u003Cdiv class=\"section-content\">\r\n-\t\t\t\t\u003Cdiv class=\"details\">\r\n-\t\t\t\t\t\u003C!--Section description-->\r\n-\t\t\t\t\t\u003Cinput v-model=\"section.description\" type=\"text\" class=\"description-input no-submit\" title=\"description\" @change=\"updating\" @blur=\"completed\" @keyup.enter=\"completed\" ref=\"description\" placeholder=\"\u003C?php esc_attr_e( 'Section description...', 'learnpress' ); ?>\">\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"section-list-items\" :class=\"{'no-item': !section.items.length}\">\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003C!--Section items-->\r\n-\t\t\t\t\t\t\u003Clp-section-item v-for=\"(item, index) in section.items\" :item=\"item\" :key=\"item.id\" @update=\"updateItem\" @remove=\"removeItem\" @delete=\"deleteItem\" @nav=\"navItem\" :order=\"index+1\" :ref=\"index+1\" :disableCurriculum=\"disableCurriculum\">\u003C\u002Flp-section-item>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\t\u003Clp-new-section-item @create=\"newItem\" v-if=\"!disableCurriculum\">\u003C\u002Flp-new-section-item>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv class=\"section-actions\" v-if=\"!disableCurriculum\">\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary\" @click=\"openModal\">\u003C?php esc_html_e( 'Select items', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"remove\" :class=\"{confirm: confirm}\">\r\n-\t\t\t\t\t\u003Cspan class=\"icon\" @click=\"removing\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cdiv class=\"confirm\" @click=\"remove\">\u003C?php esc_html_e( 'Are you sure?', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-section', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-section',\r\n-\t\t\t\tprops: ['section', 'index', 'disableCurriculum'],\r\n-\t\t\t\tdata: function() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\tchanged: false,\r\n-\t\t\t\t\t\tconfirm: false\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tmounted: function() {\r\n-\t\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t\tthis.prepareToggle();\r\n-\r\n-\t\t\t\t\tthis.$watch( 'section.open', function( open ) {\r\n-\t\t\t\t\t\tvm.toggleAnimation( open );\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t$( this.$el ).find( '.section-list-items ul' ).sortable({\r\n-\t\t\t\t\t\taxis: 'y',\r\n-\t\t\t\t\t\t\u002F\u002FconnectWith: '.section-list-items ul',\r\n-\t\t\t\t\t\thandle: '.drag',\r\n-\t\t\t\t\t\tstart: function( e, ui ) {\r\n-\t\t\t\t\t\t\tvar id = parseInt( ui.item.attr( 'data-item-id' ) );\r\n-\r\n-\t\t\t\t\t\t\tui.item.data( 'vmItem', vm.section.items.filter( function( vmItem, i ) {\r\n-\t\t\t\t\t\t\t\treturn vmItem.id == id\r\n-\t\t\t\t\t\t\t}))\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tupdate: function( e, ui ) {\r\n-\t\t\t\t\t\t\tvar itemIds = $( this ).children().map( function() {\r\n-\t\t\t\t\t\t\t\treturn parseInt($(this).attr( 'data-item-id' ) );\r\n-\t\t\t\t\t\t\t}).get();\r\n-\r\n-\t\t\t\t\t\t\tvar vmItem = ui.item.data( 'vmItem' );\r\n-\t\t\t\t\t\t\tvm.updateOrderItems( itemIds, vmItem ? vmItem[0] : null );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\tthis.$nextTick( function() {\r\n-\t\t\t\t\t\tvar $ = jQuery;\r\n-\r\n-\t\t\t\t\t\t$( this.$el ).find( '.lp-title-attr-tip' ).LP( 'QuickTip',{\r\n-\t\t\t\t\t\t\tcloseInterval: 0,\r\n-\t\t\t\t\t\t\tarrowOffset: 'el',\r\n-\t\t\t\t\t\t\ttipClass: 'preview-item-tip'\r\n-\t\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t\t$( document ).on( 'mousedown', '.section-item .drag', function( e ) {\r\n-\t\t\t\t\t\t\t$( 'html, body' ).addClass( 'moving' );\r\n-\t\t\t\t\t\t}).on( 'mouseup', function( e ) {\r\n-\t\t\t\t\t\t\t$( 'html, body' ).removeClass( 'moving' );\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\tstatus: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ss\u002FstatusUpdateSection'][this.section.id] || '';\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tisEmpty: function() {\r\n-\t\t\t\t\t\treturn isNaN( this.section.id );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tisOpen: function() {\r\n-\t\t\t\t\t\treturn this.section.open;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\titems: {\r\n-\t\t\t\t\t\tget: function() {\r\n-\t\t\t\t\t\t\treturn this.section.items;\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tset: function( items ) {\r\n-\t\t\t\t\t\t\tthis.section.items = items;\r\n-\r\n-\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItems', {\r\n-\t\t\t\t\t\t\t\tsection_id: this.section.id,\r\n-\t\t\t\t\t\t\t\titems: items\r\n-\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\toptionDraggable: function() {\r\n-\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\thandle: '.drag',\r\n-\t\t\t\t\t\t\tdraggable: '.section-item',\r\n-\t\t\t\t\t\t\tgroup: {\r\n-\t\t\t\t\t\t\t\tname: 'lp-section-items',\r\n-\t\t\t\t\t\t\t\tput: true,\r\n-\t\t\t\t\t\t\t\tpull: true\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t};\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tupdateOrderItems: function( orders, vmItem ) {\r\n-\t\t\t\t\t\tvar allItems = JSON.parse( JSON.stringify( this.section.items ) ),\r\n-\t\t\t\t\t\t\titems = [];\r\n-\r\n-\t\t\t\t\t\tif ( vmItem ) {\r\n-\t\t\t\t\t\t\tallItems.push( vmItem );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tfor ( var i = 0, n = orders.length; i \u003C n; i++ ) {\r\n-\t\t\t\t\t\t\t$.each( allItems, function( j, item ) {\r\n-\t\t\t\t\t\t\t\tif ( orders[i] === item.id ) {\r\n-\t\t\t\t\t\t\t\t\titems.push( JSON.parse( JSON.stringify( item ) ) );\r\n-\t\t\t\t\t\t\t\t\tfound = true;\r\n-\t\t\t\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t});\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.section.items = items;\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItems', {\r\n-\t\t\t\t\t\t\tsection_id: this.section.id,\r\n-\t\t\t\t\t\t\titems: items\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttoggle: function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FtoggleSection', this.section );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tprepareToggle: function() {\r\n-\t\t\t\t\t\tvar display = 'none';\r\n-\t\t\t\t\t\tif ( this.isOpen ) {\r\n-\t\t\t\t\t\t\tdisplay = 'block';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.$refs.collapse.style.display = display;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\ttoggleAnimation: function( open ) {\r\n-\t\t\t\t\t\tif ( open ) {\r\n-\t\t\t\t\t\t\t$( this.$refs.collapse ).slideDown();\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$( this.$refs.collapse ).slideUp();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdating: function() {\r\n-\t\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcompleted: function() {\r\n-\t\t\t\t\t\tif ( this.changed ) {\r\n-\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSection', this.section );\r\n-\t\t\t\t\t\t\tthis.changed = false;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremoving: function() {\r\n-\t\t\t\t\t\tthis.confirm = true;\r\n-\t\t\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t\t\tvm.confirm = false;\r\n-\t\t\t\t\t\t}, 3000 );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremove: function() {\r\n-\t\t\t\t\t\tif ( this.confirm ) {\r\n-\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FremoveSection', { index: this.index, section: this.section } );\r\n-\t\t\t\t\t\t\tthis.confirm = false;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdateItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItem', { section_id: this.section.id, item: item } );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tremoveItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FremoveSectionItem', { section_id: this.section.id, item: item } );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tdeleteItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FdeleteSectionItem', { section_id: this.section.id, item: item } );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnavItem: function( payload ) {\r\n-\t\t\t\t\t\tvar keyCode = payload.key,\r\n-\t\t\t\t\t\t\torder = payload.order;\r\n-\r\n-\t\t\t\t\t\tif ( keyCode === 38 ) {\r\n-\t\t\t\t\t\t\tif ( order === 1 ) {\r\n-\t\t\t\t\t\t\t\tthis.$refs.description.focus();\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis.nav( order - 1 );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( keyCode === 40 || keyCode === 13 ) {\r\n-\t\t\t\t\t\t\tif ( order === this.section.items.length ) {\r\n-\t\t\t\t\t\t\t\t\u002F\u002F code\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis.nav( order + 1 );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnav: function( position ) {\r\n-\t\t\t\t\t\tvar element = 'div[data-section-order=' + this.index + '] li[data-item-order=' + position + ']';\r\n-\t\t\t\t\t\t( $( element ).find( '.title input' ) ).focus();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tnewItem: function( item ) {\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FnewSectionItem', { section_id: this.section.id, item: item } );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\topenModal: function() {\r\n-\t\t\t\t\t\t$store.dispatch( 'ci\u002Fopen', parseInt( this.section.id ) );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tcountItems: function() {\r\n-\t\t\t\t\t\tvar count = this.section.items.length,\r\n-\t\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].item_labels;\r\n-\t\t\t\t\t\treturn [{\r\n-\t\t\t\t\t\t\tcount: count,\r\n-\t\t\t\t\t\t\tname: count > 1 ? labels.plural : labels.singular\r\n-\t\t\t\t\t\t}];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})(LP_Curriculum_Store);\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Section template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'course\u002Fsection-item' );\n+learn_press_admin_view( 'course\u002Fnew-section-item' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-section\">\n+\t\u003Cdiv class=\"section\" :class=\"[isOpen ? 'open' : 'close', status, isEmpty ? 'empty-section' : '']\" :data-section-order=\"index\" :data-section-id=\"section.id\">\n+\t\t\u003Cdiv class=\"section-head\" @dblclick=\"toggle\">\n+\t\t\t\u003Cspan class=\"movable lp-sortable-handle\">\u003C\u002Fspan>\n+\t\t\t\u003C!--Section title-->\n+\t\t\t\u003Cinput v-model=\"section.title\" type=\"text\" title=\"title\" class=\"title-input\" @change=\"updating\" @blur=\"completed\" @keyup.enter=\"completed\" placeholder=\"\u003C?php esc_attr_e( 'Create a new section', 'learnpress' ); ?>\">\n+\t\t\t\u003Cdiv class=\"section-item-counts\">\n+\t\t\t\t\u003Cspan v-for=\"item in countItems()\">{{item.count}} {{item.name}}\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C!--Section toggle-->\n+\t\t\t\u003Cdiv class=\"actions\">\n+\t\t\t\t\u003Cspan class=\"collapse\" :class=\"isOpen ? 'open' : 'close'\" @click.prevent=\"toggle\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"section-collapse\" ref=\"collapse\">\n+\t\t\t\u003Cdiv class=\"section-content\">\n+\t\t\t\t\u003Cdiv class=\"details\">\n+\t\t\t\t\t\u003C!--Section description-->\n+\t\t\t\t\t\u003Cinput v-model=\"section.description\" type=\"text\" class=\"description-input no-submit\" title=\"description\" @change=\"updating\" @blur=\"completed\" @keyup.enter=\"completed\" ref=\"description\" placeholder=\"\u003C?php esc_attr_e( 'Section description...', 'learnpress' ); ?>\">\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Cdiv class=\"section-list-items\" :class=\"{'no-item': !section.items.length}\">\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003C!--Section items-->\n+\t\t\t\t\t\t\u003Clp-section-item v-for=\"(item, index) in section.items\" :item=\"item\" :key=\"item.id\" @update=\"updateItem\" @remove=\"removeItem\" @delete=\"deleteItem\" @nav=\"navItem\" :order=\"index+1\" :ref=\"index+1\" :disableCurriculum=\"disableCurriculum\">\u003C\u002Flp-section-item>\n+\t\t\t\t\t\u003C\u002Ful>\n+\n+\t\t\t\t\t\u003Clp-new-section-item @create=\"newItem\" v-if=\"!disableCurriculum\">\u003C\u002Flp-new-section-item>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv class=\"section-actions\" v-if=\"!disableCurriculum\">\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary\" @click=\"openModal\">\u003C?php esc_html_e( 'Select items', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\n+\t\t\t\t\u003Cdiv class=\"remove\" :class=\"{confirm: confirm}\">\n+\t\t\t\t\t\u003Cspan class=\"icon\" @click=\"removing\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cdiv class=\"confirm\" @click=\"remove\">\u003C?php esc_html_e( 'Are you sure?', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-section', {\n+\t\t\t\ttemplate: '#tmpl-lp-section',\n+\t\t\t\tprops: ['section', 'index', 'disableCurriculum'],\n+\t\t\t\tdata: function() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\tchanged: false,\n+\t\t\t\t\t\tconfirm: false\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tmounted: function() {\n+\t\t\t\t\tvar vm = this;\n+\n+\t\t\t\t\tthis.prepareToggle();\n+\n+\t\t\t\t\tthis.$watch( 'section.open', function( open ) {\n+\t\t\t\t\t\tvm.toggleAnimation( open );\n+\t\t\t\t\t});\n+\n+\t\t\t\t\t$( this.$el ).find( '.section-list-items ul' ).sortable({\n+\t\t\t\t\t\taxis: 'y',\n+\t\t\t\t\t\t\u002F\u002FconnectWith: '.section-list-items ul',\n+\t\t\t\t\t\thandle: '.drag',\n+\t\t\t\t\t\tstart: function( e, ui ) {\n+\t\t\t\t\t\t\tvar id = parseInt( ui.item.attr( 'data-item-id' ) );\n+\n+\t\t\t\t\t\t\tui.item.data( 'vmItem', vm.section.items.filter( function( vmItem, i ) {\n+\t\t\t\t\t\t\t\treturn vmItem.id == id\n+\t\t\t\t\t\t\t}))\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tupdate: function( e, ui ) {\n+\t\t\t\t\t\t\tvar itemIds = $( this ).children().map( function() {\n+\t\t\t\t\t\t\t\treturn parseInt($(this).attr( 'data-item-id' ) );\n+\t\t\t\t\t\t\t}).get();\n+\n+\t\t\t\t\t\t\tvar vmItem = ui.item.data( 'vmItem' );\n+\t\t\t\t\t\t\tvm.updateOrderItems( itemIds, vmItem ? vmItem[0] : null );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\n+\t\t\t\t\tthis.$nextTick( function() {\n+\t\t\t\t\t\tvar $ = jQuery;\n+\n+\t\t\t\t\t\t$( this.$el ).find( '.lp-title-attr-tip' ).LP( 'QuickTip',{\n+\t\t\t\t\t\t\tcloseInterval: 0,\n+\t\t\t\t\t\t\tarrowOffset: 'el',\n+\t\t\t\t\t\t\ttipClass: 'preview-item-tip'\n+\t\t\t\t\t\t});\n+\n+\t\t\t\t\t\t$( document ).on( 'mousedown', '.section-item .drag', function( e ) {\n+\t\t\t\t\t\t\t$( 'html, body' ).addClass( 'moving' );\n+\t\t\t\t\t\t}).on( 'mouseup', function( e ) {\n+\t\t\t\t\t\t\t$( 'html, body' ).removeClass( 'moving' );\n+\t\t\t\t\t\t});\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\tstatus: function() {\n+\t\t\t\t\t\treturn $store.getters['ss\u002FstatusUpdateSection'][this.section.id] || '';\n+\t\t\t\t\t},\n+\t\t\t\t\tisEmpty: function() {\n+\t\t\t\t\t\treturn isNaN( this.section.id );\n+\t\t\t\t\t},\n+\t\t\t\t\tisOpen: function() {\n+\t\t\t\t\t\treturn this.section.open;\n+\t\t\t\t\t},\n+\t\t\t\t\titems: {\n+\t\t\t\t\t\tget: function() {\n+\t\t\t\t\t\t\treturn this.section.items;\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tset: function( items ) {\n+\t\t\t\t\t\t\tthis.section.items = items;\n+\n+\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItems', {\n+\t\t\t\t\t\t\t\tsection_id: this.section.id,\n+\t\t\t\t\t\t\t\titems: items\n+\t\t\t\t\t\t\t});\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\toptionDraggable: function() {\n+\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\thandle: '.drag',\n+\t\t\t\t\t\t\tdraggable: '.section-item',\n+\t\t\t\t\t\t\tgroup: {\n+\t\t\t\t\t\t\t\tname: 'lp-section-items',\n+\t\t\t\t\t\t\t\tput: true,\n+\t\t\t\t\t\t\t\tpull: true\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t};\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tupdateOrderItems: function( orders, vmItem ) {\n+\t\t\t\t\t\tvar allItems = JSON.parse( JSON.stringify( this.section.items ) ),\n+\t\t\t\t\t\t\titems = [];\n+\n+\t\t\t\t\t\tif ( vmItem ) {\n+\t\t\t\t\t\t\tallItems.push( vmItem );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tfor ( var i = 0, n = orders.length; i \u003C n; i++ ) {\n+\t\t\t\t\t\t\t$.each( allItems, function( j, item ) {\n+\t\t\t\t\t\t\t\tif ( orders[i] === item.id ) {\n+\t\t\t\t\t\t\t\t\titems.push( JSON.parse( JSON.stringify( item ) ) );\n+\t\t\t\t\t\t\t\t\tfound = true;\n+\t\t\t\t\t\t\t\t\treturn false;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t});\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.section.items = items;\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItems', {\n+\t\t\t\t\t\t\tsection_id: this.section.id,\n+\t\t\t\t\t\t\titems: items\n+\t\t\t\t\t\t});\n+\t\t\t\t\t},\n+\t\t\t\t\ttoggle: function() {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FtoggleSection', this.section );\n+\t\t\t\t\t},\n+\t\t\t\t\tprepareToggle: function() {\n+\t\t\t\t\t\tvar display = 'none';\n+\t\t\t\t\t\tif ( this.isOpen ) {\n+\t\t\t\t\t\t\tdisplay = 'block';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.$refs.collapse.style.display = display;\n+\t\t\t\t\t},\n+\t\t\t\t\ttoggleAnimation: function( open ) {\n+\t\t\t\t\t\tif ( open ) {\n+\t\t\t\t\t\t\t$( this.$refs.collapse ).slideDown();\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$( this.$refs.collapse ).slideUp();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tupdating: function() {\n+\t\t\t\t\t\tthis.changed = true;\n+\t\t\t\t\t},\n+\t\t\t\t\tcompleted: function() {\n+\t\t\t\t\t\tif ( this.changed ) {\n+\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSection', this.section );\n+\t\t\t\t\t\t\tthis.changed = false;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tremoving: function() {\n+\t\t\t\t\t\tthis.confirm = true;\n+\t\t\t\t\t\tvar vm = this;\n+\n+\t\t\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t\t\tvm.confirm = false;\n+\t\t\t\t\t\t}, 3000 );\n+\t\t\t\t\t},\n+\t\t\t\t\tremove: function() {\n+\t\t\t\t\t\tif ( this.confirm ) {\n+\t\t\t\t\t\t\t$store.dispatch( 'ss\u002FremoveSection', { index: this.index, section: this.section } );\n+\t\t\t\t\t\t\tthis.confirm = false;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tupdateItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionItem', { section_id: this.section.id, item: item } );\n+\t\t\t\t\t},\n+\t\t\t\t\tremoveItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FremoveSectionItem', { section_id: this.section.id, item: item } );\n+\t\t\t\t\t},\n+\t\t\t\t\tdeleteItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FdeleteSectionItem', { section_id: this.section.id, item: item } );\n+\t\t\t\t\t},\n+\t\t\t\t\tnavItem: function( payload ) {\n+\t\t\t\t\t\tvar keyCode = payload.key,\n+\t\t\t\t\t\t\torder = payload.order;\n+\n+\t\t\t\t\t\tif ( keyCode === 38 ) {\n+\t\t\t\t\t\t\tif ( order === 1 ) {\n+\t\t\t\t\t\t\t\tthis.$refs.description.focus();\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis.nav( order - 1 );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( keyCode === 40 || keyCode === 13 ) {\n+\t\t\t\t\t\t\tif ( order === this.section.items.length ) {\n+\t\t\t\t\t\t\t\t\u002F\u002F code\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis.nav( order + 1 );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t},\n+\t\t\t\t\tnav: function( position ) {\n+\t\t\t\t\t\tvar element = 'div[data-section-order=' + this.index + '] li[data-item-order=' + position + ']';\n+\t\t\t\t\t\t( $( element ).find( '.title input' ) ).focus();\n+\t\t\t\t\t},\n+\t\t\t\t\tnewItem: function( item ) {\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FnewSectionItem', { section_id: this.section.id, item: item } );\n+\t\t\t\t\t},\n+\t\t\t\t\topenModal: function() {\n+\t\t\t\t\t\t$store.dispatch( 'ci\u002Fopen', parseInt( this.section.id ) );\n+\t\t\t\t\t},\n+\t\t\t\t\tcountItems: function() {\n+\t\t\t\t\t\tvar count = this.section.items.length,\n+\t\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].item_labels;\n+\t\t\t\t\t\treturn [{\n+\t\t\t\t\t\t\tcount: count,\n+\t\t\t\t\t\t\tname: count > 1 ? labels.plural : labels.singular\n+\t\t\t\t\t\t}];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})(LP_Curriculum_Store);\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsections.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsections.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsections.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsections.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template list sections.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'course\u002Fsection' );\r\n-learn_press_admin_view( 'course\u002Fnew-section' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-list-sections\">\r\n-\t\u003Cdiv class=\"curriculum-sections\">\r\n-\t\t\u003Clp-section v-for=\"(section, index) in sections\" :section=\"section\" :index=\"index\" :disableCurriculum=\"disableCurriculum\" :key=\"index\">\u003C\u002Flp-section>\r\n-\r\n-\t\t\u003Cdiv class=\"add-new-section\" v-if=\"!disableCurriculum\">\r\n-\t\t\t\u003Clp-new-section>\u003C\u002Flp-new-section>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery( function( $ ) {\r\n-\t\t( function( $store ) {\r\n-\t\t\t$Vue.component( 'lp-list-sections', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-list-sections',\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\tsections: function() {\r\n-\t\t\t\t\t\treturn $store.getters['ss\u002Fsections'];\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tdisableCurriculum: function() {\r\n-\t\t\t\t\t\treturn $store.getters['disable_curriculum'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tcreated: function() {\r\n-\t\t\t\t\tvar _self = this;\r\n-\r\n-\t\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\t\tvar $el = $( '.curriculum-sections' );\r\n-\r\n-\t\t\t\t\t\t$el.sortable({\r\n-\t\t\t\t\t\t\thandle: '.section-head .movable',\r\n-\t\t\t\t\t\t\taxis: 'y',\r\n-\t\t\t\t\t\t\titems: \"> .section\",\r\n-\t\t\t\t\t\t\tupdate: function () {\r\n-\t\t\t\t\t\t\t\t_self.sort();\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t}, 1000 );\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tsort: function() {\r\n-\t\t\t\t\t\tvar _items = $( '.curriculum-sections>div.section' ),\r\n-\t\t\t\t\t\t\torder = _items.map( function() {\r\n-\t\t\t\t\t\t\t\treturn $( this ).data( 'section-id' );\r\n-\t\t\t\t\t\t\t}).get();\r\n-\r\n-\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionsOrder', order );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t\t})( LP_Curriculum_Store );\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template list sections.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'course\u002Fsection' );\n+learn_press_admin_view( 'course\u002Fnew-section' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-list-sections\">\n+\t\u003Cdiv class=\"curriculum-sections\">\n+\t\t\u003Clp-section v-for=\"(section, index) in sections\" :section=\"section\" :index=\"index\" :disableCurriculum=\"disableCurriculum\" :key=\"index\">\u003C\u002Flp-section>\n+\n+\t\t\u003Cdiv class=\"add-new-section\" v-if=\"!disableCurriculum\">\n+\t\t\t\u003Clp-new-section>\u003C\u002Flp-new-section>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery( function( $ ) {\n+\t\t( function( $store ) {\n+\t\t\t$Vue.component( 'lp-list-sections', {\n+\t\t\t\ttemplate: '#tmpl-lp-list-sections',\n+\t\t\t\tcomputed: {\n+\t\t\t\t\tsections: function() {\n+\t\t\t\t\t\treturn $store.getters['ss\u002Fsections'];\n+\t\t\t\t\t},\n+\t\t\t\t\tdisableCurriculum: function() {\n+\t\t\t\t\t\treturn $store.getters['disable_curriculum'];\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tcreated: function() {\n+\t\t\t\t\tvar _self = this;\n+\n+\t\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\t\tvar $el = $( '.curriculum-sections' );\n+\n+\t\t\t\t\t\t$el.sortable({\n+\t\t\t\t\t\t\thandle: '.section-head .movable',\n+\t\t\t\t\t\t\taxis: 'y',\n+\t\t\t\t\t\t\titems: \"> .section\",\n+\t\t\t\t\t\t\tupdate: function () {\n+\t\t\t\t\t\t\t\t_self.sort();\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t});\n+\t\t\t\t\t}, 1000 );\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tsort: function() {\n+\t\t\t\t\t\tvar _items = $( '.curriculum-sections>div.section' ),\n+\t\t\t\t\t\t\torder = _items.map( function() {\n+\t\t\t\t\t\t\t\treturn $( this ).data( 'section-id' );\n+\t\t\t\t\t\t\t}).get();\n+\n+\t\t\t\t\t\t$store.dispatch( 'ss\u002FupdateSectionsOrder', order );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t\t})( LP_Curriculum_Store );\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying statistic orders dashboard in wp-admin\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FInc\u002FAdmin\u002FViews\u002F\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $order_statuses ) || ! isset( $lp_order_icons ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cli class=\"count-number total-raised\">\r\n-\t\u003Cspan>\r\n-\t\t\u003Ci class=\"dashicons dashicons-chart-bar\">\u003C\u002Fi>\r\n-\t\t\u003C?php echo learn_press_get_total_price_order_complete(); ?>\u003C\u002Fspan>\r\n-\t\u003Cp>\u003C?php esc_html_e( 'Total Raised', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\u003C\u002Fli>\r\n-\r\n-\u003C?php\r\n-$counts = learn_press_count_orders();\r\n-foreach ( $order_statuses as $key => $status ) :\r\n-\t$count = $counts[ $key ];\r\n-\t$url   = $count ? admin_url( 'edit.php?post_type=' . LP_ORDER_CPT . '&post_status=' . $key ) : '#';\r\n-\t?>\r\n-\r\n-\t\u003Cli class=\"counter-number order-\u003C?php echo $status; ?>\">\r\n-\t\t\u003Cdiv class=\"counter-inner\">\r\n-\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\r\n-\t\t\t\t\u003Cspan>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( $count ) {\r\n-\t\t\t\t\t\tprintf( translate_nooped_plural( _n_noop( '%d order', '%d orders', 'learnpress' ), $count, 'learnpress' ), $count );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tprintf( __( '%d order', 'learnpress' ), 0 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F\u002Fecho $lp_order_icons[ $status ];\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cp>\u003C?php printf( '%s', LP_Order::get_status_label( $status ) ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fli>\r\n-\u003C?php endforeach; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying statistic orders dashboard in wp-admin\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FInc\u002FAdmin\u002FViews\u002F\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $order_statuses ) || ! isset( $lp_order_icons ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cli class=\"count-number total-raised\">\n+\t\u003Cspan>\n+\t\t\u003Ci class=\"dashicons dashicons-chart-bar\">\u003C\u002Fi>\n+\t\t\u003C?php echo learn_press_get_total_price_order_complete(); ?>\u003C\u002Fspan>\n+\t\u003Cp>\u003C?php esc_html_e( 'Total Raised', 'learnpress' ); ?>\u003C\u002Fp>\n+\u003C\u002Fli>\n+\n+\u003C?php\n+$counts = learn_press_count_orders();\n+foreach ( $order_statuses as $key => $status ) :\n+\t$count = $counts[ $key ];\n+\t$url   = $count ? admin_url( 'edit.php?post_type=' . LP_ORDER_CPT . '&post_status=' . $key ) : '#';\n+\t?>\n+\n+\t\u003Cli class=\"counter-number order-\u003C?php echo $status; ?>\">\n+\t\t\u003Cdiv class=\"counter-inner\">\n+\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $url ); ?>\">\n+\t\t\t\t\u003Cspan>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( $count ) {\n+\t\t\t\t\t\tprintf( translate_nooped_plural( _n_noop( '%d order', '%d orders', 'learnpress' ), $count, 'learnpress' ), $count );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tprintf( __( '%d order', 'learnpress' ), 0 );\n+\t\t\t\t\t}\n+\t\t\t\t\t\u002F\u002Fecho $lp_order_icons[ $status ];\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\u003Cp>\u003C?php printf( '%s', LP_Order::get_status_label( $status ) ); ?>\u003C\u002Fp>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fli>\n+\u003C?php endforeach; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-no-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-no-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-no-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-no-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003Cdiv class=\"rss-widget\">\r\n-\t\u003Cul>\r\n-\t\t\u003Cli>\r\n-\t\t\t\u003Cp>\u003C?php esc_html_e( 'No results found', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n+\u003Cdiv class=\"rss-widget\">\n+\t\u003Cul>\n+\t\t\u003Cli>\n+\t\t\t\u003Cp>\u003C?php esc_html_e( 'No results found', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-results.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-results.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-results.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-results.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying LP information.\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $plugin_data ) || is_wp_error( $plugin_data ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"rss-widget\">\r\n-\t\u003Cul>\r\n-\t\t\u003Cli>\r\n-\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $plugin_data->homepage ); ?>\" class=\"rsswidget\" target=\"_blank\">\u003C?php echo esc_html( $plugin_data->name ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli>\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( ! empty( $plugin_data->downloaded ) ) {\r\n-\t\t\t\tprintf( '\u003Cspan>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fspan>: %s', esc_html__( 'Downloaded', 'learnpress' ), number_format( $plugin_data->downloaded ) );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003C?php printf( '\u003Cspan>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fspan>: %s', esc_html__( 'Active Installation', 'learnpress' ), number_format( $plugin_data->active_installs ) ); ?>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"rss-widget\">\r\n-\t\u003Cul>\r\n-\t\t\u003Cli>\r\n-\t\t\t\u003Cdiv class=\"rssSummary\">\r\n-\t\t\t\t\u003C?php echo esc_html( $plugin_data->short_description ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n-\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Published', 'learnpress' ), date_i18n( get_option( 'date_format' ), strtotime( $plugin_data->added ) ) ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Updated', 'learnpress' ), date_i18n( get_option( 'date_format' ), strtotime( $plugin_data->last_updated ) ) ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Current Version', 'learnpress' ), $plugin_data->version ); ?>\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying LP information.\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $plugin_data ) || is_wp_error( $plugin_data ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"rss-widget\">\n+\t\u003Cul>\n+\t\t\u003Cli>\n+\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $plugin_data->homepage ); ?>\" class=\"rsswidget\" target=\"_blank\">\u003C?php echo esc_html( $plugin_data->name ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli>\n+\t\t\t\u003C?php\n+\t\t\tif ( ! empty( $plugin_data->downloaded ) ) {\n+\t\t\t\tprintf( '\u003Cspan>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fspan>: %s', esc_html__( 'Downloaded', 'learnpress' ), number_format( $plugin_data->downloaded ) );\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003C?php printf( '\u003Cspan>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fspan>: %s', esc_html__( 'Active Installation', 'learnpress' ), number_format( $plugin_data->active_installs ) ); ?>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\n+\u003Cdiv class=\"rss-widget\">\n+\t\u003Cul>\n+\t\t\u003Cli>\n+\t\t\t\u003Cdiv class=\"rssSummary\">\n+\t\t\t\t\u003C?php echo esc_html( $plugin_data->short_description ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\n+\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Published', 'learnpress' ), date_i18n( get_option( 'date_format' ), strtotime( $plugin_data->added ) ) ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Updated', 'learnpress' ), date_i18n( get_option( 'date_format' ), strtotime( $plugin_data->last_updated ) ) ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php printf( '\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html__( 'Current Version', 'learnpress' ), $plugin_data->version ); ?>\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Feditor-wrapper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Feditor-wrapper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Feditor-wrapper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Feditor-wrapper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u003C?php\r\n-\u002F**\r\n- * Course editor wrapper.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cdiv id=\"admin-editor-\u003C?php echo esc_attr( $post_type ); ?>\">\r\n-\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Course editor wrapper.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cdiv id=\"admin-editor-\u003C?php echo esc_attr( $post_type ); ?>\">\n+\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fglobal\u002Fnotify-action.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fglobal\u002Fnotify-action.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fglobal\u002Fnotify-action.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fglobal\u002Fnotify-action.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying notify action in admin.\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-notify-action-wrapper\">\r\n-\t\u003Cdiv class=\"lp-notify-action clone\">\r\n-\t\t\u003Cp class=\"lp-notify-action__success\">\r\n-\t\t\t\u003Cspan class=\"dashicons dashicons-yes-alt\">\u003C\u002Fspan>\r\n-\t\t\t\u003Cspan class=\"message\">\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003Cp class=\"lp-notify-action__error\">\r\n-\t\t\t\u003Cspan class=\"dashicons dashicons-warning\">\u003C\u002Fspan>\r\n-\t\t\t\u003Cspan class=\"message\">\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying notify action in admin.\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"lp-notify-action-wrapper\">\n+\t\u003Cdiv class=\"lp-notify-action clone\">\n+\t\t\u003Cp class=\"lp-notify-action__success\">\n+\t\t\t\u003Cspan class=\"dashicons dashicons-yes-alt\">\u003C\u002Fspan>\n+\t\t\t\u003Cspan class=\"message\">\u003C\u002Fspan>\n+\t\t\u003C\u002Fp>\n+\t\t\u003Cp class=\"lp-notify-action__error\">\n+\t\t\t\u003Cspan class=\"dashicons dashicons-warning\">\u003C\u002Fspan>\n+\t\t\t\u003Cspan class=\"message\">\u003C\u002Fspan>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-\u003C?php\r\n-\u002F**\r\n- * Notice Out of date template.\r\n- *\r\n- * @author ThimPress (nhamdv)\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-$template_dir   = get_template_directory();\r\n-$stylesheet_dir = get_stylesheet_directory();\r\n-$cradle         = LP_Outdated_Template_Helper::detect_outdated_template();\r\n-$theme          = wp_get_theme();\r\n-$theme_name     = array();\r\n-\r\n-if ( $template_dir === $stylesheet_dir ) {\r\n-\t$theme_name[] = $theme['Name'];\r\n-} else {\r\n-\tif ( $cradle['parent_item'] ) {\r\n-\t\t$theme_name[] = $parent = $theme->__get( 'parent_theme' );\r\n-\t}\r\n-\tif ( $cradle['child_item'] ) {\r\n-\t\t$theme_name[] = $theme['Name'];\r\n-\t}\r\n-}\r\n-$theme_name = implode( ' & ', $theme_name );\r\n-\r\n-$readmore = 'https:\u002F\u002Fthimpress.com\u002Fknowledge-base\u002Foutdated-template-fix\u002F';\r\n-?>\r\n-\r\n-\u003Cdiv id=\"message\" class=\"learn-press-notice notice-warning notice\">\r\n-\t\u003Cp>\u003C?php printf( wp_kses( __( 'There is a new update on LearnPress. You may need to update your theme \u003Cstrong>(%s)\u003C\u002Fstrong> to avoid outdated template files.', 'learnpress' ), array( 'strong' => array() ) ), $theme_name ); ?>\u003C\u002Fp>\r\n-\t\u003Cp class=\"outdated-readmore-link\">\r\n-\t\u003C?php\r\n-\techo sprintf(\r\n-\t\twp_kses(\r\n-\t\t\t__( 'This is not a bug, don\\'t worry. Read more about the outdated template files notice \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">here\u003C\u002Fa>.', 'learnpress' ),\r\n-\t\t\tarray(\r\n-\t\t\t\t'a' => array(\r\n-\t\t\t\t\t'href'   => array(),\r\n-\t\t\t\t\t'target' => array(),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tesc_url_raw( $readmore )\r\n-\t);\r\n-\t?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cp>\r\n-\t\t\u003Ca class=\"button\" href=\"\u003C?php echo admin_url( 'admin.php?page=learn-press-tools&amp;tab=template' ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'View the list of outdated templates', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\t\u003Ca href=\"\" onclick=\"LP.dismissMessage(this, {expired: 3600}); return false;\" data-name=\"outdated-template\" data-value=\"yes\" data-el=\"#message\" data-instant=\"yes\">\r\n-\t\t\t\u003C?php esc_html_e( 'Dismiss', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Notice Out of date template.\n+ *\n+ * @author ThimPress (nhamdv)\n+ * @version 4.0.1\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+$template_dir   = get_template_directory();\n+$stylesheet_dir = get_stylesheet_directory();\n+$cradle         = LP_Outdated_Template_Helper::detect_outdated_template();\n+$theme          = wp_get_theme();\n+$theme_name     = array();\n+\n+if ( $template_dir === $stylesheet_dir ) {\n+\t$theme_name[] = $theme['Name'];\n+} else {\n+\tif ( $cradle['parent_item'] ) {\n+\t\t$theme_name[] = $parent = $theme->__get( 'parent_theme' );\n+\t}\n+\tif ( $cradle['child_item'] ) {\n+\t\t$theme_name[] = $theme['Name'];\n+\t}\n+}\n+$theme_name = implode( ' & ', $theme_name );\n+\n+$readmore = 'https:\u002F\u002Fthimpress.com\u002Fknowledge-base\u002Foutdated-template-fix\u002F';\n+?>\n+\n+\u003Cdiv id=\"message\" class=\"learn-press-notice notice-warning notice\">\n+\t\u003Cp>\u003C?php printf( wp_kses( __( 'There is a new update on LearnPress. You may need to update your theme \u003Cstrong>(%s)\u003C\u002Fstrong> to avoid outdated template files.', 'learnpress' ), array( 'strong' => array() ) ), $theme_name ); ?>\u003C\u002Fp>\n+\t\u003Cp class=\"outdated-readmore-link\">\n+\t\u003C?php\n+\techo sprintf(\n+\t\twp_kses(\n+\t\t\t__( 'This is not a bug, don\\'t worry. Read more about the outdated template files notice \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">here\u003C\u002Fa>.', 'learnpress' ),\n+\t\t\tarray(\n+\t\t\t\t'a' => array(\n+\t\t\t\t\t'href'   => array(),\n+\t\t\t\t\t'target' => array(),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t),\n+\t\tesc_url_raw( $readmore )\n+\t);\n+\t?>\n+\t\u003C\u002Fp>\n+\t\u003Cp>\n+\t\t\u003Ca class=\"button\" href=\"\u003C?php echo admin_url( 'admin.php?page=learn-press-tools&amp;tab=template' ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'View the list of outdated templates', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\t\u003Ca href=\"\" onclick=\"LP.dismissMessage(this, {expired: 3600}); return false;\" data-name=\"outdated-template\" data-value=\"yes\" data-el=\"#message\" data-instant=\"yes\">\n+\t\t\t\u003C?php esc_html_e( 'Dismiss', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,136 +1,136 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP Admin Metabox\r\n- *\r\n- * @author Nhamdv\r\n- * @version 4.0.0\r\n- *\u002F\r\n-abstract class LP_Meta_Box {\r\n-\r\n-\tprivate static $saved_meta_boxes = false;\r\n-\r\n-\tpublic $post_type = LP_COURSE_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Meta_Box constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->includes();\r\n-\r\n-\t\t\u002F\u002F @since 4.0.0\r\n-\t\tadd_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );\r\n-\t\t\u002F\u002F @since 4.2.7\r\n-\t\tadd_action( 'add_meta_boxes', array( $this, '_do_add_meta_boxes' ), 10, 2 );\r\n-\t\tadd_action( 'save_post', array( $this, 'save_meta_boxes' ), 100, 2 );\r\n-\t\tadd_action( 'learnpress_save_' . $this->post_type . '_metabox', array( $this, 'save' ) );\r\n-\r\n-\t\t\u002F\u002Fadd_action( 'learnpress_save_lp_course_metabox', 'LP_Meta_Box_Course::save_eduma_child_metabox_v3', 10 );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Include fields.\r\n-\tpublic function includes() {\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php';\r\n-\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php';\r\n-\t}\r\n-\r\n-\tpublic function add_meta_box() {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle call method add meta boxes\r\n-\t *\r\n-\t * @param $post_type\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7\r\n-\t *\u002F\r\n-\tfinal public function _do_add_meta_boxes( $post_type, $post ) {\r\n-\t\tif ( $post_type !== $this->post_type ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->add_meta_boxes( $post );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Method for add meta boxes\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7\r\n-\t *\u002F\r\n-\tpublic function add_meta_boxes( $post ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\r\n-\tpublic function metabox( $post_id ) {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\tpublic function output( $post ) {\r\n-\t\twp_nonce_field( 'learnpress_save_meta_box', 'learnpress_meta_box_nonce' );\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\tif ( ! empty( $this->metabox( $post_id ) ) ) {\r\n-\t\t\tforeach ( $this->metabox( $post_id ) as $key => $object ) {\r\n-\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t$object->id = $key;\r\n-\t\t\t\t\t$object->save( $post_id );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param id      $post_id\r\n-\t * @param WP_Post $post\r\n-\t *\u002F\r\n-\tpublic function save_meta_boxes( $post_id = 0, $post = null ) {\r\n-\t\t$post_id = absint( $post_id );\r\n-\r\n-\t\tif ( empty( $post_id ) || empty( $post ) || self::$saved_meta_boxes ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $_POST['learnpress_meta_box_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['learnpress_meta_box_nonce'] ), 'learnpress_save_meta_box' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $_POST['post_ID'] ) || absint( $_POST['post_ID'] ) !== $post_id ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( 'edit_post', $post_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tself::$saved_meta_boxes = true;\r\n-\r\n-\t\t\u002F\u002FTODO: Not apply for course,\r\n-\t\t\u002F\u002F but on theme custom fields course is using this hook. Need change how to hook on theme.\r\n-\t\t\u002F*if ( $post->post_type === LP_COURSE_CPT ) {\r\n-\t\t\treturn;\r\n-\t\t}*\u002F\r\n-\t\tdo_action( 'learnpress_save_' . $post->post_type . '_metabox', $post_id, $post );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP Admin Metabox\n+ *\n+ * @author Nhamdv\n+ * @version 4.0.0\n+ *\u002F\n+abstract class LP_Meta_Box {\n+\n+\tprivate static $saved_meta_boxes = false;\n+\n+\tpublic $post_type = LP_COURSE_CPT;\n+\n+\t\u002F**\n+\t * LP_Meta_Box constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->includes();\n+\n+\t\t\u002F\u002F @since 4.0.0\n+\t\tadd_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );\n+\t\t\u002F\u002F @since 4.2.7\n+\t\tadd_action( 'add_meta_boxes', array( $this, '_do_add_meta_boxes' ), 10, 2 );\n+\t\tadd_action( 'save_post', array( $this, 'save_meta_boxes' ), 100, 2 );\n+\t\tadd_action( 'learnpress_save_' . $this->post_type . '_metabox', array( $this, 'save' ) );\n+\n+\t\t\u002F\u002Fadd_action( 'learnpress_save_lp_course_metabox', 'LP_Meta_Box_Course::save_eduma_child_metabox_v3', 10 );\n+\t}\n+\n+\t\u002F\u002F Include fields.\n+\tpublic function includes() {\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php';\n+\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php';\n+\t}\n+\n+\tpublic function add_meta_box() {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Handle call method add meta boxes\n+\t *\n+\t * @param $post_type\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t * @since 4.2.7\n+\t *\u002F\n+\tfinal public function _do_add_meta_boxes( $post_type, $post ) {\n+\t\tif ( $post_type !== $this->post_type ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->add_meta_boxes( $post );\n+\t}\n+\n+\t\u002F**\n+\t * Method for add meta boxes\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t * @since 4.2.7\n+\t *\u002F\n+\tpublic function add_meta_boxes( $post ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\n+\tpublic function metabox( $post_id ) {\n+\t\treturn array();\n+\t}\n+\n+\tpublic function output( $post ) {\n+\t\twp_nonce_field( 'learnpress_save_meta_box', 'learnpress_meta_box_nonce' );\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\tif ( ! empty( $this->metabox( $post_id ) ) ) {\n+\t\t\tforeach ( $this->metabox( $post_id ) as $key => $object ) {\n+\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t$object->id = $key;\n+\t\t\t\t\t$object->save( $post_id );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param id      $post_id\n+\t * @param WP_Post $post\n+\t *\u002F\n+\tpublic function save_meta_boxes( $post_id = 0, $post = null ) {\n+\t\t$post_id = absint( $post_id );\n+\n+\t\tif ( empty( $post_id ) || empty( $post ) || self::$saved_meta_boxes ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( empty( $_POST['learnpress_meta_box_nonce'] ) || ! wp_verify_nonce( wp_unslash( $_POST['learnpress_meta_box_nonce'] ), 'learnpress_save_meta_box' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( empty( $_POST['post_ID'] ) || absint( $_POST['post_ID'] ) !== $post_id ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! current_user_can( 'edit_post', $post_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tself::$saved_meta_boxes = true;\n+\n+\t\t\u002F\u002FTODO: Not apply for course,\n+\t\t\u002F\u002F but on theme custom fields course is using this hook. Need change how to hook on theme.\n+\t\t\u002F*if ( $post->post_type === LP_COURSE_CPT ) {\n+\t\t\treturn;\n+\t\t}*\u002F\n+\t\tdo_action( 'learnpress_save_' . $post->post_type . '_metabox', $post_id, $post );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fassigned.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fassigned.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fassigned.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fassigned.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Lesson, Quiz assigned Meta box\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-global $post;\r\n-$courses = learn_press_get_item_courses( $post->ID );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-item-assigned\">\r\n-\t\u003C?php if ( $courses ) : ?>\r\n-\t\t\u003Cul>\r\n-\t\t\t\u003C?php foreach ( $courses as $course ) : ?>\r\n-\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\u003Cstrong>\u003Ca href=\"\u003C?php echo get_edit_post_link( $course->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $course->ID ); ?>\u003C\u002Fa>\u003C\u002Fstrong>\r\n-\r\n-\t\t\t\t\t&#8212;\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo learn_press_get_course_permalink( $course->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\t\u003C?php\r\n-\telse :\r\n-\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\r\n-\tendif;\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Lesson, Quiz assigned Meta box\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+global $post;\n+$courses = learn_press_get_item_courses( $post->ID );\n+?>\n+\n+\u003Cdiv class=\"lp-item-assigned\">\n+\t\u003C?php if ( $courses ) : ?>\n+\t\t\u003Cul>\n+\t\t\t\u003C?php foreach ( $courses as $course ) : ?>\n+\t\t\t\t\u003Cli>\n+\t\t\t\t\t\u003Cstrong>\u003Ca href=\"\u003C?php echo get_edit_post_link( $course->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $course->ID ); ?>\u003C\u002Fa>\u003C\u002Fstrong>\n+\n+\t\t\t\t\t&#8212;\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo learn_press_get_course_permalink( $course->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Ful>\n+\t\t\u003C?php\n+\telse :\n+\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\n+\tendif;\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fclass-lp-meta-box-course-offline.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,120 +1,120 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Meta_Box_Course_Offline\r\n- *\r\n- * Hide some tabs, fields no need for mode offline.\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-\r\n-class LP_Meta_Box_Course_Offline {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'learnpress\u002Fcourse\u002Fmetabox\u002Ftabs', [ $this, 'hide_tabs_when_enable_offline' ], 9999, 2 );\r\n-\t\tadd_filter( 'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fgeneral', [\r\n-\t\t\t$this,\r\n-\t\t\t'hide_fields_general_when_enable_offline'\r\n-\t\t], 9999, 2 );\r\n-\t\tadd_filter( 'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fprice', [\r\n-\t\t\t$this,\r\n-\t\t\t'hide_fields_price_when_enable_offline'\r\n-\t\t], 9999, 2 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hide tabs when enable offline course\r\n-\t *\r\n-\t * @param array $tabs\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function hide_tabs_when_enable_offline( $tabs, $post_id ) {\r\n-\t\t$course                   = CourseModel::find( $post_id, true );\r\n-\t\t$is_enable_offline_course = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_enable_offline_course = $course->is_offline();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $is_enable_offline_course ) {\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\t$tabs_hide = [\r\n-\t\t\t'assessment',\r\n-\t\t\t'certificates',\r\n-\t\t\t'content_drip',\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $tabs_hide as $tab_hide ) {\r\n-\t\t\tif ( ! isset( $tabs[ $tab_hide ] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tunset( $tabs[ $tab_hide ] );\r\n-\t\t}\r\n-\r\n-\t\treturn $tabs;\r\n-\t}\r\n-\r\n-\r\n-\tpublic function hide_fields_general_when_enable_offline( $fields, $post_id ) {\r\n-\t\t$course                   = CourseModel::find( $post_id, true );\r\n-\t\t$is_enable_offline_course = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_enable_offline_course = $course->is_offline();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $is_enable_offline_course ) {\r\n-\t\t\treturn $fields;\r\n-\t\t}\r\n-\r\n-\t\t$fields_hide = [\r\n-\t\t\tCoursePostModel::META_KEY_BLOCK_EXPIRE_DURATION,\r\n-\t\t\tCoursePostModel::META_KEY_BLOCK_FINISH,\r\n-\t\t\tCoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE,\r\n-\t\t\tCoursePostModel::META_KEY_COURSE_REPURCHASE_OPTION,\r\n-\t\t\tCoursePostModel::META_KEY_RETAKE_COUNT,\r\n-\t\t\tCoursePostModel::META_KEY_HAS_FINISH,\r\n-\t\t\tCoursePostModel::META_KEY_STUDENTS,\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $fields_hide as $field_hide ) {\r\n-\t\t\tif ( ! isset( $fields[ $field_hide ] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tunset( $fields[ $field_hide ] );\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-\r\n-\tpublic function hide_fields_price_when_enable_offline( $fields, $post_id ) {\r\n-\t\t$course                   = CourseModel::find( $post_id, true );\r\n-\t\t$is_enable_offline_course = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_enable_offline_course = $course->is_offline();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $is_enable_offline_course ) {\r\n-\t\t\treturn $fields;\r\n-\t\t}\r\n-\r\n-\t\t$fields_hide = [\r\n-\t\t\t'_lp_no_required_enroll',\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $fields_hide as $field_hide ) {\r\n-\t\t\tif ( ! isset( $fields[ $field_hide ] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tunset( $fields[ $field_hide ] );\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-}\r\n-\r\n-LP_Meta_Box_Course_Offline::instance();\r\n+\u003C?php\n+\u002F**\n+ * LP_Meta_Box_Course_Offline\n+ *\n+ * Hide some tabs, fields no need for mode offline.\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+\n+class LP_Meta_Box_Course_Offline {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'learnpress\u002Fcourse\u002Fmetabox\u002Ftabs', [ $this, 'hide_tabs_when_enable_offline' ], 9999, 2 );\n+\t\tadd_filter( 'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fgeneral', [\n+\t\t\t$this,\n+\t\t\t'hide_fields_general_when_enable_offline'\n+\t\t], 9999, 2 );\n+\t\tadd_filter( 'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fprice', [\n+\t\t\t$this,\n+\t\t\t'hide_fields_price_when_enable_offline'\n+\t\t], 9999, 2 );\n+\t}\n+\n+\t\u002F**\n+\t * Hide tabs when enable offline course\n+\t *\n+\t * @param array $tabs\n+\t * @param int $post_id\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function hide_tabs_when_enable_offline( $tabs, $post_id ) {\n+\t\t$course                   = CourseModel::find( $post_id, true );\n+\t\t$is_enable_offline_course = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_enable_offline_course = $course->is_offline();\n+\t\t}\n+\n+\t\tif ( ! $is_enable_offline_course ) {\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\t$tabs_hide = [\n+\t\t\t'assessment',\n+\t\t\t'certificates',\n+\t\t\t'content_drip',\n+\t\t];\n+\n+\t\tforeach ( $tabs_hide as $tab_hide ) {\n+\t\t\tif ( ! isset( $tabs[ $tab_hide ] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tunset( $tabs[ $tab_hide ] );\n+\t\t}\n+\n+\t\treturn $tabs;\n+\t}\n+\n+\n+\tpublic function hide_fields_general_when_enable_offline( $fields, $post_id ) {\n+\t\t$course                   = CourseModel::find( $post_id, true );\n+\t\t$is_enable_offline_course = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_enable_offline_course = $course->is_offline();\n+\t\t}\n+\n+\t\tif ( ! $is_enable_offline_course ) {\n+\t\t\treturn $fields;\n+\t\t}\n+\n+\t\t$fields_hide = [\n+\t\t\tCoursePostModel::META_KEY_BLOCK_EXPIRE_DURATION,\n+\t\t\tCoursePostModel::META_KEY_BLOCK_FINISH,\n+\t\t\tCoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE,\n+\t\t\tCoursePostModel::META_KEY_COURSE_REPURCHASE_OPTION,\n+\t\t\tCoursePostModel::META_KEY_RETAKE_COUNT,\n+\t\t\tCoursePostModel::META_KEY_HAS_FINISH,\n+\t\t\tCoursePostModel::META_KEY_STUDENTS,\n+\t\t];\n+\n+\t\tforeach ( $fields_hide as $field_hide ) {\n+\t\t\tif ( ! isset( $fields[ $field_hide ] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tunset( $fields[ $field_hide ] );\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+\n+\tpublic function hide_fields_price_when_enable_offline( $fields, $post_id ) {\n+\t\t$course                   = CourseModel::find( $post_id, true );\n+\t\t$is_enable_offline_course = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_enable_offline_course = $course->is_offline();\n+\t\t}\n+\n+\t\tif ( ! $is_enable_offline_course ) {\n+\t\t\treturn $fields;\n+\t\t}\n+\n+\t\t$fields_hide = [\n+\t\t\t'_lp_no_required_enroll',\n+\t\t];\n+\n+\t\tforeach ( $fields_hide as $field_hide ) {\n+\t\t\tif ( ! isset( $fields[ $field_hide ] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tunset( $fields[ $field_hide ] );\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+}\n+\n+LP_Meta_Box_Course_Offline::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,812 +1,769 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-\r\n-class LP_Meta_Box_Course extends LP_Meta_Box {\r\n-\t\u002F**\r\n-\t * Instance\r\n-\t *\r\n-\t * @var null|LP_Meta_Box_Course\r\n-\t *\u002F\r\n-\tprivate static $instance = null;\r\n-\r\n-\tpublic $post_type = LP_COURSE_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_Post $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function add_meta_boxes( $post ) {\r\n-\t\t$course                   = CourseModel::find( $post->ID, true );\r\n-\t\t$is_enable_offline_course = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_enable_offline_course = $course->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\tadd_meta_box(\r\n-\t\t\t'course-settings',\r\n-\t\t\tesc_html__( 'Course Settings', 'learnpress' ),\r\n-\t\t\tarray( $this, 'output' ),\r\n-\t\t\t$this->post_type,\r\n-\t\t\t'normal',\r\n-\t\t\t'high'\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $is_enable_offline_course ) {\r\n-\t\t\tadd_meta_box(\r\n-\t\t\t\t'course-editor',\r\n-\t\t\t\tesc_html__( 'Curriculum', 'learnpress' ),\r\n-\t\t\t\tarray( $this, 'admin_editor' ),\r\n-\t\t\t\t$this->post_type,\r\n-\t\t\t\t'normal',\r\n-\t\t\t\t'high'\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function metabox( $post_id ) {\r\n-\t\t$tabs = apply_filters(\r\n-\t\t\t'lp_course_data_settings_tabs',\r\n-\t\t\tarray(\r\n-\t\t\t\t'general'    => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'General', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'general_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-admin-tools',\r\n-\t\t\t\t\t'priority' => 10,\r\n-\t\t\t\t\t'content'  => $this->general( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'offline'    => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Offline Course', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'offline_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-welcome-view-site',\r\n-\t\t\t\t\t'priority' => 10,\r\n-\t\t\t\t\t'content'  => $this->tab_offline( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'price'      => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Pricing', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'price_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-cart',\r\n-\t\t\t\t\t'priority' => 20,\r\n-\t\t\t\t\t'content'  => $this->lp_price( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'extra'      => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Extra Information', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'extra_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-excerpt-view',\r\n-\t\t\t\t\t'priority' => 30,\r\n-\t\t\t\t\t'content'  => $this->extra( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'assessment' => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Assessment', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'assessment_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-awards',\r\n-\t\t\t\t\t'priority' => 40,\r\n-\t\t\t\t\t'content'  => $this->assessment( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'author'     => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'author_course_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-businessman',\r\n-\t\t\t\t\t'priority' => 50,\r\n-\t\t\t\t\t'content'  => $this->author( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'material'   => array(\r\n-\t\t\t\t\t'label'    => esc_html__( 'Downloadable Materials', 'learnpress' ),\r\n-\t\t\t\t\t'target'   => 'downloadable_material_data',\r\n-\t\t\t\t\t'icon'     => 'dashicons-download',\r\n-\t\t\t\t\t'priority' => 60,\r\n-\t\t\t\t\t'content'  => $this->lp_material( $post_id ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$tabs = apply_filters( 'learnpress\u002Fcourse\u002Fmetabox\u002Ftabs', $tabs, $post_id );\r\n-\r\n-\t\tuasort( $tabs, array( __CLASS__, 'data_tabs_sort' ) );\r\n-\r\n-\t\treturn $tabs;\r\n-\t}\r\n-\r\n-\tpublic function general( $post_id ) {\r\n-\t\t$course                  = CourseModel::find( $post_id, true );\r\n-\t\t$repurchase_option_desc  = sprintf(\r\n-\t\t\t'1. %s',\r\n-\t\t\t__(\r\n-\t\t\t\t'Reset course progress: The course progress and results of student will be removed.',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$repurchase_option_desc .= '\u003Cbr\u002F>' . sprintf(\r\n-\t\t\t'2. %s',\r\n-\t\t\t__(\r\n-\t\t\t\t'Keep course progress: The course progress and results of student will remain.',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$repurchase_option_desc .= '\u003Cbr\u002F>' . sprintf(\r\n-\t\t\t'3. %s',\r\n-\t\t\t__(\r\n-\t\t\t\t'Open popup: The student can decide whether their course progress will be reset with the confirm popup.',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$max_students_desc       = esc_html__(\r\n-\t\t\t'The maximum number of students that can join a course. Set 0 for unlimited.',\r\n-\t\t\t'learnpress'\r\n-\t\t);\r\n-\t\t$max_students_desc      .= '\u003Cbr\u002F>' . esc_html__( 'Not apply for case \"No enroll requirement\".', 'learnpress' );\r\n-\r\n-\t\t$is_enable_allow_course_repurchase = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_enable_allow_course_repurchase = $course->get_meta_value_by_key( CoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE, 'no' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\t$fake_students_desc  = esc_html__( 'Fake students enrolled for the course.', 'learnpress' );\r\n-\t\t$fake_students_desc .= '\u003Cbr>' . esc_html__( 'It only to display, not calculate', 'learnpress' );\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fgeneral',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_duration'                 => new LP_Meta_Box_Duration_Field(\r\n-\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Set to 0 for the lifetime access.', 'learnpress' ),\r\n-\t\t\t\t\t'10 week',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'default_time'      => 'week',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_block_expire_duration'    => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Block content', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'When the duration expires, the course is blocked.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_block_finished'           => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tesc_html__( 'Block the course after the student finished this course.', 'learnpress' ),\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_allow_course_repurchase'  => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\t__( 'Allow Repurchase', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Allow users to repurchase this course after it has been finished or blocked (Do not apply to free courses or Create Order manual).', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_course_repurchase_option' => new LP_Meta_Box_Select_Field(\r\n-\t\t\t\t\tesc_html__( 'Repurchase action', 'learnpress' ),\r\n-\t\t\t\t\t$repurchase_option_desc,\r\n-\t\t\t\t\t'reset',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'options'    => array(\r\n-\t\t\t\t\t\t\t'reset' => esc_html__( 'Reset course progress', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'keep'  => esc_html__( 'Keep course progress', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'popup' => esc_html__( 'Open popup', 'learnpress' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'dependency' => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_allow_course_repurchase',\r\n-\t\t\t\t\t\t\t'is_disable' => ! $is_enable_allow_course_repurchase,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F'show'    => array( '_lp_allow_course_repurchase', '=', 'yes' ), \u002F\u002F use 'show' or 'hide'\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_level'                    => new LP_Meta_Box_Select_Field(\r\n-\t\t\t\t\tesc_html__( 'Level', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Choose a difficulty level.', 'learnpress' ),\r\n-\t\t\t\t\t'all',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'options' => lp_course_level(),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_students'                 => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Fake Students Enrolled', 'learnpress' ),\r\n-\t\t\t\t\t$fake_students_desc,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 70px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_max_students'             => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Max student', 'learnpress' ),\r\n-\t\t\t\t\t$max_students_desc,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 70px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_retake_count'             => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Re-take Course', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The number of times a user can learn again from this course. To disable, set to 0.', 'learnpress' ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 70px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_has_finish'               => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Finish button', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Allow showing the finish button when the student has completed all items but has not passed the course assessment yet.', 'learnpress' ),\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_featured'                 => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Featured list', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Add the course to the Featured List.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_featured_review'          => new LP_Meta_Box_Textarea_Field(\r\n-\t\t\t\t\tesc_html__( 'Featured review', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'A good review to promote the course.', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_external_link_buy_course' => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'External link', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Normally used for offline classes. Ex: link to a contact page. Format: https:\u002F\u002Fgoogle.com', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'desc_tip' => 'You can apply for case: user register form.\u003Cbr> You accept for user can learn courses by add manual order on backend',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t$post_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Tab setting offline course\r\n-\t *\r\n-\t * @param $post_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function tab_offline( $post_id ): array {\r\n-\t\t$course = CourseModel::find( $post_id, true );\r\n-\r\n-\t\t$is_offline_course = false;\r\n-\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t$is_offline_course = $course->is_offline();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Foffline',\r\n-\t\t\tarray(\r\n-\t\t\t\tCoursePostModel::META_KEY_OFFLINE_COURSE => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Enable offline course', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__(\r\n-\t\t\t\t\t\t'When you enable the offline course feature, the system will disable certain online course functions, such as curriculum, finish button, re-take course, block content, repurchase. After checking the checkbox, make sure to click the \"Update\" button to apply the changes successfully.',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\tCoursePostModel::META_KEY_OFFLINE_LESSON_COUNT => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Lessons', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Total lessons of the course.', 'learnpress' ),\r\n-\t\t\t\t\t10,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'dependency'        => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\r\n-\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tCoursePostModel::META_KEY_DELIVER        => new LP_Meta_Box_Select_Field(\r\n-\t\t\t\t\tesc_html__( 'Delivery Type', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'How your content is conveyed to students.', 'learnpress' ),\r\n-\t\t\t\t\t'private_1_1',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'options'    => Config::instance()->get( 'course-deliver-type' ),\r\n-\t\t\t\t\t\t'dependency' => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\r\n-\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tCoursePostModel::META_KEY_ADDRESS        => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Address', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'You can enter the physical address of your class or specify the meeting method (e.g., Zoom, Google Meet, etc.).', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'dependency' => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\r\n-\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t$post_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Setting course price\r\n-\t *\r\n-\t * @param $post_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function lp_price( $post_id ): array {\r\n-\t\t$key_exists    = LP_Database::getInstance()->check_key_postmeta_exists( $post_id, '_lp_regular_price' );\r\n-\t\t$price         = get_post_meta( $post_id, '_lp_price', true );\r\n-\t\t$regular_price = $key_exists ? get_post_meta( $post_id, '_lp_regular_price', true ) : $price;\r\n-\t\t$sale_price    = get_post_meta( $post_id, '_lp_sale_price', true );\r\n-\r\n-\t\t$is_enable_no_required_enroll = get_post_meta( $post_id, '_lp_no_required_enroll', true ) === 'yes' ? 1 : 0;\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fprice',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_regular_price'      => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Regular price', 'learnpress' ),\r\n-\t\t\t\t\tsprintf( __( 'Set a regular price (\u003Cstrong>%s\u003C\u002Fstrong>). Leave it blank for \u003Cstrong>Free\u003C\u002Fstrong>.', 'learnpress' ), learn_press_get_currency() ),\r\n-\t\t\t\t\t$regular_price,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'text',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '0.01',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 150px;',\r\n-\t\t\t\t\t\t'class'             => 'lp_meta_box_regular_price',\r\n-\t\t\t\t\t\t'dependency'        => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\r\n-\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_sale_price'         => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Sale price', 'learnpress' ),\r\n-\t\t\t\t\t'\u003Ca href=\"#\" class=\"lp_sale_price_schedule\">' . esc_html__( 'Schedule', 'learnpress' ) . '\u003C\u002Fa>',\r\n-\t\t\t\t\t$sale_price,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'text',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '0.01',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 150px;',\r\n-\t\t\t\t\t\t'class'             => 'lp_meta_box_sale_price',\r\n-\t\t\t\t\t\t'dependency'        => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\r\n-\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_sale_start'         => new LP_Meta_Box_Date_Field(\r\n-\t\t\t\t\tesc_html__( 'Sale start dates', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'wrapper_class' => 'lp_sale_start_dates_fields',\r\n-\t\t\t\t\t\t'placeholder'   => _x( 'From&hellip;', 'placeholder', 'learnpress' ),\r\n-\t\t\t\t\t\t'dependency'    => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\r\n-\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_sale_end'           => new LP_Meta_Box_Date_Field(\r\n-\t\t\t\t\tesc_html__( 'Sale end dates', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'wrapper_class' => 'lp_sale_end_dates_fields',\r\n-\t\t\t\t\t\t'placeholder'   => _x( 'To&hellip;', 'placeholder', 'learnpress' ),\r\n-\t\t\t\t\t\t'cancel'        => true,\r\n-\t\t\t\t\t\t'dependency'    => [\r\n-\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\r\n-\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_price_prefix'       => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Price prefix', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Show additional information placed before the price such as: Only, From, Up to...', 'learnpress' ),\r\n-\t\t\t\t\t''\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_price_suffix'       => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Price Suffix', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Show additional information placed after the price such as: Included Tax, Per Hour, (Per Week)...', 'learnpress' ),\r\n-\t\t\t\t\t''\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_no_required_enroll' => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'There is no enrollment requirement', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Students can see the content of all course items and take the quiz without logging in.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t$post_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function author( $thepostid ) {\r\n-\t\t$post = get_post( $thepostid );\r\n-\r\n-\t\t$author_id = $post ? $post->post_author : get_current_user_id();\r\n-\r\n-\t\t$options = array();\r\n-\t\t\u002F\u002F Code old only use for addon Frontend Editor v4.0.4\r\n-\t\t\u002F\u002F Code old only use for addon Co-Instructor v4.0.2\r\n-\t\t$can_get_options_users = false;\r\n-\t\tif ( class_exists( 'LP_Addon_Frontend_Editor_Preload' )\r\n-\t\t\t&& defined( 'LP_ADDON_FRONTEND_EDITOR_VER' )\r\n-\t\t\t&& version_compare( LP_ADDON_FRONTEND_EDITOR_VER, '4.0.5', '\u003C' ) ) {\r\n-\t\t\t$can_get_options_users = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( $can_get_options_users ) {\r\n-\t\t\t$author_roles = array( ADMIN_ROLE, LP_TEACHER_ROLE );\r\n-\t\t\t$author_roles = apply_filters( 'learn_press_course_author_role_meta_box', $author_roles );\r\n-\t\t\t$authors      = get_users( [ 'role__in' => $author_roles ] );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var WP_User $author\r\n-\t\t\t *\u002F\r\n-\t\t\tforeach ( $authors as $author ) {\r\n-\t\t\t\t$options[ $author->ID ] = $author->display_name . ' (#' . $author->ID . ')';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F Code old only use for addon Frontend Editor v4.0.4\r\n-\r\n-\t\t$data_struct = [\r\n-\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\r\n-\t\t\t'dataSendApi' => [\r\n-\t\t\t\t'role_in' => ADMIN_ROLE . ',' . LP_TEACHER_ROLE,\r\n-\t\t\t],\r\n-\t\t\t'dataType'    => 'users',\r\n-\t\t\t'keyGetValue' => [\r\n-\t\t\t\t'value'      => 'ID',\r\n-\t\t\t\t'text'       => '{{display_name}}(#{{ID}})',\r\n-\t\t\t\t'key_render' => [\r\n-\t\t\t\t\t'display_name' => 'display_name',\r\n-\t\t\t\t\t'user_email'   => 'user_email',\r\n-\t\t\t\t\t'ID'           => 'ID',\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'setting'     => [\r\n-\t\t\t\t'plugins' => array(),\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fauthor',\r\n-\t\t\tarray(\r\n-\t\t\t\t\u002F\u002F Not use key 'post_author' on single edit course, it special key of WP, Gutenberg save will not submit this key.\r\n-\t\t\t\t'_post_author' => new LP_Meta_Box_Select_Field(\r\n-\t\t\t\t\tesc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t$author_id,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'options'           => $options,\r\n-\t\t\t\t\t\t'style'             => 'min-width:200px;',\r\n-\t\t\t\t\t\t'tom_select'        => true,\r\n-\t\t\t\t\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct ) ) ],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function lp_material( $thepostid ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fmaterial',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_course_material' => new LP_Meta_Box_Material_Fields(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function assessment( $thepostid ) {\r\n-\t\t$post = get_post( $thepostid );\r\n-\r\n-\t\t$course_result_desc = '';\r\n-\t\t$course_results     = get_post_meta( $thepostid, '_lp_course_result', true );\r\n-\r\n-\t\t$course_result_desc .= __( 'The method of evaluating a student\\'s performance in a course.', 'learnpress' );\r\n-\t\t$course_result_desc .= sprintf(\r\n-\t\t\t'\u003Cbr\u002F>\u003Ci style=\"color: red\">%s\u003C\u002Fi>',\r\n-\t\t\t__( 'Note: changing the evaluation type will affect the assessment results of student learning.', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\tif ( $course_results == 'evaluate_final_quiz' && ! get_post_meta( $thepostid, '_lp_final_quiz', true ) ) {\r\n-\t\t\t$course_result_desc .= __( '\u003Cbr \u002F>\u003Cstrong>Note! \u003C\u002Fstrong>There is no final quiz in the course. Please add a final quiz.', 'learnpress' );\r\n-\t\t}\r\n-\r\n-\t\t$final_quizz_passing = '';\r\n-\r\n-\t\t$course = learn_press_get_course( $thepostid );\r\n-\r\n-\t\tif ( $course ) {\r\n-\t\t\t$passing_grade = $url = '';\r\n-\r\n-\t\t\t$final_quiz = $course->get_final_quiz();\r\n-\r\n-\t\t\tif ( $final_quiz ) {\r\n-\t\t\t\t$passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true );\r\n-\r\n-\t\t\t\t$url = get_edit_post_link( $final_quiz ) . '#_lp_passing_grade';\r\n-\r\n-\t\t\t\t$final_quizz_passing = '\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message\">'\r\n-\t\t\t\t\t. sprintf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ) .\r\n-\t\t\t\t\t' - '\r\n-\t\t\t\t\t. sprintf( esc_html__( 'Edit: %s', 'learnpress' ), '\u003Ca href=\"' . esc_url_raw( $url ) . '\">' . get_the_title( $final_quiz ) . '\u003C\u002Fa>' ) .\r\n-\t\t\t\t\t'\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fassessment',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_course_result'     => new LP_Meta_Box_Radio_Field(\r\n-\t\t\t\t\tesc_html__( 'Evaluation', 'learnpress' ),\r\n-\t\t\t\t\t$course_result_desc,\r\n-\t\t\t\t\t'evaluate_lesson',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'options' => learn_press_course_evaluation_methods( $thepostid, '', $final_quizz_passing ),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_passing_condition' => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Passing Grade(%)', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The conditions that must be achieved to finish the course.', 'learnpress' ),\r\n-\t\t\t\t\t'80',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '0.01',\r\n-\t\t\t\t\t\t\t'max'  => '100',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 60px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function extra( $thepostid ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fextra',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_requirements'     => new LP_Meta_Box_Extra_Field(\r\n-\t\t\t\t\tesc_html__( 'Requirements', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray()\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_target_audiences' => new LP_Meta_Box_Extra_Field(\r\n-\t\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray()\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_key_features'     => new LP_Meta_Box_Extra_Field(\r\n-\t\t\t\t\tesc_html__( 'Key Features', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray()\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_faqs'             => new LP_Meta_Box_Extra_Faq_Field(\r\n-\t\t\t\t\tesc_html__( 'FAQs', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray()\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function output( $post ) {\r\n-\t\tparent::output( $post );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--course\">\r\n-\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\r\n-\t\t\t\t\u003Cdiv class=\"lp-meta-box__course-tab\">\r\n-\t\t\t\t\t\u003Cul class=\"lp-meta-box__course-tab__tabs\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $tab ) {\r\n-\t\t\t\t\t\t\tif ( $key === 'author' && ! is_super_admin() ) {\r\n-\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t$class_tab = '';\r\n-\r\n-\t\t\t\t\t\t\tif ( isset( $tab['class'] ) ) {\r\n-\t\t\t\t\t\t\t\t$class_tab = implode( ' ', (array) $tab['class'] );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $key ); ?>_options \u003C?php echo esc_attr( $key ); ?>_tab \u003C?php echo esc_attr( $class_tab ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003Ca href=\"#\u003C?php echo esc_attr( $tab['target'] ); ?>\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php if ( isset( $tab['icon'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ci class=\"\u003C?php echo esc_attr( $tab['icon'] ); ?>\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( $tab['label'] ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-meta-box__course-tab__content\">\r\n-\t\t\t\t\t\t\u003C?php foreach ( $this->metabox( $post->ID ) as $key => $tab_content ) { ?>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tif ( $key === 'author' && ! is_super_admin() ) {\r\n-\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C?php if ( isset( $tab_content['content'] ) ) { ?>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv id=\"\u003C?php echo esc_attr( $tab_content['target'] ); ?>\"\r\n-\t\t\t\t\t\t\t\t\tclass=\"lp-meta-box-course-panels\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t\tdo_action( 'learnpress\u002Fcourse-settings\u002Fbefore-' . $key );\r\n-\r\n-\t\t\t\t\t\t\t\t\tforeach ( $tab_content['content'] as $meta_key => $object ) {\r\n-\t\t\t\t\t\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t\t\t\t\t\t$object->id = $meta_key;\r\n-\t\t\t\t\t\t\t\t\t\t\t$output     = $object->output( $post->ID );\r\n-\t\t\t\t\t\t\t\t\t\t\tif ( ! empty( $output ) ) {\r\n-\t\t\t\t\t\t\t\t\t\t\t\techo wp_kses_post( $output );\r\n-\t\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\t\tdo_action( 'learnpress\u002Fcourse-settings\u002Fafter-' . $key );\r\n-\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tdo_action( 'lp_course_data_setting_tab_content', $post );\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Template Editor Curriculum.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function admin_editor() {\r\n-\t\tglobal $post;\r\n-\r\n-\t\t$course_id   = $post->ID;\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-curriculum\u002Flayout', $courseModel );\r\n-\t}\r\n-\r\n-\t\u002F*public function save( $post_id ) {\r\n-\t\tif ( ! empty( $this->metabox( $post_id ) ) ) {\r\n-\t\t\tforeach ( $this->metabox( $post_id ) as $key => $tab_content ) {\r\n-\t\t\t\tif ( isset( $tab_content['content'] ) ) {\r\n-\t\t\t\t\tforeach ( $tab_content['content'] as $meta_key => $object ) {\r\n-\t\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t\t$object->id = $meta_key;\r\n-\t\t\t\t\t\t\t$object->save( $post_id );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$course = learn_press_get_course( $post_id );\r\n-\r\n-\t\t\u002F\u002F Check price is valid.\r\n-\t\t$price_regular = LP_Request::get( '_lp_regular_price', 0, 'float' );\r\n-\t\t$price_sale    = LP_Request::get( '_lp_sale_price', 0, 'float' );\r\n-\t\tif ( $price_regular \u003C= 0 ) {\r\n-\t\t\t$price_sale = 0;\r\n-\t\t\tupdate_post_meta( $post_id, '_lp_regular_price', '' );\r\n-\t\t}\r\n-\r\n-\t\tif ( $price_sale >= $price_regular || $price_sale \u003C 0 ) {\r\n-\t\t\tupdate_post_meta( $post_id, '_lp_sale_price', '' );\r\n-\t\t}\r\n-\t\t\u002F\u002F End check price.\r\n-\r\n-\t\t$evaluation = LP_Request::get_param( '_lp_course_result', '', 'text', 'post' );\r\n-\t\t\u002F\u002F$passing_condition = isset( $_POST['_lp_passing_condition'] ) ? absint( wp_unslash( $_POST['_lp_passing_condition'] ) ) : 0;\r\n-\r\n-\t\t\u002F\u002F Update Final Quiz. - Nhamdv\r\n-\t\tif ( $evaluation == 'evaluate_final_quiz' ) {\r\n-\t\t\t$items = $course->get_item_ids();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\tif ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {\r\n-\t\t\t\t\t\t$final_quiz = $item;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $final_quiz ) ) {\r\n-\t\t\t\tupdate_post_meta( $post_id, '_lp_final_quiz', $final_quiz );\r\n-\t\t\t} else {\r\n-\t\t\t\tdelete_post_meta( $post_id, '_lp_final_quiz' );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tdelete_post_meta( $post_id, '_lp_final_quiz' );\r\n-\t\t}\r\n-\r\n-\t\t$author = isset( $_POST['_lp_course_author'] ) ? wp_unslash( $_POST['_lp_course_author'] ) : '';\r\n-\t\tif ( ! empty( $author ) ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$wpdb->update( $wpdb->posts, array( 'post_author' => $author ), array( 'ID' => $post_id ) );\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\tprivate static function data_tabs_sort( $a, $b ) {\r\n-\t\tif ( ! isset( $a['priority'], $b['priority'] ) ) {\r\n-\t\t\treturn - 1;\r\n-\t\t}\r\n-\r\n-\t\tif ( $a['priority'] === $b['priority'] ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $a['priority'] \u003C $b['priority'] ? - 1 : 1;\r\n-\t}\r\n-\r\n-\tpublic static function save_eduma_child_metabox_v3( $post_id ) {\r\n-\t\t$general = apply_filters( 'learn_press_course_settings_meta_box_args', array( 'fields' => array() ) );\r\n-\r\n-\t\tif ( ! empty( $general['fields'] ) ) {\r\n-\t\t\tforeach ( $general['fields'] as $field ) {\r\n-\t\t\t\t$value = isset( $_POST[ $field['id'] ] ) ? wp_unslash( $_POST[ $field['id'] ] ) : '';\r\n-\r\n-\t\t\t\tupdate_post_meta( $post_id, $field['id'], $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return LP_Meta_Box_Course\r\n-\t *\u002F\r\n-\tpublic static function instance(): LP_Meta_Box_Course {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Meta_Box_Course::instance();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+\n+class LP_Meta_Box_Course extends LP_Meta_Box {\n+\t\u002F**\n+\t * Instance\n+\t *\n+\t * @var null|LP_Meta_Box_Course\n+\t *\u002F\n+\tprivate static $instance = null;\n+\n+\tpublic $post_type = LP_COURSE_CPT;\n+\n+\t\u002F**\n+\t * @param WP_Post $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function add_meta_boxes( $post ) {\n+\t\t$course                   = CourseModel::find( $post->ID, true );\n+\t\t$is_enable_offline_course = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_enable_offline_course = $course->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\n+\t\t}\n+\n+\t\tadd_meta_box(\n+\t\t\t'course-settings',\n+\t\t\tesc_html__( 'Course Settings', 'learnpress' ),\n+\t\t\tarray( $this, 'output' ),\n+\t\t\t$this->post_type,\n+\t\t\t'normal',\n+\t\t\t'high'\n+\t\t);\n+\n+\t\tif ( ! $is_enable_offline_course ) {\n+\t\t\tadd_meta_box(\n+\t\t\t\t'course-editor',\n+\t\t\t\tesc_html__( 'Curriculum', 'learnpress' ),\n+\t\t\t\tarray( $this, 'admin_editor' ),\n+\t\t\t\t$this->post_type,\n+\t\t\t\t'normal',\n+\t\t\t\t'high'\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function metabox( $post_id ) {\n+\t\t$tabs = apply_filters(\n+\t\t\t'lp_course_data_settings_tabs',\n+\t\t\tarray(\n+\t\t\t\t'general'    => array(\n+\t\t\t\t\t'label'    => esc_html__( 'General', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'general_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-admin-tools',\n+\t\t\t\t\t'priority' => 10,\n+\t\t\t\t\t'content'  => $this->general( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'offline'    => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Offline Course', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'offline_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-welcome-view-site',\n+\t\t\t\t\t'priority' => 10,\n+\t\t\t\t\t'content'  => $this->tab_offline( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'price'      => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Pricing', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'price_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-cart',\n+\t\t\t\t\t'priority' => 20,\n+\t\t\t\t\t'content'  => $this->lp_price( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'extra'      => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Extra Information', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'extra_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-excerpt-view',\n+\t\t\t\t\t'priority' => 30,\n+\t\t\t\t\t'content'  => $this->extra( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'assessment' => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Assessment', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'assessment_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-awards',\n+\t\t\t\t\t'priority' => 40,\n+\t\t\t\t\t'content'  => $this->assessment( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'author'     => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'author_course_data',\n+\t\t\t\t\t'icon'     => 'dashicons-businessman',\n+\t\t\t\t\t'priority' => 50,\n+\t\t\t\t\t'content'  => $this->author( $post_id ),\n+\t\t\t\t),\n+\t\t\t\t'material'   => array(\n+\t\t\t\t\t'label'    => esc_html__( 'Downloadable Materials', 'learnpress' ),\n+\t\t\t\t\t'target'   => 'downloadable_material_data',\n+\t\t\t\t\t'icon'     => 'dashicons-download',\n+\t\t\t\t\t'priority' => 60,\n+\t\t\t\t\t'content'  => $this->lp_material( $post_id ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$tabs = apply_filters( 'learnpress\u002Fcourse\u002Fmetabox\u002Ftabs', $tabs, $post_id );\n+\n+\t\tuasort( $tabs, array( __CLASS__, 'data_tabs_sort' ) );\n+\n+\t\treturn $tabs;\n+\t}\n+\n+\tpublic function general( $post_id ) {\n+\t\t$course                  = CourseModel::find( $post_id, true );\n+\t\t$repurchase_option_desc  = sprintf(\n+\t\t\t'1. %s',\n+\t\t\t__(\n+\t\t\t\t'Reset course progress: The course progress and results of student will be removed.',\n+\t\t\t\t'learnpress'\n+\t\t\t)\n+\t\t);\n+\t\t$repurchase_option_desc .= '\u003Cbr\u002F>' . sprintf(\n+\t\t\t'2. %s',\n+\t\t\t__(\n+\t\t\t\t'Keep course progress: The course progress and results of student will remain.',\n+\t\t\t\t'learnpress'\n+\t\t\t)\n+\t\t);\n+\t\t$repurchase_option_desc .= '\u003Cbr\u002F>' . sprintf(\n+\t\t\t'3. %s',\n+\t\t\t__(\n+\t\t\t\t'Open popup: The student can decide whether their course progress will be reset with the confirm popup.',\n+\t\t\t\t'learnpress'\n+\t\t\t)\n+\t\t);\n+\t\t$max_students_desc       = esc_html__(\n+\t\t\t'The maximum number of students that can join a course. Set 0 for unlimited.',\n+\t\t\t'learnpress'\n+\t\t);\n+\t\t$max_students_desc      .= '\u003Cbr\u002F>' . esc_html__( 'Not apply for case \"No enroll requirement\".', 'learnpress' );\n+\n+\t\t$is_enable_allow_course_repurchase = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_enable_allow_course_repurchase = $course->get_meta_value_by_key( CoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE, 'no' ) === 'yes';\n+\t\t}\n+\n+\t\t$fake_students_desc  = esc_html__( 'Fake students enrolled for the course.', 'learnpress' );\n+\t\t$fake_students_desc .= '\u003Cbr>' . esc_html__( 'It only to display, not calculate', 'learnpress' );\n+\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fgeneral',\n+\t\t\tarray(\n+\t\t\t\t'_lp_duration'                 => new LP_Meta_Box_Duration_Field(\n+\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Set to 0 for the lifetime access.', 'learnpress' ),\n+\t\t\t\t\t'10 week',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'default_time'      => 'week',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_block_expire_duration'    => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Block content', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'When the duration expires, the course is blocked.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_block_finished'           => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\t'',\n+\t\t\t\t\tesc_html__( 'Block the course after the student finished this course.', 'learnpress' ),\n+\t\t\t\t\t'yes'\n+\t\t\t\t),\n+\t\t\t\t'_lp_allow_course_repurchase'  => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\t__( 'Allow Repurchase', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Allow users to repurchase this course after it has been finished or blocked (Do not apply to free courses or Create Order manual).', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_course_repurchase_option' => new LP_Meta_Box_Select_Field(\n+\t\t\t\t\tesc_html__( 'Repurchase action', 'learnpress' ),\n+\t\t\t\t\t$repurchase_option_desc,\n+\t\t\t\t\t'reset',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'options'    => array(\n+\t\t\t\t\t\t\t'reset' => esc_html__( 'Reset course progress', 'learnpress' ),\n+\t\t\t\t\t\t\t'keep'  => esc_html__( 'Keep course progress', 'learnpress' ),\n+\t\t\t\t\t\t\t'popup' => esc_html__( 'Open popup', 'learnpress' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'dependency' => [\n+\t\t\t\t\t\t\t'name'       => '_lp_allow_course_repurchase',\n+\t\t\t\t\t\t\t'is_disable' => ! $is_enable_allow_course_repurchase,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F'show'    => array( '_lp_allow_course_repurchase', '=', 'yes' ), \u002F\u002F use 'show' or 'hide'\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_level'                    => new LP_Meta_Box_Select_Field(\n+\t\t\t\t\tesc_html__( 'Level', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Choose a difficulty level.', 'learnpress' ),\n+\t\t\t\t\t'all',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'options' => lp_course_level(),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_students'                 => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Fake Students Enrolled', 'learnpress' ),\n+\t\t\t\t\t$fake_students_desc,\n+\t\t\t\t\t0,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 70px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_max_students'             => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Max student', 'learnpress' ),\n+\t\t\t\t\t$max_students_desc,\n+\t\t\t\t\t0,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 70px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_retake_count'             => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Re-take Course', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The number of times a user can learn again from this course. To disable, set to 0.', 'learnpress' ),\n+\t\t\t\t\t0,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 70px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_has_finish'               => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Finish button', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Allow showing the finish button when the student has completed all items but has not passed the course assessment yet.', 'learnpress' ),\n+\t\t\t\t\t'yes'\n+\t\t\t\t),\n+\t\t\t\t'_lp_featured'                 => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Featured list', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Add the course to the Featured List.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_featured_review'          => new LP_Meta_Box_Textarea_Field(\n+\t\t\t\t\tesc_html__( 'Featured review', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'A good review to promote the course.', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'_lp_external_link_buy_course' => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'External link', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Normally used for offline classes. Ex: link to a contact page. Format: https:\u002F\u002Fgoogle.com', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'desc_tip' => 'You can apply for case: user register form.\u003Cbr> You accept for user can learn courses by add manual order on backend',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t$post_id\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Tab setting offline course\n+\t *\n+\t * @param $post_id\n+\t *\n+\t * @return array\n+\t * @since 4.2.7\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function tab_offline( $post_id ): array {\n+\t\t$course = CourseModel::find( $post_id, true );\n+\n+\t\t$is_offline_course = false;\n+\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t$is_offline_course = $course->is_offline();\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Foffline',\n+\t\t\tarray(\n+\t\t\t\tCoursePostModel::META_KEY_OFFLINE_COURSE => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Enable offline course', 'learnpress' ),\n+\t\t\t\t\tesc_html__(\n+\t\t\t\t\t\t'When you enable the offline course feature, the system will disable certain online course functions, such as curriculum, finish button, re-take course, block content, repurchase. After checking the checkbox, make sure to click the \"Update\" button to apply the changes successfully.',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\tCoursePostModel::META_KEY_OFFLINE_LESSON_COUNT => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Lessons', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Total lessons of the course.', 'learnpress' ),\n+\t\t\t\t\t10,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'dependency'        => [\n+\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\n+\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tCoursePostModel::META_KEY_DELIVER        => new LP_Meta_Box_Select_Field(\n+\t\t\t\t\tesc_html__( 'Delivery Type', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'How your content is conveyed to students.', 'learnpress' ),\n+\t\t\t\t\t'private_1_1',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'options'    => Config::instance()->get( 'course-deliver-type' ),\n+\t\t\t\t\t\t'dependency' => [\n+\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\n+\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tCoursePostModel::META_KEY_ADDRESS        => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Address', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'You can enter the physical address of your class or specify the meeting method (e.g., Zoom, Google Meet, etc.).', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'dependency' => [\n+\t\t\t\t\t\t\t'name'       => '_lp_offline_course',\n+\t\t\t\t\t\t\t'is_disable' => ! $is_offline_course,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t$post_id\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Setting course price\n+\t *\n+\t * @param $post_id\n+\t *\n+\t * @return array\n+\t * @since 4.1.5\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function lp_price( $post_id ): array {\n+\t\t$key_exists    = LP_Database::getInstance()->check_key_postmeta_exists( $post_id, '_lp_regular_price' );\n+\t\t$price         = get_post_meta( $post_id, '_lp_price', true );\n+\t\t$regular_price = $key_exists ? get_post_meta( $post_id, '_lp_regular_price', true ) : $price;\n+\t\t$sale_price    = get_post_meta( $post_id, '_lp_sale_price', true );\n+\n+\t\t$is_enable_no_required_enroll = get_post_meta( $post_id, '_lp_no_required_enroll', true ) === 'yes' ? 1 : 0;\n+\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fprice',\n+\t\t\tarray(\n+\t\t\t\t'_lp_regular_price'      => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Regular price', 'learnpress' ),\n+\t\t\t\t\tsprintf( __( 'Set a regular price (\u003Cstrong>%s\u003C\u002Fstrong>). Leave it blank for \u003Cstrong>Free\u003C\u002Fstrong>.', 'learnpress' ), learn_press_get_currency() ),\n+\t\t\t\t\t$regular_price,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'text',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '0.01',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 150px;',\n+\t\t\t\t\t\t'class'             => 'lp_meta_box_regular_price',\n+\t\t\t\t\t\t'dependency'        => [\n+\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\n+\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_sale_price'         => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Sale price', 'learnpress' ),\n+\t\t\t\t\t'\u003Ca href=\"#\" class=\"lp_sale_price_schedule\">' . esc_html__( 'Schedule', 'learnpress' ) . '\u003C\u002Fa>',\n+\t\t\t\t\t$sale_price,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'text',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '0.01',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 150px;',\n+\t\t\t\t\t\t'class'             => 'lp_meta_box_sale_price',\n+\t\t\t\t\t\t'dependency'        => [\n+\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\n+\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_sale_start'         => new LP_Meta_Box_Date_Field(\n+\t\t\t\t\tesc_html__( 'Sale start dates', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'wrapper_class' => 'lp_sale_start_dates_fields',\n+\t\t\t\t\t\t'placeholder'   => _x( 'From&hellip;', 'placeholder', 'learnpress' ),\n+\t\t\t\t\t\t'dependency'    => [\n+\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\n+\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_sale_end'           => new LP_Meta_Box_Date_Field(\n+\t\t\t\t\tesc_html__( 'Sale end dates', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'wrapper_class' => 'lp_sale_end_dates_fields',\n+\t\t\t\t\t\t'placeholder'   => _x( 'To&hellip;', 'placeholder', 'learnpress' ),\n+\t\t\t\t\t\t'cancel'        => true,\n+\t\t\t\t\t\t'dependency'    => [\n+\t\t\t\t\t\t\t'name'       => '_lp_no_required_enroll',\n+\t\t\t\t\t\t\t'is_disable' => $is_enable_no_required_enroll,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_price_prefix'       => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Price prefix', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Show additional information placed before the price such as: Only, From, Up to...', 'learnpress' ),\n+\t\t\t\t\t''\n+\t\t\t\t),\n+\t\t\t\t'_lp_price_suffix'       => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Price Suffix', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Show additional information placed after the price such as: Included Tax, Per Hour, (Per Week)...', 'learnpress' ),\n+\t\t\t\t\t''\n+\t\t\t\t),\n+\t\t\t\t'_lp_no_required_enroll' => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'There is no enrollment requirement', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Students can see the content of all course items and take the quiz without logging in.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t$post_id\n+\t\t);\n+\t}\n+\n+\tpublic function author( $thepostid ) {\n+\t\t$post = get_post( $thepostid );\n+\n+\t\t$author_id = $post ? $post->post_author : get_current_user_id();\n+\n+\t\t$options = array();\n+\t\t\u002F\u002F Code old only use for addon Frontend Editor v4.0.4\n+\t\t\u002F\u002F Code old only use for addon Co-Instructor v4.0.2\n+\t\t$can_get_options_users = false;\n+\t\tif ( class_exists( 'LP_Addon_Frontend_Editor_Preload' )\n+\t\t\t&& defined( 'LP_ADDON_FRONTEND_EDITOR_VER' )\n+\t\t\t&& version_compare( LP_ADDON_FRONTEND_EDITOR_VER, '4.0.5', '\u003C' ) ) {\n+\t\t\t$can_get_options_users = true;\n+\t\t}\n+\n+\t\tif ( $can_get_options_users ) {\n+\t\t\t$author_roles = array( ADMIN_ROLE, LP_TEACHER_ROLE );\n+\t\t\t$author_roles = apply_filters( 'learn_press_course_author_role_meta_box', $author_roles );\n+\t\t\t$authors      = get_users( [ 'role__in' => $author_roles ] );\n+\n+\t\t\t\u002F**\n+\t\t\t * @var WP_User $author\n+\t\t\t *\u002F\n+\t\t\tforeach ( $authors as $author ) {\n+\t\t\t\t$options[ $author->ID ] = $author->display_name . ' (#' . $author->ID . ')';\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F Code old only use for addon Frontend Editor v4.0.4\n+\n+\t\t$data_struct = [\n+\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\n+\t\t\t'dataSendApi' => [\n+\t\t\t\t'role_in' => ADMIN_ROLE . ',' . LP_TEACHER_ROLE,\n+\t\t\t],\n+\t\t\t'dataType'    => 'users',\n+\t\t\t'keyGetValue' => [\n+\t\t\t\t'value'      => 'ID',\n+\t\t\t\t'text'       => '{{display_name}}(#{{ID}})',\n+\t\t\t\t'key_render' => [\n+\t\t\t\t\t'display_name' => 'display_name',\n+\t\t\t\t\t'user_email'   => 'user_email',\n+\t\t\t\t\t'ID'           => 'ID',\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'setting'     => [\n+\t\t\t\t'plugins' => array(),\n+\t\t\t],\n+\t\t];\n+\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fauthor',\n+\t\t\tarray(\n+\t\t\t\t\u002F\u002F Not use key 'post_author' on single edit course, it special key of WP, Gutenberg save will not submit this key.\n+\t\t\t\t'_post_author' => new LP_Meta_Box_Select_Field(\n+\t\t\t\t\tesc_html__( 'Author', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\t$author_id,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'options'           => $options,\n+\t\t\t\t\t\t'style'             => 'min-width:200px;',\n+\t\t\t\t\t\t'tom_select'        => true,\n+\t\t\t\t\t\t'custom_attributes' => [\n+\t\t\t\t\t\t\t'data-struct' => htmlentities2( json_encode( $data_struct ) ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function lp_material( $thepostid ) {\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fmaterial',\n+\t\t\tarray(\n+\t\t\t\t'_lp_course_material' => new LP_Meta_Box_Material_Fields(),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function assessment( $thepostid ) {\n+\t\t$post = get_post( $thepostid );\n+\n+\t\t$course_result_desc = '';\n+\t\t$course_results     = get_post_meta( $thepostid, '_lp_course_result', true );\n+\n+\t\t$course_result_desc .= __( 'The method of evaluating a student\\'s performance in a course.', 'learnpress' );\n+\t\t$course_result_desc .= sprintf(\n+\t\t\t'\u003Cbr\u002F>\u003Ci style=\"color: red\">%s\u003C\u002Fi>',\n+\t\t\t__( 'Note: changing the evaluation type will affect the assessment results of student learning.', 'learnpress' )\n+\t\t);\n+\n+\t\tif ( $course_results == 'evaluate_final_quiz' && ! get_post_meta( $thepostid, '_lp_final_quiz', true ) ) {\n+\t\t\t$course_result_desc .= __( '\u003Cbr \u002F>\u003Cstrong>Note! \u003C\u002Fstrong>There is no final quiz in the course. Please add a final quiz.', 'learnpress' );\n+\t\t}\n+\n+\t\t$final_quizz_passing = '';\n+\n+\t\t$course = learn_press_get_course( $thepostid );\n+\n+\t\tif ( $course ) {\n+\t\t\t$passing_grade = $url = '';\n+\n+\t\t\t$final_quiz = $course->get_final_quiz();\n+\n+\t\t\tif ( $final_quiz ) {\n+\t\t\t\t$passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true );\n+\t\t\t\tif ( '' === (string) $passing_grade ) {\n+\t\t\t\t\t$quiz_model = \\LearnPress\\Models\\QuizPostModel::find( absint( $final_quiz ), true );\n+\t\t\t\t\tif ( $quiz_model ) {\n+\t\t\t\t\t\t$passing_grade = $quiz_model->get_passing_grade();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$passing_grade = 80;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$url = get_edit_post_link( $final_quiz ) . '#_lp_passing_grade';\n+\t\t\t\t$url = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcourse\u002Fmeta-box\u002Fassessment\u002Ffinal-quiz\u002Fedit-link',\n+\t\t\t\t\t$url,\n+\t\t\t\t\t$final_quiz,\n+\t\t\t\t\t$thepostid\n+\t\t\t\t);\n+\n+\t\t\t\t$final_quizz_passing = '\n+\t\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message\">'\n+\t\t\t\t\t. sprintf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ) .\n+\t\t\t\t\t' - '\n+\t\t\t\t\t. sprintf( esc_html__( 'Edit: %s', 'learnpress' ), '\u003Ca href=\"' . esc_url_raw( $url ) . '\">' . get_the_title( $final_quiz ) . '\u003C\u002Fa>' ) .\n+\t\t\t\t\t'\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fassessment',\n+\t\t\tarray(\n+\t\t\t\t'_lp_course_result'     => new LP_Meta_Box_Radio_Field(\n+\t\t\t\t\tesc_html__( 'Evaluation', 'learnpress' ),\n+\t\t\t\t\t$course_result_desc,\n+\t\t\t\t\t'evaluate_lesson',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'options' => learn_press_course_evaluation_methods( $thepostid, '', $final_quizz_passing ),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_passing_condition' => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Passing Grade(%)', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The conditions that must be achieved to finish the course.', 'learnpress' ),\n+\t\t\t\t\t'80',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '0.01',\n+\t\t\t\t\t\t\t'max'  => '100',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 60px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function extra( $thepostid ) {\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fcourse\u002Fmeta-box\u002Ffields\u002Fextra',\n+\t\t\tarray(\n+\t\t\t\t'_lp_requirements'     => new LP_Meta_Box_Extra_Field(\n+\t\t\t\t\tesc_html__( 'Requirements', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray()\n+\t\t\t\t),\n+\t\t\t\t'_lp_target_audiences' => new LP_Meta_Box_Extra_Field(\n+\t\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray()\n+\t\t\t\t),\n+\t\t\t\t'_lp_key_features'     => new LP_Meta_Box_Extra_Field(\n+\t\t\t\t\tesc_html__( 'Key Features', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray()\n+\t\t\t\t),\n+\t\t\t\t'_lp_faqs'             => new LP_Meta_Box_Extra_Faq_Field(\n+\t\t\t\t\tesc_html__( 'FAQs', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray()\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function output( $post ) {\n+\t\tparent::output( $post );\n+\n+\t\t$course_id   = $post->ID;\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fcourse\u002Fedit-setting\u002Flayout', $courseModel->ID );\n+\t}\n+\n+\t\u002F**\n+\t * Template Editor Curriculum.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function admin_editor() {\n+\t\tglobal $post;\n+\n+\t\t$course_id   = $post->ID;\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-curriculum\u002Flayout', $courseModel );\n+\t}\n+\n+\t\u002F*public function save( $post_id ) {\n+\t\tif ( ! empty( $this->metabox( $post_id ) ) ) {\n+\t\t\tforeach ( $this->metabox( $post_id ) as $key => $tab_content ) {\n+\t\t\t\tif ( isset( $tab_content['content'] ) ) {\n+\t\t\t\t\tforeach ( $tab_content['content'] as $meta_key => $object ) {\n+\t\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t\t\t$object->id = $meta_key;\n+\t\t\t\t\t\t\t$object->save( $post_id );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$course = learn_press_get_course( $post_id );\n+\n+\t\t\u002F\u002F Check price is valid.\n+\t\t$price_regular = LP_Request::get( '_lp_regular_price', 0, 'float' );\n+\t\t$price_sale    = LP_Request::get( '_lp_sale_price', 0, 'float' );\n+\t\tif ( $price_regular \u003C= 0 ) {\n+\t\t\t$price_sale = 0;\n+\t\t\tupdate_post_meta( $post_id, '_lp_regular_price', '' );\n+\t\t}\n+\n+\t\tif ( $price_sale >= $price_regular || $price_sale \u003C 0 ) {\n+\t\t\tupdate_post_meta( $post_id, '_lp_sale_price', '' );\n+\t\t}\n+\t\t\u002F\u002F End check price.\n+\n+\t\t$evaluation = LP_Request::get_param( '_lp_course_result', '', 'text', 'post' );\n+\t\t\u002F\u002F$passing_condition = isset( $_POST['_lp_passing_condition'] ) ? absint( wp_unslash( $_POST['_lp_passing_condition'] ) ) : 0;\n+\n+\t\t\u002F\u002F Update Final Quiz. - Nhamdv\n+\t\tif ( $evaluation == 'evaluate_final_quiz' ) {\n+\t\t\t$items = $course->get_item_ids();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\tif ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {\n+\t\t\t\t\t\t$final_quiz = $item;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( isset( $final_quiz ) ) {\n+\t\t\t\tupdate_post_meta( $post_id, '_lp_final_quiz', $final_quiz );\n+\t\t\t} else {\n+\t\t\t\tdelete_post_meta( $post_id, '_lp_final_quiz' );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tdelete_post_meta( $post_id, '_lp_final_quiz' );\n+\t\t}\n+\n+\t\t$author = isset( $_POST['_lp_course_author'] ) ? wp_unslash( $_POST['_lp_course_author'] ) : '';\n+\t\tif ( ! empty( $author ) ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$wpdb->update( $wpdb->posts, array( 'post_author' => $author ), array( 'ID' => $post_id ) );\n+\t\t}\n+\t}*\u002F\n+\n+\tprivate static function data_tabs_sort( $a, $b ) {\n+\t\tif ( ! isset( $a['priority'], $b['priority'] ) ) {\n+\t\t\treturn - 1;\n+\t\t}\n+\n+\t\tif ( $a['priority'] === $b['priority'] ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\treturn $a['priority'] \u003C $b['priority'] ? - 1 : 1;\n+\t}\n+\n+\tpublic static function save_eduma_child_metabox_v3( $post_id ) {\n+\t\t$general = apply_filters( 'learn_press_course_settings_meta_box_args', array( 'fields' => array() ) );\n+\n+\t\tif ( ! empty( $general['fields'] ) ) {\n+\t\t\tforeach ( $general['fields'] as $field ) {\n+\t\t\t\t$value = isset( $_POST[ $field['id'] ] ) ? wp_unslash( $_POST[ $field['id'] ] ) : '';\n+\n+\t\t\t\tupdate_post_meta( $post_id, $field['id'], $value );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return LP_Meta_Box_Course\n+\t *\u002F\n+\tpublic static function instance(): LP_Meta_Box_Course {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+LP_Meta_Box_Course::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fautocomplete.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,125 +1,125 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- *\r\n- * @author nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.1.7\r\n- *\u002F\r\n-class LP_Meta_Box_Autocomplete_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * @param array $field\r\n-\t * @param array $extra = array( 'placeholder' => 'Select an item', 'action': rest_url( 'wp\u002Fv2\u002Fusers' ), rest_url( 'wp\u002Fv2\u002Fpost' ), rest_url( 'wp\u002Fv2\u002Fpage' ), 'data': users, page, post, course, lesson )\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\t\u002F\u002F Enqueue scripts here for future use everywhere called.\r\n-\t\twp_enqueue_script( 'lp-admin-learnpress' );\r\n-\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$meta = $this->meta_value( $thepostid );\r\n-\r\n-\t\t$default = ( ! $meta && isset( $field['default'] ) ) ? (array) $field['default'] : $meta;\r\n-\r\n-\t\t$field = wp_parse_args(\r\n-\t\t\t$field,\r\n-\t\t\tarray(\r\n-\t\t\t\t'class'             => 'select',\r\n-\t\t\t\t'style'             => '',\r\n-\t\t\t\t'wrapper_class'     => '',\r\n-\t\t\t\t'value'             => isset( $field['value'] ) ? $field['value'] : $default,\r\n-\t\t\t\t'name'              => $field['id'],\r\n-\t\t\t\t'desc_tip'          => false,\r\n-\t\t\t\t'custom_attributes' => array(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$wrapper_class = ! empty( $field['wrapper_class'] ) ? esc_attr( $field['wrapper_class'] ) : '';\r\n-\r\n-\t\t$field_attributes             = (array) $field['custom_attributes'];\r\n-\t\t$field_attributes['style']    = 'width: 300px;' . $field['style'];\r\n-\t\t$field_attributes['id']       = $field['id'];\r\n-\t\t$field_attributes['name']     = $field['name'] . '[]';\r\n-\t\t$field_attributes['class']    = $field['class'];\r\n-\t\t$field_attributes['multiple'] = true;\r\n-\r\n-\t\t$data_atts = array(\r\n-\t\t\t'placeholder' => $field['placeholder'] ?? esc_html__( 'Select', 'learnpress' ),\r\n-\t\t\t'action'      => $field['action'] ?? '',\r\n-\t\t\t'data'        => $field['data'] ?? '', \u002F\u002F users, pages, posts, lp_course, lp_lesson...\r\n-\t\t\t'nonce'       => wp_create_nonce( 'wp_rest' ),\r\n-\t\t\t'rest_url'    => rest_url(),\r\n-\t\t);\r\n-\t\t?>\r\n-\t\t\u003Cp class=\"form-field lp_autocomplete_metabox_field \u003C?php echo esc_attr( $field['id'] . '_field ' . $wrapper_class ); ?>\"\r\n-\t\t\tdata-atts=\"\u003C?php echo esc_attr( wp_json_encode( $data_atts ) ); ?>\">\r\n-\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\r\n-\t\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( ! empty( $field['value'] ) ) {\r\n-\t\t\t\t\tforeach ( $field['value'] as $value ) {\r\n-\t\t\t\t\t\tif ( ! empty( $field['data'] ) ) {\r\n-\t\t\t\t\t\t\tif ( $field['data'] === 'users' ) {\r\n-\t\t\t\t\t\t\t\t$user = get_user_by( 'id', $value );\r\n-\r\n-\t\t\t\t\t\t\t\tif ( ! $user ) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $user->display_name ) . '\u003C\u002Foption>';\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$post = get_post( $value );\r\n-\t\t\t\t\t\t\t\tif ( ! $post ) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $post->post_title ) . '\u003C\u002Foption>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $value ) . '\u003C\u002Foption>';\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fmetabox\u002Fautocomplete\u002F' . $field['id'] . '\u002Foption', $field['value'], $field, $thepostid );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = LP_Request::get_param( $this->id, $this->default ?? [] );\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ *\n+ * @author nhamdv\n+ * @version 1.0.0\n+ * @since 4.1.7\n+ *\u002F\n+class LP_Meta_Box_Autocomplete_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * @param array $field\n+\t * @param array $extra = array( 'placeholder' => 'Select an item', 'action': rest_url( 'wp\u002Fv2\u002Fusers' ), rest_url( 'wp\u002Fv2\u002Fpost' ), rest_url( 'wp\u002Fv2\u002Fpage' ), 'data': users, page, post, course, lesson )\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\t\u002F\u002F Enqueue scripts here for future use everywhere called.\n+\t\twp_enqueue_script( 'lp-admin-learnpress' );\n+\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$meta = $this->meta_value( $thepostid );\n+\n+\t\t$default = ( ! $meta && isset( $field['default'] ) ) ? (array) $field['default'] : $meta;\n+\n+\t\t$field = wp_parse_args(\n+\t\t\t$field,\n+\t\t\tarray(\n+\t\t\t\t'class'             => 'select',\n+\t\t\t\t'style'             => '',\n+\t\t\t\t'wrapper_class'     => '',\n+\t\t\t\t'value'             => isset( $field['value'] ) ? $field['value'] : $default,\n+\t\t\t\t'name'              => $field['id'],\n+\t\t\t\t'desc_tip'          => false,\n+\t\t\t\t'custom_attributes' => array(),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$wrapper_class = ! empty( $field['wrapper_class'] ) ? esc_attr( $field['wrapper_class'] ) : '';\n+\n+\t\t$field_attributes             = (array) $field['custom_attributes'];\n+\t\t$field_attributes['style']    = 'width: 300px;' . $field['style'];\n+\t\t$field_attributes['id']       = $field['id'];\n+\t\t$field_attributes['name']     = $field['name'] . '[]';\n+\t\t$field_attributes['class']    = $field['class'];\n+\t\t$field_attributes['multiple'] = true;\n+\n+\t\t$data_atts = array(\n+\t\t\t'placeholder' => $field['placeholder'] ?? esc_html__( 'Select', 'learnpress' ),\n+\t\t\t'action'      => $field['action'] ?? '',\n+\t\t\t'data'        => $field['data'] ?? '', \u002F\u002F users, pages, posts, lp_course, lp_lesson...\n+\t\t\t'nonce'       => wp_create_nonce( 'wp_rest' ),\n+\t\t\t'rest_url'    => rest_url(),\n+\t\t);\n+\t\t?>\n+\t\t\u003Cp class=\"form-field lp_autocomplete_metabox_field \u003C?php echo esc_attr( $field['id'] . '_field ' . $wrapper_class ); ?>\"\n+\t\t\tdata-atts=\"\u003C?php echo esc_attr( wp_json_encode( $data_atts ) ); ?>\">\n+\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\n+\t\t\t\u003C\u002Flabel>\n+\n+\t\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( ! empty( $field['value'] ) ) {\n+\t\t\t\t\tforeach ( $field['value'] as $value ) {\n+\t\t\t\t\t\tif ( ! empty( $field['data'] ) ) {\n+\t\t\t\t\t\t\tif ( $field['data'] === 'users' ) {\n+\t\t\t\t\t\t\t\t$user = get_user_by( 'id', $value );\n+\n+\t\t\t\t\t\t\t\tif ( ! $user ) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $user->display_name ) . '\u003C\u002Foption>';\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$post = get_post( $value );\n+\t\t\t\t\t\t\t\tif ( ! $post ) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $post->post_title ) . '\u003C\u002Foption>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\techo '\u003Coption value=\"' . esc_attr( $value ) . '\" selected>' . esc_html( $value ) . '\u003C\u002Foption>';\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fmetabox\u002Fautocomplete\u002F' . $field['id'] . '\u002Foption', $field['value'], $field, $thepostid );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\n+\t\t\t\u003C?php\n+\t\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = LP_Request::get_param( $this->id, $this->default ?? [] );\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fcheckbox.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,102 +1,105 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Checkbox_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$class         = ! empty( $field['class'] ) ? 'class=\"' . esc_attr( $field['class'] ) . '\"' : '';\r\n-\t\t$style         = ! empty( $field['style'] ) ? 'style=\"' . esc_attr( $field['style'] ) . '\"' : '';\r\n-\t\t$wrapper_class = ! empty( $field['wrapper_class'] ) ? esc_attr( $field['wrapper_class'] ) : '';\r\n-\t\t$wrapper_attr  = $this->extra['wrapper_attr'] ?? [];\r\n-\t\t$name          = ! empty( $field['name'] ) ? esc_attr( $field['name'] ) : esc_attr( $field['id'] );\r\n-\t\t$name          = 'name=\"' . $name . '\"';\r\n-\r\n-\t\t$value_db = $this->meta_value( $thepostid );\r\n-\r\n-\t\tif ( ! $value_db && $field['default'] !== '' ) {\r\n-\t\t\t$value_db = $field['default'];\r\n-\t\t}\r\n-\r\n-\t\t$checked = '';\r\n-\t\tif ( 'yes' === $value_db ) {\r\n-\t\t\t$checked = 'checked=\"checked\"';\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $field['value'] ) && $field['value'] === 'yes' ) {\r\n-\t\t\t$checked = 'checked=\"checked\"';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Custom attribute handling\r\n-\t\t$custom_attributes = array();\r\n-\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$dependency_check = $this->extra['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$wrapper_class .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\r\n-\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\r\n-\t\t\timplode( ' ', $wrapper_attr ),\r\n-\t\t\tesc_attr( $this->id ),\r\n-\t\t\twp_kses_post( $this->label )\r\n-\t\t);\r\n-\r\n-\t\techo '\u003Cinput type=\"checkbox\" ' . $class . ' ' . $style . ' ' . $name . ' ' . $checked . ' id=\"' . esc_attr( $field['id'] ) . '\" ' . implode( ' ', $custom_attributes ) . '\u002F> ';\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = isset( $_POST[ $this->id ] ) ? 'yes' : 'no';\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Checkbox_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$class         = ! empty( $field['class'] ) ? 'class=\"' . esc_attr( $field['class'] ) . '\"' : '';\n+\t\t$style         = ! empty( $field['style'] ) ? 'style=\"' . esc_attr( $field['style'] ) . '\"' : '';\n+\t\t$wrapper_class = ! empty( $field['wrapper_class'] ) ? esc_attr( $field['wrapper_class'] ) : '';\n+\t\t$wrapper_attr  = $this->extra['wrapper_attr'] ?? [];\n+\t\t$name          = ! empty( $field['name'] ) ? esc_attr( $field['name'] ) : esc_attr( $field['id'] );\n+\t\t$name          = 'name=\"' . $name . '\"';\n+\n+\t\t\u002F\u002F Check if meta key exists in database\n+\t\t$meta_exists = metadata_exists( 'post', $thepostid, $this->id );\n+\t\t$value_db    = $this->meta_value( $thepostid );\n+\n+\t\t\u002F\u002F Only use default if meta key doesn't exist in database\n+\t\tif ( ! $meta_exists && $field['default'] !== '' ) {\n+\t\t\t$value_db = $field['default'];\n+\t\t}\n+\n+\t\t$checked = '';\n+\t\tif ( 'yes' === $value_db ) {\n+\t\t\t$checked = 'checked=\"checked\"';\n+\t\t}\n+\n+\t\tif ( isset( $field['value'] ) && $field['value'] === 'yes' ) {\n+\t\t\t$checked = 'checked=\"checked\"';\n+\t\t}\n+\n+\t\t\u002F\u002F Custom attribute handling\n+\t\t$custom_attributes = array();\n+\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$dependency_check = $this->extra['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$wrapper_class .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\n+\t\tprintf(\n+\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\n+\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\n+\t\t\timplode( ' ', $wrapper_attr ),\n+\t\t\tesc_attr( $this->id ),\n+\t\t\twp_kses_post( $this->label )\n+\t\t);\n+\n+\t\techo '\u003Cinput type=\"checkbox\" ' . $class . ' ' . $style . ' ' . $name . ' ' . $checked . ' id=\"' . esc_attr( $field['id'] ) . '\" ' . implode( ' ', $custom_attributes ) . '\u002F> ';\n+\n+\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = isset( $_POST[ $this->id ] ) ? 'yes' : 'no';\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fclass-lp-meta-box-fields.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,89 +1,89 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Field\r\n- *\r\n- * @author nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Field {\r\n-\t\u002F**\r\n-\t * Key id of field\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $id = '';\r\n-\r\n-\t\u002F**\r\n-\t * Label of field\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $label = '';\r\n-\r\n-\t\u002F**\r\n-\t * Description of field\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $description = '';\r\n-\r\n-\t\u002F**\r\n-\t * Value default of field\r\n-\t *\r\n-\t * @var mixed\r\n-\t *\u002F\r\n-\tpublic $default;\r\n-\r\n-\t\u002F**\r\n-\t * Extra array.\r\n-\t *\r\n-\t * @var string $class\r\n-\t *\u002F\r\n-\tpublic $extra = array();\r\n-\r\n-\t\u002F**\r\n-\t * Condition logic show or hide when checkbox, select or...\r\n-\t *\u002F\r\n-\tpublic $condition = false;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Meta_Box_Attribute constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed  $default\r\n-\t * @param mixed  $desc_tip\r\n-\t * @param mixed  $class\r\n-\t * @param mixed  $style\r\n-\t * @param array  $custom_attributes\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\t$this->label       = $label;\r\n-\t\t$this->description = $description;\r\n-\t\t$this->default     = $default;\r\n-\t\t$this->extra       = $extra;\r\n-\r\n-\t\t$show = ! empty( $extra['show'] ) ? htmlentities( wp_json_encode( $extra['show'] ) ) : false;\r\n-\t\t$hide = ! empty( $extra['hide'] ) ? htmlentities( wp_json_encode( $extra['hide'] ) ) : false;\r\n-\r\n-\t\tif ( $show ) {\r\n-\t\t\t$this->condition = 'data-show=\"' . $show . '\"';\r\n-\t\t} elseif ( $hide ) {\r\n-\t\t\t$this->condition = 'data-hide=\"' . $hide . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function meta_value( $thepostid ) {\r\n-\t\treturn get_post_meta( $thepostid, $this->id, true );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Field\n+ *\n+ * @author nhamdv\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Field {\n+\t\u002F**\n+\t * Key id of field\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $id = '';\n+\n+\t\u002F**\n+\t * Label of field\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $label = '';\n+\n+\t\u002F**\n+\t * Description of field\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $description = '';\n+\n+\t\u002F**\n+\t * Value default of field\n+\t *\n+\t * @var mixed\n+\t *\u002F\n+\tpublic $default;\n+\n+\t\u002F**\n+\t * Extra array.\n+\t *\n+\t * @var string $class\n+\t *\u002F\n+\tpublic $extra = array();\n+\n+\t\u002F**\n+\t * Condition logic show or hide when checkbox, select or...\n+\t *\u002F\n+\tpublic $condition = false;\n+\n+\t\u002F**\n+\t * LP_Meta_Box_Attribute constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed  $default\n+\t * @param mixed  $desc_tip\n+\t * @param mixed  $class\n+\t * @param mixed  $style\n+\t * @param array  $custom_attributes\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\t$this->label       = $label;\n+\t\t$this->description = $description;\n+\t\t$this->default     = $default;\n+\t\t$this->extra       = $extra;\n+\n+\t\t$show = ! empty( $extra['show'] ) ? htmlentities( wp_json_encode( $extra['show'] ) ) : false;\n+\t\t$hide = ! empty( $extra['hide'] ) ? htmlentities( wp_json_encode( $extra['hide'] ) ) : false;\n+\n+\t\tif ( $show ) {\n+\t\t\t$this->condition = 'data-show=\"' . $show . '\"';\n+\t\t} elseif ( $hide ) {\n+\t\t\t$this->condition = 'data-hide=\"' . $hide . '\"';\n+\t\t}\n+\t}\n+\n+\tpublic function meta_value( $thepostid ) {\n+\t\treturn get_post_meta( $thepostid, $this->id, true );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\treturn '';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Date_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\t$date = $this->meta_value( $thepostid );\r\n-\t\tif ( ! empty( $date ) ) {\r\n-\t\t\t$dateObj = new LP_Datetime( $date );\r\n-\t\t\t$date    = $dateObj->format( 'mysql' );\r\n-\t\t}\r\n-\r\n-\t\t$wrapper_attr     = $this->extra['wrapper_attr'] ?? [];\r\n-\t\t$dependency_check = $this->extra['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$this->extra['wrapper_class'] .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp_sale_dates_fields\">\r\n-\t\t\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $this->extra['wrapper_class'] ); ?>\"\r\n-\t\t\t\t\u003C?php echo esc_attr( implode( ' ', $wrapper_attr ) ) ?>>\r\n-\t\t\t\t\u003Clabel for=\"_lp_sale_start\">\u003C?php echo wp_kses_post( $this->label ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput type=\"datetime-local\" class=\"short\" name=\"\u003C?php echo esc_attr( $this->id ); ?>\"\r\n-\t\t\t\t\t   step=1\r\n-\t\t\t\t\t   id=\"\u003C?php echo esc_attr( $this->id ); ?>\"\r\n-\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $date ); ?>\"\r\n-\t\t\t\t\t   placeholder=\"\u003C?php echo esc_attr( $this->extra['placeholder'] ); ?>\"\r\n-\t\t\t\t\t   style=\"width:320px;\"\u002F>\r\n-\r\n-\t\t\t\t\u003C?php if ( ! empty( $this->extra['cancel'] ) ) : ?>\r\n-\t\t\t\t\t\u003Ca href=\"#\" class=\"description lp_cancel_sale_schedule\">\r\n-\t\t\t\t\t\t\u003C?php esc_html_e( 'Cancel', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '' );\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Date_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\t$date = $this->meta_value( $thepostid );\n+\t\tif ( ! empty( $date ) ) {\n+\t\t\t$dateObj = new LP_Datetime( $date );\n+\t\t\t$date    = $dateObj->format( 'mysql' );\n+\t\t}\n+\n+\t\t$wrapper_attr     = $this->extra['wrapper_attr'] ?? [];\n+\t\t$dependency_check = $this->extra['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$this->extra['wrapper_class'] .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"lp_sale_dates_fields\">\n+\t\t\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $this->extra['wrapper_class'] ); ?>\"\n+\t\t\t\t\u003C?php echo esc_attr( implode( ' ', $wrapper_attr ) ) ?>>\n+\t\t\t\t\u003Clabel for=\"_lp_sale_start\">\u003C?php echo wp_kses_post( $this->label ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput type=\"datetime-local\" class=\"short\" name=\"\u003C?php echo esc_attr( $this->id ); ?>\"\n+\t\t\t\t\t   step=1\n+\t\t\t\t\t   id=\"\u003C?php echo esc_attr( $this->id ); ?>\"\n+\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $date ); ?>\"\n+\t\t\t\t\t   placeholder=\"\u003C?php echo esc_attr( $this->extra['placeholder'] ); ?>\"\n+\t\t\t\t\t   style=\"width:320px;\"\u002F>\n+\n+\t\t\t\t\u003C?php if ( ! empty( $this->extra['cancel'] ) ) : ?>\n+\t\t\t\t\t\u003Ca href=\"#\" class=\"description lp_cancel_sale_schedule\">\n+\t\t\t\t\t\t\u003C?php esc_html_e( 'Cancel', 'learnpress' ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '' );\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fduration.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,100 +1,100 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Duration_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$field['placeholder']   = isset( $field['placeholder'] ) ? $field['placeholder'] : '';\r\n-\t\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'short';\r\n-\t\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\r\n-\t\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\r\n-\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\r\n-\t\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\r\n-\t\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\r\n-\t\t$data_type              = empty( $field['data_type'] ) ? '' : $field['data_type'];\r\n-\t\t$duration               = learn_press_get_course_duration_support();\r\n-\r\n-\t\t$duration_keys = array_keys( $duration );\r\n-\t\t$default_time  = ! empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );\r\n-\r\n-\t\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $field['value'], $matches ) ) {\r\n-\t\t\t$a1 = $matches[1][0];\r\n-\t\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;\r\n-\t\t} else {\r\n-\t\t\t$a1 = absint( $field['value'] );\r\n-\t\t\t$a2 = $default_time;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Custom attribute handling\r\n-\t\t$custom_attributes = array();\r\n-\r\n-\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$html_option = '';\r\n-\t\tforeach ( $duration as $k => $v ) {\r\n-\t\t\t$html_option .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', $k, selected( $k, $a2, false ), $v );\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cp class=\"lp-meta-box__duration form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '\">\r\n-\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\r\n-\r\n-\t\techo '\u003Cinput type=\"number\" class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\" name=\"' . esc_attr( $field['name'] ) . '[]\" id=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( $a1 ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" ' . implode( ' ', $custom_attributes ) . ' \u002F> ';\r\n-\r\n-\t\techo '\u003Cselect name=\"' . esc_attr( $field['name'] ) . '[]\" class=\"lp-meta-box__duration-select\">' . $html_option . '\u003C\u002Fselect>';\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Fp>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$duration      = learn_press_get_course_duration_support();\r\n-\t\t$duration_keys = array_keys( $duration );\r\n-\t\t$default_time  = ! empty( $this->extra['default_time'] ) ? $this->extra['default_time'] : end( $duration_keys );\r\n-\t\t$data          = LP_Request::get_param( $this->id, [] );\r\n-\t\t$duration      = isset( $data[0] ) && $data[0] !== '' ? absint( $data[0] ) . ' ' . trim( $data[1] ) : absint( $this->default ) . ' ' . trim( $default_time );\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $duration );\r\n-\r\n-\t\treturn $duration;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Duration_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$field['placeholder']   = isset( $field['placeholder'] ) ? $field['placeholder'] : '';\n+\t\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'short';\n+\t\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\n+\t\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\n+\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\n+\t\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\n+\t\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\n+\t\t$data_type              = empty( $field['data_type'] ) ? '' : $field['data_type'];\n+\t\t$duration               = learn_press_get_course_duration_support();\n+\n+\t\t$duration_keys = array_keys( $duration );\n+\t\t$default_time  = ! empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );\n+\n+\t\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $field['value'], $matches ) ) {\n+\t\t\t$a1 = $matches[1][0];\n+\t\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;\n+\t\t} else {\n+\t\t\t$a1 = absint( $field['value'] );\n+\t\t\t$a2 = $default_time;\n+\t\t}\n+\n+\t\t\u002F\u002F Custom attribute handling\n+\t\t$custom_attributes = array();\n+\n+\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$html_option = '';\n+\t\tforeach ( $duration as $k => $v ) {\n+\t\t\t$html_option .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', $k, selected( $k, $a2, false ), $v );\n+\t\t}\n+\n+\t\techo '\u003Cp class=\"lp-meta-box__duration form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '\">\n+\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\n+\n+\t\techo '\u003Cinput type=\"number\" class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\" name=\"' . esc_attr( $field['name'] ) . '[]\" id=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( $a1 ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" ' . implode( ' ', $custom_attributes ) . ' \u002F> ';\n+\n+\t\techo '\u003Cselect name=\"' . esc_attr( $field['name'] ) . '[]\" class=\"lp-meta-box__duration-select\">' . $html_option . '\u003C\u002Fselect>';\n+\n+\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003C\u002Fp>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$duration      = learn_press_get_course_duration_support();\n+\t\t$duration_keys = array_keys( $duration );\n+\t\t$default_time  = ! empty( $this->extra['default_time'] ) ? $this->extra['default_time'] : end( $duration_keys );\n+\t\t$data          = LP_Request::get_param( $this->id, [] );\n+\t\t$duration      = isset( $data[0] ) && $data[0] !== '' ? absint( $data[0] ) . ' ' . trim( $data[1] ) : absint( $this->default ) . ' ' . trim( $default_time );\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $duration );\n+\n+\t\treturn $duration;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed  $default\r\n-\t * @param array  $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\t$faqs = $this->meta_value( $thepostid );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"form-field lp_course_faq_meta_box\">\r\n-\t\t\t\u003Clabel for=\"_lp_key_features\">\u003C?php echo wp_kses_post( $this->label ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__content\">\r\n-\t\t\t\t\u003Cinput type=\"hidden\" name=\"\u003C?php echo esc_attr( $this->id ) ?>\" value=\"\">\r\n-\t\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__fields\">\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $faqs[0][0] ) ) : ?>\r\n-\t\t\t\t\t\t\u003C?php foreach ( $faqs as $key => $faq ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__field\">\r\n-\t\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\t\u003Cspan>\u003C?php esc_attr_e( 'Title', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" name=\"_lp_faqs_question[]\" value=\"\u003C?php echo esc_attr( $faq[0] ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\t\u003Cspan>\u003C?php esc_attr_e( 'Content', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_faqs_answer[]\">\u003C?php echo wp_kses_post( $faq[1] ); ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_course_faq_meta_box__add\"\r\n-\t\t\t\t\tdata-add=\"\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\techo esc_attr(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lp_course_faq_meta_box__field\">\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cspan>' . esc_attr__( 'Title', 'learnpress' ) . '\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" name=\"_lp_faqs_question[]\" value=\"\">\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cspan>' . esc_attr__( 'Content', 'learnpress' ) . '\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_faqs_answer[]\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\">\u003C?php esc_html_e( '+ Add more', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$faqs_question = LP_Request::get_param( '_lp_faqs_question', [], 'html' );\r\n-\t\t$faqs_answer   = LP_Request::get_param( '_lp_faqs_answer', [], 'html' );\r\n-\r\n-\t\t$faqs = array();\r\n-\t\tif ( ! empty( $faqs_question ) ) {\r\n-\t\t\t$faqs_question_size = count( $faqs_question );\r\n-\r\n-\t\t\tfor ( $i = 0; $i \u003C $faqs_question_size; $i ++ ) {\r\n-\t\t\t\tif ( ! empty( $faqs_question[ $i ] ) ) {\r\n-\t\t\t\t\t$faqs[] = array( $faqs_question[ $i ], $faqs_answer[ $i ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $faqs );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Extra_Faq_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed  $default\n+\t * @param array  $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\t$faqs = $this->meta_value( $thepostid );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"form-field lp_course_faq_meta_box\">\n+\t\t\t\u003Clabel for=\"_lp_key_features\">\u003C?php echo wp_kses_post( $this->label ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__content\">\n+\t\t\t\t\u003Cinput type=\"hidden\" name=\"\u003C?php echo esc_attr( $this->id ) ?>\" value=\"\">\n+\t\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__fields\">\n+\t\t\t\t\t\u003C?php if ( is_array( $faqs ) && ! empty( $faqs[0][0] ) ) : ?>\n+\t\t\t\t\t\t\u003C?php foreach ( $faqs as $key => $faq ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp_course_faq_meta_box__field\">\n+\t\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\t\u003Cspan>\u003C?php esc_attr_e( 'Title', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" name=\"_lp_faqs_question[]\" value=\"\u003C?php echo esc_attr( $faq[0] ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\t\u003Cspan>\u003C?php esc_attr_e( 'Content', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_faqs_answer[]\">\u003C?php echo wp_kses_post( $faq[1] ); ?>\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_course_faq_meta_box__add\"\n+\t\t\t\t\tdata-add=\"\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\techo esc_attr(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lp_course_faq_meta_box__field\">\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cspan>' . esc_attr__( 'Title', 'learnpress' ) . '\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" name=\"_lp_faqs_question[]\" value=\"\">\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cspan>' . esc_attr__( 'Content', 'learnpress' ) . '\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_faqs_answer[]\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fdiv>'\n+\t\t\t\t\t);\n+\t\t\t\t\t?>\n+\t\t\t\t\t\">\u003C?php esc_html_e( '+ Add more', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$faqs_question = LP_Request::get_param( '_lp_faqs_question', [], 'html' );\n+\t\t$faqs_answer   = LP_Request::get_param( '_lp_faqs_answer', [], 'html' );\n+\n+\t\t$faqs = array();\n+\t\tif ( ! empty( $faqs_question ) ) {\n+\t\t\t$faqs_question_size = count( $faqs_question );\n+\n+\t\t\tfor ( $i = 0; $i \u003C $faqs_question_size; $i ++ ) {\n+\t\t\t\tif ( ! empty( $faqs_question[ $i ] ) ) {\n+\t\t\t\t\t$faqs[] = array( $faqs_question[ $i ], $faqs_answer[ $i ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $faqs );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Extra_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\t$fields = $this->meta_value( $thepostid );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"form-field lp_course_extra_meta_box\">\r\n-\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $this->id ); ?>\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $this->label ); ?>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__content\">\r\n-\t\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__fields\">\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $fields[0][0] ) ) : ?>\r\n-\t\t\t\t\t\t\u003C?php foreach ( $fields as $field ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__field\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $this->id ); ?>[]\"\r\n-\t\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $field ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t   type=\"text\" class=\"lp_course_extra_meta_box__input\">\r\n-\t\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_course_extra_meta_box__add\"\r\n-\t\t\t\t   data-add=\"\r\n-\t\t\t\t   \u003C?php echo esc_attr(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp_course_extra_meta_box__field\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cinput name=\"' . $this->id . '[]\" value=\"\" type=\"text\" class=\"lp_course_extra_meta_box__input\">\r\n-\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fdiv>'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t   ?>\">\r\n-\t\t\t\t\t\u003C?php esc_html_e( '+ Add more', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$fields = LP_Request::get_param( $this->id, $this->default ?? [], 'html' );\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $fields );\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Extra_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\t$fields = $this->meta_value( $thepostid );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"form-field lp_course_extra_meta_box\">\n+\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $this->id ); ?>\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $this->label ); ?>\n+\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__content\">\n+\t\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__fields\">\n+\t\t\t\t\t\u003C?php if ( is_array( $fields ) && ! empty( $fields[0][0] ) ) : ?>\n+\t\t\t\t\t\t\u003C?php foreach ( $fields as $field ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp_course_extra_meta_box__field\">\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $this->id ); ?>[]\"\n+\t\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $field ); ?>\"\n+\t\t\t\t\t\t\t\t\t   type=\"text\" class=\"lp_course_extra_meta_box__input\">\n+\t\t\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_course_extra_meta_box__add\"\n+\t\t\t\t   data-add=\"\n+\t\t\t\t   \u003C?php echo esc_attr(\n+\t\t\t\t\t'\u003Cdiv class=\"lp_course_extra_meta_box__field\">\n+\t\t\t\t\t\t\u003Cspan class=\"sort\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cinput name=\"' . $this->id . '[]\" value=\"\" type=\"text\" class=\"lp_course_extra_meta_box__input\">\n+\t\t\t\t\t\t\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fdiv>'\n+\t\t\t\t\t);\n+\t\t\t\t   ?>\">\n+\t\t\t\t\t\u003C?php esc_html_e( '+ Add more', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$fields = LP_Request::get_param( $this->id, $this->default ?? [], 'html' );\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $fields );\n+\n+\t\treturn $fields;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author Nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_File_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$field['class']         = $field['class'] ?? 'short';\r\n-\t\t$field['style']         = $field['style'] ?? '';\r\n-\t\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\r\n-\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\r\n-\t\t$field['value']         = $field['value'] ?? $field['default'];\r\n-\t\t$field['name']          = $field['name'] ?? $field['id'];\r\n-\t\t$field['mime_type']     = isset( $field['mime_type'] ) ? implode( ',', $field['mime_type'] ) : '';\r\n-\t\t$field['multil']        = isset( $field['multil'] ) && $field['multil'];\r\n-\t\t$field['desc_tip']      = $field['desc_tip'] ?? false;\r\n-\r\n-\t\t\u002F\u002F Custom attribute handling\r\n-\t\t$custom_attributes = array();\r\n-\r\n-\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cdiv class=\"form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '\">\r\n-\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\r\n-\r\n-\t\techo '\u003Cdiv id=\"' . esc_attr( $field['id'] ) . '\" class=\"lp-meta-box__file ' . esc_attr( $field['class'] ) . '\" data-mime=\"' . $field['mime_type'] . '\" data-multil=\"' . $field['multil'] . '\" style=\"' . esc_attr( $field['style'] ) . '\" ' . implode(\r\n-\t\t\t' ',\r\n-\t\t\t$custom_attributes\r\n-\t\t) . '>';\r\n-\t\techo '\u003Cul class=\"lp-meta-box__file_list\">';\r\n-\r\n-\t\t$value = (array) $field['value'];\r\n-\t\tif ( ! empty( $field['value'] ) ) {\r\n-\t\t\t$value = array_map( 'absint', $value );\r\n-\t\t\tforeach ( $value as $attachment_id ) {\r\n-\t\t\t\t$url = wp_get_attachment_url( $attachment_id );\r\n-\r\n-\t\t\t\tif ( $url ) {\r\n-\t\t\t\t\t$check_file = wp_check_filetype( $url );\r\n-\r\n-\t\t\t\t\techo '\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' . $attachment_id . '\">';\r\n-\t\t\t\t\techo sprintf( '\u003Cimg class=\"is_file\" src=\"%s\" \u002F>', wp_mime_type_icon( $check_file['type'] ) );\r\n-\t\t\t\t\techo sprintf( '\u003Cspan>%s\u003C\u002Fspan>', wp_basename( get_attached_file( $attachment_id ) ) );\r\n-\t\t\t\t\techo '\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>';\r\n-\t\t\t\t\techo '\u003C\u002Fli>';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Ful>';\r\n-\t\techo '\u003Cinput class=\"lp-meta-box__file_input\" type=\"hidden\" name=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( ( ! empty( $field['value'] ) && is_array( $field['value'] ) ) ? implode( ',', $field['value'] ) : $field['value'] ) . '\" \u002F>';\r\n-\t\techo '\u003Cp>';\r\n-\t\techo '\u003Ca href=\"#\" class=\"button btn-upload\">' . esc_html__( '+ Add media', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\t\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\r\n-\t\t\tlearn_press_quick_tip( $field['description'] );\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fp>';\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = LP_Request::get_param( $this->id );\r\n-\t\tif ( ! empty( $value ) ) {\r\n-\t\t\t$value = explode( ',', $value );\r\n-\t\t\tif ( ! empty( $value ) ) {\r\n-\t\t\t\t$value = array_map( 'absint', $value );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$value = $this->default ?? '';\r\n-\t\t}\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author Nhamdv\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_File_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$field['class']         = $field['class'] ?? 'short';\n+\t\t$field['style']         = $field['style'] ?? '';\n+\t\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\n+\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\n+\t\t$field['value']         = $field['value'] ?? $field['default'];\n+\t\t$field['name']          = $field['name'] ?? $field['id'];\n+\t\t$field['mime_type']     = isset( $field['mime_type'] ) ? implode( ',', $field['mime_type'] ) : '';\n+\t\t$field['multil']        = isset( $field['multil'] ) && $field['multil'];\n+\t\t$field['desc_tip']      = $field['desc_tip'] ?? false;\n+\n+\t\t\u002F\u002F Custom attribute handling\n+\t\t$custom_attributes = array();\n+\n+\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003Cdiv class=\"form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '\">\n+\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\n+\n+\t\techo '\u003Cdiv id=\"' . esc_attr( $field['id'] ) . '\" class=\"lp-meta-box__file ' . esc_attr( $field['class'] ) . '\" data-mime=\"' . $field['mime_type'] . '\" data-multil=\"' . $field['multil'] . '\" style=\"' . esc_attr( $field['style'] ) . '\" ' . implode(\n+\t\t\t' ',\n+\t\t\t$custom_attributes\n+\t\t) . '>';\n+\t\techo '\u003Cul class=\"lp-meta-box__file_list\">';\n+\n+\t\t$value = (array) $field['value'];\n+\t\tif ( ! empty( $field['value'] ) ) {\n+\t\t\t$value = array_map( 'absint', $value );\n+\t\t\tforeach ( $value as $attachment_id ) {\n+\t\t\t\t$url = wp_get_attachment_url( $attachment_id );\n+\n+\t\t\t\tif ( $url ) {\n+\t\t\t\t\t$check_file = wp_check_filetype( $url );\n+\n+\t\t\t\t\techo '\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' . $attachment_id . '\">';\n+\t\t\t\t\techo sprintf( '\u003Cimg class=\"is_file\" src=\"%s\" \u002F>', wp_mime_type_icon( $check_file['type'] ) );\n+\t\t\t\t\techo sprintf( '\u003Cspan>%s\u003C\u002Fspan>', wp_basename( get_attached_file( $attachment_id ) ) );\n+\t\t\t\t\techo '\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>';\n+\t\t\t\t\techo '\u003C\u002Fli>';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003C\u002Ful>';\n+\t\techo '\u003Cinput class=\"lp-meta-box__file_input\" type=\"hidden\" name=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( ( ! empty( $field['value'] ) && is_array( $field['value'] ) ) ? implode( ',', $field['value'] ) : $field['value'] ) . '\" \u002F>';\n+\t\techo '\u003Cp>';\n+\t\techo '\u003Ca href=\"#\" class=\"button btn-upload\">' . esc_html__( '+ Add media', 'learnpress' ) . '\u003C\u002Fa>';\n+\t\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\n+\t\t\tlearn_press_quick_tip( $field['description'] );\n+\t\t}\n+\t\techo '\u003C\u002Fp>';\n+\n+\t\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\t\t}\n+\t\techo '\u003C\u002Fdiv>';\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = LP_Request::get_param( $this->id );\n+\t\tif ( ! empty( $value ) ) {\n+\t\t\t$value = explode( ',', $value );\n+\t\t\tif ( ! empty( $value ) ) {\n+\t\t\t\t$value = array_map( 'absint', $value );\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$value = $this->default ?? '';\n+\t\t}\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,212 +1,212 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Meta_Box_Material_Fields\r\n- *\r\n- * @author khanhbd\r\n- * @version 1.0.0\r\n- * @since 4.2.2\r\n- *\u002F\r\n-if ( ! class_exists( 'LP_Meta_Box_Material_Fields' ) ) {\r\n-\tclass LP_Meta_Box_Material_Fields extends LP_Meta_Box_Field {\r\n-\t\t\u002F**\r\n-\t\t * Constructor.\r\n-\t\t *\r\n-\t\t * @param string $id\r\n-\t\t * @param string $label\r\n-\t\t * @param string $description\r\n-\t\t * @param mixed $default\r\n-\t\t * @param array $extra\r\n-\t\t *\u002F\r\n-\t\tprivate static $instance = null;\r\n-\r\n-\t\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t\t\t\u002F\u002F delete materials in post when post is deleted\r\n-\t\t\tadd_action( 'delete_post', array( $this, 'clear_material_in_post' ) );\r\n-\t\t}\r\n-\t\t\u002F**\r\n-\t\t * @author khanhbd\r\n-\t\t * @version 1.0.0\r\n-\t\t * @since 4.2.2\r\n-\t\t * [output Downloadable Material Tab content in Course Setting Meta Box]\r\n-\t\t * @param  [int] $thepostid [course's post_id]\r\n-\t\t * @return [html]            [content of Download material tab]\r\n-\t\t *\u002F\r\n-\t\tpublic function output( $thepostid ) {\r\n-\t\t\t$material_init       = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$course_materials    = $material_init->get_material_by_item_id( $thepostid, 0, 0, 1 );\r\n-\t\t\t$max_file_size       = (int) LP_Settings::get_option( 'material_max_file_size', 2 );\r\n-\t\t\t$allow_upload_amount = (int) LP_Settings::get_option( 'material_upload_files', 2 );\r\n-\t\t\t\u002F\u002F check file was uploaded\r\n-\t\t\t$uploaded_files = count( $course_materials );\r\n-\t\t\t\u002F\u002F check file amount which can upload\r\n-\t\t\t$can_upload          = $allow_upload_amount - $uploaded_files;\r\n-\t\t\t$allow_file_type     = LP_Settings::get_option( 'material_allow_file_type', array( 'pdf', 'txt' ) );\r\n-\t\t\t$accept              = '';\r\n-\t\t\t$accept_file_type    = implode( ', ', $allow_file_type );\r\n-\t\t\t$material_mime_types = LP_Settings::lp_material_file_types();\r\n-\t\t\tforeach ( $allow_file_type as $ext ) {\r\n-\t\t\t\t$accept .= $material_mime_types[ $ext ] . ',';\r\n-\t\t\t}\r\n-\t\t\t$accept = rtrim( $accept, ',' );\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv id=\"lp-material-container\">\r\n-\t\t\t\t\u003C?php if ( $allow_upload_amount == 0 ) : ?>\r\n-\t\t\t\t\t\u003C?php if ( get_post_type( $thepostid ) == LP_COURSE_CPT ) : ?>\r\n-\t\t\t\t\t\t\u003Cdiv> \u003C?php esc_html_e( 'Downloadable Materials is not allowed!', 'learnpress' ); ?> \u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C?php endif ?>\r\n-\t\t\t\t\u003C?php else : ?>\r\n-\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\techo '+ ';\r\n-\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t__( 'Maximum amount of files you can upload more: %d files (maximum file size is %s MB)', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$can_upload,\r\n-\t\t\t\t\t\t\t$max_file_size\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\techo '+ ';\r\n-\t\t\t\t\t\techo sprintf( __( 'And allow upload only these types: %s.', 'learnpress' ), $accept_file_type );\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Chr>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-material-btn-wrap\">\r\n-\t\t\t\t\t\t\u003Cbutton class=\"button button-primary\" id=\"btn-lp--add-material\" type=\"button\"\r\n-\t\t\t\t\t\t\t\tcan-upload=\"\u003C?php esc_attr_e( $can_upload ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add Course Materials', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"button button-primary\" id=\"btn-lp--save-material\"\r\n-\t\t\t\t\t\t\t\ttype=\"button\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"material-max-file-size\" value=\"\u003C?php esc_attr_e( $max_file_size ); ?>\"\u002F>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-material--add-material-template\" hidden>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-material--group\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap\">\r\n-\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'File Title', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"lp-material--field-title\" value=\"\"\r\n-\t\t\t\t\t\t\t\t\t   placeholder=\"\u003C?php esc_attr_e( 'Enter File Title', 'learnpress' ); ?>\"\u002F>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap\">\r\n-\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Method', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\u003Cselect class=\"lp-material--field-method\">\r\n-\t\t\t\t\t\t\t\t\t\u003Coption value=\"upload\"\r\n-\t\t\t\t\t\t\t\t\t\t\tselected>\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\t\t\u003Coption value=\"external\">\u003C?php esc_html_e( 'External', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--upload-wrap\">\r\n-\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Choose File  ', 'learnpress' ); ?>\u003Cinput type=\"file\"\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   class=\"lp-material--field-upload\"\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   value=\"\"\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   accept=\"\u003C?php esc_attr_e( $accept ); ?>\"\u002F>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap field-action-wrap\">\r\n-\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\"\r\n-\t\t\t\t\t\t\t\t\t\tclass=\"button lp-material-save-field\">\u003C?php esc_html_e( 'Save field', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\t\u003Cbutton class=\"button lp-material--delete\"\r\n-\t\t\t\t\t\t\t\t\t\ttype=\"button\">\u003C?php esc_html_e( 'Remove', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-material--upload-field-template\" hidden>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--upload-wrap\">\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Choose File  ', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"file\" class=\"lp-material--field-upload\" value=\"\"\r\n-\t\t\t\t\t\t\t\t\t   accept=\"\u003C?php esc_attr_e( $accept ); ?>\"\u002F>\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-material--external-field-template\" hidden>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--external-wrap\">\r\n-\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'File URL', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cinput type=\"url\" class=\"lp-material--field-external-link\" value=\"\"\r\n-\t\t\t\t\t\t\t\t   placeholder=\"\u003C?php esc_attr_e( 'Enter File URL', 'learnpress' ); ?>\"\u002F>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"current-material-post-id\" value=\"\u003C?php echo esc_attr( $thepostid ); ?>\">\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"delete-material-message\"\r\n-\t\t\t\t\t\t   value=\"\u003C?php esc_attr_e( 'Do you want to delete this file?', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"delete-material-row-text\"\r\n-\t\t\t\t\t\t   value=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Ctable class=\"lp-material--table\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t$class_hidden_thead = '';\r\n-\t\t\t\t\t\tif ( empty( $uploaded_files ) ) {\r\n-\t\t\t\t\t\t\t$class_hidden_thead = 'hidden';\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Cthead class=\"\u003C?php echo esc_attr( $class_hidden_thead ); ?>\">\r\n-\t\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'File Title', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Method', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Action', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\t\t\t\u003Ctbody>\r\n-\r\n-\t\t\t\t\t\t\u003C!-- \u003C?php if ( $course_materials ) : ?>\r\n-\t\t\t\t\t\u003C?php foreach ( $course_materials as $row ) : ?>\r\n-\t\t\t\t\t\t\u003Ctr data-id=\"\u003C?php esc_attr_e( $row->file_id ); ?>\" data-sort=\"\u003C?php esc_attr_e( $row->orders ); ?>\">\r\n-\t\t\t\t\t\t\u003Ctd class=\"sort\">\u003C?php esc_attr_e( $row->file_name ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003Ctd>\u003C?php esc_attr_e( ucfirst( $row->method ) ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003Ctd>\u003Ca href=\"javascript:void(0)\" class=\"delete-material-row\" data-id=\"\u003C?php esc_attr_e( $row->file_id ); ?>\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\u003C?php endif; ?> -->\r\n-\t\t\t\t\t\t\u003C\u002Ftbody>\r\n-\r\n-\t\t\t\t\t\u003C\u002Ftable>\r\n-\t\t\t\t\t\u003C?php if ( $course_materials ) : ?>\r\n-\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 3, 100 ); ?>\r\n-\t\t\t\t\t\u003C?php endif ?>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-material--group-container\">\r\n-\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove material when delete course or lesson\r\n-\t\t *\r\n-\t\t * @param int $post_id id of course or lesson\r\n-\t\t *\r\n-\t\t * @author khanhbd\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 4.2.2\r\n-\t\t *\u002F\r\n-\t\tpublic function clear_material_in_post( $post_id ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$post_type = get_post_type( $post_id );\r\n-\t\t\t\tif ( ! in_array( $post_type, [ LP_COURSE_CPT, LP_LESSON_CPT ] ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$material_init = LP_Material_Files_DB::getInstance();\r\n-\t\t\t\t$material_init->delete_material_by_item_id( $post_id );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instance\r\n-\t\t *\r\n-\t\t * @return LP_Addon_Custom_Tab_Meta_Field\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): LP_Meta_Box_Material_Fields {\r\n-\t\t\tif ( ! self::$instance ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tLP_Meta_Box_Material_Fields::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Meta_Box_Material_Fields\n+ *\n+ * @author khanhbd\n+ * @version 1.0.0\n+ * @since 4.2.2\n+ *\u002F\n+if ( ! class_exists( 'LP_Meta_Box_Material_Fields' ) ) {\n+\tclass LP_Meta_Box_Material_Fields extends LP_Meta_Box_Field {\n+\t\t\u002F**\n+\t\t * Constructor.\n+\t\t *\n+\t\t * @param string $id\n+\t\t * @param string $label\n+\t\t * @param string $description\n+\t\t * @param mixed $default\n+\t\t * @param array $extra\n+\t\t *\u002F\n+\t\tprivate static $instance = null;\n+\n+\t\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\t\tparent::__construct( $label, $description, $default, $extra );\n+\t\t\t\u002F\u002F delete materials in post when post is deleted\n+\t\t\tadd_action( 'delete_post', array( $this, 'clear_material_in_post' ) );\n+\t\t}\n+\t\t\u002F**\n+\t\t * @author khanhbd\n+\t\t * @version 1.0.0\n+\t\t * @since 4.2.2\n+\t\t * [output Downloadable Material Tab content in Course Setting Meta Box]\n+\t\t * @param  [int] $thepostid [course's post_id]\n+\t\t * @return [html]            [content of Download material tab]\n+\t\t *\u002F\n+\t\tpublic function output( $thepostid ) {\n+\t\t\t$material_init       = LP_Material_Files_DB::getInstance();\n+\t\t\t$course_materials    = $material_init->get_material_by_item_id( $thepostid, 0, 0, 1 ) ?? [];\n+\t\t\t$max_file_size       = (int) LP_Settings::get_option( 'material_max_file_size', 2 );\n+\t\t\t$allow_upload_amount = (int) LP_Settings::get_option( 'material_upload_files', 2 );\n+\t\t\t\u002F\u002F check file was uploaded\n+\t\t\t$uploaded_files = count( $course_materials );\n+\t\t\t\u002F\u002F check file amount which can upload\n+\t\t\t$can_upload          = $allow_upload_amount - $uploaded_files;\n+\t\t\t$allow_file_type     = LP_Settings::get_option( 'material_allow_file_type', array( 'pdf', 'txt' ) );\n+\t\t\t$accept              = '';\n+\t\t\t$accept_file_type    = implode( ', ', $allow_file_type );\n+\t\t\t$material_mime_types = LP_Settings::lp_material_file_types();\n+\t\t\tforeach ( $allow_file_type as $ext ) {\n+\t\t\t\t$accept .= $material_mime_types[ $ext ] . ',';\n+\t\t\t}\n+\t\t\t$accept = rtrim( $accept, ',' );\n+\t\t\t?>\n+\t\t\t\u003Cdiv id=\"lp-material-container\">\n+\t\t\t\t\u003C?php if ( $allow_upload_amount == 0 ) : ?>\n+\t\t\t\t\t\u003C?php if ( get_post_type( $thepostid ) == LP_COURSE_CPT ) : ?>\n+\t\t\t\t\t\t\u003Cdiv> \u003C?php esc_html_e( 'Downloadable Materials is not allowed!', 'learnpress' ); ?> \u003C\u002Fdiv>\n+\t\t\t\t\t\u003C?php endif ?>\n+\t\t\t\t\u003C?php else : ?>\n+\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\techo '+ ';\n+\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t__( 'Maximum amount of files you can upload more: %1$d files (maximum file size is %2$s MB)', 'learnpress' ),\n+\t\t\t\t\t\t\t$can_upload,\n+\t\t\t\t\t\t\t$max_file_size\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\techo '+ ';\n+\t\t\t\t\t\techo sprintf( __( 'And allow upload only these types: %s.', 'learnpress' ), $accept_file_type );\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Chr>\n+\t\t\t\t\t\u003Cdiv class=\"lp-material-btn-wrap\">\n+\t\t\t\t\t\t\u003Cbutton class=\"button button-primary\" id=\"btn-lp--add-material\" type=\"button\"\n+\t\t\t\t\t\t\t\tcan-upload=\"\u003C?php esc_attr_e( $can_upload ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add Course Materials', 'learnpress' ); ?>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003Cbutton class=\"button button-primary\" id=\"btn-lp--save-material\"\n+\t\t\t\t\t\t\t\ttype=\"button\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"material-max-file-size\" value=\"\u003C?php esc_attr_e( $max_file_size ); ?>\"\u002F>\n+\t\t\t\t\t\u003Cdiv id=\"lp-material--add-material-template\" hidden>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-material--group\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap\">\n+\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'File Title', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" class=\"lp-material--field-title\" value=\"\"\n+\t\t\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Enter File Title', 'learnpress' ); ?>\"\u002F>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap\">\n+\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Method', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\u003Cselect class=\"lp-material--field-method\">\n+\t\t\t\t\t\t\t\t\t\u003Coption value=\"upload\"\n+\t\t\t\t\t\t\t\t\t\t\tselected>\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\t\t\u003Coption value=\"external\">\u003C?php esc_html_e( 'External', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--upload-wrap\">\n+\t\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Choose File  ', 'learnpress' ); ?>\u003Cinput type=\"file\"\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"lp-material--field-upload\"\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue=\"\"\n+\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taccept=\"\u003C?php esc_attr_e( $accept ); ?>\"\u002F>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap field-action-wrap\">\n+\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\"\n+\t\t\t\t\t\t\t\t\t\tclass=\"button lp-material-save-field\">\u003C?php esc_html_e( 'Save field', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\t\u003Cbutton class=\"button lp-material--delete\"\n+\t\t\t\t\t\t\t\t\t\ttype=\"button\">\u003C?php esc_html_e( 'Remove', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv id=\"lp-material--upload-field-template\" hidden>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--upload-wrap\">\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Choose File  ', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"file\" class=\"lp-material--field-upload\" value=\"\"\n+\t\t\t\t\t\t\t\t\t\taccept=\"\u003C?php esc_attr_e( $accept ); ?>\"\u002F>\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv id=\"lp-material--external-field-template\" hidden>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-material--field-wrap lp-material--external-wrap\">\n+\t\t\t\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'File URL', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cinput type=\"url\" class=\"lp-material--field-external-link\" value=\"\"\n+\t\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Enter File URL', 'learnpress' ); ?>\"\u002F>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"current-material-post-id\" value=\"\u003C?php echo esc_attr( $thepostid ); ?>\">\n+\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"delete-material-message\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php esc_attr_e( 'Do you want to delete this file?', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Cinput type=\"hidden\" id=\"delete-material-row-text\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Ctable class=\"lp-material--table\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t$class_hidden_thead = '';\n+\t\t\t\t\t\tif ( empty( $uploaded_files ) ) {\n+\t\t\t\t\t\t\t$class_hidden_thead = 'hidden';\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Cthead class=\"\u003C?php echo esc_attr( $class_hidden_thead ); ?>\">\n+\t\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'File Title', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Method', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Action', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\u003C\u002Fthead>\n+\t\t\t\t\t\t\u003Ctbody>\n+\n+\t\t\t\t\t\t\u003C!-- \u003C?php if ( $course_materials ) : ?>\n+\t\t\t\t\t\t\t\u003C?php foreach ( $course_materials as $row ) : ?>\n+\t\t\t\t\t\t\u003Ctr data-id=\"\u003C?php esc_attr_e( $row->file_id ); ?>\" data-sort=\"\u003C?php esc_attr_e( $row->orders ); ?>\">\n+\t\t\t\t\t\t\u003Ctd class=\"sort\">\u003C?php esc_attr_e( $row->file_name ); ?>\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003Ctd>\u003C?php esc_attr_e( ucfirst( $row->method ) ); ?>\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003Ctd>\u003Ca href=\"javascript:void(0)\" class=\"delete-material-row\" data-id=\"\u003C?php esc_attr_e( $row->file_id ); ?>\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\u003C?php endif; ?> -->\n+\t\t\t\t\t\t\u003C\u002Ftbody>\n+\n+\t\t\t\t\t\u003C\u002Ftable>\n+\t\t\t\t\t\u003C?php if ( $course_materials ) : ?>\n+\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 3, 100 ); ?>\n+\t\t\t\t\t\u003C?php endif ?>\n+\t\t\t\t\t\u003Cdiv id=\"lp-material--group-container\">\n+\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove material when delete course or lesson\n+\t\t *\n+\t\t * @param int $post_id id of course or lesson\n+\t\t *\n+\t\t * @author khanhbd\n+\t\t * @version 1.0.1\n+\t\t * @since 4.2.2\n+\t\t *\u002F\n+\t\tpublic function clear_material_in_post( $post_id ) {\n+\t\t\ttry {\n+\t\t\t\t$post_type = get_post_type( $post_id );\n+\t\t\t\tif ( ! in_array( $post_type, [ LP_COURSE_CPT, LP_LESSON_CPT ] ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$material_init = LP_Material_Files_DB::getInstance();\n+\t\t\t\t$material_init->delete_material_by_item_id( $post_id );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instance\n+\t\t *\n+\t\t * @return LP_Addon_Custom_Tab_Meta_Field\n+\t\t *\u002F\n+\t\tpublic static function instance(): LP_Meta_Box_Material_Fields {\n+\t\t\tif ( ! self::$instance ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\t}\n+\n+\tLP_Meta_Box_Material_Fields::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fradio.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,94 +1,94 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Radio_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'select';\r\n-\t\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\r\n-\t\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\r\n-\t\t$wrapper_attr           = $field['wrapper_attr'] ?? [];\r\n-\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\r\n-\t\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\r\n-\t\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\r\n-\t\t$field['desc_tip']      = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\r\n-\r\n-\t\t$dependency_check = $this->extra['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$field['wrapper_class'] .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cfieldset class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\r\n-\t\t\tesc_attr( $this->id . '_field ' . $field['wrapper_class'] ),\r\n-\t\t\timplode( ' ', $wrapper_attr ),\r\n-\t\t\tesc_attr( $this->id ),\r\n-\t\t\twp_kses_post( $this->label )\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\r\n-\t\t\tlearn_press_quick_tip( $field['description'] );\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cul class=\"lp-radios-field-meta-box\">';\r\n-\r\n-\t\tforeach ( $field['options'] as $key => $value ) {\r\n-\t\t\techo '\u003Cli>\u003Clabel>\u003Cinput\r\n-\t\t\t\tname=\"' . esc_attr( $field['name'] ) . '\"\r\n-\t\t\t\tvalue=\"' . esc_attr( $key ) . '\"\r\n-\t\t\t\ttype=\"radio\"\r\n-\t\t\t\tclass=\"' . esc_attr( $field['class'] ) . '\"\r\n-\t\t\t\tstyle=\"' . esc_attr( $field['style'] ) . '\"\r\n-\t\t\t\t' . checked( esc_attr( $field['value'] ), esc_attr( $key ), false ) . '\r\n-\t\t\t\t\u002F> ' . ( $value ) . '\u003C\u002Flabel>\r\n-\t\t\u003C\u002Fli>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Ful>';\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Ffieldset>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '' );\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Radio_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'select';\n+\t\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\n+\t\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\n+\t\t$wrapper_attr           = $field['wrapper_attr'] ?? [];\n+\t\t$field['default']       = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\n+\t\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\n+\t\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\n+\t\t$field['desc_tip']      = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\n+\n+\t\t$dependency_check = $this->extra['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$field['wrapper_class'] .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\n+\t\tprintf(\n+\t\t\t'\u003Cfieldset class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\n+\t\t\tesc_attr( $this->id . '_field ' . $field['wrapper_class'] ),\n+\t\t\timplode( ' ', $wrapper_attr ),\n+\t\t\tesc_attr( $this->id ),\n+\t\t\twp_kses_post( $this->label )\n+\t\t);\n+\n+\t\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\n+\t\t\tlearn_press_quick_tip( $field['description'] );\n+\t\t}\n+\n+\t\techo '\u003Cul class=\"lp-radios-field-meta-box\">';\n+\n+\t\tforeach ( $field['options'] as $key => $value ) {\n+\t\t\techo '\u003Cli>\u003Clabel>\u003Cinput\n+\t\t\t\tname=\"' . esc_attr( $field['name'] ) . '\"\n+\t\t\t\tvalue=\"' . esc_attr( $key ) . '\"\n+\t\t\t\ttype=\"radio\"\n+\t\t\t\tclass=\"' . esc_attr( $field['class'] ) . '\"\n+\t\t\t\tstyle=\"' . esc_attr( $field['style'] ) . '\"\n+\t\t\t\t' . checked( esc_attr( $field['value'] ), esc_attr( $key ), false ) . '\n+\t\t\t\t\u002F> ' . ( $value ) . '\u003C\u002Flabel>\n+\t\t\u003C\u002Fli>';\n+\t\t}\n+\t\techo '\u003C\u002Ful>';\n+\n+\t\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\t\t}\n+\n+\t\techo '\u003C\u002Ffieldset>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '' );\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Frepeater.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,109 +1,109 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Repeater\r\n- *\r\n- * @author Nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.1.4\r\n- *\u002F\r\n-class LP_Meta_Box_Repeater_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed  $default\r\n-\t * @param array  $extra : fields for repeater, add_text for Add more text, title_text for Title\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\t$repeaters = $this->meta_value( $thepostid );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"form-field lp_repeater_meta_box\">\r\n-\t\t\t\u003Clabel for=\"_lp_key_features\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $this->label ); ?>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__wrapper\">\r\n-\t\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__fields\">\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $repeaters ) ) : ?>\r\n-\t\t\t\t\t\t\u003C?php foreach ( $repeaters as $key => $repeater ) : ?>\r\n-\t\t\t\t\t\t\t\u003C?php $this->repeater_html( $thepostid, $repeater, false, $key ); ?>\r\n-\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_repeater_meta_box__add\"\r\n-\t\t\t\t\tdata-add=\"\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tob_start();\r\n-\t\t\t\t\t$this->repeater_html( $thepostid, false, true );\r\n-\t\t\t\t\techo esc_attr( ob_get_clean() );\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $this->extra['add_text'] ?? esc_html__( '+ Add more', 'learnpress' ) ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$data   = LP_Request::get_param( $this->id, $this->default ?? [], 'html' );\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( ! empty( $data ) && is_array( $data ) ) {\r\n-\t\t\tforeach ( $data as $key => $val ) {\r\n-\t\t\t\tforeach ( $this->extra['fields'] as $field_key => $field ) {\r\n-\t\t\t\t\tif ( get_class( $field ) === 'LP_Meta_Box_Checkbox_Field' ) {\r\n-\t\t\t\t\t\t$val[ $field_key ] = isset( $val[ $field_key ] ) ? 'yes' : 'no';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$sort_key = $val['sort'];\r\n-\t\t\t\tunset( $val['sort'] );\r\n-\r\n-\t\t\t\t$output[ $sort_key ] = $val;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $output );\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function repeater_html( $thepostid, $repeater, $is_attr = false, $key = 'lp_metabox_repeater_key' ) {\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"lp_repeater_meta_box__field \u003C?php echo esc_attr( $is_attr ? 'lp_repeater_meta_box__field_active' : '' ); ?>\">\r\n-\t\t\t\u003Cinput class=\"lp_repeater_meta_box__field__count\" type=\"hidden\" value=\"\u003C?php echo esc_attr( $key ); ?>\" name=\"\u003C?php echo esc_attr( $this->id ) . '[' . $key . ']' . '[sort]'; ?>\">\r\n-\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__title\">\r\n-\t\t\t\t\u003Cspan class=\"lp_repeater_meta_box__title__sort\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"lp_repeater_meta_box__title__title\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $this->extra['title_text'] ?? esc_html__( 'Repeater', 'learnpress' ) ); ?>\r\n-\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( absint( $key ) + 1 ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\u003Ca href=\"#\" class=\"lp_repeater_meta_box__title__delete\">\u003C\u002Fa>\r\n-\t\t\t\t\u003Ca href=\"#\" class=\"lp_repeater_meta_box__title__toggle\">\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__content\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( isset( $this->extra['fields'] ) ) {\r\n-\t\t\t\t\tforeach ( $this->extra['fields'] as $field_key => $field ) {\r\n-\t\t\t\t\t\t$field->id             = $this->id . '[' . $key . '][' . $field_key . ']';\r\n-\t\t\t\t\t\t$field->extra['value'] = $is_attr ? '' : ( $repeater[ $field_key ] ?? '' );\r\n-\t\t\t\t\t\tlearn_press_echo_vuejs_write_on_php( $field->output( $thepostid ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Repeater\n+ *\n+ * @author Nhamdv\n+ * @version 1.0.0\n+ * @since 4.1.4\n+ *\u002F\n+class LP_Meta_Box_Repeater_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed  $default\n+\t * @param array  $extra : fields for repeater, add_text for Add more text, title_text for Title\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\t$repeaters = $this->meta_value( $thepostid );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"form-field lp_repeater_meta_box\">\n+\t\t\t\u003Clabel for=\"_lp_key_features\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $this->label ); ?>\n+\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__wrapper\">\n+\t\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__fields\">\n+\t\t\t\t\t\u003C?php if ( ! empty( $repeaters ) ) : ?>\n+\t\t\t\t\t\t\u003C?php foreach ( $repeaters as $key => $repeater ) : ?>\n+\t\t\t\t\t\t\t\u003C?php $this->repeater_html( $thepostid, $repeater, false, $key ); ?>\n+\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Ca href=\"#\" class=\"button button-primary lp_repeater_meta_box__add\"\n+\t\t\t\t\tdata-add=\"\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tob_start();\n+\t\t\t\t\t$this->repeater_html( $thepostid, false, true );\n+\t\t\t\t\techo esc_attr( ob_get_clean() );\n+\t\t\t\t\t?>\n+\t\t\t\t\t\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $this->extra['add_text'] ?? esc_html__( '+ Add more', 'learnpress' ) ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$data   = LP_Request::get_param( $this->id, $this->default ?? [], 'html' );\n+\t\t$output = array();\n+\n+\t\tif ( ! empty( $data ) && is_array( $data ) ) {\n+\t\t\tforeach ( $data as $key => $val ) {\n+\t\t\t\tforeach ( $this->extra['fields'] as $field_key => $field ) {\n+\t\t\t\t\tif ( get_class( $field ) === 'LP_Meta_Box_Checkbox_Field' ) {\n+\t\t\t\t\t\t$val[ $field_key ] = isset( $val[ $field_key ] ) ? 'yes' : 'no';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$sort_key = $val['sort'];\n+\t\t\t\tunset( $val['sort'] );\n+\n+\t\t\t\t$output[ $sort_key ] = $val;\n+\t\t\t}\n+\t\t}\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $output );\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function repeater_html( $thepostid, $repeater, $is_attr = false, $key = 'lp_metabox_repeater_key' ) {\n+\t\t?>\n+\t\t\u003Cdiv class=\"lp_repeater_meta_box__field \u003C?php echo esc_attr( $is_attr ? 'lp_repeater_meta_box__field_active' : '' ); ?>\">\n+\t\t\t\u003Cinput class=\"lp_repeater_meta_box__field__count\" type=\"hidden\" value=\"\u003C?php echo esc_attr( $key ); ?>\" name=\"\u003C?php echo esc_attr( $this->id ) . '[' . $key . ']' . '[sort]'; ?>\">\n+\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__title\">\n+\t\t\t\t\u003Cspan class=\"lp_repeater_meta_box__title__sort\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"lp_repeater_meta_box__title__title\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $this->extra['title_text'] ?? esc_html__( 'Repeater', 'learnpress' ) ); ?>\n+\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( absint( $key ) + 1 ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\u003Ca href=\"#\" class=\"lp_repeater_meta_box__title__delete\">\u003C\u002Fa>\n+\t\t\t\t\u003Ca href=\"#\" class=\"lp_repeater_meta_box__title__toggle\">\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"lp_repeater_meta_box__content\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( isset( $this->extra['fields'] ) ) {\n+\t\t\t\t\tforeach ( $this->extra['fields'] as $field_key => $field ) {\n+\t\t\t\t\t\t$field->id             = $this->id . '[' . $key . '][' . $field_key . ']';\n+\t\t\t\t\t\t$field->extra['value'] = $is_attr ? '' : ( $repeater[ $field_key ] ?? '' );\n+\t\t\t\t\t\tlearn_press_echo_vuejs_write_on_php( $field->output( $thepostid ) );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fselect.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,210 +1,210 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author Nhamdv\r\n- * @version 1.0.2\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function meta_value( $post_id ) {\r\n-\t\t$multil_meta = $this->extra['multil_meta'] ?? false;\r\n-\r\n-\t\treturn $multil_meta ? get_post_meta( $post_id, $this->id, false ) : get_post_meta( $post_id, $this->id, true );\r\n-\t}\r\n-\r\n-\tpublic function output( $post_id ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$field['multil_meta'] = $field['multil_meta'] ?? false;\r\n-\t\t$meta                 = $this->meta_value( $post_id );\r\n-\r\n-\t\t\u002F\u002F Fix case select multiple but meta is array with single empty value.\r\n-\t\tif ( is_array($meta) && count($meta) === 1 && empty( $meta[0] ) ) {\r\n-\t\t\t$meta = [];\r\n-\t\t}\r\n-\r\n-\t\t$default = ( ! $meta && isset( $field['default'] ) ) ? $field['default'] : $meta;\r\n-\r\n-\t\t$field = wp_parse_args(\r\n-\t\t\t$field,\r\n-\t\t\tarray(\r\n-\t\t\t\t'class'             => 'select',\r\n-\t\t\t\t'style'             => '',\r\n-\t\t\t\t'wrapper_class'     => '', \u002F\u002F Use \"lp-select-2\" for select2.\r\n-\t\t\t\t'value'             => $field['value'] ?? $default,\r\n-\t\t\t\t'name'              => $field['id'],\r\n-\t\t\t\t'desc_tip'          => false,\r\n-\t\t\t\t'multiple'          => false,\r\n-\t\t\t\t'custom_attributes' => array(),\r\n-\t\t\t\t'tom_select'        => false,\r\n-\t\t\t\t'wrapper_attr'      => [],\r\n-\t\t\t\t'options'           => array(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( isset( $field['options'] ) && ! is_array( $field['options'] ) ) {\r\n-\t\t\t$field['options'] = (array) $field['options'];\r\n-\t\t}\r\n-\r\n-\t\t$field_attributes          = (array) $field['custom_attributes'];\r\n-\t\t$field_attributes['style'] = $field['style'];\r\n-\t\t$field_attributes['id']    = $field['id'];\r\n-\t\t$field_attributes['name']  = $field['multiple'] ? $field['name'] . '[]' : $field['name'];\r\n-\t\tif ( isset( $field['name_no_bracket'] ) ) {\r\n-\t\t\t$field_attributes['name'] = $field['name'];\r\n-\t\t}\r\n-\t\t$field_attributes['class'] = $field['class'];\r\n-\r\n-\t\tif ( $field['multiple'] ) {\r\n-\t\t\t$field_attributes['multiple'] = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( $field['tom_select'] ) {\r\n-\t\t\t$field_attributes['class'] .= ' lp-tom-select';\r\n-\t\t\tif ( ! empty( $field['ts-remove-button'] ) ) {\r\n-\t\t\t\t$field_attributes['data-ts-remove-button'] = $field['ts-remove-button'];\r\n-\t\t\t}\r\n-\t\t} elseif ( $field['multiple'] ) {\r\n-\t\t\t$field['wrapper_class'] = 'lp-select-2';\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $field['data-saved'] ) ) {\r\n-\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $field['data-saved'] ) );\r\n-\t\t} elseif ( ! empty( $meta ) ) {\r\n-\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $meta ) );\r\n-\t\t} else {\r\n-\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $default ) );\r\n-\t\t}\r\n-\r\n-\t\t$tooltip     = ! empty( $field['description'] ) && false !== $field['desc_tip'] ? $field['description'] : '';\r\n-\t\t$description = ! empty( $field['description'] ) && false === $field['desc_tip'] ? $field['description'] : '';\r\n-\r\n-\t\t$dependency_check = $field['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$field['wrapper_class'] .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$field['wrapper_attr'][] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ); ?>\"\r\n-\t\t\t\u003C?php echo esc_attr( implode( ' ', $field['wrapper_attr'] ) ); ?>\r\n-\t\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $this->condition ? $this->condition : '' ); ?>>\r\n-\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\r\n-\t\t\t\t\u003Coption value=\"\" hidden style=\"display: none\">\u003C\u002Foption>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tforeach ( $field['options'] as $key => $value ) {\r\n-\t\t\t\t\tif ( is_array( $field['value'] ) ) {\r\n-\t\t\t\t\t\t$selected = in_array( $key, $field['value'] ) ? 'selected=\"selected\"' : '';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$selected = selected( $key, $field['value'], false );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>',\r\n-\t\t\t\t\t\tesc_attr( $key ),\r\n-\t\t\t\t\t\tesc_attr( $selected ),\r\n-\t\t\t\t\t\tesc_html( $value )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $description ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\t\tlearn_press_quick_tip( $tooltip );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$multiple_meta = $this->extra['multil_meta'] ?? false;\r\n-\r\n-\t\tif ( ! empty( $this->extra['custom_save'] ) ) {\r\n-\t\t\tdo_action( 'learnpress\u002Fadmin\u002Fmetabox\u002Fselect\u002Fsave', $this->id, $_POST[ $this->id ] ?? '', $post_id );\r\n-\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( $multiple_meta ) {\r\n-\t\t\t$data       = LP_Request::get_param( $this->id, $this->default ?? [] );\r\n-\t\t\t$get_values = get_post_meta( $post_id, $this->id ) ?? [];\r\n-\t\t\t$new_values = $data;\r\n-\r\n-\t\t\t$array_get_values = ! empty( $get_values ) ? array_values( $get_values ) : [];\r\n-\t\t\t$array_new_values = ! empty( $new_values ) ? array_values( $new_values ) : [];\r\n-\r\n-\t\t\t$del_val = array_diff( $array_get_values, $array_new_values );\r\n-\t\t\t$new_val = array_diff( $array_new_values, $array_get_values );\r\n-\r\n-\t\t\tforeach ( $del_val as $level_id ) {\r\n-\t\t\t\tdelete_post_meta( $post_id, $this->id, $level_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $new_val as $level_id ) {\r\n-\t\t\t\tadd_post_meta( $post_id, $this->id, $level_id, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Fix case select multiple but meta is array with single empty value.\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\tdelete_post_meta( $post_id, $this->id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t} else {\r\n-\t\t\t$multiple = ! empty( $this->extra['multiple'] );\r\n-\t\t\tif ( $multiple ) {\r\n-\t\t\t\t$data = LP_Request::get_param( $this->id, $this->default ?? [] );\r\n-\t\t\t\t\u002F\u002F Clear item has value empty.\r\n-\t\t\t\t$value = [];\r\n-\t\t\t\tarray_map(\r\n-\t\t\t\t\tfunction ( $item ) use ( &$value ) {\r\n-\t\t\t\t\t\tif ( $item !== '' ) {\r\n-\t\t\t\t\t\t\t$value[] = $item;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$data  = LP_Request::get_param( $this->id, $this->default ?? '' );\r\n-\t\t\t\t$value = $data;\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\t\treturn $value;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author Nhamdv\n+ * @version 1.0.2\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Select_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function meta_value( $post_id ) {\n+\t\t$multil_meta = $this->extra['multil_meta'] ?? false;\n+\n+\t\treturn $multil_meta ? get_post_meta( $post_id, $this->id, false ) : get_post_meta( $post_id, $this->id, true );\n+\t}\n+\n+\tpublic function output( $post_id ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$field['multil_meta'] = $field['multil_meta'] ?? false;\n+\t\t$meta                 = $this->meta_value( $post_id );\n+\n+\t\t\u002F\u002F Fix case select multiple but meta is array with single empty value.\n+\t\tif ( is_array($meta) && count($meta) === 1 && empty( $meta[0] ) ) {\n+\t\t\t$meta = [];\n+\t\t}\n+\n+\t\t$default = ( ! $meta && isset( $field['default'] ) ) ? $field['default'] : $meta;\n+\n+\t\t$field = wp_parse_args(\n+\t\t\t$field,\n+\t\t\tarray(\n+\t\t\t\t'class'             => 'select',\n+\t\t\t\t'style'             => '',\n+\t\t\t\t'wrapper_class'     => '', \u002F\u002F Use \"lp-select-2\" for select2.\n+\t\t\t\t'value'             => $field['value'] ?? $default,\n+\t\t\t\t'name'              => $field['id'],\n+\t\t\t\t'desc_tip'          => false,\n+\t\t\t\t'multiple'          => false,\n+\t\t\t\t'custom_attributes' => array(),\n+\t\t\t\t'tom_select'        => false,\n+\t\t\t\t'wrapper_attr'      => [],\n+\t\t\t\t'options'           => array(),\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( isset( $field['options'] ) && ! is_array( $field['options'] ) ) {\n+\t\t\t$field['options'] = (array) $field['options'];\n+\t\t}\n+\n+\t\t$field_attributes          = (array) $field['custom_attributes'];\n+\t\t$field_attributes['style'] = $field['style'];\n+\t\t$field_attributes['id']    = $field['id'];\n+\t\t$field_attributes['name']  = $field['multiple'] ? $field['name'] . '[]' : $field['name'];\n+\t\tif ( isset( $field['name_no_bracket'] ) ) {\n+\t\t\t$field_attributes['name'] = $field['name'];\n+\t\t}\n+\t\t$field_attributes['class'] = $field['class'];\n+\n+\t\tif ( $field['multiple'] ) {\n+\t\t\t$field_attributes['multiple'] = true;\n+\t\t}\n+\n+\t\tif ( $field['tom_select'] ) {\n+\t\t\t$field_attributes['class'] .= ' lp-tom-select';\n+\t\t\tif ( ! empty( $field['ts-remove-button'] ) ) {\n+\t\t\t\t$field_attributes['data-ts-remove-button'] = $field['ts-remove-button'];\n+\t\t\t}\n+\t\t} elseif ( $field['multiple'] ) {\n+\t\t\t$field['wrapper_class'] = 'lp-select-2';\n+\t\t}\n+\n+\t\tif ( isset( $field['data-saved'] ) ) {\n+\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $field['data-saved'] ) );\n+\t\t} elseif ( ! empty( $meta ) ) {\n+\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $meta ) );\n+\t\t} else {\n+\t\t\t$field_attributes['data-saved'] = htmlentities2( json_encode( $default ) );\n+\t\t}\n+\n+\t\t$tooltip     = ! empty( $field['description'] ) && false !== $field['desc_tip'] ? $field['description'] : '';\n+\t\t$description = ! empty( $field['description'] ) && false === $field['desc_tip'] ? $field['description'] : '';\n+\n+\t\t$dependency_check = $field['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$field['wrapper_class'] .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$field['wrapper_attr'][] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ); ?>\"\n+\t\t\t\u003C?php echo esc_attr( implode( ' ', $field['wrapper_attr'] ) ); ?>\n+\t\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $this->condition ? $this->condition : '' ); ?>>\n+\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\n+\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\n+\t\t\t\t\u003Coption value=\"\" hidden style=\"display: none\">\u003C\u002Foption>\n+\t\t\t\t\u003C?php\n+\t\t\t\tforeach ( $field['options'] as $key => $value ) {\n+\t\t\t\t\tif ( is_array( $field['value'] ) ) {\n+\t\t\t\t\t\t$selected = in_array( $key, $field['value'] ) ? 'selected=\"selected\"' : '';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$selected = selected( $key, $field['value'], false );\n+\t\t\t\t\t}\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>',\n+\t\t\t\t\t\tesc_attr( $key ),\n+\t\t\t\t\t\tesc_attr( $selected ),\n+\t\t\t\t\t\tesc_html( $value )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\t\t\t\u003C?php\n+\t\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $description ) . '\u003C\u002Fspan>';\n+\n+\t\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\t\tlearn_press_quick_tip( $tooltip );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$multiple_meta = $this->extra['multil_meta'] ?? false;\n+\n+\t\tif ( ! empty( $this->extra['custom_save'] ) ) {\n+\t\t\tdo_action( 'learnpress\u002Fadmin\u002Fmetabox\u002Fselect\u002Fsave', $this->id, $_POST[ $this->id ] ?? '', $post_id );\n+\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( $multiple_meta ) {\n+\t\t\t$data       = LP_Request::get_param( $this->id, $this->default ?? [] );\n+\t\t\t$get_values = get_post_meta( $post_id, $this->id ) ?? [];\n+\t\t\t$new_values = $data;\n+\n+\t\t\t$array_get_values = ! empty( $get_values ) ? array_values( $get_values ) : [];\n+\t\t\t$array_new_values = ! empty( $new_values ) ? array_values( $new_values ) : [];\n+\n+\t\t\t$del_val = array_diff( $array_get_values, $array_new_values );\n+\t\t\t$new_val = array_diff( $array_new_values, $array_get_values );\n+\n+\t\t\tforeach ( $del_val as $level_id ) {\n+\t\t\t\tdelete_post_meta( $post_id, $this->id, $level_id );\n+\t\t\t}\n+\n+\t\t\tforeach ( $new_val as $level_id ) {\n+\t\t\t\tadd_post_meta( $post_id, $this->id, $level_id, false );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Fix case select multiple but meta is array with single empty value.\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\tdelete_post_meta( $post_id, $this->id );\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t} else {\n+\t\t\t$multiple = ! empty( $this->extra['multiple'] );\n+\t\t\tif ( $multiple ) {\n+\t\t\t\t$data = LP_Request::get_param( $this->id, $this->default ?? [] );\n+\t\t\t\t\u002F\u002F Clear item has value empty.\n+\t\t\t\t$value = [];\n+\t\t\t\tarray_map(\n+\t\t\t\t\tfunction ( $item ) use ( &$value ) {\n+\t\t\t\t\t\tif ( $item !== '' ) {\n+\t\t\t\t\t\t\t$value[] = $item;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$data  = LP_Request::get_param( $this->id, $this->default ?? '' );\n+\t\t\t\t$value = $data;\n+\t\t\t}\n+\n+\t\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\t\treturn $value;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftextarea.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,92 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Duration_Attribute\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Textarea_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$field                = $this->extra;\r\n-\t\t$field['id']          = $this->id;\r\n-\t\t$field['default']     = $this->default;\r\n-\t\t$field['description'] = $this->description;\r\n-\t\t$field['label']       = $this->label;\r\n-\r\n-\t\t$field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : '';\r\n-\t\t$field['class']       = isset( $field['class'] ) ? $field['class'] : 'short';\r\n-\t\t$field['style']       = isset( $field['style'] ) ? $field['style'] : '';\r\n-\t\t$field['default']     = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\r\n-\t\t$field['value']       = isset( $field['value'] ) ? $field['value'] : $field['default'];\r\n-\t\t$field['desc_tip']    = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\r\n-\t\t$field['name']        = isset( $field['name'] ) ? $field['name'] : $field['id'];\r\n-\t\t$wrapper_attr         = $field['wrapper_attr'] ?? [];\r\n-\t\t$wrapper_class        = $this->extra['wrapper_class'] ?? '';\r\n-\r\n-\t\t\u002F\u002F Custom attribute handling\r\n-\t\t$custom_attributes = array();\r\n-\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$dependency_check = $this->extra['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$wrapper_class .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\r\n-\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\r\n-\t\t\timplode( ' ', $wrapper_attr ),\r\n-\t\t\tesc_attr( $this->id ),\r\n-\t\t\twp_kses_post( $this->label )\r\n-\t\t);\r\n-\r\n-\t\techo '\u003Ctextarea class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\"  name=\"' . esc_attr( $field['name'] ) . '\" id=\"' . esc_attr( $field['id'] ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" rows=\"5\" ' . implode(\r\n-\t\t\t\t' ',\r\n-\t\t\t\t$custom_attributes\r\n-\t\t\t) . '>' . esc_textarea( $field['value'] ) . '\u003C\u002Ftextarea> ';\r\n-\r\n-\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '', 'html' );\r\n-\t\tupdate_post_meta( $post_id, $this->id, $value );\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Duration_Attribute\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Textarea_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$field                = $this->extra;\n+\t\t$field['id']          = $this->id;\n+\t\t$field['default']     = $this->default;\n+\t\t$field['description'] = $this->description;\n+\t\t$field['label']       = $this->label;\n+\n+\t\t$field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : '';\n+\t\t$field['class']       = isset( $field['class'] ) ? $field['class'] : 'short';\n+\t\t$field['style']       = isset( $field['style'] ) ? $field['style'] : '';\n+\t\t$field['default']     = ( ! $this->meta_value( $thepostid ) && isset( $field['default'] ) ) ? $field['default'] : $this->meta_value( $thepostid );\n+\t\t$field['value']       = isset( $field['value'] ) ? $field['value'] : $field['default'];\n+\t\t$field['desc_tip']    = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\n+\t\t$field['name']        = isset( $field['name'] ) ? $field['name'] : $field['id'];\n+\t\t$wrapper_attr         = $field['wrapper_attr'] ?? [];\n+\t\t$wrapper_class        = $this->extra['wrapper_class'] ?? '';\n+\n+\t\t\u002F\u002F Custom attribute handling\n+\t\t$custom_attributes = array();\n+\t\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$dependency_check = $this->extra['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$wrapper_class .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\n+\t\tprintf(\n+\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\n+\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\n+\t\t\timplode( ' ', $wrapper_attr ),\n+\t\t\tesc_attr( $this->id ),\n+\t\t\twp_kses_post( $this->label )\n+\t\t);\n+\n+\t\techo '\u003Ctextarea class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\"  name=\"' . esc_attr( $field['name'] ) . '\" id=\"' . esc_attr( $field['id'] ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" rows=\"5\" ' . implode(\n+\t\t\t\t' ',\n+\t\t\t\t$custom_attributes\n+\t\t\t) . '>' . esc_textarea( $field['value'] ) . '\u003C\u002Ftextarea> ';\n+\n+\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t\t}\n+\t\t}\n+\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$value = LP_Request::get_param( $this->id, $this->default ?? '', 'html' );\n+\t\tupdate_post_meta( $post_id, $this->id, $value );\n+\n+\t\treturn $value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ftext.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,115 +1,115 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Text_Field\r\n- *\r\n- * @author nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Meta_Box_Text_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed $default\r\n-\t * @param array $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$extra         = $this->extra;\r\n-\t\t$placeholder   = $extra['placeholder'] ?? '';\r\n-\t\t$class         = ! empty( $extra['class'] ) ? 'class=\"' . esc_attr( $extra['class'] ) . '\"' : '';\r\n-\t\t$style         = ! empty( $extra['style'] ) ? 'style=\"' . esc_attr( $extra['style'] ) . '\"' : '';\r\n-\t\t$wrapper_class = ! empty( $extra['wrapper_class'] ) ? esc_attr( $extra['wrapper_class'] ) : '';\r\n-\t\t$wrapper_attr  = $extra['wrapper_attr'] ?? [];\r\n-\r\n-\t\t$meta_exists = LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $this->id );\r\n-\t\t$meta        = get_post_meta( $thepostid, $this->id, true );\r\n-\t\t$value       = $meta_exists ? $meta : ( $this->default ?? '' );\r\n-\t\t$value       = esc_attr( $extra['value'] ?? $value );\r\n-\t\t$type_input  = $extra['type_input'] ?? 'text';\r\n-\t\t$desc_tip    = $extra['desc_tip'] ?? '';\r\n-\r\n-\t\t\u002F\u002F Custom attribute handling\r\n-\t\t$custom_attributes = array();\r\n-\t\tif ( ! empty( $extra['custom_attributes'] ) && is_array( $extra['custom_attributes'] ) ) {\r\n-\t\t\tforeach ( $extra['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$dependency_check = $extra['dependency'] ?? [];\r\n-\t\tif ( ! empty( $dependency_check ) ) {\r\n-\t\t\tif ( $dependency_check['is_disable'] ) {\r\n-\t\t\t\t$wrapper_class .= ' lp-option-disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\r\n-\t\t}\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\r\n-\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\r\n-\t\t\tesc_attr( implode( ' ', $wrapper_attr ) ),\r\n-\t\t\tesc_attr( $this->id ),\r\n-\t\t\twp_kses_post( $this->label )\r\n-\t\t);\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cinput type=\"%s\" %s %s name=\"%s\" id=\"%s\" value=\"%s\" placeholder=\"%s\" %s \u002F>',\r\n-\t\t\tesc_attr( $type_input ),\r\n-\t\t\t$class,\r\n-\t\t\t$style,\r\n-\t\t\t$this->id,\r\n-\t\t\t$this->id,\r\n-\t\t\t$value,\r\n-\t\t\tesc_attr( $placeholder ),\r\n-\t\t\timplode( ' ', $custom_attributes )\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $this->description ) ) {\r\n-\t\t\techo '\u003Cp class=\"description\">';\r\n-\t\t\techo '\u003Cspan>' . wp_kses_post( $this->description ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $desc_tip ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $desc_tip );\r\n-\t\t\t}\r\n-\t\t\techo '\u003C\u002Fp>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$type_input = $this->extra['type_input'] ?? 'text';\r\n-\t\t$meta_value = LP_Request::get_param( $this->id, $this->default ?? '', 'text', 'post' );\r\n-\r\n-\t\tif ( $meta_value !== '' && $type_input === 'number' ) {\r\n-\t\t\t$meta_value = (float) $meta_value;\r\n-\t\t\tif ( isset( $this->extra['custom_attributes']['max'] ) ) {\r\n-\t\t\t\t$value_max = (float) $this->extra['custom_attributes']['max'];\r\n-\t\t\t\tif ( $meta_value > $value_max ) {\r\n-\t\t\t\t\t$meta_value = $value_max;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( isset( $this->extra['custom_attributes']['min'] ) ) {\r\n-\t\t\t\t$value_min = (float) $this->extra['custom_attributes']['min'];\r\n-\t\t\t\tif ( $meta_value \u003C $value_min ) {\r\n-\t\t\t\t\t$meta_value = $value_min;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $meta_value );\r\n-\r\n-\t\treturn $meta_value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_Text_Field\n+ *\n+ * @author nhamdv\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Meta_Box_Text_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed $default\n+\t * @param array $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$extra         = $this->extra;\n+\t\t$placeholder   = $extra['placeholder'] ?? '';\n+\t\t$class         = ! empty( $extra['class'] ) ? 'class=\"' . esc_attr( $extra['class'] ) . '\"' : '';\n+\t\t$style         = ! empty( $extra['style'] ) ? 'style=\"' . esc_attr( $extra['style'] ) . '\"' : '';\n+\t\t$wrapper_class = ! empty( $extra['wrapper_class'] ) ? esc_attr( $extra['wrapper_class'] ) : '';\n+\t\t$wrapper_attr  = $extra['wrapper_attr'] ?? [];\n+\n+\t\t$meta_exists = LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $this->id );\n+\t\t$meta        = get_post_meta( $thepostid, $this->id, true );\n+\t\t$value       = $meta_exists ? $meta : ( $this->default ?? '' );\n+\t\t$value       = esc_attr( $extra['value'] ?? $value );\n+\t\t$type_input  = $extra['type_input'] ?? 'text';\n+\t\t$desc_tip    = $extra['desc_tip'] ?? '';\n+\n+\t\t\u002F\u002F Custom attribute handling\n+\t\t$custom_attributes = array();\n+\t\tif ( ! empty( $extra['custom_attributes'] ) && is_array( $extra['custom_attributes'] ) ) {\n+\t\t\tforeach ( $extra['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$dependency_check = $extra['dependency'] ?? [];\n+\t\tif ( ! empty( $dependency_check ) ) {\n+\t\t\tif ( $dependency_check['is_disable'] ) {\n+\t\t\t\t$wrapper_class .= ' lp-option-disabled';\n+\t\t\t}\n+\n+\t\t\t$wrapper_attr[] = 'data-dependency=' . $dependency_check['name'];\n+\t\t}\n+\n+\t\tprintf(\n+\t\t\t'\u003Cdiv class=\"form-field %s\" %s>\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\n+\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\n+\t\t\tesc_attr( implode( ' ', $wrapper_attr ) ),\n+\t\t\tesc_attr( $this->id ),\n+\t\t\twp_kses_post( $this->label )\n+\t\t);\n+\n+\t\tprintf(\n+\t\t\t'\u003Cinput type=\"%s\" %s %s name=\"%s\" id=\"%s\" value=\"%s\" placeholder=\"%s\" %s \u002F>',\n+\t\t\tesc_attr( $type_input ),\n+\t\t\t$class,\n+\t\t\t$style,\n+\t\t\t$this->id,\n+\t\t\t$this->id,\n+\t\t\t$value,\n+\t\t\tesc_attr( $placeholder ),\n+\t\t\timplode( ' ', $custom_attributes )\n+\t\t);\n+\n+\t\tif ( ! empty( $this->description ) ) {\n+\t\t\techo '\u003Cp class=\"description\">';\n+\t\t\techo '\u003Cspan>' . wp_kses_post( $this->description ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $desc_tip ) ) {\n+\t\t\t\tlearn_press_quick_tip( $desc_tip );\n+\t\t\t}\n+\t\t\techo '\u003C\u002Fp>';\n+\t\t}\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$type_input = $this->extra['type_input'] ?? 'text';\n+\t\t$meta_value = LP_Request::get_param( $this->id, $this->default ?? '', 'text', 'post' );\n+\n+\t\tif ( $meta_value !== '' && $type_input === 'number' ) {\n+\t\t\t$meta_value = (float) $meta_value;\n+\t\t\tif ( isset( $this->extra['custom_attributes']['max'] ) ) {\n+\t\t\t\t$value_max = (float) $this->extra['custom_attributes']['max'];\n+\t\t\t\tif ( $meta_value > $value_max ) {\n+\t\t\t\t\t$meta_value = $value_max;\n+\t\t\t\t}\n+\t\t\t} elseif ( isset( $this->extra['custom_attributes']['min'] ) ) {\n+\t\t\t\t$value_min = (float) $this->extra['custom_attributes']['min'];\n+\t\t\t\tif ( $meta_value \u003C $value_min ) {\n+\t\t\t\t\t$meta_value = $value_min;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $meta_value );\n+\n+\t\treturn $meta_value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fwysiwyg.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_WP_Editor_Field\r\n- *\r\n- * @author Nhamdv\r\n- * @version 1.0.0\r\n- * @since 4.1.3\r\n- *\u002F\r\n-class LP_Meta_Box_WP_Editor_Field extends LP_Meta_Box_Field {\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $description\r\n-\t * @param mixed  $default\r\n-\t * @param array  $extra\r\n-\t *\u002F\r\n-\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\r\n-\t\tparent::__construct( $label, $description, $default, $extra );\r\n-\t}\r\n-\r\n-\tpublic function output( $thepostid ) {\r\n-\t\twp_enqueue_editor();\r\n-\r\n-\t\tif ( empty( $this->id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$extra         = $this->extra;\r\n-\t\t$wrapper_class = ! empty( $extra['wrapper_class'] ) ? esc_attr( $extra['wrapper_class'] ) : '';\r\n-\r\n-\t\t$meta     = $this->meta_value( $thepostid );\r\n-\t\t$value    = ! $meta && ! empty( $this->default ) ? $this->default : $meta;\r\n-\t\t$value    = $extra['value'] ?? $value;\r\n-\t\t$desc_tip = $extra['desc_tip'] ?? '';\r\n-\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-meta-box__wp-editor form-field %s\">\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\r\n-\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\r\n-\t\t\tesc_attr( $this->id ),\r\n-\t\t\twp_kses_post( $this->label )\r\n-\t\t);\r\n-\r\n-\t\twp_editor(\r\n-\t\t\t$value,\r\n-\t\t\tsanitize_key( $this->id ),\r\n-\t\t\tarray(\r\n-\t\t\t\t'textarea_rows' => 10,\r\n-\t\t\t\t'editor_class'  => 'lp-meta-box__wp-editor__textarea',\r\n-\t\t\t\t'textarea_name' => $this->id,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $this->description ) ) {\r\n-\t\t\techo '\u003Cp class=\"description\">';\r\n-\t\t\techo '\u003Cspan>' . wp_kses_post( $this->description ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $desc_tip ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $desc_tip );\r\n-\t\t\t}\r\n-\t\t\techo '\u003C\u002Fp>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic function save( $post_id ) {\r\n-\t\t$meta_value = LP_Request::get_param( $this->id, $this->default ?? '', 'html' );\r\n-\r\n-\t\tupdate_post_meta( $post_id, $this->id, $meta_value );\r\n-\r\n-\t\treturn $meta_value;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Meta_Box_WP_Editor_Field\n+ *\n+ * @author Nhamdv\n+ * @version 1.0.0\n+ * @since 4.1.3\n+ *\u002F\n+class LP_Meta_Box_WP_Editor_Field extends LP_Meta_Box_Field {\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $description\n+\t * @param mixed  $default\n+\t * @param array  $extra\n+\t *\u002F\n+\tpublic function __construct( $label = '', $description = '', $default = '', $extra = array() ) {\n+\t\tparent::__construct( $label, $description, $default, $extra );\n+\t}\n+\n+\tpublic function output( $thepostid ) {\n+\t\twp_enqueue_editor();\n+\n+\t\tif ( empty( $this->id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$extra         = $this->extra;\n+\t\t$wrapper_class = ! empty( $extra['wrapper_class'] ) ? esc_attr( $extra['wrapper_class'] ) : '';\n+\n+\t\t$meta     = $this->meta_value( $thepostid );\n+\t\t$value    = ! $meta && ! empty( $this->default ) ? $this->default : $meta;\n+\t\t$value    = $extra['value'] ?? $value;\n+\t\t$desc_tip = $extra['desc_tip'] ?? '';\n+\n+\t\tprintf(\n+\t\t\t'\u003Cdiv class=\"lp-meta-box__wp-editor form-field %s\">\u003Clabel for=\"%s\">%s\u003C\u002Flabel>',\n+\t\t\tesc_attr( $this->id . '_field ' . $wrapper_class ),\n+\t\t\tesc_attr( $this->id ),\n+\t\t\twp_kses_post( $this->label )\n+\t\t);\n+\n+\t\twp_editor(\n+\t\t\t$value,\n+\t\t\tsanitize_key( $this->id ),\n+\t\t\tarray(\n+\t\t\t\t'textarea_rows' => 10,\n+\t\t\t\t'editor_class'  => 'lp-meta-box__wp-editor__textarea',\n+\t\t\t\t'textarea_name' => $this->id,\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( ! empty( $this->description ) ) {\n+\t\t\techo '\u003Cp class=\"description\">';\n+\t\t\techo '\u003Cspan>' . wp_kses_post( $this->description ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $desc_tip ) ) {\n+\t\t\t\tlearn_press_quick_tip( $desc_tip );\n+\t\t\t}\n+\t\t\techo '\u003C\u002Fp>';\n+\t\t}\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic function save( $post_id ) {\n+\t\t$meta_value = LP_Request::get_param( $this->id, $this->default ?? '', 'html' );\n+\n+\t\tupdate_post_meta( $post_id, $this->id, $meta_value );\n+\n+\t\treturn $meta_value;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,92 @@\n-\u003C?php\r\n-class LP_Meta_Box_Lesson extends LP_Meta_Box {\r\n-\r\n-\tprivate static $_instance = null;\r\n-\r\n-\tpublic $post_type = LP_LESSON_CPT;\r\n-\r\n-\tpublic function add_meta_box() {\r\n-\t\tadd_meta_box( 'lesson_settings', esc_html__( 'Lesson Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\r\n-\t}\r\n-\r\n-\tpublic function metabox( $post_id = 0 ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fmetabox\u002Flesson\u002Flists',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_duration' => new LP_Meta_Box_Duration_Field(\r\n-\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t'0',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'default_time'      => 'minute',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_preview'  => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Preview', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Students can view this lesson content without taking the course.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function output( $post ) {\r\n-\t\tparent::output( $post );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--lesson\">\r\n-\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tdo_action( 'learnpress\u002Flesson-settings\u002Fbefore' );\r\n-\t\t\t\t\u002F\u002F Check if add_filter to old version.\r\n-\t\t\t\t$is_old = false;\r\n-\r\n-\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\r\n-\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t$object->id = $key;\r\n-\t\t\t\t\t\t$output     = $object->output( $post->ID );\r\n-\t\t\t\t\t\tif ( ! empty( $output ) ) {\r\n-\t\t\t\t\t\t\tlearn_press_echo_vuejs_write_on_php( $object->output( $post->ID ) );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} elseif ( is_array( $object ) ) {\r\n-\t\t\t\t\t\t$is_old = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cstyle type=\"text\u002Fcss\"> .lesson-materials{display: flex; flex-direction: row; flex-wrap: nowrap; } .field-material__label{width: 180px; max-width: 180px; min-width: 180px; } .field-material__label label{color: #23282d; font-size: 14px; font-weight: 600; flex: 0 0 auto; } \u003C\u002Fstyle>\r\n-\t\t\t\t\u003Cdiv class=\"lesson-materials\">\r\n-\t\t\t\t\t\u003Cdiv class=\"field-material__label\">\r\n-\t\t\t\t\t\t\u003Clabel>\u003C?php echo __( 'Materials', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$material = new LP_Meta_Box_Material_Fields();\r\n-\t\t\t\t$material->output( $post->ID );\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( $is_old ) {\r\n-\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learnpress\u002Flesson-settings\u002Fafter' );\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Meta_Box_Lesson::instance();\r\n+\u003C?php\n+class LP_Meta_Box_Lesson extends LP_Meta_Box {\n+\n+\tprivate static $_instance = null;\n+\n+\tpublic $post_type = LP_LESSON_CPT;\n+\n+\tpublic function add_meta_box() {\n+\t\tadd_meta_box( 'lesson_settings', esc_html__( 'Lesson Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\n+\t}\n+\n+\tpublic function metabox( $post_id = 0 ) {\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fmetabox\u002Flesson\u002Flists',\n+\t\t\tarray(\n+\t\t\t\t'_lp_duration' => new LP_Meta_Box_Duration_Field(\n+\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\t'0',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'default_time'      => 'minute',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_preview'  => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Preview', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Students can view this lesson content without taking the course.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function output( $post ) {\n+\t\tparent::output( $post );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--lesson\">\n+\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tdo_action( 'learnpress\u002Flesson-settings\u002Fbefore' );\n+\t\t\t\t\u002F\u002F Check if add_filter to old version.\n+\t\t\t\t$is_old = false;\n+\n+\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\n+\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t\t$object->id = $key;\n+\t\t\t\t\t\t$output     = $object->output( $post->ID );\n+\t\t\t\t\t\tif ( ! empty( $output ) ) {\n+\t\t\t\t\t\t\tlearn_press_echo_vuejs_write_on_php( $object->output( $post->ID ) );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} elseif ( is_array( $object ) ) {\n+\t\t\t\t\t\t$is_old = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\u003Cstyle type=\"text\u002Fcss\"> .lesson-materials{display: flex; flex-direction: row; flex-wrap: nowrap; } .field-material__label{width: 180px; max-width: 180px; min-width: 180px; } .field-material__label label{color: #23282d; font-size: 14px; font-weight: 600; flex: 0 0 auto; } \u003C\u002Fstyle>\n+\t\t\t\t\u003Cdiv class=\"lesson-materials\">\n+\t\t\t\t\t\u003Cdiv class=\"field-material__label\">\n+\t\t\t\t\t\t\u003Clabel>\u003C?php echo __( 'Materials', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php\n+\t\t\t\t$material = new LP_Meta_Box_Material_Fields();\n+\t\t\t\t$material->output( $post->ID );\n+\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( $is_old ) {\n+\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learnpress\u002Flesson-settings\u002Fafter' );\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+LP_Meta_Box_Lesson::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,593 +1,623 @@\n-\u003C?php\r\n-\u002F**\r\n- * Output a text input box.\r\n- *\r\n- * @param array $field\r\n- *\u002F\r\n-function lp_meta_box_text_input_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid            = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['placeholder'] = esc_attr( $field['placeholder'] ?? '' );\r\n-\t$field['class']       = esc_attr( $field['class'] ?? '' );\r\n-\t$field['style']       = esc_attr( $field['style'] ?? '' );\r\n-\t$wrapper_class        = esc_attr( $field['wrapper_class'] ?? '' );\r\n-\r\n-\t\u002F**\r\n-\t * If you want to set default value for input text\r\n-\t * You must us hook default_{$meta_type}_metadata | Read more get_metadata_default() function\r\n-\t *\u002F\r\n-\t$value_exists        = LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $field['id'] );\r\n-\t$value               = get_post_meta( $thepostid, $field['id'], true );\r\n-\t$field['value']      = $value_exists ? $value : ( $field['default'] ?? '' );\r\n-\t$field['id']         = esc_attr( $field['id'] ?? '' );\r\n-\t$field['type_input'] = esc_attr( $field['type_input'] ?? 'text' );\r\n-\t$field['desc_tip']   = esc_attr( $field['desc_tip'] ?? '' );\r\n-\r\n-\t\u002F\u002F Custom attribute handling\r\n-\t$custom_attributes = array();\r\n-\r\n-\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$custom_attributes_str = implode( ' ', $custom_attributes );\r\n-\t?>\r\n-\r\n-\t\u003Cdiv class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field ' . $wrapper_class ); ?>\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\t\u003Cinput type=\"\u003C?php echo esc_attr( $field['type_input'] ); ?>\"\r\n-\t\t\tclass=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\r\n-\t\t\tvalue=\"\u003C?php echo esc_attr( $field['value'] ); ?>\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr( $field['placeholder'] ); ?>\"\r\n-\t\t\t\u003C?php echo learn_press_echo_vuejs_write_on_php( $custom_attributes_str ); ?> \u002F>\r\n-\t\u003C?php\r\n-\tif ( ! empty( $field['description'] ) ) {\r\n-\t\techo '\u003Cp class=\"description\">';\r\n-\t\techo '\u003Cspan>' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fp>';\r\n-\t}\r\n-\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-\u002F**\r\n- * Output a textarea input box.\r\n- *\r\n- * @param array $field\r\n- *\u002F\r\n-function lp_meta_box_textarea_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid            = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['id']          = esc_attr( $field['id'] ?? '' );\r\n-\t$field['placeholder'] = esc_attr( $field['placeholder'] ?? '' );\r\n-\t$field['class']       = esc_attr( $field['class'] ?? 'short' );\r\n-\t$field['style']       = esc_attr( $field['style'] ?? '' );\r\n-\t$value_exists         = LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $field['id'] );\r\n-\t$value                = get_post_meta( $thepostid, $field['id'], true );\r\n-\t$field['value']       = esc_textarea( $value_exists ? $value : ( $field['default'] ?? '' ) );\r\n-\t$field['desc_tip']    = esc_attr( $field['desc_tip'] ?? '' );\r\n-\t$field['name']        = esc_attr( $field['name'] ?? $field['id'] );\r\n-\r\n-\t\u002F\u002F Custom attribute handling\r\n-\t$custom_attributes = array();\r\n-\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$custom_attributes_str = implode( ' ', $custom_attributes );\r\n-\t?>\r\n-\r\n-\t\u003Cp class=\"form-field  \u003C?php echo esc_attr( $field['id'] . '_field ' ); ?>\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\t\u003Ctextarea class=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\r\n-\t\t\tname=\"\u003C?php echo esc_attr( $field['name'] ); ?>\"\r\n-\t\t\tid=\"\u003C?php esc_attr( $field['id'] ); ?>\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr( $field['placeholder'] ); ?>\"\r\n-\t\t\trows=\"5\" \u003C?php echo esc_attr( $custom_attributes_str ); ?>>\u003C?php echo wp_kses_post( $field['value'] ); ?>\u003C\u002Ftextarea>\r\n-\t\u003C?php\r\n-\tif ( ! empty( $field['description'] ) ) {\r\n-\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t}\r\n-\t}\r\n-\t?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-\u002F**\r\n- * Output a checkbox input box.\r\n- *\r\n- * @param array $field\r\n- *\u002F\r\n-function lp_meta_box_checkbox_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid      = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['id']    = esc_attr( $field['id'] ?? '' );\r\n-\t$field['class'] = esc_attr( $field['class'] ?? '' );\r\n-\t$field['style'] = esc_attr( $field['style'] ?? '' );\r\n-\t$wrapper_class  = esc_attr( $field['wrapper_class'] ?? '' );\r\n-\t$name           = ! empty( $field['name'] ) ? esc_attr( $field['name'] ) : esc_attr( $field['id'] );\r\n-\r\n-\t$value_db = get_post_meta( $thepostid, $field['id'], true );\r\n-\r\n-\t$checked = '';\r\n-\tif ( 'yes' === $value_db ) {\r\n-\t\t$checked = 'checked=\"checked\"';\r\n-\t}\r\n-\r\n-\t\u002F\u002F Custom attribute handling\r\n-\t$custom_attributes = array();\r\n-\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$custom_attributes_str = implode( ' ', $custom_attributes );\r\n-\t?>\r\n-\r\n-\t\u003Cdiv class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field' . $wrapper_class ); ?>\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\r\n-\t\u003Cinput type=\"checkbox\"\r\n-\t\tclass=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\r\n-\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\r\n-\t\tname=\"\u003C?php echo esc_attr( $name ); ?>\"\r\n-\t\tid=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\r\n-\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $checked ); ?>\r\n-\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $custom_attributes_str ); ?> \u002F>\r\n-\r\n-\t\u003C?php\r\n-\tif ( ! empty( $field['description'] ) ) {\r\n-\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t}\r\n-\t}\r\n-\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-\u002F**\r\n- * Output a select input box.\r\n- *\r\n- * @param array $field Data about the field to render.\r\n- *\u002F\r\n-function lp_meta_box_select_field( $field = array() ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$default   = ( ! get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t);\r\n-\r\n-\t$field = wp_parse_args(\r\n-\t\t$field,\r\n-\t\tarray(\r\n-\t\t\t'class'             => 'select',\r\n-\t\t\t'style'             => '',\r\n-\t\t\t'wrapper_class'     => '', \u002F\u002F Use \"lp-select-2\" for select2.\r\n-\t\t\t'value'             => isset( $field['value'] ) ? $field['value'] : $default,\r\n-\t\t\t'name'              => $field['id'],\r\n-\t\t\t'desc_tip'          => false,\r\n-\t\t\t'multiple'          => false,\r\n-\t\t\t'custom_attributes' => array(),\r\n-\t\t)\r\n-\t);\r\n-\r\n-\t$label_attributes = array(\r\n-\t\t'for' => $field['id'],\r\n-\t);\r\n-\r\n-\t$field_attributes          = (array) $field['custom_attributes'];\r\n-\t$field_attributes['style'] = $field['style'] ?? '';\r\n-\t$field_attributes['id']    = $field['id'] ?? '';\r\n-\t$field_attributes['name']  = $field['multiple'] ? $field['name'] . '[]' : $field['name'];\r\n-\t$field_attributes['class'] = $field['class'] ?? '';\r\n-\r\n-\tif ( $field['multiple'] ) {\r\n-\t\t$field['wrapper_class']       = 'lp-select-2';\r\n-\t\t$field_attributes['multiple'] = true;\r\n-\t}\r\n-\r\n-\t$tooltip     = ! empty( $field['description'] ) && false !== $field['desc_tip'] ? $field['description'] : '';\r\n-\t$description = ! empty( $field['description'] ) && false === $field['desc_tip'] ? $field['description'] : '';\r\n-\t?>\r\n-\r\n-\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ); ?>\">\r\n-\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\u003C?php echo wp_kses_post( $field['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $field['options'] as $key => $value ) {\r\n-\t\t\t\techo '\u003Coption value=\"' . esc_attr( $key ) . '\"' . ( is_array( $field['value'] ) ? selected( in_array( (string) $key, $field['value'], true ), true ) : selected( $key, $field['value'], false ) ) . '>' . esc_html( $value ) . '\u003C\u002Foption>';\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fselect>\r\n-\t\t\u003C?php\r\n-\t\tif ( ! empty( $field['description'] ) ) {\r\n-\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-\u002F**\r\n- * Output a radio input box.\r\n- *\r\n- * @param array $field\r\n- *\u002F\r\n-function lp_meta_box_radio_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid              = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['class']         = $field['class'] ?? 'select';\r\n-\t$field['style']         = $field['style'] ?? '';\r\n-\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\r\n-\t$field['default']       = ( ! get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t);\r\n-\t$field['value']         = $field['value'] ?? $field['default'];\r\n-\t$field['name']          = $field['name'] ?? $field['id'];\r\n-\t$field['desc_tip']      = $field['desc_tip'] ?? false;\r\n-\r\n-\techo '\u003Cfieldset class=\"form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\u003Ch4>' . wp_kses_post( $field['label'] ) . '\u003C\u002Fh4>';\r\n-\r\n-\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\r\n-\t\tlearn_press_quick_tip( $field['description'] );\r\n-\t}\r\n-\r\n-\techo '\u003Cul class=\"lp-radios-field-meta-box\">';\r\n-\r\n-\tforeach ( $field['options'] as $key => $value ) {\r\n-\t\techo '\u003Cli>\u003Clabel>\u003Cinput\r\n-\t\t\t\tname=\"' . esc_attr( $field['name'] ) . '\"\r\n-\t\t\t\tvalue=\"' . esc_attr( $key ) . '\"\r\n-\t\t\t\ttype=\"radio\"\r\n-\t\t\t\tclass=\"' . esc_attr( $field['class'] ) . '\"\r\n-\t\t\t\tstyle=\"' . esc_attr( $field['style'] ) . '\"\r\n-\t\t\t\t' . checked( esc_attr( $field['value'] ), esc_attr( $key ), false ) . '\r\n-\t\t\t\t\u002F> ' . ( $value ) . '\u003C\u002Flabel>\r\n-\t\t\u003C\u002Fli>';\r\n-\t}\r\n-\techo '\u003C\u002Ful>';\r\n-\r\n-\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\r\n-\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\t}\r\n-\r\n-\techo '\u003C\u002Ffieldset>';\r\n-}\r\n-\r\n-function lp_meta_box_file_input_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid              = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'short';\r\n-\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\r\n-\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\r\n-\t$field['default']       = ( ! get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t);\r\n-\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\r\n-\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\r\n-\t$field['mime_type']     = isset( $field['mime_type'] ) ? implode( ',', $field['mime_type'] ) : '';\r\n-\t$field['multil']        = ( isset( $field['multil'] ) && $field['multil'] ) ? true : false;\r\n-\t$field['desc_tip']      = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\r\n-\r\n-\t\u002F\u002F Custom attribute handling\r\n-\t$custom_attributes = array();\r\n-\r\n-\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\techo '\u003Cdiv class=\"form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\r\n-\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\r\n-\r\n-\techo '\u003Cdiv id=\"' . esc_attr( $field['id'] ) . '\" class=\"lp-meta-box__file ' . esc_attr( $field['class'] ) . '\" data-mime=\"' . $field['mime_type'] . '\" data-multil=\"' . $field['multil'] . '\" style=\"' . esc_attr( $field['style'] ) . '\" ' . implode(\r\n-\t\t' ',\r\n-\t\t$custom_attributes\r\n-\t) . '>';\r\n-\techo '\u003Cul class=\"lp-meta-box__file_list\">';\r\n-\r\n-\tif ( ! empty( $field['value'] ) ) {\r\n-\t\tforeach ( (array) $field['value'] as $attachment_id ) {\r\n-\t\t\t$url = wp_get_attachment_url( $attachment_id );\r\n-\r\n-\t\t\tif ( $url ) {\r\n-\t\t\t\t$check_file = wp_check_filetype( $url );\r\n-\r\n-\t\t\t\techo '\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' . $attachment_id . '\">';\r\n-\r\n-\t\t\t\tif ( in_array( $check_file['ext'], array( 'jpg', 'png', 'gif', 'bmp', 'tif', 'jpeg' ), true ) ) {\r\n-\t\t\t\t\techo wp_get_attachment_image( $attachment_id, 'thumbnail' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\techo '\u003Cimg class=\"is_file\" src=\"' . wp_mime_type_icon( $check_file['type'] ) . '\" \u002F>';\r\n-\t\t\t\t\techo '\u003Cspan>' . wp_basename( get_attached_file( $attachment_id ) ) . '\u003C\u002Fspan>';\r\n-\t\t\t\t}\r\n-\t\t\t\techo '\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>';\r\n-\t\t\t\techo '\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\techo '\u003C\u002Ful>';\r\n-\techo '\u003Cinput class=\"lp-meta-box__file_input\" type=\"hidden\" name=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr(\r\n-\t\t( ! empty( $field['value'] ) && is_array( $field['value'] ) ) ? implode(\r\n-\t\t\t',',\r\n-\t\t\t$field['value']\r\n-\t\t) : $field['value']\r\n-\t) . '\" \u002F>';\r\n-\techo '\u003Cp>';\r\n-\techo '\u003Ca href=\"#\" class=\"button btn-upload\">' . esc_html__( '+ Add media', 'learnpress' ) . '\u003C\u002Fa>';\r\n-\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\r\n-\t\tlearn_press_quick_tip( $field['description'] );\r\n-\t}\r\n-\techo '\u003C\u002Fp>';\r\n-\r\n-\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\r\n-\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\t}\r\n-\techo '\u003C\u002Fdiv>';\r\n-\techo '\u003C\u002Fdiv>';\r\n-}\r\n-\r\n-\u002F**\r\n- * Output a duration input box.\r\n- *\r\n- * @param array $field\r\n- *\u002F\r\n-function lp_meta_box_duration_field( $field ) {\r\n-\tglobal $thepostid, $post;\r\n-\r\n-\t$thepostid              = empty( $thepostid ) ? $post->ID : $thepostid;\r\n-\t$field['placeholder']   = $field['placeholder'] ?? '';\r\n-\t$field['class']         = $field['class'] ?? 'short';\r\n-\t$field['style']         = $field['style'] ?? '';\r\n-\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\r\n-\t$field['default']       = ( ! get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\r\n-\t\t$thepostid,\r\n-\t\t$field['id'],\r\n-\t\ttrue\r\n-\t);\r\n-\t$field['value']         = $field['value'] ?? $field['default'];\r\n-\t$field['name']          = $field['name'] ?? $field['id'];\r\n-\t$data_type              = empty( $field['data_type'] ) ? '' : $field['data_type'];\r\n-\t$duration               = learn_press_get_course_duration_support();\r\n-\r\n-\t$duration_keys = array_keys( $duration );\r\n-\t$default_time  = ! empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );\r\n-\r\n-\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $field['value'], $matches ) ) {\r\n-\t\t$a1 = $matches[1][0];\r\n-\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;\r\n-\t} else {\r\n-\t\t$a1 = absint( $field['value'] );\r\n-\t\t$a2 = $default_time;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Custom attribute handling\r\n-\t$custom_attributes = array();\r\n-\r\n-\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\r\n-\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\r\n-\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$html_option = '';\r\n-\tforeach ( $duration as $k => $v ) {\r\n-\t\t$html_option .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', $k, selected( $k, $a2, false ), $v );\r\n-\t}\r\n-\r\n-\techo '\u003Cp class=\"lp-meta-box__duration form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\r\n-\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\r\n-\r\n-\techo '\u003Cinput type=\"number\" class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\" name=\"' . esc_attr( $field['name'] ) . '[]\" id=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( $a1 ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" ' . implode(\r\n-\t\t' ',\r\n-\t\t$custom_attributes\r\n-\t) . ' \u002F> ';\r\n-\r\n-\techo '\u003Cselect name=\"' . esc_attr( $field['name'] ) . '[]\" class=\"lp-meta-box__duration-select\">' . $html_option . '\u003C\u002Fselect>';\r\n-\r\n-\tif ( ! empty( $field['description'] ) ) {\r\n-\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\tif ( ! empty( $field['desc_tip'] ) ) {\r\n-\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\techo '\u003C\u002Fp>';\r\n-}\r\n-\r\n-\u002F**\r\n- * Use for Type: custom_fields in LP4.\r\n- *\r\n- * @param [type] $field get ID, options....\r\n- * @param [type] $values get_option() value\r\n- * @param [type] $key\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function lp_metabox_custom_fields( $field, $values, $key ) {\r\n-\t?>\r\n-\t\u003Ctr>\r\n-\t\t\u003Ctd class=\"sort\">\r\n-\t\t\t\u003Cinput class=\"count\" type=\"hidden\" value=\"\u003C?php echo esc_attr( $key ); ?>\" name=\"\u003C?php echo esc_attr( $field['id'] ) . '[' . $key . ']' . '[sort]'; ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" value=\"\u003C?php echo ! empty( $values['id'] ) ? $values['id'] : wp_rand( 1, 10000 ) . $key; ?>\" name=\"\u003C?php echo esc_attr( $field['id'] ) . '[' . $key . ']' . '[id]'; ?>\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\t\u003C?php\r\n-\t\tif ( $field['options'] ) {\r\n-\t\t\tforeach ( $field['options'] as $cfk => $val ) {\r\n-\t\t\t\t$name = $field['id'] . '[' . $key . ']' . '[' . $cfk . ']';\r\n-\r\n-\t\t\t\tswitch ( $val['type'] ) {\r\n-\t\t\t\t\tcase 'text':\r\n-\t\t\t\t\tcase 'password':\r\n-\t\t\t\t\tcase 'datetime':\r\n-\t\t\t\t\tcase 'datetime-local':\r\n-\t\t\t\t\tcase 'date':\r\n-\t\t\t\t\tcase 'month':\r\n-\t\t\t\t\tcase 'time':\r\n-\t\t\t\t\tcase 'week':\r\n-\t\t\t\t\tcase 'number':\r\n-\t\t\t\t\tcase 'email':\r\n-\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\tcase 'tel':\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $name ); ?>\" type=\"\u003C?php echo esc_attr( $val['type'] ); ?>\"\r\n-\t\t\t\t\t\t\t\tclass=\"input-text\"\r\n-\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php echo isset( $val['placeholder'] ) ? esc_attr( $val['placeholder'] ) : ''; ?>\"\r\n-\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo ! empty( $values[ $cfk ] ) ? esc_attr( $values[ $cfk ] ) : ''; ?>\">\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\t\tcase 'select':\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\t\u003Cselect name=\"\u003C?php echo esc_attr( $name ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tif ( isset( $val['options'] ) ) {\r\n-\t\t\t\t\t\t\t\t\tforeach ( $val['options'] as $cfks => $cfselect ) {\r\n-\t\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Coption\r\n-\t\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $cfks ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t\t\t\t\techo ! empty( $values[ $cfk ] ) ? selected(\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t$values[ $cfk ],\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\t(string) $cfks\r\n-\t\t\t\t\t\t\t\t\t\t\t\t) : '';\r\n-\t\t\t\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\t\t\t>\u003C?php echo wp_kses_post( $cfselect ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $name ); ?>\" type=\"checkbox\" name=\"\" value=\"1\" \u003C?php echo ! empty( $values[ $cfk ] ) ? checked( $values[ $cfk ], 'yes' ) : ''; ?>>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t?>\r\n-\t\t\u003Ctd width=\"2%\">\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-function lp_implode_html_attributes( $raw_attributes ) {\r\n-\t$attributes = array();\r\n-\tforeach ( $raw_attributes as $name => $value ) {\r\n-\t\t$attributes[] = esc_attr( $name ) . '=\"' . esc_attr( $value ) . '\"';\r\n-\t}\r\n-\r\n-\treturn implode( ' ', $attributes );\r\n-}\r\n-\r\n-function lp_meta_box_output( $metaboxes = array() ) {\r\n-\tif ( ! empty( $metaboxes ) ) {\r\n-\t\tforeach ( $metaboxes as $id => $field ) {\r\n-\t\t\t$field['id'] = $id;\r\n-\r\n-\t\t\tswitch ( $field['type'] ) {\r\n-\t\t\t\tcase 'text':\r\n-\t\t\t\tcase 'number':\r\n-\t\t\t\tcase 'url':\r\n-\t\t\t\t\tlp_meta_box_text_input_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\tlp_meta_box_textarea_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\tlp_meta_box_checkbox_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\tlp_meta_box_duration_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'select':\r\n-\t\t\t\t\tlp_meta_box_select_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'radio':\r\n-\t\t\t\t\tlp_meta_box_radio_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'file':\r\n-\t\t\t\t\tlp_meta_box_file_input_field( $field );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Resolve post ID for meta box rendering.\n+ *\n+ * In some admin\u002FAJAX contexts, global $post can be null.\n+ * Returning 0 allows callers to safely fall back to default values.\n+ *\n+ * @return int\n+ *\u002F\n+function lp_meta_box_get_post_id() {\n+\tglobal $thepostid, $post;\n+\n+\tif ( ! empty( $thepostid ) ) {\n+\t\treturn absint( $thepostid );\n+\t}\n+\n+\tif ( is_object( $post ) && ! empty( $post->ID ) ) {\n+\t\t$thepostid = absint( $post->ID );\n+\n+\t\treturn $thepostid;\n+\t}\n+\n+\t$resolved_post_id = absint( get_the_ID() );\n+\n+\tif ( $resolved_post_id > 0 ) {\n+\t\t$thepostid = $resolved_post_id;\n+\t}\n+\n+\treturn $resolved_post_id;\n+}\n+\n+\u002F**\n+ * Output a text input box.\n+ *\n+ * @param array $field\n+ *\u002F\n+function lp_meta_box_text_input_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid            = lp_meta_box_get_post_id();\n+\t$field['placeholder'] = esc_attr( $field['placeholder'] ?? '' );\n+\t$field['class']       = esc_attr( $field['class'] ?? '' );\n+\t$field['style']       = esc_attr( $field['style'] ?? '' );\n+\t$wrapper_class        = esc_attr( $field['wrapper_class'] ?? '' );\n+\n+\t\u002F**\n+\t * If you want to set default value for input text\n+\t * You must us hook default_{$meta_type}_metadata | Read more get_metadata_default() function\n+\t *\u002F\n+\t$value_exists        = $thepostid > 0 ? LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $field['id'] ) : false;\n+\t$value               = $thepostid > 0 ? get_post_meta( $thepostid, $field['id'], true ) : '';\n+\t$field['value']      = $value_exists ? $value : ( $field['default'] ?? '' );\n+\t$field['id']         = esc_attr( $field['id'] ?? '' );\n+\t$field['type_input'] = esc_attr( $field['type_input'] ?? 'text' );\n+\t$field['desc_tip']   = esc_attr( $field['desc_tip'] ?? '' );\n+\n+\t\u002F\u002F Custom attribute handling\n+\t$custom_attributes = array();\n+\n+\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t}\n+\t}\n+\n+\t$custom_attributes_str = implode( ' ', $custom_attributes );\n+\t?>\n+\n+\t\u003Cdiv class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field ' . $wrapper_class ); ?>\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\t\u003Cinput type=\"\u003C?php echo esc_attr( $field['type_input'] ); ?>\"\n+\t\t\tclass=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\n+\t\t\tname=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\n+\t\t\tid=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\n+\t\t\tvalue=\"\u003C?php echo esc_attr( $field['value'] ); ?>\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr( $field['placeholder'] ); ?>\"\n+\t\t\t\u003C?php echo learn_press_echo_vuejs_write_on_php( $custom_attributes_str ); ?> \u002F>\n+\t\u003C?php\n+\tif ( ! empty( $field['description'] ) ) {\n+\t\techo '\u003Cp class=\"description\">';\n+\t\techo '\u003Cspan>' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t}\n+\t\techo '\u003C\u002Fp>';\n+\t}\n+\t?>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\n+\n+\u002F**\n+ * Output a textarea input box.\n+ *\n+ * @param array $field\n+ *\u002F\n+function lp_meta_box_textarea_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid            = lp_meta_box_get_post_id();\n+\t$field['id']          = esc_attr( $field['id'] ?? '' );\n+\t$field['placeholder'] = esc_attr( $field['placeholder'] ?? '' );\n+\t$field['class']       = esc_attr( $field['class'] ?? 'short' );\n+\t$field['style']       = esc_attr( $field['style'] ?? '' );\n+\t$value_exists         = $thepostid > 0 ? LP_Database::getInstance()->check_key_postmeta_exists( $thepostid, $field['id'] ) : false;\n+\t$value                = $thepostid > 0 ? get_post_meta( $thepostid, $field['id'], true ) : '';\n+\t$field['value']       = esc_textarea( $value_exists ? $value : ( $field['default'] ?? '' ) );\n+\t$field['desc_tip']    = esc_attr( $field['desc_tip'] ?? '' );\n+\t$field['name']        = esc_attr( $field['name'] ?? $field['id'] );\n+\n+\t\u002F\u002F Custom attribute handling\n+\t$custom_attributes = array();\n+\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t}\n+\t}\n+\n+\t$custom_attributes_str = implode( ' ', $custom_attributes );\n+\t?>\n+\n+\t\u003Cp class=\"form-field  \u003C?php echo esc_attr( $field['id'] . '_field ' ); ?>\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>>\">\n+\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\t\u003Ctextarea class=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\n+\t\t\tname=\"\u003C?php echo esc_attr( $field['name'] ); ?>\"\n+\t\t\tid=\"\u003C?php esc_attr( $field['id'] ); ?>\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr( $field['placeholder'] ); ?>\"\n+\t\t\trows=\"5\" \u003C?php echo esc_attr( $custom_attributes_str ); ?>>\u003C?php echo wp_kses_post( $field['value'] ); ?>\u003C\u002Ftextarea>\n+\t\u003C?php\n+\tif ( ! empty( $field['description'] ) ) {\n+\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t}\n+\t}\n+\t?>\n+\t\u003C\u002Fp>\n+\t\u003C?php\n+}\n+\n+\u002F**\n+ * Output a checkbox input box.\n+ *\n+ * @param array $field\n+ *\u002F\n+function lp_meta_box_checkbox_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid      = lp_meta_box_get_post_id();\n+\t$field['id']    = esc_attr( $field['id'] ?? '' );\n+\t$field['class'] = esc_attr( $field['class'] ?? '' );\n+\t$field['style'] = esc_attr( $field['style'] ?? '' );\n+\t$wrapper_class  = esc_attr( $field['wrapper_class'] ?? '' );\n+\t$name           = ! empty( $field['name'] ) ? esc_attr( $field['name'] ) : esc_attr( $field['id'] );\n+\n+\t$value_db = get_post_meta( $thepostid, $field['id'], true );\n+\n+\t$checked = '';\n+\tif ( 'yes' === $value_db ) {\n+\t\t$checked = 'checked=\"checked\"';\n+\t}\n+\n+\t\u002F\u002F Custom attribute handling\n+\t$custom_attributes = array();\n+\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t}\n+\t}\n+\n+\t$custom_attributes_str = implode( ' ', $custom_attributes );\n+\t?>\n+\n+\t\u003Cdiv class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field' . $wrapper_class ); ?>\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\n+\t\t\t\u003C?php echo wp_kses_post( $field['label'] ); ?>\n+\t\t\u003C\u002Flabel>\n+\n+\t\u003Cinput type=\"checkbox\"\n+\t\tclass=\"\u003C?php echo esc_attr( $field['class'] ); ?>\"\n+\t\tstyle=\"\u003C?php echo esc_attr( $field['style'] ); ?>\"\n+\t\tname=\"\u003C?php echo esc_attr( $name ); ?>\"\n+\t\tid=\"\u003C?php echo esc_attr( $field['id'] ); ?>\"\n+\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $checked ); ?>\n+\t\t\u003C?php learn_press_echo_vuejs_write_on_php( $custom_attributes_str ); ?> \u002F>\n+\n+\t\u003C?php\n+\tif ( ! empty( $field['description'] ) ) {\n+\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t}\n+\t}\n+\t?>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\n+\n+\u002F**\n+ * Output a select input box.\n+ *\n+ * @param array $field Data about the field to render.\n+ *\u002F\n+function lp_meta_box_select_field( $field = array() ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid = lp_meta_box_get_post_id();\n+\t$default   = ( ! get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t);\n+\n+\t$field = wp_parse_args(\n+\t\t$field,\n+\t\tarray(\n+\t\t\t'class'             => 'select',\n+\t\t\t'style'             => '',\n+\t\t\t'wrapper_class'     => '', \u002F\u002F Use \"lp-select-2\" for select2.\n+\t\t\t'value'             => isset( $field['value'] ) ? $field['value'] : $default,\n+\t\t\t'name'              => $field['id'],\n+\t\t\t'desc_tip'          => false,\n+\t\t\t'multiple'          => false,\n+\t\t\t'custom_attributes' => array(),\n+\t\t)\n+\t);\n+\n+\t$label_attributes = array(\n+\t\t'for' => $field['id'],\n+\t);\n+\n+\t$field_attributes          = (array) $field['custom_attributes'];\n+\t$field_attributes['style'] = $field['style'] ?? '';\n+\t$field_attributes['id']    = $field['id'] ?? '';\n+\t$field_attributes['name']  = $field['multiple'] ? $field['name'] . '[]' : $field['name'];\n+\t$field_attributes['class'] = $field['class'] ?? '';\n+\n+\tif ( $field['multiple'] ) {\n+\t\t$field['wrapper_class']       = 'lp-select-2';\n+\t\t$field_attributes['multiple'] = true;\n+\t}\n+\n+\t$tooltip     = ! empty( $field['description'] ) && false !== $field['desc_tip'] ? $field['description'] : '';\n+\t$description = ! empty( $field['description'] ) && false === $field['desc_tip'] ? $field['description'] : '';\n+\t?>\n+\n+\t\u003Cp class=\"form-field \u003C?php echo esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ); ?>\">\n+\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $field['id'] ); ?>\">\u003C?php echo wp_kses_post( $field['label'] ); ?>\u003C\u002Flabel>\n+\t\t\u003Cselect \u003C?php echo lp_implode_html_attributes( $field_attributes ); ?>>\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $field['options'] as $key => $value ) {\n+\t\t\t\techo '\u003Coption value=\"' . esc_attr( $key ) . '\"' . ( is_array( $field['value'] ) ? selected( in_array( (string) $key, $field['value'], true ), true ) : selected( $key, $field['value'], false ) ) . '>' . esc_html( $value ) . '\u003C\u002Foption>';\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fselect>\n+\t\t\u003C?php\n+\t\tif ( ! empty( $field['description'] ) ) {\n+\t\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t\t}\n+\t\t}\n+\t\t?>\n+\t\u003C\u002Fp>\n+\t\u003C?php\n+}\n+\n+\u002F**\n+ * Output a radio input box.\n+ *\n+ * @param array $field\n+ *\u002F\n+function lp_meta_box_radio_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid              = lp_meta_box_get_post_id();\n+\t$field['class']         = $field['class'] ?? 'select';\n+\t$field['style']         = $field['style'] ?? '';\n+\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\n+\t$field['default']       = ( ! get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t);\n+\t$field['value']         = $field['value'] ?? $field['default'];\n+\t$field['name']          = $field['name'] ?? $field['id'];\n+\t$field['desc_tip']      = $field['desc_tip'] ?? false;\n+\n+\techo '\u003Cfieldset class=\"form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\u003Ch4>' . wp_kses_post( $field['label'] ) . '\u003C\u002Fh4>';\n+\n+\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\n+\t\tlearn_press_quick_tip( $field['description'] );\n+\t}\n+\n+\techo '\u003Cul class=\"lp-radios-field-meta-box\">';\n+\n+\tforeach ( $field['options'] as $key => $value ) {\n+\t\techo '\u003Cli>\u003Clabel>\u003Cinput\n+\t\t\t\tname=\"' . esc_attr( $field['name'] ) . '\"\n+\t\t\t\tvalue=\"' . esc_attr( $key ) . '\"\n+\t\t\t\ttype=\"radio\"\n+\t\t\t\tclass=\"' . esc_attr( $field['class'] ) . '\"\n+\t\t\t\tstyle=\"' . esc_attr( $field['style'] ) . '\"\n+\t\t\t\t' . checked( esc_attr( $field['value'] ), esc_attr( $key ), false ) . '\n+\t\t\t\t\u002F> ' . ( $value ) . '\u003C\u002Flabel>\n+\t\t\u003C\u002Fli>';\n+\t}\n+\techo '\u003C\u002Ful>';\n+\n+\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\n+\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\t}\n+\n+\techo '\u003C\u002Ffieldset>';\n+}\n+\n+function lp_meta_box_file_input_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid              = lp_meta_box_get_post_id();\n+\t$field['class']         = isset( $field['class'] ) ? $field['class'] : 'short';\n+\t$field['style']         = isset( $field['style'] ) ? $field['style'] : '';\n+\t$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';\n+\t$field['default']       = ( ! get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t);\n+\t$field['value']         = isset( $field['value'] ) ? $field['value'] : $field['default'];\n+\t$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];\n+\t$field['mime_type']     = isset( $field['mime_type'] ) ? implode( ',', $field['mime_type'] ) : '';\n+\t$field['multil']        = ( isset( $field['multil'] ) && $field['multil'] ) ? true : false;\n+\t$field['desc_tip']      = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;\n+\n+\t\u002F\u002F Custom attribute handling\n+\t$custom_attributes = array();\n+\n+\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t}\n+\t}\n+\n+\techo '\u003Cdiv class=\"form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\n+\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\n+\n+\techo '\u003Cdiv id=\"' . esc_attr( $field['id'] ) . '\" class=\"lp-meta-box__file ' . esc_attr( $field['class'] ) . '\" data-mime=\"' . $field['mime_type'] . '\" data-multil=\"' . $field['multil'] . '\" style=\"' . esc_attr( $field['style'] ) . '\" ' . implode(\n+\t\t' ',\n+\t\t$custom_attributes\n+\t) . '>';\n+\techo '\u003Cul class=\"lp-meta-box__file_list\">';\n+\n+\tif ( ! empty( $field['value'] ) ) {\n+\t\tforeach ( (array) $field['value'] as $attachment_id ) {\n+\t\t\t$url = wp_get_attachment_url( $attachment_id );\n+\n+\t\t\tif ( $url ) {\n+\t\t\t\t$check_file = wp_check_filetype( $url );\n+\n+\t\t\t\techo '\u003Cli class=\"lp-meta-box__file_list-item image\" data-attachment_id=\"' . $attachment_id . '\">';\n+\n+\t\t\t\tif ( in_array( $check_file['ext'], array( 'jpg', 'png', 'gif', 'bmp', 'tif', 'jpeg' ), true ) ) {\n+\t\t\t\t\techo wp_get_attachment_image( $attachment_id, 'thumbnail' );\n+\t\t\t\t} else {\n+\t\t\t\t\techo '\u003Cimg class=\"is_file\" src=\"' . wp_mime_type_icon( $check_file['type'] ) . '\" \u002F>';\n+\t\t\t\t\techo '\u003Cspan>' . wp_basename( get_attached_file( $attachment_id ) ) . '\u003C\u002Fspan>';\n+\t\t\t\t}\n+\t\t\t\techo '\u003Cul class=\"actions\">\u003Cli>\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Ful>';\n+\t\t\t\techo '\u003C\u002Fli>';\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\techo '\u003C\u002Ful>';\n+\techo '\u003Cinput class=\"lp-meta-box__file_input\" type=\"hidden\" name=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr(\n+\t\t( ! empty( $field['value'] ) && is_array( $field['value'] ) ) ? implode(\n+\t\t\t',',\n+\t\t\t$field['value']\n+\t\t) : $field['value']\n+\t) . '\" \u002F>';\n+\techo '\u003Cp>';\n+\techo '\u003Ca href=\"#\" class=\"button btn-upload\">' . esc_html__( '+ Add media', 'learnpress' ) . '\u003C\u002Fa>';\n+\tif ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {\n+\t\tlearn_press_quick_tip( $field['description'] );\n+\t}\n+\techo '\u003C\u002Fp>';\n+\n+\tif ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {\n+\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\t}\n+\techo '\u003C\u002Fdiv>';\n+\techo '\u003C\u002Fdiv>';\n+}\n+\n+\u002F**\n+ * Output a duration input box.\n+ *\n+ * @param array $field\n+ *\u002F\n+function lp_meta_box_duration_field( $field ) {\n+\tglobal $thepostid, $post;\n+\n+\t$thepostid              = lp_meta_box_get_post_id();\n+\t$field['placeholder']   = $field['placeholder'] ?? '';\n+\t$field['class']         = $field['class'] ?? 'short';\n+\t$field['style']         = $field['style'] ?? '';\n+\t$field['wrapper_class'] = $field['wrapper_class'] ?? '';\n+\t$field['default']       = ( ! get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t) && isset( $field['default'] ) ) ? $field['default'] : get_post_meta(\n+\t\t$thepostid,\n+\t\t$field['id'],\n+\t\ttrue\n+\t);\n+\t$field['value']         = $field['value'] ?? $field['default'];\n+\t$field['name']          = $field['name'] ?? $field['id'];\n+\t$data_type              = empty( $field['data_type'] ) ? '' : $field['data_type'];\n+\t$duration               = learn_press_get_course_duration_support();\n+\n+\t$duration_keys = array_keys( $duration );\n+\t$default_time  = ! empty( $field['default_time'] ) ? $field['default_time'] : end( $duration_keys );\n+\n+\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $field['value'], $matches ) ) {\n+\t\t$a1 = $matches[1][0];\n+\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : $default_time;\n+\t} else {\n+\t\t$a1 = absint( $field['value'] );\n+\t\t$a2 = $default_time;\n+\t}\n+\n+\t\u002F\u002F Custom attribute handling\n+\t$custom_attributes = array();\n+\n+\tif ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {\n+\t\tforeach ( $field['custom_attributes'] as $attribute => $custom_attribute ) {\n+\t\t\t$custom_attributes[] = esc_attr( $attribute ) . '=\"' . esc_attr( $custom_attribute ) . '\"';\n+\t\t}\n+\t}\n+\n+\t$html_option = '';\n+\tforeach ( $duration as $k => $v ) {\n+\t\t$html_option .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', $k, selected( $k, $a2, false ), $v );\n+\t}\n+\n+\techo '\u003Cp class=\"lp-meta-box__duration form-field ' . esc_attr( $field['id'] . '_field ' . $field['wrapper_class'] ) . '\">\n+\t\t\u003Clabel for=\"' . esc_attr( $field['id'] ) . '\">' . wp_kses_post( $field['label'] ) . '\u003C\u002Flabel>';\n+\n+\techo '\u003Cinput type=\"number\" class=\"' . esc_attr( $field['class'] ) . '\" style=\"' . esc_attr( $field['style'] ) . '\" name=\"' . esc_attr( $field['name'] ) . '[]\" id=\"' . esc_attr( $field['id'] ) . '\" value=\"' . esc_attr( $a1 ) . '\" placeholder=\"' . esc_attr( $field['placeholder'] ) . '\" ' . implode(\n+\t\t' ',\n+\t\t$custom_attributes\n+\t) . ' \u002F> ';\n+\n+\techo '\u003Cselect name=\"' . esc_attr( $field['name'] ) . '[]\" class=\"lp-meta-box__duration-select\">' . $html_option . '\u003C\u002Fselect>';\n+\n+\tif ( ! empty( $field['description'] ) ) {\n+\t\techo '\u003Cspan class=\"description\">' . wp_kses_post( $field['description'] ) . '\u003C\u002Fspan>';\n+\n+\t\tif ( ! empty( $field['desc_tip'] ) ) {\n+\t\t\tlearn_press_quick_tip( $field['desc_tip'] );\n+\t\t}\n+\t}\n+\n+\techo '\u003C\u002Fp>';\n+}\n+\n+\u002F**\n+ * Use for Type: custom_fields in LP4.\n+ *\n+ * @param [type] $field get ID, options....\n+ * @param [type] $values get_option() value\n+ * @param [type] $key\n+ *\n+ * @return void\n+ *\u002F\n+function lp_metabox_custom_fields( $field, $values, $key ) {\n+\t?>\n+\t\u003Ctr>\n+\t\t\u003Ctd class=\"sort\">\n+\t\t\t\u003Cinput class=\"count\" type=\"hidden\" value=\"\u003C?php echo esc_attr( $key ); ?>\" name=\"\u003C?php echo esc_attr( $field['id'] ) . '[' . $key . ']' . '[sort]'; ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" value=\"\u003C?php echo ! empty( $values['id'] ) ? $values['id'] : wp_rand( 1, 10000 ) . $key; ?>\" name=\"\u003C?php echo esc_attr( $field['id'] ) . '[' . $key . ']' . '[id]'; ?>\">\n+\t\t\u003C\u002Ftd>\n+\t\t\u003C?php\n+\t\tif ( $field['options'] ) {\n+\t\t\tforeach ( $field['options'] as $cfk => $val ) {\n+\t\t\t\t$name = $field['id'] . '[' . $key . ']' . '[' . $cfk . ']';\n+\n+\t\t\t\tswitch ( $val['type'] ) {\n+\t\t\t\t\tcase 'text':\n+\t\t\t\t\tcase 'password':\n+\t\t\t\t\tcase 'datetime':\n+\t\t\t\t\tcase 'datetime-local':\n+\t\t\t\t\tcase 'date':\n+\t\t\t\t\tcase 'month':\n+\t\t\t\t\tcase 'time':\n+\t\t\t\t\tcase 'week':\n+\t\t\t\t\tcase 'number':\n+\t\t\t\t\tcase 'email':\n+\t\t\t\t\tcase 'url':\n+\t\t\t\t\tcase 'tel':\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $name ); ?>\" type=\"\u003C?php echo esc_attr( $val['type'] ); ?>\"\n+\t\t\t\t\t\t\t\tclass=\"input-text\"\n+\t\t\t\t\t\t\t\tplaceholder=\"\u003C?php echo isset( $val['placeholder'] ) ? esc_attr( $val['placeholder'] ) : ''; ?>\"\n+\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo ! empty( $values[ $cfk ] ) ? esc_attr( $values[ $cfk ] ) : ''; ?>\">\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tbreak;\n+\n+\t\t\t\t\tcase 'select':\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\t\u003Cselect name=\"\u003C?php echo esc_attr( $name ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tif ( isset( $val['options'] ) ) {\n+\t\t\t\t\t\t\t\t\tforeach ( $val['options'] as $cfks => $cfselect ) {\n+\t\t\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\t\t\u003Coption\n+\t\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $cfks ); ?>\"\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\t\t\t\t\techo ! empty( $values[ $cfk ] ) ? selected(\n+\t\t\t\t\t\t\t\t\t\t\t\t\t$values[ $cfk ],\n+\t\t\t\t\t\t\t\t\t\t\t\t\t(string) $cfks\n+\t\t\t\t\t\t\t\t\t\t\t\t) : '';\n+\t\t\t\t\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\t\t\t>\u003C?php echo wp_kses_post( $cfselect ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tbreak;\n+\n+\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\t\u003Cinput name=\"\u003C?php echo esc_attr( $name ); ?>\" type=\"checkbox\" name=\"\" value=\"1\" \u003C?php echo ! empty( $values[ $cfk ] ) ? checked( $values[ $cfk ], 'yes' ) : ''; ?>>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t?>\n+\t\t\u003Ctd width=\"2%\">\u003Ca href=\"#\" class=\"delete\">\u003C\u002Fa>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003C?php\n+}\n+\n+function lp_implode_html_attributes( $raw_attributes ) {\n+\t$attributes = array();\n+\tforeach ( $raw_attributes as $name => $value ) {\n+\t\t$attributes[] = esc_attr( $name ) . '=\"' . esc_attr( $value ) . '\"';\n+\t}\n+\n+\treturn implode( ' ', $attributes );\n+}\n+\n+function lp_meta_box_output( $metaboxes = array() ) {\n+\tif ( ! empty( $metaboxes ) ) {\n+\t\tforeach ( $metaboxes as $id => $field ) {\n+\t\t\t$field['id'] = $id;\n+\n+\t\t\tswitch ( $field['type'] ) {\n+\t\t\t\tcase 'text':\n+\t\t\t\tcase 'number':\n+\t\t\t\tcase 'url':\n+\t\t\t\t\tlp_meta_box_text_input_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'textarea':\n+\t\t\t\t\tlp_meta_box_textarea_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'checkbox':\n+\t\t\t\t\tlp_meta_box_checkbox_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\tlp_meta_box_duration_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'select':\n+\t\t\t\t\tlp_meta_box_select_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'radio':\n+\t\t\t\t\tlp_meta_box_radio_field( $field );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'file':\n+\t\t\t\t\tlp_meta_box_file_input_field( $field );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Order actions Meta box\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-global $post;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"submitbox\" id=\"submitpost\">\r\n-\t\u003Cdiv id=\"minor-publishing\">\r\n-\t\t\u003Cdiv id=\"misc-publishing-actions\">\r\n-\t\t\t\u003Cdiv class=\"misc-pub-section\">\r\n-\t\t\t\t\u003Cselect name=\"trigger-order-action\">\r\n-\t\t\t\t\t\u003Coption value=\"\">\u003C?php esc_html_e( 'Choose an action', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\u003Coption\r\n-\t\t\t\t\t\tvalue=\"current-status\">\u003C?php esc_html_e( 'Trigger action of the current order status', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv id=\"major-publishing-actions\">\r\n-\t\t\t\u003Cdiv id=\"delete-action\">\r\n-\t\t\t\t\u003C?php if ( current_user_can( 'delete_post', $post->ID ) ) : ?>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( ! EMPTY_TRASH_DAYS ) {\r\n-\t\t\t\t\t\t$delete_text = esc_html__( 'Delete Permanently', 'learnpress' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$delete_text = esc_html__( 'Move to Trash', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Ca class=\"submitdelete deletion\" href=\"\u003C?php echo get_delete_post_link( $post->ID ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo esc_html( $delete_text ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv id=\"publishing-action\">\r\n-\t\t\t\t\u003Cspan class=\"spinner\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cinput name=\"original_publish\" type=\"hidden\" id=\"original_publish\" value=\"Update\">\r\n-\t\t\t\t\u003Cinput name=\"save\" type=\"submit\" class=\"button button-primary button-large\" id=\"publish\"\r\n-\t\t\t\t\t\tvalue=\"\u003C?php esc_attr_e( 'Update', 'learnpress' ); ?>\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"clear\">\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Order actions Meta box\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+global $post;\n+?>\n+\n+\u003Cdiv class=\"submitbox\" id=\"submitpost\">\n+\t\u003Cdiv id=\"minor-publishing\">\n+\t\t\u003Cdiv id=\"misc-publishing-actions\">\n+\t\t\t\u003Cdiv class=\"misc-pub-section\">\n+\t\t\t\t\u003Cselect name=\"trigger-order-action\">\n+\t\t\t\t\t\u003Coption value=\"\">\u003C?php esc_html_e( 'Choose an action', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\u003Coption\n+\t\t\t\t\t\tvalue=\"current-status\">\u003C?php esc_html_e( 'Trigger action of the current order status', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv id=\"major-publishing-actions\">\n+\t\t\t\u003Cdiv id=\"delete-action\">\n+\t\t\t\t\u003C?php if ( current_user_can( 'delete_post', $post->ID ) ) : ?>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( ! EMPTY_TRASH_DAYS ) {\n+\t\t\t\t\t\t$delete_text = esc_html__( 'Delete Permanently', 'learnpress' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$delete_text = esc_html__( 'Move to Trash', 'learnpress' );\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Ca class=\"submitdelete deletion\" href=\"\u003C?php echo get_delete_post_link( $post->ID ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo esc_html( $delete_text ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv id=\"publishing-action\">\n+\t\t\t\t\u003Cspan class=\"spinner\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cinput name=\"original_publish\" type=\"hidden\" id=\"original_publish\" value=\"Update\">\n+\t\t\t\t\u003Cinput name=\"save\" type=\"submit\" class=\"button button-primary button-large\" id=\"publish\"\n+\t\t\t\t\t\tvalue=\"\u003C?php esc_attr_e( 'Update', 'learnpress' ); ?>\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"clear\">\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,108 +1,108 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Content tab preview export invoice\r\n- * @author hungkv\r\n- * @since 3.2.7.8\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\u002F**\r\n- * @var $order LP_Order\r\n- *\u002F\r\n-if ( ! isset( $order ) || ! isset( $currency_symbol ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$order_date = new LP_Datetime( $order->get_data( 'order_date' ) );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-invoice__header\">\r\n-\t\u003Cdiv class=\"lp-invoice__hleft\">\r\n-\t\t\u003Ch1>\u003C?php echo esc_html__( 'Invoice', 'learnpress' ); ?>\u003C\u002Fh1>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"lp-invoice__hright\">\r\n-\t\t\u003C?php\r\n-\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-title\">%s\u003C\u002Fp>', esc_html( get_bloginfo( 'name' ) ) );\r\n-\t\techo wp_sprintf(\r\n-\t\t\t'\u003Cp class=\"invoice-field invoice-date\">%s: %s\u003C\u002Fp>',\r\n-\t\t\tesc_html__( 'Order Date', 'learnpress' ),\r\n-\t\t\t$order_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME )\r\n-\t\t);\r\n-\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-no\">%s: %s\u003C\u002Fp>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );\r\n-\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-customer\">%s: %s\u003C\u002Fp>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );\r\n-\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-email\">%s: %s\u003C\u002Fp>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );\r\n-\t\t?>\r\n-\t\t\u003Cp class=\"invoice-field invoice-method\">\r\n-\t\t\t\u003C?php\r\n-\t\t\t$method_title = $order->get_payment_method_title();\r\n-\t\t\t$user_ip      = $order->get_user_ip_address();\r\n-\t\t\tif ( $method_title && $user_ip ) {\r\n-\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong> at \u003Cstrong>%s\u003C\u002Fstrong>', apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $order ), $user_ip );\r\n-\t\t\t} elseif ( $method_title ) {\r\n-\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $order ) );\r\n-\t\t\t} elseif ( $user_ip ) {\r\n-\t\t\t\tprintf( 'User IP \u003Cstrong>%s\u003C\u002Fstrong>', $user_ip );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"lp-invoice__body\">\r\n-\t\u003Ch4 class=\"order-data-heading\">\u003C?php echo esc_html__( 'Order details', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\u003Cdiv class=\"order-items\">\r\n-\t\t\u003Ctable id=\"tab_customers\" class=\"table table-striped list-order-items\">\r\n-\t\t\t\u003Ccolgroup>\r\n-\t\t\t\t\u003Ccol>\r\n-\t\t\t\t\u003Ccol>\r\n-\t\t\t\t\u003Ccol>\r\n-\t\t\t\t\u003Ccol>\r\n-\t\t\t\u003C\u002Fcolgroup>\r\n-\t\t\t\u003Cthead>\r\n-\t\t\t\u003Ctr class='warning'>\r\n-\t\t\t\t\u003Cth class=\"column-name\">\u003C?php _e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"column-price\">\u003C?php _e( 'Cost', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"column-quantity\">\u003C?php _e( 'Quantity', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"column-total align-right\">\u003C?php _e( 'Amount', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$filter = array(\r\n-\t\t\t\t'p'     => 0,\r\n-\t\t\t\t'limit' => '9999',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$items = $order->get_items_filter( $filter );\r\n-\t\t\tif ( $items ) :\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003C?php foreach ( $items as $item ) : ?>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Ctd>\u003C?php echo esc_html( $item['name'] ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $item['total'] ?? 0, $currency_symbol ?? '$' ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003Ctd>x \u003C?php echo $item['quantity'] ?? 0; ?>\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $item['total'] ?? 0, $currency_symbol ?? '$' ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\u003Ctfoot>\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Ctd>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php echo esc_html__( 'Sub Total', 'learnpress' ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $order->get_data( 'order_subtotal' ), $currency_symbol ); ?>\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Ctd>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php _e( 'Total', 'learnpress' ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $order->get_data( 'order_total' ), $currency_symbol ); ?>\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftfoot>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Content tab preview export invoice\n+ * @author hungkv\n+ * @since 3.2.7.8\n+ * @version 1.0.2\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\u002F**\n+ * @var $order LP_Order\n+ *\u002F\n+if ( ! isset( $order ) || ! isset( $currency_symbol ) ) {\n+\treturn;\n+}\n+\n+$order_date = new LP_Datetime( $order->get_data( 'order_date' ) );\n+?>\n+\n+\u003Cdiv class=\"lp-invoice__header\">\n+\t\u003Cdiv class=\"lp-invoice__hleft\">\n+\t\t\u003Ch1>\u003C?php echo esc_html__( 'Invoice', 'learnpress' ); ?>\u003C\u002Fh1>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"lp-invoice__hright\">\n+\t\t\u003C?php\n+\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-title\">%s\u003C\u002Fp>', esc_html( get_bloginfo( 'name' ) ) );\n+\t\techo wp_sprintf(\n+\t\t\t'\u003Cp class=\"invoice-field invoice-date\">%s: %s\u003C\u002Fp>',\n+\t\t\tesc_html__( 'Order Date', 'learnpress' ),\n+\t\t\t$order_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME )\n+\t\t);\n+\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-no\">%s: %s\u003C\u002Fp>', esc_html__( 'Invoice No.', 'learnpress' ), esc_attr( $order->get_order_number() ) );\n+\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-customer\">%s: %s\u003C\u002Fp>', esc_html__( 'Customer', 'learnpress' ), esc_html( $order->get_customer_name() ) );\n+\t\techo wp_sprintf( '\u003Cp class=\"invoice-field invoice-email\">%s: %s\u003C\u002Fp>', esc_html__( 'Email', 'learnpress' ), esc_html( $order->get_user( 'email' ) ) );\n+\t\t?>\n+\t\t\u003Cp class=\"invoice-field invoice-method\">\n+\t\t\t\u003C?php\n+\t\t\t$method_title = $order->get_payment_method_title();\n+\t\t\t$user_ip      = $order->get_user_ip_address();\n+\t\t\tif ( $method_title && $user_ip ) {\n+\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong> at \u003Cstrong>%s\u003C\u002Fstrong>', apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $order ), $user_ip );\n+\t\t\t} elseif ( $method_title ) {\n+\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $order ) );\n+\t\t\t} elseif ( $user_ip ) {\n+\t\t\t\tprintf( 'User IP \u003Cstrong>%s\u003C\u002Fstrong>', $user_ip );\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\u003Cdiv class=\"lp-invoice__body\">\n+\t\u003Ch4 class=\"order-data-heading\">\u003C?php echo esc_html__( 'Order details', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\u003Cdiv class=\"order-items\">\n+\t\t\u003Ctable id=\"tab_customers\" class=\"table table-striped list-order-items\">\n+\t\t\t\u003Ccolgroup>\n+\t\t\t\t\u003Ccol>\n+\t\t\t\t\u003Ccol>\n+\t\t\t\t\u003Ccol>\n+\t\t\t\t\u003Ccol>\n+\t\t\t\u003C\u002Fcolgroup>\n+\t\t\t\u003Cthead>\n+\t\t\t\u003Ctr class='warning'>\n+\t\t\t\t\u003Cth class=\"column-name\">\u003C?php _e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"column-price\">\u003C?php _e( 'Cost', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"column-quantity\">\u003C?php _e( 'Quantity', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"column-total align-right\">\u003C?php _e( 'Amount', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>\n+\t\t\t\u003Ctbody>\n+\t\t\t\u003C?php\n+\t\t\t$filter = array(\n+\t\t\t\t'p'     => 0,\n+\t\t\t\t'limit' => '9999',\n+\t\t\t);\n+\n+\t\t\t$items = $order->get_items_filter( $filter );\n+\t\t\tif ( $items ) :\n+\t\t\t\t?>\n+\t\t\t\t\u003C?php foreach ( $items as $item ) : ?>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Ctd>\u003C?php echo esc_html( $item['name'] ); ?>\u003C\u002Ftd>\n+\t\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $item['total'] ?? 0, $currency_symbol ?? '$' ); ?>\u003C\u002Ftd>\n+\t\t\t\t\t\u003Ctd>x \u003C?php echo $item['quantity'] ?? 0; ?>\u003C\u002Ftd>\n+\t\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $item['total'] ?? 0, $currency_symbol ?? '$' ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\t\u003Ctfoot>\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Ctd>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php echo esc_html__( 'Sub Total', 'learnpress' ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $order->get_data( 'order_subtotal' ), $currency_symbol ); ?>\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Ctd>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php _e( 'Total', 'learnpress' ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php echo learn_press_format_price( $order->get_data( 'order_total' ), $currency_symbol ); ?>\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftfoot>\n+\t\t\u003C\u002Ftable>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,234 +1,234 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin view for displaying details of an order.\r\n- *\r\n- * @author  ThimPress (Nhamdv)\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 4.0.4\r\n- *\u002F\r\n-\r\n-if ( isset( $order_items ) ) {\r\n-\t$currency_symbol = learn_press_get_currency_symbol( $order_items->currency );\r\n-} else {\r\n-\t$currency_symbol = learn_press_get_currency_symbol();\r\n-}\r\n-\r\n-if ( ! isset( $order ) || ! ( $order instanceof LP_Order ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$post         = $order->get_post();\r\n-$method_title = $order->get_payment_method_title();\r\n-$user_ip      = $order->get_user_ip_address();\r\n-$user_ids     = $order->get_user_id();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-order\" class=\"order-details\">\r\n-\t\u003Cdiv class=\"order-data\">\r\n-\t\t\u003Ch3 class=\"order-data-number\">\u003C?php echo sprintf( __( 'Order %s', 'learnpress' ), $order->get_order_number() ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv class=\"order-data-field payment-method-title\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( $order->is_manual() ) {\r\n-\t\t\t\tprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'Created manually', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t\tif ( $method_title && $user_ip ) {\r\n-\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong> at \u003Cstrong>%s\u003C\u002Fstrong>', $method_title, $user_ip );\r\n-\t\t\t} elseif ( $method_title ) {\r\n-\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', $method_title );\r\n-\t\t\t} elseif ( $user_ip ) {\r\n-\t\t\t\tprintf( 'Customer IP \u003Cstrong>%s\u003C\u002Fstrong>', $user_ip );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Ch3 class=\"order-data-heading\">\u003C?php esc_html_e( 'Order details', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\t\u003Cdiv class=\"order-data-field order-data-date\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Date created:', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\r\n-\t\t\t\u003C?php learn_press_touch_time( true, 1 ); ?>\r\n-\r\n-\t\t\t\u003Cinput type=\"date\" class=\"order-date\" name=\"order-date\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'd' ) ); ?>\">\r\n-\t\t\t@\r\n-\t\t\t\u003Cinput type=\"number\" class=\"order-hour\" name=\"order-hour\" min=\"0\" max=\"23\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'h' ) ); ?>\">\r\n-\t\t\t:\r\n-\t\t\t\u003Cinput type=\"number\" class=\"order-minute\" name=\"order-minute\" min=\"0\" max=\"59\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'm' ) ); ?>\">\r\n-\r\n-\t\t\t\u003C!-- Hidden fields for date only for default save post of Wordpress -->\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"aa\" value=\"\u003C?php echo gmdate( 'Y', $order->get_order_date( 'timestamp' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"mm\" value=\"\u003C?php echo gmdate( 'm', $order->get_order_date( 'timestamp' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"jj\" value=\"\u003C?php echo gmdate( 'd', $order->get_order_date( 'timestamp' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"ss\" value=\"\u003C?php echo gmdate( 's', $order->get_order_date( 'timestamp' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"hh\" value=\"\u003C?php echo gmdate( 'h', $order->get_order_date( 'h' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"mn\" value=\"\u003C?php echo gmdate( 'm', $order->get_order_date( 'm' ) ); ?>\">\r\n-\t\t\t\u003C!-- Hidden fields for date only for default save post of Wordpress -->\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"order-data-field order-data-status \u003C?php echo sanitize_title( $order->get_post_status() ); ?>\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Status:', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cselect name=\"order-status\" data-status=\"\u003C?php echo 'lp-' . $order->get_status(); ?>\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$statuses = LP_Order::get_order_statuses();\r\n-\t\t\t\tforeach ( $statuses as $status => $status_name ) {\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Coption data-desc=\"\u003C?php echo esc_attr( _learn_press_get_order_status_description( $status ) ); ?>\"\r\n-\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $status ); ?>\"\r\n-\t\t\t\t\t\t\u003C?php echo selected( $status, 'lp-' . $order->get_status(), false ); ?>>\r\n-\t\t\t\t\t\t\u003C?php echo esc_html( LP_Order::get_status_label( $status_name ) ); ?>\r\n-\t\t\t\t\t\u003C\u002Foption>;\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\r\n-\t\t\t\u003C?php if ( $order->get_status() === 'completed' ) : ?>\r\n-\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\u003Cdiv\r\n-\t\t\t\t\t\tstyle=\"padding: 10px 18px; margin-top: 10px; border: 2px solid #d80000; border-radius: 4px; display: inline-block;\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-warning\" style=\"color:#d80000\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C?php esc_html_e( 'When the Status is changed to \"Pending\", \"Cancelled\", or \"Failed\" all courses, lessons, quizzes, and other progress are deleted!', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"order-data-field order-data-user\">\r\n-\t\t\t\u003Cdiv class=\"order-users\">\r\n-\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Customers:', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( LP_ORDER_PENDING === $order->get_status() && $order->is_manual() ) {\r\n-\t\t\t\t\t$data_struct = [\r\n-\t\t\t\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\r\n-\t\t\t\t\t\t'dataType'    => 'users',\r\n-\t\t\t\t\t\t'keyGetValue' => [\r\n-\t\t\t\t\t\t\t'value'      => 'ID',\r\n-\t\t\t\t\t\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\r\n-\t\t\t\t\t\t\t'key_render' => [\r\n-\t\t\t\t\t\t\t\t'display_name' => 'display_name',\r\n-\t\t\t\t\t\t\t\t'user_email'   => 'user_email',\r\n-\t\t\t\t\t\t\t\t'ID'           => 'ID',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'setting'     => [\r\n-\t\t\t\t\t\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\t$select_field = new LP_Meta_Box_Select_Field(\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\t'',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'options'           => array(),\r\n-\t\t\t\t\t\t\t'style'             => 'min-width:200px;',\r\n-\t\t\t\t\t\t\t'tom_select'        => true,\r\n-\t\t\t\t\t\t\t'multiple'          => true,\r\n-\t\t\t\t\t\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct ) ) ],\r\n-\t\t\t\t\t\t\t'data-saved'        => $user_ids,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t$select_field->id = 'order-customer';\r\n-\r\n-\t\t\t\t\t$select_field->output( $order->get_id() );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cdiv class=\"advanced-list\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"ts-control\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\r\n-\t\t\t\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t\t\t\t'\u003Cli>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\">%s\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\r\n-\t\t\t\t\t\t\t\t\tsprintf( '%s (%s)', $order->get_checkout_email(), __( 'Guest', 'learnpress' ) )\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t} elseif ( $order->is_manual() && empty( $order->get_users() ) && $order->is_guest() ) {\r\n-\t\t\t\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t\t\t\t'\u003Cli>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\">%s\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\r\n-\t\t\t\t\t\t\t\t\t__( 'No customer', 'learnpress' )\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tif ( ! is_array( $user_ids ) ) {\r\n-\t\t\t\t\t\t\t\t\t$user_ids = (array) $user_ids;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t\t\t\t\t$user = learn_press_get_user( $user_id );\r\n-\t\t\t\t\t\t\t\t\tif ( ! $user ) {\r\n-\t\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t\t\t\t\t'\u003Cli>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\" data-ts-item=\"\">%s\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\r\n-\t\t\t\t\t\t\t\t\t\tsprintf( '%s (#%d) - %s', $user->get_display_name(), $user->get_id(), $user->get_email() )\r\n-\t\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( $order->is_manual() ) {\r\n-\t\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t\t'\u003Cp class=\"description\">%s\u003C\u002Fp>',\r\n-\t\t\t\t\t\t\tesc_html__( 'In order to change the order user, please change the order status to \"Pending\".', 'learnpress' )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"order-data-field order-data-key\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Order key:', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C?php echo esc_html( $order->get_order_key() ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php do_action( 'lp\u002Fadmin\u002Forder\u002Fdetail\u002Fafter-order-key', $order ); ?>\r\n-\r\n-\t\t\u003Cdiv class=\"order-data-field order-data-note\">\r\n-\t\t\t\u003C?php $note = $post->post_excerpt; ?>\r\n-\t\t\t\u003C?php if ( ! empty( $note ) ) : ?>\r\n-\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Customer Note', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cp class=\"order-note description\">\u003C?php echo wp_kses_post( $note ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php do_action( 'learn-press\u002Fadmin\u002Forder-details\u002Fitems\u002Flayout', $order ); ?>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003C?php\r\n-$assets = LP_Admin_Assets::instance();\r\n-$assets->add_localize( 'learn-press-meta-box-order', 'users', $order->get_user_data() );\r\n-$assets->add_localize( 'learn-press-meta-box-order', 'userTextFormat', '{{display_name}} ({{email}})' );\r\n-\r\n-wp_enqueue_script( 'jquery-ui-datepicker' );\r\n-wp_enqueue_style( 'jquery-ui' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fhtml\" id=\"tmpl-learn-press-modal-add-order-courses\">\r\n-\t\u003Cdiv id=\"learn-press-modal-add-order-courses\" class=\"lp-modal-search\"\r\n-\t\tdata-nonce=\"\u003C?php echo wp_create_nonce( 'add_item_to_order' ); ?>\">\r\n-\t\t\u003Cdiv class=\"lp-search-items\">\r\n-\t\t\t\u003Cinput type=\"text\" id=\"learn-press-search-item-term\"\r\n-\t\t\t\t\tdata-nonce=\"\u003C?php echo wp_create_nonce( 'search_item_term' ); ?>\" name=\"lp-item-name\"\r\n-\t\t\t\t\tplaceholder=\"\u003C?php esc_html_e( 'Type here to search for the course', 'learnpress' ); ?>\"\u002F>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cul id=\"learn-press-courses-result\">\r\n-\t\t\t\u003Cli class=\"lp-search-no-results hide-if-js\"\r\n-\t\t\t\tdata-id=\"0\">\u003C?php esc_html_e( 'No results', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C\u002Ful>\r\n-\t\t\u003Cbutton class=\"lp-close-lightbox button\"\r\n-\t\t\t\tonclick=\"LP.MessageBox.hide();\">\r\n-\t\t\t\u003C?php esc_html_e( 'Close', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin view for displaying details of an order.\n+ *\n+ * @author  ThimPress (Nhamdv)\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 4.0.4\n+ *\u002F\n+\n+if ( isset( $order_items ) ) {\n+\t$currency_symbol = learn_press_get_currency_symbol( $order_items->currency );\n+} else {\n+\t$currency_symbol = learn_press_get_currency_symbol();\n+}\n+\n+if ( ! isset( $order ) || ! ( $order instanceof LP_Order ) ) {\n+\treturn;\n+}\n+\n+$post         = $order->get_post();\n+$method_title = $order->get_payment_method_title();\n+$user_ip      = $order->get_user_ip_address();\n+$user_ids     = $order->get_user_id();\n+?>\n+\n+\u003Cdiv id=\"learn-press-order\" class=\"order-details\">\n+\t\u003Cdiv class=\"order-data\">\n+\t\t\u003Ch3 class=\"order-data-number\">\u003C?php echo sprintf( __( 'Order %s', 'learnpress' ), $order->get_order_number() ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv class=\"order-data-field payment-method-title\">\n+\t\t\t\u003C?php\n+\t\t\tif ( $order->is_manual() ) {\n+\t\t\t\tprintf( '\u003Cstrong>%s\u003C\u002Fstrong>', __( 'Created manually', 'learnpress' ) );\n+\t\t\t}\n+\t\t\tif ( $method_title && $user_ip ) {\n+\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong> at \u003Cstrong>%s\u003C\u002Fstrong>', $method_title, $user_ip );\n+\t\t\t} elseif ( $method_title ) {\n+\t\t\t\tprintf( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', $method_title );\n+\t\t\t} elseif ( $user_ip ) {\n+\t\t\t\tprintf( 'Customer IP \u003Cstrong>%s\u003C\u002Fstrong>', $user_ip );\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Ch3 class=\"order-data-heading\">\u003C?php esc_html_e( 'Order details', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\t\t\u003Cdiv class=\"order-data-field order-data-date\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Date created:', 'learnpress' ); ?>\u003C\u002Flabel>\n+\n+\t\t\t\u003C?php learn_press_touch_time( true, 1 ); ?>\n+\n+\t\t\t\u003Cinput type=\"date\" class=\"order-date\" name=\"order-date\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'd' ) ); ?>\">\n+\t\t\t@\n+\t\t\t\u003Cinput type=\"number\" class=\"order-hour\" name=\"order-hour\" min=\"0\" max=\"23\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'h' ) ); ?>\">\n+\t\t\t:\n+\t\t\t\u003Cinput type=\"number\" class=\"order-minute\" name=\"order-minute\" min=\"0\" max=\"59\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $order->get_order_date( 'm' ) ); ?>\">\n+\n+\t\t\t\u003C!-- Hidden fields for date only for default save post of Wordpress -->\n+\t\t\t\u003Cinput type=\"hidden\" name=\"aa\" value=\"\u003C?php echo gmdate( 'Y', $order->get_order_date( 'timestamp' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" name=\"mm\" value=\"\u003C?php echo gmdate( 'm', $order->get_order_date( 'timestamp' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" name=\"jj\" value=\"\u003C?php echo gmdate( 'd', $order->get_order_date( 'timestamp' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" name=\"ss\" value=\"\u003C?php echo gmdate( 's', $order->get_order_date( 'timestamp' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" name=\"hh\" value=\"\u003C?php echo gmdate( 'h', $order->get_order_date( 'h' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"hidden\" name=\"mn\" value=\"\u003C?php echo gmdate( 'm', $order->get_order_date( 'm' ) ); ?>\">\n+\t\t\t\u003C!-- Hidden fields for date only for default save post of Wordpress -->\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"order-data-field order-data-status \u003C?php echo sanitize_title( $order->get_post_status() ); ?>\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Status:', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cselect name=\"order-status\" data-status=\"\u003C?php echo 'lp-' . $order->get_status(); ?>\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$statuses = LP_Order::get_order_statuses();\n+\t\t\t\tforeach ( $statuses as $status => $status_name ) {\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Coption data-desc=\"\u003C?php echo esc_attr( _learn_press_get_order_status_description( $status ) ); ?>\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $status ); ?>\"\n+\t\t\t\t\t\t\u003C?php echo selected( $status, 'lp-' . $order->get_status(), false ); ?>>\n+\t\t\t\t\t\t\u003C?php echo esc_html( LP_Order::get_status_label( $status_name ) ); ?>\n+\t\t\t\t\t\u003C\u002Foption>;\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\n+\t\t\t\u003C?php if ( $order->get_status() === 'completed' ) : ?>\n+\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\u003Cdiv\n+\t\t\t\t\t\tstyle=\"padding: 10px 18px; margin-top: 10px; border: 2px solid #d80000; border-radius: 4px; display: inline-block;\">\n+\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-warning\" style=\"color:#d80000\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C?php esc_html_e( 'When the Status is changed to \"Pending\", \"Cancelled\", or \"Failed\" all courses, lessons, quizzes, and other progress are deleted!', 'learnpress' ); ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"order-data-field order-data-user\">\n+\t\t\t\u003Cdiv class=\"order-users\">\n+\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Customers:', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( LP_ORDER_PENDING === $order->get_status() && $order->is_manual() ) {\n+\t\t\t\t\t$data_struct = [\n+\t\t\t\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\n+\t\t\t\t\t\t'dataType'    => 'users',\n+\t\t\t\t\t\t'keyGetValue' => [\n+\t\t\t\t\t\t\t'value'      => 'ID',\n+\t\t\t\t\t\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\n+\t\t\t\t\t\t\t'key_render' => [\n+\t\t\t\t\t\t\t\t'display_name' => 'display_name',\n+\t\t\t\t\t\t\t\t'user_email'   => 'user_email',\n+\t\t\t\t\t\t\t\t'ID'           => 'ID',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'setting'     => [\n+\t\t\t\t\t\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t];\n+\n+\t\t\t\t\t$select_field = new LP_Meta_Box_Select_Field(\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\t'',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'options'           => array(),\n+\t\t\t\t\t\t\t'style'             => 'min-width:200px;',\n+\t\t\t\t\t\t\t'tom_select'        => true,\n+\t\t\t\t\t\t\t'multiple'          => true,\n+\t\t\t\t\t\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct ) ) ],\n+\t\t\t\t\t\t\t'data-saved'        => $user_ids,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\n+\t\t\t\t\t$select_field->id = 'order-customer';\n+\n+\t\t\t\t\t$select_field->output( $order->get_id() );\n+\t\t\t\t} else {\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cdiv class=\"advanced-list\">\n+\t\t\t\t\t\t\u003Cdiv class=\"ts-control\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\n+\t\t\t\t\t\t\t\tprintf(\n+\t\t\t\t\t\t\t\t\t'\u003Cli>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\">%s\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\n+\t\t\t\t\t\t\t\t\tsprintf( '%s (%s)', $order->get_checkout_email(), __( 'Guest', 'learnpress' ) )\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t} elseif ( $order->is_manual() && empty( $order->get_users() ) && $order->is_guest() ) {\n+\t\t\t\t\t\t\t\tprintf(\n+\t\t\t\t\t\t\t\t\t'\u003Cli>\n+\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\">%s\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\n+\t\t\t\t\t\t\t\t\t__( 'No customer', 'learnpress' )\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tif ( ! is_array( $user_ids ) ) {\n+\t\t\t\t\t\t\t\t\t$user_ids = (array) $user_ids;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t\t\t\t\t$user = learn_press_get_user( $user_id );\n+\t\t\t\t\t\t\t\t\tif ( ! $user ) {\n+\t\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\tprintf(\n+\t\t\t\t\t\t\t\t\t\t'\u003Cli>\n+\t\t\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"item\" data-ts-item=\"\">%s\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fli>',\n+\t\t\t\t\t\t\t\t\t\tsprintf( '%s (#%d) - %s', $user->get_display_name(), $user->get_id(), $user->get_email() )\n+\t\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( $order->is_manual() ) {\n+\t\t\t\t\t\tprintf(\n+\t\t\t\t\t\t\t'\u003Cp class=\"description\">%s\u003C\u002Fp>',\n+\t\t\t\t\t\t\tesc_html__( 'In order to change the order user, please change the order status to \"Pending\".', 'learnpress' )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"order-data-field order-data-key\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Order key:', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C?php echo esc_html( $order->get_order_key() ); ?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php do_action( 'lp\u002Fadmin\u002Forder\u002Fdetail\u002Fafter-order-key', $order ); ?>\n+\n+\t\t\u003Cdiv class=\"order-data-field order-data-note\">\n+\t\t\t\u003C?php $note = $post->post_excerpt; ?>\n+\t\t\t\u003C?php if ( ! empty( $note ) ) : ?>\n+\t\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Customer Note', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003Cp class=\"order-note description\">\u003C?php echo wp_kses_post( $note ); ?>\u003C\u002Fp>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php do_action( 'learn-press\u002Fadmin\u002Forder-details\u002Fitems\u002Flayout', $order ); ?>\n+\u003C\u002Fdiv>\n+\n+\u003C?php\n+$assets = LP_Admin_Assets::instance();\n+$assets->add_localize( 'learn-press-meta-box-order', 'users', $order->get_user_data() );\n+$assets->add_localize( 'learn-press-meta-box-order', 'userTextFormat', '{{display_name}} ({{email}})' );\n+\n+wp_enqueue_script( 'jquery-ui-datepicker' );\n+wp_enqueue_style( 'jquery-ui' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fhtml\" id=\"tmpl-learn-press-modal-add-order-courses\">\n+\t\u003Cdiv id=\"learn-press-modal-add-order-courses\" class=\"lp-modal-search\"\n+\t\tdata-nonce=\"\u003C?php echo wp_create_nonce( 'add_item_to_order' ); ?>\">\n+\t\t\u003Cdiv class=\"lp-search-items\">\n+\t\t\t\u003Cinput type=\"text\" id=\"learn-press-search-item-term\"\n+\t\t\t\t\tdata-nonce=\"\u003C?php echo wp_create_nonce( 'search_item_term' ); ?>\" name=\"lp-item-name\"\n+\t\t\t\t\tplaceholder=\"\u003C?php esc_html_e( 'Type here to search for the course', 'learnpress' ); ?>\"\u002F>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cul id=\"learn-press-courses-result\">\n+\t\t\t\u003Cli class=\"lp-search-no-results hide-if-js\"\n+\t\t\t\tdata-id=\"0\">\u003C?php esc_html_e( 'No results', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C\u002Ful>\n+\t\t\u003Cbutton class=\"lp-close-lightbox button\"\n+\t\t\t\tonclick=\"LP.MessageBox.hide();\">\n+\t\t\t\u003C?php esc_html_e( 'Close', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fexports-invoice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fexports-invoice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fexports-invoice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fexports-invoice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Order invoice export pdf Meta box\r\n- *\r\n- * @author hungkv\r\n- * @since 3.2.7.8\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-if ( ! isset( $order ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\r\n-?>\r\n-\r\n-\u003C?php global $post; ?>\r\n-\r\n-\u003Cdiv class=\"submitbox\" id=\"order-export\">\r\n-\t\u003Cdiv id=\"order-export__section\">\r\n-\t\t\u003Cdiv id=\"editor\">\u003C\u002Fdiv>\r\n-\t\t\u003Cbutton data-id=\"\u003C?php echo esc_attr( $order->get_id() ); ?>\" type=\"button\" class=\"button\" id=\"order-export__button\">\u003C?php echo esc_html__( 'PDF Invoice', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003C!-- The Modal -->\r\n-\u003Cdiv id=\"myModal\" class=\"modal export-modal\" style=\"display:none;\">\r\n-\r\n-\t\u003C!-- Modal content -->\r\n-\t\u003Cdiv class=\"modal-content\">\r\n-\t\t\u003Cspan class=\"close\">&times;\u003C\u002Fspan>\r\n-\r\n-\t\t\u003C!-- Tab links -->\r\n-\t\t\u003Cdiv class=\"tabs\" id=\"order-export__tabs\">\r\n-\t\t\t\u003Cdiv class=\"preview-tab tab active\" data-target=\"pdf-preview\">\u003C?php echo esc_html__( 'PDF Preview', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"options-tab tab\" data-target=\"export-options\">\u003C?php echo esc_html__( 'Export Options', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv id=\"panels\">\r\n-\t\t\t\u003Cdiv class=\"pdf-preview panel active\">\r\n-\t\t\t\t\u003C!--Start print invoice-->\r\n-\t\t\t\t\u003Cdiv id=\"lp-invoice\">\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-invoice__content\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tlearn_press_admin_view(\r\n-\t\t\t\t\t\t\t'meta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php',\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'order'           => $order,\r\n-\t\t\t\t\t\t\t\t'currency_symbol' => $currency_symbol,\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv id=\"lp-invoice__actions\">\r\n-\t\t\t\t\t\t\u003Cbutton type=\"button\"\r\n-\t\t\t\t\t\t\t\tid=\"lp-invoice__export\">\u003C?php echo esc_html__( 'Export to pdf', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!--End print invoice-->\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"export-options panel\">\r\n-\t\t\t\t\u003Cdiv class=\"export-options__content\">\r\n-\t\t\t\t\t\u003Ch4>Please select the fields you want to display\u003C\u002Fh4>\r\n-\t\t\t\t\t\u003Cdiv class=\"export-options__select\">\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-title\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Site Title', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-date\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Order Date', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-no\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Invoice No.', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-customer\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Customer', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-email\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Email', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-method\" value=\"\" checked=\"checked\">\r\n-\t\t\t\t\t\t\u003Clabel for=\"order_payment\"> \u003C?php echo esc_html__( 'Payment Medthod', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"export-options__loading\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"spinner\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"export-options__actions\">\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" data-id=\"\u003C?php echo esc_attr( $order->get_id() ); ?>\"\r\n-\t\t\t\t\t\t\tid=\"lp-invoice__update\">\u003C?php echo esc_html__( 'Update', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C!--End print invoice-->\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Order invoice export pdf Meta box\n+ *\n+ * @author hungkv\n+ * @since 3.2.7.8\n+ * @version 1.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+if ( ! isset( $order ) ) {\n+\treturn;\n+}\n+\n+$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\n+?>\n+\n+\u003C?php global $post; ?>\n+\n+\u003Cdiv class=\"submitbox\" id=\"order-export\">\n+\t\u003Cdiv id=\"order-export__section\">\n+\t\t\u003Cdiv id=\"editor\">\u003C\u002Fdiv>\n+\t\t\u003Cbutton data-id=\"\u003C?php echo esc_attr( $order->get_id() ); ?>\" type=\"button\" class=\"button\" id=\"order-export__button\">\u003C?php echo esc_html__( 'PDF Invoice', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\n+\u003C!-- The Modal -->\n+\u003Cdiv id=\"myModal\" class=\"modal export-modal\" style=\"display:none;\">\n+\n+\t\u003C!-- Modal content -->\n+\t\u003Cdiv class=\"modal-content\">\n+\t\t\u003Cspan class=\"close\">&times;\u003C\u002Fspan>\n+\n+\t\t\u003C!-- Tab links -->\n+\t\t\u003Cdiv class=\"tabs\" id=\"order-export__tabs\">\n+\t\t\t\u003Cdiv class=\"preview-tab tab active\" data-target=\"pdf-preview\">\u003C?php echo esc_html__( 'PDF Preview', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"options-tab tab\" data-target=\"export-options\">\u003C?php echo esc_html__( 'Export Options', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv id=\"panels\">\n+\t\t\t\u003Cdiv class=\"pdf-preview panel active\">\n+\t\t\t\t\u003C!--Start print invoice-->\n+\t\t\t\t\u003Cdiv id=\"lp-invoice\">\n+\t\t\t\t\t\u003Cdiv id=\"lp-invoice__content\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tlearn_press_admin_view(\n+\t\t\t\t\t\t\t'meta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php',\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'order'           => $order,\n+\t\t\t\t\t\t\t\t'currency_symbol' => $currency_symbol,\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv id=\"lp-invoice__actions\">\n+\t\t\t\t\t\t\u003Cbutton type=\"button\"\n+\t\t\t\t\t\t\t\tid=\"lp-invoice__export\">\u003C?php echo esc_html__( 'Export to pdf', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C!--End print invoice-->\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"export-options panel\">\n+\t\t\t\t\u003Cdiv class=\"export-options__content\">\n+\t\t\t\t\t\u003Ch4>Please select the fields you want to display\u003C\u002Fh4>\n+\t\t\t\t\t\u003Cdiv class=\"export-options__select\">\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-title\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Site Title', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-date\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Order Date', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-no\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Invoice No.', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-customer\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Customer', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-email\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_date\"> \u003C?php echo esc_html__( 'Email', 'learnpress' ); ?>\u003C\u002Flabel>\u003Cbr>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"invoice-method\" value=\"\" checked=\"checked\">\n+\t\t\t\t\t\t\u003Clabel for=\"order_payment\"> \u003C?php echo esc_html__( 'Payment Medthod', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"export-options__loading\">\n+\t\t\t\t\t\t\u003Cdiv class=\"spinner\">\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"export-options__actions\">\n+\t\t\t\t\t\u003Cbutton type=\"button\" data-id=\"\u003C?php echo esc_attr( $order->get_id() ); ?>\"\n+\t\t\t\t\t\t\tid=\"lp-invoice__update\">\u003C?php echo esc_html__( 'Update', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C!--End print invoice-->\n+\t\u003C\u002Fdiv>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Forder-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Forder-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Forder-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Forder-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-\u003C?php\r\n-\u002F**\r\n- * Display single row of order items.\r\n- *\r\n- * @author Nhamdv \u003C4.0.0>\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\u002F**\r\n- * @var LP_Order $order\r\n- *\u002F\r\n-if ( ! isset( $item ) || ! isset( $order ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003C?php if ( ! empty( $item['course_id'] ) ) { ?>\r\n-\t\u003Ctr class=\"order-item-row\" data-item_id=\"\u003C?php echo esc_attr( $item['id'] ); ?>\" data-id=\"\u003C?php echo esc_attr( $item['course_id'] ); ?>\" data-remove_nonce=\"\u003C?php echo wp_create_nonce( 'remove_order_item' ); ?>\">\r\n-\t\t\u003Ctd class=\"column-name\">\r\n-\t\t\t\u003C?php if ( $order->is_manual() && $order->get_status() === LP_ORDER_PENDING ) : ?>\r\n-\t\t\t\t\u003Ca class=\"remove-order-item\" href=\"#\">\r\n-\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn_press\u002Fbefore_order_details_item_title', $item ); ?>\r\n-\r\n-\t\t\t\u003Ca href=\"\u003C?php echo apply_filters( 'learn_press\u002Forder_item_link', get_the_permalink( $item['course_id'] ), $item ); ?>\">\r\n-\t\t\t\t\u003C?php echo apply_filters( 'learn_press\u002Forder_item_name', esc_html( $item['name'] ), $item, $order ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn_press\u002Fafter_order_details_item_title', $item ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\r\n-\t\t\u003Ctd class=\"column-price align-right\">\r\n-\t\t\t\u003C?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\r\n-\t\t\u003Ctd class=\"column-quantity align-right\">\r\n-\t\t\t\u003Csmall class=\"times\">×\u003C\u002Fsmall>\r\n-\t\t\t\u003C?php echo esc_html( $item['quantity'] ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\r\n-\t\t\u003Ctd class=\"column-total align-right\">\u003C?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\r\n-\t\u003C?php\r\n-} else {\r\n-\tdo_action( 'learn-press\u002Forder-item-not-course', $item, $order );\r\n-}\r\n-?>\r\n+\u003C?php\n+\u002F**\n+ * Display single row of order items.\n+ *\n+ * @author Nhamdv \u003C4.0.0>\n+ * @version 4.0.1\n+ *\u002F\n+\u002F**\n+ * @var LP_Order $order\n+ *\u002F\n+if ( ! isset( $item ) || ! isset( $order ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003C?php if ( ! empty( $item['course_id'] ) ) { ?>\n+\t\u003Ctr class=\"order-item-row\" data-item_id=\"\u003C?php echo esc_attr( $item['id'] ); ?>\" data-id=\"\u003C?php echo esc_attr( $item['course_id'] ); ?>\" data-remove_nonce=\"\u003C?php echo wp_create_nonce( 'remove_order_item' ); ?>\">\n+\t\t\u003Ctd class=\"column-name\">\n+\t\t\t\u003C?php if ( $order->is_manual() && $order->get_status() === LP_ORDER_PENDING ) : ?>\n+\t\t\t\t\u003Ca class=\"remove-order-item\" href=\"#\">\n+\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\u003C?php do_action( 'learn_press\u002Fbefore_order_details_item_title', $item ); ?>\n+\n+\t\t\t\u003Ca href=\"\u003C?php echo apply_filters( 'learn_press\u002Forder_item_link', get_the_permalink( $item['course_id'] ), $item ); ?>\">\n+\t\t\t\t\u003C?php echo apply_filters( 'learn_press\u002Forder_item_name', esc_html( $item['name'] ), $item, $order ); ?>\n+\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\u003C?php do_action( 'learn_press\u002Fafter_order_details_item_title', $item ); ?>\n+\t\t\u003C\u002Ftd>\n+\n+\t\t\u003Ctd class=\"column-price align-right\">\n+\t\t\t\u003C?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?>\n+\t\t\u003C\u002Ftd>\n+\n+\t\t\u003Ctd class=\"column-quantity align-right\">\n+\t\t\t\u003Csmall class=\"times\">×\u003C\u002Fsmall>\n+\t\t\t\u003C?php echo esc_html( $item['quantity'] ); ?>\n+\t\t\u003C\u002Ftd>\n+\n+\t\t\u003Ctd class=\"column-total align-right\">\u003C?php echo learn_press_format_price( isset( $item['total'] ) ? $item['total'] : 0, isset( $currency_symbol ) ? $currency_symbol : '$' ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\n+\t\u003C?php\n+} else {\n+\tdo_action( 'learn-press\u002Forder-item-not-course', $item, $order );\n+}\n+?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,91 +1,91 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * @deprecated since 4.2.9\r\n- *\u002F\r\n-class LP_Meta_Box_Question extends LP_Meta_Box {\r\n-\r\n-\tprivate static $_instance = null;\r\n-\r\n-\tpublic $post_type = LP_QUESTION_CPT;\r\n-\r\n-\tpublic function add_meta_box() {\r\n-\t\tadd_meta_box( 'question_settings', esc_html__( 'Question Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\r\n-\t}\r\n-\r\n-\tpublic function metabox( $post_id ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fmetabox\u002Fquestion\u002Flists',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_mark'        => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Points', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Points for choosing the correct answer.', 'learnpress' ),\r\n-\t\t\t\t\t'1',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '1',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 60px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_hint'        => new LP_Meta_Box_Textarea_Field(\r\n-\t\t\t\t\tesc_html__( 'Hint', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The instructions for the user to select the right answer. The text will be shown when users click the \\'Hint\\' button.', 'learnpress' ),\r\n-\t\t\t\t\t''\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_explanation' => new LP_Meta_Box_Textarea_Field(\r\n-\t\t\t\t\tesc_html__( 'Explanation', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ),\r\n-\t\t\t\t\t''\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function output( $post ) {\r\n-\t\tparent::output( $post );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--question\">\r\n-\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tdo_action( 'learnpress\u002Fquestion-settings\u002Fbefore' );\r\n-\t\t\t\t\u002F\u002F Check if add_filter to old version.\r\n-\t\t\t\t$is_old = false;\r\n-\r\n-\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\r\n-\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t$object->id = $key;\r\n-\t\t\t\t\t\t$output     = $object->output( $post->ID );\r\n-\t\t\t\t\t\tif ( ! empty( $output ) ) {\r\n-\t\t\t\t\t\t\techo wp_kses_post( $object->output( $post->ID ) );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} elseif ( is_array( $object ) ) {\r\n-\t\t\t\t\t\t$is_old = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $is_old ) {\r\n-\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learnpress\u002Fquestion-settings\u002Fafter' );\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Meta_Box_Question::instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * @deprecated since 4.2.9\n+ *\u002F\n+class LP_Meta_Box_Question extends LP_Meta_Box {\n+\n+\tprivate static $_instance = null;\n+\n+\tpublic $post_type = LP_QUESTION_CPT;\n+\n+\tpublic function add_meta_box() {\n+\t\tadd_meta_box( 'question_settings', esc_html__( 'Question Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\n+\t}\n+\n+\tpublic function metabox( $post_id ) {\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fmetabox\u002Fquestion\u002Flists',\n+\t\t\tarray(\n+\t\t\t\t'_lp_mark'        => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Points', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Points for choosing the correct answer.', 'learnpress' ),\n+\t\t\t\t\t'1',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '1',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 60px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_hint'        => new LP_Meta_Box_Textarea_Field(\n+\t\t\t\t\tesc_html__( 'Hint', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The instructions for the user to select the right answer. The text will be shown when users click the \\'Hint\\' button.', 'learnpress' ),\n+\t\t\t\t\t''\n+\t\t\t\t),\n+\t\t\t\t'_lp_explanation' => new LP_Meta_Box_Textarea_Field(\n+\t\t\t\t\tesc_html__( 'Explanation', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ),\n+\t\t\t\t\t''\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function output( $post ) {\n+\t\tparent::output( $post );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--question\">\n+\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tdo_action( 'learnpress\u002Fquestion-settings\u002Fbefore' );\n+\t\t\t\t\u002F\u002F Check if add_filter to old version.\n+\t\t\t\t$is_old = false;\n+\n+\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\n+\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t\t$object->id = $key;\n+\t\t\t\t\t\t$output     = $object->output( $post->ID );\n+\t\t\t\t\t\tif ( ! empty( $output ) ) {\n+\t\t\t\t\t\t\techo wp_kses_post( $object->output( $post->ID ) );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} elseif ( is_array( $object ) ) {\n+\t\t\t\t\t\t$is_old = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $is_old ) {\n+\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learnpress\u002Fquestion-settings\u002Fafter' );\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+LP_Meta_Box_Question::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fassigned.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fassigned.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fassigned.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fassigned.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin View: Question assigned Meta box\r\n- *\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-global $post;\r\n-$curd = new LP_Question_CURD();\r\n-$quiz = $curd->get_quiz( $post->ID );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-item-assigned\">\r\n-\t\u003C?php if ( $quiz ) : ?>\r\n-\t\t\u003C?php $courses = learn_press_get_item_courses( $quiz->ID ); ?>\r\n-\r\n-\t\t\u003C?php if ( $courses ) : ?>\r\n-\t\t\t\u003Cul class=\"parent-courses\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tforeach ( $courses as $course ) :\r\n-\t\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\r\n-\t\t\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\u003Cstrong>\r\n-\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $course->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $course->ID ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fstrong>\r\n-\t\t\t\t\t\t&#8212;\r\n-\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo learn_press_get_course_permalink( $course->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003Cul class=\"parent-quizzes\">\r\n-\t\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\t\u003Cstrong>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $quiz->ID ); ?>\" target=\"_blank\">\r\n-\t\t\t\t\t\t\t\t\t\t&#8212; &#8212;\r\n-\t\t\t\t\t\t\t\t\t\t\u003C?php echo get_the_title( $quiz->ID ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fstrong>\r\n-\t\t\t\t\t\t\t\t&#8212;\r\n-\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_item_link( $quiz->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C?php else : ?>\r\n-\t\t\t\u003Cstrong>\u003Ca href=\"\u003C?php echo get_edit_post_link( $quiz->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $quiz->ID ); ?>\u003C\u002Fa>\u003C\u002Fstrong>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\t\u003C?php\r\n-\telse :\r\n-\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\r\n-\tendif;\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Admin View: Question assigned Meta box\n+ *\n+ * @version 1.0.1\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+global $post;\n+$curd = new LP_Question_CURD();\n+$quiz = $curd->get_quiz( $post->ID );\n+?>\n+\n+\u003Cdiv class=\"lp-item-assigned\">\n+\t\u003C?php if ( $quiz ) : ?>\n+\t\t\u003C?php $courses = learn_press_get_item_courses( $quiz->ID ); ?>\n+\n+\t\t\u003C?php if ( $courses ) : ?>\n+\t\t\t\u003Cul class=\"parent-courses\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tforeach ( $courses as $course ) :\n+\t\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\n+\t\t\t\t\tif ( ! $courseModel ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\u003Cstrong>\n+\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $course->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $course->ID ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fstrong>\n+\t\t\t\t\t\t&#8212;\n+\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo learn_press_get_course_permalink( $course->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003Cul class=\"parent-quizzes\">\n+\t\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\t\u003Cstrong>\n+\t\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo get_edit_post_link( $quiz->ID ); ?>\" target=\"_blank\">\n+\t\t\t\t\t\t\t\t\t\t&#8212; &#8212;\n+\t\t\t\t\t\t\t\t\t\t\u003C?php echo get_the_title( $quiz->ID ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\u003C\u002Fstrong>\n+\t\t\t\t\t\t\t\t&#8212;\n+\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_item_link( $quiz->ID ); ?>\" target=\"_blank\">\u003C?php esc_html_e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C?php else : ?>\n+\t\t\t\u003Cstrong>\u003Ca href=\"\u003C?php echo get_edit_post_link( $quiz->ID ); ?>\" target=\"_blank\">\u003C?php echo get_the_title( $quiz->ID ); ?>\u003C\u002Fa>\u003C\u002Fstrong>\n+\t\t\u003C?php endif; ?>\n+\t\t\u003C?php\n+\telse :\n+\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\n+\tendif;\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,149 +1,149 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Meta_Box_Quiz.\r\n- *\r\n- * Meta box for quiz settings.\r\n- *\u002F\r\n-class LP_Meta_Box_Quiz extends LP_Meta_Box {\r\n-\r\n-\tprivate static $_instance = null;\r\n-\r\n-\tpublic $post_type = LP_QUIZ_CPT;\r\n-\r\n-\tpublic function add_meta_box() {\r\n-\t\tadd_meta_box( 'quiz_settings', esc_html__( 'Quiz Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\r\n-\t}\r\n-\r\n-\tpublic function metabox( $post_id = 0 ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp\u002Fmetabox\u002Fquiz\u002Flists',\r\n-\t\t\tarray(\r\n-\t\t\t\t'_lp_duration'             => new LP_Meta_Box_Duration_Field(\r\n-\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Set to 0 for no limit, greater than 0 for a limit.', 'learnpress' ),\r\n-\t\t\t\t\t'0',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'default_time'      => 'minute',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_passing_grade'        => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Passing Grade(%)', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The conditions that must be achieved in order to pass the quiz.', 'learnpress' ),\r\n-\t\t\t\t\t'80',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t\t'max'  => '100',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 60px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_instant_check'        => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Instant Check', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Allow students to immediately check their answers while doing the quiz.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_negative_marking'     => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Negative Marking', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'For each question that students answer wrongly, the total point is deducted exactly from the question\\'s point.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_minus_skip_questions' => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Minus for skip', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'For each question that students answer skip, the total point is deducted exactly from the question\\'s point.', 'learnpress' ),\r\n-\t\t\t\t\t'no'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_retake_count'         => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Retake', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'How many times can the user re-take this quiz? Set 0 to disable. Set -1 to infinite.', 'learnpress' ),\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '-1',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 60px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_pagination'           => new LP_Meta_Box_Text_Field(\r\n-\t\t\t\t\tesc_html__( 'Pagination', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'The number of displayed questions on each page.', 'learnpress' ),\r\n-\t\t\t\t\t'1',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type_input'        => 'number',\r\n-\t\t\t\t\t\t'custom_attributes' => array(\r\n-\t\t\t\t\t\t\t'min'  => '0',\r\n-\t\t\t\t\t\t\t'step' => '1',\r\n-\t\t\t\t\t\t\t'max'  => '100',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'style'             => 'width: 60px;',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_review'               => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Review', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Allow students to review this quiz after they finish the quiz.', 'learnpress' ),\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t),\r\n-\t\t\t\t'_lp_show_correct_review'  => new LP_Meta_Box_Checkbox_Field(\r\n-\t\t\t\t\tesc_html__( 'Show the correct answer', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Allow students to view the correct answer to the question in reviewing this quiz.', 'learnpress' ),\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t$post_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function output( $post ) {\r\n-\t\tparent::output( $post );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--quiz\">\r\n-\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tdo_action( 'learnpress\u002Fquiz-settings\u002Fbefore' );\r\n-\t\t\t\t\u002F\u002F Check if add_filter to old version.\r\n-\t\t\t\t$is_old = false;\r\n-\r\n-\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\r\n-\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t$object->id = $key;\r\n-\t\t\t\t\t\t$output     = $object->output( $post->ID );\r\n-\t\t\t\t\t\tif ( ! empty( $output ) ) {\r\n-\t\t\t\t\t\t\techo wp_kses_post( $object->output( $post->ID ) );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} elseif ( is_array( $object ) ) {\r\n-\t\t\t\t\t\t$is_old = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $is_old ) {\r\n-\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learnpress\u002Fquiz-settings\u002Fafter' );\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Meta_Box_Quiz::instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Meta_Box_Quiz.\n+ *\n+ * Meta box for quiz settings.\n+ *\u002F\n+class LP_Meta_Box_Quiz extends LP_Meta_Box {\n+\n+\tprivate static $_instance = null;\n+\n+\tpublic $post_type = LP_QUIZ_CPT;\n+\n+\tpublic function add_meta_box() {\n+\t\tadd_meta_box( 'quiz_settings', esc_html__( 'Quiz Settings', 'learnpress' ), array( $this, 'output' ), $this->post_type, 'normal', 'high' );\n+\t}\n+\n+\tpublic function metabox( $post_id = 0 ) {\n+\t\treturn apply_filters(\n+\t\t\t'lp\u002Fmetabox\u002Fquiz\u002Flists',\n+\t\t\tarray(\n+\t\t\t\t'_lp_duration'             => new LP_Meta_Box_Duration_Field(\n+\t\t\t\t\tesc_html__( 'Duration', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Set to 0 for no limit, greater than 0 for a limit.', 'learnpress' ),\n+\t\t\t\t\t'0',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'default_time'      => 'minute',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_passing_grade'        => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Passing Grade(%)', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The conditions that must be achieved in order to pass the quiz.', 'learnpress' ),\n+\t\t\t\t\t'80',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t\t'max'  => '100',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 60px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_instant_check'        => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Instant Check', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Allow students to immediately check their answers while doing the quiz.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_negative_marking'     => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Negative Marking', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'For each question that students answer wrongly, the total point is deducted exactly from the question\\'s point.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_minus_skip_questions' => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Minus for skip', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'For each question that students answer skip, the total point is deducted exactly from the question\\'s point.', 'learnpress' ),\n+\t\t\t\t\t'no'\n+\t\t\t\t),\n+\t\t\t\t'_lp_retake_count'         => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Retake', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'How many times can the user re-take this quiz? Set 0 to disable. Set -1 to infinite.', 'learnpress' ),\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '-1',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 60px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_pagination'           => new LP_Meta_Box_Text_Field(\n+\t\t\t\t\tesc_html__( 'Pagination', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'The number of displayed questions on each page.', 'learnpress' ),\n+\t\t\t\t\t'1',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type_input'        => 'number',\n+\t\t\t\t\t\t'custom_attributes' => array(\n+\t\t\t\t\t\t\t'min'  => '0',\n+\t\t\t\t\t\t\t'step' => '1',\n+\t\t\t\t\t\t\t'max'  => '100',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'style'             => 'width: 60px;',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'_lp_review'               => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Review', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Allow students to review this quiz after they finish the quiz.', 'learnpress' ),\n+\t\t\t\t\t'yes'\n+\t\t\t\t),\n+\t\t\t\t'_lp_show_correct_review'  => new LP_Meta_Box_Checkbox_Field(\n+\t\t\t\t\tesc_html__( 'Show the correct answer', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Allow students to view the correct answer to the question in reviewing this quiz.', 'learnpress' ),\n+\t\t\t\t\t'yes'\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t$post_id\n+\t\t);\n+\t}\n+\n+\tpublic function output( $post ) {\n+\t\tparent::output( $post );\n+\t\t?>\n+\n+\t\t\u003Cdiv class=\"lp-meta-box lp-meta-box--quiz\">\n+\t\t\t\u003Cdiv class=\"lp-meta-box__inner\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tdo_action( 'learnpress\u002Fquiz-settings\u002Fbefore' );\n+\t\t\t\t\u002F\u002F Check if add_filter to old version.\n+\t\t\t\t$is_old = false;\n+\n+\t\t\t\tforeach ( $this->metabox( $post->ID ) as $key => $object ) {\n+\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t\t$object->id = $key;\n+\t\t\t\t\t\t$output     = $object->output( $post->ID );\n+\t\t\t\t\t\tif ( ! empty( $output ) ) {\n+\t\t\t\t\t\t\techo wp_kses_post( $object->output( $post->ID ) );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} elseif ( is_array( $object ) ) {\n+\t\t\t\t\t\t$is_old = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $is_old ) {\n+\t\t\t\t\tlp_meta_box_output( $this->metabox( $post->ID ) );\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learnpress\u002Fquiz-settings\u002Fafter' );\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+LP_Meta_Box_Quiz::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-items.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-items.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-items.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-items.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-\u003Cscript type=\"text\u002Ftemplate\" id=\"learn-press-modal-search-items\">\r\n-\t\u003Cdiv id=\"modal-search-items\" class=\"learn-press-modal\">\r\n-\t\t\u003Cdiv class=\"modal-overlay\">\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"modal-wrapper\">\r\n-\t\t\t\u003Cdiv class=\"modal-container\">\r\n-\t\t\t\t\u003Cheader>\u003C?php echo wp_kses_post( $this->_options['title'] ); ?>\u003C\u002Fheader>\r\n-\t\t\t\t\u003Carticle>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"search\" value=\"\" placeholder=\"\u003C?php esc_html_e( 'Search items', 'learnpress' ); ?>\" autocomplete=\"off\"\u002F>\r\n-\t\t\t\t\t\u003Cul class=\"search-results\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Farticle>\r\n-\t\t\t\t\u003Cfooter>\r\n-\t\t\t\t\t\u003Cdiv class=\"search-nav\">\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cbutton class=\"button close\">\u003C?php echo wp_kses_post( $this->_options['close_button'] ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"button button-primary add\" style=\"display:none\">\u003C?php echo wp_kses_post( $this->_options['add_button'] ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Ffooter>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\u003C?php\r\n-\r\n-?>\r\n-\u003Cdiv id=\"container-modal-search-items\" style=\"position: relative;z-index: 10000;\">\r\n-\u003C\u002Fdiv>\r\n-\r\n-\r\n-\r\n+\u003Cscript type=\"text\u002Ftemplate\" id=\"learn-press-modal-search-items\">\n+\t\u003Cdiv id=\"modal-search-items\" class=\"learn-press-modal\">\n+\t\t\u003Cdiv class=\"modal-overlay\">\n+\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"modal-wrapper\">\n+\t\t\t\u003Cdiv class=\"modal-container\">\n+\t\t\t\t\u003Cheader>\u003C?php echo wp_kses_post( $this->_options['title'] ); ?>\u003C\u002Fheader>\n+\t\t\t\t\u003Carticle>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"search\" value=\"\" placeholder=\"\u003C?php esc_html_e( 'Search items', 'learnpress' ); ?>\" autocomplete=\"off\"\u002F>\n+\t\t\t\t\t\u003Cul class=\"search-results\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Farticle>\n+\t\t\t\t\u003Cfooter>\n+\t\t\t\t\t\u003Cdiv class=\"search-nav\">\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cbutton class=\"button close\">\u003C?php echo wp_kses_post( $this->_options['close_button'] ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"button button-primary add\" style=\"display:none\">\u003C?php echo wp_kses_post( $this->_options['add_button'] ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Ffooter>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\u003C?php\n+\n+?>\n+\u003Cdiv id=\"container-modal-search-items\" style=\"position: relative;z-index: 10000;\">\n+\u003C\u002Fdiv>\n+\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-users.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-users.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-users.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fmodal-search-users.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003Cscript type=\"text\u002Fx-template\" id=\"learn-press-modal-search-users\">\r\n-\t\u003Cdiv id=\"modal-search-users\" class=\"learn-press-modal\">\r\n-\t\t\u003Cdiv class=\"modal-overlay\">\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"modal-wrapper\">\r\n-\t\t\t\u003Cdiv class=\"modal-container\">\r\n-\t\t\t\t\u003Cheader>\u003C?php echo wp_kses_post( $this->_options['title'] ); ?>\u003C\u002Fheader>\r\n-\t\t\t\t\u003Carticle>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"search\" @keyup=\"doSearch\" ref=\"term\" placeholder=\"\u003C?php esc_html_e( 'Search users', 'learnpress' ); ?>\" autocomplete=\"off\"\u002F>\r\n-\t\t\t\t\t\u003Cul class=\"search-results\" @click=\"selectItem\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Farticle>\r\n-\t\t\t\t\u003Cfooter>\r\n-\t\t\t\t\t\u003Cdiv class=\"search-nav\" @click=\"loadPage\" v-if=\"hasUsers\">\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cbutton class=\"button\"\r\n-\t\t\t\t\t\t\t@click=\"close\">\u003C?php echo wp_kses_post( $this->_options['close_button'] ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"button button-primary\"\r\n-\t\t\t\t\t\t\t@click=\"addUsers\"\r\n-\t\t\t\t\t\t\tv-if=\"selected.length && multiple\">\u003C?php echo wp_kses_post( $this->_options['add_button'] ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Ffooter>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\u003Cdiv id=\"vue-modal-search-users\" style=\"position: relative;z-index: 10000;\">\r\n-\t\u003Clearn-press-modal-search-users v-if=\"show\" :multiple=\"multiple\" :term=\"term\" :contex=\"context\"\r\n-\t\t\t\t\t\t\t\t\t:context-id=\"contextId\" :show=\"show\" :callbacks=\"callbacks\"\r\n-\t\t\t\t\t\t\t\t\t:text-format=\"textFormat\"\r\n-\t\t\t\t\t\t\t\t\t:exclude=\"exclude\"\r\n-\t\t\t\t\t\t\t\t\tv-on:close=\"close\">\r\n-\t\u003C\u002Flearn-press-modal-search-users>\r\n-\u003C\u002Fdiv>\r\n+\u003Cscript type=\"text\u002Fx-template\" id=\"learn-press-modal-search-users\">\n+\t\u003Cdiv id=\"modal-search-users\" class=\"learn-press-modal\">\n+\t\t\u003Cdiv class=\"modal-overlay\">\n+\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"modal-wrapper\">\n+\t\t\t\u003Cdiv class=\"modal-container\">\n+\t\t\t\t\u003Cheader>\u003C?php echo wp_kses_post( $this->_options['title'] ); ?>\u003C\u002Fheader>\n+\t\t\t\t\u003Carticle>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"search\" @keyup=\"doSearch\" ref=\"term\" placeholder=\"\u003C?php esc_html_e( 'Search users', 'learnpress' ); ?>\" autocomplete=\"off\"\u002F>\n+\t\t\t\t\t\u003Cul class=\"search-results\" @click=\"selectItem\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Farticle>\n+\t\t\t\t\u003Cfooter>\n+\t\t\t\t\t\u003Cdiv class=\"search-nav\" @click=\"loadPage\" v-if=\"hasUsers\">\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cbutton class=\"button\"\n+\t\t\t\t\t\t\t@click=\"close\">\u003C?php echo wp_kses_post( $this->_options['close_button'] ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"button button-primary\"\n+\t\t\t\t\t\t\t@click=\"addUsers\"\n+\t\t\t\t\t\t\tv-if=\"selected.length && multiple\">\u003C?php echo wp_kses_post( $this->_options['add_button'] ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Ffooter>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\u003Cdiv id=\"vue-modal-search-users\" style=\"position: relative;z-index: 10000;\">\n+\t\u003Clearn-press-modal-search-users v-if=\"show\" :multiple=\"multiple\" :term=\"term\" :contex=\"context\"\n+\t\t\t\t\t\t\t\t\t:context-id=\"contextId\" :show=\"show\" :callbacks=\"callbacks\"\n+\t\t\t\t\t\t\t\t\t:text-format=\"textFormat\"\n+\t\t\t\t\t\t\t\t\t:exclude=\"exclude\"\n+\t\t\t\t\t\t\t\t\tv-on:close=\"close\">\n+\t\u003C\u002Flearn-press-modal-search-users>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fplaceholder-animation.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fplaceholder-animation.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fplaceholder-animation.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fplaceholder-animation.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying a placeholder with animation effect.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.7\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\r\n-\r\n-\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\r\n-\r\n-\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\r\n-\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying a placeholder with animation effect.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.7\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die();\n+?>\n+\n+\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\n+\n+\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\n+\n+\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\n+\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Factions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Factions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Factions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Factions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin question editor: question actions template.\r\n- *\r\n- * @author ThimPress \u003Cnhamdv>\r\n- * @since 4.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-actions\">\r\n-\t\u003Cdiv class=\"lp-box-data-head lp-row\">\r\n-\t\t\u003Ch3 class=\"heading\">\u003C?php esc_html_e( 'Details', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv class=\"lp-question-editor lp-question-editor--right\">\r\n-\t\t\t\u003Cdiv class=\"lp-question-editor__inner\">\r\n-\t\t\t\t\u003Cdiv class=\"question-types\">\r\n-\t\t\t\t\t\u003Ca>{{typeLabel()}}\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli v-for=\"(type, key) in types\" :data-type=\"key\" :class=\"active(key)\">\r\n-\t\t\t\t\t\t\t\u003Ca href=\"\" @click.prevent=\"changeType(key)\">{{type}}\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function( $ ) {\r\n-\t\tvar $store = window.LP_Question_Store;\r\n-\t\tvar pick = lodash.pick;\r\n-\r\n-\t\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\t\t$Vue.component( 'lp-question-actions', {\r\n-\t\t\ttemplate: '#tmpl-lp-question-actions',\r\n-\t\t\tprops: ['type'],\r\n-\t\t\tcomputed: {\r\n-\t\t\t\ttypes: function() {\r\n-\t\t\t\t\treturn $store.getters['types']\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\ttypeLabel: function() {\r\n-\t\t\t\t\tvar types = this.types;\r\n-\t\t\t\t\treturn types[this.type];\r\n-\t\t\t\t},\r\n-\t\t\t\tactive: function( type ) {\r\n-\t\t\t\t\tvar classes = [''];\r\n-\r\n-\t\t\t\t\tif ( this.type === type ) {\r\n-\t\t\t\t\t\tclasses.push('active');\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tvar supportTypes = $store.getters['supportAnswerOptions'];\r\n-\r\n-\t\t\t\t\tif ( supportTypes.indexOf( type ) === -1 || supportTypes.indexOf( this.type ) === -1 ) {\r\n-\t\t\t\t\t\tclasses.push( 'disabled' )\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn classes;\r\n-\t\t\t\t},\r\n-\t\t\t\tchangeType: function( type ) {\r\n-\t\t\t\t\tif ( this.type !== type ) {\r\n-\t\t\t\t\t\tthis.$emit( 'changeType', type );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tgetQuestionsSupportAnswerOptions: function() {\r\n-\t\t\t\t\tvar supportTypes = $store.getters['supportAnswerOptions'];\r\n-\r\n-\t\t\t\t\treturn supportTypes.indexOf( this.type ) !== -1 ? pick( this.types, supportTypes ) : false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin question editor: question actions template.\n+ *\n+ * @author ThimPress \u003Cnhamdv>\n+ * @since 4.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-actions\">\n+\t\u003Cdiv class=\"lp-box-data-head lp-row\">\n+\t\t\u003Ch3 class=\"heading\">\u003C?php esc_html_e( 'Details', 'learnpress' ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv class=\"lp-question-editor lp-question-editor--right\">\n+\t\t\t\u003Cdiv class=\"lp-question-editor__inner\">\n+\t\t\t\t\u003Cdiv class=\"question-types\">\n+\t\t\t\t\t\u003Ca>{{typeLabel()}}\u003C\u002Fa>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli v-for=\"(type, key) in types\" :data-type=\"key\" :class=\"active(key)\">\n+\t\t\t\t\t\t\t\u003Ca href=\"\" @click.prevent=\"changeType(key)\">{{type}}\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function( $ ) {\n+\t\tvar $store = window.LP_Question_Store;\n+\t\tvar pick = lodash.pick;\n+\n+\t\twindow.$Vue = window.$Vue || Vue;\n+\n+\t\t$Vue.component( 'lp-question-actions', {\n+\t\t\ttemplate: '#tmpl-lp-question-actions',\n+\t\t\tprops: ['type'],\n+\t\t\tcomputed: {\n+\t\t\t\ttypes: function() {\n+\t\t\t\t\treturn $store.getters['types']\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\ttypeLabel: function() {\n+\t\t\t\t\tvar types = this.types;\n+\t\t\t\t\treturn types[this.type];\n+\t\t\t\t},\n+\t\t\t\tactive: function( type ) {\n+\t\t\t\t\tvar classes = [''];\n+\n+\t\t\t\t\tif ( this.type === type ) {\n+\t\t\t\t\t\tclasses.push('active');\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tvar supportTypes = $store.getters['supportAnswerOptions'];\n+\n+\t\t\t\t\tif ( supportTypes.indexOf( type ) === -1 || supportTypes.indexOf( this.type ) === -1 ) {\n+\t\t\t\t\t\tclasses.push( 'disabled' )\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn classes;\n+\t\t\t\t},\n+\t\t\t\tchangeType: function( type ) {\n+\t\t\t\t\tif ( this.type !== type ) {\n+\t\t\t\t\t\tthis.$emit( 'changeType', type );\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tgetQuestionsSupportAnswerOptions: function() {\n+\t\t\t\t\tvar supportTypes = $store.getters['supportAnswerOptions'];\n+\n+\t\t\t\t\treturn supportTypes.indexOf( this.type ) !== -1 ? pick( this.types, supportTypes ) : false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Fanswer.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Fanswer.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Fanswer.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Fanswer.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,138 +1,138 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin question editor: question answer template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'question\u002Foption' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-answer\">\r\n-\t\u003Cdiv class=\"lp-box-data-content\">\r\n-\t\t\u003Ctable class=\"lp-list-options list-question-answers\">\r\n-\t\t\t\u003Cthead>\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Cth class=\"sort\">\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"answer-text\">\u003C?php esc_html_e( 'Answers', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"answer-correct\">\u003C?php esc_html_e( 'Correction', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth class=\"actions\">\u003C\u002Fth>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\t\u003Clp-question-answer-option v-for=\"(answer, index) in answers\" :key=\"index\" :index=\"index\" :type=\"type\" :radio=\"radio\" :number=\"number\" :answer=\"answer\" @updateTitle=\"updateTitle\" @changeCorrect=\"changeCorrect\" @deleteAnswer=\"deleteAnswer\">\u003C\u002Flp-question-answer-option>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\t\u003Cp class=\"add-answer\" v-if=\"addable\">\r\n-\t\t\t\u003Cbutton class=\"button add-question-option-button\" type=\"button\" @click=\"newAnswer\">\u003C?php esc_html_e( 'Add a new Answer', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function( $ ) {\r\n-\t\tvar $store = window.LP_Question_Store;\r\n-\r\n-\t\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\t\t$Vue.component('lp-question-answer', {\r\n-\t\t\ttemplate: '#tmpl-lp-question-answer',\r\n-\t\t\tprops: ['type', 'answers'],\r\n-\t\t\tcomputed: {\r\n-\t\t\t\t\u002F\u002F check type radio answer type\r\n-\t\t\t\tradio: function() {\r\n-\t\t\t\t\treturn this.type === 'true_or_false' || this.type === 'single_choice';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F number answer\r\n-\t\t\t\tnumber: function() {\r\n-\t\t\t\t\treturn this.answers.length;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F addable new answer\r\n-\t\t\t\taddable: function() {\r\n-\t\t\t\t\treturn this.type !== 'true_or_false';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F question status\r\n-\t\t\t\tstatus: function() {\r\n-\t\t\t\t\treturn $store.getters['status'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F get draft status\r\n-\t\t\t\tdraft: function() {\r\n-\t\t\t\t\treturn $store.getters['autoDraft'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcreated: function() {\r\n-\t\t\t\tvar _self = this;\r\n-\r\n-\t\t\t\tsetTimeout( function() {\r\n-\t\t\t\t\tvar $el = $('.list-question-answers tbody');\r\n-\r\n-\t\t\t\t\t$el.sortable({\r\n-\t\t\t\t\t\thandle: '.sort',\r\n-\t\t\t\t\t\taxis: 'y',\r\n-\t\t\t\t\t\thelper: function(e, ui) {\r\n-\t\t\t\t\t\t\tvar $tr = $('\u003Ctr \u002F>'),\r\n-\t\t\t\t\t\t\t\t$row = $(e.target).closest('tr');\r\n-\r\n-\t\t\t\t\t\t\t$row.children().each( function() {\r\n-\t\t\t\t\t\t\t\tvar $td = $(this).clone().width( $(this).width() )\r\n-\t\t\t\t\t\t\t\t$tr.append($td);\r\n-\t\t\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t\t\treturn $tr;\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tstart: function() {\r\n-\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\tupdate: function() {\r\n-\t\t\t\t\t\t\t_self.sort();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}, 1000);\r\n-\r\n-\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\t\u002F\u002F sort answer options\r\n-\t\t\t\tsort: function() {\r\n-\t\t\t\t\tvar _items = $('.list-question-answers tbody>tr.answer-option');\r\n-\t\t\t\t\tvar _order = [];\r\n-\t\t\t\t\t_items.each( function( index, item ) {\r\n-\t\t\t\t\t\t$(item).find('.order').text( (index + 1) + '.');\r\n-\t\t\t\t\t\t_order.push( $(item).data('answer-id') );\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t$store.dispatch('updateAnswersOrder', _order);\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F change answer title\r\n-\t\t\t\tupdateTitle: function(answer) {\r\n-\t\t\t\t\t\u002F\u002Fif (!this.draft) {\r\n-\t\t\t\t\t\u002F\u002F update title\r\n-\t\t\t\t\t$store.dispatch('updateAnswerTitle', answer);\r\n-\t\t\t\t\t\u002F\u002F}\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F change correct answer\r\n-\t\t\t\tchangeCorrect: function(correct) {\r\n-\t\t\t\t\tif (!this.draft) {\r\n-\t\t\t\t\t\t$store.dispatch('updateCorrectAnswer', correct);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F delete answer\r\n-\t\t\t\tdeleteAnswer: function(answer) {\r\n-\t\t\t\t\t$store.dispatch('deleteAnswer', answer);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F new answer option\r\n-\t\t\t\tnewAnswer: function() {\r\n-\t\t\t\t\t\u002F\u002F new answer\r\n-\t\t\t\t\t$store.dispatch('newAnswer', {\r\n-\t\t\t\t\t\tanswer: {\r\n-\t\t\t\t\t\t\tvalue: '',\r\n-\t\t\t\t\t\t\ttitle: ''\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t})\r\n-\t});\r\n-\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin question editor: question answer template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'question\u002Foption' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-answer\">\n+\t\u003Cdiv class=\"lp-box-data-content\">\n+\t\t\u003Ctable class=\"lp-list-options list-question-answers\">\n+\t\t\t\u003Cthead>\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Cth class=\"sort\">\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"answer-text\">\u003C?php esc_html_e( 'Answers', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"answer-correct\">\u003C?php esc_html_e( 'Correction', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth class=\"actions\">\u003C\u002Fth>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>\n+\t\t\t\u003Ctbody>\n+\t\t\t\t\u003Clp-question-answer-option v-for=\"(answer, index) in answers\" :key=\"index\" :index=\"index\" :type=\"type\" :radio=\"radio\" :number=\"number\" :answer=\"answer\" @updateTitle=\"updateTitle\" @changeCorrect=\"changeCorrect\" @deleteAnswer=\"deleteAnswer\">\u003C\u002Flp-question-answer-option>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\u003C\u002Ftable>\n+\t\t\u003Cp class=\"add-answer\" v-if=\"addable\">\n+\t\t\t\u003Cbutton class=\"button add-question-option-button\" type=\"button\" @click=\"newAnswer\">\u003C?php esc_html_e( 'Add a new Answer', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function( $ ) {\n+\t\tvar $store = window.LP_Question_Store;\n+\n+\t\twindow.$Vue = window.$Vue || Vue;\n+\n+\t\t$Vue.component('lp-question-answer', {\n+\t\t\ttemplate: '#tmpl-lp-question-answer',\n+\t\t\tprops: ['type', 'answers'],\n+\t\t\tcomputed: {\n+\t\t\t\t\u002F\u002F check type radio answer type\n+\t\t\t\tradio: function() {\n+\t\t\t\t\treturn this.type === 'true_or_false' || this.type === 'single_choice';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F number answer\n+\t\t\t\tnumber: function() {\n+\t\t\t\t\treturn this.answers.length;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F addable new answer\n+\t\t\t\taddable: function() {\n+\t\t\t\t\treturn this.type !== 'true_or_false';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F question status\n+\t\t\t\tstatus: function() {\n+\t\t\t\t\treturn $store.getters['status'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F get draft status\n+\t\t\t\tdraft: function() {\n+\t\t\t\t\treturn $store.getters['autoDraft'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcreated: function() {\n+\t\t\t\tvar _self = this;\n+\n+\t\t\t\tsetTimeout( function() {\n+\t\t\t\t\tvar $el = $('.list-question-answers tbody');\n+\n+\t\t\t\t\t$el.sortable({\n+\t\t\t\t\t\thandle: '.sort',\n+\t\t\t\t\t\taxis: 'y',\n+\t\t\t\t\t\thelper: function(e, ui) {\n+\t\t\t\t\t\t\tvar $tr = $('\u003Ctr \u002F>'),\n+\t\t\t\t\t\t\t\t$row = $(e.target).closest('tr');\n+\n+\t\t\t\t\t\t\t$row.children().each( function() {\n+\t\t\t\t\t\t\t\tvar $td = $(this).clone().width( $(this).width() )\n+\t\t\t\t\t\t\t\t$tr.append($td);\n+\t\t\t\t\t\t\t});\n+\n+\t\t\t\t\t\t\treturn $tr;\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tstart: function() {\n+\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\tupdate: function() {\n+\t\t\t\t\t\t\t_self.sort();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t}, 1000);\n+\n+\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\t\u002F\u002F sort answer options\n+\t\t\t\tsort: function() {\n+\t\t\t\t\tvar _items = $('.list-question-answers tbody>tr.answer-option');\n+\t\t\t\t\tvar _order = [];\n+\t\t\t\t\t_items.each( function( index, item ) {\n+\t\t\t\t\t\t$(item).find('.order').text( (index + 1) + '.');\n+\t\t\t\t\t\t_order.push( $(item).data('answer-id') );\n+\t\t\t\t\t});\n+\n+\t\t\t\t\t$store.dispatch('updateAnswersOrder', _order);\n+\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F change answer title\n+\t\t\t\tupdateTitle: function(answer) {\n+\t\t\t\t\t\u002F\u002Fif (!this.draft) {\n+\t\t\t\t\t\u002F\u002F update title\n+\t\t\t\t\t$store.dispatch('updateAnswerTitle', answer);\n+\t\t\t\t\t\u002F\u002F}\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F change correct answer\n+\t\t\t\tchangeCorrect: function(correct) {\n+\t\t\t\t\tif (!this.draft) {\n+\t\t\t\t\t\t$store.dispatch('updateCorrectAnswer', correct);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F delete answer\n+\t\t\t\tdeleteAnswer: function(answer) {\n+\t\t\t\t\t$store.dispatch('deleteAnswer', answer);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F new answer option\n+\t\t\t\tnewAnswer: function() {\n+\t\t\t\t\t\u002F\u002F new answer\n+\t\t\t\t\t$store.dispatch('newAnswer', {\n+\t\t\t\t\t\tanswer: {\n+\t\t\t\t\t\t\tvalue: '',\n+\t\t\t\t\t\t\ttitle: ''\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\t\t})\n+\t});\n+\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Feditor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Feditor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Feditor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Feditor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,101 +1,101 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin question editor: editor template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-$question = LP_Question::get_question();\r\n-\r\n-learn_press_admin_view( 'question\u002Factions' );\r\n-learn_press_admin_view( 'question\u002Fanswer' );\r\n-learn_press_admin_view( 'question\u002Ffill-in-blanks' );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"admin-editor-lp_question\">\r\n-\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-editor\">\r\n-\t\u003Cdiv>\r\n-\t\u003Ctemplate v-if=\"!supportAnswerOptions\">\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fquestion-editor\u002Fquestion-js-component', $question ); ?>\r\n-\t\u003C\u002Ftemplate>\r\n-\t\u003Ctemplate v-else>\r\n-\t\t\u003Cdiv id=\"admin-editor-lp_question\" :class=\"['lp-admin-editor learn-press-box-data', type]\">\r\n-\t\t\t\u003Clp-question-actions :type=\"type\" @changeType=\"changeType\">\u003C\u002Flp-question-actions>\r\n-\r\n-\t\t\t\u003Ctemplate v-if=\"isFillInBlank\">\r\n-\t\t\t\t\u003Clp-fib-question-answer :type=\"type\" :answers=\"answers\">\u003C\u002Flp-fib-question-answer>\r\n-\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\t\u003Ctemplate v-else>\r\n-\t\t\t\t\u003Clp-question-answer :type=\"type\" :answers=\"answers\">\u003C\u002Flp-question-answer>\r\n-\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Ftemplate>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $store = window.LP_Question_Store;\r\n-\r\n-\t\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\t\t$Vue.component('lp-question-editor', {\r\n-\t\t\ttemplate: '#tmpl-lp-question-editor',\r\n-\t\t\tmounted: function() {\r\n-\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\tvm.$watch('type', function() {\r\n-\t\t\t\t});\r\n-\r\n-\t\t\t\tif(lpAdminSettings.screen.action === 'add') {\r\n-\t\t\t\t\t$store.dispatch('changeQuestionType', {\r\n-\t\t\t\t\t\ttype: vm.type\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\ttype: function() {\r\n-\t\t\t\t\treturn $store.getters['type']['key'];\r\n-\t\t\t\t},\r\n-\t\t\t\tisFillInBlank: function() {\r\n-\t\t\t\t\treturn this.type === 'fill_in_blanks';\r\n-\t\t\t\t},\r\n-\t\t\t\tsupportAnswerOptions: function () {\r\n-\t\t\t\t\treturn $store.getters['supportAnswerOptions'].indexOf( this.type ) !== -1;\r\n-\t\t\t\t},\r\n-\t\t\t\tanswers: function() {\r\n-\t\t\t\t\treturn $store.getters['answers'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcreated: function() {\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tchangeType: function (type) {\r\n-\t\t\t\t\t$store.dispatch('changeQuestionType', {\r\n-\t\t\t\t\t\tquestion: {\r\n-\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\r\n-\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\r\n-\t\t\t\t\t\t},\r\n-\t\t\t\t\t\ttype: type\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin question editor: editor template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+$question = LP_Question::get_question();\n+\n+learn_press_admin_view( 'question\u002Factions' );\n+learn_press_admin_view( 'question\u002Fanswer' );\n+learn_press_admin_view( 'question\u002Ffill-in-blanks' );\n+?>\n+\n+\u003Cdiv id=\"admin-editor-lp_question\">\n+\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-editor\">\n+\t\u003Cdiv>\n+\t\u003Ctemplate v-if=\"!supportAnswerOptions\">\n+\t\t\u003C?php do_action( 'learn-press\u002Fquestion-editor\u002Fquestion-js-component', $question ); ?>\n+\t\u003C\u002Ftemplate>\n+\t\u003Ctemplate v-else>\n+\t\t\u003Cdiv id=\"admin-editor-lp_question\" :class=\"['lp-admin-editor learn-press-box-data', type]\">\n+\t\t\t\u003Clp-question-actions :type=\"type\" @changeType=\"changeType\">\u003C\u002Flp-question-actions>\n+\n+\t\t\t\u003Ctemplate v-if=\"isFillInBlank\">\n+\t\t\t\t\u003Clp-fib-question-answer :type=\"type\" :answers=\"answers\">\u003C\u002Flp-fib-question-answer>\n+\t\t\t\u003C\u002Ftemplate>\n+\t\t\t\u003Ctemplate v-else>\n+\t\t\t\t\u003Clp-question-answer :type=\"type\" :answers=\"answers\">\u003C\u002Flp-question-answer>\n+\t\t\t\u003C\u002Ftemplate>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Ftemplate>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $store = window.LP_Question_Store;\n+\n+\t\twindow.$Vue = window.$Vue || Vue;\n+\n+\t\t$Vue.component('lp-question-editor', {\n+\t\t\ttemplate: '#tmpl-lp-question-editor',\n+\t\t\tmounted: function() {\n+\t\t\t\tvar vm = this;\n+\n+\t\t\t\tvm.$watch('type', function() {\n+\t\t\t\t});\n+\n+\t\t\t\tif(lpAdminSettings.screen.action === 'add') {\n+\t\t\t\t\t$store.dispatch('changeQuestionType', {\n+\t\t\t\t\t\ttype: vm.type\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\ttype: function() {\n+\t\t\t\t\treturn $store.getters['type']['key'];\n+\t\t\t\t},\n+\t\t\t\tisFillInBlank: function() {\n+\t\t\t\t\treturn this.type === 'fill_in_blanks';\n+\t\t\t\t},\n+\t\t\t\tsupportAnswerOptions: function () {\n+\t\t\t\t\treturn $store.getters['supportAnswerOptions'].indexOf( this.type ) !== -1;\n+\t\t\t\t},\n+\t\t\t\tanswers: function() {\n+\t\t\t\t\treturn $store.getters['answers'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcreated: function() {\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tchangeType: function (type) {\n+\t\t\t\t\t$store.dispatch('changeQuestionType', {\n+\t\t\t\t\t\tquestion: {\n+\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\n+\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\ttype: type\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffib-answer-editor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffib-answer-editor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffib-answer-editor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffib-answer-editor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-\u003Cdiv class=\"lp-box-data-content\">\r\n-\t\u003Cdiv class=\"learn-press-question\">\r\n-\t\t\u003Cdiv class=\"content-editable\" contenteditable=\"true\" @mouseup=\"canInsertBlank\" @mousedown=\"activeBlank\" @keyup=\"updateAnswer\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"description\">\r\n-\t\t\t\u003Cp>\u003C?php _e( 'Select a word in the passage above and click \u003Cstrong>\\'Insert a new blank\\'\u003C\u002Fstrong> to make that word a blank for filling.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"insertBlank\" :disabled=\"!canInsertNewBlank\">\u003C?php esc_html_e( 'Insert a new blank', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"clearBlanks\" :disabled=\"blanks.length == 0\">\u003C?php esc_html_e( 'Remove all blanks', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"clearContent\">\u003C?php esc_html_e( 'Clear content', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003Ctable class=\"fib-blanks\">\r\n-\t\t\t\u003Ctbody v-for=\"blank in blanks\" :data-id=\"'fib-blank-' + blank.id\" class=\"fib-blank\" :class=\"{ invalid: !blank.fill, open: blank.open }\">\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Ctd class=\"blank-position\" width=\"50\">#{{blank.index}}\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"blank-fill\">\r\n-\t\t\t\t\t\u003Cinput type=\"text\" :id=\"'fib-blank-' + blank.id\" v-model=\"blank.fill\" @keyup=\"updateBlank\" @change=\"updateBlank\">\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"blank-actions\">\r\n-\t\t\t\t\t\u003Cspan class=\"blank-status\">\u003C\u002Fspan>\r\n-\r\n-\t\t\t\t\t\u003Ca class=\"button\" href=\"\" @click=\"toggleOptions($event, blank.id)\">\u003C?php esc_html_e( 'Options', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Ca class=\"delete button\" href=\"\" @click=\"removeBlank($event, blank.id)\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003Ctr class=\"blank-options\">\r\n-\t\t\t\t\u003Ctd width=\"50\">\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd colspan=\"2\">\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"checkbox\" v-model=\"blank.match_case\" @click=\"updateAnswerMatchCase($event, blank)\">\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Match case', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Match two words in case sensitive.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\u003Ch4>\u003C?php esc_html_e( 'Comparison', 'learnpress' ); ?>\u003C\u002Fh4>\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Equal', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Match two words are equality.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"range\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Range', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php _e( 'Match any number in a range. Use \u003Ccode>100, 200\u003C\u002Fcode> to match any value from 100 to 200.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"any\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\r\n-\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Any', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php _e( 'Match any value in a set of words. Use \u003Ccode>fill, blank, or question\u003C\u002Fcode> to match any value in the set.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003Cdiv class=\"lp-box-data-content\">\n+\t\u003Cdiv class=\"learn-press-question\">\n+\t\t\u003Cdiv class=\"content-editable\" contenteditable=\"true\" @mouseup=\"canInsertBlank\" @mousedown=\"activeBlank\" @keyup=\"updateAnswer\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"description\">\n+\t\t\t\u003Cp>\u003C?php _e( 'Select a word in the passage above and click \u003Cstrong>\\'Insert a new blank\\'\u003C\u002Fstrong> to make that word a blank for filling.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cp>\n+\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"insertBlank\" :disabled=\"!canInsertNewBlank\">\u003C?php esc_html_e( 'Insert a new blank', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"clearBlanks\" :disabled=\"blanks.length == 0\">\u003C?php esc_html_e( 'Remove all blanks', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button\" type=\"button\" @click=\"clearContent\">\u003C?php esc_html_e( 'Clear content', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003Ctable class=\"fib-blanks\">\n+\t\t\t\u003Ctbody v-for=\"blank in blanks\" :data-id=\"'fib-blank-' + blank.id\" class=\"fib-blank\" :class=\"{ invalid: !blank.fill, open: blank.open }\">\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Ctd class=\"blank-position\" width=\"50\">#{{blank.index}}\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"blank-fill\">\n+\t\t\t\t\t\u003Cinput type=\"text\" :id=\"'fib-blank-' + blank.id\" v-model=\"blank.fill\" @keyup=\"updateBlank\" @change=\"updateBlank\">\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"blank-actions\">\n+\t\t\t\t\t\u003Cspan class=\"blank-status\">\u003C\u002Fspan>\n+\n+\t\t\t\t\t\u003Ca class=\"button\" href=\"\" @click=\"toggleOptions($event, blank.id)\">\u003C?php esc_html_e( 'Options', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\u003Ca class=\"delete button\" href=\"\" @click=\"removeBlank($event, blank.id)\">\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003Ctr class=\"blank-options\">\n+\t\t\t\t\u003Ctd width=\"50\">\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd colspan=\"2\">\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"checkbox\" v-model=\"blank.match_case\" @click=\"updateAnswerMatchCase($event, blank)\">\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Match case', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Match two words in case sensitive.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\u003Ch4>\u003C?php esc_html_e( 'Comparison', 'learnpress' ); ?>\u003C\u002Fh4>\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Equal', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Match two words are equality.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"range\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Range', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php _e( 'Match any number in a range. Use \u003Ccode>100, 200\u003C\u002Fcode> to match any value from 100 to 200.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput type=\"radio\" value=\"any\" v-model=\"blank.comparison\" @click=\"updateAnswerBlank($event, blank)\">\n+\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Any', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php _e( 'Match any value in a set of words. Use \u003Ccode>fill, blank, or question\u003C\u002Fcode> to match any value in the set.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\u003C\u002Ftable>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffill-in-blanks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffill-in-blanks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffill-in-blanks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffill-in-blanks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,347 +1,347 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin question editor: fib question answer template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-$content_id = uniqid( 'fib-content-' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-fib-question-answer\">\r\n-\t\u003Cdiv id=\"lp-admin-question-editor\" class=\"lp-admin-fib-question-editor\">\r\n-\t\t\u003C?php learn_press_admin_view( 'question\u002Ffib-answer-editor' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( document ).ready( function( $ ) {\r\n-\t\tconst $Vue = window.$Vue || Vue;\r\n-\t\tconst $store = window.LP_Question_Store;\r\n-\r\n-\t\tVue.component( 'lp-fib-question-answer', {\r\n-\t\t\ttemplate: '#tmpl-lp-fib-question-answer',\r\n-\t\t\tprops: [ 'type', 'answers', 'rawBlanks' ],\r\n-\r\n-\t\t\tdata() {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tvalid: true,\r\n-\t\t\t\t\tcanInsertNewBlank: false,\r\n-\t\t\t\t\tblanks: [],\r\n-\t\t\t\t};\r\n-\t\t\t},\r\n-\t\t\tmounted() {\r\n-\t\t\t\tconst that = this,\r\n-\t\t\t\t\tcontent = this.getContent();\r\n-\t\t\t\tthis.blanks = this.answers[ 0 ].blanks;\r\n-\t\t\t\tthis.$editor = $( this.$el ).find( '.content-editable' );\r\n-\t\t\t\tthis.$editor.html( content );\r\n-\t\t\t\tthis.parseBlanks( content );\r\n-\r\n-\t\t\t\tthis.$editor[ 0 ].addEventListener( 'DOMCharacterDataModified', function( e ) {\r\n-\t\t\t\t\tconst $target = $( e.target ).parent(),\r\n-\t\t\t\t\t\tid = $target.data( 'id' );\r\n-\r\n-\t\t\t\t\tfor ( const i in that.blanks ) {\r\n-\t\t\t\t\t\tif ( that.blanks[ i ].id == id ) {\r\n-\t\t\t\t\t\t\tthat.blanks[ i ].fill = $target.html().trim();\r\n-\t\t\t\t\t\t\tthat.$activeBlank = $target;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}, false );\r\n-\r\n-\t\t\t\tthis.interval = setInterval( function( a ) {\r\n-\t\t\t\t\ta.parseBlanks( a.getContent() );\r\n-\t\t\t\t}, 1000, this );\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tanswer() {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\torder: 1,\r\n-\t\t\t\t\t\tis_true: '',\r\n-\t\t\t\t\t\tquestion_answer_id: this.answers[ 0 ].question_answer_id,\r\n-\t\t\t\t\t\ttitle: this.answers[ 0 ].title,\r\n-\t\t\t\t\t\tvalue: '',\r\n-\t\t\t\t\t\tblanks: this.answers[ 0 ].blanks,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tupdateAnswer( e ) {\r\n-\t\t\t\t\tlet answer = JSON.parse( JSON.stringify( this.answer ) );\r\n-\t\t\t\t\tanswer.title = this.getShortcode();\r\n-\t\t\t\t\tanswer.blanks = this.getBlanksForDB();\r\n-\r\n-\t\t\t\t\t$store.dispatch( 'updateAnswerTitle', answer );\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateAnswerBlank( e, blank ) {\r\n-\t\t\t\t\tblank['comparison'] = e.target.value || '';\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateAnswerMatchCase( e, blank ) {\r\n-\t\t\t\t\tblank['match_case'] = e.target.checked ? true : false;\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetContent() {\r\n-\t\t\t\t\tlet content = this.answers[ 0 ].title,\r\n-\t\t\t\t\t\tshortcodes = content.match( \u002F\\[fib.*?\\]\u002Fg ),\r\n-\t\t\t\t\t\tuids = {};\r\n-\r\n-\t\t\t\t\tif ( shortcodes ) {\r\n-\t\t\t\t\t\tfor ( let i = 0; i \u003C shortcodes.length; i++ ) {\r\n-\t\t\t\t\t\t\tvar uid,\r\n-\t\t\t\t\t\t\t\tfill,\r\n-\t\t\t\t\t\t\t\treplaceText,\r\n-\t\t\t\t\t\t\t\tprops = shortcodes[ i ].match( \u002F([a-z_]+)=\"(.*?)\"\u002Fg ),\r\n-\t\t\t\t\t\t\t\tdata = [];\r\n-\r\n-\t\t\t\t\t\t\tfor ( const j in props ) {\r\n-\t\t\t\t\t\t\t\tconst prop = props[ j ].match( \u002F([a-z_]+)=\"(.*?)\"\u002F );\r\n-\r\n-\t\t\t\t\t\t\t\tif ( ! prop ) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tswitch ( prop[ 1 ] ) {\r\n-\t\t\t\t\t\t\t\tcase 'uid':\r\n-\t\t\t\t\t\t\t\tcase 'id':\r\n-\t\t\t\t\t\t\t\t\tuid = prop[ 2 ];\r\n-\t\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\t\tcase 'fill':\r\n-\t\t\t\t\t\t\t\t\tfill = prop[ 2 ];\r\n-\t\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t\t\tdata.push( 'data-' + prop[ 1 ] + '=\"' + prop[ 2 ] + '\"' );\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tuid = uid ? uid : LP.uniqueId();\r\n-\r\n-\t\t\t\t\t\t\tif ( uids[ uid ] ) {\r\n-\t\t\t\t\t\t\t\tuid = LP.uniqueId();\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\treplaceText = FIB.outerHTML( this.createBlank( fill, uid ).attr( 'data-index', i + 1 ) );\u002F\u002F '\u003Cspan class=\"fib-blank\" id=\"fib-blank-' + uid + '\" data-id=\"' + uid + '\" data-index=\"' + (i + 1) + '\">' + fill + '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\tuids[ uid ] = true;\r\n-\r\n-\t\t\t\t\t\t\tcontent = content.replace( shortcodes[ i ], replaceText );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn content;\r\n-\t\t\t\t},\r\n-\t\t\t\tactiveBlank( e ) {\r\n-\t\t\t\t\tthis.$activeBlank = $( e.target ).closest( '.fib-blank' );\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tfindBlank( id ) {\r\n-\t\t\t\t\tfor ( const i in this.blanks ) {\r\n-\t\t\t\t\t\tif ( this.blanks[ i ].id == id ) {\r\n-\t\t\t\t\t\t\treturn this.blanks[ i ];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t},\r\n-\t\t\t\tparseBlanks( content ) {\r\n-\t\t\t\t\tlet $container = this.$editor,\r\n-\t\t\t\t\t\t$inputs = $container.find( '.fib-blank' ),\r\n-\t\t\t\t\t\t$input,\r\n-\t\t\t\t\t\tdata,\r\n-\t\t\t\t\t\tblanks = [],\r\n-\t\t\t\t\t\tuids = [],\r\n-\t\t\t\t\t\ti = 0,\r\n-\t\t\t\t\t\tn = 0;\r\n-\r\n-\t\t\t\t\tfor ( i = 0; i \u003C $inputs.length; i++ ) {\r\n-\t\t\t\t\t\t$input = $inputs.eq( i ).attr( 'data-index', i + 1 );\r\n-\t\t\t\t\t\tdata = $input.data();\r\n-\r\n-\t\t\t\t\t\tif ( -1 !== $.inArray( data.id, uids ) ) {\r\n-\t\t\t\t\t\t\tdata.id = LP.uniqueId();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tconst oldBlank = this.findBlank( data.id ) || {};\r\n-\r\n-\t\t\t\t\t\tblanks.push( {\r\n-\t\t\t\t\t\t\tfill: $input.html().trim(),\r\n-\t\t\t\t\t\t\tid: data.id,\r\n-\t\t\t\t\t\t\tcomparison: data.comparison || oldBlank.comparison || '',\r\n-\t\t\t\t\t\t\tmatch_case: data.match_case || oldBlank.match_case || 0,\r\n-\t\t\t\t\t\t\tindex: i + 1,\r\n-\t\t\t\t\t\t\topen: !! oldBlank.open,\r\n-\t\t\t\t\t\t} );\r\n-\t\t\t\t\t\tuids.push( data.id );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.blanks = blanks;\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateBlanks( content ) {\r\n-\t\t\t\t\tthis.parseBlanks( content !== undefined ? content : this.$editor.html() );\r\n-\t\t\t\t\treturn this.getShortcode();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetShortcode() {\r\n-\t\t\t\t\tconst that = this,\r\n-\t\t\t\t\t\t$container = this.$editor.clone(),\r\n-\t\t\t\t\t\t$blanks = $container.find( '.fib-blank' );\r\n-\r\n-\t\t\t\t\t$blanks.each( function() {\r\n-\t\t\t\t\t\tlet $blank = $( this ),\r\n-\t\t\t\t\t\t\tid = $blank.attr( 'id' ),\r\n-\t\t\t\t\t\t\tuid = id.replace( 'fib-blank-', '' ),\r\n-\t\t\t\t\t\t\tblank = that.getBlankById( uid ),\r\n-\t\t\t\t\t\t\tcode = 'fib';\r\n-\r\n-\t\t\t\t\t\tif ( blank ) {\r\n-\t\t\t\t\t\t\tif ( ! blank.id ) {\r\n-\t\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tfor ( const i in blank ) {\r\n-\t\t\t\t\t\t\t\tif ( [ 'index' ].indexOf( i ) !== -1 ) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tif ( ! blank[ i ] ) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tcode += ' ' + i + '=\"' + blank[ i ] + '\"';\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t$blank.replaceWith( '[' + code + ']' );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tconsole.log( 'Not found: ' + uid );\r\n-\t\t\t\t\t\t\t$blank.replaceWith( '' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t\treturn $container.html();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetBlankById( id ) {\r\n-\t\t\t\t\tlet blank = false;\r\n-\r\n-\t\t\t\t\t$.each( this.blanks, function() {\r\n-\t\t\t\t\t\tif ( id == this.id ) {\r\n-\t\t\t\t\t\t\tblank = this;\r\n-\t\t\t\t\t\t\treturn true;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\treturn blank;\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateBlank( e ) {\r\n-\t\t\t\t\tconst $el = $( e.target ),\r\n-\t\t\t\t\t\tid = $el.attr( 'id' ),\r\n-\t\t\t\t\t\t$blank = this.$editor.find( '#' + id );\r\n-\t\t\t\t\t$blank.html( e.target.value );\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tremoveBlank( e, id ) {\r\n-\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\tthis.removeBlankById( id );\r\n-\t\t\t\t\tthis.updateAll();\r\n-\t\t\t\t},\r\n-\t\t\t\tremoveBlankById( id ) {\r\n-\t\t\t\t\tconst $blank = this.$editor.find( '.fib-blank#fib-blank-' + id );\r\n-\t\t\t\t\t$blank.replaceWith( $blank.html() );\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateAll() {\r\n-\t\t\t\t\tthis.answer.title = this.updateBlanks();\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tinsertBlank() {\r\n-\t\t\t\t\tif ( ! this.canInsertNewBlank ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tconst $content = $( this.$el ).find( '.content-editable' ),\r\n-\t\t\t\t\t\tcontent = $content.html(),\r\n-\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\r\n-\t\t\t\t\t\tselectionRange = FIB.getSelectionRange(),\r\n-\t\t\t\t\t\t$blank = this.createBlank( selectedText ),\r\n-\t\t\t\t\t\tnodeValue = selectionRange.anchorNode.nodeValue,\r\n-\t\t\t\t\t\tx = selectionRange.anchorOffset,\r\n-\t\t\t\t\t\ty = selectionRange.focusOffset;\r\n-\t\t\t\t\tstartRange = x \u003C y ? x : y;\r\n-\t\t\t\t\tendRange = startRange == x ? y : x;\r\n-\r\n-\t\t\t\t\tselectionRange.anchorNode.nodeValue = nodeValue.substr( 0, startRange );\r\n-\t\t\t\t\t$( $blank ).insertAfter( selectionRange.anchorNode );\r\n-\t\t\t\t\t$( FIB.createTextNode( nodeValue.substr( endRange ) ) ).insertAfter( $blank );\r\n-\r\n-\t\t\t\t\tconst $blanks = $content.find( '.fib-blank' );\r\n-\t\t\t\t\t$blanks.each( function( i, el ) {\r\n-\t\t\t\t\t\tconst $blank = $( this );\r\n-\t\t\t\t\t\tif ( $blank.parent().is( 'b' ) ) {\r\n-\t\t\t\t\t\t\tconst $p = $blank.parent();\r\n-\t\t\t\t\t\t\t$p.replaceWith( $p.html() );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$blank.attr( 'data-index', i + 1 );\r\n-\t\t\t\t\t} );\r\n-\r\n-\t\t\t\t\tthis.parseBlanks( $content.html() );\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tclearContent() {\r\n-\t\t\t\t\tthis.$editor.html( '' );\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t\tthis.canInsertNewBlank = false;\r\n-\t\t\t\t},\r\n-\t\t\t\tcreateBlank( content, id ) {\r\n-\t\t\t\t\tif ( ! id ) {\r\n-\t\t\t\t\t\tid = LP.uniqueId();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn $( '\u003Cb class=\"fib-blank\" id=\"fib-blank-' + id + '\" data-id=\"' + id + '\"> ' + content + '\u003C\u002Fb>' );\r\n-\t\t\t\t},\r\n-\t\t\t\tclearBlanks() {\r\n-\t\t\t\t\tif ( ! confirm( $store.getters.i18n.confirm_remove_blanks ) ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tfor ( const i in this.blanks ) {\r\n-\t\t\t\t\t\tthis.removeBlankById( this.blanks[ i ].id );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.updateAll();\r\n-\t\t\t\t},\r\n-\t\t\t\tcanInsertBlank() {\r\n-\t\t\t\t\tconst $content = $( this.$el ).find( '.content-editable' ),\r\n-\t\t\t\t\t\tcontent = $content.html(),\r\n-\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\r\n-\t\t\t\t\t\tselectionRange = FIB.getSelectionRange();\r\n-\t\t\t\t\tthis.canInsertNewBlank = selectedText.length && ! FIB.isContainHtml( selectionRange.anchorNode );\r\n-\t\t\t\t},\r\n-\t\t\t\tgetBlanksForDB() {\r\n-\t\t\t\t\tconst blanks = {};\r\n-\t\t\t\t\tfor ( let i = 0, n = this.blanks.length; i \u003C n; i++ ) {\r\n-\t\t\t\t\t\tconst id = this.blanks[ i ].id.replace( 'fib-blank-', '' );\r\n-\t\t\t\t\t\tblanks[ id ] = JSON.parse( JSON.stringify( this.blanks[ i ] ) );\r\n-\t\t\t\t\t\tblanks[ id ].id = id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn blanks;\r\n-\t\t\t\t},\r\n-\t\t\t\ttoggleOptions( e, id ) {\r\n-\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\tconst that = this;\r\n-\t\t\t\t\t$( e.target ).closest( '.fib-blank' ).find( '.blank-options ul' ).slideToggle( function() {\r\n-\t\t\t\t\t\tthat.setBlankProp( id, 'open', ! $( this ).is( ':hidden' ) );\r\n-\t\t\t\t\t} );\r\n-\t\t\t\t},\r\n-\t\t\t\tsetBlankProp( id, prop, value ) {\r\n-\t\t\t\t\tfor ( const i in this.blanks ) {\r\n-\t\t\t\t\t\tif ( this.blanks[ i ].id == id ) {\r\n-\t\t\t\t\t\t\tif ( $.isPlainObject( prop ) ) {\r\n-\t\t\t\t\t\t\t\tfor ( const p in prop ) {\r\n-\t\t\t\t\t\t\t\t\tthis.$set( this.blanks[ i ], p, prop[ p ] );\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis.$set( this.blanks[ i ], prop, value );\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\t\t} );\r\n-\t} );\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin question editor: fib question answer template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+$content_id = uniqid( 'fib-content-' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-fib-question-answer\">\n+\t\u003Cdiv id=\"lp-admin-question-editor\" class=\"lp-admin-fib-question-editor\">\n+\t\t\u003C?php learn_press_admin_view( 'question\u002Ffib-answer-editor' ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( document ).ready( function( $ ) {\n+\t\tconst $Vue = window.$Vue || Vue;\n+\t\tconst $store = window.LP_Question_Store;\n+\n+\t\tVue.component( 'lp-fib-question-answer', {\n+\t\t\ttemplate: '#tmpl-lp-fib-question-answer',\n+\t\t\tprops: [ 'type', 'answers', 'rawBlanks' ],\n+\n+\t\t\tdata() {\n+\t\t\t\treturn {\n+\t\t\t\t\tvalid: true,\n+\t\t\t\t\tcanInsertNewBlank: false,\n+\t\t\t\t\tblanks: [],\n+\t\t\t\t};\n+\t\t\t},\n+\t\t\tmounted() {\n+\t\t\t\tconst that = this,\n+\t\t\t\t\tcontent = this.getContent();\n+\t\t\t\tthis.blanks = this.answers[ 0 ].blanks;\n+\t\t\t\tthis.$editor = $( this.$el ).find( '.content-editable' );\n+\t\t\t\tthis.$editor.html( content );\n+\t\t\t\tthis.parseBlanks( content );\n+\n+\t\t\t\tthis.$editor[ 0 ].addEventListener( 'DOMCharacterDataModified', function( e ) {\n+\t\t\t\t\tconst $target = $( e.target ).parent(),\n+\t\t\t\t\t\tid = $target.data( 'id' );\n+\n+\t\t\t\t\tfor ( const i in that.blanks ) {\n+\t\t\t\t\t\tif ( that.blanks[ i ].id == id ) {\n+\t\t\t\t\t\t\tthat.blanks[ i ].fill = $target.html().trim();\n+\t\t\t\t\t\t\tthat.$activeBlank = $target;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}, false );\n+\n+\t\t\t\tthis.interval = setInterval( function( a ) {\n+\t\t\t\t\ta.parseBlanks( a.getContent() );\n+\t\t\t\t}, 1000, this );\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\tanswer() {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\torder: 1,\n+\t\t\t\t\t\tis_true: '',\n+\t\t\t\t\t\tquestion_answer_id: this.answers[ 0 ].question_answer_id,\n+\t\t\t\t\t\ttitle: this.answers[ 0 ].title,\n+\t\t\t\t\t\tvalue: '',\n+\t\t\t\t\t\tblanks: this.answers[ 0 ].blanks,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tupdateAnswer( e ) {\n+\t\t\t\t\tlet answer = JSON.parse( JSON.stringify( this.answer ) );\n+\t\t\t\t\tanswer.title = this.getShortcode();\n+\t\t\t\t\tanswer.blanks = this.getBlanksForDB();\n+\n+\t\t\t\t\t$store.dispatch( 'updateAnswerTitle', answer );\n+\t\t\t\t},\n+\t\t\t\tupdateAnswerBlank( e, blank ) {\n+\t\t\t\t\tblank['comparison'] = e.target.value || '';\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tupdateAnswerMatchCase( e, blank ) {\n+\t\t\t\t\tblank['match_case'] = e.target.checked ? true : false;\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tgetContent() {\n+\t\t\t\t\tlet content = this.answers[ 0 ].title,\n+\t\t\t\t\t\tshortcodes = content.match( \u002F\\[fib.*?\\]\u002Fg ),\n+\t\t\t\t\t\tuids = {};\n+\n+\t\t\t\t\tif ( shortcodes ) {\n+\t\t\t\t\t\tfor ( let i = 0; i \u003C shortcodes.length; i++ ) {\n+\t\t\t\t\t\t\tvar uid,\n+\t\t\t\t\t\t\t\tfill,\n+\t\t\t\t\t\t\t\treplaceText,\n+\t\t\t\t\t\t\t\tprops = shortcodes[ i ].match( \u002F([a-z_]+)=\"(.*?)\"\u002Fg ),\n+\t\t\t\t\t\t\t\tdata = [];\n+\n+\t\t\t\t\t\t\tfor ( const j in props ) {\n+\t\t\t\t\t\t\t\tconst prop = props[ j ].match( \u002F([a-z_]+)=\"(.*?)\"\u002F );\n+\n+\t\t\t\t\t\t\t\tif ( ! prop ) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tswitch ( prop[ 1 ] ) {\n+\t\t\t\t\t\t\t\tcase 'uid':\n+\t\t\t\t\t\t\t\tcase 'id':\n+\t\t\t\t\t\t\t\t\tuid = prop[ 2 ];\n+\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\tcase 'fill':\n+\t\t\t\t\t\t\t\t\tfill = prop[ 2 ];\n+\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t\t\tdata.push( 'data-' + prop[ 1 ] + '=\"' + prop[ 2 ] + '\"' );\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tuid = uid ? uid : LP.uniqueId();\n+\n+\t\t\t\t\t\t\tif ( uids[ uid ] ) {\n+\t\t\t\t\t\t\t\tuid = LP.uniqueId();\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\treplaceText = FIB.outerHTML( this.createBlank( fill, uid ).attr( 'data-index', i + 1 ) );\u002F\u002F '\u003Cspan class=\"fib-blank\" id=\"fib-blank-' + uid + '\" data-id=\"' + uid + '\" data-index=\"' + (i + 1) + '\">' + fill + '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\tuids[ uid ] = true;\n+\n+\t\t\t\t\t\t\tcontent = content.replace( shortcodes[ i ], replaceText );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\treturn content;\n+\t\t\t\t},\n+\t\t\t\tactiveBlank( e ) {\n+\t\t\t\t\tthis.$activeBlank = $( e.target ).closest( '.fib-blank' );\n+\t\t\t\t},\n+\n+\t\t\t\tfindBlank( id ) {\n+\t\t\t\t\tfor ( const i in this.blanks ) {\n+\t\t\t\t\t\tif ( this.blanks[ i ].id == id ) {\n+\t\t\t\t\t\t\treturn this.blanks[ i ];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn false;\n+\t\t\t\t},\n+\t\t\t\tparseBlanks( content ) {\n+\t\t\t\t\tlet $container = this.$editor,\n+\t\t\t\t\t\t$inputs = $container.find( '.fib-blank' ),\n+\t\t\t\t\t\t$input,\n+\t\t\t\t\t\tdata,\n+\t\t\t\t\t\tblanks = [],\n+\t\t\t\t\t\tuids = [],\n+\t\t\t\t\t\ti = 0,\n+\t\t\t\t\t\tn = 0;\n+\n+\t\t\t\t\tfor ( i = 0; i \u003C $inputs.length; i++ ) {\n+\t\t\t\t\t\t$input = $inputs.eq( i ).attr( 'data-index', i + 1 );\n+\t\t\t\t\t\tdata = $input.data();\n+\n+\t\t\t\t\t\tif ( -1 !== $.inArray( data.id, uids ) ) {\n+\t\t\t\t\t\t\tdata.id = LP.uniqueId();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tconst oldBlank = this.findBlank( data.id ) || {};\n+\n+\t\t\t\t\t\tblanks.push( {\n+\t\t\t\t\t\t\tfill: $input.html().trim(),\n+\t\t\t\t\t\t\tid: data.id,\n+\t\t\t\t\t\t\tcomparison: data.comparison || oldBlank.comparison || '',\n+\t\t\t\t\t\t\tmatch_case: data.match_case || oldBlank.match_case || 0,\n+\t\t\t\t\t\t\tindex: i + 1,\n+\t\t\t\t\t\t\topen: !! oldBlank.open,\n+\t\t\t\t\t\t} );\n+\t\t\t\t\t\tuids.push( data.id );\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.blanks = blanks;\n+\t\t\t\t},\n+\t\t\t\tupdateBlanks( content ) {\n+\t\t\t\t\tthis.parseBlanks( content !== undefined ? content : this.$editor.html() );\n+\t\t\t\t\treturn this.getShortcode();\n+\t\t\t\t},\n+\t\t\t\tgetShortcode() {\n+\t\t\t\t\tconst that = this,\n+\t\t\t\t\t\t$container = this.$editor.clone(),\n+\t\t\t\t\t\t$blanks = $container.find( '.fib-blank' );\n+\n+\t\t\t\t\t$blanks.each( function() {\n+\t\t\t\t\t\tlet $blank = $( this ),\n+\t\t\t\t\t\t\tid = $blank.attr( 'id' ),\n+\t\t\t\t\t\t\tuid = id.replace( 'fib-blank-', '' ),\n+\t\t\t\t\t\t\tblank = that.getBlankById( uid ),\n+\t\t\t\t\t\t\tcode = 'fib';\n+\n+\t\t\t\t\t\tif ( blank ) {\n+\t\t\t\t\t\t\tif ( ! blank.id ) {\n+\t\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tfor ( const i in blank ) {\n+\t\t\t\t\t\t\t\tif ( [ 'index' ].indexOf( i ) !== -1 ) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tif ( ! blank[ i ] ) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tcode += ' ' + i + '=\"' + blank[ i ] + '\"';\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t$blank.replaceWith( '[' + code + ']' );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tconsole.log( 'Not found: ' + uid );\n+\t\t\t\t\t\t\t$blank.replaceWith( '' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\t\t\t\t\treturn $container.html();\n+\t\t\t\t},\n+\t\t\t\tgetBlankById( id ) {\n+\t\t\t\t\tlet blank = false;\n+\n+\t\t\t\t\t$.each( this.blanks, function() {\n+\t\t\t\t\t\tif ( id == this.id ) {\n+\t\t\t\t\t\t\tblank = this;\n+\t\t\t\t\t\t\treturn true;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\treturn blank;\n+\t\t\t\t},\n+\t\t\t\tupdateBlank( e ) {\n+\t\t\t\t\tconst $el = $( e.target ),\n+\t\t\t\t\t\tid = $el.attr( 'id' ),\n+\t\t\t\t\t\t$blank = this.$editor.find( '#' + id );\n+\t\t\t\t\t$blank.html( e.target.value );\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tremoveBlank( e, id ) {\n+\t\t\t\t\te.preventDefault();\n+\t\t\t\t\tthis.removeBlankById( id );\n+\t\t\t\t\tthis.updateAll();\n+\t\t\t\t},\n+\t\t\t\tremoveBlankById( id ) {\n+\t\t\t\t\tconst $blank = this.$editor.find( '.fib-blank#fib-blank-' + id );\n+\t\t\t\t\t$blank.replaceWith( $blank.html() );\n+\t\t\t\t},\n+\t\t\t\tupdateAll() {\n+\t\t\t\t\tthis.answer.title = this.updateBlanks();\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tinsertBlank() {\n+\t\t\t\t\tif ( ! this.canInsertNewBlank ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tconst $content = $( this.$el ).find( '.content-editable' ),\n+\t\t\t\t\t\tcontent = $content.html(),\n+\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\n+\t\t\t\t\t\tselectionRange = FIB.getSelectionRange(),\n+\t\t\t\t\t\t$blank = this.createBlank( selectedText ),\n+\t\t\t\t\t\tnodeValue = selectionRange.anchorNode.nodeValue,\n+\t\t\t\t\t\tx = selectionRange.anchorOffset,\n+\t\t\t\t\t\ty = selectionRange.focusOffset;\n+\t\t\t\t\tstartRange = x \u003C y ? x : y;\n+\t\t\t\t\tendRange = startRange == x ? y : x;\n+\n+\t\t\t\t\tselectionRange.anchorNode.nodeValue = nodeValue.substr( 0, startRange );\n+\t\t\t\t\t$( $blank ).insertAfter( selectionRange.anchorNode );\n+\t\t\t\t\t$( FIB.createTextNode( nodeValue.substr( endRange ) ) ).insertAfter( $blank );\n+\n+\t\t\t\t\tconst $blanks = $content.find( '.fib-blank' );\n+\t\t\t\t\t$blanks.each( function( i, el ) {\n+\t\t\t\t\t\tconst $blank = $( this );\n+\t\t\t\t\t\tif ( $blank.parent().is( 'b' ) ) {\n+\t\t\t\t\t\t\tconst $p = $blank.parent();\n+\t\t\t\t\t\t\t$p.replaceWith( $p.html() );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$blank.attr( 'data-index', i + 1 );\n+\t\t\t\t\t} );\n+\n+\t\t\t\t\tthis.parseBlanks( $content.html() );\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tclearContent() {\n+\t\t\t\t\tthis.$editor.html( '' );\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t\tthis.canInsertNewBlank = false;\n+\t\t\t\t},\n+\t\t\t\tcreateBlank( content, id ) {\n+\t\t\t\t\tif ( ! id ) {\n+\t\t\t\t\t\tid = LP.uniqueId();\n+\t\t\t\t\t}\n+\t\t\t\t\treturn $( '\u003Cb class=\"fib-blank\" id=\"fib-blank-' + id + '\" data-id=\"' + id + '\"> ' + content + '\u003C\u002Fb>' );\n+\t\t\t\t},\n+\t\t\t\tclearBlanks() {\n+\t\t\t\t\tif ( ! confirm( $store.getters.i18n.confirm_remove_blanks ) ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tfor ( const i in this.blanks ) {\n+\t\t\t\t\t\tthis.removeBlankById( this.blanks[ i ].id );\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.updateAll();\n+\t\t\t\t},\n+\t\t\t\tcanInsertBlank() {\n+\t\t\t\t\tconst $content = $( this.$el ).find( '.content-editable' ),\n+\t\t\t\t\t\tcontent = $content.html(),\n+\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\n+\t\t\t\t\t\tselectionRange = FIB.getSelectionRange();\n+\t\t\t\t\tthis.canInsertNewBlank = selectedText.length && ! FIB.isContainHtml( selectionRange.anchorNode );\n+\t\t\t\t},\n+\t\t\t\tgetBlanksForDB() {\n+\t\t\t\t\tconst blanks = {};\n+\t\t\t\t\tfor ( let i = 0, n = this.blanks.length; i \u003C n; i++ ) {\n+\t\t\t\t\t\tconst id = this.blanks[ i ].id.replace( 'fib-blank-', '' );\n+\t\t\t\t\t\tblanks[ id ] = JSON.parse( JSON.stringify( this.blanks[ i ] ) );\n+\t\t\t\t\t\tblanks[ id ].id = id;\n+\t\t\t\t\t}\n+\t\t\t\t\treturn blanks;\n+\t\t\t\t},\n+\t\t\t\ttoggleOptions( e, id ) {\n+\t\t\t\t\te.preventDefault();\n+\t\t\t\t\tconst that = this;\n+\t\t\t\t\t$( e.target ).closest( '.fib-blank' ).find( '.blank-options ul' ).slideToggle( function() {\n+\t\t\t\t\t\tthat.setBlankProp( id, 'open', ! $( this ).is( ':hidden' ) );\n+\t\t\t\t\t} );\n+\t\t\t\t},\n+\t\t\t\tsetBlankProp( id, prop, value ) {\n+\t\t\t\t\tfor ( const i in this.blanks ) {\n+\t\t\t\t\t\tif ( this.blanks[ i ].id == id ) {\n+\t\t\t\t\t\t\tif ( $.isPlainObject( prop ) ) {\n+\t\t\t\t\t\t\t\tfor ( const p in prop ) {\n+\t\t\t\t\t\t\t\t\tthis.$set( this.blanks[ i ], p, prop[ p ] );\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis.$set( this.blanks[ i ], prop, value );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t},\n+\t\t} );\n+\t} );\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Foption.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Foption.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Foption.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquestion\u002Foption.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,112 +1,112 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin question editor: question answer template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-answer-option\">\r\n-\t\u003Ctr class=\"answer-option\" :class=\"[isNew() || isUpdating() ? 'new-option' : '']\" :data-answer-id=\"id\">\r\n-\t\t\u003Ctd class=\"sort lp-sortable-handle\">\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"answer-text\">\r\n-\t\t\t\u003Cform @submit.prevent=\"\">\r\n-\t\t\t\t\u003Cinput type=\"text\" v-model=\"answer.title\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\"\u002F>\r\n-\t\t\t\u003C\u002Fform>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"answer-correct lp-answer-check\">\r\n-\t\t\t\u003Cinput :type=\"radio ? 'radio' : 'checkbox'\" :checked=\"correct ? 'checked' : ''\" :value=\"answer.value\" :name=\"name\" @change=\"changeCorrect\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"actions lp-toolbar-buttons\">\r\n-\t\t\t\u003Cdiv v-if=\"deletable\" class=\"lp-toolbar-btn lp-btn-remove remove-answer\">\r\n-\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click=\"deleteAnswer\" title=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $store = window.LP_Question_Store;\r\n-\t\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\t\t$Vue.component('lp-question-answer-option', {\r\n-\t\t\ttemplate: '#tmpl-lp-question-answer-option',\r\n-\t\t\tprops: ['answer', 'index', 'type', 'radio', 'number'],\r\n-\t\t\tdata: function() {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tchanged: false,\r\n-\t\t\t\t\tupdating: false\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\t\u002F\u002F answer id\r\n-\t\t\t\tid: function() {\r\n-\t\t\t\t\treturn this.answer.question_answer_id;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F check correct answer\r\n-\t\t\t\tcorrect: function() {\r\n-\t\t\t\t\treturn this.answer.is_true === 'yes';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F input correct form name\r\n-\t\t\t\tname: function() {\r\n-\t\t\t\t\treturn 'answer_question[' + $store.getters['id'] + ']'\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F deletable answer\r\n-\t\t\t\tdeletable: function() {\r\n-\t\t\t\t\treturn !(this.number \u003C 3 || (this.correct && $store.getters['numberCorrect'] === 1) || this.type === 'true_or_false');\r\n-\t\t\t\t},\r\n-\t\t\t\tstatus: function() {\r\n-\t\t\t\t\treturn $store.getters['status'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\twatch: {\r\n-\t\t\t\tstatus: function(s) {\r\n-\t\t\t\t\tif (s !== 'loading') {\r\n-\t\t\t\t\t\tthis.updating = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn s;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmounted: function() {\r\n-\t\t\t\tif (this.isNew()) {\r\n-\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t\tthis.updateTitle();\r\n-\r\n-\t\t\t\t\tsetTimeout(() => {\r\n-\t\t\t\t\t\t$(this.$el).find('.answer-text input').focus();\r\n-\t\t\t\t\t}, 300)\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tchangeTitle: function() {\r\n-\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateTitle: function() {\r\n-\t\t\t\t\tif (this.changed) {\r\n-\t\t\t\t\t\tthis.updating = true;\r\n-\t\t\t\t\t\tthis.$emit('updateTitle', this.answer);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tchangeCorrect: function (e) {\r\n-\t\t\t\t\tthis.updating = true;\r\n-\r\n-\t\t\t\t\tthis.answer.is_true = (e.target.checked) ? 'yes' : '';\r\n-\t\t\t\t\tthis.$emit('changeCorrect', this.answer);\r\n-\t\t\t\t},\r\n-\t\t\t\tdeleteAnswer: function () {\r\n-\t\t\t\t\tthis.$emit('deleteAnswer', {\r\n-\t\t\t\t\t\tid: this.id,\r\n-\t\t\t\t\t\torder: this.answer.order\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tisNew: function () {\r\n-\t\t\t\t\treturn isNaN(this.answer.question_answer_id);\r\n-\t\t\t\t},\r\n-\t\t\t\tisUpdating: function () {\r\n-\t\t\t\t\treturn this.updating;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t})\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin question editor: question answer template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-question-answer-option\">\n+\t\u003Ctr class=\"answer-option\" :class=\"[isNew() || isUpdating() ? 'new-option' : '']\" :data-answer-id=\"id\">\n+\t\t\u003Ctd class=\"sort lp-sortable-handle\">\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"answer-text\">\n+\t\t\t\u003Cform @submit.prevent=\"\">\n+\t\t\t\t\u003Cinput type=\"text\" v-model=\"answer.title\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\"\u002F>\n+\t\t\t\u003C\u002Fform>\n+\t\t\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"answer-correct lp-answer-check\">\n+\t\t\t\u003Cinput :type=\"radio ? 'radio' : 'checkbox'\" :checked=\"correct ? 'checked' : ''\" :value=\"answer.value\" :name=\"name\" @change=\"changeCorrect\">\n+\t\t\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"actions lp-toolbar-buttons\">\n+\t\t\t\u003Cdiv v-if=\"deletable\" class=\"lp-toolbar-btn lp-btn-remove remove-answer\">\n+\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click=\"deleteAnswer\" title=\"\u003C?php esc_attr_e( 'Delete', 'learnpress' ); ?>\">\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $store = window.LP_Question_Store;\n+\t\twindow.$Vue = window.$Vue || Vue;\n+\n+\t\t$Vue.component('lp-question-answer-option', {\n+\t\t\ttemplate: '#tmpl-lp-question-answer-option',\n+\t\t\tprops: ['answer', 'index', 'type', 'radio', 'number'],\n+\t\t\tdata: function() {\n+\t\t\t\treturn {\n+\t\t\t\t\tchanged: false,\n+\t\t\t\t\tupdating: false\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\t\u002F\u002F answer id\n+\t\t\t\tid: function() {\n+\t\t\t\t\treturn this.answer.question_answer_id;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F check correct answer\n+\t\t\t\tcorrect: function() {\n+\t\t\t\t\treturn this.answer.is_true === 'yes';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F input correct form name\n+\t\t\t\tname: function() {\n+\t\t\t\t\treturn 'answer_question[' + $store.getters['id'] + ']'\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F deletable answer\n+\t\t\t\tdeletable: function() {\n+\t\t\t\t\treturn !(this.number \u003C 3 || (this.correct && $store.getters['numberCorrect'] === 1) || this.type === 'true_or_false');\n+\t\t\t\t},\n+\t\t\t\tstatus: function() {\n+\t\t\t\t\treturn $store.getters['status'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twatch: {\n+\t\t\t\tstatus: function(s) {\n+\t\t\t\t\tif (s !== 'loading') {\n+\t\t\t\t\t\tthis.updating = false;\n+\t\t\t\t\t}\n+\t\t\t\t\treturn s;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmounted: function() {\n+\t\t\t\tif (this.isNew()) {\n+\t\t\t\t\tthis.changed = true;\n+\t\t\t\t\tthis.updateTitle();\n+\n+\t\t\t\t\tsetTimeout(() => {\n+\t\t\t\t\t\t$(this.$el).find('.answer-text input').focus();\n+\t\t\t\t\t}, 300)\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tchangeTitle: function() {\n+\t\t\t\t\tthis.changed = true;\n+\t\t\t\t},\n+\t\t\t\tupdateTitle: function() {\n+\t\t\t\t\tif (this.changed) {\n+\t\t\t\t\t\tthis.updating = true;\n+\t\t\t\t\t\tthis.$emit('updateTitle', this.answer);\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tchangeCorrect: function (e) {\n+\t\t\t\t\tthis.updating = true;\n+\n+\t\t\t\t\tthis.answer.is_true = (e.target.checked) ? 'yes' : '';\n+\t\t\t\t\tthis.$emit('changeCorrect', this.answer);\n+\t\t\t\t},\n+\t\t\t\tdeleteAnswer: function () {\n+\t\t\t\t\tthis.$emit('deleteAnswer', {\n+\t\t\t\t\t\tid: this.id,\n+\t\t\t\t\t\torder: this.answer.order\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tisNew: function () {\n+\t\t\t\t\treturn isNaN(this.answer.question_answer_id);\n+\t\t\t\t},\n+\t\t\t\tisUpdating: function () {\n+\t\t\t\t\treturn this.updating;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t})\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fadded-items-preview.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fadded-items-preview.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fadded-items-preview.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fadded-items-preview.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template added question items preview.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-added-items-preview\">\r\n-\t\u003Cdiv id=\"lp-quiz-added-items-preview\" class=\"lp-added-items-preview\" :class=\"{show:show}\">\r\n-\t\t\u003Cul class=\"list-added-items\">\r\n-\t\t\t\u003Ctemplate v-for=\"(item, index) in addedItems\">\r\n-\t\t\t\t\u003Cli class=\"question-item removable\" :class=\"item.type\" @click=\"removeItem(item)\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" checked>\r\n-\t\t\t\t\t\u003Cspan class=\"title\">{{item.title}}\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-added-items-preview', {\r\n-\t\t\t\ttemplate: '#tmpl-lp-quiz-added-items-preview',\r\n-\t\t\t\tprops: {\r\n-\t\t\t\t\tshow: true\r\n-\t\t\t\t},\r\n-\t\t\t\tcomputed: {\r\n-\t\t\t\t\taddedItems: function () {\r\n-\t\t\t\t\t\treturn $store.getters['cqi\u002FaddedItems'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tremoveItem: function (item) {\r\n-\t\t\t\t\t\t$store.dispatch('cqi\u002FremoveItem', item);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t);\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template added question items preview.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-added-items-preview\">\n+\t\u003Cdiv id=\"lp-quiz-added-items-preview\" class=\"lp-added-items-preview\" :class=\"{show:show}\">\n+\t\t\u003Cul class=\"list-added-items\">\n+\t\t\t\u003Ctemplate v-for=\"(item, index) in addedItems\">\n+\t\t\t\t\u003Cli class=\"question-item removable\" :class=\"item.type\" @click=\"removeItem(item)\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" checked>\n+\t\t\t\t\t\u003Cspan class=\"title\">{{item.title}}\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C\u002Ftemplate>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-added-items-preview', {\n+\t\t\t\ttemplate: '#tmpl-lp-quiz-added-items-preview',\n+\t\t\t\tprops: {\n+\t\t\t\t\tshow: true\n+\t\t\t\t},\n+\t\t\t\tcomputed: {\n+\t\t\t\t\taddedItems: function () {\n+\t\t\t\t\t\treturn $store.getters['cqi\u002FaddedItems'];\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tremoveItem: function (item) {\n+\t\t\t\t\t\t$store.dispatch('cqi\u002FremoveItem', item);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t);\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,213 +1,213 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin Quiz Editor: Editor template.\r\n- *\r\n- * @since 4.0.0\r\n- * @author Nhamdv - Code is poetry\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fquestions' );\r\n-learn_press_admin_view( 'quiz\u002Fmodal-choose-items' );\r\n-learn_press_admin_view( 'quiz\u002Fquestion-fib-editor' );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"admin-editor-lp_quiz\" xxxx=\"5\">\r\n-\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-editor\">\r\n-\t\u003Cdiv id=\"admin-editor-lp_quiz\" class=\"learn-press-box-data lp-admin-editor\">\r\n-\t\t\u003Cdiv v-if=\"heartbeat\">\r\n-\t\t\t\u003Cdiv class=\"lp-box-data-head heading\">\r\n-\t\t\t\t\u003Ch3>\u003C?php echo esc_html__( 'Details', 'learnpress' ); ?>\u003Cspan class=\"status\">\u003C\u002Fspan>\u003C\u002Fh3>\r\n-\t\t\t\t\u003Cdiv class=\"section-item-counts\">\r\n-\t\t\t\t\t\u003Cspan>{{textCountQuestions()}}\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cspan :class=\"['collapse-list-questions dashicons ' , close ? 'dashicons-arrow-down' : 'dashicons-arrow-up']\" @click=\"toggle\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"lp-box-data-content\">\r\n-\t\t\t\t\u003Cdiv class=\"lp-list-questions\">\r\n-\t\t\t\t\t\u003Cdiv class=\"header\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"table-row\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"sort\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"order\">#\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"name\">\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"type\">\u003C?php esc_html_e( 'Type', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"actions\">\u003C?php esc_html_e( 'Actions', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\t\u003Cform @submit.prevent=\"\">\r\n-\t\t\t\t\t\t\u003Clp-quiz-questions>\u003C\u002Flp-quiz-questions>\r\n-\t\t\t\t\t\u003C\u002Fform>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"footer\" v-if=\"!disableUpdateList\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"table-row\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"sort lp-sortable-handle\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"order\">{{countQuestions() + 1}}\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"name add-new-question\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"title\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cform @submit.prevent=\"\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" v-model=\"new_question.title\" placeholder=\"\u003C?php esc_attr_e( 'Create a new question', 'learnpress' ); ?>\" @keyup.enter.prevent=\"addItem()\">\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fform>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"add-new\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button\" :disabled=\"!addableNew\" @click.prevent=\"addItem(new_question.type)\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add with type...', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\t\t\u003Cul class=\"question-types\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cli v-for=\"(type, key) in questionTypes\" :class=\"active(key)\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003Ca href=\"#\" :data-type=\"key\" @click.prevent=\"addItem(key)\">{{type}}\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"select-item\">\r\n-\t\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button\" @click.prevent=\"openModal\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Select items', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\t\u003Clp-quiz-choose-items @addItems=\"addItems\">\u003C\u002Flp-quiz-choose-items>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv v-else>\r\n-\t\t\t\u003Cdiv class=\"lp-place-holder\">\r\n-\t\t\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\r\n-\t\t\t\t\u003Cdiv class=\"notify-reload\">\u003C?php esc_html_e( 'Something went wrong! Please reload to continue editing quiz questions.', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery(function ($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-editor', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-editor',\r\n-\t\t\tdata: function () {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tnew_question: {\r\n-\t\t\t\t\t\t'title': '',\r\n-\t\t\t\t\t\t'type': ''\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcreated: function () {\r\n-\t\t\t\t\u002F*setInterval(function () {\r\n-\t\t\t\t\t$store.dispatch('heartbeat');\r\n-\t\t\t\t}, 60 * 1000);*\u002F\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\theartbeat: function () {\r\n-\t\t\t\t\treturn $store.getters['heartbeat'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F editor status\r\n-\t\t\t\tstatus: function () {\r\n-\t\t\t\t\treturn $store.getters.status;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F list questions close\r\n-\t\t\t\tclose: function () {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FisHiddenListQuestions'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F quiz id\r\n-\t\t\t\tid: function () {\r\n-\t\t\t\t\treturn $store.getters['id'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F addable new\r\n-\t\t\t\taddableNew: function () {\r\n-\t\t\t\t\treturn !!this.new_question.title;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F all question types\r\n-\t\t\t\tquestionTypes: function () {\r\n-\t\t\t\t\treturn $store.getters['questionTypes'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F trigger user memorize\r\n-\t\t\t\tnewQuestionType: function () {\r\n-\t\t\t\t\treturn $store.getters['defaultNewQuestionType'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F disable update list questions\r\n-\t\t\t\tdisableUpdateList: function () {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FdisableUpdateList'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\t\u002F\u002F Add disable class if no support Question type. @nhamdv\r\n-\t\t\t\tactive: function(type) {\r\n-\t\t\t\t\tvar classes = [''];\r\n-\r\n-\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\r\n-\r\n-\t\t\t\t\tif ( supportTypes.indexOf( type ) === -1 ) {\r\n-\t\t\t\t\t\tclasses.push('disabled')\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn classes;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F toggle all questions\r\n-\t\t\t\ttoggle: function () {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FtoggleAll');\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F add new question\r\n-\t\t\t\taddItem: function (type) {\r\n-\t\t\t\t\tif (this.new_question.title) {\r\n-\t\t\t\t\t\tif (!type) {\r\n-\t\t\t\t\t\t\ttype = this.newQuestionType;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tthis.new_question.id = LP.uniqueId()\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F new question\r\n-\t\t\t\t\t\tthis.new_question.type = type;\r\n-\t\t\t\t\t\t$store.dispatch('lqs\u002FnewQuestion', {\r\n-\t\t\t\t\t\t\tquiz: {\r\n-\t\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\r\n-\t\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\tquestion: this.new_question\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t\tthis.new_question.title = '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F open modal\r\n-\t\t\t\topenModal: function () {\r\n-\t\t\t\t\t$store.dispatch('cqi\u002Fopen', parseInt(this.quizId));\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F add choose items in modal to quiz\r\n-\t\t\t\taddItems: function (type) {\r\n-\t\t\t\t\t\u002F\u002F add items\r\n-\t\t\t\t\t$store.dispatch('cqi\u002FaddQuestionsToQuiz', {\r\n-\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\r\n-\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tcountQuestions: function () {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FlistQuestions'].length;\r\n-\t\t\t\t},\r\n-\t\t\t\ttextCountQuestions: function () {\r\n-\t\t\t\t\tvar count = this.countQuestions(),\r\n-\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].question_labels;\r\n-\t\t\t\t\treturn count + ' ' + (count > 1 ? labels.plural : labels.singular);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t})\r\n-\r\n-\t})\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin Quiz Editor: Editor template.\n+ *\n+ * @since 4.0.0\n+ * @author Nhamdv - Code is poetry\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fquestions' );\n+learn_press_admin_view( 'quiz\u002Fmodal-choose-items' );\n+learn_press_admin_view( 'quiz\u002Fquestion-fib-editor' );\n+?>\n+\n+\u003Cdiv id=\"admin-editor-lp_quiz\" xxxx=\"5\">\n+\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\u003Cdiv class=\"line-heading\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-sm\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-xs\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"line-df\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lg\">\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"line-lgx\">\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-editor\">\n+\t\u003Cdiv id=\"admin-editor-lp_quiz\" class=\"learn-press-box-data lp-admin-editor\">\n+\t\t\u003Cdiv v-if=\"heartbeat\">\n+\t\t\t\u003Cdiv class=\"lp-box-data-head heading\">\n+\t\t\t\t\u003Ch3>\u003C?php echo esc_html__( 'Details', 'learnpress' ); ?>\u003Cspan class=\"status\">\u003C\u002Fspan>\u003C\u002Fh3>\n+\t\t\t\t\u003Cdiv class=\"section-item-counts\">\n+\t\t\t\t\t\u003Cspan>{{textCountQuestions()}}\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cspan :class=\"['collapse-list-questions dashicons ' , close ? 'dashicons-arrow-down' : 'dashicons-arrow-up']\" @click=\"toggle\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"lp-box-data-content\">\n+\t\t\t\t\u003Cdiv class=\"lp-list-questions\">\n+\t\t\t\t\t\u003Cdiv class=\"header\">\n+\t\t\t\t\t\t\u003Cdiv class=\"table-row\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"sort\">\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"order\">#\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"name\">\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"type\">\u003C?php esc_html_e( 'Type', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"actions\">\u003C?php esc_html_e( 'Actions', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\t\u003Cform @submit.prevent=\"\">\n+\t\t\t\t\t\t\u003Clp-quiz-questions>\u003C\u002Flp-quiz-questions>\n+\t\t\t\t\t\u003C\u002Fform>\n+\n+\t\t\t\t\t\u003Cdiv class=\"footer\" v-if=\"!disableUpdateList\">\n+\t\t\t\t\t\t\u003Cdiv class=\"table-row\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"sort lp-sortable-handle\">\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"order\">{{countQuestions() + 1}}\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"name add-new-question\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"title\">\n+\t\t\t\t\t\t\t\t\t\u003Cform @submit.prevent=\"\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cinput type=\"text\" v-model=\"new_question.title\" placeholder=\"\u003C?php esc_attr_e( 'Create a new question', 'learnpress' ); ?>\" @keyup.enter.prevent=\"addItem()\">\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fform>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"add-new\">\n+\t\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button\" :disabled=\"!addableNew\" @click.prevent=\"addItem(new_question.type)\">\n+\t\t\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add with type...', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\t\t\u003Cul class=\"question-types\">\n+\t\t\t\t\t\t\t\t\t\t\u003Cli v-for=\"(type, key) in questionTypes\" :class=\"active(key)\">\n+\t\t\t\t\t\t\t\t\t\t\t\u003Ca href=\"#\" :data-type=\"key\" @click.prevent=\"addItem(key)\">{{type}}\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"select-item\">\n+\t\t\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button\" @click.prevent=\"openModal\">\n+\t\t\t\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Select items', 'learnpress' ); ?>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\t\u003Clp-quiz-choose-items @addItems=\"addItems\">\u003C\u002Flp-quiz-choose-items>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv v-else>\n+\t\t\t\u003Cdiv class=\"lp-place-holder\">\n+\t\t\t\t\u003C?php learn_press_admin_view( 'placeholder-animation' ); ?>\n+\t\t\t\t\u003Cdiv class=\"notify-reload\">\u003C?php esc_html_e( 'Something went wrong! Please reload to continue editing quiz questions.', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery(function ($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-editor', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-editor',\n+\t\t\tdata: function () {\n+\t\t\t\treturn {\n+\t\t\t\t\tnew_question: {\n+\t\t\t\t\t\t'title': '',\n+\t\t\t\t\t\t'type': ''\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcreated: function () {\n+\t\t\t\t\u002F*setInterval(function () {\n+\t\t\t\t\t$store.dispatch('heartbeat');\n+\t\t\t\t}, 60 * 1000);*\u002F\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\theartbeat: function () {\n+\t\t\t\t\treturn $store.getters['heartbeat'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F editor status\n+\t\t\t\tstatus: function () {\n+\t\t\t\t\treturn $store.getters.status;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F list questions close\n+\t\t\t\tclose: function () {\n+\t\t\t\t\treturn $store.getters['lqs\u002FisHiddenListQuestions'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F quiz id\n+\t\t\t\tid: function () {\n+\t\t\t\t\treturn $store.getters['id'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F addable new\n+\t\t\t\taddableNew: function () {\n+\t\t\t\t\treturn !!this.new_question.title;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F all question types\n+\t\t\t\tquestionTypes: function () {\n+\t\t\t\t\treturn $store.getters['questionTypes'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F trigger user memorize\n+\t\t\t\tnewQuestionType: function () {\n+\t\t\t\t\treturn $store.getters['defaultNewQuestionType'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F disable update list questions\n+\t\t\t\tdisableUpdateList: function () {\n+\t\t\t\t\treturn $store.getters['lqs\u002FdisableUpdateList'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\t\u002F\u002F Add disable class if no support Question type. @nhamdv\n+\t\t\t\tactive: function(type) {\n+\t\t\t\t\tvar classes = [''];\n+\n+\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\n+\n+\t\t\t\t\tif ( supportTypes.indexOf( type ) === -1 ) {\n+\t\t\t\t\t\tclasses.push('disabled')\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn classes;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F toggle all questions\n+\t\t\t\ttoggle: function () {\n+\t\t\t\t\t$store.dispatch('lqs\u002FtoggleAll');\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F add new question\n+\t\t\t\taddItem: function (type) {\n+\t\t\t\t\tif (this.new_question.title) {\n+\t\t\t\t\t\tif (!type) {\n+\t\t\t\t\t\t\ttype = this.newQuestionType;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tthis.new_question.id = LP.uniqueId()\n+\n+\t\t\t\t\t\t\u002F\u002F new question\n+\t\t\t\t\t\tthis.new_question.type = type;\n+\t\t\t\t\t\t$store.dispatch('lqs\u002FnewQuestion', {\n+\t\t\t\t\t\t\tquiz: {\n+\t\t\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\n+\t\t\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\tquestion: this.new_question\n+\t\t\t\t\t\t});\n+\t\t\t\t\t\tthis.new_question.title = '';\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F open modal\n+\t\t\t\topenModal: function () {\n+\t\t\t\t\t$store.dispatch('cqi\u002Fopen', parseInt(this.quizId));\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F add choose items in modal to quiz\n+\t\t\t\taddItems: function (type) {\n+\t\t\t\t\t\u002F\u002F add items\n+\t\t\t\t\t$store.dispatch('cqi\u002FaddQuestionsToQuiz', {\n+\t\t\t\t\t\ttitle: $('input[name=post_title]').val(),\n+\t\t\t\t\t\tcontent: $('textarea[name=content]').val()\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tcountQuestions: function () {\n+\t\t\t\t\treturn $store.getters['lqs\u002FlistQuestions'].length;\n+\t\t\t\t},\n+\t\t\t\ttextCountQuestions: function () {\n+\t\t\t\t\tvar count = this.countQuestions(),\n+\t\t\t\t\t\tlabels = $store.getters['i18n\u002Fall'].question_labels;\n+\t\t\t\t\treturn count + ' ' + (count > 1 ? labels.plural : labels.singular);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t})\n+\n+\t})\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,231 +1,231 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template choose quiz question items.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fadded-items-preview' );\r\n-learn_press_admin_view( 'quiz\u002Fpagination' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-choose-item\">\r\n-\t\u003Cli class=\"question-item\" :class=\"[item.type, item.added ? 'added': 'addable']\" @click=\"add\">\r\n-\t\t\u003Cinput type=\"checkbox\" :checked=\"item.added === true\">\r\n-\t\t\u003Cspan class=\"title\">{{item.title}} \u003Cstrong>(#{{item.id}})\u003C\u002Fstrong>\u003C\u002Fspan>\r\n-\t\u003C\u002Fli>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-choose-item', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-choose-item',\r\n-\t\t\tprops: ['item', 'added'],\r\n-\t\t\twatch: {\r\n-\t\t\t\tadded: function () {\r\n-\t\t\t\t\tthis.$forceUpdate();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tadd: function() {\r\n-\t\t\t\t\tif ( this.item.added ) {\r\n-\t\t\t\t\t\treturn this.remove();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tthis.$emit('add', this.item);\r\n-\t\t\t\t},\r\n-\t\t\t\tremove: function() {\r\n-\t\t\t\t\tthis.$emit('remove', this.item);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-choose-items\">\r\n-\t\u003Cdiv id=\"lp-modal-choose-items\" :class=\"{show:show, loading: loading}\">\r\n-\t\t\u003Cdiv class=\"lp-choose-items\" :class=\"{'show-preview': showPreview}\">\r\n-\t\t\t\u003Cdiv class=\"header\">\r\n-\t\t\t\t\u003Cdiv class=\"preview-title\">\u003Cspan>\u003C?php esc_html_e( 'Selected items', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t({{addedItems.length}})\u003C\u002Fspan>\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cul class=\"tabs\">\r\n-\t\t\t\t\t\u003Cli class=\"tab active\">\u003Ca href=\"#\">\u003C?php esc_html_e( 'Questions', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fli>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003Ca class=\"close\" @click=\"close\">\r\n-\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\" title=\"\u003C?php esc_attr_e( 'Close', 'learnpress' ); ?>\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv class=\"main\">\r\n-\t\t\t\t\u003Cform class=\"search\" @submit.prevent=\"\">\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"modal-search-input\" placeholder=\"\u003C?php esc_attr_e( 'Type here to search for the question', 'learnpress' ); ?>\" @input=\"onChangeQuery\" v-model=\"query\">\r\n-\t\t\t\t\u003C\u002Fform>\r\n-\r\n-\t\t\t\t\u003Cul class=\"list-items\">\r\n-\t\t\t\t\t\u003Ctemplate v-if=\"!items.length\">\r\n-\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'No item found.', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\t\t\t\u003Ctemplate v-for=\"item in items\">\r\n-\t\t\t\t\t\t\u003Clp-quiz-choose-item :added=\"item.added\" :item=\"item\" @add=\"addItem\" @remove=\"removeItem\">\u003C\u002Flp-quiz-choose-item>\r\n-\t\t\t\t\t\u003C\u002Ftemplate>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\u003Clp-quiz-pagination :total=\"totalPage\" @update=\"changePage\">\u003C\u002Flp-quiz-pagination>\r\n-\t\t\t\t\u003Clp-quiz-added-items-preview :show=\"showPreview\">\u003C\u002Flp-quiz-added-items-preview>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cdiv class=\"footer\">\r\n-\t\t\t\t\u003Cdiv class=\"cart\">\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary checkout\" @click=\"checkout\" :disabled=\"!addedItems.length || adding\">\r\n-\t\t\t\t\t\t\u003Cspan v-if=\"!adding\">\u003C?php esc_html_e( 'Add', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cspan v-if=\"adding\">\u003C?php esc_html_e( 'Adding', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary edit-selected\" @click.prevent=\"showPreview = !showPreview\" :disabled=\"adding || (!addedItems.length && !showPreview)\">\r\n-\t\t\t\t\t\t{{editCartButton}}\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript>\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-choose-items', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-choose-items',\r\n-\t\t\tdata: function () {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tquery: '',\r\n-\t\t\t\t\tpage: 1,\r\n-\t\t\t\t\tdelayTimeOut: null,\r\n-\t\t\t\t\tshowPreview: false,\r\n-\t\t\t\t\tadding: false\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcreated: function () {\r\n-\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t$store.subscribe(function (mutation) {\r\n-\t\t\t\t\tif (!mutation || mutation.type !== 'cqi\u002FTOGGLE') {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif (vm.show) {\r\n-\t\t\t\t\t\tvm.init();\r\n-\r\n-\t\t\t\t\t\t$('body').addClass('lp-quiz-modal-choose-items-open');\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$('body').removeClass('lp-quiz-modal-choose-item-open');\r\n-\t\t\t\t\t}\r\n-\t\t\t\t})\r\n-\t\t\t},\r\n-\t\t\tmounted: function () {\r\n-\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tstatus: function () {\r\n-\t\t\t\t\treturn $store.getters['cqi\u002Fstatus'];\r\n-\t\t\t\t},\r\n-\t\t\t\tloading: function () {\r\n-\t\t\t\t\treturn this.status === 'loading';\r\n-\t\t\t\t},\r\n-\t\t\t\teditCartButton: function () {\r\n-\t\t\t\t\tif (this.showPreview) {\r\n-\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].back;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn $store.getters['i18n\u002Fall'].selected_items + ' (' + this.addedItems.length + ')';\r\n-\t\t\t\t},\r\n-\t\t\t\taddedItems: function () {\r\n-\t\t\t\t\treturn $store.getters['cqi\u002FaddedItems'];\r\n-\t\t\t\t},\r\n-\t\t\t\tpagination: function () {\r\n-\t\t\t\t\treturn $store.getters['cqi\u002Fpagination'];\r\n-\t\t\t\t},\r\n-\t\t\t\ttotalPage: function () {\r\n-\t\t\t\t\tif (this.pagination) {\r\n-\t\t\t\t\t\treturn parseInt(this.pagination.total) || 1;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\titems: function () {\r\n-\t\t\t\t\treturn $store.getters['cqi\u002Fitems'];\r\n-\t\t\t\t},\r\n-\t\t\t\tshow: function () {\r\n-\t\t\t\t\tvar isShow = $store.getters['cqi\u002FisOpen'];\r\n-\r\n-\t\t\t\t\tisShow && this.focusInput();\r\n-\r\n-\t\t\t\t\treturn isShow;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F check new quiz\r\n-\t\t\t\tnew_quiz: function () {\r\n-\t\t\t\t\treturn $store.getters['autoDraft'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tinit: function () {\r\n-\t\t\t\t\tthis.query = '';\r\n-\t\t\t\t\tthis.page = 1;\r\n-\t\t\t\t\tthis.showPreview = false;\r\n-\t\t\t\t\tthis.adding = false;\r\n-\t\t\t\t\tthis.makeSearch();\r\n-\t\t\t\t},\r\n-\t\t\t\tfocusInput: function () {\r\n-\t\t\t\t\tvar $input = $(this.$el).find('.main .search input[type=\"text\"]').focus();\r\n-\t\t\t\t\tsetTimeout(function () {\r\n-\t\t\t\t\t\t$input.focus();\r\n-\t\t\t\t\t}, 300)\r\n-\t\t\t\t},\r\n-\t\t\t\tcheckout: function () {\r\n-\t\t\t\t\tthis.adding = true;\r\n-\t\t\t\t\tthis.$emit('addItems', this.page);\r\n-\t\t\t\t},\r\n-\t\t\t\tchangePage: function (page) {\r\n-\t\t\t\t\tif (page === this.page) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.page = page;\r\n-\t\t\t\t\tthis.makeSearch();\r\n-\t\t\t\t},\r\n-\t\t\t\taddItem: function(item) {\r\n-\t\t\t\t\t$store.dispatch('cqi\u002FaddItem', item);\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tremoveItem: function(item) {\r\n-\t\t\t\t\t$store.dispatch('cqi\u002FremoveItem', item);\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tclose: function() {\r\n-\t\t\t\t\t$store.dispatch('cqi\u002Ftoggle');\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tonChangeQuery: function() {\r\n-\t\t\t\t\tvar vm = this;\r\n-\r\n-\t\t\t\t\tif ( this.delayTimeOut ) {\r\n-\t\t\t\t\t\tclearTimeout( this.delayTimeOut );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tthis.delayTimeOut = setTimeout( function() {\r\n-\t\t\t\t\t\tvm.page = 1;\r\n-\t\t\t\t\t\tvm.makeSearch();\r\n-\t\t\t\t\t}, 500 );\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tmakeSearch: function() {\r\n-\t\t\t\t\t$store.dispatch('cqi\u002FsearchItems', {\r\n-\t\t\t\t\t\tquery: this.query,\r\n-\t\t\t\t\t\tpage: this.page\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template choose quiz question items.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fadded-items-preview' );\n+learn_press_admin_view( 'quiz\u002Fpagination' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-choose-item\">\n+\t\u003Cli class=\"question-item\" :class=\"[item.type, item.added ? 'added': 'addable']\" @click=\"add\">\n+\t\t\u003Cinput type=\"checkbox\" :checked=\"item.added === true\">\n+\t\t\u003Cspan class=\"title\">{{item.title}} \u003Cstrong>(#{{item.id}})\u003C\u002Fstrong>\u003C\u002Fspan>\n+\t\u003C\u002Fli>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-choose-item', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-choose-item',\n+\t\t\tprops: ['item', 'added'],\n+\t\t\twatch: {\n+\t\t\t\tadded: function () {\n+\t\t\t\t\tthis.$forceUpdate();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tadd: function() {\n+\t\t\t\t\tif ( this.item.added ) {\n+\t\t\t\t\t\treturn this.remove();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tthis.$emit('add', this.item);\n+\t\t\t\t},\n+\t\t\t\tremove: function() {\n+\t\t\t\t\tthis.$emit('remove', this.item);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-choose-items\">\n+\t\u003Cdiv id=\"lp-modal-choose-items\" :class=\"{show:show, loading: loading}\">\n+\t\t\u003Cdiv class=\"lp-choose-items\" :class=\"{'show-preview': showPreview}\">\n+\t\t\t\u003Cdiv class=\"header\">\n+\t\t\t\t\u003Cdiv class=\"preview-title\">\u003Cspan>\u003C?php esc_html_e( 'Selected items', 'learnpress' ); ?>\n+\t\t\t\t\t\t({{addedItems.length}})\u003C\u002Fspan>\u003C\u002Fdiv>\n+\t\t\t\t\u003Cul class=\"tabs\">\n+\t\t\t\t\t\u003Cli class=\"tab active\">\u003Ca href=\"#\">\u003C?php esc_html_e( 'Questions', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fli>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003Ca class=\"close\" @click=\"close\">\n+\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\" title=\"\u003C?php esc_attr_e( 'Close', 'learnpress' ); ?>\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv class=\"main\">\n+\t\t\t\t\u003Cform class=\"search\" @submit.prevent=\"\">\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"modal-search-input\" placeholder=\"\u003C?php esc_attr_e( 'Type here to search for the question', 'learnpress' ); ?>\" @input=\"onChangeQuery\" v-model=\"query\">\n+\t\t\t\t\u003C\u002Fform>\n+\n+\t\t\t\t\u003Cul class=\"list-items\">\n+\t\t\t\t\t\u003Ctemplate v-if=\"!items.length\">\n+\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'No item found.', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Ftemplate>\n+\t\t\t\t\t\u003Ctemplate v-for=\"item in items\">\n+\t\t\t\t\t\t\u003Clp-quiz-choose-item :added=\"item.added\" :item=\"item\" @add=\"addItem\" @remove=\"removeItem\">\u003C\u002Flp-quiz-choose-item>\n+\t\t\t\t\t\u003C\u002Ftemplate>\n+\t\t\t\t\u003C\u002Ful>\n+\n+\t\t\t\t\u003Clp-quiz-pagination :total=\"totalPage\" @update=\"changePage\">\u003C\u002Flp-quiz-pagination>\n+\t\t\t\t\u003Clp-quiz-added-items-preview :show=\"showPreview\">\u003C\u002Flp-quiz-added-items-preview>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cdiv class=\"footer\">\n+\t\t\t\t\u003Cdiv class=\"cart\">\n+\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary checkout\" @click=\"checkout\" :disabled=\"!addedItems.length || adding\">\n+\t\t\t\t\t\t\u003Cspan v-if=\"!adding\">\u003C?php esc_html_e( 'Add', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cspan v-if=\"adding\">\u003C?php esc_html_e( 'Adding', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\n+\t\t\t\t\t\u003Cbutton type=\"button\" class=\"button button-secondary edit-selected\" @click.prevent=\"showPreview = !showPreview\" :disabled=\"adding || (!addedItems.length && !showPreview)\">\n+\t\t\t\t\t\t{{editCartButton}}\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript>\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-choose-items', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-choose-items',\n+\t\t\tdata: function () {\n+\t\t\t\treturn {\n+\t\t\t\t\tquery: '',\n+\t\t\t\t\tpage: 1,\n+\t\t\t\t\tdelayTimeOut: null,\n+\t\t\t\t\tshowPreview: false,\n+\t\t\t\t\tadding: false\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcreated: function () {\n+\t\t\t\tvar vm = this;\n+\n+\t\t\t\t$store.subscribe(function (mutation) {\n+\t\t\t\t\tif (!mutation || mutation.type !== 'cqi\u002FTOGGLE') {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif (vm.show) {\n+\t\t\t\t\t\tvm.init();\n+\n+\t\t\t\t\t\t$('body').addClass('lp-quiz-modal-choose-items-open');\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$('body').removeClass('lp-quiz-modal-choose-item-open');\n+\t\t\t\t\t}\n+\t\t\t\t})\n+\t\t\t},\n+\t\t\tmounted: function () {\n+\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\tstatus: function () {\n+\t\t\t\t\treturn $store.getters['cqi\u002Fstatus'];\n+\t\t\t\t},\n+\t\t\t\tloading: function () {\n+\t\t\t\t\treturn this.status === 'loading';\n+\t\t\t\t},\n+\t\t\t\teditCartButton: function () {\n+\t\t\t\t\tif (this.showPreview) {\n+\t\t\t\t\t\treturn $store.getters['i18n\u002Fall'].back;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn $store.getters['i18n\u002Fall'].selected_items + ' (' + this.addedItems.length + ')';\n+\t\t\t\t},\n+\t\t\t\taddedItems: function () {\n+\t\t\t\t\treturn $store.getters['cqi\u002FaddedItems'];\n+\t\t\t\t},\n+\t\t\t\tpagination: function () {\n+\t\t\t\t\treturn $store.getters['cqi\u002Fpagination'];\n+\t\t\t\t},\n+\t\t\t\ttotalPage: function () {\n+\t\t\t\t\tif (this.pagination) {\n+\t\t\t\t\t\treturn parseInt(this.pagination.total) || 1;\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\titems: function () {\n+\t\t\t\t\treturn $store.getters['cqi\u002Fitems'];\n+\t\t\t\t},\n+\t\t\t\tshow: function () {\n+\t\t\t\t\tvar isShow = $store.getters['cqi\u002FisOpen'];\n+\n+\t\t\t\t\tisShow && this.focusInput();\n+\n+\t\t\t\t\treturn isShow;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F check new quiz\n+\t\t\t\tnew_quiz: function () {\n+\t\t\t\t\treturn $store.getters['autoDraft'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tinit: function () {\n+\t\t\t\t\tthis.query = '';\n+\t\t\t\t\tthis.page = 1;\n+\t\t\t\t\tthis.showPreview = false;\n+\t\t\t\t\tthis.adding = false;\n+\t\t\t\t\tthis.makeSearch();\n+\t\t\t\t},\n+\t\t\t\tfocusInput: function () {\n+\t\t\t\t\tvar $input = $(this.$el).find('.main .search input[type=\"text\"]').focus();\n+\t\t\t\t\tsetTimeout(function () {\n+\t\t\t\t\t\t$input.focus();\n+\t\t\t\t\t}, 300)\n+\t\t\t\t},\n+\t\t\t\tcheckout: function () {\n+\t\t\t\t\tthis.adding = true;\n+\t\t\t\t\tthis.$emit('addItems', this.page);\n+\t\t\t\t},\n+\t\t\t\tchangePage: function (page) {\n+\t\t\t\t\tif (page === this.page) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.page = page;\n+\t\t\t\t\tthis.makeSearch();\n+\t\t\t\t},\n+\t\t\t\taddItem: function(item) {\n+\t\t\t\t\t$store.dispatch('cqi\u002FaddItem', item);\n+\t\t\t\t},\n+\n+\t\t\t\tremoveItem: function(item) {\n+\t\t\t\t\t$store.dispatch('cqi\u002FremoveItem', item);\n+\t\t\t\t},\n+\n+\t\t\t\tclose: function() {\n+\t\t\t\t\t$store.dispatch('cqi\u002Ftoggle');\n+\t\t\t\t},\n+\n+\t\t\t\tonChangeQuery: function() {\n+\t\t\t\t\tvar vm = this;\n+\n+\t\t\t\t\tif ( this.delayTimeOut ) {\n+\t\t\t\t\t\tclearTimeout( this.delayTimeOut );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tthis.delayTimeOut = setTimeout( function() {\n+\t\t\t\t\t\tvm.page = 1;\n+\t\t\t\t\t\tvm.makeSearch();\n+\t\t\t\t\t}, 500 );\n+\t\t\t\t},\n+\n+\t\t\t\tmakeSearch: function() {\n+\t\t\t\t\t$store.dispatch('cqi\u002FsearchItems', {\n+\t\t\t\t\t\tquery: this.query,\n+\t\t\t\t\t\tpage: this.page\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fpagination.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fpagination.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fpagination.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fpagination.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template choose quiz pagination.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-pagination\">\r\n-\t\u003Cdiv id=\"lp-quiz-pagination\" class=\"pagination\" v-if=\"totalPage > 1\">\r\n-\t\t\u003Cform prevent.submit=\"\">\r\n-\t\t\t\u003Cbutton class=\"button first\" :disabled=\"page == 1\" v-if=\"total > 3 && page > 1 && page != 2\"\r\n-\t\t\t\t\t@click.prevent=\"previousFirstPage\">«\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button previous\" :disabled=\"page == 1\"\r\n-\t\t\t\t\t@click.prevent=\"previousPage\">\u003C?php echo esc_html_x( 'Previous', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button next\" :disabled=\"page == total\"\r\n-\t\t\t\t\t@click.prevent=\"nextPage\">\u003C?php echo esc_html_x( 'Next', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton class=\"button last\" :disabled=\"page == total\"\r\n-\t\t\t\t\tv-if=\"total > 3 && page \u003C total && page != (total - 1)\"\r\n-\t\t\t\t\t@click.prevent=\"nextLastPage\">»\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\u003Cspan class=\"index\">{{page}} \u002F {{total}}\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery(function ($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-pagination', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-pagination',\r\n-\t\t\tprops: ['total'],\r\n-\t\t\tdata: function () {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tpage: 1\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\ttotalPage: function () {\r\n-\t\t\t\t\treturn this.total;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tupdate: function () {\r\n-\t\t\t\t\tthis.$emit('update', this.page);\r\n-\t\t\t\t},\r\n-\t\t\t\tnextPage: function () {\r\n-\t\t\t\t\tif (this.page \u003C this.total) {\r\n-\t\t\t\t\t\tthis.page++;\r\n-\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tnextLastPage: function () {\r\n-\t\t\t\t\tif (this.page \u003C this.total) {\r\n-\t\t\t\t\t\tthis.page = this.total;\r\n-\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tpreviousPage: function () {\r\n-\t\t\t\t\tif (this.page > 1) {\r\n-\t\t\t\t\t\tthis.page--;\r\n-\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tpreviousFirstPage: function () {\r\n-\t\t\t\t\tif (this.page > 1) {\r\n-\t\t\t\t\t\tthis.page = 1;\r\n-\t\t\t\t\t\tthis.update();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\r\n-\t})\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template choose quiz pagination.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-pagination\">\n+\t\u003Cdiv id=\"lp-quiz-pagination\" class=\"pagination\" v-if=\"totalPage > 1\">\n+\t\t\u003Cform prevent.submit=\"\">\n+\t\t\t\u003Cbutton class=\"button first\" :disabled=\"page == 1\" v-if=\"total > 3 && page > 1 && page != 2\"\n+\t\t\t\t\t@click.prevent=\"previousFirstPage\">«\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button previous\" :disabled=\"page == 1\"\n+\t\t\t\t\t@click.prevent=\"previousPage\">\u003C?php echo esc_html_x( 'Previous', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button next\" :disabled=\"page == total\"\n+\t\t\t\t\t@click.prevent=\"nextPage\">\u003C?php echo esc_html_x( 'Next', 'page-navigation', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton class=\"button last\" :disabled=\"page == total\"\n+\t\t\t\t\tv-if=\"total > 3 && page \u003C total && page != (total - 1)\"\n+\t\t\t\t\t@click.prevent=\"nextLastPage\">»\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\t\u003Cspan class=\"index\">{{page}} \u002F {{total}}\u003C\u002Fspan>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery(function ($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-pagination', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-pagination',\n+\t\t\tprops: ['total'],\n+\t\t\tdata: function () {\n+\t\t\t\treturn {\n+\t\t\t\t\tpage: 1\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\ttotalPage: function () {\n+\t\t\t\t\treturn this.total;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tupdate: function () {\n+\t\t\t\t\tthis.$emit('update', this.page);\n+\t\t\t\t},\n+\t\t\t\tnextPage: function () {\n+\t\t\t\t\tif (this.page \u003C this.total) {\n+\t\t\t\t\t\tthis.page++;\n+\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tnextLastPage: function () {\n+\t\t\t\t\tif (this.page \u003C this.total) {\n+\t\t\t\t\t\tthis.page = this.total;\n+\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tpreviousPage: function () {\n+\t\t\t\t\tif (this.page > 1) {\n+\t\t\t\t\t\tthis.page--;\n+\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tpreviousFirstPage: function () {\n+\t\t\t\t\tif (this.page > 1) {\n+\t\t\t\t\t\tthis.page = 1;\n+\t\t\t\t\t\tthis.update();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\n+\t})\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,172 +1,172 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin Quiz Editor: Question actions.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-actions\">\r\n-\t\u003Cdiv class=\"question-actions table-row\" :class=\"status\">\r\n-\t\t\u003Cdiv class=\"sort lp-sortable-handle\">\r\n-\t\t\t\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"order\">{{index +1}}\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"name\" @dblclick=\"toggle\">\r\n-\t\t\t\u003Cinput type=\"text\" class=\"question-title\" v-model=\"question.title\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\" @keyup=\"keyUp\">\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"type\">\r\n-\t\t\t\u003Ca>{{question.type.label}}\u003C\u002Fa>\r\n-\t\t\t\u003Cul>\r\n-\t\t\t\t\u003Cli v-for=\"(type, key) in questionTypes\" :class=\"active(key)\">\r\n-\t\t\t\t\t\u003Ca href=\"\" :data-type=\"key\" @click.prevent=\"changeType(key)\">{{type}}\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"actions\">\r\n-\t\t\t\u003Cdiv class=\"lp-box-data-actions lp-toolbar-buttons\">\r\n-\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-title-attr-tip\" v-if=\"!disableUpdateList\" data-content-tip=\"\u003C?php esc_attr_e( 'Duplicate', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Ca href=\"\" class=\"lp-btn-icon dashicons dashicons-admin-page\" @click.prevent=\"clone\">\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Edit an item', 'learnpress' ); ?>\">\r\n-\t\t\t\t\t\u003Ca :href=\"url\" target=\"_blank\" class=\"lp-btn-icon dashicons dashicons-edit\">\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-btn-remove lp-toolbar-btn-dropdown\" v-if=\"!disableUpdateList\">\r\n-\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click.prevent=\"remove\">\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca @click.prevent=\"remove\" class=\"remove\">\u003C?php esc_html_e( 'Removed from the quiz', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca @click.prevent=\"deletePermanently\" class=\"delete\">\u003C?php esc_html_e( 'Move to trash', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cspan :class=\"['lp-toolbar-btn lp-btn-toggle', question.open ?'open' : 'close']\" @click=\"toggle\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-actions', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-actions',\r\n-\t\t\tprops: ['question', 'index'],\r\n-\t\t\tdata: function() {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\ttitle: this.question.title,\r\n-\t\t\t\t\tchanged: false\r\n-\t\t\t\t};\r\n-\t\t\t},\r\n-\t\t\tmounted: function() {\r\n-\t\t\t\tthis.$nextTick(function() {\r\n-\t\t\t\t\tvar $ = jQuery;\r\n-\r\n-\t\t\t\t\t$(this.$el).find('.lp-title-attr-tip').LP('QuickTip', {\r\n-\t\t\t\t\t\tcloseInterval: 0,\r\n-\t\t\t\t\t\tarrowOffset: 'el',\r\n-\t\t\t\t\t\ttipClass: 'preview-item-tip'\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t$(document).on('mousedown', '.section-item .drag', function(e) {\r\n-\t\t\t\t\t\t$('html, body').addClass('moving');\r\n-\t\t\t\t\t}).on('mouseup', function (e) {\r\n-\t\t\t\t\t\t$('html, body').removeClass('moving');\r\n-\t\t\t\t\t})\r\n-\t\t\t\t})\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\t\u002F\u002F question status\r\n-\t\t\t\tstatus: function() {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FstatusUpdateQuestionItem'][this.question.id] || '';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F url edit question\r\n-\t\t\t\turl: function() {\r\n-\t\t\t\t\treturn 'post.php?post=' + this.question.id + '&action=edit';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F list question types\r\n-\t\t\t\tquestionTypes: function() {\r\n-\t\t\t\t\treturn $store.getters['questionTypes'];\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F disable update list questions\r\n-\t\t\t\tdisableUpdateList: function() {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FdisableUpdateList'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\t\u002F\u002F check question type active\r\n-\t\t\t\tactive: function(type) {\r\n-\t\t\t\t\tvar classes = [''];\r\n-\r\n-\t\t\t\t\tif (this.question.type.key === type) {\r\n-\t\t\t\t\t\tclasses.push('active');\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\r\n-\t\t\t\t\tif (supportTypes.indexOf(type) === -1 || supportTypes.indexOf(this.question.type.key) === -1) {\r\n-\t\t\t\t\t\tclasses.push('disabled')\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn classes;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F onchange question title\r\n-\t\t\t\tchangeTitle: function() {\r\n-\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F update question title\r\n-\t\t\t\tupdateTitle: function() {\r\n-\t\t\t\t\tif (this.changed) {\r\n-\t\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionTitle', this.question);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.changed = false;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F change question type\r\n-\t\t\t\tchangeType: function(type) {\r\n-\t\t\t\t\tif (this.question.type.key !== type) {\r\n-\t\t\t\t\t\t$store.dispatch('lqs\u002FchangeQuestionType', {\r\n-\t\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\t\ttype: type\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F clone question\r\n-\t\t\t\tclone: function() {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FcloneQuestion', this.question);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F remove question from quiz\r\n-\t\t\t\tremove: function () {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FremoveQuestion', this.question);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F delete permanently question\r\n-\t\t\t\tdeletePermanently: function() {\r\n-\t\t\t\t\tif (!confirm($store.getters['i18n\u002Fall'].confirm_trash_question.replace('{{QUESTION_NAME}}', this.question.title))) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FdeleteQuestion', this.question);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F toggle question\r\n-\t\t\t\ttoggle: function() {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FtoggleQuestion', this.question);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F navigation questions\r\n-\t\t\t\tkeyUp: function(e) {\r\n-\t\t\t\t\tvar keyCode = e.keyCode;\r\n-\t\t\t\t\t\u002F\u002F escape update question title\r\n-\t\t\t\t\tif (keyCode === 27) {\r\n-\t\t\t\t\t\tthis.question.title = this.title;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.$emit('nav', {key: e.keyCode, order: this.index});\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\tgetQuestionsSupportAnswerOptions: function() {\r\n-\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\r\n-\t\t\t\t\treturn supportTypes.indexOf(this.question.type.key) !== -1 ? lodash.pick(this.questionTypes, supportTypes) : false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin Quiz Editor: Question actions.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-actions\">\n+\t\u003Cdiv class=\"question-actions table-row\" :class=\"status\">\n+\t\t\u003Cdiv class=\"sort lp-sortable-handle\">\n+\t\t\t\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"order\">{{index +1}}\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"name\" @dblclick=\"toggle\">\n+\t\t\t\u003Cinput type=\"text\" class=\"question-title\" v-model=\"question.title\" @change=\"changeTitle\" @blur=\"updateTitle\" @keyup.enter=\"updateTitle\" @keyup=\"keyUp\">\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"type\">\n+\t\t\t\u003Ca>{{question.type.label}}\u003C\u002Fa>\n+\t\t\t\u003Cul>\n+\t\t\t\t\u003Cli v-for=\"(type, key) in questionTypes\" :class=\"active(key)\">\n+\t\t\t\t\t\u003Ca href=\"\" :data-type=\"key\" @click.prevent=\"changeType(key)\">{{type}}\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"actions\">\n+\t\t\t\u003Cdiv class=\"lp-box-data-actions lp-toolbar-buttons\">\n+\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-title-attr-tip\" v-if=\"!disableUpdateList\" data-content-tip=\"\u003C?php esc_attr_e( 'Duplicate', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Ca href=\"\" class=\"lp-btn-icon dashicons dashicons-admin-page\" @click.prevent=\"clone\">\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-title-attr-tip\" data-content-tip=\"\u003C?php esc_attr_e( 'Edit an item', 'learnpress' ); ?>\">\n+\t\t\t\t\t\u003Ca :href=\"url\" target=\"_blank\" class=\"lp-btn-icon dashicons dashicons-edit\">\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-btn-remove lp-toolbar-btn-dropdown\" v-if=\"!disableUpdateList\">\n+\t\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click.prevent=\"remove\">\u003C\u002Fa>\n+\t\t\t\t\t\u003Cul>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca @click.prevent=\"remove\" class=\"remove\">\u003C?php esc_html_e( 'Removed from the quiz', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca @click.prevent=\"deletePermanently\" class=\"delete\">\u003C?php esc_html_e( 'Move to trash', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003Cspan :class=\"['lp-toolbar-btn lp-btn-toggle', question.open ?'open' : 'close']\" @click=\"toggle\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-actions', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-actions',\n+\t\t\tprops: ['question', 'index'],\n+\t\t\tdata: function() {\n+\t\t\t\treturn {\n+\t\t\t\t\ttitle: this.question.title,\n+\t\t\t\t\tchanged: false\n+\t\t\t\t};\n+\t\t\t},\n+\t\t\tmounted: function() {\n+\t\t\t\tthis.$nextTick(function() {\n+\t\t\t\t\tvar $ = jQuery;\n+\n+\t\t\t\t\t$(this.$el).find('.lp-title-attr-tip').LP('QuickTip', {\n+\t\t\t\t\t\tcloseInterval: 0,\n+\t\t\t\t\t\tarrowOffset: 'el',\n+\t\t\t\t\t\ttipClass: 'preview-item-tip'\n+\t\t\t\t\t});\n+\n+\t\t\t\t\t$(document).on('mousedown', '.section-item .drag', function(e) {\n+\t\t\t\t\t\t$('html, body').addClass('moving');\n+\t\t\t\t\t}).on('mouseup', function (e) {\n+\t\t\t\t\t\t$('html, body').removeClass('moving');\n+\t\t\t\t\t})\n+\t\t\t\t})\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\t\u002F\u002F question status\n+\t\t\t\tstatus: function() {\n+\t\t\t\t\treturn $store.getters['lqs\u002FstatusUpdateQuestionItem'][this.question.id] || '';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F url edit question\n+\t\t\t\turl: function() {\n+\t\t\t\t\treturn 'post.php?post=' + this.question.id + '&action=edit';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F list question types\n+\t\t\t\tquestionTypes: function() {\n+\t\t\t\t\treturn $store.getters['questionTypes'];\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F disable update list questions\n+\t\t\t\tdisableUpdateList: function() {\n+\t\t\t\t\treturn $store.getters['lqs\u002FdisableUpdateList'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\t\u002F\u002F check question type active\n+\t\t\t\tactive: function(type) {\n+\t\t\t\t\tvar classes = [''];\n+\n+\t\t\t\t\tif (this.question.type.key === type) {\n+\t\t\t\t\t\tclasses.push('active');\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\n+\t\t\t\t\tif (supportTypes.indexOf(type) === -1 || supportTypes.indexOf(this.question.type.key) === -1) {\n+\t\t\t\t\t\tclasses.push('disabled')\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn classes;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F onchange question title\n+\t\t\t\tchangeTitle: function() {\n+\t\t\t\t\tthis.changed = true;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F update question title\n+\t\t\t\tupdateTitle: function() {\n+\t\t\t\t\tif (this.changed) {\n+\t\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionTitle', this.question);\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.changed = false;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F change question type\n+\t\t\t\tchangeType: function(type) {\n+\t\t\t\t\tif (this.question.type.key !== type) {\n+\t\t\t\t\t\t$store.dispatch('lqs\u002FchangeQuestionType', {\n+\t\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\t\ttype: type\n+\t\t\t\t\t\t});\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F clone question\n+\t\t\t\tclone: function() {\n+\t\t\t\t\t$store.dispatch('lqs\u002FcloneQuestion', this.question);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F remove question from quiz\n+\t\t\t\tremove: function () {\n+\t\t\t\t\t$store.dispatch('lqs\u002FremoveQuestion', this.question);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F delete permanently question\n+\t\t\t\tdeletePermanently: function() {\n+\t\t\t\t\tif (!confirm($store.getters['i18n\u002Fall'].confirm_trash_question.replace('{{QUESTION_NAME}}', this.question.title))) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\t\t\t\t\t$store.dispatch('lqs\u002FdeleteQuestion', this.question);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F toggle question\n+\t\t\t\ttoggle: function() {\n+\t\t\t\t\t$store.dispatch('lqs\u002FtoggleQuestion', this.question);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F navigation questions\n+\t\t\t\tkeyUp: function(e) {\n+\t\t\t\t\tvar keyCode = e.keyCode;\n+\t\t\t\t\t\u002F\u002F escape update question title\n+\t\t\t\t\tif (keyCode === 27) {\n+\t\t\t\t\t\tthis.question.title = this.title;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.$emit('nav', {key: e.keyCode, order: this.index});\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\tgetQuestionsSupportAnswerOptions: function() {\n+\t\t\t\t\tvar supportTypes = $store.getters['lqs\u002FsupportAnswerOptions'];\n+\t\t\t\t\treturn supportTypes.indexOf(this.question.type.key) !== -1 ? lodash.pick(this.questionTypes, supportTypes) : false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer-option.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer-option.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer-option.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer-option.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,128 +1,128 @@\n-\u003C?php\r\n-\u002F**\r\n- * Question answer item template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-answer-option\">\r\n-\t\u003Ctr class=\"answer-option\" :class=\"[isNew() || isUpdating() ? 'empty-option' : '']\" :data-answer-id=\"answer.question_answer_id\" :data-order-answer=\"index\">\r\n-\t\t\u003Ctd class=\"sort lp-sortable-handle\">\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"answer-text\">\r\n-\t\t\t\u003Cinput type=\"text\" v-model=\"answer.title\" @change=\"changeTitle\" @keyup.enter=\"updateTitle\" @blur=\"updateTitle\" @keyup=\"keyUp\"\u002F>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"answer-correct lp-answer-check\">\r\n-\t\t\t\u003Cinput :type=\"radio ? 'radio' : 'checkbox'\" :checked=\"correct\" :value=\"answer.value\" :name=\"name\" @change=\"changeCorrect\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"actions lp-toolbar-buttons\">\r\n-\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-btn-remove\" v-if=\"deletable\">\r\n-\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click=\"deleteAnswer\">\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-answer-option', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-answer-option',\r\n-\t\t\tprops: ['question', 'answer', 'index'],\r\n-\t\t\tdata: function() {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\ttitle: this.answer.title,\r\n-\t\t\t\t\tchanged: false,\r\n-\t\t\t\t\tupdating: false\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\twatch: {\r\n-\t\t\t\tstatus: function (newStatus) {\r\n-\t\t\t\t\tif (newStatus !== 'updating') {\r\n-\t\t\t\t\t\tthis.updating = false;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn newStatus;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\t\u002F\u002F correct answer\r\n-\t\t\t\tcorrect: function () {\r\n-\t\t\t\t\treturn this.answer.is_true === 'yes';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F radio\r\n-\t\t\t\tradio: function () {\r\n-\t\t\t\t\tvar type = this.question.type.key;\r\n-\r\n-\t\t\t\t\treturn type === 'true_or_false' || type === 'single_choice';\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F correct answer input name\r\n-\t\t\t\tname: function () {\r\n-\t\t\t\t\treturn 'answer_question[' + this.question.id + ']'\r\n-\t\t\t\t},\r\n-\t\t\t\tnumberCorrect: function () {\r\n-\t\t\t\t\tvar correct = 0;\r\n-\t\t\t\t\tthis.question.answers.forEach(function (answer) {\r\n-\t\t\t\t\t\tif (answer.is_true === 'yes') {\r\n-\t\t\t\t\t\t\tcorrect += 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t\treturn correct;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F deletable answer option\r\n-\t\t\t\tdeletable: function () {\r\n-\t\t\t\t\treturn !((this.answer.is_true === 'yes' && this.numberCorrect === 1) || (this.question.type.key === 'true_or_false') || this.question.answers.length \u003C 3);\r\n-\t\t\t\t},\r\n-\t\t\t\tstatus: function () {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FstatusUpdateQuestionItem'][this.question.id] || '';\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tisNew: function () {\r\n-\t\t\t\t\treturn isNaN(this.answer.question_answer_id)\r\n-\t\t\t\t},\r\n-\t\t\t\tchangeCorrect: function (e) {\r\n-\t\t\t\t\tthis.updating = true;\r\n-\r\n-\t\t\t\t\tthis.answer.is_true = (e.target.checked) ? 'yes' : '';\r\n-\t\t\t\t\tthis.$emit('changeCorrect', this.answer);\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F detect change answer title\r\n-\t\t\t\tchangeTitle: function () {\r\n-\t\t\t\t\tthis.changed = true;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F update answer option title\r\n-\t\t\t\tupdateTitle: function () {\r\n-\t\t\t\t\tif (this.changed) {\r\n-\t\t\t\t\t\tthis.updating = true;\r\n-\t\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswerTitle', {\r\n-\t\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\t\tanswer: this.answer\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t}\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F deletable answer\r\n-\t\t\t\tdeleteAnswer: function () {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FdeleteQuestionAnswer', {\r\n-\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\tanswer_id: this.answer.question_answer_id\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\tisUpdating: function () {\r\n-\t\t\t\t\treturn this.updating;\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F navigation answer option items\r\n-\t\t\t\tkeyUp: function (event) {\r\n-\t\t\t\t\tvar keyCode = event.keyCode;\r\n-\t\t\t\t\t\u002F\u002F escape update answer option items text\r\n-\t\t\t\t\tif (keyCode === 27) {\r\n-\t\t\t\t\t\tthis.answer.title = this.title;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthis.$emit('nav', {key: event.keyCode, order: this.index});\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Question answer item template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-answer-option\">\n+\t\u003Ctr class=\"answer-option\" :class=\"[isNew() || isUpdating() ? 'empty-option' : '']\" :data-answer-id=\"answer.question_answer_id\" :data-order-answer=\"index\">\n+\t\t\u003Ctd class=\"sort lp-sortable-handle\">\u003C?php learn_press_admin_view( 'svg-icon' ); ?>\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"answer-text\">\n+\t\t\t\u003Cinput type=\"text\" v-model=\"answer.title\" @change=\"changeTitle\" @keyup.enter=\"updateTitle\" @blur=\"updateTitle\" @keyup=\"keyUp\"\u002F>\n+\t\t\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"answer-correct lp-answer-check\">\n+\t\t\t\u003Cinput :type=\"radio ? 'radio' : 'checkbox'\" :checked=\"correct\" :value=\"answer.value\" :name=\"name\" @change=\"changeCorrect\">\n+\t\t\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"actions lp-toolbar-buttons\">\n+\t\t\t\u003Cdiv class=\"lp-toolbar-btn lp-btn-remove\" v-if=\"deletable\">\n+\t\t\t\t\u003Ca class=\"lp-btn-icon dashicons dashicons-trash\" @click=\"deleteAnswer\">\u003C\u002Fa>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-answer-option', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-answer-option',\n+\t\t\tprops: ['question', 'answer', 'index'],\n+\t\t\tdata: function() {\n+\t\t\t\treturn {\n+\t\t\t\t\ttitle: this.answer.title,\n+\t\t\t\t\tchanged: false,\n+\t\t\t\t\tupdating: false\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\twatch: {\n+\t\t\t\tstatus: function (newStatus) {\n+\t\t\t\t\tif (newStatus !== 'updating') {\n+\t\t\t\t\t\tthis.updating = false;\n+\t\t\t\t\t}\n+\t\t\t\t\treturn newStatus;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\t\u002F\u002F correct answer\n+\t\t\t\tcorrect: function () {\n+\t\t\t\t\treturn this.answer.is_true === 'yes';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F radio\n+\t\t\t\tradio: function () {\n+\t\t\t\t\tvar type = this.question.type.key;\n+\n+\t\t\t\t\treturn type === 'true_or_false' || type === 'single_choice';\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F correct answer input name\n+\t\t\t\tname: function () {\n+\t\t\t\t\treturn 'answer_question[' + this.question.id + ']'\n+\t\t\t\t},\n+\t\t\t\tnumberCorrect: function () {\n+\t\t\t\t\tvar correct = 0;\n+\t\t\t\t\tthis.question.answers.forEach(function (answer) {\n+\t\t\t\t\t\tif (answer.is_true === 'yes') {\n+\t\t\t\t\t\t\tcorrect += 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t\treturn correct;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F deletable answer option\n+\t\t\t\tdeletable: function () {\n+\t\t\t\t\treturn !((this.answer.is_true === 'yes' && this.numberCorrect === 1) || (this.question.type.key === 'true_or_false') || this.question.answers.length \u003C 3);\n+\t\t\t\t},\n+\t\t\t\tstatus: function () {\n+\t\t\t\t\treturn $store.getters['lqs\u002FstatusUpdateQuestionItem'][this.question.id] || '';\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tisNew: function () {\n+\t\t\t\t\treturn isNaN(this.answer.question_answer_id)\n+\t\t\t\t},\n+\t\t\t\tchangeCorrect: function (e) {\n+\t\t\t\t\tthis.updating = true;\n+\n+\t\t\t\t\tthis.answer.is_true = (e.target.checked) ? 'yes' : '';\n+\t\t\t\t\tthis.$emit('changeCorrect', this.answer);\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F detect change answer title\n+\t\t\t\tchangeTitle: function () {\n+\t\t\t\t\tthis.changed = true;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F update answer option title\n+\t\t\t\tupdateTitle: function () {\n+\t\t\t\t\tif (this.changed) {\n+\t\t\t\t\t\tthis.updating = true;\n+\t\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswerTitle', {\n+\t\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\t\tanswer: this.answer\n+\t\t\t\t\t\t});\n+\t\t\t\t\t}\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F deletable answer\n+\t\t\t\tdeleteAnswer: function () {\n+\t\t\t\t\t$store.dispatch('lqs\u002FdeleteQuestionAnswer', {\n+\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\tanswer_id: this.answer.question_answer_id\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\tisUpdating: function () {\n+\t\t\t\t\treturn this.updating;\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F navigation answer option items\n+\t\t\t\tkeyUp: function (event) {\n+\t\t\t\t\tvar keyCode = event.keyCode;\n+\t\t\t\t\t\u002F\u002F escape update answer option items text\n+\t\t\t\t\tif (keyCode === 27) {\n+\t\t\t\t\t\tthis.answer.title = this.title;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthis.$emit('nav', {key: event.keyCode, order: this.index});\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-answer.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,126 +1,126 @@\n-\u003C?php\r\n-\u002F**\r\n- * Question answers template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fquestion-answer-option' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-answers\">\r\n-\t\u003Cdiv class=\"quiz-question-data\">\r\n-\t\t\u003Cdiv class=\"lp-list-questions\">\r\n-\t\t\t\u003Ctable class=\"lp-list-options\">\r\n-\t\t\t\t\u003Cthead>\r\n-\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\u003Cth class=\"sort\">\u003C\u002Fth>\r\n-\t\t\t\t\t\t\u003Cth class=\"answer-text\">\u003C?php esc_html_e( 'Answers', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\u003Cth class=\"answer-correct\">\u003C?php esc_html_e( 'Correction', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\t\u003Cth class=\"actions\">\u003C\u002Fth>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\t\u003Ctbody>\r\n-\t\t\t\t\t\u003Clp-quiz-question-answer-option v-for=\"(answer, index) in question.answers\" :question=\"question\" :answer=\"answer\" :index=\"index\" :key=\"index\" @changeCorrect=\"changeCorrect\" @nav=\"navItem\">\u003C\u002Flp-quiz-question-answer-option>\r\n-\t\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\u003C\u002Ftable>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cp class=\"question-button-actions\" v-if=\"addableAnswer\">\r\n-\t\t\t\u003Cbutton class=\"button add-question-option-button\" type=\"button\" @click=\"newAnswer\">\u003C?php esc_html_e( 'Add option', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-answers', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-answers',\r\n-\t\t\tprops: ['question'],\r\n-\t\t\tcomputed: {\r\n-\t\t\t\taddableAnswer: function() {\r\n-\t\t\t\t\treturn !(String(this.question.type.key) === 'true_or_false');\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmounted: function() {\r\n-\t\t\t\tvar _self = this;\r\n-\t\t\t\tvar $el = $(_self.$el).find('.lp-list-options tbody');\r\n-\r\n-\t\t\t\t$el.sortable({\r\n-\t\t\t\t\thandle: '.sort',\r\n-\t\t\t\t\taxis: 'y',\r\n-\t\t\t\t\thelper: function (e, ui) {\r\n-\t\t\t\t\t\tvar $tr = $('\u003Ctr \u002F>'),\r\n-\t\t\t\t\t\t\t$row = $(e.target).closest('tr');\r\n-\t\t\t\t\t\t$row.children().each(function () {\r\n-\t\t\t\t\t\t\tvar $td = $(this).clone().width($(this).width())\r\n-\t\t\t\t\t\t\t$tr.append($td);\r\n-\t\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t\treturn $tr;\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdate: function () {\r\n-\t\t\t\t\t\t_self.sort();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t});\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tsort: function() {\r\n-\r\n-\t\t\t\t\tvar _items = $('.question-item[data-item-id=\"' + this.question.id + '\"] .quiz-question-data .lp-list-questions>.lp-list-options tbody tr');\r\n-\t\t\t\t\tvar _order = [];\r\n-\t\t\t\t\t_items.each(function (index, item) {\r\n-\t\t\t\t\t\t$(item).find('.order').text((index + 1) + '.');\r\n-\t\t\t\t\t\t_order.push($(item).data('answer-id'));\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswersOrder', {\r\n-\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\torder: _order\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F change correct answer\r\n-\t\t\t\tchangeCorrect: function(correct) {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionCorrectAnswer', {\r\n-\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\tcorrect: correct\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F new answer option\r\n-\t\t\t\tnewAnswer: function () {\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FnewQuestionAnswer', {\r\n-\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\tsuccess: function (answer) {\r\n-\t\t\t\t\t\t\t$(this.$el).find('tr[data-answer-id=\"' + answer.question_answer_id + '\"] .answer-text input').focus();\r\n-\t\t\t\t\t\t}, context: this\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F navigation course items\r\n-\t\t\t\tnavItem: function (payload) {\r\n-\r\n-\t\t\t\t\tvar keyCode = payload.key,\r\n-\t\t\t\t\t\torder = payload.order;\r\n-\r\n-\t\t\t\t\tif (keyCode === 38 && order > 0) {\r\n-\t\t\t\t\t\tthis.nav(order - 1);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif (keyCode === 40 || keyCode === 13) {\r\n-\t\t\t\t\t\tif (order === this.question.answers.length) {\r\n-\t\t\t\t\t\t\t\u002F\u002F code\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthis.nav(order + 1);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F focus item\r\n-\t\t\t\tnav: function (position) {\r\n-\t\t\t\t\tvar element = 'div[data-item-id=' + this.question.id + '] tr[data-order-answer=' + position + ']';\r\n-\t\t\t\t\t($(element).find('.answer-text input')).focus();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Question answers template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fquestion-answer-option' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-answers\">\n+\t\u003Cdiv class=\"quiz-question-data\">\n+\t\t\u003Cdiv class=\"lp-list-questions\">\n+\t\t\t\u003Ctable class=\"lp-list-options\">\n+\t\t\t\t\u003Cthead>\n+\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\u003Cth class=\"sort\">\u003C\u002Fth>\n+\t\t\t\t\t\t\u003Cth class=\"answer-text\">\u003C?php esc_html_e( 'Answers', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\u003Cth class=\"answer-correct\">\u003C?php esc_html_e( 'Correction', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\t\u003Cth class=\"actions\">\u003C\u002Fth>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\u003C\u002Fthead>\n+\t\t\t\t\u003Ctbody>\n+\t\t\t\t\t\u003Clp-quiz-question-answer-option v-for=\"(answer, index) in question.answers\" :question=\"question\" :answer=\"answer\" :index=\"index\" :key=\"index\" @changeCorrect=\"changeCorrect\" @nav=\"navItem\">\u003C\u002Flp-quiz-question-answer-option>\n+\t\t\t\t\u003C\u002Ftbody>\n+\t\t\t\u003C\u002Ftable>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cp class=\"question-button-actions\" v-if=\"addableAnswer\">\n+\t\t\t\u003Cbutton class=\"button add-question-option-button\" type=\"button\" @click=\"newAnswer\">\u003C?php esc_html_e( 'Add option', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-answers', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-answers',\n+\t\t\tprops: ['question'],\n+\t\t\tcomputed: {\n+\t\t\t\taddableAnswer: function() {\n+\t\t\t\t\treturn !(String(this.question.type.key) === 'true_or_false');\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmounted: function() {\n+\t\t\t\tvar _self = this;\n+\t\t\t\tvar $el = $(_self.$el).find('.lp-list-options tbody');\n+\n+\t\t\t\t$el.sortable({\n+\t\t\t\t\thandle: '.sort',\n+\t\t\t\t\taxis: 'y',\n+\t\t\t\t\thelper: function (e, ui) {\n+\t\t\t\t\t\tvar $tr = $('\u003Ctr \u002F>'),\n+\t\t\t\t\t\t\t$row = $(e.target).closest('tr');\n+\t\t\t\t\t\t$row.children().each(function () {\n+\t\t\t\t\t\t\tvar $td = $(this).clone().width($(this).width())\n+\t\t\t\t\t\t\t$tr.append($td);\n+\t\t\t\t\t\t});\n+\n+\t\t\t\t\t\treturn $tr;\n+\t\t\t\t\t},\n+\t\t\t\t\tupdate: function () {\n+\t\t\t\t\t\t_self.sort();\n+\t\t\t\t\t}\n+\t\t\t\t});\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tsort: function() {\n+\n+\t\t\t\t\tvar _items = $('.question-item[data-item-id=\"' + this.question.id + '\"] .quiz-question-data .lp-list-questions>.lp-list-options tbody tr');\n+\t\t\t\t\tvar _order = [];\n+\t\t\t\t\t_items.each(function (index, item) {\n+\t\t\t\t\t\t$(item).find('.order').text((index + 1) + '.');\n+\t\t\t\t\t\t_order.push($(item).data('answer-id'));\n+\t\t\t\t\t});\n+\n+\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswersOrder', {\n+\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\torder: _order\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F change correct answer\n+\t\t\t\tchangeCorrect: function(correct) {\n+\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionCorrectAnswer', {\n+\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\tcorrect: correct\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F new answer option\n+\t\t\t\tnewAnswer: function () {\n+\t\t\t\t\t$store.dispatch('lqs\u002FnewQuestionAnswer', {\n+\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\tsuccess: function (answer) {\n+\t\t\t\t\t\t\t$(this.$el).find('tr[data-answer-id=\"' + answer.question_answer_id + '\"] .answer-text input').focus();\n+\t\t\t\t\t\t}, context: this\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F navigation course items\n+\t\t\t\tnavItem: function (payload) {\n+\n+\t\t\t\t\tvar keyCode = payload.key,\n+\t\t\t\t\t\torder = payload.order;\n+\n+\t\t\t\t\tif (keyCode === 38 && order > 0) {\n+\t\t\t\t\t\tthis.nav(order - 1);\n+\t\t\t\t\t}\n+\t\t\t\t\tif (keyCode === 40 || keyCode === 13) {\n+\t\t\t\t\t\tif (order === this.question.answers.length) {\n+\t\t\t\t\t\t\t\u002F\u002F code\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthis.nav(order + 1);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F focus item\n+\t\t\t\tnav: function (position) {\n+\t\t\t\t\tvar element = 'div[data-item-id=' + this.question.id + '] tr[data-order-answer=' + position + ']';\n+\t\t\t\t\t($(element).find('.answer-text input')).focus();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-fib-editor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-fib-editor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-fib-editor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-fib-editor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,344 +1,344 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin quiz editor: fib question answer template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-fib-question-answer\">\r\n-\t\u003Cdiv class=\"admin-quiz-fib-question-editor\">\r\n-\t\t\u003C?php learn_press_admin_view( 'question\u002Ffib-answer-editor' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery(document).ready(function ($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\tVue.component('lp-quiz-fib-question-answer', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-fib-question-answer',\r\n-\t\t\tprops: ['question'],\r\n-\t\t\tdata: function () {\r\n-\t\t\t\treturn {\r\n-\t\t\t\t\tvalid: true,\r\n-\t\t\t\t\tcanInsertNewBlank: false,\r\n-\t\t\t\t\tblanks: []\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tanswer: function () {\r\n-\t\t\t\t\treturn {\r\n-\t\t\t\t\t\torder: 1,\r\n-\t\t\t\t\t\tis_true: '',\r\n-\t\t\t\t\t\tquestion_answer_id: this.question.answers[0].question_answer_id,\r\n-\t\t\t\t\t\ttitle: this.question.answers[0].title,\r\n-\t\t\t\t\t\tvalue: '',\r\n-\t\t\t\t\t\tblanks: this.answers[ 0 ].blanks,\r\n-\t\t\t\t\t};\r\n-\t\t\t\t},\r\n-\t\t\t\tanswers: function () {\r\n-\t\t\t\t\treturn this.question.answers\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmounted: function () {\r\n-\t\t\t\tvar that = this,\r\n-\t\t\t\t\tcontent = this.getContent();\r\n-\t\t\t\tthis.blanks = this.answers[0].blanks;\r\n-\t\t\t\tthis.$editor = $(this.$el).find('.content-editable');\r\n-\t\t\t\tthis.$editor.html(content);\r\n-\t\t\t\tthis.parseBlanks(content);\r\n-\r\n-\t\t\t\tthis.$editor[0].addEventListener(\"DOMCharacterDataModified\", function (e) {\r\n-\t\t\t\t\tvar $target = $(e.target).parent(), id = $target.data('id');\r\n-\r\n-\t\t\t\t\tfor (var i in that.blanks) {\r\n-\t\t\t\t\t\tif (that.blanks[i].id == id) {\r\n-\t\t\t\t\t\t\tthat.blanks[i].fill = $target.html().trim();\r\n-\t\t\t\t\t\t\tthat.$activeBlank = $target;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}, false);\r\n-\r\n-\t\t\t\tthis.interval = setInterval(function (a) {\r\n-\t\t\t\t\ta.parseBlanks(a.getContent());\r\n-\t\t\t\t}, 1000, this);\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tupdateAnswer: function () {\r\n-\t\t\t\t\tvar answer = JSON.parse(JSON.stringify(this.answer));\r\n-\t\t\t\t\tanswer.title = this.getShortcode();\r\n-\t\t\t\t\tanswer.blanks = this.getBlanksForDB();\r\n-\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswerTitle', {\r\n-\t\t\t\t\t\tquestion_id: this.question.id,\r\n-\t\t\t\t\t\tanswer: answer\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\r\n-\t\t\t\tupdateAnswerBlank: function (e, blank) {\r\n-\t\t\t\t\tblank['comparison'] = e.target.value || '';\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateAnswerMatchCase( e, blank ) {\r\n-\t\t\t\t\tblank['match_case'] = e.target.checked ? true : false;\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetContent: function () {\r\n-\t\t\t\t\tvar content = this.answers[0].title,\r\n-\t\t\t\t\t\tshortcodes = content.match(\u002F\\[fib.*?\\]\u002Fg),\r\n-\t\t\t\t\t\tuids = {};\r\n-\r\n-\t\t\t\t\tif (shortcodes) {\r\n-\t\t\t\t\t\tfor (var i = 0; i \u003C shortcodes.length; i++) {\r\n-\t\t\t\t\t\t\tvar uid,\r\n-\t\t\t\t\t\t\t\tfill,\r\n-\t\t\t\t\t\t\t\treplaceText,\r\n-\t\t\t\t\t\t\t\tprops = shortcodes[i].match(\u002F([a-z_]+)=\"(.*?)\"\u002Fg),\r\n-\t\t\t\t\t\t\t\tdata = [];\r\n-\r\n-\t\t\t\t\t\t\tfor (var j in props) {\r\n-\t\t\t\t\t\t\t\tvar prop = props[j].match(\u002F([a-z_]+)=\"(.*?)\"\u002F);\r\n-\r\n-\t\t\t\t\t\t\t\tif (!prop) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tswitch (prop[1]) {\r\n-\t\t\t\t\t\t\t\t\tcase 'uid':\r\n-\t\t\t\t\t\t\t\t\tcase 'id':\r\n-\t\t\t\t\t\t\t\t\t\tuid = prop[2];\r\n-\t\t\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\t\t\tcase 'fill':\r\n-\t\t\t\t\t\t\t\t\t\tfill = prop[2];\r\n-\t\t\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t\t\t\tdata.push('data-' + prop[1] + '=\"' + prop[2] + '\"')\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tuid = uid ? uid : LP.uniqueId();\r\n-\r\n-\t\t\t\t\t\t\tif (uids[uid]) {\r\n-\t\t\t\t\t\t\t\tuid = LP.uniqueId();\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\treplaceText = FIB.outerHTML(this.createBlank(fill, uid).attr('data-index', i + 1));\u002F\u002F '\u003Cspan class=\"fib-blank\" id=\"fib-blank-' + uid + '\" data-id=\"' + uid + '\" data-index=\"' + (i + 1) + '\">' + fill + '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\tuids[uid] = true;\r\n-\r\n-\t\t\t\t\t\t\tcontent = content.replace(shortcodes[i], replaceText);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn content;\r\n-\t\t\t\t},\r\n-\t\t\t\tactiveBlank: function (e) {\r\n-\t\t\t\t\tthis.$activeBlank = $(e.target).closest('.fib-blank');\r\n-\t\t\t\t},\r\n-\r\n-\r\n-\t\t\t\tfindBlank: function (id) {\r\n-\t\t\t\t\tfor (var i in this.blanks) {\r\n-\t\t\t\t\t\tif (this.blanks[i].id == id) {\r\n-\t\t\t\t\t\t\treturn this.blanks[i];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t},\r\n-\t\t\t\tparseBlanks: function (content) {\r\n-\t\t\t\t\tvar $container = this.$editor,\r\n-\t\t\t\t\t\t$inputs = $container.find('.fib-blank'),\r\n-\t\t\t\t\t\t$input,\r\n-\t\t\t\t\t\tdata,\r\n-\t\t\t\t\t\tblanks = [], uids = [],\r\n-\t\t\t\t\t\ti = 0, n = 0;\r\n-\r\n-\r\n-\t\t\t\t\tfor (i = 0; i \u003C $inputs.length; i++) {\r\n-\t\t\t\t\t\t$input = $inputs.eq(i).attr('data-index', i + 1);\r\n-\t\t\t\t\t\tdata = $input.data();\r\n-\r\n-\t\t\t\t\t\tif (-1 !== $.inArray(data.id, uids)) {\r\n-\t\t\t\t\t\t\tdata.id = LP.uniqueId();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tvar oldBlank = this.findBlank(data.id) || {};\r\n-\r\n-\t\t\t\t\t\tblanks.push({\r\n-\t\t\t\t\t\t\tfill: $input.html().trim(),\r\n-\t\t\t\t\t\t\tid: data.id,\r\n-\t\t\t\t\t\t\tcomparison: data.comparison || oldBlank.comparison || '',\r\n-\t\t\t\t\t\t\tmatch_case: data.match_case || oldBlank.match_case || 0,\r\n-\t\t\t\t\t\t\tindex: i + 1,\r\n-\t\t\t\t\t\t\topen: !!oldBlank.open,\r\n-\t\t\t\t\t\t});\r\n-\t\t\t\t\t\tuids.push(data.id);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.blanks = blanks;\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateBlanks: function (content) {\r\n-\t\t\t\t\tthis.parseBlanks(content !== undefined ? content : this.$editor.html());\r\n-\t\t\t\t\treturn this.getShortcode();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetShortcode: function () {\r\n-\t\t\t\t\tvar that = this,\r\n-\t\t\t\t\t\t$container = this.$editor.clone(),\r\n-\t\t\t\t\t\t$blanks = $container.find('.fib-blank');\r\n-\r\n-\t\t\t\t\t$blanks.each(function () {\r\n-\t\t\t\t\t\tvar $blank = $(this),\r\n-\t\t\t\t\t\t\tid = $blank.attr('id'),\r\n-\t\t\t\t\t\t\tuid = id.replace('fib-blank-', ''),\r\n-\t\t\t\t\t\t\tblank = that.getBlankById(uid),\r\n-\t\t\t\t\t\t\tcode = 'fib';\r\n-\r\n-\t\t\t\t\t\tif (blank) {\r\n-\t\t\t\t\t\t\tif (!blank.id) {\r\n-\t\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\tfor (var i in blank) {\r\n-\t\t\t\t\t\t\t\tif ($.inArray(i, ['index']) !== -1) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tif (!blank[i]) {\r\n-\t\t\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tcode += ' ' + i + '=\"' + blank[i] + '\"';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t$blank.replaceWith('[' + code + ']');\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tconsole.log('Not found: ' + uid)\r\n-\t\t\t\t\t\t\t$blank.replaceWith('')\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t\treturn $container.html();\r\n-\t\t\t\t},\r\n-\t\t\t\tgetBlankById: function (id) {\r\n-\t\t\t\t\tvar blank = false;\r\n-\t\t\t\t\t$.each(this.blanks, function () {\r\n-\t\t\t\t\t\tif (id == this.id) {\r\n-\t\t\t\t\t\t\tblank = this;\r\n-\t\t\t\t\t\t\treturn true;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t\treturn blank;\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateBlank: function (e) {\r\n-\t\t\t\t\tvar $el = $(e.target),\r\n-\t\t\t\t\t\tid = $el.attr('id'),\r\n-\t\t\t\t\t\t$blank = this.$editor.find('#' + id);\r\n-\t\t\t\t\t$blank.html(e.target.value);\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tremoveBlank: function (e, id) {\r\n-\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\tthis.removeBlankById(id);\r\n-\t\t\t\t\tthis.updateAll();\r\n-\t\t\t\t},\r\n-\t\t\t\tremoveBlankById: function (id) {\r\n-\t\t\t\t\tvar $blank = this.$editor.find('.fib-blank#fib-blank-' + id);\r\n-\t\t\t\t\t$blank.replaceWith($blank.html());\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateAll: function () {\r\n-\t\t\t\t\tthis.answer.title = this.updateBlanks();\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tinsertBlank: function () {\r\n-\t\t\t\t\tif (!this.canInsertNewBlank) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tvar $content = $(this.$el).find('.content-editable'),\r\n-\t\t\t\t\t\tcontent = $content.html(),\r\n-\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\r\n-\t\t\t\t\t\tselectionRange = FIB.getSelectionRange(),\r\n-\t\t\t\t\t\t$blank = this.createBlank(selectedText),\r\n-\t\t\t\t\t\tnodeValue = selectionRange.anchorNode.nodeValue,\r\n-\t\t\t\t\t\tx = selectionRange.anchorOffset,\r\n-\t\t\t\t\t\ty = selectionRange.focusOffset;\r\n-\t\t\t\t\t\tstartRange = x \u003C y ? x : y;\r\n-\t\t\t\t\t\tendRange = startRange == x ? y: x;\r\n-\r\n-\t\t\t\t\tselectionRange.anchorNode.nodeValue = nodeValue.substr(0, startRange);\r\n-\t\t\t\t\t$($blank).insertAfter(selectionRange.anchorNode);\r\n-\t\t\t\t\t$(FIB.createTextNode(nodeValue.substr(endRange))).insertAfter($blank);\r\n-\r\n-\t\t\t\t\tvar $blanks = $content.find('.fib-blank');\r\n-\t\t\t\t\t$blanks.each(function (i, el) {\r\n-\t\t\t\t\t\tvar $blank = $(this);\r\n-\t\t\t\t\t\t$blank.attr('data-index', i + 1)\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\tthis.parseBlanks($content.html());\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tcreateBlank: function (content, id) {\r\n-\t\t\t\t\tif (!id) {\r\n-\t\t\t\t\t\tid = LP.uniqueId();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn $('\u003Cb class=\"fib-blank\" id=\"fib-blank-' + id + '\" data-id=\"' + id + '\"> ' + content + '\u003C\u002Fb>');\r\n-\t\t\t\t},\r\n-\t\t\t\tclearBlanks: function () {\r\n-\t\t\t\t\tif (!confirm($store.getters['i18n\u002Fall'].confirm_remove_blanks)) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tfor (var i in this.blanks) {\r\n-\t\t\t\t\t\tthis.removeBlankById(this.blanks[i].id);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.updateAll();\r\n-\t\t\t\t},\r\n-\t\t\t\tclearContent: function () {\r\n-\t\t\t\t\tthis.$editor.html('');\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t},\r\n-\t\t\t\tcanInsertBlank: function () {\r\n-\t\t\t\t\tvar $content = $(this.$el).find('.content-editable'),\r\n-\t\t\t\t\t\tcontent = $content.html(),\r\n-\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\r\n-\t\t\t\t\t\tselectionRange = FIB.getSelectionRange();\r\n-\r\n-\t\t\t\t\tthis.canInsertNewBlank = selectedText.length && !FIB.isContainHtml(selectionRange.anchorNode);\r\n-\t\t\t\t},\r\n-\t\t\t\tgetBlanksForDB: function () {\r\n-\t\t\t\t\tvar blanks = {};\r\n-\t\t\t\t\tfor (var i = 0, n = this.blanks.length; i \u003C n; i++) {\r\n-\t\t\t\t\t\tvar id = this.blanks[i].id.replace('fib-blank-', '');\r\n-\t\t\t\t\t\tblanks[id] = JSON.parse(JSON.stringify(this.blanks[i]));\r\n-\t\t\t\t\t\tblanks[id].id = id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\treturn blanks;\r\n-\t\t\t\t},\r\n-\t\t\t\ttoggleOptions: function (e, id) {\r\n-\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\tvar that = this;\r\n-\t\t\t\t\t$(e.target).closest('.fib-blank').find('.blank-options ul').slideToggle(function () {\r\n-\t\t\t\t\t\tthat.setBlankProp(id, 'open', !$(this).is(':hidden'))\r\n-\t\t\t\t\t})\r\n-\t\t\t\t},\r\n-\t\t\t\tsetBlankProp: function (id, prop, value) {\r\n-\t\t\t\t\tfor (var i in this.blanks) {\r\n-\t\t\t\t\t\tif (this.blanks[i].id == id) {\r\n-\t\t\t\t\t\t\tif ($.isPlainObject(prop)) {\r\n-\t\t\t\t\t\t\t\tfor (var p in prop) {\r\n-\t\t\t\t\t\t\t\t\tthis.$set(this.blanks[i], p, prop[p]);\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tthis.$set(this.blanks[i], prop, value);\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tthis.updateAnswer();\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t})\r\n-\t});\r\n-\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin quiz editor: fib question answer template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-fib-question-answer\">\n+\t\u003Cdiv class=\"admin-quiz-fib-question-editor\">\n+\t\t\u003C?php learn_press_admin_view( 'question\u002Ffib-answer-editor' ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery(document).ready(function ($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\tVue.component('lp-quiz-fib-question-answer', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-fib-question-answer',\n+\t\t\tprops: ['question'],\n+\t\t\tdata: function () {\n+\t\t\t\treturn {\n+\t\t\t\t\tvalid: true,\n+\t\t\t\t\tcanInsertNewBlank: false,\n+\t\t\t\t\tblanks: []\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tcomputed: {\n+\t\t\t\tanswer: function () {\n+\t\t\t\t\treturn {\n+\t\t\t\t\t\torder: 1,\n+\t\t\t\t\t\tis_true: '',\n+\t\t\t\t\t\tquestion_answer_id: this.question.answers[0].question_answer_id,\n+\t\t\t\t\t\ttitle: this.question.answers[0].title,\n+\t\t\t\t\t\tvalue: '',\n+\t\t\t\t\t\tblanks: this.answers[ 0 ].blanks,\n+\t\t\t\t\t};\n+\t\t\t\t},\n+\t\t\t\tanswers: function () {\n+\t\t\t\t\treturn this.question.answers\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmounted: function () {\n+\t\t\t\tvar that = this,\n+\t\t\t\t\tcontent = this.getContent();\n+\t\t\t\tthis.blanks = this.answers[0].blanks;\n+\t\t\t\tthis.$editor = $(this.$el).find('.content-editable');\n+\t\t\t\tthis.$editor.html(content);\n+\t\t\t\tthis.parseBlanks(content);\n+\n+\t\t\t\tthis.$editor[0].addEventListener(\"DOMCharacterDataModified\", function (e) {\n+\t\t\t\t\tvar $target = $(e.target).parent(), id = $target.data('id');\n+\n+\t\t\t\t\tfor (var i in that.blanks) {\n+\t\t\t\t\t\tif (that.blanks[i].id == id) {\n+\t\t\t\t\t\t\tthat.blanks[i].fill = $target.html().trim();\n+\t\t\t\t\t\t\tthat.$activeBlank = $target;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}, false);\n+\n+\t\t\t\tthis.interval = setInterval(function (a) {\n+\t\t\t\t\ta.parseBlanks(a.getContent());\n+\t\t\t\t}, 1000, this);\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tupdateAnswer: function () {\n+\t\t\t\t\tvar answer = JSON.parse(JSON.stringify(this.answer));\n+\t\t\t\t\tanswer.title = this.getShortcode();\n+\t\t\t\t\tanswer.blanks = this.getBlanksForDB();\n+\n+\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionAnswerTitle', {\n+\t\t\t\t\t\tquestion_id: this.question.id,\n+\t\t\t\t\t\tanswer: answer\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\n+\t\t\t\tupdateAnswerBlank: function (e, blank) {\n+\t\t\t\t\tblank['comparison'] = e.target.value || '';\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tupdateAnswerMatchCase( e, blank ) {\n+\t\t\t\t\tblank['match_case'] = e.target.checked ? true : false;\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tgetContent: function () {\n+\t\t\t\t\tvar content = this.answers[0].title,\n+\t\t\t\t\t\tshortcodes = content.match(\u002F\\[fib.*?\\]\u002Fg),\n+\t\t\t\t\t\tuids = {};\n+\n+\t\t\t\t\tif (shortcodes) {\n+\t\t\t\t\t\tfor (var i = 0; i \u003C shortcodes.length; i++) {\n+\t\t\t\t\t\t\tvar uid,\n+\t\t\t\t\t\t\t\tfill,\n+\t\t\t\t\t\t\t\treplaceText,\n+\t\t\t\t\t\t\t\tprops = shortcodes[i].match(\u002F([a-z_]+)=\"(.*?)\"\u002Fg),\n+\t\t\t\t\t\t\t\tdata = [];\n+\n+\t\t\t\t\t\t\tfor (var j in props) {\n+\t\t\t\t\t\t\t\tvar prop = props[j].match(\u002F([a-z_]+)=\"(.*?)\"\u002F);\n+\n+\t\t\t\t\t\t\t\tif (!prop) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tswitch (prop[1]) {\n+\t\t\t\t\t\t\t\t\tcase 'uid':\n+\t\t\t\t\t\t\t\t\tcase 'id':\n+\t\t\t\t\t\t\t\t\t\tuid = prop[2];\n+\t\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\t\tcase 'fill':\n+\t\t\t\t\t\t\t\t\t\tfill = prop[2];\n+\t\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t\t\t\tdata.push('data-' + prop[1] + '=\"' + prop[2] + '\"')\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tuid = uid ? uid : LP.uniqueId();\n+\n+\t\t\t\t\t\t\tif (uids[uid]) {\n+\t\t\t\t\t\t\t\tuid = LP.uniqueId();\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\treplaceText = FIB.outerHTML(this.createBlank(fill, uid).attr('data-index', i + 1));\u002F\u002F '\u003Cspan class=\"fib-blank\" id=\"fib-blank-' + uid + '\" data-id=\"' + uid + '\" data-index=\"' + (i + 1) + '\">' + fill + '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\tuids[uid] = true;\n+\n+\t\t\t\t\t\t\tcontent = content.replace(shortcodes[i], replaceText);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\treturn content;\n+\t\t\t\t},\n+\t\t\t\tactiveBlank: function (e) {\n+\t\t\t\t\tthis.$activeBlank = $(e.target).closest('.fib-blank');\n+\t\t\t\t},\n+\n+\n+\t\t\t\tfindBlank: function (id) {\n+\t\t\t\t\tfor (var i in this.blanks) {\n+\t\t\t\t\t\tif (this.blanks[i].id == id) {\n+\t\t\t\t\t\t\treturn this.blanks[i];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn false;\n+\t\t\t\t},\n+\t\t\t\tparseBlanks: function (content) {\n+\t\t\t\t\tvar $container = this.$editor,\n+\t\t\t\t\t\t$inputs = $container.find('.fib-blank'),\n+\t\t\t\t\t\t$input,\n+\t\t\t\t\t\tdata,\n+\t\t\t\t\t\tblanks = [], uids = [],\n+\t\t\t\t\t\ti = 0, n = 0;\n+\n+\n+\t\t\t\t\tfor (i = 0; i \u003C $inputs.length; i++) {\n+\t\t\t\t\t\t$input = $inputs.eq(i).attr('data-index', i + 1);\n+\t\t\t\t\t\tdata = $input.data();\n+\n+\t\t\t\t\t\tif (-1 !== $.inArray(data.id, uids)) {\n+\t\t\t\t\t\t\tdata.id = LP.uniqueId();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tvar oldBlank = this.findBlank(data.id) || {};\n+\n+\t\t\t\t\t\tblanks.push({\n+\t\t\t\t\t\t\tfill: $input.html().trim(),\n+\t\t\t\t\t\t\tid: data.id,\n+\t\t\t\t\t\t\tcomparison: data.comparison || oldBlank.comparison || '',\n+\t\t\t\t\t\t\tmatch_case: data.match_case || oldBlank.match_case || 0,\n+\t\t\t\t\t\t\tindex: i + 1,\n+\t\t\t\t\t\t\topen: !!oldBlank.open,\n+\t\t\t\t\t\t});\n+\t\t\t\t\t\tuids.push(data.id);\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.blanks = blanks;\n+\t\t\t\t},\n+\t\t\t\tupdateBlanks: function (content) {\n+\t\t\t\t\tthis.parseBlanks(content !== undefined ? content : this.$editor.html());\n+\t\t\t\t\treturn this.getShortcode();\n+\t\t\t\t},\n+\t\t\t\tgetShortcode: function () {\n+\t\t\t\t\tvar that = this,\n+\t\t\t\t\t\t$container = this.$editor.clone(),\n+\t\t\t\t\t\t$blanks = $container.find('.fib-blank');\n+\n+\t\t\t\t\t$blanks.each(function () {\n+\t\t\t\t\t\tvar $blank = $(this),\n+\t\t\t\t\t\t\tid = $blank.attr('id'),\n+\t\t\t\t\t\t\tuid = id.replace('fib-blank-', ''),\n+\t\t\t\t\t\t\tblank = that.getBlankById(uid),\n+\t\t\t\t\t\t\tcode = 'fib';\n+\n+\t\t\t\t\t\tif (blank) {\n+\t\t\t\t\t\t\tif (!blank.id) {\n+\t\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\tfor (var i in blank) {\n+\t\t\t\t\t\t\t\tif ($.inArray(i, ['index']) !== -1) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tif (!blank[i]) {\n+\t\t\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tcode += ' ' + i + '=\"' + blank[i] + '\"';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t$blank.replaceWith('[' + code + ']');\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tconsole.log('Not found: ' + uid)\n+\t\t\t\t\t\t\t$blank.replaceWith('')\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t\treturn $container.html();\n+\t\t\t\t},\n+\t\t\t\tgetBlankById: function (id) {\n+\t\t\t\t\tvar blank = false;\n+\t\t\t\t\t$.each(this.blanks, function () {\n+\t\t\t\t\t\tif (id == this.id) {\n+\t\t\t\t\t\t\tblank = this;\n+\t\t\t\t\t\t\treturn true;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t\treturn blank;\n+\t\t\t\t},\n+\t\t\t\tupdateBlank: function (e) {\n+\t\t\t\t\tvar $el = $(e.target),\n+\t\t\t\t\t\tid = $el.attr('id'),\n+\t\t\t\t\t\t$blank = this.$editor.find('#' + id);\n+\t\t\t\t\t$blank.html(e.target.value);\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tremoveBlank: function (e, id) {\n+\t\t\t\t\te.preventDefault();\n+\t\t\t\t\tthis.removeBlankById(id);\n+\t\t\t\t\tthis.updateAll();\n+\t\t\t\t},\n+\t\t\t\tremoveBlankById: function (id) {\n+\t\t\t\t\tvar $blank = this.$editor.find('.fib-blank#fib-blank-' + id);\n+\t\t\t\t\t$blank.replaceWith($blank.html());\n+\t\t\t\t},\n+\t\t\t\tupdateAll: function () {\n+\t\t\t\t\tthis.answer.title = this.updateBlanks();\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tinsertBlank: function () {\n+\t\t\t\t\tif (!this.canInsertNewBlank) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tvar $content = $(this.$el).find('.content-editable'),\n+\t\t\t\t\t\tcontent = $content.html(),\n+\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\n+\t\t\t\t\t\tselectionRange = FIB.getSelectionRange(),\n+\t\t\t\t\t\t$blank = this.createBlank(selectedText),\n+\t\t\t\t\t\tnodeValue = selectionRange.anchorNode.nodeValue,\n+\t\t\t\t\t\tx = selectionRange.anchorOffset,\n+\t\t\t\t\t\ty = selectionRange.focusOffset;\n+\t\t\t\t\t\tstartRange = x \u003C y ? x : y;\n+\t\t\t\t\t\tendRange = startRange == x ? y: x;\n+\n+\t\t\t\t\tselectionRange.anchorNode.nodeValue = nodeValue.substr(0, startRange);\n+\t\t\t\t\t$($blank).insertAfter(selectionRange.anchorNode);\n+\t\t\t\t\t$(FIB.createTextNode(nodeValue.substr(endRange))).insertAfter($blank);\n+\n+\t\t\t\t\tvar $blanks = $content.find('.fib-blank');\n+\t\t\t\t\t$blanks.each(function (i, el) {\n+\t\t\t\t\t\tvar $blank = $(this);\n+\t\t\t\t\t\t$blank.attr('data-index', i + 1)\n+\t\t\t\t\t});\n+\n+\t\t\t\t\tthis.parseBlanks($content.html());\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tcreateBlank: function (content, id) {\n+\t\t\t\t\tif (!id) {\n+\t\t\t\t\t\tid = LP.uniqueId();\n+\t\t\t\t\t}\n+\t\t\t\t\treturn $('\u003Cb class=\"fib-blank\" id=\"fib-blank-' + id + '\" data-id=\"' + id + '\"> ' + content + '\u003C\u002Fb>');\n+\t\t\t\t},\n+\t\t\t\tclearBlanks: function () {\n+\t\t\t\t\tif (!confirm($store.getters['i18n\u002Fall'].confirm_remove_blanks)) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tfor (var i in this.blanks) {\n+\t\t\t\t\t\tthis.removeBlankById(this.blanks[i].id);\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.updateAll();\n+\t\t\t\t},\n+\t\t\t\tclearContent: function () {\n+\t\t\t\t\tthis.$editor.html('');\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t},\n+\t\t\t\tcanInsertBlank: function () {\n+\t\t\t\t\tvar $content = $(this.$el).find('.content-editable'),\n+\t\t\t\t\t\tcontent = $content.html(),\n+\t\t\t\t\t\tselectedText = FIB.getSelectedText(),\n+\t\t\t\t\t\tselectionRange = FIB.getSelectionRange();\n+\n+\t\t\t\t\tthis.canInsertNewBlank = selectedText.length && !FIB.isContainHtml(selectionRange.anchorNode);\n+\t\t\t\t},\n+\t\t\t\tgetBlanksForDB: function () {\n+\t\t\t\t\tvar blanks = {};\n+\t\t\t\t\tfor (var i = 0, n = this.blanks.length; i \u003C n; i++) {\n+\t\t\t\t\t\tvar id = this.blanks[i].id.replace('fib-blank-', '');\n+\t\t\t\t\t\tblanks[id] = JSON.parse(JSON.stringify(this.blanks[i]));\n+\t\t\t\t\t\tblanks[id].id = id;\n+\t\t\t\t\t}\n+\t\t\t\t\treturn blanks;\n+\t\t\t\t},\n+\t\t\t\ttoggleOptions: function (e, id) {\n+\t\t\t\t\te.preventDefault();\n+\t\t\t\t\tvar that = this;\n+\t\t\t\t\t$(e.target).closest('.fib-blank').find('.blank-options ul').slideToggle(function () {\n+\t\t\t\t\t\tthat.setBlankProp(id, 'open', !$(this).is(':hidden'))\n+\t\t\t\t\t})\n+\t\t\t\t},\n+\t\t\t\tsetBlankProp: function (id, prop, value) {\n+\t\t\t\t\tfor (var i in this.blanks) {\n+\t\t\t\t\t\tif (this.blanks[i].id == id) {\n+\t\t\t\t\t\t\tif ($.isPlainObject(prop)) {\n+\t\t\t\t\t\t\t\tfor (var p in prop) {\n+\t\t\t\t\t\t\t\t\tthis.$set(this.blanks[i], p, prop[p]);\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tthis.$set(this.blanks[i], prop, value);\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tthis.updateAnswer();\n+\t\t\t\t}\n+\t\t\t},\n+\t\t})\n+\t});\n+\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-meta.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-meta.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-meta.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-meta.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,106 +1,106 @@\n-\u003C?php\r\n-\u002F**\r\n- * Question options template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-meta\">\r\n-\t\u003Cdiv class=\"quiz-question-options\">\r\n-\t\t\u003Cdiv class=\"postbox\" @click=\"openSettings($event)\">\r\n-\t\t\t\u003Ch2 class=\"hndle\">\u003Cspan>\u003C?php esc_html_e( 'Details', 'learnpress' ); ?>\u003C\u002Fspan> \u003C\u002Fh2>\r\n-\t\t\t\u003Ca class=\"toggle\" @click.prevent=\"openSettings($event)\">\u003C\u002Fa>\r\n-\t\t\t\u003Cdiv class=\"inside\">\r\n-\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail\">\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\r\n-\t\t\t\t\t\t\t\u003Clabel :for=\"'content-'+question.id\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\r\n-\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea name=\"\" :id=\"'content-'+question.id\" cols=\"60\" rows=\"3\" class=\"lp-quiz-editor__detail-textarea large-text\" @change=\"updateContent\" v-model=\"question.settings.content\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\r\n-\t\t\t\t\t\t\t\u003Clabel :for=\"'marking-'+question.id\">\u003C?php esc_html_e( 'Points', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\r\n-\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"mark\" :id=\"'marking-'+question.id\" type=\"number\" min=\"1\" step=\"1\" v-model=\"question.settings.mark\" @change=\"updateMeta\">\r\n-\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Points for choosing the correct answer.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\r\n-\t\t\t\t\t\t\t\u003Clabel :for=\"'hint-'+question.id\">\u003C?php esc_html_e( 'Hint', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\r\n-\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea name=\"hint\" :id=\"'hint-'+question.id\" cols=\"60\" rows=\"3\" class=\"rlp-quiz-editor__detail-textarea large-text\" @change=\"updateMeta\" v-model=\"question.settings.hint\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'The instructions for the user to select the right answer. The text will be shown when users click the \\'Hint\\' button.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\r\n-\t\t\t\t\t\t\t\u003Clabel :for=\"'explanation-'+question.id\">\u003C?php esc_html_e( 'Explanation', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\r\n-\t\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea name=\"explanation\" :id=\"'explanation-'+question.id\" cols=\"60\" rows=\"3\" class=\"lp-quiz-editor__detail-textarea large-text\" @change=\"updateMeta\" v-model=\"question.settings.explanation\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-meta', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-meta',\r\n-\t\t\tprops: ['question'],\r\n-\t\t\tmethods: {\r\n-\t\t\t\tupdateContent: function () {\r\n-\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuestionContent', this.question );\r\n-\t\t\t\t},\r\n-\t\t\t\tupdateMeta: function(e) {\r\n-\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuestionMeta', {\r\n-\t\t\t\t\t\tquestion: this.question,\r\n-\t\t\t\t\t\tmeta_key: e.target.name\r\n-\t\t\t\t\t});\r\n-\t\t\t\t},\r\n-\t\t\t\topenSettings: function(e) {\r\n-\t\t\t\t\te.stopPropagation();\r\n-\r\n-\t\t\t\t\tvar $root = $( this.$el ).closest( '.question-settings' ),\r\n-\t\t\t\t\t\t$postbox = $root.find( '.postbox' );\r\n-\r\n-\t\t\t\t\t$postbox.removeClass( 'closed' );\r\n-\r\n-\t\t\t\t\tif ( ! $( e.target ).hasClass( 'toggle' ) ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tvar isClosed = $root.toggleClass( 'closed' ).hasClass('closed');\r\n-\r\n-\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuizQuestionsHidden', {\r\n-\t\t\t\t\t\thidden: $( '.question-settings.closed' ).map( function() {\r\n-\t\t\t\t\t\t\treturn $(this).closest( '.question-item' ).data( 'item-id' );\r\n-\t\t\t\t\t\t}).get()\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Question options template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-meta\">\n+\t\u003Cdiv class=\"quiz-question-options\">\n+\t\t\u003Cdiv class=\"postbox\" @click=\"openSettings($event)\">\n+\t\t\t\u003Ch2 class=\"hndle\">\u003Cspan>\u003C?php esc_html_e( 'Details', 'learnpress' ); ?>\u003C\u002Fspan> \u003C\u002Fh2>\n+\t\t\t\u003Ca class=\"toggle\" @click.prevent=\"openSettings($event)\">\u003C\u002Fa>\n+\t\t\t\u003Cdiv class=\"inside\">\n+\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail\">\n+\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\n+\t\t\t\t\t\t\t\u003Clabel :for=\"'content-'+question.id\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\n+\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\u003Ctextarea name=\"\" :id=\"'content-'+question.id\" cols=\"60\" rows=\"3\" class=\"lp-quiz-editor__detail-textarea large-text\" @change=\"updateContent\" v-model=\"question.settings.content\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\n+\t\t\t\t\t\t\t\u003Clabel :for=\"'marking-'+question.id\">\u003C?php esc_html_e( 'Points', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\n+\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"mark\" :id=\"'marking-'+question.id\" type=\"number\" min=\"1\" step=\"1\" v-model=\"question.settings.mark\" @change=\"updateMeta\">\n+\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Points for choosing the correct answer.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\n+\t\t\t\t\t\t\t\u003Clabel :for=\"'hint-'+question.id\">\u003C?php esc_html_e( 'Hint', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\n+\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\u003Ctextarea name=\"hint\" :id=\"'hint-'+question.id\" cols=\"60\" rows=\"3\" class=\"rlp-quiz-editor__detail-textarea large-text\" @change=\"updateMeta\" v-model=\"question.settings.hint\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'The instructions for the user to select the right answer. The text will be shown when users click the \\'Hint\\' button.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-field\">\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-label\">\n+\t\t\t\t\t\t\t\u003Clabel :for=\"'explanation-'+question.id\">\u003C?php esc_html_e( 'Explanation', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-quiz-editor__detail-input\">\n+\t\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\t\u003Ctextarea name=\"explanation\" :id=\"'explanation-'+question.id\" cols=\"60\" rows=\"3\" class=\"lp-quiz-editor__detail-textarea large-text\" @change=\"updateMeta\" v-model=\"question.settings.explanation\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-meta', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-meta',\n+\t\t\tprops: ['question'],\n+\t\t\tmethods: {\n+\t\t\t\tupdateContent: function () {\n+\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuestionContent', this.question );\n+\t\t\t\t},\n+\t\t\t\tupdateMeta: function(e) {\n+\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuestionMeta', {\n+\t\t\t\t\t\tquestion: this.question,\n+\t\t\t\t\t\tmeta_key: e.target.name\n+\t\t\t\t\t});\n+\t\t\t\t},\n+\t\t\t\topenSettings: function(e) {\n+\t\t\t\t\te.stopPropagation();\n+\n+\t\t\t\t\tvar $root = $( this.$el ).closest( '.question-settings' ),\n+\t\t\t\t\t\t$postbox = $root.find( '.postbox' );\n+\n+\t\t\t\t\t$postbox.removeClass( 'closed' );\n+\n+\t\t\t\t\tif ( ! $( e.target ).hasClass( 'toggle' ) ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tvar isClosed = $root.toggleClass( 'closed' ).hasClass('closed');\n+\n+\t\t\t\t\t$store.dispatch( 'lqs\u002FupdateQuizQuestionsHidden', {\n+\t\t\t\t\t\thidden: $( '.question-settings.closed' ).map( function() {\n+\t\t\t\t\t\t\treturn $(this).closest( '.question-item' ).data( 'item-id' );\n+\t\t\t\t\t\t}).get()\n+\t\t\t\t\t});\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin Quiz Editor: Question item.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fquestion-actions' );\r\n-learn_press_admin_view( 'quiz\u002Fquestion-settings' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-item\">\r\n-\t\u003Cdiv :class=\"['question-item',question.type.key, isNew() ? 'empty-question' : '']\" :data-item-id=\"question.id\" :data-question-order=\"index\">\r\n-\t\t\u003Clp-quiz-question-actions :question=\"question\" :index=\"index\" @nav=\"navItem\">\u003C\u002Flp-quiz-question-actions>\r\n-\t\t\u003Clp-quiz-question-settings :question=\"question\" :index=\"index\">\u003C\u002Flp-quiz-question-settings>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery(function ($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-item', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-item',\r\n-\t\t\tprops: ['question', 'index'],\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tnumberQuestions: function () {\r\n-\t\t\t\t\treturn ($store.getters['lqs\u002FlistQuestions']).length;\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\t\u002F\u002F navigation questions in quiz\r\n-\t\t\t\tnavItem: function (payload) {\r\n-\r\n-\t\t\t\t\tvar keyCode = payload.key,\r\n-\t\t\t\t\t\torder = payload.order;\r\n-\r\n-\t\t\t\t\tif (keyCode === 38 && order !== 0) {\r\n-\t\t\t\t\t\tthis.nav(order - 1);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif ((keyCode === 40 || keyCode === 13) && this.numberQuestions !== order) {\r\n-\t\t\t\t\t\tthis.nav(order + 1);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\t\u002F\u002F focus item\r\n-\t\t\t\tnav: function (position) {\r\n-\t\t\t\t\tvar element = 'div[data-question-order=' + position + ']';\r\n-\t\t\t\t\t($(element).find('.name input')).focus();\r\n-\t\t\t\t},\r\n-\t\t\t\tisNew: function () {\r\n-\t\t\t\t\treturn isNaN(this.question.id);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\r\n-\t})\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin Quiz Editor: Question item.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fquestion-actions' );\n+learn_press_admin_view( 'quiz\u002Fquestion-settings' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-item\">\n+\t\u003Cdiv :class=\"['question-item',question.type.key, isNew() ? 'empty-question' : '']\" :data-item-id=\"question.id\" :data-question-order=\"index\">\n+\t\t\u003Clp-quiz-question-actions :question=\"question\" :index=\"index\" @nav=\"navItem\">\u003C\u002Flp-quiz-question-actions>\n+\t\t\u003Clp-quiz-question-settings :question=\"question\" :index=\"index\">\u003C\u002Flp-quiz-question-settings>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery(function ($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-item', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-item',\n+\t\t\tprops: ['question', 'index'],\n+\t\t\tcomputed: {\n+\t\t\t\tnumberQuestions: function () {\n+\t\t\t\t\treturn ($store.getters['lqs\u002FlistQuestions']).length;\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\t\u002F\u002F navigation questions in quiz\n+\t\t\t\tnavItem: function (payload) {\n+\n+\t\t\t\t\tvar keyCode = payload.key,\n+\t\t\t\t\t\torder = payload.order;\n+\n+\t\t\t\t\tif (keyCode === 38 && order !== 0) {\n+\t\t\t\t\t\tthis.nav(order - 1);\n+\t\t\t\t\t}\n+\t\t\t\t\tif ((keyCode === 40 || keyCode === 13) && this.numberQuestions !== order) {\n+\t\t\t\t\t\tthis.nav(order + 1);\n+\t\t\t\t\t}\n+\n+\t\t\t\t},\n+\t\t\t\t\u002F\u002F focus item\n+\t\t\t\tnav: function (position) {\n+\t\t\t\t\tvar element = 'div[data-question-order=' + position + ']';\n+\t\t\t\t\t($(element).find('.name input')).focus();\n+\t\t\t\t},\n+\t\t\t\tisNew: function () {\n+\t\t\t\t\treturn isNaN(this.question.id);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\n+\t})\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-settings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-settings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-settings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-settings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-\u003C?php\r\n-\u002F**\r\n- * Question template.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fquestion-answer' );\r\n-learn_press_admin_view( 'quiz\u002Fquestion-meta' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-settings\">\r\n-\t\u003Cdiv class=\"question-settings\" :class=\"[question.open ? 'table-row' : 'hide-if-js', isHiddenSettings(question.id) ? 'closed' : '']\">\r\n-\t\t\u003Ctemplate v-if=\"!supportAnswerOptions\">\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fquiz-editor\u002Fquestion-js-component' ); ?>\r\n-\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003Ctemplate v-else-if=\"isFillInBlank\">\r\n-\t\t\t\u003Clp-quiz-fib-question-answer :question=\"question\">\u003C\u002Flp-quiz-fib-question-answer>\r\n-\t\t\u003C\u002Ftemplate>\r\n-\t\t\u003Ctemplate v-else>\r\n-\t\t\t\u003Clp-quiz-question-answers :question=\"question\">\u003C\u002Flp-quiz-question-answers>\r\n-\t\t\u003C\u002Ftemplate>\r\n-\r\n-\t\t\u003Clp-quiz-question-meta :question=\"question\">\u003C\u002Flp-quiz-question-meta>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery(function ($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-question-settings', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-question-settings',\r\n-\t\t\tprops: ['question', 'index'],\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tsupportAnswerOptions: function () {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FsupportAnswerOptions'].indexOf(this.question.type.key) !== -1;\r\n-\t\t\t\t},\r\n-\t\t\t\tisFillInBlank: function() {\r\n-\t\t\t\t\treturn this.question.type.key === 'fill_in_blanks';\r\n-\t\t\t\t},\r\n-\t\t\t},\r\n-\r\n-\t\t\tmethods: {\r\n-\t\t\t\tisHiddenSettings: function (id) {\r\n-\t\t\t\t\treturn $.inArray(id, $store.getters['lqs\u002FhiddenQuestionsSettings']) !== -1;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t})\r\n-\t})\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Question template.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fquestion-answer' );\n+learn_press_admin_view( 'quiz\u002Fquestion-meta' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-question-settings\">\n+\t\u003Cdiv class=\"question-settings\" :class=\"[question.open ? 'table-row' : 'hide-if-js', isHiddenSettings(question.id) ? 'closed' : '']\">\n+\t\t\u003Ctemplate v-if=\"!supportAnswerOptions\">\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fquiz-editor\u002Fquestion-js-component' ); ?>\n+\t\t\u003C\u002Ftemplate>\n+\t\t\u003Ctemplate v-else-if=\"isFillInBlank\">\n+\t\t\t\u003Clp-quiz-fib-question-answer :question=\"question\">\u003C\u002Flp-quiz-fib-question-answer>\n+\t\t\u003C\u002Ftemplate>\n+\t\t\u003Ctemplate v-else>\n+\t\t\t\u003Clp-quiz-question-answers :question=\"question\">\u003C\u002Flp-quiz-question-answers>\n+\t\t\u003C\u002Ftemplate>\n+\n+\t\t\u003Clp-quiz-question-meta :question=\"question\">\u003C\u002Flp-quiz-question-meta>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery(function ($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-question-settings', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-question-settings',\n+\t\t\tprops: ['question', 'index'],\n+\t\t\tcomputed: {\n+\t\t\t\tsupportAnswerOptions: function () {\n+\t\t\t\t\treturn $store.getters['lqs\u002FsupportAnswerOptions'].indexOf(this.question.type.key) !== -1;\n+\t\t\t\t},\n+\t\t\t\tisFillInBlank: function() {\n+\t\t\t\t\treturn this.question.type.key === 'fill_in_blanks';\n+\t\t\t\t},\n+\t\t\t},\n+\n+\t\t\tmethods: {\n+\t\t\t\tisHiddenSettings: function (id) {\n+\t\t\t\t\treturn $.inArray(id, $store.getters['lqs\u002FhiddenQuestionsSettings']) !== -1;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t})\n+\t})\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-\u003C?php\r\n-\u002F**\r\n- * Admin Quiz Editor: List questions.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-learn_press_admin_view( 'quiz\u002Fquestion' );\r\n-?>\r\n-\r\n-\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-questions\">\r\n-\t\u003Cdiv class=\"main\">\r\n-\t\t\u003Clp-quiz-question-item v-for=\"(question, index) in questions\" :question=\"question\" :index=\"index\" :key=\"index\">\u003C\u002Flp-quiz-question-item>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fscript>\r\n-\r\n-\u003Cscript type=\"text\u002Fjavascript\">\r\n-\tjQuery( function($) {\r\n-\t\tvar $Vue = window.$Vue || Vue;\r\n-\t\tvar $store = window.LP_Quiz_Store;\r\n-\r\n-\t\t$Vue.component('lp-quiz-questions', {\r\n-\t\t\ttemplate: '#tmpl-lp-quiz-questions',\r\n-\t\t\tcomputed: {\r\n-\t\t\t\tquestions: function() {\r\n-\t\t\t\t\treturn $store.getters['lqs\u002FlistQuestions'];\r\n-\t\t\t\t}\r\n-\t\t\t},\r\n-\t\t\tmounted: function() {\r\n-\t\t\t\tvar _self = this;\r\n-\t\t\t\tsetTimeout(function() {\r\n-\t\t\t\t\tvar $el = $('.lp-list-questions .main');\r\n-\r\n-\t\t\t\t\t$el.sortable({\r\n-\t\t\t\t\t\thandle: '.question-actions .sort',\r\n-\t\t\t\t\t\taxis: 'y',\r\n-\t\t\t\t\t\tupdate: function () {\r\n-\t\t\t\t\t\t\t_self.sort();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\t\t\t\t}, 1000)\r\n-\t\t\t},\r\n-\t\t\tmethods: {\r\n-\t\t\t\tsort: function() {\r\n-\t\t\t\t\tvar _items = $('.lp-list-questions .main>div.question-item');\r\n-\t\t\t\t\tvar _order = [];\r\n-\r\n-\t\t\t\t\t_items.each(function (index, item) {\r\n-\t\t\t\t\t\t$(item).find('.question-actions .order').text(index + 1);\r\n-\t\t\t\t\t\t_order.push($(item).data('item-id'));\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionsOrder', _order);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t});\r\n-\t});\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Admin Quiz Editor: List questions.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+learn_press_admin_view( 'quiz\u002Fquestion' );\n+?>\n+\n+\u003Cscript type=\"text\u002Fx-template\" id=\"tmpl-lp-quiz-questions\">\n+\t\u003Cdiv class=\"main\">\n+\t\t\u003Clp-quiz-question-item v-for=\"(question, index) in questions\" :question=\"question\" :index=\"index\" :key=\"index\">\u003C\u002Flp-quiz-question-item>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fscript>\n+\n+\u003Cscript type=\"text\u002Fjavascript\">\n+\tjQuery( function($) {\n+\t\tvar $Vue = window.$Vue || Vue;\n+\t\tvar $store = window.LP_Quiz_Store;\n+\n+\t\t$Vue.component('lp-quiz-questions', {\n+\t\t\ttemplate: '#tmpl-lp-quiz-questions',\n+\t\t\tcomputed: {\n+\t\t\t\tquestions: function() {\n+\t\t\t\t\treturn $store.getters['lqs\u002FlistQuestions'];\n+\t\t\t\t}\n+\t\t\t},\n+\t\t\tmounted: function() {\n+\t\t\t\tvar _self = this;\n+\t\t\t\tsetTimeout(function() {\n+\t\t\t\t\tvar $el = $('.lp-list-questions .main');\n+\n+\t\t\t\t\t$el.sortable({\n+\t\t\t\t\t\thandle: '.question-actions .sort',\n+\t\t\t\t\t\taxis: 'y',\n+\t\t\t\t\t\tupdate: function () {\n+\t\t\t\t\t\t\t_self.sort();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\t\t\t\t}, 1000)\n+\t\t\t},\n+\t\t\tmethods: {\n+\t\t\t\tsort: function() {\n+\t\t\t\t\tvar _items = $('.lp-list-questions .main>div.question-item');\n+\t\t\t\t\tvar _order = [];\n+\n+\t\t\t\t\t_items.each(function (index, item) {\n+\t\t\t\t\t\t$(item).find('.question-actions .order').text(index + 1);\n+\t\t\t\t\t\t_order.push($(item).data('item-id'));\n+\t\t\t\t\t});\n+\n+\t\t\t\t\t$store.dispatch('lqs\u002FupdateQuestionsOrder', _order);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t});\n+\t});\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsearch-author-field.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsearch-author-field.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsearch-author-field.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsearch-author-field.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template form search author field for custom post type of course.\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\r\n-\r\n-\u002F\u002F Check condition show field search by author for post.\r\n-$show_search_author_field = 0;\r\n-if ( ! $screen instanceof WP_Screen ) {\r\n-\treturn;\r\n-}\r\n-$course_item_types                = learn_press_get_course_item_types();\r\n-$screens_show_search_author_field = [\r\n-\t'edit-' . LP_COURSE_CPT,\r\n-\t'edit-' . LP_QUESTION_CPT,\r\n-\t'edit-' . LP_ORDER_CPT,\r\n-];\r\n-\r\n-foreach ( $course_item_types as $type ) {\r\n-\t$screens_show_search_author_field[] = 'edit-' . $type;\r\n-}\r\n-\r\n-$show_search_author_field = in_array( $screen->id, $screens_show_search_author_field ) ? 1 : 0;\r\n-if ( ! $show_search_author_field ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * @uses WP_List_Table::search_box()\r\n- *\r\n- * HTML return same search_box method\r\n- *\u002F\r\n-global $typenow;\r\n-$post_type        = $typenow;\r\n-$post_type_object = get_post_type_object( $post_type );\r\n-\r\n-$input_id = 'post-search-input';\r\n-\r\n-if ( ! empty( $_REQUEST['orderby'] ) ) {\r\n-\techo '\u003Cinput type=\"hidden\" name=\"orderby\" value=\"' . esc_attr( $_REQUEST['orderby'] ) . '\" \u002F>';\r\n-}\r\n-if ( ! empty( $_REQUEST['order'] ) ) {\r\n-\techo '\u003Cinput type=\"hidden\" name=\"order\" value=\"' . esc_attr( $_REQUEST['order'] ) . '\" \u002F>';\r\n-}\r\n-if ( ! empty( $_REQUEST['post_mime_type'] ) ) {\r\n-\techo '\u003Cinput type=\"hidden\" name=\"post_mime_type\" value=\"' . esc_attr( $_REQUEST['post_mime_type'] ) . '\" \u002F>';\r\n-}\r\n-if ( ! empty( $_REQUEST['detached'] ) ) {\r\n-\techo '\u003Cinput type=\"hidden\" name=\"detached\" value=\"' . esc_attr( $_REQUEST['detached'] ) . '\" \u002F>';\r\n-}\r\n-\r\n-$value_search = LP_Request::get_param( 's', '' );\r\n-?>\r\n-\u003Cp class=\"search-box\">\r\n-\t\u003Clabel class=\"screen-reader-text\" for=\"\u003C?php echo esc_attr( $input_id ); ?>\">\r\n-\t\t\u003C?php echo $post_type_object->labels->search_items; ?>:\r\n-\t\u003C\u002Flabel>\r\n-\t\u003Cinput type=\"search\"\r\n-\t\t   id=\"\u003C?php echo esc_attr( $input_id ); ?>\"\r\n-\t\t   name=\"s\"\r\n-\t\t   placeholder=\"\u003C?php _e( 'Search', 'learnpress' ); ?>\"\r\n-\t\t   value=\"\u003C?php echo esc_attr( $value_search ) ?>\"\u002F>\r\n-\t\u003C?php submit_button( $post_type_object->labels->search_items, '', '', false, array( 'id' => 'search-submit' ) ); ?>\r\n-\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template form search author field for custom post type of course.\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.0\n+ *\u002F\n+$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\n+\n+\u002F\u002F Check condition show field search by author for post.\n+$show_search_author_field = 0;\n+if ( ! $screen instanceof WP_Screen ) {\n+\treturn;\n+}\n+$course_item_types                = learn_press_get_course_item_types();\n+$screens_show_search_author_field = [\n+\t'edit-' . LP_COURSE_CPT,\n+\t'edit-' . LP_QUESTION_CPT,\n+\t'edit-' . LP_ORDER_CPT,\n+];\n+\n+foreach ( $course_item_types as $type ) {\n+\t$screens_show_search_author_field[] = 'edit-' . $type;\n+}\n+\n+$show_search_author_field = in_array( $screen->id, $screens_show_search_author_field ) ? 1 : 0;\n+if ( ! $show_search_author_field ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * @uses WP_List_Table::search_box()\n+ *\n+ * HTML return same search_box method\n+ *\u002F\n+global $typenow;\n+$post_type        = $typenow;\n+$post_type_object = get_post_type_object( $post_type );\n+\n+$input_id = 'post-search-input';\n+\n+if ( ! empty( $_REQUEST['orderby'] ) ) {\n+\techo '\u003Cinput type=\"hidden\" name=\"orderby\" value=\"' . esc_attr( $_REQUEST['orderby'] ) . '\" \u002F>';\n+}\n+if ( ! empty( $_REQUEST['order'] ) ) {\n+\techo '\u003Cinput type=\"hidden\" name=\"order\" value=\"' . esc_attr( $_REQUEST['order'] ) . '\" \u002F>';\n+}\n+if ( ! empty( $_REQUEST['post_mime_type'] ) ) {\n+\techo '\u003Cinput type=\"hidden\" name=\"post_mime_type\" value=\"' . esc_attr( $_REQUEST['post_mime_type'] ) . '\" \u002F>';\n+}\n+if ( ! empty( $_REQUEST['detached'] ) ) {\n+\techo '\u003Cinput type=\"hidden\" name=\"detached\" value=\"' . esc_attr( $_REQUEST['detached'] ) . '\" \u002F>';\n+}\n+\n+$value_search = LP_Request::get_param( 's', '' );\n+?>\n+\u003Cp class=\"search-box\">\n+\t\u003Clabel class=\"screen-reader-text\" for=\"\u003C?php echo esc_attr( $input_id ); ?>\">\n+\t\t\u003C?php echo $post_type_object->labels->search_items; ?>:\n+\t\u003C\u002Flabel>\n+\t\u003Cinput type=\"search\"\n+\t\t   id=\"\u003C?php echo esc_attr( $input_id ); ?>\"\n+\t\t   name=\"s\"\n+\t\t   placeholder=\"\u003C?php _e( 'Search', 'learnpress' ); ?>\"\n+\t\t   value=\"\u003C?php echo esc_attr( $value_search ) ?>\"\u002F>\n+\t\u003C?php submit_button( $post_type_object->labels->search_items, '', '', false, array( 'id' => 'search-submit' ) ); ?>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-\u003C?php\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n+\u003C?php\n+\n+defined( 'ABSPATH' ) || exit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,91 +1,91 @@\n-\u003C?php\r\n-\u002F**\r\n- * MCP API keys settings section.\r\n- *\r\n- * @var LP_Admin_MCP_API_Keys_Table_List $table\r\n- * @var array\u003Cint, WP_User>              $users\r\n- * @var array\u003Cstring,string>|null         $message\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$default_user = get_current_user_id();\r\n-$description  = '';\r\n-$permissions  = 'read';\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-mcp-api-keys-section\">\r\n-\t\u003C?php if ( $message ) : ?>\r\n-\t\t\u003Cdiv class=\"notice notice-\u003C?php echo esc_attr( $message['type'] ); ?> inline\">\r\n-\t\t\t\u003Cp>\u003C?php echo esc_html( $message['message'] ); ?>\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003Cdiv class=\"lp-mcp-key-editor\" style=\"margin: 12px 0 20px; padding: 16px; border: 1px solid #dcdcde; background: #fff;\">\r\n-\t\t\u003Ch2 style=\"margin-top: 0;\">\u003C?php esc_html_e( 'Create MCP API Key', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003C?php esc_html_e( 'Generated credentials are shown once. Store them securely before leaving this page.', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003Ctable class=\"form-table\" role=\"presentation\">\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-user\">\u003C?php esc_html_e( 'User', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\u003Cselect id=\"lp-mcp-key-user\" name=\"mcp_key_user_id\">\r\n-\t\t\t\t\t\t\t\u003C?php foreach ( $users as $user ) : ?>\r\n-\t\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $user->ID ); ?>\" \u003C?php selected( $default_user, $user->ID ); ?>>\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $user->display_name . ' (' . $user->user_login . ')' ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-description\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\u003Cinput type=\"text\" id=\"lp-mcp-key-description\" name=\"mcp_key_description\" class=\"regular-text\" maxlength=\"200\" value=\"\u003C?php echo esc_attr( $description ); ?>\" \u002F>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-permissions\">\u003C?php esc_html_e( 'Permissions', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\u003Cselect id=\"lp-mcp-key-permissions\" name=\"mcp_key_permissions\">\r\n-\t\t\t\t\t\t\t\u003Coption value=\"read\" \u003C?php selected( $permissions, 'read' ); ?>>\u003C?php esc_html_e( 'read', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\u003Coption value=\"write\" \u003C?php selected( $permissions, 'write' ); ?>>\u003C?php esc_html_e( 'write', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\u003Coption value=\"read_write\" \u003C?php selected( $permissions, 'read_write' ); ?>>\u003C?php esc_html_e( 'read_write', 'learnpress' ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\u003C\u002Ftable>\r\n-\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary\" id=\"lp-mcp-key-submit\">\u003C?php esc_html_e( 'Generate API Key', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cspan id=\"lp-mcp-key-status\" style=\"margin-left: 10px;\">\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003Cdiv id=\"lp-mcp-key-reveal\" style=\"display:none; margin-top: 12px; padding: 12px; border: 1px solid #2271b1; background: #f0f6fc;\">\r\n-\t\t\t\u003Cp style=\"margin-top:0;\">\u003Cstrong>\u003C?php esc_html_e( 'Copy these credentials now. They will not be shown again.', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\t\t\t\u003Cp>\r\n-\t\t\t\t\u003Clabel>\u003Cstrong>\u003C?php esc_html_e( 'Consumer Key', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Flabel>\u003Cbr \u002F>\r\n-\t\t\t\t\u003Cinput type=\"text\" readonly id=\"lp-mcp-consumer-key\" class=\"regular-text code\" \u002F>\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-mcp-copy\" data-target=\"lp-mcp-consumer-key\">\u003C?php esc_html_e( 'Copy', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003Cp>\r\n-\t\t\t\t\u003Clabel>\u003Cstrong>\u003C?php esc_html_e( 'Consumer Secret', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Flabel>\u003Cbr \u002F>\r\n-\t\t\t\t\u003Cinput type=\"text\" readonly id=\"lp-mcp-consumer-secret\" class=\"regular-text code\" \u002F>\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-mcp-copy\" data-target=\"lp-mcp-consumer-secret\">\u003C?php esc_html_e( 'Copy', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"lp-mcp-key-list\" style=\"background:#fff; padding: 16px; border: 1px solid #dcdcde;\">\r\n-\t\t\u003Ch2 style=\"margin-top:0;\">\u003C?php esc_html_e( 'API Keys', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"page\" value=\"learn-press-settings\" \u002F>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"tab\" value=\"mcp\" \u002F>\r\n-\t\t\u003C?php wp_nonce_field( 'lp_mcp_bulk_revoke_action', 'lp_mcp_bulk_revoke_nonce' ); ?>\r\n-\t\t\u003C?php $table->search_box( __( 'Search keys', 'learnpress' ), 'lp-mcp-keys-search' ); ?>\r\n-\t\t\u003C?php $table->display(); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * MCP API keys settings section.\n+ *\n+ * @var LP_Admin_MCP_API_Keys_Table_List $table\n+ * @var array\u003Cint, WP_User>              $users\n+ * @var array\u003Cstring,string>|null         $message\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$default_user = get_current_user_id();\n+$description  = '';\n+$permissions  = 'read';\n+?>\n+\n+\u003Cdiv class=\"lp-mcp-api-keys-section\">\n+\t\u003C?php if ( $message ) : ?>\n+\t\t\u003Cdiv class=\"notice notice-\u003C?php echo esc_attr( $message['type'] ); ?> inline\">\n+\t\t\t\u003Cp>\u003C?php echo esc_html( $message['message'] ); ?>\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\n+\t\u003Cdiv class=\"lp-mcp-key-editor\" style=\"margin: 12px 0 20px; padding: 16px; border: 1px solid #dcdcde; background: #fff;\">\n+\t\t\u003Ch2 style=\"margin-top: 0;\">\u003C?php esc_html_e( 'Create MCP API Key', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\t\u003Cp>\n+\t\t\t\u003C?php esc_html_e( 'Generated credentials are shown once. Store them securely before leaving this page.', 'learnpress' ); ?>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003Ctable class=\"form-table\" role=\"presentation\">\n+\t\t\t\u003Ctbody>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-user\">\u003C?php esc_html_e( 'User', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\n+\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\u003Cselect id=\"lp-mcp-key-user\" name=\"mcp_key_user_id\">\n+\t\t\t\t\t\t\t\u003C?php foreach ( $users as $user ) : ?>\n+\t\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $user->ID ); ?>\" \u003C?php selected( $default_user, $user->ID ); ?>>\n+\t\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $user->display_name . ' (' . $user->user_login . ')' ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Foption>\n+\t\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-description\">\u003C?php esc_html_e( 'Description', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\n+\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\u003Cinput type=\"text\" id=\"lp-mcp-key-description\" name=\"mcp_key_description\" class=\"regular-text\" maxlength=\"200\" value=\"\u003C?php echo esc_attr( $description ); ?>\" \u002F>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth scope=\"row\">\u003Clabel for=\"lp-mcp-key-permissions\">\u003C?php esc_html_e( 'Permissions', 'learnpress' ); ?>\u003C\u002Flabel>\u003C\u002Fth>\n+\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\u003Cselect id=\"lp-mcp-key-permissions\" name=\"mcp_key_permissions\">\n+\t\t\t\t\t\t\t\u003Coption value=\"read\" \u003C?php selected( $permissions, 'read' ); ?>>\u003C?php esc_html_e( 'read', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\u003Coption value=\"write\" \u003C?php selected( $permissions, 'write' ); ?>>\u003C?php esc_html_e( 'write', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\u003Coption value=\"read_write\" \u003C?php selected( $permissions, 'read_write' ); ?>>\u003C?php esc_html_e( 'read_write', 'learnpress' ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\u003C\u002Ftable>\n+\n+\t\t\u003Cp>\n+\t\t\t\u003Cbutton type=\"button\" class=\"button button-primary\" id=\"lp-mcp-key-submit\">\u003C?php esc_html_e( 'Generate API Key', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cspan id=\"lp-mcp-key-status\" style=\"margin-left: 10px;\">\u003C\u002Fspan>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003Cdiv id=\"lp-mcp-key-reveal\" style=\"display:none; margin-top: 12px; padding: 12px; border: 1px solid #2271b1; background: #f0f6fc;\">\n+\t\t\t\u003Cp style=\"margin-top:0;\">\u003Cstrong>\u003C?php esc_html_e( 'Copy these credentials now. They will not be shown again.', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Fp>\n+\t\t\t\u003Cp>\n+\t\t\t\t\u003Clabel>\u003Cstrong>\u003C?php esc_html_e( 'Consumer Key', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Flabel>\u003Cbr \u002F>\n+\t\t\t\t\u003Cinput type=\"text\" readonly id=\"lp-mcp-consumer-key\" class=\"regular-text code\" \u002F>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-mcp-copy\" data-target=\"lp-mcp-consumer-key\">\u003C?php esc_html_e( 'Copy', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fp>\n+\t\t\t\u003Cp>\n+\t\t\t\t\u003Clabel>\u003Cstrong>\u003C?php esc_html_e( 'Consumer Secret', 'learnpress' ); ?>\u003C\u002Fstrong>\u003C\u002Flabel>\u003Cbr \u002F>\n+\t\t\t\t\u003Cinput type=\"text\" readonly id=\"lp-mcp-consumer-secret\" class=\"regular-text code\" \u002F>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-mcp-copy\" data-target=\"lp-mcp-consumer-secret\">\u003C?php esc_html_e( 'Copy', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"lp-mcp-key-list\" style=\"background:#fff; padding: 16px; border: 1px solid #dcdcde;\">\n+\t\t\u003Ch2 style=\"margin-top:0;\">\u003C?php esc_html_e( 'API Keys', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\t\u003Cinput type=\"hidden\" name=\"page\" value=\"learn-press-settings\" \u002F>\n+\t\t\u003Cinput type=\"hidden\" name=\"tab\" value=\"mcp\" \u002F>\n+\t\t\u003C?php wp_nonce_field( 'lp_mcp_bulk_revoke_action', 'lp_mcp_bulk_revoke_nonce' ); ?>\n+\t\t\u003C?php $table->search_box( __( 'Search keys', 'learnpress' ), 'lp-mcp-keys-search' ); ?>\n+\t\t\u003C?php $table->display(); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fcontent.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fcontent.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fcontent.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fcontent.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,74 +1,74 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-$wizard = LP_Setup_Wizard::instance();\r\n-\r\n-if ( ! isset( $steps ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv id=\"main\">\r\n-\t\u003Cdiv class=\"lp-setup-nav\">\r\n-\t\t\u003Cul class=\"lp-setup-steps\">\r\n-\t\t\t\u003C?php foreach ( $steps as $key => $step ) { ?>\r\n-\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $wizard->get_current_step() == $key ? 'active' : '' ); ?>\">\r\n-\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( $step['title'] ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php } ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\t\u003Cdiv class=\"lp-setup-progress\">\r\n-\t\t\t\u003Cdiv class=\"active\"\r\n-\t\t\t\tstyle=\"width: \u003C?php echo intval( ( $wizard->get_step_position() + 1 ) \u002F sizeof( $steps ) * 100 ); ?>%;\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cform id=\"learn-press-setup-form\" class=\"lp-setup-content\" name=\"lp-setup\" method=\"post\">\r\n-\t\t\u003C?php\r\n-\t\t$step = $wizard->get_current_step( false );\r\n-\t\t?>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"lp-setup-nonce\"\r\n-\t\t\tvalue=\"\u003C?php echo wp_create_nonce( 'lp-setup-step-' . $step['slug'] ); ?>\">\r\n-\t\t\u003Cinput type=\"hidden\" name=\"lp-setup-step\"\r\n-\t\t\tvalue=\"\u003C?php echo esc_attr( $step['slug'] ); ?>\">\r\n-\t\t\u003C?php call_user_func( $step['callback'] ); ?>\r\n-\t\t\u003C?php if ( ! $wizard->is_last_step() ) { ?>\r\n-\t\t\t\u003Cdiv class=\"buttons\">\r\n-\t\t\t\t\u003C?php if ( ! $wizard->is_first_step() && ! ( array_key_exists( 'back_button', $step ) && $step['back_button'] === false ) ) { ?>\r\n-\t\t\t\t\t\u003Ca class=\"button button-prev\" href=\"\u003C?php echo esc_url_raw( $wizard->get_prev_url() ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tif ( ! empty( $step['next_button'] ) ) {\r\n-\t\t\t\t\t\t\techo wp_kses_post( $step['back_button'] );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t_e( 'Back', 'learnpress' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\t\u003C?php if ( ! $wizard->is_last_step() && ! ( array_key_exists( 'next_button', $step ) && $step['next_button'] === false ) ) { ?>\r\n-\t\t\t\t\t\u003Ca class=\"button button-next button-primary\" href=\"\u003C?php echo esc_url_raw( $wizard->get_next_url() ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tif ( ! empty( $step['next_button'] ) ) {\r\n-\t\t\t\t\t\t\techo wp_kses_post( $step['next_button'] );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t_e( 'Continue', 'learnpress' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php } else { ?>\r\n-\t\t\t\t\t\u003Ca class=\"button button-finish\">\r\n-\t\t\t\t\t\t\u003C?php _e( 'Finish', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php } ?>\r\n-\t\u003C\u002Fform>\r\n-\t\u003Cspan class=\"icon-loading\">\u003C\u002Fspan>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+$wizard = LP_Setup_Wizard::instance();\n+\n+if ( ! isset( $steps ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv id=\"main\">\n+\t\u003Cdiv class=\"lp-setup-nav\">\n+\t\t\u003Cul class=\"lp-setup-steps\">\n+\t\t\t\u003C?php foreach ( $steps as $key => $step ) { ?>\n+\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $wizard->get_current_step() == $key ? 'active' : '' ); ?>\">\n+\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( $step['title'] ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php } ?>\n+\t\t\u003C\u002Ful>\n+\t\t\u003Cdiv class=\"lp-setup-progress\">\n+\t\t\t\u003Cdiv class=\"active\"\n+\t\t\t\tstyle=\"width: \u003C?php echo intval( ( $wizard->get_step_position() + 1 ) \u002F sizeof( $steps ) * 100 ); ?>%;\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cform id=\"learn-press-setup-form\" class=\"lp-setup-content\" name=\"lp-setup\" method=\"post\">\n+\t\t\u003C?php\n+\t\t$step = $wizard->get_current_step( false );\n+\t\t?>\n+\t\t\u003Cinput type=\"hidden\" name=\"lp-setup-nonce\"\n+\t\t\tvalue=\"\u003C?php echo wp_create_nonce( 'lp-setup-step-' . $step['slug'] ); ?>\">\n+\t\t\u003Cinput type=\"hidden\" name=\"lp-setup-step\"\n+\t\t\tvalue=\"\u003C?php echo esc_attr( $step['slug'] ); ?>\">\n+\t\t\u003C?php call_user_func( $step['callback'] ); ?>\n+\t\t\u003C?php if ( ! $wizard->is_last_step() ) { ?>\n+\t\t\t\u003Cdiv class=\"buttons\">\n+\t\t\t\t\u003C?php if ( ! $wizard->is_first_step() && ! ( array_key_exists( 'back_button', $step ) && $step['back_button'] === false ) ) { ?>\n+\t\t\t\t\t\u003Ca class=\"button button-prev\" href=\"\u003C?php echo esc_url_raw( $wizard->get_prev_url() ); ?>\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tif ( ! empty( $step['next_button'] ) ) {\n+\t\t\t\t\t\t\techo wp_kses_post( $step['back_button'] );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t_e( 'Back', 'learnpress' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php } ?>\n+\t\t\t\t\u003C?php if ( ! $wizard->is_last_step() && ! ( array_key_exists( 'next_button', $step ) && $step['next_button'] === false ) ) { ?>\n+\t\t\t\t\t\u003Ca class=\"button button-next button-primary\" href=\"\u003C?php echo esc_url_raw( $wizard->get_next_url() ); ?>\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tif ( ! empty( $step['next_button'] ) ) {\n+\t\t\t\t\t\t\techo wp_kses_post( $step['next_button'] );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t_e( 'Continue', 'learnpress' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php } else { ?>\n+\t\t\t\t\t\u003Ca class=\"button button-finish\">\n+\t\t\t\t\t\t\u003C?php _e( 'Finish', 'learnpress' ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php } ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php } ?>\n+\t\u003C\u002Fform>\n+\t\u003Cspan class=\"icon-loading\">\u003C\u002Fspan>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Ffooter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Ffooter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Ffooter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Ffooter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying footer of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-do_action( 'admin_print_footer_scripts' );\r\n-\u002F\u002Fdo_action( 'admin_footer' );\r\n-?>\r\n-\r\n-\u003Cfooter>\r\n-\t\u003Cp>\u003C?php printf( __( 'LearnPress %s. Designed by @ThimPress.', 'learnpress' ), LEARNPRESS_VERSION ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\u003Ca class=\"button-dashboard-page\" href=\"\u003C?php echo admin_url( 'index.php' ); ?>\">\u003C?php _e( 'Back to Dashboard', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fp>\r\n-\u003C\u002Ffooter>\r\n-\u003C\u002Fdiv>\r\n-\u003C\u002Fbody>\r\n-\u003C\u002Fhtml>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying footer of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+do_action( 'admin_print_footer_scripts' );\n+\u002F\u002Fdo_action( 'admin_footer' );\n+?>\n+\n+\u003Cfooter>\n+\t\u003Cp>\u003C?php printf( __( 'LearnPress %s. Designed by @ThimPress.', 'learnpress' ), LEARNPRESS_VERSION ); ?>\u003C\u002Fp>\n+\t\u003Cp>\u003Ca class=\"button-dashboard-page\" href=\"\u003C?php echo admin_url( 'index.php' ); ?>\">\u003C?php _e( 'Back to Dashboard', 'learnpress' ); ?>\u003C\u002Fa>\u003C\u002Fp>\n+\u003C\u002Ffooter>\n+\u003C\u002Fdiv>\n+\u003C\u002Fbody>\n+\u003C\u002Fhtml>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fheader.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fheader.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fheader.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fheader.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying header of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\u003C!DOCTYPE html>\r\n-\u003Chtml \u003C?php language_attributes(); ?>>\r\n-\u003Chead>\r\n-\t\u003Cmeta name=\"viewport\" content=\"width=device-width\"\u002F>\r\n-\t\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=utf-8\"\u002F>\r\n-\t\u003Ctitle>\u003C?php esc_html_e( 'LearnPress &rsaquo; Setup Wizard', 'learnpress' ); ?>\u003C\u002Ftitle>\r\n-\t\u003C?php\r\n-\twp_print_scripts( 'lp-setup' );\r\n-\tremove_action( 'admin_print_styles', 'print_emoji_styles' );\r\n-\tdo_action( 'admin_print_styles' );\r\n-\tdo_action( 'admin_print_scripts' );\r\n-\t?>\r\n-\u003C\u002Fhead>\r\n-\u003Cbody class=\"lp-setup wp-core-ui js\">\r\n-\u003Cdiv id=\"content\">\r\n-\t\u003Cdiv class=\"logo\">\r\n-\t\t\u003Ca href=\"javascript:void(0)\">\r\n-\t\t\t\u003C?php $logoUrl = LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficon-128x128.png'; ?>\r\n-\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $logoUrl ); ?>\">\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying header of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\u003C!DOCTYPE html>\n+\u003Chtml \u003C?php language_attributes(); ?>>\n+\u003Chead>\n+\t\u003Cmeta name=\"viewport\" content=\"width=device-width\"\u002F>\n+\t\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=utf-8\"\u002F>\n+\t\u003Ctitle>\u003C?php esc_html_e( 'LearnPress &rsaquo; Setup Wizard', 'learnpress' ); ?>\u003C\u002Ftitle>\n+\t\u003C?php\n+\twp_print_scripts( 'lp-setup' );\n+\tremove_action( 'admin_print_styles', 'print_emoji_styles' );\n+\tdo_action( 'admin_print_styles' );\n+\tdo_action( 'admin_print_scripts' );\n+\t?>\n+\u003C\u002Fhead>\n+\u003Cbody class=\"lp-setup wp-core-ui js\">\n+\u003Cdiv id=\"content\">\n+\t\u003Cdiv class=\"logo\">\n+\t\t\u003Ca href=\"javascript:void(0)\">\n+\t\t\t\u003C?php $logoUrl = LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficon-128x128.png'; ?>\n+\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $logoUrl ); ?>\">\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-paypal.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-paypal.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-paypal.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-paypal.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying paypal settings of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-\r\n-$settings = LP_Settings::instance();\r\n-\r\n-?>\r\n-\u003Ctable>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Paypal Email', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cinput class=\"regular-text\" type=\"email\" name=\"settings[paypal][paypal_email]\" id=\"settings-paypal-email\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'paypal.paypal_email', '' ) ); ?>\">\r\n-\t\t\t\u003Cp class=\"description\">\r\n-\t\t\t\t\u003C?php _e( 'Your Paypal email is in live mode.', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"settings[paypal][enable]\" value=\"yes\"\u002F>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cselect id=\"currency\" name=\"settings[currency][currency]\" class=\"lp-tom-select\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$payment_currencies = learn_press_currencies();\r\n-\r\n-\t\t\t\tif ( $payment_currencies ) {\r\n-\t\t\t\t\tforeach ( $payment_currencies as $code => $symbol ) {\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $code ); ?>\" data-symbol=\"\u003C?php echo learn_press_get_currency_symbol( $code ); ?>\" \u003C?php selected( $code == 'USD' ); ?>>\u003C?php echo esc_html( $symbol ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Ftable>\r\n-\r\n-\u003Cinput type=\"hidden\" name=\"settings[currency][currency_pos]\" value=\"left\"\u002F>\r\n-\u003Cinput type=\"hidden\" name=\"settings[currency][thousands_separator]\" value=\",\"\u002F>\r\n-\u003Cinput type=\"hidden\" name=\"settings[currency][decimals_separator]\" value=\".\"\u002F>\r\n-\u003Cinput type=\"hidden\" name=\"settings[currency][number_of_decimals]\" value=\"2\"\u002F>\r\n-\r\n-\u003Cscript>\r\n-\tjQuery(function ($) {\r\n-\t\t$('#settings-paypal-email').focus();\r\n-\t})\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying paypal settings of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+\n+$settings = LP_Settings::instance();\n+\n+?>\n+\u003Ctable>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Paypal Email', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cinput class=\"regular-text\" type=\"email\" name=\"settings[paypal][paypal_email]\" id=\"settings-paypal-email\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'paypal.paypal_email', '' ) ); ?>\">\n+\t\t\t\u003Cp class=\"description\">\n+\t\t\t\t\u003C?php _e( 'Your Paypal email is in live mode.', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fp>\n+\t\t\t\u003Cinput type=\"hidden\" name=\"settings[paypal][enable]\" value=\"yes\"\u002F>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cselect id=\"currency\" name=\"settings[currency][currency]\" class=\"lp-tom-select\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$payment_currencies = learn_press_currencies();\n+\n+\t\t\t\tif ( $payment_currencies ) {\n+\t\t\t\t\tforeach ( $payment_currencies as $code => $symbol ) {\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $code ); ?>\" data-symbol=\"\u003C?php echo learn_press_get_currency_symbol( $code ); ?>\" \u003C?php selected( $code == 'USD' ); ?>>\u003C?php echo esc_html( $symbol ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Ftable>\n+\n+\u003Cinput type=\"hidden\" name=\"settings[currency][currency_pos]\" value=\"left\"\u002F>\n+\u003Cinput type=\"hidden\" name=\"settings[currency][thousands_separator]\" value=\",\"\u002F>\n+\u003Cinput type=\"hidden\" name=\"settings[currency][decimals_separator]\" value=\".\"\u002F>\n+\u003Cinput type=\"hidden\" name=\"settings[currency][number_of_decimals]\" value=\"2\"\u002F>\n+\n+\u003Cscript>\n+\tjQuery(function ($) {\n+\t\t$('#settings-paypal-email').focus();\n+\t})\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003Ctable>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Enable', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Title', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Live secret key', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Live publish key', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Test mode', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Test secret key', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Test publish key', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\r\n-\u003C\u002Ftable>\r\n+\u003Ctable>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Enable', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Title', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Description', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Live secret key', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Live publish key', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Test mode', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"checkbox\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Test secret key', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Test publish key', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003Cinput type=\"text\">\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fcurrency.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fcurrency.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fcurrency.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fcurrency.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,83 +1,83 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying currency form while setting up.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-\r\n-\u002F\u002F $settings      = LP_Settings::instance()->refresh();\r\n-$settings      = LP_Settings::instance();\r\n-$currency      = $settings->get( 'currency', 'USD' );\r\n-$preview_price = '';\r\n-?>\r\n-\r\n-\u003Ch2>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Ctable>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cselect id=\"currency\" name=\"settings[currency][currency]\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$payment_currencies = learn_press_currencies();\r\n-\t\t\t\tif ( $payment_currencies ) {\r\n-\t\t\t\t\tforeach ( $payment_currencies as $code => $symbol ) {\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $code ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-symbol=\"\u003C?php echo learn_press_get_currency_symbol( $code ); ?>\" \u003C?php selected( $code == $currency ); ?>>\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $symbol ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Foption>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Currency position', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cselect id=\"currency-pos\" name=\"settings[currency][currency_pos]\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$positions = array();\r\n-\t\t\t\tforeach ( learn_press_currency_positions() as $pos => $text ) {\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $pos ); ?>\"\u003C?php selected( $pos == $settings->get( 'currency_pos' ) ); ?>>\u003C?php echo wp_kses_post( $text ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fselect>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Thousands Separator', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cinput id=\"thousands-separator\" type=\"text\" name=\"settings[currency][thousands_separator]\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'thousands_separator', ',' ) ); ?>\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Decimal separator', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cinput id=\"decimals-separator\" type=\"text\" name=\"settings[currency][decimals_separator]\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'decimals_separator', '.' ) ); ?>\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'The number of decimals', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cinput id=\"number-of-decimals\" type=\"text\" name=\"settings[currency][number_of_decimals]\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'number_of_decimals', '2' ) ); ?>\">\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003Cdiv id=\"preview-price\">\u003C?php echo learn_press_format_price( 1234.56, true ); ?>\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Ftable>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying currency form while setting up.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+\n+\u002F\u002F $settings      = LP_Settings::instance()->refresh();\n+$settings      = LP_Settings::instance();\n+$currency      = $settings->get( 'currency', 'USD' );\n+$preview_price = '';\n+?>\n+\n+\u003Ch2>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Ctable>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Currency', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cselect id=\"currency\" name=\"settings[currency][currency]\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$payment_currencies = learn_press_currencies();\n+\t\t\t\tif ( $payment_currencies ) {\n+\t\t\t\t\tforeach ( $payment_currencies as $code => $symbol ) {\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $code ); ?>\"\n+\t\t\t\t\t\t\t\tdata-symbol=\"\u003C?php echo learn_press_get_currency_symbol( $code ); ?>\" \u003C?php selected( $code == $currency ); ?>>\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $symbol ); ?>\n+\t\t\t\t\t\t\u003C\u002Foption>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Currency position', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cselect id=\"currency-pos\" name=\"settings[currency][currency_pos]\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$positions = array();\n+\t\t\t\tforeach ( learn_press_currency_positions() as $pos => $text ) {\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $pos ); ?>\"\u003C?php selected( $pos == $settings->get( 'currency_pos' ) ); ?>>\u003C?php echo wp_kses_post( $text ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fselect>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Thousands Separator', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cinput id=\"thousands-separator\" type=\"text\" name=\"settings[currency][thousands_separator]\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'thousands_separator', ',' ) ); ?>\">\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Decimal separator', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cinput id=\"decimals-separator\" type=\"text\" name=\"settings[currency][decimals_separator]\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'decimals_separator', '.' ) ); ?>\">\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'The number of decimals', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cinput id=\"number-of-decimals\" type=\"text\" name=\"settings[currency][number_of_decimals]\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $settings->get( 'number_of_decimals', '2' ) ); ?>\">\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003Cdiv id=\"preview-price\">\u003C?php echo learn_press_format_price( 1234.56, true ); ?>\u003C\u002Fdiv>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Femails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Femails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Femails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Femails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying finish step.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-?>\r\n-\u003Ch2>\u003C?php _e( 'Emails system', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Cp>\u003C?php _e( 'Emails are sent to users or teachers for each particular action.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php _e( 'You can enable\u002Fdisable each email in your LearnPress settings later.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php _e( 'But right now, you can enable all emails to see how emails work.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php _e( 'You can skip to the next step if you don’t want to.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\u003Cp>\r\n-\t\u003Clabel>\r\n-\t\t\u003Cinput type=\"checkbox\" name=\"settings[emails][enable]\" value=\"yes\">\r\n-\t\t\u003C?php _e( 'Enable emails', 'learnpress' ); ?>\r\n-\t\u003C\u002Flabel>\r\n-\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying finish step.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+?>\n+\u003Ch2>\u003C?php _e( 'Emails system', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Cp>\u003C?php _e( 'Emails are sent to users or teachers for each particular action.', 'learnpress' ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php _e( 'You can enable\u002Fdisable each email in your LearnPress settings later.', 'learnpress' ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php _e( 'But right now, you can enable all emails to see how emails work.', 'learnpress' ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php _e( 'You can skip to the next step if you don’t want to.', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\u003Cp>\n+\t\u003Clabel>\n+\t\t\u003Cinput type=\"checkbox\" name=\"settings[emails][enable]\" value=\"yes\">\n+\t\t\u003C?php _e( 'Enable emails', 'learnpress' ); ?>\n+\t\u003C\u002Flabel>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Ffinish.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Ffinish.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Ffinish.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Ffinish.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying finish step.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-?>\r\n-\u003Ch2>\u003C?php _e( 'Finish', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Cp>\u003C?php _e( 'LearnPress LMS is ready to go!', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\u003Cp class=\"finish-buttons\">\r\n-\t\u003Ca class=\"button\"\r\n-\t\tid=\"install-sample-course\"\r\n-\t\thref=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-tools' ) ); ?>\">\r\n-\t\t\u003C?php _e( 'Install a demo course', 'learnpress' ); ?>\r\n-\t\u003C\u002Fa>\r\n-\r\n-\t\u003Ca class=\"button\" href=\"\u003C?php echo LearnPress::$doc_link; ?>\">\r\n-\t\t\u003C?php _e( 'View Documentation', 'learnpress' ); ?>\r\n-\t\u003C\u002Fa>\r\n-\r\n-\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( admin_url( 'post-new.php?post_type=lp_course' ) ); ?>\">\r\n-\t\t\u003C?php _e( 'Create a new course', 'learnpress' ); ?>\r\n-\t\u003C\u002Fa>\r\n-\r\n-\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( admin_url( 'index.php' ) ); ?>\">\r\n-\t\t\u003C?php _e( 'Back to Dashboard', 'learnpress' ); ?>\r\n-\t\u003C\u002Fa>\r\n-\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying finish step.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+?>\n+\u003Ch2>\u003C?php _e( 'Finish', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Cp>\u003C?php _e( 'LearnPress LMS is ready to go!', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\u003Cp class=\"finish-buttons\">\n+\t\u003Ca class=\"button\"\n+\t\tid=\"install-sample-course\"\n+\t\thref=\"\u003C?php echo esc_url_raw( admin_url( 'admin.php?page=learn-press-tools' ) ); ?>\">\n+\t\t\u003C?php _e( 'Install a demo course', 'learnpress' ); ?>\n+\t\u003C\u002Fa>\n+\n+\t\u003Ca class=\"button\" href=\"\u003C?php echo LearnPress::$doc_link; ?>\">\n+\t\t\u003C?php _e( 'View Documentation', 'learnpress' ); ?>\n+\t\u003C\u002Fa>\n+\n+\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( admin_url( 'post-new.php?post_type=lp_course' ) ); ?>\">\n+\t\t\u003C?php _e( 'Create a new course', 'learnpress' ); ?>\n+\t\u003C\u002Fa>\n+\n+\t\u003Ca class=\"button\" href=\"\u003C?php echo esc_url_raw( admin_url( 'index.php' ) ); ?>\">\n+\t\t\u003C?php _e( 'Back to Dashboard', 'learnpress' ); ?>\n+\t\u003C\u002Fa>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpages.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpages.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpages.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpages.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying setup form of static pages while setting up LP\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-\r\n-$settings = LP_Settings::instance();\r\n-?>\r\n-\u003Ch2>\u003C?php _e( 'Static Pages', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Cp>\u003C?php _e( 'The pages will display the content of LP\\'s necessary pages, such as Courses, Checkout, and Profile.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\u003Cp>\u003C?php printf( __( 'If you are not sure, click \u003Ca href=\"%s\" id=\"create-pages\">here\u003C\u002Fa> to create pages automatically.', 'learnpress' ), wp_nonce_url( admin_url( 'index.php?page=lp-setup&step=pages&auto-create' ) ), 'setup-create-pages' ); ?>\u003C\u002Fp>\r\n-\r\n-\u003Ctable class=\"form-field\">\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Show a list of courses', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][courses_page_id]', $settings->get( 'courses_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Show a list of instructors', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][instructors_page_id]', $settings->get( 'instructors_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Single instructor', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][single_instructor_page_id]', $settings->get( 'single_instructor_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Profile', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][profile_page_id]', $settings->get( 'profile_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Checkout', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][checkout_page_id]', $settings->get( 'checkout_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Become a Teacher', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][become_a_teacher_page_id]', $settings->get( 'become_a_teacher_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\r\n-\t\t\t\u003C?php _e( 'Page: Terms and Conditions', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fth>\r\n-\t\t\u003Ctd>\r\n-\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][term_conditions_page_id]', $settings->get( 'term_conditions_page_id' ) ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Ftable>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying setup form of static pages while setting up LP\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+\n+$settings = LP_Settings::instance();\n+?>\n+\u003Ch2>\u003C?php _e( 'Static Pages', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Cp>\u003C?php _e( 'The pages will display the content of LP\\'s necessary pages, such as Courses, Checkout, and Profile.', 'learnpress' ); ?>\u003C\u002Fp>\n+\u003Cp>\u003C?php printf( __( 'If you are not sure, click \u003Ca href=\"%s\" id=\"create-pages\">here\u003C\u002Fa> to create pages automatically.', 'learnpress' ), wp_nonce_url( admin_url( 'index.php?page=lp-setup&step=pages&auto-create' ) ), 'setup-create-pages' ); ?>\u003C\u002Fp>\n+\n+\u003Ctable class=\"form-field\">\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Show a list of courses', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][courses_page_id]', $settings->get( 'courses_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Show a list of instructors', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][instructors_page_id]', $settings->get( 'instructors_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Single instructor', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][single_instructor_page_id]', $settings->get( 'single_instructor_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Profile', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][profile_page_id]', $settings->get( 'profile_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Checkout', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][checkout_page_id]', $settings->get( 'checkout_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Become a Teacher', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][become_a_teacher_page_id]', $settings->get( 'become_a_teacher_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\n+\t\t\t\u003C?php _e( 'Page: Terms and Conditions', 'learnpress' ); ?>\n+\t\t\u003C\u002Fth>\n+\t\t\u003Ctd>\n+\t\t\t\u003C?php learn_press_pages_dropdown( 'settings[pages][term_conditions_page_id]', $settings->get( 'term_conditions_page_id' ) ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpayment.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpayment.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpayment.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpayment.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying payments of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-\r\n-$wizard   = LP_Setup_Wizard::instance();\r\n-$payments = $wizard->get_payments();\r\n-\r\n-?>\r\n-\u003Ch2>\u003C?php _e( 'Payment', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Cp class=\"large-text\">\u003C?php _e( 'LearnPress can accept both online and offline payments. Additional payment addons can be installed later.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\u003Cul class=\"browse-payments\">\r\n-\t\u003C?php foreach ( $payments as $slug => $payment ) { ?>\r\n-\t\t\u003Cli class=\"payment payment-\u003C?php echo esc_attr( $slug ); ?>\">\r\n-\t\t\t\u003Ch3 class=\"payment-name\">\r\n-\t\t\t\t\u003C?php if ( ! empty( $payment['icon'] ) ) { ?>\r\n-\t\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $payment['icon'] ); ?>\">\r\n-\t\t\t\t\u003C?php } else { ?>\r\n-\t\t\t\t\t\u003C?php echo esc_html( $payment['name'] ); ?>\r\n-\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\u003C\u002Fh3>\r\n-\t\t\t\u003C?php if ( ! empty( $payment['desc'] ) ) { ?>\r\n-\t\t\t\t\u003Cp class=\"payment-desc\">\u003C?php echo wp_kses_post( $payment['desc'] ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C?php } ?>\r\n-\t\t\t\u003Cdiv class=\"payment-settings\">\r\n-\t\t\t\t\u003C?php call_user_func( $payment['callback'] ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C?php } ?>\r\n-\u003C\u002Ful>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying payments of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+\n+$wizard   = LP_Setup_Wizard::instance();\n+$payments = $wizard->get_payments();\n+\n+?>\n+\u003Ch2>\u003C?php _e( 'Payment', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Cp class=\"large-text\">\u003C?php _e( 'LearnPress can accept both online and offline payments. Additional payment addons can be installed later.', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\u003Cul class=\"browse-payments\">\n+\t\u003C?php foreach ( $payments as $slug => $payment ) { ?>\n+\t\t\u003Cli class=\"payment payment-\u003C?php echo esc_attr( $slug ); ?>\">\n+\t\t\t\u003Ch3 class=\"payment-name\">\n+\t\t\t\t\u003C?php if ( ! empty( $payment['icon'] ) ) { ?>\n+\t\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $payment['icon'] ); ?>\">\n+\t\t\t\t\u003C?php } else { ?>\n+\t\t\t\t\t\u003C?php echo esc_html( $payment['name'] ); ?>\n+\t\t\t\t\u003C?php } ?>\n+\t\t\t\u003C\u002Fh3>\n+\t\t\t\u003C?php if ( ! empty( $payment['desc'] ) ) { ?>\n+\t\t\t\t\u003Cp class=\"payment-desc\">\u003C?php echo wp_kses_post( $payment['desc'] ); ?>\u003C\u002Fp>\n+\t\t\t\u003C?php } ?>\n+\t\t\t\u003Cdiv class=\"payment-settings\">\n+\t\t\t\t\u003C?php call_user_func( $payment['callback'] ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\u003C?php } ?>\n+\u003C\u002Ful>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fwelcome.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fwelcome.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fwelcome.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fwelcome.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying welcome step of setup wizard.\r\n- *\r\n- * @author  ThimPres\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit;\r\n-?>\r\n-\u003Ch2>\u003C?php _e( 'Welcome to LearnPress', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\r\n-\u003Cp class=\"large-text\">\u003C?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\u003Cp class=\"large-text\">\u003C?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?>\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying welcome step of setup wizard.\n+ *\n+ * @author  ThimPres\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit;\n+?>\n+\u003Ch2>\u003C?php _e( 'Welcome to LearnPress', 'learnpress' ); ?>\u003C\u002Fh2>\n+\n+\u003Cp class=\"large-text\">\u003C?php _e( 'Thanks for choosing LearnPress to sell your online courses!', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\u003Cp class=\"large-text\">\u003C?php _e( 'The following wizard will help you configure your LMS site and get you started quickly.', 'learnpress' ); ?>\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying orders statistics tab Courses statistics page.\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-statistics-tab-content\">\r\n-\t\u003Cdiv class=\"btn-group btn-group-filter\">\r\n-\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cdiv class=\"custom-filter-time\">\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\r\n-\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"statistics-content\">\r\n-\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"courses-statistics\">\r\n-\t\t\u003Cdiv class=\"statistics-group\">\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses total\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Published Courses', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses published\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Pending Courses', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses pending\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Future Courses', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses future\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Lessons', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items lessons\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Quizes', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items quizes\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php if ( class_exists( 'LP_Assignment' ) ) : ?>\r\n-\t\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Assginments', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items assignment\">0\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Published Courses', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv id=\"course-chart\" class=\"statistics-chart-wrapper\">\r\n-\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\u003Ccanvas id=\"course-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying orders statistics tab Courses statistics page.\n+ *\u002F\n+?>\n+\n+\u003Cdiv class=\"lp-admin-statistics-tab-content\">\n+\t\u003Cdiv class=\"btn-group btn-group-filter\">\n+\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cdiv class=\"custom-filter-time\">\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\n+\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"statistics-content\">\n+\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"courses-statistics\">\n+\t\t\u003Cdiv class=\"statistics-group\">\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses total\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Published Courses', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses published\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Pending Courses', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses pending\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Future Courses', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-courses future\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Lessons', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items lessons\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Quizes', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items quizes\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php if ( class_exists( 'LP_Assignment' ) ) : ?>\n+\t\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Assginments', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-items assignment\">0\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Published Courses', 'learnpress' ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv id=\"course-chart\" class=\"statistics-chart-wrapper\">\n+\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\u003Ccanvas id=\"course-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying orders statistics tab Orders statistics page.\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-statistics-tab-content\">\r\n-\t\u003Cdiv class=\"btn-group btn-group-filter\">\r\n-\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cdiv class=\"custom-filter-time\">\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\r\n-\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"statistics-content\">\r\n-\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"orders-statistics\">\r\n-\t\t\u003Cdiv class=\"statistics-group group-statistic-order\">\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Completed Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count completed-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Proccessing Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count processing-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Pending Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count pending-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Cancelled Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count cancelled-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Fail Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count failed-order-count\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Completed Orders', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv id=\"orders-chart\" class=\"statistics-chart-wrapper\">\r\n-\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\u003Ccanvas id=\"orders-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying orders statistics tab Orders statistics page.\n+ *\u002F\n+?>\n+\n+\u003Cdiv class=\"lp-admin-statistics-tab-content\">\n+\t\u003Cdiv class=\"btn-group btn-group-filter\">\n+\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cdiv class=\"custom-filter-time\">\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\n+\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"statistics-content\">\n+\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"orders-statistics\">\n+\t\t\u003Cdiv class=\"statistics-group group-statistic-order\">\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Completed Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count completed-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Proccessing Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count processing-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Pending Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count pending-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Cancelled Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count cancelled-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Fail Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count failed-order-count\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Completed Orders', 'learnpress' ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv id=\"orders-chart\" class=\"statistics-chart-wrapper\">\n+\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\u003Ccanvas id=\"orders-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying orders statistics tab Overview statistics page.\r\n- *\u002F\r\n-?>\r\n-\u003Cdiv class=\"lp-admin-statistics-tab-content\">\r\n-\t\u003Cdiv class=\"btn-group btn-group-filter\">\r\n-\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cdiv class=\"custom-filter-time\">\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\r\n-\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"statistics-content\">\r\n-\t\t\u003Cdiv class=\"statistics-group group-statistic-overview\">\r\n-\t\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"overview-statistics\">\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Sales', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-sales\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Orders', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-orders\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-courses\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Instructors', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-instructors\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Students', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count total-students\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Net Sales', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv id=\"net-sales-chart\" class=\"statistics-chart-wrapper\">\r\n-\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\u003Ccanvas id=\"net-sales-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"sold-course-analytics\">\r\n-\t\t\t\u003Cdiv class=\"col-50\">\r\n-\t\t\t\t\u003Cdiv class=\"col-50-contents\">\r\n-\t\t\t\t\t\u003Ch5 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Courses Sold', 'learnpress' ); ?>\u003C\u002Fh5>\r\n-\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\t\t\u003Cul class=\"top-course-sold\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"col-50\">\r\n-\t\t\t\t\u003Cdiv class=\"col-50-contents\">\r\n-\t\t\t\t\t\u003Ch5 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Categories Sold', 'learnpress' ); ?>\u003C\u002Fh5>\r\n-\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\t\t\u003Cul class=\"top-category-sold\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying orders statistics tab Overview statistics page.\n+ *\u002F\n+?>\n+\u003Cdiv class=\"lp-admin-statistics-tab-content\">\n+\t\u003Cdiv class=\"btn-group btn-group-filter\">\n+\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cdiv class=\"custom-filter-time\">\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\n+\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"statistics-content\">\n+\t\t\u003Cdiv class=\"statistics-group group-statistic-overview\">\n+\t\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"overview-statistics\">\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Sales', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-sales\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Orders', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-orders\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-courses\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Instructors', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-instructors\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Total Students', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count total-students\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Net Sales', 'learnpress' ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv id=\"net-sales-chart\" class=\"statistics-chart-wrapper\">\n+\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\u003Ccanvas id=\"net-sales-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"sold-course-analytics\">\n+\t\t\t\u003Cdiv class=\"col-50\">\n+\t\t\t\t\u003Cdiv class=\"col-50-contents\">\n+\t\t\t\t\t\u003Ch5 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Courses Sold', 'learnpress' ); ?>\u003C\u002Fh5>\n+\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\t\t\u003Cul class=\"top-course-sold\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"col-50\">\n+\t\t\t\t\u003Cdiv class=\"col-50-contents\">\n+\t\t\t\t\t\u003Ch5 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Categories Sold', 'learnpress' ); ?>\u003C\u002Fh5>\n+\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\t\t\u003Cul class=\"top-category-sold\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying orders statistics tab Users statistics page.\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-admin-statistics-tab-content\">\r\n-\t\u003Cdiv class=\"btn-group btn-group-filter\">\r\n-\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cdiv class=\"custom-filter-time\">\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\r\n-\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\r\n-\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"statistics-content\">\r\n-\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"users-statistics\">\r\n-\t\t\u003Cdiv class=\"statistics-group\">\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Users activated', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-user-actived\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Instructors', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-instructors\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Students', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-students\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Inprogress', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-graduration in-progress\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Finished', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-graduration finished\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"statistics-item\">\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Not Started', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-not-started\">0\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Registed Users', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv id=\"user-chart\" class=\"statistics-chart-wrapper\">\r\n-\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\u003Ccanvas id=\"user-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"sold-course-analytics\">\r\n-\t\t\t\u003Cdiv class=\"col-50\">\r\n-\t\t\t\t\u003Cdiv class=\"col-50-contents\">\r\n-\t\t\t\t\t\u003Ch4 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Courses By Students', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\t\t\u003Cul class=\"top-course-by-student\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"col-50\">\r\n-\t\t\t\t\u003Cdiv class=\"col-50-contents\">\r\n-\t\t\t\t\t\u003Ch4 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Instructors By Students Enrolled Times', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\r\n-\t\t\t\t\t\u003Cul class=\"top-intructor-by-student\">\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying orders statistics tab Users statistics page.\n+ *\u002F\n+?>\n+\n+\u003Cdiv class=\"lp-admin-statistics-tab-content\">\n+\t\u003Cdiv class=\"btn-group btn-group-filter\">\n+\t\t\u003Cbutton class=\"btn-filter-time active\" type=\"button\" data-filter=\"today\" >\u003C?php _e( 'Today', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"yesterday\" >\u003C?php _e( 'Yesterday', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last7days\" >\u003C?php _e( 'Last 7 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last30days\" >\u003C?php _e( 'Last 30 days', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C!-- \u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thismonth\" >\u003C?php _e( 'This month', 'learnpress' ); ?>\u003C\u002Fbutton> -->\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"last12months\">\u003C?php _e( 'Last 12 months', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"thisyear\" >\u003C?php _e( 'This year', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton class=\"btn-filter-time\" type=\"button\" data-filter=\"custom\" >\u003C?php _e( 'Custom', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cdiv class=\"custom-filter-time\">\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-1\" \u002F>\n+\t\t\t\u003Cinput type=\"date\" id=\"ct-filter-2\">\n+\t\t\t\u003Cbutton class=\"custom-filter-btn button button-primary\" type=\"button\">\u003C?php _e( 'Filter', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"statistics-content\">\n+\t\t\u003Cinput class=\"statistics-type\" type=\"hidden\" value=\"users-statistics\">\n+\t\t\u003Cdiv class=\"statistics-group\">\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Users activated', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-user-actived\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Instructors', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-instructors\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Students', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-students\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Inprogress', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-graduration in-progress\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Finished', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-graduration finished\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"statistics-item\">\n+\t\t\t\t\u003Cspan class=\"statistics-item-title\">\u003C?php _e( 'Not Started', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"statistics-item-count statistics-not-started\">0\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Ch3 class=\"statistics-title\">\u003C?php _e( 'Registed Users', 'learnpress' ); ?>\u003C\u002Fh3>\n+\t\t\u003Cdiv id=\"user-chart\" class=\"statistics-chart-wrapper\">\n+\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\u003Ccanvas id=\"user-chart-content\" style=\"display: none;\">\u003C\u002Fcanvas>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"sold-course-analytics\">\n+\t\t\t\u003Cdiv class=\"col-50\">\n+\t\t\t\t\u003Cdiv class=\"col-50-contents\">\n+\t\t\t\t\t\u003Ch4 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Courses By Students', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\t\t\u003Cul class=\"top-course-by-student\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"col-50\">\n+\t\t\t\t\u003Cdiv class=\"col-50-contents\">\n+\t\t\t\t\t\u003Ch4 class=\"top-course-analytics-title\">\u003C?php _e( 'Top Instructors By Students Enrolled Times', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 10, 100 ); ?>\n+\t\t\t\t\t\u003Cul class=\"top-intructor-by-student\">\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsvg-icon.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsvg-icon.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fsvg-icon.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fsvg-icon.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying icon with six dots in 2 columns.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || die();\r\n-\r\n-$viewbox = isset( $viewbox ) ? $viewbox : '0 0 32 32';\r\n-$class   = isset( $class ) ? $class : 'svg-icon';\r\n-?>\r\n-\r\n-\u003Csvg class=\"\u003C?php echo esc_attr( $class ); ?>\" viewBox=\"\u003C?php echo esc_attr( $viewbox ); ?>\">\r\n-\t\u003Cpath d=\"M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z\">\u003C\u002Fpath>\r\n-\u003C\u002Fsvg>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying icon with six dots in 2 columns.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || die();\n+\n+$viewbox = isset( $viewbox ) ? $viewbox : '0 0 32 32';\n+$class   = isset( $class ) ? $class : 'svg-icon';\n+?>\n+\n+\u003Csvg class=\"\u003C?php echo esc_attr( $class ); ?>\" viewBox=\"\u003C?php echo esc_attr( $viewbox ); ?>\">\n+\t\u003Cpath d=\"M 14 5.5 a 3 3 0 1 1 -3 -3 A 3 3 0 0 1 14 5.5 Z m 7 3 a 3 3 0 1 0 -3 -3 A 3 3 0 0 0 21 8.5 Z m -10 4 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 12.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 12.5 Z m -10 10 a 3 3 0 1 0 3 3 A 3 3 0 0 0 11 22.5 Z m 10 0 a 3 3 0 1 0 3 3 A 3 3 0 0 0 21 22.5 Z\">\u003C\u002Fpath>\n+\u003C\u002Fsvg>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-assign-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-assign-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-assign-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-assign-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,99 +1,99 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @since 4.2.5.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-$data_struct_course = [\r\n-\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\r\n-\t'dataType'    => 'courses',\r\n-\t'keyGetValue' => [\r\n-\t\t'value'      => 'ID',\r\n-\t\t'text'       => '{{post_title}} (#{{ID}})',\r\n-\t\t'key_render' => [\r\n-\t\t\t'post_title' => 'post_title',\r\n-\t\t\t'ID'         => 'ID',\r\n-\t\t],\r\n-\t],\r\n-\t'setting'     => [\r\n-\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\r\n-\t],\r\n-];\r\n-$assign_course      = new LP_Meta_Box_Select_Field(\r\n-\tesc_html__( 'Choose Course', 'learnpress' ),\r\n-\t[],\r\n-\t'',\r\n-\t[\r\n-\t\t'options'           => array(),\r\n-\t\t'tom_select'        => true,\r\n-\t\t'multiple'          => true,\r\n-\t\t'name_no_bracket'   => true,\r\n-\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_course ) ) ],\r\n-\t]\r\n-);\r\n-$assign_course->id  = 'course_ids';\r\n-\r\n-$data_struct_user = [\r\n-\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\r\n-\t'dataType'    => 'users',\r\n-\t'keyGetValue' => [\r\n-\t\t'value'      => 'ID',\r\n-\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\r\n-\t\t'key_render' => [\r\n-\t\t\t'display_name' => 'display_name',\r\n-\t\t\t'user_email'   => 'user_email',\r\n-\t\t\t'ID'           => 'ID',\r\n-\t\t],\r\n-\t],\r\n-\t'setting'     => [\r\n-\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\r\n-\t],\r\n-];\r\n-$assign_user      = new LP_Meta_Box_Select_Field(\r\n-\tesc_html__( 'Chose User', 'learnpress' ),\r\n-\t[],\r\n-\t'',\r\n-\t[\r\n-\t\t'options'           => array(),\r\n-\t\t'tom_select'        => true,\r\n-\t\t'multiple'          => true,\r\n-\t\t'name_no_bracket'   => true,\r\n-\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_user ) ) ],\r\n-\t]\r\n-);\r\n-$assign_user->id  = 'user_ids';\r\n-?>\r\n-\u003Cdiv id=\"learn-press-assign-course\" class=\"card\">\r\n-\t\u003Ch2>\u003C?php _e( 'Assign Course', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cdiv class=\"description\">\r\n-\t\t\u003C?php _e( 'User can enroll in a specific course by manually assign to them.', 'learnpress' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Ci style=\"color: #a20707\">\r\n-\t\t\u003C?php _e( 'Noted: when assign user to course, the progress old of user with course assign will eraser, so be careful before do this.', 'learnpress' ); ?>\r\n-\t\u003C\u002Fi>\r\n-\t\u003Cdiv class=\"content\">\r\n-\t\t\u003Cform id=\"lp-assign-user-course-form\" name=\"\" method=\"post\">\r\n-\t\t\t\u003Cfieldset class=\"lp-assign-course__options\">\r\n-\t\t\t\t\u003Cul>\r\n-\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\u003C?php $assign_course->output( 0 ); ?>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"assign-to-user\">\r\n-\t\t\t\t\t\t\t\u003C?php $assign_user->output( 0 ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002Ffieldset>\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003Cbutton class=\"button button-primary lp-button-assign-course\" type=\"submit\">\r\n-\t\t\t\t\t\u003C?php _e( 'Assign', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003Cspan class=\"percent\" style=\"margin-left: 10px\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"message\" style=\"margin-left: 10px\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @since 4.2.5.6\n+ * @version 1.0.1\n+ *\u002F\n+\n+$data_struct_course = [\n+\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\n+\t'dataType'    => 'courses',\n+\t'keyGetValue' => [\n+\t\t'value'      => 'ID',\n+\t\t'text'       => '{{post_title}} (#{{ID}})',\n+\t\t'key_render' => [\n+\t\t\t'post_title' => 'post_title',\n+\t\t\t'ID'         => 'ID',\n+\t\t],\n+\t],\n+\t'setting'     => [\n+\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\n+\t],\n+];\n+$assign_course      = new LP_Meta_Box_Select_Field(\n+\tesc_html__( 'Choose Course', 'learnpress' ),\n+\t[],\n+\t'',\n+\t[\n+\t\t'options'           => array(),\n+\t\t'tom_select'        => true,\n+\t\t'multiple'          => true,\n+\t\t'name_no_bracket'   => true,\n+\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_course ) ) ],\n+\t]\n+);\n+$assign_course->id  = 'course_ids';\n+\n+$data_struct_user = [\n+\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\n+\t'dataType'    => 'users',\n+\t'keyGetValue' => [\n+\t\t'value'      => 'ID',\n+\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\n+\t\t'key_render' => [\n+\t\t\t'display_name' => 'display_name',\n+\t\t\t'user_email'   => 'user_email',\n+\t\t\t'ID'           => 'ID',\n+\t\t],\n+\t],\n+\t'setting'     => [\n+\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\n+\t],\n+];\n+$assign_user      = new LP_Meta_Box_Select_Field(\n+\tesc_html__( 'Chose User', 'learnpress' ),\n+\t[],\n+\t'',\n+\t[\n+\t\t'options'           => array(),\n+\t\t'tom_select'        => true,\n+\t\t'multiple'          => true,\n+\t\t'name_no_bracket'   => true,\n+\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_user ) ) ],\n+\t]\n+);\n+$assign_user->id  = 'user_ids';\n+?>\n+\u003Cdiv id=\"learn-press-assign-course\" class=\"card\">\n+\t\u003Ch2>\u003C?php _e( 'Assign Course', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cdiv class=\"description\">\n+\t\t\u003C?php _e( 'User can enroll in a specific course by manually assign to them.', 'learnpress' ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Ci style=\"color: #a20707\">\n+\t\t\u003C?php _e( 'Noted: when assign user to course, the progress old of user with course assign will eraser, so be careful before do this.', 'learnpress' ); ?>\n+\t\u003C\u002Fi>\n+\t\u003Cdiv class=\"content\">\n+\t\t\u003Cform id=\"lp-assign-user-course-form\" name=\"\" method=\"post\">\n+\t\t\t\u003Cfieldset class=\"lp-assign-course__options\">\n+\t\t\t\t\u003Cul>\n+\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\u003C?php $assign_course->output( 0 ); ?>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\u003Cdiv class=\"assign-to-user\">\n+\t\t\t\t\t\t\t\u003C?php $assign_user->output( 0 ); ?>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002Ffieldset>\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003Cbutton class=\"button button-primary lp-button-assign-course\" type=\"submit\">\n+\t\t\t\t\t\u003C?php _e( 'Assign', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003Cspan class=\"percent\" style=\"margin-left: 10px\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"message\" style=\"margin-left: 10px\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-\u002F\u002F Cannot delete id 'learn-press-reset-course-users' - xoa la khong dc dau\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-reset-course-users\" class=\"card\">\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\n+\u002F\u002F Cannot delete id 'learn-press-reset-course-users' - xoa la khong dc dau\n+?>\n+\n+\u003Cdiv id=\"learn-press-reset-course-users\" class=\"card\">\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-install-sample-data.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-install-sample-data.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-install-sample-data.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-install-sample-data.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-$section_range  = LP_Install_Sample_Data::$section_range;\r\n-$item_range     = LP_Install_Sample_Data::$item_range;\r\n-$question_range = LP_Install_Sample_Data::$question_range;\r\n-$answer_range   = LP_Install_Sample_Data::$answer_range;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-install-sample\">\r\n-\t\u003Ch2>\u003C?php _e( 'Install Sample Data', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp>\u003C?php _e( 'Create a \u003Cstrong>Sample course\u003C\u002Fstrong> with lessons and quizzes. The content will be filled with \u003Cstrong>Lorem\u003C\u002Fstrong> text.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cfieldset class=\"lp-install-sample__options hide-if-js\">\r\n-\t\t\u003Clegend>\u003C?php _e( 'Options', 'learnpress' ); ?>\u003C\u002Flegend>\r\n-\r\n-\t\t\u003Cul>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Course name', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"text\" class=\"widefat\" name=\"custom-name\" value=\"\" placeholder=\"\u003C?php esc_attr_e( 'Sample course', 'learnpress' ); ?>\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of sections in range', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $section_range[0] ); ?>\" min=\"1\" max=\"20\" name=\"section-range[]\">\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $section_range[1] ); ?>\" min=\"1\" max=\"20\" name=\"section-range[]\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of items in range (each section)', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $item_range[0] ); ?>\" min=\"1\" max=\"50\" name=\"item-range[]\">\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $item_range[1] ); ?>\" min=\"1\" max=\"50\" name=\"item-range[]\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $question_range[0] ); ?>\" min=\"1\" max=\"50\" name=\"question-range[]\">\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $question_range[1] ); ?>\" min=\"1\" max=\"50\" name=\"question-range[]\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of answers in range (each question)', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $answer_range[0] ); ?>\" min=\"1\" max=\"10\" name=\"answer-range[]\">\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $answer_range[1] ); ?>\" min=\"1\" max=\"10\" name=\"answer-range[]\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli>\r\n-\t\t\t\t\u003Cp>\u003C?php _e( 'Course price', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\" min=\"0\" name=\"\u003C?php echo CoursePostModel::META_KEY_REGULAR_PRICE; ?>\">\r\n-\t\t\t\t\u003Cinput type=\"hidden\" value=\"all\" name=\"\u003C?php echo CoursePostModel::META_KEY_LEVEL; ?>\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Ffieldset>\r\n-\r\n-\t\u003Cp class=\"lp-install-sample__buttons\">\r\n-\t\t\u003Ca class=\"button button-primary lp-install-sample__install\"\r\n-\t\t\tdata-text=\"\u003C?php esc_attr_e( 'Install', 'learnpress' ); ?>\"\r\n-\t\t\tdata-installing-text=\"\u003C?php esc_attr_e( 'Installing...', 'learnpress' ); ?>\"\r\n-\t\t\thref=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-install-sample-data' ), 'install-sample-course' ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Install', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\t\u003Ca href=\"\" class=\"lp-install-sample__toggle-options\">\u003C?php esc_html_e( 'Show options', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003Ca class=\"button lp-install-sample__uninstall\"\r\n-\t\t\tdata-text=\"\u003C?php esc_attr_e( 'Delete sample course', 'learnpress' ); ?>\"\r\n-\t\t\tdata-uninstalling-text=\"\u003C?php esc_attr_e( 'Deleting...', 'learnpress' ); ?>\"\r\n-\t\t\thref=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-uninstall-sample-data' ), 'uninstall-sample-course' ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\CoursePostModel;\n+\n+defined( 'ABSPATH' ) or die();\n+\n+$section_range  = LP_Install_Sample_Data::$section_range;\n+$item_range     = LP_Install_Sample_Data::$item_range;\n+$question_range = LP_Install_Sample_Data::$question_range;\n+$answer_range   = LP_Install_Sample_Data::$answer_range;\n+?>\n+\n+\u003Cdiv class=\"lp-install-sample\">\n+\t\u003Ch2>\u003C?php _e( 'Install Sample Data', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cp>\u003C?php _e( 'Create a \u003Cstrong>Sample course\u003C\u002Fstrong> with lessons and quizzes. The content will be filled with \u003Cstrong>Lorem\u003C\u002Fstrong> text.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cfieldset class=\"lp-install-sample__options hide-if-js\">\n+\t\t\u003Clegend>\u003C?php _e( 'Options', 'learnpress' ); ?>\u003C\u002Flegend>\n+\n+\t\t\u003Cul>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Course name', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"text\" class=\"widefat\" name=\"custom-name\" value=\"\" placeholder=\"\u003C?php esc_attr_e( 'Sample course', 'learnpress' ); ?>\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of sections in range', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $section_range[0] ); ?>\" min=\"1\" max=\"20\" name=\"section-range[]\">\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $section_range[1] ); ?>\" min=\"1\" max=\"20\" name=\"section-range[]\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of items in range (each section)', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $item_range[0] ); ?>\" min=\"1\" max=\"50\" name=\"item-range[]\">\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $item_range[1] ); ?>\" min=\"1\" max=\"50\" name=\"item-range[]\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of questions in range (each quiz)', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $question_range[0] ); ?>\" min=\"1\" max=\"50\" name=\"question-range[]\">\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $question_range[1] ); ?>\" min=\"1\" max=\"50\" name=\"question-range[]\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Random number of answers in range (each question)', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $answer_range[0] ); ?>\" min=\"1\" max=\"10\" name=\"answer-range[]\">\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\u003C?php echo esc_attr( $answer_range[1] ); ?>\" min=\"1\" max=\"10\" name=\"answer-range[]\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli>\n+\t\t\t\t\u003Cp>\u003C?php _e( 'Course price', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003Cinput type=\"number\" size=\"3\" value=\"\" min=\"0\" name=\"\u003C?php echo CoursePostModel::META_KEY_REGULAR_PRICE; ?>\">\n+\t\t\t\t\u003Cinput type=\"hidden\" value=\"all\" name=\"\u003C?php echo CoursePostModel::META_KEY_LEVEL; ?>\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Ffieldset>\n+\n+\t\u003Cp class=\"lp-install-sample__buttons\">\n+\t\t\u003Ca class=\"button button-primary lp-install-sample__install\"\n+\t\t\tdata-text=\"\u003C?php esc_attr_e( 'Install', 'learnpress' ); ?>\"\n+\t\t\tdata-installing-text=\"\u003C?php esc_attr_e( 'Installing...', 'learnpress' ); ?>\"\n+\t\t\thref=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-install-sample-data' ), 'install-sample-course' ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Install', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\t\u003Ca href=\"\" class=\"lp-install-sample__toggle-options\">\u003C?php esc_html_e( 'Show options', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003Ca class=\"button lp-install-sample__uninstall\"\n+\t\t\tdata-text=\"\u003C?php esc_attr_e( 'Delete sample course', 'learnpress' ); ?>\"\n+\t\t\tdata-uninstalling-text=\"\u003C?php esc_attr_e( 'Deleting...', 'learnpress' ); ?>\"\n+\t\t\thref=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-uninstall-sample-data' ), 'uninstall-sample-course' ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Delete sample course', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-unassign-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-unassign-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-unassign-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-unassign-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,104 +1,104 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 4.2.4\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-$data_struct_course  = [\r\n-\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\r\n-\t'dataType'    => 'courses',\r\n-\t'keyGetValue' => [\r\n-\t\t'value'      => 'ID',\r\n-\t\t'text'       => '{{post_title}} (#{{ID}})',\r\n-\t\t'key_render' => [\r\n-\t\t\t'post_title' => 'post_title',\r\n-\t\t\t'ID'         => 'ID',\r\n-\t\t],\r\n-\t],\r\n-\t'setting'     => [\r\n-\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\r\n-\t],\r\n-];\r\n-$unassign_course     = new LP_Meta_Box_Select_Field(\r\n-\tesc_html__( 'Choose Course', 'learnpress' ),\r\n-\t[],\r\n-\t'',\r\n-\t[\r\n-\t\t'options'           => array(),\r\n-\t\t'tom_select'        => true,\r\n-\t\t'multiple'          => true,\r\n-\t\t'name_no_bracket'   => true,\r\n-\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_course ) ) ],\r\n-\t]\r\n-);\r\n-$unassign_course->id = 'course_ids';\r\n-\r\n-$data_struct_user  = [\r\n-\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\r\n-\t'dataType'    => 'users',\r\n-\t'keyGetValue' => [\r\n-\t\t'value'      => 'ID',\r\n-\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\r\n-\t\t'key_render' => [\r\n-\t\t\t'display_name' => 'display_name',\r\n-\t\t\t'user_email'   => 'user_email',\r\n-\t\t\t'ID'           => 'ID',\r\n-\t\t],\r\n-\t],\r\n-\t'setting'     => [\r\n-\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\r\n-\t],\r\n-];\r\n-$unassign_user     = new LP_Meta_Box_Select_Field(\r\n-\tesc_html__( 'Choose User', 'learnpress' ),\r\n-\t[],\r\n-\t'',\r\n-\t[\r\n-\t\t'options'           => array(),\r\n-\t\t'tom_select'        => true,\r\n-\t\t'multiple'          => true,\r\n-\t\t'name_no_bracket'   => true,\r\n-\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_user ) ) ],\r\n-\t]\r\n-);\r\n-$unassign_user->id = 'user_ids';\r\n-\r\n-?>\r\n-\u003Cdiv id=\"learn-press-unassigned-course\" class=\"card\">\r\n-\t\u003Ch2>\u003C?php _e( 'Unassign Course', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cdiv class=\"description\">\r\n-\t\t\u003C?php _e( 'Remove user from a course', 'learnpress' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Ci style=\"color: #a20707\">\r\n-\t\t\u003C?php\r\n-\t\t_e(\r\n-\t\t\t'Noted: when remove user from course, the progress of user with course assign will eraser, so be careful before do this.',\r\n-\t\t\t'learnpress'\r\n-\t\t);\r\n-\t\t?>\r\n-\t\u003C\u002Fi>\r\n-\t\u003Cdiv class=\"content\">\r\n-\t\t\u003Cform id=\"lp-unassign-user-course-form\">\r\n-\t\t\t\u003Cul>\r\n-\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\u003C?php $unassign_course->output( 0 ); ?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\u003Cdiv class=\"assign-to-user\">\r\n-\t\t\t\t\t\t\u003C?php $unassign_user->output( 0 ); ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003Cbutton class=\"button button-primary lp-button-unassign-course\" type=\"submit\">\r\n-\t\t\t\t\t\u003C?php _e( 'Remove', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003Cspan class=\"percent\" style=\"margin-left: 10px\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cspan class=\"message\" style=\"margin-left: 10px\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 4.2.4\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\n+$data_struct_course  = [\n+\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\n+\t'dataType'    => 'courses',\n+\t'keyGetValue' => [\n+\t\t'value'      => 'ID',\n+\t\t'text'       => '{{post_title}} (#{{ID}})',\n+\t\t'key_render' => [\n+\t\t\t'post_title' => 'post_title',\n+\t\t\t'ID'         => 'ID',\n+\t\t],\n+\t],\n+\t'setting'     => [\n+\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\n+\t],\n+];\n+$unassign_course     = new LP_Meta_Box_Select_Field(\n+\tesc_html__( 'Choose Course', 'learnpress' ),\n+\t[],\n+\t'',\n+\t[\n+\t\t'options'           => array(),\n+\t\t'tom_select'        => true,\n+\t\t'multiple'          => true,\n+\t\t'name_no_bracket'   => true,\n+\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_course ) ) ],\n+\t]\n+);\n+$unassign_course->id = 'course_ids';\n+\n+$data_struct_user  = [\n+\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-user' ),\n+\t'dataType'    => 'users',\n+\t'keyGetValue' => [\n+\t\t'value'      => 'ID',\n+\t\t'text'       => '{{display_name}}(#{{ID}}) - {{user_email}}',\n+\t\t'key_render' => [\n+\t\t\t'display_name' => 'display_name',\n+\t\t\t'user_email'   => 'user_email',\n+\t\t\t'ID'           => 'ID',\n+\t\t],\n+\t],\n+\t'setting'     => [\n+\t\t'placeholder' => esc_html__( 'Choose User', 'learnpress' ),\n+\t],\n+];\n+$unassign_user     = new LP_Meta_Box_Select_Field(\n+\tesc_html__( 'Choose User', 'learnpress' ),\n+\t[],\n+\t'',\n+\t[\n+\t\t'options'           => array(),\n+\t\t'tom_select'        => true,\n+\t\t'multiple'          => true,\n+\t\t'name_no_bracket'   => true,\n+\t\t'custom_attributes' => [ 'data-struct' => htmlentities2( json_encode( $data_struct_user ) ) ],\n+\t]\n+);\n+$unassign_user->id = 'user_ids';\n+\n+?>\n+\u003Cdiv id=\"learn-press-unassigned-course\" class=\"card\">\n+\t\u003Ch2>\u003C?php _e( 'Unassign Course', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cdiv class=\"description\">\n+\t\t\u003C?php _e( 'Remove user from a course', 'learnpress' ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Ci style=\"color: #a20707\">\n+\t\t\u003C?php\n+\t\t_e(\n+\t\t\t'Noted: when remove user from course, the progress of user with course assign will eraser, so be careful before do this.',\n+\t\t\t'learnpress'\n+\t\t);\n+\t\t?>\n+\t\u003C\u002Fi>\n+\t\u003Cdiv class=\"content\">\n+\t\t\u003Cform id=\"lp-unassign-user-course-form\">\n+\t\t\t\u003Cul>\n+\t\t\t\t\u003Cli>\n+\t\t\t\t\t\u003C?php $unassign_course->output( 0 ); ?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli>\n+\t\t\t\t\t\u003Cdiv class=\"assign-to-user\">\n+\t\t\t\t\t\t\u003C?php $unassign_user->output( 0 ); ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C\u002Ful>\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003Cbutton class=\"button button-primary lp-button-unassign-course\" type=\"submit\">\n+\t\t\t\t\t\u003C?php _e( 'Remove', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003Cspan class=\"percent\" style=\"margin-left: 10px\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cspan class=\"message\" style=\"margin-left: 10px\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-?>\r\n-\u003Cdiv id=\"learn-press-reset-user-item\" class=\"card\">\r\n-\t\u003Ch2>\u003C?php _e( 'Reset Item Progress', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cdiv class=\"description\">\r\n-\t\t\u003C?php _e( 'This action will reset progress of a specific lesson or quiz.', 'learnpress' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"content\">\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Cinput type=\"text\" v-model=\"user_id\" @keyup=\"update($event)\" placeholder=\"\u003C?php _e( 'User ID or Email', 'learnpress' ); ?>\">\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Cinput type=\"text\" v-model=\"item_id\" @keyup=\"update($event)\" placeholder=\"\u003C?php _e( 'ID of quiz or lesson', 'learnpress' ); ?>\">\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cp v-if=\"message\">{{message}}\u003C\u002Fp>\r\n-\t\u003Cbutton class=\"button\" @click=\"reset($event)\"\r\n-\t\t\t:disabled=\"resetting || !isValid()\">\u003C?php _e( 'Reset', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003C?php\r\n-\r\n-\u002F\u002F Translation\r\n-$localize = array(\r\n-\t'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' ),\r\n-);\r\n-?>\r\n-\u003Cscript>\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery(function ($) {\r\n-\t\tvar js_localize = \u003C?php echo wp_json_encode( $localize ); ?>\r\n-\r\n-\t\t\tnew $Vue({\r\n-\t\t\t\tel: '#learn-press-reset-user-item',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\tuser_id: '',\r\n-\t\t\t\t\titem_id: '',\r\n-\t\t\t\t\tresetting: false,\r\n-\t\t\t\t\tmessage: ''\r\n-\t\t\t\t},\r\n-\t\t\t\twatch: {},\r\n-\t\t\t\tcreated: function () {\r\n-\r\n-\t\t\t\t},\r\n-\t\t\t\tmounted: function () {\r\n-\t\t\t\t\t$(this.$el).closest('form').on('submit', function () {\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t})\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\treset: function (e) {\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\t\tif (!this.user_id || !this.item_id) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tif (!confirm(js_localize.reset_course_users)) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tvar that = this;\r\n-\t\t\t\t\t\tthis.resetting = true;\r\n-\t\t\t\t\t\tthis.message = '';\r\n-\t\t\t\t\t\t$.ajax({\r\n-\t\t\t\t\t\t\turl: '',\r\n-\t\t\t\t\t\t\tdata: {\r\n-\t\t\t\t\t\t\t\t'lp-ajax': 'rs-reset-user-item',\r\n-\t\t\t\t\t\t\t\tuser_id: this.user_id,\r\n-\t\t\t\t\t\t\t\titem_id: this.item_id,\r\n-\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\tsuccess: function (response) {\r\n-\t\t\t\t\t\t\t\tthat.resetting = false;\r\n-\t\t\t\t\t\t\t\tthat.message = response;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t})\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdate: function (e) {\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tisValid: function () {\r\n-\t\t\t\t\t\treturn this.user_id && this.item_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t});\r\n-\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\n+?>\n+\u003Cdiv id=\"learn-press-reset-user-item\" class=\"card\">\n+\t\u003Ch2>\u003C?php _e( 'Reset Item Progress', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cdiv class=\"description\">\n+\t\t\u003C?php _e( 'This action will reset progress of a specific lesson or quiz.', 'learnpress' ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"content\">\n+\t\t\u003Cp>\n+\t\t\t\u003Cinput type=\"text\" v-model=\"user_id\" @keyup=\"update($event)\" placeholder=\"\u003C?php _e( 'User ID or Email', 'learnpress' ); ?>\">\n+\t\t\u003C\u002Fp>\n+\t\t\u003Cp>\n+\t\t\t\u003Cinput type=\"text\" v-model=\"item_id\" @keyup=\"update($event)\" placeholder=\"\u003C?php _e( 'ID of quiz or lesson', 'learnpress' ); ?>\">\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\t\u003Cp v-if=\"message\">{{message}}\u003C\u002Fp>\n+\t\u003Cbutton class=\"button\" @click=\"reset($event)\"\n+\t\t\t:disabled=\"resetting || !isValid()\">\u003C?php _e( 'Reset', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\u003C\u002Fdiv>\n+\n+\u003C?php\n+\n+\u002F\u002F Translation\n+$localize = array(\n+\t'reset_course_users' => __( 'Are you sure to reset progress of this item?', 'learnpress' ),\n+);\n+?>\n+\u003Cscript>\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery(function ($) {\n+\t\tvar js_localize = \u003C?php echo wp_json_encode( $localize ); ?>\n+\n+\t\t\tnew $Vue({\n+\t\t\t\tel: '#learn-press-reset-user-item',\n+\t\t\t\tdata: {\n+\t\t\t\t\tuser_id: '',\n+\t\t\t\t\titem_id: '',\n+\t\t\t\t\tresetting: false,\n+\t\t\t\t\tmessage: ''\n+\t\t\t\t},\n+\t\t\t\twatch: {},\n+\t\t\t\tcreated: function () {\n+\n+\t\t\t\t},\n+\t\t\t\tmounted: function () {\n+\t\t\t\t\t$(this.$el).closest('form').on('submit', function () {\n+\t\t\t\t\t\treturn false;\n+\t\t\t\t\t})\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\treset: function (e) {\n+\t\t\t\t\t\te.preventDefault();\n+\t\t\t\t\t\tif (!this.user_id || !this.item_id) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tif (!confirm(js_localize.reset_course_users)) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tvar that = this;\n+\t\t\t\t\t\tthis.resetting = true;\n+\t\t\t\t\t\tthis.message = '';\n+\t\t\t\t\t\t$.ajax({\n+\t\t\t\t\t\t\turl: '',\n+\t\t\t\t\t\t\tdata: {\n+\t\t\t\t\t\t\t\t'lp-ajax': 'rs-reset-user-item',\n+\t\t\t\t\t\t\t\tuser_id: this.user_id,\n+\t\t\t\t\t\t\t\titem_id: this.item_id,\n+\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\tsuccess: function (response) {\n+\t\t\t\t\t\t\t\tthat.resetting = false;\n+\t\t\t\t\t\t\t\tthat.message = response;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t})\n+\t\t\t\t\t},\n+\t\t\t\t\tupdate: function (e) {\n+\t\t\t\t\t\te.preventDefault();\n+\t\t\t\t\t},\n+\t\t\t\t\tisValid: function () {\n+\t\t\t\t\t\treturn this.user_id && this.item_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t});\n+\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,187 +1,187 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-?>\r\n-\u003Cdiv id=\"learn-press-reset-user-courses\" class=\"card\">\r\n-\t\u003Ch2>\u003C?php _e( 'Reset User Progress', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cdiv class=\"description\">\r\n-\t\t\u003Cp>\u003C?php _e( 'This action will reset all course progresses of users.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003Cp>\u003C?php _e( 'Search results only show if users have course data.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cp>\r\n-\t\t\u003Cinput class=\"wide-fat\" type=\"text\" name=\"s\" @keyup=\"updateSearch($event)\"\r\n-\t\t\t   placeholder=\"\u003C?php esc_attr_e( 'Search user by login name or email', 'learnpress' ); ?>\">\r\n-\t\t\u003Cbutton class=\"button\" @click=\"search($event)\"\r\n-\t\t\t\t:disabled=\"s.length \u003C 3\">\u003C?php _e( 'Search', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003Ctemplate v-if=\"users.length > 0\">\r\n-\t\t\u003Ctable class=\"wp-list-table widefat fixed striped\">\r\n-\t\t\t\u003Cthead>\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Cth width=\"50\">\u003C?php _e( 'ID', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth width=\"200\">\u003C?php _e( 'Name', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth>\u003C?php _e( 'Courses', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Cth width=\"80\">\u003C?php _e( 'Actions', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\u003Ctr v-for=\"user in users\">\r\n-\t\t\t\t\u003Ctd>#{{user.id}}\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>{{user.username}} ({{user.email}})\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003Cul class=\"courses-list\">\r\n-\t\t\t\t\t\t\u003Cli v-for=\"course in user.courses\">\r\n-\t\t\t\t\t\t\t\u003Ca :href=\"course.url\" target=\"_blank\">{{course.title}} (#{{course.id}})\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003Ca href=\"\"\r\n-\t\t\t\t\t\t\t   class=\"action-reset dashicons\"\r\n-\t\t\t\t\t\t\t   data-reset=\"single\"\r\n-\t\t\t\t\t\t\t   @click=\"reset($event, user, course.id);\"\r\n-\t\t\t\t\t\t\t   :class=\"resetActionClass(user, course)\">\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003Ca href=\"\"\r\n-\t\t\t\t\t   class=\"action-reset dashicons\"\r\n-\t\t\t\t\t   data-reset=\"all\"\r\n-\t\t\t\t\t   :class=\"resetActionClass(user)\"\r\n-\t\t\t\t\t   @click=\"reset($event, user);\">\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Cspan style=\"font-size: 12px\">\u003C?php echo esc_html__( 'Delete All', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\u003C\u002Ftemplate>\r\n-\t\u003Ctemplate v-else>\r\n-\t\t\u003Cp v-if=\"s.length \u003C 3\">\u003C?php _e( 'Please enter at least 3 characters.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003Cp v-else-if=\"status=='result'\">\u003C?php _e( 'No user found.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003Cp v-else-if=\"status=='searching'\">\u003C?php _e( 'Searching user...', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003C\u002Ftemplate>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003C?php\r\n-\r\n-\u002F\u002F Translation\r\n-$localize = array(\r\n-\t'reset_course_users' => __( 'Are you sure to reset course progress of all users enrolled this course?', 'learnpress' ),\r\n-);\r\n-?>\r\n-\u003Cscript>\r\n-\twindow.$Vue = window.$Vue || Vue;\r\n-\r\n-\tjQuery(function ($) {\r\n-\t\tvar js_localize = \u003C?php echo wp_json_encode( $localize ); ?>\r\n-\r\n-\t\t\tnew $Vue({\r\n-\t\t\t\tel: '#learn-press-reset-user-courses',\r\n-\t\t\t\tdata: {\r\n-\t\t\t\t\ts: '',\r\n-\t\t\t\t\tstatus: false,\r\n-\t\t\t\t\tusers: []\r\n-\t\t\t\t},\r\n-\t\t\t\tmethods: {\r\n-\t\t\t\t\tresetActionClass: function (user, course) {\r\n-\t\t\t\t\t\tvar status = course ? course.status : user.status;\r\n-\t\t\t\t\t\treturn {\r\n-\t\t\t\t\t\t\t'dashicons-trash': !status,\r\n-\t\t\t\t\t\t\t'dashicons-yes': status === 'done',\r\n-\t\t\t\t\t\t\t'dashicons-update': status === 'resetting'\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tupdateSearch: function (e) {\r\n-\t\t\t\t\t\tthis.s = e.target.value;\r\n-\t\t\t\t\t\tthis.status = false;\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\tsearch: function (e) {\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\t\t\tvar that = this;\r\n-\t\t\t\t\t\tthis.s = $(this.$el).find('input[name=\"s\"]').val();\r\n-\r\n-\t\t\t\t\t\tif (this.s.length \u003C 3) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tthis.status = 'searching';\r\n-\t\t\t\t\t\tthis.courses = [];\r\n-\r\n-\t\t\t\t\t\t$.ajax({\r\n-\t\t\t\t\t\t\turl: '',\r\n-\t\t\t\t\t\t\tdata: {\r\n-\t\t\t\t\t\t\t\t'lp-ajax': 'rs-search-users',\r\n-\t\t\t\t\t\t\t\ts: this.s,\r\n-\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\tsuccess: function (response) {\r\n-\t\t\t\t\t\t\t\tvar users = LP.parseJSON(response);\r\n-\t\t\t\t\t\t\t\tfor(var i = 0; i \u003C users.length; i++) {\r\n-\t\t\t\t\t\t\t\t\tfor (var j in users[i].courses) {\r\n-\t\t\t\t\t\t\t\t\t\tusers[i].courses[j].status = ''\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\tthat.users = users;\r\n-\t\t\t\t\t\t\t\tthat.status = 'result';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t})\r\n-\t\t\t\t\t},\r\n-\r\n-\t\t\t\t\treset: function (e, user, course_id) {\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\r\n-\t\t\t\t\t\tif (!confirm(js_localize.reset_course_users)) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tvar that = this;\r\n-\t\t\t\t\t\tif(course_id){\r\n-\t\t\t\t\t\t\tuser.courses[course_id].status = 'resetting'\r\n-\t\t\t\t\t\t}else{\r\n-\t\t\t\t\t\t\tfor(var j in user.courses ){\r\n-\t\t\t\t\t\t\t\tuser.courses[j].status = 'resetting'\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\tuser.status = 'resetting';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tvar object_reset = $(e.target).data('reset');\r\n-\r\n-\t\t\t\t\t\t$.ajax({\r\n-\t\t\t\t\t\t\turl: '',\r\n-\t\t\t\t\t\t\tdata: {\r\n-\t\t\t\t\t\t\t\t'lp-ajax': 'rs-reset-user-courses',\r\n-\t\t\t\t\t\t\t\tuser_id: user.id,\r\n-\t\t\t\t\t\t\t\tcourse_id: course_id,\r\n-\t\t\t\t\t\t\t\tobject_reset: object_reset,\r\n-\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\r\n-\t\t\t\t\t\t\t},\r\n-\t\t\t\t\t\t\tsuccess: function (response) {\r\n-\t\t\t\t\t\t\t\tresponse = LP.parseJSON(response);\r\n-\t\t\t\t\t\t\t\t\u002F\u002Fif (response.id == user.id) {\r\n-\t\t\t\t\t\t\t\tfor (var i = 0, n = that.users.length; i \u003C n; i++) {\r\n-\t\t\t\t\t\t\t\t\tif (that.users[i].id === user.id) {\r\n-\t\t\t\t\t\t\t\t\t\tif(course_id){\r\n-\t\t\t\t\t\t\t\t\t\t\tthat.users[i].courses[course_id].status = 'done'\r\n-\t\t\t\t\t\t\t\t\t\t}else{\r\n-\t\t\t\t\t\t\t\t\t\t\tfor(var j in that.users[i].courses ){\r\n-\t\t\t\t\t\t\t\t\t\t\t\tthat.users[i].courses[j].status = 'done'\r\n-\t\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t\t\tuser.status = 'done';\r\n-\t\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\u002F\u002F }\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t})\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t});\r\n-\t});\r\n-\r\n-\u003C\u002Fscript>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\n+?>\n+\u003Cdiv id=\"learn-press-reset-user-courses\" class=\"card\">\n+\t\u003Ch2>\u003C?php _e( 'Reset User Progress', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cdiv class=\"description\">\n+\t\t\u003Cp>\u003C?php _e( 'This action will reset all course progresses of users.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003Cp>\u003C?php _e( 'Search results only show if users have course data.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003C\u002Fdiv>\n+\t\u003Cp>\n+\t\t\u003Cinput class=\"wide-fat\" type=\"text\" name=\"s\" @keyup=\"updateSearch($event)\"\n+\t\t\t   placeholder=\"\u003C?php esc_attr_e( 'Search user by login name or email', 'learnpress' ); ?>\">\n+\t\t\u003Cbutton class=\"button\" @click=\"search($event)\"\n+\t\t\t\t:disabled=\"s.length \u003C 3\">\u003C?php _e( 'Search', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\u003C\u002Fp>\n+\n+\t\u003Ctemplate v-if=\"users.length > 0\">\n+\t\t\u003Ctable class=\"wp-list-table widefat fixed striped\">\n+\t\t\t\u003Cthead>\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Cth width=\"50\">\u003C?php _e( 'ID', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth width=\"200\">\u003C?php _e( 'Name', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth>\u003C?php _e( 'Courses', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Cth width=\"80\">\u003C?php _e( 'Actions', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>\n+\t\t\t\u003Ctbody>\n+\t\t\t\u003Ctr v-for=\"user in users\">\n+\t\t\t\t\u003Ctd>#{{user.id}}\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>{{user.username}} ({{user.email}})\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003Cul class=\"courses-list\">\n+\t\t\t\t\t\t\u003Cli v-for=\"course in user.courses\">\n+\t\t\t\t\t\t\t\u003Ca :href=\"course.url\" target=\"_blank\">{{course.title}} (#{{course.id}})\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003Ca href=\"\"\n+\t\t\t\t\t\t\t   class=\"action-reset dashicons\"\n+\t\t\t\t\t\t\t   data-reset=\"single\"\n+\t\t\t\t\t\t\t   @click=\"reset($event, user, course.id);\"\n+\t\t\t\t\t\t\t   :class=\"resetActionClass(user, course)\">\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C\u002Ful>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003Ca href=\"\"\n+\t\t\t\t\t   class=\"action-reset dashicons\"\n+\t\t\t\t\t   data-reset=\"all\"\n+\t\t\t\t\t   :class=\"resetActionClass(user)\"\n+\t\t\t\t\t   @click=\"reset($event, user);\">\u003C\u002Fa>\n+\t\t\t\t\t\u003Cspan style=\"font-size: 12px\">\u003C?php echo esc_html__( 'Delete All', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftbody>\n+\t\t\u003C\u002Ftable>\n+\t\u003C\u002Ftemplate>\n+\t\u003Ctemplate v-else>\n+\t\t\u003Cp v-if=\"s.length \u003C 3\">\u003C?php _e( 'Please enter at least 3 characters.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003Cp v-else-if=\"status=='result'\">\u003C?php _e( 'No user found.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003Cp v-else-if=\"status=='searching'\">\u003C?php _e( 'Searching user...', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003C\u002Ftemplate>\n+\u003C\u002Fdiv>\n+\n+\u003C?php\n+\n+\u002F\u002F Translation\n+$localize = array(\n+\t'reset_course_users' => __( 'Are you sure to reset course progress of all users enrolled this course?', 'learnpress' ),\n+);\n+?>\n+\u003Cscript>\n+\twindow.$Vue = window.$Vue || Vue;\n+\n+\tjQuery(function ($) {\n+\t\tvar js_localize = \u003C?php echo wp_json_encode( $localize ); ?>\n+\n+\t\t\tnew $Vue({\n+\t\t\t\tel: '#learn-press-reset-user-courses',\n+\t\t\t\tdata: {\n+\t\t\t\t\ts: '',\n+\t\t\t\t\tstatus: false,\n+\t\t\t\t\tusers: []\n+\t\t\t\t},\n+\t\t\t\tmethods: {\n+\t\t\t\t\tresetActionClass: function (user, course) {\n+\t\t\t\t\t\tvar status = course ? course.status : user.status;\n+\t\t\t\t\t\treturn {\n+\t\t\t\t\t\t\t'dashicons-trash': !status,\n+\t\t\t\t\t\t\t'dashicons-yes': status === 'done',\n+\t\t\t\t\t\t\t'dashicons-update': status === 'resetting'\n+\t\t\t\t\t\t}\n+\t\t\t\t\t},\n+\t\t\t\t\tupdateSearch: function (e) {\n+\t\t\t\t\t\tthis.s = e.target.value;\n+\t\t\t\t\t\tthis.status = false;\n+\t\t\t\t\t\te.preventDefault();\n+\t\t\t\t\t},\n+\t\t\t\t\tsearch: function (e) {\n+\t\t\t\t\t\te.preventDefault();\n+\n+\t\t\t\t\t\tvar that = this;\n+\t\t\t\t\t\tthis.s = $(this.$el).find('input[name=\"s\"]').val();\n+\n+\t\t\t\t\t\tif (this.s.length \u003C 3) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tthis.status = 'searching';\n+\t\t\t\t\t\tthis.courses = [];\n+\n+\t\t\t\t\t\t$.ajax({\n+\t\t\t\t\t\t\turl: '',\n+\t\t\t\t\t\t\tdata: {\n+\t\t\t\t\t\t\t\t'lp-ajax': 'rs-search-users',\n+\t\t\t\t\t\t\t\ts: this.s,\n+\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\tsuccess: function (response) {\n+\t\t\t\t\t\t\t\tvar users = LP.parseJSON(response);\n+\t\t\t\t\t\t\t\tfor(var i = 0; i \u003C users.length; i++) {\n+\t\t\t\t\t\t\t\t\tfor (var j in users[i].courses) {\n+\t\t\t\t\t\t\t\t\t\tusers[i].courses[j].status = ''\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\tthat.users = users;\n+\t\t\t\t\t\t\t\tthat.status = 'result';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t})\n+\t\t\t\t\t},\n+\n+\t\t\t\t\treset: function (e, user, course_id) {\n+\t\t\t\t\t\te.preventDefault();\n+\n+\t\t\t\t\t\tif (!confirm(js_localize.reset_course_users)) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tvar that = this;\n+\t\t\t\t\t\tif(course_id){\n+\t\t\t\t\t\t\tuser.courses[course_id].status = 'resetting'\n+\t\t\t\t\t\t}else{\n+\t\t\t\t\t\t\tfor(var j in user.courses ){\n+\t\t\t\t\t\t\t\tuser.courses[j].status = 'resetting'\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\tuser.status = 'resetting';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tvar object_reset = $(e.target).data('reset');\n+\n+\t\t\t\t\t\t$.ajax({\n+\t\t\t\t\t\t\turl: '',\n+\t\t\t\t\t\t\tdata: {\n+\t\t\t\t\t\t\t\t'lp-ajax': 'rs-reset-user-courses',\n+\t\t\t\t\t\t\t\tuser_id: user.id,\n+\t\t\t\t\t\t\t\tcourse_id: course_id,\n+\t\t\t\t\t\t\t\tobject_reset: object_reset,\n+\t\t\t\t\t\t\t\tnonce: lpGlobalSettings.nonce\n+\t\t\t\t\t\t\t},\n+\t\t\t\t\t\t\tsuccess: function (response) {\n+\t\t\t\t\t\t\t\tresponse = LP.parseJSON(response);\n+\t\t\t\t\t\t\t\t\u002F\u002Fif (response.id == user.id) {\n+\t\t\t\t\t\t\t\tfor (var i = 0, n = that.users.length; i \u003C n; i++) {\n+\t\t\t\t\t\t\t\t\tif (that.users[i].id === user.id) {\n+\t\t\t\t\t\t\t\t\t\tif(course_id){\n+\t\t\t\t\t\t\t\t\t\t\tthat.users[i].courses[course_id].status = 'done'\n+\t\t\t\t\t\t\t\t\t\t}else{\n+\t\t\t\t\t\t\t\t\t\t\tfor(var j in that.users[i].courses ){\n+\t\t\t\t\t\t\t\t\t\t\t\tthat.users[i].courses[j].status = 'done'\n+\t\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t\t\tuser.status = 'done';\n+\t\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\u002F\u002F }\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t})\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t});\n+\t});\n+\n+\u003C\u002Fscript>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-clean-database.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-clean-database.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-clean-database.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-clean-database.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template tool create indexs fo tables database.\r\n- *\r\n- * @template html-create-indexs-tables\r\n- * @author  tungnx\r\n- * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\r\n- * @version 1.0.0\r\n- * @since 4.0.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-$lp_db_sessions = LP_Sessions_DB::getInstance();\r\n-global $wpdb;\r\n-$clean_tables = array( 'learnpress_sessions' );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"card\" id=\"lp-tool-clean-database\">\r\n-\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Clean Data System', 'learnpress' ) ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp>\u003C?php _e( 'Remove old data, not use or expire', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cdiv class=\"tools-prepare__message\">\u003C\u002Fdiv>\r\n-\t\u003Cdiv id=\"tools-select__id\" class=\"tools-select__data\">\r\n-\t\t\u003Cul class=\"clean-table\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $clean_tables as $clean_table ) :\r\n-\t\t\t\t$color_code = '#ffffff';\r\n-\t\t\t\t$rows       = $lp_db_sessions->count_row_db_sessions();\r\n-\t\t\t\tif ( $rows > 500 ) {\r\n-\t\t\t\t\t$color_code = '#ff0000';\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cli style=\"background-color: \u003C?php echo esc_attr( $color_code ); ?>\">\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" id=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\"\r\n-\t\t\t\t\t\tname=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\"\r\n-\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $clean_table ); ?>\">\r\n-\t\t\t\t\t\u003Clabel for=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo sprintf( '%s (%d) %s', $clean_table, $lp_db_sessions->count_row_db_sessions(), __( 'rows expire', 'learnpress' ) ); ?>\r\n-\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cbr>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cp class=\"tools-button\">\r\n-\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-clean-db\">\r\n-\t\t\t\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003Cdiv class=\"wrapper-lp-loading\" style=\"display: none\">\r\n-\t\t\u003C?php\r\n-\t\t$i = 0;\r\n-\t\tforeach ( $clean_tables as $clean_table ) :\r\n-\t\t\t++$i;\r\n-\t\t\t$rows = $lp_db_sessions->count_row_db_sessions();\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"progressbar__item step-\u003C?php echo esc_attr( $i ); ?>\" data-total=\"\u003C?php echo esc_attr( $rows ); ?>\">\r\n-\t\t\t\t\u003Cdiv class=\"progressbar__container\">\r\n-\t\t\t\t\t\u003Cdiv class=\"progressbar__content\">\r\n-\t\t\t\t\t\t\u003Ch4>\u003C?php echo sprintf( '%s: %s', esc_html__( 'Table name', 'learnpress' ), $clean_table ); ?>\u003C\u002Fh4>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"progressbar__indexs\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"progressbar__rows\">\r\n-\t\t\t\t\t\t\t\t\u003C?php echo sprintf( '0 \u002F %d %s', $rows, __( 'expire', 'learnpress' ) ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"progressbar__percent\">( 0% )\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"progressbar__value\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"lp-tool__message\">\u003C\u002Fdiv>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template tool create indexs fo tables database.\n+ *\n+ * @template html-create-indexs-tables\n+ * @author  tungnx\n+ * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\n+ * @version 1.0.0\n+ * @since 4.0.3\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+$lp_db_sessions = LP_Sessions_DB::getInstance();\n+global $wpdb;\n+$clean_tables = array( 'learnpress_sessions' );\n+?>\n+\n+\u003Cdiv class=\"card\" id=\"lp-tool-clean-database\">\n+\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Clean Data System', 'learnpress' ) ); ?>\u003C\u002Fh2>\n+\t\u003Cp>\u003C?php _e( 'Remove old data, not use or expire', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cdiv class=\"tools-prepare__message\">\u003C\u002Fdiv>\n+\t\u003Cdiv id=\"tools-select__id\" class=\"tools-select__data\">\n+\t\t\u003Cul class=\"clean-table\">\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $clean_tables as $clean_table ) :\n+\t\t\t\t$color_code = '#ffffff';\n+\t\t\t\t$rows       = $lp_db_sessions->count_row_db_sessions();\n+\t\t\t\tif ( $rows > 500 ) {\n+\t\t\t\t\t$color_code = '#ff0000';\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\u003Cli style=\"background-color: \u003C?php echo esc_attr( $color_code ); ?>\">\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" id=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\"\n+\t\t\t\t\t\tname=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\"\n+\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $clean_table ); ?>\">\n+\t\t\t\t\t\u003Clabel for=\"clean-table__\u003C?php echo esc_attr( $clean_table ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo sprintf( '%s (%d) %s', $clean_table, $lp_db_sessions->count_row_db_sessions(), __( 'rows expire', 'learnpress' ) ); ?>\n+\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cbr>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Fdiv>\n+\t\u003Cp class=\"tools-button\">\n+\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-clean-db\">\n+\t\t\t\u003C?php esc_html_e( 'Delete', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fp>\n+\n+\t\u003Cdiv class=\"wrapper-lp-loading\" style=\"display: none\">\n+\t\t\u003C?php\n+\t\t$i = 0;\n+\t\tforeach ( $clean_tables as $clean_table ) :\n+\t\t\t++$i;\n+\t\t\t$rows = $lp_db_sessions->count_row_db_sessions();\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"progressbar__item step-\u003C?php echo esc_attr( $i ); ?>\" data-total=\"\u003C?php echo esc_attr( $rows ); ?>\">\n+\t\t\t\t\u003Cdiv class=\"progressbar__container\">\n+\t\t\t\t\t\u003Cdiv class=\"progressbar__content\">\n+\t\t\t\t\t\t\u003Ch4>\u003C?php echo sprintf( '%s: %s', esc_html__( 'Table name', 'learnpress' ), $clean_table ); ?>\u003C\u002Fh4>\n+\t\t\t\t\t\t\u003Cdiv class=\"progressbar__indexs\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"progressbar__rows\">\n+\t\t\t\t\t\t\t\t\u003C?php echo sprintf( '0 \u002F %d %s', $rows, __( 'expire', 'learnpress' ) ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003Cspan class=\"progressbar__percent\">( 0% )\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"progressbar__value\">\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"lp-tool__message\">\u003C\u002Fdiv>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-create-indexs-tables.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-create-indexs-tables.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-create-indexs-tables.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-create-indexs-tables.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template tool create indexs fo tables database.\r\n- *\r\n- * @template html-create-indexs-tables\r\n- * @author  tungnx\r\n- * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\r\n- * @version 1.0.0\r\n- * @since 4.0.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"card\" id=\"lp-tool-create-indexes-tables\">\r\n-\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Create Database Indexes', 'learnpress' ) ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp>\u003C?php _e( 'Re-create or create new indexes for tables.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp class=\"tools-button\">\r\n-\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-create-indexes\">\u003C?php esc_html_e( 'Create now', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003Cdiv class=\"wrapper-lp-loading\" style=\"display: none\">\r\n-\t\t\u003C?php lp_skeleton_animation_html( 7 ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template tool create indexs fo tables database.\n+ *\n+ * @template html-create-indexs-tables\n+ * @author  tungnx\n+ * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\n+ * @version 1.0.0\n+ * @since 4.0.3\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+?>\n+\n+\u003Cdiv class=\"card\" id=\"lp-tool-create-indexes-tables\">\n+\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Create Database Indexes', 'learnpress' ) ); ?>\u003C\u002Fh2>\n+\t\u003Cp>\u003C?php _e( 'Re-create or create new indexes for tables.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp class=\"tools-button\">\n+\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-create-indexes\">\u003C?php esc_html_e( 'Create now', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\u003C\u002Fp>\n+\n+\t\u003Cdiv class=\"wrapper-lp-loading\" style=\"display: none\">\n+\t\t\u003C?php lp_skeleton_animation_html( 7 ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-reupgrade-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-reupgrade-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-reupgrade-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-reupgrade-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template tool Reupgrade database.\r\n- *\r\n- * @template html-reupgrade-db\r\n- * @author  tungnx\r\n- * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\r\n- * @version 1.0.0\r\n- * @since 4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"card\" id=\"lp-tool-re-upgrade-db\" style=\"display: none\">\r\n-\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Reupgrade Database', 'learnpress' ) ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp>\u003C?php _e( '1. Tool only one apply for case Update from LP3 to LP4 didn\\'t success', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\u003C?php _e( '2. Please sure what you doing', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp class=\"tools-button\">\r\n-\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-re-upgrade-db\">\r\n-\t\t\t\u003C?php esc_html_e( 'Run now', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cdiv class=\"learn-press-message\" style=\"display: none\">\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template tool Reupgrade database.\n+ *\n+ * @template html-reupgrade-db\n+ * @author  tungnx\n+ * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\n+ * @version 1.0.0\n+ * @since 4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+?>\n+\n+\u003Cdiv class=\"card\" id=\"lp-tool-re-upgrade-db\" style=\"display: none\">\n+\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Reupgrade Database', 'learnpress' ) ); ?>\u003C\u002Fh2>\n+\t\u003Cp>\u003C?php _e( '1. Tool only one apply for case Update from LP3 to LP4 didn\\'t success', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp>\u003C?php _e( '2. Please sure what you doing', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp class=\"tools-button\">\n+\t\t\u003Cbutton type=\"button\" class=\"button lp-btn lp-btn-re-upgrade-db\">\n+\t\t\t\u003C?php esc_html_e( 'Run now', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fp>\n+\t\u003Cdiv class=\"learn-press-message\" style=\"display: none\">\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-rollback-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-rollback-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-rollback-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-rollback-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template tool rollback database.\r\n- *\r\n- * @template html-rollback-db\r\n- * @author  tungnx\r\n- * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\r\n- * @version 1.0.0\r\n- * @since 4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template tool rollback database.\n+ *\n+ * @template html-rollback-db\n+ * @author  tungnx\n+ * @package learnpress\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\n+ * @version 1.0.0\n+ * @since 4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-upgrade-database.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-upgrade-database.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-upgrade-database.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-upgrade-database.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,111 +1,111 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template tool upgrade database.\r\n- *\r\n- * @template html-upgrade-database\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die();\r\n-\r\n-$user_agree_terms         = (int) LP_Settings::instance()->get( 'agree_terms', 0 );\r\n-$check_lp_need_upgrade_db = LP_Updater::instance()->check_lp_db_need_upgrade();\r\n-\r\n-if ( ! $check_lp_need_upgrade_db ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"card\" id=\"lp-tool-upgrade-db\">\r\n-\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Upgrade Database', 'learnpress' ) ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp class=\"tools-button\">\r\n-\t\t\u003Ca class=\"button lp-btn-upgrade-db\" href=\"javascript:;\">\r\n-\t\t\t\u003C?php esc_html_e( 'Upgrade now', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\t\u003Cspan class=\"spinner\">\u003C\u002Fspan>\r\n-\t\t\u003C?php wp_nonce_field( 'lp-nonce', 'lp-nonce' ); ?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cdiv style=\"max-height: 500px; overflow: auto\" class=\"wrapper-lp-status-upgrade\">\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php\r\n-\tif ( $user_agree_terms !== $check_lp_need_upgrade_db ) {\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"wrapper-terms-upgrade\">\r\n-\t\t\t\u003Cdiv class=\"terms-upgrade\">\r\n-\t\t\t\t\u003Ch2>Terms of Service update\u003C\u002Fh2>\r\n-\t\t\t\t\u003Cdiv class=\"pd-2em\">\r\n-\t\t\t\t\t\u003Cspan>To system LearnPress runs normally, we need to upgrade database on your site.\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\tIMPORTANT: Before upgrading the LearnPress database on your website, please read these Terms of\r\n-\t\t\t\t\t\tServices carefully.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\tOur Terms of Services, provided by ThimPress, outline the precautions for upgrading the\r\n-\t\t\t\t\t\tLearnPress database on your website. By using this feature, you agree to be bound by these\r\n-\t\t\t\t\t\tTerms. If you disagree with any part, you should not upgrade the database and consider\r\n-\t\t\t\t\t\tdowngrading LearnPress versions if necessary.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Ch4>ACCEPTANCE OF TERMS\u003C\u002Fh4>\r\n-\t\t\t\t\t\u003Cspan>\r\n-\t\t\t\t\t\t1. We do not take responsibility for the loss data that is not from our LearnPress plugins. This\r\n-\t\t\t\t\t\tmeans we cannot guarantee the safety of data unrelated to LearnPress during the database upgrade\r\n-\t\t\t\t\t\tprocess . \u003Cstrong style=\"color: #f55252\">\u003Ci>It's essential to back up your entire website before\r\n-\t\t\t\t\t\t\t\tupgradingspan\u003C\u002Fi>\u003C\u002Fstrong>.\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t2. We are not responsible for the issues caused by interrupting the upgrade process.\r\n-\t\t\t\t\t\tInterrupting\r\n-\t\t\t\t\t\tthe process before finishing can lead to problems on your website. Please ensure that the\r\n-\t\t\t\t\t\tLearnPress database is upgraded successfully.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t3. A stable internet connection is essential for a successful upgrade since any Internet\r\n-\t\t\t\t\t\tdisconnection can lead to unexpected problems. We do not take responsibility for any issues\r\n-\t\t\t\t\t\tcaused by any disconnection.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Ch4>ACCEPTANCE OF TERMS\u003C\u002Fh4>\r\n-\t\t\t\t\t\u003Cspan>\r\n-\t\t\t\t\t\t1.Back up your website before upgrading. This will make sure you can restore your website in\r\n-\t\t\t\t\t\tcase any unexpected errors happen.\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t2. Maintain a stable Internet connection throughout the process. This will minimize the risk of\r\n-\t\t\t\t\t\tbreaking down your website.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t3. Do not interrupt the process once it starts. You should let the process run for a successful\r\n-\t\t\t\t\t\tdatabase update.\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"lp-agree-term\">\r\n-\t\t\t\t\t\t\u003Cspan>\r\n-\t\t\t\t\t\u003C?php esc_html_e( 'I agree the new Terms of Service.', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"error\">\u003C?php esc_html_e( 'Please agree to the terms before upgrade!', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\t?>\r\n-\t\u003Cdiv class=\"wrapper-lp-upgrade-message\">\r\n-\t\t\u003Cdiv class=\"lp-upgrade-message\">\r\n-\t\t\t\u003Ch2>Upgrade finished\u003C\u002Fh2>\r\n-\t\t\t\u003Cdiv class=\"pd-2em\">\r\n-\t\t\t\t\u003Cdiv class=\"learn-press-message\">\r\n-\t\t\t\t\t\u003Cp>You have upgraded the database from plugin LearnPress successfully.\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>You can use the LearnPress functions and LearnPress add-ons now.\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp>Read more document \u003Ca href=\"\u003C?php echo LearnPress::$doc_link; ?>\">LearnPress\u003C\u002Fa>\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"wrapper-lp-loading\">\r\n-\t\t\u003C?php lp_skeleton_animation_html( 7 ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cinput type=\"hidden\" name=\"message-when-upgrading\"\r\n-\t\t\tvalue=\"\u003C?php esc_html_e( 'Please don\\'t close this tab until the completed upgrade', 'learnpress' ); ?>\"\u002F>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template tool upgrade database.\n+ *\n+ * @template html-upgrade-database\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die();\n+\n+$user_agree_terms         = (int) LP_Settings::instance()->get( 'agree_terms', 0 );\n+$check_lp_need_upgrade_db = LP_Updater::instance()->check_lp_db_need_upgrade();\n+\n+if ( ! $check_lp_need_upgrade_db ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"card\" id=\"lp-tool-upgrade-db\">\n+\t\u003Ch2>\u003C?php echo sprintf( '%s', __( 'Upgrade Database', 'learnpress' ) ); ?>\u003C\u002Fh2>\n+\t\u003Cp class=\"tools-button\">\n+\t\t\u003Ca class=\"button lp-btn-upgrade-db\" href=\"javascript:;\">\n+\t\t\t\u003C?php esc_html_e( 'Upgrade now', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\t\u003Cspan class=\"spinner\">\u003C\u002Fspan>\n+\t\t\u003C?php wp_nonce_field( 'lp-nonce', 'lp-nonce' ); ?>\n+\t\u003C\u002Fp>\n+\t\u003Cdiv style=\"max-height: 500px; overflow: auto\" class=\"wrapper-lp-status-upgrade\">\u003C\u002Fdiv>\n+\n+\t\u003C?php\n+\tif ( $user_agree_terms !== $check_lp_need_upgrade_db ) {\n+\t\t?>\n+\t\t\u003Cdiv class=\"wrapper-terms-upgrade\">\n+\t\t\t\u003Cdiv class=\"terms-upgrade\">\n+\t\t\t\t\u003Ch2>Terms of Service update\u003C\u002Fh2>\n+\t\t\t\t\u003Cdiv class=\"pd-2em\">\n+\t\t\t\t\t\u003Cspan>To system LearnPress runs normally, we need to upgrade database on your site.\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\tIMPORTANT: Before upgrading the LearnPress database on your website, please read these Terms of\n+\t\t\t\t\t\tServices carefully.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\tOur Terms of Services, provided by ThimPress, outline the precautions for upgrading the\n+\t\t\t\t\t\tLearnPress database on your website. By using this feature, you agree to be bound by these\n+\t\t\t\t\t\tTerms. If you disagree with any part, you should not upgrade the database and consider\n+\t\t\t\t\t\tdowngrading LearnPress versions if necessary.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Ch4>ACCEPTANCE OF TERMS\u003C\u002Fh4>\n+\t\t\t\t\t\u003Cspan>\n+\t\t\t\t\t\t1. We do not take responsibility for the loss data that is not from our LearnPress plugins. This\n+\t\t\t\t\t\tmeans we cannot guarantee the safety of data unrelated to LearnPress during the database upgrade\n+\t\t\t\t\t\tprocess . \u003Cstrong style=\"color: #f55252\">\u003Ci>It's essential to back up your entire website before\n+\t\t\t\t\t\t\t\tupgradingspan\u003C\u002Fi>\u003C\u002Fstrong>.\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t2. We are not responsible for the issues caused by interrupting the upgrade process.\n+\t\t\t\t\t\tInterrupting\n+\t\t\t\t\t\tthe process before finishing can lead to problems on your website. Please ensure that the\n+\t\t\t\t\t\tLearnPress database is upgraded successfully.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t3. A stable internet connection is essential for a successful upgrade since any Internet\n+\t\t\t\t\t\tdisconnection can lead to unexpected problems. We do not take responsibility for any issues\n+\t\t\t\t\t\tcaused by any disconnection.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Ch4>ACCEPTANCE OF TERMS\u003C\u002Fh4>\n+\t\t\t\t\t\u003Cspan>\n+\t\t\t\t\t\t1.Back up your website before upgrading. This will make sure you can restore your website in\n+\t\t\t\t\t\tcase any unexpected errors happen.\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t2. Maintain a stable Internet connection throughout the process. This will minimize the risk of\n+\t\t\t\t\t\tbreaking down your website.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t3. Do not interrupt the process once it starts. You should let the process run for a successful\n+\t\t\t\t\t\tdatabase update.\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"lp-agree-term\">\n+\t\t\t\t\t\t\u003Cspan>\n+\t\t\t\t\t\u003C?php esc_html_e( 'I agree the new Terms of Service.', 'learnpress' ); ?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"error\">\u003C?php esc_html_e( 'Please agree to the terms before upgrade!', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\t?>\n+\t\u003Cdiv class=\"wrapper-lp-upgrade-message\">\n+\t\t\u003Cdiv class=\"lp-upgrade-message\">\n+\t\t\t\u003Ch2>Upgrade finished\u003C\u002Fh2>\n+\t\t\t\u003Cdiv class=\"pd-2em\">\n+\t\t\t\t\u003Cdiv class=\"learn-press-message\">\n+\t\t\t\t\t\u003Cp>You have upgraded the database from plugin LearnPress successfully.\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>You can use the LearnPress functions and LearnPress add-ons now.\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp>Read more document \u003Ca href=\"\u003C?php echo LearnPress::$doc_link; ?>\">LearnPress\u003C\u002Fa>\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"wrapper-lp-loading\">\n+\t\t\u003C?php lp_skeleton_animation_html( 7 ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Cinput type=\"hidden\" name=\"message-when-upgrading\"\n+\t\t\tvalue=\"\u003C?php esc_html_e( 'Please don\\'t close this tab until the completed upgrade', 'learnpress' ); ?>\"\u002F>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"card\">\r\n-\t\u003Ch2>\u003C?php _e( 'LearnPress hard cache', 'learnpress' ); ?>\u003C\u002Fh2>\r\n-\t\u003Cp>\u003C?php _e( 'Hard cache is build-in tool of LearnPress for caching of static content such as course, lesson, quiz.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\u003C?php _e( 'When caching is enabled, the content will be cached when course is accessed in the first time.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\u003C?php _e( 'And it will not change in all later accesses until the cache is cleared.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp>\u003C?php _e( 'If the content is not changed after updating course, click the button below to flush the cache and apply changes.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\t\u003Clabel>\r\n-\t\t\u003Cinput type=\"checkbox\" name=\"enable_hard_cache\"\r\n-\t\t\t   value=\"1\" \u003C?php checked( LP_Settings::instance()->get( 'enable_hard_cache' ), 'yes' ); ?>>\r\n-\t\t\u003C?php _e( 'Enable\u002FDisable hard cache', 'learnpress' ); ?>\r\n-\t\u003C\u002Flabel>\r\n-\t\u003Cp class=\"tools-button\">\r\n-\t\t\u003Ca class=\"button\" id=\"learn-press-clear-cache\"\r\n-\t\t   data-text=\"\u003C?php esc_attr_e( 'Clear cache', 'learnpress' ); ?>\"\r\n-\t\t   data-cleaning-text=\"\u003C?php esc_attr_e( 'Cleaning...', 'learnpress' ); ?>\"\r\n-\t\t   href=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-clear-cache' ), 'clear-cache' ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Clear cache', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die();\n+?>\n+\n+\u003Cdiv class=\"card\">\n+\t\u003Ch2>\u003C?php _e( 'LearnPress hard cache', 'learnpress' ); ?>\u003C\u002Fh2>\n+\t\u003Cp>\u003C?php _e( 'Hard cache is build-in tool of LearnPress for caching of static content such as course, lesson, quiz.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp>\u003C?php _e( 'When caching is enabled, the content will be cached when course is accessed in the first time.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp>\u003C?php _e( 'And it will not change in all later accesses until the cache is cleared.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp>\u003C?php _e( 'If the content is not changed after updating course, click the button below to flush the cache and apply changes.', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\t\u003Clabel>\n+\t\t\u003Cinput type=\"checkbox\" name=\"enable_hard_cache\"\n+\t\t\t   value=\"1\" \u003C?php checked( LP_Settings::instance()->get( 'enable_hard_cache' ), 'yes' ); ?>>\n+\t\t\u003C?php _e( 'Enable\u002FDisable hard cache', 'learnpress' ); ?>\n+\t\u003C\u002Flabel>\n+\t\u003Cp class=\"tools-button\">\n+\t\t\u003Ca class=\"button\" id=\"learn-press-clear-cache\"\n+\t\t   data-text=\"\u003C?php esc_attr_e( 'Clear cache', 'learnpress' ); ?>\"\n+\t\t   data-cleaning-text=\"\u003C?php esc_attr_e( 'Cleaning...', 'learnpress' ); ?>\"\n+\t\t   href=\"\u003C?php echo wp_nonce_url( admin_url( 'index.php?page=lp-clear-cache' ), 'clear-cache' ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Clear cache', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-\u003C?php\r\n-learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-install-sample-data' );\r\n-learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-course' );\r\n-learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-user' );\r\n-learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-user-item' );\r\n+\u003C?php\n+learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-install-sample-data' );\n+learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-course' );\n+learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-user' );\n+learn_press_admin_view( 'tools\u002Fcourse\u002Fhtml-user-item' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-database.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-database.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-database.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-database.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-\u002F**\r\n- * List template tools database.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die();\r\n-\r\n-require_once 'database\u002Fhtml-upgrade-database.php';\r\n-require_once 'database\u002Fhtml-create-indexs-tables.php';\r\n-require_once 'database\u002Fhtml-rollback-db.php';\r\n-require_once 'database\u002Fhtml-reupgrade-db.php';\r\n-require_once 'database\u002Fhtml-clean-database.php';\r\n+\u003C?php\n+\u002F**\n+ * List template tools database.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die();\n+\n+require_once 'database\u002Fhtml-upgrade-database.php';\n+require_once 'database\u002Fhtml-create-indexs-tables.php';\n+require_once 'database\u002Fhtml-rollback-db.php';\n+require_once 'database\u002Fhtml-reupgrade-db.php';\n+require_once 'database\u002Fhtml-clean-database.php';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,101 +1,101 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying outdated template files in theme\u002Fchild-themes\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die();\r\n-\r\n-$templates          = LP_Outdated_Template_Helper::get_theme_templates();\r\n-$counts             = LP_Outdated_Template_Helper::$counts;\r\n-$theme              = wp_get_theme();\r\n-$template_dir       = get_template_directory();\r\n-$stylesheet_dir     = get_stylesheet_directory();\r\n-$child_theme_folder = '';\r\n-$theme_folder       = '';\r\n-\r\n-if ( $template_dir != $stylesheet_dir ) {\r\n-\t$child_theme_folder = basename( $stylesheet_dir );\r\n-\t$theme_folder       = basename( $template_dir );\r\n-}\r\n-?>\r\n-\r\n-\u003Ctable class=\"lp-template-overrides widefat\" cellspacing=\"0\">\r\n-\t\u003Cthead>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth colspan=\"3\">\r\n-\t\t\t\u003Ch4>\u003C?php printf( __( 'Override Templates (%s)', 'learnpress' ), esc_html( $theme['Name'] ) ); ?>\u003C\u002Fh4>\r\n-\t\t\u003C\u002Fth>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\t\u003Ctbody id=\"learn-press-template-files\">\r\n-\r\n-\t\u003C?php if ( $templates ) : ?>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth class=\"template-file\">\r\n-\t\t\t\t\u003C?php _e( 'File', 'learnpress' ); ?>\r\n-\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template current\"\r\n-\t\t\t\t\t   data-template=\"\">\u003C?php printf( __( 'All (%d)', 'learnpress' ), $counts['all'] ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C?php if ( $theme_folder && $child_theme_folder ) { ?>\r\n-\t\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\r\n-\t\t\t\t\t\t   data-template=\"\u003C?php echo esc_attr( $theme_folder ); ?>\">\u003C?php echo learn_press_get_theme_name( $theme_folder ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\r\n-\t\t\t\t\t\t   data-template=\"\u003C?php echo esc_attr( $child_theme_folder ); ?>\">\u003C?php echo learn_press_get_theme_name( $child_theme_folder ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\r\n-\t\t\t\t\t   data-filter=\"outdated\">\u003C?php printf( __( 'Outdated (%d)', 'learnpress' ), $counts['outdated'] ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\r\n-\t\t\t\t\t   data-filter=\"unversioned\">\u003C?php printf( __( 'Unversioned (%d)', 'learnpress' ), $counts['unversioned'] ); ?>\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"template-version\">\r\n-\t\t\t\t\u003C?php _e( 'Version', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"core-version\">\u003C?php _e( 'Core version', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003C\u002Ftr>\r\n-\r\n-\t\t\u003C?php foreach ( $templates as $template ) : ?>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$template_folder = '';\r\n-\t\t\tif ( $child_theme_folder && strpos( $template[0], $child_theme_folder ) !== false ) {\r\n-\t\t\t\t$template_folder = $child_theme_folder;\r\n-\t\t\t} else {\r\n-\t\t\t\t$template_folder = $theme_folder;\r\n-\t\t\t}\r\n-\t\t\t$template_class = $template[3] ? 'outdated' : ( $template[1] == '-' && $template[2] == '-' ? '' : 'up-to-date' );\r\n-\t\t\t$filter         = $template[3] ? 'outdated' : ( $template[1] == '-' ? 'unversioned' : '' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Ctr data-template=\"\u003C?php echo esc_attr( $template_folder ); ?>\"\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( $template[3] ) {\r\n-\t\t\t\t\techo 'data-filter-outdated=\"yes\"';\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( $template[1] == '-' ) {\r\n-\t\t\t\t\techo 'data-filter-unversioned=\"yes\"';\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\tclass=\"template-row \u003C?php echo esc_attr( $template_class ); ?>\">\r\n-\t\t\t\t\u003Ctd class=\"template-file\">\u003Ccode>\u003C?php echo esc_html( $template[0] ); ?>\u003C\u002Fcode>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"template-version\">\r\n-\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( $template[1] ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"core-version\">\u003Cspan>\u003C?php echo esc_html( $template[2] ); ?>\u003C\u002Fspan>\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003Ctr id=\"learn-press-no-templates\" class=\"\u003C?php echo esc_attr( $templates ? 'hide-if-js' : '' ); ?>\">\r\n-\t\t\u003Ctd colspan=\"3\">\r\n-\t\t\t\u003Cp>\u003C?php _e( 'There is no template file has overwritten', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Ftbody>\r\n-\u003C\u002Ftable>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying outdated template files in theme\u002Fchild-themes\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die();\n+\n+$templates          = LP_Outdated_Template_Helper::get_theme_templates();\n+$counts             = LP_Outdated_Template_Helper::$counts;\n+$theme              = wp_get_theme();\n+$template_dir       = get_template_directory();\n+$stylesheet_dir     = get_stylesheet_directory();\n+$child_theme_folder = '';\n+$theme_folder       = '';\n+\n+if ( $template_dir != $stylesheet_dir ) {\n+\t$child_theme_folder = basename( $stylesheet_dir );\n+\t$theme_folder       = basename( $template_dir );\n+}\n+?>\n+\n+\u003Ctable class=\"lp-template-overrides widefat\" cellspacing=\"0\">\n+\t\u003Cthead>\n+\t\u003Ctr>\n+\t\t\u003Cth colspan=\"3\">\n+\t\t\t\u003Ch4>\u003C?php printf( __( 'Override Templates (%s)', 'learnpress' ), esc_html( $theme['Name'] ) ); ?>\u003C\u002Fh4>\n+\t\t\u003C\u002Fth>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\t\u003Ctbody id=\"learn-press-template-files\">\n+\n+\t\u003C?php if ( $templates ) : ?>\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth class=\"template-file\">\n+\t\t\t\t\u003C?php _e( 'File', 'learnpress' ); ?>\n+\t\t\t\t\u003Cp>\n+\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template current\"\n+\t\t\t\t\t   data-template=\"\">\u003C?php printf( __( 'All (%d)', 'learnpress' ), $counts['all'] ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\u003C?php if ( $theme_folder && $child_theme_folder ) { ?>\n+\t\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\n+\t\t\t\t\t\t   data-template=\"\u003C?php echo esc_attr( $theme_folder ); ?>\">\u003C?php echo learn_press_get_theme_name( $theme_folder ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\n+\t\t\t\t\t\t   data-template=\"\u003C?php echo esc_attr( $child_theme_folder ); ?>\">\u003C?php echo learn_press_get_theme_name( $child_theme_folder ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\u003C?php } ?>\n+\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\n+\t\t\t\t\t   data-filter=\"outdated\">\u003C?php printf( __( 'Outdated (%d)', 'learnpress' ), $counts['outdated'] ); ?>\u003C\u002Fa>\n+\t\t\t\t\t\u003Ca href=\"\" class=\"learn-press-filter-template\"\n+\t\t\t\t\t   data-filter=\"unversioned\">\u003C?php printf( __( 'Unversioned (%d)', 'learnpress' ), $counts['unversioned'] ); ?>\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fp>\n+\t\t\t\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"template-version\">\n+\t\t\t\t\u003C?php _e( 'Version', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"core-version\">\u003C?php _e( 'Core version', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003C\u002Ftr>\n+\n+\t\t\u003C?php foreach ( $templates as $template ) : ?>\n+\t\t\t\u003C?php\n+\t\t\t$template_folder = '';\n+\t\t\tif ( $child_theme_folder && strpos( $template[0], $child_theme_folder ) !== false ) {\n+\t\t\t\t$template_folder = $child_theme_folder;\n+\t\t\t} else {\n+\t\t\t\t$template_folder = $theme_folder;\n+\t\t\t}\n+\t\t\t$template_class = $template[3] ? 'outdated' : ( $template[1] == '-' && $template[2] == '-' ? '' : 'up-to-date' );\n+\t\t\t$filter         = $template[3] ? 'outdated' : ( $template[1] == '-' ? 'unversioned' : '' );\n+\t\t\t?>\n+\n+\t\t\t\u003Ctr data-template=\"\u003C?php echo esc_attr( $template_folder ); ?>\"\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( $template[3] ) {\n+\t\t\t\t\techo 'data-filter-outdated=\"yes\"';\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( $template[1] == '-' ) {\n+\t\t\t\t\techo 'data-filter-unversioned=\"yes\"';\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\tclass=\"template-row \u003C?php echo esc_attr( $template_class ); ?>\">\n+\t\t\t\t\u003Ctd class=\"template-file\">\u003Ccode>\u003C?php echo esc_html( $template[0] ); ?>\u003C\u002Fcode>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"template-version\">\n+\t\t\t\t\t\u003Cspan>\u003C?php echo esc_html( $template[1] ); ?>\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"core-version\">\u003Cspan>\u003C?php echo esc_html( $template[2] ); ?>\u003C\u002Fspan>\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C?php endif; ?>\n+\n+\t\u003Ctr id=\"learn-press-no-templates\" class=\"\u003C?php echo esc_attr( $templates ? 'hide-if-js' : '' ); ?>\">\n+\t\t\u003Ctd colspan=\"3\">\n+\t\t\t\u003Cp>\u003C?php _e( 'There is no template file has overwritten', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Ftbody>\n+\u003C\u002Ftable>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fsubscription-button.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fsubscription-button.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fsubscription-button.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Ftools\u002Fsubscription-button.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Newsletter button.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FAdmin\u002FViews\r\n- * @version 3.0.10\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-notice notice notice-warning\" id=\"learn-press-newsletter-button\">\r\n-\t\u003Cp>\r\n-\t\t\u003Cstrong>\u003C?php echo __( 'If you don\\'t want to miss exclussive offers from us, join our newsletter.', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cp>\r\n-\t\t\u003Ca class=\"button button-primary lp-button-newsletter\" data-dismiss-notice=\"newsletter-button\"\r\n-\t\t   data-context=\"newsletter\">\u003C?php echo __( 'Sure! I want to get the latest news.', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cbutton class=\"notice-dismiss\" data-dismiss-notice=\"newsletter-button\">\u003C\u002Fbutton>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Newsletter button.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FAdmin\u002FViews\n+ * @version 3.0.10\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die();\n+?>\n+\n+\u003Cdiv class=\"lp-notice notice notice-warning\" id=\"learn-press-newsletter-button\">\n+\t\u003Cp>\n+\t\t\u003Cstrong>\u003C?php echo __( 'If you don\\'t want to miss exclussive offers from us, join our newsletter.', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\u003C\u002Fp>\n+\t\u003Cp>\n+\t\t\u003Ca class=\"button button-primary lp-button-newsletter\" data-dismiss-notice=\"newsletter-button\"\n+\t\t   data-context=\"newsletter\">\u003C?php echo __( 'Sure! I want to get the latest news.', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\t\u003Cbutton class=\"notice-dismiss\" data-dismiss-notice=\"newsletter-button\">\u003C\u002Fbutton>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourse-progress.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourse-progress.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourse-progress.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourse-progress.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author Thimpress\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-if ( ! isset( $user ) || ! isset( $course ) || ! isset( $course_result ) || ! isset( $course_data ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$passing_condition = $course->get_passing_condition();\r\n-\u002F*$completed_percent = 0;\r\n-\r\n-if ( isset( $course_result['count_items'] ) && isset( $course_result['completed_items'] )\r\n-\t&& $course_result['count_items'] > 0 ) {\r\n-\t$completed_percent = round( $course_result['completed_items'] * 100 \u002F $course_result['count_items'], 2 );\r\n-}*\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-results-progress\">\r\n-\t\u003Cdiv class=\"items-progress lp-progress-row\">\r\n-\r\n-\t\t\u003C?php $heading = apply_filters( 'learn-press\u002Fcourse\u002Fitems-completed-heading', esc_html__( 'Items completed:', 'learnpress' ) ); ?>\r\n-\r\n-\t\t\u003C?php if ( $heading ) : ?>\r\n-\t\t\t\u003Ch4 class=\"lp-course-progress-heading\">\u003C?php echo esc_html__( 'Items completed:', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003Cspan class=\"number\">\u003C?php printf( __( '%1$d of %2$d items', 'learnpress' ), $course_result['completed_items'] ?? 0, $course->count_items() ); ?>\u003C\u002Fspan>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"course-progress lp-progress-row\">\r\n-\r\n-\t\t\u003C?php $heading = apply_filters( 'learn-press\u002Fcourse\u002Fresult-heading', esc_html__( 'Course progress:', 'learnpress' ) ); ?>\r\n-\r\n-\t\t\u003C?php if ( $heading ) : ?>\r\n-\t\t\t\u003Ch4 class=\"lp-course-progress-heading\">\r\n-\t\t\t\t\u003C?php echo esc_html( $heading ); ?>\r\n-\t\t\t\u003C\u002Fh4>\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-course-status\">\r\n-\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\u003C?php echo round( $course_result['result'], 2 ); ?>\r\n-\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\r\n-\t\t\t\u003C?php $graduation = $course_data->get_graduation(); ?>\r\n-\t\t\t\u003C?php if ( $graduation ) : ?>\r\n-\t\t\t\t\u003Cspan class=\"lp-graduation \u003C?php echo esc_attr( $graduation ); ?>\" style=\"color: #222; font-weight: 600;\">\r\n-\t\t\t\t- \u003C?php learn_press_course_grade_html( $graduation ); ?>\r\n-\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author Thimpress\n+ * @version 1.0.1\n+ *\u002F\n+\n+if ( ! isset( $user ) || ! isset( $course ) || ! isset( $course_result ) || ! isset( $course_data ) ) {\n+\treturn;\n+}\n+\n+$passing_condition = $course->get_passing_condition();\n+\u002F*$completed_percent = 0;\n+\n+if ( isset( $course_result['count_items'] ) && isset( $course_result['completed_items'] )\n+\t&& $course_result['count_items'] > 0 ) {\n+\t$completed_percent = round( $course_result['completed_items'] * 100 \u002F $course_result['count_items'], 2 );\n+}*\u002F\n+\n+?>\n+\n+\u003Cdiv class=\"course-results-progress\">\n+\t\u003Cdiv class=\"items-progress lp-progress-row\">\n+\n+\t\t\u003C?php $heading = apply_filters( 'learn-press\u002Fcourse\u002Fitems-completed-heading', esc_html__( 'Items completed:', 'learnpress' ) ); ?>\n+\n+\t\t\u003C?php if ( $heading ) : ?>\n+\t\t\t\u003Ch4 class=\"lp-course-progress-heading\">\u003C?php echo esc_html__( 'Items completed:', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003Cspan class=\"number\">\u003C?php printf( __( '%1$d of %2$d items', 'learnpress' ), $course_result['completed_items'] ?? 0, $course->count_items() ); ?>\u003C\u002Fspan>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"course-progress lp-progress-row\">\n+\n+\t\t\u003C?php $heading = apply_filters( 'learn-press\u002Fcourse\u002Fresult-heading', esc_html__( 'Course progress:', 'learnpress' ) ); ?>\n+\n+\t\t\u003C?php if ( $heading ) : ?>\n+\t\t\t\u003Ch4 class=\"lp-course-progress-heading\">\n+\t\t\t\t\u003C?php echo esc_html( $heading ); ?>\n+\t\t\t\u003C\u002Fh4>\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003Cdiv class=\"lp-course-status\">\n+\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\u003C?php echo round( $course_result['result'], 2 ); ?>\n+\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fspan>\n+\n+\t\t\t\u003C?php $graduation = $course_data->get_graduation(); ?>\n+\t\t\t\u003C?php if ( $graduation ) : ?>\n+\t\t\t\t\u003Cspan class=\"lp-graduation \u003C?php echo esc_attr( $graduation ); ?>\" style=\"color: #222; font-weight: 600;\">\n+\t\t\t\t- \u003C?php learn_press_course_grade_html( $graduation ); ?>\n+\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * HTML View for displaying courses user enrolled in wp profile.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FViews\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || die;\r\n-\r\n-if ( ! isset( $user_id ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$profile              = LP_Profile::instance( $user_id );\r\n-$user                 = $profile->get_user();\r\n-$slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.my-courses', 'my-courses' );\r\n-$link_user_profile    = learn_press_user_profile_link( $user_id ) . $slug_profile_courses;\r\n-?>\r\n-\u003Cp>\r\n-\t\u003Cb>\u003C?php _e( 'The course list of enrolled users', 'learnpress' ); ?>\u003C\u002Fb>\r\n-\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link_user_profile ); ?>\" target=\"_blank\">\u003C?php _e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * HTML View for displaying courses user enrolled in wp profile.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FViews\n+ * @version 4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || die;\n+\n+if ( ! isset( $user_id ) ) {\n+\treturn;\n+}\n+\n+$profile              = LP_Profile::instance( $user_id );\n+$user                 = $profile->get_user();\n+$slug_profile_courses = LP_Settings::instance()->get( 'profile_endpoints.my-courses', 'my-courses' );\n+$link_user_profile    = $profile->get_tab_link( $slug_profile_courses );\n+?>\n+\u003Cp>\n+\t\u003Cb>\u003C?php _e( 'The course list of enrolled users', 'learnpress' ); ?>\u003C\u002Fb>\n+\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link_user_profile ); ?>\" target=\"_blank\">\u003C?php _e( 'View', 'learnpress' ); ?>\u003C\u002Fa>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FAbstractAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FAbstractAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FAbstractAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FAbstractAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * class AjaxBase\r\n- *\r\n- * @since 4.2.7.6\r\n- * @version 1.0.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-\u002F**\r\n- * @use LoadContentViaAjax::load_content_via_ajax\r\n- *\r\n- * $action must unique name on all Ajax classes.\r\n- * Because not specify a specific class.\r\n- *\u002F\r\n-abstract class AbstractAjax {\r\n-\tpublic static function catch_lp_ajax() {\r\n-\t\tif ( ! empty( $_REQUEST['lp-load-ajax'] ) ) {\r\n-\t\t\t$action = $_REQUEST['lp-load-ajax'];\r\n-\t\t\t$nonce  = $_REQUEST['nonce'] ?? '';\r\n-\t\t\t$class  = new static();\r\n-\r\n-\t\t\tif ( ! method_exists( $class, $action ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For case cache HTML, so cache nonce is not required.\r\n-\t\t\t$class_no_nonce = [\r\n-\t\t\t\tLoadContentViaAjax::class,\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F Todo: should write separation check none login and none not login\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\r\n-\t\t\t\tif ( ! in_array( get_class( $class ), $class_no_nonce ) ) {\r\n-\t\t\t\t\twp_die( 'Invalid request!', 400 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_callable( [ $class, $action ] ) ) {\r\n-\t\t\t\tcall_user_func( [ $class, $action ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class AjaxBase\n+ *\n+ * @since 4.2.7.6\n+ * @version 1.0.5\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+\u002F**\n+ * @use LoadContentViaAjax::load_content_via_ajax\n+ *\n+ * $action must unique name on all Ajax classes.\n+ * Because not specify a specific class.\n+ *\u002F\n+abstract class AbstractAjax {\n+\tpublic static function catch_lp_ajax() {\n+\t\tif ( ! empty( $_REQUEST['lp-load-ajax'] ) ) {\n+\t\t\t$action = $_REQUEST['lp-load-ajax'];\n+\t\t\t$nonce  = $_REQUEST['nonce'] ?? '';\n+\t\t\t$class  = new static();\n+\n+\t\t\tif ( ! method_exists( $class, $action ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For case cache HTML, so cache nonce is not required.\n+\t\t\t$class_no_nonce = [\n+\t\t\t\tLoadContentViaAjax::class,\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F Todo: should write separation check none login and none not login\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'wp_rest' ) ) {\n+\t\t\t\tif ( ! in_array( get_class( $class ), $class_no_nonce ) ) {\n+\t\t\t\t\twp_die( 'Invalid request!', 400 );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( is_callable( [ $class, $action ] ) ) {\n+\t\t\t\tcall_user_func( [ $class, $action ] );\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FAI\u002FOpenAiAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FAI\u002FOpenAiAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FAI\u002FOpenAiAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FAI\u002FOpenAiAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,500 +1,514 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Ajax\\AI;\r\n-\r\n-use Exception;\r\n-use LearnPress;\r\n-use LearnPress\\Ajax\\AbstractAjax;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Services\\CourseService;\r\n-use LearnPress\\Services\\OpenAiService;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminCreateCourseAITemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditCourseCurriculumWithAITemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditWithAITemplate;\r\n-use LP_Helper;\r\n-use LP_Request;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * class OpenAiAjax\r\n- * Handle request Open AI\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class OpenAiAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Generate prompt course with AI\r\n-\t *\u002F\r\n-\tpublic function openai_generate_prompt_course() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str = LP_Request::get_param( 'data' );\r\n-\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$prompt   = Config::instance()->get( 'prompt-create-course', 'settings\u002FopenAi', compact( 'params' ) );\r\n-\r\n-\t\t\t$response->data    = $prompt;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Generate prompt successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate data course with prompt submitted\r\n-\t *\u002F\r\n-\tpublic function openai_generate_data_course() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str = LP_Request::get_param( 'data' );\r\n-\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\r\n-\t\t\t$args     = [\r\n-\t\t\t\t'prompt' => $prompt,\r\n-\t\t\t];\r\n-\r\n-\t\t\t$result            = OpenAiService::instance()->send_request( $args );\r\n-\t\t\t$lp_structure_data = $result['lp_structure_data'] ?? [];\r\n-\t\t\tif ( count( $lp_structure_data ) > 0 ) {\r\n-\t\t\t\t$result['lp_structure_course'] = $lp_structure_data[0] ?? '';\r\n-\t\t\t\tif ( empty( $result['lp_structure_course'] )\r\n-\t\t\t\t\t|| ! is_array( $result['lp_structure_course'] ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Error: no data structure course generated!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result['lp_html_preview'] = AdminCreateCourseAITemplate::html_preview_with_data( $result['lp_structure_course'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data    = $result;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Generate course successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create course with data generated\r\n-\t *\u002F\r\n-\tpublic function openai_create_course() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_str              = LP_Request::get_param( 'data' );\r\n-\t\t\t$data                  = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$data_structure_course = $data['lp_structure_course'] ?? [];\r\n-\t\t\tif ( empty( $data_structure_course ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid data to create course!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseService = CourseService::instance();\r\n-\r\n-\t\t\t$data_info_main  = [\r\n-\t\t\t\t'post_title'   => $data_structure_course['course_title'] ?? 'AI Generated Course',\r\n-\t\t\t\t'post_content' => $data_structure_course['course_description'] ?? '',\r\n-\t\t\t\t'post_status'  => 'draft',\r\n-\t\t\t\t'post_author'  => get_current_user_id(),\r\n-\t\t\t];\r\n-\t\t\t$coursePostModel = $courseService->create_info_main( $data_info_main );\r\n-\r\n-\t\t\t\u002F\u002F Create section\r\n-\t\t\t$data_sections = $data_structure_course['sections'] ?? [];\r\n-\t\t\tforeach ( $data_sections as $data_section ) {\r\n-\t\t\t\t$section_name        = $data_section['section_title'] ?? '';\r\n-\t\t\t\t$section_description = $data_section['section_description'] ?? '';\r\n-\t\t\t\t$lesson_items        = $data_section['lessons'] ?? [];\r\n-\t\t\t\t$quiz_items          = $data_section['quizzes'] ?? [];\r\n-\r\n-\t\t\t\t$courseSectionModel = $coursePostModel->add_section(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'section_name'        => $section_name,\r\n-\t\t\t\t\t\t'section_description' => $section_description,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F\u002F Create lesson items for section\r\n-\t\t\t\tforeach ( $lesson_items as $lesson_item ) {\r\n-\t\t\t\t\t$lesson_name        = $lesson_item['lesson_title'] ?? '';\r\n-\t\t\t\t\t$lesson_description = $lesson_item['lesson_description'] ?? '';\r\n-\r\n-\t\t\t\t\t$courseSectionModel->create_item_and_add(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'item_title'   => $lesson_name,\r\n-\t\t\t\t\t\t\t'item_type'    => LP_LESSON_CPT,\r\n-\t\t\t\t\t\t\t'item_content' => $lesson_description,\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Create quiz items for section\r\n-\t\t\t\tforeach ( $quiz_items as $quiz_item ) {\r\n-\t\t\t\t\t$quiz_name        = $quiz_item['quiz_title'] ?? '';\r\n-\t\t\t\t\t$quiz_description = $quiz_item['quiz_description'] ?? '';\r\n-\r\n-\t\t\t\t\t$courseSectionQuizModel = $courseSectionModel->create_item_and_add(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'item_title'   => $quiz_name,\r\n-\t\t\t\t\t\t\t'item_type'    => LP_QUIZ_CPT,\r\n-\t\t\t\t\t\t\t'item_content' => $quiz_description,\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$quizPostModel          = QuizPostModel::find( $courseSectionQuizModel->item_id, true );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Create questions for quiz\r\n-\t\t\t\t\t$question_items = $quiz_item['questions'] ?? [];\r\n-\t\t\t\t\tforeach ( $question_items as $question_item ) {\r\n-\t\t\t\t\t\t$question_name        = $question_item['question_title'] ?? '';\r\n-\t\t\t\t\t\t$question_description = $question_item['question_description'] ?? '';\r\n-\t\t\t\t\t\t$options              = $question_item['options'] ?? [];\r\n-\t\t\t\t\t\t$correct_answer       = $question_item['correct_answer'] ?? '';\r\n-\r\n-\t\t\t\t\t\t$data_answers = [];\r\n-\t\t\t\t\t\tforeach ( $options as $index => $option ) {\r\n-\t\t\t\t\t\t\t$data_answers[] = [\r\n-\t\t\t\t\t\t\t\t'title'   => $option,\r\n-\t\t\t\t\t\t\t\t'is_true' => ( $option === $correct_answer ) ? 'yes' : 'no',\r\n-\t\t\t\t\t\t\t\t'order'   => $index + 1,\r\n-\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$quizPostModel->create_question_and_add(\r\n-\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t'question_title'   => $question_name,\r\n-\t\t\t\t\t\t\t\t'question_content' => $question_description,\r\n-\t\t\t\t\t\t\t\t'question_type'    => 'single_choice',\r\n-\t\t\t\t\t\t\t\t'question_options' => $data_answers,\r\n-\t\t\t\t\t\t\t]\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_edit_url = $coursePostModel->get_edit_link();\r\n-\r\n-\t\t\t$response->data->edit_course_url = $course_edit_url;\r\n-\t\t\t$response->data->button_label    = __( 'Redirecting...', 'learnpress' );\r\n-\t\t\t$response->status                = 'success';\r\n-\t\t\t$response->message               = __( 'Create Course Successfully! Redirecting to course detail...', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate prompt title with AI\r\n-\t *\u002F\r\n-\tpublic function openai_generate_prompt() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str       = LP_Request::get_param( 'data' );\r\n-\t\t\t$params         = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$lp_prompt_type = $params['lp-prompt-type'] ?? '';\r\n-\r\n-\t\t\tswitch ( $lp_prompt_type ) {\r\n-\t\t\t\tcase 'course-description':\r\n-\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-description-course', 'settings\u002FopenAi', compact( 'params' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'course-title':\r\n-\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-title-course', 'settings\u002FopenAi', compact( 'params' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'course-image':\r\n-\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-image-course', 'settings\u002FopenAi', compact( 'params' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'course-curriculum':\r\n-\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-curriculum-course', 'settings\u002FopenAi', compact( 'params' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase $lp_prompt_type:\r\n-\t\t\t\t\t$prompt = apply_filters( 'lp-prompt-type', '', $lp_prompt_type, $params );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$prompt = '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data    = $prompt;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Generate prompt successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate data course with prompt submitted\r\n-\t *\u002F\r\n-\tpublic function openai_generate_data() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str = LP_Request::get_param( 'data' );\r\n-\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\r\n-\t\t\t$args     = [\r\n-\t\t\t\t'prompt' => $prompt,\r\n-\t\t\t];\r\n-\r\n-\t\t\t$result                    = OpenAiService::instance()->send_request( $args );\r\n-\t\t\t$lp_structure_data         = $result['lp_structure_data'] ?? [];\r\n-\t\t\t$result['lp_html_preview'] = '';\r\n-\t\t\tif ( count( $lp_structure_data ) > 0 ) {\r\n-\t\t\t\t$lp_prompt_type = $params['lp-prompt-type'] ?? '';\r\n-\t\t\t\tswitch ( $lp_prompt_type ) {\r\n-\t\t\t\t\tcase 'course-description':\r\n-\t\t\t\t\tcase 'course-title':\r\n-\t\t\t\t\t\t$results = $lp_structure_data[0];\r\n-\t\t\t\t\t\tif ( isset( $results['results'] ) ) {\r\n-\t\t\t\t\t\t\t$results = $results['results'];\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t\t\t'Error: No data was generated. The requested data may be large, increase the Max Tokens in settings and try again.',\r\n-\t\t\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tforeach ( $results as $index => $data_item ) {\r\n-\t\t\t\t\t\t\t$data_item                  = $data_item['item'] ?? '';\r\n-\t\t\t\t\t\t\t$args                       = [\r\n-\t\t\t\t\t\t\t\t'index'        => $index,\r\n-\t\t\t\t\t\t\t\t'value'        => $data_item,\r\n-\t\t\t\t\t\t\t\t'target-apply' => $params['target-apply'] ?? '',\r\n-\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t\t$result['lp_html_preview'] .= AdminEditWithAITemplate::instance()->html_list_results( $args );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'course-curriculum':\r\n-\t\t\t\t\t\t$result['lp_structure_course'] = $lp_structure_data[0];\r\n-\t\t\t\t\t\t$result['lp_html_preview']     = AdminEditCourseCurriculumWithAITemplate::html_preview_with_data(\r\n-\t\t\t\t\t\t\t$result['lp_structure_course']\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase $lp_prompt_type:\r\n-\t\t\t\t\t\t$result['lp_html_preview'] = apply_filters( 'lp-openai-render-data-generated', '', $lp_prompt_type, $lp_structure_data );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result['lp_html_preview'] .= sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"hidden\" name=\"lp-openai-generated-data\" value=\"%s\" \u002F>',\r\n-\t\t\t\tTemplate::convert_data_to_json( $lp_structure_data )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$response->data    = $result;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Generate course successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate image with prompt submitted\r\n-\t * Send data to Open AI to generate image\r\n-\t *\r\n-\t * @since 4.3.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function openai_generate_image() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str = LP_Request::get_param( 'data' );\r\n-\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\r\n-\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\r\n-\t\t\t$args     = [\r\n-\t\t\t\t'prompt' => $prompt,\r\n-\t\t\t\t'n'      => intval( $params['outputs'] ?? 1 ),\r\n-\t\t\t\t'size'   => $params['size'] ?? '',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$result                    = OpenAiService::instance()->send_request_create_image( $args );\r\n-\t\t\t$html_image                = '';\r\n-\t\t\t$result['lp_html_preview'] = '';\r\n-\t\t\t$data                      = $result['data'] ?? [];\r\n-\t\t\tif ( ! empty( $data ) ) {\r\n-\t\t\t\t$result['lp_html_preview'] = '\u003Cdiv class=\"lp-ai-images-warp\">';\r\n-\t\t\t\tforeach ( $data as $index => $data_item ) {\r\n-\t\t\t\t\t$image_base_64 = $data_item['b64_json'] ?? '';\r\n-\t\t\t\t\t$image_url     = $data_item['url'] ?? '';\r\n-\r\n-\t\t\t\t\tif ( ! empty( $image_url ) ) {\r\n-\t\t\t\t\t\t$html_image = sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cimg src=\"%s\" alt=\"AI Generated Image\" \u002F>',\r\n-\t\t\t\t\t\t\tesc_url( $image_url )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} elseif ( ! empty( $image_base_64 ) ) {\r\n-\t\t\t\t\t\t$html_image = sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cimg src=\"data:image\u002Fpng;base64,%s\" alt=\"AI Generated Image\" \u002F>',\r\n-\t\t\t\t\t\t\tesc_attr( $image_base_64 )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( empty( $html_image ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$result['lp_html_preview'] .= '\u003Cdiv class=\"lp-ai-image-item\">';\r\n-\t\t\t\t\t$result['lp_html_preview'] .= $html_image;\r\n-\t\t\t\t\t$result['lp_html_preview'] .= sprintf(\r\n-\t\t\t\t\t\t'\u003Cbutton class=\"lp-btn-ai-apply-image lp-button\" type=\"button\"\r\n-\t\t\t\t\t\t\tdata-send=\"%s\">%s\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t'action'       => 'openai_apply_image_feature',\r\n-\t\t\t\t\t\t\t\t'image-url'    => ! empty( $image_url ) ? $image_url : '',\r\n-\t\t\t\t\t\t\t\t'image-base64' => ! empty( $image_base_64 ) ? $image_base_64 : '',\r\n-\t\t\t\t\t\t\t\t'id_url'       => 'apply-image-feature',\r\n-\t\t\t\t\t\t\t]\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t__( 'Apply Image', 'learnpress' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$result['lp_html_preview'] .= '\u003C\u002Fdiv>';\r\n-\t\t\t\t}\r\n-\t\t\t\t$result['lp_html_preview'] .= '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data    = $result;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Generate image successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Apply image feature to post\r\n-\t * Upload image to media and set as feature image for post\r\n-\t *\r\n-\t * @since 4.3.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function openai_apply_image_feature() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\tset_time_limit( 0 );\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str     = $_POST['data'] ?? '';\r\n-\t\t\t$params       = LP_Helper::json_decode( wp_unslash( $data_str ), true );\r\n-\t\t\t$image_base64 = $params['image-base64'] ?? '';\r\n-\t\t\t$image_url    = $params['image-url'] ?? '';\r\n-\r\n-\t\t\t$params     = LP_Helper::sanitize_params_submitted( $params );\r\n-\t\t\t$post_id    = $params['post-id'] ?? '';\r\n-\t\t\t$post_title = $params['post-title'] ?? uniqid();\r\n-\t\t\t$post_slug  = sanitize_title( $post_title );\r\n-\r\n-\t\t\tif ( empty( $post_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid post ID.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! function_exists( 'media_handle_sideload' ) ) {\r\n-\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fmedia.php';\r\n-\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Ffile.php';\r\n-\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fimage.php';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $image_url ) ) {\r\n-\t\t\t\t$tmp      = download_url( $image_url );\r\n-\t\t\t\t$fileExt  = pathinfo( parse_url( $image_url, PHP_URL_PATH ), PATHINFO_EXTENSION );\r\n-\t\t\t\t$filename = sanitize_file_name( $post_slug . '-' . uniqid() . '.' . $fileExt );\r\n-\r\n-\t\t\t} elseif ( ! empty( $image_base64 ) ) {\r\n-\t\t\t\t$decoded_image = base64_decode( $image_base64 );\r\n-\t\t\t\t$tmp           = wp_tempnam();\r\n-\t\t\t\tfile_put_contents( $tmp, $decoded_image );\r\n-\t\t\t\t$filename = sanitize_file_name( $post_slug . '-' . uniqid() . '.png' );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( __( 'No image data provided.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$file_array    = [\r\n-\t\t\t\t'name'     => $filename,\r\n-\t\t\t\t'tmp_name' => $tmp,\r\n-\t\t\t];\r\n-\t\t\t$attachment_id = media_handle_sideload( $file_array, $post_id );\r\n-\r\n-\t\t\tif ( ! is_wp_error( $attachment_id ) ) {\r\n-\t\t\t\tset_post_thumbnail( $post_id, $attachment_id );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( $attachment_id->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$args = [\r\n-\t\t\t\t'src'           => wp_get_attachment_url( $attachment_id ),\r\n-\t\t\t\t'post-id'       => $post_id,\r\n-\t\t\t\t'attachment-id' => $attachment_id,\r\n-\t\t\t];\r\n-\r\n-\t\t\t$response->data->html_image    = AdminEditWithAITemplate::instance()->html_feature_image_created( $args );\r\n-\t\t\t$response->data->attachment_id = $attachment_id;\r\n-\t\t\t$response->status              = 'success';\r\n-\t\t\t$response->message             = __( 'Apply image successfully!', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\tset_time_limit( LearnPress::$time_limit_default_of_sever );\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Ajax\\AI;\n+\n+use Exception;\n+use LearnPress;\n+use LearnPress\\Ajax\\AbstractAjax;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Services\\CourseService;\n+use LearnPress\\Services\\OpenAiService;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminCreateCourseAITemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditCourseCurriculumWithAITemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditWithAITemplate;\n+use LP_Helper;\n+use LP_Request;\n+use LP_REST_Response;\n+use Throwable;\n+\n+\u002F**\n+ * class OpenAiAjax\n+ * Handle request Open AI\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class OpenAiAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Generate prompt course with AI\n+\t *\u002F\n+\tpublic function openai_generate_prompt_course() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str = LP_Request::get_param( 'data' );\n+\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$prompt   = Config::instance()->get( 'prompt-create-course', 'settings\u002FopenAi', compact( 'params' ) );\n+\n+\t\t\t$response->data    = $prompt;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Generate prompt successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Generate data course with prompt submitted\n+\t *\u002F\n+\tpublic function openai_generate_data_course() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str = LP_Request::get_param( 'data' );\n+\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\n+\t\t\t$args     = [\n+\t\t\t\t'prompt' => $prompt,\n+\t\t\t];\n+\n+\t\t\t$result            = OpenAiService::instance()->send_request( $args );\n+\t\t\t$lp_structure_data = $result['lp_structure_data'] ?? [];\n+\t\t\tif ( count( $lp_structure_data ) > 0 ) {\n+\t\t\t\t$result['lp_structure_course'] = $lp_structure_data[0] ?? '';\n+\t\t\t\tif ( empty( $result['lp_structure_course'] )\n+\t\t\t\t\t|| ! is_array( $result['lp_structure_course'] ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Error: no data structure course generated!', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$result['lp_html_preview'] = AdminCreateCourseAITemplate::html_preview_with_data( $result['lp_structure_course'] );\n+\t\t\t}\n+\n+\t\t\t$response->data    = $result;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Generate course successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Create course with data generated\n+\t *\u002F\n+\tpublic function openai_create_course() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str              = LP_Request::get_param( 'data' );\n+\t\t\t$data                  = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$data_structure_course = $data['lp_structure_course'] ?? [];\n+\t\t\t$is_course_builder     = ! empty( $data['is_course_builder'] );\n+\t\t\tif ( empty( $data_structure_course ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid data to create course!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseService = CourseService::instance();\n+\n+\t\t\t$data_info_main  = [\n+\t\t\t\t'post_title'   => $data_structure_course['course_title'] ?? 'AI Generated Course',\n+\t\t\t\t'post_content' => $data_structure_course['course_description'] ?? '',\n+\t\t\t\t'post_status'  => 'draft',\n+\t\t\t\t'post_author'  => get_current_user_id(),\n+\t\t\t];\n+\t\t\t$coursePostModel = $courseService->create_info_main( $data_info_main );\n+\n+\t\t\t\u002F\u002F Create section\n+\t\t\t$data_sections = $data_structure_course['sections'] ?? [];\n+\t\t\tforeach ( $data_sections as $data_section ) {\n+\t\t\t\t$section_name        = $data_section['section_title'] ?? '';\n+\t\t\t\t$section_description = $data_section['section_description'] ?? '';\n+\t\t\t\t$lesson_items        = $data_section['lessons'] ?? [];\n+\t\t\t\t$quiz_items          = $data_section['quizzes'] ?? [];\n+\n+\t\t\t\t$courseSectionModel = $coursePostModel->add_section(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'section_name'        => $section_name,\n+\t\t\t\t\t\t'section_description' => $section_description,\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F\u002F Create lesson items for section\n+\t\t\t\tforeach ( $lesson_items as $lesson_item ) {\n+\t\t\t\t\t$lesson_name        = $lesson_item['lesson_title'] ?? '';\n+\t\t\t\t\t$lesson_description = $lesson_item['lesson_description'] ?? '';\n+\n+\t\t\t\t\t$courseSectionModel->create_item_and_add(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'item_title'   => $lesson_name,\n+\t\t\t\t\t\t\t'item_type'    => LP_LESSON_CPT,\n+\t\t\t\t\t\t\t'item_content' => $lesson_description,\n+\t\t\t\t\t\t]\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Create quiz items for section\n+\t\t\t\tforeach ( $quiz_items as $quiz_item ) {\n+\t\t\t\t\t$quiz_name        = $quiz_item['quiz_title'] ?? '';\n+\t\t\t\t\t$quiz_description = $quiz_item['quiz_description'] ?? '';\n+\n+\t\t\t\t\t$courseSectionQuizModel = $courseSectionModel->create_item_and_add(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'item_title'   => $quiz_name,\n+\t\t\t\t\t\t\t'item_type'    => LP_QUIZ_CPT,\n+\t\t\t\t\t\t\t'item_content' => $quiz_description,\n+\t\t\t\t\t\t]\n+\t\t\t\t\t);\n+\t\t\t\t\t$quizPostModel          = QuizPostModel::find( $courseSectionQuizModel->item_id, true );\n+\n+\t\t\t\t\t\u002F\u002F Create questions for quiz\n+\t\t\t\t\t$question_items = $quiz_item['questions'] ?? [];\n+\t\t\t\t\tforeach ( $question_items as $question_item ) {\n+\t\t\t\t\t\t$question_name        = $question_item['question_title'] ?? '';\n+\t\t\t\t\t\t$question_description = $question_item['question_description'] ?? '';\n+\t\t\t\t\t\t$options              = $question_item['options'] ?? [];\n+\t\t\t\t\t\t$correct_answer       = $question_item['correct_answer'] ?? '';\n+\n+\t\t\t\t\t\t$data_answers = [];\n+\t\t\t\t\t\tforeach ( $options as $index => $option ) {\n+\t\t\t\t\t\t\t$data_answers[] = [\n+\t\t\t\t\t\t\t\t'title'   => $option,\n+\t\t\t\t\t\t\t\t'is_true' => ( $option === $correct_answer ) ? 'yes' : 'no',\n+\t\t\t\t\t\t\t\t'order'   => $index + 1,\n+\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$quizPostModel->create_question_and_add(\n+\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t'question_title'   => $question_name,\n+\t\t\t\t\t\t\t\t'question_content' => $question_description,\n+\t\t\t\t\t\t\t\t'question_type'    => 'single_choice',\n+\t\t\t\t\t\t\t\t'question_options' => $data_answers,\n+\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$course_edit_url = $coursePostModel->get_edit_link();\n+\t\t\tif ( $is_course_builder ) {\n+\t\t\t\t$course_edit_url = \\LearnPress\\CourseBuilder\\CourseBuilder::get_tab_link(\n+\t\t\t\t\t'courses',\n+\t\t\t\t\t$coursePostModel->get_id(),\n+\t\t\t\t\t'overview'\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$response->data->edit_course_url = $course_edit_url;\n+\t\t\t$response->data->button_label    = __( 'Redirecting...', 'learnpress' );\n+\t\t\t$response->status                = 'success';\n+\t\t\t$response->message               = __( 'Create Course Successfully! Redirecting to course detail...', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Generate prompt title with AI\n+\t *\u002F\n+\tpublic function openai_generate_prompt() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str       = LP_Request::get_param( 'data' );\n+\t\t\t$params         = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$lp_prompt_type = $params['lp-prompt-type'] ?? '';\n+\n+\t\t\tswitch ( $lp_prompt_type ) {\n+\t\t\t\tcase 'course-description':\n+\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-description-course', 'settings\u002FopenAi', compact( 'params' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'course-title':\n+\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-title-course', 'settings\u002FopenAi', compact( 'params' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'course-image':\n+\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-create-image-course', 'settings\u002FopenAi', compact( 'params' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'course-curriculum':\n+\t\t\t\t\t$prompt = Config::instance()->get( 'prompt-curriculum-course', 'settings\u002FopenAi', compact( 'params' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase $lp_prompt_type:\n+\t\t\t\t\t$prompt = apply_filters( 'lp-prompt-type', '', $lp_prompt_type, $params );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$prompt = '';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$response->data    = $prompt;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Generate prompt successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Generate data course with prompt submitted\n+\t *\u002F\n+\tpublic function openai_generate_data() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str = LP_Request::get_param( 'data' );\n+\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\n+\t\t\t$args     = [\n+\t\t\t\t'prompt' => $prompt,\n+\t\t\t];\n+\n+\t\t\t$result                    = OpenAiService::instance()->send_request( $args );\n+\t\t\t$lp_structure_data         = $result['lp_structure_data'] ?? [];\n+\t\t\t$result['lp_html_preview'] = '';\n+\t\t\tif ( count( $lp_structure_data ) > 0 ) {\n+\t\t\t\t$lp_prompt_type = $params['lp-prompt-type'] ?? '';\n+\t\t\t\tswitch ( $lp_prompt_type ) {\n+\t\t\t\t\tcase 'course-description':\n+\t\t\t\t\tcase 'course-title':\n+\t\t\t\t\t\t$results = $lp_structure_data[0];\n+\t\t\t\t\t\tif ( isset( $results['results'] ) ) {\n+\t\t\t\t\t\t\t$results = $results['results'];\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tthrow new Exception(\n+\t\t\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t\t\t'Error: No data was generated. The requested data may be large, increase the Max Tokens in settings and try again.',\n+\t\t\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tforeach ( $results as $index => $data_item ) {\n+\t\t\t\t\t\t\t$data_item                  = $data_item['item'] ?? '';\n+\t\t\t\t\t\t\t$args                       = [\n+\t\t\t\t\t\t\t\t'index'        => $index,\n+\t\t\t\t\t\t\t\t'value'        => $data_item,\n+\t\t\t\t\t\t\t\t'target-apply' => $params['target-apply'] ?? '',\n+\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t\t$result['lp_html_preview'] .= AdminEditWithAITemplate::instance()->html_list_results( $args );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'course-curriculum':\n+\t\t\t\t\t\t$result['lp_structure_course'] = $lp_structure_data[0];\n+\t\t\t\t\t\t$result['lp_html_preview']     = AdminEditCourseCurriculumWithAITemplate::html_preview_with_data(\n+\t\t\t\t\t\t\t$result['lp_structure_course']\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase $lp_prompt_type:\n+\t\t\t\t\t\t$result['lp_html_preview'] = apply_filters( 'lp-openai-render-data-generated', '', $lp_prompt_type, $lp_structure_data );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$result['lp_html_preview'] .= sprintf(\n+\t\t\t\t'\u003Cinput type=\"hidden\" name=\"lp-openai-generated-data\" value=\"%s\" \u002F>',\n+\t\t\t\tTemplate::convert_data_to_json( $lp_structure_data )\n+\t\t\t);\n+\n+\t\t\t$response->data    = $result;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Generate course successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Generate image with prompt submitted\n+\t * Send data to Open AI to generate image\n+\t *\n+\t * @since 4.3.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function openai_generate_image() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str = LP_Request::get_param( 'data' );\n+\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\n+\t\t\t$prompt   = $params['lp-openai-prompt-generated-field'] ?? '';\n+\t\t\t$args     = [\n+\t\t\t\t'prompt' => $prompt,\n+\t\t\t\t'n'      => intval( $params['outputs'] ?? 1 ),\n+\t\t\t\t'size'   => $params['size'] ?? '',\n+\t\t\t];\n+\n+\t\t\t$result                    = OpenAiService::instance()->send_request_create_image( $args );\n+\t\t\t$html_image                = '';\n+\t\t\t$result['lp_html_preview'] = '';\n+\t\t\t$data                      = $result['data'] ?? [];\n+\t\t\tif ( ! empty( $data ) ) {\n+\t\t\t\t$result['lp_html_preview'] = '\u003Cdiv class=\"lp-ai-images-warp\">';\n+\t\t\t\tforeach ( $data as $index => $data_item ) {\n+\t\t\t\t\t$image_base_64 = $data_item['b64_json'] ?? '';\n+\t\t\t\t\t$image_url     = $data_item['url'] ?? '';\n+\n+\t\t\t\t\tif ( ! empty( $image_url ) ) {\n+\t\t\t\t\t\t$html_image = sprintf(\n+\t\t\t\t\t\t\t'\u003Cimg src=\"%s\" alt=\"AI Generated Image\" \u002F>',\n+\t\t\t\t\t\t\tesc_url( $image_url )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} elseif ( ! empty( $image_base_64 ) ) {\n+\t\t\t\t\t\t$html_image = sprintf(\n+\t\t\t\t\t\t\t'\u003Cimg src=\"data:image\u002Fpng;base64,%s\" alt=\"AI Generated Image\" \u002F>',\n+\t\t\t\t\t\t\tesc_attr( $image_base_64 )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( empty( $html_image ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$result['lp_html_preview'] .= '\u003Cdiv class=\"lp-ai-image-item\">';\n+\t\t\t\t\t$result['lp_html_preview'] .= $html_image;\n+\t\t\t\t\t$result['lp_html_preview'] .= sprintf(\n+\t\t\t\t\t\t'\u003Cbutton class=\"lp-btn-ai-apply-image lp-button\" type=\"button\"\n+\t\t\t\t\t\t\tdata-send=\"%s\">%s\n+\t\t\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t'action'       => 'openai_apply_image_feature',\n+\t\t\t\t\t\t\t\t'image-url'    => ! empty( $image_url ) ? $image_url : '',\n+\t\t\t\t\t\t\t\t'image-base64' => ! empty( $image_base_64 ) ? $image_base_64 : '',\n+\t\t\t\t\t\t\t\t'id_url'       => 'apply-image-feature',\n+\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t__( 'Apply Image', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t\t$result['lp_html_preview'] .= '\u003C\u002Fdiv>';\n+\t\t\t\t}\n+\t\t\t\t$result['lp_html_preview'] .= '\u003C\u002Fdiv>';\n+\t\t\t}\n+\n+\t\t\t$response->data    = $result;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Generate image successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Apply image feature to post\n+\t * Upload image to media and set as feature image for post\n+\t *\n+\t * @since 4.3.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function openai_apply_image_feature() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\tset_time_limit( 0 );\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str     = $_POST['data'] ?? '';\n+\t\t\t$params       = LP_Helper::json_decode( wp_unslash( $data_str ), true );\n+\t\t\t$image_base64 = $params['image-base64'] ?? '';\n+\t\t\t$image_url    = $params['image-url'] ?? '';\n+\n+\t\t\t$params     = LP_Helper::sanitize_params_submitted( $params );\n+\t\t\t$post_id    = $params['post-id'] ?? '';\n+\t\t\t$post_title = $params['post-title'] ?? uniqid();\n+\t\t\t$post_slug  = sanitize_title( $post_title );\n+\n+\t\t\tif ( empty( $post_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid post ID.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! function_exists( 'media_handle_sideload' ) ) {\n+\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fmedia.php';\n+\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Ffile.php';\n+\t\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fimage.php';\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $image_url ) ) {\n+\t\t\t\t$tmp      = download_url( $image_url );\n+\t\t\t\t$fileExt  = pathinfo( parse_url( $image_url, PHP_URL_PATH ), PATHINFO_EXTENSION );\n+\t\t\t\t$filename = sanitize_file_name( $post_slug . '-' . uniqid() . '.' . $fileExt );\n+\n+\t\t\t} elseif ( ! empty( $image_base64 ) ) {\n+\t\t\t\t$decoded_image = base64_decode( $image_base64 );\n+\t\t\t\t$tmp           = wp_tempnam();\n+\t\t\t\tfile_put_contents( $tmp, $decoded_image );\n+\t\t\t\t$filename = sanitize_file_name( $post_slug . '-' . uniqid() . '.png' );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( __( 'No image data provided.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$file_array    = [\n+\t\t\t\t'name'     => $filename,\n+\t\t\t\t'tmp_name' => $tmp,\n+\t\t\t];\n+\t\t\t$attachment_id = media_handle_sideload( $file_array, $post_id );\n+\n+\t\t\tif ( ! is_wp_error( $attachment_id ) ) {\n+\t\t\t\tset_post_thumbnail( $post_id, $attachment_id );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( $attachment_id->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$args = [\n+\t\t\t\t'src'           => wp_get_attachment_url( $attachment_id ),\n+\t\t\t\t'post-id'       => $post_id,\n+\t\t\t\t'attachment-id' => $attachment_id,\n+\t\t\t];\n+\n+\t\t\t$response->data->html_image    = AdminEditWithAITemplate::instance()->html_feature_image_created( $args );\n+\t\t\t$response->data->attachment_id = $attachment_id;\n+\t\t\t$response->status              = 'success';\n+\t\t\t$response->message             = __( 'Apply image successfully!', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\tset_time_limit( LearnPress::$time_limit_default_of_sever );\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax: BuilderDashboardAjax.php\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax: CourseBuilder\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditCurriculumAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditCurriculumAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditCurriculumAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditCurriculumAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,523 +1,526 @@\n-\u003C?php\r\n-\u002F**\r\n- * class EditCurriculumAjax\r\n- *\r\n- * This class handles the AJAX request to edit the curriculum of a course.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\CourseSectionItemModel;\r\n-use LearnPress\\Models\\CourseSectionModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use LP_Section_Items_DB;\r\n-use LP_Section_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class EditCurriculumAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Check permissions and validate parameters.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function check_valid() {\r\n-\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\r\n-\t\tif ( empty( $params ) ) {\r\n-\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t}\r\n-\r\n-\t\treturn LP_Helper::json_decode( $params, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add section\r\n-\t *\r\n-\t * JS file edit-section.js: function addSection call this method to update the section description.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function course_add_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data = self::check_valid();\r\n-\r\n-\t\t\t$course_id   = $data['course_id'] ?? 0;\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_name = trim( $data['section_name'] ?? '' );\r\n-\t\t\tif ( empty( $section_name ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section title is required', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Add section to course.\r\n-\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\t\t$sectionNew      = $coursePostModel->add_section(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'section_name'        => $section_name,\r\n-\t\t\t\t\t'section_description' => $data['section_description'] ?? '',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$response->data->section = $sectionNew;\r\n-\t\t\t$response->status        = 'success';\r\n-\t\t\t$response->message       = __( 'Section added successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update section\r\n-\t *\r\n-\t * JS file edit-section.js: function updateSectionTitle call this method to update the section title.\r\n-\t * JS file edit-section.js: function updateSectionDescription call this method to update the section description.\r\n-\t *\r\n-\t * @since  4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function course_update_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id, true );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Update section of course\r\n-\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\t\t$coursePostModel->update_section( $courseSectionModel, $data );\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete section\r\n-\t *\r\n-\t * JS file edit-section.js: function deleteSection call this method to update the section title.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function course_delete_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel->delete();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update sections position\r\n-\t * new_position => list of section id by order\r\n-\t *\r\n-\t * JS file edit-section.js: function sortAbleSection call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function course_update_section_position() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data         = self::check_valid();\r\n-\t\t\t$course_id    = $data['course_id'] ?? 0;\r\n-\t\t\t$new_position = $data['new_position'] ?? [];\r\n-\t\t\tif ( ! is_array( $new_position ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid section position', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Update all sections position\r\n-\t\t\t$coursePostMoel = new CoursePostModel( $courseModel );\r\n-\t\t\t$coursePostMoel->update_sections_position( [ 'new_position' => $new_position ] );\r\n-\r\n-\t\t\t$courseModel->sections_items = null;\r\n-\t\t\t$courseModel->save();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create item and add to section\r\n-\t *\r\n-\t * $data['course_id']  => ID of course\r\n-\t * $data['section_id'] => ID of section\r\n-\t * $data['item_type']   => Type of item (e.g., 'lesson', 'quiz', etc.)\r\n-\t * $data['item_title']  => Title of the item\r\n-\t *\r\n-\t * JS file edit-section-item.js: function addItemToSection call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function create_item_add_to_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionItemModel = $courseSectionModel->create_item_and_add( $data );\r\n-\r\n-\t\t\t$response->data->section_item = $courseSectionItemModel;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $itemModel PostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$itemModel                 = $courseModel->get_item_model(\r\n-\t\t\t\t$courseSectionItemModel->item_id,\r\n-\t\t\t\t$courseSectionItemModel->item_type\r\n-\t\t\t);\r\n-\t\t\t$response->data->item_link = $itemModel ? $itemModel->get_edit_link() : '';\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Item added to section successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add items selected to section\r\n-\t *\r\n-\t * $data['course_id']  => ID of course\r\n-\t * $data['section_id'] => ID of section\r\n-\t * $data['items']      => [ item_id => 0, item_type => '' ]\r\n-\t *\r\n-\t * JS file edit-section-item.js: function addItemsSelectedToSection call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function add_items_to_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionItems = $courseSectionModel->add_items( $data );\r\n-\t\t\tif ( empty( $courseSectionItems ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'No items were added to the section', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data->html = '';\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $courseSectionItem CourseSectionItemModel\r\n-\t\t\t *\u002F\r\n-\t\t\tforeach ( $courseSectionItems as $courseSectionItem ) {\r\n-\t\t\t\t$courseSectionItemAlias        = (object) get_object_vars( $courseSectionItem );\r\n-\t\t\t\t$itemModel                     = $courseModel->get_item_model(\r\n-\t\t\t\t\t$courseSectionItem->item_id,\r\n-\t\t\t\t\t$courseSectionItem->item_type\r\n-\t\t\t\t);\r\n-\t\t\t\t$courseSectionItemAlias->title = $itemModel ? $itemModel->get_the_title() : '';\r\n-\t\t\t\t$response->data->html         .= AdminEditCurriculumTemplate::instance()->html_section_item(\r\n-\t\t\t\t\t$courseModel,\r\n-\t\t\t\t\t$courseSectionItemAlias\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Items added to section successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete item from section\r\n-\t *\r\n-\t * $data['course_id']  => ID of course\r\n-\t * $data['section_id'] => ID of section\r\n-\t * $data['item_id']    => ID of item to delete\r\n-\t *\r\n-\t * JS file edit-section-item.js: function deleteItem call this method.\r\n-\t *\u002F\r\n-\tpublic static function delete_item_from_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\t\t\t$item_id    = $data['item_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Find item of section id\r\n-\t\t\t$courseSectionItemModel = CourseSectionItemModel::find( $section_id, $item_id );\r\n-\t\t\tif ( ! $courseSectionItemModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete item from section\r\n-\t\t\t$courseSectionItemModel->section_course_id = $course_id;\r\n-\t\t\t$courseSectionItemModel->delete();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Item deleted from section successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update item on new section and position\r\n-\t *\r\n-\t * $data['course_id']              => ID of course\r\n-\t * $data['items_position']         => list of item id by order on section new\r\n-\t * $data['item_id_change']         => ID of item to change section\r\n-\t * $data['section_id_new_of_item'] => ID of new section of item\r\n-\t * $data['section_id_old_of_item'] => ID of old section of item\r\n-\t *\r\n-\t * JS file edit-section-item.js: function sortAbleItem call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function update_item_section_and_position() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data      = self::check_valid();\r\n-\t\t\t$course_id = $data['course_id'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\t\t$coursePostModel->update_items_position( $data );\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Item position updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data of item in section\r\n-\t *\r\n-\t * $data['course_id']      => ID of course\r\n-\t * $data['section_id']     => ID of section\r\n-\t * $data['item_id']        => ID of item to update\r\n-\t * $data['item_type']      => Type of item (e.g., 'lesson', 'quiz', etc.)\r\n-\t * $data['item_title']     => New title of the item\r\n-\t *\r\n-\t * JS file edit-section-item.js: function updateTitle call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function update_item_of_section() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data       = self::check_valid();\r\n-\t\t\t$course_id  = $data['course_id'] ?? 0;\r\n-\t\t\t$section_id = $data['section_id'] ?? 0;\r\n-\t\t\t$item_id    = $data['item_id'] ?? 0;\r\n-\t\t\t$item_type  = $data['item_type'] ?? '';\r\n-\t\t\t$item_title = $data['item_title'] ?? '';\r\n-\r\n-\t\t\tif ( empty( $item_title ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item title is required', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\r\n-\t\t\tif ( ! $courseSectionModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sectionItemModel = CourseSectionItemModel::find( $section_id, $item_id );\r\n-\t\t\tif ( ! $sectionItemModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $itemModel PostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\t\t\tif ( ! $itemModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$itemModel->post_title = $item_title;\r\n-\t\t\t$itemModel->save();\r\n-\r\n-\t\t\t$courseModel->sections_items = null;\r\n-\t\t\t$courseModel->save();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Item updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update item preview.\r\n-\t *\r\n-\t * JS file edit-section-item.js: function updatePreviewItem call this method.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function update_item_preview() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data           = self::check_valid();\r\n-\t\t\t$course_id      = $data['course_id'] ?? 0;\r\n-\t\t\t$item_id        = $data['item_id'] ?? 0;\r\n-\t\t\t$item_type      = $data['item_type'] ?? '';\r\n-\t\t\t$enable_preview = $data['enable_preview'] ?? 0;\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $item_type !== LP_LESSON_CPT ) {\r\n-\t\t\t\tthrow new Exception( __( 'Only lesson can be set preview', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $itemModel LessonPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\t\t\tif ( ! $itemModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$itemModel->set_preview( $enable_preview == 1 );\r\n-\r\n-\t\t\t\u002F\u002F Save course to update preview data of item in the curriculum.\r\n-\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\t\t$coursePostModel->save();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Item updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class EditCurriculumAjax\n+ *\n+ * This class handles the AJAX request to edit the curriculum of a course.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\CourseSectionItemModel;\n+use LearnPress\\Models\\CourseSectionModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\PostModel;\n+use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\n+use LP_Helper;\n+use LP_REST_Response;\n+use Throwable;\n+\n+class EditCurriculumAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Check permissions and validate parameters.\n+\t *\n+\t * @throws Exception\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function check_valid() {\n+\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\n+\t\tif ( empty( $params ) ) {\n+\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t}\n+\n+\t\treturn LP_Helper::json_decode( $params, true );\n+\t}\n+\n+\t\u002F**\n+\t * Add section\n+\t *\n+\t * JS file edit-section.js: function addSection call this method to update the section description.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function course_add_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data = self::check_valid();\n+\n+\t\t\t$course_id   = $data['course_id'] ?? 0;\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$section_name = trim( $data['section_name'] ?? '' );\n+\t\t\tif ( empty( $section_name ) ) {\n+\t\t\t\tthrow new Exception( __( 'Section title is required', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Add section to course.\n+\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\t\t$sectionNew      = $coursePostModel->add_section(\n+\t\t\t\t[\n+\t\t\t\t\t'section_name'        => $section_name,\n+\t\t\t\t\t'section_description' => $data['section_description'] ?? '',\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$response->data->section = $sectionNew;\n+\t\t\t$response->status        = 'success';\n+\t\t\t$response->message       = __( 'Section added successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update section\n+\t *\n+\t * JS file edit-section.js: function updateSectionTitle call this method to update the section title.\n+\t * JS file edit-section.js: function updateSectionDescription call this method to update the section description.\n+\t *\n+\t * @since  4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function course_update_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id, true );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Update section of course\n+\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\t\t$coursePostModel->update_section( $courseSectionModel, $data );\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Delete section\n+\t *\n+\t * JS file edit-section.js: function deleteSection call this method to update the section title.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function course_delete_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel->delete();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update sections position\n+\t * new_position => list of section id by order\n+\t *\n+\t * JS file edit-section.js: function sortAbleSection call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function course_update_section_position() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data         = self::check_valid();\n+\t\t\t$course_id    = $data['course_id'] ?? 0;\n+\t\t\t$new_position = $data['new_position'] ?? [];\n+\t\t\tif ( ! is_array( $new_position ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid section position', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Update all sections position\n+\t\t\t$coursePostMoel = new CoursePostModel( $courseModel );\n+\t\t\t$coursePostMoel->update_sections_position( [ 'new_position' => $new_position ] );\n+\n+\t\t\t$courseModel->sections_items = null;\n+\t\t\t$courseModel->save();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Section updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Create item and add to section\n+\t *\n+\t * $data['course_id']  => ID of course\n+\t * $data['section_id'] => ID of section\n+\t * $data['item_type']   => Type of item (e.g., 'lesson', 'quiz', etc.)\n+\t * $data['item_title']  => Title of the item\n+\t *\n+\t * JS file edit-section-item.js: function addItemToSection call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function create_item_add_to_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionItemModel = $courseSectionModel->create_item_and_add( $data );\n+\n+\t\t\t$response->data->section_item = $courseSectionItemModel;\n+\n+\t\t\t\u002F**\n+\t\t\t * @var $itemModel PostModel\n+\t\t\t *\u002F\n+\t\t\t$itemModel                 = $courseModel->get_item_model(\n+\t\t\t\t$courseSectionItemModel->item_id,\n+\t\t\t\t$courseSectionItemModel->item_type\n+\t\t\t);\n+\t\t\t$response->data->item_link = $itemModel ? $itemModel->get_edit_link() : '';\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Item added to section successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Add items selected to section\n+\t *\n+\t * $data['course_id']  => ID of course\n+\t * $data['section_id'] => ID of section\n+\t * $data['items']      => [ item_id => 0, item_type => '' ]\n+\t *\n+\t * JS file edit-section-item.js: function addItemsSelectedToSection call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function add_items_to_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionItems = $courseSectionModel->add_items( $data );\n+\t\t\tif ( empty( $courseSectionItems ) ) {\n+\t\t\t\tthrow new Exception( __( 'No items were added to the section', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set context_data for Course Builder context\n+\t\t\t$is_course_builder                                    = ! empty( $data['is_course_builder'] );\n+\t\t\tAdminEditCurriculumTemplate::instance()->context_data = [\n+\t\t\t\t'is_course_builder' => $is_course_builder,\n+\t\t\t];\n+\n+\t\t\t$response->data->html = '';\n+\t\t\t\u002F**\n+\t\t\t * @var $courseSectionItem CourseSectionItemModel\n+\t\t\t *\u002F\n+\t\t\tforeach ( $courseSectionItems as $courseSectionItem ) {\n+\t\t\t\t$courseSectionItemAlias        = (object) get_object_vars( $courseSectionItem );\n+\t\t\t\t$itemModel                     = $courseModel->get_item_model(\n+\t\t\t\t\t$courseSectionItem->item_id,\n+\t\t\t\t\t$courseSectionItem->item_type\n+\t\t\t\t);\n+\t\t\t\t$courseSectionItemAlias->title = $itemModel ? $itemModel->get_the_title() : '';\n+\t\t\t\t$response->data->html         .= AdminEditCurriculumTemplate::instance()->html_section_item(\n+\t\t\t\t\t$courseModel,\n+\t\t\t\t\t$courseSectionItemAlias\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Items added to section successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Delete item from section\n+\t *\n+\t * $data['course_id']  => ID of course\n+\t * $data['section_id'] => ID of section\n+\t * $data['item_id']    => ID of item to delete\n+\t *\n+\t * JS file edit-section-item.js: function deleteItem call this method.\n+\t *\u002F\n+\tpublic static function delete_item_from_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\t\t\t$item_id    = $data['item_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Find item of section id\n+\t\t\t$courseSectionItemModel = CourseSectionItemModel::find( $section_id, $item_id );\n+\t\t\tif ( ! $courseSectionItemModel ) {\n+\t\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete item from section\n+\t\t\t$courseSectionItemModel->section_course_id = $course_id;\n+\t\t\t$courseSectionItemModel->delete();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Item deleted from section successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update item on new section and position\n+\t *\n+\t * $data['course_id']              => ID of course\n+\t * $data['items_position']         => list of item id by order on section new\n+\t * $data['item_id_change']         => ID of item to change section\n+\t * $data['section_id_new_of_item'] => ID of new section of item\n+\t * $data['section_id_old_of_item'] => ID of old section of item\n+\t *\n+\t * JS file edit-section-item.js: function sortAbleItem call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function update_item_section_and_position() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data      = self::check_valid();\n+\t\t\t$course_id = $data['course_id'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\t\t$coursePostModel->update_items_position( $data );\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Item position updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update data of item in section\n+\t *\n+\t * $data['course_id']      => ID of course\n+\t * $data['section_id']     => ID of section\n+\t * $data['item_id']        => ID of item to update\n+\t * $data['item_type']      => Type of item (e.g., 'lesson', 'quiz', etc.)\n+\t * $data['item_title']     => New title of the item\n+\t *\n+\t * JS file edit-section-item.js: function updateTitle call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function update_item_of_section() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data       = self::check_valid();\n+\t\t\t$course_id  = $data['course_id'] ?? 0;\n+\t\t\t$section_id = $data['section_id'] ?? 0;\n+\t\t\t$item_id    = $data['item_id'] ?? 0;\n+\t\t\t$item_type  = $data['item_type'] ?? '';\n+\t\t\t$item_title = $data['item_title'] ?? '';\n+\n+\t\t\tif ( empty( $item_title ) ) {\n+\t\t\t\tthrow new Exception( __( 'Item title is required', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseSectionModel = CourseSectionModel::find( $section_id, $course_id );\n+\t\t\tif ( ! $courseSectionModel ) {\n+\t\t\t\tthrow new Exception( __( 'Section not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$sectionItemModel = CourseSectionItemModel::find( $section_id, $item_id );\n+\t\t\tif ( ! $sectionItemModel ) {\n+\t\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var $itemModel PostModel\n+\t\t\t *\u002F\n+\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\t\t\tif ( ! $itemModel ) {\n+\t\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$itemModel->post_title = $item_title;\n+\t\t\t$itemModel->save();\n+\n+\t\t\t$courseModel->sections_items = null;\n+\t\t\t$courseModel->save();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Item updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update item preview.\n+\t *\n+\t * JS file edit-section-item.js: function updatePreviewItem call this method.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function update_item_preview() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data           = self::check_valid();\n+\t\t\t$course_id      = $data['course_id'] ?? 0;\n+\t\t\t$item_id        = $data['item_id'] ?? 0;\n+\t\t\t$item_type      = $data['item_type'] ?? '';\n+\t\t\t$enable_preview = $data['enable_preview'] ?? 0;\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $item_type !== LP_LESSON_CPT ) {\n+\t\t\t\tthrow new Exception( __( 'Only lesson can be set preview', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var $itemModel LessonPostModel\n+\t\t\t *\u002F\n+\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\t\t\tif ( ! $itemModel ) {\n+\t\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$itemModel->set_preview( $enable_preview == 1 );\n+\n+\t\t\t\u002F\u002F Save course to update preview data of item in the curriculum.\n+\t\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\t\t$coursePostModel->save();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Item updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditQuestionAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditQuestionAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditQuestionAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditQuestionAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,311 +1,311 @@\n-\u003C?php\r\n-\u002F**\r\n- * class EditCurriculumAjax\r\n- *\r\n- * This class handles the AJAX request to edit the curriculum of a course.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Ajax\\AbstractAjax;\r\n-\r\n-use LearnPress\\Databases\\QuestionAnswersDB;\r\n-use LearnPress\\Models\\Question\\QuestionAnswerModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostFIBModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostMultipleChoiceModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostSingleChoiceModel;\r\n-use LearnPress\\Models\\Question\\QuestionSortingChoiceModel;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-\r\n-class EditQuestionAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Check permissions and validate parameters.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function check_valid() {\r\n-\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\r\n-\t\tif ( empty( $params ) ) {\r\n-\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t}\r\n-\r\n-\t\t$params            = LP_Helper::json_decode( $params, true );\r\n-\t\t$question_id       = $params['question_id'] ?? 0;\r\n-\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\tif ( ! $questionPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$params['questionPostModel'] = $questionPostModel;\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update question title.\r\n-\t *\r\n-\t * JS file edit-quiz.js: function updateQuestionTitle call this method.\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function update_question() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data                 = self::check_valid();\r\n-\t\t\t$question_id          = $data['question_id'] ?? 0;\r\n-\t\t\t$question_title       = $data['question_title'] ?? false;\r\n-\t\t\t$question_description = $data['question_description'] ?? false;\r\n-\t\t\t$question_hint        = $data['question_hint'] ?? false;\r\n-\t\t\t$question_explanation = $data['question_explanation'] ?? false;\r\n-\t\t\t$question_mark        = $data['question_mark'] ?? false;\r\n-\t\t\t$question_type        = $data['question_type'] ?? false;\r\n-\r\n-\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\t\tif ( ! $questionPostModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_title ) {\r\n-\t\t\t\tif ( empty( $question_title ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Question title is required', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$questionPostModel->post_title = $question_title;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_description ) {\r\n-\t\t\t\t$questionPostModel->post_content = $question_description;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_hint ) {\r\n-\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_HINT, $question_hint );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_explanation ) {\r\n-\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_EXPLANATION, $question_explanation );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_mark ) {\r\n-\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_MARK, $question_mark );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false !== $question_type ) {\r\n-\t\t\t\tif ( ! in_array( $question_type, array_keys( QuestionPostModel::get_types() ), true ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Invalid question type', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_TYPE, $question_type );\r\n-\r\n-\t\t\t\t\u002F\u002F Create default answers for question\r\n-\t\t\t\t$questionClassName = $questionPostModel::get_question_obj_by_type( $question_type );\r\n-\t\t\t\tif ( class_exists( $questionClassName ) ) {\r\n-\t\t\t\t\t$questionPostTyeModel = new $questionClassName( $questionPostModel );\r\n-\t\t\t\t\tif ( method_exists( $questionPostTyeModel, 'create_default_answers' ) ) {\r\n-\t\t\t\t\t\t$questionPostTyeModel->create_default_answers();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow new Exception( __( 'Question type not found', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response->data->html_option_answers = AdminEditQuestionTemplate::instance()->html_answer_option(\r\n-\t\t\t\t\t$questionPostModel\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$questionPostModel->save();\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Question update successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update answer config of question\r\n-\t *\r\n-\t * JS file edit-quiz.js: function addQuestionAnswer call this method.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function add_question_answer() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data         = self::check_valid();\r\n-\t\t\t$answer_title = $data['answer_title'] ?? '';\r\n-\t\t\tif ( empty( $answer_title ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Answer title is required', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuestionPostModel $questionPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$questionPostModel = $data['questionPostModel'];\r\n-\t\t\t$type              = $questionPostModel->get_type();\r\n-\r\n-\t\t\tif ( $type === 'single_choice' ) {\r\n-\t\t\t\t$questionAnswerModel = new QuestionPostSingleChoiceModel( $questionPostModel );\r\n-\t\t\t} elseif ( $type === 'multiple_choice' ) {\r\n-\t\t\t\t$questionAnswerModel = new QuestionPostMultipleChoiceModel( $questionPostModel );\r\n-\t\t\t} else {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\t$db        = QuestionAnswersDB::getInstance();\r\n-\t\t\t$max_order = $db->get_last_number_order( $questionPostModel->get_id() );\r\n-\r\n-\t\t\t$answer = array(\r\n-\t\t\t\t'question_id' => $questionPostModel->get_id(),\r\n-\t\t\t\t'title'       => $answer_title,\r\n-\t\t\t\t'value'       => learn_press_random_value(),\r\n-\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\r\n-\t\t\t\t'order'       => $max_order + 1,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t$questionAnswerModel->save();\r\n-\r\n-\t\t\t$response->status                = 'success';\r\n-\t\t\t$response->data->question_answer = $questionAnswerModel;\r\n-\t\t\t$response->message               = __( 'Question answer added successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update answer config of question\r\n-\t *\r\n-\t * JS file edit-question.js: function fibSaveContent call this method.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function update_question_answers_config() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data             = self::check_valid();\r\n-\t\t\t$question_id      = $data['question_id'] ?? 0;\r\n-\t\t\t$question_answers = $data['answers'] ?? [];\r\n-\t\t\t$question_answers = LP_Helper::sanitize_params_submitted( $question_answers, 'html', false );\r\n-\r\n-\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\t\tif ( ! $questionPostModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $questionPostModel->get_type() === 'fill_in_blanks' ) {\r\n-\t\t\t\t$questionPostFIBModel = new QuestionPostFIBModel( $questionPostModel );\r\n-\t\t\t\t\u002F\u002F Update title\r\n-\t\t\t\t$questionAnswerModel        = new QuestionAnswerModel( $question_answers );\r\n-\t\t\t\t$content                    = $question_answers['title'] ?? '';\r\n-\t\t\t\t$meta_data                  = $question_answers['meta_data'] ?? [];\r\n-\t\t\t\t$questionAnswerModel->title = $questionPostFIBModel->convert_content_from_editor_to_db( $content );\r\n-\t\t\t\t$questionAnswerModel->save();\r\n-\t\t\t\t\u002F\u002F Update meta value for fill in blanks\r\n-\t\t\t\t$pattern = '#\u003Cspan class=\"lp-question-fib-input\" data-id=\"([^\"]+)\">([^\u003C]+)\u003C\\\u002Fspan>#';\r\n-\t\t\t\tpreg_match_all( $pattern, $content, $matches );\r\n-\t\t\t\t$ids = [];\r\n-\r\n-\t\t\t\t$fib_blank_options = [];\r\n-\t\t\t\tif ( ! empty( $matches ) ) {\r\n-\t\t\t\t\t$ids   = $matches[1];\r\n-\t\t\t\t\t$fills = $matches[2];\r\n-\r\n-\t\t\t\t\tforeach ( $ids as $index => $id ) {\r\n-\t\t\t\t\t\t$fib_blank_options[ $id ] = [\r\n-\t\t\t\t\t\t\t'id'         => $id,\r\n-\t\t\t\t\t\t\t'fill'       => html_entity_decode( $fills[ $index ] ?? '' ),\r\n-\t\t\t\t\t\t\t'match_case' => 0,\r\n-\t\t\t\t\t\t\t'comparison' => 'equal',\r\n-\t\t\t\t\t\t];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! empty( $meta_data ) ) {\r\n-\t\t\t\t\tforeach ( $meta_data as $blank_id => $blank_options ) {\r\n-\t\t\t\t\t\tif ( $meta_data[ $blank_id ]['comparison'] === '' ) {\r\n-\t\t\t\t\t\t\t$meta_data[ $blank_id ]['comparison'] = 'equal';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( ! in_array( $blank_id, $ids, true ) ) {\r\n-\t\t\t\t\t\t\tunset( $meta_data[ $blank_id ] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F If not null ids, but meta_data is empty, we will set default options for blanks.\r\n-\t\t\t\tif ( ! empty( $ids ) && empty( $meta_data ) ) {\r\n-\t\t\t\t\t$meta_data = $fib_blank_options;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$questionAnswerModel->save_meta_value_by_key( QuestionAnswerModel::META_KEY_BLANKS, $meta_data );\r\n-\t\t\t} else {\r\n-\t\t\t\tforeach ( $question_answers as $answer ) {\r\n-\t\t\t\t\tif ( empty( $answer ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t\t$questionAnswerModel->save();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Answer of Question update successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete answer of question\r\n-\t *\r\n-\t * JS file edit-quiz.js: function deleteQuestionAnswer call this method.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function delete_question_answer() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data               = self::check_valid();\r\n-\t\t\t$question_answer_id = $data['question_answer_id'] ?? '';\r\n-\t\t\tif ( empty( $question_answer_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid request!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$questionAnswerModel = QuestionAnswerModel::find( $question_answer_id, true );\r\n-\t\t\tif ( ! $questionAnswerModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Question answer not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete question answer\r\n-\t\t\t$questionAnswerModel->delete();\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Question answer deleted successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class EditCurriculumAjax\n+ *\n+ * This class handles the AJAX request to edit the curriculum of a course.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Ajax\\AbstractAjax;\n+\n+use LearnPress\\Databases\\QuestionAnswersDB;\n+use LearnPress\\Models\\Question\\QuestionAnswerModel;\n+use LearnPress\\Models\\Question\\QuestionPostFIBModel;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\Models\\Question\\QuestionPostMultipleChoiceModel;\n+use LearnPress\\Models\\Question\\QuestionPostSingleChoiceModel;\n+use LearnPress\\Models\\Question\\QuestionSortingChoiceModel;\n+use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\n+use LP_Helper;\n+use LP_REST_Response;\n+use Throwable;\n+\n+class EditQuestionAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Check permissions and validate parameters.\n+\t *\n+\t * @throws Exception\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function check_valid() {\n+\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\n+\t\tif ( empty( $params ) ) {\n+\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t}\n+\n+\t\t$params            = LP_Helper::json_decode( $params, true );\n+\t\t$question_id       = $params['question_id'] ?? 0;\n+\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\tif ( ! $questionPostModel ) {\n+\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$params['questionPostModel'] = $questionPostModel;\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Update question title.\n+\t *\n+\t * JS file edit-quiz.js: function updateQuestionTitle call this method.\n+\t *\n+\t *\u002F\n+\tpublic static function update_question() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data                 = self::check_valid();\n+\t\t\t$question_id          = $data['question_id'] ?? 0;\n+\t\t\t$question_title       = $data['question_title'] ?? false;\n+\t\t\t$question_description = $data['question_description'] ?? false;\n+\t\t\t$question_hint        = $data['question_hint'] ?? false;\n+\t\t\t$question_explanation = $data['question_explanation'] ?? false;\n+\t\t\t$question_mark        = $data['question_mark'] ?? false;\n+\t\t\t$question_type        = $data['question_type'] ?? false;\n+\n+\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\t\tif ( ! $questionPostModel ) {\n+\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_title ) {\n+\t\t\t\tif ( empty( $question_title ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Question title is required', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$questionPostModel->post_title = $question_title;\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_description ) {\n+\t\t\t\t$questionPostModel->post_content = $question_description;\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_hint ) {\n+\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_HINT, $question_hint );\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_explanation ) {\n+\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_EXPLANATION, $question_explanation );\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_mark ) {\n+\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_MARK, $question_mark );\n+\t\t\t}\n+\n+\t\t\tif ( false !== $question_type ) {\n+\t\t\t\tif ( ! in_array( $question_type, array_keys( QuestionPostModel::get_types() ), true ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Invalid question type', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$questionPostModel->save_meta_value_by_key( QuestionPostModel::META_KEY_TYPE, $question_type );\n+\n+\t\t\t\t\u002F\u002F Create default answers for question\n+\t\t\t\t$questionClassName = $questionPostModel::get_question_obj_by_type( $question_type );\n+\t\t\t\tif ( class_exists( $questionClassName ) ) {\n+\t\t\t\t\t$questionPostTyeModel = new $questionClassName( $questionPostModel );\n+\t\t\t\t\tif ( method_exists( $questionPostTyeModel, 'create_default_answers' ) ) {\n+\t\t\t\t\t\t$questionPostTyeModel->create_default_answers();\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow new Exception( __( 'Question type not found', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$response->data->html_option_answers = AdminEditQuestionTemplate::instance()->html_answer_option(\n+\t\t\t\t\t$questionPostModel\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$questionPostModel->save();\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Question update successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update answer config of question\n+\t *\n+\t * JS file edit-quiz.js: function addQuestionAnswer call this method.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function add_question_answer() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data         = self::check_valid();\n+\t\t\t$answer_title = $data['answer_title'] ?? '';\n+\t\t\tif ( empty( $answer_title ) ) {\n+\t\t\t\tthrow new Exception( __( 'Answer title is required', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var QuestionPostModel $questionPostModel\n+\t\t\t *\u002F\n+\t\t\t$questionPostModel = $data['questionPostModel'];\n+\t\t\t$type              = $questionPostModel->get_type();\n+\n+\t\t\tif ( $type === 'single_choice' ) {\n+\t\t\t\t$questionAnswerModel = new QuestionPostSingleChoiceModel( $questionPostModel );\n+\t\t\t} elseif ( $type === 'multiple_choice' ) {\n+\t\t\t\t$questionAnswerModel = new QuestionPostMultipleChoiceModel( $questionPostModel );\n+\t\t\t} else {\n+\n+\t\t\t}\n+\n+\t\t\t$db        = QuestionAnswersDB::getInstance();\n+\t\t\t$max_order = $db->get_last_number_order( $questionPostModel->get_id() );\n+\n+\t\t\t$answer = array(\n+\t\t\t\t'question_id' => $questionPostModel->get_id(),\n+\t\t\t\t'title'       => $answer_title,\n+\t\t\t\t'value'       => learn_press_random_value(),\n+\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\n+\t\t\t\t'order'       => $max_order + 1,\n+\t\t\t);\n+\n+\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t$questionAnswerModel->save();\n+\n+\t\t\t$response->status                = 'success';\n+\t\t\t$response->data->question_answer = $questionAnswerModel;\n+\t\t\t$response->message               = __( 'Question answer added successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update answer config of question\n+\t *\n+\t * JS file edit-question.js: function fibSaveContent call this method.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function update_question_answers_config() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data             = self::check_valid();\n+\t\t\t$question_id      = $data['question_id'] ?? 0;\n+\t\t\t$question_answers = $data['answers'] ?? [];\n+\t\t\t$question_answers = LP_Helper::sanitize_params_submitted( $question_answers, 'html', false );\n+\n+\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\t\tif ( ! $questionPostModel ) {\n+\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $questionPostModel->get_type() === 'fill_in_blanks' ) {\n+\t\t\t\t$questionPostFIBModel = new QuestionPostFIBModel( $questionPostModel );\n+\t\t\t\t\u002F\u002F Update title\n+\t\t\t\t$questionAnswerModel        = new QuestionAnswerModel( $question_answers );\n+\t\t\t\t$content                    = $question_answers['title'] ?? '';\n+\t\t\t\t$meta_data                  = $question_answers['meta_data'] ?? [];\n+\t\t\t\t$questionAnswerModel->title = $questionPostFIBModel->convert_content_from_editor_to_db( $content );\n+\t\t\t\t$questionAnswerModel->save();\n+\t\t\t\t\u002F\u002F Update meta value for fill in blanks\n+\t\t\t\t$pattern = '#\u003Cspan class=\"lp-question-fib-input\" data-id=\"([^\"]+)\">([^\u003C]+)\u003C\\\u002Fspan>#';\n+\t\t\t\tpreg_match_all( $pattern, $content, $matches );\n+\t\t\t\t$ids = [];\n+\n+\t\t\t\t$fib_blank_options = [];\n+\t\t\t\tif ( ! empty( $matches ) ) {\n+\t\t\t\t\t$ids   = $matches[1];\n+\t\t\t\t\t$fills = $matches[2];\n+\n+\t\t\t\t\tforeach ( $ids as $index => $id ) {\n+\t\t\t\t\t\t$fib_blank_options[ $id ] = [\n+\t\t\t\t\t\t\t'id'         => $id,\n+\t\t\t\t\t\t\t'fill'       => html_entity_decode( $fills[ $index ] ?? '' ),\n+\t\t\t\t\t\t\t'match_case' => 0,\n+\t\t\t\t\t\t\t'comparison' => 'equal',\n+\t\t\t\t\t\t];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! empty( $meta_data ) ) {\n+\t\t\t\t\tforeach ( $meta_data as $blank_id => $blank_options ) {\n+\t\t\t\t\t\tif ( $meta_data[ $blank_id ]['comparison'] === '' ) {\n+\t\t\t\t\t\t\t$meta_data[ $blank_id ]['comparison'] = 'equal';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( ! in_array( $blank_id, $ids, true ) ) {\n+\t\t\t\t\t\t\tunset( $meta_data[ $blank_id ] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F If not null ids, but meta_data is empty, we will set default options for blanks.\n+\t\t\t\tif ( ! empty( $ids ) && empty( $meta_data ) ) {\n+\t\t\t\t\t$meta_data = $fib_blank_options;\n+\t\t\t\t}\n+\n+\t\t\t\t$questionAnswerModel->save_meta_value_by_key( QuestionAnswerModel::META_KEY_BLANKS, $meta_data );\n+\t\t\t} else {\n+\t\t\t\tforeach ( $question_answers as $answer ) {\n+\t\t\t\t\tif ( empty( $answer ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t\t$questionAnswerModel->save();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Answer of Question update successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Delete answer of question\n+\t *\n+\t * JS file edit-quiz.js: function deleteQuestionAnswer call this method.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function delete_question_answer() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data               = self::check_valid();\n+\t\t\t$question_answer_id = $data['question_answer_id'] ?? '';\n+\t\t\tif ( empty( $question_answer_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid request!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$questionAnswerModel = QuestionAnswerModel::find( $question_answer_id, true );\n+\t\t\tif ( ! $questionAnswerModel ) {\n+\t\t\t\tthrow new Exception( __( 'Question answer not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete question answer\n+\t\t\t$questionAnswerModel->delete();\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Question answer deleted successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditQuizAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditQuizAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FEditQuizAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FEditQuizAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,186 +1,186 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\QuizQuestionsDB;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CourseSectionItemModel;\r\n-use LearnPress\\Models\\Question\\QuestionAnswerModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostFIBModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\Models\\Quiz\\QuizQuestionModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminEditQizTemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * class EditQuizAjax\r\n- *\r\n- * This class handles the AJAX request to edit the quiz.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class EditQuizAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Check permissions and validate parameters.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function check_valid() {\r\n-\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\r\n-\t\tif ( empty( $params ) ) {\r\n-\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t}\r\n-\r\n-\t\t$params        = LP_Helper::json_decode( $params, true );\r\n-\t\t$quiz_id       = $params['quiz_id'] ?? 0;\r\n-\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\r\n-\t\tif ( ! $quizPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$params['quizPostModel'] = $quizPostModel;\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a new question and add it to the quiz.\r\n-\t *\r\n-\t * JS file edit-section.js: function addSection call this method to update the section description.\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function create_question_add_to_quiz() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data = self::check_valid();\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuizPostModel $quizPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$quizPostModel = $data['quizPostModel'];\r\n-\r\n-\t\t\t$quizQuestionModel  = $quizPostModel->create_question_and_add( $data );\r\n-\t\t\t$questionPostModel  = $quizQuestionModel->get_question_post_model();\r\n-\t\t\t$html_edit_question = AdminEditQizTemplate::instance()->html_edit_question( $questionPostModel );\r\n-\r\n-\t\t\t$response->data->question           = $questionPostModel;\r\n-\t\t\t$response->data->html_edit_question = $html_edit_question;\r\n-\t\t\t$response->status                   = 'success';\r\n-\t\t\t$response->message                  = __( 'Question added successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add questions exists (from Question Bank) to quiz.\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function add_questions_to_quiz() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data = self::check_valid();\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuizPostModel $quizPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$quizPostModel   = $data['quizPostModel'];\r\n-\t\t\t$questions_added = $quizPostModel->add_questions_to_quiz( $data );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuizQuestionModel $quizQuestionModel\r\n-\t\t\t *\u002F\r\n-\t\t\tforeach ( $questions_added as $quizQuestionModel ) {\r\n-\t\t\t\t$questionPostModel = $quizQuestionModel->get_question_post_model();\r\n-\t\t\t\t$response->data->html_edit_question[ $quizQuestionModel->question_id ] = AdminEditQizTemplate::instance()->html_edit_question( $questionPostModel );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Question added successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove question from quiz.\r\n-\t *\r\n-\t * JS file edit-quiz.js: function removeQuestion call this method.\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function remove_question_from_quiz() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data        = self::check_valid();\r\n-\t\t\t$question_id = $data['question_id'] ?? 0;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuizPostModel $quizPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$quizPostModel = $data['quizPostModel'];\r\n-\t\t\t$quizPostModel->remove_question_from_quiz( $question_id );\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Question removed successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update item on new section and position\r\n-\t *\r\n-\t * $data['course_id']              => ID of course\r\n-\t * $data['items_position']         => list of item id by order on section new\r\n-\t * $data['item_id_change']         => ID of item to change section\r\n-\t * $data['section_id_new_of_item'] => ID of new section of item\r\n-\t * $data['section_id_old_of_item'] => ID of old section of item\r\n-\t *\r\n-\t * JS file edit-section-item.js: function sortAbleItem call this method.\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function update_questions_position() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data = self::check_valid();\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuizPostModel $quizPostModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$quizPostModel = $data['quizPostModel'];\r\n-\r\n-\t\t\t$quizPostModel->update_question_position( $data );\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Question position updated successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Databases\\QuizQuestionsDB;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CourseSectionItemModel;\n+use LearnPress\\Models\\Question\\QuestionAnswerModel;\n+use LearnPress\\Models\\Question\\QuestionPostFIBModel;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\Models\\Quiz\\QuizQuestionModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\TemplateHooks\\Admin\\AdminEditQizTemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\n+use LP_Helper;\n+use LP_REST_Response;\n+use Throwable;\n+\n+\u002F**\n+ * class EditQuizAjax\n+ *\n+ * This class handles the AJAX request to edit the quiz.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.1\n+ *\u002F\n+class EditQuizAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Check permissions and validate parameters.\n+\t *\n+\t * @throws Exception\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function check_valid() {\n+\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\n+\t\tif ( empty( $params ) ) {\n+\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t}\n+\n+\t\t$params        = LP_Helper::json_decode( $params, true );\n+\t\t$quiz_id       = $params['quiz_id'] ?? 0;\n+\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\n+\t\tif ( ! $quizPostModel ) {\n+\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$params['quizPostModel'] = $quizPostModel;\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Create a new question and add it to the quiz.\n+\t *\n+\t * JS file edit-section.js: function addSection call this method to update the section description.\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function create_question_add_to_quiz() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data = self::check_valid();\n+\t\t\t\u002F**\n+\t\t\t * @var QuizPostModel $quizPostModel\n+\t\t\t *\u002F\n+\t\t\t$quizPostModel = $data['quizPostModel'];\n+\n+\t\t\t$quizQuestionModel  = $quizPostModel->create_question_and_add( $data );\n+\t\t\t$questionPostModel  = $quizQuestionModel->get_question_post_model();\n+\t\t\t$html_edit_question = AdminEditQizTemplate::instance()->html_edit_question( $questionPostModel );\n+\n+\t\t\t$response->data->question           = $questionPostModel;\n+\t\t\t$response->data->html_edit_question = $html_edit_question;\n+\t\t\t$response->status                   = 'success';\n+\t\t\t$response->message                  = __( 'Question added successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Add questions exists (from Question Bank) to quiz.\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function add_questions_to_quiz() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data = self::check_valid();\n+\t\t\t\u002F**\n+\t\t\t * @var QuizPostModel $quizPostModel\n+\t\t\t *\u002F\n+\t\t\t$quizPostModel   = $data['quizPostModel'];\n+\t\t\t$questions_added = $quizPostModel->add_questions_to_quiz( $data );\n+\n+\t\t\t\u002F**\n+\t\t\t * @var QuizQuestionModel $quizQuestionModel\n+\t\t\t *\u002F\n+\t\t\tforeach ( $questions_added as $quizQuestionModel ) {\n+\t\t\t\t$questionPostModel = $quizQuestionModel->get_question_post_model();\n+\t\t\t\t$response->data->html_edit_question[ $quizQuestionModel->question_id ] = AdminEditQizTemplate::instance()->html_edit_question( $questionPostModel );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Question added successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Remove question from quiz.\n+\t *\n+\t * JS file edit-quiz.js: function removeQuestion call this method.\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function remove_question_from_quiz() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data        = self::check_valid();\n+\t\t\t$question_id = $data['question_id'] ?? 0;\n+\n+\t\t\t\u002F**\n+\t\t\t * @var QuizPostModel $quizPostModel\n+\t\t\t *\u002F\n+\t\t\t$quizPostModel = $data['quizPostModel'];\n+\t\t\t$quizPostModel->remove_question_from_quiz( $question_id );\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Question removed successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update item on new section and position\n+\t *\n+\t * $data['course_id']              => ID of course\n+\t * $data['items_position']         => list of item id by order on section new\n+\t * $data['item_id_change']         => ID of item to change section\n+\t * $data['section_id_new_of_item'] => ID of new section of item\n+\t * $data['section_id_old_of_item'] => ID of old section of item\n+\t *\n+\t * JS file edit-section-item.js: function sortAbleItem call this method.\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function update_questions_position() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data = self::check_valid();\n+\t\t\t\u002F**\n+\t\t\t * @var QuizPostModel $quizPostModel\n+\t\t\t *\u002F\n+\t\t\t$quizPostModel = $data['quizPostModel'];\n+\n+\t\t\t$quizPostModel->update_question_position( $data );\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Question position updated successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FExportOrderCSVAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FExportOrderCSVAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FExportOrderCSVAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FExportOrderCSVAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,230 +1,230 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\OrderPostFilter;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Datetime;\r\n-use LP_Helper;\r\n-use LP_Order;\r\n-use LP_Request;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ExportOrderCSVAjax\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\\Ajax\r\n- * @since  4.3.2.8\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class ExportOrderCSVAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Export orders to CSV file, action call from js file: export-order.js\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function export_order_csv() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_str = LP_Request::get_param( 'data' );\r\n-\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\r\n-\r\n-\t\t\t$export_id = sanitize_key( $params['export_id'] ?? '' );\r\n-\t\t\tif ( ! $export_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'Missing export id', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$paged = max( 1, intval( $params['paged'] ?? 1 ) );\r\n-\r\n-\t\t\t$post_db           = PostDB::getInstance();\r\n-\t\t\t$filter            = new OrderPostFilter();\r\n-\t\t\t$filter->post_type = LP_ORDER_CPT;\r\n-\t\t\tLP_Order::handle_params_query_list_orders( $filter, $params );\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$lp_orders  = $post_db->get_posts( $filter, $total_rows );\r\n-\r\n-\t\t\tif ( count( $lp_orders ) > 0 ) {\r\n-\t\t\t\t$file   = self::get_export_csv_path( $export_id );\r\n-\t\t\t\t$handle = fopen( $file, $paged === 1 ? 'w' : 'a' );\r\n-\r\n-\t\t\t\tif ( $paged === 1 ) {\r\n-\t\t\t\t\tfprintf( $handle, \"\\xEF\\xBB\\xBF\" );\r\n-\t\t\t\t\tfputcsv(\r\n-\t\t\t\t\t\t$handle,\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t__( 'Order', 'learnpress' ),\r\n-\t\t\t\t\t\t\t__( 'Student', 'learnpress' ),\r\n-\t\t\t\t\t\t\t__( 'Purchased', 'learnpress' ),\r\n-\t\t\t\t\t\t\t__( 'Date', 'learnpress' ),\r\n-\t\t\t\t\t\t\t__( 'Total', 'learnpress' ),\r\n-\t\t\t\t\t\t\t__( 'Status', 'learnpress' ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t',',\r\n-\t\t\t\t\t\t'\"',\r\n-\t\t\t\t\t\t'\\\\',\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $lp_orders as $order ) {\r\n-\t\t\t\t\t$order_id = $order->ID;\r\n-\t\t\t\t\t$order    = learn_press_get_order( $order_id );\r\n-\t\t\t\t\tif ( ! $order ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tfputcsv(\r\n-\t\t\t\t\t\t$handle,\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t$order->get_order_number(),\r\n-\t\t\t\t\t\t\t$this->get_order_users( $order ),\r\n-\t\t\t\t\t\t\t$this->get_order_items( $order ),\r\n-\t\t\t\t\t\t\t$order->get_order_date( 'edit' )->format( LP_Datetime::I18N_FORMAT_HAS_TIME ),\r\n-\t\t\t\t\t\t\t$order->get_formatted_order_total(),\r\n-\t\t\t\t\t\t\tLP_Order::get_status_label( $order->get_status() ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t',',\r\n-\t\t\t\t\t\t'\"',\r\n-\t\t\t\t\t\t'\\\\',\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tfclose( $handle );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( intval( $paged ) === 1 ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'There are no orders.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data             = [];\r\n-\t\t\t$max_page         = $post_db::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t\t$data['max_page'] = $max_page;\r\n-\r\n-\t\t\tif ( $paged \u003C $max_page ) {\r\n-\t\t\t\t$data['next_page'] = $paged + 1;\r\n-\t\t\t} else {\r\n-\t\t\t\t$data['download_url'] = add_query_arg(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'lp_download_order' => 1,\r\n-\t\t\t\t\t\t'export_id'         => $export_id,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\thome_url( '\u002F' )\r\n-\t\t\t\t);\r\n-\t\t\t\t$data['done']         = true;\r\n-\t\t\t\t$response->message    = esc_html__( 'Orders export successfully!', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data   = $data;\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get export CSV file path\r\n-\t *\r\n-\t * @param string $export_id\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_export_csv_path( string $export_id = '' ): string {\r\n-\t\t$upload = wp_upload_dir();\r\n-\t\t$dir    = $upload['basedir'] . '\u002Flp-order-export';\r\n-\r\n-\t\tif ( ! file_exists( $dir ) ) {\r\n-\t\t\twp_mkdir_p( $dir );\r\n-\t\t}\r\n-\r\n-\t\treturn $dir . \"\u002Flp-orders-{$export_id}.csv\";\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return string|null\r\n-\t *\u002F\r\n-\tpublic function get_order_users( $order ) {\r\n-\t\t$user_ids       = $order->get_users();\r\n-\t\t$checkout_email = $order->get_checkout_email();\r\n-\r\n-\t\tif ( $order->is_manual() && empty( $user_ids ) ) {\r\n-\t\t\treturn __( '(No customer)', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\t$outputs = array();\r\n-\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\t\tif ( $userModel ) {\r\n-\t\t\t\t\t$outputs[] = sprintf(\r\n-\t\t\t\t\t\t'%s (#%d)',\r\n-\t\t\t\t\t\t$userModel->get_display_name(),\r\n-\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( $user_id > 0 ) {\r\n-\t\t\t\t\t$outputs[] = sprintf(\r\n-\t\t\t\t\t\t__( 'User #%d (Deleted)', 'learnpress' ),\r\n-\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( ! empty( $checkout_email ) ) {\r\n-\t\t\t\t\t$outputs[] = sprintf(\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t$order->get_checkout_email(),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$outputs[] = __( '(Guest)', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn join( ', ', $outputs );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function get_order_items( $order ): string {\r\n-\t\t$order_item_str = '';\r\n-\t\t$items          = $order->get_all_items();\r\n-\t\t$total_items    = count( $items );\r\n-\r\n-\t\tif ( $total_items === 0 ) {\r\n-\t\t\treturn __( '(No item)', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\tforeach ( $items as $i => $itemObj ) {\r\n-\t\t\t\t$item_type      = $itemObj['item_type'] ?? '';\r\n-\t\t\t\t$item_id        = $itemObj['item_id'] ?? 0;\r\n-\t\t\t\t$item_name      = $itemObj['order_item_name'] ?? '';\r\n-\t\t\t\t$course_id_meta = learn_press_get_order_item_meta( $itemObj['order_item_id'], '_course_id' );\r\n-\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\r\n-\t\t\t\tif ( ( empty( $item_type ) || empty( $item_id ) )\r\n-\t\t\t\t\t&& ! empty( $course_id_meta ) ) {\r\n-\t\t\t\t\t$item_id   = $course_id_meta;\r\n-\t\t\t\t\t$item_type = LP_COURSE_CPT;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$order_item_str .= sprintf(\r\n-\t\t\t\t\t'%s (#%d)',\r\n-\t\t\t\t\tesc_html( $item_name ),\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( $i \u003C $total_items && $total_items > 1 ) {\r\n-\t\t\t\t\t$order_item_str .= '|';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $order_item_str;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\OrderPostFilter;\n+use LearnPress\\Models\\UserModel;\n+use LP_Datetime;\n+use LP_Helper;\n+use LP_Order;\n+use LP_Request;\n+use LP_REST_Response;\n+use Throwable;\n+\n+\u002F**\n+ * Class ExportOrderCSVAjax\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\\Ajax\n+ * @since  4.3.2.8\n+ * @version 1.0.0\n+ *\u002F\n+class ExportOrderCSVAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Export orders to CSV file, action call from js file: export-order.js\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function export_order_csv() {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to perform this action.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data_str = LP_Request::get_param( 'data' );\n+\t\t\t$params   = LP_Helper::json_decode( $data_str, true );\n+\n+\t\t\t$export_id = sanitize_key( $params['export_id'] ?? '' );\n+\t\t\tif ( ! $export_id ) {\n+\t\t\t\tthrow new Exception( __( 'Missing export id', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$paged = max( 1, intval( $params['paged'] ?? 1 ) );\n+\n+\t\t\t$post_db           = PostDB::getInstance();\n+\t\t\t$filter            = new OrderPostFilter();\n+\t\t\t$filter->post_type = LP_ORDER_CPT;\n+\t\t\tLP_Order::handle_params_query_list_orders( $filter, $params );\n+\t\t\t$total_rows = 0;\n+\t\t\t$lp_orders  = $post_db->get_posts( $filter, $total_rows );\n+\n+\t\t\tif ( count( $lp_orders ) > 0 ) {\n+\t\t\t\t$file   = self::get_export_csv_path( $export_id );\n+\t\t\t\t$handle = fopen( $file, $paged === 1 ? 'w' : 'a' );\n+\n+\t\t\t\tif ( $paged === 1 ) {\n+\t\t\t\t\tfprintf( $handle, \"\\xEF\\xBB\\xBF\" );\n+\t\t\t\t\tfputcsv(\n+\t\t\t\t\t\t$handle,\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t__( 'Order', 'learnpress' ),\n+\t\t\t\t\t\t\t__( 'Student', 'learnpress' ),\n+\t\t\t\t\t\t\t__( 'Purchased', 'learnpress' ),\n+\t\t\t\t\t\t\t__( 'Date', 'learnpress' ),\n+\t\t\t\t\t\t\t__( 'Total', 'learnpress' ),\n+\t\t\t\t\t\t\t__( 'Status', 'learnpress' ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t',',\n+\t\t\t\t\t\t'\"',\n+\t\t\t\t\t\t'\\\\',\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $lp_orders as $order ) {\n+\t\t\t\t\t$order_id = $order->ID;\n+\t\t\t\t\t$order    = learn_press_get_order( $order_id );\n+\t\t\t\t\tif ( ! $order ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\tfputcsv(\n+\t\t\t\t\t\t$handle,\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t$order->get_order_number(),\n+\t\t\t\t\t\t\t$this->get_order_users( $order ),\n+\t\t\t\t\t\t\t$this->get_order_items( $order ),\n+\t\t\t\t\t\t\t$order->get_order_date( 'edit' )->format( LP_Datetime::I18N_FORMAT_HAS_TIME ),\n+\t\t\t\t\t\t\t$order->get_formatted_order_total(),\n+\t\t\t\t\t\t\tLP_Order::get_status_label( $order->get_status() ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t',',\n+\t\t\t\t\t\t'\"',\n+\t\t\t\t\t\t'\\\\',\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tfclose( $handle );\n+\t\t\t} else {\n+\t\t\t\tif ( intval( $paged ) === 1 ) {\n+\t\t\t\t\tthrow new Exception( __( 'There are no orders.', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$data             = [];\n+\t\t\t$max_page         = $post_db::get_total_pages( $filter->limit, $total_rows );\n+\t\t\t$data['max_page'] = $max_page;\n+\n+\t\t\tif ( $paged \u003C $max_page ) {\n+\t\t\t\t$data['next_page'] = $paged + 1;\n+\t\t\t} else {\n+\t\t\t\t$data['download_url'] = add_query_arg(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'lp_download_order' => 1,\n+\t\t\t\t\t\t'export_id'         => $export_id,\n+\t\t\t\t\t],\n+\t\t\t\t\thome_url( '\u002F' )\n+\t\t\t\t);\n+\t\t\t\t$data['done']         = true;\n+\t\t\t\t$response->message    = esc_html__( 'Orders export successfully!', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$response->data   = $data;\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Get export CSV file path\n+\t *\n+\t * @param string $export_id\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_export_csv_path( string $export_id = '' ): string {\n+\t\t$upload = wp_upload_dir();\n+\t\t$dir    = $upload['basedir'] . '\u002Flp-order-export';\n+\n+\t\tif ( ! file_exists( $dir ) ) {\n+\t\t\twp_mkdir_p( $dir );\n+\t\t}\n+\n+\t\treturn $dir . \"\u002Flp-orders-{$export_id}.csv\";\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\n+\t * @return string|null\n+\t *\u002F\n+\tpublic function get_order_users( $order ) {\n+\t\t$user_ids       = $order->get_users();\n+\t\t$checkout_email = $order->get_checkout_email();\n+\n+\t\tif ( $order->is_manual() && empty( $user_ids ) ) {\n+\t\t\treturn __( '(No customer)', 'learnpress' );\n+\t\t} else {\n+\t\t\t$outputs = array();\n+\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\t\tif ( $userModel ) {\n+\t\t\t\t\t$outputs[] = sprintf(\n+\t\t\t\t\t\t'%s (#%d)',\n+\t\t\t\t\t\t$userModel->get_display_name(),\n+\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( $user_id > 0 ) {\n+\t\t\t\t\t$outputs[] = sprintf(\n+\t\t\t\t\t\t__( 'User #%d (Deleted)', 'learnpress' ),\n+\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( ! empty( $checkout_email ) ) {\n+\t\t\t\t\t$outputs[] = sprintf(\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t$order->get_checkout_email(),\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\t$outputs[] = __( '(Guest)', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn join( ', ', $outputs );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function get_order_items( $order ): string {\n+\t\t$order_item_str = '';\n+\t\t$items          = $order->get_all_items();\n+\t\t$total_items    = count( $items );\n+\n+\t\tif ( $total_items === 0 ) {\n+\t\t\treturn __( '(No item)', 'learnpress' );\n+\t\t} else {\n+\t\t\tforeach ( $items as $i => $itemObj ) {\n+\t\t\t\t$item_type      = $itemObj['item_type'] ?? '';\n+\t\t\t\t$item_id        = $itemObj['item_id'] ?? 0;\n+\t\t\t\t$item_name      = $itemObj['order_item_name'] ?? '';\n+\t\t\t\t$course_id_meta = learn_press_get_order_item_meta( $itemObj['order_item_id'], '_course_id' );\n+\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\n+\t\t\t\tif ( ( empty( $item_type ) || empty( $item_id ) )\n+\t\t\t\t\t&& ! empty( $course_id_meta ) ) {\n+\t\t\t\t\t$item_id   = $course_id_meta;\n+\t\t\t\t\t$item_type = LP_COURSE_CPT;\n+\t\t\t\t}\n+\n+\t\t\t\t$order_item_str .= sprintf(\n+\t\t\t\t\t'%s (#%d)',\n+\t\t\t\t\tesc_html( $item_name ),\n+\t\t\t\t\t$item_id\n+\t\t\t\t);\n+\n+\t\t\t\tif ( $i \u003C $total_items && $total_items > 1 ) {\n+\t\t\t\t\t$order_item_str .= '|';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $order_item_str;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FLessonAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FLessonAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FLessonAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FLessonAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,92 +1,92 @@\n-\u003C?php\r\n-\u002F**\r\n- * class AjaxBase\r\n- *\r\n- * @since 4.2.7.6\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserItems\\UserLessonModel;\r\n-use LP_Helper;\r\n-use LP_Request;\r\n-use LP_REST_Response;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Error;\r\n-\r\n-class LessonAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * User complete lesson ajax handler.\r\n-\t *\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function user_complete_lesson() {\r\n-\t\t$link_continue = '';\r\n-\t\t$message_data  = [\r\n-\t\t\t'status'  => 'error',\r\n-\t\t\t'content' => '',\r\n-\t\t];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lesson_id = LP_Request::get_param( 'lesson_id', 0, 'int', 'post' );\r\n-\t\t\t$course_id = LP_Request::get_param( 'course_id', 0, 'int', 'post' );\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lessonModel = LessonPostModel::find( $lesson_id, true );\r\n-\t\t\tif ( ! $lessonModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Lesson is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userLessonModel = UserLessonModel::find_user_item(\r\n-\t\t\t\tget_current_user_id(),\r\n-\t\t\t\t$lesson_id,\r\n-\t\t\t\t$lessonModel->post_type,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\t\t\tif ( ! $userLessonModel instanceof UserLessonModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'You have not started lesson', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userLessonModel->set_complete();\r\n-\t\t\t$userCourseModel = $userLessonModel->get_user_course_model();\r\n-\t\t\t$item_model_next = $userCourseModel->get_item_next_when_complete_lesson( $lesson_id );\r\n-\t\t\tif ( $item_model_next ) {\r\n-\t\t\t\t$link_continue = $courseModel->get_item_link( $item_model_next->ID, $item_model_next->post_type );\r\n-\t\t\t} else {\r\n-\t\t\t\t$link_continue = $courseModel->get_permalink();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$message_data['status']  = 'success';\r\n-\t\t\t$message_data['content'] = sprintf(\r\n-\t\t\t\t__( 'Congrats! You have completed \"%s\".', 'learnpress' ),\r\n-\t\t\t\t$lessonModel->get_the_title()\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$message_data['content'] = $e->getMessage();\r\n-\t\t\tif ( isset( $courseModel ) && isset( $lessonModel ) ) {\r\n-\t\t\t\t$link_continue = $courseModel->get_item_link( $lessonModel->ID, $lessonModel->post_type );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_set_message( $message_data );\r\n-\r\n-\t\twp_safe_redirect( $link_continue );\r\n-\t\tdie();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class AjaxBase\n+ *\n+ * @since 4.2.7.6\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserItems\\UserLessonModel;\n+use LP_Helper;\n+use LP_Request;\n+use LP_REST_Response;\n+use stdClass;\n+use Throwable;\n+use WP_Error;\n+\n+class LessonAjax extends AbstractAjax {\n+\t\u002F**\n+\t * User complete lesson ajax handler.\n+\t *\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t * @return void\n+\t *\u002F\n+\tpublic function user_complete_lesson() {\n+\t\t$link_continue = '';\n+\t\t$message_data  = [\n+\t\t\t'status'  => 'error',\n+\t\t\t'content' => '',\n+\t\t];\n+\n+\t\ttry {\n+\t\t\t$lesson_id = LP_Request::get_param( 'lesson_id', 0, 'int', 'post' );\n+\t\t\t$course_id = LP_Request::get_param( 'course_id', 0, 'int', 'post' );\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$lessonModel = LessonPostModel::find( $lesson_id, true );\n+\t\t\tif ( ! $lessonModel ) {\n+\t\t\t\tthrow new Exception( __( 'Lesson is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userLessonModel = UserLessonModel::find_user_item(\n+\t\t\t\tget_current_user_id(),\n+\t\t\t\t$lesson_id,\n+\t\t\t\t$lessonModel->post_type,\n+\t\t\t\t$course_id,\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\ttrue\n+\t\t\t);\n+\t\t\tif ( ! $userLessonModel instanceof UserLessonModel ) {\n+\t\t\t\tthrow new Exception( __( 'You have not started lesson', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userLessonModel->set_complete();\n+\t\t\t$userCourseModel = $userLessonModel->get_user_course_model();\n+\t\t\t$item_model_next = $userCourseModel->get_item_next_when_complete_lesson( $lesson_id );\n+\t\t\tif ( $item_model_next ) {\n+\t\t\t\t$link_continue = $courseModel->get_item_link( $item_model_next->ID, $item_model_next->post_type );\n+\t\t\t} else {\n+\t\t\t\t$link_continue = $courseModel->get_permalink();\n+\t\t\t}\n+\n+\t\t\t$message_data['status']  = 'success';\n+\t\t\t$message_data['content'] = sprintf(\n+\t\t\t\t__( 'Congrats! You have completed \"%s\".', 'learnpress' ),\n+\t\t\t\t$lessonModel->get_the_title()\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$message_data['content'] = $e->getMessage();\n+\t\t\tif ( isset( $courseModel ) && isset( $lessonModel ) ) {\n+\t\t\t\t$link_continue = $courseModel->get_item_link( $lessonModel->ID, $lessonModel->post_type );\n+\t\t\t}\n+\t\t}\n+\n+\t\tlearn_press_set_message( $message_data );\n+\n+\t\twp_safe_redirect( $link_continue );\n+\t\tdie();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FLoadContentViaAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FLoadContentViaAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FLoadContentViaAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FLoadContentViaAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,84 +1,84 @@\n-\u003C?php\r\n-\u002F**\r\n- * class AjaxBase\r\n- *\r\n- * @since 4.2.7.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class LoadContentViaAjax extends AbstractAjax {\r\n-\tpublic function load_content_via_ajax() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\r\n-\t\t\tif ( empty( $params ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$params = LP_Helper::json_decode( $params, true );\r\n-\r\n-\t\t\tif ( empty( $params['callback'] ) ||\r\n-\t\t\t\t! isset( $params['args'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F @var array $args\r\n-\t\t\t$args     = $params['args'];\r\n-\t\t\t$callBack = $params['callback'];\r\n-\r\n-\t\t\tif ( empty( $callBack['class'] ) ||\r\n-\t\t\t\tempty( $callBack['method'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: callback invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class  = $callBack['class'];\r\n-\t\t\t$method = $callBack['method'];\r\n-\r\n-\t\t\t\u002F\u002F Security: check callback is registered.\r\n-\t\t\t$allow_callbacks = apply_filters(\r\n-\t\t\t\t'lp\u002Frest\u002Fajax\u002Fallow_callback',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'LP_Admin_Dashboard:order_statistic',\r\n-\t\t\t\t\t'LP_Admin_Dashboard:plugin_status_content',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\t\t\t$callBackStr     = $class . ':' . $method;\r\n-\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check class and method is callable.\r\n-\t\t\tif ( is_callable( [ $class, $method ] ) ) {\r\n-\t\t\t\t$data = call_user_func( [ $class, $method ], $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $data instanceof stdClass && ! isset( $data->content ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: data content invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->message = $data->message ?? '';\r\n-\t\t\tunset( $data->message );\r\n-\r\n-\t\t\t$response->status = $data->status ?? 'success';\r\n-\t\t\tunset( $data->status );\r\n-\r\n-\t\t\t$response->data = $data;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class AjaxBase\n+ *\n+ * @since 4.2.7.6\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LP_Helper;\n+use LP_REST_Response;\n+use stdClass;\n+use Throwable;\n+\n+class LoadContentViaAjax extends AbstractAjax {\n+\tpublic function load_content_via_ajax() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\n+\t\t\tif ( empty( $params ) ) {\n+\t\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t\t}\n+\n+\t\t\t$params = LP_Helper::json_decode( $params, true );\n+\n+\t\t\tif ( empty( $params['callback'] ) ||\n+\t\t\t\t! isset( $params['args'] ) ) {\n+\t\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F @var array $args\n+\t\t\t$args     = $params['args'];\n+\t\t\t$callBack = $params['callback'];\n+\n+\t\t\tif ( empty( $callBack['class'] ) ||\n+\t\t\t\tempty( $callBack['method'] ) ) {\n+\t\t\t\tthrow new Exception( 'Error: callback invalid!' );\n+\t\t\t}\n+\n+\t\t\t$class  = $callBack['class'];\n+\t\t\t$method = $callBack['method'];\n+\n+\t\t\t\u002F\u002F Security: check callback is registered.\n+\t\t\t$allow_callbacks = apply_filters(\n+\t\t\t\t'lp\u002Frest\u002Fajax\u002Fallow_callback',\n+\t\t\t\t[\n+\t\t\t\t\t'LP_Admin_Dashboard:order_statistic',\n+\t\t\t\t\t'LP_Admin_Dashboard:plugin_status_content',\n+\t\t\t\t]\n+\t\t\t);\n+\t\t\t$callBackStr     = $class . ':' . $method;\n+\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\n+\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check class and method is callable.\n+\t\t\tif ( is_callable( [ $class, $method ] ) ) {\n+\t\t\t\t$data = call_user_func( [ $class, $method ], $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\n+\t\t\t}\n+\n+\t\t\tif ( ! $data instanceof stdClass && ! isset( $data->content ) ) {\n+\t\t\t\tthrow new Exception( 'Error: data content invalid!' );\n+\t\t\t}\n+\n+\t\t\t$response->message = $data->message ?? '';\n+\t\t\tunset( $data->message );\n+\n+\t\t\t$response->status = $data->status ?? 'success';\n+\t\t\tunset( $data->status );\n+\n+\t\t\t$response->data = $data;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FMCP\u002FMcpApiKeysAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FMCP\u002FMcpApiKeysAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FMCP\u002FMcpApiKeysAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FMCP\u002FMcpApiKeysAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,168 +1,168 @@\n-\u003C?php\r\n-namespace LearnPress\\Ajax\\MCP;\r\n-\r\n-use LearnPress\\Ajax\\AbstractAjax;\r\n-use LearnPress\\MCP\\Auth\\ApiKeysRepository;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-use Exception;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Handle MCP API key CRUD requests through lp-load-ajax transport.\r\n- *\u002F\r\n-class McpApiKeysAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected static $required_capability = 'manage_options';\r\n-\r\n-\t\u002F**\r\n-\t * Validate current AJAX request for MCP API key actions.\r\n-\t *\r\n-\t * This helper enforces the required capability and decodes the JSON payload\r\n-\t * sent through LearnPress `lp-load-ajax` transport (`$_REQUEST['data']`).\r\n-\t * It throws an exception for all invalid states so action handlers can return\r\n-\t * a normalized error response.\r\n-\t *\r\n-\t * @return array\u003Cstring, mixed>\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function check_valid(): array {\r\n-\t\tif ( ! current_user_can( self::$required_capability ) ) {\r\n-\t\t\tthrow new Exception( __( 'You are not allowed to manage MCP API keys.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\r\n-\t\tif ( empty( $params ) ) {\r\n-\t\t\tthrow new Exception( __( 'Error: params invalid!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$params = LP_Helper::json_decode( $params, true );\r\n-\t\tif ( ! is_array( $params ) ) {\r\n-\t\t\tthrow new Exception( __( 'Error: params invalid!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a new LearnPress MCP API key for a selected user.\r\n-\t *\r\n-\t * Expected payload fields:\r\n-\t * - `user_id` (int): key owner user ID.\r\n-\t * - `description` (string): optional key description.\r\n-\t * - `permissions` (string): one of read\u002Fwrite\u002Fread_write.\r\n-\t *\r\n-\t * Success response includes plaintext credentials once in `data.key`.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function mcp_create_api_key() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$payload = self::check_valid();\r\n-\r\n-\t\t\t$user_id     = absint( $payload['user_id'] ?? 0 );\r\n-\t\t\t$description = LP_Helper::sanitize_params_submitted( $payload['description'] ?? '' );\r\n-\t\t\t$permissions = LP_Helper::sanitize_params_submitted( $payload['permissions'] ?? 'read', 'key' );\r\n-\r\n-\t\t\t$created = ( new ApiKeysRepository() )->create_key( $user_id, $description, $permissions );\r\n-\t\t\tif ( ! $created ) {\r\n-\t\t\t\tthrow new Exception( __( 'Could not create API key.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'API key created.', 'learnpress' );\r\n-\t\t\t$response->data    = array(\r\n-\t\t\t\t'key' => $created,\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update mutable metadata for an existing MCP API key.\r\n-\t *\r\n-\t * Expected payload fields:\r\n-\t * - `key_id` (int): target key ID.\r\n-\t * - `user_id` (int): updated owner user ID.\r\n-\t * - `description` (string): updated description.\r\n-\t * - `permissions` (string): updated scope value.\r\n-\t *\r\n-\t * This action does not return secret material.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function mcp_update_api_key() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$payload = self::check_valid();\r\n-\r\n-\t\t\t$key_id      = absint( $payload['key_id'] ?? 0 );\r\n-\t\t\t$user_id     = absint( $payload['user_id'] ?? 0 );\r\n-\t\t\t$description = LP_Helper::sanitize_params_submitted( $payload['description'] ?? '' );\r\n-\t\t\t$permissions = LP_Helper::sanitize_params_submitted( $payload['permissions'] ?? 'read', 'key' );\r\n-\r\n-\t\t\t$updated = ( new ApiKeysRepository() )->update_key_meta( $key_id, $user_id, $description, $permissions );\r\n-\t\t\tif ( ! $updated ) {\r\n-\t\t\t\tthrow new Exception( __( 'Could not update API key.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'API key updated.', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Regenerate consumer key and secret for an existing MCP API key.\r\n-\t *\r\n-\t * Expected payload fields:\r\n-\t * - `key_id` (int): target key ID.\r\n-\t *\r\n-\t * Success response includes newly generated plaintext credentials once in\r\n-\t * `data.key`. Existing credentials become invalid after regeneration.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function mcp_regenerate_api_key() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$payload = self::check_valid();\r\n-\t\t\t$key_id  = absint( $payload['key_id'] ?? 0 );\r\n-\t\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid key ID.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$regenerated = ( new ApiKeysRepository() )->regenerate_key( $key_id );\r\n-\t\t\tif ( ! $regenerated ) {\r\n-\t\t\t\tthrow new Exception( __( 'Could not regenerate API key.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'API key regenerated.', 'learnpress' );\r\n-\t\t\t$response->data    = array(\r\n-\t\t\t\t'key' => $regenerated,\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Ajax\\MCP;\n+\n+use LearnPress\\Ajax\\AbstractAjax;\n+use LearnPress\\MCP\\Auth\\ApiKeysRepository;\n+use LP_Helper;\n+use LP_REST_Response;\n+use Throwable;\n+use Exception;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Handle MCP API key CRUD requests through lp-load-ajax transport.\n+ *\u002F\n+class McpApiKeysAjax extends AbstractAjax {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected static $required_capability = 'manage_options';\n+\n+\t\u002F**\n+\t * Validate current AJAX request for MCP API key actions.\n+\t *\n+\t * This helper enforces the required capability and decodes the JSON payload\n+\t * sent through LearnPress `lp-load-ajax` transport (`$_REQUEST['data']`).\n+\t * It throws an exception for all invalid states so action handlers can return\n+\t * a normalized error response.\n+\t *\n+\t * @return array\u003Cstring, mixed>\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function check_valid(): array {\n+\t\tif ( ! current_user_can( self::$required_capability ) ) {\n+\t\t\tthrow new Exception( __( 'You are not allowed to manage MCP API keys.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$params = wp_unslash( $_REQUEST['data'] ?? '' );\n+\t\tif ( empty( $params ) ) {\n+\t\t\tthrow new Exception( __( 'Error: params invalid!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$params = LP_Helper::json_decode( $params, true );\n+\t\tif ( ! is_array( $params ) ) {\n+\t\t\tthrow new Exception( __( 'Error: params invalid!', 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Create a new LearnPress MCP API key for a selected user.\n+\t *\n+\t * Expected payload fields:\n+\t * - `user_id` (int): key owner user ID.\n+\t * - `description` (string): optional key description.\n+\t * - `permissions` (string): one of read\u002Fwrite\u002Fread_write.\n+\t *\n+\t * Success response includes plaintext credentials once in `data.key`.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function mcp_create_api_key() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$payload = self::check_valid();\n+\n+\t\t\t$user_id     = absint( $payload['user_id'] ?? 0 );\n+\t\t\t$description = LP_Helper::sanitize_params_submitted( $payload['description'] ?? '' );\n+\t\t\t$permissions = LP_Helper::sanitize_params_submitted( $payload['permissions'] ?? 'read', 'key' );\n+\n+\t\t\t$created = ( new ApiKeysRepository() )->create_key( $user_id, $description, $permissions );\n+\t\t\tif ( ! $created ) {\n+\t\t\t\tthrow new Exception( __( 'Could not create API key.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'API key created.', 'learnpress' );\n+\t\t\t$response->data    = array(\n+\t\t\t\t'key' => $created,\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Update mutable metadata for an existing MCP API key.\n+\t *\n+\t * Expected payload fields:\n+\t * - `key_id` (int): target key ID.\n+\t * - `user_id` (int): updated owner user ID.\n+\t * - `description` (string): updated description.\n+\t * - `permissions` (string): updated scope value.\n+\t *\n+\t * This action does not return secret material.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function mcp_update_api_key() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$payload = self::check_valid();\n+\n+\t\t\t$key_id      = absint( $payload['key_id'] ?? 0 );\n+\t\t\t$user_id     = absint( $payload['user_id'] ?? 0 );\n+\t\t\t$description = LP_Helper::sanitize_params_submitted( $payload['description'] ?? '' );\n+\t\t\t$permissions = LP_Helper::sanitize_params_submitted( $payload['permissions'] ?? 'read', 'key' );\n+\n+\t\t\t$updated = ( new ApiKeysRepository() )->update_key_meta( $key_id, $user_id, $description, $permissions );\n+\t\t\tif ( ! $updated ) {\n+\t\t\t\tthrow new Exception( __( 'Could not update API key.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'API key updated.', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Regenerate consumer key and secret for an existing MCP API key.\n+\t *\n+\t * Expected payload fields:\n+\t * - `key_id` (int): target key ID.\n+\t *\n+\t * Success response includes newly generated plaintext credentials once in\n+\t * `data.key`. Existing credentials become invalid after regeneration.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function mcp_regenerate_api_key() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$payload = self::check_valid();\n+\t\t\t$key_id  = absint( $payload['key_id'] ?? 0 );\n+\t\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid key ID.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$regenerated = ( new ApiKeysRepository() )->regenerate_key( $key_id );\n+\t\t\tif ( ! $regenerated ) {\n+\t\t\t\tthrow new Exception( __( 'Could not regenerate API key.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'API key regenerated.', 'learnpress' );\n+\t\t\t$response->data    = array(\n+\t\t\t\t'key' => $regenerated,\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FSendEmailAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FSendEmailAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FAjax\u002FSendEmailAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FAjax\u002FSendEmailAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,377 +1,377 @@\n-\u003C?php\r\n-\u002F**\r\n- * class SendEmailAjax\r\n- *\r\n- * @since 4.2.9.1\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Ajax;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Debug;\r\n-use LP_Email;\r\n-use LP_Email_Become_An_Instructor;\r\n-use LP_Email_Cancelled_Order_Admin;\r\n-use LP_Email_Cancelled_Order_Guest;\r\n-use LP_Email_Cancelled_Order_Instructor;\r\n-use LP_Email_Cancelled_Order_User;\r\n-use LP_Email_Completed_Order_Admin;\r\n-use LP_Email_Completed_Order_Guest;\r\n-use LP_Email_Completed_Order_User;\r\n-use LP_Email_Enrolled_Course_Admin;\r\n-use LP_Email_Enrolled_Course_Instructor;\r\n-use LP_Email_Enrolled_Course_User;\r\n-use LP_Email_Finished_Course_Admin;\r\n-use LP_Email_Finished_Course_Instructor;\r\n-use LP_Email_Finished_Course_User;\r\n-use LP_Email_Instructor_Accepted;\r\n-use LP_Email_Instructor_Denied;\r\n-use LP_Email_New_Order_Admin;\r\n-use LP_Email_New_Order_Guest;\r\n-use LP_Email_New_Order_Instructor;\r\n-use LP_Email_New_Order_User;\r\n-use LP_Email_Processing_Order_Guest;\r\n-use LP_Email_Processing_Order_User;\r\n-use LP_Helper;\r\n-use LP_REST_Response;\r\n-use Throwable;\r\n-\r\n-class SendEmailAjax extends AbstractAjax {\r\n-\t\u002F**\r\n-\t * Send mail when order status update to complete\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_order_status_pending_to_processing() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email_classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder-status-pending-to-processing\u002Fsend-mail',\r\n-\t\t\t\t[\r\n-\t\t\t\t\tLP_Email_New_Order_Admin::class,\r\n-\t\t\t\t\tLP_Email_New_Order_User::class,\r\n-\t\t\t\t\tLP_Email_New_Order_Instructor::class,\r\n-\t\t\t\t\tLP_Email_New_Order_Guest::class,\r\n-\t\t\t\t\tLP_Email_Processing_Order_User::class,\r\n-\t\t\t\t\tLP_Email_Processing_Order_Guest::class,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when order status update to complete\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_order_status_pending_to_completed() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email_classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder-status-pending-to-completed\u002Fsend-mail',\r\n-\t\t\t\t[\r\n-\t\t\t\t\tLP_Email_New_Order_Admin::class,\r\n-\t\t\t\t\tLP_Email_New_Order_User::class,\r\n-\t\t\t\t\tLP_Email_New_Order_Instructor::class,\r\n-\t\t\t\t\tLP_Email_New_Order_Guest::class,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when order status update to complete\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_order_status_update_to_completed() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email_classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder-status-update-to-completed\u002Fsend-mail',\r\n-\t\t\t\t[\r\n-\t\t\t\t\tLP_Email_Completed_Order_Admin::class,\r\n-\t\t\t\t\tLP_Email_Completed_Order_User::class,\r\n-\t\t\t\t\tLP_Email_Completed_Order_Guest::class,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when order status update to cancel\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_order_status_update_to_cancelled() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email_classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder-status-update-to-cancelled\u002Fsend-mail',\r\n-\t\t\t\t[\r\n-\t\t\t\t\tLP_Email_Cancelled_Order_User::class,\r\n-\t\t\t\t\tLP_Email_Cancelled_Order_Admin::class,\r\n-\t\t\t\t\tLP_Email_Cancelled_Order_Guest::class,\r\n-\t\t\t\t\tLP_Email_Cancelled_Order_Instructor::class,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mails for case multiple users finish courses\r\n-\t * Order has many users, courses change status to completed\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.9.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_users_enrolled_courses() {\r\n-\t\t$user_course_ids = LP_Helper::sanitize_params_submitted( $_POST['user_course_ids'] ?? [] );\r\n-\r\n-\t\t$email_classes = apply_filters(\r\n-\t\t\t'learn-press\u002Fusers-enrolled-courses\u002Fsend-mail',\r\n-\t\t\t[\r\n-\t\t\t\tLP_Email_Enrolled_Course_User::class,\r\n-\t\t\t\tLP_Email_Enrolled_Course_Admin::class,\r\n-\t\t\t\tLP_Email_Enrolled_Course_Instructor::class,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $user_course_ids as $user_course_id ) {\r\n-\t\t\t$user_id         = $user_course_id['user_id'] ?? 0;\r\n-\t\t\t$course_id       = $user_course_id['course_id'] ?? 0;\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\tif ( ! $userCourseModel ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_send = [\r\n-\t\t\t\t$userCourseModel->ref_id,\r\n-\t\t\t\t$userCourseModel->item_id,\r\n-\t\t\t\t$userCourseModel->user_id,\r\n-\t\t\t];\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail for case a user enrolled a course.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.9.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_user_enrolled_course() {\r\n-\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t$email_classes = apply_filters(\r\n-\t\t\t'learn-press\u002Fuser-enrolled-course\u002Fsend-mail',\r\n-\t\t\t[\r\n-\t\t\t\tLP_Email_Enrolled_Course_User::class,\r\n-\t\t\t\tLP_Email_Enrolled_Course_Admin::class,\r\n-\t\t\t\tLP_Email_Enrolled_Course_Instructor::class,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when user finish course\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_user_course_finished() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email_classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser-finished-course\u002Fsend-mail',\r\n-\t\t\t\t[\r\n-\t\t\t\t\tLP_Email_Finished_Course_Admin::class,\r\n-\t\t\t\t\tLP_Email_Finished_Course_User::class,\r\n-\t\t\t\t\tLP_Email_Finished_Course_Instructor::class,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $email_classes as $email_class ) {\r\n-\t\t\t\tif ( class_exists( $email_class ) ) {\r\n-\t\t\t\t\t$email = new $email_class();\r\n-\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\r\n-\t\t\t\t\t$email->handle( $data_send );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when user request to become a teacher\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function send_mail_become_a_teacher_request() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email = new LP_Email_Become_An_Instructor();\r\n-\t\t\t$email->handle( $data_send );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when admin accept user become a teacher\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function send_mail_become_a_teacher_accept() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email = new LP_Email_Instructor_Accepted();\r\n-\t\t\t$email->handle( $data_send );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send mail when admin deny user become a teacher\r\n-\t *\r\n-\t * @since 4.2.9.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function send_mail_become_a_teacher_deny() {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\r\n-\r\n-\t\t\t$email = new LP_Email_Instructor_Denied();\r\n-\t\t\t$email->handle( $data_send );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * class SendEmailAjax\n+ *\n+ * @since 4.2.9.1\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\Ajax;\n+\n+use Exception;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LP_Debug;\n+use LP_Email;\n+use LP_Email_Become_An_Instructor;\n+use LP_Email_Cancelled_Order_Admin;\n+use LP_Email_Cancelled_Order_Guest;\n+use LP_Email_Cancelled_Order_Instructor;\n+use LP_Email_Cancelled_Order_User;\n+use LP_Email_Completed_Order_Admin;\n+use LP_Email_Completed_Order_Guest;\n+use LP_Email_Completed_Order_User;\n+use LP_Email_Enrolled_Course_Admin;\n+use LP_Email_Enrolled_Course_Instructor;\n+use LP_Email_Enrolled_Course_User;\n+use LP_Email_Finished_Course_Admin;\n+use LP_Email_Finished_Course_Instructor;\n+use LP_Email_Finished_Course_User;\n+use LP_Email_Instructor_Accepted;\n+use LP_Email_Instructor_Denied;\n+use LP_Email_New_Order_Admin;\n+use LP_Email_New_Order_Guest;\n+use LP_Email_New_Order_Instructor;\n+use LP_Email_New_Order_User;\n+use LP_Email_Processing_Order_Guest;\n+use LP_Email_Processing_Order_User;\n+use LP_Helper;\n+use LP_REST_Response;\n+use Throwable;\n+\n+class SendEmailAjax extends AbstractAjax {\n+\t\u002F**\n+\t * Send mail when order status update to complete\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_order_status_pending_to_processing() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email_classes = apply_filters(\n+\t\t\t\t'learn-press\u002Forder-status-pending-to-processing\u002Fsend-mail',\n+\t\t\t\t[\n+\t\t\t\t\tLP_Email_New_Order_Admin::class,\n+\t\t\t\t\tLP_Email_New_Order_User::class,\n+\t\t\t\t\tLP_Email_New_Order_Instructor::class,\n+\t\t\t\t\tLP_Email_New_Order_Guest::class,\n+\t\t\t\t\tLP_Email_Processing_Order_User::class,\n+\t\t\t\t\tLP_Email_Processing_Order_Guest::class,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when order status update to complete\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_order_status_pending_to_completed() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email_classes = apply_filters(\n+\t\t\t\t'learn-press\u002Forder-status-pending-to-completed\u002Fsend-mail',\n+\t\t\t\t[\n+\t\t\t\t\tLP_Email_New_Order_Admin::class,\n+\t\t\t\t\tLP_Email_New_Order_User::class,\n+\t\t\t\t\tLP_Email_New_Order_Instructor::class,\n+\t\t\t\t\tLP_Email_New_Order_Guest::class,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when order status update to complete\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_order_status_update_to_completed() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email_classes = apply_filters(\n+\t\t\t\t'learn-press\u002Forder-status-update-to-completed\u002Fsend-mail',\n+\t\t\t\t[\n+\t\t\t\t\tLP_Email_Completed_Order_Admin::class,\n+\t\t\t\t\tLP_Email_Completed_Order_User::class,\n+\t\t\t\t\tLP_Email_Completed_Order_Guest::class,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when order status update to cancel\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_order_status_update_to_cancelled() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email_classes = apply_filters(\n+\t\t\t\t'learn-press\u002Forder-status-update-to-cancelled\u002Fsend-mail',\n+\t\t\t\t[\n+\t\t\t\t\tLP_Email_Cancelled_Order_User::class,\n+\t\t\t\t\tLP_Email_Cancelled_Order_Admin::class,\n+\t\t\t\t\tLP_Email_Cancelled_Order_Guest::class,\n+\t\t\t\t\tLP_Email_Cancelled_Order_Instructor::class,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mails for case multiple users finish courses\n+\t * Order has many users, courses change status to completed\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.9.1\n+\t *\u002F\n+\tpublic function send_mail_users_enrolled_courses() {\n+\t\t$user_course_ids = LP_Helper::sanitize_params_submitted( $_POST['user_course_ids'] ?? [] );\n+\n+\t\t$email_classes = apply_filters(\n+\t\t\t'learn-press\u002Fusers-enrolled-courses\u002Fsend-mail',\n+\t\t\t[\n+\t\t\t\tLP_Email_Enrolled_Course_User::class,\n+\t\t\t\tLP_Email_Enrolled_Course_Admin::class,\n+\t\t\t\tLP_Email_Enrolled_Course_Instructor::class,\n+\t\t\t]\n+\t\t);\n+\n+\t\tforeach ( $user_course_ids as $user_course_id ) {\n+\t\t\t$user_id         = $user_course_id['user_id'] ?? 0;\n+\t\t\t$course_id       = $user_course_id['course_id'] ?? 0;\n+\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\tif ( ! $userCourseModel ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$data_send = [\n+\t\t\t\t$userCourseModel->ref_id,\n+\t\t\t\t$userCourseModel->item_id,\n+\t\t\t\t$userCourseModel->user_id,\n+\t\t\t];\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Send mail for case a user enrolled a course.\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.9.1\n+\t *\u002F\n+\tpublic function send_mail_user_enrolled_course() {\n+\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t$email_classes = apply_filters(\n+\t\t\t'learn-press\u002Fuser-enrolled-course\u002Fsend-mail',\n+\t\t\t[\n+\t\t\t\tLP_Email_Enrolled_Course_User::class,\n+\t\t\t\tLP_Email_Enrolled_Course_Admin::class,\n+\t\t\t\tLP_Email_Enrolled_Course_Instructor::class,\n+\t\t\t]\n+\t\t);\n+\n+\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t$email = new $email_class();\n+\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t$email->handle( $data_send );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when user finish course\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_user_course_finished() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email_classes = apply_filters(\n+\t\t\t\t'learn-press\u002Fuser-finished-course\u002Fsend-mail',\n+\t\t\t\t[\n+\t\t\t\t\tLP_Email_Finished_Course_Admin::class,\n+\t\t\t\t\tLP_Email_Finished_Course_User::class,\n+\t\t\t\t\tLP_Email_Finished_Course_Instructor::class,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $email_classes as $email_class ) {\n+\t\t\t\tif ( class_exists( $email_class ) ) {\n+\t\t\t\t\t$email = new $email_class();\n+\t\t\t\t\t\u002F** @var LP_Email $email *\u002F\n+\t\t\t\t\t$email->handle( $data_send );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when user request to become a teacher\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function send_mail_become_a_teacher_request() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email = new LP_Email_Become_An_Instructor();\n+\t\t\t$email->handle( $data_send );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when admin accept user become a teacher\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function send_mail_become_a_teacher_accept() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email = new LP_Email_Instructor_Accepted();\n+\t\t\t$email->handle( $data_send );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Send mail when admin deny user become a teacher\n+\t *\n+\t * @since 4.2.9.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function send_mail_become_a_teacher_deny() {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$data_send = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? [] );\n+\n+\t\t\t$email = new LP_Email_Instructor_Denied();\n+\t\t\t$email->handle( $data_send );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPAsyncRequest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPAsyncRequest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPAsyncRequest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPAsyncRequest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,237 +1,237 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Background;\r\n-\r\n-use WP_Error;\r\n-\r\n-\u002F**\r\n- * Abstract LP_Async_Request class.\r\n- *\r\n- * This class is used to create asynchronous requests in LearnPress.\r\n- * It is recommended to use this class for tasks that can be processed in the background\r\n- * It is non-blocking, therefore it does not return data when done.\r\n- * Note: don't call too many times on a progress, it can cause server hang.\r\n- * Should be considered when using\r\n- *\r\n- * @since 4.2.8.7 instead of LP_Async_Request since 4.1.6.9.4, only change class name to autoload\r\n- * @version 1.0.0\r\n- *\u002F\r\n-abstract class LPAsyncRequest {\r\n-\t\u002F**\r\n-\t * Prefix\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $prefix = 'lp';\r\n-\r\n-\t\u002F**\r\n-\t * Action\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $action = 'async_request';\r\n-\r\n-\t\u002F**\r\n-\t * Identifier\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $identifier;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to logged-in users\r\n-\t *\u002F\r\n-\tconst LOGGED_IN = 1;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to logged-out users\r\n-\t *\u002F\r\n-\tconst LOGGED_OUT = 2;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to all users regardless of auth status\r\n-\t *\u002F\r\n-\tconst BOTH = 3;\r\n-\r\n-\t\u002F**\r\n-\t * Data\r\n-\t *\r\n-\t * (default value: array())\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $data = array();\r\n-\r\n-\t\u002F**\r\n-\t * Initiate new async request\r\n-\t *\u002F\r\n-\tpublic function __construct( $auth_level = self::BOTH ) {\r\n-\t\t$this->identifier = $this->prefix . '_' . $this->action;\r\n-\r\n-\t\t\u002F\u002Fadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\t\t\u002F\u002Fadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\r\n-\t\tif ( $auth_level & self::LOGGED_IN ) {\r\n-\t\t\tadd_action( \"admin_post_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\r\n-\t\t}\r\n-\t\tif ( $auth_level & self::LOGGED_OUT ) {\r\n-\t\t\tadd_action( \"admin_post_nopriv_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set data used during the request\r\n-\t *\r\n-\t * @param array $data Data.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function data( array $data ): LPAsyncRequest {\r\n-\t\t$this->data = $data;\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Dispatch the async request\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\t$url  = esc_url_raw( $this->get_query_url() );\r\n-\t\t$args = $this->get_post_args();\r\n-\r\n-\t\treturn wp_remote_post( $url, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query URL\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_query_url(): string {\r\n-\t\tif ( property_exists( $this, 'query_url' ) ) {\r\n-\t\t\treturn $this->query_url;\r\n-\t\t}\r\n-\r\n-\t\t$url = admin_url( 'admin-post.php' );\r\n-\t\treturn apply_filters( $this->identifier . '\u002Fquery_url', $url );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_post_args(): array {\r\n-\t\t$identifier           = $this->identifier;\r\n-\t\t$this->data['action'] = \"lp_async_{$identifier}\";\r\n-\t\t$this->data['_nonce'] = $this->create_async_nonce();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Must set timeout to 0.01 to avoid blocking the request.\r\n-\t\t * Don't change it, because it can make sever hang.\r\n-\t\t *\u002F\r\n-\t\t$args = array(\r\n-\t\t\t'timeout'   => 0.01,\r\n-\t\t\t'blocking'  => false,\r\n-\t\t\t'body'      => $this->data,\r\n-\t\t\t'cookies'   => $_COOKIE,\r\n-\t\t\t'sslverify' => is_ssl(),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters the post arguments used during an async request.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( $this->identifier . '_post_args', $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create nonce for async request\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tprotected function create_async_nonce() {\r\n-\t\t$action = $this->get_nonce_action();\r\n-\t\t$i      = wp_nonce_tick();\r\n-\r\n-\t\treturn substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Verify that the correct nonce was used within the time limit.\r\n-\t *\r\n-\t * @param string $nonce\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function verify_async_nonce( string $nonce ): bool {\r\n-\t\t$action = $this->get_nonce_action();\r\n-\t\t$i      = wp_nonce_tick();\r\n-\r\n-\t\t\u002F\u002F Nonce generated 0-12 hours ago\r\n-\t\tif ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Nonce generated 12-24 hours ago\r\n-\t\tif ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\r\n-\t\t\treturn 2;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Invalid nonce\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get a nonce action based on the $action property of the class\r\n-\t *\r\n-\t * @return string The nonce action for the current instance\r\n-\t *\u002F\r\n-\tprotected function get_nonce_action(): string {\r\n-\t\t$action = $this->identifier;\r\n-\t\tif ( substr( $action, 0, 7 ) === 'nopriv_' ) {\r\n-\t\t\t$action = substr( $action, 7 );\r\n-\t\t}\r\n-\r\n-\t\treturn \"lp_async_$action\";\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Maybe handle\r\n-\t *\r\n-\t * Check for correct nonce and pass to handler.\r\n-\t *\u002F\r\n-\tpublic function maybe_handle() {\r\n-\t\t\u002F\u002F Don't lock up other requests while processing\r\n-\t\tsession_write_close();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * set params $_POST['lp_no_check_referer'] = 1\r\n-\t\t * for case: send request when user not login, but get request when user logged\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4\r\n-\t\t *\u002F\r\n-\t\t\u002F*if ( ! isset( $_POST['lp_no_check_referer'] ) ) {\r\n-\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\t$this->identifier = \"nopriv_$this->identifier\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->handle();\r\n-\t\t}\r\n-\r\n-\t\twp_die();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle\r\n-\t *\r\n-\t * Override this method to perform any actions required\r\n-\t * during the async request.\r\n-\t *\u002F\r\n-\tabstract protected function handle();\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Background;\n+\n+use WP_Error;\n+\n+\u002F**\n+ * Abstract LP_Async_Request class.\n+ *\n+ * This class is used to create asynchronous requests in LearnPress.\n+ * It is recommended to use this class for tasks that can be processed in the background\n+ * It is non-blocking, therefore it does not return data when done.\n+ * Note: don't call too many times on a progress, it can cause server hang.\n+ * Should be considered when using\n+ *\n+ * @since 4.2.8.7 instead of LP_Async_Request since 4.1.6.9.4, only change class name to autoload\n+ * @version 1.0.0\n+ *\u002F\n+abstract class LPAsyncRequest {\n+\t\u002F**\n+\t * Prefix\n+\t * @var string\n+\t *\u002F\n+\tprotected $prefix = 'lp';\n+\n+\t\u002F**\n+\t * Action\n+\t * @var string\n+\t *\u002F\n+\tprotected $action = 'async_request';\n+\n+\t\u002F**\n+\t * Identifier\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $identifier;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to logged-in users\n+\t *\u002F\n+\tconst LOGGED_IN = 1;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to logged-out users\n+\t *\u002F\n+\tconst LOGGED_OUT = 2;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to all users regardless of auth status\n+\t *\u002F\n+\tconst BOTH = 3;\n+\n+\t\u002F**\n+\t * Data\n+\t *\n+\t * (default value: array())\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $data = array();\n+\n+\t\u002F**\n+\t * Initiate new async request\n+\t *\u002F\n+\tpublic function __construct( $auth_level = self::BOTH ) {\n+\t\t$this->identifier = $this->prefix . '_' . $this->action;\n+\n+\t\t\u002F\u002Fadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\t\t\u002F\u002Fadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\n+\t\tif ( $auth_level & self::LOGGED_IN ) {\n+\t\t\tadd_action( \"admin_post_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\n+\t\t}\n+\t\tif ( $auth_level & self::LOGGED_OUT ) {\n+\t\t\tadd_action( \"admin_post_nopriv_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set data used during the request\n+\t *\n+\t * @param array $data Data.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function data( array $data ): LPAsyncRequest {\n+\t\t$this->data = $data;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Dispatch the async request\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\t$url  = esc_url_raw( $this->get_query_url() );\n+\t\t$args = $this->get_post_args();\n+\n+\t\treturn wp_remote_post( $url, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Get query URL\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_query_url(): string {\n+\t\tif ( property_exists( $this, 'query_url' ) ) {\n+\t\t\treturn $this->query_url;\n+\t\t}\n+\n+\t\t$url = admin_url( 'admin-post.php' );\n+\t\treturn apply_filters( $this->identifier . '\u002Fquery_url', $url );\n+\t}\n+\n+\t\u002F**\n+\t * Get post args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_post_args(): array {\n+\t\t$identifier           = $this->identifier;\n+\t\t$this->data['action'] = \"lp_async_{$identifier}\";\n+\t\t$this->data['_nonce'] = $this->create_async_nonce();\n+\n+\t\t\u002F**\n+\t\t * Must set timeout to 0.01 to avoid blocking the request.\n+\t\t * Don't change it, because it can make sever hang.\n+\t\t *\u002F\n+\t\t$args = array(\n+\t\t\t'timeout'   => 0.01,\n+\t\t\t'blocking'  => false,\n+\t\t\t'body'      => $this->data,\n+\t\t\t'cookies'   => $_COOKIE,\n+\t\t\t'sslverify' => is_ssl(),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Filters the post arguments used during an async request.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\u002F\n+\t\treturn apply_filters( $this->identifier . '_post_args', $args );\n+\t}\n+\n+\t\u002F**\n+\t * Create nonce for async request\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tprotected function create_async_nonce() {\n+\t\t$action = $this->get_nonce_action();\n+\t\t$i      = wp_nonce_tick();\n+\n+\t\treturn substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );\n+\t}\n+\n+\t\u002F**\n+\t * Verify that the correct nonce was used within the time limit.\n+\t *\n+\t * @param string $nonce\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function verify_async_nonce( string $nonce ): bool {\n+\t\t$action = $this->get_nonce_action();\n+\t\t$i      = wp_nonce_tick();\n+\n+\t\t\u002F\u002F Nonce generated 0-12 hours ago\n+\t\tif ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t\u002F\u002F Nonce generated 12-24 hours ago\n+\t\tif ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\n+\t\t\treturn 2;\n+\t\t}\n+\n+\t\t\u002F\u002F Invalid nonce\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get a nonce action based on the $action property of the class\n+\t *\n+\t * @return string The nonce action for the current instance\n+\t *\u002F\n+\tprotected function get_nonce_action(): string {\n+\t\t$action = $this->identifier;\n+\t\tif ( substr( $action, 0, 7 ) === 'nopriv_' ) {\n+\t\t\t$action = substr( $action, 7 );\n+\t\t}\n+\n+\t\treturn \"lp_async_$action\";\n+\t}\n+\n+\t\u002F**\n+\t * Maybe handle\n+\t *\n+\t * Check for correct nonce and pass to handler.\n+\t *\u002F\n+\tpublic function maybe_handle() {\n+\t\t\u002F\u002F Don't lock up other requests while processing\n+\t\tsession_write_close();\n+\n+\t\t\u002F**\n+\t\t * set params $_POST['lp_no_check_referer'] = 1\n+\t\t * for case: send request when user not login, but get request when user logged\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4\n+\t\t *\u002F\n+\t\t\u002F*if ( ! isset( $_POST['lp_no_check_referer'] ) ) {\n+\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n+\t\t}*\u002F\n+\n+\t\tif ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\t$this->identifier = \"nopriv_$this->identifier\";\n+\t\t\t}\n+\n+\t\t\t$this->handle();\n+\t\t}\n+\n+\t\twp_die();\n+\t}\n+\n+\t\u002F**\n+\t * Handle\n+\t *\n+\t * Override this method to perform any actions required\n+\t * during the async request.\n+\t *\u002F\n+\tabstract protected function handle();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPBackgroundAjax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPBackgroundAjax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPBackgroundAjax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPBackgroundAjax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-namespace LearnPress\\Background;\r\n-\r\n-use LP_Settings;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Class LPBackgroundAjax\r\n- * To handle a function that can be run in background\r\n- * Via call class:method extends AbstractAjax\r\n- * $data_send: must have key 'lp-load-ajax' to call method handle\r\n- *\r\n- * @since 4.2.9.1\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LPBackgroundAjax {\r\n-\t\u002F**\r\n-\t * Method async handle\r\n-\t *\u002F\r\n-\tpublic static function handle( array $data_send = [], array $args = [] ) {\r\n-\t\t$url       = LP_Settings::url_handle_lp_ajax();\r\n-\t\t$data_send = array_merge(\r\n-\t\t\t[ 'nonce' => wp_create_nonce( 'wp_rest' ) ],\r\n-\t\t\t$data_send\r\n-\t\t);\r\n-\t\t$args      = array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'timeout'   => 0.01,\r\n-\t\t\t\t'blocking'  => false,\r\n-\t\t\t\t'body'      => $data_send,\r\n-\t\t\t\t'cookies'   => $_COOKIE,\r\n-\t\t\t\t'sslverify' => is_ssl(),\r\n-\t\t\t\t'headers'   => [\r\n-\t\t\t\t\t'Referer' => $url,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t$args\r\n-\t\t);\r\n-\t\twp_remote_post( $url, $args );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Background;\n+\n+use LP_Settings;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Class LPBackgroundAjax\n+ * To handle a function that can be run in background\n+ * Via call class:method extends AbstractAjax\n+ * $data_send: must have key 'lp-load-ajax' to call method handle\n+ *\n+ * @since 4.2.9.1\n+ * @version 1.0.1\n+ *\u002F\n+class LPBackgroundAjax {\n+\t\u002F**\n+\t * Method async handle\n+\t *\u002F\n+\tpublic static function handle( array $data_send = [], array $args = [] ) {\n+\t\t$url       = LP_Settings::url_handle_lp_ajax();\n+\t\t$data_send = array_merge(\n+\t\t\t[ 'nonce' => wp_create_nonce( 'wp_rest' ) ],\n+\t\t\t$data_send\n+\t\t);\n+\t\t$args      = array_merge(\n+\t\t\t[\n+\t\t\t\t'timeout'   => 0.01,\n+\t\t\t\t'blocking'  => false,\n+\t\t\t\t'body'      => $data_send,\n+\t\t\t\t'cookies'   => $_COOKIE,\n+\t\t\t\t'sslverify' => is_ssl(),\n+\t\t\t\t'headers'   => [\n+\t\t\t\t\t'Referer' => $url,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t$args\n+\t\t);\n+\t\twp_remote_post( $url, $args );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPBackgroundTrigger.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPBackgroundTrigger.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FBackground\u002FLPBackgroundTrigger.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FBackground\u002FLPBackgroundTrigger.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-namespace LearnPress\\Background;\r\n-\r\n-use Exception;\r\n-use LearnPress;\r\n-use LP_Debug;\r\n-use LP_Helper;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Class LPBackgroundTrigger\r\n- * To handle a function that can be run in background\r\n- * Via call class:method with params\r\n- *\r\n- * @since 4.2.8.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LPBackgroundTrigger extends LPAsyncRequest {\r\n-\tprotected $action = 'background_trigger';\r\n-\tprotected static $instance;\r\n-\r\n-\t\u002F**\r\n-\t * Method async handle\r\n-\t *\u002F\r\n-\tprotected function handle() {\r\n-\t\tini_set( 'max_execution_time', 0 );\r\n-\t\ttry {\r\n-\t\t\t$params = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? false );\r\n-\t\t\t$class  = LP_Helper::sanitize_params_submitted( $_POST['class'] ?? false );\r\n-\t\t\t$method = LP_Helper::sanitize_params_submitted( $_POST['method'] ?? false );\r\n-\r\n-\t\t\tif ( ! $class || ! $params || ! $method ) {\r\n-\t\t\t\tthrow new Exception( 'Params send on background is invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Security: check callback is registered.\r\n-\t\t\t$allow_callbacks = apply_filters(\r\n-\t\t\t\t'lp\u002Fbackground\u002Fallow_callback',\r\n-\t\t\t\t[]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$callBackStr = $class . ':' . $method;\r\n-\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check class and method is callable.\r\n-\t\t\tif ( is_callable( [ $class, $method ] ) ) {\r\n-\t\t\t\tcall_user_func( [ $class, $method ], $params );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\tdie;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LPBackgroundTrigger\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F Must run instance to register ajax.\r\n-LPBackgroundTrigger::instance();\r\n+\u003C?php\n+namespace LearnPress\\Background;\n+\n+use Exception;\n+use LearnPress;\n+use LP_Debug;\n+use LP_Helper;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Class LPBackgroundTrigger\n+ * To handle a function that can be run in background\n+ * Via call class:method with params\n+ *\n+ * @since 4.2.8.7\n+ * @version 1.0.0\n+ *\u002F\n+class LPBackgroundTrigger extends LPAsyncRequest {\n+\tprotected $action = 'background_trigger';\n+\tprotected static $instance;\n+\n+\t\u002F**\n+\t * Method async handle\n+\t *\u002F\n+\tprotected function handle() {\n+\t\tini_set( 'max_execution_time', 0 );\n+\t\ttry {\n+\t\t\t$params = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? false );\n+\t\t\t$class  = LP_Helper::sanitize_params_submitted( $_POST['class'] ?? false );\n+\t\t\t$method = LP_Helper::sanitize_params_submitted( $_POST['method'] ?? false );\n+\n+\t\t\tif ( ! $class || ! $params || ! $method ) {\n+\t\t\t\tthrow new Exception( 'Params send on background is invalid' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Security: check callback is registered.\n+\t\t\t$allow_callbacks = apply_filters(\n+\t\t\t\t'lp\u002Fbackground\u002Fallow_callback',\n+\t\t\t\t[]\n+\t\t\t);\n+\n+\t\t\t$callBackStr = $class . ':' . $method;\n+\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\n+\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check class and method is callable.\n+\t\t\tif ( is_callable( [ $class, $method ] ) ) {\n+\t\t\t\tcall_user_func( [ $class, $method ], $params );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\tdie;\n+\t}\n+\n+\t\u002F**\n+\t * @return LPBackgroundTrigger\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+\u002F\u002F Must run instance to register ajax.\n+LPBackgroundTrigger::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fabstract-lp-async-request.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fabstract-lp-async-request.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fabstract-lp-async-request.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fabstract-lp-async-request.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,232 +1,232 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Abstract LP_Async_Request class.\r\n- *\r\n- * This class is used to create asynchronous requests in LearnPress.\r\n- * It is recommended to use this class for tasks that can be processed in the background\r\n- * Note: don't call too many times on a progress, it can cause server hang.\r\n- * Should be considered when using\r\n- *\r\n- * @since 4.1.6.9.4\r\n- * @version 1.0.2\r\n- *\u002F\r\n-abstract class LP_Async_Request {\r\n-\t\u002F**\r\n-\t * Prefix\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $prefix = 'lp';\r\n-\r\n-\t\u002F**\r\n-\t * Action\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $action = 'async_request';\r\n-\r\n-\t\u002F**\r\n-\t * Identifier\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $identifier;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to logged-in users\r\n-\t *\u002F\r\n-\tconst LOGGED_IN = 1;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to logged-out users\r\n-\t *\u002F\r\n-\tconst LOGGED_OUT = 2;\r\n-\r\n-\t\u002F**\r\n-\t * Constant identifier for a task that should be available to all users regardless of auth status\r\n-\t *\u002F\r\n-\tconst BOTH = 3;\r\n-\r\n-\t\u002F**\r\n-\t * Data\r\n-\t *\r\n-\t * (default value: array())\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $data = array();\r\n-\r\n-\t\u002F**\r\n-\t * Initiate new async request\r\n-\t *\u002F\r\n-\tpublic function __construct( $auth_level = self::BOTH ) {\r\n-\t\t$this->identifier = $this->prefix . '_' . $this->action;\r\n-\r\n-\t\t\u002F\u002Fadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\t\t\u002F\u002Fadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\r\n-\t\tif ( $auth_level & self::LOGGED_IN ) {\r\n-\t\t\tadd_action( \"admin_post_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\r\n-\t\t}\r\n-\t\tif ( $auth_level & self::LOGGED_OUT ) {\r\n-\t\t\tadd_action( \"admin_post_nopriv_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set data used during the request\r\n-\t *\r\n-\t * @param array $data Data.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function data( array $data ): LP_Async_Request {\r\n-\t\t$this->data = $data;\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Dispatch the async request\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\t$url  = esc_url_raw( $this->get_query_url() );\r\n-\t\t$args = $this->get_post_args();\r\n-\r\n-\t\treturn wp_remote_post( $url, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query URL\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_query_url(): string {\r\n-\t\tif ( property_exists( $this, 'query_url' ) ) {\r\n-\t\t\treturn $this->query_url;\r\n-\t\t}\r\n-\r\n-\t\t$url = admin_url( 'admin-post.php' );\r\n-\t\treturn apply_filters( $this->identifier . '\u002Fquery_url', $url );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_post_args(): array {\r\n-\t\t$identifier           = $this->identifier;\r\n-\t\t$this->data['action'] = \"lp_async_{$identifier}\";\r\n-\t\t$this->data['_nonce'] = $this->create_async_nonce();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Must set timeout to 0.01 to avoid blocking the request.\r\n-\t\t * Don't change it, because it can make sever hang.\r\n-\t\t *\u002F\r\n-\t\t$args = array(\r\n-\t\t\t'timeout'   => 0.01,\r\n-\t\t\t'blocking'  => false,\r\n-\t\t\t'body'      => $this->data,\r\n-\t\t\t'cookies'   => $_COOKIE,\r\n-\t\t\t'sslverify' => is_ssl(),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters the post arguments used during an async request.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( $this->identifier . '_post_args', $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create nonce for async request\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tprotected function create_async_nonce() {\r\n-\t\t$action = $this->get_nonce_action();\r\n-\t\t$i      = wp_nonce_tick();\r\n-\r\n-\t\treturn substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Verify that the correct nonce was used within the time limit.\r\n-\t *\r\n-\t * @param string $nonce\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function verify_async_nonce( string $nonce ): bool {\r\n-\t\t$action = $this->get_nonce_action();\r\n-\t\t$i      = wp_nonce_tick();\r\n-\r\n-\t\t\u002F\u002F Nonce generated 0-12 hours ago\r\n-\t\tif ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Nonce generated 12-24 hours ago\r\n-\t\tif ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\r\n-\t\t\treturn 2;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Invalid nonce\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get a nonce action based on the $action property of the class\r\n-\t *\r\n-\t * @return string The nonce action for the current instance\r\n-\t *\u002F\r\n-\tprotected function get_nonce_action(): string {\r\n-\t\t$action = $this->identifier;\r\n-\t\tif ( substr( $action, 0, 7 ) === 'nopriv_' ) {\r\n-\t\t\t$action = substr( $action, 7 );\r\n-\t\t}\r\n-\r\n-\t\treturn \"lp_async_$action\";\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Maybe handle\r\n-\t *\r\n-\t * Check for correct nonce and pass to handler.\r\n-\t *\u002F\r\n-\tpublic function maybe_handle() {\r\n-\t\t\u002F\u002F Don't lock up other requests while processing\r\n-\t\tsession_write_close();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * set params $_POST['lp_no_check_referer'] = 1\r\n-\t\t * for case: send request when user not login, but get request when user logged\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4\r\n-\t\t *\u002F\r\n-\t\t\u002F*if ( ! isset( $_POST['lp_no_check_referer'] ) ) {\r\n-\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\t$this->identifier = \"nopriv_$this->identifier\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->handle();\r\n-\t\t}\r\n-\r\n-\t\twp_die();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle\r\n-\t *\r\n-\t * Override this method to perform any actions required\r\n-\t * during the async request.\r\n-\t *\u002F\r\n-\tabstract protected function handle();\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Abstract LP_Async_Request class.\n+ *\n+ * This class is used to create asynchronous requests in LearnPress.\n+ * It is recommended to use this class for tasks that can be processed in the background\n+ * Note: don't call too many times on a progress, it can cause server hang.\n+ * Should be considered when using\n+ *\n+ * @since 4.1.6.9.4\n+ * @version 1.0.2\n+ *\u002F\n+abstract class LP_Async_Request {\n+\t\u002F**\n+\t * Prefix\n+\t * @var string\n+\t *\u002F\n+\tprotected $prefix = 'lp';\n+\n+\t\u002F**\n+\t * Action\n+\t * @var string\n+\t *\u002F\n+\tprotected $action = 'async_request';\n+\n+\t\u002F**\n+\t * Identifier\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $identifier;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to logged-in users\n+\t *\u002F\n+\tconst LOGGED_IN = 1;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to logged-out users\n+\t *\u002F\n+\tconst LOGGED_OUT = 2;\n+\n+\t\u002F**\n+\t * Constant identifier for a task that should be available to all users regardless of auth status\n+\t *\u002F\n+\tconst BOTH = 3;\n+\n+\t\u002F**\n+\t * Data\n+\t *\n+\t * (default value: array())\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $data = array();\n+\n+\t\u002F**\n+\t * Initiate new async request\n+\t *\u002F\n+\tpublic function __construct( $auth_level = self::BOTH ) {\n+\t\t$this->identifier = $this->prefix . '_' . $this->action;\n+\n+\t\t\u002F\u002Fadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\t\t\u002F\u002Fadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\n+\t\tif ( $auth_level & self::LOGGED_IN ) {\n+\t\t\tadd_action( \"admin_post_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\n+\t\t}\n+\t\tif ( $auth_level & self::LOGGED_OUT ) {\n+\t\t\tadd_action( \"admin_post_nopriv_lp_async_$this->identifier\", [ $this, 'maybe_handle' ] );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set data used during the request\n+\t *\n+\t * @param array $data Data.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function data( array $data ): LP_Async_Request {\n+\t\t$this->data = $data;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Dispatch the async request\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\t$url  = esc_url_raw( $this->get_query_url() );\n+\t\t$args = $this->get_post_args();\n+\n+\t\treturn wp_remote_post( $url, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Get query URL\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_query_url(): string {\n+\t\tif ( property_exists( $this, 'query_url' ) ) {\n+\t\t\treturn $this->query_url;\n+\t\t}\n+\n+\t\t$url = admin_url( 'admin-post.php' );\n+\t\treturn apply_filters( $this->identifier . '\u002Fquery_url', $url );\n+\t}\n+\n+\t\u002F**\n+\t * Get post args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_post_args(): array {\n+\t\t$identifier           = $this->identifier;\n+\t\t$this->data['action'] = \"lp_async_{$identifier}\";\n+\t\t$this->data['_nonce'] = $this->create_async_nonce();\n+\n+\t\t\u002F**\n+\t\t * Must set timeout to 0.01 to avoid blocking the request.\n+\t\t * Don't change it, because it can make sever hang.\n+\t\t *\u002F\n+\t\t$args = array(\n+\t\t\t'timeout'   => 0.01,\n+\t\t\t'blocking'  => false,\n+\t\t\t'body'      => $this->data,\n+\t\t\t'cookies'   => $_COOKIE,\n+\t\t\t'sslverify' => is_ssl(),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Filters the post arguments used during an async request.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\u002F\n+\t\treturn apply_filters( $this->identifier . '_post_args', $args );\n+\t}\n+\n+\t\u002F**\n+\t * Create nonce for async request\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tprotected function create_async_nonce() {\n+\t\t$action = $this->get_nonce_action();\n+\t\t$i      = wp_nonce_tick();\n+\n+\t\treturn substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 );\n+\t}\n+\n+\t\u002F**\n+\t * Verify that the correct nonce was used within the time limit.\n+\t *\n+\t * @param string $nonce\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function verify_async_nonce( string $nonce ): bool {\n+\t\t$action = $this->get_nonce_action();\n+\t\t$i      = wp_nonce_tick();\n+\n+\t\t\u002F\u002F Nonce generated 0-12 hours ago\n+\t\tif ( substr( wp_hash( $i . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t\u002F\u002F Nonce generated 12-24 hours ago\n+\t\tif ( substr( wp_hash( ( $i - 1 ) . $action . get_class( $this ), 'nonce' ), - 12, 10 ) == $nonce ) {\n+\t\t\treturn 2;\n+\t\t}\n+\n+\t\t\u002F\u002F Invalid nonce\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get a nonce action based on the $action property of the class\n+\t *\n+\t * @return string The nonce action for the current instance\n+\t *\u002F\n+\tprotected function get_nonce_action(): string {\n+\t\t$action = $this->identifier;\n+\t\tif ( substr( $action, 0, 7 ) === 'nopriv_' ) {\n+\t\t\t$action = substr( $action, 7 );\n+\t\t}\n+\n+\t\treturn \"lp_async_$action\";\n+\t}\n+\n+\t\u002F**\n+\t * Maybe handle\n+\t *\n+\t * Check for correct nonce and pass to handler.\n+\t *\u002F\n+\tpublic function maybe_handle() {\n+\t\t\u002F\u002F Don't lock up other requests while processing\n+\t\tsession_write_close();\n+\n+\t\t\u002F**\n+\t\t * set params $_POST['lp_no_check_referer'] = 1\n+\t\t * for case: send request when user not login, but get request when user logged\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4\n+\t\t *\u002F\n+\t\t\u002F*if ( ! isset( $_POST['lp_no_check_referer'] ) ) {\n+\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n+\t\t}*\u002F\n+\n+\t\tif ( isset( $_POST['_nonce'] ) && $this->verify_async_nonce( $_POST['_nonce'] ) ) {\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\t$this->identifier = \"nopriv_$this->identifier\";\n+\t\t\t}\n+\n+\t\t\t$this->handle();\n+\t\t}\n+\n+\t\twp_die();\n+\t}\n+\n+\t\u002F**\n+\t * Handle\n+\t *\n+\t * Override this method to perform any actions required\n+\t * during the async request.\n+\t *\u002F\n+\tabstract protected function handle();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-query-items.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-query-items.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-query-items.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-query-items.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,300 +1,300 @@\n-\u003C?php\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'LP_Background_Query_Items' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Background_Query_Items\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tclass LP_Background_Query_Items {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $action = 'query_items';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected $queue_lock_time = 3600;\r\n-\r\n-\t\tprotected $cron_interval = 60 * 24; \u002F\u002F minutes\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var float|int\r\n-\t\t *\u002F\r\n-\t\tprotected $transient_time = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Background_Query_Items constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t\u002F\u002Fparent::__construct();\r\n-\t\t\t$this->transient_time = DAY_IN_SECONDS \u002F 2;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param mixed $data\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tprotected function task( $data ) {\r\n-\t\t\t\u002F\u002Fparent::task( $data );\r\n-\r\n-\t\t\tif ( ! isset( $data['callback'] ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_callable( array( $this, $data['callback'] ) ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tcall_user_func( array( $this, $data['callback'] ) );\r\n-\r\n-\t\t\tdelete_option( 'doing_' . $data['callback'] );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_plugins_from_wp() {\r\n-\t\t\t$plugins = get_transient( 'lp_plugins_wp' );\r\n-\r\n-\t\t\tif ( ! $plugins ) {\r\n-\t\t\t\t$this->query_free_addons();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn is_array( $plugins ) ? $plugins : false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_plugins_from_tp() {\r\n-\t\t\t$plugins = get_transient( 'lp_plugins_tp' );\r\n-\r\n-\t\t\tif ( ! $plugins ) {\r\n-\t\t\t\t$this->query_premium_addons();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn is_array( $plugins ) ? $plugins : false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_related_themes() {\r\n-\t\t\t$themes = get_transient( 'lp_related_themes' );\r\n-\r\n-\t\t\tif ( ! is_array( $themes ) || empty( $themes ) ) {\r\n-\t\t\t\t$themes = $this->query_related_themes();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn is_array( $themes ) ? $themes : false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function force_update() {\r\n-\t\t\t$transients = array( 'lp_plugins_wp', 'lp_plugins_tp', 'lp_related_themes' );\r\n-\r\n-\t\t\tforeach ( $transients as $transient ) {\r\n-\t\t\t\tdelete_transient( $transient );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->query_free_addons();\r\n-\t\t\t$this->query_premium_addons();\r\n-\t\t\t$this->query_related_themes();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query all free addons from wp.org\r\n-\t\t *\r\n-\t\t * @return array|string\r\n-\t\t *\u002F\r\n-\t\tpublic function query_free_addons() {\r\n-\t\t\tLP_Plugins_Helper::require_plugins_api();\r\n-\r\n-\t\t\t$per_page = 20;\r\n-\t\t\t$paged    = 1;\r\n-\t\t\t$tag      = 'learnpress';\r\n-\r\n-\t\t\t$query_args = array(\r\n-\t\t\t\t'page'              => $paged,\r\n-\t\t\t\t'per_page'          => $per_page,\r\n-\t\t\t\t'fields'            => array(\r\n-\t\t\t\t\t'last_updated'    => true,\r\n-\t\t\t\t\t'icons'           => true,\r\n-\t\t\t\t\t'active_installs' => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'locale'            => get_locale(),\r\n-\t\t\t\t'installed_plugins' => LP_Plugins_Helper::get_installed_plugin_slugs(),\r\n-\t\t\t\t'author'            => 'thimpress',\r\n-\t\t\t);\r\n-\t\t\t$plugins    = array();\r\n-\r\n-\t\t\tset_transient( 'lp_plugins_wp', __( 'No items found!', 'learnpress' ), $this->transient_time );\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$api = plugins_api( 'query_plugins', $query_args );\r\n-\t\t\t\tif ( is_wp_error( $api ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'WP query plugins error!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! is_array( $api->plugins ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'WP query plugins empty!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t\t$all_plugins = get_plugins();\r\n-\t\t\t\t\u002F\u002F Filter plugins with tag contains 'learnpress'\r\n-\t\t\t\t$_plugins = array_filter( $api->plugins, array( 'LP_Plugins_Helper', '_filter_plugin' ) );\r\n-\r\n-\t\t\t\t\u002F\u002F Ensure that the array is indexed from 0\r\n-\t\t\t\t$_plugins = array_values( $_plugins );\r\n-\r\n-\t\t\t\tfor ( $n = sizeof( $_plugins ), $i = $n - 1; $i >= 0; $i -- ) {\r\n-\t\t\t\t\t$plugin = $_plugins[ $i ];\r\n-\r\n-\t\t\t\t\tif ( ! isset( $plugin->slug ) ) {\r\n-\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$key = $plugin->slug;\r\n-\t\t\t\t\tforeach ( $all_plugins as $file => $p ) {\r\n-\t\t\t\t\t\tif ( strpos( $file, $plugin->slug ) !== false ) {\r\n-\t\t\t\t\t\t\t$key = $file;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$plugin->source  = 'wp';\r\n-\t\t\t\t\t$plugins[ $key ] = (array) $plugin;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( sizeof( $plugins ) ) {\r\n-\t\t\t\t\tset_transient( 'lp_plugins_wp', $plugins, $this->transient_time );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Exception $ex ) {\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $plugins;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query all available premium addons from thimpress.com\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function query_premium_addons() {\r\n-\t\t\t$plugins  = array();\r\n-\t\t\t$url      = 'https:\u002F\u002Fthimpress.com\u002F?thimpress_get_addons=premium';\r\n-\t\t\t$response = wp_remote_get( esc_url_raw( $url ), array( 'decompress' => false ) );\r\n-\r\n-\t\t\tset_transient( 'lp_plugins_tp', __( 'No items found!', 'learnpress' ), $this->transient_time );\r\n-\r\n-\t\t\tif ( is_wp_error( $response ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response = wp_remote_retrieve_body( $response );\r\n-\t\t\t$response = json_decode( $response, true );\r\n-\r\n-\t\t\tif ( ! empty( $response ) ) {\r\n-\t\t\t\t$maps = array(\r\n-\t\t\t\t\t'authorize-net-add-on-learnpress'      => 'learnpress-authorizenet-payment',\r\n-\t\t\t\t\t'2checkout-add-learnpress'             => 'learnpress-2checkout-payment',\r\n-\t\t\t\t\t'commission-add-on-for-learnpress'     => 'learnpress-commission',\r\n-\t\t\t\t\t'paid-memberships-pro-add-learnpress'  => 'learnpress-paid-membership-pro',\r\n-\t\t\t\t\t'gradebook-add-on-for-learnpress'      => 'learnpress-gradebook',\r\n-\t\t\t\t\t'sorting-choice-add-on-for-learnpress' => 'learnpress-sorting-choice',\r\n-\t\t\t\t\t'content-drip-add-on-for-learnpress'   => 'learnpress-content-drip',\r\n-\t\t\t\t\t'mycred-add-on-for-learnpress'         => 'learnpress-mycred',\r\n-\t\t\t\t\t'random-quiz-add-on-for-learnpress'    => 'learnpress-random-quiz',\r\n-\t\t\t\t\t'co-instructors-add-on-for-learnpress' => 'learnpress-co-instructor',\r\n-\t\t\t\t\t'collections-add-on-for-learnpress'    => 'learnpress-collections',\r\n-\t\t\t\t\t'woocommerce-add-on-for-learnpress'    => 'learnpress-woo-payment',\r\n-\t\t\t\t\t'stripe-add-on-for-learnpress'         => 'learnpress-stripe',\r\n-\t\t\t\t\t'certificates-add-on-for-learnpress'   => 'learnpress-certificates',\r\n-\t\t\t\t\t'assignments-add-on-for-learnpress'    => 'learnpress-assignments',\r\n-\t\t\t\t\t'announcement-add-on-for-learnpress'   => 'learnpress-announcements',\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tforeach ( $response as $key => $item ) {\r\n-\t\t\t\t\t$slug = $item['slug'];\r\n-\t\t\t\t\tif ( ! empty( $maps[ $slug ] ) ) {\r\n-\t\t\t\t\t\t$plugin_file             = sprintf( '%1$s\u002F%1$s.php', $maps[ $slug ] );\r\n-\t\t\t\t\t\t$plugins[ $plugin_file ] = $item;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( sizeof( $plugins ) ) {\r\n-\t\t\t\t\tset_transient( 'lp_plugins_tp', $plugins, $this->transient_time );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $plugins;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function query_related_themes() {\r\n-\r\n-\t\t\tset_transient( 'lp_related_themes', __( 'No item found!', 'learnpress' ), $this->transient_time );\r\n-\r\n-\t\t\t$themes   = array();\r\n-\t\t\t$url      = 'https:\u002F\u002Fapi.envato.com\u002Fv1\u002Fdiscovery\u002Fsearch\u002Fsearch\u002Fitem?site=themeforest.net&username=thimpress&sort_by=sales';\r\n-\t\t\t$args     = array(\r\n-\t\t\t\t'headers' => array(\r\n-\t\t\t\t\t'Authorization' => 'Bearer BmYcBsYXlSoVe0FekueDxqNGz2o3JRaP',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t\t$response = wp_remote_request( $url, $args );\r\n-\r\n-\t\t\tif ( is_wp_error( $response ) ) {\r\n-\t\t\t\terror_log( $response->get_error_message() );\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response = wp_remote_retrieve_body( $response );\r\n-\t\t\t$response = json_decode( $response, true );\r\n-\r\n-\t\t\tif ( ! empty( $response ) && ! empty( $response['matches'] ) ) {\r\n-\t\t\t\t$all_themes = array();\r\n-\r\n-\t\t\t\tforeach ( $response['matches'] as $theme ) {\r\n-\t\t\t\t\t$all_themes[ $theme['id'] ] = $theme;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$education_themes = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Feducation-themes',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'23451388' => 'kindergarten',\r\n-\t\t\t\t\t\t'22773871' => 'ivy-school',\r\n-\t\t\t\t\t\t'20370918' => 'wordpress-lms',\r\n-\t\t\t\t\t\t'14058034' => 'eduma',\r\n-\t\t\t\t\t\t'17097658' => 'coach',\r\n-\t\t\t\t\t\t'11797847' => 'lms',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( $education_themes ) {\r\n-\t\t\t\t\t$themes['other']     = array_diff_key( $all_themes, $education_themes );\r\n-\t\t\t\t\t$themes['education'] = array_diff_key( $all_themes, $themes['other'] );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$themes['other'] = $all_themes;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tset_transient( 'lp_related_themes', $themes, $this->transient_time );\r\n-\r\n-\t\t\t} elseif ( ! empty( $response['message'] ) ) {\r\n-\t\t\t\tset_transient( 'lp_related_themes', $response['message'], $this->transient_time );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $themes;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Background_Query_Items\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tstatic $instance;\r\n-\t\t\tif ( empty( $instance ) ) {\r\n-\t\t\t\t$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $instance;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-return LP_Background_Query_Items::instance();\r\n+\u003C?php\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'LP_Background_Query_Items' ) ) {\n+\t\u002F**\n+\t * Class LP_Background_Query_Items\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tclass LP_Background_Query_Items {\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $action = 'query_items';\n+\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected $queue_lock_time = 3600;\n+\n+\t\tprotected $cron_interval = 60 * 24; \u002F\u002F minutes\n+\n+\t\t\u002F**\n+\t\t * @var float|int\n+\t\t *\u002F\n+\t\tprotected $transient_time = 0;\n+\n+\t\t\u002F**\n+\t\t * LP_Background_Query_Items constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t\u002F\u002Fparent::__construct();\n+\t\t\t$this->transient_time = DAY_IN_SECONDS \u002F 2;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param mixed $data\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tprotected function task( $data ) {\n+\t\t\t\u002F\u002Fparent::task( $data );\n+\n+\t\t\tif ( ! isset( $data['callback'] ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! is_callable( array( $this, $data['callback'] ) ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tcall_user_func( array( $this, $data['callback'] ) );\n+\n+\t\t\tdelete_option( 'doing_' . $data['callback'] );\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tpublic function get_plugins_from_wp() {\n+\t\t\t$plugins = get_transient( 'lp_plugins_wp' );\n+\n+\t\t\tif ( ! $plugins ) {\n+\t\t\t\t$this->query_free_addons();\n+\t\t\t}\n+\n+\t\t\treturn is_array( $plugins ) ? $plugins : false;\n+\t\t}\n+\n+\t\tpublic function get_plugins_from_tp() {\n+\t\t\t$plugins = get_transient( 'lp_plugins_tp' );\n+\n+\t\t\tif ( ! $plugins ) {\n+\t\t\t\t$this->query_premium_addons();\n+\t\t\t}\n+\n+\t\t\treturn is_array( $plugins ) ? $plugins : false;\n+\t\t}\n+\n+\t\tpublic function get_related_themes() {\n+\t\t\t$themes = get_transient( 'lp_related_themes' );\n+\n+\t\t\tif ( ! is_array( $themes ) || empty( $themes ) ) {\n+\t\t\t\t$themes = $this->query_related_themes();\n+\t\t\t}\n+\n+\t\t\treturn is_array( $themes ) ? $themes : false;\n+\t\t}\n+\n+\t\tpublic function force_update() {\n+\t\t\t$transients = array( 'lp_plugins_wp', 'lp_plugins_tp', 'lp_related_themes' );\n+\n+\t\t\tforeach ( $transients as $transient ) {\n+\t\t\t\tdelete_transient( $transient );\n+\t\t\t}\n+\n+\t\t\t$this->query_free_addons();\n+\t\t\t$this->query_premium_addons();\n+\t\t\t$this->query_related_themes();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query all free addons from wp.org\n+\t\t *\n+\t\t * @return array|string\n+\t\t *\u002F\n+\t\tpublic function query_free_addons() {\n+\t\t\tLP_Plugins_Helper::require_plugins_api();\n+\n+\t\t\t$per_page = 20;\n+\t\t\t$paged    = 1;\n+\t\t\t$tag      = 'learnpress';\n+\n+\t\t\t$query_args = array(\n+\t\t\t\t'page'              => $paged,\n+\t\t\t\t'per_page'          => $per_page,\n+\t\t\t\t'fields'            => array(\n+\t\t\t\t\t'last_updated'    => true,\n+\t\t\t\t\t'icons'           => true,\n+\t\t\t\t\t'active_installs' => true,\n+\t\t\t\t),\n+\t\t\t\t'locale'            => get_locale(),\n+\t\t\t\t'installed_plugins' => LP_Plugins_Helper::get_installed_plugin_slugs(),\n+\t\t\t\t'author'            => 'thimpress',\n+\t\t\t);\n+\t\t\t$plugins    = array();\n+\n+\t\t\tset_transient( 'lp_plugins_wp', __( 'No items found!', 'learnpress' ), $this->transient_time );\n+\n+\t\t\ttry {\n+\t\t\t\t$api = plugins_api( 'query_plugins', $query_args );\n+\t\t\t\tif ( is_wp_error( $api ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'WP query plugins error!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t\tif ( ! is_array( $api->plugins ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'WP query plugins empty!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t\t$all_plugins = get_plugins();\n+\t\t\t\t\u002F\u002F Filter plugins with tag contains 'learnpress'\n+\t\t\t\t$_plugins = array_filter( $api->plugins, array( 'LP_Plugins_Helper', '_filter_plugin' ) );\n+\n+\t\t\t\t\u002F\u002F Ensure that the array is indexed from 0\n+\t\t\t\t$_plugins = array_values( $_plugins );\n+\n+\t\t\t\tfor ( $n = sizeof( $_plugins ), $i = $n - 1; $i >= 0; $i -- ) {\n+\t\t\t\t\t$plugin = $_plugins[ $i ];\n+\n+\t\t\t\t\tif ( ! isset( $plugin->slug ) ) {\n+\t\t\t\t\t\treturn;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$key = $plugin->slug;\n+\t\t\t\t\tforeach ( $all_plugins as $file => $p ) {\n+\t\t\t\t\t\tif ( strpos( $file, $plugin->slug ) !== false ) {\n+\t\t\t\t\t\t\t$key = $file;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$plugin->source  = 'wp';\n+\t\t\t\t\t$plugins[ $key ] = (array) $plugin;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( sizeof( $plugins ) ) {\n+\t\t\t\t\tset_transient( 'lp_plugins_wp', $plugins, $this->transient_time );\n+\t\t\t\t}\n+\t\t\t} catch ( Exception $ex ) {\n+\t\t\t}\n+\n+\t\t\treturn $plugins;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query all available premium addons from thimpress.com\n+\t\t *\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\tpublic function query_premium_addons() {\n+\t\t\t$plugins  = array();\n+\t\t\t$url      = 'https:\u002F\u002Fthimpress.com\u002F?thimpress_get_addons=premium';\n+\t\t\t$response = wp_remote_get( esc_url_raw( $url ), array( 'decompress' => false ) );\n+\n+\t\t\tset_transient( 'lp_plugins_tp', __( 'No items found!', 'learnpress' ), $this->transient_time );\n+\n+\t\t\tif ( is_wp_error( $response ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$response = wp_remote_retrieve_body( $response );\n+\t\t\t$response = json_decode( $response, true );\n+\n+\t\t\tif ( ! empty( $response ) ) {\n+\t\t\t\t$maps = array(\n+\t\t\t\t\t'authorize-net-add-on-learnpress'      => 'learnpress-authorizenet-payment',\n+\t\t\t\t\t'2checkout-add-learnpress'             => 'learnpress-2checkout-payment',\n+\t\t\t\t\t'commission-add-on-for-learnpress'     => 'learnpress-commission',\n+\t\t\t\t\t'paid-memberships-pro-add-learnpress'  => 'learnpress-paid-membership-pro',\n+\t\t\t\t\t'gradebook-add-on-for-learnpress'      => 'learnpress-gradebook',\n+\t\t\t\t\t'sorting-choice-add-on-for-learnpress' => 'learnpress-sorting-choice',\n+\t\t\t\t\t'content-drip-add-on-for-learnpress'   => 'learnpress-content-drip',\n+\t\t\t\t\t'mycred-add-on-for-learnpress'         => 'learnpress-mycred',\n+\t\t\t\t\t'random-quiz-add-on-for-learnpress'    => 'learnpress-random-quiz',\n+\t\t\t\t\t'co-instructors-add-on-for-learnpress' => 'learnpress-co-instructor',\n+\t\t\t\t\t'collections-add-on-for-learnpress'    => 'learnpress-collections',\n+\t\t\t\t\t'woocommerce-add-on-for-learnpress'    => 'learnpress-woo-payment',\n+\t\t\t\t\t'stripe-add-on-for-learnpress'         => 'learnpress-stripe',\n+\t\t\t\t\t'certificates-add-on-for-learnpress'   => 'learnpress-certificates',\n+\t\t\t\t\t'assignments-add-on-for-learnpress'    => 'learnpress-assignments',\n+\t\t\t\t\t'announcement-add-on-for-learnpress'   => 'learnpress-announcements',\n+\t\t\t\t);\n+\n+\t\t\t\tforeach ( $response as $key => $item ) {\n+\t\t\t\t\t$slug = $item['slug'];\n+\t\t\t\t\tif ( ! empty( $maps[ $slug ] ) ) {\n+\t\t\t\t\t\t$plugin_file             = sprintf( '%1$s\u002F%1$s.php', $maps[ $slug ] );\n+\t\t\t\t\t\t$plugins[ $plugin_file ] = $item;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( sizeof( $plugins ) ) {\n+\t\t\t\t\tset_transient( 'lp_plugins_tp', $plugins, $this->transient_time );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $plugins;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\tpublic function query_related_themes() {\n+\n+\t\t\tset_transient( 'lp_related_themes', __( 'No item found!', 'learnpress' ), $this->transient_time );\n+\n+\t\t\t$themes   = array();\n+\t\t\t$url      = 'https:\u002F\u002Fapi.envato.com\u002Fv1\u002Fdiscovery\u002Fsearch\u002Fsearch\u002Fitem?site=themeforest.net&username=thimpress&sort_by=sales';\n+\t\t\t$args     = array(\n+\t\t\t\t'headers' => array(\n+\t\t\t\t\t'Authorization' => 'Bearer BmYcBsYXlSoVe0FekueDxqNGz2o3JRaP',\n+\t\t\t\t),\n+\t\t\t);\n+\t\t\t$response = wp_remote_request( $url, $args );\n+\n+\t\t\tif ( is_wp_error( $response ) ) {\n+\t\t\t\terror_log( $response->get_error_message() );\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$response = wp_remote_retrieve_body( $response );\n+\t\t\t$response = json_decode( $response, true );\n+\n+\t\t\tif ( ! empty( $response ) && ! empty( $response['matches'] ) ) {\n+\t\t\t\t$all_themes = array();\n+\n+\t\t\t\tforeach ( $response['matches'] as $theme ) {\n+\t\t\t\t\t$all_themes[ $theme['id'] ] = $theme;\n+\t\t\t\t}\n+\n+\t\t\t\t$education_themes = apply_filters(\n+\t\t\t\t\t'learn-press\u002Feducation-themes',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'23451388' => 'kindergarten',\n+\t\t\t\t\t\t'22773871' => 'ivy-school',\n+\t\t\t\t\t\t'20370918' => 'wordpress-lms',\n+\t\t\t\t\t\t'14058034' => 'eduma',\n+\t\t\t\t\t\t'17097658' => 'coach',\n+\t\t\t\t\t\t'11797847' => 'lms',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tif ( $education_themes ) {\n+\t\t\t\t\t$themes['other']     = array_diff_key( $all_themes, $education_themes );\n+\t\t\t\t\t$themes['education'] = array_diff_key( $all_themes, $themes['other'] );\n+\t\t\t\t} else {\n+\t\t\t\t\t$themes['other'] = $all_themes;\n+\t\t\t\t}\n+\n+\t\t\t\tset_transient( 'lp_related_themes', $themes, $this->transient_time );\n+\n+\t\t\t} elseif ( ! empty( $response['message'] ) ) {\n+\t\t\t\tset_transient( 'lp_related_themes', $response['message'], $this->transient_time );\n+\t\t\t}\n+\n+\t\t\treturn $themes;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Background_Query_Items\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tstatic $instance;\n+\t\t\tif ( empty( $instance ) ) {\n+\t\t\t\t$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn $instance;\n+\t\t}\n+\t}\n+}\n+\n+return LP_Background_Query_Items::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,189 +1,189 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Background_Single_Course\r\n- *\r\n- * Single to run not schedule, run one time and done when be call\r\n- *\r\n- * @since 4.1.1\r\n- * @author tungnx\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'LP_Background_Single_Course' ) ) {\r\n-\tclass LP_Background_Single_Course extends LP_Async_Request {\r\n-\t\tprotected $action = 'background_single_course';\r\n-\t\tprotected static $instance;\r\n-\t\t\u002F**\r\n-\t\t * @var $lp_course CourseModel\r\n-\t\t *\u002F\r\n-\t\tprotected $lp_course;\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $data = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get params via $_POST and handle\r\n-\t\t *\r\n-\t\t * @see LP_Course_Post_Type::save_post()\r\n-\t\t *\u002F\r\n-\t\tprotected function handle() {\r\n-\t\t\tini_set( 'max_execution_time', 0 );\r\n-\t\t\ttry {\r\n-\t\t\t\t$handle_name = LP_Request::get_param( 'handle_name', '', 'key', 'post' );\r\n-\t\t\t\t$course_id   = intval( $_POST['course_id'] ?? 0 );\r\n-\t\t\t\tif ( empty( $handle_name ) || ! $course_id ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->data      = LP_Request::get_param( 'data', [], 'text', 'post' );\r\n-\t\t\t\t$this->lp_course = CourseModel::find( $course_id, true );\r\n-\t\t\t\tif ( ! $this->lp_course instanceof CourseModel ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $handle_name ) {\r\n-\t\t\t\t\tcase 'save_post':\r\n-\t\t\t\t\t\t$this->save_post();\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\t\tdie;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save course via post data\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.1.3\r\n-\t\t * @version 1.0.4\r\n-\t\t *\u002F\r\n-\t\tprotected function save_post() {\r\n-\t\t\tif ( ! current_user_can( 'edit_lp_courses' ) ) {\r\n-\t\t\t\terror_log( 'Not permission save background course' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseModel = $this->lp_course;\r\n-\t\t\t\u002F\u002F Unset value of keys for calculate again\r\n-\t\t\tunset( $courseModel->first_item_id );\r\n-\t\t\tunset( $courseModel->total_items );\r\n-\t\t\tunset( $courseModel->sections_items );\r\n-\t\t\tunset( $courseModel->meta_data->_lp_final_quiz );\r\n-\t\t\tunset( $courseModel->categories );\r\n-\t\t\tunset( $courseModel->tags );\r\n-\t\t\t\u002F\u002Funset( $courseModel->image_url );\r\n-\t\t\t$courseModel->get_author_model();\r\n-\t\t\t$courseModel->get_first_item_id();\r\n-\t\t\t$courseModel->get_total_items();\r\n-\t\t\t$sections_items = $courseModel->get_section_items();\r\n-\t\t\t\u002F\u002F Update for case data old, section_order and item_order begin = 0\r\n-\t\t\t$section_curd = new LP_Section_CURD( $courseModel->get_id() );\r\n-\t\t\t$section_ids  = LP_Database::get_values_by_key( $sections_items, 'section_id' );\r\n-\t\t\t$section_curd->update_sections_order( $section_ids );\r\n-\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\t$section_curd->update_section_items( $section_items->section_id, $section_items->items );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End\r\n-\t\t\t$courseModel->get_final_quiz();\r\n-\t\t\t$courseModel->get_categories();\r\n-\t\t\t$courseModel->get_tags();\r\n-\t\t\t\u002F*$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\r\n-\t\t\t$size_img_send    = [\r\n-\t\t\t\t$size_img_setting['width'] ?? 500,\r\n-\t\t\t\t$size_img_setting['height'] ?? 300,\r\n-\t\t\t];\r\n-\t\t\t$courseModel->get_image_url( $size_img_send );*\u002F\r\n-\t\t\t$courseModel->save();\r\n-\r\n-\t\t\t\u002F\u002F$this->save_extra_info();\r\n-\t\t\t$this->clean_data_invalid();\r\n-\t\t\t$this->review_post_author();\r\n-\r\n-\t\t\t\u002F\u002F Old hook, addon wpml and assignment is using\r\n-\t\t\tdo_action( 'lp\u002Fbackground\u002Fcourse\u002Fsave', learn_press_get_course( $this->lp_course->get_id() ), $this->data );\r\n-\t\t\t\u002F\u002F New hook from v4.2.6.9\r\n-\t\t\tdo_action( 'learnPress\u002Fbackground\u002Fcourse\u002Fsave', $courseModel, $this->data );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Clean cache courses\r\n-\t\t\t *\u002F\r\n-\t\t\t$keys_cache = LP_Courses_Cache::instance()->get_cache( LP_Courses_Cache::$keys );\r\n-\t\t\tif ( $keys_cache ) {\r\n-\t\t\t\tforeach ( $keys_cache as $key ) {\r\n-\t\t\t\t\tLP_Courses_Cache::instance()->clear( $key );\r\n-\t\t\t\t}\r\n-\t\t\t\tLP_Courses_Cache::instance()->clear( LP_Courses_Cache::$keys );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Clear total courses free.\r\n-\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_COURSES_FREE );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_QUERY_COURSES_APP );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Clean data invalid\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.2.6.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tprotected function clean_data_invalid() {\r\n-\t\t\t\u002F\u002F Delete items of course not in table Post, can error from old data, delete item, but not remove it in sections course\r\n-\t\t\tLP_Section_Items_DB::getInstance()->delete_item_not_in_tb_post( $this->lp_course->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user is Instructor and enable review post of Instructor\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.4.1\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tprotected function review_post_author() {\r\n-\t\t\t$lp_course = $this->lp_course;\r\n-\r\n-\t\t\t$user            = learn_press_get_current_user();\r\n-\t\t\t$required_review = LP_Settings::get_option( 'required_review', 'yes' ) === 'yes';\r\n-\r\n-\t\t\tif ( $user->is_instructor() && $required_review && $lp_course->post_status === 'publish' ) {\r\n-\t\t\t\twp_update_post(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'ID'          => $lp_course->get_id(),\r\n-\t\t\t\t\t\t'post_status' => 'pending',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( '%d', '%s' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Background_Single_Course\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): self {\r\n-\t\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Must run instance to register ajax.\r\n-\tLP_Background_Single_Course::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Background_Single_Course\n+ *\n+ * Single to run not schedule, run one time and done when be call\n+ *\n+ * @since 4.1.1\n+ * @author tungnx\n+ * @version 1.0.2\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\PostModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'LP_Background_Single_Course' ) ) {\n+\tclass LP_Background_Single_Course extends LP_Async_Request {\n+\t\tprotected $action = 'background_single_course';\n+\t\tprotected static $instance;\n+\t\t\u002F**\n+\t\t * @var $lp_course CourseModel\n+\t\t *\u002F\n+\t\tprotected $lp_course;\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $data = array();\n+\n+\t\t\u002F**\n+\t\t * Get params via $_POST and handle\n+\t\t *\n+\t\t * @see LP_Course_Post_Type::save_post()\n+\t\t *\u002F\n+\t\tprotected function handle() {\n+\t\t\tini_set( 'max_execution_time', 0 );\n+\t\t\ttry {\n+\t\t\t\t$handle_name = LP_Request::get_param( 'handle_name', '', 'key', 'post' );\n+\t\t\t\t$course_id   = intval( $_POST['course_id'] ?? 0 );\n+\t\t\t\tif ( empty( $handle_name ) || ! $course_id ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$this->data      = LP_Request::get_param( 'data', [], 'text', 'post' );\n+\t\t\t\t$this->lp_course = CourseModel::find( $course_id, true );\n+\t\t\t\tif ( ! $this->lp_course instanceof CourseModel ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $handle_name ) {\n+\t\t\t\t\tcase 'save_post':\n+\t\t\t\t\t\t$this->save_post();\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\t\tdie;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save course via post data\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.1.3\n+\t\t * @version 1.0.4\n+\t\t *\u002F\n+\t\tprotected function save_post() {\n+\t\t\tif ( ! current_user_can( 'edit_lp_courses' ) ) {\n+\t\t\t\terror_log( 'Not permission save background course' );\n+\t\t\t}\n+\n+\t\t\t$courseModel = $this->lp_course;\n+\t\t\t\u002F\u002F Unset value of keys for calculate again\n+\t\t\tunset( $courseModel->first_item_id );\n+\t\t\tunset( $courseModel->total_items );\n+\t\t\tunset( $courseModel->sections_items );\n+\t\t\tunset( $courseModel->meta_data->_lp_final_quiz );\n+\t\t\tunset( $courseModel->categories );\n+\t\t\tunset( $courseModel->tags );\n+\t\t\t\u002F\u002Funset( $courseModel->image_url );\n+\t\t\t$courseModel->get_author_model();\n+\t\t\t$courseModel->get_first_item_id();\n+\t\t\t$courseModel->get_total_items();\n+\t\t\t$sections_items = $courseModel->get_section_items();\n+\t\t\t\u002F\u002F Update for case data old, section_order and item_order begin = 0\n+\t\t\t$section_curd = new LP_Section_CURD( $courseModel->get_id() );\n+\t\t\t$section_ids  = LP_Database::get_values_by_key( $sections_items, 'section_id' );\n+\t\t\t$section_curd->update_sections_order( $section_ids );\n+\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\t$section_curd->update_section_items( $section_items->section_id, $section_items->items );\n+\t\t\t}\n+\t\t\t\u002F\u002F End\n+\t\t\t$courseModel->get_final_quiz();\n+\t\t\t$courseModel->get_categories();\n+\t\t\t$courseModel->get_tags();\n+\t\t\t\u002F*$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\n+\t\t\t$size_img_send    = [\n+\t\t\t\t$size_img_setting['width'] ?? 500,\n+\t\t\t\t$size_img_setting['height'] ?? 300,\n+\t\t\t];\n+\t\t\t$courseModel->get_image_url( $size_img_send );*\u002F\n+\t\t\t$courseModel->save();\n+\n+\t\t\t\u002F\u002F$this->save_extra_info();\n+\t\t\t$this->clean_data_invalid();\n+\t\t\t$this->review_post_author();\n+\n+\t\t\t\u002F\u002F Old hook, addon wpml and assignment is using\n+\t\t\tdo_action( 'lp\u002Fbackground\u002Fcourse\u002Fsave', learn_press_get_course( $this->lp_course->get_id() ), $this->data );\n+\t\t\t\u002F\u002F New hook from v4.2.6.9\n+\t\t\tdo_action( 'learnPress\u002Fbackground\u002Fcourse\u002Fsave', $courseModel, $this->data );\n+\n+\t\t\t\u002F**\n+\t\t\t * Clean cache courses\n+\t\t\t *\u002F\n+\t\t\t$keys_cache = LP_Courses_Cache::instance()->get_cache( LP_Courses_Cache::$keys );\n+\t\t\tif ( $keys_cache ) {\n+\t\t\t\tforeach ( $keys_cache as $key ) {\n+\t\t\t\t\tLP_Courses_Cache::instance()->clear( $key );\n+\t\t\t\t}\n+\t\t\t\tLP_Courses_Cache::instance()->clear( LP_Courses_Cache::$keys );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Clear total courses free.\n+\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_COURSES_FREE );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_QUERY_COURSES_APP );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Clean data invalid\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.2.6.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tprotected function clean_data_invalid() {\n+\t\t\t\u002F\u002F Delete items of course not in table Post, can error from old data, delete item, but not remove it in sections course\n+\t\t\tLP_Section_Items_DB::getInstance()->delete_item_not_in_tb_post( $this->lp_course->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user is Instructor and enable review post of Instructor\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.4.1\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tprotected function review_post_author() {\n+\t\t\t$lp_course = $this->lp_course;\n+\n+\t\t\t$user            = learn_press_get_current_user();\n+\t\t\t$required_review = LP_Settings::get_option( 'required_review', 'yes' ) === 'yes';\n+\n+\t\t\tif ( $user->is_instructor() && $required_review && $lp_course->post_status === 'publish' ) {\n+\t\t\t\twp_update_post(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'ID'          => $lp_course->get_id(),\n+\t\t\t\t\t\t'post_status' => 'pending',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( '%d', '%s' )\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t\u002F\u002F End\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Background_Single_Course\n+\t\t *\u002F\n+\t\tpublic static function instance(): self {\n+\t\t\tif ( is_null( self::$instance ) ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Must run instance to register ajax.\n+\tLP_Background_Single_Course::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-email.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-email.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-email.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fbackground-process\u002Fclass-lp-background-single-email.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,64 +1,64 @@\n-\u003C?php\r\n-\u002F**\r\n- * Send emails in background\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'LP_Background_Single_Email' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Background_Single_Email\r\n-\t *\r\n-\t * @since 4.1.1\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tclass LP_Background_Single_Email extends LP_Async_Request {\r\n-\t\tprotected $action = 'background_single_email';\r\n-\t\tprotected static $instance;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Method async handle\r\n-\t\t *\u002F\r\n-\t\tprotected function handle() {\r\n-\t\t\t$params     = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? false );\r\n-\t\t\t$class_name = LP_Helper::sanitize_params_submitted( $_POST['class_name'] ?? false );\r\n-\r\n-\t\t\tif ( ! $class_name || ! $params ) {\r\n-\t\t\t\terror_log( 'Params send email on background is invalid' );\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! class_exists( $class_name ) ) {\r\n-\t\t\t\terror_log( 'Class not exists: ' . $class_name );\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! method_exists( $class_name, 'handle' ) ) {\r\n-\t\t\t\terror_log( \"Method 'handle' not exists on class $class_name\" );\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var LP_Email_Type_Enrolled_Course $email\r\n-\t\t\t *\u002F\r\n-\t\t\t$email = new $class_name();\r\n-\t\t\t$email->handle( $params );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Background_Single_Email\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): self {\r\n-\t\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Must run instance to register ajax.\r\n-\tLP_Background_Single_Email::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Send emails in background\n+ *\u002F\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'LP_Background_Single_Email' ) ) {\n+\t\u002F**\n+\t * Class LP_Background_Single_Email\n+\t *\n+\t * @since 4.1.1\n+\t * @author tungnx\n+\t *\u002F\n+\tclass LP_Background_Single_Email extends LP_Async_Request {\n+\t\tprotected $action = 'background_single_email';\n+\t\tprotected static $instance;\n+\n+\t\t\u002F**\n+\t\t * Method async handle\n+\t\t *\u002F\n+\t\tprotected function handle() {\n+\t\t\t$params     = LP_Helper::sanitize_params_submitted( $_POST['params'] ?? false );\n+\t\t\t$class_name = LP_Helper::sanitize_params_submitted( $_POST['class_name'] ?? false );\n+\n+\t\t\tif ( ! $class_name || ! $params ) {\n+\t\t\t\terror_log( 'Params send email on background is invalid' );\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! class_exists( $class_name ) ) {\n+\t\t\t\terror_log( 'Class not exists: ' . $class_name );\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! method_exists( $class_name, 'handle' ) ) {\n+\t\t\t\terror_log( \"Method 'handle' not exists on class $class_name\" );\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var LP_Email_Type_Enrolled_Course $email\n+\t\t\t *\u002F\n+\t\t\t$email = new $class_name();\n+\t\t\t$email->handle( $params );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Background_Single_Email\n+\t\t *\u002F\n+\t\tpublic static function instance(): self {\n+\t\t\tif ( is_null( self::$instance ) ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Must run instance to register ajax.\n+\tLP_Background_Single_Email::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,216 +1,216 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.0.8\r\n- * @version 1.0.2\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Cache {\r\n-\t\u002F**\r\n-\t * @var string Key group parent\r\n-\t *\u002F\r\n-\tprotected $key_group_parent = 'learn_press';\r\n-\t\u002F**\r\n-\t * @var string Key group child(external)\r\n-\t *\u002F\r\n-\tprotected $key_group_child = '';\r\n-\t\u002F**\r\n-\t * @var string Add key group parent with key group child\r\n-\t *\u002F\r\n-\tprotected $key_group = '';\r\n-\t\u002F**\r\n-\t * @var string Add key group parent with key group child\r\n-\t *\u002F\r\n-\tprotected $has_thim_cache = false;\r\n-\r\n-\t\u002F**\r\n-\t * If set $has_thim_cache = true, will use thim cache\r\n-\t * Set\u002FUpdate will check key from table thim_cache\r\n-\t * else only WP Cache\r\n-\t *\u002F\r\n-\tpublic function __construct( $has_thim_cache = false ) {\r\n-\t\t$this->key_group      = $this->key_group_parent . '\u002F' . $this->key_group_child;\r\n-\t\t$this->has_thim_cache = $has_thim_cache;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set cache\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed  $data\r\n-\t * @param int    $expire\r\n-\t *\r\n-\t * @since 4.0.8\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function set_cache( string $key, $data, int $expire = 0 ) {\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Cache WP\r\n-\t\t\twp_cache_set( $key, $data, $this->key_group, $expire );\r\n-\t\t\t\u002F\u002F Cache thim_cache\r\n-\t\t\tif ( $this->can_handle_with_thim_cache() ) {\r\n-\t\t\t\t$key = \"{$this->key_group}\u002F{$key}\";\r\n-\t\t\t\tThim_Cache_DB::instance()->set_value( $key, $data, $expire );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get cache\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @return false|mixed\r\n-\t *\u002F\r\n-\tpublic function get_cache( string $key ) {\r\n-\t\t\u002F\u002F Get WP Cache\r\n-\t\t$cache = wp_cache_get( $key, $this->key_group );\r\n-\t\t\u002F\u002F Get thim_cache\r\n-\t\tif ( false === $cache && $this->can_handle_with_thim_cache() ) {\r\n-\t\t\t$key   = \"{$this->key_group}\u002F{$key}\";\r\n-\t\t\t$cache = Thim_Cache_DB::instance()->get_value( $key );\r\n-\t\t\t\u002F*if ( is_string( $cache ) ) {\r\n-\t\t\t\t$cache = wp_unslash( $cache );\r\n-\t\t\t}*\u002F\r\n-\t\t}\r\n-\r\n-\t\treturn $cache;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set value for first load page on one process\r\n-\t * Apply for query call same many times.\r\n-\t *\r\n-\t * @param string $type\r\n-\t * @param string $key\r\n-\t * @param $val mixed\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t * @sicne 4.1.4.1\r\n-\t * @return false|mixed|string\r\n-\t *\u002F\r\n-\tpublic static function cache_load_first( string $type = 'get', string $key = '', $val = '' ) {\r\n-\t\tstatic $first_set_value = array();\r\n-\r\n-\t\tif ( 'get' === $type ) {\r\n-\t\t\tif ( ! array_key_exists( $key, $first_set_value ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $first_set_value[ $key ];\r\n-\t\t\t}\r\n-\t\t} elseif ( 'set' === $type ) {\r\n-\t\t\t$first_set_value[ $key ] = $val;\r\n-\r\n-\t\t\treturn $first_set_value[ $key ];\r\n-\t\t} elseif ( 'clear' === $type ) {\r\n-\t\t\tunset( $first_set_value[ $key ] );\r\n-\t\t}\r\n-\r\n-\t\treturn $first_set_value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear cache by key\r\n-\t *\r\n-\t * @param $key\r\n-\t *\u002F\r\n-\tpublic function clear( $key ) {\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $key ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_cache_delete( $key, $this->key_group );\r\n-\t\t\tif ( $this->can_handle_with_thim_cache() ) {\r\n-\t\t\t\t$key = \"{$this->key_group}\u002F{$key}\";\r\n-\t\t\t\tThim_Cache_DB::instance()->remove_cache( $key );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Store list keys cache to a group.\r\n-\t *\r\n-\t * @param string $key_group\r\n-\t * @param string $key_cache_new\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save_cache_keys( string $key_group, string $key_cache_new ) {\r\n-\t\ttry {\r\n-\t\t\t$keys = $this->get_cache( $key_group );\r\n-\t\t\tif ( false === $keys ) {\r\n-\t\t\t\t$keys_cache = array();\r\n-\t\t\t} else {\r\n-\t\t\t\t$keys_cache = LP_Helper::json_decode( $keys, true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$keys_cache[] = $key_cache_new;\r\n-\t\t\t$this->set_cache( $key_group, json_encode( $keys_cache ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear cache on group store list keys.\r\n-\t *\r\n-\t * @param string $key_group\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function clear_cache_on_group( string $key_group ) {\r\n-\t\ttry {\r\n-\t\t\t$keys_cache_of_group_str = $this->get_cache( $key_group );\r\n-\t\t\tif ( false === $keys_cache_of_group_str ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t$keys_cache_of_group = LP_Helper::json_decode( $keys_cache_of_group_str, true );\r\n-\t\t\tif ( ! empty( $keys_cache_of_group ) ) {\r\n-\t\t\t\tforeach ( $keys_cache_of_group as $key ) {\r\n-\t\t\t\t\t\u002F\u002F Clear cache by key\r\n-\t\t\t\t\t$this->clear( $key );\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F Clear cache store list keys\r\n-\t\t\t\t$this->clear( $key_group );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check can handle with thim cache\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function can_handle_with_thim_cache(): bool {\r\n-\t\treturn $this->has_thim_cache && LP_Settings::is_created_tb_thim_cache();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear all cache\r\n-\t *\r\n-\t * @since 4.0.8\r\n-\t * @version 1.0.1\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clear_all() {\r\n-\t\ttry {\r\n-\t\t\twp_cache_flush();\r\n-\t\t\tThim_Cache_DB::instance()->remove_all_cache();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.0.8\n+ * @version 1.0.2\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Cache {\n+\t\u002F**\n+\t * @var string Key group parent\n+\t *\u002F\n+\tprotected $key_group_parent = 'learn_press';\n+\t\u002F**\n+\t * @var string Key group child(external)\n+\t *\u002F\n+\tprotected $key_group_child = '';\n+\t\u002F**\n+\t * @var string Add key group parent with key group child\n+\t *\u002F\n+\tprotected $key_group = '';\n+\t\u002F**\n+\t * @var string Add key group parent with key group child\n+\t *\u002F\n+\tprotected $has_thim_cache = false;\n+\n+\t\u002F**\n+\t * If set $has_thim_cache = true, will use thim cache\n+\t * Set\u002FUpdate will check key from table thim_cache\n+\t * else only WP Cache\n+\t *\u002F\n+\tpublic function __construct( $has_thim_cache = false ) {\n+\t\t$this->key_group      = $this->key_group_parent . '\u002F' . $this->key_group_child;\n+\t\t$this->has_thim_cache = $has_thim_cache;\n+\t}\n+\n+\t\u002F**\n+\t * Set cache\n+\t *\n+\t * @param string $key\n+\t * @param mixed  $data\n+\t * @param int    $expire\n+\t *\n+\t * @since 4.0.8\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function set_cache( string $key, $data, int $expire = 0 ) {\n+\t\ttry {\n+\t\t\t\u002F\u002F Cache WP\n+\t\t\twp_cache_set( $key, $data, $this->key_group, $expire );\n+\t\t\t\u002F\u002F Cache thim_cache\n+\t\t\tif ( $this->can_handle_with_thim_cache() ) {\n+\t\t\t\t$key = \"{$this->key_group}\u002F{$key}\";\n+\t\t\t\tThim_Cache_DB::instance()->set_value( $key, $data, $expire );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get cache\n+\t *\n+\t * @param string $key\n+\t * @return false|mixed\n+\t *\u002F\n+\tpublic function get_cache( string $key ) {\n+\t\t\u002F\u002F Get WP Cache\n+\t\t$cache = wp_cache_get( $key, $this->key_group );\n+\t\t\u002F\u002F Get thim_cache\n+\t\tif ( false === $cache && $this->can_handle_with_thim_cache() ) {\n+\t\t\t$key   = \"{$this->key_group}\u002F{$key}\";\n+\t\t\t$cache = Thim_Cache_DB::instance()->get_value( $key );\n+\t\t\t\u002F*if ( is_string( $cache ) ) {\n+\t\t\t\t$cache = wp_unslash( $cache );\n+\t\t\t}*\u002F\n+\t\t}\n+\n+\t\treturn $cache;\n+\t}\n+\n+\t\u002F**\n+\t * Set value for first load page on one process\n+\t * Apply for query call same many times.\n+\t *\n+\t * @param string $type\n+\t * @param string $key\n+\t * @param $val mixed\n+\t *\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t * @sicne 4.1.4.1\n+\t * @return false|mixed|string\n+\t *\u002F\n+\tpublic static function cache_load_first( string $type = 'get', string $key = '', $val = '' ) {\n+\t\tstatic $first_set_value = array();\n+\n+\t\tif ( 'get' === $type ) {\n+\t\t\tif ( ! array_key_exists( $key, $first_set_value ) ) {\n+\t\t\t\treturn false;\n+\t\t\t} else {\n+\t\t\t\treturn $first_set_value[ $key ];\n+\t\t\t}\n+\t\t} elseif ( 'set' === $type ) {\n+\t\t\t$first_set_value[ $key ] = $val;\n+\n+\t\t\treturn $first_set_value[ $key ];\n+\t\t} elseif ( 'clear' === $type ) {\n+\t\t\tunset( $first_set_value[ $key ] );\n+\t\t}\n+\n+\t\treturn $first_set_value;\n+\t}\n+\n+\t\u002F**\n+\t * Clear cache by key\n+\t *\n+\t * @param $key\n+\t *\u002F\n+\tpublic function clear( $key ) {\n+\t\ttry {\n+\t\t\tif ( empty( $key ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\twp_cache_delete( $key, $this->key_group );\n+\t\t\tif ( $this->can_handle_with_thim_cache() ) {\n+\t\t\t\t$key = \"{$this->key_group}\u002F{$key}\";\n+\t\t\t\tThim_Cache_DB::instance()->remove_cache( $key );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Store list keys cache to a group.\n+\t *\n+\t * @param string $key_group\n+\t * @param string $key_cache_new\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save_cache_keys( string $key_group, string $key_cache_new ) {\n+\t\ttry {\n+\t\t\t$keys = $this->get_cache( $key_group );\n+\t\t\tif ( false === $keys ) {\n+\t\t\t\t$keys_cache = array();\n+\t\t\t} else {\n+\t\t\t\t$keys_cache = LP_Helper::json_decode( $keys, true );\n+\t\t\t}\n+\n+\t\t\t$keys_cache[] = $key_cache_new;\n+\t\t\t$this->set_cache( $key_group, json_encode( $keys_cache ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Clear cache on group store list keys.\n+\t *\n+\t * @param string $key_group\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function clear_cache_on_group( string $key_group ) {\n+\t\ttry {\n+\t\t\t$keys_cache_of_group_str = $this->get_cache( $key_group );\n+\t\t\tif ( false === $keys_cache_of_group_str ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t$keys_cache_of_group = LP_Helper::json_decode( $keys_cache_of_group_str, true );\n+\t\t\tif ( ! empty( $keys_cache_of_group ) ) {\n+\t\t\t\tforeach ( $keys_cache_of_group as $key ) {\n+\t\t\t\t\t\u002F\u002F Clear cache by key\n+\t\t\t\t\t$this->clear( $key );\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F Clear cache store list keys\n+\t\t\t\t$this->clear( $key_group );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check can handle with thim cache\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t * @return bool\n+\t *\u002F\n+\tpublic function can_handle_with_thim_cache(): bool {\n+\t\treturn $this->has_thim_cache && LP_Settings::is_created_tb_thim_cache();\n+\t}\n+\n+\t\u002F**\n+\t * Clear all cache\n+\t *\n+\t * @since 4.0.8\n+\t * @version 1.0.1\n+\t * @return void\n+\t *\u002F\n+\tpublic function clear_all() {\n+\t\ttry {\n+\t\t\twp_cache_flush();\n+\t\t\tThim_Cache_DB::instance()->remove_all_cache();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-course-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-course-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-course-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-course-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.0.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Course_Cache extends LP_Cache {\r\n-\tprotected static $instance;\r\n-\tprotected $key_group_child                          = 'course';\r\n-\tprotected $key_total_students_enrolled              = 'total-students-enrolled';\r\n-\tprotected $key_total_students_enrolled_or_purchased = 'total-students-enrolled-or-purchased';\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct( $has_thim_cache = false ) {\r\n-\t\tparent::__construct( $has_thim_cache );\r\n-\t}\r\n-\r\n-\tpublic function set_total_students_enrolled( $course_id, $total ) {\r\n-\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\r\n-\t\t$this->set_cache( $key, $total );\r\n-\t}\r\n-\r\n-\tpublic function get_total_students_enrolled( $course_id ) {\r\n-\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\r\n-\t\treturn $this->get_cache( $key );\r\n-\t}\r\n-\r\n-\tpublic function clean_total_students_enrolled( $course_id ) {\r\n-\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\r\n-\t\t$this->clear( $key );\r\n-\t}\r\n-\r\n-\tpublic function set_total_students_enrolled_or_purchased( $course_id, $total ) {\r\n-\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\r\n-\t\t$this->set_cache( $key, $total );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key, $total );\r\n-\t}\r\n-\r\n-\tpublic function get_total_students_enrolled_or_purchased( $course_id ) {\r\n-\t\t$key   = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\r\n-\t\t$total = LP_Cache::cache_load_first( 'get', $key );\r\n-\t\tif ( false !== $total ) {\r\n-\t\t\treturn $total;\r\n-\t\t}\r\n-\r\n-\t\t$total = $this->get_cache( $key );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key, $total );\r\n-\r\n-\t\treturn $total;\r\n-\t}\r\n-\r\n-\tpublic function clean_total_students_enrolled_or_purchased( $course_id ) {\r\n-\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\r\n-\t\t$this->clear( $key );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.0.9\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Course_Cache extends LP_Cache {\n+\tprotected static $instance;\n+\tprotected $key_group_child                          = 'course';\n+\tprotected $key_total_students_enrolled              = 'total-students-enrolled';\n+\tprotected $key_total_students_enrolled_or_purchased = 'total-students-enrolled-or-purchased';\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic function __construct( $has_thim_cache = false ) {\n+\t\tparent::__construct( $has_thim_cache );\n+\t}\n+\n+\tpublic function set_total_students_enrolled( $course_id, $total ) {\n+\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\n+\t\t$this->set_cache( $key, $total );\n+\t}\n+\n+\tpublic function get_total_students_enrolled( $course_id ) {\n+\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\n+\t\treturn $this->get_cache( $key );\n+\t}\n+\n+\tpublic function clean_total_students_enrolled( $course_id ) {\n+\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled}\";\n+\t\t$this->clear( $key );\n+\t}\n+\n+\tpublic function set_total_students_enrolled_or_purchased( $course_id, $total ) {\n+\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\n+\t\t$this->set_cache( $key, $total );\n+\t\tLP_Cache::cache_load_first( 'set', $key, $total );\n+\t}\n+\n+\tpublic function get_total_students_enrolled_or_purchased( $course_id ) {\n+\t\t$key   = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\n+\t\t$total = LP_Cache::cache_load_first( 'get', $key );\n+\t\tif ( false !== $total ) {\n+\t\t\treturn $total;\n+\t\t}\n+\n+\t\t$total = $this->get_cache( $key );\n+\t\tLP_Cache::cache_load_first( 'set', $key, $total );\n+\n+\t\treturn $total;\n+\t}\n+\n+\tpublic function clean_total_students_enrolled_or_purchased( $course_id ) {\n+\t\t$key = \"{$course_id}\u002F{$this->key_total_students_enrolled_or_purchased}\";\n+\t\t$this->clear( $key );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-courses-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-courses-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-courses-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-courses-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,83 +1,83 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Courses_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.1.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Courses_Cache extends LP_Cache {\r\n-\t\u002F**\r\n-\t * @var LP_Courses_Cache\r\n-\t *\u002F\r\n-\tprotected static $instance;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $key_group_child = 'courses';\r\n-\t\u002F**\r\n-\t * @var string Save list keys cached to clear\r\n-\t *\u002F\r\n-\tpublic static $keys              = 'keys';\r\n-\tconst KEYS_QUERY_COURSES         = 'keys\u002Fquery_courses';\r\n-\tconst KEYS_QUERY_COURSES_APP     = 'keys\u002Fquery_courses\u002Fapp';\r\n-\tconst KEYS_QUERY_TOTAL_COURSES   = 'keys\u002Fquery_courses\u002Ftotal';\r\n-\tconst KEYS_COUNT_COURSES_FREE    = 'keys\u002Fcount_courses_free';\r\n-\tconst KEYS_COUNT_STUDENT_COURSES = 'keys\u002Fcount_student_courses';\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct( $has_thim_cache = false ) {\r\n-\t\tparent::__construct( $has_thim_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Store list keys cache of query count courses free\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save_cache_keys_count_courses_free( string $key_cache ) {\r\n-\t\t$this->save_cache_keys( self::KEYS_COUNT_COURSES_FREE, $key_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Store list keys cache of query count student of courses\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save_cache_keys_count_student_courses( string $key_cache ) {\r\n-\t\t$this->save_cache_keys( self::KEYS_COUNT_STUDENT_COURSES, $key_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Store list keys cache query courses\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save_cache_keys_query_courses( string $key_cache ) {\r\n-\t\t$this->save_cache_keys( self::KEYS_QUERY_COURSES, $key_cache );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Courses_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.1.5\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Courses_Cache extends LP_Cache {\n+\t\u002F**\n+\t * @var LP_Courses_Cache\n+\t *\u002F\n+\tprotected static $instance;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $key_group_child = 'courses';\n+\t\u002F**\n+\t * @var string Save list keys cached to clear\n+\t *\u002F\n+\tpublic static $keys              = 'keys';\n+\tconst KEYS_QUERY_COURSES         = 'keys\u002Fquery_courses';\n+\tconst KEYS_QUERY_COURSES_APP     = 'keys\u002Fquery_courses\u002Fapp';\n+\tconst KEYS_QUERY_TOTAL_COURSES   = 'keys\u002Fquery_courses\u002Ftotal';\n+\tconst KEYS_COUNT_COURSES_FREE    = 'keys\u002Fcount_courses_free';\n+\tconst KEYS_COUNT_STUDENT_COURSES = 'keys\u002Fcount_student_courses';\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic function __construct( $has_thim_cache = false ) {\n+\t\tparent::__construct( $has_thim_cache );\n+\t}\n+\n+\t\u002F**\n+\t * Store list keys cache of query count courses free\n+\t *\n+\t * @param string $key_cache\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save_cache_keys_count_courses_free( string $key_cache ) {\n+\t\t$this->save_cache_keys( self::KEYS_COUNT_COURSES_FREE, $key_cache );\n+\t}\n+\n+\t\u002F**\n+\t * Store list keys cache of query count student of courses\n+\t *\n+\t * @param string $key_cache\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save_cache_keys_count_student_courses( string $key_cache ) {\n+\t\t$this->save_cache_keys( self::KEYS_COUNT_STUDENT_COURSES, $key_cache );\n+\t}\n+\n+\t\u002F**\n+\t * Store list keys cache query courses\n+\t *\n+\t * @param string $key_cache\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save_cache_keys_query_courses( string $key_cache ) {\n+\t\t$this->save_cache_keys( self::KEYS_QUERY_COURSES, $key_cache );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-question-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-question-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-question-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-question-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.2.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Question_Cache extends LP_Cache {\r\n-\t\u002F**\r\n-\t * @var null|LP_Question_Cache\r\n-\t *\u002F\r\n-\tprotected static $instance;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $key_group_child = 'question';\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Quiz_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.2.0\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Question_Cache extends LP_Cache {\n+\t\u002F**\n+\t * @var null|LP_Question_Cache\n+\t *\u002F\n+\tprotected static $instance;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $key_group_child = 'question';\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-quiz-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-quiz-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-quiz-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-quiz-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.0.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Quiz_Cache extends LP_Cache {\r\n-\tprotected static $instance;\r\n-\tprotected $key_group_child = 'quiz';\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Quiz_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.0.9\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Quiz_Cache extends LP_Cache {\n+\tprotected static $instance;\n+\tprotected $key_group_child = 'quiz';\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-session-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-session-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-session-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-session-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.0.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Session_Cache extends LP_Cache {\r\n-\tprotected static $instance;\r\n-\tprotected $key_group_child = 'session';\r\n-\r\n-\t\u002F**\r\n-\t * Get instance\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Quiz_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.0.9\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Session_Cache extends LP_Cache {\n+\tprotected static $instance;\n+\tprotected $key_group_child = 'session';\n+\n+\t\u002F**\n+\t * Get instance\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-settings-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-settings-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-settings-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-settings-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.2.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Settings_Cache extends LP_Cache {\r\n-\t\u002F**\r\n-\t * @var string key group\r\n-\t *\u002F\r\n-\tprotected $key_group_child = 'settings';\r\n-\t\u002F**\r\n-\t * @var string key cache\r\n-\t *\u002F\r\n-\tpublic $key_settings = 'lp_settings';\r\n-\r\n-\tpublic function __construct( $has_thim_cache = false ) {\r\n-\t\tparent::__construct( $has_thim_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set cache lp settings.\r\n-\t *\r\n-\t * @param string $value\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function set_lp_settings( string $value = '' ) {\r\n-\t\t$key = \"$this->key_settings\";\r\n-\t\t$this->set_cache( $key, $value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get cache lp settings.\r\n-\t *\r\n-\t * @return array|false|mixed|string\r\n-\t *\u002F\r\n-\tpublic function get_lp_settings() {\r\n-\t\t$key = $this->key_settings;\r\n-\t\treturn $this->get_cache( $key );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear cache lp settings.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clean_lp_settings() {\r\n-\t\t$key = $this->key_settings;\r\n-\t\t$this->clear( $key );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Settings_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.2.2\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Settings_Cache extends LP_Cache {\n+\t\u002F**\n+\t * @var string key group\n+\t *\u002F\n+\tprotected $key_group_child = 'settings';\n+\t\u002F**\n+\t * @var string key cache\n+\t *\u002F\n+\tpublic $key_settings = 'lp_settings';\n+\n+\tpublic function __construct( $has_thim_cache = false ) {\n+\t\tparent::__construct( $has_thim_cache );\n+\t}\n+\n+\t\u002F**\n+\t * Set cache lp settings.\n+\t *\n+\t * @param string $value\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function set_lp_settings( string $value = '' ) {\n+\t\t$key = \"$this->key_settings\";\n+\t\t$this->set_cache( $key, $value );\n+\t}\n+\n+\t\u002F**\n+\t * Get cache lp settings.\n+\t *\n+\t * @return array|false|mixed|string\n+\t *\u002F\n+\tpublic function get_lp_settings() {\n+\t\t$key = $this->key_settings;\n+\t\treturn $this->get_cache( $key );\n+\t}\n+\n+\t\u002F**\n+\t * Clear cache lp settings.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function clean_lp_settings() {\n+\t\t$key = $this->key_settings;\n+\t\t$this->clear( $key );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-user-items-cache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-user-items-cache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache\u002Fclass-lp-user-items-cache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache\u002Fclass-lp-user-items-cache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Cache\r\n- *\r\n- * @author tungnx\r\n- * @since 4.0.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_User_Items_Cache extends LP_Cache {\r\n-\tprotected $key_group_child = 'user-items';\r\n-\r\n-\t\u002F**\r\n-\t * @param $has_thim_cache bool\r\n-\t *\u002F\r\n-\tpublic function __construct( $has_thim_cache = false ) {\r\n-\t\tparent::__construct( $has_thim_cache );\r\n-\t}\r\n-\r\n-\tpublic function set_user_item( $keys = [], string $value = '' ) {\r\n-\t\t$key = implode( '\u002F', $keys );\r\n-\t\t$this->set_cache( $key, $value );\r\n-\t}\r\n-\r\n-\tpublic function get_user_item( $keys = [] ) {\r\n-\t\t$key = implode( '\u002F', $keys );\r\n-\t\t$rs  = LP_Cache::cache_load_first( 'get', $key );\r\n-\t\tif ( false !== $rs ) {\r\n-\t\t\treturn $rs;\r\n-\t\t}\r\n-\r\n-\t\t$rs = $this->get_cache( $key );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key, $rs );\r\n-\r\n-\t\treturn $rs;\r\n-\t}\r\n-\r\n-\tpublic function clean_user_item( $keys = [] ) {\r\n-\t\t$key = implode( '\u002F', $keys );\r\n-\t\t$this->clear( $key );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * For cache clear all user items has course_id\r\n-\t *\r\n-\t * @param $course_id int\r\n-\t *\r\n-\t * @return bool|int|mysqli_result|resource|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function clean_user_items_by_course( int $course_id = 0 ) {\r\n-\t\t$thim_cache_db = Thim_Cache_DB::instance();\r\n-\t\t$query         = $thim_cache_db->wpdb->prepare(\r\n-\t\t\t\"DELETE FROM {$thim_cache_db->table_name}\r\n-\t\t\t\tWHERE key_cache REGEXP %s\",\r\n-\t\t\t\"learn_press\u002Fuser-items\u002F[0-9]*\u002F{$course_id}\u002F\" . LP_COURSE_CPT\r\n-\t\t);\r\n-\r\n-\t\t$rs = $thim_cache_db->wpdb->query( $query );\r\n-\r\n-\t\tif ( $thim_cache_db->wpdb->last_error ) {\r\n-\t\t\tthrow new Exception( $thim_cache_db->wpdb->last_error );\r\n-\t\t}\r\n-\r\n-\t\treturn $rs;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_Cache\n+ *\n+ * @author tungnx\n+ * @since 4.0.9\n+ * @version 1.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_User_Items_Cache extends LP_Cache {\n+\tprotected $key_group_child = 'user-items';\n+\n+\t\u002F**\n+\t * @param $has_thim_cache bool\n+\t *\u002F\n+\tpublic function __construct( $has_thim_cache = false ) {\n+\t\tparent::__construct( $has_thim_cache );\n+\t}\n+\n+\tpublic function set_user_item( $keys = [], string $value = '' ) {\n+\t\t$key = implode( '\u002F', $keys );\n+\t\t$this->set_cache( $key, $value );\n+\t}\n+\n+\tpublic function get_user_item( $keys = [] ) {\n+\t\t$key = implode( '\u002F', $keys );\n+\t\t$rs  = LP_Cache::cache_load_first( 'get', $key );\n+\t\tif ( false !== $rs ) {\n+\t\t\treturn $rs;\n+\t\t}\n+\n+\t\t$rs = $this->get_cache( $key );\n+\t\tLP_Cache::cache_load_first( 'set', $key, $rs );\n+\n+\t\treturn $rs;\n+\t}\n+\n+\tpublic function clean_user_item( $keys = [] ) {\n+\t\t$key = implode( '\u002F', $keys );\n+\t\t$this->clear( $key );\n+\t}\n+\n+\t\u002F**\n+\t * For cache clear all user items has course_id\n+\t *\n+\t * @param $course_id int\n+\t *\n+\t * @return bool|int|mysqli_result|resource|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function clean_user_items_by_course( int $course_id = 0 ) {\n+\t\t$thim_cache_db = Thim_Cache_DB::instance();\n+\t\t$query         = $thim_cache_db->wpdb->prepare(\n+\t\t\t\"DELETE FROM {$thim_cache_db->table_name}\n+\t\t\t\tWHERE key_cache REGEXP %s\",\n+\t\t\t\"learn_press\u002Fuser-items\u002F[0-9]*\u002F{$course_id}\u002F\" . LP_COURSE_CPT\n+\t\t);\n+\n+\t\t$rs = $thim_cache_db->wpdb->query( $query );\n+\n+\t\tif ( $thim_cache_db->wpdb->last_error ) {\n+\t\t\tthrow new Exception( $thim_cache_db->wpdb->last_error );\n+\t\t}\n+\n+\t\treturn $rs;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcache.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcache.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,600 +1,600 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Object_Cache\r\n- *\u002F\r\n-\r\n-class LP_Object_Cache {\r\n-\r\n-\t\u002F**\r\n-\t * Holds the cached objects.\r\n-\t *\r\n-\t * @since 2.0.0\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprivate $cache = array();\r\n-\r\n-\t\u002F**\r\n-\t * The amount of times the cache data was already stored in the cache.\r\n-\t *\r\n-\t * @since 2.5.0\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $cache_hits = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Amount of times the cache did not have the request in cache.\r\n-\t *\r\n-\t * @since 2.0.0\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $cache_misses = 0;\r\n-\r\n-\t\u002F**\r\n-\t * List of global cache groups.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $global_groups = array();\r\n-\r\n-\t\u002F**\r\n-\t * The blog prefix to prepend to keys in non-global groups.\r\n-\t *\r\n-\t * @since 3.5.0\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprivate $blog_prefix;\r\n-\r\n-\t\u002F**\r\n-\t * Holds the value of is_multisite().\r\n-\t *\r\n-\t * @since 3.5.0\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprivate $multisite;\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_use_core = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Object_Cache\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Object_Cache\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\tpublic static function init() {\r\n-\t\t\u002F\u002F add_action( 'shutdown', array( __CLASS__, 'wp_cache_flush' ), 9999 );\r\n-\t}\r\n-\r\n-\tpublic static function wp_cache_flush() {\r\n-\r\n-\t}\r\n-\r\n-\tpublic static function get_group( $group ) {\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\tif ( false === strpos( $group, 'learn-press\u002F' ) ) {\r\n-\t\t\t\treturn \"learn-press\u002F{$group}\";\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $group;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Makes private properties readable for backward compatibility.\r\n-\t *\r\n-\t * @param string $name  Property to get.\r\n-\t *\r\n-\t * @return mixed Property.\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function __get( $name ) {\r\n-\t\treturn $this->$name;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Makes private properties settable for backward compatibility.\r\n-\t *\r\n-\t * @param string $name  Property to set.\r\n-\t * @param mixed $value  Property value.\r\n-\t *\r\n-\t * @return mixed Newly-set property.\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function __set( $name, $value ) {\r\n-\t\treturn $this->$name = $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Makes private properties checkable for backward compatibility.\r\n-\t *\r\n-\t * @param string $name  Property to check if set.\r\n-\t *\r\n-\t * @return bool Whether the property is set.\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function __isset( $name ) {\r\n-\t\treturn isset( $this->$name );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Makes private properties un-settable for backward compatibility.\r\n-\t *\r\n-\t * @param string $name  Property to unset.\r\n-\t *\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function __unset( $name ) {\r\n-\t\tunset( $this->$name );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Adds data to the cache if it doesn't already exist.\r\n-\t *\r\n-\t * @param int|string $key  What to call the contents in the cache.\r\n-\t * @param mixed $data  The contents to store in the cache.\r\n-\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\r\n-\t * @param int $expire  Optional. When to expire the cache contents. Default 0 (no expiration).\r\n-\t *\r\n-\t * @return bool False if cache key and group already exist, true on success\r\n-\t * @uses  WP_Object_Cache::set()     Sets the data after the checking the cache\r\n-\t *                                    contents existence.\r\n-\t *\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t * @uses  WP_Object_Cache::_exists() Checks to see if the cache already has data.\r\n-\t *\u002F\r\n-\tpublic static function add( $key, $data, $group = 'default', $expire = 0 ) {\r\n-\r\n-\t\t$group = self::get_group( $group );\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\treturn wp_cache_add( $key, $data, $group, $expire );\r\n-\t\t}\r\n-\r\n-\t\tif ( wp_suspend_cache_addition() ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\t$id = $key;\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$id = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::_exists( $id, $group ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn self::set( $key, $data, $group, (int) $expire );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sets the list of global cache groups.\r\n-\t *\r\n-\t * @param array $groups  List of groups that are global.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function add_global_groups( $groups ) {\r\n-\t\t$groups = (array) $groups;\r\n-\t\t$self   = self::instance();\r\n-\r\n-\t\t$groups              = array_fill_keys( $groups, true );\r\n-\t\t$self->global_groups = array_merge( $self->global_groups, $groups );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Decrements numeric cache item's value.\r\n-\t *\r\n-\t * @param int|string $key  The cache key to decrement.\r\n-\t * @param int $offset  Optional. The amount by which to decrement the item's value. Default 1.\r\n-\t * @param string $group  Optional. The group the key is in. Default 'default'.\r\n-\t *\r\n-\t * @return false|int False on failure, the item's new value on success.\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function decr( $key, $offset = 1, $group = 'default' ) {\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$key = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! self::_exists( $key, $group ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_numeric( $self->cache[ $group ][ $key ] ) ) {\r\n-\t\t\t$self->cache[ $group ][ $key ] = 0;\r\n-\t\t}\r\n-\r\n-\t\t$offset = (int) $offset;\r\n-\r\n-\t\t$self->cache[ $group ][ $key ] -= $offset;\r\n-\r\n-\t\tif ( $self->cache[ $group ][ $key ] \u003C 0 ) {\r\n-\t\t\t$self->cache[ $group ][ $key ] = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $self->cache[ $group ][ $key ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Removes the contents of the cache key in the group.\r\n-\t *\r\n-\t * If the cache key does not exist in the group, then nothing will happen.\r\n-\t *\r\n-\t * @param int|string $key  What the contents in the cache are called.\r\n-\t * @param string $group  Optional. Where the cache contents are grouped. Default 'default'.\r\n-\t * @param bool $deprecated  Optional. Unused. Default false.\r\n-\t *\r\n-\t * @return bool False if the contents weren't deleted and true on success.\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function delete( $key, $group = 'default', $deprecated = false ) {\r\n-\r\n-\t\t$group = self::get_group( $group );\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\treturn wp_cache_delete( $key, $group );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$key = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! self::_exists( $key, $group ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tunset( $self->cache[ $group ][ $key ] );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clears the object cache of all data.\r\n-\t *\r\n-\t * @return true Always returns true.\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function flush() {\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\t\u002F\u002F return wp_cache_flush();\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\t$self->cache = array();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retrieves the cache contents, if it exists.\r\n-\t *\r\n-\t * The contents will be first attempted to be retrieved by searching by the\r\n-\t * key in the cache group. If the cache is hit (success) then the contents\r\n-\t * are returned.\r\n-\t *\r\n-\t * On failure, the number of cache misses will be incremented.\r\n-\t *\r\n-\t * @param int|string $key  What the contents in the cache are called.\r\n-\t * @param string $group  Optional. Where the cache contents are grouped. Default 'default'.\r\n-\t * @param string $force  Optional. Unused. Whether to force a refetch rather than relying on the local\r\n-\t *                            cache. Default false.\r\n-\t * @param bool $found  Optional. Whether the key was found in the cache (passed by reference).\r\n-\t *                            Disambiguates a return of false, a storable value. Default null.\r\n-\t *\r\n-\t * @return false|mixed False on failure to retrieve contents or the cache contents on success.\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function get( $key, $group = 'default', $force = false, &$found = null ) {\r\n-\t\t$group = self::get_group( $group );\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\treturn wp_cache_get( $key, $group, $force, $found );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$key = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::_exists( $key, $group ) ) {\r\n-\t\t\t$found             = true;\r\n-\t\t\t$self->cache_hits += 1;\r\n-\t\t\tif ( is_object( $self->cache[ $group ][ $key ] ) ) {\r\n-\t\t\t\treturn clone $self->cache[ $group ][ $key ];\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $self->cache[ $group ][ $key ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$found               = false;\r\n-\t\t$self->cache_misses += 1;\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Increments numeric cache item's value.\r\n-\t *\r\n-\t * @param int|string $key  The cache key to increment\r\n-\t * @param int $offset  Optional. The amount by which to increment the item's value. Default 1.\r\n-\t * @param string $group  Optional. The group the key is in. Default 'default'.\r\n-\t *\r\n-\t * @return false|int False on failure, the item's new value on success.\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function incr( $key, $offset = 1, $group = 'default' ) {\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$key = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! self::_exists( $key, $group ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_numeric( $self->cache[ $group ][ $key ] ) ) {\r\n-\t\t\t$self->cache[ $group ][ $key ] = 0;\r\n-\t\t}\r\n-\r\n-\t\t$offset = (int) $offset;\r\n-\r\n-\t\t$self->cache[ $group ][ $key ] += $offset;\r\n-\r\n-\t\tif ( $self->cache[ $group ][ $key ] \u003C 0 ) {\r\n-\t\t\t$self->cache[ $group ][ $key ] = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $self->cache[ $group ][ $key ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Replaces the contents in the cache, if contents already exist.\r\n-\t *\r\n-\t * @param int|string $key  What to call the contents in the cache.\r\n-\t * @param mixed $data  The contents to store in the cache.\r\n-\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\r\n-\t * @param int $expire  Optional. When to expire the cache contents. Default 0 (no expiration).\r\n-\t *\r\n-\t * @return bool False if not exists, true if contents were replaced.\r\n-\t * @see   WP_Object_Cache::set()\r\n-\t *\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function replace( $key, $data, $group = 'default', $expire = 0 ) {\r\n-\r\n-\t\t$group = self::get_group( $group );\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\treturn wp_cache_replace( $key, $data, $group, $expire );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\t$id = $key;\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$id = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! self::_exists( $id, $group ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn self::set( $key, $data, $group, (int) $expire );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Resets cache keys.\r\n-\t *\r\n-\t * @since      3.0.0\r\n-\t *\r\n-\t * @deprecated 3.5.0 Use switch_to_blog()\r\n-\t * @see        switch_to_blog()\r\n-\t *\u002F\r\n-\tpublic static function reset() {\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\t_deprecated_function( __FUNCTION__, '3.5.0', 'switch_to_blog()' );\r\n-\r\n-\t\t\u002F\u002F Clear out non-global caches since the blog ID has changed.\r\n-\t\tforeach ( array_keys( $self->cache ) as $group ) {\r\n-\t\t\tif ( ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t\tunset( $self->cache[ $group ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sets the data contents into the cache.\r\n-\t *\r\n-\t * The cache contents is grouped by the $group parameter followed by the\r\n-\t * $key. This allows for duplicate ids in unique groups. Therefore, naming of\r\n-\t * the group should be used with care and should follow normal function\r\n-\t * naming guidelines outside of core WordPress usage.\r\n-\t *\r\n-\t * The $expire parameter is not used, because the cache will automatically\r\n-\t * expire for each time a page is accessed and PHP finishes. The method is\r\n-\t * more for cache plugins which use files.\r\n-\t *\r\n-\t * @param int|string $key  What to call the contents in the cache.\r\n-\t * @param mixed $data  The contents to store in the cache.\r\n-\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\r\n-\t * @param int $expire  Not Used.\r\n-\t *\r\n-\t * @return true Always returns true.\r\n-\t * @since 2.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function set( $key, $data, $group = 'default', $expire = 0 ) {\r\n-\t\t$group = self::get_group( $group );\r\n-\r\n-\t\tif ( self::$_use_core ) {\r\n-\t\t\treturn wp_cache_set( $key, $data, $group, $expire );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $group ) ) {\r\n-\t\t\t$group = 'default';\r\n-\t\t}\r\n-\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\r\n-\t\t\t$key = $self->blog_prefix . $key;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_object( $data ) ) {\r\n-\t\t\t$data = clone $data;\r\n-\t\t}\r\n-\r\n-\t\t$self->cache[ $group ][ $key ] = $data;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Echoes the stats of the caching.\r\n-\t *\r\n-\t * Gives the cache hits, and cache misses. Also prints every cached group,\r\n-\t * key and the data.\r\n-\t *\r\n-\t * @since 2.0.0\r\n-\t *\u002F\r\n-\t\u002F*public static function stats() {\r\n-\t\t$self = self::instance();\r\n-\t\techo '\u003Cp>';\r\n-\t\techo \"\u003Cstrong>Cache Hits:\u003C\u002Fstrong> {$self->cache_hits}\u003Cbr \u002F>\";\r\n-\t\techo \"\u003Cstrong>Cache Misses:\u003C\u002Fstrong> {$self->cache_misses}\u003Cbr \u002F>\";\r\n-\t\techo '\u003C\u002Fp>';\r\n-\t\techo '\u003Cul>';\r\n-\t\tforeach ( $self->cache as $group => $cache ) {\r\n-\t\t\techo \"\u003Cli>\u003Cstrong>Group:\u003C\u002Fstrong> $group - ( \" . number_format( strlen( serialize( $cache ) ) \u002F KB_IN_BYTES,\r\n-\t\t\t\t\t2 ) . 'k )\u003C\u002Fli>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Ful>';\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Switches the internal blog ID.\r\n-\t *\r\n-\t * This changes the blog ID used to create keys in blog specific groups.\r\n-\t *\r\n-\t * @param int $blog_id  Blog ID.\r\n-\t *\r\n-\t * @since 3.5.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function switch_to_blog( $blog_id ) {\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\t$blog_id           = (int) $blog_id;\r\n-\t\t$self->blog_prefix = $self->multisite ? $blog_id . ':' : '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Serves as a utility function to determine whether a key exists in the cache.\r\n-\t *\r\n-\t * @param int|string $key  Cache key to check for existence.\r\n-\t * @param string $group  Cache group for the key existence check.\r\n-\t *\r\n-\t * @return bool Whether the key exists in the cache for the given group.\r\n-\t * @since 3.4.0\r\n-\t *\r\n-\t *\u002F\r\n-\tprotected static function _exists( $key, $group ) {\r\n-\t\t$self = self::instance();\r\n-\r\n-\t\treturn isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists(\r\n-\t\t\t$key,\r\n-\t\t\t$self->cache[ $group ]\r\n-\t\t) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sets up object properties; PHP 5 style constructor.\r\n-\t *\r\n-\t * @since 2.0.8\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->multisite   = is_multisite();\r\n-\t\t$this->blog_prefix = $this->multisite ? get_current_blog_id() . ':' : '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @todo This should be moved to the PHP4 style constructor, PHP5\r\n-\t\t * already calls __destruct()\r\n-\t\t *\u002F\r\n-\t\tregister_shutdown_function( array( $this, '__destruct' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Saves the object cache before object is completely destroyed.\r\n-\t *\r\n-\t * Called upon object destruction, which should be when PHP ends.\r\n-\t *\r\n-\t * @return true Always returns true.\r\n-\t * @since 2.0.8\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function __destruct() {\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n-\r\n-LP_Object_Cache::init();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Object_Cache\n+ *\u002F\n+\n+class LP_Object_Cache {\n+\n+\t\u002F**\n+\t * Holds the cached objects.\n+\t *\n+\t * @since 2.0.0\n+\t * @var array\n+\t *\u002F\n+\tprivate $cache = array();\n+\n+\t\u002F**\n+\t * The amount of times the cache data was already stored in the cache.\n+\t *\n+\t * @since 2.5.0\n+\t * @var int\n+\t *\u002F\n+\tpublic $cache_hits = 0;\n+\n+\t\u002F**\n+\t * Amount of times the cache did not have the request in cache.\n+\t *\n+\t * @since 2.0.0\n+\t * @var int\n+\t *\u002F\n+\tpublic $cache_misses = 0;\n+\n+\t\u002F**\n+\t * List of global cache groups.\n+\t *\n+\t * @since 3.0.0\n+\t * @var array\n+\t *\u002F\n+\tprotected $global_groups = array();\n+\n+\t\u002F**\n+\t * The blog prefix to prepend to keys in non-global groups.\n+\t *\n+\t * @since 3.5.0\n+\t * @var int\n+\t *\u002F\n+\tprivate $blog_prefix;\n+\n+\t\u002F**\n+\t * Holds the value of is_multisite().\n+\t *\n+\t * @since 3.5.0\n+\t * @var bool\n+\t *\u002F\n+\tprivate $multisite;\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_use_core = false;\n+\n+\t\u002F**\n+\t * @var LP_Object_Cache\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * @return LP_Object_Cache\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\tpublic static function init() {\n+\t\t\u002F\u002F add_action( 'shutdown', array( __CLASS__, 'wp_cache_flush' ), 9999 );\n+\t}\n+\n+\tpublic static function wp_cache_flush() {\n+\n+\t}\n+\n+\tpublic static function get_group( $group ) {\n+\t\tif ( self::$_use_core ) {\n+\t\t\tif ( false === strpos( $group, 'learn-press\u002F' ) ) {\n+\t\t\t\treturn \"learn-press\u002F{$group}\";\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $group;\n+\t}\n+\n+\t\u002F**\n+\t * Makes private properties readable for backward compatibility.\n+\t *\n+\t * @param string $name  Property to get.\n+\t *\n+\t * @return mixed Property.\n+\t * @since 4.0.0\n+\t *\n+\t *\u002F\n+\tpublic function __get( $name ) {\n+\t\treturn $this->$name;\n+\t}\n+\n+\t\u002F**\n+\t * Makes private properties settable for backward compatibility.\n+\t *\n+\t * @param string $name  Property to set.\n+\t * @param mixed $value  Property value.\n+\t *\n+\t * @return mixed Newly-set property.\n+\t * @since 4.0.0\n+\t *\n+\t *\u002F\n+\tpublic function __set( $name, $value ) {\n+\t\treturn $this->$name = $value;\n+\t}\n+\n+\t\u002F**\n+\t * Makes private properties checkable for backward compatibility.\n+\t *\n+\t * @param string $name  Property to check if set.\n+\t *\n+\t * @return bool Whether the property is set.\n+\t * @since 4.0.0\n+\t *\n+\t *\u002F\n+\tpublic function __isset( $name ) {\n+\t\treturn isset( $this->$name );\n+\t}\n+\n+\t\u002F**\n+\t * Makes private properties un-settable for backward compatibility.\n+\t *\n+\t * @param string $name  Property to unset.\n+\t *\n+\t * @since 4.0.0\n+\t *\n+\t *\u002F\n+\tpublic function __unset( $name ) {\n+\t\tunset( $this->$name );\n+\t}\n+\n+\t\u002F**\n+\t * Adds data to the cache if it doesn't already exist.\n+\t *\n+\t * @param int|string $key  What to call the contents in the cache.\n+\t * @param mixed $data  The contents to store in the cache.\n+\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\n+\t * @param int $expire  Optional. When to expire the cache contents. Default 0 (no expiration).\n+\t *\n+\t * @return bool False if cache key and group already exist, true on success\n+\t * @uses  WP_Object_Cache::set()     Sets the data after the checking the cache\n+\t *                                    contents existence.\n+\t *\n+\t * @since 2.0.0\n+\t *\n+\t * @uses  WP_Object_Cache::_exists() Checks to see if the cache already has data.\n+\t *\u002F\n+\tpublic static function add( $key, $data, $group = 'default', $expire = 0 ) {\n+\n+\t\t$group = self::get_group( $group );\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\treturn wp_cache_add( $key, $data, $group, $expire );\n+\t\t}\n+\n+\t\tif ( wp_suspend_cache_addition() ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\t$id = $key;\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$id = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( self::_exists( $id, $group ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn self::set( $key, $data, $group, (int) $expire );\n+\t}\n+\n+\t\u002F**\n+\t * Sets the list of global cache groups.\n+\t *\n+\t * @param array $groups  List of groups that are global.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function add_global_groups( $groups ) {\n+\t\t$groups = (array) $groups;\n+\t\t$self   = self::instance();\n+\n+\t\t$groups              = array_fill_keys( $groups, true );\n+\t\t$self->global_groups = array_merge( $self->global_groups, $groups );\n+\t}\n+\n+\t\u002F**\n+\t * Decrements numeric cache item's value.\n+\t *\n+\t * @param int|string $key  The cache key to decrement.\n+\t * @param int $offset  Optional. The amount by which to decrement the item's value. Default 1.\n+\t * @param string $group  Optional. The group the key is in. Default 'default'.\n+\t *\n+\t * @return false|int False on failure, the item's new value on success.\n+\t * @since 3.3.0\n+\t *\n+\t *\u002F\n+\tpublic static function decr( $key, $offset = 1, $group = 'default' ) {\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$key = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( ! self::_exists( $key, $group ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! is_numeric( $self->cache[ $group ][ $key ] ) ) {\n+\t\t\t$self->cache[ $group ][ $key ] = 0;\n+\t\t}\n+\n+\t\t$offset = (int) $offset;\n+\n+\t\t$self->cache[ $group ][ $key ] -= $offset;\n+\n+\t\tif ( $self->cache[ $group ][ $key ] \u003C 0 ) {\n+\t\t\t$self->cache[ $group ][ $key ] = 0;\n+\t\t}\n+\n+\t\treturn $self->cache[ $group ][ $key ];\n+\t}\n+\n+\t\u002F**\n+\t * Removes the contents of the cache key in the group.\n+\t *\n+\t * If the cache key does not exist in the group, then nothing will happen.\n+\t *\n+\t * @param int|string $key  What the contents in the cache are called.\n+\t * @param string $group  Optional. Where the cache contents are grouped. Default 'default'.\n+\t * @param bool $deprecated  Optional. Unused. Default false.\n+\t *\n+\t * @return bool False if the contents weren't deleted and true on success.\n+\t * @since 2.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function delete( $key, $group = 'default', $deprecated = false ) {\n+\n+\t\t$group = self::get_group( $group );\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\treturn wp_cache_delete( $key, $group );\n+\t\t}\n+\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$key = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( ! self::_exists( $key, $group ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tunset( $self->cache[ $group ][ $key ] );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Clears the object cache of all data.\n+\t *\n+\t * @return true Always returns true.\n+\t * @since 2.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function flush() {\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\t\u002F\u002F return wp_cache_flush();\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\t$self->cache = array();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Retrieves the cache contents, if it exists.\n+\t *\n+\t * The contents will be first attempted to be retrieved by searching by the\n+\t * key in the cache group. If the cache is hit (success) then the contents\n+\t * are returned.\n+\t *\n+\t * On failure, the number of cache misses will be incremented.\n+\t *\n+\t * @param int|string $key  What the contents in the cache are called.\n+\t * @param string $group  Optional. Where the cache contents are grouped. Default 'default'.\n+\t * @param string $force  Optional. Unused. Whether to force a refetch rather than relying on the local\n+\t *                            cache. Default false.\n+\t * @param bool $found  Optional. Whether the key was found in the cache (passed by reference).\n+\t *                            Disambiguates a return of false, a storable value. Default null.\n+\t *\n+\t * @return false|mixed False on failure to retrieve contents or the cache contents on success.\n+\t * @since 2.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function get( $key, $group = 'default', $force = false, &$found = null ) {\n+\t\t$group = self::get_group( $group );\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\treturn wp_cache_get( $key, $group, $force, $found );\n+\t\t}\n+\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$key = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( self::_exists( $key, $group ) ) {\n+\t\t\t$found             = true;\n+\t\t\t$self->cache_hits += 1;\n+\t\t\tif ( is_object( $self->cache[ $group ][ $key ] ) ) {\n+\t\t\t\treturn clone $self->cache[ $group ][ $key ];\n+\t\t\t} else {\n+\t\t\t\treturn $self->cache[ $group ][ $key ];\n+\t\t\t}\n+\t\t}\n+\n+\t\t$found               = false;\n+\t\t$self->cache_misses += 1;\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Increments numeric cache item's value.\n+\t *\n+\t * @param int|string $key  The cache key to increment\n+\t * @param int $offset  Optional. The amount by which to increment the item's value. Default 1.\n+\t * @param string $group  Optional. The group the key is in. Default 'default'.\n+\t *\n+\t * @return false|int False on failure, the item's new value on success.\n+\t * @since 3.3.0\n+\t *\n+\t *\u002F\n+\tpublic static function incr( $key, $offset = 1, $group = 'default' ) {\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\t\t$self = self::instance();\n+\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$key = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( ! self::_exists( $key, $group ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! is_numeric( $self->cache[ $group ][ $key ] ) ) {\n+\t\t\t$self->cache[ $group ][ $key ] = 0;\n+\t\t}\n+\n+\t\t$offset = (int) $offset;\n+\n+\t\t$self->cache[ $group ][ $key ] += $offset;\n+\n+\t\tif ( $self->cache[ $group ][ $key ] \u003C 0 ) {\n+\t\t\t$self->cache[ $group ][ $key ] = 0;\n+\t\t}\n+\n+\t\treturn $self->cache[ $group ][ $key ];\n+\t}\n+\n+\t\u002F**\n+\t * Replaces the contents in the cache, if contents already exist.\n+\t *\n+\t * @param int|string $key  What to call the contents in the cache.\n+\t * @param mixed $data  The contents to store in the cache.\n+\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\n+\t * @param int $expire  Optional. When to expire the cache contents. Default 0 (no expiration).\n+\t *\n+\t * @return bool False if not exists, true if contents were replaced.\n+\t * @see   WP_Object_Cache::set()\n+\t *\n+\t * @since 2.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function replace( $key, $data, $group = 'default', $expire = 0 ) {\n+\n+\t\t$group = self::get_group( $group );\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\treturn wp_cache_replace( $key, $data, $group, $expire );\n+\t\t}\n+\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\t$id = $key;\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$id = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( ! self::_exists( $id, $group ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn self::set( $key, $data, $group, (int) $expire );\n+\t}\n+\n+\t\u002F**\n+\t * Resets cache keys.\n+\t *\n+\t * @since      3.0.0\n+\t *\n+\t * @deprecated 3.5.0 Use switch_to_blog()\n+\t * @see        switch_to_blog()\n+\t *\u002F\n+\tpublic static function reset() {\n+\n+\t\t$self = self::instance();\n+\n+\t\t_deprecated_function( __FUNCTION__, '3.5.0', 'switch_to_blog()' );\n+\n+\t\t\u002F\u002F Clear out non-global caches since the blog ID has changed.\n+\t\tforeach ( array_keys( $self->cache ) as $group ) {\n+\t\t\tif ( ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t\tunset( $self->cache[ $group ] );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Sets the data contents into the cache.\n+\t *\n+\t * The cache contents is grouped by the $group parameter followed by the\n+\t * $key. This allows for duplicate ids in unique groups. Therefore, naming of\n+\t * the group should be used with care and should follow normal function\n+\t * naming guidelines outside of core WordPress usage.\n+\t *\n+\t * The $expire parameter is not used, because the cache will automatically\n+\t * expire for each time a page is accessed and PHP finishes. The method is\n+\t * more for cache plugins which use files.\n+\t *\n+\t * @param int|string $key  What to call the contents in the cache.\n+\t * @param mixed $data  The contents to store in the cache.\n+\t * @param string $group  Optional. Where to group the cache contents. Default 'default'.\n+\t * @param int $expire  Not Used.\n+\t *\n+\t * @return true Always returns true.\n+\t * @since 2.0.0\n+\t *\n+\t *\u002F\n+\tpublic static function set( $key, $data, $group = 'default', $expire = 0 ) {\n+\t\t$group = self::get_group( $group );\n+\n+\t\tif ( self::$_use_core ) {\n+\t\t\treturn wp_cache_set( $key, $data, $group, $expire );\n+\t\t}\n+\n+\t\tif ( empty( $group ) ) {\n+\t\t\t$group = 'default';\n+\t\t}\n+\n+\t\t$self = self::instance();\n+\n+\t\tif ( $self->multisite && ! isset( $self->global_groups[ $group ] ) ) {\n+\t\t\t$key = $self->blog_prefix . $key;\n+\t\t}\n+\n+\t\tif ( is_object( $data ) ) {\n+\t\t\t$data = clone $data;\n+\t\t}\n+\n+\t\t$self->cache[ $group ][ $key ] = $data;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Echoes the stats of the caching.\n+\t *\n+\t * Gives the cache hits, and cache misses. Also prints every cached group,\n+\t * key and the data.\n+\t *\n+\t * @since 2.0.0\n+\t *\u002F\n+\t\u002F*public static function stats() {\n+\t\t$self = self::instance();\n+\t\techo '\u003Cp>';\n+\t\techo \"\u003Cstrong>Cache Hits:\u003C\u002Fstrong> {$self->cache_hits}\u003Cbr \u002F>\";\n+\t\techo \"\u003Cstrong>Cache Misses:\u003C\u002Fstrong> {$self->cache_misses}\u003Cbr \u002F>\";\n+\t\techo '\u003C\u002Fp>';\n+\t\techo '\u003Cul>';\n+\t\tforeach ( $self->cache as $group => $cache ) {\n+\t\t\techo \"\u003Cli>\u003Cstrong>Group:\u003C\u002Fstrong> $group - ( \" . number_format( strlen( serialize( $cache ) ) \u002F KB_IN_BYTES,\n+\t\t\t\t\t2 ) . 'k )\u003C\u002Fli>';\n+\t\t}\n+\t\techo '\u003C\u002Ful>';\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Switches the internal blog ID.\n+\t *\n+\t * This changes the blog ID used to create keys in blog specific groups.\n+\t *\n+\t * @param int $blog_id  Blog ID.\n+\t *\n+\t * @since 3.5.0\n+\t *\n+\t *\u002F\n+\tpublic static function switch_to_blog( $blog_id ) {\n+\t\t$self = self::instance();\n+\n+\t\t$blog_id           = (int) $blog_id;\n+\t\t$self->blog_prefix = $self->multisite ? $blog_id . ':' : '';\n+\t}\n+\n+\t\u002F**\n+\t * Serves as a utility function to determine whether a key exists in the cache.\n+\t *\n+\t * @param int|string $key  Cache key to check for existence.\n+\t * @param string $group  Cache group for the key existence check.\n+\t *\n+\t * @return bool Whether the key exists in the cache for the given group.\n+\t * @since 3.4.0\n+\t *\n+\t *\u002F\n+\tprotected static function _exists( $key, $group ) {\n+\t\t$self = self::instance();\n+\n+\t\treturn isset( $self->cache[ $group ] ) && ( isset( $self->cache[ $group ][ $key ] ) || array_key_exists(\n+\t\t\t$key,\n+\t\t\t$self->cache[ $group ]\n+\t\t) );\n+\t}\n+\n+\t\u002F**\n+\t * Sets up object properties; PHP 5 style constructor.\n+\t *\n+\t * @since 2.0.8\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->multisite   = is_multisite();\n+\t\t$this->blog_prefix = $this->multisite ? get_current_blog_id() . ':' : '';\n+\n+\t\t\u002F**\n+\t\t * @todo This should be moved to the PHP4 style constructor, PHP5\n+\t\t * already calls __destruct()\n+\t\t *\u002F\n+\t\tregister_shutdown_function( array( $this, '__destruct' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Saves the object cache before object is completely destroyed.\n+\t *\n+\t * Called upon object destruction, which should be when PHP ends.\n+\t *\n+\t * @return true Always returns true.\n+\t * @since 2.0.8\n+\t *\n+\t *\u002F\n+\tpublic function __destruct() {\n+\t\treturn true;\n+\t}\n+}\n+\n+LP_Object_Cache::init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Fclass-lp-cart-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Fclass-lp-cart-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Fclass-lp-cart-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Fclass-lp-cart-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Order_Item\r\n- *\u002F\r\n-class LP_Order_Item {\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected $_item = null;\r\n-\r\n-\tpublic function __construct( $item ) {\r\n-\t\t$this->_item = $item;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Order_Item\n+ *\u002F\n+class LP_Order_Item {\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprotected $_item = null;\n+\n+\tpublic function __construct( $item ) {\n+\t\t$this->_item = $item;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Fclass-lp-cart.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Fclass-lp-cart.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Fclass-lp-cart.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Fclass-lp-cart.php\t2026-05-03 17:15:40.000000000 +0000\n@@ -1,381 +1,386 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Cart\r\n- *\r\n- * Simple Cart object for now. Maybe need to expand later\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Cart {\r\n-\r\n-\t\u002F**\r\n-\t * Unique instance of LP_Cart\r\n-\t *\r\n-\t * @var LP_Cart object\r\n-\t *\u002F\r\n-\tprivate static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Hold the content of the cart\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_cart_content = [];\r\n-\r\n-\t\u002F**\r\n-\t * Key of cart content stored in session\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_cart_session_key = 'cart';\r\n-\r\n-\t\u002F**\r\n-\t * Cart total\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $total = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Cart subtotal\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $subtotal = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\r\n-\t * @param string $key . Added since 3.3.0\r\n-\t *\u002F\r\n-\tpublic function __construct( $key = '' ) {\r\n-\t\tif ( $key ) {\r\n-\t\t\t$this->_cart_session_key = $key;\r\n-\t\t}\r\n-\r\n-\t\tLP_Request::register( 'add-course-to-cart', array( $this, 'add_to_cart' ), 20 );\r\n-\t\tLP_Request::register( 'remove-cart-item', array( $this, 'remove_item' ), 20 );\r\n-\r\n-\t\t\u002F\u002Fadd_action( 'learn-press\u002Fadd-to-cart', array( $this, 'calculate_totals' ), 10 );\r\n-\t\t\u002F\u002Fadd_action( 'wp', array( $this, 'maybe_set_cart_cookies' ), 99 );\r\n-\t\t\u002F\u002Fadd_action( 'shutdown', array( $this, 'maybe_set_cart_cookies' ), 0 );\r\n-\t\t\u002F\u002Fadd_action( 'wp_loaded', array( $this, 'init' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add course to cart.\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t * @param int $quantity\r\n-\t * @param array $item_data\r\n-\t *\r\n-\t * @return string|false\r\n-\t *\u002F\r\n-\tpublic function add_to_cart( int $item_id = 0, int $quantity = 1, array $item_data = array() ) {\r\n-\t\ttry {\r\n-\t\t\t$item_type = get_post_type( $item_id );\r\n-\r\n-\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\r\n-\t\t\t\tthrow new Exception( 'Item type is invalid!', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t$course = CourseModel::find( $item_id, true );\r\n-\t\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\t\tthrow new Exception( __( 'Course is not exists!', 'learnpress' ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$item_data = apply_filters( 'learnpress\u002Fcart\u002Fadd-item\u002Fitem_type_' . $item_type, $item_data, $item_id, $quantity );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cart_id                         = $this->generate_cart_id( $item_id, $item_data );\r\n-\t\t\t$this->_cart_content             = $this->get_cart_from_session();\r\n-\t\t\t$this->_cart_content[ $cart_id ] = apply_filters(\r\n-\t\t\t\t'learn_press_add_cart_item',\r\n-\t\t\t\tarray_merge(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'item_id'  => $item_id,\r\n-\t\t\t\t\t\t'quantity' => $quantity,\r\n-\t\t\t\t\t\t\u002F\u002F'data'     => array(),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$item_data\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Update cart to session DB.\r\n-\t\t\t$this->update_session( $this->_cart_content );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fadd-to-cart', $item_id, $quantity, $item_data, $cart_id );\r\n-\r\n-\t\t\treturn $cart_id;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\tif ( $e->getMessage() ) {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove an item from cart\r\n-\t *\r\n-\t * @param $item_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function remove_item( $item_id ) {\r\n-\t\tif ( isset( $this->_cart_content['items'][ $item_id ] ) ) {\r\n-\r\n-\t\t\tdo_action( 'learn_press_remove_cart_item', $item_id, $this );\r\n-\r\n-\t\t\tunset( $this->_cart_content['items'][ $item_id ] );\r\n-\r\n-\t\t\tdo_action( 'learn_press_cart_item_removed', $item_id, $this );\r\n-\r\n-\t\t\t$this->update_session( $this->_cart_content );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Re-calculate cart totals and update data to session\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.2\r\n-\t *\u002F\r\n-\tpublic function calculate_totals() {\r\n-\t\t$data           = new stdClass();\r\n-\t\t$total          = 0;\r\n-\t\t$data->subtotal = $total;\r\n-\t\t$data->total    = $total;\r\n-\t\t$subtotal       = $total;\r\n-\t\t$this->total    = $total;\r\n-\t\t$this->subtotal = $total;\r\n-\t\t$items          = $this->get_items();\r\n-\r\n-\t\tif ( $items ) {\r\n-\t\t\tforeach ( $items as $cart_id => $item ) {\r\n-\t\t\t\t$item_type = get_post_type( $item['item_id'] );\r\n-\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t\t$course   = learn_press_get_course( $item['item_id'] );\r\n-\t\t\t\t\t\t$subtotal = $course->get_price() * absint( $item['quantity'] );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$subtotal = apply_filters( 'learnpress\u002Fcart\u002Fcalculate_sub_total\u002Fitem_type_' . $item_type, $subtotal, $item );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$total = $subtotal;\r\n-\r\n-\t\t\t\t$data->subtotal += $subtotal;\r\n-\t\t\t\t$data->total    += $total;\r\n-\r\n-\t\t\t\t\u002F\u002F For template old use.\r\n-\t\t\t\tLearnPress::instance()->cart->subtotal += $subtotal;\r\n-\t\t\t\tLearnPress::instance()->cart->total    += $total;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fcart\u002Fcalculate_total', $data, $items );\r\n-\r\n-\t\t\u002F\u002F$this->update_session();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update cart content to session\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_session( array $cart_content = [] ) {\r\n-\t\t\u002F\u002Flearn_press_session_set( $this->_cart_session_key, $this->get_cart_for_session() );\r\n-\t\t\u002F\u002F$cart = $this->get_cart();\r\n-\r\n-\t\t\u002F\u002F Only save data item_id and quantity.\r\n-\t\t\u002F**\r\n-\t\t * Current certificate is not compatible with type $data_cart_save,\r\n-\t\t * because certificate override hook 'learn-press\u002Freview-order\u002Fcart-item-product' to set course.\r\n-\t\t * Need rewrite certificate to compatible with new cart.\r\n-\t\t *\u002F\r\n-\t\t\u002F*$data_cart_save = array_map(\r\n-\t\t\tfunction ( $item ) {\r\n-\t\t\t\treturn array(\r\n-\t\t\t\t\t'item_id'  => $item['item_id'],\r\n-\t\t\t\t\t'quantity' => $item['quantity'],\r\n-\t\t\t\t);\r\n-\t\t\t},\r\n-\t\t\t$cart\r\n-\t\t);*\u002F\r\n-\r\n-\t\tLearnPress::instance()->session->set( $this->_cart_session_key, $cart_content, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all items from cart.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_items(): array {\r\n-\t\treturn $this->get_cart_from_session();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load cart content data from session\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @version 3.0.2\r\n-\t * @modify 4.2.0 - tungnx\r\n-\t *\u002F\r\n-\tpublic function get_cart_from_session() {\r\n-\t\t$session_data = LearnPress::instance()->session->get_session_data();\r\n-\t\t$cart         = maybe_unserialize( $session_data['cart'] ?? '' );\r\n-\t\tif ( ! is_array( $cart ) ) {\r\n-\t\t\t$cart = [];\r\n-\t\t}\r\n-\r\n-\t\t$this->_cart_content = $cart;\r\n-\r\n-\t\treturn $this->_cart_content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get cart sub-total\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_subtotal() {\r\n-\t\t$subtotal = learn_press_format_price( $this->subtotal, true );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcart-subtotal', $subtotal, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get cart total\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_total() {\r\n-\t\t$total = learn_press_format_price( $this->total, true );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcart-total', $total, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate unique cart id from course id and data.\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @param mixed $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function generate_cart_id( $course_id, $data = '' ) {\r\n-\t\t$cart_id = array( $course_id );\r\n-\r\n-\t\tif ( is_array( $data ) ) {\r\n-\t\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\t\t$cart_id[1] = '';\r\n-\r\n-\t\t\t\tif ( is_array( $value ) || is_object( $value ) ) {\r\n-\t\t\t\t\t$value = http_build_query( $value );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$cart_id[1] .= trim( $key ) . trim( $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcart-id', md5( join( '_', $cart_id ) ), $cart_id, $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return subtotal of cart content\r\n-\t *\r\n-\t * @param LP_Course|LP_Certificate|CourseModel $item\r\n-\t * @param int $quantity\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_item_subtotal( $item, int $quantity = 1 ) {\r\n-\t\t$price           = $item->get_price();\r\n-\t\t$row_price       = $price * $quantity;\r\n-\t\t$course_subtotal = learn_press_format_price( $row_price, true );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcart\u002Fitem-subtotal', $course_subtotal, $item, $quantity, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean all items from cart\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function empty_cart(): LP_Cart {\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcart\u002Fbefore-empty' );\r\n-\r\n-\t\t$this->_cart_content = array();\r\n-\t\t$lp_session          = LearnPress::instance()->session;\r\n-\t\t$lp_session->remove( 'order_awaiting_payment', true );\r\n-\t\t$lp_session->remove( 'cart', true );\r\n-\t\t\u002F\u002Funset( LearnPress::instance()->session->order_awaiting_payment );\r\n-\t\t\u002F\u002Funset( LearnPress::instance()->session->cart );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcart\u002Femptied' );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if cart is empty or not\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_empty(): bool {\r\n-\t\t$cart_content = $this->get_cart_from_session();\r\n-\r\n-\t\treturn sizeof( $cart_content ) === 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if need to payment\r\n-\t * Return true if cart total greater than 0\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function needs_payment() {\r\n-\t\t$cart_data = $this->calculate_totals();\r\n-\r\n-\t\treturn apply_filters( 'learn_press_cart_needs_payment', $cart_data->total > 0, $this );\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * Get unique instance of LP_Cart object\r\n-\t *\r\n-\t * @return LP_Cart\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Cart\n+ *\n+ * Simple Cart object for now. Maybe need to expand later\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Cart {\n+\n+\t\u002F**\n+\t * Unique instance of LP_Cart\n+\t *\n+\t * @var LP_Cart object\n+\t *\u002F\n+\tprivate static $instance = null;\n+\n+\t\u002F**\n+\t * Hold the content of the cart\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $_cart_content = [];\n+\n+\t\u002F**\n+\t * Key of cart content stored in session\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $_cart_session_key = 'cart';\n+\n+\t\u002F**\n+\t * Cart total\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $total = 0;\n+\n+\t\u002F**\n+\t * Cart subtotal\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $subtotal = 0;\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\n+\t * @param string $key . Added since 3.3.0\n+\t *\u002F\n+\tpublic function __construct( $key = '' ) {\n+\t\tif ( $key ) {\n+\t\t\t$this->_cart_session_key = $key;\n+\t\t}\n+\n+\t\tLP_Request::register( 'add-course-to-cart', array( $this, 'add_to_cart' ), 20 );\n+\t\tLP_Request::register( 'remove-cart-item', array( $this, 'remove_item' ), 20 );\n+\n+\t\t\u002F\u002Fadd_action( 'learn-press\u002Fadd-to-cart', array( $this, 'calculate_totals' ), 10 );\n+\t\t\u002F\u002Fadd_action( 'wp', array( $this, 'maybe_set_cart_cookies' ), 99 );\n+\t\t\u002F\u002Fadd_action( 'shutdown', array( $this, 'maybe_set_cart_cookies' ), 0 );\n+\t\t\u002F\u002Fadd_action( 'wp_loaded', array( $this, 'init' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Add course to cart.\n+\t *\n+\t * @param int $item_id\n+\t * @param int $quantity\n+\t * @param array $item_data\n+\t *\n+\t * @return string|false\n+\t *\u002F\n+\tpublic function add_to_cart( int $item_id = 0, int $quantity = 1, array $item_data = array() ) {\n+\t\ttry {\n+\t\t\t$item_type = get_post_type( $item_id );\n+\n+\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\n+\t\t\t\tthrow new Exception( 'Item type is invalid!', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\tswitch ( $item_type ) {\n+\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t$course = CourseModel::find( $item_id, true );\n+\t\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\t\tthrow new Exception( __( 'Course is not exists!', 'learnpress' ) );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$item_data = apply_filters( 'learnpress\u002Fcart\u002Fadd-item\u002Fitem_type_' . $item_type, $item_data, $item_id, $quantity );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$cart_id                         = $this->generate_cart_id( $item_id, $item_data );\n+\t\t\t$this->_cart_content             = $this->get_cart_from_session();\n+\t\t\t$this->_cart_content[ $cart_id ] = apply_filters(\n+\t\t\t\t'learn_press_add_cart_item',\n+\t\t\t\tarray_merge(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'item_id'  => $item_id,\n+\t\t\t\t\t\t'quantity' => $quantity,\n+\t\t\t\t\t\t\u002F\u002F'data'     => array(),\n+\t\t\t\t\t),\n+\t\t\t\t\t$item_data\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Fixed security, quantity must be > 0\n+\t\t\tif ( (int) $this->_cart_content[ $cart_id ]['quantity'] \u003C= 0 ) {\n+\t\t\t\t$this->_cart_content[ $cart_id ]['quantity'] = 1;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Update cart to session DB.\n+\t\t\t$this->update_session( $this->_cart_content );\n+\n+\t\t\tdo_action( 'learn-press\u002Fadd-to-cart', $item_id, $quantity, $item_data, $cart_id );\n+\n+\t\t\treturn $cart_id;\n+\t\t} catch ( Exception $e ) {\n+\t\t\tif ( $e->getMessage() ) {\n+\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Remove an item from cart\n+\t *\n+\t * @param $item_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function remove_item( $item_id ) {\n+\t\tif ( isset( $this->_cart_content['items'][ $item_id ] ) ) {\n+\n+\t\t\tdo_action( 'learn_press_remove_cart_item', $item_id, $this );\n+\n+\t\t\tunset( $this->_cart_content['items'][ $item_id ] );\n+\n+\t\t\tdo_action( 'learn_press_cart_item_removed', $item_id, $this );\n+\n+\t\t\t$this->update_session( $this->_cart_content );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Re-calculate cart totals and update data to session\n+\t *\n+\t * @since 3.0.0\n+\t * @version 4.0.2\n+\t *\u002F\n+\tpublic function calculate_totals() {\n+\t\t$data           = new stdClass();\n+\t\t$total          = 0;\n+\t\t$data->subtotal = $total;\n+\t\t$data->total    = $total;\n+\t\t$subtotal       = $total;\n+\t\t$this->total    = $total;\n+\t\t$this->subtotal = $total;\n+\t\t$items          = $this->get_items();\n+\n+\t\tif ( $items ) {\n+\t\t\tforeach ( $items as $cart_id => $item ) {\n+\t\t\t\t$item_type = get_post_type( $item['item_id'] );\n+\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $item_type ) {\n+\t\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t\t$course   = learn_press_get_course( $item['item_id'] );\n+\t\t\t\t\t\t$subtotal = $course->get_price() * absint( $item['quantity'] );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$subtotal = apply_filters( 'learnpress\u002Fcart\u002Fcalculate_sub_total\u002Fitem_type_' . $item_type, $subtotal, $item );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t$total = $subtotal;\n+\n+\t\t\t\t$data->subtotal += $subtotal;\n+\t\t\t\t$data->total    += $total;\n+\n+\t\t\t\t\u002F\u002F For template old use.\n+\t\t\t\tLearnPress::instance()->cart->subtotal += $subtotal;\n+\t\t\t\tLearnPress::instance()->cart->total    += $total;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Fcart\u002Fcalculate_total', $data, $items );\n+\n+\t\t\u002F\u002F$this->update_session();\n+\t}\n+\n+\t\u002F**\n+\t * Update cart content to session\n+\t *\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_session( array $cart_content = [] ) {\n+\t\t\u002F\u002Flearn_press_session_set( $this->_cart_session_key, $this->get_cart_for_session() );\n+\t\t\u002F\u002F$cart = $this->get_cart();\n+\n+\t\t\u002F\u002F Only save data item_id and quantity.\n+\t\t\u002F**\n+\t\t * Current certificate is not compatible with type $data_cart_save,\n+\t\t * because certificate override hook 'learn-press\u002Freview-order\u002Fcart-item-product' to set course.\n+\t\t * Need rewrite certificate to compatible with new cart.\n+\t\t *\u002F\n+\t\t\u002F*$data_cart_save = array_map(\n+\t\t\tfunction ( $item ) {\n+\t\t\t\treturn array(\n+\t\t\t\t\t'item_id'  => $item['item_id'],\n+\t\t\t\t\t'quantity' => $item['quantity'],\n+\t\t\t\t);\n+\t\t\t},\n+\t\t\t$cart\n+\t\t);*\u002F\n+\n+\t\tLearnPress::instance()->session->set( $this->_cart_session_key, $cart_content, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get all items from cart.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_items(): array {\n+\t\treturn $this->get_cart_from_session();\n+\t}\n+\n+\t\u002F**\n+\t * Load cart content data from session\n+\t *\n+\t * @since 3.0.0\n+\t * @version 3.0.2\n+\t * @modify 4.2.0 - tungnx\n+\t *\u002F\n+\tpublic function get_cart_from_session() {\n+\t\t$session_data = LearnPress::instance()->session->get_session_data();\n+\t\t$cart         = maybe_unserialize( $session_data['cart'] ?? '' );\n+\t\tif ( ! is_array( $cart ) ) {\n+\t\t\t$cart = [];\n+\t\t}\n+\n+\t\t$this->_cart_content = $cart;\n+\n+\t\treturn $this->_cart_content;\n+\t}\n+\n+\t\u002F**\n+\t * Get cart sub-total\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_subtotal() {\n+\t\t$subtotal = learn_press_format_price( $this->subtotal, true );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcart-subtotal', $subtotal, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get cart total\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_total() {\n+\t\t$total = learn_press_format_price( $this->total, true );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcart-total', $total, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Generate unique cart id from course id and data.\n+\t *\n+\t * @param int $course_id\n+\t * @param mixed $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function generate_cart_id( $course_id, $data = '' ) {\n+\t\t$cart_id = array( $course_id );\n+\n+\t\tif ( is_array( $data ) ) {\n+\t\t\tforeach ( $data as $key => $value ) {\n+\t\t\t\t$cart_id[1] = '';\n+\n+\t\t\t\tif ( is_array( $value ) || is_object( $value ) ) {\n+\t\t\t\t\t$value = http_build_query( $value );\n+\t\t\t\t}\n+\n+\t\t\t\t$cart_id[1] .= trim( $key ) . trim( $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcart-id', md5( join( '_', $cart_id ) ), $cart_id, $data );\n+\t}\n+\n+\t\u002F**\n+\t * Return subtotal of cart content\n+\t *\n+\t * @param LP_Course|LP_Certificate|CourseModel $item\n+\t * @param int $quantity\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_item_subtotal( $item, int $quantity = 1 ) {\n+\t\t$price           = $item->get_price();\n+\t\t$row_price       = $price * $quantity;\n+\t\t$course_subtotal = learn_press_format_price( $row_price, true );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcart\u002Fitem-subtotal', $course_subtotal, $item, $quantity, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Clean all items from cart\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function empty_cart(): LP_Cart {\n+\n+\t\tdo_action( 'learn-press\u002Fcart\u002Fbefore-empty' );\n+\n+\t\t$this->_cart_content = array();\n+\t\t$lp_session          = LearnPress::instance()->session;\n+\t\t$lp_session->remove( 'order_awaiting_payment', true );\n+\t\t$lp_session->remove( 'cart', true );\n+\t\t\u002F\u002Funset( LearnPress::instance()->session->order_awaiting_payment );\n+\t\t\u002F\u002Funset( LearnPress::instance()->session->cart );\n+\n+\t\tdo_action( 'learn-press\u002Fcart\u002Femptied' );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Check if cart is empty or not\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_empty(): bool {\n+\t\t$cart_content = $this->get_cart_from_session();\n+\n+\t\treturn sizeof( $cart_content ) === 0;\n+\t}\n+\n+\t\u002F**\n+\t * Checks if need to payment\n+\t * Return true if cart total greater than 0\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function needs_payment() {\n+\t\t$cart_data = $this->calculate_totals();\n+\n+\t\treturn apply_filters( 'learn_press_cart_needs_payment', $cart_data->total > 0, $this );\n+\t}\n+\n+\n+\t\u002F**\n+\t * Get unique instance of LP_Cart object\n+\t *\n+\t * @return LP_Cart\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Flp-cart-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Flp-cart-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcart\u002Flp-cart-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcart\u002Flp-cart-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,110 +1,110 @@\n-\u003C?php\r\n-\u002F**\r\n- * Return LP_Cart object instance\r\n- *\r\n- * @return LP_Cart\r\n- *\u002F\r\n-function learn_press_get_cart(): LP_Cart {\r\n-\treturn LearnPress::instance()->cart;\r\n-}\r\n-\r\n-function learn_press_enable_cart() {\r\n-\treturn apply_filters( 'learn-press\u002Fenable-cart', false );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get description for cart by join all item titles into one\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_cart_description() {\r\n-\t$items       = LearnPress::instance()->cart->get_items();\r\n-\t$description = array();\r\n-\r\n-\tif ( $items ) {\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\t$description[] = apply_filters( 'learn_press_cart_item_description', get_the_title( $item['item_id'] ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_cart_description', join( ', ', $description ) );\r\n-}\r\n-\r\n-function learn_press_get_cart_course_url() {\r\n-\t$products = learn_press_get_cart( 'products' );\r\n-\t$return   = '';\r\n-\r\n-\tif ( $products ) {\r\n-\t\tforeach ( $products as $prop ) {\r\n-\t\t\t$return = get_permalink( $prop['id'] );\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_cart_course_url', $return );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return total of cart\r\n- *\r\n- * @return mixed\r\n- * @deprecated 4.2.0\r\n- *\u002F\r\n-function learn_press_get_cart_total() {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.0' );\r\n-\treturn LearnPress::instance()->cart->total;\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.0\r\n- *\u002F\r\n-function learn_press_clear_cart_after_payment() {\r\n-\tglobal $wp;\r\n-\r\n-\tif ( ! empty( $wp->query_vars['lp-order-received'] ) ) {\r\n-\t\t$order_id  = absint( $wp->query_vars['lp-order-received'] );\r\n-\t\t$order_key = LP_Helper::sanitize_params_submitted( $_GET['key'] ?? '' );\r\n-\t\t$order     = learn_press_get_order( $order_id );\r\n-\r\n-\t\tif ( $order_id > 0 && $order ) {\r\n-\t\t\tif ( $order->order_key === $order_key ) {\r\n-\t\t\t\tLearnPress::instance()->cart->empty_cart();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( ! is_null( LearnPress::instance()->session ) && LearnPress::instance()->session->get( 'order_awaiting_payment' ) > 0 ) {\r\n-\t\t$order = learn_press_get_order( LearnPress::instance()->session->get( 'order_awaiting_payment' ) );\r\n-\r\n-\t\tif ( $order && $order->id > 0 ) {\r\n-\t\t\tif ( ! $order->has_status( array( 'failed', 'pending', 'cancelled' ) ) ) {\r\n-\t\t\t\tLearnPress::instance()->cart->empty_cart();\r\n-\t\t\t\tLearnPress::instance()->session->remove( 'order_awaiting_payment' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\u002F\u002Fadd_action( 'get_header', 'learn_press_clear_cart_after_payment' );\r\n-\r\n-\u002F**\r\n- * @param LP_Cart $cart\r\n- *\r\n- * @return mixed\r\n- * @deprecated 4.2.0\r\n- *\u002F\r\n-\u002F*function learn_press_custom_checkout_cart( $cart ) {\r\n-\tif ( empty( $_REQUEST['single-item'] ) ) {\r\n-\t\treturn $cart;\r\n-\t}\r\n-\r\n-\t$cart = clone $cart;\r\n-\t$cart->empty_cart();\r\n-\t$items = explode( ',', $_REQUEST['single-item'] );\r\n-\r\n-\tforeach ( $items as $item ) {\r\n-\t\t$cart->add_to_cart( $item );\r\n-\t}\r\n-\r\n-\treturn $cart;\r\n-}*\u002F\r\n-\u002F\u002Fadd_filter( 'learn_press_checkout_cart', 'learn_press_custom_checkout_cart' );\r\n+\u003C?php\n+\u002F**\n+ * Return LP_Cart object instance\n+ *\n+ * @return LP_Cart\n+ *\u002F\n+function learn_press_get_cart(): LP_Cart {\n+\treturn LearnPress::instance()->cart;\n+}\n+\n+function learn_press_enable_cart() {\n+\treturn apply_filters( 'learn-press\u002Fenable-cart', false );\n+}\n+\n+\u002F**\n+ * Get description for cart by join all item titles into one\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_cart_description() {\n+\t$items       = LearnPress::instance()->cart->get_items();\n+\t$description = array();\n+\n+\tif ( $items ) {\n+\t\tforeach ( $items as $item ) {\n+\t\t\t$description[] = apply_filters( 'learn_press_cart_item_description', get_the_title( $item['item_id'] ) );\n+\t\t}\n+\t}\n+\n+\treturn apply_filters( 'learn_press_cart_description', join( ', ', $description ) );\n+}\n+\n+function learn_press_get_cart_course_url() {\n+\t$products = learn_press_get_cart( 'products' );\n+\t$return   = '';\n+\n+\tif ( $products ) {\n+\t\tforeach ( $products as $prop ) {\n+\t\t\t$return = get_permalink( $prop['id'] );\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\treturn apply_filters( 'learn_press_cart_course_url', $return );\n+}\n+\n+\u002F**\n+ * Return total of cart\n+ *\n+ * @return mixed\n+ * @deprecated 4.2.0\n+ *\u002F\n+function learn_press_get_cart_total() {\n+\t_deprecated_function( __FUNCTION__, '4.2.0' );\n+\treturn LearnPress::instance()->cart->total;\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.0\n+ *\u002F\n+function learn_press_clear_cart_after_payment() {\n+\tglobal $wp;\n+\n+\tif ( ! empty( $wp->query_vars['lp-order-received'] ) ) {\n+\t\t$order_id  = absint( $wp->query_vars['lp-order-received'] );\n+\t\t$order_key = LP_Helper::sanitize_params_submitted( $_GET['key'] ?? '' );\n+\t\t$order     = learn_press_get_order( $order_id );\n+\n+\t\tif ( $order_id > 0 && $order ) {\n+\t\t\tif ( $order->order_key === $order_key ) {\n+\t\t\t\tLearnPress::instance()->cart->empty_cart();\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tif ( ! is_null( LearnPress::instance()->session ) && LearnPress::instance()->session->get( 'order_awaiting_payment' ) > 0 ) {\n+\t\t$order = learn_press_get_order( LearnPress::instance()->session->get( 'order_awaiting_payment' ) );\n+\n+\t\tif ( $order && $order->id > 0 ) {\n+\t\t\tif ( ! $order->has_status( array( 'failed', 'pending', 'cancelled' ) ) ) {\n+\t\t\t\tLearnPress::instance()->cart->empty_cart();\n+\t\t\t\tLearnPress::instance()->session->remove( 'order_awaiting_payment' );\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\u002F\u002Fadd_action( 'get_header', 'learn_press_clear_cart_after_payment' );\n+\n+\u002F**\n+ * @param LP_Cart $cart\n+ *\n+ * @return mixed\n+ * @deprecated 4.2.0\n+ *\u002F\n+\u002F*function learn_press_custom_checkout_cart( $cart ) {\n+\tif ( empty( $_REQUEST['single-item'] ) ) {\n+\t\treturn $cart;\n+\t}\n+\n+\t$cart = clone $cart;\n+\t$cart->empty_cart();\n+\t$items = explode( ',', $_REQUEST['single-item'] );\n+\n+\tforeach ( $items as $item ) {\n+\t\t$cart->add_to_cart( $item );\n+\t}\n+\n+\treturn $cart;\n+}*\u002F\n+\u002F\u002Fadd_filter( 'learn_press_checkout_cart', 'learn_press_custom_checkout_cart' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-ajax.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-ajax.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-ajax.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-ajax.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,278 +1,278 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! class_exists( 'LP_AJAX' ) ) {\r\n-\tclass LP_AJAX {\r\n-\t\t\u002F**\r\n-\t\t * Init common ajax events\r\n-\t\t *\u002F\r\n-\t\tpublic static function init() {\r\n-\t\t\t$ajax_events = array(\r\n-\t\t\t\t'checkout-user-email-exists:nopriv',\r\n-\t\t\t\t'recover-order',\r\n-\t\t\t\t'request-become-a-teacher:nonce',\r\n-\t\t\t\t'checkout:nopriv',\r\n-\t\t\t\t\u002F\u002F'complete-lesson',\r\n-\t\t\t\t'finish-course', \u002F\u002F finish_course.\r\n-\t\t\t\t'external-link:nopriv',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$ajax_events = apply_filters( 'learn-press\u002Fajax\u002Fevents', $ajax_events );\r\n-\r\n-\t\t\tforeach ( $ajax_events as $action => $callback ) {\r\n-\r\n-\t\t\t\tif ( is_numeric( $action ) ) {\r\n-\t\t\t\t\t$action = $callback;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$actions = LP_Request::parse_action( $action );\r\n-\t\t\t\t$method  = $actions['action'];\r\n-\r\n-\t\t\t\tif ( ! is_callable( $callback ) ) {\r\n-\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\r\n-\t\t\t\t\t$callback = array( __CLASS__, $method );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tLP_Request::register_ajax( $action, $callback );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic static function external_link() {\r\n-\t\t\t$nonce  = LP_Request::get( 'nonce' );\r\n-\t\t\t$id     = LP_Request::get( 'id' );\r\n-\t\t\t$course = learn_press_get_course( $id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$link = $course->get_external_link();\r\n-\r\n-\t\t\tif ( ! wp_verify_nonce( $nonce, 'external-link-' . $link ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( apply_filters( 'learn-press\u002Fcourse-redirect-external-link', $id ) ) {\r\n-\t\t\t\twp_redirect( $link );\r\n-\t\t\t\texit();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic static function checkout() {\r\n-\t\t\tLearnPress::instance()->checkout()->process_checkout_handler();\r\n-\t\t}\r\n-\r\n-\t\tpublic static function request_become_a_teacher() {\r\n-\t\t\tLP_Forms_Handler::process_become_teacher();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Recover order\r\n-\t\t *\r\n-\t\t * @since 4.0.0\r\n-\t\t * @version 4.0.1\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic static function recover_order() {\r\n-\t\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\t\tif ( ! LP_Request::verify_nonce( 'recover-order' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$factory   = new LP_Order_CURD();\r\n-\t\t\t$user_id   = get_current_user_id();\r\n-\t\t\t$order_key = LP_Request::get_string( 'order-key' );\r\n-\t\t\t$order     = $factory->recover( $order_key, $user_id );\r\n-\r\n-\t\t\tif ( is_wp_error( $order ) ) {\r\n-\t\t\t\t$response->message = $order->get_error_message();\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->status         = 'success';\r\n-\t\t\t\t$response->message        = sprintf(\r\n-\t\t\t\t\t__( 'The order %s has been successfully recovered.', 'learnpress' ),\r\n-\t\t\t\t\t$order_key\r\n-\t\t\t\t);\r\n-\t\t\t\t$response->data->redirect = $order->get_view_order_url();\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\tpublic static function checkout_user_email_exists() {\r\n-\t\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$email             = LP_Request::get_email( 'email' );\r\n-\t\t\t\t$user_can_register = get_option( 'users_can_register' );\r\n-\t\t\t\t$html_wrapper      = [\r\n-\t\t\t\t\t'\u003Clabel class=\"lp-guest-checkout-output\">' => '\u003C\u002Flabel>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\tif ( email_exists( $email ) ) {\r\n-\t\t\t\t\t$output = __(\r\n-\t\t\t\t\t\t'Your email already exists. Do you want to continue with this email?',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( $user_can_register ) {\r\n-\t\t\t\t\t$output = sprintf(\r\n-\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"checkout-email-option\" value=\"new-account\"> \u003Cspan>%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'Create a new account with this email. The account information will be sent with this email.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$output = __( 'The system does not allow the creation of a new account, you must enter an existing account.', 'learnpress' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response->status        = 'success';\r\n-\t\t\t\t$response->data->content = Template::instance()->nest_elements( $html_wrapper, $output );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$response->message = $e->getMessage();\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Request finish course\r\n-\t\t *\r\n-\t\t * TODO: should move this function to api - tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic static function finish_course() {\r\n-\t\t\t$link_redirect = '';\r\n-\t\t\t$message_data  = [\r\n-\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t'content' => '',\r\n-\t\t\t];\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$nonce       = LP_Request::get_param( 'finish-course-nonce', '', 'text', 'post' );\r\n-\t\t\t\t$course_id   = LP_Request::get_param( 'course-id', 0, 'int', 'post' );\r\n-\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t\t$user_id     = get_current_user_id();\r\n-\t\t\t\t$userModel   = UserModel::find( $user_id, true );\r\n-\r\n-\t\t\t\t$nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user_id );\r\n-\t\t\t\tif ( ! $courseModel || ! $userModel || ! wp_verify_nonce( $nonce, $nonce_action ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Request is invalid!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t\tif ( ! $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You have not enrolled in this course.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$can_finish = $userCourseModel->can_finish();\r\n-\t\t\t\tif ( is_wp_error( $can_finish ) ) {\r\n-\t\t\t\t\tthrow new Exception( $can_finish->get_error_message() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userCourseModel->handle_finish();\r\n-\t\t\t\t$lp_redirect             = LP_Settings::get_option( 'course_finish_redirect' );\r\n-\t\t\t\t$link_redirect           = ! empty( $lp_redirect ) ? $lp_redirect : $courseModel->get_permalink();\r\n-\t\t\t\t$link_redirect           = esc_url_raw( $link_redirect );\r\n-\t\t\t\t$message_data['status']  = 'success';\r\n-\t\t\t\t$message_data['content'] = __( 'Course has been finished successfully.', 'learnpress' );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$message_data['content'] = $e->getMessage();\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t\tif ( ! empty( $link_redirect ) ) {\r\n-\t\t\t\twp_redirect( $link_redirect );\r\n-\t\t\t\tdie();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Complete lesson\r\n-\t\t * @deprecated 4.2.7.6\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function complete_lesson() {\r\n-\t\t\t$response = array(\r\n-\t\t\t\t'result'   => 'error',\r\n-\t\t\t\t'redirect' => '',\r\n-\t\t\t);\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$nonce        = LP_Request::get_param( 'complete-lesson-nonce' );\r\n-\t\t\t\t$lesson_id    = LP_Request::get_param( 'id', 0, 'int' );\r\n-\t\t\t\t$course_id    = LP_Request::get_param( 'course_id', 0, 'int' );\r\n-\t\t\t\t$item_id_next = LP_Request::get_param( 'item_id_next', 0, 'int' );\r\n-\r\n-\t\t\t\tif ( ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lesson = get_post( $lesson_id );\r\n-\t\t\t\tif ( ! $lesson || $lesson->post_type !== LP_LESSON_CPT ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Error! Invalid lesson.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t\tif ( $user instanceof LP_User_Guest ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Please login.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Course is invalid!.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item = $course->get_item( $lesson_id );\r\n-\t\t\t\tif ( ! $item instanceof LP_Course_Item ) {\r\n-\t\t\t\t\tthrow new Exception( 'Item is invalid!', 'learnpress' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result = $user->complete_lesson( $lesson_id, $course_id );\r\n-\t\t\t\tif ( $item_id_next ) {\r\n-\t\t\t\t\t$response['redirect'] = $course->get_item_link( $item_id_next );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$response['redirect'] = $item->get_permalink();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! is_wp_error( $result ) ) {\r\n-\t\t\t\t\tif ( $course->get_next_item() ) {\r\n-\t\t\t\t\t\t$next                 = $course->get_next_item();\r\n-\t\t\t\t\t\t$response['redirect'] = $course->get_item_link( $next );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$message_data = [\r\n-\t\t\t\t\t\t'status'  => 'success',\r\n-\t\t\t\t\t\t'content' => sprintf( __( 'Congrats! You have completed \"%s\".', 'learnpress' ), $item->get_title() ),\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t\t\t\t$response['result'] = 'success';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow new Exception( $result->get_error_message() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response = apply_filters( 'learn-press\u002Fuser-completed-lesson-result', $response, $lesson_id, $course_id, $user->get_id() );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$message_data = [\r\n-\t\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t\t'content' => $e->getMessage(),\r\n-\t\t\t\t];\r\n-\t\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002Flearn_press_maybe_send_json( $response );\r\n-\r\n-\t\t\tif ( ! empty( $response['redirect'] ) ) {\r\n-\t\t\t\twp_redirect( $response['redirect'] );\r\n-\t\t\t\texit();\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\t}\r\n-}\r\n-\r\n-LP_AJAX::init();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! class_exists( 'LP_AJAX' ) ) {\n+\tclass LP_AJAX {\n+\t\t\u002F**\n+\t\t * Init common ajax events\n+\t\t *\u002F\n+\t\tpublic static function init() {\n+\t\t\t$ajax_events = array(\n+\t\t\t\t'checkout-user-email-exists:nopriv',\n+\t\t\t\t'recover-order',\n+\t\t\t\t'request-become-a-teacher:nonce',\n+\t\t\t\t'checkout:nopriv',\n+\t\t\t\t\u002F\u002F'complete-lesson',\n+\t\t\t\t'finish-course', \u002F\u002F finish_course.\n+\t\t\t\t'external-link:nopriv',\n+\t\t\t);\n+\n+\t\t\t$ajax_events = apply_filters( 'learn-press\u002Fajax\u002Fevents', $ajax_events );\n+\n+\t\t\tforeach ( $ajax_events as $action => $callback ) {\n+\n+\t\t\t\tif ( is_numeric( $action ) ) {\n+\t\t\t\t\t$action = $callback;\n+\t\t\t\t}\n+\n+\t\t\t\t$actions = LP_Request::parse_action( $action );\n+\t\t\t\t$method  = $actions['action'];\n+\n+\t\t\t\tif ( ! is_callable( $callback ) ) {\n+\t\t\t\t\t$method   = preg_replace( '\u002F-\u002F', '_', $method );\n+\t\t\t\t\t$callback = array( __CLASS__, $method );\n+\t\t\t\t}\n+\n+\t\t\t\tLP_Request::register_ajax( $action, $callback );\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic static function external_link() {\n+\t\t\t$nonce  = LP_Request::get( 'nonce' );\n+\t\t\t$id     = LP_Request::get( 'id' );\n+\t\t\t$course = learn_press_get_course( $id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$link = $course->get_external_link();\n+\n+\t\t\tif ( ! wp_verify_nonce( $nonce, 'external-link-' . $link ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( apply_filters( 'learn-press\u002Fcourse-redirect-external-link', $id ) ) {\n+\t\t\t\twp_redirect( $link );\n+\t\t\t\texit();\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic static function checkout() {\n+\t\t\tLearnPress::instance()->checkout()->process_checkout_handler();\n+\t\t}\n+\n+\t\tpublic static function request_become_a_teacher() {\n+\t\t\tLP_Forms_Handler::process_become_teacher();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Recover order\n+\t\t *\n+\t\t * @since 4.0.0\n+\t\t * @version 4.0.1\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic static function recover_order() {\n+\t\t\t$response = new LP_REST_Response();\n+\n+\t\t\tif ( ! LP_Request::verify_nonce( 'recover-order' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$factory   = new LP_Order_CURD();\n+\t\t\t$user_id   = get_current_user_id();\n+\t\t\t$order_key = LP_Request::get_string( 'order-key' );\n+\t\t\t$order     = $factory->recover( $order_key, $user_id );\n+\n+\t\t\tif ( is_wp_error( $order ) ) {\n+\t\t\t\t$response->message = $order->get_error_message();\n+\t\t\t} else {\n+\t\t\t\t$response->status         = 'success';\n+\t\t\t\t$response->message        = sprintf(\n+\t\t\t\t\t__( 'The order %s has been successfully recovered.', 'learnpress' ),\n+\t\t\t\t\t$order_key\n+\t\t\t\t);\n+\t\t\t\t$response->data->redirect = $order->get_view_order_url();\n+\t\t\t}\n+\n+\t\t\twp_send_json( $response );\n+\t\t}\n+\n+\t\tpublic static function checkout_user_email_exists() {\n+\t\t\t$response = new LP_REST_Response();\n+\n+\t\t\ttry {\n+\t\t\t\t$email             = LP_Request::get_email( 'email' );\n+\t\t\t\t$user_can_register = get_option( 'users_can_register' );\n+\t\t\t\t$html_wrapper      = [\n+\t\t\t\t\t'\u003Clabel class=\"lp-guest-checkout-output\">' => '\u003C\u002Flabel>',\n+\t\t\t\t];\n+\n+\t\t\t\tif ( email_exists( $email ) ) {\n+\t\t\t\t\t$output = __(\n+\t\t\t\t\t\t'Your email already exists. Do you want to continue with this email?',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( $user_can_register ) {\n+\t\t\t\t\t$output = sprintf(\n+\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"checkout-email-option\" value=\"new-account\"> \u003Cspan>%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'Create a new account with this email. The account information will be sent with this email.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\t$output = __( 'The system does not allow the creation of a new account, you must enter an existing account.', 'learnpress' );\n+\t\t\t\t}\n+\n+\t\t\t\t$response->status        = 'success';\n+\t\t\t\t$response->data->content = Template::instance()->nest_elements( $html_wrapper, $output );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$response->message = $e->getMessage();\n+\t\t\t}\n+\n+\t\t\twp_send_json( $response );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Request finish course\n+\t\t *\n+\t\t * TODO: should move this function to api - tungnx\n+\t\t *\u002F\n+\t\tpublic static function finish_course() {\n+\t\t\t$link_redirect = '';\n+\t\t\t$message_data  = [\n+\t\t\t\t'status'  => 'error',\n+\t\t\t\t'content' => '',\n+\t\t\t];\n+\n+\t\t\ttry {\n+\t\t\t\t$nonce       = LP_Request::get_param( 'finish-course-nonce', '', 'text', 'post' );\n+\t\t\t\t$course_id   = LP_Request::get_param( 'course-id', 0, 'int', 'post' );\n+\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t\t$user_id     = get_current_user_id();\n+\t\t\t\t$userModel   = UserModel::find( $user_id, true );\n+\n+\t\t\t\t$nonce_action = sprintf( 'finish-course-%d-%d', $course_id, $user_id );\n+\t\t\t\tif ( ! $courseModel || ! $userModel || ! wp_verify_nonce( $nonce, $nonce_action ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Request is invalid!', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t\tif ( ! $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t\t\tthrow new Exception( __( 'You have not enrolled in this course.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$can_finish = $userCourseModel->can_finish();\n+\t\t\t\tif ( is_wp_error( $can_finish ) ) {\n+\t\t\t\t\tthrow new Exception( $can_finish->get_error_message() );\n+\t\t\t\t}\n+\n+\t\t\t\t$userCourseModel->handle_finish();\n+\t\t\t\t$lp_redirect             = LP_Settings::get_option( 'course_finish_redirect' );\n+\t\t\t\t$link_redirect           = ! empty( $lp_redirect ) ? $lp_redirect : $courseModel->get_permalink();\n+\t\t\t\t$link_redirect           = esc_url_raw( $link_redirect );\n+\t\t\t\t$message_data['status']  = 'success';\n+\t\t\t\t$message_data['content'] = __( 'Course has been finished successfully.', 'learnpress' );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$message_data['content'] = $e->getMessage();\n+\t\t\t}\n+\n+\t\t\tlearn_press_set_message( $message_data );\n+\t\t\tif ( ! empty( $link_redirect ) ) {\n+\t\t\t\twp_redirect( $link_redirect );\n+\t\t\t\tdie();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Complete lesson\n+\t\t * @deprecated 4.2.7.6\n+\t\t *\u002F\n+\t\t\u002F*public static function complete_lesson() {\n+\t\t\t$response = array(\n+\t\t\t\t'result'   => 'error',\n+\t\t\t\t'redirect' => '',\n+\t\t\t);\n+\n+\t\t\ttry {\n+\t\t\t\t$nonce        = LP_Request::get_param( 'complete-lesson-nonce' );\n+\t\t\t\t$lesson_id    = LP_Request::get_param( 'id', 0, 'int' );\n+\t\t\t\t$course_id    = LP_Request::get_param( 'course_id', 0, 'int' );\n+\t\t\t\t$item_id_next = LP_Request::get_param( 'item_id_next', 0, 'int' );\n+\n+\t\t\t\tif ( ! wp_verify_nonce( $nonce, 'lesson-complete' ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Error! Invalid lesson or failed security check.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$lesson = get_post( $lesson_id );\n+\t\t\t\tif ( ! $lesson || $lesson->post_type !== LP_LESSON_CPT ) {\n+\t\t\t\t\tthrow new Exception( __( 'Error! Invalid lesson.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$user = learn_press_get_current_user();\n+\t\t\t\tif ( $user instanceof LP_User_Guest ) {\n+\t\t\t\t\tthrow new Exception( __( 'Please login.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\tthrow new Exception( __( 'Course is invalid!.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$item = $course->get_item( $lesson_id );\n+\t\t\t\tif ( ! $item instanceof LP_Course_Item ) {\n+\t\t\t\t\tthrow new Exception( 'Item is invalid!', 'learnpress' );\n+\t\t\t\t}\n+\n+\t\t\t\t$result = $user->complete_lesson( $lesson_id, $course_id );\n+\t\t\t\tif ( $item_id_next ) {\n+\t\t\t\t\t$response['redirect'] = $course->get_item_link( $item_id_next );\n+\t\t\t\t} else {\n+\t\t\t\t\t$response['redirect'] = $item->get_permalink();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! is_wp_error( $result ) ) {\n+\t\t\t\t\tif ( $course->get_next_item() ) {\n+\t\t\t\t\t\t$next                 = $course->get_next_item();\n+\t\t\t\t\t\t$response['redirect'] = $course->get_item_link( $next );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$message_data = [\n+\t\t\t\t\t\t'status'  => 'success',\n+\t\t\t\t\t\t'content' => sprintf( __( 'Congrats! You have completed \"%s\".', 'learnpress' ), $item->get_title() ),\n+\t\t\t\t\t];\n+\t\t\t\t\tlearn_press_set_message( $message_data );\n+\t\t\t\t\t$response['result'] = 'success';\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow new Exception( $result->get_error_message() );\n+\t\t\t\t}\n+\n+\t\t\t\t$response = apply_filters( 'learn-press\u002Fuser-completed-lesson-result', $response, $lesson_id, $course_id, $user->get_id() );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$message_data = [\n+\t\t\t\t\t'status'  => 'error',\n+\t\t\t\t\t'content' => $e->getMessage(),\n+\t\t\t\t];\n+\t\t\t\tlearn_press_set_message( $message_data );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002Flearn_press_maybe_send_json( $response );\n+\n+\t\t\tif ( ! empty( $response['redirect'] ) ) {\n+\t\t\t\twp_redirect( $response['redirect'] );\n+\t\t\t\texit();\n+\t\t\t}\n+\t\t}*\u002F\n+\t}\n+}\n+\n+LP_AJAX::init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-asset-key.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-asset-key.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-asset-key.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-asset-key.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,111 +1,111 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Asset_Key\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 3.2.8\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-class LP_Asset_Key {\r\n-\t\u002F**\r\n-\t * Url of file css\u002Fjs\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_url = '';\r\n-\t\u002F**\r\n-\t * Attach js\u002Fcss need load\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $_deps = array();\r\n-\t\u002F**\r\n-\t * Load on footer\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $_in_footer = 0;\r\n-\t\u002F**\r\n-\t * Strategy load defer\u002Fasync support from WP 6.3\r\n-\t *\r\n-\t * @var array\r\n-\t * @since 4.2.5.5\r\n-\t *\u002F\r\n-\tpublic $_strategy = [];\r\n-\t\u002F**\r\n-\t * Value 1 for run wp_register_script(), 0 for run wp_enqueue_script()\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $_only_register = 1;\r\n-\t\u002F**\r\n-\t * Default value empty will load all page\r\n-\t *\r\n-\t * @var array|string[]\r\n-\t *\u002F\r\n-\tpublic $_screens = array();\r\n-\t\u002F**\r\n-\t * Set screens(pages) not load js\r\n-\t *\r\n-\t * @var array|string[]\r\n-\t *\u002F\r\n-\tpublic $_exclude_screens = array();\r\n-\t\u002F**\r\n-\t * Version of addon\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_version = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_ASSET_KEY constructor.\r\n-\t *\r\n-\t * @param string   $url .\r\n-\t * @param array    $deps .\r\n-\t * @param string[] $screens .\r\n-\t * @param int      $only_register .\r\n-\t * @param int      $in_footer .\r\n-\t *\u002F\r\n-\tpublic function __construct(\r\n-\t\tstring $url = '',\r\n-\t\tarray $deps = array(),\r\n-\t\tarray $screens = array(),\r\n-\t\tint $only_register = 1,\r\n-\t\tint $in_footer = 0,\r\n-\t\tstring $version = '',\r\n-\t\tarray $strategy = []\r\n-\t) {\r\n-\t\t$this->_url           = $url;\r\n-\t\t$this->_deps          = $deps;\r\n-\t\t$this->_in_footer     = $in_footer;\r\n-\t\t$this->_only_register = $only_register;\r\n-\t\t$this->_screens       = $screens;\r\n-\t\t$this->_version       = $version;\r\n-\t\t$this->_strategy      = $strategy;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set pages not call js.\r\n-\t *\r\n-\t * @param string[] $screens .\r\n-\t *\u002F\r\n-\tpublic function exclude_screen( array $screens = array() ) {\r\n-\t\t$this->_exclude_screens = $screens;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set dependency\r\n-\t *\r\n-\t * @param array $deps\r\n-\t *\u002F\r\n-\tpublic function set_dependency_js( array $deps ) {\r\n-\t\t$this->_deps = $deps;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Asset_Key\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 3.2.8\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+class LP_Asset_Key {\n+\t\u002F**\n+\t * Url of file css\u002Fjs\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_url = '';\n+\t\u002F**\n+\t * Attach js\u002Fcss need load\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $_deps = array();\n+\t\u002F**\n+\t * Load on footer\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $_in_footer = 0;\n+\t\u002F**\n+\t * Strategy load defer\u002Fasync support from WP 6.3\n+\t *\n+\t * @var array\n+\t * @since 4.2.5.5\n+\t *\u002F\n+\tpublic $_strategy = [];\n+\t\u002F**\n+\t * Value 1 for run wp_register_script(), 0 for run wp_enqueue_script()\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $_only_register = 1;\n+\t\u002F**\n+\t * Default value empty will load all page\n+\t *\n+\t * @var array|string[]\n+\t *\u002F\n+\tpublic $_screens = array();\n+\t\u002F**\n+\t * Set screens(pages) not load js\n+\t *\n+\t * @var array|string[]\n+\t *\u002F\n+\tpublic $_exclude_screens = array();\n+\t\u002F**\n+\t * Version of addon\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_version = '';\n+\n+\t\u002F**\n+\t * LP_ASSET_KEY constructor.\n+\t *\n+\t * @param string   $url .\n+\t * @param array    $deps .\n+\t * @param string[] $screens .\n+\t * @param int      $only_register .\n+\t * @param int      $in_footer .\n+\t *\u002F\n+\tpublic function __construct(\n+\t\tstring $url = '',\n+\t\tarray $deps = array(),\n+\t\tarray $screens = array(),\n+\t\tint $only_register = 1,\n+\t\tint $in_footer = 0,\n+\t\tstring $version = '',\n+\t\tarray $strategy = []\n+\t) {\n+\t\t$this->_url           = $url;\n+\t\t$this->_deps          = $deps;\n+\t\t$this->_in_footer     = $in_footer;\n+\t\t$this->_only_register = $only_register;\n+\t\t$this->_screens       = $screens;\n+\t\t$this->_version       = $version;\n+\t\t$this->_strategy      = $strategy;\n+\t}\n+\n+\t\u002F**\n+\t * Set pages not call js.\n+\t *\n+\t * @param string[] $screens .\n+\t *\u002F\n+\tpublic function exclude_screen( array $screens = array() ) {\n+\t\t$this->_exclude_screens = $screens;\n+\t}\n+\n+\t\u002F**\n+\t * Set dependency\n+\t *\n+\t * @param array $deps\n+\t *\u002F\n+\tpublic function set_dependency_js( array $deps ) {\n+\t\t$this->_deps = $deps;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-assets.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-assets.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-assets.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-assets.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,538 +1,586 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Assets\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Assets extends LP_Abstract_Assets {\r\n-\tprotected static $_instance;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\tadd_action( 'wp_print_footer_scripts', array( $this, 'show_overlay' ) );\r\n-\t\t\u002F\u002FNote: hook wp_head load before hook wp_enqueue_scripts\r\n-\t\tadd_action( 'wp_head', [ $this, 'load_scripts_styles_on_head' ], - 1 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default styles in frontend.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function _get_styles(): array {\r\n-\t\t$is_rtl = is_rtl() ? '-rtl' : '';\r\n-\r\n-\t\t$only_register_css_learnpress = false;\r\n-\t\tif ( wp_is_block_theme() ) {\r\n-\t\t\tif ( LP_Page_Controller::is_page_courses() ) {\r\n-\t\t\t\t$only_register_css_learnpress = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( LP_Page_Controller::is_page_single_course() ) {\r\n-\t\t\t\tglobal $post;\r\n-\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\t$course_item = LP_Global::course_item();\r\n-\t\t\t\tif ( ! $course_item ) {\r\n-\t\t\t\t\t$only_register_css_learnpress = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$styles = apply_filters(\r\n-\t\t\t'learn-press\u002Ffrontend-default-styles',\r\n-\t\t\tarray(\r\n-\t\t\t\t'learnpress'         => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'css\u002Flearnpress' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\tLP_PAGE_COURSES,\r\n-\t\t\t\t\t\tLP_PAGE_SINGLE_COURSE,\r\n-\t\t\t\t\t\tLP_PAGE_SINGLE_COURSE_CURRICULUM,\r\n-\t\t\t\t\t\tLP_PAGE_QUIZ,\r\n-\t\t\t\t\t\tLP_PAGE_QUESTION,\r\n-\t\t\t\t\t\tLP_PAGE_CHECKOUT,\r\n-\t\t\t\t\t\tLP_PAGE_BECOME_A_TEACHER,\r\n-\t\t\t\t\t\tLP_PAGE_PROFILE,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$only_register_css_learnpress\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-instructor'      => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'css\u002Finstructor' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-instructors'     => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'css\u002Finstructors' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'learnpress-widgets' => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'css\u002Fwidgets' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t0\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( wp_is_block_theme() ) {\r\n-\t\t\t$styles['learnpress-block'] = new LP_Asset_Key(\r\n-\t\t\t\tself::url( 'css\u002Flearnpress-block' . $is_rtl . self::$_min_assets . '.css' ),\r\n-\t\t\t\tarray(),\r\n-\t\t\t\tarray(),\r\n-\t\t\t\t0\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $styles;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set localize script data\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function _get_script_data(): array {\r\n-\t\t$localize_script = [\r\n-\t\t\t'lp-global'   => array(\r\n-\t\t\t\t\u002F\u002F'url'                                => learn_press_get_current_url(),\r\n-\t\t\t\t'siteurl'                            => site_url(),\r\n-\t\t\t\t'ajax'                               => admin_url( 'admin-ajax.php' ),\r\n-\t\t\t\t'courses_url'                        => learn_press_get_page_link( 'courses' ),\r\n-\t\t\t\t'post_id'                            => get_the_ID(),\r\n-\t\t\t\t'user_id'                            => get_current_user_id(),\r\n-\t\t\t\t'theme'                              => get_stylesheet(),\r\n-\t\t\t\t'localize'                           => array(\r\n-\t\t\t\t\t'button_ok'     => esc_html__( 'OK', 'learnpress' ),\r\n-\t\t\t\t\t'button_cancel' => esc_html__( 'Cancel', 'learnpress' ),\r\n-\t\t\t\t\t'button_yes'    => esc_html__( 'Yes', 'learnpress' ),\r\n-\t\t\t\t\t'button_no'     => esc_html__( 'No', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp_rest_url'                        => get_rest_url(),\r\n-\t\t\t\t\u002F\u002FTodo: should create nonce for guest and user separation\r\n-\t\t\t\t'nonce'                              => wp_create_nonce( 'wp_rest' ),\r\n-\t\t\t\t'option_enable_popup_confirm_finish' => LP_Settings::get_option( 'enable_popup_confirm_finish', 'yes' ),\r\n-\t\t\t\t'is_course_archive'                  => LP_Page_Controller::is_page_courses(),\r\n-\t\t\t\t'lpArchiveSkeleton'                  => lp_archive_skeleton_get_args(),\r\n-\t\t\t\t'lpArchiveLoadAjax'                  => LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0,\r\n-\t\t\t\t'lpArchiveNoLoadAjaxFirst'           => LP_Settings_Courses::is_ajax_load_courses() && LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0,\r\n-\t\t\t\t'lpArchivePaginationType'            => LP_Settings::get_option( 'course_pagination_type' ),\r\n-\t\t\t\t'noLoadCoursesJs'                    => LP_Settings::theme_no_support_load_courses_ajax() ? 1 : 0,\r\n-\t\t\t),\r\n-\t\t\t'lp-checkout' => array(\r\n-\t\t\t\t'ajaxurl'            => home_url( '\u002F' ),\r\n-\t\t\t\t\u002F\u002F'user_checkout'      => LP_Checkout::instance()->get_checkout_email(),\r\n-\t\t\t\t'i18n_processing'    => esc_html__( 'Processing', 'learnpress' ),\r\n-\t\t\t\t'i18n_redirecting'   => esc_html__( 'Redirecting', 'learnpress' ),\r\n-\t\t\t\t'i18n_invalid_field' => esc_html__( 'Invalid field', 'learnpress' ),\r\n-\t\t\t\t'i18n_unknown_error' => esc_html__( 'Unknown error', 'learnpress' ),\r\n-\t\t\t\t'i18n_place_order'   => esc_html__( 'Place order', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'lp-profile'  => array(\r\n-\t\t\t\t'text_upload'       => __( 'Upload', 'learnpress' ),\r\n-\t\t\t\t'text_replace'      => __( 'Replace', 'learnpress' ),\r\n-\t\t\t\t'text_remove'       => __( 'Remove', 'learnpress' ),\r\n-\t\t\t\t'text_save'         => __( 'Save', 'learnpress' ),\r\n-\t\t\t\t'avatar_dimensions' => learn_press_get_avatar_thumb_size(),\r\n-\t\t\t\t'default_avatar'    => get_avatar_url( get_current_user_id() ),\r\n-\t\t\t),\r\n-\t\t\t'lp-quiz'     => learn_press_single_quiz_args(),\r\n-\t\t];\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Ffrontend\u002Flocalize_script', $localize_script );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Localize data for all page frontend.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function localize_data_global(): array {\r\n-\t\t$cover_image_dimensions = LP_Settings::get_option(\r\n-\t\t\t'cover_image_dimensions',\r\n-\t\t\tarray(\r\n-\t\t\t\t'width'  => 1290,\r\n-\t\t\t\t'height' => 250,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$aspectRatio            = $cover_image_dimensions['width'] \u002F $cover_image_dimensions['height'];\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Ffrontend\u002Flocalize-data-global',\r\n-\t\t\t[\r\n-\t\t\t\t'site_url'          => site_url(),\r\n-\t\t\t\t'user_id'           => get_current_user_id(),\r\n-\t\t\t\t'theme'             => get_stylesheet(),\r\n-\t\t\t\t'lp_rest_url'       => get_rest_url(),\r\n-\t\t\t\t'nonce'             => wp_create_nonce( 'wp_rest' ),\r\n-\t\t\t\t'is_course_archive' => LP_Page_Controller::is_page_courses(),\r\n-\t\t\t\t'courses_url'       => learn_press_get_page_link( 'courses' ),\r\n-\t\t\t\t'urlParams'         => lp_archive_skeleton_get_args(),\r\n-\t\t\t\t'lp_version'        => LearnPress::instance()->version,\r\n-\t\t\t\t'lp_rest_load_ajax' => get_rest_url( null, 'lp\u002Fv1\u002Fload_content_via_ajax\u002F' ), \u002F\u002F @deprecated 4.3.0\r\n-\t\t\t\t'ajaxUrl'           => admin_url( 'admin-ajax.php' ),\r\n-\t\t\t\t'lpAjaxUrl'         => LP_Settings::url_handle_lp_ajax(),\r\n-\t\t\t\t'coverImageRatio'   => $aspectRatio,\r\n-\t\t\t\t'toast'             => [\r\n-\t\t\t\t\t'gravity'     => 'bottom',\r\n-\t\t\t\t\t'position'    => 'center',\r\n-\t\t\t\t\t'duration'    => 3000,\r\n-\t\t\t\t\t'close'       => 1,\r\n-\t\t\t\t\t'stopOnFocus' => 1,\r\n-\t\t\t\t\t'classPrefix' => 'lp-toast',\r\n-\t\t\t\t],\r\n-\t\t\t\t'i18n'              => [],\r\n-\t\t\t]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Localize data for all page frontend.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function localize_data_courses(): array {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Ffrontend\u002Flocalize-script\u002Fcourses',\r\n-\t\t\t[\r\n-\t\t\t\t'lpArchiveLoadAjax'        => LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0,\r\n-\t\t\t\t'lpArchiveNoLoadAjaxFirst' => LP_Settings_Courses::is_ajax_load_courses() && LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0,\r\n-\t\t\t\t'lpArchivePaginationType'  => LP_Settings::get_option( 'course_pagination_type' ),\r\n-\t\t\t\t'noLoadCoursesJs'          => LP_Settings::theme_no_support_load_courses_ajax() ? 1 : 0,\r\n-\t\t\t]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Config load scripts\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function _get_scripts(): array {\r\n-\t\t$wp_js = array(\r\n-\t\t\t'jquery',\r\n-\t\t\t'wp-element',\r\n-\t\t\t'wp-compose',\r\n-\t\t\t'wp-data',\r\n-\t\t\t'wp-hooks',\r\n-\t\t\t'wp-api-fetch',\r\n-\t\t\t'lodash',\r\n-\t\t);\r\n-\r\n-\t\t$scripts = apply_filters(\r\n-\t\t\t'learn-press\u002Ffrontend-default-scripts',\r\n-\t\t\tarray(\r\n-\t\t\t\t'vue-libs'             => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'src\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-modal'             => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fmodal' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery' )\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F\u002F lp-plugins-all use only for FE, when FE 2 release will remove it.\r\n-\t\t\t\t'lp-plugins-all'       => new LP_Asset_Key( self::url( 'js\u002Fvendor\u002Fplugins.all.min.js' ) ),\r\n-\t\t\t\t'lp-global'            => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( self::$_folder_source . 'js\u002Fglobal' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery', 'underscore', 'utils' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-utils'             => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Futils' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-load-ajax'         => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002FloadAJAX' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'wp-hooks' ],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-checkout'          => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcheckout' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t[ LP_PAGE_CHECKOUT ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-data-controls'     => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Fjs\u002Fdata-controls' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-config'            => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Flp-configs' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) )\r\n-\t\t\t\t),\r\n-\t\t\t\t\u002F\u002F 'lp-lesson'           => new LP_Asset_Key( self::url( self::$_folder_source .'js\u002Ffrontend\u002Flesson' . self::$_min_assets . '.js' ) ),\r\n-\t\t\t\t'lp-question-types'    => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fquestion-types' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t1\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-single-curriculum' => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fsingle-curriculum' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge(\r\n-\t\t\t\t\t\t$wp_js,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'lp-global',\r\n-\t\t\t\t\t\t\t'lp-utils',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-curriculum'        => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcurriculum' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM, LP_PAGE_SINGLE_COURSE ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-quiz'              => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fquiz' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge(\r\n-\t\t\t\t\t\t$wp_js,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'wp-i18n',\r\n-\t\t\t\t\t\t\t'lp-global',\r\n-\t\t\t\t\t\t\t'lp-utils',\r\n-\t\t\t\t\t\t\t'lp-data-controls',\r\n-\t\t\t\t\t\t\t'lp-question-types',\r\n-\t\t\t\t\t\t\t'lp-modal',\r\n-\t\t\t\t\t\t\t'lp-config',\r\n-\t\t\t\t\t\t\t'lp-single-curriculum',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( LP_PAGE_QUIZ ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-single-course'     => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fsingle-course' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray_merge(\r\n-\t\t\t\t\t\t$wp_js,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'lp-global',\r\n-\t\t\t\t\t\t\t'lp-utils',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-courses'           => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourses' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'lp-global',\r\n-\t\t\t\t\t\t'wp-hooks',\r\n-\t\t\t\t\t), \u002F\u002F when Eduma v5.3.6 release a long time, will be remove lp-global.\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-courses-v2'        => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourses-v2' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'utils', 'wp-hooks' ], \u002F\u002F dependency utils of wp, because js is using wpCookies\r\n-\t\t\t\t\t[ LP_PAGE_COURSES ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-instructors'       => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Finstructors' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-global' ],\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-profile'           => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fprofile' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax', 'wp-i18n' ],\r\n-\t\t\t\t\tarray( LP_PAGE_PROFILE ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-list-students-enrolled' => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'dist\u002Fjs\u002Fadmin\u002Flist-students-enrolled' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-load-ajax' ],\r\n-\t\t\t\t\t[ LP_PAGE_PROFILE ],\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-widgets'           => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fwidgets' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\t[ 'lp-course-filter' ],\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-become-a-teacher'  => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fbecome-teacher' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray( 'jquery' ),\r\n-\t\t\t\t\tarray( LP_PAGE_BECOME_A_TEACHER ),\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t\t),\r\n-\t\t\t\t'lp-course-filter'     => new LP_Asset_Key(\r\n-\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourse-filter' . self::$_min_assets . '.js' ),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\tarray(),\r\n-\t\t\t\t\t1,\r\n-\t\t\t\t\t0,\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\t[ 'strategy' => 'async' ]\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Dequeue script 'smoothPageScroll' on item details, it makes can't scroll, when rewrite page item detail, can check to remove.\r\n-\t\tif ( LP_PAGE_SINGLE_COURSE_CURRICULUM === LP_Page_Controller::page_current() ||\r\n-\t\t\tLP_PAGE_QUIZ === LP_Page_Controller::page_current() ||\r\n-\t\t\tLP_PAGE_QUESTION === LP_Page_Controller::page_current() ) {\r\n-\t\t\twp_dequeue_script( 'smoothPageScroll' );\r\n-\t\t}\r\n-\r\n-\t\treturn $scripts;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load assets\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since 3.2.8\r\n-\t *\u002F\r\n-\tpublic function load_scripts() {\r\n-\t\t$page_current = LP_Page_Controller::page_current();\r\n-\t\t$this->handle_js( $page_current );\r\n-\t\t$this->handle_style( $page_current );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fafter-enqueue-scripts' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add javascript to head\r\n-\t * Add style to head\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function load_scripts_styles_on_head() {\r\n-\t\t$this->load_scripts_on_head();\r\n-\t\t$this->load_styles_on_head();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load scripts on head\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function load_scripts_on_head() {\r\n-\t\tLP_Helper::print_inline_script_tag( 'lpData', $this->localize_data_global(), [ 'id' => 'lpData' ] );\r\n-\t\tLP_Helper::print_inline_script_tag( 'lpSettingCourses', $this->localize_data_courses(), [ 'id' => 'lpSettingCourses' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load styles on head\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function load_styles_on_head() {\r\n-\t\t$max_width         = esc_html( LP_Settings::get_option( 'width_container', '1290px' ) );\r\n-\t\t$padding_container = apply_filters( 'learn-press\u002Fcontainer-padding-width', '1rem' );\r\n-\t\t$primary_color     = esc_html( LP_Settings::get_option( 'primary_color' ) );\r\n-\t\t$secondary_color   = esc_html( LP_Settings::get_option( 'secondary_color' ) );\r\n-\t\t?>\r\n-\t\t\u003Cstyle id=\"learn-press-custom-css\">\r\n-\t\t\t:root {\r\n-\t\t\t\t--lp-container-max-width: \u003C?php echo $max_width; ?>;\r\n-\t\t\t\t--lp-cotainer-padding: \u003C?php echo $padding_container; ?>;\r\n-\t\t\t\t--lp-primary-color: \u003C?php echo ! empty( $primary_color ) ? $primary_color : '#ffb606'; ?>;\r\n-\t\t\t\t--lp-secondary-color: \u003C?php echo ! empty( $secondary_color ) ? $secondary_color : '#442e66'; ?>;\r\n-\t\t\t}\r\n-\t\t\u003C\u002Fstyle>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add lp overlay\r\n-\t *\r\n-\t * @since 3.2.8\r\n-\t * @version 1.0.1\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function show_overlay() {\r\n-\t\t$page_current = LP_Page_Controller::page_current();\r\n-\t\tif ( ! in_array(\r\n-\t\t\t$page_current,\r\n-\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM, LP_PAGE_SINGLE_COURSE, LP_PAGE_QUIZ )\r\n-\t\t) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_popup_confirm_finish', 'yes' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cdiv class=\"lp-overlay\" style=\"display: none\">';\r\n-\t\tlearn_press_get_template( 'global\u002Flp-modal-overlay' );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_admin() ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::$_instance == null ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Shortcut function to get instance of LP_Assets\r\n- *\r\n- * @return LP_Assets|null\r\n- *\u002F\r\n-function learn_press_assets() {\r\n-\treturn LP_Assets::instance();\r\n-}\r\n-\r\n-learn_press_assets();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Assets\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.1\n+ *\u002F\n+\n+use LearnPress\\Services\\OpenAiService;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Assets extends LP_Abstract_Assets {\n+\tprotected static $_instance;\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\n+\t\tadd_action( 'wp_print_footer_scripts', array( $this, 'show_overlay' ) );\n+\t\t\u002F\u002FNote: hook wp_head load before hook wp_enqueue_scripts\n+\t\tadd_action( 'wp_head', [ $this, 'load_scripts_styles_on_head' ], - 1 );\n+\t}\n+\n+\t\u002F**\n+\t * Get default styles in frontend.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function _get_styles(): array {\n+\t\t$is_rtl = is_rtl() ? '-rtl' : '';\n+\n+\t\t$only_register_css_learnpress = false;\n+\t\tif ( wp_is_block_theme() ) {\n+\t\t\tif ( LP_Page_Controller::is_page_courses() ) {\n+\t\t\t\t$only_register_css_learnpress = true;\n+\t\t\t}\n+\n+\t\t\tif ( LP_Page_Controller::is_page_single_course() ) {\n+\t\t\t\tglobal $post;\n+\t\t\t\tsetup_postdata( $post );\n+\t\t\t\t$course_item = LP_Global::course_item();\n+\t\t\t\tif ( ! $course_item ) {\n+\t\t\t\t\t$only_register_css_learnpress = true;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$styles = apply_filters(\n+\t\t\t'learn-press\u002Ffrontend-default-styles',\n+\t\t\tarray(\n+\t\t\t\t'learnpress'         => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'css\u002Flearnpress' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\tLP_PAGE_COURSES,\n+\t\t\t\t\t\tLP_PAGE_SINGLE_COURSE,\n+\t\t\t\t\t\tLP_PAGE_SINGLE_COURSE_CURRICULUM,\n+\t\t\t\t\t\tLP_PAGE_QUIZ,\n+\t\t\t\t\t\tLP_PAGE_QUESTION,\n+\t\t\t\t\t\tLP_PAGE_CHECKOUT,\n+\t\t\t\t\t\tLP_PAGE_BECOME_A_TEACHER,\n+\t\t\t\t\t\tLP_PAGE_PROFILE,\n+\t\t\t\t\t),\n+\t\t\t\t\t$only_register_css_learnpress\n+\t\t\t\t),\n+\t\t\t\t'lp-instructor'      => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'css\u002Finstructor' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-instructors'     => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'css\u002Finstructors' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'learnpress-widgets' => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'css\u002Fwidgets' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-curriculum' => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-curriculum' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-quiz'       => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-quiz' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-edit-question'   => new LP_Asset_Key(\n+\t\t\t\t\t$this->url( 'css\u002Fedit-question' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-course-builder'  => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'css\u002Fcourse-builder' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray( LP_PAGE_COURSE_BUILDER ),\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t\t'lp-tom-select'      => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'src\u002Fcss\u002Fvendor\u002Ftom-select.min.css' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[],\n+\t\t\t\t\t0\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( wp_is_block_theme() ) {\n+\t\t\t$styles['learnpress-block'] = new LP_Asset_Key(\n+\t\t\t\tself::url( 'css\u002Flearnpress-block' . $is_rtl . self::$_min_assets . '.css' ),\n+\t\t\t\tarray(),\n+\t\t\t\tarray(),\n+\t\t\t\t0\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $styles;\n+\t}\n+\n+\t\u002F**\n+\t * Set localize script data\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function _get_script_data(): array {\n+\t\t$localize_script = [\n+\t\t\t'lp-global'   => array(\n+\t\t\t\t\u002F\u002F'url'                                => learn_press_get_current_url(),\n+\t\t\t\t'siteurl'                            => site_url(),\n+\t\t\t\t'ajax'                               => admin_url( 'admin-ajax.php' ),\n+\t\t\t\t'courses_url'                        => learn_press_get_page_link( 'courses' ),\n+\t\t\t\t'post_id'                            => get_the_ID(),\n+\t\t\t\t'user_id'                            => get_current_user_id(),\n+\t\t\t\t'theme'                              => get_stylesheet(),\n+\t\t\t\t'localize'                           => array(\n+\t\t\t\t\t'button_ok'     => esc_html__( 'OK', 'learnpress' ),\n+\t\t\t\t\t'button_cancel' => esc_html__( 'Cancel', 'learnpress' ),\n+\t\t\t\t\t'button_yes'    => esc_html__( 'Yes', 'learnpress' ),\n+\t\t\t\t\t'button_no'     => esc_html__( 'No', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'lp_rest_url'                        => get_rest_url(),\n+\t\t\t\t\u002F\u002FTodo: should create nonce for guest and user separation\n+\t\t\t\t'nonce'                              => wp_create_nonce( 'wp_rest' ),\n+\t\t\t\t'option_enable_popup_confirm_finish' => LP_Settings::get_option( 'enable_popup_confirm_finish', 'yes' ),\n+\t\t\t\t'is_course_archive'                  => LP_Page_Controller::is_page_courses(),\n+\t\t\t\t'lpArchiveSkeleton'                  => lp_archive_skeleton_get_args(),\n+\t\t\t\t'lpArchiveLoadAjax'                  => LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0,\n+\t\t\t\t'lpArchiveNoLoadAjaxFirst'           => LP_Settings_Courses::is_ajax_load_courses() && LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0,\n+\t\t\t\t'lpArchivePaginationType'            => LP_Settings::get_option( 'course_pagination_type' ),\n+\t\t\t\t'noLoadCoursesJs'                    => LP_Settings::theme_no_support_load_courses_ajax() ? 1 : 0,\n+\t\t\t),\n+\t\t\t'lp-checkout' => array(\n+\t\t\t\t'ajaxurl'            => home_url( '\u002F' ),\n+\t\t\t\t\u002F\u002F'user_checkout'      => LP_Checkout::instance()->get_checkout_email(),\n+\t\t\t\t'i18n_processing'    => esc_html__( 'Processing', 'learnpress' ),\n+\t\t\t\t'i18n_redirecting'   => esc_html__( 'Redirecting', 'learnpress' ),\n+\t\t\t\t'i18n_invalid_field' => esc_html__( 'Invalid field', 'learnpress' ),\n+\t\t\t\t'i18n_unknown_error' => esc_html__( 'Unknown error', 'learnpress' ),\n+\t\t\t\t'i18n_place_order'   => esc_html__( 'Place order', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'lp-profile'  => array(\n+\t\t\t\t'text_upload'       => __( 'Upload', 'learnpress' ),\n+\t\t\t\t'text_replace'      => __( 'Replace', 'learnpress' ),\n+\t\t\t\t'text_remove'       => __( 'Remove', 'learnpress' ),\n+\t\t\t\t'text_save'         => __( 'Save', 'learnpress' ),\n+\t\t\t\t'avatar_dimensions' => learn_press_get_avatar_thumb_size(),\n+\t\t\t\t'default_avatar'    => get_avatar_url( get_current_user_id() ),\n+\t\t\t),\n+\t\t\t'lp-quiz'     => learn_press_single_quiz_args(),\n+\t\t];\n+\n+\t\treturn apply_filters( 'learnpress\u002Ffrontend\u002Flocalize_script', $localize_script );\n+\t}\n+\n+\t\u002F**\n+\t * Localize data for all page frontend.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function localize_data_global(): array {\n+\t\t$cover_image_dimensions = LP_Settings::get_option(\n+\t\t\t'cover_image_dimensions',\n+\t\t\tarray(\n+\t\t\t\t'width'  => 1290,\n+\t\t\t\t'height' => 250,\n+\t\t\t)\n+\t\t);\n+\t\t$aspectRatio            = $cover_image_dimensions['width'] \u002F $cover_image_dimensions['height'];\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Ffrontend\u002Flocalize-data-global',\n+\t\t\t[\n+\t\t\t\t'site_url'          => site_url(),\n+\t\t\t\t'user_id'           => get_current_user_id(),\n+\t\t\t\t'theme'             => get_stylesheet(),\n+\t\t\t\t'lp_rest_url'       => get_rest_url(),\n+\t\t\t\t'nonce'             => wp_create_nonce( 'wp_rest' ),\n+\t\t\t\t'is_course_archive' => LP_Page_Controller::is_page_courses(),\n+\t\t\t\t'courses_url'       => learn_press_get_page_link( 'courses' ),\n+\t\t\t\t'urlParams'         => lp_archive_skeleton_get_args(),\n+\t\t\t\t'lp_version'        => LearnPress::instance()->version,\n+\t\t\t\t'lp_rest_load_ajax' => get_rest_url( null, 'lp\u002Fv1\u002Fload_content_via_ajax\u002F' ), \u002F\u002F @deprecated 4.3.0\n+\t\t\t\t'ajaxUrl'           => admin_url( 'admin-ajax.php' ),\n+\t\t\t\t'lpAjaxUrl'         => LP_Settings::url_handle_lp_ajax(),\n+\t\t\t\t'coverImageRatio'   => $aspectRatio,\n+\t\t\t\t'toast'             => [\n+\t\t\t\t\t'gravity'     => 'bottom',\n+\t\t\t\t\t'position'    => 'center',\n+\t\t\t\t\t'duration'    => 3000,\n+\t\t\t\t\t'close'       => 1,\n+\t\t\t\t\t'stopOnFocus' => 1,\n+\t\t\t\t\t'classPrefix' => 'lp-toast',\n+\t\t\t\t],\n+\t\t\t\t'i18n'              => [\n+\t\t\t\t\t'yes'              => esc_html__( 'Yes' ),\n+\t\t\t\t\t'cancel'           => esc_html__( 'Cancel' ),\n+\t\t\t\t\t'generate_with_ai' => esc_html__( 'Generate with AI', 'learnpress' ),\n+\t\t\t\t\t'confirm_close_ai' => esc_html__( 'Are you sure you want to close? Generate data will stop.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'enable_open_ai'    => OpenAiService::instance()->is_enable()\n+\t\t\t\t\t&& ! empty( LP_Settings::get_option( 'open_ai_secret_key', '' ) ),\n+\t\t\t]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Localize data for all page frontend.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function localize_data_courses(): array {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Ffrontend\u002Flocalize-script\u002Fcourses',\n+\t\t\t[\n+\t\t\t\t'lpArchiveLoadAjax'        => LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0,\n+\t\t\t\t'lpArchiveNoLoadAjaxFirst' => LP_Settings_Courses::is_ajax_load_courses() && LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0,\n+\t\t\t\t'lpArchivePaginationType'  => LP_Settings::get_option( 'course_pagination_type' ),\n+\t\t\t\t'noLoadCoursesJs'          => LP_Settings::theme_no_support_load_courses_ajax() ? 1 : 0,\n+\t\t\t]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Config load scripts\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function _get_scripts(): array {\n+\t\t$wp_js = array(\n+\t\t\t'jquery',\n+\t\t\t'wp-element',\n+\t\t\t'wp-compose',\n+\t\t\t'wp-data',\n+\t\t\t'wp-hooks',\n+\t\t\t'wp-api-fetch',\n+\t\t\t'lodash',\n+\t\t);\n+\n+\t\t$scripts = apply_filters(\n+\t\t\t'learn-press\u002Ffrontend-default-scripts',\n+\t\t\tarray(\n+\t\t\t\t'vue-libs'             => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'src\u002Fjs\u002Fvendor\u002Fvue\u002Fvue_libs_special.min.js' )\n+\t\t\t\t),\n+\t\t\t\t'lp-modal'             => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fmodal' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery' )\n+\t\t\t\t),\n+\t\t\t\t\u002F\u002F lp-plugins-all use only for FE, when FE 2 release will remove it.\n+\t\t\t\t'lp-plugins-all'       => new LP_Asset_Key( self::url( 'js\u002Fvendor\u002Fplugins.all.min.js' ) ),\n+\t\t\t\t'lp-global'            => new LP_Asset_Key(\n+\t\t\t\t\tself::url( self::$_folder_source . 'js\u002Fglobal' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery', 'underscore', 'utils' )\n+\t\t\t\t),\n+\t\t\t\t'lp-utils'             => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Futils' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery' )\n+\t\t\t\t),\n+\t\t\t\t'lp-load-ajax'         => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002FloadAJAX' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'wp-hooks' ],\n+\t\t\t\t\t[],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-checkout'          => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcheckout' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\t[ LP_PAGE_CHECKOUT ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-data-controls'     => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Fjs\u002Fdata-controls' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) )\n+\t\t\t\t),\n+\t\t\t\t'lp-config'            => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Flp-configs' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) )\n+\t\t\t\t),\n+\t\t\t\t\u002F\u002F 'lp-lesson'           => new LP_Asset_Key( self::url( self::$_folder_source .'js\u002Ffrontend\u002Flesson' . self::$_min_assets . '.js' ) ),\n+\t\t\t\t'lp-question-types'    => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fquestion-types' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge( $wp_js, array( 'lp-global' ) ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1,\n+\t\t\t\t\t1\n+\t\t\t\t),\n+\t\t\t\t'lp-single-curriculum' => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fsingle-curriculum' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge(\n+\t\t\t\t\t\t$wp_js,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'lp-global',\n+\t\t\t\t\t\t\t'lp-utils',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-curriculum'        => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcurriculum' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM, LP_PAGE_SINGLE_COURSE ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-quiz'              => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fquiz' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge(\n+\t\t\t\t\t\t$wp_js,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'wp-i18n',\n+\t\t\t\t\t\t\t'lp-global',\n+\t\t\t\t\t\t\t'lp-utils',\n+\t\t\t\t\t\t\t'lp-data-controls',\n+\t\t\t\t\t\t\t'lp-question-types',\n+\t\t\t\t\t\t\t'lp-modal',\n+\t\t\t\t\t\t\t'lp-config',\n+\t\t\t\t\t\t\t'lp-single-curriculum',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( LP_PAGE_QUIZ ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-single-course'     => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fsingle-course' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray_merge(\n+\t\t\t\t\t\t$wp_js,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'lp-global',\n+\t\t\t\t\t\t\t'lp-utils',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( LP_PAGE_SINGLE_COURSE ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-courses'           => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourses' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'lp-global',\n+\t\t\t\t\t\t'wp-hooks',\n+\t\t\t\t\t), \u002F\u002F when Eduma v5.3.6 release a long time, will be remove lp-global.\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-courses-v2'        => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourses-v2' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'utils', 'wp-hooks' ], \u002F\u002F dependency utils of wp, because js is using wpCookies\n+\t\t\t\t\t[ LP_PAGE_COURSES ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-instructors'       => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Finstructors' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-global' ],\n+\t\t\t\t\t[],\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-profile'           => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fprofile' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax', 'wp-i18n' ],\n+\t\t\t\t\tarray( LP_PAGE_PROFILE ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-list-students-enrolled' => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'dist\u002Fjs\u002Fadmin\u002Flist-students-enrolled' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-load-ajax' ],\n+\t\t\t\t\t[ LP_PAGE_PROFILE ],\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-widgets'           => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fwidgets' . self::$_min_assets . '.js' ),\n+\t\t\t\t\t[ 'lp-course-filter' ],\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-become-a-teacher'  => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fbecome-teacher' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'jquery' ),\n+\t\t\t\t\tarray( LP_PAGE_BECOME_A_TEACHER ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t1,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-course-filter'     => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourse-filter' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\tarray(),\n+\t\t\t\t\t1,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'async' ]\n+\t\t\t\t),\n+\t\t\t\t'lp-course-builder'    => new LP_Asset_Key(\n+\t\t\t\t\tself::url( 'js\u002Fdist\u002Ffrontend\u002Fcourse-builder' . self::$_min_assets . '.js' ),\n+\t\t\t\t\tarray( 'wp-tinymce', 'editor', 'lp-load-ajax' ),\n+\t\t\t\t\tarray( LP_PAGE_COURSE_BUILDER ),\n+\t\t\t\t\t0,\n+\t\t\t\t\t0,\n+\t\t\t\t\t'',\n+\t\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t\u002F\u002F Dequeue script 'smoothPageScroll' on item details, it makes can't scroll, when rewrite page item detail, can check to remove.\n+\t\tif ( LP_PAGE_SINGLE_COURSE_CURRICULUM === LP_Page_Controller::page_current() ||\n+\t\t\tLP_PAGE_QUIZ === LP_Page_Controller::page_current() ||\n+\t\t\tLP_PAGE_QUESTION === LP_Page_Controller::page_current() ) {\n+\t\t\twp_dequeue_script( 'smoothPageScroll' );\n+\t\t}\n+\n+\t\treturn $scripts;\n+\t}\n+\n+\t\u002F**\n+\t * Load assets\n+\t *\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @since 3.2.8\n+\t *\u002F\n+\tpublic function load_scripts() {\n+\t\t$page_current = LP_Page_Controller::page_current();\n+\t\t$this->handle_js( $page_current );\n+\t\t$this->handle_style( $page_current );\n+\n+\t\tdo_action( 'learn-press\u002Fafter-enqueue-scripts' );\n+\t}\n+\n+\t\u002F**\n+\t * Add javascript to head\n+\t * Add style to head\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function load_scripts_styles_on_head() {\n+\t\t$this->load_scripts_on_head();\n+\t\t$this->load_styles_on_head();\n+\t}\n+\n+\t\u002F**\n+\t * Load scripts on head\n+\t * @return void\n+\t *\u002F\n+\tpublic function load_scripts_on_head() {\n+\t\tLP_Helper::print_inline_script_tag( 'lpData', $this->localize_data_global(), [ 'id' => 'lpData' ] );\n+\t\tLP_Helper::print_inline_script_tag( 'lpSettingCourses', $this->localize_data_courses(), [ 'id' => 'lpSettingCourses' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Load styles on head\n+\t * @return void\n+\t *\u002F\n+\tpublic function load_styles_on_head() {\n+\t\t$max_width         = esc_html( LP_Settings::get_option( 'width_container', '1290px' ) );\n+\t\t$padding_container = apply_filters( 'learn-press\u002Fcontainer-padding-width', '1rem' );\n+\t\t$primary_color     = esc_html( LP_Settings::get_option( 'primary_color' ) );\n+\t\t$secondary_color   = esc_html( LP_Settings::get_option( 'secondary_color' ) );\n+\t\t?>\n+\t\t\u003Cstyle id=\"learn-press-custom-css\">\n+\t\t\t:root {\n+\t\t\t\t--lp-container-max-width: \u003C?php echo $max_width; ?>;\n+\t\t\t\t--lp-cotainer-padding: \u003C?php echo $padding_container; ?>;\n+\t\t\t\t--lp-primary-color: \u003C?php echo ! empty( $primary_color ) ? $primary_color : '#ffb606'; ?>;\n+\t\t\t\t--lp-secondary-color: \u003C?php echo ! empty( $secondary_color ) ? $secondary_color : '#442e66'; ?>;\n+\t\t\t}\n+\t\t\u003C\u002Fstyle>\n+\t\t\u003C?php\n+\t}\n+\n+\t\u002F**\n+\t * Add lp overlay\n+\t *\n+\t * @since 3.2.8\n+\t * @version 1.0.1\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function show_overlay() {\n+\t\t$page_current = LP_Page_Controller::page_current();\n+\t\tif ( ! in_array(\n+\t\t\t$page_current,\n+\t\t\tarray( LP_PAGE_SINGLE_COURSE_CURRICULUM, LP_PAGE_SINGLE_COURSE, LP_PAGE_QUIZ )\n+\t\t) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_popup_confirm_finish', 'yes' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo '\u003Cdiv class=\"lp-overlay\" style=\"display: none\">';\n+\t\tlearn_press_get_template( 'global\u002Flp-modal-overlay' );\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_admin() ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\tif ( self::$_instance == null ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+\u002F**\n+ * Shortcut function to get instance of LP_Assets\n+ *\n+ * @return LP_Assets|null\n+ *\u002F\n+function learn_press_assets() {\n+\treturn LP_Assets::instance();\n+}\n+\n+learn_press_assets();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-autoloader.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-autoloader.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-autoloader.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-autoloader.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,115 +1,115 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP_Autoloader\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-class LP_Autoloader {\r\n-\r\n-\t\u002F**\r\n-\t * Path to the includes directory\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprivate $include_path = '';\r\n-\r\n-\tprotected $time = 0;\r\n-\r\n-\t\u002F**\r\n-\t * The Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tif ( function_exists( '__autoload' ) ) {\r\n-\t\t\tspl_autoload_register( '__autoload' );\r\n-\t\t}\r\n-\r\n-\t\tspl_autoload_register( array( $this, 'autoload' ) );\r\n-\r\n-\t\t$this->include_path = untrailingslashit( LP_PLUGIN_PATH ) . '\u002Finc\u002F';\r\n-\r\n-\t\tadd_action( 'shutdown', array( $this, 'output_time' ) );\r\n-\t}\r\n-\r\n-\tpublic function output_time() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Take a class name and turn it into a file name\r\n-\t *\r\n-\t * @param  string $class\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function get_file_name_from_class( $class ) {\r\n-\t\treturn 'class-' . str_replace( '_', '-', strtolower( $class ) ) . '.php';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Include a class file\r\n-\t *\r\n-\t * @param  string $path\r\n-\t *\r\n-\t * @return bool successful or not\r\n-\t *\u002F\r\n-\tprivate function load_file( $path ) {\r\n-\t\tif ( $path && is_readable( $path ) ) {\r\n-\t\t\tinclude_once( $path );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *\r\n-\t * @param string $class\r\n-\t *\u002F\r\n-\tpublic function autoload( $class ) {\r\n-\t\t$class = strtolower( $class );\r\n-\t\t$start = microtime( true );\r\n-\t\t$file  = $this->get_file_name_from_class( $class );\r\n-\r\n-\t\tif ( preg_match( '~^lp_abstract_shortcode(.*)$~', $class, $m ) ) {\r\n-\t\t\t$file = 'abstract-shortcode' . str_replace( '_', '-', $m[1] ) . '.php';\r\n-\t\t\t$path = $this->include_path . 'abstracts\u002F';\r\n-\t\t} elseif ( preg_match( '~^lp_shortcode_(.*)$~', $class, $m ) ) {\r\n-\t\t\t$path = $this->include_path . 'Shortcodes\u002F';\r\n-\t\t} else {\r\n-\r\n-\t\t\t\u002F\u002F payment gateways\r\n-\t\t\tif ( strpos( $class, 'lp_gateway_' ) === 0 ) {\r\n-\t\t\t\t$path = $this->include_path . 'gateways\u002F' . substr( str_replace( '_', '-', $class ), 11 ) . '\u002F';\r\n-\t\t\t} elseif ( preg_match( '!lp_meta_box_|rwmb_!', $class, $matches ) ) { \u002F\u002F meta box fields\r\n-\r\n-\t\t\t\t$file = 'class-' . substr( str_replace( '_', '-', $class ), 5 ) . '.php';\r\n-\t\t\t\t$path = $this->include_path . 'admin\u002Fmeta-boxes\u002F';\r\n-\r\n-\t\t\t} else {\r\n-\t\t\t\t$file = 'class-' . str_replace( '_', '-', $class ) . '.php';\r\n-\t\t\t\t$path = dirname( __FILE__ ) . '\u002F';\r\n-\t\t\t\tif ( strpos( $class, 'lp_user' ) !== false || $class == 'lp_abstract_user' ) {\r\n-\t\t\t\t\t$path .= 'user\u002F';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! file_exists( $path . $file ) ) {\r\n-\t\t\t\t\t$segs = explode( '_', $class );\r\n-\t\t\t\t\tif ( ! empty( $segs[1] ) ) {\r\n-\t\t\t\t\t\t$path .= $segs[1] . '\u002F';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$this->time += ( microtime( true ) - $start );\r\n-\t\t$this->load_file( $path . $file );\r\n-\t}\r\n-}\r\n-\r\n-new LP_Autoloader();\r\n+\u003C?php\n+\n+\u002F**\n+ * LP_Autoloader\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+class LP_Autoloader {\n+\n+\t\u002F**\n+\t * Path to the includes directory\n+\t * @var string\n+\t *\u002F\n+\tprivate $include_path = '';\n+\n+\tprotected $time = 0;\n+\n+\t\u002F**\n+\t * The Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tif ( function_exists( '__autoload' ) ) {\n+\t\t\tspl_autoload_register( '__autoload' );\n+\t\t}\n+\n+\t\tspl_autoload_register( array( $this, 'autoload' ) );\n+\n+\t\t$this->include_path = untrailingslashit( LP_PLUGIN_PATH ) . '\u002Finc\u002F';\n+\n+\t\tadd_action( 'shutdown', array( $this, 'output_time' ) );\n+\t}\n+\n+\tpublic function output_time() {\n+\t}\n+\n+\t\u002F**\n+\t * Take a class name and turn it into a file name\n+\t *\n+\t * @param  string $class\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function get_file_name_from_class( $class ) {\n+\t\treturn 'class-' . str_replace( '_', '-', strtolower( $class ) ) . '.php';\n+\t}\n+\n+\t\u002F**\n+\t * Include a class file\n+\t *\n+\t * @param  string $path\n+\t *\n+\t * @return bool successful or not\n+\t *\u002F\n+\tprivate function load_file( $path ) {\n+\t\tif ( $path && is_readable( $path ) ) {\n+\t\t\tinclude_once( $path );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t *\n+\t * @param string $class\n+\t *\u002F\n+\tpublic function autoload( $class ) {\n+\t\t$class = strtolower( $class );\n+\t\t$start = microtime( true );\n+\t\t$file  = $this->get_file_name_from_class( $class );\n+\n+\t\tif ( preg_match( '~^lp_abstract_shortcode(.*)$~', $class, $m ) ) {\n+\t\t\t$file = 'abstract-shortcode' . str_replace( '_', '-', $m[1] ) . '.php';\n+\t\t\t$path = $this->include_path . 'abstracts\u002F';\n+\t\t} elseif ( preg_match( '~^lp_shortcode_(.*)$~', $class, $m ) ) {\n+\t\t\t$path = $this->include_path . 'Shortcodes\u002F';\n+\t\t} else {\n+\n+\t\t\t\u002F\u002F payment gateways\n+\t\t\tif ( strpos( $class, 'lp_gateway_' ) === 0 ) {\n+\t\t\t\t$path = $this->include_path . 'gateways\u002F' . substr( str_replace( '_', '-', $class ), 11 ) . '\u002F';\n+\t\t\t} elseif ( preg_match( '!lp_meta_box_|rwmb_!', $class, $matches ) ) { \u002F\u002F meta box fields\n+\n+\t\t\t\t$file = 'class-' . substr( str_replace( '_', '-', $class ), 5 ) . '.php';\n+\t\t\t\t$path = $this->include_path . 'admin\u002Fmeta-boxes\u002F';\n+\n+\t\t\t} else {\n+\t\t\t\t$file = 'class-' . str_replace( '_', '-', $class ) . '.php';\n+\t\t\t\t$path = dirname( __FILE__ ) . '\u002F';\n+\t\t\t\tif ( strpos( $class, 'lp_user' ) !== false || $class == 'lp_abstract_user' ) {\n+\t\t\t\t\t$path .= 'user\u002F';\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! file_exists( $path . $file ) ) {\n+\t\t\t\t\t$segs = explode( '_', $class );\n+\t\t\t\t\tif ( ! empty( $segs[1] ) ) {\n+\t\t\t\t\t\t$path .= $segs[1] . '\u002F';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t$this->time += ( microtime( true ) - $start );\n+\t\t$this->load_file( $path . $file );\n+\t}\n+}\n+\n+new LP_Autoloader();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-breadcrumb.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-breadcrumb.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-breadcrumb.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-breadcrumb.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,415 +1,415 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-\u002F**\r\n- * LP_Breadcrumb class.\r\n- * This class is modified from WC_Breadcrumb of WooCommerce. Thanks to WooThemes :)\r\n- *\r\n- * @class          LP_Breadcrumb\r\n- *\r\n- * @author         ThimPress\r\n- * @version        1.0\r\n- * @package        LearnPress\u002FClasses\r\n- *\u002F\r\n-class LP_Breadcrumb {\r\n-\r\n-\t\u002F**\r\n-\t * Breadcrumb trail\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprivate $crumbs = array();\r\n-\r\n-\t\u002F**\r\n-\t * Add a crumb so we don't get lost\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param string $link\r\n-\t *\u002F\r\n-\tpublic function add_crumb( $name, $link = '' ) {\r\n-\t\t$this->crumbs[] = array(\r\n-\t\t\t$name,\r\n-\t\t\t$link,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Reset crumbs\r\n-\t *\u002F\r\n-\tpublic function reset() {\r\n-\t\t$this->crumbs = array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the breadcrumb\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_breadcrumb() {\r\n-\t\treturn apply_filters( 'learn_press_get_breadcrumb', $this->crumbs, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate breadcrumb trail\r\n-\t *\r\n-\t * @return array of breadcrumbs\r\n-\t *\u002F\r\n-\tpublic function generate() {\r\n-\t\t$conditionals = array(\r\n-\t\t\t'is_single',\r\n-\t\t\t'learn_press_is_course_category',\r\n-\t\t\t'learn_press_is_course_tag',\r\n-\t\t\t'learn_press_is_courses',\r\n-\t\t\t'is_page',\r\n-\t\t\t'is_post_type_archive',\r\n-\t\t\t'is_category',\r\n-\t\t\t'is_tag',\r\n-\t\t\t'is_author',\r\n-\t\t\t'is_date',\r\n-\t\t\t'is_tax',\r\n-\t\t\t'is_home',\r\n-\t\t\t'is_404',\r\n-\t\t\t'is_attachment',\r\n-\t\t);\r\n-\r\n-\t\tif ( ( ! is_front_page() && ! ( is_post_type_archive() && get_option( 'page_on_front' ) == learn_press_get_page_id( 'courses' ) ) ) || is_paged() ) {\r\n-\t\t\tforeach ( $conditionals as $conditional ) {\r\n-\r\n-\t\t\t\tif ( is_callable( $conditional ) && call_user_func( $conditional ) ) {\r\n-\t\t\t\t\t$conditional = preg_replace( '\u002F^learn_press_\u002F', '', $conditional );\r\n-\t\t\t\t\t$conditional = preg_replace( '\u002F^is_\u002F', '', $conditional );\r\n-\t\t\t\t\tif ( is_callable( array( $this, 'add_crumbs_' . $conditional ) ) ) {\r\n-\t\t\t\t\t\tcall_user_func( array( $this, 'add_crumbs_' . $conditional ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->search_trail();\r\n-\r\n-\t\t\treturn $this->get_breadcrumb();\r\n-\t\t}\r\n-\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Prepend the courses page to courses breadcrumbs\r\n-\t *\u002F\r\n-\tprivate function prepend_courses_page() {\r\n-\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\r\n-\t\t$courses_page    = get_post( $courses_page_id );\r\n-\r\n-\t\t\u002F\u002F If permalinks contain the courses page in the URI prepend the breadcrumb with courses\r\n-\t\tif ( $courses_page_id && $courses_page \u002F*&& strstr( $permalinks['lp_course_base'], '\u002F' . $courses_page->post_name )*\u002F && get_option( 'page_on_front' ) != $courses_page_id ) {\r\n-\t\t\t$this->add_crumb( get_the_title( $courses_page ), get_permalink( $courses_page ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * is home trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_home() {\r\n-\t\t$this->add_crumb( single_post_title( '', false ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * 404 trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_404() {\r\n-\t\t$this->add_crumb( __( 'Error 404', 'learnpress' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * attachment trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_attachment() {\r\n-\t\tglobal $post;\r\n-\r\n-\t\t$this->add_crumbs_single( $post->post_parent, get_permalink( $post->post_parent ) );\r\n-\t\t$this->add_crumb( get_the_title(), get_permalink() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Single post trail\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param string $permalink\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_single( $post_id = 0, $permalink = '' ) {\r\n-\t\tif ( ! $post_id ) {\r\n-\t\t\tglobal $post;\r\n-\t\t} else {\r\n-\t\t\t$post = get_post( $post_id );\r\n-\t\t}\r\n-\t\tif ( LP_COURSE_CPT === get_post_type( $post ) ) {\r\n-\t\t\t$this->prepend_courses_page();\r\n-\r\n-\t\t\t$terms = learn_press_get_course_terms(\r\n-\t\t\t\t$post->ID,\r\n-\t\t\t\t'course_category',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'orderby' => 'parent',\r\n-\t\t\t\t\t'order'   => 'DESC',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $terms ) {\r\n-\t\t\t\t$main_term = apply_filters( 'learn_press_breadcrumb_main_term', $terms[0], $terms );\r\n-\t\t\t\t$this->term_ancestors( $main_term->term_id, 'course_category' );\r\n-\t\t\t\t$this->add_crumb( $main_term->name, get_term_link( $main_term ) );\r\n-\t\t\t}\r\n-\t\t} elseif ( 'post' != get_post_type( $post ) ) {\r\n-\t\t\t$post_type = get_post_type_object( get_post_type( $post ) );\r\n-\t\t\t$this->add_crumb( $post_type->labels->singular_name, get_post_type_archive_link( get_post_type( $post ) ) );\r\n-\t\t} else {\r\n-\t\t\t$cat = current( get_the_category( $post ) );\r\n-\t\t\tif ( $cat ) {\r\n-\t\t\t\t$this->term_ancestors( $cat->term_id, 'post_category' );\r\n-\t\t\t\t$this->add_crumb( $cat->name, get_term_link( $cat ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F$this->add_crumb( get_the_title( $post ), $permalink );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Page trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_page() {\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( $post->post_parent ) {\r\n-\t\t\t$parent_crumbs = array();\r\n-\t\t\t$parent_id     = $post->post_parent;\r\n-\r\n-\t\t\twhile ( $parent_id ) {\r\n-\t\t\t\t$page            = get_post( $parent_id );\r\n-\t\t\t\t$parent_id       = $page->post_parent;\r\n-\t\t\t\t$parent_crumbs[] = array( get_the_title( $page->ID ), get_permalink( $page->ID ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$parent_crumbs = array_reverse( $parent_crumbs );\r\n-\r\n-\t\t\tforeach ( $parent_crumbs as $crumb ) {\r\n-\t\t\t\t$this->add_crumb( $crumb[0], $crumb[1] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->add_crumb( get_the_title(), get_permalink() );\r\n-\t\t$this->endpoint_trail();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Course category trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_course_category() {\r\n-\t\tglobal $wp_query;\r\n-\t\t$current_term = $this->get_queried_object();\r\n-\r\n-\t\tif ( isset( $current_term->term_id ) ) {\r\n-\t\t\t$this->prepend_courses_page();\r\n-\t\t\t$this->term_ancestors( $current_term->term_id, 'course_category' );\r\n-\t\t\t$this->add_crumb( $current_term->name );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Course tag trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_course_tag() {\r\n-\t\tglobal $wp_query;\r\n-\t\t$current_term = $this->get_queried_object();\r\n-\r\n-\t\t$this->prepend_courses_page();\r\n-\t\t$this->add_crumb( sprintf( __( 'Courses tagged &ldquo;%s&rdquo;', 'learnpress' ), $current_term->name ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Courses archive breadcrumb\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_courses() {\r\n-\t\t$course_page_id = learn_press_get_page_id( 'courses' );\r\n-\t\tif ( get_option( 'page_on_front' ) == $course_page_id ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$_name = $course_page_id ? get_the_title( $course_page_id ) : '';\r\n-\r\n-\t\tif ( ! $_name ) {\r\n-\t\t\t$course_post_type = get_post_type_object( LP_COURSE_CPT );\r\n-\r\n-\t\t\tif ( $course_post_type ) {\r\n-\t\t\t\t$_name = $course_post_type->labels->singular_name;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->add_crumb( $_name, get_post_type_archive_link( LP_COURSE_CPT ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Post type archive trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_post_type_archive() {\r\n-\t\t$post_type = get_post_type_object( get_post_type() );\r\n-\r\n-\t\tif ( $post_type ) {\r\n-\t\t\t$this->add_crumb( $post_type->labels->singular_name, get_post_type_archive_link( get_post_type() ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Category trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_category() {\r\n-\t\tglobal $wp_query;\r\n-\t\t$this_category = get_category( $this->get_queried_object() );\r\n-\r\n-\t\tif ( 0 != $this_category->parent ) {\r\n-\t\t\t$this->term_ancestors( $this_category->parent, 'post_category' );\r\n-\t\t\t$this->add_crumb( $this_category->name, get_category_link( $this_category->term_id ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->add_crumb( single_cat_title( '', false ), get_category_link( $this_category->term_id ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Tag trail\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_tag() {\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\t$queried_object = $this->get_queried_object();\r\n-\t\t$this->add_crumb( sprintf( __( 'Posts tagged &ldquo;%s&rdquo;', 'learnpress' ), single_tag_title( '', false ) ), get_tag_link( $queried_object->term_id ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add crumbs for date based archives\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_date() {\r\n-\t\tif ( is_year() || is_month() || is_day() ) {\r\n-\t\t\t$this->add_crumb( get_the_time( 'Y' ), get_year_link( get_the_time( 'Y' ) ) );\r\n-\t\t}\r\n-\t\tif ( is_month() || is_day() ) {\r\n-\t\t\t$this->add_crumb( get_the_time( 'F' ), get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) );\r\n-\t\t}\r\n-\t\tif ( is_day() ) {\r\n-\t\t\t$this->add_crumb( get_the_time( 'd' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add crumbs for date based archives\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_tax() {\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\t$this_term = $this->get_queried_object();\r\n-\t\t$taxonomy  = get_taxonomy( $this_term->taxonomy );\r\n-\r\n-\t\t$this->add_crumb( $taxonomy->labels->name );\r\n-\r\n-\t\tif ( 0 != $this_term->parent ) {\r\n-\t\t\t$this->term_ancestors( $this_term->parent, 'post_category' );\r\n-\t\t\t$this->add_crumb( $this_term->name, get_term_link( $this_term->term_id, $this_term->taxonomy ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->add_crumb( single_term_title( '', false ), get_term_link( $this_term->term_id, $this_term->taxonomy ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default queried object by WP.\r\n-\t * Fixed issue when viewing course category the text in breadcrumb is blank.\r\n-\t *\r\n-\t * @return object\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tprivate function get_queried_object() {\r\n-\t\tstatic $default_queried_object;\r\n-\r\n-\t\tif ( $default_queried_object ) {\r\n-\t\t\treturn $default_queried_object;\r\n-\t\t}\r\n-\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\t\u002F\u002F Store the current queried object\r\n-\t\t$queried_object    = $wp_query->queried_object;\r\n-\t\t$queried_object_id = $wp_query->queried_object_id;\r\n-\r\n-\t\t\u002F\u002F Clear the current queried object to ensure we get the default.\r\n-\t\t$wp_query->queried_object    = null;\r\n-\t\t$wp_query->queried_object_id = null;\r\n-\r\n-\t\t$default_queried_object = $wp_query->get_queried_object();\r\n-\r\n-\t\t\u002F\u002F Restore current queried object\r\n-\t\t$wp_query->queried_object    = $queried_object;\r\n-\t\t$wp_query->queried_object_id = $queried_object_id;\r\n-\r\n-\t\treturn $default_queried_object;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add a breadcrumb for author archives\r\n-\t *\u002F\r\n-\tprivate function add_crumbs_author() {\r\n-\t\tglobal $author;\r\n-\r\n-\t\t$userdata = get_userdata( $author );\r\n-\t\t$this->add_crumb( sprintf( __( 'Author: %s', 'learnpress' ), $userdata->display_name ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add crumbs for a term\r\n-\t *\r\n-\t * @param string $taxonomy\r\n-\t *\u002F\r\n-\tprivate function term_ancestors( $term_id, $taxonomy ) {\r\n-\t\t$ancestors = get_ancestors( $term_id, $taxonomy );\r\n-\t\t$ancestors = array_reverse( $ancestors );\r\n-\r\n-\t\tforeach ( $ancestors as $ancestor ) {\r\n-\t\t\t$ancestor = get_term( $ancestor, $taxonomy );\r\n-\r\n-\t\t\tif ( ! is_wp_error( $ancestor ) && $ancestor ) {\r\n-\t\t\t\t$this->add_crumb( $ancestor->name, get_term_link( $ancestor ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Endpoints\r\n-\t *\u002F\r\n-\tprivate function endpoint_trail() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add a breadcrumb for search results\r\n-\t *\u002F\r\n-\tprivate function search_trail() {\r\n-\t\tif ( is_search() ) {\r\n-\t\t\t$this->add_crumb( sprintf( __( 'Search results for &ldquo;%s&rdquo;', 'learnpress' ), get_search_query() ), esc_url_raw( remove_query_arg( 'paged' ) ) );\r\n-\t\t} elseif ( ! empty( $_GET['c_search'] ) ) {\r\n-\t\t\t$this->add_crumb(\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( 'Search results for &ldquo;%s&rdquo;', 'learnpress' ),\r\n-\t\t\t\t\tesc_html( $_GET['c_search'] )\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add a breadcrumb for pagination\r\n-\t *\u002F\r\n-\t\u002F*private function paged_trail() {\r\n-\t\tif ( get_query_var( 'paged' ) ) {\r\n-\t\t\t$this->add_crumb( sprintf( __( 'Page %d', 'learnpress' ), get_query_var( 'paged' ) ) );\r\n-\t\t}\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+\u002F**\n+ * LP_Breadcrumb class.\n+ * This class is modified from WC_Breadcrumb of WooCommerce. Thanks to WooThemes :)\n+ *\n+ * @class          LP_Breadcrumb\n+ *\n+ * @author         ThimPress\n+ * @version        1.0\n+ * @package        LearnPress\u002FClasses\n+ *\u002F\n+class LP_Breadcrumb {\n+\n+\t\u002F**\n+\t * Breadcrumb trail\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprivate $crumbs = array();\n+\n+\t\u002F**\n+\t * Add a crumb so we don't get lost\n+\t *\n+\t * @param string $name\n+\t * @param string $link\n+\t *\u002F\n+\tpublic function add_crumb( $name, $link = '' ) {\n+\t\t$this->crumbs[] = array(\n+\t\t\t$name,\n+\t\t\t$link,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Reset crumbs\n+\t *\u002F\n+\tpublic function reset() {\n+\t\t$this->crumbs = array();\n+\t}\n+\n+\t\u002F**\n+\t * Get the breadcrumb\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_breadcrumb() {\n+\t\treturn apply_filters( 'learn_press_get_breadcrumb', $this->crumbs, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Generate breadcrumb trail\n+\t *\n+\t * @return array of breadcrumbs\n+\t *\u002F\n+\tpublic function generate() {\n+\t\t$conditionals = array(\n+\t\t\t'is_single',\n+\t\t\t'learn_press_is_course_category',\n+\t\t\t'learn_press_is_course_tag',\n+\t\t\t'learn_press_is_courses',\n+\t\t\t'is_page',\n+\t\t\t'is_post_type_archive',\n+\t\t\t'is_category',\n+\t\t\t'is_tag',\n+\t\t\t'is_author',\n+\t\t\t'is_date',\n+\t\t\t'is_tax',\n+\t\t\t'is_home',\n+\t\t\t'is_404',\n+\t\t\t'is_attachment',\n+\t\t);\n+\n+\t\tif ( ( ! is_front_page() && ! ( is_post_type_archive() && get_option( 'page_on_front' ) == learn_press_get_page_id( 'courses' ) ) ) || is_paged() ) {\n+\t\t\tforeach ( $conditionals as $conditional ) {\n+\n+\t\t\t\tif ( is_callable( $conditional ) && call_user_func( $conditional ) ) {\n+\t\t\t\t\t$conditional = preg_replace( '\u002F^learn_press_\u002F', '', $conditional );\n+\t\t\t\t\t$conditional = preg_replace( '\u002F^is_\u002F', '', $conditional );\n+\t\t\t\t\tif ( is_callable( array( $this, 'add_crumbs_' . $conditional ) ) ) {\n+\t\t\t\t\t\tcall_user_func( array( $this, 'add_crumbs_' . $conditional ) );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$this->search_trail();\n+\n+\t\t\treturn $this->get_breadcrumb();\n+\t\t}\n+\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Prepend the courses page to courses breadcrumbs\n+\t *\u002F\n+\tprivate function prepend_courses_page() {\n+\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\n+\t\t$courses_page    = get_post( $courses_page_id );\n+\n+\t\t\u002F\u002F If permalinks contain the courses page in the URI prepend the breadcrumb with courses\n+\t\tif ( $courses_page_id && $courses_page \u002F*&& strstr( $permalinks['lp_course_base'], '\u002F' . $courses_page->post_name )*\u002F && get_option( 'page_on_front' ) != $courses_page_id ) {\n+\t\t\t$this->add_crumb( get_the_title( $courses_page ), get_permalink( $courses_page ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * is home trail\n+\t *\u002F\n+\tprivate function add_crumbs_home() {\n+\t\t$this->add_crumb( single_post_title( '', false ) );\n+\t}\n+\n+\t\u002F**\n+\t * 404 trail\n+\t *\u002F\n+\tprivate function add_crumbs_404() {\n+\t\t$this->add_crumb( __( 'Error 404', 'learnpress' ) );\n+\t}\n+\n+\t\u002F**\n+\t * attachment trail\n+\t *\u002F\n+\tprivate function add_crumbs_attachment() {\n+\t\tglobal $post;\n+\n+\t\t$this->add_crumbs_single( $post->post_parent, get_permalink( $post->post_parent ) );\n+\t\t$this->add_crumb( get_the_title(), get_permalink() );\n+\t}\n+\n+\t\u002F**\n+\t * Single post trail\n+\t *\n+\t * @param int $post_id\n+\t * @param string $permalink\n+\t *\u002F\n+\tprivate function add_crumbs_single( $post_id = 0, $permalink = '' ) {\n+\t\tif ( ! $post_id ) {\n+\t\t\tglobal $post;\n+\t\t} else {\n+\t\t\t$post = get_post( $post_id );\n+\t\t}\n+\t\tif ( LP_COURSE_CPT === get_post_type( $post ) ) {\n+\t\t\t$this->prepend_courses_page();\n+\n+\t\t\t$terms = learn_press_get_course_terms(\n+\t\t\t\t$post->ID,\n+\t\t\t\t'course_category',\n+\t\t\t\tarray(\n+\t\t\t\t\t'orderby' => 'parent',\n+\t\t\t\t\t'order'   => 'DESC',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $terms ) {\n+\t\t\t\t$main_term = apply_filters( 'learn_press_breadcrumb_main_term', $terms[0], $terms );\n+\t\t\t\t$this->term_ancestors( $main_term->term_id, 'course_category' );\n+\t\t\t\t$this->add_crumb( $main_term->name, get_term_link( $main_term ) );\n+\t\t\t}\n+\t\t} elseif ( 'post' != get_post_type( $post ) ) {\n+\t\t\t$post_type = get_post_type_object( get_post_type( $post ) );\n+\t\t\t$this->add_crumb( $post_type->labels->singular_name, get_post_type_archive_link( get_post_type( $post ) ) );\n+\t\t} else {\n+\t\t\t$cat = current( get_the_category( $post ) );\n+\t\t\tif ( $cat ) {\n+\t\t\t\t$this->term_ancestors( $cat->term_id, 'post_category' );\n+\t\t\t\t$this->add_crumb( $cat->name, get_term_link( $cat ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F$this->add_crumb( get_the_title( $post ), $permalink );\n+\t}\n+\n+\t\u002F**\n+\t * Page trail\n+\t *\u002F\n+\tprivate function add_crumbs_page() {\n+\t\tglobal $post;\n+\n+\t\tif ( $post->post_parent ) {\n+\t\t\t$parent_crumbs = array();\n+\t\t\t$parent_id     = $post->post_parent;\n+\n+\t\t\twhile ( $parent_id ) {\n+\t\t\t\t$page            = get_post( $parent_id );\n+\t\t\t\t$parent_id       = $page->post_parent;\n+\t\t\t\t$parent_crumbs[] = array( get_the_title( $page->ID ), get_permalink( $page->ID ) );\n+\t\t\t}\n+\n+\t\t\t$parent_crumbs = array_reverse( $parent_crumbs );\n+\n+\t\t\tforeach ( $parent_crumbs as $crumb ) {\n+\t\t\t\t$this->add_crumb( $crumb[0], $crumb[1] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->add_crumb( get_the_title(), get_permalink() );\n+\t\t$this->endpoint_trail();\n+\t}\n+\n+\t\u002F**\n+\t * Course category trail\n+\t *\u002F\n+\tprivate function add_crumbs_course_category() {\n+\t\tglobal $wp_query;\n+\t\t$current_term = $this->get_queried_object();\n+\n+\t\tif ( isset( $current_term->term_id ) ) {\n+\t\t\t$this->prepend_courses_page();\n+\t\t\t$this->term_ancestors( $current_term->term_id, 'course_category' );\n+\t\t\t$this->add_crumb( $current_term->name );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Course tag trail\n+\t *\u002F\n+\tprivate function add_crumbs_course_tag() {\n+\t\tglobal $wp_query;\n+\t\t$current_term = $this->get_queried_object();\n+\n+\t\t$this->prepend_courses_page();\n+\t\t$this->add_crumb( sprintf( __( 'Courses tagged &ldquo;%s&rdquo;', 'learnpress' ), $current_term->name ) );\n+\t}\n+\n+\t\u002F**\n+\t * Courses archive breadcrumb\n+\t *\u002F\n+\tprivate function add_crumbs_courses() {\n+\t\t$course_page_id = learn_press_get_page_id( 'courses' );\n+\t\tif ( get_option( 'page_on_front' ) == $course_page_id ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$_name = $course_page_id ? get_the_title( $course_page_id ) : '';\n+\n+\t\tif ( ! $_name ) {\n+\t\t\t$course_post_type = get_post_type_object( LP_COURSE_CPT );\n+\n+\t\t\tif ( $course_post_type ) {\n+\t\t\t\t$_name = $course_post_type->labels->singular_name;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->add_crumb( $_name, get_post_type_archive_link( LP_COURSE_CPT ) );\n+\t}\n+\n+\t\u002F**\n+\t * Post type archive trail\n+\t *\u002F\n+\tprivate function add_crumbs_post_type_archive() {\n+\t\t$post_type = get_post_type_object( get_post_type() );\n+\n+\t\tif ( $post_type ) {\n+\t\t\t$this->add_crumb( $post_type->labels->singular_name, get_post_type_archive_link( get_post_type() ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Category trail\n+\t *\u002F\n+\tprivate function add_crumbs_category() {\n+\t\tglobal $wp_query;\n+\t\t$this_category = get_category( $this->get_queried_object() );\n+\n+\t\tif ( 0 != $this_category->parent ) {\n+\t\t\t$this->term_ancestors( $this_category->parent, 'post_category' );\n+\t\t\t$this->add_crumb( $this_category->name, get_category_link( $this_category->term_id ) );\n+\t\t}\n+\n+\t\t$this->add_crumb( single_cat_title( '', false ), get_category_link( $this_category->term_id ) );\n+\t}\n+\n+\t\u002F**\n+\t * Tag trail\n+\t *\u002F\n+\tprivate function add_crumbs_tag() {\n+\t\tglobal $wp_query;\n+\n+\t\t$queried_object = $this->get_queried_object();\n+\t\t$this->add_crumb( sprintf( __( 'Posts tagged &ldquo;%s&rdquo;', 'learnpress' ), single_tag_title( '', false ) ), get_tag_link( $queried_object->term_id ) );\n+\t}\n+\n+\t\u002F**\n+\t * Add crumbs for date based archives\n+\t *\u002F\n+\tprivate function add_crumbs_date() {\n+\t\tif ( is_year() || is_month() || is_day() ) {\n+\t\t\t$this->add_crumb( get_the_time( 'Y' ), get_year_link( get_the_time( 'Y' ) ) );\n+\t\t}\n+\t\tif ( is_month() || is_day() ) {\n+\t\t\t$this->add_crumb( get_the_time( 'F' ), get_month_link( get_the_time( 'Y' ), get_the_time( 'm' ) ) );\n+\t\t}\n+\t\tif ( is_day() ) {\n+\t\t\t$this->add_crumb( get_the_time( 'd' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add crumbs for date based archives\n+\t *\u002F\n+\tprivate function add_crumbs_tax() {\n+\t\tglobal $wp_query;\n+\n+\t\t$this_term = $this->get_queried_object();\n+\t\t$taxonomy  = get_taxonomy( $this_term->taxonomy );\n+\n+\t\t$this->add_crumb( $taxonomy->labels->name );\n+\n+\t\tif ( 0 != $this_term->parent ) {\n+\t\t\t$this->term_ancestors( $this_term->parent, 'post_category' );\n+\t\t\t$this->add_crumb( $this_term->name, get_term_link( $this_term->term_id, $this_term->taxonomy ) );\n+\t\t}\n+\n+\t\t$this->add_crumb( single_term_title( '', false ), get_term_link( $this_term->term_id, $this_term->taxonomy ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get default queried object by WP.\n+\t * Fixed issue when viewing course category the text in breadcrumb is blank.\n+\t *\n+\t * @return object\n+\t * @since 3.0.0\n+\t *\n+\t *\u002F\n+\tprivate function get_queried_object() {\n+\t\tstatic $default_queried_object;\n+\n+\t\tif ( $default_queried_object ) {\n+\t\t\treturn $default_queried_object;\n+\t\t}\n+\n+\t\tglobal $wp_query;\n+\n+\t\t\u002F\u002F Store the current queried object\n+\t\t$queried_object    = $wp_query->queried_object;\n+\t\t$queried_object_id = $wp_query->queried_object_id;\n+\n+\t\t\u002F\u002F Clear the current queried object to ensure we get the default.\n+\t\t$wp_query->queried_object    = null;\n+\t\t$wp_query->queried_object_id = null;\n+\n+\t\t$default_queried_object = $wp_query->get_queried_object();\n+\n+\t\t\u002F\u002F Restore current queried object\n+\t\t$wp_query->queried_object    = $queried_object;\n+\t\t$wp_query->queried_object_id = $queried_object_id;\n+\n+\t\treturn $default_queried_object;\n+\t}\n+\n+\t\u002F**\n+\t * Add a breadcrumb for author archives\n+\t *\u002F\n+\tprivate function add_crumbs_author() {\n+\t\tglobal $author;\n+\n+\t\t$userdata = get_userdata( $author );\n+\t\t$this->add_crumb( sprintf( __( 'Author: %s', 'learnpress' ), $userdata->display_name ) );\n+\t}\n+\n+\t\u002F**\n+\t * Add crumbs for a term\n+\t *\n+\t * @param string $taxonomy\n+\t *\u002F\n+\tprivate function term_ancestors( $term_id, $taxonomy ) {\n+\t\t$ancestors = get_ancestors( $term_id, $taxonomy );\n+\t\t$ancestors = array_reverse( $ancestors );\n+\n+\t\tforeach ( $ancestors as $ancestor ) {\n+\t\t\t$ancestor = get_term( $ancestor, $taxonomy );\n+\n+\t\t\tif ( ! is_wp_error( $ancestor ) && $ancestor ) {\n+\t\t\t\t$this->add_crumb( $ancestor->name, get_term_link( $ancestor ) );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Endpoints\n+\t *\u002F\n+\tprivate function endpoint_trail() {\n+\t}\n+\n+\t\u002F**\n+\t * Add a breadcrumb for search results\n+\t *\u002F\n+\tprivate function search_trail() {\n+\t\tif ( is_search() ) {\n+\t\t\t$this->add_crumb( sprintf( __( 'Search results for &ldquo;%s&rdquo;', 'learnpress' ), get_search_query() ), esc_url_raw( remove_query_arg( 'paged' ) ) );\n+\t\t} elseif ( ! empty( $_GET['c_search'] ) ) {\n+\t\t\t$this->add_crumb(\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( 'Search results for &ldquo;%s&rdquo;', 'learnpress' ),\n+\t\t\t\t\tesc_html( $_GET['c_search'] )\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add a breadcrumb for pagination\n+\t *\u002F\n+\t\u002F*private function paged_trail() {\n+\t\tif ( get_query_var( 'paged' ) ) {\n+\t\t\t$this->add_crumb( sprintf( __( 'Page %d', 'learnpress' ), get_query_var( 'paged' ) ) );\n+\t\t}\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-checkout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-checkout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-checkout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-checkout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,573 +1,573 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Checkout\r\n- *\r\n- * @author  ThimPress \u003CNhamdv>\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Checkout {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * Payment method\r\n-\t *\r\n-\t * @var LP_Gateway_Abstract\r\n-\t *\u002F\r\n-\tpublic $payment_method = null;\r\n-\t\u002F**\r\n-\t * Payment method string when user choice\r\n-\t *\r\n-\t * @var string $payment_method_str\r\n-\t *\u002F\r\n-\tpublic $payment_method_str = '';\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tpublic $user_login = null;\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tpublic $user_pass = null;\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tpublic $order_comment = null;\r\n-\t\u002F**\r\n-\t * Handle the errors when checking out.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $errors = array();\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_checkout_email = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tprotected $guest_email = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tprotected $checkout_action = '';\r\n-\r\n-\tpublic function init() {\r\n-\t\tif ( ! is_null( LearnPress::instance()->session ) ) {\r\n-\t\t\t$this->_checkout_email = LearnPress::instance()->session->get( 'checkout-email' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create account when checking out with user guest and tick create account.\r\n-\t *\r\n-\t * @return int|WP_Error\r\n-\t *\u002F\r\n-\tprotected function create_account(): int {\r\n-\t\t$user_id = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$email    = $this->get_checkout_email();\r\n-\t\t\t$password = wp_generate_password();\r\n-\t\t\t$user_id  = wp_create_user( $email, $password, $email );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check valid fields login\u002Fregister\u002Fguest checkout.\r\n-\t * Store session guest before login success.\r\n-\t * When user login success, will update session data of guest for user.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_validate_fields() {\r\n-\t\t$session                        = LearnPress::instance()->session;\r\n-\t\t$data_session_before_user_login = $session->get_session_data();\r\n-\t\t$checkout_account_type          = LP_Request::get_param( 'checkout-account-switch-form' );\r\n-\t\t$this->checkout_action          = $checkout_account_type;\r\n-\r\n-\t\tswitch ( $this->checkout_action ) {\r\n-\t\t\tcase 'login':\r\n-\t\t\t\t$user = wp_signon(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'user_login'    => LP_Request::get_param( 'username' ),\r\n-\t\t\t\t\t\t'user_password' => LP_Request::get_param( 'password' ),\r\n-\t\t\t\t\t\t'remember'      => LP_Request::get_param( 'remember', false ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tis_ssl()\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\t\t\tthrow new Exception( $user->get_error_message() );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\twp_set_current_user( $user->ID );\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'register':\r\n-\t\t\t\t$default_fields = array(\r\n-\t\t\t\t\t'reg_email'     => LP_Request::get_param( 'reg_email' ),\r\n-\t\t\t\t\t'reg_username'  => LP_Request::get_param( 'reg_username' ),\r\n-\t\t\t\t\t'reg_password'  => LP_Request::get_param( 'reg_password' ),\r\n-\t\t\t\t\t'reg_password2' => LP_Request::get_param( 'reg_password2' ),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( isset( $_POST['reg_first_name'] ) ) {\r\n-\t\t\t\t\t$default_fields['first_name'] = LP_Request::get_param( 'reg_first_name' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( isset( $_POST['reg_last_name'] ) ) {\r\n-\t\t\t\t\t$default_fields['last_name'] = LP_Request::get_param( 'reg_last_name' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( isset( $_POST['reg_display_name'] ) ) {\r\n-\t\t\t\t\t$default_fields['display_name'] = LP_Request::get_param( 'reg_display_name' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$update_meta = isset( $_POST['_lp_custom_register_form'] ) ? LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register_form'] ) : array();\r\n-\r\n-\t\t\t\t$user_id = LP_Forms_Handler::learnpress_create_new_customer(\r\n-\t\t\t\t\t$default_fields['reg_email'],\r\n-\t\t\t\t\t$default_fields['reg_username'],\r\n-\t\t\t\t\t$default_fields['reg_password'],\r\n-\t\t\t\t\t$default_fields['reg_password2'],\r\n-\t\t\t\t\t$default_fields,\r\n-\t\t\t\t\t$update_meta\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( is_wp_error( $user_id ) ) {\r\n-\t\t\t\t\tthrow new Exception( $user_id->get_error_message() );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$user = wp_signon(\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'user_login'    => $default_fields['reg_email'],\r\n-\t\t\t\t\t\t\t'user_password' => $default_fields['reg_password'],\r\n-\t\t\t\t\t\t\t'remember'      => 1,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tis_ssl()\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\t\t\t\tthrow new Exception( $user->get_error_message() );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\twp_set_current_user( $user->ID );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'guest':\r\n-\t\t\t\t$email_guest = LP_Request::get_param( 'guest_email' );\r\n-\t\t\t\tif ( ! is_email( $email_guest ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Your email is not valid!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->guest_email     = $email_guest;\r\n-\t\t\t\t$this->_checkout_email = $email_guest;\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set session, cart for user have just login\u002Fregister success.\r\n-\t\tif ( in_array( $this->checkout_action, [ 'login', 'register' ] ) ) {\r\n-\t\t\tforeach ( $data_session_before_user_login as $key => $item ) {\r\n-\t\t\t\t$session->set( $key, maybe_unserialize( $item ) );\r\n-\t\t\t}\r\n-\t\t\t$session->save_data();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get email of user is being checkout.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_checkout_email() {\r\n-\t\tif ( $this->_checkout_email ) {\r\n-\t\t\treturn $this->_checkout_email;\r\n-\t\t} elseif ( is_user_logged_in() ) {\r\n-\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\treturn $userModel->get_email();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function checkout_email_exists() {\r\n-\t\t$email = $this->get_checkout_email();\r\n-\r\n-\t\tif ( ! $email ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user = get_user_by( 'email', $email );\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $user->ID;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create LP Order.\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t * @throws Exception\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.3\r\n-\t *\u002F\r\n-\tpublic function create_order() {\r\n-\t\t$cart              = LearnPress::instance()->cart;\r\n-\t\t$cart_total        = $cart->calculate_totals();\r\n-\t\t$order             = new LP_Order();\r\n-\t\t$user_id           = 0;\r\n-\t\t$user_can_register = get_option( 'users_can_register' );\r\n-\r\n-\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t} elseif ( $user_can_register ) {\r\n-\t\t\t$checkout_option = LP_Request::get_param( 'checkout-email-option' );\r\n-\t\t\t\u002F\u002F Set user id for Order if buy with Guest and email exists on the user\r\n-\t\t\t$user_id = $this->checkout_email_exists();\r\n-\r\n-\t\t\t\u002F\u002F Create new user if buy with Guest and tick \"Create new Account\"\r\n-\t\t\tif ( $checkout_option === 'new-account' ) {\r\n-\t\t\t\tif ( $user_id ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'New account email is existed', 'learnpress' ), 0 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F$order->set_meta( '_create_account', 'yes' );\r\n-\r\n-\t\t\t\t$user_id = $this->create_account();\r\n-\t\t\t\tif ( $user_id ) {\r\n-\t\t\t\t\t\u002F\u002F Notify mail create user success\r\n-\t\t\t\t\twp_new_user_notification( $user_id, null, apply_filters( 'learn-press\u002Femail-create-new-user-when-checkout', 'user' ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow new Exception( __( 'Create account failed', 'learnpress' ), 0 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get user_id Guest\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var LP_User_Guest $user_guest\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$user_guest = learn_press_get_user();\r\n-\t\t\t\t$user_id    = $user_guest->get_id();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->is_enable_guest_checkout() && $this->get_checkout_email() ) {\r\n-\t\t\t$order->set_checkout_email( $this->get_checkout_email() );\r\n-\t\t\t\u002F\u002F Check email exists on the user will get user_id to set\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t$user_id = $this->checkout_email_exists();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$order->set_customer_note( $this->order_comment );\r\n-\t\t$order->set_status( LP_ORDER_PENDING );\r\n-\t\t$order->set_total( $cart_total->total );\r\n-\t\t$order->set_subtotal( $cart_total->subtotal );\r\n-\t\t$order->set_user_ip_address( learn_press_get_ip() );\r\n-\t\t$order->set_user_agent( learn_press_get_user_agent() );\r\n-\t\t$order->set_created_via( 'checkout' );\r\n-\t\t$order->set_user_id( apply_filters( 'learn-press\u002Fcheckout\u002Fdefault-user', $user_id ) );\r\n-\t\tif ( $this->payment_method instanceof LP_Gateway_Abstract ) {\r\n-\t\t\t$order->set_data( 'payment_method', $this->payment_method->get_id() );\r\n-\t\t\t$order->set_data( 'payment_method_title', $this->payment_method->get_title() );\r\n-\t\t}\r\n-\r\n-\t\t$order_id = $order->save();\r\n-\r\n-\t\t\u002F\u002F Store the line items to the order\r\n-\t\tforeach ( $cart->get_items() as $item ) {\r\n-\t\t\t$item_type = get_post_type( $item['item_id'] );\r\n-\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_id = $order->add_item( $item );\r\n-\t\t\tif ( ! $item_id ) {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Error %d: Unable to add item to order. Please try again.', 'learnpress' ), 402 ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fcheckout\u002Fadd-order-item-meta', $item_id, $item );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $this->user_id ) ) {\r\n-\t\t\tdo_action( 'learn-press\u002Fcheckout\u002Fupdate-user-meta', $this->user_id );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcheckout\u002Fupdate-order-meta', $order_id );\r\n-\r\n-\t\treturn $order_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Guest checkout is enable?\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function is_enable_guest_checkout(): bool {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcheckout\u002Fenable-guest',\r\n-\t\t\tLP_Settings::get_option( 'guest_checkout', 'no' ) === 'yes'\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enable user can log in checkout page?\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function is_enable_login(): bool {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcheckout\u002Fenable-login',\r\n-\t\t\t'yes' === LP_Settings::get_option( 'enable_login_checkout', 'yes' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enable user can register in checkout page?\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function is_enable_register(): bool {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcheckout\u002Fenable-register',\r\n-\t\t\t'yes' === LP_Settings::get_option( 'enable_registration_checkout', 'yes' )\r\n-\t\t\t&& get_option( 'users_can_register' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process checkout from request.\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function process_checkout_handler() {\r\n-\t\tif ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set default fields from request.\r\n-\t\t *\u002F\r\n-\t\t$this->payment_method_str = LP_Request::get_param( 'payment_method' );\r\n-\t\t$this->order_comment      = LP_Request::get_param( 'order_comments' );\r\n-\t\t$this->_checkout_email    = LP_Request::get_param( 'checkout-email' );\r\n-\t\tif ( $this->_checkout_email ) {\r\n-\t\t\tLearnPress::instance()->session->set( 'checkout-email', $this->_checkout_email );\r\n-\t\t}\r\n-\r\n-\t\t$this->process_checkout();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validate fields.\r\n-\t *\r\n-\t * Addon Upsell 4.0.1 use argument $errors\r\n-\t * Must update to 4.0.2 to use throw Error instead.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function validate_checkout_fields() {\r\n-\t\t$this->errors = array();\r\n-\r\n-\t\t\u002F\u002F Check nonce\r\n-\t\t$nonce = LP_Request::get_param( 'learn-press-checkout-nonce' );\r\n-\t\tif ( ! wp_verify_nonce( $nonce, 'learn-press-checkout' ) ) {\r\n-\t\t\tthrow new Exception( __( 'Your session has expired.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->check_validate_fields();\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fvalidate-checkout-fields', $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validate checkout payment.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function validate_payment() {\r\n-\t\t$cart = LearnPress::instance()->cart;\r\n-\t\t\u002F\u002F$validate = true;\r\n-\r\n-\t\tif ( $cart->needs_payment() ) {\r\n-\t\t\tif ( ! $this->payment_method instanceof LP_Gateway_Abstract ) {\r\n-\t\t\t\t$available_gateways = LP_Gateways::instance()->get_available_payment_gateways();\r\n-\r\n-\t\t\t\tif ( ! isset( $available_gateways[ $this->payment_method_str ] ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'No payment method is selected', 'learnpress' ), LP_ERROR_NO_PAYMENT_METHOD_SELECTED );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$this->payment_method = $available_gateways[ $this->payment_method_str ];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->payment_method->validate_fields();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process checkout.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function process_checkout() {\r\n-\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\r\n-\t\t$result = array(\r\n-\t\t\t'result'  => 'fail',\r\n-\t\t\t'message' => '',\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_session = LearnPress::instance()->session;\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-checkout' );\r\n-\r\n-\t\t\t$cart = LearnPress::instance()->cart;\r\n-\t\t\tif ( $cart->is_empty() ) {\r\n-\t\t\t\tthrow new Exception( __( 'Your cart is currently empty.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $cart->get_items() as $item ) {\r\n-\t\t\t\t$item_type = get_post_type( $item['item_id'] );\r\n-\r\n-\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Type item buy invalid!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Validate fields\r\n-\t\t\t$this->validate_checkout_fields();\r\n-\t\t\t\u002F\u002F Validate payment method\r\n-\t\t\t$this->validate_payment();\r\n-\r\n-\t\t\t$user_id = $this->checkout_email_exists();\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t$user_id = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check user can purchase, enrolled course\r\n-\t\t\tforeach ( $cart->get_items() as $item ) {\r\n-\t\t\t\t$item_type = get_post_type( $item['item_id'] );\r\n-\t\t\t\tif ( LP_COURSE_CPT === $item_type ) {\r\n-\t\t\t\t\t$courseModel = CourseModel::find( $item['item_id'], true );\r\n-\t\t\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\t\t\tthrow new Exception( __( 'Course is invalid!', 'learnpress' ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check user can purchase course\r\n-\t\t\t\t\tif ( ! $courseModel->is_free() ) {\r\n-\t\t\t\t\t\t$can_purchase = $courseModel->can_purchase( $userModel );\r\n-\t\t\t\t\t\tif ( is_wp_error( $can_purchase ) ) {\r\n-\t\t\t\t\t\t\t\u002F\u002Fthrow new Exception( $can_purchase->get_error_message() );\r\n-\t\t\t\t\t\t\tlearn_press_set_message(\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t\t\t\t\t\t'content' => $can_purchase->get_error_message(),\r\n-\t\t\t\t\t\t\t\t]\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t$result['redirect'] = LP_Page_Controller::get_link_page( 'checkout', [], true );\r\n-\t\t\t\t\t\t\t$result['message']  = $can_purchase->get_error_message();\r\n-\t\t\t\t\t\t\tlearn_press_send_json( $result );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\u002F\u002F Check user can enroll course\r\n-\t\t\t\t\t\t$can_enroll = $courseModel->can_enroll( $userModel );\r\n-\t\t\t\t\t\tif ( is_wp_error( $can_enroll ) ) {\r\n-\t\t\t\t\t\t\tlearn_press_set_message(\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t\t\t\t\t\t'content' => $can_enroll->get_error_message(),\r\n-\t\t\t\t\t\t\t\t]\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t$result['redirect'] = LP_Page_Controller::get_link_page( 'checkout', [], true );\r\n-\t\t\t\t\t\t\t$result['message']  = $can_enroll->get_error_message();\r\n-\t\t\t\t\t\t\tlearn_press_send_json( $result );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Create order if not handle done.\r\n-\t\t\t$order_id = $lp_session->get( 'order_awaiting_payment', 0 );\r\n-\t\t\tif ( ! $order_id ) {\r\n-\t\t\t\t$order_id = $this->create_order();\r\n-\t\t\t\tif ( is_wp_error( $order_id ) ) {\r\n-\t\t\t\t\tthrow new Exception( $order_id->get_error_message() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lp_session->set( 'order_awaiting_payment', $order_id, true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F allow Third-party hook: send email and more...\r\n-\t\t\tdo_action( 'learn-press\u002Fcheckout-order-processed', $order_id, $this );\r\n-\r\n-\t\t\tif ( $this->payment_method instanceof LP_Gateway_Abstract ) {\r\n-\t\t\t\t\u002F\u002F Process Payment\r\n-\t\t\t\t$result = $this->payment_method->process_payment( $order_id );\r\n-\t\t\t\tif ( isset( $result['result'] ) ) {\r\n-\t\t\t\t\tif ( 'success' === $result['result'] ) {\r\n-\t\t\t\t\t\t\u002F\u002F Clear cart.\r\n-\t\t\t\t\t\tLearnPress::instance()->get_cart()->empty_cart();\r\n-\t\t\t\t\t\t$result = apply_filters( 'learn-press\u002Fpayment-successful-result', $result, $order_id );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( ! learn_press_is_ajax() ) {\r\n-\t\t\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\t\t\t\t\twp_redirect( $result['redirect'] );\r\n-\t\t\t\t\t\texit;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F For case enroll a course free.\r\n-\t\t\t\t$order = new LP_Order( $order_id );\r\n-\t\t\t\tif ( $order->payment_complete() ) {\r\n-\t\t\t\t\t$redirect = $order->get_checkout_order_received_url();\r\n-\r\n-\t\t\t\t\t\u002F\u002F Clear cart.\r\n-\t\t\t\t\tLearnPress::instance()->get_cart()->empty_cart();\r\n-\r\n-\t\t\t\t\t$result = array(\r\n-\t\t\t\t\t\t'result'   => 'success',\r\n-\t\t\t\t\t\t'redirect' => $redirect,\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( ! learn_press_is_ajax() ) {\r\n-\t\t\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\t\t\t\t\twp_redirect( $result['redirect'] );\r\n-\t\t\t\t\t\texit;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$result['message'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\tlearn_press_send_json( $result );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Checkout\n+ *\n+ * @author  ThimPress \u003CNhamdv>\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Checkout {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * Payment method\n+\t *\n+\t * @var LP_Gateway_Abstract\n+\t *\u002F\n+\tpublic $payment_method = null;\n+\t\u002F**\n+\t * Payment method string when user choice\n+\t *\n+\t * @var string $payment_method_str\n+\t *\u002F\n+\tpublic $payment_method_str = '';\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tpublic $user_login = null;\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tpublic $user_pass = null;\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tpublic $order_comment = null;\n+\t\u002F**\n+\t * Handle the errors when checking out.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $errors = array();\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_checkout_email = '';\n+\t\u002F**\n+\t * @var string\n+\t * @since 4.0.0\n+\t *\u002F\n+\tprotected $guest_email = '';\n+\t\u002F**\n+\t * @var string\n+\t * @since 4.0.0\n+\t *\u002F\n+\tprotected $checkout_action = '';\n+\n+\tpublic function init() {\n+\t\tif ( ! is_null( LearnPress::instance()->session ) ) {\n+\t\t\t$this->_checkout_email = LearnPress::instance()->session->get( 'checkout-email' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Create account when checking out with user guest and tick create account.\n+\t *\n+\t * @return int|WP_Error\n+\t *\u002F\n+\tprotected function create_account(): int {\n+\t\t$user_id = 0;\n+\n+\t\ttry {\n+\t\t\t$email    = $this->get_checkout_email();\n+\t\t\t$password = wp_generate_password();\n+\t\t\t$user_id  = wp_create_user( $email, $password, $email );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_id;\n+\t}\n+\n+\t\u002F**\n+\t * Check valid fields login\u002Fregister\u002Fguest checkout.\n+\t * Store session guest before login success.\n+\t * When user login success, will update session data of guest for user.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_validate_fields() {\n+\t\t$session                        = LearnPress::instance()->session;\n+\t\t$data_session_before_user_login = $session->get_session_data();\n+\t\t$checkout_account_type          = LP_Request::get_param( 'checkout-account-switch-form' );\n+\t\t$this->checkout_action          = $checkout_account_type;\n+\n+\t\tswitch ( $this->checkout_action ) {\n+\t\t\tcase 'login':\n+\t\t\t\t$user = wp_signon(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'user_login'    => LP_Request::get_param( 'username' ),\n+\t\t\t\t\t\t'user_password' => LP_Request::get_param( 'password' ),\n+\t\t\t\t\t\t'remember'      => LP_Request::get_param( 'remember', false ),\n+\t\t\t\t\t),\n+\t\t\t\t\tis_ssl()\n+\t\t\t\t);\n+\n+\t\t\t\tif ( is_wp_error( $user ) ) {\n+\t\t\t\t\tthrow new Exception( $user->get_error_message() );\n+\t\t\t\t} else {\n+\t\t\t\t\twp_set_current_user( $user->ID );\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tcase 'register':\n+\t\t\t\t$default_fields = array(\n+\t\t\t\t\t'reg_email'     => LP_Request::get_param( 'reg_email' ),\n+\t\t\t\t\t'reg_username'  => LP_Request::get_param( 'reg_username' ),\n+\t\t\t\t\t'reg_password'  => LP_Request::get_param( 'reg_password' ),\n+\t\t\t\t\t'reg_password2' => LP_Request::get_param( 'reg_password2' ),\n+\t\t\t\t);\n+\n+\t\t\t\tif ( isset( $_POST['reg_first_name'] ) ) {\n+\t\t\t\t\t$default_fields['first_name'] = LP_Request::get_param( 'reg_first_name' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( isset( $_POST['reg_last_name'] ) ) {\n+\t\t\t\t\t$default_fields['last_name'] = LP_Request::get_param( 'reg_last_name' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( isset( $_POST['reg_display_name'] ) ) {\n+\t\t\t\t\t$default_fields['display_name'] = LP_Request::get_param( 'reg_display_name' );\n+\t\t\t\t}\n+\n+\t\t\t\t$update_meta = isset( $_POST['_lp_custom_register_form'] ) ? LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register_form'] ) : array();\n+\n+\t\t\t\t$user_id = LP_Forms_Handler::learnpress_create_new_customer(\n+\t\t\t\t\t$default_fields['reg_email'],\n+\t\t\t\t\t$default_fields['reg_username'],\n+\t\t\t\t\t$default_fields['reg_password'],\n+\t\t\t\t\t$default_fields['reg_password2'],\n+\t\t\t\t\t$default_fields,\n+\t\t\t\t\t$update_meta\n+\t\t\t\t);\n+\n+\t\t\t\tif ( is_wp_error( $user_id ) ) {\n+\t\t\t\t\tthrow new Exception( $user_id->get_error_message() );\n+\t\t\t\t} else {\n+\t\t\t\t\t$user = wp_signon(\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'user_login'    => $default_fields['reg_email'],\n+\t\t\t\t\t\t\t'user_password' => $default_fields['reg_password'],\n+\t\t\t\t\t\t\t'remember'      => 1,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tis_ssl()\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( is_wp_error( $user ) ) {\n+\t\t\t\t\t\tthrow new Exception( $user->get_error_message() );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\twp_set_current_user( $user->ID );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tcase 'guest':\n+\t\t\t\t$email_guest = LP_Request::get_param( 'guest_email' );\n+\t\t\t\tif ( ! is_email( $email_guest ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Your email is not valid!', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->guest_email     = $email_guest;\n+\t\t\t\t$this->_checkout_email = $email_guest;\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\t\u002F\u002F Set session, cart for user have just login\u002Fregister success.\n+\t\tif ( in_array( $this->checkout_action, [ 'login', 'register' ] ) ) {\n+\t\t\tforeach ( $data_session_before_user_login as $key => $item ) {\n+\t\t\t\t$session->set( $key, maybe_unserialize( $item ) );\n+\t\t\t}\n+\t\t\t$session->save_data();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get email of user is being checkout.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_checkout_email() {\n+\t\tif ( $this->_checkout_email ) {\n+\t\t\treturn $this->_checkout_email;\n+\t\t} elseif ( is_user_logged_in() ) {\n+\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\treturn $userModel->get_email();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function checkout_email_exists() {\n+\t\t$email = $this->get_checkout_email();\n+\n+\t\tif ( ! $email ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user = get_user_by( 'email', $email );\n+\t\tif ( ! $user ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $user->ID;\n+\t}\n+\n+\t\u002F**\n+\t * Create LP Order.\n+\t *\n+\t * @return mixed|string\n+\t * @throws Exception\n+\t * @since 3.0.0\n+\t * @version 4.0.3\n+\t *\u002F\n+\tpublic function create_order() {\n+\t\t$cart              = LearnPress::instance()->cart;\n+\t\t$cart_total        = $cart->calculate_totals();\n+\t\t$order             = new LP_Order();\n+\t\t$user_id           = 0;\n+\t\t$user_can_register = get_option( 'users_can_register' );\n+\n+\t\tif ( is_user_logged_in() ) {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t} elseif ( $user_can_register ) {\n+\t\t\t$checkout_option = LP_Request::get_param( 'checkout-email-option' );\n+\t\t\t\u002F\u002F Set user id for Order if buy with Guest and email exists on the user\n+\t\t\t$user_id = $this->checkout_email_exists();\n+\n+\t\t\t\u002F\u002F Create new user if buy with Guest and tick \"Create new Account\"\n+\t\t\tif ( $checkout_option === 'new-account' ) {\n+\t\t\t\tif ( $user_id ) {\n+\t\t\t\t\tthrow new Exception( __( 'New account email is existed', 'learnpress' ), 0 );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F$order->set_meta( '_create_account', 'yes' );\n+\n+\t\t\t\t$user_id = $this->create_account();\n+\t\t\t\tif ( $user_id ) {\n+\t\t\t\t\t\u002F\u002F Notify mail create user success\n+\t\t\t\t\twp_new_user_notification( $user_id, null, apply_filters( 'learn-press\u002Femail-create-new-user-when-checkout', 'user' ) );\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow new Exception( __( 'Create account failed', 'learnpress' ), 0 );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get user_id Guest\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var LP_User_Guest $user_guest\n+\t\t\t\t *\u002F\n+\t\t\t\t$user_guest = learn_press_get_user();\n+\t\t\t\t$user_id    = $user_guest->get_id();\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $this->is_enable_guest_checkout() && $this->get_checkout_email() ) {\n+\t\t\t$order->set_checkout_email( $this->get_checkout_email() );\n+\t\t\t\u002F\u002F Check email exists on the user will get user_id to set\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t$user_id = $this->checkout_email_exists();\n+\t\t\t}\n+\t\t}\n+\n+\t\t$order->set_customer_note( $this->order_comment );\n+\t\t$order->set_status( LP_ORDER_PENDING );\n+\t\t$order->set_total( $cart_total->total );\n+\t\t$order->set_subtotal( $cart_total->subtotal );\n+\t\t$order->set_user_ip_address( learn_press_get_ip() );\n+\t\t$order->set_user_agent( learn_press_get_user_agent() );\n+\t\t$order->set_created_via( 'checkout' );\n+\t\t$order->set_user_id( apply_filters( 'learn-press\u002Fcheckout\u002Fdefault-user', $user_id ) );\n+\t\tif ( $this->payment_method instanceof LP_Gateway_Abstract ) {\n+\t\t\t$order->set_data( 'payment_method', $this->payment_method->get_id() );\n+\t\t\t$order->set_data( 'payment_method_title', $this->payment_method->get_title() );\n+\t\t}\n+\n+\t\t$order_id = $order->save();\n+\n+\t\t\u002F\u002F Store the line items to the order\n+\t\tforeach ( $cart->get_items() as $item ) {\n+\t\t\t$item_type = get_post_type( $item['item_id'] );\n+\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$item_id = $order->add_item( $item );\n+\t\t\tif ( ! $item_id ) {\n+\t\t\t\tthrow new Exception( sprintf( __( 'Error %d: Unable to add item to order. Please try again.', 'learnpress' ), 402 ) );\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fcheckout\u002Fadd-order-item-meta', $item_id, $item );\n+\t\t}\n+\n+\t\tif ( ! empty( $this->user_id ) ) {\n+\t\t\tdo_action( 'learn-press\u002Fcheckout\u002Fupdate-user-meta', $this->user_id );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fcheckout\u002Fupdate-order-meta', $order_id );\n+\n+\t\treturn $order_id;\n+\t}\n+\n+\t\u002F**\n+\t * Guest checkout is enable?\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function is_enable_guest_checkout(): bool {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcheckout\u002Fenable-guest',\n+\t\t\tLP_Settings::get_option( 'guest_checkout', 'no' ) === 'yes'\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Enable user can log in checkout page?\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function is_enable_login(): bool {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcheckout\u002Fenable-login',\n+\t\t\t'yes' === LP_Settings::get_option( 'enable_login_checkout', 'yes' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Enable user can register in checkout page?\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function is_enable_register(): bool {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcheckout\u002Fenable-register',\n+\t\t\t'yes' === LP_Settings::get_option( 'enable_registration_checkout', 'yes' )\n+\t\t\t&& get_option( 'users_can_register' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Process checkout from request.\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function process_checkout_handler() {\n+\t\tif ( strtolower( $_SERVER['REQUEST_METHOD'] ) != 'post' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set default fields from request.\n+\t\t *\u002F\n+\t\t$this->payment_method_str = LP_Request::get_param( 'payment_method' );\n+\t\t$this->order_comment      = LP_Request::get_param( 'order_comments' );\n+\t\t$this->_checkout_email    = LP_Request::get_param( 'checkout-email' );\n+\t\tif ( $this->_checkout_email ) {\n+\t\t\tLearnPress::instance()->session->set( 'checkout-email', $this->_checkout_email );\n+\t\t}\n+\n+\t\t$this->process_checkout();\n+\t}\n+\n+\t\u002F**\n+\t * Validate fields.\n+\t *\n+\t * Addon Upsell 4.0.1 use argument $errors\n+\t * Must update to 4.0.2 to use throw Error instead.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function validate_checkout_fields() {\n+\t\t$this->errors = array();\n+\n+\t\t\u002F\u002F Check nonce\n+\t\t$nonce = LP_Request::get_param( 'learn-press-checkout-nonce' );\n+\t\tif ( ! wp_verify_nonce( $nonce, 'learn-press-checkout' ) ) {\n+\t\t\tthrow new Exception( __( 'Your session has expired.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$this->check_validate_fields();\n+\n+\t\tdo_action( 'learn-press\u002Fvalidate-checkout-fields', $this );\n+\t}\n+\n+\t\u002F**\n+\t * Validate checkout payment.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function validate_payment() {\n+\t\t$cart = LearnPress::instance()->cart;\n+\t\t\u002F\u002F$validate = true;\n+\n+\t\tif ( $cart->needs_payment() ) {\n+\t\t\tif ( ! $this->payment_method instanceof LP_Gateway_Abstract ) {\n+\t\t\t\t$available_gateways = LP_Gateways::instance()->get_available_payment_gateways();\n+\n+\t\t\t\tif ( ! isset( $available_gateways[ $this->payment_method_str ] ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'No payment method is selected', 'learnpress' ), LP_ERROR_NO_PAYMENT_METHOD_SELECTED );\n+\t\t\t\t} else {\n+\t\t\t\t\t$this->payment_method = $available_gateways[ $this->payment_method_str ];\n+\t\t\t\t}\n+\n+\t\t\t\t$this->payment_method->validate_fields();\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Process checkout.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function process_checkout() {\n+\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\n+\t\t$result = array(\n+\t\t\t'result'  => 'fail',\n+\t\t\t'message' => '',\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$lp_session = LearnPress::instance()->session;\n+\n+\t\t\tdo_action( 'learn-press\u002Fbefore-checkout' );\n+\n+\t\t\t$cart = LearnPress::instance()->cart;\n+\t\t\tif ( $cart->is_empty() ) {\n+\t\t\t\tthrow new Exception( __( 'Your cart is currently empty.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tforeach ( $cart->get_items() as $item ) {\n+\t\t\t\t$item_type = get_post_type( $item['item_id'] );\n+\n+\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Type item buy invalid!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Validate fields\n+\t\t\t$this->validate_checkout_fields();\n+\t\t\t\u002F\u002F Validate payment method\n+\t\t\t$this->validate_payment();\n+\n+\t\t\t$user_id = $this->checkout_email_exists();\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t$user_id = 0;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check user can purchase, enrolled course\n+\t\t\tforeach ( $cart->get_items() as $item ) {\n+\t\t\t\t$item_type = get_post_type( $item['item_id'] );\n+\t\t\t\tif ( LP_COURSE_CPT === $item_type ) {\n+\t\t\t\t\t$courseModel = CourseModel::find( $item['item_id'], true );\n+\t\t\t\t\tif ( ! $courseModel ) {\n+\t\t\t\t\t\tthrow new Exception( __( 'Course is invalid!', 'learnpress' ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$userModel = UserModel::find( $user_id, true );\n+\n+\t\t\t\t\t\u002F\u002F Check user can purchase course\n+\t\t\t\t\tif ( ! $courseModel->is_free() ) {\n+\t\t\t\t\t\t$can_purchase = $courseModel->can_purchase( $userModel );\n+\t\t\t\t\t\tif ( is_wp_error( $can_purchase ) ) {\n+\t\t\t\t\t\t\t\u002F\u002Fthrow new Exception( $can_purchase->get_error_message() );\n+\t\t\t\t\t\t\tlearn_press_set_message(\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'status'  => 'error',\n+\t\t\t\t\t\t\t\t\t'content' => $can_purchase->get_error_message(),\n+\t\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t$result['redirect'] = LP_Page_Controller::get_link_page( 'checkout', [], true );\n+\t\t\t\t\t\t\t$result['message']  = $can_purchase->get_error_message();\n+\t\t\t\t\t\t\tlearn_press_send_json( $result );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t\u002F\u002F Check user can enroll course\n+\t\t\t\t\t\t$can_enroll = $courseModel->can_enroll( $userModel );\n+\t\t\t\t\t\tif ( is_wp_error( $can_enroll ) ) {\n+\t\t\t\t\t\t\tlearn_press_set_message(\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'status'  => 'error',\n+\t\t\t\t\t\t\t\t\t'content' => $can_enroll->get_error_message(),\n+\t\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t$result['redirect'] = LP_Page_Controller::get_link_page( 'checkout', [], true );\n+\t\t\t\t\t\t\t$result['message']  = $can_enroll->get_error_message();\n+\t\t\t\t\t\t\tlearn_press_send_json( $result );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Create order if not handle done.\n+\t\t\t$order_id = $lp_session->get( 'order_awaiting_payment', 0 );\n+\t\t\tif ( ! $order_id ) {\n+\t\t\t\t$order_id = $this->create_order();\n+\t\t\t\tif ( is_wp_error( $order_id ) ) {\n+\t\t\t\t\tthrow new Exception( $order_id->get_error_message() );\n+\t\t\t\t}\n+\n+\t\t\t\t$lp_session->set( 'order_awaiting_payment', $order_id, true );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F allow Third-party hook: send email and more...\n+\t\t\tdo_action( 'learn-press\u002Fcheckout-order-processed', $order_id, $this );\n+\n+\t\t\tif ( $this->payment_method instanceof LP_Gateway_Abstract ) {\n+\t\t\t\t\u002F\u002F Process Payment\n+\t\t\t\t$result = $this->payment_method->process_payment( $order_id );\n+\t\t\t\tif ( isset( $result['result'] ) ) {\n+\t\t\t\t\tif ( 'success' === $result['result'] ) {\n+\t\t\t\t\t\t\u002F\u002F Clear cart.\n+\t\t\t\t\t\tLearnPress::instance()->get_cart()->empty_cart();\n+\t\t\t\t\t\t$result = apply_filters( 'learn-press\u002Fpayment-successful-result', $result, $order_id );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( ! learn_press_is_ajax() ) {\n+\t\t\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\t\t\t\t\twp_redirect( $result['redirect'] );\n+\t\t\t\t\t\texit;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F For case enroll a course free.\n+\t\t\t\t$order = new LP_Order( $order_id );\n+\t\t\t\tif ( $order->payment_complete() ) {\n+\t\t\t\t\t$redirect = $order->get_checkout_order_received_url();\n+\n+\t\t\t\t\t\u002F\u002F Clear cart.\n+\t\t\t\t\tLearnPress::instance()->get_cart()->empty_cart();\n+\n+\t\t\t\t\t$result = array(\n+\t\t\t\t\t\t'result'   => 'success',\n+\t\t\t\t\t\t'redirect' => $redirect,\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( ! learn_press_is_ajax() ) {\n+\t\t\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\t\t\t\t\twp_redirect( $result['redirect'] );\n+\t\t\t\t\t\texit;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$result['message'] = $e->getMessage();\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\tlearn_press_send_json( $result );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-course-query.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-course-query.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-course-query.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-course-query.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,147 +1,147 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Query\r\n- *\r\n- * @version 3.3.0\r\n- *\u002F\r\n-class LP_Course_Query extends LP_Object_Query {\r\n-\r\n-\tprotected $course_query_vars = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Course_Query constructor.\r\n-\t *\r\n-\t * @param string $query\r\n-\t *\u002F\r\n-\tpublic function __construct( $query = '' ) {\r\n-\t\t$limit = LP_Settings::get_option( 'archive_course_limit', 6 );\r\n-\t\tif ( empty( $limit ) ) {\r\n-\t\t\t$limit = 6;\r\n-\t\t}\r\n-\r\n-\t\t$this->course_query_vars = array(\r\n-\t\t\t'post_type'   => LP_COURSE_CPT,\r\n-\t\t\t'post_status' => array( 'draft', 'pending', 'private', 'publish' ),\r\n-\t\t\t'limit'       => $limit,\r\n-\t\t\t'author'      => '',\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_default_query_vars() {\r\n-\t\treturn array_merge(\r\n-\t\t\tparent::get_default_query_vars(),\r\n-\t\t\t$this->course_query_vars\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Transform our query vars to wp query vars that\r\n-\t * can read from db.\r\n-\t *\r\n-\t * @param array $query_vars\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function get_wp_query_vars( $query_vars = array() ) {\r\n-\t\t$query_vars = apply_filters( 'learn-press\u002Fcourse-object-query-args', wp_parse_args( $query_vars, $this->get_query_vars() ) );\r\n-\t\t$map_keys   = array(\r\n-\t\t\t'status'         => 'post_status',\r\n-\t\t\t'page'           => 'paged',\r\n-\t\t\t'include'        => 'post__in',\r\n-\t\t\t'return'         => 'fields',\r\n-\t\t\t'parent'         => 'post_parent',\r\n-\t\t\t'parent_exclude' => 'post_parent__not_in',\r\n-\t\t\t'exclude'        => 'post__not_in',\r\n-\t\t\t'limit'          => 'posts_per_page',\r\n-\t\t\t'type'           => 'post_type',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $map_keys as $query_key => $db_key ) {\r\n-\t\t\tif ( isset( $query_vars[ $query_key ] ) ) {\r\n-\t\t\t\t$query_vars[ $db_key ] = $query_vars[ $query_key ];\r\n-\t\t\t\tunset( $query_vars[ $query_key ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$custom_keys = array(\r\n-\t\t\t'featured' => '',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $custom_keys as $key => $custom_key ) {\r\n-\t\t\tif ( isset( $query_vars[ $key ] ) ) {\r\n-\t\t\t\t$custom_keys[ $key ] = $query_vars[ $key ];\r\n-\t\t\t\tunset( $query_vars[ $key ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query by post meta\r\n-\t\tif ( ! isset( $query_vars['meta_query'] ) ) {\r\n-\t\t\t$query_vars['meta_query'] = array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Featured\r\n-\t\tif ( '' !== $custom_keys['featured'] ) {\r\n-\t\t\t$featured = $custom_keys['featured'];\r\n-\r\n-\t\t\tif ( $featured === 'yes' || $featured === 1 || $featured === true || $featured === '1' ) {\r\n-\t\t\t\t$query_vars['meta_query'] = array(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'key'     => '_lp_featured',\r\n-\t\t\t\t\t\t'value'   => 'yes',\r\n-\t\t\t\t\t\t'compare' => '=',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$query_vars['meta_query'] = array(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'key'     => '_lp_featured',\r\n-\t\t\t\t\t\t'value'   => 'yes',\r\n-\t\t\t\t\t\t'compare' => '!=',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse-object-wp-query-args', $query_vars );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Applies our query vars to read courses.\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function get_courses() {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query_vars = $this->get_wp_query_vars();\r\n-\r\n-\t\t$query = new WP_Query( $query_vars );\r\n-\r\n-\t\t$courses = $query->posts;\r\n-\r\n-\t\tif ( isset( $query_vars['return'] ) && 'objects' === $query_vars['return'] ) {\r\n-\t\t\t$courses = array_filter( array_map( 'learn_press_get_course', $courses ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $query_vars['paginate'] ) && $query_vars['paginate'] ) {\r\n-\t\t\t$courses = (object) array(\r\n-\t\t\t\t'courses'       => $courses,\r\n-\t\t\t\t'total'         => $query->found_posts,\r\n-\t\t\t\t'max_num_pages' => $query->max_num_pages,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse-object-query', $courses, $query_vars );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F Backward compatibility\r\n-class LP_Query_Course extends LP_Course_Query {\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_Query\n+ *\n+ * @version 3.3.0\n+ *\u002F\n+class LP_Course_Query extends LP_Object_Query {\n+\n+\tprotected $course_query_vars = array();\n+\n+\t\u002F**\n+\t * LP_Course_Query constructor.\n+\t *\n+\t * @param string $query\n+\t *\u002F\n+\tpublic function __construct( $query = '' ) {\n+\t\t$limit = LP_Settings::get_option( 'archive_course_limit', 6 );\n+\t\tif ( empty( $limit ) ) {\n+\t\t\t$limit = 6;\n+\t\t}\n+\n+\t\t$this->course_query_vars = array(\n+\t\t\t'post_type'   => LP_COURSE_CPT,\n+\t\t\t'post_status' => array( 'draft', 'pending', 'private', 'publish' ),\n+\t\t\t'limit'       => $limit,\n+\t\t\t'author'      => '',\n+\t\t);\n+\n+\t\tparent::__construct( $query );\n+\t}\n+\n+\t\u002F**\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_default_query_vars() {\n+\t\treturn array_merge(\n+\t\t\tparent::get_default_query_vars(),\n+\t\t\t$this->course_query_vars\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Transform our query vars to wp query vars that\n+\t * can read from db.\n+\t *\n+\t * @param array $query_vars\n+\t *\n+\t * @return array|mixed\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function get_wp_query_vars( $query_vars = array() ) {\n+\t\t$query_vars = apply_filters( 'learn-press\u002Fcourse-object-query-args', wp_parse_args( $query_vars, $this->get_query_vars() ) );\n+\t\t$map_keys   = array(\n+\t\t\t'status'         => 'post_status',\n+\t\t\t'page'           => 'paged',\n+\t\t\t'include'        => 'post__in',\n+\t\t\t'return'         => 'fields',\n+\t\t\t'parent'         => 'post_parent',\n+\t\t\t'parent_exclude' => 'post_parent__not_in',\n+\t\t\t'exclude'        => 'post__not_in',\n+\t\t\t'limit'          => 'posts_per_page',\n+\t\t\t'type'           => 'post_type',\n+\t\t);\n+\n+\t\tforeach ( $map_keys as $query_key => $db_key ) {\n+\t\t\tif ( isset( $query_vars[ $query_key ] ) ) {\n+\t\t\t\t$query_vars[ $db_key ] = $query_vars[ $query_key ];\n+\t\t\t\tunset( $query_vars[ $query_key ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$custom_keys = array(\n+\t\t\t'featured' => '',\n+\t\t);\n+\n+\t\tforeach ( $custom_keys as $key => $custom_key ) {\n+\t\t\tif ( isset( $query_vars[ $key ] ) ) {\n+\t\t\t\t$custom_keys[ $key ] = $query_vars[ $key ];\n+\t\t\t\tunset( $query_vars[ $key ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Query by post meta\n+\t\tif ( ! isset( $query_vars['meta_query'] ) ) {\n+\t\t\t$query_vars['meta_query'] = array();\n+\t\t}\n+\n+\t\t\u002F\u002F Featured\n+\t\tif ( '' !== $custom_keys['featured'] ) {\n+\t\t\t$featured = $custom_keys['featured'];\n+\n+\t\t\tif ( $featured === 'yes' || $featured === 1 || $featured === true || $featured === '1' ) {\n+\t\t\t\t$query_vars['meta_query'] = array(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'key'     => '_lp_featured',\n+\t\t\t\t\t\t'value'   => 'yes',\n+\t\t\t\t\t\t'compare' => '=',\n+\t\t\t\t\t),\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$query_vars['meta_query'] = array(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'key'     => '_lp_featured',\n+\t\t\t\t\t\t'value'   => 'yes',\n+\t\t\t\t\t\t'compare' => '!=',\n+\t\t\t\t\t),\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse-object-wp-query-args', $query_vars );\n+\t}\n+\n+\t\u002F**\n+\t * Applies our query vars to read courses.\n+\t *\n+\t * @return array|mixed\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function get_courses() {\n+\t\tglobal $wpdb;\n+\t\t$query_vars = $this->get_wp_query_vars();\n+\n+\t\t$query = new WP_Query( $query_vars );\n+\n+\t\t$courses = $query->posts;\n+\n+\t\tif ( isset( $query_vars['return'] ) && 'objects' === $query_vars['return'] ) {\n+\t\t\t$courses = array_filter( array_map( 'learn_press_get_course', $courses ) );\n+\t\t}\n+\n+\t\tif ( isset( $query_vars['paginate'] ) && $query_vars['paginate'] ) {\n+\t\t\t$courses = (object) array(\n+\t\t\t\t'courses'       => $courses,\n+\t\t\t\t'total'         => $query->found_posts,\n+\t\t\t\t'max_num_pages' => $query->max_num_pages,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse-object-query', $courses, $query_vars );\n+\t}\n+}\n+\n+\u002F\u002F Backward compatibility\n+class LP_Query_Course extends LP_Course_Query {\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-datetime.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-datetime.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-datetime.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-datetime.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,371 +1,396 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Datetime\r\n- *\u002F\r\n-class LP_Datetime {\r\n-\t\u002F**\r\n-\t * @var string $format .\r\n-\t *\u002F\r\n-\tpublic static $format = 'Y-m-d H:i:s';\r\n-\t\u002F**\r\n-\t * Format date by config WP.\r\n-\t *\u002F\r\n-\tconst I18N_FORMAT = 'i18n';\r\n-\t\u002F**\r\n-\t * Format date time by config WP.\r\n-\t *\u002F\r\n-\tconst I18N_FORMAT_HAS_TIME = 'i18n_has_time';\r\n-\t\u002F**\r\n-\t * Format date time Human.\r\n-\t *\u002F\r\n-\tconst HUMAN_FORMAT = 'human';\r\n-\t\u002F**\r\n-\t * String date time.\r\n-\t *\r\n-\t * @var string $raw_date .\r\n-\t *\u002F\r\n-\tprotected $raw_date = null;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param string|int $date\r\n-\t * @param mixed $tz\r\n-\t *\r\n-\t * @throws\r\n-\t *\u002F\r\n-\tpublic function __construct( $date = '', $tz = null ) {\r\n-\t\tif ( $date instanceof LP_Datetime ) {\r\n-\t\t\t$this->raw_date = $date->get_raw_date();\r\n-\t\t} else {\r\n-\t\t\t$this->raw_date = is_numeric( $date ) ? gmdate( self::$format, $date ) : $date;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $this->raw_date ) ) {\r\n-\t\t\t$this->raw_date = current_time( 'mysql', 1 );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check date is null\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_null(): bool {\r\n-\t\treturn ! $this->raw_date || $this->raw_date === '0000-00-00 00:00:00';\r\n-\t}\r\n-\r\n-\tpublic function get_raw_date() {\r\n-\t\treturn $this->raw_date;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return  string  The date as a formatted string.\r\n-\t *\u002F\r\n-\tpublic function __toString() {\r\n-\t\treturn $this->format( self::$format );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Gets the date as a formatted string.\r\n-\t *\r\n-\t * @param string $format Set i18n to return date in local time.\r\n-\t *\r\n-\t * @return string.\r\n-\t * @version 4.0.2\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function format( string $format = '' ): string {\r\n-\t\t$date_str = '';\r\n-\r\n-\t\tif ( '0000-00-00 00:00:00' === $this->get_raw_date() ) {\r\n-\t\t\treturn $date_str;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $format ) ) {\r\n-\t\t\t$format = get_option( 'date_format', 'Y-m-d' );\r\n-\t\t}\r\n-\r\n-\t\tswitch ( $format ) {\r\n-\t\t\tcase 'i18n': \u002F\u002F Display format Date by Timezone of WP.\r\n-\t\t\t\t$time_stamp              = $this->getTimestamp(); \u002F\u002F UTC+0 (GMT)\r\n-\t\t\t\t$time_stamp_by_time_zone = $time_stamp + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\r\n-\t\t\t\t$date_format             = get_option( 'date_format' );\r\n-\t\t\t\t$date_str                = date_i18n( $date_format, $time_stamp_by_time_zone );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'i18n_has_time': \u002F\u002F Display format Date Time by Timezone of WP.\r\n-\t\t\t\t$date_time_format_wp     = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fdatetime\u002Fformat\u002Fi18n_has_time',\r\n-\t\t\t\t\tget_option( 'date_format' ) . ' ' . get_option( 'time_format' )\r\n-\t\t\t\t);\r\n-\t\t\t\t$time_stamp              = $this->getTimestamp(); \u002F\u002F UTC+0 (GMT)\r\n-\t\t\t\t$time_stamp_by_time_zone = $time_stamp + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\r\n-\t\t\t\t$date_str                = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fdatetime\u002Fdate\u002Fi18n_has_time',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\tdate_i18n( $date_time_format_wp, $time_stamp_by_time_zone )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$time_stamp,\r\n-\t\t\t\t\t$time_stamp_by_time_zone\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'human':\r\n-\t\t\t\t$time      = $this->getTimestamp();\r\n-\t\t\t\t$time_diff = time() - $time;\r\n-\r\n-\t\t\t\tif ( $time_diff > 0 ) {\r\n-\t\t\t\t\t$date_str = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time, time() ) );\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'mysql':\r\n-\t\t\t\t$date_str = gmdate( 'Y-m-d H:i:s', $this->getTimestamp() );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$date_str = gmdate( $format, $this->getTimestamp() );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_string( $date_str ) ) {\r\n-\t\t\t$date_str = '';\r\n-\t\t}\r\n-\r\n-\t\treturn $date_str;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display date human time diff.\r\n-\t * 1. Show number days, hours if >= 1 days\r\n-\t * 2. Show number hours, seconds if >= 1 hours\r\n-\t * 3. Show number seconds if \u003C 1 hours\r\n-\t *\r\n-\t * @param DateTime $date_start\r\n-\t * @param DateTime $date_end\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.0.3\r\n-\t * @version 1.0.5\r\n-\t *\u002F\r\n-\tpublic static function format_human_time_diff( DateTime $date_start, DateTime $date_end ): string {\r\n-\t\t$diff = $date_end->diff( $date_start );\r\n-\t\t$week = floor( $diff->d \u002F 7 );\r\n-\r\n-\t\t$i18n_year   = self::get_string_plural_duration( $diff->y, 'year' );\r\n-\t\t$i18n_month  = self::get_string_plural_duration( $diff->m, 'month' );\r\n-\t\t$i18n_week   = self::get_string_plural_duration( $week, 'week' );\r\n-\t\t$i18n_day    = self::get_string_plural_duration( $diff->d, 'day' );\r\n-\t\t$i18n_hour   = self::get_string_plural_duration( $diff->h, 'hour' );\r\n-\t\t$i18n_minute = self::get_string_plural_duration( $diff->i, 'minute' );\r\n-\t\t$i18n_second = self::get_string_plural_duration( $diff->s, 'second' );\r\n-\r\n-\t\t$format_date = '';\r\n-\t\t$string      = array(\r\n-\t\t\t'y' => '%y years',\r\n-\t\t\t'm' => '%m months',\r\n-\t\t\t'w' => '', \u002F\u002F object don't have week, only add to custom week format\r\n-\t\t\t'd' => '%d days, %h hours',\r\n-\t\t\t'h' => '%h hours, %i minutes',\r\n-\t\t\t'i' => '%i minutes, %s seconds',\r\n-\t\t\t's' => $i18n_second,\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $string as $k => $v ) {\r\n-\t\t\tif ( isset( $diff->{$k} ) && $diff->{$k} > 0 ) {\r\n-\t\t\t\tswitch ( $k ) {\r\n-\t\t\t\t\tcase 'y':\r\n-\t\t\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t\t\t$i18n_year,\r\n-\t\t\t\t\t\t\t$diff->m > 0 ? ', ' . $i18n_month : ''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'm':\r\n-\t\t\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t\t\t$i18n_month,\r\n-\t\t\t\t\t\t\t$diff->d > 0 ? ', ' . $i18n_day : ''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'd':\r\n-\t\t\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t\t\t$i18n_day,\r\n-\t\t\t\t\t\t\t$diff->h > 0 ? ', ' . $i18n_hour : ''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'h':\r\n-\t\t\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t\t\t$i18n_hour,\r\n-\t\t\t\t\t\t\t$diff->i > 0 ? ', ' . $i18n_minute : ''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'i':\r\n-\t\t\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t\t\t$i18n_minute,\r\n-\t\t\t\t\t\t\t$diff->s > 0 ? ', ' . $i18n_second : ''\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$format_date = $v;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\t} elseif ( 'w' === $k && $week > 0 ) {\r\n-\t\t\t\t$day_remain  = $diff->d - $week * 7;\r\n-\t\t\t\t$format_date = sprintf(\r\n-\t\t\t\t\t'%1$s%2$s',\r\n-\t\t\t\t\t$i18n_week,\r\n-\t\t\t\t\t$day_remain > 0 ? ', ' . self::get_string_plural_duration( $day_remain, 'day' ) : ''\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fdatetime\u002Fformat_human_time_diff',\r\n-\t\t\t$format_date,\r\n-\t\t\t$diff,\r\n-\t\t\t$date_start,\r\n-\t\t\t$date_end\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the date as an SQL datetime string.\r\n-\t *\r\n-\t * @param boolean $local True to return the date string in the local time zone, false to return it in GMT.\r\n-\t *\r\n-\t * @return  string\r\n-\t * @version 4.0.1\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function toSql( bool $local = false ): string {\r\n-\t\tif ( $local ) {\r\n-\t\t\treturn $this->toSqlLocal();\r\n-\t\t}\r\n-\r\n-\t\treturn $this->format( 'mysql' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert to format sql local time.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.1\r\n-\t *\u002F\r\n-\tprivate function toSqlLocal(): string {\r\n-\t\t$time = $this->getTimestamp() + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\r\n-\r\n-\t\treturn gmdate( LP_Datetime::$format, $time );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get timestamp of Date.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function getTimestamp(): int {\r\n-\t\ttry {\r\n-\t\t\t$date = new DateTime( $this->get_raw_date() );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t$date = new DateTime();\r\n-\t\t}\r\n-\r\n-\t\treturn $date->getTimestamp();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get timestamp of Date in local time.\r\n-\t * Note: timestamp before handle must timezone is GMT+0\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.7.3\r\n-\t *\u002F\r\n-\tpublic function getTimestampLocal(): int {\r\n-\t\treturn $this->getTimestamp() + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get string plural duration.\r\n-\t *\r\n-\t * @param int $duration_number\r\n-\t * @param string $duration_type\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.5\r\n-\t * @since 4.2.3.5\r\n-\t *\u002F\r\n-\tpublic static function get_string_plural_duration( int $duration_number, string $duration_type = '' ): string {\r\n-\t\tswitch ( strtolower( $duration_type ) ) {\r\n-\t\t\tcase 'second':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Second', '%s Seconds', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'minute':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Minute', '%s Minutes', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'hour':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Hour', '%s Hours', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'day':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Day', '%s Days', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'week':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Week', '%s Weeks', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'month':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Month', '%s Months', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'year':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s Year', '%s Years', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$duration_str = $duration_number . ' ' . $duration_type;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fi18n\u002Fplural_duration', $duration_str, $duration_number, $duration_type );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get timezone string\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_timezone_string(): string {\r\n-\t\t$wp_timezone = wp_timezone_string();\r\n-\t\t$is_utc      = (int) $wp_timezone !== 0;\r\n-\r\n-\t\tif ( $is_utc ) {\r\n-\t\t\t$wp_timezone = sprintf( '%s %s', __( 'Timezone: UTC', 'learnpress' ), $wp_timezone );\r\n-\t\t} else {\r\n-\t\t\t$wp_timezone = sprintf( '%s %s', __( 'Timezone:', 'learnpress' ), $wp_timezone );\r\n-\t\t}\r\n-\r\n-\t\treturn $wp_timezone;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Datetime\n+ *\u002F\n+class LP_Datetime {\n+\t\u002F**\n+\t * @var string $format .\n+\t *\u002F\n+\tpublic static $format = 'Y-m-d H:i:s';\n+\t\u002F**\n+\t * Format date by config WP.\n+\t *\u002F\n+\tconst I18N_FORMAT = 'i18n';\n+\t\u002F**\n+\t * Format date time by config WP.\n+\t *\u002F\n+\tconst I18N_FORMAT_HAS_TIME = 'i18n_has_time';\n+\t\u002F**\n+\t * Format date time Human.\n+\t *\u002F\n+\tconst HUMAN_FORMAT = 'human';\n+\t\u002F**\n+\t * String date time.\n+\t *\n+\t * @var string $raw_date .\n+\t *\u002F\n+\tprotected $raw_date = null;\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param string|int $date\n+\t * @param mixed $tz\n+\t *\n+\t * @throws\n+\t *\u002F\n+\tpublic function __construct( $date = '', $tz = null ) {\n+\t\tif ( $date instanceof LP_Datetime ) {\n+\t\t\t$this->raw_date = $date->get_raw_date();\n+\t\t} else {\n+\t\t\t$this->raw_date = is_numeric( $date ) ? gmdate( self::$format, $date ) : $date;\n+\t\t}\n+\n+\t\tif ( empty( $this->raw_date ) ) {\n+\t\t\t$this->raw_date = current_time( 'mysql', 1 );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check date is null\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_null(): bool {\n+\t\treturn ! $this->raw_date || $this->raw_date === '0000-00-00 00:00:00';\n+\t}\n+\n+\tpublic function get_raw_date() {\n+\t\treturn $this->raw_date;\n+\t}\n+\n+\t\u002F**\n+\t * @return  string  The date as a formatted string.\n+\t *\u002F\n+\tpublic function __toString() {\n+\t\treturn $this->format( self::$format );\n+\t}\n+\n+\t\u002F**\n+\t * Gets the date as a formatted string.\n+\t *\n+\t * @param string $format Set i18n to return date in local time.\n+\t *\n+\t * @return string.\n+\t * @version 4.0.2\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function format( string $format = '' ): string {\n+\t\t$date_str = '';\n+\n+\t\tif ( '0000-00-00 00:00:00' === $this->get_raw_date() ) {\n+\t\t\treturn $date_str;\n+\t\t}\n+\n+\t\tif ( empty( $format ) ) {\n+\t\t\t$format = get_option( 'date_format', 'Y-m-d' );\n+\t\t}\n+\n+\t\tswitch ( $format ) {\n+\t\t\tcase 'i18n': \u002F\u002F Display format Date by Timezone of WP.\n+\t\t\t\t$time_stamp              = $this->getTimestamp(); \u002F\u002F UTC+0 (GMT)\n+\t\t\t\t$time_stamp_by_time_zone = $time_stamp + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\n+\t\t\t\t$date_format             = get_option( 'date_format' );\n+\t\t\t\t$date_str                = date_i18n( $date_format, $time_stamp_by_time_zone );\n+\t\t\t\tbreak;\n+\t\t\tcase 'i18n_has_time': \u002F\u002F Display format Date Time by Timezone of WP.\n+\t\t\t\t$date_time_format_wp     = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fdatetime\u002Fformat\u002Fi18n_has_time',\n+\t\t\t\t\tget_option( 'date_format' ) . ' ' . get_option( 'time_format' )\n+\t\t\t\t);\n+\t\t\t\t$time_stamp              = $this->getTimestamp(); \u002F\u002F UTC+0 (GMT)\n+\t\t\t\t$time_stamp_by_time_zone = $time_stamp + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\n+\t\t\t\t$date_str                = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fdatetime\u002Fdate\u002Fi18n_has_time',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\tdate_i18n( $date_time_format_wp, $time_stamp_by_time_zone )\n+\t\t\t\t\t),\n+\t\t\t\t\t$time_stamp,\n+\t\t\t\t\t$time_stamp_by_time_zone\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'human':\n+\t\t\t\t$time      = $this->getTimestamp();\n+\t\t\t\t$time_diff = time() - $time;\n+\n+\t\t\t\tif ( $time_diff > 0 ) {\n+\t\t\t\t\t$date_str = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time, time() ) );\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tcase 'mysql':\n+\t\t\t\t$date_str = gmdate( 'Y-m-d H:i:s', $this->getTimestamp() );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$date_str = gmdate( $format, $this->getTimestamp() );\n+\t\t}\n+\n+\t\tif ( ! is_string( $date_str ) ) {\n+\t\t\t$date_str = '';\n+\t\t}\n+\n+\t\treturn $date_str;\n+\t}\n+\n+\t\u002F**\n+\t * Display date human time diff.\n+\t * 1. Show number days, hours if >= 1 days\n+\t * 2. Show number hours, seconds if >= 1 hours\n+\t * 3. Show number seconds if \u003C 1 hours\n+\t *\n+\t * @param DateTime $date_start\n+\t * @param DateTime $date_end\n+\t *\n+\t * @return string\n+\t * @since 4.0.3\n+\t * @version 1.0.5\n+\t *\u002F\n+\tpublic static function format_human_time_diff( DateTime $date_start, DateTime $date_end ): string {\n+\t\t$diff = $date_end->diff( $date_start );\n+\t\t$week = floor( $diff->d \u002F 7 );\n+\n+\t\t$i18n_year   = self::get_string_plural_duration( $diff->y, 'year' );\n+\t\t$i18n_month  = self::get_string_plural_duration( $diff->m, 'month' );\n+\t\t$i18n_week   = self::get_string_plural_duration( $week, 'week' );\n+\t\t$i18n_day    = self::get_string_plural_duration( $diff->d, 'day' );\n+\t\t$i18n_hour   = self::get_string_plural_duration( $diff->h, 'hour' );\n+\t\t$i18n_minute = self::get_string_plural_duration( $diff->i, 'minute' );\n+\t\t$i18n_second = self::get_string_plural_duration( $diff->s, 'second' );\n+\n+\t\t$format_date = '';\n+\t\t$string      = array(\n+\t\t\t'y' => '%y years',\n+\t\t\t'm' => '%m months',\n+\t\t\t'w' => '', \u002F\u002F object don't have week, only add to custom week format\n+\t\t\t'd' => '%d days, %h hours',\n+\t\t\t'h' => '%h hours, %i minutes',\n+\t\t\t'i' => '%i minutes, %s seconds',\n+\t\t\t's' => $i18n_second,\n+\t\t);\n+\n+\t\tforeach ( $string as $k => $v ) {\n+\t\t\tif ( isset( $diff->{$k} ) && $diff->{$k} > 0 ) {\n+\t\t\t\tswitch ( $k ) {\n+\t\t\t\t\tcase 'y':\n+\t\t\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t\t\t$i18n_year,\n+\t\t\t\t\t\t\t$diff->m > 0 ? ', ' . $i18n_month : ''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'm':\n+\t\t\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t\t\t$i18n_month,\n+\t\t\t\t\t\t\t$diff->d > 0 ? ', ' . $i18n_day : ''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'd':\n+\t\t\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t\t\t$i18n_day,\n+\t\t\t\t\t\t\t$diff->h > 0 ? ', ' . $i18n_hour : ''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'h':\n+\t\t\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t\t\t$i18n_hour,\n+\t\t\t\t\t\t\t$diff->i > 0 ? ', ' . $i18n_minute : ''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'i':\n+\t\t\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t\t\t$i18n_minute,\n+\t\t\t\t\t\t\t$diff->s > 0 ? ', ' . $i18n_second : ''\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$format_date = $v;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\t} elseif ( 'w' === $k && $week > 0 ) {\n+\t\t\t\t$day_remain  = $diff->d - $week * 7;\n+\t\t\t\t$format_date = sprintf(\n+\t\t\t\t\t'%1$s%2$s',\n+\t\t\t\t\t$i18n_week,\n+\t\t\t\t\t$day_remain > 0 ? ', ' . self::get_string_plural_duration( $day_remain, 'day' ) : ''\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fdatetime\u002Fformat_human_time_diff',\n+\t\t\t$format_date,\n+\t\t\t$diff,\n+\t\t\t$date_start,\n+\t\t\t$date_end\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get the date as an SQL datetime string.\n+\t *\n+\t * @param boolean $local True to return the date string in the local time zone, false to return it in GMT.\n+\t *\n+\t * @return  string\n+\t * @version 4.0.1\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function toSql( bool $local = false ): string {\n+\t\tif ( $local ) {\n+\t\t\treturn $this->toSqlLocal();\n+\t\t}\n+\n+\t\treturn $this->format( 'mysql' );\n+\t}\n+\n+\t\u002F**\n+\t * Convert to format sql local time.\n+\t *\n+\t * @return string\n+\t * @since 4.2.1\n+\t *\u002F\n+\tprivate function toSqlLocal(): string {\n+\t\t$time = $this->getTimestamp() + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\n+\n+\t\treturn gmdate( LP_Datetime::$format, $time );\n+\t}\n+\n+\t\u002F**\n+\t * Convert local time to gmt+0 time.\n+\t *\n+\t * @param LP_Datetime $date_time_local\n+\t * @param string $format\n+\t *\n+\t * @return string\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function to_gmt_string( LP_Datetime $date_time_local, string $format = 'Y-m-d H:i:s' ): string {\n+\t\t$time_stamp = $date_time_local->getTimestamp() - $this->get_wp_option_gmt_offset() * HOUR_IN_SECONDS;\n+\t\t$time       = new LP_Datetime( $time_stamp );\n+\t\treturn $time->format( $format );\n+\t}\n+\n+\t\u002F**\n+\t * Get gmt offset from wp option.\n+\t *\n+\t * @return false|mixed|null\n+\t *\u002F\n+\tpublic function get_wp_option_gmt_offset() {\n+\t\treturn get_option( 'gmt_offset' );\n+\t}\n+\n+\t\u002F**\n+\t * Get timestamp of Date.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function getTimestamp(): int {\n+\t\ttry {\n+\t\t\t$date = new DateTime( $this->get_raw_date() );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t$date = new DateTime();\n+\t\t}\n+\n+\t\treturn $date->getTimestamp();\n+\t}\n+\n+\t\u002F**\n+\t * Get timestamp of Date in local time.\n+\t * Note: timestamp before handle must timezone is GMT+0\n+\t *\n+\t * @return int\n+\t * @since 4.2.7.3\n+\t *\u002F\n+\tpublic function getTimestampLocal(): int {\n+\t\treturn $this->getTimestamp() + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;\n+\t}\n+\n+\t\u002F**\n+\t * Get string plural duration.\n+\t *\n+\t * @param int $duration_number\n+\t * @param string $duration_type\n+\t *\n+\t * @return string\n+\t * @version 1.0.5\n+\t * @since 4.2.3.5\n+\t *\u002F\n+\tpublic static function get_string_plural_duration( int $duration_number, string $duration_type = '' ): string {\n+\t\tswitch ( strtolower( $duration_type ) ) {\n+\t\t\tcase 'second':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Second', '%s Seconds', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'minute':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Minute', '%s Minutes', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'hour':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Hour', '%s Hours', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'day':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Day', '%s Days', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'week':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Week', '%s Weeks', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'month':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Month', '%s Months', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'year':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s Year', '%s Years', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$duration_str = $duration_number . ' ' . $duration_type;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fi18n\u002Fplural_duration', $duration_str, $duration_number, $duration_type );\n+\t}\n+\n+\t\u002F**\n+\t * Get timezone string\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_timezone_string(): string {\n+\t\t$wp_timezone = wp_timezone_string();\n+\t\t$is_utc      = (int) $wp_timezone !== 0;\n+\n+\t\tif ( $is_utc ) {\n+\t\t\t$wp_timezone = sprintf( '%s %s', __( 'Timezone: UTC', 'learnpress' ), $wp_timezone );\n+\t\t} else {\n+\t\t\t$wp_timezone = sprintf( '%s %s', __( 'Timezone:', 'learnpress' ), $wp_timezone );\n+\t\t}\n+\n+\t\treturn $wp_timezone;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-debug.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-debug.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-debug.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-debug.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,150 +1,150 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Debug\r\n- *\r\n- * @editor tungnx\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-class LP_Debug {\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprivate static $_instance = null;\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprivate static $_time = array();\r\n-\t\u002F**\r\n-\t * Constructor for the logger.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_transaction_started = false;\r\n-\r\n-\tpublic function output() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set time start\r\n-\t *\r\n-\t * @param string $name\r\n-\t *\u002F\r\n-\tpublic static function time_start( string $name = '' ) {\r\n-\t\tif ( ! self::is_debug() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $name ) ) {\r\n-\t\t\techo 'Please set unique name';\r\n-\t\t}\r\n-\r\n-\t\tself::$_time[ $name ] = microtime( true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total time execute\r\n-\t *\r\n-\t * @param string $name\r\n-\t *\u002F\r\n-\tpublic static function time_end( string $name = '' ) {\r\n-\t\tif ( ! self::is_debug() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( empty( $name ) ) {\r\n-\t\t\techo 'Please set unique name';\r\n-\t\t}\r\n-\r\n-\t\t$time = microtime( true ) - self::$_time[ $name ];\r\n-\t\techo esc_html( wp_sprintf( '%s execution time = %s', $name, $time ) );\r\n-\t\tunset( self::$_time[ $name ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Start a new sql transaction\r\n-\t *\r\n-\t * Remove this function on add-on Frontend Editor and update\r\n-\t *\u002F\r\n-\tpublic static function startTransaction() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( self::$_transaction_started ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$wpdb->query( 'START TRANSACTION;' );\r\n-\r\n-\t\tself::$_transaction_started = true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rollback a sql transaction\r\n-\t *\u002F\r\n-\tpublic static function rollbackTransaction() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! self::$_transaction_started ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$wpdb->query( 'ROLLBACK;' );\r\n-\r\n-\t\tself::$_transaction_started = false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show value of variable\r\n-\t *\r\n-\t * @param mixed $variable\r\n-\t * @param string $file_path\r\n-\t * @param string $line\r\n-\t *\u002F\r\n-\tpublic static function var_dump( $variable, string $file_path = '', string $line = '' ) {\r\n-\t\techo wp_kses( '\u003Cpre>' . print_r( $variable, true ) . '\u003C\u002Fpre>', true );\r\n-\t\techo 'FILE:' . esc_html( $file_path ) . '\u003Cbr> LINE:' . esc_html( $line );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check enable debug mode\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.2.8\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic static function is_debug(): bool {\r\n-\t\treturn LP_Settings::get_option( 'debug', 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set error log\r\n-\t *\r\n-\t * @param Throwable $e\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.1\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic static function error_log( Throwable $e ) {\r\n-\t\terror_log( sprintf( 'MESSAGE: %s FILE: %s LINE: %s', $e->getMessage(), $e->getFile(), $e->getLine() ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Debug|null\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$_instance ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Debug::instance();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Debug\n+ *\n+ * @editor tungnx\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+class LP_Debug {\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprivate static $_instance = null;\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprivate static $_time = array();\n+\t\u002F**\n+\t * Constructor for the logger.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t}\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_transaction_started = false;\n+\n+\tpublic function output() {\n+\t}\n+\n+\t\u002F**\n+\t * Set time start\n+\t *\n+\t * @param string $name\n+\t *\u002F\n+\tpublic static function time_start( string $name = '' ) {\n+\t\tif ( ! self::is_debug() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( empty( $name ) ) {\n+\t\t\techo 'Please set unique name';\n+\t\t}\n+\n+\t\tself::$_time[ $name ] = microtime( true );\n+\t}\n+\n+\t\u002F**\n+\t * Get total time execute\n+\t *\n+\t * @param string $name\n+\t *\u002F\n+\tpublic static function time_end( string $name = '' ) {\n+\t\tif ( ! self::is_debug() ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( empty( $name ) ) {\n+\t\t\techo 'Please set unique name';\n+\t\t}\n+\n+\t\t$time = microtime( true ) - self::$_time[ $name ];\n+\t\techo esc_html( wp_sprintf( '%s execution time = %s', $name, $time ) );\n+\t\tunset( self::$_time[ $name ] );\n+\t}\n+\n+\t\u002F**\n+\t * Start a new sql transaction\n+\t *\n+\t * Remove this function on add-on Frontend Editor and update\n+\t *\u002F\n+\tpublic static function startTransaction() {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( self::$_transaction_started ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$wpdb->query( 'START TRANSACTION;' );\n+\n+\t\tself::$_transaction_started = true;\n+\t}\n+\n+\t\u002F**\n+\t * Rollback a sql transaction\n+\t *\u002F\n+\tpublic static function rollbackTransaction() {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! self::$_transaction_started ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$wpdb->query( 'ROLLBACK;' );\n+\n+\t\tself::$_transaction_started = false;\n+\t}\n+\n+\t\u002F**\n+\t * Show value of variable\n+\t *\n+\t * @param mixed $variable\n+\t * @param string $file_path\n+\t * @param string $line\n+\t *\u002F\n+\tpublic static function var_dump( $variable, string $file_path = '', string $line = '' ) {\n+\t\techo wp_kses( '\u003Cpre>' . print_r( $variable, true ) . '\u003C\u002Fpre>', true );\n+\t\techo 'FILE:' . esc_html( $file_path ) . '\u003Cbr> LINE:' . esc_html( $line );\n+\t}\n+\n+\t\u002F**\n+\t * Check enable debug mode\n+\t *\n+\t * @return bool\n+\t * @since 3.2.8\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic static function is_debug(): bool {\n+\t\treturn LP_Settings::get_option( 'debug', 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Set error log\n+\t *\n+\t * @param Throwable $e\n+\t *\n+\t * @return void\n+\t * @version 1.0.1\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic static function error_log( Throwable $e ) {\n+\t\terror_log( sprintf( 'MESSAGE: %s FILE: %s LINE: %s', $e->getMessage(), $e->getFile(), $e->getLine() ) );\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Debug|null\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$_instance ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+return LP_Debug::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-duration.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-duration.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-duration.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-duration.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,168 +1,168 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Duration\r\n- *\u002F\r\n-class LP_Duration {\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $_duration = 0;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Duration constructor.\r\n-\t *\r\n-\t * @param mixed $duration\r\n-\t *\u002F\r\n-\tpublic function __construct( $duration ) {\r\n-\t\tif ( is_numeric( $duration ) ) {\r\n-\t\t\tif ( $duration \u003C 0 ) {\r\n-\t\t\t\t$duration = 0;\r\n-\t\t\t}\r\n-\t\t\t$this->_duration = absint( $duration );\r\n-\t\t} else {\r\n-\t\t\tif ( preg_match( '~([0-9]+) (second|minute|hour|day|week)~', $duration, $m ) ) {\r\n-\t\t\t\t$s               = array(\r\n-\t\t\t\t\t'second' => 1,\r\n-\t\t\t\t\t'minute' => 60,\r\n-\t\t\t\t\t'hour'   => 3600,\r\n-\t\t\t\t\t'day'    => 3600 * 24,\r\n-\t\t\t\t\t'week'   => 3600 * 24 * 7,\r\n-\t\t\t\t\t'month'  => 3600 * 30,\r\n-\t\t\t\t);\r\n-\t\t\t\t$this->_duration = $m[1] * $s[ $m[2] ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param bool $leading_zero\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_weeks( $leading_zero = false ) {\r\n-\t\t$weeks = $this->_duration ? ( $this->_duration - $this->_duration % ( 3600 * 24 * 7 ) ) \u002F ( 3600 * 24 * 7 ) : 0;\r\n-\r\n-\t\treturn $weeks \u003C 10 && $leading_zero ? \"0{$weeks}\" : $weeks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number of days.\r\n-\t *\r\n-\t * @param bool $leading_zero\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_days( $leading_zero = false ) {\r\n-\t\t$days = $this->_duration ? ( $this->_duration - $this->_duration % ( 3600 * 24 ) ) \u002F ( 3600 * 24 ) : 0;\r\n-\r\n-\t\treturn $days \u003C 10 && $leading_zero ? \"0{$days}\" : $days;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number of hours.\r\n-\t *\r\n-\t * @param bool $leading_zero\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_hours( $leading_zero = false ) {\r\n-\t\t$hours = $this->_duration ? ( $this->_duration - $this->_duration % 3600 ) \u002F 3600 : 0;\r\n-\r\n-\t\treturn $hours \u003C 10 && $leading_zero ? \"0{$hours}\" : $hours;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number of minutes.\r\n-\t *\r\n-\t * @param bool $leading_zero\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_minutes( $leading_zero = false ) {\r\n-\t\t$minutes = $this->_duration ? ( $this->_duration - $this->_duration % 60 ) \u002F 60 : 0;\r\n-\r\n-\t\treturn $minutes \u003C 10 && $leading_zero ? \"0{$minutes}\" : $minutes;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number of seconds.\r\n-\t *\r\n-\t * @param bool $leading_zero\r\n-\t *\r\n-\t * @return int|string\r\n-\t *\u002F\r\n-\tpublic function get_seconds( $leading_zero = false ) {\r\n-\t\treturn $this->_duration \u003C 10 && $leading_zero ? '0' . $this->_duration : $this->_duration;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array|string $format\r\n-\t * @param bool         $remove_empty\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function to_timer( $format = '', $remove_empty = false ) {\r\n-\t\t$day    = $this->get_days();\r\n-\t\t$mod    = $this->_duration - $day * 24 * 3600;\r\n-\t\t$hour   = ( $mod - ( $mod % 3600 ) ) \u002F 3600;\r\n-\t\t$mod    = $mod - $hour * 3600;\r\n-\t\t$minute = ( $mod - $mod % 60 ) \u002F 60;\r\n-\t\t$second = $mod - $minute * 60;\r\n-\r\n-\t\t$parts = array();\r\n-\r\n-\t\tif ( $day ) {\r\n-\t\t\t$parts['day'] = $day;\r\n-\t\t}\r\n-\r\n-\t\tif ( $hour ) {\r\n-\t\t\t$parts['hour'] = $hour;\r\n-\t\t} else {\r\n-\t\t\t$parts['hour'] = 0;\r\n-\t\t}\r\n-\r\n-\t\t$parts['minute'] = $minute;\r\n-\t\t$parts['second'] = $second;\r\n-\r\n-\t\tforeach ( $parts as $k => $v ) {\r\n-\t\t\tif ( $v \u003C 10 ) {\r\n-\t\t\t\t$parts[ $k ] = \"0{$v}\";\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $format ) {\r\n-\t\t\tforeach ( array( 'day', 'hour', 'minute', 'second' ) as $p ) {\r\n-\t\t\t\tif ( $remove_empty && array_key_exists( $p, $parts ) && intval( $parts[ $p ] ) == 0 ) {\r\n-\t\t\t\t\tunset( $parts[ $p ] );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! empty( $format[ $p ] ) && ! empty( $parts[ $p ] ) ) {\r\n-\t\t\t\t\t$parts[ $p ] = sprintf( $format[ $p ], $parts[ $p ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn join( ' ', $parts );\r\n-\t\t}\r\n-\r\n-\t\treturn join( ':', $parts );\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn $this->_duration . '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Duration|int $duration\r\n-\t *\r\n-\t * @return LP_Duration\r\n-\t *\u002F\r\n-\tpublic function diff( $duration ) {\r\n-\t\t$diff = $duration instanceof LP_Duration ? $this->_duration - $duration->get_seconds() : $this->_duration - $duration;\r\n-\r\n-\t\treturn new LP_Duration( $diff );\r\n-\t}\r\n-\r\n-\tpublic function get() {\r\n-\t\treturn $this->_duration;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Duration\n+ *\u002F\n+class LP_Duration {\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $_duration = 0;\n+\n+\t\u002F**\n+\t * LP_Duration constructor.\n+\t *\n+\t * @param mixed $duration\n+\t *\u002F\n+\tpublic function __construct( $duration ) {\n+\t\tif ( is_numeric( $duration ) ) {\n+\t\t\tif ( $duration \u003C 0 ) {\n+\t\t\t\t$duration = 0;\n+\t\t\t}\n+\t\t\t$this->_duration = absint( $duration );\n+\t\t} else {\n+\t\t\tif ( preg_match( '~([0-9]+) (second|minute|hour|day|week)~', $duration, $m ) ) {\n+\t\t\t\t$s               = array(\n+\t\t\t\t\t'second' => 1,\n+\t\t\t\t\t'minute' => 60,\n+\t\t\t\t\t'hour'   => 3600,\n+\t\t\t\t\t'day'    => 3600 * 24,\n+\t\t\t\t\t'week'   => 3600 * 24 * 7,\n+\t\t\t\t\t'month'  => 3600 * 30,\n+\t\t\t\t);\n+\t\t\t\t$this->_duration = $m[1] * $s[ $m[2] ];\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param bool $leading_zero\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_weeks( $leading_zero = false ) {\n+\t\t$weeks = $this->_duration ? ( $this->_duration - $this->_duration % ( 3600 * 24 * 7 ) ) \u002F ( 3600 * 24 * 7 ) : 0;\n+\n+\t\treturn $weeks \u003C 10 && $leading_zero ? \"0{$weeks}\" : $weeks;\n+\t}\n+\n+\t\u002F**\n+\t * Get number of days.\n+\t *\n+\t * @param bool $leading_zero\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_days( $leading_zero = false ) {\n+\t\t$days = $this->_duration ? ( $this->_duration - $this->_duration % ( 3600 * 24 ) ) \u002F ( 3600 * 24 ) : 0;\n+\n+\t\treturn $days \u003C 10 && $leading_zero ? \"0{$days}\" : $days;\n+\t}\n+\n+\t\u002F**\n+\t * Get number of hours.\n+\t *\n+\t * @param bool $leading_zero\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_hours( $leading_zero = false ) {\n+\t\t$hours = $this->_duration ? ( $this->_duration - $this->_duration % 3600 ) \u002F 3600 : 0;\n+\n+\t\treturn $hours \u003C 10 && $leading_zero ? \"0{$hours}\" : $hours;\n+\t}\n+\n+\t\u002F**\n+\t * Get number of minutes.\n+\t *\n+\t * @param bool $leading_zero\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_minutes( $leading_zero = false ) {\n+\t\t$minutes = $this->_duration ? ( $this->_duration - $this->_duration % 60 ) \u002F 60 : 0;\n+\n+\t\treturn $minutes \u003C 10 && $leading_zero ? \"0{$minutes}\" : $minutes;\n+\t}\n+\n+\t\u002F**\n+\t * Get number of seconds.\n+\t *\n+\t * @param bool $leading_zero\n+\t *\n+\t * @return int|string\n+\t *\u002F\n+\tpublic function get_seconds( $leading_zero = false ) {\n+\t\treturn $this->_duration \u003C 10 && $leading_zero ? '0' . $this->_duration : $this->_duration;\n+\t}\n+\n+\t\u002F**\n+\t * @param array|string $format\n+\t * @param bool         $remove_empty\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function to_timer( $format = '', $remove_empty = false ) {\n+\t\t$day    = $this->get_days();\n+\t\t$mod    = $this->_duration - $day * 24 * 3600;\n+\t\t$hour   = ( $mod - ( $mod % 3600 ) ) \u002F 3600;\n+\t\t$mod    = $mod - $hour * 3600;\n+\t\t$minute = ( $mod - $mod % 60 ) \u002F 60;\n+\t\t$second = $mod - $minute * 60;\n+\n+\t\t$parts = array();\n+\n+\t\tif ( $day ) {\n+\t\t\t$parts['day'] = $day;\n+\t\t}\n+\n+\t\tif ( $hour ) {\n+\t\t\t$parts['hour'] = $hour;\n+\t\t} else {\n+\t\t\t$parts['hour'] = 0;\n+\t\t}\n+\n+\t\t$parts['minute'] = $minute;\n+\t\t$parts['second'] = $second;\n+\n+\t\tforeach ( $parts as $k => $v ) {\n+\t\t\tif ( $v \u003C 10 ) {\n+\t\t\t\t$parts[ $k ] = \"0{$v}\";\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $format ) {\n+\t\t\tforeach ( array( 'day', 'hour', 'minute', 'second' ) as $p ) {\n+\t\t\t\tif ( $remove_empty && array_key_exists( $p, $parts ) && intval( $parts[ $p ] ) == 0 ) {\n+\t\t\t\t\tunset( $parts[ $p ] );\n+\t\t\t\t}\n+\t\t\t\tif ( ! empty( $format[ $p ] ) && ! empty( $parts[ $p ] ) ) {\n+\t\t\t\t\t$parts[ $p ] = sprintf( $format[ $p ], $parts[ $p ] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn join( ' ', $parts );\n+\t\t}\n+\n+\t\treturn join( ':', $parts );\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn $this->_duration . '';\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Duration|int $duration\n+\t *\n+\t * @return LP_Duration\n+\t *\u002F\n+\tpublic function diff( $duration ) {\n+\t\t$diff = $duration instanceof LP_Duration ? $this->_duration - $duration->get_seconds() : $this->_duration - $duration;\n+\n+\t\treturn new LP_Duration( $diff );\n+\t}\n+\n+\tpublic function get() {\n+\t\treturn $this->_duration;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-emails.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-emails.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-emails.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-emails.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,184 +1,184 @@\n-\u003C?php\r\n-\u002F**\r\n- * Base class of LearnPress emails and helper functions.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Emails' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Emails\r\n-\t *\u002F\r\n-\tclass LP_Emails {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * List of all email actions.\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic $emails = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The single instance of the class\r\n-\t\t *\r\n-\t\t * @var LP_Emails\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Email\r\n-\t\t *\u002F\r\n-\t\tprotected $_current = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $_last_current = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Emails constructor.\r\n-\t\t *\u002F\r\n-\t\tprotected function __construct() {\r\n-\t\t\tif ( did_action( 'learn-press\u002Femails-init' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Femails\u002Fclass-lp-email.php';\r\n-\r\n-\t\t\t$this->register_emails();\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Femails-init', $this );\r\n-\t\t}\r\n-\r\n-\t\tpublic function register_emails() {\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-student.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php';\r\n-\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php';\r\n-\r\n-\t\t\t\u002F\u002F New order\r\n-\t\t\t$this->emails['LP_Email_New_Order_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php';\r\n-\t\t\t$this->emails['LP_Email_New_Order_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-new-order-user.php';\r\n-\t\t\t$this->emails['LP_Email_New_Order_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php';\r\n-\t\t\t$this->emails['LP_Email_New_Order_Guest']      = include_once 'emails\u002Fguest\u002Fclass-lp-email-new-order-guest.php';\r\n-\r\n-\t\t\t\u002F\u002F Processing order\r\n-\t\t\t$this->emails['LP_Email_Processing_Order_User']  = include_once 'emails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php';\r\n-\t\t\t$this->emails['LP_Email_Processing_Order_Guest'] = include_once 'emails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php';\r\n-\r\n-\t\t\t\u002F\u002F Completed order\r\n-\t\t\t$this->emails['LP_Email_Completed_Order_Admin'] = include_once 'emails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php';\r\n-\t\t\t$this->emails['LP_Email_Completed_Order_User']  = include_once 'emails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php';\r\n-\t\t\t$this->emails['LP_Email_Completed_Order_Guest'] = include_once 'emails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php';\r\n-\r\n-\t\t\t\u002F\u002F Cancelled order\r\n-\t\t\t$this->emails['LP_Email_Cancelled_Order_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php';\r\n-\t\t\t$this->emails['LP_Email_Cancelled_Order_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php';\r\n-\t\t\t$this->emails['LP_Email_Cancelled_Order_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php';\r\n-\t\t\t$this->emails['LP_Email_Cancelled_Order_Guest']      = include_once 'emails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php';\r\n-\r\n-\t\t\t\u002F\u002F Enrolled course\r\n-\t\t\t$this->emails['LP_Email_Enrolled_Course_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php';\r\n-\t\t\t$this->emails['LP_Email_Enrolled_Course_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php';\r\n-\t\t\t$this->emails['LP_Email_Enrolled_Course_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php';\r\n-\r\n-\t\t\t\u002F\u002F Finished course\r\n-\t\t\t$this->emails['LP_Email_Finished_Course_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php';\r\n-\t\t\t$this->emails['LP_Email_Finished_Course_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php';\r\n-\t\t\t$this->emails['LP_Email_Finished_Course_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php';\r\n-\r\n-\t\t\t\u002F\u002F Become An Instructor\r\n-\t\t\t$this->emails['LP_Email_Become_An_Instructor'] = include_once 'emails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php';\r\n-\t\t\t$this->emails['LP_Email_Instructor_Accepted']  = include_once 'emails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php';\r\n-\t\t\t$this->emails['LP_Email_Instructor_Denied']    = include_once 'emails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php';\r\n-\r\n-\t\t\t\u002F\u002F Forgot Password\r\n-\t\t\t$this->emails['LP_Email_Reset_Password'] = include_once 'emails\u002Ftypes\u002Fclass-lp-email-reset-password.php';\r\n-\r\n-\t\t\tdo_action( 'learnpress\u002Femails\u002Fregister', $this->emails );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_current( $id ) {\r\n-\t\t\t$this->_last_current = $this->_current;\r\n-\r\n-\t\t\tif ( $id instanceof LP_Email ) {\r\n-\t\t\t\t$this->_current = $id->id;\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->_current = $id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|LP_Email\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current() {\r\n-\t\t\treturn self::get_email( $this->_current );\r\n-\t\t}\r\n-\r\n-\t\tpublic function reset_current() {\r\n-\t\t\t$this->_current = $this->_last_current;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $id\r\n-\t\t *\r\n-\t\t * @return LP_Email|bool\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_email( $id ) {\r\n-\t\t\tstatic $emails = array();\r\n-\r\n-\t\t\tif ( empty( $emails[ $id ] ) ) {\r\n-\t\t\t\tforeach ( self::instance()->emails as $class => $email ) {\r\n-\t\t\t\t\t$emails[ $email->id ] = $class;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ! empty( $emails[ $id ] ) ? self::instance()->emails[ $emails[ $id ] ] : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get image header in general settings.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_image_header() {\r\n-\t\t\t$image = LP_Settings::instance()->get( 'emails_general.header_image' );\r\n-\r\n-\t\t\tif ( ! empty( $image ) ) {\r\n-\t\t\t\t$image = wp_get_attachment_image_url( $image, 'full' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $image;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Main LP_Mail Instance, ensures only one instance of LP_Mail is loaded or can be loaded.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @return LP_Emails\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\r\n-\t\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Base class of LearnPress emails and helper functions.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Emails' ) ) {\n+\t\u002F**\n+\t * Class LP_Emails\n+\t *\u002F\n+\tclass LP_Emails {\n+\n+\t\t\u002F**\n+\t\t * List of all email actions.\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic $emails = array();\n+\n+\t\t\u002F**\n+\t\t * The single instance of the class\n+\t\t *\n+\t\t * @var LP_Emails\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Email\n+\t\t *\u002F\n+\t\tprotected $_current = null;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $_last_current = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Emails constructor.\n+\t\t *\u002F\n+\t\tprotected function __construct() {\n+\t\t\tif ( did_action( 'learn-press\u002Femails-init' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Femails\u002Fclass-lp-email.php';\n+\n+\t\t\t$this->register_emails();\n+\n+\t\t\tdo_action( 'learn-press\u002Femails-init', $this );\n+\t\t}\n+\n+\t\tpublic function register_emails() {\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-student.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php';\n+\t\t\tinclude_once 'emails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php';\n+\n+\t\t\t\u002F\u002F New order\n+\t\t\t$this->emails['LP_Email_New_Order_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php';\n+\t\t\t$this->emails['LP_Email_New_Order_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-new-order-user.php';\n+\t\t\t$this->emails['LP_Email_New_Order_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php';\n+\t\t\t$this->emails['LP_Email_New_Order_Guest']      = include_once 'emails\u002Fguest\u002Fclass-lp-email-new-order-guest.php';\n+\n+\t\t\t\u002F\u002F Processing order\n+\t\t\t$this->emails['LP_Email_Processing_Order_User']  = include_once 'emails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php';\n+\t\t\t$this->emails['LP_Email_Processing_Order_Guest'] = include_once 'emails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php';\n+\n+\t\t\t\u002F\u002F Completed order\n+\t\t\t$this->emails['LP_Email_Completed_Order_Admin'] = include_once 'emails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php';\n+\t\t\t$this->emails['LP_Email_Completed_Order_User']  = include_once 'emails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php';\n+\t\t\t$this->emails['LP_Email_Completed_Order_Guest'] = include_once 'emails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php';\n+\n+\t\t\t\u002F\u002F Cancelled order\n+\t\t\t$this->emails['LP_Email_Cancelled_Order_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php';\n+\t\t\t$this->emails['LP_Email_Cancelled_Order_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php';\n+\t\t\t$this->emails['LP_Email_Cancelled_Order_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php';\n+\t\t\t$this->emails['LP_Email_Cancelled_Order_Guest']      = include_once 'emails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php';\n+\n+\t\t\t\u002F\u002F Enrolled course\n+\t\t\t$this->emails['LP_Email_Enrolled_Course_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php';\n+\t\t\t$this->emails['LP_Email_Enrolled_Course_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php';\n+\t\t\t$this->emails['LP_Email_Enrolled_Course_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php';\n+\n+\t\t\t\u002F\u002F Finished course\n+\t\t\t$this->emails['LP_Email_Finished_Course_Admin']      = include_once 'emails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php';\n+\t\t\t$this->emails['LP_Email_Finished_Course_Instructor'] = include_once 'emails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php';\n+\t\t\t$this->emails['LP_Email_Finished_Course_User']       = include_once 'emails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php';\n+\n+\t\t\t\u002F\u002F Become An Instructor\n+\t\t\t$this->emails['LP_Email_Become_An_Instructor'] = include_once 'emails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php';\n+\t\t\t$this->emails['LP_Email_Instructor_Accepted']  = include_once 'emails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php';\n+\t\t\t$this->emails['LP_Email_Instructor_Denied']    = include_once 'emails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php';\n+\n+\t\t\t\u002F\u002F Forgot Password\n+\t\t\t$this->emails['LP_Email_Reset_Password'] = include_once 'emails\u002Ftypes\u002Fclass-lp-email-reset-password.php';\n+\n+\t\t\tdo_action( 'learnpress\u002Femails\u002Fregister', $this->emails );\n+\t\t}\n+\n+\t\tpublic function set_current( $id ) {\n+\t\t\t$this->_last_current = $this->_current;\n+\n+\t\t\tif ( $id instanceof LP_Email ) {\n+\t\t\t\t$this->_current = $id->id;\n+\t\t\t} else {\n+\t\t\t\t$this->_current = $id;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool|LP_Email\n+\t\t *\u002F\n+\t\tpublic function get_current() {\n+\t\t\treturn self::get_email( $this->_current );\n+\t\t}\n+\n+\t\tpublic function reset_current() {\n+\t\t\t$this->_current = $this->_last_current;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $id\n+\t\t *\n+\t\t * @return LP_Email|bool\n+\t\t *\u002F\n+\t\tpublic static function get_email( $id ) {\n+\t\t\tstatic $emails = array();\n+\n+\t\t\tif ( empty( $emails[ $id ] ) ) {\n+\t\t\t\tforeach ( self::instance()->emails as $class => $email ) {\n+\t\t\t\t\t$emails[ $email->id ] = $class;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn ! empty( $emails[ $id ] ) ? self::instance()->emails[ $emails[ $id ] ] : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get image header in general settings.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_image_header() {\n+\t\t\t$image = LP_Settings::instance()->get( 'emails_general.header_image' );\n+\n+\t\t\tif ( ! empty( $image ) ) {\n+\t\t\t\t$image = wp_get_attachment_image_url( $image, 'full' );\n+\t\t\t}\n+\n+\t\t\treturn $image;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Main LP_Mail Instance, ensures only one instance of LP_Mail is loaded or can be loaded.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @return LP_Emails\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\n+\t\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-file-system.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-file-system.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-file-system.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-file-system.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,364 +1,364 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_WP_Filesystem\r\n- *\r\n- * @version 1.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3.1\r\n- *\u002F\r\n-if ( ! class_exists( 'LP_WP_Filesystem' ) ) {\r\n-\tclass LP_WP_Filesystem {\r\n-\t\t\u002F**\r\n-\t\t * @var WP_Filesystem_Direct\r\n-\t\t *\u002F\r\n-\t\tpublic $lp_filesystem;\r\n-\t\t\u002F**\r\n-\t\t * @var LP_WP_Filesystem\r\n-\t\t *\u002F\r\n-\t\tprotected static $instance;\r\n-\r\n-\t\tprotected function __construct() {\r\n-\t\t\tglobal $wp_filesystem;\r\n-\r\n-\t\t\tif ( empty( $wp_filesystem ) ) {\r\n-\t\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Ffile.php';\r\n-\t\t\t\tWP_Filesystem();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->lp_filesystem = $wp_filesystem;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Instance\r\n-\t\t *\r\n-\t\t * @return LP_WP_Filesystem\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): LP_WP_Filesystem {\r\n-\t\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*public static function wp_file_system() {\r\n-\t\t\tglobal $wp_filesystem;\r\n-\r\n-\t\t\tif ( empty( $wp_filesystem ) ) {\r\n-\t\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Ffile.php';\r\n-\t\t\t\tWP_Filesystem();\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\tpublic static function chmod_dir(): int {\r\n-\t\t\tif ( defined( 'FS_CHMOD_DIR' ) ) {\r\n-\t\t\t\t$chmod_dir = FS_CHMOD_DIR;\r\n-\t\t\t} else {\r\n-\t\t\t\t$chmod_dir = ( fileperms( ABSPATH ) & 0777 | 0755 );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $chmod_dir;\r\n-\t\t}\r\n-\r\n-\t\tpublic static function chmod_file(): int {\r\n-\t\t\tif ( defined( 'FS_CHMOD_FILE' ) ) {\r\n-\t\t\t\t$chmod_file = FS_CHMOD_FILE;\r\n-\t\t\t} else {\r\n-\t\t\t\t$chmod_file = ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $chmod_file;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set CHMOD\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t * @param null $perms\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function chmod( $path, $perms = null ): bool {\r\n-\t\t\tif ( is_null( $perms ) ) {\r\n-\t\t\t\t$perms = $this->is_file( $path ) ? self::chmod_file() : self::chmod_dir();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$output = @chmod( $path, $perms ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->chmod( $path, $perms, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check is file\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_file( $path ): bool {\r\n-\t\t\t$output = is_file( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->is_file( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check is dir\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_dir( $path ): bool {\r\n-\t\t\t$output = is_dir( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->is_dir( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check can read file\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_readable( $path ): bool {\r\n-\t\t\t$output = is_readable( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->is_readable( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check file can write\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_writable( $path ): bool {\r\n-\t\t\t$output = is_writable( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->is_writable( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete file\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function unlink( $path ): bool {\r\n-\t\t\t$output = @unlink( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->delete( $path, false, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get content of file\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return false|string\r\n-\t\t *\u002F\r\n-\t\tpublic function file_get_contents( $path ) {\r\n-\t\t\t$output = @file_get_contents( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->get_contents( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Put content to file\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t * @param $content\r\n-\t\t *\r\n-\t\t * @return false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function put_contents( $path, $content ) {\r\n-\t\t\t$output = @file_put_contents( $path, $content ); \u002F\u002F phpcs:ignore\r\n-\t\t\t$this->chmod( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->put_contents( $path, $content, self::chmod_file() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check file exists\r\n-\t\t *\r\n-\t\t * @param $path\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.3.1\r\n-\t\t *\u002F\r\n-\t\tpublic function file_exists( $path ): bool {\r\n-\t\t\t$output = file_exists( $path );\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->exists( $path );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Put content\r\n-\t\t *\r\n-\t\t * @param $file_name\r\n-\t\t * @param $content\r\n-\t\t * @param string $folder\r\n-\t\t *\r\n-\t\t * @return false|int|void\r\n-\t\t *\u002F\r\n-\t\tpublic function put_content_upload( $file_name, $content, $folder = 'learnpress' ) {\r\n-\t\t\t$wp_upload_dir = wp_upload_dir( null, false );\r\n-\t\t\t$upload_dir    = $wp_upload_dir['basedir'] . DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR;\r\n-\t\t\t$file_path     = $upload_dir . $file_name;\r\n-\r\n-\t\t\t$output = @file_put_contents( $file_path, $content ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\tif ( ! $this->is_writable( $wp_upload_dir['basedir'] ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $this->is_dir( $upload_dir ) ) {\r\n-\t\t\t\t\twp_mkdir_p( $upload_dir );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$output = $this->lp_filesystem->put_contents( $file_path, $content, self::chmod_file() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Copy file\r\n-\t\t *\r\n-\t\t * @param $source_path\r\n-\t\t * @param $des_path\r\n-\t\t * @param bool $overwrite\r\n-\t\t * @param false $perms\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function copy( $source_path, $des_path, $overwrite = true, $perms = false ): bool {\r\n-\t\t\tif ( ! $this->file_exists( $source_path ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $overwrite && $this->file_exists( $des_path ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$output = @copy( $source_path, $des_path ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\t\tif ( $perms && $output ) {\r\n-\t\t\t\t$this->chmod( $des_path, $perms );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->copy( $source_path, $des_path, $overwrite, $perms );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Move file\r\n-\t\t *\r\n-\t\t * @param $source_path\r\n-\t\t * @param $des_path\r\n-\t\t * @param bool $overwrite\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function move( $source_path, $des_path, bool $overwrite = true ): bool {\r\n-\t\t\tif ( ! $this->file_exists( $source_path ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $overwrite && $this->file_exists( $des_path ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t} elseif ( @rename( $source_path, $des_path ) ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $this->copy( $source_path, $des_path, $overwrite ) && $this->file_exists( $des_path ) ) {\r\n-\t\t\t\t\t$this->unlink( $source_path );\r\n-\r\n-\t\t\t\t\t$output = true;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$output = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\t$output = $this->lp_filesystem->move( $source_path, $des_path, $overwrite );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Code custom for user Unigrant is using.\r\n-\t\t *\u002F\r\n-\t\tpublic function download_url( $url, $timeout = 300, $signature_verification = false ) {\r\n-\t\t\treturn download_url( $url, $timeout, $signature_verification );\r\n-\t\t}\r\n-\r\n-\t\tpublic function lp_handle_upload( &$file, $overrides = false, $time = null ) {\r\n-\t\t\treturn wp_handle_upload( $file, $overrides, $time );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get size of file from url\r\n-\t\t *\r\n-\t\t * @param $url\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 4.2.3\r\n-\t\t * @version 1.0.1\r\n-\t\t * @depreacted 4.2.7.8.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_file_size_from_url( $url ) {\r\n-\t\t\t$tmp_file = $this->download_url( $url );\r\n-\t\t\t$size     = '';\r\n-\t\t\tif ( $tmp_file && ! is_wp_error( $tmp_file ) ) {\r\n-\t\t\t\t$size = ( filesize( $tmp_file ) \u002F 1024 \u003C 1024 ) ? round( filesize( $tmp_file ) \u002F 1024, 2 ) . 'KB' : round( filesize( $tmp_file ) \u002F 1024 \u002F 1024, 2 ) . 'MB';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $size;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_WP_Filesystem\n+ *\n+ * @version 1.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3.1\n+ *\u002F\n+if ( ! class_exists( 'LP_WP_Filesystem' ) ) {\n+\tclass LP_WP_Filesystem {\n+\t\t\u002F**\n+\t\t * @var WP_Filesystem_Direct\n+\t\t *\u002F\n+\t\tpublic $lp_filesystem;\n+\t\t\u002F**\n+\t\t * @var LP_WP_Filesystem\n+\t\t *\u002F\n+\t\tprotected static $instance;\n+\n+\t\tprotected function __construct() {\n+\t\t\tglobal $wp_filesystem;\n+\n+\t\t\tif ( empty( $wp_filesystem ) ) {\n+\t\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Ffile.php';\n+\t\t\t\tWP_Filesystem();\n+\t\t\t}\n+\n+\t\t\t$this->lp_filesystem = $wp_filesystem;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Instance\n+\t\t *\n+\t\t * @return LP_WP_Filesystem\n+\t\t *\u002F\n+\t\tpublic static function instance(): LP_WP_Filesystem {\n+\t\t\tif ( is_null( self::$instance ) ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\n+\t\t\u002F*public static function wp_file_system() {\n+\t\t\tglobal $wp_filesystem;\n+\n+\t\t\tif ( empty( $wp_filesystem ) ) {\n+\t\t\t\trequire_once ABSPATH . '\u002Fwp-admin\u002Fincludes\u002Ffile.php';\n+\t\t\t\tWP_Filesystem();\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\tpublic static function chmod_dir(): int {\n+\t\t\tif ( defined( 'FS_CHMOD_DIR' ) ) {\n+\t\t\t\t$chmod_dir = FS_CHMOD_DIR;\n+\t\t\t} else {\n+\t\t\t\t$chmod_dir = ( fileperms( ABSPATH ) & 0777 | 0755 );\n+\t\t\t}\n+\n+\t\t\treturn $chmod_dir;\n+\t\t}\n+\n+\t\tpublic static function chmod_file(): int {\n+\t\t\tif ( defined( 'FS_CHMOD_FILE' ) ) {\n+\t\t\t\t$chmod_file = FS_CHMOD_FILE;\n+\t\t\t} else {\n+\t\t\t\t$chmod_file = ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 );\n+\t\t\t}\n+\n+\t\t\treturn $chmod_file;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set CHMOD\n+\t\t *\n+\t\t * @param $path\n+\t\t * @param null $perms\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function chmod( $path, $perms = null ): bool {\n+\t\t\tif ( is_null( $perms ) ) {\n+\t\t\t\t$perms = $this->is_file( $path ) ? self::chmod_file() : self::chmod_dir();\n+\t\t\t}\n+\n+\t\t\t$output = @chmod( $path, $perms ); \u002F\u002F phpcs:ignore\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->chmod( $path, $perms, false );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check is file\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_file( $path ): bool {\n+\t\t\t$output = is_file( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->is_file( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check is dir\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_dir( $path ): bool {\n+\t\t\t$output = is_dir( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->is_dir( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check can read file\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_readable( $path ): bool {\n+\t\t\t$output = is_readable( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->is_readable( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check file can write\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_writable( $path ): bool {\n+\t\t\t$output = is_writable( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->is_writable( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete file\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function unlink( $path ): bool {\n+\t\t\t$output = @unlink( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->delete( $path, false, false );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get content of file\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return false|string\n+\t\t *\u002F\n+\t\tpublic function file_get_contents( $path ) {\n+\t\t\t$output = @file_get_contents( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->get_contents( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Put content to file\n+\t\t *\n+\t\t * @param $path\n+\t\t * @param $content\n+\t\t *\n+\t\t * @return false|int\n+\t\t *\u002F\n+\t\tpublic function put_contents( $path, $content ) {\n+\t\t\t$output = @file_put_contents( $path, $content ); \u002F\u002F phpcs:ignore\n+\t\t\t$this->chmod( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->put_contents( $path, $content, self::chmod_file() );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check file exists\n+\t\t *\n+\t\t * @param $path\n+\t\t *\n+\t\t * @return bool\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.3.1\n+\t\t *\u002F\n+\t\tpublic function file_exists( $path ): bool {\n+\t\t\t$output = file_exists( $path );\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->exists( $path );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Put content\n+\t\t *\n+\t\t * @param $file_name\n+\t\t * @param $content\n+\t\t * @param string $folder\n+\t\t *\n+\t\t * @return false|int|void\n+\t\t *\u002F\n+\t\tpublic function put_content_upload( $file_name, $content, $folder = 'learnpress' ) {\n+\t\t\t$wp_upload_dir = wp_upload_dir( null, false );\n+\t\t\t$upload_dir    = $wp_upload_dir['basedir'] . DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR;\n+\t\t\t$file_path     = $upload_dir . $file_name;\n+\n+\t\t\t$output = @file_put_contents( $file_path, $content ); \u002F\u002F phpcs:ignore\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\tif ( ! $this->is_writable( $wp_upload_dir['basedir'] ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $this->is_dir( $upload_dir ) ) {\n+\t\t\t\t\twp_mkdir_p( $upload_dir );\n+\t\t\t\t}\n+\n+\t\t\t\t$output = $this->lp_filesystem->put_contents( $file_path, $content, self::chmod_file() );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Copy file\n+\t\t *\n+\t\t * @param $source_path\n+\t\t * @param $des_path\n+\t\t * @param bool $overwrite\n+\t\t * @param false $perms\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function copy( $source_path, $des_path, $overwrite = true, $perms = false ): bool {\n+\t\t\tif ( ! $this->file_exists( $source_path ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! $overwrite && $this->file_exists( $des_path ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$output = @copy( $source_path, $des_path ); \u002F\u002F phpcs:ignore\n+\n+\t\t\tif ( $perms && $output ) {\n+\t\t\t\t$this->chmod( $des_path, $perms );\n+\t\t\t}\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->copy( $source_path, $des_path, $overwrite, $perms );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Move file\n+\t\t *\n+\t\t * @param $source_path\n+\t\t * @param $des_path\n+\t\t * @param bool $overwrite\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function move( $source_path, $des_path, bool $overwrite = true ): bool {\n+\t\t\tif ( ! $this->file_exists( $source_path ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! $overwrite && $this->file_exists( $des_path ) ) {\n+\t\t\t\treturn false;\n+\t\t\t} elseif ( @rename( $source_path, $des_path ) ) {\n+\t\t\t\treturn true;\n+\t\t\t} else {\n+\t\t\t\tif ( $this->copy( $source_path, $des_path, $overwrite ) && $this->file_exists( $des_path ) ) {\n+\t\t\t\t\t$this->unlink( $source_path );\n+\n+\t\t\t\t\t$output = true;\n+\t\t\t\t} else {\n+\t\t\t\t\t$output = false;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! $output ) {\n+\t\t\t\t$output = $this->lp_filesystem->move( $source_path, $des_path, $overwrite );\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Code custom for user Unigrant is using.\n+\t\t *\u002F\n+\t\tpublic function download_url( $url, $timeout = 300, $signature_verification = false ) {\n+\t\t\treturn download_url( $url, $timeout, $signature_verification );\n+\t\t}\n+\n+\t\tpublic function lp_handle_upload( &$file, $overrides = false, $time = null ) {\n+\t\t\treturn wp_handle_upload( $file, $overrides, $time );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get size of file from url\n+\t\t *\n+\t\t * @param $url\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 4.2.3\n+\t\t * @version 1.0.1\n+\t\t * @depreacted 4.2.7.8.5\n+\t\t *\u002F\n+\t\tpublic function get_file_size_from_url( $url ) {\n+\t\t\t$tmp_file = $this->download_url( $url );\n+\t\t\t$size     = '';\n+\t\t\tif ( $tmp_file && ! is_wp_error( $tmp_file ) ) {\n+\t\t\t\t$size = ( filesize( $tmp_file ) \u002F 1024 \u003C 1024 ) ? round( filesize( $tmp_file ) \u002F 1024, 2 ) . 'KB' : round( filesize( $tmp_file ) \u002F 1024 \u002F 1024, 2 ) . 'MB';\n+\t\t\t}\n+\n+\t\t\treturn $size;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-forms-handler.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-forms-handler.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-forms-handler.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-forms-handler.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,505 +1,505 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Background\\LPBackgroundAjax;\r\n-\r\n-\u002F**\r\n- * Class LP_Forms_Handler\r\n- *\r\n- * Process action for submitting forms\r\n- *\r\n- * @since 4.0.0\r\n- * @author ThimPress \u003Cnhamdv>\r\n- *\u002F\r\n-class LP_Forms_Handler {\r\n-\r\n-\t\u002F**\r\n-\t * Become a teacher form\r\n-\t *\u002F\r\n-\tpublic static function process_become_teacher() {\r\n-\t\t$args = array(\r\n-\t\t\t'bat_name'    => LP_Helper::sanitize_params_submitted( $_POST['bat_name'] ?? '' ),\r\n-\t\t\t'bat_email'   => LP_Helper::sanitize_params_submitted( $_POST['bat_email'] ?? '' ),\r\n-\t\t\t'bat_phone'   => LP_Helper::sanitize_params_submitted( $_POST['bat_phone'] ?? '' ),\r\n-\t\t\t'bat_message' => LP_Helper::sanitize_params_submitted( $_POST['bat_message'] ?? '' ),\r\n-\t\t);\r\n-\r\n-\t\t$result = array(\r\n-\t\t\t'message' => array(),\r\n-\t\t\t'result'  => 'success',\r\n-\t\t);\r\n-\r\n-\t\tif ( ( empty( $args['bat_name'] ) ) && $result['result'] !== 'error' ) {\r\n-\t\t\t$result = array(\r\n-\t\t\t\t'message' => learn_press_get_message( __( 'Please enter a valid account username.', 'learnpress' ), 'error' ),\r\n-\t\t\t\t'result'  => 'error',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ( empty( $args['bat_email'] ) || ! is_email( $args['bat_email'] ) ) && $result['result'] !== 'error' ) {\r\n-\t\t\t$result = array(\r\n-\t\t\t\t'message' => learn_press_get_message( __( 'Please provide a valid email address.', 'learnpress' ), 'error' ),\r\n-\t\t\t\t'result'  => 'error',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ( ! email_exists( $args['bat_email'] ) ) && $result['result'] !== 'error' ) {\r\n-\t\t\t$result = array(\r\n-\t\t\t\t'message' => learn_press_get_message( __( 'Your email does not exist!', 'learnpress' ), 'error' ),\r\n-\t\t\t\t'result'  => 'error',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$result = apply_filters( 'learn-press\u002Fbecome-teacher-request-result', $result );\r\n-\r\n-\t\tif ( $result['result'] === 'success' ) {\r\n-\t\t\t$result['message'][] = learn_press_get_message( __( 'Thank you! Your message has been sent.', 'learnpress' ), 'success' );\r\n-\t\t\t$user                = get_user_by( 'email', $args['bat_email'] );\r\n-\r\n-\t\t\tupdate_user_meta( $user->ID, '_requested_become_teacher', 'yes' );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Send email to admin when user request to become a teacher\r\n-\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_request\r\n-\t\t\t *\u002F\r\n-\t\t\t$data_send = [\r\n-\t\t\t\t'params'       => [ $args ],\r\n-\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_request',\r\n-\t\t\t];\r\n-\t\t\tLPBackgroundAjax::handle( $data_send );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fbecome-a-teacher-sent', $args );\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_maybe_send_json( $result );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process the login form.\r\n-\t *\r\n-\t * @throws Exception On login error.\r\n-\t * @author Thimpress \u003Cnhamdv>\r\n-\t *\u002F\r\n-\tpublic static function process_login() {\r\n-\t\tif ( ! LP_Request::verify_nonce( 'learn-press-login' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $_POST['username'], $_POST['password'] ) ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$username = trim( LP_Helper::sanitize_params_submitted( $_POST['username'] ) );\r\n-\t\t\t\t$password = LP_Helper::sanitize_params_submitted( $_POST['password'] );\r\n-\t\t\t\t$remember = LP_Request::get_string( 'rememberme' );\r\n-\r\n-\t\t\t\tif ( empty( $username ) ) {\r\n-\t\t\t\t\tthrow new Exception( '\u003Cstrong>' . __( 'Error:', 'learnpress' ) . '\u003C\u002Fstrong> ' . __( 'A username is required', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F On multisite, ensure user exists on current site, if not add them before allowing login.\r\n-\t\t\t\tif ( is_multisite() ) {\r\n-\t\t\t\t\t$user_data = get_user_by( is_email( $username ) ? 'email' : 'login', $username );\r\n-\r\n-\t\t\t\t\tif ( $user_data && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {\r\n-\t\t\t\t\t\tadd_user_to_blog( get_current_blog_id(), $user_data->ID, 'customer' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user = wp_signon(\r\n-\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t'learnpress_login_credentials',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'user_login'    => $username,\r\n-\t\t\t\t\t\t\t'user_password' => $password,\r\n-\t\t\t\t\t\t\t'remember'      => $remember,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tis_ssl()\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\t\t\tthrow new Exception( $user->get_error_message() );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( ! empty( $_POST['redirect'] ) ) {\r\n-\t\t\t\t\t\t$url_redirect = LP_Helper::sanitize_params_submitted( $_POST['redirect'] );\r\n-\t\t\t\t\t} elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {\r\n-\t\t\t\t\t\t$url_redirect = LP_Request::get_param( '_wp_http_referer' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$url_redirect = LP_Request::get_redirect( learn_press_get_page_link( 'profile' ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$url_redirect = apply_filters( 'learn-press\u002Flogin-redirect', $url_redirect, $user );\r\n-\r\n-\t\t\t\t\t$message_data = [\r\n-\t\t\t\t\t\t'status'  => 'success',\r\n-\t\t\t\t\t\t'content' => __( 'Login successfully!', 'learnpress' ),\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t\t\t\twp_redirect( wp_validate_redirect( $url_redirect, LP_Helper::getUrlCurrent() ) );\r\n-\t\t\t\t\texit();\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Exception $e ) {\r\n-\t\t\t\t$message_data = [\r\n-\t\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t\t'content' => $e->getMessage(),\r\n-\t\t\t\t];\r\n-\t\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process register form.\r\n-\t *\r\n-\t * @throws Exception On Error register.\r\n-\t * @author ThimPress \u003Cnhamdv>\r\n-\t *\u002F\r\n-\tpublic static function process_register() {\r\n-\t\tif ( ! LP_Request::verify_nonce( 'learn-press-register' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$username         = LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' );\r\n-\t\t$email            = LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' );\r\n-\t\t$password         = LP_Helper::sanitize_params_submitted( $_POST['reg_password'] ?? '' );\r\n-\t\t$confirm_password = LP_Helper::sanitize_params_submitted( $_POST['reg_password2'] ?? '' );\r\n-\t\t$first_name       = LP_Helper::sanitize_params_submitted( $_POST['reg_first_name'] ?? '' );\r\n-\t\t$last_name        = LP_Helper::sanitize_params_submitted( $_POST['reg_last_name'] ?? '' );\r\n-\t\t$display_name     = LP_Helper::sanitize_params_submitted( $_POST['reg_display_name'] ?? '' );\r\n-\t\t$update_meta      = LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register_form'] ?? '' );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$new_customer = self::learnpress_create_new_customer(\r\n-\t\t\t\tsanitize_email( $email ),\r\n-\t\t\t\t$username,\r\n-\t\t\t\t$password,\r\n-\t\t\t\t$confirm_password,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'first_name'   => $first_name,\r\n-\t\t\t\t\t'last_name'    => $last_name,\r\n-\t\t\t\t\t'display_name' => $display_name,\r\n-\t\t\t\t),\r\n-\t\t\t\t$update_meta\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( is_wp_error( $new_customer ) ) {\r\n-\t\t\t\tthrow new Exception( $new_customer->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Send email become a teacher.\r\n-\t\t\t$is_become_a_teacher = false;\r\n-\t\t\tif ( LP_Settings::get_option( 'instructor_registration', 'no' ) == 'yes' && isset( $_POST['become_teacher'] ) ) {\r\n-\t\t\t\tupdate_user_meta( $new_customer, '_requested_become_teacher', 'yes' );\r\n-\t\t\t\tdo_action(\r\n-\t\t\t\t\t'learn-press\u002Fbecome-a-teacher-sent',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'bat_email'   => $email,\r\n-\t\t\t\t\t\t'bat_phone'   => '',\r\n-\t\t\t\t\t\t'bat_message' => apply_filters( 'learnpress_become_instructor_message', esc_html__( 'I need to become an instructor', 'learnpress' ) ),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$is_become_a_teacher = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Auto login user\r\n-\t\t\t * Must set code below after Send email become a teacher\r\n-\t\t\t * because 'none' check by \"check_ajax_referer\" will not valid for send mail background on WP_Async_Request\r\n-\t\t\t *\u002F\r\n-\t\t\twp_set_current_user( $new_customer );\r\n-\t\t\twp_set_auth_cookie( $new_customer, true );\r\n-\r\n-\t\t\t$message_success = $username . __( ' was successfully created!', 'learnpress' );\r\n-\r\n-\t\t\tif ( $is_become_a_teacher ) {\r\n-\t\t\t\t$message_success .= '\u003Cbr\u002F>' . __( 'Your request to become an instructor has been sent. We will get back to you soon!', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$message_data = [\r\n-\t\t\t\t'status'  => 'success',\r\n-\t\t\t\t'content' => $message_success,\r\n-\t\t\t];\r\n-\t\t\tlearn_press_set_message( $message_data );\r\n-\r\n-\t\t\tif ( ! empty( $_POST['redirect'] ) ) {\r\n-\t\t\t\t$url_redirect = wp_sanitize_redirect( wp_unslash( $_POST['redirect'] ) );\r\n-\t\t\t} elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {\r\n-\t\t\t\t$url_redirect = wp_unslash( $_REQUEST['_wp_http_referer'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$url_redirect = LP_Request::get_redirect( learn_press_get_page_link( 'profile' ) );\r\n-\t\t\t}\r\n-\t\t\t$url_redirect = apply_filters( 'learn-press\u002Fregister-redirect', $url_redirect, $new_customer );\r\n-\t\t\twp_redirect( wp_validate_redirect( $url_redirect, LP_Helper::getUrlCurrent() ) );\r\n-\t\t\texit();\r\n-\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$message_data = [\r\n-\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t'content' => $e->getMessage(),\r\n-\t\t\t];\r\n-\t\t\tlearn_press_set_message( $message_data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * New create customer.\r\n-\t *\r\n-\t * @author ThimPress \u003Cnhamdv>\r\n-\t * @version 1.0.1\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic static function learnpress_create_new_customer( $email = '', $username = '', $password = '', $confirm_password = '', $args = array(), $update_meta = array() ) {\r\n-\t\ttry {\r\n-\t\t\t$user_can_register = get_option( 'users_can_register' );\r\n-\t\t\tif ( ! $user_can_register ) {\r\n-\t\t\t\tthrow new Exception( __( 'System WordPress does not allow register.', 'learnpress' ), 110 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $email ) || ! is_email( $email ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Please provide a valid email address.', 'learnpress' ), 101 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( email_exists( $email ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'An account is already registered with your email address.', 'learnpress' ), 102 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$username = sanitize_user( $username );\r\n-\r\n-\t\t\tif ( empty( $username ) || ! validate_username( $username ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Please enter a valid account username.', 'learnpress' ), 103 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( username_exists( $username ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'An account is already registered with that username. Please choose another one.', 'learnpress' ),\r\n-\t\t\t\t\t104\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( apply_filters( 'learnpress_registration_generate_password', false ) ) {\r\n-\t\t\t\t$password = wp_generate_password();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $password ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Please enter an account password.', 'learnpress' ), 105 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( strlen( $password ) \u003C= 5 ) {\r\n-\t\t\t\tthrow new Exception( __( 'Password must contain at least six characters.', 'learnpress' ), 106 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( preg_match( '#\\s+#', $password ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Password can not contain spaces!', 'learnpress' ), 107 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $confirm_password ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Please enter confirm password.', 'learnpress' ), 108 );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $password !== $confirm_password ) {\r\n-\t\t\t\tthrow new Exception( __( 'Password and Confirm Password does not match!', 'learnpress' ), 108 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', [] );\r\n-\t\t\tif ( ! empty( $custom_fields ) ) {\r\n-\t\t\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t\t\tif ( $field['required'] === 'yes' && empty( $update_meta[ $field['id'] ] ) ) {\r\n-\t\t\t\t\t\tthrow new Exception( $field['name'] . __( ' is required field.', 'learnpress' ), 109 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'lp\u002Fbefore_create_new_customer', $email, $username, $password, $confirm_password, $args, $update_meta );\r\n-\r\n-\t\t\t$new_customer_data = apply_filters(\r\n-\t\t\t\t'learnpress_new_customer_data',\r\n-\t\t\t\tarray_merge(\r\n-\t\t\t\t\t$args,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'user_login' => $username,\r\n-\t\t\t\t\t\t'user_pass'  => $password,\r\n-\t\t\t\t\t\t'user_email' => $email,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Add hook registration_errors of WordPress\r\n-\t\t\t$errors = null;\r\n-\t\t\t$errors = apply_filters( 'registration_errors', $errors, $username, $email );\r\n-\t\t\tif ( is_wp_error( $errors ) ) {\r\n-\t\t\t\tthrow new Exception( $errors->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$customer_id = wp_insert_user( $new_customer_data );\r\n-\r\n-\t\t\tdo_action( 'lp\u002Fafter_create_new_customer', $email, $username, $password, $confirm_password, $args, $update_meta );\r\n-\r\n-\t\t\tif ( is_wp_error( $customer_id ) ) {\r\n-\t\t\t\tthrow new Exception( $customer_id->get_error_message() );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! empty( $update_meta ) ) {\r\n-\t\t\t\t\tlp_user_custom_register_fields( $customer_id, $update_meta );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Send mail.\r\n-\t\t\t\twp_new_user_notification( $customer_id, null, 'both' );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$code_str = '';\r\n-\t\t\tswitch ( $e->getCode() ) {\r\n-\t\t\t\tcase 101:\r\n-\t\t\t\t\t$code_str = 'registration-error-invalid-email';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 102:\r\n-\t\t\t\t\t$code_str = 'registration-error-email-exists';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 103:\r\n-\t\t\t\t\t$code_str = 'registration-error-invalid-username';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 104:\r\n-\t\t\t\t\t$code_str = 'registration-error-username-exists';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 105:\r\n-\t\t\t\t\t$code_str = 'registration-error-missing-password';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 106:\r\n-\t\t\t\t\t$code_str = 'registration-error-short-password';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 107:\r\n-\t\t\t\t\t$code_str = 'registration-error-spacing-password';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 108:\r\n-\t\t\t\t\t$code_str = 'registration-error-confirm-password';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 109:\r\n-\t\t\t\t\t$code_str = 'registration-custom-required-field';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 110:\r\n-\t\t\t\t\t$code_str = 'registration-not-allow';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$code_str = $e->getMessage();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn new WP_Error( $code_str, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $customer_id;\r\n-\t}\r\n-\r\n-\tpublic static function update_user_data( $update_data, $update_meta ) {\r\n-\t\t$user_id      = get_current_user_id();\r\n-\t\t$current_user = get_user_by( 'id', $user_id );\r\n-\r\n-\t\tif ( empty( $update_data['user_email'] ) ) {\r\n-\t\t\treturn new WP_Error( 'exist_email', esc_html__( 'Email is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $update_data['display_name'] ) ) {\r\n-\t\t\treturn new WP_Error( 'exist_display_name', esc_html__( 'Display name is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_email( $update_data['display_name'] ) ) {\r\n-\t\t\treturn new WP_Error( 'error_display_name', esc_html__( 'Due to privacy concerns, the display name cannot be changed to an email address.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_email( $update_data['user_email'] ) ) {\r\n-\t\t\treturn new WP_Error( 'error_email', esc_html__( 'Due to privacy concerns, the display name cannot be changed to an email address.', 'learnpress' ) );\r\n-\t\t} elseif ( email_exists( $update_data['user_email'] ) && $update_data['user_email'] !== $current_user->user_email ) {\r\n-\t\t\treturn new WP_Error( 'error_email', esc_html__( 'This email address is already registered.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$custom_fields = LP_Profile::get_register_fields_custom();\r\n-\t\tif ( $custom_fields && ! empty( $update_meta ) ) {\r\n-\t\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t\tif ( $field['required'] !== 'yes' ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$is_empty = empty( $update_meta[ $field['id'] ] );\r\n-\t\t\t\t$is_empty = apply_filters( 'learn-press\u002Fprofile\u002Fupdate-register-custom-field\u002Fis-require', $is_empty, $field );\r\n-\t\t\t\tif ( $is_empty ) {\r\n-\t\t\t\t\treturn new WP_Error( 'registration-custom-exists', $field['name'] . __( ' is required field.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$update_data = apply_filters( 'learn-press\u002Fupdate-profile-basic-information-data', $update_data );\r\n-\r\n-\t\t$return = wp_update_user( $update_data );\r\n-\r\n-\t\tif ( ! empty( $update_meta ) ) {\r\n-\t\t\tlp_user_custom_register_fields( $user_id, $update_meta );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_wp_error( $return ) ) {\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\tpublic static function retrieve_password( $user_login ) {\r\n-\t\t$login = isset( $user_login ) ? sanitize_user( wp_unslash( $user_login ) ) : '';\r\n-\r\n-\t\tif ( empty( $login ) ) {\r\n-\t\t\treturn new WP_Error( 'error_santize_login', esc_html__( 'Enter a username or email address.', 'learnpress' ) );\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Check on username first, as customers can use emails as usernames.\r\n-\t\t\t$user_data = get_user_by( 'login', $login );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F If no user found, check if it login is email and lookup user based on email.\r\n-\t\tif ( ! $user_data && is_email( $login ) && apply_filters( 'learnpress_get_username_from_email', true ) ) {\r\n-\t\t\t$user_data = get_user_by( 'email', $login );\r\n-\t\t}\r\n-\r\n-\t\t$errors = new WP_Error();\r\n-\r\n-\t\tdo_action( 'lostpassword_post', $errors, $user_data );\r\n-\r\n-\t\tif ( $errors->get_error_code() ) {\r\n-\t\t\treturn $errors;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user_data ) {\r\n-\t\t\treturn new WP_Error( 'error_not_user', esc_html__( 'Invalid username or email.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {\r\n-\t\t\treturn new WP_Error( 'error_not_user', esc_html__( 'Invalid username or email.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Redefining user_login ensures we return the right case in the email.\r\n-\t\t$user_login = $user_data->user_login;\r\n-\r\n-\t\tdo_action( 'retrieve_password', $user_login );\r\n-\r\n-\t\t$allow = apply_filters( 'allow_password_reset', true, $user_data->ID );\r\n-\r\n-\t\tif ( ! $allow ) {\r\n-\t\t\treturn new WP_Error( 'error_not_allow', esc_html__( 'Password reset is not allowed for this user.', 'learnpress' ) );\r\n-\t\t} elseif ( is_wp_error( $allow ) ) {\r\n-\t\t\treturn $allow;\r\n-\t\t}\r\n-\r\n-\t\t$key = get_password_reset_key( $user_data );\r\n-\r\n-\t\tif ( class_exists( 'LP_Email_Reset_Password' ) ) {\r\n-\t\t\t$email = new LP_Email_Reset_Password();\r\n-\r\n-\t\t\t$email->handle(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'reset_key'  => $key,\r\n-\t\t\t\t\t'user_login' => $user_login,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic static function init() {\r\n-\t\tself::process_login();\r\n-\t\tself::process_register();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Background\\LPBackgroundAjax;\n+\n+\u002F**\n+ * Class LP_Forms_Handler\n+ *\n+ * Process action for submitting forms\n+ *\n+ * @since 4.0.0\n+ * @author ThimPress \u003Cnhamdv>\n+ *\u002F\n+class LP_Forms_Handler {\n+\n+\t\u002F**\n+\t * Become a teacher form\n+\t *\u002F\n+\tpublic static function process_become_teacher() {\n+\t\t$args = array(\n+\t\t\t'bat_name'    => LP_Helper::sanitize_params_submitted( $_POST['bat_name'] ?? '' ),\n+\t\t\t'bat_email'   => LP_Helper::sanitize_params_submitted( $_POST['bat_email'] ?? '' ),\n+\t\t\t'bat_phone'   => LP_Helper::sanitize_params_submitted( $_POST['bat_phone'] ?? '' ),\n+\t\t\t'bat_message' => LP_Helper::sanitize_params_submitted( $_POST['bat_message'] ?? '' ),\n+\t\t);\n+\n+\t\t$result = array(\n+\t\t\t'message' => array(),\n+\t\t\t'result'  => 'success',\n+\t\t);\n+\n+\t\tif ( ( empty( $args['bat_name'] ) ) && $result['result'] !== 'error' ) {\n+\t\t\t$result = array(\n+\t\t\t\t'message' => learn_press_get_message( __( 'Please enter a valid account username.', 'learnpress' ), 'error' ),\n+\t\t\t\t'result'  => 'error',\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ( empty( $args['bat_email'] ) || ! is_email( $args['bat_email'] ) ) && $result['result'] !== 'error' ) {\n+\t\t\t$result = array(\n+\t\t\t\t'message' => learn_press_get_message( __( 'Please provide a valid email address.', 'learnpress' ), 'error' ),\n+\t\t\t\t'result'  => 'error',\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ( ! email_exists( $args['bat_email'] ) ) && $result['result'] !== 'error' ) {\n+\t\t\t$result = array(\n+\t\t\t\t'message' => learn_press_get_message( __( 'Your email does not exist!', 'learnpress' ), 'error' ),\n+\t\t\t\t'result'  => 'error',\n+\t\t\t);\n+\t\t}\n+\n+\t\t$result = apply_filters( 'learn-press\u002Fbecome-teacher-request-result', $result );\n+\n+\t\tif ( $result['result'] === 'success' ) {\n+\t\t\t$result['message'][] = learn_press_get_message( __( 'Thank you! Your message has been sent.', 'learnpress' ), 'success' );\n+\t\t\t$user                = get_user_by( 'email', $args['bat_email'] );\n+\n+\t\t\tupdate_user_meta( $user->ID, '_requested_become_teacher', 'yes' );\n+\n+\t\t\t\u002F**\n+\t\t\t * Send email to admin when user request to become a teacher\n+\t\t\t * @use SendEmailAjax::send_mail_become_a_teacher_request\n+\t\t\t *\u002F\n+\t\t\t$data_send = [\n+\t\t\t\t'params'       => [ $args ],\n+\t\t\t\t'lp-load-ajax' => 'send_mail_become_a_teacher_request',\n+\t\t\t];\n+\t\t\tLPBackgroundAjax::handle( $data_send );\n+\n+\t\t\tdo_action( 'learn-press\u002Fbecome-a-teacher-sent', $args );\n+\t\t}\n+\n+\t\tlearn_press_maybe_send_json( $result );\n+\t}\n+\n+\t\u002F**\n+\t * Process the login form.\n+\t *\n+\t * @throws Exception On login error.\n+\t * @author Thimpress \u003Cnhamdv>\n+\t *\u002F\n+\tpublic static function process_login() {\n+\t\tif ( ! LP_Request::verify_nonce( 'learn-press-login' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( isset( $_POST['username'], $_POST['password'] ) ) {\n+\t\t\ttry {\n+\t\t\t\t$username = trim( LP_Helper::sanitize_params_submitted( $_POST['username'] ) );\n+\t\t\t\t$password = LP_Helper::sanitize_params_submitted( $_POST['password'] );\n+\t\t\t\t$remember = LP_Request::get_string( 'rememberme' );\n+\n+\t\t\t\tif ( empty( $username ) ) {\n+\t\t\t\t\tthrow new Exception( '\u003Cstrong>' . __( 'Error:', 'learnpress' ) . '\u003C\u002Fstrong> ' . __( 'A username is required', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F On multisite, ensure user exists on current site, if not add them before allowing login.\n+\t\t\t\tif ( is_multisite() ) {\n+\t\t\t\t\t$user_data = get_user_by( is_email( $username ) ? 'email' : 'login', $username );\n+\n+\t\t\t\t\tif ( $user_data && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {\n+\t\t\t\t\t\tadd_user_to_blog( get_current_blog_id(), $user_data->ID, 'customer' );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$user = wp_signon(\n+\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t'learnpress_login_credentials',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'user_login'    => $username,\n+\t\t\t\t\t\t\t'user_password' => $password,\n+\t\t\t\t\t\t\t'remember'      => $remember,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\tis_ssl()\n+\t\t\t\t);\n+\n+\t\t\t\tif ( is_wp_error( $user ) ) {\n+\t\t\t\t\tthrow new Exception( $user->get_error_message() );\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( ! empty( $_POST['redirect'] ) ) {\n+\t\t\t\t\t\t$url_redirect = LP_Helper::sanitize_params_submitted( $_POST['redirect'] );\n+\t\t\t\t\t} elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {\n+\t\t\t\t\t\t$url_redirect = LP_Request::get_param( '_wp_http_referer' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$url_redirect = LP_Request::get_redirect( learn_press_get_page_link( 'profile' ) );\n+\t\t\t\t\t}\n+\t\t\t\t\t$url_redirect = apply_filters( 'learn-press\u002Flogin-redirect', $url_redirect, $user );\n+\n+\t\t\t\t\t$message_data = [\n+\t\t\t\t\t\t'status'  => 'success',\n+\t\t\t\t\t\t'content' => __( 'Login successfully!', 'learnpress' ),\n+\t\t\t\t\t];\n+\t\t\t\t\tlearn_press_set_message( $message_data );\n+\t\t\t\t\twp_redirect( wp_validate_redirect( $url_redirect, LP_Helper::getUrlCurrent() ) );\n+\t\t\t\t\texit();\n+\t\t\t\t}\n+\t\t\t} catch ( Exception $e ) {\n+\t\t\t\t$message_data = [\n+\t\t\t\t\t'status'  => 'error',\n+\t\t\t\t\t'content' => $e->getMessage(),\n+\t\t\t\t];\n+\t\t\t\tlearn_press_set_message( $message_data );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Process register form.\n+\t *\n+\t * @throws Exception On Error register.\n+\t * @author ThimPress \u003Cnhamdv>\n+\t *\u002F\n+\tpublic static function process_register() {\n+\t\tif ( ! LP_Request::verify_nonce( 'learn-press-register' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$username         = LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' );\n+\t\t$email            = LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' );\n+\t\t$password         = LP_Helper::sanitize_params_submitted( $_POST['reg_password'] ?? '' );\n+\t\t$confirm_password = LP_Helper::sanitize_params_submitted( $_POST['reg_password2'] ?? '' );\n+\t\t$first_name       = LP_Helper::sanitize_params_submitted( $_POST['reg_first_name'] ?? '' );\n+\t\t$last_name        = LP_Helper::sanitize_params_submitted( $_POST['reg_last_name'] ?? '' );\n+\t\t$display_name     = LP_Helper::sanitize_params_submitted( $_POST['reg_display_name'] ?? '' );\n+\t\t$update_meta      = LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register_form'] ?? '' );\n+\n+\t\ttry {\n+\t\t\t$new_customer = self::learnpress_create_new_customer(\n+\t\t\t\tsanitize_email( $email ),\n+\t\t\t\t$username,\n+\t\t\t\t$password,\n+\t\t\t\t$confirm_password,\n+\t\t\t\tarray(\n+\t\t\t\t\t'first_name'   => $first_name,\n+\t\t\t\t\t'last_name'    => $last_name,\n+\t\t\t\t\t'display_name' => $display_name,\n+\t\t\t\t),\n+\t\t\t\t$update_meta\n+\t\t\t);\n+\n+\t\t\tif ( is_wp_error( $new_customer ) ) {\n+\t\t\t\tthrow new Exception( $new_customer->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Send email become a teacher.\n+\t\t\t$is_become_a_teacher = false;\n+\t\t\tif ( LP_Settings::get_option( 'instructor_registration', 'no' ) == 'yes' && isset( $_POST['become_teacher'] ) ) {\n+\t\t\t\tupdate_user_meta( $new_customer, '_requested_become_teacher', 'yes' );\n+\t\t\t\tdo_action(\n+\t\t\t\t\t'learn-press\u002Fbecome-a-teacher-sent',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'bat_email'   => $email,\n+\t\t\t\t\t\t'bat_phone'   => '',\n+\t\t\t\t\t\t'bat_message' => apply_filters( 'learnpress_become_instructor_message', esc_html__( 'I need to become an instructor', 'learnpress' ) ),\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$is_become_a_teacher = true;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Auto login user\n+\t\t\t * Must set code below after Send email become a teacher\n+\t\t\t * because 'none' check by \"check_ajax_referer\" will not valid for send mail background on WP_Async_Request\n+\t\t\t *\u002F\n+\t\t\twp_set_current_user( $new_customer );\n+\t\t\twp_set_auth_cookie( $new_customer, true );\n+\n+\t\t\t$message_success = $username . __( ' was successfully created!', 'learnpress' );\n+\n+\t\t\tif ( $is_become_a_teacher ) {\n+\t\t\t\t$message_success .= '\u003Cbr\u002F>' . __( 'Your request to become an instructor has been sent. We will get back to you soon!', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$message_data = [\n+\t\t\t\t'status'  => 'success',\n+\t\t\t\t'content' => $message_success,\n+\t\t\t];\n+\t\t\tlearn_press_set_message( $message_data );\n+\n+\t\t\tif ( ! empty( $_POST['redirect'] ) ) {\n+\t\t\t\t$url_redirect = wp_sanitize_redirect( wp_unslash( $_POST['redirect'] ) );\n+\t\t\t} elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {\n+\t\t\t\t$url_redirect = wp_unslash( $_REQUEST['_wp_http_referer'] );\n+\t\t\t} else {\n+\t\t\t\t$url_redirect = LP_Request::get_redirect( learn_press_get_page_link( 'profile' ) );\n+\t\t\t}\n+\t\t\t$url_redirect = apply_filters( 'learn-press\u002Fregister-redirect', $url_redirect, $new_customer );\n+\t\t\twp_redirect( wp_validate_redirect( $url_redirect, LP_Helper::getUrlCurrent() ) );\n+\t\t\texit();\n+\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$message_data = [\n+\t\t\t\t'status'  => 'error',\n+\t\t\t\t'content' => $e->getMessage(),\n+\t\t\t];\n+\t\t\tlearn_press_set_message( $message_data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * New create customer.\n+\t *\n+\t * @author ThimPress \u003Cnhamdv>\n+\t * @version 1.0.1\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic static function learnpress_create_new_customer( $email = '', $username = '', $password = '', $confirm_password = '', $args = array(), $update_meta = array() ) {\n+\t\ttry {\n+\t\t\t$user_can_register = get_option( 'users_can_register' );\n+\t\t\tif ( ! $user_can_register ) {\n+\t\t\t\tthrow new Exception( __( 'System WordPress does not allow register.', 'learnpress' ), 110 );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $email ) || ! is_email( $email ) ) {\n+\t\t\t\tthrow new Exception( __( 'Please provide a valid email address.', 'learnpress' ), 101 );\n+\t\t\t}\n+\n+\t\t\tif ( email_exists( $email ) ) {\n+\t\t\t\tthrow new Exception( __( 'An account is already registered with your email address.', 'learnpress' ), 102 );\n+\t\t\t}\n+\n+\t\t\t$username = sanitize_user( $username );\n+\n+\t\t\tif ( empty( $username ) || ! validate_username( $username ) ) {\n+\t\t\t\tthrow new Exception( __( 'Please enter a valid account username.', 'learnpress' ), 103 );\n+\t\t\t}\n+\n+\t\t\tif ( username_exists( $username ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'An account is already registered with that username. Please choose another one.', 'learnpress' ),\n+\t\t\t\t\t104\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( apply_filters( 'learnpress_registration_generate_password', false ) ) {\n+\t\t\t\t$password = wp_generate_password();\n+\t\t\t}\n+\n+\t\t\tif ( empty( $password ) ) {\n+\t\t\t\tthrow new Exception( __( 'Please enter an account password.', 'learnpress' ), 105 );\n+\t\t\t}\n+\n+\t\t\tif ( strlen( $password ) \u003C= 5 ) {\n+\t\t\t\tthrow new Exception( __( 'Password must contain at least six characters.', 'learnpress' ), 106 );\n+\t\t\t}\n+\n+\t\t\tif ( preg_match( '#\\s+#', $password ) ) {\n+\t\t\t\tthrow new Exception( __( 'Password can not contain spaces!', 'learnpress' ), 107 );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $confirm_password ) ) {\n+\t\t\t\tthrow new Exception( __( 'Please enter confirm password.', 'learnpress' ), 108 );\n+\t\t\t}\n+\n+\t\t\tif ( $password !== $confirm_password ) {\n+\t\t\t\tthrow new Exception( __( 'Password and Confirm Password does not match!', 'learnpress' ), 108 );\n+\t\t\t}\n+\n+\t\t\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', [] );\n+\t\t\tif ( ! empty( $custom_fields ) ) {\n+\t\t\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t\t\tif ( $field['required'] === 'yes' && empty( $update_meta[ $field['id'] ] ) ) {\n+\t\t\t\t\t\tthrow new Exception( $field['name'] . __( ' is required field.', 'learnpress' ), 109 );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tdo_action( 'lp\u002Fbefore_create_new_customer', $email, $username, $password, $confirm_password, $args, $update_meta );\n+\n+\t\t\t$new_customer_data = apply_filters(\n+\t\t\t\t'learnpress_new_customer_data',\n+\t\t\t\tarray_merge(\n+\t\t\t\t\t$args,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'user_login' => $username,\n+\t\t\t\t\t\t'user_pass'  => $password,\n+\t\t\t\t\t\t'user_email' => $email,\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Add hook registration_errors of WordPress\n+\t\t\t$errors = null;\n+\t\t\t$errors = apply_filters( 'registration_errors', $errors, $username, $email );\n+\t\t\tif ( is_wp_error( $errors ) ) {\n+\t\t\t\tthrow new Exception( $errors->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$customer_id = wp_insert_user( $new_customer_data );\n+\n+\t\t\tdo_action( 'lp\u002Fafter_create_new_customer', $email, $username, $password, $confirm_password, $args, $update_meta );\n+\n+\t\t\tif ( is_wp_error( $customer_id ) ) {\n+\t\t\t\tthrow new Exception( $customer_id->get_error_message() );\n+\t\t\t} else {\n+\t\t\t\tif ( ! empty( $update_meta ) ) {\n+\t\t\t\t\tlp_user_custom_register_fields( $customer_id, $update_meta );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Send mail.\n+\t\t\t\twp_new_user_notification( $customer_id, null, 'both' );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$code_str = '';\n+\t\t\tswitch ( $e->getCode() ) {\n+\t\t\t\tcase 101:\n+\t\t\t\t\t$code_str = 'registration-error-invalid-email';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 102:\n+\t\t\t\t\t$code_str = 'registration-error-email-exists';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 103:\n+\t\t\t\t\t$code_str = 'registration-error-invalid-username';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 104:\n+\t\t\t\t\t$code_str = 'registration-error-username-exists';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 105:\n+\t\t\t\t\t$code_str = 'registration-error-missing-password';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 106:\n+\t\t\t\t\t$code_str = 'registration-error-short-password';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 107:\n+\t\t\t\t\t$code_str = 'registration-error-spacing-password';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 108:\n+\t\t\t\t\t$code_str = 'registration-error-confirm-password';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 109:\n+\t\t\t\t\t$code_str = 'registration-custom-required-field';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 110:\n+\t\t\t\t\t$code_str = 'registration-not-allow';\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$code_str = $e->getMessage();\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\treturn new WP_Error( $code_str, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $customer_id;\n+\t}\n+\n+\tpublic static function update_user_data( $update_data, $update_meta ) {\n+\t\t$user_id      = get_current_user_id();\n+\t\t$current_user = get_user_by( 'id', $user_id );\n+\n+\t\tif ( empty( $update_data['user_email'] ) ) {\n+\t\t\treturn new WP_Error( 'exist_email', esc_html__( 'Email is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( empty( $update_data['display_name'] ) ) {\n+\t\t\treturn new WP_Error( 'exist_display_name', esc_html__( 'Display name is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( is_email( $update_data['display_name'] ) ) {\n+\t\t\treturn new WP_Error( 'error_display_name', esc_html__( 'Due to privacy concerns, the display name cannot be changed to an email address.', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( ! is_email( $update_data['user_email'] ) ) {\n+\t\t\treturn new WP_Error( 'error_email', esc_html__( 'Due to privacy concerns, the display name cannot be changed to an email address.', 'learnpress' ) );\n+\t\t} elseif ( email_exists( $update_data['user_email'] ) && $update_data['user_email'] !== $current_user->user_email ) {\n+\t\t\treturn new WP_Error( 'error_email', esc_html__( 'This email address is already registered.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$custom_fields = LP_Profile::get_register_fields_custom();\n+\t\tif ( $custom_fields && ! empty( $update_meta ) ) {\n+\t\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t\tif ( $field['required'] !== 'yes' ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$is_empty = empty( $update_meta[ $field['id'] ] );\n+\t\t\t\t$is_empty = apply_filters( 'learn-press\u002Fprofile\u002Fupdate-register-custom-field\u002Fis-require', $is_empty, $field );\n+\t\t\t\tif ( $is_empty ) {\n+\t\t\t\t\treturn new WP_Error( 'registration-custom-exists', $field['name'] . __( ' is required field.', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$update_data = apply_filters( 'learn-press\u002Fupdate-profile-basic-information-data', $update_data );\n+\n+\t\t$return = wp_update_user( $update_data );\n+\n+\t\tif ( ! empty( $update_meta ) ) {\n+\t\t\tlp_user_custom_register_fields( $user_id, $update_meta );\n+\t\t}\n+\n+\t\tif ( is_wp_error( $return ) ) {\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\tpublic static function retrieve_password( $user_login ) {\n+\t\t$login = isset( $user_login ) ? sanitize_user( wp_unslash( $user_login ) ) : '';\n+\n+\t\tif ( empty( $login ) ) {\n+\t\t\treturn new WP_Error( 'error_santize_login', esc_html__( 'Enter a username or email address.', 'learnpress' ) );\n+\t\t} else {\n+\t\t\t\u002F\u002F Check on username first, as customers can use emails as usernames.\n+\t\t\t$user_data = get_user_by( 'login', $login );\n+\t\t}\n+\n+\t\t\u002F\u002F If no user found, check if it login is email and lookup user based on email.\n+\t\tif ( ! $user_data && is_email( $login ) && apply_filters( 'learnpress_get_username_from_email', true ) ) {\n+\t\t\t$user_data = get_user_by( 'email', $login );\n+\t\t}\n+\n+\t\t$errors = new WP_Error();\n+\n+\t\tdo_action( 'lostpassword_post', $errors, $user_data );\n+\n+\t\tif ( $errors->get_error_code() ) {\n+\t\t\treturn $errors;\n+\t\t}\n+\n+\t\tif ( ! $user_data ) {\n+\t\t\treturn new WP_Error( 'error_not_user', esc_html__( 'Invalid username or email.', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( is_multisite() && ! is_user_member_of_blog( $user_data->ID, get_current_blog_id() ) ) {\n+\t\t\treturn new WP_Error( 'error_not_user', esc_html__( 'Invalid username or email.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Redefining user_login ensures we return the right case in the email.\n+\t\t$user_login = $user_data->user_login;\n+\n+\t\tdo_action( 'retrieve_password', $user_login );\n+\n+\t\t$allow = apply_filters( 'allow_password_reset', true, $user_data->ID );\n+\n+\t\tif ( ! $allow ) {\n+\t\t\treturn new WP_Error( 'error_not_allow', esc_html__( 'Password reset is not allowed for this user.', 'learnpress' ) );\n+\t\t} elseif ( is_wp_error( $allow ) ) {\n+\t\t\treturn $allow;\n+\t\t}\n+\n+\t\t$key = get_password_reset_key( $user_data );\n+\n+\t\tif ( class_exists( 'LP_Email_Reset_Password' ) ) {\n+\t\t\t$email = new LP_Email_Reset_Password();\n+\n+\t\t\t$email->handle(\n+\t\t\t\tarray(\n+\t\t\t\t\t'reset_key'  => $key,\n+\t\t\t\t\t'user_login' => $user_login,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic static function init() {\n+\t\tself::process_login();\n+\t\tself::process_register();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-global.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-global.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-global.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-global.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,308 +1,308 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Global\r\n- *\u002F\r\n-class LP_Global {\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $users = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $courses = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $lessons = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $quizzes = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $questions = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_user = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_course = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_course_item = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Profile\r\n-\t *\u002F\r\n-\tprotected static $_profile = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic static $custom_posts = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tpublic static $object_support_features = array();\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Quiz|LP_Lesson\r\n-\t *\u002F\r\n-\tpublic static function course_item() {\r\n-\t\tglobal $lp_course_item;\r\n-\r\n-\t\treturn $lp_course_item;\r\n-\t}\r\n-\r\n-\tpublic static function set_course_item( $course_item ) {\r\n-\t\tglobal $lp_course_item;\r\n-\r\n-\t\tif ( self::$_course_item === false ) {\r\n-\t\t\tself::$_course_item = $lp_course_item;\r\n-\t\t}\r\n-\r\n-\t\t$lp_course_item = $course_item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param bool $get_only_id\r\n-\t * Todo: new call not use $get_only_id, only call LP_Global::courses()\r\n-\t * Recommend use learn_press_get_course()\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t * @return LP_Course|bool|int\r\n-\t *\u002F\r\n-\tpublic static function course( $get_only_id = false ) {\r\n-\t\t$lp_course = learn_press_get_course();\r\n-\r\n-\t\t\u002F\u002F Fix for old version use param $get_only_id\r\n-\t\tif ( $get_only_id ) {\r\n-\t\t\tif ( $lp_course ) {\r\n-\t\t\t\treturn $lp_course->get_id();\r\n-\t\t\t} else {\r\n-\t\t\t\treturn 0;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\treturn $lp_course;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic static function set_course( $course ) {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\r\n-\t\tglobal $lp_course;\r\n-\r\n-\t\tif ( self::$_course === false ) {\r\n-\t\t\tself::$_course = $lp_course;\r\n-\t\t}\r\n-\t\t$lp_course = $course;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_User|LP_User_Guest|false\r\n-\t *\u002F\r\n-\tpublic static function user() {\r\n-\t\t\u002F**\r\n-\t\t * @see learn_press_setup_user\r\n-\t\t *\u002F\r\n-\t\tglobal $lp_user;\r\n-\r\n-\t\treturn $lp_user;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Alias of course item for highlighting in dev\r\n-\t *\r\n-\t * @return LP_Quiz|bool\r\n-\t *\u002F\r\n-\tpublic static function course_item_quiz() {\r\n-\t\t$item = self::course_item();\r\n-\r\n-\t\treturn $item instanceof LP_Quiz ? $item : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Question\r\n-\t *\u002F\r\n-\tpublic static function quiz_question() {\r\n-\t\tglobal $lp_quiz_question;\r\n-\r\n-\t\treturn $lp_quiz_question;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Reset global variables to default\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic static function reset() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\r\n-\t\tglobal $lp_user, $lp_course, $lp_course_item, $lp_quiz_question;\r\n-\r\n-\t\tif ( self::$_user ) {\r\n-\t\t\t$lp_user = self::$_user;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::$_course ) {\r\n-\t\t\t$lp_course = self::$_course;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::$_course_item ) {\r\n-\t\t\t$lp_course_item = self::$_course_item;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param bool $global\r\n-\t * @param bool $reset\r\n-\t *\r\n-\t * @return LP_Profile|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function profile( $global = false, $reset = false ) {\r\n-\t\tglobal $profile;\r\n-\r\n-\t\treturn LP_Profile::instance();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.6.2\r\n-\t *\u002F\r\n-\tpublic static function init() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\t\treturn;\r\n-\t\tglobal $profile;\r\n-\t\tself::$_profile = $profile = LP_Profile::instance( get_current_user_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $key\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\tpublic static function get_custom_posts( $key ) {\r\n-\t\tif ( array_key_exists( $key, self::$custom_posts ) ) {\r\n-\t\t\treturn self::$custom_posts[ $key ];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $object_type\r\n-\t * @param string $feature\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function add_object_feature( $object_type, $feature, $type = 'yes' ) {\r\n-\t\t$namespace   = explode( '.', $object_type );\r\n-\t\t$object_type = $namespace[0];\r\n-\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\r\n-\r\n-\t\tif ( ! isset( self::$object_support_features[ $object_type ] ) ) {\r\n-\t\t\tself::$object_support_features[ $object_type ] = array();\r\n-\t\t}\r\n-\r\n-\t\tif ( $namespace ) {\r\n-\t\t\tif ( ! isset( self::$object_support_features[ $object_type ][ $namespace ] ) ) {\r\n-\t\t\t\tself::$object_support_features[ $object_type ][ $namespace ] = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$object_support_features[ $object_type ][ $namespace ][ $feature ] = $type === null ? 'yes' : $type;\r\n-\t\t}\r\n-\r\n-\t\treturn self::$object_support_features[ $object_type ][ $feature ] = $type === null ? 'yes' : $type;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if an object is support a feature.\r\n-\t *\r\n-\t * @param string $object_type\r\n-\t * @param string $feature\r\n-\t * @param mixed $type\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function object_is_support_feature( $object_type, $feature, $type = null ) {\r\n-\t\t$objects     = self::$object_support_features;\r\n-\t\t$namespace   = explode( '.', $object_type );\r\n-\t\t$object_type = $namespace[0];\r\n-\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\r\n-\r\n-\t\tif ( empty( $objects[ $object_type ] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( $namespace && empty( $objects[ $object_type ][ $namespace ] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( $namespace ) {\r\n-\t\t\t$is_support = array_key_exists( $feature, $objects[ $object_type ][ $namespace ] ) ? true : false;\r\n-\r\n-\t\t\tif ( $type && $is_support ) {\r\n-\t\t\t\treturn $objects[ $object_type ][ $namespace ][ $feature ] === $type;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $is_support;\r\n-\t\t}\r\n-\r\n-\t\t$is_support = array_key_exists( $feature, $objects[ $object_type ] ) ? true : false;\r\n-\r\n-\t\tif ( $type && $is_support ) {\r\n-\t\t\treturn $objects[ $object_type ][ $feature ] === $type;\r\n-\t\t}\r\n-\r\n-\t\treturn $is_support;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all features that an object support.\r\n-\t *\r\n-\t * @param string $object_type\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function get_object_supports( $object_type ) {\r\n-\t\t$namespace   = explode( '.', $object_type );\r\n-\t\t$object_type = $namespace[0];\r\n-\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\r\n-\r\n-\t\tif ( empty( self::$object_support_features[ $object_type ] ) ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\tif ( $namespace ) {\r\n-\t\t\tif ( empty( self::$object_support_features[ $object_type ][ $namespace ] ) ) {\r\n-\t\t\t\treturn array();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn self::$object_support_features[ $object_type ];\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Global\n+ *\u002F\n+class LP_Global {\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $users = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $courses = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $lessons = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $quizzes = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $questions = array();\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_user = false;\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_course = false;\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_course_item = false;\n+\n+\t\u002F**\n+\t * @var LP_Profile\n+\t *\u002F\n+\tprotected static $_profile = false;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic static $custom_posts = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\n+\t * @since 3.3.0\n+\t *\u002F\n+\tpublic static $object_support_features = array();\n+\n+\t\u002F**\n+\t * @return LP_Quiz|LP_Lesson\n+\t *\u002F\n+\tpublic static function course_item() {\n+\t\tglobal $lp_course_item;\n+\n+\t\treturn $lp_course_item;\n+\t}\n+\n+\tpublic static function set_course_item( $course_item ) {\n+\t\tglobal $lp_course_item;\n+\n+\t\tif ( self::$_course_item === false ) {\n+\t\t\tself::$_course_item = $lp_course_item;\n+\t\t}\n+\n+\t\t$lp_course_item = $course_item;\n+\t}\n+\n+\t\u002F**\n+\t * @param bool $get_only_id\n+\t * Todo: new call not use $get_only_id, only call LP_Global::courses()\n+\t * Recommend use learn_press_get_course()\n+\t *\n+\t * @editor tungnx\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t * @return LP_Course|bool|int\n+\t *\u002F\n+\tpublic static function course( $get_only_id = false ) {\n+\t\t$lp_course = learn_press_get_course();\n+\n+\t\t\u002F\u002F Fix for old version use param $get_only_id\n+\t\tif ( $get_only_id ) {\n+\t\t\tif ( $lp_course ) {\n+\t\t\t\treturn $lp_course->get_id();\n+\t\t\t} else {\n+\t\t\t\treturn 0;\n+\t\t\t}\n+\t\t} else {\n+\t\t\treturn $lp_course;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic static function set_course( $course ) {\n+\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\n+\t\tglobal $lp_course;\n+\n+\t\tif ( self::$_course === false ) {\n+\t\t\tself::$_course = $lp_course;\n+\t\t}\n+\t\t$lp_course = $course;\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_User|LP_User_Guest|false\n+\t *\u002F\n+\tpublic static function user() {\n+\t\t\u002F**\n+\t\t * @see learn_press_setup_user\n+\t\t *\u002F\n+\t\tglobal $lp_user;\n+\n+\t\treturn $lp_user;\n+\t}\n+\n+\t\u002F**\n+\t * Alias of course item for highlighting in dev\n+\t *\n+\t * @return LP_Quiz|bool\n+\t *\u002F\n+\tpublic static function course_item_quiz() {\n+\t\t$item = self::course_item();\n+\n+\t\treturn $item instanceof LP_Quiz ? $item : false;\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Question\n+\t *\u002F\n+\tpublic static function quiz_question() {\n+\t\tglobal $lp_quiz_question;\n+\n+\t\treturn $lp_quiz_question;\n+\t}\n+\n+\t\u002F**\n+\t * Reset global variables to default\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic static function reset() {\n+\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\n+\t\tglobal $lp_user, $lp_course, $lp_course_item, $lp_quiz_question;\n+\n+\t\tif ( self::$_user ) {\n+\t\t\t$lp_user = self::$_user;\n+\t\t}\n+\n+\t\tif ( self::$_course ) {\n+\t\t\t$lp_course = self::$_course;\n+\t\t}\n+\n+\t\tif ( self::$_course_item ) {\n+\t\t\t$lp_course_item = self::$_course_item;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param bool $global\n+\t * @param bool $reset\n+\t *\n+\t * @return LP_Profile|WP_Error\n+\t *\u002F\n+\tpublic static function profile( $global = false, $reset = false ) {\n+\t\tglobal $profile;\n+\n+\t\treturn LP_Profile::instance();\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.6.2\n+\t *\u002F\n+\tpublic static function init() {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\t\treturn;\n+\t\tglobal $profile;\n+\t\tself::$_profile = $profile = LP_Profile::instance( get_current_user_id() );\n+\t}\n+\n+\t\u002F**\n+\t * @param $key\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\tpublic static function get_custom_posts( $key ) {\n+\t\tif ( array_key_exists( $key, self::$custom_posts ) ) {\n+\t\t\treturn self::$custom_posts[ $key ];\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @param string $object_type\n+\t * @param string $feature\n+\t * @param string $type\n+\t *\n+\t * @return mixed\n+\t * @since 3.3.0\n+\t *\n+\t *\u002F\n+\tpublic static function add_object_feature( $object_type, $feature, $type = 'yes' ) {\n+\t\t$namespace   = explode( '.', $object_type );\n+\t\t$object_type = $namespace[0];\n+\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\n+\n+\t\tif ( ! isset( self::$object_support_features[ $object_type ] ) ) {\n+\t\t\tself::$object_support_features[ $object_type ] = array();\n+\t\t}\n+\n+\t\tif ( $namespace ) {\n+\t\t\tif ( ! isset( self::$object_support_features[ $object_type ][ $namespace ] ) ) {\n+\t\t\t\tself::$object_support_features[ $object_type ][ $namespace ] = array();\n+\t\t\t}\n+\n+\t\t\treturn self::$object_support_features[ $object_type ][ $namespace ][ $feature ] = $type === null ? 'yes' : $type;\n+\t\t}\n+\n+\t\treturn self::$object_support_features[ $object_type ][ $feature ] = $type === null ? 'yes' : $type;\n+\t}\n+\n+\t\u002F**\n+\t * Checks if an object is support a feature.\n+\t *\n+\t * @param string $object_type\n+\t * @param string $feature\n+\t * @param mixed $type\n+\t *\n+\t * @return bool\n+\t * @since 3.3.0\n+\t *\n+\t *\u002F\n+\tpublic static function object_is_support_feature( $object_type, $feature, $type = null ) {\n+\t\t$objects     = self::$object_support_features;\n+\t\t$namespace   = explode( '.', $object_type );\n+\t\t$object_type = $namespace[0];\n+\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\n+\n+\t\tif ( empty( $objects[ $object_type ] ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( $namespace && empty( $objects[ $object_type ][ $namespace ] ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( $namespace ) {\n+\t\t\t$is_support = array_key_exists( $feature, $objects[ $object_type ][ $namespace ] ) ? true : false;\n+\n+\t\t\tif ( $type && $is_support ) {\n+\t\t\t\treturn $objects[ $object_type ][ $namespace ][ $feature ] === $type;\n+\t\t\t}\n+\n+\t\t\treturn $is_support;\n+\t\t}\n+\n+\t\t$is_support = array_key_exists( $feature, $objects[ $object_type ] ) ? true : false;\n+\n+\t\tif ( $type && $is_support ) {\n+\t\t\treturn $objects[ $object_type ][ $feature ] === $type;\n+\t\t}\n+\n+\t\treturn $is_support;\n+\t}\n+\n+\t\u002F**\n+\t * Get all features that an object support.\n+\t *\n+\t * @param string $object_type\n+\t *\n+\t * @return array|mixed\n+\t * @since 3.3.0\n+\t *\n+\t *\u002F\n+\tpublic static function get_object_supports( $object_type ) {\n+\t\t$namespace   = explode( '.', $object_type );\n+\t\t$object_type = $namespace[0];\n+\t\t$namespace   = isset( $namespace[1] ) ? $namespace[1] : false;\n+\n+\t\tif ( empty( self::$object_support_features[ $object_type ] ) ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\tif ( $namespace ) {\n+\t\t\tif ( empty( self::$object_support_features[ $object_type ][ $namespace ] ) ) {\n+\t\t\t\treturn array();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn self::$object_support_features[ $object_type ];\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-helper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-helper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-helper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-helper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,624 +1,624 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Helper\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Helper {\r\n-\r\n-\t\u002F**\r\n-\t * Wrap function unserialize to fix issues with UTF-8 chars when encoding\u002Fdecoding\r\n-\t * of serialize function.\r\n-\t *\r\n-\t * @param string $string\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function maybe_unserialize( $string ) {\r\n-\t\tif ( is_string( $string ) ) {\r\n-\r\n-\t\t\t$unserialized = maybe_unserialize( $string );\r\n-\t\t\tif ( ! $unserialized && strlen( $string ) ) {\r\n-\t\t\t\t$string = preg_replace_callback(\r\n-\t\t\t\t\t'!s:(\\d+):\"(.*?)\";!s',\r\n-\t\t\t\t\tarray( __CLASS__, '_unserialize_replace_callback' ),\r\n-\t\t\t\t\t$string\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$unserialized = maybe_unserialize( $string );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$string = $unserialized;\r\n-\t\t}\r\n-\r\n-\t\treturn $string;\r\n-\t}\r\n-\r\n-\tpublic static function _unserialize_replace_callback( $m ) {\r\n-\t\t$len    = strlen( $m[2] );\r\n-\t\t$result = \"s:$len:\\\"{$m[2]}\\\";\";\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Shuffle array and keep the keys\r\n-\t *\r\n-\t * @param array $array\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function shuffle_assoc( &$array ) {\r\n-\t\t$keys = array_keys( $array );\r\n-\t\tshuffle( $keys );\r\n-\t\t$new = array();\r\n-\t\tforeach ( $keys as $key ) {\r\n-\t\t\t$new[ $key ] = $array[ $key ];\r\n-\t\t}\r\n-\t\t$array = $new;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * MD5 an array.\r\n-\t *\r\n-\t * @param array $array\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function array_to_md5( $array ) {\r\n-\t\tsettype( $array, 'array' );\r\n-\t\tksort( $array );\r\n-\r\n-\t\treturn md5( serialize( $array ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load posts from database into cache by ids\r\n-\t *\r\n-\t * @param array|int $ids\r\n-\t *\r\n-\t * @Todo: tungnx - need to review code - addon h5p v4.0.3 still use\r\n-\t * @deprecated 4.1.6.9\r\n-\t *\u002F\r\n-\tpublic static function cache_posts( $ids ) {\r\n-\t\t\u002F\u002F_deprecated_function( __FUNCTION__, '4.1.6.9' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Merge two or more classes into one.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function merge_class() {\r\n-\t\tif ( func_num_args() == 1 ) {\r\n-\t\t\treturn func_get_arg( 0 );\r\n-\t\t} elseif ( func_num_args() == 0 ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$classes = array();\r\n-\t\tforeach ( func_get_args() as $class ) {\r\n-\t\t\tif ( is_string( $class ) ) {\r\n-\t\t\t\t$cls     = explode( ' ', $class );\r\n-\t\t\t\t$classes = array_merge( $classes, $cls );\r\n-\t\t\t} else {\r\n-\t\t\t\t$classes = array_merge( $classes, $class );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$classes = array_filter( $classes );\r\n-\t\t$classes = array_unique( $classes );\r\n-\r\n-\t\treturn $classes;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize order statuses.\r\n-\t * Add prefix lp- into each status if it is not exists.\r\n-\t *\r\n-\t * @param $statuses\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic static function sanitize_order_status( &$statuses ) {\r\n-\t\tif ( is_array( $statuses ) ) {\r\n-\t\t\tforeach ( $statuses as $k => $status ) {\r\n-\t\t\t\tif ( false === strpos( $status, 'lp-' ) ) {\r\n-\t\t\t\t\t$statuses[ $k ] = \"lp-{$status}\";\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$statuses = preg_split( '#\\s+#', $statuses );\r\n-\t\t\tself::sanitize_order_status( $statuses );\r\n-\t\t\tif ( sizeof( $statuses ) == 1 ) {\r\n-\t\t\t\t$statuses = reset( $statuses );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $statuses;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Merge two arrays recursive.\r\n-\t *\r\n-\t * @param array $array1\r\n-\t * @param array $array2\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function array_merge_recursive( &$array1, &$array2 ) {\r\n-\t\t$merged = $array1;\r\n-\r\n-\t\tif ( is_array( $array1 ) && is_array( $array2 ) ) {\r\n-\t\t\tforeach ( $array2 as $key => & $value ) {\r\n-\t\t\t\tif ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) {\r\n-\t\t\t\t\t$merged[ $key ] = self::array_merge_recursive( $merged[ $key ], $value );\r\n-\t\t\t\t} elseif ( is_numeric( $key ) ) {\r\n-\t\t\t\t\tif ( ! in_array( $value, $merged ) ) {\r\n-\t\t\t\t\t\t$merged[] = $value;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$merged[ $key ] = $value;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} elseif ( is_array( $array2 ) ) {\r\n-\t\t\t$merged = $array2;\r\n-\t\t}\r\n-\r\n-\t\treturn $merged;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Encode the object to json format.\r\n-\t * Replace number, \"false\", \"true\" in couple of quotes with\r\n-\t * original value.\r\n-\t * Example:\r\n-\t *      Input: {\r\n-\t *          number: \"1234\",\r\n-\t *          true_value: \"true\",\r\n-\t *          false_value: \"false\"\r\n-\t *      }\r\n-\t *      Output: {\r\n-\t *          number: 1234,\r\n-\t *          true_value: true,\r\n-\t *          false_value: false\r\n-\t *      }\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return false|mixed|string\r\n-\t *\u002F\r\n-\tpublic static function json_encode( $data ) {\r\n-\t\t$data = wp_json_encode( $data );\r\n-\t\t$data = preg_replace_callback(\r\n-\t\t\t'~:\"(([0-9]+)([.,]?)([0-9]?)|true|false)\"~',\r\n-\t\t\tarray(\r\n-\t\t\t\t__CLASS__,\r\n-\t\t\t\t'_valid_json_value',\r\n-\t\t\t),\r\n-\t\t\t$data\r\n-\t\t);\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Callback function for json_encode method \"json_encode\".\r\n-\t *\r\n-\t * @param array $m\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function _valid_json_value( $m ) {\r\n-\t\treturn str_replace( array( ':\"', '\"' ), array( ':', '' ), $m[0] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create LP static page.\r\n-\t *\r\n-\t * @param array $args\r\n-\t * @param string $key_option\r\n-\t *\r\n-\t * @return bool|int|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function create_page( array $args, string $key_option ) {\r\n-\t\t$page_id = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! isset( $args['post_title'] ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Missing post title', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( preg_match( '#^learn_press_single_instructor_page_id.*#', $key_option ) ) {\r\n-\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_single_instructor]\u003C!-- \u002Fwp:shortcode -->';\r\n-\t\t\t} elseif ( preg_match( '#^learn_press_instructors_page_id.*#', $key_option ) ) {\r\n-\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_instructors]\u003C!-- \u002Fwp:shortcode -->';\r\n-\t\t\t} elseif ( preg_match( '#^learn_press_profile_page_id.*#', $key_option ) ) {\r\n-\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_profile]\u003C!-- \u002Fwp:shortcode -->';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$args = array_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'post_title'     => '',\r\n-\t\t\t\t\t'post_name'      => '',\r\n-\t\t\t\t\t'post_status'    => 'publish',\r\n-\t\t\t\t\t'post_type'      => 'page',\r\n-\t\t\t\t\t'comment_status' => 'closed',\r\n-\t\t\t\t\t'post_content'   => '',\r\n-\t\t\t\t\t'post_author'    => get_current_user_id(),\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t);\r\n-\r\n-\t\t\t$page_id = wp_insert_post( $args );\r\n-\t\t\tif ( ! $page_id ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_option( $key_option, $page_id );\r\n-\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t\t$lp_settings_cache->clean_lp_settings();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $page_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the current url\r\n-\t *\r\n-\t * @return string\r\n-\t * @since  3.2.6.8\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic static function getUrlCurrent(): string {\r\n-\t\t$schema      = is_ssl() ? 'https:\u002F\u002F' : 'http:\u002F\u002F';\r\n-\t\t$http_host   = LP_Helper::sanitize_params_submitted( urldecode( $_SERVER['HTTP_HOST'] ?? '' ) );\r\n-\t\t$request_uri = LP_Helper::sanitize_params_submitted( urldecode( $_SERVER['REQUEST_URI'] ?? '' ) );\r\n-\t\t\u002F\u002F$http_host   = LP_Helper::sanitize_params_submitted( filter_input( INPUT_SERVER, 'HTTP_HOST' ) ?? '' );\r\n-\t\t\u002F\u002F$request_uri = LP_Helper::sanitize_params_submitted( filter_input( INPUT_SERVER, 'REQUEST_URI' ) ?? '' );\r\n-\r\n-\t\treturn untrailingslashit( $schema . $http_host . $request_uri );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check request is rest api\r\n-\t *\r\n-\t * @return bool\r\n-\t * @author tungnx\r\n-\t * @since 4.1.6.6\r\n-\t *\u002F\r\n-\tpublic static function isRestApiLP(): bool {\r\n-\t\t$restPrefix = '\u002F' . rest_get_url_prefix();\r\n-\t\treturn strpos( self::getUrlCurrent(), $restPrefix . '\u002Flp\u002F' ) || strpos( self::getUrlCurrent(), $restPrefix . '\u002Flearnpress\u002F' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize string and array\r\n-\t *\r\n-\t * @param array|string $value\r\n-\t * @param string $type_content\r\n-\t * @param bool $unslash Set it is false when you don’t want to remove slashes (unslash) from $value\r\n-\t * for example, in cases involving LaTeX math syntax.\r\n-\t * @return array|string\r\n-\t * @since  3.2.7.1\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic static function sanitize_params_submitted( $value, string $type_content = 'text', $unslash = true ) {\r\n-\t\t$value = $unslash ? wp_unslash( $value ) : $value;\r\n-\r\n-\t\tif ( is_string( $value ) ) {\r\n-\t\t\tswitch ( $type_content ) {\r\n-\t\t\t\tcase 'html':\r\n-\t\t\t\t\t$value = Template::sanitize_html_content( $value );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t$value = sanitize_textarea_field( $value );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'key':\r\n-\t\t\t\t\t$value = sanitize_key( $value );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'int':\r\n-\t\t\t\t\t$value = (int) $value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'float':\r\n-\t\t\t\t\t$value = (float) $value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tif ( is_callable( $type_content ) ) {\r\n-\t\t\t\t\t\t$value = call_user_func( $type_content, $value );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$value = sanitize_text_field( $value );\r\n-\t\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} elseif ( is_array( $value ) ) {\r\n-\t\t\tforeach ( $value as $k => $v ) {\r\n-\t\t\t\tunset( $value[ $k ] );\r\n-\t\t\t\t$value[ sanitize_text_field( $k ) ] = self::sanitize_params_submitted( $v, $type_content, $unslash );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\tpublic static function db_format_array( array $arr, string $format = '%d' ): string {\r\n-\t\t$arr_formatted = array_fill( 0, sizeof( $arr ), $format );\r\n-\r\n-\t\treturn join( ',', $arr_formatted );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate percent of progress rows on db\r\n-\t *\r\n-\t * @param int $offset .\r\n-\t * @param int $limit .\r\n-\t * @param int $total_row .\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic static function progress_percent( int $offset, int $limit, int $total_row ): float {\r\n-\t\tif ( $total_row \u003C= 0 ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$percent = ( $offset + $limit ) * 100 \u002F $total_row;\r\n-\r\n-\t\t$percent = min( $percent, 100 );\r\n-\r\n-\t\treturn floatval( number_format( $percent, 2 ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert array to string\r\n-\t * Ex: array(\"publish\", \"pending\") to post_status IN(%s, %s)\r\n-\t *\r\n-\t * @param array $arr\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function format_query_IN( array $arr ): string {\r\n-\t\t$format = array_fill( 0, count( $arr ), '%s' );\r\n-\r\n-\t\treturn join( ',', $format );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get link lp checkout page\r\n-\t * without cache - because some cache(redis) will cache page with user anonymous\r\n-\t *\u002F\r\n-\tpublic static function get_link_no_cache( string $link ): string {\r\n-\t\treturn esc_url_raw( add_query_arg( 'no-cache', uniqid(), $link ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check string is json\r\n-\t *\r\n-\t * @param string $str\r\n-\t * @param null $associative\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function json_decode( string $str, $associative = null ) {\r\n-\t\t$obj = json_decode( $str, $associative );\r\n-\t\tif ( json_last_error() !== JSON_ERROR_NONE ) {\r\n-\t\t\tthrow new Exception( 'JSON decode: ' . json_last_error_msg() );\r\n-\t\t}\r\n-\r\n-\t\treturn $obj;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle permalink structure for LP\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.2\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic static function handle_lp_permalink_structure( $post_link, $post ) {\r\n-\t\tif ( false === strpos( $post_link, '%' ) ) {\r\n-\t\t\treturn $post_link;\r\n-\t\t}\r\n-\r\n-\t\t$find    = [];\r\n-\t\t$replace = [];\r\n-\t\tif ( ! empty( $post->post_date_gmt ) ) {\r\n-\t\t\t$find = array(\r\n-\t\t\t\t'%year%',\r\n-\t\t\t\t'%monthnum%',\r\n-\t\t\t\t'%day%',\r\n-\t\t\t\t'%hour%',\r\n-\t\t\t\t'%minute%',\r\n-\t\t\t\t'%second%',\r\n-\t\t\t\t'%post_id%',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$time = strtotime( $post->post_date_gmt );\r\n-\r\n-\t\t\t$replace = array(\r\n-\t\t\t\tdate_i18n( 'Y', $time ),\r\n-\t\t\t\tdate_i18n( 'm', $time ),\r\n-\t\t\t\tdate_i18n( 'd', $time ),\r\n-\t\t\t\tdate_i18n( 'H', $time ),\r\n-\t\t\t\tdate_i18n( 'i', $time ),\r\n-\t\t\t\tdate_i18n( 's', $time ),\r\n-\t\t\t\t$post->ID,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( strpos( $post_link, '%course_category%' ) && get_post_type( $post ) === LP_COURSE_CPT ) {\r\n-\t\t\t\u002F\u002F Get the custom taxonomy terms in use by this post\r\n-\t\t\t$terms = get_the_terms( $post->ID, 'course_category' );\r\n-\r\n-\t\t\tif ( ! empty( $terms ) ) {\r\n-\t\t\t\t$terms = wp_list_sort( $terms, 'term_id' );\r\n-\t\t\t\t\u002F\u002F order by IDF\r\n-\t\t\t\t$category_object = apply_filters(\r\n-\t\t\t\t\t'learn_press_course_post_type_link_course_category',\r\n-\t\t\t\t\t$terms[0],\r\n-\t\t\t\t\t$terms,\r\n-\t\t\t\t\t$post\r\n-\t\t\t\t);\r\n-\t\t\t\t$category_object = get_term( $category_object, 'course_category' );\r\n-\t\t\t\tif ( ! $category_object instanceof WP_Term ) {\r\n-\t\t\t\t\treturn $post_link;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course_category = $category_object->slug;\r\n-\t\t\t\t$parent          = $category_object->parent;\r\n-\t\t\t\tif ( $parent ) {\r\n-\t\t\t\t\t$ancestors = get_ancestors( $category_object->term_id, 'course_category' );\r\n-\t\t\t\t\tforeach ( $ancestors as $ancestor ) {\r\n-\t\t\t\t\t\t$ancestor_object = get_term( $ancestor, 'course_category' );\r\n-\t\t\t\t\t\tif ( $ancestor_object instanceof WP_Term ) {\r\n-\t\t\t\t\t\t\t$course_category = $ancestor_object->slug . '\u002F' . $course_category;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F If no terms are assigned to this post, use a string instead (can't leave the placeholder there)\r\n-\t\t\t\t$course_category = _x( 'uncategorized', 'slug', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$find[]    = '%course_category%';\r\n-\t\t\t$replace[] = urldecode( $course_category );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fpermalink',\r\n-\t\t\tstr_replace( $find, $replace, $post_link ),\r\n-\t\t\t$post\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Print variable script inline script tag.\r\n-\t * If $name_variable_script is empty,\r\n-\t * the script will be print as json with set $tag_args['type'] = application\u002Fjson.\r\n-\t *\r\n-\t * @param string $name_variable_script\r\n-\t * @param array $data\r\n-\t * @param array $tag_args as ['type' => 'text\u002Fjavascript', 'id' => '']\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.5.5\r\n-\t *\u002F\r\n-\tpublic static function print_inline_script_tag( string $name_variable_script, array $data, array $tag_args = [] ) {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( ! is_scalar( $value ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );\r\n-\t\t}\r\n-\r\n-\t\t$data_json = wp_json_encode( $data );\r\n-\t\t$script    = '';\r\n-\t\tif ( ! empty( $name_variable_script ) ) {\r\n-\t\t\t$script = \"var {$name_variable_script} = {$data_json};\";\r\n-\t\t} elseif ( isset( $tag_args['type'] ) && $tag_args['type'] === 'application\u002Fjson' ) {\r\n-\t\t\t$script = $data_json;\r\n-\t\t}\r\n-\t\twp_print_inline_script_tag( $script, $tag_args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get translation string single\u002Fplural\r\n-\t *\r\n-\t * @param float $number\r\n-\t * @param string $string_value\r\n-\t * @param bool $include_number\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_i18n_string_plural( float $number, string $string_value = '', bool $include_number = true ): string {\r\n-\t\tswitch ( $string_value ) {\r\n-\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'Course', 'Courses', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'Lesson', 'Lessons', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'Quiz', 'Quizzes', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'Question', 'Questions', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'lp_assignment':\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'Assignment', 'Assignments', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'lp_h5p':\r\n-\t\t\t\t$plural = sprintf(\r\n-\t\t\t\t\t_n( 'H5P', 'H5Ps', $number, 'learnpress' ),\r\n-\t\t\t\t\t$number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$plural = $string_value;\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\tif ( $include_number ) {\r\n-\t\t\t$plural = sprintf( '%s %s', $number, $plural );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fi18n\u002Fplural', $plural, $number, $string_value, $include_number );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get client ip address\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t * @since 4.2.7.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_client_ip(): string {\r\n-\t\t$ipaddress = 'ip-unknown';\r\n-\t\tif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['HTTP_CLIENT_IP'];\r\n-\t\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];\r\n-\t\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['HTTP_X_FORWARDED'];\r\n-\t\t} elseif ( isset( $_SERVER['HTTP_FORWARDED_FOR'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];\r\n-\t\t} elseif ( isset( $_SERVER['HTTP_FORWARDED'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['HTTP_FORWARDED'];\r\n-\t\t} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {\r\n-\t\t\t$ipaddress = $_SERVER['REMOTE_ADDR'];\r\n-\t\t}\r\n-\r\n-\t\t$ipaddress = (string) $ipaddress;\r\n-\t\t$ipaddress = 'gip-' . $ipaddress;\r\n-\r\n-\t\treturn $ipaddress;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Helper\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Helper {\n+\n+\t\u002F**\n+\t * Wrap function unserialize to fix issues with UTF-8 chars when encoding\u002Fdecoding\n+\t * of serialize function.\n+\t *\n+\t * @param string $string\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function maybe_unserialize( $string ) {\n+\t\tif ( is_string( $string ) ) {\n+\n+\t\t\t$unserialized = maybe_unserialize( $string );\n+\t\t\tif ( ! $unserialized && strlen( $string ) ) {\n+\t\t\t\t$string = preg_replace_callback(\n+\t\t\t\t\t'!s:(\\d+):\"(.*?)\";!s',\n+\t\t\t\t\tarray( __CLASS__, '_unserialize_replace_callback' ),\n+\t\t\t\t\t$string\n+\t\t\t\t);\n+\n+\t\t\t\t$unserialized = maybe_unserialize( $string );\n+\t\t\t}\n+\n+\t\t\t$string = $unserialized;\n+\t\t}\n+\n+\t\treturn $string;\n+\t}\n+\n+\tpublic static function _unserialize_replace_callback( $m ) {\n+\t\t$len    = strlen( $m[2] );\n+\t\t$result = \"s:$len:\\\"{$m[2]}\\\";\";\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Shuffle array and keep the keys\n+\t *\n+\t * @param array $array\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function shuffle_assoc( &$array ) {\n+\t\t$keys = array_keys( $array );\n+\t\tshuffle( $keys );\n+\t\t$new = array();\n+\t\tforeach ( $keys as $key ) {\n+\t\t\t$new[ $key ] = $array[ $key ];\n+\t\t}\n+\t\t$array = $new;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * MD5 an array.\n+\t *\n+\t * @param array $array\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function array_to_md5( $array ) {\n+\t\tsettype( $array, 'array' );\n+\t\tksort( $array );\n+\n+\t\treturn md5( serialize( $array ) );\n+\t}\n+\n+\t\u002F**\n+\t * Load posts from database into cache by ids\n+\t *\n+\t * @param array|int $ids\n+\t *\n+\t * @Todo: tungnx - need to review code - addon h5p v4.0.3 still use\n+\t * @deprecated 4.1.6.9\n+\t *\u002F\n+\tpublic static function cache_posts( $ids ) {\n+\t\t\u002F\u002F_deprecated_function( __FUNCTION__, '4.1.6.9' );\n+\t}\n+\n+\t\u002F**\n+\t * Merge two or more classes into one.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function merge_class() {\n+\t\tif ( func_num_args() == 1 ) {\n+\t\t\treturn func_get_arg( 0 );\n+\t\t} elseif ( func_num_args() == 0 ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$classes = array();\n+\t\tforeach ( func_get_args() as $class ) {\n+\t\t\tif ( is_string( $class ) ) {\n+\t\t\t\t$cls     = explode( ' ', $class );\n+\t\t\t\t$classes = array_merge( $classes, $cls );\n+\t\t\t} else {\n+\t\t\t\t$classes = array_merge( $classes, $class );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$classes = array_filter( $classes );\n+\t\t$classes = array_unique( $classes );\n+\n+\t\treturn $classes;\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize order statuses.\n+\t * Add prefix lp- into each status if it is not exists.\n+\t *\n+\t * @param $statuses\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic static function sanitize_order_status( &$statuses ) {\n+\t\tif ( is_array( $statuses ) ) {\n+\t\t\tforeach ( $statuses as $k => $status ) {\n+\t\t\t\tif ( false === strpos( $status, 'lp-' ) ) {\n+\t\t\t\t\t$statuses[ $k ] = \"lp-{$status}\";\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$statuses = preg_split( '#\\s+#', $statuses );\n+\t\t\tself::sanitize_order_status( $statuses );\n+\t\t\tif ( sizeof( $statuses ) == 1 ) {\n+\t\t\t\t$statuses = reset( $statuses );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $statuses;\n+\t}\n+\n+\t\u002F**\n+\t * Merge two arrays recursive.\n+\t *\n+\t * @param array $array1\n+\t * @param array $array2\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function array_merge_recursive( &$array1, &$array2 ) {\n+\t\t$merged = $array1;\n+\n+\t\tif ( is_array( $array1 ) && is_array( $array2 ) ) {\n+\t\t\tforeach ( $array2 as $key => & $value ) {\n+\t\t\t\tif ( is_array( $value ) && isset( $merged[ $key ] ) && is_array( $merged[ $key ] ) ) {\n+\t\t\t\t\t$merged[ $key ] = self::array_merge_recursive( $merged[ $key ], $value );\n+\t\t\t\t} elseif ( is_numeric( $key ) ) {\n+\t\t\t\t\tif ( ! in_array( $value, $merged ) ) {\n+\t\t\t\t\t\t$merged[] = $value;\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t$merged[ $key ] = $value;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} elseif ( is_array( $array2 ) ) {\n+\t\t\t$merged = $array2;\n+\t\t}\n+\n+\t\treturn $merged;\n+\t}\n+\n+\t\u002F**\n+\t * Encode the object to json format.\n+\t * Replace number, \"false\", \"true\" in couple of quotes with\n+\t * original value.\n+\t * Example:\n+\t *      Input: {\n+\t *          number: \"1234\",\n+\t *          true_value: \"true\",\n+\t *          false_value: \"false\"\n+\t *      }\n+\t *      Output: {\n+\t *          number: 1234,\n+\t *          true_value: true,\n+\t *          false_value: false\n+\t *      }\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return false|mixed|string\n+\t *\u002F\n+\tpublic static function json_encode( $data ) {\n+\t\t$data = wp_json_encode( $data );\n+\t\t$data = preg_replace_callback(\n+\t\t\t'~:\"(([0-9]+)([.,]?)([0-9]?)|true|false)\"~',\n+\t\t\tarray(\n+\t\t\t\t__CLASS__,\n+\t\t\t\t'_valid_json_value',\n+\t\t\t),\n+\t\t\t$data\n+\t\t);\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Callback function for json_encode method \"json_encode\".\n+\t *\n+\t * @param array $m\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function _valid_json_value( $m ) {\n+\t\treturn str_replace( array( ':\"', '\"' ), array( ':', '' ), $m[0] );\n+\t}\n+\n+\t\u002F**\n+\t * Create LP static page.\n+\t *\n+\t * @param array $args\n+\t * @param string $key_option\n+\t *\n+\t * @return bool|int|WP_Error\n+\t *\u002F\n+\tpublic static function create_page( array $args, string $key_option ) {\n+\t\t$page_id = 0;\n+\n+\t\ttry {\n+\t\t\tif ( ! isset( $args['post_title'] ) ) {\n+\t\t\t\tthrow new Exception( __( 'Missing post title', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( preg_match( '#^learn_press_single_instructor_page_id.*#', $key_option ) ) {\n+\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_single_instructor]\u003C!-- \u002Fwp:shortcode -->';\n+\t\t\t} elseif ( preg_match( '#^learn_press_instructors_page_id.*#', $key_option ) ) {\n+\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_instructors]\u003C!-- \u002Fwp:shortcode -->';\n+\t\t\t} elseif ( preg_match( '#^learn_press_profile_page_id.*#', $key_option ) ) {\n+\t\t\t\t$args['post_content'] = '\u003C!-- wp:shortcode -->[learn_press_profile]\u003C!-- \u002Fwp:shortcode -->';\n+\t\t\t}\n+\n+\t\t\t$args = array_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'post_title'     => '',\n+\t\t\t\t\t'post_name'      => '',\n+\t\t\t\t\t'post_status'    => 'publish',\n+\t\t\t\t\t'post_type'      => 'page',\n+\t\t\t\t\t'comment_status' => 'closed',\n+\t\t\t\t\t'post_content'   => '',\n+\t\t\t\t\t'post_author'    => get_current_user_id(),\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t);\n+\n+\t\t\t$page_id = wp_insert_post( $args );\n+\t\t\tif ( ! $page_id ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tupdate_option( $key_option, $page_id );\n+\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t\t$lp_settings_cache->clean_lp_settings();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $page_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get the current url\n+\t *\n+\t * @return string\n+\t * @since  3.2.6.8\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic static function getUrlCurrent(): string {\n+\t\t$schema      = is_ssl() ? 'https:\u002F\u002F' : 'http:\u002F\u002F';\n+\t\t$http_host   = LP_Helper::sanitize_params_submitted( urldecode( $_SERVER['HTTP_HOST'] ?? '' ) );\n+\t\t$request_uri = LP_Helper::sanitize_params_submitted( urldecode( $_SERVER['REQUEST_URI'] ?? '' ) );\n+\t\t\u002F\u002F$http_host   = LP_Helper::sanitize_params_submitted( filter_input( INPUT_SERVER, 'HTTP_HOST' ) ?? '' );\n+\t\t\u002F\u002F$request_uri = LP_Helper::sanitize_params_submitted( filter_input( INPUT_SERVER, 'REQUEST_URI' ) ?? '' );\n+\n+\t\treturn untrailingslashit( $schema . $http_host . $request_uri );\n+\t}\n+\n+\t\u002F**\n+\t * Check request is rest api\n+\t *\n+\t * @return bool\n+\t * @author tungnx\n+\t * @since 4.1.6.6\n+\t *\u002F\n+\tpublic static function isRestApiLP(): bool {\n+\t\t$restPrefix = '\u002F' . rest_get_url_prefix();\n+\t\treturn strpos( self::getUrlCurrent(), $restPrefix . '\u002Flp\u002F' ) || strpos( self::getUrlCurrent(), $restPrefix . '\u002Flearnpress\u002F' );\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize string and array\n+\t *\n+\t * @param array|string $value\n+\t * @param string $type_content\n+\t * @param bool $unslash Set it is false when you don’t want to remove slashes (unslash) from $value\n+\t * for example, in cases involving LaTeX math syntax.\n+\t * @return array|string\n+\t * @since  3.2.7.1\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic static function sanitize_params_submitted( $value, string $type_content = 'text', $unslash = true ) {\n+\t\t$value = $unslash ? wp_unslash( $value ) : $value;\n+\n+\t\tif ( is_string( $value ) ) {\n+\t\t\tswitch ( $type_content ) {\n+\t\t\t\tcase 'html':\n+\t\t\t\t\t$value = Template::sanitize_html_content( $value );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'textarea':\n+\t\t\t\t\t$value = sanitize_textarea_field( $value );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'key':\n+\t\t\t\t\t$value = sanitize_key( $value );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'int':\n+\t\t\t\t\t$value = (int) $value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'float':\n+\t\t\t\t\t$value = (float) $value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tif ( is_callable( $type_content ) ) {\n+\t\t\t\t\t\t$value = call_user_func( $type_content, $value );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$value = sanitize_text_field( $value );\n+\t\t\t\t\t}\n+\t\t\t}\n+\t\t} elseif ( is_array( $value ) ) {\n+\t\t\tforeach ( $value as $k => $v ) {\n+\t\t\t\tunset( $value[ $k ] );\n+\t\t\t\t$value[ sanitize_text_field( $k ) ] = self::sanitize_params_submitted( $v, $type_content, $unslash );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $value;\n+\t}\n+\n+\tpublic static function db_format_array( array $arr, string $format = '%d' ): string {\n+\t\t$arr_formatted = array_fill( 0, sizeof( $arr ), $format );\n+\n+\t\treturn join( ',', $arr_formatted );\n+\t}\n+\n+\t\u002F**\n+\t * Calculate percent of progress rows on db\n+\t *\n+\t * @param int $offset .\n+\t * @param int $limit .\n+\t * @param int $total_row .\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic static function progress_percent( int $offset, int $limit, int $total_row ): float {\n+\t\tif ( $total_row \u003C= 0 ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$percent = ( $offset + $limit ) * 100 \u002F $total_row;\n+\n+\t\t$percent = min( $percent, 100 );\n+\n+\t\treturn floatval( number_format( $percent, 2 ) );\n+\t}\n+\n+\t\u002F**\n+\t * Convert array to string\n+\t * Ex: array(\"publish\", \"pending\") to post_status IN(%s, %s)\n+\t *\n+\t * @param array $arr\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function format_query_IN( array $arr ): string {\n+\t\t$format = array_fill( 0, count( $arr ), '%s' );\n+\n+\t\treturn join( ',', $format );\n+\t}\n+\n+\t\u002F**\n+\t * Get link lp checkout page\n+\t * without cache - because some cache(redis) will cache page with user anonymous\n+\t *\u002F\n+\tpublic static function get_link_no_cache( string $link ): string {\n+\t\treturn esc_url_raw( add_query_arg( 'no-cache', uniqid(), $link ) );\n+\t}\n+\n+\t\u002F**\n+\t * Check string is json\n+\t *\n+\t * @param string $str\n+\t * @param null $associative\n+\t *\n+\t * @return mixed\n+\t * @throws Exception\n+\t * @since 4.1.6.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function json_decode( string $str, $associative = null ) {\n+\t\t$obj = json_decode( $str, $associative );\n+\t\tif ( json_last_error() !== JSON_ERROR_NONE ) {\n+\t\t\tthrow new Exception( 'JSON decode: ' . json_last_error_msg() );\n+\t\t}\n+\n+\t\treturn $obj;\n+\t}\n+\n+\t\u002F**\n+\t * Handle permalink structure for LP\n+\t *\n+\t * @return string\n+\t * @since 4.2.2\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic static function handle_lp_permalink_structure( $post_link, $post ) {\n+\t\tif ( false === strpos( $post_link, '%' ) ) {\n+\t\t\treturn $post_link;\n+\t\t}\n+\n+\t\t$find    = [];\n+\t\t$replace = [];\n+\t\tif ( ! empty( $post->post_date_gmt ) ) {\n+\t\t\t$find = array(\n+\t\t\t\t'%year%',\n+\t\t\t\t'%monthnum%',\n+\t\t\t\t'%day%',\n+\t\t\t\t'%hour%',\n+\t\t\t\t'%minute%',\n+\t\t\t\t'%second%',\n+\t\t\t\t'%post_id%',\n+\t\t\t);\n+\n+\t\t\t$time = strtotime( $post->post_date_gmt );\n+\n+\t\t\t$replace = array(\n+\t\t\t\tdate_i18n( 'Y', $time ),\n+\t\t\t\tdate_i18n( 'm', $time ),\n+\t\t\t\tdate_i18n( 'd', $time ),\n+\t\t\t\tdate_i18n( 'H', $time ),\n+\t\t\t\tdate_i18n( 'i', $time ),\n+\t\t\t\tdate_i18n( 's', $time ),\n+\t\t\t\t$post->ID,\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( strpos( $post_link, '%course_category%' ) && get_post_type( $post ) === LP_COURSE_CPT ) {\n+\t\t\t\u002F\u002F Get the custom taxonomy terms in use by this post\n+\t\t\t$terms = get_the_terms( $post->ID, 'course_category' );\n+\n+\t\t\tif ( ! empty( $terms ) ) {\n+\t\t\t\t$terms = wp_list_sort( $terms, 'term_id' );\n+\t\t\t\t\u002F\u002F order by IDF\n+\t\t\t\t$category_object = apply_filters(\n+\t\t\t\t\t'learn_press_course_post_type_link_course_category',\n+\t\t\t\t\t$terms[0],\n+\t\t\t\t\t$terms,\n+\t\t\t\t\t$post\n+\t\t\t\t);\n+\t\t\t\t$category_object = get_term( $category_object, 'course_category' );\n+\t\t\t\tif ( ! $category_object instanceof WP_Term ) {\n+\t\t\t\t\treturn $post_link;\n+\t\t\t\t}\n+\n+\t\t\t\t$course_category = $category_object->slug;\n+\t\t\t\t$parent          = $category_object->parent;\n+\t\t\t\tif ( $parent ) {\n+\t\t\t\t\t$ancestors = get_ancestors( $category_object->term_id, 'course_category' );\n+\t\t\t\t\tforeach ( $ancestors as $ancestor ) {\n+\t\t\t\t\t\t$ancestor_object = get_term( $ancestor, 'course_category' );\n+\t\t\t\t\t\tif ( $ancestor_object instanceof WP_Term ) {\n+\t\t\t\t\t\t\t$course_category = $ancestor_object->slug . '\u002F' . $course_category;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F If no terms are assigned to this post, use a string instead (can't leave the placeholder there)\n+\t\t\t\t$course_category = _x( 'uncategorized', 'slug', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$find[]    = '%course_category%';\n+\t\t\t$replace[] = urldecode( $course_category );\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fpermalink',\n+\t\t\tstr_replace( $find, $replace, $post_link ),\n+\t\t\t$post\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Print variable script inline script tag.\n+\t * If $name_variable_script is empty,\n+\t * the script will be print as json with set $tag_args['type'] = application\u002Fjson.\n+\t *\n+\t * @param string $name_variable_script\n+\t * @param array $data\n+\t * @param array $tag_args as ['type' => 'text\u002Fjavascript', 'id' => '']\n+\t *\n+\t * @return void\n+\t * @version 1.0.1\n+\t * @since 4.2.5.5\n+\t *\u002F\n+\tpublic static function print_inline_script_tag( string $name_variable_script, array $data, array $tag_args = [] ) {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( ! is_scalar( $value ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$data[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );\n+\t\t}\n+\n+\t\t$data_json = wp_json_encode( $data );\n+\t\t$script    = '';\n+\t\tif ( ! empty( $name_variable_script ) ) {\n+\t\t\t$script = \"var {$name_variable_script} = {$data_json};\";\n+\t\t} elseif ( isset( $tag_args['type'] ) && $tag_args['type'] === 'application\u002Fjson' ) {\n+\t\t\t$script = $data_json;\n+\t\t}\n+\t\twp_print_inline_script_tag( $script, $tag_args );\n+\t}\n+\n+\t\u002F**\n+\t * Get translation string single\u002Fplural\n+\t *\n+\t * @param float $number\n+\t * @param string $string_value\n+\t * @param bool $include_number\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_i18n_string_plural( float $number, string $string_value = '', bool $include_number = true ): string {\n+\t\tswitch ( $string_value ) {\n+\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'Course', 'Courses', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'Lesson', 'Lessons', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'Quiz', 'Quizzes', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'Question', 'Questions', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'lp_assignment':\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'Assignment', 'Assignments', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'lp_h5p':\n+\t\t\t\t$plural = sprintf(\n+\t\t\t\t\t_n( 'H5P', 'H5Ps', $number, 'learnpress' ),\n+\t\t\t\t\t$number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$plural = $string_value;\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\tif ( $include_number ) {\n+\t\t\t$plural = sprintf( '%s %s', $number, $plural );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fi18n\u002Fplural', $plural, $number, $string_value, $include_number );\n+\t}\n+\n+\t\u002F**\n+\t * Get client ip address\n+\t *\n+\t * @return mixed|string\n+\t * @since 4.2.7.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_client_ip(): string {\n+\t\t$ipaddress = 'ip-unknown';\n+\t\tif ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['HTTP_CLIENT_IP'];\n+\t\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];\n+\t\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['HTTP_X_FORWARDED'];\n+\t\t} elseif ( isset( $_SERVER['HTTP_FORWARDED_FOR'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];\n+\t\t} elseif ( isset( $_SERVER['HTTP_FORWARDED'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['HTTP_FORWARDED'];\n+\t\t} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {\n+\t\t\t$ipaddress = $_SERVER['REMOTE_ADDR'];\n+\t\t}\n+\n+\t\t$ipaddress = (string) $ipaddress;\n+\t\t$ipaddress = 'gip-' . $ipaddress;\n+\n+\t\treturn $ipaddress;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-install.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-install.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-install.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-install.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,351 +1,352 @@\n-\u003C?php\r\n-\u002F**\r\n- * Install and update functions.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! function_exists( 'LP_Install' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Install\r\n-\t *\u002F\r\n-\tclass LP_Install {\r\n-\t\tprotected static $instance;\r\n-\t\tprotected $lp_db;\r\n-\t\t\u002F**\r\n-\t\t * Default pages used by LP\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprivate static $_pages = array(\r\n-\t\t\t'checkout',\r\n-\t\t\t'profile',\r\n-\t\t\t'courses',\r\n-\t\t\t'instructors',\r\n-\t\t\t'single_instructor',\r\n-\t\t\t'become_a_teacher',\r\n-\t\t\t'term_conditions',\r\n-\t\t);\r\n-\r\n-\t\tprotected function __construct() {\r\n-\t\t\t$this->lp_db = LP_Database::getInstance();\r\n-\t\t\t\u002F\u002F Only run on backend.\r\n-\t\t\tif ( ! is_admin() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\r\n-\t\t\t\u002F\u002F From LP v4.2.2 temporary run create table thim_cache.\r\n-\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\r\n-\t\t\tif ( ! LP_Settings::is_created_tb_thim_cache() ) {\r\n-\t\t\t\t$this->create_table_thim_cache();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F From LP v4.2.6.9 temporary run create table learnpress_files.\r\n-\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\r\n-\t\t\tif ( ! LP_Settings::is_created_tb_courses() ) {\r\n-\t\t\t\t$this->create_table_courses();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F From LP v4.2.6.6 temporary run create table learnpress_files.\r\n-\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\r\n-\t\t\tif ( ! LP_Settings::is_created_tb_material_files() ) {\r\n-\t\t\t\t$this->create_table_learnpress_files();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Runtime migration for MCP API keys table.\r\n-\t\t\tif ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {\r\n-\t\t\t\t$this->create_table_mcp_api_keys();\r\n-\t\t\t}\r\n-\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instance\r\n-\t\t *\r\n-\t\t * @return LP_Install\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): self {\r\n-\t\t\tif ( ! self::$instance ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Do something after LP is activated.\r\n-\t\t *\r\n-\t\t * @since 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function on_activate() {\r\n-\t\t\t$this->create_tables();\r\n-\r\n-\t\t\tif ( ! self::tables_install_done() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if LP install before has db version\r\n-\t\t\tif ( ! get_option( LP_KEY_DB_VERSION, false ) ) {\r\n-\t\t\t\t\u002F\u002F Save database version of LP\r\n-\t\t\t\tupdate_option( LP_KEY_DB_VERSION, LearnPress::instance()->db_version );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Create pages default.\r\n-\t\t\tself::create_pages();\r\n-\r\n-\t\t\t\u002F\u002F Set permalink is \"Post name\".\r\n-\t\t\tif ( ! get_option( 'permalink_structure' ) ) {\r\n-\t\t\t\tupdate_option( 'permalink_structure', '\u002F%postname%\u002F' );\r\n-\t\t\t\t\u002F\u002F flush_rewrite_rules();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Force option users_can_register to ON.\r\n-\t\t\t\u002F*if ( ! get_option( 'users_can_register' ) ) {\r\n-\t\t\t\tupdate_option( 'users_can_register', 1 );\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t\u002F\u002F Set roles and capabilities.\r\n-\t\t\tlearn_press_add_user_roles();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create tables required for LP\r\n-\t\t *\u002F\r\n-\t\tprivate function create_tables() {\r\n-\t\t\ttry {\r\n-\t\t\t\t$tables = Config::instance()->get( 'tables-v4', 'table' );\r\n-\t\t\t\tforeach ( $tables as $table ) {\r\n-\t\t\t\t\tLP_Database::getInstance()->wpdb->query( $table );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! LP_Settings::is_created_tb_thim_cache() ) {\r\n-\t\t\t\t\t$this->create_table_thim_cache();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! LP_Settings::is_created_tb_material_files() ) {\r\n-\t\t\t\t\t$this->create_table_learnpress_files();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Ensure MCP API keys table exists for activation\u002Fupgrade flows.\r\n-\t\t\t\t\u002F\u002F Keep this explicit guard in addition to tables-v4 config loading.\r\n-\t\t\t\tif ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {\r\n-\t\t\t\t\t$this->create_table_mcp_api_keys();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tupdate_option( 'learn_press_check_tables', 'yes' );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create table thim_cache\r\n-\t\t *\r\n-\t\t * @since 4.2.2\r\n-\t\t *\u002F\r\n-\t\tprivate function create_table_thim_cache() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\r\n-\r\n-\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_thim_cache} (\r\n-\t\t\t\t\tkey_cache VARCHAR (191) NOT NULL UNIQUE,\r\n-\t\t\t\t\tvalue LONGTEXT NOT NULL,\r\n-\t\t\t\t\texpiration VARCHAR (191),\r\n-\t\t\t\t\tPRIMARY KEY (key_cache)\r\n-\t\t\t\t) $collation\";\r\n-\r\n-\t\t\t\t$rs = $wpdb->query( $sql );\r\n-\r\n-\t\t\t\tif ( $rs ) {\r\n-\t\t\t\t\tupdate_option( 'thim_cache_tb_created', 'yes' );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create table learnpress_courses\r\n-\t\t *\r\n-\t\t * @since 4.2.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function create_table_courses() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\r\n-\r\n-\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_courses} (\r\n-\t\t\t\t\tID bigint(20) unsigned NOT NULL,\r\n-\t\t\t\t\tjson LONGTEXT NOT NULL,\r\n-\t\t\t\t\tprice_to_sort FLOAT,\r\n-\t\t\t\t\tis_sale int(1) default 0,\r\n-\t\t\t\t\tpost_author bigint unsigned,\r\n-\t\t\t\t\tpost_date_gmt datetime,\r\n-\t\t\t\t\tpost_content LONGTEXT,\r\n-\t\t\t\t\tpost_title text not null,\r\n-\t\t\t\t\tpost_status varchar(20) default 'publish' not null,\r\n-\t\t\t\t\tpost_name varchar(200) default '',\r\n-\t\t\t\t\tmenu_order int default 0,\r\n-\t\t\t\t\tlang varchar(20),\r\n-\t\t\t\t\tPRIMARY KEY (ID),\r\n-\t\t\t\t\tKEY post_title (post_title(191)),\r\n-\t\t\t\t\tKEY post_status (post_status),\r\n-\t\t\t\t\tKEY post_name (post_name(191)),\r\n-\t\t\t\t\tKEY id_status (ID, post_status)\r\n-\t\t\t\t) $collation\";\r\n-\r\n-\t\t\t\t$rs = $wpdb->query( $sql );\r\n-\r\n-\t\t\t\tif ( $rs ) {\r\n-\t\t\t\t\tupdate_option( 'tb_learnpress_courses', 'yes' );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create table learnpress_material_files\r\n-\t\t *\r\n-\t\t * @since 4.2.6.6\r\n-\t\t *\u002F\r\n-\t\tprivate function create_table_learnpress_files() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\r\n-\r\n-\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_files} (\r\n-\t\t\t\t\tfile_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\t\t\tfile_name varchar(191) NOT NULL DEFAULT '',\r\n-\t\t\t\t\tfile_type varchar(100) NOT NULL DEFAULT '',\r\n-\t\t\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\r\n-\t\t\t\t\titem_type varchar(100) NOT NULL DEFAULT '',\r\n-\t\t\t\t\tmethod varchar(10) NOT NULL DEFAULT 'upload',\r\n-\t\t\t\t\tfile_path varchar(255) NOT NULL DEFAULT '',\r\n-\t\t\t\t\torders int(4) NOT NULL DEFAULT '0',\r\n-\t\t\t\t\tcreated_at datetime NULL DEFAULT NULL,\r\n-\t\t\t\t\tPRIMARY KEY (file_id),\r\n-\t\t\t\t\tKEY file_name (file_name),\r\n-\t\t\t\t\tKEY item_id (item_id),\r\n-\t\t\t\t\tKEY item_type (item_type)\r\n-\t\t\t\t) $collation\";\r\n-\r\n-\t\t\t\t$rs = $wpdb->query( $sql );\r\n-\r\n-\t\t\t\tif ( $rs ) {\r\n-\t\t\t\t\tupdate_option( 'table_learnpress_files_created', 'yes' );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create table learnpress_mcp_api_keys.\r\n-\t\t *\r\n-\t\t * @since 4.3.3\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function create_table_mcp_api_keys() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\r\n-\r\n-\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_mcp_api_keys} (\r\n-\t\t\t\t\tkey_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\t\t\tuser_id bigint(20) unsigned NOT NULL,\r\n-\t\t\t\t\tdescription varchar(200) NULL DEFAULT NULL,\r\n-\t\t\t\t\tpermissions varchar(10) NOT NULL DEFAULT 'read',\r\n-\t\t\t\t\tconsumer_key char(64) NOT NULL,\r\n-\t\t\t\t\tconsumer_secret char(64) NOT NULL,\r\n-\t\t\t\t\ttruncated_key char(7) NOT NULL,\r\n-\t\t\t\t\tlast_access datetime NULL DEFAULT NULL,\r\n-\t\t\t\t\tcall_count bigint(20) unsigned NOT NULL DEFAULT 0,\r\n-\t\t\t\t\tcreated_at datetime NOT NULL,\r\n-\t\t\t\t\tupdated_at datetime NULL DEFAULT NULL,\r\n-\t\t\t\t\tPRIMARY KEY (key_id),\r\n-\t\t\t\t\tUNIQUE KEY consumer_key (consumer_key),\r\n-\t\t\t\t\tKEY user_id (user_id)\r\n-\t\t\t\t) $collation\";\r\n-\r\n-\t\t\t\t$wpdb->query( $sql );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create default pages for LP\r\n-\t\t *\u002F\r\n-\t\tpublic static function create_pages() {\r\n-\t\t\t$pages = self::$_pages;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tforeach ( $pages as $page ) {\r\n-\t\t\t\t\t\u002F\u002F Check if page has already existed\r\n-\t\t\t\t\t$page_id = get_option( \"learn_press_{$page}_page_id\", false );\r\n-\r\n-\t\t\t\t\tif ( $page_id && get_post_type( $page_id ) === 'page' && get_post_status( $page_id ) == 'publish' ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $page === 'courses' ) {\r\n-\t\t\t\t\t\t$page_title = 'Courses';\r\n-\t\t\t\t\t\t$page_slug  = $page;\r\n-\t\t\t\t\t} elseif ( 'single_instructor' === $page ) {\r\n-\t\t\t\t\t\t$page_title = 'Instructor';\r\n-\t\t\t\t\t\t$page_slug  = 'instructor';\r\n-\t\t\t\t\t} elseif ( 'instructors' === $page ) {\r\n-\t\t\t\t\t\t$page_title = 'Instructors';\r\n-\t\t\t\t\t\t$page_slug  = $page;\r\n-\t\t\t\t\t} elseif ( 'become_a_teacher' === $page ) {\r\n-\t\t\t\t\t\t$page_title = 'Become an Instructor';\r\n-\t\t\t\t\t\t$page_slug  = $page;\r\n-\t\t\t\t\t} elseif ( 'term_conditions' === $page ) {\r\n-\t\t\t\t\t\t$page_title = 'Terms and Conditions';\r\n-\t\t\t\t\t\t$page_slug  = $page;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$page_title = ucwords( str_replace( '_', ' ', $page ) );\r\n-\t\t\t\t\t\t$page_slug  = 'lp-' . str_replace( '_', '-', $page );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$data_create_page = array(\r\n-\t\t\t\t\t\t'post_title' => $page_title,\r\n-\t\t\t\t\t\t'post_name'  => $page_slug,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tLP_Helper::create_page( $data_create_page, \"learn_press_{$page}_page_id\" );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tflush_rewrite_rules();\r\n-\t\t\t} catch ( Exception $ex ) {\r\n-\t\t\t\terror_log( $ex->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check installed all tables required for LearnPress.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function tables_install_done(): bool {\r\n-\t\t\t$install_done = get_option( 'learn_press_check_tables', 'no' );\r\n-\t\t\tif ( is_multisite() && 'yes' !== $install_done ) {\r\n-\t\t\t\t$this->create_tables();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $install_done;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Install and update functions.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! function_exists( 'LP_Install' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Install\n+\t *\u002F\n+\tclass LP_Install {\n+\t\tprotected static $instance;\n+\t\tprotected $lp_db;\n+\t\t\u002F**\n+\t\t * Default pages used by LP\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprivate static $_pages = array(\n+\t\t\t'checkout',\n+\t\t\t'profile',\n+\t\t\t'courses',\n+\t\t\t'instructors',\n+\t\t\t'single_instructor',\n+\t\t\t'become_a_teacher',\n+\t\t\t'term_conditions',\n+\t\t);\n+\n+\t\tprotected function __construct() {\n+\t\t\t$this->lp_db = LP_Database::getInstance();\n+\t\t\t\u002F\u002F Only run on backend.\n+\t\t\tif ( ! is_admin() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\n+\t\t\t\u002F\u002F From LP v4.2.2 temporary run create table thim_cache.\n+\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\n+\t\t\tif ( ! LP_Settings::is_created_tb_thim_cache() ) {\n+\t\t\t\t$this->create_table_thim_cache();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F From LP v4.2.6.9 temporary run create table learnpress_files.\n+\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\n+\t\t\tif ( ! LP_Settings::is_created_tb_courses() ) {\n+\t\t\t\t$this->create_table_courses();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F From LP v4.2.6.6 temporary run create table learnpress_files.\n+\t\t\t\u002F\u002F After a long time, will remove this code. Only run create table when activate plugin LP.\n+\t\t\tif ( ! LP_Settings::is_created_tb_material_files() ) {\n+\t\t\t\t$this->create_table_learnpress_files();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Runtime migration for MCP API keys table.\n+\t\t\tif ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {\n+\t\t\t\t$this->create_table_mcp_api_keys();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set roles and capabilities.\n+\t\t\tlearn_press_add_user_roles();\n+\n+\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instance\n+\t\t *\n+\t\t * @return LP_Install\n+\t\t *\u002F\n+\t\tpublic static function instance(): self {\n+\t\t\tif ( ! self::$instance ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Do something after LP is activated.\n+\t\t *\n+\t\t * @since 4.0.0\n+\t\t *\u002F\n+\t\tpublic function on_activate() {\n+\t\t\t$this->create_tables();\n+\n+\t\t\tif ( ! self::tables_install_done() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if LP install before has db version\n+\t\t\tif ( ! get_option( LP_KEY_DB_VERSION, false ) ) {\n+\t\t\t\t\u002F\u002F Save database version of LP\n+\t\t\t\tupdate_option( LP_KEY_DB_VERSION, LearnPress::instance()->db_version );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Create pages default.\n+\t\t\tself::create_pages();\n+\n+\t\t\t\u002F\u002F Set permalink is \"Post name\".\n+\t\t\tif ( ! get_option( 'permalink_structure' ) ) {\n+\t\t\t\tupdate_option( 'permalink_structure', '\u002F%postname%\u002F' );\n+\t\t\t\t\u002F\u002F flush_rewrite_rules();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Force option users_can_register to ON.\n+\t\t\t\u002F*if ( ! get_option( 'users_can_register' ) ) {\n+\t\t\t\tupdate_option( 'users_can_register', 1 );\n+\t\t\t}*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create tables required for LP\n+\t\t *\u002F\n+\t\tprivate function create_tables() {\n+\t\t\ttry {\n+\t\t\t\t$tables = Config::instance()->get( 'tables-v4', 'table' );\n+\t\t\t\tforeach ( $tables as $table ) {\n+\t\t\t\t\tLP_Database::getInstance()->wpdb->query( $table );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! LP_Settings::is_created_tb_thim_cache() ) {\n+\t\t\t\t\t$this->create_table_thim_cache();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! LP_Settings::is_created_tb_material_files() ) {\n+\t\t\t\t\t$this->create_table_learnpress_files();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Ensure MCP API keys table exists for activation\u002Fupgrade flows.\n+\t\t\t\t\u002F\u002F Keep this explicit guard in addition to tables-v4 config loading.\n+\t\t\t\tif ( ! LP_Settings::is_created_tb_mcp_api_keys() ) {\n+\t\t\t\t\t$this->create_table_mcp_api_keys();\n+\t\t\t\t}\n+\n+\t\t\t\tupdate_option( 'learn_press_check_tables', 'yes' );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create table thim_cache\n+\t\t *\n+\t\t * @since 4.2.2\n+\t\t *\u002F\n+\t\tprivate function create_table_thim_cache() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\ttry {\n+\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n+\n+\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_thim_cache} (\n+\t\t\t\t\tkey_cache VARCHAR (191) NOT NULL UNIQUE,\n+\t\t\t\t\tvalue LONGTEXT NOT NULL,\n+\t\t\t\t\texpiration VARCHAR (191),\n+\t\t\t\t\tPRIMARY KEY (key_cache)\n+\t\t\t\t) $collation\";\n+\n+\t\t\t\t$rs = $wpdb->query( $sql );\n+\n+\t\t\t\tif ( $rs ) {\n+\t\t\t\t\tupdate_option( 'thim_cache_tb_created', 'yes' );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create table learnpress_courses\n+\t\t *\n+\t\t * @since 4.2.6.9\n+\t\t *\u002F\n+\t\tpublic function create_table_courses() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\ttry {\n+\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n+\n+\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_courses} (\n+\t\t\t\t\tID bigint(20) unsigned NOT NULL,\n+\t\t\t\t\tjson LONGTEXT NOT NULL,\n+\t\t\t\t\tprice_to_sort FLOAT,\n+\t\t\t\t\tis_sale int(1) default 0,\n+\t\t\t\t\tpost_author bigint unsigned,\n+\t\t\t\t\tpost_date_gmt datetime,\n+\t\t\t\t\tpost_content LONGTEXT,\n+\t\t\t\t\tpost_title text not null,\n+\t\t\t\t\tpost_status varchar(20) default 'publish' not null,\n+\t\t\t\t\tpost_name varchar(200) default '',\n+\t\t\t\t\tmenu_order int default 0,\n+\t\t\t\t\tlang varchar(20),\n+\t\t\t\t\tPRIMARY KEY (ID),\n+\t\t\t\t\tKEY post_title (post_title(191)),\n+\t\t\t\t\tKEY post_status (post_status),\n+\t\t\t\t\tKEY post_name (post_name(191)),\n+\t\t\t\t\tKEY id_status (ID, post_status)\n+\t\t\t\t) $collation\";\n+\n+\t\t\t\t$rs = $wpdb->query( $sql );\n+\n+\t\t\t\tif ( $rs ) {\n+\t\t\t\t\tupdate_option( 'tb_learnpress_courses', 'yes' );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create table learnpress_material_files\n+\t\t *\n+\t\t * @since 4.2.6.6\n+\t\t *\u002F\n+\t\tprivate function create_table_learnpress_files() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\ttry {\n+\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n+\n+\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_files} (\n+\t\t\t\t\tfile_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\t\t\tfile_name varchar(191) NOT NULL DEFAULT '',\n+\t\t\t\t\tfile_type varchar(100) NOT NULL DEFAULT '',\n+\t\t\t\t\titem_id bigint(20) unsigned NOT NULL DEFAULT '0',\n+\t\t\t\t\titem_type varchar(100) NOT NULL DEFAULT '',\n+\t\t\t\t\tmethod varchar(10) NOT NULL DEFAULT 'upload',\n+\t\t\t\t\tfile_path varchar(255) NOT NULL DEFAULT '',\n+\t\t\t\t\torders int(4) NOT NULL DEFAULT '0',\n+\t\t\t\t\tcreated_at datetime NULL DEFAULT NULL,\n+\t\t\t\t\tPRIMARY KEY (file_id),\n+\t\t\t\t\tKEY file_name (file_name),\n+\t\t\t\t\tKEY item_id (item_id),\n+\t\t\t\t\tKEY item_type (item_type)\n+\t\t\t\t) $collation\";\n+\n+\t\t\t\t$rs = $wpdb->query( $sql );\n+\n+\t\t\t\tif ( $rs ) {\n+\t\t\t\t\tupdate_option( 'table_learnpress_files_created', 'yes' );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create table learnpress_mcp_api_keys.\n+\t\t *\n+\t\t * @since 4.3.3\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function create_table_mcp_api_keys() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\ttry {\n+\t\t\t\t$collation = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';\n+\n+\t\t\t\t$sql = \"CREATE TABLE IF NOT EXISTS {$this->lp_db->tb_lp_mcp_api_keys} (\n+\t\t\t\t\tkey_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\t\t\tuser_id bigint(20) unsigned NOT NULL,\n+\t\t\t\t\tdescription varchar(200) NULL DEFAULT NULL,\n+\t\t\t\t\tpermissions varchar(10) NOT NULL DEFAULT 'read',\n+\t\t\t\t\tconsumer_key char(64) NOT NULL,\n+\t\t\t\t\tconsumer_secret char(64) NOT NULL,\n+\t\t\t\t\ttruncated_key char(7) NOT NULL,\n+\t\t\t\t\tlast_access datetime NULL DEFAULT NULL,\n+\t\t\t\t\tcall_count bigint(20) unsigned NOT NULL DEFAULT 0,\n+\t\t\t\t\tcreated_at datetime NOT NULL,\n+\t\t\t\t\tupdated_at datetime NULL DEFAULT NULL,\n+\t\t\t\t\tPRIMARY KEY (key_id),\n+\t\t\t\t\tUNIQUE KEY consumer_key (consumer_key),\n+\t\t\t\t\tKEY user_id (user_id)\n+\t\t\t\t) $collation\";\n+\n+\t\t\t\t$wpdb->query( $sql );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create default pages for LP\n+\t\t *\u002F\n+\t\tpublic static function create_pages() {\n+\t\t\t$pages = self::$_pages;\n+\n+\t\t\ttry {\n+\t\t\t\tforeach ( $pages as $page ) {\n+\t\t\t\t\t\u002F\u002F Check if page has already existed\n+\t\t\t\t\t$page_id = get_option( \"learn_press_{$page}_page_id\", false );\n+\n+\t\t\t\t\tif ( $page_id && get_post_type( $page_id ) === 'page' && get_post_status( $page_id ) == 'publish' ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $page === 'courses' ) {\n+\t\t\t\t\t\t$page_title = 'Courses';\n+\t\t\t\t\t\t$page_slug  = $page;\n+\t\t\t\t\t} elseif ( 'single_instructor' === $page ) {\n+\t\t\t\t\t\t$page_title = 'Instructor';\n+\t\t\t\t\t\t$page_slug  = 'instructor';\n+\t\t\t\t\t} elseif ( 'instructors' === $page ) {\n+\t\t\t\t\t\t$page_title = 'Instructors';\n+\t\t\t\t\t\t$page_slug  = $page;\n+\t\t\t\t\t} elseif ( 'become_a_teacher' === $page ) {\n+\t\t\t\t\t\t$page_title = 'Become an Instructor';\n+\t\t\t\t\t\t$page_slug  = $page;\n+\t\t\t\t\t} elseif ( 'term_conditions' === $page ) {\n+\t\t\t\t\t\t$page_title = 'Terms and Conditions';\n+\t\t\t\t\t\t$page_slug  = $page;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$page_title = ucwords( str_replace( '_', ' ', $page ) );\n+\t\t\t\t\t\t$page_slug  = 'lp-' . str_replace( '_', '-', $page );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$data_create_page = array(\n+\t\t\t\t\t\t'post_title' => $page_title,\n+\t\t\t\t\t\t'post_name'  => $page_slug,\n+\t\t\t\t\t);\n+\t\t\t\t\tLP_Helper::create_page( $data_create_page, \"learn_press_{$page}_page_id\" );\n+\t\t\t\t}\n+\n+\t\t\t\tflush_rewrite_rules();\n+\t\t\t} catch ( Exception $ex ) {\n+\t\t\t\terror_log( $ex->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check installed all tables required for LearnPress.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function tables_install_done(): bool {\n+\t\t\t$install_done = get_option( 'learn_press_check_tables', 'no' );\n+\t\t\tif ( is_multisite() && 'yes' !== $install_done ) {\n+\t\t\t\t$this->create_tables();\n+\t\t\t}\n+\n+\t\t\treturn $install_done;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-manager-addons.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-manager-addons.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-manager-addons.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-manager-addons.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,308 +1,308 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Manager_Addons\r\n- *\r\n- * @author  ThimPress\r\n- * @version 1.0.0\r\n- * @since 4.2.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Manager_Addons {\r\n-\tprotected static $_instance;\r\n-\t\u002F**\r\n-\t * @var string Link get list addons.\r\n-\t *\u002F\r\n-\tpublic $url_list_addons = 'https:\u002F\u002Flearnpress.github.io\u002Flearnpress\u002Fversion-addons.json';\r\n-\t\u002F\u002Fpublic $url_list_addons   = LP_PLUGIN_URL . '\u002Fversion-addons.json';\r\n-\t\u002F**\r\n-\t * @var string $link_addon_action Link download plugin from Thimpress.\r\n-\t *\u002F\r\n-\tprivate $link_addon_action    = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Fdownload-addon';\r\n-\tpublic $link_addons_purchased = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Finfo-addons-purchased';\r\n-\t\u002F\u002Fpublic $link_addon_action = 'http:\u002F\u002Fupdates\u002Fthim-addon-market\u002Fdownload-addon';\r\n-\t\u002F**\r\n-\t * @var string $link_addon_action Link active site.\r\n-\t *\u002F\r\n-\tprivate $link_active_site = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Factive-site';\r\n-\t\u002F**\r\n-\t * @var string link download plugin from org.\r\n-\t *\u002F\r\n-\tpublic $link_org = 'https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002F';\r\n-\t\u002F**\r\n-\t * @var WP_Ajax_Upgrader_Skin $upgrader_skin\r\n-\t *\u002F\r\n-\tpublic $upgrader_skin;\r\n-\t\u002F**\r\n-\t * @var Plugin_Upgrader $plugin_upgrader\r\n-\t *\u002F\r\n-\tpublic $plugin_upgrader;\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic $key_purchase_addons = 'purchase_addons';\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fclass-wp-upgrader.php';\r\n-\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\r\n-\r\n-\t\t$this->upgrader_skin   = new WP_Ajax_Upgrader_Skin();\r\n-\t\t$this->plugin_upgrader = new Plugin_Upgrader( $this->upgrader_skin );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Singleton\r\n-\t *\r\n-\t * @return LP_Manager_Addons\r\n-\t *\u002F\r\n-\tpublic static function instance(): LP_Manager_Addons {\r\n-\t\tif ( self::$_instance == null ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Download addon from Thimpress.\r\n-\t *\r\n-\t * return string\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function download_from_thimpress( array $addon = [], string $purchase_code = '' ): string {\r\n-\t\t$lp_file_system = LP_WP_Filesystem::instance();\r\n-\t\t$link_download  = $this->link_addon_action;\r\n-\t\t$args           = [\r\n-\t\t\t'method'     => 'POST',\r\n-\t\t\t'body'       => [\r\n-\t\t\t\t'addon'   => $addon['slug'],\r\n-\t\t\t\t'version' => 'lastest',\r\n-\t\t\t],\r\n-\t\t\t'user-agent' => site_url(),\r\n-\t\t];\r\n-\r\n-\t\tif ( 0 == $addon['is_free'] ) {\r\n-\t\t\t$key_purchase                   = LP_Settings::get_option( $this->key_purchase_addons, [] );\r\n-\t\t\t$key_purchase[ $addon['slug'] ] = $purchase_code;\r\n-\t\t\tLP_Settings::update_option( $this->key_purchase_addons, $key_purchase );\r\n-\r\n-\t\t\t$args['body']['purchase_code'] = $purchase_code;\r\n-\t\t}\r\n-\r\n-\t\t$result = wp_remote_post( $link_download, $args );\r\n-\t\tif ( is_wp_error( $result ) ) {\r\n-\t\t\tthrow new Exception( $result->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\t$data = wp_remote_retrieve_body( $result );\r\n-\t\tif ( preg_match( '\u002F^Error.*\u002F', $data ) ) {\r\n-\t\t\tthrow new Exception( $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create file temp zip addon to install with\r\n-\t\t$wp_upload_dir = wp_upload_dir( null, false );\r\n-\t\t$name          = 'addon.zip';\r\n-\t\t$path_file     = $wp_upload_dir['basedir'] . DIRECTORY_SEPARATOR . $name;\r\n-\t\t$lp_file_system->put_contents( $path_file, $data );\r\n-\r\n-\t\treturn $path_file;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Install plugin.\r\n-\t *\r\n-\t * @param array $addon\r\n-\t * @param string $package The full local path or URI of the package.\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function install( array $addon = [], string $package = '' ) {\r\n-\t\t$result_install = $this->plugin_upgrader->install( $package );\r\n-\t\tif ( is_wp_error( $result_install ) ) {\r\n-\t\t\tthrow new Exception( $result_install->get_error_message() );\r\n-\t\t} elseif ( ! $result_install ) {\r\n-\t\t\tthrow new Exception( __( 'Install failed!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$result_active = activate_plugin( $addon['basename'] );\r\n-\t\tif ( is_wp_error( $result_active ) ) {\r\n-\t\t\tthrow new Exception( $result_active->get_error_message() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update plugin.\r\n-\t *\r\n-\t * @param array $addon\r\n-\t * @param string $package\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function update( array $addon = [], string $package = '' ) {\r\n-\t\t$is_activate = is_plugin_active( $addon['basename'] );\r\n-\t\t\u002F\u002F Must call this function to upgrade success.\r\n-\t\twp_update_plugins();\r\n-\r\n-\t\t$args_upgrade = [\r\n-\t\t\t'package'                     => $package,\r\n-\t\t\t'destination'                 => WP_PLUGIN_DIR,\r\n-\t\t\t'clear_destination'           => false,\r\n-\t\t\t'clear_working'               => true,\r\n-\t\t\t'hook_extra'                  => [],\r\n-\t\t\t'abort_if_destination_exists' => false,\r\n-\t\t];\r\n-\t\t$result       = $this->plugin_upgrader->run( $args_upgrade );\r\n-\t\tif ( ! $result ) {\r\n-\t\t\tthrow new Exception( __( 'Update failed!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( $is_activate ) {\r\n-\t\t\t$this->activate( $addon );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Activate plugin.\r\n-\t *\r\n-\t * @param array $addon\r\n-\t *\r\n-\t * @return bool|int|true|WP_Error\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function activate( array $addon = [] ) {\r\n-\t\tif ( isset( $addon['dependency'] ) ) {\r\n-\t\t\tforeach ( $addon['dependency'] as $addon_slug => $addon_label ) {\r\n-\t\t\t\tif ( ! is_plugin_active( $addon_slug ) ) {\r\n-\t\t\t\t\tthrow new Exception( sprintf( 'Please activate \"%s\" plugin before activate this add-on', $addon_label ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$result_active = activate_plugin( $addon['basename'] ?? '' );\r\n-\t\tif ( is_wp_error( $result_active ) ) {\r\n-\t\t\tthrow new Exception( $result_active->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\treturn $result_active;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Deactivate plugin.\r\n-\t *\r\n-\t * @param array $addon\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function deactivate( array $addon = [] ) {\r\n-\t\tdeactivate_plugins( $addon['basename'] ?? '' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Active site if install plugin via upload zip has \"purchase code\".\r\n-\t *\r\n-\t * @param $addon_slug\r\n-\t * @param $purchase_code\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function active_site( $addon_slug, $purchase_code ) {\r\n-\t\ttry {\r\n-\t\t\t$args = [\r\n-\t\t\t\t'method'     => 'POST',\r\n-\t\t\t\t'body'       => [\r\n-\t\t\t\t\t'addon'         => $addon_slug,\r\n-\t\t\t\t\t'purchase_code' => $purchase_code,\r\n-\t\t\t\t],\r\n-\t\t\t\t'user-agent' => site_url(),\r\n-\t\t\t];\r\n-\r\n-\t\t\t$result = wp_remote_post( $this->link_active_site, $args );\r\n-\t\t\tif ( is_wp_error( $result ) ) {\r\n-\t\t\t\tthrow new Exception( $result->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data = wp_remote_retrieve_body( $result );\r\n-\t\t\tif ( preg_match( '\u002F^Error.*\u002F', $data ) ) {\r\n-\t\t\t\tthrow new Exception( $data );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Save keys purchase code of addons to table WP Options.\r\n-\t\t\t$key_purchases                = LP_Settings::get_option( LP_Manager_Addons::instance()->key_purchase_addons, [] );\r\n-\t\t\t$key_purchases[ $addon_slug ] = $purchase_code;\r\n-\t\t\tLP_Settings::update_option( LP_Manager_Addons::instance()->key_purchase_addons, $key_purchases );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list addon have new version.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function list_addon_new_version(): array {\r\n-\t\t$addon_contr = new LP_REST_Addon_Controller();\r\n-\t\t$request     = new WP_REST_Request();\r\n-\t\t$request->set_param( 'return_obj', true );\r\n-\t\t$addons_rs          = $addon_contr->list_addons( $request );\r\n-\t\t$addons_new_version = [];\r\n-\t\tif ( 'success' === $addons_rs->status ) {\r\n-\t\t\t$addons  = $addons_rs->data;\r\n-\t\t\t$plugins = get_plugins();\r\n-\r\n-\t\t\tforeach ( $addons as $addon ) {\r\n-\t\t\t\tif ( isset( $plugins[ $addon->basename ] ) ) {\r\n-\t\t\t\t\t$version = $plugins[ $addon->basename ]['Version'];\r\n-\t\t\t\t\tif ( version_compare( $version, $addon->version, '\u003C' ) ) {\r\n-\t\t\t\t\t\t$addons_new_version[] = $addon;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $addons_new_version;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check addons purchased need extend.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_addons_purchased_need_extend(): bool {\r\n-\t\t$addon_contr = new LP_REST_Addon_Controller();\r\n-\t\t$request     = new WP_REST_Request();\r\n-\t\t$request->set_param( 'return_obj', true );\r\n-\t\t$addons_rs = $addon_contr->list_addons( $request );\r\n-\t\tforeach ( $addons_rs->data as $addon ) {\r\n-\t\t\tif ( isset( $addon->purchase_info ) ) {\r\n-\t\t\t\t$addon_purchased  = $addon->purchase_info;\r\n-\t\t\t\t$date_expired_str = $addon_purchased->date_expire ?? '';\r\n-\t\t\t\t\u002F\u002F Test\r\n-\t\t\t\t\u002F\u002F$date_expired_str = '2024-02-01';\r\n-\t\t\t\t\u002F\u002F$date_expired_str = '2023-01-12';\r\n-\t\t\t\t\u002F\u002F End\r\n-\t\t\t\t$date_expired          = new DateTime( $date_expired_str );\r\n-\t\t\t\t$date_now              = new DateTime( gmdate( 'Y-m-d' ) );\r\n-\t\t\t\t$date_diff             = date_diff( $date_now, $date_expired );\r\n-\t\t\t\t$number_days_remaining = $date_diff->days;\r\n-\t\t\t\tif ( $date_diff->invert ) {\r\n-\t\t\t\t\t$number_days_remaining = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $number_days_remaining \u003C= 60 ) {\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Manager_Addons\n+ *\n+ * @author  ThimPress\n+ * @version 1.0.0\n+ * @since 4.2.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Manager_Addons {\n+\tprotected static $_instance;\n+\t\u002F**\n+\t * @var string Link get list addons.\n+\t *\u002F\n+\tpublic $url_list_addons = 'https:\u002F\u002Flearnpress.github.io\u002Flearnpress\u002Fversion-addons.json';\n+\t\u002F\u002Fpublic $url_list_addons   = LP_PLUGIN_URL . '\u002Fversion-addons.json';\n+\t\u002F**\n+\t * @var string $link_addon_action Link download plugin from Thimpress.\n+\t *\u002F\n+\tprivate $link_addon_action    = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Fdownload-addon';\n+\tpublic $link_addons_purchased = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Finfo-addons-purchased';\n+\t\u002F\u002Fpublic $link_addon_action = 'http:\u002F\u002Fupdates\u002Fthim-addon-market\u002Fdownload-addon';\n+\t\u002F**\n+\t * @var string $link_addon_action Link active site.\n+\t *\u002F\n+\tprivate $link_active_site = 'https:\u002F\u002Fupdates.thimpress.com\u002Fthim-addon-market\u002Factive-site';\n+\t\u002F**\n+\t * @var string link download plugin from org.\n+\t *\u002F\n+\tpublic $link_org = 'https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002F';\n+\t\u002F**\n+\t * @var WP_Ajax_Upgrader_Skin $upgrader_skin\n+\t *\u002F\n+\tpublic $upgrader_skin;\n+\t\u002F**\n+\t * @var Plugin_Upgrader $plugin_upgrader\n+\t *\u002F\n+\tpublic $plugin_upgrader;\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tpublic $key_purchase_addons = 'purchase_addons';\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fclass-wp-upgrader.php';\n+\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin-install.php';\n+\n+\t\t$this->upgrader_skin   = new WP_Ajax_Upgrader_Skin();\n+\t\t$this->plugin_upgrader = new Plugin_Upgrader( $this->upgrader_skin );\n+\t}\n+\n+\t\u002F**\n+\t * Singleton\n+\t *\n+\t * @return LP_Manager_Addons\n+\t *\u002F\n+\tpublic static function instance(): LP_Manager_Addons {\n+\t\tif ( self::$_instance == null ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Download addon from Thimpress.\n+\t *\n+\t * return string\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function download_from_thimpress( array $addon = [], string $purchase_code = '' ): string {\n+\t\t$lp_file_system = LP_WP_Filesystem::instance();\n+\t\t$link_download  = $this->link_addon_action;\n+\t\t$args           = [\n+\t\t\t'method'     => 'POST',\n+\t\t\t'body'       => [\n+\t\t\t\t'addon'   => $addon['slug'],\n+\t\t\t\t'version' => 'lastest',\n+\t\t\t],\n+\t\t\t'user-agent' => site_url(),\n+\t\t];\n+\n+\t\tif ( 0 == $addon['is_free'] ) {\n+\t\t\t$key_purchase                   = LP_Settings::get_option( $this->key_purchase_addons, [] );\n+\t\t\t$key_purchase[ $addon['slug'] ] = $purchase_code;\n+\t\t\tLP_Settings::update_option( $this->key_purchase_addons, $key_purchase );\n+\n+\t\t\t$args['body']['purchase_code'] = $purchase_code;\n+\t\t}\n+\n+\t\t$result = wp_remote_post( $link_download, $args );\n+\t\tif ( is_wp_error( $result ) ) {\n+\t\t\tthrow new Exception( $result->get_error_message() );\n+\t\t}\n+\n+\t\t$data = wp_remote_retrieve_body( $result );\n+\t\tif ( preg_match( '\u002F^Error.*\u002F', $data ) ) {\n+\t\t\tthrow new Exception( $data );\n+\t\t}\n+\n+\t\t\u002F\u002F Create file temp zip addon to install with\n+\t\t$wp_upload_dir = wp_upload_dir( null, false );\n+\t\t$name          = 'addon.zip';\n+\t\t$path_file     = $wp_upload_dir['basedir'] . DIRECTORY_SEPARATOR . $name;\n+\t\t$lp_file_system->put_contents( $path_file, $data );\n+\n+\t\treturn $path_file;\n+\t}\n+\n+\t\u002F**\n+\t * Install plugin.\n+\t *\n+\t * @param array $addon\n+\t * @param string $package The full local path or URI of the package.\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function install( array $addon = [], string $package = '' ) {\n+\t\t$result_install = $this->plugin_upgrader->install( $package );\n+\t\tif ( is_wp_error( $result_install ) ) {\n+\t\t\tthrow new Exception( $result_install->get_error_message() );\n+\t\t} elseif ( ! $result_install ) {\n+\t\t\tthrow new Exception( __( 'Install failed!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$result_active = activate_plugin( $addon['basename'] );\n+\t\tif ( is_wp_error( $result_active ) ) {\n+\t\t\tthrow new Exception( $result_active->get_error_message() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update plugin.\n+\t *\n+\t * @param array $addon\n+\t * @param string $package\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function update( array $addon = [], string $package = '' ) {\n+\t\t$is_activate = is_plugin_active( $addon['basename'] );\n+\t\t\u002F\u002F Must call this function to upgrade success.\n+\t\twp_update_plugins();\n+\n+\t\t$args_upgrade = [\n+\t\t\t'package'                     => $package,\n+\t\t\t'destination'                 => WP_PLUGIN_DIR,\n+\t\t\t'clear_destination'           => false,\n+\t\t\t'clear_working'               => true,\n+\t\t\t'hook_extra'                  => [],\n+\t\t\t'abort_if_destination_exists' => false,\n+\t\t];\n+\t\t$result       = $this->plugin_upgrader->run( $args_upgrade );\n+\t\tif ( ! $result ) {\n+\t\t\tthrow new Exception( __( 'Update failed!', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( $is_activate ) {\n+\t\t\t$this->activate( $addon );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Activate plugin.\n+\t *\n+\t * @param array $addon\n+\t *\n+\t * @return bool|int|true|WP_Error\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function activate( array $addon = [] ) {\n+\t\tif ( isset( $addon['dependency'] ) ) {\n+\t\t\tforeach ( $addon['dependency'] as $addon_slug => $addon_label ) {\n+\t\t\t\tif ( ! is_plugin_active( $addon_slug ) ) {\n+\t\t\t\t\tthrow new Exception( sprintf( 'Please activate \"%s\" plugin before activate this add-on', $addon_label ) );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$result_active = activate_plugin( $addon['basename'] ?? '' );\n+\t\tif ( is_wp_error( $result_active ) ) {\n+\t\t\tthrow new Exception( $result_active->get_error_message() );\n+\t\t}\n+\n+\t\treturn $result_active;\n+\t}\n+\n+\t\u002F**\n+\t * Deactivate plugin.\n+\t *\n+\t * @param array $addon\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function deactivate( array $addon = [] ) {\n+\t\tdeactivate_plugins( $addon['basename'] ?? '' );\n+\t}\n+\n+\t\u002F**\n+\t * Active site if install plugin via upload zip has \"purchase code\".\n+\t *\n+\t * @param $addon_slug\n+\t * @param $purchase_code\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function active_site( $addon_slug, $purchase_code ) {\n+\t\ttry {\n+\t\t\t$args = [\n+\t\t\t\t'method'     => 'POST',\n+\t\t\t\t'body'       => [\n+\t\t\t\t\t'addon'         => $addon_slug,\n+\t\t\t\t\t'purchase_code' => $purchase_code,\n+\t\t\t\t],\n+\t\t\t\t'user-agent' => site_url(),\n+\t\t\t];\n+\n+\t\t\t$result = wp_remote_post( $this->link_active_site, $args );\n+\t\t\tif ( is_wp_error( $result ) ) {\n+\t\t\t\tthrow new Exception( $result->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$data = wp_remote_retrieve_body( $result );\n+\t\t\tif ( preg_match( '\u002F^Error.*\u002F', $data ) ) {\n+\t\t\t\tthrow new Exception( $data );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Save keys purchase code of addons to table WP Options.\n+\t\t\t$key_purchases                = LP_Settings::get_option( LP_Manager_Addons::instance()->key_purchase_addons, [] );\n+\t\t\t$key_purchases[ $addon_slug ] = $purchase_code;\n+\t\t\tLP_Settings::update_option( LP_Manager_Addons::instance()->key_purchase_addons, $key_purchases );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get list addon have new version.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function list_addon_new_version(): array {\n+\t\t$addon_contr = new LP_REST_Addon_Controller();\n+\t\t$request     = new WP_REST_Request();\n+\t\t$request->set_param( 'return_obj', true );\n+\t\t$addons_rs          = $addon_contr->list_addons( $request );\n+\t\t$addons_new_version = [];\n+\t\tif ( 'success' === $addons_rs->status ) {\n+\t\t\t$addons  = $addons_rs->data;\n+\t\t\t$plugins = get_plugins();\n+\n+\t\t\tforeach ( $addons as $addon ) {\n+\t\t\t\tif ( isset( $plugins[ $addon->basename ] ) ) {\n+\t\t\t\t\t$version = $plugins[ $addon->basename ]['Version'];\n+\t\t\t\t\tif ( version_compare( $version, $addon->version, '\u003C' ) ) {\n+\t\t\t\t\t\t$addons_new_version[] = $addon;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $addons_new_version;\n+\t}\n+\n+\t\u002F**\n+\t * Check addons purchased need extend.\n+\t *\n+\t * @return bool\n+\t * @throws Exception\n+\t * @since 4.2.5.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_addons_purchased_need_extend(): bool {\n+\t\t$addon_contr = new LP_REST_Addon_Controller();\n+\t\t$request     = new WP_REST_Request();\n+\t\t$request->set_param( 'return_obj', true );\n+\t\t$addons_rs = $addon_contr->list_addons( $request );\n+\t\tforeach ( $addons_rs->data as $addon ) {\n+\t\t\tif ( isset( $addon->purchase_info ) ) {\n+\t\t\t\t$addon_purchased  = $addon->purchase_info;\n+\t\t\t\t$date_expired_str = $addon_purchased->date_expire ?? '';\n+\t\t\t\t\u002F\u002F Test\n+\t\t\t\t\u002F\u002F$date_expired_str = '2024-02-01';\n+\t\t\t\t\u002F\u002F$date_expired_str = '2023-01-12';\n+\t\t\t\t\u002F\u002F End\n+\t\t\t\t$date_expired          = new DateTime( $date_expired_str );\n+\t\t\t\t$date_now              = new DateTime( gmdate( 'Y-m-d' ) );\n+\t\t\t\t$date_diff             = date_diff( $date_now, $date_expired );\n+\t\t\t\t$number_days_remaining = $date_diff->days;\n+\t\t\t\tif ( $date_diff->invert ) {\n+\t\t\t\t\t$number_days_remaining = 0;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $number_days_remaining \u003C= 60 ) {\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-page-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-page-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-page-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-page-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1264 +1,1325 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-\r\n-\u002F**\r\n- * Class LP_Page_Controller\r\n- *\u002F\r\n-class LP_Page_Controller {\r\n-\tprotected static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Store the object has queried by WP.\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\t\u002F\u002Fprotected $_queried_object = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\t\u002F\u002Fprotected $_filter_content_priority = 10000;\r\n-\r\n-\t\u002F**\r\n-\t * Flag for 404 content.\r\n-\t *\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $_is_404 = false;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Page_Controller constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t\u002F\u002F Set link course, item course.\r\n-\t\tadd_filter( 'post_type_link', array( $this, 'post_type_link' ), 10, 2 );\r\n-\r\n-\t\tif ( LP_Page_Controller::is_page_lp_ajax() ) {\r\n-\t\t\tif ( ! isset( $_REQUEST['lp-load-ajax'] ) ) {\r\n-\t\t\t\twp_die( 'Invalid request!', 400 );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( is_admin() ) {\r\n-\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002Fadd_filter( 'post_type_archive_link', [ $this, 'link_archive_course' ], 10, 2 );\r\n-\t\t\tadd_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), - 1 );\r\n-\t\t\t\u002F\u002F For debug mysql query post of WP.\r\n-\t\t\t\u002F*add_filter(\r\n-\t\t\t\t'posts_request',\r\n-\t\t\t\tfunction ( $request, $q ) {\r\n-\t\t\t\t\tLP_Debug::var_dump( $request );\r\n-\t\t\t\t\treturn $request;\r\n-\t\t\t\t},\r\n-\t\t\t\t10,\r\n-\t\t\t\t2\r\n-\t\t\t);*\u002F\r\n-\t\t\t\u002F*add_filter(\r\n-\t\t\t\t'posts_clauses_request',\r\n-\t\t\t\tfunction ( $clauses, $wp_query ) {\r\n-\t\t\t\t\tif ( ! $wp_query->is_search() ) {\r\n-\t\t\t\t\t\treturn $clauses;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$lp_db             = LP_Database::getInstance();\r\n-\t\t\t\t\t$clauses['where'] .= sprintf( \" OR ( post_type = '%s' AND meta_key = '_lp_preview' AND meta_value = 'yes')\", LP_LESSON_CPT );\r\n-\t\t\t\t\t$clauses['join']  .= ' INNER JOIN ' . $lp_db->tb_postmeta . ' ON post_id = wp_posts.ID ';\r\n-\r\n-\t\t\t\t\treturn $clauses;\r\n-\t\t\t\t},\r\n-\t\t\t\t10,\r\n-\t\t\t\t2\r\n-\t\t\t);*\u002F\r\n-\t\t\t\u002F\u002F For return result query course to cache.\r\n-\t\t\t\u002F\u002Fadd_action( 'posts_pre_query', [ $this, 'posts_pre_query' ], 10, 2 );\r\n-\t\t\tadd_filter( 'template_include', array( $this, 'template_loader' ), 10 );\r\n-\t\t\tadd_filter( 'template_include', array( $this, 'logout' ), 30 );\r\n-\r\n-\t\t\tadd_filter( 'the_post', array( $this, 'setup_data_for_item_course' ) );\r\n-\t\t\tadd_filter( 'request', array( $this, 'remove_course_post_format' ), 1 );\r\n-\r\n-\t\t\t\u002F\u002Fadd_shortcode( 'learn_press_archive_course', array( $this, 'archive_content' ) );\r\n-\t\t\tadd_filter( 'pre_get_document_title', array( $this, 'set_title_pages' ), 10, 1 );\r\n-\r\n-\t\t\t\u002F\u002F Yoast seo\r\n-\t\t\tadd_filter( 'wpseo_opengraph_desc', array( $this, 'lp_desc_item_yoast_seo' ), 11, 1 );\r\n-\t\t\tadd_filter( 'wpseo_metadesc', array( $this, 'lp_desc_item_yoast_seo' ), 11, 1 );\r\n-\r\n-\t\t\t\u002F\u002F Set link profile to admin menu\r\n-\t\t\t\u002F\u002Fadd_action( 'admin_bar_menu', array( $this, 'learn_press_edit_admin_bar' ) );\r\n-\r\n-\t\t\t\u002F\u002F Set again x-wp-nonce on header when has cache with not login.\r\n-\t\t\tadd_filter( 'rest_send_nocache_headers', array( $this, 'check_x_wp_nonce_cache' ) );\r\n-\r\n-\t\t\t\u002F\u002F Rewrite lesson comment links\r\n-\t\t\tadd_filter( 'get_comment_link', array( $this, 'edit_lesson_comment_links' ), 10, 2 );\r\n-\t\t\t\u002F\u002F Active menu\r\n-\t\t\tadd_filter( 'wp_nav_menu_objects', [ $this, 'menu_active' ], 10, 1 );\r\n-\t\t\t\u002F\u002F Canonical\r\n-\t\t\tadd_filter(\r\n-\t\t\t\t'get_canonical_url',\r\n-\t\t\t\tfunction ( $canonical_url ) {\r\n-\t\t\t\t\tif ( LP_Page_Controller::is_page_instructor() ) {\r\n-\t\t\t\t\t\t$canonical_url = LP_Helper::getUrlCurrent();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn $canonical_url;\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Disable create sitemap for items type of Course.\r\n-\t\tadd_filter(\r\n-\t\t\t'wp_sitemaps_post_types',\r\n-\t\t\tfunction ( $post_types ) {\r\n-\t\t\t\t$item_types   = CourseModel::item_types_support();\r\n-\t\t\t\t$item_types[] = LP_QUESTION_CPT;\r\n-\t\t\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t\t\tif ( isset( $post_types[ $item_type ] ) ) {\r\n-\t\t\t\t\t\tunset( $post_types[ $item_type ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $post_types;\r\n-\t\t\t}\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Disable create sitemap for YoastSEO, Rank Math, but can affect to all logic, ex: it makes link edit of items course lose.\r\n-\t\t *\r\n-\t\t * @var WP_Post_Type $post_type\r\n-\t\t *\u002F\r\n-\t\t\u002F*add_filter(\r\n-\t\t\t'is_post_type_viewable',\r\n-\t\t\tfunction ( $is_viewable, $post_type ) {\r\n-\t\t\t\t$item_types   = CourseModel::item_types_support();\r\n-\t\t\t\t$item_types[] = LP_QUESTION_CPT;\r\n-\t\t\t\tif ( in_array( $post_type->name, $item_types ) ) {\r\n-\t\t\t\t\t$is_viewable = false;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $is_viewable;\r\n-\t\t\t},\r\n-\t\t\t10,\r\n-\t\t\t2\r\n-\t\t);*\u002F\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set link archive course.\r\n-\t *\r\n-\t * @param string $link\r\n-\t * @param string $post_type\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function link_archive_course( string $link, string $post_type ): string {\r\n-\t\tif ( $post_type == LP_COURSE_CPT && learn_press_get_page_id( 'courses' ) ) {\r\n-\t\t\t$link = learn_press_get_page_link( 'courses' );\r\n-\t\t}\r\n-\r\n-\t\treturn $link;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set link course, item course\r\n-\t *\r\n-\t * @param string $post_link\r\n-\t * @param object $post\r\n-\t *\u002F\r\n-\tpublic function post_type_link( $post_link, $post ) {\r\n-\t\t\u002F\u002F Set item's course permalink\r\n-\t\t$course_item_types = CourseModel::item_types_support();\r\n-\t\t$item_id           = $post->ID;\r\n-\r\n-\t\t\u002F\u002F Link item course on search page of WP.\r\n-\t\tif ( in_array( $post->post_type, $course_item_types ) && is_search() ) {\r\n-\t\t\t$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $item_id );\r\n-\t\t\tif ( ! $section_id ) {\r\n-\t\t\t\treturn $post_link;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\treturn $post_link;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn $post_link;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_link = $course->get_item_link( $item_id );\r\n-\t\t} elseif ( LP_COURSE_CPT === $post->post_type ) {\r\n-\t\t\t\u002F\u002F Link single course (with %course_category%).\r\n-\t\t\t$post_link = LP_Helper::handle_lp_permalink_structure( $post_link, $post );\r\n-\t\t}\r\n-\r\n-\t\treturn $post_link;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set title of pages\r\n-\t *\r\n-\t * 1. Title course archive page\r\n-\t * 2. Title item of course\r\n-\t * 3. Title page Profile\r\n-\t *\r\n-\t * @param string $title\r\n-\t *\r\n-\t * @return string\r\n-\t * @author tungnx\r\n-\t * @since  3.2.7.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function set_title_pages( $title = '' ): string {\r\n-\t\t$flag_title_course = false;\r\n-\r\n-\t\t$course_archive_page_id = LP_Settings::get_option( 'courses_page_id', 0 );\r\n-\r\n-\t\t\u002F\u002F Set title single course.\r\n-\t\tif ( learn_press_is_course() ) {\r\n-\t\t\t$item = LP_Global::course_item();\r\n-\t\t\tif ( $item ) {\r\n-\t\t\t\t$title = apply_filters( 'learn-press\u002Fdocument-course-title-parts', get_the_title() . ' &rarr; ' . $item->get_title(), $item );\r\n-\r\n-\t\t\t\t$flag_title_course = true;\r\n-\t\t\t}\r\n-\t\t} elseif ( LP_Page_Controller::is_page_courses() ) { \u002F\u002F Set title course archive page.\r\n-\t\t\tif ( isset( $_GET['c_search'] ) ) {\r\n-\t\t\t\t$title = __( 'Course Search Results', 'learnpress' );\r\n-\t\t\t} elseif ( is_tax( LP_COURSE_CATEGORY_TAX ) || is_tax( LP_COURSE_TAXONOMY_TAG ) ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var WP_Query $wp_query\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tglobal $wp_query;\r\n-\t\t\t\tif ( $wp_query->queried_object ) {\r\n-\t\t\t\t\t$title = $wp_query->queried_object->name;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$title = $course_archive_page_id ? get_the_title( $course_archive_page_id ) : __( 'Courses', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$flag_title_course = true;\r\n-\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\t$profile  = LP_Profile::instance();\r\n-\t\t\t$tab_slug = $profile->get_current_tab();\r\n-\t\t\t$tab      = $profile->get_tab_at( $tab_slug );\r\n-\t\t\t$page_id  = learn_press_get_page_id( 'profile' );\r\n-\r\n-\t\t\tif ( $page_id ) {\r\n-\t\t\t\t$page_title = get_the_title( $page_id );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page_title = '';\r\n-\t\t\t}\r\n-\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\r\n-\t\t\t\t$title = join(\r\n-\t\t\t\t\t' ',\r\n-\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Fdocument-profile-title-parts',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t$page_title,\r\n-\t\t\t\t\t\t\t'&rarr;',\r\n-\t\t\t\t\t\t\t$tab->get( 'title' ),\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$flag_title_course = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( $flag_title_course ) {\r\n-\t\t\t$title .= ' - ' . get_bloginfo( 'name', 'display' );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_string( $title ) ) {\r\n-\t\t\t$title = get_bloginfo( 'name', 'display' );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Ftitle-page', $title );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set description of course's item for yoast seo\r\n-\t *\r\n-\t * @param $desc\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @author tungnx\r\n-\t * @since 3.2.7.9\r\n-\t *\u002F\r\n-\tpublic function lp_desc_item_yoast_seo( $desc ) {\r\n-\t\tif ( learn_press_is_course() ) {\r\n-\r\n-\t\t\t$item = LP_Global::course_item();\r\n-\r\n-\t\t\tif ( empty( $item ) ) {\r\n-\t\t\t\treturn $desc;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$desc = get_post_meta( $item->get_id(), '_yoast_wpseo_metadesc', true );\r\n-\t\t}\r\n-\r\n-\t\treturn $desc;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle logout\r\n-\t *\u002F\r\n-\tpublic function logout( $template ) {\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\t$logout_slug = learn_press_profile_logout_slug();\r\n-\r\n-\t\tif ( $logout_slug && ( $wp_query->get( 'view' ) === $logout_slug ) ) {\r\n-\t\t\twp_safe_redirect( str_replace( '&amp;', '&', wp_logout_url( learn_press_get_page_link( 'profile' ) ) ) );\r\n-\t\t\texit;\r\n-\t\t}\r\n-\r\n-\t\treturn $template;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load data for item of course\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @editor tungnx\r\n-\t * Todo: should remove this function when load true type post's item\r\n-\t *\u002F\r\n-\tpublic function setup_data_for_item_course( $post ): WP_Post {\r\n-\t\t\u002F**\r\n-\t\t * @var WP $wp\r\n-\t\t * @var WP_Query $wp_query\r\n-\t\t * @var LP_Course $lp_course\r\n-\t\t * @var LP_Course_Item|LP_Quiz|LP_Lesson $lp_course_item\r\n-\t\t *\u002F\r\n-\t\tglobal $wp, $wp_query, $lp_course_item;\r\n-\t\t$vars = $wp->query_vars;\r\n-\t\tif ( empty( $vars['course-item'] ) ) {\r\n-\t\t\treturn $post;\r\n-\t\t}\r\n-\r\n-\t\tif ( LP_COURSE_CPT !== $post->post_type ) {\r\n-\t\t\treturn $post;\r\n-\t\t}\r\n-\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn $post;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Use for case not load course via send params, use global instead.\r\n-\t\t * Not recommended for use\r\n-\t\t * This method is only purpose instead get_the_ID(), on file item of course.\r\n-\t\t * When all file write by standard callback send param courseModel, this method will be removed.\r\n-\t\t *\r\n-\t\t * @return false|CourseModel\r\n-\t\t * @since 4.2.7.4\r\n-\t\t *\u002F\r\n-\t\tglobal $lpCourseModel;\r\n-\t\t$lpCourseModel = CourseModel::find( $course->get_id(), true );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated v4.1.6.1 LearnPress::instance()->global['course'], $GLOBALS['course']\r\n-\t\t * Some theme still use: global $course; LearnPress::instance()->global['course']\r\n-\t\t *\u002F\r\n-\t\t\u002F\u002FLearnPress::instance()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;\r\n-\t\tLearnPress::instance()->global['course'] = $GLOBALS['course'] = $course;\r\n-\r\n-\t\tif ( wp_verify_nonce( LP_Request::get_param( 'preview' ), 'preview-' . $post->ID ) ) {\r\n-\t\t\t$GLOBALS['preview_course'] = $post->ID;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $wp_query->is_main_query() ) {\r\n-\t\t\treturn $post;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\t\t\u002F\u002F If item name is set in query vars\r\n-\t\t\t$item_type = $vars['item-type'];\r\n-\t\t\t$post_item = learn_press_get_post_by_name( $vars['course-item'], $item_type );\r\n-\r\n-\t\t\tif ( ! $post_item ) {\r\n-\t\t\t\treturn $post;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_course_item = apply_filters( 'learn-press\u002Fsingle-course-request-item', $course->get_item( $post_item->ID ) );\r\n-\r\n-\t\t\tif ( ! $lp_course_item ) {\r\n-\t\t\t\treturn $post;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set item viewing\r\n-\t\t\t$user->set_viewing_item( $lp_course_item );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $post;\r\n-\t}\r\n-\r\n-\tpublic function is_404() {\r\n-\t\treturn apply_filters( 'learn-press\u002Fquery\u002F404', $this->_is_404 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * In preview mode, if there is a 'post_format' in query var\r\n-\t * wp check and replace our post-type to post. This make preview\r\n-\t * course item become 404\r\n-\t *\r\n-\t * @param $qv\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function remove_course_post_format( $qv ) {\r\n-\t\tif ( ! empty( $qv['post_type'] ) && LP_COURSE_CPT === $qv['post_type'] ) {\r\n-\t\t\tif ( ! empty( $qv['post_format'] ) ) {\r\n-\t\t\t\tunset( $qv['post_format'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $qv;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t * @deprecated v4.2.7.6\r\n-\t *\u002F\r\n-\tprotected function _is_archive() {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\treturn false;\r\n-\t\treturn learn_press_is_courses() || learn_press_is_course_tag() || learn_press_is_course_category() || learn_press_is_search() || learn_press_is_course_tax();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t * @deprecated v4.2.7.6\r\n-\t *\u002F\r\n-\tprotected function _is_single() {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\treturn false;\r\n-\t\treturn learn_press_is_course() && is_single();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load content of course depending on query.\r\n-\t *\r\n-\t * @param string $template\r\n-\t *\r\n-\t * @return bool|string\r\n-\t *\u002F\r\n-\tpublic function template_loader( $template ) {\r\n-\r\n-\t\tif ( wp_is_block_theme() ) {\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_embed() ) {\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F $this->_maybe_redirect_courses_page();\r\n-\r\n-\t\t$default_template = $this->get_page_template();\r\n-\r\n-\t\tif ( $default_template ) {\r\n-\t\t\t$templates = $this->get_page_templates( $default_template );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Disable override templates in theme by default since LP 4.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( learn_press_override_templates() ) {\r\n-\t\t\t\t$new_template = locate_template( $templates );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! isset( $new_template ) || ! $new_template ) {\r\n-\t\t\t\t$new_template = LP_TEMPLATE_PATH . $default_template;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$template = $new_template;\r\n-\t\t}\r\n-\r\n-\t\treturn $template;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the default filename for a template.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since  4.0.0\r\n-\t *\u002F\r\n-\tprivate function get_page_template() {\r\n-\t\t$page_template = '';\r\n-\t\t$object        = get_queried_object();\r\n-\r\n-\t\tif ( self::is_page_single_course() ) {\r\n-\t\t\t$page_template = 'single-course-layout.php';\r\n-\t\t\t\u002F\u002F Check condition to load single course layout classic or modern.\r\n-\t\t\t$is_override_single_course   = Template::check_template_is_override( 'single-course.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'content-course.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'content-single-course.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'loop\u002Fsingle-course\u002Floop-section.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'single-course\u002Floop-section.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'single-course\u002Ftabs\u002Fcurriculum.php' )\r\n-\t\t\t|| Template::check_template_is_override( 'single-course\u002Ftabs\u002Fcurriculum-v2.php' );\r\n-\t\t\t$option_single_course_layout = LP_Settings::get_option( 'layout_single_course', '' );\r\n-\r\n-\t\t\tif ( $is_override_single_course ) { \u002F\u002F Old file template\r\n-\t\t\t\t$page_template = 'single-course.php';\r\n-\t\t\t} elseif ( empty( $option_single_course_layout )\r\n-\t\t\t\t|| $option_single_course_layout === 'classic' ) {\r\n-\t\t\t\t$page_template = 'single-course-layout-classic.php';\r\n-\t\t\t\t\u002F\u002F Set temporary old single course layout.\r\n-\t\t\t\t$page_template = 'single-course.php';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Old single course layout.\r\n-\t\t\t\u002F\u002F$page_template = 'single-course.php';\r\n-\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\r\n-\t\t\t$course_item = LP_Global::course_item();\r\n-\t\t\tif ( $course_item ) {\r\n-\t\t\t\t$page_template = 'content-single-item.php';\r\n-\t\t\t} elseif ( $object ) {\r\n-\t\t\t\t$course = CourseModel::find( $object->ID, true );\r\n-\t\t\t\tif ( $course && $course->is_offline() ) {\r\n-\t\t\t\t\t$page_template = 'single-course-offline.php';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} elseif ( learn_press_is_course_taxonomy() ) {\r\n-\t\t\tif ( is_tax( 'course_category' ) || is_tax( 'course_tag' ) ) {\r\n-\t\t\t\t$page_template = 'taxonomy-' . $object->taxonomy . '.php';\r\n-\r\n-\t\t\t\tif ( ! file_exists( learn_press_locate_template( $page_template ) ) ) {\r\n-\t\t\t\t\t$page_template = 'archive-course.php';\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$page_template = 'archive-course.php';\r\n-\t\t\t}\r\n-\t\t} elseif ( self::is_page_courses() ) {\r\n-\t\t\t$page_template = 'archive-course.php';\r\n-\t\t} elseif ( learn_press_is_checkout() ) {\r\n-\t\t\t$page_template = 'pages\u002Fcheckout.php';\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fpage-template', $page_template );\r\n-\t}\r\n-\r\n-\tprivate function get_page_templates( $default_template ) {\r\n-\t\t$templates = apply_filters( 'learn-press\u002Fpage-templates', array(), $default_template );\r\n-\r\n-\t\tif ( is_page_template() ) {\r\n-\t\t\t$page_template = get_page_template_slug();\r\n-\r\n-\t\t\tif ( $page_template ) {\r\n-\t\t\t\t$validated_file = validate_file( $page_template );\r\n-\t\t\t\tif ( 0 === $validated_file ) {\r\n-\t\t\t\t\t$templates[] = $page_template;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\terror_log( \"LearnPress: Unable to validate template path: \\\"$page_template\\\". Error Code: $validated_file.\" );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F*if ( is_singular( LP_COURSE_CPT ) ) {\r\n-\t\t\t$object       = get_queried_object();\r\n-\t\t\t$name_decoded = urldecode( $object->post_name );\r\n-\r\n-\t\t\tif ( $name_decoded !== $object->post_name ) {\r\n-\t\t\t\t$templates[] = \"single-course-$name_decoded.php\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t$templates[] = \"single-product-$object->post_name.php\";\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( learn_press_is_course_taxonomy() ) {\r\n-\t\t\t$object      = get_queried_object();\r\n-\t\t\t$templates[] = 'taxonomy-' . $object->taxonomy . '-' . $object->slug . '.php';\r\n-\t\t\t$templates[] = learn_press_template_path() . '\u002Ftaxonomy-' . $object->taxonomy . '-' . $object->slug . '.php';\r\n-\t\t\t$templates[] = 'taxonomy-' . $object->taxonomy . '.php';\r\n-\t\t\t$templates[] = learn_press_template_path() . '\u002Ftaxonomy-' . $object->taxonomy . '.php';\r\n-\t\t}\r\n-\r\n-\t\t$templates[] = $default_template;\r\n-\t\t$templates[] = learn_press_template_path() . '\u002F' . $default_template;\r\n-\r\n-\t\treturn array_unique( $templates );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $title\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function page_title( $title ) {\r\n-\t\tglobal $wp_query;\r\n-\t\tif ( ! empty( $wp_query->queried_object_id ) ) {\r\n-\t\t\t$title['title'] = get_the_title( $wp_query->queried_object_id );\r\n-\t\t}\r\n-\r\n-\t\treturn $title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query courses if page is archive courses\r\n-\t *\r\n-\t * @param $q WP_Query\r\n-\t *\r\n-\t * @return WP_Query\r\n-\t * @editor tungnx\r\n-\t * @throws Exception\r\n-\t * @version 4.1.3\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function pre_get_posts( WP_Query $q ): WP_Query {\r\n-\t\t\u002F\u002F Affect only the main query and not in admin\r\n-\t\tif ( ! $q->is_main_query() && ! is_admin() ) {\r\n-\t\t\treturn $q;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( LP_Page_Controller::is_page_courses() ) {\r\n-\t\t\t\tif ( LP_Settings_Courses::is_ajax_load_courses() && ! LP_Settings_Courses::is_no_load_ajax_first_courses()\r\n-\t\t\t\t\t&& ! LP_Settings::theme_no_support_load_courses_ajax() ) {\r\n-\t\t\t\t\t\u002F**\r\n-\t\t\t\t\t * If page is archive course - query set posts_per_page = 1\r\n-\t\t\t\t\t * For fastest - because when page loaded - call API to load list courses\r\n-\t\t\t\t\t *\r\n-\t\t\t\t\t * Current, apply only for LP, not apply for theme Thimpress, because theme override\r\n-\t\t\t\t\t *\u002F\r\n-\t\t\t\t\t$q->set( 'posts_per_page', 1 );\r\n-\t\t\t\t\t$q->set( 'suppress_filters', true );\r\n-\t\t\t\t\t\u002F\u002F$q->set( 'posts_per_archive_page', 1 );\r\n-\t\t\t\t\t\u002F\u002F$q->set( 'nopaging', true );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$filter               = new LP_Course_Filter();\r\n-\t\t\t\t\t$filter->only_fields  = [ 'ID' ];\r\n-\t\t\t\t\t$filter->limit        = - 1;\r\n-\t\t\t\t\t$is_need_check_in_arr = false;\r\n-\t\t\t\t\t$limit                = LP_Settings::get_option( 'archive_course_limit', 6 );\r\n-\r\n-\t\t\t\t\tif ( LP_Settings_Courses::is_ajax_load_courses() &&\r\n-\t\t\t\t\t\tLP_Settings_Courses::get_type_pagination() != 'number' &&\r\n-\t\t\t\t\t\t! LP_Settings::theme_no_support_load_courses_ajax() ) {\r\n-\t\t\t\t\t\t$q->set( 'paged', 1 );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$q->set( 'posts_per_page', $limit );\r\n-\t\t\t\t\t\u002F\u002F $q->set( 'cache_results', true ); \u002F\u002F it default true\r\n-\r\n-\t\t\t\t\t\u002F\u002F Search courses by keyword\r\n-\t\t\t\t\tif ( ! empty( $_REQUEST['c_search'] ) ) {\r\n-\t\t\t\t\t\t$filter->post_title   = LP_Helper::sanitize_params_submitted( $_REQUEST['c_search'] );\r\n-\t\t\t\t\t\t$is_need_check_in_arr = true;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $_REQUEST['c_authors'] ?? 0 );\r\n-\t\t\t\t\tif ( ! empty( $author_ids_str ) ) {\r\n-\t\t\t\t\t\t$q->set( 'author', $author_ids_str );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Search course has price\u002Ffree\r\n-\t\t\t\t\t$meta_query = [];\r\n-\t\t\t\t\tif ( isset( $_REQUEST['sort_by'] ) ) {\r\n-\t\t\t\t\t\t$sort_by = LP_Helper::sanitize_params_submitted( $_REQUEST['sort_by'] );\r\n-\t\t\t\t\t\tif ( 'on_paid' === $sort_by ) {\r\n-\t\t\t\t\t\t\t$meta_query[] = array(\r\n-\t\t\t\t\t\t\t\t'key'     => '_lp_price',\r\n-\t\t\t\t\t\t\t\t'value'   => 0,\r\n-\t\t\t\t\t\t\t\t'compare' => '>',\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( 'on_free' === $sort_by ) {\r\n-\t\t\t\t\t\t\t$meta_query[] = array(\r\n-\t\t\t\t\t\t\t\t'relation' => 'OR',\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\r\n-\t\t\t\t\t\t\t\t\t'value'   => 0,\r\n-\t\t\t\t\t\t\t\t\t'compare' => '=',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\r\n-\t\t\t\t\t\t\t\t\t'value'   => '',\r\n-\t\t\t\t\t\t\t\t\t'compare' => '=',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\r\n-\t\t\t\t\t\t\t\t\t'compare' => 'NOT EXISTS',\r\n-\t\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Search by level\r\n-\t\t\t\t\t$c_level = LP_Helper::sanitize_params_submitted( urldecode( $_REQUEST['c_level'] ?? '' ) );\r\n-\t\t\t\t\tif ( ! empty( $c_level ) ) {\r\n-\t\t\t\t\t\t$c_level      = str_replace( 'all', '', $c_level );\r\n-\t\t\t\t\t\t$c_level      = explode( ',', $c_level );\r\n-\t\t\t\t\t\t$meta_query[] = array(\r\n-\t\t\t\t\t\t\t'key'     => '_lp_level',\r\n-\t\t\t\t\t\t\t'value'   => $c_level,\r\n-\t\t\t\t\t\t\t'compare' => 'IN',\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$q->set( 'meta_query', $meta_query );\r\n-\t\t\t\t\t\u002F\u002F End Meta query\r\n-\r\n-\t\t\t\t\t\u002F\u002F Search on Category\r\n-\t\t\t\t\t$args_cat     = lp_archive_skeleton_get_args();\r\n-\t\t\t\t\t$tax_query    = [];\r\n-\t\t\t\t\t$term_ids_str = LP_Helper::sanitize_params_submitted(\r\n-\t\t\t\t\t\turldecode( $_REQUEST['term_id'] ?? $args_cat['page_term_id_current'] ?? '' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( ! empty( $term_ids_str ) ) {\r\n-\t\t\t\t\t\t$term_ids = explode( ',', $term_ids_str );\r\n-\r\n-\t\t\t\t\t\t$tax_query[] = array(\r\n-\t\t\t\t\t\t\t'taxonomy'         => 'course_category',\r\n-\t\t\t\t\t\t\t'field'            => 'term_id',\r\n-\t\t\t\t\t\t\t'terms'            => $term_ids,\r\n-\t\t\t\t\t\t\t'operator'         => 'IN',\r\n-\t\t\t\t\t\t\t'include_children' => false,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Tag query\r\n-\t\t\t\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $_REQUEST['tag_id'] ?? '' ) );\r\n-\t\t\t\t\tif ( ! empty( $tag_ids_str ) ) {\r\n-\t\t\t\t\t\t$term_ids = explode( ',', $tag_ids_str );\r\n-\r\n-\t\t\t\t\t\t$tax_query[] = array(\r\n-\t\t\t\t\t\t\t'taxonomy' => 'course_tag',\r\n-\t\t\t\t\t\t\t'field'    => 'term_id',\r\n-\t\t\t\t\t\t\t'terms'    => $term_ids,\r\n-\t\t\t\t\t\t\t'operator' => 'IN',\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$q->set( 'tax_query', $tax_query );\r\n-\t\t\t\t\t\u002F\u002F End Tax query\r\n-\r\n-\t\t\t\t\t\u002F\u002F Author query\r\n-\t\t\t\t\tif ( isset( $_REQUEST['c_author'] ) ) {\r\n-\t\t\t\t\t\t$author_ids = LP_Helper::sanitize_params_submitted( $_REQUEST['c_author'] );\r\n-\t\t\t\t\t\t$q->set( 'author__in', $author_ids );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t\u002F\u002F End Author query\r\n-\r\n-\t\t\t\t\t\u002F\u002F Order query\r\n-\t\t\t\t\tif ( isset( $_REQUEST['order_by'] ) ) {\r\n-\t\t\t\t\t\t$order_by = LP_Helper::sanitize_params_submitted( $_REQUEST['order_by'] );\r\n-\t\t\t\t\t\t$order    = 'DESC';\r\n-\r\n-\t\t\t\t\t\tswitch ( $order_by ) {\r\n-\t\t\t\t\t\t\tcase 'post_title':\r\n-\t\t\t\t\t\t\t\t$order_by = 'title';\r\n-\t\t\t\t\t\t\t\t$order    = 'ASC';\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tcase 'popular':\r\n-\t\t\t\t\t\t\t\t$filter->order_by     = 'popular';\r\n-\t\t\t\t\t\t\t\t$order_by             = 'post__in';\r\n-\t\t\t\t\t\t\t\t$is_need_check_in_arr = true;\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t\t$order_by = 'date';\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$q->set( 'orderby', $order_by );\r\n-\t\t\t\t\t\t$q->set( 'order', $order );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $is_need_check_in_arr ) {\r\n-\t\t\t\t\t\t$posts_in = Courses::get_courses( $filter );\r\n-\t\t\t\t\t\tif ( ! empty( $posts_in ) ) {\r\n-\t\t\t\t\t\t\t$posts_in = LP_Database::get_values_by_key( $posts_in );\r\n-\t\t\t\t\t\t\t$q->set( 'post__in', $posts_in );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$q->set( 'post__in', 0 );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$q = apply_filters( 'lp\u002Fpage-courses\u002Fquery\u002Flegacy', $q );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $q;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Exclude item not assign\r\n-\t\t\tif ( $q->is_search() ) {\r\n-\t\t\t\treturn $q;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Handle 404 if user are viewing course item directly.\r\n-\t\t\t$this->set_link_item_course_default_wp_to_page_404( $q );\r\n-\r\n-\t\t\t\u002F\u002F set 404 if viewing single instructor but not logged\r\n-\t\t\t$slug_instructor = get_query_var( 'instructor_name' );\r\n-\t\t\tif ( get_query_var( 'is_single_instructor' ) ) {\r\n-\t\t\t\tif ( empty( $slug_instructor ) && ! is_user_logged_in() ) {\r\n-\t\t\t\t\tself::set_page_404();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $q;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle 404 if user are viewing course item directly.\r\n-\t * Example: http:\u002F\u002Fexample.com\u002Flesson\u002Fslug-lesson\r\n-\t * Apply for user not admin, instructor, co-instructor\r\n-\t *\r\n-\t * @param WP_Query $q\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since  3.2.7.5\r\n-\t *\u002F\r\n-\tpublic function set_link_item_course_default_wp_to_page_404( $q ) {\r\n-\t\t$post_type_apply_404 = apply_filters(\r\n-\t\t\t'lp\u002Fpage-controller\u002F',\r\n-\t\t\tarray(\r\n-\t\t\t\tLP_LESSON_CPT,\r\n-\t\t\t\tLP_QUIZ_CPT,\r\n-\t\t\t\tLP_QUESTION_CPT,\r\n-\t\t\t\t'lp_assignment',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( ! isset( $q->query_vars['post_type'] ) || ! in_array( $q->query_vars['post_type'], $post_type_apply_404 ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$flag_load_404 = true;\r\n-\t\t\t$user          = wp_get_current_user();\r\n-\t\t\t$post_author   = 0;\r\n-\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\tif ( isset( $_GET['preview_id'] ) ) {\r\n-\t\t\t\t\t$post_id     = absint( $_GET['preview_id'] );\r\n-\t\t\t\t\t$post        = get_post( $post_id );\r\n-\t\t\t\t\t$post_author = $post->post_author;\r\n-\t\t\t\t} elseif ( isset( $_GET['preview'] ) && isset( $_GET['p'] ) ) {\r\n-\t\t\t\t\t$post_id     = absint( $_GET['p'] );\r\n-\t\t\t\t\t$post        = get_post( $post_id );\r\n-\t\t\t\t\t$post_author = $post->post_author;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$post_author = LP_Database::getInstance()->getPostAuthorByTypeAndSlug( $q->query_vars['post_type'] ?? '', $q->query_vars['name'] ?? '' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $user->has_cap( 'administrator' ) ) {\r\n-\t\t\t\t\t$flag_load_404 = false;\r\n-\t\t\t\t} elseif ( $user->has_cap( LP_TEACHER_ROLE ) && $post_author == $user->ID ) {\r\n-\t\t\t\t\t$flag_load_404 = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$flag_load_404 = apply_filters( 'learnpress\u002Fpage\u002Fset-link-item-course-404', $flag_load_404, $post_author, $user );\r\n-\r\n-\t\t\tif ( $flag_load_404 ) {\r\n-\t\t\t\tself::set_page_404();\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get page current on frontend\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 3.2.8\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic static function page_current(): string {\r\n-\t\t\u002F**\r\n-\t\t * @var WP_Query $wp_query\r\n-\t\t *\u002F\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\tif ( ! is_object( $wp_query ) || ! $wp_query->get_queried_object() ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( self::is_page_checkout() ) {\r\n-\t\t\treturn LP_PAGE_CHECKOUT;\r\n-\t\t} elseif ( LP_Global::course_item_quiz() ) {\r\n-\t\t\treturn LP_PAGE_QUIZ;\r\n-\t\t} elseif ( learn_press_is_course() && LP_Global::course_item() ) {\r\n-\t\t\treturn LP_PAGE_SINGLE_COURSE_CURRICULUM;\r\n-\t\t} elseif ( self::is_page_courses() ) {\r\n-\t\t\treturn LP_PAGE_COURSES;\r\n-\t\t} elseif ( learn_press_is_course() ) {\r\n-\t\t\treturn LP_PAGE_SINGLE_COURSE;\r\n-\t\t} elseif ( self::is_page_become_a_teacher() ) {\r\n-\t\t\treturn LP_PAGE_BECOME_A_TEACHER;\r\n-\t\t} elseif ( self::is_page_profile() ) {\r\n-\t\t\treturn LP_PAGE_PROFILE;\r\n-\t\t} elseif ( learn_press_is_instructors() ) {\r\n-\t\t\treturn LP_PAGE_INSTRUCTORS;\r\n-\t\t} elseif ( self::is_page_instructor() ) {\r\n-\t\t\treturn LP_PAGE_INSTRUCTOR;\r\n-\t\t} else {\r\n-\t\t\treturn apply_filters( 'learnpress\u002Fpage\u002Fcurrent', '' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page viewing\r\n-\t *\r\n-\t * @param string $name\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function page_is( string $name = '' ): bool {\r\n-\t\t$page_id = learn_press_get_page_id( $name );\r\n-\t\tif ( ! $page_id || 'page' !== get_post_type( $page_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F If pages of LP set to homepage will return false\r\n-\t\t$link_page = urldecode( get_the_permalink( $page_id ) );\r\n-\t\t$home_url  = home_url( '\u002F' );\r\n-\t\tif ( $home_url === $link_page ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$page_profile_option = untrailingslashit( $link_page );\r\n-\t\t$page_profile_option = str_replace( '\u002F', '\\\u002F', $page_profile_option );\r\n-\t\t$pattern             = \"\u002F^$page_profile_option\u002F\";\r\n-\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page is single course\r\n-\t *\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_single_course(): bool {\r\n-\t\tstatic $flag;\r\n-\t\tif ( ! is_null( $flag ) ) {\r\n-\t\t\treturn $flag;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$flag = is_singular( LP_COURSE_CPT );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$flag = false;\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page courses\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_courses(): bool {\r\n-\t\tstatic $flag;\r\n-\t\tif ( ! is_null( $flag ) ) {\r\n-\t\t\treturn $flag;\r\n-\t\t}\r\n-\r\n-\t\t$is_tag      = is_tax( LP_COURSE_TAXONOMY_TAG );\r\n-\t\t$is_category = is_tax( LP_COURSE_CATEGORY_TAX );\r\n-\r\n-\t\tif ( $is_category || $is_tag || is_post_type_archive( 'lp_course' ) ) {\r\n-\t\t\t$flag = true;\r\n-\t\t} else {\r\n-\t\t\t$page_courses_id  = learn_press_get_page_id( 'courses' );\r\n-\t\t\t$page_courses_url = untrailingslashit( get_the_permalink( $page_courses_id ) );\r\n-\t\t\tif ( empty( $page_courses_url ) ) {\r\n-\t\t\t\t$page_courses_url = home_url( 'courses' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$page_courses_regex = str_replace( '\u002F', '\\\u002F', $page_courses_url );\r\n-\t\t\t$pattern            = '\u002F' . $page_courses_regex . '\\\u002F?(page\\\u002F[0-9]*)?$\u002F';\r\n-\t\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\r\n-\t\t\t\t$flag = true;\r\n-\t\t\t} else {\r\n-\t\t\t\t$flag = false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page profile\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_profile(): bool {\r\n-\t\tstatic $flag;\r\n-\t\tif ( ! is_null( $flag ) ) {\r\n-\t\t\treturn $flag;\r\n-\t\t}\r\n-\r\n-\t\t$flag = self::page_is( 'profile' );\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page instructor\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_instructors(): bool {\r\n-\t\tstatic $flag;\r\n-\t\tif ( ! is_null( $flag ) ) {\r\n-\t\t\treturn $flag;\r\n-\t\t}\r\n-\r\n-\t\t$flag = self::page_is( 'instructors' );\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page instructor\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_instructor(): bool {\r\n-\t\tglobal $wp_query;\r\n-\t\tstatic $flag;\r\n-\t\tif ( ! is_null( $flag ) ) {\r\n-\t\t\treturn $flag;\r\n-\t\t}\r\n-\r\n-\t\t$flag = false;\r\n-\t\tif ( $wp_query->get( 'is_single_instructor' ) ) {\r\n-\t\t\t$flag = true;\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page profile\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_page_checkout(): bool {\r\n-\t\treturn self::page_is( 'checkout' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page Become a teacher\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.2.8\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic static function is_page_become_a_teacher(): bool {\r\n-\t\treturn self::page_is( 'become_a_teacher' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check page is LP Ajax\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.7\r\n-\t *\u002F\r\n-\tpublic static function is_page_lp_ajax(): bool {\r\n-\t\t\u002F\u002F If pages of LP set to homepage will return false\r\n-\t\t$pattern = '\u002Flp-ajax-handle\u002F';\r\n-\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get link page by name\r\n-\t *\r\n-\t * @param string $page_name\r\n-\t * @param array $args\r\n-\t * @param bool $no_cache\r\n-\t *\r\n-\t * @return string\r\n-\t * @since  4.2.7.8\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_link_page( string $page_name, array $args = [], bool $no_cache = false ): string {\r\n-\t\t$page_link = learn_press_get_page_link( $page_name );\r\n-\r\n-\t\tif ( ! empty( $args ) ) {\r\n-\t\t\t$page_link = add_query_arg( $args, $page_link );\r\n-\t\t}\r\n-\r\n-\t\tif ( $no_cache ) {\r\n-\t\t\t$page_link = LP_Helper::get_link_no_cache( $page_link );\r\n-\t\t}\r\n-\r\n-\t\treturn $page_link;\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$_instance ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add user profile link into admin bar\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since  3.0.0\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic function learn_press_edit_admin_bar() {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\treturn;\r\n-\r\n-\t\tglobal $wp_admin_bar;\r\n-\r\n-\t\t$current_user = wp_get_current_user();\r\n-\r\n-\t\tif ( ! in_array( LP_TEACHER_ROLE, $current_user->roles ) && ! in_array( 'administrator', $current_user->roles ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$page_profile_id = learn_press_get_page_id( 'profile' );\r\n-\t\tif ( $page_profile_id && get_post_status( $page_profile_id ) != 'trash' ) {\r\n-\t\t\t$user_id = $current_user->ID;\r\n-\r\n-\t\t\t$wp_admin_bar->add_menu(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'     => 'course_profile',\r\n-\t\t\t\t\t'parent' => 'user-actions',\r\n-\t\t\t\t\t'title'  => get_the_title( $page_profile_id ),\r\n-\t\t\t\t\t'href'   => learn_press_user_profile_link( $user_id, false ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set again HTTP_X_WP_NONCE when cache make 403 error.\r\n-\t *\r\n-\t * @param $send_no_cache_headers\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 4.1.7\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_x_wp_nonce_cache( $send_no_cache_headers ) {\r\n-\t\tif ( ! $send_no_cache_headers && ! is_admin() && $_SERVER['REQUEST_METHOD'] == 'GET' && LP_Helper::isRestApiLP() ) {\r\n-\t\t\t$nonce                      = wp_create_nonce( 'wp_rest' );\r\n-\t\t\t$_SERVER['HTTP_X_WP_NONCE'] = $nonce;\r\n-\t\t}\r\n-\r\n-\t\treturn $send_no_cache_headers;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Override lesson comment permalink.\r\n-\t *\r\n-\t * @param string $link The comment permalink with '#comment-$id' appended.\r\n-\t * @param WP_Comment $comment The current comment object.\r\n-\t *\r\n-\t * @return string $link The comment permalink with '#comment-$id' appended.\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function edit_lesson_comment_links( $link, $comment ): string {\r\n-\t\ttry {\r\n-\t\t\t$comment = get_comment( $comment );\r\n-\t\t\tif ( get_post_type( $comment->comment_post_ID ) == LP_LESSON_CPT ) {\r\n-\t\t\t\t$link = wp_get_referer() . '#comment-' . $comment->comment_ID;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $link;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $link;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set menu active for page courses.\r\n-\t *\r\n-\t * @param $menu_items\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function menu_active( $menu_items ) {\r\n-\t\t$course_page    = learn_press_get_page_id( 'courses' );\r\n-\t\t$page_for_posts = (int) get_option( 'page_for_posts' );\r\n-\r\n-\t\tif ( is_array( $menu_items ) && ! empty( $menu_items ) ) {\r\n-\t\t\tforeach ( $menu_items as $key => $menu_item ) {\r\n-\t\t\t\t$classes = (array) $menu_item->classes;\r\n-\t\t\t\t$menu_id = (int) $menu_item->object_id;\r\n-\r\n-\t\t\t\t\u002F\u002F Unset active class for blog page.\r\n-\t\t\t\tif ( $page_for_posts === $menu_id ) {\r\n-\t\t\t\t\t$menu_item->current = false;\r\n-\r\n-\t\t\t\t\tif ( in_array( 'current_page_parent', $classes, true ) ) {\r\n-\t\t\t\t\t\tunset( $classes[ array_search( 'current_page_parent', $classes, true ) ] );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( in_array( 'current-menu-item', $classes, true ) ) {\r\n-\t\t\t\t\t\tunset( $classes[ array_search( 'current-menu-item', $classes, true ) ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( ( is_post_type_archive( 'lp_course' ) || is_page( $course_page ) ) && $course_page === $menu_id && 'page' === $menu_item->object ) {\r\n-\t\t\t\t\t\u002F\u002F Set active state if this is the shop page link.\r\n-\t\t\t\t\t$menu_item->current = true;\r\n-\t\t\t\t\t$classes[]          = 'current-menu-item';\r\n-\t\t\t\t\t$classes[]          = 'current_page_item';\r\n-\t\t\t\t} elseif ( is_singular( 'lp_course' ) && $course_page === $menu_id ) {\r\n-\t\t\t\t\t\u002F\u002F Set parent state if this is a product page.\r\n-\t\t\t\t\t$classes[] = 'current_page_parent';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$menu_item->classes = array_unique( $classes );\r\n-\t\t\t\t$menu_items[ $key ] = $menu_item;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $menu_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set Page viewing to 404\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function set_page_404() {\r\n-\t\tglobal $wp_query;\r\n-\t\t$wp_query->set_404();\r\n-\t\tstatus_header( 404 );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\CourseBuilder\\CourseBuilder;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Class LP_Page_Controller\n+ *\u002F\n+class LP_Page_Controller {\n+\tprotected static $_instance = null;\n+\n+\t\u002F**\n+\t * Store the object has queried by WP.\n+\t *\n+\t * @var int\n+\t *\u002F\n+\t\u002F\u002Fprotected $_queried_object = 0;\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\t\u002F\u002Fprotected $_filter_content_priority = 10000;\n+\n+\t\u002F**\n+\t * Flag for 404 content.\n+\t *\n+\t * @var bool\n+\t *\u002F\n+\tprotected $_is_404 = false;\n+\n+\t\u002F**\n+\t * LP_Page_Controller constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t\u002F\u002F Set link course, item course.\n+\t\tadd_filter( 'post_type_link', array( $this, 'post_type_link' ), 10, 2 );\n+\n+\t\tif ( LP_Page_Controller::is_page_lp_ajax() ) {\n+\t\t\tif ( ! isset( $_REQUEST['lp-load-ajax'] ) ) {\n+\t\t\t\twp_die( 'Invalid request!', 400 );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( is_admin() ) {\n+\t\t\tadd_action( 'admin_init', [ $this, 'redirect_admin_to_course_builder' ] );\n+\t\t} else {\n+\t\t\t\u002F\u002Fadd_filter( 'post_type_archive_link', [ $this, 'link_archive_course' ], 10, 2 );\n+\t\t\tadd_action( 'pre_get_posts', array( $this, 'pre_get_posts' ), - 1 );\n+\t\t\t\u002F\u002F For debug mysql query post of WP.\n+\t\t\t\u002F*add_filter(\n+\t\t\t\t'posts_request',\n+\t\t\t\tfunction ( $request, $q ) {\n+\t\t\t\t\tLP_Debug::var_dump( $request );\n+\t\t\t\t\treturn $request;\n+\t\t\t\t},\n+\t\t\t\t10,\n+\t\t\t\t2\n+\t\t\t);*\u002F\n+\t\t\t\u002F*add_filter(\n+\t\t\t\t'posts_clauses_request',\n+\t\t\t\tfunction ( $clauses, $wp_query ) {\n+\t\t\t\t\tif ( ! $wp_query->is_search() ) {\n+\t\t\t\t\t\treturn $clauses;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$lp_db             = LP_Database::getInstance();\n+\t\t\t\t\t$clauses['where'] .= sprintf( \" OR ( post_type = '%s' AND meta_key = '_lp_preview' AND meta_value = 'yes')\", LP_LESSON_CPT );\n+\t\t\t\t\t$clauses['join']  .= ' INNER JOIN ' . $lp_db->tb_postmeta . ' ON post_id = wp_posts.ID ';\n+\n+\t\t\t\t\treturn $clauses;\n+\t\t\t\t},\n+\t\t\t\t10,\n+\t\t\t\t2\n+\t\t\t);*\u002F\n+\t\t\t\u002F\u002F For return result query course to cache.\n+\t\t\t\u002F\u002Fadd_action( 'posts_pre_query', [ $this, 'posts_pre_query' ], 10, 2 );\n+\t\t\tadd_filter( 'template_include', array( $this, 'template_loader' ), 10 );\n+\t\t\tadd_filter( 'template_include', array( $this, 'logout' ), 30 );\n+\t\t\tadd_action( 'template_redirect', array( $this, 'template_redirect' ), -1 );\n+\n+\t\t\tadd_filter( 'the_post', array( $this, 'setup_data_for_item_course' ) );\n+\t\t\tadd_filter( 'request', array( $this, 'remove_course_post_format' ), 1 );\n+\n+\t\t\t\u002F\u002Fadd_shortcode( 'learn_press_archive_course', array( $this, 'archive_content' ) );\n+\t\t\tadd_filter( 'pre_get_document_title', array( $this, 'set_title_pages' ), 10, 1 );\n+\n+\t\t\t\u002F\u002F Yoast seo\n+\t\t\tadd_filter( 'wpseo_opengraph_desc', array( $this, 'lp_desc_item_yoast_seo' ), 11, 1 );\n+\t\t\tadd_filter( 'wpseo_metadesc', array( $this, 'lp_desc_item_yoast_seo' ), 11, 1 );\n+\n+\t\t\t\u002F\u002F Set link profile to admin menu\n+\t\t\t\u002F\u002Fadd_action( 'admin_bar_menu', array( $this, 'learn_press_edit_admin_bar' ) );\n+\n+\t\t\t\u002F\u002F Set again x-wp-nonce on header when has cache with not login.\n+\t\t\tadd_filter( 'rest_send_nocache_headers', array( $this, 'check_x_wp_nonce_cache' ) );\n+\n+\t\t\t\u002F\u002F Rewrite lesson comment links\n+\t\t\tadd_filter( 'get_comment_link', array( $this, 'edit_lesson_comment_links' ), 10, 2 );\n+\t\t\t\u002F\u002F Active menu\n+\t\t\tadd_filter( 'wp_nav_menu_objects', [ $this, 'menu_active' ], 10, 1 );\n+\t\t\t\u002F\u002F Canonical\n+\t\t\tadd_filter(\n+\t\t\t\t'get_canonical_url',\n+\t\t\t\tfunction ( $canonical_url ) {\n+\t\t\t\t\tif ( LP_Page_Controller::is_page_instructor() ) {\n+\t\t\t\t\t\t$canonical_url = LP_Helper::getUrlCurrent();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn $canonical_url;\n+\t\t\t\t}\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Disable create sitemap for items type of Course.\n+\t\tadd_filter(\n+\t\t\t'wp_sitemaps_post_types',\n+\t\t\tfunction ( $post_types ) {\n+\t\t\t\t$item_types   = CourseModel::item_types_support();\n+\t\t\t\t$item_types[] = LP_QUESTION_CPT;\n+\t\t\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t\t\tif ( isset( $post_types[ $item_type ] ) ) {\n+\t\t\t\t\t\tunset( $post_types[ $item_type ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn $post_types;\n+\t\t\t}\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Disable create sitemap for YoastSEO, Rank Math, but can affect to all logic, ex: it makes link edit of items course lose.\n+\t\t *\n+\t\t * @var WP_Post_Type $post_type\n+\t\t *\u002F\n+\t\t\u002F*add_filter(\n+\t\t\t'is_post_type_viewable',\n+\t\t\tfunction ( $is_viewable, $post_type ) {\n+\t\t\t\t$item_types   = CourseModel::item_types_support();\n+\t\t\t\t$item_types[] = LP_QUESTION_CPT;\n+\t\t\t\tif ( in_array( $post_type->name, $item_types ) ) {\n+\t\t\t\t\t$is_viewable = false;\n+\t\t\t\t}\n+\n+\t\t\t\treturn $is_viewable;\n+\t\t\t},\n+\t\t\t10,\n+\t\t\t2\n+\t\t);*\u002F\n+\t}\n+\n+\t\u002F**\n+\t * Set link archive course.\n+\t *\n+\t * @param string $link\n+\t * @param string $post_type\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function link_archive_course( string $link, string $post_type ): string {\n+\t\tif ( $post_type == LP_COURSE_CPT && learn_press_get_page_id( 'courses' ) ) {\n+\t\t\t$link = learn_press_get_page_link( 'courses' );\n+\t\t}\n+\n+\t\treturn $link;\n+\t}\n+\n+\t\u002F**\n+\t * Set link course, item course\n+\t *\n+\t * @param string $post_link\n+\t * @param object $post\n+\t *\u002F\n+\tpublic function post_type_link( $post_link, $post ) {\n+\t\t\u002F\u002F Set item's course permalink\n+\t\t$course_item_types = CourseModel::item_types_support();\n+\t\t$item_id           = $post->ID;\n+\n+\t\t\u002F\u002F Link item course on search page of WP.\n+\t\tif ( in_array( $post->post_type, $course_item_types ) && is_search() ) {\n+\t\t\t$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $item_id );\n+\t\t\tif ( ! $section_id ) {\n+\t\t\t\treturn $post_link;\n+\t\t\t}\n+\n+\t\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\treturn $post_link;\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn $post_link;\n+\t\t\t}\n+\n+\t\t\t$post_link = $course->get_item_link( $item_id );\n+\t\t} elseif ( LP_COURSE_CPT === $post->post_type ) {\n+\t\t\t\u002F\u002F Link single course (with %course_category%).\n+\t\t\t$post_link = LP_Helper::handle_lp_permalink_structure( $post_link, $post );\n+\t\t}\n+\n+\t\treturn $post_link;\n+\t}\n+\n+\t\u002F**\n+\t * Set title of pages\n+\t *\n+\t * 1. Title course archive page\n+\t * 2. Title item of course\n+\t * 3. Title page Profile\n+\t *\n+\t * @param string $title\n+\t *\n+\t * @return string\n+\t * @throws Exception\n+\t * @since  3.2.7.7\n+\t * @version 1.0.2\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function set_title_pages( $title = '' ): string {\n+\t\t$flag_title_course = false;\n+\t\t$user_id           = get_current_user_id();\n+\n+\t\t$course_archive_page_id = LP_Settings::get_option( 'courses_page_id', 0 );\n+\n+\t\t\u002F\u002F Set title single course.\n+\t\tif ( learn_press_is_course() ) {\n+\t\t\t$item = LP_Global::course_item();\n+\t\t\tif ( $item ) {\n+\t\t\t\t$title = apply_filters( 'learn-press\u002Fdocument-course-title-parts', get_the_title() . ' &rarr; ' . $item->get_title(), $item );\n+\n+\t\t\t\t$flag_title_course = true;\n+\t\t\t}\n+\t\t} elseif ( LP_Page_Controller::is_page_courses() ) { \u002F\u002F Set title course archive page.\n+\t\t\tif ( isset( $_GET['c_search'] ) ) {\n+\t\t\t\t$title = __( 'Course Search Results', 'learnpress' );\n+\t\t\t} elseif ( is_tax( LP_COURSE_CATEGORY_TAX ) || is_tax( LP_COURSE_TAXONOMY_TAG ) ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var WP_Query $wp_query\n+\t\t\t\t *\u002F\n+\t\t\t\tglobal $wp_query;\n+\t\t\t\tif ( $wp_query->queried_object ) {\n+\t\t\t\t\t$title = $wp_query->queried_object->name;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$title = $course_archive_page_id ? get_the_title( $course_archive_page_id ) : __( 'Courses', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$flag_title_course = true;\n+\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\n+\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\t\t\t$profile   = LP_Profile::instance( $user_id );\n+\t\t\t$page_id   = learn_press_get_page_id( 'profile' );\n+\t\t\t$tab       = false;\n+\t\t\tif ( $userModel ) {\n+\t\t\t\t$tab_slug = $profile->get_current_tab();\n+\t\t\t\t$tab      = $profile->get_tab_at( $tab_slug );\n+\t\t\t}\n+\n+\t\t\tif ( $page_id ) {\n+\t\t\t\t$page_title = get_the_title( $page_id );\n+\t\t\t} else {\n+\t\t\t\t$page_title = '';\n+\t\t\t}\n+\n+\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\n+\t\t\t\t$title = join(\n+\t\t\t\t\t' ',\n+\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t'learn-press\u002Fdocument-profile-title-parts',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t$page_title,\n+\t\t\t\t\t\t\t'&rarr;',\n+\t\t\t\t\t\t\t$tab->get( 'title' ),\n+\t\t\t\t\t\t)\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$title = $page_title;\n+\t\t\t}\n+\n+\t\t\t$flag_title_course = true;\n+\t\t}\n+\n+\t\tif ( $flag_title_course ) {\n+\t\t\t$title .= ' - ' . get_bloginfo( 'name', 'display' );\n+\t\t}\n+\n+\t\tif ( ! is_string( $title ) ) {\n+\t\t\t$title = get_bloginfo( 'name', 'display' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Ftitle-page', $title );\n+\t}\n+\n+\t\u002F**\n+\t * Set description of course's item for yoast seo\n+\t *\n+\t * @param $desc\n+\t *\n+\t * @return mixed\n+\t * @author tungnx\n+\t * @since 3.2.7.9\n+\t *\u002F\n+\tpublic function lp_desc_item_yoast_seo( $desc ) {\n+\t\tif ( learn_press_is_course() ) {\n+\n+\t\t\t$item = LP_Global::course_item();\n+\n+\t\t\tif ( empty( $item ) ) {\n+\t\t\t\treturn $desc;\n+\t\t\t}\n+\n+\t\t\t$desc = get_post_meta( $item->get_id(), '_yoast_wpseo_metadesc', true );\n+\t\t}\n+\n+\t\treturn $desc;\n+\t}\n+\n+\t\u002F**\n+\t * Handle logout\n+\t *\u002F\n+\tpublic function logout( $template ) {\n+\t\tglobal $wp_query;\n+\n+\t\t$logout_slug = learn_press_profile_logout_slug();\n+\n+\t\tif ( $logout_slug && ( $wp_query->get( 'view' ) === $logout_slug ) ) {\n+\t\t\twp_safe_redirect( str_replace( '&amp;', '&', wp_logout_url( learn_press_get_page_link( 'profile' ) ) ) );\n+\t\t\texit;\n+\t\t}\n+\n+\t\treturn $template;\n+\t}\n+\n+\t\u002F**\n+\t * Load data for item of course\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return mixed\n+\t * @editor tungnx\n+\t * Todo: should remove this function when load true type post's item\n+\t *\u002F\n+\tpublic function setup_data_for_item_course( $post ): WP_Post {\n+\t\t\u002F**\n+\t\t * @var WP $wp\n+\t\t * @var WP_Query $wp_query\n+\t\t * @var LP_Course $lp_course\n+\t\t * @var LP_Course_Item|LP_Quiz|LP_Lesson $lp_course_item\n+\t\t *\u002F\n+\t\tglobal $wp, $wp_query, $lp_course_item;\n+\t\t$vars = $wp->query_vars;\n+\t\tif ( empty( $vars['course-item'] ) ) {\n+\t\t\treturn $post;\n+\t\t}\n+\n+\t\tif ( LP_COURSE_CPT !== $post->post_type ) {\n+\t\t\treturn $post;\n+\t\t}\n+\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn $post;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Use for case not load course via send params, use global instead.\n+\t\t * Not recommended for use\n+\t\t * This method is only purpose instead get_the_ID(), on file item of course.\n+\t\t * When all file write by standard callback send param courseModel, this method will be removed.\n+\t\t *\n+\t\t * @return false|CourseModel\n+\t\t * @since 4.2.7.4\n+\t\t *\u002F\n+\t\tglobal $lpCourseModel;\n+\t\t$lpCourseModel = CourseModel::find( $course->get_id(), true );\n+\n+\t\t\u002F**\n+\t\t * @deprecated v4.1.6.1 LearnPress::instance()->global['course'], $GLOBALS['course']\n+\t\t * Some theme still use: global $course; LearnPress::instance()->global['course']\n+\t\t *\u002F\n+\t\t\u002F\u002FLearnPress::instance()->global['course'] = $GLOBALS['course'] = $GLOBALS['lp_course'] = $course;\n+\t\tLearnPress::instance()->global['course'] = $GLOBALS['course'] = $course;\n+\n+\t\tif ( wp_verify_nonce( LP_Request::get_param( 'preview' ), 'preview-' . $post->ID ) ) {\n+\t\t\t$GLOBALS['preview_course'] = $post->ID;\n+\t\t}\n+\n+\t\tif ( ! $wp_query->is_main_query() ) {\n+\t\t\treturn $post;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$user = learn_press_get_current_user();\n+\n+\t\t\t\u002F\u002F If item name is set in query vars\n+\t\t\t$item_type = $vars['item-type'];\n+\t\t\t$post_item = learn_press_get_post_by_name( $vars['course-item'], $item_type );\n+\n+\t\t\tif ( ! $post_item ) {\n+\t\t\t\treturn $post;\n+\t\t\t}\n+\n+\t\t\t$lp_course_item = apply_filters( 'learn-press\u002Fsingle-course-request-item', $course->get_item( $post_item->ID ) );\n+\n+\t\t\tif ( ! $lp_course_item ) {\n+\t\t\t\treturn $post;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set item viewing\n+\t\t\t$user->set_viewing_item( $lp_course_item );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $post;\n+\t}\n+\n+\tpublic function is_404() {\n+\t\treturn apply_filters( 'learn-press\u002Fquery\u002F404', $this->_is_404 );\n+\t}\n+\n+\t\u002F**\n+\t * In preview mode, if there is a 'post_format' in query var\n+\t * wp check and replace our post-type to post. This make preview\n+\t * course item become 404\n+\t *\n+\t * @param $qv\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function remove_course_post_format( $qv ) {\n+\t\tif ( ! empty( $qv['post_type'] ) && LP_COURSE_CPT === $qv['post_type'] ) {\n+\t\t\tif ( ! empty( $qv['post_format'] ) ) {\n+\t\t\t\tunset( $qv['post_format'] );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $qv;\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t * @deprecated v4.2.7.6\n+\t *\u002F\n+\tprotected function _is_archive() {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\treturn false;\n+\t\treturn learn_press_is_courses() || learn_press_is_course_tag() || learn_press_is_course_category() || learn_press_is_search() || learn_press_is_course_tax();\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t * @deprecated v4.2.7.6\n+\t *\u002F\n+\tprotected function _is_single() {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\treturn false;\n+\t\treturn learn_press_is_course() && is_single();\n+\t}\n+\n+\t\u002F**\n+\t * Load content of course depending on query.\n+\t *\n+\t * @param string $template\n+\t *\n+\t * @return bool|string\n+\t *\u002F\n+\tpublic function template_loader( $template ) {\n+\t\tif ( wp_is_block_theme() ) {\n+\t\t\treturn $template;\n+\t\t}\n+\n+\t\tif ( is_embed() ) {\n+\t\t\treturn $template;\n+\t\t}\n+\n+\t\t\u002F\u002F $this->_maybe_redirect_courses_page();\n+\n+\t\t$default_template = $this->get_page_template();\n+\n+\t\tif ( $default_template ) {\n+\t\t\t$templates = $this->get_page_templates( $default_template );\n+\n+\t\t\t\u002F**\n+\t\t\t * Disable override templates in theme by default since LP 4.0.0\n+\t\t\t *\u002F\n+\t\t\tif ( learn_press_override_templates() ) {\n+\t\t\t\t$new_template = locate_template( $templates );\n+\t\t\t}\n+\n+\t\t\tif ( ! isset( $new_template ) || ! $new_template ) {\n+\t\t\t\t$new_template = LP_TEMPLATE_PATH . $default_template;\n+\t\t\t}\n+\n+\t\t\t$template = $new_template;\n+\t\t}\n+\n+\t\treturn $template;\n+\t}\n+\n+\t\u002F**\n+\t * Check if current page is Course Builder\n+\t *\u002F\n+\tpublic function template_redirect() {\n+\t\tif ( LP_Page_Controller::is_page_course_builder() ) {\n+\t\t\tinclude LP_TEMPLATE_PATH . 'pages\u002Fcourse-builder.php';\n+\t\t\tdie;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get the default filename for a template.\n+\t *\n+\t * @return string\n+\t * @since  4.0.0\n+\t *\u002F\n+\tprivate function get_page_template() {\n+\t\t$page_template = '';\n+\t\t$object        = get_queried_object();\n+\n+\t\tif ( self::is_page_single_course() ) {\n+\t\t\t$page_template = 'single-course-layout.php';\n+\t\t\t\u002F\u002F Check condition to load single course layout classic or modern.\n+\t\t\t$is_override_single_course   = Template::check_template_is_override( 'single-course.php' )\n+\t\t\t|| Template::check_template_is_override( 'content-course.php' )\n+\t\t\t|| Template::check_template_is_override( 'content-single-course.php' )\n+\t\t\t|| Template::check_template_is_override( 'loop\u002Fsingle-course\u002Floop-section.php' )\n+\t\t\t|| Template::check_template_is_override( 'single-course\u002Floop-section.php' )\n+\t\t\t|| Template::check_template_is_override( 'single-course\u002Ftabs\u002Fcurriculum.php' )\n+\t\t\t|| Template::check_template_is_override( 'single-course\u002Ftabs\u002Fcurriculum-v2.php' );\n+\t\t\t$option_single_course_layout = LP_Settings::get_option( 'layout_single_course', '' );\n+\n+\t\t\tif ( $is_override_single_course ) { \u002F\u002F Old file template\n+\t\t\t\t$page_template = 'single-course.php';\n+\t\t\t} elseif ( empty( $option_single_course_layout )\n+\t\t\t\t|| $option_single_course_layout === 'classic' ) {\n+\t\t\t\t$page_template = 'single-course-layout-classic.php';\n+\t\t\t\t\u002F\u002F Set temporary old single course layout.\n+\t\t\t\t$page_template = 'single-course.php';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Old single course layout.\n+\t\t\t\u002F\u002F$page_template = 'single-course.php';\n+\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\n+\t\t\t$course_item = LP_Global::course_item();\n+\t\t\tif ( $course_item ) {\n+\t\t\t\t$page_template = 'content-single-item.php';\n+\t\t\t} elseif ( $object ) {\n+\t\t\t\t$course = CourseModel::find( $object->ID, true );\n+\t\t\t\tif ( $course && $course->is_offline() ) {\n+\t\t\t\t\t$page_template = 'single-course-offline.php';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} elseif ( learn_press_is_course_taxonomy() ) {\n+\t\t\tif ( is_tax( 'course_category' ) || is_tax( 'course_tag' ) ) {\n+\t\t\t\t$page_template = 'taxonomy-' . $object->taxonomy . '.php';\n+\n+\t\t\t\tif ( ! file_exists( learn_press_locate_template( $page_template ) ) ) {\n+\t\t\t\t\t$page_template = 'archive-course.php';\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$page_template = 'archive-course.php';\n+\t\t\t}\n+\t\t} elseif ( self::is_page_courses() ) {\n+\t\t\t$page_template = 'archive-course.php';\n+\t\t} elseif ( learn_press_is_checkout() ) {\n+\t\t\t$page_template = 'pages\u002Fcheckout.php';\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fpage-template', $page_template );\n+\t}\n+\n+\tprivate function get_page_templates( $default_template ) {\n+\t\t$templates = apply_filters( 'learn-press\u002Fpage-templates', array(), $default_template );\n+\n+\t\tif ( is_page_template() ) {\n+\t\t\t$page_template = get_page_template_slug();\n+\n+\t\t\tif ( $page_template ) {\n+\t\t\t\t$validated_file = validate_file( $page_template );\n+\t\t\t\tif ( 0 === $validated_file ) {\n+\t\t\t\t\t$templates[] = $page_template;\n+\t\t\t\t} else {\n+\t\t\t\t\terror_log( \"LearnPress: Unable to validate template path: \\\"$page_template\\\". Error Code: $validated_file.\" );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F*if ( is_singular( LP_COURSE_CPT ) ) {\n+\t\t\t$object       = get_queried_object();\n+\t\t\t$name_decoded = urldecode( $object->post_name );\n+\n+\t\t\tif ( $name_decoded !== $object->post_name ) {\n+\t\t\t\t$templates[] = \"single-course-$name_decoded.php\";\n+\t\t\t}\n+\n+\t\t\t$templates[] = \"single-product-$object->post_name.php\";\n+\t\t}*\u002F\n+\n+\t\tif ( learn_press_is_course_taxonomy() ) {\n+\t\t\t$object      = get_queried_object();\n+\t\t\t$templates[] = 'taxonomy-' . $object->taxonomy . '-' . $object->slug . '.php';\n+\t\t\t$templates[] = learn_press_template_path() . '\u002Ftaxonomy-' . $object->taxonomy . '-' . $object->slug . '.php';\n+\t\t\t$templates[] = 'taxonomy-' . $object->taxonomy . '.php';\n+\t\t\t$templates[] = learn_press_template_path() . '\u002Ftaxonomy-' . $object->taxonomy . '.php';\n+\t\t}\n+\n+\t\t$templates[] = $default_template;\n+\t\t$templates[] = learn_press_template_path() . '\u002F' . $default_template;\n+\n+\t\treturn array_unique( $templates );\n+\t}\n+\n+\t\u002F**\n+\t * @param $title\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function page_title( $title ) {\n+\t\tglobal $wp_query;\n+\t\tif ( ! empty( $wp_query->queried_object_id ) ) {\n+\t\t\t$title['title'] = get_the_title( $wp_query->queried_object_id );\n+\t\t}\n+\n+\t\treturn $title;\n+\t}\n+\n+\t\u002F**\n+\t * Query courses if page is archive courses\n+\t *\n+\t * @param $q WP_Query\n+\t *\n+\t * @return WP_Query\n+\t * @editor tungnx\n+\t * @throws Exception\n+\t * @version 4.1.3\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function pre_get_posts( WP_Query $q ): WP_Query {\n+\t\t\u002F\u002F Affect only the main query and not in admin\n+\t\tif ( ! $q->is_main_query() && ! is_admin() ) {\n+\t\t\treturn $q;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\tif ( LP_Page_Controller::is_page_courses() ) {\n+\t\t\t\tif ( LP_Settings_Courses::is_ajax_load_courses() && ! LP_Settings_Courses::is_no_load_ajax_first_courses()\n+\t\t\t\t\t&& ! LP_Settings::theme_no_support_load_courses_ajax() ) {\n+\t\t\t\t\t\u002F**\n+\t\t\t\t\t * If page is archive course - query set posts_per_page = 1\n+\t\t\t\t\t * For fastest - because when page loaded - call API to load list courses\n+\t\t\t\t\t *\n+\t\t\t\t\t * Current, apply only for LP, not apply for theme Thimpress, because theme override\n+\t\t\t\t\t *\u002F\n+\t\t\t\t\t$q->set( 'posts_per_page', 1 );\n+\t\t\t\t\t$q->set( 'suppress_filters', true );\n+\t\t\t\t\t\u002F\u002F$q->set( 'posts_per_archive_page', 1 );\n+\t\t\t\t\t\u002F\u002F$q->set( 'nopaging', true );\n+\t\t\t\t} else {\n+\t\t\t\t\t$filter               = new LP_Course_Filter();\n+\t\t\t\t\t$filter->only_fields  = [ 'ID' ];\n+\t\t\t\t\t$filter->limit        = - 1;\n+\t\t\t\t\t$is_need_check_in_arr = false;\n+\t\t\t\t\t$limit                = LP_Settings::get_option( 'archive_course_limit', 6 );\n+\n+\t\t\t\t\tif ( LP_Settings_Courses::is_ajax_load_courses() &&\n+\t\t\t\t\t\tLP_Settings_Courses::get_type_pagination() != 'number' &&\n+\t\t\t\t\t\t! LP_Settings::theme_no_support_load_courses_ajax() ) {\n+\t\t\t\t\t\t$q->set( 'paged', 1 );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$q->set( 'posts_per_page', $limit );\n+\t\t\t\t\t\u002F\u002F $q->set( 'cache_results', true ); \u002F\u002F it default true\n+\n+\t\t\t\t\t\u002F\u002F Search courses by keyword\n+\t\t\t\t\tif ( ! empty( $_REQUEST['c_search'] ) ) {\n+\t\t\t\t\t\t$filter->post_title   = LP_Helper::sanitize_params_submitted( $_REQUEST['c_search'] );\n+\t\t\t\t\t\t$is_need_check_in_arr = true;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $_REQUEST['c_authors'] ?? 0 );\n+\t\t\t\t\tif ( ! empty( $author_ids_str ) ) {\n+\t\t\t\t\t\t$q->set( 'author', $author_ids_str );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Search course has price\u002Ffree\n+\t\t\t\t\t$meta_query = [];\n+\t\t\t\t\tif ( isset( $_REQUEST['sort_by'] ) ) {\n+\t\t\t\t\t\t$sort_by = LP_Helper::sanitize_params_submitted( $_REQUEST['sort_by'] );\n+\t\t\t\t\t\tif ( 'on_paid' === $sort_by ) {\n+\t\t\t\t\t\t\t$meta_query[] = array(\n+\t\t\t\t\t\t\t\t'key'     => '_lp_price',\n+\t\t\t\t\t\t\t\t'value'   => 0,\n+\t\t\t\t\t\t\t\t'compare' => '>',\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( 'on_free' === $sort_by ) {\n+\t\t\t\t\t\t\t$meta_query[] = array(\n+\t\t\t\t\t\t\t\t'relation' => 'OR',\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\n+\t\t\t\t\t\t\t\t\t'value'   => 0,\n+\t\t\t\t\t\t\t\t\t'compare' => '=',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\n+\t\t\t\t\t\t\t\t\t'value'   => '',\n+\t\t\t\t\t\t\t\t\t'compare' => '=',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t'key'     => '_lp_price',\n+\t\t\t\t\t\t\t\t\t'compare' => 'NOT EXISTS',\n+\t\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Search by level\n+\t\t\t\t\t$c_level = LP_Helper::sanitize_params_submitted( urldecode( $_REQUEST['c_level'] ?? '' ) );\n+\t\t\t\t\tif ( ! empty( $c_level ) ) {\n+\t\t\t\t\t\t$c_level      = str_replace( 'all', '', $c_level );\n+\t\t\t\t\t\t$c_level      = explode( ',', $c_level );\n+\t\t\t\t\t\t$meta_query[] = array(\n+\t\t\t\t\t\t\t'key'     => '_lp_level',\n+\t\t\t\t\t\t\t'value'   => $c_level,\n+\t\t\t\t\t\t\t'compare' => 'IN',\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$q->set( 'meta_query', $meta_query );\n+\t\t\t\t\t\u002F\u002F End Meta query\n+\n+\t\t\t\t\t\u002F\u002F Search on Category\n+\t\t\t\t\t$args_cat     = lp_archive_skeleton_get_args();\n+\t\t\t\t\t$tax_query    = [];\n+\t\t\t\t\t$term_ids_str = LP_Helper::sanitize_params_submitted(\n+\t\t\t\t\t\turldecode( $_REQUEST['term_id'] ?? $args_cat['page_term_id_current'] ?? '' )\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( ! empty( $term_ids_str ) ) {\n+\t\t\t\t\t\t$term_ids = explode( ',', $term_ids_str );\n+\n+\t\t\t\t\t\t$tax_query[] = array(\n+\t\t\t\t\t\t\t'taxonomy'         => 'course_category',\n+\t\t\t\t\t\t\t'field'            => 'term_id',\n+\t\t\t\t\t\t\t'terms'            => $term_ids,\n+\t\t\t\t\t\t\t'operator'         => 'IN',\n+\t\t\t\t\t\t\t'include_children' => false,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Tag query\n+\t\t\t\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $_REQUEST['tag_id'] ?? '' ) );\n+\t\t\t\t\tif ( ! empty( $tag_ids_str ) ) {\n+\t\t\t\t\t\t$term_ids = explode( ',', $tag_ids_str );\n+\n+\t\t\t\t\t\t$tax_query[] = array(\n+\t\t\t\t\t\t\t'taxonomy' => 'course_tag',\n+\t\t\t\t\t\t\t'field'    => 'term_id',\n+\t\t\t\t\t\t\t'terms'    => $term_ids,\n+\t\t\t\t\t\t\t'operator' => 'IN',\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$q->set( 'tax_query', $tax_query );\n+\t\t\t\t\t\u002F\u002F End Tax query\n+\n+\t\t\t\t\t\u002F\u002F Author query\n+\t\t\t\t\tif ( isset( $_REQUEST['c_author'] ) ) {\n+\t\t\t\t\t\t$author_ids = LP_Helper::sanitize_params_submitted( $_REQUEST['c_author'] );\n+\t\t\t\t\t\t$q->set( 'author__in', $author_ids );\n+\t\t\t\t\t}\n+\t\t\t\t\t\u002F\u002F End Author query\n+\n+\t\t\t\t\t\u002F\u002F Order query\n+\t\t\t\t\tif ( isset( $_REQUEST['order_by'] ) ) {\n+\t\t\t\t\t\t$order_by = LP_Helper::sanitize_params_submitted( $_REQUEST['order_by'] );\n+\t\t\t\t\t\t$order    = 'DESC';\n+\n+\t\t\t\t\t\tswitch ( $order_by ) {\n+\t\t\t\t\t\t\tcase 'post_title':\n+\t\t\t\t\t\t\t\t$order_by = 'title';\n+\t\t\t\t\t\t\t\t$order    = 'ASC';\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tcase 'popular':\n+\t\t\t\t\t\t\t\t$filter->order_by     = 'popular';\n+\t\t\t\t\t\t\t\t$order_by             = 'post__in';\n+\t\t\t\t\t\t\t\t$is_need_check_in_arr = true;\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t\t$order_by = 'date';\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$q->set( 'orderby', $order_by );\n+\t\t\t\t\t\t$q->set( 'order', $order );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $is_need_check_in_arr ) {\n+\t\t\t\t\t\t$posts_in = Courses::get_courses( $filter );\n+\t\t\t\t\t\tif ( ! empty( $posts_in ) ) {\n+\t\t\t\t\t\t\t$posts_in = LP_Database::get_values_by_key( $posts_in );\n+\t\t\t\t\t\t\t$q->set( 'post__in', $posts_in );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$q->set( 'post__in', 0 );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$q = apply_filters( 'lp\u002Fpage-courses\u002Fquery\u002Flegacy', $q );\n+\t\t\t\t}\n+\n+\t\t\t\treturn $q;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Exclude item not assign\n+\t\t\tif ( $q->is_search() ) {\n+\t\t\t\treturn $q;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Handle 404 if user are viewing course item directly.\n+\t\t\t$this->set_link_item_course_default_wp_to_page_404( $q );\n+\n+\t\t\t\u002F\u002F set 404 if viewing single instructor but not logged\n+\t\t\t$slug_instructor = get_query_var( 'instructor_name' );\n+\t\t\tif ( get_query_var( 'is_single_instructor' ) ) {\n+\t\t\t\tif ( empty( $slug_instructor ) && ! is_user_logged_in() ) {\n+\t\t\t\t\tself::set_page_404();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $q;\n+\t}\n+\n+\t\u002F**\n+\t * Handle 404 if user are viewing course item directly.\n+\t * Example: http:\u002F\u002Fexample.com\u002Flesson\u002Fslug-lesson\n+\t * Apply for user not admin, instructor, co-instructor\n+\t *\n+\t * @param WP_Query $q\n+\t *\n+\t * @editor tungnx\n+\t * @since  3.2.7.5\n+\t *\u002F\n+\tpublic function set_link_item_course_default_wp_to_page_404( $q ) {\n+\t\t$post_type_apply_404 = apply_filters(\n+\t\t\t'lp\u002Fpage-controller\u002F',\n+\t\t\tarray(\n+\t\t\t\tLP_LESSON_CPT,\n+\t\t\t\tLP_QUIZ_CPT,\n+\t\t\t\tLP_QUESTION_CPT,\n+\t\t\t\t'lp_assignment',\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( ! isset( $q->query_vars['post_type'] ) || ! in_array( $q->query_vars['post_type'], $post_type_apply_404 ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$flag_load_404 = true;\n+\t\t\t$user          = wp_get_current_user();\n+\t\t\t$post_author   = 0;\n+\n+\t\t\tif ( $user ) {\n+\t\t\t\tif ( isset( $_GET['preview_id'] ) ) {\n+\t\t\t\t\t$post_id     = absint( $_GET['preview_id'] );\n+\t\t\t\t\t$post        = get_post( $post_id );\n+\t\t\t\t\t$post_author = $post->post_author;\n+\t\t\t\t} elseif ( isset( $_GET['preview'] ) && isset( $_GET['p'] ) ) {\n+\t\t\t\t\t$post_id     = absint( $_GET['p'] );\n+\t\t\t\t\t$post        = get_post( $post_id );\n+\t\t\t\t\t$post_author = $post->post_author;\n+\t\t\t\t} else {\n+\t\t\t\t\t$post_author = LP_Database::getInstance()->getPostAuthorByTypeAndSlug( $q->query_vars['post_type'] ?? '', $q->query_vars['name'] ?? '' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $user->has_cap( 'administrator' ) ) {\n+\t\t\t\t\t$flag_load_404 = false;\n+\t\t\t\t} elseif ( $user->has_cap( LP_TEACHER_ROLE ) && $post_author == $user->ID ) {\n+\t\t\t\t\t$flag_load_404 = false;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$flag_load_404 = apply_filters( 'learnpress\u002Fpage\u002Fset-link-item-course-404', $flag_load_404, $post_author, $user );\n+\n+\t\t\tif ( $flag_load_404 ) {\n+\t\t\t\tself::set_page_404();\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get page current on frontend\n+\t *\n+\t * @return string\n+\t * @since 3.2.8\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic static function page_current(): string {\n+\t\t\u002F**\n+\t\t * @var WP_Query $wp_query\n+\t\t *\u002F\n+\t\tglobal $wp_query;\n+\n+\t\t\u002F\u002F Course Builder page detection\n+\t\tif ( self::is_page_course_builder() ) {\n+\t\t\treturn LP_PAGE_COURSE_BUILDER;\n+\t\t}\n+\n+\t\tif ( ! is_object( $wp_query ) || ! $wp_query->get_queried_object() ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( self::is_page_checkout() ) {\n+\t\t\treturn LP_PAGE_CHECKOUT;\n+\t\t} elseif ( LP_Global::course_item_quiz() ) {\n+\t\t\treturn LP_PAGE_QUIZ;\n+\t\t} elseif ( learn_press_is_course() && LP_Global::course_item() ) {\n+\t\t\treturn LP_PAGE_SINGLE_COURSE_CURRICULUM;\n+\t\t} elseif ( self::is_page_courses() ) {\n+\t\t\treturn LP_PAGE_COURSES;\n+\t\t} elseif ( learn_press_is_course() ) {\n+\t\t\treturn LP_PAGE_SINGLE_COURSE;\n+\t\t} elseif ( self::is_page_become_a_teacher() ) {\n+\t\t\treturn LP_PAGE_BECOME_A_TEACHER;\n+\t\t} elseif ( self::is_page_profile() ) {\n+\t\t\treturn LP_PAGE_PROFILE;\n+\t\t} elseif ( learn_press_is_instructors() ) {\n+\t\t\treturn LP_PAGE_INSTRUCTORS;\n+\t\t} elseif ( self::is_page_instructor() ) {\n+\t\t\treturn LP_PAGE_INSTRUCTOR;\n+\t\t} else {\n+\t\t\treturn apply_filters( 'learnpress\u002Fpage\u002Fcurrent', '' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check is page viewing\n+\t *\n+\t * @param string $name\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function page_is( string $name = '' ): bool {\n+\t\t$page_id = learn_press_get_page_id( $name );\n+\t\tif ( ! $page_id || 'page' !== get_post_type( $page_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F If pages of LP set to homepage will return false\n+\t\t$link_page = urldecode( get_the_permalink( $page_id ) );\n+\t\t$home_url  = home_url( '\u002F' );\n+\t\tif ( $home_url === $link_page ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$page_profile_option = untrailingslashit( $link_page );\n+\t\t$page_profile_option = str_replace( '\u002F', '\\\u002F', $page_profile_option );\n+\t\t$pattern             = \"\u002F^$page_profile_option\u002F\";\n+\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page is single course\n+\t *\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_single_course(): bool {\n+\t\tstatic $flag;\n+\t\tif ( ! is_null( $flag ) ) {\n+\t\t\treturn $flag;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$flag = is_singular( LP_COURSE_CPT );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$flag = false;\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page courses\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_courses(): bool {\n+\t\tstatic $flag;\n+\t\tif ( ! is_null( $flag ) ) {\n+\t\t\treturn $flag;\n+\t\t}\n+\n+\t\t$is_tag      = is_tax( LP_COURSE_TAXONOMY_TAG );\n+\t\t$is_category = is_tax( LP_COURSE_CATEGORY_TAX );\n+\n+\t\tif ( $is_category || $is_tag || is_post_type_archive( 'lp_course' ) ) {\n+\t\t\t$flag = true;\n+\t\t} else {\n+\t\t\t$page_courses_id  = learn_press_get_page_id( 'courses' );\n+\t\t\t$page_courses_url = untrailingslashit( get_the_permalink( $page_courses_id ) );\n+\t\t\tif ( empty( $page_courses_url ) ) {\n+\t\t\t\t$page_courses_url = home_url( 'courses' );\n+\t\t\t}\n+\n+\t\t\t$page_courses_regex = str_replace( '\u002F', '\\\u002F', $page_courses_url );\n+\t\t\t$pattern            = '\u002F' . $page_courses_regex . '\\\u002F?(page\\\u002F[0-9]*)?$\u002F';\n+\t\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\n+\t\t\t\t$flag = true;\n+\t\t\t} else {\n+\t\t\t\t$flag = false;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page profile\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_profile(): bool {\n+\t\tstatic $flag;\n+\t\tif ( ! is_null( $flag ) ) {\n+\t\t\treturn $flag;\n+\t\t}\n+\n+\t\t$flag = self::page_is( 'profile' );\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page instructor\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_instructors(): bool {\n+\t\tstatic $flag;\n+\t\tif ( ! is_null( $flag ) ) {\n+\t\t\treturn $flag;\n+\t\t}\n+\n+\t\t$flag = self::page_is( 'instructors' );\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page instructor\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_instructor(): bool {\n+\t\tglobal $wp_query;\n+\t\tstatic $flag;\n+\t\tif ( ! is_null( $flag ) ) {\n+\t\t\treturn $flag;\n+\t\t}\n+\n+\t\t$flag = false;\n+\t\tif ( $wp_query->get( 'is_single_instructor' ) ) {\n+\t\t\t$flag = true;\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page profile\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_page_checkout(): bool {\n+\t\treturn self::page_is( 'checkout' );\n+\t}\n+\n+\t\u002F**\n+\t * Check is page Become a teacher\n+\t *\n+\t * @return bool\n+\t * @since 3.2.8\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic static function is_page_become_a_teacher(): bool {\n+\t\treturn self::page_is( 'become_a_teacher' );\n+\t}\n+\n+\t\u002F**\n+\t * Check page is LP Ajax\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.7\n+\t *\u002F\n+\tpublic static function is_page_lp_ajax(): bool {\n+\t\t\u002F\u002F If pages of LP set to homepage will return false\n+\t\t$pattern = '\u002Flp-ajax-handle\u002F';\n+\t\tif ( preg_match( $pattern, LP_Helper::getUrlCurrent() ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Redirect admin to course builder if hide instructor access admin screen\n+\t *\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function redirect_admin_to_course_builder() {\n+\t\t\u002F\u002F Skip AJAX requests\n+\t\tif ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Check hide instructor access admin screen\n+\t\t$hide_instructor_access_admin_screen = LP_Settings::is_hide_instructor_access_admin_screen();\n+\t\tif ( $hide_instructor_access_admin_screen\n+\t\t\t&& current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t$cb_url = CourseBuilder::get_link_course_builder();\n+\n+\t\t\t\u002F\u002F Avoid infinite redirect\n+\t\t\tif ( strpos( LP_Helper::getUrlCurrent(), $cb_url ) !== false ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\twp_redirect( $cb_url );\n+\t\t\texit;\n+\t\t}\n+\t}\n+\n+\tpublic static function is_page_course_builder(): bool {\n+\t\t\u002F** @var WP_Query $wp_query *\u002F\n+\t\tglobal $wp_query;\n+\t\treturn $wp_query->get( 'is_course_builder' );\n+\t}\n+\n+\t\u002F**\n+\t * Get link page by name\n+\t *\n+\t * @param string $page_name\n+\t * @param array $args\n+\t * @param bool $no_cache\n+\t *\n+\t * @return string\n+\t * @since  4.2.7.8\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_link_page( string $page_name, array $args = [], bool $no_cache = false ): string {\n+\t\t$page_link = learn_press_get_page_link( $page_name );\n+\n+\t\tif ( ! empty( $args ) ) {\n+\t\t\t$page_link = add_query_arg( $args, $page_link );\n+\t\t}\n+\n+\t\tif ( $no_cache ) {\n+\t\t\t$page_link = LP_Helper::get_link_no_cache( $page_link );\n+\t\t}\n+\n+\t\treturn $page_link;\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( ! self::$_instance ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Add user profile link into admin bar\n+\t *\n+\t * @editor tungnx\n+\t * @version 1.0.1\n+\t * @since  3.0.0\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic function learn_press_edit_admin_bar() {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\treturn;\n+\n+\t\tglobal $wp_admin_bar;\n+\n+\t\t$current_user = wp_get_current_user();\n+\n+\t\tif ( ! in_array( LP_TEACHER_ROLE, $current_user->roles ) && ! in_array( 'administrator', $current_user->roles ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$page_profile_id = learn_press_get_page_id( 'profile' );\n+\t\tif ( $page_profile_id && get_post_status( $page_profile_id ) != 'trash' ) {\n+\t\t\t$user_id = $current_user->ID;\n+\t\t\t$profile = LP_Profile::instance( $user_id );\n+\n+\t\t\t$wp_admin_bar->add_menu(\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'     => 'course_profile',\n+\t\t\t\t\t'parent' => 'user-actions',\n+\t\t\t\t\t'title'  => get_the_title( $page_profile_id ),\n+\t\t\t\t\t'href'   => $profile->get_tab_link(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set again HTTP_X_WP_NONCE when cache make 403 error.\n+\t *\n+\t * @param $send_no_cache_headers\n+\t *\n+\t * @return mixed\n+\t * @since 4.1.7\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_x_wp_nonce_cache( $send_no_cache_headers ) {\n+\t\tif ( ! $send_no_cache_headers && ! is_admin() && $_SERVER['REQUEST_METHOD'] == 'GET' && LP_Helper::isRestApiLP() ) {\n+\t\t\t$nonce                      = wp_create_nonce( 'wp_rest' );\n+\t\t\t$_SERVER['HTTP_X_WP_NONCE'] = $nonce;\n+\t\t}\n+\n+\t\treturn $send_no_cache_headers;\n+\t}\n+\n+\t\u002F**\n+\t * Override lesson comment permalink.\n+\t *\n+\t * @param string $link The comment permalink with '#comment-$id' appended.\n+\t * @param WP_Comment $comment The current comment object.\n+\t *\n+\t * @return string $link The comment permalink with '#comment-$id' appended.\n+\t * @since 4.2.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function edit_lesson_comment_links( $link, $comment ): string {\n+\t\ttry {\n+\t\t\t$comment = get_comment( $comment );\n+\t\t\tif ( get_post_type( $comment->comment_post_ID ) == LP_LESSON_CPT ) {\n+\t\t\t\t$link = wp_get_referer() . '#comment-' . $comment->comment_ID;\n+\t\t\t}\n+\n+\t\t\treturn $link;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $link;\n+\t}\n+\n+\t\u002F**\n+\t * Set menu active for page courses.\n+\t *\n+\t * @param $menu_items\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function menu_active( $menu_items ) {\n+\t\t$course_page    = learn_press_get_page_id( 'courses' );\n+\t\t$page_for_posts = (int) get_option( 'page_for_posts' );\n+\n+\t\tif ( is_array( $menu_items ) && ! empty( $menu_items ) ) {\n+\t\t\tforeach ( $menu_items as $key => $menu_item ) {\n+\t\t\t\t$classes = (array) $menu_item->classes;\n+\t\t\t\t$menu_id = (int) $menu_item->object_id;\n+\n+\t\t\t\t\u002F\u002F Unset active class for blog page.\n+\t\t\t\tif ( $page_for_posts === $menu_id ) {\n+\t\t\t\t\t$menu_item->current = false;\n+\n+\t\t\t\t\tif ( in_array( 'current_page_parent', $classes, true ) ) {\n+\t\t\t\t\t\tunset( $classes[ array_search( 'current_page_parent', $classes, true ) ] );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( in_array( 'current-menu-item', $classes, true ) ) {\n+\t\t\t\t\t\tunset( $classes[ array_search( 'current-menu-item', $classes, true ) ] );\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( ( is_post_type_archive( 'lp_course' ) || is_page( $course_page ) ) && $course_page === $menu_id && 'page' === $menu_item->object ) {\n+\t\t\t\t\t\u002F\u002F Set active state if this is the shop page link.\n+\t\t\t\t\t$menu_item->current = true;\n+\t\t\t\t\t$classes[]          = 'current-menu-item';\n+\t\t\t\t\t$classes[]          = 'current_page_item';\n+\t\t\t\t} elseif ( is_singular( 'lp_course' ) && $course_page === $menu_id ) {\n+\t\t\t\t\t\u002F\u002F Set parent state if this is a product page.\n+\t\t\t\t\t$classes[] = 'current_page_parent';\n+\t\t\t\t}\n+\n+\t\t\t\t$menu_item->classes = array_unique( $classes );\n+\t\t\t\t$menu_items[ $key ] = $menu_item;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $menu_items;\n+\t}\n+\n+\t\u002F**\n+\t * Set Page viewing to 404\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function set_page_404() {\n+\t\tglobal $wp_query;\n+\t\t$wp_query->set_404();\n+\t\tstatus_header( 404 );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-query-list-table.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-query-list-table.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-query-list-table.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-query-list-table.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,205 +1,205 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Query_List_Table\r\n- *\r\n- * @since 3.0.0\r\n- * @version 3.0.1\r\n- * Addons: Assignments, H5P is using.\r\n- * Update all before not implements ArrayAccess\r\n- *\u002F\r\n-class LP_Query_List_Table {\r\n-\t\u002F**\r\n-\t * @var array|null\r\n-\t *\u002F\r\n-\tprotected $_data = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Query_List_Table constructor.\r\n-\t *\r\n-\t * @param $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data ) {\r\n-\t\t$this->_data = wp_parse_args(\r\n-\t\t\t$data,\r\n-\t\t\tarray(\r\n-\t\t\t\t'pages'      => 0,\r\n-\t\t\t\t'total'      => 0,\r\n-\t\t\t\t'items'      => null,\r\n-\t\t\t\t'paged'      => 1,\r\n-\t\t\t\t'limit'      => 10,\r\n-\t\t\t\t'nav_format' => '%#%\u002F',\r\n-\t\t\t\t'nav_base'   => '',\r\n-\t\t\t\t'single'     => __( 'item', 'learnpress' ),\r\n-\t\t\t\t'plural'     => __( 'items', 'learnpress' ),\r\n-\t\t\t\t'format'     => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tglobal $wp;\r\n-\t\tif ( ! empty( $wp->query_vars['view_id'] ) && empty( $data['paged'] ) ) {\r\n-\t\t\t$this->_data['paged'] = absint( $wp->query_vars['view_id'] );\r\n-\t\t}\r\n-\r\n-\t\t$this->_init();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tprotected function _init() {\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_pages() {\r\n-\t\tif ( empty( $this->_data['pages'] ) && $this->_data['total'] ) {\r\n-\t\t\t$this->_data['pages'] = ceil( $this->_data['total'] \u002F $this->_data['limit'] );\r\n-\t\t}\r\n-\r\n-\t\treturn absint( $this->_data['pages'] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_total() {\r\n-\t\treturn absint( $this->_data['total'] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_items() {\r\n-\t\treturn $this->_data['items'];\r\n-\t}\r\n-\r\n-\tpublic function get( string $key = '' ) {\r\n-\t\treturn empty( $key ) ? $this->_data : $this->_data[ $key ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_paged() {\r\n-\t\treturn max( 1, absint( $this->_data['paged'] ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_limit() {\r\n-\t\treturn absint( $this->_data['limit'] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination\r\n-\t *\r\n-\t * @param bool $echo\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_nav_numbers( $echo = true, $base_url = '' ) {\r\n-\t\tif ( ! $base_url ) {\r\n-\t\t\t$base_url = LP_Helper::getUrlCurrent();\r\n-\t\t}\r\n-\t\tif ( ! empty( $this->_data['nav_base'] ) ) {\r\n-\t\t\tif ( is_callable( $this->_data['nav_base'] ) ) {\r\n-\t\t\t\t$base = call_user_func_array( $this->_data['nav_base'], array( $this->_data['nav_format'] ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$base = $this->_data['nav_base'];\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$base = trailingslashit( preg_replace( '~\\\u002F[0-9]+\\\u002F?$~', '', $base_url ) );\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_paging_nav(\r\n-\t\t\tarray(\r\n-\t\t\t\t'num_pages' => $this->get_pages(),\r\n-\t\t\t\t'paged'     => $this->get_paged(),\r\n-\t\t\t\t'echo'      => $echo,\r\n-\t\t\t\t'format'    => $this->_data['nav_format'],\r\n-\t\t\t\t'base'      => $base,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get range\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_offset() {\r\n-\t\t$from = ( $this->get_paged() - 1 ) * $this->get_limit() + 1;\r\n-\t\t$to   = $from + $this->get_limit() - 1;\r\n-\t\t$to   = min( $to, $this->get_total() );\r\n-\t\tif ( $this->get_total() \u003C 1 ) {\r\n-\t\t\t$from = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn array( $from, $to );\r\n-\t}\r\n-\r\n-\tpublic function get_offset_text( $format = '', $echo = false ) {\r\n-\t\t$offset = $this->get_offset();\r\n-\t\t$output = '';\r\n-\r\n-\t\tif ( ! $format ) {\r\n-\t\t\tif ( $this->_data['single'] && $this->_data['plural'] ) {\r\n-\t\t\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}} {{item_name}}.', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}}.', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$output = str_replace(\r\n-\t\t\tarray( '{{from}}', '{{to}}', '{{total}}', '{{item_name}}' ),\r\n-\t\t\tarray(\r\n-\t\t\t\t$offset[0],\r\n-\t\t\t\t$offset[1],\r\n-\t\t\t\t$this->get_total(),\r\n-\t\t\t\t$this->get_total() \u003C 2 ? $this->_data['single'] : $this->_data['plural'],\r\n-\t\t\t),\r\n-\t\t\t$format\r\n-\t\t);\r\n-\r\n-\t\tif ( $echo ) {\r\n-\t\t\techo wp_kses_post( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_nav( $format = '', $echo = false, $base_url = '' ) {\r\n-\t\t$output  = '';\r\n-\t\t$offset  = $this->get_offset_text( empty( $format ) ? $this->_data['format'] : $format, false );\r\n-\t\t$numbers = $this->get_nav_numbers( false, $base_url );\r\n-\r\n-\t\tif ( $offset && $numbers ) {\r\n-\t\t\t$output = sprintf( '\u003Cdiv class=\"learn-press-nav-items\">%s%s\u003C\u002Fdiv>', $offset, $numbers );\r\n-\t\t}\r\n-\r\n-\t\tif ( $echo ) {\r\n-\t\t\techo wp_kses_post( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\treturn array_key_exists( $offset, $this->_data );\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\treturn array_key_exists( $offset, $this->_data ) ? $this->_data[ $offset ] : false;\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t$this->_data[ $offset ] = $value;\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\treturn false;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Query_List_Table\n+ *\n+ * @since 3.0.0\n+ * @version 3.0.1\n+ * Addons: Assignments, H5P is using.\n+ * Update all before not implements ArrayAccess\n+ *\u002F\n+class LP_Query_List_Table {\n+\t\u002F**\n+\t * @var array|null\n+\t *\u002F\n+\tprotected $_data = null;\n+\n+\t\u002F**\n+\t * LP_Query_List_Table constructor.\n+\t *\n+\t * @param $data\n+\t *\u002F\n+\tpublic function __construct( $data ) {\n+\t\t$this->_data = wp_parse_args(\n+\t\t\t$data,\n+\t\t\tarray(\n+\t\t\t\t'pages'      => 0,\n+\t\t\t\t'total'      => 0,\n+\t\t\t\t'items'      => null,\n+\t\t\t\t'paged'      => 1,\n+\t\t\t\t'limit'      => 10,\n+\t\t\t\t'nav_format' => '%#%\u002F',\n+\t\t\t\t'nav_base'   => '',\n+\t\t\t\t'single'     => __( 'item', 'learnpress' ),\n+\t\t\t\t'plural'     => __( 'items', 'learnpress' ),\n+\t\t\t\t'format'     => '',\n+\t\t\t)\n+\t\t);\n+\n+\t\tglobal $wp;\n+\t\tif ( ! empty( $wp->query_vars['view_id'] ) && empty( $data['paged'] ) ) {\n+\t\t\t$this->_data['paged'] = absint( $wp->query_vars['view_id'] );\n+\t\t}\n+\n+\t\t$this->_init();\n+\t}\n+\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tprotected function _init() {\n+\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_pages() {\n+\t\tif ( empty( $this->_data['pages'] ) && $this->_data['total'] ) {\n+\t\t\t$this->_data['pages'] = ceil( $this->_data['total'] \u002F $this->_data['limit'] );\n+\t\t}\n+\n+\t\treturn absint( $this->_data['pages'] );\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_total() {\n+\t\treturn absint( $this->_data['total'] );\n+\t}\n+\n+\t\u002F**\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_items() {\n+\t\treturn $this->_data['items'];\n+\t}\n+\n+\tpublic function get( string $key = '' ) {\n+\t\treturn empty( $key ) ? $this->_data : $this->_data[ $key ];\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_paged() {\n+\t\treturn max( 1, absint( $this->_data['paged'] ) );\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_limit() {\n+\t\treturn absint( $this->_data['limit'] );\n+\t}\n+\n+\t\u002F**\n+\t * Pagination\n+\t *\n+\t * @param bool $echo\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_nav_numbers( $echo = true, $base_url = '' ) {\n+\t\tif ( ! $base_url ) {\n+\t\t\t$base_url = LP_Helper::getUrlCurrent();\n+\t\t}\n+\t\tif ( ! empty( $this->_data['nav_base'] ) ) {\n+\t\t\tif ( is_callable( $this->_data['nav_base'] ) ) {\n+\t\t\t\t$base = call_user_func_array( $this->_data['nav_base'], array( $this->_data['nav_format'] ) );\n+\t\t\t} else {\n+\t\t\t\t$base = $this->_data['nav_base'];\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$base = trailingslashit( preg_replace( '~\\\u002F[0-9]+\\\u002F?$~', '', $base_url ) );\n+\t\t}\n+\n+\t\treturn learn_press_paging_nav(\n+\t\t\tarray(\n+\t\t\t\t'num_pages' => $this->get_pages(),\n+\t\t\t\t'paged'     => $this->get_paged(),\n+\t\t\t\t'echo'      => $echo,\n+\t\t\t\t'format'    => $this->_data['nav_format'],\n+\t\t\t\t'base'      => $base,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get range\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_offset() {\n+\t\t$from = ( $this->get_paged() - 1 ) * $this->get_limit() + 1;\n+\t\t$to   = $from + $this->get_limit() - 1;\n+\t\t$to   = min( $to, $this->get_total() );\n+\t\tif ( $this->get_total() \u003C 1 ) {\n+\t\t\t$from = 0;\n+\t\t}\n+\n+\t\treturn array( $from, $to );\n+\t}\n+\n+\tpublic function get_offset_text( $format = '', $echo = false ) {\n+\t\t$offset = $this->get_offset();\n+\t\t$output = '';\n+\n+\t\tif ( ! $format ) {\n+\t\t\tif ( $this->_data['single'] && $this->_data['plural'] ) {\n+\t\t\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}} {{item_name}}.', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}}.', 'learnpress' );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$output = str_replace(\n+\t\t\tarray( '{{from}}', '{{to}}', '{{total}}', '{{item_name}}' ),\n+\t\t\tarray(\n+\t\t\t\t$offset[0],\n+\t\t\t\t$offset[1],\n+\t\t\t\t$this->get_total(),\n+\t\t\t\t$this->get_total() \u003C 2 ? $this->_data['single'] : $this->_data['plural'],\n+\t\t\t),\n+\t\t\t$format\n+\t\t);\n+\n+\t\tif ( $echo ) {\n+\t\t\techo wp_kses_post( $output );\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_nav( $format = '', $echo = false, $base_url = '' ) {\n+\t\t$output  = '';\n+\t\t$offset  = $this->get_offset_text( empty( $format ) ? $this->_data['format'] : $format, false );\n+\t\t$numbers = $this->get_nav_numbers( false, $base_url );\n+\n+\t\tif ( $offset && $numbers ) {\n+\t\t\t$output = sprintf( '\u003Cdiv class=\"learn-press-nav-items\">%s%s\u003C\u002Fdiv>', $offset, $numbers );\n+\t\t}\n+\n+\t\tif ( $echo ) {\n+\t\t\techo wp_kses_post( $output );\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\treturn array_key_exists( $offset, $this->_data );\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\treturn array_key_exists( $offset, $this->_data ) ? $this->_data[ $offset ] : false;\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\t$this->_data[ $offset ] = $value;\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\treturn false;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-query.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-query.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-query.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-query.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,346 +1,419 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Query\r\n- *\r\n- * @version 4.2.2.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Query {\r\n-\t\u002F**\r\n-\t * LP_Query constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t\u002F\u002F Not run in REST API LP, or heartbeat of WP\r\n-\t\tif ( LP_Helper::isRestApiLP() || isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tadd_action( 'init', array( $this, 'add_rewrite_tags' ), 1000 );\r\n-\t\tadd_action( 'init', array( $this, 'add_rewrite_endpoints' ) );\r\n-\t\tadd_filter( 'option_rewrite_rules', [ $this, 'update_option_rewrite_rules' ], 1 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Parses request params and controls page\r\n-\t *\r\n-\t * @param WP_Query $q\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\t\u002F*public function parse_request( $q ) {\r\n-\t\tif ( did_action( 'learn_press_parse_query' ) ) {\r\n-\t\t\treturn $q;\r\n-\t\t}\r\n-\r\n-\t\tdo_action_ref_array( 'learn_press_parse_query', array( &$this ) );\r\n-\r\n-\t\treturn $q;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Add custom rewrite tags\r\n-\t *\u002F\r\n-\tpublic function add_rewrite_tags() {\r\n-\t\t$tags = [\r\n-\t\t\t'%course-item%'          => '([^&]+)',\r\n-\t\t\t'%item-type%'            => '([^&]+)',\r\n-\t\t\t'%question%'             => '([^&]+)',\r\n-\t\t\t'%user%'                 => '([^\u002F]*)',\r\n-\t\t\t'%view%'                 => '([^\u002F]*)',\r\n-\t\t\t'%view_id%'              => '(.*)',\r\n-\t\t\t'%section%'              => '(.*)',\r\n-\t\t\t'%content-item-only%'    => '(.*)',\r\n-\t\t\t'%is_single_instructor%' => '(.*)',\r\n-\t\t\t'%instructor_name%'      => '(.*)',\r\n-\t\t];\r\n-\r\n-\t\t$tags = apply_filters( 'learn-press\u002Frewrite\u002Ftags', $tags );\r\n-\t\tforeach ( $tags as $tag => $regex ) {\r\n-\t\t\tadd_rewrite_tag( $tag, $regex );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add custom rewrite endpoints\r\n-\t *\u002F\r\n-\tpublic function add_rewrite_endpoints() {\r\n-\t\t$settings = LP_Settings::instance();\r\n-\r\n-\t\t$endpoints = $settings->get_checkout_endpoints();\r\n-\t\tif ( $endpoints ) {\r\n-\t\t\tforeach ( $endpoints as $endpoint => $value ) {\r\n-\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\r\n-\t\t\t\tadd_rewrite_endpoint( $value, EP_PAGES );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$endpoints = $settings->get_profile_endpoints();\r\n-\t\tif ( $endpoints ) {\r\n-\t\t\tforeach ( $endpoints as $endpoint => $value ) {\r\n-\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\r\n-\t\t\t\tadd_rewrite_endpoint( $value, EP_PAGES );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$endpoints = $settings->get( 'quiz_endpoints' );\r\n-\t\tif ( $endpoints ) {\r\n-\t\t\tforeach ( $endpoints as $endpoint => $value ) {\r\n-\t\t\t\t$endpoint                                       = preg_replace( '!_!', '-', $endpoint );\r\n-\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\r\n-\t\t\t\tadd_rewrite_endpoint(\r\n-\t\t\t\t\t$value, \u002F*EP_ROOT | *\u002F\r\n-\t\t\t\t\tEP_PAGES\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tadd_rewrite_endpoint( 'lp-ajax-handle', EP_ROOT | EP_PAGES );\r\n-\r\n-\t\t\u002F\u002F Code temporary to fix 404 of order receiver page\r\n-\t\tif ( LP_Page_Controller::is_page_checkout() ) {\r\n-\t\t\tflush_rewrite_rules();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add lp rewrite rules\r\n-\t * Format [key_parent][single_key] = [rule => match]\r\n-\t *\r\n-\t * link item course\r\n-\t * link profile\r\n-\t * @return array\r\n-\t * @version 1.0.4\r\n-\t * @modify 4.2.2\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function add_rewrite_rules(): array {\r\n-\t\t$rules = array();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_item_slugs = LP_Settings::get_course_items_slug();\r\n-\t\t\t$course_slug       = LP_Settings::get_permalink_single_course();\r\n-\t\t\t\u002F\u002F For permalink has %course_category%\r\n-\t\t\tif ( preg_match( '!%course_category%!', $course_slug ) ) {\r\n-\t\t\t\tif ( ! preg_match( '!page!', LP_Helper::getUrlCurrent() ) ) {\r\n-\t\t\t\t\t$course_slug = preg_replace( '!%course_category%!', '([^\u002F]+)\u002F([^\u002F]+)', $course_slug );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Rule single course\r\n-\t\t\t\t\t$rules['single-course-with-cat'][] = [\r\n-\t\t\t\t\t\t\"^{$course_slug}\u002F?$\" =>\r\n-\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[2]&course_category=$matches[1]',\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\t\u002F\u002F Rule single item\r\n-\t\t\t\t\tforeach ( $course_item_slugs as $post_type => $course_item_slug ) {\r\n-\t\t\t\t\t\t$rules['course-with-cat-items'][ $post_type ] = [\r\n-\t\t\t\t\t\t\t\"^{$course_slug}(?:\u002F{$course_item_slug}\u002F([^\u002F]+))\u002F?$\" =>\r\n-\t\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[2]&course_category=$matches[1]&course-item=$matches[3]&item-type=' . $post_type,\r\n-\t\t\t\t\t\t];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Rule single course\r\n-\t\t\t\t$rules['single-course'][] = [\r\n-\t\t\t\t\t\"^{$course_slug}\u002F([^\u002F]+)\u002F?$\" =>\r\n-\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[1]',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t\u002F\u002F Rule single item\r\n-\t\t\t\tforeach ( $course_item_slugs as $post_type => $course_item_slug ) {\r\n-\t\t\t\t\t$rules['course-items'][ $post_type ] = [\r\n-\t\t\t\t\t\t\"^{$course_slug}\u002F([^\u002F]+)(?:\u002F{$course_item_slug}\u002F([^\u002F]+))\u002F?$\" =>\r\n-\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[1]&course-item=$matches[2]&item-type=' . $post_type,\r\n-\t\t\t\t\t];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Profile\r\n-\t\t\t$this->add_rewrite_rules_profile( $rules );\r\n-\r\n-\t\t\t\u002F\u002F Instructor detail\r\n-\t\t\t$single_instructor_page_id       = learn_press_get_page_id( 'single_instructor' );\r\n-\t\t\t$instructor_slug                 = get_post_field( 'post_name', $single_instructor_page_id );\r\n-\t\t\t$rules['instructor']['has_name'] = [\r\n-\t\t\t\t\"^{$instructor_slug}\u002F([^\u002F]+)\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',\r\n-\t\t\t];\r\n-\t\t\t$rules['instructor']['no_name']  = [\r\n-\t\t\t\t\"^{$instructor_slug}\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F For handle request lp-ajax\r\n-\t\t\t$rules['lp-ajax'][] = [\r\n-\t\t\t\t'^lp-ajax-handle\u002F?$' => 'index.php',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$rules = apply_filters( 'learn-press\u002Frewrite\u002Frules', $rules );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $rules;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add rewrite rules for profile page.\r\n-\t *\r\n-\t * @param $rules\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function add_rewrite_rules_profile( &$rules ) {\r\n-\t\t\u002F\u002F Profile\r\n-\t\t$profile_id = learn_press_get_page_id( 'profile' );\r\n-\t\tif ( $profile_id ) {\r\n-\t\t\t\u002F\u002F Rule view profile of user (self or another)\r\n-\t\t\t$page_profile_slug        = urldecode( get_post_field( 'post_name', $profile_id ) );\r\n-\t\t\t$rules['profile']['user'] = [\r\n-\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F?$\" =>\r\n-\t\t\t\t\t\"index.php?page_id={$profile_id}&user=\" . '$matches[1]',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F Rule view profile of user (self or another) with tab\r\n-\t\t\t$tabs = LP_Profile::get_tabs_arr();\r\n-\t\t\tif ( $tabs ) {\r\n-\t\t\t\tforeach ( $tabs as $tab_key => $args ) {\r\n-\t\t\t\t\t$tab_slug                     = $args['slug'] ?? $tab_key;\r\n-\t\t\t\t\t$rules['profile'][ $tab_key ] = [\r\n-\t\t\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F?([0-9]*)\u002F?$\" =>\r\n-\t\t\t\t\t\t\t'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\tif ( ! empty( $args['sections'] ) ) {\r\n-\t\t\t\t\t\tforeach ( $args['sections'] as $section_key => $section ) {\r\n-\t\t\t\t\t\t\t$section_slug                     = $section['slug'] ?? $section_key;\r\n-\t\t\t\t\t\t\t$rules['profile'][ $section_key ] = [\r\n-\t\t\t\t\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F({$section_slug})\u002F?([0-9]*)?$\" =>\r\n-\t\t\t\t\t\t\t\t\t'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',\r\n-\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tapply_filters( 'learn-press\u002Frewrite-rules\u002Fprofile', $rules['profile'], $profile_id );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $join\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.2.6.6\r\n-\t *\u002F\r\n-\t\u002F*public function join_term( $join ) {\r\n-\t\tglobal $wp_query, $wpdb;\r\n-\r\n-\t\tif ( ! empty( $wp_query->query_vars['s'] ) && ! is_admin() ) {\r\n-\t\t\tif ( ! preg_match( '\u002F' . $wpdb->term_relationships . '\u002F', $join ) ) {\r\n-\t\t\t\t$join .= \"LEFT JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id \";\r\n-\t\t\t}\r\n-\t\t\t$join .= \"LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id \";\r\n-\t\t\t$join .= \"LEFT JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id \";\r\n-\t\t}\r\n-\r\n-\t\treturn $join;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @param string $where\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.2.6.6\r\n-\t *\u002F\r\n-\t\u002F*public function add_tax_search( $where ) {\r\n-\t\tglobal $wp_query, $wpdb;\r\n-\r\n-\t\tif ( ! empty( $wp_query->query_vars['s'] ) && ! is_admin() ) {\r\n-\t\t\t$escaped_s = esc_sql( $wp_query->query_vars['s'] );\r\n-\t\t\t$where    .= \"OR $wpdb->terms.name LIKE '%{$escaped_s}%'\";\r\n-\t\t}\r\n-\r\n-\t\treturn $where;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @param string $groupby\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.2.6.6\r\n-\t *\u002F\r\n-\t\u002F*public function tax_groupby( $groupby ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$groupby = \"{$wpdb->posts}.ID\";\r\n-\r\n-\t\t$this->remove_query_tax();\r\n-\r\n-\t\treturn $groupby;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Remove filter query\r\n-\t * @deprecated 4.2.6.6\r\n-\t *\u002F\r\n-\t\u002F*public function remove_query_tax() {\r\n-\t\tremove_filter( 'posts_where', 'learn_press_add_tax_search' );\r\n-\t\tremove_filter( 'posts_join', 'learn_press_join_term' );\r\n-\t\tremove_filter( 'posts_groupby', 'learn_press_tax_groupby' );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Clear cache rewrite rules when update option rewrite_rules\r\n-\t * Fixed for case: addons Certificates (v4.0.5), FE(4.0.5), Live(4.0.2), Collections(4.0.2) not installed on site client.\r\n-\t * Run only one time when reload page Frontend.\r\n-\t *\r\n-\t * @return mixed|array\r\n-\t * @since 4.2.2\r\n-\t * @version 1.0.3\r\n-\t * @see get_option() hook in this function.\r\n-\t *\u002F\r\n-\tpublic function update_option_rewrite_rules( $wp_rules ) {\r\n-\t\t\u002F\u002F Check it is called from WP_Rewrite class\r\n-\t\t$debug_backtrace = debug_backtrace();\r\n-\r\n-\t\t\u002F\u002F Find call from WP_Rewrite class\r\n-\t\t$found = false;\r\n-\t\tforeach ( $debug_backtrace as $trace ) {\r\n-\t\t\tif ( isset( $trace['class'] ) && $trace['class'] == WP_Rewrite::class ) {\r\n-\t\t\t\t$found = true;\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $found ) {\r\n-\t\t\treturn $wp_rules;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*static $handled = false;\r\n-\t\tif ( $handled ) {\r\n-\t\t\treturn $wp_rules;\r\n-\t\t}\r\n-\t\t$handled = true;*\u002F\r\n-\r\n-\t\tif ( ! is_array( $wp_rules ) ) {\r\n-\t\t\treturn $wp_rules;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_rules = $this->add_rewrite_rules();\r\n-\t\t\tforeach ( $lp_rules as $key_parent => $rules ) {\r\n-\t\t\t\tforeach ( $rules as $key => $rule ) {\r\n-\t\t\t\t\tif ( is_array( $rule ) ) {\r\n-\t\t\t\t\t\t$wp_rules = array_merge( $rule, $wp_rules );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( sprintf( '%s:%s:%s', __FILE__, __LINE__, $e->getMessage() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $wp_rules;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Query\n+ *\n+ * @version 4.2.2.3\n+ *\u002F\n+\n+use LearnPress\\CourseBuilder\\CourseBuilder;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Query {\n+\t\u002F**\n+\t * LP_Query constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t\u002F\u002F Not run in REST API LP, or heartbeat of WP\n+\t\tif ( LP_Helper::isRestApiLP() || isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tadd_action( 'init', array( $this, 'add_rewrite_tags' ), 1000 );\n+\t\tadd_action( 'init', array( $this, 'add_rewrite_endpoints' ) );\n+\t\tadd_filter( 'option_rewrite_rules', [ $this, 'update_option_rewrite_rules' ], 1 );\n+\t}\n+\n+\t\u002F**\n+\t * Parses request params and controls page\n+\t *\n+\t * @param WP_Query $q\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\t\u002F*public function parse_request( $q ) {\n+\t\tif ( did_action( 'learn_press_parse_query' ) ) {\n+\t\t\treturn $q;\n+\t\t}\n+\n+\t\tdo_action_ref_array( 'learn_press_parse_query', array( &$this ) );\n+\n+\t\treturn $q;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Add custom rewrite tags\n+\t *\u002F\n+\tpublic function add_rewrite_tags() {\n+\t\t$tags = [\n+\t\t\t'%course-item%'                                => '([^&]+)',\n+\t\t\t'%item-type%'                                  => '([^&]+)',\n+\t\t\t'%question%'                                   => '([^&]+)',\n+\t\t\t'%user%'                                       => '([^\u002F]*)',\n+\t\t\t'%view%'                                       => '([^\u002F]*)',\n+\t\t\t'%view_id%'                                    => '(.*)',\n+\t\t\t'%section%'                                    => '(.*)',\n+\t\t\t'%content-item-only%'                          => '(.*)',\n+\t\t\t'%is_single_instructor%'                       => '(.*)',\n+\t\t\t'%instructor_name%'                            => '(.*)',\n+\t\t\t\u002F\u002F For Course builder\n+\t\t\t'%' . CourseBuilder::QUERY_VAR_MENU_SLUG . '%' => '([^\u002F]*)',\n+\t\t\t'%' . CourseBuilder::QUERY_VAR_ITEM_ID . '%'   => '(.*)',\n+\t\t\t'%' . CourseBuilder::QUERY_VAR_IS_COURSE_BUILDER . '%' => '(.*)',\n+\t\t];\n+\n+\t\t$tags = apply_filters( 'learn-press\u002Frewrite\u002Ftags', $tags );\n+\t\tforeach ( $tags as $tag => $regex ) {\n+\t\t\tadd_rewrite_tag( $tag, $regex );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add custom rewrite endpoints\n+\t *\u002F\n+\tpublic function add_rewrite_endpoints() {\n+\t\t$settings = LP_Settings::instance();\n+\n+\t\t$endpoints = $settings->get_checkout_endpoints();\n+\t\tif ( $endpoints ) {\n+\t\t\tforeach ( $endpoints as $endpoint => $value ) {\n+\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\n+\t\t\t\tadd_rewrite_endpoint( $value, EP_PAGES );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$endpoints = $settings->get_profile_endpoints();\n+\t\tif ( $endpoints ) {\n+\t\t\tforeach ( $endpoints as $endpoint => $value ) {\n+\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\n+\t\t\t\tadd_rewrite_endpoint( $value, EP_PAGES );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$endpoints = $settings->get_course_builder_endpoints();\n+\t\tif ( $endpoints ) {\n+\t\t\tforeach ( $endpoints as $endpoint => $value ) {\n+\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\n+\t\t\t\tadd_rewrite_endpoint( $value, EP_PAGES );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$endpoints = $settings->get( 'quiz_endpoints' );\n+\t\tif ( $endpoints ) {\n+\t\t\tforeach ( $endpoints as $endpoint => $value ) {\n+\t\t\t\t$endpoint                                       = preg_replace( '!_!', '-', $endpoint );\n+\t\t\t\tLearnPress::instance()->query_vars[ $endpoint ] = $value;\n+\t\t\t\tadd_rewrite_endpoint(\n+\t\t\t\t\t$value, \u002F*EP_ROOT | *\u002F\n+\t\t\t\t\tEP_PAGES\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\tadd_rewrite_endpoint( 'lp-ajax-handle', EP_ROOT | EP_PAGES );\n+\n+\t\t\u002F\u002F Code temporary to fix 404 of order receiver page\n+\t\tif ( LP_Page_Controller::is_page_checkout() ) {\n+\t\t\tflush_rewrite_rules();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add lp rewrite rules\n+\t * Format [key_parent][single_key] = [rule => match]\n+\t *\n+\t * link item course\n+\t * link profile\n+\t * @return array\n+\t * @version 1.0.4\n+\t * @modify 4.2.2\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function add_rewrite_rules(): array {\n+\t\t$rules = array();\n+\n+\t\ttry {\n+\t\t\t$course_item_slugs = LP_Settings::get_course_items_slug();\n+\t\t\t$course_slug       = LP_Settings::get_permalink_single_course();\n+\t\t\t\u002F\u002F For permalink has %course_category%\n+\t\t\tif ( preg_match( '!%course_category%!', $course_slug ) ) {\n+\t\t\t\tif ( ! preg_match( '!page!', LP_Helper::getUrlCurrent() ) ) {\n+\t\t\t\t\t$course_slug = preg_replace( '!%course_category%!', '([^\u002F]+)\u002F([^\u002F]+)', $course_slug );\n+\n+\t\t\t\t\t\u002F\u002F Rule single course\n+\t\t\t\t\t$rules['single-course-with-cat'][] = [\n+\t\t\t\t\t\t\"^{$course_slug}\u002F?$\" =>\n+\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[2]&course_category=$matches[1]',\n+\t\t\t\t\t];\n+\n+\t\t\t\t\t\u002F\u002F Rule single item\n+\t\t\t\t\tforeach ( $course_item_slugs as $post_type => $course_item_slug ) {\n+\t\t\t\t\t\t$rules['course-with-cat-items'][ $post_type ] = [\n+\t\t\t\t\t\t\t\"^{$course_slug}(?:\u002F{$course_item_slug}\u002F([^\u002F]+))\u002F?$\" =>\n+\t\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[2]&course_category=$matches[1]&course-item=$matches[3]&item-type=' . $post_type,\n+\t\t\t\t\t\t];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Rule single course\n+\t\t\t\t$rules['single-course'][] = [\n+\t\t\t\t\t\"^{$course_slug}\u002F([^\u002F]+)\u002F?$\" =>\n+\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[1]',\n+\t\t\t\t];\n+\n+\t\t\t\t\u002F\u002F Rule single item\n+\t\t\t\tforeach ( $course_item_slugs as $post_type => $course_item_slug ) {\n+\t\t\t\t\t$rules['course-items'][ $post_type ] = [\n+\t\t\t\t\t\t\"^{$course_slug}\u002F([^\u002F]+)(?:\u002F{$course_item_slug}\u002F([^\u002F]+))\u002F?$\" =>\n+\t\t\t\t\t\t\t'index.php?' . LP_COURSE_CPT . '=$matches[1]&course-item=$matches[2]&item-type=' . $post_type,\n+\t\t\t\t\t];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Profile\n+\t\t\t$this->add_rewrite_rules_profile( $rules );\n+\n+\t\t\t\u002F\u002F Instructor detail\n+\t\t\t$single_instructor_page_id       = learn_press_get_page_id( 'single_instructor' );\n+\t\t\t$instructor_slug                 = get_post_field( 'post_name', $single_instructor_page_id );\n+\t\t\t$rules['instructor']['has_name'] = [\n+\t\t\t\t\"^{$instructor_slug}\u002F([^\u002F]+)\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\n+\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',\n+\t\t\t];\n+\t\t\t$rules['instructor']['no_name']  = [\n+\t\t\t\t\"^{$instructor_slug}\u002F?$\" =>\n+\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F For handle request lp-ajax\n+\t\t\t$rules['lp-ajax'][] = [\n+\t\t\t\t'^lp-ajax-handle\u002F?$' => 'index.php',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F Course builder\n+\t\t\t$this->add_rewrite_rules_course_builder( $rules );\n+\n+\t\t\t$rules = apply_filters( 'learn-press\u002Frewrite\u002Frules', $rules );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $rules;\n+\t}\n+\n+\t\u002F**\n+\t * Add rewrite rules for profile page.\n+\t *\n+\t * @param $rules\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function add_rewrite_rules_profile( &$rules ) {\n+\t\t\u002F\u002F Profile\n+\t\t$profile_id = learn_press_get_page_id( 'profile' );\n+\t\tif ( $profile_id ) {\n+\t\t\t\u002F\u002F Rule view profile of user (self or another)\n+\t\t\t$page_profile_slug        = urldecode( get_post_field( 'post_name', $profile_id ) );\n+\t\t\t$rules['profile']['user'] = [\n+\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F?$\" =>\n+\t\t\t\t\t\"index.php?page_id={$profile_id}&user=\" . '$matches[1]',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F Rule view profile of user (self or another) with tab\n+\t\t\t$tabs = LP_Profile::get_tabs_arr();\n+\t\t\tif ( $tabs ) {\n+\t\t\t\tforeach ( $tabs as $tab_key => $args ) {\n+\t\t\t\t\t$tab_slug                     = $args['slug'] ?? $tab_key;\n+\t\t\t\t\t$rules['profile'][ $tab_key ] = [\n+\t\t\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F?([0-9]*)\u002F?$\" =>\n+\t\t\t\t\t\t\t'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',\n+\t\t\t\t\t];\n+\n+\t\t\t\t\tif ( ! empty( $args['sections'] ) ) {\n+\t\t\t\t\t\tforeach ( $args['sections'] as $section_key => $section ) {\n+\t\t\t\t\t\t\t$section_slug                     = $section['slug'] ?? $section_key;\n+\t\t\t\t\t\t\t$rules['profile'][ $section_key ] = [\n+\t\t\t\t\t\t\t\t\"^{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F({$section_slug})\u002F?([0-9]*)?$\" =>\n+\t\t\t\t\t\t\t\t\t'index.php?page_id=' . $profile_id . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',\n+\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tapply_filters( 'learn-press\u002Frewrite-rules\u002Fprofile', $rules['profile'], $profile_id );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add rewrite rules for profile page.\n+\t *\n+\t * @param $rules\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function add_rewrite_rules_course_builder( &$rules ) {\n+\t\t\u002F\u002F Course Builder\n+\t\t$page     = LP_Settings::get_option( 'course_builder', 'course-builder' );\n+\t\t$menus    = CourseBuilder::get_menus_arr();\n+\t\t$key_rule = 'course-builder';\n+\n+\t\tif ( $menus ) {\n+\t\t\t$rules[ $key_rule ]['home'] = [\n+\t\t\t\t\"^{$page}\u002F?$\" => 'index.php?is_course_builder=1',\n+\t\t\t];\n+\n+\t\t\tforeach ( $menus as $menu_slug => $args ) {\n+\t\t\t\t$rules[ $key_rule ][ $menu_slug . '_create' ] = [\n+\t\t\t\t\t\"^{$page}\u002F({$menu_slug})\u002F(?:create)\u002F?$\" =>\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'index.php?%s=1&%s=%s&%s=new',\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_IS_COURSE_BUILDER,\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_MENU_SLUG,\n+\t\t\t\t\t\t\t$menu_slug,\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_ITEM_ID\n+\t\t\t\t\t\t),\n+\t\t\t\t];\n+\n+\t\t\t\t$rules[ $key_rule ][ $menu_slug . '_pagination' ] = [\n+\t\t\t\t\t\"^{$page}\u002F{$menu_slug}\u002F(?:page)\u002F?([0-9]*)\u002F?$\" =>\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'index.php?%s=1&%s=%s&paged=$matches[1]',\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_IS_COURSE_BUILDER,\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_MENU_SLUG,\n+\t\t\t\t\t\t\t$menu_slug\n+\t\t\t\t\t\t),\n+\t\t\t\t];\n+\n+\t\t\t\t$rules[ $key_rule ][ $menu_slug ] = [\n+\t\t\t\t\t\"^{$page}\u002F{$menu_slug}\u002F?([0-9]*)\u002F?$\" =>\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'index.php?%s=1&%s=%s&%s=$matches[1]',\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_IS_COURSE_BUILDER,\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_MENU_SLUG,\n+\t\t\t\t\t\t\t$menu_slug,\n+\t\t\t\t\t\t\tCourseBuilder::QUERY_VAR_ITEM_ID\n+\t\t\t\t\t\t),\n+\t\t\t\t];\n+\t\t\t}\n+\t\t}\n+\n+\t\tapply_filters( 'learn-press\u002Frewrite-rules\u002Fcourse-builder', $rules[ $key_rule ], $page );\n+\t}\n+\n+\t\u002F**\n+\t * @param string $join\n+\t *\n+\t * @return string\n+\t * @deprecated 4.2.6.6\n+\t *\u002F\n+\t\u002F*public function join_term( $join ) {\n+\t\tglobal $wp_query, $wpdb;\n+\n+\t\tif ( ! empty( $wp_query->query_vars['s'] ) && ! is_admin() ) {\n+\t\t\tif ( ! preg_match( '\u002F' . $wpdb->term_relationships . '\u002F', $join ) ) {\n+\t\t\t\t$join .= \"LEFT JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id \";\n+\t\t\t}\n+\t\t\t$join .= \"LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id \";\n+\t\t\t$join .= \"LEFT JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id \";\n+\t\t}\n+\n+\t\treturn $join;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @param string $where\n+\t *\n+\t * @return string\n+\t * @deprecated 4.2.6.6\n+\t *\u002F\n+\t\u002F*public function add_tax_search( $where ) {\n+\t\tglobal $wp_query, $wpdb;\n+\n+\t\tif ( ! empty( $wp_query->query_vars['s'] ) && ! is_admin() ) {\n+\t\t\t$escaped_s = esc_sql( $wp_query->query_vars['s'] );\n+\t\t\t$where    .= \"OR $wpdb->terms.name LIKE '%{$escaped_s}%'\";\n+\t\t}\n+\n+\t\treturn $where;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @param string $groupby\n+\t *\n+\t * @return string\n+\t * @deprecated 4.2.6.6\n+\t *\u002F\n+\t\u002F*public function tax_groupby( $groupby ) {\n+\t\tglobal $wpdb;\n+\t\t$groupby = \"{$wpdb->posts}.ID\";\n+\n+\t\t$this->remove_query_tax();\n+\n+\t\treturn $groupby;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Remove filter query\n+\t * @deprecated 4.2.6.6\n+\t *\u002F\n+\t\u002F*public function remove_query_tax() {\n+\t\tremove_filter( 'posts_where', 'learn_press_add_tax_search' );\n+\t\tremove_filter( 'posts_join', 'learn_press_join_term' );\n+\t\tremove_filter( 'posts_groupby', 'learn_press_tax_groupby' );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Clear cache rewrite rules when update option rewrite_rules\n+\t * Fixed for case: addons Certificates (v4.0.5), FE(4.0.5), Live(4.0.2), Collections(4.0.2) not installed on site client.\n+\t * Run only one time when reload page Frontend.\n+\t *\n+\t * @return mixed|array\n+\t * @since 4.2.2\n+\t * @version 1.0.3\n+\t * @see get_option() hook in this function.\n+\t *\u002F\n+\tpublic function update_option_rewrite_rules( $wp_rules ) {\n+\t\t\u002F\u002F Check it is called from WP_Rewrite class\n+\t\t$debug_backtrace = debug_backtrace();\n+\n+\t\t\u002F\u002F Find call from WP_Rewrite class\n+\t\t$found = false;\n+\t\tforeach ( $debug_backtrace as $trace ) {\n+\t\t\tif ( isset( $trace['class'] ) && $trace['class'] == WP_Rewrite::class ) {\n+\t\t\t\t$found = true;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $found ) {\n+\t\t\treturn $wp_rules;\n+\t\t}\n+\n+\t\t\u002F*static $handled = false;\n+\t\tif ( $handled ) {\n+\t\t\treturn $wp_rules;\n+\t\t}\n+\t\t$handled = true;*\u002F\n+\n+\t\tif ( ! is_array( $wp_rules ) ) {\n+\t\t\treturn $wp_rules;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$lp_rules = $this->add_rewrite_rules();\n+\t\t\tforeach ( $lp_rules as $key_parent => $rules ) {\n+\t\t\t\tforeach ( $rules as $key => $rule ) {\n+\t\t\t\t\tif ( is_array( $rule ) ) {\n+\t\t\t\t\t\t$wp_rules = array_merge( $rule, $wp_rules );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( sprintf( '%s:%s:%s', __FILE__, __LINE__, $e->getMessage() ) );\n+\t\t}\n+\n+\t\treturn $wp_rules;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-request-handler.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-request-handler.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-request-handler.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-request-handler.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,531 +1,531 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Request\r\n- *\r\n- * Process actions by request param\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Request\r\n- *\u002F\r\n-class LP_Request {\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tpublic static $ajax_shutdown = true;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic static function init() {\r\n-\r\n-\t\tself::$ajax_shutdown = learn_press_is_ajax();\r\n-\r\n-\t\tif ( is_admin() ) {\r\n-\t\t\tadd_action( 'init', array( __CLASS__, 'process_request' ), 50 );\r\n-\t\t} else {\r\n-\t\t\tadd_action( 'template_include', array( __CLASS__, 'process_request' ), 50 );\r\n-\t\t}\r\n-\r\n-\t\tself::register( 'lp-ajax', array( __CLASS__, 'do_ajax' ) );\r\n-\r\n-\t\tadd_action( 'wp_loaded', array( 'LP_Forms_Handler', 'init' ), 10 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value by key from $_REQUEST\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $default_value\r\n-\t * @param string $sanitize_type\r\n-\t * @param string $method\r\n-\t *\r\n-\t * @since 4.1.7.2\r\n-\t * @version 1.0.0\r\n-\t * @return array|float|int|string\r\n-\t *\u002F\r\n-\tpublic static function get_param( string $key, $default_value = '', string $sanitize_type = 'text', string $method = '' ) {\r\n-\t\tswitch ( strtolower( $method ) ) {\r\n-\t\t\tcase 'post':\r\n-\t\t\t\t$values = $_POST ?? [];\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'get':\r\n-\t\t\t\t$values = $_GET ?? [];\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$values = $_REQUEST ?? [];\r\n-\t\t}\r\n-\r\n-\t\treturn LP_Helper::sanitize_params_submitted( $values[ $key ] ?? $default_value, $sanitize_type );\r\n-\t}\r\n-\r\n-\tpublic static function get_header() {\r\n-\t\tob_start();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process actions\r\n-\t *\r\n-\t * @param string $template\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function process_request( $template ) {\r\n-\t\tif ( ! empty( $_REQUEST ) ) {\r\n-\t\t\tforeach ( $_REQUEST as $key => $value ) {\r\n-\t\t\t\t$key   = LP_Helper::sanitize_params_submitted( $key );\r\n-\t\t\t\t$value = LP_Helper::sanitize_params_submitted( $value );\r\n-\t\t\t\tdo_action( 'learn_press_request_handler_' . $key, $value, $key );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $template;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register new request\r\n-\t *\r\n-\t * @param string|array $action\r\n-\t * @param mixed $function\r\n-\t * @param int $priority\r\n-\t *\u002F\r\n-\tpublic static function register( $action, $function = '', $priority = 5 ) {\r\n-\t\tif ( is_array( $action ) ) {\r\n-\t\t\tforeach ( $action as $item ) {\r\n-\t\t\t\t$item = wp_parse_args(\r\n-\t\t\t\t\t$item,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'action'   => '',\r\n-\t\t\t\t\t\t'callback' => '',\r\n-\t\t\t\t\t\t'priority' => 5,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( ! $item['action'] || ! $item['callback'] ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlist( $action, $callback, $priority ) = array_values( $item );\r\n-\t\t\t\tadd_action( 'learn_press_request_handler_' . $action, $callback, $priority, 2 );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tadd_action( 'learn_press_request_handler_' . $action, $function, $priority, 2 );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register ajax action.\r\n-\t * Add ajax into queue by an action and then LP check if there is a request\r\n-\t * with key lp-ajax=action-name then do the action \"action-name\". By default,\r\n-\t * ajax action is called if user is logged. But, it can be call in case user\r\n-\t * is not logged in if the action is passed with key :nopriv at the end.\r\n-\t *\r\n-\t * E.g:\r\n-\t *      + Only for user is logged in\r\n-\t *      LP_Request::register_ajax( 'action', 'function_to_call', 5 )\r\n-\t *\r\n-\t *      + For guest\r\n-\t *      LP_Request::register_ajax( 'action:nopriv', 'function_to_call', 5 )\r\n-\t *\r\n-\t * @param string $action\r\n-\t * @param mixed $function\r\n-\t * @param int $priority\r\n-\t *\u002F\r\n-\tpublic static function register_ajax( $action, $function, $priority = 5 ) {\r\n-\t\tif ( is_array( $action ) ) {\r\n-\t\t\tforeach ( $action as $args ) {\r\n-\t\t\t\tif ( ! empty( $args['action'] ) && ! empty( $args['callback'] ) ) {\r\n-\t\t\t\t\tself::register_ajax( $args['action'], $args['callback'], ! empty( $args['priority'] ) ? $args['priority'] : 5 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$actions = self::parse_action( $action );\r\n-\r\n-\t\tif ( isset( $actions['nonce'] ) ) {\r\n-\t\t\tadd_filter( 'learn-press\u002Fajax\u002Fverify-none\u002F' . $actions['action'], array( __CLASS__, 'verify_nonce' ) );\r\n-\t\t}\r\n-\r\n-\t\tadd_action( 'learn-press\u002Fajax\u002F' . $actions['action'], $function, $priority );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * No requires logged in?\r\n-\t\t *\u002F\r\n-\t\tif ( isset( $actions['nopriv'] ) ) {\r\n-\t\t\tadd_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $actions['action'], $function, $priority );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Do ajax if there is a 'lp-ajax' in $_REQUEST\r\n-\t *\r\n-\t * @param string $action\r\n-\t *\u002F\r\n-\tpublic static function do_ajax( $action ) {\r\n-\r\n-\t\tif ( ! defined( 'LP_DOING_AJAX' ) ) {\r\n-\t\t\tdefine( 'LP_DOING_AJAX', true );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002FLP_Gateways::instance()->get_available_payment_gateways();\r\n-\r\n-\t\tif ( has_filter( 'learn-press\u002Fajax\u002Fverify-none\u002F' . $action ) ) {\r\n-\t\t\tif ( ! self::verify_nonce( $action ) ) {\r\n-\t\t\t\tdie( '0' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t$has_action = has_action( 'learn-press\u002Fajax\u002F' . $action );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fajax\u002F' . $action );\r\n-\t\t} else {\r\n-\r\n-\t\t\t$has_action = has_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $action );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $action );\r\n-\t\t}\r\n-\r\n-\t\tif ( $has_action && self::$ajax_shutdown ) {\r\n-\t\t\tdie( '{END_AJAX}' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic static function verify_nonce( $action, $nonce = '' ) {\r\n-\t\treturn wp_verify_nonce( $nonce ? $nonce : self::get_param( \"{$action}-nonce\" ), $action );\r\n-\t}\r\n-\r\n-\tpublic static function parse_action( $action ) {\r\n-\t\t$args    = explode( ':', $action );\r\n-\t\t$actions = array(\r\n-\t\t\t'action' => $args[0],\r\n-\t\t);\r\n-\r\n-\t\tif ( sizeof( $args ) > 1 ) {\r\n-\t\t\tarray_shift( $args );\r\n-\t\t\tforeach ( $args as $arg ) {\r\n-\t\t\t\t$actions[ $arg ] = $arg;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $actions;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get variable value from Server environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $type\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @deprecated 4.2.1\r\n-\t *\u002F\r\n-\tpublic static function get( $var, $default = false, $type = '', $env = 'request' ) {\r\n-\t\tswitch ( strtolower( $env ) ) {\r\n-\t\t\tcase 'post':\r\n-\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_POST );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'get':\r\n-\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_GET );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'put':\r\n-\t\t\tcase 'delete':\r\n-\t\t\t\t$data = file_get_contents( 'php:\u002F\u002Finput' );\r\n-\t\t\t\t$env  = array();\r\n-\t\t\t\tparse_str( $data, $env );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'wp':\r\n-\t\t\t\tglobal $wp;\r\n-\t\t\t\t$env = $wp->query_vars;\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_REQUEST );\r\n-\t\t}\r\n-\r\n-\t\t$return = array_key_exists( $var, $env ) ? $env[ $var ] : $default;\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase 'int':\r\n-\t\t\t\t$return = intval( $return );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'float':\r\n-\t\t\t\t$return = floatval( $return );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'bool':\r\n-\t\t\t\ttry {\r\n-\t\t\t\t\t$value = strtolower( $return );\r\n-\t\t\t\t} catch ( Exception $e ) {\r\n-\t\t\t\t\t$value = $return;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( in_array( $value, array( 'true', 'yes', 'on', 'enable' ) ) ) {\r\n-\t\t\t\t\t$return = true;\r\n-\t\t\t\t} elseif ( in_array( $value, array( 'false', 'no', 'off', 'disable' ) ) ) {\r\n-\t\t\t\t\t$return = false;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$return = ! ! $return;\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'string':\r\n-\t\t\t\t$return = (string) $return;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'array':\r\n-\t\t\t\t$return = $return ? (array) $return : array();\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\tLP_Helper::sanitize_params_submitted( $return );\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value int from environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return int\r\n-\t * @deprecated\r\n-\t *\u002F\r\n-\tpublic static function get_int( $var, $default = false, $env = 'request' ) {\r\n-\t\treturn self::get( $var, $default, 'int', $env );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value float from environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic static function get_float( $var, $default = false, $env = 'request' ) {\r\n-\t\treturn self::get( $var, $default, 'float', $env );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value bool from environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function get_bool( $var, $default = false, $env = 'request' ) {\r\n-\t\treturn self::get( $var, $default, 'bool', $env );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value string from environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.2.7.4\r\n-\t *\u002F\r\n-\tpublic static function get_string( $var, $default = false, $env = 'request' ) {\r\n-\t\treturn self::get( $var, $default, 'string', $env );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value array from environment.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t * @param string $env\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_array( $var, $default = false, $env = 'request' ) {\r\n-\t\treturn self::get( $var, $default, 'array', $env );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic static function get_post( $var, $default = false, $type = '' ) {\r\n-\t\treturn self::get( $var, $default, $type, 'post' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value int from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function get_post_int( $var, $default = false ) {\r\n-\t\treturn self::get_post( $var, $default, 'int' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value float from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic static function get_post_float( $var, $default = false ) {\r\n-\t\treturn self::get_post( $var, $default, 'float' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value bool from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function get_post_bool( $var, $default = false ) {\r\n-\t\treturn self::get_post( $var, $default, 'bool' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value string from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_post_string( $var, $default = false ) {\r\n-\t\treturn self::get_post( $var, $default, 'string' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value array from $_POST.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_post_array( $var, $default = false ) {\r\n-\t\treturn self::get_post( $var, $default, 'array' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get email field and validate.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param bool $default\r\n-\t *\r\n-\t * @return bool|string\r\n-\t *\u002F\r\n-\tpublic static function get_email( $var, $default = false ) {\r\n-\t\t$email = self::get_string( $var, $default );\r\n-\t\tif ( ! is_email( $email ) ) {\r\n-\t\t\t$email = $default;\r\n-\t\t}\r\n-\r\n-\t\treturn $email;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get a batch of params from request into an array.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_list() {\r\n-\t\tif ( func_num_args() \u003C 1 ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t$list = array();\r\n-\t\tforeach ( func_get_args() as $key ) {\r\n-\t\t\t$list[ $key ] = self::get( $key );\r\n-\t\t}\r\n-\r\n-\t\treturn $list;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Parse string from request to array by comma.\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param string $separator\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_list_array( $var, $separator = ',' ) {\r\n-\t\t$list = self::get_string( $var );\r\n-\r\n-\t\tif ( ! $list ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\tif ( $separator === ',' ) {\r\n-\t\t\t$list = preg_split( '!\\s?,\\s?!', $list );\r\n-\t\t} else {\r\n-\t\t\t$list = explode( $separator, $list );\r\n-\t\t}\r\n-\r\n-\t\treturn array_map( 'trim', $list );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get param 'redirect' in request.\r\n-\t *\r\n-\t * @param string $default\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_redirect( $default = '' ) {\r\n-\t\t$redirect = self::get_string( 'redirect' );\r\n-\r\n-\t\tif ( $redirect ) {\r\n-\t\t\t$redirect = urldecode( $redirect );\r\n-\t\t} else {\r\n-\t\t\t$redirect = $default;\r\n-\t\t}\r\n-\r\n-\t\treturn $redirect;\r\n-\t}\r\n-\r\n-\tpublic static function get_cookie( $name, $def = false, $global = false ) {\r\n-\t\treturn $_COOKIE[ $name ] ?? $def;\r\n-\t}\r\n-\r\n-\t\u002F*public static function set_cookie( $name, $value, $expires = '', $domain = '', $path = '', $secure = false ) {\r\n-\t\tif ( func_num_args() > 2 ) {\r\n-\t\t\tlearn_press_setcookie( $name, $value, $expires, $secure );\r\n-\t\t} else {\r\n-\t\t\t$cookie = isset( $_COOKIE['LP'] ) ? maybe_unserialize( $_COOKIE['LP'] ) : array();\r\n-\r\n-\t\t\t$cookie[ $name ] = $value;\r\n-\t\t\tlearn_press_setcookie( 'LP', $value );\r\n-\t\t}\r\n-\t}*\u002F\r\n-}\r\n-\r\n-LP_Request::init();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Request\n+ *\n+ * Process actions by request param\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+\u002F**\n+ * Class LP_Request\n+ *\u002F\n+class LP_Request {\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tpublic static $ajax_shutdown = true;\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic static function init() {\n+\n+\t\tself::$ajax_shutdown = learn_press_is_ajax();\n+\n+\t\tif ( is_admin() ) {\n+\t\t\tadd_action( 'init', array( __CLASS__, 'process_request' ), 50 );\n+\t\t} else {\n+\t\t\tadd_action( 'template_include', array( __CLASS__, 'process_request' ), 50 );\n+\t\t}\n+\n+\t\tself::register( 'lp-ajax', array( __CLASS__, 'do_ajax' ) );\n+\n+\t\tadd_action( 'wp_loaded', array( 'LP_Forms_Handler', 'init' ), 10 );\n+\t}\n+\n+\t\u002F**\n+\t * Get value by key from $_REQUEST\n+\t *\n+\t * @param string $key\n+\t * @param mixed $default_value\n+\t * @param string $sanitize_type\n+\t * @param string $method\n+\t *\n+\t * @since 4.1.7.2\n+\t * @version 1.0.0\n+\t * @return array|float|int|string\n+\t *\u002F\n+\tpublic static function get_param( string $key, $default_value = '', string $sanitize_type = 'text', string $method = '' ) {\n+\t\tswitch ( strtolower( $method ) ) {\n+\t\t\tcase 'post':\n+\t\t\t\t$values = $_POST ?? [];\n+\t\t\t\tbreak;\n+\t\t\tcase 'get':\n+\t\t\t\t$values = $_GET ?? [];\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$values = $_REQUEST ?? [];\n+\t\t}\n+\n+\t\treturn LP_Helper::sanitize_params_submitted( $values[ $key ] ?? $default_value, $sanitize_type );\n+\t}\n+\n+\tpublic static function get_header() {\n+\t\tob_start();\n+\t}\n+\n+\t\u002F**\n+\t * Process actions\n+\t *\n+\t * @param string $template\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function process_request( $template ) {\n+\t\tif ( ! empty( $_REQUEST ) ) {\n+\t\t\tforeach ( $_REQUEST as $key => $value ) {\n+\t\t\t\t$key   = LP_Helper::sanitize_params_submitted( $key );\n+\t\t\t\t$value = LP_Helper::sanitize_params_submitted( $value );\n+\t\t\t\tdo_action( 'learn_press_request_handler_' . $key, $value, $key );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $template;\n+\t}\n+\n+\t\u002F**\n+\t * Register new request\n+\t *\n+\t * @param string|array $action\n+\t * @param mixed $function\n+\t * @param int $priority\n+\t *\u002F\n+\tpublic static function register( $action, $function = '', $priority = 5 ) {\n+\t\tif ( is_array( $action ) ) {\n+\t\t\tforeach ( $action as $item ) {\n+\t\t\t\t$item = wp_parse_args(\n+\t\t\t\t\t$item,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'action'   => '',\n+\t\t\t\t\t\t'callback' => '',\n+\t\t\t\t\t\t'priority' => 5,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t\tif ( ! $item['action'] || ! $item['callback'] ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tlist( $action, $callback, $priority ) = array_values( $item );\n+\t\t\t\tadd_action( 'learn_press_request_handler_' . $action, $callback, $priority, 2 );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tadd_action( 'learn_press_request_handler_' . $action, $function, $priority, 2 );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Register ajax action.\n+\t * Add ajax into queue by an action and then LP check if there is a request\n+\t * with key lp-ajax=action-name then do the action \"action-name\". By default,\n+\t * ajax action is called if user is logged. But, it can be call in case user\n+\t * is not logged in if the action is passed with key :nopriv at the end.\n+\t *\n+\t * E.g:\n+\t *      + Only for user is logged in\n+\t *      LP_Request::register_ajax( 'action', 'function_to_call', 5 )\n+\t *\n+\t *      + For guest\n+\t *      LP_Request::register_ajax( 'action:nopriv', 'function_to_call', 5 )\n+\t *\n+\t * @param string $action\n+\t * @param mixed $function\n+\t * @param int $priority\n+\t *\u002F\n+\tpublic static function register_ajax( $action, $function, $priority = 5 ) {\n+\t\tif ( is_array( $action ) ) {\n+\t\t\tforeach ( $action as $args ) {\n+\t\t\t\tif ( ! empty( $args['action'] ) && ! empty( $args['callback'] ) ) {\n+\t\t\t\t\tself::register_ajax( $args['action'], $args['callback'], ! empty( $args['priority'] ) ? $args['priority'] : 5 );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\t\t$actions = self::parse_action( $action );\n+\n+\t\tif ( isset( $actions['nonce'] ) ) {\n+\t\t\tadd_filter( 'learn-press\u002Fajax\u002Fverify-none\u002F' . $actions['action'], array( __CLASS__, 'verify_nonce' ) );\n+\t\t}\n+\n+\t\tadd_action( 'learn-press\u002Fajax\u002F' . $actions['action'], $function, $priority );\n+\n+\t\t\u002F**\n+\t\t * No requires logged in?\n+\t\t *\u002F\n+\t\tif ( isset( $actions['nopriv'] ) ) {\n+\t\t\tadd_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $actions['action'], $function, $priority );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Do ajax if there is a 'lp-ajax' in $_REQUEST\n+\t *\n+\t * @param string $action\n+\t *\u002F\n+\tpublic static function do_ajax( $action ) {\n+\n+\t\tif ( ! defined( 'LP_DOING_AJAX' ) ) {\n+\t\t\tdefine( 'LP_DOING_AJAX', true );\n+\t\t}\n+\n+\t\t\u002F\u002FLP_Gateways::instance()->get_available_payment_gateways();\n+\n+\t\tif ( has_filter( 'learn-press\u002Fajax\u002Fverify-none\u002F' . $action ) ) {\n+\t\t\tif ( ! self::verify_nonce( $action ) ) {\n+\t\t\t\tdie( '0' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( is_user_logged_in() ) {\n+\t\t\t$has_action = has_action( 'learn-press\u002Fajax\u002F' . $action );\n+\n+\t\t\t\u002F**\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fajax\u002F' . $action );\n+\t\t} else {\n+\n+\t\t\t$has_action = has_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $action );\n+\n+\t\t\t\u002F**\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fajax\u002Fno-priv\u002F' . $action );\n+\t\t}\n+\n+\t\tif ( $has_action && self::$ajax_shutdown ) {\n+\t\t\tdie( '{END_AJAX}' );\n+\t\t}\n+\t}\n+\n+\tpublic static function verify_nonce( $action, $nonce = '' ) {\n+\t\treturn wp_verify_nonce( $nonce ? $nonce : self::get_param( \"{$action}-nonce\" ), $action );\n+\t}\n+\n+\tpublic static function parse_action( $action ) {\n+\t\t$args    = explode( ':', $action );\n+\t\t$actions = array(\n+\t\t\t'action' => $args[0],\n+\t\t);\n+\n+\t\tif ( sizeof( $args ) > 1 ) {\n+\t\t\tarray_shift( $args );\n+\t\t\tforeach ( $args as $arg ) {\n+\t\t\t\t$actions[ $arg ] = $arg;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $actions;\n+\t}\n+\n+\t\u002F**\n+\t * Get variable value from Server environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $type\n+\t * @param string $env\n+\t *\n+\t * @return mixed\n+\t * @deprecated 4.2.1\n+\t *\u002F\n+\tpublic static function get( $var, $default = false, $type = '', $env = 'request' ) {\n+\t\tswitch ( strtolower( $env ) ) {\n+\t\t\tcase 'post':\n+\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_POST );\n+\t\t\t\tbreak;\n+\t\t\tcase 'get':\n+\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_GET );\n+\t\t\t\tbreak;\n+\t\t\tcase 'put':\n+\t\t\tcase 'delete':\n+\t\t\t\t$data = file_get_contents( 'php:\u002F\u002Finput' );\n+\t\t\t\t$env  = array();\n+\t\t\t\tparse_str( $data, $env );\n+\t\t\t\tbreak;\n+\t\t\tcase 'wp':\n+\t\t\t\tglobal $wp;\n+\t\t\t\t$env = $wp->query_vars;\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$env = LP_Helper::sanitize_params_submitted( $_REQUEST );\n+\t\t}\n+\n+\t\t$return = array_key_exists( $var, $env ) ? $env[ $var ] : $default;\n+\t\tswitch ( $type ) {\n+\t\t\tcase 'int':\n+\t\t\t\t$return = intval( $return );\n+\t\t\t\tbreak;\n+\t\t\tcase 'float':\n+\t\t\t\t$return = floatval( $return );\n+\t\t\t\tbreak;\n+\t\t\tcase 'bool':\n+\t\t\t\ttry {\n+\t\t\t\t\t$value = strtolower( $return );\n+\t\t\t\t} catch ( Exception $e ) {\n+\t\t\t\t\t$value = $return;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( in_array( $value, array( 'true', 'yes', 'on', 'enable' ) ) ) {\n+\t\t\t\t\t$return = true;\n+\t\t\t\t} elseif ( in_array( $value, array( 'false', 'no', 'off', 'disable' ) ) ) {\n+\t\t\t\t\t$return = false;\n+\t\t\t\t} else {\n+\t\t\t\t\t$return = ! ! $return;\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tcase 'string':\n+\t\t\t\t$return = (string) $return;\n+\t\t\t\tbreak;\n+\t\t\tcase 'array':\n+\t\t\t\t$return = $return ? (array) $return : array();\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\tLP_Helper::sanitize_params_submitted( $return );\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Get value int from environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $env\n+\t *\n+\t * @return int\n+\t * @deprecated\n+\t *\u002F\n+\tpublic static function get_int( $var, $default = false, $env = 'request' ) {\n+\t\treturn self::get( $var, $default, 'int', $env );\n+\t}\n+\n+\t\u002F**\n+\t * Get value float from environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $env\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic static function get_float( $var, $default = false, $env = 'request' ) {\n+\t\treturn self::get( $var, $default, 'float', $env );\n+\t}\n+\n+\t\u002F**\n+\t * Get value bool from environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $env\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function get_bool( $var, $default = false, $env = 'request' ) {\n+\t\treturn self::get( $var, $default, 'bool', $env );\n+\t}\n+\n+\t\u002F**\n+\t * Get value string from environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $env\n+\t *\n+\t * @return string\n+\t * @deprecated 4.2.7.4\n+\t *\u002F\n+\tpublic static function get_string( $var, $default = false, $env = 'request' ) {\n+\t\treturn self::get( $var, $default, 'string', $env );\n+\t}\n+\n+\t\u002F**\n+\t * Get value array from environment.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t * @param string $env\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_array( $var, $default = false, $env = 'request' ) {\n+\t\treturn self::get( $var, $default, 'array', $env );\n+\t}\n+\n+\t\u002F**\n+\t * Get value from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic static function get_post( $var, $default = false, $type = '' ) {\n+\t\treturn self::get( $var, $default, $type, 'post' );\n+\t}\n+\n+\t\u002F**\n+\t * Get value int from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function get_post_int( $var, $default = false ) {\n+\t\treturn self::get_post( $var, $default, 'int' );\n+\t}\n+\n+\t\u002F**\n+\t * Get value float from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic static function get_post_float( $var, $default = false ) {\n+\t\treturn self::get_post( $var, $default, 'float' );\n+\t}\n+\n+\t\u002F**\n+\t * Get value bool from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function get_post_bool( $var, $default = false ) {\n+\t\treturn self::get_post( $var, $default, 'bool' );\n+\t}\n+\n+\t\u002F**\n+\t * Get value string from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_post_string( $var, $default = false ) {\n+\t\treturn self::get_post( $var, $default, 'string' );\n+\t}\n+\n+\t\u002F**\n+\t * Get value array from $_POST.\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_post_array( $var, $default = false ) {\n+\t\treturn self::get_post( $var, $default, 'array' );\n+\t}\n+\n+\t\u002F**\n+\t * Get email field and validate.\n+\t *\n+\t * @param string $var\n+\t * @param bool $default\n+\t *\n+\t * @return bool|string\n+\t *\u002F\n+\tpublic static function get_email( $var, $default = false ) {\n+\t\t$email = self::get_string( $var, $default );\n+\t\tif ( ! is_email( $email ) ) {\n+\t\t\t$email = $default;\n+\t\t}\n+\n+\t\treturn $email;\n+\t}\n+\n+\t\u002F**\n+\t * Get a batch of params from request into an array.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_list() {\n+\t\tif ( func_num_args() \u003C 1 ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t$list = array();\n+\t\tforeach ( func_get_args() as $key ) {\n+\t\t\t$list[ $key ] = self::get( $key );\n+\t\t}\n+\n+\t\treturn $list;\n+\t}\n+\n+\t\u002F**\n+\t * Parse string from request to array by comma.\n+\t *\n+\t * @param string $var\n+\t * @param string $separator\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_list_array( $var, $separator = ',' ) {\n+\t\t$list = self::get_string( $var );\n+\n+\t\tif ( ! $list ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\tif ( $separator === ',' ) {\n+\t\t\t$list = preg_split( '!\\s?,\\s?!', $list );\n+\t\t} else {\n+\t\t\t$list = explode( $separator, $list );\n+\t\t}\n+\n+\t\treturn array_map( 'trim', $list );\n+\t}\n+\n+\t\u002F**\n+\t * Get param 'redirect' in request.\n+\t *\n+\t * @param string $default\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_redirect( $default = '' ) {\n+\t\t$redirect = self::get_string( 'redirect' );\n+\n+\t\tif ( $redirect ) {\n+\t\t\t$redirect = urldecode( $redirect );\n+\t\t} else {\n+\t\t\t$redirect = $default;\n+\t\t}\n+\n+\t\treturn $redirect;\n+\t}\n+\n+\tpublic static function get_cookie( $name, $def = false, $global = false ) {\n+\t\treturn $_COOKIE[ $name ] ?? $def;\n+\t}\n+\n+\t\u002F*public static function set_cookie( $name, $value, $expires = '', $domain = '', $path = '', $secure = false ) {\n+\t\tif ( func_num_args() > 2 ) {\n+\t\t\tlearn_press_setcookie( $name, $value, $expires, $secure );\n+\t\t} else {\n+\t\t\t$cookie = isset( $_COOKIE['LP'] ) ? maybe_unserialize( $_COOKIE['LP'] ) : array();\n+\n+\t\t\t$cookie[ $name ] = $value;\n+\t\t\tlearn_press_setcookie( 'LP', $value );\n+\t\t}\n+\t}*\u002F\n+}\n+\n+LP_Request::init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-session-handler.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-session-handler.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-session-handler.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-session-handler.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,440 +1,440 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Session_Handler\r\n- *\r\n- * Only set COOKIE for user guest\r\n- *\u002F\r\n-class LP_Session_Handler {\r\n-\t\u002F**\r\n-\t * @var string $_customer_id\r\n-\t *\u002F\r\n-\tpublic $_customer_id = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var array $_data\r\n-\t *\u002F\r\n-\tprotected $_data = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var bool $_changed\r\n-\t *\u002F\r\n-\tprotected $_changed = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var string cookie name\r\n-\t *\u002F\r\n-\tprivate $_cookie = 'lp_session_guest';\r\n-\r\n-\t\u002F**\r\n-\t * @var int session expiration timestamp\r\n-\t *\u002F\r\n-\tprivate $_session_expiration = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprivate static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Session_Handler constructor.\r\n-\t *\r\n-\t * @version 3.2.2\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$this->init_hooks();\r\n-\t\tif ( is_admin() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->init();\r\n-\t}\r\n-\r\n-\tprotected function init_hooks() {\r\n-\t\tadd_action( 'wp_login', [ $this, 'handle_when_user_login_success' ], 10, 2 );\r\n-\t\tadd_action( 'wp_logout', array( $this, 'destroy_session' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set COOKIE for only user guest\r\n-\t * Set data: customer_id, session_expiration\r\n-\t *\r\n-\t * @return self\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.3\r\n-\t * @modify Tungnx\r\n-\t *\u002F\r\n-\tprotected function init(): LP_Session_Handler {\r\n-\t\t$expire_time_for_guest = DAY_IN_SECONDS;\r\n-\t\t$expire_time_for_user  = 6 * DAY_IN_SECONDS;\r\n-\r\n-\t\t\u002F\u002F Set data for user Guest.\r\n-\t\tif ( ! is_user_logged_in() ) { \u002F\u002F Generate data and set cookie for guest\r\n-\t\t\t$this->set_session_expiration( $expire_time_for_guest );\r\n-\r\n-\t\t\tif ( LP_Settings::is_store_ip_customer() ) {\r\n-\t\t\t\t$this->_customer_id = LP_Helper::get_client_ip();\r\n-\t\t\t} else { \u002F\u002F Store data in COOKIE\r\n-\t\t\t\t$cookie = $this->get_cookie_data();\r\n-\t\t\t\t\u002F\u002F If cookie exists, set data from cookie for guest\r\n-\t\t\t\tif ( empty( $cookie ) ) {\r\n-\t\t\t\t\t\u002F\u002F Create new cookie and session for user Guest.\r\n-\t\t\t\t\t$this->_customer_id = apply_filters( 'lp\u002Fcookie\u002Fguest-id', 'g-' . uniqid() );\r\n-\t\t\t\t\t$this->set_customer_session_cookie();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$this->_customer_id = $cookie;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else { \u002F\u002F Set data for user logged.\r\n-\t\t\t$this->set_session_expiration( $expire_time_for_user );\r\n-\t\t\t$this->_customer_id = get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get session data from DB.\r\n-\t\t$this->_data = $this->get_session_data();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle when user logged in.\r\n-\t *\r\n-\t * @param $user_name\r\n-\t * @param $user\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function handle_when_user_login_success( $user_name, $user ) {\r\n-\t\t\u002F\u002F Remove COOKIE for user guest.\r\n-\t\tlearn_press_remove_cookie( $this->_cookie );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Must set wp_set_current_user to get_current_user_id and is_user_logged_in work correctly.\r\n-\t\t * Because WP note must do that.\r\n-\t\t * Read more @see wp_signon\r\n-\t\t * If version WP after run correctly, remove wp_set_current_user.\r\n-\t\t *\u002F\r\n-\t\twp_set_current_user( $user->ID );\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete session of user guest before.\r\n-\t\t *\u002F\r\n-\t\tif ( $user_id ) {\r\n-\t\t\t$customer_id = $this->get_customer_id();\r\n-\t\t\t$user_before = get_user_by( 'ID', $customer_id );\r\n-\t\t\tif ( ! $user_before ) {\r\n-\t\t\t\t$this->delete_session( $customer_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_customer_id = $user_id;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set cookie for user guest.\r\n-\t *\r\n-\t * @return LP_Session_Handler\r\n-\t *\u002F\r\n-\tpublic function set_customer_session_cookie(): LP_Session_Handler {\r\n-\t\t\u002F\u002F Set the cookie\r\n-\t\tif ( ! isset( $_COOKIE[ $this->_cookie ] ) ) {\r\n-\t\t\tlearn_press_setcookie( $this->_cookie, $this->_customer_id, $this->_session_expiration );\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set session expiration.\r\n-\t *\r\n-\t * @param int $duration\r\n-\t *\r\n-\t * @return LP_Session_Handler\r\n-\t *\u002F\r\n-\tpublic function set_session_expiration( int $duration = 0 ): LP_Session_Handler {\r\n-\t\t$this->_session_expiration = time() + $duration;\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get cookie of guest.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_cookie_data(): string {\r\n-\t\tif ( empty( $_COOKIE[ $this->_cookie ] ) || ! is_string( $_COOKIE[ $this->_cookie ] ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\treturn $_COOKIE[ $this->_cookie ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get session data\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_session_data(): array {\r\n-\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t$customer_id = get_current_user_id();\r\n-\t\t} else {\r\n-\t\t\t$customer_id = $this->get_customer_id();\r\n-\t\t}\r\n-\r\n-\t\treturn (array) $this->get_session_by_customer_id( (string) $customer_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save session data to the database.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @version 4.0.1\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function save_data(): bool {\r\n-\t\t$res = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_session_db = LP_Sessions_DB::getInstance();\r\n-\r\n-\t\t\t\u002F\u002F Check exists on DB.\r\n-\t\t\t$filter              = new LP_Session_filter();\r\n-\t\t\t$filter->collection  = $lp_session_db->tb_lp_sessions;\r\n-\t\t\t$filter->field_count = 'session_id';\r\n-\t\t\t$filter->limit       = 1;\r\n-\t\t\t$filter->where[]     = $lp_session_db->wpdb->prepare( 'AND session_key = %s', $this->_customer_id );\r\n-\t\t\t$get                 = $lp_session_db->execute( $filter );\r\n-\r\n-\t\t\t$data = [\r\n-\t\t\t\t'session_key'    => (string) $this->_customer_id,\r\n-\t\t\t\t'session_value'  => maybe_serialize( $this->_data ),\r\n-\t\t\t\t'session_expiry' => $this->_session_expiration,\r\n-\t\t\t];\r\n-\t\t\tif ( ! empty( $get ) ) {\r\n-\t\t\t\t\u002F\u002F Update\r\n-\t\t\t\t$lp_session_db->wpdb->update(\r\n-\t\t\t\t\t$lp_session_db->tb_lp_sessions,\r\n-\t\t\t\t\t$data,\r\n-\t\t\t\t\t[ 'session_key' => $this->_customer_id ],\r\n-\t\t\t\t\t[ '%s', '%s', '%d' ],\r\n-\t\t\t\t\t[ '%s' ]\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Insert\r\n-\t\t\t\t$lp_session_db->wpdb->insert(\r\n-\t\t\t\t\t$lp_session_db->tb_lp_sessions,\r\n-\t\t\t\t\t$data,\r\n-\t\t\t\t\t[ '%s', '%s', '%d' ]\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Clear cache.\r\n-\t\t\tLP_Session_Cache::instance()->clear( $this->_customer_id );\r\n-\r\n-\t\t\t$res = true;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $res;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Destroy session.\r\n-\t *\u002F\r\n-\tpublic function destroy_session() {\r\n-\t\t\u002F\u002F Clear cookie.\r\n-\t\tif ( ! empty( $this->_cookie ) ) {\r\n-\t\t\tlearn_press_remove_cookie( $this->_cookie );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear session expire.\r\n-\t\t$this->cleanup_sessions_expire();\r\n-\r\n-\t\t$logout_redirect_page_id = LP_Settings::get_option( 'logout_redirect_page_id' );\r\n-\t\tif ( $logout_redirect_page_id ) {\r\n-\t\t\twp_safe_redirect( get_the_permalink( $logout_redirect_page_id ) );\r\n-\t\t\tdie;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear session expired.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function cleanup_sessions_expire(): bool {\r\n-\t\t$res           = true;\r\n-\t\t$lp_session_db = LP_Sessions_DB::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Get session expired.\r\n-\t\t\t$filter_get          = new LP_Session_Filter();\r\n-\t\t\t$filter_get->where[] = $lp_session_db->wpdb->prepare( 'AND session_expiry \u003C %d', time() );\r\n-\t\t\t$sessions            = $lp_session_db->get_sessions( $filter_get );\r\n-\t\t\t\u002F\u002F Clear cache.\r\n-\t\t\tforeach ( $sessions as $session ) {\r\n-\t\t\t\tLP_Session_Cache::instance()->clear( $session->session_key );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete session expired.\r\n-\t\t\t$filter             = new LP_Session_Filter();\r\n-\t\t\t$filter->collection = $lp_session_db->tb_lp_sessions;\r\n-\t\t\t$filter->where[]    = $lp_session_db->wpdb->prepare( 'AND session_expiry \u003C %d', time() );\r\n-\t\t\t$lp_session_db->delete_execute( $filter );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$res = false;\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $res;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get session on DB.\r\n-\t *\r\n-\t * @param string $customer_id\r\n-\t *\r\n-\t * @return false|mixed|string\r\n-\t * @Todo - Tungnx should handle data when save type json instead serialize.\r\n-\t *\u002F\r\n-\tpublic function get_session_by_customer_id( string $customer_id = '' ) {\r\n-\t\t$lp_session_db = LP_Sessions_DB::getInstance();\r\n-\t\t$session       = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Get cache.\r\n-\t\t\t$session_cache = LP_Session_Cache::instance();\r\n-\t\t\t$key_cache     = $customer_id;\r\n-\t\t\t$session       = $session_cache->get_cache( $key_cache );\r\n-\t\t\tif ( $session !== false ) {\r\n-\t\t\t\treturn $session;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter                  = new LP_Session_Filter();\r\n-\t\t\t$filter->session_key     = $customer_id;\r\n-\t\t\t$filter->only_fields     = [ 'session_key', 'session_value' ];\r\n-\t\t\t$filter->field_count     = 'session_key';\r\n-\t\t\t$filter->run_query_count = false;\r\n-\t\t\t$filter->limit           = 1;\r\n-\t\t\t$res                     = $lp_session_db->get_sessions( $filter );\r\n-\t\t\tif ( ! empty( $res ) ) {\r\n-\t\t\t\t$session = $res[0]->session_value;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$session = LP_Helper::maybe_unserialize( $session );\r\n-\t\t\t\u002F\u002F Set cache.\r\n-\t\t\t$session_cache->set_cache( $key_cache, $session );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $session;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete session by customer_id on DB.\r\n-\t *\r\n-\t * @param string $customer_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function delete_session( string $customer_id ): bool {\r\n-\t\tglobal $wpdb;\r\n-\t\t$rs = true;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$wpdb->delete(\r\n-\t\t\t\tLP_Sessions_DB::getInstance()->tb_lp_sessions,\r\n-\t\t\t\t[ 'session_key' => $customer_id ],\r\n-\t\t\t\t[ '%s' ]\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F Clear cache.\r\n-\t\t\tLP_Session_Cache::instance()->clear( $customer_id );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$rs = false;\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $rs;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get session value.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed  $default\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t *\u002F\r\n-\tpublic function get( string $key, $default = null ) {\r\n-\t\treturn isset( $this->_data[ $key ] ) ? LP_Helper::maybe_unserialize( $this->_data[ $key ] ) : $default;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set session value.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $value\r\n-\t * @param bool $force_change\r\n-\t *\u002F\r\n-\tpublic function set( string $key, $value, bool $force_change = false ) {\r\n-\t\t$this->_data[ sanitize_key( $key ) ] = maybe_serialize( $value );\r\n-\r\n-\t\tif ( $force_change ) {\r\n-\t\t\t$this->save_data();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove a value from session by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param bool   $force_change\r\n-\t *\u002F\r\n-\tpublic function remove( string $key, bool $force_change = false ) {\r\n-\t\tif ( ! array_key_exists( $key, $this->_data ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tunset( $this->_data[ $key ] );\r\n-\r\n-\t\tif ( $force_change ) {\r\n-\t\t\t$this->save_data();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get customer id.\r\n-\t *\u002F\r\n-\tpublic function get_customer_id(): string {\r\n-\t\treturn (string) $this->_customer_id;\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * @param      $key\r\n- * @param null $default\r\n- *\r\n- * @return array|string\r\n- *\u002F\r\n-function learn_press_session_get( $key, $default = null ) {\r\n-\treturn LP_Session_Handler::instance()->get( $key, $default );\r\n-}\r\n-\r\n-\u002F**\r\n- * @param $key\r\n- * @param $value\r\n- *\u002F\r\n-function learn_press_session_set( $key, $value ) {\r\n-\tLP_Session_Handler::instance()->set( $key, $value );\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Session_Handler\n+ *\n+ * Only set COOKIE for user guest\n+ *\u002F\n+class LP_Session_Handler {\n+\t\u002F**\n+\t * @var string $_customer_id\n+\t *\u002F\n+\tpublic $_customer_id = '';\n+\n+\t\u002F**\n+\t * @var array $_data\n+\t *\u002F\n+\tprotected $_data = array();\n+\n+\t\u002F**\n+\t * @var bool $_changed\n+\t *\u002F\n+\tprotected $_changed = false;\n+\n+\t\u002F**\n+\t * @var string cookie name\n+\t *\u002F\n+\tprivate $_cookie = 'lp_session_guest';\n+\n+\t\u002F**\n+\t * @var int session expiration timestamp\n+\t *\u002F\n+\tprivate $_session_expiration = 0;\n+\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprivate static $_instance = null;\n+\n+\t\u002F**\n+\t * LP_Session_Handler constructor.\n+\t *\n+\t * @version 3.2.2\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$this->init_hooks();\n+\t\tif ( is_admin() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->init();\n+\t}\n+\n+\tprotected function init_hooks() {\n+\t\tadd_action( 'wp_login', [ $this, 'handle_when_user_login_success' ], 10, 2 );\n+\t\tadd_action( 'wp_logout', array( $this, 'destroy_session' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Set COOKIE for only user guest\n+\t * Set data: customer_id, session_expiration\n+\t *\n+\t * @return self\n+\t * @since 3.0.0\n+\t * @version 4.0.3\n+\t * @modify Tungnx\n+\t *\u002F\n+\tprotected function init(): LP_Session_Handler {\n+\t\t$expire_time_for_guest = DAY_IN_SECONDS;\n+\t\t$expire_time_for_user  = 6 * DAY_IN_SECONDS;\n+\n+\t\t\u002F\u002F Set data for user Guest.\n+\t\tif ( ! is_user_logged_in() ) { \u002F\u002F Generate data and set cookie for guest\n+\t\t\t$this->set_session_expiration( $expire_time_for_guest );\n+\n+\t\t\tif ( LP_Settings::is_store_ip_customer() ) {\n+\t\t\t\t$this->_customer_id = LP_Helper::get_client_ip();\n+\t\t\t} else { \u002F\u002F Store data in COOKIE\n+\t\t\t\t$cookie = $this->get_cookie_data();\n+\t\t\t\t\u002F\u002F If cookie exists, set data from cookie for guest\n+\t\t\t\tif ( empty( $cookie ) ) {\n+\t\t\t\t\t\u002F\u002F Create new cookie and session for user Guest.\n+\t\t\t\t\t$this->_customer_id = apply_filters( 'lp\u002Fcookie\u002Fguest-id', 'g-' . uniqid() );\n+\t\t\t\t\t$this->set_customer_session_cookie();\n+\t\t\t\t} else {\n+\t\t\t\t\t$this->_customer_id = $cookie;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else { \u002F\u002F Set data for user logged.\n+\t\t\t$this->set_session_expiration( $expire_time_for_user );\n+\t\t\t$this->_customer_id = get_current_user_id();\n+\t\t}\n+\n+\t\t\u002F\u002F Get session data from DB.\n+\t\t$this->_data = $this->get_session_data();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Handle when user logged in.\n+\t *\n+\t * @param $user_name\n+\t * @param $user\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function handle_when_user_login_success( $user_name, $user ) {\n+\t\t\u002F\u002F Remove COOKIE for user guest.\n+\t\tlearn_press_remove_cookie( $this->_cookie );\n+\n+\t\t\u002F**\n+\t\t * Must set wp_set_current_user to get_current_user_id and is_user_logged_in work correctly.\n+\t\t * Because WP note must do that.\n+\t\t * Read more @see wp_signon\n+\t\t * If version WP after run correctly, remove wp_set_current_user.\n+\t\t *\u002F\n+\t\twp_set_current_user( $user->ID );\n+\t\t$user_id = get_current_user_id();\n+\n+\t\t\u002F**\n+\t\t * Delete session of user guest before.\n+\t\t *\u002F\n+\t\tif ( $user_id ) {\n+\t\t\t$customer_id = $this->get_customer_id();\n+\t\t\t$user_before = get_user_by( 'ID', $customer_id );\n+\t\t\tif ( ! $user_before ) {\n+\t\t\t\t$this->delete_session( $customer_id );\n+\t\t\t}\n+\n+\t\t\t$this->_customer_id = $user_id;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set cookie for user guest.\n+\t *\n+\t * @return LP_Session_Handler\n+\t *\u002F\n+\tpublic function set_customer_session_cookie(): LP_Session_Handler {\n+\t\t\u002F\u002F Set the cookie\n+\t\tif ( ! isset( $_COOKIE[ $this->_cookie ] ) ) {\n+\t\t\tlearn_press_setcookie( $this->_cookie, $this->_customer_id, $this->_session_expiration );\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Set session expiration.\n+\t *\n+\t * @param int $duration\n+\t *\n+\t * @return LP_Session_Handler\n+\t *\u002F\n+\tpublic function set_session_expiration( int $duration = 0 ): LP_Session_Handler {\n+\t\t$this->_session_expiration = time() + $duration;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get cookie of guest.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_cookie_data(): string {\n+\t\tif ( empty( $_COOKIE[ $this->_cookie ] ) || ! is_string( $_COOKIE[ $this->_cookie ] ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\treturn $_COOKIE[ $this->_cookie ];\n+\t}\n+\n+\t\u002F**\n+\t * Get session data\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_session_data(): array {\n+\t\tif ( is_user_logged_in() ) {\n+\t\t\t$customer_id = get_current_user_id();\n+\t\t} else {\n+\t\t\t$customer_id = $this->get_customer_id();\n+\t\t}\n+\n+\t\treturn (array) $this->get_session_by_customer_id( (string) $customer_id );\n+\t}\n+\n+\t\u002F**\n+\t * Save session data to the database.\n+\t *\n+\t * @return bool\n+\t * @version 4.0.1\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function save_data(): bool {\n+\t\t$res = false;\n+\n+\t\ttry {\n+\t\t\t$lp_session_db = LP_Sessions_DB::getInstance();\n+\n+\t\t\t\u002F\u002F Check exists on DB.\n+\t\t\t$filter              = new LP_Session_filter();\n+\t\t\t$filter->collection  = $lp_session_db->tb_lp_sessions;\n+\t\t\t$filter->field_count = 'session_id';\n+\t\t\t$filter->limit       = 1;\n+\t\t\t$filter->where[]     = $lp_session_db->wpdb->prepare( 'AND session_key = %s', $this->_customer_id );\n+\t\t\t$get                 = $lp_session_db->execute( $filter );\n+\n+\t\t\t$data = [\n+\t\t\t\t'session_key'    => (string) $this->_customer_id,\n+\t\t\t\t'session_value'  => maybe_serialize( $this->_data ),\n+\t\t\t\t'session_expiry' => $this->_session_expiration,\n+\t\t\t];\n+\t\t\tif ( ! empty( $get ) ) {\n+\t\t\t\t\u002F\u002F Update\n+\t\t\t\t$lp_session_db->wpdb->update(\n+\t\t\t\t\t$lp_session_db->tb_lp_sessions,\n+\t\t\t\t\t$data,\n+\t\t\t\t\t[ 'session_key' => $this->_customer_id ],\n+\t\t\t\t\t[ '%s', '%s', '%d' ],\n+\t\t\t\t\t[ '%s' ]\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Insert\n+\t\t\t\t$lp_session_db->wpdb->insert(\n+\t\t\t\t\t$lp_session_db->tb_lp_sessions,\n+\t\t\t\t\t$data,\n+\t\t\t\t\t[ '%s', '%s', '%d' ]\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Clear cache.\n+\t\t\tLP_Session_Cache::instance()->clear( $this->_customer_id );\n+\n+\t\t\t$res = true;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $res;\n+\t}\n+\n+\t\u002F**\n+\t * Destroy session.\n+\t *\u002F\n+\tpublic function destroy_session() {\n+\t\t\u002F\u002F Clear cookie.\n+\t\tif ( ! empty( $this->_cookie ) ) {\n+\t\t\tlearn_press_remove_cookie( $this->_cookie );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear session expire.\n+\t\t$this->cleanup_sessions_expire();\n+\n+\t\t$logout_redirect_page_id = LP_Settings::get_option( 'logout_redirect_page_id' );\n+\t\tif ( $logout_redirect_page_id ) {\n+\t\t\twp_safe_redirect( get_the_permalink( $logout_redirect_page_id ) );\n+\t\t\tdie;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Clear session expired.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function cleanup_sessions_expire(): bool {\n+\t\t$res           = true;\n+\t\t$lp_session_db = LP_Sessions_DB::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Get session expired.\n+\t\t\t$filter_get          = new LP_Session_Filter();\n+\t\t\t$filter_get->where[] = $lp_session_db->wpdb->prepare( 'AND session_expiry \u003C %d', time() );\n+\t\t\t$sessions            = $lp_session_db->get_sessions( $filter_get );\n+\t\t\t\u002F\u002F Clear cache.\n+\t\t\tforeach ( $sessions as $session ) {\n+\t\t\t\tLP_Session_Cache::instance()->clear( $session->session_key );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete session expired.\n+\t\t\t$filter             = new LP_Session_Filter();\n+\t\t\t$filter->collection = $lp_session_db->tb_lp_sessions;\n+\t\t\t$filter->where[]    = $lp_session_db->wpdb->prepare( 'AND session_expiry \u003C %d', time() );\n+\t\t\t$lp_session_db->delete_execute( $filter );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$res = false;\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $res;\n+\t}\n+\n+\t\u002F**\n+\t * Get session on DB.\n+\t *\n+\t * @param string $customer_id\n+\t *\n+\t * @return false|mixed|string\n+\t * @Todo - Tungnx should handle data when save type json instead serialize.\n+\t *\u002F\n+\tpublic function get_session_by_customer_id( string $customer_id = '' ) {\n+\t\t$lp_session_db = LP_Sessions_DB::getInstance();\n+\t\t$session       = [];\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Get cache.\n+\t\t\t$session_cache = LP_Session_Cache::instance();\n+\t\t\t$key_cache     = $customer_id;\n+\t\t\t$session       = $session_cache->get_cache( $key_cache );\n+\t\t\tif ( $session !== false ) {\n+\t\t\t\treturn $session;\n+\t\t\t}\n+\n+\t\t\t$filter                  = new LP_Session_Filter();\n+\t\t\t$filter->session_key     = $customer_id;\n+\t\t\t$filter->only_fields     = [ 'session_key', 'session_value' ];\n+\t\t\t$filter->field_count     = 'session_key';\n+\t\t\t$filter->run_query_count = false;\n+\t\t\t$filter->limit           = 1;\n+\t\t\t$res                     = $lp_session_db->get_sessions( $filter );\n+\t\t\tif ( ! empty( $res ) ) {\n+\t\t\t\t$session = $res[0]->session_value;\n+\t\t\t}\n+\n+\t\t\t$session = LP_Helper::maybe_unserialize( $session );\n+\t\t\t\u002F\u002F Set cache.\n+\t\t\t$session_cache->set_cache( $key_cache, $session );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $session;\n+\t}\n+\n+\t\u002F**\n+\t * Delete session by customer_id on DB.\n+\t *\n+\t * @param string $customer_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function delete_session( string $customer_id ): bool {\n+\t\tglobal $wpdb;\n+\t\t$rs = true;\n+\n+\t\ttry {\n+\t\t\t$wpdb->delete(\n+\t\t\t\tLP_Sessions_DB::getInstance()->tb_lp_sessions,\n+\t\t\t\t[ 'session_key' => $customer_id ],\n+\t\t\t\t[ '%s' ]\n+\t\t\t);\n+\t\t\t\u002F\u002F Clear cache.\n+\t\t\tLP_Session_Cache::instance()->clear( $customer_id );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$rs = false;\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $rs;\n+\t}\n+\n+\t\u002F**\n+\t * Get session value.\n+\t *\n+\t * @param string $key\n+\t * @param mixed  $default\n+\t *\n+\t * @return mixed|null\n+\t *\u002F\n+\tpublic function get( string $key, $default = null ) {\n+\t\treturn isset( $this->_data[ $key ] ) ? LP_Helper::maybe_unserialize( $this->_data[ $key ] ) : $default;\n+\t}\n+\n+\t\u002F**\n+\t * Set session value.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $value\n+\t * @param bool $force_change\n+\t *\u002F\n+\tpublic function set( string $key, $value, bool $force_change = false ) {\n+\t\t$this->_data[ sanitize_key( $key ) ] = maybe_serialize( $value );\n+\n+\t\tif ( $force_change ) {\n+\t\t\t$this->save_data();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Remove a value from session by key.\n+\t *\n+\t * @param string $key\n+\t * @param bool   $force_change\n+\t *\u002F\n+\tpublic function remove( string $key, bool $force_change = false ) {\n+\t\tif ( ! array_key_exists( $key, $this->_data ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tunset( $this->_data[ $key ] );\n+\n+\t\tif ( $force_change ) {\n+\t\t\t$this->save_data();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get customer id.\n+\t *\u002F\n+\tpublic function get_customer_id(): string {\n+\t\treturn (string) $this->_customer_id;\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+\u002F**\n+ * @param      $key\n+ * @param null $default\n+ *\n+ * @return array|string\n+ *\u002F\n+function learn_press_session_get( $key, $default = null ) {\n+\treturn LP_Session_Handler::instance()->get( $key, $default );\n+}\n+\n+\u002F**\n+ * @param $key\n+ * @param $value\n+ *\u002F\n+function learn_press_session_set( $key, $value ) {\n+\tLP_Session_Handler::instance()->set( $key, $value );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-settings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-settings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-settings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-settings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,506 +1,569 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Settings\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-class LP_Settings {\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_options = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_prefix = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\r\n-\t * @param array|mixed $data\r\n-\t * @param string $prefix\r\n-\t *\u002F\r\n-\tprotected function __construct( $data = false, $prefix = 'learn_press_' ) {\r\n-\t\ttry {\r\n-\t\t\t$this->_prefix = $prefix;\r\n-\r\n-\t\t\tif ( false === $data ) {\r\n-\t\t\t\t$this->_load_options();\r\n-\t\t\t} else {\r\n-\t\t\t\tsettype( $data, 'array' );\r\n-\t\t\t\t$this->_options = $data;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $group\r\n-\t * @param string $prefix\r\n-\t *\r\n-\t * @return LP_Settings\r\n-\t *\u002F\r\n-\tpublic function get_group( $group, $prefix = '' ) {\r\n-\t\t$options = ! empty( $this->_options[ $this->_prefix . $group ] ) ? $this->get( $this->_prefix . $group ) : array();\r\n-\r\n-\t\treturn new LP_Settings( $options, $prefix );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load all options.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.2\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tprotected function _load_options() {\r\n-\t\t\u002F\u002F Check cache exists\r\n-\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t$lp_options        = $lp_settings_cache->get_lp_settings();\r\n-\t\tif ( false !== $lp_options ) {\r\n-\t\t\t$this->_options = LP_Helper::json_decode( $lp_options, true );\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"SELECT option_name, option_value\r\n-\t\t\tFROM {$wpdb->options}\r\n-\t\t\tWHERE option_name LIKE %s\",\r\n-\t\t\t$wpdb->esc_like( $this->_prefix ) . '%'\r\n-\t\t);\r\n-\r\n-\t\t$options = $wpdb->get_results( $query );\r\n-\t\tif ( ! empty( $options ) ) {\r\n-\t\t\tforeach ( $options as $option ) {\r\n-\t\t\t\t$this->_options[ $option->option_name ] = LP_Helper::maybe_unserialize( $option->option_value );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set cache\r\n-\t\t\t$lp_settings_cache->set_lp_settings( json_encode( $this->_options ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set new value for a key\r\n-\t *\r\n-\t * @param $name\r\n-\t * @param $value\r\n-\t *\u002F\r\n-\tpublic function set( $name, $value ) {\r\n-\t\tif ( $this->_prefix && strpos( $name, $this->_prefix ) === false ) {\r\n-\t\t\t$name = $this->_prefix . $name;\r\n-\t\t}\r\n-\t\t$this->_set_option( $this->_options, $name, $value );\r\n-\t}\r\n-\r\n-\tprivate function _set_option( &$obj, $var, $value ) {\r\n-\t\t$var         = (array) explode( '.', $var );\r\n-\t\t$current_var = array_shift( $var );\r\n-\t\tif ( is_object( $obj ) ) {\r\n-\t\t\tif ( isset( $obj->{$current_var} ) ) {\r\n-\t\t\t\t$obj->{$current_var} = LP_Helper::maybe_unserialize( $obj->{$current_var} );\r\n-\t\t\t\tif ( count( $var ) ) {\r\n-\t\t\t\t\t$this->_set_option( $obj->{$current_var}, join( '.', $var ), $value );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$obj->{$current_var} = $value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$obj->{$current_var} = $value;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( isset( $obj[ $current_var ] ) ) {\r\n-\t\t\t\t$obj[ $current_var ] = LP_Helper::maybe_unserialize( $obj[ $current_var ] );\r\n-\t\t\t\tif ( count( $var ) ) {\r\n-\t\t\t\t\t$this->_set_option( $obj[ $current_var ], join( '.', $var ), $value );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$obj[ $current_var ] = $value;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$obj[ $current_var ] = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get option recurse separated by DOT\r\n-\t *\r\n-\t * @param string $var\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get( string $var = '', $default = null ) {\r\n-\t\tif ( empty( $var ) ) {\r\n-\t\t\treturn $this->_options;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->_prefix && strpos( $var, $this->_prefix ) === false ) {\r\n-\t\t\t$var = $this->_prefix . $var;\r\n-\t\t}\r\n-\r\n-\t\t$return = $this->_get_option( $this->_options, $var, $default );\r\n-\r\n-\t\tif ( $return == '' || is_null( $return ) ) {\r\n-\t\t\t$return = $default;\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param      $obj\r\n-\t * @param      $var\r\n-\t * @param null $default\r\n-\t *\r\n-\t * @return null\r\n-\t *\u002F\r\n-\tpublic function _get_option( $obj, $var, $default = null ) {\r\n-\t\t$var         = (array) explode( '.', $var );\r\n-\t\t$current_var = array_shift( $var );\r\n-\t\tif ( is_object( $obj ) ) {\r\n-\t\t\tif ( isset( $obj->{$current_var} ) ) {\r\n-\t\t\t\t$obj->{$current_var} = LP_Helper::maybe_unserialize( $obj->{$current_var} );\r\n-\t\t\t\tif ( count( $var ) ) {\r\n-\t\t\t\t\treturn $this->_get_option( $obj->{$current_var}, join( '.', $var ), $default );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn $obj->{$current_var};\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $default;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( isset( $obj[ $current_var ] ) ) {\r\n-\t\t\t\t$obj[ $current_var ] = LP_Helper::maybe_unserialize( $obj[ $current_var ] );\r\n-\t\t\t\tif ( count( $var ) ) {\r\n-\t\t\t\t\treturn $this->_get_option( $obj[ $current_var ], join( '.', $var ), $default );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn $obj[ $current_var ];\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $default;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function update( $key, $value = '' ) {\r\n-\t\tif ( func_num_args() == 1 ) {\r\n-\t\t\t$value = $this->get( $key );\r\n-\t\t}\r\n-\t\tupdate_option( $this->_prefix . $key, $value );\r\n-\t\t\u002F\u002F $this->refresh();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update option with default prefix is learn_press_\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param mixed $value\r\n-\t * @param string $prefix\r\n-\t *\u002F\r\n-\tpublic static function update_option( $name, $value, $prefix = 'learn_press_' ) {\r\n-\t\tupdate_option( \"{$prefix}{$name}\", $value );\r\n-\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t$lp_settings_cache->clean_lp_settings();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get option with default prefix is learn_press_\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param mixed $default\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.2.8\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic static function get_option( string $name = '', $default = false ) {\r\n-\t\t$key     = \"learn_press_{$name}\";\r\n-\t\t$options = self::instance()->_options;\r\n-\t\tif ( isset( $options[ $key ] ) ) {\r\n-\t\t\treturn $options[ $key ];\r\n-\t\t}\r\n-\r\n-\t\treturn get_option( $key, $default );\r\n-\t}\r\n-\r\n-\tpublic function get_int( $key ) {\r\n-\t\t$value = $this->get( $key );\r\n-\r\n-\t\treturn intval( $value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|LP_Settings\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get settings endpoints for checkout page.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function get_checkout_endpoints() {\r\n-\t\t$endpoints = LP_Object_Cache::get( 'checkout', 'learn-press-endpoints' );\r\n-\r\n-\t\tif ( false === $endpoints ) {\r\n-\t\t\t$defaults = array(\r\n-\t\t\t\t'lp-order-received' => 'lp-order-received',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$endpoints = array();\r\n-\t\t\t$settings  = LP_Settings::instance()->get( 'checkout_endpoints' );\r\n-\r\n-\t\t\tif ( $settings ) {\r\n-\t\t\t\tforeach ( $settings as $k => $v ) {\r\n-\t\t\t\t\t$k               = preg_replace( '!_!', '-', $k );\r\n-\t\t\t\t\t$endpoints[ $k ] = $v;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $defaults as $k => $v ) {\r\n-\t\t\t\tif ( empty( $endpoints[ $k ] ) ) {\r\n-\t\t\t\t\t$endpoints[ $k ] = $v;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Object_Cache::set( 'checkout', $endpoints, 'learn-press-endpoints' );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fendpoints\u002Fcheckout', $endpoints );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get settings endpoints for profile page.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function get_profile_endpoints() {\r\n-\t\t$endpoints = LP_Object_Cache::get( 'profile', 'learn-press-endpoints' );\r\n-\r\n-\t\tif ( false === $endpoints ) {\r\n-\t\t\t$defaults  = array();\r\n-\t\t\t$endpoints = array();\r\n-\r\n-\t\t\t$settings = LP_Settings::instance()->get( 'profile_endpoints' );\r\n-\t\t\tif ( $settings ) {\r\n-\t\t\t\tforeach ( $settings as $k => $v ) {\r\n-\t\t\t\t\t$k               = preg_replace( '!_!', '-', $k );\r\n-\t\t\t\t\t$endpoints[ $k ] = $v;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $defaults as $k => $v ) {\r\n-\t\t\t\tif ( empty( $endpoints[ $k ] ) ) {\r\n-\t\t\t\t\t$endpoints[ $k ] = $v;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Object_Cache::set( 'profile', $endpoints, 'learn-press-endpoints' );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fendpoints\u002Fprofile', $endpoints );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check setting enable option \"Auto start\"\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_auto_start_course(): bool {\r\n-\t\treturn 'yes' === self::get_option( 'auto_enroll', 'yes' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table learnpress_course is created\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_created_tb_courses(): bool {\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_courses );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table thim_cache is created\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_created_tb_thim_cache(): bool {\r\n-\t\treturn get_option( 'thim_cache_tb_created' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check enable option \"Store data in $_SESSION PHP\" instead of $_COOKIE\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_store_ip_customer(): bool {\r\n-\t\treturn self::get_option( 'store_ip_customer_session', 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table learnpress_files is created\r\n-\t * @return boolean\r\n-\t *\u002F\r\n-\tpublic static function is_created_tb_material_files(): bool {\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_files );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table learnpress_mcp_api_keys is created.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_created_tb_mcp_api_keys(): bool {\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_mcp_api_keys );\r\n-\t}\r\n-\r\n-\tpublic static function lp_material_file_types(): array {\r\n-\t\treturn array(\r\n-\t\t\t'txt'      => 'text\u002Fplain',\r\n-\t\t\t'doc,docx' => 'application\u002Fmsword,application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\r\n-\t\t\t'odt'      => 'application\u002Fvnd.oasis.opendocument.text',\r\n-\t\t\t'rtf'      => 'application\u002Frtf',\r\n-\t\t\t'pdf'      => 'application\u002Fpdf',\r\n-\t\t\t'jpg,jpeg' => 'image\u002Fjpeg',\r\n-\t\t\t'png'      => 'image\u002Fpng',\r\n-\t\t\t'gif'      => 'image\u002Fgif',\r\n-\t\t\t'bmp'      => 'image\u002Fbmp',\r\n-\t\t\t\u002F\u002F 'svg'       =>  'image\u002Fsvg+xml',\r\n-\t\t\t'mp3'      => 'audio\u002Fmpeg',\r\n-\t\t\t'wav'      => 'audio\u002Fwav',\r\n-\t\t\t'flac'     => 'audio\u002Fflac',\r\n-\t\t\t'aac'      => 'audio\u002Faac',\r\n-\t\t\t'wma'      => 'audio\u002Fx-ms-wma',\r\n-\t\t\t'mp4'      => 'video\u002Fmp4',\r\n-\t\t\t'avi'      => 'video\u002Favi',\r\n-\t\t\t'mkv'      => 'video\u002Fx-matroska',\r\n-\t\t\t'mov'      => 'video\u002Fquicktime',\r\n-\t\t\t'wmv'      => 'video\u002Fx-ms-wmv',\r\n-\t\t\t'xls,xlsx' => 'application\u002Fvnd.ms-excel,application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n-\t\t\t'ods'      => 'application\u002Fvnd.oasis.opendocument.spreadsheet',\r\n-\t\t\t'csv'      => 'text\u002Fcsv',\r\n-\t\t\t'numbers'  => 'application\u002Fvnd.apple.numbers',\r\n-\t\t\t'tsv'      => 'text\u002Ftab-separated-values',\r\n-\t\t\t'zip'      => 'application\u002Fzip,application\u002Foctet-stream,application\u002Fx-zip-compressed,multipart\u002Fx-zip',\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check theme support load courses ajax\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function theme_no_support_load_courses_ajax(): bool {\r\n-\t\t$theme_no_load_ajax = apply_filters(\r\n-\t\t\t'lp\u002Fpage\u002Fcourses\u002Fthemes\u002Fno_load_ajax',\r\n-\t\t\t[\r\n-\t\t\t\t'Coaching',\r\n-\t\t\t\t'Course Builder',\r\n-\t\t\t\t'eLearningWP',\r\n-\t\t\t\t'Ivy School',\r\n-\t\t\t\t'StarKid',\r\n-\t\t\t\t'Academy LMS',\r\n-\t\t\t\t'Coaching Child',\r\n-\t\t\t\t'Course Builder Child',\r\n-\t\t\t\t'eLearningWP Child',\r\n-\t\t\t\t'Ivy School Child',\r\n-\t\t\t\t'StarKid Child',\r\n-\t\t\t\t'Academy LMS Child',\r\n-\t\t\t]\r\n-\t\t);\r\n-\t\t$theme_current      = wp_get_theme()->get( 'Name' );\r\n-\r\n-\t\treturn in_array( $theme_current, $theme_no_load_ajax );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check theme support load courses ajax\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.3\r\n-\t *\u002F\r\n-\tpublic static function get_permalink_single_course(): string {\r\n-\t\t$course_slug_default = 'courses';\r\n-\t\ttry {\r\n-\t\t\t$course_slug = self::get_option( 'course_base', 'courses' );\r\n-\t\t\tif ( empty( $course_slug ) ) {\r\n-\t\t\t\t$course_slug = $course_slug_default;\r\n-\t\t\t}\r\n-\t\t\t$course_slug = preg_replace( '!^\u002F!', '', $course_slug );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$course_slug = $course_slug_default;\r\n-\t\t}\r\n-\r\n-\t\treturn $course_slug;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check theme support load courses ajax\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.3\r\n-\t *\u002F\r\n-\tpublic static function get_course_items_slug(): array {\r\n-\t\t\u002F**\r\n-\t\t * Set rule item course.\r\n-\t\t *\r\n-\t\t * Use urldecode to convert an encoded string to normal.\r\n-\t\t * This fixed the issue with custom slug of lesson\u002Fquiz in some languages\r\n-\t\t * Eg: урока\r\n-\t\t *\u002F\r\n-\t\t$lesson_slug = urldecode( sanitize_title_with_dashes( self::get_option( 'lesson_slug', 'lessons' ) ) );\r\n-\t\t$quiz_slug   = urldecode( sanitize_title_with_dashes( self::get_option( 'quiz_slug', 'quizzes' ) ) );\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-item-slugs\u002Ffor-rewrite-rules',\r\n-\t\t\tarray(\r\n-\t\t\t\tLP_LESSON_CPT => $lesson_slug,\r\n-\t\t\t\tLP_QUIZ_CPT   => $quiz_slug,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return url lp-ajax.php\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function url_handle_lp_ajax(): string {\r\n-\t\treturn home_url( 'lp-ajax-handle' );\r\n-\t}\r\n-}\r\n-\r\n-LP_Settings::instance();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Settings\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+class LP_Settings {\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_options = array();\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_prefix = '';\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $_instance = null;\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\n+\t * @param array|mixed $data\n+\t * @param string $prefix\n+\t *\u002F\n+\tprotected function __construct( $data = false, $prefix = 'learn_press_' ) {\n+\t\ttry {\n+\t\t\t$this->_prefix = $prefix;\n+\n+\t\t\tif ( false === $data ) {\n+\t\t\t\t$this->_load_options();\n+\t\t\t} else {\n+\t\t\t\tsettype( $data, 'array' );\n+\t\t\t\t$this->_options = $data;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param string $group\n+\t * @param string $prefix\n+\t *\n+\t * @return LP_Settings\n+\t *\u002F\n+\tpublic function get_group( $group, $prefix = '' ) {\n+\t\t$options = ! empty( $this->_options[ $this->_prefix . $group ] ) ? $this->get( $this->_prefix . $group ) : array();\n+\n+\t\treturn new LP_Settings( $options, $prefix );\n+\t}\n+\n+\t\u002F**\n+\t * Load all options.\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.2\n+\t * @since 3.0.0\n+\t *\u002F\n+\tprotected function _load_options() {\n+\t\t\u002F\u002F Check cache exists\n+\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t$lp_options        = $lp_settings_cache->get_lp_settings();\n+\t\tif ( false !== $lp_options ) {\n+\t\t\t$this->_options = LP_Helper::json_decode( $lp_options, true );\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"SELECT option_name, option_value\n+\t\t\tFROM {$wpdb->options}\n+\t\t\tWHERE option_name LIKE %s\",\n+\t\t\t$wpdb->esc_like( $this->_prefix ) . '%'\n+\t\t);\n+\n+\t\t$options = $wpdb->get_results( $query );\n+\t\tif ( ! empty( $options ) ) {\n+\t\t\tforeach ( $options as $option ) {\n+\t\t\t\t$this->_options[ $option->option_name ] = LP_Helper::maybe_unserialize( $option->option_value );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set cache\n+\t\t\t$lp_settings_cache->set_lp_settings( json_encode( $this->_options ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set new value for a key\n+\t *\n+\t * @param $name\n+\t * @param $value\n+\t *\u002F\n+\tpublic function set( $name, $value ) {\n+\t\tif ( $this->_prefix && strpos( $name, $this->_prefix ) === false ) {\n+\t\t\t$name = $this->_prefix . $name;\n+\t\t}\n+\t\t$this->_set_option( $this->_options, $name, $value );\n+\t}\n+\n+\tprivate function _set_option( &$obj, $var, $value ) {\n+\t\t$var         = (array) explode( '.', $var );\n+\t\t$current_var = array_shift( $var );\n+\t\tif ( is_object( $obj ) ) {\n+\t\t\tif ( isset( $obj->{$current_var} ) ) {\n+\t\t\t\t$obj->{$current_var} = LP_Helper::maybe_unserialize( $obj->{$current_var} );\n+\t\t\t\tif ( count( $var ) ) {\n+\t\t\t\t\t$this->_set_option( $obj->{$current_var}, join( '.', $var ), $value );\n+\t\t\t\t} else {\n+\t\t\t\t\t$obj->{$current_var} = $value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$obj->{$current_var} = $value;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( isset( $obj[ $current_var ] ) ) {\n+\t\t\t\t$obj[ $current_var ] = LP_Helper::maybe_unserialize( $obj[ $current_var ] );\n+\t\t\t\tif ( count( $var ) ) {\n+\t\t\t\t\t$this->_set_option( $obj[ $current_var ], join( '.', $var ), $value );\n+\t\t\t\t} else {\n+\t\t\t\t\t$obj[ $current_var ] = $value;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$obj[ $current_var ] = $value;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get option recurse separated by DOT\n+\t *\n+\t * @param string $var\n+\t * @param mixed $default\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get( string $var = '', $default = null ) {\n+\t\tif ( empty( $var ) ) {\n+\t\t\treturn $this->_options;\n+\t\t}\n+\n+\t\tif ( $this->_prefix && strpos( $var, $this->_prefix ) === false ) {\n+\t\t\t$var = $this->_prefix . $var;\n+\t\t}\n+\n+\t\t$return = $this->_get_option( $this->_options, $var, $default );\n+\n+\t\tif ( $return == '' || is_null( $return ) ) {\n+\t\t\t$return = $default;\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * @param      $obj\n+\t * @param      $var\n+\t * @param null $default\n+\t *\n+\t * @return null\n+\t *\u002F\n+\tpublic function _get_option( $obj, $var, $default = null ) {\n+\t\t$var         = (array) explode( '.', $var );\n+\t\t$current_var = array_shift( $var );\n+\t\tif ( is_object( $obj ) ) {\n+\t\t\tif ( isset( $obj->{$current_var} ) ) {\n+\t\t\t\t$obj->{$current_var} = LP_Helper::maybe_unserialize( $obj->{$current_var} );\n+\t\t\t\tif ( count( $var ) ) {\n+\t\t\t\t\treturn $this->_get_option( $obj->{$current_var}, join( '.', $var ), $default );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn $obj->{$current_var};\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn $default;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( isset( $obj[ $current_var ] ) ) {\n+\t\t\t\t$obj[ $current_var ] = LP_Helper::maybe_unserialize( $obj[ $current_var ] );\n+\t\t\t\tif ( count( $var ) ) {\n+\t\t\t\t\treturn $this->_get_option( $obj[ $current_var ], join( '.', $var ), $default );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn $obj[ $current_var ];\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn $default;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tpublic function update( $key, $value = '' ) {\n+\t\tif ( func_num_args() == 1 ) {\n+\t\t\t$value = $this->get( $key );\n+\t\t}\n+\t\tupdate_option( $this->_prefix . $key, $value );\n+\t\t\u002F\u002F $this->refresh();\n+\t}\n+\n+\t\u002F**\n+\t * Update option with default prefix is learn_press_\n+\t *\n+\t * @param string $name\n+\t * @param mixed $value\n+\t * @param string $prefix\n+\t *\u002F\n+\tpublic static function update_option( $name, $value, $prefix = 'learn_press_' ) {\n+\t\tupdate_option( \"{$prefix}{$name}\", $value );\n+\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t$lp_settings_cache->clean_lp_settings();\n+\t}\n+\n+\t\u002F**\n+\t * Get option with default prefix is learn_press_\n+\t *\n+\t * @param string $name\n+\t * @param mixed $default\n+\t *\n+\t * @return mixed\n+\t * @since 3.2.8\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic static function get_option( string $name = '', $default = false ) {\n+\t\t$key     = \"learn_press_{$name}\";\n+\t\t$options = self::instance()->_options;\n+\t\tif ( isset( $options[ $key ] ) ) {\n+\t\t\treturn $options[ $key ];\n+\t\t}\n+\n+\t\treturn get_option( $key, $default );\n+\t}\n+\n+\tpublic function get_int( $key ) {\n+\t\t$value = $this->get( $key );\n+\n+\t\treturn intval( $value );\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|LP_Settings\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get settings endpoints for checkout page.\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function get_checkout_endpoints() {\n+\t\t$endpoints = LP_Object_Cache::get( 'checkout', 'learn-press-endpoints' );\n+\n+\t\tif ( false === $endpoints ) {\n+\t\t\t$defaults = array(\n+\t\t\t\t'lp-order-received' => 'lp-order-received',\n+\t\t\t);\n+\n+\t\t\t$endpoints = array();\n+\t\t\t$settings  = LP_Settings::instance()->get( 'checkout_endpoints' );\n+\n+\t\t\tif ( $settings ) {\n+\t\t\t\tforeach ( $settings as $k => $v ) {\n+\t\t\t\t\t$k               = preg_replace( '!_!', '-', $k );\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $defaults as $k => $v ) {\n+\t\t\t\tif ( empty( $endpoints[ $k ] ) ) {\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Object_Cache::set( 'checkout', $endpoints, 'learn-press-endpoints' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fendpoints\u002Fcheckout', $endpoints );\n+\t}\n+\n+\t\u002F**\n+\t * Get settings endpoints for profile page.\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function get_profile_endpoints() {\n+\t\t$endpoints = LP_Object_Cache::get( 'profile', 'learn-press-endpoints' );\n+\n+\t\tif ( false === $endpoints ) {\n+\t\t\t$defaults  = array();\n+\t\t\t$endpoints = array();\n+\n+\t\t\t$settings = LP_Settings::instance()->get( 'profile_endpoints' );\n+\t\t\tif ( $settings ) {\n+\t\t\t\tforeach ( $settings as $k => $v ) {\n+\t\t\t\t\t$k               = preg_replace( '!_!', '-', $k );\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $defaults as $k => $v ) {\n+\t\t\t\tif ( empty( $endpoints[ $k ] ) ) {\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Object_Cache::set( 'profile', $endpoints, 'learn-press-endpoints' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fendpoints\u002Fprofile', $endpoints );\n+\t}\n+\n+\t\u002F**\n+\t * Get settings endpoints for course builder page.\n+\t *\n+\t * @return array\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_course_builder_endpoints() {\n+\t\t$endpoints = LP_Object_Cache::get( 'course-builder', 'learn-press-endpoints' );\n+\n+\t\tif ( false === $endpoints ) {\n+\t\t\t$endpoints = array();\n+\t\t\t$defaults  = [\n+\t\t\t\t'courses'            => 'courses',\n+\t\t\t\t'courses-edit'       => 'edit',\n+\t\t\t\t'courses-curriculum' => 'curriculum',\n+\t\t\t\t'courses-settings'   => 'settings',\n+\t\t\t\t'lessons'            => 'lessons',\n+\t\t\t\t'lessons-edit'       => 'edit',\n+\t\t\t\t'lessons-settings'   => 'settings',\n+\t\t\t\t'quizzes'            => 'quizzes',\n+\t\t\t\t'quizzes-edit'       => 'edit',\n+\t\t\t\t'quizzes-questions'  => 'questions',\n+\t\t\t\t'quizzes-settings'   => 'settings',\n+\t\t\t\t'questions'          => 'questions',\n+\t\t\t\t'questions-edit'     => 'edit',\n+\t\t\t\t'questions-settings' => 'settings',\n+\t\t\t];\n+\n+\t\t\t$settings = array();\n+\n+\t\t\tif ( $settings ) {\n+\t\t\t\tforeach ( $settings as $k => $v ) {\n+\t\t\t\t\t$k               = preg_replace( '!_!', '-', $k );\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $defaults as $k => $v ) {\n+\t\t\t\tif ( empty( $endpoints[ $k ] ) ) {\n+\t\t\t\t\t$endpoints[ $k ] = $v;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Object_Cache::set( 'course-builder', $endpoints, 'learn-press-endpoints' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fendpoints\u002Fcourse-builder', $endpoints );\n+\t}\n+\n+\t\u002F**\n+\t * Check setting enable option \"Auto start\"\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_auto_start_course(): bool {\n+\t\treturn 'yes' === self::get_option( 'auto_enroll', 'yes' );\n+\t}\n+\n+\t\u002F**\n+\t * Check table learnpress_course is created\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_created_tb_courses(): bool {\n+\t\t$lp_db = LP_Database::getInstance();\n+\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_courses );\n+\t}\n+\n+\t\u002F**\n+\t * Check table thim_cache is created\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_created_tb_thim_cache(): bool {\n+\t\treturn get_option( 'thim_cache_tb_created' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check enable option \"Store data in $_SESSION PHP\" instead of $_COOKIE\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_store_ip_customer(): bool {\n+\t\treturn self::get_option( 'store_ip_customer_session', 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check table learnpress_files is created\n+\t * @return boolean\n+\t *\u002F\n+\tpublic static function is_created_tb_material_files(): bool {\n+\t\t$lp_db = LP_Database::getInstance();\n+\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_files );\n+\t}\n+\n+\t\u002F**\n+\t * Check table learnpress_mcp_api_keys is created.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_created_tb_mcp_api_keys(): bool {\n+\t\t$lp_db = LP_Database::getInstance();\n+\t\treturn $lp_db->check_table_exists( $lp_db->tb_lp_mcp_api_keys );\n+\t}\n+\n+\tpublic static function lp_material_file_types(): array {\n+\t\treturn array(\n+\t\t\t'txt'      => 'text\u002Fplain',\n+\t\t\t'doc,docx' => 'application\u002Fmsword,application\u002Fvnd.openxmlformats-officedocument.wordprocessingml.document',\n+\t\t\t'odt'      => 'application\u002Fvnd.oasis.opendocument.text',\n+\t\t\t'rtf'      => 'application\u002Frtf',\n+\t\t\t'pdf'      => 'application\u002Fpdf',\n+\t\t\t'jpg,jpeg' => 'image\u002Fjpeg',\n+\t\t\t'png'      => 'image\u002Fpng',\n+\t\t\t'gif'      => 'image\u002Fgif',\n+\t\t\t'bmp'      => 'image\u002Fbmp',\n+\t\t\t\u002F\u002F 'svg'       =>  'image\u002Fsvg+xml',\n+\t\t\t'mp3'      => 'audio\u002Fmpeg',\n+\t\t\t'wav'      => 'audio\u002Fwav',\n+\t\t\t'flac'     => 'audio\u002Fflac',\n+\t\t\t'aac'      => 'audio\u002Faac',\n+\t\t\t'wma'      => 'audio\u002Fx-ms-wma',\n+\t\t\t'mp4'      => 'video\u002Fmp4',\n+\t\t\t'avi'      => 'video\u002Favi',\n+\t\t\t'mkv'      => 'video\u002Fx-matroska',\n+\t\t\t'mov'      => 'video\u002Fquicktime',\n+\t\t\t'wmv'      => 'video\u002Fx-ms-wmv',\n+\t\t\t'xls,xlsx' => 'application\u002Fvnd.ms-excel,application\u002Fvnd.openxmlformats-officedocument.spreadsheetml.sheet',\n+\t\t\t'ods'      => 'application\u002Fvnd.oasis.opendocument.spreadsheet',\n+\t\t\t'csv'      => 'text\u002Fcsv',\n+\t\t\t'numbers'  => 'application\u002Fvnd.apple.numbers',\n+\t\t\t'tsv'      => 'text\u002Ftab-separated-values',\n+\t\t\t'zip'      => 'application\u002Fzip,application\u002Foctet-stream,application\u002Fx-zip-compressed,multipart\u002Fx-zip',\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Check theme support load courses ajax\n+\t *\n+\t * @return bool\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function theme_no_support_load_courses_ajax(): bool {\n+\t\t$theme_no_load_ajax = apply_filters(\n+\t\t\t'lp\u002Fpage\u002Fcourses\u002Fthemes\u002Fno_load_ajax',\n+\t\t\t[\n+\t\t\t\t'Coaching',\n+\t\t\t\t'Course Builder',\n+\t\t\t\t'eLearningWP',\n+\t\t\t\t'Ivy School',\n+\t\t\t\t'StarKid',\n+\t\t\t\t'Academy LMS',\n+\t\t\t\t'Coaching Child',\n+\t\t\t\t'Course Builder Child',\n+\t\t\t\t'eLearningWP Child',\n+\t\t\t\t'Ivy School Child',\n+\t\t\t\t'StarKid Child',\n+\t\t\t\t'Academy LMS Child',\n+\t\t\t]\n+\t\t);\n+\t\t$theme_current      = wp_get_theme()->get( 'Name' );\n+\n+\t\treturn in_array( $theme_current, $theme_no_load_ajax );\n+\t}\n+\n+\t\u002F**\n+\t * Check theme support load courses ajax\n+\t *\n+\t * @return string\n+\t * @version 1.0.0\n+\t * @since 4.2.3.3\n+\t *\u002F\n+\tpublic static function get_permalink_single_course(): string {\n+\t\t$course_slug_default = 'courses';\n+\t\ttry {\n+\t\t\t$course_slug = self::get_option( 'course_base', 'courses' );\n+\t\t\tif ( empty( $course_slug ) ) {\n+\t\t\t\t$course_slug = $course_slug_default;\n+\t\t\t}\n+\t\t\t$course_slug = preg_replace( '!^\u002F!', '', $course_slug );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$course_slug = $course_slug_default;\n+\t\t}\n+\n+\t\treturn $course_slug;\n+\t}\n+\n+\t\u002F**\n+\t * Check theme support load courses ajax\n+\t *\n+\t * @return array\n+\t * @version 1.0.0\n+\t * @since 4.2.3.3\n+\t *\u002F\n+\tpublic static function get_course_items_slug(): array {\n+\t\t\u002F**\n+\t\t * Set rule item course.\n+\t\t *\n+\t\t * Use urldecode to convert an encoded string to normal.\n+\t\t * This fixed the issue with custom slug of lesson\u002Fquiz in some languages\n+\t\t * Eg: урока\n+\t\t *\u002F\n+\t\t$lesson_slug = urldecode( sanitize_title_with_dashes( self::get_option( 'lesson_slug', 'lessons' ) ) );\n+\t\t$quiz_slug   = urldecode( sanitize_title_with_dashes( self::get_option( 'quiz_slug', 'quizzes' ) ) );\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcourse-item-slugs\u002Ffor-rewrite-rules',\n+\t\t\tarray(\n+\t\t\t\tLP_LESSON_CPT => $lesson_slug,\n+\t\t\t\tLP_QUIZ_CPT   => $quiz_slug,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Return url lp-ajax.php\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function url_handle_lp_ajax(): string {\n+\t\treturn home_url( 'lp-ajax-handle' );\n+\t}\n+\n+\t\u002F**\n+\t * Check if instructor access to WordPress admin screens is restricted\n+\t *\n+\t * When enabled, instructors are redirected away from most wp-admin pages\n+\t * and continue their work in Course Builder instead. Administrators keep full access.\n+\t *\n+\t * @return bool True if instructor access is restricted, false otherwise\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function is_hide_instructor_access_admin_screen(): bool {\n+\t\treturn self::get_option( 'hide_instructor_access_admin_screen', 'no' ) === 'yes';\n+\t}\n+}\n+\n+LP_Settings::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-shortcodes.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-shortcodes.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-shortcodes.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-shortcodes.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,278 +1,278 @@\n-\u003C?php\r\n-\u002F**\r\n- * Base class of LearnPress shortcodes and helper functions.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcode\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcodes' ) ) {\r\n-\t\u002F**\r\n-\t * LP_Shortcodes class\r\n-\t *\u002F\r\n-\tclass LP_Shortcodes {\r\n-\t\t\u002F**\r\n-\t\t * Init shortcodes\r\n-\t\t *\u002F\r\n-\t\tpublic static function init() {\r\n-\t\t\t$shortcodes = array(\r\n-\t\t\t\t'confirm_order'       => __CLASS__ . '::confirm_order',\r\n-\t\t\t\t'profile'             => __CLASS__ . '::profile',\r\n-\t\t\t\t'become_teacher_form' => __CLASS__ . '::become_teacher_form',\r\n-\t\t\t\t'login_form'          => __CLASS__ . '::login_form',\r\n-\t\t\t\t'register_form'       => __CLASS__ . '::register_form',\r\n-\t\t\t\t'checkout'            => __CLASS__ . '::checkout',\r\n-\t\t\t\t'recent_courses'      => __CLASS__ . '::recent_courses',\r\n-\t\t\t\t'featured_courses'    => __CLASS__ . '::featured_courses',\r\n-\t\t\t\t'popular_courses'     => __CLASS__ . '::popular_courses',\r\n-\t\t\t\t\u002F\u002F'button_enroll'       => __CLASS__ . '::button_enroll',\r\n-\t\t\t\t\u002F\u002F'button_purchase'     => __CLASS__ . '::button_purchase',\r\n-\t\t\t\t\u002F\u002F'button_course'       => __CLASS__ . '::button_course',\r\n-\t\t\t\t'course_curriculum'   => __CLASS__ . '::course_curriculum',\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $shortcodes as $shortcode => $function ) {\r\n-\t\t\t\t$shortcode = \"learn_press_{$shortcode}\";\r\n-\t\t\t\tadd_shortcode( apply_filters( \"learn-press\u002Fshortcode\u002F{$shortcode}\u002Ftag\", $shortcode ), $function );\r\n-\t\t\t}\r\n-\r\n-\t\t\tadd_action( 'template_include', array( __CLASS__, 'auto_shortcode' ), - 10, 2 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Auto add shortcode into some default pages.\r\n-\t\t *\r\n-\t\t * @param $template\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function auto_shortcode( $template ) {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\tif ( ! $post ) {\r\n-\t\t\t\treturn $template;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Option enable auto add shortcode. @since 4.2.3\r\n-\t\t\t$enable = apply_filters( 'learn-press\u002Fauto-shortcode', true, $post );\r\n-\t\t\tif ( ! $enable ) {\r\n-\t\t\t\treturn $template;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( LP_Page_Controller::is_page_checkout() ) {\r\n-\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_checkout\\s?(.*)\u002F', $post->post_content ) ) {\r\n-\t\t\t\t\t$post->post_content .= '[learn_press_checkout]';\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $post->ID == learn_press_get_page_id( 'become_a_teacher' ) ) {\r\n-\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_become_teacher_form\\s?(.*)\u002F', $post->post_content ) ) {\r\n-\t\t\t\t\t$post->post_content .= '[learn_press_become_teacher_form]';\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_profile\\s?(.*)\u002F', $post->post_content ) ) {\r\n-\t\t\t\t\t$post->post_content .= '[learn_press_profile]';\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( LP_Page_Controller::is_page_instructor() ) {\r\n-\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_single_instructor\\s?(.*)\u002F', $post->post_content ) ) {\r\n-\t\t\t\t\t\u002F\u002F $post->post_content .= '[learn_press_single_instructor]';\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( LP_Page_Controller::is_page_instructors() ) {\r\n-\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_instructors\\s?(.*)\u002F', $post->post_content ) ) {\r\n-\t\t\t\t\t$post->post_content .= '[learn_press_instructors]';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Wrap content of a shortcode into wrapper element.\r\n-\t\t *\r\n-\t\t * @param string $content\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function wrapper_shortcode( $content ) {\r\n-\t\t\tob_start();\r\n-\t\t\tlearn_press_print_messages();\r\n-\t\t\t$html = ob_get_clean();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$html .= $content->output();\r\n-\t\t\t} catch ( Exception $ex ) {\r\n-\t\t\t\t$html .= $ex->getMessage();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn '\u003Cdiv class=\"learnpress\">' . $html . '\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Displaying recently courses added.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function recent_courses( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Recent_Courses( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Displaying courses are set as featured.\r\n-\t\t *\r\n-\t\t * @param array $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function featured_courses( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Featured_Courses( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Displaying popular courses.\r\n-\t\t *\r\n-\t\t * @param array $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function popular_courses( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Popular_Courses( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Displaying checkout form.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function checkout( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Checkout( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display content of user profile.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function profile( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Profile( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display a form let the user can be join as a teacher.\r\n-\t\t *\r\n-\t\t * @param array|null\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function become_teacher_form( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Become_A_Teacher( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display a register user form.\r\n-\t\t *\r\n-\t\t * @param array|null\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function register_form( $atts ) {\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Register_Form( $atts ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shortcode content for \"Confirm Order\" page\r\n-\t\t *\r\n-\t\t * @param array $atts\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function confirm_order( $atts = null ) {\r\n-\t\t\t$atts = shortcode_atts(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'order_id' => ! empty( $_REQUEST['order_id'] ) ? intval( $_REQUEST['order_id'] ) : 0,\r\n-\t\t\t\t),\r\n-\t\t\t\t$atts\r\n-\t\t\t);\r\n-\r\n-\t\t\t$order_id = null;\r\n-\r\n-\t\t\textract( $atts ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\tif ( $order ) {\r\n-\t\t\t\tlearn_press_get_template( 'order\u002Fconfirm.php', array( 'order' => $order ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::wrapper_shortcode( ob_get_clean() );\r\n-\t\t}\r\n-\r\n-\t\tpublic static function login_form( $atts, $content = '' ) {\r\n-\t\t\t$atts = shortcode_atts(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'redirect' => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t$atts\r\n-\t\t\t);\r\n-\t\t\tadd_filter( 'login_form_bottom', array( __CLASS__, 'login_form_bottom' ), 10, 2 );\r\n-\r\n-\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Login_Form( $atts ) );\r\n-\t\t}\r\n-\r\n-\r\n-\t\tpublic static function login_form_bottom( $html, $args ) {\r\n-\t\t\tob_start();\r\n-\t\t\t?>\r\n-\t\t\t\u003Cp>\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo wp_lostpassword_url(); ?>\">\u003C?php esc_html_e( 'Forgot password?', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\t&nbsp;|&nbsp;\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo wp_registration_url(); ?>\">\u003C?php esc_html_e( 'Create a new account', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$html .= ob_get_clean();\r\n-\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param        $atts\r\n-\t\t * @param string $content\r\n-\t\t *\r\n-\t\t * @return LP_Shortcode_Button_Purchase\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function button_purchase( $atts, $content = '' ) {\r\n-\t\t\treturn new LP_Shortcode_Button_Purchase( $atts );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param        $atts\r\n-\t\t * @param string $content\r\n-\t\t *\r\n-\t\t * @return LP_Shortcode_Button_Course\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function button_course( $atts, $content = '' ) {\r\n-\t\t\treturn new LP_Shortcode_Button_Course( $atts );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array  $atts\r\n-\t\t * @param string $content\r\n-\t\t *\r\n-\t\t * @return LP_Shortcode_Course_Curriculum\r\n-\t\t *\u002F\r\n-\t\tpublic static function course_curriculum( $atts, $content = '' ) {\r\n-\t\t\treturn new LP_Shortcode_Course_Curriculum( $atts );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'init', array( 'LP_Shortcodes', 'init' ) );\r\n+\u003C?php\n+\u002F**\n+ * Base class of LearnPress shortcodes and helper functions.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcode\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcodes' ) ) {\n+\t\u002F**\n+\t * LP_Shortcodes class\n+\t *\u002F\n+\tclass LP_Shortcodes {\n+\t\t\u002F**\n+\t\t * Init shortcodes\n+\t\t *\u002F\n+\t\tpublic static function init() {\n+\t\t\t$shortcodes = array(\n+\t\t\t\t'confirm_order'       => __CLASS__ . '::confirm_order',\n+\t\t\t\t'profile'             => __CLASS__ . '::profile',\n+\t\t\t\t'become_teacher_form' => __CLASS__ . '::become_teacher_form',\n+\t\t\t\t'login_form'          => __CLASS__ . '::login_form',\n+\t\t\t\t'register_form'       => __CLASS__ . '::register_form',\n+\t\t\t\t'checkout'            => __CLASS__ . '::checkout',\n+\t\t\t\t'recent_courses'      => __CLASS__ . '::recent_courses',\n+\t\t\t\t'featured_courses'    => __CLASS__ . '::featured_courses',\n+\t\t\t\t'popular_courses'     => __CLASS__ . '::popular_courses',\n+\t\t\t\t\u002F\u002F'button_enroll'       => __CLASS__ . '::button_enroll',\n+\t\t\t\t\u002F\u002F'button_purchase'     => __CLASS__ . '::button_purchase',\n+\t\t\t\t\u002F\u002F'button_course'       => __CLASS__ . '::button_course',\n+\t\t\t\t'course_curriculum'   => __CLASS__ . '::course_curriculum',\n+\t\t\t);\n+\n+\t\t\tforeach ( $shortcodes as $shortcode => $function ) {\n+\t\t\t\t$shortcode = \"learn_press_{$shortcode}\";\n+\t\t\t\tadd_shortcode( apply_filters( \"learn-press\u002Fshortcode\u002F{$shortcode}\u002Ftag\", $shortcode ), $function );\n+\t\t\t}\n+\n+\t\t\tadd_action( 'template_include', array( __CLASS__, 'auto_shortcode' ), - 10, 2 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Auto add shortcode into some default pages.\n+\t\t *\n+\t\t * @param $template\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function auto_shortcode( $template ) {\n+\t\t\tglobal $post;\n+\n+\t\t\tif ( ! $post ) {\n+\t\t\t\treturn $template;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Option enable auto add shortcode. @since 4.2.3\n+\t\t\t$enable = apply_filters( 'learn-press\u002Fauto-shortcode', true, $post );\n+\t\t\tif ( ! $enable ) {\n+\t\t\t\treturn $template;\n+\t\t\t}\n+\n+\t\t\tif ( LP_Page_Controller::is_page_checkout() ) {\n+\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_checkout\\s?(.*)\u002F', $post->post_content ) ) {\n+\t\t\t\t\t$post->post_content .= '[learn_press_checkout]';\n+\t\t\t\t}\n+\t\t\t} elseif ( $post->ID == learn_press_get_page_id( 'become_a_teacher' ) ) {\n+\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_become_teacher_form\\s?(.*)\u002F', $post->post_content ) ) {\n+\t\t\t\t\t$post->post_content .= '[learn_press_become_teacher_form]';\n+\t\t\t\t}\n+\t\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\n+\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_profile\\s?(.*)\u002F', $post->post_content ) ) {\n+\t\t\t\t\t$post->post_content .= '[learn_press_profile]';\n+\t\t\t\t}\n+\t\t\t} elseif ( LP_Page_Controller::is_page_instructor() ) {\n+\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_single_instructor\\s?(.*)\u002F', $post->post_content ) ) {\n+\t\t\t\t\t\u002F\u002F $post->post_content .= '[learn_press_single_instructor]';\n+\t\t\t\t}\n+\t\t\t} elseif ( LP_Page_Controller::is_page_instructors() ) {\n+\t\t\t\tif ( ! preg_match( '\u002F\\[learn_press_instructors\\s?(.*)\u002F', $post->post_content ) ) {\n+\t\t\t\t\t$post->post_content .= '[learn_press_instructors]';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $template;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Wrap content of a shortcode into wrapper element.\n+\t\t *\n+\t\t * @param string $content\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function wrapper_shortcode( $content ) {\n+\t\t\tob_start();\n+\t\t\tlearn_press_print_messages();\n+\t\t\t$html = ob_get_clean();\n+\n+\t\t\ttry {\n+\t\t\t\t$html .= $content->output();\n+\t\t\t} catch ( Exception $ex ) {\n+\t\t\t\t$html .= $ex->getMessage();\n+\t\t\t}\n+\n+\t\t\treturn '\u003Cdiv class=\"learnpress\">' . $html . '\u003C\u002Fdiv>';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Displaying recently courses added.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function recent_courses( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Recent_Courses( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Displaying courses are set as featured.\n+\t\t *\n+\t\t * @param array $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function featured_courses( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Featured_Courses( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Displaying popular courses.\n+\t\t *\n+\t\t * @param array $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function popular_courses( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Popular_Courses( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Displaying checkout form.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function checkout( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Checkout( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display content of user profile.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function profile( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Profile( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display a form let the user can be join as a teacher.\n+\t\t *\n+\t\t * @param array|null\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function become_teacher_form( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Become_A_Teacher( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display a register user form.\n+\t\t *\n+\t\t * @param array|null\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function register_form( $atts ) {\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Register_Form( $atts ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Shortcode content for \"Confirm Order\" page\n+\t\t *\n+\t\t * @param array $atts\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function confirm_order( $atts = null ) {\n+\t\t\t$atts = shortcode_atts(\n+\t\t\t\tarray(\n+\t\t\t\t\t'order_id' => ! empty( $_REQUEST['order_id'] ) ? intval( $_REQUEST['order_id'] ) : 0,\n+\t\t\t\t),\n+\t\t\t\t$atts\n+\t\t\t);\n+\n+\t\t\t$order_id = null;\n+\n+\t\t\textract( $atts ); \u002F\u002F phpcs:ignore\n+\n+\t\t\tob_start();\n+\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\n+\t\t\tif ( $order ) {\n+\t\t\t\tlearn_press_get_template( 'order\u002Fconfirm.php', array( 'order' => $order ) );\n+\t\t\t}\n+\n+\t\t\treturn self::wrapper_shortcode( ob_get_clean() );\n+\t\t}\n+\n+\t\tpublic static function login_form( $atts, $content = '' ) {\n+\t\t\t$atts = shortcode_atts(\n+\t\t\t\tarray(\n+\t\t\t\t\t'redirect' => '',\n+\t\t\t\t),\n+\t\t\t\t$atts\n+\t\t\t);\n+\t\t\tadd_filter( 'login_form_bottom', array( __CLASS__, 'login_form_bottom' ), 10, 2 );\n+\n+\t\t\treturn self::wrapper_shortcode( new LP_Shortcode_Login_Form( $atts ) );\n+\t\t}\n+\n+\n+\t\tpublic static function login_form_bottom( $html, $args ) {\n+\t\t\tob_start();\n+\t\t\t?>\n+\t\t\t\u003Cp>\n+\t\t\t\t\u003Ca href=\"\u003C?php echo wp_lostpassword_url(); ?>\">\u003C?php esc_html_e( 'Forgot password?', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\t&nbsp;|&nbsp;\n+\t\t\t\t\u003Ca href=\"\u003C?php echo wp_registration_url(); ?>\">\u003C?php esc_html_e( 'Create a new account', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\t\u003C\u002Fp>\n+\t\t\t\u003C?php\n+\t\t\t$html .= ob_get_clean();\n+\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param        $atts\n+\t\t * @param string $content\n+\t\t *\n+\t\t * @return LP_Shortcode_Button_Purchase\n+\t\t *\u002F\n+\t\t\u002F*public static function button_purchase( $atts, $content = '' ) {\n+\t\t\treturn new LP_Shortcode_Button_Purchase( $atts );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @param        $atts\n+\t\t * @param string $content\n+\t\t *\n+\t\t * @return LP_Shortcode_Button_Course\n+\t\t *\u002F\n+\t\t\u002F*public static function button_course( $atts, $content = '' ) {\n+\t\t\treturn new LP_Shortcode_Button_Course( $atts );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @param array  $atts\n+\t\t * @param string $content\n+\t\t *\n+\t\t * @return LP_Shortcode_Course_Curriculum\n+\t\t *\u002F\n+\t\tpublic static function course_curriculum( $atts, $content = '' ) {\n+\t\t\treturn new LP_Shortcode_Course_Curriculum( $atts );\n+\t\t}\n+\t}\n+}\n+\n+add_action( 'init', array( 'LP_Shortcodes', 'init' ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-strings.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-strings.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-strings.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-strings.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,77 +1,77 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Strings\r\n- * @deprecated\r\n- *\u002F\r\n-class LP_Strings {\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected static $strings = array();\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.2.0\r\n-\t * @TODO should remove - tungnx, no important\r\n-\t *\u002F\r\n-\tpublic static function load() {\r\n-\t\t$strings = apply_filters(\r\n-\t\t\t'learnpress\u002Fstrings',\r\n-\t\t\tarray(\r\n-\t\t\t\t'you_have_completed_quiz' => __( 'You\\'ve already completed the quiz.', 'learnpress' ),\r\n-\t\t\t\t'confirm-redo-quiz'       => __( 'Do you want to redo the quiz \"%s\"?', 'learnpress' ),\r\n-\t\t\t\t'confirm-complete-quiz'   => __( 'Do you want to complete the quiz \"%s\"?', 'learnpress' ),\r\n-\t\t\t\t'confirm-complete-lesson' => __( 'Do you want to complete the lesson \"%s\"?', 'learnpress' ),\r\n-\t\t\t\t'confirm-finish-course'   => __( 'Do you want to finish the course \"%s\"?', 'learnpress' ),\r\n-\t\t\t\t'confirm-retake-course'   => __( 'Do you want to retake the course \"%s\"?', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tself::$strings = $strings;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $str\r\n-\t * @param string $context\r\n-\t * @param string $args\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t *\u002F\r\n-\tpublic static function get( $str, $context = '', $args = '' ) {\r\n-\t\t$string = $str;\r\n-\r\n-\t\t$strings = self::$strings;\r\n-\r\n-\t\tif ( $strings ) {\r\n-\t\t\tif ( array_key_exists( $str, $strings ) ) {\r\n-\t\t\t\t$texts = $strings[ $str ];\r\n-\r\n-\t\t\t\tif ( is_string( $texts ) ) {\r\n-\t\t\t\t\t$string = $texts;\r\n-\t\t\t\t} elseif ( $context && array_key_exists( $context, $texts ) ) {\r\n-\t\t\t\t\t$string = $texts[ $context ];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$string = reset( $texts );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn is_array( $args ) ? vsprintf( $string, $args ) : $string;\r\n-\t}\r\n-\r\n-\tpublic static function esc_attr( $str, $context = '', $args = '' ) {\r\n-\t\treturn esc_attr( self::get( $str, $context, $args ) );\r\n-\t}\r\n-\r\n-\tpublic static function esc_attr_e( $str, $context = '', $args = '' ) {\r\n-\t\techo esc_attr( self::get( $str, $context, $args ) );\r\n-\t}\r\n-\r\n-\tpublic static function output( $str, $context = '', $args = '' ) {\r\n-\r\n-\t}\r\n-}\r\n-\r\n-LP_Strings::load();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Strings\n+ * @deprecated\n+ *\u002F\n+class LP_Strings {\n+\n+\t\u002F**\n+\t * @since 3.3.0\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected static $strings = array();\n+\n+\t\u002F**\n+\t * @since 3.2.0\n+\t * @TODO should remove - tungnx, no important\n+\t *\u002F\n+\tpublic static function load() {\n+\t\t$strings = apply_filters(\n+\t\t\t'learnpress\u002Fstrings',\n+\t\t\tarray(\n+\t\t\t\t'you_have_completed_quiz' => __( 'You\\'ve already completed the quiz.', 'learnpress' ),\n+\t\t\t\t'confirm-redo-quiz'       => __( 'Do you want to redo the quiz \"%s\"?', 'learnpress' ),\n+\t\t\t\t'confirm-complete-quiz'   => __( 'Do you want to complete the quiz \"%s\"?', 'learnpress' ),\n+\t\t\t\t'confirm-complete-lesson' => __( 'Do you want to complete the lesson \"%s\"?', 'learnpress' ),\n+\t\t\t\t'confirm-finish-course'   => __( 'Do you want to finish the course \"%s\"?', 'learnpress' ),\n+\t\t\t\t'confirm-retake-course'   => __( 'Do you want to retake the course \"%s\"?', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tself::$strings = $strings;\n+\t}\n+\n+\t\u002F**\n+\t * @param string $str\n+\t * @param string $context\n+\t * @param string $args\n+\t *\n+\t * @return mixed|string\n+\t *\u002F\n+\tpublic static function get( $str, $context = '', $args = '' ) {\n+\t\t$string = $str;\n+\n+\t\t$strings = self::$strings;\n+\n+\t\tif ( $strings ) {\n+\t\t\tif ( array_key_exists( $str, $strings ) ) {\n+\t\t\t\t$texts = $strings[ $str ];\n+\n+\t\t\t\tif ( is_string( $texts ) ) {\n+\t\t\t\t\t$string = $texts;\n+\t\t\t\t} elseif ( $context && array_key_exists( $context, $texts ) ) {\n+\t\t\t\t\t$string = $texts[ $context ];\n+\t\t\t\t} else {\n+\t\t\t\t\t$string = reset( $texts );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn is_array( $args ) ? vsprintf( $string, $args ) : $string;\n+\t}\n+\n+\tpublic static function esc_attr( $str, $context = '', $args = '' ) {\n+\t\treturn esc_attr( self::get( $str, $context, $args ) );\n+\t}\n+\n+\tpublic static function esc_attr_e( $str, $context = '', $args = '' ) {\n+\t\techo esc_attr( self::get( $str, $context, $args ) );\n+\t}\n+\n+\tpublic static function output( $str, $context = '', $args = '' ) {\n+\n+\t}\n+}\n+\n+LP_Strings::load();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-template.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-template.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-template.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-template.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Template\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-class LP_Template {\r\n-\t\u002F**\r\n-\t * @var LP_Template\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\tpublic $templates = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Template constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\tinclude_once 'templates\u002Fclass-lp-template-general.php';\r\n-\t\tinclude_once 'templates\u002Fclass-lp-template-course.php';\r\n-\t\tinclude_once 'templates\u002Fclass-lp-template-checkout.php';\r\n-\t\tinclude_once 'templates\u002Fclass-lp-template-profile.php';\r\n-\r\n-\t\t$this->templates = apply_filters(\r\n-\t\t\t'learn-press\u002Ftemplates-classes',\r\n-\t\t\tarray(\r\n-\t\t\t\t'general'  => new LP_Template_General(),\r\n-\t\t\t\t'course'   => new LP_Template_Course(),\r\n-\t\t\t\t'checkout' => new LP_Template_Checkout(),\r\n-\t\t\t\t'profile'  => new LP_Template_Profile(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_templates() {\r\n-\t\treturn $this->templates;\r\n-\t}\r\n-\r\n-\tpublic function get_template( $name ) {\r\n-\t\treturn $this->templates[ $name ] ?? '';\r\n-\t}\r\n-\r\n-\tpublic function has_content( $where ) {\r\n-\t\treturn has_action( $where );\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\treturn ! empty( $this->templates[ $offset ] ) ? $this->templates[ $offset ] : false;\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\treturn ! empty( $this->templates[ $offset ] );\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Instance lp template\r\n-\t *\r\n-\t * @return LP_Template\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Template\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+class LP_Template {\n+\t\u002F**\n+\t * @var LP_Template\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\tpublic $templates = array();\n+\n+\t\u002F**\n+\t * LP_Template constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\tinclude_once 'templates\u002Fclass-lp-template-general.php';\n+\t\tinclude_once 'templates\u002Fclass-lp-template-course.php';\n+\t\tinclude_once 'templates\u002Fclass-lp-template-checkout.php';\n+\t\tinclude_once 'templates\u002Fclass-lp-template-profile.php';\n+\n+\t\t$this->templates = apply_filters(\n+\t\t\t'learn-press\u002Ftemplates-classes',\n+\t\t\tarray(\n+\t\t\t\t'general'  => new LP_Template_General(),\n+\t\t\t\t'course'   => new LP_Template_Course(),\n+\t\t\t\t'checkout' => new LP_Template_Checkout(),\n+\t\t\t\t'profile'  => new LP_Template_Profile(),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_templates() {\n+\t\treturn $this->templates;\n+\t}\n+\n+\tpublic function get_template( $name ) {\n+\t\treturn $this->templates[ $name ] ?? '';\n+\t}\n+\n+\tpublic function has_content( $where ) {\n+\t\treturn has_action( $where );\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\treturn ! empty( $this->templates[ $offset ] ) ? $this->templates[ $offset ] : false;\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\treturn false;\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\treturn ! empty( $this->templates[ $offset ] );\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Instance lp template\n+\t *\n+\t * @return LP_Template\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-thumbnail-helper.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-thumbnail-helper.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-thumbnail-helper.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-thumbnail-helper.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Thumbnail_Helper\r\n- *\r\n- * @since 3.0.11\r\n- *\u002F\r\n-class LP_Thumbnail_Helper {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Thumbnail_Helper\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Thumbnail_Helper constructor.\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int    $course_id\r\n-\t * @param string $size\r\n-\t * @param array  $attr\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_course_image( $course_id, $size = 'course_thumbnail', $attr = array() ) {\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\r\n-\t\t$size_img_send    = [\r\n-\t\t\t$size_img_setting['width'] ?? 500,\r\n-\t\t\t$size_img_setting['height'] ?? 300,\r\n-\t\t];\r\n-\t\t$image_url        = $courseModel->get_image_url( $size_img_send );\r\n-\t\t$image            = sprintf(\r\n-\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\">',\r\n-\t\t\tesc_url_raw( $image_url ),\r\n-\t\t\t$courseModel->get_title()\r\n-\t\t);\r\n-\r\n-\t\treturn $image;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Thumbnail_Helper\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-return LP_Thumbnail_Helper::instance();\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+\u002F**\n+ * Class LP_Thumbnail_Helper\n+ *\n+ * @since 3.0.11\n+ *\u002F\n+class LP_Thumbnail_Helper {\n+\n+\t\u002F**\n+\t * @var LP_Thumbnail_Helper\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * LP_Thumbnail_Helper constructor.\n+\t *\u002F\n+\tprotected function __construct() {\n+\t}\n+\n+\t\u002F**\n+\t * @param int    $course_id\n+\t * @param string $size\n+\t * @param array  $attr\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_course_image( $course_id, $size = 'course_thumbnail', $attr = array() ) {\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\n+\t\t$size_img_send    = [\n+\t\t\t$size_img_setting['width'] ?? 500,\n+\t\t\t$size_img_setting['height'] ?? 300,\n+\t\t];\n+\t\t$image_url        = $courseModel->get_image_url( $size_img_send );\n+\t\t$image            = sprintf(\n+\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\">',\n+\t\t\tesc_url_raw( $image_url ),\n+\t\t\t$courseModel->get_title()\n+\t\t);\n+\n+\t\treturn $image;\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Thumbnail_Helper\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+return LP_Thumbnail_Helper::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-widget.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-widget.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fclass-lp-widget.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fclass-lp-widget.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,453 +1,453 @@\n-\u003C?php\r\n-\u002F**\r\n- * Widget class\r\n- *\r\n- * @package  Learnpress\u002FAbstracts\r\n- * @author ThimPress \u003Cnhamdv>\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * LP_Widget\r\n- *\r\n- * @version  4.0.0\r\n- * @extends  WP_Widget\r\n- *\u002F\r\n-class LP_Widget extends WP_Widget {\r\n-\r\n-\t\u002F**\r\n-\t * CSS class.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $widget_cssclass;\r\n-\r\n-\t\u002F**\r\n-\t * Widget description.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $widget_description;\r\n-\r\n-\t\u002F**\r\n-\t * Widget ID.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $widget_id;\r\n-\r\n-\t\u002F**\r\n-\t * Widget name.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $widget_name;\r\n-\r\n-\t\u002F**\r\n-\t * Enable rest_api for LearnPress.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $widget_in_rest = true;\r\n-\r\n-\t\u002F**\r\n-\t * New param add to rest api need for data.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $widget_data_attr = array();\r\n-\r\n-\t\u002F**\r\n-\t * Settings.\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $settings;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$widget_ops = array(\r\n-\t\t\t'classname'                   => $this->widget_cssclass,\r\n-\t\t\t'description'                 => $this->widget_description,\r\n-\t\t\t'customize_selective_refresh' => true,\r\n-\t\t);\r\n-\r\n-\t\tparent::__construct( $this->widget_id, $this->widget_name, $widget_ops );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get this widgets title.\r\n-\t *\u002F\r\n-\tprotected function get_instance_title( $instance ) {\r\n-\t\tif ( isset( $instance['title'] ) ) {\r\n-\t\t\treturn $instance['title'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $this->settings, $this->settings['title'], $this->settings['title']['std'] ) ) {\r\n-\t\t\treturn $this->settings['title']['std'];\r\n-\t\t}\r\n-\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output the html at the start of a widget.\r\n-\t *\r\n-\t * @param array $args Arguments.\r\n-\t * @param array $instance Instance.\r\n-\t *\u002F\r\n-\tpublic function widget_start( $args, $instance ) {\r\n-\t\techo wp_kses_post( $args['before_widget'] );\r\n-\r\n-\t\t$title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );\r\n-\r\n-\t\tif ( $title ) {\r\n-\t\t\techo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output the html at the end of a widget.\r\n-\t *\r\n-\t * @param array $args Arguments.\r\n-\t *\u002F\r\n-\tpublic function widget_end( $args ) {\r\n-\t\techo wp_kses_post( $args['after_widget'] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output Widgets HTML.\r\n-\t *\r\n-\t * @param [type] $args\r\n-\t * @param [type] $instance\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function widget( $args, $instance ) {\r\n-\t\twp_enqueue_script( 'lp-widgets' );\r\n-\t\tif ( $this->id_base === 'learnpress_widget_course_filter' ) {\r\n-\t\t\twp_enqueue_script( 'lp-course-filter' );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fwidget\u002Fbefore', $this, $args, $instance );\r\n-\r\n-\t\tif ( empty( $instance['show_in_rest'] ) ) {\r\n-\t\t\t$this->widget_in_rest = false;\r\n-\t\t}\r\n-\r\n-\t\t$data = array_merge(\r\n-\t\t\t$this->widget_data_attr,\r\n-\t\t\tarray(\r\n-\t\t\t\t'widget'   => $this->widget_id,\r\n-\t\t\t\t'instance' => wp_json_encode( $instance ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\techo $this->lp_widget_content( $data, $args, $instance );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show widget content.\r\n-\t *\r\n-\t * @param array $data Data attribute HTML for Rest API js.\r\n-\t * @param [type] $args Default Widget Args\r\n-\t * @param [type] $instance Default Widget Instance\r\n-\t *\r\n-\t * @return string HTML\r\n-\t *\u002F\r\n-\tpublic function lp_widget_content( $data, $args, $instance ) {\r\n-\t\tob_start();\r\n-\r\n-\t\t$this->widget_start( $args, $instance );\r\n-\r\n-\t\tif ( ! is_admin() && $this->widget_in_rest ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"learnpress-widget-wrapper learnpress-widget-wrapper__restapi\"\r\n-\t\t\t\tdata-widget=\"\u003C?php echo htmlentities( wp_json_encode( $data ) ); ?>\">\r\n-\t\t\t\t\u003C?php lp_skeleton_animation_html( 5 ); ?>\r\n-\t\t\t\t\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t} else { \u002F\u002F Use for Preview in Widget Editor since WordPress 5.8\r\n-\t\t\t$content = $this->lp_rest_api_content( $instance, array() );\r\n-\r\n-\t\t\techo '\u003Cdiv class=\"learnpress-widget-wrapper\" data-widget=\"' . htmlentities( wp_json_encode( $data ) ) . '\">';\r\n-\t\t\techo '\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>';\r\n-\r\n-\t\t\tif ( is_wp_error( $content ) ) {\r\n-\t\t\t\techo $content->get_error_message();\r\n-\t\t\t} else {\r\n-\t\t\t\techo $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\r\n-\t\t$this->widget_end( $args );\r\n-\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Send content for API\r\n-\t *\r\n-\t * @param array $instance Widget Instance\r\n-\t * @param array $params RestAPI param need for content.\r\n-\t *\r\n-\t * @return string || WP_Error\r\n-\t *\u002F\r\n-\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\treturn 'No content for Rest API';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Updates a particular instance of a widget.\r\n-\t *\u002F\r\n-\tpublic function update( $new_instance, $old_instance ) {\r\n-\r\n-\t\t$instance = $old_instance;\r\n-\r\n-\t\tif ( empty( $this->settings ) ) {\r\n-\t\t\treturn $instance;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $this->settings as $key => $setting ) {\r\n-\t\t\tif ( ! isset( $setting['type'] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $setting['type'] ) {\r\n-\t\t\t\tcase 'number':\r\n-\t\t\t\t\t$instance[ $key ] = absint( $new_instance[ $key ] ?? '' );\r\n-\r\n-\t\t\t\t\tif ( isset( $setting['min'] ) && '' !== $setting['min'] ) {\r\n-\t\t\t\t\t\t$instance[ $key ] = max( $instance[ $key ], $setting['min'] );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( isset( $setting['max'] ) && '' !== $setting['max'] ) {\r\n-\t\t\t\t\t\t$instance[ $key ] = min( $instance[ $key ], $setting['max'] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t$instance[ $key ] = wp_kses( trim( wp_unslash( $new_instance[ $key ] ) ), wp_kses_allowed_html( 'post' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t$instance[ $key ] = empty( $new_instance[ $key ] ) ? 0 : 1;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'sortable-checkbox':\r\n-\t\t\t\t\t$instance[ $key ] = empty( $new_instance[ $key ] ) ? [] : map_deep( $new_instance[ $key ], 'sanitize_text_field' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$instance[ $key ] = isset( $new_instance[ $key ] ) ? sanitize_text_field( $new_instance[ $key ] ) : ( $setting['std'] ?? '' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Sanitize the value of a setting.\r\n-\t\t\t *\u002F\r\n-\t\t\t$instance[ $key ] = apply_filters( 'learnpress_widget_settings_sanitize_option', $instance[ $key ], $new_instance, $key, $setting );\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Outputs the settings update form.\r\n-\t *\u002F\r\n-\tpublic function form( $instance ) {\r\n-\t\tif ( empty( $this->settings ) ) {\r\n-\t\t\techo '\u003Cp>' . esc_html__( 'There are no options for this widget.', 'learnpress' ) . '\u003C\u002Fp>';\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $this->settings as $key => $setting ) {\r\n-\t\t\t$class = $setting['class'] ?? '';\r\n-\t\t\t$value = $instance[ $key ] ?? $setting['std'] ?? '';\r\n-\r\n-\t\t\tswitch ( $setting['type'] ) {\r\n-\t\t\t\tcase 'text':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\u002F\u002F phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Cinput class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\r\n-\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"text\"\r\n-\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'hidden':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Cinput\r\n-\t\t\t\t\t\t\tclass=\"fields-sort\"\r\n-\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"hidden\"\r\n-\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'number':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cinput class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\r\n-\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"number\"\r\n-\t\t\t\t\t\t\tstep=\"\u003C?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>\"\r\n-\t\t\t\t\t\t\tmin=\"\u003C?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>\"\r\n-\t\t\t\t\t\t\tmax=\"\u003C?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>\"\r\n-\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'select':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cselect class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\r\n-\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>\r\n-\t\t\t\t\t\t\t\t\u003Coption\r\n-\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $option_key ); ?>\" \u003C?php selected( $option_key, $value ); ?>>\u003C?php echo esc_html( $option_value ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Ctextarea class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\r\n-\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" cols=\"20\"\r\n-\t\t\t\t\t\t\trows=\"3\">\u003C?php echo esc_textarea( $value ); ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\u003C?php if ( isset( $setting['desc'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Csmall>\u003C?php echo esc_html( $setting['desc'] ); ?>\u003C\u002Fsmall>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Cinput class=\"checkbox \u003C?php echo esc_attr( $class ); ?>\"\r\n-\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"checkbox\"\r\n-\t\t\t\t\t\t\tvalue=\"1\" \u003C?php checked( $value, 1 ); ?> \u002F>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'sortable-checkbox':\r\n-\t\t\t\t\t$values_default = $setting['std'] ?? array();\r\n-\t\t\t\t\t$order          = $instance['fields_order'] ?? '';\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cdiv class=\"sortable-wrapper\">\r\n-\t\t\t\t\t\t\u003Clabel>\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cdiv>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t$options = $setting['options'] ?? array();\r\n-\t\t\t\t\t\t\tif ( ! empty( $order ) ) {\r\n-\t\t\t\t\t\t\t\t$order       = explode( ',', $order );\r\n-\t\t\t\t\t\t\t\t$new_options = array();\r\n-\t\t\t\t\t\t\t\tforeach ( $order as $order_val ) {\r\n-\t\t\t\t\t\t\t\t\tif ( isset( $options[ $order_val ] ) ) {\r\n-\t\t\t\t\t\t\t\t\t\t$new_options[ $order_val ] = $options[ $order_val ];\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\t$options = $new_options;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"sortable \u003C?php echo esc_attr( $class ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tforeach ( $options as $option_name => $option ) {\r\n-\t\t\t\t\t\t\t\t\t$checked_value = ! empty( $instance ) ? ( $instance[ $key ] ?? array() ) : $values_default;\r\n-\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"sortable__item\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003Ci class=\"dashicons dashicons-menu drag\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Cinput class=\"checkbox\"\r\n-\t\t\t\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $option['id'] ) ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>[]\"\r\n-\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\r\n-\t\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $option_name ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C?php checked( in_array( $option_name, $checked_value ) ); ?>\r\n-\t\t\t\t\t\t\t\t\t\t\u002F>\r\n-\t\t\t\t\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $option['id'] ) ); ?>\">\u003C?php echo wp_kses_post( $option['label'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cscript>\r\n-\t\t\t\t\t\tjQuery(document).trigger('learnpress\u002Fwidgets\u002Fselect');\r\n-\t\t\t\t\t\u003C\u002Fscript>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'autocomplete':\r\n-\t\t\t\t\t$data_struct = [\r\n-\t\t\t\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\r\n-\t\t\t\t\t\t'dataType'    => 'courses',\r\n-\t\t\t\t\t\t'keyGetValue' => [\r\n-\t\t\t\t\t\t\t'value'      => 'ID',\r\n-\t\t\t\t\t\t\t'text'       => '{{post_title}} (#{{ID}})',\r\n-\t\t\t\t\t\t\t'key_render' => [\r\n-\t\t\t\t\t\t\t\t'post_title' => 'post_title',\r\n-\t\t\t\t\t\t\t\t'ID'         => 'ID',\r\n-\t\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'setting'     => [\r\n-\t\t\t\t\t\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Cp>\r\n-\t\t\t\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $setting['label'] ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cselect class=\"lp-tom-select\"\r\n-\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-rest-url=\"\u003C?php echo get_rest_url(); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-post-type=\"\u003C?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-saved = \"\u003C?php echo esc_attr( $value ?? '' ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-struct = \"\u003C?php echo htmlentities2( json_encode( $data_struct ) ); ?>\"\r\n-\t\t\t\t\t\t\t\tstyle=\"width: 300px;\">\r\n-\t\t\t\t\t\t\t\u003C?php if ( ! empty( $value ) ) : ?>\r\n-\t\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $value ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t\tselected=\"selected\">\u003C?php echo esc_html( get_the_title( $value ) ); ?>\u003C\u002Foption>\r\n-\t\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\t\t\u003Cscript>\r\n-\t\t\t\t\t\t\t\tjQuery(document).trigger('learnpress\u002Fwidgets\u002Fselect');\r\n-\t\t\t\t\t\t\t\u003C\u002Fscript>\r\n-\t\t\t\t\t\t\u003C\u002Fselect>\r\n-\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tdo_action( 'learnpress_widget_field_' . $setting['type'], $key, $value, $setting, $instance );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Widget class\n+ *\n+ * @package  Learnpress\u002FAbstracts\n+ * @author ThimPress \u003Cnhamdv>\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * LP_Widget\n+ *\n+ * @version  4.0.0\n+ * @extends  WP_Widget\n+ *\u002F\n+class LP_Widget extends WP_Widget {\n+\n+\t\u002F**\n+\t * CSS class.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $widget_cssclass;\n+\n+\t\u002F**\n+\t * Widget description.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $widget_description;\n+\n+\t\u002F**\n+\t * Widget ID.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $widget_id;\n+\n+\t\u002F**\n+\t * Widget name.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $widget_name;\n+\n+\t\u002F**\n+\t * Enable rest_api for LearnPress.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $widget_in_rest = true;\n+\n+\t\u002F**\n+\t * New param add to rest api need for data.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $widget_data_attr = array();\n+\n+\t\u002F**\n+\t * Settings.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $settings;\n+\n+\t\u002F**\n+\t * Constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$widget_ops = array(\n+\t\t\t'classname'                   => $this->widget_cssclass,\n+\t\t\t'description'                 => $this->widget_description,\n+\t\t\t'customize_selective_refresh' => true,\n+\t\t);\n+\n+\t\tparent::__construct( $this->widget_id, $this->widget_name, $widget_ops );\n+\t}\n+\n+\t\u002F**\n+\t * Get this widgets title.\n+\t *\u002F\n+\tprotected function get_instance_title( $instance ) {\n+\t\tif ( isset( $instance['title'] ) ) {\n+\t\t\treturn $instance['title'];\n+\t\t}\n+\n+\t\tif ( isset( $this->settings, $this->settings['title'], $this->settings['title']['std'] ) ) {\n+\t\t\treturn $this->settings['title']['std'];\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Output the html at the start of a widget.\n+\t *\n+\t * @param array $args Arguments.\n+\t * @param array $instance Instance.\n+\t *\u002F\n+\tpublic function widget_start( $args, $instance ) {\n+\t\techo wp_kses_post( $args['before_widget'] );\n+\n+\t\t$title = apply_filters( 'widget_title', $this->get_instance_title( $instance ), $instance, $this->id_base );\n+\n+\t\tif ( $title ) {\n+\t\t\techo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Output the html at the end of a widget.\n+\t *\n+\t * @param array $args Arguments.\n+\t *\u002F\n+\tpublic function widget_end( $args ) {\n+\t\techo wp_kses_post( $args['after_widget'] );\n+\t}\n+\n+\t\u002F**\n+\t * Output Widgets HTML.\n+\t *\n+\t * @param [type] $args\n+\t * @param [type] $instance\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function widget( $args, $instance ) {\n+\t\twp_enqueue_script( 'lp-widgets' );\n+\t\tif ( $this->id_base === 'learnpress_widget_course_filter' ) {\n+\t\t\twp_enqueue_script( 'lp-course-filter' );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fwidget\u002Fbefore', $this, $args, $instance );\n+\n+\t\tif ( empty( $instance['show_in_rest'] ) ) {\n+\t\t\t$this->widget_in_rest = false;\n+\t\t}\n+\n+\t\t$data = array_merge(\n+\t\t\t$this->widget_data_attr,\n+\t\t\tarray(\n+\t\t\t\t'widget'   => $this->widget_id,\n+\t\t\t\t'instance' => wp_json_encode( $instance ),\n+\t\t\t)\n+\t\t);\n+\n+\t\techo $this->lp_widget_content( $data, $args, $instance );\n+\t}\n+\n+\t\u002F**\n+\t * Show widget content.\n+\t *\n+\t * @param array $data Data attribute HTML for Rest API js.\n+\t * @param [type] $args Default Widget Args\n+\t * @param [type] $instance Default Widget Instance\n+\t *\n+\t * @return string HTML\n+\t *\u002F\n+\tpublic function lp_widget_content( $data, $args, $instance ) {\n+\t\tob_start();\n+\n+\t\t$this->widget_start( $args, $instance );\n+\n+\t\tif ( ! is_admin() && $this->widget_in_rest ) {\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"learnpress-widget-wrapper learnpress-widget-wrapper__restapi\"\n+\t\t\t\tdata-widget=\"\u003C?php echo htmlentities( wp_json_encode( $data ) ); ?>\">\n+\t\t\t\t\u003C?php lp_skeleton_animation_html( 5 ); ?>\n+\t\t\t\t\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t} else { \u002F\u002F Use for Preview in Widget Editor since WordPress 5.8\n+\t\t\t$content = $this->lp_rest_api_content( $instance, array() );\n+\n+\t\t\techo '\u003Cdiv class=\"learnpress-widget-wrapper\" data-widget=\"' . htmlentities( wp_json_encode( $data ) ) . '\">';\n+\t\t\techo '\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>';\n+\n+\t\t\tif ( is_wp_error( $content ) ) {\n+\t\t\t\techo $content->get_error_message();\n+\t\t\t} else {\n+\t\t\t\techo $content;\n+\t\t\t}\n+\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t}\n+\n+\t\t$this->widget_end( $args );\n+\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * Send content for API\n+\t *\n+\t * @param array $instance Widget Instance\n+\t * @param array $params RestAPI param need for content.\n+\t *\n+\t * @return string || WP_Error\n+\t *\u002F\n+\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\treturn 'No content for Rest API';\n+\t}\n+\n+\t\u002F**\n+\t * Updates a particular instance of a widget.\n+\t *\u002F\n+\tpublic function update( $new_instance, $old_instance ) {\n+\n+\t\t$instance = $old_instance;\n+\n+\t\tif ( empty( $this->settings ) ) {\n+\t\t\treturn $instance;\n+\t\t}\n+\n+\t\tforeach ( $this->settings as $key => $setting ) {\n+\t\t\tif ( ! isset( $setting['type'] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tswitch ( $setting['type'] ) {\n+\t\t\t\tcase 'number':\n+\t\t\t\t\t$instance[ $key ] = absint( $new_instance[ $key ] ?? '' );\n+\n+\t\t\t\t\tif ( isset( $setting['min'] ) && '' !== $setting['min'] ) {\n+\t\t\t\t\t\t$instance[ $key ] = max( $instance[ $key ], $setting['min'] );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( isset( $setting['max'] ) && '' !== $setting['max'] ) {\n+\t\t\t\t\t\t$instance[ $key ] = min( $instance[ $key ], $setting['max'] );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'textarea':\n+\t\t\t\t\t$instance[ $key ] = wp_kses( trim( wp_unslash( $new_instance[ $key ] ) ), wp_kses_allowed_html( 'post' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t$instance[ $key ] = empty( $new_instance[ $key ] ) ? 0 : 1;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'sortable-checkbox':\n+\t\t\t\t\t$instance[ $key ] = empty( $new_instance[ $key ] ) ? [] : map_deep( $new_instance[ $key ], 'sanitize_text_field' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$instance[ $key ] = isset( $new_instance[ $key ] ) ? sanitize_text_field( $new_instance[ $key ] ) : ( $setting['std'] ?? '' );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Sanitize the value of a setting.\n+\t\t\t *\u002F\n+\t\t\t$instance[ $key ] = apply_filters( 'learnpress_widget_settings_sanitize_option', $instance[ $key ], $new_instance, $key, $setting );\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\t\u002F**\n+\t * Outputs the settings update form.\n+\t *\u002F\n+\tpublic function form( $instance ) {\n+\t\tif ( empty( $this->settings ) ) {\n+\t\t\techo '\u003Cp>' . esc_html__( 'There are no options for this widget.', 'learnpress' ) . '\u003C\u002Fp>';\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $this->settings as $key => $setting ) {\n+\t\t\t$class = $setting['class'] ?? '';\n+\t\t\t$value = $instance[ $key ] ?? $setting['std'] ?? '';\n+\n+\t\t\tswitch ( $setting['type'] ) {\n+\t\t\t\tcase 'text':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\u002F\u002F phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Cinput class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\n+\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"text\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'hidden':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Cinput\n+\t\t\t\t\t\t\tclass=\"fields-sort\"\n+\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"hidden\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'number':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cinput class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\n+\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"number\"\n+\t\t\t\t\t\t\tstep=\"\u003C?php echo isset( $setting['step'] ) ? esc_attr( $setting['step'] ) : '1'; ?>\"\n+\t\t\t\t\t\t\tmin=\"\u003C?php echo isset( $setting['min'] ) ? esc_attr( $setting['min'] ) : ''; ?>\"\n+\t\t\t\t\t\t\tmax=\"\u003C?php echo isset( $setting['max'] ) ? esc_attr( $setting['max'] ) : ''; ?>\"\n+\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $value ); ?>\"\u002F>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'select':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cselect class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\n+\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php foreach ( $setting['options'] as $option_key => $option_value ) : ?>\n+\t\t\t\t\t\t\t\t\u003Coption\n+\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $option_key ); ?>\" \u003C?php selected( $option_key, $value ); ?>>\u003C?php echo esc_html( $option_value ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'textarea':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Ctextarea class=\"widefat \u003C?php echo esc_attr( $class ); ?>\"\n+\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" cols=\"20\"\n+\t\t\t\t\t\t\trows=\"3\">\u003C?php echo esc_textarea( $value ); ?>\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\u003C?php if ( isset( $setting['desc'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Csmall>\u003C?php echo esc_html( $setting['desc'] ); ?>\u003C\u002Fsmall>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Cinput class=\"checkbox \u003C?php echo esc_attr( $class ); ?>\"\n+\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\" type=\"checkbox\"\n+\t\t\t\t\t\t\tvalue=\"1\" \u003C?php checked( $value, 1 ); ?> \u002F>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'sortable-checkbox':\n+\t\t\t\t\t$values_default = $setting['std'] ?? array();\n+\t\t\t\t\t$order          = $instance['fields_order'] ?? '';\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cdiv class=\"sortable-wrapper\">\n+\t\t\t\t\t\t\u003Clabel>\u003C?php echo wp_kses_post( $setting['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cdiv>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t$options = $setting['options'] ?? array();\n+\t\t\t\t\t\t\tif ( ! empty( $order ) ) {\n+\t\t\t\t\t\t\t\t$order       = explode( ',', $order );\n+\t\t\t\t\t\t\t\t$new_options = array();\n+\t\t\t\t\t\t\t\tforeach ( $order as $order_val ) {\n+\t\t\t\t\t\t\t\t\tif ( isset( $options[ $order_val ] ) ) {\n+\t\t\t\t\t\t\t\t\t\t$new_options[ $order_val ] = $options[ $order_val ];\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\t$options = $new_options;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"sortable \u003C?php echo esc_attr( $class ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tforeach ( $options as $option_name => $option ) {\n+\t\t\t\t\t\t\t\t\t$checked_value = ! empty( $instance ) ? ( $instance[ $key ] ?? array() ) : $values_default;\n+\t\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\t\u003Cdiv class=\"sortable__item\">\n+\t\t\t\t\t\t\t\t\t\t\u003Ci class=\"dashicons dashicons-menu drag\">\u003C\u002Fi>\n+\t\t\t\t\t\t\t\t\t\t\u003Cinput class=\"checkbox\"\n+\t\t\t\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $option['id'] ) ); ?>\"\n+\t\t\t\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>[]\"\n+\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n+\t\t\t\t\t\t\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $option_name ); ?>\"\n+\t\t\t\t\t\t\t\t\t\t\t\u003C?php checked( in_array( $option_name, $checked_value ) ); ?>\n+\t\t\t\t\t\t\t\t\t\t\u002F>\n+\t\t\t\t\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\t\t\t\t\tfor=\"\u003C?php echo esc_attr( $this->get_field_id( $option['id'] ) ); ?>\">\u003C?php echo wp_kses_post( $option['label'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cscript>\n+\t\t\t\t\t\tjQuery(document).trigger('learnpress\u002Fwidgets\u002Fselect');\n+\t\t\t\t\t\u003C\u002Fscript>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'autocomplete':\n+\t\t\t\t\t$data_struct = [\n+\t\t\t\t\t\t'urlApi'      => get_rest_url( null, 'lp\u002Fv1\u002Fadmin\u002Ftools\u002Fsearch-course' ),\n+\t\t\t\t\t\t'dataType'    => 'courses',\n+\t\t\t\t\t\t'keyGetValue' => [\n+\t\t\t\t\t\t\t'value'      => 'ID',\n+\t\t\t\t\t\t\t'text'       => '{{post_title}} (#{{ID}})',\n+\t\t\t\t\t\t\t'key_render' => [\n+\t\t\t\t\t\t\t\t'post_title' => 'post_title',\n+\t\t\t\t\t\t\t\t'ID'         => 'ID',\n+\t\t\t\t\t\t\t],\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'setting'     => [\n+\t\t\t\t\t\t\t'placeholder' => esc_html__( 'Choose Course', 'learnpress' ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t];\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Cp>\n+\t\t\t\t\t\t\u003Clabel for=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $setting['label'] ); ?>\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cselect class=\"lp-tom-select\"\n+\t\t\t\t\t\t\t\tid=\"\u003C?php echo esc_attr( $this->get_field_id( $key ) ); ?>\"\n+\t\t\t\t\t\t\t\tname=\"\u003C?php echo esc_attr( $this->get_field_name( $key ) ); ?>\"\n+\t\t\t\t\t\t\t\tdata-rest-url=\"\u003C?php echo get_rest_url(); ?>\"\n+\t\t\t\t\t\t\t\tdata-post-type=\"\u003C?php echo esc_attr( $setting['post_type'] ?? LP_COURSE_CPT ); ?>\"\n+\t\t\t\t\t\t\t\tdata-saved = \"\u003C?php echo esc_attr( $value ?? '' ); ?>\"\n+\t\t\t\t\t\t\t\tdata-struct = \"\u003C?php echo htmlentities2( json_encode( $data_struct ) ); ?>\"\n+\t\t\t\t\t\t\t\tstyle=\"width: 300px;\">\n+\t\t\t\t\t\t\t\u003C?php if ( ! empty( $value ) ) : ?>\n+\t\t\t\t\t\t\t\t\u003Coption value=\"\u003C?php echo esc_attr( $value ); ?>\"\n+\t\t\t\t\t\t\t\t\t\tselected=\"selected\">\u003C?php echo esc_html( get_the_title( $value ) ); ?>\u003C\u002Foption>\n+\t\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\t\t\u003Cscript>\n+\t\t\t\t\t\t\t\tjQuery(document).trigger('learnpress\u002Fwidgets\u002Fselect');\n+\t\t\t\t\t\t\t\u003C\u002Fscript>\n+\t\t\t\t\t\t\u003C\u002Fselect>\n+\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tdefault:\n+\t\t\t\t\tdo_action( 'learnpress_widget_field_' . $setting['type'], $key, $value, $setting, $instance );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fabstract-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fabstract-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fabstract-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fabstract-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1474 +1,1474 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Abstract_Course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! function_exists( 'LP_Abstract_Course' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_Course.\r\n-\t *\u002F\r\n-\tabstract class LP_Abstract_Course extends LP_Abstract_Post_Data {\r\n-\t\t\u002F**\r\n-\t\t * Course type\r\n-\t\t *\r\n-\t\t * @var string .\r\n-\t\t *\u002F\r\n-\t\tpublic $course_type = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Course_CURD|null\r\n-\t\t *\u002F\r\n-\t\tprotected $_curd = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Post type\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_COURSE_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array(\r\n-\t\t\t'status'              => '',\r\n-\t\t\t'require_enrollment'  => '',\r\n-\t\t\t'price'               => '',\r\n-\t\t\t'regular_price'       => '',\r\n-\t\t\t'sale_price'          => '',\r\n-\t\t\t'sale_start'          => '',\r\n-\t\t\t'sale_end'            => '',\r\n-\t\t\t'duration'            => 0,\r\n-\t\t\t'max_students'        => 0,\r\n-\t\t\t'students'            => 0,\r\n-\t\t\t'retake_count'        => 0,\r\n-\t\t\t'featured'            => '',\r\n-\t\t\t'course_result'       => '',\r\n-\t\t\t'passing_conditional' => '',\r\n-\t\t\t'external_link'       => '',\r\n-\t\t\t'payment'             => '',\r\n-\t\t);\r\n-\r\n-\t\tprotected $_loaded = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected $user_id = 0;\r\n-\r\n-\t\tpublic function set_user( $user ) {\r\n-\t\t\tif ( is_numeric( $user ) ) {\r\n-\t\t\t\t$this->user_id = absint( $user );\r\n-\t\t\t} elseif ( $user instanceof LP_User ) {\r\n-\t\t\t\t$this->user_id = $user->get_id();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_user( $return = 'id' ) {\r\n-\t\t\tif ( $return === 'id' ) {\r\n-\t\t\t\treturn $this->user_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->user_id ) {\r\n-\t\t\t\treturn learn_press_get_user( $this->user_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Constructor gets the post object and sets the ID for the loaded course.\r\n-\t\t *\r\n-\t\t * @param mixed $the_course Course ID, post object, or course object\r\n-\t\t * @param mixed $deprecated Deprecated\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_course, $deprecated = '' ) {\r\n-\r\n-\t\t\t$this->_curd = new LP_Course_CURD();\r\n-\r\n-\t\t\tif ( is_numeric( $the_course ) && $the_course > 0 ) {\r\n-\t\t\t\t$this->set_id( $the_course );\r\n-\t\t\t} elseif ( $the_course instanceof self ) {\r\n-\t\t\t\t$this->set_id( absint( $the_course->get_id() ) );\r\n-\t\t\t} elseif ( ! empty( $the_course->ID ) ) {\r\n-\t\t\t\t$this->set_id( absint( $the_course->ID ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function refresh() {\r\n-\t\t\t$this->_loaded = false;\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Read course data.\r\n-\t\t * - Curriculum: sections, items, etc...\r\n-\t\t *\r\n-\t\t * Todo: optimize this function\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\tif ( $this->_loaded ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->load_data();\r\n-\r\n-\t\t\t\u002F*$can_load_curriculum = false;\r\n-\t\t\t\u002F\u002F Check if edit course, single course, single item can be load\r\n-\t\t\tif ( in_array( LP_Page_Controller::page_current(), array( LP_PAGE_SINGLE_COURSE, LP_PAGE_SINGLE_COURSE_CURRICULUM ) ) ) {\r\n-\t\t\t\t$can_load_curriculum = true;\r\n-\t\t\t} elseif ( is_admin() && is_callable( 'get_current_screen' ) ) {\r\n-\t\t\t\t$current_screen = get_current_screen();\r\n-\t\t\t\tif ( $current_screen && LP_COURSE_CPT === $current_screen->id ) {\r\n-\t\t\t\t\t$can_load_curriculum = true;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {\r\n-\t\t\t\tif ( isset( $_REQUEST['sectionID'] ) || isset( $_REQUEST['sectionId'] ) ) {\r\n-\t\t\t\t\t$can_load_curriculum = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $can_load_curriculum ) {\r\n-\t\t\t\t$this->load_curriculum();\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$this->_loaded = true;\r\n-\t\t}\r\n-\r\n-\t\tpublic function load_data() {\r\n-\t\t\t$id          = $this->get_id();\r\n-\t\t\t$post_object = get_post( $id );\r\n-\r\n-\t\t\t\u002F\u002F Regular price\r\n-\t\t\t$regular_price = get_post_meta( $id, '_lp_price', true ); \u002F\u002F For LP version \u003C 1.4.1.2\r\n-\t\t\tif ( metadata_exists( 'post', $this->get_id(), '_lp_regular_price' ) ) {\r\n-\t\t\t\t$regular_price = get_post_meta( $id, '_lp_regular_price', true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$block_course_finished = get_post_meta(\r\n-\t\t\t\t$id,\r\n-\t\t\t\t'_lp_block_finished',\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->_set_data(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status'                         => $post_object->post_status,\r\n-\t\t\t\t\t'no_required_enroll'             => get_post_meta( $id, '_lp_no_required_enroll', true ),\r\n-\t\t\t\t\t'price'                          => get_post_meta( $id, '_lp_price', true ),\r\n-\t\t\t\t\t'regular_price'                  => $regular_price,\r\n-\t\t\t\t\t'sale_price'                     => get_post_meta( $id, '_lp_sale_price', true ),\r\n-\t\t\t\t\t'sale_start'                     => get_post_meta( $id, '_lp_sale_start', true ),\r\n-\t\t\t\t\t'sale_end'                       => get_post_meta( $id, '_lp_sale_end', true ),\r\n-\t\t\t\t\t'duration'                       => get_post_meta( $id, '_lp_duration', true ),\r\n-\t\t\t\t\t'max_students'                   => get_post_meta( $id, '_lp_max_students', true ),\r\n-\t\t\t\t\t'students'                       => false,\r\n-\t\t\t\t\t'fake_students'                  => get_post_meta( $id, '_lp_students', true ),\r\n-\t\t\t\t\t'retake_count'                   => get_post_meta( $id, '_lp_retake_count', true ),\r\n-\t\t\t\t\t'featured'                       => get_post_meta( $id, '_lp_featured', true ),\r\n-\t\t\t\t\t'course_result'                  => get_post_meta( $id, '_lp_course_result', true ),\r\n-\t\t\t\t\t'passing_condition'              => get_post_meta( $id, '_lp_passing_condition', true ),\r\n-\t\t\t\t\t'final_quiz'                     => get_post_meta( $id, '_lp_final_quiz', true ),\r\n-\t\t\t\t\t'external_link'                  => get_post_meta( $id, '_lp_external_link_buy_course', true ),\r\n-\t\t\t\t\t'block_course_duration_expire'   => get_post_meta(\r\n-\t\t\t\t\t\t$id,\r\n-\t\t\t\t\t\t'_lp_block_expire_duration',\r\n-\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'block_course_finished'          => $block_course_finished ? $block_course_finished : 'yes',\r\n-\t\t\t\t\t'allow_repurchase'               => get_post_meta( $id, '_lp_allow_course_repurchase', true ),\r\n-\t\t\t\t\t'allow_repurchase_course_option' => get_post_meta( $id, '_lp_course_repurchase_option', true ),\r\n-\t\t\t\t\t'excerpt'                        => $post_object->post_excerpt,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load course curriculum.\r\n-\t\t *\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function load_curriculum() {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\r\n-\t\t\t\u002F*$item_ids      = array();\r\n-\t\t\t$item_types    = array();\r\n-\t\t\t$item_by_types = array();\r\n-\t\t\t$section_items = array();\r\n-\r\n-\t\t\t$items = $this->_curd->read_course_curriculum( $this->get_id() );\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\t$item_ids[] = $item->id;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Group items by it type\r\n-\t\t\t\t\tif ( empty( $item_types[ $item->type ] ) ) {\r\n-\t\t\t\t\t\t$item_types[ $item->type ] = array();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item_types[ $item->type ][] = $item->id;\r\n-\r\n-\t\t\t\t\t\u002F\u002F Group items by it section\r\n-\t\t\t\t\tif ( empty( $section_items[ $item->section_id ] ) ) {\r\n-\t\t\t\t\t\t$section_items[ $item->section_id ] = array();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$section_items[ $item->section_id ][] = $item->id;\r\n-\t\t\t\t\t$item_by_types[ $item->id ]           = $item->type;\r\n-\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Course_Utils::set_course_items( $this->get_id(), $item_ids );\r\n-\t\t\tLP_Course_Utils::set_course_item_types( $this->get_id(), $item_by_types );\r\n-\t\t\tLP_Course_Utils::set_course_items_group_types( $this->get_id(), $item_types );\r\n-\r\n-\t\t\tforeach ( $section_items as $section_id => $its ) {\r\n-\t\t\t\tLP_Course_Utils::set_section_items( $section_id, $its );\r\n-\t\t\t}*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * __isset function.\r\n-\t\t *\r\n-\t\t * @param mixed $key\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function __isset( $key ) {\r\n-\t\t\treturn metadata_exists( 'post', $this->get_id(), '_' . $key );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * __get function.\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function __get( $key ) {\r\n-\t\t\t_deprecated_argument( __CLASS__ . '::' . $key, '3.0.11' );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course thumbnail, return placeholder if it does not exists\r\n-\t\t *\r\n-\t\t * @param string $size\r\n-\t\t * @param array  $attr\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_image( string $size = 'course_thumbnail', array $attr = array() ): string {\r\n-\t\t\t$image = LP_Thumbnail_Helper::instance()->get_course_image( $this->get_id(), $size, $attr );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fimage', $image, $this->get_id(), $size, $attr );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course thumbnail, return placeholder if it does not exists\r\n-\t\t *\r\n-\t\t * @param string $size\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_image_url( $size = 'course_thumbnail' ) {\r\n-\t\t\t$course_id = $this->get_id();\r\n-\t\t\t$url       = '';\r\n-\t\t\t$parent_id = wp_get_post_parent_id( $course_id );\r\n-\r\n-\t\t\tif ( has_post_thumbnail( $course_id ) ) {\r\n-\t\t\t\t$url = get_the_post_thumbnail_url( $course_id, $size );\r\n-\t\t\t} elseif ( $parent_id && has_post_thumbnail( $parent_id ) ) {\r\n-\t\t\t\t$url = get_the_post_thumbnail_url( $parent_id, $size );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $url ) {\r\n-\t\t\t\t$url = LearnPress::instance()->image( 'no-image.png' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-thumbnail-url', $url, $this->get_id(), $size );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return false|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_permalink() {\r\n-\t\t\treturn get_the_permalink( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Course is exists if the post is not empty\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function exists() {\r\n-\t\t\treturn LP_COURSE_CPT === learn_press_get_post_type( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_publish() {\r\n-\t\t\treturn 'publish' === get_post_status( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check this course is required enroll.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_required_enroll(): bool {\r\n-\t\t\treturn ! $this->is_no_required_enroll();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_require_enrollment() {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\r\n-\t\t\treturn ! $this->is_no_required_enroll();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if this course is required enroll or not.\r\n-\t\t *\r\n-\t\t * @author hungkv\r\n-\t\t * @since 4.0.5\r\n-\t\t * @return bool\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function is_no_required_enroll(): bool {\r\n-\t\t\treturn $this->get_data( 'no_required_enroll', 'no' ) === 'yes' && ! is_user_logged_in();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_item_types( $group = false ) {\r\n-\t\t\t$cache_key = $group ? 'course-item-group-types' : 'course-item-types';\r\n-\t\t\t$items     = LP_Object_Cache::get( 'course-' . $this->get_id(), \"learn-press\u002F{$cache_key}\" );\r\n-\t\t\t$items     = false;\r\n-\r\n-\t\t\tif ( false === $items ) {\r\n-\t\t\t\t$item_types = array();\r\n-\t\t\t\t$items      = array();\r\n-\t\t\t\t$sections   = array();\r\n-\t\t\t\t$all_items  = $this->_curd->read_course_items( $this->get_id() );\r\n-\r\n-\t\t\t\tif ( $all_items ) {\r\n-\t\t\t\t\tforeach ( $all_items as $item ) {\r\n-\t\t\t\t\t\tif ( empty( $item_types[ $item->type ] ) ) {\r\n-\t\t\t\t\t\t\t$item_types[ $item->type ] = array();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$item_types[ $item->type ][] = $item->id;\r\n-\t\t\t\t\t\t$items[ $item->id ]          = $item->type;\r\n-\r\n-\t\t\t\t\t\tif ( empty( $sections[ $item->section_id ] ) ) {\r\n-\t\t\t\t\t\t\t$sections[ $item->section_id ] = array();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$sections[ $item->section_id ][] = $item->id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tLP_Object_Cache::set( 'course-' . $this->get_id(), $item_types, 'learn-press\u002Fcourse-item-group-types' );\r\n-\t\t\t\tLP_Object_Cache::set( 'course-' . $this->get_id(), $items, 'learn-press\u002Fcourse-item-types' );\r\n-\r\n-\t\t\t\tforeach ( $sections as $section_id => $section_items ) {\r\n-\t\t\t\t\tLP_Object_Cache::set( 'section-' . $section_id, $section_items, 'learn-press\u002Fsection-items' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$items = $group ? $item_types : $items;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( \"learn-press\u002F{$cache_key}\", $items, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all item's ids in a course.\r\n-\t\t *\r\n-\t\t * @param int $section_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @version 4.0.1\r\n-\t\t * @modify 4.1.6.9 tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_ids( int $section_id = 0 ): array {\r\n-\t\t\t$item_ids = array();\r\n-\r\n-\t\t\t$sections_items = $this->get_full_sections_and_items_course();\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\tif ( $section_id ) {\r\n-\t\t\t\t\t\tif ( $section_id == $section_items->id ) {\r\n-\t\t\t\t\t\t\t$item_ids[] = $item->id;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item_ids[] = $item->id;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-ids', $item_ids, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get item is viewing in single course.\r\n-\t\t *\r\n-\t\t * @return LP_Course_Item\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function get_viewing_item() {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\r\n-\t\t\t\u002F\u002Freturn apply_filters( 'learn-press\u002Fsingle-course-viewing-item', $this->_viewing_item, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get total students fake.\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_fake_students(): int {\r\n-\t\t\treturn absint( $this->get_data( 'fake_students', 0 ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Count the real users has enrolled\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_users_enrolled() {\r\n-\t\t\t$enrolled = $this->get_data( 'students' );\r\n-\r\n-\t\t\tif ( false === $enrolled ) {\r\n-\t\t\t\t$enrolled = $this->count_students();\r\n-\r\n-\t\t\t\t$this->_set_data( 'students', $enrolled );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$enrolled = absint( $enrolled );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fusers-enrolled', $enrolled, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $field\r\n-\t\t *\r\n-\t\t * @return LP_User|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_instructor( $field = '' ) {\r\n-\t\t\t$user = learn_press_get_user( get_post_field( 'post_author', $this->get_id() ) );\r\n-\r\n-\t\t\treturn $field ? $user->get_data( $field ) : $user;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_instructor_name() {\r\n-\t\t\t$instructor = $this->get_instructor();\r\n-\t\t\t$name       = '';\r\n-\r\n-\t\t\tif ( $instructor ) {\r\n-\t\t\t\tif ( $instructor->get_data( 'display_name' ) ) {\r\n-\t\t\t\t\t$name = $instructor->get_data( 'display_name' );\r\n-\t\t\t\t} elseif ( $instructor->get_data( 'user_nicename' ) ) {\r\n-\t\t\t\t\t$name = $instructor->get_data( 'user_nicename' );\r\n-\t\t\t\t} elseif ( $instructor->get_data( 'user_login' ) ) {\r\n-\t\t\t\t\t$name = $instructor->get_data( 'user_login' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Finstructor-name', $name, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instructor html of course.\r\n-\t\t *\r\n-\t\t * @param int|bool $with_avatar\r\n-\t\t * @param string   $link_class\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_instructor_html( $with_avatar = false, $link_class = '' ): string {\r\n-\t\t\t$html = '';\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$instructor = $this->get_author();\r\n-\t\t\t\tif ( ! $instructor ) {\r\n-\t\t\t\t\treturn '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\t\t\t$html = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\"%s>%s %s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t\t\t$link_class ? sprintf( 'class=\"%s\"', $link_class ) : '',\r\n-\t\t\t\t\t\t$with_avatar ? $instructor->get_profile_picture() : '',\r\n-\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$instructor,\r\n-\t\t\t\t\t$singleInstructorTemplate\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a course is Free\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_free(): bool {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fis-free', $this->get_price() == 0, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the sale price of course. Check if sale price is set\r\n-\t\t * and the dates are valid.\r\n-\t\t *\r\n-\t\t * @return string|float\r\n-\t\t *\u002F\r\n-\t\tpublic function get_sale_price() {\r\n-\t\t\t$sale_price_value = $this->get_data( 'sale_price', '' );\r\n-\r\n-\t\t\tif ( '' !== $sale_price_value ) {\r\n-\t\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fsale-price', floatval( $sale_price_value ), $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $sale_price_value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check course has 'sale price'\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function has_sale_price() {\r\n-\t\t\t$has_sale_price = false;\r\n-\t\t\t$regular_price  = $this->get_regular_price();\r\n-\t\t\t$sale_price     = $this->get_sale_price();\r\n-\t\t\t$start_date     = $this->get_data( 'sale_start', '' );\r\n-\t\t\t$end_date       = $this->get_data( 'sale_end', '' );\r\n-\r\n-\t\t\tif ( $regular_price > $sale_price && is_float( $sale_price ) ) {\r\n-\t\t\t\t$has_sale_price = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check in days sale\r\n-\t\t\tif ( $has_sale_price && '' !== $start_date && '' !== $end_date ) {\r\n-\t\t\t\t$nowObj = new LP_Datetime();\r\n-\t\t\t\t\u002F\u002F Compare via timezone WP\r\n-\t\t\t\t$nowStr = $nowObj->toSql( true );\r\n-\t\t\t\t$now    = strtotime( $nowStr );\r\n-\t\t\t\t$end    = strtotime( $end_date );\r\n-\t\t\t\t$start  = strtotime( $start_date );\r\n-\r\n-\t\t\t\t$has_sale_price = $now >= $start && $now \u003C= $end;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhas-sale-price', $has_sale_price, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the regular price of course.\r\n-\t\t *\r\n-\t\t * @return float\r\n-\t\t *\u002F\r\n-\t\tpublic function get_regular_price(): float {\r\n-\t\t\t$price = floatval( $this->get_data( 'regular_price', 0 ) );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fregular-price', $price, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the regular price format of course.\r\n-\t\t *\r\n-\t\t * @since 4.1.5\r\n-\t\t * @version 1.0.0\r\n-\t\t * @author tungnx\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_regular_price_html() {\r\n-\t\t\t$price = learn_press_format_price( $this->get_regular_price(), true );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fregular-price-html', $price, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the price of course.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_price() {\r\n-\t\t\t$key_cache = \"{$this->get_id()}\u002Fprice\";\r\n-\t\t\t$price     = LP_Course_Cache::cache_load_first( 'get', $key_cache );\r\n-\r\n-\t\t\tif ( false === $price ) {\r\n-\t\t\t\tif ( $this->has_sale_price() ) {\r\n-\t\t\t\t\t$price = $this->get_sale_price();\r\n-\t\t\t\t\t\u002F\u002F Add key _lp_course_is_sale for query - Todo: Check performance, need write function get all courses, and set on Admin, on background\r\n-\t\t\t\t\t\u002F\u002Fupdate_post_meta( $this->get_id(), '_lp_course_is_sale', 1 );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Delete key _lp_course_is_sale\r\n-\t\t\t\t\t\u002F\u002Fdelete_post_meta( $this->get_id(), '_lp_course_is_sale' );\r\n-\t\t\t\t\t$price = $this->get_regular_price();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Save price only on page Single Course\r\n-\t\t\t\t\u002F*if ( LP_PAGE_SINGLE_COURSE === LP_Page_Controller::page_current() ) {\r\n-\t\t\t\t\tupdate_post_meta( $this->get_id(), '_lp_price', $price );\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\tLP_Course_Cache::cache_load_first( 'set', $key_cache, $price );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fprice', $price, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get html course price\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.5\r\n-\t\t * @version 1.0.2\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_price_html(): string {\r\n-\t\t\t$price_html = '';\r\n-\r\n-\t\t\tif ( $this->is_free() ) {\r\n-\t\t\t\tif ( is_float( $this->get_sale_price() ) ) {\r\n-\t\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $this->get_regular_price_html() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"free\">%s\u003C\u002Fspan>', esc_html__( 'Free', 'learnpress' ) );\r\n-\t\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html_free', $price_html, $this );\r\n-\t\t\t} elseif ( $this->get_data( 'no_required_enroll', 'no' ) === 'yes' ) {\r\n-\t\t\t\t$price_html .= '';\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $this->has_sale_price() ) {\r\n-\t\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $this->get_regular_price_html() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$price_html          .= sprintf( '\u003Cspan class=\"price\">%s\u003C\u002Fspan>', learn_press_format_price( $this->get_price(), true ) );\r\n-\t\t\t\t$course               = CourseModel::find( $this->get_id(), true );\r\n-\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t\t$price_html           = sprintf(\r\n-\t\t\t\t\t'%1$s %2$s %3$s',\r\n-\t\t\t\t\t$singleCourseTemplate->html_price_prefix( $course ),\r\n-\t\t\t\t\t$price_html,\r\n-\t\t\t\t\t$singleCourseTemplate->html_price_suffix( $course )\r\n-\t\t\t\t);\r\n-\t\t\t\t$price_html           = apply_filters( 'learn_press_course_price_html', $price_html, $this->has_sale_price(), $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn sprintf( '\u003Cspan class=\"course-item-price\">%s\u003C\u002Fspan>', $price_html );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the price of course with html\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.5\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.1.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_price_html() {\r\n-\t\t\t$price_html = '';\r\n-\r\n-\t\t\tif ( $this->is_free() ) {\r\n-\t\t\t\t$price_html = apply_filters(\r\n-\t\t\t\t\t'learn_press_course_price_html_free',\r\n-\t\t\t\t\tesc_html__( 'Free', 'learnpress' ),\r\n-\t\t\t\t\t$this\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$price_html .= learn_press_format_price( $this->get_price() );\r\n-\t\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html', $price_html, $this->has_sale_price(), $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $price_html;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the origin price of course\r\n-\t\t *\r\n-\t\t * @return float\r\n-\t\t * @deprecated 4.1.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_origin_price() {\r\n-\t\t\treturn $this->get_regular_price();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the price of course with html\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.1.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_origin_price_html() {\r\n-\t\t\treturn $this->get_regular_price_html();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param bool $item_id\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function is_viewing_item( $item_id = false ) {\r\n-\t\t\t$item = LP_Global::course_item();\r\n-\r\n-\t\t\tif ( empty( $item ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fis-viewing-item',\r\n-\t\t\t\tfalse !== $item_id ? $item_id == $item->get_id() : $item->get_id(),\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $item_id\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function is_current_item( $item_id ) {\r\n-\t\t\treturn $this->is_viewing_item( $item_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the course has 'feature'\r\n-\t\t * This function call to a function with prefix 'has'\r\n-\t\t *\r\n-\t\t * @param string\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function has( $tag ) {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\r\n-\r\n-\t\t\t$args = func_get_args();\r\n-\t\t\tunset( $args[0] );\r\n-\t\t\t$method   = 'has_' . preg_replace( '!-!', '_', $tag );\r\n-\t\t\t$callback = array( $this, $method );\r\n-\r\n-\t\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function is( $tag ) {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\r\n-\t\t\t$args = func_get_args();\r\n-\t\t\tunset( $args[0] );\r\n-\t\t\t$method   = 'is_' . preg_replace( '!-!', '_', $tag );\r\n-\t\t\t$callback = array( $this, $method );\r\n-\r\n-\t\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if this course can be purchasable.\r\n-\t\t * Required enroll.\r\n-\t\t * Status is publish.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function is_purchasable() {\r\n-\t\t\t$is_purchasable = $this->exists() && ! $this->is_no_required_enroll() && get_post_status( $this->get_id() ) == 'publish';\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fis-purchasable', $is_purchasable, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if students have purchased course is reached.\r\n-\t\t * For case check course can purchase.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function is_in_stock() {\r\n-\t\t\t$in_stock    = true;\r\n-\t\t\t$max_allowed = $this->get_max_students();\r\n-\r\n-\t\t\tif ( $max_allowed ) {\r\n-\t\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check max student can enroll.\r\n-\t\t * For case check course can enroll.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 4.2.5.7\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_in_stock_enroll() {\r\n-\t\t\t$in_stock    = true;\r\n-\t\t\t$max_allowed = $this->get_max_students();\r\n-\r\n-\t\t\tif ( $max_allowed ) {\r\n-\t\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get max students can enroll to course.\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_max_students() {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fmax-students',\r\n-\t\t\t\tabsint( $this->get_data( 'max_students' ) ),\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Count number of students enrolled course.\r\n-\t\t * Check global settings `enrolled_students_number`\r\n-\t\t * and add the fake value if both are set.\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 3.0.0\r\n-\t\t * @Todo: view and rewrite this function\r\n-\t\t *\u002F\r\n-\t\tpublic function count_students(): int {\r\n-\t\t\t$total  = $this->get_total_user_enrolled_or_purchased();\r\n-\t\t\t$total += $this->get_fake_students();\r\n-\r\n-\t\t\treturn $total;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get total user enrolled\r\n-\t\t *\r\n-\t\t * @since 4.1.4\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_total_user_enrolled(): int {\r\n-\t\t\t$total           = 0;\r\n-\t\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$total = $lp_course_cache->get_total_students_enrolled( $this->get_id() );\r\n-\t\t\t\tif ( false !== $total ) {\r\n-\t\t\t\t\treturn $total;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\t\t\t\t$total        = $lp_course_db->get_total_user_enrolled( $this->get_id() );\r\n-\t\t\t\t$lp_course_cache->set_total_students_enrolled( $this->get_id(), $total );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $total;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get total user enrolled include fake\r\n-\t\t * @since 4.2.2\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_total_user_enrolled_include_fake() {\r\n-\t\t\t$total_user_enrolled = 0;\r\n-\t\t\t$key_cache           = \"{$this->get_id()}\u002Ftotal-students-include-fake\";\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$total_user_enrolled = LP_Course_Cache::cache_load_first( 'get', $key_cache );\r\n-\r\n-\t\t\t\tif ( false === $total_user_enrolled ) {\r\n-\t\t\t\t\t$lp_course_db         = LP_Course_DB::getInstance();\r\n-\t\t\t\t\t$total_user_enrolled  = $lp_course_db->get_total_user_enrolled( $this->get_id() );\r\n-\t\t\t\t\t$total_user_enrolled += $this->get_fake_students();\r\n-\r\n-\t\t\t\t\tLP_Course_Cache::cache_load_first( 'set', $key_cache, $total_user_enrolled );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $total_user_enrolled;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get total user enrolled, purchased or finished\r\n-\t\t *\r\n-\t\t * @since 4.1.4\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_total_user_enrolled_or_purchased(): int {\r\n-\t\t\t$total           = 0;\r\n-\t\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$total = $lp_course_cache->get_total_students_enrolled_or_purchased( $this->get_id() );\r\n-\t\t\t\tif ( false !== $total ) {\r\n-\t\t\t\t\treturn $total;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\t\t\t\t$total        = $lp_course_db->get_total_user_enrolled_or_purchased( $this->get_id() );\r\n-\t\t\t\t$lp_course_cache->set_total_students_enrolled_or_purchased( $this->get_id(), $total );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $total;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string|array $statuses\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function count_in_order( $statuses = 'completed' ) {\r\n-\t\t\tsettype( $statuses, 'array' );\r\n-\t\t\t$count = 0;\r\n-\r\n-\t\t\tforeach ( $statuses as $status ) {\r\n-\t\t\t\t$orders = get_post_meta( $this->get_id(), 'order-' . $status, true );\r\n-\r\n-\t\t\t\tif ( $orders ) {\r\n-\t\t\t\t\t$count += sizeof( $orders );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4 - comment - not use\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function count_completed_orders() {\r\n-\t\t\t$orders = $this->get_meta( 'order-completed' );\r\n-\r\n-\t\t\tif ( $orders ) {\r\n-\t\t\t\t$count = sizeof( $orders );\r\n-\t\t\t} else {\r\n-\t\t\t\t$count = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $count;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if course contain an item in curriculum.\r\n-\t\t * Actually, find the item in each section inside curriculum.\r\n-\t\t *\r\n-\t\t * @param $item_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function has_item( $item_id ) {\r\n-\t\t\t$found = false;\r\n-\t\t\t$items = $this->get_item_ids();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\t$found = in_array( $item_id, $items );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-has-item', $found, $item_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course's item (lesson\u002Fquiz\u002Fetc...).\r\n-\t\t *\r\n-\t\t * @param int $item_id Course's item Id.\r\n-\t\t *\r\n-\t\t * @return LP_Lesson|LP_Quiz|boolean\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item( $item_id ) {\r\n-\t\t\t$item = LP_Course_Item::get_item( $item_id );\r\n-\t\t\tif ( $item instanceof LP_Course_Item ) {\r\n-\t\t\t\t$item->set_course( $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item', $item, $item_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course passing condition value.\r\n-\t\t *\r\n-\t\t * @param bool   $format\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return array|mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_passing_condition( $format = false ) {\r\n-\t\t\t$value = absint( $this->get_data( 'passing_condition' ) );\r\n-\r\n-\t\t\tif ( $format ) {\r\n-\t\t\t\t$value = \"{$value}%\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse-passing-condition',\r\n-\t\t\t\t$value,\r\n-\t\t\t\t$format,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get item's link\r\n-\t\t *\r\n-\t\t * @param int $item_id\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_link( int $item_id ): string {\r\n-\t\t\t$item_link = '';\r\n-\t\t\t$item_type = get_post_type( $item_id );\r\n-\r\n-\t\t\t$course_permalink = trailingslashit( $this->get_permalink() );\r\n-\t\t\t$item_slug        = get_post_field( 'post_name', $item_id );\r\n-\r\n-\t\t\t$slug_prefixes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fcustom-item-prefixes',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\tLP_QUIZ_CPT   => sanitize_title_with_dashes( LP_Settings::get_option( 'quiz_slug', 'quizzes' ) ),\r\n-\t\t\t\t\tLP_LESSON_CPT => sanitize_title_with_dashes( LP_Settings::get_option( 'lesson_slug', 'lessons' ) ),\r\n-\t\t\t\t),\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\r\n-\t\t\t$slug_prefix = trailingslashit( $slug_prefixes[ $item_type ] ?? '' );\r\n-\t\t\t$item_link   = trailingslashit( $course_permalink . $slug_prefix . $item_slug );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fitem-link', $item_link, $item_id, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course's item at a position.\r\n-\t\t *\r\n-\t\t * @param int $at\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.3 - comment - not use\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_item_at( $at ) {\r\n-\t\t\t$items = $this->get_items();\r\n-\r\n-\t\t\tif ( ! $items ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ! empty( $items[ $at ] ) ? $items[ $at ] : false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get position of an item in course curriculum.\r\n-\t\t *\r\n-\t\t * @param LP_Course_Item|LP_User_Item|int $item\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_item_position( $item ) {\r\n-\t\t\t$items = $this->get_items();\r\n-\r\n-\t\t\tif ( ! $items ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_id = is_a( $item, 'LP_User_Item' ) || is_a(\r\n-\t\t\t\t$item,\r\n-\t\t\t\t'LP_Course_Item'\r\n-\t\t\t) ? $item->get_id() : absint( $item );\r\n-\r\n-\t\t\treturn array_search( $item_id, $items );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current_item() {\r\n-\t\t\treturn $this->is_viewing_item();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get item standing after the item is viewing.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_next_item( $args = null ) {\r\n-\t\t\t$item_nav = $this->get_item_nav();\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fnext-item', $item_nav ? $item_nav[2] : 0, $this->get_id(), $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get item standing before the item is viewing.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_prev_item( $args = null ) {\r\n-\t\t\t$item_nav = $this->get_item_nav();\r\n-\t\t\tif ( ! is_array( $item_nav ) || empty( $item_nav ) ) {\r\n-\t\t\t\treturn 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fprev-item', $item_nav[0], $this->get_id(), $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get item standing before and after an item.\r\n-\t\t * If the item is not passed consider it is item viewing.\r\n-\t\t *\r\n-\t\t * @param bool $current_item\r\n-\t\t * @param bool $viewable - Optional. TRUE will get next item is viewable.\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t * @since 3.1.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_nav( $current_item = false, $viewable = false ) {\r\n-\t\t\tif ( false === $current_item ) {\r\n-\t\t\t\t$current_item = $this->get_current_item();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false === $current_item ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$prev_id  = $next_id = 0;\r\n-\t\t\t$item_ids = $this->get_item_ids();\r\n-\r\n-\t\t\tif ( $item_ids ) {\r\n-\t\t\t\t$pos = array_search( $current_item, $item_ids );\r\n-\r\n-\t\t\t\tif ( false !== $pos ) {\r\n-\t\t\t\t\t$max     = sizeof( $item_ids ) - 1;\r\n-\t\t\t\t\t$user    = learn_press_get_current_user();\r\n-\t\t\t\t\t$pos_tmp = $pos;\r\n-\r\n-\t\t\t\t\twhile ( $pos_tmp \u003C $max ) {\r\n-\t\t\t\t\t\t++$pos_tmp;\r\n-\r\n-\t\t\t\t\t\tif ( ! $viewable ) {\r\n-\t\t\t\t\t\t\t$next_id = $item_ids[ $pos_tmp ];\r\n-\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$pos_tmp = $pos;\r\n-\r\n-\t\t\t\t\twhile ( $pos_tmp > 0 ) {\r\n-\t\t\t\t\t\t--$pos_tmp;\r\n-\r\n-\t\t\t\t\t\tif ( ! $viewable ) {\r\n-\t\t\t\t\t\t\t$prev_id = $item_ids[ $pos_tmp ];\r\n-\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array( $prev_id, $current_item, $next_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get link of item is standing after the item is viewing.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_next_item_html( $args = null ) {\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'current_item' => false,\r\n-\t\t\t\t\t'viewable'     => null,\r\n-\t\t\t\t\t'dir'          => 'next',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$next_item = $this->get_next_item( $args );\r\n-\r\n-\t\t\tif ( $next_item ) {\r\n-\t\t\t\tob_start();\r\n-\r\n-\t\t\t\tlearn_press_get_template(\r\n-\t\t\t\t\t'content-lesson\u002Fnext-button.php',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'item'   => $next_item,\r\n-\t\t\t\t\t\t'course' => $this,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\treturn ob_get_clean();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_prev_item_html( $args = null ) {\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_preview_items() {\r\n-\t\t\treturn LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press\u002Fcourse-preview-items' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check a quiz is a final quiz in this course\r\n-\t\t *\r\n-\t\t * @param $quiz_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function is_final_quiz( $quiz_id ) {\r\n-\t\t\treturn apply_filters( 'learn_press_is_final_quiz', $this->get_final_quiz() == $quiz_id, $quiz_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_final_quiz() {\r\n-\t\t\t$final_quiz = $this->get_data( 'final_quiz' );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-final-quiz', $final_quiz, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_final_quiz( $id ) {\r\n-\t\t\t$this->_set_data( 'final_quiz', $id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course duration in seconds\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration() {\r\n-\t\t\t\u002F**\r\n-\t\t\t * Duration is in string such as 10 week, 4 hour, etc...\r\n-\t\t\t * So we can use strtotime('+10 week') to convert it to seconds\r\n-\t\t\t *\u002F\r\n-\t\t\treturn strtotime( '+' . $this->get_data( 'duration' ), 0 );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course remaining time message\r\n-\t\t *\r\n-\t\t * @param $user_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_duration_html( $user_id = 0 ) {\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$duration    = $this->get_duration();\r\n-\t\t\t$user        = learn_press_get_user( $user_id );\r\n-\t\t\t$course_info = $user->get_course_info( $this->get_id() );\r\n-\t\t\t$html        = '';\r\n-\r\n-\t\t\tif ( $course_info ) {\r\n-\t\t\t\t$now        = current_time( 'timestamp' );\r\n-\t\t\t\t$start_time = intval( strtotime( $course_info['start'] ) );\r\n-\r\n-\t\t\t\tif ( $start_time + $duration > $now ) {\r\n-\t\t\t\t\t$remain = $start_time + $duration - $now;\r\n-\t\t\t\t\t$remain = learn_press_seconds_to_weeks( $remain );\r\n-\t\t\t\t\t$html   = sprintf( __( 'This course will end within the next %s', 'learnpress' ), $remain );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output params for single course page\r\n-\t\t *\r\n-\t\t * @param null $args\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function output_args( $args = null ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get external link of \"Buy this course\" button\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_external_link() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-external-link', $this->get_data( 'external_link', '' ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_external_link_text() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get main author of course.\r\n-\t\t *\r\n-\t\t * @param string $field\r\n-\t\t *\r\n-\t\t * @return LP_User|int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_author( string $field = '' ) {\r\n-\t\t\t$author_id = absint( get_post_field( 'post_author', $this->get_id() ) );\r\n-\r\n-\t\t\treturn strtolower( $field ) === 'id' ? $author_id : learn_press_get_user( $author_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get author's display name\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 3.0.9\r\n-\t\t *\u002F\r\n-\t\tpublic function get_author_display_name() {\r\n-\t\t\t$display_name = '';\r\n-\t\t\t$user         = $this->get_author();\r\n-\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\t$display_name = $user->get_display_name();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $display_name;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_tags() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get extra info of course.\r\n-\t\t * Target Audience, Key Features, Requirements, etc...\r\n-\t\t *\r\n-\t\t * @param string $type [target_audience, key_features, requirements]\r\n-\t\t *\r\n-\t\t * @return string|array\r\n-\t\t * @since 3.x.x\r\n-\t\t *\u002F\r\n-\t\tpublic function get_extra_info( $type ) {\r\n-\t\t\t$extra_info_meta = get_post_meta( $this->get_id(), '_lp_' . $type, true );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-extra-info', $extra_info_meta, $type, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get FAQs in Tab metabox.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_faqs(): array {\r\n-\t\t\t$faqs = array();\r\n-\t\t\t$data = get_post_meta( $this->get_id(), '_lp_faqs', true );\r\n-\r\n-\t\t\tif ( $data ) {\r\n-\t\t\t\tforeach ( $data as $faq ) {\r\n-\t\t\t\t\t$faqs[] = array(\r\n-\t\t\t\t\t\t'question' => $faq[0],\r\n-\t\t\t\t\t\t'answer'   => $faq[1],\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-faqs', $faqs, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course is set featured\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_featured(): bool {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse-is-featured',\r\n-\t\t\t\tget_post_meta( $this->get_id(), '_lp_featured', true ) === 'yes',\r\n-\t\t\t\t$this->get_id(),\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * [get_downloadable_material get all material files of this course and lesson of this course]\r\n-\t\t * @return [array] [array of material files or empty array]\r\n-\t\t * @deprecated 4.2.6.4\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_downloadable_material(): array {\r\n-\t\t\t$material  = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$materials = $material->get_material_by_item_id( $this->get_id(), 1 );\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-materials', $materials, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Abstract_Course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! function_exists( 'LP_Abstract_Course' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_Course.\n+\t *\u002F\n+\tabstract class LP_Abstract_Course extends LP_Abstract_Post_Data {\n+\t\t\u002F**\n+\t\t * Course type\n+\t\t *\n+\t\t * @var string .\n+\t\t *\u002F\n+\t\tpublic $course_type = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Course_CURD|null\n+\t\t *\u002F\n+\t\tprotected $_curd = null;\n+\n+\t\t\u002F**\n+\t\t * Post type\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_COURSE_CPT;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array(\n+\t\t\t'status'              => '',\n+\t\t\t'require_enrollment'  => '',\n+\t\t\t'price'               => '',\n+\t\t\t'regular_price'       => '',\n+\t\t\t'sale_price'          => '',\n+\t\t\t'sale_start'          => '',\n+\t\t\t'sale_end'            => '',\n+\t\t\t'duration'            => 0,\n+\t\t\t'max_students'        => 0,\n+\t\t\t'students'            => 0,\n+\t\t\t'retake_count'        => 0,\n+\t\t\t'featured'            => '',\n+\t\t\t'course_result'       => '',\n+\t\t\t'passing_conditional' => '',\n+\t\t\t'external_link'       => '',\n+\t\t\t'payment'             => '',\n+\t\t);\n+\n+\t\tprotected $_loaded = false;\n+\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected $user_id = 0;\n+\n+\t\tpublic function set_user( $user ) {\n+\t\t\tif ( is_numeric( $user ) ) {\n+\t\t\t\t$this->user_id = absint( $user );\n+\t\t\t} elseif ( $user instanceof LP_User ) {\n+\t\t\t\t$this->user_id = $user->get_id();\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function get_user( $return = 'id' ) {\n+\t\t\tif ( $return === 'id' ) {\n+\t\t\t\treturn $this->user_id;\n+\t\t\t}\n+\n+\t\t\tif ( $this->user_id ) {\n+\t\t\t\treturn learn_press_get_user( $this->user_id );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Constructor gets the post object and sets the ID for the loaded course.\n+\t\t *\n+\t\t * @param mixed $the_course Course ID, post object, or course object\n+\t\t * @param mixed $deprecated Deprecated\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_course, $deprecated = '' ) {\n+\n+\t\t\t$this->_curd = new LP_Course_CURD();\n+\n+\t\t\tif ( is_numeric( $the_course ) && $the_course > 0 ) {\n+\t\t\t\t$this->set_id( $the_course );\n+\t\t\t} elseif ( $the_course instanceof self ) {\n+\t\t\t\t$this->set_id( absint( $the_course->get_id() ) );\n+\t\t\t} elseif ( ! empty( $the_course->ID ) ) {\n+\t\t\t\t$this->set_id( absint( $the_course->ID ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function refresh() {\n+\t\t\t$this->_loaded = false;\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Read course data.\n+\t\t * - Curriculum: sections, items, etc...\n+\t\t *\n+\t\t * Todo: optimize this function\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\tif ( $this->_loaded ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->load_data();\n+\n+\t\t\t\u002F*$can_load_curriculum = false;\n+\t\t\t\u002F\u002F Check if edit course, single course, single item can be load\n+\t\t\tif ( in_array( LP_Page_Controller::page_current(), array( LP_PAGE_SINGLE_COURSE, LP_PAGE_SINGLE_COURSE_CURRICULUM ) ) ) {\n+\t\t\t\t$can_load_curriculum = true;\n+\t\t\t} elseif ( is_admin() && is_callable( 'get_current_screen' ) ) {\n+\t\t\t\t$current_screen = get_current_screen();\n+\t\t\t\tif ( $current_screen && LP_COURSE_CPT === $current_screen->id ) {\n+\t\t\t\t\t$can_load_curriculum = true;\n+\t\t\t\t}\n+\t\t\t} elseif ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {\n+\t\t\t\tif ( isset( $_REQUEST['sectionID'] ) || isset( $_REQUEST['sectionId'] ) ) {\n+\t\t\t\t\t$can_load_curriculum = true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $can_load_curriculum ) {\n+\t\t\t\t$this->load_curriculum();\n+\t\t\t}*\u002F\n+\n+\t\t\t$this->_loaded = true;\n+\t\t}\n+\n+\t\tpublic function load_data() {\n+\t\t\t$id          = $this->get_id();\n+\t\t\t$post_object = get_post( $id );\n+\n+\t\t\t\u002F\u002F Regular price\n+\t\t\t$regular_price = get_post_meta( $id, '_lp_price', true ); \u002F\u002F For LP version \u003C 1.4.1.2\n+\t\t\tif ( metadata_exists( 'post', $this->get_id(), '_lp_regular_price' ) ) {\n+\t\t\t\t$regular_price = get_post_meta( $id, '_lp_regular_price', true );\n+\t\t\t}\n+\n+\t\t\t$block_course_finished = get_post_meta(\n+\t\t\t\t$id,\n+\t\t\t\t'_lp_block_finished',\n+\t\t\t\ttrue\n+\t\t\t);\n+\n+\t\t\t$this->_set_data(\n+\t\t\t\tarray(\n+\t\t\t\t\t'status'                         => $post_object->post_status,\n+\t\t\t\t\t'no_required_enroll'             => get_post_meta( $id, '_lp_no_required_enroll', true ),\n+\t\t\t\t\t'price'                          => get_post_meta( $id, '_lp_price', true ),\n+\t\t\t\t\t'regular_price'                  => $regular_price,\n+\t\t\t\t\t'sale_price'                     => get_post_meta( $id, '_lp_sale_price', true ),\n+\t\t\t\t\t'sale_start'                     => get_post_meta( $id, '_lp_sale_start', true ),\n+\t\t\t\t\t'sale_end'                       => get_post_meta( $id, '_lp_sale_end', true ),\n+\t\t\t\t\t'duration'                       => get_post_meta( $id, '_lp_duration', true ),\n+\t\t\t\t\t'max_students'                   => get_post_meta( $id, '_lp_max_students', true ),\n+\t\t\t\t\t'students'                       => false,\n+\t\t\t\t\t'fake_students'                  => get_post_meta( $id, '_lp_students', true ),\n+\t\t\t\t\t'retake_count'                   => get_post_meta( $id, '_lp_retake_count', true ),\n+\t\t\t\t\t'featured'                       => get_post_meta( $id, '_lp_featured', true ),\n+\t\t\t\t\t'course_result'                  => get_post_meta( $id, '_lp_course_result', true ),\n+\t\t\t\t\t'passing_condition'              => get_post_meta( $id, '_lp_passing_condition', true ),\n+\t\t\t\t\t'final_quiz'                     => get_post_meta( $id, '_lp_final_quiz', true ),\n+\t\t\t\t\t'external_link'                  => get_post_meta( $id, '_lp_external_link_buy_course', true ),\n+\t\t\t\t\t'block_course_duration_expire'   => get_post_meta(\n+\t\t\t\t\t\t$id,\n+\t\t\t\t\t\t'_lp_block_expire_duration',\n+\t\t\t\t\t\ttrue\n+\t\t\t\t\t),\n+\t\t\t\t\t'block_course_finished'          => $block_course_finished ? $block_course_finished : 'yes',\n+\t\t\t\t\t'allow_repurchase'               => get_post_meta( $id, '_lp_allow_course_repurchase', true ),\n+\t\t\t\t\t'allow_repurchase_course_option' => get_post_meta( $id, '_lp_course_repurchase_option', true ),\n+\t\t\t\t\t'excerpt'                        => $post_object->post_excerpt,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load course curriculum.\n+\t\t *\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\tpublic function load_curriculum() {\n+\t\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\n+\t\t\t\u002F*$item_ids      = array();\n+\t\t\t$item_types    = array();\n+\t\t\t$item_by_types = array();\n+\t\t\t$section_items = array();\n+\n+\t\t\t$items = $this->_curd->read_course_curriculum( $this->get_id() );\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\t$item_ids[] = $item->id;\n+\n+\t\t\t\t\t\u002F\u002F Group items by it type\n+\t\t\t\t\tif ( empty( $item_types[ $item->type ] ) ) {\n+\t\t\t\t\t\t$item_types[ $item->type ] = array();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item_types[ $item->type ][] = $item->id;\n+\n+\t\t\t\t\t\u002F\u002F Group items by it section\n+\t\t\t\t\tif ( empty( $section_items[ $item->section_id ] ) ) {\n+\t\t\t\t\t\t$section_items[ $item->section_id ] = array();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$section_items[ $item->section_id ][] = $item->id;\n+\t\t\t\t\t$item_by_types[ $item->id ]           = $item->type;\n+\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Course_Utils::set_course_items( $this->get_id(), $item_ids );\n+\t\t\tLP_Course_Utils::set_course_item_types( $this->get_id(), $item_by_types );\n+\t\t\tLP_Course_Utils::set_course_items_group_types( $this->get_id(), $item_types );\n+\n+\t\t\tforeach ( $section_items as $section_id => $its ) {\n+\t\t\t\tLP_Course_Utils::set_section_items( $section_id, $its );\n+\t\t\t}*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * __isset function.\n+\t\t *\n+\t\t * @param mixed $key\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function __isset( $key ) {\n+\t\t\treturn metadata_exists( 'post', $this->get_id(), '_' . $key );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * __get function.\n+\t\t *\n+\t\t * @param string $key\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function __get( $key ) {\n+\t\t\t_deprecated_argument( __CLASS__ . '::' . $key, '3.0.11' );\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course thumbnail, return placeholder if it does not exists\n+\t\t *\n+\t\t * @param string $size\n+\t\t * @param array  $attr\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_image( string $size = 'course_thumbnail', array $attr = array() ): string {\n+\t\t\t$image = LP_Thumbnail_Helper::instance()->get_course_image( $this->get_id(), $size, $attr );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fimage', $image, $this->get_id(), $size, $attr );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course thumbnail, return placeholder if it does not exists\n+\t\t *\n+\t\t * @param string $size\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_image_url( $size = 'course_thumbnail' ) {\n+\t\t\t$course_id = $this->get_id();\n+\t\t\t$url       = '';\n+\t\t\t$parent_id = wp_get_post_parent_id( $course_id );\n+\n+\t\t\tif ( has_post_thumbnail( $course_id ) ) {\n+\t\t\t\t$url = get_the_post_thumbnail_url( $course_id, $size );\n+\t\t\t} elseif ( $parent_id && has_post_thumbnail( $parent_id ) ) {\n+\t\t\t\t$url = get_the_post_thumbnail_url( $parent_id, $size );\n+\t\t\t}\n+\n+\t\t\tif ( ! $url ) {\n+\t\t\t\t$url = LearnPress::instance()->image( 'no-image.png' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-thumbnail-url', $url, $this->get_id(), $size );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return false|string\n+\t\t *\u002F\n+\t\tpublic function get_permalink() {\n+\t\t\treturn get_the_permalink( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Course is exists if the post is not empty\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function exists() {\n+\t\t\treturn LP_COURSE_CPT === learn_press_get_post_type( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_publish() {\n+\t\t\treturn 'publish' === get_post_status( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check this course is required enroll.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_required_enroll(): bool {\n+\t\t\treturn ! $this->is_no_required_enroll();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function is_require_enrollment() {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\n+\t\t\treturn ! $this->is_no_required_enroll();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if this course is required enroll or not.\n+\t\t *\n+\t\t * @author hungkv\n+\t\t * @since 4.0.5\n+\t\t * @return bool\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function is_no_required_enroll(): bool {\n+\t\t\treturn $this->get_data( 'no_required_enroll', 'no' ) === 'yes' && ! is_user_logged_in();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_item_types( $group = false ) {\n+\t\t\t$cache_key = $group ? 'course-item-group-types' : 'course-item-types';\n+\t\t\t$items     = LP_Object_Cache::get( 'course-' . $this->get_id(), \"learn-press\u002F{$cache_key}\" );\n+\t\t\t$items     = false;\n+\n+\t\t\tif ( false === $items ) {\n+\t\t\t\t$item_types = array();\n+\t\t\t\t$items      = array();\n+\t\t\t\t$sections   = array();\n+\t\t\t\t$all_items  = $this->_curd->read_course_items( $this->get_id() );\n+\n+\t\t\t\tif ( $all_items ) {\n+\t\t\t\t\tforeach ( $all_items as $item ) {\n+\t\t\t\t\t\tif ( empty( $item_types[ $item->type ] ) ) {\n+\t\t\t\t\t\t\t$item_types[ $item->type ] = array();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$item_types[ $item->type ][] = $item->id;\n+\t\t\t\t\t\t$items[ $item->id ]          = $item->type;\n+\n+\t\t\t\t\t\tif ( empty( $sections[ $item->section_id ] ) ) {\n+\t\t\t\t\t\t\t$sections[ $item->section_id ] = array();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$sections[ $item->section_id ][] = $item->id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tLP_Object_Cache::set( 'course-' . $this->get_id(), $item_types, 'learn-press\u002Fcourse-item-group-types' );\n+\t\t\t\tLP_Object_Cache::set( 'course-' . $this->get_id(), $items, 'learn-press\u002Fcourse-item-types' );\n+\n+\t\t\t\tforeach ( $sections as $section_id => $section_items ) {\n+\t\t\t\t\tLP_Object_Cache::set( 'section-' . $section_id, $section_items, 'learn-press\u002Fsection-items' );\n+\t\t\t\t}\n+\n+\t\t\t\t$items = $group ? $item_types : $items;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( \"learn-press\u002F{$cache_key}\", $items, $this->get_id() );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get all item's ids in a course.\n+\t\t *\n+\t\t * @param int $section_id\n+\t\t *\n+\t\t * @return array\n+\t\t * @version 4.0.1\n+\t\t * @modify 4.1.6.9 tungnx\n+\t\t *\u002F\n+\t\tpublic function get_item_ids( int $section_id = 0 ): array {\n+\t\t\t$item_ids = array();\n+\n+\t\t\t$sections_items = $this->get_full_sections_and_items_course();\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\tif ( $section_id ) {\n+\t\t\t\t\t\tif ( $section_id == $section_items->id ) {\n+\t\t\t\t\t\t\t$item_ids[] = $item->id;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item_ids[] = $item->id;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-ids', $item_ids, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get item is viewing in single course.\n+\t\t *\n+\t\t * @return LP_Course_Item\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\tpublic function get_viewing_item() {\n+\t\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\n+\t\t\t\u002F\u002Freturn apply_filters( 'learn-press\u002Fsingle-course-viewing-item', $this->_viewing_item, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get total students fake.\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_fake_students(): int {\n+\t\t\treturn absint( $this->get_data( 'fake_students', 0 ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Count the real users has enrolled\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_users_enrolled() {\n+\t\t\t$enrolled = $this->get_data( 'students' );\n+\n+\t\t\tif ( false === $enrolled ) {\n+\t\t\t\t$enrolled = $this->count_students();\n+\n+\t\t\t\t$this->_set_data( 'students', $enrolled );\n+\t\t\t}\n+\n+\t\t\t$enrolled = absint( $enrolled );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fusers-enrolled', $enrolled, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $field\n+\t\t *\n+\t\t * @return LP_User|mixed\n+\t\t *\u002F\n+\t\tpublic function get_instructor( $field = '' ) {\n+\t\t\t$user = learn_press_get_user( get_post_field( 'post_author', $this->get_id() ) );\n+\n+\t\t\treturn $field ? $user->get_data( $field ) : $user;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_instructor_name() {\n+\t\t\t$instructor = $this->get_instructor();\n+\t\t\t$name       = '';\n+\n+\t\t\tif ( $instructor ) {\n+\t\t\t\tif ( $instructor->get_data( 'display_name' ) ) {\n+\t\t\t\t\t$name = $instructor->get_data( 'display_name' );\n+\t\t\t\t} elseif ( $instructor->get_data( 'user_nicename' ) ) {\n+\t\t\t\t\t$name = $instructor->get_data( 'user_nicename' );\n+\t\t\t\t} elseif ( $instructor->get_data( 'user_login' ) ) {\n+\t\t\t\t\t$name = $instructor->get_data( 'user_login' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Finstructor-name', $name, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instructor html of course.\n+\t\t *\n+\t\t * @param int|bool $with_avatar\n+\t\t * @param string   $link_class\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_instructor_html( $with_avatar = false, $link_class = '' ): string {\n+\t\t\t$html = '';\n+\n+\t\t\ttry {\n+\t\t\t\t$instructor = $this->get_author();\n+\t\t\t\tif ( ! $instructor ) {\n+\t\t\t\t\treturn '';\n+\t\t\t\t}\n+\n+\t\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\t\t\t$html = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\"%s>%s %s\u003C\u002Fa>',\n+\t\t\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t\t\t$link_class ? sprintf( 'class=\"%s\"', $link_class ) : '',\n+\t\t\t\t\t\t$with_avatar ? $instructor->get_profile_picture() : '',\n+\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\n+\t\t\t\t\t),\n+\t\t\t\t\t$instructor,\n+\t\t\t\t\t$singleInstructorTemplate\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a course is Free\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_free(): bool {\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fis-free', $this->get_price() == 0, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the sale price of course. Check if sale price is set\n+\t\t * and the dates are valid.\n+\t\t *\n+\t\t * @return string|float\n+\t\t *\u002F\n+\t\tpublic function get_sale_price() {\n+\t\t\t$sale_price_value = $this->get_data( 'sale_price', '' );\n+\n+\t\t\tif ( '' !== $sale_price_value ) {\n+\t\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fsale-price', floatval( $sale_price_value ), $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn $sale_price_value;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check course has 'sale price'\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function has_sale_price() {\n+\t\t\t$has_sale_price = false;\n+\t\t\t$regular_price  = $this->get_regular_price();\n+\t\t\t$sale_price     = $this->get_sale_price();\n+\t\t\t$start_date     = $this->get_data( 'sale_start', '' );\n+\t\t\t$end_date       = $this->get_data( 'sale_end', '' );\n+\n+\t\t\tif ( $regular_price > $sale_price && is_float( $sale_price ) ) {\n+\t\t\t\t$has_sale_price = true;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check in days sale\n+\t\t\tif ( $has_sale_price && '' !== $start_date && '' !== $end_date ) {\n+\t\t\t\t$nowObj = new LP_Datetime();\n+\t\t\t\t\u002F\u002F Compare via timezone WP\n+\t\t\t\t$nowStr = $nowObj->toSql( true );\n+\t\t\t\t$now    = strtotime( $nowStr );\n+\t\t\t\t$end    = strtotime( $end_date );\n+\t\t\t\t$start  = strtotime( $start_date );\n+\n+\t\t\t\t$has_sale_price = $now >= $start && $now \u003C= $end;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhas-sale-price', $has_sale_price, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the regular price of course.\n+\t\t *\n+\t\t * @return float\n+\t\t *\u002F\n+\t\tpublic function get_regular_price(): float {\n+\t\t\t$price = floatval( $this->get_data( 'regular_price', 0 ) );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fregular-price', $price, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the regular price format of course.\n+\t\t *\n+\t\t * @since 4.1.5\n+\t\t * @version 1.0.0\n+\t\t * @author tungnx\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_regular_price_html() {\n+\t\t\t$price = learn_press_format_price( $this->get_regular_price(), true );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fregular-price-html', $price, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the price of course.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_price() {\n+\t\t\t$key_cache = \"{$this->get_id()}\u002Fprice\";\n+\t\t\t$price     = LP_Course_Cache::cache_load_first( 'get', $key_cache );\n+\n+\t\t\tif ( false === $price ) {\n+\t\t\t\tif ( $this->has_sale_price() ) {\n+\t\t\t\t\t$price = $this->get_sale_price();\n+\t\t\t\t\t\u002F\u002F Add key _lp_course_is_sale for query - Todo: Check performance, need write function get all courses, and set on Admin, on background\n+\t\t\t\t\t\u002F\u002Fupdate_post_meta( $this->get_id(), '_lp_course_is_sale', 1 );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Delete key _lp_course_is_sale\n+\t\t\t\t\t\u002F\u002Fdelete_post_meta( $this->get_id(), '_lp_course_is_sale' );\n+\t\t\t\t\t$price = $this->get_regular_price();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Save price only on page Single Course\n+\t\t\t\t\u002F*if ( LP_PAGE_SINGLE_COURSE === LP_Page_Controller::page_current() ) {\n+\t\t\t\t\tupdate_post_meta( $this->get_id(), '_lp_price', $price );\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\tLP_Course_Cache::cache_load_first( 'set', $key_cache, $price );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fprice', $price, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get html course price\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.5\n+\t\t * @version 1.0.2\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_course_price_html(): string {\n+\t\t\t$price_html = '';\n+\n+\t\t\tif ( $this->is_free() ) {\n+\t\t\t\tif ( is_float( $this->get_sale_price() ) ) {\n+\t\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $this->get_regular_price_html() );\n+\t\t\t\t}\n+\n+\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"free\">%s\u003C\u002Fspan>', esc_html__( 'Free', 'learnpress' ) );\n+\t\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html_free', $price_html, $this );\n+\t\t\t} elseif ( $this->get_data( 'no_required_enroll', 'no' ) === 'yes' ) {\n+\t\t\t\t$price_html .= '';\n+\t\t\t} else {\n+\t\t\t\tif ( $this->has_sale_price() ) {\n+\t\t\t\t\t$price_html .= sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $this->get_regular_price_html() );\n+\t\t\t\t}\n+\n+\t\t\t\t$price_html          .= sprintf( '\u003Cspan class=\"price\">%s\u003C\u002Fspan>', learn_press_format_price( $this->get_price(), true ) );\n+\t\t\t\t$course               = CourseModel::find( $this->get_id(), true );\n+\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t\t$price_html           = sprintf(\n+\t\t\t\t\t'%1$s %2$s %3$s',\n+\t\t\t\t\t$singleCourseTemplate->html_price_prefix( $course ),\n+\t\t\t\t\t$price_html,\n+\t\t\t\t\t$singleCourseTemplate->html_price_suffix( $course )\n+\t\t\t\t);\n+\t\t\t\t$price_html           = apply_filters( 'learn_press_course_price_html', $price_html, $this->has_sale_price(), $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn sprintf( '\u003Cspan class=\"course-item-price\">%s\u003C\u002Fspan>', $price_html );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the price of course with html\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.5\n+\t\t * @version 1.0.1\n+\t\t * @return mixed\n+\t\t * @deprecated 4.1.5\n+\t\t *\u002F\n+\t\tpublic function get_price_html() {\n+\t\t\t$price_html = '';\n+\n+\t\t\tif ( $this->is_free() ) {\n+\t\t\t\t$price_html = apply_filters(\n+\t\t\t\t\t'learn_press_course_price_html_free',\n+\t\t\t\t\tesc_html__( 'Free', 'learnpress' ),\n+\t\t\t\t\t$this\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$price_html .= learn_press_format_price( $this->get_price() );\n+\t\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html', $price_html, $this->has_sale_price(), $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn $price_html;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the origin price of course\n+\t\t *\n+\t\t * @return float\n+\t\t * @deprecated 4.1.5\n+\t\t *\u002F\n+\t\tpublic function get_origin_price() {\n+\t\t\treturn $this->get_regular_price();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the price of course with html\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.1.5\n+\t\t *\u002F\n+\t\tpublic function get_origin_price_html() {\n+\t\t\treturn $this->get_regular_price_html();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param bool $item_id\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function is_viewing_item( $item_id = false ) {\n+\t\t\t$item = LP_Global::course_item();\n+\n+\t\t\tif ( empty( $item ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fis-viewing-item',\n+\t\t\t\tfalse !== $item_id ? $item_id == $item->get_id() : $item->get_id(),\n+\t\t\t\t$item_id,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $item_id\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function is_current_item( $item_id ) {\n+\t\t\treturn $this->is_viewing_item( $item_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the course has 'feature'\n+\t\t * This function call to a function with prefix 'has'\n+\t\t *\n+\t\t * @param string\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function has( $tag ) {\n+\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\n+\n+\t\t\t$args = func_get_args();\n+\t\t\tunset( $args[0] );\n+\t\t\t$method   = 'has_' . preg_replace( '!-!', '_', $tag );\n+\t\t\t$callback = array( $this, $method );\n+\n+\t\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function is( $tag ) {\n+\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\n+\t\t\t$args = func_get_args();\n+\t\t\tunset( $args[0] );\n+\t\t\t$method   = 'is_' . preg_replace( '!-!', '_', $tag );\n+\t\t\t$callback = array( $this, $method );\n+\n+\t\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if this course can be purchasable.\n+\t\t * Required enroll.\n+\t\t * Status is publish.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function is_purchasable() {\n+\t\t\t$is_purchasable = $this->exists() && ! $this->is_no_required_enroll() && get_post_status( $this->get_id() ) == 'publish';\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fis-purchasable', $is_purchasable, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if students have purchased course is reached.\n+\t\t * For case check course can purchase.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function is_in_stock() {\n+\t\t\t$in_stock    = true;\n+\t\t\t$max_allowed = $this->get_max_students();\n+\n+\t\t\tif ( $max_allowed ) {\n+\t\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check max student can enroll.\n+\t\t * For case check course can enroll.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 4.2.5.7\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function is_in_stock_enroll() {\n+\t\t\t$in_stock    = true;\n+\t\t\t$max_allowed = $this->get_max_students();\n+\n+\t\t\tif ( $max_allowed ) {\n+\t\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get max students can enroll to course.\n+\t\t *\n+\t\t * @return int\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_max_students() {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fmax-students',\n+\t\t\t\tabsint( $this->get_data( 'max_students' ) ),\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Count number of students enrolled course.\n+\t\t * Check global settings `enrolled_students_number`\n+\t\t * and add the fake value if both are set.\n+\t\t *\n+\t\t * @return int\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t * @since 3.0.0\n+\t\t * @Todo: view and rewrite this function\n+\t\t *\u002F\n+\t\tpublic function count_students(): int {\n+\t\t\t$total  = $this->get_total_user_enrolled_or_purchased();\n+\t\t\t$total += $this->get_fake_students();\n+\n+\t\t\treturn $total;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get total user enrolled\n+\t\t *\n+\t\t * @since 4.1.4\n+\t\t * @version 1.0.1\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_total_user_enrolled(): int {\n+\t\t\t$total           = 0;\n+\t\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\n+\t\t\ttry {\n+\t\t\t\t$total = $lp_course_cache->get_total_students_enrolled( $this->get_id() );\n+\t\t\t\tif ( false !== $total ) {\n+\t\t\t\t\treturn $total;\n+\t\t\t\t}\n+\n+\t\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\t\t\t\t$total        = $lp_course_db->get_total_user_enrolled( $this->get_id() );\n+\t\t\t\t$lp_course_cache->set_total_students_enrolled( $this->get_id(), $total );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $total;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get total user enrolled include fake\n+\t\t * @since 4.2.2\n+\t\t * @return int\n+\t\t *\u002F\n+\t\t\u002F*public function get_total_user_enrolled_include_fake() {\n+\t\t\t$total_user_enrolled = 0;\n+\t\t\t$key_cache           = \"{$this->get_id()}\u002Ftotal-students-include-fake\";\n+\n+\t\t\ttry {\n+\t\t\t\t$total_user_enrolled = LP_Course_Cache::cache_load_first( 'get', $key_cache );\n+\n+\t\t\t\tif ( false === $total_user_enrolled ) {\n+\t\t\t\t\t$lp_course_db         = LP_Course_DB::getInstance();\n+\t\t\t\t\t$total_user_enrolled  = $lp_course_db->get_total_user_enrolled( $this->get_id() );\n+\t\t\t\t\t$total_user_enrolled += $this->get_fake_students();\n+\n+\t\t\t\t\tLP_Course_Cache::cache_load_first( 'set', $key_cache, $total_user_enrolled );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $total_user_enrolled;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get total user enrolled, purchased or finished\n+\t\t *\n+\t\t * @since 4.1.4\n+\t\t * @version 1.0.1\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_total_user_enrolled_or_purchased(): int {\n+\t\t\t$total           = 0;\n+\t\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\n+\t\t\ttry {\n+\t\t\t\t$total = $lp_course_cache->get_total_students_enrolled_or_purchased( $this->get_id() );\n+\t\t\t\tif ( false !== $total ) {\n+\t\t\t\t\treturn $total;\n+\t\t\t\t}\n+\n+\t\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\t\t\t\t$total        = $lp_course_db->get_total_user_enrolled_or_purchased( $this->get_id() );\n+\t\t\t\t$lp_course_cache->set_total_students_enrolled_or_purchased( $this->get_id(), $total );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $total;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string|array $statuses\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function count_in_order( $statuses = 'completed' ) {\n+\t\t\tsettype( $statuses, 'array' );\n+\t\t\t$count = 0;\n+\n+\t\t\tforeach ( $statuses as $status ) {\n+\t\t\t\t$orders = get_post_meta( $this->get_id(), 'order-' . $status, true );\n+\n+\t\t\t\tif ( $orders ) {\n+\t\t\t\t\t$count += sizeof( $orders );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $count;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4 - comment - not use\n+\t\t *\u002F\n+\t\t\u002F*public function count_completed_orders() {\n+\t\t\t$orders = $this->get_meta( 'order-completed' );\n+\n+\t\t\tif ( $orders ) {\n+\t\t\t\t$count = sizeof( $orders );\n+\t\t\t} else {\n+\t\t\t\t$count = 0;\n+\t\t\t}\n+\n+\t\t\treturn $count;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Check if course contain an item in curriculum.\n+\t\t * Actually, find the item in each section inside curriculum.\n+\t\t *\n+\t\t * @param $item_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function has_item( $item_id ) {\n+\t\t\t$found = false;\n+\t\t\t$items = $this->get_item_ids();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\t$found = in_array( $item_id, $items );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-has-item', $found, $item_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course's item (lesson\u002Fquiz\u002Fetc...).\n+\t\t *\n+\t\t * @param int $item_id Course's item Id.\n+\t\t *\n+\t\t * @return LP_Lesson|LP_Quiz|boolean\n+\t\t *\u002F\n+\t\tpublic function get_item( $item_id ) {\n+\t\t\t$item = LP_Course_Item::get_item( $item_id );\n+\t\t\tif ( $item instanceof LP_Course_Item ) {\n+\t\t\t\t$item->set_course( $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item', $item, $item_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course passing condition value.\n+\t\t *\n+\t\t * @param bool   $format\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return array|mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_passing_condition( $format = false ) {\n+\t\t\t$value = absint( $this->get_data( 'passing_condition' ) );\n+\n+\t\t\tif ( $format ) {\n+\t\t\t\t$value = \"{$value}%\";\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse-passing-condition',\n+\t\t\t\t$value,\n+\t\t\t\t$format,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get item's link\n+\t\t *\n+\t\t * @param int $item_id\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_item_link( int $item_id ): string {\n+\t\t\t$item_link = '';\n+\t\t\t$item_type = get_post_type( $item_id );\n+\n+\t\t\t$course_permalink = trailingslashit( $this->get_permalink() );\n+\t\t\t$item_slug        = get_post_field( 'post_name', $item_id );\n+\n+\t\t\t$slug_prefixes = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fcustom-item-prefixes',\n+\t\t\t\tarray(\n+\t\t\t\t\tLP_QUIZ_CPT   => sanitize_title_with_dashes( LP_Settings::get_option( 'quiz_slug', 'quizzes' ) ),\n+\t\t\t\t\tLP_LESSON_CPT => sanitize_title_with_dashes( LP_Settings::get_option( 'lesson_slug', 'lessons' ) ),\n+\t\t\t\t),\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\n+\t\t\t$slug_prefix = trailingslashit( $slug_prefixes[ $item_type ] ?? '' );\n+\t\t\t$item_link   = trailingslashit( $course_permalink . $slug_prefix . $item_slug );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fitem-link', $item_link, $item_id, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course's item at a position.\n+\t\t *\n+\t\t * @param int $at\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.3 - comment - not use\n+\t\t *\u002F\n+\t\t\u002F*public function get_item_at( $at ) {\n+\t\t\t$items = $this->get_items();\n+\n+\t\t\tif ( ! $items ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn ! empty( $items[ $at ] ) ? $items[ $at ] : false;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get position of an item in course curriculum.\n+\t\t *\n+\t\t * @param LP_Course_Item|LP_User_Item|int $item\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_item_position( $item ) {\n+\t\t\t$items = $this->get_items();\n+\n+\t\t\tif ( ! $items ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$item_id = is_a( $item, 'LP_User_Item' ) || is_a(\n+\t\t\t\t$item,\n+\t\t\t\t'LP_Course_Item'\n+\t\t\t) ? $item->get_id() : absint( $item );\n+\n+\t\t\treturn array_search( $item_id, $items );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function get_current_item() {\n+\t\t\treturn $this->is_viewing_item();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get item standing after the item is viewing.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_next_item( $args = null ) {\n+\t\t\t$item_nav = $this->get_item_nav();\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fnext-item', $item_nav ? $item_nav[2] : 0, $this->get_id(), $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get item standing before the item is viewing.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_prev_item( $args = null ) {\n+\t\t\t$item_nav = $this->get_item_nav();\n+\t\t\tif ( ! is_array( $item_nav ) || empty( $item_nav ) ) {\n+\t\t\t\treturn 0;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fprev-item', $item_nav[0], $this->get_id(), $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get item standing before and after an item.\n+\t\t * If the item is not passed consider it is item viewing.\n+\t\t *\n+\t\t * @param bool $current_item\n+\t\t * @param bool $viewable - Optional. TRUE will get next item is viewable.\n+\t\t *\n+\t\t * @return array|bool\n+\t\t * @since 3.1.0\n+\t\t *\u002F\n+\t\tpublic function get_item_nav( $current_item = false, $viewable = false ) {\n+\t\t\tif ( false === $current_item ) {\n+\t\t\t\t$current_item = $this->get_current_item();\n+\t\t\t}\n+\n+\t\t\tif ( false === $current_item ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$prev_id  = $next_id = 0;\n+\t\t\t$item_ids = $this->get_item_ids();\n+\n+\t\t\tif ( $item_ids ) {\n+\t\t\t\t$pos = array_search( $current_item, $item_ids );\n+\n+\t\t\t\tif ( false !== $pos ) {\n+\t\t\t\t\t$max     = sizeof( $item_ids ) - 1;\n+\t\t\t\t\t$user    = learn_press_get_current_user();\n+\t\t\t\t\t$pos_tmp = $pos;\n+\n+\t\t\t\t\twhile ( $pos_tmp \u003C $max ) {\n+\t\t\t\t\t\t++$pos_tmp;\n+\n+\t\t\t\t\t\tif ( ! $viewable ) {\n+\t\t\t\t\t\t\t$next_id = $item_ids[ $pos_tmp ];\n+\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$pos_tmp = $pos;\n+\n+\t\t\t\t\twhile ( $pos_tmp > 0 ) {\n+\t\t\t\t\t\t--$pos_tmp;\n+\n+\t\t\t\t\t\tif ( ! $viewable ) {\n+\t\t\t\t\t\t\t$prev_id = $item_ids[ $pos_tmp ];\n+\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn array( $prev_id, $current_item, $next_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get link of item is standing after the item is viewing.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_next_item_html( $args = null ) {\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'current_item' => false,\n+\t\t\t\t\t'viewable'     => null,\n+\t\t\t\t\t'dir'          => 'next',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$next_item = $this->get_next_item( $args );\n+\n+\t\t\tif ( $next_item ) {\n+\t\t\t\tob_start();\n+\n+\t\t\t\tlearn_press_get_template(\n+\t\t\t\t\t'content-lesson\u002Fnext-button.php',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'item'   => $next_item,\n+\t\t\t\t\t\t'course' => $this,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\treturn ob_get_clean();\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tpublic function get_prev_item_html( $args = null ) {\n+\t\t}\n+\n+\t\tpublic function get_preview_items() {\n+\t\t\treturn LP_Object_Cache::get( 'course-' . $this->get_id(), 'learn-press\u002Fcourse-preview-items' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check a quiz is a final quiz in this course\n+\t\t *\n+\t\t * @param $quiz_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function is_final_quiz( $quiz_id ) {\n+\t\t\treturn apply_filters( 'learn_press_is_final_quiz', $this->get_final_quiz() == $quiz_id, $quiz_id, $this->get_id() );\n+\t\t}\n+\n+\t\tpublic function get_final_quiz() {\n+\t\t\t$final_quiz = $this->get_data( 'final_quiz' );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-final-quiz', $final_quiz, $this->get_id() );\n+\t\t}\n+\n+\t\tpublic function set_final_quiz( $id ) {\n+\t\t\t$this->_set_data( 'final_quiz', $id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course duration in seconds\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_duration() {\n+\t\t\t\u002F**\n+\t\t\t * Duration is in string such as 10 week, 4 hour, etc...\n+\t\t\t * So we can use strtotime('+10 week') to convert it to seconds\n+\t\t\t *\u002F\n+\t\t\treturn strtotime( '+' . $this->get_data( 'duration' ), 0 );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Get course remaining time message\n+\t\t *\n+\t\t * @param $user_id\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_user_duration_html( $user_id = 0 ) {\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t}\n+\n+\t\t\t$duration    = $this->get_duration();\n+\t\t\t$user        = learn_press_get_user( $user_id );\n+\t\t\t$course_info = $user->get_course_info( $this->get_id() );\n+\t\t\t$html        = '';\n+\n+\t\t\tif ( $course_info ) {\n+\t\t\t\t$now        = current_time( 'timestamp' );\n+\t\t\t\t$start_time = intval( strtotime( $course_info['start'] ) );\n+\n+\t\t\t\tif ( $start_time + $duration > $now ) {\n+\t\t\t\t\t$remain = $start_time + $duration - $now;\n+\t\t\t\t\t$remain = learn_press_seconds_to_weeks( $remain );\n+\t\t\t\t\t$html   = sprintf( __( 'This course will end within the next %s', 'learnpress' ), $remain );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output params for single course page\n+\t\t *\n+\t\t * @param null $args\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function output_args( $args = null ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get external link of \"Buy this course\" button\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_external_link() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-external-link', $this->get_data( 'external_link', '' ), $this->get_id() );\n+\t\t}\n+\n+\t\tpublic function get_external_link_text() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-external-link-text', _x( 'More Info', 'External Link button text', 'learnpress' ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get main author of course.\n+\t\t *\n+\t\t * @param string $field\n+\t\t *\n+\t\t * @return LP_User|int\n+\t\t *\u002F\n+\t\tpublic function get_author( string $field = '' ) {\n+\t\t\t$author_id = absint( get_post_field( 'post_author', $this->get_id() ) );\n+\n+\t\t\treturn strtolower( $field ) === 'id' ? $author_id : learn_press_get_user( $author_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get author's display name\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 3.0.9\n+\t\t *\u002F\n+\t\tpublic function get_author_display_name() {\n+\t\t\t$display_name = '';\n+\t\t\t$user         = $this->get_author();\n+\n+\t\t\tif ( $user ) {\n+\t\t\t\t$display_name = $user->get_display_name();\n+\t\t\t}\n+\n+\t\t\treturn $display_name;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_tags() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-tags', get_the_term_list( $this->get_id(), 'course_tag', __( 'Tags: ', 'learnpress' ), ' ', '' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get extra info of course.\n+\t\t * Target Audience, Key Features, Requirements, etc...\n+\t\t *\n+\t\t * @param string $type [target_audience, key_features, requirements]\n+\t\t *\n+\t\t * @return string|array\n+\t\t * @since 3.x.x\n+\t\t *\u002F\n+\t\tpublic function get_extra_info( $type ) {\n+\t\t\t$extra_info_meta = get_post_meta( $this->get_id(), '_lp_' . $type, true );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-extra-info', $extra_info_meta, $type, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get FAQs in Tab metabox.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.0.0\n+\t\t *\u002F\n+\t\tpublic function get_faqs(): array {\n+\t\t\t$faqs = array();\n+\t\t\t$data = get_post_meta( $this->get_id(), '_lp_faqs', true );\n+\n+\t\t\tif ( $data ) {\n+\t\t\t\tforeach ( $data as $faq ) {\n+\t\t\t\t\t$faqs[] = array(\n+\t\t\t\t\t\t'question' => $faq[0],\n+\t\t\t\t\t\t'answer'   => $faq[1],\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-faqs', $faqs, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course is set featured\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_featured(): bool {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse-is-featured',\n+\t\t\t\tget_post_meta( $this->get_id(), '_lp_featured', true ) === 'yes',\n+\t\t\t\t$this->get_id(),\n+\t\t\t\t$this\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * [get_downloadable_material get all material files of this course and lesson of this course]\n+\t\t * @return [array] [array of material files or empty array]\n+\t\t * @deprecated 4.2.6.4\n+\t\t *\u002F\n+\t\t\u002F*public function get_downloadable_material(): array {\n+\t\t\t$material  = LP_Material_Files_DB::getInstance();\n+\t\t\t$materials = $material->get_material_by_item_id( $this->get_id(), 1 );\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-materials', $materials, $this->get_id() );\n+\t\t}*\u002F\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item-lesson.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item-lesson.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item-lesson.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item-lesson.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003C?php\r\n-class LP_Course_Item_Lesson extends LP_Course_Item {\r\n-\tpublic function __construct( $item, $args = null ) {\r\n-\t\tparent::__construct( $item, $args );\r\n-\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Course_Item_Lesson extends LP_Course_Item {\n+\tpublic function __construct( $item, $args = null ) {\n+\t\tparent::__construct( $item, $args );\n+\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,620 +1,620 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_Item.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Course_Item' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Course_Item.\r\n-\t *\u002F\r\n-\tclass LP_Course_Item extends LP_Abstract_Post_Data {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The icon maybe used somewhere.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_icon_class = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The type of item.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_item_type = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Course\r\n-\t\t *\u002F\r\n-\t\tprotected $_course = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Course_Section\r\n-\t\t *\u002F\r\n-\t\tprotected $_section = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $_content = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_preview = false;\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Course_Item constructor.\r\n-\t\t *\r\n-\t\t * @param $item mixed\r\n-\t\t * @param $args array\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $item, $args = null ) {\r\n-\t\t\tparent::__construct( $item, $args );\r\n-\r\n-\t\t\t$this->add_support( 'comments', get_post_field( 'comment_status', $this->get_id() ) === 'open' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get type of item.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_type( $context = '' ) {\r\n-\t\t\t$post_type = $this->_item_type;\r\n-\r\n-\t\t\tif ( $context === 'display' ) {\r\n-\t\t\t\t$post_type_object = get_post_type_object( $post_type );\r\n-\r\n-\t\t\t\tif ( $post_type_object ) {\r\n-\t\t\t\t\t$post_type = $post_type_object->labels->singular_name;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $post_type;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_icon_class() {\r\n-\t\t\treturn $this->_icon_class;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check lesson is preview\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_preview( $context = 'display' ): bool {\r\n-\t\t\t$item_id = $this->get_id();\r\n-\r\n-\t\t\t$this->_preview = false;\r\n-\r\n-\t\t\tif ( $item_id && LP_LESSON_CPT === $this->get_post_type() ) {\r\n-\t\t\t\t$is_lesson_preview = get_post_meta( $item_id, '_lp_preview', true );\r\n-\r\n-\t\t\t\t$this->_preview = 'yes' === $is_lesson_preview;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fitem-preview', $this->_preview, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_title( $context = '' ) {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-title', parent::get_title( $context ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get format of Post\r\n-\t\t *\r\n-\t\t * @return bool|false|mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_format() {\r\n-\t\t\t$format = get_post_meta( $this->get_id(), 'post_format', true );\r\n-\r\n-\t\t\tif ( ! $format ) {\r\n-\t\t\t\t$format = 'standard';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $format;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if item can be shown in course curriculum.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_visible() {\r\n-\t\t\t$show = true;\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-visible', $show, $this->get_item_type(), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get class of item.\r\n-\t\t *\r\n-\t\t * @param $course_id\r\n-\t\t * @param $item_id\r\n-\t\t * @param $can_view_item\r\n-\t\t * @param $more\r\n-\t\t *\r\n-\t\t * @return array|mixed|null\r\n-\t\t * @since 4.1.4.2\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_class_v2( $course_id, $item_id, $can_view_item, $more = array() ) {\r\n-\t\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn $more;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$defaults = array_merge(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'course-item',\r\n-\t\t\t\t\t'course-item-' . $this->get_item_type(),\r\n-\t\t\t\t\t'course-item-' . $item_id,\r\n-\t\t\t\t),\r\n-\t\t\t\t(array) $more\r\n-\t\t\t);\r\n-\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t$user    = UserModel::find( $user_id, true );\r\n-\r\n-\t\t\t$userCourseModel    = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t$enrolled           = $user && $userCourseModel && $userCourseModel->has_enrolled_or_finished();\r\n-\t\t\t$no_required_enroll = $course->has_no_enroll_requirement();\r\n-\r\n-\t\t\t$post_format = $this->get_format();\r\n-\t\t\tif ( 'standard' !== $post_format && $post_format ) {\r\n-\t\t\t\t$defaults[] = 'course-item-type-' . $post_format;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $no_required_enroll ) {\r\n-\t\t\t\t$defaults[] = 'item-free';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $enrolled ) {\r\n-\t\t\t\t$defaults['item-locked'] = 'item-locked';\r\n-\r\n-\t\t\t\tif ( $this->is_preview() ) {\r\n-\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\r\n-\t\t\t\t\t$defaults['has-status']   = 'has-status';\r\n-\t\t\t\t\tunset( $defaults['item-locked'] );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( ! $can_view_item->flag ) {\r\n-\t\t\t\t$defaults[] = 'item-locked';\r\n-\t\t\t} else {\r\n-\t\t\t\t$userItemModel = UserItemModel::find_user_item(\r\n-\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t$item_id,\r\n-\t\t\t\t\tget_post_type( $item_id ),\r\n-\t\t\t\t\t$course_id,\r\n-\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\ttrue\r\n-\t\t\t\t);\r\n-\t\t\t\t$item_status   = $userItemModel ? $userItemModel->get_status() : '';\r\n-\t\t\t\t$item_grade    = $userItemModel ? $userItemModel->get_graduation() : '';\r\n-\r\n-\t\t\t\tif ( $item_status ) {\r\n-\t\t\t\t\t$defaults[] = 'has-status';\r\n-\t\t\t\t\t$defaults[] = 'status-' . $item_status;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $item_status ) {\r\n-\t\t\t\t\tcase 'started':\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'completed':\r\n-\t\t\t\t\t\t$defaults[] = $item_grade;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tif ( $this->is_preview() ) {\r\n-\t\t\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\r\n-\t\t\t\t\t\t\t$defaults['has-status']   = 'has-status';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$item_class = apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-status-class',\r\n-\t\t\t\t\t\t\t$item_status,\r\n-\t\t\t\t\t\t\t$item_grade,\r\n-\t\t\t\t\t\t\t$this->get_item_type(),\r\n-\t\t\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t\t\t$course_id\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $item_class ) {\r\n-\t\t\t\t\t\t\t$defaults[] = $item_class;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse-item-class',\r\n-\t\t\t\t$defaults,\r\n-\t\t\t\t$this->get_item_type(),\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$course_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Filter unwanted values.\r\n-\t\t\t$classes = is_array( $classes ) ? $classes : explode( ' ', $classes );\r\n-\t\t\t$classes = array_filter( $classes );\r\n-\t\t\t$classes = array_unique( $classes );\r\n-\r\n-\t\t\treturn $classes;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_status_title() {\r\n-\t\t\t$course_id      = get_the_ID();\r\n-\t\t\t$status_message = '';\r\n-\r\n-\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\tif ( $user->get_item_status( $this->get_id(), $course_id ) === 'completed' ) {\r\n-\t\t\t\t$item_grade = $user->get_item_grade( $this->get_id(), $course_id );\r\n-\r\n-\t\t\t\tif ( $item_grade === 'failed' ) {\r\n-\t\t\t\t\t$status_message = _x( 'Failed', 'course item status title', 'learnpress' );\r\n-\t\t\t\t} elseif ( $item_grade === 'passed' ) {\r\n-\t\t\t\t\t$status_message = _x( 'Passed', 'course item status title', 'learnpress' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$status_message = _x( 'Completed', 'course item status title', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$status_message = _x( 'Unread', 'course item status title', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse-item-status-title',\r\n-\t\t\t\t$status_message,\r\n-\t\t\t\t$this->get_id(),\r\n-\t\t\t\t$course_id\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get permalink of item inside course.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_permalink() {\r\n-\t\t\t$link = false;\r\n-\r\n-\t\t\tif ( $this->_course ) {\r\n-\t\t\t\t$link = $this->_course->get_item_link( $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-link', $link, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set course parent of this item.\r\n-\t\t *\r\n-\t\t * @param LP_Course|LP_Abstract_Course|int $course\r\n-\t\t *\u002F\r\n-\t\tpublic function set_course( $course ) {\r\n-\t\t\tif ( is_numeric( $course ) ) {\r\n-\t\t\t\t$this->_course = learn_press_get_course( $course );\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->_course = $course;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return course.\r\n-\t\t *\r\n-\t\t * @return LP_Course\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course() {\r\n-\t\t\treturn $this->_course;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_course_id() {\r\n-\t\t\t$course = $this->get_course();\r\n-\r\n-\t\t\tif ( $course ) {\r\n-\t\t\t\treturn $course->get_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param LP_Course_Section $section\r\n-\t\t *\u002F\r\n-\t\tpublic function set_section( $section ) {\r\n-\t\t\t$this->_section = $section;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Course_Section\r\n-\t\t *\u002F\r\n-\t\tpublic function get_section() {\r\n-\t\t\treturn $this->_section;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instance of an item from post\r\n-\t\t *\r\n-\t\t * @param int    $item_id Item id.\r\n-\t\t * @param int    $course_id .\r\n-\t\t *\r\n-\t\t * @return LP_Course_Item|false\r\n-\t\t * @Todo: tungnx - review - rewrite - set cache - check where call this function\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.3 - change cache\r\n-\t\t * @version 4.0.2\r\n-\t\t * @since 3.x.x\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_item( $item_id = 0, $course_id = 0 ) {\r\n-\t\t\t\u002F*\r\n-\t\t\t$lp_course_cache = LP_Course_Cache::instance();\r\n-\t\t\t$key_cache       = sprintf( '%d\u002Fitem_id\u002F%d', $course_id, $item_id );\r\n-\t\t\t$item            = $lp_course_cache->get_cache( $key_cache );*\u002F\r\n-\r\n-\t\t\t$item = false;\r\n-\r\n-\t\t\tif ( false === $item ) {\r\n-\t\t\t\t$item_post = get_post( $item_id );\r\n-\r\n-\t\t\t\tif ( ! $item_post ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item_type = $item_post->post_type;\r\n-\r\n-\t\t\t\tif ( learn_press_is_support_course_item_type( $item_type ) ) {\r\n-\t\t\t\t\t$type = str_replace( 'lp_', '', $item_type );\r\n-\r\n-\t\t\t\t\tswitch ( $type ) {\r\n-\t\t\t\t\t\tcase 'lesson':\r\n-\t\t\t\t\t\t\t$item = LP_Lesson::get_lesson( $item_id );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'quiz':\r\n-\t\t\t\t\t\t\t$item = LP_Quiz::get_quiz( $item_id );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t$class_name = apply_filters(\r\n-\t\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-object-class',\r\n-\t\t\t\t\t\t\t\tarray(),\r\n-\t\t\t\t\t\t\t\t$type,\r\n-\t\t\t\t\t\t\t\t$item_type,\r\n-\t\t\t\t\t\t\t\t$item_id\r\n-\t\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\t\tif ( ! empty( $class_name ) && isset( $class_name[ $type ] ) ) {\r\n-\t\t\t\t\t\t\t\t$class = $class_name[ $type ];\r\n-\r\n-\t\t\t\t\t\t\t\tif ( is_string( $class ) && class_exists( $class ) ) {\r\n-\t\t\t\t\t\t\t\t\t$item = new $class( $item_id );\r\n-\t\t\t\t\t\t\t\t} elseif ( $class instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t\t\t\t\t$item = $class;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Todo: don't know why when set course here, theme ivy still null course\r\n-\t\t\t\t\t\u002F*if ( $item instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t\t$item->set_course( $course_id );\r\n-\t\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\t\t\u002F\u002F $lp_course_cache->set_cache( $key_cache, $item );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $item;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get template name of item.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_template() {\r\n-\t\t\t$item_type = $this->get_item_type();\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsection-item-template',\r\n-\t\t\t\t'item-' . str_replace( 'lp_', '', $item_type ),\r\n-\t\t\t\t$item_type\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * To array.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function to_array() {\r\n-\t\t\t$post = get_post( $this->get_id() );\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fitem\u002Fto_array',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'      => $this->get_id(),\r\n-\t\t\t\t\t'type'    => $this->get_item_type(),\r\n-\t\t\t\t\t'title'   => $post->post_title,\r\n-\t\t\t\t\t'preview' => $this->is_preview(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create nonce for checking actions on an item.\r\n-\t\t *\r\n-\t\t * @param string $action\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param int    $user_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function create_nonce( $action = '', $course_id = 0, $user_id = 0 ) {\r\n-\t\t\tif ( ! $course_id && $this->get_course() ) {\r\n-\t\t\t\t$course_id = $this->get_course()->get_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$action = $this->get_nonce_action( $action, $course_id, $user_id );\r\n-\r\n-\t\t\treturn wp_create_nonce( $action );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Verify nonce for an action on item.\r\n-\t\t *\r\n-\t\t * @param string $nonce\r\n-\t\t * @param string $action\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param int    $user_id\r\n-\t\t *\r\n-\t\t * @return false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function verify_nonce( $nonce, $action = '', $course_id = 0, $user_id = 0 ) {\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t$course_id = $this->get_course()->get_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$action = $this->get_nonce_action( $action, $course_id, $user_id );\r\n-\r\n-\t\t\treturn wp_verify_nonce( $nonce, $action );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $action\r\n-\t\t * @param $course_id\r\n-\t\t * @param $user_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_nonce_action( $action, $course_id, $user_id ) {\r\n-\t\t\treturn sprintf( '%s-item-%d-%d-%d', $action, $user_id, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int $question_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.1.7.2\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function is_viewing_question( $question_id = 0 ) {\r\n-\t\t\tglobal $lp_quiz_question;\r\n-\t\t\tif ( $question_id ) {\r\n-\t\t\t\t$viewing = $lp_quiz_question && $lp_quiz_question->get_id() == $question_id;\r\n-\t\t\t} else {\r\n-\t\t\t\t$viewing = $lp_quiz_question ? $lp_quiz_question->get_id() : false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fis-viewing-question', $viewing, $question_id, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int $user_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.1.7.2\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_status_classes( $user_id = 0, $course_id = 0 ) {\r\n-\t\t\t$status_classes = array();\r\n-\t\t\t$course         = learn_press_get_course( $course_id );\r\n-\t\t\t$user           = learn_press_get_user( $user_id, ! $user_id );\r\n-\r\n-\t\t\tif ( $course ) {\r\n-\t\t\t\tif ( $this->is_preview() ) {\r\n-\t\t\t\t\t$status_classes[] = 'item-preview';\r\n-\t\t\t\t} elseif ( $course->is_free() && $course->is_no_required_enroll() ) {\r\n-\t\t\t\t\t$status_classes[] = 'item-free';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\t$item_status = $user->get_item_status( $this->get_id(), $course_id );\r\n-\t\t\t\t$item_grade  = $user->get_item_grade( $this->get_id(), $course_id );\r\n-\r\n-\t\t\t\tif ( $item_status ) {\r\n-\t\t\t\t\t$status_classes[] = 'course-item-status';\r\n-\t\t\t\t\t$status_classes[] = 'item-' . $item_status;\r\n-\t\t\t\t}\r\n-\t\t\t\tswitch ( $item_status ) {\r\n-\t\t\t\t\tcase 'started':\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'completed':\r\n-\t\t\t\t\t\t$status_classes[] = $item_grade;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fitem-status-classes',\r\n-\t\t\t\t$status_classes,\r\n-\t\t\t\t$this->get_id(),\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$user_id\r\n-\t\t\t);\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get duration of quiz\r\n-\t\t *\r\n-\t\t * @return LP_Duration\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration() {\r\n-\t\t\t$duration = $this->get_data( 'duration' );\r\n-\r\n-\t\t\tif ( false === $duration || '' === $duration ) {\r\n-\t\t\t\t$duration = get_post_meta( $this->get_id(), '_lp_duration', true );\r\n-\r\n-\t\t\t\tif ( $duration ) {\r\n-\t\t\t\t\t$duration = new LP_Duration( $duration );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$duration = new LP_Duration( 0 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->_set_data( 'duration', $duration );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-duration', $duration, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\tpublic function offsetExists( $offset ) {\r\n-\t\t}\r\n-\r\n-\t\tpublic function offsetGet( $offset ) {\r\n-\t\t}\r\n-\r\n-\t\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t}\r\n-\r\n-\t\tpublic function offsetUnset( $offset ) {\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_Item.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Course_Item' ) ) {\n+\t\u002F**\n+\t * Class LP_Course_Item.\n+\t *\u002F\n+\tclass LP_Course_Item extends LP_Abstract_Post_Data {\n+\n+\t\t\u002F**\n+\t\t * The icon maybe used somewhere.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_icon_class = '';\n+\n+\t\t\u002F**\n+\t\t * The type of item.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_item_type = '';\n+\n+\t\t\u002F**\n+\t\t * @var LP_Course\n+\t\t *\u002F\n+\t\tprotected $_course = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Course_Section\n+\t\t *\u002F\n+\t\tprotected $_section = null;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $_content = null;\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_preview = false;\n+\n+\n+\t\t\u002F**\n+\t\t * LP_Course_Item constructor.\n+\t\t *\n+\t\t * @param $item mixed\n+\t\t * @param $args array\n+\t\t *\u002F\n+\t\tpublic function __construct( $item, $args = null ) {\n+\t\t\tparent::__construct( $item, $args );\n+\n+\t\t\t$this->add_support( 'comments', get_post_field( 'comment_status', $this->get_id() ) === 'open' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get type of item.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_item_type( $context = '' ) {\n+\t\t\t$post_type = $this->_item_type;\n+\n+\t\t\tif ( $context === 'display' ) {\n+\t\t\t\t$post_type_object = get_post_type_object( $post_type );\n+\n+\t\t\t\tif ( $post_type_object ) {\n+\t\t\t\t\t$post_type = $post_type_object->labels->singular_name;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $post_type;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_icon_class() {\n+\t\t\treturn $this->_icon_class;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check lesson is preview\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_preview( $context = 'display' ): bool {\n+\t\t\t$item_id = $this->get_id();\n+\n+\t\t\t$this->_preview = false;\n+\n+\t\t\tif ( $item_id && LP_LESSON_CPT === $this->get_post_type() ) {\n+\t\t\t\t$is_lesson_preview = get_post_meta( $item_id, '_lp_preview', true );\n+\n+\t\t\t\t$this->_preview = 'yes' === $is_lesson_preview;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fitem-preview', $this->_preview, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_title( $context = '' ) {\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-title', parent::get_title( $context ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get format of Post\n+\t\t *\n+\t\t * @return bool|false|mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_format() {\n+\t\t\t$format = get_post_meta( $this->get_id(), 'post_format', true );\n+\n+\t\t\tif ( ! $format ) {\n+\t\t\t\t$format = 'standard';\n+\t\t\t}\n+\n+\t\t\treturn $format;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if item can be shown in course curriculum.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.0.0\n+\t\t *\u002F\n+\t\tpublic function is_visible() {\n+\t\t\t$show = true;\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-visible', $show, $this->get_item_type(), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get class of item.\n+\t\t *\n+\t\t * @param $course_id\n+\t\t * @param $item_id\n+\t\t * @param $can_view_item\n+\t\t * @param $more\n+\t\t *\n+\t\t * @return array|mixed|null\n+\t\t * @since 4.1.4.2\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_class_v2( $course_id, $item_id, $can_view_item, $more = array() ) {\n+\t\t\t$course = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn $more;\n+\t\t\t}\n+\n+\t\t\t$defaults = array_merge(\n+\t\t\t\tarray(\n+\t\t\t\t\t'course-item',\n+\t\t\t\t\t'course-item-' . $this->get_item_type(),\n+\t\t\t\t\t'course-item-' . $item_id,\n+\t\t\t\t),\n+\t\t\t\t(array) $more\n+\t\t\t);\n+\n+\t\t\t$user_id = get_current_user_id();\n+\t\t\t$user    = UserModel::find( $user_id, true );\n+\n+\t\t\t$userCourseModel    = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t$enrolled           = $user && $userCourseModel && $userCourseModel->has_enrolled_or_finished();\n+\t\t\t$no_required_enroll = $course->has_no_enroll_requirement();\n+\n+\t\t\t$post_format = $this->get_format();\n+\t\t\tif ( 'standard' !== $post_format && $post_format ) {\n+\t\t\t\t$defaults[] = 'course-item-type-' . $post_format;\n+\t\t\t}\n+\n+\t\t\tif ( $no_required_enroll ) {\n+\t\t\t\t$defaults[] = 'item-free';\n+\t\t\t}\n+\n+\t\t\tif ( ! $enrolled ) {\n+\t\t\t\t$defaults['item-locked'] = 'item-locked';\n+\n+\t\t\t\tif ( $this->is_preview() ) {\n+\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\n+\t\t\t\t\t$defaults['has-status']   = 'has-status';\n+\t\t\t\t\tunset( $defaults['item-locked'] );\n+\t\t\t\t}\n+\t\t\t} elseif ( ! $can_view_item->flag ) {\n+\t\t\t\t$defaults[] = 'item-locked';\n+\t\t\t} else {\n+\t\t\t\t$userItemModel = UserItemModel::find_user_item(\n+\t\t\t\t\t$user_id,\n+\t\t\t\t\t$item_id,\n+\t\t\t\t\tget_post_type( $item_id ),\n+\t\t\t\t\t$course_id,\n+\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\ttrue\n+\t\t\t\t);\n+\t\t\t\t$item_status   = $userItemModel ? $userItemModel->get_status() : '';\n+\t\t\t\t$item_grade    = $userItemModel ? $userItemModel->get_graduation() : '';\n+\n+\t\t\t\tif ( $item_status ) {\n+\t\t\t\t\t$defaults[] = 'has-status';\n+\t\t\t\t\t$defaults[] = 'status-' . $item_status;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $item_status ) {\n+\t\t\t\t\tcase 'started':\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'completed':\n+\t\t\t\t\t\t$defaults[] = $item_grade;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tif ( $this->is_preview() ) {\n+\t\t\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\n+\t\t\t\t\t\t\t$defaults['has-status']   = 'has-status';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$item_class = apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-status-class',\n+\t\t\t\t\t\t\t$item_status,\n+\t\t\t\t\t\t\t$item_grade,\n+\t\t\t\t\t\t\t$this->get_item_type(),\n+\t\t\t\t\t\t\t$item_id,\n+\t\t\t\t\t\t\t$course_id\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $item_class ) {\n+\t\t\t\t\t\t\t$defaults[] = $item_class;\n+\t\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$classes = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse-item-class',\n+\t\t\t\t$defaults,\n+\t\t\t\t$this->get_item_type(),\n+\t\t\t\t$item_id,\n+\t\t\t\t$course_id\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Filter unwanted values.\n+\t\t\t$classes = is_array( $classes ) ? $classes : explode( ' ', $classes );\n+\t\t\t$classes = array_filter( $classes );\n+\t\t\t$classes = array_unique( $classes );\n+\n+\t\t\treturn $classes;\n+\t\t}\n+\n+\t\tpublic function get_status_title() {\n+\t\t\t$course_id      = get_the_ID();\n+\t\t\t$status_message = '';\n+\n+\t\t\t$user = learn_press_get_current_user();\n+\t\t\tif ( $user->get_item_status( $this->get_id(), $course_id ) === 'completed' ) {\n+\t\t\t\t$item_grade = $user->get_item_grade( $this->get_id(), $course_id );\n+\n+\t\t\t\tif ( $item_grade === 'failed' ) {\n+\t\t\t\t\t$status_message = _x( 'Failed', 'course item status title', 'learnpress' );\n+\t\t\t\t} elseif ( $item_grade === 'passed' ) {\n+\t\t\t\t\t$status_message = _x( 'Passed', 'course item status title', 'learnpress' );\n+\t\t\t\t} else {\n+\t\t\t\t\t$status_message = _x( 'Completed', 'course item status title', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$status_message = _x( 'Unread', 'course item status title', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse-item-status-title',\n+\t\t\t\t$status_message,\n+\t\t\t\t$this->get_id(),\n+\t\t\t\t$course_id\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get permalink of item inside course.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_permalink() {\n+\t\t\t$link = false;\n+\n+\t\t\tif ( $this->_course ) {\n+\t\t\t\t$link = $this->_course->get_item_link( $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-link', $link, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set course parent of this item.\n+\t\t *\n+\t\t * @param LP_Course|LP_Abstract_Course|int $course\n+\t\t *\u002F\n+\t\tpublic function set_course( $course ) {\n+\t\t\tif ( is_numeric( $course ) ) {\n+\t\t\t\t$this->_course = learn_press_get_course( $course );\n+\t\t\t} else {\n+\t\t\t\t$this->_course = $course;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return course.\n+\t\t *\n+\t\t * @return LP_Course\n+\t\t *\u002F\n+\t\tpublic function get_course() {\n+\t\t\treturn $this->_course;\n+\t\t}\n+\n+\t\tpublic function get_course_id() {\n+\t\t\t$course = $this->get_course();\n+\n+\t\t\tif ( $course ) {\n+\t\t\t\treturn $course->get_id();\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param LP_Course_Section $section\n+\t\t *\u002F\n+\t\tpublic function set_section( $section ) {\n+\t\t\t$this->_section = $section;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Course_Section\n+\t\t *\u002F\n+\t\tpublic function get_section() {\n+\t\t\treturn $this->_section;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instance of an item from post\n+\t\t *\n+\t\t * @param int    $item_id Item id.\n+\t\t * @param int    $course_id .\n+\t\t *\n+\t\t * @return LP_Course_Item|false\n+\t\t * @Todo: tungnx - review - rewrite - set cache - check where call this function\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.3 - change cache\n+\t\t * @version 4.0.2\n+\t\t * @since 3.x.x\n+\t\t *\u002F\n+\t\tpublic static function get_item( $item_id = 0, $course_id = 0 ) {\n+\t\t\t\u002F*\n+\t\t\t$lp_course_cache = LP_Course_Cache::instance();\n+\t\t\t$key_cache       = sprintf( '%d\u002Fitem_id\u002F%d', $course_id, $item_id );\n+\t\t\t$item            = $lp_course_cache->get_cache( $key_cache );*\u002F\n+\n+\t\t\t$item = false;\n+\n+\t\t\tif ( false === $item ) {\n+\t\t\t\t$item_post = get_post( $item_id );\n+\n+\t\t\t\tif ( ! $item_post ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\n+\t\t\t\t$item_type = $item_post->post_type;\n+\n+\t\t\t\tif ( learn_press_is_support_course_item_type( $item_type ) ) {\n+\t\t\t\t\t$type = str_replace( 'lp_', '', $item_type );\n+\n+\t\t\t\t\tswitch ( $type ) {\n+\t\t\t\t\t\tcase 'lesson':\n+\t\t\t\t\t\t\t$item = LP_Lesson::get_lesson( $item_id );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'quiz':\n+\t\t\t\t\t\t\t$item = LP_Quiz::get_quiz( $item_id );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t$class_name = apply_filters(\n+\t\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-object-class',\n+\t\t\t\t\t\t\t\tarray(),\n+\t\t\t\t\t\t\t\t$type,\n+\t\t\t\t\t\t\t\t$item_type,\n+\t\t\t\t\t\t\t\t$item_id\n+\t\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\t\tif ( ! empty( $class_name ) && isset( $class_name[ $type ] ) ) {\n+\t\t\t\t\t\t\t\t$class = $class_name[ $type ];\n+\n+\t\t\t\t\t\t\t\tif ( is_string( $class ) && class_exists( $class ) ) {\n+\t\t\t\t\t\t\t\t\t$item = new $class( $item_id );\n+\t\t\t\t\t\t\t\t} elseif ( $class instanceof LP_Course_Item ) {\n+\t\t\t\t\t\t\t\t\t$item = $class;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Todo: don't know why when set course here, theme ivy still null course\n+\t\t\t\t\t\u002F*if ( $item instanceof LP_Course_Item ) {\n+\t\t\t\t\t\t$item->set_course( $course_id );\n+\t\t\t\t\t}*\u002F\n+\n+\t\t\t\t\t\u002F\u002F $lp_course_cache->set_cache( $key_cache, $item );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $item;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get template name of item.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_template() {\n+\t\t\t$item_type = $this->get_item_type();\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fsection-item-template',\n+\t\t\t\t'item-' . str_replace( 'lp_', '', $item_type ),\n+\t\t\t\t$item_type\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * To array.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function to_array() {\n+\t\t\t$post = get_post( $this->get_id() );\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fitem\u002Fto_array',\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'      => $this->get_id(),\n+\t\t\t\t\t'type'    => $this->get_item_type(),\n+\t\t\t\t\t'title'   => $post->post_title,\n+\t\t\t\t\t'preview' => $this->is_preview(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create nonce for checking actions on an item.\n+\t\t *\n+\t\t * @param string $action\n+\t\t * @param int    $course_id\n+\t\t * @param int    $user_id\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function create_nonce( $action = '', $course_id = 0, $user_id = 0 ) {\n+\t\t\tif ( ! $course_id && $this->get_course() ) {\n+\t\t\t\t$course_id = $this->get_course()->get_id();\n+\t\t\t}\n+\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t}\n+\n+\t\t\t$action = $this->get_nonce_action( $action, $course_id, $user_id );\n+\n+\t\t\treturn wp_create_nonce( $action );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Verify nonce for an action on item.\n+\t\t *\n+\t\t * @param string $nonce\n+\t\t * @param string $action\n+\t\t * @param int    $course_id\n+\t\t * @param int    $user_id\n+\t\t *\n+\t\t * @return false|int\n+\t\t *\u002F\n+\t\tpublic function verify_nonce( $nonce, $action = '', $course_id = 0, $user_id = 0 ) {\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\t$course_id = $this->get_course()->get_id();\n+\t\t\t}\n+\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t}\n+\n+\t\t\t$action = $this->get_nonce_action( $action, $course_id, $user_id );\n+\n+\t\t\treturn wp_verify_nonce( $nonce, $action );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $action\n+\t\t * @param $course_id\n+\t\t * @param $user_id\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_nonce_action( $action, $course_id, $user_id ) {\n+\t\t\treturn sprintf( '%s-item-%d-%d-%d', $action, $user_id, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param int $question_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.1.7.2\n+\t\t *\u002F\n+\t\t\u002F*public function is_viewing_question( $question_id = 0 ) {\n+\t\t\tglobal $lp_quiz_question;\n+\t\t\tif ( $question_id ) {\n+\t\t\t\t$viewing = $lp_quiz_question && $lp_quiz_question->get_id() == $question_id;\n+\t\t\t} else {\n+\t\t\t\t$viewing = $lp_quiz_question ? $lp_quiz_question->get_id() : false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fis-viewing-question', $viewing, $question_id, $this->get_id() );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @param int $user_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.1.7.2\n+\t\t *\u002F\n+\t\t\u002F*public function get_status_classes( $user_id = 0, $course_id = 0 ) {\n+\t\t\t$status_classes = array();\n+\t\t\t$course         = learn_press_get_course( $course_id );\n+\t\t\t$user           = learn_press_get_user( $user_id, ! $user_id );\n+\n+\t\t\tif ( $course ) {\n+\t\t\t\tif ( $this->is_preview() ) {\n+\t\t\t\t\t$status_classes[] = 'item-preview';\n+\t\t\t\t} elseif ( $course->is_free() && $course->is_no_required_enroll() ) {\n+\t\t\t\t\t$status_classes[] = 'item-free';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $user ) {\n+\t\t\t\t$item_status = $user->get_item_status( $this->get_id(), $course_id );\n+\t\t\t\t$item_grade  = $user->get_item_grade( $this->get_id(), $course_id );\n+\n+\t\t\t\tif ( $item_status ) {\n+\t\t\t\t\t$status_classes[] = 'course-item-status';\n+\t\t\t\t\t$status_classes[] = 'item-' . $item_status;\n+\t\t\t\t}\n+\t\t\t\tswitch ( $item_status ) {\n+\t\t\t\t\tcase 'started':\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'completed':\n+\t\t\t\t\t\t$status_classes[] = $item_grade;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fitem-status-classes',\n+\t\t\t\t$status_classes,\n+\t\t\t\t$this->get_id(),\n+\t\t\t\t$course_id,\n+\t\t\t\t$user_id\n+\t\t\t);\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get duration of quiz\n+\t\t *\n+\t\t * @return LP_Duration\n+\t\t *\u002F\n+\t\tpublic function get_duration() {\n+\t\t\t$duration = $this->get_data( 'duration' );\n+\n+\t\t\tif ( false === $duration || '' === $duration ) {\n+\t\t\t\t$duration = get_post_meta( $this->get_id(), '_lp_duration', true );\n+\n+\t\t\t\tif ( $duration ) {\n+\t\t\t\t\t$duration = new LP_Duration( $duration );\n+\t\t\t\t} else {\n+\t\t\t\t\t$duration = new LP_Duration( 0 );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->_set_data( 'duration', $duration );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-item-duration', $duration, $this->get_id() );\n+\t\t}\n+\n+\t\tpublic function offsetExists( $offset ) {\n+\t\t}\n+\n+\t\tpublic function offsetGet( $offset ) {\n+\t\t}\n+\n+\t\tpublic function offsetSet( $offset, $value ) {\n+\t\t}\n+\n+\t\tpublic function offsetUnset( $offset ) {\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item-quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item-quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-item-quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-item-quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003C?php\r\n-class LP_Course_Item_Quiz extends LP_Course_Item {\r\n-\tpublic $name;\r\n-\tfunction __construct( $name ) {\r\n-\t\t$this->name = $name;\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Course_Item_Quiz extends LP_Course_Item {\n+\tpublic $name;\n+\tfunction __construct( $name ) {\n+\t\t$this->name = $name;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,204 +1,204 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_No_Required_Enroll.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.9\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-if ( ! class_exists( 'LP_Course' ) ) {\r\n-\tclass LP_Course_No_Required_Enroll {\r\n-\t\tpublic $_course;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Course_No_Required_Enroll constructor.\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( LP_Course $course ) {\r\n-\t\t\t$this->_course = $course;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get result do quiz\r\n-\t\t *\r\n-\t\t * @param LP_Quiz $quiz\r\n-\t\t * @param array $answered\r\n-\t\t *\r\n-\t\t * @since 4.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_result_quiz( LP_Quiz $quiz, array $answered = [] ): array {\r\n-\t\t\t$result = array(\r\n-\t\t\t\t'questions'         => array(),\r\n-\t\t\t\t'mark'              => $quiz->get_mark(),\r\n-\t\t\t\t'user_mark'         => 0,\r\n-\t\t\t\t'question_count'    => 0,\r\n-\t\t\t\t'question_empty'    => 0,\r\n-\t\t\t\t'question_answered' => 0,\r\n-\t\t\t\t'question_wrong'    => 0,\r\n-\t\t\t\t'question_correct'  => 0,\r\n-\t\t\t\t'status'            => LP_ITEM_COMPLETED,\r\n-\t\t\t\t'result'            => 0,\r\n-\t\t\t\t'time_spend'        => 0,\r\n-\t\t\t\t'passing_grade'     => $quiz->get_passing_grade(),\r\n-\t\t\t\t'answered'          => array(),\r\n-\t\t\t\t'pass'              => 0,\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( empty( $answered ) ) {\r\n-\t\t\t\treturn $result;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question_ids             = array_keys( $answered );\r\n-\t\t\t$result['question_count'] = count( $question_ids );\r\n-\t\t\t$questions                = learn_press_rest_prepare_user_questions( $question_ids );\r\n-\r\n-\t\t\tforeach ( $questions as $key => $question_info ) {\r\n-\t\t\t\t$question_id = $question_info['id'];\r\n-\t\t\t\t\u002F\u002F$question = learn_press_get_question( $question_id );\r\n-\t\t\t\t$question = $question_info['object'];\r\n-\r\n-\t\t\t\tif ( ! $question ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$point = floatval( $question->get_mark() );\r\n-\r\n-\t\t\t\t$result['questions'][ $question_id ]            = $question_info;\r\n-\t\t\t\t$result['answered'][ $question_id ]             = [];\r\n-\t\t\t\t$result['answered'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\r\n-\r\n-\t\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\r\n-\t\t\t\t\t$result['question_answered']++;\r\n-\r\n-\t\t\t\t\t$check = $question->check( $answered[ $question_id ] );\r\n-\t\t\t\t\tif ( $check['correct'] ) {\r\n-\t\t\t\t\t\t$result['question_correct']++;\r\n-\t\t\t\t\t\t$result['user_mark'] += $point;\r\n-\r\n-\t\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = true;\r\n-\t\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = $point;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\r\n-\t\t\t\t\t\t\t$result['user_mark'] -= $point;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$result['question_wrong']++;\r\n-\r\n-\t\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = 0;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\r\n-\t\t\t\t\tif ( $quiz->get_negative_marking() && $quiz->get_minus_skip_questions() ) {\r\n-\t\t\t\t\t\t$result['user_mark'] -= $point;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$result['question_empty']++;\r\n-\r\n-\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$can_review_quiz = get_post_meta( $quiz->get_id(), '_lp_review', true ) === 'yes';\r\n-\t\t\t\tif ( $can_review_quiz && ! array_key_exists( 'instant_check', $answered ) ) {\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\r\n-\t\t\t\t\t\t$question,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'include_is_true' => get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ) === 'yes',\r\n-\t\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $result['user_mark'] \u003C 0 ) {\r\n-\t\t\t\t$result['user_mark'] = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\r\n-\t\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$passing_grade = $quiz->get_data( 'passing_grade', 0 );\r\n-\t\t\tif ( $result['result'] >= $passing_grade ) {\r\n-\t\t\t\t$result['pass'] = 1;\r\n-\t\t\t} else {\r\n-\t\t\t\t$result['pass'] = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $question_id\r\n-\t\t * @param null $answered\r\n-\t\t *\r\n-\t\t * @return array|false\r\n-\t\t *\u002F\r\n-\t\tpublic function guest_check_question( $question_id, $answered = null ) {\r\n-\t\t\t$checked = false;\r\n-\t\t\tif ( isset( $question_id ) && isset( $answered ) ) {\r\n-\t\t\t\t$question            = learn_press_get_question( $question_id );\r\n-\t\t\t\t$checked             = $question->check( $answered );\r\n-\t\t\t\t$checked['answered'] = $answered;\r\n-\t\t\t}\r\n-\t\t\treturn $checked;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Start quiz\r\n-\t\t *\r\n-\t\t * @param LP_Quiz $quiz\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @throws Exception\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function guest_start_quiz( LP_Quiz $quiz ): array {\r\n-\t\t\t$response = array(\r\n-\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t'message' => '',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$show_check          = $quiz->get_instant_check();\r\n-\t\t\t$duration            = $quiz->get_duration();\r\n-\t\t\t$show_correct_review = $quiz->get_show_correct_review();\r\n-\t\t\t$question_ids        = $quiz->get_question_ids();\r\n-\t\t\t$status              = LP_ITEM_STARTED;\r\n-\t\t\t$checked_questions   = [];\r\n-\t\t\t$hinted_questions    = [];\r\n-\t\t\t$time_remaining      = $duration->get();\r\n-\r\n-\t\t\t$questions = learn_press_rest_prepare_user_questions(\r\n-\t\t\t\t$question_ids,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'instant_check'       => $show_check,\r\n-\t\t\t\t\t'quiz_status'         => $status,\r\n-\t\t\t\t\t'checked_questions'   => $checked_questions,\r\n-\t\t\t\t\t'hinted_questions'    => $hinted_questions,\r\n-\t\t\t\t\t'answered'            => [],\r\n-\t\t\t\t\t'show_correct_review' => $show_correct_review,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$response['status']      = 'success';\r\n-\t\t\t$results['question_ids'] = $question_ids;\r\n-\t\t\t$results['questions']    = $questions;\r\n-\t\t\t$results['total_time']   = $time_remaining;\r\n-\t\t\t$results['duration']     = $duration->get();\r\n-\t\t\t$results['status']       = $status; \u002F\u002F Must be started\r\n-\t\t\t$results['retaken']      = 0;\r\n-\t\t\t$results['attempts']     = [];\r\n-\t\t\t$results['user_item_id'] = 0;\r\n-\t\t\t$results['answered']     = [];\r\n-\t\t\t$response['results']     = $results;\r\n-\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_No_Required_Enroll.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.9\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+if ( ! class_exists( 'LP_Course' ) ) {\n+\tclass LP_Course_No_Required_Enroll {\n+\t\tpublic $_course;\n+\n+\t\t\u002F**\n+\t\t * LP_Course_No_Required_Enroll constructor.\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function __construct( LP_Course $course ) {\n+\t\t\t$this->_course = $course;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get result do quiz\n+\t\t *\n+\t\t * @param LP_Quiz $quiz\n+\t\t * @param array $answered\n+\t\t *\n+\t\t * @since 4.0.0\n+\t\t * @version 1.0.1\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_result_quiz( LP_Quiz $quiz, array $answered = [] ): array {\n+\t\t\t$result = array(\n+\t\t\t\t'questions'         => array(),\n+\t\t\t\t'mark'              => $quiz->get_mark(),\n+\t\t\t\t'user_mark'         => 0,\n+\t\t\t\t'question_count'    => 0,\n+\t\t\t\t'question_empty'    => 0,\n+\t\t\t\t'question_answered' => 0,\n+\t\t\t\t'question_wrong'    => 0,\n+\t\t\t\t'question_correct'  => 0,\n+\t\t\t\t'status'            => LP_ITEM_COMPLETED,\n+\t\t\t\t'result'            => 0,\n+\t\t\t\t'time_spend'        => 0,\n+\t\t\t\t'passing_grade'     => $quiz->get_passing_grade(),\n+\t\t\t\t'answered'          => array(),\n+\t\t\t\t'pass'              => 0,\n+\t\t\t);\n+\n+\t\t\tif ( empty( $answered ) ) {\n+\t\t\t\treturn $result;\n+\t\t\t}\n+\n+\t\t\t$question_ids             = array_keys( $answered );\n+\t\t\t$result['question_count'] = count( $question_ids );\n+\t\t\t$questions                = learn_press_rest_prepare_user_questions( $question_ids );\n+\n+\t\t\tforeach ( $questions as $key => $question_info ) {\n+\t\t\t\t$question_id = $question_info['id'];\n+\t\t\t\t\u002F\u002F$question = learn_press_get_question( $question_id );\n+\t\t\t\t$question = $question_info['object'];\n+\n+\t\t\t\tif ( ! $question ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$point = floatval( $question->get_mark() );\n+\n+\t\t\t\t$result['questions'][ $question_id ]            = $question_info;\n+\t\t\t\t$result['answered'][ $question_id ]             = [];\n+\t\t\t\t$result['answered'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\n+\n+\t\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\n+\t\t\t\t\t$result['question_answered']++;\n+\n+\t\t\t\t\t$check = $question->check( $answered[ $question_id ] );\n+\t\t\t\t\tif ( $check['correct'] ) {\n+\t\t\t\t\t\t$result['question_correct']++;\n+\t\t\t\t\t\t$result['user_mark'] += $point;\n+\n+\t\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = true;\n+\t\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = $point;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\n+\t\t\t\t\t\t\t$result['user_mark'] -= $point;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$result['question_wrong']++;\n+\n+\t\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = false;\n+\t\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = 0;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\n+\t\t\t\t\tif ( $quiz->get_negative_marking() && $quiz->get_minus_skip_questions() ) {\n+\t\t\t\t\t\t$result['user_mark'] -= $point;\n+\t\t\t\t\t}\n+\t\t\t\t\t$result['question_empty']++;\n+\n+\t\t\t\t\t$result['answered'][ $question_id ]['correct'] = false;\n+\t\t\t\t\t$result['answered'][ $question_id ]['mark']    = 0;\n+\t\t\t\t}\n+\n+\t\t\t\t$can_review_quiz = get_post_meta( $quiz->get_id(), '_lp_review', true ) === 'yes';\n+\t\t\t\tif ( $can_review_quiz && ! array_key_exists( 'instant_check', $answered ) ) {\n+\t\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\n+\t\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\n+\t\t\t\t\t\t$question,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'include_is_true' => get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ) === 'yes',\n+\t\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $result['user_mark'] \u003C 0 ) {\n+\t\t\t\t$result['user_mark'] = 0;\n+\t\t\t}\n+\n+\t\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\n+\t\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\n+\t\t\t}\n+\n+\t\t\t$passing_grade = $quiz->get_data( 'passing_grade', 0 );\n+\t\t\tif ( $result['result'] >= $passing_grade ) {\n+\t\t\t\t$result['pass'] = 1;\n+\t\t\t} else {\n+\t\t\t\t$result['pass'] = 0;\n+\t\t\t}\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $question_id\n+\t\t * @param null $answered\n+\t\t *\n+\t\t * @return array|false\n+\t\t *\u002F\n+\t\tpublic function guest_check_question( $question_id, $answered = null ) {\n+\t\t\t$checked = false;\n+\t\t\tif ( isset( $question_id ) && isset( $answered ) ) {\n+\t\t\t\t$question            = learn_press_get_question( $question_id );\n+\t\t\t\t$checked             = $question->check( $answered );\n+\t\t\t\t$checked['answered'] = $answered;\n+\t\t\t}\n+\t\t\treturn $checked;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Start quiz\n+\t\t *\n+\t\t * @param LP_Quiz $quiz\n+\t\t *\n+\t\t * @return array\n+\t\t * @throws Exception\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function guest_start_quiz( LP_Quiz $quiz ): array {\n+\t\t\t$response = array(\n+\t\t\t\t'status'  => 'error',\n+\t\t\t\t'message' => '',\n+\t\t\t);\n+\n+\t\t\t$show_check          = $quiz->get_instant_check();\n+\t\t\t$duration            = $quiz->get_duration();\n+\t\t\t$show_correct_review = $quiz->get_show_correct_review();\n+\t\t\t$question_ids        = $quiz->get_question_ids();\n+\t\t\t$status              = LP_ITEM_STARTED;\n+\t\t\t$checked_questions   = [];\n+\t\t\t$hinted_questions    = [];\n+\t\t\t$time_remaining      = $duration->get();\n+\n+\t\t\t$questions = learn_press_rest_prepare_user_questions(\n+\t\t\t\t$question_ids,\n+\t\t\t\tarray(\n+\t\t\t\t\t'instant_check'       => $show_check,\n+\t\t\t\t\t'quiz_status'         => $status,\n+\t\t\t\t\t'checked_questions'   => $checked_questions,\n+\t\t\t\t\t'hinted_questions'    => $hinted_questions,\n+\t\t\t\t\t'answered'            => [],\n+\t\t\t\t\t'show_correct_review' => $show_correct_review,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$response['status']      = 'success';\n+\t\t\t$results['question_ids'] = $question_ids;\n+\t\t\t$results['questions']    = $questions;\n+\t\t\t$results['total_time']   = $time_remaining;\n+\t\t\t$results['duration']     = $duration->get();\n+\t\t\t$results['status']       = $status; \u002F\u002F Must be started\n+\t\t\t$results['retaken']      = 0;\n+\t\t\t$results['attempts']     = [];\n+\t\t\t$results['user_item_id'] = 0;\n+\t\t\t$results['answered']     = [];\n+\t\t\t$response['results']     = $results;\n+\n+\t\t\treturn $response;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1101 +1,1101 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Course' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Course\r\n-\t *\u002F\r\n-\tclass LP_Course extends LP_Abstract_Course {\r\n-\t\tprotected $key_info_extra_fast_query = '_lp_info_extra_fast_query';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Course constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $course\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $course ) {\r\n-\t\t\tparent::__construct( $course );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Debug log.\r\n-\t\t *\r\n-\t\t * @param $data\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.5 - comment - not use\r\n-\t\t *\u002F\r\n-\t\t\u002F*public static function log( $data ) {\r\n-\t\t\treturn $data;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default course meta.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_meta() {\r\n-\t\t\t$meta = array(\r\n-\t\t\t\t'duration'                 => '10 weeks',\r\n-\t\t\t\t'max_students'             => 1000,\r\n-\t\t\t\t'students'                 => 0,\r\n-\t\t\t\t'retake_count'             => 0,\r\n-\t\t\t\t'featured'                 => 'no',\r\n-\t\t\t\t\u002F\u002F'block_lesson_content'     => 'no',\r\n-\t\t\t\t'external_link_buy_course' => '',\r\n-\t\t\t\t'course_result'            => 'evaluate_lesson',\r\n-\t\t\t\t'passing_condition'        => 80,\r\n-\t\t\t\t'price'                    => '',\r\n-\t\t\t\t'sale_price'               => '',\r\n-\t\t\t\t'sale_start'               => '',\r\n-\t\t\t\t'sale_end'                 => '',\r\n-\t\t\t\t'required_enroll'          => 'yes',\r\n-\t\t\t\t'course_author'            => learn_press_get_current_user_id(),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fdefault-meta', $meta );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get LP Course.\r\n-\t\t *\r\n-\t\t * @param int   $course_id\r\n-\t\t *\r\n-\t\t * @return mixed|bool|LP_Course\r\n-\t\t * @Todo - Tungnx review to rewrite this method.\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_course( int $course_id = 0 ) {\r\n-\t\t\tif ( isset( LP_Global::$courses[ $course_id ] ) ) {\r\n-\t\t\t\treturn LP_Global::$courses[ $course_id ];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$the_course = self::get_course_object( $course_id );\r\n-\r\n-\t\t\tif ( ! $the_course ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$key_args = wp_parse_args(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'   => $the_course->ID,\r\n-\t\t\t\t\t'type' => $the_course->post_type,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$key = LP_Helper::array_to_md5( $key_args );\r\n-\r\n-\t\t\tif ( empty( LP_Global::$courses[ $key ] ) ) {\r\n-\t\t\t\t$class_name = self::get_course_class( $the_course );\r\n-\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\r\n-\t\t\t\t\t$course = new $class_name( $the_course->ID );\r\n-\t\t\t\t} elseif ( $class_name instanceof LP_Abstract_Course ) {\r\n-\t\t\t\t\t$course = $class_name;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$course = new self( $the_course->ID );\r\n-\t\t\t\t}\r\n-\t\t\t\tLP_Global::$courses[ $key ] = $course;\r\n-\t\t\t} else {\r\n-\t\t\t\t$course = LP_Global::$courses[ $key ];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Force to reload course data into cache if it is not\r\n-\t\t\t * loaded or has been deleted for some reasons.\r\n-\t\t\t *\u002F\r\n-\t\t\t$course->load();\r\n-\r\n-\t\t\treturn $course;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $course_type\r\n-\t\t *\r\n-\t\t * @return string|false\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_class_name_from_course_type( $course_type ) {\r\n-\t\t\treturn LP_COURSE_CPT === $course_type ? __CLASS__ : 'LP_Course_' . implode(\r\n-\t\t\t\t'_',\r\n-\t\t\t\tarray_map( 'ucfirst', explode( '-', $course_type ) )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the course class name\r\n-\t\t *\r\n-\t\t * @param WP_Post $the_course\r\n-\t\t * @param array   $args (default: array())\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_course_class( $the_course, $args = array() ) {\r\n-\t\t\t$course_id = absint( $the_course->ID );\r\n-\t\t\t$type      = $the_course->post_type;\r\n-\r\n-\t\t\t$class_name = self::get_class_name_from_course_type( $type );\r\n-\r\n-\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fobject-class', $class_name, $type, $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the course object\r\n-\t\t *\r\n-\t\t * @param mixed $the_course\r\n-\t\t *\r\n-\t\t * @return WP_Post|bool false on failure\r\n-\t\t * @uses   WP_Post\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_course_object( $the_course ) {\r\n-\t\t\t$the_course_passed = $the_course;\r\n-\t\t\tif ( false === $the_course ) {\r\n-\t\t\t\t$the_course = get_post_type() === LP_COURSE_CPT ? $GLOBALS['post'] : false;\r\n-\t\t\t} elseif ( is_numeric( $the_course ) ) {\r\n-\t\t\t\t$the_course = get_post( $the_course );\r\n-\t\t\t} elseif ( $the_course instanceof LP_Abstract_Course ) {\r\n-\t\t\t\t$the_course = get_post( $the_course->get_id() );\r\n-\t\t\t} elseif ( ! ( $the_course instanceof WP_Post ) ) {\r\n-\t\t\t\t$the_course = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $the_course && $the_course->post_type !== LP_COURSE_CPT ) {\r\n-\t\t\t\t$the_course = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fpost-object', $the_course, $the_course_passed );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check time remaining course when enable duration expire\r\n-\t\t * Value: -1 is no limit (default)\r\n-\t\t * Value: 0 is block\r\n-\t\t * Administrator || (is instructor && is author course) will be not block.\r\n-\t\t *\r\n-\t\t * @return int second\r\n-\t\t * @since 4.0.0\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function timestamp_remaining_duration(): int {\r\n-\t\t\t$timestamp_remaining = - 1;\r\n-\t\t\t$user                = learn_press_get_user( get_current_user_id() );\r\n-\r\n-\t\t\tif ( current_user_can( 'administrator' ) ||\r\n-\t\t\t\t( current_user_can( LP_TEACHER_ROLE ) && $this->get_author()->get_id() === $user->get_id() ) ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 0 === absint( $this->get_data( 'duration' ) ) ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 'yes' !== $this->get_data( 'block_course_duration_expire' ) ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $user instanceof LP_User_Guest ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_item_data = $user->get_course_data( $this->get_id() );\r\n-\r\n-\t\t\tif ( ! $course_item_data ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_start_time   = $course_item_data->get_start_time()->get_raw_date();\r\n-\t\t\t$duration            = $this->get_data( 'duration' );\r\n-\t\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\r\n-\t\t\t$timestamp_current   = time();\r\n-\t\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\r\n-\r\n-\t\t\tif ( $timestamp_remaining \u003C 0 ) {\r\n-\t\t\t\t$timestamp_remaining = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get option enable block course when finish course\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function enable_block_item_when_finish(): bool {\r\n-\t\t\treturn 'yes' === $this->get_data( 'block_course_finished' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function allow_repurchase(): bool {\r\n-\t\t\treturn 'yes' === $this->get_data( 'allow_repurchase' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function allow_repurchase_course_option(): string {\r\n-\t\t\treturn $this->get_data( 'allow_repurchase_course_option', 'reset' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get first item of course\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.0.0\r\n-\t\t * @modify 4.1.3\r\n-\t\t * @version 1.0.2\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_first_item_id(): int {\r\n-\t\t\t$course_id = $this->get_id();\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\treturn $courseModel->get_first_item_id();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t\u002F\u002F Get cache\r\n-\t\t\t\t$lp_course_cache = LP_Course_Cache::instance();\r\n-\t\t\t\t$key_cache       = \"$course_id\u002Ffirst_item_id\";\r\n-\t\t\t\t$first_item_id   = $lp_course_cache->get_cache( $key_cache );\r\n-\r\n-\t\t\t\tif ( ! $first_item_id ) {\r\n-\t\t\t\t\t$extra_info = $this->get_info_extra_for_fast_query();\r\n-\r\n-\t\t\t\t\tif ( ! $extra_info->first_item_id ) {\r\n-\t\t\t\t\t\t$first_item_id             = LP_Course_DB::getInstance()->get_first_item_id( $course_id );\r\n-\t\t\t\t\t\t$extra_info->first_item_id = $first_item_id;\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Save post meta\r\n-\t\t\t\t\t\t$this->set_info_extra_for_fast_query( $extra_info );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$first_item_id = $extra_info->first_item_id;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$lp_course_cache->set_cache( $key_cache, $first_item_id );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$first_item_id = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $first_item_id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get redirect url after enroll course\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t * @since 4.0.0\r\n-\t\t * @return false|string|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function get_redirect_url_after_enroll() {\r\n-\t\t\t$first_item_id = $this->get_first_item_id();\r\n-\t\t\t$redirect      = $first_item_id ? $this->get_item_link( $first_item_id ) : get_the_permalink( $this->get_id() );\r\n-\r\n-\t\t\treturn apply_filters( 'learnpress\u002Frest-api\u002Fenroll-course\u002Fredirect', $redirect );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get info extra on post meta to query fast\r\n-\t\t *\r\n-\t\t * @since 4.1.3\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t * @return LP_Course_Extra_Info_Fast_Query_Model\r\n-\t\t * @deprecated 4.2.7.4\r\n-\t\t *\u002F\r\n-\t\tpublic function get_info_extra_for_fast_query(): LP_Course_Extra_Info_Fast_Query_Model {\r\n-\t\t\t$extra_info = new LP_Course_Extra_Info_Fast_Query_Model();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$extra_info_str = get_post_meta( $this->get_id(), $this->key_info_extra_fast_query, true );\r\n-\r\n-\t\t\t\tif ( ! empty( $extra_info_str ) ) {\r\n-\t\t\t\t\t$extra_info_stdclass = LP_Helper::json_decode( $extra_info_str );\r\n-\t\t\t\t\t$extra_info          = $extra_info->map_stdclass( $extra_info_stdclass );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $extra_info;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set extra info for query fast on post meta\r\n-\t\t *\r\n-\t\t * @since 4.1.3\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t * @param LP_Course_Extra_Info_Fast_Query_Model $data_object\r\n-\t\t *\u002F\r\n-\t\tpublic function set_info_extra_for_fast_query( LP_Course_Extra_Info_Fast_Query_Model $data_object ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$extra_info_json = json_encode( $data_object, JSON_UNESCAPED_UNICODE );\r\n-\r\n-\t\t\t\tif ( JSON_ERROR_NONE !== json_last_error() ) {\r\n-\t\t\t\t\tthrow new Exception( 'Error encode on ' . __METHOD__ );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tupdate_post_meta( $this->get_id(), $this->key_info_extra_fast_query, $extra_info_json );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get info total items of Course\r\n-\t\t *\r\n-\t\t * @param string $type\r\n-\t\t * @param bool $include_preview\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t * @throws Exception\r\n-\t\t * @version 1.0.1\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function count_items( string $type = '', bool $include_preview = true ): int {\r\n-\t\t\t$course_id   = $this->get_id();\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_items = $courseModel->get_total_items();\r\n-\t\t\tif ( empty( $total_items ) ) {\r\n-\t\t\t\treturn 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $type ) ) {\r\n-\t\t\t\tif ( isset( $total_items->{$type} ) ) {\r\n-\t\t\t\t\treturn $total_items->{$type};\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $total_items->count_items ?? 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete relate data when delete course\r\n-\t\t *\r\n-\t\t * @since 4.1.4.1\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function delete_relate_data_when_delete_course() {\r\n-\t\t\t$lp_section_db    = LP_Section_DB::getInstance();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t\u002F\u002F Check valid user\r\n-\t\t\t\tif ( ! current_user_can( 'administrator' ) && $this->get_author( 'id' ) !== get_current_user_id() ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$section_ids = $lp_section_db->get_section_ids_by_course( $this->get_id() );\r\n-\r\n-\t\t\t\t$filter                   = new LP_Section_Filter();\r\n-\t\t\t\t$filter->section_ids      = $section_ids;\r\n-\t\t\t\t$filter->author_id_course = $this->get_author( 'id' );\r\n-\r\n-\t\t\t\t\u002F\u002F Delete section\r\n-\t\t\t\t$lp_section_db->delete_section( $filter );\r\n-\t\t\t\t\u002F\u002F Delete section items\r\n-\t\t\t\t$lp_section_db->delete_section_items( $filter );\r\n-\r\n-\t\t\t\t$filter_user_items          = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter_user_items->item_id = $this->get_id();\r\n-\t\t\t\t$user_course_ids            = $lp_user_items_db->get_user_items_by_course( $filter_user_items );\r\n-\r\n-\t\t\t\t$this->delete_user_item_and_result( $user_course_ids );\r\n-\r\n-\t\t\t\t\u002F\u002F Clear cache total students enrolled.\r\n-\t\t\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\t\t\t\t$lp_course_cache->clean_total_students_enrolled( $this->get_id() );\r\n-\t\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $this->get_id() );\r\n-\t\t\t\t\u002F\u002F Clear cache count students many courses.\r\n-\t\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\r\n-\t\t\t\t$lp_course_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_COURSES_FREE );\r\n-\t\t\t\t\u002F\u002F Clear cache user course.\r\n-\t\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\r\n-\t\t\t\t$lp_user_items_cache->clean_user_items_by_course( $this->get_id() );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete user_items, user_itemmeta, user_item_results\r\n-\t\t * WHERE IN user_item_ids\r\n-\t\t *\r\n-\t\t * @param array $user_course_ids\r\n-\t\t *\u002F\r\n-\t\tpublic function delete_user_item_and_result( array $user_course_ids ) {\r\n-\t\t\t$lp_user_items_db     = LP_User_Items_DB::getInstance();\r\n-\t\t\t$lp_user_item_results = LP_User_Items_Result_DB::instance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( empty( $user_course_ids ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Get user_item_ids has parent in $user_course_ids\r\n-\t\t\t\t$filter                = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter->user_item_ids = $user_course_ids;\r\n-\t\t\t\t$user_item_ids         = $lp_user_items_db->get_item_ids_of_user_course( $filter );\r\n-\r\n-\t\t\t\t$user_item_ids_concat = array_merge( $user_course_ids, $user_item_ids );\r\n-\r\n-\t\t\t\t\u002F\u002F Delete on tb lp_user_items\r\n-\t\t\t\t$filter_delete                = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter_delete->user_item_ids = $user_item_ids_concat;\r\n-\t\t\t\t$user_items_rs                = $lp_user_items_db->get_user_items( $filter_delete );\r\n-\r\n-\t\t\t\t\u002F\u002F For each to clear cache\r\n-\t\t\t\tforeach ( $user_items_rs as $user_item ) {\r\n-\t\t\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\r\n-\t\t\t\t\t$key_one             = \"userItemModel\u002Ffind\u002F{$user_item->user_id}\u002F{$user_item->item_id}\u002F{$user_item->item_type}\";\r\n-\t\t\t\t\t$key_two             = \"userItemModel\u002Ffind\u002F{$user_item->user_id}\u002F{$user_item->item_id}\u002F{$user_item->item_type}\u002F{$user_item->ref_id}\u002F{$user_item->ref_type}\";\r\n-\t\t\t\t\t$lp_user_items_cache->clear( $key_one );\r\n-\t\t\t\t\t$lp_user_items_cache->clear( $key_two );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lp_user_items_db->remove_user_item_ids( $filter_delete );\r\n-\r\n-\t\t\t\t\u002F\u002F Delete user_itemmeta\r\n-\t\t\t\t$lp_user_items_db->remove_user_itemmeta( $filter_delete );\r\n-\r\n-\t\t\t\t\u002F\u002F Delete user_item_results\r\n-\t\t\t\t$lp_user_item_results->remove_user_item_results( $filter_delete );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle params before query courses\r\n-\t\t *\r\n-\t\t * @param array $param\r\n-\t\t * @param LP_Course_Filter $filter\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @since 4.2.3.3\r\n-\t\t * @version 1.0.1\r\n-\t\t * @deprecated 4.2.7.1\r\n-\t\t *\u002F\r\n-\t\tpublic static function handle_params_for_query_courses( LP_Course_Filter &$filter, array $param = [] ) {\r\n-\t\t\t\u002F\u002F_deprecated_function( __METHOD__, '4.2.7.1', 'Courses::handle_params_for_query_courses' );\r\n-\t\t\t\u002F\u002Freturn $filter;\r\n-\r\n-\t\t\t$filter->page       = absint( $param['paged'] ?? 1 );\r\n-\t\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\r\n-\r\n-\t\t\t\u002F\u002F Get Columns\r\n-\t\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\r\n-\t\t\tif ( ! empty( $fields_str ) ) {\r\n-\t\t\t\t$fields         = explode( ',', $fields_str );\r\n-\t\t\t\t$filter->fields = $fields;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Exclude Columns\r\n-\t\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\r\n-\t\t\tif ( ! empty( $fields_exclude_str ) ) {\r\n-\t\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\r\n-\t\t\t\t$filter->exclude_fields = $fields_exclude;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Author\r\n-\t\t\t$filter->post_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\r\n-\t\t\t$author_ids_str      = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? 0 );\r\n-\t\t\tif ( ! empty( $author_ids_str ) ) {\r\n-\t\t\t\t$author_ids           = explode( ',', $author_ids_str );\r\n-\t\t\t\t$filter->post_authors = $author_ids;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Sort by\r\n-\t\t\t * 1. on_sale\r\n-\t\t\t * 2. on_free\r\n-\t\t\t * 3. on_paid\r\n-\t\t\t * 4. on_feature\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! empty( $param['sort_by'] ) ) {\r\n-\t\t\t\t$filter->sort_by[] = $param['sort_by'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Sort by level\r\n-\t\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\r\n-\t\t\tif ( ! empty( $levels_str ) ) {\r\n-\t\t\t\t$levels_str     = str_replace( 'all', '', $levels_str );\r\n-\t\t\t\t$levels         = explode( ',', $levels_str );\r\n-\t\t\t\t$filter->levels = $levels;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Find by category\r\n-\t\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\r\n-\t\t\tif ( ! empty( $term_ids_str ) ) {\r\n-\t\t\t\t$term_ids         = explode( ',', $term_ids_str );\r\n-\t\t\t\t$filter->term_ids = $term_ids;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Find by tag\r\n-\t\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\r\n-\t\t\tif ( ! empty( $tag_ids_str ) ) {\r\n-\t\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\r\n-\t\t\t\t$filter->tag_ids = $tag_ids;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Order by\r\n-\t\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date', 'key' );\r\n-\t\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC' );\r\n-\t\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\r\n-\r\n-\t\t\t\u002F\u002F For search suggest courses\r\n-\t\t\tif ( ! empty( $param['c_suggest'] ) ) {\r\n-\t\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$return_type = $param['return_type'] ?? 'html';\r\n-\t\t\tif ( 'json' !== $return_type ) {\r\n-\t\t\t\t$filter->only_fields = array( 'DISTINCT(ID) AS ID' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get list course\r\n-\t\t * Order By: price, title, rating, date ...\r\n-\t\t * Order: ASC, DES\r\n-\t\t *\r\n-\t\t * @param LP_Course_Filter $filter\r\n-\t\t * @param int $total_rows\r\n-\t\t *\r\n-\t\t * @return object|null|string|int\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t * @sicne 4.1.5\r\n-\t\t * @deprecated 4.2.7.1\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_courses( LP_Course_Filter $filter, int &$total_rows = 0 ) {\r\n-\t\t\t\u002F\u002F_deprecated_function( __METHOD__, '4.2.7.1', 'Courses::get_courses' );\r\n-\t\t\t\u002F\u002Freturn [];\r\n-\r\n-\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t\u002F*$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t\t\t$key_cache            = 'query-courses-' . md5( json_encode( $filter ) );\r\n-\t\t\t\t$key_cache_total_rows = 'query-courses-total-' . md5( json_encode( $filter ) );\r\n-\t\t\t\t$courses_cache        = $lp_courses_cache->get_cache( $key_cache );\r\n-\r\n-\t\t\t\tif ( false !== $courses_cache ) {\r\n-\t\t\t\t\t$total_rows = $lp_courses_cache->get_cache( $key_cache_total_rows );\r\n-\t\t\t\t\treturn LP_Helper::json_decode( $courses_cache );\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\t\u002F\u002F Sort by\r\n-\t\t\t\t$filter->sort_by = (array) $filter->sort_by;\r\n-\t\t\t\tforeach ( $filter->sort_by as $sort_by ) {\r\n-\t\t\t\t\t$filter_tmp                      = clone $filter;\r\n-\t\t\t\t\t$filter_tmp->only_fields         = array( 'DISTINCT(ID)' );\r\n-\t\t\t\t\t$filter_tmp->return_string_query = true;\r\n-\r\n-\t\t\t\t\tswitch ( $sort_by ) {\r\n-\t\t\t\t\t\tcase 'on_sale':\r\n-\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_sale( $filter_tmp );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'on_free':\r\n-\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_free( $filter_tmp );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'on_paid':\r\n-\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_paid( $filter_tmp );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'on_feature':\r\n-\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_feature( $filter_tmp );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t$filter_tmp = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Fsort_by\u002F' . $sort_by, $filter_tmp );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$query_courses_str = $lp_course_db->get_courses( $filter_tmp );\r\n-\r\n-\t\t\t\t\t$filter->where[] = \"AND ID IN ({$query_courses_str})\";\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Order by\r\n-\t\t\t\tswitch ( $filter->order_by ) {\r\n-\t\t\t\t\tcase 'price':\r\n-\t\t\t\t\tcase 'price_low':\r\n-\t\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\r\n-\t\t\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$filter->order = 'DESC';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_price( $filter );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'popular':\r\n-\t\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_popular( $filter );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'post_title':\r\n-\t\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'post_title_desc':\r\n-\t\t\t\t\t\t$filter->order_by = 'post_title';\r\n-\t\t\t\t\t\t$filter->order    = 'DESC';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'menu_order':\r\n-\t\t\t\t\t\t$filter->order_by = 'menu_order';\r\n-\t\t\t\t\t\t$filter->order    = 'ASC';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Query get results\r\n-\t\t\t\t$filter  = apply_filters( 'lp\u002Fcourses\u002Ffilter', $filter );\r\n-\t\t\t\t$courses = LP_Course_DB::getInstance()->get_courses( $filter, $total_rows );\r\n-\r\n-\t\t\t\t\u002F\u002F$lp_courses_cache->set_cache( $key_cache, json_encode( $courses ) );\r\n-\t\t\t\t\u002F\u002F$lp_courses_cache->set_cache( $key_cache_total_rows, $total_rows );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$courses = [];\r\n-\t\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $courses;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get full sections, items of course via Cache, extra info (if it has)\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.1.6.9\r\n-\t\t * @version 1.0.1\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_full_sections_and_items_course() {\r\n-\t\t\t$sections_items = [];\r\n-\t\t\t$course_id      = $this->get_id();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t\treturn $courseModel->get_section_items();\r\n-\r\n-\t\t\t\t\u002F\u002F Get cache\r\n-\t\t\t\t$lp_course_cache = LP_Course_Cache::instance();\r\n-\t\t\t\t$key_cache       = \"$course_id\u002Fsections_items\";\r\n-\t\t\t\t$sections_items  = $lp_course_cache->get_cache( $key_cache );\r\n-\r\n-\t\t\t\tif ( ! $sections_items ) {\r\n-\t\t\t\t\t$extra_info = $this->get_info_extra_for_fast_query();\r\n-\r\n-\t\t\t\t\tif ( empty( $extra_info->sections_items ) ) {\r\n-\t\t\t\t\t\t$sections_items             = $this->get_sections_and_items_course_from_db_and_sort();\r\n-\t\t\t\t\t\t$extra_info->sections_items = $sections_items;\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Save post meta\r\n-\t\t\t\t\t\t$this->set_info_extra_for_fast_query( $extra_info );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$sections_items = $extra_info->sections_items;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$lp_course_cache->set_cache( $key_cache, $sections_items );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $sections_items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all sections and items from database, then handle sort\r\n-\t\t * Only call when data change or not set\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.1.6.9\r\n-\t\t * @version 1.0.0\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_sections_and_items_course_from_db_and_sort(): array {\r\n-\t\t\t$sections_items  = [];\r\n-\t\t\t$course_id       = $this->get_id();\r\n-\t\t\t$lp_course_db    = LP_Course_DB::getInstance();\r\n-\t\t\t$lp_course_cache = LP_Course_Cache::instance();\r\n-\t\t\t$key_cache       = \"$course_id\u002Fsections_items\";\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$sections_results       = $lp_course_db->get_sections( $course_id );\r\n-\t\t\t\t$sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );\r\n-\t\t\t\t$count_items            = count( $sections_items_results );\r\n-\t\t\t\t$index_items_last       = $count_items - 1;\r\n-\t\t\t\t$section_current        = 0;\r\n-\r\n-\t\t\t\tforeach ( $sections_items_results as $index => $sections_item ) {\r\n-\t\t\t\t\t$section_new   = $sections_item->section_id;\r\n-\t\t\t\t\t$section_order = $sections_item->section_order;\r\n-\t\t\t\t\t$item          = new stdClass();\r\n-\t\t\t\t\t$item->id      = $sections_item->item_id;\r\n-\t\t\t\t\t$item->order   = $sections_item->item_order;\r\n-\t\t\t\t\t$item->type    = $sections_item->item_type;\r\n-\r\n-\t\t\t\t\tif ( $section_new != $section_current ) {\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]                      = new stdClass();\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->id                  = $section_new; \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->section_id          = $section_new; \u002F\u002F new field\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->order               = $section_order; \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->section_order       = $section_order; \u002F\u002F new field\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->title               = html_entity_decode( $sections_item->section_name ); \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->section_name        = html_entity_decode( $sections_item->section_name ); \u002F\u002F new field\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->description         = html_entity_decode( $sections_item->section_description ); \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->section_description = html_entity_decode( $sections_item->section_description ); \u002F\u002F new field\r\n-\t\t\t\t\t\t$sections_items[ $section_new ]->items               = [];\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Sort item by item_order\r\n-\t\t\t\t\t\tif ( $section_current != 0 ) {\r\n-\t\t\t\t\t\t\tusort(\r\n-\t\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\r\n-\t\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\r\n-\t\t\t\t\t\t\t\t\treturn $item1->order - $item2->order;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$section_current = $section_new;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$sections_items[ $section_new ]->items[ $item->id ] = $item;\r\n-\r\n-\t\t\t\t\tif ( $index_items_last === $index ) {\r\n-\t\t\t\t\t\tusort(\r\n-\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\r\n-\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\r\n-\t\t\t\t\t\t\t\treturn $item1->order - $item2->order;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Check case if section empty items\r\n-\t\t\t\tforeach ( $sections_results as $section ) {\r\n-\t\t\t\t\t$section_id = $section->section_id;\r\n-\t\t\t\t\tif ( isset( $sections_items[ $section_id ] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$section_obj                   = new stdClass();\r\n-\t\t\t\t\t$section_obj->id               = $section_id;\r\n-\t\t\t\t\t$section_obj->order            = $section->section_order;\r\n-\t\t\t\t\t$section_obj->title            = html_entity_decode( $section->section_name );\r\n-\t\t\t\t\t$section_obj->description      = html_entity_decode( $section->section_description );\r\n-\t\t\t\t\t$section_obj->items            = [];\r\n-\t\t\t\t\t$sections_items[ $section_id ] = $section_obj;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Sort section by section_order\r\n-\t\t\t\tusort(\r\n-\t\t\t\t\t$sections_items,\r\n-\t\t\t\t\tfunction ( $section1, $section2 ) {\r\n-\t\t\t\t\t\treturn $section1->order - $section2->order;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$lp_course_cache->set_cache( $key_cache, $sections_items );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $sections_items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get sections of course.\r\n-\t\t *\r\n-\t\t * @param string $return.\r\n-\t\t * @param int    $section_id.\r\n-\t\t *\r\n-\t\t * @return array|bool|LP_Course_Section[]|LP_Course_Section\r\n-\t\t * @version 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_sections( $return = 'object', $section_id = 0 ) {\r\n-\t\t\t\u002F\u002F $this->load_curriculum();\r\n-\t\t\t\u002F\u002F $sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );\r\n-\r\n-\t\t\t$sections_items = $this->get_full_sections_and_items_course();\r\n-\r\n-\t\t\t\u002F*if ( false === $sections ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t\u002F\u002F$position        = 0;\r\n-\t\t\t$sections = array();\r\n-\t\t\tforeach ( $sections_items as $k => $section_items ) {\r\n-\t\t\t\t$position          = $k + 1;\r\n-\t\t\t\t$section_items_tmp = [\r\n-\t\t\t\t\t'section_id'          => $section_items->id,\r\n-\t\t\t\t\t'section_name'        => $section_items->title,\r\n-\t\t\t\t\t'section_course_id'   => $this->get_id(),\r\n-\t\t\t\t\t'section_order'       => $section_items->order,\r\n-\t\t\t\t\t'section_description' => $section_items->description,\r\n-\t\t\t\t\t'items'               => $section_items->items,\r\n-\t\t\t\t];\r\n-\t\t\t\t$sid               = $section_items->id;\r\n-\t\t\t\t$section           = new LP_Course_Section( $section_items_tmp );\r\n-\t\t\t\t$section->set_position( $position );\r\n-\t\t\t\t$sections[ $sid ] = $section;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $section_id ) {\r\n-\t\t\t\t$sections = $sections[ $section_id ] ?? [];\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse-sections', $sections, $this->get_id(), $return, $section_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get sections arr\r\n-\t\t *\r\n-\t\t * @param int $section_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @version 1.0.0\r\n-\t\t * @sicne 4.1.7\r\n-\t\t *\u002F\r\n-\t\tpublic function get_sections_data_arr( int $section_id = 0 ): array {\r\n-\t\t\t$sections_items = $this->get_full_sections_and_items_course();\r\n-\t\t\t$sections       = array();\r\n-\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\t$section = [\r\n-\t\t\t\t\t'section_id'          => $section_items->id,\r\n-\t\t\t\t\t'section_name'        => $section_items->title,\r\n-\t\t\t\t\t'section_course_id'   => $this->get_id(),\r\n-\t\t\t\t\t'section_order'       => $section_items->order,\r\n-\t\t\t\t\t'section_description' => $section_items->description,\r\n-\t\t\t\t\t'items'               => $section_items->items,\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\tif ( $section_id && $section_id == $section['section_id'] ) {\r\n-\t\t\t\t\t$sections = $section;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$sections[] = $section;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $sections;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get raw data curriculum.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_curriculum_raw(): array {\r\n-\t\t\t$sections_data = array();\r\n-\r\n-\t\t\t$sections_items = $this->get_full_sections_and_items_course();\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\t$section_items_arr              = (array) $section_items;\r\n-\t\t\t\t$section_items_arr['course_id'] = $this->get_id();\r\n-\t\t\t\t$section_items_arr['items']     = [];\r\n-\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t$itemObject = $this->get_item( $item->id );\r\n-\r\n-\t\t\t\t\tif ( ! $itemObject instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item_arr                     = (array) $item;\r\n-\t\t\t\t\t$item_arr['title']            = html_entity_decode( $itemObject->get_title() );\r\n-\t\t\t\t\t$item_arr['preview']          = $itemObject->is_preview();\r\n-\t\t\t\t\t$section_items_arr['items'][] = apply_filters( 'learn-press\u002Fitem\u002Fto_array', $item_arr );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$sections_data[] = $section_items_arr;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $sections_data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all curriculum of this course.\r\n-\t\t *\r\n-\t\t * @param int  $section_id\r\n-\t\t * @param bool $force\r\n-\t\t *\r\n-\t\t * @return bool|LP_Course_Section[]\r\n-\t\t *\u002F\r\n-\t\tpublic function get_curriculum( $section_id = 0, $force = false ) {\r\n-\t\t\treturn $this->get_sections( 'object', $section_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return list of item's ids in course's curriculum.\r\n-\t\t *\r\n-\t\t * @param string|array $type\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 3.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function get_items( $type = '' ) {\r\n-\t\t\t\u002F\u002F$this->load();\r\n-\r\n-\t\t\t$sections_items = $this->get_full_sections_and_items_course();\r\n-\r\n-\t\t\t$items = array();\r\n-\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\tif ( ! empty( $type ) ) {\r\n-\t\t\t\t\t\tif ( $type === $item->type ) {\r\n-\t\t\t\t\t\t\t$items[] = $item->id;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$items[] = $item->id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all items in a course.\r\n-\t\t *\r\n-\t\t * @param string $type . Type of items, eg: lp_lesson, lp_quiz...\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @deprecated\r\n-\t\t *\u002F\r\n-\t\tpublic function get_curriculum_items( $type = '' ) {\r\n-\t\t\treturn $this->get_items( $type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get evaluation type\r\n-\t\t *\r\n-\t\t * @since 4.2.1\r\n-\t\t * @version 1.0.0\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_evaluation_type(): string {\r\n-\t\t\t$evaluation_type = get_post_meta( $this->get_id(), '_lp_course_result', true );\r\n-\t\t\tif ( ! $evaluation_type ) {\r\n-\t\t\t\t$evaluation_type = 'evaluate_lesson';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $evaluation_type;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get categories of course.\r\n-\t\t *\r\n-\t\t * @since 4.2.3\r\n-\t\t * @version 1.0.0\r\n-\t\t * @return array|WP_Term[]\r\n-\t\t *\u002F\r\n-\t\tpublic function get_categories(): array {\r\n-\t\t\t\u002F\u002F Todo: set cache.\r\n-\t\t\t$categories = get_the_terms( $this->get_id(), LP_COURSE_CATEGORY_TAX );\r\n-\t\t\tif ( ! $categories ) {\r\n-\t\t\t\t$categories = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $categories;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get tags of course.\r\n-\t\t *\r\n-\t\t * @since 4.2.3\r\n-\t\t * @version 1.0.0\r\n-\t\t * @return array|WP_Term[]\r\n-\t\t *\u002F\r\n-\t\tpublic function get_tags(): array {\r\n-\t\t\t\u002F\u002F Todo: set cache.\r\n-\t\t\t$tags = get_the_terms( $this->get_id(), LP_COURSE_TAXONOMY_TAG );\r\n-\t\t\tif ( ! $tags ) {\r\n-\t\t\t\t$tags = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $tags;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all categories.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_all_categories(): array {\r\n-\t\t\t\u002F\u002F Todo: set cache.\r\n-\t\t\t$categories = get_terms( LP_COURSE_CATEGORY_TAX );\r\n-\t\t\tif ( ! $categories ) {\r\n-\t\t\t\t$categories = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $categories;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all curriculum of this course.\r\n-\t\t *\r\n-\t\t * @return bool|LP_Course_Section\r\n-\t\t * @since 4.2.3.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_level(): string {\r\n-\t\t\t$level = get_post_meta( $this->get_id(), '_lp_level', true );\r\n-\t\t\tif ( ! $level ) {\r\n-\t\t\t\t$level = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $level;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get duration of this course.\r\n-\t\t *\r\n-\t\t * @return bool|LP_Course_Section\r\n-\t\t * @since 4.2.3.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration(): string {\r\n-\t\t\t$duration = get_post_meta( $this->get_id(), '_lp_duration', true );\r\n-\r\n-\t\t\treturn $duration;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a course is enabled Offline\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_offline(): bool {\r\n-\t\t\treturn get_post_meta( $this->get_id(), CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.1\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Course' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Course\n+\t *\u002F\n+\tclass LP_Course extends LP_Abstract_Course {\n+\t\tprotected $key_info_extra_fast_query = '_lp_info_extra_fast_query';\n+\n+\t\t\u002F**\n+\t\t * LP_Course constructor.\n+\t\t *\n+\t\t * @param mixed $course\n+\t\t *\u002F\n+\t\tpublic function __construct( $course ) {\n+\t\t\tparent::__construct( $course );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Debug log.\n+\t\t *\n+\t\t * @param $data\n+\t\t *\n+\t\t * @return array\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.5 - comment - not use\n+\t\t *\u002F\n+\t\t\u002F*public static function log( $data ) {\n+\t\t\treturn $data;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get default course meta.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function get_default_meta() {\n+\t\t\t$meta = array(\n+\t\t\t\t'duration'                 => '10 weeks',\n+\t\t\t\t'max_students'             => 1000,\n+\t\t\t\t'students'                 => 0,\n+\t\t\t\t'retake_count'             => 0,\n+\t\t\t\t'featured'                 => 'no',\n+\t\t\t\t\u002F\u002F'block_lesson_content'     => 'no',\n+\t\t\t\t'external_link_buy_course' => '',\n+\t\t\t\t'course_result'            => 'evaluate_lesson',\n+\t\t\t\t'passing_condition'        => 80,\n+\t\t\t\t'price'                    => '',\n+\t\t\t\t'sale_price'               => '',\n+\t\t\t\t'sale_start'               => '',\n+\t\t\t\t'sale_end'                 => '',\n+\t\t\t\t'required_enroll'          => 'yes',\n+\t\t\t\t'course_author'            => learn_press_get_current_user_id(),\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fdefault-meta', $meta );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get LP Course.\n+\t\t *\n+\t\t * @param int   $course_id\n+\t\t *\n+\t\t * @return mixed|bool|LP_Course\n+\t\t * @Todo - Tungnx review to rewrite this method.\n+\t\t *\u002F\n+\t\tpublic static function get_course( int $course_id = 0 ) {\n+\t\t\tif ( isset( LP_Global::$courses[ $course_id ] ) ) {\n+\t\t\t\treturn LP_Global::$courses[ $course_id ];\n+\t\t\t}\n+\n+\t\t\t$the_course = self::get_course_object( $course_id );\n+\n+\t\t\tif ( ! $the_course ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$key_args = wp_parse_args(\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'   => $the_course->ID,\n+\t\t\t\t\t'type' => $the_course->post_type,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$key = LP_Helper::array_to_md5( $key_args );\n+\n+\t\t\tif ( empty( LP_Global::$courses[ $key ] ) ) {\n+\t\t\t\t$class_name = self::get_course_class( $the_course );\n+\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\n+\t\t\t\t\t$course = new $class_name( $the_course->ID );\n+\t\t\t\t} elseif ( $class_name instanceof LP_Abstract_Course ) {\n+\t\t\t\t\t$course = $class_name;\n+\t\t\t\t} else {\n+\t\t\t\t\t$course = new self( $the_course->ID );\n+\t\t\t\t}\n+\t\t\t\tLP_Global::$courses[ $key ] = $course;\n+\t\t\t} else {\n+\t\t\t\t$course = LP_Global::$courses[ $key ];\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Force to reload course data into cache if it is not\n+\t\t\t * loaded or has been deleted for some reasons.\n+\t\t\t *\u002F\n+\t\t\t$course->load();\n+\n+\t\t\treturn $course;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $course_type\n+\t\t *\n+\t\t * @return string|false\n+\t\t *\u002F\n+\t\tprivate static function get_class_name_from_course_type( $course_type ) {\n+\t\t\treturn LP_COURSE_CPT === $course_type ? __CLASS__ : 'LP_Course_' . implode(\n+\t\t\t\t'_',\n+\t\t\t\tarray_map( 'ucfirst', explode( '-', $course_type ) )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the course class name\n+\t\t *\n+\t\t * @param WP_Post $the_course\n+\t\t * @param array   $args (default: array())\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate static function get_course_class( $the_course, $args = array() ) {\n+\t\t\t$course_id = absint( $the_course->ID );\n+\t\t\t$type      = $the_course->post_type;\n+\n+\t\t\t$class_name = self::get_class_name_from_course_type( $type );\n+\n+\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fobject-class', $class_name, $type, $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the course object\n+\t\t *\n+\t\t * @param mixed $the_course\n+\t\t *\n+\t\t * @return WP_Post|bool false on failure\n+\t\t * @uses   WP_Post\n+\t\t *\u002F\n+\t\tprivate static function get_course_object( $the_course ) {\n+\t\t\t$the_course_passed = $the_course;\n+\t\t\tif ( false === $the_course ) {\n+\t\t\t\t$the_course = get_post_type() === LP_COURSE_CPT ? $GLOBALS['post'] : false;\n+\t\t\t} elseif ( is_numeric( $the_course ) ) {\n+\t\t\t\t$the_course = get_post( $the_course );\n+\t\t\t} elseif ( $the_course instanceof LP_Abstract_Course ) {\n+\t\t\t\t$the_course = get_post( $the_course->get_id() );\n+\t\t\t} elseif ( ! ( $the_course instanceof WP_Post ) ) {\n+\t\t\t\t$the_course = false;\n+\t\t\t}\n+\n+\t\t\tif ( $the_course && $the_course->post_type !== LP_COURSE_CPT ) {\n+\t\t\t\t$the_course = false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fpost-object', $the_course, $the_course_passed );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check time remaining course when enable duration expire\n+\t\t * Value: -1 is no limit (default)\n+\t\t * Value: 0 is block\n+\t\t * Administrator || (is instructor && is author course) will be not block.\n+\t\t *\n+\t\t * @return int second\n+\t\t * @since 4.0.0\n+\t\t * @author tungnx\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function timestamp_remaining_duration(): int {\n+\t\t\t$timestamp_remaining = - 1;\n+\t\t\t$user                = learn_press_get_user( get_current_user_id() );\n+\n+\t\t\tif ( current_user_can( 'administrator' ) ||\n+\t\t\t\t( current_user_can( LP_TEACHER_ROLE ) && $this->get_author()->get_id() === $user->get_id() ) ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\tif ( 0 === absint( $this->get_data( 'duration' ) ) ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\tif ( 'yes' !== $this->get_data( 'block_course_duration_expire' ) ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\tif ( $user instanceof LP_User_Guest ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\t$course_item_data = $user->get_course_data( $this->get_id() );\n+\n+\t\t\tif ( ! $course_item_data ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\t$course_start_time   = $course_item_data->get_start_time()->get_raw_date();\n+\t\t\t$duration            = $this->get_data( 'duration' );\n+\t\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\n+\t\t\t$timestamp_current   = time();\n+\t\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\n+\n+\t\t\tif ( $timestamp_remaining \u003C 0 ) {\n+\t\t\t\t$timestamp_remaining = 0;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get option enable block course when finish course\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function enable_block_item_when_finish(): bool {\n+\t\t\treturn 'yes' === $this->get_data( 'block_course_finished' );\n+\t\t}\n+\n+\t\tpublic function allow_repurchase(): bool {\n+\t\t\treturn 'yes' === $this->get_data( 'allow_repurchase' );\n+\t\t}\n+\n+\t\tpublic function allow_repurchase_course_option(): string {\n+\t\t\treturn $this->get_data( 'allow_repurchase_course_option', 'reset' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get first item of course\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.0.0\n+\t\t * @modify 4.1.3\n+\t\t * @version 1.0.2\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_first_item_id(): int {\n+\t\t\t$course_id = $this->get_id();\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\treturn $courseModel->get_first_item_id();\n+\n+\t\t\ttry {\n+\t\t\t\t\u002F\u002F Get cache\n+\t\t\t\t$lp_course_cache = LP_Course_Cache::instance();\n+\t\t\t\t$key_cache       = \"$course_id\u002Ffirst_item_id\";\n+\t\t\t\t$first_item_id   = $lp_course_cache->get_cache( $key_cache );\n+\n+\t\t\t\tif ( ! $first_item_id ) {\n+\t\t\t\t\t$extra_info = $this->get_info_extra_for_fast_query();\n+\n+\t\t\t\t\tif ( ! $extra_info->first_item_id ) {\n+\t\t\t\t\t\t$first_item_id             = LP_Course_DB::getInstance()->get_first_item_id( $course_id );\n+\t\t\t\t\t\t$extra_info->first_item_id = $first_item_id;\n+\n+\t\t\t\t\t\t\u002F\u002F Save post meta\n+\t\t\t\t\t\t$this->set_info_extra_for_fast_query( $extra_info );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$first_item_id = $extra_info->first_item_id;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$lp_course_cache->set_cache( $key_cache, $first_item_id );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$first_item_id = 0;\n+\t\t\t}\n+\n+\t\t\treturn $first_item_id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get redirect url after enroll course\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t * @since 4.0.0\n+\t\t * @return false|string|WP_Error\n+\t\t *\u002F\n+\t\tpublic function get_redirect_url_after_enroll() {\n+\t\t\t$first_item_id = $this->get_first_item_id();\n+\t\t\t$redirect      = $first_item_id ? $this->get_item_link( $first_item_id ) : get_the_permalink( $this->get_id() );\n+\n+\t\t\treturn apply_filters( 'learnpress\u002Frest-api\u002Fenroll-course\u002Fredirect', $redirect );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get info extra on post meta to query fast\n+\t\t *\n+\t\t * @since 4.1.3\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t * @return LP_Course_Extra_Info_Fast_Query_Model\n+\t\t * @deprecated 4.2.7.4\n+\t\t *\u002F\n+\t\tpublic function get_info_extra_for_fast_query(): LP_Course_Extra_Info_Fast_Query_Model {\n+\t\t\t$extra_info = new LP_Course_Extra_Info_Fast_Query_Model();\n+\n+\t\t\ttry {\n+\t\t\t\t$extra_info_str = get_post_meta( $this->get_id(), $this->key_info_extra_fast_query, true );\n+\n+\t\t\t\tif ( ! empty( $extra_info_str ) ) {\n+\t\t\t\t\t$extra_info_stdclass = LP_Helper::json_decode( $extra_info_str );\n+\t\t\t\t\t$extra_info          = $extra_info->map_stdclass( $extra_info_stdclass );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $extra_info;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set extra info for query fast on post meta\n+\t\t *\n+\t\t * @since 4.1.3\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t * @param LP_Course_Extra_Info_Fast_Query_Model $data_object\n+\t\t *\u002F\n+\t\tpublic function set_info_extra_for_fast_query( LP_Course_Extra_Info_Fast_Query_Model $data_object ) {\n+\t\t\ttry {\n+\t\t\t\t$extra_info_json = json_encode( $data_object, JSON_UNESCAPED_UNICODE );\n+\n+\t\t\t\tif ( JSON_ERROR_NONE !== json_last_error() ) {\n+\t\t\t\t\tthrow new Exception( 'Error encode on ' . __METHOD__ );\n+\t\t\t\t}\n+\n+\t\t\t\tupdate_post_meta( $this->get_id(), $this->key_info_extra_fast_query, $extra_info_json );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get info total items of Course\n+\t\t *\n+\t\t * @param string $type\n+\t\t * @param bool $include_preview\n+\t\t *\n+\t\t * @return int\n+\t\t * @throws Exception\n+\t\t * @version 1.0.1\n+\t\t * @author tungnx\n+\t\t * @since 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function count_items( string $type = '', bool $include_preview = true ): int {\n+\t\t\t$course_id   = $this->get_id();\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn 0;\n+\t\t\t}\n+\n+\t\t\t$total_items = $courseModel->get_total_items();\n+\t\t\tif ( empty( $total_items ) ) {\n+\t\t\t\treturn 0;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $type ) ) {\n+\t\t\t\tif ( isset( $total_items->{$type} ) ) {\n+\t\t\t\t\treturn $total_items->{$type};\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn $total_items->count_items ?? 0;\n+\t\t\t}\n+\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete relate data when delete course\n+\t\t *\n+\t\t * @since 4.1.4.1\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function delete_relate_data_when_delete_course() {\n+\t\t\t$lp_section_db    = LP_Section_DB::getInstance();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t\u002F\u002F Check valid user\n+\t\t\t\tif ( ! current_user_can( 'administrator' ) && $this->get_author( 'id' ) !== get_current_user_id() ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$section_ids = $lp_section_db->get_section_ids_by_course( $this->get_id() );\n+\n+\t\t\t\t$filter                   = new LP_Section_Filter();\n+\t\t\t\t$filter->section_ids      = $section_ids;\n+\t\t\t\t$filter->author_id_course = $this->get_author( 'id' );\n+\n+\t\t\t\t\u002F\u002F Delete section\n+\t\t\t\t$lp_section_db->delete_section( $filter );\n+\t\t\t\t\u002F\u002F Delete section items\n+\t\t\t\t$lp_section_db->delete_section_items( $filter );\n+\n+\t\t\t\t$filter_user_items          = new LP_User_Items_Filter();\n+\t\t\t\t$filter_user_items->item_id = $this->get_id();\n+\t\t\t\t$user_course_ids            = $lp_user_items_db->get_user_items_by_course( $filter_user_items );\n+\n+\t\t\t\t$this->delete_user_item_and_result( $user_course_ids );\n+\n+\t\t\t\t\u002F\u002F Clear cache total students enrolled.\n+\t\t\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\t\t\t\t$lp_course_cache->clean_total_students_enrolled( $this->get_id() );\n+\t\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $this->get_id() );\n+\t\t\t\t\u002F\u002F Clear cache count students many courses.\n+\t\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\n+\t\t\t\t$lp_course_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_COURSES_FREE );\n+\t\t\t\t\u002F\u002F Clear cache user course.\n+\t\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\n+\t\t\t\t$lp_user_items_cache->clean_user_items_by_course( $this->get_id() );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete user_items, user_itemmeta, user_item_results\n+\t\t * WHERE IN user_item_ids\n+\t\t *\n+\t\t * @param array $user_course_ids\n+\t\t *\u002F\n+\t\tpublic function delete_user_item_and_result( array $user_course_ids ) {\n+\t\t\t$lp_user_items_db     = LP_User_Items_DB::getInstance();\n+\t\t\t$lp_user_item_results = LP_User_Items_Result_DB::instance();\n+\n+\t\t\ttry {\n+\t\t\t\tif ( empty( $user_course_ids ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Get user_item_ids has parent in $user_course_ids\n+\t\t\t\t$filter                = new LP_User_Items_Filter();\n+\t\t\t\t$filter->user_item_ids = $user_course_ids;\n+\t\t\t\t$user_item_ids         = $lp_user_items_db->get_item_ids_of_user_course( $filter );\n+\n+\t\t\t\t$user_item_ids_concat = array_merge( $user_course_ids, $user_item_ids );\n+\n+\t\t\t\t\u002F\u002F Delete on tb lp_user_items\n+\t\t\t\t$filter_delete                = new LP_User_Items_Filter();\n+\t\t\t\t$filter_delete->user_item_ids = $user_item_ids_concat;\n+\t\t\t\t$user_items_rs                = $lp_user_items_db->get_user_items( $filter_delete );\n+\n+\t\t\t\t\u002F\u002F For each to clear cache\n+\t\t\t\tforeach ( $user_items_rs as $user_item ) {\n+\t\t\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\n+\t\t\t\t\t$key_one             = \"userItemModel\u002Ffind\u002F{$user_item->user_id}\u002F{$user_item->item_id}\u002F{$user_item->item_type}\";\n+\t\t\t\t\t$key_two             = \"userItemModel\u002Ffind\u002F{$user_item->user_id}\u002F{$user_item->item_id}\u002F{$user_item->item_type}\u002F{$user_item->ref_id}\u002F{$user_item->ref_type}\";\n+\t\t\t\t\t$lp_user_items_cache->clear( $key_one );\n+\t\t\t\t\t$lp_user_items_cache->clear( $key_two );\n+\t\t\t\t}\n+\n+\t\t\t\t$lp_user_items_db->remove_user_item_ids( $filter_delete );\n+\n+\t\t\t\t\u002F\u002F Delete user_itemmeta\n+\t\t\t\t$lp_user_items_db->remove_user_itemmeta( $filter_delete );\n+\n+\t\t\t\t\u002F\u002F Delete user_item_results\n+\t\t\t\t$lp_user_item_results->remove_user_item_results( $filter_delete );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle params before query courses\n+\t\t *\n+\t\t * @param array $param\n+\t\t * @param LP_Course_Filter $filter\n+\t\t *\n+\t\t * @return void\n+\t\t * @since 4.2.3.3\n+\t\t * @version 1.0.1\n+\t\t * @deprecated 4.2.7.1\n+\t\t *\u002F\n+\t\tpublic static function handle_params_for_query_courses( LP_Course_Filter &$filter, array $param = [] ) {\n+\t\t\t\u002F\u002F_deprecated_function( __METHOD__, '4.2.7.1', 'Courses::handle_params_for_query_courses' );\n+\t\t\t\u002F\u002Freturn $filter;\n+\n+\t\t\t$filter->page       = absint( $param['paged'] ?? 1 );\n+\t\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\n+\n+\t\t\t\u002F\u002F Get Columns\n+\t\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\n+\t\t\tif ( ! empty( $fields_str ) ) {\n+\t\t\t\t$fields         = explode( ',', $fields_str );\n+\t\t\t\t$filter->fields = $fields;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Exclude Columns\n+\t\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\n+\t\t\tif ( ! empty( $fields_exclude_str ) ) {\n+\t\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\n+\t\t\t\t$filter->exclude_fields = $fields_exclude;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Author\n+\t\t\t$filter->post_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\n+\t\t\t$author_ids_str      = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? 0 );\n+\t\t\tif ( ! empty( $author_ids_str ) ) {\n+\t\t\t\t$author_ids           = explode( ',', $author_ids_str );\n+\t\t\t\t$filter->post_authors = $author_ids;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Sort by\n+\t\t\t * 1. on_sale\n+\t\t\t * 2. on_free\n+\t\t\t * 3. on_paid\n+\t\t\t * 4. on_feature\n+\t\t\t *\u002F\n+\t\t\tif ( ! empty( $param['sort_by'] ) ) {\n+\t\t\t\t$filter->sort_by[] = $param['sort_by'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Sort by level\n+\t\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\n+\t\t\tif ( ! empty( $levels_str ) ) {\n+\t\t\t\t$levels_str     = str_replace( 'all', '', $levels_str );\n+\t\t\t\t$levels         = explode( ',', $levels_str );\n+\t\t\t\t$filter->levels = $levels;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Find by category\n+\t\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\n+\t\t\tif ( ! empty( $term_ids_str ) ) {\n+\t\t\t\t$term_ids         = explode( ',', $term_ids_str );\n+\t\t\t\t$filter->term_ids = $term_ids;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Find by tag\n+\t\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\n+\t\t\tif ( ! empty( $tag_ids_str ) ) {\n+\t\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\n+\t\t\t\t$filter->tag_ids = $tag_ids;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Order by\n+\t\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date', 'key' );\n+\t\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC' );\n+\t\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\n+\n+\t\t\t\u002F\u002F For search suggest courses\n+\t\t\tif ( ! empty( $param['c_suggest'] ) ) {\n+\t\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\n+\t\t\t}\n+\n+\t\t\t$return_type = $param['return_type'] ?? 'html';\n+\t\t\tif ( 'json' !== $return_type ) {\n+\t\t\t\t$filter->only_fields = array( 'DISTINCT(ID) AS ID' );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get list course\n+\t\t * Order By: price, title, rating, date ...\n+\t\t * Order: ASC, DES\n+\t\t *\n+\t\t * @param LP_Course_Filter $filter\n+\t\t * @param int $total_rows\n+\t\t *\n+\t\t * @return object|null|string|int\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t * @sicne 4.1.5\n+\t\t * @deprecated 4.2.7.1\n+\t\t *\u002F\n+\t\tpublic static function get_courses( LP_Course_Filter $filter, int &$total_rows = 0 ) {\n+\t\t\t\u002F\u002F_deprecated_function( __METHOD__, '4.2.7.1', 'Courses::get_courses' );\n+\t\t\t\u002F\u002Freturn [];\n+\n+\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t\u002F*$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t\t\t$key_cache            = 'query-courses-' . md5( json_encode( $filter ) );\n+\t\t\t\t$key_cache_total_rows = 'query-courses-total-' . md5( json_encode( $filter ) );\n+\t\t\t\t$courses_cache        = $lp_courses_cache->get_cache( $key_cache );\n+\n+\t\t\t\tif ( false !== $courses_cache ) {\n+\t\t\t\t\t$total_rows = $lp_courses_cache->get_cache( $key_cache_total_rows );\n+\t\t\t\t\treturn LP_Helper::json_decode( $courses_cache );\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\t\u002F\u002F Sort by\n+\t\t\t\t$filter->sort_by = (array) $filter->sort_by;\n+\t\t\t\tforeach ( $filter->sort_by as $sort_by ) {\n+\t\t\t\t\t$filter_tmp                      = clone $filter;\n+\t\t\t\t\t$filter_tmp->only_fields         = array( 'DISTINCT(ID)' );\n+\t\t\t\t\t$filter_tmp->return_string_query = true;\n+\n+\t\t\t\t\tswitch ( $sort_by ) {\n+\t\t\t\t\t\tcase 'on_sale':\n+\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_sale( $filter_tmp );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'on_free':\n+\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_free( $filter_tmp );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'on_paid':\n+\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_paid( $filter_tmp );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'on_feature':\n+\t\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_feature( $filter_tmp );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t$filter_tmp = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Fsort_by\u002F' . $sort_by, $filter_tmp );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$query_courses_str = $lp_course_db->get_courses( $filter_tmp );\n+\n+\t\t\t\t\t$filter->where[] = \"AND ID IN ({$query_courses_str})\";\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Order by\n+\t\t\t\tswitch ( $filter->order_by ) {\n+\t\t\t\t\tcase 'price':\n+\t\t\t\t\tcase 'price_low':\n+\t\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\n+\t\t\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$filter->order = 'DESC';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_price( $filter );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'popular':\n+\t\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_popular( $filter );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'post_title':\n+\t\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'post_title_desc':\n+\t\t\t\t\t\t$filter->order_by = 'post_title';\n+\t\t\t\t\t\t$filter->order    = 'DESC';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'menu_order':\n+\t\t\t\t\t\t$filter->order_by = 'menu_order';\n+\t\t\t\t\t\t$filter->order    = 'ASC';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Query get results\n+\t\t\t\t$filter  = apply_filters( 'lp\u002Fcourses\u002Ffilter', $filter );\n+\t\t\t\t$courses = LP_Course_DB::getInstance()->get_courses( $filter, $total_rows );\n+\n+\t\t\t\t\u002F\u002F$lp_courses_cache->set_cache( $key_cache, json_encode( $courses ) );\n+\t\t\t\t\u002F\u002F$lp_courses_cache->set_cache( $key_cache_total_rows, $total_rows );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$courses = [];\n+\t\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $courses;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get full sections, items of course via Cache, extra info (if it has)\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.1.6.9\n+\t\t * @version 1.0.1\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function get_full_sections_and_items_course() {\n+\t\t\t$sections_items = [];\n+\t\t\t$course_id      = $this->get_id();\n+\n+\t\t\ttry {\n+\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t\treturn $courseModel->get_section_items();\n+\n+\t\t\t\t\u002F\u002F Get cache\n+\t\t\t\t$lp_course_cache = LP_Course_Cache::instance();\n+\t\t\t\t$key_cache       = \"$course_id\u002Fsections_items\";\n+\t\t\t\t$sections_items  = $lp_course_cache->get_cache( $key_cache );\n+\n+\t\t\t\tif ( ! $sections_items ) {\n+\t\t\t\t\t$extra_info = $this->get_info_extra_for_fast_query();\n+\n+\t\t\t\t\tif ( empty( $extra_info->sections_items ) ) {\n+\t\t\t\t\t\t$sections_items             = $this->get_sections_and_items_course_from_db_and_sort();\n+\t\t\t\t\t\t$extra_info->sections_items = $sections_items;\n+\n+\t\t\t\t\t\t\u002F\u002F Save post meta\n+\t\t\t\t\t\t$this->set_info_extra_for_fast_query( $extra_info );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$sections_items = $extra_info->sections_items;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$lp_course_cache->set_cache( $key_cache, $sections_items );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $sections_items;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all sections and items from database, then handle sort\n+\t\t * Only call when data change or not set\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.1.6.9\n+\t\t * @version 1.0.0\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function get_sections_and_items_course_from_db_and_sort(): array {\n+\t\t\t$sections_items  = [];\n+\t\t\t$course_id       = $this->get_id();\n+\t\t\t$lp_course_db    = LP_Course_DB::getInstance();\n+\t\t\t$lp_course_cache = LP_Course_Cache::instance();\n+\t\t\t$key_cache       = \"$course_id\u002Fsections_items\";\n+\n+\t\t\ttry {\n+\t\t\t\t$sections_results       = $lp_course_db->get_sections( $course_id );\n+\t\t\t\t$sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );\n+\t\t\t\t$count_items            = count( $sections_items_results );\n+\t\t\t\t$index_items_last       = $count_items - 1;\n+\t\t\t\t$section_current        = 0;\n+\n+\t\t\t\tforeach ( $sections_items_results as $index => $sections_item ) {\n+\t\t\t\t\t$section_new   = $sections_item->section_id;\n+\t\t\t\t\t$section_order = $sections_item->section_order;\n+\t\t\t\t\t$item          = new stdClass();\n+\t\t\t\t\t$item->id      = $sections_item->item_id;\n+\t\t\t\t\t$item->order   = $sections_item->item_order;\n+\t\t\t\t\t$item->type    = $sections_item->item_type;\n+\n+\t\t\t\t\tif ( $section_new != $section_current ) {\n+\t\t\t\t\t\t$sections_items[ $section_new ]                      = new stdClass();\n+\t\t\t\t\t\t$sections_items[ $section_new ]->id                  = $section_new; \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t\t$sections_items[ $section_new ]->section_id          = $section_new; \u002F\u002F new field\n+\t\t\t\t\t\t$sections_items[ $section_new ]->order               = $section_order; \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t\t$sections_items[ $section_new ]->section_order       = $section_order; \u002F\u002F new field\n+\t\t\t\t\t\t$sections_items[ $section_new ]->title               = html_entity_decode( $sections_item->section_name ); \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t\t$sections_items[ $section_new ]->section_name        = html_entity_decode( $sections_item->section_name ); \u002F\u002F new field\n+\t\t\t\t\t\t$sections_items[ $section_new ]->description         = html_entity_decode( $sections_item->section_description ); \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t\t$sections_items[ $section_new ]->section_description = html_entity_decode( $sections_item->section_description ); \u002F\u002F new field\n+\t\t\t\t\t\t$sections_items[ $section_new ]->items               = [];\n+\n+\t\t\t\t\t\t\u002F\u002F Sort item by item_order\n+\t\t\t\t\t\tif ( $section_current != 0 ) {\n+\t\t\t\t\t\t\tusort(\n+\t\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\n+\t\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\n+\t\t\t\t\t\t\t\t\treturn $item1->order - $item2->order;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$section_current = $section_new;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$sections_items[ $section_new ]->items[ $item->id ] = $item;\n+\n+\t\t\t\t\tif ( $index_items_last === $index ) {\n+\t\t\t\t\t\tusort(\n+\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\n+\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\n+\t\t\t\t\t\t\t\treturn $item1->order - $item2->order;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Check case if section empty items\n+\t\t\t\tforeach ( $sections_results as $section ) {\n+\t\t\t\t\t$section_id = $section->section_id;\n+\t\t\t\t\tif ( isset( $sections_items[ $section_id ] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$section_obj                   = new stdClass();\n+\t\t\t\t\t$section_obj->id               = $section_id;\n+\t\t\t\t\t$section_obj->order            = $section->section_order;\n+\t\t\t\t\t$section_obj->title            = html_entity_decode( $section->section_name );\n+\t\t\t\t\t$section_obj->description      = html_entity_decode( $section->section_description );\n+\t\t\t\t\t$section_obj->items            = [];\n+\t\t\t\t\t$sections_items[ $section_id ] = $section_obj;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Sort section by section_order\n+\t\t\t\tusort(\n+\t\t\t\t\t$sections_items,\n+\t\t\t\t\tfunction ( $section1, $section2 ) {\n+\t\t\t\t\t\treturn $section1->order - $section2->order;\n+\t\t\t\t\t}\n+\t\t\t\t);\n+\n+\t\t\t\t$lp_course_cache->set_cache( $key_cache, $sections_items );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $sections_items;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get sections of course.\n+\t\t *\n+\t\t * @param string $return.\n+\t\t * @param int    $section_id.\n+\t\t *\n+\t\t * @return array|bool|LP_Course_Section[]|LP_Course_Section\n+\t\t * @version 4.0.0\n+\t\t *\u002F\n+\t\tpublic function get_sections( $return = 'object', $section_id = 0 ) {\n+\t\t\t\u002F\u002F $this->load_curriculum();\n+\t\t\t\u002F\u002F $sections = LP_Course_Utils::get_cached_db_sections( $this->get_id() );\n+\n+\t\t\t$sections_items = $this->get_full_sections_and_items_course();\n+\n+\t\t\t\u002F*if ( false === $sections ) {\n+\t\t\t\treturn false;\n+\t\t\t}*\u002F\n+\n+\t\t\t\u002F\u002F$position        = 0;\n+\t\t\t$sections = array();\n+\t\t\tforeach ( $sections_items as $k => $section_items ) {\n+\t\t\t\t$position          = $k + 1;\n+\t\t\t\t$section_items_tmp = [\n+\t\t\t\t\t'section_id'          => $section_items->id,\n+\t\t\t\t\t'section_name'        => $section_items->title,\n+\t\t\t\t\t'section_course_id'   => $this->get_id(),\n+\t\t\t\t\t'section_order'       => $section_items->order,\n+\t\t\t\t\t'section_description' => $section_items->description,\n+\t\t\t\t\t'items'               => $section_items->items,\n+\t\t\t\t];\n+\t\t\t\t$sid               = $section_items->id;\n+\t\t\t\t$section           = new LP_Course_Section( $section_items_tmp );\n+\t\t\t\t$section->set_position( $position );\n+\t\t\t\t$sections[ $sid ] = $section;\n+\t\t\t}\n+\n+\t\t\tif ( $section_id ) {\n+\t\t\t\t$sections = $sections[ $section_id ] ?? [];\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse-sections', $sections, $this->get_id(), $return, $section_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get sections arr\n+\t\t *\n+\t\t * @param int $section_id\n+\t\t *\n+\t\t * @return array\n+\t\t * @version 1.0.0\n+\t\t * @sicne 4.1.7\n+\t\t *\u002F\n+\t\tpublic function get_sections_data_arr( int $section_id = 0 ): array {\n+\t\t\t$sections_items = $this->get_full_sections_and_items_course();\n+\t\t\t$sections       = array();\n+\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\t$section = [\n+\t\t\t\t\t'section_id'          => $section_items->id,\n+\t\t\t\t\t'section_name'        => $section_items->title,\n+\t\t\t\t\t'section_course_id'   => $this->get_id(),\n+\t\t\t\t\t'section_order'       => $section_items->order,\n+\t\t\t\t\t'section_description' => $section_items->description,\n+\t\t\t\t\t'items'               => $section_items->items,\n+\t\t\t\t];\n+\n+\t\t\t\tif ( $section_id && $section_id == $section['section_id'] ) {\n+\t\t\t\t\t$sections = $section;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t$sections[] = $section;\n+\t\t\t}\n+\n+\t\t\treturn $sections;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get raw data curriculum.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_curriculum_raw(): array {\n+\t\t\t$sections_data = array();\n+\n+\t\t\t$sections_items = $this->get_full_sections_and_items_course();\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\t$section_items_arr              = (array) $section_items;\n+\t\t\t\t$section_items_arr['course_id'] = $this->get_id();\n+\t\t\t\t$section_items_arr['items']     = [];\n+\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t$itemObject = $this->get_item( $item->id );\n+\n+\t\t\t\t\tif ( ! $itemObject instanceof LP_Course_Item ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item_arr                     = (array) $item;\n+\t\t\t\t\t$item_arr['title']            = html_entity_decode( $itemObject->get_title() );\n+\t\t\t\t\t$item_arr['preview']          = $itemObject->is_preview();\n+\t\t\t\t\t$section_items_arr['items'][] = apply_filters( 'learn-press\u002Fitem\u002Fto_array', $item_arr );\n+\t\t\t\t}\n+\n+\t\t\t\t$sections_data[] = $section_items_arr;\n+\t\t\t}\n+\n+\t\t\treturn $sections_data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all curriculum of this course.\n+\t\t *\n+\t\t * @param int  $section_id\n+\t\t * @param bool $force\n+\t\t *\n+\t\t * @return bool|LP_Course_Section[]\n+\t\t *\u002F\n+\t\tpublic function get_curriculum( $section_id = 0, $force = false ) {\n+\t\t\treturn $this->get_sections( 'object', $section_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return list of item's ids in course's curriculum.\n+\t\t *\n+\t\t * @param string|array $type\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t * @version 3.0.2\n+\t\t *\u002F\n+\t\tpublic function get_items( $type = '' ) {\n+\t\t\t\u002F\u002F$this->load();\n+\n+\t\t\t$sections_items = $this->get_full_sections_and_items_course();\n+\n+\t\t\t$items = array();\n+\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\tif ( ! empty( $type ) ) {\n+\t\t\t\t\t\tif ( $type === $item->type ) {\n+\t\t\t\t\t\t\t$items[] = $item->id;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$items[] = $item->id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all items in a course.\n+\t\t *\n+\t\t * @param string $type . Type of items, eg: lp_lesson, lp_quiz...\n+\t\t *\n+\t\t * @return array\n+\t\t * @deprecated\n+\t\t *\u002F\n+\t\tpublic function get_curriculum_items( $type = '' ) {\n+\t\t\treturn $this->get_items( $type );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get evaluation type\n+\t\t *\n+\t\t * @since 4.2.1\n+\t\t * @version 1.0.0\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_evaluation_type(): string {\n+\t\t\t$evaluation_type = get_post_meta( $this->get_id(), '_lp_course_result', true );\n+\t\t\tif ( ! $evaluation_type ) {\n+\t\t\t\t$evaluation_type = 'evaluate_lesson';\n+\t\t\t}\n+\n+\t\t\treturn $evaluation_type;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get categories of course.\n+\t\t *\n+\t\t * @since 4.2.3\n+\t\t * @version 1.0.0\n+\t\t * @return array|WP_Term[]\n+\t\t *\u002F\n+\t\tpublic function get_categories(): array {\n+\t\t\t\u002F\u002F Todo: set cache.\n+\t\t\t$categories = get_the_terms( $this->get_id(), LP_COURSE_CATEGORY_TAX );\n+\t\t\tif ( ! $categories ) {\n+\t\t\t\t$categories = array();\n+\t\t\t}\n+\n+\t\t\treturn $categories;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get tags of course.\n+\t\t *\n+\t\t * @since 4.2.3\n+\t\t * @version 1.0.0\n+\t\t * @return array|WP_Term[]\n+\t\t *\u002F\n+\t\tpublic function get_tags(): array {\n+\t\t\t\u002F\u002F Todo: set cache.\n+\t\t\t$tags = get_the_terms( $this->get_id(), LP_COURSE_TAXONOMY_TAG );\n+\t\t\tif ( ! $tags ) {\n+\t\t\t\t$tags = array();\n+\t\t\t}\n+\n+\t\t\treturn $tags;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all categories.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function get_all_categories(): array {\n+\t\t\t\u002F\u002F Todo: set cache.\n+\t\t\t$categories = get_terms( LP_COURSE_CATEGORY_TAX );\n+\t\t\tif ( ! $categories ) {\n+\t\t\t\t$categories = array();\n+\t\t\t}\n+\n+\t\t\treturn $categories;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all curriculum of this course.\n+\t\t *\n+\t\t * @return bool|LP_Course_Section\n+\t\t * @since 4.2.3.5\n+\t\t *\u002F\n+\t\tpublic function get_level(): string {\n+\t\t\t$level = get_post_meta( $this->get_id(), '_lp_level', true );\n+\t\t\tif ( ! $level ) {\n+\t\t\t\t$level = '';\n+\t\t\t}\n+\n+\t\t\treturn $level;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get duration of this course.\n+\t\t *\n+\t\t * @return bool|LP_Course_Section\n+\t\t * @since 4.2.3.5\n+\t\t *\u002F\n+\t\tpublic function get_duration(): string {\n+\t\t\t$duration = get_post_meta( $this->get_id(), '_lp_duration', true );\n+\n+\t\t\treturn $duration;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a course is enabled Offline\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_offline(): bool {\n+\t\t\treturn get_post_meta( $this->get_id(), CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-section.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-section.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-lp-course-section.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-lp-course-section.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,326 +1,326 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Section\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_Course_Section extends LP_Abstract_Object_Data {\r\n-\t\u002F**\r\n-\t * Store section data\r\n-\t *\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected $data = null;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $course_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $course = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Section_CURD\r\n-\t *\u002F\r\n-\tprotected $_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $items = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Course_Section constructor.\r\n-\t *\r\n-\t * @param $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data ) {\r\n-\t\t$data = wp_parse_args(\r\n-\t\t\t$data,\r\n-\t\t\tarray(\r\n-\t\t\t\t'section_id'          => 0,\r\n-\t\t\t\t'section_name'        => '0',\r\n-\t\t\t\t'section_course_id'   => 0,\r\n-\t\t\t\t'section_order'       => 1,\r\n-\t\t\t\t'section_description' => '',\r\n-\t\t\t\t'position'            => 0,\r\n-\t\t\t\t'items'               => array(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Set data\r\n-\t\tforeach ( $data as $k => $v ) {\r\n-\t\t\t$k = str_replace( 'section_', '', $k );\r\n-\r\n-\t\t\tif ( $k === 'course_id' ) {\r\n-\t\t\t\t$this->course_id = absint( $v );\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\t$this->_data[ $k ] = $v;\r\n-\t\t}\r\n-\r\n-\t\t$this->course = learn_press_get_course( $this->course_id );\r\n-\r\n-\t\tif ( ! $this->course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->_curd = new LP_Section_CURD( 0 );\r\n-\t\t$this->set_id( $this->_data['id'] );\r\n-\t\t\u002F\u002F Load section items\r\n-\t\t$this->load_items();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load items from course curriculum to it section\r\n-\t *\u002F\r\n-\tprotected function load_items() {\r\n-\t\tif ( ! $this->get_id() ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course     = $this->course;\r\n-\t\t$section_id = $this->get_id();\r\n-\r\n-\t\t\u002F\u002F All items\r\n-\t\t$items = $course->get_item_ids( $section_id );\r\n-\r\n-\t\tforeach ( $items as $item_id ) {\r\n-\t\t\t$item_class = $course->get_item( $item_id );\r\n-\r\n-\t\t\tif ( $item_class instanceof LP_Course_Item ) {\r\n-\t\t\t\t$item_class->set_section( $this );\r\n-\t\t\t\t$this->items[ $item_id ] = $item_class;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item class from item data\r\n-\t *\r\n-\t * @param array $item\r\n-\t *\r\n-\t * @return bool|LP_Course_Item\r\n-\t * @deprecated 4.1.6.9\r\n-\t *\u002F\r\n-\t\u002F*protected function get_item( $item ) {\r\n-\t\tif ( ! is_numeric( $item ) ) {\r\n-\t\t\t$item_id = $item->item_id;\r\n-\t\t} else {\r\n-\t\t\t$item_id = absint( $item );\r\n-\t\t}\r\n-\r\n-\t\treturn LP_Course_Item::get_item( $item_id );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get data to array.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function to_array() {\r\n-\t\t$data = array(\r\n-\t\t\t'id'          => $this->get_id(),\r\n-\t\t\t'title'       => $this->get_title(),\r\n-\t\t\t'course_id'   => $this->get_course_id(),\r\n-\t\t\t'description' => $this->get_description(),\r\n-\t\t\t'items'       => $this->get_items_array(),\r\n-\t\t\t'order'       => $this->get_order(),\r\n-\t\t);\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return section id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_id() {\r\n-\t\treturn (int) $this->_data['id'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return section title\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_title() {\r\n-\t\treturn apply_filters( 'learn-press\u002Fsection-title', $this->_data['name'], $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return section course id\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_course_id() {\r\n-\t\treturn $this->course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return section order\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_order() {\r\n-\t\treturn $this->_data['order'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return section description\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_description() {\r\n-\t\treturn apply_filters( 'learn-press\u002Fsection-description', $this->_data['description'], $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items in this section.\r\n-\t *\r\n-\t * @param string|array $type\r\n-\t * @param bool         $preview\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_items( $type = '', $preview = true ) {\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Course_Item[] $items\r\n-\t\t *\u002F\r\n-\t\t$items = apply_filters( 'learn-press\u002Fsection-items', $this->items, $this );\r\n-\r\n-\t\tif ( ! $items ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\tif ( $type || ! $preview ) {\r\n-\t\t\t$filtered_items = array();\r\n-\r\n-\t\t\tif ( $type ) {\r\n-\t\t\t\tsettype( $type, 'array' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\tif ( ! $preview ) {\r\n-\t\t\t\t\tif ( $item->is_preview() ) {\r\n-\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! $type || $type && in_array( learn_press_get_post_type( $item->get_id() ), $type ) ) {\r\n-\t\t\t\t\t$filtered_items[] = $item;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$items = $filtered_items;\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items in this section to array.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function get_items_array() {\r\n-\t\t$items = $this->get_items();\r\n-\r\n-\t\t$data = array();\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\t$data[] = $item->to_array();\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get completed items of a specific user.\r\n-\t * If user does not pass into then get from current user.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @deprecated 4.2.7.1\r\n-\t *\u002F\r\n-\t\u002F*public function get_completed_items( $user_id = 0 ) {\r\n-\t\t$items = array();\r\n-\r\n-\t\treturn $items;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Count number of items in section.\r\n-\t *\r\n-\t * @param string $type\r\n-\t * @param bool   $preview\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function count_items( $type = '', $preview = true ) {\r\n-\t\t$items = $this->get_items( $type, $preview );\r\n-\r\n-\t\treturn is_array( $items ) ? sizeof( $items ) : 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if a section contains an item.\r\n-\t *\r\n-\t * @param $item_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_item( $item_id ) {\r\n-\t\t$found = false;\r\n-\t\t$items = $this->get_items();\r\n-\r\n-\t\tif ( $items ) {\r\n-\t\t\t$found = ! empty( $items[ $item_id ] );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fsection-has-item',\r\n-\t\t\t$found,\r\n-\t\t\t$item_id,\r\n-\t\t\t$this->get_id(),\r\n-\t\t\t$this->get_course_id()\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_slug() {\r\n-\t\treturn $this->get_title() ? sanitize_title( $this->get_title() ) . '-' . $this->get_id() : $this->get_id();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set class section\r\n-\t *\u002F\r\n-\tpublic function main_class() {\r\n-\t\t$class = array( 'section' );\r\n-\r\n-\t\tif ( ! $this->count_items() ) {\r\n-\t\t\t$class[] = 'section-empty';\r\n-\t\t}\r\n-\r\n-\t\t$closed = learn_press_cookie_get( 'closed-section-' . $this->get_course_id() );\r\n-\r\n-\t\tif ( $closed && in_array( $this->get_id(), $closed ) ) {\r\n-\t\t\t$class[] = 'closed';\r\n-\t\t}\r\n-\r\n-\t\t$output = 'class=\"' . esc_attr( implode( ' ', $class ) ) . '\"';\r\n-\t\techo ' ' . $output;\r\n-\t}\r\n-\r\n-\tpublic function set_position( $position ) {\r\n-\t\t$this->_data['position'] = $position;\r\n-\t}\r\n-\r\n-\tpublic function get_position() {\r\n-\t\treturn ! empty( $this->_data['position'] ) ? absint( $this->_data['position'] ) : 0;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_Section\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_Course_Section extends LP_Abstract_Object_Data {\n+\t\u002F**\n+\t * Store section data\n+\t *\n+\t * @var null\n+\t *\u002F\n+\tprotected $data = null;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $course_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $course = 0;\n+\n+\t\u002F**\n+\t * @var LP_Section_CURD\n+\t *\u002F\n+\tprotected $_curd = null;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $items = array();\n+\n+\t\u002F**\n+\t * LP_Course_Section constructor.\n+\t *\n+\t * @param $data\n+\t *\u002F\n+\tpublic function __construct( $data ) {\n+\t\t$data = wp_parse_args(\n+\t\t\t$data,\n+\t\t\tarray(\n+\t\t\t\t'section_id'          => 0,\n+\t\t\t\t'section_name'        => '0',\n+\t\t\t\t'section_course_id'   => 0,\n+\t\t\t\t'section_order'       => 1,\n+\t\t\t\t'section_description' => '',\n+\t\t\t\t'position'            => 0,\n+\t\t\t\t'items'               => array(),\n+\t\t\t)\n+\t\t);\n+\n+\t\t\u002F\u002F Set data\n+\t\tforeach ( $data as $k => $v ) {\n+\t\t\t$k = str_replace( 'section_', '', $k );\n+\n+\t\t\tif ( $k === 'course_id' ) {\n+\t\t\t\t$this->course_id = absint( $v );\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t$this->_data[ $k ] = $v;\n+\t\t}\n+\n+\t\t$this->course = learn_press_get_course( $this->course_id );\n+\n+\t\tif ( ! $this->course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->_curd = new LP_Section_CURD( 0 );\n+\t\t$this->set_id( $this->_data['id'] );\n+\t\t\u002F\u002F Load section items\n+\t\t$this->load_items();\n+\t}\n+\n+\t\u002F**\n+\t * Load items from course curriculum to it section\n+\t *\u002F\n+\tprotected function load_items() {\n+\t\tif ( ! $this->get_id() ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course     = $this->course;\n+\t\t$section_id = $this->get_id();\n+\n+\t\t\u002F\u002F All items\n+\t\t$items = $course->get_item_ids( $section_id );\n+\n+\t\tforeach ( $items as $item_id ) {\n+\t\t\t$item_class = $course->get_item( $item_id );\n+\n+\t\t\tif ( $item_class instanceof LP_Course_Item ) {\n+\t\t\t\t$item_class->set_section( $this );\n+\t\t\t\t$this->items[ $item_id ] = $item_class;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get item class from item data\n+\t *\n+\t * @param array $item\n+\t *\n+\t * @return bool|LP_Course_Item\n+\t * @deprecated 4.1.6.9\n+\t *\u002F\n+\t\u002F*protected function get_item( $item ) {\n+\t\tif ( ! is_numeric( $item ) ) {\n+\t\t\t$item_id = $item->item_id;\n+\t\t} else {\n+\t\t\t$item_id = absint( $item );\n+\t\t}\n+\n+\t\treturn LP_Course_Item::get_item( $item_id );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get data to array.\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function to_array() {\n+\t\t$data = array(\n+\t\t\t'id'          => $this->get_id(),\n+\t\t\t'title'       => $this->get_title(),\n+\t\t\t'course_id'   => $this->get_course_id(),\n+\t\t\t'description' => $this->get_description(),\n+\t\t\t'items'       => $this->get_items_array(),\n+\t\t\t'order'       => $this->get_order(),\n+\t\t);\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Return section id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_id() {\n+\t\treturn (int) $this->_data['id'];\n+\t}\n+\n+\t\u002F**\n+\t * Return section title\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_title() {\n+\t\treturn apply_filters( 'learn-press\u002Fsection-title', $this->_data['name'], $this );\n+\t}\n+\n+\t\u002F**\n+\t * Return section course id\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_course_id() {\n+\t\treturn $this->course_id;\n+\t}\n+\n+\t\u002F**\n+\t * Return section order\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_order() {\n+\t\treturn $this->_data['order'];\n+\t}\n+\n+\t\u002F**\n+\t * Return section description\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_description() {\n+\t\treturn apply_filters( 'learn-press\u002Fsection-description', $this->_data['description'], $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get items in this section.\n+\t *\n+\t * @param string|array $type\n+\t * @param bool         $preview\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_items( $type = '', $preview = true ) {\n+\t\t\u002F**\n+\t\t * @var LP_Course_Item[] $items\n+\t\t *\u002F\n+\t\t$items = apply_filters( 'learn-press\u002Fsection-items', $this->items, $this );\n+\n+\t\tif ( ! $items ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\tif ( $type || ! $preview ) {\n+\t\t\t$filtered_items = array();\n+\n+\t\t\tif ( $type ) {\n+\t\t\t\tsettype( $type, 'array' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\tif ( ! $preview ) {\n+\t\t\t\t\tif ( $item->is_preview() ) {\n+\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tif ( ! $type || $type && in_array( learn_press_get_post_type( $item->get_id() ), $type ) ) {\n+\t\t\t\t\t$filtered_items[] = $item;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$items = $filtered_items;\n+\t\t}\n+\n+\t\treturn $items;\n+\t}\n+\n+\t\u002F**\n+\t * Get items in this section to array.\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function get_items_array() {\n+\t\t$items = $this->get_items();\n+\n+\t\t$data = array();\n+\t\tforeach ( $items as $item ) {\n+\t\t\t$data[] = $item->to_array();\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Get completed items of a specific user.\n+\t * If user does not pass into then get from current user.\n+\t *\n+\t * @param int $user_id\n+\t *\n+\t * @return mixed\n+\t * @deprecated 4.2.7.1\n+\t *\u002F\n+\t\u002F*public function get_completed_items( $user_id = 0 ) {\n+\t\t$items = array();\n+\n+\t\treturn $items;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Count number of items in section.\n+\t *\n+\t * @param string $type\n+\t * @param bool   $preview\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function count_items( $type = '', $preview = true ) {\n+\t\t$items = $this->get_items( $type, $preview );\n+\n+\t\treturn is_array( $items ) ? sizeof( $items ) : 0;\n+\t}\n+\n+\t\u002F**\n+\t * Check if a section contains an item.\n+\t *\n+\t * @param $item_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_item( $item_id ) {\n+\t\t$found = false;\n+\t\t$items = $this->get_items();\n+\n+\t\tif ( $items ) {\n+\t\t\t$found = ! empty( $items[ $item_id ] );\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fsection-has-item',\n+\t\t\t$found,\n+\t\t\t$item_id,\n+\t\t\t$this->get_id(),\n+\t\t\t$this->get_course_id()\n+\t\t);\n+\t}\n+\n+\tpublic function get_slug() {\n+\t\treturn $this->get_title() ? sanitize_title( $this->get_title() ) . '-' . $this->get_id() : $this->get_id();\n+\t}\n+\n+\t\u002F**\n+\t * Set class section\n+\t *\u002F\n+\tpublic function main_class() {\n+\t\t$class = array( 'section' );\n+\n+\t\tif ( ! $this->count_items() ) {\n+\t\t\t$class[] = 'section-empty';\n+\t\t}\n+\n+\t\t$closed = learn_press_cookie_get( 'closed-section-' . $this->get_course_id() );\n+\n+\t\tif ( $closed && in_array( $this->get_id(), $closed ) ) {\n+\t\t\t$class[] = 'closed';\n+\t\t}\n+\n+\t\t$output = 'class=\"' . esc_attr( implode( ' ', $class ) ) . '\"';\n+\t\techo ' ' . $output;\n+\t}\n+\n+\tpublic function set_position( $position ) {\n+\t\t$this->_data['position'] = $position;\n+\t}\n+\n+\tpublic function get_position() {\n+\t\treturn ! empty( $this->_data['position'] ) ? absint( $this->_data['position'] ) : 0;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class Model_Can_View_Course_Item\r\n- *\r\n- * @package learnpress\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Model_User_Can_View_Course_Item {\r\n-\tpublic $flag    = false;\r\n-\tpublic $key     = '';\r\n-\tpublic $message = '';\r\n-\r\n-\tpublic function __construct() {\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class Model_Can_View_Course_Item\n+ *\n+ * @package learnpress\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Model_User_Can_View_Course_Item {\n+\tpublic $flag    = false;\n+\tpublic $key     = '';\n+\tpublic $message = '';\n+\n+\tpublic function __construct() {\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Flp-course-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Flp-course-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcourse\u002Flp-course-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcourse\u002Flp-course-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1051 +1,1051 @@\n-\u003C?php\r\n-\u002F**\r\n- * Common functions to manipulate with course, lesson, quiz, questions, etc...\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FFunctions\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Get course current on single course or course by id\r\n- * Only use learn_press_get_course() on the single page\r\n- * Another page use learn_press_get_course(id)\r\n- *\r\n- * @param int $the_course\r\n- * @since 3.0.0\r\n- * @version 1.0.1\r\n- * @editor tungnx\r\n- * @return bool|LP_Course|mixed\r\n- *\u002F\r\n-function learn_press_get_course( $the_course = 0 ) {\r\n-\t$the_course = (int) $the_course;\r\n-\r\n-\tif ( 0 === $the_course ) {\r\n-\t\t$the_course = get_the_ID() ? get_the_ID() : 0;\r\n-\t}\r\n-\r\n-\treturn LP_Course::get_course( $the_course );\r\n-}\r\n-\r\n-\u002F**\r\n- * @editor tungnx\r\n- * @modify 4.1.4.1 - comment - not use\r\n- *\u002F\r\n-\u002F*function learn_press_get_course_by_id( $id ) {\r\n-\tif ( false !== ( $courses = LP_Object_Cache::get( 'object', 'learn-press\u002Fcourses' ) ) ) {\r\n-\t\treturn ! empty( $courses[ $id ] ) ? $courses[ $id ] : false;\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Create nonce for course action.\r\n- * Return nonce created with format 'learn-press-$action-$course_id-course-$user_id'\r\n- *\r\n- * @param string $action [retake, purchase, enroll]\r\n- * @param int $course_id\r\n- * @param int $user_id\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- * @deprecated 4.1.6.9\r\n- *\u002F\r\n-\u002F*function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {\r\n-\treturn LP_Nonce_Helper::create_course( $action, $course_id, $user_id );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Verify nonce for course action.\r\n- *\r\n- * @param string $nonce\r\n- * @param string $action\r\n- * @param int $course_id\r\n- * @param int $user_id\r\n- *\r\n- * @return bool\r\n- * @since 3.0.0\r\n- * @deprecated 4.1.6.9\r\n- *\u002F\r\n-\u002F*function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {\r\n-\treturn LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get type of items are supported in course curriculum (post types).\r\n- * Default: [lp_lesson, lp_quiz]\r\n- * When all addon use hook 'learn-press\u002Fcourse\u002Fitem-types-support', will deprecate this function\r\n- * @use CourseModel::item_types_support\r\n- *\r\n- * @return mixed\r\n- * @since 3.0.0\r\n- * @editor tungnx\r\n- * @version  1.0.1\r\n- * @return array\r\n- * @deprecated\r\n- *\u002F\r\n-function learn_press_get_course_item_types( bool $return_only_value = true ): array {\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Fcourse-item-type',\r\n-\t\tarray( LP_LESSON_CPT, LP_QUIZ_CPT )\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Get type of items can purchase on LP Order.\r\n- * Default: ['lp_course', 'lp_certificate']\r\n- *\r\n- * @return mixed\r\n- * @since 3.0.0\r\n- *\r\n- *\u002F\r\n-function learn_press_get_item_types_can_purchase() {\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Fpurchase\u002Fitem-types\u002Fcan-purchase',\r\n-\t\tarray( LP_COURSE_CPT )\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the courses that a item is assigned to\r\n- *\r\n- * @param $item\r\n- *\r\n- * @return mixed\r\n- * @Todo - tungnx need review code to rewrite.\r\n- *\u002F\r\n-function learn_press_get_item_courses( $item ) {\r\n-\tglobal $wpdb;\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT c.*\r\n-\t\tFROM {$wpdb->posts} c\r\n-\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\r\n-\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\r\n-\t\t\tWHERE si.item_id = %d\r\n-\t\t\",\r\n-\t\t$item\r\n-\t);\r\n-\r\n-\treturn $wpdb->get_results( $query );\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function _learn_press_usort_terms_by_ID( $terms ) {\r\n-\t$version = get_bloginfo( 'version' );\r\n-\tif ( version_compare( $version, '4.7', '>=' ) ) {\r\n-\t\t$terms = wp_list_sort( $terms, 'term_id' );\r\n-\t} else {\r\n-\t\tusort( $terms, '_usort_terms_by_ID' );\r\n-\t}\r\n-\r\n-\treturn $terms;\r\n-}*\u002F\r\n-\r\n-\u002F*function learn_press_course_post_type_link( $permalink, $post ) {\r\n-\tif ( $post->post_type !== 'lp_course' ) {\r\n-\t\treturn $permalink;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Abort early if the placeholder rewrite tag isn't in the generated URL\r\n-\tif ( false === strpos( $permalink, '%' ) ) {\r\n-\t\treturn $permalink;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Get the custom taxonomy terms in use by this post\r\n-\t$terms = get_the_terms( $post->ID, 'course_category' );\r\n-\r\n-\tif ( ! empty( $terms ) ) {\r\n-\t\t$terms           = _learn_press_usort_terms_by_ID( $terms ); \u002F\u002F order by ID\r\n-\t\t$category_object = apply_filters(\r\n-\t\t\t'learn_press_course_post_type_link_course_category',\r\n-\t\t\t$terms[0],\r\n-\t\t\t$terms,\r\n-\t\t\t$post\r\n-\t\t);\r\n-\t\t$category_object = get_term( $category_object, 'course_category' );\r\n-\t\t$course_category = $category_object->slug;\r\n-\r\n-\t\tif ( $parent = $category_object->parent ) {\r\n-\t\t\t$ancestors = get_ancestors( $category_object->term_id, 'course_category' );\r\n-\t\t\tforeach ( $ancestors as $ancestor ) {\r\n-\t\t\t\t$ancestor_object = get_term( $ancestor, 'course_category' );\r\n-\t\t\t\t$course_category = $ancestor_object->slug . '\u002F' . $course_category;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} else {\r\n-\t\t\u002F\u002F If no terms are assigned to this post, use a string instead (can't leave the placeholder there)\r\n-\t\t$course_category = _x( 'uncategorized', 'slug', 'learnpress' );\r\n-\t}\r\n-\r\n-\t$find = array(\r\n-\t\t'%year%',\r\n-\t\t'%monthnum%',\r\n-\t\t'%day%',\r\n-\t\t'%hour%',\r\n-\t\t'%minute%',\r\n-\t\t'%second%',\r\n-\t\t'%post_id%',\r\n-\t\t'%category%',\r\n-\t\t'%course_category%',\r\n-\t);\r\n-\r\n-\t$replace = array(\r\n-\t\tdate_i18n( 'Y', strtotime( $post->post_date ) ),\r\n-\t\tdate_i18n( 'm', strtotime( $post->post_date ) ),\r\n-\t\tdate_i18n( 'd', strtotime( $post->post_date ) ),\r\n-\t\tdate_i18n( 'H', strtotime( $post->post_date ) ),\r\n-\t\tdate_i18n( 'i', strtotime( $post->post_date ) ),\r\n-\t\tdate_i18n( 's', strtotime( $post->post_date ) ),\r\n-\t\t$post->ID,\r\n-\t\t$course_category,\r\n-\t\t$course_category,\r\n-\t);\r\n-\r\n-\t$permalink = str_replace( $find, $replace, $permalink );\r\n-\r\n-\treturn $permalink;\r\n-}*\u002F\r\n-\r\n-\u002F\u002Fadd_filter( 'post_type_link', 'learn_press_course_post_type_link', 10, 2 );\r\n-\r\n-function learn_press_item_meta_format( $item, $nonce = '' ) {\r\n-\tif ( current_theme_supports( 'post-formats' ) ) {\r\n-\t\t$format = get_post_format( $item );\r\n-\t\tif ( false === $format ) {\r\n-\t\t\t$format = 'standard';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F return false to hide post format\r\n-\t\t$format = apply_filters( 'learn_press_course_item_format', $format, $item );\r\n-\t\tif ( $format ) {\r\n-\t\t\tprintf(\r\n-\t\t\t\t'\u003Clabel for=\"post-format-0\" class=\"post-format-icon post-format-%s\" title=\"%s\">\u003C\u002Flabel>',\r\n-\t\t\t\t$format,\r\n-\t\t\t\tucfirst( $format )\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\techo esc_html( $nonce );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_course_item_format_exclude( $format, $item ) {\r\n-\tif ( learn_press_get_post_type( $item ) != LP_LESSON_CPT || ( $format == 'standard' ) ) {\r\n-\t\t$format = false;\r\n-\t}\r\n-\r\n-\treturn $format;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get curriculum of a course\r\n- *\r\n- * @param $course_id\r\n- *\r\n- * @return mixed\r\n- * @version 1.0\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_get_course_curriculum( $course_id ) {\r\n-\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\treturn $course->get_curriculum();\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Verify course access\r\n- *\r\n- * @param int $course_id\r\n- * @param int $user_id\r\n- *\r\n- * @return boolean\r\n- * @deprecated 4.1.3\r\n- * @editor tungnx\r\n- *\u002F\r\n-\u002F*function learn_press_is_enrolled_course( $course_id = null, $user_id = null ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.1.3' );\r\n-\tif ( $course = learn_press_get_course( $course_id ) && $user = learn_press_get_user( $user_id ) ) {\r\n-\t\treturn $user->has_enrolled_course( $course_id );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Detect if a course is free or not\r\n- *\r\n- * @param null $course_id\r\n- *\r\n- * @return bool\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_is_free_course( $course_id = null ) {\r\n-\tif ( ! $course_id ) {\r\n-\t\t$course_id = get_the_ID();\r\n-\t}\r\n-\r\n-\treturn learn_press_get_course( $course_id )->is_free();\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * get current status of user's course\r\n- *\r\n- * @param int $user_id\r\n- * @param int $course_id\r\n- *\r\n- * @return  string\r\n- * @author  Tunn\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_get_user_course_status( $user_id = null, $course_id = null ) {\r\n-\t$course = learn_press_get_course( $course_id );\r\n-\t$user   = learn_press_get_user( $user_id );\r\n-\r\n-\tif ( $course && $user ) {\r\n-\t\treturn $user->get_course_status( $course_id );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Wrap function can-view-item of user object.\r\n- *\r\n- * @param int $item_id\r\n- * @param int $course_id\r\n- * @param int $user_id\r\n- *\r\n- * @return mixed\r\n- * @since 3.1.0\r\n- *\r\n- *\u002F\r\n-\u002F\u002Ffunction learn_press_can_view_item( $item_id, $course_id = 0, $user_id = 0 ) {\r\n-\u002F\u002F  if ( ! $user_id ) {\r\n-\u002F\u002F      $user_id = get_current_user_id();\r\n-\u002F\u002F  }\r\n-\u002F\u002F  $user = learn_press_get_user( $user_id );\r\n-\u002F\u002F\r\n-\u002F\u002F  return $user->can_view_item( $item_id, $course_id );\r\n-\u002F\u002F}\r\n-\r\n-\u002F**\r\n- * Get course setting is enroll required or public\r\n- *\r\n- * @param int $course_id\r\n- *\r\n- * @return boolean\r\n- * @since 0.9.5\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_course_enroll_required( $course_id = null ) {\r\n-\t$course_id = learn_press_get_course_id( $course_id );\r\n-\r\n-\t$required = ( 'yes' == get_post_meta( $course_id, '_lpr_course_enrolled_require', true ) );\r\n-\r\n-\treturn apply_filters( 'learn_press_course_enroll_required', $required, $course_id );\r\n-}*\u002F\r\n-\r\n-function learn_press_get_all_courses( $args = array() ) {\r\n-\t$term    = '';\r\n-\t$exclude = '';\r\n-\tis_array( $args ) && extract( $args );\r\n-\t$args  = array(\r\n-\t\t'post_type'      => array( 'lp_course' ),\r\n-\t\t'post_status'    => 'publish',\r\n-\t\t'posts_per_page' => - 1,\r\n-\t\t's'              => $term,\r\n-\t\t'fields'         => 'ids',\r\n-\t\t'exclude'        => $exclude,\r\n-\t);\r\n-\t$args  = apply_filters( 'learn_press_get_courses_args', $args );\r\n-\t$posts = get_posts( $args );\r\n-\r\n-\treturn apply_filters( 'learn_press_get_courses', $posts, $args );\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_search_post_excerpt( $where = '' ) {\r\n-\tglobal $wp_the_query, $wpdb;\r\n-\r\n-\tif ( empty( $wp_the_query->query_vars['s'] ) ) {\r\n-\t\treturn $where;\r\n-\t}\r\n-\r\n-\t$where = preg_replace(\r\n-\t\t\"\u002Fpost_title\\s+LIKE\\s*(\\'\\%[^\\%]+\\%\\')\u002F\",\r\n-\t\t\"post_title LIKE $1) OR ({$wpdb->posts}.post_excerpt LIKE $1\",\r\n-\t\t$where\r\n-\t);\r\n-\r\n-\treturn $where;\r\n-}*\u002F\r\n-\r\n-\u002F\u002F add_filter( 'posts_where', 'learn_press_search_post_excerpt' );\r\n-\r\n-function learn_press_get_course_user( $course_id = null ) {\r\n-\tif ( ! $course_id ) {\r\n-\t\t$course_id = get_the_ID();\r\n-\t}\r\n-\r\n-\treturn learn_press_get_user( get_post_field( 'post_author', $course_id ) );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get item types support in course curriculum.\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_course_get_support_item_types() {\r\n-\t$types = [\r\n-\t\tLP_LESSON_CPT => __( 'Lesson', 'learnpress' ),\r\n-\t\tLP_QUIZ_CPT   => __( 'Quiz', 'learnpress' ),\r\n-\t];\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fcourse-support-items', $types, false );\r\n-}\r\n-\r\n-\u002F**\r\n- * Register new type of course item\r\n- *\r\n- * @param string $post_type - Usually is post type\r\n- * @param string $label - Name show for user\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_course_add_support_item_type( $post_type, $label = '' ) {\r\n-\tif ( empty( $GLOBALS['learn_press_course_support_item_types'] ) ) {\r\n-\t\t$GLOBALS['learn_press_course_support_item_types'] = array();\r\n-\t}\r\n-\tif ( func_num_args() == 1 && is_array( func_get_arg( 0 ) ) ) {\r\n-\t\tforeach ( func_get_arg( 0 ) as $type => $label ) {\r\n-\t\t\tlearn_press_course_add_support_item_type( $type, $label );\r\n-\t\t}\r\n-\t} elseif ( func_num_args() == 2 ) {\r\n-\t\t$GLOBALS['learn_press_course_support_item_types'][ func_get_arg( 0 ) ] = func_get_arg( 1 );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Check if course is support an item's type.\r\n- *\r\n- * @param string $type\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_support_course_item_type( $type ) {\r\n-\t$types = learn_press_course_get_support_item_types();\r\n-\r\n-\tif ( is_array( $type ) ) {\r\n-\t\t$support = true;\r\n-\t\tforeach ( $type as $t ) {\r\n-\t\t\t$support = $support && learn_press_is_support_course_item_type( $t );\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$support = is_string( $type ) && $type && ! empty( $types[ $type ] );\r\n-\t}\r\n-\r\n-\treturn $support;\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*learn_press_course_add_support_item_type(\r\n-\tarray(\r\n-\t\t'lp_lesson' => __( 'Lesson', 'learnpress' ),\r\n-\t\t'lp_quiz'   => __( 'Quiz', 'learnpress' ),\r\n-\t)\r\n-);*\u002F\r\n-\r\n-function learn_press_add_course_item_feature( $type, $feature ) {\r\n-\t$features = array();\r\n-\tif ( ! empty( $GLOBALS['learn_press_course_item_features'] ) ) {\r\n-\t\t$features = $GLOBALS['learn_press_course_item_features'];\r\n-\t}\r\n-\r\n-\tif ( empty( $features[ $type ] ) ) {\r\n-\t\t$features[ $type ] = array();\r\n-\t}\r\n-\r\n-\tif ( array_search( $feature, $features ) === false ) {\r\n-\t\t$features[ $type ] = $feature;\r\n-\t}\r\n-\r\n-\t$GLOBALS['learn_press_course_item_features'] = $features;\r\n-}\r\n-\r\n-\r\n-function learn_press_get_course_id() {\r\n-\t$course_id = 0;\r\n-\tif ( learn_press_is_course() ) {\r\n-\t\t$course_id = get_the_ID();\r\n-\t}\r\n-\r\n-\treturn absint( $course_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the permalink of a course\r\n- *\r\n- * @param int $course_id\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- *\r\n- *\u002F\r\n-function learn_press_get_course_permalink( $course_id = 0 ) {\r\n-\tif ( $course = learn_press_get_course( $course_id ) ) {\r\n-\t\treturn $course->get_permalink();\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Get the permalink of a item in a course\r\n- *\r\n- * @param int $course_id\r\n- * @param int $item_id\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- * Addon Assignment 4.1.1 still use\r\n- *\u002F\r\n-function learn_press_get_course_item_permalink( int $course_id = 0, int $item_id = 0 ): string {\r\n-\t$course = learn_press_get_course( $course_id );\r\n-\tif ( $course ) {\r\n-\t\treturn $course->get_item_link( $item_id );\r\n-\t}\r\n-\r\n-\treturn '';\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.2\r\n- *\u002F\r\n-function learn_press_get_the_course() {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.2', 'learn_press_get_course' );\r\n-\treturn learn_press_get_course();\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_get_user_question_answer( $args = '' ) {\r\n-\t$args     = wp_parse_args(\r\n-\t\t$args,\r\n-\t\tarray(\r\n-\t\t\t'question_id' => 0,\r\n-\t\t\t'history_id'  => 0,\r\n-\t\t\t'quiz_id'     => 0,\r\n-\t\t\t'course_id'   => 0,\r\n-\t\t\t'user_id'     => get_current_user_id(),\r\n-\t\t)\r\n-\t);\r\n-\t$answered = null;\r\n-\tif ( $args['history_id'] ) {\r\n-\t\t$user_meta = learn_press_get_user_item_meta( $args['history_id'], 'question_answers', true );\r\n-\t\tif ( $user_meta && array_key_exists( $args['question_id'], $user_meta ) ) {\r\n-\t\t\t$answered = $user_meta[ $args['question_id'] ];\r\n-\t\t}\r\n-\t} elseif ( $args['quiz_id'] && $args['course_id'] ) {\r\n-\t\t$user    = learn_press_get_user( $args['user_id'] );\r\n-\t\t$history = $user->get_quiz_results( $args['quiz_id'], $args['course_id'] );\r\n-\t\tif ( $history ) {\r\n-\t\t\t$user_meta = learn_press_get_user_item_meta( $history->history_id, 'question_answers', true );\r\n-\t\t\tif ( $user_meta && array_key_exists( $args['question_id'], $user_meta ) ) {\r\n-\t\t\t\t$answered = $user_meta[ $args['question_id'] ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $answered;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function need_to_updating() {\r\n-\tob_start();\r\n-\tlearn_press_display_message( 'This function need to updating' );\r\n-\r\n-\treturn ob_get_clean();\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * filter section item single course\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_get_course_sections() {\r\n-\treturn apply_filters(\r\n-\t\t'learn_press_get_course_sections',\r\n-\t\tarray(\r\n-\t\t\t'lp_lesson',\r\n-\t\t\t'lp_quiz',\r\n-\t\t)\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function lean_press_get_course_sections() {\r\n-\t_deprecated_function( __FUNCTION__, '2.1', 'learn_press_get_course_sections' );\r\n-\r\n-\treturn learn_press_get_course_sections();\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*if ( ! function_exists( 'learn_press_get_course_item_url' ) ) {\r\n-\tfunction learn_press_get_course_item_url( $course_id = null, $item_id = null ) {\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\treturn $course ? $course->get_item_link( $item_id ) : false;\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Add filter to WP comment form of lesson or quiz to output ID of current course.\r\n- *\r\n- * @param $post_id\r\n- *\r\n- * @since 3.0.10\r\n- *\r\n- *\u002F\r\n-function learn_press_comment_post_item_course( $post_id ) {\r\n-\t$course = learn_press_get_course();\r\n-\tif ( ! $course ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\techo sprintf( '\u003Cinput type=\"hidden\" name=\"comment-post-item-course\" value=\"%d\" \u002F>', $course->get_id() );\r\n-}\r\n-\r\n-add_action( 'comment_form', 'learn_press_comment_post_item_course' );\r\n-\r\n-function learn_press_item_comment_link( $link, $comment, $args, $cpage ) {\r\n-\r\n-\t$comment_post_ID = $comment->comment_post_ID;\r\n-\r\n-\t\u002F**\r\n-\t * Validate if comment post is an item of course\r\n-\t *\u002F\r\n-\tif ( ! learn_press_is_support_course_item_type( learn_press_get_post_type( $comment_post_ID ) ) ) {\r\n-\t\treturn $link;\r\n-\t}\r\n-\r\n-\t$post_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Ensure there is a course\r\n-\t *\u002F\r\n-\tif ( empty( $_POST['comment-post-item-course'] ) ) {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( $course ) {\r\n-\t\t\t$post_id = $course->get_id();\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$post_id = absint( $_POST['comment-post-item-course'] );\r\n-\t}\r\n-\r\n-\t$course = learn_press_get_course( $post_id );\r\n-\tif ( $course ) {\r\n-\t\t$link = str_replace( get_the_permalink( $comment_post_ID ), $course->get_item_link( $comment_post_ID ), $link );\r\n-\t}\r\n-\r\n-\treturn $link;\r\n-}\r\n-\r\n-add_filter( 'get_comment_link', 'learn_press_item_comment_link', 100, 4 );\r\n-\r\n-\u002F**\r\n- * Fix redirection invalid when SG Cache is installed\r\n- *\r\n- * @param int $comment_id\r\n- * @param string $status\r\n- *\r\n- * @since 3.0.10\r\n- * @deprecated 4.1.6.9\r\n- *\r\n- *\u002F\r\n-\u002F*function learn_press_force_refresh_course( $comment_id, $status ) {\r\n-\r\n-\tif ( empty( $_POST['comment-post-item-course'] ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$course_id = absint( $_POST['comment-post-item-course'] );\r\n-\t$course    = learn_press_get_course( $course_id );\r\n-\t$curd      = new LP_Course_CURD();\r\n-\t$curd->load( $course );\r\n-}\r\n-\r\n-add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );*\u002F\r\n-\r\n-\u002F**\r\n- * @deprecated 4.1.6.9\r\n- *\u002F\r\n-\u002F*if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {\r\n-\tfunction learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {\r\n-\r\n-\t\t$course           = learn_press_get_course( $course_id );\r\n-\t\t$curriculum_items = $course->get_items();\u002F\u002F LP_Helper::maybe_unserialize( $course->post->curriculum_items );\r\n-\t\t$index            = array_search( $item_id, $curriculum_items );\r\n-\t\t$return           = array(\r\n-\t\t\t'back' => '',\r\n-\t\t\t'next' => '',\r\n-\t\t);\r\n-\t\tif ( is_array( $curriculum_items ) ) {\r\n-\t\t\tif ( array_key_exists( $index - 1, $curriculum_items ) ) {\r\n-\t\t\t\t$back_item      = get_post( $curriculum_items[ $index - 1 ] );\r\n-\t\t\t\t$return['back'] = array(\r\n-\t\t\t\t\t'id'    => $back_item->ID,\r\n-\t\t\t\t\t'link'  => $course->get_item_link( $curriculum_items[ $index - 1 ] ),\r\n-\t\t\t\t\t'title' => $back_item->post_title,\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( $content_only ) {\r\n-\t\t\t\t\t$return['back']['link'] .= '?content-item-only=yes';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tif ( array_key_exists( $index + 1, $curriculum_items ) ) {\r\n-\t\t\t\t$next_item      = get_post( $curriculum_items[ $index + 1 ] );\r\n-\t\t\t\t$return['next'] = array(\r\n-\t\t\t\t\t'id'    => $next_item->ID,\r\n-\t\t\t\t\t'link'  => $course->get_item_link( $curriculum_items[ $index + 1 ] ),\r\n-\t\t\t\t\t'title' => $next_item->post_title,\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( $content_only ) {\r\n-\t\t\t\t\t$return['next']['link'] .= '?content-item-only=yes';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get course id of an item by id\r\n- *\r\n- * @deprecated 4.1.6.9\r\n- *\u002F\r\n-\r\n-if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {\r\n-\r\n-\tfunction learn_press_get_item_course_id( $post_id, $post_type ) {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\r\n-\t\t\u002F*global $wpdb;\r\n-\r\n-\t\t\u002F\u002F If the post is a course\r\n-\t\tif ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $post_types = learn_press_course_get_support_item_types( true ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! in_array( learn_press_get_post_type( $post_id ), $post_types ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = false;\r\n-\r\n-\t\tif ( false !== ( $courses = LP_Object_Cache::get( 'item-course-ids', 'learn-press' ) ) ) {\r\n-\r\n-\t\t\tforeach ( $courses as $course_id => $items ) {\r\n-\t\t\t\tif ( in_array( $post_id, $items ) ) {\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\t$course_id = false;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$courses = array();\r\n-\t\t}\r\n-\r\n-\t\tif ( false === $course_id ) {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT section.section_course_id\r\n-\t\t\t\tFROM {$wpdb->learnpress_sections} AS section\r\n-\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} AS item\r\n-\t\t\t\tON item.section_id = section.section_id\r\n-\t\t\t\tWHERE item.item_id = %d\r\n-\t\t\t\tLIMIT 1\r\n-\t\t\t\t\",\r\n-\t\t\t\t$post_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$course_id = apply_filters( 'learn-press\u002Fitem-course-id', absint( $wpdb->get_var( $query ) ), $post_id );\r\n-\r\n-\t\t\tif ( $course = learn_press_get_course( $course_id ) ) {\r\n-\t\t\t\t$courses[ $course_id ] = $course->get_items();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $courses[ $course_id ] ) ) {\r\n-\t\t\t\t$courses[ $course_id ] = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! in_array( $post_id, $courses[ $course_id ] ) ) {\r\n-\t\t\t\t$courses[ $course_id ][] = $post_id;\r\n-\t\t\t}\r\n-\t\t\tLP_Object_Cache::set( 'item-course-ids', $courses, 'learn-press' );\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;*\u002F\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * @editor     tungnx | comment code\r\n- * @deprecated 3.2.7.5\r\n- *\u002F\r\n-\u002F*function learn_press_item_sample_permalink_html( $return, $post_id, $new_title, $new_slug, $post ) {\r\n-\tremove_filter( 'get_sample_permalink_html', 'learn_press_item_sample_permalink_html', 10 );\r\n-\r\n-\t$return = sprintf(\r\n-\t\t'\u003Ca class=\"button\" href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\r\n-\t\tlearn_press_get_preview_url( $post_id ),\r\n-\t\t__( 'Preview', 'learnpress' )\r\n-\t);\r\n-\r\n-\t$return .= '\u003Cspan>' . __( 'Permalink only available if the item is already assigned to a course.', 'learnpress' ) . '\u003C\u002Fspan>';\r\n-\r\n-\treturn sprintf( '\u003Cdiv id=\"learn-press-box-edit-slug\">%s\u003C\u002Fdiv>', $return );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * @editor     tungnx | comment code\r\n- * @deprecated 3.2.7.5\r\n- *\u002F\r\n-\u002F*if ( ! function_exists( 'learn_press_item_sample_permalink' ) ) {\r\n-\r\n-\tfunction learn_press_item_sample_permalink( $permalink, $post_id, $title, $name, $post ) {\r\n-\t\tif ( ! in_array( $post->post_type, learn_press_course_get_support_item_types( true ) ) ) {\r\n-\t\t\treturn $permalink;\r\n-\t\t}\r\n-\r\n-\t\t$permalink[0] = str_replace( $post->post_name, '%pagename%', $permalink[0] );\r\n-\r\n-\t\tif ( ! preg_match( '~^https?:\u002F\u002F~', $permalink[0] ) ) {\r\n-\t\t\tadd_filter( 'get_sample_permalink_html', 'learn_press_item_sample_permalink_html', 10, 5 );\r\n-\t\t}\r\n-\r\n-\t\treturn $permalink;\r\n-\t}\r\n-\r\n-}*\u002F\r\n-\u002F\u002Fadd_filter( 'get_sample_permalink', 'learn_press_item_sample_permalink', 10, 5 );\r\n-\r\n-\u002F**\r\n- * Get preview url for LP post type.\r\n- *\r\n- * @param int $post_id\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- *\r\n- *\u002F\r\n-function learn_press_get_preview_url( $post_id ) {\r\n-\treturn esc_url_raw(\r\n-\t\tadd_query_arg(\r\n-\t\t\tarray(\r\n-\t\t\t\t'lp-preview' => $post_id,\r\n-\t\t\t\t'_wpnonce'   => wp_create_nonce( 'lp-preview' ),\r\n-\t\t\t),\r\n-\t\t\ttrailingslashit( get_home_url() )\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_item_type_link' ) ) {\r\n-\t\u002F**\r\n-\t * Add filter to WP custom post-type-link to edit the link of item\r\n-\t * with the link of it's course.\r\n-\t *\r\n-\t * @updated    12 Nov 2018\r\n-\t *\r\n-\t * @param string $post_link\r\n-\t * @param WP_Post $post\r\n-\t * @param bool $leavename\r\n-\t * @param bool $sample\r\n-\t *\r\n-\t * @editor     tungnx | comment code\r\n-\t * @return string\r\n-\t * @deprecated 3.2.7.4\r\n-\t *\u002F\r\n-\t\u002F*function learn_press_course_item_type_link( $post_link, $post, $leavename, $sample ) {\r\n-\r\n-\t\tremove_filter( 'post_type_link', 'learn_press_course_item_type_link', 10 );\r\n-\r\n-\t\t$course = learn_press_get_course();\r\n-\r\n-\t\tif ( ! $course && ( $course_id = learn_press_get_item_course( $post->ID ) ) ) {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( learn_press_is_support_course_item_type( $post->post_type ) ) {\r\n-\t\t\t\u002F\u002F Check elementor installed and activated\r\n-\t\t\tif ( did_action( 'elementor\u002Floaded' ) ) {\r\n-\t\t\t\t\u002F\u002F do stuff for edit mode\r\n-\t\t\t\tif ( ! Elementor\\Plugin::$instance->editor->is_edit_mode() ) {\r\n-\t\t\t\t\tif ( $course ) {\r\n-\t\t\t\t\t\t$post_link = $course->get_item_link( $post->ID );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$post_link = learn_press_get_sample_link_course_item_url( $post->ID );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $course ) {\r\n-\t\t\t\t\t$post_link = $course->get_item_link( $post->ID );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$post_link = learn_press_get_sample_link_course_item_url( $post->ID );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tadd_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );\r\n-\r\n-\t\treturn $post_link;\r\n-\t}*\u002F\r\n-}\r\n-\u002F\u002Fadd_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );\r\n-\r\n-\u002F**\r\n- * Get grade course type can translate\r\n- *\r\n- * @param string $grade\r\n- * @param bool $echo\r\n- *\r\n- * @return mixed|void\r\n- *\u002F\r\n-function learn_press_course_grade_html( string $grade = '', bool $echo = true ) {\r\n-\tswitch ( $grade ) {\r\n-\t\tcase 'passed':\r\n-\t\t\t$html = __( 'Passed', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'failed':\r\n-\t\t\t$html = __( 'Failed', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'in-progress':\r\n-\t\t\t$html = __( 'In Progress', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\t$html = $grade;\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\t\u002F\u002F @since 3.0.0\r\n-\t$html = apply_filters( 'learn-press\u002Fcourse\u002Fgrade-html', $html, $grade );\r\n-\r\n-\tif ( $echo ) {\r\n-\t\techo wp_kses_post( $html );\r\n-\t}\r\n-\r\n-\treturn $html;\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-\u002F*function learn_press_get_course_results_tooltip( $course_id ) {\r\n-\t$metabox = LP_Course_Post_Type::assessment_meta_box();\r\n-\t$options = $metabox['fields'][0]['options'];\r\n-\t$cr      = get_post_meta( $course_id, '_lp_course_result', true );\r\n-\t$tooltip = ! empty( $options[ $cr ] ) ? $options[ $cr ] : false;\r\n-\tif ( $tooltip ) {\r\n-\t\tif ( preg_match_all( '~\u003Cp.*>(.*)\u003C\\\u002Fp>~im', $tooltip, $matches ) ) {\r\n-\t\t\t$tooltip = $matches[1][0];\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $tooltip;\r\n-}*\u002F\r\n-\r\n-function learn_press_course_passing_condition( $value, $format, $course_id ) {\r\n-\t$course    = learn_press_get_course( $course_id );\r\n-\t$quiz_id   = $course->get_final_quiz();\r\n-\t$evalution = get_post_meta( $course_id, '_lp_course_result', true );\r\n-\r\n-\tif ( $quiz_id && $evalution === 'evaluate_final_quiz' ) {\r\n-\t\t$quiz  = learn_press_get_quiz( $quiz_id );\r\n-\t\t$value = absint( $quiz->get_passing_grade() );\r\n-\r\n-\t\tif ( $format ) {\r\n-\t\t\t$value = \"{$value}%\";\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $value;\r\n-}\r\n-\r\n-add_filter( 'learn-press\u002Fcourse-passing-condition', 'learn_press_course_passing_condition', 10, 3 );\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.7.4\r\n- *\u002F\r\n-function learn_press_remove_query_var_enrolled_course( $redirect ) {\r\n-\treturn esc_url_raw( remove_query_arg( 'enroll-course', $redirect ) );\r\n-}\r\n-\r\n-\u002F\u002Fadd_filter( 'learn-press\u002Fenroll-course-redirect', 'learn_press_remove_query_var_enrolled_course' );\r\n-\r\n-\u002F**\r\n- * Mark the user to know if they have just logged in\r\n- * for some purpose.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\u002F*function learn_press_mark_user_just_logged_in() {\r\n-\tLearnPress::instance()->session->set( 'user_just_logged_in', 'yes' );\r\n-}\r\n-add_action( 'wp_login', 'learn_press_mark_user_just_logged_in' );*\u002F\r\n-\r\n-function learn_press_translate_course_result_required( $course ) {\r\n-\tif ( ! $course ) {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t$passing_condition = $course->get_passing_condition();\r\n-\r\n-\t$evaluate_type = $course->get_data( 'course_result', 'evaluate_lesson' );\r\n-\tswitch ( $evaluate_type ) {\r\n-\t\tcase 'evaluate_lesson':\r\n-\t\t\t$label = esc_html__( 'completed lessons per the total number of lessons.', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'evaluate_quiz':\r\n-\t\t\t$label = esc_html__( 'passed quizzes per the total number of quizzes.', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'evaluate_final_quiz':\r\n-\t\t\t$label = esc_html__( 'Final Quiz', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'evaluate_questions':\r\n-\t\t\t$label = esc_html__( 'correct answers per the total number of questions.', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'evaluate_mark':\r\n-\t\t\t$label = esc_html__( 'score achieved per the total score of the questions.', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\t$label = apply_filters( 'learnpress\u002Fmessage\u002Fevaluate\u002F' . $evaluate_type, $evaluate_type );\r\n-\t\t\tbreak;\r\n-\t}\r\n-\r\n-\treturn apply_filters(\r\n-\t\t'learnpress\u002Fmessage\u002Fevaluate',\r\n-\t\twp_sprintf( '%1$s %2$s %3$s', __( 'Require', 'learnpress' ), $passing_condition . '%', $label )\r\n-\t);\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Common functions to manipulate with course, lesson, quiz, questions, etc...\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FFunctions\n+ * @version 1.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Get course current on single course or course by id\n+ * Only use learn_press_get_course() on the single page\n+ * Another page use learn_press_get_course(id)\n+ *\n+ * @param int $the_course\n+ * @since 3.0.0\n+ * @version 1.0.1\n+ * @editor tungnx\n+ * @return bool|LP_Course|mixed\n+ *\u002F\n+function learn_press_get_course( $the_course = 0 ) {\n+\t$the_course = (int) $the_course;\n+\n+\tif ( 0 === $the_course ) {\n+\t\t$the_course = get_the_ID() ? get_the_ID() : 0;\n+\t}\n+\n+\treturn LP_Course::get_course( $the_course );\n+}\n+\n+\u002F**\n+ * @editor tungnx\n+ * @modify 4.1.4.1 - comment - not use\n+ *\u002F\n+\u002F*function learn_press_get_course_by_id( $id ) {\n+\tif ( false !== ( $courses = LP_Object_Cache::get( 'object', 'learn-press\u002Fcourses' ) ) ) {\n+\t\treturn ! empty( $courses[ $id ] ) ? $courses[ $id ] : false;\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F**\n+ * Create nonce for course action.\n+ * Return nonce created with format 'learn-press-$action-$course_id-course-$user_id'\n+ *\n+ * @param string $action [retake, purchase, enroll]\n+ * @param int $course_id\n+ * @param int $user_id\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ * @deprecated 4.1.6.9\n+ *\u002F\n+\u002F*function learn_press_create_course_action_nonce( $action, $course_id = 0, $user_id = 0 ) {\n+\treturn LP_Nonce_Helper::create_course( $action, $course_id, $user_id );\n+}*\u002F\n+\n+\u002F**\n+ * Verify nonce for course action.\n+ *\n+ * @param string $nonce\n+ * @param string $action\n+ * @param int $course_id\n+ * @param int $user_id\n+ *\n+ * @return bool\n+ * @since 3.0.0\n+ * @deprecated 4.1.6.9\n+ *\u002F\n+\u002F*function learn_press_verify_course_action_nonce( $nonce, $action, $course_id = 0, $user_id = 0 ) {\n+\treturn LP_Nonce_Helper::verify_course( $nonce, $action, $course_id, $user_id );\n+}*\u002F\n+\n+\u002F**\n+ * Get type of items are supported in course curriculum (post types).\n+ * Default: [lp_lesson, lp_quiz]\n+ * When all addon use hook 'learn-press\u002Fcourse\u002Fitem-types-support', will deprecate this function\n+ * @use CourseModel::item_types_support\n+ *\n+ * @return mixed\n+ * @since 3.0.0\n+ * @editor tungnx\n+ * @version  1.0.1\n+ * @return array\n+ * @deprecated\n+ *\u002F\n+function learn_press_get_course_item_types( bool $return_only_value = true ): array {\n+\treturn apply_filters(\n+\t\t'learn-press\u002Fcourse-item-type',\n+\t\tarray( LP_LESSON_CPT, LP_QUIZ_CPT )\n+\t);\n+}\n+\n+\u002F**\n+ * Get type of items can purchase on LP Order.\n+ * Default: ['lp_course', 'lp_certificate']\n+ *\n+ * @return mixed\n+ * @since 3.0.0\n+ *\n+ *\u002F\n+function learn_press_get_item_types_can_purchase() {\n+\treturn apply_filters(\n+\t\t'learn-press\u002Fpurchase\u002Fitem-types\u002Fcan-purchase',\n+\t\tarray( LP_COURSE_CPT )\n+\t);\n+}\n+\n+\u002F**\n+ * Get the courses that a item is assigned to\n+ *\n+ * @param $item\n+ *\n+ * @return mixed\n+ * @Todo - tungnx need review code to rewrite.\n+ *\u002F\n+function learn_press_get_item_courses( $item ) {\n+\tglobal $wpdb;\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT c.*\n+\t\tFROM {$wpdb->posts} c\n+\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\n+\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\n+\t\t\tWHERE si.item_id = %d\n+\t\t\",\n+\t\t$item\n+\t);\n+\n+\treturn $wpdb->get_results( $query );\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function _learn_press_usort_terms_by_ID( $terms ) {\n+\t$version = get_bloginfo( 'version' );\n+\tif ( version_compare( $version, '4.7', '>=' ) ) {\n+\t\t$terms = wp_list_sort( $terms, 'term_id' );\n+\t} else {\n+\t\tusort( $terms, '_usort_terms_by_ID' );\n+\t}\n+\n+\treturn $terms;\n+}*\u002F\n+\n+\u002F*function learn_press_course_post_type_link( $permalink, $post ) {\n+\tif ( $post->post_type !== 'lp_course' ) {\n+\t\treturn $permalink;\n+\t}\n+\n+\t\u002F\u002F Abort early if the placeholder rewrite tag isn't in the generated URL\n+\tif ( false === strpos( $permalink, '%' ) ) {\n+\t\treturn $permalink;\n+\t}\n+\n+\t\u002F\u002F Get the custom taxonomy terms in use by this post\n+\t$terms = get_the_terms( $post->ID, 'course_category' );\n+\n+\tif ( ! empty( $terms ) ) {\n+\t\t$terms           = _learn_press_usort_terms_by_ID( $terms ); \u002F\u002F order by ID\n+\t\t$category_object = apply_filters(\n+\t\t\t'learn_press_course_post_type_link_course_category',\n+\t\t\t$terms[0],\n+\t\t\t$terms,\n+\t\t\t$post\n+\t\t);\n+\t\t$category_object = get_term( $category_object, 'course_category' );\n+\t\t$course_category = $category_object->slug;\n+\n+\t\tif ( $parent = $category_object->parent ) {\n+\t\t\t$ancestors = get_ancestors( $category_object->term_id, 'course_category' );\n+\t\t\tforeach ( $ancestors as $ancestor ) {\n+\t\t\t\t$ancestor_object = get_term( $ancestor, 'course_category' );\n+\t\t\t\t$course_category = $ancestor_object->slug . '\u002F' . $course_category;\n+\t\t\t}\n+\t\t}\n+\t} else {\n+\t\t\u002F\u002F If no terms are assigned to this post, use a string instead (can't leave the placeholder there)\n+\t\t$course_category = _x( 'uncategorized', 'slug', 'learnpress' );\n+\t}\n+\n+\t$find = array(\n+\t\t'%year%',\n+\t\t'%monthnum%',\n+\t\t'%day%',\n+\t\t'%hour%',\n+\t\t'%minute%',\n+\t\t'%second%',\n+\t\t'%post_id%',\n+\t\t'%category%',\n+\t\t'%course_category%',\n+\t);\n+\n+\t$replace = array(\n+\t\tdate_i18n( 'Y', strtotime( $post->post_date ) ),\n+\t\tdate_i18n( 'm', strtotime( $post->post_date ) ),\n+\t\tdate_i18n( 'd', strtotime( $post->post_date ) ),\n+\t\tdate_i18n( 'H', strtotime( $post->post_date ) ),\n+\t\tdate_i18n( 'i', strtotime( $post->post_date ) ),\n+\t\tdate_i18n( 's', strtotime( $post->post_date ) ),\n+\t\t$post->ID,\n+\t\t$course_category,\n+\t\t$course_category,\n+\t);\n+\n+\t$permalink = str_replace( $find, $replace, $permalink );\n+\n+\treturn $permalink;\n+}*\u002F\n+\n+\u002F\u002Fadd_filter( 'post_type_link', 'learn_press_course_post_type_link', 10, 2 );\n+\n+function learn_press_item_meta_format( $item, $nonce = '' ) {\n+\tif ( current_theme_supports( 'post-formats' ) ) {\n+\t\t$format = get_post_format( $item );\n+\t\tif ( false === $format ) {\n+\t\t\t$format = 'standard';\n+\t\t}\n+\n+\t\t\u002F\u002F return false to hide post format\n+\t\t$format = apply_filters( 'learn_press_course_item_format', $format, $item );\n+\t\tif ( $format ) {\n+\t\t\tprintf(\n+\t\t\t\t'\u003Clabel for=\"post-format-0\" class=\"post-format-icon post-format-%s\" title=\"%s\">\u003C\u002Flabel>',\n+\t\t\t\t$format,\n+\t\t\t\tucfirst( $format )\n+\t\t\t);\n+\t\t} else {\n+\t\t\techo esc_html( $nonce );\n+\t\t}\n+\t}\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_course_item_format_exclude( $format, $item ) {\n+\tif ( learn_press_get_post_type( $item ) != LP_LESSON_CPT || ( $format == 'standard' ) ) {\n+\t\t$format = false;\n+\t}\n+\n+\treturn $format;\n+}*\u002F\n+\n+\u002F**\n+ * Get curriculum of a course\n+ *\n+ * @param $course_id\n+ *\n+ * @return mixed\n+ * @version 1.0\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_get_course_curriculum( $course_id ) {\n+\t$course = learn_press_get_course( $course_id );\n+\n+\treturn $course->get_curriculum();\n+}*\u002F\n+\n+\u002F**\n+ * Verify course access\n+ *\n+ * @param int $course_id\n+ * @param int $user_id\n+ *\n+ * @return boolean\n+ * @deprecated 4.1.3\n+ * @editor tungnx\n+ *\u002F\n+\u002F*function learn_press_is_enrolled_course( $course_id = null, $user_id = null ) {\n+\t_deprecated_function( __FUNCTION__, '4.1.3' );\n+\tif ( $course = learn_press_get_course( $course_id ) && $user = learn_press_get_user( $user_id ) ) {\n+\t\treturn $user->has_enrolled_course( $course_id );\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F**\n+ * Detect if a course is free or not\n+ *\n+ * @param null $course_id\n+ *\n+ * @return bool\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_is_free_course( $course_id = null ) {\n+\tif ( ! $course_id ) {\n+\t\t$course_id = get_the_ID();\n+\t}\n+\n+\treturn learn_press_get_course( $course_id )->is_free();\n+}*\u002F\n+\n+\u002F**\n+ * get current status of user's course\n+ *\n+ * @param int $user_id\n+ * @param int $course_id\n+ *\n+ * @return  string\n+ * @author  Tunn\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_get_user_course_status( $user_id = null, $course_id = null ) {\n+\t$course = learn_press_get_course( $course_id );\n+\t$user   = learn_press_get_user( $user_id );\n+\n+\tif ( $course && $user ) {\n+\t\treturn $user->get_course_status( $course_id );\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F**\n+ * Wrap function can-view-item of user object.\n+ *\n+ * @param int $item_id\n+ * @param int $course_id\n+ * @param int $user_id\n+ *\n+ * @return mixed\n+ * @since 3.1.0\n+ *\n+ *\u002F\n+\u002F\u002Ffunction learn_press_can_view_item( $item_id, $course_id = 0, $user_id = 0 ) {\n+\u002F\u002F  if ( ! $user_id ) {\n+\u002F\u002F      $user_id = get_current_user_id();\n+\u002F\u002F  }\n+\u002F\u002F  $user = learn_press_get_user( $user_id );\n+\u002F\u002F\n+\u002F\u002F  return $user->can_view_item( $item_id, $course_id );\n+\u002F\u002F}\n+\n+\u002F**\n+ * Get course setting is enroll required or public\n+ *\n+ * @param int $course_id\n+ *\n+ * @return boolean\n+ * @since 0.9.5\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_course_enroll_required( $course_id = null ) {\n+\t$course_id = learn_press_get_course_id( $course_id );\n+\n+\t$required = ( 'yes' == get_post_meta( $course_id, '_lpr_course_enrolled_require', true ) );\n+\n+\treturn apply_filters( 'learn_press_course_enroll_required', $required, $course_id );\n+}*\u002F\n+\n+function learn_press_get_all_courses( $args = array() ) {\n+\t$term    = '';\n+\t$exclude = '';\n+\tis_array( $args ) && extract( $args );\n+\t$args  = array(\n+\t\t'post_type'      => array( 'lp_course' ),\n+\t\t'post_status'    => 'publish',\n+\t\t'posts_per_page' => - 1,\n+\t\t's'              => $term,\n+\t\t'fields'         => 'ids',\n+\t\t'exclude'        => $exclude,\n+\t);\n+\t$args  = apply_filters( 'learn_press_get_courses_args', $args );\n+\t$posts = get_posts( $args );\n+\n+\treturn apply_filters( 'learn_press_get_courses', $posts, $args );\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_search_post_excerpt( $where = '' ) {\n+\tglobal $wp_the_query, $wpdb;\n+\n+\tif ( empty( $wp_the_query->query_vars['s'] ) ) {\n+\t\treturn $where;\n+\t}\n+\n+\t$where = preg_replace(\n+\t\t\"\u002Fpost_title\\s+LIKE\\s*(\\'\\%[^\\%]+\\%\\')\u002F\",\n+\t\t\"post_title LIKE $1) OR ({$wpdb->posts}.post_excerpt LIKE $1\",\n+\t\t$where\n+\t);\n+\n+\treturn $where;\n+}*\u002F\n+\n+\u002F\u002F add_filter( 'posts_where', 'learn_press_search_post_excerpt' );\n+\n+function learn_press_get_course_user( $course_id = null ) {\n+\tif ( ! $course_id ) {\n+\t\t$course_id = get_the_ID();\n+\t}\n+\n+\treturn learn_press_get_user( get_post_field( 'post_author', $course_id ) );\n+}\n+\n+\u002F**\n+ * Get item types support in course curriculum.\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_course_get_support_item_types() {\n+\t$types = [\n+\t\tLP_LESSON_CPT => __( 'Lesson', 'learnpress' ),\n+\t\tLP_QUIZ_CPT   => __( 'Quiz', 'learnpress' ),\n+\t];\n+\n+\treturn apply_filters( 'learn-press\u002Fcourse-support-items', $types, false );\n+}\n+\n+\u002F**\n+ * Register new type of course item\n+ *\n+ * @param string $post_type - Usually is post type\n+ * @param string $label - Name show for user\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_course_add_support_item_type( $post_type, $label = '' ) {\n+\tif ( empty( $GLOBALS['learn_press_course_support_item_types'] ) ) {\n+\t\t$GLOBALS['learn_press_course_support_item_types'] = array();\n+\t}\n+\tif ( func_num_args() == 1 && is_array( func_get_arg( 0 ) ) ) {\n+\t\tforeach ( func_get_arg( 0 ) as $type => $label ) {\n+\t\t\tlearn_press_course_add_support_item_type( $type, $label );\n+\t\t}\n+\t} elseif ( func_num_args() == 2 ) {\n+\t\t$GLOBALS['learn_press_course_support_item_types'][ func_get_arg( 0 ) ] = func_get_arg( 1 );\n+\t}\n+}*\u002F\n+\n+\u002F**\n+ * Check if course is support an item's type.\n+ *\n+ * @param string $type\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_support_course_item_type( $type ) {\n+\t$types = learn_press_course_get_support_item_types();\n+\n+\tif ( is_array( $type ) ) {\n+\t\t$support = true;\n+\t\tforeach ( $type as $t ) {\n+\t\t\t$support = $support && learn_press_is_support_course_item_type( $t );\n+\t\t}\n+\t} else {\n+\t\t$support = is_string( $type ) && $type && ! empty( $types[ $type ] );\n+\t}\n+\n+\treturn $support;\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*learn_press_course_add_support_item_type(\n+\tarray(\n+\t\t'lp_lesson' => __( 'Lesson', 'learnpress' ),\n+\t\t'lp_quiz'   => __( 'Quiz', 'learnpress' ),\n+\t)\n+);*\u002F\n+\n+function learn_press_add_course_item_feature( $type, $feature ) {\n+\t$features = array();\n+\tif ( ! empty( $GLOBALS['learn_press_course_item_features'] ) ) {\n+\t\t$features = $GLOBALS['learn_press_course_item_features'];\n+\t}\n+\n+\tif ( empty( $features[ $type ] ) ) {\n+\t\t$features[ $type ] = array();\n+\t}\n+\n+\tif ( array_search( $feature, $features ) === false ) {\n+\t\t$features[ $type ] = $feature;\n+\t}\n+\n+\t$GLOBALS['learn_press_course_item_features'] = $features;\n+}\n+\n+\n+function learn_press_get_course_id() {\n+\t$course_id = 0;\n+\tif ( learn_press_is_course() ) {\n+\t\t$course_id = get_the_ID();\n+\t}\n+\n+\treturn absint( $course_id );\n+}\n+\n+\u002F**\n+ * Get the permalink of a course\n+ *\n+ * @param int $course_id\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ *\n+ *\u002F\n+function learn_press_get_course_permalink( $course_id = 0 ) {\n+\tif ( $course = learn_press_get_course( $course_id ) ) {\n+\t\treturn $course->get_permalink();\n+\t}\n+\n+\treturn false;\n+}\n+\n+\n+\u002F**\n+ * Get the permalink of a item in a course\n+ *\n+ * @param int $course_id\n+ * @param int $item_id\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ * Addon Assignment 4.1.1 still use\n+ *\u002F\n+function learn_press_get_course_item_permalink( int $course_id = 0, int $item_id = 0 ): string {\n+\t$course = learn_press_get_course( $course_id );\n+\tif ( $course ) {\n+\t\treturn $course->get_item_link( $item_id );\n+\t}\n+\n+\treturn '';\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.2\n+ *\u002F\n+function learn_press_get_the_course() {\n+\t_deprecated_function( __FUNCTION__, '4.2.2', 'learn_press_get_course' );\n+\treturn learn_press_get_course();\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_get_user_question_answer( $args = '' ) {\n+\t$args     = wp_parse_args(\n+\t\t$args,\n+\t\tarray(\n+\t\t\t'question_id' => 0,\n+\t\t\t'history_id'  => 0,\n+\t\t\t'quiz_id'     => 0,\n+\t\t\t'course_id'   => 0,\n+\t\t\t'user_id'     => get_current_user_id(),\n+\t\t)\n+\t);\n+\t$answered = null;\n+\tif ( $args['history_id'] ) {\n+\t\t$user_meta = learn_press_get_user_item_meta( $args['history_id'], 'question_answers', true );\n+\t\tif ( $user_meta && array_key_exists( $args['question_id'], $user_meta ) ) {\n+\t\t\t$answered = $user_meta[ $args['question_id'] ];\n+\t\t}\n+\t} elseif ( $args['quiz_id'] && $args['course_id'] ) {\n+\t\t$user    = learn_press_get_user( $args['user_id'] );\n+\t\t$history = $user->get_quiz_results( $args['quiz_id'], $args['course_id'] );\n+\t\tif ( $history ) {\n+\t\t\t$user_meta = learn_press_get_user_item_meta( $history->history_id, 'question_answers', true );\n+\t\t\tif ( $user_meta && array_key_exists( $args['question_id'], $user_meta ) ) {\n+\t\t\t\t$answered = $user_meta[ $args['question_id'] ];\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn $answered;\n+}*\u002F\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function need_to_updating() {\n+\tob_start();\n+\tlearn_press_display_message( 'This function need to updating' );\n+\n+\treturn ob_get_clean();\n+}*\u002F\n+\n+\u002F**\n+ * filter section item single course\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_get_course_sections() {\n+\treturn apply_filters(\n+\t\t'learn_press_get_course_sections',\n+\t\tarray(\n+\t\t\t'lp_lesson',\n+\t\t\t'lp_quiz',\n+\t\t)\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function lean_press_get_course_sections() {\n+\t_deprecated_function( __FUNCTION__, '2.1', 'learn_press_get_course_sections' );\n+\n+\treturn learn_press_get_course_sections();\n+}*\u002F\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*if ( ! function_exists( 'learn_press_get_course_item_url' ) ) {\n+\tfunction learn_press_get_course_item_url( $course_id = null, $item_id = null ) {\n+\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\treturn $course ? $course->get_item_link( $item_id ) : false;\n+\t}\n+}*\u002F\n+\n+\u002F**\n+ * Add filter to WP comment form of lesson or quiz to output ID of current course.\n+ *\n+ * @param $post_id\n+ *\n+ * @since 3.0.10\n+ *\n+ *\u002F\n+function learn_press_comment_post_item_course( $post_id ) {\n+\t$course = learn_press_get_course();\n+\tif ( ! $course ) {\n+\t\treturn;\n+\t}\n+\n+\techo sprintf( '\u003Cinput type=\"hidden\" name=\"comment-post-item-course\" value=\"%d\" \u002F>', $course->get_id() );\n+}\n+\n+add_action( 'comment_form', 'learn_press_comment_post_item_course' );\n+\n+function learn_press_item_comment_link( $link, $comment, $args, $cpage ) {\n+\n+\t$comment_post_ID = $comment->comment_post_ID;\n+\n+\t\u002F**\n+\t * Validate if comment post is an item of course\n+\t *\u002F\n+\tif ( ! learn_press_is_support_course_item_type( learn_press_get_post_type( $comment_post_ID ) ) ) {\n+\t\treturn $link;\n+\t}\n+\n+\t$post_id = 0;\n+\n+\t\u002F**\n+\t * Ensure there is a course\n+\t *\u002F\n+\tif ( empty( $_POST['comment-post-item-course'] ) ) {\n+\t\t$course = learn_press_get_course();\n+\t\tif ( $course ) {\n+\t\t\t$post_id = $course->get_id();\n+\t\t}\n+\t} else {\n+\t\t$post_id = absint( $_POST['comment-post-item-course'] );\n+\t}\n+\n+\t$course = learn_press_get_course( $post_id );\n+\tif ( $course ) {\n+\t\t$link = str_replace( get_the_permalink( $comment_post_ID ), $course->get_item_link( $comment_post_ID ), $link );\n+\t}\n+\n+\treturn $link;\n+}\n+\n+add_filter( 'get_comment_link', 'learn_press_item_comment_link', 100, 4 );\n+\n+\u002F**\n+ * Fix redirection invalid when SG Cache is installed\n+ *\n+ * @param int $comment_id\n+ * @param string $status\n+ *\n+ * @since 3.0.10\n+ * @deprecated 4.1.6.9\n+ *\n+ *\u002F\n+\u002F*function learn_press_force_refresh_course( $comment_id, $status ) {\n+\n+\tif ( empty( $_POST['comment-post-item-course'] ) ) {\n+\t\treturn;\n+\t}\n+\n+\t$course_id = absint( $_POST['comment-post-item-course'] );\n+\t$course    = learn_press_get_course( $course_id );\n+\t$curd      = new LP_Course_CURD();\n+\t$curd->load( $course );\n+}\n+\n+add_action( 'comment_post', 'learn_press_force_refresh_course', 1000, 2 );*\u002F\n+\n+\u002F**\n+ * @deprecated 4.1.6.9\n+ *\u002F\n+\u002F*if ( ! function_exists( 'learn_press_get_nav_course_item_url' ) ) {\n+\tfunction learn_press_get_nav_course_item_url( $course_id = null, $item_id = null, $content_only = false ) {\n+\n+\t\t$course           = learn_press_get_course( $course_id );\n+\t\t$curriculum_items = $course->get_items();\u002F\u002F LP_Helper::maybe_unserialize( $course->post->curriculum_items );\n+\t\t$index            = array_search( $item_id, $curriculum_items );\n+\t\t$return           = array(\n+\t\t\t'back' => '',\n+\t\t\t'next' => '',\n+\t\t);\n+\t\tif ( is_array( $curriculum_items ) ) {\n+\t\t\tif ( array_key_exists( $index - 1, $curriculum_items ) ) {\n+\t\t\t\t$back_item      = get_post( $curriculum_items[ $index - 1 ] );\n+\t\t\t\t$return['back'] = array(\n+\t\t\t\t\t'id'    => $back_item->ID,\n+\t\t\t\t\t'link'  => $course->get_item_link( $curriculum_items[ $index - 1 ] ),\n+\t\t\t\t\t'title' => $back_item->post_title,\n+\t\t\t\t);\n+\t\t\t\tif ( $content_only ) {\n+\t\t\t\t\t$return['back']['link'] .= '?content-item-only=yes';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tif ( array_key_exists( $index + 1, $curriculum_items ) ) {\n+\t\t\t\t$next_item      = get_post( $curriculum_items[ $index + 1 ] );\n+\t\t\t\t$return['next'] = array(\n+\t\t\t\t\t'id'    => $next_item->ID,\n+\t\t\t\t\t'link'  => $course->get_item_link( $curriculum_items[ $index + 1 ] ),\n+\t\t\t\t\t'title' => $next_item->post_title,\n+\t\t\t\t);\n+\t\t\t\tif ( $content_only ) {\n+\t\t\t\t\t$return['next']['link'] .= '?content-item-only=yes';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+}*\u002F\n+\n+\u002F**\n+ * Get course id of an item by id\n+ *\n+ * @deprecated 4.1.6.9\n+ *\u002F\n+\n+if ( ! function_exists( 'learn_press_get_item_course_id' ) ) {\n+\n+\tfunction learn_press_get_item_course_id( $post_id, $post_type ) {\n+\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\n+\t\t\u002F*global $wpdb;\n+\n+\t\t\u002F\u002F If the post is a course\n+\t\tif ( LP_COURSE_CPT == learn_press_get_post_type( $post_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! $post_types = learn_press_course_get_support_item_types( true ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! in_array( learn_press_get_post_type( $post_id ), $post_types ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_id = false;\n+\n+\t\tif ( false !== ( $courses = LP_Object_Cache::get( 'item-course-ids', 'learn-press' ) ) ) {\n+\n+\t\t\tforeach ( $courses as $course_id => $items ) {\n+\t\t\t\tif ( in_array( $post_id, $items ) ) {\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\t$course_id = false;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$courses = array();\n+\t\t}\n+\n+\t\tif ( false === $course_id ) {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT section.section_course_id\n+\t\t\t\tFROM {$wpdb->learnpress_sections} AS section\n+\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} AS item\n+\t\t\t\tON item.section_id = section.section_id\n+\t\t\t\tWHERE item.item_id = %d\n+\t\t\t\tLIMIT 1\n+\t\t\t\t\",\n+\t\t\t\t$post_id\n+\t\t\t);\n+\n+\t\t\t$course_id = apply_filters( 'learn-press\u002Fitem-course-id', absint( $wpdb->get_var( $query ) ), $post_id );\n+\n+\t\t\tif ( $course = learn_press_get_course( $course_id ) ) {\n+\t\t\t\t$courses[ $course_id ] = $course->get_items();\n+\t\t\t}\n+\n+\t\t\tif ( empty( $courses[ $course_id ] ) ) {\n+\t\t\t\t$courses[ $course_id ] = array();\n+\t\t\t}\n+\n+\t\t\tif ( ! in_array( $post_id, $courses[ $course_id ] ) ) {\n+\t\t\t\t$courses[ $course_id ][] = $post_id;\n+\t\t\t}\n+\t\t\tLP_Object_Cache::set( 'item-course-ids', $courses, 'learn-press' );\n+\n+\t\t}\n+\n+\t\treturn $course_id;*\u002F\n+\t}\n+}\n+\n+\u002F**\n+ * @editor     tungnx | comment code\n+ * @deprecated 3.2.7.5\n+ *\u002F\n+\u002F*function learn_press_item_sample_permalink_html( $return, $post_id, $new_title, $new_slug, $post ) {\n+\tremove_filter( 'get_sample_permalink_html', 'learn_press_item_sample_permalink_html', 10 );\n+\n+\t$return = sprintf(\n+\t\t'\u003Ca class=\"button\" href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\n+\t\tlearn_press_get_preview_url( $post_id ),\n+\t\t__( 'Preview', 'learnpress' )\n+\t);\n+\n+\t$return .= '\u003Cspan>' . __( 'Permalink only available if the item is already assigned to a course.', 'learnpress' ) . '\u003C\u002Fspan>';\n+\n+\treturn sprintf( '\u003Cdiv id=\"learn-press-box-edit-slug\">%s\u003C\u002Fdiv>', $return );\n+}*\u002F\n+\n+\u002F**\n+ * @editor     tungnx | comment code\n+ * @deprecated 3.2.7.5\n+ *\u002F\n+\u002F*if ( ! function_exists( 'learn_press_item_sample_permalink' ) ) {\n+\n+\tfunction learn_press_item_sample_permalink( $permalink, $post_id, $title, $name, $post ) {\n+\t\tif ( ! in_array( $post->post_type, learn_press_course_get_support_item_types( true ) ) ) {\n+\t\t\treturn $permalink;\n+\t\t}\n+\n+\t\t$permalink[0] = str_replace( $post->post_name, '%pagename%', $permalink[0] );\n+\n+\t\tif ( ! preg_match( '~^https?:\u002F\u002F~', $permalink[0] ) ) {\n+\t\t\tadd_filter( 'get_sample_permalink_html', 'learn_press_item_sample_permalink_html', 10, 5 );\n+\t\t}\n+\n+\t\treturn $permalink;\n+\t}\n+\n+}*\u002F\n+\u002F\u002Fadd_filter( 'get_sample_permalink', 'learn_press_item_sample_permalink', 10, 5 );\n+\n+\u002F**\n+ * Get preview url for LP post type.\n+ *\n+ * @param int $post_id\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ *\n+ *\u002F\n+function learn_press_get_preview_url( $post_id ) {\n+\treturn esc_url_raw(\n+\t\tadd_query_arg(\n+\t\t\tarray(\n+\t\t\t\t'lp-preview' => $post_id,\n+\t\t\t\t'_wpnonce'   => wp_create_nonce( 'lp-preview' ),\n+\t\t\t),\n+\t\t\ttrailingslashit( get_home_url() )\n+\t\t)\n+\t);\n+}\n+\n+if ( ! function_exists( 'learn_press_course_item_type_link' ) ) {\n+\t\u002F**\n+\t * Add filter to WP custom post-type-link to edit the link of item\n+\t * with the link of it's course.\n+\t *\n+\t * @updated    12 Nov 2018\n+\t *\n+\t * @param string $post_link\n+\t * @param WP_Post $post\n+\t * @param bool $leavename\n+\t * @param bool $sample\n+\t *\n+\t * @editor     tungnx | comment code\n+\t * @return string\n+\t * @deprecated 3.2.7.4\n+\t *\u002F\n+\t\u002F*function learn_press_course_item_type_link( $post_link, $post, $leavename, $sample ) {\n+\n+\t\tremove_filter( 'post_type_link', 'learn_press_course_item_type_link', 10 );\n+\n+\t\t$course = learn_press_get_course();\n+\n+\t\tif ( ! $course && ( $course_id = learn_press_get_item_course( $post->ID ) ) ) {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t}\n+\n+\t\tif ( learn_press_is_support_course_item_type( $post->post_type ) ) {\n+\t\t\t\u002F\u002F Check elementor installed and activated\n+\t\t\tif ( did_action( 'elementor\u002Floaded' ) ) {\n+\t\t\t\t\u002F\u002F do stuff for edit mode\n+\t\t\t\tif ( ! Elementor\\Plugin::$instance->editor->is_edit_mode() ) {\n+\t\t\t\t\tif ( $course ) {\n+\t\t\t\t\t\t$post_link = $course->get_item_link( $post->ID );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$post_link = learn_press_get_sample_link_course_item_url( $post->ID );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( $course ) {\n+\t\t\t\t\t$post_link = $course->get_item_link( $post->ID );\n+\t\t\t\t} else {\n+\t\t\t\t\t$post_link = learn_press_get_sample_link_course_item_url( $post->ID );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tadd_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );\n+\n+\t\treturn $post_link;\n+\t}*\u002F\n+}\n+\u002F\u002Fadd_filter( 'post_type_link', 'learn_press_course_item_type_link', 10, 4 );\n+\n+\u002F**\n+ * Get grade course type can translate\n+ *\n+ * @param string $grade\n+ * @param bool $echo\n+ *\n+ * @return mixed|void\n+ *\u002F\n+function learn_press_course_grade_html( string $grade = '', bool $echo = true ) {\n+\tswitch ( $grade ) {\n+\t\tcase 'passed':\n+\t\t\t$html = __( 'Passed', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'failed':\n+\t\t\t$html = __( 'Failed', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'in-progress':\n+\t\t\t$html = __( 'In Progress', 'learnpress' );\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t$html = $grade;\n+\t\t\tbreak;\n+\t}\n+\n+\t\u002F\u002F @since 3.0.0\n+\t$html = apply_filters( 'learn-press\u002Fcourse\u002Fgrade-html', $html, $grade );\n+\n+\tif ( $echo ) {\n+\t\techo wp_kses_post( $html );\n+\t}\n+\n+\treturn $html;\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+\u002F*function learn_press_get_course_results_tooltip( $course_id ) {\n+\t$metabox = LP_Course_Post_Type::assessment_meta_box();\n+\t$options = $metabox['fields'][0]['options'];\n+\t$cr      = get_post_meta( $course_id, '_lp_course_result', true );\n+\t$tooltip = ! empty( $options[ $cr ] ) ? $options[ $cr ] : false;\n+\tif ( $tooltip ) {\n+\t\tif ( preg_match_all( '~\u003Cp.*>(.*)\u003C\\\u002Fp>~im', $tooltip, $matches ) ) {\n+\t\t\t$tooltip = $matches[1][0];\n+\t\t}\n+\t}\n+\n+\treturn $tooltip;\n+}*\u002F\n+\n+function learn_press_course_passing_condition( $value, $format, $course_id ) {\n+\t$course    = learn_press_get_course( $course_id );\n+\t$quiz_id   = $course->get_final_quiz();\n+\t$evalution = get_post_meta( $course_id, '_lp_course_result', true );\n+\n+\tif ( $quiz_id && $evalution === 'evaluate_final_quiz' ) {\n+\t\t$quiz  = learn_press_get_quiz( $quiz_id );\n+\t\t$value = absint( $quiz->get_passing_grade() );\n+\n+\t\tif ( $format ) {\n+\t\t\t$value = \"{$value}%\";\n+\t\t}\n+\t}\n+\n+\treturn $value;\n+}\n+\n+add_filter( 'learn-press\u002Fcourse-passing-condition', 'learn_press_course_passing_condition', 10, 3 );\n+\n+\u002F**\n+ * @deprecated 4.2.7.4\n+ *\u002F\n+function learn_press_remove_query_var_enrolled_course( $redirect ) {\n+\treturn esc_url_raw( remove_query_arg( 'enroll-course', $redirect ) );\n+}\n+\n+\u002F\u002Fadd_filter( 'learn-press\u002Fenroll-course-redirect', 'learn_press_remove_query_var_enrolled_course' );\n+\n+\u002F**\n+ * Mark the user to know if they have just logged in\n+ * for some purpose.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\u002F*function learn_press_mark_user_just_logged_in() {\n+\tLearnPress::instance()->session->set( 'user_just_logged_in', 'yes' );\n+}\n+add_action( 'wp_login', 'learn_press_mark_user_just_logged_in' );*\u002F\n+\n+function learn_press_translate_course_result_required( $course ) {\n+\tif ( ! $course ) {\n+\t\treturn '';\n+\t}\n+\n+\t$passing_condition = $course->get_passing_condition();\n+\n+\t$evaluate_type = $course->get_data( 'course_result', 'evaluate_lesson' );\n+\tswitch ( $evaluate_type ) {\n+\t\tcase 'evaluate_lesson':\n+\t\t\t$label = esc_html__( 'completed lessons per the total number of lessons.', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'evaluate_quiz':\n+\t\t\t$label = esc_html__( 'passed quizzes per the total number of quizzes.', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'evaluate_final_quiz':\n+\t\t\t$label = esc_html__( 'Final Quiz', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'evaluate_questions':\n+\t\t\t$label = esc_html__( 'correct answers per the total number of questions.', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'evaluate_mark':\n+\t\t\t$label = esc_html__( 'score achieved per the total score of the questions.', 'learnpress' );\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t$label = apply_filters( 'learnpress\u002Fmessage\u002Fevaluate\u002F' . $evaluate_type, $evaluate_type );\n+\t\t\tbreak;\n+\t}\n+\n+\treturn apply_filters(\n+\t\t'learnpress\u002Fmessage\u002Fevaluate',\n+\t\twp_sprintf( '%1$s %2$s %3$s', __( 'Require', 'learnpress' ), $passing_condition . '%', $label )\n+\t);\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc: CourseBuilder\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-lesson-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-lesson-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-lesson-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-lesson-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,152 +1,152 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Lesson_CURD\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FCURD\r\n- * @since   3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Lesson_CURD' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Lesson_CURD\r\n-\t *\u002F\r\n-\tclass LP_Lesson_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create lesson, with default meta.\r\n-\t\t *\r\n-\t\t * @param $args\r\n-\t\t *\r\n-\t\t * @return int|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function create( &$args ) {\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'      => '',\r\n-\t\t\t\t\t'status'  => 'publish',\r\n-\t\t\t\t\t'title'   => esc_html__( 'New Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'content' => '',\r\n-\t\t\t\t\t'author'  => learn_press_get_current_user_id(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$lesson_id = wp_insert_post(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ID'           => $args['id'],\r\n-\t\t\t\t\t'post_type'    => LP_LESSON_CPT,\r\n-\t\t\t\t\t'post_status'  => $args['status'],\r\n-\t\t\t\t\t'post_title'   => $args['title'],\r\n-\t\t\t\t\t'post_content' => $args['content'],\r\n-\t\t\t\t\t'post_author'  => $args['author'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $lesson_id ) {\r\n-\t\t\t\t\u002F\u002F add default meta for new lesson\r\n-\t\t\t\t$default_meta = LP_Lesson::get_default_meta();\r\n-\r\n-\t\t\t\tif ( is_array( $default_meta ) ) {\r\n-\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\r\n-\t\t\t\t\t\tupdate_post_meta( $lesson_id, '_lp_' . $key, $value );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $lesson_id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param object $lesson\r\n-\t\t *\u002F\r\n-\t\tpublic function update( &$lesson ) {\r\n-\t\t\t\u002F\u002F TODO: Implement update() method.\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete lesson.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param object $lesson_id\r\n-\t\t *\u002F\r\n-\t\tpublic function delete( &$lesson_id ) {\r\n-\t\t\t\u002F\u002F course curd\r\n-\t\t\t$curd = new LP_Course_CURD();\r\n-\r\n-\t\t\t\u002F\u002F remove lesson from course items\r\n-\t\t\t$curd->remove_item( $lesson_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate lesson.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $lesson_id\r\n-\t\t * @param array     $args\r\n-\t\t *\r\n-\t\t * @return mixed|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function duplicate( &$lesson_id, $args = array() ) {\r\n-\t\t\tif ( ! $lesson_id ) {\r\n-\t\t\t\treturn new WP_Error( '0', 'Oops! ID not found' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( get_post_type( $lesson_id ) != LP_LESSON_CPT ) {\r\n-\t\t\t\treturn new WP_Error( '1', 'Op! The lesson does not exist' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id = $args['meta_input']['_lp_user'] ?? get_current_user_id();\r\n-\t\t\t\u002F\u002F ensure that user can create lesson\r\n-\t\t\tif ( ! user_can( $user_id, 'edit_posts' ) ) {\r\n-\t\t\t\treturn new WP_Error( '2', 'Sorry! You don\\'t have permission to duplicate this lesson' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F duplicate lesson\r\n-\t\t\t$new_lesson_id = learn_press_duplicate_post( $lesson_id, $args );\r\n-\r\n-\t\t\tif ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {\r\n-\t\t\t\treturn new WP_Error( '3', 'Sorry! Failed to duplicate lesson!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $lesson_id, $new_lesson_id, $args );\r\n-\t\t\treturn $new_lesson_id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load lesson data.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param object $lesson\r\n-\t\t *\r\n-\t\t * @return object\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load( &$lesson ) {\r\n-\t\t\t\u002F\u002F lesson id\r\n-\t\t\t$id = $lesson->get_id();\r\n-\r\n-\t\t\tif ( ! $id || get_post_type( $id ) !== LP_LESSON_CPT ) {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Invalid lesson with ID \"%d\".', 'learnpress' ), $id ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lesson->set_data(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'preview' => get_post_meta( $id, '_lp_preview', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $lesson;\r\n-\t\t}\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Lesson_CURD\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FCURD\n+ * @since   3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Lesson_CURD' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Lesson_CURD\n+\t *\u002F\n+\tclass LP_Lesson_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\n+\t\t\u002F**\n+\t\t * Create lesson, with default meta.\n+\t\t *\n+\t\t * @param $args\n+\t\t *\n+\t\t * @return int|WP_Error\n+\t\t *\u002F\n+\t\tpublic function create( &$args ) {\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'      => '',\n+\t\t\t\t\t'status'  => 'publish',\n+\t\t\t\t\t'title'   => esc_html__( 'New Lesson', 'learnpress' ),\n+\t\t\t\t\t'content' => '',\n+\t\t\t\t\t'author'  => learn_press_get_current_user_id(),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$lesson_id = wp_insert_post(\n+\t\t\t\tarray(\n+\t\t\t\t\t'ID'           => $args['id'],\n+\t\t\t\t\t'post_type'    => LP_LESSON_CPT,\n+\t\t\t\t\t'post_status'  => $args['status'],\n+\t\t\t\t\t'post_title'   => $args['title'],\n+\t\t\t\t\t'post_content' => $args['content'],\n+\t\t\t\t\t'post_author'  => $args['author'],\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $lesson_id ) {\n+\t\t\t\t\u002F\u002F add default meta for new lesson\n+\t\t\t\t$default_meta = LP_Lesson::get_default_meta();\n+\n+\t\t\t\tif ( is_array( $default_meta ) ) {\n+\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\n+\t\t\t\t\t\tupdate_post_meta( $lesson_id, '_lp_' . $key, $value );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $lesson_id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param object $lesson\n+\t\t *\u002F\n+\t\tpublic function update( &$lesson ) {\n+\t\t\t\u002F\u002F TODO: Implement update() method.\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete lesson.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param object $lesson_id\n+\t\t *\u002F\n+\t\tpublic function delete( &$lesson_id ) {\n+\t\t\t\u002F\u002F course curd\n+\t\t\t$curd = new LP_Course_CURD();\n+\n+\t\t\t\u002F\u002F remove lesson from course items\n+\t\t\t$curd->remove_item( $lesson_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate lesson.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $lesson_id\n+\t\t * @param array     $args\n+\t\t *\n+\t\t * @return mixed|WP_Error\n+\t\t *\u002F\n+\t\tpublic function duplicate( &$lesson_id, $args = array() ) {\n+\t\t\tif ( ! $lesson_id ) {\n+\t\t\t\treturn new WP_Error( '0', 'Oops! ID not found' );\n+\t\t\t}\n+\n+\t\t\tif ( get_post_type( $lesson_id ) != LP_LESSON_CPT ) {\n+\t\t\t\treturn new WP_Error( '1', 'Op! The lesson does not exist' );\n+\t\t\t}\n+\n+\t\t\t$user_id = $args['meta_input']['_lp_user'] ?? get_current_user_id();\n+\t\t\t\u002F\u002F ensure that user can create lesson\n+\t\t\tif ( ! user_can( $user_id, 'edit_posts' ) ) {\n+\t\t\t\treturn new WP_Error( '2', 'Sorry! You don\\'t have permission to duplicate this lesson' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F duplicate lesson\n+\t\t\t$new_lesson_id = learn_press_duplicate_post( $lesson_id, $args );\n+\n+\t\t\tif ( ! $new_lesson_id || is_wp_error( $new_lesson_id ) ) {\n+\t\t\t\treturn new WP_Error( '3', 'Sorry! Failed to duplicate lesson!' );\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $lesson_id, $new_lesson_id, $args );\n+\t\t\treturn $new_lesson_id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load lesson data.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param object $lesson\n+\t\t *\n+\t\t * @return object\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load( &$lesson ) {\n+\t\t\t\u002F\u002F lesson id\n+\t\t\t$id = $lesson->get_id();\n+\n+\t\t\tif ( ! $id || get_post_type( $id ) !== LP_LESSON_CPT ) {\n+\t\t\t\tthrow new Exception( sprintf( __( 'Invalid lesson with ID \"%d\".', 'learnpress' ), $id ) );\n+\t\t\t}\n+\n+\t\t\t$lesson->set_data(\n+\t\t\t\tarray(\n+\t\t\t\t\t'preview' => get_post_meta( $id, '_lp_preview', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $lesson;\n+\t\t}\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-order-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-order-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-order-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-order-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,618 +1,618 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Order_CURD\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Order_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_meta_type = 'post';\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_meta_keys = array();\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function create( &$order ) {\r\n-\t\tif ( ! $order instanceof LP_Order ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$order->set_order_date( time() );\r\n-\t\t$order->set_order_key( learn_press_generate_order_key() );\r\n-\t\t$status  = $this->format_status_save_db( $order );\r\n-\t\t$lp_time = new LP_Datetime( time() );\r\n-\r\n-\t\t$order_data = array(\r\n-\t\t\t'post_author'   => get_current_user_id(),\r\n-\t\t\t'post_parent'   => $order->get_parent_id(),\r\n-\t\t\t'post_type'     => LP_ORDER_CPT,\r\n-\t\t\t'post_status'   => $status,\r\n-\t\t\t'ping_status'   => 'closed',\r\n-\t\t\t'post_title'    => $order->get_title(),\r\n-\t\t\t'post_date'     => $lp_time->toSql( true ),\r\n-\t\t\t'post_date_gmt' => $lp_time->toSql(),\r\n-\t\t\t'post_excerpt'  => $order->get_customer_note(),\r\n-\t\t);\r\n-\r\n-\t\t$order_data = apply_filters( 'learn-press\u002Forder\u002Fnew-data', $order_data );\r\n-\r\n-\t\t$id = wp_insert_post( $order_data, true );\r\n-\t\tif ( $id && ! is_wp_error( $id ) ) {\r\n-\t\t\t$order->set_id( $id );\r\n-\t\t\t\u002F\u002F Update title oder when order is have just create.\r\n-\t\t\twp_update_post(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ID'         => $id,\r\n-\t\t\t\t\t'post_title' => learn_press_transaction_order_number( $id ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$this->_updates( $order );\r\n-\t\t}\r\n-\r\n-\t\treturn $id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update order.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return int\r\n-\t * @Todo tungnx - check method\r\n-\t *\u002F\r\n-\tpublic function update( &$order ) {\r\n-\t\tif ( ! $order instanceof LP_Order ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$status    = $this->format_status_save_db( $order );\r\n-\t\t$post_data = array(\r\n-\t\t\t\u002F\u002F'post_title'    => $order->get_order_number(),\r\n-\t\t\t'post_date'     => $order->get_order_date( 'edit' )->toSql(),\r\n-\t\t\t'post_date_gmt' => $order->get_order_date( 'edit' )->toSql( false ),\r\n-\t\t\t'post_status'   => $status,\r\n-\t\t\t\u002F\u002F'post_parent'   => $order->get_parent_id(),\r\n-\t\t);\r\n-\t\t$post_data = apply_filters( 'learn-press\u002Forder\u002Fupdate-data', $post_data, $order->get_id() );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * When updating this object, to prevent infinite loops, use $wpdb\r\n-\t\t * to update data, since wp_update_post spawns more calls to the\r\n-\t\t * save_post action.\r\n-\t\t *\r\n-\t\t * This ensures hooks are fired by either WP itself (admin screen save),\r\n-\t\t * or an update purely from CRUD.\r\n-\t\t *\u002F\r\n-\t\tif ( doing_action( 'save_post' ) ) {\r\n-\t\t\t$GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $order->get_id() ) );\r\n-\t\t\tclean_post_cache( $order->get_id() );\r\n-\t\t} else {\r\n-\t\t\twp_update_post( array_merge( array( 'ID' => $order->get_id() ), $post_data ) );\r\n-\t\t}\r\n-\t\t$this->_updates( $order );\r\n-\r\n-\t\treturn $order->get_id();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Format status of LP Order before save DB.\r\n-\t *\r\n-\t * @param LP_Order $lp_order\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function format_status_save_db( LP_Order $lp_order ): string {\r\n-\t\t$status = ! empty( $lp_order->get_status() ) ? $lp_order->get_status() : LP_ORDER_PENDING;\r\n-\t\tif ( $status === LP_ORDER_TRASH || $status === 'auto-draft' ) {\r\n-\t\t\treturn $status;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! preg_match( '\u002F^lp-\u002F', $status ) ) {\r\n-\t\t\t$status = 'lp-' . $status;\r\n-\t\t}\r\n-\r\n-\t\treturn $status;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\u002F\r\n-\tpublic function _updates( &$order ) {\r\n-\t\t$this->update_post_meta( $order );\r\n-\t\t$order->update_meta();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\u002F\r\n-\tpublic function update_post_meta( $order ) {\r\n-\t\t$meta_data = array(\r\n-\t\t\t'_order_currency'       => $order->get_currency(),\r\n-\t\t\t'_prices_include_tax'   => 'no',\r\n-\t\t\t'_user_id'              => $order->get_user_id(),\r\n-\t\t\t'_order_subtotal'       => $order->get_subtotal(),\r\n-\t\t\t'_order_total'          => $order->get_total(),\r\n-\t\t\t'_order_key'            => $order->get_order_key(),\r\n-\t\t\t'_payment_method'       => $order->get_data( 'payment_method', '' ),\r\n-\t\t\t'_payment_method_title' => $order->get_payment_method_title(),\r\n-\t\t\t'_user_ip_address'      => $order->get_user_ip_address(),\r\n-\t\t\t'_user_agent'           => $order->get_user_agent(),\r\n-\t\t\t'_order_version'        => '3.0.0',\r\n-\t\t\t'_created_via'          => $order->get_created_via(),\r\n-\t\t);\r\n-\r\n-\t\t$checkout_email = $order->get_checkout_email();\r\n-\t\tif ( $checkout_email ) {\r\n-\t\t\t$meta_data['_checkout_email'] = $checkout_email;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $meta_data as $key => $value ) {\r\n-\t\t\tupdate_post_meta( $order->get_id(), $key, $value );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Read order's items\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\told function - comment by tungnx\r\n-\tpublic function read_items( $order ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$screen = function_exists('get_current_screen')? get_current_screen():null;\r\n-\t\t$query = $wpdb->prepare( \"\r\n-\t\t\tSELECT order_item_id as id, order_item_name as name\r\n-\t\t\t\t, oim.meta_value as `course_id`\r\n-\t\t\t\t# , oim2.meta_value as `quantity`\r\n-\t\t\t\t# , oim3.meta_value as `total`\r\n-\t\t\tFROM {$wpdb->learnpress_order_items} oi\r\n-\t\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key='_course_id'\r\n-\t\t\t\t# INNER JOIN {$wpdb->learnpress_order_itemmeta} oim2 ON oi.order_item_id = oim2.learnpress_order_item_id AND oim2.meta_key='_quantity'\r\n-\t\t\t\t# INNER JOIN {$wpdb->learnpress_order_itemmeta} oim3 ON oi.order_item_id = oim3.learnpress_order_item_id AND oim3.meta_key='_total'\r\n-\t\t\tWHERE order_id = %d\r\n-\t\t\", $order->get_id() );\r\n-\r\n-\t\t$_items = $wpdb->get_results( $query );\r\n-\t\t$items  = array();\r\n-\t\t\u002F\u002F Loop items\r\n-\t\tif ( $_items ) {\r\n-\t\t\tforeach ( $_items as $item ) {\r\n-\t\t\t\t$item = (array) $item;\r\n-\t\t\t\t$items[$item['id']] = $item;\r\n-\t\t\t\tif(!$screen || $screen->id !== 'edit-lp_order'){\r\n-\t\t\t\t\t$this->get_item_meta( $item );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! empty( $item['course_id'] ) ) {\r\n-\t\t\t\t\t$items[ $item['id'] ] = $item;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\r\n-\t} *\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get order's items\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @author tungnx\r\n-\t * Todo: review to rewrite.\r\n-\t *\u002F\r\n-\tpublic function read_items( $order ) {\r\n-\t\t$key   = \"order\u002F{$order->get_id()}\u002F{$order->get_status()}\u002Fitems\";\r\n-\t\t$items = LP_Cache::cache_load_first( 'get', $key );\r\n-\t\tif ( false !== $items ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$table_order_items     = $wpdb->learnpress_order_items;\r\n-\t\t$table_order_item_meta = $wpdb->learnpress_order_itemmeta;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"SELECT o_item.order_item_id, o_item.order_item_name, o_itemmeta.meta_value, o_itemmeta.meta_key\r\n-\t\t\t\t\tFrom $table_order_items as o_item\r\n-\t\t\t\t\tINNER JOIN $table_order_item_meta as o_itemmeta\r\n-\t\t\t\t\tON o_item.order_item_id = o_itemmeta.learnpress_order_item_id\r\n-\t\t\t\t\tWHERE o_item.order_id = %d\r\n-\t\t\t\t\tLIMIT %d\",\r\n-\t\t\t$order->get_id(),\r\n-\t\t\t4 * 50\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Todo: write query to function and call ajax load more\r\n-\t\t$order_item_metas = $wpdb->get_results( $query, OBJECT );\r\n-\r\n-\t\t$items = array();\r\n-\r\n-\t\tforeach ( $order_item_metas as $order_item_meta ) {\r\n-\t\t\tif ( ! array_key_exists( $order_item_meta->order_item_id, $items ) ) {\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]         = array();\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]['id']   = $order_item_meta->order_item_id;\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]['name'] = isset( $order_item_meta->order_item_name ) ? $order_item_meta->order_item_name : '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $order_item_meta->meta_key ) {\r\n-\t\t\t\tcase '_course_id':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['course_id'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_quantity':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['quantity'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_subtotal':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['subtotal'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_total':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['total'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ][ $order_item_meta->meta_key ] = $order_item_meta->meta_value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tLP_Cache::cache_load_first( 'set', $key, $items );\r\n-\r\n-\t\treturn $items; \u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get order's items\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param array    $filter\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function read_items_filter( $order, $filter = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$p      = $filter['p'];\r\n-\t\t$limit  = $filter['limit'] * 4; \u002F\u002F 4 fields on 1 item\r\n-\t\t$offset = $p * $limit;\r\n-\r\n-\t\t$table_order_items     = $wpdb->learnpress_order_items;\r\n-\t\t$table_order_item_meta = $wpdb->learnpress_order_itemmeta;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"SELECT o_item.order_item_id, o_item.order_item_name, o_itemmeta.meta_value, o_itemmeta.meta_key\r\n-\t\t\t\t\tFrom $table_order_items as o_item\r\n-\t\t\t\t\tINNER JOIN $table_order_item_meta as o_itemmeta\r\n-\t\t\t\t\tON o_item.order_item_id = o_itemmeta.learnpress_order_item_id\r\n-\t\t\t\t\tWHERE o_item.order_id = %d\r\n-\t\t\t\t\tLIMIT %d, %d\",\r\n-\t\t\t$order->get_id(),\r\n-\t\t\t$offset,\r\n-\t\t\t$limit\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Todo: write query to function and call ajax load more\r\n-\t\t$order_item_metas = $wpdb->get_results( $query, OBJECT );\r\n-\r\n-\t\t$items = array();\r\n-\r\n-\t\tforeach ( $order_item_metas as $order_item_meta ) {\r\n-\t\t\tif ( ! array_key_exists( $order_item_meta->order_item_id, $items ) ) {\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]         = array();\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]['id']   = $order_item_meta->order_item_id;\r\n-\t\t\t\t$items[ $order_item_meta->order_item_id ]['name'] = isset( $order_item_meta->order_item_name ) ? $order_item_meta->order_item_name : '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $order_item_meta->meta_key ) {\r\n-\t\t\t\tcase '_course_id':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['course_id'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_quantity':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['quantity'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_subtotal':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['subtotal'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase '_total':\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['total'] = $order_item_meta->meta_value;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$items[ $order_item_meta->order_item_id ][ $order_item_meta->meta_key ] = $order_item_meta->meta_value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items; \u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\r\n-\t}\r\n-\r\n-\t\u002F*public function getTotalItem() {\r\n-\t}*\u002F\r\n-\r\n-\t\u002F*public function get_item_meta( &$item ) {\r\n-\t\t$metas = get_metadata( 'learnpress_order_item', $item['id'] );\r\n-\t\tif ( $metas ) {\r\n-\t\t\tforeach ( $metas as $k => $v ) {\r\n-\t\t\t\t$item[ preg_replace( '!^_!', '', $k ) ] = LP_Helper::maybe_unserialize( $v[0] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\tpublic function delete( &$object ) {\r\n-\t\t\u002F\u002F TODO: Implement delete() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return LP_Order\r\n-\t * @deprecated 4.2.3.5\r\n-\t *\u002F\r\n-\t\u002F*public function cln( $order ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\r\n-\t\t$cloned = clone $order;\r\n-\r\n-\t\t$cloned->set_id( 0 );\r\n-\t\t$cloned->save();\r\n-\r\n-\t\t$meta_keys = array(\r\n-\t\t\t'_order_currency',\r\n-\t\t\t'_prices_include_tax',\r\n-\t\t\t'_user_ip_address',\r\n-\t\t\t'_user_agent',\r\n-\t\t\t'_order_subtotal',\r\n-\t\t\t'_order_total',\r\n-\t\t\t'_order_key',\r\n-\t\t\t'_payment_method',\r\n-\t\t\t'_payment_method_title',\r\n-\t\t\t'_order_version',\r\n-\t\t\t'_created_via',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $meta_keys as $key ) {\r\n-\t\t\tupdate_post_meta( $cloned->get_id(), $key, get_post_meta( $order->get_id(), $key, true ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->cln_items( $order->get_id(), $cloned->get_id() );\r\n-\r\n-\t\treturn $cloned;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Clone items from an order to another\r\n-\t *\r\n-\t * @param int $from\r\n-\t * @param int $to\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @deprecated 4.2.3.5\r\n-\t *\u002F\r\n-\t\u002F*public function cln_items( $from, $to ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\t$order = learn_press_get_order( $from );\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_order_items} oi\r\n-\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id\r\n-\t\t\tWHERE order_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$from\r\n-\t\t);\r\n-\r\n-\t\t$items = $order->get_items();\r\n-\t\tif ( $items ) {\r\n-\t\t\t$to_order = learn_press_get_order( $to );\r\n-\t\t\tif ( ! $to_order ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$to_order->remove_order_items();\r\n-\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_order_items,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'order_item_name' => $item['name'],\r\n-\t\t\t\t\t\t'order_id'        => $to,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t\t$learnpress_order_item_id = $wpdb->insert_id;\r\n-\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT *\r\n-\t\t\t\t\tFROM {$wpdb->learnpress_order_itemmeta}\r\n-\t\t\t\t\tWHERE learnpress_order_item_id = %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t\t$item['id']\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( $metas = $wpdb->get_results( $query ) ) {\r\n-\t\t\t\t\tforeach ( $metas as $meta ) {\r\n-\t\t\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t\t\t$wpdb->learnpress_order_itemmeta,\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'learnpress_order_item_id' => $learnpress_order_item_id,\r\n-\t\t\t\t\t\t\t\t'meta_key'                 => $meta->meta_key,\r\n-\t\t\t\t\t\t\t\t'meta_value'               => $meta->meta_value,\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$this->read_items( $order );\r\n-\r\n-\t\treturn true;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Load order data\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function load( &$order ) {\r\n-\t\t$the_id = $order->get_id();\r\n-\t\tif ( ! $the_id || LP_ORDER_CPT !== learn_press_get_post_type( $the_id ) ) {\r\n-\t\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Invalid order with ID \"%d\".', 'learnpress' ), $the_id ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $the_id );\r\n-\t\tif ( $post ) {\r\n-\t\t\t$_users = get_post_meta( $order->get_id(), '_user_id' );\r\n-\t\t\tif ( $_users ) {\r\n-\t\t\t\tsettype( $_users, 'array' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$_users = array();\r\n-\t\t\t}\r\n-\t\t\tif ( sizeof( $_users ) > 1 ) {\r\n-\t\t\t\t$users = $_users;\r\n-\t\t\t} elseif ( sizeof( $_users ) == 1 ) {\r\n-\t\t\t\t$users = $_users[0];\r\n-\t\t\t} else {\r\n-\t\t\t\t$users = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order->set_data_via_methods(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'user_id'         => $users,\r\n-\t\t\t\t\t'order_date'      => new LP_Datetime( $post->post_date ),\r\n-\t\t\t\t\t'date_modified'   => new LP_Datetime( $post->post_modified ),\r\n-\t\t\t\t\t'status'          => str_replace( 'lp-', '', $post->post_status ),\r\n-\t\t\t\t\t'parent_id'       => $post->post_parent,\r\n-\t\t\t\t\t'created_via'     => get_post_meta( $post->ID, '_created_via', true ),\r\n-\t\t\t\t\t'total'           => get_post_meta( $post->ID, '_order_total', true ),\r\n-\t\t\t\t\t'subtotal'        => get_post_meta( $post->ID, '_order_subtotal', true ),\r\n-\t\t\t\t\t'order_key'       => get_post_meta( $post->ID, '_order_key', true ),\r\n-\t\t\t\t\t'user_ip_address' => get_post_meta( $post->ID, '_user_ip_address', true ),\r\n-\t\t\t\t\t'user_agent'      => get_post_meta( $post->ID, '_user_agent', true ),\r\n-\t\t\t\t\t'checkout_email'  => get_post_meta( $post->ID, '_checkout_email', true ),\r\n-\t\t\t\t\t'currency'        => get_post_meta( $post->ID, '_order_currency', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$order->set_data( 'order_subtotal', get_post_meta( $post->ID, '_order_subtotal', true ) );\r\n-\t\t\t$order->set_data( 'order_total', get_post_meta( $post->ID, '_order_total', true ) );\r\n-\t\t\t$order->set_data( 'payment_method', get_post_meta( $post->ID, '_payment_method', true ) );\r\n-\t\t\t$order->set_data( 'payment_method_title', get_post_meta( $post->ID, '_payment_method_title', true ) );\r\n-\t\t\t\u002F\u002F$order->get_items();\r\n-\t\t\t$order->read_meta();\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Recover an order checked out by Guest for an user.\r\n-\t *\r\n-\t * @param string $order_key\r\n-\t * @param int    $user_id\r\n-\t *\r\n-\t * @return bool|LP_Order|WP_Error\r\n-\t *\u002F\r\n-\tpublic function recover( $order_key, $user_id ) {\r\n-\t\ttry {\r\n-\t\t\t$order = $this->get_order_by_key( $order_key );\r\n-\r\n-\t\t\t\u002F\u002F Validations\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid Order key.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $order->is_guest() ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Order key is already assigned.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\tif ( ! $user || $user instanceof LP_User_Guest ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid User!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $order->get_checkout_email() !== $user->get_email() ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid order key with Email!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set user to order and update\r\n-\t\t\t$order->set_user_id( $user_id );\r\n-\t\t\t$order->save();\r\n-\r\n-\t\t\t\u002F\u002F Update user_id of lp_user_item\r\n-\t\t\tif ( $order->is_completed() ) {\r\n-\t\t\t\t$user_item_db   = LP_User_Items_DB::getInstance();\r\n-\t\t\t\t$filter         = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter->ref_id = $order->get_id();\r\n-\t\t\t\t$filter->limit  = -1;\r\n-\t\t\t\t$userItemModels = $user_item_db->get_user_items( $filter );\r\n-\t\t\t\tif ( ! empty( $userItemModels ) ) {\r\n-\t\t\t\t\tforeach ( $userItemModels as $userItemModelObj ) {\r\n-\t\t\t\t\t\t$userItemModel          = new UserCourseModel( $userItemModelObj );\r\n-\t\t\t\t\t\t$userItemModel->user_id = $user_id;\r\n-\t\t\t\t\t\t$userItemModel->save();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Trigger action\r\n-\t\t\tdo_action( 'learn-press\u002Forder\u002Frecovered-successful', $order->get_id(), $user_id );\r\n-\t\t} catch ( Exception $ex ) {\r\n-\t\t\treturn new WP_Error( 'lp_order_recover_error', $ex->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retrieve an order by order key.\r\n-\t *\r\n-\t * @param string $order_key\r\n-\t *\r\n-\t * @return bool|LP_Order\r\n-\t *\u002F\r\n-\tpublic function get_order_by_key( $order_key ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT ID\r\n-\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\tINNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = %s AND pm.meta_value = %s\r\n-\t\t\",\r\n-\t\t\t'_order_key',\r\n-\t\t\t$order_key\r\n-\t\t);\r\n-\r\n-\t\t$order    = false;\r\n-\t\t$order_id = $wpdb->get_var( $query );\r\n-\r\n-\t\tif ( $order_id ) {\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\t\t}\r\n-\r\n-\t\treturn $order;\r\n-\t}\r\n-\r\n-\tpublic function duplicate( &$order, $args = array() ) {\r\n-\t\t\u002F\u002F TODO: Implement duplicate() method.\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Order_CURD\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Order_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_meta_type = 'post';\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_meta_keys = array();\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function create( &$order ) {\n+\t\tif ( ! $order instanceof LP_Order ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$order->set_order_date( time() );\n+\t\t$order->set_order_key( learn_press_generate_order_key() );\n+\t\t$status  = $this->format_status_save_db( $order );\n+\t\t$lp_time = new LP_Datetime( time() );\n+\n+\t\t$order_data = array(\n+\t\t\t'post_author'   => get_current_user_id(),\n+\t\t\t'post_parent'   => $order->get_parent_id(),\n+\t\t\t'post_type'     => LP_ORDER_CPT,\n+\t\t\t'post_status'   => $status,\n+\t\t\t'ping_status'   => 'closed',\n+\t\t\t'post_title'    => $order->get_title(),\n+\t\t\t'post_date'     => $lp_time->toSql( true ),\n+\t\t\t'post_date_gmt' => $lp_time->toSql(),\n+\t\t\t'post_excerpt'  => $order->get_customer_note(),\n+\t\t);\n+\n+\t\t$order_data = apply_filters( 'learn-press\u002Forder\u002Fnew-data', $order_data );\n+\n+\t\t$id = wp_insert_post( $order_data, true );\n+\t\tif ( $id && ! is_wp_error( $id ) ) {\n+\t\t\t$order->set_id( $id );\n+\t\t\t\u002F\u002F Update title oder when order is have just create.\n+\t\t\twp_update_post(\n+\t\t\t\tarray(\n+\t\t\t\t\t'ID'         => $id,\n+\t\t\t\t\t'post_title' => learn_press_transaction_order_number( $id ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$this->_updates( $order );\n+\t\t}\n+\n+\t\treturn $id;\n+\t}\n+\n+\t\u002F**\n+\t * Update order.\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return int\n+\t * @Todo tungnx - check method\n+\t *\u002F\n+\tpublic function update( &$order ) {\n+\t\tif ( ! $order instanceof LP_Order ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$status    = $this->format_status_save_db( $order );\n+\t\t$post_data = array(\n+\t\t\t\u002F\u002F'post_title'    => $order->get_order_number(),\n+\t\t\t'post_date'     => $order->get_order_date( 'edit' )->toSql(),\n+\t\t\t'post_date_gmt' => $order->get_order_date( 'edit' )->toSql( false ),\n+\t\t\t'post_status'   => $status,\n+\t\t\t\u002F\u002F'post_parent'   => $order->get_parent_id(),\n+\t\t);\n+\t\t$post_data = apply_filters( 'learn-press\u002Forder\u002Fupdate-data', $post_data, $order->get_id() );\n+\n+\t\t\u002F**\n+\t\t * When updating this object, to prevent infinite loops, use $wpdb\n+\t\t * to update data, since wp_update_post spawns more calls to the\n+\t\t * save_post action.\n+\t\t *\n+\t\t * This ensures hooks are fired by either WP itself (admin screen save),\n+\t\t * or an update purely from CRUD.\n+\t\t *\u002F\n+\t\tif ( doing_action( 'save_post' ) ) {\n+\t\t\t$GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $order->get_id() ) );\n+\t\t\tclean_post_cache( $order->get_id() );\n+\t\t} else {\n+\t\t\twp_update_post( array_merge( array( 'ID' => $order->get_id() ), $post_data ) );\n+\t\t}\n+\t\t$this->_updates( $order );\n+\n+\t\treturn $order->get_id();\n+\t}\n+\n+\t\u002F**\n+\t * Format status of LP Order before save DB.\n+\t *\n+\t * @param LP_Order $lp_order\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function format_status_save_db( LP_Order $lp_order ): string {\n+\t\t$status = ! empty( $lp_order->get_status() ) ? $lp_order->get_status() : LP_ORDER_PENDING;\n+\t\tif ( $status === LP_ORDER_TRASH || $status === 'auto-draft' ) {\n+\t\t\treturn $status;\n+\t\t}\n+\n+\t\tif ( ! preg_match( '\u002F^lp-\u002F', $status ) ) {\n+\t\t\t$status = 'lp-' . $status;\n+\t\t}\n+\n+\t\treturn $status;\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\u002F\n+\tpublic function _updates( &$order ) {\n+\t\t$this->update_post_meta( $order );\n+\t\t$order->update_meta();\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\u002F\n+\tpublic function update_post_meta( $order ) {\n+\t\t$meta_data = array(\n+\t\t\t'_order_currency'       => $order->get_currency(),\n+\t\t\t'_prices_include_tax'   => 'no',\n+\t\t\t'_user_id'              => $order->get_user_id(),\n+\t\t\t'_order_subtotal'       => $order->get_subtotal(),\n+\t\t\t'_order_total'          => $order->get_total(),\n+\t\t\t'_order_key'            => $order->get_order_key(),\n+\t\t\t'_payment_method'       => $order->get_data( 'payment_method', '' ),\n+\t\t\t'_payment_method_title' => $order->get_payment_method_title(),\n+\t\t\t'_user_ip_address'      => $order->get_user_ip_address(),\n+\t\t\t'_user_agent'           => $order->get_user_agent(),\n+\t\t\t'_order_version'        => '3.0.0',\n+\t\t\t'_created_via'          => $order->get_created_via(),\n+\t\t);\n+\n+\t\t$checkout_email = $order->get_checkout_email();\n+\t\tif ( $checkout_email ) {\n+\t\t\t$meta_data['_checkout_email'] = $checkout_email;\n+\t\t}\n+\n+\t\tforeach ( $meta_data as $key => $value ) {\n+\t\t\tupdate_post_meta( $order->get_id(), $key, $value );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Read order's items\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\t\u002F*\n+\told function - comment by tungnx\n+\tpublic function read_items( $order ) {\n+\t\tglobal $wpdb;\n+\t\t$screen = function_exists('get_current_screen')? get_current_screen():null;\n+\t\t$query = $wpdb->prepare( \"\n+\t\t\tSELECT order_item_id as id, order_item_name as name\n+\t\t\t\t, oim.meta_value as `course_id`\n+\t\t\t\t# , oim2.meta_value as `quantity`\n+\t\t\t\t# , oim3.meta_value as `total`\n+\t\t\tFROM {$wpdb->learnpress_order_items} oi\n+\t\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key='_course_id'\n+\t\t\t\t# INNER JOIN {$wpdb->learnpress_order_itemmeta} oim2 ON oi.order_item_id = oim2.learnpress_order_item_id AND oim2.meta_key='_quantity'\n+\t\t\t\t# INNER JOIN {$wpdb->learnpress_order_itemmeta} oim3 ON oi.order_item_id = oim3.learnpress_order_item_id AND oim3.meta_key='_total'\n+\t\t\tWHERE order_id = %d\n+\t\t\", $order->get_id() );\n+\n+\t\t$_items = $wpdb->get_results( $query );\n+\t\t$items  = array();\n+\t\t\u002F\u002F Loop items\n+\t\tif ( $_items ) {\n+\t\t\tforeach ( $_items as $item ) {\n+\t\t\t\t$item = (array) $item;\n+\t\t\t\t$items[$item['id']] = $item;\n+\t\t\t\tif(!$screen || $screen->id !== 'edit-lp_order'){\n+\t\t\t\t\t$this->get_item_meta( $item );\n+\t\t\t\t}\n+\t\t\t\tif ( ! empty( $item['course_id'] ) ) {\n+\t\t\t\t\t$items[ $item['id'] ] = $item;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items;\u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\n+\t} *\u002F\n+\n+\t\u002F**\n+\t * Get order's items\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return mixed\n+\t * @author tungnx\n+\t * Todo: review to rewrite.\n+\t *\u002F\n+\tpublic function read_items( $order ) {\n+\t\t$key   = \"order\u002F{$order->get_id()}\u002F{$order->get_status()}\u002Fitems\";\n+\t\t$items = LP_Cache::cache_load_first( 'get', $key );\n+\t\tif ( false !== $items ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$table_order_items     = $wpdb->learnpress_order_items;\n+\t\t$table_order_item_meta = $wpdb->learnpress_order_itemmeta;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"SELECT o_item.order_item_id, o_item.order_item_name, o_itemmeta.meta_value, o_itemmeta.meta_key\n+\t\t\t\t\tFrom $table_order_items as o_item\n+\t\t\t\t\tINNER JOIN $table_order_item_meta as o_itemmeta\n+\t\t\t\t\tON o_item.order_item_id = o_itemmeta.learnpress_order_item_id\n+\t\t\t\t\tWHERE o_item.order_id = %d\n+\t\t\t\t\tLIMIT %d\",\n+\t\t\t$order->get_id(),\n+\t\t\t4 * 50\n+\t\t);\n+\n+\t\t\u002F\u002F Todo: write query to function and call ajax load more\n+\t\t$order_item_metas = $wpdb->get_results( $query, OBJECT );\n+\n+\t\t$items = array();\n+\n+\t\tforeach ( $order_item_metas as $order_item_meta ) {\n+\t\t\tif ( ! array_key_exists( $order_item_meta->order_item_id, $items ) ) {\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]         = array();\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]['id']   = $order_item_meta->order_item_id;\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]['name'] = isset( $order_item_meta->order_item_name ) ? $order_item_meta->order_item_name : '';\n+\t\t\t}\n+\n+\t\t\tswitch ( $order_item_meta->meta_key ) {\n+\t\t\t\tcase '_course_id':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['course_id'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_quantity':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['quantity'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_subtotal':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['subtotal'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_total':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['total'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ][ $order_item_meta->meta_key ] = $order_item_meta->meta_value;\n+\t\t\t}\n+\t\t}\n+\n+\t\tLP_Cache::cache_load_first( 'set', $key, $items );\n+\n+\t\treturn $items; \u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get order's items\n+\t *\n+\t * @param LP_Order $order\n+\t * @param array    $filter\n+\t *\n+\t * @return mixed\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function read_items_filter( $order, $filter = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$p      = $filter['p'];\n+\t\t$limit  = $filter['limit'] * 4; \u002F\u002F 4 fields on 1 item\n+\t\t$offset = $p * $limit;\n+\n+\t\t$table_order_items     = $wpdb->learnpress_order_items;\n+\t\t$table_order_item_meta = $wpdb->learnpress_order_itemmeta;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"SELECT o_item.order_item_id, o_item.order_item_name, o_itemmeta.meta_value, o_itemmeta.meta_key\n+\t\t\t\t\tFrom $table_order_items as o_item\n+\t\t\t\t\tINNER JOIN $table_order_item_meta as o_itemmeta\n+\t\t\t\t\tON o_item.order_item_id = o_itemmeta.learnpress_order_item_id\n+\t\t\t\t\tWHERE o_item.order_id = %d\n+\t\t\t\t\tLIMIT %d, %d\",\n+\t\t\t$order->get_id(),\n+\t\t\t$offset,\n+\t\t\t$limit\n+\t\t);\n+\n+\t\t\u002F\u002F Todo: write query to function and call ajax load more\n+\t\t$order_item_metas = $wpdb->get_results( $query, OBJECT );\n+\n+\t\t$items = array();\n+\n+\t\tforeach ( $order_item_metas as $order_item_meta ) {\n+\t\t\tif ( ! array_key_exists( $order_item_meta->order_item_id, $items ) ) {\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]         = array();\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]['id']   = $order_item_meta->order_item_id;\n+\t\t\t\t$items[ $order_item_meta->order_item_id ]['name'] = isset( $order_item_meta->order_item_name ) ? $order_item_meta->order_item_name : '';\n+\t\t\t}\n+\n+\t\t\tswitch ( $order_item_meta->meta_key ) {\n+\t\t\t\tcase '_course_id':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['course_id'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_quantity':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['quantity'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_subtotal':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['subtotal'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase '_total':\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ]['total'] = $order_item_meta->meta_value;\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$items[ $order_item_meta->order_item_id ][ $order_item_meta->meta_key ] = $order_item_meta->meta_value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items; \u002F\u002F apply_filters( 'learn_press_order_get_items', $items, $this );\n+\t}\n+\n+\t\u002F*public function getTotalItem() {\n+\t}*\u002F\n+\n+\t\u002F*public function get_item_meta( &$item ) {\n+\t\t$metas = get_metadata( 'learnpress_order_item', $item['id'] );\n+\t\tif ( $metas ) {\n+\t\t\tforeach ( $metas as $k => $v ) {\n+\t\t\t\t$item[ preg_replace( '!^_!', '', $k ) ] = LP_Helper::maybe_unserialize( $v[0] );\n+\t\t\t}\n+\t\t}\n+\t}*\u002F\n+\n+\tpublic function delete( &$object ) {\n+\t\t\u002F\u002F TODO: Implement delete() method.\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\n+\t * @return LP_Order\n+\t * @deprecated 4.2.3.5\n+\t *\u002F\n+\t\u002F*public function cln( $order ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\n+\t\t$cloned = clone $order;\n+\n+\t\t$cloned->set_id( 0 );\n+\t\t$cloned->save();\n+\n+\t\t$meta_keys = array(\n+\t\t\t'_order_currency',\n+\t\t\t'_prices_include_tax',\n+\t\t\t'_user_ip_address',\n+\t\t\t'_user_agent',\n+\t\t\t'_order_subtotal',\n+\t\t\t'_order_total',\n+\t\t\t'_order_key',\n+\t\t\t'_payment_method',\n+\t\t\t'_payment_method_title',\n+\t\t\t'_order_version',\n+\t\t\t'_created_via',\n+\t\t);\n+\n+\t\tforeach ( $meta_keys as $key ) {\n+\t\t\tupdate_post_meta( $cloned->get_id(), $key, get_post_meta( $order->get_id(), $key, true ) );\n+\t\t}\n+\n+\t\t$this->cln_items( $order->get_id(), $cloned->get_id() );\n+\n+\t\treturn $cloned;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Clone items from an order to another\n+\t *\n+\t * @param int $from\n+\t * @param int $to\n+\t *\n+\t * @return mixed\n+\t * @deprecated 4.2.3.5\n+\t *\u002F\n+\t\u002F*public function cln_items( $from, $to ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\t$order = learn_press_get_order( $from );\n+\t\tglobal $wpdb;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_order_items} oi\n+\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id\n+\t\t\tWHERE order_id = %d\n+\t\t\t\",\n+\t\t\t$from\n+\t\t);\n+\n+\t\t$items = $order->get_items();\n+\t\tif ( $items ) {\n+\t\t\t$to_order = learn_press_get_order( $to );\n+\t\t\tif ( ! $to_order ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$to_order->remove_order_items();\n+\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_order_items,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'order_item_name' => $item['name'],\n+\t\t\t\t\t\t'order_id'        => $to,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t\t$learnpress_order_item_id = $wpdb->insert_id;\n+\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT *\n+\t\t\t\t\tFROM {$wpdb->learnpress_order_itemmeta}\n+\t\t\t\t\tWHERE learnpress_order_item_id = %d\n+\t\t\t\t\",\n+\t\t\t\t\t$item['id']\n+\t\t\t\t);\n+\n+\t\t\t\tif ( $metas = $wpdb->get_results( $query ) ) {\n+\t\t\t\t\tforeach ( $metas as $meta ) {\n+\t\t\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t\t\t$wpdb->learnpress_order_itemmeta,\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'learnpress_order_item_id' => $learnpress_order_item_id,\n+\t\t\t\t\t\t\t\t'meta_key'                 => $meta->meta_key,\n+\t\t\t\t\t\t\t\t'meta_value'               => $meta->meta_value,\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t$this->read_items( $order );\n+\n+\t\treturn true;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Load order data\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return mixed\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function load( &$order ) {\n+\t\t$the_id = $order->get_id();\n+\t\tif ( ! $the_id || LP_ORDER_CPT !== learn_press_get_post_type( $the_id ) ) {\n+\t\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\t\tthrow new Exception( sprintf( __( 'Invalid order with ID \"%d\".', 'learnpress' ), $the_id ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$post = get_post( $the_id );\n+\t\tif ( $post ) {\n+\t\t\t$_users = get_post_meta( $order->get_id(), '_user_id' );\n+\t\t\tif ( $_users ) {\n+\t\t\t\tsettype( $_users, 'array' );\n+\t\t\t} else {\n+\t\t\t\t$_users = array();\n+\t\t\t}\n+\t\t\tif ( sizeof( $_users ) > 1 ) {\n+\t\t\t\t$users = $_users;\n+\t\t\t} elseif ( sizeof( $_users ) == 1 ) {\n+\t\t\t\t$users = $_users[0];\n+\t\t\t} else {\n+\t\t\t\t$users = 0;\n+\t\t\t}\n+\n+\t\t\t$order->set_data_via_methods(\n+\t\t\t\tarray(\n+\t\t\t\t\t'user_id'         => $users,\n+\t\t\t\t\t'order_date'      => new LP_Datetime( $post->post_date ),\n+\t\t\t\t\t'date_modified'   => new LP_Datetime( $post->post_modified ),\n+\t\t\t\t\t'status'          => str_replace( 'lp-', '', $post->post_status ),\n+\t\t\t\t\t'parent_id'       => $post->post_parent,\n+\t\t\t\t\t'created_via'     => get_post_meta( $post->ID, '_created_via', true ),\n+\t\t\t\t\t'total'           => get_post_meta( $post->ID, '_order_total', true ),\n+\t\t\t\t\t'subtotal'        => get_post_meta( $post->ID, '_order_subtotal', true ),\n+\t\t\t\t\t'order_key'       => get_post_meta( $post->ID, '_order_key', true ),\n+\t\t\t\t\t'user_ip_address' => get_post_meta( $post->ID, '_user_ip_address', true ),\n+\t\t\t\t\t'user_agent'      => get_post_meta( $post->ID, '_user_agent', true ),\n+\t\t\t\t\t'checkout_email'  => get_post_meta( $post->ID, '_checkout_email', true ),\n+\t\t\t\t\t'currency'        => get_post_meta( $post->ID, '_order_currency', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$order->set_data( 'order_subtotal', get_post_meta( $post->ID, '_order_subtotal', true ) );\n+\t\t\t$order->set_data( 'order_total', get_post_meta( $post->ID, '_order_total', true ) );\n+\t\t\t$order->set_data( 'payment_method', get_post_meta( $post->ID, '_payment_method', true ) );\n+\t\t\t$order->set_data( 'payment_method_title', get_post_meta( $post->ID, '_payment_method_title', true ) );\n+\t\t\t\u002F\u002F$order->get_items();\n+\t\t\t$order->read_meta();\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Recover an order checked out by Guest for an user.\n+\t *\n+\t * @param string $order_key\n+\t * @param int    $user_id\n+\t *\n+\t * @return bool|LP_Order|WP_Error\n+\t *\u002F\n+\tpublic function recover( $order_key, $user_id ) {\n+\t\ttry {\n+\t\t\t$order = $this->get_order_by_key( $order_key );\n+\n+\t\t\t\u002F\u002F Validations\n+\t\t\tif ( ! $order ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid Order key.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $order->is_guest() ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Order key is already assigned.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\tif ( ! $user || $user instanceof LP_User_Guest ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid User!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $order->get_checkout_email() !== $user->get_email() ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid order key with Email!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set user to order and update\n+\t\t\t$order->set_user_id( $user_id );\n+\t\t\t$order->save();\n+\n+\t\t\t\u002F\u002F Update user_id of lp_user_item\n+\t\t\tif ( $order->is_completed() ) {\n+\t\t\t\t$user_item_db   = LP_User_Items_DB::getInstance();\n+\t\t\t\t$filter         = new LP_User_Items_Filter();\n+\t\t\t\t$filter->ref_id = $order->get_id();\n+\t\t\t\t$filter->limit  = -1;\n+\t\t\t\t$userItemModels = $user_item_db->get_user_items( $filter );\n+\t\t\t\tif ( ! empty( $userItemModels ) ) {\n+\t\t\t\t\tforeach ( $userItemModels as $userItemModelObj ) {\n+\t\t\t\t\t\t$userItemModel          = new UserCourseModel( $userItemModelObj );\n+\t\t\t\t\t\t$userItemModel->user_id = $user_id;\n+\t\t\t\t\t\t$userItemModel->save();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Trigger action\n+\t\t\tdo_action( 'learn-press\u002Forder\u002Frecovered-successful', $order->get_id(), $user_id );\n+\t\t} catch ( Exception $ex ) {\n+\t\t\treturn new WP_Error( 'lp_order_recover_error', $ex->getMessage() );\n+\t\t}\n+\n+\t\treturn $order;\n+\t}\n+\n+\t\u002F**\n+\t * Retrieve an order by order key.\n+\t *\n+\t * @param string $order_key\n+\t *\n+\t * @return bool|LP_Order\n+\t *\u002F\n+\tpublic function get_order_by_key( $order_key ) {\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT ID\n+\t\t\tFROM {$wpdb->posts} p\n+\t\t\tINNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = %s AND pm.meta_value = %s\n+\t\t\",\n+\t\t\t'_order_key',\n+\t\t\t$order_key\n+\t\t);\n+\n+\t\t$order    = false;\n+\t\t$order_id = $wpdb->get_var( $query );\n+\n+\t\tif ( $order_id ) {\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\t\t}\n+\n+\t\treturn $order;\n+\t}\n+\n+\tpublic function duplicate( &$order, $args = array() ) {\n+\t\t\u002F\u002F TODO: Implement duplicate() method.\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-question-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-question-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-question-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-question-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,999 +1,999 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Question_CURD\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FCURD\r\n- * @since   3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_CURD' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_CURD\r\n-\t *\u002F\r\n-\tclass LP_Question_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_CURD constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->_error_messages = array(\r\n-\t\t\t\t'QUESTION_NOT_EXISTS' => __( 'The question does not exist.', 'learnpress' ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create question and can add to quiz.\r\n-\t\t *\r\n-\t\t * @param $args\r\n-\t\t *\r\n-\t\t * @return bool|int|LP_Question|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function create( &$args ) {\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'quiz_id'        => 0,\r\n-\t\t\t\t\t'order'          => - 1,\r\n-\t\t\t\t\t'id'             => '',\r\n-\t\t\t\t\t'status'         => 'publish',\r\n-\t\t\t\t\t'type'           => 'true_or_false',\r\n-\t\t\t\t\t'title'          => __( 'New Question', 'learnpress' ),\r\n-\t\t\t\t\t'content'        => '',\r\n-\t\t\t\t\t'create_answers' => true,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F set question author for author of quiz\r\n-\t\t\tif ( ! empty( $args['quiz_id'] ) ) {\r\n-\t\t\t\t$user_id = get_post_field( 'post_author', $args['quiz_id'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_id = learn_press_get_current_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question_id = wp_insert_post(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ID'           => $args['id'],\r\n-\t\t\t\t\t'post_author'  => $user_id,\r\n-\t\t\t\t\t'post_type'    => LP_QUESTION_CPT,\r\n-\t\t\t\t\t'post_status'  => $args['status'],\r\n-\t\t\t\t\t'post_title'   => $args['title'],\r\n-\t\t\t\t\t'post_content' => $args['content'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $question_id ) {\r\n-\t\t\t\t\u002F\u002F add default meta for new lesson\r\n-\t\t\t\t$default_meta = LP_Question::get_default_meta();\r\n-\r\n-\t\t\t\tif ( is_array( $default_meta ) ) {\r\n-\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\r\n-\t\t\t\t\t\tupdate_post_meta( $question_id, '_lp_' . $key, $value );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\tupdate_post_meta( $question_id, '_lp_type', $args['type'] );\r\n-\t\t\t\t\u002F\u002F update user memory question types\r\n-\t\t\t\tget_user_meta( $user_id, '_learn_press_memorize_question_types', $args['type'] );\r\n-\r\n-\t\t\t\t$question = LP_Question::get_question( $question_id, array( 'type' => $args['type'] ) );\r\n-\t\t\t\t$question->set_type( $args['type'] );\r\n-\r\n-\t\t\t\t\u002F\u002F add question to quiz\r\n-\t\t\t\tif ( ! empty( $args['quiz_id'] ) ) {\r\n-\t\t\t\t\t$quiz_curd = new LP_Quiz_CURD();\r\n-\t\t\t\t\t$quiz_curd->add_question( $args['quiz_id'], $question_id, $args['order'] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $args['create_answers'] ) {\r\n-\t\t\t\t\t$question->create_default_answers();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fafter-create-question', $question );\r\n-\r\n-\t\t\t\treturn $question;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $question_id;\r\n-\t\t}\r\n-\r\n-\r\n-\t\tpublic function update( &$question ) {\r\n-\t\t\treturn $question;\r\n-\t\t\t\u002F\u002F TODO: Implement update() method.\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete all question's related data before run wp_delete_post(), hook to before delete question hook.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param object $question_id\r\n-\t\t *\u002F\r\n-\t\tpublic function delete( &$question_id ) {\r\n-\t\t\t\u002F\u002F remove all answer of question from {$wpdb->prefix}learnpress_question_answers table\r\n-\t\t\t$this->clear( $question_id );\r\n-\r\n-\t\t\t\u002F\u002F quiz curd\r\n-\t\t\t$curd = new LP_Quiz_CURD();\r\n-\r\n-\t\t\t\u002F\u002F allow hook\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-delete-question', $question_id );\r\n-\r\n-\t\t\t\u002F\u002F get the quizzes that a question is assigned to, return WP Post\r\n-\t\t\t$quiz = $this->get_quiz( $question_id );\r\n-\r\n-\t\t\t\u002F\u002F remove question from quiz\r\n-\t\t\tif ( $quiz ) {\r\n-\t\t\t\t$curd->remove_questions( $quiz->ID, $question_id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate question.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param       $question_id\r\n-\t\t * @param array       $args\r\n-\t\t *\r\n-\t\t * @return mixed|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function duplicate( &$question_id, $args = array() ) {\r\n-\t\t\tif ( ! $question_id ) {\r\n-\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Oops! ID not found' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( learn_press_get_post_type( $question_id ) != LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Op! The question does not exist' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F ensure that user can create question\r\n-\t\t\tif ( ! current_user_can( 'edit_posts' ) ) {\r\n-\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Sorry! You do not have permission to duplicate this question' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F origin question\r\n-\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t\t\u002F\u002F duplicate question\r\n-\t\t\t$new_question_id = learn_press_duplicate_post( $question_id, array( 'post_status' => 'publish' ) );\r\n-\r\n-\t\t\tif ( ! $new_question_id || is_wp_error( $new_question_id ) ) {\r\n-\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Sorry! Failed to duplicate the question!' );\r\n-\t\t\t} else {\r\n-\r\n-\t\t\t\t\u002F\u002F init new question\r\n-\t\t\t\t$new_question = LP_Question::get_question( $new_question_id );\r\n-\r\n-\t\t\t\t\u002F\u002F set data\r\n-\t\t\t\t$new_question->set_type( $question->get_type() );\r\n-\t\t\t\t$new_question->set_data( 'answer_options', $question->get_data( 'answer_options' ) );\r\n-\r\n-\t\t\t\t\u002F\u002F trigger change user memorize question types\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t\tupdate_user_meta( $user_id, '_learn_press_memorize_question_types', $new_question->get_type() );\r\n-\r\n-\t\t\t\t\u002F\u002F duplicate answer\r\n-\t\t\t\t$this->duplicate_answer( $question_id, $new_question_id );\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $question_id, $new_question_id, $args );\r\n-\r\n-\t\t\t\treturn $new_question_id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate answer question.\r\n-\t\t *\r\n-\t\t * @param $question_id     | origin question\r\n-\t\t * @param $question_id_clone | new question\r\n-\t\t * @version 3.0.1\r\n-\t\t * @since 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function duplicate_answer( $question_id, $question_id_clone ) {\r\n-\t\t\t$lp_db                  = LP_Database::getInstance();\r\n-\t\t\t$lp_question_answers_db = LP_Question_Answers_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t\u002F\u002F Get all answer of question\r\n-\t\t\t\t$filter_get_answer_options               = new LP_Question_Answers_Filter();\r\n-\t\t\t\t$filter_get_answer_options->question_ids = [ $question_id ];\r\n-\t\t\t\t$answer_options                          = $lp_question_answers_db->get_question_answers( $filter_get_answer_options );\r\n-\r\n-\t\t\t\tif ( $answer_options ) {\r\n-\t\t\t\t\tforeach ( $answer_options as $answer_option ) {\r\n-\t\t\t\t\t\t$question_answer_id = $answer_option->question_answer_id;\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Insert new question_answer\r\n-\t\t\t\t\t\t$insert_question_answer_rs = $lp_db->wpdb->insert(\r\n-\t\t\t\t\t\t\t$lp_db->tb_lp_question_answers,\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'question_id' => $question_id_clone,\r\n-\t\t\t\t\t\t\t\t'title'       => ! empty( $answer_option->title ) ? $answer_option->title : '',\r\n-\t\t\t\t\t\t\t\t'value'       => ! empty( $answer_option->value ) ? $answer_option->value : '',\r\n-\t\t\t\t\t\t\t\t'is_true'     => ! empty( $answer_option->is_true ) ? $answer_option->is_true : '',\r\n-\t\t\t\t\t\t\t\t'order'       => $answer_option->order,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\tarray( '%d', '%s', '%s', '%s', '%s' )\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( ! $insert_question_answer_rs ) {\r\n-\t\t\t\t\t\t\tthrow new Exception( __( 'Failed to duplicate answer', 'learnpress' ) );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Get question_answer_id have just inserted\r\n-\t\t\t\t\t\t$filter_question_answer_id                      = new LP_Question_Answers_Filter();\r\n-\t\t\t\t\t\t$filter_question_answer_id->only_fields         = [ 'MAX(question_answer_id)' ];\r\n-\t\t\t\t\t\t$filter_question_answer_id->question_ids        = [ $question_id_clone ];\r\n-\t\t\t\t\t\t$filter_question_answer_id->return_string_query = true;\r\n-\t\t\t\t\t\t$question_answer_id_query                       = $lp_question_answers_db->get_question_answers( $filter_question_answer_id );\r\n-\t\t\t\t\t\t$question_answer_id_new                         = (int) $lp_question_answers_db->wpdb->get_var( $question_answer_id_query );\r\n-\r\n-\t\t\t\t\t\tif ( ! $question_answer_id_new ) {\r\n-\t\t\t\t\t\t\tthrow new Exception( __( 'Failed to duplicate answer', 'learnpress' ) );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Duplicate answer meta\r\n-\t\t\t\t\t\t\u002F\u002F Get answer meta by question_answer_id\r\n-\t\t\t\t\t\t$filter_get                   = new LP_Question_Answermeta_Filter();\r\n-\t\t\t\t\t\t$filter_get->collection       = $lp_db->tb_lp_question_answermeta;\r\n-\t\t\t\t\t\t$filter_get->collection_alias = 'qam';\r\n-\t\t\t\t\t\t$filter_get->field_count      = 'meta_id';\r\n-\t\t\t\t\t\t$filter_get->limit            = -1;\r\n-\t\t\t\t\t\t$filter_get->where[]          = $lp_db->wpdb->prepare( 'AND qam.learnpress_question_answer_id = %d', $question_answer_id );\r\n-\t\t\t\t\t\t$filter_get->fields           = $lp_db->get_cols_of_table( $lp_db->tb_lp_question_answermeta );\r\n-\t\t\t\t\t\t$question_answermeta_rs       = $lp_db->execute( $filter_get );\r\n-\r\n-\t\t\t\t\t\tforeach ( $question_answermeta_rs as $question_answermeta ) {\r\n-\t\t\t\t\t\t\t$lp_db->wpdb->insert(\r\n-\t\t\t\t\t\t\t\t$lp_db->tb_lp_question_answermeta,\r\n-\t\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t\t'learnpress_question_answer_id' => $question_answer_id_new,\r\n-\t\t\t\t\t\t\t\t\t'meta_key'   => $question_answermeta->meta_key,\r\n-\t\t\t\t\t\t\t\t\t'meta_value' => $question_answermeta->meta_value,\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\tarray( '%d', '%s', '%s' )\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param LP_Question $question\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load( &$question ) {\r\n-\t\t\t\u002F\u002F question id\r\n-\t\t\t$id = $question->get_id();\r\n-\r\n-\t\t\tif ( ! $id || ! in_array( learn_press_get_post_type( $id ), array( 'revision', LP_QUESTION_CPT ) ) ) {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Invalid question with ID \"%d\".', 'learnpress' ), $id ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question->set_data_via_methods(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'explanation' => get_post_meta( $id, '_lp_explanation', true ),\r\n-\t\t\t\t\t'hint'        => get_post_meta( $id, '_lp_hint', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F $this->_load_answer_options( $question );\r\n-\t\t\t$this->_load_meta( $question );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $question | LP_Question\r\n-\t\t *\u002F\r\n-\t\tprotected function _load_meta( &$question ) {\r\n-\t\t\t$type = get_post_meta( $question->get_id(), '_lp_type', true );\r\n-\t\t\tif ( ! learn_press_is_support_question_type( $type ) ) {\r\n-\t\t\t\t$type = 'true_or_false';\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F $question->set_type( $type );\r\n-\r\n-\t\t\t$mark = $this->_get_question_mark( $question->get_id() );\r\n-\t\t\t$question->set_data_via_methods(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'mark' => $mark,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tpublic function _get_question_mark( $question_id ) {\r\n-\r\n-\t\t\t\u002F\u002F Recheck _lp_mark @tungnx\r\n-\t\t\t$mark = get_post_meta( $question_id, '_lp_mark', true ) ? get_post_meta( $question_id, '_lp_mark', true ) : 0;\r\n-\r\n-\t\t\t$mark = abs( $mark );\r\n-\t\t\tif ( ! $mark ) {\r\n-\t\t\t\t$mark = apply_filters( 'learn-press\u002Fquestion\u002Fdefault-mark', 1, $question_id );\r\n-\t\t\t\tupdate_post_meta( $question_id, '_lp_mark', $mark );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $mark;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the quizzes that a question is assigned to.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t *\r\n-\t\t * @return null|object WP_Post\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz( $question_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t  \t\t\tSELECT post.* FROM {$wpdb->posts} post\r\n-\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions quiz ON post.ID = quiz.quiz_id\r\n-\t\t\t\tWHERE quiz.question_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t$question_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F get single row\r\n-\t\t\treturn $wpdb->get_row( $query );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Change question type.\r\n-\t\t *\r\n-\t\t * @param $question LP_Question\r\n-\t\t * @param $new_type\r\n-\t\t *\r\n-\t\t * @return false|void\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function change_question_type( &$question, $new_type ) {\r\n-\t\t\tif ( learn_press_get_post_type( $question->get_id() ) != LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question_id = $question->get_id();\r\n-\r\n-\t\t\t\u002F\u002F If not new Question or not change type return\r\n-\t\t\t$old_type    = get_post_meta( $question_id, '_lp_type', true );\r\n-\t\t\tif ( ! empty( $old_type ) && $old_type === $new_type ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$answer_options = $question->get_data( 'answer_options' );\r\n-\t\t\tupdate_post_meta( $question_id, '_lp_type', $new_type );\r\n-\t\t\t$question->set_type( $new_type );\r\n-\r\n-\t\t\t$new_question = LP_Question::get_question( $question_id, array( 'force' => true ) );\r\n-\r\n-\t\t\tif ( $new_question ) {\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t\tupdate_user_meta( $user_id, '_learn_press_memorize_question_types', $new_type );\r\n-\r\n-\t\t\t\tif ( $old_type == 'multi_choice' && $new_type == 'single_choice' ) {\r\n-\t\t\t\t\t$func = '_convert_answers_multi_choice_to_single_choice';\r\n-\t\t\t\t} elseif ( ( $old_type == 'multi_choice' || $old_type == 'single_choice' ) && 'true_or_false' == $new_type ) {\r\n-\t\t\t\t\t$func = '_convert_answers_to_true_or_false';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F for rest, clear answer data and create default\r\n-\t\t\t\t\t$func = '_convert_default_answers';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( is_callable( array( $this, $func ) ) ) {\r\n-\t\t\t\t\t$answer_options = call_user_func_array(\r\n-\t\t\t\t\t\tarray( $this, $func ),\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t$question,\r\n-\t\t\t\t\t\t\t$new_question,\r\n-\t\t\t\t\t\t\t$answer_options,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, $answer_options, 'learn-press\u002Fquestions' );\r\n-\t\t\t\t$new_question->set_data( 'answer_options', $answer_options );\r\n-\r\n-\t\t\t\t$question = $new_question;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update answer title\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t * @param $answer\r\n-\t\t *\r\n-\t\t * @return bool|false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function update_answer_title( $question_id, $answer ) {\r\n-\t\t\tif ( get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t\u002F\u002F question data\r\n-\t\t\t$data = array(\r\n-\t\t\t\t'data'  => apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fquestion\u002Fupdate-answer-data',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'   => $answer['title'],\r\n-\t\t\t\t\t\t'value'   => $answer['value'] ?? '',\r\n-\t\t\t\t\t\t'is_true' => $answer['is_true'] ?? '',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'where' => array(\r\n-\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\r\n-\t\t\t\t\t'question_id'        => $question_id,\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$update = $wpdb->update(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t$data['data'],\r\n-\t\t\t\t$data['where'],\r\n-\t\t\t\tarray( '%s', '%s', '%s' ),\r\n-\t\t\t\tarray( '%d', '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Update for Fill in Blanks.\r\n-\t\t\tif ( ! empty( $answer['blanks'] ) ) {\r\n-\t\t\t\t$blanks = $answer['blanks'];\r\n-\r\n-\t\t\t\t\u002F*if ( is_array( $blanks ) ) {\r\n-\t\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t\t\t\tforeach ( $blanks as $id => $blank ) {\r\n-\t\t\t\t\t\t$question->_blanks[ $blank['id'] ] = $blank;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\tlearn_press_update_question_answer_meta( $answer['question_answer_id'], '_blanks', $blanks );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $update;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update correct answer.\r\n-\t\t *\r\n-\t\t * @param $question LP_Question\r\n-\t\t * @param $correct\r\n-\t\t *\r\n-\t\t * @return bool | LP_Question\r\n-\t\t *\u002F\r\n-\t\tpublic function change_correct_answer( $question, $correct ) {\r\n-\t\t\tif ( learn_press_get_post_type( $question->get_id() ) != LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$question_id      = $question->get_id();\r\n-\t\t\t$question_type    = $question->get_type();\r\n-\t\t\t$question_answers = $question->get_data( 'answer_options' );\r\n-\r\n-\t\t\t$db_args = $answers = array();\r\n-\r\n-\t\t\tforeach ( $question_answers as $index => $answer ) {\r\n-\r\n-\t\t\t\t$answer_data = array(\r\n-\t\t\t\t\t'title'   => $answer['title'],\r\n-\t\t\t\t\t'value'   => isset( $answer['value'] ) ? stripslashes( $answer['value'] ) : '',\r\n-\t\t\t\t\t'is_true' => isset( $answer['is_true'] ) ? $answer['is_true'] : '',\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F\u002F update correct for select answer\r\n-\t\t\t\tif ( $answer['question_answer_id'] == $correct['question_answer_id'] ) {\r\n-\t\t\t\t\t$answer_data['is_true'] = $correct['is_true'];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F untrue all rest answer with True or false and Single choice question\r\n-\t\t\t\t\tif ( in_array( $question_type, array( 'true_or_false', 'single_choice' ) ) ) {\r\n-\t\t\t\t\t\t$answer_data['is_true'] = '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F question answers data to set cache\r\n-\t\t\t\t$answers[ $index ] = array(\r\n-\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\r\n-\t\t\t\t\t'question_id'        => $question_id,\r\n-\t\t\t\t\t'order'              => $answer['order'],\r\n-\t\t\t\t\t'title'              => $answer_data['title'],\r\n-\t\t\t\t\t'value'              => $answer_data['value'],\r\n-\t\t\t\t\t'is_true'            => $answer_data['is_true'],\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F\u002F new answers data\r\n-\t\t\t\t$db_args[ $index ] = array(\r\n-\t\t\t\t\t'data'  => array(\r\n-\t\t\t\t\t\t'title'   => $answer_data['title'],\r\n-\t\t\t\t\t\t'value'   => $answer_data['value'],\r\n-\t\t\t\t\t\t'is_true' => $answer_data['is_true'],\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'where' => array(\r\n-\t\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\r\n-\t\t\t\t\t\t'question_id'        => $question_id,\r\n-\t\t\t\t\t\t'order'              => $answer['order'],\r\n-\t\t\t\t\t),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F update db\r\n-\t\t\tforeach ( $db_args as $id => $arg ) {\r\n-\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\t$arg['data'],\r\n-\t\t\t\t\t$arg['where'],\r\n-\t\t\t\t\tarray( '%s', '%s', '%s' ),\r\n-\t\t\t\t\tarray( '%d', '%d', '%d' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F set question answer data\r\n-\t\t\t$question->set_data( 'answer_options', $answers );\r\n-\r\n-\t\t\treturn $question;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sort answers.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param       $question_id\r\n-\t\t * @param array       $order\r\n-\t\t *\r\n-\t\t * @return bool|LP_Question\r\n-\t\t *\u002F\r\n-\t\tpublic function sort_answers( $question_id, $order = array() ) {\r\n-\r\n-\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $order ) {\r\n-\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t\t$answers  = $question->get_data( 'answer_options' );\r\n-\r\n-\t\t\t\tglobal $wpdb;\r\n-\t\t\t\t$new_answers = array();\r\n-\t\t\t\tforeach ( $order as $index => $answer_id ) {\r\n-\t\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\t\tarray( 'order' => $index + 1 ),\r\n-\t\t\t\t\t\tarray( 'question_answer_id' => $answer_id )\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t$new_answers[ $answer_id ] = $answers[ $answer_id ];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$question->set_data( 'answer_options', $new_answers );\r\n-\r\n-\t\t\t\treturn $question;\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete question answer.\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t * @param $answer_id\r\n-\t\t * @param $force\r\n-\t\t *\r\n-\t\t * @return bool|false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function delete_answer( $question_id, $answer_id, $force = false ) {\r\n-\r\n-\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t\t\u002F\u002F exist answer options\r\n-\t\t\t$answers = $question->get_data( 'answer_options' );\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t\u002F\u002F Delete answer meta\r\n-\t\t\t$wpdb->delete(\r\n-\t\t\t\t$wpdb->learnpress_question_answermeta,\r\n-\t\t\t\tarray( 'learnpress_question_answer_id' => $answer_id )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$delete = $wpdb->delete(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\tarray( 'question_answer_id' => $answer_id )\r\n-\t\t\t);\r\n-\t\t\tif ( $delete ) {\r\n-\t\t\t\tunset( $answers[ $answer_id ] );\r\n-\t\t\t\t$question->set_data( 'answer_options', $answers );\r\n-\r\n-\t\t\t\t$this->sort_answers( $question_id, array_keys( $answers ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $delete;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add new answer.\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t * @param $new_answer\r\n-\t\t *\r\n-\t\t * @return bool|false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function new_answer( $question_id, $new_answer ) {\r\n-\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t\t\u002F\u002F exist answer options\r\n-\t\t\t$answers = $question->get_data( 'answer_options' );\r\n-\t\t\t\u002F\u002F number answer options\r\n-\t\t\t$number = count( $answers );\r\n-\r\n-\t\t\tif ( $question->get_type() === 'sorting_choice' ) {\r\n-\t\t\t\t$new_answer['is_true'] = 'yes';\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$new_answer = wp_parse_args(\r\n-\t\t\t\t$new_answer,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_id' => $question_id,\r\n-\t\t\t\t\t'title'       => '',\r\n-\t\t\t\t\t'value'       => learn_press_random_value(),\r\n-\t\t\t\t\t'is_true'     => '',\r\n-\t\t\t\t\t'order'       => $number + 1,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$insert = $wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t$new_answer,\r\n-\t\t\t\tlearn_press_map_columns_format(\r\n-\t\t\t\t\t$new_answer,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'question_id' => '%d',\r\n-\t\t\t\t\t\t'title'       => '%s',\r\n-\t\t\t\t\t\t'value'       => '%s',\r\n-\t\t\t\t\t\t'is_true'     => '%s',\r\n-\t\t\t\t\t\t'order'       => '%d',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $insert ) {\r\n-\t\t\t\t$new_answer['question_answer_id'] = $wpdb->insert_id;\r\n-\r\n-\t\t\t\tif ( is_array( $answers ) ) {\r\n-\t\t\t\t\t$answers = array_merge( $answers, array( $new_answer ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$answers = array( $new_answer );\r\n-\t\t\t\t}\r\n-\t\t\t\t$question->set_data( 'answer_options', $answers );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $wpdb->insert_id;\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Convert answers to true or false question.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $question\r\n-\t\t * @param $new_question\r\n-\t\t * @param $answers\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tprotected function _convert_answers_to_true_or_false( $question, $new_question, $answers ) {\r\n-\t\t\tif ( is_array( $answers ) ) {\r\n-\t\t\t\t\u002F\u002F array answer ids\r\n-\t\t\t\t$answer_ids = array_keys( $answers );\r\n-\r\n-\t\t\t\tif ( sizeof( $answers ) > 2 ) {\r\n-\t\t\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t\t\tforeach ( $answers as $key => $answer ) {\r\n-\t\t\t\t\t\tif ( array_search( $key, $answer_ids ) > 1 ) {\r\n-\t\t\t\t\t\t\t$wpdb->delete(\r\n-\t\t\t\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\t\t\t\tarray( 'question_answer_id' => $answer['question_answer_id'] )\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$answers = array_slice( $answers, 0, 2, true );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$correct = 0;\r\n-\t\t\t\tforeach ( $answers as $key => $answer ) {\r\n-\t\t\t\t\tif ( $answer['is_true'] == 'yes' ) {\r\n-\t\t\t\t\t\t$correct += 1;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $correct ) {\r\n-\t\t\t\t\t\u002F\u002F for single choice deletes all correct, set first option is correct\r\n-\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'yes';\r\n-\t\t\t\t} elseif ( $correct == 2 ) {\r\n-\t\t\t\t\t\u002F\u002F for multiple choice keeps all correct, remove all correct and keep first option\r\n-\t\t\t\t\t$answers[ $answer_ids[1] ]['is_true'] = 'no';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * Convert answers for multi choice to single choice question.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $question\r\n-\t\t * @param $new_question\r\n-\t\t * @param $answers\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _convert_answers_multi_choice_to_single_choice( $question, $new_question, $answers ) {\r\n-\t\t\tif ( is_array( $answers ) ) {\r\n-\t\t\t\t\u002F\u002F array answer ids\r\n-\t\t\t\t$answer_ids = array_keys( $answers );\r\n-\r\n-\t\t\t\t$correct = 0;\r\n-\t\t\t\tforeach ( $answers as $key => $answer ) {\r\n-\t\t\t\t\tif ( $answer['is_true'] == 'yes' ) {\r\n-\t\t\t\t\t\t$correct += 1;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $correct ) {\r\n-\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'yes';\r\n-\t\t\t\t} elseif ( $correct > 1 ) {\r\n-\t\t\t\t\t\u002F\u002F remove all correct and keep first option\r\n-\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'no';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Convert default answers.\r\n-\t\t *\r\n-\t\t * @param $question     LP_Question\r\n-\t\t * @param $new_question LP_Question\r\n-\t\t * @param $answers\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _convert_default_answers( $question, $new_question, $answers ) {\r\n-\t\t\t$question_id = $question->get_id();\r\n-\t\t\t\u002F\u002F clear all exists answer\r\n-\t\t\t$this->clear( $question_id );\r\n-\t\t\t\u002F\u002F set default answer\r\n-\t\t\t$answer_options = $new_question->get_default_answers();\r\n-\r\n-\t\t\tif ( is_array( $answer_options ) ) {\r\n-\t\t\t\tforeach ( $answer_options as $index => $answer ) {\r\n-\t\t\t\t\t$insert        = array(\r\n-\t\t\t\t\t\t'question_id' => $question_id,\r\n-\t\t\t\t\t\t'title'       => $answer['title'],\r\n-\t\t\t\t\t\t'value'       => isset( $answer['value'] ) ? stripslashes( $answer['value'] ) : '',\r\n-\t\t\t\t\t\t'is_true'     => ( $answer['is_true'] == 'yes' ) ? $answer['is_true'] : '',\r\n-\t\t\t\t\t\t'order'       => $index + 1,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$new_answers[] = $this->add_answer( $new_question->get_type(), $insert );\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\treturn $new_answers;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add question answer.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param string $question_type\r\n-\t\t * @param array  $args\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function add_answer( $question_type = '', $args = array() ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$question = LP_Question::get_question( $args['question_id'], array( 'type' => $question_type ) );\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_id' => $args['question_id'],\r\n-\t\t\t\t\t'title'       => $args['title'],\r\n-\t\t\t\t\t'value'       => $args['value'],\r\n-\t\t\t\t\t'is_true'     => $args['is_true'],\r\n-\t\t\t\t\t'order'       => $args['order'],\r\n-\t\t\t\t),\r\n-\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$question_answer_id = $wpdb->insert_id;\r\n-\t\t\tif ( $question_answer_id ) {\r\n-\t\t\t\t\u002F\u002F update question answer option data\r\n-\t\t\t\t$answer_options = $question->get_data( 'answer_options' ) ? $question->get_data( 'answer_options' ) : array();\r\n-\r\n-\t\t\t\t$new_answer_option_data = array(\r\n-\t\t\t\t\t'question_answer_id' => $question_answer_id,\r\n-\t\t\t\t\t'question_id'        => $args['question_id'],\r\n-\t\t\t\t\t'order'              => $args['order'],\r\n-\t\t\t\t\t'title'              => $args['title'],\r\n-\t\t\t\t\t'value'              => $args['value'],\r\n-\t\t\t\t\t'is_true'            => $args['is_true'],\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( ! $answer_options ) {\r\n-\t\t\t\t\t$question->set_data( 'answer_options', array( $new_answer_option_data ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$answer_options[] = $new_answer_option_data;\r\n-\t\t\t\t\t$question->set_data( 'answer_options', $answer_options );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $new_answer_option_data;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete question answer.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t * @param $answer_id\r\n-\t\t *\r\n-\t\t * @return bool|false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function delete_question_answer( $question_id, $answer_id ) {\r\n-\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT || ! $answer_id ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$result = $wpdb->delete(\r\n-\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\tarray( 'question_answer_id' => $answer_id )\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete all question answers.\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t *\r\n-\t\t * @return bool|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function clear( $question_id ) {\r\n-\r\n-\t\t\tif ( ! learn_press_get_question( $question_id ) ) {\r\n-\t\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-clear-question', $question_id );\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$wpdb->delete( $wpdb->learnpress_question_answers, array( 'question_id' => $question_id ) );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load answer options for the question from database.\r\n-\t\t * Load from cache if data is already loaded into cache.\r\n-\t\t * Otherwise, load from database and put to cache.\r\n-\t\t *\r\n-\t\t * @param int $question_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _read_answers( $question_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT question_answer_id, title, value, is_true\r\n-\t\t\t\tFROM {$wpdb->prefix}learnpress_question_answers\r\n-\t\t\t\tWHERE question_id = %d\r\n-\t\t\t\tORDER BY `order` ASC\r\n-\t\t\t\",\r\n-\t\t\t\t$question_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$answer_options = array();\r\n-\r\n-\t\t\t$results = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( $results ) {\r\n-\t\t\t\tforeach ( $results as $k => $v ) {\r\n-\t\t\t\t\t$answer_option = array(\r\n-\t\t\t\t\t\t'question_answer_id' => absint( $v->question_answer_id ),\r\n-\t\t\t\t\t\t'title'              => $v->title,\r\n-\t\t\t\t\t\t'value'              => $v->value,\r\n-\t\t\t\t\t\t'is_true'            => $v->is_true,\r\n-\t\t\t\t\t\t'order'              => $k + 1, \u002F\u002F Need???\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t$answer_options[ $v->question_answer_id ] = $answer_option;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answer_options;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load question answers\r\n-\t\t *\r\n-\t\t * @updated 3.1.0\r\n-\t\t *\r\n-\t\t * @param array|int $question_id\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function load_answer_options( $question_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$return_id = 0;\r\n-\r\n-\t\t\tif ( is_array( $question_id ) ) {\r\n-\r\n-\t\t\t\tforeach ( $question_id as $q_id ) {\r\n-\t\t\t\t\t$this->load_answer_options( $q_id );\r\n-\t\t\t\t\tif ( ! $return_id ) {\r\n-\t\t\t\t\t\t$return_id = $q_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t$question_id = $return_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$answer_options = LP_Object_Cache::get( 'question-' . $question_id, 'question-answers' );\r\n-\r\n-\t\t\tif ( false === $answer_options ) {\r\n-\t\t\t\t$answer_options = $this->_read_answers( $question_id );\r\n-\t\t\t\tLP_Object_Cache::set( 'question-' . $question_id, $answer_options, 'question-answers' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answer_options;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Question_CURD\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FCURD\n+ * @since   3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_CURD' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_CURD\n+\t *\u002F\n+\tclass LP_Question_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\n+\t\t\u002F**\n+\t\t * LP_Question_CURD constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->_error_messages = array(\n+\t\t\t\t'QUESTION_NOT_EXISTS' => __( 'The question does not exist.', 'learnpress' ),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create question and can add to quiz.\n+\t\t *\n+\t\t * @param $args\n+\t\t *\n+\t\t * @return bool|int|LP_Question|WP_Error\n+\t\t *\u002F\n+\t\tpublic function create( &$args ) {\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'quiz_id'        => 0,\n+\t\t\t\t\t'order'          => - 1,\n+\t\t\t\t\t'id'             => '',\n+\t\t\t\t\t'status'         => 'publish',\n+\t\t\t\t\t'type'           => 'true_or_false',\n+\t\t\t\t\t'title'          => __( 'New Question', 'learnpress' ),\n+\t\t\t\t\t'content'        => '',\n+\t\t\t\t\t'create_answers' => true,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F set question author for author of quiz\n+\t\t\tif ( ! empty( $args['quiz_id'] ) ) {\n+\t\t\t\t$user_id = get_post_field( 'post_author', $args['quiz_id'] );\n+\t\t\t} else {\n+\t\t\t\t$user_id = learn_press_get_current_user_id();\n+\t\t\t}\n+\n+\t\t\t$question_id = wp_insert_post(\n+\t\t\t\tarray(\n+\t\t\t\t\t'ID'           => $args['id'],\n+\t\t\t\t\t'post_author'  => $user_id,\n+\t\t\t\t\t'post_type'    => LP_QUESTION_CPT,\n+\t\t\t\t\t'post_status'  => $args['status'],\n+\t\t\t\t\t'post_title'   => $args['title'],\n+\t\t\t\t\t'post_content' => $args['content'],\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $question_id ) {\n+\t\t\t\t\u002F\u002F add default meta for new lesson\n+\t\t\t\t$default_meta = LP_Question::get_default_meta();\n+\n+\t\t\t\tif ( is_array( $default_meta ) ) {\n+\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\n+\t\t\t\t\t\tupdate_post_meta( $question_id, '_lp_' . $key, $value );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\tupdate_post_meta( $question_id, '_lp_type', $args['type'] );\n+\t\t\t\t\u002F\u002F update user memory question types\n+\t\t\t\tget_user_meta( $user_id, '_learn_press_memorize_question_types', $args['type'] );\n+\n+\t\t\t\t$question = LP_Question::get_question( $question_id, array( 'type' => $args['type'] ) );\n+\t\t\t\t$question->set_type( $args['type'] );\n+\n+\t\t\t\t\u002F\u002F add question to quiz\n+\t\t\t\tif ( ! empty( $args['quiz_id'] ) ) {\n+\t\t\t\t\t$quiz_curd = new LP_Quiz_CURD();\n+\t\t\t\t\t$quiz_curd->add_question( $args['quiz_id'], $question_id, $args['order'] );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $args['create_answers'] ) {\n+\t\t\t\t\t$question->create_default_answers();\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fafter-create-question', $question );\n+\n+\t\t\t\treturn $question;\n+\t\t\t}\n+\n+\t\t\treturn $question_id;\n+\t\t}\n+\n+\n+\t\tpublic function update( &$question ) {\n+\t\t\treturn $question;\n+\t\t\t\u002F\u002F TODO: Implement update() method.\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete all question's related data before run wp_delete_post(), hook to before delete question hook.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param object $question_id\n+\t\t *\u002F\n+\t\tpublic function delete( &$question_id ) {\n+\t\t\t\u002F\u002F remove all answer of question from {$wpdb->prefix}learnpress_question_answers table\n+\t\t\t$this->clear( $question_id );\n+\n+\t\t\t\u002F\u002F quiz curd\n+\t\t\t$curd = new LP_Quiz_CURD();\n+\n+\t\t\t\u002F\u002F allow hook\n+\t\t\tdo_action( 'learn-press\u002Fbefore-delete-question', $question_id );\n+\n+\t\t\t\u002F\u002F get the quizzes that a question is assigned to, return WP Post\n+\t\t\t$quiz = $this->get_quiz( $question_id );\n+\n+\t\t\t\u002F\u002F remove question from quiz\n+\t\t\tif ( $quiz ) {\n+\t\t\t\t$curd->remove_questions( $quiz->ID, $question_id );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate question.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param       $question_id\n+\t\t * @param array       $args\n+\t\t *\n+\t\t * @return mixed|WP_Error\n+\t\t *\u002F\n+\t\tpublic function duplicate( &$question_id, $args = array() ) {\n+\t\t\tif ( ! $question_id ) {\n+\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Oops! ID not found' );\n+\t\t\t}\n+\n+\t\t\tif ( learn_press_get_post_type( $question_id ) != LP_QUESTION_CPT ) {\n+\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Op! The question does not exist' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F ensure that user can create question\n+\t\t\tif ( ! current_user_can( 'edit_posts' ) ) {\n+\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Sorry! You do not have permission to duplicate this question' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F origin question\n+\t\t\t$question = LP_Question::get_question( $question_id );\n+\n+\t\t\t\u002F\u002F duplicate question\n+\t\t\t$new_question_id = learn_press_duplicate_post( $question_id, array( 'post_status' => 'publish' ) );\n+\n+\t\t\tif ( ! $new_question_id || is_wp_error( $new_question_id ) ) {\n+\t\t\t\treturn new WP_Error( 'lp\u002Fquestion\u002Fcurd\u002Fduplicate\u002Ferr', 'Sorry! Failed to duplicate the question!' );\n+\t\t\t} else {\n+\n+\t\t\t\t\u002F\u002F init new question\n+\t\t\t\t$new_question = LP_Question::get_question( $new_question_id );\n+\n+\t\t\t\t\u002F\u002F set data\n+\t\t\t\t$new_question->set_type( $question->get_type() );\n+\t\t\t\t$new_question->set_data( 'answer_options', $question->get_data( 'answer_options' ) );\n+\n+\t\t\t\t\u002F\u002F trigger change user memorize question types\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t\tupdate_user_meta( $user_id, '_learn_press_memorize_question_types', $new_question->get_type() );\n+\n+\t\t\t\t\u002F\u002F duplicate answer\n+\t\t\t\t$this->duplicate_answer( $question_id, $new_question_id );\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $question_id, $new_question_id, $args );\n+\n+\t\t\t\treturn $new_question_id;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate answer question.\n+\t\t *\n+\t\t * @param $question_id     | origin question\n+\t\t * @param $question_id_clone | new question\n+\t\t * @version 3.0.1\n+\t\t * @since 1.0.1\n+\t\t *\u002F\n+\t\tpublic function duplicate_answer( $question_id, $question_id_clone ) {\n+\t\t\t$lp_db                  = LP_Database::getInstance();\n+\t\t\t$lp_question_answers_db = LP_Question_Answers_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t\u002F\u002F Get all answer of question\n+\t\t\t\t$filter_get_answer_options               = new LP_Question_Answers_Filter();\n+\t\t\t\t$filter_get_answer_options->question_ids = [ $question_id ];\n+\t\t\t\t$answer_options                          = $lp_question_answers_db->get_question_answers( $filter_get_answer_options );\n+\n+\t\t\t\tif ( $answer_options ) {\n+\t\t\t\t\tforeach ( $answer_options as $answer_option ) {\n+\t\t\t\t\t\t$question_answer_id = $answer_option->question_answer_id;\n+\n+\t\t\t\t\t\t\u002F\u002F Insert new question_answer\n+\t\t\t\t\t\t$insert_question_answer_rs = $lp_db->wpdb->insert(\n+\t\t\t\t\t\t\t$lp_db->tb_lp_question_answers,\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'question_id' => $question_id_clone,\n+\t\t\t\t\t\t\t\t'title'       => ! empty( $answer_option->title ) ? $answer_option->title : '',\n+\t\t\t\t\t\t\t\t'value'       => ! empty( $answer_option->value ) ? $answer_option->value : '',\n+\t\t\t\t\t\t\t\t'is_true'     => ! empty( $answer_option->is_true ) ? $answer_option->is_true : '',\n+\t\t\t\t\t\t\t\t'order'       => $answer_option->order,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\tarray( '%d', '%s', '%s', '%s', '%s' )\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( ! $insert_question_answer_rs ) {\n+\t\t\t\t\t\t\tthrow new Exception( __( 'Failed to duplicate answer', 'learnpress' ) );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\u002F\u002F Get question_answer_id have just inserted\n+\t\t\t\t\t\t$filter_question_answer_id                      = new LP_Question_Answers_Filter();\n+\t\t\t\t\t\t$filter_question_answer_id->only_fields         = [ 'MAX(question_answer_id)' ];\n+\t\t\t\t\t\t$filter_question_answer_id->question_ids        = [ $question_id_clone ];\n+\t\t\t\t\t\t$filter_question_answer_id->return_string_query = true;\n+\t\t\t\t\t\t$question_answer_id_query                       = $lp_question_answers_db->get_question_answers( $filter_question_answer_id );\n+\t\t\t\t\t\t$question_answer_id_new                         = (int) $lp_question_answers_db->wpdb->get_var( $question_answer_id_query );\n+\n+\t\t\t\t\t\tif ( ! $question_answer_id_new ) {\n+\t\t\t\t\t\t\tthrow new Exception( __( 'Failed to duplicate answer', 'learnpress' ) );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\u002F\u002F Duplicate answer meta\n+\t\t\t\t\t\t\u002F\u002F Get answer meta by question_answer_id\n+\t\t\t\t\t\t$filter_get                   = new LP_Question_Answermeta_Filter();\n+\t\t\t\t\t\t$filter_get->collection       = $lp_db->tb_lp_question_answermeta;\n+\t\t\t\t\t\t$filter_get->collection_alias = 'qam';\n+\t\t\t\t\t\t$filter_get->field_count      = 'meta_id';\n+\t\t\t\t\t\t$filter_get->limit            = -1;\n+\t\t\t\t\t\t$filter_get->where[]          = $lp_db->wpdb->prepare( 'AND qam.learnpress_question_answer_id = %d', $question_answer_id );\n+\t\t\t\t\t\t$filter_get->fields           = $lp_db->get_cols_of_table( $lp_db->tb_lp_question_answermeta );\n+\t\t\t\t\t\t$question_answermeta_rs       = $lp_db->execute( $filter_get );\n+\n+\t\t\t\t\t\tforeach ( $question_answermeta_rs as $question_answermeta ) {\n+\t\t\t\t\t\t\t$lp_db->wpdb->insert(\n+\t\t\t\t\t\t\t\t$lp_db->tb_lp_question_answermeta,\n+\t\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t\t'learnpress_question_answer_id' => $question_answer_id_new,\n+\t\t\t\t\t\t\t\t\t'meta_key'   => $question_answermeta->meta_key,\n+\t\t\t\t\t\t\t\t\t'meta_value' => $question_answermeta->meta_value,\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\tarray( '%d', '%s', '%s' )\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param LP_Question $question\n+\t\t *\n+\t\t * @return bool\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load( &$question ) {\n+\t\t\t\u002F\u002F question id\n+\t\t\t$id = $question->get_id();\n+\n+\t\t\tif ( ! $id || ! in_array( learn_press_get_post_type( $id ), array( 'revision', LP_QUESTION_CPT ) ) ) {\n+\t\t\t\tthrow new Exception( sprintf( __( 'Invalid question with ID \"%d\".', 'learnpress' ), $id ) );\n+\t\t\t}\n+\n+\t\t\t$question->set_data_via_methods(\n+\t\t\t\tarray(\n+\t\t\t\t\t'explanation' => get_post_meta( $id, '_lp_explanation', true ),\n+\t\t\t\t\t'hint'        => get_post_meta( $id, '_lp_hint', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t\u002F\u002F $this->_load_answer_options( $question );\n+\t\t\t$this->_load_meta( $question );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $question | LP_Question\n+\t\t *\u002F\n+\t\tprotected function _load_meta( &$question ) {\n+\t\t\t$type = get_post_meta( $question->get_id(), '_lp_type', true );\n+\t\t\tif ( ! learn_press_is_support_question_type( $type ) ) {\n+\t\t\t\t$type = 'true_or_false';\n+\t\t\t}\n+\t\t\t\u002F\u002F $question->set_type( $type );\n+\n+\t\t\t$mark = $this->_get_question_mark( $question->get_id() );\n+\t\t\t$question->set_data_via_methods(\n+\t\t\t\tarray(\n+\t\t\t\t\t'mark' => $mark,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\tpublic function _get_question_mark( $question_id ) {\n+\n+\t\t\t\u002F\u002F Recheck _lp_mark @tungnx\n+\t\t\t$mark = get_post_meta( $question_id, '_lp_mark', true ) ? get_post_meta( $question_id, '_lp_mark', true ) : 0;\n+\n+\t\t\t$mark = abs( $mark );\n+\t\t\tif ( ! $mark ) {\n+\t\t\t\t$mark = apply_filters( 'learn-press\u002Fquestion\u002Fdefault-mark', 1, $question_id );\n+\t\t\t\tupdate_post_meta( $question_id, '_lp_mark', $mark );\n+\t\t\t}\n+\n+\t\t\treturn $mark;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the quizzes that a question is assigned to.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $question_id\n+\t\t *\n+\t\t * @return null|object WP_Post\n+\t\t *\u002F\n+\t\tpublic function get_quiz( $question_id ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t  \t\t\tSELECT post.* FROM {$wpdb->posts} post\n+\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions quiz ON post.ID = quiz.quiz_id\n+\t\t\t\tWHERE quiz.question_id = %d\n+\t\t\t\",\n+\t\t\t\t$question_id\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F get single row\n+\t\t\treturn $wpdb->get_row( $query );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Change question type.\n+\t\t *\n+\t\t * @param $question LP_Question\n+\t\t * @param $new_type\n+\t\t *\n+\t\t * @return false|void\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function change_question_type( &$question, $new_type ) {\n+\t\t\tif ( learn_press_get_post_type( $question->get_id() ) != LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$question_id = $question->get_id();\n+\n+\t\t\t\u002F\u002F If not new Question or not change type return\n+\t\t\t$old_type    = get_post_meta( $question_id, '_lp_type', true );\n+\t\t\tif ( ! empty( $old_type ) && $old_type === $new_type ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$answer_options = $question->get_data( 'answer_options' );\n+\t\t\tupdate_post_meta( $question_id, '_lp_type', $new_type );\n+\t\t\t$question->set_type( $new_type );\n+\n+\t\t\t$new_question = LP_Question::get_question( $question_id, array( 'force' => true ) );\n+\n+\t\t\tif ( $new_question ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t\tupdate_user_meta( $user_id, '_learn_press_memorize_question_types', $new_type );\n+\n+\t\t\t\tif ( $old_type == 'multi_choice' && $new_type == 'single_choice' ) {\n+\t\t\t\t\t$func = '_convert_answers_multi_choice_to_single_choice';\n+\t\t\t\t} elseif ( ( $old_type == 'multi_choice' || $old_type == 'single_choice' ) && 'true_or_false' == $new_type ) {\n+\t\t\t\t\t$func = '_convert_answers_to_true_or_false';\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F for rest, clear answer data and create default\n+\t\t\t\t\t$func = '_convert_default_answers';\n+\t\t\t\t}\n+\n+\t\t\t\tif ( is_callable( array( $this, $func ) ) ) {\n+\t\t\t\t\t$answer_options = call_user_func_array(\n+\t\t\t\t\t\tarray( $this, $func ),\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t$question,\n+\t\t\t\t\t\t\t$new_question,\n+\t\t\t\t\t\t\t$answer_options,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, $answer_options, 'learn-press\u002Fquestions' );\n+\t\t\t\t$new_question->set_data( 'answer_options', $answer_options );\n+\n+\t\t\t\t$question = $new_question;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update answer title\n+\t\t *\n+\t\t * @param $question_id\n+\t\t * @param $answer\n+\t\t *\n+\t\t * @return bool|false|int\n+\t\t *\u002F\n+\t\tpublic function update_answer_title( $question_id, $answer ) {\n+\t\t\tif ( get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t\u002F\u002F question data\n+\t\t\t$data = array(\n+\t\t\t\t'data'  => apply_filters(\n+\t\t\t\t\t'learn-press\u002Fquestion\u002Fupdate-answer-data',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'   => $answer['title'],\n+\t\t\t\t\t\t'value'   => $answer['value'] ?? '',\n+\t\t\t\t\t\t'is_true' => $answer['is_true'] ?? '',\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'where' => array(\n+\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\n+\t\t\t\t\t'question_id'        => $question_id,\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\t$update = $wpdb->update(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t$data['data'],\n+\t\t\t\t$data['where'],\n+\t\t\t\tarray( '%s', '%s', '%s' ),\n+\t\t\t\tarray( '%d', '%d' )\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Update for Fill in Blanks.\n+\t\t\tif ( ! empty( $answer['blanks'] ) ) {\n+\t\t\t\t$blanks = $answer['blanks'];\n+\n+\t\t\t\t\u002F*if ( is_array( $blanks ) ) {\n+\t\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\n+\t\t\t\t\tforeach ( $blanks as $id => $blank ) {\n+\t\t\t\t\t\t$question->_blanks[ $blank['id'] ] = $blank;\n+\t\t\t\t\t}\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\tlearn_press_update_question_answer_meta( $answer['question_answer_id'], '_blanks', $blanks );\n+\t\t\t}\n+\n+\t\t\treturn $update;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update correct answer.\n+\t\t *\n+\t\t * @param $question LP_Question\n+\t\t * @param $correct\n+\t\t *\n+\t\t * @return bool | LP_Question\n+\t\t *\u002F\n+\t\tpublic function change_correct_answer( $question, $correct ) {\n+\t\t\tif ( learn_press_get_post_type( $question->get_id() ) != LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$question_id      = $question->get_id();\n+\t\t\t$question_type    = $question->get_type();\n+\t\t\t$question_answers = $question->get_data( 'answer_options' );\n+\n+\t\t\t$db_args = $answers = array();\n+\n+\t\t\tforeach ( $question_answers as $index => $answer ) {\n+\n+\t\t\t\t$answer_data = array(\n+\t\t\t\t\t'title'   => $answer['title'],\n+\t\t\t\t\t'value'   => isset( $answer['value'] ) ? stripslashes( $answer['value'] ) : '',\n+\t\t\t\t\t'is_true' => isset( $answer['is_true'] ) ? $answer['is_true'] : '',\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F\u002F update correct for select answer\n+\t\t\t\tif ( $answer['question_answer_id'] == $correct['question_answer_id'] ) {\n+\t\t\t\t\t$answer_data['is_true'] = $correct['is_true'];\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F untrue all rest answer with True or false and Single choice question\n+\t\t\t\t\tif ( in_array( $question_type, array( 'true_or_false', 'single_choice' ) ) ) {\n+\t\t\t\t\t\t$answer_data['is_true'] = '';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F question answers data to set cache\n+\t\t\t\t$answers[ $index ] = array(\n+\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\n+\t\t\t\t\t'question_id'        => $question_id,\n+\t\t\t\t\t'order'              => $answer['order'],\n+\t\t\t\t\t'title'              => $answer_data['title'],\n+\t\t\t\t\t'value'              => $answer_data['value'],\n+\t\t\t\t\t'is_true'            => $answer_data['is_true'],\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F\u002F new answers data\n+\t\t\t\t$db_args[ $index ] = array(\n+\t\t\t\t\t'data'  => array(\n+\t\t\t\t\t\t'title'   => $answer_data['title'],\n+\t\t\t\t\t\t'value'   => $answer_data['value'],\n+\t\t\t\t\t\t'is_true' => $answer_data['is_true'],\n+\t\t\t\t\t),\n+\t\t\t\t\t'where' => array(\n+\t\t\t\t\t\t'question_answer_id' => $answer['question_answer_id'],\n+\t\t\t\t\t\t'question_id'        => $question_id,\n+\t\t\t\t\t\t'order'              => $answer['order'],\n+\t\t\t\t\t),\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F update db\n+\t\t\tforeach ( $db_args as $id => $arg ) {\n+\t\t\t\t$wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\t$arg['data'],\n+\t\t\t\t\t$arg['where'],\n+\t\t\t\t\tarray( '%s', '%s', '%s' ),\n+\t\t\t\t\tarray( '%d', '%d', '%d' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F set question answer data\n+\t\t\t$question->set_data( 'answer_options', $answers );\n+\n+\t\t\treturn $question;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sort answers.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param       $question_id\n+\t\t * @param array       $order\n+\t\t *\n+\t\t * @return bool|LP_Question\n+\t\t *\u002F\n+\t\tpublic function sort_answers( $question_id, $order = array() ) {\n+\n+\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( $order ) {\n+\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t\t$answers  = $question->get_data( 'answer_options' );\n+\n+\t\t\t\tglobal $wpdb;\n+\t\t\t\t$new_answers = array();\n+\t\t\t\tforeach ( $order as $index => $answer_id ) {\n+\t\t\t\t\t$wpdb->update(\n+\t\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\t\tarray( 'order' => $index + 1 ),\n+\t\t\t\t\t\tarray( 'question_answer_id' => $answer_id )\n+\t\t\t\t\t);\n+\n+\t\t\t\t\t$new_answers[ $answer_id ] = $answers[ $answer_id ];\n+\t\t\t\t}\n+\n+\t\t\t\t$question->set_data( 'answer_options', $new_answers );\n+\n+\t\t\t\treturn $question;\n+\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete question answer.\n+\t\t *\n+\t\t * @param $question_id\n+\t\t * @param $answer_id\n+\t\t * @param $force\n+\t\t *\n+\t\t * @return bool|false|int\n+\t\t *\u002F\n+\t\tpublic function delete_answer( $question_id, $answer_id, $force = false ) {\n+\n+\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$question = LP_Question::get_question( $question_id );\n+\n+\t\t\t\u002F\u002F exist answer options\n+\t\t\t$answers = $question->get_data( 'answer_options' );\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t\u002F\u002F Delete answer meta\n+\t\t\t$wpdb->delete(\n+\t\t\t\t$wpdb->learnpress_question_answermeta,\n+\t\t\t\tarray( 'learnpress_question_answer_id' => $answer_id )\n+\t\t\t);\n+\n+\t\t\t$delete = $wpdb->delete(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\tarray( 'question_answer_id' => $answer_id )\n+\t\t\t);\n+\t\t\tif ( $delete ) {\n+\t\t\t\tunset( $answers[ $answer_id ] );\n+\t\t\t\t$question->set_data( 'answer_options', $answers );\n+\n+\t\t\t\t$this->sort_answers( $question_id, array_keys( $answers ) );\n+\t\t\t}\n+\n+\t\t\treturn $delete;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add new answer.\n+\t\t *\n+\t\t * @param $question_id\n+\t\t * @param $new_answer\n+\t\t *\n+\t\t * @return bool|false|int\n+\t\t *\u002F\n+\t\tpublic function new_answer( $question_id, $new_answer ) {\n+\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$question = LP_Question::get_question( $question_id );\n+\n+\t\t\t\u002F\u002F exist answer options\n+\t\t\t$answers = $question->get_data( 'answer_options' );\n+\t\t\t\u002F\u002F number answer options\n+\t\t\t$number = count( $answers );\n+\n+\t\t\tif ( $question->get_type() === 'sorting_choice' ) {\n+\t\t\t\t$new_answer['is_true'] = 'yes';\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$new_answer = wp_parse_args(\n+\t\t\t\t$new_answer,\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_id' => $question_id,\n+\t\t\t\t\t'title'       => '',\n+\t\t\t\t\t'value'       => learn_press_random_value(),\n+\t\t\t\t\t'is_true'     => '',\n+\t\t\t\t\t'order'       => $number + 1,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$insert = $wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t$new_answer,\n+\t\t\t\tlearn_press_map_columns_format(\n+\t\t\t\t\t$new_answer,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'question_id' => '%d',\n+\t\t\t\t\t\t'title'       => '%s',\n+\t\t\t\t\t\t'value'       => '%s',\n+\t\t\t\t\t\t'is_true'     => '%s',\n+\t\t\t\t\t\t'order'       => '%d',\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $insert ) {\n+\t\t\t\t$new_answer['question_answer_id'] = $wpdb->insert_id;\n+\n+\t\t\t\tif ( is_array( $answers ) ) {\n+\t\t\t\t\t$answers = array_merge( $answers, array( $new_answer ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$answers = array( $new_answer );\n+\t\t\t\t}\n+\t\t\t\t$question->set_data( 'answer_options', $answers );\n+\t\t\t}\n+\n+\t\t\treturn $wpdb->insert_id;\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Convert answers to true or false question.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $question\n+\t\t * @param $new_question\n+\t\t * @param $answers\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tprotected function _convert_answers_to_true_or_false( $question, $new_question, $answers ) {\n+\t\t\tif ( is_array( $answers ) ) {\n+\t\t\t\t\u002F\u002F array answer ids\n+\t\t\t\t$answer_ids = array_keys( $answers );\n+\n+\t\t\t\tif ( sizeof( $answers ) > 2 ) {\n+\t\t\t\t\tglobal $wpdb;\n+\n+\t\t\t\t\tforeach ( $answers as $key => $answer ) {\n+\t\t\t\t\t\tif ( array_search( $key, $answer_ids ) > 1 ) {\n+\t\t\t\t\t\t\t$wpdb->delete(\n+\t\t\t\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\t\t\t\tarray( 'question_answer_id' => $answer['question_answer_id'] )\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$answers = array_slice( $answers, 0, 2, true );\n+\t\t\t\t}\n+\n+\t\t\t\t$correct = 0;\n+\t\t\t\tforeach ( $answers as $key => $answer ) {\n+\t\t\t\t\tif ( $answer['is_true'] == 'yes' ) {\n+\t\t\t\t\t\t$correct += 1;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $correct ) {\n+\t\t\t\t\t\u002F\u002F for single choice deletes all correct, set first option is correct\n+\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'yes';\n+\t\t\t\t} elseif ( $correct == 2 ) {\n+\t\t\t\t\t\u002F\u002F for multiple choice keeps all correct, remove all correct and keep first option\n+\t\t\t\t\t$answers[ $answer_ids[1] ]['is_true'] = 'no';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * Convert answers for multi choice to single choice question.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $question\n+\t\t * @param $new_question\n+\t\t * @param $answers\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _convert_answers_multi_choice_to_single_choice( $question, $new_question, $answers ) {\n+\t\t\tif ( is_array( $answers ) ) {\n+\t\t\t\t\u002F\u002F array answer ids\n+\t\t\t\t$answer_ids = array_keys( $answers );\n+\n+\t\t\t\t$correct = 0;\n+\t\t\t\tforeach ( $answers as $key => $answer ) {\n+\t\t\t\t\tif ( $answer['is_true'] == 'yes' ) {\n+\t\t\t\t\t\t$correct += 1;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $correct ) {\n+\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'yes';\n+\t\t\t\t} elseif ( $correct > 1 ) {\n+\t\t\t\t\t\u002F\u002F remove all correct and keep first option\n+\t\t\t\t\t$answers[ $answer_ids[0] ]['is_true'] = 'no';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Convert default answers.\n+\t\t *\n+\t\t * @param $question     LP_Question\n+\t\t * @param $new_question LP_Question\n+\t\t * @param $answers\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _convert_default_answers( $question, $new_question, $answers ) {\n+\t\t\t$question_id = $question->get_id();\n+\t\t\t\u002F\u002F clear all exists answer\n+\t\t\t$this->clear( $question_id );\n+\t\t\t\u002F\u002F set default answer\n+\t\t\t$answer_options = $new_question->get_default_answers();\n+\n+\t\t\tif ( is_array( $answer_options ) ) {\n+\t\t\t\tforeach ( $answer_options as $index => $answer ) {\n+\t\t\t\t\t$insert        = array(\n+\t\t\t\t\t\t'question_id' => $question_id,\n+\t\t\t\t\t\t'title'       => $answer['title'],\n+\t\t\t\t\t\t'value'       => isset( $answer['value'] ) ? stripslashes( $answer['value'] ) : '',\n+\t\t\t\t\t\t'is_true'     => ( $answer['is_true'] == 'yes' ) ? $answer['is_true'] : '',\n+\t\t\t\t\t\t'order'       => $index + 1,\n+\t\t\t\t\t);\n+\t\t\t\t\t$new_answers[] = $this->add_answer( $new_question->get_type(), $insert );\n+\t\t\t\t};\n+\n+\t\t\t\treturn $new_answers;\n+\t\t\t}\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add question answer.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param string $question_type\n+\t\t * @param array  $args\n+\t\t *\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\tpublic function add_answer( $question_type = '', $args = array() ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$question = LP_Question::get_question( $args['question_id'], array( 'type' => $question_type ) );\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_id' => $args['question_id'],\n+\t\t\t\t\t'title'       => $args['title'],\n+\t\t\t\t\t'value'       => $args['value'],\n+\t\t\t\t\t'is_true'     => $args['is_true'],\n+\t\t\t\t\t'order'       => $args['order'],\n+\t\t\t\t),\n+\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\n+\t\t\t);\n+\n+\t\t\t$question_answer_id = $wpdb->insert_id;\n+\t\t\tif ( $question_answer_id ) {\n+\t\t\t\t\u002F\u002F update question answer option data\n+\t\t\t\t$answer_options = $question->get_data( 'answer_options' ) ? $question->get_data( 'answer_options' ) : array();\n+\n+\t\t\t\t$new_answer_option_data = array(\n+\t\t\t\t\t'question_answer_id' => $question_answer_id,\n+\t\t\t\t\t'question_id'        => $args['question_id'],\n+\t\t\t\t\t'order'              => $args['order'],\n+\t\t\t\t\t'title'              => $args['title'],\n+\t\t\t\t\t'value'              => $args['value'],\n+\t\t\t\t\t'is_true'            => $args['is_true'],\n+\t\t\t\t);\n+\n+\t\t\t\tif ( ! $answer_options ) {\n+\t\t\t\t\t$question->set_data( 'answer_options', array( $new_answer_option_data ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$answer_options[] = $new_answer_option_data;\n+\t\t\t\t\t$question->set_data( 'answer_options', $answer_options );\n+\t\t\t\t}\n+\n+\t\t\t\treturn $new_answer_option_data;\n+\t\t\t} else {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete question answer.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $question_id\n+\t\t * @param $answer_id\n+\t\t *\n+\t\t * @return bool|false|int\n+\t\t *\u002F\n+\t\tpublic function delete_question_answer( $question_id, $answer_id ) {\n+\t\t\tif ( learn_press_get_post_type( $question_id ) !== LP_QUESTION_CPT || ! $answer_id ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$result = $wpdb->delete(\n+\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\tarray( 'question_answer_id' => $answer_id )\n+\t\t\t);\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete all question answers.\n+\t\t *\n+\t\t * @param $question_id\n+\t\t *\n+\t\t * @return bool|WP_Error\n+\t\t *\u002F\n+\t\tpublic function clear( $question_id ) {\n+\n+\t\t\tif ( ! learn_press_get_question( $question_id ) ) {\n+\t\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fbefore-clear-question', $question_id );\n+\n+\t\t\tglobal $wpdb;\n+\t\t\t$wpdb->delete( $wpdb->learnpress_question_answers, array( 'question_id' => $question_id ) );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load answer options for the question from database.\n+\t\t * Load from cache if data is already loaded into cache.\n+\t\t * Otherwise, load from database and put to cache.\n+\t\t *\n+\t\t * @param int $question_id\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _read_answers( $question_id ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT question_answer_id, title, value, is_true\n+\t\t\t\tFROM {$wpdb->prefix}learnpress_question_answers\n+\t\t\t\tWHERE question_id = %d\n+\t\t\t\tORDER BY `order` ASC\n+\t\t\t\",\n+\t\t\t\t$question_id\n+\t\t\t);\n+\n+\t\t\t$answer_options = array();\n+\n+\t\t\t$results = $wpdb->get_results( $query );\n+\n+\t\t\tif ( $results ) {\n+\t\t\t\tforeach ( $results as $k => $v ) {\n+\t\t\t\t\t$answer_option = array(\n+\t\t\t\t\t\t'question_answer_id' => absint( $v->question_answer_id ),\n+\t\t\t\t\t\t'title'              => $v->title,\n+\t\t\t\t\t\t'value'              => $v->value,\n+\t\t\t\t\t\t'is_true'            => $v->is_true,\n+\t\t\t\t\t\t'order'              => $k + 1, \u002F\u002F Need???\n+\t\t\t\t\t);\n+\n+\t\t\t\t\t$answer_options[ $v->question_answer_id ] = $answer_option;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $answer_options;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load question answers\n+\t\t *\n+\t\t * @updated 3.1.0\n+\t\t *\n+\t\t * @param array|int $question_id\n+\t\t *\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\tpublic function load_answer_options( $question_id ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$return_id = 0;\n+\n+\t\t\tif ( is_array( $question_id ) ) {\n+\n+\t\t\t\tforeach ( $question_id as $q_id ) {\n+\t\t\t\t\t$this->load_answer_options( $q_id );\n+\t\t\t\t\tif ( ! $return_id ) {\n+\t\t\t\t\t\t$return_id = $q_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$question_id = $return_id;\n+\t\t\t}\n+\n+\t\t\t$answer_options = LP_Object_Cache::get( 'question-' . $question_id, 'question-answers' );\n+\n+\t\t\tif ( false === $answer_options ) {\n+\t\t\t\t$answer_options = $this->_read_answers( $question_id );\n+\t\t\t\tLP_Object_Cache::set( 'question-' . $question_id, $answer_options, 'question-answers' );\n+\t\t\t}\n+\n+\t\t\treturn $answer_options;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-quiz-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-quiz-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-quiz-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-quiz-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,749 +1,749 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz_CURD.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FCURD\r\n- * @since   3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! function_exists( 'LP_Quiz_CURD' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Quiz_CURD\r\n-\t *\r\n-\t * Class to manipulating quiz with database.\r\n-\t *\u002F\r\n-\tclass LP_Quiz_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Quiz_CURD constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->_error_messages = array(\r\n-\t\t\t\t'QUIZ_NOT_EXISTS' => __( 'The quiz does not exist.', 'learnpress' ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param LP_Quiz $quiz\r\n-\t\t *\r\n-\t\t * @return LP_Quiz|mixed\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load( &$quiz ) {\r\n-\t\t\t$id = $quiz->get_id();\r\n-\t\t\tif ( ! $id || learn_press_get_post_type( $id ) !== LP_QUIZ_CPT ) {\r\n-\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Invalid quiz with ID \"%d\".', 'learnpress' ), $id ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F LP_Helper_CURD::update_meta_cache( $quiz->get_id() );\r\n-\r\n-\t\t\t$quiz->set_data_via_methods(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t\u002F\u002F 'show_result'          => get_post_meta( $quiz->get_id(), '_lp_show_result', true ),\r\n-\t\t\t\t\t'passing_grade_type'   => get_post_meta( $quiz->get_id(), '_lp_passing_grade_type', true ),\r\n-\t\t\t\t\t'passing_grade'        => get_post_meta( $quiz->get_id(), '_lp_passing_grade', true ),\r\n-\t\t\t\t\t\u002F\u002F 'show_check_answer'    => get_post_meta( $quiz->get_id(), '_lp_show_check_answer', true ),\r\n-\t\t\t\t\t\u002F\u002F 'count_check_answer'   => get_post_meta( $quiz->get_id(), '_lp_check_answer_count', true ),\r\n-\t\t\t\t\t\u002F\u002F 'show_hint'            => get_post_meta( $quiz->get_id(), '_lp_show_hint', true ),\r\n-\t\t\t\t\t\u002F\u002F 'archive_history'      => get_post_meta( $quiz->get_id(), '_lp_archive_history', true ),\r\n-\t\t\t\t\t\u002F\u002F 'count_hint'           => get_post_meta( $quiz->get_id(), '_lp_hint_count', true ),\r\n-\t\t\t\t\t'pagination'           => get_post_meta( $quiz->get_id(), '_lp_pagination', true ),\r\n-\t\t\t\t\t'review_questions'     => get_post_meta( $quiz->get_id(), '_lp_review', true ),\r\n-\t\t\t\t\t'show_correct_review'  => get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ),\r\n-\t\t\t\t\t'preview'              => get_post_meta( $quiz->get_id(), '_lp_preview', true ),\r\n-\t\t\t\t\t\u002F\u002F 'minus_points'         => get_post_meta( $quiz->get_id(), '_lp_minus_points', true ),\r\n-\t\t\t\t\t'minus_skip_questions' => get_post_meta( $quiz->get_id(), '_lp_minus_skip_questions', true ),\r\n-\r\n-\t\t\t\t\t'instant_check'        => get_post_meta( $quiz->get_id(), '_lp_instant_check', true ),\r\n-\t\t\t\t\t'negative_marking'     => get_post_meta( $quiz->get_id(), '_lp_negative_marking', true ),\r\n-\t\t\t\t\t'retake_count'         => get_post_meta( $quiz->get_id(), '_lp_retake_count', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $quiz;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create quiz, with default meta.\r\n-\t\t *\r\n-\t\t * @param  $args\r\n-\t\t *\r\n-\t\t * @return int|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function create( &$args ) {\r\n-\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'      => '',\r\n-\t\t\t\t\t'status'  => 'publish',\r\n-\t\t\t\t\t'title'   => __( 'New Quiz', 'learnpress' ),\r\n-\t\t\t\t\t'content' => '',\r\n-\t\t\t\t\t'author'  => learn_press_get_current_user_id(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$quiz_id = wp_insert_post(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ID'           => $args['id'],\r\n-\t\t\t\t\t'post_type'    => LP_QUIZ_CPT,\r\n-\t\t\t\t\t'post_status'  => $args['status'],\r\n-\t\t\t\t\t'post_title'   => $args['title'],\r\n-\t\t\t\t\t'post_content' => $args['content'],\r\n-\t\t\t\t\t'post_author'  => $args['author'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $quiz_id ) {\r\n-\t\t\t\t\u002F\u002F add default meta for new lesson\r\n-\t\t\t\t$default_meta = LP_Quiz::get_default_meta();\r\n-\r\n-\t\t\t\tif ( is_array( $default_meta ) ) {\r\n-\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\r\n-\t\t\t\t\t\tupdate_post_meta( $quiz_id, '_lp_' . $key, $value );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $quiz_id;\r\n-\t\t}\r\n-\r\n-\t\tpublic function update( &$quiz ) {\r\n-\t\t\t\u002F\u002F TODO: Implement update() method.\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete quiz.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param object $quiz_id\r\n-\t\t *\u002F\r\n-\t\tpublic function delete( &$quiz_id ) {\r\n-\t\t\t\u002F\u002F course curd\r\n-\t\t\t$curd = new LP_Course_CURD();\r\n-\r\n-\t\t\t\u002F\u002F allow hook\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-delete-quiz', $quiz_id );\r\n-\r\n-\t\t\t\u002F\u002F remove quiz from course items\r\n-\t\t\t$curd->remove_item( $quiz_id );\r\n-\t\t\t\u002F\u002F remove questions from quiz\r\n-\t\t\t$this->remove_questions( $quiz_id, '', true );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate quiz.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param       $quiz_id_origin\r\n-\t\t * @param array   $args\r\n-\t\t *\r\n-\t\t * @return mixed|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function duplicate( &$quiz_id_origin, $args = array() ) {\r\n-\t\t\t$quiz_id_new = 0;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! $quiz_id_origin ) {\r\n-\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fid_null', 'Op! Quiz ID not found' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( learn_press_get_post_type( $quiz_id_origin ) != LP_QUIZ_CPT ) {\r\n-\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Ftype_invalid', 'Op! The quiz does not exist' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Ensure that user can create quiz\r\n-\t\t\t\tif ( ! current_user_can( 'edit_posts' ) ) {\r\n-\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fpermission', 'Sorry! You have not permission to duplicate this quiz' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Duplicate quiz\r\n-\t\t\t\t$quiz_id_new = learn_press_duplicate_post( $quiz_id_origin, $args, true );\r\n-\r\n-\t\t\t\tif ( ! $quiz_id_new || is_wp_error( $quiz_id_new ) ) {\r\n-\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fclone_error', 'Sorry! Failed to duplicate quiz!' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F duplicate questions.\r\n-\t\t\t\t\t$this->duplicate_questions( $quiz_id_origin, $quiz_id_new );\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $quiz_id_origin, $quiz_id_new, $args );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $quiz_id_new;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Duplicate questions.\r\n-\t\t *\r\n-\t\t * @param int $quiz_id_origin\r\n-\t\t * @param int $quiz_id_new\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function duplicate_questions( int $quiz_id_origin, int $quiz_id_new ) {\r\n-\t\t\t$question_curd = new LP_Question_CURD();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$quiz_origin = learn_press_get_quiz( $quiz_id_origin );\r\n-\t\t\t\tif ( ! $quiz_origin ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$questions_origin = $quiz_origin->get_question_ids();\r\n-\r\n-\t\t\t\tforeach ( $questions_origin as $question_id_origin ) {\r\n-\t\t\t\t\t$can_clone = true;\r\n-\t\t\t\t\t$args      = compact( 'question_id_origin', 'quiz_origin', 'quiz_id_new' );\r\n-\t\t\t\t\t$can_clone = apply_filters( 'lp\u002Fquiz\u002Fquestion\u002Fcan-clone', $can_clone, $args );\r\n-\r\n-\t\t\t\t\tif ( ! $can_clone ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F duplicate question\r\n-\t\t\t\t\t$question_id_new = $question_curd->duplicate( $question_id_origin, array( 'post_status' => 'publish' ) );\r\n-\r\n-\t\t\t\t\tif ( ! $question_id_new || is_wp_error( $question_id_new ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F add duplicate question to new quiz\r\n-\t\t\t\t\t$this->add_question( $quiz_id_new, $question_id_new );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param LP_Quiz $quiz\r\n-\t\t *\r\n-\t\t * @deprecated 4.1.7\r\n-\t\t *\u002F\r\n-\t\t\u002F*protected function _load_questions( &$quiz ) {\r\n-\t\t\t$id        = $quiz->get_id();\r\n-\t\t\t$questions = LP_Object_Cache::get( 'questions-' . $id, 'learn-press\u002Fquizzes' );\r\n-\r\n-\t\t\tif ( false === $questions || $quiz->get_no_cache() ) {\r\n-\t\t\t\t$this->load_questions( $quiz->get_id() );\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Read question of a quiz from database\r\n-\t\t *\r\n-\t\t * @param int    $quiz_id\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function read_questions( $quiz_id, $context = 'display' ) {\r\n-\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\r\n-\r\n-\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $quiz->get_question_ids( $context );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Read all question ids of a quiz.\r\n-\t\t *\r\n-\t\t * @param int    $quiz_id\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function read_question_ids( int $quiz_id = 0, string $context = 'display' ): array {\r\n-\t\t\t$lp_question_db = LP_Question_DB::getInstance();\r\n-\t\t\t$question_ids   = [];\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\r\n-\t\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\t\treturn array();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $context === 'display' ) {\r\n-\t\t\t\t\t$statuses = array( 'publish' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$statuses = array( 'publish', 'draft', 'auto-draft' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$filter          = new LP_Question_Filter();\r\n-\t\t\t\t$filter->ID = $quiz_id;\r\n-\t\t\t\t$filter->post_status = $statuses;\r\n-\r\n-\t\t\t\t$question_ids = $lp_question_db->get_list_question_ids_of_quiz( $filter );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $question_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.1.7\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function update_question_ids( $quiz_id ) {\r\n-\t\t\twp_cache_delete( 'quiz-' . $quiz_id, 'quiz-questions' );\r\n-\r\n-\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\r\n-\r\n-\t\t\tif ( $quiz ) {\r\n-\t\t\t\t$question_ids = $quiz->get_question_ids();\r\n-\t\t\t} else {\r\n-\t\t\t\t$question_ids = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_post_meta( $quiz_id, '_questions', $question_ids );\r\n-\t\t\tupdate_post_meta( $quiz_id, '_question_count', sizeof( $question_ids ) );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz ids that contains a question.\r\n-\t\t *\r\n-\t\t * @since 3.1.0\r\n-\t\t *\r\n-\t\t * @param int $question_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz_by_question( $question_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT ID\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tINNER JOIN {$wpdb->learnpress_quiz_questions} qq ON qq.quiz_id = p.ID\r\n-\t\t\t\tWHERE qq.question_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t$question_id\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $wpdb->get_col( $query );\r\n-\t\t}\r\n-\r\n-\t\tpublic function load_questions( $quiz_id ) {\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( is_array( $quiz_id ) ) {\r\n-\t\t\t\tforeach ( $quiz_id as $q_id ) {\r\n-\t\t\t\t\t$this->load_questions( $q_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT ID, post_title, post_content, post_status, post_type, post_author, post_date, post_name\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id\r\n-\t\t\t\tWHERE qq.quiz_id = %d\r\n-\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\tORDER BY question_order, quiz_question_id ASC\r\n-\t\t\t\",\r\n-\t\t\t\t$quiz_id,\r\n-\t\t\t\t'publish'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$question_ids = array();\r\n-\t\t\t$results      = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( $results ) {\r\n-\t\t\t\tforeach ( $results as $k => $v ) {\r\n-\t\t\t\t\tsettype( $v, 'object' );\r\n-\t\t\t\t\twp_cache_set( $v->ID, $v, 'posts' );\r\n-\r\n-\t\t\t\t\t$question_ids[] = $v->ID;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Object_Cache::set( 'questions-' . $quiz_id, $question_ids, 'learn-press\u002Fquizzes' );\r\n-\r\n-\t\t\t\u002F\u002F LP_Helper_CURD::cache_posts( $question_ids );\r\n-\t\t\t$question_factory = new LP_Question_CURD();\r\n-\t\t\t$question_factory->load_answer_options( $question_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sort questions by order.\r\n-\t\t * Check in an array of questions if there is a key 'order'.\r\n-\t\t *\r\n-\t\t * @param $questions\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tprotected function _maybe_sort_questions( &$questions ) {\r\n-\t\t\tif ( ! $questions ) {\r\n-\t\t\t\treturn $questions;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$first = reset( $questions );\r\n-\r\n-\t\t\tif ( empty( $first['order'] ) ) {\r\n-\t\t\t\treturn $questions;\r\n-\t\t\t}\r\n-\r\n-\t\t\tuasort( $questions, array( $this, '_callback_sort_questions' ) );\r\n-\r\n-\t\t\treturn $questions;\r\n-\t\t}\r\n-\r\n-\t\tpublic function _callback_sort_questions( $a, $b ) {\r\n-\t\t\treturn $a['order'] > $b['order'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Reorder question by indexed number.\r\n-\t\t *\r\n-\t\t * @param LP_Quiz|WP_Post|int $the_quiz\r\n-\t\t * @param mixed               $questions\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function reorder_questions( $the_quiz, $questions = false ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\t\tif ( ! $the_quiz ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( false == $questions ) {\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\tSELECT quiz_question_id as id\r\n-\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\tWHERE quiz_id = %d\r\n-\t\t\t\tORDER BY question_order ASC\r\n-\t\t\t\",\r\n-\t\t\t\t\t$the_quiz->get_id()\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$rows = $wpdb->get_results( $query );\r\n-\r\n-\t\t\t\tif ( $rows ) {\r\n-\t\t\t\t\t$update = array();\r\n-\t\t\t\t\t$ids    = wp_list_pluck( $rows, 'id' );\r\n-\t\t\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\r\n-\t\t\t\t\tforeach ( $rows as $order => $row ) {\r\n-\t\t\t\t\t\t$update[] = $wpdb->prepare( 'WHEN quiz_question_id = %d THEN %d', $row->id, $order + 1 );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\t\t\t\tSET question_order = CASE\r\n-\t\t\t\t\t\t\t\" . join( \"\\n\", $update ) . '\r\n-\t\t\t\t\t\t\tELSE question_order END\r\n-\t\t\t\t\t\t\tWHERE quiz_question_id IN(' . join( ',', $format ) . ')\r\n-\t\t\t\t\t\t',\r\n-\t\t\t\t\t\t$ids\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\treturn $wpdb->query( $query );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$query = \"\r\n-\t\t\t\tUPDATE {$wpdb->learnpress_quiz_questions}\r\n-\t\t\t\tSET question_order = CASE\r\n-\t\t\t\";\r\n-\t\t\t\tfor ( $order = 0, $n = sizeof( $questions ); $order \u003C $n; $order ++ ) {\r\n-\t\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_id = %d THEN %d', $questions[ $order ], $order + 1 ) . \"\\n\";\r\n-\t\t\t\t}\r\n-\t\t\t\t$query .= sprintf( 'ELSE question_order END WHERE quiz_id = %d', $the_quiz->get_id() );\r\n-\r\n-\t\t\t\treturn $wpdb->query( $query );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all questions in a quiz\r\n-\t\t *\r\n-\t\t * @param LP_Quiz $the_quiz\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_questions( $the_quiz ) {\r\n-\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\t\tif ( ! $the_quiz ) {\r\n-\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn LP_Object_Cache::get( 'questions-' . $the_quiz->get_id(), 'learn-press\u002Fquizzes' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add existing question into quiz.\r\n-\t\t *\r\n-\t\t * @param LP_Quiz|int $the_quiz\r\n-\t\t * @param             $question_id\r\n-\t\t * @param array       $args\r\n-\t\t *\r\n-\t\t * @return mixed false on failed\r\n-\t\t *\u002F\r\n-\t\tpublic function add_question( $the_quiz, $question_id, $args = array() ) {\r\n-\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\t\tif ( ! $the_quiz ) {\r\n-\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = learn_press_get_question( $question_id );\r\n-\r\n-\t\t\tif ( ! $question ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->is_exists_question( $the_quiz->get_id(), $question_id ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F list exist quiz question\r\n-\t\t\t\u002F\u002F$list_questions = $this->get_questions( $the_quiz );\r\n-\t\t\t\u002F\u002F add new question and set to cache\r\n-\t\t\t\u002F\u002F$list_questions[ $question_id ] = strval( $question_id );\r\n-\t\t\t\u002F\u002FLP_Object_Cache::set( 'questions-' . $the_quiz->get_id(), $list_questions, 'learn-press\u002Fquizzes' );\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$id   = $the_quiz->get_id();\r\n-\t\t\t$args = wp_parse_args( $args, array( 'order' => - 1 ) );\r\n-\r\n-\t\t\tif ( $args['order'] >= 0 ) {\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\t\t\tSET question_order = question_order + 1\r\n-\t\t\t\t\t\tWHERE quiz_id = %d AND question_order >= %d\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$id,\r\n-\t\t\t\t\t$args['order']\r\n-\t\t\t\t);\r\n-\t\t\t\t$wpdb->get_results( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\tSELECT max(question_order) + 1 as ordering\r\n-\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\tWHERE quiz_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t\t$id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$order = $wpdb->get_var( $query );\r\n-\r\n-\t\t\t\tif ( ! $order ) {\r\n-\t\t\t\t\t$order = 1;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$args['order'] = $order;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$inserted = $wpdb->insert(\r\n-\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'quiz_id'        => $id,\r\n-\t\t\t\t\t'question_id'    => $question_id,\r\n-\t\t\t\t\t'question_order' => $args['order'],\r\n-\t\t\t\t),\r\n-\t\t\t\tarray( '%d', '%d', '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$return = $inserted ? $wpdb->insert_id : $inserted;\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fquiz-added-question', $inserted, $question_id, $the_quiz->get_id() );\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a question (or batch of questions) is already added to quiz.\r\n-\t\t *\r\n-\t\t * @param int       $the_id\r\n-\t\t * @param int|array $ids\r\n-\t\t *\r\n-\t\t * @return array|bool|null|object\r\n-\t\t *\u002F\r\n-\t\tpublic function is_exists_question( $the_id, $ids ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tsettype( $ids, 'array' );\r\n-\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\r\n-\t\t\t$questions_ids = implode( ', ', $ids );\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\tSELECT quiz_question_id\r\n-\t\t\tFROM {$wpdb->learnpress_quiz_questions}\r\n-\t\t\tWHERE question_id IN( \" . join( ',', $format ) . ' )\r\n-\t\t\t\tAND quiz_id = %d\r\n-\t\t',\r\n-\t\t\t\t$questions_ids,\r\n-\t\t\t\t$the_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$results = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( $results ) {\r\n-\t\t\t\treturn $results;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update order question in quiz.\r\n-\t\t *\r\n-\t\t * @param $order\r\n-\t\t *\r\n-\t\t * @return false|int\r\n-\t\t *\u002F\r\n-\t\tpublic function sort_questions( $order ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tforeach ( $order as $index => $question_id ) {\r\n-\t\t\t\t$update = $wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_quiz_questions,\r\n-\t\t\t\t\tarray( 'question_order' => $index + 1 ),\r\n-\t\t\t\t\tarray( 'question_id' => $question_id ),\r\n-\t\t\t\t\tarray( '%d' ),\r\n-\t\t\t\t\tarray( '%d' )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( $update === false ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove question from quiz.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param      $quiz_id\r\n-\t\t * @param      $question_id\r\n-\t\t * @param bool        $force | remove all questions from quiz\r\n-\t\t *\r\n-\t\t * @return bool|false|int|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function remove_questions( $quiz_id, $question_id, $force = false ) {\r\n-\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\r\n-\r\n-\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( $force ) {\r\n-\t\t\t\t\u002F\u002F remove all questions from quiz\r\n-\t\t\t\t$delete = $wpdb->delete(\r\n-\t\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\r\n-\t\t\t\t\tarray( 'quiz_id' => $quiz_id ),\r\n-\t\t\t\t\tarray( '%d' )\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fdelete-quiz-question', $question_id, $quiz_id );\r\n-\r\n-\t\t\t\t\u002F\u002F remove question from quiz\r\n-\t\t\t\t$delete = $wpdb->delete(\r\n-\t\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'quiz_id'     => $quiz_id,\r\n-\t\t\t\t\t\t'question_id' => $question_id,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray( '%d', '%d' )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fdeleted-quiz-question', $question_id, $quiz_id, $delete );\r\n-\r\n-\t\t\t\t\u002F\u002F reorder questions\r\n-\t\t\t\t$this->reorder_questions( $quiz );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F increment quiz questions\r\n-\t\t\tlearn_press_reset_auto_increment( 'learnpress_quiz_questions' );\r\n-\r\n-\t\t\treturn $delete;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update order quiz question answers.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $answers\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function sort_question_answers( $answers ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$orders = array();\r\n-\r\n-\t\t\tforeach ( $answers as $index => $answer_id ) {\r\n-\t\t\t\t$order = $index + 1;\r\n-\r\n-\t\t\t\t$orders[ $answer_id ] = $order;\r\n-\r\n-\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\tarray( 'order' => $order ),\r\n-\t\t\t\t\tarray( 'question_answer_id' => $answer_id )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $orders;\r\n-\t\t}\r\n-\r\n-\t\tpublic function add_meta( &$object, $meta ) {\r\n-\t\t\t\u002F\u002F TODO: Implement add_meta() method.\r\n-\t\t}\r\n-\r\n-\t\tpublic function delete_meta( &$object, $meta ) {\r\n-\t\t\t\u002F\u002F TODO: Implement delete_meta() method.\r\n-\t\t}\r\n-\r\n-\t\tpublic function read_meta( &$object ) {\r\n-\t\t\t\u002F\u002F TODO: Implement read_meta() method.\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $object\r\n-\t\t * @param $meta\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function update_meta( &$object, $meta ) {\r\n-\t\t\treturn learn_press_update_user_item_meta( $object->get_user_item_id(), $meta->meta_key, $meta->meta_value );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz_CURD.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FCURD\n+ * @since   3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! function_exists( 'LP_Quiz_CURD' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Quiz_CURD\n+\t *\n+\t * Class to manipulating quiz with database.\n+\t *\u002F\n+\tclass LP_Quiz_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\n+\t\t\u002F**\n+\t\t * LP_Quiz_CURD constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->_error_messages = array(\n+\t\t\t\t'QUIZ_NOT_EXISTS' => __( 'The quiz does not exist.', 'learnpress' ),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param LP_Quiz $quiz\n+\t\t *\n+\t\t * @return LP_Quiz|mixed\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load( &$quiz ) {\n+\t\t\t$id = $quiz->get_id();\n+\t\t\tif ( ! $id || learn_press_get_post_type( $id ) !== LP_QUIZ_CPT ) {\n+\n+\t\t\t\tthrow new Exception( sprintf( __( 'Invalid quiz with ID \"%d\".', 'learnpress' ), $id ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F LP_Helper_CURD::update_meta_cache( $quiz->get_id() );\n+\n+\t\t\t$quiz->set_data_via_methods(\n+\t\t\t\tarray(\n+\t\t\t\t\t\u002F\u002F 'show_result'          => get_post_meta( $quiz->get_id(), '_lp_show_result', true ),\n+\t\t\t\t\t'passing_grade_type'   => get_post_meta( $quiz->get_id(), '_lp_passing_grade_type', true ),\n+\t\t\t\t\t'passing_grade'        => get_post_meta( $quiz->get_id(), '_lp_passing_grade', true ),\n+\t\t\t\t\t\u002F\u002F 'show_check_answer'    => get_post_meta( $quiz->get_id(), '_lp_show_check_answer', true ),\n+\t\t\t\t\t\u002F\u002F 'count_check_answer'   => get_post_meta( $quiz->get_id(), '_lp_check_answer_count', true ),\n+\t\t\t\t\t\u002F\u002F 'show_hint'            => get_post_meta( $quiz->get_id(), '_lp_show_hint', true ),\n+\t\t\t\t\t\u002F\u002F 'archive_history'      => get_post_meta( $quiz->get_id(), '_lp_archive_history', true ),\n+\t\t\t\t\t\u002F\u002F 'count_hint'           => get_post_meta( $quiz->get_id(), '_lp_hint_count', true ),\n+\t\t\t\t\t'pagination'           => get_post_meta( $quiz->get_id(), '_lp_pagination', true ),\n+\t\t\t\t\t'review_questions'     => get_post_meta( $quiz->get_id(), '_lp_review', true ),\n+\t\t\t\t\t'show_correct_review'  => get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ),\n+\t\t\t\t\t'preview'              => get_post_meta( $quiz->get_id(), '_lp_preview', true ),\n+\t\t\t\t\t\u002F\u002F 'minus_points'         => get_post_meta( $quiz->get_id(), '_lp_minus_points', true ),\n+\t\t\t\t\t'minus_skip_questions' => get_post_meta( $quiz->get_id(), '_lp_minus_skip_questions', true ),\n+\n+\t\t\t\t\t'instant_check'        => get_post_meta( $quiz->get_id(), '_lp_instant_check', true ),\n+\t\t\t\t\t'negative_marking'     => get_post_meta( $quiz->get_id(), '_lp_negative_marking', true ),\n+\t\t\t\t\t'retake_count'         => get_post_meta( $quiz->get_id(), '_lp_retake_count', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $quiz;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create quiz, with default meta.\n+\t\t *\n+\t\t * @param  $args\n+\t\t *\n+\t\t * @return int|WP_Error\n+\t\t *\u002F\n+\t\tpublic function create( &$args ) {\n+\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'      => '',\n+\t\t\t\t\t'status'  => 'publish',\n+\t\t\t\t\t'title'   => __( 'New Quiz', 'learnpress' ),\n+\t\t\t\t\t'content' => '',\n+\t\t\t\t\t'author'  => learn_press_get_current_user_id(),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$quiz_id = wp_insert_post(\n+\t\t\t\tarray(\n+\t\t\t\t\t'ID'           => $args['id'],\n+\t\t\t\t\t'post_type'    => LP_QUIZ_CPT,\n+\t\t\t\t\t'post_status'  => $args['status'],\n+\t\t\t\t\t'post_title'   => $args['title'],\n+\t\t\t\t\t'post_content' => $args['content'],\n+\t\t\t\t\t'post_author'  => $args['author'],\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $quiz_id ) {\n+\t\t\t\t\u002F\u002F add default meta for new lesson\n+\t\t\t\t$default_meta = LP_Quiz::get_default_meta();\n+\n+\t\t\t\tif ( is_array( $default_meta ) ) {\n+\t\t\t\t\tforeach ( $default_meta as $key => $value ) {\n+\t\t\t\t\t\tupdate_post_meta( $quiz_id, '_lp_' . $key, $value );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $quiz_id;\n+\t\t}\n+\n+\t\tpublic function update( &$quiz ) {\n+\t\t\t\u002F\u002F TODO: Implement update() method.\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete quiz.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param object $quiz_id\n+\t\t *\u002F\n+\t\tpublic function delete( &$quiz_id ) {\n+\t\t\t\u002F\u002F course curd\n+\t\t\t$curd = new LP_Course_CURD();\n+\n+\t\t\t\u002F\u002F allow hook\n+\t\t\tdo_action( 'learn-press\u002Fbefore-delete-quiz', $quiz_id );\n+\n+\t\t\t\u002F\u002F remove quiz from course items\n+\t\t\t$curd->remove_item( $quiz_id );\n+\t\t\t\u002F\u002F remove questions from quiz\n+\t\t\t$this->remove_questions( $quiz_id, '', true );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate quiz.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param       $quiz_id_origin\n+\t\t * @param array   $args\n+\t\t *\n+\t\t * @return mixed|WP_Error\n+\t\t *\u002F\n+\t\tpublic function duplicate( &$quiz_id_origin, $args = array() ) {\n+\t\t\t$quiz_id_new = 0;\n+\n+\t\t\ttry {\n+\t\t\t\tif ( ! $quiz_id_origin ) {\n+\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fid_null', 'Op! Quiz ID not found' );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( learn_press_get_post_type( $quiz_id_origin ) != LP_QUIZ_CPT ) {\n+\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Ftype_invalid', 'Op! The quiz does not exist' );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Ensure that user can create quiz\n+\t\t\t\tif ( ! current_user_can( 'edit_posts' ) ) {\n+\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fpermission', 'Sorry! You have not permission to duplicate this quiz' );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Duplicate quiz\n+\t\t\t\t$quiz_id_new = learn_press_duplicate_post( $quiz_id_origin, $args, true );\n+\n+\t\t\t\tif ( ! $quiz_id_new || is_wp_error( $quiz_id_new ) ) {\n+\t\t\t\t\treturn new WP_Error( 'lp\u002Fclone\u002Fquiz\u002Fclone_error', 'Sorry! Failed to duplicate quiz!' );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F duplicate questions.\n+\t\t\t\t\t$this->duplicate_questions( $quiz_id_origin, $quiz_id_new );\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Fitem\u002Fafter-duplicate', $quiz_id_origin, $quiz_id_new, $args );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $quiz_id_new;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Duplicate questions.\n+\t\t *\n+\t\t * @param int $quiz_id_origin\n+\t\t * @param int $quiz_id_new\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function duplicate_questions( int $quiz_id_origin, int $quiz_id_new ) {\n+\t\t\t$question_curd = new LP_Question_CURD();\n+\n+\t\t\ttry {\n+\t\t\t\t$quiz_origin = learn_press_get_quiz( $quiz_id_origin );\n+\t\t\t\tif ( ! $quiz_origin ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$questions_origin = $quiz_origin->get_question_ids();\n+\n+\t\t\t\tforeach ( $questions_origin as $question_id_origin ) {\n+\t\t\t\t\t$can_clone = true;\n+\t\t\t\t\t$args      = compact( 'question_id_origin', 'quiz_origin', 'quiz_id_new' );\n+\t\t\t\t\t$can_clone = apply_filters( 'lp\u002Fquiz\u002Fquestion\u002Fcan-clone', $can_clone, $args );\n+\n+\t\t\t\t\tif ( ! $can_clone ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F duplicate question\n+\t\t\t\t\t$question_id_new = $question_curd->duplicate( $question_id_origin, array( 'post_status' => 'publish' ) );\n+\n+\t\t\t\t\tif ( ! $question_id_new || is_wp_error( $question_id_new ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F add duplicate question to new quiz\n+\t\t\t\t\t$this->add_question( $quiz_id_new, $question_id_new );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param LP_Quiz $quiz\n+\t\t *\n+\t\t * @deprecated 4.1.7\n+\t\t *\u002F\n+\t\t\u002F*protected function _load_questions( &$quiz ) {\n+\t\t\t$id        = $quiz->get_id();\n+\t\t\t$questions = LP_Object_Cache::get( 'questions-' . $id, 'learn-press\u002Fquizzes' );\n+\n+\t\t\tif ( false === $questions || $quiz->get_no_cache() ) {\n+\t\t\t\t$this->load_questions( $quiz->get_id() );\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Read question of a quiz from database\n+\t\t *\n+\t\t * @param int    $quiz_id\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\t\u002F*public function read_questions( $quiz_id, $context = 'display' ) {\n+\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\n+\n+\t\t\tif ( ! $quiz ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn $quiz->get_question_ids( $context );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Read all question ids of a quiz.\n+\t\t *\n+\t\t * @param int    $quiz_id\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function read_question_ids( int $quiz_id = 0, string $context = 'display' ): array {\n+\t\t\t$lp_question_db = LP_Question_DB::getInstance();\n+\t\t\t$question_ids   = [];\n+\n+\t\t\ttry {\n+\t\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\n+\t\t\t\tif ( ! $quiz ) {\n+\t\t\t\t\treturn array();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $context === 'display' ) {\n+\t\t\t\t\t$statuses = array( 'publish' );\n+\t\t\t\t} else {\n+\t\t\t\t\t$statuses = array( 'publish', 'draft', 'auto-draft' );\n+\t\t\t\t}\n+\n+\t\t\t\t$filter          = new LP_Question_Filter();\n+\t\t\t\t$filter->ID = $quiz_id;\n+\t\t\t\t$filter->post_status = $statuses;\n+\n+\t\t\t\t$question_ids = $lp_question_db->get_list_question_ids_of_quiz( $filter );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $question_ids;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.1.7\n+\t\t *\u002F\n+\t\t\u002F*public function update_question_ids( $quiz_id ) {\n+\t\t\twp_cache_delete( 'quiz-' . $quiz_id, 'quiz-questions' );\n+\n+\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\n+\n+\t\t\tif ( $quiz ) {\n+\t\t\t\t$question_ids = $quiz->get_question_ids();\n+\t\t\t} else {\n+\t\t\t\t$question_ids = array();\n+\t\t\t}\n+\n+\t\t\tupdate_post_meta( $quiz_id, '_questions', $question_ids );\n+\t\t\tupdate_post_meta( $quiz_id, '_question_count', sizeof( $question_ids ) );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get quiz ids that contains a question.\n+\t\t *\n+\t\t * @since 3.1.0\n+\t\t *\n+\t\t * @param int $question_id\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_quiz_by_question( $question_id ) {\n+\t\t\tglobal $wpdb;\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT ID\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tINNER JOIN {$wpdb->learnpress_quiz_questions} qq ON qq.quiz_id = p.ID\n+\t\t\t\tWHERE qq.question_id = %d\n+\t\t\t\",\n+\t\t\t\t$question_id\n+\t\t\t);\n+\n+\t\t\treturn $wpdb->get_col( $query );\n+\t\t}\n+\n+\t\tpublic function load_questions( $quiz_id ) {\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( is_array( $quiz_id ) ) {\n+\t\t\t\tforeach ( $quiz_id as $q_id ) {\n+\t\t\t\t\t$this->load_questions( $q_id );\n+\t\t\t\t}\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT ID, post_title, post_content, post_status, post_type, post_author, post_date, post_name\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id\n+\t\t\t\tWHERE qq.quiz_id = %d\n+\t\t\t\tAND p.post_status = %s\n+\t\t\t\tORDER BY question_order, quiz_question_id ASC\n+\t\t\t\",\n+\t\t\t\t$quiz_id,\n+\t\t\t\t'publish'\n+\t\t\t);\n+\n+\t\t\t$question_ids = array();\n+\t\t\t$results      = $wpdb->get_results( $query );\n+\n+\t\t\tif ( $results ) {\n+\t\t\t\tforeach ( $results as $k => $v ) {\n+\t\t\t\t\tsettype( $v, 'object' );\n+\t\t\t\t\twp_cache_set( $v->ID, $v, 'posts' );\n+\n+\t\t\t\t\t$question_ids[] = $v->ID;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Object_Cache::set( 'questions-' . $quiz_id, $question_ids, 'learn-press\u002Fquizzes' );\n+\n+\t\t\t\u002F\u002F LP_Helper_CURD::cache_posts( $question_ids );\n+\t\t\t$question_factory = new LP_Question_CURD();\n+\t\t\t$question_factory->load_answer_options( $question_ids );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sort questions by order.\n+\t\t * Check in an array of questions if there is a key 'order'.\n+\t\t *\n+\t\t * @param $questions\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tprotected function _maybe_sort_questions( &$questions ) {\n+\t\t\tif ( ! $questions ) {\n+\t\t\t\treturn $questions;\n+\t\t\t}\n+\n+\t\t\t$first = reset( $questions );\n+\n+\t\t\tif ( empty( $first['order'] ) ) {\n+\t\t\t\treturn $questions;\n+\t\t\t}\n+\n+\t\t\tuasort( $questions, array( $this, '_callback_sort_questions' ) );\n+\n+\t\t\treturn $questions;\n+\t\t}\n+\n+\t\tpublic function _callback_sort_questions( $a, $b ) {\n+\t\t\treturn $a['order'] > $b['order'];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Reorder question by indexed number.\n+\t\t *\n+\t\t * @param LP_Quiz|WP_Post|int $the_quiz\n+\t\t * @param mixed               $questions\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function reorder_questions( $the_quiz, $questions = false ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\t\tif ( ! $the_quiz ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( false == $questions ) {\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\tSELECT quiz_question_id as id\n+\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\tWHERE quiz_id = %d\n+\t\t\t\tORDER BY question_order ASC\n+\t\t\t\",\n+\t\t\t\t\t$the_quiz->get_id()\n+\t\t\t\t);\n+\n+\t\t\t\t$rows = $wpdb->get_results( $query );\n+\n+\t\t\t\tif ( $rows ) {\n+\t\t\t\t\t$update = array();\n+\t\t\t\t\t$ids    = wp_list_pluck( $rows, 'id' );\n+\t\t\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\n+\t\t\t\t\tforeach ( $rows as $order => $row ) {\n+\t\t\t\t\t\t$update[] = $wpdb->prepare( 'WHEN quiz_question_id = %d THEN %d', $row->id, $order + 1 );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\t\t\t\tSET question_order = CASE\n+\t\t\t\t\t\t\t\" . join( \"\\n\", $update ) . '\n+\t\t\t\t\t\t\tELSE question_order END\n+\t\t\t\t\t\t\tWHERE quiz_question_id IN(' . join( ',', $format ) . ')\n+\t\t\t\t\t\t',\n+\t\t\t\t\t\t$ids\n+\t\t\t\t\t);\n+\n+\t\t\t\t\treturn $wpdb->query( $query );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$query = \"\n+\t\t\t\tUPDATE {$wpdb->learnpress_quiz_questions}\n+\t\t\t\tSET question_order = CASE\n+\t\t\t\";\n+\t\t\t\tfor ( $order = 0, $n = sizeof( $questions ); $order \u003C $n; $order ++ ) {\n+\t\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_id = %d THEN %d', $questions[ $order ], $order + 1 ) . \"\\n\";\n+\t\t\t\t}\n+\t\t\t\t$query .= sprintf( 'ELSE question_order END WHERE quiz_id = %d', $the_quiz->get_id() );\n+\n+\t\t\t\treturn $wpdb->query( $query );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Get all questions in a quiz\n+\t\t *\n+\t\t * @param LP_Quiz $the_quiz\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_questions( $the_quiz ) {\n+\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\t\tif ( ! $the_quiz ) {\n+\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\n+\t\t\t}\n+\n+\t\t\treturn LP_Object_Cache::get( 'questions-' . $the_quiz->get_id(), 'learn-press\u002Fquizzes' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add existing question into quiz.\n+\t\t *\n+\t\t * @param LP_Quiz|int $the_quiz\n+\t\t * @param             $question_id\n+\t\t * @param array       $args\n+\t\t *\n+\t\t * @return mixed false on failed\n+\t\t *\u002F\n+\t\tpublic function add_question( $the_quiz, $question_id, $args = array() ) {\n+\t\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\t\tif ( ! $the_quiz ) {\n+\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\n+\t\t\t}\n+\n+\t\t\t$question = learn_press_get_question( $question_id );\n+\n+\t\t\tif ( ! $question ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( $this->is_exists_question( $the_quiz->get_id(), $question_id ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F list exist quiz question\n+\t\t\t\u002F\u002F$list_questions = $this->get_questions( $the_quiz );\n+\t\t\t\u002F\u002F add new question and set to cache\n+\t\t\t\u002F\u002F$list_questions[ $question_id ] = strval( $question_id );\n+\t\t\t\u002F\u002FLP_Object_Cache::set( 'questions-' . $the_quiz->get_id(), $list_questions, 'learn-press\u002Fquizzes' );\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$id   = $the_quiz->get_id();\n+\t\t\t$args = wp_parse_args( $args, array( 'order' => - 1 ) );\n+\n+\t\t\tif ( $args['order'] >= 0 ) {\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\t\t\tSET question_order = question_order + 1\n+\t\t\t\t\t\tWHERE quiz_id = %d AND question_order >= %d\n+\t\t\t\t\t\",\n+\t\t\t\t\t$id,\n+\t\t\t\t\t$args['order']\n+\t\t\t\t);\n+\t\t\t\t$wpdb->get_results( $query );\n+\t\t\t} else {\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\tSELECT max(question_order) + 1 as ordering\n+\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\tWHERE quiz_id = %d\n+\t\t\t\",\n+\t\t\t\t\t$id\n+\t\t\t\t);\n+\n+\t\t\t\t$order = $wpdb->get_var( $query );\n+\n+\t\t\t\tif ( ! $order ) {\n+\t\t\t\t\t$order = 1;\n+\t\t\t\t}\n+\n+\t\t\t\t$args['order'] = $order;\n+\t\t\t}\n+\n+\t\t\t$inserted = $wpdb->insert(\n+\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\n+\t\t\t\tarray(\n+\t\t\t\t\t'quiz_id'        => $id,\n+\t\t\t\t\t'question_id'    => $question_id,\n+\t\t\t\t\t'question_order' => $args['order'],\n+\t\t\t\t),\n+\t\t\t\tarray( '%d', '%d', '%d' )\n+\t\t\t);\n+\n+\t\t\t$return = $inserted ? $wpdb->insert_id : $inserted;\n+\n+\t\t\tdo_action( 'learn-press\u002Fquiz-added-question', $inserted, $question_id, $the_quiz->get_id() );\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a question (or batch of questions) is already added to quiz.\n+\t\t *\n+\t\t * @param int       $the_id\n+\t\t * @param int|array $ids\n+\t\t *\n+\t\t * @return array|bool|null|object\n+\t\t *\u002F\n+\t\tpublic function is_exists_question( $the_id, $ids ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tsettype( $ids, 'array' );\n+\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\n+\t\t\t$questions_ids = implode( ', ', $ids );\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\tSELECT quiz_question_id\n+\t\t\tFROM {$wpdb->learnpress_quiz_questions}\n+\t\t\tWHERE question_id IN( \" . join( ',', $format ) . ' )\n+\t\t\t\tAND quiz_id = %d\n+\t\t',\n+\t\t\t\t$questions_ids,\n+\t\t\t\t$the_id\n+\t\t\t);\n+\n+\t\t\t$results = $wpdb->get_results( $query );\n+\n+\t\t\tif ( $results ) {\n+\t\t\t\treturn $results;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update order question in quiz.\n+\t\t *\n+\t\t * @param $order\n+\t\t *\n+\t\t * @return false|int\n+\t\t *\u002F\n+\t\tpublic function sort_questions( $order ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tforeach ( $order as $index => $question_id ) {\n+\t\t\t\t$update = $wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_quiz_questions,\n+\t\t\t\t\tarray( 'question_order' => $index + 1 ),\n+\t\t\t\t\tarray( 'question_id' => $question_id ),\n+\t\t\t\t\tarray( '%d' ),\n+\t\t\t\t\tarray( '%d' )\n+\t\t\t\t);\n+\n+\t\t\t\tif ( $update === false ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove question from quiz.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param      $quiz_id\n+\t\t * @param      $question_id\n+\t\t * @param bool        $force | remove all questions from quiz\n+\t\t *\n+\t\t * @return bool|false|int|WP_Error\n+\t\t *\u002F\n+\t\tpublic function remove_questions( $quiz_id, $question_id, $force = false ) {\n+\t\t\t$quiz = learn_press_get_quiz( $quiz_id );\n+\n+\t\t\tif ( ! $quiz ) {\n+\t\t\t\treturn $this->get_error( 'QUIZ_NOT_EXISTS' );\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( $force ) {\n+\t\t\t\t\u002F\u002F remove all questions from quiz\n+\t\t\t\t$delete = $wpdb->delete(\n+\t\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\n+\t\t\t\t\tarray( 'quiz_id' => $quiz_id ),\n+\t\t\t\t\tarray( '%d' )\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\tdo_action( 'learn-press\u002Fdelete-quiz-question', $question_id, $quiz_id );\n+\n+\t\t\t\t\u002F\u002F remove question from quiz\n+\t\t\t\t$delete = $wpdb->delete(\n+\t\t\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'quiz_id'     => $quiz_id,\n+\t\t\t\t\t\t'question_id' => $question_id,\n+\t\t\t\t\t),\n+\t\t\t\t\tarray( '%d', '%d' )\n+\t\t\t\t);\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fdeleted-quiz-question', $question_id, $quiz_id, $delete );\n+\n+\t\t\t\t\u002F\u002F reorder questions\n+\t\t\t\t$this->reorder_questions( $quiz );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F increment quiz questions\n+\t\t\tlearn_press_reset_auto_increment( 'learnpress_quiz_questions' );\n+\n+\t\t\treturn $delete;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update order quiz question answers.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $answers\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function sort_question_answers( $answers ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$orders = array();\n+\n+\t\t\tforeach ( $answers as $index => $answer_id ) {\n+\t\t\t\t$order = $index + 1;\n+\n+\t\t\t\t$orders[ $answer_id ] = $order;\n+\n+\t\t\t\t$wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\tarray( 'order' => $order ),\n+\t\t\t\t\tarray( 'question_answer_id' => $answer_id )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn $orders;\n+\t\t}\n+\n+\t\tpublic function add_meta( &$object, $meta ) {\n+\t\t\t\u002F\u002F TODO: Implement add_meta() method.\n+\t\t}\n+\n+\t\tpublic function delete_meta( &$object, $meta ) {\n+\t\t\t\u002F\u002F TODO: Implement delete_meta() method.\n+\t\t}\n+\n+\t\tpublic function read_meta( &$object ) {\n+\t\t\t\u002F\u002F TODO: Implement read_meta() method.\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $object\n+\t\t * @param $meta\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function update_meta( &$object, $meta ) {\n+\t\t\treturn learn_press_update_user_item_meta( $object->get_user_item_id(), $meta->meta_key, $meta->meta_value );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-section-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-section-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-section-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-section-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,574 +1,574 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Section_CURD\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tprivate $course_id = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Section_CURD constructor.\r\n-\t *\r\n-\t * @param $course_id\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function __construct( $course_id ) {\r\n-\t\t$this->course_id = $course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create item and insert to database.\r\n-\t *\r\n-\t * @param $section_origin array\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t * @version 3.0.1\r\n-\t *\u002F\r\n-\tpublic function create( &$section_origin ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$section = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$section = $this->parse( $section_origin );\r\n-\t\t\t\u002F\u002F$section                   = stripslashes_deep( $section );\r\n-\t\t\t$last_section_order_number = LP_Section_DB::getInstance()->get_last_number_order( $section['section_course_id'] );\r\n-\t\t\t$section_order_new         = $last_section_order_number + 1;\r\n-\t\t\t$insert_data               = apply_filters(\r\n-\t\t\t\t'lp\u002Fsection\u002Fdata-insert',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'section_course_id'   => $this->course_id,\r\n-\t\t\t\t\t'section_name'        => $section['section_name'],\r\n-\t\t\t\t\t'section_order'       => $section_order_new,\r\n-\t\t\t\t\t'section_description' => $section['section_description'],\r\n-\t\t\t\t),\r\n-\t\t\t\t$section_origin\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_sections,\r\n-\t\t\t\t$insert_data,\r\n-\t\t\t\tarray( '%d', '%s', '%d', '%s' )\r\n-\t\t\t);\r\n-\t\t\t$section['section_id']    = $wpdb->insert_id;\r\n-\t\t\t$section['section_order'] = $section_order_new;\r\n-\r\n-\t\t\tdo_action( 'lp\u002Fsection\u002Fcreated', $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $section;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data into database.\r\n-\t *\r\n-\t * @param $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function update( &$args ) {\r\n-\r\n-\t\t$section = $this->parse( $args );\r\n-\r\n-\t\tif ( empty( $section['section_id'] ) ) {\r\n-\t\t\treturn $this->create( $args );\r\n-\t\t}\r\n-\r\n-\t\t$section_id  = $section['section_id'];\r\n-\t\t$update_data = array(\r\n-\t\t\t'section_name'        => $section['section_name'],\r\n-\t\t\t'section_course_id'   => $section['section_course_id'],\r\n-\t\t\t'section_order'       => $section['section_order'],\r\n-\t\t\t'section_description' => $section['section_description'],\r\n-\t\t);\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$wpdb->update(\r\n-\t\t\t$wpdb->learnpress_sections,\r\n-\t\t\t$update_data,\r\n-\t\t\tarray( 'section_id' => $section_id )\r\n-\t\t);\r\n-\t\t$section['section_id'] = $section_id;\r\n-\r\n-\t\treturn $section;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete section data from database.\r\n-\t *\r\n-\t * @param $id string\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function delete( &$id ) {\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t\u002F\u002F allow hook\r\n-\t\tdo_action( 'learn-press\u002Fbefore-delete-section', $this->course_id, $id );\r\n-\r\n-\t\t\u002F\u002F Remove section items.\r\n-\t\t$wpdb->delete( $wpdb->learnpress_section_items, array( 'section_id' => $id ) );\r\n-\t\tlearn_press_reset_auto_increment( 'learnpress_section_items' );\r\n-\r\n-\t\t\u002F\u002F Remove section\r\n-\t\t$result = $wpdb->delete( $wpdb->learnpress_sections, array( 'section_id' => $id ) );\r\n-\t\tlearn_press_reset_auto_increment( 'learnpress_sections' );\r\n-\r\n-\t\treturn ! ! $result;\r\n-\t}\r\n-\r\n-\tpublic function duplicate( &$section, $args = array() ) {\r\n-\t\t\u002F\u002F TODO: Implement duplicate() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load data from database.\r\n-\t *\r\n-\t * @param object $object\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function load( &$object ) {\r\n-\t\t\u002F\u002F TODO: Implement load() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Parse input data.\r\n-\t *\r\n-\t * @param $args\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tprivate function parse( $args ) {\r\n-\t\t$data = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'section_name'        => '',\r\n-\t\t\t\t'section_description' => '',\r\n-\t\t\t\t'section_course_id'   => 0,\r\n-\t\t\t\t'section_order'       => 0,\r\n-\t\t\t\t'items'               => array(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update sort sections.\r\n-\t *\r\n-\t * @param string[] $sections_new_order\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function update_sections_order( $sections_new_order ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$orders = array();\r\n-\r\n-\t\tforeach ( $sections_new_order as $order_new => $section_id ) {\r\n-\t\t\t$order_new = $order_new + 1;\r\n-\r\n-\t\t\t$wpdb->update(\r\n-\t\t\t\t$wpdb->learnpress_sections,\r\n-\t\t\t\tarray( 'section_order' => $order_new ),\r\n-\t\t\t\tarray( 'section_id' => $section_id )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $orders;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list items of section.\r\n-\t *\r\n-\t * @param $section_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function get_section_items( $section_id ) {\r\n-\t\t$course = learn_press_get_course( $this->course_id );\r\n-\r\n-\t\t$sections = $course->get_curriculum_raw();\r\n-\r\n-\t\t$return = array();\r\n-\r\n-\t\tif ( ! empty( $sections ) ) {\r\n-\t\t\tforeach ( $sections as $section ) {\r\n-\t\t\t\tif ( $section['id'] == $section_id ) {\r\n-\t\t\t\t\tif ( isset( $section['items'] ) && is_array( $section['items'] ) ) {\r\n-\t\t\t\t\t\t$return = $section['items'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create new section item and add to course.\r\n-\t *\r\n-\t * @param int $section_id\r\n-\t * @param array $item\r\n-\t *\r\n-\t * @return array | bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function new_item( $section_id, $item ) {\r\n-\t\t\u002F\u002F course author, for case co-instructor add new items.\r\n-\t\t$author_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $author_id ) {\r\n-\t\t\t$author_id = get_post_field( 'post_author', $this->course_id ) ? get_post_field( 'post_author', $this->course_id ) : learn_press_get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F $item = wp_parse_args( $item, array( 'title' => '', 'type' => '' ) );\r\n-\t\t$item = array_merge(\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'   => '',\r\n-\t\t\t\t'type'    => '',\r\n-\t\t\t\t'content' => '',\r\n-\t\t\t\t'status'  => 'publish',\r\n-\t\t\t),\r\n-\t\t\t$item\r\n-\t\t);\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'title'   => $item['title'],\r\n-\t\t\t'author'  => $author_id,\r\n-\t\t\t'content' => $item['content'],\r\n-\t\t\t'status'  => $item['status'],\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $item['id'] ) ) {\r\n-\t\t\t$item['old_id'] = $item ['id'];\r\n-\t\t}\r\n-\t\tif ( $item['type'] == LP_LESSON_CPT ) {\r\n-\t\t\t$lesson_curd = new LP_Lesson_CURD();\r\n-\t\t\t$item['id']  = $lesson_curd->create( $args );\r\n-\t\t} elseif ( $item['type'] == LP_QUIZ_CPT ) {\r\n-\t\t\t$quiz_curd  = new LP_Quiz_CURD();\r\n-\t\t\t$item['id'] = $quiz_curd->create( $args );\r\n-\t\t} else {\r\n-\t\t\t$item['id'] = apply_filters( 'learn-press\u002Fnew-section-item-data', $item['id'], $item, $args, $this->course_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_wp_error( $item['id'] ) || ! $item['id'] ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$item['preview'] = get_post_meta( $item['id'], '_lp_preview', true ) == 'yes';\r\n-\r\n-\t\t\u002F\u002F allow hook\r\n-\t\tdo_action( 'learn-press\u002Fafter-new-section-item', $item['id'], $section_id, $this->course_id );\r\n-\r\n-\t\t\u002F\u002F add item to section\r\n-\t\treturn $this->add_items_section( $section_id, array( $item ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add list new items to section.\r\n-\t *\r\n-\t * @param       $section_id\r\n-\t * @param array $items\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function add_items_section( $section_id, $items = array() ) {\r\n-\t\t\u002F\u002F $order         = 1;\r\n-\t\t$current_items = $this->get_section_items( $section_id );\r\n-\t\t\u002F\u002F allow hook\r\n-\t\tdo_action( 'learn-press\u002Fbefore-add-items-section', $items, $section_id, $this->course_id );\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$all_items = array_merge( $current_items, $items );\r\n-\t\t$result    = array();\r\n-\t\tforeach ( $all_items as $key => $item ) {\r\n-\t\t\t$key = $key + 1;\r\n-\t\t\tif ( ! isset( $item['id'] ) || ! isset( $item['type'] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item  = (array) $item;\r\n-\t\t\t$exist = $this->item_section_exist( $section_id, $item['id'] );\r\n-\r\n-\t\t\tif ( $exist ) {\r\n-\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray( 'item_order' => $key ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item['id'],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item['id'],\r\n-\t\t\t\t\t\t'item_order' => $key,\r\n-\t\t\t\t\t\t'item_type'  => $item['type'],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F get WP Post\r\n-\t\t\t$post = get_post( $item['id'] );\r\n-\t\t\tif ( ! $post ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item = array_merge(\r\n-\t\t\t\t$item,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'      => $post->ID,\r\n-\t\t\t\t\t'title'   => $post->post_title,\r\n-\t\t\t\t\t'type'    => $post->post_type,\r\n-\t\t\t\t\t'preview' => get_post_meta( $post->ID, '_lp_preview', true ) == 'yes',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! $exist ) {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fadded-item-to-section', $item, $section_id, $this->course_id );\r\n-\t\t\t} else {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fupdated-item-to-section', $item, $section_id, $this->course_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result[] = $item;\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add item to section.\r\n-\t *\r\n-\t * @param int $section_id\r\n-\t * @param array $item\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.7\r\n-\t *\u002F\r\n-\tpublic function assign_item_section( int $section_id, array $item = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! isset( $item['item_id'] ) && ! isset( $item['item_type'] ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$exist = $this->item_section_exist( $section_id, $item['item_id'] );\r\n-\r\n-\t\t\tif ( $exist ) {\r\n-\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray( 'item_order' => $item['item_order'] ?? 0 ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item['item_id'],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item['item_id'],\r\n-\t\t\t\t\t\t'item_order' => $item['item_order'] ?? 0,\r\n-\t\t\t\t\t\t'item_type'  => $item['item_type'],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check item was been added to any section.\r\n-\t *\r\n-\t * @param $section_id\r\n-\t * @param $item_id\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tprivate function item_section_exist( $section_id, $item_id ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$section_id = intval( $section_id );\r\n-\t\t$item_id    = intval( $item_id );\r\n-\r\n-\t\t$query = $wpdb->prepare( \"SELECT * FROM {$wpdb->learnpress_section_items} WHERE section_id = %d AND item_id = %d\", $section_id, $item_id );\r\n-\t\t$item  = $wpdb->get_row( $query, ARRAY_A );\r\n-\r\n-\t\treturn ! ! $item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section id of lesson, quiz id in curriculum.\r\n-\t *\r\n-\t * @param $item_id\r\n-\t *\r\n-\t * @return array|bool|null|object\r\n-\t *\u002F\r\n-\tpublic function get_item_section( $item_id ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query   = $wpdb->prepare( \"SELECT section_id, item_order FROM {$wpdb->learnpress_section_items} WHERE item_id = %d\", $item_id );\r\n-\t\t$section = $wpdb->get_row( $query, ARRAY_A );\r\n-\r\n-\t\treturn $section;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove section item.\r\n-\t *\r\n-\t * @param $section_id\r\n-\t * @param $item_id\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function remove_section_item( $section_id, $item_id ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$result = $wpdb->delete(\r\n-\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\tarray(\r\n-\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t'item_id'    => $item_id,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%d',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn ! ! $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update section items.\r\n-\t *\r\n-\t * @param $section_id\r\n-\t * @param $items array\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.1\r\n-\t *\u002F\r\n-\tpublic function update_section_items( $section_id, $items ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tforeach ( $items as $index => $item ) {\r\n-\t\t\t$item_id   = 0;\r\n-\t\t\t$item_type = '';\r\n-\t\t\tif ( is_object( $item ) ) {\r\n-\t\t\t\t$item_id   = $item->id ?? 0;\r\n-\t\t\t\t$item_type = $item->post_type ?? '';\r\n-\t\t\t} elseif ( is_array( $item ) ) {\r\n-\t\t\t\t$item_id   = $item['id'] ?? 0;\r\n-\t\t\t\t$item_type = $item['type'] ?? '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order = $index + 1;\r\n-\t\t\t$exist = $this->item_section_exist( $section_id, $item_id );\r\n-\r\n-\t\t\tif ( $exist ) {\r\n-\t\t\t\t$wpdb->update(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray( 'item_order' => $order ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item_id,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_section_items,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'section_id' => $section_id,\r\n-\t\t\t\t\t\t'item_id'    => $item_id,\r\n-\t\t\t\t\t\t'item_order' => $order,\r\n-\t\t\t\t\t\t'item_type'  => $item_type,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check item exist.\r\n-\t *\r\n-\t * @param $items   array\r\n-\t * @param $item_id string\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tprivate function check_item_exist( $items, $item_id ) {\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\tif ( $item['id'] == $item_id ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update lesson, quiz title in admin course editor.\r\n-\t *\r\n-\t * @param $item\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tpublic function update_item( $item ) {\r\n-\t\t$item = wp_parse_args(\r\n-\t\t\t$item,\r\n-\t\t\tarray(\r\n-\t\t\t\t'id'    => '',\r\n-\t\t\t\t'title' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\twp_update_post(\r\n-\t\t\tarray(\r\n-\t\t\t\t'ID'         => $item['id'],\r\n-\t\t\t\t'post_title' => $item['title'],\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( isset( $item['preview'] ) && $item['preview'] ) {\r\n-\t\t\tupdate_post_meta( $item['id'], '_lp_preview', 'yes' );\r\n-\t\t} else {\r\n-\t\t\tdelete_post_meta( $item['id'], '_lp_preview' );\r\n-\t\t}\r\n-\r\n-\t\treturn $item;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Section_CURD\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_Section_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\t\u002F**\n+\t * @var int\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tprivate $course_id = null;\n+\n+\t\u002F**\n+\t * LP_Section_CURD constructor.\n+\t *\n+\t * @param $course_id\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function __construct( $course_id ) {\n+\t\t$this->course_id = $course_id;\n+\t}\n+\n+\t\u002F**\n+\t * Create item and insert to database.\n+\t *\n+\t * @param $section_origin array\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t * @version 3.0.1\n+\t *\u002F\n+\tpublic function create( &$section_origin ) {\n+\t\tglobal $wpdb;\n+\t\t$section = [];\n+\n+\t\ttry {\n+\t\t\t$section = $this->parse( $section_origin );\n+\t\t\t\u002F\u002F$section                   = stripslashes_deep( $section );\n+\t\t\t$last_section_order_number = LP_Section_DB::getInstance()->get_last_number_order( $section['section_course_id'] );\n+\t\t\t$section_order_new         = $last_section_order_number + 1;\n+\t\t\t$insert_data               = apply_filters(\n+\t\t\t\t'lp\u002Fsection\u002Fdata-insert',\n+\t\t\t\tarray(\n+\t\t\t\t\t'section_course_id'   => $this->course_id,\n+\t\t\t\t\t'section_name'        => $section['section_name'],\n+\t\t\t\t\t'section_order'       => $section_order_new,\n+\t\t\t\t\t'section_description' => $section['section_description'],\n+\t\t\t\t),\n+\t\t\t\t$section_origin\n+\t\t\t);\n+\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_sections,\n+\t\t\t\t$insert_data,\n+\t\t\t\tarray( '%d', '%s', '%d', '%s' )\n+\t\t\t);\n+\t\t\t$section['section_id']    = $wpdb->insert_id;\n+\t\t\t$section['section_order'] = $section_order_new;\n+\n+\t\t\tdo_action( 'lp\u002Fsection\u002Fcreated', $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $section;\n+\t}\n+\n+\t\u002F**\n+\t * Update data into database.\n+\t *\n+\t * @param $args\n+\t *\n+\t * @return mixed\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function update( &$args ) {\n+\n+\t\t$section = $this->parse( $args );\n+\n+\t\tif ( empty( $section['section_id'] ) ) {\n+\t\t\treturn $this->create( $args );\n+\t\t}\n+\n+\t\t$section_id  = $section['section_id'];\n+\t\t$update_data = array(\n+\t\t\t'section_name'        => $section['section_name'],\n+\t\t\t'section_course_id'   => $section['section_course_id'],\n+\t\t\t'section_order'       => $section['section_order'],\n+\t\t\t'section_description' => $section['section_description'],\n+\t\t);\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$wpdb->update(\n+\t\t\t$wpdb->learnpress_sections,\n+\t\t\t$update_data,\n+\t\t\tarray( 'section_id' => $section_id )\n+\t\t);\n+\t\t$section['section_id'] = $section_id;\n+\n+\t\treturn $section;\n+\t}\n+\n+\t\u002F**\n+\t * Delete section data from database.\n+\t *\n+\t * @param $id string\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function delete( &$id ) {\n+\n+\t\tglobal $wpdb;\n+\n+\t\t\u002F\u002F allow hook\n+\t\tdo_action( 'learn-press\u002Fbefore-delete-section', $this->course_id, $id );\n+\n+\t\t\u002F\u002F Remove section items.\n+\t\t$wpdb->delete( $wpdb->learnpress_section_items, array( 'section_id' => $id ) );\n+\t\tlearn_press_reset_auto_increment( 'learnpress_section_items' );\n+\n+\t\t\u002F\u002F Remove section\n+\t\t$result = $wpdb->delete( $wpdb->learnpress_sections, array( 'section_id' => $id ) );\n+\t\tlearn_press_reset_auto_increment( 'learnpress_sections' );\n+\n+\t\treturn ! ! $result;\n+\t}\n+\n+\tpublic function duplicate( &$section, $args = array() ) {\n+\t\t\u002F\u002F TODO: Implement duplicate() method.\n+\t}\n+\n+\t\u002F**\n+\t * Load data from database.\n+\t *\n+\t * @param object $object\n+\t *\n+\t * @return mixed\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function load( &$object ) {\n+\t\t\u002F\u002F TODO: Implement load() method.\n+\t}\n+\n+\t\u002F**\n+\t * Parse input data.\n+\t *\n+\t * @param $args\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tprivate function parse( $args ) {\n+\t\t$data = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'section_name'        => '',\n+\t\t\t\t'section_description' => '',\n+\t\t\t\t'section_course_id'   => 0,\n+\t\t\t\t'section_order'       => 0,\n+\t\t\t\t'items'               => array(),\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Update sort sections.\n+\t *\n+\t * @param string[] $sections_new_order\n+\t *\n+\t * @return array\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function update_sections_order( $sections_new_order ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$orders = array();\n+\n+\t\tforeach ( $sections_new_order as $order_new => $section_id ) {\n+\t\t\t$order_new = $order_new + 1;\n+\n+\t\t\t$wpdb->update(\n+\t\t\t\t$wpdb->learnpress_sections,\n+\t\t\t\tarray( 'section_order' => $order_new ),\n+\t\t\t\tarray( 'section_id' => $section_id )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $orders;\n+\t}\n+\n+\t\u002F**\n+\t * Get list items of section.\n+\t *\n+\t * @param $section_id\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function get_section_items( $section_id ) {\n+\t\t$course = learn_press_get_course( $this->course_id );\n+\n+\t\t$sections = $course->get_curriculum_raw();\n+\n+\t\t$return = array();\n+\n+\t\tif ( ! empty( $sections ) ) {\n+\t\t\tforeach ( $sections as $section ) {\n+\t\t\t\tif ( $section['id'] == $section_id ) {\n+\t\t\t\t\tif ( isset( $section['items'] ) && is_array( $section['items'] ) ) {\n+\t\t\t\t\t\t$return = $section['items'];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Create new section item and add to course.\n+\t *\n+\t * @param int $section_id\n+\t * @param array $item\n+\t *\n+\t * @return array | bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function new_item( $section_id, $item ) {\n+\t\t\u002F\u002F course author, for case co-instructor add new items.\n+\t\t$author_id = get_current_user_id();\n+\n+\t\tif ( ! $author_id ) {\n+\t\t\t$author_id = get_post_field( 'post_author', $this->course_id ) ? get_post_field( 'post_author', $this->course_id ) : learn_press_get_current_user_id();\n+\t\t}\n+\n+\t\t\u002F\u002F $item = wp_parse_args( $item, array( 'title' => '', 'type' => '' ) );\n+\t\t$item = array_merge(\n+\t\t\tarray(\n+\t\t\t\t'title'   => '',\n+\t\t\t\t'type'    => '',\n+\t\t\t\t'content' => '',\n+\t\t\t\t'status'  => 'publish',\n+\t\t\t),\n+\t\t\t$item\n+\t\t);\n+\n+\t\t$args = array(\n+\t\t\t'title'   => $item['title'],\n+\t\t\t'author'  => $author_id,\n+\t\t\t'content' => $item['content'],\n+\t\t\t'status'  => $item['status'],\n+\t\t);\n+\n+\t\tif ( ! empty( $item['id'] ) ) {\n+\t\t\t$item['old_id'] = $item ['id'];\n+\t\t}\n+\t\tif ( $item['type'] == LP_LESSON_CPT ) {\n+\t\t\t$lesson_curd = new LP_Lesson_CURD();\n+\t\t\t$item['id']  = $lesson_curd->create( $args );\n+\t\t} elseif ( $item['type'] == LP_QUIZ_CPT ) {\n+\t\t\t$quiz_curd  = new LP_Quiz_CURD();\n+\t\t\t$item['id'] = $quiz_curd->create( $args );\n+\t\t} else {\n+\t\t\t$item['id'] = apply_filters( 'learn-press\u002Fnew-section-item-data', $item['id'], $item, $args, $this->course_id );\n+\t\t}\n+\n+\t\tif ( is_wp_error( $item['id'] ) || ! $item['id'] ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$item['preview'] = get_post_meta( $item['id'], '_lp_preview', true ) == 'yes';\n+\n+\t\t\u002F\u002F allow hook\n+\t\tdo_action( 'learn-press\u002Fafter-new-section-item', $item['id'], $section_id, $this->course_id );\n+\n+\t\t\u002F\u002F add item to section\n+\t\treturn $this->add_items_section( $section_id, array( $item ) );\n+\t}\n+\n+\t\u002F**\n+\t * Add list new items to section.\n+\t *\n+\t * @param       $section_id\n+\t * @param array $items\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function add_items_section( $section_id, $items = array() ) {\n+\t\t\u002F\u002F $order         = 1;\n+\t\t$current_items = $this->get_section_items( $section_id );\n+\t\t\u002F\u002F allow hook\n+\t\tdo_action( 'learn-press\u002Fbefore-add-items-section', $items, $section_id, $this->course_id );\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$all_items = array_merge( $current_items, $items );\n+\t\t$result    = array();\n+\t\tforeach ( $all_items as $key => $item ) {\n+\t\t\t$key = $key + 1;\n+\t\t\tif ( ! isset( $item['id'] ) || ! isset( $item['type'] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$item  = (array) $item;\n+\t\t\t$exist = $this->item_section_exist( $section_id, $item['id'] );\n+\n+\t\t\tif ( $exist ) {\n+\t\t\t\t$wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray( 'item_order' => $key ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item['id'],\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item['id'],\n+\t\t\t\t\t\t'item_order' => $key,\n+\t\t\t\t\t\t'item_type'  => $item['type'],\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t\u002F\u002F get WP Post\n+\t\t\t$post = get_post( $item['id'] );\n+\t\t\tif ( ! $post ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$item = array_merge(\n+\t\t\t\t$item,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'      => $post->ID,\n+\t\t\t\t\t'title'   => $post->post_title,\n+\t\t\t\t\t'type'    => $post->post_type,\n+\t\t\t\t\t'preview' => get_post_meta( $post->ID, '_lp_preview', true ) == 'yes',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( ! $exist ) {\n+\t\t\t\tdo_action( 'learn-press\u002Fadded-item-to-section', $item, $section_id, $this->course_id );\n+\t\t\t} else {\n+\t\t\t\tdo_action( 'learn-press\u002Fupdated-item-to-section', $item, $section_id, $this->course_id );\n+\t\t\t}\n+\n+\t\t\t$result[] = $item;\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Add item to section.\n+\t *\n+\t * @param int $section_id\n+\t * @param array $item\n+\t *\n+\t * @return void\n+\t * @version 1.0.0\n+\t * @since 4.1.7\n+\t *\u002F\n+\tpublic function assign_item_section( int $section_id, array $item = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! isset( $item['item_id'] ) && ! isset( $item['item_type'] ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$exist = $this->item_section_exist( $section_id, $item['item_id'] );\n+\n+\t\t\tif ( $exist ) {\n+\t\t\t\t$wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray( 'item_order' => $item['item_order'] ?? 0 ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item['item_id'],\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item['item_id'],\n+\t\t\t\t\t\t'item_order' => $item['item_order'] ?? 0,\n+\t\t\t\t\t\t'item_type'  => $item['item_type'],\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check item was been added to any section.\n+\t *\n+\t * @param $section_id\n+\t * @param $item_id\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tprivate function item_section_exist( $section_id, $item_id ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$section_id = intval( $section_id );\n+\t\t$item_id    = intval( $item_id );\n+\n+\t\t$query = $wpdb->prepare( \"SELECT * FROM {$wpdb->learnpress_section_items} WHERE section_id = %d AND item_id = %d\", $section_id, $item_id );\n+\t\t$item  = $wpdb->get_row( $query, ARRAY_A );\n+\n+\t\treturn ! ! $item;\n+\t}\n+\n+\t\u002F**\n+\t * Get section id of lesson, quiz id in curriculum.\n+\t *\n+\t * @param $item_id\n+\t *\n+\t * @return array|bool|null|object\n+\t *\u002F\n+\tpublic function get_item_section( $item_id ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$query   = $wpdb->prepare( \"SELECT section_id, item_order FROM {$wpdb->learnpress_section_items} WHERE item_id = %d\", $item_id );\n+\t\t$section = $wpdb->get_row( $query, ARRAY_A );\n+\n+\t\treturn $section;\n+\t}\n+\n+\t\u002F**\n+\t * Remove section item.\n+\t *\n+\t * @param $section_id\n+\t * @param $item_id\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function remove_section_item( $section_id, $item_id ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$result = $wpdb->delete(\n+\t\t\t$wpdb->learnpress_section_items,\n+\t\t\tarray(\n+\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t'item_id'    => $item_id,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'%d',\n+\t\t\t\t'%d',\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn ! ! $result;\n+\t}\n+\n+\t\u002F**\n+\t * Update section items.\n+\t *\n+\t * @param $section_id\n+\t * @param $items array\n+\t *\n+\t * @return array\n+\t * @since 3.0.1\n+\t *\u002F\n+\tpublic function update_section_items( $section_id, $items ) {\n+\t\tglobal $wpdb;\n+\n+\t\tforeach ( $items as $index => $item ) {\n+\t\t\t$item_id   = 0;\n+\t\t\t$item_type = '';\n+\t\t\tif ( is_object( $item ) ) {\n+\t\t\t\t$item_id   = $item->id ?? 0;\n+\t\t\t\t$item_type = $item->post_type ?? '';\n+\t\t\t} elseif ( is_array( $item ) ) {\n+\t\t\t\t$item_id   = $item['id'] ?? 0;\n+\t\t\t\t$item_type = $item['type'] ?? '';\n+\t\t\t}\n+\n+\t\t\t$order = $index + 1;\n+\t\t\t$exist = $this->item_section_exist( $section_id, $item_id );\n+\n+\t\t\tif ( $exist ) {\n+\t\t\t\t$wpdb->update(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray( 'item_order' => $order ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item_id,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_section_items,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'section_id' => $section_id,\n+\t\t\t\t\t\t'item_id'    => $item_id,\n+\t\t\t\t\t\t'item_order' => $order,\n+\t\t\t\t\t\t'item_type'  => $item_type,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items;\n+\t}\n+\n+\t\u002F**\n+\t * Check item exist.\n+\t *\n+\t * @param $items   array\n+\t * @param $item_id string\n+\t *\n+\t * @return bool\n+\t * @since 3.0.0\n+\t *\u002F\n+\tprivate function check_item_exist( $items, $item_id ) {\n+\t\tforeach ( $items as $item ) {\n+\t\t\tif ( $item['id'] == $item_id ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Update lesson, quiz title in admin course editor.\n+\t *\n+\t * @param $item\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\u002F\n+\tpublic function update_item( $item ) {\n+\t\t$item = wp_parse_args(\n+\t\t\t$item,\n+\t\t\tarray(\n+\t\t\t\t'id'    => '',\n+\t\t\t\t'title' => '',\n+\t\t\t)\n+\t\t);\n+\n+\t\twp_update_post(\n+\t\t\tarray(\n+\t\t\t\t'ID'         => $item['id'],\n+\t\t\t\t'post_title' => $item['title'],\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( isset( $item['preview'] ) && $item['preview'] ) {\n+\t\t\tupdate_post_meta( $item['id'], '_lp_preview', 'yes' );\n+\t\t} else {\n+\t\t\tdelete_post_meta( $item['id'], '_lp_preview' );\n+\t\t}\n+\n+\t\treturn $item;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-user-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-user-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-user-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-user-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,738 +1,738 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_User_CURD\r\n- *\r\n- * @since 3.0\r\n- *\u002F\r\n-class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_meta_type = 'user';\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $_user_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected $_course_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_CURD constructor.\r\n-\t *\r\n-\t * @param int $the_user\r\n-\t * @param int $the_course\r\n-\t *\u002F\r\n-\tpublic function __construct( $the_user = 0, $the_course = 0 ) {\r\n-\t\t$this->_user_id   = $the_user;\r\n-\t\t$this->_course_id = $the_course;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses of an user.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.3.0\r\n-\t * @deprecated 4.2.4\r\n-\t *\u002F\r\n-\tpublic function get_courses( $args = array() ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.4' );\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$no_join_users = isset( $args['no_join_users'] ) && $args['no_join_users'];\r\n-\t\t$args          = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'offset'   => 0,\r\n-\t\t\t\t'limit'    => 10,\r\n-\t\t\t\t'expired'  => false,\r\n-\t\t\t\t'status'   => '',\r\n-\t\t\t\t'user_id'  => 0,\r\n-\t\t\t\t'paginate' => false,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Join\r\n-\t\t$join = \"\r\n-\t\t\tINNER JOIN {$wpdb->posts} p ON p.ID = X.item_id\r\n-\t\t\";\r\n-\r\n-\t\tif ( ! $no_join_users ) {\r\n-\t\t\t$join .= \"\r\n-\t\t\t\tINNER JOIN {$wpdb->users} u ON u.ID = X.user_id\r\n-\t\t\t\";\r\n-\t\t}\r\n-\r\n-\t\t$join .= $wpdb->prepare(\r\n-\t\t\t\"LEFT JOIN {$wpdb->learnpress_user_itemmeta} uim ON uim.learnpress_user_item_id = X.user_item_id AND uim.meta_key = %s\",\r\n-\t\t\t'grade'\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$where = $wpdb->prepare(\r\n-\t\t\t'WHERE 1\r\n-\t\t    AND X.item_type = %s\r\n-\t\t',\r\n-\t\t\tLP_COURSE_CPT\r\n-\t\t);\r\n-\r\n-\t\tif ( $args['user_id'] ) {\r\n-\r\n-\t\t\tif ( ! is_array( $args['user_id'] ) ) {\r\n-\t\t\t\t$user__in = preg_split( '!\\s*,\\s*!', $args['user_id'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user__in = $args['user_id'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$where .= 'AND u.ID IN(' . join( ',', $user__in ) . ')';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Limitation\r\n-\t\t$limit = $args['limit'] > 0 ? '\r\n-\t\t\tLIMIT ' . $args['offset'] . ', ' . $args['limit'] : '';\r\n-\r\n-\t\tif ( $args['status'] ) {\r\n-\r\n-\t\t\tif ( ! is_array( $args['status'] ) ) {\r\n-\t\t\t\t$status__in = preg_split( '!\\s*,\\s*!', $args['status'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$status__in = $args['status'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$where .= \" AND ( X.status IN('\" . join( \"','\", $status__in ) . \"')\";\r\n-\r\n-\t\t\t$status__in_1 = array();\r\n-\t\t\t$status__in_2 = array();\r\n-\r\n-\t\t\tif ( in_array( 'failed', $status__in ) ) {\r\n-\t\t\t\t$status__in_1[] = 'finished';\r\n-\t\t\t\t$status__in_2[] = 'failed';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( in_array( 'passed', $status__in ) ) {\r\n-\t\t\t\t$status__in_1[] = 'finished';\r\n-\t\t\t\t$status__in_2[] = 'passed';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( in_array( 'in-progress', $status__in ) ) {\r\n-\t\t\t\t$status__in_1[] = 'enrolled';\r\n-\t\t\t\t$status__in_2[] = 'in-progress';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( in_array( 'finished', $status__in ) ) {\r\n-\t\t\t\t$status__in_1[] = 'passed';\r\n-\t\t\t\t$status__in_1[] = 'failed';\r\n-\t\t\t\t$status__in_2[] = 'passed';\r\n-\t\t\t\t$status__in_2[] = 'failed';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $status__in_1 || $status__in_2 ) {\r\n-\r\n-\t\t\t\t$where .= \" OR (\r\n-\t\t\t\t\tX.status IN('\" . join( \"','\", $status__in_1 ) . \"')\";\r\n-\r\n-\t\t\t\tif ( ! in_array( 'in-progress', $status__in ) ) {\r\n-\t\t\t\t\t$where .= \"AND ( uim.meta_value IN('\" . join( \"','\", $status__in_2 ) . \"')\r\n-\t\t\t\t\t\t\" . ( in_array( 'in-progress', $status__in ) ? ' OR uim.meta_value IS NULL' : '' ) . ')';\r\n-\t\t\t\t}\r\n-\t\t\t\t$where .= ')';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$where .= ' )';\r\n-\r\n-\t\t}\r\n-\r\n-\t\tif ( $args['expired'] ) {\r\n-\t\t\t$where .= ' AND expiration_time \u003C= UTC_TIMESTAMP()';\r\n-\t\t}\r\n-\r\n-\t\tif ( $args['paginate'] && ! empty( $limit ) ) {\r\n-\t\t\t$found_rows = 'SQL_CALC_FOUND_ROWS';\r\n-\t\t} else {\r\n-\t\t\t$found_rows = '';\r\n-\t\t}\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT {$found_rows} p.ID course_id, X.*, IF(X.status = %s AND uim.meta_value IS NOT NULL, uim.meta_value, X.status) status\r\n-\t\t\tFROM(\r\n-\t\t\tSELECT ui.*\r\n-                FROM {$wpdb->learnpress_user_items} ui\r\n-\t\t\t\tLEFT JOIN {$wpdb->learnpress_user_items} uix\r\n-\t\t\t\t\tON ui.item_id = uix.item_id\r\n-\t\t\t\t\t\tAND ui.user_id = uix.user_id\r\n-\t\t\t\t\t\tAND ui.user_item_id \u003C uix.user_item_id\r\n-\t\t\t    WHERE uix.user_item_id IS NULL\r\n-\t\t\t) X\r\n-\t\t\t$join\r\n-\t\t\t$where\r\n-\t\t\t$limit\r\n-\t\t\",\r\n-\t\t\t'finished'\r\n-\t\t);\r\n-\r\n-\t\t$rows = $wpdb->get_results( $query );\r\n-\r\n-\t\t\u002F\u002F echo nl2br( $query );\r\n-\r\n-\t\tif ( $args['paginate'] && $args['limit'] ) {\r\n-\t\t\t$found_courses = sizeof( $rows ) ? $wpdb->get_var( 'SELECT FOUND_ROWS()' ) : 0;\r\n-\r\n-\t\t\t$return = array(\r\n-\t\t\t\t'courses'       => $rows,\r\n-\t\t\t\t'found_courses' => $found_courses,\r\n-\t\t\t\t'max_num_pages' => $found_courses ? ceil( $found_courses \u002F $args['limit'] ) : 0,\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\t$return = $rows;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F $query = $wpdb->prepare( \"\r\n-\t\t\u002F\u002F SELECT X.*\r\n-\t\t\u002F\u002F FROM(\r\n-\t\t\u002F\u002F SELECT ui.*\r\n-\t\t\u002F\u002F FROM {$wpdb->learnpress_user_items} ui\r\n-\t\t\u002F\u002F LEFT JOIN {$wpdb->learnpress_user_items} uix\r\n-\t\t\u002F\u002F ON ui.item_id = uix.item_id\r\n-\t\t\u002F\u002F AND ui.user_id = uix.user_id\r\n-\t\t\u002F\u002F AND ui.user_item_id \u003C uix.user_item_id\r\n-\t\t\u002F\u002F WHERE uix.user_item_id IS NULL\r\n-\t\t\u002F\u002F ) X\r\n-\t\t\u002F\u002F\r\n-\t\t\u002F\u002F WHERE\r\n-\t\t\u002F\u002F AND X.status = %s\r\n-\t\t\u002F\u002F AND expiration_time_gmt \u003C= UTC_TIMESTAMP()\r\n-\t\t\u002F\u002F LIMIT 0, 10\r\n-\t\t\u002F\u002F \", LP_COURSE_CPT, 'enrolled' );\r\n-\r\n-\t\t\u002F\u002F echo nl2br( $query );\r\n-\t\t\u002F\u002F learn_press_debug( $return );\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_User $user\r\n-\t *\u002F\r\n-\tpublic function create( &$user ) {\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_User $user\r\n-\t *\u002F\r\n-\tpublic function update( &$user ) {\r\n-\t\t\u002F\u002F TODO: Implement update() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_User $user\r\n-\t *\u002F\r\n-\tpublic function delete( &$user ) {\r\n-\t\t\u002F\u002F TODO: Implement delete() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load user data\r\n-\t *\r\n-\t * @param LP_User|LP_Abstract_User $user\r\n-\t *\r\n-\t * @return mixed;\r\n-\t *\u002F\r\n-\tpublic function load( &$user ) {\r\n-\t\t$user_id     = $user->get_id();\r\n-\t\t$user_object = get_user_by( 'id', $user_id );\r\n-\r\n-\t\tif ( false !== $user_object ) {\r\n-\t\t\t$user->set_data(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'email'           => $user_object->user_email,\r\n-\t\t\t\t\t'user_login'      => $user_object->user_login,\r\n-\t\t\t\t\t'description'     => $user_object->description,\r\n-\t\t\t\t\t'first_name'      => $user_object->first_name ?? '',\r\n-\t\t\t\t\t'last_name'       => $user_object->last_name ?? '',\r\n-\t\t\t\t\t'nickname'        => $user_object->nickname ?? '',\r\n-\t\t\t\t\t'display_name'    => $user_object->display_name,\r\n-\t\t\t\t\t'date_created'    => $user_object->user_registered,\r\n-\t\t\t\t\t'date_modified'   => get_user_meta( $user_id, 'last_update', true ),\r\n-\t\t\t\t\t'role'            => $user_object->roles[0] ?? '',\r\n-\t\t\t\t\t'roles'           => $user_object->roles,\r\n-\t\t\t\t\t'profile_picture' => get_user_meta( $user_id, '_lp_profile_picture', true ),\r\n-\t\t\t\t\t'profile_privacy' => get_user_meta( $user_id, '_lp_profile_privacy', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all orders of an user grouped by id of course.\r\n-\t *\r\n-\t * A course can have multi orders, each element is an array of order ids\r\n-\t * with the key is id of the course. The orders is sorted from highest\r\n-\t * to lowest. With the highest value is the latest order user placed (current order).\r\n-\t *\r\n-\t * Format:\r\n-\t *  array(\r\n-\t *      course_id_1 => array( order_id_1, order_id_2, ...),\r\n-\t *      course_id_2 => array( order_id_3, order_id_4, ...),\r\n-\t *      ...\r\n-\t *  )\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic function get_orders( $user_id, $args = array() ) {\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\tif ( ! $user_id || ! $user ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$cache_key = false;\r\n-\t\tif ( $args ) {\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'group_by_order' => false,\r\n-\t\t\t\t\t'status'         => '',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tksort( $args );\r\n-\t\t\t$cache_key = md5( serialize( $args ) );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Get orders from cache by args\r\n-\t\t\t *\u002F\r\n-\t\t\t$orders = LP_Object_Cache::get( \"user-{$user_id}-\" . $cache_key, 'lp-user-orders' );\r\n-\r\n-\t\t\tif ( false !== $orders ) {\r\n-\t\t\t\treturn $orders;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get orders for the user from cache\r\n-\t\t$orders = LP_Object_Cache::get( 'user-' . $user_id, 'lp-user-orders' );\r\n-\r\n-\t\tif ( false === $orders ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$orders                = array();\r\n-\t\t\t$post_status_in        = array_keys( LP_Order::get_order_statuses() );\r\n-\t\t\t$post_status_in_format = array_fill( 0, sizeof( $post_status_in ), '%s' );\r\n-\t\t\t$user_id_str           = $wpdb->prepare( '%\"%d\"%', $user_id );\r\n-\r\n-\t\t\t\u002F\u002F Get order by user\r\n-\t\t\t$sql_orders = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT p.*\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tINNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND meta_key = %s AND (meta_value = %d OR meta_value like '%s')\r\n-\t\t\t\t\",\r\n-\t\t\t\t'_user_id',\r\n-\t\t\t\t$user_id,\r\n-\t\t\t\t$user_id_str\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Get order checked out by Guest but with the email of the user are getting\r\n-\t\t\t * Error when checkout with guest then register error Start Quiz - nhamdv.\r\n-\t\t\t *\u002F\r\n-\t\t\t\u002F\u002F $sql_guest_orders = $wpdb->prepare(\r\n-\t\t\t\u002F\u002F \"\r\n-\t\t\t\u002F\u002F SELECT p.*\r\n-\t\t\t\u002F\u002F FROM {$wpdb->posts} p\r\n-\t\t\t\u002F\u002F INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND meta_key = %s AND meta_value = %s\r\n-\t\t\t\u002F\u002F LEFT JOIN {$wpdb->postmeta} pmu ON p.ID = pmu.post_id AND pmu.meta_key = %s AND pmu.meta_value IS NULL\r\n-\t\t\t\u002F\u002F \",\r\n-\t\t\t\u002F\u002F '_checkout_email',\r\n-\t\t\t\u002F\u002F $user->get_email(),\r\n-\t\t\t\u002F\u002F '_user_id'\r\n-\t\t\t\u002F\u002F );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * The rest\r\n-\t\t\t *\u002F\r\n-\t\t\t$sql_rest = $wpdb->prepare(\r\n-\t\t\t\t'\r\n-\t\t\t\tHAVING p.post_type = %s\r\n-\t\t\t\tAND p.post_status IN(' . join( ',', $post_status_in_format ) . ')\r\n-\t\t\t\tORDER BY ID DESC\r\n-\t\t\t',\r\n-\t\t\t\tarray_merge(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\tLP_ORDER_CPT,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$post_status_in\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$sql = $sql_orders \u002F* . ' UNION ' . $sql_guest_orders *\u002F . $sql_rest;\r\n-\r\n-\t\t\t$order_posts = $wpdb->get_results( $sql );\r\n-\r\n-\t\t\tif ( $order_posts ) {\r\n-\t\t\t\t$order_ids = array();\r\n-\r\n-\t\t\t\tforeach ( $order_posts as $order_post ) {\r\n-\t\t\t\t\t$_post = sanitize_post( $order_post, 'raw' );\r\n-\t\t\t\t\twp_cache_add( $_post->ID, $_post, 'posts' );\r\n-\r\n-\t\t\t\t\t$order_ids[] = $_post->ID;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$order_ids_format = array_fill( 0, sizeof( $order_ids ), '%d' );\r\n-\t\t\t\t$query            = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT meta_value as course_id, order_id\r\n-\t\t\t\t\t\tFROM {$wpdb->learnpress_order_items} oi\r\n-\t\t\t\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key = %s\r\n-\t\t\t\t\t\tWHERE oi.order_id IN (\" . join( ',', $order_ids_format ) . ')\r\n-\t\t\t\t\t\tORDER BY FIELD(order_id, ' . join( ',', $order_ids_format ) . ')\r\n-\t\t\t\t\t',\r\n-\t\t\t\t\tarray_merge( array( '_course_id' ), $order_ids, $order_ids )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$results = $wpdb->get_results( $query );\r\n-\r\n-\t\t\t\tif ( $results ) {\r\n-\t\t\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\t\t\tif ( empty( $orders[ $result->course_id ] ) ) {\r\n-\t\t\t\t\t\t\t$orders[ $result->course_id ] = array();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$orders[ $result->course_id ][] = $result->order_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Object_Cache::set( 'user-' . $user_id, $orders, 'lp-user-orders' );\r\n-\t\t}\r\n-\r\n-\t\tif ( $orders ) {\r\n-\t\t\tif ( array_key_exists( 'status', $args ) && $args['status'] ) {\r\n-\t\t\t\tLP_Helper::sanitize_order_status( $args['status'] );\r\n-\r\n-\t\t\t\t$statuses = (array) $args['status'];\r\n-\t\t\t\tforeach ( $orders as $course_id => $order_ids ) {\r\n-\t\t\t\t\t$orders[ $course_id ] = array();\r\n-\t\t\t\t\tforeach ( $order_ids as $order_id ) {\r\n-\t\t\t\t\t\tif ( in_array( get_post_status( $order_id ), $statuses ) ) {\r\n-\t\t\t\t\t\t\t$orders[ $course_id ][] = $order_id;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( array_key_exists( 'group_by_order', $args ) && $args['group_by_order'] ) {\r\n-\t\t\t\t$this->_group_orders( $orders );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $cache_key ) {\r\n-\t\t\tLP_Object_Cache::set( \"user-{$user_id}-\" . $cache_key, $orders, 'lp-user-orders' );\r\n-\t\t}\r\n-\r\n-\t\treturn $orders;\r\n-\t}\r\n-\r\n-\tprotected function _group_orders( &$orders ) {\r\n-\t\t$groups = array();\r\n-\t\tforeach ( $orders as $course_id => $order_ids ) {\r\n-\t\t\tforeach ( $order_ids as $order_id ) {\r\n-\t\t\t\tif ( empty( $groups[ $order_id ] ) ) {\r\n-\t\t\t\t\t$groups[ $order_id ] = array();\r\n-\t\t\t\t}\r\n-\t\t\t\t$groups[ $order_id ][] = $course_id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$orders = $groups;\r\n-\t\tkrsort( $orders );\r\n-\r\n-\t\treturn $orders;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Read meta data of an user item.\r\n-\t *\r\n-\t * @param $item\r\n-\t *\r\n-\t * @deprecated 4.2.4\r\n-\t *\u002F\r\n-\tprotected function _read_item_meta( &$item ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.4' );\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\r\n-\t\t\tWHERE learnpress_user_item_id = %d\r\n-\t\t\",\r\n-\t\t\t$item['user_item_id']\r\n-\t\t);\r\n-\r\n-\t\tupdate_meta_cache( 'learnpress_user_item', $item['user_item_id'] );\r\n-\r\n-\t\tif ( $meta = $wpdb->get_results( $query, ARRAY_A ) ) {\r\n-\t\t\t$item['meta'] = array();\r\n-\t\t\tforeach ( $meta as $k => $v ) {\r\n-\t\t\t\t$v['meta_value']               = LP_Helper::maybe_unserialize( $v['meta_value'] );\r\n-\t\t\t\t$item['meta'][ $v['meta_id'] ] = $v;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $user_item_id\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_user_item_by_id( $user_item_id, $type = '' ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\tWHERE user_item_id = %d\r\n-\t\t\t\" . ( $type ? $wpdb->prepare( 'AND item_type = %s', $type ) : '' ) . '\r\n-\t\t',\r\n-\t\t\t$user_item_id\r\n-\t\t);\r\n-\t\t$item  = $wpdb->get_row( $query, ARRAY_A );\r\n-\r\n-\t\treturn $item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update status of an user item by id.\r\n-\t *\r\n-\t * @param int $user_item_id\r\n-\t * @param string $new_status\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function update_user_item_status( $user_item_id, $new_status ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$item = $this->get_user_item_by_id( $user_item_id );\r\n-\t\tif ( ! $item ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F No need to update if it is not change\r\n-\t\tif ( $item['status'] === $new_status ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$updated = $wpdb->update(\r\n-\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\tarray( 'status' => $new_status ),\r\n-\t\t\tarray( 'user_item_id' => $user_item_id ),\r\n-\t\t\tarray( '%s' ),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\t\t\u002F\u002F if ( $updated ) {\r\n-\t\t\u002F\u002F \t$this->update_user_item_meta( $user_item_id, '_last_status', $item['status'] );\r\n-\t\t\u002F\u002F \t$this->update_user_item_meta( $user_item_id, '_current_status', $new_status );\r\n-\t\t\u002F\u002F }\r\n-\r\n-\t\treturn $updated;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete user item by fields.\r\n-\t *\r\n-\t * @param string $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function delete_user_item( $args = '' ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$args  = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'user_id'   => 0,\r\n-\t\t\t\t'item_id'   => 0,\r\n-\t\t\t\t'ref_id'    => 0,\r\n-\t\t\t\t'parent_id' => 0,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$where = array();\r\n-\t\tforeach ( $args as $k => $v ) {\r\n-\t\t\tif ( $v ) {\r\n-\t\t\t\t$where[ $k ] = $v;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $where ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\t\t$query_where = array();\r\n-\t\tforeach ( $where as $k => $v ) {\r\n-\t\t\t$query_where[] = \"{$k} = %d\";\r\n-\t\t}\r\n-\r\n-\t\t$query         = $wpdb->prepare(\r\n-\t\t\t\"SELECT user_item_id FROM {$wpdb->learnpress_user_items} WHERE \" . join(\r\n-\t\t\t\t' AND ',\r\n-\t\t\t\t$query_where\r\n-\t\t\t),\r\n-\t\t\tarray_values( $where )\r\n-\t\t);\r\n-\t\t$user_item_ids = $wpdb->get_col( $query );\r\n-\r\n-\t\t$wpdb->delete(\r\n-\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t$where,\r\n-\t\t\tarray_fill( 0, sizeof( $where ), '%d' )\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $user_item_ids as $user_item_id ) {\r\n-\t\t\t$wpdb->query(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id = %d\",\r\n-\t\t\t\t\t$user_item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tdo_action( 'learn-press\u002Fdeleted-user-item', $user_item_id );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses user has purchased via orders are completed\r\n-\t * but it is not already added to user-items table.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return array|bool|mixed\r\n-\t * @deprecated 4.2.4\r\n-\t *\u002F\r\n-\tpublic function query_courses_by_order( $user_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.4' );\r\n-\r\n-\t\treturn false;\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$query         = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT item_id\r\n-\t\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\t\tWHERE user_id = %d\r\n-\t\t\tAND item_type = %s\r\n-\t\t\",\r\n-\t\t\t$user_id,\r\n-\t\t\tLP_COURSE_CPT\r\n-\t\t);\r\n-\t\t$user_item_ids = $wpdb->get_col( $query );\r\n-\r\n-\t\t$orders = $this->get_orders(\r\n-\t\t\t$user_id,\r\n-\t\t\tarray(\r\n-\t\t\t\t'status'         => 'completed',\r\n-\t\t\t\t'group_by_order' => true,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $orders ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_ids = array_shift( $orders );\r\n-\r\n-\t\tforeach ( $orders as $ids ) {\r\n-\t\t\tif ( ! $ids ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\t$course_ids = array_merge( $course_ids, $ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( $user_item_ids ) {\r\n-\t\t\t$course_ids = array_diff( $course_ids, $user_item_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.4\r\n-\t *\u002F\r\n-\tpublic function read_course_info( $course ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.4' );\r\n-\r\n-\t\treturn [];\r\n-\t\t$data = $course;\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\r\n-\t\t\tWHERE learnpress_user_item_id = %d\r\n-\t\t\",\r\n-\t\t\t$course['user_item_id']\r\n-\t\t);\r\n-\r\n-\t\t$itemmeta = $wpdb->get_results( $query, ARRAY_A );\r\n-\r\n-\t\tif ( $itemmeta ) {\r\n-\t\t\tforeach ( $itemmeta as $item ) {\r\n-\t\t\t\t$data[ $item['meta_key'] ] = $item['meta_value'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function update_item( $item ) {\r\n-\t\tglobal $wpdb;\r\n-\t\tif ( empty( $item['user_item_id'] ) ) {\r\n-\t\t\t$wpdb->insert(\r\n-\t\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t\t$item\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.4\r\n-\t *\u002F\r\n-\tpublic function get_current_user_order( $user_id, $course_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.4' );\r\n-\r\n-\t\treturn 0;\r\n-\t\tglobal $wpdb;\r\n-\t\t$sql      = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT MAX(ID) AS order_id\r\n-\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\tINNER JOIN {$wpdb->postmeta} pm_u ON pm_u.post_id = p.ID AND pm_u.meta_key = %s AND pm_u.meta_value = %d\r\n-\t\t\tINNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_id = p.id\r\n-\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oim.meta_key = %s and oim.meta_value = %d\r\n-\t\t\",\r\n-\t\t\t'_user_id',\r\n-\t\t\t$user_id,\r\n-\t\t\t'_course_id',\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\t\t$order_id = $wpdb->get_var( $sql );\r\n-\r\n-\t\treturn $order_id;\r\n-\t}\r\n-\r\n-\tpublic function duplicate( &$user, $args = array() ) {\r\n-\t\t\u002F\u002F TODO: Implement duplicate() method.\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_User_CURD\n+ *\n+ * @since 3.0\n+ *\u002F\n+class LP_User_CURD extends LP_Object_Data_CURD implements LP_Interface_CURD {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_meta_type = 'user';\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $_user_id = 0;\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected $_course_id = 0;\n+\n+\t\u002F**\n+\t * LP_User_CURD constructor.\n+\t *\n+\t * @param int $the_user\n+\t * @param int $the_course\n+\t *\u002F\n+\tpublic function __construct( $the_user = 0, $the_course = 0 ) {\n+\t\t$this->_user_id   = $the_user;\n+\t\t$this->_course_id = $the_course;\n+\t}\n+\n+\t\u002F**\n+\t * Get courses of an user.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return array\n+\t * @since 3.3.0\n+\t * @deprecated 4.2.4\n+\t *\u002F\n+\tpublic function get_courses( $args = array() ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.4' );\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$no_join_users = isset( $args['no_join_users'] ) && $args['no_join_users'];\n+\t\t$args          = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'offset'   => 0,\n+\t\t\t\t'limit'    => 10,\n+\t\t\t\t'expired'  => false,\n+\t\t\t\t'status'   => '',\n+\t\t\t\t'user_id'  => 0,\n+\t\t\t\t'paginate' => false,\n+\t\t\t)\n+\t\t);\n+\n+\t\t\u002F\u002F Join\n+\t\t$join = \"\n+\t\t\tINNER JOIN {$wpdb->posts} p ON p.ID = X.item_id\n+\t\t\";\n+\n+\t\tif ( ! $no_join_users ) {\n+\t\t\t$join .= \"\n+\t\t\t\tINNER JOIN {$wpdb->users} u ON u.ID = X.user_id\n+\t\t\t\";\n+\t\t}\n+\n+\t\t$join .= $wpdb->prepare(\n+\t\t\t\"LEFT JOIN {$wpdb->learnpress_user_itemmeta} uim ON uim.learnpress_user_item_id = X.user_item_id AND uim.meta_key = %s\",\n+\t\t\t'grade'\n+\t\t);\n+\n+\t\t\u002F\u002F Where\n+\t\t$where = $wpdb->prepare(\n+\t\t\t'WHERE 1\n+\t\t    AND X.item_type = %s\n+\t\t',\n+\t\t\tLP_COURSE_CPT\n+\t\t);\n+\n+\t\tif ( $args['user_id'] ) {\n+\n+\t\t\tif ( ! is_array( $args['user_id'] ) ) {\n+\t\t\t\t$user__in = preg_split( '!\\s*,\\s*!', $args['user_id'] );\n+\t\t\t} else {\n+\t\t\t\t$user__in = $args['user_id'];\n+\t\t\t}\n+\n+\t\t\t$where .= 'AND u.ID IN(' . join( ',', $user__in ) . ')';\n+\t\t}\n+\n+\t\t\u002F\u002F Limitation\n+\t\t$limit = $args['limit'] > 0 ? '\n+\t\t\tLIMIT ' . $args['offset'] . ', ' . $args['limit'] : '';\n+\n+\t\tif ( $args['status'] ) {\n+\n+\t\t\tif ( ! is_array( $args['status'] ) ) {\n+\t\t\t\t$status__in = preg_split( '!\\s*,\\s*!', $args['status'] );\n+\t\t\t} else {\n+\t\t\t\t$status__in = $args['status'];\n+\t\t\t}\n+\n+\t\t\t$where .= \" AND ( X.status IN('\" . join( \"','\", $status__in ) . \"')\";\n+\n+\t\t\t$status__in_1 = array();\n+\t\t\t$status__in_2 = array();\n+\n+\t\t\tif ( in_array( 'failed', $status__in ) ) {\n+\t\t\t\t$status__in_1[] = 'finished';\n+\t\t\t\t$status__in_2[] = 'failed';\n+\t\t\t}\n+\n+\t\t\tif ( in_array( 'passed', $status__in ) ) {\n+\t\t\t\t$status__in_1[] = 'finished';\n+\t\t\t\t$status__in_2[] = 'passed';\n+\t\t\t}\n+\n+\t\t\tif ( in_array( 'in-progress', $status__in ) ) {\n+\t\t\t\t$status__in_1[] = 'enrolled';\n+\t\t\t\t$status__in_2[] = 'in-progress';\n+\t\t\t}\n+\n+\t\t\tif ( in_array( 'finished', $status__in ) ) {\n+\t\t\t\t$status__in_1[] = 'passed';\n+\t\t\t\t$status__in_1[] = 'failed';\n+\t\t\t\t$status__in_2[] = 'passed';\n+\t\t\t\t$status__in_2[] = 'failed';\n+\t\t\t}\n+\n+\t\t\tif ( $status__in_1 || $status__in_2 ) {\n+\n+\t\t\t\t$where .= \" OR (\n+\t\t\t\t\tX.status IN('\" . join( \"','\", $status__in_1 ) . \"')\";\n+\n+\t\t\t\tif ( ! in_array( 'in-progress', $status__in ) ) {\n+\t\t\t\t\t$where .= \"AND ( uim.meta_value IN('\" . join( \"','\", $status__in_2 ) . \"')\n+\t\t\t\t\t\t\" . ( in_array( 'in-progress', $status__in ) ? ' OR uim.meta_value IS NULL' : '' ) . ')';\n+\t\t\t\t}\n+\t\t\t\t$where .= ')';\n+\t\t\t}\n+\n+\t\t\t$where .= ' )';\n+\n+\t\t}\n+\n+\t\tif ( $args['expired'] ) {\n+\t\t\t$where .= ' AND expiration_time \u003C= UTC_TIMESTAMP()';\n+\t\t}\n+\n+\t\tif ( $args['paginate'] && ! empty( $limit ) ) {\n+\t\t\t$found_rows = 'SQL_CALC_FOUND_ROWS';\n+\t\t} else {\n+\t\t\t$found_rows = '';\n+\t\t}\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT {$found_rows} p.ID course_id, X.*, IF(X.status = %s AND uim.meta_value IS NOT NULL, uim.meta_value, X.status) status\n+\t\t\tFROM(\n+\t\t\tSELECT ui.*\n+                FROM {$wpdb->learnpress_user_items} ui\n+\t\t\t\tLEFT JOIN {$wpdb->learnpress_user_items} uix\n+\t\t\t\t\tON ui.item_id = uix.item_id\n+\t\t\t\t\t\tAND ui.user_id = uix.user_id\n+\t\t\t\t\t\tAND ui.user_item_id \u003C uix.user_item_id\n+\t\t\t    WHERE uix.user_item_id IS NULL\n+\t\t\t) X\n+\t\t\t$join\n+\t\t\t$where\n+\t\t\t$limit\n+\t\t\",\n+\t\t\t'finished'\n+\t\t);\n+\n+\t\t$rows = $wpdb->get_results( $query );\n+\n+\t\t\u002F\u002F echo nl2br( $query );\n+\n+\t\tif ( $args['paginate'] && $args['limit'] ) {\n+\t\t\t$found_courses = sizeof( $rows ) ? $wpdb->get_var( 'SELECT FOUND_ROWS()' ) : 0;\n+\n+\t\t\t$return = array(\n+\t\t\t\t'courses'       => $rows,\n+\t\t\t\t'found_courses' => $found_courses,\n+\t\t\t\t'max_num_pages' => $found_courses ? ceil( $found_courses \u002F $args['limit'] ) : 0,\n+\t\t\t);\n+\t\t} else {\n+\t\t\t$return = $rows;\n+\t\t}\n+\n+\t\t\u002F\u002F $query = $wpdb->prepare( \"\n+\t\t\u002F\u002F SELECT X.*\n+\t\t\u002F\u002F FROM(\n+\t\t\u002F\u002F SELECT ui.*\n+\t\t\u002F\u002F FROM {$wpdb->learnpress_user_items} ui\n+\t\t\u002F\u002F LEFT JOIN {$wpdb->learnpress_user_items} uix\n+\t\t\u002F\u002F ON ui.item_id = uix.item_id\n+\t\t\u002F\u002F AND ui.user_id = uix.user_id\n+\t\t\u002F\u002F AND ui.user_item_id \u003C uix.user_item_id\n+\t\t\u002F\u002F WHERE uix.user_item_id IS NULL\n+\t\t\u002F\u002F ) X\n+\t\t\u002F\u002F\n+\t\t\u002F\u002F WHERE\n+\t\t\u002F\u002F AND X.status = %s\n+\t\t\u002F\u002F AND expiration_time_gmt \u003C= UTC_TIMESTAMP()\n+\t\t\u002F\u002F LIMIT 0, 10\n+\t\t\u002F\u002F \", LP_COURSE_CPT, 'enrolled' );\n+\n+\t\t\u002F\u002F echo nl2br( $query );\n+\t\t\u002F\u002F learn_press_debug( $return );\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_User $user\n+\t *\u002F\n+\tpublic function create( &$user ) {\n+\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_User $user\n+\t *\u002F\n+\tpublic function update( &$user ) {\n+\t\t\u002F\u002F TODO: Implement update() method.\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_User $user\n+\t *\u002F\n+\tpublic function delete( &$user ) {\n+\t\t\u002F\u002F TODO: Implement delete() method.\n+\t}\n+\n+\t\u002F**\n+\t * Load user data\n+\t *\n+\t * @param LP_User|LP_Abstract_User $user\n+\t *\n+\t * @return mixed;\n+\t *\u002F\n+\tpublic function load( &$user ) {\n+\t\t$user_id     = $user->get_id();\n+\t\t$user_object = get_user_by( 'id', $user_id );\n+\n+\t\tif ( false !== $user_object ) {\n+\t\t\t$user->set_data(\n+\t\t\t\tarray(\n+\t\t\t\t\t'email'           => $user_object->user_email,\n+\t\t\t\t\t'user_login'      => $user_object->user_login,\n+\t\t\t\t\t'description'     => $user_object->description,\n+\t\t\t\t\t'first_name'      => $user_object->first_name ?? '',\n+\t\t\t\t\t'last_name'       => $user_object->last_name ?? '',\n+\t\t\t\t\t'nickname'        => $user_object->nickname ?? '',\n+\t\t\t\t\t'display_name'    => $user_object->display_name,\n+\t\t\t\t\t'date_created'    => $user_object->user_registered,\n+\t\t\t\t\t'date_modified'   => get_user_meta( $user_id, 'last_update', true ),\n+\t\t\t\t\t'role'            => $user_object->roles[0] ?? '',\n+\t\t\t\t\t'roles'           => $user_object->roles,\n+\t\t\t\t\t'profile_picture' => get_user_meta( $user_id, '_lp_profile_picture', true ),\n+\t\t\t\t\t'profile_privacy' => get_user_meta( $user_id, '_lp_profile_privacy', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get all orders of an user grouped by id of course.\n+\t *\n+\t * A course can have multi orders, each element is an array of order ids\n+\t * with the key is id of the course. The orders is sorted from highest\n+\t * to lowest. With the highest value is the latest order user placed (current order).\n+\t *\n+\t * Format:\n+\t *  array(\n+\t *      course_id_1 => array( order_id_1, order_id_2, ...),\n+\t *      course_id_2 => array( order_id_3, order_id_4, ...),\n+\t *      ...\n+\t *  )\n+\t *\n+\t * @param int $user_id\n+\t * @param array $args\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic function get_orders( $user_id, $args = array() ) {\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\tif ( ! $user_id || ! $user ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$cache_key = false;\n+\t\tif ( $args ) {\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'group_by_order' => false,\n+\t\t\t\t\t'status'         => '',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tksort( $args );\n+\t\t\t$cache_key = md5( serialize( $args ) );\n+\n+\t\t\t\u002F**\n+\t\t\t * Get orders from cache by args\n+\t\t\t *\u002F\n+\t\t\t$orders = LP_Object_Cache::get( \"user-{$user_id}-\" . $cache_key, 'lp-user-orders' );\n+\n+\t\t\tif ( false !== $orders ) {\n+\t\t\t\treturn $orders;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Get orders for the user from cache\n+\t\t$orders = LP_Object_Cache::get( 'user-' . $user_id, 'lp-user-orders' );\n+\n+\t\tif ( false === $orders ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$orders                = array();\n+\t\t\t$post_status_in        = array_keys( LP_Order::get_order_statuses() );\n+\t\t\t$post_status_in_format = array_fill( 0, sizeof( $post_status_in ), '%s' );\n+\t\t\t$user_id_str           = $wpdb->prepare( '%\"%d\"%', $user_id );\n+\n+\t\t\t\u002F\u002F Get order by user\n+\t\t\t$sql_orders = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT p.*\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tINNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND meta_key = %s AND (meta_value = %d OR meta_value like '%s')\n+\t\t\t\t\",\n+\t\t\t\t'_user_id',\n+\t\t\t\t$user_id,\n+\t\t\t\t$user_id_str\n+\t\t\t);\n+\n+\t\t\t\u002F**\n+\t\t\t * Get order checked out by Guest but with the email of the user are getting\n+\t\t\t * Error when checkout with guest then register error Start Quiz - nhamdv.\n+\t\t\t *\u002F\n+\t\t\t\u002F\u002F $sql_guest_orders = $wpdb->prepare(\n+\t\t\t\u002F\u002F \"\n+\t\t\t\u002F\u002F SELECT p.*\n+\t\t\t\u002F\u002F FROM {$wpdb->posts} p\n+\t\t\t\u002F\u002F INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND meta_key = %s AND meta_value = %s\n+\t\t\t\u002F\u002F LEFT JOIN {$wpdb->postmeta} pmu ON p.ID = pmu.post_id AND pmu.meta_key = %s AND pmu.meta_value IS NULL\n+\t\t\t\u002F\u002F \",\n+\t\t\t\u002F\u002F '_checkout_email',\n+\t\t\t\u002F\u002F $user->get_email(),\n+\t\t\t\u002F\u002F '_user_id'\n+\t\t\t\u002F\u002F );\n+\n+\t\t\t\u002F**\n+\t\t\t * The rest\n+\t\t\t *\u002F\n+\t\t\t$sql_rest = $wpdb->prepare(\n+\t\t\t\t'\n+\t\t\t\tHAVING p.post_type = %s\n+\t\t\t\tAND p.post_status IN(' . join( ',', $post_status_in_format ) . ')\n+\t\t\t\tORDER BY ID DESC\n+\t\t\t',\n+\t\t\t\tarray_merge(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\tLP_ORDER_CPT,\n+\t\t\t\t\t),\n+\t\t\t\t\t$post_status_in\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$sql = $sql_orders \u002F* . ' UNION ' . $sql_guest_orders *\u002F . $sql_rest;\n+\n+\t\t\t$order_posts = $wpdb->get_results( $sql );\n+\n+\t\t\tif ( $order_posts ) {\n+\t\t\t\t$order_ids = array();\n+\n+\t\t\t\tforeach ( $order_posts as $order_post ) {\n+\t\t\t\t\t$_post = sanitize_post( $order_post, 'raw' );\n+\t\t\t\t\twp_cache_add( $_post->ID, $_post, 'posts' );\n+\n+\t\t\t\t\t$order_ids[] = $_post->ID;\n+\t\t\t\t}\n+\n+\t\t\t\t$order_ids_format = array_fill( 0, sizeof( $order_ids ), '%d' );\n+\t\t\t\t$query            = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT meta_value as course_id, order_id\n+\t\t\t\t\t\tFROM {$wpdb->learnpress_order_items} oi\n+\t\t\t\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oi.order_item_id = oim.learnpress_order_item_id AND oim.meta_key = %s\n+\t\t\t\t\t\tWHERE oi.order_id IN (\" . join( ',', $order_ids_format ) . ')\n+\t\t\t\t\t\tORDER BY FIELD(order_id, ' . join( ',', $order_ids_format ) . ')\n+\t\t\t\t\t',\n+\t\t\t\t\tarray_merge( array( '_course_id' ), $order_ids, $order_ids )\n+\t\t\t\t);\n+\n+\t\t\t\t$results = $wpdb->get_results( $query );\n+\n+\t\t\t\tif ( $results ) {\n+\t\t\t\t\tforeach ( $results as $result ) {\n+\t\t\t\t\t\tif ( empty( $orders[ $result->course_id ] ) ) {\n+\t\t\t\t\t\t\t$orders[ $result->course_id ] = array();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$orders[ $result->course_id ][] = $result->order_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tLP_Object_Cache::set( 'user-' . $user_id, $orders, 'lp-user-orders' );\n+\t\t}\n+\n+\t\tif ( $orders ) {\n+\t\t\tif ( array_key_exists( 'status', $args ) && $args['status'] ) {\n+\t\t\t\tLP_Helper::sanitize_order_status( $args['status'] );\n+\n+\t\t\t\t$statuses = (array) $args['status'];\n+\t\t\t\tforeach ( $orders as $course_id => $order_ids ) {\n+\t\t\t\t\t$orders[ $course_id ] = array();\n+\t\t\t\t\tforeach ( $order_ids as $order_id ) {\n+\t\t\t\t\t\tif ( in_array( get_post_status( $order_id ), $statuses ) ) {\n+\t\t\t\t\t\t\t$orders[ $course_id ][] = $order_id;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( array_key_exists( 'group_by_order', $args ) && $args['group_by_order'] ) {\n+\t\t\t\t$this->_group_orders( $orders );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $cache_key ) {\n+\t\t\tLP_Object_Cache::set( \"user-{$user_id}-\" . $cache_key, $orders, 'lp-user-orders' );\n+\t\t}\n+\n+\t\treturn $orders;\n+\t}\n+\n+\tprotected function _group_orders( &$orders ) {\n+\t\t$groups = array();\n+\t\tforeach ( $orders as $course_id => $order_ids ) {\n+\t\t\tforeach ( $order_ids as $order_id ) {\n+\t\t\t\tif ( empty( $groups[ $order_id ] ) ) {\n+\t\t\t\t\t$groups[ $order_id ] = array();\n+\t\t\t\t}\n+\t\t\t\t$groups[ $order_id ][] = $course_id;\n+\t\t\t}\n+\t\t}\n+\t\t$orders = $groups;\n+\t\tkrsort( $orders );\n+\n+\t\treturn $orders;\n+\t}\n+\n+\t\u002F**\n+\t * Read meta data of an user item.\n+\t *\n+\t * @param $item\n+\t *\n+\t * @deprecated 4.2.4\n+\t *\u002F\n+\tprotected function _read_item_meta( &$item ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.4' );\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\n+\t\t\tWHERE learnpress_user_item_id = %d\n+\t\t\",\n+\t\t\t$item['user_item_id']\n+\t\t);\n+\n+\t\tupdate_meta_cache( 'learnpress_user_item', $item['user_item_id'] );\n+\n+\t\tif ( $meta = $wpdb->get_results( $query, ARRAY_A ) ) {\n+\t\t\t$item['meta'] = array();\n+\t\t\tforeach ( $meta as $k => $v ) {\n+\t\t\t\t$v['meta_value']               = LP_Helper::maybe_unserialize( $v['meta_value'] );\n+\t\t\t\t$item['meta'][ $v['meta_id'] ] = $v;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param int $user_item_id\n+\t * @param string $type\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_user_item_by_id( $user_item_id, $type = '' ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\tWHERE user_item_id = %d\n+\t\t\t\" . ( $type ? $wpdb->prepare( 'AND item_type = %s', $type ) : '' ) . '\n+\t\t',\n+\t\t\t$user_item_id\n+\t\t);\n+\t\t$item  = $wpdb->get_row( $query, ARRAY_A );\n+\n+\t\treturn $item;\n+\t}\n+\n+\t\u002F**\n+\t * Update status of an user item by id.\n+\t *\n+\t * @param int $user_item_id\n+\t * @param string $new_status\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function update_user_item_status( $user_item_id, $new_status ) {\n+\t\tglobal $wpdb;\n+\t\t$item = $this->get_user_item_by_id( $user_item_id );\n+\t\tif ( ! $item ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F No need to update if it is not change\n+\t\tif ( $item['status'] === $new_status ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$updated = $wpdb->update(\n+\t\t\t$wpdb->learnpress_user_items,\n+\t\t\tarray( 'status' => $new_status ),\n+\t\t\tarray( 'user_item_id' => $user_item_id ),\n+\t\t\tarray( '%s' ),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\t\t\u002F\u002F if ( $updated ) {\n+\t\t\u002F\u002F \t$this->update_user_item_meta( $user_item_id, '_last_status', $item['status'] );\n+\t\t\u002F\u002F \t$this->update_user_item_meta( $user_item_id, '_current_status', $new_status );\n+\t\t\u002F\u002F }\n+\n+\t\treturn $updated;\n+\t}\n+\n+\t\u002F**\n+\t * Delete user item by fields.\n+\t *\n+\t * @param string $args\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function delete_user_item( $args = '' ) {\n+\t\tglobal $wpdb;\n+\t\t$args  = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'user_id'   => 0,\n+\t\t\t\t'item_id'   => 0,\n+\t\t\t\t'ref_id'    => 0,\n+\t\t\t\t'parent_id' => 0,\n+\t\t\t)\n+\t\t);\n+\t\t$where = array();\n+\t\tforeach ( $args as $k => $v ) {\n+\t\t\tif ( $v ) {\n+\t\t\t\t$where[ $k ] = $v;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $where ) {\n+\t\t\treturn false;\n+\t\t}\n+\t\t$query_where = array();\n+\t\tforeach ( $where as $k => $v ) {\n+\t\t\t$query_where[] = \"{$k} = %d\";\n+\t\t}\n+\n+\t\t$query         = $wpdb->prepare(\n+\t\t\t\"SELECT user_item_id FROM {$wpdb->learnpress_user_items} WHERE \" . join(\n+\t\t\t\t' AND ',\n+\t\t\t\t$query_where\n+\t\t\t),\n+\t\t\tarray_values( $where )\n+\t\t);\n+\t\t$user_item_ids = $wpdb->get_col( $query );\n+\n+\t\t$wpdb->delete(\n+\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t$where,\n+\t\t\tarray_fill( 0, sizeof( $where ), '%d' )\n+\t\t);\n+\n+\t\tforeach ( $user_item_ids as $user_item_id ) {\n+\t\t\t$wpdb->query(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"DELETE FROM {$wpdb->learnpress_user_itemmeta} WHERE learnpress_user_item_id = %d\",\n+\t\t\t\t\t$user_item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tdo_action( 'learn-press\u002Fdeleted-user-item', $user_item_id );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get courses user has purchased via orders are completed\n+\t * but it is not already added to user-items table.\n+\t *\n+\t * @param int $user_id\n+\t *\n+\t * @return array|bool|mixed\n+\t * @deprecated 4.2.4\n+\t *\u002F\n+\tpublic function query_courses_by_order( $user_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.4' );\n+\n+\t\treturn false;\n+\t\tglobal $wpdb;\n+\n+\t\t$query         = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT item_id\n+\t\t\tFROM {$wpdb->learnpress_user_items}\n+\t\t\tWHERE user_id = %d\n+\t\t\tAND item_type = %s\n+\t\t\",\n+\t\t\t$user_id,\n+\t\t\tLP_COURSE_CPT\n+\t\t);\n+\t\t$user_item_ids = $wpdb->get_col( $query );\n+\n+\t\t$orders = $this->get_orders(\n+\t\t\t$user_id,\n+\t\t\tarray(\n+\t\t\t\t'status'         => 'completed',\n+\t\t\t\t'group_by_order' => true,\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( ! $orders ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_ids = array_shift( $orders );\n+\n+\t\tforeach ( $orders as $ids ) {\n+\t\t\tif ( ! $ids ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t$course_ids = array_merge( $course_ids, $ids );\n+\t\t}\n+\n+\t\tif ( $user_item_ids ) {\n+\t\t\t$course_ids = array_diff( $course_ids, $user_item_ids );\n+\t\t}\n+\n+\t\treturn $course_ids;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.4\n+\t *\u002F\n+\tpublic function read_course_info( $course ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.4' );\n+\n+\t\treturn [];\n+\t\t$data = $course;\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\n+\t\t\tWHERE learnpress_user_item_id = %d\n+\t\t\",\n+\t\t\t$course['user_item_id']\n+\t\t);\n+\n+\t\t$itemmeta = $wpdb->get_results( $query, ARRAY_A );\n+\n+\t\tif ( $itemmeta ) {\n+\t\t\tforeach ( $itemmeta as $item ) {\n+\t\t\t\t$data[ $item['meta_key'] ] = $item['meta_value'];\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function update_item( $item ) {\n+\t\tglobal $wpdb;\n+\t\tif ( empty( $item['user_item_id'] ) ) {\n+\t\t\t$wpdb->insert(\n+\t\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t\t$item\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.4\n+\t *\u002F\n+\tpublic function get_current_user_order( $user_id, $course_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.4' );\n+\n+\t\treturn 0;\n+\t\tglobal $wpdb;\n+\t\t$sql      = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT MAX(ID) AS order_id\n+\t\t\tFROM {$wpdb->posts} p\n+\t\t\tINNER JOIN {$wpdb->postmeta} pm_u ON pm_u.post_id = p.ID AND pm_u.meta_key = %s AND pm_u.meta_value = %d\n+\t\t\tINNER JOIN {$wpdb->learnpress_order_items} oi ON oi.order_id = p.id\n+\t\t\tINNER JOIN {$wpdb->learnpress_order_itemmeta} oim ON oim.meta_key = %s and oim.meta_value = %d\n+\t\t\",\n+\t\t\t'_user_id',\n+\t\t\t$user_id,\n+\t\t\t'_course_id',\n+\t\t\t$course_id\n+\t\t);\n+\t\t$order_id = $wpdb->get_var( $sql );\n+\n+\t\treturn $order_id;\n+\t}\n+\n+\tpublic function duplicate( &$user, $args = array() ) {\n+\t\t\u002F\u002F TODO: Implement duplicate() method.\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-user-item-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-user-item-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcurds\u002Fclass-lp-user-item-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcurds\u002Fclass-lp-user-item-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,730 +1,730 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_User_Item_CURD\r\n- *\r\n- * Class to manipulating user item with database.\r\n- *\u002F\r\n-class LP_User_Item_CURD implements LP_Interface_CURD {\r\n-\t\u002F**\r\n-\t * Errors codes and message.\r\n-\t *\r\n-\t * @var array|bool\r\n-\t *\u002F\r\n-\tprotected $_error_messages = false;\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_Item_CURD constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->_error_messages = array(\r\n-\t\t\t'QUIZ_NOT_EXISTS' => __( 'The quiz does not exist.', 'learnpress' ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Quiz $quiz\r\n-\t *\r\n-\t * @return LP_Quiz|mixed\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function load( &$quiz ) {\r\n-\t\t$the_id = $quiz->get_id();\r\n-\r\n-\t\tif ( ! $the_id || LP_QUIZ_CPT !== learn_press_get_post_type( $the_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid quiz.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quiz->set_data_via_methods(\r\n-\t\t\tarray(\r\n-\t\t\t\t'retake_count'       => get_post_meta( $quiz->get_id(), '_lp_retake_count', true ),\r\n-\t\t\t\t'show_result'        => get_post_meta( $quiz->get_id(), '_lp_show_result', true ),\r\n-\t\t\t\t'passing_grade_type' => get_post_meta( $quiz->get_id(), '_lp_passing_grade_type', true ),\r\n-\t\t\t\t'passing_grade'      => get_post_meta( $quiz->get_id(), '_lp_passing_grade', true ),\r\n-\t\t\t\t'instant_check'      => get_post_meta( $quiz->get_id(), '_lp_instant_check', true ),\r\n-\t\t\t\t'review_questions'   => get_post_meta( $quiz->get_id(), '_lp_review', true ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$this->_load_questions( $quiz );\r\n-\t\t\u002F\u002F $this->_update_meta_cache( $quiz );\r\n-\r\n-\t\treturn $quiz;\r\n-\t}\r\n-\r\n-\tpublic function create( &$quiz ) {\r\n-\t\t\u002F\u002F TODO: Implement create() method.\r\n-\t}\r\n-\r\n-\tpublic function update( &$quiz ) {\r\n-\t\t\u002F\u002F TODO: Implement update() method.\r\n-\t}\r\n-\r\n-\tpublic function delete( &$quiz ) {\r\n-\t\t\u002F\u002F TODO: Implement delete() method.\r\n-\t}\r\n-\r\n-\tpublic function duplicate( &$quiz, $args = array() ) {\r\n-\t\t\u002F\u002F TODO: Implement duplicate() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Quiz $quiz\r\n-\t *\u002F\r\n-\tprotected function _load_questions( &$quiz ) {\r\n-\t\t$id        = $quiz->get_id();\r\n-\t\t$questions = LP_Object_Cache::get( 'questions-' . $id, 'learn-press\u002Fquizzes' );\r\n-\t\tif ( false === $questions ) {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$questions = array();\r\n-\t\t\t$query     = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT p.*, qq.question_order AS `order`\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id\r\n-\t\t\t\tWHERE qq.quiz_id = %d\r\n-\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\tORDER BY question_order ASC\r\n-\t\t\t\",\r\n-\t\t\t\t$id,\r\n-\t\t\t\t'publish'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$results = $wpdb->get_results( $query, OBJECT_K );\r\n-\r\n-\t\t\tif ( $results ) {\r\n-\t\t\t\tforeach ( $results as $k => $v ) {\r\n-\t\t\t\t\twp_cache_set( $v->ID, $v, 'posts' );\r\n-\t\t\t\t\t$questions[ $v->ID ] = $v->ID;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\tLP_Object_Cache::set( 'questions-' . $id, $questions, 'learn-press\u002Fquizzes' );\r\n-\r\n-\t\t\t$this->_load_question_answers( $quiz );\r\n-\t\t}\r\n-\t\tunset( $questions );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Quiz $quiz\r\n-\t *\r\n-\t * @deprecated 4.1.6.4\r\n-\t *\u002F\r\n-\tprotected function _update_meta_cache( &$quiz ) {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.1.6.4' );\r\n-\t\t$meta_ids = LP_Object_Cache::get( 'questions-' . $quiz->get_id(), 'learn-press\u002Fquizzes' );\r\n-\r\n-\t\tif ( false === $meta_ids ) {\r\n-\t\t\t$meta_ids = array( $quiz->get_id() );\r\n-\t\t} else {\r\n-\t\t\t$meta_ids[] = $quiz->get_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F LP_Helper_CURD::update_meta_cache( $meta_ids );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load answer quiz's questions.\r\n-\t *\u002F\r\n-\tprotected function _load_question_answers( &$quiz ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$questions = $this->get_questions( $quiz );\r\n-\r\n-\t\tif ( ! $questions ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$format = array_fill( 0, sizeof( $questions ), '%d' );\r\n-\t\t$query  = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->prefix}learnpress_question_answers\r\n-\t\t\tWHERE question_id IN(\" . join( ',', $format ) . ')\r\n-\t\t\tORDER BY question_id, `order` ASC\r\n-\t\t',\r\n-\t\t\t$questions\r\n-\t\t);\r\n-\r\n-\t\t$results = $wpdb->get_results( $query, OBJECT_K );\r\n-\r\n-\t\tif ( $results ) {\r\n-\t\t\t$answer_options = array();\r\n-\t\t\t$meta_ids       = array();\r\n-\t\t\t$group          = 0;\r\n-\t\t\tforeach ( $results as $k => $v ) {\r\n-\t\t\t\tif ( empty( $answer_options[ $v->question_id ] ) ) {\r\n-\t\t\t\t\t$answer_options[ $v->question_id ] = array();\r\n-\t\t\t\t}\r\n-\t\t\t\t$v = (array) $v;\r\n-\r\n-\t\t\t\t$answer_options[ $v['question_id'] ][] = $v;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $answer_options as $question_id => $options ) {\r\n-\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, $options, 'learn-press\u002Fquestions' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $meta_ids as $meta_id ) {\r\n-\t\t\t\t\u002F\u002F $this->_load_question_answer_meta( $meta_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$fetched    = array_keys( $answer_options );\r\n-\t\t\t$un_fetched = array_diff( $questions, $fetched );\r\n-\t\t\t\u002F\u002F $this->_load_question_answer_meta( $answer_options );\r\n-\t\t} else {\r\n-\t\t\t$un_fetched = $questions;\r\n-\t\t}\r\n-\r\n-\t\tif ( $un_fetched ) {\r\n-\t\t\tforeach ( $un_fetched as $question_id ) {\r\n-\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, array(), 'learn-press\u002Fquestions' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t}\r\n-\r\n-\tprotected function _load_question_answer_meta( $meta_ids ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$format = array_fill( 0, sizeof( $meta_ids ), '%d' );\r\n-\t\t$query  = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_question_answermeta}\r\n-\t\t\tWHERE learnpress_question_answer_id IN(\" . join( ',', $format ) . ')\r\n-\t\t',\r\n-\t\t\t$meta_ids\r\n-\t\t);\r\n-\r\n-\t\t$metas = $wpdb->get_results( $query );\r\n-\r\n-\t\tif ( $metas ) {\r\n-\t\t\tforeach ( $metas as $meta ) {\r\n-\t\t\t\t$key        = $meta->meta_key;\r\n-\t\t\t\t$option_key = $meta->learnpress_question_answer_id;\r\n-\r\n-\t\t\t\tif ( ! empty( $answer_options[ $option_key ] ) ) {\r\n-\t\t\t\t\tif ( $key == 'checked' ) {\r\n-\t\t\t\t\t\t$key = 'is_true';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$answer_options[ $option_key ][ $key ] = $meta->meta_value;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sort questions by order.\r\n-\t * Check in an array of questions if there is a key 'order'.\r\n-\t *\r\n-\t * @param $questions\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected function _maybe_sort_questions( &$questions ) {\r\n-\t\tif ( ! $questions ) {\r\n-\t\t\treturn $questions;\r\n-\t\t}\r\n-\r\n-\t\t$first = reset( $questions );\r\n-\r\n-\t\tif ( empty( $first['order'] ) ) {\r\n-\t\t\treturn $questions;\r\n-\t\t}\r\n-\r\n-\t\tuasort( $questions, array( $this, '_callback_sort_questions' ) );\r\n-\r\n-\t\treturn $questions;\r\n-\t}\r\n-\r\n-\tpublic function _callback_sort_questions( $a, $b ) {\r\n-\t\treturn $a['order'] > $b['order'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Reorder question by indexed number.\r\n-\t *\r\n-\t * @param LP_Quiz|WP_Post|int $the_quiz\r\n-\t * @param mixed               $questions\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function reorder_questions( $the_quiz, $questions = false ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\tif ( ! $the_quiz ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( false == $questions ) {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT quiz_question_id as id\r\n-\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\tWHERE quiz_id = %d\r\n-\t\t\t\tORDER BY question_order ASC\r\n-\t\t\t\",\r\n-\t\t\t\t$the_quiz->get_id()\r\n-\t\t\t);\r\n-\r\n-\t\t\t$rows = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( $rows ) {\r\n-\t\t\t\t$update = array();\r\n-\t\t\t\t$ids    = wp_list_pluck( $rows, 'id' );\r\n-\t\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\r\n-\t\t\t\tforeach ( $rows as $order => $row ) {\r\n-\t\t\t\t\t$update[] = $wpdb->prepare( 'WHEN quiz_question_id = %d THEN %d', $row->id, $order + 1 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\t\tSET question_order = CASE\r\n-\t\t\t\t\t\" . join( \"\\n\", $update ) . '\r\n-\t\t\t\t\tELSE question_order END\r\n-\t\t\t\t\tWHERE quiz_question_id IN(' . join( ',', $format ) . ')\r\n-\t\t\t\t',\r\n-\t\t\t\t\t$ids\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\treturn $wpdb->query( $query );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$query = \"\r\n-\t\t\t\tUPDATE {$wpdb->learnpress_quiz_questions}\r\n-\t\t\t\tSET question_order = CASE\r\n-\t\t\t\";\r\n-\r\n-\t\t\tfor ( $order = 0, $n = sizeof( $questions ); $order \u003C $n; $order ++ ) {\r\n-\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_id = %d THEN %d', $questions[ $order ], $order + 1 ) . \"\\n\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query .= sprintf( 'ELSE question_order END WHERE quiz_id = %d', $the_quiz->get_id() );\r\n-\r\n-\t\t\treturn $wpdb->query( $query );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all questions in a quiz\r\n-\t *\r\n-\t * @param LP_Quiz $the_quiz\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic function get_questions( $the_quiz ) {\r\n-\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\tif ( ! $the_quiz ) {\r\n-\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\r\n-\t\t}\r\n-\r\n-\t\treturn LP_Object_Cache::get( 'questions-' . $the_quiz->get_id(), 'learn-press\u002Fquizzes' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add existing question into quiz.\r\n-\t *\r\n-\t * @param LP_Quiz|int $the_quiz\r\n-\t * @param             $question_id\r\n-\t * @param array       $args\r\n-\t *\r\n-\t * @return mixed false on failed\r\n-\t *\u002F\r\n-\tpublic function add_question( $the_quiz, $question_id, $args = array() ) {\r\n-\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\r\n-\r\n-\t\tif ( ! $the_quiz ) {\r\n-\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\r\n-\t\t}\r\n-\r\n-\t\t$question = learn_press_get_question( $question_id );\r\n-\r\n-\t\tif ( ! $question ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->is_exists_question( $question_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$id   = $the_quiz->get_id();\r\n-\t\t$args = wp_parse_args( $args, array( 'order' => - 1 ) );\r\n-\t\t$this->reorder_questions( $the_quiz );\r\n-\r\n-\t\tif ( $args['order'] >= 0 ) {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\tSET question_order = question_order + 1\r\n-\t\t\t\tWHERE quiz_id = %d AND question_order >= %d\r\n-\t\t\t\",\r\n-\t\t\t\t$id,\r\n-\t\t\t\t$args['order']\r\n-\t\t\t);\r\n-\t\t\t$wpdb->get_results( $query );\r\n-\t\t} else {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT max(question_order) + 1 as ordering\r\n-\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\r\n-\t\t\t\tWHERE quiz_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t$id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$order = $wpdb->get_var( $query );\r\n-\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\t$order = 1;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$args['order'] = $order;\r\n-\t\t}\r\n-\t\t$inserted = $wpdb->insert(\r\n-\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\r\n-\t\t\tarray(\r\n-\t\t\t\t'quiz_id'        => $id,\r\n-\t\t\t\t'question_id'    => $question_id,\r\n-\t\t\t\t'question_order' => $args['order'],\r\n-\t\t\t),\r\n-\t\t\tarray( '%d', '%d', '%d' )\r\n-\t\t);\r\n-\r\n-\t\treturn $inserted ? $wpdb->insert_id : $inserted;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if a question (or batch of questions) is already added to quiz.\r\n-\t *\r\n-\t * @param int       $the_id\r\n-\t * @param int|array $ids\r\n-\t *\r\n-\t * @return array|bool|null|object\r\n-\t *\u002F\r\n-\tpublic function is_exists_question( $the_id, $ids = array() ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tsettype( $ids, 'array' );\r\n-\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\r\n-\t\t$args   = $ids;\r\n-\t\t$args[] = $the_id;\r\n-\t\t$query  = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT quiz_question_id\r\n-\t\t\tFROM {$wpdb->learnpress_quiz_questions}\r\n-\t\t\tWHERE question_id IN( \" . join( ',', $format ) . ' )\r\n-\t\t\t\tAND quiz_id = %d\r\n-\t\t',\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\t$results = $wpdb->get_results( $query );\r\n-\r\n-\t\tif ( $results ) {\r\n-\t\t\treturn $results;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function add_meta( &$object, $meta ) {\r\n-\t\t\u002F\u002F TODO: Implement add_meta() method.\r\n-\t}\r\n-\r\n-\tpublic function delete_meta( &$object, $meta ) {\r\n-\t\t\u002F\u002F TODO: Implement delete_meta() method.\r\n-\t}\r\n-\r\n-\tpublic function read_meta( &$object ) {\r\n-\t\t\u002F\u002F TODO: Implement read_meta() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function update_meta( &$object, $meta ) {\r\n-\t\treturn learn_press_update_user_item_meta( $object->get_user_item_id(), $meta->meta_key, $meta->meta_value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get single user item by values of fields.\r\n-\t *\r\n-\t * @param string|array $field\r\n-\t * @param string       $value\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.1.0\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function get_item_by( $field, $value = '' ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\tif ( $rows = $this->get_items_by( $field, $value ) ) {\r\n-\t\t\treturn $rows[0];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get multiple rows of user item by values of fields.\r\n-\t *\r\n-\t * @param string|array $field\r\n-\t * @param string       $value\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.1.0\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function get_items_by( $field, $value = '' ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$where = '';\r\n-\t\t$order = 'ORDER BY user_item_id DESC';\r\n-\r\n-\t\tif ( is_array( $field ) ) {\r\n-\t\t\tforeach ( $field as $k => $v ) {\r\n-\t\t\t\tif ( is_string( $v ) ) {\r\n-\t\t\t\t\t$where .= $wpdb->prepare( \" AND {$k} = %s\", $v );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$where .= $wpdb->prepare( \" AND {$k} = %d\", $v );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( is_string( $value ) ) {\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$field} = %s\", $value );\r\n-\t\t\t} else {\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$field} = %s\", $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$query = \"SELECT * FROM {$wpdb->learnpress_user_items} WHERE 1 {$where} {$order}\";\r\n-\r\n-\t\treturn $wpdb->get_results( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get WP_Object.\r\n-\t *\r\n-\t * @param $code\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tprotected function get_error( $code ) {\r\n-\t\tif ( isset( $this->_error_messages[ $code ] ) ) {\r\n-\t\t\treturn new WP_Error( $code, $this->_error_messages[ $code ] );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Parse attribute 'preview' for all items in a course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.2.0\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3 - comment - not use\r\n-\t *\u002F\r\n-\t\u002F*public function parse_items_preview( $course_id, $user_id = 0 ) {\r\n-\t\t$items = array();\r\n-\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t$user         = learn_press_get_user( $user_id, false );\r\n-\t\t$current_item = LP_Global::course_item();\r\n-\t\t$get_item_ids = $course->get_item_ids();\r\n-\t\t$enrolled     = $user ? $user->has_enrolled_course( $course_id ) : false;\r\n-\r\n-\t\tif ( $get_item_ids ) {\r\n-\t\t\tforeach ( $get_item_ids as $item_id ) {\r\n-\t\t\t\t$is_preview = get_post_meta( $item_id, '_lp_preview', true );\r\n-\r\n-\t\t\t\tif ( $enrolled ) {\r\n-\t\t\t\t\t$is_preview = 'no';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$cached = LP_Object_Cache::get(\r\n-\t\t\t\t\t'item-' . $user_id . '-' . $course_id . '-' . $item_id,\r\n-\t\t\t\t\t'learn-press\u002Fpreview-items'\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( false === $cached ) {\r\n-\t\t\t\t\tLP_Object_Cache::set(\r\n-\t\t\t\t\t\t'item-' . $user_id . '-' . $course->get_id() . '-' . $item_id,\r\n-\t\t\t\t\t\t$is_preview,\r\n-\t\t\t\t\t\t'learn-press\u002Fpreview-items'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$items[ $item_id ] = $is_preview;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Parse classes for all items in a course.\r\n-\t *\r\n-\t * @param int $course_id .\r\n-\t * @param int $user_id .\r\n-\t * @param array|string $more .\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @since 3.2.0\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic function parse_items_classes( int $course_id = 0, int $user_id = 0, $more = array() ): array {\r\n-\t\t$items = array();\r\n-\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t$get_item_ids = $course->get_item_ids();\r\n-\r\n-\t\tif ( empty( $get_item_ids ) ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn $items;\r\n-\t\t}\r\n-\r\n-\t\t$current_item            = LP_Global::course_item();\r\n-\t\t$enrolled                = $user->has_enrolled_or_finished( $course_id );\r\n-\t\t$is_free                 = $course->is_free();\r\n-\t\t$no_required_enroll      = $course->is_no_required_enroll();\r\n-\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\r\n-\r\n-\t\tforeach ( $get_item_ids as $item_id ) {\r\n-\t\t\t$item = $course->get_item( $item_id );\r\n-\r\n-\t\t\tif ( ! $item instanceof LP_Course_Item ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_view_item = $user->can_view_item( $item_id, $can_view_content_course );\r\n-\r\n-\t\t\t$defaults = array_merge(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'course-item',\r\n-\t\t\t\t\t'course-item-' . $item->get_item_type(),\r\n-\t\t\t\t\t'course-item-' . $item_id,\r\n-\t\t\t\t),\r\n-\t\t\t\t(array) $more\r\n-\t\t\t);\r\n-\r\n-\t\t\t$post_format = $item->get_format();\r\n-\t\t\tif ( ( 'standard' !== $post_format ) && $post_format ) {\r\n-\t\t\t\t$defaults[] = 'course-item-type-' . $post_format;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $current_item && $current_item->get_id() == $item->get_id() ) {\r\n-\t\t\t\t$defaults[] = 'current';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Edit by tungnx, rewrite class to show icon.\r\n-\t\t\tif ( $no_required_enroll ) {\r\n-\t\t\t\t$defaults[] = 'item-free';\r\n-\t\t\t} elseif ( ! $enrolled ) {\r\n-\t\t\t\t$defaults['item-locked'] = 'item-locked';\r\n-\r\n-\t\t\t\tif ( $item->is_preview() ) {\r\n-\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\r\n-\t\t\t\t\t$defaults['has-status']   = 'has-status';\r\n-\t\t\t\t\tunset( $defaults['item-locked'] );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( ! $can_view_item->flag ) {\r\n-\t\t\t\t$defaults[] = 'item-locked';\r\n-\t\t\t} else {\r\n-\t\t\t\t$item_status = $user->get_item_status( $item_id, $course_id );\r\n-\t\t\t\t$item_grade  = $user->get_item_grade( $item_id, $course_id );\r\n-\r\n-\t\t\t\tif ( $item_status ) {\r\n-\t\t\t\t\t$defaults[] = 'has-status';\r\n-\t\t\t\t\t$defaults[] = 'status-' . $item_status;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $item_status ) {\r\n-\t\t\t\t\tcase 'started':\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'completed':\r\n-\t\t\t\t\t\t$defaults[] = $item_grade;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tif ( $item->is_preview() ) {\r\n-\t\t\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\r\n-\t\t\t\t\t\t\t$defaults['has-status']   = 'has-status';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$item_class = apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-status-class',\r\n-\t\t\t\t\t\t\t$item_status,\r\n-\t\t\t\t\t\t\t$item_grade,\r\n-\t\t\t\t\t\t\t$item->get_item_type(),\r\n-\t\t\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t\t\t$course_id\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $item_class ) {\r\n-\t\t\t\t\t\t\t$defaults[] = $item_class;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t$classes = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse-item-class',\r\n-\t\t\t\t$defaults,\r\n-\t\t\t\t$item->get_item_type(),\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$course_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Filter unwanted values.\r\n-\t\t\t$classes = is_array( $classes ) ? $classes : explode( ' ', $classes );\r\n-\t\t\t$classes = array_filter( $classes );\r\n-\t\t\t$classes = array_unique( $classes );\r\n-\r\n-\t\t\tLP_Object_Cache::set( 'item-' . $user_id . '-' . $item_id, $classes, 'learn-press\u002Fpost-classes' );\r\n-\t\t\t$items[ $item_id ] = $classes;\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_User_Item_CURD\n+ *\n+ * Class to manipulating user item with database.\n+ *\u002F\n+class LP_User_Item_CURD implements LP_Interface_CURD {\n+\t\u002F**\n+\t * Errors codes and message.\n+\t *\n+\t * @var array|bool\n+\t *\u002F\n+\tprotected $_error_messages = false;\n+\n+\t\u002F**\n+\t * LP_User_Item_CURD constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->_error_messages = array(\n+\t\t\t'QUIZ_NOT_EXISTS' => __( 'The quiz does not exist.', 'learnpress' ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Quiz $quiz\n+\t *\n+\t * @return LP_Quiz|mixed\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function load( &$quiz ) {\n+\t\t$the_id = $quiz->get_id();\n+\n+\t\tif ( ! $the_id || LP_QUIZ_CPT !== learn_press_get_post_type( $the_id ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid quiz.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quiz->set_data_via_methods(\n+\t\t\tarray(\n+\t\t\t\t'retake_count'       => get_post_meta( $quiz->get_id(), '_lp_retake_count', true ),\n+\t\t\t\t'show_result'        => get_post_meta( $quiz->get_id(), '_lp_show_result', true ),\n+\t\t\t\t'passing_grade_type' => get_post_meta( $quiz->get_id(), '_lp_passing_grade_type', true ),\n+\t\t\t\t'passing_grade'      => get_post_meta( $quiz->get_id(), '_lp_passing_grade', true ),\n+\t\t\t\t'instant_check'      => get_post_meta( $quiz->get_id(), '_lp_instant_check', true ),\n+\t\t\t\t'review_questions'   => get_post_meta( $quiz->get_id(), '_lp_review', true ),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$this->_load_questions( $quiz );\n+\t\t\u002F\u002F $this->_update_meta_cache( $quiz );\n+\n+\t\treturn $quiz;\n+\t}\n+\n+\tpublic function create( &$quiz ) {\n+\t\t\u002F\u002F TODO: Implement create() method.\n+\t}\n+\n+\tpublic function update( &$quiz ) {\n+\t\t\u002F\u002F TODO: Implement update() method.\n+\t}\n+\n+\tpublic function delete( &$quiz ) {\n+\t\t\u002F\u002F TODO: Implement delete() method.\n+\t}\n+\n+\tpublic function duplicate( &$quiz, $args = array() ) {\n+\t\t\u002F\u002F TODO: Implement duplicate() method.\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Quiz $quiz\n+\t *\u002F\n+\tprotected function _load_questions( &$quiz ) {\n+\t\t$id        = $quiz->get_id();\n+\t\t$questions = LP_Object_Cache::get( 'questions-' . $id, 'learn-press\u002Fquizzes' );\n+\t\tif ( false === $questions ) {\n+\t\t\tglobal $wpdb;\n+\t\t\t$questions = array();\n+\t\t\t$query     = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT p.*, qq.question_order AS `order`\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tINNER JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON p.ID = qq.question_id\n+\t\t\t\tWHERE qq.quiz_id = %d\n+\t\t\t\tAND p.post_status = %s\n+\t\t\t\tORDER BY question_order ASC\n+\t\t\t\",\n+\t\t\t\t$id,\n+\t\t\t\t'publish'\n+\t\t\t);\n+\n+\t\t\t$results = $wpdb->get_results( $query, OBJECT_K );\n+\n+\t\t\tif ( $results ) {\n+\t\t\t\tforeach ( $results as $k => $v ) {\n+\t\t\t\t\twp_cache_set( $v->ID, $v, 'posts' );\n+\t\t\t\t\t$questions[ $v->ID ] = $v->ID;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tLP_Object_Cache::set( 'questions-' . $id, $questions, 'learn-press\u002Fquizzes' );\n+\n+\t\t\t$this->_load_question_answers( $quiz );\n+\t\t}\n+\t\tunset( $questions );\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Quiz $quiz\n+\t *\n+\t * @deprecated 4.1.6.4\n+\t *\u002F\n+\tprotected function _update_meta_cache( &$quiz ) {\n+\t\t_deprecated_function( __FUNCTION__, '4.1.6.4' );\n+\t\t$meta_ids = LP_Object_Cache::get( 'questions-' . $quiz->get_id(), 'learn-press\u002Fquizzes' );\n+\n+\t\tif ( false === $meta_ids ) {\n+\t\t\t$meta_ids = array( $quiz->get_id() );\n+\t\t} else {\n+\t\t\t$meta_ids[] = $quiz->get_id();\n+\t\t}\n+\n+\t\t\u002F\u002F LP_Helper_CURD::update_meta_cache( $meta_ids );\n+\t}\n+\n+\t\u002F**\n+\t * Load answer quiz's questions.\n+\t *\u002F\n+\tprotected function _load_question_answers( &$quiz ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$questions = $this->get_questions( $quiz );\n+\n+\t\tif ( ! $questions ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$format = array_fill( 0, sizeof( $questions ), '%d' );\n+\t\t$query  = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->prefix}learnpress_question_answers\n+\t\t\tWHERE question_id IN(\" . join( ',', $format ) . ')\n+\t\t\tORDER BY question_id, `order` ASC\n+\t\t',\n+\t\t\t$questions\n+\t\t);\n+\n+\t\t$results = $wpdb->get_results( $query, OBJECT_K );\n+\n+\t\tif ( $results ) {\n+\t\t\t$answer_options = array();\n+\t\t\t$meta_ids       = array();\n+\t\t\t$group          = 0;\n+\t\t\tforeach ( $results as $k => $v ) {\n+\t\t\t\tif ( empty( $answer_options[ $v->question_id ] ) ) {\n+\t\t\t\t\t$answer_options[ $v->question_id ] = array();\n+\t\t\t\t}\n+\t\t\t\t$v = (array) $v;\n+\n+\t\t\t\t$answer_options[ $v['question_id'] ][] = $v;\n+\t\t\t}\n+\n+\t\t\tforeach ( $answer_options as $question_id => $options ) {\n+\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, $options, 'learn-press\u002Fquestions' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $meta_ids as $meta_id ) {\n+\t\t\t\t\u002F\u002F $this->_load_question_answer_meta( $meta_id );\n+\t\t\t}\n+\n+\t\t\t$fetched    = array_keys( $answer_options );\n+\t\t\t$un_fetched = array_diff( $questions, $fetched );\n+\t\t\t\u002F\u002F $this->_load_question_answer_meta( $answer_options );\n+\t\t} else {\n+\t\t\t$un_fetched = $questions;\n+\t\t}\n+\n+\t\tif ( $un_fetched ) {\n+\t\t\tforeach ( $un_fetched as $question_id ) {\n+\t\t\t\tLP_Object_Cache::set( 'answer-options-' . $question_id, array(), 'learn-press\u002Fquestions' );\n+\t\t\t}\n+\t\t}\n+\n+\t}\n+\n+\tprotected function _load_question_answer_meta( $meta_ids ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$format = array_fill( 0, sizeof( $meta_ids ), '%d' );\n+\t\t$query  = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_question_answermeta}\n+\t\t\tWHERE learnpress_question_answer_id IN(\" . join( ',', $format ) . ')\n+\t\t',\n+\t\t\t$meta_ids\n+\t\t);\n+\n+\t\t$metas = $wpdb->get_results( $query );\n+\n+\t\tif ( $metas ) {\n+\t\t\tforeach ( $metas as $meta ) {\n+\t\t\t\t$key        = $meta->meta_key;\n+\t\t\t\t$option_key = $meta->learnpress_question_answer_id;\n+\n+\t\t\t\tif ( ! empty( $answer_options[ $option_key ] ) ) {\n+\t\t\t\t\tif ( $key == 'checked' ) {\n+\t\t\t\t\t\t$key = 'is_true';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$answer_options[ $option_key ][ $key ] = $meta->meta_value;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Sort questions by order.\n+\t * Check in an array of questions if there is a key 'order'.\n+\t *\n+\t * @param $questions\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tprotected function _maybe_sort_questions( &$questions ) {\n+\t\tif ( ! $questions ) {\n+\t\t\treturn $questions;\n+\t\t}\n+\n+\t\t$first = reset( $questions );\n+\n+\t\tif ( empty( $first['order'] ) ) {\n+\t\t\treturn $questions;\n+\t\t}\n+\n+\t\tuasort( $questions, array( $this, '_callback_sort_questions' ) );\n+\n+\t\treturn $questions;\n+\t}\n+\n+\tpublic function _callback_sort_questions( $a, $b ) {\n+\t\treturn $a['order'] > $b['order'];\n+\t}\n+\n+\t\u002F**\n+\t * Reorder question by indexed number.\n+\t *\n+\t * @param LP_Quiz|WP_Post|int $the_quiz\n+\t * @param mixed               $questions\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function reorder_questions( $the_quiz, $questions = false ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\tif ( ! $the_quiz ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( false == $questions ) {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT quiz_question_id as id\n+\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\tWHERE quiz_id = %d\n+\t\t\t\tORDER BY question_order ASC\n+\t\t\t\",\n+\t\t\t\t$the_quiz->get_id()\n+\t\t\t);\n+\n+\t\t\t$rows = $wpdb->get_results( $query );\n+\n+\t\t\tif ( $rows ) {\n+\t\t\t\t$update = array();\n+\t\t\t\t$ids    = wp_list_pluck( $rows, 'id' );\n+\t\t\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\n+\t\t\t\tforeach ( $rows as $order => $row ) {\n+\t\t\t\t\t$update[] = $wpdb->prepare( 'WHEN quiz_question_id = %d THEN %d', $row->id, $order + 1 );\n+\t\t\t\t}\n+\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\t\tSET question_order = CASE\n+\t\t\t\t\t\" . join( \"\\n\", $update ) . '\n+\t\t\t\t\tELSE question_order END\n+\t\t\t\t\tWHERE quiz_question_id IN(' . join( ',', $format ) . ')\n+\t\t\t\t',\n+\t\t\t\t\t$ids\n+\t\t\t\t);\n+\n+\t\t\t\treturn $wpdb->query( $query );\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$query = \"\n+\t\t\t\tUPDATE {$wpdb->learnpress_quiz_questions}\n+\t\t\t\tSET question_order = CASE\n+\t\t\t\";\n+\n+\t\t\tfor ( $order = 0, $n = sizeof( $questions ); $order \u003C $n; $order ++ ) {\n+\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_id = %d THEN %d', $questions[ $order ], $order + 1 ) . \"\\n\";\n+\t\t\t}\n+\n+\t\t\t$query .= sprintf( 'ELSE question_order END WHERE quiz_id = %d', $the_quiz->get_id() );\n+\n+\t\t\treturn $wpdb->query( $query );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get all questions in a quiz\n+\t *\n+\t * @param LP_Quiz $the_quiz\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic function get_questions( $the_quiz ) {\n+\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\tif ( ! $the_quiz ) {\n+\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\n+\t\t}\n+\n+\t\treturn LP_Object_Cache::get( 'questions-' . $the_quiz->get_id(), 'learn-press\u002Fquizzes' );\n+\t}\n+\n+\t\u002F**\n+\t * Add existing question into quiz.\n+\t *\n+\t * @param LP_Quiz|int $the_quiz\n+\t * @param             $question_id\n+\t * @param array       $args\n+\t *\n+\t * @return mixed false on failed\n+\t *\u002F\n+\tpublic function add_question( $the_quiz, $question_id, $args = array() ) {\n+\t\t$the_quiz = learn_press_get_quiz( $the_quiz );\n+\n+\t\tif ( ! $the_quiz ) {\n+\t\t\treturn $this->get_error( 'QUESTION_NOT_EXISTS' );\n+\t\t}\n+\n+\t\t$question = learn_press_get_question( $question_id );\n+\n+\t\tif ( ! $question ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( $this->is_exists_question( $question_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$id   = $the_quiz->get_id();\n+\t\t$args = wp_parse_args( $args, array( 'order' => - 1 ) );\n+\t\t$this->reorder_questions( $the_quiz );\n+\n+\t\tif ( $args['order'] >= 0 ) {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\tSET question_order = question_order + 1\n+\t\t\t\tWHERE quiz_id = %d AND question_order >= %d\n+\t\t\t\",\n+\t\t\t\t$id,\n+\t\t\t\t$args['order']\n+\t\t\t);\n+\t\t\t$wpdb->get_results( $query );\n+\t\t} else {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT max(question_order) + 1 as ordering\n+\t\t\t\tFROM {$wpdb->prefix}learnpress_quiz_questions\n+\t\t\t\tWHERE quiz_id = %d\n+\t\t\t\",\n+\t\t\t\t$id\n+\t\t\t);\n+\n+\t\t\t$order = $wpdb->get_var( $query );\n+\n+\t\t\tif ( ! $order ) {\n+\t\t\t\t$order = 1;\n+\t\t\t}\n+\n+\t\t\t$args['order'] = $order;\n+\t\t}\n+\t\t$inserted = $wpdb->insert(\n+\t\t\t$wpdb->prefix . 'learnpress_quiz_questions',\n+\t\t\tarray(\n+\t\t\t\t'quiz_id'        => $id,\n+\t\t\t\t'question_id'    => $question_id,\n+\t\t\t\t'question_order' => $args['order'],\n+\t\t\t),\n+\t\t\tarray( '%d', '%d', '%d' )\n+\t\t);\n+\n+\t\treturn $inserted ? $wpdb->insert_id : $inserted;\n+\t}\n+\n+\t\u002F**\n+\t * Check if a question (or batch of questions) is already added to quiz.\n+\t *\n+\t * @param int       $the_id\n+\t * @param int|array $ids\n+\t *\n+\t * @return array|bool|null|object\n+\t *\u002F\n+\tpublic function is_exists_question( $the_id, $ids = array() ) {\n+\t\tglobal $wpdb;\n+\n+\t\tsettype( $ids, 'array' );\n+\t\t$format = array_fill( 0, sizeof( $ids ), '%d' );\n+\t\t$args   = $ids;\n+\t\t$args[] = $the_id;\n+\t\t$query  = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT quiz_question_id\n+\t\t\tFROM {$wpdb->learnpress_quiz_questions}\n+\t\t\tWHERE question_id IN( \" . join( ',', $format ) . ' )\n+\t\t\t\tAND quiz_id = %d\n+\t\t',\n+\t\t\t$args\n+\t\t);\n+\n+\t\t$results = $wpdb->get_results( $query );\n+\n+\t\tif ( $results ) {\n+\t\t\treturn $results;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function add_meta( &$object, $meta ) {\n+\t\t\u002F\u002F TODO: Implement add_meta() method.\n+\t}\n+\n+\tpublic function delete_meta( &$object, $meta ) {\n+\t\t\u002F\u002F TODO: Implement delete_meta() method.\n+\t}\n+\n+\tpublic function read_meta( &$object ) {\n+\t\t\u002F\u002F TODO: Implement read_meta() method.\n+\t}\n+\n+\t\u002F**\n+\t * @param $object\n+\t * @param $meta\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function update_meta( &$object, $meta ) {\n+\t\treturn learn_press_update_user_item_meta( $object->get_user_item_id(), $meta->meta_key, $meta->meta_value );\n+\t}\n+\n+\t\u002F**\n+\t * Get single user item by values of fields.\n+\t *\n+\t * @param string|array $field\n+\t * @param string       $value\n+\t *\n+\t * @return mixed\n+\t * @since 3.1.0\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function get_item_by( $field, $value = '' ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\tif ( $rows = $this->get_items_by( $field, $value ) ) {\n+\t\t\treturn $rows[0];\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get multiple rows of user item by values of fields.\n+\t *\n+\t * @param string|array $field\n+\t * @param string       $value\n+\t *\n+\t * @return array\n+\t * @since 3.1.0\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function get_items_by( $field, $value = '' ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\tglobal $wpdb;\n+\n+\t\t$where = '';\n+\t\t$order = 'ORDER BY user_item_id DESC';\n+\n+\t\tif ( is_array( $field ) ) {\n+\t\t\tforeach ( $field as $k => $v ) {\n+\t\t\t\tif ( is_string( $v ) ) {\n+\t\t\t\t\t$where .= $wpdb->prepare( \" AND {$k} = %s\", $v );\n+\t\t\t\t} else {\n+\t\t\t\t\t$where .= $wpdb->prepare( \" AND {$k} = %d\", $v );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( is_string( $value ) ) {\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$field} = %s\", $value );\n+\t\t\t} else {\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$field} = %s\", $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$query = \"SELECT * FROM {$wpdb->learnpress_user_items} WHERE 1 {$where} {$order}\";\n+\n+\t\treturn $wpdb->get_results( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get WP_Object.\n+\t *\n+\t * @param $code\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tprotected function get_error( $code ) {\n+\t\tif ( isset( $this->_error_messages[ $code ] ) ) {\n+\t\t\treturn new WP_Error( $code, $this->_error_messages[ $code ] );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Parse attribute 'preview' for all items in a course\n+\t *\n+\t * @param int $course_id\n+\t * @param int $user_id\n+\t *\n+\t * @return array\n+\t * @since 3.2.0\n+\t * @editor tungnx\n+\t * @modify 4.1.3 - comment - not use\n+\t *\u002F\n+\t\u002F*public function parse_items_preview( $course_id, $user_id = 0 ) {\n+\t\t$items = array();\n+\n+\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t}\n+\n+\t\t$user         = learn_press_get_user( $user_id, false );\n+\t\t$current_item = LP_Global::course_item();\n+\t\t$get_item_ids = $course->get_item_ids();\n+\t\t$enrolled     = $user ? $user->has_enrolled_course( $course_id ) : false;\n+\n+\t\tif ( $get_item_ids ) {\n+\t\t\tforeach ( $get_item_ids as $item_id ) {\n+\t\t\t\t$is_preview = get_post_meta( $item_id, '_lp_preview', true );\n+\n+\t\t\t\tif ( $enrolled ) {\n+\t\t\t\t\t$is_preview = 'no';\n+\t\t\t\t}\n+\n+\t\t\t\t$cached = LP_Object_Cache::get(\n+\t\t\t\t\t'item-' . $user_id . '-' . $course_id . '-' . $item_id,\n+\t\t\t\t\t'learn-press\u002Fpreview-items'\n+\t\t\t\t);\n+\n+\t\t\t\tif ( false === $cached ) {\n+\t\t\t\t\tLP_Object_Cache::set(\n+\t\t\t\t\t\t'item-' . $user_id . '-' . $course->get_id() . '-' . $item_id,\n+\t\t\t\t\t\t$is_preview,\n+\t\t\t\t\t\t'learn-press\u002Fpreview-items'\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$items[ $item_id ] = $is_preview;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Parse classes for all items in a course.\n+\t *\n+\t * @param int $course_id .\n+\t * @param int $user_id .\n+\t * @param array|string $more .\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @since 3.2.0\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic function parse_items_classes( int $course_id = 0, int $user_id = 0, $more = array() ): array {\n+\t\t$items = array();\n+\n+\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t}\n+\n+\t\t$get_item_ids = $course->get_item_ids();\n+\n+\t\tif ( empty( $get_item_ids ) ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\t\tif ( ! $user ) {\n+\t\t\treturn $items;\n+\t\t}\n+\n+\t\t$current_item            = LP_Global::course_item();\n+\t\t$enrolled                = $user->has_enrolled_or_finished( $course_id );\n+\t\t$is_free                 = $course->is_free();\n+\t\t$no_required_enroll      = $course->is_no_required_enroll();\n+\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\n+\n+\t\tforeach ( $get_item_ids as $item_id ) {\n+\t\t\t$item = $course->get_item( $item_id );\n+\n+\t\t\tif ( ! $item instanceof LP_Course_Item ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$can_view_item = $user->can_view_item( $item_id, $can_view_content_course );\n+\n+\t\t\t$defaults = array_merge(\n+\t\t\t\tarray(\n+\t\t\t\t\t'course-item',\n+\t\t\t\t\t'course-item-' . $item->get_item_type(),\n+\t\t\t\t\t'course-item-' . $item_id,\n+\t\t\t\t),\n+\t\t\t\t(array) $more\n+\t\t\t);\n+\n+\t\t\t$post_format = $item->get_format();\n+\t\t\tif ( ( 'standard' !== $post_format ) && $post_format ) {\n+\t\t\t\t$defaults[] = 'course-item-type-' . $post_format;\n+\t\t\t}\n+\n+\t\t\tif ( $current_item && $current_item->get_id() == $item->get_id() ) {\n+\t\t\t\t$defaults[] = 'current';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Edit by tungnx, rewrite class to show icon.\n+\t\t\tif ( $no_required_enroll ) {\n+\t\t\t\t$defaults[] = 'item-free';\n+\t\t\t} elseif ( ! $enrolled ) {\n+\t\t\t\t$defaults['item-locked'] = 'item-locked';\n+\n+\t\t\t\tif ( $item->is_preview() ) {\n+\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\n+\t\t\t\t\t$defaults['has-status']   = 'has-status';\n+\t\t\t\t\tunset( $defaults['item-locked'] );\n+\t\t\t\t}\n+\t\t\t} elseif ( ! $can_view_item->flag ) {\n+\t\t\t\t$defaults[] = 'item-locked';\n+\t\t\t} else {\n+\t\t\t\t$item_status = $user->get_item_status( $item_id, $course_id );\n+\t\t\t\t$item_grade  = $user->get_item_grade( $item_id, $course_id );\n+\n+\t\t\t\tif ( $item_status ) {\n+\t\t\t\t\t$defaults[] = 'has-status';\n+\t\t\t\t\t$defaults[] = 'status-' . $item_status;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $item_status ) {\n+\t\t\t\t\tcase 'started':\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'completed':\n+\t\t\t\t\t\t$defaults[] = $item_grade;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tif ( $item->is_preview() ) {\n+\t\t\t\t\t\t\t$defaults['item-preview'] = 'item-preview';\n+\t\t\t\t\t\t\t$defaults['has-status']   = 'has-status';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$item_class = apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fcourse-item-status-class',\n+\t\t\t\t\t\t\t$item_status,\n+\t\t\t\t\t\t\t$item_grade,\n+\t\t\t\t\t\t\t$item->get_item_type(),\n+\t\t\t\t\t\t\t$item_id,\n+\t\t\t\t\t\t\t$course_id\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $item_class ) {\n+\t\t\t\t\t\t\t$defaults[] = $item_class;\n+\t\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t$classes = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse-item-class',\n+\t\t\t\t$defaults,\n+\t\t\t\t$item->get_item_type(),\n+\t\t\t\t$item_id,\n+\t\t\t\t$course_id\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Filter unwanted values.\n+\t\t\t$classes = is_array( $classes ) ? $classes : explode( ' ', $classes );\n+\t\t\t$classes = array_filter( $classes );\n+\t\t\t$classes = array_unique( $classes );\n+\n+\t\t\tLP_Object_Cache::set( 'item-' . $user_id . '-' . $item_id, $classes, 'learn-press\u002Fpost-classes' );\n+\t\t\t$items[ $item_id ] = $classes;\n+\t\t}\n+\n+\t\treturn $items;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fabstract.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fabstract.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fabstract.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fabstract.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1150 +1,1150 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Abstract_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\UserTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-abstract class LP_Abstract_Post_Type {\r\n-\t\u002F**\r\n-\t * Type of post\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_post_type = '';\r\n-\r\n-\t\u002F**\r\n-\t * Screen list post type\r\n-\t * Ex: edit-{post_type}\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_screen_list = '';\r\n-\r\n-\t\u002F**\r\n-\t * Metaboxes registered\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_meta_boxes = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected $_current_meta_box = null;\r\n-\r\n-\t\u002F**\r\n-\t * Columns display on list table\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_columns = array();\r\n-\r\n-\t\u002F**\r\n-\t * Sortable columns\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_sortable_columns = array();\r\n-\r\n-\t\u002F**\r\n-\t * Map default method to a new method\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\t\u002F\u002F protected $_map_methods = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_default_metas = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_remove_features = array();\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\r\n-\t * @param string\r\n-\t * @param mixed\r\n-\t *\u002F\r\n-\tpublic function __construct( $post_type = '', $args = '' ) {\r\n-\r\n-\t\tif ( ! empty( $post_type ) ) {\r\n-\t\t\t$this->_post_type = $post_type;\r\n-\t\t}\r\n-\r\n-\t\t$this->_do_register();\r\n-\r\n-\t\tadd_filter( 'wp_list_table_class_name', [ $this, 'wp_list_table_class_name' ], 10, 2 );\r\n-\t\tadd_action( 'save_post', array( $this, '_do_save_post' ), - 1, 3 );\r\n-\t\tadd_action( 'wp_after_insert_post', [ $this, 'wp_after_insert_post' ], - 1, 3 );\r\n-\t\tadd_action( 'before_delete_post', array( $this, '_before_delete_post' ) );\r\n-\t\tadd_action( 'deleted_post', array( $this, '_deleted_post' ) );\r\n-\t\tadd_action( 'wp_trash_post', array( $this, '_before_trash_post' ) );\r\n-\t\tadd_action( 'trashed_post', array( $this, '_trashed_post' ) );\r\n-\r\n-\t\t\u002F\u002Fadd_filter( 'manage_posts_columns', array( $this, '_manage_columns_head_title' ), 11, 2 );\r\n-\t\t\u002F\u002Fadd_action( 'manage_posts_custom_column', array( $this, '_manage_column_value' ), 11, 2 );\r\n-\t\tadd_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );\r\n-\t\tadd_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );\r\n-\t\tadd_filter( 'manage_' . $this->_post_type . '_posts_custom_column', array( $this, 'columns_content' ), 10, 2 );\r\n-\r\n-\t\tadd_filter( 'posts_fields', array( $this, '_posts_fields' ) );\r\n-\t\tadd_filter( 'posts_join_paged', array( $this, '_posts_join_paged' ) );\r\n-\t\tadd_filter( 'posts_where_paged', array( $this, '_posts_where_paged' ) );\r\n-\t\tadd_filter( 'posts_orderby', array( $this, '_posts_orderby' ) );\r\n-\r\n-\t\t\u002F\u002F Show actions link on list post admin.\r\n-\t\tadd_filter( 'post_row_actions', array( $this, '_post_row_actions' ), 10, 2 );\r\n-\r\n-\t\t\u002F\u002F New metabox: Nhamdv\r\n-\t\tadd_action( 'add_meta_boxes', array( $this, 'render_meta_box' ), 0 );\r\n-\r\n-\t\t\u002F\u002F After update h5p and withdraw will remove it.\r\n-\t\tadd_action( 'load-post.php', array( $this, 'add_meta_boxes' ), 0 );\r\n-\t\tadd_action( 'load-post-new.php', array( $this, 'add_meta_boxes' ), 0 );\r\n-\t\t\u002F\u002F End\r\n-\r\n-\t\t\u002F\u002F Comment by tungnx\r\n-\t\t\u002F\u002F add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );\r\n-\t\t\u002F\u002F add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );\r\n-\r\n-\t\t\u002F\u002F Comment by tungnx\r\n-\t\t\u002F\u002F add_action( 'admin_footer-post.php', array( $this, 'print_js_template' ) );\r\n-\t\t\u002F\u002F add_action( 'admin_footer-post-new.php', array( $this, 'print_js_template' ) );\r\n-\r\n-\t\t\u002F\u002F Comment by tungnx - not use\r\n-\t\t\u002F\u002F add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );\r\n-\t\tadd_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );\r\n-\r\n-\t\t\u002F\u002Fadd_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );\r\n-\t\tadd_action( 'admin_print_scripts', array( $this, 'remove_auto_save_script' ) );\r\n-\r\n-\t\t\u002F\u002F Remove wp-auth-check and heartbeat script on post type of LearnPress\r\n-\t\tadd_action(\r\n-\t\t\t'admin_enqueue_scripts',\r\n-\t\t\tfunction ( $page ) {\r\n-\t\t\t\tif ( $page !== 'post.php' && $page !== 'post-new.php' ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( get_post_type() !== $this->_post_type ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\twp_deregister_script( 'wp-auth-check' );\r\n-\t\t\t\twp_deregister_script( 'heartbeat' );\r\n-\t\t\t},\r\n-\t\t\t1\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * This function is invoked along with 'init' action to register\r\n-\t * new post type with WP.\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since modify 4.1.0\r\n-\t *\u002F\r\n-\tpublic function _do_register() {\r\n-\t\t$args = $this->args_register_post_type();\r\n-\r\n-\t\t\u002F*\r\n-\t\t * Todo: This is function old, still has on some addons, so need replace \"register\" function to args_register_post_type\r\n-\t\t * When replace all will delete this function - long ago will delete, for some user didn't updated new addon version fix\r\n-\t\t *\u002F\r\n-\t\tif ( method_exists( $this, 'register' ) ) {\r\n-\t\t\t$args = $this->register();\r\n-\t\t}\r\n-\r\n-\t\tif ( $args ) {\r\n-\t\t\tregister_post_type( $this->_post_type, $args );\r\n-\r\n-\t\t\t\u002F\u002F Todo: tungnx review this code.\r\n-\t\t\t\u002F\u002Fflush_rewrite_rules();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Args to register custom post type.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function args_register_post_type(): array {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check screen list post type\r\n-\t *\r\n-\t * @param WP_Screen|null $screen\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_class_name_handle_table( $screen ): bool {\r\n-\t\tif ( $screen instanceof WP_Screen\r\n-\t\t\t&& $screen->id === $this->_screen_list ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Declare class name of table\r\n-\t *\r\n-\t * @param $class_name\r\n-\t * @param $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function wp_list_table_class_name( $class_name, $args ) {\r\n-\t\treturn $class_name;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook save post of WP\r\n-\t *\r\n-\t * In child-class use function save()\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param WP_Post|null|mixed $post\r\n-\t * @param bool $is_update\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since modify 4.0.9\r\n-\t * @version 4.0.3\r\n-\t *\u002F\r\n-\tfinal public function _do_save_post( int $post_id = 0, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\u002F\u002F Maybe remove\r\n-\t\t$this->maybe_remove_assigned( $post );\r\n-\r\n-\t\tif ( ! $this->check_post( $post_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->save( $post_id, $post );\r\n-\t\t$this->save_post( $post_id, $post, $is_update );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Function for child class handle when post has just saved\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @docs Class post type extend need override this function if want to handle when save\r\n-\t *\u002F\r\n-\tpublic function save( int $post_id, WP_Post $post ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Function for child class handle when post has just saved\r\n-\t * This function provides the argument `$update` to determine whether a post is updated or new.\r\n-\t * Replace for function save only has two args\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param WP_Post|null $post\r\n-\t * @param bool $is_update\r\n-\t *\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Callback hook 'wp_after_insert_post'\r\n-\t *\r\n-\t * @param $post_id\r\n-\t * @param $post\r\n-\t * @param $update\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tfinal public function wp_after_insert_post( $post_id, $post, $update ) {\r\n-\t\tif ( ! $this->check_post( $post_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->after_insert_post( $post_id, $post, $update );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Function for child class handle when post has just saved\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param WP_Post|null $post\r\n-\t * @param bool $update\r\n-\t *\u002F\r\n-\tpublic function after_insert_post( int $post_id, ?WP_Post $post = null, bool $update = false ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook before delete post\r\n-\t * Only on receiver 1 param $post_id, can't get param $post - don't know why\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param WP_Post|null $post\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since modify 4.0.9\r\n-\t *\u002F\r\n-\tfinal public function _before_delete_post( int $post_id, ?WP_Post $post = null ) {\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Todo: check is pages of LP\r\n-\t\t\tif ( 'page' === get_post_type( $post_id ) ) {\r\n-\t\t\t\t\u002F\u002F Clear cache LP settings\r\n-\t\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\r\n-\t\t\t\t$lp_settings_cache->clean_lp_settings();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->check_post( $post_id ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->before_delete( $post_id );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Function for child class handle before post deleted\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @since modify 4.0.9\r\n-\t *\u002F\r\n-\tpublic function before_delete( int $post_id ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook deleted post\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\u002F\r\n-\tfinal public function _deleted_post( int $post_id ) {\r\n-\t\t$this->deleted_post( $post_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Function for child class handle when post has just deleted\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @docs Class post type extend need override this function if want to handle when post deleted\r\n-\t *\u002F\r\n-\tpublic function deleted_post( int $post_id ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\tprotected $course_of_item_trashed = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Hook before delete post\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tfinal public function _before_trash_post( int $post_id ) {\r\n-\t\tif ( ! $this->check_post( $post_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->before_trash_post( $post_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Before trash post\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @return void\r\n-\t * @author tungnx\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function before_trash_post( int $post_id ) {\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Case move item's course to trash\r\n-\t\t\t$course_item_types = CourseModel::item_types_support();\r\n-\t\t\tif ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set course id of item when item assign on course is trashed\r\n-\t\t\t$course_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post_id );\r\n-\t\t\tif ( $course_of_item ) {\r\n-\t\t\t\t$this->course_of_item_trashed = $course_of_item;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook Trashed post\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @return void\r\n-\t * @author tungnx\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tfinal public function _trashed_post( int $post_id ) {\r\n-\t\tif ( ! $this->check_post( $post_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->trashed_post( $post_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Method handle Trashed post\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function trashed_post( int $post_id ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t\t\u002F\u002F Check is item type of course\r\n-\t\t$course_item_types = learn_press_get_course_item_types();\r\n-\t\tif ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->course_of_item_trashed ) {\r\n-\t\t\t\u002F\u002F Save course when item assign on course is trashed\r\n-\t\t\t$course_id = $this->course_of_item_trashed;\r\n-\t\t\tLP_Course_Post_Type::instance()->save_post( $course_id, null, true );\r\n-\t\t\t$this->course_of_item_trashed = 0;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function column_instructor( $post_id = 0 ) {\r\n-\t\t$post    = get_post( $post_id );\r\n-\t\t$user_id = $post->post_author;\r\n-\r\n-\t\t$user = UserModel::find( $user_id, true );\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'post_type' => $post->post_type,\r\n-\t\t\t'author'    => $user_id,\r\n-\t\t);\r\n-\r\n-\t\t$author_link  = esc_url_raw( add_query_arg( $args, 'edit.php' ) );\r\n-\t\t$userTemplate = new UserTemplate();\r\n-\t\techo sprintf(\r\n-\t\t\t'\u003Cspan class=\"post-author\">%s\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fspan>',\r\n-\t\t\t$userTemplate->html_avatar(\r\n-\t\t\t\t$user,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'width'  => 32,\r\n-\t\t\t\t\t'height' => 32,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t$author_link,\r\n-\t\t\tget_the_author()\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get column author\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.9.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function column_author( $post ) {\r\n-\t\tif ( ! $post instanceof WP_Post ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user_id   = $post->post_author;\r\n-\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'post_type' => $post->post_type,\r\n-\t\t\t'author'    => $user_id,\r\n-\t\t);\r\n-\r\n-\t\t$author_link  = esc_url_raw( add_query_arg( $args, 'edit.php' ) );\r\n-\t\t$userTemplate = new UserTemplate();\r\n-\t\techo sprintf(\r\n-\t\t\t'\u003Cspan class=\"post-author\">%s\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fspan>',\r\n-\t\t\t$userTemplate->html_avatar(\r\n-\t\t\t\t$userModel,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'width'  => 32,\r\n-\t\t\t\t\t'height' => 32,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t$author_link,\r\n-\t\t\t$userModel->get_display_name()\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_post_type() {\r\n-\t\t$post_type = get_post_type();\r\n-\t\tif ( ! $post_type ) {\r\n-\t\t\t$post_type = LP_Request::get_string( 'post_type' );\r\n-\t\t}\r\n-\r\n-\t\treturn $post_type;\r\n-\t}\r\n-\r\n-\tpublic function admin_footer_scripts() {\r\n-\r\n-\t\tglobal $pagenow;\r\n-\r\n-\t\tif ( $this->get_post_type() !== $this->_post_type ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user->is_admin() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Comment by tungnx - not use on here, wrote on js\r\n-\t\t\u002F*\r\n-\t\tif ( $pagenow === 'edit.php' ) {\r\n-\t\t\t$option = sprintf( '\u003Coption value=\"\">%s\u003C\u002Foption>', __( 'Search by user', 'learnpress' ) );\r\n-\t\t\t$user   = get_user_by( 'id', LP_Request::get_int( 'author' ) );\r\n-\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\t$option = sprintf( '\u003Coption value=\"%d\" selected=\"selected\">%s\u003C\u002Foption>', $user->ID, $user->user_login );\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F Todo: write this code on file js\r\n-\t\tif ( $pagenow === 'post.php' ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cscript>\r\n-\t\t\t\tjQuery(function ($) {\r\n-\t\t\t\t\tvar isAssigned = '\u003C?php echo esc_js( $this->is_assigned() ); ?>',\r\n-\t\t\t\t\t\t$postStatus = $('#post_status'),\r\n-\t\t\t\t\t\t$message = $('\u003Cp class=\"learn-press-notice-assigned-item\">\u003C\u002Fp>').html(isAssigned),\r\n-\t\t\t\t\t\tcurrentStatus = $postStatus.val();\r\n-\r\n-\t\t\t\t\t(currentStatus === 'publish') && isAssigned && $postStatus.on('change', function () {\r\n-\t\t\t\t\t\tif (this.value !== 'publish') {\r\n-\t\t\t\t\t\t\t$message.insertBefore($('#post-status-select'));\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$message.remove();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t});\r\n-\r\n-\t\t\t\t})\r\n-\t\t\t\u003C\u002Fscript>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function is_assigned() {\r\n-\t\tglobal $wpdb;\r\n-\t\t$post_type = $this->get_post_type();\r\n-\t\tif ( learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-                SELECT s.section_course_id\r\n-                FROM {$wpdb->learnpress_section_items} si\r\n-                INNER JOIN {$wpdb->learnpress_sections} s ON s.section_id = si.section_id\r\n-                INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\r\n-                WHERE p.ID = %d\r\n-\t        \",\r\n-\t\t\t\tget_the_ID()\r\n-\t\t\t);\r\n-\r\n-\t\t\t$course_id = $wpdb->get_var( $query );\r\n-\t\t\tif ( $course_id ) {\r\n-\t\t\t\treturn __( 'This item has already been assigned to the course. It will be removed from the course if it is not published.', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t} elseif ( LP_QUESTION_CPT === $post_type ) {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t        SELECT p.ID\r\n-                FROM {$wpdb->posts} p\r\n-                INNER JOIN {$wpdb->learnpress_quiz_questions} qq ON p.ID = qq.quiz_id\r\n-                WHERE qq.question_id = %d\r\n-\t\t    \",\r\n-\t\t\t\tget_the_ID()\r\n-\t\t\t);\r\n-\r\n-\t\t\t$quiz_id = $wpdb->get_var( $query );\r\n-\t\t\tif ( $quiz_id ) {\r\n-\t\t\t\treturn __( 'This question has already been assigned to the quiz. It will be removed from the quiz if it is not published.', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\tpublic function remove_auto_save_script() {\r\n-\t\tglobal $post;\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->check_post( $post->ID ) ) {\r\n-\t\t\twp_dequeue_script( 'autosave' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Maybe remove assigned item\r\n-\t *\r\n-\t * @param WP_Post $post\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @todo Review and move to place correct\r\n-\t *\u002F\r\n-\tpublic function maybe_remove_assigned( $post = null ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$post_type   = $post->post_type;\r\n-\t\t$post_status = $post->post_status;\r\n-\r\n-\t\t\u002F\u002F If we are updating question\r\n-\t\tif ( LP_QUESTION_CPT === $post_type ) {\r\n-\r\n-\t\t\t\u002F\u002F If question is not published then delete it from quizzes\r\n-\t\t\tif ( $post_status !== 'publish' ) {\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    DELETE FROM {$wpdb->learnpress_quiz_questions}\r\n-                    WHERE question_id = %d\r\n-                \t\",\r\n-\t\t\t\t\t$post->ID\r\n-\t\t\t\t);\r\n-\t\t\t\t$wpdb->query( $query );\r\n-\t\t\t}\r\n-\t\t} elseif ( learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\r\n-\t\t\t\u002F\u002F If item is not published then delete it from courses\r\n-\t\t\tif ( $post_status !== 'publish' ) {\r\n-\t\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    DELETE FROM {$wpdb->learnpress_section_items}\r\n-                    WHERE item_id = %d\r\n-                \t\",\r\n-\t\t\t\t\t$post->ID\r\n-\t\t\t\t);\r\n-\t\t\t\t$wpdb->query( $query );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated v4.2.9.4\r\n-\t *\u002F\r\n-\tprotected function _get_quizzes_by_question( $question_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\r\n-\t\treturn [];\r\n-\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t        SELECT quiz_id\r\n-            FROM {$wpdb->learnpress_quiz_questions}\r\n-            WHERE question_id = %d\r\n-\t    \",\r\n-\t\t\t$question_id\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated v4.2.9.4\r\n-\t *\u002F\r\n-\tprotected function _get_courses_by_item( $item_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\r\n-\t\treturn [];\r\n-\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t        SELECT section_course_id\r\n-            FROM {$wpdb->learnpress_sections} s\r\n-            INNER JOIN {$wpdb->learnpress_section_items} si ON s.section_id = si.section_id\r\n-            WHERE si.item_id = %d\r\n-\t    \",\r\n-\t\t\t$item_id\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Ouput meta boxes.\r\n-\t *\r\n-\t * @param WP_Post $post\r\n-\t * @param mixed $box\r\n-\t *\u002F\r\n-\tpublic function _do_output_meta_box( $post, $box ) {\r\n-\t\t$callback = $this->_meta_boxes[ $box['id'] ][2];\r\n-\t\tif ( is_array( $callback ) ) {\r\n-\t\t\tif ( $callback[0] instanceof LP_Abstract_Post_Type ) {\r\n-\t\t\t\tif ( $callback[1] != __FUNCTION__ ) {\r\n-\t\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( is_callable( array( $this, $callback ) ) ) {\r\n-\t\t\t\tcall_user_func_array( array( $this, $callback ), array( $post, $box ) );\r\n-\t\t\t} else {\r\n-\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @reason not use\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tprivate function _is_archive() {\r\n-\t\tglobal $pagenow, $post_type;\r\n-\t\tif ( ! is_admin() || ( $pagenow != 'edit.php' ) || ( $this->_post_type != LP_Request::get_string( 'post_type' ) ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}*\u002F\r\n-\r\n-\tprotected function _flush_cache() {\r\n-\t\t\u002F\u002F LP_Hard_Cache::flush();\r\n-\t\t\u002F\u002F wp_cache_flush();\r\n-\t}\r\n-\r\n-\tpublic function _posts_fields( $fields ) {\r\n-\t\tif ( ! $this->_check_post() ) {\r\n-\t\t\treturn $fields;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->posts_fields( $fields );\r\n-\t}\r\n-\r\n-\tpublic function _posts_join_paged( $join ) {\r\n-\t\tif ( ! $this->_check_post() ) {\r\n-\t\t\treturn $join;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->posts_join_paged( $join );\r\n-\t}\r\n-\r\n-\tpublic function posts_join_paged( $join ) {\r\n-\t\treturn $join;\r\n-\t}\r\n-\r\n-\tfinal public function _posts_where_paged( $where ) {\r\n-\t\tif ( ! $this->_check_post() ) {\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->posts_where_paged( $where );\r\n-\t}\r\n-\r\n-\tpublic function posts_where_paged( $where ) {\r\n-\t\treturn $where;\r\n-\t}\r\n-\r\n-\tpublic function _posts_orderby( $orderby ) {\r\n-\t\tif ( ! $this->_check_post() ) {\r\n-\t\t\treturn $orderby;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->posts_orderby( $orderby );\r\n-\t}\r\n-\r\n-\tpublic function posts_orderby( $orderby ) {\r\n-\t\treturn $orderby;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check post valid\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function _check_post(): bool {\r\n-\t\tglobal $pagenow, $post_type;\r\n-\r\n-\t\tif ( ! is_admin() || ( ! in_array(\r\n-\t\t\t$pagenow,\r\n-\t\t\tarray(\r\n-\t\t\t\t'edit.php',\r\n-\t\t\t\t'post.php',\r\n-\t\t\t)\r\n-\t\t) ) || ( $this->_post_type != $post_type ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check post is valid to handle\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function check_post( int $post_id = 0 ): bool {\r\n-\t\t$can_save = true;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$post = get_post( $post_id );\r\n-\t\t\tif ( ! $post ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->_post_type !== $post->post_type ) {\r\n-\t\t\t\t\u002F\u002Fthrow new Exception( 'Post type is invalid' );\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) &&\r\n-\t\t\t\tget_current_user_id() !== (int) $post->post_author ) {\r\n-\t\t\t\t$can_save = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_save = apply_filters( 'lp\u002Fcustom-post-type\u002Fcan-save', $can_save, $post );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$can_save = false;\r\n-\t\t}\r\n-\r\n-\t\treturn $can_save;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is page list posts valid\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_page_list_posts_on_backend(): bool {\r\n-\t\tglobal $pagenow, $post_type;\r\n-\r\n-\t\tif ( ! is_admin() || $pagenow != 'edit.php' || ( $this->_post_type != $post_type ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * New Metabox instance\r\n-\t *\r\n-\t * @return array\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tpublic function meta_boxes() {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render Metabox.\r\n-\t *\r\n-\t * @return void\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tpublic function render_meta_box() {\r\n-\t\t$add_meta_box = $this->meta_boxes();\r\n-\t\t$metaboxes    = ! empty( $add_meta_box ) && is_array( $add_meta_box ) ? $add_meta_box : array();\r\n-\r\n-\t\t$metaboxes = apply_filters( 'learnpress\u002Fcustom-post-type\u002Fadd-meta-box', $metaboxes, $this->_post_type );\r\n-\r\n-\t\tif ( ! empty( $metaboxes ) ) {\r\n-\t\t\tforeach ( $metaboxes as $metabox_id => $metabox ) {\r\n-\t\t\t\tif ( isset( $metabox['callback'] ) ) {\r\n-\t\t\t\t\tadd_meta_box( $metabox_id, $metabox['title'] ?? esc_html__( 'Unknown', 'learnpress' ), $metabox['callback'], $metabox['post_type'] ?? $this->_post_type, $metabox['context'] ?? 'normal', $metabox['priority'] ?? 'high' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Todo: after update metabox in h5p and withdraw will remove this function\r\n-\tpublic function add_meta_box( $id, $title, $callback = null, $context = 'advanced', $priority = 'default', $callback_args = null ) {\r\n-\t\t$this->_meta_boxes[ $id ] = func_get_args();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Todo: after update metabox in h5p and withdraw will remove this function\r\n-\tpublic function add_meta_boxes() {\r\n-\t\tif ( $this->_post_type != learn_press_get_requested_post_type() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn_press_add_meta_boxes', $this->_post_type, $this );\r\n-\t\tdo_action( \"learn_press_{$this->_post_type}_add_meta_boxes\", $this );\r\n-\r\n-\t\tif ( ! $this->_meta_boxes ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $this->_meta_boxes as $k => $meta_box ) {\r\n-\t\t\t$size = sizeof( $meta_box );\r\n-\r\n-\t\t\tif ( ( $size == 2 ) || ( $size == 3 && ! $meta_box[2] ) ) {\r\n-\t\t\t\t$func        = 'output_' . preg_replace( '\u002F[-]+\u002F', '_', $meta_box[0] );\r\n-\t\t\t\t$meta_box[2] = array( $this, $func );\r\n-\t\t\t}\r\n-\t\t\tarray_splice( $meta_box, 3, 0, array( $this->_post_type ) );\r\n-\t\t\t$this->_meta_boxes[ $k ] = $meta_box;\r\n-\r\n-\t\t\t$meta_box[2] = array( $this, '_do_output_meta_box' );\r\n-\t\t\tcall_user_func_array( 'add_meta_box', $meta_box );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Filter item by the course selected.\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @Todo move to course LP_Course_Post_Type\r\n-\t * @since 3.0.7\r\n-\t *\u002F\r\n-\tprotected function _filter_items_by_course() {\r\n-\t\t$course_id = ! empty( $_REQUEST['course'] ) ? absint( $_REQUEST['course'] ) : false;\r\n-\r\n-\t\tif ( ! $course_id ) {\r\n-\t\t\tglobal $post_type;\r\n-\t\t\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\t\t\t\t$course_id = false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t * @Todo move to course LP_Course_Post_Type\r\n-\t *\u002F\r\n-\tprotected function _get_course_column_title() {\r\n-\t\tglobal $post_type;\r\n-\r\n-\t\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$title     = esc_html__( 'Course', 'learnpress' );\r\n-\t\t$course_id = $this->_filter_items_by_course();\r\n-\r\n-\t\tif ( $course_id ) {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( $course ) {\r\n-\t\t\t\t$count       = $course->count_items( $this->_post_type );\r\n-\t\t\t\t$post_object = get_post_type_object( $post_type );\r\n-\t\t\t\t$title       = sprintf( _n( 'Course (%1$d %2$s)', 'Course (%1$d %2$s)', $count, 'learnpress' ), $count, $count > 1 ? $post_object->label : $post_object->labels->singular_name );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course that the items is contained.\r\n-\t *\r\n-\t * @param $post_id\r\n-\t *\u002F\r\n-\tprotected function _get_item_course( $post_id ) {\r\n-\t\t$courses = learn_press_get_item_courses( $post_id );\r\n-\t\tif ( $courses ) {\r\n-\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\techo '\u003Cdiv>\u003Ca href=\"' . esc_url_raw( remove_query_arg( 'orderby', add_query_arg( array( 'course' => $course->ID ) ) ) ) . '\">' . get_the_title( $course->ID ) . '\u003C\u002Fa>';\r\n-\t\t\t\techo '\u003Cdiv class=\"row-actions\">';\r\n-\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( sprintf( 'post.php?post=%d&action=edit', $course->ID ) ), __( 'Edit', 'learnpress' ) );\r\n-\t\t\t\techo '&nbsp;|&nbsp;';\r\n-\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_the_permalink( $course->ID ), __( 'View', 'learnpress' ) );\r\n-\r\n-\t\t\t\tif ( $this->_filter_items_by_course() ) {\r\n-\t\t\t\t\techo '&nbsp;|&nbsp;';\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tesc_url_raw( remove_query_arg( array( 'course', 'orderby' ) ) ),\r\n-\t\t\t\t\t\t__( 'Remove Filter', 'learnpress' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t\techo '\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t_e( 'Not assigned yet', 'learnpress' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $fields\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function posts_fields( $fields ) {\r\n-\t\treturn $fields;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sortable columns for list table\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function sortable_columns( $columns ) {\r\n-\t\treturn $columns;\r\n-\t}\r\n-\r\n-\tpublic function columns_head( $columns ) {\r\n-\t\treturn $columns;\r\n-\t}\r\n-\r\n-\tpublic function columns_content( $column, $post_id = 0 ) {\r\n-\t\t\u002F\u002F Implement from child\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get string for searching\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_search(): string {\r\n-\t\treturn LP_Request::get( 's' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_order_sort(): string {\r\n-\t\treturn strtolower( LP_Request::get_param( 'order' ) ) === 'desc' ? 'DESC' : 'ASC';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected function get_order_by(): string {\r\n-\t\treturn LP_Request::get_param( 'orderby' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show actions on list post\r\n-\t *\r\n-\t * @param string[] $actions\r\n-\t * @param WP_Post $post\r\n-\t *\r\n-\t * @return array|false|mixed\r\n-\t *\u002F\r\n-\tpublic function _post_row_actions( $actions, $post ) {\r\n-\t\tif ( ! $this->_check_post() ) {\r\n-\t\t\treturn $actions;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->row_actions( $actions, $post );\r\n-\t}\r\n-\r\n-\tpublic function row_actions( $actions, $post ) {\r\n-\t\treturn $actions;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.1.6.9\r\n-\t *\u002F\r\n-\tpublic function updated_messages( $messages ) {\r\n-\t\t$post             = get_post();\r\n-\t\t$post_type        = get_post_type( $post );\r\n-\t\t$post_type_object = get_post_type_object( $this->_post_type );\r\n-\t\tif ( $this->_post_type !== $post_type ) {\r\n-\t\t\treturn $messages;\r\n-\t\t}\r\n-\t\t$messages[ $this->_post_type ] = array(\r\n-\t\t\t0  => '', \u002F\u002F Unused. Messages start at index 1.\r\n-\t\t\t1  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'updated.', 'learnpress' ) ),\r\n-\t\t\t2  => __( 'Custom field updated.', 'learnpress' ),\r\n-\t\t\t3  => __( 'Custom field deleted.', 'learnpress' ),\r\n-\t\t\t4  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'updated.', 'learnpress' ) ),\r\n-\t\t\t\u002F* translators: %s: date and time of the revision *\u002F\r\n-\t\t\t5  => isset( $_GET['revision'] ) ? sprintf( __( 'The lesson has been restored to revision from %s', 'learnpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,\r\n-\t\t\t6  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'published.', 'learnpress' ) ),\r\n-\t\t\t7  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'saved.', 'learnpress' ) ),\r\n-\t\t\t8  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'submitted.', 'learnpress' ) ),\r\n-\t\t\t9  => sprintf(\r\n-\t\t\t\tsprintf( '%s %s', $post_type_object->labels->singular_name, __( 'scheduled for: \u003Cstrong>%1$s\u003C\u002Fstrong>.', 'learnpress' ) ),\r\n-\t\t\t\t\u002F\u002F translators: Publish box date format, see http:\u002F\u002Fphp.net\u002Fdate\r\n-\t\t\t\tdate_i18n( __( 'M j, Y @ G:i', 'learnpress' ), strtotime( $post->post_date ) )\r\n-\t\t\t),\r\n-\t\t\t10 => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'draft updated.', 'learnpress' ) ),\r\n-\t\t);\r\n-\r\n-\t\tif ( $post_type_object->publicly_queryable ) {\r\n-\t\t\t$permalink = get_permalink( $post->ID );\r\n-\r\n-\t\t\t$view_link = sprintf( ' \u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $permalink ), sprintf( '%s %s', __( 'View', 'learnpress' ), $post_type_object->labels->singular_name ) );\r\n-\t\t\tswitch ( $this->_post_type ) {\r\n-\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t\u002F\u002F$view_link = learn_press_get_item_course_id( $post->ID, $post->post_type ) ? $view_link : '';\r\n-\t\t\t\t\t$view_link = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID ) ? $view_link : '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_CPT:\r\n-\t\t\t\t\t$order     = learn_press_get_order( $post->ID );\r\n-\t\t\t\t\t$view_link = $order->get_view_order_url();\r\n-\t\t\t\t\t$view_link = sprintf( ' \u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $view_link ), sprintf( '%s %s', __( 'View', 'learnpress' ), $post_type_object->labels->singular_name ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t\t$view_link = '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t\t$messages[ $this->_post_type ][1] .= $view_link;\r\n-\t\t\t$messages[ $this->_post_type ][6] .= $view_link;\r\n-\t\t\t$messages[ $this->_post_type ][9] .= $view_link;\r\n-\r\n-\t\t\t$preview_permalink = learn_press_get_preview_url( $post->ID );\r\n-\r\n-\t\t\t$preview_link                       = sprintf( ' \u003Ca target=\"_blank\" href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $preview_permalink ), sprintf( '%s %s', __( 'Preview', 'learnpress' ), $post_type_object->labels->singular_name ) );\r\n-\t\t\t$messages[ $this->_post_type ][8]  .= $preview_link;\r\n-\t\t\t$messages[ $this->_post_type ][10] .= $preview_link;\r\n-\t\t}\r\n-\r\n-\t\treturn $messages;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Abstract_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\UserTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+abstract class LP_Abstract_Post_Type {\n+\t\u002F**\n+\t * Type of post\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $_post_type = '';\n+\n+\t\u002F**\n+\t * Screen list post type\n+\t * Ex: edit-{post_type}\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $_screen_list = '';\n+\n+\t\u002F**\n+\t * Metaboxes registered\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $_meta_boxes = array();\n+\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprotected $_current_meta_box = null;\n+\n+\t\u002F**\n+\t * Columns display on list table\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $_columns = array();\n+\n+\t\u002F**\n+\t * Sortable columns\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected $_sortable_columns = array();\n+\n+\t\u002F**\n+\t * Map default method to a new method\n+\t *\n+\t * @var array\n+\t *\u002F\n+\t\u002F\u002F protected $_map_methods = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_default_metas = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_remove_features = array();\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\n+\t * @param string\n+\t * @param mixed\n+\t *\u002F\n+\tpublic function __construct( $post_type = '', $args = '' ) {\n+\n+\t\tif ( ! empty( $post_type ) ) {\n+\t\t\t$this->_post_type = $post_type;\n+\t\t}\n+\n+\t\t$this->_do_register();\n+\n+\t\tadd_filter( 'wp_list_table_class_name', [ $this, 'wp_list_table_class_name' ], 10, 2 );\n+\t\tadd_action( 'save_post', array( $this, '_do_save_post' ), - 1, 3 );\n+\t\tadd_action( 'wp_after_insert_post', [ $this, 'wp_after_insert_post' ], - 1, 3 );\n+\t\tadd_action( 'before_delete_post', array( $this, '_before_delete_post' ) );\n+\t\tadd_action( 'deleted_post', array( $this, '_deleted_post' ) );\n+\t\tadd_action( 'wp_trash_post', array( $this, '_before_trash_post' ) );\n+\t\tadd_action( 'trashed_post', array( $this, '_trashed_post' ) );\n+\n+\t\t\u002F\u002Fadd_filter( 'manage_posts_columns', array( $this, '_manage_columns_head_title' ), 11, 2 );\n+\t\t\u002F\u002Fadd_action( 'manage_posts_custom_column', array( $this, '_manage_column_value' ), 11, 2 );\n+\t\tadd_filter( 'manage_edit-' . $this->_post_type . '_sortable_columns', array( $this, 'sortable_columns' ) );\n+\t\tadd_filter( 'manage_' . $this->_post_type . '_posts_columns', array( $this, 'columns_head' ) );\n+\t\tadd_filter( 'manage_' . $this->_post_type . '_posts_custom_column', array( $this, 'columns_content' ), 10, 2 );\n+\n+\t\tadd_filter( 'posts_fields', array( $this, '_posts_fields' ) );\n+\t\tadd_filter( 'posts_join_paged', array( $this, '_posts_join_paged' ) );\n+\t\tadd_filter( 'posts_where_paged', array( $this, '_posts_where_paged' ) );\n+\t\tadd_filter( 'posts_orderby', array( $this, '_posts_orderby' ) );\n+\n+\t\t\u002F\u002F Show actions link on list post admin.\n+\t\tadd_filter( 'post_row_actions', array( $this, '_post_row_actions' ), 10, 2 );\n+\n+\t\t\u002F\u002F New metabox: Nhamdv\n+\t\tadd_action( 'add_meta_boxes', array( $this, 'render_meta_box' ), 0 );\n+\n+\t\t\u002F\u002F After update h5p and withdraw will remove it.\n+\t\tadd_action( 'load-post.php', array( $this, 'add_meta_boxes' ), 0 );\n+\t\tadd_action( 'load-post-new.php', array( $this, 'add_meta_boxes' ), 0 );\n+\t\t\u002F\u002F End\n+\n+\t\t\u002F\u002F Comment by tungnx\n+\t\t\u002F\u002F add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );\n+\t\t\u002F\u002F add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );\n+\n+\t\t\u002F\u002F Comment by tungnx\n+\t\t\u002F\u002F add_action( 'admin_footer-post.php', array( $this, 'print_js_template' ) );\n+\t\t\u002F\u002F add_action( 'admin_footer-post-new.php', array( $this, 'print_js_template' ) );\n+\n+\t\t\u002F\u002F Comment by tungnx - not use\n+\t\t\u002F\u002F add_action( 'pre_get_posts', array( $this, 'update_default_meta' ) );\n+\t\tadd_action( 'admin_footer', array( $this, 'admin_footer_scripts' ) );\n+\n+\t\t\u002F\u002Fadd_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );\n+\t\tadd_action( 'admin_print_scripts', array( $this, 'remove_auto_save_script' ) );\n+\n+\t\t\u002F\u002F Remove wp-auth-check and heartbeat script on post type of LearnPress\n+\t\tadd_action(\n+\t\t\t'admin_enqueue_scripts',\n+\t\t\tfunction ( $page ) {\n+\t\t\t\tif ( $page !== 'post.php' && $page !== 'post-new.php' ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( get_post_type() !== $this->_post_type ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\twp_deregister_script( 'wp-auth-check' );\n+\t\t\t\twp_deregister_script( 'heartbeat' );\n+\t\t\t},\n+\t\t\t1\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * This function is invoked along with 'init' action to register\n+\t * new post type with WP.\n+\t *\n+\t * @editor tungnx\n+\t * @since modify 4.1.0\n+\t *\u002F\n+\tpublic function _do_register() {\n+\t\t$args = $this->args_register_post_type();\n+\n+\t\t\u002F*\n+\t\t * Todo: This is function old, still has on some addons, so need replace \"register\" function to args_register_post_type\n+\t\t * When replace all will delete this function - long ago will delete, for some user didn't updated new addon version fix\n+\t\t *\u002F\n+\t\tif ( method_exists( $this, 'register' ) ) {\n+\t\t\t$args = $this->register();\n+\t\t}\n+\n+\t\tif ( $args ) {\n+\t\t\tregister_post_type( $this->_post_type, $args );\n+\n+\t\t\t\u002F\u002F Todo: tungnx review this code.\n+\t\t\t\u002F\u002Fflush_rewrite_rules();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Args to register custom post type.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function args_register_post_type(): array {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Check screen list post type\n+\t *\n+\t * @param WP_Screen|null $screen\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_class_name_handle_table( $screen ): bool {\n+\t\tif ( $screen instanceof WP_Screen\n+\t\t\t&& $screen->id === $this->_screen_list ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Declare class name of table\n+\t *\n+\t * @param $class_name\n+\t * @param $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function wp_list_table_class_name( $class_name, $args ) {\n+\t\treturn $class_name;\n+\t}\n+\n+\t\u002F**\n+\t * Hook save post of WP\n+\t *\n+\t * In child-class use function save()\n+\t *\n+\t * @param int $post_id\n+\t * @param WP_Post|null|mixed $post\n+\t * @param bool $is_update\n+\t *\n+\t * @editor tungnx\n+\t * @since modify 4.0.9\n+\t * @version 4.0.3\n+\t *\u002F\n+\tfinal public function _do_save_post( int $post_id = 0, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\u002F\u002F Maybe remove\n+\t\t$this->maybe_remove_assigned( $post );\n+\n+\t\tif ( ! $this->check_post( $post_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->save( $post_id, $post );\n+\t\t$this->save_post( $post_id, $post, $is_update );\n+\t}\n+\n+\t\u002F**\n+\t * Function for child class handle when post has just saved\n+\t *\n+\t * @editor tungnx\n+\t * @docs Class post type extend need override this function if want to handle when save\n+\t *\u002F\n+\tpublic function save( int $post_id, WP_Post $post ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Function for child class handle when post has just saved\n+\t * This function provides the argument `$update` to determine whether a post is updated or new.\n+\t * Replace for function save only has two args\n+\t *\n+\t * @param int $post_id\n+\t * @param WP_Post|null $post\n+\t * @param bool $is_update\n+\t *\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Callback hook 'wp_after_insert_post'\n+\t *\n+\t * @param $post_id\n+\t * @param $post\n+\t * @param $update\n+\t *\n+\t * @return void\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tfinal public function wp_after_insert_post( $post_id, $post, $update ) {\n+\t\tif ( ! $this->check_post( $post_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->after_insert_post( $post_id, $post, $update );\n+\t}\n+\n+\t\u002F**\n+\t * Function for child class handle when post has just saved\n+\t *\n+\t * @param int $post_id\n+\t * @param WP_Post|null $post\n+\t * @param bool $update\n+\t *\u002F\n+\tpublic function after_insert_post( int $post_id, ?WP_Post $post = null, bool $update = false ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Hook before delete post\n+\t * Only on receiver 1 param $post_id, can't get param $post - don't know why\n+\t *\n+\t * @param int $post_id\n+\t * @param WP_Post|null $post\n+\t *\n+\t * @editor tungnx\n+\t * @since modify 4.0.9\n+\t *\u002F\n+\tfinal public function _before_delete_post( int $post_id, ?WP_Post $post = null ) {\n+\t\ttry {\n+\t\t\t\u002F\u002F Todo: check is pages of LP\n+\t\t\tif ( 'page' === get_post_type( $post_id ) ) {\n+\t\t\t\t\u002F\u002F Clear cache LP settings\n+\t\t\t\t$lp_settings_cache = new LP_Settings_Cache( true );\n+\t\t\t\t$lp_settings_cache->clean_lp_settings();\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->check_post( $post_id ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->before_delete( $post_id );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Function for child class handle before post deleted\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @editor tungnx\n+\t * @since modify 4.0.9\n+\t *\u002F\n+\tpublic function before_delete( int $post_id ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Hook deleted post\n+\t *\n+\t * @param int $post_id\n+\t *\u002F\n+\tfinal public function _deleted_post( int $post_id ) {\n+\t\t$this->deleted_post( $post_id );\n+\t}\n+\n+\t\u002F**\n+\t * Function for child class handle when post has just deleted\n+\t *\n+\t * @editor tungnx\n+\t * @docs Class post type extend need override this function if want to handle when post deleted\n+\t *\u002F\n+\tpublic function deleted_post( int $post_id ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\tprotected $course_of_item_trashed = 0;\n+\n+\t\u002F**\n+\t * Hook before delete post\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tfinal public function _before_trash_post( int $post_id ) {\n+\t\tif ( ! $this->check_post( $post_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->before_trash_post( $post_id );\n+\t}\n+\n+\t\u002F**\n+\t * Before trash post\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @return void\n+\t * @author tungnx\n+\t * @since 4.1.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function before_trash_post( int $post_id ) {\n+\t\ttry {\n+\t\t\t\u002F\u002F Case move item's course to trash\n+\t\t\t$course_item_types = CourseModel::item_types_support();\n+\t\t\tif ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set course id of item when item assign on course is trashed\n+\t\t\t$course_of_item = LP_Course_DB::getInstance()->get_course_by_item_id( $post_id );\n+\t\t\tif ( $course_of_item ) {\n+\t\t\t\t$this->course_of_item_trashed = $course_of_item;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Hook Trashed post\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @return void\n+\t * @author tungnx\n+\t * @since 4.1.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tfinal public function _trashed_post( int $post_id ) {\n+\t\tif ( ! $this->check_post( $post_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->trashed_post( $post_id );\n+\t}\n+\n+\t\u002F**\n+\t * Method handle Trashed post\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @return void\n+\t * @since 4.1.6.9\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function trashed_post( int $post_id ) {\n+\t\t\u002F\u002F Implement from child\n+\t\t\u002F\u002F Check is item type of course\n+\t\t$course_item_types = learn_press_get_course_item_types();\n+\t\tif ( ! in_array( get_post_type( $post_id ), $course_item_types ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $this->course_of_item_trashed ) {\n+\t\t\t\u002F\u002F Save course when item assign on course is trashed\n+\t\t\t$course_id = $this->course_of_item_trashed;\n+\t\t\tLP_Course_Post_Type::instance()->save_post( $course_id, null, true );\n+\t\t\t$this->course_of_item_trashed = 0;\n+\t\t}\n+\t}\n+\n+\tpublic function column_instructor( $post_id = 0 ) {\n+\t\t$post    = get_post( $post_id );\n+\t\t$user_id = $post->post_author;\n+\n+\t\t$user = UserModel::find( $user_id, true );\n+\t\tif ( ! $user ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'post_type' => $post->post_type,\n+\t\t\t'author'    => $user_id,\n+\t\t);\n+\n+\t\t$author_link  = esc_url_raw( add_query_arg( $args, 'edit.php' ) );\n+\t\t$userTemplate = new UserTemplate();\n+\t\techo sprintf(\n+\t\t\t'\u003Cspan class=\"post-author\">%s\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fspan>',\n+\t\t\t$userTemplate->html_avatar(\n+\t\t\t\t$user,\n+\t\t\t\t[\n+\t\t\t\t\t'width'  => 32,\n+\t\t\t\t\t'height' => 32,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t$author_link,\n+\t\t\tget_the_author()\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get column author\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t * @since 4.2.9.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function column_author( $post ) {\n+\t\tif ( ! $post instanceof WP_Post ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user_id   = $post->post_author;\n+\t\t$userModel = UserModel::find( $user_id, true );\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'post_type' => $post->post_type,\n+\t\t\t'author'    => $user_id,\n+\t\t);\n+\n+\t\t$author_link  = esc_url_raw( add_query_arg( $args, 'edit.php' ) );\n+\t\t$userTemplate = new UserTemplate();\n+\t\techo sprintf(\n+\t\t\t'\u003Cspan class=\"post-author\">%s\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fspan>',\n+\t\t\t$userTemplate->html_avatar(\n+\t\t\t\t$userModel,\n+\t\t\t\t[\n+\t\t\t\t\t'width'  => 32,\n+\t\t\t\t\t'height' => 32,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t$author_link,\n+\t\t\t$userModel->get_display_name()\n+\t\t);\n+\t}\n+\n+\tpublic function get_post_type() {\n+\t\t$post_type = get_post_type();\n+\t\tif ( ! $post_type ) {\n+\t\t\t$post_type = LP_Request::get_string( 'post_type' );\n+\t\t}\n+\n+\t\treturn $post_type;\n+\t}\n+\n+\tpublic function admin_footer_scripts() {\n+\n+\t\tglobal $pagenow;\n+\n+\t\tif ( $this->get_post_type() !== $this->_post_type ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user->is_admin() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Comment by tungnx - not use on here, wrote on js\n+\t\t\u002F*\n+\t\tif ( $pagenow === 'edit.php' ) {\n+\t\t\t$option = sprintf( '\u003Coption value=\"\">%s\u003C\u002Foption>', __( 'Search by user', 'learnpress' ) );\n+\t\t\t$user   = get_user_by( 'id', LP_Request::get_int( 'author' ) );\n+\n+\t\t\tif ( $user ) {\n+\t\t\t\t$option = sprintf( '\u003Coption value=\"%d\" selected=\"selected\">%s\u003C\u002Foption>', $user->ID, $user->user_login );\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F Todo: write this code on file js\n+\t\tif ( $pagenow === 'post.php' ) {\n+\t\t\t?>\n+\t\t\t\u003Cscript>\n+\t\t\t\tjQuery(function ($) {\n+\t\t\t\t\tvar isAssigned = '\u003C?php echo esc_js( $this->is_assigned() ); ?>',\n+\t\t\t\t\t\t$postStatus = $('#post_status'),\n+\t\t\t\t\t\t$message = $('\u003Cp class=\"learn-press-notice-assigned-item\">\u003C\u002Fp>').html(isAssigned),\n+\t\t\t\t\t\tcurrentStatus = $postStatus.val();\n+\n+\t\t\t\t\t(currentStatus === 'publish') && isAssigned && $postStatus.on('change', function () {\n+\t\t\t\t\t\tif (this.value !== 'publish') {\n+\t\t\t\t\t\t\t$message.insertBefore($('#post-status-select'));\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$message.remove();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t});\n+\n+\t\t\t\t})\n+\t\t\t\u003C\u002Fscript>\n+\t\t\t\u003C?php\n+\t\t}\n+\t}\n+\n+\tpublic function is_assigned() {\n+\t\tglobal $wpdb;\n+\t\t$post_type = $this->get_post_type();\n+\t\tif ( learn_press_is_support_course_item_type( $post_type ) ) {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+                SELECT s.section_course_id\n+                FROM {$wpdb->learnpress_section_items} si\n+                INNER JOIN {$wpdb->learnpress_sections} s ON s.section_id = si.section_id\n+                INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\n+                WHERE p.ID = %d\n+\t        \",\n+\t\t\t\tget_the_ID()\n+\t\t\t);\n+\n+\t\t\t$course_id = $wpdb->get_var( $query );\n+\t\t\tif ( $course_id ) {\n+\t\t\t\treturn __( 'This item has already been assigned to the course. It will be removed from the course if it is not published.', 'learnpress' );\n+\t\t\t}\n+\t\t} elseif ( LP_QUESTION_CPT === $post_type ) {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t        SELECT p.ID\n+                FROM {$wpdb->posts} p\n+                INNER JOIN {$wpdb->learnpress_quiz_questions} qq ON p.ID = qq.quiz_id\n+                WHERE qq.question_id = %d\n+\t\t    \",\n+\t\t\t\tget_the_ID()\n+\t\t\t);\n+\n+\t\t\t$quiz_id = $wpdb->get_var( $query );\n+\t\t\tif ( $quiz_id ) {\n+\t\t\t\treturn __( 'This question has already been assigned to the quiz. It will be removed from the quiz if it is not published.', 'learnpress' );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\tpublic function remove_auto_save_script() {\n+\t\tglobal $post;\n+\t\tif ( ! $post ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $this->check_post( $post->ID ) ) {\n+\t\t\twp_dequeue_script( 'autosave' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Maybe remove assigned item\n+\t *\n+\t * @param WP_Post $post\n+\t *\n+\t * @editor tungnx\n+\t * @todo Review and move to place correct\n+\t *\u002F\n+\tpublic function maybe_remove_assigned( $post = null ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! $post ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$post_type   = $post->post_type;\n+\t\t$post_status = $post->post_status;\n+\n+\t\t\u002F\u002F If we are updating question\n+\t\tif ( LP_QUESTION_CPT === $post_type ) {\n+\n+\t\t\t\u002F\u002F If question is not published then delete it from quizzes\n+\t\t\tif ( $post_status !== 'publish' ) {\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    DELETE FROM {$wpdb->learnpress_quiz_questions}\n+                    WHERE question_id = %d\n+                \t\",\n+\t\t\t\t\t$post->ID\n+\t\t\t\t);\n+\t\t\t\t$wpdb->query( $query );\n+\t\t\t}\n+\t\t} elseif ( learn_press_is_support_course_item_type( $post_type ) ) {\n+\n+\t\t\t\u002F\u002F If item is not published then delete it from courses\n+\t\t\tif ( $post_status !== 'publish' ) {\n+\t\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    DELETE FROM {$wpdb->learnpress_section_items}\n+                    WHERE item_id = %d\n+                \t\",\n+\t\t\t\t\t$post->ID\n+\t\t\t\t);\n+\t\t\t\t$wpdb->query( $query );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated v4.2.9.4\n+\t *\u002F\n+\tprotected function _get_quizzes_by_question( $question_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\n+\t\treturn [];\n+\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t        SELECT quiz_id\n+            FROM {$wpdb->learnpress_quiz_questions}\n+            WHERE question_id = %d\n+\t    \",\n+\t\t\t$question_id\n+\t\t);\n+\n+\t\treturn $wpdb->get_col( $query );\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated v4.2.9.4\n+\t *\u002F\n+\tprotected function _get_courses_by_item( $item_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\n+\t\treturn [];\n+\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t        SELECT section_course_id\n+            FROM {$wpdb->learnpress_sections} s\n+            INNER JOIN {$wpdb->learnpress_section_items} si ON s.section_id = si.section_id\n+            WHERE si.item_id = %d\n+\t    \",\n+\t\t\t$item_id\n+\t\t);\n+\n+\t\treturn $wpdb->get_col( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Ouput meta boxes.\n+\t *\n+\t * @param WP_Post $post\n+\t * @param mixed $box\n+\t *\u002F\n+\tpublic function _do_output_meta_box( $post, $box ) {\n+\t\t$callback = $this->_meta_boxes[ $box['id'] ][2];\n+\t\tif ( is_array( $callback ) ) {\n+\t\t\tif ( $callback[0] instanceof LP_Abstract_Post_Type ) {\n+\t\t\t\tif ( $callback[1] != __FUNCTION__ ) {\n+\t\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( is_callable( array( $this, $callback ) ) ) {\n+\t\t\t\tcall_user_func_array( array( $this, $callback ), array( $post, $box ) );\n+\t\t\t} else {\n+\t\t\t\tcall_user_func_array( $callback, array( $post, $box ) );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @reason not use\n+\t *\u002F\n+\t\u002F*\n+\tprivate function _is_archive() {\n+\t\tglobal $pagenow, $post_type;\n+\t\tif ( ! is_admin() || ( $pagenow != 'edit.php' ) || ( $this->_post_type != LP_Request::get_string( 'post_type' ) ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}*\u002F\n+\n+\tprotected function _flush_cache() {\n+\t\t\u002F\u002F LP_Hard_Cache::flush();\n+\t\t\u002F\u002F wp_cache_flush();\n+\t}\n+\n+\tpublic function _posts_fields( $fields ) {\n+\t\tif ( ! $this->_check_post() ) {\n+\t\t\treturn $fields;\n+\t\t}\n+\n+\t\treturn $this->posts_fields( $fields );\n+\t}\n+\n+\tpublic function _posts_join_paged( $join ) {\n+\t\tif ( ! $this->_check_post() ) {\n+\t\t\treturn $join;\n+\t\t}\n+\n+\t\treturn $this->posts_join_paged( $join );\n+\t}\n+\n+\tpublic function posts_join_paged( $join ) {\n+\t\treturn $join;\n+\t}\n+\n+\tfinal public function _posts_where_paged( $where ) {\n+\t\tif ( ! $this->_check_post() ) {\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\treturn $this->posts_where_paged( $where );\n+\t}\n+\n+\tpublic function posts_where_paged( $where ) {\n+\t\treturn $where;\n+\t}\n+\n+\tpublic function _posts_orderby( $orderby ) {\n+\t\tif ( ! $this->_check_post() ) {\n+\t\t\treturn $orderby;\n+\t\t}\n+\n+\t\treturn $this->posts_orderby( $orderby );\n+\t}\n+\n+\tpublic function posts_orderby( $orderby ) {\n+\t\treturn $orderby;\n+\t}\n+\n+\t\u002F**\n+\t * Check post valid\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function _check_post(): bool {\n+\t\tglobal $pagenow, $post_type;\n+\n+\t\tif ( ! is_admin() || ( ! in_array(\n+\t\t\t$pagenow,\n+\t\t\tarray(\n+\t\t\t\t'edit.php',\n+\t\t\t\t'post.php',\n+\t\t\t)\n+\t\t) ) || ( $this->_post_type != $post_type ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check post is valid to handle\n+\t *\n+\t * @param int $post_id\n+\t *\n+\t * @return bool\n+\t * @since 4.1.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function check_post( int $post_id = 0 ): bool {\n+\t\t$can_save = true;\n+\n+\t\ttry {\n+\t\t\t$post = get_post( $post_id );\n+\t\t\tif ( ! $post ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( $this->_post_type !== $post->post_type ) {\n+\t\t\t\t\u002F\u002Fthrow new Exception( 'Post type is invalid' );\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) &&\n+\t\t\t\tget_current_user_id() !== (int) $post->post_author ) {\n+\t\t\t\t$can_save = false;\n+\t\t\t}\n+\n+\t\t\t$can_save = apply_filters( 'lp\u002Fcustom-post-type\u002Fcan-save', $can_save, $post );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$can_save = false;\n+\t\t}\n+\n+\t\treturn $can_save;\n+\t}\n+\n+\t\u002F**\n+\t * Check is page list posts valid\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_page_list_posts_on_backend(): bool {\n+\t\tglobal $pagenow, $post_type;\n+\n+\t\tif ( ! is_admin() || $pagenow != 'edit.php' || ( $this->_post_type != $post_type ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * New Metabox instance\n+\t *\n+\t * @return array\n+\t * @author Nhamdv\n+\t *\u002F\n+\tpublic function meta_boxes() {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Render Metabox.\n+\t *\n+\t * @return void\n+\t * @author Nhamdv\n+\t *\u002F\n+\tpublic function render_meta_box() {\n+\t\t$add_meta_box = $this->meta_boxes();\n+\t\t$metaboxes    = ! empty( $add_meta_box ) && is_array( $add_meta_box ) ? $add_meta_box : array();\n+\n+\t\t$metaboxes = apply_filters( 'learnpress\u002Fcustom-post-type\u002Fadd-meta-box', $metaboxes, $this->_post_type );\n+\n+\t\tif ( ! empty( $metaboxes ) ) {\n+\t\t\tforeach ( $metaboxes as $metabox_id => $metabox ) {\n+\t\t\t\tif ( isset( $metabox['callback'] ) ) {\n+\t\t\t\t\tadd_meta_box( $metabox_id, $metabox['title'] ?? esc_html__( 'Unknown', 'learnpress' ), $metabox['callback'], $metabox['post_type'] ?? $this->_post_type, $metabox['context'] ?? 'normal', $metabox['priority'] ?? 'high' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Todo: after update metabox in h5p and withdraw will remove this function\n+\tpublic function add_meta_box( $id, $title, $callback = null, $context = 'advanced', $priority = 'default', $callback_args = null ) {\n+\t\t$this->_meta_boxes[ $id ] = func_get_args();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F\u002F Todo: after update metabox in h5p and withdraw will remove this function\n+\tpublic function add_meta_boxes() {\n+\t\tif ( $this->_post_type != learn_press_get_requested_post_type() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tdo_action( 'learn_press_add_meta_boxes', $this->_post_type, $this );\n+\t\tdo_action( \"learn_press_{$this->_post_type}_add_meta_boxes\", $this );\n+\n+\t\tif ( ! $this->_meta_boxes ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $this->_meta_boxes as $k => $meta_box ) {\n+\t\t\t$size = sizeof( $meta_box );\n+\n+\t\t\tif ( ( $size == 2 ) || ( $size == 3 && ! $meta_box[2] ) ) {\n+\t\t\t\t$func        = 'output_' . preg_replace( '\u002F[-]+\u002F', '_', $meta_box[0] );\n+\t\t\t\t$meta_box[2] = array( $this, $func );\n+\t\t\t}\n+\t\t\tarray_splice( $meta_box, 3, 0, array( $this->_post_type ) );\n+\t\t\t$this->_meta_boxes[ $k ] = $meta_box;\n+\n+\t\t\t$meta_box[2] = array( $this, '_do_output_meta_box' );\n+\t\t\tcall_user_func_array( 'add_meta_box', $meta_box );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Filter item by the course selected.\n+\t *\n+\t * @return bool|int\n+\t * @Todo move to course LP_Course_Post_Type\n+\t * @since 3.0.7\n+\t *\u002F\n+\tprotected function _filter_items_by_course() {\n+\t\t$course_id = ! empty( $_REQUEST['course'] ) ? absint( $_REQUEST['course'] ) : false;\n+\n+\t\tif ( ! $course_id ) {\n+\t\t\tglobal $post_type;\n+\t\t\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\n+\t\t\t\t$course_id = false;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t * @Todo move to course LP_Course_Post_Type\n+\t *\u002F\n+\tprotected function _get_course_column_title() {\n+\t\tglobal $post_type;\n+\n+\t\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$title     = esc_html__( 'Course', 'learnpress' );\n+\t\t$course_id = $this->_filter_items_by_course();\n+\n+\t\tif ( $course_id ) {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( $course ) {\n+\t\t\t\t$count       = $course->count_items( $this->_post_type );\n+\t\t\t\t$post_object = get_post_type_object( $post_type );\n+\t\t\t\t$title       = sprintf( _n( 'Course (%1$d %2$s)', 'Course (%1$d %2$s)', $count, 'learnpress' ), $count, $count > 1 ? $post_object->label : $post_object->labels->singular_name );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $title;\n+\t}\n+\n+\t\u002F**\n+\t * Get course that the items is contained.\n+\t *\n+\t * @param $post_id\n+\t *\u002F\n+\tprotected function _get_item_course( $post_id ) {\n+\t\t$courses = learn_press_get_item_courses( $post_id );\n+\t\tif ( $courses ) {\n+\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\techo '\u003Cdiv>\u003Ca href=\"' . esc_url_raw( remove_query_arg( 'orderby', add_query_arg( array( 'course' => $course->ID ) ) ) ) . '\">' . get_the_title( $course->ID ) . '\u003C\u002Fa>';\n+\t\t\t\techo '\u003Cdiv class=\"row-actions\">';\n+\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( sprintf( 'post.php?post=%d&action=edit', $course->ID ) ), __( 'Edit', 'learnpress' ) );\n+\t\t\t\techo '&nbsp;|&nbsp;';\n+\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_the_permalink( $course->ID ), __( 'View', 'learnpress' ) );\n+\n+\t\t\t\tif ( $this->_filter_items_by_course() ) {\n+\t\t\t\t\techo '&nbsp;|&nbsp;';\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\tesc_url_raw( remove_query_arg( array( 'course', 'orderby' ) ) ),\n+\t\t\t\t\t\t__( 'Remove Filter', 'learnpress' )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t\techo '\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\t\t\t}\n+\t\t} else {\n+\t\t\t_e( 'Not assigned yet', 'learnpress' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param string $fields\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function posts_fields( $fields ) {\n+\t\treturn $fields;\n+\t}\n+\n+\t\u002F**\n+\t * Get sortable columns for list table\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function sortable_columns( $columns ) {\n+\t\treturn $columns;\n+\t}\n+\n+\tpublic function columns_head( $columns ) {\n+\t\treturn $columns;\n+\t}\n+\n+\tpublic function columns_content( $column, $post_id = 0 ) {\n+\t\t\u002F\u002F Implement from child\n+\t}\n+\n+\t\u002F**\n+\t * Get string for searching\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_search(): string {\n+\t\treturn LP_Request::get( 's' );\n+\t}\n+\n+\t\u002F**\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_order_sort(): string {\n+\t\treturn strtolower( LP_Request::get_param( 'order' ) ) === 'desc' ? 'DESC' : 'ASC';\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tprotected function get_order_by(): string {\n+\t\treturn LP_Request::get_param( 'orderby' );\n+\t}\n+\n+\t\u002F**\n+\t * Show actions on list post\n+\t *\n+\t * @param string[] $actions\n+\t * @param WP_Post $post\n+\t *\n+\t * @return array|false|mixed\n+\t *\u002F\n+\tpublic function _post_row_actions( $actions, $post ) {\n+\t\tif ( ! $this->_check_post() ) {\n+\t\t\treturn $actions;\n+\t\t}\n+\n+\t\treturn $this->row_actions( $actions, $post );\n+\t}\n+\n+\tpublic function row_actions( $actions, $post ) {\n+\t\treturn $actions;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.1.6.9\n+\t *\u002F\n+\tpublic function updated_messages( $messages ) {\n+\t\t$post             = get_post();\n+\t\t$post_type        = get_post_type( $post );\n+\t\t$post_type_object = get_post_type_object( $this->_post_type );\n+\t\tif ( $this->_post_type !== $post_type ) {\n+\t\t\treturn $messages;\n+\t\t}\n+\t\t$messages[ $this->_post_type ] = array(\n+\t\t\t0  => '', \u002F\u002F Unused. Messages start at index 1.\n+\t\t\t1  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'updated.', 'learnpress' ) ),\n+\t\t\t2  => __( 'Custom field updated.', 'learnpress' ),\n+\t\t\t3  => __( 'Custom field deleted.', 'learnpress' ),\n+\t\t\t4  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'updated.', 'learnpress' ) ),\n+\t\t\t\u002F* translators: %s: date and time of the revision *\u002F\n+\t\t\t5  => isset( $_GET['revision'] ) ? sprintf( __( 'The lesson has been restored to revision from %s', 'learnpress' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,\n+\t\t\t6  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'published.', 'learnpress' ) ),\n+\t\t\t7  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'saved.', 'learnpress' ) ),\n+\t\t\t8  => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'submitted.', 'learnpress' ) ),\n+\t\t\t9  => sprintf(\n+\t\t\t\tsprintf( '%s %s', $post_type_object->labels->singular_name, __( 'scheduled for: \u003Cstrong>%1$s\u003C\u002Fstrong>.', 'learnpress' ) ),\n+\t\t\t\t\u002F\u002F translators: Publish box date format, see http:\u002F\u002Fphp.net\u002Fdate\n+\t\t\t\tdate_i18n( __( 'M j, Y @ G:i', 'learnpress' ), strtotime( $post->post_date ) )\n+\t\t\t),\n+\t\t\t10 => sprintf( '%s %s', $post_type_object->labels->singular_name, __( 'draft updated.', 'learnpress' ) ),\n+\t\t);\n+\n+\t\tif ( $post_type_object->publicly_queryable ) {\n+\t\t\t$permalink = get_permalink( $post->ID );\n+\n+\t\t\t$view_link = sprintf( ' \u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $permalink ), sprintf( '%s %s', __( 'View', 'learnpress' ), $post_type_object->labels->singular_name ) );\n+\t\t\tswitch ( $this->_post_type ) {\n+\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t\u002F\u002F$view_link = learn_press_get_item_course_id( $post->ID, $post->post_type ) ? $view_link : '';\n+\t\t\t\t\t$view_link = LP_Course_DB::getInstance()->get_course_by_item_id( $post->ID ) ? $view_link : '';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_CPT:\n+\t\t\t\t\t$order     = learn_press_get_order( $post->ID );\n+\t\t\t\t\t$view_link = $order->get_view_order_url();\n+\t\t\t\t\t$view_link = sprintf( ' \u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $view_link ), sprintf( '%s %s', __( 'View', 'learnpress' ), $post_type_object->labels->singular_name ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t\t$view_link = '';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t$messages[ $this->_post_type ][1] .= $view_link;\n+\t\t\t$messages[ $this->_post_type ][6] .= $view_link;\n+\t\t\t$messages[ $this->_post_type ][9] .= $view_link;\n+\n+\t\t\t$preview_permalink = learn_press_get_preview_url( $post->ID );\n+\n+\t\t\t$preview_link                       = sprintf( ' \u003Ca target=\"_blank\" href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $preview_permalink ), sprintf( '%s %s', __( 'Preview', 'learnpress' ), $post_type_object->labels->singular_name ) );\n+\t\t\t$messages[ $this->_post_type ][8]  .= $preview_link;\n+\t\t\t$messages[ $this->_post_type ][10] .= $preview_link;\n+\t\t}\n+\n+\t\treturn $messages;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fcourse.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fcourse.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fcourse.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fcourse.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,499 +1,502 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\WPTables\\CoursesTable;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Course_Post_Type' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Course_Post_Type\r\n-\t *\u002F\r\n-\tfinal class LP_Course_Post_Type extends LP_Abstract_Post_Type {\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\t\tprotected $_post_type       = LP_COURSE_CPT;\r\n-\t\tprotected $_screen_list     = 'edit-' . LP_COURSE_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Constructor\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\tadd_action( 'init', array( $this, 'register_taxonomy' ) );\r\n-\t\t\tadd_filter( 'posts_where_paged', array( $this, '_posts_where_paged_course_items' ), 10 );\r\n-\t\t\tadd_filter( 'posts_join_paged', array( $this, '_posts_join_paged_course_items' ), 10 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register course post type.\r\n-\t\t *\u002F\r\n-\t\tpublic function args_register_post_type(): array {\r\n-\t\t\t\u002F\u002F Support Quick Edit multiple courses change author\r\n-\t\t\tadd_post_type_support( LP_COURSE_CPT, 'author' );\r\n-\r\n-\t\t\t$labels           = array(\r\n-\t\t\t\t'name'               => _x( 'Courses', 'Post Type General Name', 'learnpress' ),\r\n-\t\t\t\t'singular_name'      => _x( 'Course', 'Post Type Singular Name', 'learnpress' ),\r\n-\t\t\t\t'menu_name'          => __( 'Courses', 'learnpress' ),\r\n-\t\t\t\t'parent_item_colon'  => __( 'Parent Item:', 'learnpress' ),\r\n-\t\t\t\t'all_items'          => __( 'Courses', 'learnpress' ),\r\n-\t\t\t\t'view_item'          => __( 'View Course', 'learnpress' ),\r\n-\t\t\t\t'add_new_item'       => __( 'Add a New Course', 'learnpress' ),\r\n-\t\t\t\t'add_new'            => __( 'Add New', 'learnpress' ),\r\n-\t\t\t\t'edit_item'          => __( 'Edit Course', 'learnpress' ),\r\n-\t\t\t\t'update_item'        => __( 'Update Course', 'learnpress' ),\r\n-\t\t\t\t'search_items'       => __( 'Search Courses', 'learnpress' ),\r\n-\t\t\t\t'not_found'          => sprintf(\r\n-\t\t\t\t\t__( 'You have not had any courses yet. Click \u003Ca href=\"%s\">Add new\u003C\u002Fa> to start', 'learnpress' ),\r\n-\t\t\t\t\tadmin_url( 'post-new.php?post_type=lp_course' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'not_found_in_trash' => __( 'There was no course found in the trash', 'learnpress' ),\r\n-\t\t\t);\r\n-\t\t\t$course_base      = LP_Settings::get_option( 'course_base', 'courses' );\r\n-\t\t\t$course_permalink = empty( $course_base ) ? 'courses' : $course_base;\r\n-\r\n-\t\t\t\u002F\u002F Set to $has_archive return link to courses page, is_archive will check is true\r\n-\t\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\r\n-\t\t\t$has_archive     = $courses_page_id ? urldecode( get_page_uri( $courses_page_id ) ) : 'courses';\r\n-\r\n-\t\t\t$args = array(\r\n-\t\t\t\t'labels'             => $labels,\r\n-\t\t\t\t'public'             => true,\r\n-\t\t\t\t'query_var'          => true,\r\n-\t\t\t\t'publicly_queryable' => true,\r\n-\t\t\t\t'show_ui'            => true,\r\n-\t\t\t\t'has_archive'        => $has_archive,\r\n-\t\t\t\t'capability_type'    => $this->_post_type,\r\n-\t\t\t\t'map_meta_cap'       => true,\r\n-\t\t\t\t'show_in_menu'       => 'learn_press',\r\n-\t\t\t\t'show_in_admin_bar'  => true,\r\n-\t\t\t\t'show_in_nav_menus'  => true,\r\n-\t\t\t\t'show_in_rest'       => true,\r\n-\t\t\t\t'taxonomies'         => array( 'course_category', 'course_tag' ),\r\n-\t\t\t\t'supports'           => array( 'title', 'editor', 'thumbnail', 'revisions', 'comments', 'excerpt' ),\r\n-\t\t\t\t'hierarchical'       => false,\r\n-\t\t\t\t'rewrite'            => ! empty( $course_permalink ) ? array(\r\n-\t\t\t\t\t'slug'       => untrailingslashit( $course_permalink ),\r\n-\t\t\t\t\t'with_front' => false,\r\n-\t\t\t\t) : false,\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register course taxonomy.\r\n-\t\t *\u002F\r\n-\t\tpublic function register_taxonomy() {\r\n-\t\t\t$category_base = LP_Settings::get_option( 'course_category_base' );\r\n-\t\t\tregister_taxonomy(\r\n-\t\t\t\t'course_category',\r\n-\t\t\t\tarray( LP_COURSE_CPT ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'label'             => __( 'Course Categories', 'learnpress' ),\r\n-\t\t\t\t\t'labels'            => array(\r\n-\t\t\t\t\t\t'name'          => __( 'Course Categories', 'learnpress' ),\r\n-\t\t\t\t\t\t'menu_name'     => __( 'Course Category', 'learnpress' ),\r\n-\t\t\t\t\t\t'singular_name' => __( 'Category', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_new_item'  => __( 'Add A New Course Category', 'learnpress' ),\r\n-\t\t\t\t\t\t'all_items'     => __( 'All Categories', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'query_var'         => true,\r\n-\t\t\t\t\t'public'            => true,\r\n-\t\t\t\t\t'hierarchical'      => true,\r\n-\t\t\t\t\t'show_ui'           => true,\r\n-\t\t\t\t\t'show_in_menu'      => 'learn_press',\r\n-\t\t\t\t\t'show_admin_column' => true,\r\n-\t\t\t\t\t'show_in_admin_bar' => true,\r\n-\t\t\t\t\t'show_in_nav_menus' => true,\r\n-\t\t\t\t\t'show_in_rest'      => true,\r\n-\t\t\t\t\t'rewrite'           => array(\r\n-\t\t\t\t\t\t'slug'         => empty( $category_base ) ? 'course-category' : $category_base,\r\n-\t\t\t\t\t\t'hierarchical' => true,\r\n-\t\t\t\t\t\t'with_front'   => false,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$tag_base = LP_Settings::get_option( 'course_tag_base' );\r\n-\t\t\tregister_taxonomy(\r\n-\t\t\t\t'course_tag',\r\n-\t\t\t\tarray( LP_COURSE_CPT ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'labels'                => array(\r\n-\t\t\t\t\t\t'name'                       => __( 'Course Tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'singular_name'              => __( 'Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'search_items'               => __( 'Search Course Tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'popular_items'              => __( 'Popular Course Tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'all_items'                  => __( 'All Course Tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'parent_item'                => null,\r\n-\t\t\t\t\t\t'parent_item_colon'          => null,\r\n-\t\t\t\t\t\t'edit_item'                  => __( 'Edit Course Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'update_item'                => __( 'Update Course Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_new_item'               => __( 'Add A New Course Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'new_item_name'              => __( 'New Course Tag Name', 'learnpress' ),\r\n-\t\t\t\t\t\t'separate_items_with_commas' => __( 'Separate tags with commas', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_or_remove_items'        => __( 'Add or remove tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'choose_from_most_used'      => __( 'Choose from the most used tags', 'learnpress' ),\r\n-\t\t\t\t\t\t'menu_name'                  => __( 'Course Tags', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'public'                => true,\r\n-\t\t\t\t\t'hierarchical'          => false,\r\n-\t\t\t\t\t'show_ui'               => true,\r\n-\t\t\t\t\t'show_in_menu'          => 'learn_press',\r\n-\t\t\t\t\t'update_count_callback' => '_update_post_term_count',\r\n-\t\t\t\t\t'query_var'             => true,\r\n-\t\t\t\t\t'show_in_rest'          => true,\r\n-\t\t\t\t\t'rewrite'               => array(\r\n-\t\t\t\t\t\t'slug'       => empty( $tag_base ) ? 'course-tag' : $tag_base,\r\n-\t\t\t\t\t\t'with_front' => false,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Declare class name of table list courses.\r\n-\t\t *\r\n-\t\t * @param string $class_name\r\n-\t\t * @param array  $args\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 4.2.9.5\r\n-\t\t *\u002F\r\n-\t\tpublic function wp_list_table_class_name( $class_name, $args ) {\r\n-\t\t\tif ( $this->check_class_name_handle_table( $args['screen'] ) ) {\r\n-\t\t\t\t$class_name = CoursesTable::class;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $class_name;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete course sections before delete course.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since modify 4.0.9\r\n-\t\t * @since 3.0.0\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function before_delete( int $post_id ) {\r\n-\t\t\t\u002F\u002F Delete course from table learnpress_courses\r\n-\t\t\t$courseModel = CourseModel::find( $post_id, true );\r\n-\t\t\tif ( $courseModel ) {\r\n-\t\t\t\t$courseModel->delete();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $post_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t$course->delete_relate_data_when_delete_course();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $fields\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_fields( $fields ): string {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $fields;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$fields = ' DISTINCT ' . $fields;\r\n-\t\t\tif ( $this->get_order_by() == 'price' ) {\r\n-\t\t\t\t$fields .= ', pm_price.meta_value as course_price';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $fields;\r\n-\t\t}\r\n-\r\n-\t\tpublic function _posts_join_paged_course_items( $join ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$course_id = $this->_filter_items_by_course();\r\n-\t\t\tif ( $course_id || LP_Request::get_param( 'orderby' ) === 'course-name' ) {\r\n-\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id\";\r\n-\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id\";\r\n-\t\t\t\t$join .= \" LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $join;\r\n-\t\t}\r\n-\r\n-\t\tpublic function _posts_where_paged_course_items( $where ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$course_id = $this->_filter_items_by_course();\r\n-\t\t\tif ( $course_id ) {\r\n-\t\t\t\t$where .= $wpdb->prepare( ' AND (c.ID = %d)', $course_id );\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$wpdb->posts}.post_status = %s\", 'publish' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $join\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_join_paged( $join ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $join;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! isset( $_GET['orderby'] ) || $_GET['orderby'] !== 'price' ) {\r\n-\t\t\t\treturn $join;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$join .= \" LEFT JOIN {$wpdb->postmeta} pm_price ON pm_price.post_id = {$wpdb->posts}.ID AND pm_price.meta_key = '_lp_price'\";\r\n-\r\n-\t\t\treturn $join;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $where\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_where_paged( $where ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $where;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter_price = LP_Helper::sanitize_params_submitted( $_REQUEST['filter_price'] ?? 0 );\r\n-\r\n-\t\t\tif ( array_key_exists( 'filter_price', $_REQUEST ) ) {\r\n-\t\t\t\tif ( $filter_price == 0 ) {\r\n-\t\t\t\t\t$where .= ' AND ( pm_price.meta_value IS NULL || pm_price.meta_value = 0 )';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$where .= $wpdb->prepare( ' AND ( pm_price.meta_value = %s )', $filter_price );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F*$not_in = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT ID\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tINNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = %s\r\n-\t\t\t\tWHERE pm.meta_value = %s\r\n-\t\t\t\t\",\r\n-\t\t\t\t'_lp_preview_course',\r\n-\t\t\t\t'yes'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$where .= \" AND {$wpdb->posts}.ID NOT IN( {$not_in} )\";*\u002F\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $orderby\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_orderby( $orderby ) {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $orderby;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order = $this->get_order_sort();\r\n-\t\t\tswitch ( $this->get_order_by() ) {\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\t\t$orderby = \"CAST(pm_price.meta_value AS UNSIGNED) {$order}\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $orderby;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save course post\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t * @param WP_Post|null $post\r\n-\t\t * @param bool $is_update\r\n-\t\t *\r\n-\t\t * @since 4.2.6.9\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$wp_screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\r\n-\t\t\t\t\u002F\u002F Save to table learnpress_courses\r\n-\t\t\t\tLP_Install::instance()->create_table_courses();\r\n-\t\t\t\tif ( empty( $post ) ) {\r\n-\t\t\t\t\t$post = get_post( $post_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F*if ( $post->post_status === 'auto-draft' ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\t$courseModel = CourseModel::find( $post_id, true );\r\n-\t\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\t\t$courseModel = new CourseModel( $post );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Merge object post and courseModel\r\n-\t\t\t\t$new_obj     = (array) $post;\r\n-\t\t\t\t$old_obj     = (array) $courseModel;\r\n-\t\t\t\t$old_now     = array_merge( $old_obj, $new_obj );\r\n-\t\t\t\t$courseModel = new CourseModel( $old_now );\r\n-\r\n-\t\t\t\t\u002F\u002F Get all metadata of course\r\n-\t\t\t\tif ( $is_update && empty( $wp_screen ) ) {\r\n-\t\t\t\t\t$coursePost = new CoursePostModel( $courseModel );\r\n-\t\t\t\t\t$coursePost->get_all_metadata();\r\n-\t\t\t\t\t$courseModel->meta_data = $coursePost->meta_data;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Save option single course\r\n-\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fclass-lp-admin.php';\r\n-\t\t\t\t$lp_meta_box_course = new LP_Meta_Box_Course();\r\n-\t\t\t\t$ground_fields      = $lp_meta_box_course->metabox( $courseModel->ID );\r\n-\t\t\t\t\u002F\u002F Save meta fields\r\n-\t\t\t\tforeach ( $ground_fields as $fields ) {\r\n-\t\t\t\t\tif ( ! isset( $fields['content'] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tforeach ( $fields['content'] as $meta_key => $option ) {\r\n-\t\t\t\t\t\t$option->id = $meta_key;\r\n-\t\t\t\t\t\tif ( ! $option instanceof LP_Meta_Box_Field ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( isset( $_POST[ $meta_key ] ) ) {\r\n-\t\t\t\t\t\t\t$value_saved = $option->save( $courseModel->ID );\r\n-\t\t\t\t\t\t\tif ( ! empty( $value_saved ) ) {\r\n-\t\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $value_saved;\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = get_post_meta( $courseModel->ID, $meta_key, true );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} elseif ( ! $is_update ) {\r\n-\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $option->default ?? '';\r\n-\t\t\t\t\t\t} elseif ( ! empty( $wp_screen ) && LP_COURSE_CPT === $wp_screen->id ) {\r\n-\t\t\t\t\t\t\t$value_saved                         = $option->save( $courseModel->ID );\r\n-\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $value_saved;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For case bulk edit multiple courses change author\r\n-\t\t\t\t$bulk_edit = LP_Request::get_param( 'bulk_edit', false );\r\n-\t\t\t\tif ( ! empty( $bulk_edit ) ) {\r\n-\t\t\t\t\t$post_author = LP_Request::get_param( 'post_author', 0, 'int' );\r\n-\t\t\t\t\tif ( $post_author != -1 ) { \u002F\u002F -1 is for no change author\r\n-\t\t\t\t\t\t$courseModel->post_author = $post_author;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( ! empty( $_REQUEST['_post_author'] ) ) {\r\n-\t\t\t\t\t\u002F\u002F Not use key 'post_author' on single edit course, it special key of WP, Gutenberg save will not submit this key.\r\n-\t\t\t\t\t$courseModel->post_author = LP_Request::get_param( '_post_author', 0, 'int' );\r\n-\t\t\t\t\t\u002F**\r\n-\t\t\t\t\t * Save author to post table\r\n-\t\t\t\t\t * Not use PostModel::save() or CoursePostModel::save() here\r\n-\t\t\t\t\t * because it calls wp_update_post(), has hook 'save_post', it will cause infinite loop\r\n-\t\t\t\t\t *\u002F\r\n-\t\t\t\t\t$lp_db                     = LP_Database::getInstance();\r\n-\t\t\t\t\t$filter_update             = new LP_Post_Type_Filter();\r\n-\t\t\t\t\t$filter_update->collection = $lp_db->tb_posts;\r\n-\t\t\t\t\t$filter_update->set[]      = \"post_author = {$courseModel->post_author}\";\r\n-\t\t\t\t\t$filter_update->where[]    = $lp_db->wpdb->prepare( 'AND ID = %d', $courseModel->ID );\r\n-\t\t\t\t\t$lp_db->update_execute( $filter_update );\r\n-\t\t\t\t\tclean_post_cache( $post->ID );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->save_price( $courseModel );\r\n-\t\t\t\t$courseModel->save();\r\n-\t\t\t\t\u002F\u002F End save to table learnpress_courses\r\n-\r\n-\t\t\t\t\u002F\u002F Save extra info course\r\n-\t\t\t\t\u002F\u002F Save in background.\r\n-\t\t\t\t$bg = LP_Background_Single_Course::instance();\r\n-\t\t\t\t$bg->data(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'handle_name' => 'save_post',\r\n-\t\t\t\t\t\t'course_id'   => $post_id,\r\n-\t\t\t\t\t\t'data'        => $_POST ?? [],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)->dispatch();\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save price course\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tprotected function save_price( CourseModel &$courseObj ) {\r\n-\t\t\t$coursePost = new CoursePostModel( $courseObj );\r\n-\r\n-\t\t\t$regular_price = $courseObj->get_regular_price();\r\n-\t\t\t$sale_price    = $courseObj->get_sale_price();\r\n-\t\t\tif ( (float) $regular_price \u003C 0 ) {\r\n-\t\t\t\t$courseObj->meta_data->{CoursePostModel::META_KEY_REGULAR_PRICE} = '';\r\n-\t\t\t\t$regular_price = $courseObj->get_regular_price();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $sale_price !== '' && (float) $sale_price > (float) $regular_price ) {\r\n-\t\t\t\t$courseObj->meta_data->{CoursePostModel::META_KEY_SALE_PRICE} = '';\r\n-\t\t\t\t$sale_price = $courseObj->get_sale_price();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Save sale regular price and sale price to table postmeta\r\n-\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_REGULAR_PRICE, $regular_price );\r\n-\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_SALE_PRICE, $sale_price );\r\n-\r\n-\t\t\t$has_sale = $courseObj->has_sale_price();\r\n-\t\t\tif ( $has_sale ) {\r\n-\t\t\t\t$courseObj->is_sale = 1;\r\n-\t\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_IS_SALE, 1 );\r\n-\t\t\t} else {\r\n-\t\t\t\t$courseObj->is_sale = 0;\r\n-\t\t\t\tdelete_post_meta( $courseObj->get_id(), CoursePostModel::META_KEY_IS_SALE );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set price to sort on lists.\r\n-\t\t\t$courseObj->price_to_sort = $courseObj->get_price();\r\n-\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_PRICE, $courseObj->price_to_sort );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Instance LP_Course_Post_Type.\r\n-\t\t *\r\n-\t\t * @return LP_Course_Post_Type|null\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$_instance ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$course_post_type = LP_Course_Post_Type::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.2\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\WPTables\\CoursesTable;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Course_Post_Type' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Course_Post_Type\n+\t *\u002F\n+\tfinal class LP_Course_Post_Type extends LP_Abstract_Post_Type {\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\t\tprotected $_post_type       = LP_COURSE_CPT;\n+\t\tprotected $_screen_list     = 'edit-' . LP_COURSE_CPT;\n+\n+\t\t\u002F**\n+\t\t * Constructor\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\tparent::__construct();\n+\n+\t\t\tadd_action( 'init', array( $this, 'register_taxonomy' ) );\n+\t\t\tadd_filter( 'posts_where_paged', array( $this, '_posts_where_paged_course_items' ), 10 );\n+\t\t\tadd_filter( 'posts_join_paged', array( $this, '_posts_join_paged_course_items' ), 10 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register course post type.\n+\t\t *\u002F\n+\t\tpublic function args_register_post_type(): array {\n+\t\t\t\u002F\u002F Support Quick Edit multiple courses change author\n+\t\t\tadd_post_type_support( LP_COURSE_CPT, 'author' );\n+\n+\t\t\t$labels           = array(\n+\t\t\t\t'name'               => _x( 'Courses', 'Post Type General Name', 'learnpress' ),\n+\t\t\t\t'singular_name'      => _x( 'Course', 'Post Type Singular Name', 'learnpress' ),\n+\t\t\t\t'menu_name'          => __( 'Courses', 'learnpress' ),\n+\t\t\t\t'parent_item_colon'  => __( 'Parent Item:', 'learnpress' ),\n+\t\t\t\t'all_items'          => __( 'Courses', 'learnpress' ),\n+\t\t\t\t'view_item'          => __( 'View Course', 'learnpress' ),\n+\t\t\t\t'add_new_item'       => __( 'Add a New Course', 'learnpress' ),\n+\t\t\t\t'add_new'            => __( 'Add New', 'learnpress' ),\n+\t\t\t\t'edit_item'          => __( 'Edit Course', 'learnpress' ),\n+\t\t\t\t'update_item'        => __( 'Update Course', 'learnpress' ),\n+\t\t\t\t'search_items'       => __( 'Search Courses', 'learnpress' ),\n+\t\t\t\t'not_found'          => sprintf(\n+\t\t\t\t\t__( 'You have not had any courses yet. Click \u003Ca href=\"%s\">Add new\u003C\u002Fa> to start', 'learnpress' ),\n+\t\t\t\t\tadmin_url( 'post-new.php?post_type=lp_course' )\n+\t\t\t\t),\n+\t\t\t\t'not_found_in_trash' => __( 'There was no course found in the trash', 'learnpress' ),\n+\t\t\t);\n+\t\t\t$course_base      = LP_Settings::get_option( 'course_base', 'courses' );\n+\t\t\t$course_permalink = empty( $course_base ) ? 'courses' : $course_base;\n+\n+\t\t\t\u002F\u002F Set to $has_archive return link to courses page, is_archive will check is true\n+\t\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\n+\t\t\t$has_archive     = $courses_page_id ? urldecode( get_page_uri( $courses_page_id ) ) : 'courses';\n+\n+\t\t\t$args = array(\n+\t\t\t\t'labels'             => $labels,\n+\t\t\t\t'public'             => true,\n+\t\t\t\t'query_var'          => true,\n+\t\t\t\t'publicly_queryable' => true,\n+\t\t\t\t'show_ui'            => true,\n+\t\t\t\t'has_archive'        => $has_archive,\n+\t\t\t\t'capability_type'    => $this->_post_type,\n+\t\t\t\t'map_meta_cap'       => true,\n+\t\t\t\t'show_in_menu'       => 'learn_press',\n+\t\t\t\t'show_in_admin_bar'  => true,\n+\t\t\t\t'show_in_nav_menus'  => true,\n+\t\t\t\t'show_in_rest'       => true,\n+\t\t\t\t'taxonomies'         => array( 'course_category', 'course_tag' ),\n+\t\t\t\t'supports'           => array( 'title', 'editor', 'thumbnail', 'revisions', 'comments', 'excerpt' ),\n+\t\t\t\t'hierarchical'       => false,\n+\t\t\t\t'rewrite'            => ! empty( $course_permalink ) ? array(\n+\t\t\t\t\t'slug'       => untrailingslashit( $course_permalink ),\n+\t\t\t\t\t'with_front' => false,\n+\t\t\t\t) : false,\n+\t\t\t);\n+\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register course taxonomy.\n+\t\t *\u002F\n+\t\tpublic function register_taxonomy() {\n+\t\t\t$category_base = LP_Settings::get_option( 'course_category_base' );\n+\t\t\tregister_taxonomy(\n+\t\t\t\t'course_category',\n+\t\t\t\tarray( LP_COURSE_CPT ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'label'             => __( 'Course Categories', 'learnpress' ),\n+\t\t\t\t\t'labels'            => array(\n+\t\t\t\t\t\t'name'          => __( 'Course Categories', 'learnpress' ),\n+\t\t\t\t\t\t'menu_name'     => __( 'Course Category', 'learnpress' ),\n+\t\t\t\t\t\t'singular_name' => __( 'Category', 'learnpress' ),\n+\t\t\t\t\t\t'add_new_item'  => __( 'Add A New Course Category', 'learnpress' ),\n+\t\t\t\t\t\t'all_items'     => __( 'All Categories', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'query_var'         => true,\n+\t\t\t\t\t'public'            => true,\n+\t\t\t\t\t'hierarchical'      => true,\n+\t\t\t\t\t'show_ui'           => true,\n+\t\t\t\t\t'show_in_menu'      => 'learn_press',\n+\t\t\t\t\t'show_admin_column' => true,\n+\t\t\t\t\t'show_in_admin_bar' => true,\n+\t\t\t\t\t'show_in_nav_menus' => true,\n+\t\t\t\t\t'show_in_rest'      => true,\n+\t\t\t\t\t'rewrite'           => array(\n+\t\t\t\t\t\t'slug'         => empty( $category_base ) ? 'course-category' : $category_base,\n+\t\t\t\t\t\t'hierarchical' => true,\n+\t\t\t\t\t\t'with_front'   => false,\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$tag_base = LP_Settings::get_option( 'course_tag_base' );\n+\t\t\tregister_taxonomy(\n+\t\t\t\t'course_tag',\n+\t\t\t\tarray( LP_COURSE_CPT ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'labels'                => array(\n+\t\t\t\t\t\t'name'                       => __( 'Course Tags', 'learnpress' ),\n+\t\t\t\t\t\t'singular_name'              => __( 'Tag', 'learnpress' ),\n+\t\t\t\t\t\t'search_items'               => __( 'Search Course Tags', 'learnpress' ),\n+\t\t\t\t\t\t'popular_items'              => __( 'Popular Course Tags', 'learnpress' ),\n+\t\t\t\t\t\t'all_items'                  => __( 'All Course Tags', 'learnpress' ),\n+\t\t\t\t\t\t'parent_item'                => null,\n+\t\t\t\t\t\t'parent_item_colon'          => null,\n+\t\t\t\t\t\t'edit_item'                  => __( 'Edit Course Tag', 'learnpress' ),\n+\t\t\t\t\t\t'update_item'                => __( 'Update Course Tag', 'learnpress' ),\n+\t\t\t\t\t\t'add_new_item'               => __( 'Add A New Course Tag', 'learnpress' ),\n+\t\t\t\t\t\t'new_item_name'              => __( 'New Course Tag Name', 'learnpress' ),\n+\t\t\t\t\t\t'separate_items_with_commas' => __( 'Separate tags with commas', 'learnpress' ),\n+\t\t\t\t\t\t'add_or_remove_items'        => __( 'Add or remove tags', 'learnpress' ),\n+\t\t\t\t\t\t'choose_from_most_used'      => __( 'Choose from the most used tags', 'learnpress' ),\n+\t\t\t\t\t\t'menu_name'                  => __( 'Course Tags', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'public'                => true,\n+\t\t\t\t\t'hierarchical'          => false,\n+\t\t\t\t\t'show_ui'               => true,\n+\t\t\t\t\t'show_in_menu'          => 'learn_press',\n+\t\t\t\t\t'update_count_callback' => '_update_post_term_count',\n+\t\t\t\t\t'query_var'             => true,\n+\t\t\t\t\t'show_in_rest'          => true,\n+\t\t\t\t\t'rewrite'               => array(\n+\t\t\t\t\t\t'slug'       => empty( $tag_base ) ? 'course-tag' : $tag_base,\n+\t\t\t\t\t\t'with_front' => false,\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Declare class name of table list courses.\n+\t\t *\n+\t\t * @param string $class_name\n+\t\t * @param array  $args\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 4.2.9.5\n+\t\t *\u002F\n+\t\tpublic function wp_list_table_class_name( $class_name, $args ) {\n+\t\t\tif ( $this->check_class_name_handle_table( $args['screen'] ) ) {\n+\t\t\t\t$class_name = CoursesTable::class;\n+\t\t\t}\n+\n+\t\t\treturn $class_name;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete course sections before delete course.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since modify 4.0.9\n+\t\t * @since 3.0.0\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function before_delete( int $post_id ) {\n+\t\t\t\u002F\u002F Delete course from table learnpress_courses\n+\t\t\t$courseModel = CourseModel::find( $post_id, true );\n+\t\t\tif ( $courseModel ) {\n+\t\t\t\t$courseModel->delete();\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $post_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t$course->delete_relate_data_when_delete_course();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $fields\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_fields( $fields ): string {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $fields;\n+\t\t\t}\n+\n+\t\t\t$fields = ' DISTINCT ' . $fields;\n+\t\t\tif ( $this->get_order_by() == 'price' ) {\n+\t\t\t\t$fields .= ', pm_price.meta_value as course_price';\n+\t\t\t}\n+\n+\t\t\treturn $fields;\n+\t\t}\n+\n+\t\tpublic function _posts_join_paged_course_items( $join ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$course_id = $this->_filter_items_by_course();\n+\t\t\tif ( $course_id || LP_Request::get_param( 'orderby' ) === 'course-name' ) {\n+\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_section_items si ON {$wpdb->posts}.ID = si.item_id\";\n+\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_sections s ON s.section_id = si.section_id\";\n+\t\t\t\t$join .= \" LEFT JOIN {$wpdb->posts} c ON c.ID = s.section_course_id\";\n+\t\t\t}\n+\n+\t\t\treturn $join;\n+\t\t}\n+\n+\t\tpublic function _posts_where_paged_course_items( $where ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$course_id = $this->_filter_items_by_course();\n+\t\t\tif ( $course_id ) {\n+\t\t\t\t$where .= $wpdb->prepare( ' AND (c.ID = %d)', $course_id );\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$wpdb->posts}.post_status = %s\", 'publish' );\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $join\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_join_paged( $join ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $join;\n+\t\t\t}\n+\n+\t\t\tif ( ! isset( $_GET['orderby'] ) || $_GET['orderby'] !== 'price' ) {\n+\t\t\t\treturn $join;\n+\t\t\t}\n+\n+\t\t\t$join .= \" LEFT JOIN {$wpdb->postmeta} pm_price ON pm_price.post_id = {$wpdb->posts}.ID AND pm_price.meta_key = '_lp_price'\";\n+\n+\t\t\treturn $join;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $where\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function posts_where_paged( $where ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $where;\n+\t\t\t}\n+\n+\t\t\t$filter_price = LP_Helper::sanitize_params_submitted( $_REQUEST['filter_price'] ?? 0 );\n+\n+\t\t\tif ( array_key_exists( 'filter_price', $_REQUEST ) ) {\n+\t\t\t\tif ( $filter_price == 0 ) {\n+\t\t\t\t\t$where .= ' AND ( pm_price.meta_value IS NULL || pm_price.meta_value = 0 )';\n+\t\t\t\t} else {\n+\t\t\t\t\t$where .= $wpdb->prepare( ' AND ( pm_price.meta_value = %s )', $filter_price );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F*$not_in = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT ID\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tINNER JOIN {$wpdb->postmeta} pm ON pm.post_id = p.ID AND pm.meta_key = %s\n+\t\t\t\tWHERE pm.meta_value = %s\n+\t\t\t\t\",\n+\t\t\t\t'_lp_preview_course',\n+\t\t\t\t'yes'\n+\t\t\t);\n+\n+\t\t\t$where .= \" AND {$wpdb->posts}.ID NOT IN( {$not_in} )\";*\u002F\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $orderby\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_orderby( $orderby ) {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $orderby;\n+\t\t\t}\n+\n+\t\t\t$order = $this->get_order_sort();\n+\t\t\tswitch ( $this->get_order_by() ) {\n+\t\t\t\tcase 'price':\n+\t\t\t\t\t$orderby = \"CAST(pm_price.meta_value AS UNSIGNED) {$order}\";\n+\t\t\t}\n+\n+\t\t\treturn $orderby;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save course post\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t * @param WP_Post|null $post\n+\t\t * @param bool $is_update\n+\t\t *\n+\t\t * @since 4.2.6.9\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\ttry {\n+\t\t\t\t$wp_screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\n+\t\t\t\t\u002F\u002F Save to table learnpress_courses\n+\t\t\t\tLP_Install::instance()->create_table_courses();\n+\t\t\t\tif ( empty( $post ) ) {\n+\t\t\t\t\t$post = get_post( $post_id );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F*if ( $post->post_status === 'auto-draft' ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\t$courseModel = CourseModel::find( $post_id, true );\n+\t\t\t\tif ( ! $courseModel ) {\n+\t\t\t\t\t$courseModel = new CourseModel( $post );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Merge object post and courseModel\n+\t\t\t\t$new_obj     = (array) $post;\n+\t\t\t\t$old_obj     = (array) $courseModel;\n+\t\t\t\t$old_now     = array_merge( $old_obj, $new_obj );\n+\t\t\t\t$courseModel = new CourseModel( $old_now );\n+\n+\t\t\t\t\u002F\u002F Get all metadata of course\n+\t\t\t\tif ( $is_update && empty( $wp_screen ) ) {\n+\t\t\t\t\t$coursePost = new CoursePostModel( $courseModel );\n+\t\t\t\t\t$coursePost->get_all_metadata();\n+\t\t\t\t\t$courseModel->meta_data = $coursePost->meta_data;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Save option single course\n+\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fclass-lp-admin.php';\n+\t\t\t\t$lp_meta_box_course = new LP_Meta_Box_Course();\n+\t\t\t\t$ground_fields      = $lp_meta_box_course->metabox( $courseModel->ID );\n+\t\t\t\t\u002F\u002F Save meta fields\n+\t\t\t\tforeach ( $ground_fields as $fields ) {\n+\t\t\t\t\tif ( ! isset( $fields['content'] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\tforeach ( $fields['content'] as $meta_key => $option ) {\n+\t\t\t\t\t\t$option->id = $meta_key;\n+\t\t\t\t\t\tif ( ! $option instanceof LP_Meta_Box_Field ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( isset( $_POST[ $meta_key ] ) && ! empty( $wp_screen ) && LP_COURSE_CPT === $wp_screen->id ) {\n+\t\t\t\t\t\t\t$value_saved = $option->save( $courseModel->ID );\n+\t\t\t\t\t\t\tif ( ! empty( $value_saved ) ) {\n+\t\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $value_saved;\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = get_post_meta( $courseModel->ID, $meta_key, true );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} elseif ( ! $is_update ) {\n+\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $option->default ?? '';\n+\t\t\t\t\t\t} elseif ( ! empty( $wp_screen ) && LP_COURSE_CPT === $wp_screen->id ) {\n+\t\t\t\t\t\t\t$value_saved                         = $option->save( $courseModel->ID );\n+\t\t\t\t\t\t\t$courseModel->meta_data->{$meta_key} = $value_saved;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For case bulk edit multiple courses change author\n+\t\t\t\t$bulk_edit = LP_Request::get_param( 'bulk_edit', false );\n+\t\t\t\tif ( ! empty( $bulk_edit ) ) {\n+\t\t\t\t\t$post_author = LP_Request::get_param( 'post_author', 0, 'int' );\n+\t\t\t\t\tif ( $post_author != -1 ) { \u002F\u002F -1 is for no change author\n+\t\t\t\t\t\t$courseModel->post_author = $post_author;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( ! empty( $_REQUEST['_post_author'] ) ) {\n+\t\t\t\t\t\u002F\u002F Not use key 'post_author' on single edit course, it special key of WP, Gutenberg save will not submit this key.\n+\t\t\t\t\t$courseModel->post_author = LP_Request::get_param( '_post_author', 0, 'int' );\n+\t\t\t\t\t\u002F**\n+\t\t\t\t\t * Save author to post table\n+\t\t\t\t\t * Not use PostModel::save() or CoursePostModel::save() here\n+\t\t\t\t\t * because it calls wp_update_post(), has hook 'save_post', it will cause infinite loop\n+\t\t\t\t\t *\u002F\n+\t\t\t\t\t$lp_db                     = LP_Database::getInstance();\n+\t\t\t\t\t$filter_update             = new LP_Post_Type_Filter();\n+\t\t\t\t\t$filter_update->collection = $lp_db->tb_posts;\n+\t\t\t\t\t$filter_update->set[]      = \"post_author = {$courseModel->post_author}\";\n+\t\t\t\t\t$filter_update->where[]    = $lp_db->wpdb->prepare( 'AND ID = %d', $courseModel->ID );\n+\t\t\t\t\t$lp_db->update_execute( $filter_update );\n+\t\t\t\t\tclean_post_cache( $post->ID );\n+\t\t\t\t} elseif ( isset( $_POST['post_author'] ) && isset( $_POST['screen'] ) && $_POST['screen'] === 'edit-' . LP_COURSE_CPT ) {\n+\t\t\t\t\t\u002F\u002F For case quick edit change author.\n+\t\t\t\t\t$courseModel->post_author = LP_Request::get_param( 'post_author', 0, 'int' );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->save_price( $courseModel );\n+\t\t\t\t$courseModel->save();\n+\t\t\t\t\u002F\u002F End save to table learnpress_courses\n+\n+\t\t\t\t\u002F\u002F Save extra info course\n+\t\t\t\t\u002F\u002F Save in background.\n+\t\t\t\t$bg = LP_Background_Single_Course::instance();\n+\t\t\t\t$bg->data(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'handle_name' => 'save_post',\n+\t\t\t\t\t\t'course_id'   => $post_id,\n+\t\t\t\t\t\t'data'        => $_POST ?? [],\n+\t\t\t\t\t)\n+\t\t\t\t)->dispatch();\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tLP_Debug::error_log( $e );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save price course\n+\t\t *\n+\t\t * @return void\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tprotected function save_price( CourseModel &$courseObj ) {\n+\t\t\t$coursePost = new CoursePostModel( $courseObj );\n+\n+\t\t\t$regular_price = $courseObj->get_regular_price();\n+\t\t\t$sale_price    = $courseObj->get_sale_price();\n+\t\t\tif ( (float) $regular_price \u003C 0 ) {\n+\t\t\t\t$courseObj->meta_data->{CoursePostModel::META_KEY_REGULAR_PRICE} = '';\n+\t\t\t\t$regular_price = $courseObj->get_regular_price();\n+\t\t\t}\n+\n+\t\t\tif ( $sale_price !== '' && (float) $sale_price > (float) $regular_price ) {\n+\t\t\t\t$courseObj->meta_data->{CoursePostModel::META_KEY_SALE_PRICE} = '';\n+\t\t\t\t$sale_price = $courseObj->get_sale_price();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Save sale regular price and sale price to table postmeta\n+\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_REGULAR_PRICE, $regular_price );\n+\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_SALE_PRICE, $sale_price );\n+\n+\t\t\t$has_sale = $courseObj->has_sale_price();\n+\t\t\tif ( $has_sale ) {\n+\t\t\t\t$courseObj->is_sale = 1;\n+\t\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_IS_SALE, 1 );\n+\t\t\t} else {\n+\t\t\t\t$courseObj->is_sale = 0;\n+\t\t\t\tdelete_post_meta( $courseObj->get_id(), CoursePostModel::META_KEY_IS_SALE );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set price to sort on lists.\n+\t\t\t$courseObj->price_to_sort = $courseObj->get_price();\n+\t\t\t$coursePost->save_meta_value_by_key( CoursePostModel::META_KEY_PRICE, $courseObj->price_to_sort );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Instance LP_Course_Post_Type.\n+\t\t *\n+\t\t * @return LP_Course_Post_Type|null\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$_instance ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\t}\n+\n+\t$course_post_type = LP_Course_Post_Type::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Flesson.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Flesson.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Flesson.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Flesson.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,358 +1,358 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Lesson_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\CourseSectionItemModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Lesson_Post_Type\r\n-\t *\u002F\r\n-\tfinal class LP_Lesson_Post_Type extends LP_Abstract_Post_Type {\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_LESSON_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Lesson_Post_Type constructor.\r\n-\t\t *\r\n-\t\t * @param $post_type\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\r\n-\t\t\t\u002F\u002F $this->add_map_method( 'before_delete', 'before_delete_lesson' );\r\n-\t\t\t\u002F\u002F hide View Lesson link if not assigned to course\r\n-\r\n-\t\t\tadd_filter( 'views_edit-' . LP_LESSON_CPT, array( $this, 'views_pages' ), 10 );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle when save post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t * @param WP_Post|null $post\r\n-\t\t * @param bool $is_update\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @throws Exception\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 4.2.7.6\r\n-\t\t *\u002F\r\n-\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\t\u002F\u002F Clear cache\r\n-\t\t\t$lpCache = new LP_Cache();\r\n-\t\t\t$lpCache->clear( \"lessonPostModel\u002Ffind\u002F{$post_id}\" );\r\n-\t\t\t$lpCache->clear( \"lessonModel\u002Ffind\u002F{$post_id}\" );\r\n-\r\n-\t\t\t\u002F\u002F Find courses have this lesson\r\n-\t\t\t$obj_course_ids = CourseSectionItemModel::get_courses_from_item_id( $post_id, LP_LESSON_CPT );\r\n-\t\t\tif ( ! empty( $obj_course_ids ) ) {\r\n-\t\t\t\tforeach ( $obj_course_ids as $obj_course_id ) {\r\n-\t\t\t\t\t$course_id       = $obj_course_id->section_course_id;\r\n-\t\t\t\t\t$coursePostModel = CoursePostModel::find( $course_id, true );\r\n-\t\t\t\t\tif ( $coursePostModel ) {\r\n-\t\t\t\t\t\t$coursePostModel->save();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filter items unassigned.\r\n-\t\t *\r\n-\t\t * @param string $where\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_where_paged( $where ): string {\r\n-\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $where;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\r\n-\t\t\t\t$where .= $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    AND {$wpdb->posts}.ID NOT IN(\r\n-                        SELECT si.item_id\r\n-                        FROM {$wpdb->learnpress_section_items} si\r\n-                        INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\r\n-                        WHERE p.post_type = %s\r\n-                    )\r\n-                \t\",\r\n-\t\t\t\t\tLP_LESSON_CPT\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$preview = LP_Request::get( 'preview' );\r\n-\r\n-\t\t\tif ( $preview ) {\r\n-\t\t\t\t$clause = $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    SELECT ID\r\n-                    FROM {$wpdb->posts} p\r\n-                    INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = %s\r\n-                    WHERE pm.meta_value = %s\r\n-                    AND p.post_type = %s\",\r\n-\t\t\t\t\t'_lp_preview',\r\n-\t\t\t\t\t'yes',\r\n-\t\t\t\t\tLP_LESSON_CPT\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$in = '';\r\n-\t\t\t\tif ( 'no' === $preview ) {\r\n-\t\t\t\t\t$in = 'NOT';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$where .= \" AND {$wpdb->posts}.ID {$in} IN({$clause})\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add filters to lesson view.\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function views_pages( array $views ): array {\r\n-\t\t\t$count_unassigned_lesson = LP_Course_DB::getInstance()->get_total_item_unassigned( LP_LESSON_CPT );\r\n-\r\n-\t\t\tif ( $count_unassigned_lesson > 0 ) {\r\n-\t\t\t\t$views['unassigned'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&unassigned=yes' ),\r\n-\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\r\n-\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\r\n-\t\t\t\t\t$count_unassigned_lesson\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_preview_items = LP_Lesson_DB::getInstance()->get_total_preview_items();\r\n-\t\t\tif ( $total_preview_items > 0 ) {\r\n-\t\t\t\t$views['lesson-preview'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&preview=yes' ),\r\n-\t\t\t\t\tisset( $_GET['preview'] ) && $_GET['preview'] === 'yes' ? 'current' : '',\r\n-\t\t\t\t\t__( 'Preview', 'learnpress' ),\r\n-\t\t\t\t\t$total_preview_items\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_no_preview_items = LP_Lesson_DB::getInstance()->get_total_no_preview_items( $total_preview_items );\r\n-\t\t\tif ( $total_no_preview_items > 0 ) {\r\n-\t\t\t\t$views['lesson-no-preview'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&preview=no' ),\r\n-\t\t\t\t\tisset( $_GET['preview'] ) && $_GET['preview'] === 'no' ? 'current' : '',\r\n-\t\t\t\t\t__( 'No Preview', 'learnpress' ),\r\n-\t\t\t\t\t$total_no_preview_items\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register lesson post type.\r\n-\t\t *\u002F\r\n-\t\tpublic function args_register_post_type(): array {\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'labels'              => array(\r\n-\t\t\t\t\t'name'               => esc_html__( 'Lessons', 'learnpress' ),\r\n-\t\t\t\t\t'menu_name'          => esc_html__( 'Lessons', 'learnpress' ),\r\n-\t\t\t\t\t'singular_name'      => esc_html__( 'Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'all_items'          => esc_html__( 'Lessons', 'learnpress' ),\r\n-\t\t\t\t\t'view_item'          => esc_html__( 'View Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'add_new'            => esc_html__( 'Add New', 'learnpress' ),\r\n-\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'update_item'        => esc_html__( 'Update Lesson', 'learnpress' ),\r\n-\t\t\t\t\t'search_items'       => esc_html__( 'Search Lessons', 'learnpress' ),\r\n-\t\t\t\t\t'not_found'          => esc_html__( 'No lesson found', 'learnpress' ),\r\n-\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no lesson found in the trash', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'public'              => true,\r\n-\t\t\t\t'query_var'           => true,\r\n-\t\t\t\t'taxonomies'          => array( 'lesson_tag' ),\r\n-\t\t\t\t'publicly_queryable'  => true,\r\n-\t\t\t\t'show_ui'             => true,\r\n-\t\t\t\t'has_archive'         => false,\r\n-\t\t\t\t'capability_type'     => LP_LESSON_CPT,\r\n-\t\t\t\t'map_meta_cap'        => true,\r\n-\t\t\t\t'show_in_menu'        => 'learn_press',\r\n-\t\t\t\t'show_in_admin_bar'   => true,\r\n-\t\t\t\t'show_in_nav_menus'   => true,\r\n-\t\t\t\t'show_in_rest'        => learn_press_user_maybe_is_a_teacher(),\r\n-\t\t\t\t'supports'            => array(\r\n-\t\t\t\t\t'title',\r\n-\t\t\t\t\t'editor',\r\n-\t\t\t\t\t'revisions',\r\n-\t\t\t\t\t'comments',\r\n-\t\t\t\t),\r\n-\t\t\t\t'hierarchical'        => true,\r\n-\t\t\t\t'rewrite'             => array(\r\n-\t\t\t\t\t'slug'         => 'lessons',\r\n-\t\t\t\t\t'hierarchical' => true,\r\n-\t\t\t\t\t'with_front'   => false,\r\n-\t\t\t\t),\r\n-\t\t\t\t'exclude_from_search' => true,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove lesson form course items.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function before_delete( int $post_id = 0 ) {\r\n-\t\t\t$curd = new LP_Lesson_CURD();\r\n-\t\t\t$curd->delete( $post_id );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add columns to admin manage lesson page\r\n-\t\t *\r\n-\t\t * @param array $columns\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_head( $columns ) {\r\n-\t\t\t\u002F\u002F append new column after title column\r\n-\t\t\t$pos         = array_search( 'title', array_keys( $columns ) );\r\n-\t\t\t$new_columns = array(\r\n-\t\t\t\t'instructor'  => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\tLP_COURSE_CPT => $this->_get_course_column_title(),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( current_theme_supports( 'post-formats' ) ) {\r\n-\t\t\t\t$new_columns['format']   = esc_html__( 'Format', 'learnpress' );\r\n-\t\t\t\t$new_columns['duration'] = esc_html__( 'Duration', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$new_columns['preview'] = esc_html__( 'Preview', 'learnpress' );\r\n-\r\n-\t\t\tif ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {\r\n-\t\t\t\t$columns = array_merge(\r\n-\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\r\n-\t\t\t\t\t$new_columns,\r\n-\t\t\t\t\tarray_slice( $columns, $pos + 1 )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\tunset( $columns['taxonomy-lesson-tag'] );\r\n-\t\t\t$user = wp_get_current_user();\r\n-\r\n-\t\t\tif ( in_array( LP_TEACHER_ROLE, $user->roles ) ) {\r\n-\t\t\t\tunset( $columns['instructor'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $columns['author'] ) ) {\r\n-\t\t\t\tunset( $columns['author'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display content for custom column\r\n-\t\t *\r\n-\t\t * @param string $name\r\n-\t\t * @param int    $post_id\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_content( $name, $post_id = 0 ) {\r\n-\t\t\tswitch ( $name ) {\r\n-\t\t\t\tcase 'instructor':\r\n-\t\t\t\t\t$this->column_instructor( $post_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t$this->_get_item_course( $post_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'preview':\r\n-\t\t\t\t\t$lesson_is_preview = 'yes' === get_post_meta( $post_id, '_lp_preview', true );\r\n-\t\t\t\t\techo $lesson_is_preview ? '\u003Cspan class=\"dashicons dashicons-saved\" style=\"color: #00c700\">\u003C\u002Fspan>' : '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'format':\r\n-\t\t\t\t\tlearn_press_item_meta_format( $post_id, __( 'Standard', 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $columns\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function sortable_columns( $columns ) {\r\n-\t\t\t$columns[ LP_COURSE_CPT ] = 'course-name';\r\n-\t\t\t$columns['author']        = 'author';\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Lesson assigned view.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function lesson_assigned() {\r\n-\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function meta_boxes() {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'lesson_assigned' => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => array( $this, 'lesson_assigned' ),\r\n-\t\t\t\t\t'context'  => 'side',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Lesson_Post_Type|null\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$_instance ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$lesson_post_type = LP_Lesson_Post_Type::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Lesson_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\CourseSectionItemModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Lesson_Post_Type' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Lesson_Post_Type\n+\t *\u002F\n+\tfinal class LP_Lesson_Post_Type extends LP_Abstract_Post_Type {\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_LESSON_CPT;\n+\n+\t\t\u002F**\n+\t\t * LP_Lesson_Post_Type constructor.\n+\t\t *\n+\t\t * @param $post_type\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\n+\t\t\t\u002F\u002F $this->add_map_method( 'before_delete', 'before_delete_lesson' );\n+\t\t\t\u002F\u002F hide View Lesson link if not assigned to course\n+\n+\t\t\tadd_filter( 'views_edit-' . LP_LESSON_CPT, array( $this, 'views_pages' ), 10 );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle when save post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t * @param WP_Post|null $post\n+\t\t * @param bool $is_update\n+\t\t *\n+\t\t * @return void\n+\t\t * @throws Exception\n+\t\t * @version 1.0.1\n+\t\t * @since 4.2.7.6\n+\t\t *\u002F\n+\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\t\u002F\u002F Clear cache\n+\t\t\t$lpCache = new LP_Cache();\n+\t\t\t$lpCache->clear( \"lessonPostModel\u002Ffind\u002F{$post_id}\" );\n+\t\t\t$lpCache->clear( \"lessonModel\u002Ffind\u002F{$post_id}\" );\n+\n+\t\t\t\u002F\u002F Find courses have this lesson\n+\t\t\t$obj_course_ids = CourseSectionItemModel::get_courses_from_item_id( $post_id, LP_LESSON_CPT );\n+\t\t\tif ( ! empty( $obj_course_ids ) ) {\n+\t\t\t\tforeach ( $obj_course_ids as $obj_course_id ) {\n+\t\t\t\t\t$course_id       = $obj_course_id->section_course_id;\n+\t\t\t\t\t$coursePostModel = CoursePostModel::find( $course_id, true );\n+\t\t\t\t\tif ( $coursePostModel ) {\n+\t\t\t\t\t\t$coursePostModel->save();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Filter items unassigned.\n+\t\t *\n+\t\t * @param string $where\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_where_paged( $where ): string {\n+\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $where;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\n+\t\t\t\t$where .= $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    AND {$wpdb->posts}.ID NOT IN(\n+                        SELECT si.item_id\n+                        FROM {$wpdb->learnpress_section_items} si\n+                        INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\n+                        WHERE p.post_type = %s\n+                    )\n+                \t\",\n+\t\t\t\t\tLP_LESSON_CPT\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$preview = LP_Request::get( 'preview' );\n+\n+\t\t\tif ( $preview ) {\n+\t\t\t\t$clause = $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    SELECT ID\n+                    FROM {$wpdb->posts} p\n+                    INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = %s\n+                    WHERE pm.meta_value = %s\n+                    AND p.post_type = %s\",\n+\t\t\t\t\t'_lp_preview',\n+\t\t\t\t\t'yes',\n+\t\t\t\t\tLP_LESSON_CPT\n+\t\t\t\t);\n+\n+\t\t\t\t$in = '';\n+\t\t\t\tif ( 'no' === $preview ) {\n+\t\t\t\t\t$in = 'NOT';\n+\t\t\t\t}\n+\n+\t\t\t\t$where .= \" AND {$wpdb->posts}.ID {$in} IN({$clause})\";\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add filters to lesson view.\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function views_pages( array $views ): array {\n+\t\t\t$count_unassigned_lesson = LP_Course_DB::getInstance()->get_total_item_unassigned( LP_LESSON_CPT );\n+\n+\t\t\tif ( $count_unassigned_lesson > 0 ) {\n+\t\t\t\t$views['unassigned'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&unassigned=yes' ),\n+\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\n+\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\n+\t\t\t\t\t$count_unassigned_lesson\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$total_preview_items = LP_Lesson_DB::getInstance()->get_total_preview_items();\n+\t\t\tif ( $total_preview_items > 0 ) {\n+\t\t\t\t$views['lesson-preview'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&preview=yes' ),\n+\t\t\t\t\tisset( $_GET['preview'] ) && $_GET['preview'] === 'yes' ? 'current' : '',\n+\t\t\t\t\t__( 'Preview', 'learnpress' ),\n+\t\t\t\t\t$total_preview_items\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$total_no_preview_items = LP_Lesson_DB::getInstance()->get_total_no_preview_items( $total_preview_items );\n+\t\t\tif ( $total_no_preview_items > 0 ) {\n+\t\t\t\t$views['lesson-no-preview'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_LESSON_CPT . '&preview=no' ),\n+\t\t\t\t\tisset( $_GET['preview'] ) && $_GET['preview'] === 'no' ? 'current' : '',\n+\t\t\t\t\t__( 'No Preview', 'learnpress' ),\n+\t\t\t\t\t$total_no_preview_items\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register lesson post type.\n+\t\t *\u002F\n+\t\tpublic function args_register_post_type(): array {\n+\n+\t\t\treturn array(\n+\t\t\t\t'labels'              => array(\n+\t\t\t\t\t'name'               => esc_html__( 'Lessons', 'learnpress' ),\n+\t\t\t\t\t'menu_name'          => esc_html__( 'Lessons', 'learnpress' ),\n+\t\t\t\t\t'singular_name'      => esc_html__( 'Lesson', 'learnpress' ),\n+\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Lesson', 'learnpress' ),\n+\t\t\t\t\t'all_items'          => esc_html__( 'Lessons', 'learnpress' ),\n+\t\t\t\t\t'view_item'          => esc_html__( 'View Lesson', 'learnpress' ),\n+\t\t\t\t\t'add_new'            => esc_html__( 'Add New', 'learnpress' ),\n+\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Lesson', 'learnpress' ),\n+\t\t\t\t\t'update_item'        => esc_html__( 'Update Lesson', 'learnpress' ),\n+\t\t\t\t\t'search_items'       => esc_html__( 'Search Lessons', 'learnpress' ),\n+\t\t\t\t\t'not_found'          => esc_html__( 'No lesson found', 'learnpress' ),\n+\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no lesson found in the trash', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'public'              => true,\n+\t\t\t\t'query_var'           => true,\n+\t\t\t\t'taxonomies'          => array( 'lesson_tag' ),\n+\t\t\t\t'publicly_queryable'  => true,\n+\t\t\t\t'show_ui'             => true,\n+\t\t\t\t'has_archive'         => false,\n+\t\t\t\t'capability_type'     => LP_LESSON_CPT,\n+\t\t\t\t'map_meta_cap'        => true,\n+\t\t\t\t'show_in_menu'        => 'learn_press',\n+\t\t\t\t'show_in_admin_bar'   => true,\n+\t\t\t\t'show_in_nav_menus'   => true,\n+\t\t\t\t'show_in_rest'        => learn_press_user_maybe_is_a_teacher(),\n+\t\t\t\t'supports'            => array(\n+\t\t\t\t\t'title',\n+\t\t\t\t\t'editor',\n+\t\t\t\t\t'revisions',\n+\t\t\t\t\t'comments',\n+\t\t\t\t),\n+\t\t\t\t'hierarchical'        => true,\n+\t\t\t\t'rewrite'             => array(\n+\t\t\t\t\t'slug'         => 'lessons',\n+\t\t\t\t\t'hierarchical' => true,\n+\t\t\t\t\t'with_front'   => false,\n+\t\t\t\t),\n+\t\t\t\t'exclude_from_search' => true,\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove lesson form course items.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\t\u002F*public function before_delete( int $post_id = 0 ) {\n+\t\t\t$curd = new LP_Lesson_CURD();\n+\t\t\t$curd->delete( $post_id );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Add columns to admin manage lesson page\n+\t\t *\n+\t\t * @param array $columns\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function columns_head( $columns ) {\n+\t\t\t\u002F\u002F append new column after title column\n+\t\t\t$pos         = array_search( 'title', array_keys( $columns ) );\n+\t\t\t$new_columns = array(\n+\t\t\t\t'instructor'  => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\tLP_COURSE_CPT => $this->_get_course_column_title(),\n+\t\t\t);\n+\n+\t\t\tif ( current_theme_supports( 'post-formats' ) ) {\n+\t\t\t\t$new_columns['format']   = esc_html__( 'Format', 'learnpress' );\n+\t\t\t\t$new_columns['duration'] = esc_html__( 'Duration', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$new_columns['preview'] = esc_html__( 'Preview', 'learnpress' );\n+\n+\t\t\tif ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {\n+\t\t\t\t$columns = array_merge(\n+\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\n+\t\t\t\t\t$new_columns,\n+\t\t\t\t\tarray_slice( $columns, $pos + 1 )\n+\t\t\t\t);\n+\n+\t\t\t}\n+\n+\t\t\tunset( $columns['taxonomy-lesson-tag'] );\n+\t\t\t$user = wp_get_current_user();\n+\n+\t\t\tif ( in_array( LP_TEACHER_ROLE, $user->roles ) ) {\n+\t\t\t\tunset( $columns['instructor'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $columns['author'] ) ) {\n+\t\t\t\tunset( $columns['author'] );\n+\t\t\t}\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display content for custom column\n+\t\t *\n+\t\t * @param string $name\n+\t\t * @param int    $post_id\n+\t\t *\u002F\n+\t\tpublic function columns_content( $name, $post_id = 0 ) {\n+\t\t\tswitch ( $name ) {\n+\t\t\t\tcase 'instructor':\n+\t\t\t\t\t$this->column_instructor( $post_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t$this->_get_item_course( $post_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'preview':\n+\t\t\t\t\t$lesson_is_preview = 'yes' === get_post_meta( $post_id, '_lp_preview', true );\n+\t\t\t\t\techo $lesson_is_preview ? '\u003Cspan class=\"dashicons dashicons-saved\" style=\"color: #00c700\">\u003C\u002Fspan>' : '';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'format':\n+\t\t\t\t\tlearn_press_item_meta_format( $post_id, __( 'Standard', 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $columns\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function sortable_columns( $columns ) {\n+\t\t\t$columns[ LP_COURSE_CPT ] = 'course-name';\n+\t\t\t$columns['author']        = 'author';\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Lesson assigned view.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function lesson_assigned() {\n+\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\n+\t\t}\n+\n+\t\tpublic function meta_boxes() {\n+\t\t\treturn array(\n+\t\t\t\t'lesson_assigned' => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\n+\t\t\t\t\t'callback' => array( $this, 'lesson_assigned' ),\n+\t\t\t\t\t'context'  => 'side',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Lesson_Post_Type|null\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$_instance ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\t}\n+\n+\t$lesson_post_type = LP_Lesson_Post_Type::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Forder.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Forder.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Forder.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Forder.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,861 +1,861 @@\n-\u003C?php\r\n-\u002F**\r\n- * @class LP_Order_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Ajax\\ExportOrderCSVAjax;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\OrderPostFilter;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-\r\n-if ( ! class_exists( 'LP_Order_Post_Type' ) ) {\r\n-\tfinal class LP_Order_Post_Type extends LP_Abstract_Post_Type {\r\n-\t\t\u002F**\r\n-\t\t * Type of post\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_ORDER_CPT;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Order_Post_Type constructor.\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\tadd_action( 'admin_init', array( $this, 'register_post_statues' ) );\r\n-\t\t\t\u002F\u002Fadd_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );\r\n-\t\t\tadd_action( 'posts_pre_query', array( $this, 'posts_pre_query' ), 999, 2 );\r\n-\t\t\t\u002F\u002Fadd_action( 'admin_init', array( $this, 'remove_box' ) );\r\n-\t\t\t\u002F\u002Fadd_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );\r\n-\t\t\tadd_filter( 'wp_untrash_post_status', array( $this, 'restore_status_order' ), 11, 3 );\r\n-\t\t\tadd_filter( 'admin_footer', array( $this, 'admin_footer' ) );\r\n-\t\t\t\u002F\u002Fadd_filter( 'views_edit-lp_order', array( $this, 'filter_views' ) );\r\n-\t\t\t\u002F\u002F Download order CSV file\r\n-\t\t\t$this->download_order_csv_file();\r\n-\r\n-\t\t\t\u002F\u002F Override title of LP Order on Admin\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\t$can_override_title_order = false;\r\n-\t\t\t\t$current_url              = LP_Helper::getUrlCurrent();\r\n-\t\t\t\t$post_id                  = LP_Helper::sanitize_params_submitted( $_GET['post'] ?? '' );\r\n-\t\t\t\tif ( ! empty( $post_id ) ) {\r\n-\t\t\t\t\t$post = get_post( $post_id );\r\n-\t\t\t\t\tif ( $post && $post->post_type == LP_ORDER_CPT ) {\r\n-\t\t\t\t\t\t$can_override_title_order = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( strpos( $current_url, 'post_type=lp_order' ) !== false ) {\r\n-\t\t\t\t\t$can_override_title_order = true;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $can_override_title_order ) {\r\n-\t\t\t\t\tadd_filter( 'the_title', array( $this, 'order_title' ), 5, 2 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Unset value in 'mine' key in views of LP Orders.\r\n-\t\t * The 'mine' is present in some case when 'user_posts_count'\r\n-\t\t * is not the same with total posts then wp add it to the views\r\n-\t\t * of WP Posts List table.\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function filter_views( $views ) {\r\n-\t\t\tif ( isset( $views['mine'] ) ) {\r\n-\t\t\t\tunset( $views['mine'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filter to hide orders are created by one order for multiple users.\r\n-\t\t *\r\n-\t\t * @param string $where\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function filter_orders( string $where ): string {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $where;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( isset( $_REQUEST['parent'] ) ) {\r\n-\t\t\t\t$where .= sprintf( ' AND post_parent = %d ', absint( $_REQUEST['parent'] ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F $where .= $wpdb->prepare( \" AND (post_parent = 0 OR {$wpdb->posts}.ID IN( SELECT post_parent FROM {$wpdb->posts} X WHERE X.post_parent \u003C> 0 AND X.post_type = %s) )\", LP_ORDER_CPT );\r\n-\t\t\t\t$where .= ' AND post_parent = 0 ';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\tpublic function enqueue_scripts() {\r\n-\t\t\tif ( get_post_type() != $this->_post_type ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\twp_enqueue_script( 'user-suggest' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Restore user course item when the order is stored (usually from trash).\r\n-\t\t *\r\n-\t\t * @param string $new_status\r\n-\t\t * @param int $post_id\r\n-\t\t * @param string $previous_status\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function restore_status_order( string $new_status, int $post_id, string $previous_status ): string {\r\n-\t\t\tif ( LP_ORDER_CPT != get_post_type( $post_id ) ) {\r\n-\t\t\t\treturn $new_status;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $previous_status;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save order post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t * @param WP_Post $post\r\n-\t\t * @param bool $is_update\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.6\r\n-\t\t *\u002F\r\n-\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );\r\n-\t\t\t\tif ( isset( $backtrace[6]['class'] ) && $backtrace[6]['class'] === LP_Order_CURD::class ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( wp_is_post_revision( $post_id ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For create LP Order manual on Backend\r\n-\t\t\t\t$order = learn_press_get_order( $post_id );\r\n-\t\t\t\tif ( ! $order ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$created_via = $order->get_created_via();\r\n-\t\t\t\tif ( empty( $created_via ) ) {\r\n-\t\t\t\t\t$created_via = LP_ORDER_CREATED_VIA_MANUAL;\r\n-\t\t\t\t\t$order->set_created_via( $created_via );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( isset( $_POST['order-customer'] ) && $order->is_manual() ) {\r\n-\t\t\t\t\t$user_id = LP_Request::get_param( 'order-customer' );\r\n-\t\t\t\t\t$order->set_user_id( $user_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( isset( $_POST['order-date'] ) ) {\r\n-\t\t\t\t\t$order_date = LP_Request::get_param( 'order-date' );\r\n-\t\t\t\t\t$order_hour = LP_Request::get_param( 'order-hour', '00' );\r\n-\t\t\t\t\t$order_min  = LP_Request::get_param( 'order-minute', '00' );\r\n-\t\t\t\t\t$order->set_order_date( $order_date . ' ' . $order_hour . ':' . $order_min . ':00' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$status = LP_Request::get_param( 'order-status' );\r\n-\t\t\t\tif ( ! empty( $status ) ) {\r\n-\t\t\t\t\t$order->update_status( $status );\r\n-\t\t\t\t} elseif ( $post->post_status === 'auto-draft' ) {\r\n-\t\t\t\t\t$order->update_status( 'pending' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$order->save();\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ':' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove unused boxes\r\n-\t\t *\u002F\r\n-\t\tpublic function remove_box() {\r\n-\t\t\tremove_post_type_support( LP_ORDER_CPT, 'title' );\r\n-\t\t\tremove_post_type_support( LP_ORDER_CPT, 'editor' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function admin_footer() {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003Cscript type=\"text\u002Fjavascript\">\r\n-\t\t\t\tjQuery(function ($) {\r\n-\t\t\t\t\t$('#post-search-input').prop('placeholder',\r\n-\t\t\t\t\t\t'\u003C?php esc_attr_e( 'Order number, course name, etc.', 'learnpress' ); ?>').css('width', 300)\r\n-\t\t\t\t})\r\n-\t\t\t\u003C\u002Fscript>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Hook to filter LP orders by some conditions.\r\n-\t\t *\r\n-\t\t * @param string $where\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function posts_where_paged( $where ) {\r\n-\t\t\t\u002F\u002F Code temporary, when release about 1 week, will remove it.\r\n-\t\t\t$lp_filter_post              = new LP_Post_Type_Filter();\r\n-\t\t\t$lp_filter_post->post_type   = LP_ORDER_CPT;\r\n-\t\t\t$lp_filter_post->post_status = [ 'lp-trash' ];\r\n-\t\t\t$orders_trash                = LP_Post_DB::getInstance()->get_posts( $lp_filter_post );\r\n-\t\t\tif ( $orders_trash ) {\r\n-\t\t\t\tforeach ( $orders_trash as $order_trash ) {\r\n-\t\t\t\t\t$order = learn_press_get_order( $order_trash->ID );\r\n-\t\t\t\t\tif ( $order ) {\r\n-\t\t\t\t\t\t$order->update_status( 'trash' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Change status course from lp_trash to trash.\r\n-\r\n-\t\t\t\u002F\u002F End code temporary\r\n-\t\t\tglobal $wpdb, $wp_query;\r\n-\t\t\t$lp_db = LP_Database::getInstance();\r\n-\t\t\tif ( is_admin() && $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\t$where  = ' ';\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_type = %s\", LP_ORDER_CPT );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Search by keyword\r\n-\t\t\tif ( ! empty( $wp_query->get( 's' ) ) ) {\r\n-\t\t\t\t$s = $wp_query->get( 's' );\r\n-\r\n-\t\t\t\t\u002F\u002F Check search LP Order ID with format #000[ID] or 000[ID]\r\n-\t\t\t\t$pattern = '\u002F^#\\d+$\u002F';\r\n-\t\t\t\tif ( preg_match( $pattern, $s ) ) {\r\n-\t\t\t\t\t$s = str_replace( '#', '', $s );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$pattern2 = '#^0+.*\\d+$#';\r\n-\t\t\t\tif ( preg_match( $pattern2, $s ) ) {\r\n-\t\t\t\t\t$s = (int) $s;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$s = trim( $s );\r\n-\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.ID = %d\", $s );\r\n-\t\t\t\t$where .= $wpdb->prepare( ' OR lpori.order_item_name like %s', '%' . $wpdb->esc_like( $s ) . '%' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Search by author id\r\n-\t\t\tif ( ! empty( $wp_query->get( 'author' ) ) ) {\r\n-\t\t\t\t$user_id = absint( $wp_query->get( 'author' ) );\r\n-\t\t\t\t\u002F\u002F$where   .= $wpdb->prepare( ' AND uu.ID like %s ', $user_id );\r\n-\t\t\t\t$where .= \" AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id ) \";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $wp_query->get( 'm' ) ) ) {\r\n-\t\t\t\t$month  = $wp_query->get( 'm' );\r\n-\t\t\t\t$where .= \" AND YEAR({$lp_db->tb_posts}.post_date)=\" . substr( $month, 0, 4 );\r\n-\t\t\t\tif ( strlen( $month ) > 5 ) {\r\n-\t\t\t\t\t$where .= \" AND MONTH({$lp_db->tb_posts}.post_date)=\" . substr( $month, 4, 2 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Filter by order status\r\n-\t\t\tif ( ! empty( $wp_query->get( 'post_status' ) ) ) {\r\n-\t\t\t\t$status = $wp_query->get( 'post_status' );\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_status = %s\", $status );\r\n-\t\t\t} else {\r\n-\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_status NOT IN (%s, %s, %s)\", LP_ORDER_TRASH_DB, LP_ORDER_TRASH, 'auto-draft' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F      public function posts_orderby( $orderby ) {\r\n-\t\t\u002F\u002F          global $wpdb;\r\n-\t\t\u002F\u002F\r\n-\t\t\u002F\u002F          $order = $this->get_order_sort();\r\n-\t\t\u002F\u002F\r\n-\t\t\u002F\u002F          switch ( $this->get_order_by() ) {\r\n-\t\t\u002F\u002F              case 'title':\r\n-\t\t\u002F\u002F                  $orderby = \"{$wpdb->posts}.ID {$order}\";\r\n-\t\t\u002F\u002F                  break;\r\n-\t\t\u002F\u002F              \u002F*case 'student':\r\n-\t\t\u002F\u002F                  $orderby = \"uu.user_login {$order}\";\r\n-\t\t\u002F\u002F                  break;*\u002F\r\n-\t\t\u002F\u002F              case 'date':\r\n-\t\t\u002F\u002F                  $orderby = \"{$wpdb->posts}.post_date {$order}\";\r\n-\t\t\u002F\u002F                  break;\r\n-\t\t\u002F\u002F              case 'order_total':\r\n-\t\t\u002F\u002F                  $orderby = \"CAST(pm2.meta_value AS UNSIGNED) {$order}\";\r\n-\t\t\u002F\u002F                  break;\r\n-\t\t\u002F\u002F          }\r\n-\t\t\u002F\u002F\r\n-\t\t\u002F\u002F          return $orderby;\r\n-\t\t\u002F\u002F      }\r\n-\r\n-\t\t\u002F*public function posts_join_paged( $join ) {\r\n-\t\t\tglobal $wpdb, $wp_query;\r\n-\t\t\t$lp_db = LP_Database::getInstance();\r\n-\r\n-\t\t\t\u002F\u002F Search by keyword\r\n-\t\t\tif ( ! empty( $wp_query->get( 's' ) ) ) {\r\n-\t\t\t\t$join .= \" INNER JOIN {$lp_db->tb_lp_order_items} lpori ON {$wpdb->posts}.ID = lpori.order_id\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $wp_query->get( 'author' ) ) ) {\r\n-\t\t\t\t$author_id = $wp_query->get( 'author' );\r\n-\t\t\t\t$join     .= \" INNER JOIN {$lp_db->tb_postmeta} pm1 ON {$wpdb->posts}.ID = pm1.post_id AND pm1.meta_key = '_user_id'\";\r\n-\t\t\t\t$join     .= \" LEFT JOIN {$lp_db->tb_users} uu ON uu.ID = $author_id\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->get_order_by() === 'order_total' ) {\r\n-\t\t\t\t$join .= \" INNER JOIN {$lp_db->tb_postmeta} pm2 ON {$wpdb->posts}.ID = pm2.post_id AND pm2.meta_key = '_order_total'\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $join;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Make our custom columns can be sortable\r\n-\t\t *\r\n-\t\t * @param $columns\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function sortable_columns( $columns ) {\r\n-\t\t\t$columns['order_date']  = 'date';\r\n-\t\t\t$columns['order_total'] = 'order_total';\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\tpublic function update_status() {\r\n-\t\t\t$order_id = ! empty( $_REQUEST['order_id'] ) ? absint( $_REQUEST['order_id'] ) : 0;\r\n-\t\t\t$status   = ! empty( $_REQUEST['status'] ) ? LP_Helper::sanitize_params_submitted( $_REQUEST['status'] ) : 'Pending';\r\n-\r\n-\t\t\tlearn_press_update_order_status( $order_id, $status );\r\n-\r\n-\t\t\twp_send_json(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => $status,\r\n-\t\t\t\t\t'class'  => sanitize_title( $status ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Custom row's actions.\r\n-\t\t *\r\n-\t\t * @param array $actions\r\n-\t\t * @param WP_Post $post\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 2.1.7\r\n-\t\t * @deprecated 4.2.6.4\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function row_actions( $actions, $post ) {\r\n-\t\t\tif ( ! empty( $actions['inline hide-if-no-js'] ) ) {\r\n-\t\t\t\tunset( $actions['inline hide-if-no-js'] );\r\n-\t\t\t}\r\n-\t\t\tif ( ! empty( $actions['edit'] ) ) {\r\n-\t\t\t\t$actions['edit'] = preg_replace( '\u002F>(.*?)\u003C\\\u002Fa>\u002F', '>' . __( 'View Order', 'learnpress' ) . '\u003C\u002Fa>', $actions['edit'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $actions;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * re-order the orders by newest\r\n-\t\t *\r\n-\t\t * @param WP_Query $wp_query\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @reason comment this function - because default sort by id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function pre_get_posts( $wp_query ) {\r\n-\t\t\tif ( ! is_admin() ) {\r\n-\t\t\t\treturn $wp_query;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_type = $wp_query->get( 'post_type' );\r\n-\r\n-\t\t\tif ( empty( $post_type ) || $post_type != LP_ORDER_CPT ) {\r\n-\t\t\t\treturn $wp_query;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\t$wp_query->set( 'orderby', 'date' );\r\n-\t\t\t\t$wp_query->set( 'order', 'desc' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_status = $wp_query->get( 'post_status' );\r\n-\t\t\tif ( empty( $post_status ) || $post_status == 'all' ) {\r\n-\t\t\t\t$wp_query->set(\r\n-\t\t\t\t\t'post_status',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\tLP_ORDER_COMPLETED_DB,\r\n-\t\t\t\t\t\tLP_ORDER_PROCESSING_DB,\r\n-\t\t\t\t\t\tLP_ORDER_PENDING_DB,\r\n-\t\t\t\t\t\tLP_ORDER_FAILED_DB,\r\n-\t\t\t\t\t\tLP_ORDER_CANCELLED_DB,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Search by author id\r\n-\t\t\t\u002F*if ( ! empty( $wp_query->get( 'author' ) ) ) {\r\n-\t\t\t\t$user_id = absint( $wp_query->get( 'author' ) );\r\n-\t\t\t\t\u002F\u002F$where   .= $wpdb->prepare( ' AND uu.ID like %s ', $user_id );\r\n-\t\t\t\t$where .= \" AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id ) \";\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$post_author = $wp_query->get( 'author' );\r\n-\t\t\tif ( ! empty( $post_author ) ) {\r\n-\t\t\t\t$user_id    = absint( $post_author );\r\n-\t\t\t\t$meta_query = array(\r\n-\t\t\t\t\t\u002F\u002F                  'relation' => 'OR',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'key'     => '_user_id',\r\n-\t\t\t\t\t\t'value'   => '%\"' . $user_id . '\"%',\r\n-\t\t\t\t\t\t'compare' => 'LIKE',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t\u002F\u002F                  array(\r\n-\t\t\t\t\t\u002F\u002F                      'key'     => '_user_id',\r\n-\t\t\t\t\t\u002F\u002F                      'value'   => $user_id,\r\n-\t\t\t\t\t\u002F\u002F                      'compare' => '=',\r\n-\t\t\t\t\t\u002F\u002F                  ),\r\n-\t\t\t\t);\r\n-\t\t\t\t$wp_query->set( 'meta_query', $meta_query );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $wp_query;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query lp orders in admin via Post DB\r\n-\t\t *\r\n-\t\t * @param array $posts\r\n-\t\t * @param WP_Query $wp_query\r\n-\t\t *\r\n-\t\t * @return array|WP_Query\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_pre_query( $posts, $wp_query ) {\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! is_admin() ) {\r\n-\t\t\t\t\treturn $posts;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$post_type = $wp_query->get( 'post_type' );\r\n-\r\n-\t\t\t\tif ( empty( $post_type ) || $post_type != LP_ORDER_CPT ) {\r\n-\t\t\t\t\treturn $posts;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Convert params from WP_Query to PostFilter\r\n-\t\t\t\t$posts_per_page = get_user_option( \"edit_{$post_type}_per_page\", get_current_user_id() );\r\n-\t\t\t\tif ( empty( $posts_per_page ) ) {\r\n-\t\t\t\t\t$posts_per_page = 20;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$paged         = max( 1, get_query_var( 'paged' ) );\r\n-\t\t\t\t$user_of_order = $wp_query->get( 'author' );\r\n-\t\t\t\t$status        = $wp_query->get( 'post_status' );\r\n-\t\t\t\t$key           = $wp_query->get( 's' );\r\n-\t\t\t\t$month         = $wp_query->get( 'm' );\r\n-\r\n-\t\t\t\t$filter = new OrderPostFilter();\r\n-\t\t\t\t$param  = [\r\n-\t\t\t\t\t'paged'          => $paged,\r\n-\t\t\t\t\t'posts_per_page' => $posts_per_page,\r\n-\t\t\t\t\t'author'         => $user_of_order,\r\n-\t\t\t\t\t'post_status'    => $status,\r\n-\t\t\t\t\t's'              => $key,\r\n-\t\t\t\t\t'm'              => $month,\r\n-\t\t\t\t];\r\n-\t\t\t\tLP_Order::handle_params_query_list_orders( $filter, $param );\r\n-\r\n-\t\t\t\t\u002F\u002F Get lp orders\r\n-\t\t\t\t$post_db    = PostDB::getInstance();\r\n-\t\t\t\t$total_rows = 0;\r\n-\t\t\t\t$lp_orders  = $post_db->get_posts( $filter, $total_rows );\r\n-\r\n-\t\t\t\t$wp_query->post_count  = $total_rows;\r\n-\t\t\t\t$wp_query->found_posts = $total_rows;\r\n-\t\t\t\t$posts                 = $lp_orders;\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $posts;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_head( $existing ) {\r\n-\r\n-\t\t\t\u002F\u002F Remove Checkbox - adding it back below\r\n-\t\t\tif ( isset( $existing['cb'] ) ) {\r\n-\t\t\t\t$check = $existing['cb'];\r\n-\t\t\t\tunset( $existing['cb'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Title - adding it back below\r\n-\t\t\tif ( isset( $existing['title'] ) ) {\r\n-\t\t\t\tunset( $existing['title'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Format\r\n-\t\t\tif ( isset( $existing['format'] ) ) {\r\n-\t\t\t\tunset( $existing['format'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Author\r\n-\t\t\tif ( isset( $existing['author'] ) ) {\r\n-\t\t\t\tunset( $existing['author'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Comments\r\n-\t\t\tif ( isset( $existing['comments'] ) ) {\r\n-\t\t\t\tunset( $existing['comments'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Date\r\n-\t\t\tif ( isset( $existing['date'] ) ) {\r\n-\t\t\t\tunset( $existing['date'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove Builder\r\n-\t\t\tif ( isset( $existing['builder_layout'] ) ) {\r\n-\t\t\t\tunset( $existing['builder_layout'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$columns['cb']            = '\u003Cinput type=\"checkbox\" \u002F>';\r\n-\t\t\t$columns['title']         = esc_html__( 'Order', 'learnpress' );\r\n-\t\t\t$columns['order_student'] = esc_html__( 'Student', 'learnpress' );\r\n-\t\t\t$columns['order_items']   = esc_html__( 'Purchased', 'learnpress' );\r\n-\t\t\t$columns['order_date']    = esc_html__( 'Date', 'learnpress' );\r\n-\t\t\t$columns['order_total']   = esc_html__( 'Total', 'learnpress' );\r\n-\t\t\t$columns['order_status']  = '\u003Cspan class=\"status_head tips\" data-tip=\"' . esc_attr__( 'Status', 'learnpress' ) . '\">' . esc_attr__( 'Status', 'learnpress' ) . '\u003C\u002Fspan>';\r\n-\r\n-\t\t\t$columns = array_merge( $columns, $existing );\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\tpublic function order_title( $title, $post_id ) {\r\n-\t\t\tif ( get_post_type( $post_id ) != LP_ORDER_CPT ) {\r\n-\t\t\t\treturn $title;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn learn_press_transaction_order_number( $post_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Render column data\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_content( $column, $post_id = 0 ) {\r\n-\t\t\tglobal $post;\r\n-\t\t\t$lp_order = learn_press_get_order( $post->ID );\r\n-\r\n-\t\t\tswitch ( $column ) {\r\n-\t\t\t\tcase 'order_student':\r\n-\t\t\t\t\t$user_ids = $lp_order->get_users();\r\n-\t\t\t\t\tif ( $user_ids ) {\r\n-\t\t\t\t\t\t$outputs = array();\r\n-\t\t\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t\t\tif ( get_user_by( 'id', $user_id ) ) {\r\n-\t\t\t\t\t\t\t\t$user      = learn_press_get_user( $user_id );\r\n-\t\t\t\t\t\t\t\t$outputs[] = sprintf(\r\n-\t\t\t\t\t\t\t\t\t'\u003Ca href=\"user-edit.php?user_id=%d\">%s (%s)\u003C\u002Fa>\u003Cspan>%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t\t\t\t\t$user->get_data( 'user_login' ),\r\n-\t\t\t\t\t\t\t\t\t$user->get_data( 'display_name' ),\r\n-\t\t\t\t\t\t\t\t\t$user->get_data( 'user_email' )\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\tif ( sizeof( $user_ids ) == 1 ) {\r\n-\t\t\t\t\t\t\t\t\t$outputs[] = $lp_order->get_customer_name();\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\techo join( ', ', $outputs );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\techo esc_html__( '(Guest)', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'order_status':\r\n-\t\t\t\t\t$lp_order_icons = LP_Order::get_icons_status();\r\n-\t\t\t\t\t$icon           = $lp_order_icons[ $lp_order->get_status() ] ?? '';\r\n-\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"lp-order-status %s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t$lp_order->get_status(),\r\n-\t\t\t\t\t\t$icon,\r\n-\t\t\t\t\t\tLP_Order::get_status_label( $lp_order->get_status() )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'order_date':\r\n-\t\t\t\t\t$t_time    = get_the_time( 'Y\u002Fm\u002Fd g:i:s a' );\r\n-\t\t\t\t\t$m_time    = $post->post_date;\r\n-\t\t\t\t\t$time      = get_post_time( 'G', true, $post );\r\n-\t\t\t\t\t$time_diff = current_time( 'U' ) - $time;\r\n-\r\n-\t\t\t\t\tif ( $time_diff > 0 && $time_diff \u003C DAY_IN_SECONDS ) {\r\n-\t\t\t\t\t\t$h_time = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time, current_time( 'U' ) ) );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$h_time = mysql2date( 'Y\u002Fm\u002Fd', $m_time );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\techo '\u003Cabbr title=\"' . esc_attr( $t_time ) . '\">' . esc_html( apply_filters( 'learn_press_order_column_time', $h_time, $lp_order ) ) . '\u003C\u002Fabbr>';\r\n-\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'order_items':\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Forder-items\u002Flayout', $lp_order );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'order_total':\r\n-\t\t\t\t\techo wp_kses_post( $lp_order->get_formatted_order_total() );\r\n-\t\t\t\t\t$method_title = $lp_order->get_payment_method_title();\r\n-\t\t\t\t\t$method_title = apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $lp_order );\r\n-\r\n-\t\t\t\t\tif ( ! empty( $method_title ) ) {\r\n-\t\t\t\t\t\t$method_title_html = sprintf(\r\n-\t\t\t\t\t\t\t__( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$method_title\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"payment-method-title\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $method_title_html ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register order post type\r\n-\t\t *\u002F\r\n-\t\tpublic function args_register_post_type(): array {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'labels'              => array(\r\n-\t\t\t\t\t'name'               => __( 'Orders', 'learnpress' ),\r\n-\t\t\t\t\t'menu_name'          => __( 'Orders', 'learnpress' ),\r\n-\t\t\t\t\t'singular_name'      => __( 'Order', 'learnpress' ),\r\n-\t\t\t\t\t'add_new_item'       => __( 'Add A New Order', 'learnpress' ),\r\n-\t\t\t\t\t'edit_item'          => __( 'Order Details', 'learnpress' ),\r\n-\t\t\t\t\t'all_items'          => __( 'Orders', 'learnpress' ),\r\n-\t\t\t\t\t'view_item'          => __( 'View Order', 'learnpress' ),\r\n-\t\t\t\t\t'add_new'            => __( 'Add New', 'learnpress' ),\r\n-\t\t\t\t\t'update_item'        => __( 'Update Order', 'learnpress' ),\r\n-\t\t\t\t\t'search_items'       => __( 'Search Orders', 'learnpress' ),\r\n-\t\t\t\t\t'not_found'          => __( 'No order found', 'learnpress' ),\r\n-\t\t\t\t\t'not_found_in_trash' => __( 'There was no order found in the trash', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'public'              => false,\r\n-\t\t\t\t'show_ui'             => true,\r\n-\t\t\t\t'show_in_nav_menus'   => false,\r\n-\t\t\t\t'show_in_admin_bar'   => false,\r\n-\t\t\t\t'publicly_queryable'  => false,\r\n-\t\t\t\t'show_in_menu'        => 'learn_press',\r\n-\t\t\t\t'map_meta_cap'        => true,\r\n-\t\t\t\t'capability_type'     => LP_ORDER_CPT,\r\n-\t\t\t\t'hierarchical'        => false,\r\n-\t\t\t\t'rewrite'             => array(\r\n-\t\t\t\t\t'slug'         => LP_ORDER_CPT,\r\n-\t\t\t\t\t'hierarchical' => true,\r\n-\t\t\t\t\t'with_front'   => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'supports'            => array(\r\n-\t\t\t\t\t'title',\r\n-\t\t\t\t\t'custom-fields',\r\n-\t\t\t\t),\r\n-\t\t\t\t'exclude_from_search' => true,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register new post status for order\r\n-\t\t *\r\n-\t\t * @Todo when rewrite API, will remove this function\r\n-\t\t * will be not use learn_press_get_register_order_statuses\r\n-\t\t *\u002F\r\n-\t\tpublic function register_post_statues() {\r\n-\t\t\t$statuses = learn_press_get_register_order_statuses();\r\n-\t\t\tforeach ( $statuses as $status => $args ) {\r\n-\t\t\t\tregister_post_status( $status, $args );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$_instance ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Before post deleted\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.4\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function before_delete( int $order_id ) {\r\n-\t\t\t$lp_order_db      = LP_Order_DB::getInstance();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tini_set( 'max_execution_time', 0 );\r\n-\t\t\t\t$order = learn_press_get_order( $order_id );\r\n-\t\t\t\tif ( ! $order ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$items = $order->get_all_items();\r\n-\t\t\t\tif ( empty( $items ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$order_item_ids = [];\r\n-\t\t\t\t$user_ids       = $order->get_users();\r\n-\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t\u002F\u002Fdelete_user_meta( $user_id, 'orders' );\r\n-\t\t\t\t\tforeach ( $items as $itemArr ) {\r\n-\t\t\t\t\t\t$order_item_ids[] = $itemArr['order_item_id'] ?? 0;\r\n-\t\t\t\t\t\t$item_type        = $itemArr['item_type'] ?? '';\r\n-\t\t\t\t\t\t$userItemModel    = UserItemModel::find_user_item(\r\n-\t\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t\t\t$itemArr['item_id'] ?? 0,\r\n-\t\t\t\t\t\t\t$item_type ?? '',\r\n-\t\t\t\t\t\t\t$order_id,\r\n-\t\t\t\t\t\t\tLP_ORDER_CPT\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $userItemModel ) {\r\n-\t\t\t\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\r\n-\t\t\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userItemModel );\r\n-\t\t\t\t\t\t\t\t$userCourseModel->delete();\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$userItemModel->delete();\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fbefore-delete', $order, $user_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Delete lp_order_item, lp_order_itemmeta\r\n-\t\t\t\t$filter_delete                 = new LP_Order_Filter();\r\n-\t\t\t\t$filter_delete->order_item_ids = $order_item_ids;\r\n-\t\t\t\t$lp_order_db->delete_order_item( $filter_delete );\r\n-\t\t\t\t$lp_order_db->delete_order_itemmeta( $filter_delete );\r\n-\t\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() . '>' . __FILE__ );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Action delete Order\r\n-\t\t *\r\n-\t\t * @param int $order_id\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function deleted_post( int $order_id ) {\r\n-\t\t}\r\n-\r\n-\t\tpublic function meta_boxes() {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'order_details' => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Order Details', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => function ( $post ) {\r\n-\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Fdetails.php', array( 'order' => new LP_Order( $post ) ) );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'context'  => 'normal',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t\t'submitdiv'     => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Order Actions', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => function ( $post ) {\r\n-\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Factions.php', array( 'order' => new LP_Order( $post ) ) );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'context'  => 'side',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t\t'order_exports' => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Order Exports', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => function ( $post ) {\r\n-\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Fexports-invoice.php', array( 'order' => new LP_Order( $post ) ) );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'context'  => 'side',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Download order CSV file and delete it after download\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function download_order_csv_file() {\r\n-\t\t\t$export_id = LP_Request::get_param( 'export_id', '', 'key' );\r\n-\t\t\tif ( ! isset( $_GET['lp_download_order'] ) || empty( $export_id ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$file = ExportOrderCSVAjax::get_export_csv_path( $export_id );\r\n-\t\t\tif ( ! file_exists( $file ) ) {\r\n-\t\t\t\twp_die( __( 'File not found', 'learnpress' ) );\r\n-\t\t\t} elseif ( ! realpath( $file ) ) {\r\n-\t\t\t\twp_die( __( 'Invalid file path', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filename = basename( $file );\r\n-\r\n-\t\t\theader( 'Content-Type: text\u002Fcsv; charset=UTF-8' );\r\n-\t\t\theader( 'Content-Disposition: attachment; filename=\"' . $filename . '\"' );\r\n-\t\t\theader( 'Content-Length: ' . filesize( $file ) );\r\n-\r\n-\t\t\treadfile( $file );\r\n-\t\t\tunlink( $file );\r\n-\t\t\texit;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F end LP_Order_Post_Type\r\n-\r\n-\t$order_post_type = LP_Order_Post_Type::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * @class LP_Order_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.2\n+ *\u002F\n+\n+use LearnPress\\Ajax\\ExportOrderCSVAjax;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\OrderPostFilter;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+\n+if ( ! class_exists( 'LP_Order_Post_Type' ) ) {\n+\tfinal class LP_Order_Post_Type extends LP_Abstract_Post_Type {\n+\t\t\u002F**\n+\t\t * Type of post\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_ORDER_CPT;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Order_Post_Type constructor.\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\tadd_action( 'admin_init', array( $this, 'register_post_statues' ) );\n+\t\t\t\u002F\u002Fadd_action( 'pre_get_posts', array( $this, 'pre_get_posts' ) );\n+\t\t\tadd_action( 'posts_pre_query', array( $this, 'posts_pre_query' ), 999, 2 );\n+\t\t\t\u002F\u002Fadd_action( 'admin_init', array( $this, 'remove_box' ) );\n+\t\t\t\u002F\u002Fadd_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );\n+\t\t\tadd_filter( 'wp_untrash_post_status', array( $this, 'restore_status_order' ), 11, 3 );\n+\t\t\tadd_filter( 'admin_footer', array( $this, 'admin_footer' ) );\n+\t\t\t\u002F\u002Fadd_filter( 'views_edit-lp_order', array( $this, 'filter_views' ) );\n+\t\t\t\u002F\u002F Download order CSV file\n+\t\t\t$this->download_order_csv_file();\n+\n+\t\t\t\u002F\u002F Override title of LP Order on Admin\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\t$can_override_title_order = false;\n+\t\t\t\t$current_url              = LP_Helper::getUrlCurrent();\n+\t\t\t\t$post_id                  = LP_Helper::sanitize_params_submitted( $_GET['post'] ?? '' );\n+\t\t\t\tif ( ! empty( $post_id ) ) {\n+\t\t\t\t\t$post = get_post( $post_id );\n+\t\t\t\t\tif ( $post && $post->post_type == LP_ORDER_CPT ) {\n+\t\t\t\t\t\t$can_override_title_order = true;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( strpos( $current_url, 'post_type=lp_order' ) !== false ) {\n+\t\t\t\t\t$can_override_title_order = true;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $can_override_title_order ) {\n+\t\t\t\t\tadd_filter( 'the_title', array( $this, 'order_title' ), 5, 2 );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Unset value in 'mine' key in views of LP Orders.\n+\t\t * The 'mine' is present in some case when 'user_posts_count'\n+\t\t * is not the same with total posts then wp add it to the views\n+\t\t * of WP Posts List table.\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function filter_views( $views ) {\n+\t\t\tif ( isset( $views['mine'] ) ) {\n+\t\t\t\tunset( $views['mine'] );\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Filter to hide orders are created by one order for multiple users.\n+\t\t *\n+\t\t * @param string $where\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function filter_orders( string $where ): string {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $where;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( isset( $_REQUEST['parent'] ) ) {\n+\t\t\t\t$where .= sprintf( ' AND post_parent = %d ', absint( $_REQUEST['parent'] ) );\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F $where .= $wpdb->prepare( \" AND (post_parent = 0 OR {$wpdb->posts}.ID IN( SELECT post_parent FROM {$wpdb->posts} X WHERE X.post_parent \u003C> 0 AND X.post_type = %s) )\", LP_ORDER_CPT );\n+\t\t\t\t$where .= ' AND post_parent = 0 ';\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\tpublic function enqueue_scripts() {\n+\t\t\tif ( get_post_type() != $this->_post_type ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\twp_enqueue_script( 'user-suggest' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Restore user course item when the order is stored (usually from trash).\n+\t\t *\n+\t\t * @param string $new_status\n+\t\t * @param int $post_id\n+\t\t * @param string $previous_status\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function restore_status_order( string $new_status, int $post_id, string $previous_status ): string {\n+\t\t\tif ( LP_ORDER_CPT != get_post_type( $post_id ) ) {\n+\t\t\t\treturn $new_status;\n+\t\t\t}\n+\n+\t\t\treturn $previous_status;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save order post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t * @param WP_Post $post\n+\t\t * @param bool $is_update\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.6\n+\t\t *\u002F\n+\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\ttry {\n+\t\t\t\t$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );\n+\t\t\t\tif ( isset( $backtrace[6]['class'] ) && $backtrace[6]['class'] === LP_Order_CURD::class ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( wp_is_post_revision( $post_id ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For create LP Order manual on Backend\n+\t\t\t\t$order = learn_press_get_order( $post_id );\n+\t\t\t\tif ( ! $order ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$created_via = $order->get_created_via();\n+\t\t\t\tif ( empty( $created_via ) ) {\n+\t\t\t\t\t$created_via = LP_ORDER_CREATED_VIA_MANUAL;\n+\t\t\t\t\t$order->set_created_via( $created_via );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( isset( $_POST['order-customer'] ) && $order->is_manual() ) {\n+\t\t\t\t\t$user_id = LP_Request::get_param( 'order-customer' );\n+\t\t\t\t\t$order->set_user_id( $user_id );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( isset( $_POST['order-date'] ) ) {\n+\t\t\t\t\t$order_date = LP_Request::get_param( 'order-date' );\n+\t\t\t\t\t$order_hour = LP_Request::get_param( 'order-hour', '00' );\n+\t\t\t\t\t$order_min  = LP_Request::get_param( 'order-minute', '00' );\n+\t\t\t\t\t$order->set_order_date( $order_date . ' ' . $order_hour . ':' . $order_min . ':00' );\n+\t\t\t\t}\n+\n+\t\t\t\t$status = LP_Request::get_param( 'order-status' );\n+\t\t\t\tif ( ! empty( $status ) ) {\n+\t\t\t\t\t$order->update_status( $status );\n+\t\t\t\t} elseif ( $post->post_status === 'auto-draft' ) {\n+\t\t\t\t\t$order->update_status( 'pending' );\n+\t\t\t\t}\n+\n+\t\t\t\t$order->save();\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ':' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove unused boxes\n+\t\t *\u002F\n+\t\tpublic function remove_box() {\n+\t\t\tremove_post_type_support( LP_ORDER_CPT, 'title' );\n+\t\t\tremove_post_type_support( LP_ORDER_CPT, 'editor' );\n+\t\t}\n+\n+\t\tpublic function admin_footer() {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003Cscript type=\"text\u002Fjavascript\">\n+\t\t\t\tjQuery(function ($) {\n+\t\t\t\t\t$('#post-search-input').prop('placeholder',\n+\t\t\t\t\t\t'\u003C?php esc_attr_e( 'Order number, course name, etc.', 'learnpress' ); ?>').css('width', 300)\n+\t\t\t\t})\n+\t\t\t\u003C\u002Fscript>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Hook to filter LP orders by some conditions.\n+\t\t *\n+\t\t * @param string $where\n+\t\t *\n+\t\t * @return string\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\t\u002F*public function posts_where_paged( $where ) {\n+\t\t\t\u002F\u002F Code temporary, when release about 1 week, will remove it.\n+\t\t\t$lp_filter_post              = new LP_Post_Type_Filter();\n+\t\t\t$lp_filter_post->post_type   = LP_ORDER_CPT;\n+\t\t\t$lp_filter_post->post_status = [ 'lp-trash' ];\n+\t\t\t$orders_trash                = LP_Post_DB::getInstance()->get_posts( $lp_filter_post );\n+\t\t\tif ( $orders_trash ) {\n+\t\t\t\tforeach ( $orders_trash as $order_trash ) {\n+\t\t\t\t\t$order = learn_press_get_order( $order_trash->ID );\n+\t\t\t\t\tif ( $order ) {\n+\t\t\t\t\t\t$order->update_status( 'trash' );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F Change status course from lp_trash to trash.\n+\n+\t\t\t\u002F\u002F End code temporary\n+\t\t\tglobal $wpdb, $wp_query;\n+\t\t\t$lp_db = LP_Database::getInstance();\n+\t\t\tif ( is_admin() && $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\t$where  = ' ';\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_type = %s\", LP_ORDER_CPT );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Search by keyword\n+\t\t\tif ( ! empty( $wp_query->get( 's' ) ) ) {\n+\t\t\t\t$s = $wp_query->get( 's' );\n+\n+\t\t\t\t\u002F\u002F Check search LP Order ID with format #000[ID] or 000[ID]\n+\t\t\t\t$pattern = '\u002F^#\\d+$\u002F';\n+\t\t\t\tif ( preg_match( $pattern, $s ) ) {\n+\t\t\t\t\t$s = str_replace( '#', '', $s );\n+\t\t\t\t}\n+\n+\t\t\t\t$pattern2 = '#^0+.*\\d+$#';\n+\t\t\t\tif ( preg_match( $pattern2, $s ) ) {\n+\t\t\t\t\t$s = (int) $s;\n+\t\t\t\t}\n+\n+\t\t\t\t$s = trim( $s );\n+\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.ID = %d\", $s );\n+\t\t\t\t$where .= $wpdb->prepare( ' OR lpori.order_item_name like %s', '%' . $wpdb->esc_like( $s ) . '%' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Search by author id\n+\t\t\tif ( ! empty( $wp_query->get( 'author' ) ) ) {\n+\t\t\t\t$user_id = absint( $wp_query->get( 'author' ) );\n+\t\t\t\t\u002F\u002F$where   .= $wpdb->prepare( ' AND uu.ID like %s ', $user_id );\n+\t\t\t\t$where .= \" AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id ) \";\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $wp_query->get( 'm' ) ) ) {\n+\t\t\t\t$month  = $wp_query->get( 'm' );\n+\t\t\t\t$where .= \" AND YEAR({$lp_db->tb_posts}.post_date)=\" . substr( $month, 0, 4 );\n+\t\t\t\tif ( strlen( $month ) > 5 ) {\n+\t\t\t\t\t$where .= \" AND MONTH({$lp_db->tb_posts}.post_date)=\" . substr( $month, 4, 2 );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Filter by order status\n+\t\t\tif ( ! empty( $wp_query->get( 'post_status' ) ) ) {\n+\t\t\t\t$status = $wp_query->get( 'post_status' );\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_status = %s\", $status );\n+\t\t\t} else {\n+\t\t\t\t$where .= $wpdb->prepare( \" AND {$lp_db->tb_posts}.post_status NOT IN (%s, %s, %s)\", LP_ORDER_TRASH_DB, LP_ORDER_TRASH, 'auto-draft' );\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F      public function posts_orderby( $orderby ) {\n+\t\t\u002F\u002F          global $wpdb;\n+\t\t\u002F\u002F\n+\t\t\u002F\u002F          $order = $this->get_order_sort();\n+\t\t\u002F\u002F\n+\t\t\u002F\u002F          switch ( $this->get_order_by() ) {\n+\t\t\u002F\u002F              case 'title':\n+\t\t\u002F\u002F                  $orderby = \"{$wpdb->posts}.ID {$order}\";\n+\t\t\u002F\u002F                  break;\n+\t\t\u002F\u002F              \u002F*case 'student':\n+\t\t\u002F\u002F                  $orderby = \"uu.user_login {$order}\";\n+\t\t\u002F\u002F                  break;*\u002F\n+\t\t\u002F\u002F              case 'date':\n+\t\t\u002F\u002F                  $orderby = \"{$wpdb->posts}.post_date {$order}\";\n+\t\t\u002F\u002F                  break;\n+\t\t\u002F\u002F              case 'order_total':\n+\t\t\u002F\u002F                  $orderby = \"CAST(pm2.meta_value AS UNSIGNED) {$order}\";\n+\t\t\u002F\u002F                  break;\n+\t\t\u002F\u002F          }\n+\t\t\u002F\u002F\n+\t\t\u002F\u002F          return $orderby;\n+\t\t\u002F\u002F      }\n+\n+\t\t\u002F*public function posts_join_paged( $join ) {\n+\t\t\tglobal $wpdb, $wp_query;\n+\t\t\t$lp_db = LP_Database::getInstance();\n+\n+\t\t\t\u002F\u002F Search by keyword\n+\t\t\tif ( ! empty( $wp_query->get( 's' ) ) ) {\n+\t\t\t\t$join .= \" INNER JOIN {$lp_db->tb_lp_order_items} lpori ON {$wpdb->posts}.ID = lpori.order_id\";\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $wp_query->get( 'author' ) ) ) {\n+\t\t\t\t$author_id = $wp_query->get( 'author' );\n+\t\t\t\t$join     .= \" INNER JOIN {$lp_db->tb_postmeta} pm1 ON {$wpdb->posts}.ID = pm1.post_id AND pm1.meta_key = '_user_id'\";\n+\t\t\t\t$join     .= \" LEFT JOIN {$lp_db->tb_users} uu ON uu.ID = $author_id\";\n+\t\t\t}\n+\n+\t\t\tif ( $this->get_order_by() === 'order_total' ) {\n+\t\t\t\t$join .= \" INNER JOIN {$lp_db->tb_postmeta} pm2 ON {$wpdb->posts}.ID = pm2.post_id AND pm2.meta_key = '_order_total'\";\n+\t\t\t}\n+\n+\t\t\treturn $join;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Make our custom columns can be sortable\n+\t\t *\n+\t\t * @param $columns\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function sortable_columns( $columns ) {\n+\t\t\t$columns['order_date']  = 'date';\n+\t\t\t$columns['order_total'] = 'order_total';\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\tpublic function update_status() {\n+\t\t\t$order_id = ! empty( $_REQUEST['order_id'] ) ? absint( $_REQUEST['order_id'] ) : 0;\n+\t\t\t$status   = ! empty( $_REQUEST['status'] ) ? LP_Helper::sanitize_params_submitted( $_REQUEST['status'] ) : 'Pending';\n+\n+\t\t\tlearn_press_update_order_status( $order_id, $status );\n+\n+\t\t\twp_send_json(\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => $status,\n+\t\t\t\t\t'class'  => sanitize_title( $status ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Custom row's actions.\n+\t\t *\n+\t\t * @param array $actions\n+\t\t * @param WP_Post $post\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 2.1.7\n+\t\t * @deprecated 4.2.6.4\n+\t\t *\u002F\n+\t\t\u002F*public function row_actions( $actions, $post ) {\n+\t\t\tif ( ! empty( $actions['inline hide-if-no-js'] ) ) {\n+\t\t\t\tunset( $actions['inline hide-if-no-js'] );\n+\t\t\t}\n+\t\t\tif ( ! empty( $actions['edit'] ) ) {\n+\t\t\t\t$actions['edit'] = preg_replace( '\u002F>(.*?)\u003C\\\u002Fa>\u002F', '>' . __( 'View Order', 'learnpress' ) . '\u003C\u002Fa>', $actions['edit'] );\n+\t\t\t}\n+\n+\t\t\treturn $actions;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * re-order the orders by newest\n+\t\t *\n+\t\t * @param WP_Query $wp_query\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @reason comment this function - because default sort by id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function pre_get_posts( $wp_query ) {\n+\t\t\tif ( ! is_admin() ) {\n+\t\t\t\treturn $wp_query;\n+\t\t\t}\n+\n+\t\t\t$post_type = $wp_query->get( 'post_type' );\n+\n+\t\t\tif ( empty( $post_type ) || $post_type != LP_ORDER_CPT ) {\n+\t\t\t\treturn $wp_query;\n+\t\t\t}\n+\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\t$wp_query->set( 'orderby', 'date' );\n+\t\t\t\t$wp_query->set( 'order', 'desc' );\n+\t\t\t}\n+\n+\t\t\t$post_status = $wp_query->get( 'post_status' );\n+\t\t\tif ( empty( $post_status ) || $post_status == 'all' ) {\n+\t\t\t\t$wp_query->set(\n+\t\t\t\t\t'post_status',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\tLP_ORDER_COMPLETED_DB,\n+\t\t\t\t\t\tLP_ORDER_PROCESSING_DB,\n+\t\t\t\t\t\tLP_ORDER_PENDING_DB,\n+\t\t\t\t\t\tLP_ORDER_FAILED_DB,\n+\t\t\t\t\t\tLP_ORDER_CANCELLED_DB,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Search by author id\n+\t\t\t\u002F*if ( ! empty( $wp_query->get( 'author' ) ) ) {\n+\t\t\t\t$user_id = absint( $wp_query->get( 'author' ) );\n+\t\t\t\t\u002F\u002F$where   .= $wpdb->prepare( ' AND uu.ID like %s ', $user_id );\n+\t\t\t\t$where .= \" AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id ) \";\n+\t\t\t}*\u002F\n+\n+\t\t\t$post_author = $wp_query->get( 'author' );\n+\t\t\tif ( ! empty( $post_author ) ) {\n+\t\t\t\t$user_id    = absint( $post_author );\n+\t\t\t\t$meta_query = array(\n+\t\t\t\t\t\u002F\u002F                  'relation' => 'OR',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'key'     => '_user_id',\n+\t\t\t\t\t\t'value'   => '%\"' . $user_id . '\"%',\n+\t\t\t\t\t\t'compare' => 'LIKE',\n+\t\t\t\t\t),\n+\t\t\t\t\t\u002F\u002F                  array(\n+\t\t\t\t\t\u002F\u002F                      'key'     => '_user_id',\n+\t\t\t\t\t\u002F\u002F                      'value'   => $user_id,\n+\t\t\t\t\t\u002F\u002F                      'compare' => '=',\n+\t\t\t\t\t\u002F\u002F                  ),\n+\t\t\t\t);\n+\t\t\t\t$wp_query->set( 'meta_query', $meta_query );\n+\t\t\t}\n+\n+\t\t\treturn $wp_query;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query lp orders in admin via Post DB\n+\t\t *\n+\t\t * @param array $posts\n+\t\t * @param WP_Query $wp_query\n+\t\t *\n+\t\t * @return array|WP_Query\n+\t\t *\u002F\n+\t\tpublic function posts_pre_query( $posts, $wp_query ) {\n+\t\t\ttry {\n+\t\t\t\tif ( ! is_admin() ) {\n+\t\t\t\t\treturn $posts;\n+\t\t\t\t}\n+\n+\t\t\t\t$post_type = $wp_query->get( 'post_type' );\n+\n+\t\t\t\tif ( empty( $post_type ) || $post_type != LP_ORDER_CPT ) {\n+\t\t\t\t\treturn $posts;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Convert params from WP_Query to PostFilter\n+\t\t\t\t$posts_per_page = get_user_option( \"edit_{$post_type}_per_page\", get_current_user_id() );\n+\t\t\t\tif ( empty( $posts_per_page ) ) {\n+\t\t\t\t\t$posts_per_page = 20;\n+\t\t\t\t}\n+\n+\t\t\t\t$paged         = max( 1, get_query_var( 'paged' ) );\n+\t\t\t\t$user_of_order = $wp_query->get( 'author' );\n+\t\t\t\t$status        = $wp_query->get( 'post_status' );\n+\t\t\t\t$key           = $wp_query->get( 's' );\n+\t\t\t\t$month         = $wp_query->get( 'm' );\n+\n+\t\t\t\t$filter = new OrderPostFilter();\n+\t\t\t\t$param  = [\n+\t\t\t\t\t'paged'          => $paged,\n+\t\t\t\t\t'posts_per_page' => $posts_per_page,\n+\t\t\t\t\t'author'         => $user_of_order,\n+\t\t\t\t\t'post_status'    => $status,\n+\t\t\t\t\t's'              => $key,\n+\t\t\t\t\t'm'              => $month,\n+\t\t\t\t];\n+\t\t\t\tLP_Order::handle_params_query_list_orders( $filter, $param );\n+\n+\t\t\t\t\u002F\u002F Get lp orders\n+\t\t\t\t$post_db    = PostDB::getInstance();\n+\t\t\t\t$total_rows = 0;\n+\t\t\t\t$lp_orders  = $post_db->get_posts( $filter, $total_rows );\n+\n+\t\t\t\t$wp_query->post_count  = $total_rows;\n+\t\t\t\t$wp_query->found_posts = $total_rows;\n+\t\t\t\t$posts                 = $lp_orders;\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tLP_Debug::error_log( $e );\n+\t\t\t}\n+\n+\t\t\treturn $posts;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function columns_head( $existing ) {\n+\n+\t\t\t\u002F\u002F Remove Checkbox - adding it back below\n+\t\t\tif ( isset( $existing['cb'] ) ) {\n+\t\t\t\t$check = $existing['cb'];\n+\t\t\t\tunset( $existing['cb'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Title - adding it back below\n+\t\t\tif ( isset( $existing['title'] ) ) {\n+\t\t\t\tunset( $existing['title'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Format\n+\t\t\tif ( isset( $existing['format'] ) ) {\n+\t\t\t\tunset( $existing['format'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Author\n+\t\t\tif ( isset( $existing['author'] ) ) {\n+\t\t\t\tunset( $existing['author'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Comments\n+\t\t\tif ( isset( $existing['comments'] ) ) {\n+\t\t\t\tunset( $existing['comments'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Date\n+\t\t\tif ( isset( $existing['date'] ) ) {\n+\t\t\t\tunset( $existing['date'] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove Builder\n+\t\t\tif ( isset( $existing['builder_layout'] ) ) {\n+\t\t\t\tunset( $existing['builder_layout'] );\n+\t\t\t}\n+\n+\t\t\t$columns['cb']            = '\u003Cinput type=\"checkbox\" \u002F>';\n+\t\t\t$columns['title']         = esc_html__( 'Order', 'learnpress' );\n+\t\t\t$columns['order_student'] = esc_html__( 'Student', 'learnpress' );\n+\t\t\t$columns['order_items']   = esc_html__( 'Purchased', 'learnpress' );\n+\t\t\t$columns['order_date']    = esc_html__( 'Date', 'learnpress' );\n+\t\t\t$columns['order_total']   = esc_html__( 'Total', 'learnpress' );\n+\t\t\t$columns['order_status']  = '\u003Cspan class=\"status_head tips\" data-tip=\"' . esc_attr__( 'Status', 'learnpress' ) . '\">' . esc_attr__( 'Status', 'learnpress' ) . '\u003C\u002Fspan>';\n+\n+\t\t\t$columns = array_merge( $columns, $existing );\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\tpublic function order_title( $title, $post_id ) {\n+\t\t\tif ( get_post_type( $post_id ) != LP_ORDER_CPT ) {\n+\t\t\t\treturn $title;\n+\t\t\t}\n+\n+\t\t\treturn learn_press_transaction_order_number( $post_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Render column data\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function columns_content( $column, $post_id = 0 ) {\n+\t\t\tglobal $post;\n+\t\t\t$lp_order = learn_press_get_order( $post->ID );\n+\n+\t\t\tswitch ( $column ) {\n+\t\t\t\tcase 'order_student':\n+\t\t\t\t\t$user_ids = $lp_order->get_users();\n+\t\t\t\t\tif ( $user_ids ) {\n+\t\t\t\t\t\t$outputs = array();\n+\t\t\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t\t\tif ( get_user_by( 'id', $user_id ) ) {\n+\t\t\t\t\t\t\t\t$user      = learn_press_get_user( $user_id );\n+\t\t\t\t\t\t\t\t$outputs[] = sprintf(\n+\t\t\t\t\t\t\t\t\t'\u003Ca href=\"user-edit.php?user_id=%d\">%s (%s)\u003C\u002Fa>\u003Cspan>%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t\t\t\t\t$user->get_data( 'user_login' ),\n+\t\t\t\t\t\t\t\t\t$user->get_data( 'display_name' ),\n+\t\t\t\t\t\t\t\t\t$user->get_data( 'user_email' )\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\tif ( sizeof( $user_ids ) == 1 ) {\n+\t\t\t\t\t\t\t\t\t$outputs[] = $lp_order->get_customer_name();\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\techo join( ', ', $outputs );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\techo esc_html__( '(Guest)', 'learnpress' );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'order_status':\n+\t\t\t\t\t$lp_order_icons = LP_Order::get_icons_status();\n+\t\t\t\t\t$icon           = $lp_order_icons[ $lp_order->get_status() ] ?? '';\n+\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"lp-order-status %s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t$lp_order->get_status(),\n+\t\t\t\t\t\t$icon,\n+\t\t\t\t\t\tLP_Order::get_status_label( $lp_order->get_status() )\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'order_date':\n+\t\t\t\t\t$t_time    = get_the_time( 'Y\u002Fm\u002Fd g:i:s a' );\n+\t\t\t\t\t$m_time    = $post->post_date;\n+\t\t\t\t\t$time      = get_post_time( 'G', true, $post );\n+\t\t\t\t\t$time_diff = current_time( 'U' ) - $time;\n+\n+\t\t\t\t\tif ( $time_diff > 0 && $time_diff \u003C DAY_IN_SECONDS ) {\n+\t\t\t\t\t\t$h_time = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time, current_time( 'U' ) ) );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$h_time = mysql2date( 'Y\u002Fm\u002Fd', $m_time );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\techo '\u003Cabbr title=\"' . esc_attr( $t_time ) . '\">' . esc_html( apply_filters( 'learn_press_order_column_time', $h_time, $lp_order ) ) . '\u003C\u002Fabbr>';\n+\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'order_items':\n+\t\t\t\t\tdo_action( 'learn-press\u002Fadmin\u002Forder-items\u002Flayout', $lp_order );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'order_total':\n+\t\t\t\t\techo wp_kses_post( $lp_order->get_formatted_order_total() );\n+\t\t\t\t\t$method_title = $lp_order->get_payment_method_title();\n+\t\t\t\t\t$method_title = apply_filters( 'learn-press\u002Forder-payment-method-title', $method_title, $lp_order );\n+\n+\t\t\t\t\tif ( ! empty( $method_title ) ) {\n+\t\t\t\t\t\t$method_title_html = sprintf(\n+\t\t\t\t\t\t\t__( 'Pay via \u003Cstrong>%s\u003C\u002Fstrong>', 'learnpress' ),\n+\t\t\t\t\t\t\t$method_title\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Cdiv class=\"payment-method-title\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $method_title_html ); ?>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register order post type\n+\t\t *\u002F\n+\t\tpublic function args_register_post_type(): array {\n+\t\t\treturn array(\n+\t\t\t\t'labels'              => array(\n+\t\t\t\t\t'name'               => __( 'Orders', 'learnpress' ),\n+\t\t\t\t\t'menu_name'          => __( 'Orders', 'learnpress' ),\n+\t\t\t\t\t'singular_name'      => __( 'Order', 'learnpress' ),\n+\t\t\t\t\t'add_new_item'       => __( 'Add A New Order', 'learnpress' ),\n+\t\t\t\t\t'edit_item'          => __( 'Order Details', 'learnpress' ),\n+\t\t\t\t\t'all_items'          => __( 'Orders', 'learnpress' ),\n+\t\t\t\t\t'view_item'          => __( 'View Order', 'learnpress' ),\n+\t\t\t\t\t'add_new'            => __( 'Add New', 'learnpress' ),\n+\t\t\t\t\t'update_item'        => __( 'Update Order', 'learnpress' ),\n+\t\t\t\t\t'search_items'       => __( 'Search Orders', 'learnpress' ),\n+\t\t\t\t\t'not_found'          => __( 'No order found', 'learnpress' ),\n+\t\t\t\t\t'not_found_in_trash' => __( 'There was no order found in the trash', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'public'              => false,\n+\t\t\t\t'show_ui'             => true,\n+\t\t\t\t'show_in_nav_menus'   => false,\n+\t\t\t\t'show_in_admin_bar'   => false,\n+\t\t\t\t'publicly_queryable'  => false,\n+\t\t\t\t'show_in_menu'        => 'learn_press',\n+\t\t\t\t'map_meta_cap'        => true,\n+\t\t\t\t'capability_type'     => LP_ORDER_CPT,\n+\t\t\t\t'hierarchical'        => false,\n+\t\t\t\t'rewrite'             => array(\n+\t\t\t\t\t'slug'         => LP_ORDER_CPT,\n+\t\t\t\t\t'hierarchical' => true,\n+\t\t\t\t\t'with_front'   => true,\n+\t\t\t\t),\n+\t\t\t\t'supports'            => array(\n+\t\t\t\t\t'title',\n+\t\t\t\t\t'custom-fields',\n+\t\t\t\t),\n+\t\t\t\t'exclude_from_search' => true,\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register new post status for order\n+\t\t *\n+\t\t * @Todo when rewrite API, will remove this function\n+\t\t * will be not use learn_press_get_register_order_statuses\n+\t\t *\u002F\n+\t\tpublic function register_post_statues() {\n+\t\t\t$statuses = learn_press_get_register_order_statuses();\n+\t\t\tforeach ( $statuses as $status => $args ) {\n+\t\t\t\tregister_post_status( $status, $args );\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$_instance ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Before post deleted\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.4\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function before_delete( int $order_id ) {\n+\t\t\t$lp_order_db      = LP_Order_DB::getInstance();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\tini_set( 'max_execution_time', 0 );\n+\t\t\t\t$order = learn_press_get_order( $order_id );\n+\t\t\t\tif ( ! $order ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$items = $order->get_all_items();\n+\t\t\t\tif ( empty( $items ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$order_item_ids = [];\n+\t\t\t\t$user_ids       = $order->get_users();\n+\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t\u002F\u002Fdelete_user_meta( $user_id, 'orders' );\n+\t\t\t\t\tforeach ( $items as $itemArr ) {\n+\t\t\t\t\t\t$order_item_ids[] = $itemArr['order_item_id'] ?? 0;\n+\t\t\t\t\t\t$item_type        = $itemArr['item_type'] ?? '';\n+\t\t\t\t\t\t$userItemModel    = UserItemModel::find_user_item(\n+\t\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t\t\t$itemArr['item_id'] ?? 0,\n+\t\t\t\t\t\t\t$item_type ?? '',\n+\t\t\t\t\t\t\t$order_id,\n+\t\t\t\t\t\t\tLP_ORDER_CPT\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $userItemModel ) {\n+\t\t\t\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\n+\t\t\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userItemModel );\n+\t\t\t\t\t\t\t\t$userCourseModel->delete();\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$userItemModel->delete();\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fbefore-delete', $order, $user_id );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Delete lp_order_item, lp_order_itemmeta\n+\t\t\t\t$filter_delete                 = new LP_Order_Filter();\n+\t\t\t\t$filter_delete->order_item_ids = $order_item_ids;\n+\t\t\t\t$lp_order_db->delete_order_item( $filter_delete );\n+\t\t\t\t$lp_order_db->delete_order_itemmeta( $filter_delete );\n+\t\t\t\t\u002F\u002F End\n+\n+\t\t\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() . '>' . __FILE__ );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Action delete Order\n+\t\t *\n+\t\t * @param int $order_id\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function deleted_post( int $order_id ) {\n+\t\t}\n+\n+\t\tpublic function meta_boxes() {\n+\t\t\treturn array(\n+\t\t\t\t'order_details' => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Order Details', 'learnpress' ),\n+\t\t\t\t\t'callback' => function ( $post ) {\n+\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Fdetails.php', array( 'order' => new LP_Order( $post ) ) );\n+\t\t\t\t\t},\n+\t\t\t\t\t'context'  => 'normal',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t\t'submitdiv'     => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Order Actions', 'learnpress' ),\n+\t\t\t\t\t'callback' => function ( $post ) {\n+\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Factions.php', array( 'order' => new LP_Order( $post ) ) );\n+\t\t\t\t\t},\n+\t\t\t\t\t'context'  => 'side',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t\t'order_exports' => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Order Exports', 'learnpress' ),\n+\t\t\t\t\t'callback' => function ( $post ) {\n+\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Forder\u002Fexports-invoice.php', array( 'order' => new LP_Order( $post ) ) );\n+\t\t\t\t\t},\n+\t\t\t\t\t'context'  => 'side',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Download order CSV file and delete it after download\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function download_order_csv_file() {\n+\t\t\t$export_id = LP_Request::get_param( 'export_id', '', 'key' );\n+\t\t\tif ( ! isset( $_GET['lp_download_order'] ) || empty( $export_id ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$file = ExportOrderCSVAjax::get_export_csv_path( $export_id );\n+\t\t\tif ( ! file_exists( $file ) ) {\n+\t\t\t\twp_die( __( 'File not found', 'learnpress' ) );\n+\t\t\t} elseif ( ! realpath( $file ) ) {\n+\t\t\t\twp_die( __( 'Invalid file path', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$filename = basename( $file );\n+\n+\t\t\theader( 'Content-Type: text\u002Fcsv; charset=UTF-8' );\n+\t\t\theader( 'Content-Disposition: attachment; filename=\"' . $filename . '\"' );\n+\t\t\theader( 'Content-Length: ' . filesize( $file ) );\n+\n+\t\t\treadfile( $file );\n+\t\t\tunlink( $file );\n+\t\t\texit;\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F end LP_Order_Post_Type\n+\n+\t$order_post_type = LP_Order_Post_Type::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fquestion.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fquestion.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fquestion.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fquestion.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,523 +1,523 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Question_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_Post_Type' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_Post_Type\r\n-\t *\u002F\r\n-\tclass LP_Question_Post_Type extends LP_Abstract_Post_Type {\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_QUESTION_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Post_Type constructor.\r\n-\t\t *\r\n-\t\t * @param $post_type\r\n-\t\t * @param mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\tadd_action( 'wp_loaded', array( $this, 'wp_loaded' ) );\r\n-\t\t\tadd_action( 'admin_head', array( $this, 'init' ) );\r\n-\t\t\tadd_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts', array( $this, 'data_question_editor' ) );\r\n-\r\n-\t\t\tadd_filter( 'views_edit-' . LP_QUESTION_CPT, array( $this, 'views_pages' ), 11 );\r\n-\t\t\tadd_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );\r\n-\r\n-\t\t\t\u002F\u002F $this->add_map_method( 'before_delete', 'before_delete_question' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add question types support answer options\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t *\u002F\r\n-\t\tpublic function wp_loaded() {\r\n-\t\t\t$default_support_options = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fdefault-question-types-support-answer-options',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'true_or_false',\r\n-\t\t\t\t\t'single_choice',\r\n-\t\t\t\t\t'multi_choice',\r\n-\t\t\t\t\t'fill_in_blanks',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $default_support_options as $type ) {\r\n-\t\t\t\tLP_Global::add_object_feature( 'question.' . $type, 'answer-options', 'yes' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add filters to lesson view.\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.1\r\n-\t\t * @version 1.0.1\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function views_pages( array $views ): array {\r\n-\t\t\t$lp_question_db = LP_Question_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$filter = new LP_Question_Filter();\r\n-\t\t\t\t\u002F*if ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\t\t\t$filter->where[] = $lp_question_db->wpdb->prepare( 'AND post_author = %d', get_current_user_id() );\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\t$count_unassigned_questions = $lp_question_db->get_total_question_unassigned( $filter );\r\n-\r\n-\t\t\t\tif ( $count_unassigned_questions > 0 ) {\r\n-\t\t\t\t\t$views['unassigned'] = sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_QUESTION_CPT . '&unassigned=yes' ),\r\n-\t\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\r\n-\t\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\r\n-\t\t\t\t\t\t$count_unassigned_questions\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load data for question editor.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function data_question_editor() {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\tif ( LP_QUESTION_CPT !== get_post_type() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = LP_Question::get_question( $post->ID );\r\n-\t\t\t$type     = $question->get_type();\r\n-\t\t\t$answers  = ( $question->get_data( 'answer_options' ) ? array_values( $question->get_data( 'answer_options' ) ) : array() );\r\n-\r\n-\t\t\tif ( empty( $answers ) ) {\r\n-\t\t\t\t$answers = array(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'order'              => 1,\r\n-\t\t\t\t\t\t'question_answer_id' => 0,\r\n-\t\t\t\t\t\t'is_true'            => 'yes',\r\n-\t\t\t\t\t\t'title'              => esc_html__( 'Correct', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'order'              => 2,\r\n-\t\t\t\t\t\t'question_answer_id' => 0,\r\n-\t\t\t\t\t\t'is_true'            => '',\r\n-\t\t\t\t\t\t'title'              => esc_html__( 'Incorrect', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$type = 'true_or_false';\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_localize_script(\r\n-\t\t\t\t'learn-press-admin-question-editor',\r\n-\t\t\t\t'lp_question_editor',\r\n-\t\t\t\tapply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fquestion-editor\u002Flocalize-script',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'root' => array(\r\n-\t\t\t\t\t\t\t'id'                   => $post->ID,\r\n-\t\t\t\t\t\t\t'auto_draft'           => get_post_status( $post->ID ) == 'auto-draft',\r\n-\t\t\t\t\t\t\t'open'                 => false,\r\n-\t\t\t\t\t\t\t'title'                => get_the_title( $post->ID ),\r\n-\t\t\t\t\t\t\t'type'                 => array(\r\n-\t\t\t\t\t\t\t\t'key'   => $type,\r\n-\t\t\t\t\t\t\t\t'label' => learn_press_question_types()[ $type ],\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'answers'              => apply_filters( 'learn-press\u002Fquestion-editor\u002Fquestion-answers-data', $answers, $post->ID, 0 ),\r\n-\t\t\t\t\t\t\t'ajax'                 => admin_url( '' ),\r\n-\t\t\t\t\t\t\t'action'               => 'admin_question_editor',\r\n-\t\t\t\t\t\t\t'nonce'                => wp_create_nonce( 'learnpress_admin_question_editor' ),\r\n-\t\t\t\t\t\t\t'questionTypes'        => LP_Question::get_types(),\r\n-\t\t\t\t\t\t\t'supportAnswerOptions' => learn_press_get_question_support_answer_options(),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'i18n' => apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fquestion-editor\u002Fi18n',\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'new_option_label'      => esc_html__( 'New Option', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'confirm_remove_blanks' => esc_html__( 'Are you sure to remove all the blanks?', 'learnpress' ),\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register question post type.\r\n-\t\t *\u002F\r\n-\t\tpublic function args_register_post_type(): array {\r\n-\t\t\tregister_taxonomy(\r\n-\t\t\t\t'question_tag',\r\n-\t\t\t\tarray( LP_QUESTION_CPT ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'labels'            => array(\r\n-\t\t\t\t\t\t'name'          => esc_html__( 'Question Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'menu_name'     => esc_html__( 'Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'singular_name' => esc_html__( 'Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_new_item'  => esc_html__( 'Add A New Tag', 'learnpress' ),\r\n-\t\t\t\t\t\t'all_items'     => esc_html__( 'All Tags', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'public'            => true,\r\n-\t\t\t\t\t'hierarchical'      => false,\r\n-\t\t\t\t\t'show_ui'           => true,\r\n-\t\t\t\t\t'show_admin_column' => 'true',\r\n-\t\t\t\t\t'show_in_nav_menus' => true,\r\n-\t\t\t\t\t'rewrite'           => array(\r\n-\t\t\t\t\t\t'slug'         => 'question-tag',\r\n-\t\t\t\t\t\t'hierarchical' => false,\r\n-\t\t\t\t\t\t'with_front'   => false,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tadd_post_type_support( 'question', 'comments' );\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'labels'              => array(\r\n-\t\t\t\t\t'name'               => esc_html__( 'Question Bank', 'learnpress' ),\r\n-\t\t\t\t\t'menu_name'          => esc_html__( 'Question Bank', 'learnpress' ),\r\n-\t\t\t\t\t'singular_name'      => esc_html__( 'Question', 'learnpress' ),\r\n-\t\t\t\t\t'all_items'          => esc_html__( 'Questions', 'learnpress' ),\r\n-\t\t\t\t\t'view_item'          => esc_html__( 'View Question', 'learnpress' ),\r\n-\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Question', 'learnpress' ),\r\n-\t\t\t\t\t'add_new'            => esc_html__( 'Add New', 'learnpress' ),\r\n-\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Question', 'learnpress' ),\r\n-\t\t\t\t\t'update_item'        => esc_html__( 'Update Question', 'learnpress' ),\r\n-\t\t\t\t\t'search_items'       => esc_html__( 'Search Questions', 'learnpress' ),\r\n-\t\t\t\t\t'not_found'          => esc_html__( 'No questions found', 'learnpress' ),\r\n-\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no questions found in the trash', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'public'              => true,\r\n-\t\t\t\t'publicly_queryable'  => true,\r\n-\t\t\t\t'show_ui'             => true,\r\n-\t\t\t\t'has_archive'         => false,\r\n-\t\t\t\t'capability_type'     => LP_LESSON_CPT,\r\n-\t\t\t\t'map_meta_cap'        => true,\r\n-\t\t\t\t'show_in_menu'        => 'learn_press',\r\n-\t\t\t\t'show_in_admin_bar'   => true,\r\n-\t\t\t\t'show_in_nav_menus'   => true,\r\n-\t\t\t\t'show_in_rest'        => learn_press_user_maybe_is_a_teacher(),\r\n-\t\t\t\t'supports'            => array( 'title', 'editor', 'revisions' ),\r\n-\t\t\t\t'hierarchical'        => false,\r\n-\t\t\t\t'rewrite'             => array(\r\n-\t\t\t\t\t'slug'         => 'questions',\r\n-\t\t\t\t\t'hierarchical' => true,\r\n-\t\t\t\t\t'with_front'   => false,\r\n-\t\t\t\t),\r\n-\t\t\t\t'exclude_from_search' => true,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Init question.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function init() {\r\n-\t\t\t$hidden = get_user_meta( get_current_user_id(), 'manageedit-lp_questioncolumnshidden', true );\r\n-\r\n-\t\t\tif ( ! is_array( $hidden ) && empty( $hidden ) ) {\r\n-\t\t\t\tupdate_user_meta( get_current_user_id(), 'manageedit-lp_questioncolumnshidden', array( 'taxonomy-question-tag' ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove question from quiz items.\r\n-\t\t *\r\n-\t\t * @param  $question_id\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function before_delete_question( int $question_id = 0 ) {\r\n-\t\t\t$curd = new LP_Question_CURD();\r\n-\r\n-\t\t\t$curd->delete( $question_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle when save post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t * @param WP_Post|null $post\r\n-\t\t * @param bool $is_update\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @since 4.2.7.6\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\t\u002F\u002F Clear cache get question by id\r\n-\t\t\t$lpCache = new LP_Cache();\r\n-\t\t\t$lpCache->clear( \"questionPostModel\u002Ffind\u002F{$post_id}\" );\r\n-\t\t\t$lpCache->clear( \"questionModel\u002Ffind\u002F{$post_id}\" );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Admin editor\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function admin_editor() {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\t$question_id       = $post->ID;\r\n-\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\t\tif ( ! $questionPostModel instanceof QuestionPostModel ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-question\u002Flayout', $questionPostModel );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add columns to admin manage question page\r\n-\t\t *\r\n-\t\t * @param array $columns\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_head( $columns ) {\r\n-\t\t\t$pos         = array_search( 'title', array_keys( $columns ) );\r\n-\t\t\t$new_columns = array(\r\n-\t\t\t\t'instructor' => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\tLP_QUIZ_CPT  => esc_html__( 'Quiz', 'learnpress' ),\r\n-\t\t\t\t'type'       => esc_html__( 'Type', 'learnpress' ),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( false !== $pos && ! array_key_exists( LP_QUIZ_CPT, $columns ) ) {\r\n-\t\t\t\t$columns = array_merge(\r\n-\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\r\n-\t\t\t\t\t$new_columns,\r\n-\t\t\t\t\tarray_slice( $columns, $pos + 1 )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = wp_get_current_user();\r\n-\r\n-\t\t\tif ( in_array( LP_TEACHER_ROLE, $user->roles ) ) {\r\n-\t\t\t\tunset( $columns['instructor'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $columns['author'] ) ) {\r\n-\t\t\t\tunset( $columns['author'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Displaying the content of extra columns\r\n-\t\t *\r\n-\t\t * @param $name\r\n-\t\t * @param $post_id\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_content( $name, $post_id = 0 ) {\r\n-\t\t\tswitch ( $name ) {\r\n-\t\t\t\tcase 'instructor':\r\n-\t\t\t\t\t$this->column_instructor( $post_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'lp_quiz':\r\n-\t\t\t\t\t$curd = new LP_Question_CURD();\r\n-\t\t\t\t\t\u002F\u002F get quiz\r\n-\t\t\t\t\t$quiz = $curd->get_quiz( $post_id );\r\n-\r\n-\t\t\t\t\tif ( $quiz ) {\r\n-\t\t\t\t\t\techo '\u003Cdiv>\u003Ca href=\"' . esc_url_raw( add_query_arg( array( 'filter_quiz' => $quiz->ID ) ) ) . '\">' . get_the_title( $quiz->ID ) . '\u003C\u002Fa>';\r\n-\t\t\t\t\t\techo '\u003Cdiv class=\"row-actions\">';\r\n-\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( sprintf( 'post.php?post=%d&action=edit', $quiz->ID ) ), esc_html__( 'Edit', 'learnpress' ) );\r\n-\t\t\t\t\t\techo '&nbsp;|&nbsp;';\r\n-\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_the_permalink( $quiz->ID ), esc_html__( 'View', 'learnpress' ) );\r\n-\t\t\t\t\t\techo '\u003C\u002Fdiv>\u003C\u002Fdiv>';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'type':\r\n-\t\t\t\t\techo learn_press_question_name_from_slug( get_post_meta( $post_id, '_lp_type', true ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Posts_join_paged.\r\n-\t\t *\r\n-\t\t * @param $join\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_join_paged( $join ): string {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $join;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$quiz_id = $this->_filter_quiz();\r\n-\t\t\tif ( $quiz_id || $this->get_order_by() == 'quiz-name' ) {\r\n-\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON {$wpdb->posts}.ID = qq.question_id\";\r\n-\t\t\t\t$join .= \" LEFT JOIN {$wpdb->posts} q ON q.ID = qq.quiz_id\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $join;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $where\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_where_paged( $where ) {\r\n-\t\t\tstatic $posts_where_paged = false;\r\n-\r\n-\t\t\tif ( $posts_where_paged || ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $where;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$quiz_id = $this->_filter_quiz();\r\n-\r\n-\t\t\tif ( $quiz_id ) {\r\n-\t\t\t\t$where .= $wpdb->prepare( ' AND (q.ID = %d)', $quiz_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\r\n-\t\t\t\tglobal $wpdb;\r\n-\t\t\t\t$where .= \" AND {$wpdb->posts}.ID NOT IN(\r\n-                        SELECT qq.question_id\r\n-                        FROM {$wpdb->learnpress_quiz_questions} qq\r\n-                    )\r\n-                \";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $order_by_statement\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_orderby( $order_by_statement ): string {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $order_by_statement;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$orderby = $this->get_order_by();\r\n-\t\t\t$order   = $this->get_order_sort();\r\n-\r\n-\t\t\tif ( $orderby && $order ) {\r\n-\t\t\t\tswitch ( $orderby ) {\r\n-\t\t\t\t\tcase 'quiz-name':\r\n-\t\t\t\t\t\t$order_by_statement = \"q.post_title {$order}\";\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'date':\r\n-\t\t\t\t\t\t$order_by_statement = \"post_date {$order}\";\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $order_by_statement;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $columns\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function sortable_columns( $columns ) {\r\n-\t\t\t$columns['author']      = 'author';\r\n-\t\t\t$columns[ LP_QUIZ_CPT ] = 'quiz-name';\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|int\r\n-\t\t *\u002F\r\n-\t\tprivate function _filter_quiz() {\r\n-\t\t\treturn LP_Request::get_int( 'filter_quiz' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Quiz assigned view.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function question_assigned() {\r\n-\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fquiz\u002Fassigned.php' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function meta_boxes() {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'question_assigned' => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => function ( $post ) {\r\n-\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fquiz\u002Fassigned.php' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'context'  => 'side',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t\t'question-editor'   => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Questions Options', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => array( $this, 'admin_editor' ),\r\n-\t\t\t\t\t'context'  => 'normal',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Question_Post_Type|null\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$_instance ) {\r\n-\t\t\t\t\u002F*\r\n-\t\t\t\t$args            = array(\r\n-\t\t\t\t\t'default_meta' => array(\r\n-\t\t\t\t\t\t'_lp_mark' => 1,\r\n-\t\t\t\t\t\t'_lp_type' => 'true_or_false',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t);*\u002F\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$question_post_type = LP_Question_Post_Type::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Question_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_Post_Type' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_Post_Type\n+\t *\u002F\n+\tclass LP_Question_Post_Type extends LP_Abstract_Post_Type {\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_QUESTION_CPT;\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Post_Type constructor.\n+\t\t *\n+\t\t * @param $post_type\n+\t\t * @param mixed\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\tadd_action( 'wp_loaded', array( $this, 'wp_loaded' ) );\n+\t\t\tadd_action( 'admin_head', array( $this, 'init' ) );\n+\t\t\tadd_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts', array( $this, 'data_question_editor' ) );\n+\n+\t\t\tadd_filter( 'views_edit-' . LP_QUESTION_CPT, array( $this, 'views_pages' ), 11 );\n+\t\t\tadd_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );\n+\n+\t\t\t\u002F\u002F $this->add_map_method( 'before_delete', 'before_delete_question' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add question types support answer options\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t *\u002F\n+\t\tpublic function wp_loaded() {\n+\t\t\t$default_support_options = apply_filters(\n+\t\t\t\t'learn-press\u002Fdefault-question-types-support-answer-options',\n+\t\t\t\tarray(\n+\t\t\t\t\t'true_or_false',\n+\t\t\t\t\t'single_choice',\n+\t\t\t\t\t'multi_choice',\n+\t\t\t\t\t'fill_in_blanks',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tforeach ( $default_support_options as $type ) {\n+\t\t\t\tLP_Global::add_object_feature( 'question.' . $type, 'answer-options', 'yes' );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add filters to lesson view.\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.1\n+\t\t * @version 1.0.1\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function views_pages( array $views ): array {\n+\t\t\t$lp_question_db = LP_Question_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t$filter = new LP_Question_Filter();\n+\t\t\t\t\u002F*if ( ! current_user_can( 'administrator' ) ) {\n+\t\t\t\t\t$filter->where[] = $lp_question_db->wpdb->prepare( 'AND post_author = %d', get_current_user_id() );\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\t$count_unassigned_questions = $lp_question_db->get_total_question_unassigned( $filter );\n+\n+\t\t\t\tif ( $count_unassigned_questions > 0 ) {\n+\t\t\t\t\t$views['unassigned'] = sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_QUESTION_CPT . '&unassigned=yes' ),\n+\t\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\n+\t\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\n+\t\t\t\t\t\t$count_unassigned_questions\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load data for question editor.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function data_question_editor() {\n+\t\t\tglobal $post;\n+\n+\t\t\tif ( LP_QUESTION_CPT !== get_post_type() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$question = LP_Question::get_question( $post->ID );\n+\t\t\t$type     = $question->get_type();\n+\t\t\t$answers  = ( $question->get_data( 'answer_options' ) ? array_values( $question->get_data( 'answer_options' ) ) : array() );\n+\n+\t\t\tif ( empty( $answers ) ) {\n+\t\t\t\t$answers = array(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'order'              => 1,\n+\t\t\t\t\t\t'question_answer_id' => 0,\n+\t\t\t\t\t\t'is_true'            => 'yes',\n+\t\t\t\t\t\t'title'              => esc_html__( 'Correct', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'order'              => 2,\n+\t\t\t\t\t\t'question_answer_id' => 0,\n+\t\t\t\t\t\t'is_true'            => '',\n+\t\t\t\t\t\t'title'              => esc_html__( 'Incorrect', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t);\n+\n+\t\t\t\t$type = 'true_or_false';\n+\t\t\t}\n+\n+\t\t\twp_localize_script(\n+\t\t\t\t'learn-press-admin-question-editor',\n+\t\t\t\t'lp_question_editor',\n+\t\t\t\tapply_filters(\n+\t\t\t\t\t'learn-press\u002Fquestion-editor\u002Flocalize-script',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'root' => array(\n+\t\t\t\t\t\t\t'id'                   => $post->ID,\n+\t\t\t\t\t\t\t'auto_draft'           => get_post_status( $post->ID ) == 'auto-draft',\n+\t\t\t\t\t\t\t'open'                 => false,\n+\t\t\t\t\t\t\t'title'                => get_the_title( $post->ID ),\n+\t\t\t\t\t\t\t'type'                 => array(\n+\t\t\t\t\t\t\t\t'key'   => $type,\n+\t\t\t\t\t\t\t\t'label' => learn_press_question_types()[ $type ],\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'answers'              => apply_filters( 'learn-press\u002Fquestion-editor\u002Fquestion-answers-data', $answers, $post->ID, 0 ),\n+\t\t\t\t\t\t\t'ajax'                 => admin_url( '' ),\n+\t\t\t\t\t\t\t'action'               => 'admin_question_editor',\n+\t\t\t\t\t\t\t'nonce'                => wp_create_nonce( 'learnpress_admin_question_editor' ),\n+\t\t\t\t\t\t\t'questionTypes'        => LP_Question::get_types(),\n+\t\t\t\t\t\t\t'supportAnswerOptions' => learn_press_get_question_support_answer_options(),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'i18n' => apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fquestion-editor\u002Fi18n',\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'new_option_label'      => esc_html__( 'New Option', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'confirm_remove_blanks' => esc_html__( 'Are you sure to remove all the blanks?', 'learnpress' ),\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register question post type.\n+\t\t *\u002F\n+\t\tpublic function args_register_post_type(): array {\n+\t\t\tregister_taxonomy(\n+\t\t\t\t'question_tag',\n+\t\t\t\tarray( LP_QUESTION_CPT ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'labels'            => array(\n+\t\t\t\t\t\t'name'          => esc_html__( 'Question Tag', 'learnpress' ),\n+\t\t\t\t\t\t'menu_name'     => esc_html__( 'Tag', 'learnpress' ),\n+\t\t\t\t\t\t'singular_name' => esc_html__( 'Tag', 'learnpress' ),\n+\t\t\t\t\t\t'add_new_item'  => esc_html__( 'Add A New Tag', 'learnpress' ),\n+\t\t\t\t\t\t'all_items'     => esc_html__( 'All Tags', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'public'            => true,\n+\t\t\t\t\t'hierarchical'      => false,\n+\t\t\t\t\t'show_ui'           => true,\n+\t\t\t\t\t'show_admin_column' => 'true',\n+\t\t\t\t\t'show_in_nav_menus' => true,\n+\t\t\t\t\t'rewrite'           => array(\n+\t\t\t\t\t\t'slug'         => 'question-tag',\n+\t\t\t\t\t\t'hierarchical' => false,\n+\t\t\t\t\t\t'with_front'   => false,\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tadd_post_type_support( 'question', 'comments' );\n+\n+\t\t\treturn array(\n+\t\t\t\t'labels'              => array(\n+\t\t\t\t\t'name'               => esc_html__( 'Question Bank', 'learnpress' ),\n+\t\t\t\t\t'menu_name'          => esc_html__( 'Question Bank', 'learnpress' ),\n+\t\t\t\t\t'singular_name'      => esc_html__( 'Question', 'learnpress' ),\n+\t\t\t\t\t'all_items'          => esc_html__( 'Questions', 'learnpress' ),\n+\t\t\t\t\t'view_item'          => esc_html__( 'View Question', 'learnpress' ),\n+\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Question', 'learnpress' ),\n+\t\t\t\t\t'add_new'            => esc_html__( 'Add New', 'learnpress' ),\n+\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Question', 'learnpress' ),\n+\t\t\t\t\t'update_item'        => esc_html__( 'Update Question', 'learnpress' ),\n+\t\t\t\t\t'search_items'       => esc_html__( 'Search Questions', 'learnpress' ),\n+\t\t\t\t\t'not_found'          => esc_html__( 'No questions found', 'learnpress' ),\n+\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no questions found in the trash', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'public'              => true,\n+\t\t\t\t'publicly_queryable'  => true,\n+\t\t\t\t'show_ui'             => true,\n+\t\t\t\t'has_archive'         => false,\n+\t\t\t\t'capability_type'     => LP_LESSON_CPT,\n+\t\t\t\t'map_meta_cap'        => true,\n+\t\t\t\t'show_in_menu'        => 'learn_press',\n+\t\t\t\t'show_in_admin_bar'   => true,\n+\t\t\t\t'show_in_nav_menus'   => true,\n+\t\t\t\t'show_in_rest'        => learn_press_user_maybe_is_a_teacher(),\n+\t\t\t\t'supports'            => array( 'title', 'editor', 'revisions' ),\n+\t\t\t\t'hierarchical'        => false,\n+\t\t\t\t'rewrite'             => array(\n+\t\t\t\t\t'slug'         => 'questions',\n+\t\t\t\t\t'hierarchical' => true,\n+\t\t\t\t\t'with_front'   => false,\n+\t\t\t\t),\n+\t\t\t\t'exclude_from_search' => true,\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Init question.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function init() {\n+\t\t\t$hidden = get_user_meta( get_current_user_id(), 'manageedit-lp_questioncolumnshidden', true );\n+\n+\t\t\tif ( ! is_array( $hidden ) && empty( $hidden ) ) {\n+\t\t\t\tupdate_user_meta( get_current_user_id(), 'manageedit-lp_questioncolumnshidden', array( 'taxonomy-question-tag' ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove question from quiz items.\n+\t\t *\n+\t\t * @param  $question_id\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function before_delete_question( int $question_id = 0 ) {\n+\t\t\t$curd = new LP_Question_CURD();\n+\n+\t\t\t$curd->delete( $question_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle when save post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t * @param WP_Post|null $post\n+\t\t * @param bool $is_update\n+\t\t *\n+\t\t * @return void\n+\t\t * @since 4.2.7.6\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function save_post( int $post_id, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\t\u002F\u002F Clear cache get question by id\n+\t\t\t$lpCache = new LP_Cache();\n+\t\t\t$lpCache->clear( \"questionPostModel\u002Ffind\u002F{$post_id}\" );\n+\t\t\t$lpCache->clear( \"questionModel\u002Ffind\u002F{$post_id}\" );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Admin editor\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function admin_editor() {\n+\t\t\tglobal $post;\n+\n+\t\t\t$question_id       = $post->ID;\n+\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\t\tif ( ! $questionPostModel instanceof QuestionPostModel ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-question\u002Flayout', $questionPostModel );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add columns to admin manage question page\n+\t\t *\n+\t\t * @param array $columns\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function columns_head( $columns ) {\n+\t\t\t$pos         = array_search( 'title', array_keys( $columns ) );\n+\t\t\t$new_columns = array(\n+\t\t\t\t'instructor' => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\tLP_QUIZ_CPT  => esc_html__( 'Quiz', 'learnpress' ),\n+\t\t\t\t'type'       => esc_html__( 'Type', 'learnpress' ),\n+\t\t\t);\n+\n+\t\t\tif ( false !== $pos && ! array_key_exists( LP_QUIZ_CPT, $columns ) ) {\n+\t\t\t\t$columns = array_merge(\n+\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\n+\t\t\t\t\t$new_columns,\n+\t\t\t\t\tarray_slice( $columns, $pos + 1 )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$user = wp_get_current_user();\n+\n+\t\t\tif ( in_array( LP_TEACHER_ROLE, $user->roles ) ) {\n+\t\t\t\tunset( $columns['instructor'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $columns['author'] ) ) {\n+\t\t\t\tunset( $columns['author'] );\n+\t\t\t}\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Displaying the content of extra columns\n+\t\t *\n+\t\t * @param $name\n+\t\t * @param $post_id\n+\t\t *\u002F\n+\t\tpublic function columns_content( $name, $post_id = 0 ) {\n+\t\t\tswitch ( $name ) {\n+\t\t\t\tcase 'instructor':\n+\t\t\t\t\t$this->column_instructor( $post_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'lp_quiz':\n+\t\t\t\t\t$curd = new LP_Question_CURD();\n+\t\t\t\t\t\u002F\u002F get quiz\n+\t\t\t\t\t$quiz = $curd->get_quiz( $post_id );\n+\n+\t\t\t\t\tif ( $quiz ) {\n+\t\t\t\t\t\techo '\u003Cdiv>\u003Ca href=\"' . esc_url_raw( add_query_arg( array( 'filter_quiz' => $quiz->ID ) ) ) . '\">' . get_the_title( $quiz->ID ) . '\u003C\u002Fa>';\n+\t\t\t\t\t\techo '\u003Cdiv class=\"row-actions\">';\n+\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( sprintf( 'post.php?post=%d&action=edit', $quiz->ID ) ), esc_html__( 'Edit', 'learnpress' ) );\n+\t\t\t\t\t\techo '&nbsp;|&nbsp;';\n+\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_the_permalink( $quiz->ID ), esc_html__( 'View', 'learnpress' ) );\n+\t\t\t\t\t\techo '\u003C\u002Fdiv>\u003C\u002Fdiv>';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tesc_html_e( 'Not assigned yet', 'learnpress' );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'type':\n+\t\t\t\t\techo learn_press_question_name_from_slug( get_post_meta( $post_id, '_lp_type', true ) );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Posts_join_paged.\n+\t\t *\n+\t\t * @param $join\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_join_paged( $join ): string {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $join;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$quiz_id = $this->_filter_quiz();\n+\t\t\tif ( $quiz_id || $this->get_order_by() == 'quiz-name' ) {\n+\t\t\t\t$join .= \" LEFT JOIN {$wpdb->prefix}learnpress_quiz_questions qq ON {$wpdb->posts}.ID = qq.question_id\";\n+\t\t\t\t$join .= \" LEFT JOIN {$wpdb->posts} q ON q.ID = qq.quiz_id\";\n+\t\t\t}\n+\n+\t\t\treturn $join;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $where\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function posts_where_paged( $where ) {\n+\t\t\tstatic $posts_where_paged = false;\n+\n+\t\t\tif ( $posts_where_paged || ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $where;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\t\t\t$quiz_id = $this->_filter_quiz();\n+\n+\t\t\tif ( $quiz_id ) {\n+\t\t\t\t$where .= $wpdb->prepare( ' AND (q.ID = %d)', $quiz_id );\n+\t\t\t}\n+\n+\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\n+\t\t\t\tglobal $wpdb;\n+\t\t\t\t$where .= \" AND {$wpdb->posts}.ID NOT IN(\n+                        SELECT qq.question_id\n+                        FROM {$wpdb->learnpress_quiz_questions} qq\n+                    )\n+                \";\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $order_by_statement\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_orderby( $order_by_statement ): string {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $order_by_statement;\n+\t\t\t}\n+\n+\t\t\t$orderby = $this->get_order_by();\n+\t\t\t$order   = $this->get_order_sort();\n+\n+\t\t\tif ( $orderby && $order ) {\n+\t\t\t\tswitch ( $orderby ) {\n+\t\t\t\t\tcase 'quiz-name':\n+\t\t\t\t\t\t$order_by_statement = \"q.post_title {$order}\";\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'date':\n+\t\t\t\t\t\t$order_by_statement = \"post_date {$order}\";\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $order_by_statement;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $columns\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function sortable_columns( $columns ) {\n+\t\t\t$columns['author']      = 'author';\n+\t\t\t$columns[ LP_QUIZ_CPT ] = 'quiz-name';\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool|int\n+\t\t *\u002F\n+\t\tprivate function _filter_quiz() {\n+\t\t\treturn LP_Request::get_int( 'filter_quiz' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Quiz assigned view.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function question_assigned() {\n+\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fquiz\u002Fassigned.php' );\n+\t\t}\n+\n+\t\tpublic function meta_boxes() {\n+\t\t\treturn array(\n+\t\t\t\t'question_assigned' => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\n+\t\t\t\t\t'callback' => function ( $post ) {\n+\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fquiz\u002Fassigned.php' );\n+\t\t\t\t\t},\n+\t\t\t\t\t'context'  => 'side',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t\t'question-editor'   => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Questions Options', 'learnpress' ),\n+\t\t\t\t\t'callback' => array( $this, 'admin_editor' ),\n+\t\t\t\t\t'context'  => 'normal',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Question_Post_Type|null\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$_instance ) {\n+\t\t\t\t\u002F*\n+\t\t\t\t$args            = array(\n+\t\t\t\t\t'default_meta' => array(\n+\t\t\t\t\t\t'_lp_mark' => 1,\n+\t\t\t\t\t\t'_lp_type' => 'true_or_false',\n+\t\t\t\t\t),\n+\t\t\t\t);*\u002F\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\t}\n+\n+\t$question_post_type = LP_Question_Post_Type::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fquiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fquiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fcustom-post-types\u002Fquiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fcustom-post-types\u002Fquiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,498 +1,498 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz_Post_Type\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Quiz_Post_Type\r\n-\t *\u002F\r\n-\tfinal class LP_Quiz_Post_Type extends LP_Abstract_Post_Type {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic static $metaboxes = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_QUIZ_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Quiz_Post_Type constructor.\r\n-\t\t *\r\n-\t\t * @param $post_type\r\n-\t\t * @param mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\r\n-\t\t\t\u002F\u002F$this->add_map_method( 'before_delete', 'before_delete_quiz' );\r\n-\r\n-\t\t\tadd_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts', array( $this, 'data_quiz_editor' ) );\r\n-\r\n-\t\t\tadd_filter( 'views_edit-' . LP_QUIZ_CPT, array( $this, 'views_pages' ), 10 );\r\n-\t\t\tadd_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add filters to lesson view.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param array $views\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function views_pages( array $views ): array {\r\n-\t\t\t$count_unassigned_quiz = LP_Course_DB::getInstance()->get_total_item_unassigned( LP_QUIZ_CPT );\r\n-\r\n-\t\t\tif ( $count_unassigned_quiz > 0 ) {\r\n-\t\t\t\t$views['unassigned'] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_QUIZ_CPT . '&unassigned=yes' ),\r\n-\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\r\n-\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\r\n-\t\t\t\t\t$count_unassigned_quiz\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $views;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Register quiz post type.\r\n-\t\t *\u002F\r\n-\t\tpublic function args_register_post_type(): array {\r\n-\t\t\t$args = apply_filters(\r\n-\t\t\t\t'lp_quiz_post_type_args',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'labels'              => array(\r\n-\t\t\t\t\t\t'name'               => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t\t'menu_name'          => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t\t'singular_name'      => esc_html__( 'Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'all_items'          => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t\t'view_item'          => esc_html__( 'View Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'add_new'            => esc_html__( 'New Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'update_item'        => esc_html__( 'Update Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\t'search_items'       => esc_html__( 'Search Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t\t'not_found'          => sprintf( __( 'You haven\\'t had any quizzes yet. Click \u003Ca href=\"%s\">Add new\u003C\u002Fa> to start', 'learnpress' ), admin_url( 'post-new.php?post_type=lp_quiz' ) ),\r\n-\t\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no quiz found in the trash', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'public'              => true,\r\n-\t\t\t\t\t'publicly_queryable'  => true,\r\n-\t\t\t\t\t'show_ui'             => true,\r\n-\t\t\t\t\t'has_archive'         => false,\r\n-\t\t\t\t\t'capability_type'     => LP_LESSON_CPT,\r\n-\t\t\t\t\t'map_meta_cap'        => true,\r\n-\t\t\t\t\t'show_in_menu'        => 'learn_press',\r\n-\t\t\t\t\t'show_in_rest'        => true,\r\n-\t\t\t\t\t'show_in_admin_bar'   => true,\r\n-\t\t\t\t\t'show_in_nav_menus'   => true,\r\n-\t\t\t\t\t'supports'            => array(\r\n-\t\t\t\t\t\t'title',\r\n-\t\t\t\t\t\t'editor',\r\n-\t\t\t\t\t\t'revisions',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'hierarchical'        => true,\r\n-\t\t\t\t\t'rewrite'             => array(\r\n-\t\t\t\t\t\t'slug'         => 'quizzes',\r\n-\t\t\t\t\t\t'hierarchical' => true,\r\n-\t\t\t\t\t\t'with_front'   => false,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'exclude_from_search' => true,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load data for quiz editor.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function data_quiz_editor() {\r\n-\t\t\tif ( LP_QUIZ_CPT !== get_post_type() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\t$quiz = LP_Quiz::get_quiz( $post->ID );\r\n-\r\n-\t\t\t$user_id                   = get_current_user_id();\r\n-\t\t\t$default_new_question_type = get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) ? get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) : 'true_or_false';\r\n-\r\n-\t\t\t$hidden_questions          = get_post_meta( $post->ID, '_lp_hidden_questions', true );\r\n-\t\t\t$hidden_questions_settings = get_post_meta( $post->ID, '_hidden_questions_settings', true );\r\n-\r\n-\t\t\twp_localize_script(\r\n-\t\t\t\t'learn-press-admin-quiz-editor',\r\n-\t\t\t\t'lp_quiz_editor',\r\n-\t\t\t\tapply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fadmin-localize-quiz-editor',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'root'          => array(\r\n-\t\t\t\t\t\t\t'quiz_id'     => $post->ID,\r\n-\t\t\t\t\t\t\t'ajax'        => admin_url( '' ),\r\n-\t\t\t\t\t\t\t'action'      => 'admin_quiz_editor',\r\n-\t\t\t\t\t\t\t'nonce'       => wp_create_nonce( 'learnpress_admin_quiz_editor' ),\r\n-\t\t\t\t\t\t\t'types'       => LP_Question::get_types(),\r\n-\t\t\t\t\t\t\t'default_new' => $default_new_question_type,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'chooseItems'   => array(\r\n-\t\t\t\t\t\t\t'open'       => false,\r\n-\t\t\t\t\t\t\t'addedItems' => array(),\r\n-\t\t\t\t\t\t\t'items'      => array(),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'i18n'          => apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fquiz-editor\u002Fi18n',\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'option'                 => esc_html__( 'Option', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'unique'                 => learn_press_uniqid(),\r\n-\t\t\t\t\t\t\t\t'back'                   => esc_html__( 'Back', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'selected_items'         => esc_html__( 'Selected items', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'new_option'             => esc_html__( 'New Option', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'confirm_trash_question' => esc_html__( 'Do you want to move the \"{{QUESTION_NAME}}\" question to the trash?', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'question_labels'        => array(\r\n-\t\t\t\t\t\t\t\t\t'singular' => esc_html__( 'Question', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t'plural'   => esc_html__( 'Questions', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t'confirm_remove_blanks'  => esc_html__( 'Are you sure to remove all the blanks?', 'learnpress' ),\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'listQuestions' => array(\r\n-\t\t\t\t\t\t\t'questions'                 => $quiz->quiz_editor_get_questions(),\r\n-\t\t\t\t\t\t\t'hidden_questions'          => ! empty( $hidden_questions ) ? $hidden_questions : array(),\r\n-\t\t\t\t\t\t\t'hidden_questions_settings' => $hidden_questions_settings ? $hidden_questions_settings : array(),\r\n-\t\t\t\t\t\t\t'disableUpdateList'         => false,\r\n-\t\t\t\t\t\t\t'supportAnswerOptions'      => learn_press_get_question_support_answer_options(),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Delete all questions assign to quiz.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $post_id\r\n-\t\t *\u002F\r\n-\t\tpublic function before_delete_quiz( $post_id ) {\r\n-\t\t\tif ( get_post_type( $post_id ) !== LP_QUIZ_CPT ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$curd = new LP_Quiz_CURD();\r\n-\t\t\t\u002F\u002F remove question from course items\r\n-\t\t\t$curd->delete( $post_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Admin editor\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function admin_editor() {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\t$quiz_id       = $post->ID;\r\n-\t\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\r\n-\t\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-quiz\u002Flayout', $quizPostModel );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add columns to admin manage quiz page\r\n-\t\t *\r\n-\t\t * @param  array $columns\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_head( $columns ) {\r\n-\t\t\t$pos = array_search( 'title', array_keys( $columns ) );\r\n-\r\n-\t\t\tif ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {\r\n-\t\t\t\t$columns = array_merge(\r\n-\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'instructor'      => esc_html__( 'Author', 'learnpress' ),\r\n-\t\t\t\t\t\tLP_COURSE_CPT     => esc_html__( 'Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'num_of_question' => esc_html__( 'Questions', 'learnpress' ),\r\n-\t\t\t\t\t\t'duration'        => esc_html__( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray_slice( $columns, $pos + 1 )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tunset( $columns['taxonomy-lesson-tag'] );\r\n-\t\t\t$user = wp_get_current_user();\r\n-\r\n-\t\t\tif ( in_array( 'lp_teacher', $user->roles ) ) {\r\n-\t\t\t\tunset( $columns['instructor'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $columns['author'] ) ) {\r\n-\t\t\t\tunset( $columns['author'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Display content for custom column\r\n-\t\t *\r\n-\t\t * @param string $name\r\n-\t\t * @param int    $post_id\r\n-\t\t *\u002F\r\n-\t\tpublic function columns_content( $name, $post_id = 0 ) {\r\n-\t\t\t$quizPostModel = QuizPostModel::find( $post_id, true );\r\n-\t\t\tif ( ! $quizPostModel ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $name ) {\r\n-\t\t\t\tcase 'instructor':\r\n-\t\t\t\t\t$this->column_instructor( $post_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'lp_course':\r\n-\t\t\t\t\t$this->_get_item_course( $post_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'num_of_question':\r\n-\t\t\t\t\t$count = $quizPostModel->count_questions();\r\n-\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"lp-label-counter %s\" title=\"%s\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t! $count ? 'disabled' : '',\r\n-\t\t\t\t\t\t$count ?\r\n-\t\t\t\t\t\t\tsprintf( _n( '%d question', '%d questions', $count, 'learnpress' ), $count ) :\r\n-\t\t\t\t\t\t\t__( 'This quiz has no questions', 'learnpress' ),\r\n-\t\t\t\t\t\t$count\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\t$duration_str  = $quizPostModel->get_duration();\r\n-\t\t\t\t\t$duration_arr  = explode( ' ', $duration_str );\r\n-\t\t\t\t\t$duration      = $duration_arr[0];\r\n-\t\t\t\t\t$duration_type = $duration_arr[1];\r\n-\r\n-\t\t\t\t\tif ( $duration > 0 ) {\r\n-\t\t\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration, $duration_type );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$duration_str = __( 'Unlimited', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\techo esc_html( $duration_str );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'preview':\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" class=\"learn-press-checkbox learn-press-toggle-item-preview\" %s value=\"%s\" data-nonce=\"%s\" \u002F>',\r\n-\t\t\t\t\t\tget_post_meta( $post_id, '_lp_preview', true ) == 'yes' ? ' checked=\"checked\"' : '',\r\n-\t\t\t\t\t\t$post_id,\r\n-\t\t\t\t\t\twp_create_nonce( 'learn-press-toggle-item-preview' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $fields\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_fields( $fields ): string {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $fields;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$fields = ' DISTINCT ' . $fields;\r\n-\r\n-\t\t\tif ( $this->get_order_by() == 'question-count' ) {\r\n-\t\t\t\t$fields .= \", (SELECT count(*) FROM {$wpdb->prefix}learnpress_quiz_questions qq WHERE {$wpdb->posts}.ID = qq.quiz_id ) as question_count\";\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $fields;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $join\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_join_paged( $join ): string {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $join;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $join;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $where\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_where_paged( $where ) {\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $where;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\r\n-\t\t\t\t$where .= $wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-                    AND {$wpdb->posts}.ID NOT IN(\r\n-                        SELECT si.item_id\r\n-                        FROM {$wpdb->learnpress_section_items} si\r\n-                        INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\r\n-                        WHERE p.post_type = %s\r\n-                    )\r\n-                \",\r\n-\t\t\t\t\tLP_QUIZ_CPT\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $where;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $order_by_statement\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function posts_orderby( $order_by_statement ) {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\r\n-\t\t\t\treturn $order_by_statement;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$orderby = $this->get_order_by();\r\n-\t\t\t$order   = $this->get_order_sort();\r\n-\r\n-\t\t\tif ( $order && $orderby ) {\r\n-\t\t\t\tswitch ( $orderby ) {\r\n-\t\t\t\t\tcase 'course-name':\r\n-\t\t\t\t\t\t$order_by_statement = \"post_title {$order}\";\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'question-count':\r\n-\t\t\t\t\t\t$order_by_statement = \"question_count {$order}\";\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$order_by_statement = \"{$wpdb->posts}.post_title {$order}\";\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $order_by_statement;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $columns\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function sortable_columns( $columns ) {\r\n-\t\t\t$columns['instructor']      = 'author';\r\n-\t\t\t$columns[ LP_COURSE_CPT ]   = 'course-name';\r\n-\t\t\t$columns['num_of_question'] = 'question-count';\r\n-\r\n-\t\t\treturn $columns;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Quiz assigned view.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\t\u002F\u002F public static function quiz_assigned() {\r\n-\t\t\u002F\u002F  learn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\r\n-\t\t\u002F\u002F }\r\n-\r\n-\t\tpublic function meta_boxes() {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'quiz_assigned' => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => function ( $post ) {\r\n-\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'context'  => 'side',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t\t'quiz-editor'   => array(\r\n-\t\t\t\t\t'title'    => esc_html__( 'Questions', 'learnpress' ),\r\n-\t\t\t\t\t'callback' => array( $this, 'admin_editor' ),\r\n-\t\t\t\t\t'context'  => 'normal',\r\n-\t\t\t\t\t'priority' => 'high',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Quiz_Post_Type|null\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( ! self::$_instance ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle when save post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t * @param WP_Post|null $post\r\n-\t\t * @param bool $is_update\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @since 4.2.7.6\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function save_post( int $post_id = 0, ?WP_Post $post = null, bool $is_update = false ) {\r\n-\t\t\t\u002F\u002F Clear cache get quiz by id\r\n-\t\t\t$lpCache = new LP_Cache();\r\n-\t\t\t$lpCache->clear( \"quizPostModel\u002Ffind\u002F{$post_id}\" );\r\n-\t\t\t$lpCache->clear( \"quizModel\u002Ffind\u002F{$post_id}\" );\r\n-\r\n-\t\t\t\u002F\u002F Clear cache get question_ids of quiz\r\n-\t\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\r\n-\t\t\t$lp_quiz_cache->clear( \"$post_id\u002Fquestion_ids\" );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F LP_Quiz_Post_Type\r\n-\t$quiz_post_type = LP_Quiz_Post_Type::instance();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz_Post_Type\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\QuizPostModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Quiz_Post_Type' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Quiz_Post_Type\n+\t *\u002F\n+\tfinal class LP_Quiz_Post_Type extends LP_Abstract_Post_Type {\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic static $metaboxes = array();\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_QUIZ_CPT;\n+\n+\t\t\u002F**\n+\t\t * LP_Quiz_Post_Type constructor.\n+\t\t *\n+\t\t * @param $post_type\n+\t\t * @param mixed\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\n+\t\t\t\u002F\u002F$this->add_map_method( 'before_delete', 'before_delete_quiz' );\n+\n+\t\t\tadd_action( 'learn-press\u002Fadmin\u002Fafter-enqueue-scripts', array( $this, 'data_quiz_editor' ) );\n+\n+\t\t\tadd_filter( 'views_edit-' . LP_QUIZ_CPT, array( $this, 'views_pages' ), 10 );\n+\t\t\tadd_filter( 'posts_where_paged', array( $this, 'posts_where_paged' ), 10 );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add filters to lesson view.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param array $views\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function views_pages( array $views ): array {\n+\t\t\t$count_unassigned_quiz = LP_Course_DB::getInstance()->get_total_item_unassigned( LP_QUIZ_CPT );\n+\n+\t\t\tif ( $count_unassigned_quiz > 0 ) {\n+\t\t\t\t$views['unassigned'] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"%s\">%s \u003Cspan class=\"count\">(%d)\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tadmin_url( 'edit.php?post_type=' . LP_QUIZ_CPT . '&unassigned=yes' ),\n+\t\t\t\t\tisset( $_GET['unassigned'] ) ? 'current' : '',\n+\t\t\t\t\t__( 'Unassigned', 'learnpress' ),\n+\t\t\t\t\t$count_unassigned_quiz\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn $views;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Register quiz post type.\n+\t\t *\u002F\n+\t\tpublic function args_register_post_type(): array {\n+\t\t\t$args = apply_filters(\n+\t\t\t\t'lp_quiz_post_type_args',\n+\t\t\t\tarray(\n+\t\t\t\t\t'labels'              => array(\n+\t\t\t\t\t\t'name'               => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t\t\t\t\t'menu_name'          => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t\t\t\t\t'singular_name'      => esc_html__( 'Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'add_new_item'       => esc_html__( 'Add A New Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'edit_item'          => esc_html__( 'Edit Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'all_items'          => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t\t\t\t\t'view_item'          => esc_html__( 'View Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'add_new'            => esc_html__( 'New Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'update_item'        => esc_html__( 'Update Quiz', 'learnpress' ),\n+\t\t\t\t\t\t'search_items'       => esc_html__( 'Search Quizzes', 'learnpress' ),\n+\t\t\t\t\t\t'not_found'          => sprintf( __( 'You haven\\'t had any quizzes yet. Click \u003Ca href=\"%s\">Add new\u003C\u002Fa> to start', 'learnpress' ), admin_url( 'post-new.php?post_type=lp_quiz' ) ),\n+\t\t\t\t\t\t'not_found_in_trash' => esc_html__( 'There was no quiz found in the trash', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'public'              => true,\n+\t\t\t\t\t'publicly_queryable'  => true,\n+\t\t\t\t\t'show_ui'             => true,\n+\t\t\t\t\t'has_archive'         => false,\n+\t\t\t\t\t'capability_type'     => LP_LESSON_CPT,\n+\t\t\t\t\t'map_meta_cap'        => true,\n+\t\t\t\t\t'show_in_menu'        => 'learn_press',\n+\t\t\t\t\t'show_in_rest'        => true,\n+\t\t\t\t\t'show_in_admin_bar'   => true,\n+\t\t\t\t\t'show_in_nav_menus'   => true,\n+\t\t\t\t\t'supports'            => array(\n+\t\t\t\t\t\t'title',\n+\t\t\t\t\t\t'editor',\n+\t\t\t\t\t\t'revisions',\n+\t\t\t\t\t),\n+\t\t\t\t\t'hierarchical'        => true,\n+\t\t\t\t\t'rewrite'             => array(\n+\t\t\t\t\t\t'slug'         => 'quizzes',\n+\t\t\t\t\t\t'hierarchical' => true,\n+\t\t\t\t\t\t'with_front'   => false,\n+\t\t\t\t\t),\n+\t\t\t\t\t'exclude_from_search' => true,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load data for quiz editor.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function data_quiz_editor() {\n+\t\t\tif ( LP_QUIZ_CPT !== get_post_type() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tglobal $post;\n+\n+\t\t\t$quiz = LP_Quiz::get_quiz( $post->ID );\n+\n+\t\t\t$user_id                   = get_current_user_id();\n+\t\t\t$default_new_question_type = get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) ? get_user_meta( $user_id, '_learn_press_memorize_question_types', true ) : 'true_or_false';\n+\n+\t\t\t$hidden_questions          = get_post_meta( $post->ID, '_lp_hidden_questions', true );\n+\t\t\t$hidden_questions_settings = get_post_meta( $post->ID, '_hidden_questions_settings', true );\n+\n+\t\t\twp_localize_script(\n+\t\t\t\t'learn-press-admin-quiz-editor',\n+\t\t\t\t'lp_quiz_editor',\n+\t\t\t\tapply_filters(\n+\t\t\t\t\t'learn-press\u002Fadmin-localize-quiz-editor',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'root'          => array(\n+\t\t\t\t\t\t\t'quiz_id'     => $post->ID,\n+\t\t\t\t\t\t\t'ajax'        => admin_url( '' ),\n+\t\t\t\t\t\t\t'action'      => 'admin_quiz_editor',\n+\t\t\t\t\t\t\t'nonce'       => wp_create_nonce( 'learnpress_admin_quiz_editor' ),\n+\t\t\t\t\t\t\t'types'       => LP_Question::get_types(),\n+\t\t\t\t\t\t\t'default_new' => $default_new_question_type,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'chooseItems'   => array(\n+\t\t\t\t\t\t\t'open'       => false,\n+\t\t\t\t\t\t\t'addedItems' => array(),\n+\t\t\t\t\t\t\t'items'      => array(),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'i18n'          => apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fquiz-editor\u002Fi18n',\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'option'                 => esc_html__( 'Option', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'unique'                 => learn_press_uniqid(),\n+\t\t\t\t\t\t\t\t'back'                   => esc_html__( 'Back', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'selected_items'         => esc_html__( 'Selected items', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'new_option'             => esc_html__( 'New Option', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'confirm_trash_question' => esc_html__( 'Do you want to move the \"{{QUESTION_NAME}}\" question to the trash?', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'question_labels'        => array(\n+\t\t\t\t\t\t\t\t\t'singular' => esc_html__( 'Question', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t'plural'   => esc_html__( 'Questions', 'learnpress' ),\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t'confirm_remove_blanks'  => esc_html__( 'Are you sure to remove all the blanks?', 'learnpress' ),\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'listQuestions' => array(\n+\t\t\t\t\t\t\t'questions'                 => $quiz->quiz_editor_get_questions(),\n+\t\t\t\t\t\t\t'hidden_questions'          => ! empty( $hidden_questions ) ? $hidden_questions : array(),\n+\t\t\t\t\t\t\t'hidden_questions_settings' => $hidden_questions_settings ? $hidden_questions_settings : array(),\n+\t\t\t\t\t\t\t'disableUpdateList'         => false,\n+\t\t\t\t\t\t\t'supportAnswerOptions'      => learn_press_get_question_support_answer_options(),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Delete all questions assign to quiz.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $post_id\n+\t\t *\u002F\n+\t\tpublic function before_delete_quiz( $post_id ) {\n+\t\t\tif ( get_post_type( $post_id ) !== LP_QUIZ_CPT ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$curd = new LP_Quiz_CURD();\n+\t\t\t\u002F\u002F remove question from course items\n+\t\t\t$curd->delete( $post_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Admin editor\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t * @version 1.0.1\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function admin_editor() {\n+\t\t\tglobal $post;\n+\n+\t\t\t$quiz_id       = $post->ID;\n+\t\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\n+\t\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Fadmin\u002Fedit-quiz\u002Flayout', $quizPostModel );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add columns to admin manage quiz page\n+\t\t *\n+\t\t * @param  array $columns\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function columns_head( $columns ) {\n+\t\t\t$pos = array_search( 'title', array_keys( $columns ) );\n+\n+\t\t\tif ( false !== $pos && ! array_key_exists( LP_COURSE_CPT, $columns ) ) {\n+\t\t\t\t$columns = array_merge(\n+\t\t\t\t\tarray_slice( $columns, 0, $pos + 1 ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'instructor'      => esc_html__( 'Author', 'learnpress' ),\n+\t\t\t\t\t\tLP_COURSE_CPT     => esc_html__( 'Course', 'learnpress' ),\n+\t\t\t\t\t\t'num_of_question' => esc_html__( 'Questions', 'learnpress' ),\n+\t\t\t\t\t\t'duration'        => esc_html__( 'Duration', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\tarray_slice( $columns, $pos + 1 )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tunset( $columns['taxonomy-lesson-tag'] );\n+\t\t\t$user = wp_get_current_user();\n+\n+\t\t\tif ( in_array( 'lp_teacher', $user->roles ) ) {\n+\t\t\t\tunset( $columns['instructor'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $columns['author'] ) ) {\n+\t\t\t\tunset( $columns['author'] );\n+\t\t\t}\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Display content for custom column\n+\t\t *\n+\t\t * @param string $name\n+\t\t * @param int    $post_id\n+\t\t *\u002F\n+\t\tpublic function columns_content( $name, $post_id = 0 ) {\n+\t\t\t$quizPostModel = QuizPostModel::find( $post_id, true );\n+\t\t\tif ( ! $quizPostModel ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tswitch ( $name ) {\n+\t\t\t\tcase 'instructor':\n+\t\t\t\t\t$this->column_instructor( $post_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'lp_course':\n+\t\t\t\t\t$this->_get_item_course( $post_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'num_of_question':\n+\t\t\t\t\t$count = $quizPostModel->count_questions();\n+\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"lp-label-counter %s\" title=\"%s\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t! $count ? 'disabled' : '',\n+\t\t\t\t\t\t$count ?\n+\t\t\t\t\t\t\tsprintf( _n( '%d question', '%d questions', $count, 'learnpress' ), $count ) :\n+\t\t\t\t\t\t\t__( 'This quiz has no questions', 'learnpress' ),\n+\t\t\t\t\t\t$count\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\t$duration_str  = $quizPostModel->get_duration();\n+\t\t\t\t\t$duration_arr  = explode( ' ', $duration_str );\n+\t\t\t\t\t$duration      = $duration_arr[0];\n+\t\t\t\t\t$duration_type = $duration_arr[1];\n+\n+\t\t\t\t\tif ( $duration > 0 ) {\n+\t\t\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration, $duration_type );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$duration_str = __( 'Unlimited', 'learnpress' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\techo esc_html( $duration_str );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'preview':\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" class=\"learn-press-checkbox learn-press-toggle-item-preview\" %s value=\"%s\" data-nonce=\"%s\" \u002F>',\n+\t\t\t\t\t\tget_post_meta( $post_id, '_lp_preview', true ) == 'yes' ? ' checked=\"checked\"' : '',\n+\t\t\t\t\t\t$post_id,\n+\t\t\t\t\t\twp_create_nonce( 'learn-press-toggle-item-preview' )\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tbreak;\n+\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $fields\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_fields( $fields ): string {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $fields;\n+\t\t\t}\n+\n+\t\t\t$fields = ' DISTINCT ' . $fields;\n+\n+\t\t\tif ( $this->get_order_by() == 'question-count' ) {\n+\t\t\t\t$fields .= \", (SELECT count(*) FROM {$wpdb->prefix}learnpress_quiz_questions qq WHERE {$wpdb->posts}.ID = qq.quiz_id ) as question_count\";\n+\t\t\t}\n+\n+\t\t\treturn $fields;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $join\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_join_paged( $join ): string {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $join;\n+\t\t\t}\n+\n+\t\t\treturn $join;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $where\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function posts_where_paged( $where ) {\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $where;\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( 'yes' === LP_Request::get( 'unassigned' ) ) {\n+\t\t\t\t$where .= $wpdb->prepare(\n+\t\t\t\t\t\"\n+                    AND {$wpdb->posts}.ID NOT IN(\n+                        SELECT si.item_id\n+                        FROM {$wpdb->learnpress_section_items} si\n+                        INNER JOIN {$wpdb->posts} p ON p.ID = si.item_id\n+                        WHERE p.post_type = %s\n+                    )\n+                \",\n+\t\t\t\t\tLP_QUIZ_CPT\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn $where;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $order_by_statement\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function posts_orderby( $order_by_statement ) {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\tif ( ! $this->is_page_list_posts_on_backend() ) {\n+\t\t\t\treturn $order_by_statement;\n+\t\t\t}\n+\n+\t\t\t$orderby = $this->get_order_by();\n+\t\t\t$order   = $this->get_order_sort();\n+\n+\t\t\tif ( $order && $orderby ) {\n+\t\t\t\tswitch ( $orderby ) {\n+\t\t\t\t\tcase 'course-name':\n+\t\t\t\t\t\t$order_by_statement = \"post_title {$order}\";\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'question-count':\n+\t\t\t\t\t\t$order_by_statement = \"question_count {$order}\";\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$order_by_statement = \"{$wpdb->posts}.post_title {$order}\";\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $order_by_statement;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $columns\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function sortable_columns( $columns ) {\n+\t\t\t$columns['instructor']      = 'author';\n+\t\t\t$columns[ LP_COURSE_CPT ]   = 'course-name';\n+\t\t\t$columns['num_of_question'] = 'question-count';\n+\n+\t\t\treturn $columns;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Quiz assigned view.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\t\u002F\u002F public static function quiz_assigned() {\n+\t\t\u002F\u002F  learn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\n+\t\t\u002F\u002F }\n+\n+\t\tpublic function meta_boxes() {\n+\t\t\treturn array(\n+\t\t\t\t'quiz_assigned' => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Assigned', 'learnpress' ),\n+\t\t\t\t\t'callback' => function ( $post ) {\n+\t\t\t\t\t\tlearn_press_admin_view( 'meta-boxes\u002Fcourse\u002Fassigned.php' );\n+\t\t\t\t\t},\n+\t\t\t\t\t'context'  => 'side',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t\t'quiz-editor'   => array(\n+\t\t\t\t\t'title'    => esc_html__( 'Questions', 'learnpress' ),\n+\t\t\t\t\t'callback' => array( $this, 'admin_editor' ),\n+\t\t\t\t\t'context'  => 'normal',\n+\t\t\t\t\t'priority' => 'high',\n+\t\t\t\t),\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Quiz_Post_Type|null\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( ! self::$_instance ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle when save post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t * @param WP_Post|null $post\n+\t\t * @param bool $is_update\n+\t\t *\n+\t\t * @return void\n+\t\t * @since 4.2.7.6\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function save_post( int $post_id = 0, ?WP_Post $post = null, bool $is_update = false ) {\n+\t\t\t\u002F\u002F Clear cache get quiz by id\n+\t\t\t$lpCache = new LP_Cache();\n+\t\t\t$lpCache->clear( \"quizPostModel\u002Ffind\u002F{$post_id}\" );\n+\t\t\t$lpCache->clear( \"quizModel\u002Ffind\u002F{$post_id}\" );\n+\n+\t\t\t\u002F\u002F Clear cache get question_ids of quiz\n+\t\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\n+\t\t\t$lp_quiz_cache->clear( \"$post_id\u002Fquestion_ids\" );\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F LP_Quiz_Post_Type\n+\t$quiz_post_type = LP_Quiz_Post_Type::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-course-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-course-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-course-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-course-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,862 +1,862 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_DB\r\n- *\r\n- * @author tungnx\r\n- * @since 3.2.7.5\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Course_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course_id of item\r\n-\t *\r\n-\t * item type lp_lesson, lp_quiz\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_course_by_item_id( $item_id = 0 ): int {\r\n-\t\t\u002F\u002F Get cache\r\n-\t\t$lp_course_cache = LP_Course_Cache::instance();\r\n-\t\t$key_cache       = \"$item_id\u002Fcourse_id_of_item_id\";\r\n-\t\t$course_id       = $lp_course_cache->get_cache( $key_cache );\r\n-\r\n-\t\tif ( ! $course_id ) {\r\n-\t\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT section_course_id\r\n-\t\t\t\tFROM {$this->tb_lp_sections} AS s\r\n-\t\t\t\tINNER JOIN {$this->tb_lp_section_items} AS si\r\n-\t\t\t\tON si.section_id = s.section_id\r\n-\t\t\t\tWHERE si.item_id = %d\",\r\n-\t\t\t\t$item_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$course_id = (int) $this->wpdb->get_var( $query );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Set cache\r\n-\t\t\t$lp_course_cache->set_cache( $key_cache, $course_id );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all item ids' course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return array|object|stdClass[]|null\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_full_sections_and_items_course( int $course_id = 0 ) {\r\n-\t\t$method_called_to = debug_backtrace()[1]['function'];\r\n-\r\n-\t\t\u002F\u002F Check accept call from function 'get_sections_and_items_course_from_db_and_sort'\r\n-\t\tif ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {\r\n-\t\t\terror_log( 'You can not call direct this function' );\r\n-\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT *\r\n-\t\t\tFROM {$this->tb_lp_section_items} AS si\r\n-\t\t\tINNER JOIN {$this->tb_lp_sections} AS s\r\n-\t\t\tON si.section_id = s.section_id\r\n-\t\t\tINNER JOIN {$this->tb_posts} AS p\r\n-\t\t\tON si.item_id = p.ID AND p.post_status = 'publish'\r\n-\t\t\tWHERE section_course_id = %d\r\n-\t\t\tORDER BY s.section_order\",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$sections_items = $this->wpdb->get_results( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $sections_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all sections' course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return array|object|stdClass[]|null\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_sections( int $course_id = 0 ) {\r\n-\t\t$method_called_to = debug_backtrace()[1]['function'];\r\n-\r\n-\t\t\u002F\u002F Check accept call from function 'get_sections_and_items_course_from_db_and_sort'\r\n-\t\tif ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {\r\n-\t\t\terror_log( 'You can not call direct this function' );\r\n-\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT * FROM {$this->tb_lp_sections}\r\n-\t\t\tWHERE section_course_id = %d\r\n-\t\t\tORDER BY section_order\",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$sections_items = $this->wpdb->get_results( $query, OBJECT_K );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $sections_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user_item_id by order_id, course_id, user_id\r\n-\t *\r\n-\t * @param int $order_id\r\n-\t * @param int $course_id\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @deprecated 4.2.6.6 not use anywhere\r\n-\t *\u002F\r\n-\tpublic function get_user_item_id( $order_id = 0, $course_id = 0, $user_id = 0 ): int {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.6' );\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT user_item_id\r\n-\t\t\tFROM {$this->tb_lp_user_items}\r\n-\t\t\tWHERE ref_type = %s\r\n-\t\t\tAND ref_id = %d\r\n-\t\t\tAND item_type = %s\r\n-\t\t\tAND item_id = %d\r\n-\t\t\tAND user_id = %d\r\n-\t\t\t\",\r\n-\t\t\tLP_ORDER_CPT,\r\n-\t\t\t$order_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t$course_id,\r\n-\t\t\t$user_id\r\n-\t\t);\r\n-\r\n-\t\treturn (int) $this->wpdb->get_var( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get first item id of course\r\n-\t *\r\n-\t * @param int $course_id .\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @since 4.0.0\r\n-\t * @version 1.0.4\r\n-\t * @modify 4.1.3\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function get_first_item_id( int $course_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT item_id FROM $this->tb_lp_section_items AS si\r\n-\t\t\tINNER JOIN $this->tb_lp_sections AS sections\r\n-\t\t\tON si.section_id = sections.section_id\r\n-\t\t\tAND sections.section_course_id = %d\r\n-\t\t\tINNER JOIN $this->tb_posts AS p\r\n-\t\t\tON si.item_id = p.ID\r\n-\t\t\tAND p.post_status = 'publish'\r\n-\t\t\tORDER BY sections.section_order ASC, si.item_order ASC\r\n-\t\t\tLIMIT %d\r\n-\t\t\t\",\r\n-\t\t\t$course_id,\r\n-\t\t\t1\r\n-\t\t);\r\n-\r\n-\t\t$first_item_id = (int) $this->wpdb->get_var( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $first_item_id;\r\n-\t}\r\n-\r\n-\tpublic function get_recent_courses( LP_Course_Filter $filter ): array {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$limit = $filter->limit ?? - 1;\r\n-\t\t$order = ! empty( $filter->order ) ? $filter->order : 'DESC';\r\n-\r\n-\t\tif ( $limit \u003C= 0 ) {\r\n-\t\t\t$limit = 0;\r\n-\t\t}\r\n-\r\n-\t\t$query = apply_filters(\r\n-\t\t\t'learnpress\u002Fdatabases\u002Fwidgets\u002Frecent_courses',\r\n-\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\"SELECT DISTINCT p.ID\r\n-\t\t\t\t\tFROM $wpdb->posts AS p\r\n-\t\t\t\t\tWHERE p.post_type = %s\r\n-\t\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\t\tORDER BY p.post_date {$order}\r\n-\t\t\t\t\tLIMIT %d\",\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t'publish',\r\n-\t\t\t\t$limit\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\tpublic function get_featured_courses( LP_Course_Filter $filter ): array {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$limit    = ! empty( $filter->limit ) ? $filter->limit : - 1;\r\n-\t\t$order_by = ! empty( $filter->order_by ) ? $filter->order_by : 'post_date';\r\n-\t\t$order    = ! empty( $filter->order ) ? $filter->order : 'DESC';\r\n-\r\n-\t\tif ( $limit \u003C 0 ) {\r\n-\t\t\t$limit = 0;\r\n-\t\t}\r\n-\r\n-\t\t$query = apply_filters(\r\n-\t\t\t'learnpress\u002Fdatabases\u002Fwidgets\u002Ffeatured_courses',\r\n-\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\"SELECT DISTINCT p.ID\r\n-\t\t\t\tFROM {$wpdb->posts} p\r\n-\t\t\t\tLEFT JOIN {$wpdb->postmeta} as pmeta ON p.ID=pmeta.post_id AND pmeta.meta_key = %s\r\n-\t\t\t\tWHERE p.post_type = %s\r\n-\t\t\t\t\tAND p.post_status = %s\r\n-\t\t\t\t\tAND pmeta.meta_value = %s\r\n-\t\t\t\tORDER BY p.{$order_by} {$order}\r\n-\t\t\t\tLIMIT %d\",\r\n-\t\t\t\t'_lp_featured',\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t'publish',\r\n-\t\t\t\t'yes',\r\n-\t\t\t\t$limit\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list user ids enrolled by course\r\n-\t *\r\n-\t * @return array|object|null\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t * @since 4.1.3.1\r\n-\t *\u002F\r\n-\tpublic function get_user_ids_enrolled( int $course_id ) {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\t\tSELECT DISTINCT user_id FROM {$this->tb_lp_user_items}\r\n-\t\t\t\tWHERE item_id = %d\r\n-\t\t\t\tAND item_type = %s\r\n-\t\t\t\tAND (status = %s OR status = %s )\r\n-\t\t\t\",\r\n-\t\t\t$course_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t'enrolled',\r\n-\t\t\t'finished'\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->get_results( $query, OBJECT_K );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count total user enrolled by course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_total_user_enrolled( int $course_id ): int {\r\n-\t\t$filter              = new LP_User_Items_Filter();\r\n-\t\t$filter->only_fields = [ 'DISTINCT(user_id)' ];\r\n-\t\t$filter->item_id     = $course_id;\r\n-\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t$filter->field_count = 'ui.user_id';\r\n-\t\t$filter->join[]      = \"INNER JOIN {$this->tb_users} AS u ON ui.user_id = u.ID\";\r\n-\t\t$filter->where[]     = 'AND ui.user_id > 0';\r\n-\t\t$filter->where[]     = $this->wpdb->prepare( 'AND ( ui.status = %s OR ui.status = %s )', LP_COURSE_ENROLLED, LP_COURSE_FINISHED );\r\n-\t\t$filter->query_count = true;\r\n-\r\n-\t\t$total            = 0;\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$lp_user_items_db->get_user_items( $filter, $total );\r\n-\r\n-\t\treturn $total;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count total user enrolled or purchase by course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_total_user_enrolled_or_purchased( int $course_id ): int {\r\n-\t\t$filter              = new LP_User_Items_Filter();\r\n-\t\t$filter->only_fields = [ 'DISTINCT(user_id)' ];\r\n-\t\t$filter->item_id     = $course_id;\r\n-\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t$filter->field_count = 'ui.user_id';\r\n-\t\t$filter->join[]      = \"INNER JOIN {$this->tb_users} AS u ON ui.user_id = u.ID\";\r\n-\t\t$filter->where[]     = 'AND ui.user_id > 0';\r\n-\t\t$filter->where[]     = $this->wpdb->prepare(\r\n-\t\t\t'AND ( ui.status = %s OR ui.status = %s OR ui.status = %s )',\r\n-\t\t\tLP_COURSE_ENROLLED,\r\n-\t\t\tLP_COURSE_FINISHED,\r\n-\t\t\tLP_COURSE_PURCHASED\r\n-\t\t);\r\n-\t\t$filter->query_count = true;\r\n-\r\n-\t\t$total            = 0;\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$lp_user_items_db->get_user_items( $filter, $total );\r\n-\r\n-\t\treturn $total;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total items of course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return null|object\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t *\u002F\r\n-\tpublic function get_total_items( int $course_id = 0 ) {\r\n-\t\t$item_types       = CourseModel::item_types_support();\r\n-\t\t$count_item_types = count( $item_types );\r\n-\t\t$i                = 0;\r\n-\r\n-\t\t$query_count = $this->wpdb->prepare( 'SUM(s.section_course_id = %d) AS count_items,', $course_id );\r\n-\r\n-\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t++ $i;\r\n-\t\t\tif ( $i == $count_item_types ) {\r\n-\t\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(s.section_course_id = %d AND si.item_type = %s) AS %s', $course_id, $item_type, $item_type );\r\n-\t\t\t} else {\r\n-\t\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(s.section_course_id = %d AND si.item_type = %s) AS %s,', $course_id, $item_type, $item_type );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$query = \"\r\n-\t\t\tSELECT $query_count\r\n-\t\t\tFROM $this->tb_lp_section_items si\r\n-\t\t\tINNER JOIN $this->tb_lp_sections s ON s.section_id = si.section_id\r\n-\t\t\tINNER JOIN $this->tb_posts p ON si.item_id = p.ID\r\n-\t\t\tAND p.post_status = 'publish'\r\n-\t\t\t\";\r\n-\r\n-\t\t$total_items = $this->wpdb->get_row( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $total_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count all item are unassigned to any courses.\r\n-\t *\r\n-\t * @param string $item_type (type item Lesson, Quiz, Assignment, H5P ...)\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since 4.1.4.1\r\n-\t *\u002F\r\n-\tpublic function get_total_item_unassigned( string $item_type ): int {\r\n-\t\t$filter              = new LP_Post_Type_Filter();\r\n-\t\t$filter->post_type   = $item_type;\r\n-\t\t$filter->query_count = true;\r\n-\t\t$filter->post_status = array();\r\n-\t\t$filter->field_count = 'p.ID';\r\n-\r\n-\t\treturn $this->get_item_ids_unassigned( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * list id item are unassigned to any courses.\r\n-\t *\r\n-\t * @param LP_Post_Type_Filter|mixed $filter\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.6\r\n-\t *\u002F\r\n-\tpublic function get_item_ids_unassigned( $filter = null ) {\r\n-\t\tif ( is_null( $filter ) ) {\r\n-\t\t\t$filter = new LP_Post_Type_Filter();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $filter instanceof LP_Post_Type_Filter ) {\r\n-\t\t\tthrow new Exception( 'Filter must be instance of LP_Post_Type_Filter' );\r\n-\t\t}\r\n-\r\n-\t\t$filter_section_items                      = new LP_Section_Items_Filter();\r\n-\t\t$filter_section_items->return_string_query = true;\r\n-\t\t$filter_section_items->only_fields         = array( 'si.item_id' );\r\n-\t\t$filter_section_items->where[]             = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->post_type );\r\n-\t\t$query_item_ids_assigned                   = LP_Section_Items_DB::getInstance()->get_section_items( $filter_section_items );\r\n-\r\n-\t\t$filter->only_fields      = array( 'p.ID' );\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = 'p';\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_type = %s', $filter->post_type );\r\n-\t\t$filter->where[]          = 'AND ID NOT IN(' . $query_item_ids_assigned . ')';\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_status not IN(%s, %s)', 'trash', 'auto-draft' );\r\n-\r\n-\t\treturn $this->execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Courses\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param int $total_rows return total_rows\r\n-\t *\r\n-\t * @return array|object|null|int|string\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.5\r\n-\t *\u002F\r\n-\tpublic function get_courses( $filter, int &$total_rows = 0 ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_posts;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'p';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type = %s', $filter->post_type );\r\n-\r\n-\t\t\u002F\u002F Status\r\n-\t\t$filter->post_status = (array) $filter->post_status;\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND p.post_status IN (' . $post_status_format . ')', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Exclude status auto-draft, because Admin of WP not show auto-draft in list post, so all front-end and back-end of LP also not show auto-draft\r\n-\t\tif ( ! in_array( 'auto-draft', $filter->post_status, true ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_status != %s', 'auto-draft' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Term ids\r\n-\t\tif ( ! empty( $filter->term_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize term ids\r\n-\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term ON p.ID = r_term.object_id\";\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx ON r_term.term_taxonomy_id = tx.term_taxonomy_id\";\r\n-\r\n-\t\t\tif ( LP_Settings::get_option( 'get_courses_of_subcategory' ) !== 'yes' ) {\r\n-\t\t\t\t$term_ids_format = join( ',', $filter->term_ids );\r\n-\t\t\t\t$filter->where[] = \"AND tx.term_id IN ($term_ids_format)\";\r\n-\t\t\t} else {\r\n-\t\t\t\t$term_all        = $this->recursion_sub_categories( $filter->term_ids );\r\n-\t\t\t\t$term_ids_format = join( ',', $term_all );\r\n-\t\t\t\t$filter->where[] = \"AND tx.term_id IN ($term_ids_format)\";\r\n-\t\t\t}\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND tx.taxonomy = %s', LP_COURSE_CATEGORY_TAX );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Tag ids\r\n-\t\tif ( ! empty( $filter->tag_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize tag ids\r\n-\t\t\t$filter->tag_ids = array_map( 'absint', $filter->tag_ids );\r\n-\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_term_relationships AS r_tag ON p.ID = r_tag.object_id\";\r\n-\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_term_taxonomy AS tag ON r_tag.term_taxonomy_id = tag.term_taxonomy_id\";\r\n-\r\n-\t\t\t$tag_ids_format  = join( ',', $filter->tag_ids );\r\n-\t\t\t$filter->where[] = \"AND tag.term_id IN ($tag_ids_format)\";\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND tag.taxonomy = %s', LP_COURSE_TAXONOMY_TAG );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Level\r\n-\t\tif ( ! empty( $filter->levels ) ) {\r\n-\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pml ON p.ID = pml.post_id\";\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_key = %s', '_lp_level' );\r\n-\t\t\t$levels_format   = LP_Helper::db_format_array( $filter->levels, '%s' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_value IN (' . $levels_format . ')', $filter->levels );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Course type\r\n-\t\tif ( ! empty( $filter->type ) && $filter->type !== 'all' ) {\r\n-\t\t\tif ( $filter->type === 'offline' ) {\r\n-\t\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm_off ON p.ID = pm_off.post_id\";\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_key = %s', '_lp_offline_course' );\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_value = %s', 'yes' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t\t\"AND p.ID NOT IN\r\n-\t\t\t\t\t( SELECT id FROM $this->tb_posts as p1\r\n-\t\t\t\t\tINNER JOIN $this->tb_postmeta as pm_ol on p1.ID = pm_ol.post_id\r\n-\t\t\t\t\tWHERE pm_ol.meta_key = %s AND pm_ol.meta_value = %s )\",\r\n-\t\t\t\t\t'_lp_offline_course',\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F course ids\r\n-\t\tif ( ! empty( $filter->post_ids ) ) {\r\n-\t\t\t$list_ids_format = LP_Helper::db_format_array( $filter->post_ids, '%d' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.ID IN (' . $list_ids_format . ')', $filter->post_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Title, do not distinguish diacritics\r\n-\t\tif ( $filter->post_title ) {\r\n-\t\t\t\u002F\u002F$filter->where[] = $this->wpdb->prepare( 'AND p.post_title COLLATE utf8mb4_unicode_ci LIKE %s', '%' . $filter->post_title . '%' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_title LIKE %s', '%' .$filter->post_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Slug\r\n-\t\tif ( $filter->post_name ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_name = %s', $filter->post_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\tif ( isset( $filter->post_author ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_author = %d', $filter->post_author );\r\n-\t\t}\r\n-\t\t\u002F\u002F Authors\r\n-\t\tif ( ! empty( $filter->post_authors ) ) {\r\n-\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( 'AND p.post_author IN (' . $post_authors_format . ')', $filter->post_authors );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fcourse\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses sort by price\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t * @since 4.1.5\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_courses_order_by_price( LP_Course_Filter &$filter ): LP_Course_Filter {\r\n-\t\t$filter->join[]   = \"INNER JOIN $this->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$filter->where[]  = $this->wpdb->prepare( 'AND pm.meta_key = %s', '_lp_price' );\r\n-\t\t$filter->order_by = 'CAST( pm.meta_value AS UNSIGNED )';\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is on sale\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return  LP_Course_Filter\r\n-\t * @since 4.1.5\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_courses_sort_by_sale( LP_Course_Filter &$filter ): LP_Course_Filter {\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm.meta_key = %s', '_lp_course_is_sale' );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is Free\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return  LP_Course_Filter\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.2\r\n-\t *\u002F\r\n-\tpublic function get_courses_sort_by_free( LP_Course_Filter &$filter ): LP_Course_Filter {\r\n-\t\t$filter_course_price                      = new LP_Course_Filter();\r\n-\t\t$filter_course_price->only_fields         = [ 'DISTINCT(ID)' ];\r\n-\t\t$filter_course_price                      = $this->get_courses_sort_by_paid( $filter_course_price );\r\n-\t\t$filter_course_price->return_string_query = true;\r\n-\t\t$courses_price                            = $this->get_courses( $filter_course_price );\r\n-\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmfr ON p.ID = pmfr.post_id\";\r\n-\t\t$filter->where[] = 'AND ID NOT IN( ' . $courses_price . ' )';\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses has price\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.2\r\n-\t *\u002F\r\n-\tpublic function get_courses_sort_by_paid( LP_Course_Filter $filter ): LP_Course_Filter {\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmp ON p.ID = pmp.post_id\";\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmp.meta_key = %s AND pmp.meta_value > %d', '_lp_price', 0 );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is on feature\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return  LP_Course_Filter\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.5\r\n-\t *\u002F\r\n-\tpublic function get_courses_sort_by_feature( LP_Course_Filter &$filter ): LP_Course_Filter {\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmf ON p.ID = pmf.post_id\";\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_key = %s', '_lp_featured' );\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_value = %s', 'yes' );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count total courses free on category\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function count_course_free( LP_Course_Filter $filter ): int {\r\n-\t\t$count = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter->only_fields = [ 'COUNT( DISTINCT(ID) )' ];\r\n-\t\t\t$filter->order_by    = ''; \u002F\u002F Must set to empty to avoid error from param Request\r\n-\t\t\t$this->get_courses_sort_by_free( $filter );\r\n-\t\t\t$filter->return_string_query = true;\r\n-\t\t\t$query_count                 = $this->get_courses( $filter, $count );\r\n-\t\t\t$count                       = $this->wpdb->get_var( $query_count );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn (int) $count;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is on popular\r\n-\t * Use \"UNION\" to merge 2 query\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return  LP_Course_Filter\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.1.6\r\n-\t * @author minhpd\r\n-\t *\u002F\r\n-\tpublic function get_courses_order_by_popular( LP_Course_Filter &$filter ): LP_Course_Filter {\r\n-\t\t\u002F\u002F Set list name columns get\r\n-\t\t\u002F\u002F$columns_table_posts = $this->get_cols_of_table( $this->tb_posts );\r\n-\t\t\u002F\u002F$filter->fields      = array_merge( $columns_table_posts, $filter->fields );\r\n-\r\n-\t\t$filter_user_course       = clone $filter;\r\n-\t\t$filter_course_not_attend = clone $filter;\r\n-\r\n-\t\t\u002F\u002F Query get users total attend courses\r\n-\t\t$fields_user_course_require = [ 'ID', 'COUNT(ID) AS total' ];\r\n-\t\t$filter_user_course->fields = array( 'ID', 'COUNT(ID) AS total' );\r\n-\t\tif ( ! empty( $filter_user_course->only_fields ) ) {\r\n-\t\t\t$pattern = '#ID.*#';\r\n-\t\t\tforeach ( $filter_user_course->only_fields as $k => $field ) {\r\n-\t\t\t\tif ( preg_match( $pattern, $field ) ) {\r\n-\t\t\t\t\tunset( $filter_user_course->only_fields[ $k ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$filter_user_course->only_fields = array_unique( array_merge( $filter_user_course->only_fields, $fields_user_course_require ) );\r\n-\t\t}\r\n-\r\n-\t\t$filter_user_course->join[]              = \"INNER JOIN {$this->tb_lp_user_items} AS ui ON p.ID = ui.item_id\";\r\n-\t\t$filter_user_course->where[]             = $this->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\r\n-\t\t$filter_user_course->where[]             = $this->wpdb->prepare(\r\n-\t\t\t'AND (status = %s OR status = %s OR status = %s)',\r\n-\t\t\tLP_COURSE_ENROLLED,\r\n-\t\t\tLP_COURSE_PURCHASED,\r\n-\t\t\tLP_COURSE_FINISHED\r\n-\t\t);\r\n-\t\t$filter_user_course->group_by            = 'p.ID';\r\n-\t\t$filter_user_course->order_by            = '';\r\n-\t\t$filter_user_course->return_string_query = true;\r\n-\t\t$query_user_course                       = LP_Course_DB::getInstance()->get_courses( $filter_user_course );\r\n-\r\n-\t\t\u002F\u002F Query get courses not attend\r\n-\t\t$filter_user_course_cl              = clone $filter_user_course;\r\n-\t\t$filter_user_course_cl->only_fields = array( 'ID' );\r\n-\t\t$query_user_course_for_not_in       = LP_Course_DB::getInstance()->get_courses( $filter_user_course_cl );\r\n-\r\n-\t\t$fields_user_course_not_attend_require = [ 'ID', '0 AS total' ];\r\n-\t\t$filter_course_not_attend->fields      = [ 'ID', '0 AS total' ];\r\n-\t\tif ( ! empty( $filter_course_not_attend->only_fields ) ) {\r\n-\t\t\t$pattern = '#ID.*#';\r\n-\t\t\tforeach ( $filter_course_not_attend->only_fields as $k => $field ) {\r\n-\t\t\t\tif ( preg_match( $pattern, $field ) ) {\r\n-\t\t\t\t\tunset( $filter_course_not_attend->only_fields[ $k ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$filter_course_not_attend->only_fields = array_unique( array_merge( $filter_course_not_attend->only_fields, $fields_user_course_not_attend_require ) );\r\n-\t\t}\r\n-\t\t$filter_course_not_attend->where[] = 'AND p.ID NOT IN(' . $query_user_course_for_not_in . ')';\r\n-\r\n-\t\t$filter_course_not_attend->order_by            = '';\r\n-\t\t$filter_course_not_attend->return_string_query = true;\r\n-\t\t$query_course_not_attend                       = LP_Course_DB::getInstance()->get_courses( $filter_course_not_attend );\r\n-\r\n-\t\t$filter->union[]  = $query_user_course;\r\n-\t\t$filter->union[]  = $query_course_not_attend;\r\n-\t\t$filter->order_by = 'total';\r\n-\t\t$filter->order    = 'DESC';\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total courses of Author\r\n-\t *\r\n-\t * @param int $author_id\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.6\r\n-\t * @deprecated 4.2.6.6 not use anywhere\r\n-\t *\u002F\r\n-\tpublic function count_courses_publish_of_author( int $author_id ): LP_Course_Filter {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.6' );\r\n-\t\t$filter_course              = new LP_Course_Filter();\r\n-\t\t$filter_course->only_fields = array( 'ID' );\r\n-\t\t$filter_course->post_author = $author_id;\r\n-\t\t$filter_course->post_status = 'publish';\r\n-\t\t$filter_course->field_count = 'ID';\r\n-\t\t$filter_course->query_count = true;\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-users-attend-courses-of-author', $filter_course );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total courses of Author\r\n-\t *\r\n-\t * @param int $author_id\r\n-\t * @param array $status\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function count_courses_of_author( int $author_id, array $status = [] ): LP_Course_Filter {\r\n-\t\t$filter_course              = new LP_Course_Filter();\r\n-\t\t$filter_course->only_fields = array( 'ID' );\r\n-\t\t$filter_course->post_author = $author_id;\r\n-\t\t$filter_course->post_status = $status;\r\n-\t\tif ( empty( $status ) ) {\r\n-\t\t\t$filter_course->post_status = [];\r\n-\t\t}\r\n-\t\t$filter_course->field_count = 'ID';\r\n-\t\t$filter_course->query_count = true;\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-courses-of-author', $filter_course );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get child categories of category and add to query OR\r\n-\t *\r\n-\t * @param array $term_ids\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.6.5\r\n-\t *\u002F\r\n-\tpublic function recursion_sub_categories( array $term_ids ): array {\r\n-\t\t$total_found                           = 0;\r\n-\t\t$term_ids_format                       = join( ',', $term_ids );\r\n-\t\t$filter_sub_category                   = new LP_Filter();\r\n-\t\t$filter_sub_category->collection       = $this->tb_term_taxonomy;\r\n-\t\t$filter_sub_category->collection_alias = 'tx';\r\n-\t\t$filter_sub_category->field_count      = 'tx.term_id';\r\n-\t\t$filter_sub_category->only_fields      = [ 'term_id' ];\r\n-\t\t$filter_sub_category->where[]          = \"AND tx.parent IN ($term_ids_format)\";\r\n-\t\t$filter_sub_category->limit            = -1;\r\n-\t\t$query_sub_category                    = $this->execute( $filter_sub_category, $total_found );\r\n-\t\t$term_sub_ids                          = [];\r\n-\r\n-\t\tif ( $total_found > 0 ) {\r\n-\t\t\tforeach ( $query_sub_category as $term_id ) {\r\n-\t\t\t\t$term_sub_ids[] = $term_id->term_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$term_sub_idss = $this->recursion_sub_categories( $term_sub_ids );\r\n-\t\t\t$term_sub_ids  = array_merge( $term_sub_ids, $term_sub_idss );\r\n-\t\t}\r\n-\r\n-\t\treturn array_merge( $term_ids, $term_sub_ids );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_DB\n+ *\n+ * @author tungnx\n+ * @since 3.2.7.5\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Course_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get course_id of item\n+\t *\n+\t * item type lp_lesson, lp_quiz\n+\t *\n+\t * @param int $item_id\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_course_by_item_id( $item_id = 0 ): int {\n+\t\t\u002F\u002F Get cache\n+\t\t$lp_course_cache = LP_Course_Cache::instance();\n+\t\t$key_cache       = \"$item_id\u002Fcourse_id_of_item_id\";\n+\t\t$course_id       = $lp_course_cache->get_cache( $key_cache );\n+\n+\t\tif ( ! $course_id ) {\n+\t\t\t$query = $this->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT section_course_id\n+\t\t\t\tFROM {$this->tb_lp_sections} AS s\n+\t\t\t\tINNER JOIN {$this->tb_lp_section_items} AS si\n+\t\t\t\tON si.section_id = s.section_id\n+\t\t\t\tWHERE si.item_id = %d\",\n+\t\t\t\t$item_id\n+\t\t\t);\n+\n+\t\t\t$course_id = (int) $this->wpdb->get_var( $query );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Set cache\n+\t\t\t$lp_course_cache->set_cache( $key_cache, $course_id );\n+\t\t}\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get all item ids' course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return array|object|stdClass[]|null\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_full_sections_and_items_course( int $course_id = 0 ) {\n+\t\t$method_called_to = debug_backtrace()[1]['function'];\n+\n+\t\t\u002F\u002F Check accept call from function 'get_sections_and_items_course_from_db_and_sort'\n+\t\tif ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {\n+\t\t\terror_log( 'You can not call direct this function' );\n+\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT *\n+\t\t\tFROM {$this->tb_lp_section_items} AS si\n+\t\t\tINNER JOIN {$this->tb_lp_sections} AS s\n+\t\t\tON si.section_id = s.section_id\n+\t\t\tINNER JOIN {$this->tb_posts} AS p\n+\t\t\tON si.item_id = p.ID AND p.post_status = 'publish'\n+\t\t\tWHERE section_course_id = %d\n+\t\t\tORDER BY s.section_order\",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$sections_items = $this->wpdb->get_results( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $sections_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get all sections' course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return array|object|stdClass[]|null\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_sections( int $course_id = 0 ) {\n+\t\t$method_called_to = debug_backtrace()[1]['function'];\n+\n+\t\t\u002F\u002F Check accept call from function 'get_sections_and_items_course_from_db_and_sort'\n+\t\tif ( 'get_sections_and_items_course_from_db_and_sort' !== $method_called_to ) {\n+\t\t\terror_log( 'You can not call direct this function' );\n+\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT * FROM {$this->tb_lp_sections}\n+\t\t\tWHERE section_course_id = %d\n+\t\t\tORDER BY section_order\",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$sections_items = $this->wpdb->get_results( $query, OBJECT_K );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $sections_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get user_item_id by order_id, course_id, user_id\n+\t *\n+\t * @param int $order_id\n+\t * @param int $course_id\n+\t * @param int $user_id\n+\t *\n+\t * @return int\n+\t * @deprecated 4.2.6.6 not use anywhere\n+\t *\u002F\n+\tpublic function get_user_item_id( $order_id = 0, $course_id = 0, $user_id = 0 ): int {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.6' );\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT user_item_id\n+\t\t\tFROM {$this->tb_lp_user_items}\n+\t\t\tWHERE ref_type = %s\n+\t\t\tAND ref_id = %d\n+\t\t\tAND item_type = %s\n+\t\t\tAND item_id = %d\n+\t\t\tAND user_id = %d\n+\t\t\t\",\n+\t\t\tLP_ORDER_CPT,\n+\t\t\t$order_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$course_id,\n+\t\t\t$user_id\n+\t\t);\n+\n+\t\treturn (int) $this->wpdb->get_var( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get first item id of course\n+\t *\n+\t * @param int $course_id .\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @since 4.0.0\n+\t * @version 1.0.4\n+\t * @modify 4.1.3\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function get_first_item_id( int $course_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT item_id FROM $this->tb_lp_section_items AS si\n+\t\t\tINNER JOIN $this->tb_lp_sections AS sections\n+\t\t\tON si.section_id = sections.section_id\n+\t\t\tAND sections.section_course_id = %d\n+\t\t\tINNER JOIN $this->tb_posts AS p\n+\t\t\tON si.item_id = p.ID\n+\t\t\tAND p.post_status = 'publish'\n+\t\t\tORDER BY sections.section_order ASC, si.item_order ASC\n+\t\t\tLIMIT %d\n+\t\t\t\",\n+\t\t\t$course_id,\n+\t\t\t1\n+\t\t);\n+\n+\t\t$first_item_id = (int) $this->wpdb->get_var( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $first_item_id;\n+\t}\n+\n+\tpublic function get_recent_courses( LP_Course_Filter $filter ): array {\n+\t\tglobal $wpdb;\n+\n+\t\t$limit = $filter->limit ?? - 1;\n+\t\t$order = ! empty( $filter->order ) ? $filter->order : 'DESC';\n+\n+\t\tif ( $limit \u003C= 0 ) {\n+\t\t\t$limit = 0;\n+\t\t}\n+\n+\t\t$query = apply_filters(\n+\t\t\t'learnpress\u002Fdatabases\u002Fwidgets\u002Frecent_courses',\n+\t\t\t$wpdb->prepare(\n+\t\t\t\t\"SELECT DISTINCT p.ID\n+\t\t\t\t\tFROM $wpdb->posts AS p\n+\t\t\t\t\tWHERE p.post_type = %s\n+\t\t\t\t\tAND p.post_status = %s\n+\t\t\t\t\tORDER BY p.post_date {$order}\n+\t\t\t\t\tLIMIT %d\",\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t'publish',\n+\t\t\t\t$limit\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $wpdb->get_col( $query );\n+\t}\n+\n+\tpublic function get_featured_courses( LP_Course_Filter $filter ): array {\n+\t\tglobal $wpdb;\n+\n+\t\t$limit    = ! empty( $filter->limit ) ? $filter->limit : - 1;\n+\t\t$order_by = ! empty( $filter->order_by ) ? $filter->order_by : 'post_date';\n+\t\t$order    = ! empty( $filter->order ) ? $filter->order : 'DESC';\n+\n+\t\tif ( $limit \u003C 0 ) {\n+\t\t\t$limit = 0;\n+\t\t}\n+\n+\t\t$query = apply_filters(\n+\t\t\t'learnpress\u002Fdatabases\u002Fwidgets\u002Ffeatured_courses',\n+\t\t\t$wpdb->prepare(\n+\t\t\t\t\"SELECT DISTINCT p.ID\n+\t\t\t\tFROM {$wpdb->posts} p\n+\t\t\t\tLEFT JOIN {$wpdb->postmeta} as pmeta ON p.ID=pmeta.post_id AND pmeta.meta_key = %s\n+\t\t\t\tWHERE p.post_type = %s\n+\t\t\t\t\tAND p.post_status = %s\n+\t\t\t\t\tAND pmeta.meta_value = %s\n+\t\t\t\tORDER BY p.{$order_by} {$order}\n+\t\t\t\tLIMIT %d\",\n+\t\t\t\t'_lp_featured',\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t'publish',\n+\t\t\t\t'yes',\n+\t\t\t\t$limit\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $wpdb->get_col( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get list user ids enrolled by course\n+\t *\n+\t * @return array|object|null\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t * @since 4.1.3.1\n+\t *\u002F\n+\tpublic function get_user_ids_enrolled( int $course_id ) {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\t\tSELECT DISTINCT user_id FROM {$this->tb_lp_user_items}\n+\t\t\t\tWHERE item_id = %d\n+\t\t\t\tAND item_type = %s\n+\t\t\t\tAND (status = %s OR status = %s )\n+\t\t\t\",\n+\t\t\t$course_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t'enrolled',\n+\t\t\t'finished'\n+\t\t);\n+\n+\t\t$result = $this->wpdb->get_results( $query, OBJECT_K );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Count total user enrolled by course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_total_user_enrolled( int $course_id ): int {\n+\t\t$filter              = new LP_User_Items_Filter();\n+\t\t$filter->only_fields = [ 'DISTINCT(user_id)' ];\n+\t\t$filter->item_id     = $course_id;\n+\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t$filter->field_count = 'ui.user_id';\n+\t\t$filter->join[]      = \"INNER JOIN {$this->tb_users} AS u ON ui.user_id = u.ID\";\n+\t\t$filter->where[]     = 'AND ui.user_id > 0';\n+\t\t$filter->where[]     = $this->wpdb->prepare( 'AND ( ui.status = %s OR ui.status = %s )', LP_COURSE_ENROLLED, LP_COURSE_FINISHED );\n+\t\t$filter->query_count = true;\n+\n+\t\t$total            = 0;\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$lp_user_items_db->get_user_items( $filter, $total );\n+\n+\t\treturn $total;\n+\t}\n+\n+\t\u002F**\n+\t * Count total user enrolled or purchase by course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_total_user_enrolled_or_purchased( int $course_id ): int {\n+\t\t$filter              = new LP_User_Items_Filter();\n+\t\t$filter->only_fields = [ 'DISTINCT(user_id) AS user_id' ];\n+\t\t$filter->item_id     = $course_id;\n+\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t$filter->field_count = 'ui.user_id';\n+\t\t$filter->join[]      = \"INNER JOIN {$this->tb_users} AS u ON ui.user_id = u.ID\";\n+\t\t$filter->where[]     = 'AND ui.user_id > 0';\n+\t\t$filter->where[]     = $this->wpdb->prepare(\n+\t\t\t'AND ( ui.status = %s OR ui.status = %s OR ui.status = %s )',\n+\t\t\tLP_COURSE_ENROLLED,\n+\t\t\tLP_COURSE_FINISHED,\n+\t\t\tLP_COURSE_PURCHASED\n+\t\t);\n+\t\t$filter->query_count = true;\n+\n+\t\t$total            = 0;\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$lp_user_items_db->get_user_items( $filter, $total );\n+\n+\t\treturn $total;\n+\t}\n+\n+\t\u002F**\n+\t * Get total items of course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return null|object\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t *\u002F\n+\tpublic function get_total_items( int $course_id = 0 ) {\n+\t\t$item_types       = CourseModel::item_types_support();\n+\t\t$count_item_types = count( $item_types );\n+\t\t$i                = 0;\n+\n+\t\t$query_count = $this->wpdb->prepare( 'SUM(s.section_course_id = %d) AS count_items,', $course_id );\n+\n+\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t++ $i;\n+\t\t\tif ( $i == $count_item_types ) {\n+\t\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(s.section_course_id = %d AND si.item_type = %s) AS %s', $course_id, $item_type, $item_type );\n+\t\t\t} else {\n+\t\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(s.section_course_id = %d AND si.item_type = %s) AS %s,', $course_id, $item_type, $item_type );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$query = \"\n+\t\t\tSELECT $query_count\n+\t\t\tFROM $this->tb_lp_section_items si\n+\t\t\tINNER JOIN $this->tb_lp_sections s ON s.section_id = si.section_id\n+\t\t\tINNER JOIN $this->tb_posts p ON si.item_id = p.ID\n+\t\t\tAND p.post_status = 'publish'\n+\t\t\t\";\n+\n+\t\t$total_items = $this->wpdb->get_row( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $total_items;\n+\t}\n+\n+\t\u002F**\n+\t * Count all item are unassigned to any courses.\n+\t *\n+\t * @param string $item_type (type item Lesson, Quiz, Assignment, H5P ...)\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @since 4.1.4.1\n+\t *\u002F\n+\tpublic function get_total_item_unassigned( string $item_type ): int {\n+\t\t$filter              = new LP_Post_Type_Filter();\n+\t\t$filter->post_type   = $item_type;\n+\t\t$filter->query_count = true;\n+\t\t$filter->post_status = array();\n+\t\t$filter->field_count = 'p.ID';\n+\n+\t\treturn $this->get_item_ids_unassigned( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * list id item are unassigned to any courses.\n+\t *\n+\t * @param LP_Post_Type_Filter|mixed $filter\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t * @since 4.1.6\n+\t *\u002F\n+\tpublic function get_item_ids_unassigned( $filter = null ) {\n+\t\tif ( is_null( $filter ) ) {\n+\t\t\t$filter = new LP_Post_Type_Filter();\n+\t\t}\n+\n+\t\tif ( ! $filter instanceof LP_Post_Type_Filter ) {\n+\t\t\tthrow new Exception( 'Filter must be instance of LP_Post_Type_Filter' );\n+\t\t}\n+\n+\t\t$filter_section_items                      = new LP_Section_Items_Filter();\n+\t\t$filter_section_items->return_string_query = true;\n+\t\t$filter_section_items->only_fields         = array( 'si.item_id' );\n+\t\t$filter_section_items->where[]             = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->post_type );\n+\t\t$query_item_ids_assigned                   = LP_Section_Items_DB::getInstance()->get_section_items( $filter_section_items );\n+\n+\t\t$filter->only_fields      = array( 'p.ID' );\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = 'p';\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_type = %s', $filter->post_type );\n+\t\t$filter->where[]          = 'AND ID NOT IN(' . $query_item_ids_assigned . ')';\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_status not IN(%s, %s)', 'trash', 'auto-draft' );\n+\n+\t\treturn $this->execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Get Courses\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param int $total_rows return total_rows\n+\t *\n+\t * @return array|object|null|int|string\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @version 1.0.2\n+\t * @since 4.1.5\n+\t *\u002F\n+\tpublic function get_courses( $filter, int &$total_rows = 0 ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_posts;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'p';\n+\t\t}\n+\n+\t\t\u002F\u002F Where\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type = %s', $filter->post_type );\n+\n+\t\t\u002F\u002F Status\n+\t\t$filter->post_status = (array) $filter->post_status;\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND p.post_status IN (' . $post_status_format . ')', $filter->post_status );\n+\t\t}\n+\n+\t\t\u002F\u002F Exclude status auto-draft, because Admin of WP not show auto-draft in list post, so all front-end and back-end of LP also not show auto-draft\n+\t\tif ( ! in_array( 'auto-draft', $filter->post_status, true ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_status != %s', 'auto-draft' );\n+\t\t}\n+\n+\t\t\u002F\u002F Term ids\n+\t\tif ( ! empty( $filter->term_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize term ids\n+\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term ON p.ID = r_term.object_id\";\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx ON r_term.term_taxonomy_id = tx.term_taxonomy_id\";\n+\n+\t\t\tif ( LP_Settings::get_option( 'get_courses_of_subcategory' ) !== 'yes' ) {\n+\t\t\t\t$term_ids_format = join( ',', $filter->term_ids );\n+\t\t\t\t$filter->where[] = \"AND tx.term_id IN ($term_ids_format)\";\n+\t\t\t} else {\n+\t\t\t\t$term_all        = $this->recursion_sub_categories( $filter->term_ids );\n+\t\t\t\t$term_ids_format = join( ',', $term_all );\n+\t\t\t\t$filter->where[] = \"AND tx.term_id IN ($term_ids_format)\";\n+\t\t\t}\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND tx.taxonomy = %s', LP_COURSE_CATEGORY_TAX );\n+\t\t}\n+\n+\t\t\u002F\u002F Tag ids\n+\t\tif ( ! empty( $filter->tag_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize tag ids\n+\t\t\t$filter->tag_ids = array_map( 'absint', $filter->tag_ids );\n+\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_term_relationships AS r_tag ON p.ID = r_tag.object_id\";\n+\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_term_taxonomy AS tag ON r_tag.term_taxonomy_id = tag.term_taxonomy_id\";\n+\n+\t\t\t$tag_ids_format  = join( ',', $filter->tag_ids );\n+\t\t\t$filter->where[] = \"AND tag.term_id IN ($tag_ids_format)\";\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND tag.taxonomy = %s', LP_COURSE_TAXONOMY_TAG );\n+\t\t}\n+\n+\t\t\u002F\u002F Level\n+\t\tif ( ! empty( $filter->levels ) ) {\n+\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pml ON p.ID = pml.post_id\";\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_key = %s', '_lp_level' );\n+\t\t\t$levels_format   = LP_Helper::db_format_array( $filter->levels, '%s' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_value IN (' . $levels_format . ')', $filter->levels );\n+\t\t}\n+\n+\t\t\u002F\u002F Course type\n+\t\tif ( ! empty( $filter->type ) && $filter->type !== 'all' ) {\n+\t\t\tif ( $filter->type === 'offline' ) {\n+\t\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm_off ON p.ID = pm_off.post_id\";\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_key = %s', '_lp_offline_course' );\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_value = %s', 'yes' );\n+\t\t\t} else {\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t\t\"AND p.ID NOT IN\n+\t\t\t\t\t( SELECT id FROM $this->tb_posts as p1\n+\t\t\t\t\tINNER JOIN $this->tb_postmeta as pm_ol on p1.ID = pm_ol.post_id\n+\t\t\t\t\tWHERE pm_ol.meta_key = %s AND pm_ol.meta_value = %s )\",\n+\t\t\t\t\t'_lp_offline_course',\n+\t\t\t\t\t'yes'\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F course ids\n+\t\tif ( ! empty( $filter->post_ids ) ) {\n+\t\t\t$list_ids_format = LP_Helper::db_format_array( $filter->post_ids, '%d' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.ID IN (' . $list_ids_format . ')', $filter->post_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Title, do not distinguish diacritics\n+\t\tif ( $filter->post_title ) {\n+\t\t\t\u002F\u002F$filter->where[] = $this->wpdb->prepare( 'AND p.post_title COLLATE utf8mb4_unicode_ci LIKE %s', '%' . $filter->post_title . '%' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_title LIKE %s', '%' .$filter->post_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Slug\n+\t\tif ( $filter->post_name ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_name = %s', $filter->post_name );\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\tif ( isset( $filter->post_author ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_author = %d', $filter->post_author );\n+\t\t}\n+\t\t\u002F\u002F Authors\n+\t\tif ( ! empty( $filter->post_authors ) ) {\n+\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( 'AND p.post_author IN (' . $post_authors_format . ')', $filter->post_authors );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fcourse\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses sort by price\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return LP_Course_Filter\n+\t * @since 4.1.5\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_courses_order_by_price( LP_Course_Filter &$filter ): LP_Course_Filter {\n+\t\t$filter->join[]   = \"INNER JOIN $this->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$filter->where[]  = $this->wpdb->prepare( 'AND pm.meta_key = %s', '_lp_price' );\n+\t\t$filter->order_by = 'CAST( pm.meta_value AS UNSIGNED )';\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is on sale\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return  LP_Course_Filter\n+\t * @since 4.1.5\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_courses_sort_by_sale( LP_Course_Filter &$filter ): LP_Course_Filter {\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm.meta_key = %s', '_lp_course_is_sale' );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is Free\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return  LP_Course_Filter\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.3.2\n+\t *\u002F\n+\tpublic function get_courses_sort_by_free( LP_Course_Filter &$filter ): LP_Course_Filter {\n+\t\t$filter_course_price                      = new LP_Course_Filter();\n+\t\t$filter_course_price->only_fields         = [ 'DISTINCT(ID)' ];\n+\t\t$filter_course_price                      = $this->get_courses_sort_by_paid( $filter_course_price );\n+\t\t$filter_course_price->return_string_query = true;\n+\t\t$courses_price                            = $this->get_courses( $filter_course_price );\n+\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmfr ON p.ID = pmfr.post_id\";\n+\t\t$filter->where[] = 'AND ID NOT IN( ' . $courses_price . ' )';\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses has price\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return LP_Course_Filter\n+\t * @version 1.0.0\n+\t * @since 4.2.3.2\n+\t *\u002F\n+\tpublic function get_courses_sort_by_paid( LP_Course_Filter $filter ): LP_Course_Filter {\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmp ON p.ID = pmp.post_id\";\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmp.meta_key = %s AND pmp.meta_value > %d', '_lp_price', 0 );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is on feature\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return  LP_Course_Filter\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t * @since 4.1.5\n+\t *\u002F\n+\tpublic function get_courses_sort_by_feature( LP_Course_Filter &$filter ): LP_Course_Filter {\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmf ON p.ID = pmf.post_id\";\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_key = %s', '_lp_featured' );\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_value = %s', 'yes' );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Count total courses free on category\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return int\n+\t * @since 4.2.5.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function count_course_free( LP_Course_Filter $filter ): int {\n+\t\t$count = 0;\n+\n+\t\ttry {\n+\t\t\t$filter->only_fields = [ 'COUNT( DISTINCT(ID) )' ];\n+\t\t\t$filter->order_by    = ''; \u002F\u002F Must set to empty to avoid error from param Request\n+\t\t\t$this->get_courses_sort_by_free( $filter );\n+\t\t\t$filter->return_string_query = true;\n+\t\t\t$query_count                 = $this->get_courses( $filter, $count );\n+\t\t\t$count                       = $this->wpdb->get_var( $query_count );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn (int) $count;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is on popular\n+\t * Use \"UNION\" to merge 2 query\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return  LP_Course_Filter\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.1.6\n+\t * @author minhpd\n+\t *\u002F\n+\tpublic function get_courses_order_by_popular( LP_Course_Filter &$filter ): LP_Course_Filter {\n+\t\t\u002F\u002F Set list name columns get\n+\t\t\u002F\u002F$columns_table_posts = $this->get_cols_of_table( $this->tb_posts );\n+\t\t\u002F\u002F$filter->fields      = array_merge( $columns_table_posts, $filter->fields );\n+\n+\t\t$filter_user_course       = clone $filter;\n+\t\t$filter_course_not_attend = clone $filter;\n+\n+\t\t\u002F\u002F Query get users total attend courses\n+\t\t$fields_user_course_require = [ 'ID', 'COUNT(ID) AS total' ];\n+\t\t$filter_user_course->fields = array( 'ID', 'COUNT(ID) AS total' );\n+\t\tif ( ! empty( $filter_user_course->only_fields ) ) {\n+\t\t\t$pattern = '#ID.*#';\n+\t\t\tforeach ( $filter_user_course->only_fields as $k => $field ) {\n+\t\t\t\tif ( preg_match( $pattern, $field ) ) {\n+\t\t\t\t\tunset( $filter_user_course->only_fields[ $k ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$filter_user_course->only_fields = array_unique( array_merge( $filter_user_course->only_fields, $fields_user_course_require ) );\n+\t\t}\n+\n+\t\t$filter_user_course->join[]              = \"INNER JOIN {$this->tb_lp_user_items} AS ui ON p.ID = ui.item_id\";\n+\t\t$filter_user_course->where[]             = $this->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\n+\t\t$filter_user_course->where[]             = $this->wpdb->prepare(\n+\t\t\t'AND (status = %s OR status = %s OR status = %s)',\n+\t\t\tLP_COURSE_ENROLLED,\n+\t\t\tLP_COURSE_PURCHASED,\n+\t\t\tLP_COURSE_FINISHED\n+\t\t);\n+\t\t$filter_user_course->group_by            = 'p.ID';\n+\t\t$filter_user_course->order_by            = '';\n+\t\t$filter_user_course->return_string_query = true;\n+\t\t$query_user_course                       = LP_Course_DB::getInstance()->get_courses( $filter_user_course );\n+\n+\t\t\u002F\u002F Query get courses not attend\n+\t\t$filter_user_course_cl              = clone $filter_user_course;\n+\t\t$filter_user_course_cl->only_fields = array( 'ID' );\n+\t\t$query_user_course_for_not_in       = LP_Course_DB::getInstance()->get_courses( $filter_user_course_cl );\n+\n+\t\t$fields_user_course_not_attend_require = [ 'ID', '0 AS total' ];\n+\t\t$filter_course_not_attend->fields      = [ 'ID', '0 AS total' ];\n+\t\tif ( ! empty( $filter_course_not_attend->only_fields ) ) {\n+\t\t\t$pattern = '#ID.*#';\n+\t\t\tforeach ( $filter_course_not_attend->only_fields as $k => $field ) {\n+\t\t\t\tif ( preg_match( $pattern, $field ) ) {\n+\t\t\t\t\tunset( $filter_course_not_attend->only_fields[ $k ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$filter_course_not_attend->only_fields = array_unique( array_merge( $filter_course_not_attend->only_fields, $fields_user_course_not_attend_require ) );\n+\t\t}\n+\t\t$filter_course_not_attend->where[] = 'AND p.ID NOT IN(' . $query_user_course_for_not_in . ')';\n+\n+\t\t$filter_course_not_attend->order_by            = '';\n+\t\t$filter_course_not_attend->return_string_query = true;\n+\t\t$query_course_not_attend                       = LP_Course_DB::getInstance()->get_courses( $filter_course_not_attend );\n+\n+\t\t$filter->union[]  = $query_user_course;\n+\t\t$filter->union[]  = $query_course_not_attend;\n+\t\t$filter->order_by = 'total';\n+\t\t$filter->order    = 'DESC';\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get total courses of Author\n+\t *\n+\t * @param int $author_id\n+\t *\n+\t * @return LP_Course_Filter\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.1.6\n+\t * @deprecated 4.2.6.6 not use anywhere\n+\t *\u002F\n+\tpublic function count_courses_publish_of_author( int $author_id ): LP_Course_Filter {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.6' );\n+\t\t$filter_course              = new LP_Course_Filter();\n+\t\t$filter_course->only_fields = array( 'ID' );\n+\t\t$filter_course->post_author = $author_id;\n+\t\t$filter_course->post_status = 'publish';\n+\t\t$filter_course->field_count = 'ID';\n+\t\t$filter_course->query_count = true;\n+\n+\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-users-attend-courses-of-author', $filter_course );\n+\t}\n+\n+\t\u002F**\n+\t * Get total courses of Author\n+\t *\n+\t * @param int $author_id\n+\t * @param array $status\n+\t *\n+\t * @return LP_Course_Filter\n+\t * @since 4.2.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function count_courses_of_author( int $author_id, array $status = [] ): LP_Course_Filter {\n+\t\t$filter_course              = new LP_Course_Filter();\n+\t\t$filter_course->only_fields = array( 'ID' );\n+\t\t$filter_course->post_author = $author_id;\n+\t\t$filter_course->post_status = $status;\n+\t\tif ( empty( $status ) ) {\n+\t\t\t$filter_course->post_status = [];\n+\t\t}\n+\t\t$filter_course->field_count = 'ID';\n+\t\t$filter_course->query_count = true;\n+\n+\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-courses-of-author', $filter_course );\n+\t}\n+\n+\t\u002F**\n+\t * Get child categories of category and add to query OR\n+\t *\n+\t * @param array $term_ids\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.6.5\n+\t *\u002F\n+\tpublic function recursion_sub_categories( array $term_ids ): array {\n+\t\t$total_found                           = 0;\n+\t\t$term_ids_format                       = join( ',', $term_ids );\n+\t\t$filter_sub_category                   = new LP_Filter();\n+\t\t$filter_sub_category->collection       = $this->tb_term_taxonomy;\n+\t\t$filter_sub_category->collection_alias = 'tx';\n+\t\t$filter_sub_category->field_count      = 'tx.term_id';\n+\t\t$filter_sub_category->only_fields      = [ 'term_id' ];\n+\t\t$filter_sub_category->where[]          = \"AND tx.parent IN ($term_ids_format)\";\n+\t\t$filter_sub_category->limit            = -1;\n+\t\t$query_sub_category                    = $this->execute( $filter_sub_category, $total_found );\n+\t\t$term_sub_ids                          = [];\n+\n+\t\tif ( $total_found > 0 ) {\n+\t\t\tforeach ( $query_sub_category as $term_id ) {\n+\t\t\t\t$term_sub_ids[] = $term_id->term_id;\n+\t\t\t}\n+\n+\t\t\t$term_sub_idss = $this->recursion_sub_categories( $term_sub_ids );\n+\t\t\t$term_sub_ids  = array_merge( $term_sub_ids, $term_sub_idss );\n+\t\t}\n+\n+\t\treturn array_merge( $term_ids, $term_sub_ids );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-course-json-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-course-json-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-course-json-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-course-json-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,166 +1,166 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_JSON_DB\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Course_JSON_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Courses\r\n-\t *\r\n-\t * @param LP_Course_JSON_Filter $filter\r\n-\t * @param int $total_rows return total_rows\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.6.9\r\n-\t *\u002F\r\n-\tpublic function get_courses( LP_Course_JSON_Filter $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_courses;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'c';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Find ID\r\n-\t\tif ( ! empty( $filter->ID ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Status\r\n-\t\t$filter->post_status = (array) $filter->post_status;\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Term ids\r\n-\t\tif ( ! empty( $filter->term_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize term ids\r\n-\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\r\n-\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\r\n-\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\r\n-\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Course ids\r\n-\t\tif ( ! empty( $filter->post_ids ) ) {\r\n-\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\r\n-\t\t\t$post_ids_format = join( ',', $post_ids );\r\n-\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Title\r\n-\t\tif ( $filter->post_title ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Name(slug)\r\n-\t\tif ( $filter->post_name ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\tif ( $filter->post_author ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Authors\r\n-\t\tif ( ! empty( $filter->post_authors ) ) {\r\n-\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.ID IN (\" . $post_authors_format . ')', $filter->post_authors );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.6.9\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new LP_Course_JSON_Filter();\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->wpdb->insert( $this->tb_lp_courses, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['ID'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid ID!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new LP_Course_JSON_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_courses;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND ID = %d', $data['ID'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_JSON_DB\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Course_JSON_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get Courses\n+\t *\n+\t * @param LP_Course_JSON_Filter $filter\n+\t * @param int $total_rows return total_rows\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.6.9\n+\t *\u002F\n+\tpublic function get_courses( LP_Course_JSON_Filter $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_courses;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'c';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Find ID\n+\t\tif ( ! empty( $filter->ID ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\n+\t\t}\n+\n+\t\t\u002F\u002F Status\n+\t\t$filter->post_status = (array) $filter->post_status;\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\n+\t\t}\n+\n+\t\t\u002F\u002F Term ids\n+\t\tif ( ! empty( $filter->term_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize term ids\n+\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\n+\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\n+\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\n+\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\n+\t\t}\n+\n+\t\t\u002F\u002F Course ids\n+\t\tif ( ! empty( $filter->post_ids ) ) {\n+\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\n+\t\t\t$post_ids_format = join( ',', $post_ids );\n+\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\n+\t\t}\n+\n+\t\t\u002F\u002F Title\n+\t\tif ( $filter->post_title ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Name(slug)\n+\t\tif ( $filter->post_name ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\tif ( $filter->post_author ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\n+\t\t}\n+\n+\t\t\u002F\u002F Authors\n+\t\tif ( ! empty( $filter->post_authors ) ) {\n+\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.ID IN (\" . $post_authors_format . ')', $filter->post_authors );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.6.9\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new LP_Course_JSON_Filter();\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->wpdb->insert( $this->tb_lp_courses, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.6.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['ID'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid ID!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter             = new LP_Course_JSON_Filter();\n+\t\t$filter->collection = $this->tb_lp_courses;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND ID = %d', $data['ID'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,959 +1,959 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Database\r\n- *\r\n- * @author tungnx\r\n- * @since 3.2.7.5\r\n- * @version 2.0.3\r\n- *\u002F\r\n-\r\n-use LearnPress\\Filters\\FilterBase;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Database {\r\n-\tprivate static $_instance;\r\n-\tpublic $wpdb, $tb_users;\r\n-\tpublic $tb_lp_courses;\r\n-\tpublic $tb_lp_user_items, $tb_lp_user_itemmeta;\r\n-\tpublic $tb_posts, $tb_postmeta, $tb_options;\r\n-\tpublic $tb_terms, $tb_term_relationships, $tb_term_taxonomy;\r\n-\tpublic $tb_lp_order_items, $tb_lp_order_itemmeta;\r\n-\tpublic $tb_lp_sections, $tb_lp_section_items;\r\n-\tpublic $tb_lp_quiz_questions;\r\n-\tpublic $tb_lp_user_item_results;\r\n-\tpublic $tb_lp_question_answers;\r\n-\tpublic $tb_lp_question_answermeta;\r\n-\tpublic $tb_lp_upgrade_db;\r\n-\tpublic $tb_lp_sessions;\r\n-\tpublic $tb_lp_files;\r\n-\tpublic $tb_lp_mcp_api_keys;\r\n-\tpublic $tb_thim_cache;\r\n-\tprivate $collate         = '';\r\n-\tpublic $max_index_length = '191';\r\n-\r\n-\tprotected function __construct() {\r\n-\t\t\u002F**\r\n-\t\t * @var wpdb $wpdb\r\n-\t\t *\u002F\r\n-\t\tglobal $wpdb;\r\n-\t\t$prefix = $wpdb->prefix;\r\n-\r\n-\t\t$this->wpdb                      = $wpdb;\r\n-\t\t$this->tb_users                  = $wpdb->users;\r\n-\t\t$this->tb_posts                  = $wpdb->posts;\r\n-\t\t$this->tb_postmeta               = $wpdb->postmeta;\r\n-\t\t$this->tb_options                = $wpdb->options;\r\n-\t\t$this->tb_terms                  = $wpdb->terms;\r\n-\t\t$this->tb_term_relationships     = $wpdb->term_relationships;\r\n-\t\t$this->tb_term_taxonomy          = $wpdb->term_taxonomy;\r\n-\t\t$this->tb_lp_courses             = $prefix . 'learnpress_courses';\r\n-\t\t$this->tb_lp_user_items          = $prefix . 'learnpress_user_items';\r\n-\t\t$this->tb_lp_user_itemmeta       = $prefix . 'learnpress_user_itemmeta';\r\n-\t\t$this->tb_lp_order_items         = $prefix . 'learnpress_order_items';\r\n-\t\t$this->tb_lp_order_itemmeta      = $prefix . 'learnpress_order_itemmeta';\r\n-\t\t$this->tb_lp_section_items       = $prefix . 'learnpress_section_items';\r\n-\t\t$this->tb_lp_sections            = $prefix . 'learnpress_sections';\r\n-\t\t$this->tb_lp_quiz_questions      = $prefix . 'learnpress_quiz_questions';\r\n-\t\t$this->tb_lp_user_item_results   = $prefix . 'learnpress_user_item_results';\r\n-\t\t$this->tb_lp_question_answers    = $prefix . 'learnpress_question_answers';\r\n-\t\t$this->tb_lp_question_answermeta = $prefix . 'learnpress_question_answermeta';\r\n-\t\t$this->tb_lp_upgrade_db          = $prefix . 'learnpress_upgrade_db';\r\n-\t\t$this->tb_lp_sessions            = $prefix . 'learnpress_sessions';\r\n-\t\t$this->tb_lp_files               = $prefix . 'learnpress_files';\r\n-\t\t$this->tb_lp_mcp_api_keys        = $prefix . 'learnpress_mcp_api_keys';\r\n-\t\t$this->tb_thim_cache             = $prefix . 'thim_cache';\r\n-\t\t$this->wpdb->hide_errors();\r\n-\t\t$this->set_collate();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Instance\r\n-\t *\r\n-\t * @return LP_Database\r\n-\t *\u002F\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\tpublic function set_collate() {\r\n-\t\t$collate = '';\r\n-\r\n-\t\tif ( $this->wpdb->has_cap( 'collation' ) ) {\r\n-\t\t\tif ( ! empty( $this->wpdb->charset ) ) {\r\n-\t\t\t\t$collate .= 'DEFAULT CHARACTER SET ' . $this->wpdb->charset;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $this->wpdb->collate ) ) {\r\n-\t\t\t\t$collate .= ' COLLATE ' . $this->wpdb->collate;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->collate = $collate;\r\n-\t}\r\n-\r\n-\tpublic function get_collate(): string {\r\n-\t\treturn $this->collate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total Item by post type and user id\r\n-\t *\r\n-\t * @param LP_Post_Type_Filter $filter\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 3.2.8\r\n-\t * @deprecated 4.2.9.3\r\n-\t *\u002F\r\n-\tpublic function get_count_post_of_user( LP_Post_Type_Filter $filter ): int {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.9.3' );\r\n-\t\treturn 0;\r\n-\r\n-\t\t$query_append = '';\r\n-\r\n-\t\t$cache_key = _count_posts_cache_key( $filter->post_type );\r\n-\r\n-\t\t\u002F\u002F Get cache\r\n-\t\t$counts = wp_cache_get( $cache_key );\r\n-\t\tif ( false !== $counts ) {\r\n-\t\t\treturn $counts;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$query_append .= $this->wpdb->prepare( ' AND post_status = %s', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT Count(ID) FROM $this->tb_posts\r\n-\t\t\tWHERE post_type = %s\r\n-\t\t\tAND post_author = %d\r\n-\t\t\t$query_append\",\r\n-\t\t\t$filter->post_type,\r\n-\t\t\t$filter->post_author\r\n-\t\t);\r\n-\r\n-\t\t$query = apply_filters( 'learnpress\u002Fquery\u002Fget_total_post_of_user', $query );\r\n-\r\n-\t\t$counts = (int) $this->wpdb->get_var( $query );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\twp_cache_set( $cache_key, $counts );\r\n-\r\n-\t\treturn $counts;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post by post_type and slug\r\n-\t *\r\n-\t * @param string $post_type .\r\n-\t * @param string $slug .\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function getPostAuthorByTypeAndSlug( string $post_type = '', string $slug = '' ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT post_author FROM $this->tb_posts\r\n-\t\t\tWHERE post_type = %s\r\n-\t\t\tAND post_name = %s\",\r\n-\t\t\t$post_type,\r\n-\t\t\t$slug\r\n-\t\t);\r\n-\r\n-\t\treturn (int) $this->wpdb->get_var( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table exists.\r\n-\t *\r\n-\t * @param string $name_table\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_table_exists( string $name_table ) {\r\n-\t\treturn $this->wpdb->query( $this->wpdb->prepare( \"SHOW TABLES LIKE '%s'\", $name_table ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clone table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function clone_table( string $name_table ): bool {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$table_bk = $name_table . '_bk';\r\n-\r\n-\t\t\u002F\u002F Drop table bk if exists.\r\n-\t\t$this->drop_table( $table_bk );\r\n-\r\n-\t\t\u002F\u002F Clone table\r\n-\t\t$this->wpdb->query( \"CREATE TABLE $table_bk LIKE $name_table\" );\r\n-\t\t$this->wpdb->query( \"INSERT INTO $table_bk SELECT * FROM $name_table\" );\r\n-\r\n-\t\t\u002F*dbDelta(\r\n-\t\t\t\"CREATE TABLE $table_bk LIKE $name_table;\r\n-\t\t\tINSERT INTO $table_bk SELECT * FROM $name_table;\"\r\n-\t\t);*\u002F\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check column table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_col_table( string $name_table = '', string $name_col = '' ) {\r\n-\t\t$query = $this->wpdb->prepare( \"SHOW COLUMNS FROM $name_table LIKE '%s'\", $name_col );\r\n-\r\n-\t\treturn $this->wpdb->query( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop Column of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_col_table( string $name_table = '', string $name_col = '' ) {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$check_table = $this->check_col_table( $name_table, $name_col );\r\n-\r\n-\t\tif ( $check_table ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table DROP COLUMN $name_col\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add Column of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t * @param string $type .\r\n-\t * @param string $after_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function add_col_table( string $name_table, string $name_col, string $type, string $after_col = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$query_add = '';\r\n-\r\n-\t\t$col_exists = $this->check_col_table( $name_table, $name_col );\r\n-\r\n-\t\tif ( ! empty( $after_col ) ) {\r\n-\t\t\t$query_add .= \"AFTER $after_col\";\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $col_exists ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table ADD COLUMN $name_col $type $query_add\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop Index of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_indexs_table( string $name_table ) {\r\n-\t\t$show_index = \"SHOW INDEX FROM $name_table\";\r\n-\t\t$indexs     = $this->wpdb->get_results( $show_index );\r\n-\r\n-\t\tforeach ( $indexs as $index ) {\r\n-\t\t\tif ( 'PRIMARY' === $index->Key_name || '1' !== $index->Seq_in_index ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = \"ALTER TABLE $name_table DROP INDEX $index->Key_name\";\r\n-\r\n-\t\t\t$this->wpdb->query( $query );\r\n-\t\t\t$this->check_execute_has_error();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add Index of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param array $indexs .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function add_indexs_table( string $name_table, array $indexs ) {\r\n-\t\t$add_index    = '';\r\n-\t\t$count_indexs = count( $indexs ) - 1;\r\n-\r\n-\t\t\u002F\u002F Drop indexs .\r\n-\t\t$this->drop_indexs_table( $name_table );\r\n-\r\n-\t\tforeach ( $indexs as $index ) {\r\n-\t\t\tif ( $count_indexs === array_search( $index, $indexs ) ) {\r\n-\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . ')';\r\n-\t\t\t} else {\r\n-\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . '),';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"ALTER TABLE $name_table\r\n-\t\t\t$add_index\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_table( string $name_table = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check table exists.\r\n-\t\t$tb_exists = $this->check_table_exists( $name_table );\r\n-\t\tif ( $tb_exists ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"DROP TABLE $name_table\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list columns name of table\r\n-\t *\r\n-\t * @param string $name_table\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.6\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function get_cols_of_table( string $name_table ): array {\r\n-\t\t$query = \"SHOW COLUMNS FROM $name_table\";\r\n-\r\n-\t\t$result = $this->wpdb->get_col( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create table learnpress_user_item_results\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_tb_lp_user_item_results() {\r\n-\t\t$collate = $this->get_collate();\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tCREATE TABLE IF NOT EXISTS $this->tb_lp_user_item_results(\r\n-\t\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\r\n-\t\t\t\tresult longtext,\r\n-\t\t\t\tPRIMARY KEY (id),\r\n-\t\t\t\tKEY user_item_id (user_item_id)\r\n-\t\t\t) $collate\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create table learnpress_upgrade_db\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_tb_lp_upgrade_db() {\r\n-\t\t$collate = $this->get_collate();\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tCREATE TABLE IF NOT EXISTS {$this->tb_lp_upgrade_db}(\r\n-\t\t\t\tstep varchar(50) PRIMARY KEY UNIQUE,\r\n-\t\t\t\tstatus varchar(10),\r\n-\t\t\t\tKEY status (status)\r\n-\t\t\t) $collate\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set step completed.\r\n-\t *\r\n-\t * @param string $step .\r\n-\t * @param string $status .\r\n-\t *\r\n-\t * @return int|bool\r\n-\t *\u002F\r\n-\tpublic function set_step_complete( string $step, string $status ) {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->wpdb->insert(\r\n-\t\t\t$this->tb_lp_upgrade_db,\r\n-\t\t\tarray(\r\n-\t\t\t\t'step'   => $step,\r\n-\t\t\t\t'status' => $status,\r\n-\t\t\t),\r\n-\t\t\tarray( '%s', '%s' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get steps completed.\r\n-\t *\r\n-\t * @return array|object|null\r\n-\t *\u002F\r\n-\tpublic function get_steps_completed() {\r\n-\t\treturn $this->wpdb->get_results( \"SELECT step, status FROM {$this->tb_lp_upgrade_db}\", OBJECT_K );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check execute current has any errors.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_execute_has_error() {\r\n-\t\tif ( $this->wpdb->last_error ) {\r\n-\t\t\tthrow new Exception( $this->wpdb->last_error );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Important: Reason need set again indexes for table options of WP\r\n-\t * because if want change value of \"option_name\" will error \"database error Duplicate entry\"\r\n-\t * So before set must drop and add when done all\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.0.3\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function create_indexes_tb_options() {\r\n-\t\t$this->drop_indexs_table( $this->tb_options );\r\n-\t\t$result = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tALTER TABLE $this->tb_options\r\n-\t\t\tADD UNIQUE option_name (option_name),\r\n-\t\t\tADD INDEX autoload (autoload)\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rename table\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.0.3\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function rename_table( string $name_table = '', string $new_name = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$tb_exists = $this->check_table_exists( $name_table );\r\n-\r\n-\t\tif ( ! $tb_exists ) {\r\n-\t\t\tthrow new Exception( 'Table not exists' );\r\n-\t\t}\r\n-\r\n-\t\t$result = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tALTER TABLE $name_table\r\n-\t\t\tRENAME $new_name\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check key postmeta exist on Database\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_key_postmeta_exists( int $post_id = 0, string $key = '' ) {\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT meta_id FROM $this->tb_postmeta\r\n-\t\t\t\tWHERE meta_key = %s\r\n-\t\t\t\tAND post_id = %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$key,\r\n-\t\t\t\t$post_id\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total pages\r\n-\t *\r\n-\t * @param int $limit\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function get_total_pages( int $limit = 0, int $total_rows = 0 ): int {\r\n-\t\tif ( $limit == 0 ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$total_pages = floor( $total_rows \u002F $limit );\r\n-\t\tif ( $total_rows % $limit !== 0 ) {\r\n-\t\t\t++$total_pages;\r\n-\t\t}\r\n-\r\n-\t\treturn (int) $total_pages;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query string single row\r\n-\t *\r\n-\t * @param LP_Filter|FilterBase $filter\r\n-\t *\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_query_single_row( &$filter ) {\r\n-\t\t$filter->limit               = 1;\r\n-\t\t$filter->return_string_query = true;\r\n-\t\t$filter->run_query_count     = false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get result query\r\n-\t *\r\n-\t * @param LP_Filter|FilterBase $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array|object|null|int|string\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.6\r\n-\t *\u002F\r\n-\tpublic function execute( $filter, int &$total_rows = 0 ) {\r\n-\t\t$result = null;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\r\n-\t\t\u002F\u002F Fields select\r\n-\t\t$FIELDS = '*';\r\n-\t\tif ( ! empty( $filter->only_fields ) ) {\r\n-\t\t\t$FIELDS = implode( ',', array_unique( $filter->only_fields ) );\r\n-\t\t} elseif ( ! empty( $filter->fields ) ) {\r\n-\t\t\t\u002F\u002F exclude more fields\r\n-\t\t\tif ( ! empty( $filter->exclude_fields ) ) {\r\n-\t\t\t\tforeach ( $filter->exclude_fields as $field ) {\r\n-\t\t\t\t\t$index_field = array_search( $field, $filter->fields );\r\n-\t\t\t\t\tif ( $index_field ) {\r\n-\t\t\t\t\t\tunset( $filter->fields[ $index_field ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $filter->fields as $key => $field ) {\r\n-\t\t\t\tif ( $field === 'order' ) {\r\n-\t\t\t\t\t\u002F\u002F Replace order with `order` to avoid conflict with SQL reserved word.\r\n-\t\t\t\t\t$filter->fields[ $key ] = '`order`';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$FIELDS = implode( ',', array_unique( $filter->fields ) );\r\n-\t\t}\r\n-\t\t$FIELDS = apply_filters( 'lp\u002Fquery\u002Ffields', $FIELDS, $filter );\r\n-\r\n-\t\t$INNER_JOIN = array();\r\n-\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\r\n-\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Finner_join', $INNER_JOIN, $filter );\r\n-\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\r\n-\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t\u002F\u002F Group by\r\n-\t\t$GROUP_BY = '';\r\n-\t\tif ( $filter->group_by ) {\r\n-\t\t\t$GROUP_BY .= 'GROUP BY ' . $filter->group_by;\r\n-\t\t\t$GROUP_BY  = apply_filters( 'lp\u002Fquery\u002Fgroup_by', $GROUP_BY, $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Order by\r\n-\t\t$ORDER_BY = '';\r\n-\t\tif ( $filter->order_by ) {\r\n-\t\t\t$filter->order = strtoupper( $filter->order );\r\n-\t\t\tif ( ! in_array( $filter->order, [ 'DESC', 'ASC' ] ) ) {\r\n-\t\t\t\t$filter->order = 'DESC';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$ORDER_BY .= 'ORDER BY ' . $filter->order_by . ' ' . $filter->order . ' ';\r\n-\t\t\t$ORDER_BY  = apply_filters( 'lp\u002Fquery\u002Forder_by', $ORDER_BY, $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Limit\r\n-\t\t$LIMIT = '';\r\n-\t\tif ( $filter->limit != - 1 ) {\r\n-\t\t\t$filter->limit = absint( $filter->limit );\r\n-\t\t\t\u002F*if ( $filter->limit > $filter->max_limit ) {\r\n-\t\t\t\t$filter->limit = $filter->max_limit;\r\n-\t\t\t}*\u002F\r\n-\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\r\n-\t\t\t$LIMIT  = $this->wpdb->prepare( 'LIMIT %d, %d', $offset, $filter->limit );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F For nest query\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\t$LIMIT = '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F From table or group select\r\n-\t\t$COLLECTION = '';\r\n-\t\tif ( ! empty( $filter->collection ) ) {\r\n-\t\t\t$COLLECTION = $filter->collection;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Alias table\r\n-\t\t$ALIAS_COLLECTION = 'X';\r\n-\t\tif ( ! empty( $filter->collection_alias ) ) {\r\n-\t\t\t$ALIAS_COLLECTION = $filter->collection_alias;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query\r\n-\t\t$query = \"SELECT $FIELDS FROM $COLLECTION AS $ALIAS_COLLECTION\r\n-\t\t$INNER_JOIN\r\n-\t\t$WHERE\r\n-\t\t$GROUP_BY\r\n-\t\t$ORDER_BY\r\n-\t\t$LIMIT\r\n-\t\t\";\r\n-\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\treturn $query;\r\n-\t\t} elseif ( ! empty( $filter->union ) ) {\r\n-\t\t\t$query  = implode( ' UNION ', array_unique( $filter->union ) );\r\n-\t\t\t$query .= $GROUP_BY;\r\n-\t\t\t$query .= $ORDER_BY;\r\n-\t\t\t$query .= $LIMIT;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $filter->query_count ) {\r\n-\t\t\t\u002F\u002F Debug string query\r\n-\t\t\tif ( $filter->debug_string_query ) {\r\n-\t\t\t\treturn $query;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result = $this->wpdb->get_results( $query );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query total rows\r\n-\t\tif ( $filter->run_query_count ) {\r\n-\t\t\t$query       = str_replace( array( $LIMIT, $ORDER_BY ), '', $query );\r\n-\t\t\t$query_total = \"SELECT COUNT($filter->field_count) FROM ($query) AS $ALIAS_COLLECTION\";\r\n-\t\t\t$total_rows  = (int) $this->wpdb->get_var( $query_total );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\tif ( $filter->query_count ) {\r\n-\t\t\t\t\u002F\u002F Debug string query\r\n-\t\t\t\tif ( $filter->debug_string_query ) {\r\n-\t\t\t\t\treturn $query_total;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $total_rows;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query update\r\n-\t *\r\n-\t * @param LP_Filter|FilterBase $filter\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_execute( $filter ) {\r\n-\r\n-\t\t$COLLECTION = $filter->collection;\r\n-\r\n-\t\t\u002F\u002F SET value\r\n-\t\t$SET = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fset', $filter->set, $filter );\r\n-\t\t$SET = implode( ',', array_unique( $SET ) );\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t$query = \"\r\n-\t\t\tUPDATE $COLLECTION\r\n-\t\t\tSET $SET\r\n-\t\t\t$WHERE\r\n-\t\t\";\r\n-\r\n-\t\t$result = $this->wpdb->query( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query delete\r\n-\t *\r\n-\t * @param LP_Filter|FilterBase $filter\r\n-\t * @param string $table\r\n-\t *\r\n-\t * @return bool|int|mysqli_result|string|null\r\n-\t * @throws Exception\r\n-\t * @since 4.1.7\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function delete_execute( $filter, string $table = '' ) {\r\n-\t\t$COLLECTION = $filter->collection;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t\u002F\u002F Join\r\n-\t\t$INNER_JOIN = array();\r\n-\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\r\n-\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Finner_join', $INNER_JOIN, $filter );\r\n-\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\r\n-\r\n-\t\t$query = \"\r\n-\t\t\tDELETE $table FROM $COLLECTION\r\n-\t\t\t$INNER_JOIN\r\n-\t\t\t$WHERE\r\n-\t\t\";\r\n-\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\treturn $query;\r\n-\t\t}\r\n-\r\n-\t\t$result = $this->wpdb->query( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get values of list object by key\r\n-\t *\r\n-\t * @param array $arr_object\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_values_by_key( array $arr_object, string $key = 'ID' ): array {\r\n-\t\t$arr_object_ids = array();\r\n-\t\tforeach ( $arr_object as $object ) {\r\n-\t\t\t$arr_object_ids[] = $object->{$key};\r\n-\t\t}\r\n-\r\n-\t\treturn $arr_object_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.9\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $args ): int {\r\n-\t\t$data               = $args['data'] ?? [];\r\n-\t\t$filter             = $args['filter'] ?? null;\r\n-\t\t$table_name         = $args['table_name'] ?? '';\r\n-\t\t$key_auto_increment = $args['key_auto_increment'] ?? '';\r\n-\t\t$key_auto_increment = sanitize_key( $key_auto_increment );\r\n-\r\n-\t\tif ( empty( $data ) || ! is_array( $data ) ) {\r\n-\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*if ( ! $filter instanceof LP_Filter ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->all_fields ) ) {\r\n-\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $table_name ) ) {\r\n-\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $key_auto_increment ) || ! is_string( $key_auto_increment ) ) {\r\n-\t\t\tthrow new Exception( __( 'Key auto increment must be a string!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F unset key is auto increment.\r\n-\t\tunset( $data[ $key_auto_increment ] );\r\n-\r\n-\t\t$this->wpdb->insert( $table_name, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_data( array $args ): bool {\r\n-\t\t$data       = $args['data'] ?? [];\r\n-\t\t$filter     = $args['filter'] ?? null;\r\n-\t\t$table_name = $args['table_name'] ?? '';\r\n-\t\t$where_key  = $args['where_key'] ?? '';\r\n-\t\t$where_key  = sanitize_key( $where_key );\r\n-\r\n-\t\t\u002F*if ( ! $filter instanceof LP_Filter ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->all_fields ) ) {\r\n-\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $data ) || ! is_array( $data ) ) {\r\n-\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $where_key ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid where key!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $table_name ) ) {\r\n-\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter->collection = $table_name;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Key `order` is reserved keyword in MySQL\r\n-\t\t\tif ( $col_name === 'order' ) {\r\n-\t\t\t\t$col_name = '`order`';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( \"AND $where_key = %d\", $data[ $where_key ] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Database\n+ *\n+ * @author tungnx\n+ * @since 3.2.7.5\n+ * @version 2.0.3\n+ *\u002F\n+\n+use LearnPress\\Filters\\FilterBase;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Database {\n+\tprivate static $_instance;\n+\tpublic $wpdb, $tb_users;\n+\tpublic $tb_lp_courses;\n+\tpublic $tb_lp_user_items, $tb_lp_user_itemmeta;\n+\tpublic $tb_posts, $tb_postmeta, $tb_options;\n+\tpublic $tb_terms, $tb_term_relationships, $tb_term_taxonomy;\n+\tpublic $tb_lp_order_items, $tb_lp_order_itemmeta;\n+\tpublic $tb_lp_sections, $tb_lp_section_items;\n+\tpublic $tb_lp_quiz_questions;\n+\tpublic $tb_lp_user_item_results;\n+\tpublic $tb_lp_question_answers;\n+\tpublic $tb_lp_question_answermeta;\n+\tpublic $tb_lp_upgrade_db;\n+\tpublic $tb_lp_sessions;\n+\tpublic $tb_lp_files;\n+\tpublic $tb_lp_mcp_api_keys;\n+\tpublic $tb_thim_cache;\n+\tprivate $collate         = '';\n+\tpublic $max_index_length = '191';\n+\n+\tprotected function __construct() {\n+\t\t\u002F**\n+\t\t * @var wpdb $wpdb\n+\t\t *\u002F\n+\t\tglobal $wpdb;\n+\t\t$prefix = $wpdb->prefix;\n+\n+\t\t$this->wpdb                      = $wpdb;\n+\t\t$this->tb_users                  = $wpdb->users;\n+\t\t$this->tb_posts                  = $wpdb->posts;\n+\t\t$this->tb_postmeta               = $wpdb->postmeta;\n+\t\t$this->tb_options                = $wpdb->options;\n+\t\t$this->tb_terms                  = $wpdb->terms;\n+\t\t$this->tb_term_relationships     = $wpdb->term_relationships;\n+\t\t$this->tb_term_taxonomy          = $wpdb->term_taxonomy;\n+\t\t$this->tb_lp_courses             = $prefix . 'learnpress_courses';\n+\t\t$this->tb_lp_user_items          = $prefix . 'learnpress_user_items';\n+\t\t$this->tb_lp_user_itemmeta       = $prefix . 'learnpress_user_itemmeta';\n+\t\t$this->tb_lp_order_items         = $prefix . 'learnpress_order_items';\n+\t\t$this->tb_lp_order_itemmeta      = $prefix . 'learnpress_order_itemmeta';\n+\t\t$this->tb_lp_section_items       = $prefix . 'learnpress_section_items';\n+\t\t$this->tb_lp_sections            = $prefix . 'learnpress_sections';\n+\t\t$this->tb_lp_quiz_questions      = $prefix . 'learnpress_quiz_questions';\n+\t\t$this->tb_lp_user_item_results   = $prefix . 'learnpress_user_item_results';\n+\t\t$this->tb_lp_question_answers    = $prefix . 'learnpress_question_answers';\n+\t\t$this->tb_lp_question_answermeta = $prefix . 'learnpress_question_answermeta';\n+\t\t$this->tb_lp_upgrade_db          = $prefix . 'learnpress_upgrade_db';\n+\t\t$this->tb_lp_sessions            = $prefix . 'learnpress_sessions';\n+\t\t$this->tb_lp_files               = $prefix . 'learnpress_files';\n+\t\t$this->tb_lp_mcp_api_keys        = $prefix . 'learnpress_mcp_api_keys';\n+\t\t$this->tb_thim_cache             = $prefix . 'thim_cache';\n+\t\t$this->wpdb->hide_errors();\n+\t\t$this->set_collate();\n+\t}\n+\n+\t\u002F**\n+\t * Get Instance\n+\t *\n+\t * @return LP_Database\n+\t *\u002F\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\tpublic function set_collate() {\n+\t\t$collate = '';\n+\n+\t\tif ( $this->wpdb->has_cap( 'collation' ) ) {\n+\t\t\tif ( ! empty( $this->wpdb->charset ) ) {\n+\t\t\t\t$collate .= 'DEFAULT CHARACTER SET ' . $this->wpdb->charset;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $this->wpdb->collate ) ) {\n+\t\t\t\t$collate .= ' COLLATE ' . $this->wpdb->collate;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->collate = $collate;\n+\t}\n+\n+\tpublic function get_collate(): string {\n+\t\treturn $this->collate;\n+\t}\n+\n+\t\u002F**\n+\t * Get total Item by post type and user id\n+\t *\n+\t * @param LP_Post_Type_Filter $filter\n+\t *\n+\t * @return int\n+\t * @since 3.2.8\n+\t * @deprecated 4.2.9.3\n+\t *\u002F\n+\tpublic function get_count_post_of_user( LP_Post_Type_Filter $filter ): int {\n+\t\t_deprecated_function( __METHOD__, '4.2.9.3' );\n+\t\treturn 0;\n+\n+\t\t$query_append = '';\n+\n+\t\t$cache_key = _count_posts_cache_key( $filter->post_type );\n+\n+\t\t\u002F\u002F Get cache\n+\t\t$counts = wp_cache_get( $cache_key );\n+\t\tif ( false !== $counts ) {\n+\t\t\treturn $counts;\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$query_append .= $this->wpdb->prepare( ' AND post_status = %s', $filter->post_status );\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT Count(ID) FROM $this->tb_posts\n+\t\t\tWHERE post_type = %s\n+\t\t\tAND post_author = %d\n+\t\t\t$query_append\",\n+\t\t\t$filter->post_type,\n+\t\t\t$filter->post_author\n+\t\t);\n+\n+\t\t$query = apply_filters( 'learnpress\u002Fquery\u002Fget_total_post_of_user', $query );\n+\n+\t\t$counts = (int) $this->wpdb->get_var( $query );\n+\n+\t\t\u002F\u002F Set cache\n+\t\twp_cache_set( $cache_key, $counts );\n+\n+\t\treturn $counts;\n+\t}\n+\n+\t\u002F**\n+\t * Get post by post_type and slug\n+\t *\n+\t * @param string $post_type .\n+\t * @param string $slug .\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function getPostAuthorByTypeAndSlug( string $post_type = '', string $slug = '' ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT post_author FROM $this->tb_posts\n+\t\t\tWHERE post_type = %s\n+\t\t\tAND post_name = %s\",\n+\t\t\t$post_type,\n+\t\t\t$slug\n+\t\t);\n+\n+\t\treturn (int) $this->wpdb->get_var( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Check table exists.\n+\t *\n+\t * @param string $name_table\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_table_exists( string $name_table ) {\n+\t\treturn $this->wpdb->query( $this->wpdb->prepare( \"SHOW TABLES LIKE '%s'\", $name_table ) );\n+\t}\n+\n+\t\u002F**\n+\t * Clone table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function clone_table( string $name_table ): bool {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$table_bk = $name_table . '_bk';\n+\n+\t\t\u002F\u002F Drop table bk if exists.\n+\t\t$this->drop_table( $table_bk );\n+\n+\t\t\u002F\u002F Clone table\n+\t\t$this->wpdb->query( \"CREATE TABLE $table_bk LIKE $name_table\" );\n+\t\t$this->wpdb->query( \"INSERT INTO $table_bk SELECT * FROM $name_table\" );\n+\n+\t\t\u002F*dbDelta(\n+\t\t\t\"CREATE TABLE $table_bk LIKE $name_table;\n+\t\t\tINSERT INTO $table_bk SELECT * FROM $name_table;\"\n+\t\t);*\u002F\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check column table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_col_table( string $name_table = '', string $name_col = '' ) {\n+\t\t$query = $this->wpdb->prepare( \"SHOW COLUMNS FROM $name_table LIKE '%s'\", $name_col );\n+\n+\t\treturn $this->wpdb->query( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Drop Column of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_col_table( string $name_table = '', string $name_col = '' ) {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$check_table = $this->check_col_table( $name_table, $name_col );\n+\n+\t\tif ( $check_table ) {\n+\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table DROP COLUMN $name_col\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Add Column of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t * @param string $type .\n+\t * @param string $after_col .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function add_col_table( string $name_table, string $name_col, string $type, string $after_col = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$query_add = '';\n+\n+\t\t$col_exists = $this->check_col_table( $name_table, $name_col );\n+\n+\t\tif ( ! empty( $after_col ) ) {\n+\t\t\t$query_add .= \"AFTER $after_col\";\n+\t\t}\n+\n+\t\tif ( ! $col_exists ) {\n+\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table ADD COLUMN $name_col $type $query_add\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Drop Index of Table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_indexs_table( string $name_table ) {\n+\t\t$show_index = \"SHOW INDEX FROM $name_table\";\n+\t\t$indexs     = $this->wpdb->get_results( $show_index );\n+\n+\t\tforeach ( $indexs as $index ) {\n+\t\t\tif ( 'PRIMARY' === $index->Key_name || '1' !== $index->Seq_in_index ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$query = \"ALTER TABLE $name_table DROP INDEX $index->Key_name\";\n+\n+\t\t\t$this->wpdb->query( $query );\n+\t\t\t$this->check_execute_has_error();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add Index of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param array $indexs .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function add_indexs_table( string $name_table, array $indexs ) {\n+\t\t$add_index    = '';\n+\t\t$count_indexs = count( $indexs ) - 1;\n+\n+\t\t\u002F\u002F Drop indexs .\n+\t\t$this->drop_indexs_table( $name_table );\n+\n+\t\tforeach ( $indexs as $index ) {\n+\t\t\tif ( $count_indexs === array_search( $index, $indexs ) ) {\n+\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . ')';\n+\t\t\t} else {\n+\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . '),';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"ALTER TABLE $name_table\n+\t\t\t$add_index\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Drop table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_table( string $name_table = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t\u002F\u002F Check table exists.\n+\t\t$tb_exists = $this->check_table_exists( $name_table );\n+\t\tif ( $tb_exists ) {\n+\t\t\t$execute = $this->wpdb->query( \"DROP TABLE $name_table\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get list columns name of table\n+\t *\n+\t * @param string $name_table\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.1.6\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function get_cols_of_table( string $name_table ): array {\n+\t\t$query = \"SHOW COLUMNS FROM $name_table\";\n+\n+\t\t$result = $this->wpdb->get_col( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Create table learnpress_user_item_results\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_tb_lp_user_item_results() {\n+\t\t$collate = $this->get_collate();\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tCREATE TABLE IF NOT EXISTS $this->tb_lp_user_item_results(\n+\t\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\n+\t\t\t\tresult longtext,\n+\t\t\t\tPRIMARY KEY (id),\n+\t\t\t\tKEY user_item_id (user_item_id)\n+\t\t\t) $collate\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Create table learnpress_upgrade_db\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_tb_lp_upgrade_db() {\n+\t\t$collate = $this->get_collate();\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tCREATE TABLE IF NOT EXISTS {$this->tb_lp_upgrade_db}(\n+\t\t\t\tstep varchar(50) PRIMARY KEY UNIQUE,\n+\t\t\t\tstatus varchar(10),\n+\t\t\t\tKEY status (status)\n+\t\t\t) $collate\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Set step completed.\n+\t *\n+\t * @param string $step .\n+\t * @param string $status .\n+\t *\n+\t * @return int|bool\n+\t *\u002F\n+\tpublic function set_step_complete( string $step, string $status ) {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $this->wpdb->insert(\n+\t\t\t$this->tb_lp_upgrade_db,\n+\t\t\tarray(\n+\t\t\t\t'step'   => $step,\n+\t\t\t\t'status' => $status,\n+\t\t\t),\n+\t\t\tarray( '%s', '%s' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get steps completed.\n+\t *\n+\t * @return array|object|null\n+\t *\u002F\n+\tpublic function get_steps_completed() {\n+\t\treturn $this->wpdb->get_results( \"SELECT step, status FROM {$this->tb_lp_upgrade_db}\", OBJECT_K );\n+\t}\n+\n+\t\u002F**\n+\t * Check execute current has any errors.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_execute_has_error() {\n+\t\tif ( $this->wpdb->last_error ) {\n+\t\t\tthrow new Exception( $this->wpdb->last_error );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Important: Reason need set again indexes for table options of WP\n+\t * because if want change value of \"option_name\" will error \"database error Duplicate entry\"\n+\t * So before set must drop and add when done all\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.0.3\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function create_indexes_tb_options() {\n+\t\t$this->drop_indexs_table( $this->tb_options );\n+\t\t$result = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tALTER TABLE $this->tb_options\n+\t\t\tADD UNIQUE option_name (option_name),\n+\t\t\tADD INDEX autoload (autoload)\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Rename table\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.0.3\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function rename_table( string $name_table = '', string $new_name = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$tb_exists = $this->check_table_exists( $name_table );\n+\n+\t\tif ( ! $tb_exists ) {\n+\t\t\tthrow new Exception( 'Table not exists' );\n+\t\t}\n+\n+\t\t$result = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tALTER TABLE $name_table\n+\t\t\tRENAME $new_name\n+\t\t\t\"\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Check key postmeta exist on Database\n+\t *\n+\t * @param int $post_id\n+\t * @param string $key\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_key_postmeta_exists( int $post_id = 0, string $key = '' ) {\n+\t\treturn $this->wpdb->query(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT meta_id FROM $this->tb_postmeta\n+\t\t\t\tWHERE meta_key = %s\n+\t\t\t\tAND post_id = %d\n+\t\t\t\t\",\n+\t\t\t\t$key,\n+\t\t\t\t$post_id\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get total pages\n+\t *\n+\t * @param int $limit\n+\t * @param int $total_rows\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function get_total_pages( int $limit = 0, int $total_rows = 0 ): int {\n+\t\tif ( $limit == 0 ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$total_pages = floor( $total_rows \u002F $limit );\n+\t\tif ( $total_rows % $limit !== 0 ) {\n+\t\t\t++$total_pages;\n+\t\t}\n+\n+\t\treturn (int) $total_pages;\n+\t}\n+\n+\t\u002F**\n+\t * Get query string single row\n+\t *\n+\t * @param LP_Filter|FilterBase $filter\n+\t *\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_query_single_row( &$filter ) {\n+\t\t$filter->limit               = 1;\n+\t\t$filter->return_string_query = true;\n+\t\t$filter->run_query_count     = false;\n+\t}\n+\n+\t\u002F**\n+\t * Get result query\n+\t *\n+\t * @param LP_Filter|FilterBase $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array|object|null|int|string\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @version 1.0.2\n+\t * @since 4.1.6\n+\t *\u002F\n+\tpublic function execute( $filter, int &$total_rows = 0 ) {\n+\t\t$result = null;\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\n+\t\t\u002F\u002F Fields select\n+\t\t$FIELDS = '*';\n+\t\tif ( ! empty( $filter->only_fields ) ) {\n+\t\t\t$FIELDS = implode( ',', array_unique( $filter->only_fields ) );\n+\t\t} elseif ( ! empty( $filter->fields ) ) {\n+\t\t\t\u002F\u002F exclude more fields\n+\t\t\tif ( ! empty( $filter->exclude_fields ) ) {\n+\t\t\t\tforeach ( $filter->exclude_fields as $field ) {\n+\t\t\t\t\t$index_field = array_search( $field, $filter->fields );\n+\t\t\t\t\tif ( $index_field ) {\n+\t\t\t\t\t\tunset( $filter->fields[ $index_field ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $filter->fields as $key => $field ) {\n+\t\t\t\tif ( $field === 'order' ) {\n+\t\t\t\t\t\u002F\u002F Replace order with `order` to avoid conflict with SQL reserved word.\n+\t\t\t\t\t$filter->fields[ $key ] = '`order`';\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$FIELDS = implode( ',', array_unique( $filter->fields ) );\n+\t\t}\n+\t\t$FIELDS = apply_filters( 'lp\u002Fquery\u002Ffields', $FIELDS, $filter );\n+\n+\t\t$INNER_JOIN = array();\n+\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\n+\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Finner_join', $INNER_JOIN, $filter );\n+\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\n+\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t\u002F\u002F Group by\n+\t\t$GROUP_BY = '';\n+\t\tif ( $filter->group_by ) {\n+\t\t\t$GROUP_BY .= 'GROUP BY ' . $filter->group_by;\n+\t\t\t$GROUP_BY  = apply_filters( 'lp\u002Fquery\u002Fgroup_by', $GROUP_BY, $filter );\n+\t\t}\n+\n+\t\t\u002F\u002F Order by\n+\t\t$ORDER_BY = '';\n+\t\tif ( $filter->order_by ) {\n+\t\t\t$filter->order = strtoupper( $filter->order );\n+\t\t\tif ( ! in_array( $filter->order, [ 'DESC', 'ASC' ] ) ) {\n+\t\t\t\t$filter->order = 'DESC';\n+\t\t\t}\n+\n+\t\t\t$ORDER_BY .= 'ORDER BY ' . $filter->order_by . ' ' . $filter->order . ' ';\n+\t\t\t$ORDER_BY  = apply_filters( 'lp\u002Fquery\u002Forder_by', $ORDER_BY, $filter );\n+\t\t}\n+\n+\t\t\u002F\u002F Limit\n+\t\t$LIMIT = '';\n+\t\tif ( $filter->limit != - 1 ) {\n+\t\t\t$filter->limit = absint( $filter->limit );\n+\t\t\t\u002F*if ( $filter->limit > $filter->max_limit ) {\n+\t\t\t\t$filter->limit = $filter->max_limit;\n+\t\t\t}*\u002F\n+\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\n+\t\t\t$LIMIT  = $this->wpdb->prepare( 'LIMIT %d, %d', $offset, $filter->limit );\n+\t\t}\n+\n+\t\t\u002F\u002F For nest query\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\t$LIMIT = '';\n+\t\t}\n+\n+\t\t\u002F\u002F From table or group select\n+\t\t$COLLECTION = '';\n+\t\tif ( ! empty( $filter->collection ) ) {\n+\t\t\t$COLLECTION = $filter->collection;\n+\t\t}\n+\n+\t\t\u002F\u002F Alias table\n+\t\t$ALIAS_COLLECTION = 'X';\n+\t\tif ( ! empty( $filter->collection_alias ) ) {\n+\t\t\t$ALIAS_COLLECTION = $filter->collection_alias;\n+\t\t}\n+\n+\t\t\u002F\u002F Query\n+\t\t$query = \"SELECT $FIELDS FROM $COLLECTION AS $ALIAS_COLLECTION\n+\t\t$INNER_JOIN\n+\t\t$WHERE\n+\t\t$GROUP_BY\n+\t\t$ORDER_BY\n+\t\t$LIMIT\n+\t\t\";\n+\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\treturn $query;\n+\t\t} elseif ( ! empty( $filter->union ) ) {\n+\t\t\t$query  = implode( ' UNION ', array_unique( $filter->union ) );\n+\t\t\t$query .= $GROUP_BY;\n+\t\t\t$query .= $ORDER_BY;\n+\t\t\t$query .= $LIMIT;\n+\t\t}\n+\n+\t\tif ( ! $filter->query_count ) {\n+\t\t\t\u002F\u002F Debug string query\n+\t\t\tif ( $filter->debug_string_query ) {\n+\t\t\t\treturn $query;\n+\t\t\t}\n+\n+\t\t\t$result = $this->wpdb->get_results( $query );\n+\t\t}\n+\n+\t\t\u002F\u002F Query total rows\n+\t\tif ( $filter->run_query_count ) {\n+\t\t\t$query       = str_replace( array( $LIMIT, $ORDER_BY ), '', $query );\n+\t\t\t$query_total = \"SELECT COUNT($filter->field_count) FROM ($query) AS $ALIAS_COLLECTION\";\n+\t\t\t$total_rows  = (int) $this->wpdb->get_var( $query_total );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\tif ( $filter->query_count ) {\n+\t\t\t\t\u002F\u002F Debug string query\n+\t\t\t\tif ( $filter->debug_string_query ) {\n+\t\t\t\t\treturn $query_total;\n+\t\t\t\t}\n+\n+\t\t\t\treturn $total_rows;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Query update\n+\t *\n+\t * @param LP_Filter|FilterBase $filter\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_execute( $filter ) {\n+\n+\t\t$COLLECTION = $filter->collection;\n+\n+\t\t\u002F\u002F SET value\n+\t\t$SET = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fset', $filter->set, $filter );\n+\t\t$SET = implode( ',', array_unique( $SET ) );\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t$query = \"\n+\t\t\tUPDATE $COLLECTION\n+\t\t\tSET $SET\n+\t\t\t$WHERE\n+\t\t\";\n+\n+\t\t$result = $this->wpdb->query( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Query delete\n+\t *\n+\t * @param LP_Filter|FilterBase $filter\n+\t * @param string $table\n+\t *\n+\t * @return bool|int|mysqli_result|string|null\n+\t * @throws Exception\n+\t * @since 4.1.7\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function delete_execute( $filter, string $table = '' ) {\n+\t\t$COLLECTION = $filter->collection;\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t\u002F\u002F Join\n+\t\t$INNER_JOIN = array();\n+\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\n+\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Finner_join', $INNER_JOIN, $filter );\n+\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\n+\n+\t\t$query = \"\n+\t\t\tDELETE $table FROM $COLLECTION\n+\t\t\t$INNER_JOIN\n+\t\t\t$WHERE\n+\t\t\";\n+\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\treturn $query;\n+\t\t}\n+\n+\t\t$result = $this->wpdb->query( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get values of list object by key\n+\t *\n+\t * @param array $arr_object\n+\t * @param string $key\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_values_by_key( array $arr_object, string $key = 'ID' ): array {\n+\t\t$arr_object_ids = array();\n+\t\tforeach ( $arr_object as $object ) {\n+\t\t\t$arr_object_ids[] = $object->{$key};\n+\t\t}\n+\n+\t\treturn $arr_object_ids;\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.9\n+\t *\u002F\n+\tpublic function insert_data( array $args ): int {\n+\t\t$data               = $args['data'] ?? [];\n+\t\t$filter             = $args['filter'] ?? null;\n+\t\t$table_name         = $args['table_name'] ?? '';\n+\t\t$key_auto_increment = $args['key_auto_increment'] ?? '';\n+\t\t$key_auto_increment = sanitize_key( $key_auto_increment );\n+\n+\t\tif ( empty( $data ) || ! is_array( $data ) ) {\n+\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t\u002F*if ( ! $filter instanceof LP_Filter ) {\n+\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->all_fields ) ) {\n+\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $table_name ) ) {\n+\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $key_auto_increment ) || ! is_string( $key_auto_increment ) ) {\n+\t\t\tthrow new Exception( __( 'Key auto increment must be a string!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F unset key is auto increment.\n+\t\tunset( $data[ $key_auto_increment ] );\n+\n+\t\t$this->wpdb->insert( $table_name, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_data( array $args ): bool {\n+\t\t$data       = $args['data'] ?? [];\n+\t\t$filter     = $args['filter'] ?? null;\n+\t\t$table_name = $args['table_name'] ?? '';\n+\t\t$where_key  = $args['where_key'] ?? '';\n+\t\t$where_key  = sanitize_key( $where_key );\n+\n+\t\t\u002F*if ( ! $filter instanceof LP_Filter ) {\n+\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->all_fields ) ) {\n+\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $data ) || ! is_array( $data ) ) {\n+\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $where_key ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid where key!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $table_name ) ) {\n+\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter->collection = $table_name;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Key `order` is reserved keyword in MySQL\n+\t\t\tif ( $col_name === 'order' ) {\n+\t\t\t\t$col_name = '`order`';\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( \"AND $where_key = %d\", $data[ $where_key ] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-lesson-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-lesson-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-lesson-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-lesson-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,122 +1,122 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Lesson_DB\r\n- *\r\n- * @author tungnx\r\n- * @since 3.2.7.8\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-class LP_Lesson_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section id by lesson id\r\n-\t *\r\n-\t * @param int $lesson_id\r\n-\t *\r\n-\t * @return string|null\r\n-\t *\u002F\r\n-\tpublic function get_section_by_lesson_id( $lesson_id = 0 ) {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT section_id FROM $this->tb_lp_section_items\r\n-\t\t\tWHERE item_type = %s\r\n-\t\t\tAND item_id = %d\",\r\n-\t\t\tLP_LESSON_CPT,\r\n-\t\t\t$lesson_id\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->get_var( $query );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total lessons set preview\r\n-\t *\r\n-\t * @return string|null\r\n-\t *\u002F\r\n-\tpublic function get_total_preview_items() {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t        SELECT COUNT(ID) FROM $this->tb_posts p\r\n-\t\t        INNER JOIN {$this->tb_postmeta} pm\r\n-\t\t        ON p.ID = pm.post_id\r\n-\t\t        AND pm.meta_key = %s\r\n-\t\t        WHERE pm.meta_value = %s\r\n-\t\t        AND p.post_type = %s\",\r\n-\t\t\t'_lp_preview',\r\n-\t\t\t'yes',\r\n-\t\t\tLP_LESSON_CPT\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_var( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total lessons no set preview\r\n-\t *\r\n-\t * @param int $total_preview_items\r\n-\t *\r\n-\t * @return string|null\r\n-\t *\u002F\r\n-\tpublic function get_total_no_preview_items( $total_preview_items = 0 ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t        SELECT COUNT(ID)\r\n-\t\t        FROM {$wpdb->posts} p\r\n-\t\t        WHERE p.post_type = %s\r\n-\t\t        AND p.post_status NOT LIKE 'auto-draft'\r\n-\t\t        AND p.post_status NOT LIKE 'trash'\r\n-\t\t        \",\r\n-\t\t\tLP_LESSON_CPT\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_var( $query ) - $total_preview_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get preview lesson in Courses database.\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @return void\r\n-\t *\r\n-\t * @todo Set cache or save when save_course.\r\n-\t *\u002F\r\n-\tpublic function get_count_preview_in_course( $course_id ) {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT COUNT(ID) FROM $this->tb_posts AS p\r\n-\t\t\tINNER JOIN {$this->tb_postmeta} AS pm ON p.ID = pm.post_id AND pm.meta_key = %s\r\n-\t\t\tINNER JOIN {$this->tb_lp_section_items} AS section_items ON section_items.item_id = p.ID\r\n-\t\t\tINNER JOIN {$this->tb_lp_sections} AS sections ON sections.section_course_id = %d AND sections.section_id = section_items.section_id\r\n-\t\t\tWHERE pm.meta_value = %s\r\n-\t\t\tAND p.post_type = %s\",\r\n-\t\t\t'_lp_preview',\r\n-\t\t\t$course_id,\r\n-\t\t\t'yes',\r\n-\t\t\tLP_LESSON_CPT\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_var( $query );\r\n-\t}\r\n-}\r\n-\r\n-LP_Lesson_DB::getInstance();\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Lesson_DB\n+ *\n+ * @author tungnx\n+ * @since 3.2.7.8\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+class LP_Lesson_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get section id by lesson id\n+\t *\n+\t * @param int $lesson_id\n+\t *\n+\t * @return string|null\n+\t *\u002F\n+\tpublic function get_section_by_lesson_id( $lesson_id = 0 ) {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT section_id FROM $this->tb_lp_section_items\n+\t\t\tWHERE item_type = %s\n+\t\t\tAND item_id = %d\",\n+\t\t\tLP_LESSON_CPT,\n+\t\t\t$lesson_id\n+\t\t);\n+\n+\t\t$result = $this->wpdb->get_var( $query );\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get total lessons set preview\n+\t *\n+\t * @return string|null\n+\t *\u002F\n+\tpublic function get_total_preview_items() {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t        SELECT COUNT(ID) FROM $this->tb_posts p\n+\t\t        INNER JOIN {$this->tb_postmeta} pm\n+\t\t        ON p.ID = pm.post_id\n+\t\t        AND pm.meta_key = %s\n+\t\t        WHERE pm.meta_value = %s\n+\t\t        AND p.post_type = %s\",\n+\t\t\t'_lp_preview',\n+\t\t\t'yes',\n+\t\t\tLP_LESSON_CPT\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_var( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get total lessons no set preview\n+\t *\n+\t * @param int $total_preview_items\n+\t *\n+\t * @return string|null\n+\t *\u002F\n+\tpublic function get_total_no_preview_items( $total_preview_items = 0 ) {\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t        SELECT COUNT(ID)\n+\t\t        FROM {$wpdb->posts} p\n+\t\t        WHERE p.post_type = %s\n+\t\t        AND p.post_status NOT LIKE 'auto-draft'\n+\t\t        AND p.post_status NOT LIKE 'trash'\n+\t\t        \",\n+\t\t\tLP_LESSON_CPT\n+\t\t);\n+\n+\t\treturn $wpdb->get_var( $query ) - $total_preview_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get preview lesson in Courses database.\n+\t *\n+\t * @param int $course_id\n+\t * @return void\n+\t *\n+\t * @todo Set cache or save when save_course.\n+\t *\u002F\n+\tpublic function get_count_preview_in_course( $course_id ) {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT COUNT(ID) FROM $this->tb_posts AS p\n+\t\t\tINNER JOIN {$this->tb_postmeta} AS pm ON p.ID = pm.post_id AND pm.meta_key = %s\n+\t\t\tINNER JOIN {$this->tb_lp_section_items} AS section_items ON section_items.item_id = p.ID\n+\t\t\tINNER JOIN {$this->tb_lp_sections} AS sections ON sections.section_course_id = %d AND sections.section_id = section_items.section_id\n+\t\t\tWHERE pm.meta_value = %s\n+\t\t\tAND p.post_type = %s\",\n+\t\t\t'_lp_preview',\n+\t\t\t$course_id,\n+\t\t\t'yes',\n+\t\t\tLP_LESSON_CPT\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_var( $query );\n+\t}\n+}\n+\n+LP_Lesson_DB::getInstance();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-material-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-material-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-material-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-material-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,272 +1,272 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Material_Files_DB\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.2\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Material_Files_DB' ) ) {\r\n-\treturn;\r\n-}\r\n-class LP_Material_Files_DB extends LP_Database {\r\n-\r\n-\tprivate static $_instance;\r\n-\tpublic $table_name;\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t\t$this->table_name = $this->tb_lp_files;\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [create_material create new material]\r\n-\t * @param  [array] $data [data to create a material: file name, file type, the post id, post type, save method, file path or file url, created date ]\r\n-\t * @return [int]  new record id(file_id)\r\n-\t *\u002F\r\n-\tpublic function create_material( $data ) {\r\n-\t\tif ( ! is_array( $data ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( ! is_int( $data['item_id'] ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$insert_file = $this->wpdb->insert(\r\n-\t\t\t$this->table_name,\r\n-\t\t\t$data,\r\n-\t\t\tarray(\r\n-\t\t\t\t'%s',\r\n-\t\t\t\t'%s',\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%s',\r\n-\t\t\t\t'%s',\r\n-\t\t\t\t'%s',\r\n-\t\t\t\t'%d',\r\n-\t\t\t\t'%s',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\t\treturn $insert_file ? $this->wpdb->insert_id : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [get_single_material get a material]\r\n-\t * @param  [int] $file_id [file_id]\r\n-\t * @return [object||null] [A material or null]\r\n-\t *\u002F\r\n-\tpublic function get_material( $file_id = 0 ) {\r\n-\t\tif ( ! is_int( $file_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$row = $this->wpdb->get_row(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\"SELECT * FROM $this->table_name WHERE file_id = %d\",\r\n-\t\t\t\t$file_id\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\t\treturn $row;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [get_material_by_item_id get all material files of a post( course or lesson )]\r\n-\t * @param  integer $item_id [post_id]\r\n-\t * @param  integer $per_page [file amount for each get files]\r\n-\t * @param  integer $offset  [query offset]\r\n-\t * @param  boolean $is_admin [check if is admin page, use for course to get only course's files ( don't include lesson's files )]\r\n-\t * @return [array]           [post's material files]\r\n-\t *\u002F\r\n-\tpublic function get_material_by_item_id( $item_id = 0, $perpage = 0, $offset = 0, $is_admin = false ) {\r\n-\t\tif ( ! is_int( $item_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$result = array();\r\n-\t\tif ( get_post_type( $item_id ) == LP_COURSE_CPT && ! $is_admin ) {\r\n-\t\t\t$sql = \"SELECT * FROM $this->table_name WHERE item_id \r\n-\t\t\t\tIN ( SELECT si.item_id FROM $this->tb_lp_section_items AS si\r\n-\t\t\t\tINNER JOIN $this->tb_lp_sections AS s ON s.section_id = si.section_id \r\n-\t\t\t\tWHERE s.section_course_id=%d ) \r\n-\t\t\t\tOR item_id=%d ORDER BY item_id, orders\";\r\n-\t\t\tif ( $perpage > 0 ) {\r\n-\t\t\t\t$sql .= ' LIMIT ' . intval( $perpage );\r\n-\t\t\t}\r\n-\t\t\tif ( $offset > 0 && $perpage > 0 ) {\r\n-\t\t\t\t$sql .= ' OFFSET ' . intval( $offset );\r\n-\t\t\t}\r\n-\t\t\t$result = $this->wpdb->get_results(\r\n-\t\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\t$sql,\r\n-\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\t$sql = \"SELECT * FROM $this->table_name WHERE item_id = %d ORDER BY orders\";\r\n-\t\t\tif ( $perpage > 0 ) {\r\n-\t\t\t\t$sql .= ' LIMIT ' . intval( $perpage );\r\n-\t\t\t}\r\n-\t\t\tif ( $offset > 0 && $perpage > 0 ) {\r\n-\t\t\t\t$sql .= ' OFFSET ' . intval( $offset );\r\n-\t\t\t}\r\n-\t\t\t$result = $this->wpdb->get_results(\r\n-\t\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\t$sql,\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$this->check_execute_has_error();\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * [get_total get total file amount of an item]\r\n-\t * @param  [type] $item_id [description]\r\n-\t * @return [type]          [description]\r\n-\t *\u002F\r\n-\tpublic function get_total( $item_id ) {\r\n-\t\tif ( ! $item_id ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$item_id = (int) $item_id;\r\n-\t\tif ( get_post_type( $item_id ) == LP_COURSE_CPT ) {\r\n-\t\t\t$sql    = \"SELECT COUNT(file_id) FROM $this->table_name WHERE item_id \r\n-\t\t\t\tIN ( SELECT si.item_id FROM $this->tb_lp_section_items AS si\r\n-\t\t\t\tINNER JOIN $this->tb_lp_sections AS s ON s.section_id = si.section_id \r\n-\t\t\t\tWHERE s.section_course_id=%d ) \r\n-\t\t\t\tOR item_id=%d ORDER BY item_id\";\r\n-\t\t\t$result = $this->wpdb->get_var(\r\n-\t\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\t$sql,\r\n-\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\t$sql    = \"SELECT COUNT(file_id) FROM $this->table_name WHERE item_id = %d\";\r\n-\t\t\t$result = $this->wpdb->get_var(\r\n-\t\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\t$sql,\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$this->check_execute_has_error();\r\n-\t\treturn (int) $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * [update_material_orders update order of material]\r\n-\t * @param  array   $orders  [array or materials]\r\n-\t * @param  integer $item_id [item (course\u002Flesson ID)]\r\n-\t * @return [type]           [update or false]\r\n-\t *\u002F\r\n-\tpublic function update_material_orders( $orders = [], $item_id = 0 ) {\r\n-\t\tif ( empty( $orders ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tif ( ! $item_id ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$prepare_arr = [];\r\n-\t\t$sql         = \"UPDATE $this->table_name SET orders = (CASE \";\r\n-\t\tforeach ( $orders as $id => $val ) {\r\n-\t\t\t$sql          .= 'when file_id = %d then %d ';\r\n-\t\t\t$prepare_arr[] = (int) $val['file_id'];\r\n-\t\t\t$prepare_arr[] = (int) $val['orders'];\r\n-\t\t}\r\n-\t\t$prepare_arr[] = $item_id;\r\n-\t\t$sql          .= 'END) ';\r\n-\t\t$sql          .= 'WHERE item_id = %d';\r\n-\t\t$update        = $this->wpdb->query( $this->wpdb->prepare( $sql, $prepare_arr ) );\r\n-\t\t$this->check_execute_has_error();\r\n-\t\treturn $update ? $update : 0;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [delete_material delete a material]\r\n-\t * @param  [int] $file_id [file id]\r\n-\t * @return [boolean]          [description]\r\n-\t *\u002F\r\n-\tpublic function delete_material( $file_id = 0 ) {\r\n-\t\tif ( ! is_int( $file_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$material = $this->get_material( $file_id );\r\n-\t\tif ( ! $material ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$delete = $this->wpdb->delete(\r\n-\t\t\t$this->table_name,\r\n-\t\t\tarray( 'file_id' => $file_id ),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\tif ( $material->method == 'upload' && $delete ) {\r\n-\t\t\t$file_path = wp_upload_dir()['basedir'] . $material->file_path;\r\n-\t\t\t$this->delete_local_file( $file_path );\r\n-\t\t}\r\n-\t\treturn $delete;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [delete_material_by_item_id delete all material file of an item]\r\n-\t * @param  [int] $item_id [the post id]\r\n-\t * @return [boolean]          [description]\r\n-\t *\u002F\r\n-\tpublic function delete_material_by_item_id( $item_id = 0 ) {\r\n-\t\tif ( ! is_int( $item_id ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$materials = $this->get_material_by_item_id( $item_id );\r\n-\t\tif ( ! $materials ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$delete = $this->wpdb->delete(\r\n-\t\t\t$this->table_name,\r\n-\t\t\tarray( 'item_id' => $item_id ),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\t\tif ( $delete ) {\r\n-\t\t\tforeach ( $materials as $m ) {\r\n-\t\t\t\tif ( $m->method == 'upload' ) {\r\n-\t\t\t\t\t$file_path = wp_upload_dir()['basedir'] . $m->file_path;\r\n-\t\t\t\t\t$this->delete_local_file( $file_path );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $delete;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [delete_local_file delete file when record is deleted]\r\n-\t * @param  string $file_path [description]\r\n-\t *\u002F\r\n-\tpublic function delete_local_file( $file_path = '' ) {\r\n-\t\t$file_init = LP_WP_Filesystem::instance();\r\n-\t\tif ( $file_init->file_exists( $file_path ) ) {\r\n-\t\t\t$file_init->unlink( $file_path );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-LP_Material_Files_DB::getInstance();\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Material_Files_DB\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.2\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Material_Files_DB' ) ) {\n+\treturn;\n+}\n+class LP_Material_Files_DB extends LP_Database {\n+\n+\tprivate static $_instance;\n+\tpublic $table_name;\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t\t$this->table_name = $this->tb_lp_files;\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [create_material create new material]\n+\t * @param  [array] $data [data to create a material: file name, file type, the post id, post type, save method, file path or file url, created date ]\n+\t * @return [int]  new record id(file_id)\n+\t *\u002F\n+\tpublic function create_material( $data ) {\n+\t\tif ( ! is_array( $data ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( ! is_int( $data['item_id'] ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$insert_file = $this->wpdb->insert(\n+\t\t\t$this->table_name,\n+\t\t\t$data,\n+\t\t\tarray(\n+\t\t\t\t'%s',\n+\t\t\t\t'%s',\n+\t\t\t\t'%d',\n+\t\t\t\t'%s',\n+\t\t\t\t'%s',\n+\t\t\t\t'%s',\n+\t\t\t\t'%d',\n+\t\t\t\t'%s',\n+\t\t\t)\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\t\treturn $insert_file ? $this->wpdb->insert_id : false;\n+\t}\n+\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [get_single_material get a material]\n+\t * @param  [int] $file_id [file_id]\n+\t * @return [object||null] [A material or null]\n+\t *\u002F\n+\tpublic function get_material( $file_id = 0 ) {\n+\t\tif ( ! is_int( $file_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$row = $this->wpdb->get_row(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\"SELECT * FROM $this->table_name WHERE file_id = %d\",\n+\t\t\t\t$file_id\n+\t\t\t)\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\t\treturn $row;\n+\t}\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [get_material_by_item_id get all material files of a post( course or lesson )]\n+\t * @param  integer $item_id [post_id]\n+\t * @param  integer $per_page [file amount for each get files]\n+\t * @param  integer $offset  [query offset]\n+\t * @param  boolean $is_admin [check if is admin page, use for course to get only course's files ( don't include lesson's files )]\n+\t * @return [array]           [post's material files]\n+\t *\u002F\n+\tpublic function get_material_by_item_id( $item_id = 0, $perpage = 0, $offset = 0, $is_admin = false ) {\n+\t\tif ( ! is_int( $item_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$result = array();\n+\t\tif ( get_post_type( $item_id ) == LP_COURSE_CPT && ! $is_admin ) {\n+\t\t\t$sql = \"SELECT * FROM $this->table_name WHERE item_id \n+\t\t\t\tIN ( SELECT si.item_id FROM $this->tb_lp_section_items AS si\n+\t\t\t\tINNER JOIN $this->tb_lp_sections AS s ON s.section_id = si.section_id \n+\t\t\t\tWHERE s.section_course_id=%d ) \n+\t\t\t\tOR item_id=%d ORDER BY item_id, orders\";\n+\t\t\tif ( $perpage > 0 ) {\n+\t\t\t\t$sql .= ' LIMIT ' . intval( $perpage );\n+\t\t\t}\n+\t\t\tif ( $offset > 0 && $perpage > 0 ) {\n+\t\t\t\t$sql .= ' OFFSET ' . intval( $offset );\n+\t\t\t}\n+\t\t\t$result = $this->wpdb->get_results(\n+\t\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\t$sql,\n+\t\t\t\t\t$item_id,\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t} else {\n+\t\t\t$sql = \"SELECT * FROM $this->table_name WHERE item_id = %d ORDER BY orders\";\n+\t\t\tif ( $perpage > 0 ) {\n+\t\t\t\t$sql .= ' LIMIT ' . intval( $perpage );\n+\t\t\t}\n+\t\t\tif ( $offset > 0 && $perpage > 0 ) {\n+\t\t\t\t$sql .= ' OFFSET ' . intval( $offset );\n+\t\t\t}\n+\t\t\t$result = $this->wpdb->get_results(\n+\t\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\t$sql,\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t\t$this->check_execute_has_error();\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * [get_total get total file amount of an item]\n+\t * @param  [type] $item_id [description]\n+\t * @return [type]          [description]\n+\t *\u002F\n+\tpublic function get_total( $item_id ) {\n+\t\tif ( ! $item_id ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$item_id = (int) $item_id;\n+\t\tif ( get_post_type( $item_id ) == LP_COURSE_CPT ) {\n+\t\t\t$sql    = \"SELECT COUNT(file_id) FROM $this->table_name WHERE item_id \n+\t\t\t\tIN ( SELECT si.item_id FROM $this->tb_lp_section_items AS si\n+\t\t\t\tINNER JOIN $this->tb_lp_sections AS s ON s.section_id = si.section_id \n+\t\t\t\tWHERE s.section_course_id=%d ) \n+\t\t\t\tOR item_id=%d ORDER BY item_id\";\n+\t\t\t$result = $this->wpdb->get_var(\n+\t\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\t$sql,\n+\t\t\t\t\t$item_id,\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t} else {\n+\t\t\t$sql    = \"SELECT COUNT(file_id) FROM $this->table_name WHERE item_id = %d\";\n+\t\t\t$result = $this->wpdb->get_var(\n+\t\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\t$sql,\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t\t$this->check_execute_has_error();\n+\t\treturn (int) $result;\n+\t}\n+\n+\t\u002F**\n+\t * [update_material_orders update order of material]\n+\t * @param  array   $orders  [array or materials]\n+\t * @param  integer $item_id [item (course\u002Flesson ID)]\n+\t * @return [type]           [update or false]\n+\t *\u002F\n+\tpublic function update_material_orders( $orders = [], $item_id = 0 ) {\n+\t\tif ( empty( $orders ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\tif ( ! $item_id ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$prepare_arr = [];\n+\t\t$sql         = \"UPDATE $this->table_name SET orders = (CASE \";\n+\t\tforeach ( $orders as $id => $val ) {\n+\t\t\t$sql          .= 'when file_id = %d then %d ';\n+\t\t\t$prepare_arr[] = (int) $val['file_id'];\n+\t\t\t$prepare_arr[] = (int) $val['orders'];\n+\t\t}\n+\t\t$prepare_arr[] = $item_id;\n+\t\t$sql          .= 'END) ';\n+\t\t$sql          .= 'WHERE item_id = %d';\n+\t\t$update        = $this->wpdb->query( $this->wpdb->prepare( $sql, $prepare_arr ) );\n+\t\t$this->check_execute_has_error();\n+\t\treturn $update ? $update : 0;\n+\t}\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [delete_material delete a material]\n+\t * @param  [int] $file_id [file id]\n+\t * @return [boolean]          [description]\n+\t *\u002F\n+\tpublic function delete_material( $file_id = 0 ) {\n+\t\tif ( ! is_int( $file_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$material = $this->get_material( $file_id );\n+\t\tif ( ! $material ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$delete = $this->wpdb->delete(\n+\t\t\t$this->table_name,\n+\t\t\tarray( 'file_id' => $file_id ),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\n+\t\tif ( $material->method == 'upload' && $delete ) {\n+\t\t\t$file_path = wp_upload_dir()['basedir'] . $material->file_path;\n+\t\t\t$this->delete_local_file( $file_path );\n+\t\t}\n+\t\treturn $delete;\n+\t}\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [delete_material_by_item_id delete all material file of an item]\n+\t * @param  [int] $item_id [the post id]\n+\t * @return [boolean]          [description]\n+\t *\u002F\n+\tpublic function delete_material_by_item_id( $item_id = 0 ) {\n+\t\tif ( ! is_int( $item_id ) ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$materials = $this->get_material_by_item_id( $item_id );\n+\t\tif ( ! $materials ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$delete = $this->wpdb->delete(\n+\t\t\t$this->table_name,\n+\t\t\tarray( 'item_id' => $item_id ),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\t\tif ( $delete ) {\n+\t\t\tforeach ( $materials as $m ) {\n+\t\t\t\tif ( $m->method == 'upload' ) {\n+\t\t\t\t\t$file_path = wp_upload_dir()['basedir'] . $m->file_path;\n+\t\t\t\t\t$this->delete_local_file( $file_path );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\treturn $delete;\n+\t}\n+\t\u002F**\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [delete_local_file delete file when record is deleted]\n+\t * @param  string $file_path [description]\n+\t *\u002F\n+\tpublic function delete_local_file( $file_path = '' ) {\n+\t\t$file_init = LP_WP_Filesystem::instance();\n+\t\tif ( $file_init->file_exists( $file_path ) ) {\n+\t\t\t$file_init->unlink( $file_path );\n+\t\t}\n+\t}\n+}\n+\n+LP_Material_Files_DB::getInstance();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-order-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-order-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-order-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-order-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,169 +1,169 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Order_DB\r\n- *\r\n- * @author tungnx\r\n- * @since 4.1.4\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Order_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the latest LP Order id by user_id and course_id\r\n-\t *\r\n-\t * @param int|string $user_id LP_User is int, LP_User_Guest is string\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return null|string\r\n-\t * @since 4.1.4\r\n-\t * @author tungnx\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_last_lp_order_id_of_user_course( $user_id, int $course_id ) {\r\n-\t\t$key_cache = \"lp\u002Forder\u002Fid\u002Flast\u002F$user_id\u002F$course_id\";\r\n-\t\t$order_id  = LP_Cache::cache_load_first( 'get', $key_cache );\r\n-\t\tif ( false !== $order_id ) {\r\n-\t\t\treturn $order_id;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user_id || ! $course_id ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$user_id_str = $this->wpdb->prepare( '%\"%d\"%', $user_id );\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT p.ID FROM {$this->tb_posts} as p\r\n-\t\t\tINNER join {$this->tb_postmeta} pm on p.ID = pm.post_id\r\n-\t\t\tINNER join {$this->tb_lp_order_items} as oi on p.ID = oi.order_id\r\n-\t\t\tWHERE post_type = %s\r\n-\t\t\tAND pm.meta_key = %s\r\n-\t\t\tAND (pm.meta_value = %s OR pm.meta_value LIKE '%s')\r\n-\t\t\tAND oi.item_id = %d\r\n-\t\t\tORDER BY p.ID DESC\r\n-\t\t\tLIMIT 1\r\n-\t\t\t\",\r\n-\t\t\tLP_ORDER_CPT,\r\n-\t\t\t'_user_id',\r\n-\t\t\t$user_id,\r\n-\t\t\t$user_id_str,\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$order_id = $this->wpdb->get_var( $query );\r\n-\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_cache, $order_id );\r\n-\r\n-\t\treturn $order_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get order_item_ids by order_id\r\n-\t *\r\n-\t * @param int $order_id\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_order_item_ids( int $order_id ): array {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT order_item_id FROM $this->tb_lp_order_items\r\n-\t\t\tWHERE order_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$order_id\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row IN order_item_ids\r\n-\t *\r\n-\t * @param LP_Order_Filter $filter\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete_order_item( LP_Order_Filter $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->order_item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND order_item_id IN(' . LP_Helper::db_format_array( $filter->order_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->order_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_order_items}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row IN order_item_ids\r\n-\t *\r\n-\t * @param LP_Order_Filter $filter\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete_order_itemmeta( LP_Order_Filter $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->order_item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND learnpress_order_item_id IN(' . LP_Helper::db_format_array( $filter->order_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->order_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_order_itemmeta}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\tpublic function get_items( LP_Filter $filter, int $order_id = 0 , int &$total_rows = 0 ) {\r\n-\t\t$filter->collection       = $this->tb_lp_order_items;\r\n-\t\t$filter->collection_alias = 'oi';\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND oi.order_id=%d', $order_id );\r\n-\t\t$filter->field_count      = 'oi.order_item_id';\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Order_DB\n+ *\n+ * @author tungnx\n+ * @since 4.1.4\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Order_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get the latest LP Order id by user_id and course_id\n+\t *\n+\t * @param int|string $user_id LP_User is int, LP_User_Guest is string\n+\t * @param int $course_id\n+\t *\n+\t * @return null|string\n+\t * @since 4.1.4\n+\t * @author tungnx\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_last_lp_order_id_of_user_course( $user_id, int $course_id ) {\n+\t\t$key_cache = \"lp\u002Forder\u002Fid\u002Flast\u002F$user_id\u002F$course_id\";\n+\t\t$order_id  = LP_Cache::cache_load_first( 'get', $key_cache );\n+\t\tif ( false !== $order_id ) {\n+\t\t\treturn $order_id;\n+\t\t}\n+\n+\t\tif ( ! $user_id || ! $course_id ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$user_id_str = $this->wpdb->prepare( '%\"%d\"%', $user_id );\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT p.ID FROM {$this->tb_posts} as p\n+\t\t\tINNER join {$this->tb_postmeta} pm on p.ID = pm.post_id\n+\t\t\tINNER join {$this->tb_lp_order_items} as oi on p.ID = oi.order_id\n+\t\t\tWHERE post_type = %s\n+\t\t\tAND pm.meta_key = %s\n+\t\t\tAND (pm.meta_value = %s OR pm.meta_value LIKE '%s')\n+\t\t\tAND oi.item_id = %d\n+\t\t\tORDER BY p.ID DESC\n+\t\t\tLIMIT 1\n+\t\t\t\",\n+\t\t\tLP_ORDER_CPT,\n+\t\t\t'_user_id',\n+\t\t\t$user_id,\n+\t\t\t$user_id_str,\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$order_id = $this->wpdb->get_var( $query );\n+\n+\t\tLP_Cache::cache_load_first( 'set', $key_cache, $order_id );\n+\n+\t\treturn $order_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get order_item_ids by order_id\n+\t *\n+\t * @param int $order_id\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_order_item_ids( int $order_id ): array {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT order_item_id FROM $this->tb_lp_order_items\n+\t\t\tWHERE order_id = %d\n+\t\t\t\",\n+\t\t\t$order_id\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_col( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Delete row IN order_item_ids\n+\t *\n+\t * @param LP_Order_Filter $filter\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete_order_item( LP_Order_Filter $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( empty( $filter->order_item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND order_item_id IN(' . LP_Helper::db_format_array( $filter->order_item_ids, '%d' ) . ')',\n+\t\t\t$filter->order_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM {$this->tb_lp_order_items}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Delete row IN order_item_ids\n+\t *\n+\t * @param LP_Order_Filter $filter\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete_order_itemmeta( LP_Order_Filter $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( empty( $filter->order_item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND learnpress_order_item_id IN(' . LP_Helper::db_format_array( $filter->order_item_ids, '%d' ) . ')',\n+\t\t\t$filter->order_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM {$this->tb_lp_order_itemmeta}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\tpublic function get_items( LP_Filter $filter, int $order_id = 0 , int &$total_rows = 0 ) {\n+\t\t$filter->collection       = $this->tb_lp_order_items;\n+\t\t$filter->collection_alias = 'oi';\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND oi.order_id=%d', $order_id );\n+\t\t$filter->field_count      = 'oi.order_item_id';\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-post-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-post-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-post-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-post-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,103 +1,103 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Post_DB\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LP_Post_DB extends LP_Database {\r\n-\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *  Get questions\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_posts( $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_posts;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'p';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_type = %s\", $filter->post_type );\r\n-\r\n-\t\t\u002F\u002F Find ID\r\n-\t\tif ( isset( $filter->ID ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Status\r\n-\t\t$filter->post_status = (array) $filter->post_status;\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Term ids\r\n-\t\tif ( ! empty( $filter->term_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize term ids\r\n-\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\r\n-\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\r\n-\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\r\n-\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post ids\r\n-\t\tif ( ! empty( $filter->post_ids ) ) {\r\n-\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\r\n-\t\t\t$post_ids_format = join( ',', $post_ids );\r\n-\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Title\r\n-\t\tif ( $filter->post_title ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Name(slug)\r\n-\t\tif ( $filter->post_name ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\tif ( isset( $filter->post_author ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Authors\r\n-\t\tif ( ! empty( $filter->post_authors ) ) {\r\n-\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.ID IN (\" . $post_authors_format . ')', $filter->post_authors );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fpost\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Post_DB\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.1\n+ *\u002F\n+class LP_Post_DB extends LP_Database {\n+\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t *  Get questions\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.1.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_posts( $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_posts;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'p';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Where\n+\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_type = %s\", $filter->post_type );\n+\n+\t\t\u002F\u002F Find ID\n+\t\tif ( isset( $filter->ID ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\n+\t\t}\n+\n+\t\t\u002F\u002F Status\n+\t\t$filter->post_status = (array) $filter->post_status;\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\n+\t\t}\n+\n+\t\t\u002F\u002F Term ids\n+\t\tif ( ! empty( $filter->term_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize term ids\n+\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\n+\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\n+\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\n+\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\n+\t\t}\n+\n+\t\t\u002F\u002F Post ids\n+\t\tif ( ! empty( $filter->post_ids ) ) {\n+\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\n+\t\t\t$post_ids_format = join( ',', $post_ids );\n+\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\n+\t\t}\n+\n+\t\t\u002F\u002F Title\n+\t\tif ( $filter->post_title ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Name(slug)\n+\t\tif ( $filter->post_name ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\tif ( isset( $filter->post_author ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\n+\t\t}\n+\n+\t\t\u002F\u002F Authors\n+\t\tif ( ! empty( $filter->post_authors ) ) {\n+\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.ID IN (\" . $post_authors_format . ')', $filter->post_authors );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fpost\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-post-meta-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-post-meta-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-post-meta-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-post-meta-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Post_DB\r\n- *\r\n- * @since 4.2.6.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Post_Meta_DB extends LP_Database {\r\n-\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *  Get questions\r\n-\t *\r\n-\t * @return array|object|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_post_metas( $filter, &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\t\t$col_meta_id    = LP_Post_Meta_Filter::COL_META_ID;\r\n-\t\t$col_post_id    = LP_Post_Meta_Filter::COL_POST_ID;\r\n-\t\t$col_meta_key   = LP_Post_Meta_Filter::COL_META_KEY;\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_postmeta;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'pm';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Find meta_id\r\n-\t\tif ( isset( $filter->meta_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_meta_id} = %d\", $filter->meta_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find post_id\r\n-\t\tif ( isset( $filter->post_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_post_id} = %d\", $filter->post_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find meta_key\r\n-\t\tif ( isset( $filter->meta_key ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_meta_key} = %s\", $filter->meta_key );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fpost-meta\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Post_DB\n+ *\n+ * @since 4.2.6.9\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Post_Meta_DB extends LP_Database {\n+\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t *  Get questions\n+\t *\n+\t * @return array|object|null|int|string\n+\t * @throws Exception\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_post_metas( $filter, &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\t\t$col_meta_id    = LP_Post_Meta_Filter::COL_META_ID;\n+\t\t$col_post_id    = LP_Post_Meta_Filter::COL_POST_ID;\n+\t\t$col_meta_key   = LP_Post_Meta_Filter::COL_META_KEY;\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_postmeta;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'pm';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Find meta_id\n+\t\tif ( isset( $filter->meta_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_meta_id} = %d\", $filter->meta_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Find post_id\n+\t\tif ( isset( $filter->post_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_post_id} = %d\", $filter->post_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Find meta_key\n+\t\tif ( isset( $filter->meta_key ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$ca}.{$col_meta_key} = %s\", $filter->meta_key );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fpost-meta\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-question-answers-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-question-answers-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-question-answers-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-question-answers-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Questions_DB\r\n- *\r\n- * @since 4.1.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LP_Question_Answers_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question answers\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_question_answers( LP_Question_Answers_Filter $filter, &$total_rows = 0 ) {\r\n-\t\t$default_fields           = $this->get_cols_of_table( $this->tb_lp_question_answers );\r\n-\t\t$filter->fields           = array_merge( $default_fields, $filter->fields );\r\n-\t\t$filter->exclude_fields[] = 'order';\r\n-\t\t$filter->fields[]         = '`order`';\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_question_answers;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'qa';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By question answer id\r\n-\t\tif ( ! empty( $filter->question_answer_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id = %d\", $filter->question_answer_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By question id\r\n-\t\tif ( ! empty( $filter->question_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By title\r\n-\t\tif ( ! empty( $filter->title ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.title LIKE %s\", '%' . $this->wpdb->esc_like( $filter->title ) . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Question ids\r\n-\t\tif ( ! empty( $filter->question_ids ) ) {\r\n-\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%d' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F question_answer_ids\r\n-\t\tif ( ! empty( $filter->question_answer_ids ) ) {\r\n-\t\t\t$question_answer_ids_format = LP_Helper::db_format_array( $filter->question_answer_ids, '%d' );\r\n-\t\t\t$filter->where[]            = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id IN (\" . $question_answer_ids_format . ')', $filter->question_answer_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Quiz_Questions_DB\n+ *\n+ * @since 4.1.7\n+ * @version 1.0.1\n+ *\u002F\n+class LP_Question_Answers_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get question answers\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_question_answers( LP_Question_Answers_Filter $filter, &$total_rows = 0 ) {\n+\t\t$default_fields           = $this->get_cols_of_table( $this->tb_lp_question_answers );\n+\t\t$filter->fields           = array_merge( $default_fields, $filter->fields );\n+\t\t$filter->exclude_fields[] = 'order';\n+\t\t$filter->fields[]         = '`order`';\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_question_answers;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'qa';\n+\t\t}\n+\n+\t\t\u002F\u002F By question answer id\n+\t\tif ( ! empty( $filter->question_answer_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id = %d\", $filter->question_answer_id );\n+\t\t}\n+\n+\t\t\u002F\u002F By question id\n+\t\tif ( ! empty( $filter->question_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\n+\t\t}\n+\n+\t\t\u002F\u002F By title\n+\t\tif ( ! empty( $filter->title ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.title LIKE %s\", '%' . $this->wpdb->esc_like( $filter->title ) . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Question ids\n+\t\tif ( ! empty( $filter->question_ids ) ) {\n+\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%d' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F question_answer_ids\n+\t\tif ( ! empty( $filter->question_answer_ids ) ) {\n+\t\t\t$question_answer_ids_format = LP_Helper::db_format_array( $filter->question_answer_ids, '%d' );\n+\t\t\t$filter->where[]            = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id IN (\" . $question_answer_ids_format . ')', $filter->question_answer_ids );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-question-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-question-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-question-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-question-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,146 +1,146 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Lesson_DB\r\n- *\r\n- * @since 3.2.8\r\n- * @version 1.0.3\r\n- *\u002F\r\n-class LP_Question_DB extends LP_Post_DB {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *  Get questions\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_questions( LP_Question_Filter $filter, &$total_rows = 0 ) {\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'q';\r\n-\t\t}\r\n-\r\n-\t\treturn $this->get_posts( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all questions are unassigned to any quiz.\r\n-\t *\r\n-\t * @param LP_Question_Filter|null $filter\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_questions_not_assign_quiz( $filter = null ) {\r\n-\t\t$lp_qq_filter                      = new LP_Quiz_Questions_Filter();\r\n-\t\t$lp_qq_filter->return_string_query = true;\r\n-\t\t$lp_qq_filter->only_fields         = array( 'question_id' );\r\n-\t\t$query_question_ids_assigned       = LP_Quiz_Questions_DB::getInstance()->get_quiz_questions( $lp_qq_filter );\r\n-\r\n-\t\tif ( is_null( $filter ) ) {\r\n-\t\t\t$filter = new LP_Question_Filter();\r\n-\t\t}\r\n-\t\t$filter->only_fields = array( 'q.ID' );\r\n-\t\t$filter->where[]     = \"AND ID NOT IN($query_question_ids_assigned)\";\r\n-\t\t$filter->where[]     = $this->wpdb->prepare( 'AND q.post_status not IN(%s, %s)', 'trash', 'auto-draft' );\r\n-\r\n-\t\treturn $this->get_questions( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count all questions are unassigned to any quiz.\r\n-\t *\r\n-\t * @param LP_Question_Filter|null $filter\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tfunction get_total_question_unassigned( $filter = null ): int {\r\n-\t\tif ( is_null( $filter ) ) {\r\n-\t\t\t$filter = new LP_Question_Filter();\r\n-\t\t}\r\n-\r\n-\t\t$filter->query_count = true;\r\n-\t\t$filter->post_status = [];\r\n-\t\t$filter->field_count = 'q.ID';\r\n-\r\n-\t\treturn $this->get_questions_not_assign_quiz( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list Question ids of Quiz\r\n-\t *\r\n-\t * @param LP_Question_Filter|null $filter\r\n-\t *\r\n-\t * Clear cache when save quiz same id\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @see   LP_Quiz_Post_Type::save\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_list_question_ids_of_quiz( $filter = null ): array {\r\n-\t\t$key_cache = \"$filter->ID\u002Fquestion_ids\";\r\n-\r\n-\t\t\u002F\u002F Get cache\r\n-\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\r\n-\t\t$quiz_ids      = $lp_quiz_cache->get_cache( $key_cache );\r\n-\r\n-\t\tif ( $quiz_ids ) {\r\n-\t\t\treturn $quiz_ids;\r\n-\t\t}\r\n-\r\n-\t\t$statues = array( 'publish' );\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$statues = $filter->post_status;\r\n-\t\t}\r\n-\r\n-\t\t$format = LP_Helper::format_query_IN( $statues );\r\n-\t\t$args   = array_merge( array( LP_QUESTION_CPT, $filter->ID ), $statues );\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\t\tSELECT question_id\r\n-\t\t\t\tFROM $this->tb_lp_quiz_questions AS quiz_q\r\n-\t\t\t\tINNER JOIN $this->tb_posts as p\r\n-\t\t\t\tON p.ID = quiz_q.question_id\r\n-\t\t\t\tAND p.post_type = %s\r\n-\t\t\t\tAND quiz_q.quiz_id = %d\r\n-\t\t\t\tAND p.post_status IN(\" . $format . ')\r\n-\t\t\t\tORDER BY question_order\r\n-\t\t\t',\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\t$ids = $this->wpdb->get_col( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\t$lp_quiz_cache->set_cache( $key_cache, $ids, DAY_IN_SECONDS );\r\n-\r\n-\t\treturn $ids;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Lesson_DB\n+ *\n+ * @since 3.2.8\n+ * @version 1.0.3\n+ *\u002F\n+class LP_Question_DB extends LP_Post_DB {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t *  Get questions\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.1.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_questions( LP_Question_Filter $filter, &$total_rows = 0 ) {\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'q';\n+\t\t}\n+\n+\t\treturn $this->get_posts( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get all questions are unassigned to any quiz.\n+\t *\n+\t * @param LP_Question_Filter|null $filter\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.1.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_questions_not_assign_quiz( $filter = null ) {\n+\t\t$lp_qq_filter                      = new LP_Quiz_Questions_Filter();\n+\t\t$lp_qq_filter->return_string_query = true;\n+\t\t$lp_qq_filter->only_fields         = array( 'question_id' );\n+\t\t$query_question_ids_assigned       = LP_Quiz_Questions_DB::getInstance()->get_quiz_questions( $lp_qq_filter );\n+\n+\t\tif ( is_null( $filter ) ) {\n+\t\t\t$filter = new LP_Question_Filter();\n+\t\t}\n+\t\t$filter->only_fields = array( 'q.ID' );\n+\t\t$filter->where[]     = \"AND ID NOT IN($query_question_ids_assigned)\";\n+\t\t$filter->where[]     = $this->wpdb->prepare( 'AND q.post_status not IN(%s, %s)', 'trash', 'auto-draft' );\n+\n+\t\treturn $this->get_questions( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Count all questions are unassigned to any quiz.\n+\t *\n+\t * @param LP_Question_Filter|null $filter\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tfunction get_total_question_unassigned( $filter = null ): int {\n+\t\tif ( is_null( $filter ) ) {\n+\t\t\t$filter = new LP_Question_Filter();\n+\t\t}\n+\n+\t\t$filter->query_count = true;\n+\t\t$filter->post_status = [];\n+\t\t$filter->field_count = 'q.ID';\n+\n+\t\treturn $this->get_questions_not_assign_quiz( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Get list Question ids of Quiz\n+\t *\n+\t * @param LP_Question_Filter|null $filter\n+\t *\n+\t * Clear cache when save quiz same id\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @see   LP_Quiz_Post_Type::save\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_list_question_ids_of_quiz( $filter = null ): array {\n+\t\t$key_cache = \"$filter->ID\u002Fquestion_ids\";\n+\n+\t\t\u002F\u002F Get cache\n+\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\n+\t\t$quiz_ids      = $lp_quiz_cache->get_cache( $key_cache );\n+\n+\t\tif ( $quiz_ids ) {\n+\t\t\treturn $quiz_ids;\n+\t\t}\n+\n+\t\t$statues = array( 'publish' );\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$statues = $filter->post_status;\n+\t\t}\n+\n+\t\t$format = LP_Helper::format_query_IN( $statues );\n+\t\t$args   = array_merge( array( LP_QUESTION_CPT, $filter->ID ), $statues );\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\t\tSELECT question_id\n+\t\t\t\tFROM $this->tb_lp_quiz_questions AS quiz_q\n+\t\t\t\tINNER JOIN $this->tb_posts as p\n+\t\t\t\tON p.ID = quiz_q.question_id\n+\t\t\t\tAND p.post_type = %s\n+\t\t\t\tAND quiz_q.quiz_id = %d\n+\t\t\t\tAND p.post_status IN(\" . $format . ')\n+\t\t\t\tORDER BY question_order\n+\t\t\t',\n+\t\t\t$args\n+\t\t);\n+\n+\t\t$ids = $this->wpdb->get_col( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\t\u002F\u002F Set cache\n+\t\t$lp_quiz_cache->set_cache( $key_cache, $ids, DAY_IN_SECONDS );\n+\n+\t\treturn $ids;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-quiz-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-quiz-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-quiz-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-quiz-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Lesson_DB\r\n- *\r\n- * @since 3.2.7.4\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Quiz_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get quiz_id of question\r\n-\t *\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_quiz_id_by_question( int $question_id = 0 ) : int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT quiz_id\r\n-\t\t\tFROM $this->tb_lp_quiz_questions\r\n-\t\t\tWHERE question_id = %d\",\r\n-\t\t\t$question_id\r\n-\t\t);\r\n-\r\n-\t\treturn (int) $this->wpdb->get_var( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total questions assign for Quiz\r\n-\t *\r\n-\t * @param int $quiz_id\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_total_question( int $quiz_id = 0 ) : int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT COUNT(question_id) AS total\r\n-\t\t\tFROM $this->tb_lp_quiz_questions\r\n-\t\t\tWHERE quiz_id = %d\",\r\n-\t\t\t$quiz_id\r\n-\t\t);\r\n-\r\n-\t\treturn (int) $this->wpdb->get_var( $query );\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Lesson_DB\n+ *\n+ * @since 3.2.7.4\n+ * @author tungnx\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Quiz_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get quiz_id of question\n+\t *\n+\t * @param int $question_id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_quiz_id_by_question( int $question_id = 0 ) : int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT quiz_id\n+\t\t\tFROM $this->tb_lp_quiz_questions\n+\t\t\tWHERE question_id = %d\",\n+\t\t\t$question_id\n+\t\t);\n+\n+\t\treturn (int) $this->wpdb->get_var( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get total questions assign for Quiz\n+\t *\n+\t * @param int $quiz_id\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_total_question( int $quiz_id = 0 ) : int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT COUNT(question_id) AS total\n+\t\t\tFROM $this->tb_lp_quiz_questions\n+\t\t\tWHERE quiz_id = %d\",\n+\t\t\t$quiz_id\n+\t\t);\n+\n+\t\treturn (int) $this->wpdb->get_var( $query );\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Questions_DB\r\n- *\r\n- * @since 4.1.6\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Quiz_Questions_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_quiz_questions( LP_Quiz_Questions_Filter $filter, &$total_rows = 0 ) {\r\n-\t\t$default_fields = $this->get_cols_of_table( $this->tb_lp_quiz_questions );\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_quiz_questions;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'qq';\r\n-\t\t}\r\n-\r\n-\r\n-\r\n-\t\t\u002F\u002F Question ids\r\n-\t\tif ( ! empty( $filter->question_ids ) ) {\r\n-\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%s' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Quiz ids\r\n-\t\tif ( ! empty( $filter->quiz_ids ) ) {\r\n-\t\t\t$quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%s' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id IN (\" . $quiz_ids_format . ')', $filter->quiz_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Quiz_Questions_DB\n+ *\n+ * @since 4.1.6\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Quiz_Questions_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_quiz_questions( LP_Quiz_Questions_Filter $filter, &$total_rows = 0 ) {\n+\t\t$default_fields = $this->get_cols_of_table( $this->tb_lp_quiz_questions );\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_quiz_questions;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'qq';\n+\t\t}\n+\n+\n+\n+\t\t\u002F\u002F Question ids\n+\t\tif ( ! empty( $filter->question_ids ) ) {\n+\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%s' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Quiz ids\n+\t\tif ( ! empty( $filter->quiz_ids ) ) {\n+\t\t\t$quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids, '%s' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id IN (\" . $quiz_ids_format . ')', $filter->quiz_ids );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-section-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-section-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-section-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-section-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,522 +1,522 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Section_DB\r\n- *\u002F\r\n-\r\n-class LP_Section_DB extends LP_Database {\r\n-\tpublic static $_instance;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sections\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_sections( LP_Section_Filter $filter, &$total_rows = 0 ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_sections;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'st';\r\n-\t\t}\r\n-\r\n-\t\t$filter->field_count = 'st.section_id';\r\n-\r\n-\t\tif ( ! empty( $filter->section_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_id = %d', $filter->section_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_course_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_course_id = %d', $filter->section_course_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_name ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_name LIKE %s', '%' . $filter->section_name . '%' );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_ids ) ) {\r\n-\t\t\t$section_ids_format = LP_Helper::db_format_array( $filter->section_ids, '%d' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND st.section_id IN (' . $section_ids_format . ')', $filter->section_ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_not_ids ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t'AND st.section_id NOT IN(' . LP_Helper::db_format_array( $filter->section_not_ids, '%d' ) . ')',\r\n-\t\t\t\t$filter->section_not_ids\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Default Order\r\n-\t\tif ( empty( $filter->order ) ) {\r\n-\t\t\t$filter->order_by = 'st.section_order';\r\n-\t\t\t$filter->order    = 'ASC';\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section ids by course id\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_section_ids_by_course( int $course_id ): array {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT section_id\r\n-\t\t\tFROM $this->tb_lp_sections\r\n-\t\t\tWHERE section_course_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_col( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove rows IN user_item_ids\r\n-\t *\r\n-\t * @param LP_Section_Filter $filter $filter->section_ids, $filter->author_id_course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_section( LP_Section_Filter $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->author_id_course ) ) {\r\n-\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->section_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND section_id IN(' . LP_Helper::db_format_array( $filter->section_ids, '%d' ) . ')',\r\n-\t\t\t$filter->section_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM $this->tb_lp_sections\r\n-\t\t\t$where\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove rows IN user_item_ids\r\n-\t *\r\n-\t * @param LP_Section_Filter $filter $filter->section_ids, $filter->author_id_course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_section_items( LP_Section_Filter $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->author_id_course ) ) {\r\n-\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->section_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND section_id IN(' . LP_Helper::db_format_array( $filter->section_ids, '%d' ) . ')',\r\n-\t\t\t$filter->section_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM $this->tb_lp_section_items\r\n-\t\t\t$where\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get rows in sections table\r\n-\t *\r\n-\t * WP_Error || array\r\n-\t *\r\n-\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t *\u002F\r\n-\tpublic function get_sections_by_course_id( LP_Section_Filter $filter ) {\r\n-\t\tif ( empty( $filter->section_course_id ) ) {\r\n-\t\t\treturn new WP_Error( 'no_course_id', __( 'No course id', 'learnpress' ), array( 'status' => 404 ) );\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare( ' AND section_course_id = %d', $filter->section_course_id );\r\n-\r\n-\t\t\u002F\u002F SEARCH\r\n-\t\tif ( $filter->search_section ) {\r\n-\t\t\t$where .= $this->wpdb->prepare( ' AND section_name LIKE %s ', '%' . $filter->search_section . '%' );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->section_ids ) {\r\n-\t\t\t$section_ids = LP_Helper::db_format_array( $filter->section_ids, '%d' );\r\n-\t\t\t$where      .= $this->wpdb->prepare( \" AND section_id IN (\" . $section_ids . \")\", $filter->section_ids ); \u002F\u002F phpcs:ignore\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->section_not_ids ) {\r\n-\t\t\t$section_not_ids = LP_Helper::db_format_array( $filter->section_not_ids, '%d' );\r\n-\t\t\t$where          .= $this->wpdb->prepare( \" AND section_id NOT IN (\" . $section_not_ids . \")\", $filter->section_not_ids ); \u002F\u002F phpcs:ignore\r\n-\t\t}\r\n-\r\n-\t\t$orderby = ' ORDER BY section_order ' . $filter->order ?? 'ASC';\r\n-\r\n-\t\t\u002F\u002F PER_PAGE\r\n-\t\t$limit = '';\r\n-\t\tif ( $filter->limit \u003C -1 ) {\r\n-\t\t\t$filter->limit = 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->limit != -1 ) {\r\n-\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\r\n-\t\t\t$limit  = $this->wpdb->prepare( ' LIMIT %d, %d', $offset, $filter->limit );\r\n-\t\t}\r\n-\r\n-\t\t$query = \"SELECT * FROM {$this->tb_lp_sections} {$where} {$orderby} {$limit}\";\r\n-\r\n-\t\t$results = $this->wpdb->get_results( $query, ARRAY_A );\r\n-\r\n-\t\t$total = 0;\r\n-\r\n-\t\tif ( $results ) {\r\n-\t\t\t$query_total = \"SELECT COUNT(*) FROM {$this->tb_lp_sections} {$where}\";\r\n-\r\n-\t\t\t$total = $this->wpdb->get_var( $query_total );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->limit > 0 ) {\r\n-\t\t\t$pages = LP_Database::get_total_pages( $filter->limit, $total );\r\n-\t\t} else {\r\n-\t\t\t$pages = 1;\r\n-\t\t}\r\n-\t\treturn array(\r\n-\t\t\t'results' => $results,\r\n-\t\t\t'total'   => $total,\r\n-\t\t\t'pages'   => $pages,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items in section_items table\r\n-\t *\r\n-\t * WP_Error || array\r\n-\t *\r\n-\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t *\u002F\r\n-\tpublic function get_section_items_by_section_id( LP_Section_Items_Filter $filter ) {\r\n-\t\tif ( empty( $filter->section_id ) ) {\r\n-\t\t\treturn new WP_Error( 'no_section_id', __( 'No section id', 'learnpress' ), array( 'status' => 404 ) );\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1';\r\n-\r\n-\t\t$select = \"SELECT post_title, post_type, post_name, post_status, post_date, post_author, ID, post_content FROM {$this->wpdb->posts} AS p\";\r\n-\r\n-\t\t$inner_join = \"INNER JOIN {$this->tb_lp_section_items} AS si ON p.ID = si.item_id\";\r\n-\r\n-\t\t$where .= $this->wpdb->prepare( ' AND si.section_id = %d', $filter->section_id );\r\n-\r\n-\t\t\u002F\u002F Check item type is avaliable( Assignments , H5P )\r\n-\t\t$types    = learn_press_get_block_course_item_types();\r\n-\t\t$db_types = LP_Helper::db_format_array( $types, '%s' );\r\n-\t\t$where      .= $this->wpdb->prepare( \" AND si.item_type IN (\" . $db_types . \")\", $types ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\t\u002F\u002F PER_PAGE\r\n-\t\t$limit = '';\r\n-\r\n-\t\tif ( $filter->limit \u003C -1 ) {\r\n-\t\t\t$filter->limit = 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->limit != -1 ) {\r\n-\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\r\n-\t\t\t$limit  = $this->wpdb->prepare( ' LIMIT %d, %d', $offset, $filter->limit );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F SEARCH\r\n-\t\tif ( $filter->search_title ) {\r\n-\t\t\t$where .= $this->wpdb->prepare( ' AND p.post_title LIKE %s ', '%' . $filter->search_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F INCLUDE\r\n-\t\tif ( $filter->item_ids ) {\r\n-\t\t\t$item_ids = LP_Helper::db_format_array( $filter->item_ids, '%d' );\r\n-\t\t\t$where   .= $this->wpdb->prepare( \" AND p.ID IN (\" . $item_ids . \")\", $filter->item_ids ); \u002F\u002F phpcs:ignore\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F EXCLUDE\r\n-\t\tif ( $filter->item_not_ids ) {\r\n-\t\t\t$item_not_ids = LP_Helper::db_format_array( $filter->item_not_ids, '%d' );\r\n-\t\t\t$where       .= $this->wpdb->prepare( \" AND section_id NOT IN (\" . $item_not_ids . \")\", $filter->item_not_ids ); \u002F\u002F phpcs:ignore\r\n-\t\t}\r\n-\r\n-\t\t$orderby = ' ORDER BY si.item_order ' . $filter->order ?? 'ASC';\r\n-\r\n-\t\t$query = \"{$select} {$inner_join} {$where} {$orderby} {$limit}\";\r\n-\r\n-\t\t$results = $this->wpdb->get_results( $query, ARRAY_A );\r\n-\r\n-\t\t$total = 0;\r\n-\r\n-\t\tif ( $results ) {\r\n-\t\t\t$query_total = \"SELECT COUNT(*) FROM {$this->wpdb->posts} AS p {$inner_join} {$where}\";\r\n-\r\n-\t\t\t$total = $this->wpdb->get_var( $query_total );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->limit > 0 ) {\r\n-\t\t\t$pages = LP_Database::get_total_pages( $filter->limit, $total );\r\n-\t\t} else {\r\n-\t\t\t$pages = 1;\r\n-\t\t}\r\n-\t\treturn array(\r\n-\t\t\t'results' => $results,\r\n-\t\t\t'total'   => $total,\r\n-\t\t\t'pages'   => $pages,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items by section_id in section_items table\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.4\r\n-\t *\u002F\r\n-\tpublic function get_items( LP_Section_Items_Filter $filter, &$total_rows = 0 ) {\r\n-\t\t\u002F\u002F Get fields from table posts\r\n-\t\t$default_fields           = $this->get_cols_of_table( $this->tb_posts );\r\n-\t\t$filter->fields           = array_merge( $default_fields, $filter->fields );\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = 'p';\r\n-\r\n-\t\t\u002F\u002F Join to table learnpress_section_items\r\n-\t\t$filter->join[] = \"INNER JOIN {$this->tb_lp_section_items} AS si ON p.ID = si.item_id\";\r\n-\r\n-\t\t\u002F\u002F Search in section id\r\n-\t\tif ( ! empty( $filter->section_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %s', $filter->section_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Order items\r\n-\t\tif ( empty( $filter->order_by ) ) {\r\n-\t\t\t$filter->order_by = 'si.item_order';\r\n-\t\t\t$filter->order    = 'ASC';\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fsection\u002Fitems\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course id by section id\r\n-\t *\r\n-\t * @param int $section_id\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4.2\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_course_id_by_section( int $section_id ): int {\r\n-\t\t$filter                      = new LP_Section_Filter();\r\n-\t\t$filter->only_fields         = [ 'section_course_id' ];\r\n-\t\t$filter->section_ids         = [ $section_id ];\r\n-\t\t$filter->run_query_count     = false;\r\n-\t\t$filter->limit               = 1;\r\n-\t\t$filter->return_string_query = true;\r\n-\t\t$result                      = $this->get_sections( $filter );\r\n-\t\t$course_id                   = (int) $this->wpdb->get_var( $result );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\tpublic function get_section_id_by_item_id( $item_id, $course_id = 0 ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( empty( $item_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$inner_join = '';\r\n-\t\tif ( ! empty( $course_id ) ) {\r\n-\t\t\t$inner_join  = \"INNER JOIN {$wpdb->learnpress_sections} AS s ON s.section_id = si.section_id\";\r\n-\t\t\t$inner_join .= $wpdb->prepare( ' AND s.section_course_id = %d ', $course_id );\r\n-\t\t}\r\n-\r\n-\t\t$query_str = $wpdb->prepare(\r\n-\t\t\t\"SELECT si.section_id\r\n-\t\t\tFROM {$wpdb->learnpress_section_items} AS si\r\n-\t\t\t$inner_join\r\n-\t\t\tWHERE si.item_id = %d\r\n-\t\t\tLIMIT 1\",\r\n-\t\t\t$item_id\r\n-\t\t);\r\n-\r\n-\t\t$section_id = $wpdb->get_var( $query_str );\r\n-\r\n-\t\tif ( $section_id ) {\r\n-\t\t\treturn absint( $section_id );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get last section order of course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_last_number_order( int $course_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT MAX(section_order)\r\n-\t\t\tFROM $this->tb_lp_sections\r\n-\t\t\tWHERE section_course_id = %d\",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $number_order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.2\r\n-\t * @since 4.2.8.6\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new LP_Section_Filter();\r\n-\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F section_id is auto increment.\r\n-\t\tunset( $data['section_id'] );\r\n-\r\n-\t\t$this->wpdb->insert( $this->tb_lp_sections, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['section_id'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid section_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new LP_Section_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_sections;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $data['section_id'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update sections position\r\n-\t * Update section_order of each section in course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\t\u002F*public function update_sections_position( array $section_ids, $section_course_id ) {\r\n-\t\t$filter             = new LP_Section_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_sections;\r\n-\t\t$SET_SQL            = 'section_order = CASE';\r\n-\r\n-\t\tforeach ( $section_ids as $position => $section_id ) {\r\n-\t\t\t++$position;\r\n-\t\t\t$section_id = absint( $section_id );\r\n-\t\t\tif ( empty( $section_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN section_id = %d THEN %d', $section_id, $position );\r\n-\t\t}\r\n-\r\n-\t\t$SET_SQL        .= ' ELSE section_order END';\r\n-\t\t$filter->set[]   = $SET_SQL;\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_course_id = %d', $section_course_id );\r\n-\r\n-\t\t$this->update_execute( $filter );\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Section_DB\n+ *\u002F\n+\n+class LP_Section_DB extends LP_Database {\n+\tpublic static $_instance;\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get sections\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_sections( LP_Section_Filter $filter, &$total_rows = 0 ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_sections;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'st';\n+\t\t}\n+\n+\t\t$filter->field_count = 'st.section_id';\n+\n+\t\tif ( ! empty( $filter->section_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_id = %d', $filter->section_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_course_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_course_id = %d', $filter->section_course_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_name ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_name LIKE %s', '%' . $filter->section_name . '%' );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_ids ) ) {\n+\t\t\t$section_ids_format = LP_Helper::db_format_array( $filter->section_ids, '%d' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND st.section_id IN (' . $section_ids_format . ')', $filter->section_ids );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_not_ids ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t'AND st.section_id NOT IN(' . LP_Helper::db_format_array( $filter->section_not_ids, '%d' ) . ')',\n+\t\t\t\t$filter->section_not_ids\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Default Order\n+\t\tif ( empty( $filter->order ) ) {\n+\t\t\t$filter->order_by = 'st.section_order';\n+\t\t\t$filter->order    = 'ASC';\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get section ids by course id\n+\t *\n+\t * @param int $course_id\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_section_ids_by_course( int $course_id ): array {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT section_id\n+\t\t\tFROM $this->tb_lp_sections\n+\t\t\tWHERE section_course_id = %d\n+\t\t\t\",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_col( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Remove rows IN user_item_ids\n+\t *\n+\t * @param LP_Section_Filter $filter $filter->section_ids, $filter->author_id_course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_section( LP_Section_Filter $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->author_id_course ) ) {\n+\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\n+\t\t}\n+\n+\t\tif ( empty( $filter->section_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND section_id IN(' . LP_Helper::db_format_array( $filter->section_ids, '%d' ) . ')',\n+\t\t\t$filter->section_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM $this->tb_lp_sections\n+\t\t\t$where\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Remove rows IN user_item_ids\n+\t *\n+\t * @param LP_Section_Filter $filter $filter->section_ids, $filter->author_id_course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_section_items( LP_Section_Filter $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->author_id_course ) ) {\n+\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\n+\t\t}\n+\n+\t\tif ( empty( $filter->section_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND section_id IN(' . LP_Helper::db_format_array( $filter->section_ids, '%d' ) . ')',\n+\t\t\t$filter->section_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM $this->tb_lp_section_items\n+\t\t\t$where\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get rows in sections table\n+\t *\n+\t * WP_Error || array\n+\t *\n+\t * @author Nhamdv \u003Cemail@email.com>\n+\t *\u002F\n+\tpublic function get_sections_by_course_id( LP_Section_Filter $filter ) {\n+\t\tif ( empty( $filter->section_course_id ) ) {\n+\t\t\treturn new WP_Error( 'no_course_id', __( 'No course id', 'learnpress' ), array( 'status' => 404 ) );\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1';\n+\n+\t\t$where .= $this->wpdb->prepare( ' AND section_course_id = %d', $filter->section_course_id );\n+\n+\t\t\u002F\u002F SEARCH\n+\t\tif ( $filter->search_section ) {\n+\t\t\t$where .= $this->wpdb->prepare( ' AND section_name LIKE %s ', '%' . $filter->search_section . '%' );\n+\t\t}\n+\n+\t\tif ( $filter->section_ids ) {\n+\t\t\t$section_ids = LP_Helper::db_format_array( $filter->section_ids, '%d' );\n+\t\t\t$where      .= $this->wpdb->prepare( \" AND section_id IN (\" . $section_ids . \")\", $filter->section_ids ); \u002F\u002F phpcs:ignore\n+\t\t}\n+\n+\t\tif ( $filter->section_not_ids ) {\n+\t\t\t$section_not_ids = LP_Helper::db_format_array( $filter->section_not_ids, '%d' );\n+\t\t\t$where          .= $this->wpdb->prepare( \" AND section_id NOT IN (\" . $section_not_ids . \")\", $filter->section_not_ids ); \u002F\u002F phpcs:ignore\n+\t\t}\n+\n+\t\t$orderby = ' ORDER BY section_order ' . $filter->order ?? 'ASC';\n+\n+\t\t\u002F\u002F PER_PAGE\n+\t\t$limit = '';\n+\t\tif ( $filter->limit \u003C -1 ) {\n+\t\t\t$filter->limit = 0;\n+\t\t}\n+\n+\t\tif ( $filter->limit != -1 ) {\n+\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\n+\t\t\t$limit  = $this->wpdb->prepare( ' LIMIT %d, %d', $offset, $filter->limit );\n+\t\t}\n+\n+\t\t$query = \"SELECT * FROM {$this->tb_lp_sections} {$where} {$orderby} {$limit}\";\n+\n+\t\t$results = $this->wpdb->get_results( $query, ARRAY_A );\n+\n+\t\t$total = 0;\n+\n+\t\tif ( $results ) {\n+\t\t\t$query_total = \"SELECT COUNT(*) FROM {$this->tb_lp_sections} {$where}\";\n+\n+\t\t\t$total = $this->wpdb->get_var( $query_total );\n+\t\t}\n+\n+\t\tif ( $filter->limit > 0 ) {\n+\t\t\t$pages = LP_Database::get_total_pages( $filter->limit, $total );\n+\t\t} else {\n+\t\t\t$pages = 1;\n+\t\t}\n+\t\treturn array(\n+\t\t\t'results' => $results,\n+\t\t\t'total'   => $total,\n+\t\t\t'pages'   => $pages,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get items in section_items table\n+\t *\n+\t * WP_Error || array\n+\t *\n+\t * @author Nhamdv \u003Cemail@email.com>\n+\t *\u002F\n+\tpublic function get_section_items_by_section_id( LP_Section_Items_Filter $filter ) {\n+\t\tif ( empty( $filter->section_id ) ) {\n+\t\t\treturn new WP_Error( 'no_section_id', __( 'No section id', 'learnpress' ), array( 'status' => 404 ) );\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1';\n+\n+\t\t$select = \"SELECT post_title, post_type, post_name, post_status, post_date, post_author, ID, post_content FROM {$this->wpdb->posts} AS p\";\n+\n+\t\t$inner_join = \"INNER JOIN {$this->tb_lp_section_items} AS si ON p.ID = si.item_id\";\n+\n+\t\t$where .= $this->wpdb->prepare( ' AND si.section_id = %d', $filter->section_id );\n+\n+\t\t\u002F\u002F Check item type is avaliable( Assignments , H5P )\n+\t\t$types    = learn_press_get_block_course_item_types();\n+\t\t$db_types = LP_Helper::db_format_array( $types, '%s' );\n+\t\t$where      .= $this->wpdb->prepare( \" AND si.item_type IN (\" . $db_types . \")\", $types ); \u002F\u002F phpcs:ignore\n+\n+\t\t\u002F\u002F PER_PAGE\n+\t\t$limit = '';\n+\n+\t\tif ( $filter->limit \u003C -1 ) {\n+\t\t\t$filter->limit = 0;\n+\t\t}\n+\n+\t\tif ( $filter->limit != -1 ) {\n+\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\n+\t\t\t$limit  = $this->wpdb->prepare( ' LIMIT %d, %d', $offset, $filter->limit );\n+\t\t}\n+\n+\t\t\u002F\u002F SEARCH\n+\t\tif ( $filter->search_title ) {\n+\t\t\t$where .= $this->wpdb->prepare( ' AND p.post_title LIKE %s ', '%' . $filter->search_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F INCLUDE\n+\t\tif ( $filter->item_ids ) {\n+\t\t\t$item_ids = LP_Helper::db_format_array( $filter->item_ids, '%d' );\n+\t\t\t$where   .= $this->wpdb->prepare( \" AND p.ID IN (\" . $item_ids . \")\", $filter->item_ids ); \u002F\u002F phpcs:ignore\n+\t\t}\n+\n+\t\t\u002F\u002F EXCLUDE\n+\t\tif ( $filter->item_not_ids ) {\n+\t\t\t$item_not_ids = LP_Helper::db_format_array( $filter->item_not_ids, '%d' );\n+\t\t\t$where       .= $this->wpdb->prepare( \" AND section_id NOT IN (\" . $item_not_ids . \")\", $filter->item_not_ids ); \u002F\u002F phpcs:ignore\n+\t\t}\n+\n+\t\t$orderby = ' ORDER BY si.item_order ' . $filter->order ?? 'ASC';\n+\n+\t\t$query = \"{$select} {$inner_join} {$where} {$orderby} {$limit}\";\n+\n+\t\t$results = $this->wpdb->get_results( $query, ARRAY_A );\n+\n+\t\t$total = 0;\n+\n+\t\tif ( $results ) {\n+\t\t\t$query_total = \"SELECT COUNT(*) FROM {$this->wpdb->posts} AS p {$inner_join} {$where}\";\n+\n+\t\t\t$total = $this->wpdb->get_var( $query_total );\n+\t\t}\n+\n+\t\tif ( $filter->limit > 0 ) {\n+\t\t\t$pages = LP_Database::get_total_pages( $filter->limit, $total );\n+\t\t} else {\n+\t\t\t$pages = 1;\n+\t\t}\n+\t\treturn array(\n+\t\t\t'results' => $results,\n+\t\t\t'total'   => $total,\n+\t\t\t'pages'   => $pages,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get items by section_id in section_items table\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.4\n+\t *\u002F\n+\tpublic function get_items( LP_Section_Items_Filter $filter, &$total_rows = 0 ) {\n+\t\t\u002F\u002F Get fields from table posts\n+\t\t$default_fields           = $this->get_cols_of_table( $this->tb_posts );\n+\t\t$filter->fields           = array_merge( $default_fields, $filter->fields );\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = 'p';\n+\n+\t\t\u002F\u002F Join to table learnpress_section_items\n+\t\t$filter->join[] = \"INNER JOIN {$this->tb_lp_section_items} AS si ON p.ID = si.item_id\";\n+\n+\t\t\u002F\u002F Search in section id\n+\t\tif ( ! empty( $filter->section_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %s', $filter->section_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Order items\n+\t\tif ( empty( $filter->order_by ) ) {\n+\t\t\t$filter->order_by = 'si.item_order';\n+\t\t\t$filter->order    = 'ASC';\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fsection\u002Fitems\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get course id by section id\n+\t *\n+\t * @param int $section_id\n+\t * @return int\n+\t * @throws Exception\n+\t * @since 4.1.4.2\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_course_id_by_section( int $section_id ): int {\n+\t\t$filter                      = new LP_Section_Filter();\n+\t\t$filter->only_fields         = [ 'section_course_id' ];\n+\t\t$filter->section_ids         = [ $section_id ];\n+\t\t$filter->run_query_count     = false;\n+\t\t$filter->limit               = 1;\n+\t\t$filter->return_string_query = true;\n+\t\t$result                      = $this->get_sections( $filter );\n+\t\t$course_id                   = (int) $this->wpdb->get_var( $result );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\tpublic function get_section_id_by_item_id( $item_id, $course_id = 0 ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( empty( $item_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$inner_join = '';\n+\t\tif ( ! empty( $course_id ) ) {\n+\t\t\t$inner_join  = \"INNER JOIN {$wpdb->learnpress_sections} AS s ON s.section_id = si.section_id\";\n+\t\t\t$inner_join .= $wpdb->prepare( ' AND s.section_course_id = %d ', $course_id );\n+\t\t}\n+\n+\t\t$query_str = $wpdb->prepare(\n+\t\t\t\"SELECT si.section_id\n+\t\t\tFROM {$wpdb->learnpress_section_items} AS si\n+\t\t\t$inner_join\n+\t\t\tWHERE si.item_id = %d\n+\t\t\tLIMIT 1\",\n+\t\t\t$item_id\n+\t\t);\n+\n+\t\t$section_id = $wpdb->get_var( $query_str );\n+\n+\t\tif ( $section_id ) {\n+\t\t\treturn absint( $section_id );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get last section order of course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_last_number_order( int $course_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT MAX(section_order)\n+\t\t\tFROM $this->tb_lp_sections\n+\t\t\tWHERE section_course_id = %d\",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $number_order;\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.2\n+\t * @since 4.2.8.6\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new LP_Section_Filter();\n+\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F section_id is auto increment.\n+\t\tunset( $data['section_id'] );\n+\n+\t\t$this->wpdb->insert( $this->tb_lp_sections, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['section_id'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid section_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter             = new LP_Section_Filter();\n+\t\t$filter->collection = $this->tb_lp_sections;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $data['section_id'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Update sections position\n+\t * Update section_order of each section in course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\t\u002F*public function update_sections_position( array $section_ids, $section_course_id ) {\n+\t\t$filter             = new LP_Section_Filter();\n+\t\t$filter->collection = $this->tb_lp_sections;\n+\t\t$SET_SQL            = 'section_order = CASE';\n+\n+\t\tforeach ( $section_ids as $position => $section_id ) {\n+\t\t\t++$position;\n+\t\t\t$section_id = absint( $section_id );\n+\t\t\tif ( empty( $section_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN section_id = %d THEN %d', $section_id, $position );\n+\t\t}\n+\n+\t\t$SET_SQL        .= ' ELSE section_order END';\n+\t\t$filter->set[]   = $SET_SQL;\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_course_id = %d', $section_course_id );\n+\n+\t\t$this->update_execute( $filter );\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-section-items-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-section-items-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-section-items-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-section-items-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,257 +1,257 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Section_Items_DB\r\n- *\u002F\r\n-class LP_Section_Items_DB extends LP_Database {\r\n-\tpublic static $_instance;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section items\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.6\r\n-\t *\u002F\r\n-\tpublic function get_section_items( LP_Section_Items_Filter $filter ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'si';\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $filter->fields as $k => $field ) {\r\n-\t\t\t$filter->fields[ $k ] = $filter->collection_alias . '.' . $field;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %d', $filter->section_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_id = %d', $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_ids ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t'AND si.item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\r\n-\t\t\t\t$filter->item_ids\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_item_id = %d', $filter->section_item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update table\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function update( LP_Section_Items_Filter $filter ) {\r\n-\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete items on section\r\n-\t *\r\n-\t * @param LP_Section_Items_Filter $filter\r\n-\t *\r\n-\t * @return bool|int|mysqli_result|resource|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete_items( LP_Section_Items_Filter $filter ) {\r\n-\t\tif ( empty( $filter->item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->item_ids\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM $this->tb_lp_section_items\r\n-\t\t\t$where\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get last item number order on section\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_last_number_order( int $section_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT MAX(item_order)\r\n-\t\t\tFROM $this->tb_lp_section_items\r\n-\t\t\tWHERE section_id = %d\",\r\n-\t\t\t$section_id\r\n-\t\t);\r\n-\r\n-\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $number_order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete item on section of course not in table posts.\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.6.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_item_not_in_tb_post( int $course_id ) {\r\n-\t\t$filter_section = $this->wpdb->prepare(\r\n-\t\t\t\"DELETE si\r\n-\t\t\tFROM $this->tb_lp_section_items AS si\r\n-\t\t\tINNER JOIN $this->tb_lp_sections AS s ON si.section_id = s.section_id\r\n-\t\t\tAND s.section_course_id = %d\r\n-\t\t\tWHERE item_id NOT IN (SELECT ID FROM $this->tb_posts WHERE post_status = 'publish')\r\n-            \",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$this->wpdb->query( $filter_section );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.8.6\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new LP_Section_ITems_Filter();\r\n-\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F section_item_id is auto increment.\r\n-\t\tunset( $data['section_item_id'] );\r\n-\r\n-\t\t$this->wpdb->insert( $this->tb_lp_section_items, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['section_item_id'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid section_item_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new LP_Section_items_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_item_id = %d', $data['section_item_id'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update items position\r\n-\t * Update item_order of each item in section\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t * @deprecated 4.3.2\r\n-\t *\u002F\r\n-\tpublic function update_items_position( array $item_ids, $section_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2', 'CourseSectionItemsDB::update_items_position' );\r\n-\t\t$filter             = new LP_Section_Items_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t$SET_SQL            = 'item_order = CASE';\r\n-\r\n-\t\tforeach ( $item_ids as $position => $item_id ) {\r\n-\t\t\t++$position;\r\n-\t\t\t$item_id = absint( $item_id );\r\n-\t\t\tif ( empty( $item_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN item_id = %d THEN %d', $item_id, $position );\r\n-\t\t}\r\n-\r\n-\t\t$SET_SQL        .= ' ELSE item_order END';\r\n-\t\t$filter->set[]   = $SET_SQL;\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $section_id );\r\n-\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Section_Items_DB\n+ *\u002F\n+class LP_Section_Items_DB extends LP_Database {\n+\tpublic static $_instance;\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get section items\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @version 1.0.2\n+\t * @since 4.1.6\n+\t *\u002F\n+\tpublic function get_section_items( LP_Section_Items_Filter $filter ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'si';\n+\t\t}\n+\n+\t\tforeach ( $filter->fields as $k => $field ) {\n+\t\t\t$filter->fields[ $k ] = $filter->collection_alias . '.' . $field;\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %d', $filter->section_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_id = %d', $filter->item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_ids ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t'AND si.item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\n+\t\t\t\t$filter->item_ids\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_item_id = %d', $filter->section_item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->item_type );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Update table\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function update( LP_Section_Items_Filter $filter ) {\n+\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t$this->update_execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Delete items on section\n+\t *\n+\t * @param LP_Section_Items_Filter $filter\n+\t *\n+\t * @return bool|int|mysqli_result|resource|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete_items( LP_Section_Items_Filter $filter ) {\n+\t\tif ( empty( $filter->item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\n+\t\t\t$filter->item_ids\n+\t\t);\n+\n+\t\t$result = $this->wpdb->query(\n+\t\t\t\"DELETE FROM $this->tb_lp_section_items\n+\t\t\t$where\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get last item number order on section\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_last_number_order( int $section_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT MAX(item_order)\n+\t\t\tFROM $this->tb_lp_section_items\n+\t\t\tWHERE section_id = %d\",\n+\t\t\t$section_id\n+\t\t);\n+\n+\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $number_order;\n+\t}\n+\n+\t\u002F**\n+\t * Delete item on section of course not in table posts.\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.6.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_item_not_in_tb_post( int $course_id ) {\n+\t\t$filter_section = $this->wpdb->prepare(\n+\t\t\t\"DELETE si\n+\t\t\tFROM $this->tb_lp_section_items AS si\n+\t\t\tINNER JOIN $this->tb_lp_sections AS s ON si.section_id = s.section_id\n+\t\t\tAND s.section_course_id = %d\n+\t\t\tWHERE item_id NOT IN (SELECT ID FROM $this->tb_posts WHERE post_status = 'publish')\n+            \",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$this->wpdb->query( $filter_section );\n+\n+\t\t$this->check_execute_has_error();\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.8.6\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new LP_Section_ITems_Filter();\n+\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F section_item_id is auto increment.\n+\t\tunset( $data['section_item_id'] );\n+\n+\t\t$this->wpdb->insert( $this->tb_lp_section_items, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['section_item_id'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid section_item_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter             = new LP_Section_items_Filter();\n+\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_item_id = %d', $data['section_item_id'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Update items position\n+\t * Update item_order of each item in section\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t * @deprecated 4.3.2\n+\t *\u002F\n+\tpublic function update_items_position( array $item_ids, $section_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2', 'CourseSectionItemsDB::update_items_position' );\n+\t\t$filter             = new LP_Section_Items_Filter();\n+\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t$SET_SQL            = 'item_order = CASE';\n+\n+\t\tforeach ( $item_ids as $position => $item_id ) {\n+\t\t\t++$position;\n+\t\t\t$item_id = absint( $item_id );\n+\t\t\tif ( empty( $item_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN item_id = %d THEN %d', $item_id, $position );\n+\t\t}\n+\n+\t\t$SET_SQL        .= ' ELSE item_order END';\n+\t\t$filter->set[]   = $SET_SQL;\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $section_id );\n+\n+\t\t$this->update_execute( $filter );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-sessions-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-sessions-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-sessions-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-sessions-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,108 +1,108 @@\n-\u003C?php\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Sessions_DB\r\n- *\r\n- * @since 4.1.1\r\n- *\u002F\r\n-class LP_Sessions_DB extends LP_Database {\r\n-\t\u002F**\r\n-\t * @var LP_Sessions_DB\r\n-\t *\u002F\r\n-\tprivate static $instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Instance\r\n-\t *\r\n-\t * @return LP_Sessions_DB\r\n-\t *\u002F\r\n-\tpublic static function getInstance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sessions.\r\n-\t *\r\n-\t * @param LP_Session_Filter $filter\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_sessions( LP_Session_Filter $filter ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_sessions;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'ss';\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->field_count ) ) {\r\n-\t\t\t$filter->field_count = 'session_id';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Filter by session_key.\r\n-\t\tif ( ! empty( $filter->session_key ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND session_key = %s', $filter->session_key );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get delete rows in session table\r\n-\t *\r\n-\t * @throws\r\n-\t *\u002F\r\n-\tpublic function delete_rows() {\r\n-\t\t$now     = current_time( 'timestamp' );\r\n-\t\t$adayago = $now - ( 24 * 60 * 60 );\r\n-\t\t$where   = 'WHERE session_expiry \u003C ' . $adayago . '';\r\n-\t\t$table   = $this->tb_lp_sessions;\r\n-\t\t$limit   = 100;\r\n-\t\t$result  = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tDELETE FROM {$table}\r\n-\t\t\t{$where}\r\n-\t\t\tLIMIT {$limit}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\tpublic function count_row_db_sessions() {\r\n-\t\tglobal $wpdb;\r\n-\t\t$now     = current_time( 'timestamp' );\r\n-\t\t$adayago = $now - ( 24 * 60 * 60 );\r\n-\t\t$where   = 'WHERE session_expiry \u003C ' . $adayago . ' AND 0=%d';\r\n-\t\t$query   = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT count(*)\r\n-\t\t\tFROM $this->tb_lp_sessions\r\n-\t\t\t{$where}\r\n-\t\t\t\",\r\n-\t\t\t0\r\n-\t\t);\r\n-\r\n-\t\t$result = $wpdb->get_var( $query );\r\n-\t\treturn $result;\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_Sessions_DB\n+ *\n+ * @since 4.1.1\n+ *\u002F\n+class LP_Sessions_DB extends LP_Database {\n+\t\u002F**\n+\t * @var LP_Sessions_DB\n+\t *\u002F\n+\tprivate static $instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Instance\n+\t *\n+\t * @return LP_Sessions_DB\n+\t *\u002F\n+\tpublic static function getInstance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get sessions.\n+\t *\n+\t * @param LP_Session_Filter $filter\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_sessions( LP_Session_Filter $filter ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_sessions;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'ss';\n+\t\t}\n+\n+\t\tif ( empty( $filter->field_count ) ) {\n+\t\t\t$filter->field_count = 'session_id';\n+\t\t}\n+\n+\t\t\u002F\u002F Filter by session_key.\n+\t\tif ( ! empty( $filter->session_key ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND session_key = %s', $filter->session_key );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Get delete rows in session table\n+\t *\n+\t * @throws\n+\t *\u002F\n+\tpublic function delete_rows() {\n+\t\t$now     = current_time( 'timestamp' );\n+\t\t$adayago = $now - ( 24 * 60 * 60 );\n+\t\t$where   = 'WHERE session_expiry \u003C ' . $adayago . '';\n+\t\t$table   = $this->tb_lp_sessions;\n+\t\t$limit   = 100;\n+\t\t$result  = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tDELETE FROM {$table}\n+\t\t\t{$where}\n+\t\t\tLIMIT {$limit}\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\tpublic function count_row_db_sessions() {\n+\t\tglobal $wpdb;\n+\t\t$now     = current_time( 'timestamp' );\n+\t\t$adayago = $now - ( 24 * 60 * 60 );\n+\t\t$where   = 'WHERE session_expiry \u003C ' . $adayago . ' AND 0=%d';\n+\t\t$query   = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT count(*)\n+\t\t\tFROM $this->tb_lp_sessions\n+\t\t\t{$where}\n+\t\t\t\",\n+\t\t\t0\n+\t\t);\n+\n+\t\t$result = $wpdb->get_var( $query );\n+\t\treturn $result;\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-statistics-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-statistics-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-statistics-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-statistics-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,819 +1,1042 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Statistics_DB\r\n- *\r\n- * @author thimpress\r\n- * @since 4.2.6\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Statistics_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * filter to get data for chart of a day.\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $time_field the column use to filter time\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_date_group_by( LP_Filter $filter, string $time_field ) {\r\n-\t\t$filter->only_fields[] = \"HOUR($time_field) as x_data_label\";\r\n-\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter to get data for chart of last some days. ex: last 7 days, last 30 days,...\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $time_field the column use to filter time\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_previous_days_group_by( LP_Filter $filter, string $time_field ) {\r\n-\t\t$filter->only_fields[] = \"CAST($time_field AS DATE) as x_data_label\";\r\n-\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter to get data for chart of a month\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $time_field the column use to filter time\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_month_group_by( LP_Filter $filter, string $time_field ) {\r\n-\t\t$filter->only_fields[] = \"DAY($time_field) as x_data_label\";\r\n-\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter to get data for chart of months. ex: last 3 months, 6 months, 9 months,...\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $time_field the column use to filter time\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_previous_months_group_by( LP_Filter $filter, string $time_field ) {\r\n-\t\t$filter->only_fields[] = \"DATE_FORMAT( $time_field , '%m-%Y') as x_data_label\";\r\n-\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter to get data for chart of a year\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $time_field the column use to filter time. ex: post_date with posts table, user_registered on users table\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_year_group_by( LP_Filter $filter, string $time_field ) {\r\n-\t\t$filter->only_fields[] = \"MONTH($time_field) as x_data_label\";\r\n-\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter to get data for chart of a custom date ranges\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  array     $dates array of date range use to filer\r\n-\t * @param  string    $time_field the column use to filter time. ex: post_date with posts table, user_registered on users table\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_custom_group_by( LP_Filter $filter, array $dates, string $time_field ) {\r\n-\t\t$diff1 = date_create( $dates[0] );\r\n-\t\t$diff2 = date_create( $dates[1] );\r\n-\t\tif ( ! $diff1 || ! $diff2 ) {\r\n-\t\t\tthrow new Exception( 'Custom filter date is invalid.', 'learnpress' );\r\n-\t\t}\r\n-\t\t$diff = date_diff( $diff1, $diff2, true );\r\n-\t\t$y    = $diff->y;\r\n-\t\t$m    = $diff->m;\r\n-\t\t$d    = $diff->d;\r\n-\t\tif ( $y \u003C 1 ) {\r\n-\t\t\tif ( $m \u003C= 1 ) {\r\n-\t\t\t\tif ( $d \u003C 1 ) {\r\n-\t\t\t\t\t$filter = $this->chart_filter_date_group_by( $filter, $time_field );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F more thans 2 days return data of days\r\n-\t\t\t\t\t$filter = $this->chart_filter_previous_days_group_by( $filter, $time_field );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F more thans 2 months return data of months\r\n-\t\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\r\n-\t\t\t}\r\n-\t\t} elseif ( $y \u003C 2 ) {\r\n-\t\t\t\u002F\u002F less thans 2 years return data of year months\r\n-\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\r\n-\t\t} elseif ( $y \u003C 5 ) {\r\n-\t\t\t\u002F\u002F from 2-5years return data of year quarters\r\n-\t\t\t$filter->only_fields[] = $this->wpdb->prepare( \"CONCAT( %s, QUARTER($time_field) ,%s, Year($time_field)) as x_data_label\", [ 'q', '-' ] );\r\n-\t\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F more than 5 years, return data of years\r\n-\t\t\t$filter->only_fields[] = \"YEAR($time_field) as x_data_label\";\r\n-\t\t\t$filter->group_by      = \"x_data_label\";\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $date       choose a date to query, format Y-m-d\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function date_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)\u003C= cast(%s as DATE)\", $date );\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)= cast(%s as DATE)\", $date );\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  int       $value      ex: 7 - last 7 days, 10 - last 10 days, ...\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function previous_days_filter( LP_Filter $filter, int $value, string $time_field, $is_until = false ) {\r\n-\t\tif ( $value \u003C 2 ) {\r\n-\t\t\tthrow new Exception( 'Day must be greater than 2 days.', 'learnpress' );\r\n-\t\t}\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = \"AND $time_field \u003C= CURDATE()\";\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $time_field >= DATE_ADD(CURDATE(), INTERVAL -%d DAY)\", $value );\r\n-\t\t}\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $date       choose a date to query, format Y-m-d\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function month_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)\u003C= cast(%s as DATE)\", $date );\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND EXTRACT(YEAR_MONTH FROM $time_field)= EXTRACT(YEAR_MONTH FROM %s)\", $date );\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  int       $value      ex: 3 - last 3 months, 10 - last 10 months, ...\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function previous_months_filter( LP_Filter $filter, int $value, string $time_field, $is_until = false ) {\r\n-\t\tif ( $value \u003C 2 ) {\r\n-\t\t\tthrow new Exception( 'Values must be greater than 2 months.', 'learnpress' );\r\n-\t\t}\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = \"AND $time_field \u003C= CURDATE()\";\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND EXTRACT(YEAR_MONTH FROM $time_field) >= EXTRACT(YEAR_MONTH FROM DATE_ADD(CURDATE(), INTERVAL -%d MONTH))\", $value );\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * get data for each month in year\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $date       choose a date to query, format Y-m-d\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function year_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE) \u003C= cast(%s as DATE)\", $date );\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND YEAR($time_field)= YEAR(%s)\", $date );\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * custom query with data range\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  array     $dates      date ranges, array of 2 dates.\r\n-\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function custom_time_filter( LP_Filter $filter, array $dates, string $time_field, $is_until = false ) {\r\n-\t\tif ( empty( $dates ) ) {\r\n-\t\t\tthrow new Exception( 'Select date', 'learnpress' );\r\n-\t\t}\r\n-\t\tsort( $dates );\r\n-\t\tif ( $is_until ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE) \u003C= cast(%s as DATE)\", $dates[1] );\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t\"AND (DATE($time_field) BETWEEN %s AND %s)\",\r\n-\t\t\t\tdate( 'Y-m-d', strtotime( $dates[0] ) ),\r\n-\t\t\t\tdate( 'Y-m-d', strtotime( $dates[1] ) )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * choose filter type foreach filter time\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $type       date|month|year|previous_days|custom\r\n-\t * @param  string    $time_field datetime colummn\r\n-\t * @param  boolean   $value      value to query datetimes\r\n-\t * @param  boolean   $is_until   filter time by the last date\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function filter_time( LP_Filter $filter, string $type, string $time_field, $value = false, $is_until = false ) {\r\n-\t\tif ( ! $value ) {\r\n-\t\t\tthrow new Exception( 'Empty statistic time', 'learnpress' );\r\n-\t\t}\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase 'date':\r\n-\t\t\t\t$filter = $this->date_filter( $filter, $value, $time_field, $is_until );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'month':\r\n-\t\t\t\t$filter = $this->month_filter( $filter, $value, $time_field, $is_until );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'year':\r\n-\t\t\t\t$filter = $this->year_filter( $filter, $value, $time_field, $is_until );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'previous_days':\r\n-\t\t\t\t$filter = $this->previous_days_filter( $filter, (int) $value, $time_field, $is_until );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'previous_months':\r\n-\t\t\t\t$filter = $this->previous_months_filter( $filter, (int) $value, $time_field, $is_until );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'custom':\r\n-\t\t\t\t$value = explode( '+', $value );\r\n-\t\t\t\tif ( count( $value ) !== 2 ) {\r\n-\t\t\t\t\tthrow new Exception( 'Invalid custom time', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$filter = $this->custom_time_filter( $filter, $value, $time_field, $is_until );\r\n-\t\t\tdefault:\r\n-\t\t\t\t\u002F\u002F code...\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * format return data foreach type of filter\r\n-\t * @param  LP_Filter $filter\r\n-\t * @param  string    $type       date|month|year|previous_days|custom\r\n-\t * @param  string    $time_field datetime colummn\r\n-\t * @param  boolean   $value      value to query datetimes\r\n-\t * @return LP_Filter\r\n-\t *\u002F\r\n-\tpublic function chart_filter_group_by( LP_Filter $filter, string $type, string $time_field, $value = false ) {\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase 'date':\r\n-\t\t\t\t$filter = $this->chart_filter_date_group_by( $filter, $time_field );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'month':\r\n-\t\t\t\t$filter = $this->chart_filter_month_group_by( $filter, $time_field );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'year':\r\n-\t\t\t\t$filter = $this->chart_filter_year_group_by( $filter, $time_field );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'previous_days':\r\n-\t\t\t\t$filter = $this->chart_filter_previous_days_group_by( $filter, $time_field );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'previous_months':\r\n-\t\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'custom':\r\n-\t\t\t\tif ( empty( $value ) ) {\r\n-\t\t\t\t\tthrow new Exception( 'Empty statistic time', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$value = explode( '+', $value );\r\n-\t\t\t\tif ( count( $value ) !== 2 ) {\r\n-\t\t\t\t\tthrow new Exception( 'Invalid custom time', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$filter = $this->chart_filter_custom_group_by( $filter, $value, $time_field );\r\n-\t\t\tdefault:\r\n-\t\t\t\t\u002F\u002F code...\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * get_completed_order_data use this for complete order report chart\r\n-\t * @param  string $type  time type filter: date|month|year|previous_days|custom\r\n-\t * @param  string $value time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @return array  completed order data\r\n-\t *\u002F\r\n-\tpublic function get_completed_order_data( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Order_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\r\n-\t\t\u002F\u002F count completed orders\r\n-\t\t$filter->only_fields[] = \"count( p.ID) as x_data\";\r\n-\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\r\n-\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB );\r\n-\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\r\n-\t\t$filter->limit         = -1;\r\n-\t\t$filter->order_by      = $time_field;\r\n-\t\t$filter->order         = \"asc\";\r\n-\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * query to count LP Orders with all statuses\r\n-\t * @param  LP_Order_Filter $filter\r\n-\t * @return LP_Order_Filter\r\n-\t *\u002F\r\n-\tpublic function filter_order_count_statics( LP_Order_Filter $filter ) {\r\n-\t\t\u002F\u002F $filter->query_count = true;\r\n-\t\t$filter->only_fields[]   = \"count( p.ID) as count_order\";\r\n-\t\t$filter->only_fields[]   = \"REPLACE(p.post_status,'lp-','') as order_status\";\r\n-\t\t$filter->group_by        = \"p.post_status\";\r\n-\t\t$filter->where[]         = $this->wpdb->prepare( \"AND p.post_status LIKE CONCAT(%s,'%')\", 'lp-' );\r\n-\t\t$filter->where[]         = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\r\n-\t\t$filter->run_query_count = false;\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * get LP Order count of a filter time\r\n-\t * @param  string $type  date|month|year|previous_days|custom\r\n-\t * @param  string $value time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @return array  result of LP Order count foreach status\r\n-\t *\u002F\r\n-\tpublic function get_order_statics( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Order_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter                   = $this->filter_order_count_statics( $filter );\r\n-\t\t$filter->limit            = -1;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F*Overviews statistics*\u002F\r\n-\t\u002F**\r\n-\t * get sales amount of complete order\r\n-\t * @param  string $type  [time type filter: date|month|year|previous_days|custom]\r\n-\t * @param  string $value [time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom  ]\r\n-\t * @return array  completed order data\r\n-\t *\u002F\r\n-\tpublic function get_net_sales_data( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Order_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$oi_table                 = $this->tb_lp_order_items;\r\n-\t\t$oim_table                = $this->tb_lp_order_itemmeta;\r\n-\t\t\u002F\u002F net sales summary\r\n-\t\t$filter->only_fields[]   = \"SUM(CAST(oim.meta_value AS DECIMAL(10,2))) as x_data\";\r\n-\t\t$time_field              = \"p.post_date\";\r\n-\t\t$filter->join            = [\r\n-\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\r\n-\t\t\t\"INNER JOIN $oim_table AS oim ON oi.order_item_id = oim.learnpress_order_item_id\",\r\n-\t\t];\r\n-\t\t$filter->limit           = -1;\r\n-\t\t$filter->where           = [\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\r\n-\t\t\t$this->wpdb->prepare( \"AND oim.meta_key=%s\", '_total' ),\r\n-\t\t];\r\n-\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter                  = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\r\n-\t\t$filter->order_by        = $time_field;\r\n-\t\t$filter->order           = \"asc\";\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\t\t\u002F\u002F error_log( $this->check_execute_has_error() );\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * get top categories of sold course\r\n-\t * @param  string  $type                date|month|year|previous_days|custom\r\n-\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @param  integer $limit               limit of query, default is 10\r\n-\t * @param  boolean $exclude_free_course exclude free course\r\n-\t * @return array   return term_id and term_count\r\n-\t *\u002F\r\n-\tpublic function get_top_sold_categories( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Order_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"r_term.term_taxonomy_id as term_id\";\r\n-\t\t$filter->only_fields[]    = \"SUM(CAST(oim_qty.meta_value AS UNSIGNED)) as term_count\";\r\n-\t\t$filter->only_fields[]    = \"terms.name as term_name\";\r\n-\t\t$filter->limit            = $limit > 0 ? $limit : 10;\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t$tb_term_relationships    = $this->tb_term_relationships;\r\n-\t\t$tb_term_taxonomy         = $this->tb_term_taxonomy;\r\n-\t\t$tb_terms                 = $this->tb_terms;\r\n-\t\t$oi_table                 = $this->tb_lp_order_items;\r\n-\t\t$oim_table                = $this->tb_lp_order_itemmeta;\r\n-\r\n-\t\t$filter->join = [\r\n-\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\r\n-\t\t\t\"INNER JOIN $tb_term_relationships AS r_term ON oi.item_id = r_term.object_id\",\r\n-\t\t\t\"INNER JOIN $tb_term_taxonomy AS tax_term ON tax_term.term_taxonomy_id = r_term.term_taxonomy_id\",\r\n-\t\t\t\"INNER JOIN $tb_terms AS terms ON terms.term_id = r_term.term_taxonomy_id\",\r\n-\t\t\t\"INNER JOIN $oim_table AS oim_qty ON oi.order_item_id = oim_qty.learnpress_order_item_id AND oim_qty.meta_key = '_quantity'\",\r\n-\t\t];\r\n-\t\tif ( $exclude_free_course ) {\r\n-\t\t\t$filter->join[] = \"INNER JOIN $oim_table AS oim_total ON oi.order_item_id = oim_total.learnpress_order_item_id AND oim_total.meta_key = '_total' AND CAST(oim_total.meta_value AS DECIMAL(10,2)) > 0\";\r\n-\t\t}\r\n-\r\n-\t\t$filter->where = array(\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\r\n-\t\t\t$this->wpdb->prepare( \"AND oi.item_type=%s\", LP_COURSE_CPT ),\r\n-\t\t\t$this->wpdb->prepare( \"AND tax_term.taxonomy=%s\", LP_COURSE_CATEGORY_TAX ),\r\n-\t\t);\r\n-\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->group_by        = \"term_id\";\r\n-\t\t$filter->order_by        = \"term_count\";\r\n-\t\t$filter->order           = \"DESC\";\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * get top courses was sold in the filter\r\n-\t * @param  string  $type                date|month|year|previous_days|custom\r\n-\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @param  integer $limit               limit of query, default 10\r\n-\t * @param  boolean $exclude_free_course exclude free course, get result only purchase course\r\n-\t * @return array   $result\r\n-\t *\u002F\r\n-\tpublic function get_top_sold_courses( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Order_Filter();\r\n-\t\t$tb_posts                 = $this->tb_posts;\r\n-\t\t$filter->collection       = $tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"oi.item_id as course_id\";\r\n-\t\t$filter->only_fields[]    = \"SUM(CAST(oim_qty.meta_value AS UNSIGNED)) as course_count\";\r\n-\t\t$filter->only_fields[]    = \"p2.post_title as course_name\";\r\n-\t\t$filter->limit            = $limit > 0 ? $limit : 10;\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t$oi_table                 = $this->tb_lp_order_items;\r\n-\t\t$oim_table                = $this->tb_lp_order_itemmeta;\r\n-\r\n-\t\t$filter->join  = [\r\n-\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\r\n-\t\t\t\"INNER JOIN $tb_posts AS p2 ON p2.ID = oi.item_id\",\r\n-\t\t\t\"INNER JOIN $oim_table AS oim_qty ON oi.order_item_id = oim_qty.learnpress_order_item_id AND oim_qty.meta_key = '_quantity'\",\r\n-\t\t];\r\n-\r\n-\t\tif ( $exclude_free_course ) {\r\n-\t\t\t$filter->join[] = \"INNER JOIN $oim_table AS oim_total ON oi.order_item_id = oim_total.learnpress_order_item_id AND oim_total.meta_key = '_total' AND CAST(oim_total.meta_value AS DECIMAL(10,2)) > 0\";\r\n-\t\t}\r\n-\r\n-\t\t$filter->where = array(\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\r\n-\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\r\n-\t\t\t$this->wpdb->prepare( \"AND oi.item_type=%s\", LP_COURSE_CPT ),\r\n-\t\t);\r\n-\r\n-\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->group_by        = \"course_id\";\r\n-\t\t$filter->order_by        = \"course_count\";\r\n-\t\t$filter->order           = \"DESC\";\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Overviews get total courses was created ( all statuses )\r\n-\t * @param  string  $type   date|month|year|previous_days|custom\r\n-\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\r\n-\t * @return int     $result course count\r\n-\t *\u002F\r\n-\tpublic function get_total_course_created( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Course_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"p.ID\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\r\n-\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_type=%s\", LP_COURSE_CPT );\r\n-\t\t$filter              = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->query_count = true;\r\n-\t\t$result              = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Overviews get total orders was created ( all statuses )\r\n-\t * @param  string  $type   date|month|year|previous_days|custom\r\n-\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\r\n-\t * @return int     $result order count\r\n-\t *\u002F\r\n-\tpublic function get_total_order_created( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Course_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"p.ID\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\r\n-\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_type = %s\", LP_ORDER_CPT );\r\n-\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_status != %s\", 'auto-draft' );\r\n-\t\t$filter              = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->query_count = true;\r\n-\t\t$result              = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Overviews get total instructors was created ( administrator and lp_teacher )\r\n-\t * @param  string  $type   date|month|year|previous_days|custom\r\n-\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\r\n-\t * @return int     $result user count\r\n-\t *\u002F\r\n-\tpublic function get_total_instructor_created( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->wpdb->users;\r\n-\t\t$filter->collection_alias = \"u\";\r\n-\t\t$filter->only_fields[]    = \"u.ID\";\r\n-\t\t$usermeta_table           = $this->wpdb->usermeta;\r\n-\t\t$filter->join[]           = \"INNER JOIN $usermeta_table AS um ON um.user_id = u.ID\";\r\n-\t\t$time_field               = \"u.user_registered\";\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_key=%s\", $this->wpdb->prefix . 'capabilities' );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_value LIKE %s\", '%' . ADMIN_ROLE . '%' );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"OR um.meta_value LIKE %s\", '%' . LP_TEACHER_ROLE . '%' );\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value, true );\r\n-\t\t$filter->query_count      = true;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Overviews get total student was created ( subscriber )\r\n-\t * @param  string  $type   date|month|year|previous_days|custom\r\n-\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\r\n-\t * @return int     $result user count\r\n-\t *\u002F\r\n-\tpublic function get_total_student_created( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->wpdb->users;\r\n-\t\t$filter->collection_alias = \"u\";\r\n-\t\t$filter->only_fields[]    = \"u.ID\";\r\n-\t\t$usermeta_table           = $this->wpdb->usermeta;\r\n-\t\t$filter->join[]           = \"INNER JOIN $usermeta_table AS um ON um.user_id = u.ID\";\r\n-\t\t$time_field               = \"u.user_registered\";\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_key=%s\", $this->wpdb->prefix . 'capabilities' );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_value LIKE %s\", '%subscriber%' );\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value, true );\r\n-\t\t$filter->query_count      = true;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F*Course statistics*\u002F\r\n-\t\u002F**\r\n-\t * Gets the published course data.\r\n-\t *\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t *\r\n-\t * @return array   The published course data.\r\n-\t *\u002F\r\n-\tpublic function get_published_course_data( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Course_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t\u002F\u002F count published course\r\n-\t\t$filter->only_fields[] = \"count( p.ID) as x_data\";\r\n-\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\r\n-\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_status=%s\", 'publish' );\r\n-\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\r\n-\t\t$filter->limit         = -1;\r\n-\t\t$filter->order_by      = $time_field;\r\n-\t\t$filter->order         = 'asc';\r\n-\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Gets the course count by statuses.\r\n-\t *\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t *\r\n-\t * @return array   $result  The course count by statuses.\r\n-\t *\u002F\r\n-\tpublic function get_course_count_by_statuses( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Course_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"COUNT(p.ID) as course_count\";\r\n-\t\t$filter->only_fields[]    = \"p.post_status as course_status\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_status IN (%s, %s, %s)', 'publish', 'pending', 'future' );\r\n-\t\t$filter->limit            = -1;\r\n-\t\t$filter->group_by         = 'p.post_status';\r\n-\t\t$filter->run_query_count  = false;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Gets the course items count.\r\n-\t *\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t *\r\n-\t * @return int     $result  The course items count.\r\n-\t *\u002F\r\n-\tpublic function get_course_items_count( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->tb_posts;\r\n-\t\t$filter->collection_alias = \"p\";\r\n-\t\t$filter->only_fields[]    = \"COUNT(p.ID) as item_count\";\r\n-\t\t$filter->only_fields[]    = \"p.post_type as item_type\";\r\n-\t\t$time_field               = \"p.post_date\";\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\tif ( class_exists( 'LP_Assignment' ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type IN (%s, %s, %s)', LP_LESSON_CPT, LP_QUIZ_CPT, LP_ASSIGNMENT_CPT );\r\n-\t\t} else {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type IN (%s, %s)', LP_LESSON_CPT, LP_QUIZ_CPT );\r\n-\t\t}\r\n-\t\t$filter->where[]         = $this->wpdb->prepare( 'AND p.post_status IN(%s,%s,%s)', 'publish', 'pending', 'future' );\r\n-\t\t$filter->group_by        = 'p.post_type';\r\n-\t\t$filter->limit           = -1;\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F*User Statistics*\u002F\r\n-\t\u002F**\r\n-\t * Gets the user registered data.\r\n-\t *\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t *\r\n-\t * @return array   $result  The user registered data.\r\n-\t *\u002F\r\n-\tpublic function get_user_registered_data( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->tb_users;\r\n-\t\t$filter->collection_alias = \"u\";\r\n-\t\t$time_field               = \"u.user_registered\";\r\n-\t\t\u002F\u002F count user_registered\r\n-\t\t$filter->only_fields[] = \"count( u.ID) as x_data\";\r\n-\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\r\n-\t\t$filter->limit         = -1;\r\n-\t\t$filter->order_by      = $time_field;\r\n-\t\t$filter->order         = \"asc\";\r\n-\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$result                  = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Gets the users by user item graduation statuses.\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @return int     $result  count users by graduation statuses.\r\n-\t *\u002F\r\n-\tpublic function get_users_by_user_item_graduation_statuses( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->tb_lp_user_items;\r\n-\t\t$filter->collection_alias = \"ui\";\r\n-\t\t$filter->only_fields[]    = \"ui.graduation as graduation_status\";\r\n-\t\t$filter->only_fields[]    = \"COUNT(distinct(ui.user_id)) as user_count\";\r\n-\t\t$time_field               = \"ui.start_time\";\r\n-\t\t$filter->limit            = -1;\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND ui.item_type=%s\", LP_COURSE_CPT );\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->group_by         = \"graduation_status\";\r\n-\t\t$filter->run_query_count  = false;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * filter user dont study any course in the filter time\r\n-\t * @param  string  $type    date|month|year|previous_days|custom\r\n-\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @return int     $result  count users\r\n-\t *\u002F\r\n-\tpublic function get_users_not_started_any_course( string $type, string $value ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter          = new LP_Filter();\r\n-\t\t$table_useritems = $this->tb_lp_user_items;\r\n-\t\t$table_user      = $this->tb_users;\r\n-\t\t$time_filter     = $this->filter_time( $filter, $type, \"ui.start_time\", $value );\r\n-\t\t\u002F\u002F get time_filter condition SQL\r\n-\t\t$time_condition = $time_filter->where[0];\r\n-\t\t\u002F\u002F reset where\r\n-\t\t$filter->where            = array();\r\n-\t\t$filter->collection       = $table_user;\r\n-\t\t$filter->collection_alias = \"u\";\r\n-\t\t$filter->only_fields[]    = \"u.ID\";\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND NOT EXISTS (SELECT * FROM $table_useritems as ui WHERE ui.user_id = u.ID $time_condition)\" );\r\n-\t\t$filter->limit            = -1;\r\n-\t\t$filter->query_count      = true;\r\n-\t\t\u002F\u002F use this to see the sql query\r\n-\t\t\u002F\u002F $filter->return_string_query= true;\r\n-\t\t$result = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * get top courses was enrolled by users\r\n-\t * @param  string  $type                date|month|year|previous_days|custom\r\n-\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\r\n-\t * @param  integer $limit               limit of query, default 10\r\n-\t * @param  boolean $exclude_free_course exclude free course, get result only purchase course\r\n-\t * @return array   $result\r\n-\t *\u002F\r\n-\tpublic function get_top_enrolled_courses( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\r\n-\t\tif ( ! $type || ! $value ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->tb_lp_user_items;\r\n-\t\t$filter->collection_alias = \"ui\";\r\n-\t\t$filter->only_fields[]    = \"ui.item_id as course_id\";\r\n-\t\t$filter->only_fields[]    = \"COUNT(ui.user_item_id) as enrolled_user\";\r\n-\t\t$filter->only_fields[]    = \"p.post_author as instructor_id\";\r\n-\t\t$filter->only_fields[]    = \"p.post_title as course_name\";\r\n-\t\t$filter->only_fields[]    = \"u.display_name as instructor_name\";\r\n-\t\t$filter->limit            = ! $limit ? 10 : $limit;\r\n-\t\t$time_field               = \"ui.start_time\";\r\n-\t\t$filter->join[]           = \"INNER JOIN $this->tb_posts AS p ON p.ID = ui.item_id\";\r\n-\t\t$filter->join[]           = \"INNER JOIN $this->tb_users AS u ON u.ID = p.post_author\";\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( \"AND ui.item_type=%s\", LP_COURSE_CPT );\r\n-\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\r\n-\t\t$filter->group_by         = \"course_id\";\r\n-\t\t$filter->order_by         = \"enrolled_user\";\r\n-\t\t$filter->order            = \"DESC\";\r\n-\t\t$filter->run_query_count  = false;\r\n-\t\t$result                   = $this->execute( $filter );\r\n-\t\treturn $result;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Statistics_DB\n+ *\n+ * @author thimpress\n+ * @since 4.2.6\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Statistics_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * filter to get data for chart of a day.\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $time_field the column use to filter time\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_date_group_by( LP_Filter $filter, string $time_field ) {\n+\t\t$filter->only_fields[] = \"HOUR($time_field) as x_data_label\";\n+\t\t$filter->group_by      = \"x_data_label\";\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * filter to get data for chart of last some days. ex: last 7 days, last 30 days,...\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $time_field the column use to filter time\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_previous_days_group_by( LP_Filter $filter, string $time_field ) {\n+\t\t$filter->only_fields[] = \"CAST($time_field AS DATE) as x_data_label\";\n+\t\t$filter->group_by      = \"x_data_label\";\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * filter to get data for chart of a month\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $time_field the column use to filter time\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_month_group_by( LP_Filter $filter, string $time_field ) {\n+\t\t$filter->only_fields[] = \"DAY($time_field) as x_data_label\";\n+\t\t$filter->group_by      = \"x_data_label\";\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * filter to get data for chart of months. ex: last 3 months, 6 months, 9 months,...\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $time_field the column use to filter time\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_previous_months_group_by( LP_Filter $filter, string $time_field ) {\n+\t\t$filter->only_fields[] = \"DATE_FORMAT( $time_field , '%m-%Y') as x_data_label\";\n+\t\t$filter->group_by      = \"x_data_label\";\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * filter to get data for chart of a year\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $time_field the column use to filter time. ex: post_date with posts table, user_registered on users table\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_year_group_by( LP_Filter $filter, string $time_field ) {\n+\t\t$filter->only_fields[] = \"MONTH($time_field) as x_data_label\";\n+\t\t$filter->group_by      = \"x_data_label\";\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * filter to get data for chart of a custom date ranges\n+\t * @param  LP_Filter $filter\n+\t * @param  array     $dates array of date range use to filer\n+\t * @param  string    $time_field the column use to filter time. ex: post_date with posts table, user_registered on users table\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_custom_group_by( LP_Filter $filter, array $dates, string $time_field ) {\n+\t\t$diff1 = date_create( $dates[0] );\n+\t\t$diff2 = date_create( $dates[1] );\n+\t\tif ( ! $diff1 || ! $diff2 ) {\n+\t\t\tthrow new Exception( 'Custom filter date is invalid.', 'learnpress' );\n+\t\t}\n+\t\t$diff = date_diff( $diff1, $diff2, true );\n+\t\t$y    = $diff->y;\n+\t\t$m    = $diff->m;\n+\t\t$d    = $diff->d;\n+\t\tif ( $y \u003C 1 ) {\n+\t\t\tif ( $m \u003C= 1 ) {\n+\t\t\t\tif ( $d \u003C 1 ) {\n+\t\t\t\t\t$filter = $this->chart_filter_date_group_by( $filter, $time_field );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F more thans 2 days return data of days\n+\t\t\t\t\t$filter = $this->chart_filter_previous_days_group_by( $filter, $time_field );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F more thans 2 months return data of months\n+\t\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\n+\t\t\t}\n+\t\t} elseif ( $y \u003C 2 ) {\n+\t\t\t\u002F\u002F less thans 2 years return data of year months\n+\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\n+\t\t} elseif ( $y \u003C 5 ) {\n+\t\t\t\u002F\u002F from 2-5years return data of year quarters\n+\t\t\t$filter->only_fields[] = $this->wpdb->prepare( \"CONCAT( %s, QUARTER($time_field) ,%s, Year($time_field)) as x_data_label\", [ 'q', '-' ] );\n+\t\t\t$filter->group_by      = \"x_data_label\";\n+\t\t} else {\n+\t\t\t\u002F\u002F more than 5 years, return data of years\n+\t\t\t$filter->only_fields[] = \"YEAR($time_field) as x_data_label\";\n+\t\t\t$filter->group_by      = \"x_data_label\";\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $date       choose a date to query, format Y-m-d\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function date_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)\u003C= cast(%s as DATE)\", $date );\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)= cast(%s as DATE)\", $date );\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * @param  LP_Filter $filter\n+\t * @param  int       $value      ex: 7 - last 7 days, 10 - last 10 days, ...\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function previous_days_filter( LP_Filter $filter, int $value, string $time_field, $is_until = false ) {\n+\t\tif ( $value \u003C 2 ) {\n+\t\t\tthrow new Exception( 'Day must be greater than 2 days.', 'learnpress' );\n+\t\t}\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = \"AND $time_field \u003C= CURDATE()\";\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $time_field >= DATE_ADD(CURDATE(), INTERVAL -%d DAY)\", $value );\n+\t\t}\n+\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $date       choose a date to query, format Y-m-d\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function month_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE)\u003C= cast(%s as DATE)\", $date );\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND EXTRACT(YEAR_MONTH FROM $time_field)= EXTRACT(YEAR_MONTH FROM %s)\", $date );\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * @param  LP_Filter $filter\n+\t * @param  int       $value      ex: 3 - last 3 months, 10 - last 10 months, ...\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function previous_months_filter( LP_Filter $filter, int $value, string $time_field, $is_until = false ) {\n+\t\tif ( $value \u003C 2 ) {\n+\t\t\tthrow new Exception( 'Values must be greater than 2 months.', 'learnpress' );\n+\t\t}\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = \"AND $time_field \u003C= CURDATE()\";\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND EXTRACT(YEAR_MONTH FROM $time_field) >= EXTRACT(YEAR_MONTH FROM DATE_ADD(CURDATE(), INTERVAL -%d MONTH))\", $value );\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * get data for each month in year\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $date       choose a date to query, format Y-m-d\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function year_filter( LP_Filter $filter, string $date, string $time_field, $is_until = false ) {\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE) \u003C= cast(%s as DATE)\", $date );\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND YEAR($time_field)= YEAR(%s)\", $date );\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * custom query with data range\n+\t * @param  LP_Filter $filter\n+\t * @param  array     $dates      date ranges, array of 2 dates.\n+\t * @param  string    $time_field $time_field the column use to filter time. ex: post_date with posts table, user_registered on\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function custom_time_filter( LP_Filter $filter, array $dates, string $time_field, $is_until = false ) {\n+\t\tif ( empty( $dates ) ) {\n+\t\t\tthrow new Exception( 'Select date', 'learnpress' );\n+\t\t}\n+\t\tsort( $dates );\n+\t\tif ( $is_until ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND cast( $time_field as DATE) \u003C= cast(%s as DATE)\", $dates[1] );\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t\"AND (DATE($time_field) BETWEEN %s AND %s)\",\n+\t\t\t\tdate( 'Y-m-d', strtotime( $dates[0] ) ),\n+\t\t\t\tdate( 'Y-m-d', strtotime( $dates[1] ) )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * choose filter type foreach filter time\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $type       date|month|year|previous_days|custom\n+\t * @param  string    $time_field datetime colummn\n+\t * @param  boolean   $value      value to query datetimes\n+\t * @param  boolean   $is_until   filter time by the last date\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function filter_time( LP_Filter $filter, string $type, string $time_field, $value = false, $is_until = false ) {\n+\t\tif ( ! $value ) {\n+\t\t\tthrow new Exception( 'Empty statistic time', 'learnpress' );\n+\t\t}\n+\t\tswitch ( $type ) {\n+\t\t\tcase 'date':\n+\t\t\t\t$filter = $this->date_filter( $filter, $value, $time_field, $is_until );\n+\t\t\t\tbreak;\n+\t\t\tcase 'month':\n+\t\t\t\t$filter = $this->month_filter( $filter, $value, $time_field, $is_until );\n+\t\t\t\tbreak;\n+\t\t\tcase 'year':\n+\t\t\t\t$filter = $this->year_filter( $filter, $value, $time_field, $is_until );\n+\t\t\t\tbreak;\n+\t\t\tcase 'previous_days':\n+\t\t\t\t$filter = $this->previous_days_filter( $filter, (int) $value, $time_field, $is_until );\n+\t\t\t\tbreak;\n+\t\t\tcase 'previous_months':\n+\t\t\t\t$filter = $this->previous_months_filter( $filter, (int) $value, $time_field, $is_until );\n+\t\t\t\tbreak;\n+\t\t\tcase 'custom':\n+\t\t\t\t$value = explode( '+', $value );\n+\t\t\t\tif ( count( $value ) !== 2 ) {\n+\t\t\t\t\tthrow new Exception( 'Invalid custom time', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t$filter = $this->custom_time_filter( $filter, $value, $time_field, $is_until );\n+\t\t\tdefault:\n+\t\t\t\t\u002F\u002F code...\n+\t\t\t\tbreak;\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * format return data foreach type of filter\n+\t * @param  LP_Filter $filter\n+\t * @param  string    $type       date|month|year|previous_days|custom\n+\t * @param  string    $time_field datetime colummn\n+\t * @param  boolean   $value      value to query datetimes\n+\t * @return LP_Filter\n+\t *\u002F\n+\tpublic function chart_filter_group_by( LP_Filter $filter, string $type, string $time_field, $value = false ) {\n+\t\tswitch ( $type ) {\n+\t\t\tcase 'date':\n+\t\t\t\t$filter = $this->chart_filter_date_group_by( $filter, $time_field );\n+\t\t\t\tbreak;\n+\t\t\tcase 'month':\n+\t\t\t\t$filter = $this->chart_filter_month_group_by( $filter, $time_field );\n+\t\t\t\tbreak;\n+\t\t\tcase 'year':\n+\t\t\t\t$filter = $this->chart_filter_year_group_by( $filter, $time_field );\n+\t\t\t\tbreak;\n+\t\t\tcase 'previous_days':\n+\t\t\t\t$filter = $this->chart_filter_previous_days_group_by( $filter, $time_field );\n+\t\t\t\tbreak;\n+\t\t\tcase 'previous_months':\n+\t\t\t\t$filter = $this->chart_filter_previous_months_group_by( $filter, $time_field );\n+\t\t\t\tbreak;\n+\t\t\tcase 'custom':\n+\t\t\t\tif ( empty( $value ) ) {\n+\t\t\t\t\tthrow new Exception( 'Empty statistic time', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t$value = explode( '+', $value );\n+\t\t\t\tif ( count( $value ) !== 2 ) {\n+\t\t\t\t\tthrow new Exception( 'Invalid custom time', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t$filter = $this->chart_filter_custom_group_by( $filter, $value, $time_field );\n+\t\t\tdefault:\n+\t\t\t\t\u002F\u002F code...\n+\t\t\t\tbreak;\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * get_completed_order_data use this for complete order report chart\n+\t * @param  string $type  time type filter: date|month|year|previous_days|custom\n+\t * @param  string $value time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @return array  completed order data\n+\t *\u002F\n+\tpublic function get_completed_order_data( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\t\t$filter                   = new LP_Order_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$time_field               = \"p.post_date\";\n+\n+\t\t\u002F\u002F count completed orders\n+\t\t$filter->only_fields[] = \"count( p.ID) as x_data\";\n+\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB );\n+\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\n+\t\t$filter->limit         = -1;\n+\t\t$filter->order_by      = $time_field;\n+\t\t$filter->order         = \"asc\";\n+\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * query to count LP Orders with all statuses\n+\t * @param  LP_Order_Filter $filter\n+\t * @return LP_Order_Filter\n+\t *\u002F\n+\tpublic function filter_order_count_statics( LP_Order_Filter $filter ) {\n+\t\t\u002F\u002F $filter->query_count = true;\n+\t\t$filter->only_fields[]   = \"count( p.ID) as count_order\";\n+\t\t$filter->only_fields[]   = \"REPLACE(p.post_status,'lp-','') as order_status\";\n+\t\t$filter->group_by        = \"p.post_status\";\n+\t\t$filter->where[]         = $this->wpdb->prepare( \"AND p.post_status LIKE CONCAT(%s,'%')\", 'lp-' );\n+\t\t$filter->where[]         = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\n+\t\t$filter->run_query_count = false;\n+\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * get LP Order count of a filter time\n+\t * @param  string $type  date|month|year|previous_days|custom\n+\t * @param  string $value time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @return array  result of LP Order count foreach status\n+\t *\u002F\n+\tpublic function get_order_statics( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Order_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$time_field               = \"p.post_date\";\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                   = $this->filter_order_count_statics( $filter );\n+\t\t$filter->limit            = -1;\n+\t\t$result                   = $this->execute( $filter );\n+\n+\t\treturn $result;\n+\t}\n+\t\u002F*Overviews statistics*\u002F\n+\t\u002F**\n+\t * get sales amount of complete order\n+\t * @param  string $type  [time type filter: date|month|year|previous_days|custom]\n+\t * @param  string $value [time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom  ]\n+\t * @return array  completed order data\n+\t *\u002F\n+\tpublic function get_net_sales_data( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\t\t$filter                   = new LP_Order_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$oi_table                 = $this->tb_lp_order_items;\n+\t\t$oim_table                = $this->tb_lp_order_itemmeta;\n+\t\t\u002F\u002F net sales summary\n+\t\t$filter->only_fields[]   = \"SUM(CAST(oim.meta_value AS DECIMAL(10,2))) as x_data\";\n+\t\t$time_field              = \"p.post_date\";\n+\t\t$filter->join            = [\n+\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\n+\t\t\t\"INNER JOIN $oim_table AS oim ON oi.order_item_id = oim.learnpress_order_item_id\",\n+\t\t];\n+\t\t$filter->limit           = -1;\n+\t\t$filter->where           = [\n+\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\n+\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\n+\t\t\t$this->wpdb->prepare( \"AND oim.meta_key=%s\", '_total' ),\n+\t\t];\n+\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                  = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->order_by        = $time_field;\n+\t\t$filter->order           = \"asc\";\n+\t\t$filter->run_query_count = false;\n+\t\t\n+\t\t$result                  = $this->execute( $filter );\n+\t\t\u002F\u002F error_log( $this->check_execute_has_error() );\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * get top categories of sold course\n+\t * @param  string  $type                date|month|year|previous_days|custom\n+\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @param  integer $limit               limit of query, default is 10\n+\t * @param  boolean $exclude_free_course exclude free course\n+\t * @return array   return term_id and term_count\n+\t *\u002F\n+\tpublic function get_top_sold_categories( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Order_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"r_term.term_taxonomy_id as term_id\";\n+\t\t$filter->only_fields[]    = \"SUM(CAST(oim_qty.meta_value AS UNSIGNED)) as term_count\";\n+\t\t$filter->only_fields[]    = \"terms.name as term_name\";\n+\t\t$filter->limit            = $limit > 0 ? $limit : 10;\n+\t\t$time_field               = \"p.post_date\";\n+\t\t$tb_term_relationships    = $this->tb_term_relationships;\n+\t\t$tb_term_taxonomy         = $this->tb_term_taxonomy;\n+\t\t$tb_terms                 = $this->tb_terms;\n+\t\t$oi_table                 = $this->tb_lp_order_items;\n+\t\t$oim_table                = $this->tb_lp_order_itemmeta;\n+\n+\t\t$filter->join = [\n+\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\n+\t\t\t\"INNER JOIN $tb_term_relationships AS r_term ON oi.item_id = r_term.object_id\",\n+\t\t\t\"INNER JOIN $tb_term_taxonomy AS tax_term ON tax_term.term_taxonomy_id = r_term.term_taxonomy_id\",\n+\t\t\t\"INNER JOIN $tb_terms AS terms ON terms.term_id = r_term.term_taxonomy_id\",\n+\t\t\t\"INNER JOIN $oim_table AS oim_qty ON oi.order_item_id = oim_qty.learnpress_order_item_id AND oim_qty.meta_key = '_quantity'\",\n+\t\t];\n+\t\tif ( $exclude_free_course ) {\n+\t\t\t$filter->join[] = \"INNER JOIN $oim_table AS oim_total ON oi.order_item_id = oim_total.learnpress_order_item_id AND oim_total.meta_key = '_total' AND CAST(oim_total.meta_value AS DECIMAL(10,2)) > 0\";\n+\t\t}\n+\n+\t\t$filter->where = array(\n+\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\n+\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\n+\t\t\t$this->wpdb->prepare( \"AND oi.item_type=%s\", LP_COURSE_CPT ),\n+\t\t\t$this->wpdb->prepare( \"AND tax_term.taxonomy=%s\", LP_COURSE_CATEGORY_TAX ),\n+\t\t);\n+\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->group_by        = \"term_id\";\n+\t\t$filter->order_by        = \"term_count\";\n+\t\t$filter->order           = \"DESC\";\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * get top courses was sold in the filter\n+\t * @param  string  $type                date|month|year|previous_days|custom\n+\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @param  integer $limit               limit of query, default 10\n+\t * @param  boolean $exclude_free_course exclude free course, get result only purchase course\n+\t * @return array   $result\n+\t *\u002F\n+\tpublic function get_top_sold_courses( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Order_Filter();\n+\t\t$tb_posts                 = $this->tb_posts;\n+\t\t$filter->collection       = $tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"oi.item_id as course_id\";\n+\t\t$filter->only_fields[]    = \"SUM(CAST(oim_qty.meta_value AS UNSIGNED)) as course_count\";\n+\t\t$filter->only_fields[]    = \"p2.post_title as course_name\";\n+\t\t$filter->limit            = $limit > 0 ? $limit : 10;\n+\t\t$time_field               = \"p.post_date\";\n+\t\t$oi_table                 = $this->tb_lp_order_items;\n+\t\t$oim_table                = $this->tb_lp_order_itemmeta;\n+\n+\t\t$filter->join  = [\n+\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\n+\t\t\t\"INNER JOIN $tb_posts AS p2 ON p2.ID = oi.item_id\",\n+\t\t\t\"INNER JOIN $oim_table AS oim_qty ON oi.order_item_id = oim_qty.learnpress_order_item_id AND oim_qty.meta_key = '_quantity'\",\n+\t\t];\n+\n+\t\tif ( $exclude_free_course ) {\n+\t\t\t$filter->join[] = \"INNER JOIN $oim_table AS oim_total ON oi.order_item_id = oim_total.learnpress_order_item_id AND oim_total.meta_key = '_total' AND CAST(oim_total.meta_value AS DECIMAL(10,2)) > 0\";\n+\t\t}\n+\n+\t\t$filter->where = array(\n+\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\n+\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\n+\t\t\t$this->wpdb->prepare( \"AND oi.item_type=%s\", LP_COURSE_CPT ),\n+\t\t);\n+\n+\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->group_by        = \"course_id\";\n+\t\t$filter->order_by        = \"course_count\";\n+\t\t$filter->order           = \"DESC\";\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Overviews get total courses was created ( all statuses )\n+\t * @param  string  $type   date|month|year|previous_days|custom\n+\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\n+\t * @return int     $result course count\n+\t *\u002F\n+\tpublic function get_total_course_created( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Course_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"p.ID\";\n+\t\t$time_field               = \"p.post_date\";\n+\n+\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_type=%s\", LP_COURSE_CPT );\n+\t\t$filter              = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->query_count = true;\n+\t\t$result              = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Overviews get total orders was created ( all statuses )\n+\t * @param  string  $type   date|month|year|previous_days|custom\n+\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\n+\t * @return int     $result order count\n+\t *\u002F\n+\tpublic function get_total_order_created( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Course_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"p.ID\";\n+\t\t$time_field               = \"p.post_date\";\n+\n+\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_type = %s\", LP_ORDER_CPT );\n+\t\t$filter->where[]     = $this->wpdb->prepare( \"AND p.post_status != %s\", 'auto-draft' );\n+\t\t$filter              = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->query_count = true;\n+\t\t$result              = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Overviews get total instructors was created ( administrator and lp_teacher )\n+\t * @param  string  $type   date|month|year|previous_days|custom\n+\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\n+\t * @return int     $result user count\n+\t *\u002F\n+\tpublic function get_total_instructor_created( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->wpdb->users;\n+\t\t$filter->collection_alias = \"u\";\n+\t\t$filter->only_fields[]    = \"u.ID\";\n+\t\t$usermeta_table           = $this->wpdb->usermeta;\n+\t\t$filter->join[]           = \"INNER JOIN $usermeta_table AS um ON um.user_id = u.ID\";\n+\t\t$time_field               = \"u.user_registered\";\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_key=%s\", $this->wpdb->prefix . 'capabilities' );\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_value LIKE %s\", '%' . ADMIN_ROLE . '%' );\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"OR um.meta_value LIKE %s\", '%' . LP_TEACHER_ROLE . '%' );\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value, true );\n+\t\t$filter->query_count      = true;\n+\t\t$result                   = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Overviews get total student was created ( subscriber )\n+\t * @param  string  $type   date|month|year|previous_days|custom\n+\t * @param  string  $value  time value string \"Y-m-d\" for date|month|year, int for previous_days, string\n+\t * @return int     $result user count\n+\t *\u002F\n+\tpublic function get_total_student_created( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->wpdb->users;\n+\t\t$filter->collection_alias = \"u\";\n+\t\t$filter->only_fields[]    = \"u.ID\";\n+\t\t$usermeta_table           = $this->wpdb->usermeta;\n+\t\t$filter->join[]           = \"INNER JOIN $usermeta_table AS um ON um.user_id = u.ID\";\n+\t\t$time_field               = \"u.user_registered\";\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_key=%s\", $this->wpdb->prefix . 'capabilities' );\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND um.meta_value LIKE %s\", '%subscriber%' );\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value, true );\n+\t\t$filter->query_count      = true;\n+\t\t$result                   = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F*Course statistics*\u002F\n+\t\u002F**\n+\t * Gets the published course data.\n+\t *\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t *\n+\t * @return array   The published course data.\n+\t *\u002F\n+\tpublic function get_published_course_data( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\t\t$filter                   = new LP_Course_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$time_field               = \"p.post_date\";\n+\t\t\u002F\u002F count published course\n+\t\t$filter->only_fields[] = \"count( p.ID) as x_data\";\n+\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_status=%s\", 'publish' );\n+\t\t$filter->where[]       = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\n+\t\t$filter->limit         = -1;\n+\t\t$filter->order_by      = $time_field;\n+\t\t$filter->order         = 'asc';\n+\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Gets the course count by statuses.\n+\t *\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t *\n+\t * @return array   $result  The course count by statuses.\n+\t *\u002F\n+\tpublic function get_course_count_by_statuses( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\t\t$filter                   = new LP_Course_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"COUNT(p.ID) as course_count\";\n+\t\t$filter->only_fields[]    = \"p.post_status as course_status\";\n+\t\t$time_field               = \"p.post_date\";\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type );\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND p.post_status IN (%s, %s, %s)', 'publish', 'pending', 'future' );\n+\t\t$filter->limit            = -1;\n+\t\t$filter->group_by         = 'p.post_status';\n+\t\t$filter->run_query_count  = false;\n+\t\t$result                   = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Gets the course items count.\n+\t *\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t *\n+\t * @return int     $result  The course items count.\n+\t *\u002F\n+\tpublic function get_course_items_count( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = \"p\";\n+\t\t$filter->only_fields[]    = \"COUNT(p.ID) as item_count\";\n+\t\t$filter->only_fields[]    = \"p.post_type as item_type\";\n+\t\t$time_field               = \"p.post_date\";\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\tif ( class_exists( 'LP_Assignment' ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type IN (%s, %s, %s)', LP_LESSON_CPT, LP_QUIZ_CPT, LP_ASSIGNMENT_CPT );\n+\t\t} else {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_type IN (%s, %s)', LP_LESSON_CPT, LP_QUIZ_CPT );\n+\t\t}\n+\t\t$filter->where[]         = $this->wpdb->prepare( 'AND p.post_status IN(%s,%s,%s)', 'publish', 'pending', 'future' );\n+\t\t$filter->group_by        = 'p.post_type';\n+\t\t$filter->limit           = -1;\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F*User Statistics*\u002F\n+\t\u002F**\n+\t * Gets the user registered data.\n+\t *\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t *\n+\t * @return array   $result  The user registered data.\n+\t *\u002F\n+\tpublic function get_user_registered_data( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->tb_users;\n+\t\t$filter->collection_alias = \"u\";\n+\t\t$time_field               = \"u.user_registered\";\n+\t\t\u002F\u002F count user_registered\n+\t\t$filter->only_fields[] = \"count( u.ID) as x_data\";\n+\t\t$filter                = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->limit         = -1;\n+\t\t$filter->order_by      = $time_field;\n+\t\t$filter->order         = \"asc\";\n+\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Gets the users by user item graduation statuses.\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @return int     $result  count users by graduation statuses.\n+\t *\u002F\n+\tpublic function get_users_by_user_item_graduation_statuses( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->tb_lp_user_items;\n+\t\t$filter->collection_alias = \"ui\";\n+\t\t$filter->only_fields[]    = \"ui.graduation as graduation_status\";\n+\t\t$filter->only_fields[]    = \"COUNT(distinct(ui.user_id)) as user_count\";\n+\t\t$time_field               = \"ui.start_time\";\n+\t\t$filter->limit            = -1;\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND ui.item_type=%s\", LP_COURSE_CPT );\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->group_by         = \"graduation_status\";\n+\t\t$filter->run_query_count  = false;\n+\t\t$result                   = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * filter user dont study any course in the filter time\n+\t * @param  string  $type    date|month|year|previous_days|custom\n+\t * @param  string  $value   time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @return int     $result  count users\n+\t *\u002F\n+\tpublic function get_users_not_started_any_course( string $type, string $value ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter          = new LP_Filter();\n+\t\t$table_useritems = $this->tb_lp_user_items;\n+\t\t$table_user      = $this->tb_users;\n+\t\t$time_filter     = $this->filter_time( $filter, $type, \"ui.start_time\", $value );\n+\t\t\u002F\u002F get time_filter condition SQL\n+\t\t$time_condition = $time_filter->where[0];\n+\t\t\u002F\u002F reset where\n+\t\t$filter->where            = array();\n+\t\t$filter->collection       = $table_user;\n+\t\t$filter->collection_alias = \"u\";\n+\t\t$filter->only_fields[]    = \"u.ID\";\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND NOT EXISTS (SELECT * FROM $table_useritems as ui WHERE ui.user_id = u.ID $time_condition)\" );\n+\t\t$filter->limit            = -1;\n+\t\t$filter->query_count      = true;\n+\t\t\u002F\u002F use this to see the sql query\n+\t\t\u002F\u002F $filter->return_string_query= true;\n+\t\t$result = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * get top courses was enrolled by users\n+\t * @param  string  $type                date|month|year|previous_days|custom\n+\t * @param  string  $value               time value string \"Y-m-d\" for date|month|year, int for previous_days, string \"Y-m-d+Y-m-d\" for custom\n+\t * @param  integer $limit               limit of query, default 10\n+\t * @param  boolean $exclude_free_course exclude free course, get result only purchase course\n+\t * @return array   $result\n+\t *\u002F\n+\tpublic function get_top_enrolled_courses( string $type, string $value, $limit = 0, $exclude_free_course = false ) {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn;\n+\t\t}\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->tb_lp_user_items;\n+\t\t$filter->collection_alias = \"ui\";\n+\t\t$filter->only_fields[]    = \"ui.item_id as course_id\";\n+\t\t$filter->only_fields[]    = \"COUNT(ui.user_item_id) as enrolled_user\";\n+\t\t$filter->only_fields[]    = \"p.post_author as instructor_id\";\n+\t\t$filter->only_fields[]    = \"p.post_title as course_name\";\n+\t\t$filter->only_fields[]    = \"u.display_name as instructor_name\";\n+\t\t$filter->limit            = ! $limit ? 10 : $limit;\n+\t\t$time_field               = \"ui.start_time\";\n+\t\t$filter->join[]           = \"INNER JOIN $this->tb_posts AS p ON p.ID = ui.item_id\";\n+\t\t$filter->join[]           = \"INNER JOIN $this->tb_users AS u ON u.ID = p.post_author\";\n+\t\t$filter->where[]          = $this->wpdb->prepare( \"AND ui.item_type=%s\", LP_COURSE_CPT );\n+\t\t$filter                   = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter->group_by         = \"course_id\";\n+\t\t$filter->order_by         = \"enrolled_user\";\n+\t\t$filter->order            = \"DESC\";\n+\t\t$filter->run_query_count  = false;\n+\t\t$result                   = $this->execute( $filter );\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get top sold courses by a specific instructor.\n+\t *\n+\t * @param int $instructor_id The instructor user ID.\n+\t * @param int $limit Number of courses to return, default 5.\n+\t *\n+\t * @return array Top sold courses for the instructor.\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_top_sold_courses_by_instructor( int $instructor_id, int $limit = 5 ): array {\n+\t\t$tb_posts  = $this->tb_posts;\n+\t\t$oi_table  = $this->tb_lp_order_items;\n+\t\t$oim_table = $this->tb_lp_order_itemmeta;\n+\n+\t\t$filter                   = new \\LP_Order_Filter();\n+\t\t$filter->collection       = $tb_posts;\n+\t\t$filter->collection_alias = 'p';\n+\t\t$filter->only_fields[]    = 'oi.item_id as course_id';\n+\t\t$filter->only_fields[]    = 'SUM(CAST(oim_qty.meta_value AS UNSIGNED)) as course_count';\n+\t\t$filter->only_fields[]    = 'p2.post_title as course_name';\n+\t\t$filter->only_fields[]    = 'u.display_name as instructor_name';\n+\t\t$filter->only_fields[]    = 'SUM(CAST(oim_total.meta_value AS DECIMAL(10,2))) as total_revenue';\n+\t\t$filter->limit            = $limit > 0 ? $limit : 5;\n+\n+\t\t$filter->join = [\n+\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\n+\t\t\t\"INNER JOIN $tb_posts AS p2 ON p2.ID = oi.item_id\",\n+\t\t\t\"INNER JOIN {$this->tb_users} AS u ON u.ID = p2.post_author\",\n+\t\t\t\"INNER JOIN $oim_table AS oim_qty ON oi.order_item_id = oim_qty.learnpress_order_item_id AND oim_qty.meta_key = '_quantity'\",\n+\t\t\t\"INNER JOIN $oim_table AS oim_total ON oi.order_item_id = oim_total.learnpress_order_item_id AND oim_total.meta_key = '_total'\",\n+\t\t];\n+\n+\t\t$filter->where = array(\n+\t\t\t$this->wpdb->prepare( 'AND p.post_type=%s', $filter->post_type ),\n+\t\t\t$this->wpdb->prepare( 'AND p.post_status=%s', LP_ORDER_COMPLETED_DB ),\n+\t\t\t$this->wpdb->prepare( 'AND oi.item_type=%s', LP_COURSE_CPT ),\n+\t\t);\n+\n+\t\tif ( $instructor_id > 0 ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p2.post_author=%d', $instructor_id );\n+\t\t}\n+\n+\t\t$filter->group_by        = 'course_id';\n+\t\t$filter->order_by        = 'course_count';\n+\t\t$filter->order           = 'DESC';\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn is_array( $result ) ? $result : [];\n+\t}\n+\n+\t\u002F**\n+\t * Get top enrolled courses by a specific instructor.\n+\t *\n+\t * @param int $instructor_id The instructor user ID.\n+\t * @param int $limit Number of courses to return, default 5.\n+\t *\n+\t * @return array Top enrolled courses for the instructor.\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_top_enrolled_courses_by_instructor( int $instructor_id, int $limit = 5 ): array {\n+\t\t$filter                   = new \\LP_Filter();\n+\t\t$filter->collection       = $this->tb_lp_user_items;\n+\t\t$filter->collection_alias = 'ui';\n+\t\t$filter->only_fields[]    = 'ui.item_id as course_id';\n+\t\t$filter->only_fields[]    = 'COUNT(ui.user_item_id) as enrollment_count';\n+\t\t$filter->only_fields[]    = 'p.post_title as course_name';\n+\t\t$filter->only_fields[]    = 'u.display_name as instructor_name';\n+\t\t$filter->limit            = $limit > 0 ? $limit : 5;\n+\n+\t\t$filter->join[] = \"INNER JOIN {$this->tb_posts} AS p ON p.ID = ui.item_id\";\n+\t\t$filter->join[] = \"INNER JOIN {$this->tb_users} AS u ON u.ID = p.post_author\";\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_type=%s', LP_COURSE_CPT );\n+\n+\t\tif ( $instructor_id > 0 ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_author=%d', $instructor_id );\n+\t\t}\n+\n+\t\t$filter->group_by        = 'course_id';\n+\t\t$filter->order_by        = 'enrollment_count';\n+\t\t$filter->order           = 'DESC';\n+\t\t$filter->run_query_count = false;\n+\t\t$result                  = $this->execute( $filter );\n+\n+\t\treturn is_array( $result ) ? $result : [];\n+\t}\n+\n+\t\u002F**\n+\t * Get top instructors by course count and student count.\n+\t *\n+\t * @param int $limit Number of instructors to return.\n+\t *\n+\t * @return array Top instructors data.\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_top_instructors( int $limit = 4 ): array {\n+\t\t$tb_posts      = $this->tb_posts;\n+\t\t$tb_users      = $this->tb_users;\n+\t\t$tb_user_items = $this->tb_lp_user_items;\n+\t\t$tb_usermeta   = $this->wpdb->usermeta;\n+\n+\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\"SELECT u.ID as instructor_id,\n+\t\t\t\tu.display_name as instructor_name,\n+\t\t\t\tCOUNT(DISTINCT p.ID) as course_count,\n+\t\t\t\t(SELECT COUNT(DISTINCT ui.user_id)\n+\t\t\t\t FROM {$tb_user_items} AS ui\n+\t\t\t\t WHERE ui.item_id IN (SELECT p2.ID FROM {$tb_posts} AS p2 WHERE p2.post_author = u.ID AND p2.post_type = %s AND p2.post_status = 'publish')\n+\t\t\t\t AND ui.item_type = %s\n+\t\t\t\t) as student_count\n+\t\t\tFROM {$tb_users} AS u\n+\t\t\tINNER JOIN {$tb_usermeta} AS um ON um.user_id = u.ID\n+\t\t\tINNER JOIN {$tb_posts} AS p ON p.post_author = u.ID AND p.post_type = %s AND p.post_status = 'publish'\n+\t\t\tWHERE um.meta_key = %s\n+\t\t\tAND (um.meta_value LIKE %s OR um.meta_value LIKE %s)\n+\t\t\tGROUP BY u.ID\n+\t\t\tORDER BY course_count DESC\n+\t\t\tLIMIT %d\",\n+\t\t\tLP_COURSE_CPT,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$this->wpdb->prefix . 'capabilities',\n+\t\t\t'%administrator%',\n+\t\t\t'%' . LP_TEACHER_ROLE . '%',\n+\t\t\t$limit\n+\t\t);\n+\n+\t\t$results = $this->wpdb->get_results( $sql );\n+\n+\t\treturn is_array( $results ) ? $results : [];\n+\t}\n+\n+\t\u002F**\n+\t * Get net sales chart data scoped by instructor.\n+\t *\n+\t * @param string $type   Time filter type.\n+\t * @param string $value  Time filter value.\n+\t * @param int    $instructor_id Instructor ID (0 for all).\n+\t *\n+\t * @return array Net sales data.\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_net_sales_data_scoped( string $type, string $value, int $instructor_id = 0 ): array {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$filter                   = new \\LP_Order_Filter();\n+\t\t$filter->collection       = $this->tb_posts;\n+\t\t$filter->collection_alias = 'p';\n+\t\t$oi_table                 = $this->tb_lp_order_items;\n+\t\t$oim_table                = $this->tb_lp_order_itemmeta;\n+\n+\t\t$filter->only_fields[] = \"SUM(CAST(oim.meta_value AS DECIMAL(10,2))) as x_data\";\n+\t\t$time_field            = \"p.post_date\";\n+\n+\t\t$filter->join = [\n+\t\t\t\"INNER JOIN $oi_table AS oi ON p.ID = oi.order_id\",\n+\t\t\t\"INNER JOIN $oim_table AS oim ON oi.order_item_id = oim.learnpress_order_item_id\",\n+\t\t];\n+\n+\t\t$filter->where = [\n+\t\t\t$this->wpdb->prepare( \"AND p.post_type=%s\", $filter->post_type ),\n+\t\t\t$this->wpdb->prepare( \"AND p.post_status=%s\", LP_ORDER_COMPLETED_DB ),\n+\t\t\t$this->wpdb->prepare( \"AND oim.meta_key=%s\", '_total' ),\n+\t\t];\n+\n+\t\tif ( $instructor_id > 0 ) {\n+\t\t\t$filter->join[] = \"INNER JOIN {$this->tb_posts} AS p2 ON p2.ID = oi.item_id\";\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND p2.post_author=%d\", $instructor_id );\n+\t\t}\n+\n+\t\t$filter->limit           = -1;\n+\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                  = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->order_by        = $time_field;\n+\t\t$filter->order           = \"asc\";\n+\t\t$filter->run_query_count = false;\n+\n+\t\t$result = $this->execute( $filter );\n+\t\treturn is_array( $result ) ? $result : [];\n+\t}\n+\n+\t\u002F**\n+\t * Get enrollment chart data scoped by instructor.\n+\t *\n+\t * @param string $type   Time filter type.\n+\t * @param string $value  Time filter value.\n+\t * @param int    $instructor_id Instructor ID (0 for all).\n+\t *\n+\t * @return array Enrollment chart data.\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function get_enrollment_chart_data( string $type, string $value, int $instructor_id = 0 ): array {\n+\t\tif ( ! $type || ! $value ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$filter                   = new \\LP_Filter();\n+\t\t$filter->collection       = $this->tb_lp_user_items;\n+\t\t$filter->collection_alias = 'ui';\n+\t\t$time_field               = 'ui.start_time';\n+\n+\t\t$filter->only_fields[] = 'COUNT(ui.user_item_id) as x_data';\n+\t\t$filter->where[]       = $this->wpdb->prepare( 'AND ui.item_type=%s', LP_COURSE_CPT );\n+\n+\t\tif ( $instructor_id > 0 ) {\n+\t\t\t$filter->join[]  = \"INNER JOIN {$this->tb_posts} AS p ON p.ID = ui.item_id\";\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND p.post_author=%d', $instructor_id );\n+\t\t}\n+\n+\t\t$filter->limit           = -1;\n+\t\t$filter                  = $this->filter_time( $filter, $type, $time_field, $value );\n+\t\t$filter                  = $this->chart_filter_group_by( $filter, $type, $time_field, $value );\n+\t\t$filter->order_by        = $time_field;\n+\t\t$filter->order           = 'asc';\n+\t\t$filter->run_query_count = false;\n+\n+\t\t$result = $this->execute( $filter );\n+\t\treturn is_array( $result ) ? $result : [];\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_DB\r\n- *\r\n- * @author tungnx\r\n- * @since 3.2.7.5\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_User_DB extends LP_Database {\r\n-\tuse singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get users\r\n-\t *\r\n-\t * @param LP_User_Filter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.0\r\n-\t * @return array|object|null|int|string\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_users( LP_User_Filter $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_users;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'u';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Find ID\r\n-\t\tif ( isset( $filter->ID ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_DB\n+ *\n+ * @author tungnx\n+ * @since 3.2.7.5\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Singleton;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_User_DB extends LP_Database {\n+\tuse singleton;\n+\n+\tpublic function init() {\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Get users\n+\t *\n+\t * @param LP_User_Filter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @since 4.2.6.9\n+\t * @version 1.0.0\n+\t * @return array|object|null|int|string\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_users( LP_User_Filter $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_users;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'u';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Find ID\n+\t\tif ( isset( $filter->ID ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,128 +1,128 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_User_Item_Meta_DB\r\n- *\r\n- * @since 4.2.5\r\n- * @version 1.0.0\r\n- * @author tungnx\r\n- *\u002F\r\n-class LP_User_Item_Meta_DB extends LP_Database {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user item metas\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_user_item_metas( LP_User_Item_Meta_Filter $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_user_itemmeta;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'uim';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->meta_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_id = %d', $filter->meta_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->learnpress_user_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.learnpress_user_item_id = %d', $filter->learnpress_user_item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->meta_key ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_key = %s', $filter->meta_key );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->meta_value ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_value = %s', $filter->meta_value );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->extra_value ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.extra_value = %s', $filter->extra_value );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser_item_meta\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data [ learnpress_user_item_id, meta_key, meta_value, extra_value ]\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.5\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new LP_User_Item_Meta_Filter();\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tunset( $data['meta_id'] );\r\n-\t\t$result = $this->wpdb->insert( $this->tb_lp_user_itemmeta, $data );\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data [ meta_id, learnpress_user_item_id, meta_key, meta_value, extra_value ]\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['meta_id'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid meta id!', 'learnpress' ) . ' | ' . __METHOD__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new LP_User_Item_Meta_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_user_itemmeta;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t}\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND meta_id = %d', $data['meta_id'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n-\r\n-LP_User_Item_Meta_DB::getInstance();\r\n-\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_User_Item_Meta_DB\n+ *\n+ * @since 4.2.5\n+ * @version 1.0.0\n+ * @author tungnx\n+ *\u002F\n+class LP_User_Item_Meta_DB extends LP_Database {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get user item metas\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_user_item_metas( LP_User_Item_Meta_Filter $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_user_itemmeta;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'uim';\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->meta_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_id = %d', $filter->meta_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->learnpress_user_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.learnpress_user_item_id = %d', $filter->learnpress_user_item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->meta_key ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_key = %s', $filter->meta_key );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->meta_value ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.meta_value = %s', $filter->meta_value );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->extra_value ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND uim.extra_value = %s', $filter->extra_value );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser_item_meta\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data [ learnpress_user_item_id, meta_key, meta_value, extra_value ]\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.5\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new LP_User_Item_Meta_Filter();\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\tunset( $data['meta_id'] );\n+\t\t$result = $this->wpdb->insert( $this->tb_lp_user_itemmeta, $data );\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data [ meta_id, learnpress_user_item_id, meta_key, meta_value, extra_value ]\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['meta_id'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid meta id!', 'learnpress' ) . ' | ' . __METHOD__ );\n+\t\t}\n+\n+\t\t$filter             = new LP_User_Item_Meta_Filter();\n+\t\t$filter->collection = $this->tb_lp_user_itemmeta;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t}\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND meta_id = %d', $data['meta_id'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+}\n+\n+LP_User_Item_Meta_DB::getInstance();\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-item-results-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-item-results-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-item-results-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-item-results-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,205 +1,205 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-\r\n-\u002F**\r\n- * Query in table learnpress_user_item_result.\r\n- *\r\n- * @author Nhamdv \u003Cemail@email.com>\r\n- *\u002F\r\n-class LP_User_Items_Result_DB extends LP_Database {\r\n-\tprivate static $_instance = null;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list results.\r\n-\t *\r\n-\t * @param [type] $user_item_id\r\n-\t * @param integer $limit Number result in db.\r\n-\t * @param boolean $last Remove lastest result.\r\n-\t *\r\n-\t * @return array result\r\n-\t *\u002F\r\n-\tpublic function get_results( $user_item_id, $limit = 3, $last = false ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! $user_item_id ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t$limit = absint( $limit ) ?? 3;\r\n-\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"SELECT result FROM $wpdb->learnpress_user_item_results\r\n-\t\t\tWHERE user_item_id=%d ORDER BY id DESC LIMIT %d\",\r\n-\t\t\t$user_item_id,\r\n-\t\t\t$limit + 1\r\n-\t\t);\r\n-\r\n-\t\t$col = $wpdb->get_col( $query );\r\n-\r\n-\t\tif ( ! empty( $col ) && $last ) {\r\n-\t\t\tunset( $col[0] );\r\n-\t\t}\r\n-\r\n-\t\treturn $col;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get latest result.\r\n-\t *\r\n-\t * @param integer $user_item_id\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic function get_result( int $user_item_id = 0 ) {\r\n-\t\tif ( ! $user_item_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$result = $this->wpdb->get_var(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\"SELECT result FROM $this->tb_lp_user_item_results\r\n-\t\t\t\tWHERE user_item_id = %d\r\n-\t\t\t\tORDER BY id DESC LIMIT 1\r\n-\t\t\t\t\",\r\n-\t\t\t\t$user_item_id\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $result && is_string( $result ) ? json_decode( $result, true ) : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update or Insert result\r\n-\t *\r\n-\t * @param int $user_item_id\r\n-\t * @param string $result\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function update( int $user_item_id = 0, string $result = '' ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! $user_item_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$max_id = $wpdb->get_var(\r\n-\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\"SELECT MAX(id) id FROM $wpdb->learnpress_user_item_results\r\n-\t\t\t\tWHERE user_item_id=%d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$user_item_id\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$data   = array( 'result' => $result );\r\n-\t\t$where  = array(\r\n-\t\t\t'id'           => absint( $max_id ),\r\n-\t\t\t'user_item_id' => $user_item_id,\r\n-\t\t);\r\n-\t\t$format = array( '%s' );\r\n-\r\n-\t\tif ( absint( $max_id ) > 0 ) {\r\n-\t\t\t$output = $wpdb->update( $wpdb->learnpress_user_item_results, $data, $where, $format );\r\n-\t\t} else {\r\n-\t\t\t$output = $this->insert( $user_item_id, $result );\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function insert( $user_item_id = 0, $result = null ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( ! $user_item_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$insert = $wpdb->insert(\r\n-\t\t\t$wpdb->learnpress_user_item_results,\r\n-\t\t\tarray(\r\n-\t\t\t\t'user_item_id' => $user_item_id,\r\n-\t\t\t\t'result'       => $result,\r\n-\t\t\t),\r\n-\t\t\tarray( '%d', '%s' )\r\n-\t\t);\r\n-\r\n-\t\tif ( $insert ) {\r\n-\t\t\treturn $wpdb->insert_id;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete all results by user_item_id.\r\n-\t *\r\n-\t * @param int $user_item_id .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function delete( $user_item_id = 0 ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$delete = $this->wpdb->delete(\r\n-\t\t\t$this->tb_lp_user_item_results,\r\n-\t\t\tarray(\r\n-\t\t\t\t'user_item_id' => $user_item_id,\r\n-\t\t\t),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\r\n-\t\treturn $delete;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete all rows in user_item_ids\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @since 4.1.4\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function remove_user_item_results( $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( 'administrator' ) && get_current_user_id() != $filter->user_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->user_item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->user_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_user_item_results}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_User_Items_Result_DB::instance();\r\n+\u003C?php\n+\n+use LearnPress\\Filters\\UserItemsFilter;\n+\n+\u002F**\n+ * Query in table learnpress_user_item_result.\n+ *\n+ * @author Nhamdv \u003Cemail@email.com>\n+ *\u002F\n+class LP_User_Items_Result_DB extends LP_Database {\n+\tprivate static $_instance = null;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Get list results.\n+\t *\n+\t * @param [type] $user_item_id\n+\t * @param integer $limit Number result in db.\n+\t * @param boolean $last Remove lastest result.\n+\t *\n+\t * @return array result\n+\t *\u002F\n+\tpublic function get_results( $user_item_id, $limit = 3, $last = false ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! $user_item_id ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t$limit = absint( $limit ) ?? 3;\n+\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"SELECT result FROM $wpdb->learnpress_user_item_results\n+\t\t\tWHERE user_item_id=%d ORDER BY id DESC LIMIT %d\",\n+\t\t\t$user_item_id,\n+\t\t\t$limit + 1\n+\t\t);\n+\n+\t\t$col = $wpdb->get_col( $query );\n+\n+\t\tif ( ! empty( $col ) && $last ) {\n+\t\t\tunset( $col[0] );\n+\t\t}\n+\n+\t\treturn $col;\n+\t}\n+\n+\t\u002F**\n+\t * Get latest result.\n+\t *\n+\t * @param integer $user_item_id\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic function get_result( int $user_item_id = 0 ) {\n+\t\tif ( ! $user_item_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$result = $this->wpdb->get_var(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\"SELECT result FROM $this->tb_lp_user_item_results\n+\t\t\t\tWHERE user_item_id = %d\n+\t\t\t\tORDER BY id DESC LIMIT 1\n+\t\t\t\t\",\n+\t\t\t\t$user_item_id\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $result && is_string( $result ) ? json_decode( $result, true ) : false;\n+\t}\n+\n+\t\u002F**\n+\t * Update or Insert result\n+\t *\n+\t * @param int $user_item_id\n+\t * @param string $result\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function update( int $user_item_id = 0, string $result = '' ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! $user_item_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$max_id = $wpdb->get_var(\n+\t\t\t$wpdb->prepare(\n+\t\t\t\t\"SELECT MAX(id) id FROM $wpdb->learnpress_user_item_results\n+\t\t\t\tWHERE user_item_id=%d\n+\t\t\t\t\",\n+\t\t\t\t$user_item_id\n+\t\t\t)\n+\t\t);\n+\n+\t\t$data   = array( 'result' => $result );\n+\t\t$where  = array(\n+\t\t\t'id'           => absint( $max_id ),\n+\t\t\t'user_item_id' => $user_item_id,\n+\t\t);\n+\t\t$format = array( '%s' );\n+\n+\t\tif ( absint( $max_id ) > 0 ) {\n+\t\t\t$output = $wpdb->update( $wpdb->learnpress_user_item_results, $data, $where, $format );\n+\t\t} else {\n+\t\t\t$output = $this->insert( $user_item_id, $result );\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function insert( $user_item_id = 0, $result = null ) {\n+\t\tglobal $wpdb;\n+\n+\t\tif ( ! $user_item_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$insert = $wpdb->insert(\n+\t\t\t$wpdb->learnpress_user_item_results,\n+\t\t\tarray(\n+\t\t\t\t'user_item_id' => $user_item_id,\n+\t\t\t\t'result'       => $result,\n+\t\t\t),\n+\t\t\tarray( '%d', '%s' )\n+\t\t);\n+\n+\t\tif ( $insert ) {\n+\t\t\treturn $wpdb->insert_id;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Delete all results by user_item_id.\n+\t *\n+\t * @param int $user_item_id .\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function delete( $user_item_id = 0 ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$delete = $this->wpdb->delete(\n+\t\t\t$this->tb_lp_user_item_results,\n+\t\t\tarray(\n+\t\t\t\t'user_item_id' => $user_item_id,\n+\t\t\t),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\n+\t\treturn $delete;\n+\t}\n+\n+\t\u002F**\n+\t * Delete all rows in user_item_ids\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids\n+\t *\n+\t * @return bool|int\n+\t * @since 4.1.4\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function remove_user_item_results( $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( 'administrator' ) && get_current_user_id() != $filter->user_id ) ) {\n+\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->user_item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\n+\t\t\t$filter->user_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM {$this->tb_lp_user_item_results}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+LP_User_Items_Result_DB::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-items-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-items-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-lp-user-items-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-lp-user-items-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,938 +1,938 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_User_Items_DB\r\n- *\r\n- * @since 3.2.8.6\r\n- * @version 1.0.5\r\n- * @author tungnx\r\n- *\u002F\r\n-class LP_User_Items_DB extends LP_Database {\r\n-\r\n-\tprivate static $_instance;\r\n-\tpublic static $user_item_id_col = 'learnpress_user_item_id';\r\n-\tpublic static $extra_value_col  = 'extra_value';\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data [ user_id, item_id, start_time, end_time, item_type, status, graduation, ref_id, ref_type, parent_id ]\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.5\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new LP_User_Items_Filter();\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( in_array( $col_name, [ 'start_time', 'end_time' ] ) && empty( $value ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Remove user_item_id (if exists) to insert new row, because user_item_id is auto increment.\r\n-\t\tunset( $data['user_item_id'] );\r\n-\r\n-\t\t$this->wpdb->insert( $this->tb_lp_user_items, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data [ 'user_item_id', user_id, item_id, start_time, end_time, item_type, status, graduation, ref_id, ref_type, parent_id ]\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['user_item_id'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid user item id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t$filter->collection = $this->tb_lp_user_items;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND user_item_id = %d', $data['user_item_id'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get users items\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.5\r\n-\t *\u002F\r\n-\tpublic function get_user_items( $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_user_items;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'ui';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->ref_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->ref_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_type = %s', $filter->ref_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->user_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_item_id = %d', $filter->user_item_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get by user_item_ids\r\n-\t\tif ( ! empty( $filter->user_item_ids ) ) {\r\n-\t\t\t$user_item_ids_format = LP_Helper::db_format_array( $filter->user_item_ids );\r\n-\t\t\t$filter->where[]      = $this->wpdb->prepare( 'AND ui.user_item_id IN (' . $user_item_ids_format . ')', $filter->user_item_ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->user_id !== false ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_id = %d', $filter->user_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_type = %s', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_ids ) ) {\r\n-\t\t\t$item_ids_format = LP_Helper::db_format_array( $filter->item_ids, '%d' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id IN (' . $item_ids_format . ')', $filter->item_ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id = %s', $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->status ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status = %s', $filter->status );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->graduation ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.graduation = %s', $filter->graduation );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->parent_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.parent_id = %s', $filter->parent_id );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser_items\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items by user_item_id | this is id where item_id = course_id\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param bool $force_cache\r\n-\t *\r\n-\t * @return object\r\n-\t * @throws Exception\r\n-\t * Todo: tungnx need set paginate - apply when do load API\r\n-\t *\u002F\r\n-\tpublic function get_user_course_items( $filter, bool $force_cache = false ) {\r\n-\t\t$key_first_cache    = 'course_items\u002F' . $filter->user_id . '\u002F' . $filter->parent_id;\r\n-\t\t$course_items_cache = LP_Cache::cache_load_first( 'get', $key_first_cache );\r\n-\t\tif ( false !== $course_items_cache && ! $force_cache ) {\r\n-\t\t\treturn $course_items_cache;\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT * FROM $this->tb_lp_user_items\r\n-\t\t\tWHERE parent_id = %d\r\n-\t\t\tAND ref_type = %s\r\n-\t\t\tAND user_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$filter->parent_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t$filter->user_id\r\n-\t\t);\r\n-\r\n-\t\t$course_items = $this->wpdb->get_results( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $course_items );\r\n-\r\n-\t\treturn $course_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove items' of course and user learned\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception .\r\n-\t * @TODO tungnx - recheck this function\r\n-\t *\u002F\r\n-\tpublic function remove_items_of_user_course( $filter ) {\r\n-\t\t$query_extra = '';\r\n-\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( - 1 \u003C $filter->limit ) {\r\n-\t\t\t$query_extra .= \" LIMIT $filter->limit\";\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_user_items}\r\n-\t\t\tWHERE parent_id = %d\r\n-\t\t\t$query_extra;\r\n-\t\t\t\",\r\n-\t\t\t$filter->parent_id\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query( $query );\r\n-\t}\r\n-\r\n-\t\u002F*public function get_item_status( $item_id, $course_id ) {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT status FROM {$this->tb_lp_user_items}\r\n-\t\t\tWHERE ref_id = %d\r\n-\t\t\tAND ref_type = %s\r\n-\t\t\tAND item_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$course_id,\r\n-\t\t\t'lp_course',\r\n-\t\t\t$item_id\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_var( $query );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Insert\u002FUpdate extra value\r\n-\t *\r\n-\t * @param int    $user_item_id\r\n-\t * @param string $meta_key\r\n-\t * @param string $value\r\n-\t * @since 4.0.0\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\r\n-\t * @return int|false The number of rows inserted|updated, or false on error.\r\n-\t *\u002F\r\n-\tpublic function update_extra_value( $user_item_id = 0, $meta_key = '', $value = '' ) {\r\n-\t\t$result = false;\r\n-\r\n-\t\t$data   = array(\r\n-\t\t\t'learnpress_user_item_id' => $user_item_id,\r\n-\t\t\t'meta_key'                => $meta_key,\r\n-\t\t\t'extra_value'             => $value,\r\n-\t\t);\r\n-\t\t$format = array( '%d', '%s', '%s' );\r\n-\r\n-\t\t$check_exist_data = $this->wpdb->get_var(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT meta_id FROM $this->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE \" . self::$user_item_id_col . ' = %d\r\n-\t\t\t\tAND meta_key = %s\r\n-\t\t\t\t',\r\n-\t\t\t\t$user_item_id,\r\n-\t\t\t\t$meta_key\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( $check_exist_data ) {\r\n-\t\t\t$result = $this->wpdb->update(\r\n-\t\t\t\t$this->tb_lp_user_itemmeta,\r\n-\t\t\t\t$data,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\tself::$user_item_id_col => $user_item_id,\r\n-\t\t\t\t\t'meta_key'              => $meta_key,\r\n-\t\t\t\t),\r\n-\t\t\t\t$format\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\t$result = $this->wpdb->insert( $this->tb_lp_user_itemmeta, $data, $format );\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get extra value\r\n-\t *\r\n-\t * @param int    $user_item_id\r\n-\t * @param string $meta_key\r\n-\t *\u002F\r\n-\tpublic function get_extra_value( $user_item_id = 0, $meta_key = '' ) {\r\n-\t\treturn $this->wpdb->get_var(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t'\r\n-\t\t\t\tSELECT ' . self::$extra_value_col . \" FROM $this->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE \" . self::$user_item_id_col . ' = %d\r\n-\t\t\t\tAND meta_key = %s\r\n-\t\t\t\t',\r\n-\t\t\t\t$user_item_id,\r\n-\t\t\t\t$meta_key\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Re-set current item\r\n-\t * @param $course_id\r\n-\t * @param $item_id\r\n-\t * @editor hungkv\r\n-\t *\u002F\r\n-\tpublic function reset_course_current_item( $course_id, $item_id ) {\r\n-\t\t\u002F\u002F Select all course enrolled\r\n-\t\t$query         = $this->wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\t\t\t\tSELECT user_item_id\r\n-\t\t\t\t\t\tFROM {$this->wpdb->prefix}learnpress_user_items\r\n-\t\t\t\t\t\tWHERE status = %s AND item_id = %d AND graduation = %s\r\n-\t\t\t\t\t\t\",\r\n-\t\t\t'enrolled',\r\n-\t\t\t$course_id,\r\n-\t\t\t'in-progress'\r\n-\t\t);\r\n-\t\t$user_item_ids = $this->wpdb->get_col( $query );\r\n-\t\tif ( ! empty( $user_item_ids ) ) {\r\n-\t\t\tforeach ( $user_item_ids as $user_item_id ) {\r\n-\t\t\t\t\u002F\u002F Check item is current item of all course\r\n-\t\t\t\t$query         = $this->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\tSELECT meta_value\r\n-\t\t\t\t\t\t\tFROM {$this->wpdb->prefix}learnpress_user_itemmeta\r\n-\t\t\t\t\t\t\tWHERE learnpress_user_item_id = %d\r\n-\t\t\t\t\t\t\t\",\r\n-\t\t\t\t\t$user_item_id\r\n-\t\t\t\t);\r\n-\t\t\t\t$meta_value_id = $this->wpdb->get_var( $query );\r\n-\t\t\t\t\u002F\u002F Check if the deleted item is current item or not\r\n-\t\t\t\tif ( $meta_value_id == $item_id ) {\r\n-\t\t\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t\t\t\u002F\u002F update _curent_item to database\r\n-\t\t\t\t\tlearn_press_update_user_item_meta( $user_item_id, '_current_item', $course->get_first_item_id() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number status by status, graduation...\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter {user_id, item_type}\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.2\r\n-\t * @return object|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function count_status_by_items( $filter ) {\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_IN_PROGRESS, LP_COURSE_GRADUATION_IN_PROGRESS );\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_FAILED, LP_COURSE_GRADUATION_FAILED );\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_PASSED, LP_COURSE_GRADUATION_PASSED );\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_ENROLLED, LP_COURSE_ENROLLED );\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_PURCHASED, LP_COURSE_PURCHASED );\r\n-\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_FINISHED, LP_COURSE_FINISHED );\r\n-\r\n-\t\tif ( $filter->user_id ) {\r\n-\t\t\t$filter_user_attend_courses                      = new LP_User_Items_Filter();\r\n-\t\t\t$filter_user_attend_courses->only_fields         = array( 'MAX(ui.user_item_id) AS user_item_id' );\r\n-\t\t\t$filter_user_attend_courses->where[]             = $this->wpdb->prepare( 'AND ui.user_id = %s', $filter->user_id );\r\n-\t\t\t$filter_user_attend_courses->where[]             = $this->wpdb->prepare( 'AND ui.status != %s', UserItemModel::STATUS_CANCEL );\r\n-\t\t\t$filter_user_attend_courses->group_by            = 'ui.item_id';\r\n-\t\t\t$filter_user_attend_courses->return_string_query = true;\r\n-\t\t\t$query_get_course_attend                         = $this->get_user_courses( $filter_user_attend_courses );\r\n-\t\t\t$filter->where[]                                 = 'AND ui.user_item_id IN (' . $query_get_course_attend . ')';\r\n-\t\t}\r\n-\r\n-\t\t$filter->return_string_query = true;\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Fcount-status', $filter );\r\n-\r\n-\t\t$query = $this->get_user_courses( $filter );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->get_row( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the newest item is course of user\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter {course_id, user_id}\r\n-\t * @param bool $force_cache Reset first cache\r\n-\t *\r\n-\t * @return null|object\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_last_user_course( $filter, bool $force_cache = false ) {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time\r\n-\t\t\tFROM $this->tb_lp_user_items\r\n-\t\t\tWHERE item_type = %s\r\n-\t\t\tAND item_id = %d\r\n-\t\t\tAND user_id = %d\r\n-\t\t\tORDER BY user_item_id DESC\r\n-\t\t\tLIMIT 1\r\n-\t\t\t\",\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\t$filter->item_id,\r\n-\t\t\t$filter->user_id\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->get_row( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item of user and course\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter {parent_id, item_id, user_id}\r\n-\t * @param bool $force_cache Reset first cache\r\n-\t *\r\n-\t * @return null|object\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_user_course_item( $filter, bool $force_cache = false ) {\r\n-\t\t$key_load_first = 'user_course_item\u002F' . $filter->user_id . '\u002F' . $filter->item_id;\r\n-\t\t$user_course    = LP_Cache::cache_load_first( 'get', $key_load_first );\r\n-\r\n-\t\tif ( false !== $user_course && ! $force_cache ) {\r\n-\t\t\treturn $user_course;\r\n-\t\t}\r\n-\r\n-\t\t$WHERE = 'WHERE 1=1 ';\r\n-\r\n-\t\tif ( $filter->parent_id ) {\r\n-\t\t\t$WHERE .= $this->wpdb->prepare( 'AND parent_id = %d ', $filter->parent_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->ref_id ) {\r\n-\t\t\t$WHERE .= $this->wpdb->prepare( 'AND ref_id = %d ', $filter->ref_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->ref_type ) {\r\n-\t\t\t$WHERE .= $this->wpdb->prepare( 'AND ref_type = %s ', $filter->ref_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->item_type ) {\r\n-\t\t\t$WHERE .= $this->wpdb->prepare( 'AND item_type = %s ', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time, parent_id\r\n-\t\t\tFROM $this->tb_lp_user_items\r\n-\t\t\t$WHERE\r\n-\t\t\tAND item_id = %d\r\n-\t\t\tAND user_id = %d\r\n-\t\t\tORDER BY user_item_id DESC\r\n-\t\t\tLIMIT 1\r\n-\t\t\t\",\r\n-\t\t\t$filter->item_id,\r\n-\t\t\t$filter->user_id\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->get_row( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_load_first, $result );\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items of course by item type\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter {$filter->parent_id, $filter->item_type, [$filter->item_id]}\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_user_course_items_by_item_type( $filter ) {\r\n-\r\n-\t\t$AND = '';\r\n-\r\n-\t\tif ( $filter->item_type ) {\r\n-\t\t\t$AND .= $this->wpdb->prepare( ' AND item_type = %s', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( $filter->item_id ) {\r\n-\t\t\t$AND .= $this->wpdb->prepare( ' AND item_id = %d', $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time, parent_id\r\n-\t\t\tFROM $this->tb_lp_user_items\r\n-\t\t\tWHERE parent_id = %d\r\n-\t\t\t$AND\r\n-\t\t\t\",\r\n-\t\t\t$filter->parent_id\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->{$filter->query_type}( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user_item_id by course_id\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->item_id\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_user_items_by_course( $filter ): array {\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check valid user.\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\t\"SELECT user_item_id FROM $this->tb_lp_user_items\r\n-\t\t\t\tWHERE item_id = %d\r\n-\t\t\t\tAND item_type = %s\r\n-\t\t\t\t\",\r\n-\t\t\t\t$filter->item_id,\r\n-\t\t\t\tLP_COURSE_CPT\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $this->wpdb->get_col( $query );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items of course has user\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter user_item_ids\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_item_ids_of_user_course( $filter ): array {\r\n-\t\tif ( empty( $filter->user_item_ids ) ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND parent_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->user_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->get_col(\r\n-\t\t\t\"SELECT user_item_id FROM {$this->tb_lp_user_items}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove rows IN user_item_ids\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids, $filter->user_id\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function remove_user_item_ids( $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->user_item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->user_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_user_items}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove user_itemmeta has list user_item_ids\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids, $filter->user_id\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function remove_user_itemmeta( $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->user_item_ids ) ) {\r\n-\t\t\treturn 1;\r\n-\t\t}\r\n-\r\n-\t\t$where = 'WHERE 1=1 ';\r\n-\r\n-\t\t$where .= $this->wpdb->prepare(\r\n-\t\t\t'AND learnpress_user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\r\n-\t\t\t$filter->user_item_ids\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t\"DELETE FROM {$this->tb_lp_user_itemmeta}\r\n-\t\t\t{$where}\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete user_item_ids by user_id and course_id\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param int $course_id\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_user_items_old( int $user_id = 0, int $course_id = 0 ) {\r\n-\t\t$lp_user_items_db     = LP_User_Items_DB::getInstance();\r\n-\t\t$lp_user_item_results = LP_User_Items_Result_DB::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check valid user.\r\n-\t\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $user_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t\u002F\u002F Get all user_item_ids has user_id and course_id\r\n-\t\t\t$filter                      = new LP_User_Items_Filter();\r\n-\t\t\t$filter->user_id             = $user_id;\r\n-\t\t\t$filter->item_id             = $course_id;\r\n-\t\t\t$filter->item_type           = LP_COURSE_CPT;\r\n-\t\t\t$filter->only_fields         = [ 'user_item_id' ];\r\n-\t\t\t$filter->run_query_count     = false;\r\n-\t\t\t$filter->return_string_query = true;\r\n-\t\t\t$user_course_ids_query       = $lp_user_items_db->get_user_items( $filter );\r\n-\t\t\t$user_course_ids             = $this->wpdb->get_col( $user_course_ids_query );\r\n-\t\t\tif ( empty( $user_course_ids ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course->delete_user_item_and_result( $user_course_ids );\r\n-\r\n-\t\t\t\u002F\u002F Clear cache total students enrolled of one course.\r\n-\t\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\t\t\t$lp_course_cache->clean_total_students_enrolled( $course_id );\r\n-\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $course_id );\r\n-\t\t\t\u002F\u002F Clear cache count students many courses.\r\n-\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\r\n-\t\t\t\u002F\u002F Clear cache user course.\r\n-\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\r\n-\t\t\t$lp_user_items_cache->clean_user_item(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t$course_id,\r\n-\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F Clear userCourseModel cache.\r\n-\t\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$user_id}\u002F{$course_id}\u002F\" . LP_COURSE_CPT;\r\n-\t\t\t$lpUserCourseCache = new LP_Cache();\r\n-\t\t\t$lpUserCourseCache->clear( $key_cache );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fuser-item-old\u002Fdelete', $user_id, $course_id );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update user_id for lp_user_item with Order buy User Guest\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function update_user_id_by_order( $filter ) {\r\n-\t\t\u002F\u002F Check valid user.\r\n-\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\r\n-\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"UPDATE {$this->tb_lp_user_items}\r\n-\t\t\tSET user_id = %d\r\n-\t\t\tWHERE ref_type = %s\r\n-\t\t\tAND ref_id = %d\r\n-\t\t\t\",\r\n-\t\t\t$filter->user_id,\r\n-\t\t\tLP_ORDER_CPT,\r\n-\t\t\t$filter->ref_id\r\n-\t\t);\r\n-\r\n-\t\treturn $this->wpdb->query( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count items by type and total by status\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter {parent_id, status, graduation}\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @return null|object\r\n-\t *\u002F\r\n-\tpublic function count_items_of_course_with_status( $filter ) {\r\n-\t\t$item_types       = CourseModel::item_types_support();\r\n-\t\t$count_item_types = count( $item_types );\r\n-\t\t$i                = 0;\r\n-\r\n-\t\t\u002F\u002F$user_course = $this->get_last_user_course( $filter );\r\n-\r\n-\t\t$query_count  = '';\r\n-\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.status = %s) AS count_status,', $filter->status );\r\n-\r\n-\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t++$i;\r\n-\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.status = %s AND ui.item_type = %s) AS %s,', $filter->status, $item_type, $item_type . '_status_' . $filter->status );\r\n-\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.graduation = %s AND ui.item_type = %s) AS %s', $filter->graduation, $item_type, $item_type . '_graduation_' . $filter->graduation );\r\n-\r\n-\t\t\tif ( $i \u003C $count_item_types ) {\r\n-\t\t\t\t$query_count .= ',';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t'SELECT ' . $query_count . ' FROM ' . $this->tb_lp_user_items . ' ui\r\n-\t\t\tWHERE parent_id = %d\r\n-\t\t\t',\r\n-\t\t\t$filter->parent_id\r\n-\t\t);\r\n-\r\n-\t\t$total_items = $this->wpdb->get_row( $query );\r\n-\r\n-\t\treturn $total_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get quizzes of user\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_user_quizzes( $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->item_type = LP_QUIZ_CPT;\r\n-\t\t$filter->ref_type  = LP_COURSE_CPT;\r\n-\r\n-\t\treturn $this->get_user_items( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses only by course's user are learning\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.5\r\n-\t * @return null|array|string|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_user_courses( $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->collection_alias = 'ui';\r\n-\r\n-\t\t\u002F\u002F Get courses publish, private\r\n-\t\t$filter->join[]    = \"INNER JOIN {$this->tb_posts} AS p ON p.ID = $filter->collection_alias.item_id\";\r\n-\t\t$filter->where[]   = $this->wpdb->prepare( 'AND ( p.post_status = %s OR p.post_status = %s )', 'publish', 'private' );\r\n-\t\t$filter->item_type = LP_COURSE_CPT;\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->get_user_items( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total users attend courses of Author\r\n-\t *\r\n-\t * @param int $author_id\r\n-\t *\r\n-\t * @return LP_User_Items_Filter\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.1\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function count_user_attend_courses_of_author( int $author_id ): LP_User_Items_Filter {\r\n-\t\t$filter_course                      = new LP_Course_Filter();\r\n-\t\t$filter_course->only_fields         = array( 'ID' );\r\n-\t\t$filter_course->post_author         = $author_id;\r\n-\t\t$filter_course->post_status         = [ 'publish', 'private' ];\r\n-\t\t$filter_course->return_string_query = true;\r\n-\t\t$query_courses_str                  = LP_Course_DB::getInstance()->get_courses( $filter_course );\r\n-\r\n-\t\t$filter              = new LP_User_Items_Filter();\r\n-\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t$filter->only_fields = array( 'ui.user_id' );\r\n-\t\t$filter->field_count = 'ui.user_id';\r\n-\t\t$filter->where[]     = \"AND item_id IN ({$query_courses_str})\";\r\n-\t\t$filter->query_count = true;\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-users-attend-courses-of-author', $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list students attend\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @since 4.1.6.9\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_students( $filter, int &$total_rows = 0 ) {\r\n-\t\t$default_fields         = $this->get_cols_of_table( $this->tb_users );\r\n-\t\t$filter->fields         = array_merge( $default_fields, $filter->fields );\r\n-\t\t$filter->exclude_fields = [ 'user_pass', 'user_login', 'user_status', 'user_activation_key' ];\r\n-\t\t$filter->field_count    = 'ID';\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_users;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'u';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Filter\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_lp_user_items AS ui ON u.ID = ui.user_id\";\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND item_type =%s', LP_COURSE_CPT );\r\n-\r\n-\t\t\u002F\u002F Filter by user ids\r\n-\t\tif ( ! empty( $filter->user_ids ) ) {\r\n-\t\t\t$term_ids_format = LP_Helper::db_format_array( $filter->user_ids, '%d' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND r_term.term_taxonomy_id IN (' . $term_ids_format . ')', $filter->user_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Filter\r\n-\r\n-\t\t$filter->group_by = 'ID';\r\n-\r\n-\t\t\u002F\u002F End filter\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fcourse\u002Fquery\u002Fstudents', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count students on category course.\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @return int\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function count_students( $filter ): int {\r\n-\t\t$count = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter->query_count = true;\r\n-\t\t\t$filter->only_fields = [ 'ui.user_id' ];\r\n-\t\t\t$filter->field_count = 'ui.user_id';\r\n-\t\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t\t$filter->where[]     = 'AND ui.user_id != 0';\r\n-\t\t\t$this->get_user_items( $filter, $count );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $count;\r\n-\t}\r\n-}\r\n-\r\n-LP_Course_DB::getInstance();\r\n+\u003C?php\n+\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class LP_User_Items_DB\n+ *\n+ * @since 3.2.8.6\n+ * @version 1.0.5\n+ * @author tungnx\n+ *\u002F\n+class LP_User_Items_DB extends LP_Database {\n+\n+\tprivate static $_instance;\n+\tpublic static $user_item_id_col = 'learnpress_user_item_id';\n+\tpublic static $extra_value_col  = 'extra_value';\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data [ user_id, item_id, start_time, end_time, item_type, status, graduation, ref_id, ref_type, parent_id ]\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.5\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new LP_User_Items_Filter();\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( in_array( $col_name, [ 'start_time', 'end_time' ] ) && empty( $value ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Remove user_item_id (if exists) to insert new row, because user_item_id is auto increment.\n+\t\tunset( $data['user_item_id'] );\n+\n+\t\t$this->wpdb->insert( $this->tb_lp_user_items, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data [ 'user_item_id', user_id, item_id, start_time, end_time, item_type, status, graduation, ref_id, ref_type, parent_id ]\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['user_item_id'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid user item id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter             = new LP_User_Items_Filter();\n+\t\t$filter->collection = $this->tb_lp_user_items;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND user_item_id = %d', $data['user_item_id'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get users items\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.5\n+\t *\u002F\n+\tpublic function get_user_items( $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_user_items;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'ui';\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->ref_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->ref_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_type = %s', $filter->ref_type );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->user_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_item_id = %d', $filter->user_item_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Get by user_item_ids\n+\t\tif ( ! empty( $filter->user_item_ids ) ) {\n+\t\t\t$user_item_ids_format = LP_Helper::db_format_array( $filter->user_item_ids );\n+\t\t\t$filter->where[]      = $this->wpdb->prepare( 'AND ui.user_item_id IN (' . $user_item_ids_format . ')', $filter->user_item_ids );\n+\t\t}\n+\n+\t\tif ( $filter->user_id !== false ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_id = %d', $filter->user_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_type = %s', $filter->item_type );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_ids ) ) {\n+\t\t\t$item_ids_format = LP_Helper::db_format_array( $filter->item_ids, '%d' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id IN (' . $item_ids_format . ')', $filter->item_ids );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id = %s', $filter->item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->status ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status = %s', $filter->status );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->graduation ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.graduation = %s', $filter->graduation );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->parent_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.parent_id = %s', $filter->parent_id );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser_items\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get items by user_item_id | this is id where item_id = course_id\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param bool $force_cache\n+\t *\n+\t * @return object\n+\t * @throws Exception\n+\t * Todo: tungnx need set paginate - apply when do load API\n+\t *\u002F\n+\tpublic function get_user_course_items( $filter, bool $force_cache = false ) {\n+\t\t$key_first_cache    = 'course_items\u002F' . $filter->user_id . '\u002F' . $filter->parent_id;\n+\t\t$course_items_cache = LP_Cache::cache_load_first( 'get', $key_first_cache );\n+\t\tif ( false !== $course_items_cache && ! $force_cache ) {\n+\t\t\treturn $course_items_cache;\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT * FROM $this->tb_lp_user_items\n+\t\t\tWHERE parent_id = %d\n+\t\t\tAND ref_type = %s\n+\t\t\tAND user_id = %d\n+\t\t\t\",\n+\t\t\t$filter->parent_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$filter->user_id\n+\t\t);\n+\n+\t\t$course_items = $this->wpdb->get_results( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $course_items );\n+\n+\t\treturn $course_items;\n+\t}\n+\n+\t\u002F**\n+\t * Remove items' of course and user learned\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception .\n+\t * @TODO tungnx - recheck this function\n+\t *\u002F\n+\tpublic function remove_items_of_user_course( $filter ) {\n+\t\t$query_extra = '';\n+\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( - 1 \u003C $filter->limit ) {\n+\t\t\t$query_extra .= \" LIMIT $filter->limit\";\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"DELETE FROM {$this->tb_lp_user_items}\n+\t\t\tWHERE parent_id = %d\n+\t\t\t$query_extra;\n+\t\t\t\",\n+\t\t\t$filter->parent_id\n+\t\t);\n+\n+\t\treturn $this->wpdb->query( $query );\n+\t}\n+\n+\t\u002F*public function get_item_status( $item_id, $course_id ) {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT status FROM {$this->tb_lp_user_items}\n+\t\t\tWHERE ref_id = %d\n+\t\t\tAND ref_type = %s\n+\t\t\tAND item_id = %d\n+\t\t\t\",\n+\t\t\t$course_id,\n+\t\t\t'lp_course',\n+\t\t\t$item_id\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_var( $query );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Insert\u002FUpdate extra value\n+\t *\n+\t * @param int    $user_item_id\n+\t * @param string $meta_key\n+\t * @param string $value\n+\t * @since 4.0.0\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\n+\t * @return int|false The number of rows inserted|updated, or false on error.\n+\t *\u002F\n+\tpublic function update_extra_value( $user_item_id = 0, $meta_key = '', $value = '' ) {\n+\t\t$result = false;\n+\n+\t\t$data   = array(\n+\t\t\t'learnpress_user_item_id' => $user_item_id,\n+\t\t\t'meta_key'                => $meta_key,\n+\t\t\t'extra_value'             => $value,\n+\t\t);\n+\t\t$format = array( '%d', '%s', '%s' );\n+\n+\t\t$check_exist_data = $this->wpdb->get_var(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT meta_id FROM $this->tb_lp_user_itemmeta\n+\t\t\t\tWHERE \" . self::$user_item_id_col . ' = %d\n+\t\t\t\tAND meta_key = %s\n+\t\t\t\t',\n+\t\t\t\t$user_item_id,\n+\t\t\t\t$meta_key\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( $check_exist_data ) {\n+\t\t\t$result = $this->wpdb->update(\n+\t\t\t\t$this->tb_lp_user_itemmeta,\n+\t\t\t\t$data,\n+\t\t\t\tarray(\n+\t\t\t\t\tself::$user_item_id_col => $user_item_id,\n+\t\t\t\t\t'meta_key'              => $meta_key,\n+\t\t\t\t),\n+\t\t\t\t$format\n+\t\t\t);\n+\t\t} else {\n+\t\t\t$result = $this->wpdb->insert( $this->tb_lp_user_itemmeta, $data, $format );\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get extra value\n+\t *\n+\t * @param int    $user_item_id\n+\t * @param string $meta_key\n+\t *\u002F\n+\tpublic function get_extra_value( $user_item_id = 0, $meta_key = '' ) {\n+\t\treturn $this->wpdb->get_var(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t'\n+\t\t\t\tSELECT ' . self::$extra_value_col . \" FROM $this->tb_lp_user_itemmeta\n+\t\t\t\tWHERE \" . self::$user_item_id_col . ' = %d\n+\t\t\t\tAND meta_key = %s\n+\t\t\t\t',\n+\t\t\t\t$user_item_id,\n+\t\t\t\t$meta_key\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Re-set current item\n+\t * @param $course_id\n+\t * @param $item_id\n+\t * @editor hungkv\n+\t *\u002F\n+\tpublic function reset_course_current_item( $course_id, $item_id ) {\n+\t\t\u002F\u002F Select all course enrolled\n+\t\t$query         = $this->wpdb->prepare(\n+\t\t\t\"\n+\t\t\t\t\t\tSELECT user_item_id\n+\t\t\t\t\t\tFROM {$this->wpdb->prefix}learnpress_user_items\n+\t\t\t\t\t\tWHERE status = %s AND item_id = %d AND graduation = %s\n+\t\t\t\t\t\t\",\n+\t\t\t'enrolled',\n+\t\t\t$course_id,\n+\t\t\t'in-progress'\n+\t\t);\n+\t\t$user_item_ids = $this->wpdb->get_col( $query );\n+\t\tif ( ! empty( $user_item_ids ) ) {\n+\t\t\tforeach ( $user_item_ids as $user_item_id ) {\n+\t\t\t\t\u002F\u002F Check item is current item of all course\n+\t\t\t\t$query         = $this->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\t\t\tSELECT meta_value\n+\t\t\t\t\t\t\tFROM {$this->wpdb->prefix}learnpress_user_itemmeta\n+\t\t\t\t\t\t\tWHERE learnpress_user_item_id = %d\n+\t\t\t\t\t\t\t\",\n+\t\t\t\t\t$user_item_id\n+\t\t\t\t);\n+\t\t\t\t$meta_value_id = $this->wpdb->get_var( $query );\n+\t\t\t\t\u002F\u002F Check if the deleted item is current item or not\n+\t\t\t\tif ( $meta_value_id == $item_id ) {\n+\t\t\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t\t\t\u002F\u002F update _curent_item to database\n+\t\t\t\t\tlearn_press_update_user_item_meta( $user_item_id, '_current_item', $course->get_first_item_id() );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get number status by status, graduation...\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter {user_id, item_type}\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.5\n+\t * @version 1.0.2\n+\t * @return object|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function count_status_by_items( $filter ) {\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_IN_PROGRESS, LP_COURSE_GRADUATION_IN_PROGRESS );\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_FAILED, LP_COURSE_GRADUATION_FAILED );\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.graduation = %s) AS %s', LP_COURSE_GRADUATION_PASSED, LP_COURSE_GRADUATION_PASSED );\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_ENROLLED, LP_COURSE_ENROLLED );\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_PURCHASED, LP_COURSE_PURCHASED );\n+\t\t$filter->only_fields[] = $this->wpdb->prepare( 'SUM(ui.status = %s) AS %s', LP_COURSE_FINISHED, LP_COURSE_FINISHED );\n+\n+\t\tif ( $filter->user_id ) {\n+\t\t\t$filter_user_attend_courses                      = new LP_User_Items_Filter();\n+\t\t\t$filter_user_attend_courses->only_fields         = array( 'MAX(ui.user_item_id) AS user_item_id' );\n+\t\t\t$filter_user_attend_courses->where[]             = $this->wpdb->prepare( 'AND ui.user_id = %s', $filter->user_id );\n+\t\t\t$filter_user_attend_courses->where[]             = $this->wpdb->prepare( 'AND ui.status != %s', UserItemModel::STATUS_CANCEL );\n+\t\t\t$filter_user_attend_courses->group_by            = 'ui.item_id';\n+\t\t\t$filter_user_attend_courses->return_string_query = true;\n+\t\t\t$query_get_course_attend                         = $this->get_user_courses( $filter_user_attend_courses );\n+\t\t\t$filter->where[]                                 = 'AND ui.user_item_id IN (' . $query_get_course_attend . ')';\n+\t\t}\n+\n+\t\t$filter->return_string_query = true;\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Fcount-status', $filter );\n+\n+\t\t$query = $this->get_user_courses( $filter );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->get_row( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Get the newest item is course of user\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter {course_id, user_id}\n+\t * @param bool $force_cache Reset first cache\n+\t *\n+\t * @return null|object\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_last_user_course( $filter, bool $force_cache = false ) {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time\n+\t\t\tFROM $this->tb_lp_user_items\n+\t\t\tWHERE item_type = %s\n+\t\t\tAND item_id = %d\n+\t\t\tAND user_id = %d\n+\t\t\tORDER BY user_item_id DESC\n+\t\t\tLIMIT 1\n+\t\t\t\",\n+\t\t\tLP_COURSE_CPT,\n+\t\t\t$filter->item_id,\n+\t\t\t$filter->user_id\n+\t\t);\n+\n+\t\t$result = $this->wpdb->get_row( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get item of user and course\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter {parent_id, item_id, user_id}\n+\t * @param bool $force_cache Reset first cache\n+\t *\n+\t * @return null|object\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_user_course_item( $filter, bool $force_cache = false ) {\n+\t\t$key_load_first = 'user_course_item\u002F' . $filter->user_id . '\u002F' . $filter->item_id;\n+\t\t$user_course    = LP_Cache::cache_load_first( 'get', $key_load_first );\n+\n+\t\tif ( false !== $user_course && ! $force_cache ) {\n+\t\t\treturn $user_course;\n+\t\t}\n+\n+\t\t$WHERE = 'WHERE 1=1 ';\n+\n+\t\tif ( $filter->parent_id ) {\n+\t\t\t$WHERE .= $this->wpdb->prepare( 'AND parent_id = %d ', $filter->parent_id );\n+\t\t}\n+\n+\t\tif ( $filter->ref_id ) {\n+\t\t\t$WHERE .= $this->wpdb->prepare( 'AND ref_id = %d ', $filter->ref_id );\n+\t\t}\n+\n+\t\tif ( $filter->ref_type ) {\n+\t\t\t$WHERE .= $this->wpdb->prepare( 'AND ref_type = %s ', $filter->ref_type );\n+\t\t}\n+\n+\t\tif ( $filter->item_type ) {\n+\t\t\t$WHERE .= $this->wpdb->prepare( 'AND item_type = %s ', $filter->item_type );\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time, parent_id\n+\t\t\tFROM $this->tb_lp_user_items\n+\t\t\t$WHERE\n+\t\t\tAND item_id = %d\n+\t\t\tAND user_id = %d\n+\t\t\tORDER BY user_item_id DESC\n+\t\t\tLIMIT 1\n+\t\t\t\",\n+\t\t\t$filter->item_id,\n+\t\t\t$filter->user_id\n+\t\t);\n+\n+\t\t$result = $this->wpdb->get_row( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\tLP_Cache::cache_load_first( 'set', $key_load_first, $result );\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get items of course by item type\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter {$filter->parent_id, $filter->item_type, [$filter->item_id]}\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_user_course_items_by_item_type( $filter ) {\n+\n+\t\t$AND = '';\n+\n+\t\tif ( $filter->item_type ) {\n+\t\t\t$AND .= $this->wpdb->prepare( ' AND item_type = %s', $filter->item_type );\n+\t\t}\n+\n+\t\tif ( $filter->item_id ) {\n+\t\t\t$AND .= $this->wpdb->prepare( ' AND item_id = %d', $filter->item_id );\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT user_item_id, user_id, item_id, item_type, status, graduation, ref_id, ref_type, start_time, end_time, parent_id\n+\t\t\tFROM $this->tb_lp_user_items\n+\t\t\tWHERE parent_id = %d\n+\t\t\t$AND\n+\t\t\t\",\n+\t\t\t$filter->parent_id\n+\t\t);\n+\n+\t\t$result = $this->wpdb->{$filter->query_type}( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get user_item_id by course_id\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->item_id\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_user_items_by_course( $filter ): array {\n+\t\ttry {\n+\t\t\t\u002F\u002F Check valid user.\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid user!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t\t}\n+\n+\t\t\t$query = $this->wpdb->prepare(\n+\t\t\t\t\"SELECT user_item_id FROM $this->tb_lp_user_items\n+\t\t\t\tWHERE item_id = %d\n+\t\t\t\tAND item_type = %s\n+\t\t\t\t\",\n+\t\t\t\t$filter->item_id,\n+\t\t\t\tLP_COURSE_CPT\n+\t\t\t);\n+\n+\t\t\treturn $this->wpdb->get_col( $query );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\n+\t\t\treturn array();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get items of course has user\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter user_item_ids\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_item_ids_of_user_course( $filter ): array {\n+\t\tif ( empty( $filter->user_item_ids ) ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND parent_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\n+\t\t\t$filter->user_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->get_col(\n+\t\t\t\"SELECT user_item_id FROM {$this->tb_lp_user_items}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Remove rows IN user_item_ids\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids, $filter->user_id\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function remove_user_item_ids( $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\n+\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->user_item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\n+\t\t\t$filter->user_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM {$this->tb_lp_user_items}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Remove user_itemmeta has list user_item_ids\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter $filter->user_item_ids, $filter->user_id\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function remove_user_itemmeta( $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\n+\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->user_item_ids ) ) {\n+\t\t\treturn 1;\n+\t\t}\n+\n+\t\t$where = 'WHERE 1=1 ';\n+\n+\t\t$where .= $this->wpdb->prepare(\n+\t\t\t'AND learnpress_user_item_id IN(' . LP_Helper::db_format_array( $filter->user_item_ids, '%d' ) . ')',\n+\t\t\t$filter->user_item_ids\n+\t\t);\n+\n+\t\treturn $this->wpdb->query(\n+\t\t\t\"DELETE FROM {$this->tb_lp_user_itemmeta}\n+\t\t\t{$where}\n+\t\t\t\"\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Delete user_item_ids by user_id and course_id\n+\t *\n+\t * @param int $user_id\n+\t * @param int $course_id\n+\t * @author tungnx\n+\t * @since 4.1.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_user_items_old( int $user_id = 0, int $course_id = 0 ) {\n+\t\t$lp_user_items_db     = LP_User_Items_DB::getInstance();\n+\t\t$lp_user_item_results = LP_User_Items_Result_DB::instance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check valid user.\n+\t\t\t\u002F*if ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $user_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'User invalid!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t\t}*\u002F\n+\n+\t\t\t\u002F\u002F Get all user_item_ids has user_id and course_id\n+\t\t\t$filter                      = new LP_User_Items_Filter();\n+\t\t\t$filter->user_id             = $user_id;\n+\t\t\t$filter->item_id             = $course_id;\n+\t\t\t$filter->item_type           = LP_COURSE_CPT;\n+\t\t\t$filter->only_fields         = [ 'user_item_id' ];\n+\t\t\t$filter->run_query_count     = false;\n+\t\t\t$filter->return_string_query = true;\n+\t\t\t$user_course_ids_query       = $lp_user_items_db->get_user_items( $filter );\n+\t\t\t$user_course_ids             = $this->wpdb->get_col( $user_course_ids_query );\n+\t\t\tif ( empty( $user_course_ids ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$course->delete_user_item_and_result( $user_course_ids );\n+\n+\t\t\t\u002F\u002F Clear cache total students enrolled of one course.\n+\t\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\t\t\t$lp_course_cache->clean_total_students_enrolled( $course_id );\n+\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $course_id );\n+\t\t\t\u002F\u002F Clear cache count students many courses.\n+\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\n+\t\t\t\u002F\u002F Clear cache user course.\n+\t\t\t$lp_user_items_cache = new LP_User_Items_Cache();\n+\t\t\t$lp_user_items_cache->clean_user_item(\n+\t\t\t\t[\n+\t\t\t\t\t$user_id,\n+\t\t\t\t\t$course_id,\n+\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t]\n+\t\t\t);\n+\t\t\t\u002F\u002F Clear userCourseModel cache.\n+\t\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$user_id}\u002F{$course_id}\u002F\" . LP_COURSE_CPT;\n+\t\t\t$lpUserCourseCache = new LP_Cache();\n+\t\t\t$lpUserCourseCache->clear( $key_cache );\n+\n+\t\t\tdo_action( 'learn-press\u002Fuser-item-old\u002Fdelete', $user_id, $course_id );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update user_id for lp_user_item with Order buy User Guest\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function update_user_id_by_order( $filter ) {\n+\t\t\u002F\u002F Check valid user.\n+\t\tif ( ! is_user_logged_in() || ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $filter->user_id ) ) {\n+\t\t\tthrow new Exception( __FUNCTION__ . ': Invalid user!' );\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"UPDATE {$this->tb_lp_user_items}\n+\t\t\tSET user_id = %d\n+\t\t\tWHERE ref_type = %s\n+\t\t\tAND ref_id = %d\n+\t\t\t\",\n+\t\t\t$filter->user_id,\n+\t\t\tLP_ORDER_CPT,\n+\t\t\t$filter->ref_id\n+\t\t);\n+\n+\t\treturn $this->wpdb->query( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Count items by type and total by status\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter {parent_id, status, graduation}\n+\t *\n+\t * @throws Exception\n+\t *\n+\t * @return null|object\n+\t *\u002F\n+\tpublic function count_items_of_course_with_status( $filter ) {\n+\t\t$item_types       = CourseModel::item_types_support();\n+\t\t$count_item_types = count( $item_types );\n+\t\t$i                = 0;\n+\n+\t\t\u002F\u002F$user_course = $this->get_last_user_course( $filter );\n+\n+\t\t$query_count  = '';\n+\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.status = %s) AS count_status,', $filter->status );\n+\n+\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t++$i;\n+\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.status = %s AND ui.item_type = %s) AS %s,', $filter->status, $item_type, $item_type . '_status_' . $filter->status );\n+\t\t\t$query_count .= $this->wpdb->prepare( 'SUM(ui.graduation = %s AND ui.item_type = %s) AS %s', $filter->graduation, $item_type, $item_type . '_graduation_' . $filter->graduation );\n+\n+\t\t\tif ( $i \u003C $count_item_types ) {\n+\t\t\t\t$query_count .= ',';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t'SELECT ' . $query_count . ' FROM ' . $this->tb_lp_user_items . ' ui\n+\t\t\tWHERE parent_id = %d\n+\t\t\t',\n+\t\t\t$filter->parent_id\n+\t\t);\n+\n+\t\t$total_items = $this->wpdb->get_row( $query );\n+\n+\t\treturn $total_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get quizzes of user\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t * @since 4.1.4.1\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_user_quizzes( $filter, int &$total_rows = 0 ) {\n+\t\t$filter->item_type = LP_QUIZ_CPT;\n+\t\t$filter->ref_type  = LP_COURSE_CPT;\n+\n+\t\treturn $this->get_user_items( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get courses only by course's user are learning\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @author tungnx\n+\t * @version 1.0.2\n+\t * @since 4.1.5\n+\t * @return null|array|string|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_user_courses( $filter, int &$total_rows = 0 ) {\n+\t\t$filter->collection_alias = 'ui';\n+\n+\t\t\u002F\u002F Get courses publish, private\n+\t\t$filter->join[]    = \"INNER JOIN {$this->tb_posts} AS p ON p.ID = $filter->collection_alias.item_id\";\n+\t\t$filter->where[]   = $this->wpdb->prepare( 'AND ( p.post_status = %s OR p.post_status = %s )', 'publish', 'private' );\n+\t\t$filter->item_type = LP_COURSE_CPT;\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->get_user_items( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get total users attend courses of Author\n+\t *\n+\t * @param int $author_id\n+\t *\n+\t * @return LP_User_Items_Filter\n+\t * @since 4.1.6\n+\t * @version 1.0.1\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function count_user_attend_courses_of_author( int $author_id ): LP_User_Items_Filter {\n+\t\t$filter_course                      = new LP_Course_Filter();\n+\t\t$filter_course->only_fields         = array( 'ID' );\n+\t\t$filter_course->post_author         = $author_id;\n+\t\t$filter_course->post_status         = [ 'publish', 'private' ];\n+\t\t$filter_course->return_string_query = true;\n+\t\t$query_courses_str                  = LP_Course_DB::getInstance()->get_courses( $filter_course );\n+\n+\t\t$filter              = new LP_User_Items_Filter();\n+\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t$filter->only_fields = array( 'ui.user_id' );\n+\t\t$filter->field_count = 'ui.user_id';\n+\t\t$filter->where[]     = \"AND item_id IN ({$query_courses_str})\";\n+\t\t$filter->query_count = true;\n+\n+\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-users-attend-courses-of-author', $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Get list students attend\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array|int|string|null\n+\t * @since 4.1.6.9\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_students( $filter, int &$total_rows = 0 ) {\n+\t\t$default_fields         = $this->get_cols_of_table( $this->tb_users );\n+\t\t$filter->fields         = array_merge( $default_fields, $filter->fields );\n+\t\t$filter->exclude_fields = [ 'user_pass', 'user_login', 'user_status', 'user_activation_key' ];\n+\t\t$filter->field_count    = 'ID';\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_users;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'u';\n+\t\t}\n+\n+\t\t\u002F\u002F Filter\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_lp_user_items AS ui ON u.ID = ui.user_id\";\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND item_type =%s', LP_COURSE_CPT );\n+\n+\t\t\u002F\u002F Filter by user ids\n+\t\tif ( ! empty( $filter->user_ids ) ) {\n+\t\t\t$term_ids_format = LP_Helper::db_format_array( $filter->user_ids, '%d' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND r_term.term_taxonomy_id IN (' . $term_ids_format . ')', $filter->user_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Filter\n+\n+\t\t$filter->group_by = 'ID';\n+\n+\t\t\u002F\u002F End filter\n+\n+\t\t$filter = apply_filters( 'lp\u002Fcourse\u002Fquery\u002Fstudents', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Count students on category course.\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @return int\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function count_students( $filter ): int {\n+\t\t$count = 0;\n+\n+\t\ttry {\n+\t\t\t$filter->query_count = true;\n+\t\t\t$filter->only_fields = [ 'ui.user_id' ];\n+\t\t\t$filter->field_count = 'ui.user_id';\n+\t\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t\t$filter->where[]     = 'AND ui.user_id != 0';\n+\t\t\t$this->get_user_items( $filter, $count );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $count;\n+\t}\n+}\n+\n+LP_Course_DB::getInstance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-thim-cache-db.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-thim-cache-db.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002Fclass-thim-cache-db.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002Fclass-thim-cache-db.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,153 +1,153 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class Thim_Cache_DB\r\n- *\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- * @since 4.2.2\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'Thim_Cache_DB' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-class Thim_Cache_DB {\r\n-\tprivate static $_instance = null;\r\n-\tprivate $action = null; \u002F\u002F one of insert\u002Fupdate\r\n-\tconst ACTION_INSERT = 'insert';\r\n-\tconst ACTION_UPDATE = 'update';\r\n-\r\n-\t\u002F**\r\n-\t * Set action for thim cache (one of insert\u002Fupdate)\r\n-\t * Default is null\r\n-\t *\r\n-\t * @param string|null $action\r\n-\t * @description Null for not set manual action insert\u002Fupdate\r\n-\t * @description Else it will be auto check exist key_cache to insert\u002Fupdate\r\n-\t * @return Thim_Cache_DB\r\n-\t *\u002F\r\n-\tpublic function set_action( $action ): Thim_Cache_DB {\r\n-\t\t$this->action = $action;\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Singleton\r\n-\t *\u002F\r\n-\tpublic static function instance(): Thim_Cache_DB {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new static();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @var wpdb $wpdb\r\n-\t *\u002F\r\n-\tpublic $wpdb;\r\n-\tpublic $table_name;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\t$this->wpdb       = $GLOBALS['wpdb'];\r\n-\t\t$this->table_name = $this->wpdb->prefix . 'thim_cache';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value by key_cache\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t *\r\n-\t * @return bool|string\r\n-\t *\u002F\r\n-\tpublic function get_value( string $key_cache ) {\r\n-\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT `value` FROM {$this->table_name} WHERE `key_cache` = %s\",\r\n-\t\t\t$key_cache\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->get_var( $sql );\r\n-\t\tif ( is_null( $result ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value by key_cache\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t * @param string $value\r\n-\t * @param int $expire timestamp\r\n-\t * @return bool|int|mysqli_result|resource|null\r\n-\t *\u002F\r\n-\tpublic function set_value( string $key_cache, string $value, int $expire = 0 ) {\r\n-\t\t$action = self::ACTION_INSERT;\r\n-\r\n-\t\t\u002F\u002F Auto check exist key_cache\r\n-\t\t$value_old = $this->get_value( $key_cache );\r\n-\t\tif ( false !== $value_old ) {\r\n-\t\t\t$action = self::ACTION_UPDATE;\r\n-\t\t}\r\n-\r\n-\t\tif ( self::ACTION_UPDATE === $action ) { \u002F\u002F Update\r\n-\t\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\t\"UPDATE {$this->table_name} SET value = %s, expiration = %d WHERE key_cache = %s\",\r\n-\t\t\t\t$value,\r\n-\t\t\t\t$expire,\r\n-\t\t\t\t$key_cache\r\n-\t\t\t);\r\n-\t\t} else { \u002F\u002F Insert\r\n-\t\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\t\"INSERT INTO {$this->table_name} (key_cache, value, expiration) VALUES (%s, %s, %d)\",\r\n-\t\t\t\t$key_cache,\r\n-\t\t\t\t$value,\r\n-\t\t\t\t$expire\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $this->wpdb->query( $sql );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete value by key_cache\r\n-\t *\r\n-\t * @param string $key_cache\r\n-\t *\r\n-\t * @return bool|int|mysqli_result|resource|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function remove_cache( string $key_cache ) {\r\n-\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\"DELETE FROM {$this->table_name} WHERE key_cache = %s\",\r\n-\t\t\t$key_cache\r\n-\t\t);\r\n-\r\n-\t\t$result = $this->wpdb->query( $sql );\r\n-\r\n-\t\tif ( $this->wpdb->last_error ) {\r\n-\t\t\tthrow new Exception( $this->wpdb->last_error );\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete all cache.\r\n-\t *\r\n-\t * @return bool|int|mysqli_result|resource|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function remove_all_cache() {\r\n-\t\t$sql    = \"TRUNCATE TABLE {$this->table_name}\";\r\n-\t\t$result = $this->wpdb->query( $sql );\r\n-\r\n-\t\tif ( $this->wpdb->last_error ) {\r\n-\t\t\tthrow new Exception( $this->wpdb->last_error );\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class Thim_Cache_DB\n+ *\n+ * @author tungnx\n+ * @version 1.0.0\n+ * @since 4.2.2\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'Thim_Cache_DB' ) ) {\n+\treturn;\n+}\n+\n+class Thim_Cache_DB {\n+\tprivate static $_instance = null;\n+\tprivate $action = null; \u002F\u002F one of insert\u002Fupdate\n+\tconst ACTION_INSERT = 'insert';\n+\tconst ACTION_UPDATE = 'update';\n+\n+\t\u002F**\n+\t * Set action for thim cache (one of insert\u002Fupdate)\n+\t * Default is null\n+\t *\n+\t * @param string|null $action\n+\t * @description Null for not set manual action insert\u002Fupdate\n+\t * @description Else it will be auto check exist key_cache to insert\u002Fupdate\n+\t * @return Thim_Cache_DB\n+\t *\u002F\n+\tpublic function set_action( $action ): Thim_Cache_DB {\n+\t\t$this->action = $action;\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Singleton\n+\t *\u002F\n+\tpublic static function instance(): Thim_Cache_DB {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new static();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * @var wpdb $wpdb\n+\t *\u002F\n+\tpublic $wpdb;\n+\tpublic $table_name;\n+\n+\tprotected function __construct() {\n+\t\t$this->wpdb       = $GLOBALS['wpdb'];\n+\t\t$this->table_name = $this->wpdb->prefix . 'thim_cache';\n+\t}\n+\n+\t\u002F**\n+\t * Get value by key_cache\n+\t *\n+\t * @param string $key_cache\n+\t *\n+\t * @return bool|string\n+\t *\u002F\n+\tpublic function get_value( string $key_cache ) {\n+\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\"SELECT `value` FROM {$this->table_name} WHERE `key_cache` = %s\",\n+\t\t\t$key_cache\n+\t\t);\n+\n+\t\t$result = $this->wpdb->get_var( $sql );\n+\t\tif ( is_null( $result ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get value by key_cache\n+\t *\n+\t * @param string $key_cache\n+\t * @param string $value\n+\t * @param int $expire timestamp\n+\t * @return bool|int|mysqli_result|resource|null\n+\t *\u002F\n+\tpublic function set_value( string $key_cache, string $value, int $expire = 0 ) {\n+\t\t$action = self::ACTION_INSERT;\n+\n+\t\t\u002F\u002F Auto check exist key_cache\n+\t\t$value_old = $this->get_value( $key_cache );\n+\t\tif ( false !== $value_old ) {\n+\t\t\t$action = self::ACTION_UPDATE;\n+\t\t}\n+\n+\t\tif ( self::ACTION_UPDATE === $action ) { \u002F\u002F Update\n+\t\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\t\"UPDATE {$this->table_name} SET value = %s, expiration = %d WHERE key_cache = %s\",\n+\t\t\t\t$value,\n+\t\t\t\t$expire,\n+\t\t\t\t$key_cache\n+\t\t\t);\n+\t\t} else { \u002F\u002F Insert\n+\t\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\t\"INSERT INTO {$this->table_name} (key_cache, value, expiration) VALUES (%s, %s, %d)\",\n+\t\t\t\t$key_cache,\n+\t\t\t\t$value,\n+\t\t\t\t$expire\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $this->wpdb->query( $sql );\n+\t}\n+\n+\t\u002F**\n+\t * Delete value by key_cache\n+\t *\n+\t * @param string $key_cache\n+\t *\n+\t * @return bool|int|mysqli_result|resource|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function remove_cache( string $key_cache ) {\n+\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\"DELETE FROM {$this->table_name} WHERE key_cache = %s\",\n+\t\t\t$key_cache\n+\t\t);\n+\n+\t\t$result = $this->wpdb->query( $sql );\n+\n+\t\tif ( $this->wpdb->last_error ) {\n+\t\t\tthrow new Exception( $this->wpdb->last_error );\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Delete all cache.\n+\t *\n+\t * @return bool|int|mysqli_result|resource|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function remove_all_cache() {\n+\t\t$sql    = \"TRUNCATE TABLE {$this->table_name}\";\n+\t\t$result = $this->wpdb->query( $sql );\n+\n+\t\tif ( $this->wpdb->last_error ) {\n+\t\t\tthrow new Exception( $this->wpdb->last_error );\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourse\u002FCourseJsonDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourse\u002FCourseJsonDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourse\u002FCourseJsonDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourse\u002FCourseJsonDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,294 +1,294 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases\\Course;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LP_Helper;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class CourseJsonDB\r\n- *\r\n- * Move from LP_Course_JSON_DB to here\r\n- *\r\n- * @since 4.3.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class CourseJsonDB extends DataBase {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Courses\r\n-\t *\r\n-\t * @param CourseJsonFilter $filter\r\n-\t * @param int $total_rows return total_rows\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.6.9\r\n-\t *\u002F\r\n-\tpublic function get_courses( CourseJsonFilter $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_courses;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'c';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Find ID\r\n-\t\tif ( ! empty( $filter->ID ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Status\r\n-\t\t$filter->post_status = (array) $filter->post_status;\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Exclude status auto-draft, because Admin of WP not show auto-draft in list post, so all front-end and back-end of LP also not show auto-draft\r\n-\t\tif ( ! in_array( 'auto-draft', $filter->post_status, true ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_status != %s\", 'auto-draft' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Term ids\r\n-\t\tif ( ! empty( $filter->term_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize term ids\r\n-\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\r\n-\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\r\n-\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\r\n-\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Course ids\r\n-\t\tif ( ! empty( $filter->ids ) ) {\r\n-\t\t\t$ids        = array_map( 'absint', $filter->ids );\r\n-\t\t\t$ids_format = join( ',', $ids );\r\n-\t\t\t$filter->where[] = \"AND $ca.ID IN ($ids_format)\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Title\r\n-\t\tif ( ! empty( $filter->post_title ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Name(slug)\r\n-\t\tif ( ! empty( $filter->post_name ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\tif ( ! empty( $filter->post_author ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Authors\r\n-\t\tif ( ! empty( $filter->post_authors ) ) {\r\n-\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.post_author IN (\" . $post_authors_format . ')', $filter->post_authors );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Type price\r\n-\t\t *\r\n-\t\t * if 'free' and 'paid' are not in the array or not null, we will filter the price\r\n-\t\t *\u002F\r\n-\t\tif ( ! empty( $filter->type_price ) &&\r\n-\t\t\t( ! in_array( 'free', $filter->type_price ) && ! in_array( 'paid', $filter->type_price ) ) ) {\r\n-\t\t\tforeach ( $filter->type_price as $type_price ) {\r\n-\t\t\t\tswitch ( $type_price ) {\r\n-\t\t\t\t\tcase 'free':\r\n-\t\t\t\t\t\t$filter->where[] = 'AND price_to_sort = 0';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'paid':\r\n-\t\t\t\t\t\t$filter->where[] = 'AND price_to_sort > 0';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Is sale\r\n-\t\tif ( ! empty( $filter->is_sale ) ) {\r\n-\t\t\t$filter->where[] = 'AND is_sale = 1';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Is feature\r\n-\t\tif ( ! empty( $filter->is_feature ) ) {\r\n-\t\t\t$filter = $this->get_courses_in_feature( $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Levels\r\n-\t\tif ( ! empty( $filter->levels ) ) {\r\n-\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pml ON c.ID = pml.post_id\";\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_key = %s', '_lp_level' );\r\n-\t\t\t$levels_format   = LP_Helper::db_format_array( $filter->levels, '%s' );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_value IN (' . $levels_format . ')', $filter->levels );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Course type\r\n-\t\tif ( ! empty( $filter->type ) && $filter->type !== 'all' ) {\r\n-\t\t\tif ( $filter->type === 'offline' ) {\r\n-\t\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm_off ON c.ID = pm_off.post_id\";\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_key = %s', '_lp_offline_course' );\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_value = %s', 'yes' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t\t\"AND c.ID NOT IN\r\n-\t\t\t\t\t( SELECT id FROM $this->tb_posts as p1\r\n-\t\t\t\t\tINNER JOIN $this->tb_postmeta as pm_ol on p1.ID = pm_ol.post_id\r\n-\t\t\t\t\tWHERE pm_ol.meta_key = %s AND pm_ol.meta_value = %s )\",\r\n-\t\t\t\t\t'_lp_offline_course',\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is on popular\r\n-\t * Use \"UNION\" to merge 2 query\r\n-\t *\r\n-\t * @param CourseJsonFilter $filter\r\n-\t *\r\n-\t * @return  CourseJsonFilter\r\n-\t * @throws Exception\r\n-\t * @version 1.0.9\r\n-\t * @since 4.3.2.3\r\n-\t *\u002F\r\n-\tpublic function get_courses_order_by_popular( CourseJsonFilter &$filter ): CourseJsonFilter {\r\n-\t\t\u002F\u002F Set list name columns get\r\n-\t\t\u002F\u002F$columns_table_posts = $this->get_cols_of_table( $this->tb_posts );\r\n-\t\t\u002F\u002F$filter->fields      = array_merge( $columns_table_posts, $filter->fields );\r\n-\t\t$db = CourseJsonDB::getInstance();\r\n-\r\n-\t\t$filter_user_course       = clone $filter;\r\n-\t\t$filter_course_not_attend = clone $filter;\r\n-\r\n-\t\t\u002F\u002F Query get users total attend courses\r\n-\t\t$fields_user_course_require = [ 'c.ID', 'COUNT(c.ID) AS total' ];\r\n-\t\t$filter_user_course->fields = array( 'c.ID', 'COUNT(c.ID) AS total' );\r\n-\t\tif ( ! empty( $filter_user_course->only_fields ) ) {\r\n-\t\t\t$pattern = '#ID.*#';\r\n-\t\t\tforeach ( $filter_user_course->only_fields as $k => $field ) {\r\n-\t\t\t\tif ( preg_match( $pattern, $field ) ) {\r\n-\t\t\t\t\tunset( $filter_user_course->only_fields[ $k ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$filter_user_course->only_fields = array_unique( array_merge( $filter_user_course->only_fields, $fields_user_course_require ) );\r\n-\t\t}\r\n-\r\n-\t\t$filter_user_course->join[]              = \"INNER JOIN {$this->tb_lp_user_items} AS ui ON c.ID = ui.item_id\";\r\n-\t\t$filter_user_course->where[]             = $this->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\r\n-\t\t$filter_user_course->where[]             = $this->wpdb->prepare(\r\n-\t\t\t'AND (status = %s OR status = %s OR status = %s)',\r\n-\t\t\tLP_COURSE_ENROLLED,\r\n-\t\t\tLP_COURSE_PURCHASED,\r\n-\t\t\tLP_COURSE_FINISHED\r\n-\t\t);\r\n-\t\t$filter_user_course->group_by            = 'c.ID';\r\n-\t\t$filter_user_course->order_by            = '';\r\n-\t\t$filter_user_course->return_string_query = true;\r\n-\r\n-\t\t$query_user_course = $db->get_courses( $filter_user_course );\r\n-\r\n-\t\t\u002F\u002F Query get courses not attend\r\n-\t\t$filter_user_course_cl              = clone $filter_user_course;\r\n-\t\t$filter_user_course_cl->only_fields = array( 'c.ID' );\r\n-\t\t$query_user_course_for_not_in       = $db->get_courses( $filter_user_course_cl );\r\n-\r\n-\t\t$fields_user_course_not_attend_require = [ 'c.ID', '0 AS total' ];\r\n-\t\t$filter_course_not_attend->fields      = [ 'c.ID', '0 AS total' ];\r\n-\t\tif ( ! empty( $filter_course_not_attend->only_fields ) ) {\r\n-\t\t\t$pattern = '#ID.*#';\r\n-\t\t\tforeach ( $filter_course_not_attend->only_fields as $k => $field ) {\r\n-\t\t\t\tif ( preg_match( $pattern, $field ) ) {\r\n-\t\t\t\t\tunset( $filter_course_not_attend->only_fields[ $k ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$filter_course_not_attend->only_fields = array_unique( array_merge( $filter_course_not_attend->only_fields, $fields_user_course_not_attend_require ) );\r\n-\t\t}\r\n-\t\t$filter_course_not_attend->where[] = 'AND c.ID NOT IN(' . $query_user_course_for_not_in . ')';\r\n-\r\n-\t\t$filter_course_not_attend->order_by            = '';\r\n-\t\t$filter_course_not_attend->return_string_query = true;\r\n-\r\n-\t\t$query_course_not_attend = $db->get_courses( $filter_course_not_attend );\r\n-\r\n-\t\t$filter->union[]  = $query_user_course;\r\n-\t\t$filter->union[]  = $query_course_not_attend;\r\n-\t\t$filter->order_by = 'total';\r\n-\t\t$filter->order    = 'DESC';\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses is on feature\r\n-\t *\r\n-\t * @param CourseJsonFilter $filter\r\n-\t *\r\n-\t * @return  CourseJsonFilter\r\n-\t * @author tungnx\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.5\r\n-\t *\u002F\r\n-\tpublic function get_courses_in_feature( CourseJsonFilter &$filter ): CourseJsonFilter {\r\n-\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmf ON c.ID = pmf.post_id\";\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_key = %s', '_lp_featured' );\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_value = %s', 'yes' );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total courses of Author\r\n-\t *\r\n-\t * @param int $author_id\r\n-\t * @param array $status\r\n-\t *\r\n-\t * @return CourseJsonFilter\r\n-\t * @since 4.3.4 Clone from LP_Course_DB::count_courses_of_author\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function count_courses_of_author( int $author_id, array $status = [] ): CourseJsonFilter {\r\n-\t\t$filter              = new CourseJsonFilter();\r\n-\t\t$filter->only_fields = array( 'ID' );\r\n-\t\t$filter->post_author = $author_id;\r\n-\t\t$filter->post_status = $status;\r\n-\t\tif ( empty( $status ) ) {\r\n-\t\t\t$filter->post_status = [];\r\n-\t\t}\r\n-\t\t$filter->field_count = 'ID';\r\n-\t\t$filter->query_count = true;\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-courses-of-author', $filter );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases\\Course;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LP_Helper;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class CourseJsonDB\n+ *\n+ * Move from LP_Course_JSON_DB to here\n+ *\n+ * @since 4.3.2.3\n+ * @version 1.0.1\n+ *\u002F\n+class CourseJsonDB extends DataBase {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get Courses\n+\t *\n+\t * @param CourseJsonFilter $filter\n+\t * @param int $total_rows return total_rows\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.6.9\n+\t *\u002F\n+\tpublic function get_courses( CourseJsonFilter $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_courses;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'c';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Find ID\n+\t\tif ( ! empty( $filter->ID ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\n+\t\t}\n+\n+\t\t\u002F\u002F Status\n+\t\t$filter->post_status = (array) $filter->post_status;\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\n+\t\t}\n+\n+\t\t\u002F\u002F Exclude status auto-draft, because Admin of WP not show auto-draft in list post, so all front-end and back-end of LP also not show auto-draft\n+\t\tif ( ! in_array( 'auto-draft', $filter->post_status, true ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_status != %s\", 'auto-draft' );\n+\t\t}\n+\n+\t\t\u002F\u002F Term ids\n+\t\tif ( ! empty( $filter->term_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize term ids\n+\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\n+\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\n+\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\n+\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\n+\t\t}\n+\n+\t\t\u002F\u002F Course ids\n+\t\tif ( ! empty( $filter->ids ) ) {\n+\t\t\t$ids        = array_map( 'absint', $filter->ids );\n+\t\t\t$ids_format = join( ',', $ids );\n+\t\t\t$filter->where[] = \"AND $ca.ID IN ($ids_format)\";\n+\t\t}\n+\n+\t\t\u002F\u002F Title\n+\t\tif ( ! empty( $filter->post_title ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Name(slug)\n+\t\tif ( ! empty( $filter->post_name ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\tif ( ! empty( $filter->post_author ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\n+\t\t}\n+\n+\t\t\u002F\u002F Authors\n+\t\tif ( ! empty( $filter->post_authors ) ) {\n+\t\t\t$post_authors_format = LP_Helper::db_format_array( $filter->post_authors, '%d' );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND $ca.post_author IN (\" . $post_authors_format . ')', $filter->post_authors );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Type price\n+\t\t *\n+\t\t * if 'free' and 'paid' are not in the array or not null, we will filter the price\n+\t\t *\u002F\n+\t\tif ( ! empty( $filter->type_price ) &&\n+\t\t\t( ! in_array( 'free', $filter->type_price ) && ! in_array( 'paid', $filter->type_price ) ) ) {\n+\t\t\tforeach ( $filter->type_price as $type_price ) {\n+\t\t\t\tswitch ( $type_price ) {\n+\t\t\t\t\tcase 'free':\n+\t\t\t\t\t\t$filter->where[] = 'AND price_to_sort = 0';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'paid':\n+\t\t\t\t\t\t$filter->where[] = 'AND price_to_sort > 0';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Is sale\n+\t\tif ( ! empty( $filter->is_sale ) ) {\n+\t\t\t$filter->where[] = 'AND is_sale = 1';\n+\t\t}\n+\n+\t\t\u002F\u002F Is feature\n+\t\tif ( ! empty( $filter->is_feature ) ) {\n+\t\t\t$filter = $this->get_courses_in_feature( $filter );\n+\t\t}\n+\n+\t\t\u002F\u002F Levels\n+\t\tif ( ! empty( $filter->levels ) ) {\n+\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pml ON c.ID = pml.post_id\";\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_key = %s', '_lp_level' );\n+\t\t\t$levels_format   = LP_Helper::db_format_array( $filter->levels, '%s' );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pml.meta_value IN (' . $levels_format . ')', $filter->levels );\n+\t\t}\n+\n+\t\t\u002F\u002F Course type\n+\t\tif ( ! empty( $filter->type ) && $filter->type !== 'all' ) {\n+\t\t\tif ( $filter->type === 'offline' ) {\n+\t\t\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pm_off ON c.ID = pm_off.post_id\";\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_key = %s', '_lp_offline_course' );\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND pm_off.meta_value = %s', 'yes' );\n+\t\t\t} else {\n+\t\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t\t\"AND c.ID NOT IN\n+\t\t\t\t\t( SELECT id FROM $this->tb_posts as p1\n+\t\t\t\t\tINNER JOIN $this->tb_postmeta as pm_ol on p1.ID = pm_ol.post_id\n+\t\t\t\t\tWHERE pm_ol.meta_key = %s AND pm_ol.meta_value = %s )\",\n+\t\t\t\t\t'_lp_offline_course',\n+\t\t\t\t\t'yes'\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is on popular\n+\t * Use \"UNION\" to merge 2 query\n+\t *\n+\t * @param CourseJsonFilter $filter\n+\t *\n+\t * @return  CourseJsonFilter\n+\t * @throws Exception\n+\t * @version 1.0.9\n+\t * @since 4.3.2.3\n+\t *\u002F\n+\tpublic function get_courses_order_by_popular( CourseJsonFilter &$filter ): CourseJsonFilter {\n+\t\t\u002F\u002F Set list name columns get\n+\t\t\u002F\u002F$columns_table_posts = $this->get_cols_of_table( $this->tb_posts );\n+\t\t\u002F\u002F$filter->fields      = array_merge( $columns_table_posts, $filter->fields );\n+\t\t$db = CourseJsonDB::getInstance();\n+\n+\t\t$filter_user_course       = clone $filter;\n+\t\t$filter_course_not_attend = clone $filter;\n+\n+\t\t\u002F\u002F Query get users total attend courses\n+\t\t$fields_user_course_require = [ 'c.ID', 'COUNT(c.ID) AS total' ];\n+\t\t$filter_user_course->fields = array( 'c.ID', 'COUNT(c.ID) AS total' );\n+\t\tif ( ! empty( $filter_user_course->only_fields ) ) {\n+\t\t\t$pattern = '#ID.*#';\n+\t\t\tforeach ( $filter_user_course->only_fields as $k => $field ) {\n+\t\t\t\tif ( preg_match( $pattern, $field ) ) {\n+\t\t\t\t\tunset( $filter_user_course->only_fields[ $k ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$filter_user_course->only_fields = array_unique( array_merge( $filter_user_course->only_fields, $fields_user_course_require ) );\n+\t\t}\n+\n+\t\t$filter_user_course->join[]              = \"INNER JOIN {$this->tb_lp_user_items} AS ui ON c.ID = ui.item_id\";\n+\t\t$filter_user_course->where[]             = $this->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\n+\t\t$filter_user_course->where[]             = $this->wpdb->prepare(\n+\t\t\t'AND (status = %s OR status = %s OR status = %s)',\n+\t\t\tLP_COURSE_ENROLLED,\n+\t\t\tLP_COURSE_PURCHASED,\n+\t\t\tLP_COURSE_FINISHED\n+\t\t);\n+\t\t$filter_user_course->group_by            = 'c.ID';\n+\t\t$filter_user_course->order_by            = '';\n+\t\t$filter_user_course->return_string_query = true;\n+\n+\t\t$query_user_course = $db->get_courses( $filter_user_course );\n+\n+\t\t\u002F\u002F Query get courses not attend\n+\t\t$filter_user_course_cl              = clone $filter_user_course;\n+\t\t$filter_user_course_cl->only_fields = array( 'c.ID' );\n+\t\t$query_user_course_for_not_in       = $db->get_courses( $filter_user_course_cl );\n+\n+\t\t$fields_user_course_not_attend_require = [ 'c.ID', '0 AS total' ];\n+\t\t$filter_course_not_attend->fields      = [ 'c.ID', '0 AS total' ];\n+\t\tif ( ! empty( $filter_course_not_attend->only_fields ) ) {\n+\t\t\t$pattern = '#ID.*#';\n+\t\t\tforeach ( $filter_course_not_attend->only_fields as $k => $field ) {\n+\t\t\t\tif ( preg_match( $pattern, $field ) ) {\n+\t\t\t\t\tunset( $filter_course_not_attend->only_fields[ $k ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$filter_course_not_attend->only_fields = array_unique( array_merge( $filter_course_not_attend->only_fields, $fields_user_course_not_attend_require ) );\n+\t\t}\n+\t\t$filter_course_not_attend->where[] = 'AND c.ID NOT IN(' . $query_user_course_for_not_in . ')';\n+\n+\t\t$filter_course_not_attend->order_by            = '';\n+\t\t$filter_course_not_attend->return_string_query = true;\n+\n+\t\t$query_course_not_attend = $db->get_courses( $filter_course_not_attend );\n+\n+\t\t$filter->union[]  = $query_user_course;\n+\t\t$filter->union[]  = $query_course_not_attend;\n+\t\t$filter->order_by = 'total';\n+\t\t$filter->order    = 'DESC';\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses is on feature\n+\t *\n+\t * @param CourseJsonFilter $filter\n+\t *\n+\t * @return  CourseJsonFilter\n+\t * @author tungnx\n+\t * @version 1.0.0\n+\t * @since 4.1.5\n+\t *\u002F\n+\tpublic function get_courses_in_feature( CourseJsonFilter &$filter ): CourseJsonFilter {\n+\t\t$filter->join[]  = \"INNER JOIN $this->tb_postmeta AS pmf ON c.ID = pmf.post_id\";\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_key = %s', '_lp_featured' );\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND pmf.meta_value = %s', 'yes' );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Get total courses of Author\n+\t *\n+\t * @param int $author_id\n+\t * @param array $status\n+\t *\n+\t * @return CourseJsonFilter\n+\t * @since 4.3.4 Clone from LP_Course_DB::count_courses_of_author\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function count_courses_of_author( int $author_id, array $status = [] ): CourseJsonFilter {\n+\t\t$filter              = new CourseJsonFilter();\n+\t\t$filter->only_fields = array( 'ID' );\n+\t\t$filter->post_author = $author_id;\n+\t\t$filter->post_status = $status;\n+\t\tif ( empty( $status ) ) {\n+\t\t\t$filter->post_status = [];\n+\t\t}\n+\t\t$filter->field_count = 'ID';\n+\t\t$filter->query_count = true;\n+\n+\t\treturn apply_filters( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter\u002Fcount-courses-of-author', $filter );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourse\u002FCourseSectionItemsDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourse\u002FCourseSectionItemsDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourse\u002FCourseSectionItemsDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourse\u002FCourseSectionItemsDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,131 +1,131 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases\\Course;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\r\n-use LP_Helper;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class CourseSectionItemsDB\r\n- *\r\n- * Convert from LP_Section_Items_DB\r\n- *\r\n- * @package LearnPress\u002FDatabases\u002FCourse\r\n- * @since  4.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class CourseSectionItemsDB extends DataBase {\r\n-\tpublic static $_instance;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section items\r\n-\t *\r\n-\t * @param CourseSectionItemsFilter $filter\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.6\r\n-\t *\u002F\r\n-\tpublic function get_section_items( $filter ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'si';\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $filter->fields as $k => $field ) {\r\n-\t\t\t$filter->fields[ $k ] = $filter->collection_alias . '.' . $field;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %d', $filter->section_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_id = %d', $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_ids ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare(\r\n-\t\t\t\t'AND si.item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\r\n-\t\t\t\t$filter->item_ids\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_item_id = %d', $filter->section_item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update items position\r\n-\t * Update item_order of each item in section\r\n-\t *\r\n-\t * convert from LP_Section_Items_DB::update_items_position\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_items_position( array $item_ids, $section_id ) {\r\n-\t\t$filter             = new CourseSectionItemsFilter();\r\n-\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t$SET_SQL            = 'item_order = CASE';\r\n-\r\n-\t\tforeach ( $item_ids as $position => $item_id ) {\r\n-\t\t\t++$position;\r\n-\t\t\t$item_id = absint( $item_id );\r\n-\t\t\tif ( empty( $item_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN item_id = %d THEN %d', $item_id, $position );\r\n-\t\t}\r\n-\r\n-\t\t$SET_SQL        .= ' ELSE item_order END';\r\n-\t\t$filter->set[]   = $SET_SQL;\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $section_id );\r\n-\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update table\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function update( CourseSectionItemsFilter $filter ) {\r\n-\t\t$filter->collection = $this->tb_lp_section_items;\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases\\Course;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\n+use LP_Helper;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class CourseSectionItemsDB\n+ *\n+ * Convert from LP_Section_Items_DB\n+ *\n+ * @package LearnPress\u002FDatabases\u002FCourse\n+ * @since  4.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class CourseSectionItemsDB extends DataBase {\n+\tpublic static $_instance;\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get section items\n+\t *\n+\t * @param CourseSectionItemsFilter $filter\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @version 1.0.2\n+\t * @since 4.1.6\n+\t *\u002F\n+\tpublic function get_section_items( $filter ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'si';\n+\t\t}\n+\n+\t\tforeach ( $filter->fields as $k => $field ) {\n+\t\t\t$filter->fields[ $k ] = $filter->collection_alias . '.' . $field;\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_id = %d', $filter->section_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_id = %d', $filter->item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_ids ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare(\n+\t\t\t\t'AND si.item_id IN(' . LP_Helper::db_format_array( $filter->item_ids, '%d' ) . ')',\n+\t\t\t\t$filter->item_ids\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.section_item_id = %d', $filter->section_item_id );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND si.item_type = %s', $filter->item_type );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Update items position\n+\t * Update item_order of each item in section\n+\t *\n+\t * convert from LP_Section_Items_DB::update_items_position\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_items_position( array $item_ids, $section_id ) {\n+\t\t$filter             = new CourseSectionItemsFilter();\n+\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t$SET_SQL            = 'item_order = CASE';\n+\n+\t\tforeach ( $item_ids as $position => $item_id ) {\n+\t\t\t++$position;\n+\t\t\t$item_id = absint( $item_id );\n+\t\t\tif ( empty( $item_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN item_id = %d THEN %d', $item_id, $position );\n+\t\t}\n+\n+\t\t$SET_SQL        .= ' ELSE item_order END';\n+\t\t$filter->set[]   = $SET_SQL;\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_id = %d', $section_id );\n+\n+\t\t$this->update_execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Update table\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function update( CourseSectionItemsFilter $filter ) {\n+\t\t$filter->collection = $this->tb_lp_section_items;\n+\t\t$this->update_execute( $filter );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourseSectionDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourseSectionDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FCourseSectionDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FCourseSectionDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,141 +1,141 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\CourseSectionFilter;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CourseSectionItemModel;\r\n-use LearnPress\\Models\\CourseSectionModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LP_Helper;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class CourseSectionDB\r\n- *\r\n- * Refactor of LP_Section_DB\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class CourseSectionDB extends DataBase {\r\n-\tpublic static $_instance;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sections\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_sections( CourseSectionFilter $filter, &$total_rows = 0 ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_sections;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'st';\r\n-\t\t}\r\n-\r\n-\t\t$filter->field_count = 'st.section_id';\r\n-\r\n-\t\tif ( isset( $filter->section_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_id = %d', $filter->section_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->section_course_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_course_id = %d', $filter->section_course_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->section_name ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_name LIKE %s', '%' . $filter->section_name . '%' );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->section_ids ) ) {\r\n-\t\t\t$section_ids_format = LP_Helper::db_format_array( $filter->section_ids, '%d' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND st.section_id IN (' . $section_ids_format . ')', $filter->section_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Default Order\r\n-\t\tif ( empty( $filter->order ) ) {\r\n-\t\t\t$filter->order_by = 'st.section_order';\r\n-\t\t\t$filter->order    = 'ASC';\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get last section order of course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_last_number_order( int $course_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT MAX(section_order)\r\n-\t\t\tFROM $this->tb_lp_sections\r\n-\t\t\tWHERE section_course_id = %d\",\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $number_order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update sections position\r\n-\t * Update section_order of each section in course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_sections_position( array $section_ids, $section_course_id ) {\r\n-\t\t$filter             = new CourseSectionFilter();\r\n-\t\t$filter->collection = $this->tb_lp_sections;\r\n-\t\t$SET_SQL            = 'section_order = CASE';\r\n-\r\n-\t\tforeach ( $section_ids as $position => $section_id ) {\r\n-\t\t\t++ $position;\r\n-\t\t\t$section_id = absint( $section_id );\r\n-\t\t\tif ( empty( $section_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN section_id = %d THEN %d', $section_id, $position );\r\n-\t\t}\r\n-\r\n-\t\t$SET_SQL        .= ' ELSE section_order END';\r\n-\t\t$filter->set[]   = $SET_SQL;\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_course_id = %d', $section_course_id );\r\n-\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\CourseSectionFilter;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CourseSectionItemModel;\n+use LearnPress\\Models\\CourseSectionModel;\n+use LearnPress\\Models\\PostModel;\n+use LP_Helper;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class CourseSectionDB\n+ *\n+ * Refactor of LP_Section_DB\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class CourseSectionDB extends DataBase {\n+\tpublic static $_instance;\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get sections\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_sections( CourseSectionFilter $filter, &$total_rows = 0 ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_sections;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'st';\n+\t\t}\n+\n+\t\t$filter->field_count = 'st.section_id';\n+\n+\t\tif ( isset( $filter->section_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_id = %d', $filter->section_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->section_course_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_course_id = %d', $filter->section_course_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->section_name ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND st.section_name LIKE %s', '%' . $filter->section_name . '%' );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->section_ids ) ) {\n+\t\t\t$section_ids_format = LP_Helper::db_format_array( $filter->section_ids, '%d' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND st.section_id IN (' . $section_ids_format . ')', $filter->section_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Default Order\n+\t\tif ( empty( $filter->order ) ) {\n+\t\t\t$filter->order_by = 'st.section_order';\n+\t\t\t$filter->order    = 'ASC';\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get last section order of course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_last_number_order( int $course_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT MAX(section_order)\n+\t\t\tFROM $this->tb_lp_sections\n+\t\t\tWHERE section_course_id = %d\",\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $number_order;\n+\t}\n+\n+\t\u002F**\n+\t * Update sections position\n+\t * Update section_order of each section in course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_sections_position( array $section_ids, $section_course_id ) {\n+\t\t$filter             = new CourseSectionFilter();\n+\t\t$filter->collection = $this->tb_lp_sections;\n+\t\t$SET_SQL            = 'section_order = CASE';\n+\n+\t\tforeach ( $section_ids as $position => $section_id ) {\n+\t\t\t++ $position;\n+\t\t\t$section_id = absint( $section_id );\n+\t\t\tif ( empty( $section_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN section_id = %d THEN %d', $section_id, $position );\n+\t\t}\n+\n+\t\t$SET_SQL        .= ' ELSE section_order END';\n+\t\t$filter->set[]   = $SET_SQL;\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND section_course_id = %d', $section_course_id );\n+\n+\t\t$this->update_execute( $filter );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FDataBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FDataBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FDataBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FDataBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,890 +1,890 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\FilterBase;\r\n-use wpdb;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class DataBase\r\n- *\r\n- * @since 4.2.9.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class DataBase {\r\n-\tprivate static $_instance;\r\n-\tpublic $wpdb, $tb_users;\r\n-\tpublic $tb_lp_courses;\r\n-\tpublic $tb_lp_user_items, $tb_lp_user_itemmeta;\r\n-\tpublic $tb_posts, $tb_postmeta, $tb_options;\r\n-\tpublic $tb_terms, $tb_term_relationships, $tb_term_taxonomy;\r\n-\tpublic $tb_lp_order_items, $tb_lp_order_itemmeta;\r\n-\tpublic $tb_lp_sections, $tb_lp_section_items;\r\n-\tpublic $tb_lp_quiz_questions;\r\n-\tpublic $tb_lp_user_item_results;\r\n-\tpublic $tb_lp_question_answers;\r\n-\tpublic $tb_lp_question_answermeta;\r\n-\tpublic $tb_lp_upgrade_db;\r\n-\tpublic $tb_lp_sessions;\r\n-\tpublic $tb_lp_files;\r\n-\tpublic $tb_thim_cache;\r\n-\tprivate $collate         = '';\r\n-\tpublic $max_index_length = '191';\r\n-\r\n-\tprotected function __construct() {\r\n-\t\t\u002F**\r\n-\t\t * @var wpdb $wpdb\r\n-\t\t *\u002F\r\n-\t\tglobal $wpdb;\r\n-\t\t$prefix = $wpdb->prefix;\r\n-\r\n-\t\t$this->wpdb                      = $wpdb;\r\n-\t\t$this->tb_users                  = $wpdb->users;\r\n-\t\t$this->tb_posts                  = $wpdb->posts;\r\n-\t\t$this->tb_postmeta               = $wpdb->postmeta;\r\n-\t\t$this->tb_options                = $wpdb->options;\r\n-\t\t$this->tb_terms                  = $wpdb->terms;\r\n-\t\t$this->tb_term_relationships     = $wpdb->term_relationships;\r\n-\t\t$this->tb_term_taxonomy          = $wpdb->term_taxonomy;\r\n-\t\t$this->tb_lp_courses             = $prefix . 'learnpress_courses';\r\n-\t\t$this->tb_lp_user_items          = $prefix . 'learnpress_user_items';\r\n-\t\t$this->tb_lp_user_itemmeta       = $prefix . 'learnpress_user_itemmeta';\r\n-\t\t$this->tb_lp_order_items         = $prefix . 'learnpress_order_items';\r\n-\t\t$this->tb_lp_order_itemmeta      = $prefix . 'learnpress_order_itemmeta';\r\n-\t\t$this->tb_lp_section_items       = $prefix . 'learnpress_section_items';\r\n-\t\t$this->tb_lp_sections            = $prefix . 'learnpress_sections';\r\n-\t\t$this->tb_lp_quiz_questions      = $prefix . 'learnpress_quiz_questions';\r\n-\t\t$this->tb_lp_user_item_results   = $prefix . 'learnpress_user_item_results';\r\n-\t\t$this->tb_lp_question_answers    = $prefix . 'learnpress_question_answers';\r\n-\t\t$this->tb_lp_question_answermeta = $prefix . 'learnpress_question_answermeta';\r\n-\t\t$this->tb_lp_upgrade_db          = $prefix . 'learnpress_upgrade_db';\r\n-\t\t$this->tb_lp_sessions            = $prefix . 'learnpress_sessions';\r\n-\t\t$this->tb_lp_files               = $prefix . 'learnpress_files';\r\n-\t\t$this->tb_thim_cache             = $prefix . 'thim_cache';\r\n-\t\t$this->wpdb->hide_errors();\r\n-\t\t$this->set_collate();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Instance\r\n-\t *\r\n-\t * @return DataBase\r\n-\t *\u002F\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\tpublic function set_collate() {\r\n-\t\t$collate = '';\r\n-\r\n-\t\tif ( $this->wpdb->has_cap( 'collation' ) ) {\r\n-\t\t\tif ( ! empty( $this->wpdb->charset ) ) {\r\n-\t\t\t\t$collate .= 'DEFAULT CHARACTER SET ' . $this->wpdb->charset;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $this->wpdb->collate ) ) {\r\n-\t\t\t\t$collate .= ' COLLATE ' . $this->wpdb->collate;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->collate = $collate;\r\n-\t}\r\n-\r\n-\tpublic function get_collate(): string {\r\n-\t\treturn $this->collate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check table exists.\r\n-\t *\r\n-\t * @param string $name_table\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_table_exists( string $name_table ) {\r\n-\t\treturn $this->wpdb->query( $this->wpdb->prepare( \"SHOW TABLES LIKE '%s'\", $name_table ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clone table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function clone_table( string $name_table ): bool {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$table_bk = $name_table . '_bk';\r\n-\r\n-\t\t\u002F\u002F Drop table bk if exists.\r\n-\t\t$this->drop_table( $table_bk );\r\n-\r\n-\t\t\u002F\u002F Clone table\r\n-\t\t$this->wpdb->query( \"CREATE TABLE $table_bk LIKE $name_table\" );\r\n-\t\t$this->wpdb->query( \"INSERT INTO $table_bk SELECT * FROM $name_table\" );\r\n-\r\n-\t\t\u002F*dbDelta(\r\n-\t\t\t\"CREATE TABLE $table_bk LIKE $name_table;\r\n-\t\t\tINSERT INTO $table_bk SELECT * FROM $name_table;\"\r\n-\t\t);*\u002F\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check column table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_col_table( string $name_table = '', string $name_col = '' ) {\r\n-\t\t$query = $this->wpdb->prepare( \"SHOW COLUMNS FROM $name_table LIKE '%s'\", $name_col );\r\n-\r\n-\t\treturn $this->wpdb->query( $query );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop Column of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_col_table( string $name_table = '', string $name_col = '' ) {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$check_table = $this->check_col_table( $name_table, $name_col );\r\n-\r\n-\t\tif ( $check_table ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table DROP COLUMN $name_col\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add Column of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param string $name_col .\r\n-\t * @param string $type .\r\n-\t * @param string $after_col .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function add_col_table( string $name_table, string $name_col, string $type, string $after_col = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$query_add = '';\r\n-\r\n-\t\t$col_exists = $this->check_col_table( $name_table, $name_col );\r\n-\r\n-\t\tif ( ! empty( $after_col ) ) {\r\n-\t\t\t$query_add .= \"AFTER $after_col\";\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $col_exists ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table ADD COLUMN $name_col $type $query_add\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop Index of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_indexs_table( string $name_table ) {\r\n-\t\t$show_index = \"SHOW INDEX FROM $name_table\";\r\n-\t\t$indexs     = $this->wpdb->get_results( $show_index );\r\n-\r\n-\t\tforeach ( $indexs as $index ) {\r\n-\t\t\tif ( 'PRIMARY' === $index->Key_name || '1' !== $index->Seq_in_index ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = \"ALTER TABLE $name_table DROP INDEX $index->Key_name\";\r\n-\r\n-\t\t\t$this->wpdb->query( $query );\r\n-\t\t\t$this->check_execute_has_error();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add Index of Table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t * @param array $indexs .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function add_indexs_table( string $name_table, array $indexs ) {\r\n-\t\t$add_index    = '';\r\n-\t\t$count_indexs = count( $indexs ) - 1;\r\n-\r\n-\t\t\u002F\u002F Drop indexs .\r\n-\t\t$this->drop_indexs_table( $name_table );\r\n-\r\n-\t\tforeach ( $indexs as $index ) {\r\n-\t\t\tif ( $count_indexs === array_search( $index, $indexs ) ) {\r\n-\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . ')';\r\n-\t\t\t} else {\r\n-\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . '),';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"ALTER TABLE $name_table\r\n-\t\t\t$add_index\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Drop table\r\n-\t *\r\n-\t * @param string $name_table .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function drop_table( string $name_table = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check table exists.\r\n-\t\t$tb_exists = $this->check_table_exists( $name_table );\r\n-\t\tif ( $tb_exists ) {\r\n-\t\t\t$execute = $this->wpdb->query( \"DROP TABLE $name_table\" );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\treturn $execute;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list columns name of table\r\n-\t *\r\n-\t * @param string $name_table\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.6\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function get_cols_of_table( string $name_table ): array {\r\n-\t\t$query = \"SHOW COLUMNS FROM $name_table\";\r\n-\r\n-\t\t$result = $this->wpdb->get_col( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create table learnpress_user_item_results\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_tb_lp_user_item_results() {\r\n-\t\t$collate = $this->get_collate();\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tCREATE TABLE IF NOT EXISTS $this->tb_lp_user_item_results(\r\n-\t\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\r\n-\t\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\r\n-\t\t\t\tresult longtext,\r\n-\t\t\t\tPRIMARY KEY (id),\r\n-\t\t\t\tKEY user_item_id (user_item_id)\r\n-\t\t\t) $collate\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create table learnpress_upgrade_db\r\n-\t *\r\n-\t * @return bool|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_tb_lp_upgrade_db() {\r\n-\t\t$collate = $this->get_collate();\r\n-\r\n-\t\t$execute = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tCREATE TABLE IF NOT EXISTS {$this->tb_lp_upgrade_db}(\r\n-\t\t\t\tstep varchar(50) PRIMARY KEY UNIQUE,\r\n-\t\t\t\tstatus varchar(10),\r\n-\t\t\t\tKEY status (status)\r\n-\t\t\t) $collate\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $execute;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set step completed.\r\n-\t *\r\n-\t * @param string $step .\r\n-\t * @param string $status .\r\n-\t *\r\n-\t * @return int|bool\r\n-\t *\u002F\r\n-\tpublic function set_step_complete( string $step, string $status ) {\r\n-\t\tif ( ! current_user_can( 'administrator' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->wpdb->insert(\r\n-\t\t\t$this->tb_lp_upgrade_db,\r\n-\t\t\tarray(\r\n-\t\t\t\t'step'   => $step,\r\n-\t\t\t\t'status' => $status,\r\n-\t\t\t),\r\n-\t\t\tarray( '%s', '%s' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get steps completed.\r\n-\t *\r\n-\t * @return array|object|null\r\n-\t *\u002F\r\n-\tpublic function get_steps_completed() {\r\n-\t\treturn $this->wpdb->get_results( \"SELECT step, status FROM {$this->tb_lp_upgrade_db}\", OBJECT_K );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check execute current has any errors.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_execute_has_error() {\r\n-\t\tif ( $this->wpdb->last_error ) {\r\n-\t\t\tthrow new Exception( $this->wpdb->last_error );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Important: Reason need set again indexes for table options of WP\r\n-\t * because if want change value of \"option_name\" will error \"database error Duplicate entry\"\r\n-\t * So before set must drop and add when done all\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.0.3\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function create_indexes_tb_options() {\r\n-\t\t$this->drop_indexs_table( $this->tb_options );\r\n-\t\t$result = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tALTER TABLE $this->tb_options\r\n-\t\t\tADD UNIQUE option_name (option_name),\r\n-\t\t\tADD INDEX autoload (autoload)\r\n-\t\t\t\"\r\n-\t\t);\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rename table\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.0.3\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function rename_table( string $name_table = '', string $new_name = '' ) {\r\n-\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\tthrow new Exception( 'You don\\'t have permission' );\r\n-\t\t}\r\n-\r\n-\t\t$tb_exists = $this->check_table_exists( $name_table );\r\n-\r\n-\t\tif ( ! $tb_exists ) {\r\n-\t\t\tthrow new Exception( 'Table not exists' );\r\n-\t\t}\r\n-\r\n-\t\t$result = $this->wpdb->query(\r\n-\t\t\t\"\r\n-\t\t\tALTER TABLE $name_table\r\n-\t\t\tRENAME $new_name\r\n-\t\t\t\"\r\n-\t\t);\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check key postmeta exist on Database\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function check_key_postmeta_exists( int $post_id = 0, string $key = '' ) {\r\n-\t\treturn $this->wpdb->query(\r\n-\t\t\t$this->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT meta_id FROM $this->tb_postmeta\r\n-\t\t\t\tWHERE meta_key = %s\r\n-\t\t\t\tAND post_id = %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$key,\r\n-\t\t\t\t$post_id\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total pages\r\n-\t *\r\n-\t * @param int $limit\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function get_total_pages( int $limit = 0, int $total_rows = 0 ): int {\r\n-\t\tif ( $limit == 0 ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$total_pages = (int) ceil( $total_rows \u002F $limit );\r\n-\r\n-\t\treturn (int) $total_pages;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query string single row\r\n-\t *\r\n-\t * @param FilterBase $filter\r\n-\t *\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_query_single_row( &$filter ) {\r\n-\t\t$filter->limit               = 1;\r\n-\t\t$filter->return_string_query = true;\r\n-\t\t$filter->run_query_count     = false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get result query\r\n-\t *\r\n-\t * @param FilterBase $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array|object|null|int|string\r\n-\t * @throws Exception\r\n-\t * @author tungnx\r\n-\t * @version 1.0.2\r\n-\t * @since 4.1.6\r\n-\t *\u002F\r\n-\tpublic function execute( $filter, int &$total_rows = 0 ) {\r\n-\t\t$result = null;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\r\n-\t\t\u002F\u002F Fields select\r\n-\t\t$FIELDS = '*';\r\n-\t\tif ( ! empty( $filter->only_fields ) ) {\r\n-\t\t\t$FIELDS = implode( ',', array_unique( $filter->only_fields ) );\r\n-\t\t} elseif ( ! empty( $filter->fields ) ) {\r\n-\t\t\t\u002F\u002F exclude more fields\r\n-\t\t\tif ( ! empty( $filter->exclude_fields ) ) {\r\n-\t\t\t\tforeach ( $filter->exclude_fields as $field ) {\r\n-\t\t\t\t\t$index_field = array_search( $field, $filter->fields );\r\n-\t\t\t\t\tif ( $index_field ) {\r\n-\t\t\t\t\t\tunset( $filter->fields[ $index_field ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $filter->fields as $key => $field ) {\r\n-\t\t\t\tif ( $field === 'order' ) {\r\n-\t\t\t\t\t\u002F\u002F Replace order with `order` to avoid conflict with SQL reserved word.\r\n-\t\t\t\t\t$filter->fields[ $key ] = '`order`';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$FIELDS = implode( ',', array_unique( $filter->fields ) );\r\n-\t\t}\r\n-\t\t$FIELDS = apply_filters( 'lp\u002Fquery\u002Ffields', $FIELDS, $filter );\r\n-\r\n-\t\t$INNER_JOIN = array();\r\n-\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\r\n-\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Finner_join', $INNER_JOIN, $filter );\r\n-\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\r\n-\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t\u002F\u002F Group by\r\n-\t\t$GROUP_BY = '';\r\n-\t\tif ( $filter->group_by ) {\r\n-\t\t\t$GROUP_BY .= 'GROUP BY ' . $filter->group_by;\r\n-\t\t\t$GROUP_BY  = apply_filters( 'lp\u002Fquery\u002Fgroup_by', $GROUP_BY, $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Order by\r\n-\t\t$ORDER_BY = '';\r\n-\t\tif ( $filter->order_by ) {\r\n-\t\t\t$filter->order = strtoupper( $filter->order );\r\n-\t\t\tif ( ! in_array( $filter->order, [ 'DESC', 'ASC' ] ) ) {\r\n-\t\t\t\t$filter->order = 'DESC';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$ORDER_BY .= 'ORDER BY ' . $filter->order_by . ' ' . $filter->order . ' ';\r\n-\t\t\t$ORDER_BY  = apply_filters( 'lp\u002Fquery\u002Forder_by', $ORDER_BY, $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Limit\r\n-\t\t$LIMIT = '';\r\n-\t\tif ( $filter->limit != - 1 ) {\r\n-\t\t\t$filter->limit = absint( $filter->limit );\r\n-\t\t\t\u002F*if ( $filter->limit > $filter->max_limit ) {\r\n-\t\t\t\t$filter->limit = $filter->max_limit;\r\n-\t\t\t}*\u002F\r\n-\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\r\n-\t\t\t$LIMIT  = $this->wpdb->prepare( 'LIMIT %d, %d', $offset, $filter->limit );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F For nest query\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\t$LIMIT = '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F From table or group select\r\n-\t\t$COLLECTION = '';\r\n-\t\tif ( ! empty( $filter->collection ) ) {\r\n-\t\t\t$COLLECTION = $filter->collection;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Alias table\r\n-\t\t$ALIAS_COLLECTION = 'X';\r\n-\t\tif ( ! empty( $filter->collection_alias ) ) {\r\n-\t\t\t$ALIAS_COLLECTION = $filter->collection_alias;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query\r\n-\t\t$query = \"SELECT $FIELDS FROM $COLLECTION AS $ALIAS_COLLECTION\r\n-\t\t$INNER_JOIN\r\n-\t\t$WHERE\r\n-\t\t$GROUP_BY\r\n-\t\t$ORDER_BY\r\n-\t\t$LIMIT\r\n-\t\t\";\r\n-\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\treturn $query;\r\n-\t\t} elseif ( ! empty( $filter->union ) ) {\r\n-\t\t\t$query  = implode( ' UNION ', array_unique( $filter->union ) );\r\n-\t\t\t$query .= $GROUP_BY;\r\n-\t\t\t$query .= $ORDER_BY;\r\n-\t\t\t$query .= $LIMIT;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $filter->query_count ) {\r\n-\t\t\t\u002F\u002F Debug string query\r\n-\t\t\tif ( $filter->debug_string_query ) {\r\n-\t\t\t\treturn $query;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result = $this->wpdb->get_results( $query );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query total rows\r\n-\t\tif ( $filter->run_query_count ) {\r\n-\t\t\t$query       = str_replace( array( $LIMIT, $ORDER_BY ), '', $query );\r\n-\t\t\t$query_total = \"SELECT COUNT($filter->field_count) FROM ($query) AS $ALIAS_COLLECTION\";\r\n-\t\t\t$total_rows  = (int) $this->wpdb->get_var( $query_total );\r\n-\r\n-\t\t\t$this->check_execute_has_error();\r\n-\r\n-\t\t\tif ( $filter->query_count ) {\r\n-\t\t\t\t\u002F\u002F Debug string query\r\n-\t\t\t\tif ( $filter->debug_string_query ) {\r\n-\t\t\t\t\treturn $query_total;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $total_rows;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query update\r\n-\t *\r\n-\t * @param FilterBase $filter\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_execute( $filter ) {\r\n-\r\n-\t\t$COLLECTION = $filter->collection;\r\n-\r\n-\t\t\u002F\u002F SET value\r\n-\t\t$SET = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fset', $filter->set, $filter );\r\n-\t\t$SET = implode( ',', array_unique( $SET ) );\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t$query = \"\r\n-\t\t\tUPDATE $COLLECTION\r\n-\t\t\tSET $SET\r\n-\t\t\t$WHERE\r\n-\t\t\";\r\n-\r\n-\t\t$result = $this->wpdb->query( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query delete\r\n-\t *\r\n-\t * @param FilterBase $filter\r\n-\t * @param string $table\r\n-\t *\r\n-\t * @return bool|int|\\mysqli_result|string|null\r\n-\t * @throws Exception\r\n-\t * @since 4.1.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function delete_execute( $filter, string $table = '' ) {\r\n-\t\t$COLLECTION = $filter->collection;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$WHERE = array( 'WHERE 1=1' );\r\n-\t\t$WHERE = array_merge( $WHERE, $filter->where );\r\n-\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Fwhere', $WHERE, $filter );\r\n-\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\r\n-\r\n-\t\t\u002F\u002F Join\r\n-\t\t$INNER_JOIN = array();\r\n-\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\r\n-\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Finner_join', $INNER_JOIN, $filter );\r\n-\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\r\n-\r\n-\t\t$query = \"\r\n-\t\t\tDELETE $table FROM $COLLECTION\r\n-\t\t\t$INNER_JOIN\r\n-\t\t\t$WHERE\r\n-\t\t\";\r\n-\r\n-\t\tif ( $filter->return_string_query ) {\r\n-\t\t\treturn $query;\r\n-\t\t}\r\n-\r\n-\t\t$result = $this->wpdb->query( $query );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get values of list object by key\r\n-\t *\r\n-\t * @param array $arr_object\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_values_by_key( array $arr_object, string $key = 'ID' ): array {\r\n-\t\t$arr_object_ids = array();\r\n-\t\tforeach ( $arr_object as $object ) {\r\n-\t\t\t$arr_object_ids[] = $object->{$key};\r\n-\t\t}\r\n-\r\n-\t\treturn $arr_object_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $args [ 'data' => [], 'filter' => FilterBase, 'table_name' => '', 'key_auto_increment' => '' ]\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.9\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $args ): int {\r\n-\t\t$data               = $args['data'] ?? [];\r\n-\t\t$filter             = $args['filter'] ?? null;\r\n-\t\t$table_name         = $args['table_name'] ?? '';\r\n-\t\t$key_auto_increment = $args['key_auto_increment'] ?? '';\r\n-\t\t$key_auto_increment = sanitize_key( $key_auto_increment );\r\n-\r\n-\t\tif ( empty( $data ) || ! is_array( $data ) ) {\r\n-\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*if ( ! $filter instanceof FilterBase ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->all_fields ) ) {\r\n-\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $table_name ) ) {\r\n-\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $key_auto_increment ) || ! is_string( $key_auto_increment ) ) {\r\n-\t\t\tthrow new Exception( __( 'Key auto increment must be a string!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F unset key is auto increment.\r\n-\t\tunset( $data[ $key_auto_increment ] );\r\n-\r\n-\t\t$this->wpdb->insert( $table_name, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_data( array $args ): bool {\r\n-\t\t$data       = $args['data'] ?? [];\r\n-\t\t$filter     = $args['filter'] ?? null;\r\n-\t\t$table_name = $args['table_name'] ?? '';\r\n-\t\t$where_key  = $args['where_key'] ?? '';\r\n-\t\t$where_key  = sanitize_key( $where_key );\r\n-\r\n-\t\t\u002F*if ( ! $filter instanceof FilterBase ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( empty( $filter->all_fields ) ) {\r\n-\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $data ) || ! is_array( $data ) ) {\r\n-\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $where_key ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid where key!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $table_name ) ) {\r\n-\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter->collection = $table_name;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Key `order` is reserved keyword in MySQL\r\n-\t\t\tif ( $col_name === 'order' ) {\r\n-\t\t\t\t$col_name = '`order`';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( \"AND $where_key = %d\", $data[ $where_key ] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\FilterBase;\n+use wpdb;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class DataBase\n+ *\n+ * @since 4.2.9.3\n+ * @version 1.0.0\n+ *\u002F\n+class DataBase {\n+\tprivate static $_instance;\n+\tpublic $wpdb, $tb_users;\n+\tpublic $tb_lp_courses;\n+\tpublic $tb_lp_user_items, $tb_lp_user_itemmeta;\n+\tpublic $tb_posts, $tb_postmeta, $tb_options;\n+\tpublic $tb_terms, $tb_term_relationships, $tb_term_taxonomy;\n+\tpublic $tb_lp_order_items, $tb_lp_order_itemmeta;\n+\tpublic $tb_lp_sections, $tb_lp_section_items;\n+\tpublic $tb_lp_quiz_questions;\n+\tpublic $tb_lp_user_item_results;\n+\tpublic $tb_lp_question_answers;\n+\tpublic $tb_lp_question_answermeta;\n+\tpublic $tb_lp_upgrade_db;\n+\tpublic $tb_lp_sessions;\n+\tpublic $tb_lp_files;\n+\tpublic $tb_thim_cache;\n+\tprivate $collate         = '';\n+\tpublic $max_index_length = '191';\n+\n+\tprotected function __construct() {\n+\t\t\u002F**\n+\t\t * @var wpdb $wpdb\n+\t\t *\u002F\n+\t\tglobal $wpdb;\n+\t\t$prefix = $wpdb->prefix;\n+\n+\t\t$this->wpdb                      = $wpdb;\n+\t\t$this->tb_users                  = $wpdb->users;\n+\t\t$this->tb_posts                  = $wpdb->posts;\n+\t\t$this->tb_postmeta               = $wpdb->postmeta;\n+\t\t$this->tb_options                = $wpdb->options;\n+\t\t$this->tb_terms                  = $wpdb->terms;\n+\t\t$this->tb_term_relationships     = $wpdb->term_relationships;\n+\t\t$this->tb_term_taxonomy          = $wpdb->term_taxonomy;\n+\t\t$this->tb_lp_courses             = $prefix . 'learnpress_courses';\n+\t\t$this->tb_lp_user_items          = $prefix . 'learnpress_user_items';\n+\t\t$this->tb_lp_user_itemmeta       = $prefix . 'learnpress_user_itemmeta';\n+\t\t$this->tb_lp_order_items         = $prefix . 'learnpress_order_items';\n+\t\t$this->tb_lp_order_itemmeta      = $prefix . 'learnpress_order_itemmeta';\n+\t\t$this->tb_lp_section_items       = $prefix . 'learnpress_section_items';\n+\t\t$this->tb_lp_sections            = $prefix . 'learnpress_sections';\n+\t\t$this->tb_lp_quiz_questions      = $prefix . 'learnpress_quiz_questions';\n+\t\t$this->tb_lp_user_item_results   = $prefix . 'learnpress_user_item_results';\n+\t\t$this->tb_lp_question_answers    = $prefix . 'learnpress_question_answers';\n+\t\t$this->tb_lp_question_answermeta = $prefix . 'learnpress_question_answermeta';\n+\t\t$this->tb_lp_upgrade_db          = $prefix . 'learnpress_upgrade_db';\n+\t\t$this->tb_lp_sessions            = $prefix . 'learnpress_sessions';\n+\t\t$this->tb_lp_files               = $prefix . 'learnpress_files';\n+\t\t$this->tb_thim_cache             = $prefix . 'thim_cache';\n+\t\t$this->wpdb->hide_errors();\n+\t\t$this->set_collate();\n+\t}\n+\n+\t\u002F**\n+\t * Get Instance\n+\t *\n+\t * @return DataBase\n+\t *\u002F\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\tpublic function set_collate() {\n+\t\t$collate = '';\n+\n+\t\tif ( $this->wpdb->has_cap( 'collation' ) ) {\n+\t\t\tif ( ! empty( $this->wpdb->charset ) ) {\n+\t\t\t\t$collate .= 'DEFAULT CHARACTER SET ' . $this->wpdb->charset;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $this->wpdb->collate ) ) {\n+\t\t\t\t$collate .= ' COLLATE ' . $this->wpdb->collate;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->collate = $collate;\n+\t}\n+\n+\tpublic function get_collate(): string {\n+\t\treturn $this->collate;\n+\t}\n+\n+\t\u002F**\n+\t * Check table exists.\n+\t *\n+\t * @param string $name_table\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_table_exists( string $name_table ) {\n+\t\treturn $this->wpdb->query( $this->wpdb->prepare( \"SHOW TABLES LIKE '%s'\", $name_table ) );\n+\t}\n+\n+\t\u002F**\n+\t * Clone table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function clone_table( string $name_table ): bool {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$table_bk = $name_table . '_bk';\n+\n+\t\t\u002F\u002F Drop table bk if exists.\n+\t\t$this->drop_table( $table_bk );\n+\n+\t\t\u002F\u002F Clone table\n+\t\t$this->wpdb->query( \"CREATE TABLE $table_bk LIKE $name_table\" );\n+\t\t$this->wpdb->query( \"INSERT INTO $table_bk SELECT * FROM $name_table\" );\n+\n+\t\t\u002F*dbDelta(\n+\t\t\t\"CREATE TABLE $table_bk LIKE $name_table;\n+\t\t\tINSERT INTO $table_bk SELECT * FROM $name_table;\"\n+\t\t);*\u002F\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check column table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_col_table( string $name_table = '', string $name_col = '' ) {\n+\t\t$query = $this->wpdb->prepare( \"SHOW COLUMNS FROM $name_table LIKE '%s'\", $name_col );\n+\n+\t\treturn $this->wpdb->query( $query );\n+\t}\n+\n+\t\u002F**\n+\t * Drop Column of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_col_table( string $name_table = '', string $name_col = '' ) {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$check_table = $this->check_col_table( $name_table, $name_col );\n+\n+\t\tif ( $check_table ) {\n+\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table DROP COLUMN $name_col\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Add Column of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param string $name_col .\n+\t * @param string $type .\n+\t * @param string $after_col .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function add_col_table( string $name_table, string $name_col, string $type, string $after_col = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$query_add = '';\n+\n+\t\t$col_exists = $this->check_col_table( $name_table, $name_col );\n+\n+\t\tif ( ! empty( $after_col ) ) {\n+\t\t\t$query_add .= \"AFTER $after_col\";\n+\t\t}\n+\n+\t\tif ( ! $col_exists ) {\n+\t\t\t$execute = $this->wpdb->query( \"ALTER TABLE $name_table ADD COLUMN $name_col $type $query_add\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Drop Index of Table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_indexs_table( string $name_table ) {\n+\t\t$show_index = \"SHOW INDEX FROM $name_table\";\n+\t\t$indexs     = $this->wpdb->get_results( $show_index );\n+\n+\t\tforeach ( $indexs as $index ) {\n+\t\t\tif ( 'PRIMARY' === $index->Key_name || '1' !== $index->Seq_in_index ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$query = \"ALTER TABLE $name_table DROP INDEX $index->Key_name\";\n+\n+\t\t\t$this->wpdb->query( $query );\n+\t\t\t$this->check_execute_has_error();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add Index of Table\n+\t *\n+\t * @param string $name_table .\n+\t * @param array $indexs .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function add_indexs_table( string $name_table, array $indexs ) {\n+\t\t$add_index    = '';\n+\t\t$count_indexs = count( $indexs ) - 1;\n+\n+\t\t\u002F\u002F Drop indexs .\n+\t\t$this->drop_indexs_table( $name_table );\n+\n+\t\tforeach ( $indexs as $index ) {\n+\t\t\tif ( $count_indexs === array_search( $index, $indexs ) ) {\n+\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . ')';\n+\t\t\t} else {\n+\t\t\t\t$add_index .= ' ADD INDEX ' . $index . ' (' . $index . '),';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"ALTER TABLE $name_table\n+\t\t\t$add_index\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Drop table\n+\t *\n+\t * @param string $name_table .\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function drop_table( string $name_table = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t\u002F\u002F Check table exists.\n+\t\t$tb_exists = $this->check_table_exists( $name_table );\n+\t\tif ( $tb_exists ) {\n+\t\t\t$execute = $this->wpdb->query( \"DROP TABLE $name_table\" );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\treturn $execute;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get list columns name of table\n+\t *\n+\t * @param string $name_table\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.1.6\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function get_cols_of_table( string $name_table ): array {\n+\t\t$query = \"SHOW COLUMNS FROM $name_table\";\n+\n+\t\t$result = $this->wpdb->get_col( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Create table learnpress_user_item_results\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_tb_lp_user_item_results() {\n+\t\t$collate = $this->get_collate();\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tCREATE TABLE IF NOT EXISTS $this->tb_lp_user_item_results(\n+\t\t\t\tid bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n+\t\t\t\tuser_item_id bigint(20) unsigned NOT NULL,\n+\t\t\t\tresult longtext,\n+\t\t\t\tPRIMARY KEY (id),\n+\t\t\t\tKEY user_item_id (user_item_id)\n+\t\t\t) $collate\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Create table learnpress_upgrade_db\n+\t *\n+\t * @return bool|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_tb_lp_upgrade_db() {\n+\t\t$collate = $this->get_collate();\n+\n+\t\t$execute = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tCREATE TABLE IF NOT EXISTS {$this->tb_lp_upgrade_db}(\n+\t\t\t\tstep varchar(50) PRIMARY KEY UNIQUE,\n+\t\t\t\tstatus varchar(10),\n+\t\t\t\tKEY status (status)\n+\t\t\t) $collate\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $execute;\n+\t}\n+\n+\t\u002F**\n+\t * Set step completed.\n+\t *\n+\t * @param string $step .\n+\t * @param string $status .\n+\t *\n+\t * @return int|bool\n+\t *\u002F\n+\tpublic function set_step_complete( string $step, string $status ) {\n+\t\tif ( ! current_user_can( 'administrator' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $this->wpdb->insert(\n+\t\t\t$this->tb_lp_upgrade_db,\n+\t\t\tarray(\n+\t\t\t\t'step'   => $step,\n+\t\t\t\t'status' => $status,\n+\t\t\t),\n+\t\t\tarray( '%s', '%s' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get steps completed.\n+\t *\n+\t * @return array|object|null\n+\t *\u002F\n+\tpublic function get_steps_completed() {\n+\t\treturn $this->wpdb->get_results( \"SELECT step, status FROM {$this->tb_lp_upgrade_db}\", OBJECT_K );\n+\t}\n+\n+\t\u002F**\n+\t * Check execute current has any errors.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_execute_has_error() {\n+\t\tif ( $this->wpdb->last_error ) {\n+\t\t\tthrow new Exception( $this->wpdb->last_error );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Important: Reason need set again indexes for table options of WP\n+\t * because if want change value of \"option_name\" will error \"database error Duplicate entry\"\n+\t * So before set must drop and add when done all\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.0.3\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function create_indexes_tb_options() {\n+\t\t$this->drop_indexs_table( $this->tb_options );\n+\t\t$result = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tALTER TABLE $this->tb_options\n+\t\t\tADD UNIQUE option_name (option_name),\n+\t\t\tADD INDEX autoload (autoload)\n+\t\t\t\"\n+\t\t);\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Rename table\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.0.3\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function rename_table( string $name_table = '', string $new_name = '' ) {\n+\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\tthrow new Exception( 'You don\\'t have permission' );\n+\t\t}\n+\n+\t\t$tb_exists = $this->check_table_exists( $name_table );\n+\n+\t\tif ( ! $tb_exists ) {\n+\t\t\tthrow new Exception( 'Table not exists' );\n+\t\t}\n+\n+\t\t$result = $this->wpdb->query(\n+\t\t\t\"\n+\t\t\tALTER TABLE $name_table\n+\t\t\tRENAME $new_name\n+\t\t\t\"\n+\t\t);\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Check key postmeta exist on Database\n+\t *\n+\t * @param int $post_id\n+\t * @param string $key\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function check_key_postmeta_exists( int $post_id = 0, string $key = '' ) {\n+\t\treturn $this->wpdb->query(\n+\t\t\t$this->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT meta_id FROM $this->tb_postmeta\n+\t\t\t\tWHERE meta_key = %s\n+\t\t\t\tAND post_id = %d\n+\t\t\t\t\",\n+\t\t\t\t$key,\n+\t\t\t\t$post_id\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get total pages\n+\t *\n+\t * @param int $limit\n+\t * @param int $total_rows\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function get_total_pages( int $limit = 0, int $total_rows = 0 ): int {\n+\t\tif ( $limit == 0 ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$total_pages = (int) ceil( $total_rows \u002F $limit );\n+\n+\t\treturn (int) $total_pages;\n+\t}\n+\n+\t\u002F**\n+\t * Get query string single row\n+\t *\n+\t * @param FilterBase $filter\n+\t *\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_query_single_row( &$filter ) {\n+\t\t$filter->limit               = 1;\n+\t\t$filter->return_string_query = true;\n+\t\t$filter->run_query_count     = false;\n+\t}\n+\n+\t\u002F**\n+\t * Get result query\n+\t *\n+\t * @param FilterBase $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array|object|null|int|string\n+\t * @throws Exception\n+\t * @author tungnx\n+\t * @version 1.0.2\n+\t * @since 4.1.6\n+\t *\u002F\n+\tpublic function execute( $filter, int &$total_rows = 0 ) {\n+\t\t$result = null;\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\n+\t\t\u002F\u002F Fields select\n+\t\t$FIELDS = '*';\n+\t\tif ( ! empty( $filter->only_fields ) ) {\n+\t\t\t$FIELDS = implode( ',', array_unique( $filter->only_fields ) );\n+\t\t} elseif ( ! empty( $filter->fields ) ) {\n+\t\t\t\u002F\u002F exclude more fields\n+\t\t\tif ( ! empty( $filter->exclude_fields ) ) {\n+\t\t\t\tforeach ( $filter->exclude_fields as $field ) {\n+\t\t\t\t\t$index_field = array_search( $field, $filter->fields );\n+\t\t\t\t\tif ( $index_field ) {\n+\t\t\t\t\t\tunset( $filter->fields[ $index_field ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $filter->fields as $key => $field ) {\n+\t\t\t\tif ( $field === 'order' ) {\n+\t\t\t\t\t\u002F\u002F Replace order with `order` to avoid conflict with SQL reserved word.\n+\t\t\t\t\t$filter->fields[ $key ] = '`order`';\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$FIELDS = implode( ',', array_unique( $filter->fields ) );\n+\t\t}\n+\t\t$FIELDS = apply_filters( 'lp\u002Fquery\u002Ffields', $FIELDS, $filter );\n+\n+\t\t$INNER_JOIN = array();\n+\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\n+\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Finner_join', $INNER_JOIN, $filter );\n+\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\n+\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t\u002F\u002F Group by\n+\t\t$GROUP_BY = '';\n+\t\tif ( $filter->group_by ) {\n+\t\t\t$GROUP_BY .= 'GROUP BY ' . $filter->group_by;\n+\t\t\t$GROUP_BY  = apply_filters( 'lp\u002Fquery\u002Fgroup_by', $GROUP_BY, $filter );\n+\t\t}\n+\n+\t\t\u002F\u002F Order by\n+\t\t$ORDER_BY = '';\n+\t\tif ( $filter->order_by ) {\n+\t\t\t$filter->order = strtoupper( $filter->order );\n+\t\t\tif ( ! in_array( $filter->order, [ 'DESC', 'ASC' ] ) ) {\n+\t\t\t\t$filter->order = 'DESC';\n+\t\t\t}\n+\n+\t\t\t$ORDER_BY .= 'ORDER BY ' . $filter->order_by . ' ' . $filter->order . ' ';\n+\t\t\t$ORDER_BY  = apply_filters( 'lp\u002Fquery\u002Forder_by', $ORDER_BY, $filter );\n+\t\t}\n+\n+\t\t\u002F\u002F Limit\n+\t\t$LIMIT = '';\n+\t\tif ( $filter->limit != - 1 ) {\n+\t\t\t$filter->limit = absint( $filter->limit );\n+\t\t\t\u002F*if ( $filter->limit > $filter->max_limit ) {\n+\t\t\t\t$filter->limit = $filter->max_limit;\n+\t\t\t}*\u002F\n+\t\t\t$offset = $filter->limit * ( $filter->page - 1 );\n+\t\t\t$LIMIT  = $this->wpdb->prepare( 'LIMIT %d, %d', $offset, $filter->limit );\n+\t\t}\n+\n+\t\t\u002F\u002F For nest query\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\t$LIMIT = '';\n+\t\t}\n+\n+\t\t\u002F\u002F From table or group select\n+\t\t$COLLECTION = '';\n+\t\tif ( ! empty( $filter->collection ) ) {\n+\t\t\t$COLLECTION = $filter->collection;\n+\t\t}\n+\n+\t\t\u002F\u002F Alias table\n+\t\t$ALIAS_COLLECTION = 'X';\n+\t\tif ( ! empty( $filter->collection_alias ) ) {\n+\t\t\t$ALIAS_COLLECTION = $filter->collection_alias;\n+\t\t}\n+\n+\t\t\u002F\u002F Query\n+\t\t$query = \"SELECT $FIELDS FROM $COLLECTION AS $ALIAS_COLLECTION\n+\t\t$INNER_JOIN\n+\t\t$WHERE\n+\t\t$GROUP_BY\n+\t\t$ORDER_BY\n+\t\t$LIMIT\n+\t\t\";\n+\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\treturn $query;\n+\t\t} elseif ( ! empty( $filter->union ) ) {\n+\t\t\t$query  = implode( ' UNION ', array_unique( $filter->union ) );\n+\t\t\t$query .= $GROUP_BY;\n+\t\t\t$query .= $ORDER_BY;\n+\t\t\t$query .= $LIMIT;\n+\t\t}\n+\n+\t\tif ( ! $filter->query_count ) {\n+\t\t\t\u002F\u002F Debug string query\n+\t\t\tif ( $filter->debug_string_query ) {\n+\t\t\t\treturn $query;\n+\t\t\t}\n+\n+\t\t\t$result = $this->wpdb->get_results( $query );\n+\t\t}\n+\n+\t\t\u002F\u002F Query total rows\n+\t\tif ( $filter->run_query_count ) {\n+\t\t\t$query       = str_replace( array( $LIMIT, $ORDER_BY ), '', $query );\n+\t\t\t$query_total = \"SELECT COUNT($filter->field_count) FROM ($query) AS $ALIAS_COLLECTION\";\n+\t\t\t$total_rows  = (int) $this->wpdb->get_var( $query_total );\n+\n+\t\t\t$this->check_execute_has_error();\n+\n+\t\t\tif ( $filter->query_count ) {\n+\t\t\t\t\u002F\u002F Debug string query\n+\t\t\t\tif ( $filter->debug_string_query ) {\n+\t\t\t\t\treturn $query_total;\n+\t\t\t\t}\n+\n+\t\t\t\treturn $total_rows;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Query update\n+\t *\n+\t * @param FilterBase $filter\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_execute( $filter ) {\n+\n+\t\t$COLLECTION = $filter->collection;\n+\n+\t\t\u002F\u002F SET value\n+\t\t$SET = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fset', $filter->set, $filter );\n+\t\t$SET = implode( ',', array_unique( $SET ) );\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fupdate\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t$query = \"\n+\t\t\tUPDATE $COLLECTION\n+\t\t\tSET $SET\n+\t\t\t$WHERE\n+\t\t\";\n+\n+\t\t$result = $this->wpdb->query( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Query delete\n+\t *\n+\t * @param FilterBase $filter\n+\t * @param string $table\n+\t *\n+\t * @return bool|int|\\mysqli_result|string|null\n+\t * @throws Exception\n+\t * @since 4.1.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function delete_execute( $filter, string $table = '' ) {\n+\t\t$COLLECTION = $filter->collection;\n+\n+\t\t\u002F\u002F Where\n+\t\t$WHERE = array( 'WHERE 1=1' );\n+\t\t$WHERE = array_merge( $WHERE, $filter->where );\n+\t\t$WHERE = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Fwhere', $WHERE, $filter );\n+\t\t$WHERE = implode( ' ', array_unique( $WHERE ) );\n+\n+\t\t\u002F\u002F Join\n+\t\t$INNER_JOIN = array();\n+\t\t$INNER_JOIN = array_merge( $INNER_JOIN, $filter->join );\n+\t\t$INNER_JOIN = apply_filters( 'lp\u002Fquery\u002Fdelete\u002Finner_join', $INNER_JOIN, $filter );\n+\t\t$INNER_JOIN = implode( ' ', array_unique( $INNER_JOIN ) );\n+\n+\t\t$query = \"\n+\t\t\tDELETE $table FROM $COLLECTION\n+\t\t\t$INNER_JOIN\n+\t\t\t$WHERE\n+\t\t\";\n+\n+\t\tif ( $filter->return_string_query ) {\n+\t\t\treturn $query;\n+\t\t}\n+\n+\t\t$result = $this->wpdb->query( $query );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get values of list object by key\n+\t *\n+\t * @param array $arr_object\n+\t * @param string $key\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_values_by_key( array $arr_object, string $key = 'ID' ): array {\n+\t\t$arr_object_ids = array();\n+\t\tforeach ( $arr_object as $object ) {\n+\t\t\t$arr_object_ids[] = $object->{$key};\n+\t\t}\n+\n+\t\treturn $arr_object_ids;\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $args [ 'data' => [], 'filter' => FilterBase, 'table_name' => '', 'key_auto_increment' => '' ]\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.9\n+\t *\u002F\n+\tpublic function insert_data( array $args ): int {\n+\t\t$data               = $args['data'] ?? [];\n+\t\t$filter             = $args['filter'] ?? null;\n+\t\t$table_name         = $args['table_name'] ?? '';\n+\t\t$key_auto_increment = $args['key_auto_increment'] ?? '';\n+\t\t$key_auto_increment = sanitize_key( $key_auto_increment );\n+\n+\t\tif ( empty( $data ) || ! is_array( $data ) ) {\n+\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t\u002F*if ( ! $filter instanceof FilterBase ) {\n+\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->all_fields ) ) {\n+\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $table_name ) ) {\n+\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $key_auto_increment ) || ! is_string( $key_auto_increment ) ) {\n+\t\t\tthrow new Exception( __( 'Key auto increment must be a string!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F unset key is auto increment.\n+\t\tunset( $data[ $key_auto_increment ] );\n+\n+\t\t$this->wpdb->insert( $table_name, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_data( array $args ): bool {\n+\t\t$data       = $args['data'] ?? [];\n+\t\t$filter     = $args['filter'] ?? null;\n+\t\t$table_name = $args['table_name'] ?? '';\n+\t\t$where_key  = $args['where_key'] ?? '';\n+\t\t$where_key  = sanitize_key( $where_key );\n+\n+\t\t\u002F*if ( ! $filter instanceof FilterBase ) {\n+\t\t\tthrow new Exception( __( 'Invalid filter!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}*\u002F\n+\n+\t\tif ( empty( $filter->all_fields ) ) {\n+\t\t\tthrow new Exception( __( 'Filter must have property all_fields!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $data ) || ! is_array( $data ) ) {\n+\t\t\tthrow new Exception( __( 'Data must be an array!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $where_key ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid where key!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\tif ( empty( $table_name ) ) {\n+\t\t\tthrow new Exception( __( 'Table name is required!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter->collection = $table_name;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Key `order` is reserved keyword in MySQL\n+\t\t\tif ( $col_name === 'order' ) {\n+\t\t\t\t$col_name = '`order`';\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( \"AND $where_key = %d\", $data[ $where_key ] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FOrder\u002FLPOrderItemsDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FOrder\u002FLPOrderItemsDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FOrder\u002FLPOrderItemsDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FOrder\u002FLPOrderItemsDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases\\Order;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Filters\\Order\\OrderItemsFilter;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LPOrderItemsDB\r\n- *\r\n- * @author tungnx\r\n- * @since 4.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LPOrderItemsDB extends DataBase {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get order items by filter\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_items( OrderItemsFilter $filter, int &$total_rows = 0 ) {\r\n-\t\t$default_fields = $filter->all_fields;\r\n-\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_order_items;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'oi';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\tforeach ( $filter->fields as $k => $field ) {\r\n-\t\t\t$filter->fields[ $k ] = \"$ca.$field\";\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->order_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.order_item_id = %d\", $filter->order_item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->order_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.order_id = %d\", $filter->order_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.item_id = %d\", $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->item_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.item_type = %s\", $filter->item_type );\r\n-\t\t}\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases\\Order;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Filters\\Order\\OrderItemsFilter;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LPOrderItemsDB\n+ *\n+ * @author tungnx\n+ * @since 4.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class LPOrderItemsDB extends DataBase {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get order items by filter\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_items( OrderItemsFilter $filter, int &$total_rows = 0 ) {\n+\t\t$default_fields = $filter->all_fields;\n+\t\t$filter->fields = array_merge( $default_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_order_items;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'oi';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\tforeach ( $filter->fields as $k => $field ) {\n+\t\t\t$filter->fields[ $k ] = \"$ca.$field\";\n+\t\t}\n+\n+\t\tif ( isset( $filter->order_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.order_item_id = %d\", $filter->order_item_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->order_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.order_id = %d\", $filter->order_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.item_id = %d\", $filter->item_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->item_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.item_type = %s\", $filter->item_type );\n+\t\t}\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FPostDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FPostDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FPostDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FPostDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LP_Helper;\r\n-\r\n-\u002F**\r\n- * Class PostDB\r\n- *\r\n- * @since 4.2.9.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class PostDB extends DataBase {\r\n-\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get posts by filter\r\n-\t *\r\n-\t * @param PostFilter|\\LP_Post_Type_Filter $filter\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_posts( $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_posts;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'p';\r\n-\t\t}\r\n-\r\n-\t\t$ca = $filter->collection_alias;\r\n-\r\n-\t\t\u002F\u002F Where\r\n-\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_type = %s\", $filter->post_type );\r\n-\r\n-\t\t\u002F\u002F Find ID\r\n-\t\tif ( isset( $filter->ID ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Status\r\n-\t\t$filter->post_status = (array) $filter->post_status;\r\n-\t\tif ( ! empty( $filter->post_status ) ) {\r\n-\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Term ids\r\n-\t\tif ( ! empty( $filter->term_ids ) ) {\r\n-\t\t\t\u002F\u002F Sanitize term ids\r\n-\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\r\n-\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\r\n-\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\r\n-\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\r\n-\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post ids\r\n-\t\tif ( ! empty( $filter->post_ids ) ) {\r\n-\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\r\n-\t\t\t$post_ids_format = join( ',', $post_ids );\r\n-\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Title\r\n-\t\tif ( $filter->post_title ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Name(slug)\r\n-\t\tif ( $filter->post_name ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\tif ( isset( $filter->post_author ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Authors\r\n-\t\tif ( ! empty( $filter->post_authors ) ) {\r\n-\t\t\t$post_authors        = array_map( 'absint', $filter->post_authors );\r\n-\t\t\t$post_authors_format = join( ',', $post_authors );\r\n-\t\t\t$filter->where[]     = \"AND $ca.post_author IN ($post_authors_format)\";\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fpost\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\PostFilter;\n+use LP_Helper;\n+\n+\u002F**\n+ * Class PostDB\n+ *\n+ * @since 4.2.9.3\n+ * @version 1.0.1\n+ *\u002F\n+class PostDB extends DataBase {\n+\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get posts by filter\n+\t *\n+\t * @param PostFilter|\\LP_Post_Type_Filter $filter\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.2.9.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_posts( $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_posts;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'p';\n+\t\t}\n+\n+\t\t$ca = $filter->collection_alias;\n+\n+\t\t\u002F\u002F Where\n+\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_type = %s\", $filter->post_type );\n+\n+\t\t\u002F\u002F Find ID\n+\t\tif ( isset( $filter->ID ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.ID = %d\", $filter->ID );\n+\t\t}\n+\n+\t\t\u002F\u002F Status\n+\t\t$filter->post_status = (array) $filter->post_status;\n+\t\tif ( ! empty( $filter->post_status ) ) {\n+\t\t\t$post_status_format = LP_Helper::db_format_array( $filter->post_status, '%s' );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( \"AND $ca.post_status IN (\" . $post_status_format . ')', $filter->post_status );\n+\t\t}\n+\n+\t\t\u002F\u002F Term ids\n+\t\tif ( ! empty( $filter->term_ids ) ) {\n+\t\t\t\u002F\u002F Sanitize term ids\n+\t\t\t$filter->term_ids = array_map( 'absint', $filter->term_ids );\n+\t\t\t$term_ids_format  = join( ',', $filter->term_ids );\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_relationships AS r_term_p ON $ca.ID = r_term_p.object_id\";\n+\t\t\t$filter->join[]   = \"INNER JOIN $this->tb_term_taxonomy AS tx_p ON r_term_p.term_taxonomy_id = tx_p.term_taxonomy_id\";\n+\t\t\t$filter->where[]  = \"AND r_term_p.term_taxonomy_id IN ($term_ids_format)\";\n+\t\t\t$filter->where[]  = $this->wpdb->prepare( 'AND tx_p.taxonomy = %s', $filter->taxonomy );\n+\t\t}\n+\n+\t\t\u002F\u002F Post ids\n+\t\tif ( ! empty( $filter->post_ids ) ) {\n+\t\t\t$post_ids        = array_map( 'absint', $filter->post_ids );\n+\t\t\t$post_ids_format = join( ',', $post_ids );\n+\t\t\t$filter->where[] = \"AND $ca.ID IN ($post_ids_format)\";\n+\t\t}\n+\n+\t\t\u002F\u002F Title\n+\t\tif ( $filter->post_title ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_title LIKE %s\", '%' . $filter->post_title . '%' );\n+\t\t}\n+\n+\t\t\u002F\u002F Name(slug)\n+\t\tif ( $filter->post_name ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_name = %s\", $filter->post_name );\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\tif ( isset( $filter->post_author ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND $ca.post_author = %d\", $filter->post_author );\n+\t\t}\n+\n+\t\t\u002F\u002F Authors\n+\t\tif ( ! empty( $filter->post_authors ) ) {\n+\t\t\t$post_authors        = array_map( 'absint', $filter->post_authors );\n+\t\t\t$post_authors_format = join( ',', $post_authors );\n+\t\t\t$filter->where[]     = \"AND $ca.post_author IN ($post_authors_format)\";\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fpost\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FQuestionAnswersDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FQuestionAnswersDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FQuestionAnswersDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FQuestionAnswersDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\QuestionAnswersFilter;\r\n-use LP_Database;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class QuestionAnswersDB\r\n- *\r\n- * @instead of LP_Question_Answers_DB\r\n- * @since 4.2.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class QuestionAnswersDB extends DataBase {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question answers\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_question_answers( QuestionAnswersFilter $filter, &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_question_answers;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'qa';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By question answer id\r\n-\t\tif ( ! empty( $filter->question_answer_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id = %d\", $filter->question_answer_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By question id\r\n-\t\tif ( ! empty( $filter->question_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By title\r\n-\t\tif ( ! empty( $filter->title ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.title LIKE %s\", '%' . $this->wpdb->esc_like( $filter->title ) . '%' );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get last answer number order on question.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_last_number_order( int $question_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT MAX(`order`)\r\n-\t\t\tFROM $this->tb_lp_question_answers\r\n-\t\t\tWHERE question_id = %d\",\r\n-\t\t\t$question_id\r\n-\t\t);\r\n-\r\n-\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $number_order;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\QuestionAnswersFilter;\n+use LP_Database;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class QuestionAnswersDB\n+ *\n+ * @instead of LP_Question_Answers_DB\n+ * @since 4.2.9\n+ * @version 1.0.1\n+ *\u002F\n+class QuestionAnswersDB extends DataBase {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get question answers\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_question_answers( QuestionAnswersFilter $filter, &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_question_answers;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'qa';\n+\t\t}\n+\n+\t\t\u002F\u002F By question answer id\n+\t\tif ( ! empty( $filter->question_answer_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_answer_id = %d\", $filter->question_answer_id );\n+\t\t}\n+\n+\t\t\u002F\u002F By question id\n+\t\tif ( ! empty( $filter->question_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\n+\t\t}\n+\n+\t\t\u002F\u002F By title\n+\t\tif ( ! empty( $filter->title ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.title LIKE %s\", '%' . $this->wpdb->esc_like( $filter->title ) . '%' );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get last answer number order on question.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_last_number_order( int $question_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT MAX(`order`)\n+\t\t\tFROM $this->tb_lp_question_answers\n+\t\t\tWHERE question_id = %d\",\n+\t\t\t$question_id\n+\t\t);\n+\n+\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $number_order;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FQuizQuestionsDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FQuizQuestionsDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FQuizQuestionsDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FQuizQuestionsDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,188 +1,188 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\QuizQuestionsFilter;\r\n-use LP_Database;\r\n-use LP_Helper;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-\u002F**\r\n- * Class QuizQuestionsDB\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class QuizQuestionsDB extends DataBase {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_quiz_questions( QuizQuestionsFilter $filter, &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_quiz_questions;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'qq';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By quiz id\r\n-\t\tif ( ! empty( $filter->quiz_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id = %d\", $filter->quiz_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F By question id\r\n-\t\tif ( ! empty( $filter->question_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Question ids\r\n-\t\tif ( ! empty( $filter->question_ids ) ) {\r\n-\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids );\r\n-\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Quiz ids\r\n-\t\tif ( ! empty( $filter->quiz_ids ) ) {\r\n-\t\t\t$quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id IN (\" . $quiz_ids_format . ')', $filter->quiz_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get last item number order on section\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_last_number_order( int $quiz_id = 0 ): int {\r\n-\t\t$query = $this->wpdb->prepare(\r\n-\t\t\t\"SELECT MAX(question_order)\r\n-\t\t\tFROM $this->tb_lp_quiz_questions\r\n-\t\t\tWHERE quiz_id = %d\",\r\n-\t\t\t$quiz_id\r\n-\t\t);\r\n-\r\n-\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $number_order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.9\r\n-\t *\u002F\r\n-\tpublic function insert_data( array $data ): int {\r\n-\t\t$filter = new QuizQuestionsFilter();\r\n-\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tunset( $data[ $col_name ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F quiz_question_id is auto increment.\r\n-\t\tunset( $data['quiz_question_id'] );\r\n-\r\n-\t\t$this->wpdb->insert( $this->tb_lp_quiz_questions, $data );\r\n-\r\n-\t\t$this->check_execute_has_error();\r\n-\r\n-\t\treturn $this->wpdb->insert_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_data( array $data ): bool {\r\n-\t\tif ( empty( $data['quiz_question_id'] ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid quiz_question_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\r\n-\t\t}\r\n-\r\n-\t\t$filter             = new QuizQuestionsFilter();\r\n-\t\t$filter->collection = $this->tb_lp_quiz_questions;\r\n-\t\tforeach ( $data as $col_name => $value ) {\r\n-\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_null( $value ) ) {\r\n-\t\t\t\t$filter->set[] = $col_name . ' = null';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND quiz_question_id = %d', $data['quiz_question_id'] );\r\n-\t\t$this->update_execute( $filter );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update questions position\r\n-\t * Update question_order of each item in quiz.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_question_position( array $question_ids, $quiz_id ) {\r\n-\t\t$filter             = new QuizQuestionsFilter();\r\n-\t\t$filter->collection = $this->tb_lp_quiz_questions;\r\n-\t\t$SET_SQL            = 'question_order = CASE';\r\n-\r\n-\t\tforeach ( $question_ids as $position => $question_id ) {\r\n-\t\t\t++$position;\r\n-\t\t\t$question_id = absint( $question_id );\r\n-\t\t\tif ( empty( $question_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN question_id = %d THEN %d', $question_id, $position );\r\n-\t\t}\r\n-\r\n-\t\t$SET_SQL        .= ' ELSE question_order END';\r\n-\t\t$filter->set[]   = $SET_SQL;\r\n-\t\t$filter->where[] = $this->wpdb->prepare( 'AND quiz_id = %d', $quiz_id );\r\n-\r\n-\t\t$this->update_execute( $filter );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\QuizQuestionsFilter;\n+use LP_Database;\n+use LP_Helper;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+\u002F**\n+ * Class QuizQuestionsDB\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.1\n+ *\u002F\n+class QuizQuestionsDB extends DataBase {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_quiz_questions( QuizQuestionsFilter $filter, &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_quiz_questions;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'qq';\n+\t\t}\n+\n+\t\t\u002F\u002F By quiz id\n+\t\tif ( ! empty( $filter->quiz_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id = %d\", $filter->quiz_id );\n+\t\t}\n+\n+\t\t\u002F\u002F By question id\n+\t\tif ( ! empty( $filter->question_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id = %d\", $filter->question_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Question ids\n+\t\tif ( ! empty( $filter->question_ids ) ) {\n+\t\t\t$question_ids_format = LP_Helper::db_format_array( $filter->question_ids );\n+\t\t\t$filter->where[]     = $this->wpdb->prepare( \"AND {$filter->collection_alias}.question_id IN (\" . $question_ids_format . ')', $filter->question_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Quiz ids\n+\t\tif ( ! empty( $filter->quiz_ids ) ) {\n+\t\t\t$quiz_ids_format = LP_Helper::db_format_array( $filter->question_ids );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( \"AND {$filter->collection_alias}.quiz_id IN (\" . $quiz_ids_format . ')', $filter->quiz_ids );\n+\t\t}\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get last item number order on section\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_last_number_order( int $quiz_id = 0 ): int {\n+\t\t$query = $this->wpdb->prepare(\n+\t\t\t\"SELECT MAX(question_order)\n+\t\t\tFROM $this->tb_lp_quiz_questions\n+\t\t\tWHERE quiz_id = %d\",\n+\t\t\t$quiz_id\n+\t\t);\n+\n+\t\t$number_order = intval( $this->wpdb->get_var( $query ) );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $number_order;\n+\t}\n+\n+\t\u002F**\n+\t * Insert data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.9\n+\t *\u002F\n+\tpublic function insert_data( array $data ): int {\n+\t\t$filter = new QuizQuestionsFilter();\n+\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tunset( $data[ $col_name ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F quiz_question_id is auto increment.\n+\t\tunset( $data['quiz_question_id'] );\n+\n+\t\t$this->wpdb->insert( $this->tb_lp_quiz_questions, $data );\n+\n+\t\t$this->check_execute_has_error();\n+\n+\t\treturn $this->wpdb->insert_id;\n+\t}\n+\n+\t\u002F**\n+\t * Update data\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_data( array $data ): bool {\n+\t\tif ( empty( $data['quiz_question_id'] ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid quiz_question_id!', 'learnpress' ) . ' | ' . __FUNCTION__ );\n+\t\t}\n+\n+\t\t$filter             = new QuizQuestionsFilter();\n+\t\t$filter->collection = $this->tb_lp_quiz_questions;\n+\t\tforeach ( $data as $col_name => $value ) {\n+\t\t\tif ( ! in_array( $col_name, $filter->all_fields ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( is_null( $value ) ) {\n+\t\t\t\t$filter->set[] = $col_name . ' = null';\n+\t\t\t} else {\n+\t\t\t\t$filter->set[] = $this->wpdb->prepare( $col_name . ' = %s', $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND quiz_question_id = %d', $data['quiz_question_id'] );\n+\t\t$this->update_execute( $filter );\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Update questions position\n+\t * Update question_order of each item in quiz.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_question_position( array $question_ids, $quiz_id ) {\n+\t\t$filter             = new QuizQuestionsFilter();\n+\t\t$filter->collection = $this->tb_lp_quiz_questions;\n+\t\t$SET_SQL            = 'question_order = CASE';\n+\n+\t\tforeach ( $question_ids as $position => $question_id ) {\n+\t\t\t++$position;\n+\t\t\t$question_id = absint( $question_id );\n+\t\t\tif ( empty( $question_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$SET_SQL .= $this->wpdb->prepare( ' WHEN question_id = %d THEN %d', $question_id, $position );\n+\t\t}\n+\n+\t\t$SET_SQL        .= ' ELSE question_order END';\n+\t\t$filter->set[]   = $SET_SQL;\n+\t\t$filter->where[] = $this->wpdb->prepare( 'AND quiz_id = %d', $quiz_id );\n+\n+\t\t$this->update_execute( $filter );\n+\t}\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases: UserDB.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FUserItemsDB.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FUserItemsDB.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FDatabases\u002FUserItemsDB.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FDatabases\u002FUserItemsDB.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,112 +1,112 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Databases;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LP_Helper;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class UserItemsDB\r\n- *\r\n- * @since 4.2.9.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class UserItemsDB extends DataBase {\r\n-\tprivate static $_instance;\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic static function getInstance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get users items\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t * @throws Exception\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function get_user_items( UserItemsFilter $filter, int &$total_rows = 0 ) {\r\n-\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\r\n-\r\n-\t\tif ( empty( $filter->collection ) ) {\r\n-\t\t\t$filter->collection = $this->tb_lp_user_items;\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $filter->collection_alias ) ) {\r\n-\t\t\t$filter->collection_alias = 'ui';\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->ref_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->ref_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_type = %s', $filter->ref_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->user_item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_item_id = %d', $filter->user_item_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get by user_item_ids\r\n-\t\tif ( ! empty( $filter->user_item_ids ) ) {\r\n-\t\t\t$user_item_ids_format = LP_Helper::db_format_array( $filter->user_item_ids );\r\n-\t\t\t$filter->where[]      = $this->wpdb->prepare( 'AND ui.user_item_id IN (' . $user_item_ids_format . ')', $filter->user_item_ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->user_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_id = %d', $filter->user_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->item_type ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_type = %s', $filter->item_type );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->item_ids ) ) {\r\n-\t\t\t$item_ids_format = LP_Helper::db_format_array( $filter->item_ids );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id IN (' . $item_ids_format . ')', $filter->item_ids );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->item_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id = %s', $filter->item_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->status ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status = %s', $filter->status );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->statues ) ) {\r\n-\t\t\t$statues_format  = LP_Helper::db_format_array( $filter->statues );\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status IN (' . $statues_format . ')', $filter->statues );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->graduation ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.graduation = %s', $filter->graduation );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $filter->graduations ) ) {\r\n-\t\t\t$graduations_format = LP_Helper::db_format_array( $filter->graduations );\r\n-\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND ui.graduation IN (' . $graduations_format . ')', $filter->graduations );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $filter->parent_id ) ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.parent_id = %s', $filter->parent_id );\r\n-\t\t}\r\n-\r\n-\t\t$filter = apply_filters( 'lp\u002Fuser_items\u002Fquery\u002Ffilter', $filter );\r\n-\r\n-\t\treturn $this->execute( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Databases;\n+\n+use Exception;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LP_Helper;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class UserItemsDB\n+ *\n+ * @since 4.2.9.3\n+ * @version 1.0.0\n+ *\u002F\n+class UserItemsDB extends DataBase {\n+\tprivate static $_instance;\n+\n+\tprotected function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic static function getInstance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+\n+\t\u002F**\n+\t * Get users items\n+\t *\n+\t * @return array|null|int|string\n+\t * @throws Exception\n+\t * @since 4.1.6.9\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function get_user_items( UserItemsFilter $filter, int &$total_rows = 0 ) {\n+\t\t$filter->fields = array_merge( $filter->all_fields, $filter->fields );\n+\n+\t\tif ( empty( $filter->collection ) ) {\n+\t\t\t$filter->collection = $this->tb_lp_user_items;\n+\t\t}\n+\n+\t\tif ( empty( $filter->collection_alias ) ) {\n+\t\t\t$filter->collection_alias = 'ui';\n+\t\t}\n+\n+\t\tif ( isset( $filter->ref_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_id = %d', $filter->ref_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->ref_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.ref_type = %s', $filter->ref_type );\n+\t\t}\n+\n+\t\tif ( isset( $filter->user_item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_item_id = %d', $filter->user_item_id );\n+\t\t}\n+\n+\t\t\u002F\u002F Get by user_item_ids\n+\t\tif ( ! empty( $filter->user_item_ids ) ) {\n+\t\t\t$user_item_ids_format = LP_Helper::db_format_array( $filter->user_item_ids );\n+\t\t\t$filter->where[]      = $this->wpdb->prepare( 'AND ui.user_item_id IN (' . $user_item_ids_format . ')', $filter->user_item_ids );\n+\t\t}\n+\n+\t\tif ( isset( $filter->user_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.user_id = %d', $filter->user_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->item_type ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_type = %s', $filter->item_type );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->item_ids ) ) {\n+\t\t\t$item_ids_format = LP_Helper::db_format_array( $filter->item_ids );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id IN (' . $item_ids_format . ')', $filter->item_ids );\n+\t\t}\n+\n+\t\tif ( isset( $filter->item_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.item_id = %s', $filter->item_id );\n+\t\t}\n+\n+\t\tif ( isset( $filter->status ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status = %s', $filter->status );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->statues ) ) {\n+\t\t\t$statues_format  = LP_Helper::db_format_array( $filter->statues );\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.status IN (' . $statues_format . ')', $filter->statues );\n+\t\t}\n+\n+\t\tif ( isset( $filter->graduation ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.graduation = %s', $filter->graduation );\n+\t\t}\n+\n+\t\tif ( ! empty( $filter->graduations ) ) {\n+\t\t\t$graduations_format = LP_Helper::db_format_array( $filter->graduations );\n+\t\t\t$filter->where[]    = $this->wpdb->prepare( 'AND ui.graduation IN (' . $graduations_format . ')', $filter->graduations );\n+\t\t}\n+\n+\t\tif ( isset( $filter->parent_id ) ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND ui.parent_id = %s', $filter->parent_id );\n+\t\t}\n+\n+\t\t$filter = apply_filters( 'lp\u002Fuser_items\u002Fquery\u002Ffilter', $filter );\n+\n+\t\treturn $this->execute( $filter, $total_rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-become-an-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,105 +1,105 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Become_An_Instructor\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @author tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Become_An_Instructor' ) ) {\r\n-\tclass LP_Email_Become_An_Instructor extends LP_Email {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Become_An_Instructor constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'become-an-instructor';\r\n-\t\t\t$this->title       = __( 'Request', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Become an instructor email.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '[{{site_title}}] Request to become an instructor', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Become an instructor', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor\u002Fvariables-support',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{request_email}}',\r\n-\t\t\t\t\t'{{request_phone}}',\r\n-\t\t\t\t\t'{{request_message}}',\r\n-\t\t\t\t\t'{{admin_user_manager}}',\r\n-\t\t\t\t\t'{{accept_url}}',\r\n-\t\t\t\t\t'{{deny_url}}',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check email enable option\r\n-\t\t * Check param valid: 4 params: bat_name, bat_email, bat_phone, bat_message\r\n-\t\t * Set values\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->enable ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( count( $params ) \u003C 1 ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->set_data_content( $params[0] ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t$this->set_receive( $this->_get_admin_email() );\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set data content\r\n-\t\t *\u002F\r\n-\t\tprotected function set_data_content( $params ): bool {\r\n-\t\t\t$bat_email   = $params['bat_email'] ?? '';\r\n-\t\t\t$bat_phone   = $params['bat_phone'] ?? '';\r\n-\t\t\t$bat_message = $params['bat_message'] ?? '';\r\n-\r\n-\t\t\t$user = get_user_by( 'email', $bat_email );\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->variables = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Ftype-become-an-instructor-admin\u002Fvariables-mapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{request_email}}'      => $bat_email,\r\n-\t\t\t\t\t'{{request_phone}}'      => $bat_phone,\r\n-\t\t\t\t\t'{{request_message}}'    => $bat_message,\r\n-\t\t\t\t\t'{{admin_user_manager}}' => admin_url( 'users.php?lp-action=pending-request' ),\r\n-\t\t\t\t\t'{{accept_url}}'         => admin_url( 'users.php?lp-action=accept-request&user_id=' . $user->ID ),\r\n-\t\t\t\t\t'{{deny_url}}'           => admin_url( 'users.php?lp-action=deny-request&user_id=' . $user->ID ),\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Become_An_Instructor();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Become_An_Instructor\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @author tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Become_An_Instructor' ) ) {\n+\tclass LP_Email_Become_An_Instructor extends LP_Email {\n+\t\t\u002F**\n+\t\t * LP_Email_Become_An_Instructor constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'become-an-instructor';\n+\t\t\t$this->title       = __( 'Request', 'learnpress' );\n+\t\t\t$this->description = __( 'Become an instructor email.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '[{{site_title}}] Request to become an instructor', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Become an instructor', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\n+\t\t\t$variable_on_email_support = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor\u002Fvariables-support',\n+\t\t\t\t[\n+\t\t\t\t\t'{{request_email}}',\n+\t\t\t\t\t'{{request_phone}}',\n+\t\t\t\t\t'{{request_message}}',\n+\t\t\t\t\t'{{admin_user_manager}}',\n+\t\t\t\t\t'{{accept_url}}',\n+\t\t\t\t\t'{{deny_url}}',\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check email enable option\n+\t\t * Check param valid: 4 params: bat_name, bat_email, bat_phone, bat_message\n+\t\t * Set values\n+\t\t *\n+\t\t * @param array $params\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->enable ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( count( $params ) \u003C 1 ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->set_data_content( $params[0] ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t$this->set_receive( $this->_get_admin_email() );\n+\t\t\t$this->send_email();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set data content\n+\t\t *\u002F\n+\t\tprotected function set_data_content( $params ): bool {\n+\t\t\t$bat_email   = $params['bat_email'] ?? '';\n+\t\t\t$bat_phone   = $params['bat_phone'] ?? '';\n+\t\t\t$bat_message = $params['bat_message'] ?? '';\n+\n+\t\t\t$user = get_user_by( 'email', $bat_email );\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$this->variables = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Ftype-become-an-instructor-admin\u002Fvariables-mapper',\n+\t\t\t\t[\n+\t\t\t\t\t'{{request_email}}'      => $bat_email,\n+\t\t\t\t\t'{{request_phone}}'      => $bat_phone,\n+\t\t\t\t\t'{{request_message}}'    => $bat_message,\n+\t\t\t\t\t'{{admin_user_manager}}' => admin_url( 'users.php?lp-action=pending-request' ),\n+\t\t\t\t\t'{{accept_url}}'         => admin_url( 'users.php?lp-action=accept-request&user_id=' . $user->ID ),\n+\t\t\t\t\t'{{deny_url}}'           => admin_url( 'users.php?lp-action=deny-request&user_id=' . $user->ID ),\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\n+\t\t\treturn true;\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Become_An_Instructor();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-cancelled-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Email_Cancelled_Order_Admin\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Cancelled_Order_Admin' ) ) {\r\n-\tclass LP_Email_Cancelled_Order_Admin extends LP_Email_Type_Order_Admin {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Cancelled_Order_Admin constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id              = 'cancelled-order-admin';\r\n-\t\t\t$this->title           = __( 'Admin', 'learnpress' );\r\n-\t\t\t$this->description     = __( 'Send an email to admin when the order has been canceled.', 'learnpress' );\r\n-\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been cancelled', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user order has been cancelled', 'learnpress' );\r\n-\t\t\t$this->recipient       = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Cancelled_Order_Admin();\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Email_Cancelled_Order_Admin\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Cancelled_Order_Admin' ) ) {\n+\tclass LP_Email_Cancelled_Order_Admin extends LP_Email_Type_Order_Admin {\n+\t\t\u002F**\n+\t\t * LP_Email_Cancelled_Order_Admin constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id              = 'cancelled-order-admin';\n+\t\t\t$this->title           = __( 'Admin', 'learnpress' );\n+\t\t\t$this->description     = __( 'Send an email to admin when the order has been canceled.', 'learnpress' );\n+\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been cancelled', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user order has been cancelled', 'learnpress' );\n+\t\t\t$this->recipient       = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Cancelled_Order_Admin();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-completed-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Completed_Order_Admin\r\n- *\r\n- * Send email to admin when an order has been completed.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.11\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Completed_Order_Admin' ) ) {\r\n-\tclass LP_Email_Completed_Order_Admin extends LP_Email_Type_Order_Admin {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Completed_Order_Admin constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id              = 'completed-order-admin';\r\n-\t\t\t$this->title           = __( 'Admin', 'learnpress' );\r\n-\t\t\t$this->description     = __( 'Send an email to admin when an order has been completed.', 'learnpress' );\r\n-\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been completed', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user order has been completed', 'learnpress' );\r\n-\t\t\t$this->recipients      = get_option( 'admin_email' );\r\n-\t\t\t$this->recipient       = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Completed_Order_Admin();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Completed_Order_Admin\n+ *\n+ * Send email to admin when an order has been completed.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.11\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Completed_Order_Admin' ) ) {\n+\tclass LP_Email_Completed_Order_Admin extends LP_Email_Type_Order_Admin {\n+\t\t\u002F**\n+\t\t * LP_Email_Completed_Order_Admin constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id              = 'completed-order-admin';\n+\t\t\t$this->title           = __( 'Admin', 'learnpress' );\n+\t\t\t$this->description     = __( 'Send an email to admin when an order has been completed.', 'learnpress' );\n+\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been completed', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user order has been completed', 'learnpress' );\n+\t\t\t$this->recipients      = get_option( 'admin_email' );\n+\t\t\t$this->recipient       = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Completed_Order_Admin();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-enrolled-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Enrolled_Course_Admin.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Enrolled_Course_Admin' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Enrolled_Course_Admin\r\n-\t *\u002F\r\n-\tclass LP_Email_Enrolled_Course_Admin extends LP_Email_Type_Enrolled_Course {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Enrolled_Course_Admin constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id              = 'enrolled-course-admin';\r\n-\t\t\t$this->title           = __( 'Admin', 'learnpress' );\r\n-\t\t\t$this->description     = __( 'Send an email to admin when the user has enrolled in the course.', 'learnpress' );\r\n-\t\t\t$this->default_subject = __( '{{user_display_name}} has enrolled in the course', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user has enrolled in the course', 'learnpress' );\r\n-\r\n-\t\t\t$this->recipient = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Trigger email.\r\n-\t\t * Receive 2 params: order_id, old_status\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.1.1\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->check_and_set( $params ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data_content();\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\t}\r\n-}\r\n-return new LP_Email_Enrolled_Course_Admin();\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Enrolled_Course_Admin.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Enrolled_Course_Admin' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Enrolled_Course_Admin\n+\t *\u002F\n+\tclass LP_Email_Enrolled_Course_Admin extends LP_Email_Type_Enrolled_Course {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_Enrolled_Course_Admin constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id              = 'enrolled-course-admin';\n+\t\t\t$this->title           = __( 'Admin', 'learnpress' );\n+\t\t\t$this->description     = __( 'Send an email to admin when the user has enrolled in the course.', 'learnpress' );\n+\t\t\t$this->default_subject = __( '{{user_display_name}} has enrolled in the course', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user has enrolled in the course', 'learnpress' );\n+\n+\t\t\t$this->recipient = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Trigger email.\n+\t\t * Receive 2 params: order_id, old_status\n+\t\t *\n+\t\t * @param array $params\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.1.1\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->check_and_set( $params ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->set_data_content();\n+\t\t\t$this->send_email();\n+\t\t}\n+\t}\n+}\n+return new LP_Email_Enrolled_Course_Admin();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-finished-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Finished_Course_Admin.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Finished_Course_Admin' ) ) {\r\n-\tclass LP_Email_Finished_Course_Admin extends LP_Email_Type_Finished_Course {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Finished_Course_Admin constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id              = 'finished-course-admin';\r\n-\t\t\t$this->title           = __( 'Admin', 'learnpress' );\r\n-\t\t\t$this->description     = __( 'Send an email to admin when the user has finished the course.', 'learnpress' );\r\n-\t\t\t$this->default_subject = __( '{{user_display_name}} has completed the course.', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user has completed the course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->recipient = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Finished_Course_Admin();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Finished_Course_Admin.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Finished_Course_Admin' ) ) {\n+\tclass LP_Email_Finished_Course_Admin extends LP_Email_Type_Finished_Course {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_Finished_Course_Admin constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id              = 'finished-course-admin';\n+\t\t\t$this->title           = __( 'Admin', 'learnpress' );\n+\t\t\t$this->description     = __( 'Send an email to admin when the user has finished the course.', 'learnpress' );\n+\t\t\t$this->default_subject = __( '{{user_display_name}} has completed the course.', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user has completed the course.', 'learnpress' );\n+\n+\t\t\t$this->recipient = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Finished_Course_Admin();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fadmin\u002Fclass-lp-email-new-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Email for admin when has new order.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_New_Order_Admin' ) ) {\r\n-\tclass LP_Email_New_Order_Admin extends LP_Email_Type_Order_Admin {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_New_Order_Admin constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'new-order-admin';\r\n-\t\t\t$this->title       = __( 'Admin', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Notify admin when a new order is placed.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'New order placed on {{order_date}}', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'New user order', 'learnpress' );\r\n-\r\n-\t\t\t$this->recipients = get_option( 'admin_email' );\r\n-\t\t\t$this->recipient  = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_New_Order_Admin();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Email for admin when has new order.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_New_Order_Admin' ) ) {\n+\tclass LP_Email_New_Order_Admin extends LP_Email_Type_Order_Admin {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_New_Order_Admin constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'new-order-admin';\n+\t\t\t$this->title       = __( 'Admin', 'learnpress' );\n+\t\t\t$this->description = __( 'Notify admin when a new order is placed.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'New order placed on {{order_date}}', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'New user order', 'learnpress' );\n+\n+\t\t\t$this->recipients = get_option( 'admin_email' );\n+\t\t\t$this->recipient  = LP_Settings::instance()->get( 'emails_' . $this->id . '.recipients', $this->_get_admin_email() );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_New_Order_Admin();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fclass-lp-email-hooks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fclass-lp-email-hooks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fclass-lp-email-hooks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fclass-lp-email-hooks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,141 +1,141 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Background\\LPBackgroundAjax;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Hooks' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Hooks\r\n-\t *\r\n-\t * @uses SendEmailAjax::send_mail_order_status_pending_to_processing\r\n-\t * @uses SendEmailAjax::send_mail_order_status_pending_to_completed\r\n-\t * @uses SendEmailAjax::send_mail_order_status_update_to_completed\r\n-\t * @uses SendEmailAjax::send_mail_order_status_update_to_cancelled\r\n-\t * @uses SendEmailAjax::send_mail_user_course_finished\r\n-\t *\u002F\r\n-\tclass LP_Email_Hooks {\r\n-\t\tprotected static $instance;\r\n-\t\tprotected $actions;\r\n-\r\n-\t\tprotected function __construct() {\r\n-\t\t\t\u002F\u002F Define class handle send email with hook corresponding\r\n-\t\t\t$this->actions = apply_filters(\r\n-\t\t\t\t'learn-press\u002Femail-actions-hooks',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t\u002F\u002F preview course\r\n-\t\t\t\t\t'learn_press_course_submit_rejected',\r\n-\t\t\t\t\t'learn_press_course_submit_approved',\r\n-\t\t\t\t\t'learn_press_course_submit_for_reviewer',\r\n-\r\n-\t\t\t\t\t\u002F\u002F New order\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-pending-to-processing' => 'send_mail_order_status_pending_to_processing',\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-pending-to-completed' => 'send_mail_order_status_pending_to_completed',\r\n-\t\t\t\t\t\u002F\u002F Completed order\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-completed' => 'send_mail_order_status_update_to_completed',\r\n-\t\t\t\t\t\u002F\u002F Cancelled order\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-cancelled' => 'send_mail_order_status_update_to_cancelled',\r\n-\t\t\t\t\t\u002F\u002F Finished course\r\n-\t\t\t\t\t'learn-press\u002Fuser-course-finished'   => 'send_mail_user_course_finished',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $this->actions as $tag_hook => $action ) {\r\n-\t\t\t\tadd_action( $tag_hook, array( $this, 'handle_send_email_on_background' ), 11, 10 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Override message change password\r\n-\t\t\tadd_filter( 'retrieve_password_notification_email', array( $this, 'retrieve_password_message' ), 11, 4 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Call background email\r\n-\t\t * Check hook and call class email corresponding\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.1\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function handle_send_email_on_background() {\r\n-\t\t\t$args           = func_get_args();\r\n-\t\t\t$args           = array_merge( $args, [ 'params_request' => $_REQUEST ] );\r\n-\t\t\t$email_bg       = LP_Background_Single_Email::instance();\r\n-\t\t\t$current_filter = current_filter();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( isset( $this->actions[ $current_filter ] ) ) {\r\n-\t\t\t\t\tif ( is_string( $this->actions[ $current_filter ] ) ) { \u002F\u002F For new declaration, only string callback\r\n-\t\t\t\t\t\t$data_send = [\r\n-\t\t\t\t\t\t\t'params'       => $args,\r\n-\t\t\t\t\t\t\t'lp-load-ajax' => $this->actions[ $current_filter ],\r\n-\t\t\t\t\t\t];\r\n-\t\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\r\n-\t\t\t\t\t} elseif ( is_array( $this->actions[ $current_filter ] ) ) { \u002F\u002F For old declaration, has array\r\n-\t\t\t\t\t\tforeach ( $this->actions[ $current_filter ] as $class_email => $path_file ) {\r\n-\t\t\t\t\t\t\t$data_send = [\r\n-\t\t\t\t\t\t\t\t'params'     => $args,\r\n-\t\t\t\t\t\t\t\t'class_name' => $class_email,\r\n-\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t\t$email_bg->data( $data_send )->dispatch();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Override message reset password\r\n-\t\t *\r\n-\t\t * @param array $data_mail\r\n-\t\t * @param string $key\r\n-\t\t * @param string $user_login\r\n-\t\t * @param WP_User $user_data\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 4.2.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function retrieve_password_message( $data_mail, $key, $user_login, $user_data ) {\r\n-\t\t\ttry {\r\n-\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php';\r\n-\t\t\t\t$email_reset_pass = new LP_Email_Reset_Password();\r\n-\t\t\t\tif ( ! $email_reset_pass->enable ) {\r\n-\t\t\t\t\treturn $data_mail;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$email_reset_pass = new LP_Email_Reset_Password();\r\n-\t\t\t\t$params           = [\r\n-\t\t\t\t\t'user_login' => $user_login,\r\n-\t\t\t\t\t'reset_key'  => $key,\r\n-\t\t\t\t];\r\n-\t\t\t\t$email_reset_pass->set_data_content( $params );\r\n-\t\t\t\t$message              = $email_reset_pass->get_content();\r\n-\t\t\t\t$message              = apply_filters( 'learn-press\u002Femail-content', $email_reset_pass->apply_style_inline( $message ), $this );\r\n-\t\t\t\t$data_mail['message'] = $message;\r\n-\t\t\t\t$data_mail['subject'] = $email_reset_pass->get_subject();\r\n-\t\t\t\t$data_mail['headers'] = $email_reset_pass->get_headers();\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data_mail;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Email_Hooks\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance(): self {\r\n-\t\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\t\tself::$instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$instance;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tLP_Email_Hooks::instance();\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Background\\LPBackgroundAjax;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Hooks' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Hooks\n+\t *\n+\t * @uses SendEmailAjax::send_mail_order_status_pending_to_processing\n+\t * @uses SendEmailAjax::send_mail_order_status_pending_to_completed\n+\t * @uses SendEmailAjax::send_mail_order_status_update_to_completed\n+\t * @uses SendEmailAjax::send_mail_order_status_update_to_cancelled\n+\t * @uses SendEmailAjax::send_mail_user_course_finished\n+\t *\u002F\n+\tclass LP_Email_Hooks {\n+\t\tprotected static $instance;\n+\t\tprotected $actions;\n+\n+\t\tprotected function __construct() {\n+\t\t\t\u002F\u002F Define class handle send email with hook corresponding\n+\t\t\t$this->actions = apply_filters(\n+\t\t\t\t'learn-press\u002Femail-actions-hooks',\n+\t\t\t\t[\n+\t\t\t\t\t\u002F\u002F preview course\n+\t\t\t\t\t'learn_press_course_submit_rejected',\n+\t\t\t\t\t'learn_press_course_submit_approved',\n+\t\t\t\t\t'learn_press_course_submit_for_reviewer',\n+\n+\t\t\t\t\t\u002F\u002F New order\n+\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-pending-to-processing' => 'send_mail_order_status_pending_to_processing',\n+\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-pending-to-completed' => 'send_mail_order_status_pending_to_completed',\n+\t\t\t\t\t\u002F\u002F Completed order\n+\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-completed' => 'send_mail_order_status_update_to_completed',\n+\t\t\t\t\t\u002F\u002F Cancelled order\n+\t\t\t\t\t'learn-press\u002Forder\u002Fstatus-cancelled' => 'send_mail_order_status_update_to_cancelled',\n+\t\t\t\t\t\u002F\u002F Finished course\n+\t\t\t\t\t'learn-press\u002Fuser-course-finished'   => 'send_mail_user_course_finished',\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $this->actions as $tag_hook => $action ) {\n+\t\t\t\tadd_action( $tag_hook, array( $this, 'handle_send_email_on_background' ), 11, 10 );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Override message change password\n+\t\t\tadd_filter( 'retrieve_password_notification_email', array( $this, 'retrieve_password_message' ), 11, 4 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Call background email\n+\t\t * Check hook and call class email corresponding\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.1\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function handle_send_email_on_background() {\n+\t\t\t$args           = func_get_args();\n+\t\t\t$args           = array_merge( $args, [ 'params_request' => $_REQUEST ] );\n+\t\t\t$email_bg       = LP_Background_Single_Email::instance();\n+\t\t\t$current_filter = current_filter();\n+\n+\t\t\ttry {\n+\t\t\t\tif ( isset( $this->actions[ $current_filter ] ) ) {\n+\t\t\t\t\tif ( is_string( $this->actions[ $current_filter ] ) ) { \u002F\u002F For new declaration, only string callback\n+\t\t\t\t\t\t$data_send = [\n+\t\t\t\t\t\t\t'params'       => $args,\n+\t\t\t\t\t\t\t'lp-load-ajax' => $this->actions[ $current_filter ],\n+\t\t\t\t\t\t];\n+\t\t\t\t\t\tLPBackgroundAjax::handle( $data_send );\n+\t\t\t\t\t} elseif ( is_array( $this->actions[ $current_filter ] ) ) { \u002F\u002F For old declaration, has array\n+\t\t\t\t\t\tforeach ( $this->actions[ $current_filter ] as $class_email => $path_file ) {\n+\t\t\t\t\t\t\t$data_send = [\n+\t\t\t\t\t\t\t\t'params'     => $args,\n+\t\t\t\t\t\t\t\t'class_name' => $class_email,\n+\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t\t$email_bg->data( $data_send )->dispatch();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Override message reset password\n+\t\t *\n+\t\t * @param array $data_mail\n+\t\t * @param string $key\n+\t\t * @param string $user_login\n+\t\t * @param WP_User $user_data\n+\t\t *\n+\t\t * @return array\n+\t\t * @version 1.0.1\n+\t\t * @since 4.2.6.9\n+\t\t *\u002F\n+\t\tpublic function retrieve_password_message( $data_mail, $key, $user_login, $user_data ) {\n+\t\t\ttry {\n+\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php';\n+\t\t\t\t$email_reset_pass = new LP_Email_Reset_Password();\n+\t\t\t\tif ( ! $email_reset_pass->enable ) {\n+\t\t\t\t\treturn $data_mail;\n+\t\t\t\t}\n+\n+\t\t\t\t$email_reset_pass = new LP_Email_Reset_Password();\n+\t\t\t\t$params           = [\n+\t\t\t\t\t'user_login' => $user_login,\n+\t\t\t\t\t'reset_key'  => $key,\n+\t\t\t\t];\n+\t\t\t\t$email_reset_pass->set_data_content( $params );\n+\t\t\t\t$message              = $email_reset_pass->get_content();\n+\t\t\t\t$message              = apply_filters( 'learn-press\u002Femail-content', $email_reset_pass->apply_style_inline( $message ), $this );\n+\t\t\t\t$data_mail['message'] = $message;\n+\t\t\t\t$data_mail['subject'] = $email_reset_pass->get_subject();\n+\t\t\t\t$data_mail['headers'] = $email_reset_pass->get_headers();\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $data_mail;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Email_Hooks\n+\t\t *\u002F\n+\t\tpublic static function instance(): self {\n+\t\t\tif ( is_null( self::$instance ) ) {\n+\t\t\t\tself::$instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$instance;\n+\t\t}\n+\t}\n+\n+\tLP_Email_Hooks::instance();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fclass-lp-email.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fclass-lp-email.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fclass-lp-email.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fclass-lp-email.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1052 +1,1052 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class Email.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FEmail\r\n- * @since 3.0.0\r\n- * @version  3.0.4\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use Pelago\\Emogrifier\\CssInliner;\r\n-use TijsVerkoyen\\CssToInlineStyles\\CssToInlineStyles;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email\r\n-\t *\u002F\r\n-\tclass LP_Email extends LP_Abstract_Settings {\r\n-\t\t\u002F**\r\n-\t\t * Email method ID.\r\n-\t\t *\r\n-\t\t * @var String\r\n-\t\t *\u002F\r\n-\t\tpublic $id;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Email method title.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $title;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * 'yes' if the method is enabled.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\t\u002F\u002Fpublic $enabled;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Description for the email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $description;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Plain text template path.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $template_plain;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * HTML template path.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $template_html = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Template path.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $template_base = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Recipients for the email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $recipient;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool Enable recipients\r\n-\t\t *\r\n-\t\t * @since 4.2.6.4\r\n-\t\t *\u002F\r\n-\t\tpublic $enable_recipients = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * For send CC or BB email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $recipients = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Heading for the email content.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $heading = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Subject for the email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $subject = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Default heading for the email content.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $default_heading = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Default subject for the email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $default_subject = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Default content for the email.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $content;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Object this email is for, for example a customer, product, or email.\r\n-\t\t *\r\n-\t\t * @var object\r\n-\t\t *\u002F\r\n-\t\tpublic $object;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Strings to find in subjects\u002Fheadings.\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic $find;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Strings to replace in subjects\u002Fheadings.\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic $replace;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Mime boundary (for multipart emails).\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $mime_boundary;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Mime boundary header (for multipart emails).\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $mime_boundary_header;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * True when email is being sent.\r\n-\t\t *\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tpublic $sending;\r\n-\r\n-\t\tpublic $debug = false;\r\n-\r\n-\t\tprotected $_object_loaded = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t *  List of preg* regular expression patterns to search for,\r\n-\t\t *  used in conjunction with $replace.\r\n-\t\t *  https:\u002F\u002Fraw.github.com\u002Fushahidi\u002Fwp-silcc\u002Fmaster\u002Fclass.html2text.inc\r\n-\t\t *\r\n-\t\t * @var array $search\r\n-\t\t * @see $replace\r\n-\t\t *\u002F\r\n-\t\tpublic $plain_search = array(\r\n-\t\t\t\"\u002F\\r\u002F\",                                          \u002F\u002F Non-legal carriage return\r\n-\t\t\t'\u002F&(nbsp|#160);\u002Fi',                              \u002F\u002F Non-breaking space\r\n-\t\t\t'\u002F&(quot|rdquo|ldquo|#8220|#8221|#147|#148);\u002Fi', \u002F\u002F Double quotes\r\n-\t\t\t'\u002F&(apos|rsquo|lsquo|#8216|#8217);\u002Fi',           \u002F\u002F Single quotes\r\n-\t\t\t'\u002F&gt;\u002Fi',                                       \u002F\u002F Greater-than\r\n-\t\t\t'\u002F&lt;\u002Fi',                                       \u002F\u002F Less-than\r\n-\t\t\t'\u002F&#38;\u002Fi',                                      \u002F\u002F Ampersand\r\n-\t\t\t'\u002F&#038;\u002Fi',                                     \u002F\u002F Ampersand\r\n-\t\t\t'\u002F&amp;\u002Fi',                                      \u002F\u002F Ampersand\r\n-\t\t\t'\u002F&(copy|#169);\u002Fi',                              \u002F\u002F Copyright\r\n-\t\t\t'\u002F&(trade|#8482|#153);\u002Fi',                       \u002F\u002F Trademark\r\n-\t\t\t'\u002F&(reg|#174);\u002Fi',                               \u002F\u002F Registered\r\n-\t\t\t'\u002F&(mdash|#151|#8212);\u002Fi',                       \u002F\u002F mdash\r\n-\t\t\t'\u002F&(ndash|minus|#8211|#8722);\u002Fi',                \u002F\u002F ndash\r\n-\t\t\t'\u002F&(bull|#149|#8226);\u002Fi',                        \u002F\u002F Bullet\r\n-\t\t\t'\u002F&(pound|#163);\u002Fi',                             \u002F\u002F Pound sign\r\n-\t\t\t'\u002F&(euro|#8364);\u002Fi',                             \u002F\u002F Euro sign\r\n-\t\t\t'\u002F&#36;\u002F',                                       \u002F\u002F Dollar sign\r\n-\t\t\t'\u002F&[^&\\s;]+;\u002Fi',                                 \u002F\u002F Unknown\u002Funhandled entities\r\n-\t\t\t'\u002F[ ]{2,}\u002F',                                      \u002F\u002F Runs of spaces, post-handling\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t *  List of pattern replacements corresponding to patterns searched.\r\n-\t\t *\r\n-\t\t * @var array $replace\r\n-\t\t * @see $search\r\n-\t\t *\u002F\r\n-\t\tpublic $plain_replace = array(\r\n-\t\t\t'',                                             \u002F\u002F Non-legal carriage return\r\n-\t\t\t' ',                                            \u002F\u002F Non-breaking space\r\n-\t\t\t'\"',                                            \u002F\u002F Double quotes\r\n-\t\t\t\"'\",                                            \u002F\u002F Single quotes\r\n-\t\t\t'>',                                            \u002F\u002F Greater-than\r\n-\t\t\t'\u003C',                                            \u002F\u002F Less-than\r\n-\t\t\t'&',                                            \u002F\u002F Ampersand\r\n-\t\t\t'&',                                            \u002F\u002F Ampersand\r\n-\t\t\t'&',                                            \u002F\u002F Ampersand\r\n-\t\t\t'(c)',                                          \u002F\u002F Copyright\r\n-\t\t\t'(tm)',                                         \u002F\u002F Trademark\r\n-\t\t\t'(R)',                                          \u002F\u002F Registered\r\n-\t\t\t'--',                                           \u002F\u002F mdash\r\n-\t\t\t'-',                                            \u002F\u002F ndash\r\n-\t\t\t'*',                                            \u002F\u002F Bullet\r\n-\t\t\t'�',                                            \u002F\u002F Pound sign\r\n-\t\t\t'EUR',                                          \u002F\u002F Euro sign. � ?\r\n-\t\t\t'$',                                            \u002F\u002F Dollar sign\r\n-\t\t\t'',                                             \u002F\u002F Unknown\u002Funhandled entities\r\n-\t\t\t' ',                                             \u002F\u002F Runs of spaces, post-handling\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * List of pattern search corresponding to patterns replace.\r\n-\t\t *\r\n-\t\t * @var array text shortcode\r\n-\t\t *\u002F\r\n-\t\tpublic $text_search = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * List of pattern to replace\r\n-\t\t *\r\n-\t\t * @var array text replace\r\n-\t\t *\u002F\r\n-\t\tpublic $text_replace = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Text message description\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $email_text_message_description = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $template_path = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tpublic $variables = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tpublic $general_variables = [];\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tpublic $support_variables = [];\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Settings\r\n-\t\t *\u002F\r\n-\t\tpublic $settings = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $email_format = 'html';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tpublic $enable = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $group = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_option_id = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t\u002F\u002F Set template base path to LP templates path if it is not set.\r\n-\t\t\tif ( empty( $this->template_base ) ) {\r\n-\t\t\t\t$this->template_base = LearnPress::instance()->plugin_path( 'templates\u002F' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Set template folder if it is not set. Default is 'learnpress'\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( empty( $this->template_path ) ) {\r\n-\t\t\t\t$this->template_path = learn_press_template_path();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $this->template_html ) ) {\r\n-\t\t\t\t$this->template_html = \"emails\u002F{$this->id}.php\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $this->template_plain ) ) {\r\n-\t\t\t\t$this->template_plain = \"emails\u002Fplain\u002F{$this->id}.php\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->object ) {\r\n-\t\t\t\t$this->object = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_option_id = 'emails_' . $this->id;\r\n-\r\n-\t\t\t$this->settings = LP_Settings::instance()->get_group( $this->_option_id, '' );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Init general options\r\n-\t\t\t *\u002F\r\n-\t\t\t$this->heading = $this->settings->get( 'heading', $this->default_heading );\r\n-\t\t\t$this->subject = $this->settings->get( 'subject', $this->default_subject );\r\n-\t\t\t$this->enable  = $this->settings->get( 'enable', 'no' ) === 'yes';\r\n-\r\n-\t\t\t\u002F*if ( $this->settings->get( 'email_content.format' ) ) {\r\n-\t\t\t\t$this->email_format = ( $this->settings->get( 'email_content.format' ) == 'plain_text' ) ? 'plain' : 'html';\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( LP_Settings::instance()->get( 'emails_general.default_email_content', 'html' ) ) {\r\n-\t\t\t\t\t$this->email_format = LP_Settings::instance()->get( 'emails_general.default_email_content', 'html' );\r\n-\t\t\t\t}\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$email_formats = array( 'plain', 'html' );\r\n-\t\t\tif ( ! in_array( $this->email_format, $email_formats ) ) {\r\n-\t\t\t\t$this->email_format = 'html';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set type variables can click add to content of email setting.\r\n-\t\t\t$this->support_variables = [\r\n-\t\t\t\t'{{site_url}}',\r\n-\t\t\t\t'{{site_title}}',\r\n-\t\t\t\t'{{login_url}}',\r\n-\t\t\t\t'{{site_admin_email}}',\r\n-\t\t\t\t'{{site_admin_name}}',\r\n-\t\t\t\t'{{header}}',\r\n-\t\t\t\t'{{footer}}',\r\n-\t\t\t\t'{{footer_text}}',\r\n-\t\t\t];\r\n-\t\t\t$this->general_variables = $this->support_variables;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param null $value\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function enable( $value = null ): bool {\r\n-\t\t\tif ( is_bool( $value ) ) {\r\n-\t\t\t\t$this->enable = $value;\r\n-\r\n-\t\t\t\t\u002F\u002F Load default settings if the email is not configured\r\n-\t\t\t\tif ( ! $this->is_configured() ) {\r\n-\t\t\t\t\t$settings = $this->get_settings();\r\n-\r\n-\t\t\t\t\tforeach ( $settings as $field ) {\r\n-\t\t\t\t\t\tif ( $field['type'] == 'heading' || $field['type'] == 'title' || $field['type'] == 'sectionend' ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$id = str_replace( $this->_option_id, '', $field['id'] );\r\n-\t\t\t\t\t\t$id = str_replace( array( '[', ']' ), '', $id );\r\n-\r\n-\t\t\t\t\t\tif ( $id == 'email_content' ) {\r\n-\t\t\t\t\t\t\t$this->settings->set(\r\n-\t\t\t\t\t\t\t\t'email_content',\r\n-\t\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t\t'format' => 'html',\r\n-\t\t\t\t\t\t\t\t\t'plain'  => lp_get_email_content( 'plain', '', $field ),\r\n-\t\t\t\t\t\t\t\t\t'html'   => lp_get_email_content( 'html', '', $field ),\r\n-\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$this->settings->set( $id, $field['default'] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t\t$this->settings->set( 'enable', $value ? 'yes' : 'no' );\r\n-\t\t\t\t$this->settings->update( 'learn_press_' . $this->_option_id, $this->settings->get() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->enable;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function is_configured() {\r\n-\t\t\treturn LP_Settings::instance()->get( $this->_option_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get variables support in mail.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_variables_support() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-variables-support', $this->support_variables, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Magic function\r\n-\t\t *\r\n-\t\t * @param $key\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function __get( $key ) {\r\n-\t\t\tif ( ! empty( $this->{$key} ) ) {\r\n-\t\t\t\treturn $this->{$key};\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $this->settings->get( $key );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tprivate function is_current() {\r\n-\t\t\treturn ! empty( $_REQUEST['section'] ) && sanitize_text_field( $_REQUEST['section'] ) == $this->id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $options\r\n-\t\t * @param $key\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function _remove_email_content_from_option( $options, $key ) {\r\n-\t\t\tif ( ! $this->is_current() ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_array( $options ) && ( array_key_exists( 'email_content_html', $options ) || array_key_exists( 'email_content_plain', $options ) ) ) {\r\n-\r\n-\t\t\t\tif ( array_key_exists( 'email_content_html', $options ) ) {\r\n-\t\t\t\t\t$this->save_template( $options['email_content_html'], $this->template_html );\r\n-\t\t\t\t\tunset( $options['email_content_html'] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( array_key_exists( 'email_content_plain', $options ) ) {\r\n-\t\t\t\t\t$this->save_template( $options['email_content_plain'], $this->template_plain );\r\n-\t\t\t\t\tunset( $options['email_content_plain'] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $options;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Apply the value of variables for string\r\n-\t\t *\r\n-\t\t * @param string $value\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function format_string( string $value ): string {\r\n-\t\t\t$search  = [];\r\n-\t\t\t$replace = [];\r\n-\t\t\tif ( is_array( $this->variables ) ) {\r\n-\t\t\t\t$search  = array_keys( $this->variables );\r\n-\t\t\t\t$replace = array_values( $this->variables );\r\n-\t\t\t}\r\n-\t\t\t$search  = apply_filters( 'learn-press\u002Femail-format-string-find', $search, $this );\r\n-\t\t\t$replace = apply_filters( 'learn-press\u002Femail-format-string-replace', $replace, $this );\r\n-\r\n-\t\t\treturn str_replace( $search, $replace, $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email recipient.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_recipient() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-recipient-' . $this->id, $this->recipient, $this->object );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email subject.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_subject(): string {\r\n-\t\t\treturn $this->format_string( $this->subject );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email content.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content(): string {\r\n-\t\t\t$email_format = $this->get_email_format();\r\n-\r\n-\t\t\tif ( 'plain' == $email_format ) {\r\n-\t\t\t\t$email_content = preg_replace( $this->plain_search, $this->plain_replace, strip_tags( $this->get_content_plain() ) );\r\n-\t\t\t} elseif ( in_array( $email_format, array( 'html', 'multipart' ) ) ) {\r\n-\t\t\t\t$email_content = $this->get_content_html();\r\n-\t\t\t} else {\r\n-\t\t\t\t$email_content = preg_replace( $this->text_search, $this->text_replace, $this->get_content_text_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$email_content = $this->format_string( $email_content );\r\n-\r\n-\t\t\treturn wordwrap( $email_content, 70 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email heading.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_heading(): string {\r\n-\t\t\treturn $this->format_string( $this->heading );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email footer text.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_footer_text(): string {\r\n-\t\t\t$text = LP_Settings::instance()->get( 'emails_general.footer_text', '' );\r\n-\r\n-\t\t\treturn LP_Helper::sanitize_params_submitted( $text, 'html' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email content HTML.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content_html(): string {\r\n-\t\t\t$template      = $this->get_template( 'template_html' );\r\n-\t\t\t$template_file = $this->template_base . $template;\r\n-\t\t\t$content       = $this->settings->get( 'email_content.html', file_get_contents( $template_file ) );\r\n-\r\n-\t\t\treturn stripslashes( $content );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email content plain.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content_plain(): string {\r\n-\t\t\t$template      = $this->get_template( 'template_plain' );\r\n-\t\t\t$template_file = $this->template_base . $template;\r\n-\t\t\t$content_tmp   = LP_WP_Filesystem::instance()->file_get_contents( $template_file );\r\n-\t\t\t$content       = $this->settings->get( 'email_content.plain', $content_tmp );\r\n-\t\t\t$content       = stripslashes( $content );\r\n-\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get content context message.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content_text_message(): string {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-text-message-' . $this->id, $this->settings->get( 'content_text_message' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email headers.\r\n-\t\t *\r\n-\t\t * @return string|array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_headers() {\r\n-\t\t\t$headers = [\r\n-\t\t\t\t'Content-Type: ' . $this->get_content_format() . \"\\r\\n\",\r\n-\t\t\t];\r\n-\r\n-\t\t\t$recipients = $this->settings->get( 'recipients', $this->recipients );\r\n-\r\n-\t\t\tif ( ! empty( $recipients ) ) {\r\n-\t\t\t\t$cc_emails = explode( ',', $recipients );\r\n-\t\t\t\tforeach ( $cc_emails as $cc_email ) {\r\n-\t\t\t\t\t$headers[] = 'Cc: ' . $cc_email;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-headers', $headers, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email attachments.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_attachments() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-attachments', array(), $this->id, $this->object );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get FROM address. Default is admin email.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4 - comment - not override hook\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_from_address(): string {\r\n-\t\t\t$email = LP_Settings::instance()->get( 'emails_general.from_email', get_option( 'admin_email' ) );\r\n-\r\n-\t\t\treturn sanitize_email( $email );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get FROM name. Default is Blog name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_from_name(): string {\r\n-\t\t\t$name = LP_Settings::instance()->get( 'emails_general.from_name', get_option( 'blogname' ) );\r\n-\r\n-\t\t\treturn LP_Helper::sanitize_params_submitted( $name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get WP Blog name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_blogname() {\r\n-\t\t\treturn wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email content format.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_content_format() {\r\n-\t\t\tswitch ( $this->get_email_format() ) {\r\n-\t\t\t\tcase 'text_message':\r\n-\t\t\t\tcase 'html':\r\n-\t\t\t\t\treturn 'text\u002Fhtml';\r\n-\t\t\t\tcase 'multipart':\r\n-\t\t\t\t\treturn 'multipart\u002Falternative';\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\treturn 'text\u002Fplain';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_email_format() {\r\n-\t\t\treturn $this->email_format && class_exists( 'DOMDocument' ) ? $this->email_format : 'plain';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Apply css from external to inline.\r\n-\t\t *\r\n-\t\t * @param string $content\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function apply_style_inline( $content ): string {\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! in_array( $this->get_content_format(), array( 'text\u002Fhtml', 'multipart\u002Falternative' ) ) ) {\r\n-\t\t\t\t\treturn $content;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Get CSS styles\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tlearn_press_get_template( 'emails\u002Femail-styles.php' );\r\n-\t\t\t\t$css = apply_filters( 'learn_press_email_styles', ob_get_clean(), $this->id, $this );\r\n-\r\n-\t\t\t\t\u002F\u002F Apply CSS styles inline for picky email clients\r\n-\t\t\t\t\u002F\u002F$content = CssInliner::fromHtml( $content )->inlineCss( $css )->render();\r\n-\t\t\t\t$cssToInlineStyles = new CssToInlineStyles();\r\n-\t\t\t\t$content           = $cssToInlineStyles->convert( $content, $css );\r\n-\t\t\t} catch ( Exception $e ) {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-content-inline-style', $content, $this->id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get template file from type.\r\n-\t\t *\r\n-\t\t * @param string $type\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_template( $type ) {\r\n-\t\t\t$type = esc_attr( basename( $type ) );\r\n-\r\n-\t\t\tif ( 'template_html' == $type ) {\r\n-\t\t\t\treturn $this->template_html;\r\n-\t\t\t} elseif ( 'template_plain' == $type ) {\r\n-\t\t\t\treturn $this->template_plain;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tprotected function save_template( $code, $path ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get template file.\r\n-\t\t *\r\n-\t\t * @param string $template\r\n-\t\t * @param string $template_path\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_theme_template_file( $template, $template_path = null ) {\r\n-\t\t\t$template_dir = apply_filters( 'learn-press\u002Ftemplate-directory', $template_path ? $template_path : learn_press_template_path(), $template );\r\n-\r\n-\t\t\treturn join(\r\n-\t\t\t\t'',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\ttrailingslashit( get_stylesheet_directory() ),\r\n-\t\t\t\t\ttrailingslashit( $template_dir ),\r\n-\t\t\t\t\t$template,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Send email.\r\n-\t\t *\r\n-\t\t * @param string|array $to\r\n-\t\t * @param string $subject\r\n-\t\t * @param string $message\r\n-\t\t * @param string|string[] $headers\r\n-\t\t * @param array $attachments\r\n-\t\t *\r\n-\t\t * @editor tungnx\r\n-\t\t * @return bool\r\n-\t\t * @version 1.0.1\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function send( $to, string $subject, string $message, $headers, array $attachments ): bool {\r\n-\t\t\t$return  = false;\r\n-\t\t\t$message = apply_filters( 'learn-press\u002Femail-content', $this->apply_style_inline( $message ), $this );\r\n-\r\n-\t\t\tif ( is_string( $to ) ) {\r\n-\t\t\t\t$to = preg_split( '~\\s?,\\s?~', $to );\r\n-\r\n-\t\t\t\t$return = wp_mail( $to, $subject, $message, $headers, $attachments );\r\n-\t\t\t} elseif ( is_array( $to ) ) {\r\n-\t\t\t\tforeach ( $to as $t ) {\r\n-\t\t\t\t\t$return = wp_mail( $t, $subject, $message, $headers, $attachments );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all values set and send email\r\n-\t\t *\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.3\r\n-\t\t *\u002F\r\n-\t\tpublic function send_email(): bool {\r\n-\t\t\tadd_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );\r\n-\t\t\tadd_filter( 'wp_mail_content_type', array( $this, 'get_content_format' ) );\r\n-\r\n-\t\t\treturn $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get common variables.\r\n-\t\t * Variables use for click add to content of Email\r\n-\t\t *\r\n-\t\t * @param string $format\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_common_variables( string $format = 'plain' ): array {\r\n-\t\t\t$heading     = strip_tags( $this->get_heading() );\r\n-\t\t\t$footer_text = strip_tags( $this->get_footer_text() );\r\n-\r\n-\t\t\t$header = $heading;\r\n-\t\t\t$footer = $footer_text;\r\n-\r\n-\t\t\tif ( $format != 'plain' ) {\r\n-\t\t\t\t$header = $this->email_header( $heading );\r\n-\t\t\t\t$footer = $this->email_footer( $footer_text );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$admin_user = get_user_by( 'email', get_option( 'admin_email' ) );\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'email_variables_common',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'{{header}}'           => $header,\r\n-\t\t\t\t\t'{{footer}}'           => $footer,\r\n-\t\t\t\t\t'{{footer_text}}'      => $footer_text,\r\n-\t\t\t\t\t'{{site_url}}'         => get_home_url(),\r\n-\t\t\t\t\t'{{site_title}}'       => $this->get_blogname(),\r\n-\t\t\t\t\t'{{site_admin_email}}' => get_option( 'admin_email' ),\r\n-\t\t\t\t\t'{{site_admin_name}}'  => learn_press_get_profile_display_name( $admin_user ),\r\n-\t\t\t\t\t'{{login_url}}'        => learn_press_get_login_url(),\r\n-\t\t\t\t\t'{{plain_text}}'       => $format == 'plain',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $name\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_field_name( $name ) {\r\n-\t\t\treturn $this->_option_id . \"[$name]\";\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Default options for all emails.\r\n-\t\t * Almost the emails are the same with options.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprotected function _default_settings(): array {\r\n-\t\t\t\u002F**\r\n-\t\t\t * In case the email is not for sending to specific admin (like user who has bought course or author of course, etc..)\r\n-\t\t\t * So, we do not need this field.\r\n-\t\t\t *\u002F\r\n-\r\n-\t\t\t$enable_recipients = $this->enable_recipients;\r\n-\r\n-\t\t\t$default = array_merge(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type' => 'title',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'   => esc_html__( 'Enable\u002FDisable', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t\t\t'default' => 'no',\r\n-\t\t\t\t\t\t'id'      => $this->get_field_name( 'enable' ),\r\n-\t\t\t\t\t\t'desc'    => $this->description,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t$enable_recipients ? array(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'   => esc_html__( 'Recipient(s)', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'    => 'text',\r\n-\t\t\t\t\t\t'default' => $this->recipients,\r\n-\t\t\t\t\t\t'id'      => $this->get_field_name( 'recipients' ),\r\n-\t\t\t\t\t\t'desc'    => esc_html__( 'Separate other recipients with commas.', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t) : array(),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'   => esc_html__( 'Subject', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'    => 'text',\r\n-\t\t\t\t\t\t'default' => $this->default_subject,\r\n-\t\t\t\t\t\t'id'      => $this->get_field_name( 'subject' ),\r\n-\t\t\t\t\t\t'css'     => 'width:400px',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'   => esc_html__( 'Email heading', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'    => 'text',\r\n-\t\t\t\t\t\t'default' => $this->default_heading,\r\n-\t\t\t\t\t\t'id'      => $this->get_field_name( 'heading' ),\r\n-\t\t\t\t\t\t'css'     => 'width:400px',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'                => esc_html__( 'Content', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'                 => 'email-content',\r\n-\t\t\t\t\t\t'default'              => '',\r\n-\t\t\t\t\t\t'id'                   => $this->get_field_name( 'email_content' ),\r\n-\t\t\t\t\t\t'template_base'        => $this->template_base,\r\n-\t\t\t\t\t\t'template_path'        => $this->template_path,\r\n-\t\t\t\t\t\t'template_html'        => $this->template_html,\r\n-\t\t\t\t\t\t'template_plain'       => $this->template_plain,\r\n-\t\t\t\t\t\t'template_html_local'  => $this->get_theme_template_file( 'html', $this->template_path ),\r\n-\t\t\t\t\t\t'template_plain_local' => $this->get_theme_template_file( 'plain', $this->template_path ),\r\n-\t\t\t\t\t\t'support_variables'    => $this->get_variables_support(),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'type' => 'sectionend',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $default;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get settings in admin.\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function get_settings() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail-settings\u002F' . $this->id . '\u002Fsettings', $this->_default_settings() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instructors to send mail.\r\n-\t\t *\r\n-\t\t * @param null $order_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_instructors( $order_id ) {\r\n-\t\t\tif ( ! $order_id ) {\r\n-\t\t\t\treturn array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\t$items       = $order->get_items();\r\n-\t\t\t$instructors = array();\r\n-\r\n-\t\t\tif ( count( $items ) ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\tif ( ! isset( $item['course_id'] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$user_id = get_post_field( 'post_author', $item['course_id'] );\r\n-\t\t\t\t\tif ( $user_id ) {\r\n-\t\t\t\t\t\t$instructors[] = $user_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $instructors;\r\n-\t\t}\r\n-\r\n-\t\tprotected function _get_admin_email() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Femail\u002Fadmin-email', get_option( 'admin_email' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function __toString() {\r\n-\t\t\treturn $this->title;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get image header in general settings.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_image_header(): string {\r\n-\t\t\t$image = LP_Settings::instance()->get( 'emails_general.header_image', '' );\r\n-\r\n-\t\t\tif ( ! empty( $image ) ) {\r\n-\t\t\t\t$image = wp_get_attachment_image_url( $image, 'full' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $image;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Email header.\r\n-\t\t *\r\n-\t\t * @param string $heading\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function email_header( string $heading ): string {\r\n-\t\t\tob_start();\r\n-\t\t\tlearn_press_get_template(\r\n-\t\t\t\t'emails\u002Femail-header.php',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'email_heading' => $heading,\r\n-\t\t\t\t\t'image_header'  => $this->get_image_header(),\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Email footer.\r\n-\t\t *\r\n-\t\t * @param string $footer_text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function email_footer( string $footer_text ): string {\r\n-\t\t\tob_start();\r\n-\t\t\tlearn_press_get_template( 'emails\u002Femail-footer.php', array( 'footer_text' => $footer_text ) );\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set receive email\r\n-\t\t *\r\n-\t\t * @param string $receive_email\r\n-\t\t *\u002F\r\n-\t\tpublic function set_receive( string $receive_email ) {\r\n-\t\t\t$this->recipient = $receive_email;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Method called by background on LP_Background_Single_Email\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t *\r\n-\t\t * @see LP_Background_Single_Email::handle()\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class Email.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FEmail\n+ * @since 3.0.0\n+ * @version  3.0.4\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use Pelago\\Emogrifier\\CssInliner;\n+use TijsVerkoyen\\CssToInlineStyles\\CssToInlineStyles;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email\n+\t *\u002F\n+\tclass LP_Email extends LP_Abstract_Settings {\n+\t\t\u002F**\n+\t\t * Email method ID.\n+\t\t *\n+\t\t * @var String\n+\t\t *\u002F\n+\t\tpublic $id;\n+\n+\t\t\u002F**\n+\t\t * Email method title.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $title;\n+\n+\t\t\u002F**\n+\t\t * 'yes' if the method is enabled.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\t\u002F\u002Fpublic $enabled;\n+\n+\t\t\u002F**\n+\t\t * Description for the email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $description;\n+\n+\t\t\u002F**\n+\t\t * Plain text template path.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $template_plain;\n+\n+\t\t\u002F**\n+\t\t * HTML template path.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $template_html = '';\n+\n+\t\t\u002F**\n+\t\t * Template path.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $template_base = '';\n+\n+\t\t\u002F**\n+\t\t * Recipients for the email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $recipient;\n+\n+\t\t\u002F**\n+\t\t * @var bool Enable recipients\n+\t\t *\n+\t\t * @since 4.2.6.4\n+\t\t *\u002F\n+\t\tpublic $enable_recipients = false;\n+\n+\t\t\u002F**\n+\t\t * For send CC or BB email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $recipients = '';\n+\n+\t\t\u002F**\n+\t\t * Heading for the email content.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $heading = '';\n+\n+\t\t\u002F**\n+\t\t * Subject for the email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $subject = '';\n+\n+\t\t\u002F**\n+\t\t * Default heading for the email content.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $default_heading = '';\n+\n+\t\t\u002F**\n+\t\t * Default subject for the email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $default_subject = '';\n+\n+\t\t\u002F**\n+\t\t * Default content for the email.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $content;\n+\n+\t\t\u002F**\n+\t\t * Object this email is for, for example a customer, product, or email.\n+\t\t *\n+\t\t * @var object\n+\t\t *\u002F\n+\t\tpublic $object;\n+\n+\t\t\u002F**\n+\t\t * Strings to find in subjects\u002Fheadings.\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic $find;\n+\n+\t\t\u002F**\n+\t\t * Strings to replace in subjects\u002Fheadings.\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic $replace;\n+\n+\t\t\u002F**\n+\t\t * Mime boundary (for multipart emails).\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $mime_boundary;\n+\n+\t\t\u002F**\n+\t\t * Mime boundary header (for multipart emails).\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $mime_boundary_header;\n+\n+\t\t\u002F**\n+\t\t * True when email is being sent.\n+\t\t *\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tpublic $sending;\n+\n+\t\tpublic $debug = false;\n+\n+\t\tprotected $_object_loaded = false;\n+\n+\t\t\u002F**\n+\t\t *  List of preg* regular expression patterns to search for,\n+\t\t *  used in conjunction with $replace.\n+\t\t *  https:\u002F\u002Fraw.github.com\u002Fushahidi\u002Fwp-silcc\u002Fmaster\u002Fclass.html2text.inc\n+\t\t *\n+\t\t * @var array $search\n+\t\t * @see $replace\n+\t\t *\u002F\n+\t\tpublic $plain_search = array(\n+\t\t\t\"\u002F\\r\u002F\",                                          \u002F\u002F Non-legal carriage return\n+\t\t\t'\u002F&(nbsp|#160);\u002Fi',                              \u002F\u002F Non-breaking space\n+\t\t\t'\u002F&(quot|rdquo|ldquo|#8220|#8221|#147|#148);\u002Fi', \u002F\u002F Double quotes\n+\t\t\t'\u002F&(apos|rsquo|lsquo|#8216|#8217);\u002Fi',           \u002F\u002F Single quotes\n+\t\t\t'\u002F&gt;\u002Fi',                                       \u002F\u002F Greater-than\n+\t\t\t'\u002F&lt;\u002Fi',                                       \u002F\u002F Less-than\n+\t\t\t'\u002F&#38;\u002Fi',                                      \u002F\u002F Ampersand\n+\t\t\t'\u002F&#038;\u002Fi',                                     \u002F\u002F Ampersand\n+\t\t\t'\u002F&amp;\u002Fi',                                      \u002F\u002F Ampersand\n+\t\t\t'\u002F&(copy|#169);\u002Fi',                              \u002F\u002F Copyright\n+\t\t\t'\u002F&(trade|#8482|#153);\u002Fi',                       \u002F\u002F Trademark\n+\t\t\t'\u002F&(reg|#174);\u002Fi',                               \u002F\u002F Registered\n+\t\t\t'\u002F&(mdash|#151|#8212);\u002Fi',                       \u002F\u002F mdash\n+\t\t\t'\u002F&(ndash|minus|#8211|#8722);\u002Fi',                \u002F\u002F ndash\n+\t\t\t'\u002F&(bull|#149|#8226);\u002Fi',                        \u002F\u002F Bullet\n+\t\t\t'\u002F&(pound|#163);\u002Fi',                             \u002F\u002F Pound sign\n+\t\t\t'\u002F&(euro|#8364);\u002Fi',                             \u002F\u002F Euro sign\n+\t\t\t'\u002F&#36;\u002F',                                       \u002F\u002F Dollar sign\n+\t\t\t'\u002F&[^&\\s;]+;\u002Fi',                                 \u002F\u002F Unknown\u002Funhandled entities\n+\t\t\t'\u002F[ ]{2,}\u002F',                                      \u002F\u002F Runs of spaces, post-handling\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t *  List of pattern replacements corresponding to patterns searched.\n+\t\t *\n+\t\t * @var array $replace\n+\t\t * @see $search\n+\t\t *\u002F\n+\t\tpublic $plain_replace = array(\n+\t\t\t'',                                             \u002F\u002F Non-legal carriage return\n+\t\t\t' ',                                            \u002F\u002F Non-breaking space\n+\t\t\t'\"',                                            \u002F\u002F Double quotes\n+\t\t\t\"'\",                                            \u002F\u002F Single quotes\n+\t\t\t'>',                                            \u002F\u002F Greater-than\n+\t\t\t'\u003C',                                            \u002F\u002F Less-than\n+\t\t\t'&',                                            \u002F\u002F Ampersand\n+\t\t\t'&',                                            \u002F\u002F Ampersand\n+\t\t\t'&',                                            \u002F\u002F Ampersand\n+\t\t\t'(c)',                                          \u002F\u002F Copyright\n+\t\t\t'(tm)',                                         \u002F\u002F Trademark\n+\t\t\t'(R)',                                          \u002F\u002F Registered\n+\t\t\t'--',                                           \u002F\u002F mdash\n+\t\t\t'-',                                            \u002F\u002F ndash\n+\t\t\t'*',                                            \u002F\u002F Bullet\n+\t\t\t'�',                                            \u002F\u002F Pound sign\n+\t\t\t'EUR',                                          \u002F\u002F Euro sign. � ?\n+\t\t\t'$',                                            \u002F\u002F Dollar sign\n+\t\t\t'',                                             \u002F\u002F Unknown\u002Funhandled entities\n+\t\t\t' ',                                             \u002F\u002F Runs of spaces, post-handling\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * List of pattern search corresponding to patterns replace.\n+\t\t *\n+\t\t * @var array text shortcode\n+\t\t *\u002F\n+\t\tpublic $text_search = array();\n+\n+\t\t\u002F**\n+\t\t * List of pattern to replace\n+\t\t *\n+\t\t * @var array text replace\n+\t\t *\u002F\n+\t\tpublic $text_replace = array();\n+\n+\t\t\u002F**\n+\t\t * Text message description\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $email_text_message_description = '';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $template_path = '';\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tpublic $variables = array();\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tpublic $general_variables = [];\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tpublic $support_variables = [];\n+\n+\t\t\u002F**\n+\t\t * @var LP_Settings\n+\t\t *\u002F\n+\t\tpublic $settings = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $email_format = 'html';\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tpublic $enable = false;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $group = '';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_option_id = '';\n+\n+\t\t\u002F**\n+\t\t * LP_Email constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t\u002F\u002F Set template base path to LP templates path if it is not set.\n+\t\t\tif ( empty( $this->template_base ) ) {\n+\t\t\t\t$this->template_base = LearnPress::instance()->plugin_path( 'templates\u002F' );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Set template folder if it is not set. Default is 'learnpress'\n+\t\t\t *\u002F\n+\t\t\tif ( empty( $this->template_path ) ) {\n+\t\t\t\t$this->template_path = learn_press_template_path();\n+\t\t\t}\n+\n+\t\t\tif ( empty( $this->template_html ) ) {\n+\t\t\t\t$this->template_html = \"emails\u002F{$this->id}.php\";\n+\t\t\t}\n+\n+\t\t\tif ( empty( $this->template_plain ) ) {\n+\t\t\t\t$this->template_plain = \"emails\u002Fplain\u002F{$this->id}.php\";\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->object ) {\n+\t\t\t\t$this->object = array();\n+\t\t\t}\n+\n+\t\t\t$this->_option_id = 'emails_' . $this->id;\n+\n+\t\t\t$this->settings = LP_Settings::instance()->get_group( $this->_option_id, '' );\n+\n+\t\t\t\u002F**\n+\t\t\t * Init general options\n+\t\t\t *\u002F\n+\t\t\t$this->heading = $this->settings->get( 'heading', $this->default_heading );\n+\t\t\t$this->subject = $this->settings->get( 'subject', $this->default_subject );\n+\t\t\t$this->enable  = $this->settings->get( 'enable', 'no' ) === 'yes';\n+\n+\t\t\t\u002F*if ( $this->settings->get( 'email_content.format' ) ) {\n+\t\t\t\t$this->email_format = ( $this->settings->get( 'email_content.format' ) == 'plain_text' ) ? 'plain' : 'html';\n+\t\t\t} else {\n+\t\t\t\tif ( LP_Settings::instance()->get( 'emails_general.default_email_content', 'html' ) ) {\n+\t\t\t\t\t$this->email_format = LP_Settings::instance()->get( 'emails_general.default_email_content', 'html' );\n+\t\t\t\t}\n+\t\t\t}*\u002F\n+\n+\t\t\t$email_formats = array( 'plain', 'html' );\n+\t\t\tif ( ! in_array( $this->email_format, $email_formats ) ) {\n+\t\t\t\t$this->email_format = 'html';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set type variables can click add to content of email setting.\n+\t\t\t$this->support_variables = [\n+\t\t\t\t'{{site_url}}',\n+\t\t\t\t'{{site_title}}',\n+\t\t\t\t'{{login_url}}',\n+\t\t\t\t'{{site_admin_email}}',\n+\t\t\t\t'{{site_admin_name}}',\n+\t\t\t\t'{{header}}',\n+\t\t\t\t'{{footer}}',\n+\t\t\t\t'{{footer_text}}',\n+\t\t\t];\n+\t\t\t$this->general_variables = $this->support_variables;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param null $value\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function enable( $value = null ): bool {\n+\t\t\tif ( is_bool( $value ) ) {\n+\t\t\t\t$this->enable = $value;\n+\n+\t\t\t\t\u002F\u002F Load default settings if the email is not configured\n+\t\t\t\tif ( ! $this->is_configured() ) {\n+\t\t\t\t\t$settings = $this->get_settings();\n+\n+\t\t\t\t\tforeach ( $settings as $field ) {\n+\t\t\t\t\t\tif ( $field['type'] == 'heading' || $field['type'] == 'title' || $field['type'] == 'sectionend' ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$id = str_replace( $this->_option_id, '', $field['id'] );\n+\t\t\t\t\t\t$id = str_replace( array( '[', ']' ), '', $id );\n+\n+\t\t\t\t\t\tif ( $id == 'email_content' ) {\n+\t\t\t\t\t\t\t$this->settings->set(\n+\t\t\t\t\t\t\t\t'email_content',\n+\t\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t\t'format' => 'html',\n+\t\t\t\t\t\t\t\t\t'plain'  => lp_get_email_content( 'plain', '', $field ),\n+\t\t\t\t\t\t\t\t\t'html'   => lp_get_email_content( 'html', '', $field ),\n+\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$this->settings->set( $id, $field['default'] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$this->settings->set( 'enable', $value ? 'yes' : 'no' );\n+\t\t\t\t$this->settings->update( 'learn_press_' . $this->_option_id, $this->settings->get() );\n+\t\t\t}\n+\n+\t\t\treturn $this->enable;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function is_configured() {\n+\t\t\treturn LP_Settings::instance()->get( $this->_option_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get variables support in mail.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_variables_support() {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-variables-support', $this->support_variables, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Magic function\n+\t\t *\n+\t\t * @param $key\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function __get( $key ) {\n+\t\t\tif ( ! empty( $this->{$key} ) ) {\n+\t\t\t\treturn $this->{$key};\n+\t\t\t} else {\n+\t\t\t\treturn $this->settings->get( $key );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tprivate function is_current() {\n+\t\t\treturn ! empty( $_REQUEST['section'] ) && sanitize_text_field( $_REQUEST['section'] ) == $this->id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $options\n+\t\t * @param $key\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function _remove_email_content_from_option( $options, $key ) {\n+\t\t\tif ( ! $this->is_current() ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( is_array( $options ) && ( array_key_exists( 'email_content_html', $options ) || array_key_exists( 'email_content_plain', $options ) ) ) {\n+\n+\t\t\t\tif ( array_key_exists( 'email_content_html', $options ) ) {\n+\t\t\t\t\t$this->save_template( $options['email_content_html'], $this->template_html );\n+\t\t\t\t\tunset( $options['email_content_html'] );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( array_key_exists( 'email_content_plain', $options ) ) {\n+\t\t\t\t\t$this->save_template( $options['email_content_plain'], $this->template_plain );\n+\t\t\t\t\tunset( $options['email_content_plain'] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $options;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Apply the value of variables for string\n+\t\t *\n+\t\t * @param string $value\n+\t\t *\n+\t\t * @return string\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function format_string( string $value ): string {\n+\t\t\t$search  = [];\n+\t\t\t$replace = [];\n+\t\t\tif ( is_array( $this->variables ) ) {\n+\t\t\t\t$search  = array_keys( $this->variables );\n+\t\t\t\t$replace = array_values( $this->variables );\n+\t\t\t}\n+\t\t\t$search  = apply_filters( 'learn-press\u002Femail-format-string-find', $search, $this );\n+\t\t\t$replace = apply_filters( 'learn-press\u002Femail-format-string-replace', $replace, $this );\n+\n+\t\t\treturn str_replace( $search, $replace, $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email recipient.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_recipient() {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-recipient-' . $this->id, $this->recipient, $this->object );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email subject.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_subject(): string {\n+\t\t\treturn $this->format_string( $this->subject );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email content.\n+\t\t *\n+\t\t * @return string\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function get_content(): string {\n+\t\t\t$email_format = $this->get_email_format();\n+\n+\t\t\tif ( 'plain' == $email_format ) {\n+\t\t\t\t$email_content = preg_replace( $this->plain_search, $this->plain_replace, strip_tags( $this->get_content_plain() ) );\n+\t\t\t} elseif ( in_array( $email_format, array( 'html', 'multipart' ) ) ) {\n+\t\t\t\t$email_content = $this->get_content_html();\n+\t\t\t} else {\n+\t\t\t\t$email_content = preg_replace( $this->text_search, $this->text_replace, $this->get_content_text_message() );\n+\t\t\t}\n+\n+\t\t\t$email_content = $this->format_string( $email_content );\n+\n+\t\t\treturn wordwrap( $email_content, 70 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email heading.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_heading(): string {\n+\t\t\treturn $this->format_string( $this->heading );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email footer text.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_footer_text(): string {\n+\t\t\t$text = LP_Settings::instance()->get( 'emails_general.footer_text', '' );\n+\n+\t\t\treturn LP_Helper::sanitize_params_submitted( $text, 'html' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email content HTML.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_content_html(): string {\n+\t\t\t$template      = $this->get_template( 'template_html' );\n+\t\t\t$template_file = $this->template_base . $template;\n+\t\t\t$content       = $this->settings->get( 'email_content.html', file_get_contents( $template_file ) );\n+\n+\t\t\treturn stripslashes( $content );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email content plain.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_content_plain(): string {\n+\t\t\t$template      = $this->get_template( 'template_plain' );\n+\t\t\t$template_file = $this->template_base . $template;\n+\t\t\t$content_tmp   = LP_WP_Filesystem::instance()->file_get_contents( $template_file );\n+\t\t\t$content       = $this->settings->get( 'email_content.plain', $content_tmp );\n+\t\t\t$content       = stripslashes( $content );\n+\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get content context message.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_content_text_message(): string {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-text-message-' . $this->id, $this->settings->get( 'content_text_message' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email headers.\n+\t\t *\n+\t\t * @return string|array\n+\t\t *\u002F\n+\t\tpublic function get_headers() {\n+\t\t\t$headers = [\n+\t\t\t\t'Content-Type: ' . $this->get_content_format() . \"\\r\\n\",\n+\t\t\t];\n+\n+\t\t\t$recipients = $this->settings->get( 'recipients', $this->recipients );\n+\n+\t\t\tif ( ! empty( $recipients ) ) {\n+\t\t\t\t$cc_emails = explode( ',', $recipients );\n+\t\t\t\tforeach ( $cc_emails as $cc_email ) {\n+\t\t\t\t\t$headers[] = 'Cc: ' . $cc_email;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-headers', $headers, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email attachments.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_attachments() {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-attachments', array(), $this->id, $this->object );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get FROM address. Default is admin email.\n+\t\t *\n+\t\t * @return string\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4 - comment - not override hook\n+\t\t *\u002F\n+\t\t\u002F*public function get_from_address(): string {\n+\t\t\t$email = LP_Settings::instance()->get( 'emails_general.from_email', get_option( 'admin_email' ) );\n+\n+\t\t\treturn sanitize_email( $email );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get FROM name. Default is Blog name.\n+\t\t *\n+\t\t * @return string\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_from_name(): string {\n+\t\t\t$name = LP_Settings::instance()->get( 'emails_general.from_name', get_option( 'blogname' ) );\n+\n+\t\t\treturn LP_Helper::sanitize_params_submitted( $name );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get WP Blog name.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_blogname() {\n+\t\t\treturn wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email content format.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_content_format() {\n+\t\t\tswitch ( $this->get_email_format() ) {\n+\t\t\t\tcase 'text_message':\n+\t\t\t\tcase 'html':\n+\t\t\t\t\treturn 'text\u002Fhtml';\n+\t\t\t\tcase 'multipart':\n+\t\t\t\t\treturn 'multipart\u002Falternative';\n+\t\t\t\tdefault:\n+\t\t\t\t\treturn 'text\u002Fplain';\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_email_format() {\n+\t\t\treturn $this->email_format && class_exists( 'DOMDocument' ) ? $this->email_format : 'plain';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Apply css from external to inline.\n+\t\t *\n+\t\t * @param string $content\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function apply_style_inline( $content ): string {\n+\t\t\ttry {\n+\t\t\t\tif ( ! in_array( $this->get_content_format(), array( 'text\u002Fhtml', 'multipart\u002Falternative' ) ) ) {\n+\t\t\t\t\treturn $content;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Get CSS styles\n+\t\t\t\tob_start();\n+\t\t\t\tlearn_press_get_template( 'emails\u002Femail-styles.php' );\n+\t\t\t\t$css = apply_filters( 'learn_press_email_styles', ob_get_clean(), $this->id, $this );\n+\n+\t\t\t\t\u002F\u002F Apply CSS styles inline for picky email clients\n+\t\t\t\t\u002F\u002F$content = CssInliner::fromHtml( $content )->inlineCss( $css )->render();\n+\t\t\t\t$cssToInlineStyles = new CssToInlineStyles();\n+\t\t\t\t$content           = $cssToInlineStyles->convert( $content, $css );\n+\t\t\t} catch ( Exception $e ) {\n+\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-content-inline-style', $content, $this->id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get template file from type.\n+\t\t *\n+\t\t * @param string $type\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_template( $type ) {\n+\t\t\t$type = esc_attr( basename( $type ) );\n+\n+\t\t\tif ( 'template_html' == $type ) {\n+\t\t\t\treturn $this->template_html;\n+\t\t\t} elseif ( 'template_plain' == $type ) {\n+\t\t\t\treturn $this->template_plain;\n+\t\t\t}\n+\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tprotected function save_template( $code, $path ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get template file.\n+\t\t *\n+\t\t * @param string $template\n+\t\t * @param string $template_path\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_theme_template_file( $template, $template_path = null ) {\n+\t\t\t$template_dir = apply_filters( 'learn-press\u002Ftemplate-directory', $template_path ? $template_path : learn_press_template_path(), $template );\n+\n+\t\t\treturn join(\n+\t\t\t\t'',\n+\t\t\t\tarray(\n+\t\t\t\t\ttrailingslashit( get_stylesheet_directory() ),\n+\t\t\t\t\ttrailingslashit( $template_dir ),\n+\t\t\t\t\t$template,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Send email.\n+\t\t *\n+\t\t * @param string|array $to\n+\t\t * @param string $subject\n+\t\t * @param string $message\n+\t\t * @param string|string[] $headers\n+\t\t * @param array $attachments\n+\t\t *\n+\t\t * @editor tungnx\n+\t\t * @return bool\n+\t\t * @version 1.0.1\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function send( $to, string $subject, string $message, $headers, array $attachments ): bool {\n+\t\t\t$return  = false;\n+\t\t\t$message = apply_filters( 'learn-press\u002Femail-content', $this->apply_style_inline( $message ), $this );\n+\n+\t\t\tif ( is_string( $to ) ) {\n+\t\t\t\t$to = preg_split( '~\\s?,\\s?~', $to );\n+\n+\t\t\t\t$return = wp_mail( $to, $subject, $message, $headers, $attachments );\n+\t\t\t} elseif ( is_array( $to ) ) {\n+\t\t\t\tforeach ( $to as $t ) {\n+\t\t\t\t\t$return = wp_mail( $t, $subject, $message, $headers, $attachments );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all values set and send email\n+\t\t *\n+\t\t * @author tungnx\n+\t\t * @since 4.1.3\n+\t\t *\u002F\n+\t\tpublic function send_email(): bool {\n+\t\t\tadd_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) );\n+\t\t\tadd_filter( 'wp_mail_content_type', array( $this, 'get_content_format' ) );\n+\n+\t\t\treturn $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get common variables.\n+\t\t * Variables use for click add to content of Email\n+\t\t *\n+\t\t * @param string $format\n+\t\t *\n+\t\t * @return array\n+\t\t * @author tungnx\n+\t\t * @since 4.1.1\n+\t\t *\u002F\n+\t\tpublic function get_common_variables( string $format = 'plain' ): array {\n+\t\t\t$heading     = strip_tags( $this->get_heading() );\n+\t\t\t$footer_text = strip_tags( $this->get_footer_text() );\n+\n+\t\t\t$header = $heading;\n+\t\t\t$footer = $footer_text;\n+\n+\t\t\tif ( $format != 'plain' ) {\n+\t\t\t\t$header = $this->email_header( $heading );\n+\t\t\t\t$footer = $this->email_footer( $footer_text );\n+\t\t\t}\n+\n+\t\t\t$admin_user = get_user_by( 'email', get_option( 'admin_email' ) );\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'email_variables_common',\n+\t\t\t\t[\n+\t\t\t\t\t'{{header}}'           => $header,\n+\t\t\t\t\t'{{footer}}'           => $footer,\n+\t\t\t\t\t'{{footer_text}}'      => $footer_text,\n+\t\t\t\t\t'{{site_url}}'         => get_home_url(),\n+\t\t\t\t\t'{{site_title}}'       => $this->get_blogname(),\n+\t\t\t\t\t'{{site_admin_email}}' => get_option( 'admin_email' ),\n+\t\t\t\t\t'{{site_admin_name}}'  => learn_press_get_profile_display_name( $admin_user ),\n+\t\t\t\t\t'{{login_url}}'        => learn_press_get_login_url(),\n+\t\t\t\t\t'{{plain_text}}'       => $format == 'plain',\n+\t\t\t\t]\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $name\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_field_name( $name ) {\n+\t\t\treturn $this->_option_id . \"[$name]\";\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Default options for all emails.\n+\t\t * Almost the emails are the same with options.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprotected function _default_settings(): array {\n+\t\t\t\u002F**\n+\t\t\t * In case the email is not for sending to specific admin (like user who has bought course or author of course, etc..)\n+\t\t\t * So, we do not need this field.\n+\t\t\t *\u002F\n+\n+\t\t\t$enable_recipients = $this->enable_recipients;\n+\n+\t\t\t$default = array_merge(\n+\t\t\t\tarray(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type' => 'title',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'   => esc_html__( 'Enable\u002FDisable', 'learnpress' ),\n+\t\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t\t\t'default' => 'no',\n+\t\t\t\t\t\t'id'      => $this->get_field_name( 'enable' ),\n+\t\t\t\t\t\t'desc'    => $this->description,\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t$enable_recipients ? array(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'   => esc_html__( 'Recipient(s)', 'learnpress' ),\n+\t\t\t\t\t\t'type'    => 'text',\n+\t\t\t\t\t\t'default' => $this->recipients,\n+\t\t\t\t\t\t'id'      => $this->get_field_name( 'recipients' ),\n+\t\t\t\t\t\t'desc'    => esc_html__( 'Separate other recipients with commas.', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t) : array(),\n+\t\t\t\tarray(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'   => esc_html__( 'Subject', 'learnpress' ),\n+\t\t\t\t\t\t'type'    => 'text',\n+\t\t\t\t\t\t'default' => $this->default_subject,\n+\t\t\t\t\t\t'id'      => $this->get_field_name( 'subject' ),\n+\t\t\t\t\t\t'css'     => 'width:400px',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'   => esc_html__( 'Email heading', 'learnpress' ),\n+\t\t\t\t\t\t'type'    => 'text',\n+\t\t\t\t\t\t'default' => $this->default_heading,\n+\t\t\t\t\t\t'id'      => $this->get_field_name( 'heading' ),\n+\t\t\t\t\t\t'css'     => 'width:400px',\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'                => esc_html__( 'Content', 'learnpress' ),\n+\t\t\t\t\t\t'type'                 => 'email-content',\n+\t\t\t\t\t\t'default'              => '',\n+\t\t\t\t\t\t'id'                   => $this->get_field_name( 'email_content' ),\n+\t\t\t\t\t\t'template_base'        => $this->template_base,\n+\t\t\t\t\t\t'template_path'        => $this->template_path,\n+\t\t\t\t\t\t'template_html'        => $this->template_html,\n+\t\t\t\t\t\t'template_plain'       => $this->template_plain,\n+\t\t\t\t\t\t'template_html_local'  => $this->get_theme_template_file( 'html', $this->template_path ),\n+\t\t\t\t\t\t'template_plain_local' => $this->get_theme_template_file( 'plain', $this->template_path ),\n+\t\t\t\t\t\t'support_variables'    => $this->get_variables_support(),\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'type' => 'sectionend',\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $default;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get settings in admin.\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function get_settings() {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail-settings\u002F' . $this->id . '\u002Fsettings', $this->_default_settings() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instructors to send mail.\n+\t\t *\n+\t\t * @param null $order_id\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function get_order_instructors( $order_id ) {\n+\t\t\tif ( ! $order_id ) {\n+\t\t\t\treturn array();\n+\t\t\t}\n+\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\n+\t\t\t$items       = $order->get_items();\n+\t\t\t$instructors = array();\n+\n+\t\t\tif ( count( $items ) ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\tif ( ! isset( $item['course_id'] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$user_id = get_post_field( 'post_author', $item['course_id'] );\n+\t\t\t\t\tif ( $user_id ) {\n+\t\t\t\t\t\t$instructors[] = $user_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $instructors;\n+\t\t}\n+\n+\t\tprotected function _get_admin_email() {\n+\t\t\treturn apply_filters( 'learn-press\u002Femail\u002Fadmin-email', get_option( 'admin_email' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function __toString() {\n+\t\t\treturn $this->title;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get image header in general settings.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_image_header(): string {\n+\t\t\t$image = LP_Settings::instance()->get( 'emails_general.header_image', '' );\n+\n+\t\t\tif ( ! empty( $image ) ) {\n+\t\t\t\t$image = wp_get_attachment_image_url( $image, 'full' );\n+\t\t\t}\n+\n+\t\t\treturn $image;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Email header.\n+\t\t *\n+\t\t * @param string $heading\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function email_header( string $heading ): string {\n+\t\t\tob_start();\n+\t\t\tlearn_press_get_template(\n+\t\t\t\t'emails\u002Femail-header.php',\n+\t\t\t\t[\n+\t\t\t\t\t'email_heading' => $heading,\n+\t\t\t\t\t'image_header'  => $this->get_image_header(),\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Email footer.\n+\t\t *\n+\t\t * @param string $footer_text\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function email_footer( string $footer_text ): string {\n+\t\t\tob_start();\n+\t\t\tlearn_press_get_template( 'emails\u002Femail-footer.php', array( 'footer_text' => $footer_text ) );\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set receive email\n+\t\t *\n+\t\t * @param string $receive_email\n+\t\t *\u002F\n+\t\tpublic function set_receive( string $receive_email ) {\n+\t\t\t$this->recipient = $receive_email;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Method called by background on LP_Background_Single_Email\n+\t\t *\n+\t\t * @param array $params\n+\t\t *\n+\t\t * @see LP_Background_Single_Email::handle()\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-cancelled-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Cancelled_Order_Guest.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Cancelled_Order_Guest' ) ) {\r\n-\tclass LP_Email_Cancelled_Order_Guest extends LP_Email_Type_Order_Guest {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Cancelled_Order_Guest constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'cancelled-order-guest';\r\n-\t\t\t$this->title       = __( 'Guest', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send an email to the guest when the order has been cancelled.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has been cancelled', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your order has been cancelled', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Cancelled_Order_Guest();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Cancelled_Order_Guest.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Cancelled_Order_Guest' ) ) {\n+\tclass LP_Email_Cancelled_Order_Guest extends LP_Email_Type_Order_Guest {\n+\t\t\u002F**\n+\t\t * LP_Email_Cancelled_Order_Guest constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'cancelled-order-guest';\n+\t\t\t$this->title       = __( 'Guest', 'learnpress' );\n+\t\t\t$this->description = __( 'Send an email to the guest when the order has been cancelled.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has been cancelled', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your order has been cancelled', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Cancelled_Order_Guest();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-completed-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Completed_Order_Guest\r\n- *\r\n- * Send email to customer in case they checkout as a guest.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Completed_Order_Guest' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Completed_Order_Guest\r\n-\t *\u002F\r\n-\tclass LP_Email_Completed_Order_Guest extends LP_Email_Type_Order_Guest {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Completed_Order_Guest constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'completed-order-guest';\r\n-\t\t\t$this->title       = __( 'Guest', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send an email to the user who has bought the course as a guest.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has completed', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your order has completed', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Completed_Order_Guest();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Completed_Order_Guest\n+ *\n+ * Send email to customer in case they checkout as a guest.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Completed_Order_Guest' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Completed_Order_Guest\n+\t *\u002F\n+\tclass LP_Email_Completed_Order_Guest extends LP_Email_Type_Order_Guest {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_Completed_Order_Guest constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'completed-order-guest';\n+\t\t\t$this->title       = __( 'Guest', 'learnpress' );\n+\t\t\t$this->description = __( 'Send an email to the user who has bought the course as a guest.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has completed', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your order has completed', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Completed_Order_Guest();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-new-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-new-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-new-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-new-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_New_Order_Guest.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_New_Order_Guest' ) ) {\r\n-\tclass LP_Email_New_Order_Guest extends LP_Email_Type_Order_Guest {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_New_Order_Guest constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'new-order-guest';\r\n-\t\t\t$this->title       = __( 'Guest', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send an email to the user who has bought the course as a guest.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order has been placed on {{order_date}}', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_New_Order_Guest();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_New_Order_Guest.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_New_Order_Guest' ) ) {\n+\tclass LP_Email_New_Order_Guest extends LP_Email_Type_Order_Guest {\n+\t\t\u002F**\n+\t\t * LP_Email_New_Order_Guest constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'new-order-guest';\n+\t\t\t$this->title       = __( 'Guest', 'learnpress' );\n+\t\t\t$this->description = __( 'Send an email to the user who has bought the course as a guest.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Your order has been placed on {{order_date}}', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_New_Order_Guest();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fguest\u002Fclass-lp-email-processing-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Processing_Order_Guest.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @version 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Processing_Order_Guest' ) ) {\r\n-\tclass LP_Email_Processing_Order_Guest extends LP_Email_Type_Order_Guest {\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'processing-order-guest';\r\n-\t\t\t$this->title       = __( 'Guest', 'learnpress' );\r\n-\t\t\t$this->description = __( 'When the order is processed, send an email to the user who purchased the course as a guest.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been processing', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Processing_Order_Guest();\r\n-}\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Processing_Order_Guest.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @version 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Processing_Order_Guest' ) ) {\n+\tclass LP_Email_Processing_Order_Guest extends LP_Email_Type_Order_Guest {\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'processing-order-guest';\n+\t\t\t$this->title       = __( 'Guest', 'learnpress' );\n+\t\t\t$this->description = __( 'When the order is processed, send an email to the user who purchased the course as a guest.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been processing', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Processing_Order_Guest();\n+}\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-cancelled-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Cancelled_Order_Instructor.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Cancelled_Order_Instructor' ) ) {\r\n-\tclass LP_Email_Cancelled_Order_Instructor extends LP_Email_Type_Order_Instructor {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Cancelled_Order_Instructor constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'cancelled-order-instructor';\r\n-\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send an email to the course instructor when the order has been cancelled.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been cancelled', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user order has been cancelled', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Cancelled_Order_Instructor();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Cancelled_Order_Instructor.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Cancelled_Order_Instructor' ) ) {\n+\tclass LP_Email_Cancelled_Order_Instructor extends LP_Email_Type_Order_Instructor {\n+\t\t\u002F**\n+\t\t * LP_Email_Cancelled_Order_Instructor constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'cancelled-order-instructor';\n+\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\n+\t\t\t$this->description = __( 'Send an email to the course instructor when the order has been cancelled.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been cancelled', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user order has been cancelled', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Cancelled_Order_Instructor();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-enrolled-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Enrolled_Course_Instructor.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Enrolled_Course_Instructor' ) ) {\r\n-\tclass LP_Email_Enrolled_Course_Instructor extends LP_Email_Type_Enrolled_Course {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Enrolled_Course_Instructor constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'enrolled-course-instructor';\r\n-\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send this email to the instructor when they have enrolled in the course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '{{user_display_name}} has enrolled in the course', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user has enrolled in the course', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Trigger email.\r\n-\t\t * Receive 2 params: order_id, old_status\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.1.1\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->check_and_set( $params ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data_content();\r\n-\t\t\t$this->set_receive( $this->_course->get_author()->get_email() );\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Enrolled_Course_Instructor();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Enrolled_Course_Instructor.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Enrolled_Course_Instructor' ) ) {\n+\tclass LP_Email_Enrolled_Course_Instructor extends LP_Email_Type_Enrolled_Course {\n+\t\t\u002F**\n+\t\t * LP_Email_Enrolled_Course_Instructor constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'enrolled-course-instructor';\n+\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\n+\t\t\t$this->description = __( 'Send this email to the instructor when they have enrolled in the course.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '{{user_display_name}} has enrolled in the course', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user has enrolled in the course', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Trigger email.\n+\t\t * Receive 2 params: order_id, old_status\n+\t\t *\n+\t\t * @param array $params\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.1.1\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->check_and_set( $params ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->set_data_content();\n+\t\t\t$this->set_receive( $this->_course->get_author()->get_email() );\n+\t\t\t$this->send_email();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Enrolled_Course_Instructor();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-finished-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Finished_Course_Instructor.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Finished_Course_Instructor' ) ) {\r\n-\tclass LP_Email_Finished_Course_Instructor extends LP_Email_Type_Finished_Course {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Finished_Course_Instructor constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'finished-course-instructor';\r\n-\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send this email to the instructor when they have finished the course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '{{user_display_name}} has completed the course.', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'The user has completed the course.', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Finished_Course_Instructor();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Finished_Course_Instructor.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Finished_Course_Instructor' ) ) {\n+\tclass LP_Email_Finished_Course_Instructor extends LP_Email_Type_Finished_Course {\n+\t\t\u002F**\n+\t\t * LP_Email_Finished_Course_Instructor constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'finished-course-instructor';\n+\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\n+\t\t\t$this->description = __( 'Send this email to the instructor when they have finished the course.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '{{user_display_name}} has completed the course.', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'The user has completed the course.', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Finished_Course_Instructor();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-accepted.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Instructor_Accepted\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Instructor_Accepted' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Email_Instructor_Accepted\r\n-\t *\u002F\r\n-\tclass LP_Email_Instructor_Accepted extends LP_Email_Type_Become_An_Instructor {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Instructor_Accepted constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'instructor-accepted';\r\n-\t\t\t$this->title       = __( 'Accepted', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Your email requesting to become an instructor has been accepted.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '[{{site_title}}] Your request to become an instructor has been accepted', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your email requesting to become an instructor has been accepted.', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Email_Instructor_Accepted();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Instructor_Accepted\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Instructor_Accepted' ) ) {\n+\t\u002F**\n+\t * Class LP_Email_Instructor_Accepted\n+\t *\u002F\n+\tclass LP_Email_Instructor_Accepted extends LP_Email_Type_Become_An_Instructor {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_Instructor_Accepted constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'instructor-accepted';\n+\t\t\t$this->title       = __( 'Accepted', 'learnpress' );\n+\t\t\t$this->description = __( 'Your email requesting to become an instructor has been accepted.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '[{{site_title}}] Your request to become an instructor has been accepted', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your email requesting to become an instructor has been accepted.', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+}\n+\n+return new LP_Email_Instructor_Accepted();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-instructor-denied.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Instructor_Denied\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @author tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Instructor_Denied' ) ) {\r\n-\tclass LP_Email_Instructor_Denied extends LP_Email_Type_Become_An_Instructor {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Instructor_Denied constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'instructor-denied';\r\n-\t\t\t$this->title       = __( 'Denied', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Your email requesting to become an instructor has been denied.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '[{{site_title}}] Your request to become an instructor has been denied', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your request to become an instructor has been denied', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Email_Instructor_Denied();\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Instructor_Denied\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @author tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Instructor_Denied' ) ) {\n+\tclass LP_Email_Instructor_Denied extends LP_Email_Type_Become_An_Instructor {\n+\t\t\u002F**\n+\t\t * LP_Email_Instructor_Denied constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'instructor-denied';\n+\t\t\t$this->title       = __( 'Denied', 'learnpress' );\n+\t\t\t$this->description = __( 'Your email requesting to become an instructor has been denied.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '[{{site_title}}] Your request to become an instructor has been denied', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your request to become an instructor has been denied', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+}\n+\n+return new LP_Email_Instructor_Denied();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Finstructor\u002Fclass-lp-email-new-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Email for instructor when has new order.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_New_Order_Instructor' ) ) {\r\n-\tclass LP_Email_New_Order_Instructor extends LP_Email_Type_Order_Instructor {\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'new-order-instructor';\r\n-\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Notify instructors when a user enrolls in one of their courses.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Instructor - New order placed on {{order_date}}', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'New user order', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_New_Order_Instructor();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Email for instructor when has new order.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_New_Order_Instructor' ) ) {\n+\tclass LP_Email_New_Order_Instructor extends LP_Email_Type_Order_Instructor {\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'new-order-instructor';\n+\t\t\t$this->title       = __( 'Instructor', 'learnpress' );\n+\t\t\t$this->description = __( 'Notify instructors when a user enrolls in one of their courses.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Instructor - New order placed on {{order_date}}', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'New user order', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_New_Order_Instructor();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-cancelled-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Cancelled_Order_User.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Cancelled_Order_User' ) ) {\r\n-\tclass LP_Email_Cancelled_Order_User extends LP_Email_Type_Order_Student {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Cancelled_Order_User constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'cancelled-order-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send an email to the user when the order has been cancelled.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has been cancelled', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your order has been cancelled', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Cancelled_Order_User();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Cancelled_Order_User.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Cancelled_Order_User' ) ) {\n+\tclass LP_Email_Cancelled_Order_User extends LP_Email_Type_Order_Student {\n+\t\t\u002F**\n+\t\t * LP_Email_Cancelled_Order_User constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'cancelled-order-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __( 'Send an email to the user when the order has been cancelled.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has been cancelled', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your order has been cancelled', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Cancelled_Order_User();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-completed-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Completed_Order_User\r\n- *\r\n- * Send email to customer in case they checkout after login.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Completed_Order_User' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Completed_Order_User\r\n-\t *\u002F\r\n-\tclass LP_Email_Completed_Order_User extends LP_Email_Type_Order_Student {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Completed_Order_User constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'completed-order-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __(\r\n-\t\t\t\t'Send an email to the user who has bought the course when the order is completed.',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has completed', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Your order has completed', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Completed_Order_User();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Completed_Order_User\n+ *\n+ * Send email to customer in case they checkout after login.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Completed_Order_User' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Completed_Order_User\n+\t *\u002F\n+\tclass LP_Email_Completed_Order_User extends LP_Email_Type_Order_Student {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_Completed_Order_User constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'completed-order-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __(\n+\t\t\t\t'Send an email to the user who has bought the course when the order is completed.',\n+\t\t\t\t'learnpress'\n+\t\t\t);\n+\n+\t\t\t$this->default_subject = __( 'Your order on {{order_date}} has completed', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Your order has completed', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Completed_Order_User();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-enrolled-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Enrolled_Course_User.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Enrolled_Course_User' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Enrolled_Course_User\r\n-\t *\u002F\r\n-\tclass LP_Email_Enrolled_Course_User extends LP_Email_Type_Enrolled_Course {\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_Enrolled_Course_User constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'enrolled-course-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send this email to the user when they have enrolled in the course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '[{{site_title}}] You have enrolled in the course', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'You have enrolled in the course', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Trigger email.\r\n-\t\t * Receive 2 params: order_id, old_status\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.1.1\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->check_and_set( $params ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_email = '';\r\n-\t\t\tif ( $this->_user ) {\r\n-\t\t\t\t$user_email = $this->_user->get_email();\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_email = $this->_order->get_user_email();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data_content();\r\n-\t\t\t$this->set_receive( $user_email );\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Email_Enrolled_Course_User();\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Enrolled_Course_User.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Enrolled_Course_User' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Enrolled_Course_User\n+\t *\u002F\n+\tclass LP_Email_Enrolled_Course_User extends LP_Email_Type_Enrolled_Course {\n+\t\t\u002F**\n+\t\t * LP_Email_Enrolled_Course_User constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'enrolled-course-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __( 'Send this email to the user when they have enrolled in the course.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '[{{site_title}}] You have enrolled in the course', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'You have enrolled in the course', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Trigger email.\n+\t\t * Receive 2 params: order_id, old_status\n+\t\t *\n+\t\t * @param array $params\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.1.1\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->check_and_set( $params ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$user_email = '';\n+\t\t\tif ( $this->_user ) {\n+\t\t\t\t$user_email = $this->_user->get_email();\n+\t\t\t} else {\n+\t\t\t\t$user_email = $this->_order->get_user_email();\n+\t\t\t}\n+\n+\t\t\t$this->set_data_content();\n+\t\t\t$this->set_receive( $user_email );\n+\t\t\t$this->send_email();\n+\t\t}\n+\t}\n+}\n+\n+return new LP_Email_Enrolled_Course_User();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-finished-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Finished_Course_User.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Finished_Course_User' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Finished_Course_User\r\n-\t *\u002F\r\n-\tclass LP_Email_Finished_Course_User extends LP_Email_Type_Finished_Course {\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'finished-course-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Send this email to the user when they have finished the course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( '[{{site_title}}] You have finished the course', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'You have finished the course', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Finished_Course_User();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Finished_Course_User.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Finished_Course_User' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Finished_Course_User\n+\t *\u002F\n+\tclass LP_Email_Finished_Course_User extends LP_Email_Type_Finished_Course {\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'finished-course-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __( 'Send this email to the user when they have finished the course.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( '[{{site_title}}] You have finished the course', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'You have finished the course', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Finished_Course_User();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-new-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-new-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-new-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-new-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Email for user when has new order.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_New_Order_User' ) ) {\r\n-\tclass LP_Email_New_Order_User extends LP_Email_Type_Order_Student {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Email_New_Order_User constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'new-order-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Notify users when they successfully enroll in a course.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'Your order has been placed on {{order_date}}', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_New_Order_User();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Email for user when has new order.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_New_Order_User' ) ) {\n+\tclass LP_Email_New_Order_User extends LP_Email_Type_Order_Student {\n+\n+\t\t\u002F**\n+\t\t * LP_Email_New_Order_User constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'new-order-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __( 'Notify users when they successfully enroll in a course.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'Your order has been placed on {{order_date}}', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_New_Order_User();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Fstudent\u002Fclass-lp-email-processing-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Processing_Order_User.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email_Type_Order\r\n- * @version 3.0.1\r\n- * @editor tungnx\r\n- * @version 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Processing_Order_User' ) ) {\r\n-\tclass LP_Email_Processing_Order_User extends LP_Email_Type_Order_Student {\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'processing-order-user';\r\n-\t\t\t$this->title       = __( 'User', 'learnpress' );\r\n-\t\t\t$this->description = __( 'Notify users when their course orders are being processed.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been processing', 'learnpress' );\r\n-\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Processing_Order_User();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Processing_Order_User.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email_Type_Order\n+ * @version 3.0.1\n+ * @editor tungnx\n+ * @version 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Processing_Order_User' ) ) {\n+\tclass LP_Email_Processing_Order_User extends LP_Email_Type_Order_Student {\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'processing-order-user';\n+\t\t\t$this->title       = __( 'User', 'learnpress' );\n+\t\t\t$this->description = __( 'Notify users when their course orders are being processed.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = __( 'The order placed on {{order_date}} has been processing', 'learnpress' );\n+\t\t\t$this->default_heading = __( 'Thank you for your order', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Processing_Order_User();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-reset-password.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Reset_Password\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.1.5\r\n- * @author Nhamdv\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Reset_Password' ) ) {\r\n-\tclass LP_Email_Reset_Password extends LP_Email {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->id          = 'reset-password';\r\n-\t\t\t$this->title       = esc_html__( 'Reset Password', 'learnpress' );\r\n-\t\t\t$this->description = esc_html__( 'Password Reset Email.', 'learnpress' );\r\n-\r\n-\t\t\t$this->default_subject = esc_html__( '[{{site_title}}] Reset Password', 'learnpress' );\r\n-\t\t\t$this->default_heading = esc_html__( 'Reset Password', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Freset-password\u002Fvariables-support',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'{{user_login}}',\r\n-\t\t\t\t\t'{{user_email}}',\r\n-\t\t\t\t\t'{{user_id}}',\r\n-\t\t\t\t\t'{{reset_key}}',\r\n-\t\t\t\t\t'{{reset_link}}',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * @param array $params\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->enable ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( count( $params ) \u003C 1 ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->set_data_content( $params ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set data content\r\n-\t\t *\u002F\r\n-\t\tpublic function set_data_content( $params ): bool {\r\n-\t\t\t$user_login = $params['user_login'] ?? '';\r\n-\t\t\t$reset_key  = $params['reset_key'] ?? '';\r\n-\r\n-\t\t\t$user = get_user_by( 'login', $user_login );\r\n-\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$locale = get_user_locale( $user );\r\n-\r\n-\t\t\t$this->variables = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Ftype-reset-password\u002Fvariables-mapper',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'{{user_login}}' => $user_login,\r\n-\t\t\t\t\t'{{user_email}}' => stripslashes( $user->user_email ),\r\n-\t\t\t\t\t'{{user_id}}'    => $user->ID,\r\n-\t\t\t\t\t'{{reset_key}}'  => $reset_key,\r\n-\t\t\t\t\t'{{reset_link}}' => network_site_url( 'wp-login.php?action=rp&key=' . $reset_key . '&login=' . rawurlencode( $user_login ), 'login' ) . '&wp_lang=' . $locale,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->set_receive( $user->user_email );\r\n-\r\n-\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn new LP_Email_Reset_Password();\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Reset_Password\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.1.5\n+ * @author Nhamdv\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Reset_Password' ) ) {\n+\tclass LP_Email_Reset_Password extends LP_Email {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->id          = 'reset-password';\n+\t\t\t$this->title       = esc_html__( 'Reset Password', 'learnpress' );\n+\t\t\t$this->description = esc_html__( 'Password Reset Email.', 'learnpress' );\n+\n+\t\t\t$this->default_subject = esc_html__( '[{{site_title}}] Reset Password', 'learnpress' );\n+\t\t\t$this->default_heading = esc_html__( 'Reset Password', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\n+\t\t\t$variable_on_email_support = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Freset-password\u002Fvariables-support',\n+\t\t\t\tarray(\n+\t\t\t\t\t'{{user_login}}',\n+\t\t\t\t\t'{{user_email}}',\n+\t\t\t\t\t'{{user_id}}',\n+\t\t\t\t\t'{{reset_key}}',\n+\t\t\t\t\t'{{reset_link}}',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * @param array $params\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->enable ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( count( $params ) \u003C 1 ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->set_data_content( $params ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->send_email();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set data content\n+\t\t *\u002F\n+\t\tpublic function set_data_content( $params ): bool {\n+\t\t\t$user_login = $params['user_login'] ?? '';\n+\t\t\t$reset_key  = $params['reset_key'] ?? '';\n+\n+\t\t\t$user = get_user_by( 'login', $user_login );\n+\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$locale = get_user_locale( $user );\n+\n+\t\t\t$this->variables = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Ftype-reset-password\u002Fvariables-mapper',\n+\t\t\t\tarray(\n+\t\t\t\t\t'{{user_login}}' => $user_login,\n+\t\t\t\t\t'{{user_email}}' => stripslashes( $user->user_email ),\n+\t\t\t\t\t'{{user_id}}'    => $user->ID,\n+\t\t\t\t\t'{{reset_key}}'  => $reset_key,\n+\t\t\t\t\t'{{reset_link}}' => network_site_url( 'wp-login.php?action=rp&key=' . $reset_key . '&login=' . rawurlencode( $user_login ), 'login' ) . '&wp_lang=' . $locale,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$this->set_receive( $user->user_email );\n+\n+\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\n+\t\t\treturn true;\n+\t\t}\n+\t}\n+\n+\treturn new LP_Email_Reset_Password();\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-become-an-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,64 +1,64 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Type_Become_An_Instructor\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.1.3\r\n- * @author tungnx\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Email_Type_Become_An_Instructor' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Email_Become_An_Instructor\r\n-\t *\u002F\r\n-\tclass LP_Email_Type_Become_An_Instructor extends LP_Email {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor-accept-deny\u002Fvariables-support',\r\n-\t\t\t\t[]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t\t}\r\n-\r\n-\t\tpublic function handle( array $params ) {\r\n-\t\t\tif ( ! $this->enable ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! count( $params ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_email = $params[0];\r\n-\t\t\t$user       = get_user_by( 'email', $user_email );\r\n-\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->variables = apply_filters(\r\n-\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor-accept-deny\u002Fvariables-mapper',\r\n-\t\t\t\t[]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\t\t\t$this->set_receive( $user->user_email );\r\n-\t\t\t$this->send_email();\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Type_Become_An_Instructor\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.1.3\n+ * @author tungnx\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Email_Type_Become_An_Instructor' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Email_Become_An_Instructor\n+\t *\u002F\n+\tclass LP_Email_Type_Become_An_Instructor extends LP_Email {\n+\n+\t\tpublic function __construct() {\n+\t\t\tparent::__construct();\n+\n+\t\t\t$variable_on_email_support = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor-accept-deny\u002Fvariables-support',\n+\t\t\t\t[]\n+\t\t\t);\n+\n+\t\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t\t}\n+\n+\t\tpublic function handle( array $params ) {\n+\t\t\tif ( ! $this->enable ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! count( $params ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$user_email = $params[0];\n+\t\t\t$user       = get_user_by( 'email', $user_email );\n+\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->variables = apply_filters(\n+\t\t\t\t'lp\u002Femail\u002Fbecome-an-instructor-accept-deny\u002Fvariables-mapper',\n+\t\t\t\t[]\n+\t\t\t);\n+\n+\t\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\t\t\t$this->set_receive( $user->user_email );\n+\t\t\t$this->send_email();\n+\t\t}\n+\t}\n+}\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-enrolled-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,138 +1,138 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Email_Type_Enrolled_Course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package Learnpress\u002FClasses\r\n- * @extends LP_Email\r\n- * @version 3.1.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3 - send email on background\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Email_Type_Enrolled_Course extends LP_Email {\r\n-\t\u002F**\r\n-\t * @var LP_Order\r\n-\t *\u002F\r\n-\tprotected $_order;\r\n-\t\u002F**\r\n-\t * @var LP_Course\r\n-\t *\u002F\r\n-\tprotected $_course;\r\n-\t\u002F**\r\n-\t * @var UserModel|false\r\n-\t *\u002F\r\n-\tprotected $_user;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Email_Type_Enrolled_Course constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Fenrolled-course\u002Fvariables-support',\r\n-\t\t\t[\r\n-\t\t\t\t'{{course_id}}',\r\n-\t\t\t\t'{{course_name}}',\r\n-\t\t\t\t'{{course_url}}',\r\n-\t\t\t\t'{{user_id}}',\r\n-\t\t\t\t'{{user_name}}',\r\n-\t\t\t\t'{{user_email}}',\r\n-\t\t\t\t'{{user_display_name}}',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check email enable option\r\n-\t * Check param valid: 3 params: order_id, course_id, user_id\r\n-\t * Return Order\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tfinal public function check_and_set( array $params ): bool {\r\n-\t\ttry {\r\n-\t\t\tif ( count( $params ) \u003C 3 ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->enable ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order_id  = $params[0] ?? 0;\r\n-\t\t\t$course_id = $params[1] ?? 0;\r\n-\t\t\t$user_id   = $params[2] ?? 0;\r\n-\r\n-\t\t\t$user = UserModel::find( $user_id, true );\r\n-\r\n-\t\t\t$filter            = new LP_User_Items_Filter();\r\n-\t\t\t$filter->user_id   = $user_id;\r\n-\t\t\t$filter->item_id   = $course_id;\r\n-\t\t\t$filter->item_type = LP_COURSE_CPT;\r\n-\t\t\t$filter->ref_type  = LP_ORDER_CPT;\r\n-\t\t\t$filter->ref_id    = $order_id;\r\n-\t\t\t$userCourse        = UserCourseModel::get_user_item_model_from_db( $filter );\r\n-\r\n-\t\t\tif ( LP_COURSE_ENROLLED != $userCourse->status ) {\r\n-\t\t\t\tthrow new Exception( 'User not enrolled course' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_order  = new LP_Order( $order_id );\r\n-\t\t\t$this->_user   = $user;\r\n-\t\t\t$this->_course = learn_press_get_course( $course_id );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set variables for content email.\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tprotected function set_data_content() {\r\n-\t\t$username          = '';\r\n-\t\t$user_id           = 0;\r\n-\t\t$user_display_name = '';\r\n-\t\tif ( ! $this->_user ) {\r\n-\t\t\t$user_email = $this->_order->get_user_email();\r\n-\t\t} else {\r\n-\t\t\t$user_id           = $this->_user->get_id();\r\n-\t\t\t$username          = $this->_user->get_username();\r\n-\t\t\t$user_email        = $this->_user->get_email();\r\n-\t\t\t$user_display_name = $this->_user->get_display_name();\r\n-\t\t}\r\n-\r\n-\t\t$this->variables = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-enrolled-course\u002Fvariables-mapper',\r\n-\t\t\t[\r\n-\t\t\t\t'{{course_id}}'         => $this->_course->get_id(),\r\n-\t\t\t\t'{{course_name}}'       => $this->_course->get_title(),\r\n-\t\t\t\t'{{course_url}}'        => $this->_course->get_permalink(),\r\n-\t\t\t\t'{{user_id}}'           => $user_id,\r\n-\t\t\t\t'{{user_name}}'         => $username,\r\n-\t\t\t\t'{{user_email}}'        => $user_email,\r\n-\t\t\t\t'{{user_display_name}}' => $user_display_name,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Email_Type_Enrolled_Course.\n+ *\n+ * @author  ThimPress\n+ * @package Learnpress\u002FClasses\n+ * @extends LP_Email\n+ * @version 3.1.0\n+ * @editor tungnx\n+ * @modify 4.1.3 - send email on background\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Email_Type_Enrolled_Course extends LP_Email {\n+\t\u002F**\n+\t * @var LP_Order\n+\t *\u002F\n+\tprotected $_order;\n+\t\u002F**\n+\t * @var LP_Course\n+\t *\u002F\n+\tprotected $_course;\n+\t\u002F**\n+\t * @var UserModel|false\n+\t *\u002F\n+\tprotected $_user;\n+\n+\t\u002F**\n+\t * LP_Email_Type_Enrolled_Course constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\t$variable_on_email_support = apply_filters(\n+\t\t\t'lp\u002Femail\u002Fenrolled-course\u002Fvariables-support',\n+\t\t\t[\n+\t\t\t\t'{{course_id}}',\n+\t\t\t\t'{{course_name}}',\n+\t\t\t\t'{{course_url}}',\n+\t\t\t\t'{{user_id}}',\n+\t\t\t\t'{{user_name}}',\n+\t\t\t\t'{{user_email}}',\n+\t\t\t\t'{{user_display_name}}',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t}\n+\n+\t\u002F**\n+\t * Check email enable option\n+\t * Check param valid: 3 params: order_id, course_id, user_id\n+\t * Return Order\n+\t *\n+\t * @param array $params\n+\t * @return bool\n+\t *\u002F\n+\tfinal public function check_and_set( array $params ): bool {\n+\t\ttry {\n+\t\t\tif ( count( $params ) \u003C 3 ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->enable ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$order_id  = $params[0] ?? 0;\n+\t\t\t$course_id = $params[1] ?? 0;\n+\t\t\t$user_id   = $params[2] ?? 0;\n+\n+\t\t\t$user = UserModel::find( $user_id, true );\n+\n+\t\t\t$filter            = new LP_User_Items_Filter();\n+\t\t\t$filter->user_id   = $user_id;\n+\t\t\t$filter->item_id   = $course_id;\n+\t\t\t$filter->item_type = LP_COURSE_CPT;\n+\t\t\t$filter->ref_type  = LP_ORDER_CPT;\n+\t\t\t$filter->ref_id    = $order_id;\n+\t\t\t$userCourse        = UserCourseModel::get_user_item_model_from_db( $filter );\n+\n+\t\t\tif ( LP_COURSE_ENROLLED != $userCourse->status ) {\n+\t\t\t\tthrow new Exception( 'User not enrolled course' );\n+\t\t\t}\n+\n+\t\t\t$this->_order  = new LP_Order( $order_id );\n+\t\t\t$this->_user   = $user;\n+\t\t\t$this->_course = learn_press_get_course( $course_id );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Set variables for content email.\n+\t * @editor tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tprotected function set_data_content() {\n+\t\t$username          = '';\n+\t\t$user_id           = 0;\n+\t\t$user_display_name = '';\n+\t\tif ( ! $this->_user ) {\n+\t\t\t$user_email = $this->_order->get_user_email();\n+\t\t} else {\n+\t\t\t$user_id           = $this->_user->get_id();\n+\t\t\t$username          = $this->_user->get_username();\n+\t\t\t$user_email        = $this->_user->get_email();\n+\t\t\t$user_display_name = $this->_user->get_display_name();\n+\t\t}\n+\n+\t\t$this->variables = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-enrolled-course\u002Fvariables-mapper',\n+\t\t\t[\n+\t\t\t\t'{{course_id}}'         => $this->_course->get_id(),\n+\t\t\t\t'{{course_name}}'       => $this->_course->get_title(),\n+\t\t\t\t'{{course_url}}'        => $this->_course->get_permalink(),\n+\t\t\t\t'{{user_id}}'           => $user_id,\n+\t\t\t\t'{{user_name}}'         => $username,\n+\t\t\t\t'{{user_email}}'        => $user_email,\n+\t\t\t\t'{{user_display_name}}' => $user_display_name,\n+\t\t\t]\n+\t\t);\n+\n+\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-finished-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,163 +1,163 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Email_Type_Finished_Course\r\n- *\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- * @version 3.0.2\r\n- *\u002F\r\n-class LP_Email_Type_Finished_Course extends LP_Email {\r\n-\t\u002F**\r\n-\t * @var int $course_id\r\n-\t *\u002F\r\n-\tpublic $course_id = 0;\r\n-\t\u002F**\r\n-\t * @var int $course_id\r\n-\t *\u002F\r\n-\tpublic $user_id = 0;\r\n-\t\u002F**\r\n-\t * @var CourseModel\r\n-\t *\u002F\r\n-\tpublic $courseModel;\r\n-\t\u002F**\r\n-\t * @var UserModel\r\n-\t *\u002F\r\n-\tpublic $userModel;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Email_Type_Finished_Course constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-finished-course\u002Fvariables-support',\r\n-\t\t\t[\r\n-\t\t\t\t'{{course_id}}',\r\n-\t\t\t\t'{{course_name}}',\r\n-\t\t\t\t'{{course_url}}',\r\n-\t\t\t\t'{{user_id}}',\r\n-\t\t\t\t'{{user_name}}',\r\n-\t\t\t\t'{{user_display_name}}',\r\n-\t\t\t\t'{{user_email}}',\r\n-\t\t\t\t'{{course_grade}}',\r\n-\t\t\t\t'{{course_result_percent}}',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check email enable option\r\n-\t * Check param valid: 3 params: $course_id, $user_id, $user_item_id\r\n-\t * Set values\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @return bool\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function check_and_set( array $params ): bool {\r\n-\t\tif ( ! $this->enable ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( count( $params ) \u003C 2 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = $params[0];\r\n-\t\t$user_id   = $params[1];\r\n-\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t$userModel   = UserModel::find( $user_id, true );\r\n-\t\tif ( ! $courseModel || ! $userModel ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$this->course_id   = $course_id;\r\n-\t\t$this->user_id     = $user_id;\r\n-\t\t$this->courseModel = $courseModel;\r\n-\t\t$this->userModel   = $userModel;\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Trigger email.\r\n-\t * Receive 3 params: $course_id, $user_id, $user_item_id\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @throws Exception\r\n-\t * @since 4.1.1\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\tif ( ! $this->check_and_set( $params ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->set_data_content();\r\n-\t\tif ( $this instanceof LP_Email_Finished_Course_Instructor ) {\r\n-\t\t\t$courseModel = $this->courseModel;\r\n-\t\t\tif ( $courseModel instanceof CourseModel ) {\r\n-\t\t\t\t$authorModel = $courseModel->get_author_model();\r\n-\t\t\t\tif ( $authorModel instanceof UserModel && ! empty( $authorModel->get_email() ) ) {\r\n-\t\t\t\t\t$this->set_receive( $authorModel->get_email() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} elseif ( $this instanceof LP_Email_Finished_Course_User ) {\r\n-\t\t\t$userModel = $this->userModel;\r\n-\t\t\tif ( $userModel instanceof UserModel && ! empty( $userModel->get_email() ) ) {\r\n-\t\t\t\t$this->set_receive( $userModel->get_email() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->send_email();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set variables for content email.\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function set_data_content() {\r\n-\t\t$courseModel = $this->courseModel;\r\n-\t\t$userModel   = $this->userModel;\r\n-\t\tif ( ! $courseModel instanceof CourseModel\r\n-\t\t\t|| ! $userModel instanceof UserModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\tif ( ! $userCourseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$userCourseResult = $userCourseModel->calculate_course_results();\r\n-\r\n-\t\t$this->variables = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-finished-course\u002Fvariables-mapper',\r\n-\t\t\t[\r\n-\t\t\t\t'{{course_id}}'             => $courseModel->get_id(),\r\n-\t\t\t\t'{{course_name}}'           => $courseModel->get_title(),\r\n-\t\t\t\t'{{course_url}}'            => $courseModel->get_permalink(),\r\n-\t\t\t\t'{{user_id}}'               => $userModel->get_id(),\r\n-\t\t\t\t'{{user_name}}'             => $userModel->get_username(),\r\n-\t\t\t\t'{{user_display_name}}'     => $userModel->get_display_name(),\r\n-\t\t\t\t'{{user_email}}'            => $userModel->get_email(),\r\n-\t\t\t\t'{{course_grade}}'          => $userCourseModel->get_string_i18n( $userCourseModel->get_graduation() ),\r\n-\t\t\t\t'{{course_result_percent}}' => $userCourseResult['result'],\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Class LP_Email_Type_Finished_Course\n+ *\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ * @version 3.0.2\n+ *\u002F\n+class LP_Email_Type_Finished_Course extends LP_Email {\n+\t\u002F**\n+\t * @var int $course_id\n+\t *\u002F\n+\tpublic $course_id = 0;\n+\t\u002F**\n+\t * @var int $course_id\n+\t *\u002F\n+\tpublic $user_id = 0;\n+\t\u002F**\n+\t * @var CourseModel\n+\t *\u002F\n+\tpublic $courseModel;\n+\t\u002F**\n+\t * @var UserModel\n+\t *\u002F\n+\tpublic $userModel;\n+\n+\t\u002F**\n+\t * LP_Email_Type_Finished_Course constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\t$variable_on_email_support = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-finished-course\u002Fvariables-support',\n+\t\t\t[\n+\t\t\t\t'{{course_id}}',\n+\t\t\t\t'{{course_name}}',\n+\t\t\t\t'{{course_url}}',\n+\t\t\t\t'{{user_id}}',\n+\t\t\t\t'{{user_name}}',\n+\t\t\t\t'{{user_display_name}}',\n+\t\t\t\t'{{user_email}}',\n+\t\t\t\t'{{course_grade}}',\n+\t\t\t\t'{{course_result_percent}}',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t}\n+\n+\t\u002F**\n+\t * Check email enable option\n+\t * Check param valid: 3 params: $course_id, $user_id, $user_item_id\n+\t * Set values\n+\t *\n+\t * @param array $params\n+\t * @return bool\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function check_and_set( array $params ): bool {\n+\t\tif ( ! $this->enable ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( count( $params ) \u003C 2 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_id = $params[0];\n+\t\t$user_id   = $params[1];\n+\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t$userModel   = UserModel::find( $user_id, true );\n+\t\tif ( ! $courseModel || ! $userModel ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$this->course_id   = $course_id;\n+\t\t$this->user_id     = $user_id;\n+\t\t$this->courseModel = $courseModel;\n+\t\t$this->userModel   = $userModel;\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Trigger email.\n+\t * Receive 3 params: $course_id, $user_id, $user_item_id\n+\t *\n+\t * @param array $params\n+\t * @throws Exception\n+\t * @since 4.1.1\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\tif ( ! $this->check_and_set( $params ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->set_data_content();\n+\t\tif ( $this instanceof LP_Email_Finished_Course_Instructor ) {\n+\t\t\t$courseModel = $this->courseModel;\n+\t\t\tif ( $courseModel instanceof CourseModel ) {\n+\t\t\t\t$authorModel = $courseModel->get_author_model();\n+\t\t\t\tif ( $authorModel instanceof UserModel && ! empty( $authorModel->get_email() ) ) {\n+\t\t\t\t\t$this->set_receive( $authorModel->get_email() );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} elseif ( $this instanceof LP_Email_Finished_Course_User ) {\n+\t\t\t$userModel = $this->userModel;\n+\t\t\tif ( $userModel instanceof UserModel && ! empty( $userModel->get_email() ) ) {\n+\t\t\t\t$this->set_receive( $userModel->get_email() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->send_email();\n+\t}\n+\n+\t\u002F**\n+\t * Set variables for content email.\n+\t * @editor tungnx\n+\t * @since 4.1.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function set_data_content() {\n+\t\t$courseModel = $this->courseModel;\n+\t\t$userModel   = $this->userModel;\n+\t\tif ( ! $courseModel instanceof CourseModel\n+\t\t\t|| ! $userModel instanceof UserModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\tif ( ! $userCourseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$userCourseResult = $userCourseModel->calculate_course_results();\n+\n+\t\t$this->variables = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-finished-course\u002Fvariables-mapper',\n+\t\t\t[\n+\t\t\t\t'{{course_id}}'             => $courseModel->get_id(),\n+\t\t\t\t'{{course_name}}'           => $courseModel->get_title(),\n+\t\t\t\t'{{course_url}}'            => $courseModel->get_permalink(),\n+\t\t\t\t'{{user_id}}'               => $userModel->get_id(),\n+\t\t\t\t'{{user_name}}'             => $userModel->get_username(),\n+\t\t\t\t'{{user_display_name}}'     => $userModel->get_display_name(),\n+\t\t\t\t'{{user_email}}'            => $userModel->get_email(),\n+\t\t\t\t'{{course_grade}}'          => $userCourseModel->get_string_i18n( $userCourseModel->get_graduation() ),\n+\t\t\t\t'{{course_result_percent}}' => $userCourseResult['result'],\n+\t\t\t]\n+\t\t);\n+\n+\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Type_Order_Student\r\n- *\r\n- * @version 4.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-class LP_Email_Type_Order_Admin extends LP_Email_Type_Order {\r\n-\t\u002F**\r\n-\t * Trigger email.\r\n-\t * Receive 2 params: order_id, old_status\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @author tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\ttry {\r\n-\t\t\t$order = $this->check_and_get_order( $params );\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data_content( $order );\r\n-\t\t\t$this->send_email();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set variables for content email.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function set_data_content( LP_Order $order ) {\r\n-\t\tparent::set_data_content( $order );\r\n-\r\n-\t\tif ( $order->is_manual() ) {\r\n-\t\t\t$order_post      = get_post( $order->get_id() );\r\n-\t\t\t$user_author     = get_user_by( 'ID', $order_post->post_author );\r\n-\t\t\t$order_user_name = $user_author->display_name;\r\n-\t\t} elseif ( $order->is_guest() ) {\r\n-\t\t\t$order_user_name = sprintf( '%s: %s', __( 'Guest', 'learnpress' ), $order->get_checkout_email() );\r\n-\t\t} else {\r\n-\t\t\t$order_user_name = $order->get_user()->get_display_name();\r\n-\t\t}\r\n-\r\n-\t\t$this->variables['{{order_user_name}}'] = $order_user_name;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Type_Order_Student\n+ *\n+ * @version 4.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+class LP_Email_Type_Order_Admin extends LP_Email_Type_Order {\n+\t\u002F**\n+\t * Trigger email.\n+\t * Receive 2 params: order_id, old_status\n+\t *\n+\t * @param array $params\n+\t * @author tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\ttry {\n+\t\t\t$order = $this->check_and_get_order( $params );\n+\t\t\tif ( ! $order ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->set_data_content( $order );\n+\t\t\t$this->send_email();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set variables for content email.\n+\t *\n+\t * @param LP_Order $order\n+\t * @editor tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function set_data_content( LP_Order $order ) {\n+\t\tparent::set_data_content( $order );\n+\n+\t\tif ( $order->is_manual() ) {\n+\t\t\t$order_post      = get_post( $order->get_id() );\n+\t\t\t$user_author     = get_user_by( 'ID', $order_post->post_author );\n+\t\t\t$order_user_name = $user_author->display_name;\n+\t\t} elseif ( $order->is_guest() ) {\n+\t\t\t$order_user_name = sprintf( '%s: %s', __( 'Guest', 'learnpress' ), $order->get_checkout_email() );\n+\t\t} else {\n+\t\t\t$order_user_name = $order->get_user()->get_display_name();\n+\t\t}\n+\n+\t\t$this->variables['{{order_user_name}}'] = $order_user_name;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Type_Order_Student\r\n- *\r\n- * @version 4.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-class LP_Email_Type_Order_Guest extends LP_Email_Type_Order_Student {\r\n-\t\u002F**\r\n-\t * Trigger email.\r\n-\t * Receive 2 params: order_id, old_status\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @author tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\ttry {\r\n-\t\t\t$order = $this->check_and_get_order( $params );\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If is Order of guest, only one mail, because Order manual add only user exist\r\n-\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\r\n-\t\t\t\t$this->set_user_receiver_mail( $order, 0 );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Type_Order_Student\n+ *\n+ * @version 4.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+class LP_Email_Type_Order_Guest extends LP_Email_Type_Order_Student {\n+\t\u002F**\n+\t * Trigger email.\n+\t * Receive 2 params: order_id, old_status\n+\t *\n+\t * @param array $params\n+\t * @author tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\ttry {\n+\t\t\t$order = $this->check_and_get_order( $params );\n+\t\t\tif ( ! $order ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If is Order of guest, only one mail, because Order manual add only user exist\n+\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\n+\t\t\t\t$this->set_user_receiver_mail( $order, 0 );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Type_Order_Student\r\n- *\r\n- * @version 4.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-class LP_Email_Type_Order_Instructor extends LP_Email_Type_Order_Admin {\r\n-\t\u002F**\r\n-\t * Get all instructor ids on all items of Order.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tprotected function get_instructor_ids( LP_Order $order ): array {\r\n-\t\t$items       = $order->get_items();\r\n-\t\t$instructors = [];\r\n-\r\n-\t\tif ( count( $items ) ) {\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\tif ( ! isset( $item['course_id'] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_id = get_post_field( 'post_author', $item['course_id'] );\r\n-\t\t\t\tif ( $user_id ) {\r\n-\t\t\t\t\tif ( empty( $instructors[ $user_id ] ) ) {\r\n-\t\t\t\t\t\t$instructors[ $user_id ] = $user_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $instructors;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Trigger email.\r\n-\t * Receive 2 params: order_id, old_status\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @author tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\ttry {\r\n-\t\t\t$order = $this->check_and_get_order( $params );\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data_content( $order );\r\n-\t\t\t$instructor_ids = $this->get_instructor_ids( $order );\r\n-\r\n-\t\t\tforeach ( $instructor_ids as $instructor_id ) {\r\n-\t\t\t\t$instructor = get_user_by( 'ID', $instructor_id );\r\n-\t\t\t\tif ( $instructor ) {\r\n-\t\t\t\t\t$this->set_receive( $instructor->user_email );\r\n-\t\t\t\t\t$this->send_email();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Type_Order_Student\n+ *\n+ * @version 4.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+class LP_Email_Type_Order_Instructor extends LP_Email_Type_Order_Admin {\n+\t\u002F**\n+\t * Get all instructor ids on all items of Order.\n+\t *\n+\t * @param LP_Order $order\n+\t * @return array\n+\t * @since 3.0.0\n+\t *\n+\t *\u002F\n+\tprotected function get_instructor_ids( LP_Order $order ): array {\n+\t\t$items       = $order->get_items();\n+\t\t$instructors = [];\n+\n+\t\tif ( count( $items ) ) {\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\tif ( ! isset( $item['course_id'] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$user_id = get_post_field( 'post_author', $item['course_id'] );\n+\t\t\t\tif ( $user_id ) {\n+\t\t\t\t\tif ( empty( $instructors[ $user_id ] ) ) {\n+\t\t\t\t\t\t$instructors[ $user_id ] = $user_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $instructors;\n+\t}\n+\n+\t\u002F**\n+\t * Trigger email.\n+\t * Receive 2 params: order_id, old_status\n+\t *\n+\t * @param array $params\n+\t * @author tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\ttry {\n+\t\t\t$order = $this->check_and_get_order( $params );\n+\t\t\tif ( ! $order ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->set_data_content( $order );\n+\t\t\t$instructor_ids = $this->get_instructor_ids( $order );\n+\n+\t\t\tforeach ( $instructor_ids as $instructor_id ) {\n+\t\t\t\t$instructor = get_user_by( 'ID', $instructor_id );\n+\t\t\t\tif ( $instructor ) {\n+\t\t\t\t\t$this->set_receive( $instructor->user_email );\n+\t\t\t\t\t$this->send_email();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_Email_Type_Order\r\n- *\r\n- * @version 4.0.1\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-class LP_Email_Type_Order extends LP_Email {\r\n-\t\u002F**\r\n-\t * LP_Email_Type_Order constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\t$variable_on_email_support = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-support',\r\n-\t\t\t[\r\n-\t\t\t\t'{{order_id}}',\r\n-\t\t\t\t'{{order_user_id}}',\r\n-\t\t\t\t'{{order_user_name}}',\r\n-\t\t\t\t'{{order_items_table}}',\r\n-\t\t\t\t'{{order_detail_url}}',\r\n-\t\t\t\t'{{order_number}}',\r\n-\t\t\t\t'{{order_key}}',\r\n-\t\t\t\t'{{order_date}}',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check email enable option\r\n-\t * Check param valid\r\n-\t * Return Order\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @return LP_Order|bool\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function check_and_get_order( array $params ) {\r\n-\t\tif ( ! $this->enable ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( count( $params ) \u003C 1 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$order_id = $params[0] ?? 0;\r\n-\t\treturn new LP_Order( $order_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set variables for content email.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function set_data_content( LP_Order $order ) {\r\n-\t\t$user_ids    = $order->get_user_id();\r\n-\t\t$user_id_str = $user_ids;\r\n-\r\n-\t\tif ( is_array( $user_ids ) ) {\r\n-\t\t\t$user_id_str = implode( ',', $user_ids );\r\n-\t\t}\r\n-\r\n-\t\tob_start();\r\n-\t\techo Template::instance()->get_frontend_template(\r\n-\t\t\t'emails\u002Forder-items-table.php',\r\n-\t\t\tcompact( 'order' )\r\n-\t\t);\r\n-\t\t$html_order_items_table = ob_get_clean();\r\n-\r\n-\t\t$this->variables = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-mapper',\r\n-\t\t\t[\r\n-\t\t\t\t'{{order_id}}'          => $order->get_id(),\r\n-\t\t\t\t'{{order_date}}'        => date_i18n( get_option( 'date_format' ), strtotime( $order->get_order_date() ) ),\r\n-\t\t\t\t'{{order_user_id}}'     => $user_id_str,\r\n-\t\t\t\t'{{order_user_name}}'   => $order->get_user_name(),\r\n-\t\t\t\t'{{order_items_table}}' => $html_order_items_table,\r\n-\t\t\t\t'{{order_detail_url}}'  => $order->get_view_order_url(),\r\n-\t\t\t\t'{{order_number}}'      => $order->get_order_number(),\r\n-\t\t\t\t'{{order_key}}'         => $order->get_order_key(),\r\n-\t\t\t],\r\n-\t\t\t$order\r\n-\t\t);\r\n-\r\n-\t\t$variables_common = $this->get_common_variables( $this->email_format );\r\n-\t\t$this->variables  = array_merge( $this->variables, $variables_common );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_Email_Type_Order\n+ *\n+ * @version 4.0.1\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+class LP_Email_Type_Order extends LP_Email {\n+\t\u002F**\n+\t * LP_Email_Type_Order constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\t$variable_on_email_support = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-support',\n+\t\t\t[\n+\t\t\t\t'{{order_id}}',\n+\t\t\t\t'{{order_user_id}}',\n+\t\t\t\t'{{order_user_name}}',\n+\t\t\t\t'{{order_items_table}}',\n+\t\t\t\t'{{order_detail_url}}',\n+\t\t\t\t'{{order_number}}',\n+\t\t\t\t'{{order_key}}',\n+\t\t\t\t'{{order_date}}',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$this->support_variables = array_merge( $this->support_variables, $variable_on_email_support );\n+\t}\n+\n+\t\u002F**\n+\t * Check email enable option\n+\t * Check param valid\n+\t * Return Order\n+\t *\n+\t * @param array $params\n+\t * @return LP_Order|bool\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function check_and_get_order( array $params ) {\n+\t\tif ( ! $this->enable ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( count( $params ) \u003C 1 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$order_id = $params[0] ?? 0;\n+\t\treturn new LP_Order( $order_id );\n+\t}\n+\n+\t\u002F**\n+\t * Set variables for content email.\n+\t *\n+\t * @param LP_Order $order\n+\t * @editor tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function set_data_content( LP_Order $order ) {\n+\t\t$user_ids    = $order->get_user_id();\n+\t\t$user_id_str = $user_ids;\n+\n+\t\tif ( is_array( $user_ids ) ) {\n+\t\t\t$user_id_str = implode( ',', $user_ids );\n+\t\t}\n+\n+\t\tob_start();\n+\t\techo Template::instance()->get_frontend_template(\n+\t\t\t'emails\u002Forder-items-table.php',\n+\t\t\tcompact( 'order' )\n+\t\t);\n+\t\t$html_order_items_table = ob_get_clean();\n+\n+\t\t$this->variables = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-mapper',\n+\t\t\t[\n+\t\t\t\t'{{order_id}}'          => $order->get_id(),\n+\t\t\t\t'{{order_date}}'        => date_i18n( get_option( 'date_format' ), strtotime( $order->get_order_date() ) ),\n+\t\t\t\t'{{order_user_id}}'     => $user_id_str,\n+\t\t\t\t'{{order_user_name}}'   => $order->get_user_name(),\n+\t\t\t\t'{{order_items_table}}' => $html_order_items_table,\n+\t\t\t\t'{{order_detail_url}}'  => $order->get_view_order_url(),\n+\t\t\t\t'{{order_number}}'      => $order->get_order_number(),\n+\t\t\t\t'{{order_key}}'         => $order->get_order_key(),\n+\t\t\t],\n+\t\t\t$order\n+\t\t);\n+\n+\t\t$variables_common = $this->get_common_variables( $this->email_format );\n+\t\t$this->variables  = array_merge( $this->variables, $variables_common );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-student.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-student.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-student.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Femails\u002Ftypes\u002Fclass-lp-email-type-order-student.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Email_Type_Order_Student\r\n- *\r\n- * @version 4.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-class LP_Email_Type_Order_Student extends LP_Email_Type_Order {\r\n-\t\u002F**\r\n-\t * Trigger email.\r\n-\t * Receive 2 params: order_id, old_status\r\n-\t *\r\n-\t * @param array $params\r\n-\t * @author tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\ttry {\r\n-\t\t\t$order = $this->check_and_get_order( $params );\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Send mail for each user\r\n-\t\t\t$user_ids = $order->get_user_id();\r\n-\r\n-\t\t\tif ( is_array( $user_ids ) ) {\r\n-\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t$this->set_user_receiver_mail( $order, $user_id );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->set_user_receiver_mail( $order, $user_ids );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set variables for content email.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param int $user_id\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.1\r\n-\t *\u002F\r\n-\tprotected function set_data_content_by_user( LP_Order $order, int $user_id ) {\r\n-\t\tparent::set_data_content( $order );\r\n-\r\n-\t\t$this->variables['{{order_user_id}}']   = $user_id;\r\n-\t\t$this->variables['{{order_user_name}}'] = $order->get_user_name( $user_id );\r\n-\r\n-\t\t$this->variables = apply_filters(\r\n-\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-mapper\u002Ftype-order-student',\r\n-\t\t\t$this->variables,\r\n-\t\t\t$order,\r\n-\t\t\t$user_id\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set receiver mail\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param int $user_id\r\n-\t *\u002F\r\n-\tpublic function set_user_receiver_mail( LP_Order $order, int $user_id = 0 ) {\r\n-\t\t$receive = $order->get_user_email( $user_id );\r\n-\t\t$this->set_data_content_by_user( $order, $user_id );\r\n-\t\t$this->set_receive( $receive );\r\n-\t\t$this->send_email();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Email_Type_Order_Student\n+ *\n+ * @version 4.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+class LP_Email_Type_Order_Student extends LP_Email_Type_Order {\n+\t\u002F**\n+\t * Trigger email.\n+\t * Receive 2 params: order_id, old_status\n+\t *\n+\t * @param array $params\n+\t * @author tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\ttry {\n+\t\t\t$order = $this->check_and_get_order( $params );\n+\t\t\tif ( ! $order ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! $order->is_manual() && $order->is_guest() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Send mail for each user\n+\t\t\t$user_ids = $order->get_user_id();\n+\n+\t\t\tif ( is_array( $user_ids ) ) {\n+\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t$this->set_user_receiver_mail( $order, $user_id );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$this->set_user_receiver_mail( $order, $user_ids );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set variables for content email.\n+\t *\n+\t * @param LP_Order $order\n+\t * @param int $user_id\n+\t * @editor tungnx\n+\t * @since 4.1.1\n+\t *\u002F\n+\tprotected function set_data_content_by_user( LP_Order $order, int $user_id ) {\n+\t\tparent::set_data_content( $order );\n+\n+\t\t$this->variables['{{order_user_id}}']   = $user_id;\n+\t\t$this->variables['{{order_user_name}}'] = $order->get_user_name( $user_id );\n+\n+\t\t$this->variables = apply_filters(\n+\t\t\t'lp\u002Femail\u002Ftype-order\u002Fvariables-mapper\u002Ftype-order-student',\n+\t\t\t$this->variables,\n+\t\t\t$order,\n+\t\t\t$user_id\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Set receiver mail\n+\t *\n+\t * @param LP_Order $order\n+\t * @param int $user_id\n+\t *\u002F\n+\tpublic function set_user_receiver_mail( LP_Order $order, int $user_id = 0 ) {\n+\t\t$receive = $order->get_user_email( $user_id );\n+\t\t$this->set_data_content_by_user( $order, $user_id );\n+\t\t$this->set_receive( $receive );\n+\t\t$this->send_email();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LPDynamicElementor\r\n- * Declare base properties for dynamic course elementor\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor;\r\n-\r\n-use Elementor\\Modules\\DynamicTags\\Module;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Course;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-trait LPDynamicElementor {\r\n-\tpublic $lp_dynamic_name       = '';\r\n-\tpublic $lp_dynamic_categories = [ Module::TEXT_CATEGORY ];\r\n-\tpublic $lp_dynamic_title      = '';\r\n-\tpublic $lp_dynamic_group      = LPElementor::GROUP_DYNAMIC;\r\n-\r\n-\tpublic function get_name() {\r\n-\t\treturn $this->lp_dynamic_name;\r\n-\t}\r\n-\r\n-\tpublic function get_categories() {\r\n-\t\treturn $this->lp_dynamic_categories;\r\n-\t}\r\n-\r\n-\tpublic function get_group() {\r\n-\t\treturn $this->lp_dynamic_group;\r\n-\t}\r\n-\r\n-\tpublic function get_title() {\r\n-\t\treturn $this->lp_dynamic_title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course\r\n-\t *\r\n-\t * @return bool|LP_Course|mixed\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\tpublic function get_course() {\r\n-\t\t$id = get_the_ID();\r\n-\t\tif ( ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_course( $id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\t$id = get_the_ID();\r\n-\t\tif ( ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn CourseModel::find( $id, true );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LPDynamicElementor\n+ * Declare base properties for dynamic course elementor\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor;\n+\n+use Elementor\\Modules\\DynamicTags\\Module;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Course;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+trait LPDynamicElementor {\n+\tpublic $lp_dynamic_name       = '';\n+\tpublic $lp_dynamic_categories = [ Module::TEXT_CATEGORY ];\n+\tpublic $lp_dynamic_title      = '';\n+\tpublic $lp_dynamic_group      = LPElementor::GROUP_DYNAMIC;\n+\n+\tpublic function get_name() {\n+\t\treturn $this->lp_dynamic_name;\n+\t}\n+\n+\tpublic function get_categories() {\n+\t\treturn $this->lp_dynamic_categories;\n+\t}\n+\n+\tpublic function get_group() {\n+\t\treturn $this->lp_dynamic_group;\n+\t}\n+\n+\tpublic function get_title() {\n+\t\treturn $this->lp_dynamic_title;\n+\t}\n+\n+\t\u002F**\n+\t * Get course\n+\t *\n+\t * @return bool|LP_Course|mixed\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\tpublic function get_course() {\n+\t\t$id = get_the_ID();\n+\t\tif ( ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn learn_press_get_course( $id );\n+\t}\n+\n+\t\u002F**\n+\t * Get course\n+\t *\n+\t * @return false|CourseModel\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\t$id = get_the_ID();\n+\t\tif ( ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn CourseModel::find( $id, true );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorControls.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorControls.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorControls.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorControls.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,591 +1,591 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Elementor_Widgets\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor;\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Elementor\\Group_Control_Border;\r\n-use Elementor\\Group_Control_Text_Shadow;\r\n-use Elementor\\Group_Control_Typography;\r\n-\r\n-class LPElementorControls {\r\n-\t\u002F**\r\n-\t * Start section.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string $tab\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tprivate static function add_start_section(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\tstring $tab = Controls_Manager::TAB_CONTENT,\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn [\r\n-\t\t\t'method' => 'start_controls_section',\r\n-\t\t\t'id'     => $id,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t'tab'   => $tab,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t),\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Start section.\r\n-\t *\r\n-\t * @param string $id_section\r\n-\t * @param string $label_section\r\n-\t * @param string $tab\r\n-\t * @param array $fields_inner\r\n-\t * @param array $args_section\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_fields_in_section(\r\n-\t\tstring $id_section,\r\n-\t\tstring $label_section,\r\n-\t\tstring $tab = Controls_Manager::TAB_CONTENT,\r\n-\t\tarray $fields_inner = [],\r\n-\t\tarray $args_section = []\r\n-\t): array {\r\n-\t\treturn array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t\"section_$id_section\" => LPElementorControls::add_start_section(\r\n-\t\t\t\t\t\"section_$id_section\",\r\n-\t\t\t\t\t$label_section,\r\n-\t\t\t\t\t$tab,\r\n-\t\t\t\t\t$args_section\r\n-\t\t\t\t),\r\n-\t\t\t],\r\n-\t\t\t$fields_inner,\r\n-\t\t\t[ \"end_section_$id_section\" => [ 'method' => 'end_controls_section' ] ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Controls Tabs.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param array $control_tab_inner\r\n-\t *\r\n-\t * @return string[]\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function add_start_control_tabs( string $id, array $control_tab_inner = [] ): array {\r\n-\t\treturn array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'start_controls_tabs_' . $id => [\r\n-\t\t\t\t\t'method' => 'start_controls_tabs',\r\n-\t\t\t\t\t'id'     => $id,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t$control_tab_inner,\r\n-\t\t\t[ 'end_control_tabs_' . $id => [ 'method' => 'end_controls_tabs' ] ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Controls Tab.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param array $controls_inner\r\n-\t *\r\n-\t * @return string[]\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function add_start_control_tab( string $id, string $label = '', array $controls_inner = [] ): array {\r\n-\t\treturn array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'start_controls_tab_' . $id => [\r\n-\t\t\t\t\t'method' => 'start_controls_tab',\r\n-\t\t\t\t\t'id'     => $id,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t$controls_inner,\r\n-\t\t\t[ 'end_controls_tab_' . $id => [ 'method' => 'end_controls_tab' ] ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Declare control type.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $control_type\r\n-\t * @param string $label\r\n-\t * @param string|array $default\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_control_type(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\t$default = '',\r\n-\t\tstring $control_type = Controls_Manager::TEXT,\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn [\r\n-\t\t\t'method' => 'add_control',\r\n-\t\t\t'id'     => $id,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label'   => $label,\r\n-\t\t\t\t\t'type'    => $control_type,\r\n-\t\t\t\t\t'default' => $default,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t),\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Responsive control type.\r\n-\t *\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param string|array $default\r\n-\t * @param string $control_type\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function add_responsive_control_type(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\t$default = '',\r\n-\t\tstring $control_type = Controls_Manager::CHOOSE,\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn [\r\n-\t\t\t'method' => 'add_responsive_control',\r\n-\t\t\t'id'     => $id,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'label'   => $label,\r\n-\t\t\t\t\t'type'    => $control_type,\r\n-\t\t\t\t\t'default' => $default,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t),\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * control type select.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param array $options\r\n-\t * @param $default\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_control_type_select(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\tarray $options,\r\n-\t\t$default,\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn self::add_control_type(\r\n-\t\t\t$id,\r\n-\t\t\t$label,\r\n-\t\t\t$default,\r\n-\t\t\tControls_Manager::SELECT,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'options' => $options,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * control type select.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param array $selectors\r\n-\t * @param string $default\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_control_type_switcher(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\tarray $selectors = [],\r\n-\t\tstring $default = 'no',\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn self::add_control_type(\r\n-\t\t\t$id,\r\n-\t\t\t$label,\r\n-\t\t\t$default,\r\n-\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'selectors' => $selectors,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * control type color.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param array $selector\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_control_type_color( string $id, string $label, array $selector, array $args = [] ): array {\r\n-\t\treturn self::add_control_type(\r\n-\t\t\t$id,\r\n-\t\t\t$label,\r\n-\t\t\t'',\r\n-\t\t\tControls_Manager::COLOR,\r\n-\t\t\tarray_merge( [ 'selectors' => $selector ], $args )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Declare control type slider.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $label\r\n-\t * @param float $default\r\n-\t * @param string $unit\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_control_type_slider(\r\n-\t\tstring $id,\r\n-\t\tstring $label,\r\n-\t\tfloat $default = 0,\r\n-\t\tstring $unit = 'px',\r\n-\t\tarray $args = []\r\n-\t): array {\r\n-\t\treturn self::add_control_type(\r\n-\t\t\t$id,\r\n-\t\t\t$label,\r\n-\t\t\t$default,\r\n-\t\t\tControls_Manager::SLIDER,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'range'   => array(\r\n-\t\t\t\t\t\t'px' => array(\r\n-\t\t\t\t\t\t\t'min'  => 0,\r\n-\t\t\t\t\t\t\t'max'  => 60,\r\n-\t\t\t\t\t\t\t'step' => 1,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'default' => array(\r\n-\t\t\t\t\t\t'size' => $default,\r\n-\t\t\t\t\t\t'unit' => $unit,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Declare control type.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param string $group_type\r\n-\t * @param string $selector\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic static function add_group_control_type( string $id, string $group_type, string $selector, array $args = [] ): array {\r\n-\t\treturn [\r\n-\t\t\t'method' => 'add_group_control',\r\n-\t\t\t$group_type,\r\n-\t\t\tarray_merge(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'name'     => $id,\r\n-\t\t\t\t\t'selector' => $selector,\r\n-\t\t\t\t],\r\n-\t\t\t\t$args\r\n-\t\t\t),\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Include or exclude more fields.\r\n-\t *\r\n-\t * @param array $fields\r\n-\t * @param string $prefix_name - prefix name of field for exclude. Format: 'prefix_name'_'field_name_want_exclude'\r\n-\t * @param array $include - no need prefix_name, must add by standard format: 'prefix_name'_'btn'_'attribute'\r\n-\t * @param array $exclude\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprivate static function add_group_style_controls(\r\n-\t\tarray $fields,\r\n-\t\tstring $prefix_name,\r\n-\t\tarray $include = [],\r\n-\t\tarray $exclude = []\r\n-\t): array {\r\n-\r\n-\t\tif ( ! empty( $include ) ) {\r\n-\t\t\t$fields = array_merge( $fields, $include );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $exclude ) ) {\r\n-\t\t\tforeach ( $exclude as $field ) {\r\n-\t\t\t\t$field = \"{$prefix_name}_{$field}\";\r\n-\t\t\t\tunset( $fields[ $field ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Group control style for text.\r\n-\t *\r\n-\t * @param string $prefix_name\r\n-\t * @param string $selector\r\n-\t * @param array $include\r\n-\t * @param array $exclude\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function add_controls_style_text(\r\n-\t\tstring $prefix_name,\r\n-\t\tstring $selector,\r\n-\t\tarray $include = [],\r\n-\t\tarray $exclude = []\r\n-\t): array {\r\n-\t\t$fields = [\r\n-\t\t\t\"{$prefix_name}_text_display\"          => self::add_control_type(\r\n-\t\t\t\t\"{$prefix_name}_text_display\",\r\n-\t\t\t\tesc_html__( 'Display', 'learnpress' ),\r\n-\t\t\t\t'block',\r\n-\t\t\t\tControls_Manager::CHOOSE,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'options'   => [\r\n-\t\t\t\t\t\t'block'        => array(\r\n-\t\t\t\t\t\t\t'title' => esc_html__( 'Block', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'icon'  => 'eicon-editor-list-ul',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'inline-block' => array(\r\n-\t\t\t\t\t\t\t'title' => esc_html__( 'Inline', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'icon'  => 'eicon-ellipsis-h',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'selectors' => [\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'display: {{VALUE}}',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_margin\"           => self::add_responsive_control_type(\r\n-\t\t\t\t\"{$prefix_name}_text_margin\",\r\n-\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_padding\"          => self::add_responsive_control_type(\r\n-\t\t\t\t\"{$prefix_name}_text_padding\",\r\n-\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_typography\"       => self::add_group_control_type(\r\n-\t\t\t\t\"{$prefix_name}_typography\",\r\n-\t\t\t\tGroup_Control_Typography::get_type(),\r\n-\t\t\t\t\"{{WRAPPER}} $selector\"\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_shadow\"           => self::add_group_control_type(\r\n-\t\t\t\t\"{$prefix_name}_shadow\",\r\n-\t\t\t\tGroup_Control_Text_Shadow::get_type(),\r\n-\t\t\t\t\"{{WRAPPER}} $selector\"\r\n-\t\t\t),\r\n-\r\n-\t\t\t\"{$prefix_name}_text_color\"            => self::add_control_type_color(\r\n-\t\t\t\t\"{$prefix_name}_text_color\",\r\n-\t\t\t\tesc_html__( 'Text Color', 'learnpress' ),\r\n-\t\t\t\t[ \"{{WRAPPER}} $selector\" => 'color: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_color_hover\"      => self::add_control_type_color(\r\n-\t\t\t\t\"{$prefix_name}_text_color_hover\",\r\n-\t\t\t\tesc_html__( 'Text Color Hover', 'learnpress' ),\r\n-\t\t\t\t[ \"{{WRAPPER}} $selector:hover\" => 'color: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_background\"       => self::add_control_type_color(\r\n-\t\t\t\t\"{$prefix_name}_text_background\",\r\n-\t\t\t\tesc_html__( 'Background Color', 'learnpress' ),\r\n-\t\t\t\t[ \"{{WRAPPER}} $selector\" => 'background: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_text_background_hover\" => self::add_control_type_color(\r\n-\t\t\t\t\"{$prefix_name}_text_background_hover\",\r\n-\t\t\t\tesc_html__( 'Background Color Hover', 'learnpress' ),\r\n-\t\t\t\t[ \"{{WRAPPER}} $selector:hover\" => 'background: {{VALUE}}' ]\r\n-\t\t\t),\r\n-\t\t];\r\n-\r\n-\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Group control style for button.\r\n-\t *\r\n-\t * @param string $prefix_name\r\n-\t * @param string $selector\r\n-\t * @param array $include\r\n-\t * @param array $exclude\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function add_controls_style_button(\r\n-\t\tstring $prefix_name,\r\n-\t\tstring $selector,\r\n-\t\tarray $include = [],\r\n-\t\tarray $exclude = []\r\n-\t): array {\r\n-\r\n-\t\t$fields = self::add_controls_style_text( $prefix_name, $selector, $include, $exclude );\r\n-\t\t$fields = array_merge(\r\n-\t\t\t$fields,\r\n-\t\t\t[\r\n-\t\t\t\t\"{$prefix_name}_btn_border\"        => self::add_group_control_type(\r\n-\t\t\t\t\t\"{$prefix_name}_btn_border\",\r\n-\t\t\t\t\tGroup_Control_Border::get_type(),\r\n-\t\t\t\t\t\"{{WRAPPER}} $selector\"\r\n-\t\t\t\t),\r\n-\t\t\t\t\"{$prefix_name}_btn_border_radius\" => self::add_control_type(\r\n-\t\t\t\t\t\"{$prefix_name}_btn_border_radius\",\r\n-\t\t\t\t\tesc_html__( 'Border Radius', 'learnpress' ),\r\n-\t\t\t\t\t[],\r\n-\t\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t\t'selectors'  => [\r\n-\t\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Group control style for button.\r\n-\t *\r\n-\t * @param string $prefix_name\r\n-\t * @param string $selector\r\n-\t * @param array $include\r\n-\t * @param array $exclude\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function add_controls_style_image(\r\n-\t\tstring $prefix_name,\r\n-\t\tstring $selector,\r\n-\t\tarray $include = [],\r\n-\t\tarray $exclude = []\r\n-\t): array {\r\n-\r\n-\t\t$fields = [\r\n-\t\t\t\"{$prefix_name}_img_show\"          => self::add_control_type(\r\n-\t\t\t\t\"{$prefix_name}_img_show\",\r\n-\t\t\t\tesc_html__( 'Image', 'learnpress' ),\r\n-\t\t\t\t'',\r\n-\t\t\t\tControls_Manager::SWITCHER,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'selectors'    => [ \"{{WRAPPER}} $selector\" => 'display: {{VALUE}}' ],\r\n-\t\t\t\t\t'return_value' => 'none',\r\n-\t\t\t\t\t'label_on'     => esc_html__( 'Hide', 'learnpress' ),\r\n-\t\t\t\t\t'label_off'    => esc_html__( 'Show', 'learnpress' ),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_img_margin\"        => self::add_responsive_control_type(\r\n-\t\t\t\t\"{$prefix_name}_img_margin\",\r\n-\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_img_padding\"       => self::add_responsive_control_type(\r\n-\t\t\t\t\"{$prefix_name}_img_padding\",\r\n-\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => array(\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_img_border\"        => self::add_group_control_type(\r\n-\t\t\t\t\"{$prefix_name}_img_border\",\r\n-\t\t\t\tGroup_Control_Border::get_type(),\r\n-\t\t\t\t\"{{WRAPPER}} $selector\"\r\n-\t\t\t),\r\n-\t\t\t\"{$prefix_name}_img_border_radius\" => self::add_control_type(\r\n-\t\t\t\t\"{$prefix_name}_img_border_radius\",\r\n-\t\t\t\tesc_html__( 'Border Radius', 'learnpress' ),\r\n-\t\t\t\t[],\r\n-\t\t\t\tControls_Manager::DIMENSIONS,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\r\n-\t\t\t\t\t'selectors'  => [\r\n-\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t];\r\n-\r\n-\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Elementor_Widgets\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor;\n+\n+use Elementor\\Controls_Manager;\n+use Elementor\\Group_Control_Border;\n+use Elementor\\Group_Control_Text_Shadow;\n+use Elementor\\Group_Control_Typography;\n+\n+class LPElementorControls {\n+\t\u002F**\n+\t * Start section.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string $tab\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tprivate static function add_start_section(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\tstring $tab = Controls_Manager::TAB_CONTENT,\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn [\n+\t\t\t'method' => 'start_controls_section',\n+\t\t\t'id'     => $id,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t'tab'   => $tab,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t),\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Start section.\n+\t *\n+\t * @param string $id_section\n+\t * @param string $label_section\n+\t * @param string $tab\n+\t * @param array $fields_inner\n+\t * @param array $args_section\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_fields_in_section(\n+\t\tstring $id_section,\n+\t\tstring $label_section,\n+\t\tstring $tab = Controls_Manager::TAB_CONTENT,\n+\t\tarray $fields_inner = [],\n+\t\tarray $args_section = []\n+\t): array {\n+\t\treturn array_merge(\n+\t\t\t[\n+\t\t\t\t\"section_$id_section\" => LPElementorControls::add_start_section(\n+\t\t\t\t\t\"section_$id_section\",\n+\t\t\t\t\t$label_section,\n+\t\t\t\t\t$tab,\n+\t\t\t\t\t$args_section\n+\t\t\t\t),\n+\t\t\t],\n+\t\t\t$fields_inner,\n+\t\t\t[ \"end_section_$id_section\" => [ 'method' => 'end_controls_section' ] ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Controls Tabs.\n+\t *\n+\t * @param string $id\n+\t * @param array $control_tab_inner\n+\t *\n+\t * @return string[]\n+\t * @since 4.2.3.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function add_start_control_tabs( string $id, array $control_tab_inner = [] ): array {\n+\t\treturn array_merge(\n+\t\t\t[\n+\t\t\t\t'start_controls_tabs_' . $id => [\n+\t\t\t\t\t'method' => 'start_controls_tabs',\n+\t\t\t\t\t'id'     => $id,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t$control_tab_inner,\n+\t\t\t[ 'end_control_tabs_' . $id => [ 'method' => 'end_controls_tabs' ] ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Controls Tab.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param array $controls_inner\n+\t *\n+\t * @return string[]\n+\t * @since 4.2.3.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function add_start_control_tab( string $id, string $label = '', array $controls_inner = [] ): array {\n+\t\treturn array_merge(\n+\t\t\t[\n+\t\t\t\t'start_controls_tab_' . $id => [\n+\t\t\t\t\t'method' => 'start_controls_tab',\n+\t\t\t\t\t'id'     => $id,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t$controls_inner,\n+\t\t\t[ 'end_controls_tab_' . $id => [ 'method' => 'end_controls_tab' ] ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Declare control type.\n+\t *\n+\t * @param string $id\n+\t * @param string $control_type\n+\t * @param string $label\n+\t * @param string|array $default\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_control_type(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\t$default = '',\n+\t\tstring $control_type = Controls_Manager::TEXT,\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn [\n+\t\t\t'method' => 'add_control',\n+\t\t\t'id'     => $id,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'label'   => $label,\n+\t\t\t\t\t'type'    => $control_type,\n+\t\t\t\t\t'default' => $default,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t),\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Responsive control type.\n+\t *\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param string|array $default\n+\t * @param string $control_type\n+\t * @param array $args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function add_responsive_control_type(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\t$default = '',\n+\t\tstring $control_type = Controls_Manager::CHOOSE,\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn [\n+\t\t\t'method' => 'add_responsive_control',\n+\t\t\t'id'     => $id,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'label'   => $label,\n+\t\t\t\t\t'type'    => $control_type,\n+\t\t\t\t\t'default' => $default,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t),\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * control type select.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param array $options\n+\t * @param $default\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_control_type_select(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\tarray $options,\n+\t\t$default,\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn self::add_control_type(\n+\t\t\t$id,\n+\t\t\t$label,\n+\t\t\t$default,\n+\t\t\tControls_Manager::SELECT,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'options' => $options,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * control type select.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param array $selectors\n+\t * @param string $default\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_control_type_switcher(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\tarray $selectors = [],\n+\t\tstring $default = 'no',\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn self::add_control_type(\n+\t\t\t$id,\n+\t\t\t$label,\n+\t\t\t$default,\n+\t\t\tControls_Manager::SWITCHER,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'selectors' => $selectors,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * control type color.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param array $selector\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_control_type_color( string $id, string $label, array $selector, array $args = [] ): array {\n+\t\treturn self::add_control_type(\n+\t\t\t$id,\n+\t\t\t$label,\n+\t\t\t'',\n+\t\t\tControls_Manager::COLOR,\n+\t\t\tarray_merge( [ 'selectors' => $selector ], $args )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Declare control type slider.\n+\t *\n+\t * @param string $id\n+\t * @param string $label\n+\t * @param float $default\n+\t * @param string $unit\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_control_type_slider(\n+\t\tstring $id,\n+\t\tstring $label,\n+\t\tfloat $default = 0,\n+\t\tstring $unit = 'px',\n+\t\tarray $args = []\n+\t): array {\n+\t\treturn self::add_control_type(\n+\t\t\t$id,\n+\t\t\t$label,\n+\t\t\t$default,\n+\t\t\tControls_Manager::SLIDER,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'range'   => array(\n+\t\t\t\t\t\t'px' => array(\n+\t\t\t\t\t\t\t'min'  => 0,\n+\t\t\t\t\t\t\t'max'  => 60,\n+\t\t\t\t\t\t\t'step' => 1,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t\t'default' => array(\n+\t\t\t\t\t\t'size' => $default,\n+\t\t\t\t\t\t'unit' => $unit,\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Declare control type.\n+\t *\n+\t * @param string $id\n+\t * @param string $group_type\n+\t * @param string $selector\n+\t * @param array $args\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic static function add_group_control_type( string $id, string $group_type, string $selector, array $args = [] ): array {\n+\t\treturn [\n+\t\t\t'method' => 'add_group_control',\n+\t\t\t$group_type,\n+\t\t\tarray_merge(\n+\t\t\t\t[\n+\t\t\t\t\t'name'     => $id,\n+\t\t\t\t\t'selector' => $selector,\n+\t\t\t\t],\n+\t\t\t\t$args\n+\t\t\t),\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Include or exclude more fields.\n+\t *\n+\t * @param array $fields\n+\t * @param string $prefix_name - prefix name of field for exclude. Format: 'prefix_name'_'field_name_want_exclude'\n+\t * @param array $include - no need prefix_name, must add by standard format: 'prefix_name'_'btn'_'attribute'\n+\t * @param array $exclude\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprivate static function add_group_style_controls(\n+\t\tarray $fields,\n+\t\tstring $prefix_name,\n+\t\tarray $include = [],\n+\t\tarray $exclude = []\n+\t): array {\n+\n+\t\tif ( ! empty( $include ) ) {\n+\t\t\t$fields = array_merge( $fields, $include );\n+\t\t}\n+\n+\t\tif ( ! empty( $exclude ) ) {\n+\t\t\tforeach ( $exclude as $field ) {\n+\t\t\t\t$field = \"{$prefix_name}_{$field}\";\n+\t\t\t\tunset( $fields[ $field ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+\n+\t\u002F**\n+\t * Group control style for text.\n+\t *\n+\t * @param string $prefix_name\n+\t * @param string $selector\n+\t * @param array $include\n+\t * @param array $exclude\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function add_controls_style_text(\n+\t\tstring $prefix_name,\n+\t\tstring $selector,\n+\t\tarray $include = [],\n+\t\tarray $exclude = []\n+\t): array {\n+\t\t$fields = [\n+\t\t\t\"{$prefix_name}_text_display\"          => self::add_control_type(\n+\t\t\t\t\"{$prefix_name}_text_display\",\n+\t\t\t\tesc_html__( 'Display', 'learnpress' ),\n+\t\t\t\t'block',\n+\t\t\t\tControls_Manager::CHOOSE,\n+\t\t\t\t[\n+\t\t\t\t\t'options'   => [\n+\t\t\t\t\t\t'block'        => array(\n+\t\t\t\t\t\t\t'title' => esc_html__( 'Block', 'learnpress' ),\n+\t\t\t\t\t\t\t'icon'  => 'eicon-editor-list-ul',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'inline-block' => array(\n+\t\t\t\t\t\t\t'title' => esc_html__( 'Inline', 'learnpress' ),\n+\t\t\t\t\t\t\t'icon'  => 'eicon-ellipsis-h',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t],\n+\t\t\t\t\t'selectors' => [\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'display: {{VALUE}}',\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_margin\"           => self::add_responsive_control_type(\n+\t\t\t\t\"{$prefix_name}_text_margin\",\n+\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_padding\"          => self::add_responsive_control_type(\n+\t\t\t\t\"{$prefix_name}_text_padding\",\n+\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_typography\"       => self::add_group_control_type(\n+\t\t\t\t\"{$prefix_name}_typography\",\n+\t\t\t\tGroup_Control_Typography::get_type(),\n+\t\t\t\t\"{{WRAPPER}} $selector\"\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_shadow\"           => self::add_group_control_type(\n+\t\t\t\t\"{$prefix_name}_shadow\",\n+\t\t\t\tGroup_Control_Text_Shadow::get_type(),\n+\t\t\t\t\"{{WRAPPER}} $selector\"\n+\t\t\t),\n+\n+\t\t\t\"{$prefix_name}_text_color\"            => self::add_control_type_color(\n+\t\t\t\t\"{$prefix_name}_text_color\",\n+\t\t\t\tesc_html__( 'Text Color', 'learnpress' ),\n+\t\t\t\t[ \"{{WRAPPER}} $selector\" => 'color: {{VALUE}}' ]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_color_hover\"      => self::add_control_type_color(\n+\t\t\t\t\"{$prefix_name}_text_color_hover\",\n+\t\t\t\tesc_html__( 'Text Color Hover', 'learnpress' ),\n+\t\t\t\t[ \"{{WRAPPER}} $selector:hover\" => 'color: {{VALUE}}' ]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_background\"       => self::add_control_type_color(\n+\t\t\t\t\"{$prefix_name}_text_background\",\n+\t\t\t\tesc_html__( 'Background Color', 'learnpress' ),\n+\t\t\t\t[ \"{{WRAPPER}} $selector\" => 'background: {{VALUE}}' ]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_text_background_hover\" => self::add_control_type_color(\n+\t\t\t\t\"{$prefix_name}_text_background_hover\",\n+\t\t\t\tesc_html__( 'Background Color Hover', 'learnpress' ),\n+\t\t\t\t[ \"{{WRAPPER}} $selector:hover\" => 'background: {{VALUE}}' ]\n+\t\t\t),\n+\t\t];\n+\n+\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\n+\t}\n+\n+\t\u002F**\n+\t * Group control style for button.\n+\t *\n+\t * @param string $prefix_name\n+\t * @param string $selector\n+\t * @param array $include\n+\t * @param array $exclude\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function add_controls_style_button(\n+\t\tstring $prefix_name,\n+\t\tstring $selector,\n+\t\tarray $include = [],\n+\t\tarray $exclude = []\n+\t): array {\n+\n+\t\t$fields = self::add_controls_style_text( $prefix_name, $selector, $include, $exclude );\n+\t\t$fields = array_merge(\n+\t\t\t$fields,\n+\t\t\t[\n+\t\t\t\t\"{$prefix_name}_btn_border\"        => self::add_group_control_type(\n+\t\t\t\t\t\"{$prefix_name}_btn_border\",\n+\t\t\t\t\tGroup_Control_Border::get_type(),\n+\t\t\t\t\t\"{{WRAPPER}} $selector\"\n+\t\t\t\t),\n+\t\t\t\t\"{$prefix_name}_btn_border_radius\" => self::add_control_type(\n+\t\t\t\t\t\"{$prefix_name}_btn_border_radius\",\n+\t\t\t\t\tesc_html__( 'Border Radius', 'learnpress' ),\n+\t\t\t\t\t[],\n+\t\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t\t'selectors'  => [\n+\t\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t]\n+\t\t);\n+\n+\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\n+\t}\n+\n+\t\u002F**\n+\t * Group control style for button.\n+\t *\n+\t * @param string $prefix_name\n+\t * @param string $selector\n+\t * @param array $include\n+\t * @param array $exclude\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function add_controls_style_image(\n+\t\tstring $prefix_name,\n+\t\tstring $selector,\n+\t\tarray $include = [],\n+\t\tarray $exclude = []\n+\t): array {\n+\n+\t\t$fields = [\n+\t\t\t\"{$prefix_name}_img_show\"          => self::add_control_type(\n+\t\t\t\t\"{$prefix_name}_img_show\",\n+\t\t\t\tesc_html__( 'Image', 'learnpress' ),\n+\t\t\t\t'',\n+\t\t\t\tControls_Manager::SWITCHER,\n+\t\t\t\t[\n+\t\t\t\t\t'selectors'    => [ \"{{WRAPPER}} $selector\" => 'display: {{VALUE}}' ],\n+\t\t\t\t\t'return_value' => 'none',\n+\t\t\t\t\t'label_on'     => esc_html__( 'Hide', 'learnpress' ),\n+\t\t\t\t\t'label_off'    => esc_html__( 'Show', 'learnpress' ),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_img_margin\"        => self::add_responsive_control_type(\n+\t\t\t\t\"{$prefix_name}_img_margin\",\n+\t\t\t\tesc_html__( 'Margin', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_img_padding\"       => self::add_responsive_control_type(\n+\t\t\t\t\"{$prefix_name}_img_padding\",\n+\t\t\t\tesc_html__( 'Padding', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => array(\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t),\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_img_border\"        => self::add_group_control_type(\n+\t\t\t\t\"{$prefix_name}_img_border\",\n+\t\t\t\tGroup_Control_Border::get_type(),\n+\t\t\t\t\"{{WRAPPER}} $selector\"\n+\t\t\t),\n+\t\t\t\"{$prefix_name}_img_border_radius\" => self::add_control_type(\n+\t\t\t\t\"{$prefix_name}_img_border_radius\",\n+\t\t\t\tesc_html__( 'Border Radius', 'learnpress' ),\n+\t\t\t\t[],\n+\t\t\t\tControls_Manager::DIMENSIONS,\n+\t\t\t\t[\n+\t\t\t\t\t'size_units' => [ 'px', '%', 'custom' ],\n+\t\t\t\t\t'selectors'  => [\n+\t\t\t\t\t\t\"{{WRAPPER}} $selector\" => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t),\n+\t\t];\n+\n+\t\treturn self::add_group_style_controls( $fields, $prefix_name, $include, $exclude );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,140 +1,140 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LPElementor\r\n- * Register categories\r\n- * Register widgets\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor;\r\n-use Elementor\\Core\\DynamicTags\\Manager;\r\n-use Elementor\\Elements_Manager;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-class LPElementor {\r\n-\tuse Singleton;\r\n-\r\n-\tconst GROUP_DYNAMIC   = 'learnpress_dynamic';\r\n-\tconst CATE_LP         = 'learnpress';\r\n-\tconst CATE_COURSE     = 'learnpress_course';\r\n-\tconst CATE_INSTRUCTOR = 'learnpress_instructor';\r\n-\tpublic $config        = [];\r\n-\r\n-\tprotected function init() {\r\n-\t\tadd_action( 'elementor\u002Finit', array( $this, 'load_widgets_config' ) );\r\n-\t\tadd_action( 'elementor\u002Felements\u002Fcategories_registered', array( $this, 'register_category' ) );\r\n-\t\tadd_action( 'elementor\u002Fwidgets\u002Fregister', array( $this, 'register_widgets' ), 10, 1 );\r\n-\t\tadd_action( 'elementor\u002Fdynamic_tags\u002Fregister', array( $this, 'register_tags' ) );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'register_callback_ajax' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load widgets config of LP\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function load_widgets_config() {\r\n-\t\t$this->config = require_once 'lp-elementor-widgets-config.php';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register category LearnPress\r\n-\t *\r\n-\t * @param Elements_Manager $elements_manager\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function register_category( Elements_Manager $elements_manager ) {\r\n-\t\t$categories = [\r\n-\t\t\tself::CATE_LP         => [\r\n-\t\t\t\t'title' => esc_html__( 'LearnPress', 'learnpress' ),\r\n-\t\t\t\t'icon'  => 'eicon-navigator',\r\n-\t\t\t],\r\n-\t\t\tself::CATE_INSTRUCTOR => [\r\n-\t\t\t\t'title' => esc_html__( 'LearnPress Instructor Sections', 'learnpress' ),\r\n-\t\t\t\t'icon'  => 'eicon-navigator',\r\n-\t\t\t],\r\n-\t\t\tself::CATE_COURSE     => [\r\n-\t\t\t\t'title' => esc_html__( 'LearnPress Course Sections', 'learnpress' ),\r\n-\t\t\t\t'icon'  => 'eicon-navigator',\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $categories as $key => $category ) {\r\n-\t\t\t$elements_manager->add_category(\r\n-\t\t\t\t$key,\r\n-\t\t\t\t$category\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F For case priority categories of LP for El to top.\r\n-\t\t\u002F*$old_categories = $elements_manager->get_categories();\r\n-\t\t$categories     = array_merge( $categories, $old_categories );\r\n-\r\n-\t\t$set_categories = function ( $categories ) {\r\n-\t\t\t$this->categories = $categories;\r\n-\t\t};\r\n-\t\t$set_categories->call( $elements_manager, $categories );*\u002F\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register widgets for elementor\r\n-\t *\r\n-\t * @param $widgets_manager\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function register_widgets( $widgets_manager ) {\r\n-\t\tforeach ( $this->config['widgets'] as $widget => $class ) {\r\n-\t\t\tif ( class_exists( $class ) ) {\r\n-\t\t\t\t$widgets_manager->register( new $class() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register dynamic tags for elementor\r\n-\t *\r\n-\t * @param Manager $dynamic_tags\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function register_tags( Manager $dynamic_tags ) {\r\n-\t\t\u002F\u002F Register group learn-press-dynamic\r\n-\t\t$dynamic_tags->register_group(\r\n-\t\t\tself::GROUP_DYNAMIC,\r\n-\t\t\tarray(\r\n-\t\t\t\t'title' => esc_html__(\r\n-\t\t\t\t\t'LearnPress',\r\n-\t\t\t\t\t'learnpress'\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $this->config['dynamic'] as $key => $tag_class_name ) {\r\n-\t\t\t$dynamic_tags->register( new $tag_class_name() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register callback ajax for load content via ajax.\r\n-\t * Of LearnPress\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function register_callback_ajax( array $callbacks ): array {\r\n-\t\treturn array_merge(\r\n-\t\t\t$callbacks,\r\n-\t\t\t$this->config['loadAjax']\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LPElementor\n+ * Register categories\n+ * Register widgets\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.2\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor;\n+use Elementor\\Core\\DynamicTags\\Manager;\n+use Elementor\\Elements_Manager;\n+use LearnPress\\Helpers\\Singleton;\n+\n+class LPElementor {\n+\tuse Singleton;\n+\n+\tconst GROUP_DYNAMIC   = 'learnpress_dynamic';\n+\tconst CATE_LP         = 'learnpress';\n+\tconst CATE_COURSE     = 'learnpress_course';\n+\tconst CATE_INSTRUCTOR = 'learnpress_instructor';\n+\tpublic $config        = [];\n+\n+\tprotected function init() {\n+\t\tadd_action( 'elementor\u002Finit', array( $this, 'load_widgets_config' ) );\n+\t\tadd_action( 'elementor\u002Felements\u002Fcategories_registered', array( $this, 'register_category' ) );\n+\t\tadd_action( 'elementor\u002Fwidgets\u002Fregister', array( $this, 'register_widgets' ), 10, 1 );\n+\t\tadd_action( 'elementor\u002Fdynamic_tags\u002Fregister', array( $this, 'register_tags' ) );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'register_callback_ajax' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Load widgets config of LP\n+\t *\n+\t * @return void\n+\t * @since 4.2.3.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function load_widgets_config() {\n+\t\t$this->config = require_once 'lp-elementor-widgets-config.php';\n+\t}\n+\n+\t\u002F**\n+\t * Register category LearnPress\n+\t *\n+\t * @param Elements_Manager $elements_manager\n+\t *\n+\t * @return void\n+\t * @since 4.2.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function register_category( Elements_Manager $elements_manager ) {\n+\t\t$categories = [\n+\t\t\tself::CATE_LP         => [\n+\t\t\t\t'title' => esc_html__( 'LearnPress', 'learnpress' ),\n+\t\t\t\t'icon'  => 'eicon-navigator',\n+\t\t\t],\n+\t\t\tself::CATE_INSTRUCTOR => [\n+\t\t\t\t'title' => esc_html__( 'LearnPress Instructor Sections', 'learnpress' ),\n+\t\t\t\t'icon'  => 'eicon-navigator',\n+\t\t\t],\n+\t\t\tself::CATE_COURSE     => [\n+\t\t\t\t'title' => esc_html__( 'LearnPress Course Sections', 'learnpress' ),\n+\t\t\t\t'icon'  => 'eicon-navigator',\n+\t\t\t],\n+\t\t];\n+\n+\t\tforeach ( $categories as $key => $category ) {\n+\t\t\t$elements_manager->add_category(\n+\t\t\t\t$key,\n+\t\t\t\t$category\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F For case priority categories of LP for El to top.\n+\t\t\u002F*$old_categories = $elements_manager->get_categories();\n+\t\t$categories     = array_merge( $categories, $old_categories );\n+\n+\t\t$set_categories = function ( $categories ) {\n+\t\t\t$this->categories = $categories;\n+\t\t};\n+\t\t$set_categories->call( $elements_manager, $categories );*\u002F\n+\t}\n+\n+\t\u002F**\n+\t * Register widgets for elementor\n+\t *\n+\t * @param $widgets_manager\n+\t * @return void\n+\t *\u002F\n+\tpublic function register_widgets( $widgets_manager ) {\n+\t\tforeach ( $this->config['widgets'] as $widget => $class ) {\n+\t\t\tif ( class_exists( $class ) ) {\n+\t\t\t\t$widgets_manager->register( new $class() );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Register dynamic tags for elementor\n+\t *\n+\t * @param Manager $dynamic_tags\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function register_tags( Manager $dynamic_tags ) {\n+\t\t\u002F\u002F Register group learn-press-dynamic\n+\t\t$dynamic_tags->register_group(\n+\t\t\tself::GROUP_DYNAMIC,\n+\t\t\tarray(\n+\t\t\t\t'title' => esc_html__(\n+\t\t\t\t\t'LearnPress',\n+\t\t\t\t\t'learnpress'\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tforeach ( $this->config['dynamic'] as $key => $tag_class_name ) {\n+\t\t\t$dynamic_tags->register( new $tag_class_name() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Register callback ajax for load content via ajax.\n+\t * Of LearnPress\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t * @since 4.2.5.8\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function register_callback_ajax( array $callbacks ): array {\n+\t\treturn array_merge(\n+\t\t\t$callbacks,\n+\t\t\t$this->config['loadAjax']\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorWidgetBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorWidgetBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorWidgetBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPElementorWidgetBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,136 +1,136 @@\n-\u003C?php\r\n-namespace LearnPress\\ExternalPlugin\\Elementor;\r\n-\r\n-use Elementor\\Controls_Manager;\r\n-use Elementor\\Repeater;\r\n-use Elementor\\Widget_Base;\r\n-use Throwable;\r\n-\r\n-class LPElementorWidgetBase extends Widget_Base {\r\n-\t\u002F**\r\n-\t * @var string $title\r\n-\t *\u002F\r\n-\tpublic $title = '';\r\n-\t\u002F**\r\n-\t * @var string $prefix_name;\r\n-\t *\u002F\r\n-\tprivate $prefix_name = 'learnpress_';\r\n-\t\u002F**\r\n-\t * @var string $name;\r\n-\t *\u002F\r\n-\tpublic $name = '';\r\n-\t\u002F**\r\n-\t * @var string $icon\r\n-\t *\u002F\r\n-\tpublic $icon;\r\n-\t\u002F**\r\n-\t * @var string[] key search widget\r\n-\t *\u002F\r\n-\tpublic $keywords = array();\r\n-\t\u002F**\r\n-\t * @var array Controls\r\n-\t *\u002F\r\n-\tpublic $controls = array();\r\n-\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\r\n-\tpublic function get_title() {\r\n-\t\treturn $this->title;\r\n-\t}\r\n-\r\n-\tpublic function get_name() {\r\n-\t\treturn $this->prefix_name . $this->name;\r\n-\t}\r\n-\r\n-\tpublic function get_icon() {\r\n-\t\treturn $this->icon ?? 'eicon-site-logo';\r\n-\t}\r\n-\r\n-\tpublic function get_keywords() {\r\n-\t\treturn array_push( $this->keywords, 'learnpress' );\r\n-\t}\r\n-\r\n-\tpublic function get_categories() {\r\n-\t\treturn array( 'learnpress' );\r\n-\t}\r\n-\r\n-\tpublic function get_help_url() {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function register_controls() {\r\n-\t\tif ( ! is_array( $this->controls ) ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . json_encode( $this->controls ) );\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\t$this->print_fields( $this->controls );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @param array $fields\r\n-\t *\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.0\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function print_fields( array $fields ) {\r\n-\t\ttry {\r\n-\t\t\tforeach ( $fields as $id => $field ) {\r\n-\t\t\t\tif ( isset( $field['method'] ) && is_callable( [ $this, $field['method'] ] ) && is_array( $field ) ) {\r\n-\t\t\t\t\t$params = [];\r\n-\t\t\t\t\tforeach ( $field as $key => $value ) {\r\n-\t\t\t\t\t\tif ( 'method' === $key ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$params[] = $value;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Register control type Repeater\r\n-\t\t\t\t\tif ( isset( $params[1]['type'] ) && Controls_Manager::REPEATER === $params[1]['type'] ) {\r\n-\t\t\t\t\t\t$repeater = new Repeater();\r\n-\r\n-\t\t\t\t\t\tforeach ( $params[1]['fields'] as $key => $value ) {\r\n-\t\t\t\t\t\t\t\u002F\u002F For call method add_responsive_control, and another method\r\n-\t\t\t\t\t\t\tif ( isset( $value['method'] ) ) {\r\n-\t\t\t\t\t\t\t\t$prms = $value;\r\n-\t\t\t\t\t\t\t\tunset( $prms['method'] );\r\n-\r\n-\t\t\t\t\t\t\t\tif ( 'add_group_control' === $value['method'] ) {\r\n-\t\t\t\t\t\t\t\t\t$args = [ $value['type'] ?? '', $prms ];\r\n-\t\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t\tunset( $prms['name'] );\r\n-\t\t\t\t\t\t\t\t\t$args = [ $value['name'] ?? '', $prms ];\r\n-\t\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\tcall_user_func_array( [ $repeater, $value['method'] ], $args );\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$repeater->add_control( $value['name'], $value );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$params[1]['fields']      = $repeater->get_controls();\r\n-\t\t\t\t\t\t$params[1]['title_field'] = $params[1]['title_field'] ?? '';\r\n-\t\t\t\t\t\t$this->add_control(\r\n-\t\t\t\t\t\t\t$params[0], \u002F\u002F string id of control\r\n-\t\t\t\t\t\t\t$params[1] \u002F\u002F array args of control\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tcall_user_func_array( [ $this, $field['method'] ], $params );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\ExternalPlugin\\Elementor;\n+\n+use Elementor\\Controls_Manager;\n+use Elementor\\Repeater;\n+use Elementor\\Widget_Base;\n+use Throwable;\n+\n+class LPElementorWidgetBase extends Widget_Base {\n+\t\u002F**\n+\t * @var string $title\n+\t *\u002F\n+\tpublic $title = '';\n+\t\u002F**\n+\t * @var string $prefix_name;\n+\t *\u002F\n+\tprivate $prefix_name = 'learnpress_';\n+\t\u002F**\n+\t * @var string $name;\n+\t *\u002F\n+\tpublic $name = '';\n+\t\u002F**\n+\t * @var string $icon\n+\t *\u002F\n+\tpublic $icon;\n+\t\u002F**\n+\t * @var string[] key search widget\n+\t *\u002F\n+\tpublic $keywords = array();\n+\t\u002F**\n+\t * @var array Controls\n+\t *\u002F\n+\tpublic $controls = array();\n+\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\n+\tpublic function get_title() {\n+\t\treturn $this->title;\n+\t}\n+\n+\tpublic function get_name() {\n+\t\treturn $this->prefix_name . $this->name;\n+\t}\n+\n+\tpublic function get_icon() {\n+\t\treturn $this->icon ?? 'eicon-site-logo';\n+\t}\n+\n+\tpublic function get_keywords() {\n+\t\treturn array_push( $this->keywords, 'learnpress' );\n+\t}\n+\n+\tpublic function get_categories() {\n+\t\treturn array( 'learnpress' );\n+\t}\n+\n+\tpublic function get_help_url() {\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function register_controls() {\n+\t\tif ( ! is_array( $this->controls ) ) {\n+\t\t\terror_log( __METHOD__ . ': ' . json_encode( $this->controls ) );\n+\t\t\treturn;\n+\t\t}\n+\t\t$this->print_fields( $this->controls );\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @param array $fields\n+\t *\n+\t * @since 4.2.3\n+\t * @version 1.0.0\n+\t * @return void\n+\t *\u002F\n+\tprotected function print_fields( array $fields ) {\n+\t\ttry {\n+\t\t\tforeach ( $fields as $id => $field ) {\n+\t\t\t\tif ( isset( $field['method'] ) && is_callable( [ $this, $field['method'] ] ) && is_array( $field ) ) {\n+\t\t\t\t\t$params = [];\n+\t\t\t\t\tforeach ( $field as $key => $value ) {\n+\t\t\t\t\t\tif ( 'method' === $key ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$params[] = $value;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Register control type Repeater\n+\t\t\t\t\tif ( isset( $params[1]['type'] ) && Controls_Manager::REPEATER === $params[1]['type'] ) {\n+\t\t\t\t\t\t$repeater = new Repeater();\n+\n+\t\t\t\t\t\tforeach ( $params[1]['fields'] as $key => $value ) {\n+\t\t\t\t\t\t\t\u002F\u002F For call method add_responsive_control, and another method\n+\t\t\t\t\t\t\tif ( isset( $value['method'] ) ) {\n+\t\t\t\t\t\t\t\t$prms = $value;\n+\t\t\t\t\t\t\t\tunset( $prms['method'] );\n+\n+\t\t\t\t\t\t\t\tif ( 'add_group_control' === $value['method'] ) {\n+\t\t\t\t\t\t\t\t\t$args = [ $value['type'] ?? '', $prms ];\n+\t\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t\tunset( $prms['name'] );\n+\t\t\t\t\t\t\t\t\t$args = [ $value['name'] ?? '', $prms ];\n+\t\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\tcall_user_func_array( [ $repeater, $value['method'] ], $args );\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$repeater->add_control( $value['name'], $value );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$params[1]['fields']      = $repeater->get_controls();\n+\t\t\t\t\t\t$params[1]['title_field'] = $params[1]['title_field'] ?? '';\n+\t\t\t\t\t\t$this->add_control(\n+\t\t\t\t\t\t\t$params[0], \u002F\u002F string id of control\n+\t\t\t\t\t\t\t$params[1] \u002F\u002F array args of control\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tcall_user_func_array( [ $this, $field['method'] ], $params );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002Flp-elementor-widgets-config.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002Flp-elementor-widgets-config.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002Flp-elementor-widgets-config.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002Flp-elementor-widgets-config.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Declare list LP widgets for elementor\r\n- *\u002F\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\BecomeATeacherElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorNameElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorAvatarElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorUrlElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCapacityDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountLessonDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountQuizDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountStudentDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseDurationDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseLevelDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineDeliverTypeDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineAddressDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineCountLessonDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\ListCoursesByPageElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Sections\\CoursePriceElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\FilterCourseElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\CourseListElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorButtonViewElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorDescriptionElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorTitleElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorAvatarElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorCountStudentsElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorCountCoursesElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\ListInstructorsElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\LoginUserFormElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\RegisterUserFormElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CountCoursesFreeDynamicElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CountStudentDynamicElementor;\r\n-\r\n-return [\r\n-\t'widgets'  => apply_filters(\r\n-\t\t'lp\u002Felementor\u002Fwidgets',\r\n-\t\t[\r\n-\t\t\t\u002F\u002F'single-instructor'      => SingleInstructorElementor::class,\r\n-\t\t\t'list-instructors'          => ListInstructorsElementor::class,\r\n-\t\t\t'instructor-title'          => InstructorTitleElementor::class,\r\n-\t\t\t'instructor-description'    => InstructorDescriptionElementor::class,\r\n-\t\t\t'instructor-button-view'    => InstructorButtonViewElementor::class,\r\n-\t\t\t'instructor-avatar'         => InstructorAvatarElementor::class,\r\n-\t\t\t'instructor-count-students' => InstructorCountStudentsElementor::class,\r\n-\t\t\t'instructor-count-courses'  => InstructorCountCoursesElementor::class,\r\n-\t\t\t'become-a-teacher'          => BecomeATeacherElementor::class,\r\n-\t\t\t'login-form'                => LoginUserFormElementor::class,\r\n-\t\t\t'register-form'             => RegisterUserFormElementor::class,\r\n-\t\t\t'list-courses'              => CourseListElementor::class,\r\n-\t\t\t\u002F\u002F'list-courses-by-page'      => ListCoursesByPageElementor::class,\r\n-\t\t\t\u002F\u002F Single Course\r\n-\t\t\t'course-price'              => CoursePriceElementor::class,\r\n-\t\t\t\u002F\u002F'filter-course'               => FilterCourseElementor::class\r\n-\t\t]\r\n-\t),\r\n-\t'dynamic'  => apply_filters(\r\n-\t\t'lp\u002Felementor\u002Fdynamic',\r\n-\t\t[\r\n-\t\t\t'course-count-student'        => CourseCountStudentDynamicElementor::class,\r\n-\t\t\t'course-count-lesson'         => CourseCountLessonDynamicElementor::class,\r\n-\t\t\t'course-offline-count-lesson' => CourseOfflineCountLessonDynamicElementor::class,\r\n-\t\t\t'course-deliver-type'         => CourseOfflineDeliverTypeDynamicElementor::class,\r\n-\t\t\t'course-address'              => CourseOfflineAddressDynamicElementor::class,\r\n-\t\t\t'course-count-quiz'           => CourseCountQuizDynamicElementor::class,\r\n-\t\t\t'course-count-level'          => CourseLevelDynamicElementor::class,\r\n-\t\t\t'course-count-duration'       => CourseDurationDynamicElementor::class,\r\n-\t\t\t'course-author-name'          => CourseAuthorNameElementor::class,\r\n-\t\t\t'course-author-avatar'        => CourseAuthorAvatarElementor::class,\r\n-\t\t\t'course-author-url'           => CourseAuthorUrlElementor::class,\r\n-\t\t\t'count-student-courses'       => CountStudentDynamicElementor::class,\r\n-\t\t\t'course-courses-free'         => CountCoursesFreeDynamicElementor::class,\r\n-\t\t\t'course-capacity'             => CourseCapacityDynamicElementor::class,\r\n-\t\t]\r\n-\t),\r\n-\t'loadAjax' => apply_filters(\r\n-\t\t'lp\u002Felementor\u002FloadAjax',\r\n-\t\t[\r\n-\t\t\tCoursesGrid::class . ':render_courses',\r\n-\t\t\tCoursesList::class . ':render_courses',\r\n-\t\t\tCoursesLoopItem::class . ':render_courses',\r\n-\t\t]\r\n-\t),\r\n-];\r\n+\u003C?php\n+\n+\u002F**\n+ * Declare list LP widgets for elementor\n+ *\u002F\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\BecomeATeacherElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorNameElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorAvatarElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseAuthorUrlElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCapacityDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountLessonDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountQuizDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseCountStudentDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseDurationDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseLevelDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineDeliverTypeDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineAddressDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CourseOfflineCountLessonDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\ListCoursesByPageElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Sections\\CoursePriceElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\FilterCourseElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\CourseListElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorButtonViewElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorDescriptionElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorTitleElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorAvatarElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorCountStudentsElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections\\InstructorCountCoursesElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\ListInstructorsElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\LoginUserFormElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\RegisterUserFormElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CountCoursesFreeDynamicElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic\\CountStudentDynamicElementor;\n+\n+return [\n+\t'widgets'  => apply_filters(\n+\t\t'lp\u002Felementor\u002Fwidgets',\n+\t\t[\n+\t\t\t\u002F\u002F'single-instructor'      => SingleInstructorElementor::class,\n+\t\t\t'list-instructors'          => ListInstructorsElementor::class,\n+\t\t\t'instructor-title'          => InstructorTitleElementor::class,\n+\t\t\t'instructor-description'    => InstructorDescriptionElementor::class,\n+\t\t\t'instructor-button-view'    => InstructorButtonViewElementor::class,\n+\t\t\t'instructor-avatar'         => InstructorAvatarElementor::class,\n+\t\t\t'instructor-count-students' => InstructorCountStudentsElementor::class,\n+\t\t\t'instructor-count-courses'  => InstructorCountCoursesElementor::class,\n+\t\t\t'become-a-teacher'          => BecomeATeacherElementor::class,\n+\t\t\t'login-form'                => LoginUserFormElementor::class,\n+\t\t\t'register-form'             => RegisterUserFormElementor::class,\n+\t\t\t'list-courses'              => CourseListElementor::class,\n+\t\t\t\u002F\u002F'list-courses-by-page'      => ListCoursesByPageElementor::class,\n+\t\t\t\u002F\u002F Single Course\n+\t\t\t'course-price'              => CoursePriceElementor::class,\n+\t\t\t\u002F\u002F'filter-course'               => FilterCourseElementor::class\n+\t\t]\n+\t),\n+\t'dynamic'  => apply_filters(\n+\t\t'lp\u002Felementor\u002Fdynamic',\n+\t\t[\n+\t\t\t'course-count-student'        => CourseCountStudentDynamicElementor::class,\n+\t\t\t'course-count-lesson'         => CourseCountLessonDynamicElementor::class,\n+\t\t\t'course-offline-count-lesson' => CourseOfflineCountLessonDynamicElementor::class,\n+\t\t\t'course-deliver-type'         => CourseOfflineDeliverTypeDynamicElementor::class,\n+\t\t\t'course-address'              => CourseOfflineAddressDynamicElementor::class,\n+\t\t\t'course-count-quiz'           => CourseCountQuizDynamicElementor::class,\n+\t\t\t'course-count-level'          => CourseLevelDynamicElementor::class,\n+\t\t\t'course-count-duration'       => CourseDurationDynamicElementor::class,\n+\t\t\t'course-author-name'          => CourseAuthorNameElementor::class,\n+\t\t\t'course-author-avatar'        => CourseAuthorAvatarElementor::class,\n+\t\t\t'course-author-url'           => CourseAuthorUrlElementor::class,\n+\t\t\t'count-student-courses'       => CountStudentDynamicElementor::class,\n+\t\t\t'course-courses-free'         => CountCoursesFreeDynamicElementor::class,\n+\t\t\t'course-capacity'             => CourseCapacityDynamicElementor::class,\n+\t\t]\n+\t),\n+\t'loadAjax' => apply_filters(\n+\t\t'lp\u002Felementor\u002FloadAjax',\n+\t\t[\n+\t\t\tCoursesGrid::class . ':render_courses',\n+\t\t\tCoursesList::class . ':render_courses',\n+\t\t\tCoursesLoopItem::class . ':render_courses',\n+\t\t]\n+\t),\n+];\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPSkinBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPSkinBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPSkinBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FLPSkinBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-\u003C?php\r\n-namespace LearnPress\\ExternalPlugin\\Elementor;\r\n-\r\n-use Elementor\\Skin_Base;\r\n-\r\n-abstract class LPSkinBase extends Skin_Base {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $lp_el_skin_id = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $lp_el_skin_title = '';\r\n-\r\n-\tpublic function get_id() {\r\n-\t\treturn 'lp_el_skin_' . $this->lp_el_skin_id;\r\n-\t}\r\n-\r\n-\tpublic function get_title() {\r\n-\t\treturn $this->lp_el_skin_title;\r\n-\t}\r\n-\r\n-\t\u002F\u002F For hook add controls of each skin type\r\n-\tprotected function _register_controls_actions() {}\r\n-\r\n-\tpublic function render() {\r\n-\t\t\u002F\u002F Render your skin here\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\ExternalPlugin\\Elementor;\n+\n+use Elementor\\Skin_Base;\n+\n+abstract class LPSkinBase extends Skin_Base {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $lp_el_skin_id = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $lp_el_skin_title = '';\n+\n+\tpublic function get_id() {\n+\t\treturn 'lp_el_skin_' . $this->lp_el_skin_id;\n+\t}\n+\n+\tpublic function get_title() {\n+\t\treturn $this->lp_el_skin_title;\n+\t}\n+\n+\t\u002F\u002F For hook add controls of each skin type\n+\tprotected function _register_controls_actions() {}\n+\n+\tpublic function render() {\n+\t\t\u002F\u002F Render your skin here\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FBecomeATeacherElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FBecomeATeacherElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FBecomeATeacherElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FBecomeATeacherElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class BecomeATeacherElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Become a teacher', 'learnpress' );\r\n-\t\t$this->name     = 'become_a_teacher';\r\n-\t\t$this->keywords = [ 'teacher', 'become' ];\r\n-\t\t$this->icon     = 'eicon-site-logo';\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'become-a-teacher', 'elementor\u002Finstructor' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$settings = $this->get_settings_for_display();\r\n-\r\n-\t\techo do_shortcode( '[learn_press_become_teacher_form title=\"' . $settings['title'] . '\" description=\"' . $settings['description'] . '\" submit_button_text=\"' . esc_html( $settings['submit_button_text'] ) . '\" submit_button_process_text=\"' . $settings['submit_button_process_text'] . '\"]' );\r\n-\t}\r\n-\r\n-\tpublic function get_style_depends() {\r\n-\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\r\n-\r\n-\t\treturn array( 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+\n+class BecomeATeacherElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Become a teacher', 'learnpress' );\n+\t\t$this->name     = 'become_a_teacher';\n+\t\t$this->keywords = [ 'teacher', 'become' ];\n+\t\t$this->icon     = 'eicon-site-logo';\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'become-a-teacher', 'elementor\u002Finstructor' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\tpublic function render() {\n+\t\t$settings = $this->get_settings_for_display();\n+\n+\t\techo do_shortcode( '[learn_press_become_teacher_form title=\"' . $settings['title'] . '\" description=\"' . $settings['description'] . '\" submit_button_text=\"' . esc_html( $settings['submit_button_text'] ) . '\" submit_button_process_text=\"' . $settings['submit_button_process_text'] . '\"]' );\n+\t}\n+\n+\tpublic function get_style_depends() {\n+\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\n+\n+\t\treturn array( 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FCourseMaterialElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FCourseMaterialElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FCourseMaterialElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FCourseMaterialElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use Throwable;\r\n-class CourseMaterialElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Course\u002FLesson Material', 'learnpress' );\r\n-\t\t$this->name     = 'lp_course_material';\r\n-\t\t$this->keywords = [ 'courses', 'lesson', 'material' ];\r\n-\t\t$this->icon     = 'eicon-document-file';\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'materials', 'elementor\u002Fcourse' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\t$settings = $this->get_settings_for_display();\r\n-\t\t\techo '\u003Cpre>';\r\n-\t\t\tprint_r( $settings );\r\n-\t\t\techo '\u003C\u002Fpre>';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use Throwable;\n+class CourseMaterialElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Course\u002FLesson Material', 'learnpress' );\n+\t\t$this->name     = 'lp_course_material';\n+\t\t$this->keywords = [ 'courses', 'lesson', 'material' ];\n+\t\t$this->icon     = 'eicon-document-file';\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'materials', 'elementor\u002Fcourse' );\n+\t\tparent::register_controls();\n+\t}\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\t$settings = $this->get_settings_for_display();\n+\t\t\techo '\u003Cpre>';\n+\t\t\tprint_r( $settings );\n+\t\t\techo '\u003C\u002Fpre>';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountCoursesFreeDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountCoursesFreeDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountCoursesFreeDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountCoursesFreeDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CountCoursesFreeDynamicElementor\r\n- *\r\n- * Dynamic count courses free elementor.\r\n- *\r\n- * @since 4.2.5.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CountCoursesFreeDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Count Courses Free';\r\n-\t\t$this->lp_dynamic_name  = 'count-courses-free';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\techo $listCoursesTemplate->html_count_course_free();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CountCoursesFreeDynamicElementor\n+ *\n+ * Dynamic count courses free elementor.\n+ *\n+ * @since 4.2.5.4\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CountCoursesFreeDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Count Courses Free';\n+\t\t$this->lp_dynamic_name  = 'count-courses-free';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\n+\n+\t\ttry {\n+\t\t\techo $listCoursesTemplate->html_count_course_free();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountStudentDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountStudentDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountStudentDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCountStudentDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,36 +1,36 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CountStudentDynamicElementor\r\n- *\r\n- * Dynamic count student of many courses elementor.\r\n- *\r\n- * @since 4.2.5.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CountStudentDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Count Student many courses';\r\n-\t\t$this->lp_dynamic_name  = 'count-student-courses';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\techo $listCoursesTemplate->html_count_students();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CountStudentDynamicElementor\n+ *\n+ * Dynamic count student of many courses elementor.\n+ *\n+ * @since 4.2.5.4\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CountStudentDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Count Student many courses';\n+\t\t$this->lp_dynamic_name  = 'count-student-courses';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\n+\n+\t\ttry {\n+\t\t\techo $listCoursesTemplate->html_count_students();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorAvatarElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorAvatarElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorAvatarElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorAvatarElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseAuthorAvatarElementor\r\n- *\r\n- * Dynamic course author avatar elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use Elementor\\Modules\\DynamicTags\\Module;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseAuthorAvatarElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title      = 'Course Author Avatar';\r\n-\t\t$this->lp_dynamic_name       = 'course-author-avatar';\r\n-\t\t$this->lp_dynamic_categories = [ Module::TEXT_CATEGORY ];\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render dynamic course author avatar elementor.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$author = $course->get_author_model();\r\n-\t\t\tif ( ! $author ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleInstructorTemplate->html_avatar( $author );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseAuthorAvatarElementor\n+ *\n+ * Dynamic course author avatar elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use Elementor\\Modules\\DynamicTags\\Module;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseAuthorAvatarElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title      = 'Course Author Avatar';\n+\t\t$this->lp_dynamic_name       = 'course-author-avatar';\n+\t\t$this->lp_dynamic_categories = [ Module::TEXT_CATEGORY ];\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Render dynamic course author avatar elementor.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$author = $course->get_author_model();\n+\t\t\tif ( ! $author ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleInstructorTemplate->html_avatar( $author );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorNameElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorNameElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorNameElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorNameElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseAuthorNameElementor\r\n- *\r\n- * Dynamic course author name elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseAuthorNameElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Author Name';\r\n-\t\t$this->lp_dynamic_name  = 'course-author-name';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render dynamic course author name elementor.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$author = $course->get_author_model();\r\n-\t\t\tif ( ! $author ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleInstructorTemplate->html_display_name( $author );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseAuthorNameElementor\n+ *\n+ * Dynamic course author name elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseAuthorNameElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Author Name';\n+\t\t$this->lp_dynamic_name  = 'course-author-name';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Render dynamic course author name elementor.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$author = $course->get_author_model();\n+\t\t\tif ( ! $author ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleInstructorTemplate->html_display_name( $author );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorUrlElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorUrlElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorUrlElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseAuthorUrlElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseAuthorUrlElementor\r\n- *\r\n- * Dynamic course author url elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use Elementor\\Modules\\DynamicTags\\Module;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseAuthorUrlElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title      = 'Course Author Url';\r\n-\t\t$this->lp_dynamic_name       = 'course-author-url';\r\n-\t\t$this->lp_dynamic_categories = [ Module::URL_CATEGORY ];\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render dynamic course author url elementor.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$author = $course->get_author_model();\r\n-\t\t\tif ( ! $author ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $author->get_url_instructor();\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseAuthorUrlElementor\n+ *\n+ * Dynamic course author url elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use Elementor\\Modules\\DynamicTags\\Module;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseAuthorUrlElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title      = 'Course Author Url';\n+\t\t$this->lp_dynamic_name       = 'course-author-url';\n+\t\t$this->lp_dynamic_categories = [ Module::URL_CATEGORY ];\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Render dynamic course author url elementor.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$author = $course->get_author_model();\n+\t\t\tif ( ! $author ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $author->get_url_instructor();\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCapacityDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCapacityDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCapacityDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCapacityDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseLevelDynamicElementor\r\n- *\r\n- * Dynamic course level elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseCapacityDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Capacity';\r\n-\t\t$this->lp_dynamic_name  = 'course-capacity';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo $singleCourseTemplate->html_capacity( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseLevelDynamicElementor\n+ *\n+ * Dynamic course level elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseCapacityDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Capacity';\n+\t\t$this->lp_dynamic_name  = 'course-capacity';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $singleCourseTemplate->html_capacity( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountLessonDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountLessonDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountLessonDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountLessonDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseCountLessonDynamicElementor\r\n- *\r\n- * Dynamic course count lesson elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseCountLessonDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\t\u002F**\r\n-\t * Declare base properties for dynamic course elementor\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\u002F\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Count Lesson';\r\n-\t\t$this->lp_dynamic_name  = 'course-count-lesson';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render dynamic course count lesson elementor.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $course->is_offline() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseCountLessonDynamicElementor\n+ *\n+ * Dynamic course count lesson elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseCountLessonDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\t\u002F**\n+\t * Declare base properties for dynamic course elementor\n+\t *\n+\t * @param array $data\n+\t *\u002F\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Count Lesson';\n+\t\t$this->lp_dynamic_name  = 'course-count-lesson';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Render dynamic course count lesson elementor.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( $course->is_offline() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountQuizDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountQuizDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountQuizDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountQuizDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseCountQuizDynamicElementor\r\n- *\r\n- * Dynamic course count quiz elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseCountQuizDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Count Quiz';\r\n-\t\t$this->lp_dynamic_name  = 'course-count-quiz';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo $singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseCountQuizDynamicElementor\n+ *\n+ * Dynamic course count quiz elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseCountQuizDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Count Quiz';\n+\t\t$this->lp_dynamic_name  = 'course-count-quiz';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountStudentDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountStudentDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountStudentDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseCountStudentDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseCountStudentDynamicElementor\r\n- *\r\n- * Dynamic course count student elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseCountStudentDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Count Student';\r\n-\t\t$this->lp_dynamic_name  = 'course-count-student';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleCourseTemplate->html_count_student( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseCountStudentDynamicElementor\n+ *\n+ * Dynamic course count student elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseCountStudentDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Count Student';\n+\t\t$this->lp_dynamic_name  = 'course-count-student';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleCourseTemplate->html_count_student( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseDurationDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseDurationDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseDurationDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseDurationDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseDurationDynamicElementor\r\n- *\r\n- * Dynamic course duration elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseDurationDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Duration';\r\n-\t\t$this->lp_dynamic_name  = 'course-duration';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleCourseTemplate->html_duration( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseDurationDynamicElementor\n+ *\n+ * Dynamic course duration elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseDurationDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Duration';\n+\t\t$this->lp_dynamic_name  = 'course-duration';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleCourseTemplate->html_duration( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseLevelDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseLevelDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseLevelDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseLevelDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseLevelDynamicElementor\r\n- *\r\n- * Dynamic course level elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseLevelDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Level';\r\n-\t\t$this->lp_dynamic_name  = 'course-level';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleCourseTemplate->html_level( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseLevelDynamicElementor\n+ *\n+ * Dynamic course level elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseLevelDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Level';\n+\t\t$this->lp_dynamic_name  = 'course-level';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleCourseTemplate->html_level( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineAddressDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineAddressDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineAddressDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineAddressDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseLevelDynamicElementor\r\n- *\r\n- * Dynamic course level elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseOfflineAddressDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Address';\r\n-\t\t$this->lp_dynamic_name  = 'course-address';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo $singleCourseOfflineTemplate->html_address( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseLevelDynamicElementor\n+ *\n+ * Dynamic course level elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseOfflineAddressDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Address';\n+\t\t$this->lp_dynamic_name  = 'course-address';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $singleCourseOfflineTemplate->html_address( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineCountLessonDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineCountLessonDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineCountLessonDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineCountLessonDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseCountLessonDynamicElementor\r\n- *\r\n- * Dynamic course count lesson elementor.\r\n- *\r\n- * @since 4.2.7.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseOfflineCountLessonDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\t\u002F**\r\n-\t * Declare base properties for dynamic course elementor\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\u002F\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Offline Count Lesson';\r\n-\t\t$this->lp_dynamic_name  = 'course-offline-count-lesson';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render dynamic course count lesson elementor.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseOfflineTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleCourseTemplate->html_lesson_info( $course, true );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseCountLessonDynamicElementor\n+ *\n+ * Dynamic course count lesson elementor.\n+ *\n+ * @since 4.2.7.2\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseOfflineCountLessonDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\t\u002F**\n+\t * Declare base properties for dynamic course elementor\n+\t *\n+\t * @param array $data\n+\t *\u002F\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Offline Count Lesson';\n+\t\t$this->lp_dynamic_name  = 'course-offline-count-lesson';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Render dynamic course count lesson elementor.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\t$singleCourseTemplate = SingleCourseOfflineTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleCourseTemplate->html_lesson_info( $course, true );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineDeliverTypeDynamicElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineDeliverTypeDynamicElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineDeliverTypeDynamicElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FDynamic\u002FCourseOfflineDeliverTypeDynamicElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseLevelDynamicElementor\r\n- *\r\n- * Dynamic course level elementor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\r\n-use Elementor\\Core\\DynamicTags\\Tag;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class CourseOfflineDeliverTypeDynamicElementor extends Tag {\r\n-\tuse LPDynamicElementor;\r\n-\r\n-\tpublic function __construct( array $data = [] ) {\r\n-\t\t$this->lp_dynamic_title = 'Course Deliver Type';\r\n-\t\t$this->lp_dynamic_name  = 'course-deliver-type';\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\techo $singleCourseOfflineTemplate->html_deliver_type( $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseLevelDynamicElementor\n+ *\n+ * Dynamic course level elementor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Dynamic;\n+use Elementor\\Core\\DynamicTags\\Tag;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPDynamicElementor;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class CourseOfflineDeliverTypeDynamicElementor extends Tag {\n+\tuse LPDynamicElementor;\n+\n+\tpublic function __construct( array $data = [] ) {\n+\t\t$this->lp_dynamic_title = 'Course Deliver Type';\n+\t\t$this->lp_dynamic_name  = 'course-deliver-type';\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\tpublic function render() {\n+\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $singleCourseOfflineTemplate->html_deliver_type( $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,279 +1,279 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class FilterCourseElementor\r\n- *\r\n- * @sicne 4.2.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use Elementor\\Icons_Manager;\r\n-use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\r\n-use LP_Request;\r\n-use Throwable;\r\n-\r\n-class FilterCourseElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Filter Course', 'learnpress' );\r\n-\t\t$this->name     = 'filter_course';\r\n-\t\t$this->keywords = [ 'filter course' ];\r\n-\t\t$this->icon     = 'eicon-taxonomy-filter';\r\n-\r\n-\t\twp_register_style(\r\n-\t\t\t'lp-course-filter-el',\r\n-\t\t\tLP_PLUGIN_URL . 'assets\u002Fcss\u002Felementor\u002Fcourse\u002Ffilter-course.css',\r\n-\t\t\tarray(),\r\n-\t\t\tuniqid()\r\n-\t\t);\r\n-\r\n-\t\twp_register_script(\r\n-\t\t\t'lp-course-filter-el',\r\n-\t\t\tLP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Felementor\u002Fcourse-filter.js',\r\n-\t\t\tarray(),\r\n-\t\t\tuniqid(),\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\r\n-\t\t$this->add_style_depends( 'lp-course-filter-el' );\r\n-\t\t$this->add_script_depends( 'lp-course-filter-el' );\r\n-\t\twp_enqueue_script( 'lp-course-filter' );\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get(\r\n-\t\t\t'filter-course-el',\r\n-\t\t\t'elementor\u002Fcourse'\r\n-\t\t);\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\t$filter     = FilterCourseTemplate::instance();\r\n-\t\t\t$extraClass = '';\r\n-\t\t\tif ( empty( $settings['item_filter'] ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $settings['enable_filter_button'] === 'yes' ) {\r\n-\t\t\t\t$extraClass = 'lp-filter-popup';\r\n-\t\t\t}\r\n-\t\t\tself::button_popup( $settings, $extraClass );\r\n-\r\n-\t\t\tif ( $settings['filter_selected_list'] === 'yes' ) {\r\n-\t\t\t\techo '\u003Cdiv class=\"selected-list\">';\r\n-\t\t\t\tself::selected_style_list();\r\n-\t\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ( ! empty( $_GET['term_id'] ) || ! empty( $_GET['tag_id'] )\r\n-\t\t\t|| ! empty( $_GET['sort_by'] ) || ! empty( $_GET['c_level'] )\r\n-\t\t\t|| ! empty( $_GET['c_authors'] ) ) && $settings['filter_selected_list'] === 'yes' ) {\r\n-\t\t\t\techo $filter->html_btn_reset();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_wrapper = apply_filters(\r\n-\t\t\t\t'learn-press\u002Ffilter-courses\u002Fsections\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'\u003Cform class=\"lp-form-course-filter ' . esc_attr( $extraClass ) . '\">' => '\u003C\u002Fform>\u003Cdiv class=\"filter-bg\">\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\t\t\t$sections     = [];\r\n-\r\n-\t\t\tforeach ( $settings['item_filter'] as $field ) {\r\n-\t\t\t\t$extraClassItem = '';\r\n-\t\t\t\t$icon_toggle    = '';\r\n-\t\t\t\t$wrapper        = '';\r\n-\t\t\t\t$wrapper_end    = '';\r\n-\r\n-\t\t\t\tif ( isset( $field['enable_count'] ) && $field['enable_count'] !== 'yes' ) {\r\n-\t\t\t\t\t$extraClassItem .= ' hide-count';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $field['enable_heading'] !== 'yes' ) {\r\n-\t\t\t\t\t$extraClassItem .= ' hide-title';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $field['toggle_content'] === 'yes' ) {\r\n-\t\t\t\t\t$extraClassItem .= ' toggle-content';\r\n-\t\t\t\t\t$icon_toggle     = '\u003Ci class=\"icon-toggle-filter lp-icon-angle-up\">\u003C\u002Fi>\u003Ci class=\"icon-toggle-filter lp-icon-angle-down\">\u003C\u002Fi>';\r\n-\r\n-\t\t\t\t\tif ( $field['default_toggle_on'] === 'yes' ) {\r\n-\t\t\t\t\t\t$extraClassItem .= ' toggle-on';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $extraClassItem !== '' || $icon_toggle !== '' ) {\r\n-\t\t\t\t\t$wrapper     = '\u003Cdiv class=\"' . esc_attr( $extraClassItem ) . '\"> ' . $icon_toggle;\r\n-\t\t\t\t\t$wrapper_end = '\u003C\u002Fdiv>';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$fields = array_merge(\r\n-\t\t\t\t\t[ 'params_url' => lp_archive_skeleton_get_args() ],\r\n-\t\t\t\t\t$settings\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( is_callable( array( $filter, 'html_' . $field['item_fields'] ) ) ) {\r\n-\t\t\t\t\t$sections[ $field['item_fields'] ] = [\r\n-\t\t\t\t\t\t'wrapper'     => $wrapper,\r\n-\t\t\t\t\t\t'text_html'   => $filter->{'html_' . $field['item_fields']}( $fields ),\r\n-\t\t\t\t\t\t'wrapper_end' => $wrapper_end,\r\n-\t\t\t\t\t];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->print_sections( $sections );\r\n-\t\t\techo Template::instance()->nest_elements( $html_wrapper, ob_get_clean() );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function button_popup( $settings, $extraClass ) {\r\n-\t\t$text_popup = $settings['text_filter_button'] ?? esc_html__( 'Filter', 'learnpress' );\r\n-\r\n-\t\techo '\u003Cbutton class=\"lp-button-popup ' . esc_attr( $extraClass ) . '\">';\r\n-\t\tif ( ! empty( $settings['icon_filter_button'] ) ) {\r\n-\t\t\tIcons_Manager::render_icon(\r\n-\t\t\t\t$settings['icon_filter_button'],\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'aria-hidden' => 'true',\r\n-\t\t\t\t\t'class'       => 'icon-align-' . esc_attr( $settings['icon_position'] ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\techo $text_popup;\r\n-\t\tif ( $settings['filter_selected_number'] === 'yes' ) {\r\n-\t\t\tself::selected_style_number();\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fbutton>';\r\n-\t}\r\n-\r\n-\tprotected function selected_style_number() {\r\n-\t\t$cat    = 0;\r\n-\t\t$tag    = 0;\r\n-\t\t$price  = 0;\r\n-\t\t$level  = 0;\r\n-\t\t$author = 0;\r\n-\r\n-\t\tif ( ! empty( $_GET['term_id'] ) ) {\r\n-\t\t\t$cat = count( explode( ',', $_GET['term_id'] ) );\r\n-\t\t}\r\n-\t\tif ( ! empty( $_GET['tag_id'] ) ) {\r\n-\t\t\t$tag = count( explode( ',', $_GET['tag_id'] ) );\r\n-\t\t}\r\n-\t\tif ( ! empty( $_GET['sort_by'] ) ) {\r\n-\t\t\t$price = count( explode( ',', $_GET['sort_by'] ) );\r\n-\t\t}\r\n-\t\tif ( ! empty( $_GET['c_level'] ) ) {\r\n-\t\t\t$level = count( explode( ',', $_GET['c_level'] ) );\r\n-\t\t}\r\n-\t\tif ( ! empty( $_GET['c_authors'] ) ) {\r\n-\t\t\t$author = count( explode( ',', $_GET['c_authors'] ) );\r\n-\t\t}\r\n-\r\n-\t\t$total = $cat + $tag + $price + $level + $author;\r\n-\t\tif ( ! empty( $total ) ) {\r\n-\t\t\techo '\u003Cspan class=\"selected-filter\">' . $total . '\u003C\u002Fspan>';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function selected_style_list() {\r\n-\t\t$classListItem = 'selected-item';\r\n-\t\t$icon_move     = '\u003Ci class=\"icon-remove-selected lp-icon-times\">\u003C\u002Fi>';\r\n-\r\n-\t\t$term_ids_str = LP_Request::get_param( 'term_id', '' );\r\n-\t\tif ( ! empty( $term_ids_str ) ) {\r\n-\t\t\t$cats = explode( ',', $term_ids_str );\r\n-\t\t\t$cats = array_map( 'absint', $cats );\r\n-\t\t\tforeach ( $cats as $cat ) {\r\n-\t\t\t\techo sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"term_id\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr( $classListItem ),\r\n-\t\t\t\t\tesc_attr( $cat ),\r\n-\t\t\t\t\tget_term( $cat, LP_COURSE_CATEGORY_TAX )->name,\r\n-\t\t\t\t\t$icon_move\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$tag_ids_str = LP_Request::get_param( 'tag_id', '' );\r\n-\t\tif ( ! empty( $tag_ids_str ) ) {\r\n-\t\t\t$tags = explode( ',', $tag_ids_str );\r\n-\t\t\t$tags = array_map( 'absint', $tags );\r\n-\t\t\tforeach ( $tags as $tag ) {\r\n-\t\t\t\techo sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"tag_id\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr( $classListItem ),\r\n-\t\t\t\t\tesc_attr( $tag ),\r\n-\t\t\t\t\tget_term( $tag, LP_COURSE_TAXONOMY_TAG )->name,\r\n-\t\t\t\t\t$icon_move\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$sort_by = LP_Request::get_param( 'sort_by', '' );\r\n-\t\tif ( ! empty( $sort_by ) ) {\r\n-\t\t\tif ( $sort_by === 'on_free' ) {\r\n-\t\t\t\t$label = __( 'Free', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$label = __( 'Paid', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\techo sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"sort_by\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\tesc_attr( $classListItem ),\r\n-\t\t\t\tesc_attr( $sort_by ),\r\n-\t\t\t\t$label,\r\n-\t\t\t\t$icon_move\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$level = LP_Request::get_param( 'c_level', '' );\r\n-\t\tif ( ! empty( $level ) ) {\r\n-\t\t\t$label = $level;\r\n-\t\t\tif ( $_GET['c_level'] === 'all' ) {\r\n-\t\t\t\t$label = __( 'All Levels', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\techo sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"c_level\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\tesc_attr( $classListItem ),\r\n-\t\t\t\tesc_attr( $label ),\r\n-\t\t\t\t$level,\r\n-\t\t\t\t$icon_move\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$authors_str = LP_Request::get_param( 'c_authors', '' );\r\n-\t\tif ( ! empty( $authors ) ) {\r\n-\t\t\t$authors = explode( ',', $authors_str );\r\n-\t\t\t$authors = array_map( 'absint', $authors );\r\n-\t\t\tforeach ( $authors as $author ) {\r\n-\t\t\t\t$user = get_userdata( $author );\r\n-\t\t\t\techo sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"c_authors\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr( $classListItem ),\r\n-\t\t\t\t\tesc_attr( $author ),\r\n-\t\t\t\t\t$user->display_name,\r\n-\t\t\t\t\t$icon_move\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class FilterCourseElementor\n+ *\n+ * @sicne 4.2.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use Elementor\\Icons_Manager;\n+use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\n+use LP_Request;\n+use Throwable;\n+\n+class FilterCourseElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Filter Course', 'learnpress' );\n+\t\t$this->name     = 'filter_course';\n+\t\t$this->keywords = [ 'filter course' ];\n+\t\t$this->icon     = 'eicon-taxonomy-filter';\n+\n+\t\twp_register_style(\n+\t\t\t'lp-course-filter-el',\n+\t\t\tLP_PLUGIN_URL . 'assets\u002Fcss\u002Felementor\u002Fcourse\u002Ffilter-course.css',\n+\t\t\tarray(),\n+\t\t\tuniqid()\n+\t\t);\n+\n+\t\twp_register_script(\n+\t\t\t'lp-course-filter-el',\n+\t\t\tLP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Felementor\u002Fcourse-filter.js',\n+\t\t\tarray(),\n+\t\t\tuniqid(),\n+\t\t\ttrue\n+\t\t);\n+\n+\t\t$this->add_style_depends( 'lp-course-filter-el' );\n+\t\t$this->add_script_depends( 'lp-course-filter-el' );\n+\t\twp_enqueue_script( 'lp-course-filter' );\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get(\n+\t\t\t'filter-course-el',\n+\t\t\t'elementor\u002Fcourse'\n+\t\t);\n+\t\tparent::register_controls();\n+\t}\n+\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\t$filter     = FilterCourseTemplate::instance();\n+\t\t\t$extraClass = '';\n+\t\t\tif ( empty( $settings['item_filter'] ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( $settings['enable_filter_button'] === 'yes' ) {\n+\t\t\t\t$extraClass = 'lp-filter-popup';\n+\t\t\t}\n+\t\t\tself::button_popup( $settings, $extraClass );\n+\n+\t\t\tif ( $settings['filter_selected_list'] === 'yes' ) {\n+\t\t\t\techo '\u003Cdiv class=\"selected-list\">';\n+\t\t\t\tself::selected_style_list();\n+\t\t\t\techo '\u003C\u002Fdiv>';\n+\t\t\t}\n+\n+\t\t\tif ( ( ! empty( $_GET['term_id'] ) || ! empty( $_GET['tag_id'] )\n+\t\t\t|| ! empty( $_GET['sort_by'] ) || ! empty( $_GET['c_level'] )\n+\t\t\t|| ! empty( $_GET['c_authors'] ) ) && $settings['filter_selected_list'] === 'yes' ) {\n+\t\t\t\techo $filter->html_btn_reset();\n+\t\t\t}\n+\n+\t\t\t$html_wrapper = apply_filters(\n+\t\t\t\t'learn-press\u002Ffilter-courses\u002Fsections\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'\u003Cform class=\"lp-form-course-filter ' . esc_attr( $extraClass ) . '\">' => '\u003C\u002Fform>\u003Cdiv class=\"filter-bg\">\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$settings\n+\t\t\t);\n+\t\t\t$sections     = [];\n+\n+\t\t\tforeach ( $settings['item_filter'] as $field ) {\n+\t\t\t\t$extraClassItem = '';\n+\t\t\t\t$icon_toggle    = '';\n+\t\t\t\t$wrapper        = '';\n+\t\t\t\t$wrapper_end    = '';\n+\n+\t\t\t\tif ( isset( $field['enable_count'] ) && $field['enable_count'] !== 'yes' ) {\n+\t\t\t\t\t$extraClassItem .= ' hide-count';\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $field['enable_heading'] !== 'yes' ) {\n+\t\t\t\t\t$extraClassItem .= ' hide-title';\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $field['toggle_content'] === 'yes' ) {\n+\t\t\t\t\t$extraClassItem .= ' toggle-content';\n+\t\t\t\t\t$icon_toggle     = '\u003Ci class=\"icon-toggle-filter lp-icon-angle-up\">\u003C\u002Fi>\u003Ci class=\"icon-toggle-filter lp-icon-angle-down\">\u003C\u002Fi>';\n+\n+\t\t\t\t\tif ( $field['default_toggle_on'] === 'yes' ) {\n+\t\t\t\t\t\t$extraClassItem .= ' toggle-on';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $extraClassItem !== '' || $icon_toggle !== '' ) {\n+\t\t\t\t\t$wrapper     = '\u003Cdiv class=\"' . esc_attr( $extraClassItem ) . '\"> ' . $icon_toggle;\n+\t\t\t\t\t$wrapper_end = '\u003C\u002Fdiv>';\n+\t\t\t\t}\n+\n+\t\t\t\t$fields = array_merge(\n+\t\t\t\t\t[ 'params_url' => lp_archive_skeleton_get_args() ],\n+\t\t\t\t\t$settings\n+\t\t\t\t);\n+\n+\t\t\t\tif ( is_callable( array( $filter, 'html_' . $field['item_fields'] ) ) ) {\n+\t\t\t\t\t$sections[ $field['item_fields'] ] = [\n+\t\t\t\t\t\t'wrapper'     => $wrapper,\n+\t\t\t\t\t\t'text_html'   => $filter->{'html_' . $field['item_fields']}( $fields ),\n+\t\t\t\t\t\t'wrapper_end' => $wrapper_end,\n+\t\t\t\t\t];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->print_sections( $sections );\n+\t\t\techo Template::instance()->nest_elements( $html_wrapper, ob_get_clean() );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\tprotected function button_popup( $settings, $extraClass ) {\n+\t\t$text_popup = $settings['text_filter_button'] ?? esc_html__( 'Filter', 'learnpress' );\n+\n+\t\techo '\u003Cbutton class=\"lp-button-popup ' . esc_attr( $extraClass ) . '\">';\n+\t\tif ( ! empty( $settings['icon_filter_button'] ) ) {\n+\t\t\tIcons_Manager::render_icon(\n+\t\t\t\t$settings['icon_filter_button'],\n+\t\t\t\tarray(\n+\t\t\t\t\t'aria-hidden' => 'true',\n+\t\t\t\t\t'class'       => 'icon-align-' . esc_attr( $settings['icon_position'] ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t\techo $text_popup;\n+\t\tif ( $settings['filter_selected_number'] === 'yes' ) {\n+\t\t\tself::selected_style_number();\n+\t\t}\n+\t\techo '\u003C\u002Fbutton>';\n+\t}\n+\n+\tprotected function selected_style_number() {\n+\t\t$cat    = 0;\n+\t\t$tag    = 0;\n+\t\t$price  = 0;\n+\t\t$level  = 0;\n+\t\t$author = 0;\n+\n+\t\tif ( ! empty( $_GET['term_id'] ) ) {\n+\t\t\t$cat = count( explode( ',', $_GET['term_id'] ) );\n+\t\t}\n+\t\tif ( ! empty( $_GET['tag_id'] ) ) {\n+\t\t\t$tag = count( explode( ',', $_GET['tag_id'] ) );\n+\t\t}\n+\t\tif ( ! empty( $_GET['sort_by'] ) ) {\n+\t\t\t$price = count( explode( ',', $_GET['sort_by'] ) );\n+\t\t}\n+\t\tif ( ! empty( $_GET['c_level'] ) ) {\n+\t\t\t$level = count( explode( ',', $_GET['c_level'] ) );\n+\t\t}\n+\t\tif ( ! empty( $_GET['c_authors'] ) ) {\n+\t\t\t$author = count( explode( ',', $_GET['c_authors'] ) );\n+\t\t}\n+\n+\t\t$total = $cat + $tag + $price + $level + $author;\n+\t\tif ( ! empty( $total ) ) {\n+\t\t\techo '\u003Cspan class=\"selected-filter\">' . $total . '\u003C\u002Fspan>';\n+\t\t}\n+\t}\n+\n+\tprotected function selected_style_list() {\n+\t\t$classListItem = 'selected-item';\n+\t\t$icon_move     = '\u003Ci class=\"icon-remove-selected lp-icon-times\">\u003C\u002Fi>';\n+\n+\t\t$term_ids_str = LP_Request::get_param( 'term_id', '' );\n+\t\tif ( ! empty( $term_ids_str ) ) {\n+\t\t\t$cats = explode( ',', $term_ids_str );\n+\t\t\t$cats = array_map( 'absint', $cats );\n+\t\t\tforeach ( $cats as $cat ) {\n+\t\t\t\techo sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"term_id\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr( $classListItem ),\n+\t\t\t\t\tesc_attr( $cat ),\n+\t\t\t\t\tget_term( $cat, LP_COURSE_CATEGORY_TAX )->name,\n+\t\t\t\t\t$icon_move\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$tag_ids_str = LP_Request::get_param( 'tag_id', '' );\n+\t\tif ( ! empty( $tag_ids_str ) ) {\n+\t\t\t$tags = explode( ',', $tag_ids_str );\n+\t\t\t$tags = array_map( 'absint', $tags );\n+\t\t\tforeach ( $tags as $tag ) {\n+\t\t\t\techo sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"tag_id\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr( $classListItem ),\n+\t\t\t\t\tesc_attr( $tag ),\n+\t\t\t\t\tget_term( $tag, LP_COURSE_TAXONOMY_TAG )->name,\n+\t\t\t\t\t$icon_move\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$sort_by = LP_Request::get_param( 'sort_by', '' );\n+\t\tif ( ! empty( $sort_by ) ) {\n+\t\t\tif ( $sort_by === 'on_free' ) {\n+\t\t\t\t$label = __( 'Free', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$label = __( 'Paid', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\techo sprintf(\n+\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"sort_by\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\tesc_attr( $classListItem ),\n+\t\t\t\tesc_attr( $sort_by ),\n+\t\t\t\t$label,\n+\t\t\t\t$icon_move\n+\t\t\t);\n+\t\t}\n+\n+\t\t$level = LP_Request::get_param( 'c_level', '' );\n+\t\tif ( ! empty( $level ) ) {\n+\t\t\t$label = $level;\n+\t\t\tif ( $_GET['c_level'] === 'all' ) {\n+\t\t\t\t$label = __( 'All Levels', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\techo sprintf(\n+\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"c_level\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\tesc_attr( $classListItem ),\n+\t\t\t\tesc_attr( $label ),\n+\t\t\t\t$level,\n+\t\t\t\t$icon_move\n+\t\t\t);\n+\t\t}\n+\n+\t\t$authors_str = LP_Request::get_param( 'c_authors', '' );\n+\t\tif ( ! empty( $authors ) ) {\n+\t\t\t$authors = explode( ',', $authors_str );\n+\t\t\t$authors = array_map( 'absint', $authors );\n+\t\t\tforeach ( $authors as $author ) {\n+\t\t\t\t$user = get_userdata( $author );\n+\t\t\t\techo sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"%s\" data-name=\"c_authors\" data-value=\"%s\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr( $classListItem ),\n+\t\t\t\t\tesc_attr( $author ),\n+\t\t\t\t\t$user->display_name,\n+\t\t\t\t\t$icon_move\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FListCoursesByPageElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FListCoursesByPageElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FListCoursesByPageElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FListCoursesByPageElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,70 +1,70 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ListCoursesByPageElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class ListCoursesByPageElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'List Courses by Page', 'learnpress' );\r\n-\t\t$this->name     = 'list_courses_by_page';\r\n-\t\t$this->keywords = [ 'list courses', 'by page' ];\r\n-\t\t$this->icon     = 'eicon-post-list';\r\n-\r\n-\t\twp_register_style(\r\n-\t\t\t'lp-courses-by-page',\r\n-\t\t\tLP_PLUGIN_URL . 'assets\u002Fcss\u002Felementor\u002Fcourse\u002Flist-courses-by-page.css',\r\n-\t\t\tarray(),\r\n-\t\t\tuniqid()\r\n-\t\t);\r\n-\r\n-\t\twp_register_script(\r\n-\t\t\t'lp-courses-by-page',\r\n-\t\t\tLP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js',\r\n-\t\t\tarray(),\r\n-\t\t\tuniqid(),\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\t\t$this->add_style_depends( 'lp-courses-by-page' );\r\n-\t\t$this->add_script_depends( 'lp-courses-v2' );\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_skins() {\r\n-\t\t$skins = [\r\n-\t\t\t'courses_grid' => CoursesGrid::class,\r\n-\t\t\t'courses_list' => CoursesList::class,\r\n-\t\t];\r\n-\r\n-\t\tif ( class_exists( \\Thim_EL_Kit::class ) ) {\r\n-\t\t\t$skins['courses_loop_item'] = CoursesLoopItem::class;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $skins as $skin ) {\r\n-\t\t\t$this->add_skin( new $skin( $this ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get(\r\n-\t\t\t'list-courses-by-page',\r\n-\t\t\t'elementor\u002Fcourse'\r\n-\t\t);\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ListCoursesByPageElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesList;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesGrid;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins\\CoursesLoopItem;\n+use LearnPress\\Helpers\\Config;\n+\n+class ListCoursesByPageElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'List Courses by Page', 'learnpress' );\n+\t\t$this->name     = 'list_courses_by_page';\n+\t\t$this->keywords = [ 'list courses', 'by page' ];\n+\t\t$this->icon     = 'eicon-post-list';\n+\n+\t\twp_register_style(\n+\t\t\t'lp-courses-by-page',\n+\t\t\tLP_PLUGIN_URL . 'assets\u002Fcss\u002Felementor\u002Fcourse\u002Flist-courses-by-page.css',\n+\t\t\tarray(),\n+\t\t\tuniqid()\n+\t\t);\n+\n+\t\twp_register_script(\n+\t\t\t'lp-courses-by-page',\n+\t\t\tLP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Felementor\u002Fcourses.js',\n+\t\t\tarray(),\n+\t\t\tuniqid(),\n+\t\t\ttrue\n+\t\t);\n+\t\t$this->add_style_depends( 'lp-courses-by-page' );\n+\t\t$this->add_script_depends( 'lp-courses-v2' );\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_skins() {\n+\t\t$skins = [\n+\t\t\t'courses_grid' => CoursesGrid::class,\n+\t\t\t'courses_list' => CoursesList::class,\n+\t\t];\n+\n+\t\tif ( class_exists( \\Thim_EL_Kit::class ) ) {\n+\t\t\t$skins['courses_loop_item'] = CoursesLoopItem::class;\n+\t\t}\n+\n+\t\tforeach ( $skins as $skin ) {\n+\t\t\t$this->add_skin( new $skin( $this ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get(\n+\t\t\t'list-courses-by-page',\n+\t\t\t'elementor\u002Fcourse'\n+\t\t);\n+\t\tparent::register_controls();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSections\u002FCoursePriceElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSections\u002FCoursePriceElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSections\u002FCoursePriceElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSections\u002FCoursePriceElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorTitleElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Sections;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\SingleCourseBaseElementor;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-class CoursePriceElementor extends LPElementorWidgetBase {\r\n-\tuse SingleCourseBaseElementor;\r\n-\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Course Price', 'learnpress' );\r\n-\t\t$this->name     = 'course_price';\r\n-\t\t$this->keywords = [ 'course price', 'price' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get(\r\n-\t\t\t'course-price',\r\n-\t\t\t'elementor\u002Fcourse'\r\n-\t\t);\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\techo $singleCourseTemplate->html_price( $course );\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorTitleElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Sections;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\SingleCourseBaseElementor;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+class CoursePriceElementor extends LPElementorWidgetBase {\n+\tuse SingleCourseBaseElementor;\n+\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Course Price', 'learnpress' );\n+\t\t$this->name     = 'course_price';\n+\t\t$this->keywords = [ 'course price', 'price' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get(\n+\t\t\t'course-price',\n+\t\t\t'elementor\u002Fcourse'\n+\t\t);\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\techo $singleCourseTemplate->html_price( $course );\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSingleCourseBaseElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSingleCourseBaseElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSingleCourseBaseElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSingleCourseBaseElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,101 +1,101 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorBaseElementor\r\n- *\r\n- * Has general methods for sections single instructor widgets use\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Course;\r\n-\r\n-trait SingleCourseBaseElementor {\r\n-\t\u002F**\r\n-\t * @var string $title\r\n-\t *\u002F\r\n-\tpublic $title = '';\r\n-\t\u002F**\r\n-\t * @var string $prefix_name;\r\n-\t *\u002F\r\n-\tprivate $prefix_name = 'learnpress_';\r\n-\t\u002F**\r\n-\t * @var string $name;\r\n-\t *\u002F\r\n-\tpublic $name = '';\r\n-\t\u002F**\r\n-\t * @var string $icon\r\n-\t *\u002F\r\n-\tpublic $icon;\r\n-\t\u002F**\r\n-\t * @var string[] key search widget\r\n-\t *\u002F\r\n-\tpublic $keywords = array();\r\n-\t\u002F**\r\n-\t * @var array Controls\r\n-\t *\u002F\r\n-\tpublic $controls = array();\r\n-\t\u002F**\r\n-\t * @var array Controls\r\n-\t *\u002F\r\n-\tpublic $categories = array( LPElementor::CATE_COURSE );\r\n-\r\n-\tpublic function get_title() {\r\n-\t\treturn $this->title;\r\n-\t}\r\n-\r\n-\tpublic function get_name() {\r\n-\t\treturn $this->prefix_name . $this->name;\r\n-\t}\r\n-\r\n-\tpublic function get_icon() {\r\n-\t\treturn $this->icon ?? 'eicon-site-logo';\r\n-\t}\r\n-\r\n-\tpublic function get_keywords() {\r\n-\t\treturn array_push( $this->keywords, 'learnpress' );\r\n-\t}\r\n-\r\n-\tpublic function get_categories() {\r\n-\t\treturn $this->categories;\r\n-\t}\r\n-\r\n-\tpublic function get_help_url() {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course\r\n-\t *\r\n-\t * @return bool|LP_Course|mixed\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\tpublic function get_course() {\r\n-\t\t$id = get_the_ID();\r\n-\t\tif ( ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_course( $id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\t$id = get_the_ID();\r\n-\t\tif ( ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn CourseModel::find( $id, true );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorBaseElementor\n+ *\n+ * Has general methods for sections single instructor widgets use\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Course;\n+\n+trait SingleCourseBaseElementor {\n+\t\u002F**\n+\t * @var string $title\n+\t *\u002F\n+\tpublic $title = '';\n+\t\u002F**\n+\t * @var string $prefix_name;\n+\t *\u002F\n+\tprivate $prefix_name = 'learnpress_';\n+\t\u002F**\n+\t * @var string $name;\n+\t *\u002F\n+\tpublic $name = '';\n+\t\u002F**\n+\t * @var string $icon\n+\t *\u002F\n+\tpublic $icon;\n+\t\u002F**\n+\t * @var string[] key search widget\n+\t *\u002F\n+\tpublic $keywords = array();\n+\t\u002F**\n+\t * @var array Controls\n+\t *\u002F\n+\tpublic $controls = array();\n+\t\u002F**\n+\t * @var array Controls\n+\t *\u002F\n+\tpublic $categories = array( LPElementor::CATE_COURSE );\n+\n+\tpublic function get_title() {\n+\t\treturn $this->title;\n+\t}\n+\n+\tpublic function get_name() {\n+\t\treturn $this->prefix_name . $this->name;\n+\t}\n+\n+\tpublic function get_icon() {\n+\t\treturn $this->icon ?? 'eicon-site-logo';\n+\t}\n+\n+\tpublic function get_keywords() {\n+\t\treturn array_push( $this->keywords, 'learnpress' );\n+\t}\n+\n+\tpublic function get_categories() {\n+\t\treturn $this->categories;\n+\t}\n+\n+\tpublic function get_help_url() {\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Get course\n+\t *\n+\t * @return bool|LP_Course|mixed\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\tpublic function get_course() {\n+\t\t$id = get_the_ID();\n+\t\tif ( ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn learn_press_get_course( $id );\n+\t}\n+\n+\t\u002F**\n+\t * Get course\n+\t *\n+\t * @return false|CourseModel\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\t$id = get_the_ID();\n+\t\tif ( ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn CourseModel::find( $id, true );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesGrid.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesGrid.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesGrid.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesGrid.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Skin Grid for Widget Courses\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\r\n-\r\n-use Elementor\\Widget_Base;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class CoursesGrid extends SkinCoursesBase {\r\n-\tpublic $lp_el_skin_id = 'grid';\r\n-\tpublic $lp_el_skin_title = 'Courses Grid';\r\n-\r\n-\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\r\n-\t\t$this->parent = $widget;\r\n-\r\n-\t\tConfig::instance()->get(\r\n-\t\t\t'courses-grid',\r\n-\t\t\t'elementor\u002Fcourse\u002Fskin',\r\n-\t\t\t[ 'CoursesGrid' => $this ]\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Skin Grid for Widget Courses\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\n+\n+use Elementor\\Widget_Base;\n+use LearnPress\\Helpers\\Config;\n+\n+class CoursesGrid extends SkinCoursesBase {\n+\tpublic $lp_el_skin_id = 'grid';\n+\tpublic $lp_el_skin_title = 'Courses Grid';\n+\n+\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\n+\t\t$this->parent = $widget;\n+\n+\t\tConfig::instance()->get(\n+\t\t\t'courses-grid',\n+\t\t\t'elementor\u002Fcourse\u002Fskin',\n+\t\t\t[ 'CoursesGrid' => $this ]\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesList.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesList.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesList.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesList.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u003C?php\r\n-\u002F**\r\n- * Skin List for Widget Courses\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\r\n-\r\n-class CoursesList extends SkinCoursesBase {\r\n-\tpublic $lp_el_skin_id = 'list';\r\n-\tpublic $lp_el_skin_title = 'Courses List';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Skin List for Widget Courses\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\n+\n+class CoursesList extends SkinCoursesBase {\n+\tpublic $lp_el_skin_id = 'list';\n+\tpublic $lp_el_skin_title = 'Courses List';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesLoopItem.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesLoopItem.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesLoopItem.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FCoursesLoopItem.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-\u003C?php\r\n-\u002F**\r\n- * Skin Loop Item for Widget Courses\r\n- * Call list item on plugin Thim Elementor Kit.\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Elementor\\Widget_Base;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LP_Course;\r\n-\r\n-class CoursesLoopItem extends SkinCoursesBase {\r\n-\tpublic $lp_el_skin_id    = 'courses_loop_item';\r\n-\tpublic $lp_el_skin_title = 'Courses Loop Item';\r\n-\r\n-\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\r\n-\t\t\u002F\u002F Only load on the Admin\r\n-\t\tif ( ! is_admin() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->parent = $widget;\r\n-\r\n-\t\tConfig::instance()->get(\r\n-\t\t\t'courses-loop-item',\r\n-\t\t\t'elementor\u002Fcourse\u002Fskin',\r\n-\t\t\t[ 'CoursesLoopItem' => $this ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render single item course\r\n-\t *\r\n-\t * @param LP_Course $course\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function render_course( LP_Course $course, array $settings = [] ): string {\r\n-\t\tglobal $post;\r\n-\t\t$post = get_post( $course->get_id() );\r\n-\t\t$id   = $settings['lp_el_skin_courses_loop_item_template_id'] ?? 0;\r\n-\r\n-\t\treturn Plugin::instance()->frontend->get_builder_content( $id );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Skin Loop Item for Widget Courses\n+ * Call list item on plugin Thim Elementor Kit.\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\n+\n+use Elementor\\Plugin;\n+use Elementor\\Widget_Base;\n+use LearnPress\\Helpers\\Config;\n+use LP_Course;\n+\n+class CoursesLoopItem extends SkinCoursesBase {\n+\tpublic $lp_el_skin_id    = 'courses_loop_item';\n+\tpublic $lp_el_skin_title = 'Courses Loop Item';\n+\n+\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\n+\t\t\u002F\u002F Only load on the Admin\n+\t\tif ( ! is_admin() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->parent = $widget;\n+\n+\t\tConfig::instance()->get(\n+\t\t\t'courses-loop-item',\n+\t\t\t'elementor\u002Fcourse\u002Fskin',\n+\t\t\t[ 'CoursesLoopItem' => $this ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Render single item course\n+\t *\n+\t * @param LP_Course $course\n+\t * @param array $settings\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function render_course( LP_Course $course, array $settings = [] ): string {\n+\t\tglobal $post;\n+\t\t$post = get_post( $course->get_id() );\n+\t\t$id   = $settings['lp_el_skin_courses_loop_item_template_id'] ?? 0;\n+\n+\t\treturn Plugin::instance()->frontend->get_builder_content( $id );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FSkinCoursesBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FSkinCoursesBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FSkinCoursesBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FSkins\u002FSkinCoursesBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,237 +1,237 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SkinCoursesBase\r\n- *\r\n- * For render course in list course\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Elementor\\Widget_Base;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPSkinBase;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Course;\r\n-use LP_Course_Filter;\r\n-use LP_Database;\r\n-use LP_Helper;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class SkinCoursesBase extends LPSkinBase {\r\n-\tprotected function _register_controls_actions() {\r\n-\t\tadd_action(\r\n-\t\t\t'elementor\u002Felement\u002Flearnpress_list_courses_by_page\u002Fsection_skin\u002Fbefore_section_end',\r\n-\t\t\t[ $this, 'controls_on_section_skin' ],\r\n-\t\t\t10,\r\n-\t\t\t2\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\r\n-\t\t\u002F\u002F Only add controls here\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content list courses. (Grid\u002FList)\r\n-\t * @override elementor\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\t$settings                  = $this->parent->get_settings_for_display();\r\n-\t\t\t$is_load_restapi           = $settings['courses_rest'] ?? 0;\r\n-\t\t\t$courses_rest_no_load_page = $settings['courses_rest_no_load_page'] ?? 0;\r\n-\t\t\t$settings['url_current']   = LP_Helper::getUrlCurrent();\r\n-\r\n-\t\t\t\u002F\u002F Merge params filter form url\r\n-\t\t\t$settings = array_merge(\r\n-\t\t\t\t$settings,\r\n-\t\t\t\tlp_archive_skeleton_get_args()\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_wrapper_widget = [\r\n-\t\t\t\t'\u003Cdiv class=\"list-courses-elm-wrapper\">' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F No load AJAX\r\n-\t\t\tif ( 'yes' !== $is_load_restapi || Plugin::$instance->editor->is_edit_mode() ) {\r\n-\t\t\t\t$templateObj = self::render_courses( $settings );\r\n-\t\t\t\t$content     = $templateObj->content;\r\n-\t\t\t} elseif ( 'yes' === $courses_rest_no_load_page ) {\r\n-\t\t\t\t$callback                            = [\r\n-\t\t\t\t\t'class'  => get_class( $this ),\r\n-\t\t\t\t\t'method' => 'render_courses',\r\n-\t\t\t\t];\r\n-\t\t\t\t$content_obj                         = static::render_courses( $settings );\r\n-\t\t\t\t$settings['html_no_load_ajax_first'] = $content_obj->content;\r\n-\t\t\t\t$content                             = TemplateAJAX::load_content_via_ajax( $settings, $callback );\r\n-\t\t\t} else { \u002F\u002F Load AJAX\r\n-\t\t\t\t$callback = [\r\n-\t\t\t\t\t'class'  => get_class( $this ),\r\n-\t\t\t\t\t'method' => 'render_courses',\r\n-\t\t\t\t];\r\n-\t\t\t\t$content  = TemplateAJAX::load_content_via_ajax( $settings, $callback );\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements( $html_wrapper_widget, $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render template list courses with settings param.\r\n-\t *\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return stdClass { content: string_html }\r\n-\t * @since 4.2.5.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function render_courses( array $settings = [] ): stdClass {\r\n-\t\t$listCoursesTemplate  = ListCoursesTemplate::instance();\r\n-\t\t$skin                 = $settings['skin'] ?? 'grid';\r\n-\t\t$courses_limit        = $settings['courses_limit'] ?? 0;\r\n-\t\t$courses_per_page     = $settings['courses_per_page'] ?? 8;\r\n-\t\t$courses_order_by     = $settings['order_by'] ?? $settings['courses_order_by_default'] ?? 'post_date';\r\n-\t\t$total_pages          = 0;\r\n-\t\t$paged                = $settings['paged'] ?? 1;\r\n-\t\t$show_el_sorting      = ( $settings['el_sorting'] ?? 'yes' ) === 'yes';\r\n-\t\t$show_el_result_count = ( $settings['el_result_count'] ?? 'yes' ) === 'yes';\r\n-\t\t$pagination_type      = $settings['pagination_type'] ?? 'number';\r\n-\t\t$courses_category_ids = $settings['courses_category_ids'] ?? [];\r\n-\r\n-\t\tif ( $courses_limit > 0 ) {\r\n-\t\t\tif ( $courses_per_page > $courses_limit ) {\r\n-\t\t\t\t$courses_per_page = $courses_limit;\r\n-\t\t\t} elseif ( $courses_per_page === 0 ) {\r\n-\t\t\t\t$courses_per_page = $courses_limit;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_pages = LP_Database::get_total_pages( $courses_per_page, $courses_limit );\r\n-\t\t}\r\n-\r\n-\t\tif ( $courses_per_page === 0 ) {\r\n-\t\t\t$courses_per_page = - 1;\r\n-\t\t}\r\n-\r\n-\t\t$filter               = new LP_Course_Filter();\r\n-\t\t$settings['order_by'] = $courses_order_by;\r\n-\t\tCourses::handle_params_for_query_courses( $filter, $settings );\r\n-\t\t\u002F\u002F Term\r\n-\t\t$filter->term_ids = array_merge( $filter->term_ids, $courses_category_ids );\r\n-\t\t\u002F\u002F End term\r\n-\t\t$total_rows         = 0;\r\n-\t\t$filter->limit      = $courses_per_page;\r\n-\t\t$courses            = Courses::get_courses( $filter, $total_rows );\r\n-\t\t$total_pages_result = LP_Database::get_total_pages( $courses_per_page, $total_rows );\r\n-\t\tif ( $total_pages > 0 ) {\r\n-\t\t\tif ( $total_pages_result > $total_pages ) {\r\n-\t\t\t\tif ( $paged === $total_pages && $total_pages > 1 ) {\r\n-\t\t\t\t\t$number_courses_residual = $courses_limit - $courses_per_page * ( $paged - 1 );\r\n-\t\t\t\t\t$courses                 = array_slice( $courses, 0, $number_courses_residual );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$total_rows = $courses_limit;\r\n-\t\t\t} else {\r\n-\t\t\t\t$total_pages = $total_pages_result;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$total_pages = $total_pages_result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Handle layout\r\n-\t\tob_start();\r\n-\t\t$data_rs     = [\r\n-\t\t\t'total_rows'       => $total_rows,\r\n-\t\t\t'paged'            => $paged,\r\n-\t\t\t'courses_per_page' => $courses_per_page,\r\n-\t\t];\r\n-\r\n-\t\t$section_top = [\r\n-\t\t\t'wrapper'         => '\u003Cdiv class=\"learn-press-elms-courses-top\">',\r\n-\t\t\t'el_result_count' => $show_el_result_count ? $listCoursesTemplate->html_courses_page_result( $data_rs ) : '',\r\n-\t\t\t'el_sorting'      => $show_el_sorting ? $listCoursesTemplate->html_order_by( $courses_order_by ) : '',\r\n-\t\t\t'close_wrapper'   => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\t\techo Template::combine_components( $section_top );\r\n-\r\n-\t\t$html_lis = '';\r\n-\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t$course = learn_press_get_course( $courseObj->ID );\r\n-\t\t\t$html_lis .= static::render_course( $course, $settings );\r\n-\t\t}\r\n-\t\t$section_list = [\r\n-\t\t\t'wrapper' => sprintf( '\u003Cul class=\"learn-press-courses lp-list-courses-no-css %s\">', esc_attr( $skin ) ),\r\n-\t\t\t'list'    => $html_lis,\r\n-\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t];\r\n-\t\techo Template::combine_components( $section_list );\r\n-\r\n-\t\t$data_pagination = [\r\n-\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t'type'        => $pagination_type,\r\n-\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\r\n-\t\t\t'paged'       => (int) ( $settings['paged'] ?? 1 ),\r\n-\t\t];\r\n-\t\techo $listCoursesTemplate->html_pagination( $data_pagination );\r\n-\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = ob_get_clean();\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render single item course\r\n-\t *\r\n-\t * @param LP_Course $course\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function render_course( LP_Course $course, array $settings = [] ): string {\r\n-\t\t$html_item            = '';\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'\u003Cli class=\"course-item\">' => '\u003C\u002Fli>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$title = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $course->get_title() );\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'image'  => [ 'text_html' => $singleCourseTemplate->html_image( $course ) ],\r\n-\t\t\t\t'author' => [ 'text_html' => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $course->get_instructor_html() ) ],\r\n-\t\t\t\t'title'  => [ 'text_html' => $title ],\r\n-\t\t\t\t'price'  => [ 'text_html' => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $singleCourseTemplate->html_price( $course ) ) ],\r\n-\t\t\t\t'button' => [\r\n-\t\t\t\t\t'text_html' => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t\t\t__( 'View More', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t];\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->print_sections( $section );\r\n-\t\t\t$html_item = ob_get_clean();\r\n-\t\t\t$html_item = Template::instance()->nest_elements( $html_wrapper, $html_item );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$html_item = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $html_item;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SkinCoursesBase\n+ *\n+ * For render course in list course\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\Skins;\n+\n+use Elementor\\Plugin;\n+use Elementor\\Widget_Base;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPSkinBase;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Course;\n+use LP_Course_Filter;\n+use LP_Database;\n+use LP_Helper;\n+use stdClass;\n+use Throwable;\n+\n+class SkinCoursesBase extends LPSkinBase {\n+\tprotected function _register_controls_actions() {\n+\t\tadd_action(\n+\t\t\t'elementor\u002Felement\u002Flearnpress_list_courses_by_page\u002Fsection_skin\u002Fbefore_section_end',\n+\t\t\t[ $this, 'controls_on_section_skin' ],\n+\t\t\t10,\n+\t\t\t2\n+\t\t);\n+\t}\n+\n+\tpublic function controls_on_section_skin( Widget_Base $widget, $args ) {\n+\t\t\u002F\u002F Only add controls here\n+\t}\n+\n+\t\u002F**\n+\t * Render content list courses. (Grid\u002FList)\n+\t * @override elementor\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\t$settings                  = $this->parent->get_settings_for_display();\n+\t\t\t$is_load_restapi           = $settings['courses_rest'] ?? 0;\n+\t\t\t$courses_rest_no_load_page = $settings['courses_rest_no_load_page'] ?? 0;\n+\t\t\t$settings['url_current']   = LP_Helper::getUrlCurrent();\n+\n+\t\t\t\u002F\u002F Merge params filter form url\n+\t\t\t$settings = array_merge(\n+\t\t\t\t$settings,\n+\t\t\t\tlp_archive_skeleton_get_args()\n+\t\t\t);\n+\n+\t\t\t$html_wrapper_widget = [\n+\t\t\t\t'\u003Cdiv class=\"list-courses-elm-wrapper\">' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F No load AJAX\n+\t\t\tif ( 'yes' !== $is_load_restapi || Plugin::$instance->editor->is_edit_mode() ) {\n+\t\t\t\t$templateObj = self::render_courses( $settings );\n+\t\t\t\t$content     = $templateObj->content;\n+\t\t\t} elseif ( 'yes' === $courses_rest_no_load_page ) {\n+\t\t\t\t$callback                            = [\n+\t\t\t\t\t'class'  => get_class( $this ),\n+\t\t\t\t\t'method' => 'render_courses',\n+\t\t\t\t];\n+\t\t\t\t$content_obj                         = static::render_courses( $settings );\n+\t\t\t\t$settings['html_no_load_ajax_first'] = $content_obj->content;\n+\t\t\t\t$content                             = TemplateAJAX::load_content_via_ajax( $settings, $callback );\n+\t\t\t} else { \u002F\u002F Load AJAX\n+\t\t\t\t$callback = [\n+\t\t\t\t\t'class'  => get_class( $this ),\n+\t\t\t\t\t'method' => 'render_courses',\n+\t\t\t\t];\n+\t\t\t\t$content  = TemplateAJAX::load_content_via_ajax( $settings, $callback );\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements( $html_wrapper_widget, $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Render template list courses with settings param.\n+\t *\n+\t * @param array $settings\n+\t *\n+\t * @return stdClass { content: string_html }\n+\t * @since 4.2.5.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function render_courses( array $settings = [] ): stdClass {\n+\t\t$listCoursesTemplate  = ListCoursesTemplate::instance();\n+\t\t$skin                 = $settings['skin'] ?? 'grid';\n+\t\t$courses_limit        = $settings['courses_limit'] ?? 0;\n+\t\t$courses_per_page     = $settings['courses_per_page'] ?? 8;\n+\t\t$courses_order_by     = $settings['order_by'] ?? $settings['courses_order_by_default'] ?? 'post_date';\n+\t\t$total_pages          = 0;\n+\t\t$paged                = $settings['paged'] ?? 1;\n+\t\t$show_el_sorting      = ( $settings['el_sorting'] ?? 'yes' ) === 'yes';\n+\t\t$show_el_result_count = ( $settings['el_result_count'] ?? 'yes' ) === 'yes';\n+\t\t$pagination_type      = $settings['pagination_type'] ?? 'number';\n+\t\t$courses_category_ids = $settings['courses_category_ids'] ?? [];\n+\n+\t\tif ( $courses_limit > 0 ) {\n+\t\t\tif ( $courses_per_page > $courses_limit ) {\n+\t\t\t\t$courses_per_page = $courses_limit;\n+\t\t\t} elseif ( $courses_per_page === 0 ) {\n+\t\t\t\t$courses_per_page = $courses_limit;\n+\t\t\t}\n+\n+\t\t\t$total_pages = LP_Database::get_total_pages( $courses_per_page, $courses_limit );\n+\t\t}\n+\n+\t\tif ( $courses_per_page === 0 ) {\n+\t\t\t$courses_per_page = - 1;\n+\t\t}\n+\n+\t\t$filter               = new LP_Course_Filter();\n+\t\t$settings['order_by'] = $courses_order_by;\n+\t\tCourses::handle_params_for_query_courses( $filter, $settings );\n+\t\t\u002F\u002F Term\n+\t\t$filter->term_ids = array_merge( $filter->term_ids, $courses_category_ids );\n+\t\t\u002F\u002F End term\n+\t\t$total_rows         = 0;\n+\t\t$filter->limit      = $courses_per_page;\n+\t\t$courses            = Courses::get_courses( $filter, $total_rows );\n+\t\t$total_pages_result = LP_Database::get_total_pages( $courses_per_page, $total_rows );\n+\t\tif ( $total_pages > 0 ) {\n+\t\t\tif ( $total_pages_result > $total_pages ) {\n+\t\t\t\tif ( $paged === $total_pages && $total_pages > 1 ) {\n+\t\t\t\t\t$number_courses_residual = $courses_limit - $courses_per_page * ( $paged - 1 );\n+\t\t\t\t\t$courses                 = array_slice( $courses, 0, $number_courses_residual );\n+\t\t\t\t}\n+\n+\t\t\t\t$total_rows = $courses_limit;\n+\t\t\t} else {\n+\t\t\t\t$total_pages = $total_pages_result;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$total_pages = $total_pages_result;\n+\t\t}\n+\n+\t\t\u002F\u002F Handle layout\n+\t\tob_start();\n+\t\t$data_rs     = [\n+\t\t\t'total_rows'       => $total_rows,\n+\t\t\t'paged'            => $paged,\n+\t\t\t'courses_per_page' => $courses_per_page,\n+\t\t];\n+\n+\t\t$section_top = [\n+\t\t\t'wrapper'         => '\u003Cdiv class=\"learn-press-elms-courses-top\">',\n+\t\t\t'el_result_count' => $show_el_result_count ? $listCoursesTemplate->html_courses_page_result( $data_rs ) : '',\n+\t\t\t'el_sorting'      => $show_el_sorting ? $listCoursesTemplate->html_order_by( $courses_order_by ) : '',\n+\t\t\t'close_wrapper'   => '\u003C\u002Fdiv>',\n+\t\t];\n+\t\techo Template::combine_components( $section_top );\n+\n+\t\t$html_lis = '';\n+\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t$course = learn_press_get_course( $courseObj->ID );\n+\t\t\t$html_lis .= static::render_course( $course, $settings );\n+\t\t}\n+\t\t$section_list = [\n+\t\t\t'wrapper' => sprintf( '\u003Cul class=\"learn-press-courses lp-list-courses-no-css %s\">', esc_attr( $skin ) ),\n+\t\t\t'list'    => $html_lis,\n+\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t];\n+\t\techo Template::combine_components( $section_list );\n+\n+\t\t$data_pagination = [\n+\t\t\t'total_pages' => $total_pages,\n+\t\t\t'type'        => $pagination_type,\n+\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\n+\t\t\t'paged'       => (int) ( $settings['paged'] ?? 1 ),\n+\t\t];\n+\t\techo $listCoursesTemplate->html_pagination( $data_pagination );\n+\n+\t\t$content          = new stdClass();\n+\t\t$content->content = ob_get_clean();\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Render single item course\n+\t *\n+\t * @param LP_Course $course\n+\t * @param array $settings\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function render_course( LP_Course $course, array $settings = [] ): string {\n+\t\t$html_item            = '';\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'\u003Cli class=\"course-item\">' => '\u003C\u002Fli>',\n+\t\t\t];\n+\n+\t\t\t$title = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $course->get_title() );\n+\n+\t\t\t$section = [\n+\t\t\t\t'image'  => [ 'text_html' => $singleCourseTemplate->html_image( $course ) ],\n+\t\t\t\t'author' => [ 'text_html' => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $course->get_instructor_html() ) ],\n+\t\t\t\t'title'  => [ 'text_html' => $title ],\n+\t\t\t\t'price'  => [ 'text_html' => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $singleCourseTemplate->html_price( $course ) ) ],\n+\t\t\t\t'button' => [\n+\t\t\t\t\t'text_html' => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\n+\t\t\t\t\t\t$course->get_permalink(),\n+\t\t\t\t\t\t__( 'View More', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t];\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->print_sections( $section );\n+\t\t\t$html_item = ob_get_clean();\n+\t\t\t$html_item = Template::instance()->nest_elements( $html_wrapper, $html_item );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$html_item = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $html_item;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourseListElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourseListElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourseListElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourseListElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,119 +1,119 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class CourseListElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LP_Course;\r\n-\r\n-class CourseListElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'List Courses', 'learnpress' );\r\n-\t\t$this->name     = 'list_courses';\r\n-\t\t$this->keywords = [ 'courses' ];\r\n-\t\t$this->icon     = 'eicon-post-list';\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'list-courses', 'elementor\u002Fcourse' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\t$settings      = $this->get_settings_for_display();\r\n-\t\t\t$filter        = new \\LP_Course_Filter();\r\n-\t\t\t$filter->limit = $settings['limit'] ?? 5;\r\n-\t\t\t$sort_int      = $settings['sort_in'] ?? '';\r\n-\t\t\t$layout        = $settings['layout'] ?? 'grid';\r\n-\r\n-\t\t\tif ( ! empty( $settings['category_ids'] ) ) {\r\n-\t\t\t\t$filter->term_ids = $settings['category_ids'];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $settings['order_by'] ) ) {\r\n-\t\t\t\t$filter->order = $settings['order_by'];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $settings['courses_ids'] ) ) {\r\n-\t\t\t\t$filter->post_ids = $settings['courses_ids'];\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $sort_int ) {\r\n-\t\t\t\tcase 'recent':\r\n-\t\t\t\t\t$filter->order_by .= 'post_date';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'popular':\r\n-\t\t\t\t\t$filter->order_by = 'popular';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'featured':\r\n-\t\t\t\t\t$filter->sort_by = 'on_feature';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$filter->order_by = 'post_title';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter->post_status = [ 'publish' ];\r\n-\r\n-\t\t\t$courses = Courses::get_courses( $filter );\r\n-\r\n-\t\t\tif ( empty( $courses ) ) {\r\n-\t\t\t\t\\LearnPress::instance()->template( 'course' )->no_courses_found();\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"lp-archive-courses\">\r\n-\t\t\t\t\u003Cul class=\"learn-press-courses lp-list-courses-no-css\" data-layout=\"\u003C?php echo esc_attr( $layout ); ?>\"\r\n-\t\t\t\t\tdata-size=\"\u003C?php echo absint( $settings['number_posts'] ?? 10 ); ?>\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t$template_is_override = Template::check_template_is_override( 'content-course.php' );\r\n-\t\t\t\t\tif ( $template_is_override ) {\r\n-\t\t\t\t\t\tglobal $post;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t\t\t\t$course = CourseModel::find( $courseObj->ID, true );\r\n-\t\t\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( $template_is_override ) {\r\n-\t\t\t\t\t\t\t$post = get_post( $course->get_id() );\r\n-\t\t\t\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\t\t\t\tlearn_press_get_template( 'content-course.php' );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\techo ListCoursesTemplate::render_course( $course );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $template_is_override ) {\r\n-\t\t\t\t\t\twp_reset_postdata();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\t\\LP_Debug::error_log( $e );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function get_style_depends() {\r\n-\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\r\n-\r\n-\t\treturn array( 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class CourseListElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.2\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LP_Course;\n+\n+class CourseListElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'List Courses', 'learnpress' );\n+\t\t$this->name     = 'list_courses';\n+\t\t$this->keywords = [ 'courses' ];\n+\t\t$this->icon     = 'eicon-post-list';\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'list-courses', 'elementor\u002Fcourse' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\t$settings      = $this->get_settings_for_display();\n+\t\t\t$filter        = new \\LP_Course_Filter();\n+\t\t\t$filter->limit = $settings['limit'] ?? 5;\n+\t\t\t$sort_int      = $settings['sort_in'] ?? '';\n+\t\t\t$layout        = $settings['layout'] ?? 'grid';\n+\n+\t\t\tif ( ! empty( $settings['category_ids'] ) ) {\n+\t\t\t\t$filter->term_ids = $settings['category_ids'];\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $settings['order_by'] ) ) {\n+\t\t\t\t$filter->order = $settings['order_by'];\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $settings['courses_ids'] ) ) {\n+\t\t\t\t$filter->post_ids = $settings['courses_ids'];\n+\t\t\t}\n+\n+\t\t\tswitch ( $sort_int ) {\n+\t\t\t\tcase 'recent':\n+\t\t\t\t\t$filter->order_by .= 'post_date';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'popular':\n+\t\t\t\t\t$filter->order_by = 'popular';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'featured':\n+\t\t\t\t\t$filter->sort_by = 'on_feature';\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$filter->order_by = 'post_title';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$filter->post_status = [ 'publish' ];\n+\n+\t\t\t$courses = Courses::get_courses( $filter );\n+\n+\t\t\tif ( empty( $courses ) ) {\n+\t\t\t\t\\LearnPress::instance()->template( 'course' )->no_courses_found();\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"lp-archive-courses\">\n+\t\t\t\t\u003Cul class=\"learn-press-courses lp-list-courses-no-css\" data-layout=\"\u003C?php echo esc_attr( $layout ); ?>\"\n+\t\t\t\t\tdata-size=\"\u003C?php echo absint( $settings['number_posts'] ?? 10 ); ?>\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t$template_is_override = Template::check_template_is_override( 'content-course.php' );\n+\t\t\t\t\tif ( $template_is_override ) {\n+\t\t\t\t\t\tglobal $post;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t\t\t\t$course = CourseModel::find( $courseObj->ID, true );\n+\t\t\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( $template_is_override ) {\n+\t\t\t\t\t\t\t$post = get_post( $course->get_id() );\n+\t\t\t\t\t\t\tsetup_postdata( $post );\n+\t\t\t\t\t\t\tlearn_press_get_template( 'content-course.php' );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\techo ListCoursesTemplate::render_course( $course );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $template_is_override ) {\n+\t\t\t\t\t\twp_reset_postdata();\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\t\\LP_Debug::error_log( $e );\n+\t\t}\n+\t}\n+\n+\tpublic function get_style_depends() {\n+\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\n+\n+\t\treturn array( 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FListInstructorsElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FListInstructorsElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FListInstructorsElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FListInstructorsElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,124 +1,124 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use WP_User_Query;\r\n-\r\n-class ListInstructorsElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'List Instructors', 'learnpress' );\r\n-\t\t$this->name     = 'list_instructors';\r\n-\t\t$this->keywords = [ 'list instructor', 'instructor', 'list' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register controls.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get(\r\n-\t\t\t'list-instructors',\r\n-\t\t\t'elementor\u002Finstructor'\r\n-\t\t);\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render Template\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$settings = $this->get_settings_for_display();\r\n-\r\n-\t\t\tif ( empty( $settings['item_layouts'] ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Query\r\n-\t\t\t$args = [\r\n-\t\t\t\t'number'   => $settings['limit'] ?? 5,\r\n-\t\t\t\t'role__in' => [ 'lp_teacher', 'administrator' ],\r\n-\t\t\t\t'fields'   => 'ID',\r\n-\t\t\t];\r\n-\r\n-\t\t\tswitch ( $settings['order_by'] ?? '' ) {\r\n-\t\t\t\tcase 'desc_name':\r\n-\t\t\t\t\t$args['orderby'] = 'display_name';\r\n-\t\t\t\t\t$args['order']   = 'desc';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$args['orderby'] = 'display_name';\r\n-\t\t\t\t\t$args['order']   = 'asc';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = new WP_User_Query( $args );\r\n-\r\n-\t\t\t$instructors = $query->get_results();\r\n-\t\t\t\u002F\u002F End Query\r\n-\r\n-\t\t\t$item_layout = $settings['item_layouts'][0];\r\n-\t\t\tif ( ! empty( $item_layout['layout_custom_css'] ) ) {\r\n-\t\t\t\t$item_layout['layout_custom_css'] = preg_replace(\r\n-\t\t\t\t\t'\u002Fselector\u002Fi',\r\n-\t\t\t\t\t\".elementor-repeater-item-{$item_layout['_id']}\",\r\n-\t\t\t\t\t$item_layout['layout_custom_css']\r\n-\t\t\t\t);\r\n-\t\t\t\techo '\u003Cstyle id=\"' . esc_attr( $this->get_id() ) . '\">' . $item_layout['layout_custom_css'] . '\u003C\u002Fstyle>';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Show list instructors\r\n-\t\t\tob_start();\r\n-\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\t\t\techo '\u003Cul class=\"list-instructors\">';\r\n-\t\t\tforeach ( $instructors as $instructor_id ) {\r\n-\t\t\t\t$instructor = UserModel::find( $instructor_id, true );\r\n-\t\t\t\tif ( ! $instructor ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cli class=\"item-instructor\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\techo $singleInstructorTemplate->render_data(\r\n-\t\t\t\t\t\t$instructor,\r\n-\t\t\t\t\t\twp_kses_post( html_entity_decode( $item_layout['layout_html'] ) )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t\techo '\u003C\u002Ful>';\r\n-\t\t\t$content = ob_get_clean();\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"%s\">',\r\n-\t\t\t\t\t'elementor-repeater-item-' . esc_attr( $item_layout['_id'] ?? '' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'     => $content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo Template::combine_components( $section );\r\n-\t\t\t\u002F\u002F End show list instructors\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use WP_User_Query;\n+\n+class ListInstructorsElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'List Instructors', 'learnpress' );\n+\t\t$this->name     = 'list_instructors';\n+\t\t$this->keywords = [ 'list instructor', 'instructor', 'list' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Register controls.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get(\n+\t\t\t'list-instructors',\n+\t\t\t'elementor\u002Finstructor'\n+\t\t);\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Render Template\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$settings = $this->get_settings_for_display();\n+\n+\t\t\tif ( empty( $settings['item_layouts'] ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Query\n+\t\t\t$args = [\n+\t\t\t\t'number'   => $settings['limit'] ?? 5,\n+\t\t\t\t'role__in' => [ 'lp_teacher', 'administrator' ],\n+\t\t\t\t'fields'   => 'ID',\n+\t\t\t];\n+\n+\t\t\tswitch ( $settings['order_by'] ?? '' ) {\n+\t\t\t\tcase 'desc_name':\n+\t\t\t\t\t$args['orderby'] = 'display_name';\n+\t\t\t\t\t$args['order']   = 'desc';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\tdefault:\n+\t\t\t\t\t$args['orderby'] = 'display_name';\n+\t\t\t\t\t$args['order']   = 'asc';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$query = new WP_User_Query( $args );\n+\n+\t\t\t$instructors = $query->get_results();\n+\t\t\t\u002F\u002F End Query\n+\n+\t\t\t$item_layout = $settings['item_layouts'][0];\n+\t\t\tif ( ! empty( $item_layout['layout_custom_css'] ) ) {\n+\t\t\t\t$item_layout['layout_custom_css'] = preg_replace(\n+\t\t\t\t\t'\u002Fselector\u002Fi',\n+\t\t\t\t\t\".elementor-repeater-item-{$item_layout['_id']}\",\n+\t\t\t\t\t$item_layout['layout_custom_css']\n+\t\t\t\t);\n+\t\t\t\techo '\u003Cstyle id=\"' . esc_attr( $this->get_id() ) . '\">' . $item_layout['layout_custom_css'] . '\u003C\u002Fstyle>';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Show list instructors\n+\t\t\tob_start();\n+\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\t\t\techo '\u003Cul class=\"list-instructors\">';\n+\t\t\tforeach ( $instructors as $instructor_id ) {\n+\t\t\t\t$instructor = UserModel::find( $instructor_id, true );\n+\t\t\t\tif ( ! $instructor ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\u003Cli class=\"item-instructor\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\techo $singleInstructorTemplate->render_data(\n+\t\t\t\t\t\t$instructor,\n+\t\t\t\t\t\twp_kses_post( html_entity_decode( $item_layout['layout_html'] ) )\n+\t\t\t\t\t);\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t\techo '\u003C\u002Ful>';\n+\t\t\t$content = ob_get_clean();\n+\n+\t\t\t$section = [\n+\t\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"%s\">',\n+\t\t\t\t\t'elementor-repeater-item-' . esc_attr( $item_layout['_id'] ?? '' )\n+\t\t\t\t),\n+\t\t\t\t'content'     => $content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\techo Template::combine_components( $section );\n+\t\t\t\u002F\u002F End show list instructors\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorAvatarElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorAvatarElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorAvatarElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorAvatarElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorAvatarElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorAvatarElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor Avatar', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_avatar';\r\n-\t\t$this->keywords = [ 'instructor', 'avatar' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'avatar', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-avatar\">%s\u003C\u002Fspan>', __( 'Instructor Avatar', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_avatar( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorAvatarElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorAvatarElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor Avatar', 'learnpress' );\n+\t\t$this->name     = 'instructor_avatar';\n+\t\t$this->keywords = [ 'instructor', 'avatar' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'avatar', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-avatar\">%s\u003C\u002Fspan>', __( 'Instructor Avatar', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_avatar( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorButtonViewElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorButtonViewElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorButtonViewElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorButtonViewElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorTitleElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorButtonViewElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor button view', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_button_view';\r\n-\t\t$this->keywords = [ 'instructor', 'button' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'button_view', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cp class=\"instructor-btn-view\">%s\u003C\u002Fp>', __( 'Instructor Button View', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_button_view( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorTitleElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorButtonViewElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor button view', 'learnpress' );\n+\t\t$this->name     = 'instructor_button_view';\n+\t\t$this->keywords = [ 'instructor', 'button' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'button_view', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cp class=\"instructor-btn-view\">%s\u003C\u002Fp>', __( 'Instructor Button View', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_button_view( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountCoursesElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountCoursesElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountCoursesElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountCoursesElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorCountCoursesElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorCountCoursesElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor Count Courses', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_count_courses';\r\n-\t\t$this->keywords = [ 'instructor', 'count_courses' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'count_courses', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-total-courses\">%s\u003C\u002Fspan>', __( 'Instructor Count Courses', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_count_courses( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorCountCoursesElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorCountCoursesElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor Count Courses', 'learnpress' );\n+\t\t$this->name     = 'instructor_count_courses';\n+\t\t$this->keywords = [ 'instructor', 'count_courses' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'count_courses', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-total-courses\">%s\u003C\u002Fspan>', __( 'Instructor Count Courses', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_count_courses( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountStudentsElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountStudentsElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountStudentsElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorCountStudentsElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorCountStudentElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorCountStudentsElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor Count Students', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_count_students';\r\n-\t\t$this->keywords = [ 'instructor', 'count_students' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'count_students', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-total-students\">%s\u003C\u002Fspan>', __( 'Instructor Count Students', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_count_students( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorCountStudentElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorCountStudentsElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor Count Students', 'learnpress' );\n+\t\t$this->name     = 'instructor_count_students';\n+\t\t$this->keywords = [ 'instructor', 'count_students' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'count_students', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-total-students\">%s\u003C\u002Fspan>', __( 'Instructor Count Students', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_count_students( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorDescriptionElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorDescriptionElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorDescriptionElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorDescriptionElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorTitleElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorDescriptionElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor Description', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_description';\r\n-\t\t$this->keywords = [ 'description' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'description', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cp class=\"instructor-description\">%s\u003C\u002Fp>', __( 'Instructor Description', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_description( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorTitleElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorDescriptionElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor Description', 'learnpress' );\n+\t\t$this->name     = 'instructor_description';\n+\t\t$this->keywords = [ 'description' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'description', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cp class=\"instructor-description\">%s\u003C\u002Fp>', __( 'Instructor Description', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_description( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorTitleElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorTitleElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorTitleElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSections\u002FInstructorTitleElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class InstructorTitleElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class InstructorTitleElementor extends SingleInstructorBaseElementor {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Instructor Name', 'learnpress' );\r\n-\t\t$this->name     = 'instructor_name';\r\n-\t\t$this->keywords = [ 'instructor', 'name' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'title', 'elementor\u002Finstructor\u002Fsections' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show content of widget\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function render() {\r\n-\t\ttry {\r\n-\t\t\t$instructor = null;\r\n-\t\t\t$settings   = $this->get_settings_for_display();\r\n-\t\t\tif ( ! is_array( $settings ) ) {\r\n-\t\t\t\t$settings = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-display-name\">%s\u003C\u002Fspan>', __( 'Instructor Name', 'learnpress' ) );\r\n-\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\r\n-\r\n-\t\t\t$wrapper = [];\r\n-\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\r\n-\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\r\n-\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\techo Template::instance()->nest_elements(\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\tSingleInstructorTemplate::instance()->html_display_name( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\techo $e->getMessage();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class InstructorTitleElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\Sections;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor\\SingleInstructorBaseElementor;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class InstructorTitleElementor extends SingleInstructorBaseElementor {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Instructor Name', 'learnpress' );\n+\t\t$this->name     = 'instructor_name';\n+\t\t$this->keywords = [ 'instructor', 'name' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'title', 'elementor\u002Finstructor\u002Fsections' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\t\u002F**\n+\t * Show content of widget\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function render() {\n+\t\ttry {\n+\t\t\t$instructor = null;\n+\t\t\t$settings   = $this->get_settings_for_display();\n+\t\t\tif ( ! is_array( $settings ) ) {\n+\t\t\t\t$settings = [];\n+\t\t\t}\n+\n+\t\t\t$text_default = sprintf( '\u003Cspan class=\"instructor-display-name\">%s\u003C\u002Fspan>', __( 'Instructor Name', 'learnpress' ) );\n+\t\t\t$this->detect_instructor_id( $settings, $instructor, $text_default );\n+\n+\t\t\t$wrapper = [];\n+\t\t\tif ( ! empty( $settings['wrapper_tags'] ) ) {\n+\t\t\t\tforeach ( $settings['wrapper_tags'] as $key => $tag ) {\n+\t\t\t\t\t$wrapper[ $tag['open_tag'] ?? '' ] = $tag['close_tag'] ?? '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\techo Template::instance()->nest_elements(\n+\t\t\t\t$wrapper,\n+\t\t\t\tSingleInstructorTemplate::instance()->html_display_name( $instructor )\n+\t\t\t);\n+\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\techo $e->getMessage();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorBaseElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorBaseElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorBaseElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorBaseElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorBaseElementor\r\n- *\r\n- * Has general methods for sections single instructor widgets use\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\r\n-\r\n-use Elementor\\Plugin;\r\n-use Exception;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_User;\r\n-\r\n-class SingleInstructorBaseElementor extends LPElementorWidgetBase {\r\n-\t\u002F**\r\n-\t * Set category for widget\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tpublic function get_categories() {\r\n-\t\treturn array( LPElementor::CATE_INSTRUCTOR );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Detect instructor id if is single instructor page\r\n-\t *\r\n-\t * @param array $settings\r\n-\t * @param UserModel|false $instructor\r\n-\t * @param string $label_default\r\n-\t *\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.1\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function detect_instructor_id( array $settings, &$instructor = null, string $label_default = '' ) {\r\n-\t\t\u002F**\r\n-\t\t * Get instructor id\r\n-\t\t *\r\n-\t\t * If is page is single instructor, will be get instructor id from query var\r\n-\t\t * Else will be get instructor id from widget\r\n-\t\t *\u002F\r\n-\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\t\tif ( ! $instructor instanceof UserModel ) {\r\n-\t\t\t$instructor_id = (int) $settings['instructor_id'] ?? 0;\r\n-\t\t\t$instructor    = UserModel::find( $instructor_id, true );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $instructor ) {\r\n-\t\t\tif ( Plugin::$instance->editor->is_edit_mode() ) {\r\n-\t\t\t\tthrow new Exception( $label_default );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( __( 'Instructor not found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $instructor->is_instructor() ) {\r\n-\t\t\tthrow new Exception( __( 'User is not Instructor!', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorBaseElementor\n+ *\n+ * Has general methods for sections single instructor widgets use\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\n+\n+use Elementor\\Plugin;\n+use Exception;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_User;\n+\n+class SingleInstructorBaseElementor extends LPElementorWidgetBase {\n+\t\u002F**\n+\t * Set category for widget\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tpublic function get_categories() {\n+\t\treturn array( LPElementor::CATE_INSTRUCTOR );\n+\t}\n+\n+\t\u002F**\n+\t * Detect instructor id if is single instructor page\n+\t *\n+\t * @param array $settings\n+\t * @param UserModel|false $instructor\n+\t * @param string $label_default\n+\t *\n+\t * @since 4.2.3\n+\t * @version 1.0.1\n+\t * @return void\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function detect_instructor_id( array $settings, &$instructor = null, string $label_default = '' ) {\n+\t\t\u002F**\n+\t\t * Get instructor id\n+\t\t *\n+\t\t * If is page is single instructor, will be get instructor id from query var\n+\t\t * Else will be get instructor id from widget\n+\t\t *\u002F\n+\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\t\tif ( ! $instructor instanceof UserModel ) {\n+\t\t\t$instructor_id = (int) $settings['instructor_id'] ?? 0;\n+\t\t\t$instructor    = UserModel::find( $instructor_id, true );\n+\t\t}\n+\n+\t\tif ( ! $instructor ) {\n+\t\t\tif ( Plugin::$instance->editor->is_edit_mode() ) {\n+\t\t\t\tthrow new Exception( $label_default );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( __( 'Instructor not found!', 'learnpress' ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $instructor->is_instructor() ) {\n+\t\t\tthrow new Exception( __( 'User is not Instructor!', 'learnpress' ) );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FInstructor\u002FSingleInstructorElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class SingleInstructorElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Single Instructor', 'learnpress' );\r\n-\t\t$this->name     = 'single_instructor';\r\n-\t\t$this->keywords = [ 'instructor', 'single', 'teacher' ];\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'single-instructor', 'elementor\u002Finstructor' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tprotected function render() {\r\n-\t\techo 13123;\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Instructor;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+\n+class SingleInstructorElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Single Instructor', 'learnpress' );\n+\t\t$this->name     = 'single_instructor';\n+\t\t$this->keywords = [ 'instructor', 'single', 'teacher' ];\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'single-instructor', 'elementor\u002Finstructor' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\tprotected function render() {\n+\t\techo 13123;\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FLoginUserFormElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FLoginUserFormElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FLoginUserFormElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FLoginUserFormElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\r\n-\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class LoginUserFormElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Login Form', 'learnpress' );\r\n-\t\t$this->name     = 'login_form';\r\n-\t\t$this->keywords = [ 'login' ];\r\n-\t\t$this->icon     = 'eicon-lock-user';\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'login-user-form', 'elementor' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\tlearn_press_show_message();\r\n-\t\t\t$settings = $this->get_settings_for_display();\r\n-\r\n-\t\t\tif ( class_exists( '\\Elementor\\Plugin' ) && \\Elementor\\Plugin::$instance->editor->is_edit_mode() ) {\r\n-\t\t\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\r\n-\t\t\t} else {\r\n-\t\t\t\t\\LearnPress::instance()->template( 'profile' )->login_form();\r\n-\t\t\t}\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function get_style_depends() {\r\n-\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\r\n-\r\n-\t\treturn array( 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\n+\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+\n+class LoginUserFormElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Login Form', 'learnpress' );\n+\t\t$this->name     = 'login_form';\n+\t\t$this->keywords = [ 'login' ];\n+\t\t$this->icon     = 'eicon-lock-user';\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'login-user-form', 'elementor' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\tlearn_press_show_message();\n+\t\t\t$settings = $this->get_settings_for_display();\n+\n+\t\t\tif ( class_exists( '\\Elementor\\Plugin' ) && \\Elementor\\Plugin::$instance->editor->is_edit_mode() ) {\n+\t\t\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\n+\t\t\t} else {\n+\t\t\t\t\\LearnPress::instance()->template( 'profile' )->login_form();\n+\t\t\t}\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\tpublic function get_style_depends() {\n+\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\n+\n+\t\treturn array( 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FRegisterUserFormElementor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FRegisterUserFormElementor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FRegisterUserFormElementor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FRegisterUserFormElementor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class SingleInstructorElementor\r\n- *\r\n- * @sicne 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\r\n-\r\n-use Elementor\\Plugin;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-class RegisterUserFormElementor extends LPElementorWidgetBase {\r\n-\tpublic function __construct( $data = [], $args = null ) {\r\n-\t\t$this->title    = esc_html__( 'Register Form', 'learnpress' );\r\n-\t\t$this->name     = 'register_form';\r\n-\t\t$this->keywords = [ 'register' ];\r\n-\t\t$this->icon     = 'eicon-lock-user';\r\n-\t\tparent::__construct( $data, $args );\r\n-\t}\r\n-\r\n-\tprotected function register_controls() {\r\n-\t\t$this->controls = Config::instance()->get( 'register-user-form', 'elementor' );\r\n-\t\tparent::register_controls();\r\n-\t}\r\n-\r\n-\tpublic function render() {\r\n-\t\ttry {\r\n-\t\t\tlearn_press_show_message();\r\n-\t\t\t$settings = $this->get_settings_for_display();\r\n-\r\n-\t\t\tif ( class_exists( '\\Elementor\\Plugin' ) && Plugin::$instance->editor->is_edit_mode() ) {\r\n-\t\t\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\r\n-\t\t\t} else {\r\n-\t\t\t\t\\LearnPress::instance()->template( 'profile' )->register_form();\r\n-\t\t\t}\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function get_style_depends() {\r\n-\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\r\n-\r\n-\t\treturn array( 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class SingleInstructorElementor\n+ *\n+ * @sicne 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\ExternalPlugin\\Elementor\\Widgets;\n+\n+use Elementor\\Plugin;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementorWidgetBase;\n+use LearnPress\\Helpers\\Config;\n+\n+class RegisterUserFormElementor extends LPElementorWidgetBase {\n+\tpublic function __construct( $data = [], $args = null ) {\n+\t\t$this->title    = esc_html__( 'Register Form', 'learnpress' );\n+\t\t$this->name     = 'register_form';\n+\t\t$this->keywords = [ 'register' ];\n+\t\t$this->icon     = 'eicon-lock-user';\n+\t\tparent::__construct( $data, $args );\n+\t}\n+\n+\tprotected function register_controls() {\n+\t\t$this->controls = Config::instance()->get( 'register-user-form', 'elementor' );\n+\t\tparent::register_controls();\n+\t}\n+\n+\tpublic function render() {\n+\t\ttry {\n+\t\t\tlearn_press_show_message();\n+\t\t\t$settings = $this->get_settings_for_display();\n+\n+\t\t\tif ( class_exists( '\\Elementor\\Plugin' ) && Plugin::$instance->editor->is_edit_mode() ) {\n+\t\t\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\n+\t\t\t} else {\n+\t\t\t\t\\LearnPress::instance()->template( 'profile' )->register_form();\n+\t\t\t}\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\tpublic function get_style_depends() {\n+\t\twp_register_style( 'learnpress', LP_PLUGIN_URL . 'assets\u002Fcss\u002Flearnpress.css', array(), uniqid() );\n+\n+\t\treturn array( 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,435 +1,435 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * @class LP_Polylang\r\n- *\r\n- * @since 4.1.5\r\n- * @version 1.0.1\r\n- * @author tungnx\r\n- *\u002F\r\n-\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accesDsed directly\r\n-}\r\n-\r\n-class LP_Polylang {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\t$this->hooks();\r\n-\t}\r\n-\r\n-\tpublic function hooks() {\r\n-\t\tadd_filter( 'learn-press\u002Fgeneral-settings-fields', [ $this, 'general_settings_fields' ], 10, 2 );\r\n-\t\tadd_filter( 'lp\u002Fsettings\u002Fpermalinks', [ $this, 'permalink_settings_fields' ], 10, 2 );\r\n-\t\tadd_filter( 'learn_press_get_page_id', [ $this, 'get_page_id' ], 10, 2 );\r\n-\t\tadd_filter( 'lp\u002Ftemplate\u002Farchive-course\u002Fskeleton\u002Fargs', [ $this, 'lang_arg_query_course' ] );\r\n-\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_attend', [ $this, 'lang_arg_query_course' ] );\r\n-\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_created', [ $this, 'lang_arg_query_course' ] );\r\n-\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic', [ $this, 'lang_arg_query_course' ] );\r\n-\t\tadd_filter( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab\u002Fquery', [ $this, 'args_query_user_courses' ], 10, 2 );\r\n-\t\tadd_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_courses', [ $this, 'filter_query_courses' ], 10, 2 );\r\n-\t\tadd_filter( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter', [ $this, 'filter_query_user_courses' ], 10 );\r\n-\t\tadd_filter( 'pll_the_language_link', [ $this, 'get_link_switcher' ], 10, 3 );\r\n-\t\tadd_filter( 'learn-press\u002Frewrite\u002Frules', [ $this, 'pll_rewrite_rules' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get page_id config on LP Settings\r\n-\t *\r\n-\t * @param int $page_id\r\n-\t * @param string $name\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_page_id( int $page_id = 0, string $name = '' ): int {\r\n-\t\tif ( ! is_callable( 'pll_default_language' ) ) {\r\n-\t\t\treturn $page_id;\r\n-\t\t}\r\n-\r\n-\t\t$lang_default = pll_default_language();\r\n-\t\t$lang_current = pll_current_language();\r\n-\t\tif ( ! $lang_current ) {\r\n-\t\t\t$lang_current = LP_Request::get_param( 'pll-current-lang' ); \u002F\u002F Param this send via lp_archive_skeleton_get_args\r\n-\t\t}\r\n-\r\n-\t\tif ( $lang_current && $lang_current != $lang_default ) {\r\n-\t\t\t$page_id_trans = absint( LP_Settings::get_option( \"{$name}_page_id_{$lang_current}\" ) );\r\n-\t\t\tif ( $page_id_trans ) {\r\n-\t\t\t\t$page_id = $page_id_trans;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $page_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function lang_arg_query_course( array $args ): array {\r\n-\t\tif ( ! function_exists( 'pll_current_language' ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$args['pll-current-lang'] = pll_current_language();\r\n-\r\n-\t\treturn $args;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query get course by current language\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param array $param\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function filter_query_courses( LP_Course_Filter $filter, array $param ): LP_Course_Filter {\r\n-\t\t$pll_current_lang = $param['pll-current-lang'] ?? '';\r\n-\t\tif ( empty( $pll_current_lang ) ) {\r\n-\t\t\t$pll_current_lang = LP_Request::get_param( 'pll-current-lang' );\r\n-\r\n-\t\t\tif ( empty( $pll_current_lang ) ) {\r\n-\t\t\t\treturn $filter;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$lp_db           = LP_Database::getInstance();\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON p.ID = r_term_pll.object_id\";\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id\";\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id\";\r\n-\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Profile filter query get user course by current language\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return LP_User_Items_Filter\r\n-\t *\u002F\r\n-\tpublic function filter_query_user_courses( $filter ): LP_User_Items_Filter {\r\n-\t\t$pll_current_lang = pll_current_language(); \u002F\u002F For query load page\r\n-\t\tif ( ! $pll_current_lang ) { \u002F\u002F For query call API\r\n-\t\t\t$pll_current_lang = LP_Request::get_param( 'pll-current-lang' );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $pll_current_lang ) ) {\r\n-\t\t\treturn $filter;\r\n-\t\t}\r\n-\r\n-\t\tif ( $pll_current_lang == pll_default_language() ) {\r\n-\t\t\treturn $filter;\r\n-\t\t}\r\n-\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON ui.item_id = r_term_pll.object_id\";\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id\";\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id\";\r\n-\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );\r\n-\r\n-\t\treturn $filter;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Profile filter query get course by current language\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return LP_Course_Filter\r\n-\t *\u002F\r\n-\t\u002F*public function profile_filter_query_courses( LP_Course_Filter $filter, array $args ): LP_Course_Filter {\r\n-\t\t$pll_current_lang = $args['pll-current-lang'] ?? '';\r\n-\r\n-\t\tif ( empty( $pll_current_lang ) ) {\r\n-\t\t\treturn $filter;\r\n-\t\t}\r\n-\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id\";\r\n-\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id\";\r\n-\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );\r\n-\r\n-\t\treturn $filter;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Args get course by current language\r\n-\t *\r\n-\t * @param array $args\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function args_query_user_courses( array $args, WP_REST_Request $request ): array {\r\n-\t\t$pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );\r\n-\r\n-\t\tif ( empty( $pll_current_lang ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$args['pll-current-lang'] = $pll_current_lang;\r\n-\r\n-\t\treturn $args;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create new fields of languages not default\r\n-\t *\u002F\r\n-\tpublic function general_settings_fields( array $fields ): array {\r\n-\t\t$default_lang = pll_default_language();\r\n-\t\t$current_lang = pll_current_language();\r\n-\r\n-\t\t$field_arr = [\r\n-\t\t\t'courses_page_id',\r\n-\t\t\t'profile_page_id',\r\n-\t\t\t'checkout_page_id',\r\n-\t\t\t'become_a_teacher_page_id',\r\n-\t\t\t'term_conditions_page_id',\r\n-\t\t\t'instructors_page_id',\r\n-\t\t\t'single_instructor_page_id',\r\n-\t\t];\r\n-\t\t$field_arr = apply_filters( 'lp_pll\u002Fsettings\u002Fname-fields', $field_arr );\r\n-\r\n-\t\tif ( $default_lang != $current_lang ) {\r\n-\t\t\t\u002F\u002F Set name field with lang\r\n-\t\t\tforeach ( $fields as $k => $field ) {\r\n-\t\t\t\tif ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {\r\n-\t\t\t\t\t$fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create new fields of languages not default\r\n-\t *\r\n-\t * @param array $fields\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.3\r\n-\t *\u002F\r\n-\tpublic function permalink_settings_fields( array $fields ): array {\r\n-\t\t$default_lang = pll_default_language();\r\n-\t\t$current_lang = pll_current_language();\r\n-\r\n-\t\t$field_arr = [\r\n-\t\t\t\u002F\u002F'lesson_slug',\r\n-\t\t];\r\n-\t\t$field_arr = apply_filters( 'lp_pll\u002Fsettings\u002Fpermalink\u002Fname-fields', $field_arr );\r\n-\r\n-\t\tif ( $default_lang != $current_lang ) {\r\n-\t\t\t\u002F\u002F Set name field with lang\r\n-\t\t\tforeach ( $fields as $k => $field ) {\r\n-\t\t\t\tif ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {\r\n-\t\t\t\t\t$fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $fields;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle link swither\r\n-\t *\r\n-\t * @param $url\r\n-\t * @param $slug\r\n-\t * @param $locale\r\n-\t *\r\n-\t * @return false|mixed|string\r\n-\t * @version 1.0.1\r\n-\t * @since 4.1.5\r\n-\t *\u002F\r\n-\tpublic function get_link_switcher( $url, $slug, $locale ) {\r\n-\t\t$slug_lang = '';\r\n-\t\tif ( $slug !== pll_default_language() ) {\r\n-\t\t\t$slug_lang = '_' . $slug;\r\n-\t\t}\r\n-\r\n-\t\t$arr_page = array( LP_PAGE_COURSES, LP_PAGE_PROFILE );\r\n-\t\tif ( in_array( LP_Page_Controller::page_current(), $arr_page )\r\n-\t\t\t&& ! learn_press_is_course_tax()\r\n-\t\t\t&& ! learn_press_is_course_tag() ) {\r\n-\t\t\t$name_page = str_replace( 'lp_page_', '', LP_Page_Controller::page_current() );\r\n-\t\t\t$url       = get_permalink( LP_Settings::get_option( $name_page . '_page_id' . $slug_lang ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rewrite url with polylang\r\n-\t *\r\n-\t * @param array $rules\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.1\r\n-\t * @uses LP_Query::add_rewrite_rules\r\n-\t *\u002F\r\n-\tpublic function pll_rewrite_rules( array $rules ): array {\r\n-\t\tif ( ! is_callable( 'pll_default_language' ) || ! is_callable( 'pll_current_language' ) ) {\r\n-\t\t\treturn $rules;\r\n-\t\t}\r\n-\r\n-\t\t$rules_old = $rules;\r\n-\r\n-\t\t$lang_default  = pll_default_language();\r\n-\t\t$lang_current  = pll_current_language();\r\n-\t\t$pll_options   = $this->get_pll_options();\r\n-\t\t$all_lang      = pll_languages_list();\r\n-\t\t$hide_default  = $pll_options['hide_default'] ?? 1;\r\n-\t\t$force_lang    = $pll_options['force_lang'] ?? 1;\r\n-\t\t$force_rewrite = $pll_options['rewrite'] ?? 1;\r\n-\r\n-\t\t$lang_slug = '';\r\n-\t\t$lang      = $lang_current;\r\n-\t\tif ( 1 == $force_lang ) { \u002F\u002F Pll add slug language to link\r\n-\t\t\tif ( $force_rewrite == 0 ) {\r\n-\t\t\t\t$lang_slug .= 'language\u002F';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lang_slug .= $lang . '\u002F';\r\n-\t\t} else { \u002F\u002F Pll add slug language to link\r\n-\t\t\t$lang_slug .= $lang . '\u002F';\r\n-\t\t}\r\n-\r\n-\t\t$lang_get_option = '';\r\n-\t\tif ( $lang != $lang_default ) {\r\n-\t\t\t$lang_get_option = '_' . $lang;\r\n-\t\t}\r\n-\t\tif ( $hide_default && $lang_current == $lang_default ) {\r\n-\t\t\treturn $rules;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Add language to rewrite url exits\r\n-\t\tforeach ( $rules_old as $key_group => $group_rule ) {\r\n-\t\t\tforeach ( $group_rule as $key => $rule ) {\r\n-\t\t\t\t$new_key                     = array_key_first( $rule );\r\n-\t\t\t\t$value                       = $rule[ $new_key ];\r\n-\t\t\t\t$new_key                     = substr_replace( $new_key, '', 0, 1 );\r\n-\t\t\t\t$new_key                     = '^' . $lang_slug . $new_key;\r\n-\t\t\t\t$rules[ $key_group ][ $key ] = [ $new_key => $value ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Rewrite url for courses\r\n-\t\t\u002F\u002F Not use learn_press_get_page_id( 'courses' ) because it $lang_current = false with $pll_options['force_lang'] = 0\r\n-\t\t\u002F*$courses_page_id_lang = LP_Settings::get_option( 'courses_page_id' . $lang_get_option, false );\r\n-\t\tif ( $courses_page_id_lang ) {\r\n-\t\t\t$courses_slug = get_post_field( 'post_name', $courses_page_id_lang );\r\n-\r\n-\t\t\t$rules['courses'][ 'pll-archive-' . $lang ] = [\r\n-\t\t\t\t\"^{$lang_slug}{$courses_slug}\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?paged=$matches[1]&post_type=' . LP_COURSE_CPT,\r\n-\t\t\t];\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F Rewrite url for instructors\r\n-\t\t\u002F*$instructors_page_id_lang = LP_Settings::get_option( 'instructors_page_id' . $lang_get_option, false );\r\n-\t\tif ( $instructors_page_id_lang ) {\r\n-\t\t\t$instructors_slug = get_post_field( 'post_name', $instructors_page_id_lang );\r\n-\r\n-\t\t\t$rules['instructors'][ 'pll-archive-' . $lang ] = [\r\n-\t\t\t\t\"^{$lang_slug}{$instructors_slug}\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?page_id=' . $instructors_page_id_lang,\r\n-\t\t\t];\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F Rewrite url for instructor\r\n-\t\t\u002F*$single_instructor_page_id = LP_Settings::get_option( 'single_instructor_page_id' . $lang_get_option, false );\r\n-\t\tif ( $single_instructor_page_id ) {\r\n-\t\t\t$instructor_slug = get_post_field( 'post_name', $single_instructor_page_id );\r\n-\r\n-\t\t\t$rules['instructor'][ 'has_name_' . $lang ] = [\r\n-\t\t\t\t\"^{$lang_slug}{$instructor_slug}\u002F([^\u002F]+)\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',\r\n-\t\t\t];\r\n-\t\t\t$rules['instructor'][ 'no_name_' . $lang ]  = [\r\n-\t\t\t\t\"^{$lang_slug}{$instructor_slug}\u002F?$\" =>\r\n-\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',\r\n-\t\t\t];\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F$this->add_rewrite_rules_profile( $rules, $lang_slug, $lang_get_option, $lang );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fpolylang-rewrite-url', $rules );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add rewrite rules for profile page.\r\n-\t *\r\n-\t * @param $rules\r\n-\t * @param $lang_slug\r\n-\t * @param $lang_get_option\r\n-\t * @param $lang\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function add_rewrite_rules_profile( &$rules, $lang_slug, $lang_get_option, $lang ) {\r\n-\t\t$profile_page_id_lang = LP_Settings::get_option( 'profile_page_id' . $lang_get_option, false );\r\n-\t\tif ( $profile_page_id_lang ) {\r\n-\t\t\t\u002F\u002F Rule view profile of user (self or another)\r\n-\t\t\t$page_profile_slug                   = get_post_field( 'post_name', $profile_page_id_lang );\r\n-\t\t\t$rules['profile'][ 'user_' . $lang ] = [\r\n-\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F?$\" =>\r\n-\t\t\t\t\t\"index.php?page_id={$profile_page_id_lang}&user=\" . '$matches[1]',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F Rule view profile of user (self or another) with tab\r\n-\t\t\t$tabs = LP_Profile::get_tabs_arr();\r\n-\t\t\tif ( $tabs ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var LP_Profile_Tab $args\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tforeach ( $tabs as $tab_key => $args ) {\r\n-\t\t\t\t\t$tab_slug                                   = $args['slug'] ?? $tab_key;\r\n-\t\t\t\t\t$rules['profile'][ $tab_key . '_' . $lang ] = [\r\n-\t\t\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F?([0-9]*)\u002F?$\" =>\r\n-\t\t\t\t\t\t\t'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\tif ( ! empty( $args['sections'] ) ) {\r\n-\t\t\t\t\t\tforeach ( $args['sections'] as $section_key => $section ) {\r\n-\t\t\t\t\t\t\t$section_slug                                   = $section['slug'] ?? $section_key;\r\n-\t\t\t\t\t\t\t$rules['profile'][ $section_key . '_' . $lang ] = [\r\n-\t\t\t\t\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F({$section_slug})\u002F?([0-9]*)?$\" =>\r\n-\t\t\t\t\t\t\t\t\t'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',\r\n-\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Fapply_filters( 'learn-press\u002Frewrite-rules\u002Fprofile', $rules['profile'], $profile_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get polylang settings\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.3.3\r\n-\t *\u002F\r\n-\tpublic function get_pll_options(): array {\r\n-\t\t\u002F\u002F Not use PLL()->options because it is incorrect.\r\n-\t\treturn maybe_unserialize( get_option( 'polylang' ) );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * @class LP_Polylang\n+ *\n+ * @since 4.1.5\n+ * @version 1.0.1\n+ * @author tungnx\n+ *\u002F\n+\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Helpers\\Singleton;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accesDsed directly\n+}\n+\n+class LP_Polylang {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\t$this->hooks();\n+\t}\n+\n+\tpublic function hooks() {\n+\t\tadd_filter( 'learn-press\u002Fgeneral-settings-fields', [ $this, 'general_settings_fields' ], 10, 2 );\n+\t\tadd_filter( 'lp\u002Fsettings\u002Fpermalinks', [ $this, 'permalink_settings_fields' ], 10, 2 );\n+\t\tadd_filter( 'learn_press_get_page_id', [ $this, 'get_page_id' ], 10, 2 );\n+\t\tadd_filter( 'lp\u002Ftemplate\u002Farchive-course\u002Fskeleton\u002Fargs', [ $this, 'lang_arg_query_course' ] );\n+\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_attend', [ $this, 'lang_arg_query_course' ] );\n+\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_created', [ $this, 'lang_arg_query_course' ] );\n+\t\tadd_filter( 'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic', [ $this, 'lang_arg_query_course' ] );\n+\t\tadd_filter( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab\u002Fquery', [ $this, 'args_query_user_courses' ], 10, 2 );\n+\t\tadd_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_courses', [ $this, 'filter_query_courses' ], 10, 2 );\n+\t\tadd_filter( 'lp\u002Fuser\u002Fcourse\u002Fquery\u002Ffilter', [ $this, 'filter_query_user_courses' ], 10 );\n+\t\tadd_filter( 'pll_the_language_link', [ $this, 'get_link_switcher' ], 10, 3 );\n+\t\tadd_filter( 'learn-press\u002Frewrite\u002Frules', [ $this, 'pll_rewrite_rules' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Get page_id config on LP Settings\n+\t *\n+\t * @param int $page_id\n+\t * @param string $name\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_page_id( int $page_id = 0, string $name = '' ): int {\n+\t\tif ( ! is_callable( 'pll_default_language' ) ) {\n+\t\t\treturn $page_id;\n+\t\t}\n+\n+\t\t$lang_default = pll_default_language();\n+\t\t$lang_current = pll_current_language();\n+\t\tif ( ! $lang_current ) {\n+\t\t\t$lang_current = LP_Request::get_param( 'pll-current-lang' ); \u002F\u002F Param this send via lp_archive_skeleton_get_args\n+\t\t}\n+\n+\t\tif ( $lang_current && $lang_current != $lang_default ) {\n+\t\t\t$page_id_trans = absint( LP_Settings::get_option( \"{$name}_page_id_{$lang_current}\" ) );\n+\t\t\tif ( $page_id_trans ) {\n+\t\t\t\t$page_id = $page_id_trans;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $page_id;\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function lang_arg_query_course( array $args ): array {\n+\t\tif ( ! function_exists( 'pll_current_language' ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$args['pll-current-lang'] = pll_current_language();\n+\n+\t\treturn $args;\n+\t}\n+\n+\t\u002F**\n+\t * Query get course by current language\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param array $param\n+\t *\n+\t * @return LP_Course_Filter\n+\t * @since 4.1.4\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function filter_query_courses( LP_Course_Filter $filter, array $param ): LP_Course_Filter {\n+\t\t$pll_current_lang = $param['pll-current-lang'] ?? '';\n+\t\tif ( empty( $pll_current_lang ) ) {\n+\t\t\t$pll_current_lang = LP_Request::get_param( 'pll-current-lang' );\n+\n+\t\t\tif ( empty( $pll_current_lang ) ) {\n+\t\t\t\treturn $filter;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$lp_db           = LP_Database::getInstance();\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON p.ID = r_term_pll.object_id\";\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id\";\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id\";\n+\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Profile filter query get user course by current language\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return LP_User_Items_Filter\n+\t *\u002F\n+\tpublic function filter_query_user_courses( $filter ): LP_User_Items_Filter {\n+\t\t$pll_current_lang = pll_current_language(); \u002F\u002F For query load page\n+\t\tif ( ! $pll_current_lang ) { \u002F\u002F For query call API\n+\t\t\t$pll_current_lang = LP_Request::get_param( 'pll-current-lang' );\n+\t\t}\n+\n+\t\tif ( empty( $pll_current_lang ) ) {\n+\t\t\treturn $filter;\n+\t\t}\n+\n+\t\tif ( $pll_current_lang == pll_default_language() ) {\n+\t\t\treturn $filter;\n+\t\t}\n+\n+\t\t$lp_db = LP_Database::getInstance();\n+\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term_pll ON ui.item_id = r_term_pll.object_id\";\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_taxonomy AS pll_term_taxonomy ON r_term_pll.term_taxonomy_id = pll_term_taxonomy.term_taxonomy_id\";\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS pll_terms ON pll_term_taxonomy.term_id = pll_terms.term_id\";\n+\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND pll_terms.slug = %s', $pll_current_lang );\n+\n+\t\treturn $filter;\n+\t}\n+\n+\t\u002F**\n+\t * Profile filter query get course by current language\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param array $args\n+\t *\n+\t * @return LP_Course_Filter\n+\t *\u002F\n+\t\u002F*public function profile_filter_query_courses( LP_Course_Filter $filter, array $args ): LP_Course_Filter {\n+\t\t$pll_current_lang = $args['pll-current-lang'] ?? '';\n+\n+\t\tif ( empty( $pll_current_lang ) ) {\n+\t\t\treturn $filter;\n+\t\t}\n+\n+\t\t$lp_db = LP_Database::getInstance();\n+\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_term_relationships AS r_term ON p.ID = r_term.object_id\";\n+\t\t$filter->join[]  = \"INNER JOIN $lp_db->tb_terms AS term ON r_term.term_taxonomy_id = term.term_id\";\n+\t\t$filter->where[] = $lp_db->wpdb->prepare( 'AND term.slug = %s', $pll_current_lang );\n+\n+\t\treturn $filter;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Args get course by current language\n+\t *\n+\t * @param array $args\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function args_query_user_courses( array $args, WP_REST_Request $request ): array {\n+\t\t$pll_current_lang = LP_Helper::sanitize_params_submitted( $request['pll-current-lang'] ?? '' );\n+\n+\t\tif ( empty( $pll_current_lang ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$args['pll-current-lang'] = $pll_current_lang;\n+\n+\t\treturn $args;\n+\t}\n+\n+\t\u002F**\n+\t * Create new fields of languages not default\n+\t *\u002F\n+\tpublic function general_settings_fields( array $fields ): array {\n+\t\t$default_lang = pll_default_language();\n+\t\t$current_lang = pll_current_language();\n+\n+\t\t$field_arr = [\n+\t\t\t'courses_page_id',\n+\t\t\t'profile_page_id',\n+\t\t\t'checkout_page_id',\n+\t\t\t'become_a_teacher_page_id',\n+\t\t\t'term_conditions_page_id',\n+\t\t\t'instructors_page_id',\n+\t\t\t'single_instructor_page_id',\n+\t\t];\n+\t\t$field_arr = apply_filters( 'lp_pll\u002Fsettings\u002Fname-fields', $field_arr );\n+\n+\t\tif ( $default_lang != $current_lang ) {\n+\t\t\t\u002F\u002F Set name field with lang\n+\t\t\tforeach ( $fields as $k => $field ) {\n+\t\t\t\tif ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {\n+\t\t\t\t\t$fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+\n+\t\u002F**\n+\t * Create new fields of languages not default\n+\t *\n+\t * @param array $fields\n+\t *\n+\t * @return array\n+\t * @version 1.0.0\n+\t * @since 4.2.3.3\n+\t *\u002F\n+\tpublic function permalink_settings_fields( array $fields ): array {\n+\t\t$default_lang = pll_default_language();\n+\t\t$current_lang = pll_current_language();\n+\n+\t\t$field_arr = [\n+\t\t\t\u002F\u002F'lesson_slug',\n+\t\t];\n+\t\t$field_arr = apply_filters( 'lp_pll\u002Fsettings\u002Fpermalink\u002Fname-fields', $field_arr );\n+\n+\t\tif ( $default_lang != $current_lang ) {\n+\t\t\t\u002F\u002F Set name field with lang\n+\t\t\tforeach ( $fields as $k => $field ) {\n+\t\t\t\tif ( isset( $field['id'] ) && in_array( $field['id'], $field_arr ) ) {\n+\t\t\t\t\t$fields[ $k ]['id'] = $field['id'] . '_' . $current_lang;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $fields;\n+\t}\n+\n+\t\u002F**\n+\t * Handle link swither\n+\t *\n+\t * @param $url\n+\t * @param $slug\n+\t * @param $locale\n+\t *\n+\t * @return false|mixed|string\n+\t * @version 1.0.1\n+\t * @since 4.1.5\n+\t *\u002F\n+\tpublic function get_link_switcher( $url, $slug, $locale ) {\n+\t\t$slug_lang = '';\n+\t\tif ( $slug !== pll_default_language() ) {\n+\t\t\t$slug_lang = '_' . $slug;\n+\t\t}\n+\n+\t\t$arr_page = array( LP_PAGE_COURSES, LP_PAGE_PROFILE );\n+\t\tif ( in_array( LP_Page_Controller::page_current(), $arr_page )\n+\t\t\t&& ! learn_press_is_course_tax()\n+\t\t\t&& ! learn_press_is_course_tag() ) {\n+\t\t\t$name_page = str_replace( 'lp_page_', '', LP_Page_Controller::page_current() );\n+\t\t\t$url       = get_permalink( LP_Settings::get_option( $name_page . '_page_id' . $slug_lang ) );\n+\t\t}\n+\n+\t\treturn $url;\n+\t}\n+\n+\t\u002F**\n+\t * Rewrite url with polylang\n+\t *\n+\t * @param array $rules\n+\t *\n+\t * @return array\n+\t * @since 4.2.3.3\n+\t * @version 1.0.1\n+\t * @uses LP_Query::add_rewrite_rules\n+\t *\u002F\n+\tpublic function pll_rewrite_rules( array $rules ): array {\n+\t\tif ( ! is_callable( 'pll_default_language' ) || ! is_callable( 'pll_current_language' ) ) {\n+\t\t\treturn $rules;\n+\t\t}\n+\n+\t\t$rules_old = $rules;\n+\n+\t\t$lang_default  = pll_default_language();\n+\t\t$lang_current  = pll_current_language();\n+\t\t$pll_options   = $this->get_pll_options();\n+\t\t$all_lang      = pll_languages_list();\n+\t\t$hide_default  = $pll_options['hide_default'] ?? 1;\n+\t\t$force_lang    = $pll_options['force_lang'] ?? 1;\n+\t\t$force_rewrite = $pll_options['rewrite'] ?? 1;\n+\n+\t\t$lang_slug = '';\n+\t\t$lang      = $lang_current;\n+\t\tif ( 1 == $force_lang ) { \u002F\u002F Pll add slug language to link\n+\t\t\tif ( $force_rewrite == 0 ) {\n+\t\t\t\t$lang_slug .= 'language\u002F';\n+\t\t\t}\n+\n+\t\t\t$lang_slug .= $lang . '\u002F';\n+\t\t} else { \u002F\u002F Pll add slug language to link\n+\t\t\t$lang_slug .= $lang . '\u002F';\n+\t\t}\n+\n+\t\t$lang_get_option = '';\n+\t\tif ( $lang != $lang_default ) {\n+\t\t\t$lang_get_option = '_' . $lang;\n+\t\t}\n+\t\tif ( $hide_default && $lang_current == $lang_default ) {\n+\t\t\treturn $rules;\n+\t\t}\n+\n+\t\t\u002F\u002F Add language to rewrite url exits\n+\t\tforeach ( $rules_old as $key_group => $group_rule ) {\n+\t\t\tforeach ( $group_rule as $key => $rule ) {\n+\t\t\t\t$new_key                     = array_key_first( $rule );\n+\t\t\t\t$value                       = $rule[ $new_key ];\n+\t\t\t\t$new_key                     = substr_replace( $new_key, '', 0, 1 );\n+\t\t\t\t$new_key                     = '^' . $lang_slug . $new_key;\n+\t\t\t\t$rules[ $key_group ][ $key ] = [ $new_key => $value ];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Rewrite url for courses\n+\t\t\u002F\u002F Not use learn_press_get_page_id( 'courses' ) because it $lang_current = false with $pll_options['force_lang'] = 0\n+\t\t\u002F*$courses_page_id_lang = LP_Settings::get_option( 'courses_page_id' . $lang_get_option, false );\n+\t\tif ( $courses_page_id_lang ) {\n+\t\t\t$courses_slug = get_post_field( 'post_name', $courses_page_id_lang );\n+\n+\t\t\t$rules['courses'][ 'pll-archive-' . $lang ] = [\n+\t\t\t\t\"^{$lang_slug}{$courses_slug}\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\n+\t\t\t\t\t'index.php?paged=$matches[1]&post_type=' . LP_COURSE_CPT,\n+\t\t\t];\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F Rewrite url for instructors\n+\t\t\u002F*$instructors_page_id_lang = LP_Settings::get_option( 'instructors_page_id' . $lang_get_option, false );\n+\t\tif ( $instructors_page_id_lang ) {\n+\t\t\t$instructors_slug = get_post_field( 'post_name', $instructors_page_id_lang );\n+\n+\t\t\t$rules['instructors'][ 'pll-archive-' . $lang ] = [\n+\t\t\t\t\"^{$lang_slug}{$instructors_slug}\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\n+\t\t\t\t\t'index.php?page_id=' . $instructors_page_id_lang,\n+\t\t\t];\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F Rewrite url for instructor\n+\t\t\u002F*$single_instructor_page_id = LP_Settings::get_option( 'single_instructor_page_id' . $lang_get_option, false );\n+\t\tif ( $single_instructor_page_id ) {\n+\t\t\t$instructor_slug = get_post_field( 'post_name', $single_instructor_page_id );\n+\n+\t\t\t$rules['instructor'][ 'has_name_' . $lang ] = [\n+\t\t\t\t\"^{$lang_slug}{$instructor_slug}\u002F([^\u002F]+)\u002F?(?:page\u002F)?([^\u002F][0-9]*)?\u002F?$\" =>\n+\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&instructor_name=$matches[1]&paged=$matches[2]',\n+\t\t\t];\n+\t\t\t$rules['instructor'][ 'no_name_' . $lang ]  = [\n+\t\t\t\t\"^{$lang_slug}{$instructor_slug}\u002F?$\" =>\n+\t\t\t\t\t'index.php?page_id=' . $single_instructor_page_id . '&is_single_instructor=1&paged=$matches[2]',\n+\t\t\t];\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F$this->add_rewrite_rules_profile( $rules, $lang_slug, $lang_get_option, $lang );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fpolylang-rewrite-url', $rules );\n+\t}\n+\n+\t\u002F**\n+\t * Add rewrite rules for profile page.\n+\t *\n+\t * @param $rules\n+\t * @param $lang_slug\n+\t * @param $lang_get_option\n+\t * @param $lang\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function add_rewrite_rules_profile( &$rules, $lang_slug, $lang_get_option, $lang ) {\n+\t\t$profile_page_id_lang = LP_Settings::get_option( 'profile_page_id' . $lang_get_option, false );\n+\t\tif ( $profile_page_id_lang ) {\n+\t\t\t\u002F\u002F Rule view profile of user (self or another)\n+\t\t\t$page_profile_slug                   = get_post_field( 'post_name', $profile_page_id_lang );\n+\t\t\t$rules['profile'][ 'user_' . $lang ] = [\n+\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F?$\" =>\n+\t\t\t\t\t\"index.php?page_id={$profile_page_id_lang}&user=\" . '$matches[1]',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F Rule view profile of user (self or another) with tab\n+\t\t\t$tabs = LP_Profile::get_tabs_arr();\n+\t\t\tif ( $tabs ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var LP_Profile_Tab $args\n+\t\t\t\t *\u002F\n+\t\t\t\tforeach ( $tabs as $tab_key => $args ) {\n+\t\t\t\t\t$tab_slug                                   = $args['slug'] ?? $tab_key;\n+\t\t\t\t\t$rules['profile'][ $tab_key . '_' . $lang ] = [\n+\t\t\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F?([0-9]*)\u002F?$\" =>\n+\t\t\t\t\t\t\t'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&view_id=$matches[3]',\n+\t\t\t\t\t];\n+\n+\t\t\t\t\tif ( ! empty( $args['sections'] ) ) {\n+\t\t\t\t\t\tforeach ( $args['sections'] as $section_key => $section ) {\n+\t\t\t\t\t\t\t$section_slug                                   = $section['slug'] ?? $section_key;\n+\t\t\t\t\t\t\t$rules['profile'][ $section_key . '_' . $lang ] = [\n+\t\t\t\t\t\t\t\t\"^{$lang_slug}{$page_profile_slug}\u002F([^\u002F]*)\u002F({$tab_slug})\u002F({$section_slug})\u002F?([0-9]*)?$\" =>\n+\t\t\t\t\t\t\t\t\t'index.php?page_id=' . $profile_page_id_lang . '&user=$matches[1]&view=$matches[2]&section=$matches[3]&view_id=$matches[4]',\n+\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002Fapply_filters( 'learn-press\u002Frewrite-rules\u002Fprofile', $rules['profile'], $profile_id );\n+\t}\n+\n+\t\u002F**\n+\t * Get polylang settings\n+\t *\n+\t * @return array\n+\t * @version 1.0.1\n+\t * @since 4.2.3.3\n+\t *\u002F\n+\tpublic function get_pll_options(): array {\n+\t\t\u002F\u002F Not use PLL()->options because it is incorrect.\n+\t\treturn maybe_unserialize( get_option( 'polylang' ) );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FRankMath\u002FLPRankMath.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FRankMath\u002FLPRankMath.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FRankMath\u002FLPRankMath.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FRankMath\u002FLPRankMath.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LPYoastSeo\r\n- *\r\n- * Compatible with wordpress.org\u002Fplugins\u002Fwordpress-seo\u002F\r\n- * @since 4.2.7.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\RankMath;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Helper;\r\n-use LP_Page_Controller;\r\n-\r\n-class LPRankMath {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter(\r\n-\t\t\t'rank_math\u002Fsitemap\u002Fexclude_post_type',\r\n-\t\t\t[ $this, 'disable_link_sitemap_with_items_course' ],\r\n-\t\t\t10,\r\n-\t\t\t2\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Disable link sitemap with items course (lesson, quiz, question)\r\n-\t *\r\n-\t * @param $bool\r\n-\t * @param $post_type\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function disable_link_sitemap_with_items_course( $bool, $post_type ) {\r\n-\t\t$item_types   = CourseModel::item_types_support();\r\n-\t\t$item_types[] = LP_QUESTION_CPT;\r\n-\t\tif ( in_array( $post_type, $item_types ) ) {\r\n-\t\t\t$bool = true;\r\n-\t\t}\r\n-\r\n-\t\treturn $bool;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LPYoastSeo\n+ *\n+ * Compatible with wordpress.org\u002Fplugins\u002Fwordpress-seo\u002F\n+ * @since 4.2.7.7\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\RankMath;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Helper;\n+use LP_Page_Controller;\n+\n+class LPRankMath {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter(\n+\t\t\t'rank_math\u002Fsitemap\u002Fexclude_post_type',\n+\t\t\t[ $this, 'disable_link_sitemap_with_items_course' ],\n+\t\t\t10,\n+\t\t\t2\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Disable link sitemap with items course (lesson, quiz, question)\n+\t *\n+\t * @param $bool\n+\t * @param $post_type\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function disable_link_sitemap_with_items_course( $bool, $post_type ) {\n+\t\t$item_types   = CourseModel::item_types_support();\n+\t\t$item_types[] = LP_QUESTION_CPT;\n+\t\tif ( in_array( $post_type, $item_types ) ) {\n+\t\t\t$bool = true;\n+\t\t}\n+\n+\t\treturn $bool;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FYoastSeo\u002FLPYoastSeo.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FYoastSeo\u002FLPYoastSeo.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FExternalPlugin\u002FYoastSeo\u002FLPYoastSeo.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FExternalPlugin\u002FYoastSeo\u002FLPYoastSeo.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LPYoastSeo\r\n- *\r\n- * Compatible with wordpress.org\u002Fplugins\u002Fwordpress-seo\u002F\r\n- * @since 4.2.6.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\ExternalPlugin\\YoastSeo;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LP_Helper;\r\n-use LP_Page_Controller;\r\n-\r\n-class LPYoastSeo {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'wpseo_opengraph_url', [ $this, 'opengraph_url' ] );\r\n-\t}\r\n-\r\n-\tpublic function opengraph_url( $open_graph_url ) {\r\n-\t\tif ( LP_Page_Controller::is_page_instructor() ) {\r\n-\t\t\t$open_graph_url = LP_Helper::getUrlCurrent();\r\n-\t\t}\r\n-\r\n-\t\treturn $open_graph_url;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LPYoastSeo\n+ *\n+ * Compatible with wordpress.org\u002Fplugins\u002Fwordpress-seo\u002F\n+ * @since 4.2.6.4\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\ExternalPlugin\\YoastSeo;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LP_Helper;\n+use LP_Page_Controller;\n+\n+class LPYoastSeo {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'wpseo_opengraph_url', [ $this, 'opengraph_url' ] );\n+\t}\n+\n+\tpublic function opengraph_url( $open_graph_url ) {\n+\t\tif ( LP_Page_Controller::is_page_instructor() ) {\n+\t\t\t$open_graph_url = LP_Helper::getUrlCurrent();\n+\t\t}\n+\n+\t\treturn $open_graph_url;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-course-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-course-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-course-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-course-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 3.2.9\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Course_Filter extends LP_Post_Type_Filter {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_COURSE_CPT;\r\n-\t\u002F**\r\n-\t * @var string Level of Course\r\n-\t *\u002F\r\n-\tpublic $levels = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $taxonomy = 'course_category';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $type = 'all';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 3.2.9\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Course_Filter extends LP_Post_Type_Filter {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = LP_COURSE_CPT;\n+\t\u002F**\n+\t * @var string Level of Course\n+\t *\u002F\n+\tpublic $levels = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $taxonomy = 'course_category';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $type = 'all';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-course-json-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-course-json-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-course-json-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-course-json-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,93 +1,93 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Course_JSON_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 4.2.6.9\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Course_JSON_Filter extends LP_Filter {\r\n-\tconst COL_ID = 'ID';\r\n-\tconst COL_POST_AUTHOR = 'post_author';\r\n-\tconst COL_POST_DATE_GMT = 'post_date_gmt';\r\n-\tconst COL_POST_CONTENT = 'post_content';\r\n-\tconst COL_POST_TITLE = 'post_title';\r\n-\tconst COL_POST_STATUS = 'post_status';\r\n-\tconst COL_POST_NAME = 'post_name';\r\n-\tconst COL_MENU_ORDER = 'menu_order';\r\n-\tconst COL_JSON = 'json';\r\n-\tconst COL_PRICE_TO_SORT = 'price_to_sort';\r\n-\tconst COL_IS_SALE = 'is_sale';\r\n-\tconst COL_LANG = 'lang'; \u002F\u002F For multiple languages, wpml or polylang will store here.\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_ID,\r\n-\t\tself::COL_POST_AUTHOR,\r\n-\t\tself::COL_POST_DATE_GMT,\r\n-\t\tself::COL_POST_CONTENT,\r\n-\t\tself::COL_POST_TITLE,\r\n-\t\tself::COL_POST_STATUS,\r\n-\t\tself::COL_POST_NAME,\r\n-\t\tself::COL_MENU_ORDER,\r\n-\t\tself::COL_JSON,\r\n-\t\tself::COL_PRICE_TO_SORT,\r\n-\t\tself::COL_IS_SALE,\r\n-\t\tself::COL_LANG,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_title = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_name = '';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $post_status = [];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $post_author = 0;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $post_authors = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $term_ids = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $tag_ids = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $taxonomy = 'course_category';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $lang = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $is_sale = 0;\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Course_JSON_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 4.2.6.9\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Course_JSON_Filter extends LP_Filter {\n+\tconst COL_ID = 'ID';\n+\tconst COL_POST_AUTHOR = 'post_author';\n+\tconst COL_POST_DATE_GMT = 'post_date_gmt';\n+\tconst COL_POST_CONTENT = 'post_content';\n+\tconst COL_POST_TITLE = 'post_title';\n+\tconst COL_POST_STATUS = 'post_status';\n+\tconst COL_POST_NAME = 'post_name';\n+\tconst COL_MENU_ORDER = 'menu_order';\n+\tconst COL_JSON = 'json';\n+\tconst COL_PRICE_TO_SORT = 'price_to_sort';\n+\tconst COL_IS_SALE = 'is_sale';\n+\tconst COL_LANG = 'lang'; \u002F\u002F For multiple languages, wpml or polylang will store here.\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_ID,\n+\t\tself::COL_POST_AUTHOR,\n+\t\tself::COL_POST_DATE_GMT,\n+\t\tself::COL_POST_CONTENT,\n+\t\tself::COL_POST_TITLE,\n+\t\tself::COL_POST_STATUS,\n+\t\tself::COL_POST_NAME,\n+\t\tself::COL_MENU_ORDER,\n+\t\tself::COL_JSON,\n+\t\tself::COL_PRICE_TO_SORT,\n+\t\tself::COL_IS_SALE,\n+\t\tself::COL_LANG,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_title = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_name = '';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $post_status = [];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $post_author = 0;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $post_authors = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $term_ids = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $tag_ids = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $taxonomy = 'course_category';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $lang = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $is_sale = 0;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,128 +1,128 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Filter\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Filter {\r\n-\tconst ORDER_DESC = 'DESC';\r\n-\tconst ORDER_ASC  = 'ASC';\r\n-\t\u002F**\r\n-\t * @var int set -1 for no limit\r\n-\t *\u002F\r\n-\tpublic $limit = 10;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $max_limit = 100;\r\n-\t\u002F**\r\n-\t * @var array query ON\r\n-\t *\u002F\r\n-\tpublic $sort_by = array();\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $group_by = '';\r\n-\t\u002F**\r\n-\t * @var string field name for order, EX ID\r\n-\t *\u002F\r\n-\tpublic $order_by = '';\r\n-\t\u002F**\r\n-\t * @var string DESC|ASC\r\n-\t *\u002F\r\n-\tpublic $order = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $key_word = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $page = 1;\r\n-\t\u002F**\r\n-\t * Name table query Or Query nested\r\n-\t * EX: FROM 'wp_posts'\r\n-\t * OR: FROM (SELECT * FROM 'wp_posts') AS P\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $collection = '';\r\n-\t\u002F**\r\n-\t * Alias collection\r\n-\t * EX: FROM 'wp_posts' AS p\r\n-\t * \"p\" is alias\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $collection_alias = '';\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $fields = array();\r\n-\t\u002F**\r\n-\t * For get only columns set on it\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $only_fields = array();\r\n-\t\u002F**\r\n-\t * Exclude columns set on fields\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $exclude_fields = array();\r\n-\t\u002F**\r\n-\t * @var array for purpose run query update.\r\n-\t *\u002F\r\n-\tpublic $set = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $where = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $join = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $union = array();\r\n-\t\u002F**\r\n-\t * @var bool set true to run query count\r\n-\t *\u002F\r\n-\tpublic $run_query_count = true;\r\n-\t\u002F**\r\n-\t * @var bool set true to return total_rows\r\n-\t *\u002F\r\n-\tpublic $query_count = false;\r\n-\t\u002F**\r\n-\t * @var string Ex: ID, for query: COUNT(ID)\r\n-\t *\u002F\r\n-\tpublic $field_count = 'ID';\r\n-\t\u002F**\r\n-\t * @var bool set true to return string query\r\n-\t *\u002F\r\n-\tpublic $return_string_query = false;\r\n-\t\u002F**\r\n-\t * @var false set true to return string query to debug\r\n-\t *\u002F\r\n-\tpublic $debug_string_query = false;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $query_type = 'get_results';\r\n-\t\u002F**\r\n-\t * @var object stdclass\r\n-\t *\u002F\r\n-\tpublic $filter_extra;\r\n-}\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Filter\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 4.0.2\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Filter {\n+\tconst ORDER_DESC = 'DESC';\n+\tconst ORDER_ASC  = 'ASC';\n+\t\u002F**\n+\t * @var int set -1 for no limit\n+\t *\u002F\n+\tpublic $limit = 10;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $max_limit = 100;\n+\t\u002F**\n+\t * @var array query ON\n+\t *\u002F\n+\tpublic $sort_by = array();\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $group_by = '';\n+\t\u002F**\n+\t * @var string field name for order, EX ID\n+\t *\u002F\n+\tpublic $order_by = '';\n+\t\u002F**\n+\t * @var string DESC|ASC\n+\t *\u002F\n+\tpublic $order = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $key_word = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $page = 1;\n+\t\u002F**\n+\t * Name table query Or Query nested\n+\t * EX: FROM 'wp_posts'\n+\t * OR: FROM (SELECT * FROM 'wp_posts') AS P\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $collection = '';\n+\t\u002F**\n+\t * Alias collection\n+\t * EX: FROM 'wp_posts' AS p\n+\t * \"p\" is alias\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $collection_alias = '';\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $fields = array();\n+\t\u002F**\n+\t * For get only columns set on it\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $only_fields = array();\n+\t\u002F**\n+\t * Exclude columns set on fields\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $exclude_fields = array();\n+\t\u002F**\n+\t * @var array for purpose run query update.\n+\t *\u002F\n+\tpublic $set = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $where = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $join = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $union = array();\n+\t\u002F**\n+\t * @var bool set true to run query count\n+\t *\u002F\n+\tpublic $run_query_count = true;\n+\t\u002F**\n+\t * @var bool set true to return total_rows\n+\t *\u002F\n+\tpublic $query_count = false;\n+\t\u002F**\n+\t * @var string Ex: ID, for query: COUNT(ID)\n+\t *\u002F\n+\tpublic $field_count = 'ID';\n+\t\u002F**\n+\t * @var bool set true to return string query\n+\t *\u002F\n+\tpublic $return_string_query = false;\n+\t\u002F**\n+\t * @var false set true to return string query to debug\n+\t *\u002F\n+\tpublic $debug_string_query = false;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $query_type = 'get_results';\n+\t\u002F**\n+\t * @var object stdclass\n+\t *\u002F\n+\tpublic $filter_extra;\n+}\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-order-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-order-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-order-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-order-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Order_Filter\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 1.0.0\r\n- * @since 4.1.4\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Order_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-class LP_Order_Filter extends LP_Post_Type_Filter {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = 'lp_order';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $order_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $order_item_ids = [];\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Order_Filter\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 1.0.0\n+ * @since 4.1.4\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Order_Filter' ) ) {\n+\treturn;\n+}\n+\n+class LP_Order_Filter extends LP_Post_Type_Filter {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = 'lp_order';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $order_item_id = 0;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $order_item_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-post-meta-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-post-meta-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-post-meta-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-post-meta-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Post_Meta_Filter\r\n- *\r\n- * Filter post type of LP\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 1.0.0\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Post_Meta_Filter extends LP_Filter {\r\n-\tconst COL_META_ID = 'meta_id';\r\n-\tconst COL_POST_ID = 'post_id';\r\n-\tconst COL_META_VALUE = 'meta_value';\r\n-\tconst COL_META_KEY = 'meta_key';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_META_ID,\r\n-\t\tself::COL_POST_ID,\r\n-\t\tself::COL_META_VALUE,\r\n-\t\tself::COL_META_KEY\r\n-\t];\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $meta_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $post_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $meta_value;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $meta_key;\r\n-}\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Post_Meta_Filter\n+ *\n+ * Filter post type of LP\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 1.0.0\n+ * @since 4.2.6.9\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Post_Meta_Filter extends LP_Filter {\n+\tconst COL_META_ID = 'meta_id';\n+\tconst COL_POST_ID = 'post_id';\n+\tconst COL_META_VALUE = 'meta_value';\n+\tconst COL_META_KEY = 'meta_key';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_META_ID,\n+\t\tself::COL_POST_ID,\n+\t\tself::COL_META_VALUE,\n+\t\tself::COL_META_KEY\n+\t];\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $meta_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $post_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $meta_value;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $meta_key;\n+}\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-post-type-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-post-type-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-post-type-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-post-type-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,117 +1,117 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Post_Type_Filter\r\n- *\r\n- * Filter post type of LP\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 1.0.1\r\n- * @since 4.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Post_Type_Filter extends LP_Filter {\r\n-\tconst COL_ID                    = 'ID';\r\n-\tconst COL_POST_AUTHOR           = 'post_author';\r\n-\tconst COL_POST_DATE             = 'post_date';\r\n-\tconst COL_POST_DATE_GMT         = 'post_date_gmt';\r\n-\tconst COL_POST_CONTENT          = 'post_content';\r\n-\tconst COL_POST_TITLE            = 'post_title';\r\n-\tconst COL_POST_EXCERPT          = 'post_excerpt';\r\n-\tconst COL_POST_STATUS           = 'post_status';\r\n-\tconst COL_COMMENT_STATUS        = 'comment_status';\r\n-\tconst COL_PING_STATUS           = 'ping_status';\r\n-\tconst COL_POST_PASSWORD         = 'post_password';\r\n-\tconst COL_POST_NAME             = 'post_name';\r\n-\tconst COL_TO_PING               = 'to_ping';\r\n-\tconst COL_PINGED                = 'pinged';\r\n-\tconst COL_POST_MODIFIED         = 'post_modified';\r\n-\tconst COL_POST_MODIFIED_GMT     = 'post_modified_gmt';\r\n-\tconst COL_POST_CONTENT_FILTERED = 'post_content_filtered';\r\n-\tconst COL_POST_PARENT           = 'post_parent';\r\n-\tconst COL_GUID                  = 'guid';\r\n-\tconst COL_MENU_ORDER            = 'menu_order';\r\n-\tconst COL_POST_TYPE             = 'post_type';\r\n-\tconst COL_POST_MIME_TYPE        = 'post_mime_type';\r\n-\tconst COL_COMMENT_COUNT         = 'comment_count';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_ID,\r\n-\t\tself::COL_POST_AUTHOR,\r\n-\t\tself::COL_POST_DATE,\r\n-\t\tself::COL_POST_DATE_GMT,\r\n-\t\tself::COL_POST_CONTENT,\r\n-\t\tself::COL_POST_TITLE,\r\n-\t\tself::COL_POST_EXCERPT,\r\n-\t\tself::COL_POST_STATUS,\r\n-\t\tself::COL_COMMENT_STATUS,\r\n-\t\tself::COL_PING_STATUS,\r\n-\t\tself::COL_POST_PASSWORD,\r\n-\t\tself::COL_POST_NAME,\r\n-\t\tself::COL_TO_PING,\r\n-\t\tself::COL_PINGED,\r\n-\t\tself::COL_POST_MODIFIED,\r\n-\t\tself::COL_POST_MODIFIED_GMT,\r\n-\t\tself::COL_POST_CONTENT_FILTERED,\r\n-\t\tself::COL_POST_PARENT,\r\n-\t\tself::COL_GUID,\r\n-\t\tself::COL_MENU_ORDER,\r\n-\t\tself::COL_POST_TYPE,\r\n-\t\tself::COL_POST_MIME_TYPE,\r\n-\t\tself::COL_COMMENT_COUNT,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = 'post';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_title;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_name;\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $post_status = [];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $post_author;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $post_authors = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $term_ids = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $tag_ids = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $post_ids = array();\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $taxonomy = 'category';\r\n-\r\n-\tpublic function __construct() {\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Post_Type_Filter\n+ *\n+ * Filter post type of LP\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 1.0.1\n+ * @since 4.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Post_Type_Filter extends LP_Filter {\n+\tconst COL_ID                    = 'ID';\n+\tconst COL_POST_AUTHOR           = 'post_author';\n+\tconst COL_POST_DATE             = 'post_date';\n+\tconst COL_POST_DATE_GMT         = 'post_date_gmt';\n+\tconst COL_POST_CONTENT          = 'post_content';\n+\tconst COL_POST_TITLE            = 'post_title';\n+\tconst COL_POST_EXCERPT          = 'post_excerpt';\n+\tconst COL_POST_STATUS           = 'post_status';\n+\tconst COL_COMMENT_STATUS        = 'comment_status';\n+\tconst COL_PING_STATUS           = 'ping_status';\n+\tconst COL_POST_PASSWORD         = 'post_password';\n+\tconst COL_POST_NAME             = 'post_name';\n+\tconst COL_TO_PING               = 'to_ping';\n+\tconst COL_PINGED                = 'pinged';\n+\tconst COL_POST_MODIFIED         = 'post_modified';\n+\tconst COL_POST_MODIFIED_GMT     = 'post_modified_gmt';\n+\tconst COL_POST_CONTENT_FILTERED = 'post_content_filtered';\n+\tconst COL_POST_PARENT           = 'post_parent';\n+\tconst COL_GUID                  = 'guid';\n+\tconst COL_MENU_ORDER            = 'menu_order';\n+\tconst COL_POST_TYPE             = 'post_type';\n+\tconst COL_POST_MIME_TYPE        = 'post_mime_type';\n+\tconst COL_COMMENT_COUNT         = 'comment_count';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_ID,\n+\t\tself::COL_POST_AUTHOR,\n+\t\tself::COL_POST_DATE,\n+\t\tself::COL_POST_DATE_GMT,\n+\t\tself::COL_POST_CONTENT,\n+\t\tself::COL_POST_TITLE,\n+\t\tself::COL_POST_EXCERPT,\n+\t\tself::COL_POST_STATUS,\n+\t\tself::COL_COMMENT_STATUS,\n+\t\tself::COL_PING_STATUS,\n+\t\tself::COL_POST_PASSWORD,\n+\t\tself::COL_POST_NAME,\n+\t\tself::COL_TO_PING,\n+\t\tself::COL_PINGED,\n+\t\tself::COL_POST_MODIFIED,\n+\t\tself::COL_POST_MODIFIED_GMT,\n+\t\tself::COL_POST_CONTENT_FILTERED,\n+\t\tself::COL_POST_PARENT,\n+\t\tself::COL_GUID,\n+\t\tself::COL_MENU_ORDER,\n+\t\tself::COL_POST_TYPE,\n+\t\tself::COL_POST_MIME_TYPE,\n+\t\tself::COL_COMMENT_COUNT,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = 'post';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_title;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_name;\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $post_status = [];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $post_author;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $post_authors = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $term_ids = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $tag_ids = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $post_ids = array();\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $taxonomy = 'category';\n+\n+\tpublic function __construct() {\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz_Questions_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @since  4.1.6\r\n- * @author tungnx\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Question_Answermeta_Filter extends LP_Filter {\r\n-\tconst COL_META_ID            = 'meta_id';\r\n-\tconst COL_QUESTION_ANSWER_ID = 'learnpress_question_answer_id';\r\n-\tconst COL_META_KEY           = 'meta_key';\r\n-\tconst COL_META_VALUE         = 'meta_value';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_META_ID,\r\n-\t\tself::COL_QUESTION_ANSWER_ID,\r\n-\t\tself::COL_META_KEY,\r\n-\t\tself::COL_META_VALUE,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $meta_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_answer_id = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $meta_key = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $meta_value = '';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz_Questions_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @since  4.1.6\n+ * @author tungnx\n+ * @version 1.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Question_Answermeta_Filter extends LP_Filter {\n+\tconst COL_META_ID            = 'meta_id';\n+\tconst COL_QUESTION_ANSWER_ID = 'learnpress_question_answer_id';\n+\tconst COL_META_KEY           = 'meta_key';\n+\tconst COL_META_VALUE         = 'meta_value';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_META_ID,\n+\t\tself::COL_QUESTION_ANSWER_ID,\n+\t\tself::COL_META_KEY,\n+\t\tself::COL_META_VALUE,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $meta_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_answer_id = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $meta_key = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $meta_value = '';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-answers-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-answers-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-answers-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-answers-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LP_Quiz_Questions_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @since  4.1.6\r\n- * @author tungnx\r\n- * @version 1.0.2\r\n- *\u002F\r\n-class LP_Question_Answers_Filter extends LP_Filter {\r\n-\tconst COL_QUESTION_ANSWER_ID = 'question_answer_id';\r\n-\tconst COL_QUESTION_ID        = 'question_id';\r\n-\tconst COL_TITLE              = 'title';\r\n-\tconst COL_VALUE              = 'value';\r\n-\tconst COL_ORDER              = 'order';\r\n-\tconst COL_IS_TRUE            = 'is_true';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_QUESTION_ANSWER_ID,\r\n-\t\tself::COL_QUESTION_ID,\r\n-\t\tself::COL_TITLE,\r\n-\t\tself::COL_VALUE,\r\n-\t\tself::COL_ORDER,\r\n-\t\tself::COL_IS_TRUE,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $field_count = 'question_answer_id';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_answer_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $title;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $value;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $order;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $is_true;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $question_answer_ids = [];\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $question_ids = [];\r\n-}\r\n+\u003C?php\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LP_Quiz_Questions_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @since  4.1.6\n+ * @author tungnx\n+ * @version 1.0.2\n+ *\u002F\n+class LP_Question_Answers_Filter extends LP_Filter {\n+\tconst COL_QUESTION_ANSWER_ID = 'question_answer_id';\n+\tconst COL_QUESTION_ID        = 'question_id';\n+\tconst COL_TITLE              = 'title';\n+\tconst COL_VALUE              = 'value';\n+\tconst COL_ORDER              = 'order';\n+\tconst COL_IS_TRUE            = 'is_true';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_QUESTION_ANSWER_ID,\n+\t\tself::COL_QUESTION_ID,\n+\t\tself::COL_TITLE,\n+\t\tself::COL_VALUE,\n+\t\tself::COL_ORDER,\n+\t\tself::COL_IS_TRUE,\n+\t];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $field_count = 'question_answer_id';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_answer_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $title;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $value;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $order;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $is_true;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $question_answer_ids = [];\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $question_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-question-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-question-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Question_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 3.2.8\r\n- * @author tungnx\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Question_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-class LP_Question_Filter extends LP_Post_Type_Filter {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = 'lp_question';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Question_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 3.2.8\n+ * @author tungnx\n+ * @version 1.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Question_Filter' ) ) {\n+\treturn;\n+}\n+\n+class LP_Question_Filter extends LP_Post_Type_Filter {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = 'lp_question';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-quiz-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-quiz-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-quiz-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-quiz-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @since 4.2.7.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Quiz_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-class LP_Quiz_Filter extends LP_Post_Type_Filter {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_QUIZ_CPT;\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @since 4.2.7.6\n+ * @version 1.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Quiz_Filter' ) ) {\n+\treturn;\n+}\n+\n+class LP_Quiz_Filter extends LP_Post_Type_Filter {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = LP_QUIZ_CPT;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz_Questions_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @since  4.1.6\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_Quiz_Questions_Filter extends LP_Filter {\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $question_ids = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $quiz_ids = array();\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz_Questions_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @since  4.1.6\n+ * @author tungnx\n+ * @version 1.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_Quiz_Questions_Filter extends LP_Filter {\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $question_ids = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $quiz_ids = array();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-section-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-section-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-section-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-section-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Section_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Section_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 4.1.4.2\r\n- *\u002F\r\n-class LP_Section_Filter extends LP_Filter {\r\n-\tconst COL_SECTION_ID          = 'section_id';\r\n-\tconst COL_SECTION_NAME        = 'section_name';\r\n-\tconst COL_SECTION_COURSE_ID   = 'section_course_id';\r\n-\tconst COL_SECTION_ORDER       = 'section_order';\r\n-\tconst COL_SECTION_DESCRIPTION = 'section_description';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_SECTION_ID,\r\n-\t\tself::COL_SECTION_NAME,\r\n-\t\tself::COL_SECTION_COURSE_ID,\r\n-\t\tself::COL_SECTION_ORDER,\r\n-\t\tself::COL_SECTION_DESCRIPTION,\r\n-\t];\r\n-\tpublic $section_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_course_id = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $search_section = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $section_name = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $section_description = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_order = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $author_id_course = 0;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $section_ids = [];\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $section_not_ids = [];\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Section_Filter' ) ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * Class LP_Section_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 4.1.4.2\n+ *\u002F\n+class LP_Section_Filter extends LP_Filter {\n+\tconst COL_SECTION_ID          = 'section_id';\n+\tconst COL_SECTION_NAME        = 'section_name';\n+\tconst COL_SECTION_COURSE_ID   = 'section_course_id';\n+\tconst COL_SECTION_ORDER       = 'section_order';\n+\tconst COL_SECTION_DESCRIPTION = 'section_description';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_SECTION_ID,\n+\t\tself::COL_SECTION_NAME,\n+\t\tself::COL_SECTION_COURSE_ID,\n+\t\tself::COL_SECTION_ORDER,\n+\t\tself::COL_SECTION_DESCRIPTION,\n+\t];\n+\tpublic $section_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_course_id = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $search_section = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $section_name = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $section_description = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_order = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $author_id_course = 0;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $section_ids = [];\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $section_not_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-section-items-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-section-items-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-section-items-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-section-items-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Section_Items_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Section_Items_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 4.1.4.2\r\n- *\u002F\r\n-class LP_Section_Items_Filter extends LP_Filter {\r\n-\tconst COL_SECTION_ITEM_ID = 'section_item_id';\r\n-\tconst COL_SECTION_ID      = 'section_id';\r\n-\tconst COL_ITEM_ID         = 'item_id';\r\n-\tconst COL_ITEM_ORDER      = 'item_order';\r\n-\tconst COL_ITEM_TYPE       = 'item_type';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_SECTION_ITEM_ID,\r\n-\t\tself::COL_SECTION_ID,\r\n-\t\tself::COL_ITEM_ID,\r\n-\t\tself::COL_ITEM_ORDER,\r\n-\t\tself::COL_ITEM_TYPE,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_order = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $search_title = '';\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $item_ids = [];\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $item_not_ids = [];\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Section_Items_Filter' ) ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * Class LP_Section_Items_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 4.1.4.2\n+ *\u002F\n+class LP_Section_Items_Filter extends LP_Filter {\n+\tconst COL_SECTION_ITEM_ID = 'section_item_id';\n+\tconst COL_SECTION_ID      = 'section_id';\n+\tconst COL_ITEM_ID         = 'item_id';\n+\tconst COL_ITEM_ORDER      = 'item_order';\n+\tconst COL_ITEM_TYPE       = 'item_type';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_SECTION_ITEM_ID,\n+\t\tself::COL_SECTION_ID,\n+\t\tself::COL_ITEM_ID,\n+\t\tself::COL_ITEM_ORDER,\n+\t\tself::COL_ITEM_TYPE,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_item_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_order = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $search_title = '';\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $item_ids = [];\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $item_not_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-session-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-session-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-session-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-session-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Section_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 4.1.4.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( class_exists( 'LP_Session_Filter' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-class LP_Session_Filter extends LP_Filter {\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [ 'session_id', 'session_key', 'session_value', 'session_expiry' ];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $field_count = 'session_id';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $session_id = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $session_key = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $session_value = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $session_expiry = '';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Section_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 4.1.4.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( class_exists( 'LP_Session_Filter' ) ) {\n+\treturn;\n+}\n+\n+class LP_Session_Filter extends LP_Filter {\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [ 'session_id', 'session_key', 'session_value', 'session_expiry' ];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $field_count = 'session_id';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $session_id = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $session_key = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $session_value = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $session_expiry = '';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Question_Filter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @version 3.2.9\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class LP_User_Filter extends LP_Filter {\r\n-\t\u002F**\r\n-\t * @var string[] List of fields can be filtered.\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\t'ID',\r\n-\t\t'user_login',\r\n-\t\t'user_nicename',\r\n-\t\t'user_email',\r\n-\t\t'display_name',\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int user id.\r\n-\t *\u002F\r\n-\tpublic $ID;\r\n-\t\u002F**\r\n-\t * @var int[] List of user ids.\r\n-\t *\u002F\r\n-\tpublic $ids = [];\r\n-\t\u002F**\r\n-\t * @var string User nice name.\r\n-\t *\u002F\r\n-\tpublic $user_nicename = '';\r\n-\t\u002F**\r\n-\t * @var string Email.\r\n-\t *\u002F\r\n-\tpublic $user_email = '';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Question_Filter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @version 3.2.9\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+class LP_User_Filter extends LP_Filter {\n+\t\u002F**\n+\t * @var string[] List of fields can be filtered.\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\t'ID',\n+\t\t'user_login',\n+\t\t'user_nicename',\n+\t\t'user_email',\n+\t\t'display_name',\n+\t];\n+\t\u002F**\n+\t * @var int user id.\n+\t *\u002F\n+\tpublic $ID;\n+\t\u002F**\n+\t * @var int[] List of user ids.\n+\t *\u002F\n+\tpublic $ids = [];\n+\t\u002F**\n+\t * @var string User nice name.\n+\t *\u002F\n+\tpublic $user_nicename = '';\n+\t\u002F**\n+\t * @var string Email.\n+\t *\u002F\n+\tpublic $user_email = '';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_User_Item_Meta_Filter\r\n- *\r\n- * Filter value on table learnpress_user_itemmeta\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-class LP_User_Item_Meta_Filter extends LP_Filter {\r\n-\tconst COL_META_ID                 = 'meta_id';\r\n-\tconst COL_LEARNPRESS_USER_ITEM_ID = 'learnpress_user_item_id';\r\n-\tconst COL_META_KEY                = 'meta_key';\r\n-\tconst COL_META_VALUE              = 'meta_value';\r\n-\tconst COL_EXTRA_VALUE             = 'extra_value';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_META_ID,\r\n-\t\tself::COL_LEARNPRESS_USER_ITEM_ID,\r\n-\t\tself::COL_META_KEY,\r\n-\t\tself::COL_META_VALUE,\r\n-\t\tself::COL_EXTRA_VALUE,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $meta_id = 0;\r\n-\t\u002F**\r\n-\t * @var int foreign key, join to table learnpress_user_items\r\n-\t *\u002F\r\n-\tpublic $learnpress_user_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var string meta key (VARCHAR 255)\r\n-\t *\u002F\r\n-\tpublic $meta_key = '';\r\n-\t\u002F**\r\n-\t * @var string meta value (VARCHAR 255)\r\n-\t *\u002F\r\n-\tpublic $meta_value = '';\r\n-\t\u002F**\r\n-\t * @var array string (LONGTEXT)\r\n-\t *\u002F\r\n-\tpublic $extra_value = '';\r\n-\t\u002F**\r\n-\t * @var string column count.\r\n-\t *\u002F\r\n-\tpublic $field_count = self::COL_META_ID;\r\n-}\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Class LP_User_Item_Meta_Filter\n+ *\n+ * Filter value on table learnpress_user_itemmeta\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.5\n+ *\u002F\n+\n+class LP_User_Item_Meta_Filter extends LP_Filter {\n+\tconst COL_META_ID                 = 'meta_id';\n+\tconst COL_LEARNPRESS_USER_ITEM_ID = 'learnpress_user_item_id';\n+\tconst COL_META_KEY                = 'meta_key';\n+\tconst COL_META_VALUE              = 'meta_value';\n+\tconst COL_EXTRA_VALUE             = 'extra_value';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_META_ID,\n+\t\tself::COL_LEARNPRESS_USER_ITEM_ID,\n+\t\tself::COL_META_KEY,\n+\t\tself::COL_META_VALUE,\n+\t\tself::COL_EXTRA_VALUE,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $meta_id = 0;\n+\t\u002F**\n+\t * @var int foreign key, join to table learnpress_user_items\n+\t *\u002F\n+\tpublic $learnpress_user_item_id = 0;\n+\t\u002F**\n+\t * @var string meta key (VARCHAR 255)\n+\t *\u002F\n+\tpublic $meta_key = '';\n+\t\u002F**\n+\t * @var string meta value (VARCHAR 255)\n+\t *\u002F\n+\tpublic $meta_value = '';\n+\t\u002F**\n+\t * @var array string (LONGTEXT)\n+\t *\u002F\n+\tpublic $extra_value = '';\n+\t\u002F**\n+\t * @var string column count.\n+\t *\u002F\n+\tpublic $field_count = self::COL_META_ID;\n+}\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-items-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-items-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002Fclass-lp-user-items-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002Fclass-lp-user-items-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Post_Type_Filter\r\n- *\r\n- * Filter post type of LP\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @since  4.0.0\r\n- * @version 1.0.2\r\n- *\u002F\r\n-class LP_User_Items_Filter extends LP_Filter {\r\n-\tconst COL_USER_ITEM_ID = 'user_item_id';\r\n-\tconst COL_USER_ID      = 'user_id';\r\n-\tconst COL_ITEM_ID      = 'item_id';\r\n-\tconst COL_START_TIME   = 'start_time';\r\n-\tconst COL_END_TIME     = 'end_time';\r\n-\tconst COL_ITEM_TYPE    = 'item_type';\r\n-\tconst COL_STATUS       = 'status';\r\n-\tconst COL_GRADUATION   = 'graduation';\r\n-\tconst COL_REF_ID       = 'ref_id';\r\n-\tconst COL_REF_TYPE     = 'ref_type';\r\n-\tconst COL_PARENT_ID    = 'parent_id';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_USER_ITEM_ID,\r\n-\t\tself::COL_USER_ID,\r\n-\t\tself::COL_ITEM_ID,\r\n-\t\tself::COL_START_TIME,\r\n-\t\tself::COL_END_TIME,\r\n-\t\tself::COL_ITEM_TYPE,\r\n-\t\tself::COL_STATUS,\r\n-\t\tself::COL_GRADUATION,\r\n-\t\tself::COL_REF_ID,\r\n-\t\tself::COL_REF_TYPE,\r\n-\t\tself::COL_PARENT_ID,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $user_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $user_id = false;\r\n-\t\u002F**\r\n-\t * @var array int\r\n-\t *\u002F\r\n-\tpublic $user_ids = [];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id = 0;\r\n-\t\u002F**\r\n-\t * @var array int\r\n-\t *\u002F\r\n-\tpublic $item_ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $status = '';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\r\n-\t * @since 4.2.8.2\r\n-\t *\u002F\r\n-\tpublic $statues = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $graduation = '';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\r\n-\t * @since 4.2.8.2\r\n-\t *\u002F\r\n-\tpublic $graduations = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ref_id = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $start_time = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $end_time = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $parent_id = 0;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $user_item_ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $field_count = 'user_item_id';\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Post_Type_Filter\n+ *\n+ * Filter post type of LP\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @since  4.0.0\n+ * @version 1.0.2\n+ *\u002F\n+class LP_User_Items_Filter extends LP_Filter {\n+\tconst COL_USER_ITEM_ID = 'user_item_id';\n+\tconst COL_USER_ID      = 'user_id';\n+\tconst COL_ITEM_ID      = 'item_id';\n+\tconst COL_START_TIME   = 'start_time';\n+\tconst COL_END_TIME     = 'end_time';\n+\tconst COL_ITEM_TYPE    = 'item_type';\n+\tconst COL_STATUS       = 'status';\n+\tconst COL_GRADUATION   = 'graduation';\n+\tconst COL_REF_ID       = 'ref_id';\n+\tconst COL_REF_TYPE     = 'ref_type';\n+\tconst COL_PARENT_ID    = 'parent_id';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_USER_ITEM_ID,\n+\t\tself::COL_USER_ID,\n+\t\tself::COL_ITEM_ID,\n+\t\tself::COL_START_TIME,\n+\t\tself::COL_END_TIME,\n+\t\tself::COL_ITEM_TYPE,\n+\t\tself::COL_STATUS,\n+\t\tself::COL_GRADUATION,\n+\t\tself::COL_REF_ID,\n+\t\tself::COL_REF_TYPE,\n+\t\tself::COL_PARENT_ID,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $user_item_id = 0;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $user_id = false;\n+\t\u002F**\n+\t * @var array int\n+\t *\u002F\n+\tpublic $user_ids = [];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id = 0;\n+\t\u002F**\n+\t * @var array int\n+\t *\u002F\n+\tpublic $item_ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $status = '';\n+\t\u002F**\n+\t * @var string[]\n+\t *\n+\t * @since 4.2.8.2\n+\t *\u002F\n+\tpublic $statues = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $graduation = '';\n+\t\u002F**\n+\t * @var string[]\n+\t *\n+\t * @since 4.2.8.2\n+\t *\u002F\n+\tpublic $graduations = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $ref_id = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $start_time = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $end_time = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $parent_id = 0;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $user_item_ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $field_count = 'user_item_id';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourse\u002FCourseJsonFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourse\u002FCourseJsonFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourse\u002FCourseJsonFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourse\u002FCourseJsonFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-namespace LearnPress\\Filters\\Course;\r\n-\r\n-use Edu_Press\\Init\\init;\r\n-use LearnPress\\Filters\\FilterBase;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LP_Course_JSON_Filter\r\n- *\r\n- * Move from LP_Course_JSON_Filter to here\r\n- * Query table learnpress_courses\r\n- *\r\n- * @version 4.3.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class CourseJsonFilter extends FilterBase {\r\n-\tconst COL_ID            = 'ID';\r\n-\tconst COL_POST_AUTHOR   = 'post_author';\r\n-\tconst COL_POST_DATE_GMT = 'post_date_gmt';\r\n-\tconst COL_POST_CONTENT  = 'post_content';\r\n-\tconst COL_POST_TITLE    = 'post_title';\r\n-\tconst COL_POST_STATUS   = 'post_status';\r\n-\tconst COL_POST_NAME     = 'post_name';\r\n-\tconst COL_MENU_ORDER    = 'menu_order';\r\n-\tconst COL_JSON          = 'json';\r\n-\tconst COL_PRICE_TO_SORT = 'price_to_sort';\r\n-\tconst COL_IS_SALE       = 'is_sale';\r\n-\tconst COL_LANG          = 'lang'; \u002F\u002F For multiple languages, wpml or polylang will store here.\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_ID,\r\n-\t\tself::COL_POST_AUTHOR,\r\n-\t\tself::COL_POST_DATE_GMT,\r\n-\t\tself::COL_POST_CONTENT,\r\n-\t\tself::COL_POST_TITLE,\r\n-\t\tself::COL_POST_STATUS,\r\n-\t\tself::COL_POST_NAME,\r\n-\t\tself::COL_MENU_ORDER,\r\n-\t\tself::COL_JSON,\r\n-\t\tself::COL_PRICE_TO_SORT,\r\n-\t\tself::COL_IS_SALE,\r\n-\t\tself::COL_LANG,\r\n-\t];\r\n-\r\n-\tpublic int $ID;\r\n-\tpublic string $post_title;\r\n-\tpublic string $post_name;\r\n-\tpublic int $post_author;\r\n-\tpublic string $lang;\r\n-\tpublic int $is_sale; \u002F\u002F 0, 1\r\n-\r\n-\t\u002F***** Fields not is columns in DB *****\u002F\r\n-\tpublic array $post_status  = [];\r\n-\tpublic array $post_authors = [];\r\n-\tpublic string $taxonomy    = 'course_category';\r\n-\tpublic array $term_ids     = [];\r\n-\tpublic array $tag_ids      = [];\r\n-\tpublic array $ids          = [];\r\n-\t\u002F**\r\n-\t * @var string[] free, paid\r\n-\t *\u002F\r\n-\tpublic array $type_price = [];\r\n-\tpublic int $is_feature; \u002F\u002F 0, 1\r\n-\tpublic array $levels;\r\n-\tpublic string $type; \u002F\u002F offline, online\r\n-\t\u002F***** End fields not is columns in DB *****\u002F\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Filters\\Course;\n+\n+use Edu_Press\\Init\\init;\n+use LearnPress\\Filters\\FilterBase;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LP_Course_JSON_Filter\n+ *\n+ * Move from LP_Course_JSON_Filter to here\n+ * Query table learnpress_courses\n+ *\n+ * @version 4.3.2.3\n+ * @version 1.0.0\n+ *\u002F\n+class CourseJsonFilter extends FilterBase {\n+\tconst COL_ID            = 'ID';\n+\tconst COL_POST_AUTHOR   = 'post_author';\n+\tconst COL_POST_DATE_GMT = 'post_date_gmt';\n+\tconst COL_POST_CONTENT  = 'post_content';\n+\tconst COL_POST_TITLE    = 'post_title';\n+\tconst COL_POST_STATUS   = 'post_status';\n+\tconst COL_POST_NAME     = 'post_name';\n+\tconst COL_MENU_ORDER    = 'menu_order';\n+\tconst COL_JSON          = 'json';\n+\tconst COL_PRICE_TO_SORT = 'price_to_sort';\n+\tconst COL_IS_SALE       = 'is_sale';\n+\tconst COL_LANG          = 'lang'; \u002F\u002F For multiple languages, wpml or polylang will store here.\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_ID,\n+\t\tself::COL_POST_AUTHOR,\n+\t\tself::COL_POST_DATE_GMT,\n+\t\tself::COL_POST_CONTENT,\n+\t\tself::COL_POST_TITLE,\n+\t\tself::COL_POST_STATUS,\n+\t\tself::COL_POST_NAME,\n+\t\tself::COL_MENU_ORDER,\n+\t\tself::COL_JSON,\n+\t\tself::COL_PRICE_TO_SORT,\n+\t\tself::COL_IS_SALE,\n+\t\tself::COL_LANG,\n+\t];\n+\n+\tpublic int $ID;\n+\tpublic string $post_title;\n+\tpublic string $post_name;\n+\tpublic int $post_author;\n+\tpublic string $lang;\n+\tpublic int $is_sale; \u002F\u002F 0, 1\n+\n+\t\u002F***** Fields not is columns in DB *****\u002F\n+\tpublic array $post_status  = [];\n+\tpublic array $post_authors = [];\n+\tpublic string $taxonomy    = 'course_category';\n+\tpublic array $term_ids     = [];\n+\tpublic array $tag_ids      = [];\n+\tpublic array $ids          = [];\n+\t\u002F**\n+\t * @var string[] free, paid\n+\t *\u002F\n+\tpublic array $type_price = [];\n+\tpublic int $is_feature; \u002F\u002F 0, 1\n+\tpublic array $levels;\n+\tpublic string $type; \u002F\u002F offline, online\n+\t\u002F***** End fields not is columns in DB *****\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourse\u002FCourseSectionItemsFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourse\u002FCourseSectionItemsFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourse\u002FCourseSectionItemsFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourse\u002FCourseSectionItemsFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters\\Course;\r\n-\r\n-use LearnPress\\Filters\\FilterBase;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class CourseSectionItemsFilter\r\n- *\r\n- * Convert from LP_Section_Items_Filter\r\n- *\r\n- * @package LearnPress\u002FFilters\u002FCourse\r\n- * @version 4.3.2\r\n- *\u002F\r\n-class CourseSectionItemsFilter extends FilterBase {\r\n-\tconst COL_SECTION_ITEM_ID = 'section_item_id';\r\n-\tconst COL_SECTION_ID      = 'section_id';\r\n-\tconst COL_ITEM_ID         = 'item_id';\r\n-\tconst COL_ITEM_ORDER      = 'item_order';\r\n-\tconst COL_ITEM_TYPE       = 'item_type';\r\n-\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_SECTION_ITEM_ID,\r\n-\t\tself::COL_SECTION_ID,\r\n-\t\tself::COL_ITEM_ID,\r\n-\t\tself::COL_ITEM_ORDER,\r\n-\t\tself::COL_ITEM_TYPE,\r\n-\t];\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_item_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_order;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $search_title;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $item_ids = [];\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $item_not_ids = [];\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters\\Course;\n+\n+use LearnPress\\Filters\\FilterBase;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class CourseSectionItemsFilter\n+ *\n+ * Convert from LP_Section_Items_Filter\n+ *\n+ * @package LearnPress\u002FFilters\u002FCourse\n+ * @version 4.3.2\n+ *\u002F\n+class CourseSectionItemsFilter extends FilterBase {\n+\tconst COL_SECTION_ITEM_ID = 'section_item_id';\n+\tconst COL_SECTION_ID      = 'section_id';\n+\tconst COL_ITEM_ID         = 'item_id';\n+\tconst COL_ITEM_ORDER      = 'item_order';\n+\tconst COL_ITEM_TYPE       = 'item_type';\n+\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_SECTION_ITEM_ID,\n+\t\tself::COL_SECTION_ID,\n+\t\tself::COL_ITEM_ID,\n+\t\tself::COL_ITEM_ORDER,\n+\t\tself::COL_ITEM_TYPE,\n+\t];\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_item_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_order;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $search_title;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $item_ids = [];\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $item_not_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourseSectionFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourseSectionFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FCourseSectionFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FCourseSectionFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,52 +1,52 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class CourseSectionFilter\r\n- *\r\n- * Refactor of LP_Section_Filter\r\n- *\r\n- * @version 4.1.4.2\r\n- *\u002F\r\n-class CourseSectionFilter extends FilterBase {\r\n-\tconst COL_SECTION_ID          = 'section_id';\r\n-\tconst COL_SECTION_NAME        = 'section_name';\r\n-\tconst COL_SECTION_COURSE_ID   = 'section_course_id';\r\n-\tconst COL_SECTION_ORDER       = 'section_order';\r\n-\tconst COL_SECTION_DESCRIPTION = 'section_description';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_SECTION_ID,\r\n-\t\tself::COL_SECTION_NAME,\r\n-\t\tself::COL_SECTION_COURSE_ID,\r\n-\t\tself::COL_SECTION_ORDER,\r\n-\t\tself::COL_SECTION_DESCRIPTION,\r\n-\t];\r\n-\r\n-\tpublic $section_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_course_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $section_name;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $section_description;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_order;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $section_ids = [];\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class CourseSectionFilter\n+ *\n+ * Refactor of LP_Section_Filter\n+ *\n+ * @version 4.1.4.2\n+ *\u002F\n+class CourseSectionFilter extends FilterBase {\n+\tconst COL_SECTION_ID          = 'section_id';\n+\tconst COL_SECTION_NAME        = 'section_name';\n+\tconst COL_SECTION_COURSE_ID   = 'section_course_id';\n+\tconst COL_SECTION_ORDER       = 'section_order';\n+\tconst COL_SECTION_DESCRIPTION = 'section_description';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_SECTION_ID,\n+\t\tself::COL_SECTION_NAME,\n+\t\tself::COL_SECTION_COURSE_ID,\n+\t\tself::COL_SECTION_ORDER,\n+\t\tself::COL_SECTION_DESCRIPTION,\n+\t];\n+\n+\tpublic $section_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_course_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $section_name;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $section_description;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_order;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $section_ids = [];\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FFilterBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FFilterBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FFilterBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FFilterBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,124 +1,124 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class FilterBase\r\n- *\r\n- * @since 4.2.9.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class FilterBase {\r\n-\tconst ORDER_DESC = 'DESC';\r\n-\tconst ORDER_ASC  = 'ASC';\r\n-\t\u002F**\r\n-\t * @var int set -1 for no limit\r\n-\t *\u002F\r\n-\tpublic $limit = 10;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $max_limit = 100;\r\n-\t\u002F**\r\n-\t * @var array query ON\r\n-\t *\u002F\r\n-\tpublic $sort_by = array();\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $group_by = '';\r\n-\t\u002F**\r\n-\t * @var string field name for order, EX ID\r\n-\t *\u002F\r\n-\tpublic $order_by = '';\r\n-\t\u002F**\r\n-\t * @var string DESC|ASC\r\n-\t *\u002F\r\n-\tpublic $order = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $key_word = '';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $page = 1;\r\n-\t\u002F**\r\n-\t * Name table query Or Query nested\r\n-\t * EX: FROM 'wp_posts'\r\n-\t * OR: FROM (SELECT * FROM 'wp_posts') AS P\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $collection = '';\r\n-\t\u002F**\r\n-\t * Alias collection\r\n-\t * EX: FROM 'wp_posts' AS p\r\n-\t * \"p\" is alias\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $collection_alias = '';\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $fields = array();\r\n-\t\u002F**\r\n-\t * For get only columns set on it\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $only_fields = array();\r\n-\t\u002F**\r\n-\t * Exclude columns set on fields\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $exclude_fields = array();\r\n-\t\u002F**\r\n-\t * @var array for purpose run query update.\r\n-\t *\u002F\r\n-\tpublic $set = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $where = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $join = array();\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $union = array();\r\n-\t\u002F**\r\n-\t * @var bool set true to run query count\r\n-\t *\u002F\r\n-\tpublic $run_query_count = true;\r\n-\t\u002F**\r\n-\t * @var bool set true to return total_rows\r\n-\t *\u002F\r\n-\tpublic $query_count = false;\r\n-\t\u002F**\r\n-\t * @var string Ex: ID, for query: COUNT(ID)\r\n-\t *\u002F\r\n-\tpublic $field_count = 'ID';\r\n-\t\u002F**\r\n-\t * @var bool set true to return string query\r\n-\t *\u002F\r\n-\tpublic $return_string_query = false;\r\n-\t\u002F**\r\n-\t * @var false set true to return string query to debug\r\n-\t *\u002F\r\n-\tpublic $debug_string_query = false;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $query_type = 'get_results';\r\n-\t\u002F**\r\n-\t * @var object stdclass\r\n-\t *\u002F\r\n-\tpublic $filter_extra;\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class FilterBase\n+ *\n+ * @since 4.2.9.3\n+ * @version 1.0.0\n+ *\u002F\n+class FilterBase {\n+\tconst ORDER_DESC = 'DESC';\n+\tconst ORDER_ASC  = 'ASC';\n+\t\u002F**\n+\t * @var int set -1 for no limit\n+\t *\u002F\n+\tpublic $limit = 10;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $max_limit = 100;\n+\t\u002F**\n+\t * @var array query ON\n+\t *\u002F\n+\tpublic $sort_by = array();\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $group_by = '';\n+\t\u002F**\n+\t * @var string field name for order, EX ID\n+\t *\u002F\n+\tpublic $order_by = '';\n+\t\u002F**\n+\t * @var string DESC|ASC\n+\t *\u002F\n+\tpublic $order = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $key_word = '';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $page = 1;\n+\t\u002F**\n+\t * Name table query Or Query nested\n+\t * EX: FROM 'wp_posts'\n+\t * OR: FROM (SELECT * FROM 'wp_posts') AS P\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $collection = '';\n+\t\u002F**\n+\t * Alias collection\n+\t * EX: FROM 'wp_posts' AS p\n+\t * \"p\" is alias\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $collection_alias = '';\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $fields = array();\n+\t\u002F**\n+\t * For get only columns set on it\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $only_fields = array();\n+\t\u002F**\n+\t * Exclude columns set on fields\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $exclude_fields = array();\n+\t\u002F**\n+\t * @var array for purpose run query update.\n+\t *\u002F\n+\tpublic $set = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $where = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $join = array();\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $union = array();\n+\t\u002F**\n+\t * @var bool set true to run query count\n+\t *\u002F\n+\tpublic $run_query_count = true;\n+\t\u002F**\n+\t * @var bool set true to return total_rows\n+\t *\u002F\n+\tpublic $query_count = false;\n+\t\u002F**\n+\t * @var string Ex: ID, for query: COUNT(ID)\n+\t *\u002F\n+\tpublic $field_count = 'ID';\n+\t\u002F**\n+\t * @var bool set true to return string query\n+\t *\u002F\n+\tpublic $return_string_query = false;\n+\t\u002F**\n+\t * @var false set true to return string query to debug\n+\t *\u002F\n+\tpublic $debug_string_query = false;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $query_type = 'get_results';\n+\t\u002F**\n+\t * @var object stdclass\n+\t *\u002F\n+\tpublic $filter_extra;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FOrder\u002FOrderItemsFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FOrder\u002FOrderItemsFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FOrder\u002FOrderItemsFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FOrder\u002FOrderItemsFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters\\Order;\r\n-\r\n-use LearnPress\\Filters\\FilterBase;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LPOrderItemsDB\r\n- *\r\n- * @author tungnx\r\n- * @since 4.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class OrderItemsFilter extends FilterBase {\r\n-\tconst COL_ORDER_ITEM_ID = 'order_item_id';\r\n-\tconst COL_ORDER_ID      = 'order_id';\r\n-\tconst COL_ITEM_ID       = 'item_id';\r\n-\tconst COL_ITEM_NAME     = 'order_item_name';\r\n-\tconst COL_ITEM_TYPE     = 'item_type';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_ORDER_ITEM_ID,\r\n-\t\tself::COL_ORDER_ID,\r\n-\t\tself::COL_ITEM_ID,\r\n-\t\tself::COL_ITEM_NAME,\r\n-\t\tself::COL_ITEM_TYPE,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $order_item_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $order_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type;\r\n-\tpublic $field_count = self::COL_ORDER_ITEM_ID;\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters\\Order;\n+\n+use LearnPress\\Filters\\FilterBase;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LPOrderItemsDB\n+ *\n+ * @author tungnx\n+ * @since 4.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class OrderItemsFilter extends FilterBase {\n+\tconst COL_ORDER_ITEM_ID = 'order_item_id';\n+\tconst COL_ORDER_ID      = 'order_id';\n+\tconst COL_ITEM_ID       = 'item_id';\n+\tconst COL_ITEM_NAME     = 'order_item_name';\n+\tconst COL_ITEM_TYPE     = 'item_type';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_ORDER_ITEM_ID,\n+\t\tself::COL_ORDER_ID,\n+\t\tself::COL_ITEM_ID,\n+\t\tself::COL_ITEM_NAME,\n+\t\tself::COL_ITEM_TYPE,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $order_item_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $order_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type;\n+\tpublic $field_count = self::COL_ORDER_ITEM_ID;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FOrderPostFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FOrderPostFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FOrderPostFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FOrderPostFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class OrderPostFilter\r\n- *\r\n- * Filter post type LP Order\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.9.3\r\n- *\u002F\r\n-class OrderPostFilter extends PostFilter {\r\n-\tpublic $post_type = 'lp_order';\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class OrderPostFilter\n+ *\n+ * Filter post type LP Order\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.9.3\n+ *\u002F\n+class OrderPostFilter extends PostFilter {\n+\tpublic $post_type = 'lp_order';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FPostFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FPostFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FPostFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FPostFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class PostFilter\r\n- *\r\n- * Filter post type of LP\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.9.3\r\n- *\u002F\r\n-class PostFilter extends FilterBase {\r\n-\tconst COL_ID                    = 'ID';\r\n-\tconst COL_POST_AUTHOR           = 'post_author';\r\n-\tconst COL_POST_DATE             = 'post_date';\r\n-\tconst COL_POST_DATE_GMT         = 'post_date_gmt';\r\n-\tconst COL_POST_CONTENT          = 'post_content';\r\n-\tconst COL_POST_TITLE            = 'post_title';\r\n-\tconst COL_POST_EXCERPT          = 'post_excerpt';\r\n-\tconst COL_POST_STATUS           = 'post_status';\r\n-\tconst COL_COMMENT_STATUS        = 'comment_status';\r\n-\tconst COL_PING_STATUS           = 'ping_status';\r\n-\tconst COL_POST_PASSWORD         = 'post_password';\r\n-\tconst COL_POST_NAME             = 'post_name';\r\n-\tconst COL_TO_PING               = 'to_ping';\r\n-\tconst COL_PINGED                = 'pinged';\r\n-\tconst COL_POST_MODIFIED         = 'post_modified';\r\n-\tconst COL_POST_MODIFIED_GMT     = 'post_modified_gmt';\r\n-\tconst COL_POST_CONTENT_FILTERED = 'post_content_filtered';\r\n-\tconst COL_POST_PARENT           = 'post_parent';\r\n-\tconst COL_GUID                  = 'guid';\r\n-\tconst COL_MENU_ORDER            = 'menu_order';\r\n-\tconst COL_POST_TYPE             = 'post_type';\r\n-\tconst COL_POST_MIME_TYPE        = 'post_mime_type';\r\n-\tconst COL_COMMENT_COUNT         = 'comment_count';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_ID,\r\n-\t\tself::COL_POST_AUTHOR,\r\n-\t\tself::COL_POST_DATE,\r\n-\t\tself::COL_POST_DATE_GMT,\r\n-\t\tself::COL_POST_CONTENT,\r\n-\t\tself::COL_POST_TITLE,\r\n-\t\tself::COL_POST_EXCERPT,\r\n-\t\tself::COL_POST_STATUS,\r\n-\t\tself::COL_COMMENT_STATUS,\r\n-\t\tself::COL_PING_STATUS,\r\n-\t\tself::COL_POST_PASSWORD,\r\n-\t\tself::COL_POST_NAME,\r\n-\t\tself::COL_TO_PING,\r\n-\t\tself::COL_PINGED,\r\n-\t\tself::COL_POST_MODIFIED,\r\n-\t\tself::COL_POST_MODIFIED_GMT,\r\n-\t\tself::COL_POST_CONTENT_FILTERED,\r\n-\t\tself::COL_POST_PARENT,\r\n-\t\tself::COL_GUID,\r\n-\t\tself::COL_MENU_ORDER,\r\n-\t\tself::COL_POST_TYPE,\r\n-\t\tself::COL_POST_MIME_TYPE,\r\n-\t\tself::COL_COMMENT_COUNT,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_type = 'post';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_title;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $post_name;\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic array $post_status = [];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $post_author;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $post_authors = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $term_ids = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $tag_ids = [];\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tpublic $post_ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $taxonomy;\r\n-\r\n-\tpublic function __construct() {}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class PostFilter\n+ *\n+ * Filter post type of LP\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.9.3\n+ *\u002F\n+class PostFilter extends FilterBase {\n+\tconst COL_ID                    = 'ID';\n+\tconst COL_POST_AUTHOR           = 'post_author';\n+\tconst COL_POST_DATE             = 'post_date';\n+\tconst COL_POST_DATE_GMT         = 'post_date_gmt';\n+\tconst COL_POST_CONTENT          = 'post_content';\n+\tconst COL_POST_TITLE            = 'post_title';\n+\tconst COL_POST_EXCERPT          = 'post_excerpt';\n+\tconst COL_POST_STATUS           = 'post_status';\n+\tconst COL_COMMENT_STATUS        = 'comment_status';\n+\tconst COL_PING_STATUS           = 'ping_status';\n+\tconst COL_POST_PASSWORD         = 'post_password';\n+\tconst COL_POST_NAME             = 'post_name';\n+\tconst COL_TO_PING               = 'to_ping';\n+\tconst COL_PINGED                = 'pinged';\n+\tconst COL_POST_MODIFIED         = 'post_modified';\n+\tconst COL_POST_MODIFIED_GMT     = 'post_modified_gmt';\n+\tconst COL_POST_CONTENT_FILTERED = 'post_content_filtered';\n+\tconst COL_POST_PARENT           = 'post_parent';\n+\tconst COL_GUID                  = 'guid';\n+\tconst COL_MENU_ORDER            = 'menu_order';\n+\tconst COL_POST_TYPE             = 'post_type';\n+\tconst COL_POST_MIME_TYPE        = 'post_mime_type';\n+\tconst COL_COMMENT_COUNT         = 'comment_count';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_ID,\n+\t\tself::COL_POST_AUTHOR,\n+\t\tself::COL_POST_DATE,\n+\t\tself::COL_POST_DATE_GMT,\n+\t\tself::COL_POST_CONTENT,\n+\t\tself::COL_POST_TITLE,\n+\t\tself::COL_POST_EXCERPT,\n+\t\tself::COL_POST_STATUS,\n+\t\tself::COL_COMMENT_STATUS,\n+\t\tself::COL_PING_STATUS,\n+\t\tself::COL_POST_PASSWORD,\n+\t\tself::COL_POST_NAME,\n+\t\tself::COL_TO_PING,\n+\t\tself::COL_PINGED,\n+\t\tself::COL_POST_MODIFIED,\n+\t\tself::COL_POST_MODIFIED_GMT,\n+\t\tself::COL_POST_CONTENT_FILTERED,\n+\t\tself::COL_POST_PARENT,\n+\t\tself::COL_GUID,\n+\t\tself::COL_MENU_ORDER,\n+\t\tself::COL_POST_TYPE,\n+\t\tself::COL_POST_MIME_TYPE,\n+\t\tself::COL_COMMENT_COUNT,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_type = 'post';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_title;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $post_name;\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic array $post_status = [];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $post_author;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $post_authors = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $term_ids = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $tag_ids = [];\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tpublic $post_ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $taxonomy;\n+\n+\tpublic function __construct() {}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FQuestionAnswersFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FQuestionAnswersFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FQuestionAnswersFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FQuestionAnswersFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-use LP_Filter;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class QuestionAnswersFilter\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\u002FFilters\r\n- * @instead of LP_Question_Answers_Filter\r\n- * @since  4.2.9\r\n- * @author tungnx\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class QuestionAnswersFilter extends FilterBase {\r\n-\tconst COL_QUESTION_ANSWER_ID = 'question_answer_id';\r\n-\tconst COL_QUESTION_ID        = 'question_id';\r\n-\tconst COL_TITLE              = 'title';\r\n-\tconst COL_VALUE              = 'value';\r\n-\tconst COL_ORDER              = 'order';\r\n-\tconst COL_IS_TRUE            = 'is_true';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_QUESTION_ANSWER_ID,\r\n-\t\tself::COL_QUESTION_ID,\r\n-\t\tself::COL_TITLE,\r\n-\t\tself::COL_VALUE,\r\n-\t\tself::COL_ORDER,\r\n-\t\tself::COL_IS_TRUE,\r\n-\t];\r\n-\r\n-\tpublic $field_count = 'question_answer_id';\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_answer_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $title;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $value;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $is_true;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $question_answer_ids = [];\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $question_ids = [];\r\n-\tpublic $order_by     = '`order`';\r\n-\tpublic $order        = 'ASC';\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+use LP_Filter;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class QuestionAnswersFilter\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\u002FFilters\n+ * @instead of LP_Question_Answers_Filter\n+ * @since  4.2.9\n+ * @author tungnx\n+ * @version 1.0.1\n+ *\u002F\n+class QuestionAnswersFilter extends FilterBase {\n+\tconst COL_QUESTION_ANSWER_ID = 'question_answer_id';\n+\tconst COL_QUESTION_ID        = 'question_id';\n+\tconst COL_TITLE              = 'title';\n+\tconst COL_VALUE              = 'value';\n+\tconst COL_ORDER              = 'order';\n+\tconst COL_IS_TRUE            = 'is_true';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_QUESTION_ANSWER_ID,\n+\t\tself::COL_QUESTION_ID,\n+\t\tself::COL_TITLE,\n+\t\tself::COL_VALUE,\n+\t\tself::COL_ORDER,\n+\t\tself::COL_IS_TRUE,\n+\t];\n+\n+\tpublic $field_count = 'question_answer_id';\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_answer_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $title;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $value;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $is_true;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $question_answer_ids = [];\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $question_ids = [];\n+\tpublic $order_by     = '`order`';\n+\tpublic $order        = 'ASC';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FQuizQuestionsFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FQuizQuestionsFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FQuizQuestionsFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FQuizQuestionsFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-namespace LearnPress\\Filters;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class QuizQuestionsFilter\r\n- *\r\n- * @author  ThimPress\r\n- * @since  4.2.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class QuizQuestionsFilter extends FilterBase {\r\n-\tconst COL_QUIZ_QUESTION_ID = 'quiz_question_id';\r\n-\tconst COL_QUIZ_ID          = 'quiz_id';\r\n-\tconst COL_QUESTION_ID      = 'question_id';\r\n-\tconst COL_QUESTION_ORDER   = 'question_order';\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\u002F\r\n-\tpublic $all_fields = [\r\n-\t\tself::COL_QUIZ_QUESTION_ID,\r\n-\t\tself::COL_QUIZ_ID,\r\n-\t\tself::COL_QUESTION_ID,\r\n-\t\tself::COL_QUESTION_ORDER,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $quiz_question_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $quiz_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_order;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $question_ids = array();\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $quiz_ids = array();\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Filters;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class QuizQuestionsFilter\n+ *\n+ * @author  ThimPress\n+ * @since  4.2.9\n+ * @version 1.0.0\n+ *\u002F\n+class QuizQuestionsFilter extends FilterBase {\n+\tconst COL_QUIZ_QUESTION_ID = 'quiz_question_id';\n+\tconst COL_QUIZ_ID          = 'quiz_id';\n+\tconst COL_QUESTION_ID      = 'question_id';\n+\tconst COL_QUESTION_ORDER   = 'question_order';\n+\t\u002F**\n+\t * @var string[]\n+\t *\u002F\n+\tpublic $all_fields = [\n+\t\tself::COL_QUIZ_QUESTION_ID,\n+\t\tself::COL_QUIZ_ID,\n+\t\tself::COL_QUESTION_ID,\n+\t\tself::COL_QUESTION_ORDER,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $quiz_question_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $quiz_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_order;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $question_ids = array();\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $quiz_ids = array();\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters: UserFilter.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FUserItemsFilter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FUserItemsFilter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FFilters\u002FUserItemsFilter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FFilters\u002FUserItemsFilter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,113 +1,113 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Filters;\r\n-\r\n-\u002F**\r\n- * Class UserItemsFilter\r\n- *\r\n- * Filter query for learnpress_user_items table\r\n- *\r\n- * @since  4.2.9.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class UserItemsFilter extends FilterBase {\r\n-\tconst COL_USER_ITEM_ID = 'user_item_id';\r\n-\tconst COL_USER_ID      = 'user_id';\r\n-\tconst COL_ITEM_ID      = 'item_id';\r\n-\tconst COL_START_TIME   = 'start_time';\r\n-\tconst COL_END_TIME     = 'end_time';\r\n-\tconst COL_ITEM_TYPE    = 'item_type';\r\n-\tconst COL_STATUS       = 'status';\r\n-\tconst COL_GRADUATION   = 'graduation';\r\n-\tconst COL_REF_ID       = 'ref_id';\r\n-\tconst COL_REF_TYPE     = 'ref_type';\r\n-\tconst COL_PARENT_ID    = 'parent_id';\r\n-\t\u002F**\r\n-\t * @var string[] all fields of table\r\n-\t *\u002F\r\n-\tpublic array $all_fields = [\r\n-\t\tself::COL_USER_ITEM_ID,\r\n-\t\tself::COL_USER_ID,\r\n-\t\tself::COL_ITEM_ID,\r\n-\t\tself::COL_START_TIME,\r\n-\t\tself::COL_END_TIME,\r\n-\t\tself::COL_ITEM_TYPE,\r\n-\t\tself::COL_STATUS,\r\n-\t\tself::COL_GRADUATION,\r\n-\t\tself::COL_REF_ID,\r\n-\t\tself::COL_REF_TYPE,\r\n-\t\tself::COL_PARENT_ID,\r\n-\t];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $user_item_id;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $user_id;\r\n-\t\u002F**\r\n-\t * @var array int\r\n-\t *\u002F\r\n-\tpublic $user_ids = [];\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id;\r\n-\t\u002F**\r\n-\t * @var array int\r\n-\t *\u002F\r\n-\tpublic $item_ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $status;\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\r\n-\t * @since 4.2.8.2\r\n-\t *\u002F\r\n-\tpublic $statues = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $graduation;\r\n-\t\u002F**\r\n-\t * @var string[]\r\n-\t *\r\n-\t * @since 4.2.8.2\r\n-\t *\u002F\r\n-\tpublic $graduations = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ref_id;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $start_time;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $end_time;\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $parent_id;\r\n-\t\u002F**\r\n-\t * @var int[]\r\n-\t *\u002F\r\n-\tpublic $user_item_ids = [];\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $field_count = self::COL_USER_ITEM_ID;\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Filters;\n+\n+\u002F**\n+ * Class UserItemsFilter\n+ *\n+ * Filter query for learnpress_user_items table\n+ *\n+ * @since  4.2.9.3\n+ * @version 1.0.0\n+ *\u002F\n+class UserItemsFilter extends FilterBase {\n+\tconst COL_USER_ITEM_ID = 'user_item_id';\n+\tconst COL_USER_ID      = 'user_id';\n+\tconst COL_ITEM_ID      = 'item_id';\n+\tconst COL_START_TIME   = 'start_time';\n+\tconst COL_END_TIME     = 'end_time';\n+\tconst COL_ITEM_TYPE    = 'item_type';\n+\tconst COL_STATUS       = 'status';\n+\tconst COL_GRADUATION   = 'graduation';\n+\tconst COL_REF_ID       = 'ref_id';\n+\tconst COL_REF_TYPE     = 'ref_type';\n+\tconst COL_PARENT_ID    = 'parent_id';\n+\t\u002F**\n+\t * @var string[] all fields of table\n+\t *\u002F\n+\tpublic array $all_fields = [\n+\t\tself::COL_USER_ITEM_ID,\n+\t\tself::COL_USER_ID,\n+\t\tself::COL_ITEM_ID,\n+\t\tself::COL_START_TIME,\n+\t\tself::COL_END_TIME,\n+\t\tself::COL_ITEM_TYPE,\n+\t\tself::COL_STATUS,\n+\t\tself::COL_GRADUATION,\n+\t\tself::COL_REF_ID,\n+\t\tself::COL_REF_TYPE,\n+\t\tself::COL_PARENT_ID,\n+\t];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $user_item_id;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $user_id;\n+\t\u002F**\n+\t * @var array int\n+\t *\u002F\n+\tpublic $user_ids = [];\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id;\n+\t\u002F**\n+\t * @var array int\n+\t *\u002F\n+\tpublic $item_ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $status;\n+\t\u002F**\n+\t * @var string[]\n+\t *\n+\t * @since 4.2.8.2\n+\t *\u002F\n+\tpublic $statues = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $graduation;\n+\t\u002F**\n+\t * @var string[]\n+\t *\n+\t * @since 4.2.8.2\n+\t *\u002F\n+\tpublic $graduations = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $ref_id;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $start_time;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $end_time;\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tpublic $parent_id;\n+\t\u002F**\n+\t * @var int[]\n+\t *\u002F\n+\tpublic $user_item_ids = [];\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $field_count = self::COL_USER_ITEM_ID;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fclass-lp-gateway-abstract.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fclass-lp-gateway-abstract.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fclass-lp-gateway-abstract.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fclass-lp-gateway-abstract.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,258 +1,258 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Gateway_Abstract\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-class LP_Gateway_Abstract extends LP_Abstract_Settings {\r\n-\t\u002F**\r\n-\t * @var null|string\r\n-\t *\u002F\r\n-\tpublic $id = null;\r\n-\t\u002F**\r\n-\t * @var LP_Settings\r\n-\t *\u002F\r\n-\tprotected $settings;\r\n-\t\u002F**\r\n-\t * Name of gateway will be displayed in admin settings.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $method_title = '';\r\n-\r\n-\t\u002F**\r\n-\t * Description of gateway will be displayed in admin settings.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $method_description = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $order_button_text = '';\r\n-\r\n-\t\u002F**\r\n-\t * This payment is turn on or off?\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $enabled = 'no';\r\n-\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tpublic $title = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tpublic $description = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $icon = '';\r\n-\t\u002F**\r\n-\t * @var bool set default select when checkout\r\n-\t *\u002F\r\n-\tpublic $is_selected = false;\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t\u002F*if ( ! $this->admin_name ) {\r\n-\t\t\t$this->admin_name = preg_replace( '!LP_Gateway_!', '', get_class( $this ) );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( ! $this->id ) {\r\n-\t\t\t$this->id = sanitize_title( $this->title );\r\n-\t\t}\r\n-\r\n-\t\t$this->settings = LP_Settings::instance()->get_group( $this->id );\r\n-\t\t$this->enabled  = $this->settings->get( 'enable', 'no' );\r\n-\r\n-\t\tadd_filter( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $this->id, array( $this, 'get_settings' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return unique Id of payment\r\n-\t *\r\n-\t * @return null|string\r\n-\t *\u002F\r\n-\tpublic function get_id() {\r\n-\t\treturn $this->id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return method title.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_method_title() {\r\n-\t\treturn $this->method_title;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return method description.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_method_description() {\r\n-\t\treturn $this->method_description;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return method title displays in front end.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_title() {\r\n-\t\treturn apply_filters( 'learn_press_gateway_title', $this->title, $this->id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return method description displays in front end.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_description() {\r\n-\t\treturn apply_filters( 'learn_press_gateway_description', $this->description, $this->id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Payment is turn on or off?\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_enabled() {\r\n-\t\treturn $this->enabled === 'yes';\r\n-\t}\r\n-\r\n-\tpublic function enable( $status ) {\r\n-\t\tif ( is_bool( $status ) ) {\r\n-\t\t\t$this->enabled = $status;\r\n-\r\n-\t\t\t$options = get_option( 'learn_press_' . $this->get_id() );\r\n-\r\n-\t\t\tif ( ! $options ) {\r\n-\t\t\t\t$options = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$options['enable'] = $status ? 'yes' : 'no';\r\n-\t\t\tupdate_option( 'learn_press_' . $this->get_id(), $options );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->enabled == 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process the payment.\r\n-\t *\r\n-\t * @param $order_id\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function process_payment( $order_id ) {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the icon of payment displays in front end.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_icon() {\r\n-\t\t$size = apply_filters( 'learn-press\u002Fdefault-payment-gateway-icon-sizes', null ); \u002F\u002F array( 52, 32 ) is low quatity.\r\n-\r\n-\t\tif ( $size ) {\r\n-\t\t\t$icon_size = sprintf( 'width: %dpx; height: %dpx', $size[0], $size[1] );\r\n-\t\t} else {\r\n-\t\t\t$icon_size = '';\r\n-\t\t}\r\n-\r\n-\t\t$icon = $this->icon ? '\u003Cimg class=\"gateway-icon\" src=\"' . $this->icon . '\" alt=\"' . esc_attr( $this->get_title() ) . '\" style=\"' . $icon_size . '\" \u002F>' : '';\r\n-\r\n-\t\treturn apply_filters( 'learn_press_gateway_icon', $icon, $this->id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return the form where user can input payment details or anything else.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_payment_form() {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validate required field before submitting fields.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function validate_fields() {\r\n-\t\t\u002F\u002F TODO: validate fields if needed\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_return_url( $order = null ) {\r\n-\t\tif ( $order ) {\r\n-\t\t\t$return_url = $order->get_checkout_order_received_url();\r\n-\t\t} else {\r\n-\t\t\t$return_url = learn_press_get_endpoint_url( 'lp-order-received', '', learn_press_get_page_link( 'checkout' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn_press_get_return_url', $return_url, $order );\r\n-\t}\r\n-\r\n-\tpublic function __get( $prop ) {\r\n-\t\tswitch ( $prop ) {\r\n-\t\t\tcase 'method_title':\r\n-\t\t\tcase 'method_description':\r\n-\t\t\tcase 'id':\r\n-\t\t\t\t_deprecated_argument( $prop, '3.0.0', sprintf( __( '%s has been deprecated. Please use % instead of.', 'learnpress' ), $prop, \"get_{$prop}\" ) );\r\n-\r\n-\t\t\t\treturn call_user_func( array( $this, \"get_{$prop}\" ) );\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn property_exists( $this, $prop ) ? $this->{$prop} : false;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * return bool\r\n-\t * @deprecated 4.2.3.5\r\n-\t *\u002F\r\n-\tpublic function is_display() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\t$display = apply_filters( 'learn-press\u002Fpayment-method\u002Fdisplay', true, $this->id );\r\n-\t\t$display = apply_filters( 'learn-press\u002Fpayment-method-' . $this->id . '\u002Fdisplay', $display );\r\n-\r\n-\t\t\u002F\u002F @deprecated\r\n-\t\t$display = apply_filters( 'learn_press_display_payment_method', $display, $this->id );\r\n-\r\n-\t\treturn $display;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function __toString() {\r\n-\t\treturn $this->method_title;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Gateway_Abstract\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+class LP_Gateway_Abstract extends LP_Abstract_Settings {\n+\t\u002F**\n+\t * @var null|string\n+\t *\u002F\n+\tpublic $id = null;\n+\t\u002F**\n+\t * @var LP_Settings\n+\t *\u002F\n+\tprotected $settings;\n+\t\u002F**\n+\t * Name of gateway will be displayed in admin settings.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $method_title = '';\n+\n+\t\u002F**\n+\t * Description of gateway will be displayed in admin settings.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tprotected $method_description = '';\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $order_button_text = '';\n+\n+\t\u002F**\n+\t * This payment is turn on or off?\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $enabled = 'no';\n+\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tpublic $title = null;\n+\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tpublic $description = null;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $icon = '';\n+\t\u002F**\n+\t * @var bool set default select when checkout\n+\t *\u002F\n+\tpublic $is_selected = false;\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t\u002F*if ( ! $this->admin_name ) {\n+\t\t\t$this->admin_name = preg_replace( '!LP_Gateway_!', '', get_class( $this ) );\n+\t\t}*\u002F\n+\n+\t\tif ( ! $this->id ) {\n+\t\t\t$this->id = sanitize_title( $this->title );\n+\t\t}\n+\n+\t\t$this->settings = LP_Settings::instance()->get_group( $this->id );\n+\t\t$this->enabled  = $this->settings->get( 'enable', 'no' );\n+\n+\t\tadd_filter( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $this->id, array( $this, 'get_settings' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Return unique Id of payment\n+\t *\n+\t * @return null|string\n+\t *\u002F\n+\tpublic function get_id() {\n+\t\treturn $this->id;\n+\t}\n+\n+\t\u002F**\n+\t * Return method title.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_method_title() {\n+\t\treturn $this->method_title;\n+\t}\n+\n+\t\u002F**\n+\t * Return method description.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_method_description() {\n+\t\treturn $this->method_description;\n+\t}\n+\n+\t\u002F**\n+\t * Return method title displays in front end.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_title() {\n+\t\treturn apply_filters( 'learn_press_gateway_title', $this->title, $this->id );\n+\t}\n+\n+\t\u002F**\n+\t * Return method description displays in front end.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_description() {\n+\t\treturn apply_filters( 'learn_press_gateway_description', $this->description, $this->id );\n+\t}\n+\n+\t\u002F**\n+\t * Payment is turn on or off?\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_enabled() {\n+\t\treturn $this->enabled === 'yes';\n+\t}\n+\n+\tpublic function enable( $status ) {\n+\t\tif ( is_bool( $status ) ) {\n+\t\t\t$this->enabled = $status;\n+\n+\t\t\t$options = get_option( 'learn_press_' . $this->get_id() );\n+\n+\t\t\tif ( ! $options ) {\n+\t\t\t\t$options = array();\n+\t\t\t}\n+\n+\t\t\t$options['enable'] = $status ? 'yes' : 'no';\n+\t\t\tupdate_option( 'learn_press_' . $this->get_id(), $options );\n+\t\t}\n+\n+\t\treturn $this->enabled == 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Process the payment.\n+\t *\n+\t * @param $order_id\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function process_payment( $order_id ) {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * Get the icon of payment displays in front end.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_icon() {\n+\t\t$size = apply_filters( 'learn-press\u002Fdefault-payment-gateway-icon-sizes', null ); \u002F\u002F array( 52, 32 ) is low quatity.\n+\n+\t\tif ( $size ) {\n+\t\t\t$icon_size = sprintf( 'width: %dpx; height: %dpx', $size[0], $size[1] );\n+\t\t} else {\n+\t\t\t$icon_size = '';\n+\t\t}\n+\n+\t\t$icon = $this->icon ? '\u003Cimg class=\"gateway-icon\" src=\"' . $this->icon . '\" alt=\"' . esc_attr( $this->get_title() ) . '\" style=\"' . $icon_size . '\" \u002F>' : '';\n+\n+\t\treturn apply_filters( 'learn_press_gateway_icon', $icon, $this->id );\n+\t}\n+\n+\t\u002F**\n+\t * Return the form where user can input payment details or anything else.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_payment_form() {\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Validate required field before submitting fields.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function validate_fields() {\n+\t\t\u002F\u002F TODO: validate fields if needed\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Order $order\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_return_url( $order = null ) {\n+\t\tif ( $order ) {\n+\t\t\t$return_url = $order->get_checkout_order_received_url();\n+\t\t} else {\n+\t\t\t$return_url = learn_press_get_endpoint_url( 'lp-order-received', '', learn_press_get_page_link( 'checkout' ) );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn_press_get_return_url', $return_url, $order );\n+\t}\n+\n+\tpublic function __get( $prop ) {\n+\t\tswitch ( $prop ) {\n+\t\t\tcase 'method_title':\n+\t\t\tcase 'method_description':\n+\t\t\tcase 'id':\n+\t\t\t\t_deprecated_argument( $prop, '3.0.0', sprintf( __( '%s has been deprecated. Please use % instead of.', 'learnpress' ), $prop, \"get_{$prop}\" ) );\n+\n+\t\t\t\treturn call_user_func( array( $this, \"get_{$prop}\" ) );\n+\t\t\tdefault:\n+\t\t\t\treturn property_exists( $this, $prop ) ? $this->{$prop} : false;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @since 3.0.0\n+\t *\n+\t * return bool\n+\t * @deprecated 4.2.3.5\n+\t *\u002F\n+\tpublic function is_display() {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\t$display = apply_filters( 'learn-press\u002Fpayment-method\u002Fdisplay', true, $this->id );\n+\t\t$display = apply_filters( 'learn-press\u002Fpayment-method-' . $this->id . '\u002Fdisplay', $display );\n+\n+\t\t\u002F\u002F @deprecated\n+\t\t$display = apply_filters( 'learn_press_display_payment_method', $display, $this->id );\n+\n+\t\treturn $display;\n+\t}\n+\n+\t\u002F**\n+\t * @return string\n+\t *\u002F\n+\tpublic function __toString() {\n+\t\treturn $this->method_title;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fclass-lp-gateways.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fclass-lp-gateways.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fclass-lp-gateways.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fclass-lp-gateways.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,183 +1,183 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Gateways\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Gateways\r\n- *\u002F\r\n-class LP_Gateways {\r\n-\r\n-\t\u002F**\r\n-\t * @var null\r\n-\t *\u002F\r\n-\tprotected static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $payment_gateways = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Gateways constructor.\r\n-\t *\u002F\r\n-\tprivate function __construct() {\r\n-\t\t$this->init();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Init gateways\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tif ( ! $this->payment_gateways ) {\r\n-\t\t\t$gateways = array(\r\n-\t\t\t\t'paypal'          => 'LP_Gateway_Paypal',\r\n-\t\t\t\t'offline-payment' => 'LP_Gateway_Offline_Payment',\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F @deprecated 4.2.3.5\r\n-\t\t\t$gateways = apply_filters( 'learn_press_payment_method', $gateways );\r\n-\r\n-\t\t\t\u002F\u002F 3.0.0\r\n-\t\t\t$gateways = apply_filters( 'learn-press\u002Fpayment-methods', $gateways );\r\n-\t\t\tif ( $gateways ) {\r\n-\t\t\t\tforeach ( $gateways as $k => $gateway ) {\r\n-\t\t\t\t\tif ( is_string( $gateway ) && class_exists( $gateway ) ) {\r\n-\t\t\t\t\t\t$gateway = new $gateway();\r\n-\r\n-\t\t\t\t\t\t$this->payment_gateways[ $k ] = $gateway;\r\n-\t\t\t\t\t} elseif ( $gateway instanceof LP_Gateway_Abstract ) {\r\n-\t\t\t\t\t\t$this->payment_gateways[ $gateway->id ] = $gateway;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all registered payments.\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 4.0.2\r\n-\t *\u002F\r\n-\tpublic function get_gateways(): array {\r\n-\t\t$gateways               = array();\r\n-\t\t$order_payment_gateways = get_option( 'learn_press_payment_order' );\r\n-\r\n-\t\tif ( count( $this->payment_gateways ) ) {\r\n-\t\t\tif ( $order_payment_gateways ) {\r\n-\t\t\t\tforeach ( $order_payment_gateways as $id ) {\r\n-\t\t\t\t\tif ( isset( $this->payment_gateways[ $id ] ) ) {\r\n-\t\t\t\t\t\t$gateways[ $id ] = $this->payment_gateways[ $id ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$gateways = $this->payment_gateways;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Case new array $gateways not have all gateways\r\n-\t\t\tforeach ( $this->payment_gateways as $gateway ) {\r\n-\t\t\t\tif ( isset( $gateways[ $gateway->id ] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$gateways[ $gateway->id ] = $gateway;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $gateways;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get payment gateways are available for use.\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_available_payment_gateways() {\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Gateway_Abstract[] $gateways\r\n-\t\t *\u002F\r\n-\t\t$gateways            = $this->get_gateways();\r\n-\t\t$_available_gateways = array();\r\n-\t\t$gateway_first       = null;\r\n-\r\n-\t\tforeach ( $gateways as $slug => $gateway ) {\r\n-\t\t\tif ( ! is_object( $gateway ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Not show woo payment gateway, because when enable will be buy course on checkout of Woocommerce\r\n-\t\t\tif ( $slug == 'woocommerce' || $slug == 'woo-payment' ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$gateway_is_available = $gateway->is_enabled();\r\n-\t\t\tif ( $gateway_is_available ) {\r\n-\t\t\t\t$_available_gateways[ $slug ] = $gateway;\r\n-\r\n-\t\t\t\tif ( is_null( $gateway_first ) ) {\r\n-\t\t\t\t\t$gateway_first = $gateway;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set default payment if there is no payment is selected\r\n-\t\tif ( $_available_gateways ) {\r\n-\t\t\t$gateway_first->is_selected = true;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fpayment-gateways\u002Favailable', $_available_gateways );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return array\r\n-\t *\r\n-\t * @deprecated 4.2.3\r\n-\t * @uses LP_Request_Withdrawal::get_gateways() on Addon Commission \u003C= 4.0.1\r\n-\t *\u002F\r\n-\t\u002F*public function get_availabe_gateways() {\r\n-\t\treturn $this->payment_gateways;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @param string $id\r\n-\t *\r\n-\t * @return bool|LP_Gateway_Abstract\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function get_gateway( string $id ) {\r\n-\t\t$gateways = $this->get_gateways();\r\n-\r\n-\t\tif ( $gateways ) {\r\n-\t\t\tif ( isset( $gateways[ $id ] ) ) {\r\n-\t\t\t\treturn $gateways[ $id ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Ensure that only one instance of LP_Gateways is loaded\r\n-\t *\r\n-\t * @return LP_Gateways|null\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Gateways\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+\u002F**\n+ * Class LP_Gateways\n+ *\u002F\n+class LP_Gateways {\n+\n+\t\u002F**\n+\t * @var null\n+\t *\u002F\n+\tprotected static $_instance = null;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $payment_gateways = array();\n+\n+\t\u002F**\n+\t * LP_Gateways constructor.\n+\t *\u002F\n+\tprivate function __construct() {\n+\t\t$this->init();\n+\t}\n+\n+\t\u002F**\n+\t * Init gateways\n+\t *\u002F\n+\tpublic function init() {\n+\t\tif ( ! $this->payment_gateways ) {\n+\t\t\t$gateways = array(\n+\t\t\t\t'paypal'          => 'LP_Gateway_Paypal',\n+\t\t\t\t'offline-payment' => 'LP_Gateway_Offline_Payment',\n+\t\t\t);\n+\t\t\t\u002F\u002F @deprecated 4.2.3.5\n+\t\t\t$gateways = apply_filters( 'learn_press_payment_method', $gateways );\n+\n+\t\t\t\u002F\u002F 3.0.0\n+\t\t\t$gateways = apply_filters( 'learn-press\u002Fpayment-methods', $gateways );\n+\t\t\tif ( $gateways ) {\n+\t\t\t\tforeach ( $gateways as $k => $gateway ) {\n+\t\t\t\t\tif ( is_string( $gateway ) && class_exists( $gateway ) ) {\n+\t\t\t\t\t\t$gateway = new $gateway();\n+\n+\t\t\t\t\t\t$this->payment_gateways[ $k ] = $gateway;\n+\t\t\t\t\t} elseif ( $gateway instanceof LP_Gateway_Abstract ) {\n+\t\t\t\t\t\t$this->payment_gateways[ $gateway->id ] = $gateway;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get all registered payments.\n+\t *\n+\t * @return array\n+\t * @version 4.0.2\n+\t *\u002F\n+\tpublic function get_gateways(): array {\n+\t\t$gateways               = array();\n+\t\t$order_payment_gateways = get_option( 'learn_press_payment_order' );\n+\n+\t\tif ( count( $this->payment_gateways ) ) {\n+\t\t\tif ( $order_payment_gateways ) {\n+\t\t\t\tforeach ( $order_payment_gateways as $id ) {\n+\t\t\t\t\tif ( isset( $this->payment_gateways[ $id ] ) ) {\n+\t\t\t\t\t\t$gateways[ $id ] = $this->payment_gateways[ $id ];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$gateways = $this->payment_gateways;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Case new array $gateways not have all gateways\n+\t\t\tforeach ( $this->payment_gateways as $gateway ) {\n+\t\t\t\tif ( isset( $gateways[ $gateway->id ] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$gateways[ $gateway->id ] = $gateway;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $gateways;\n+\t}\n+\n+\t\u002F**\n+\t * Get payment gateways are available for use.\n+\t *\n+\t * @return mixed\n+\t * @since 3.0.0\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_available_payment_gateways() {\n+\t\t\u002F**\n+\t\t * @var LP_Gateway_Abstract[] $gateways\n+\t\t *\u002F\n+\t\t$gateways            = $this->get_gateways();\n+\t\t$_available_gateways = array();\n+\t\t$gateway_first       = null;\n+\n+\t\tforeach ( $gateways as $slug => $gateway ) {\n+\t\t\tif ( ! is_object( $gateway ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Not show woo payment gateway, because when enable will be buy course on checkout of Woocommerce\n+\t\t\tif ( $slug == 'woocommerce' || $slug == 'woo-payment' ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$gateway_is_available = $gateway->is_enabled();\n+\t\t\tif ( $gateway_is_available ) {\n+\t\t\t\t$_available_gateways[ $slug ] = $gateway;\n+\n+\t\t\t\tif ( is_null( $gateway_first ) ) {\n+\t\t\t\t\t$gateway_first = $gateway;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Set default payment if there is no payment is selected\n+\t\tif ( $_available_gateways ) {\n+\t\t\t$gateway_first->is_selected = true;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fpayment-gateways\u002Favailable', $_available_gateways );\n+\t}\n+\n+\t\u002F**\n+\t * @return array\n+\t *\n+\t * @deprecated 4.2.3\n+\t * @uses LP_Request_Withdrawal::get_gateways() on Addon Commission \u003C= 4.0.1\n+\t *\u002F\n+\t\u002F*public function get_availabe_gateways() {\n+\t\treturn $this->payment_gateways;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @param string $id\n+\t *\n+\t * @return bool|LP_Gateway_Abstract\n+\t * @since 3.0.0\n+\t *\n+\t *\u002F\n+\tpublic function get_gateway( string $id ) {\n+\t\t$gateways = $this->get_gateways();\n+\n+\t\tif ( $gateways ) {\n+\t\t\tif ( isset( $gateways[ $id ] ) ) {\n+\t\t\t\treturn $gateways[ $id ];\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Ensure that only one instance of LP_Gateways is loaded\n+\t *\n+\t * @return LP_Gateways|null\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new self();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Foffline-payment\u002Fclass-lp-gateway-offline-payment.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Foffline-payment\u002Fclass-lp-gateway-offline-payment.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Foffline-payment\u002Fclass-lp-gateway-offline-payment.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Foffline-payment\u002Fclass-lp-gateway-offline-payment.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,103 +1,103 @@\n-\u003C?php\r\n-\u002F**\r\n- * Offline payment gateway class.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  LearnPress\u002FOffline-Payment\u002FClasses\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\u002F\u002F Prevent loading this file directly\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! function_exists( 'LP_Gateway_Offline_Payment' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Gateway_Offline_Payment.\r\n-\t *\u002F\r\n-\tclass LP_Gateway_Offline_Payment extends LP_Gateway_Abstract {\r\n-\t\tuse Singleton;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Settings\r\n-\t\t *\u002F\r\n-\t\tprotected $settings;\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $id = 'offline-payment';\r\n-\r\n-\t\tpublic function init() {\r\n-\t\t\t\u002F\u002F TODO: Implement init() method.\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Constructor for the gateway.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\t$this->icon               = $this->settings->get( 'icon', LP_PLUGIN_URL . 'inc\u002Fgateways\u002Foffline-payment\u002Fimages\u002Fcod.png' );\r\n-\t\t\t$this->method_title       = __( 'Offline Payment', 'learnpress' );\r\n-\t\t\t$this->method_description = __( 'Make a payment with cash.', 'learnpress' );\r\n-\r\n-\t\t\t\u002F\u002F Get settings\r\n-\t\t\t$this->title       = $this->settings->get( 'title', $this->method_title );\r\n-\t\t\t$this->description = $this->settings->get( 'description', $this->method_description );\r\n-\t\t\t$this->enabled     = $this->settings->get( 'enable', 'yes' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Admin payment settings.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_settings(): array {\r\n-\t\t\treturn Config::instance()->get( $this->id, 'settings\u002Fgateway', [ 'lp_gateway_offline_payment' => $this ] );\r\n-\t\t}\r\n-\t\t\u002F**\r\n-\t\t * Payment form.\r\n-\t\t *\u002F\r\n-\t\tpublic function get_payment_form() {\r\n-\t\t\treturn wp_kses_post( LP_Settings::instance()->get( $this->id . '.description', $this->description ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Process the payment and return the result\r\n-\t\t *\r\n-\t\t * @param $order_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function process_payment( $order_id ) {\r\n-\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\t\u002F\u002F Mark as processing (payment won't be taken until delivery)\r\n-\t\t\t$default_status = LP_ORDER_PROCESSING;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * If sandbox mode is turn on then the order\r\n-\t\t\t * should be completed immediately.\r\n-\t\t\t *\r\n-\t\t\t * @since 3.x.x\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( LP_Settings::instance()->get( $this->id . '.sandbox', 'no' ) === 'yes' ) {\r\n-\t\t\t\t$default_status = 'completed';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order->update_status( $default_status, __( 'Payment can be made upon delivery.', 'learnpress' ) );\r\n-\r\n-\t\t\t\u002F\u002F Remove cart\r\n-\t\t\tLearnPress::instance()->cart->empty_cart();\r\n-\r\n-\t\t\t\u002F\u002F Return thank you redirect\r\n-\t\t\treturn array(\r\n-\t\t\t\t'result'   => 'success',\r\n-\t\t\t\t'redirect' => $this->get_return_url( $order ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Offline payment gateway class.\n+ *\n+ * @author   ThimPress\n+ * @package  LearnPress\u002FOffline-Payment\u002FClasses\n+ * @version  4.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+\u002F\u002F Prevent loading this file directly\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! function_exists( 'LP_Gateway_Offline_Payment' ) ) {\n+\t\u002F**\n+\t * Class LP_Gateway_Offline_Payment.\n+\t *\u002F\n+\tclass LP_Gateway_Offline_Payment extends LP_Gateway_Abstract {\n+\t\tuse Singleton;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Settings\n+\t\t *\u002F\n+\t\tprotected $settings;\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $id = 'offline-payment';\n+\n+\t\tpublic function init() {\n+\t\t\t\u002F\u002F TODO: Implement init() method.\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Constructor for the gateway.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\tparent::__construct();\n+\n+\t\t\t$this->icon               = $this->settings->get( 'icon', LP_PLUGIN_URL . 'inc\u002Fgateways\u002Foffline-payment\u002Fimages\u002Fcod.png' );\n+\t\t\t$this->method_title       = __( 'Offline Payment', 'learnpress' );\n+\t\t\t$this->method_description = __( 'Make a payment with cash.', 'learnpress' );\n+\n+\t\t\t\u002F\u002F Get settings\n+\t\t\t$this->title       = $this->settings->get( 'title', $this->method_title );\n+\t\t\t$this->description = $this->settings->get( 'description', $this->method_description );\n+\t\t\t$this->enabled     = $this->settings->get( 'enable', 'yes' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Admin payment settings.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_settings(): array {\n+\t\t\treturn Config::instance()->get( $this->id, 'settings\u002Fgateway', [ 'lp_gateway_offline_payment' => $this ] );\n+\t\t}\n+\t\t\u002F**\n+\t\t * Payment form.\n+\t\t *\u002F\n+\t\tpublic function get_payment_form() {\n+\t\t\treturn wp_kses_post( LP_Settings::instance()->get( $this->id . '.description', $this->description ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Process the payment and return the result\n+\t\t *\n+\t\t * @param $order_id\n+\t\t *\n+\t\t * @return array\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function process_payment( $order_id ) {\n+\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\n+\t\t\t\u002F\u002F Mark as processing (payment won't be taken until delivery)\n+\t\t\t$default_status = LP_ORDER_PROCESSING;\n+\n+\t\t\t\u002F**\n+\t\t\t * If sandbox mode is turn on then the order\n+\t\t\t * should be completed immediately.\n+\t\t\t *\n+\t\t\t * @since 3.x.x\n+\t\t\t *\u002F\n+\t\t\tif ( LP_Settings::instance()->get( $this->id . '.sandbox', 'no' ) === 'yes' ) {\n+\t\t\t\t$default_status = 'completed';\n+\t\t\t}\n+\n+\t\t\t$order->update_status( $default_status, __( 'Payment can be made upon delivery.', 'learnpress' ) );\n+\n+\t\t\t\u002F\u002F Remove cart\n+\t\t\tLearnPress::instance()->cart->empty_cart();\n+\n+\t\t\t\u002F\u002F Return thank you redirect\n+\t\t\treturn array(\n+\t\t\t\t'result'   => 'success',\n+\t\t\t\t'redirect' => $this->get_return_url( $order ),\n+\t\t\t);\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,442 +1,442 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class Paypal Payment gateway.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @since   3.0.0\r\n- * @version 3.0.3\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Gateway_Paypal' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Gateway_Paypal.\r\n-\t *\u002F\r\n-\tclass LP_Gateway_Paypal extends LP_Gateway_Abstract {\r\n-\t\tuse Singleton;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $id = 'paypal';\r\n-\t\t\u002F**\r\n-\t\t * @var null|string\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_live_url = 'https:\u002F\u002Fwww.paypal.com\u002F';\r\n-\t\t\u002F**\r\n-\t\t * @var null|string\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_payment_live_url = 'https:\u002F\u002Fwww.paypal.com\u002Fcgi-bin\u002Fwebscr';\r\n-\t\t\u002F**\r\n-\t\t * @var null|string\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_sandbox_url = 'https:\u002F\u002Fwww.sandbox.paypal.com\u002F';\r\n-\t\t\u002F**\r\n-\t\t * @var null|string\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_payment_sandbox_url = 'https:\u002F\u002Fwww.sandbox.paypal.com\u002Fcgi-bin\u002Fwebscr';\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $api_sandbox_url = 'https:\u002F\u002Fapi-m.sandbox.paypal.com\u002F';\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $api_live_url = 'https:\u002F\u002Fapi-m.paypal.com\u002F';\r\n-\t\t\u002F**\r\n-\t\t * @var string|null\r\n-\t\t *\u002F\r\n-\t\tprotected $api_url = null;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_url = null;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_payment_url = null;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $paypal_email = '';\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $settings = null;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $client_id = null;\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $client_secret = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Gateway_Paypal constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->method_title       = esc_html__( 'PayPal', 'learnpress' );\r\n-\t\t\t$this->method_description = esc_html__( 'Make a payment via Paypal.', 'learnpress' );\r\n-\t\t\t$this->icon               = LP_PLUGIN_URL . 'assets\u002Fimages\u002Fpaypal-logo-preview.png';\r\n-\r\n-\t\t\t$this->title       = esc_html__( 'PayPal', 'learnpress' );\r\n-\t\t\t$this->description = esc_html__( 'Pay with PayPal', 'learnpress' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\r\n-\t\t\t$this->init();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Init.\r\n-\t\t *\u002F\r\n-\t\tpublic function init() {\r\n-\t\t\tif ( $this->is_enabled() ) {\r\n-\t\t\t\tif ( $this->settings->get( 'paypal_sandbox', 'no' ) === 'no' ) {\r\n-\t\t\t\t\t$this->paypal_url         = $this->paypal_live_url;\r\n-\t\t\t\t\t$this->paypal_payment_url = $this->paypal_payment_live_url;\r\n-\t\t\t\t\t$this->paypal_email       = $this->settings->get( 'paypal_email' );\r\n-\t\t\t\t\t$this->api_url            = $this->api_live_url; \u002F\u002Fuse for PayPal rest api\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$this->paypal_url         = $this->paypal_sandbox_url;\r\n-\t\t\t\t\t$this->paypal_payment_url = $this->paypal_payment_sandbox_url;\r\n-\t\t\t\t\t$this->paypal_email       = $this->settings->get( 'paypal_sandbox_email' );\r\n-\t\t\t\t\t$this->api_url            = $this->api_sandbox_url; \u002F\u002Fuse for PayPal rest api\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Use PayPal rest api\r\n-\t\t\t\t$this->client_id     = $this->settings->get( 'app_client_id' );\r\n-\t\t\t\t$this->client_secret = $this->settings->get( 'app_client_secret' );\r\n-\t\t\t} else {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->check_webhook_callback();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Listen callback, webhook form PayPal.\r\n-\t\t *\u002F\r\n-\t\tpublic function check_webhook_callback() {\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! isset( $_GET['paypay_express_checkout'] ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$paypal_order_id = LP_Request::get_param( 'token' );\r\n-\t\t\t\tif ( empty( $paypal_order_id ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->capture_payment_for_order( $paypal_order_id );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Fnvp-soap\u002Fipn\u002FIPNImplementation\u002F#link-ipnlistenerrequestresponseflow\r\n-\t\t * Check validate IPN.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function validate_ipn(): bool {\r\n-\t\t\t$validate_ipn  = array( 'cmd' => '_notify-validate' );\r\n-\t\t\t$validate_ipn += wp_unslash( $_POST );\r\n-\r\n-\t\t\t$params = array(\r\n-\t\t\t\t'body'    => $validate_ipn,\r\n-\t\t\t\t'timeout' => 60,\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Post back to get a response\r\n-\t\t\t$response = wp_remote_post( $this->paypal_payment_url, $params );\r\n-\r\n-\t\t\tif ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] \u003C 300 ) {\r\n-\t\t\t\t$body = wp_remote_retrieve_body( $response );\r\n-\t\t\t\tif ( 'VERIFIED' === $body ) {\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\terror_log( 'Error code paypal validate ipn: ' . $response['response']['code'] );\r\n-\t\t\t\terror_log( 'Error code paypal validate ipn: ' . $response->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle payment.\r\n-\t\t *\r\n-\t\t * @param int $order_id\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function process_payment( $order_id = 0 ): array {\r\n-\t\t\t$order              = new LP_Order( $order_id );\r\n-\t\t\t$data_token         = $this->get_access_token();\r\n-\t\t\t$paypal_payment_url = $this->create_payment_url( $order, $data_token );\r\n-\r\n-\t\t\t$result['result']   = 'success';\r\n-\t\t\t$result['redirect'] = $paypal_payment_url;\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Prepare args to send to PayPal\r\n-\t\t *\r\n-\t\t * @param LP_Order $order\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_paypal_args( LP_Order $order ): array {\r\n-\t\t\t$checkout   = LearnPress::instance()->checkout();\r\n-\t\t\t$custom     = array(\r\n-\t\t\t\t'order_id'       => $order->get_id(),\r\n-\t\t\t\t'order_key'      => $order->get_order_key(),\r\n-\t\t\t\t'checkout_email' => $checkout->get_checkout_email(),\r\n-\t\t\t);\r\n-\t\t\t$lp_cart    = LearnPress::instance()->get_cart();\r\n-\t\t\t$cart_total = $lp_cart->calculate_totals();\r\n-\t\t\t$item_arg   = [\r\n-\t\t\t\t'item_name_1' => $order->get_order_number(),\r\n-\t\t\t\t'quantity_1'  => 1,\r\n-\t\t\t\t'amount_1'    => $cart_total->total,\r\n-\t\t\t];\r\n-\t\t\t$args       = array_merge(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'cmd'           => '_cart',\r\n-\t\t\t\t\t'business'      => $this->paypal_email,\r\n-\t\t\t\t\t'no_note'       => 1,\r\n-\t\t\t\t\t'currency_code' => learn_press_get_currency(),\r\n-\t\t\t\t\t'charset'       => 'utf-8',\r\n-\t\t\t\t\t'rm'            => is_ssl() ? 2 : 1,\r\n-\t\t\t\t\t'upload'        => 1,\r\n-\t\t\t\t\t'return'        => esc_url_raw( $this->get_return_url( $order ) ),\r\n-\t\t\t\t\t'cancel_return' => esc_url_raw( learn_press_is_enable_cart() ? learn_press_get_page_link( 'cart' ) : get_home_url() ),\r\n-\t\t\t\t\t'bn'            => 'LearnPress_Cart',\r\n-\t\t\t\t\t'custom'        => json_encode( $custom ),\r\n-\t\t\t\t\t'notify_url'    => get_home_url() . '\u002F?paypal_notify=1',\r\n-\t\t\t\t),\r\n-\t\t\t\t$item_arg\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fpaypal\u002Fargs', $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get access token from PayPal\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.2.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_access_token() {\r\n-\t\t\t$client_id     = $this->client_id;\r\n-\t\t\t$client_secret = $this->client_secret;\r\n-\r\n-\t\t\tif ( empty( $client_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Paypal Client id is required.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $client_secret ) {\r\n-\t\t\t\tthrow new Exception( __( 'Paypal Client secret is required', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$params   = [ 'grant_type' => 'client_credentials' ];\r\n-\t\t\t$response = wp_remote_post(\r\n-\t\t\t\t$this->api_url . 'v1\u002Foauth2\u002Ftoken',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'body'    => $params,\r\n-\t\t\t\t\t'headers' => [\r\n-\t\t\t\t\t\t'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $client_secret ),\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'timeout' => 60,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$data_token_str = wp_remote_retrieve_body( $response );\r\n-\t\t\t$data_token     = LP_Helper::json_decode( $data_token_str );\r\n-\t\t\tif ( isset( $data_token->error ) ) {\r\n-\t\t\t\tthrow new Exception( $data_token->error_description );\r\n-\t\t\t}\r\n-\r\n-\t\t\tLP_Settings::update_option( 'paypal_token', $data_token_str );\r\n-\r\n-\t\t\treturn $data_token;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * create args to create PayPal order\r\n-\t\t *\r\n-\t\t * @param LP_Order $order\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.2.4\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_args( LP_Order $order ): array {\r\n-\t\t\t$lp_cart    = LearnPress::instance()->get_cart();\r\n-\t\t\t$cart_total = $lp_cart->calculate_totals();\r\n-\t\t\t$order_id   = $order->get_id();\r\n-\t\t\t$return_url = esc_url_raw(\r\n-\t\t\t\tadd_query_arg( 'paypay_express_checkout', 1, $this->get_return_url( $order ) )\r\n-\t\t\t);\r\n-\t\t\t$cancel_url = esc_url_raw(\r\n-\t\t\t\tlearn_press_is_enable_cart() ? learn_press_get_page_link( 'cart' ) : get_home_url()\r\n-\t\t\t);\r\n-\t\t\t$brand_name = ! empty( get_bloginfo() ) ? get_bloginfo() : 'LearnPress';\r\n-\t\t\t$data       = [\r\n-\t\t\t\t'intent'         => 'CAPTURE',\r\n-\t\t\t\t'purchase_units' => [\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'amount'    => [\r\n-\t\t\t\t\t\t\t'currency_code' => learn_press_get_currency(),\r\n-\t\t\t\t\t\t\t'value'         => strval( round( $cart_total->total, 2 ) ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t'custom_id' => $order_id,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t\t'payment_source' => [\r\n-\t\t\t\t\t'paypal' => [\r\n-\t\t\t\t\t\t'experience_context' => [\r\n-\t\t\t\t\t\t\t'payment_method_preference' => 'UNRESTRICTED',\r\n-\t\t\t\t\t\t\t'brand_name'                => $brand_name,\r\n-\t\t\t\t\t\t\t'landing_page'              => 'LOGIN',\r\n-\t\t\t\t\t\t\t'user_action'               => 'PAY_NOW',\r\n-\t\t\t\t\t\t\t'return_url'                => $return_url,\r\n-\t\t\t\t\t\t\t'cancel_url'                => $cancel_url,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t],\r\n-\t\t\t\t],\r\n-\t\t\t];\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fpaypal-rest\u002Fargs', $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create Order PayPal and get checkout url\r\n-\t\t *\r\n-\t\t * @param LP_Order $order\r\n-\t\t * @param object $data_token { scope, access_token, token_type, app_id, expires_in, nonce }\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.2.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function create_payment_url( LP_Order $order, $data_token ): string {\r\n-\t\t\t$checkout_url = '';\r\n-\t\t\t$params       = $this->get_order_args( $order );\r\n-\r\n-\t\t\tif ( ! isset( $data_token->access_token ) || ! isset( $data_token->token_type ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid Paypal access token', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response = wp_remote_post(\r\n-\t\t\t\t$this->api_url . 'v2\u002Fcheckout\u002Forders',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'body'    => json_encode( $params ),\r\n-\t\t\t\t\t'headers' => [\r\n-\t\t\t\t\t\t'Authorization' => $data_token->token_type . ' ' . $data_token->access_token,\r\n-\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'timeout' => 60,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$result = LP_Helper::json_decode( wp_remote_retrieve_body( $response ) );\r\n-\t\t\tif ( isset( $result->error ) ) {\r\n-\t\t\t\tthrow new Exception( $result->error_description );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Error response\r\n-\t\t\t *\r\n-\t\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002Freference\u002Forders\u002Fv2\u002Ferrors\u002F\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( isset( $result->name ) && isset( $result->details[0] ) ) {\r\n-\t\t\t\tthrow new Exception( $result->details[0]->description );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $result->id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid Paypal checkout', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $result->links as $link ) {\r\n-\t\t\t\tif ( $link->rel === 'payer-action' ) {\r\n-\t\t\t\t\t$checkout_url = $link->href;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $checkout_url ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid Paypal checkout url', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $checkout_url;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Capture payment for order\r\n-\t\t *\r\n-\t\t * @param string $paypal_order_id\r\n-\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Forders\u002Fv2\u002F#orders_capture\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\r\n-\t\t * @since 4.2.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function capture_payment_for_order( string $paypal_order_id ) {\r\n-\t\t\t$data_token_str = LP_Settings::get_option( 'paypal_token' );\r\n-\t\t\t$data_token     = json_decode( $data_token_str );\r\n-\t\t\tif ( ! isset( $data_token->access_token ) || ! isset( $data_token->token_type ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid Paypal access token', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response = wp_remote_post(\r\n-\t\t\t\t$this->api_url . 'v2\u002Fcheckout\u002Forders\u002F' . $paypal_order_id . '\u002Fcapture',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'headers' => array(\r\n-\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\r\n-\t\t\t\t\t\t'Authorization' => $data_token->token_type . ' ' . $data_token->access_token,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'timeout' => 60,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $response['response']['code'] === 201 ) {\r\n-\t\t\t\t$body        = wp_remote_retrieve_body( $response );\r\n-\t\t\t\t$transaction = LP_Helper::json_decode( $body );\r\n-\t\t\t\tif ( $transaction->status === 'COMPLETED' ) {\r\n-\t\t\t\t\t$order_id = $transaction->purchase_units[0]->payments->captures[0]->custom_id;\r\n-\t\t\t\t\t$lp_order = learn_press_get_order( $order_id );\r\n-\t\t\t\t\t$lp_order->update_status( LP_ORDER_COMPLETED );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Settings form fields for this gateway\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_settings(): array {\r\n-\t\t\treturn Config::instance()->get( $this->id, 'settings\u002Fgateway' );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class Paypal Payment gateway.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @since   3.0.0\n+ * @version 3.0.3\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Gateway_Paypal' ) ) {\n+\t\u002F**\n+\t * Class LP_Gateway_Paypal.\n+\t *\u002F\n+\tclass LP_Gateway_Paypal extends LP_Gateway_Abstract {\n+\t\tuse Singleton;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $id = 'paypal';\n+\t\t\u002F**\n+\t\t * @var null|string\n+\t\t *\u002F\n+\t\tprotected $paypal_live_url = 'https:\u002F\u002Fwww.paypal.com\u002F';\n+\t\t\u002F**\n+\t\t * @var null|string\n+\t\t *\u002F\n+\t\tprotected $paypal_payment_live_url = 'https:\u002F\u002Fwww.paypal.com\u002Fcgi-bin\u002Fwebscr';\n+\t\t\u002F**\n+\t\t * @var null|string\n+\t\t *\u002F\n+\t\tprotected $paypal_sandbox_url = 'https:\u002F\u002Fwww.sandbox.paypal.com\u002F';\n+\t\t\u002F**\n+\t\t * @var null|string\n+\t\t *\u002F\n+\t\tprotected $paypal_payment_sandbox_url = 'https:\u002F\u002Fwww.sandbox.paypal.com\u002Fcgi-bin\u002Fwebscr';\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $api_sandbox_url = 'https:\u002F\u002Fapi-m.sandbox.paypal.com\u002F';\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $api_live_url = 'https:\u002F\u002Fapi-m.paypal.com\u002F';\n+\t\t\u002F**\n+\t\t * @var string|null\n+\t\t *\u002F\n+\t\tprotected $api_url = null;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $paypal_url = null;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $paypal_payment_url = null;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $paypal_email = '';\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $settings = null;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $client_id = null;\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $client_secret = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Gateway_Paypal constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->method_title       = esc_html__( 'PayPal', 'learnpress' );\n+\t\t\t$this->method_description = esc_html__( 'Make a payment via Paypal.', 'learnpress' );\n+\t\t\t$this->icon               = LP_PLUGIN_URL . 'assets\u002Fimages\u002Fpaypal-logo-preview.png';\n+\n+\t\t\t$this->title       = esc_html__( 'PayPal', 'learnpress' );\n+\t\t\t$this->description = esc_html__( 'Pay with PayPal', 'learnpress' );\n+\n+\t\t\tparent::__construct();\n+\n+\t\t\t$this->init();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Init.\n+\t\t *\u002F\n+\t\tpublic function init() {\n+\t\t\tif ( $this->is_enabled() ) {\n+\t\t\t\tif ( $this->settings->get( 'paypal_sandbox', 'no' ) === 'no' ) {\n+\t\t\t\t\t$this->paypal_url         = $this->paypal_live_url;\n+\t\t\t\t\t$this->paypal_payment_url = $this->paypal_payment_live_url;\n+\t\t\t\t\t$this->paypal_email       = $this->settings->get( 'paypal_email' );\n+\t\t\t\t\t$this->api_url            = $this->api_live_url; \u002F\u002Fuse for PayPal rest api\n+\t\t\t\t} else {\n+\t\t\t\t\t$this->paypal_url         = $this->paypal_sandbox_url;\n+\t\t\t\t\t$this->paypal_payment_url = $this->paypal_payment_sandbox_url;\n+\t\t\t\t\t$this->paypal_email       = $this->settings->get( 'paypal_sandbox_email' );\n+\t\t\t\t\t$this->api_url            = $this->api_sandbox_url; \u002F\u002Fuse for PayPal rest api\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Use PayPal rest api\n+\t\t\t\t$this->client_id     = $this->settings->get( 'app_client_id' );\n+\t\t\t\t$this->client_secret = $this->settings->get( 'app_client_secret' );\n+\t\t\t} else {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->check_webhook_callback();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Listen callback, webhook form PayPal.\n+\t\t *\u002F\n+\t\tpublic function check_webhook_callback() {\n+\t\t\ttry {\n+\t\t\t\tif ( ! isset( $_GET['paypay_express_checkout'] ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$paypal_order_id = LP_Request::get_param( 'token' );\n+\t\t\t\tif ( empty( $paypal_order_id ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$this->capture_payment_for_order( $paypal_order_id );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Fnvp-soap\u002Fipn\u002FIPNImplementation\u002F#link-ipnlistenerrequestresponseflow\n+\t\t * Check validate IPN.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function validate_ipn(): bool {\n+\t\t\t$validate_ipn  = array( 'cmd' => '_notify-validate' );\n+\t\t\t$validate_ipn += wp_unslash( $_POST );\n+\n+\t\t\t$params = array(\n+\t\t\t\t'body'    => $validate_ipn,\n+\t\t\t\t'timeout' => 60,\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Post back to get a response\n+\t\t\t$response = wp_remote_post( $this->paypal_payment_url, $params );\n+\n+\t\t\tif ( ! is_wp_error( $response ) && $response['response']['code'] >= 200 && $response['response']['code'] \u003C 300 ) {\n+\t\t\t\t$body = wp_remote_retrieve_body( $response );\n+\t\t\t\tif ( 'VERIFIED' === $body ) {\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\terror_log( 'Error code paypal validate ipn: ' . $response['response']['code'] );\n+\t\t\t\terror_log( 'Error code paypal validate ipn: ' . $response->get_error_message() );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle payment.\n+\t\t *\n+\t\t * @param int $order_id\n+\t\t *\n+\t\t * @return array\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function process_payment( $order_id = 0 ): array {\n+\t\t\t$order              = new LP_Order( $order_id );\n+\t\t\t$data_token         = $this->get_access_token();\n+\t\t\t$paypal_payment_url = $this->create_payment_url( $order, $data_token );\n+\n+\t\t\t$result['result']   = 'success';\n+\t\t\t$result['redirect'] = $paypal_payment_url;\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Prepare args to send to PayPal\n+\t\t *\n+\t\t * @param LP_Order $order\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_paypal_args( LP_Order $order ): array {\n+\t\t\t$checkout   = LearnPress::instance()->checkout();\n+\t\t\t$custom     = array(\n+\t\t\t\t'order_id'       => $order->get_id(),\n+\t\t\t\t'order_key'      => $order->get_order_key(),\n+\t\t\t\t'checkout_email' => $checkout->get_checkout_email(),\n+\t\t\t);\n+\t\t\t$lp_cart    = LearnPress::instance()->get_cart();\n+\t\t\t$cart_total = $lp_cart->calculate_totals();\n+\t\t\t$item_arg   = [\n+\t\t\t\t'item_name_1' => $order->get_order_number(),\n+\t\t\t\t'quantity_1'  => 1,\n+\t\t\t\t'amount_1'    => $cart_total->total,\n+\t\t\t];\n+\t\t\t$args       = array_merge(\n+\t\t\t\tarray(\n+\t\t\t\t\t'cmd'           => '_cart',\n+\t\t\t\t\t'business'      => $this->paypal_email,\n+\t\t\t\t\t'no_note'       => 1,\n+\t\t\t\t\t'currency_code' => learn_press_get_currency(),\n+\t\t\t\t\t'charset'       => 'utf-8',\n+\t\t\t\t\t'rm'            => is_ssl() ? 2 : 1,\n+\t\t\t\t\t'upload'        => 1,\n+\t\t\t\t\t'return'        => esc_url_raw( $this->get_return_url( $order ) ),\n+\t\t\t\t\t'cancel_return' => esc_url_raw( learn_press_is_enable_cart() ? learn_press_get_page_link( 'cart' ) : get_home_url() ),\n+\t\t\t\t\t'bn'            => 'LearnPress_Cart',\n+\t\t\t\t\t'custom'        => json_encode( $custom ),\n+\t\t\t\t\t'notify_url'    => get_home_url() . '\u002F?paypal_notify=1',\n+\t\t\t\t),\n+\t\t\t\t$item_arg\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fpaypal\u002Fargs', $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get access token from PayPal\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 4.2.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function get_access_token() {\n+\t\t\t$client_id     = $this->client_id;\n+\t\t\t$client_secret = $this->client_secret;\n+\n+\t\t\tif ( empty( $client_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Paypal Client id is required.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $client_secret ) {\n+\t\t\t\tthrow new Exception( __( 'Paypal Client secret is required', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$params   = [ 'grant_type' => 'client_credentials' ];\n+\t\t\t$response = wp_remote_post(\n+\t\t\t\t$this->api_url . 'v1\u002Foauth2\u002Ftoken',\n+\t\t\t\t[\n+\t\t\t\t\t'body'    => $params,\n+\t\t\t\t\t'headers' => [\n+\t\t\t\t\t\t'Authorization' => 'Basic ' . base64_encode( $client_id . ':' . $client_secret ),\n+\t\t\t\t\t],\n+\t\t\t\t\t'timeout' => 60,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$data_token_str = wp_remote_retrieve_body( $response );\n+\t\t\t$data_token     = LP_Helper::json_decode( $data_token_str );\n+\t\t\tif ( isset( $data_token->error ) ) {\n+\t\t\t\tthrow new Exception( $data_token->error_description );\n+\t\t\t}\n+\n+\t\t\tLP_Settings::update_option( 'paypal_token', $data_token_str );\n+\n+\t\t\treturn $data_token;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * create args to create PayPal order\n+\t\t *\n+\t\t * @param LP_Order $order\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.2.4\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function get_order_args( LP_Order $order ): array {\n+\t\t\t$lp_cart    = LearnPress::instance()->get_cart();\n+\t\t\t$cart_total = $lp_cart->calculate_totals();\n+\t\t\t$order_id   = $order->get_id();\n+\t\t\t$return_url = esc_url_raw(\n+\t\t\t\tadd_query_arg( 'paypay_express_checkout', 1, $this->get_return_url( $order ) )\n+\t\t\t);\n+\t\t\t$cancel_url = esc_url_raw(\n+\t\t\t\tlearn_press_is_enable_cart() ? learn_press_get_page_link( 'cart' ) : get_home_url()\n+\t\t\t);\n+\t\t\t$brand_name = ! empty( get_bloginfo() ) ? get_bloginfo() : 'LearnPress';\n+\t\t\t$data       = [\n+\t\t\t\t'intent'         => 'CAPTURE',\n+\t\t\t\t'purchase_units' => [\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'amount'    => [\n+\t\t\t\t\t\t\t'currency_code' => learn_press_get_currency(),\n+\t\t\t\t\t\t\t'value'         => strval( round( $cart_total->total, 2 ) ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t'custom_id' => $order_id,\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t\t'payment_source' => [\n+\t\t\t\t\t'paypal' => [\n+\t\t\t\t\t\t'experience_context' => [\n+\t\t\t\t\t\t\t'payment_method_preference' => 'UNRESTRICTED',\n+\t\t\t\t\t\t\t'brand_name'                => $brand_name,\n+\t\t\t\t\t\t\t'landing_page'              => 'LOGIN',\n+\t\t\t\t\t\t\t'user_action'               => 'PAY_NOW',\n+\t\t\t\t\t\t\t'return_url'                => $return_url,\n+\t\t\t\t\t\t\t'cancel_url'                => $cancel_url,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t],\n+\t\t\t\t],\n+\t\t\t];\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fpaypal-rest\u002Fargs', $data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create Order PayPal and get checkout url\n+\t\t *\n+\t\t * @param LP_Order $order\n+\t\t * @param object $data_token { scope, access_token, token_type, app_id, expires_in, nonce }\n+\t\t *\n+\t\t * @return string\n+\t\t * @throws Exception\n+\t\t * @since 4.2.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function create_payment_url( LP_Order $order, $data_token ): string {\n+\t\t\t$checkout_url = '';\n+\t\t\t$params       = $this->get_order_args( $order );\n+\n+\t\t\tif ( ! isset( $data_token->access_token ) || ! isset( $data_token->token_type ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid Paypal access token', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response = wp_remote_post(\n+\t\t\t\t$this->api_url . 'v2\u002Fcheckout\u002Forders',\n+\t\t\t\t[\n+\t\t\t\t\t'body'    => json_encode( $params ),\n+\t\t\t\t\t'headers' => [\n+\t\t\t\t\t\t'Authorization' => $data_token->token_type . ' ' . $data_token->access_token,\n+\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\n+\t\t\t\t\t],\n+\t\t\t\t\t'timeout' => 60,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$result = LP_Helper::json_decode( wp_remote_retrieve_body( $response ) );\n+\t\t\tif ( isset( $result->error ) ) {\n+\t\t\t\tthrow new Exception( $result->error_description );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Error response\n+\t\t\t *\n+\t\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fapi\u002Frest\u002Freference\u002Forders\u002Fv2\u002Ferrors\u002F\n+\t\t\t *\u002F\n+\t\t\tif ( isset( $result->name ) && isset( $result->details[0] ) ) {\n+\t\t\t\tthrow new Exception( $result->details[0]->description );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $result->id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid Paypal checkout', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tforeach ( $result->links as $link ) {\n+\t\t\t\tif ( $link->rel === 'payer-action' ) {\n+\t\t\t\t\t$checkout_url = $link->href;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( empty( $checkout_url ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid Paypal checkout url', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\treturn $checkout_url;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Capture payment for order\n+\t\t *\n+\t\t * @param string $paypal_order_id\n+\t\t * https:\u002F\u002Fdeveloper.paypal.com\u002Fdocs\u002Fapi\u002Forders\u002Fv2\u002F#orders_capture\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\n+\t\t * @since 4.2.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function capture_payment_for_order( string $paypal_order_id ) {\n+\t\t\t$data_token_str = LP_Settings::get_option( 'paypal_token' );\n+\t\t\t$data_token     = json_decode( $data_token_str );\n+\t\t\tif ( ! isset( $data_token->access_token ) || ! isset( $data_token->token_type ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid Paypal access token', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response = wp_remote_post(\n+\t\t\t\t$this->api_url . 'v2\u002Fcheckout\u002Forders\u002F' . $paypal_order_id . '\u002Fcapture',\n+\t\t\t\tarray(\n+\t\t\t\t\t'headers' => array(\n+\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\n+\t\t\t\t\t\t'Authorization' => $data_token->token_type . ' ' . $data_token->access_token,\n+\t\t\t\t\t),\n+\t\t\t\t\t'timeout' => 60,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $response['response']['code'] === 201 ) {\n+\t\t\t\t$body        = wp_remote_retrieve_body( $response );\n+\t\t\t\t$transaction = LP_Helper::json_decode( $body );\n+\t\t\t\tif ( $transaction->status === 'COMPLETED' ) {\n+\t\t\t\t\t$order_id = $transaction->purchase_units[0]->payments->captures[0]->custom_id;\n+\t\t\t\t\t$lp_order = learn_press_get_order( $order_id );\n+\t\t\t\t\t$lp_order->update_status( LP_ORDER_COMPLETED );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Settings form fields for this gateway\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_settings(): array {\n+\t\t\treturn Config::instance()->get( $this->id, 'settings\u002Fgateway' );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fpaypal\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fpaypal\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fgateways\u002Fpaypal\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fgateways\u002Fpaypal\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FAbstractBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FAbstractBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FAbstractBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FAbstractBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,192 +1,192 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use WP_Block;\r\n-use WP_Block_Type;\r\n-\r\n-\u002F**\r\n- * Class AbstractBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-abstract class AbstractBlockType extends WP_Block_Type {\r\n-\tpublic $namespace   = 'learnpress';\r\n-\tpublic $textdomain  = 'learnpress';\r\n-\tpublic $api_version = 3;\r\n-\t\u002F**\r\n-\t * @var string block name - Field of LP.\r\n-\t *\u002F\r\n-\tpublic $block_name = '';\r\n-\t\u002F**\r\n-\t * @var string path of the file run js - Field of LP.\r\n-\t *\u002F\r\n-\tpublic $source_js = '';\r\n-\t\u002F**\r\n-\t * Metadata of block.\r\n-\t * @var string path of the file block.js - Field of LP.\r\n-\t *\u002F\r\n-\tpublic $path_block_json = '';\r\n-\t\u002F**\r\n-\t * @var string Screen Template want to display - Field of LP\r\n-\t *\u002F\r\n-\tpublic $display_on_templates = [];\r\n-\t\u002F**\r\n-\t * Tracks if assets have been enqueued.\r\n-\t *\r\n-\t * @var boolean\r\n-\t *\u002F\r\n-\tprotected $enqueued_assets = false;\r\n-\t\u002F**\r\n-\t * @var string Class hash - Field of LP\r\n-\t *\u002F\r\n-\tprotected $class_hash = '';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->source_js = $this->get_source_js();\r\n-\t\tparent::__construct( $this->get_block_type() );\r\n-\t\t$this->editor_script_handles = $this->get_editor_script_handles();\r\n-\t\t$this->render_callback       = $this->get_render_callback();\r\n-\t\t$this->supports              = $this->get_supports();\r\n-\t\t$this->attributes            = $this->get_attributes();\r\n-\t\t$this->ancestor              = $this->get_ancestor();\r\n-\t\t$this->provides_context      = $this->get_provides_context();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set to name block.\r\n-\t * Or set path js handle of block.\r\n-\t * For Backend\r\n-\t *\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\tprotected function get_editor_script_handles(): array {\r\n-\t\treturn [ $this->name ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set render callback for block.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_render_callback(): array {\r\n-\t\treturn [ $this, 'render_content_block_template' ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get supports.\r\n-\t *\r\n-\t * @return array|null\r\n-\t *\u002F\r\n-\tprotected function get_supports() {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get supports.\r\n-\t *\r\n-\t * @return array|null\r\n-\t *\u002F\r\n-\tprotected function get_ancestor() {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get supports.\r\n-\t *\r\n-\t * @return array|null\r\n-\t *\u002F\r\n-\tprotected function get_provides_context() {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t * @param string $content\r\n-\t * @param WP_Block $block\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tabstract public function render_content_block_template( array $attributes, $content, $block ): string;\r\n-\r\n-\tprotected function enqueue_assets() {\r\n-\t\tif ( $this->enqueued_assets ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\twp_enqueue_style( 'lp-blocks-style', get_stylesheet_uri() );\r\n-\t\t$this->enqueued_assets = true;\r\n-\t}\r\n-\r\n-\tprotected function get_block_type() {\r\n-\t\treturn $this->namespace . '\u002F' . $this->block_name;\r\n-\t}\r\n-\r\n-\tprotected function get_source_js() {\r\n-\t\treturn LP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Fblocks\u002F' . $this->block_name . '.js';\r\n-\t}\r\n-\r\n-\tprotected function get_class_hash() {\r\n-\t\t$hash             = bin2hex( random_bytes( 16 ) );\r\n-\t\t$timestamp        = time();\r\n-\t\t$this->class_hash = 'lp-elements-' . $timestamp . '-' . $hash;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Wrap content in a block tag.\r\n-\t * Will get the attributes, supports, classes... from the block.\r\n-\t * The block's supports must be configured in both block.json and PHP to be consistent.\r\n-\t * If method generate not provide enough to handle special logic, you can override this method.\r\n-\t *\r\n-\t * @param string $content\r\n-\t * @param string $tag\r\n-\t * @param array $extra_attributes\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_output( string $content, string $tag = 'div', array $extra_attributes = [] ): string {\r\n-\t\t$wrapper = get_block_wrapper_attributes( $extra_attributes );\r\n-\t\treturn sprintf(\r\n-\t\t\t\"\u003C$tag %s>%s\u003C\u002F$tag>\",\r\n-\t\t\t$wrapper,\r\n-\t\t\t$content\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tprotected function get_output_with_class_hash( $attributes, $content, $properties = array(), $exclude = array() ) {\r\n-\t\t$output                    = '';\r\n-\t\t$class_hash                = $this->class_hash ?? '';\r\n-\t\t$classes                   = $attributes['className'] ?? '';\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, $properties, $exclude );\r\n-\t\t$class_default             = 'wp-block-' . $this->namespace . '-' . $this->block_name;\r\n-\t\t$class                     = $class_default ? $class_default : '';\r\n-\t\t$style                     = '';\r\n-\r\n-\t\tif ( ! empty( $classes ) ) {\r\n-\t\t\t$class .= ' ' . $classes;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $class_hash ) ) {\r\n-\t\t\t$class .= ' ' . $class_hash;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $border_classes_and_styles['classes'] ) ) {\r\n-\t\t\t$class .= ' ' . $border_classes_and_styles['classes'];\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $border_classes_and_styles['classes'] ) ) {\r\n-\t\t\t$style = sprintf( 'style=\"%s\"', $border_classes_and_styles['styles'] );\r\n-\t\t}\r\n-\r\n-\t\tob_start();\r\n-\t\techo sprintf(\r\n-\t\t\t'\u003Cdiv class=\"%s\" %s>%s\u003C\u002Fdiv>',\r\n-\t\t\t$class,\r\n-\t\t\t$style,\r\n-\t\t\t$content\r\n-\t\t);\r\n-\t\t$output = ob_get_clean();\r\n-\t\treturn $output;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use WP_Block;\n+use WP_Block_Type;\n+\n+\u002F**\n+ * Class AbstractBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+abstract class AbstractBlockType extends WP_Block_Type {\n+\tpublic $namespace   = 'learnpress';\n+\tpublic $textdomain  = 'learnpress';\n+\tpublic $api_version = 3;\n+\t\u002F**\n+\t * @var string block name - Field of LP.\n+\t *\u002F\n+\tpublic $block_name = '';\n+\t\u002F**\n+\t * @var string path of the file run js - Field of LP.\n+\t *\u002F\n+\tpublic $source_js = '';\n+\t\u002F**\n+\t * Metadata of block.\n+\t * @var string path of the file block.js - Field of LP.\n+\t *\u002F\n+\tpublic $path_block_json = '';\n+\t\u002F**\n+\t * @var string Screen Template want to display - Field of LP\n+\t *\u002F\n+\tpublic $display_on_templates = [];\n+\t\u002F**\n+\t * Tracks if assets have been enqueued.\n+\t *\n+\t * @var boolean\n+\t *\u002F\n+\tprotected $enqueued_assets = false;\n+\t\u002F**\n+\t * @var string Class hash - Field of LP\n+\t *\u002F\n+\tprotected $class_hash = '';\n+\n+\tpublic function __construct() {\n+\t\t$this->source_js = $this->get_source_js();\n+\t\tparent::__construct( $this->get_block_type() );\n+\t\t$this->editor_script_handles = $this->get_editor_script_handles();\n+\t\t$this->render_callback       = $this->get_render_callback();\n+\t\t$this->supports              = $this->get_supports();\n+\t\t$this->attributes            = $this->get_attributes();\n+\t\t$this->ancestor              = $this->get_ancestor();\n+\t\t$this->provides_context      = $this->get_provides_context();\n+\t}\n+\n+\t\u002F**\n+\t * Set to name block.\n+\t * Or set path js handle of block.\n+\t * For Backend\n+\t *\n+\t * @return string[]\n+\t *\u002F\n+\tprotected function get_editor_script_handles(): array {\n+\t\treturn [ $this->name ];\n+\t}\n+\n+\t\u002F**\n+\t * Set render callback for block.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_render_callback(): array {\n+\t\treturn [ $this, 'render_content_block_template' ];\n+\t}\n+\n+\t\u002F**\n+\t * Get supports.\n+\t *\n+\t * @return array|null\n+\t *\u002F\n+\tprotected function get_supports() {\n+\t\treturn null;\n+\t}\n+\n+\t\u002F**\n+\t * Get supports.\n+\t *\n+\t * @return array|null\n+\t *\u002F\n+\tprotected function get_ancestor() {\n+\t\treturn null;\n+\t}\n+\n+\t\u002F**\n+\t * Get supports.\n+\t *\n+\t * @return array|null\n+\t *\u002F\n+\tprotected function get_provides_context() {\n+\t\treturn null;\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t * @param string $content\n+\t * @param WP_Block $block\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tabstract public function render_content_block_template( array $attributes, $content, $block ): string;\n+\n+\tprotected function enqueue_assets() {\n+\t\tif ( $this->enqueued_assets ) {\n+\t\t\treturn;\n+\t\t}\n+\t\twp_enqueue_style( 'lp-blocks-style', get_stylesheet_uri() );\n+\t\t$this->enqueued_assets = true;\n+\t}\n+\n+\tprotected function get_block_type() {\n+\t\treturn $this->namespace . '\u002F' . $this->block_name;\n+\t}\n+\n+\tprotected function get_source_js() {\n+\t\treturn LP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Fblocks\u002F' . $this->block_name . '.js';\n+\t}\n+\n+\tprotected function get_class_hash() {\n+\t\t$hash             = bin2hex( random_bytes( 16 ) );\n+\t\t$timestamp        = time();\n+\t\t$this->class_hash = 'lp-elements-' . $timestamp . '-' . $hash;\n+\t}\n+\n+\t\u002F**\n+\t * Wrap content in a block tag.\n+\t * Will get the attributes, supports, classes... from the block.\n+\t * The block's supports must be configured in both block.json and PHP to be consistent.\n+\t * If method generate not provide enough to handle special logic, you can override this method.\n+\t *\n+\t * @param string $content\n+\t * @param string $tag\n+\t * @param array $extra_attributes\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_output( string $content, string $tag = 'div', array $extra_attributes = [] ): string {\n+\t\t$wrapper = get_block_wrapper_attributes( $extra_attributes );\n+\t\treturn sprintf(\n+\t\t\t\"\u003C$tag %s>%s\u003C\u002F$tag>\",\n+\t\t\t$wrapper,\n+\t\t\t$content\n+\t\t);\n+\t}\n+\n+\tprotected function get_output_with_class_hash( $attributes, $content, $properties = array(), $exclude = array() ) {\n+\t\t$output                    = '';\n+\t\t$class_hash                = $this->class_hash ?? '';\n+\t\t$classes                   = $attributes['className'] ?? '';\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, $properties, $exclude );\n+\t\t$class_default             = 'wp-block-' . $this->namespace . '-' . $this->block_name;\n+\t\t$class                     = $class_default ? $class_default : '';\n+\t\t$style                     = '';\n+\n+\t\tif ( ! empty( $classes ) ) {\n+\t\t\t$class .= ' ' . $classes;\n+\t\t}\n+\n+\t\tif ( ! empty( $class_hash ) ) {\n+\t\t\t$class .= ' ' . $class_hash;\n+\t\t}\n+\n+\t\tif ( ! empty( $border_classes_and_styles['classes'] ) ) {\n+\t\t\t$class .= ' ' . $border_classes_and_styles['classes'];\n+\t\t}\n+\n+\t\tif ( ! empty( $border_classes_and_styles['classes'] ) ) {\n+\t\t\t$style = sprintf( 'style=\"%s\"', $border_classes_and_styles['styles'] );\n+\t\t}\n+\n+\t\tob_start();\n+\t\techo sprintf(\n+\t\t\t'\u003Cdiv class=\"%s\" %s>%s\u003C\u002Fdiv>',\n+\t\t\t$class,\n+\t\t\t$style,\n+\t\t\t$content\n+\t\t);\n+\t\t$output = ob_get_clean();\n+\t\treturn $output;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FBreadcrumb\u002FBreadcrumbBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FBreadcrumb\u002FBreadcrumbBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FBreadcrumb\u002FBreadcrumbBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FBreadcrumb\u002FBreadcrumbBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Breadcrumb;\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LP_Debug;\r\n-use LP_Template_General;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class BreadcrumbBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class BreadcrumbBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'breadcrumb';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$args = [];\r\n-\t\ttry {\r\n-\t\t\t$show_home = $attributes['showHome'] ?? true;\r\n-\r\n-\t\t\tif ( ! $show_home ) {\r\n-\t\t\t\t$args['home'] = '';\r\n-\t\t\t} else {\r\n-\t\t\t\t$label = ! empty( $attributes['homeLabel'] ) ? $attributes['homeLabel'] : '';\r\n-\t\t\t\tif ( $label ) {\r\n-\t\t\t\t\t$args['home'] = esc_html( $label );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F*ob_start();\r\n-\t\t\t$template = new LP_Template_General();\r\n-\t\t\t$template->breadcrumb( $args );\r\n-\t\t\t$html_breadcrumb = ob_get_clean();*\u002F\r\n-\t\t\t$html = $this->get_output( Template::html_breadcrumb( $args ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\Breadcrumb;\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\Helpers\\Template;\n+use LP_Debug;\n+use LP_Template_General;\n+use Throwable;\n+\n+\u002F**\n+ * Class BreadcrumbBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class BreadcrumbBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'breadcrumb';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$args = [];\n+\t\ttry {\n+\t\t\t$show_home = $attributes['showHome'] ?? true;\n+\n+\t\t\tif ( ! $show_home ) {\n+\t\t\t\t$args['home'] = '';\n+\t\t\t} else {\n+\t\t\t\t$label = ! empty( $attributes['homeLabel'] ) ? $attributes['homeLabel'] : '';\n+\t\t\t\tif ( $label ) {\n+\t\t\t\t\t$args['home'] = esc_html( $label );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F*ob_start();\n+\t\t\t$template = new LP_Template_General();\n+\t\t\t$template->breadcrumb( $args );\n+\t\t\t$html_breadcrumb = ob_get_clean();*\u002F\n+\t\t\t$html = $this->get_output( Template::html_breadcrumb( $args ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,96 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilter;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\u002F**\r\n- * Class CourseFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-filter';\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\twp_enqueue_script( 'lp-course-filter' );\r\n-\t\t\twp_enqueue_script( 'lp-widgets' );\r\n-\t\t\t$allowed_fields = apply_filters( 'learnpress\u002Fcourse-filter\u002Fallowed-filter', [ 'search', 'author', 'level', 'price', 'category', 'tag','btn_submit', 'btn_reset' ] );\r\n-\t\t\t$fields         = preg_split( '\u002F\\s+\u002F', trim( $content ) );\r\n-\t\t\t$fields         = array_values( array_intersect( $fields, $allowed_fields ) );\r\n-\t\t\tapply_filters( 'learnpress\u002Fcourse-filter\u002Ffields', $fields );\r\n-\r\n-\t\t\t$class                     = 'learnpress-block-widget-wrapper learnpress-widget-wrapper';\r\n-\t\t\t$show_in_rest              = isset( $attributes['showInRest'] ) ? ( $attributes['showInRest'] === false ? 0 : 1 ) : 1;\r\n-\t\t\t$show_title                = $attributes['title'] ?? true;\r\n-\t\t\t$title                     = $show_title ? __( 'Course Filter', 'learnpress' ) : '';\r\n-\t\t\t$widget_content            = '';\r\n-\t\t\t$number_level_category     = $attributes['numberLevelCategory'] ?? 1;\r\n-\t\t\t$search_suggestion         = isset( $attributes['searchSuggestion'] ) ? ( $attributes['searchSuggestion'] === false ? 0 : 1 ) : 1;\r\n-\t\t\t$hide_count_zero           = isset( $attributes['hideCountZero'] ) ? ( $attributes['hideCountZero'] === false ? 0 : 1 ) : 1;\r\n-\t\t\t$class_list_courses_target = '.lp-list-courses-default';\r\n-\r\n-\t\t\t$instance = [\r\n-\t\t\t\t'title'                     => $title,\r\n-\t\t\t\t'number_level_category'     => $number_level_category,\r\n-\t\t\t\t'class_list_courses_target' => $class_list_courses_target,\r\n-\t\t\t\t'show_in_rest'              => $show_in_rest,\r\n-\t\t\t\t'hide_count_zero'           => $hide_count_zero,\r\n-\t\t\t\t'search_suggestion'         => $search_suggestion,\r\n-\t\t\t\t'fields'                    => $fields,\r\n-\t\t\t\t'class_wrapper_form'        => 'lp-form-course-filter',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$data = [\r\n-\t\t\t\t'widget'   => 'learnpress_widget_course_filter',\r\n-\t\t\t\t'instance' => wp_json_encode( $instance ),\r\n-\t\t\t];\r\n-\r\n-\t\t\tif ( $show_in_rest ) {\r\n-\t\t\t\t$class .= ' learnpress-widget-wrapper__restapi';\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tlp_skeleton_animation_html( 5 );\r\n-\t\t\t\t$widget_content = ob_get_clean();\r\n-\t\t\t} else {\r\n-\t\t\t\t$section_data               = $instance;\r\n-\t\t\t\t$section_data['params_url'] = lp_archive_skeleton_get_args();\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $section_data );\r\n-\t\t\t\t$widget_content = ob_get_clean();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_course_filter = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-archive-courses-sidebar\">\r\n-\t\t\t\t\t\u003Cdiv class=\"widget learnpress widget_course_filter\">\r\n-\t\t\t\t\t\t\u003Ch3 class=\"widget-title\">%s\u003C\u002Fh3>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"%s\" data-widget=\"%s\">\r\n-\t\t\t\t\t\t\t%s\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t$title,\r\n-\t\t\t\t$class,\r\n-\t\t\t\thtmlentities( wp_json_encode( $data ) ),\r\n-\t\t\t\t$widget_content\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = $this->get_output( $html_course_filter );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilter;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\u002F**\n+ * Class CourseFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-filter';\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\twp_enqueue_script( 'lp-course-filter' );\n+\t\t\twp_enqueue_script( 'lp-widgets' );\n+\t\t\t$allowed_fields = apply_filters( 'learnpress\u002Fcourse-filter\u002Fallowed-filter', [ 'search', 'author', 'level', 'price', 'category', 'tag','btn_submit', 'btn_reset' ] );\n+\t\t\t$fields         = preg_split( '\u002F\\s+\u002F', trim( $content ) );\n+\t\t\t$fields         = array_values( array_intersect( $fields, $allowed_fields ) );\n+\t\t\tapply_filters( 'learnpress\u002Fcourse-filter\u002Ffields', $fields );\n+\n+\t\t\t$class                     = 'learnpress-block-widget-wrapper learnpress-widget-wrapper';\n+\t\t\t$show_in_rest              = isset( $attributes['showInRest'] ) ? ( $attributes['showInRest'] === false ? 0 : 1 ) : 1;\n+\t\t\t$show_title                = $attributes['title'] ?? true;\n+\t\t\t$title                     = $show_title ? __( 'Course Filter', 'learnpress' ) : '';\n+\t\t\t$widget_content            = '';\n+\t\t\t$number_level_category     = $attributes['numberLevelCategory'] ?? 1;\n+\t\t\t$search_suggestion         = isset( $attributes['searchSuggestion'] ) ? ( $attributes['searchSuggestion'] === false ? 0 : 1 ) : 1;\n+\t\t\t$hide_count_zero           = isset( $attributes['hideCountZero'] ) ? ( $attributes['hideCountZero'] === false ? 0 : 1 ) : 1;\n+\t\t\t$class_list_courses_target = '.lp-list-courses-default';\n+\n+\t\t\t$instance = [\n+\t\t\t\t'title'                     => $title,\n+\t\t\t\t'number_level_category'     => $number_level_category,\n+\t\t\t\t'class_list_courses_target' => $class_list_courses_target,\n+\t\t\t\t'show_in_rest'              => $show_in_rest,\n+\t\t\t\t'hide_count_zero'           => $hide_count_zero,\n+\t\t\t\t'search_suggestion'         => $search_suggestion,\n+\t\t\t\t'fields'                    => $fields,\n+\t\t\t\t'class_wrapper_form'        => 'lp-form-course-filter',\n+\t\t\t];\n+\n+\t\t\t$data = [\n+\t\t\t\t'widget'   => 'learnpress_widget_course_filter',\n+\t\t\t\t'instance' => wp_json_encode( $instance ),\n+\t\t\t];\n+\n+\t\t\tif ( $show_in_rest ) {\n+\t\t\t\t$class .= ' learnpress-widget-wrapper__restapi';\n+\t\t\t\tob_start();\n+\t\t\t\tlp_skeleton_animation_html( 5 );\n+\t\t\t\t$widget_content = ob_get_clean();\n+\t\t\t} else {\n+\t\t\t\t$section_data               = $instance;\n+\t\t\t\t$section_data['params_url'] = lp_archive_skeleton_get_args();\n+\t\t\t\tob_start();\n+\t\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $section_data );\n+\t\t\t\t$widget_content = ob_get_clean();\n+\t\t\t}\n+\n+\t\t\t$html_course_filter = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-archive-courses-sidebar\">\n+\t\t\t\t\t\u003Cdiv class=\"widget learnpress widget_course_filter\">\n+\t\t\t\t\t\t\u003Ch3 class=\"widget-title\">%s\u003C\u002Fh3>\n+\t\t\t\t\t\t\u003Cdiv class=\"%s\" data-widget=\"%s\">\n+\t\t\t\t\t\t\t%s\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-loading-change\">\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t$title,\n+\t\t\t\t$class,\n+\t\t\t\thtmlentities( wp_json_encode( $data ) ),\n+\t\t\t\t$widget_content\n+\t\t\t);\n+\n+\t\t\t$html = $this->get_output( $html_course_filter );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonResetFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonResetFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonResetFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonResetFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class ButtonResetFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ButtonResetFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'button-reset-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'btn_reset';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'background_color', 'border_color', 'border_radius','border_width' ] );\r\n-\t\treturn '.lp-form-course-filter button.course-filter-reset {' . $border_classes_and_styles['styles'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class ButtonResetFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ButtonResetFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'button-reset-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'btn_reset';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'background_color', 'border_color', 'border_radius','border_width' ] );\n+\t\treturn '.lp-form-course-filter button.course-filter-reset {' . $border_classes_and_styles['styles'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonSubmitFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonSubmitFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonSubmitFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FButtonSubmitFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class ButtonSubmitFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ButtonSubmitFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'button-submit-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'btn_submit';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'background_color', 'border_color', 'border_radius','border_width' ] );\r\n-\t\treturn '.lp-form-course-filter button.course-filter-submit {' . $border_classes_and_styles['styles'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class ButtonSubmitFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ButtonSubmitFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'button-submit-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'btn_submit';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'background_color', 'border_color', 'border_radius','border_width' ] );\n+\t\treturn '.lp-form-course-filter button.course-filter-submit {' . $border_classes_and_styles['styles'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseAuthorFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseAuthorFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseAuthorFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseAuthorFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CourseAuthorFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseAuthorFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-author-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'author';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_authors\"]) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_authors\"]) .lp-form-course-filter__title {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CourseAuthorFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseAuthorFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-author-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'author';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_authors\"]) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_authors\"]) .lp-form-course-filter__title {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseCategoriesFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseCategoriesFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseCategoriesFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseCategoriesFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CourseCategoriesFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseCategoriesFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-categories-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'category';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"term_id\"]) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"term_id\"]) label {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CourseCategoriesFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseCategoriesFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-categories-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'category';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"term_id\"]) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"term_id\"]) label {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseLevelFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseLevelFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseLevelFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseLevelFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CourseLevelFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseLevelFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-level-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'level';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_level\"]) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_level\"]) label {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CourseLevelFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseLevelFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-level-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'level';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_level\"]) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"c_level\"]) label {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCoursePriceFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCoursePriceFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCoursePriceFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCoursePriceFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CoursePriceFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CoursePriceFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-price-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'price';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"sort_by\"]) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"sort_by\"]) label {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CoursePriceFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CoursePriceFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-price-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'price';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"sort_by\"]) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"sort_by\"]) label {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseSearchFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseSearchFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseSearchFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseSearchFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CourseSearchFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseSearchFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-search-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'search';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(.lp-course-filter-search-field) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(.lp-course-filter-search-field) .lp-form-course-filter__title {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CourseSearchFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseSearchFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-search-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'search';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(.lp-course-filter-search-field) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(.lp-course-filter-search-field) .lp-form-course-filter__title {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseTagFilterBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseTagFilterBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseTagFilterBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourseFilterElements\u002FCourseTagFilterBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-\u002F**\r\n- * Class CourseTagFilterBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseTagFilterBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-tag-filter';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\t$this->enqueue_assets();\r\n-\t\t$this->inline_styles( $attributes );\r\n-\t\t$html = 'tag';\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\r\n-\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\r\n-\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"tag_id\"]) {' . $border_classes_and_styles['styles'] . '}\r\n-\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"tag_id\"]) label {' . $text_transform['style'] . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\CourseFilterElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+\u002F**\n+ * Class CourseTagFilterBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseTagFilterBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-tag-filter';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\t$this->enqueue_assets();\n+\t\t$this->inline_styles( $attributes );\n+\t\t$html = 'tag';\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$text_transform            = StyleAttributes::get_text_transform_class_and_style( $attributes );\n+\t\t$border_classes_and_styles = StyleAttributes::get_classes_and_styles_by_attributes( $attributes, [ 'font_size', 'font_weight', 'text_color', 'text_transform', 'padding', 'margin', 'border_width', 'border_color' ] );\n+\t\treturn 'form.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"tag_id\"]) {' . $border_classes_and_styles['styles'] . '}\n+\t\tform.lp-form-course-filter .lp-form-course-filter__item:has(input[name=\"tag_id\"]) label {' . $text_transform['style'] . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseItemTemplateBlock.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseItemTemplateBlock.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseItemTemplateBlock.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseItemTemplateBlock.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Courses;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class SingleCourseBlock\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseItemTemplateBlock extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-item-template';\r\n-\r\n-\tpublic function get_attributes() {\r\n-\t\treturn [\r\n-\t\t\t'columns' => [\r\n-\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t'default' => 3,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\tpublic function get_ancestor() {\r\n-\t\treturn [ 'learnpress\u002Flist-courses' ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$layout         = sanitize_text_field( $attributes['layout'] ?? 'list' );\r\n-\t\t\t$allowed_layout = [ 'list', 'grid' ];\r\n-\t\t\t$layout         = in_array( $layout, $allowed_layout, true ) ? $layout : 'list';\r\n-\t\t\t$columns        = absint( $attributes['columns'] ?? 3 );\r\n-\t\t\t$columns        = min( max( $columns, 0 ), 20 );\r\n-\r\n-\t\t\t$wrapper_attributes = 'learn-press-courses lp-list-courses-no-css wp-block-learn-press-courses';\r\n-\r\n-\t\t\tif ( $layout == 'grid' ) {\r\n-\t\t\t\t$wrapper_attributes .= ' grid-template-columns';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courses         = $block->context['courses'] ?? [];\r\n-\t\t\t$html_pagination = $block->context['pagination'] ?? '';\r\n-\t\t\t$settings        = $block->context['settings'] ?? [];\r\n-\r\n-\t\t\tif ( empty( $courses ) ) {\r\n-\t\t\t\t$html = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\r\n-\r\n-\t\t\t\t$filter_block_context = static function ( $context ) use ( $courseModel, $settings ) {\r\n-\t\t\t\t\t$context['courseModel'] = $courseModel;\r\n-\t\t\t\t\t$context['settings']    = $settings;\r\n-\t\t\t\t\treturn $context;\r\n-\t\t\t\t};\r\n-\r\n-\t\t\t\t\u002F\u002F Add filter with priority 1 so other filters have access to these values\r\n-\t\t\t\tadd_filter( 'render_block_context', $filter_block_context, 1 );\r\n-\t\t\t\t$block_render  = new WP_Block( $block->parsed_block );\r\n-\t\t\t\t$block_content = $block_render->render( [ 'dynamic' => false ] );\r\n-\t\t\t\tremove_filter( 'render_block_context', $filter_block_context, 1 );\r\n-\r\n-\t\t\t\t$html .= '\u003Cli class=\"course\">' . $block_content . '\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn sprintf(\r\n-\t\t\t\t'\u003Cul class=\"%1$s\" data-layout=\"%2$s\" style=\"--columns: %3$d;\">%4$s\u003C\u002Ful>%5$s',\r\n-\t\t\t\t$wrapper_attributes,\r\n-\t\t\t\t$layout,\r\n-\t\t\t\t$columns,\r\n-\t\t\t\t$html,\r\n-\t\t\t\t$html_pagination\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Courses;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Debug;\n+use Throwable;\n+use WP_Block;\n+\n+\u002F**\n+ * Class SingleCourseBlock\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseItemTemplateBlock extends AbstractBlockType {\n+\tpublic $block_name = 'course-item-template';\n+\n+\tpublic function get_attributes() {\n+\t\treturn [\n+\t\t\t'columns' => [\n+\t\t\t\t'type'    => 'number',\n+\t\t\t\t'default' => 3,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\tpublic function get_ancestor() {\n+\t\treturn [ 'learnpress\u002Flist-courses' ];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$layout         = sanitize_text_field( $attributes['layout'] ?? 'list' );\n+\t\t\t$allowed_layout = [ 'list', 'grid' ];\n+\t\t\t$layout         = in_array( $layout, $allowed_layout, true ) ? $layout : 'list';\n+\t\t\t$columns        = absint( $attributes['columns'] ?? 3 );\n+\t\t\t$columns        = min( max( $columns, 0 ), 20 );\n+\n+\t\t\t$wrapper_attributes = 'learn-press-courses lp-list-courses-no-css wp-block-learn-press-courses';\n+\n+\t\t\tif ( $layout == 'grid' ) {\n+\t\t\t\t$wrapper_attributes .= ' grid-template-columns';\n+\t\t\t}\n+\n+\t\t\t$courses         = $block->context['courses'] ?? [];\n+\t\t\t$html_pagination = $block->context['pagination'] ?? '';\n+\t\t\t$settings        = $block->context['settings'] ?? [];\n+\n+\t\t\tif ( empty( $courses ) ) {\n+\t\t\t\t$html = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\n+\n+\t\t\t\t$filter_block_context = static function ( $context ) use ( $courseModel, $settings ) {\n+\t\t\t\t\t$context['courseModel'] = $courseModel;\n+\t\t\t\t\t$context['settings']    = $settings;\n+\t\t\t\t\treturn $context;\n+\t\t\t\t};\n+\n+\t\t\t\t\u002F\u002F Add filter with priority 1 so other filters have access to these values\n+\t\t\t\tadd_filter( 'render_block_context', $filter_block_context, 1 );\n+\t\t\t\t$block_render  = new WP_Block( $block->parsed_block );\n+\t\t\t\t$block_content = $block_render->render( [ 'dynamic' => false ] );\n+\t\t\t\tremove_filter( 'render_block_context', $filter_block_context, 1 );\n+\n+\t\t\t\t$html .= '\u003Cli class=\"course\">' . $block_content . '\u003C\u002Fli>';\n+\t\t\t}\n+\n+\t\t\treturn sprintf(\n+\t\t\t\t'\u003Cul class=\"%1$s\" data-layout=\"%2$s\" style=\"--columns: %3$d;\">%4$s\u003C\u002Ful>%5$s',\n+\t\t\t\t$wrapper_attributes,\n+\t\t\t\t$layout,\n+\t\t\t\t$columns,\n+\t\t\t\t$html,\n+\t\t\t\t$html_pagination\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseOrderByBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseOrderByBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseOrderByBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseOrderByBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Courses;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseOrderByBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseOrderByBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-order-by';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$settings         = $block->context['settings'] ?? [];\r\n-\t\t\t$order_by         = $block->context['order_by'] ?? 'post_date';\r\n-\t\t\t$order_by_current = isset( $settings['order_by'] ) ? sanitize_text_field( $settings['order_by'] ) : '';\r\n-\t\t\tif ( ! empty( $order_by_current ) ) {\r\n-\t\t\t\t$order_by = $order_by_current;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\r\n-\r\n-\t\t\t$html  = $listCoursesTemplate->html_order_by( $order_by );\r\n-\t\t\t$html .= FilterCourseTemplate::instance()->html_btn_filter_mobile( $settings );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Courses;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseOrderByBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseOrderByBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-order-by';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$settings         = $block->context['settings'] ?? [];\n+\t\t\t$order_by         = $block->context['order_by'] ?? 'post_date';\n+\t\t\t$order_by_current = isset( $settings['order_by'] ) ? sanitize_text_field( $settings['order_by'] ) : '';\n+\t\t\tif ( ! empty( $order_by_current ) ) {\n+\t\t\t\t$order_by = $order_by_current;\n+\t\t\t}\n+\n+\t\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\n+\n+\t\t\t$html  = $listCoursesTemplate->html_order_by( $order_by );\n+\t\t\t$html .= FilterCourseTemplate::instance()->html_btn_filter_mobile( $settings );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseResultsBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseResultsBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseResultsBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseResultsBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Courses;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseResultsBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseResultsBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-results';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$data = $block->context['results_data'] ?? [];\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_results = ListCoursesTemplate::instance()->html_courses_page_result( $data );\r\n-\t\t\t$html         = $this->get_output( $html_results );\r\n-\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Courses;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseResultsBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseResultsBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-results';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$data = $block->context['results_data'] ?? [];\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_results = ListCoursesTemplate::instance()->html_courses_page_result( $data );\n+\t\t\t$html         = $this->get_output( $html_results );\n+\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseSearchBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseSearchBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseSearchBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseSearchBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Courses;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseSearchBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseSearchBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-search';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\tpublic function get_ancestor() {\r\n-\t\treturn [ 'learnpress\u002Flist-courses' ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$settings          = $block->context['settings'] ?? [];\r\n-\t\t\t$settings['class'] = 'block-search-courses';\r\n-\t\t\t$html_search       = ListCoursesTemplate::instance()->html_search_form( $settings );\r\n-\t\t\t$html              = $this->get_output( $html_search );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Courses;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseSearchBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseSearchBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-search';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\tpublic function get_ancestor() {\n+\t\treturn [ 'learnpress\u002Flist-courses' ];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$settings          = $block->context['settings'] ?? [];\n+\t\t\t$settings['class'] = 'block-search-courses';\n+\t\t\t$html_search       = ListCoursesTemplate::instance()->html_search_form( $settings );\n+\t\t\t$html              = $this->get_output( $html_search );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FListCoursesBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FListCoursesBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FListCoursesBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FCourses\u002FListCoursesBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,233 +1,233 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Courses;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Course_Filter;\r\n-use LP_Database;\r\n-use LP_Debug;\r\n-use LP_Page_Controller;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class ListCoursesBlockType\r\n- *\r\n- * @since 4.2.8.3\r\n- * @version 1.0.2\r\n- *\u002F\r\n-class ListCoursesBlockType extends AbstractBlockType {\r\n-\tpublic $block_name      = 'list-courses';\r\n-\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get supports of block\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_supports() {\r\n-\t\treturn [\r\n-\t\t\t'align' => [ 'wide', 'full' ],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for block\r\n-\t *\r\n-\t * @param array $callbacks.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t\u002F**\r\n-\t\t * @uses render_courses\r\n-\t\t *\u002F\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_courses';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\twp_enqueue_script( 'lp-courses-v2' );\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$args                 = lp_archive_skeleton_get_args();\r\n-\t\t\t$args['id_url']       = 'gutenberg-list-courses';\r\n-\t\t\t$args['attributes']   = $attributes;\r\n-\t\t\t$args['parsed_block'] = $block->parsed_block;\r\n-\t\t\t$courseQuery          = $attributes['courseQuery'] ?? [];\r\n-\t\t\t$load_ajax            = $courseQuery['load_ajax'] ?? false;\r\n-\t\t\t$callback             = [\r\n-\t\t\t\t'class'  => get_class( $this ),\r\n-\t\t\t\t'method' => 'render_courses',\r\n-\t\t\t];\r\n-\t\t\t$html_wrapper         = [\r\n-\t\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F For case instructor page, show courses of instructor\r\n-\t\t\tif ( LP_Page_Controller::is_page_instructor() ) {\r\n-\t\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\t\t\t\tif ( $instructor && $instructor->is_instructor() ) {\r\n-\t\t\t\t\t$args['c_author'] = $instructor->get_id();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For list courses related of single course page\r\n-\t\t\tif ( isset( $courseQuery['related'] ) && $courseQuery['related'] ) {\r\n-\t\t\t\t$args['id_url']    = 'gutenberg-list-courses-related';\r\n-\t\t\t\t$args['course_id'] = get_the_ID();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $load_ajax ) {\r\n-\t\t\t\t$content_obj                     = ListCoursesBlockType::render_courses( $args );\r\n-\t\t\t\t$args['html_no_load_ajax_first'] = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$content_obj->content\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\r\n-\t\t\treturn $this->get_output( Template::instance()->nest_elements( $html_wrapper, $html ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render template list courses with settings param.\r\n-\t *\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return stdClass { content: string_html }\r\n-\t * @since 4.2.8.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function render_courses( array $settings = [] ): stdClass {\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = '';\r\n-\r\n-\t\t$parsed_block         = $settings['parsed_block'] ?? '';\r\n-\t\t$attributes           = $settings['attributes'] ?? [];\r\n-\t\t$courseQuery          = $attributes['courseQuery'] ?? [];\r\n-\t\t$total_rows           = 0;\r\n-\t\t$filter               = new LP_Course_Filter();\r\n-\t\t$settings['order_by'] = $settings['order_by'] ?? $courseQuery['order_by'] ?? 'post_date';\r\n-\t\t$settings['limit']    = $courseQuery['limit'] ?? 10;\r\n-\t\tCourses::handle_params_for_query_courses( $filter, $settings );\r\n-\r\n-\t\tif ( isset( $courseQuery['related'] ) && $courseQuery['related'] ) {\r\n-\t\t\t$courseQuery['pagination'] = false;\r\n-\t\t\tself::get_courses_related( $filter, $settings );\r\n-\t\t}\r\n-\r\n-\t\t$filter  = apply_filters( 'learn-press\u002Fblock\u002Flist_courses\u002Fhandle_filter', $filter, $settings );\r\n-\t\t$courses = Courses::get_courses( $filter, $total_rows );\r\n-\r\n-\t\t$paged = $settings['paged'] ?? 1;\r\n-\r\n-\t\t$html_pagination = '';\r\n-\t\tif ( isset( $courseQuery['pagination'] ) && $courseQuery['pagination'] ) {\r\n-\t\t\t$total_pages          = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t\t$content->total_pages = $total_pages;\r\n-\t\t\t$data_pagination      = [\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t'type'        => $courseQuery['pagination_type'] ?? 'number',\r\n-\t\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\r\n-\t\t\t\t'paged'       => $settings['paged'] ?? 1,\r\n-\t\t\t\t'wrapper'     => [ '\u003Cnav class=\"learnpress-block-pagination navigation pagination\">' => '\u003C\u002Fnav>' ],\r\n-\t\t\t];\r\n-\t\t\t$html_pagination      = ListCoursesTemplate::instance()->html_pagination( $data_pagination );\r\n-\t\t}\r\n-\r\n-\t\t$results_data = [];\r\n-\r\n-\t\tif ( ! empty( $courses ) ) {\r\n-\t\t\t$results_data = [\r\n-\t\t\t\t'paged'            => $paged,\r\n-\t\t\t\t'courses_per_page' => $settings['limit'],\r\n-\t\t\t\t'total_rows'       => $total_rows,\r\n-\t\t\t\t'pagination_type'  => $courseQuery['pagination_type'] ?? 'number',\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$filter_block_context = static function ( $context ) use ( $courses, $html_pagination, $filter, $results_data, $settings ) {\r\n-\t\t\t$context['is_list_course'] = true;\r\n-\t\t\t$context['courses']        = $courses ?? [];\r\n-\t\t\t$context['pagination']     = $html_pagination ?? '';\r\n-\t\t\t$context['settings']       = $settings;\r\n-\t\t\t$context['results_data']   = $results_data;\r\n-\t\t\treturn $context;\r\n-\t\t};\r\n-\r\n-\t\t\u002F\u002F Add filter with priority 1 so other filters have access to these values\r\n-\t\tadd_filter( 'render_block_context', $filter_block_context, 1 );\r\n-\t\t$block_render  = new WP_Block( $parsed_block );\r\n-\t\t$block_content = $block_render->render( [ 'dynamic' => false ] );\r\n-\t\tremove_filter( 'render_block_context', $filter_block_context, 1 );\r\n-\r\n-\t\t$content->content = $block_content;\r\n-\t\t$content->paged   = $settings['paged'] ?? 1;\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses related to current course.\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param $setting\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function get_courses_related( LP_Course_Filter &$filter, $setting ) {\r\n-\t\t$courseModelCurrent = CourseModel::find( $setting['course_id'] ?? 0, true );\r\n-\t\tif ( empty( $courseModelCurrent ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$terms    = $courseModelCurrent->get_categories();\r\n-\t\t$term_ids = [];\r\n-\r\n-\t\tforeach ( $terms as $term ) {\r\n-\t\t\t$term_ids[] = $term->term_id ?? 0;\r\n-\r\n-\t\t\tif ( $term->parent ) {\r\n-\t\t\t\t$term_ids[] = $term->parent;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter->term_ids    = $term_ids;\r\n-\t\t$filter->query_count = false;\r\n-\t\t$filter->order_by    = 'rand()';\r\n-\t\t$filter->where[]     = LP_Database::getInstance()->wpdb->prepare( 'AND p.ID != %d', $courseModelCurrent->get_id() );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Courses;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Course_Filter;\n+use LP_Database;\n+use LP_Debug;\n+use LP_Page_Controller;\n+use stdClass;\n+use Throwable;\n+use WP_Block;\n+\n+\u002F**\n+ * Class ListCoursesBlockType\n+ *\n+ * @since 4.2.8.3\n+ * @version 1.0.2\n+ *\u002F\n+class ListCoursesBlockType extends AbstractBlockType {\n+\tpublic $block_name      = 'list-courses';\n+\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses';\n+\n+\tpublic function __construct() {\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Get supports of block\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_supports() {\n+\t\treturn [\n+\t\t\t'align' => [ 'wide', 'full' ],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for block\n+\t *\n+\t * @param array $callbacks.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t\u002F**\n+\t\t * @uses render_courses\n+\t\t *\u002F\n+\t\t$callbacks[] = get_class( $this ) . ':render_courses';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\twp_enqueue_script( 'lp-courses-v2' );\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$args                 = lp_archive_skeleton_get_args();\n+\t\t\t$args['id_url']       = 'gutenberg-list-courses';\n+\t\t\t$args['attributes']   = $attributes;\n+\t\t\t$args['parsed_block'] = $block->parsed_block;\n+\t\t\t$courseQuery          = $attributes['courseQuery'] ?? [];\n+\t\t\t$load_ajax            = $courseQuery['load_ajax'] ?? false;\n+\t\t\t$callback             = [\n+\t\t\t\t'class'  => get_class( $this ),\n+\t\t\t\t'method' => 'render_courses',\n+\t\t\t];\n+\t\t\t$html_wrapper         = [\n+\t\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F For case instructor page, show courses of instructor\n+\t\t\tif ( LP_Page_Controller::is_page_instructor() ) {\n+\t\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\t\t\t\tif ( $instructor && $instructor->is_instructor() ) {\n+\t\t\t\t\t$args['c_author'] = $instructor->get_id();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For list courses related of single course page\n+\t\t\tif ( isset( $courseQuery['related'] ) && $courseQuery['related'] ) {\n+\t\t\t\t$args['id_url']    = 'gutenberg-list-courses-related';\n+\t\t\t\t$args['course_id'] = get_the_ID();\n+\t\t\t}\n+\n+\t\t\tif ( ! $load_ajax ) {\n+\t\t\t\t$content_obj                     = ListCoursesBlockType::render_courses( $args );\n+\t\t\t\t$args['html_no_load_ajax_first'] = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$content_obj->content\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$html = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\n+\t\t\treturn $this->get_output( Template::instance()->nest_elements( $html_wrapper, $html ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Render template list courses with settings param.\n+\t *\n+\t * @param array $settings\n+\t *\n+\t * @return stdClass { content: string_html }\n+\t * @since 4.2.8.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function render_courses( array $settings = [] ): stdClass {\n+\t\t$content          = new stdClass();\n+\t\t$content->content = '';\n+\n+\t\t$parsed_block         = $settings['parsed_block'] ?? '';\n+\t\t$attributes           = $settings['attributes'] ?? [];\n+\t\t$courseQuery          = $attributes['courseQuery'] ?? [];\n+\t\t$total_rows           = 0;\n+\t\t$filter               = new LP_Course_Filter();\n+\t\t$settings['order_by'] = $settings['order_by'] ?? $courseQuery['order_by'] ?? 'post_date';\n+\t\t$settings['limit']    = $courseQuery['limit'] ?? 10;\n+\t\tCourses::handle_params_for_query_courses( $filter, $settings );\n+\n+\t\tif ( isset( $courseQuery['related'] ) && $courseQuery['related'] ) {\n+\t\t\t$courseQuery['pagination'] = false;\n+\t\t\tself::get_courses_related( $filter, $settings );\n+\t\t}\n+\n+\t\t$filter  = apply_filters( 'learn-press\u002Fblock\u002Flist_courses\u002Fhandle_filter', $filter, $settings );\n+\t\t$courses = Courses::get_courses( $filter, $total_rows );\n+\n+\t\t$paged = $settings['paged'] ?? 1;\n+\n+\t\t$html_pagination = '';\n+\t\tif ( isset( $courseQuery['pagination'] ) && $courseQuery['pagination'] ) {\n+\t\t\t$total_pages          = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t\t$content->total_pages = $total_pages;\n+\t\t\t$data_pagination      = [\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t'type'        => $courseQuery['pagination_type'] ?? 'number',\n+\t\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\n+\t\t\t\t'paged'       => $settings['paged'] ?? 1,\n+\t\t\t\t'wrapper'     => [ '\u003Cnav class=\"learnpress-block-pagination navigation pagination\">' => '\u003C\u002Fnav>' ],\n+\t\t\t];\n+\t\t\t$html_pagination      = ListCoursesTemplate::instance()->html_pagination( $data_pagination );\n+\t\t}\n+\n+\t\t$results_data = [];\n+\n+\t\tif ( ! empty( $courses ) ) {\n+\t\t\t$results_data = [\n+\t\t\t\t'paged'            => $paged,\n+\t\t\t\t'courses_per_page' => $settings['limit'],\n+\t\t\t\t'total_rows'       => $total_rows,\n+\t\t\t\t'pagination_type'  => $courseQuery['pagination_type'] ?? 'number',\n+\t\t\t];\n+\t\t}\n+\n+\t\t$filter_block_context = static function ( $context ) use ( $courses, $html_pagination, $filter, $results_data, $settings ) {\n+\t\t\t$context['is_list_course'] = true;\n+\t\t\t$context['courses']        = $courses ?? [];\n+\t\t\t$context['pagination']     = $html_pagination ?? '';\n+\t\t\t$context['settings']       = $settings;\n+\t\t\t$context['results_data']   = $results_data;\n+\t\t\treturn $context;\n+\t\t};\n+\n+\t\t\u002F\u002F Add filter with priority 1 so other filters have access to these values\n+\t\tadd_filter( 'render_block_context', $filter_block_context, 1 );\n+\t\t$block_render  = new WP_Block( $parsed_block );\n+\t\t$block_content = $block_render->render( [ 'dynamic' => false ] );\n+\t\tremove_filter( 'render_block_context', $filter_block_context, 1 );\n+\n+\t\t$content->content = $block_content;\n+\t\t$content->paged   = $settings['paged'] ?? 1;\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get courses related to current course.\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param $setting\n+\t *\n+\t * @return void\n+\t * @since 4.2.8.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function get_courses_related( LP_Course_Filter &$filter, $setting ) {\n+\t\t$courseModelCurrent = CourseModel::find( $setting['course_id'] ?? 0, true );\n+\t\tif ( empty( $courseModelCurrent ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$terms    = $courseModelCurrent->get_categories();\n+\t\t$term_ids = [];\n+\n+\t\tforeach ( $terms as $term ) {\n+\t\t\t$term_ids[] = $term->term_id ?? 0;\n+\n+\t\t\tif ( $term->parent ) {\n+\t\t\t\t$term_ids[] = $term->parent;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter->term_ids    = $term_ids;\n+\t\t$filter->query_count = false;\n+\t\t$filter->order_by    = 'rand()';\n+\t\t$filter->where[]     = LP_Database::getInstance()->wpdb->prepare( 'AND p.ID != %d', $courseModelCurrent->get_id() );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FArchiveCourseBlockLegacy.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FArchiveCourseBlockLegacy.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FArchiveCourseBlockLegacy.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FArchiveCourseBlockLegacy.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Settings;\r\n-\r\n-\u002F**\r\n- * Class ArchiveCourseBlockLegacy\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ArchiveCourseBlockLegacy extends AbstractBlockType {\r\n-\tpublic $block_name           = 'archive-course-legacy';\r\n-\t\u002F*public $display_on_templates = [\r\n-\t\t'learnpress\u002Flearnpress\u002F\u002Farchive-lp_course',\r\n-\t\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_tag',\r\n-\t\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_category',\r\n-\t];*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t$page_template = 'archive-course.php';\r\n-\r\n-\t\tob_start();\r\n-\t\tTemplate::instance()->get_frontend_template( $page_template, compact( 'attributes' ) );\r\n-\t\t$html = ob_get_clean();\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Settings;\n+\n+\u002F**\n+ * Class ArchiveCourseBlockLegacy\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ArchiveCourseBlockLegacy extends AbstractBlockType {\n+\tpublic $block_name           = 'archive-course-legacy';\n+\t\u002F*public $display_on_templates = [\n+\t\t'learnpress\u002Flearnpress\u002F\u002Farchive-lp_course',\n+\t\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_tag',\n+\t\t'learnpress\u002Flearnpress\u002F\u002Ftaxonomy-course_category',\n+\t];*\u002F\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\twp_enqueue_style( 'learnpress' );\n+\t\t$page_template = 'archive-course.php';\n+\n+\t\tob_start();\n+\t\tTemplate::instance()->get_frontend_template( $page_template, compact( 'attributes' ) );\n+\t\t$html = ob_get_clean();\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FCourseItemLegacyBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FCourseItemLegacyBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FCourseItemLegacyBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FCourseItemLegacyBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LP_Global;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseItemLegacyBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseItemLegacyBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'course-item-curriculum';\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\t\t\t$course_item = LP_Global::course_item();\r\n-\t\t\tif ( ! $course_item ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_frontend_template( 'content-single-item.php' );\r\n-\t\t\t$html = ob_get_clean();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LP_Global;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseItemLegacyBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseItemLegacyBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'course-item-curriculum';\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\t\t\t$course_item = LP_Global::course_item();\n+\t\t\tif ( ! $course_item ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_frontend_template( 'content-single-item.php' );\n+\t\t\t$html = ob_get_clean();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FSingleCourseBlockLegacy.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FSingleCourseBlockLegacy.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FSingleCourseBlockLegacy.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FLegacy\u002FSingleCourseBlockLegacy.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LP_Settings;\r\n-\r\n-\u002F**\r\n- * Class SingleCourseBlockLegacy\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleCourseBlockLegacy extends AbstractBlockType {\r\n-\tpublic $block_name = 'single-course-legacy';\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t$html = '';\r\n-\t\tglobal $wp;\r\n-\t\t$object = get_queried_object();\r\n-\t\t$vars   = $wp->query_vars;\r\n-\t\t\u002F\u002F Todo: For item course current display on post_type course\r\n-\t\t\u002F\u002F After when handle display item course on correct post_type item, remove this code.\r\n-\t\t$page_template = '';\r\n-\t\tif ( ! empty( $vars['course-item'] ) ) {\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\t\t\t$page_template = 'content-single-item.php';\r\n-\t\t} elseif ( $object ) {\r\n-\t\t\t$course = CourseModel::find( $object->ID, true );\r\n-\r\n-\t\t\t$page_template = 'single-course-layout.php';\r\n-\r\n-\t\t\t\u002F\u002F Check condition to load single course layout classic or modern.\r\n-\t\t\t$is_override_single_course   = Template::check_template_is_override( 'single-course.php' );\r\n-\t\t\t$option_single_course_layout = LP_Settings::get_option( 'layout_single_course', '' );\r\n-\r\n-\t\t\t\u002F\u002F Old single course layout.\r\n-\t\t\t\u002F\u002F$page_template = 'single-course.php';\r\n-\r\n-\t\t\tif ( $course && $course->is_offline() ) {\r\n-\t\t\t\t$page_template = 'single-course-offline.php';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $page_template === '' ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tob_start();\r\n-\t\tTemplate::instance()->get_frontend_template( $page_template, compact( 'attributes' ) );\r\n-\t\t$html = ob_get_clean();\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\Legacy;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LP_Settings;\n+\n+\u002F**\n+ * Class SingleCourseBlockLegacy\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleCourseBlockLegacy extends AbstractBlockType {\n+\tpublic $block_name = 'single-course-legacy';\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\twp_enqueue_style( 'learnpress' );\n+\t\t$html = '';\n+\t\tglobal $wp;\n+\t\t$object = get_queried_object();\n+\t\t$vars   = $wp->query_vars;\n+\t\t\u002F\u002F Todo: For item course current display on post_type course\n+\t\t\u002F\u002F After when handle display item course on correct post_type item, remove this code.\n+\t\t$page_template = '';\n+\t\tif ( ! empty( $vars['course-item'] ) ) {\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\t\t\t$page_template = 'content-single-item.php';\n+\t\t} elseif ( $object ) {\n+\t\t\t$course = CourseModel::find( $object->ID, true );\n+\n+\t\t\t$page_template = 'single-course-layout.php';\n+\n+\t\t\t\u002F\u002F Check condition to load single course layout classic or modern.\n+\t\t\t$is_override_single_course   = Template::check_template_is_override( 'single-course.php' );\n+\t\t\t$option_single_course_layout = LP_Settings::get_option( 'layout_single_course', '' );\n+\n+\t\t\t\u002F\u002F Old single course layout.\n+\t\t\t\u002F\u002F$page_template = 'single-course.php';\n+\n+\t\t\tif ( $course && $course->is_offline() ) {\n+\t\t\t\t$page_template = 'single-course-offline.php';\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $page_template === '' ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tob_start();\n+\t\tTemplate::instance()->get_frontend_template( $page_template, compact( 'attributes' ) );\n+\t\t$html = ob_get_clean();\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourse\u002FSingleCourseBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourse\u002FSingleCourseBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourse\u002FSingleCourseBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourse\u002FSingleCourseBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourse;\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\u002F**\r\n- * Class SingleCourseBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleCourseBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'single-course';\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Set temporary.\r\n-\t\t\t$this->get_output( $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourse;\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\u002F**\n+ * Class SingleCourseBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleCourseBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'single-course';\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Set temporary.\n+\t\t\t$this->get_output( $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FAbstractCourseBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FAbstractCourseBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FAbstractCourseBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FAbstractCourseBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class AbstractCourseBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-abstract class AbstractCourseBlockType extends AbstractBlockType {\r\n-\t\u002F**\r\n-\t * @var string Screen Template want to display - Field of LP\r\n-\t *\u002F\r\n-\t\u002F*public $display_on_templates = [\r\n-\t\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\r\n-\t];*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Show block when block parent is course item template, single course active\r\n-\t * @return string[]\r\n-\t *\u002F\r\n-\t\u002F*public function get_ancestor() {\r\n-\t\treturn [ 'learnpress\u002Fsingle-course', 'learnpress\u002Fcourse-item-template' ];\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @param $attributes\r\n-\t * @param WP_Block|null $block\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t *\u002F\r\n-\tpublic function get_course( $attributes, $block = null ) {\r\n-\t\tif ( $block instanceof WP_Block ) {\r\n-\t\t\t$courseModel = $block->context['courseModel'] ?? false;\r\n-\t\t\tif ( $courseModel instanceof CourseModel ) {\r\n-\t\t\t\treturn $courseModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\r\n-\t\treturn CourseModel::find( $courseId, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user model\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t *\u002F\r\n-\tpublic function get_user() {\r\n-\t\t$userId = get_current_user_id();\r\n-\t\treturn UserModel::find( $userId, true );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use WP_Block;\n+\n+\u002F**\n+ * Class AbstractCourseBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+abstract class AbstractCourseBlockType extends AbstractBlockType {\n+\t\u002F**\n+\t * @var string Screen Template want to display - Field of LP\n+\t *\u002F\n+\t\u002F*public $display_on_templates = [\n+\t\t'learnpress\u002Flearnpress\u002F\u002Fsingle-lp_course',\n+\t];*\u002F\n+\n+\t\u002F**\n+\t * Show block when block parent is course item template, single course active\n+\t * @return string[]\n+\t *\u002F\n+\t\u002F*public function get_ancestor() {\n+\t\treturn [ 'learnpress\u002Fsingle-course', 'learnpress\u002Fcourse-item-template' ];\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @param $attributes\n+\t * @param WP_Block|null $block\n+\t *\n+\t * @return false|CourseModel\n+\t *\u002F\n+\tpublic function get_course( $attributes, $block = null ) {\n+\t\tif ( $block instanceof WP_Block ) {\n+\t\t\t$courseModel = $block->context['courseModel'] ?? false;\n+\t\t\tif ( $courseModel instanceof CourseModel ) {\n+\t\t\t\treturn $courseModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\n+\t\treturn CourseModel::find( $courseId, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get user model\n+\t *\n+\t * @return false|UserModel\n+\t *\u002F\n+\tpublic function get_user() {\n+\t\t$userId = get_current_user_id();\n+\t\treturn UserModel::find( $userId, true );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseAddressBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseAddressBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseAddressBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseAddressBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseAddressBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseAddressBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-address';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_address = SingleCourseOfflineTemplate::instance()->html_address( $courseModel );\r\n-\t\t\t$html         = $this->get_output( $html_address );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseAddressBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseAddressBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-address';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_address = SingleCourseOfflineTemplate::instance()->html_address( $courseModel );\n+\t\t\t$html         = $this->get_output( $html_address );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,160 +1,160 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class CourseButtonBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseButtonBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-button';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'html'                 => false,\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'background'                    => true,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'background' => true,\r\n-\t\t\t\t\t'text'       => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'                         => true,\r\n-\t\t\t\t'radius'                        => true,\r\n-\t\t\t\t'width'                         => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'width'  => false,\r\n-\t\t\t\t\t'color'  => false,\r\n-\t\t\t\t\t'radius' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'content'                       => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t\t'content' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$map_align_items = [\r\n-\t\t\t\t'top'    => 'flex-start',\r\n-\t\t\t\t'center' => 'center',\r\n-\t\t\t\t'bottom' => 'flex-end',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$text_align     = sanitize_text_field( $attributes['textAlign'] ?? 'center' );\r\n-\t\t\t$allowed_aligns = [ 'left', 'center', 'right', 'justify' ];\r\n-\t\t\t$text_align     = in_array( $text_align, $allowed_aligns, true ) ? $text_align : 'center';\r\n-\r\n-\t\t\t$align_items   = sanitize_text_field( $attributes['alignItems'] ?? 'top' );\r\n-\t\t\t$allowed_items = [ 'top', 'center', 'bottom' ];\r\n-\t\t\t$align_items   = in_array( $align_items, $allowed_items, true ) ? $map_align_items[ $align_items ] : 'flex-start';\r\n-\r\n-\t\t\t$justify_content = sanitize_text_field( $attributes['justifyContent'] ?? 'center' );\r\n-\t\t\t$allowed_justify = [ 'flex-start', 'center', 'flex-end', 'space-between', 'space-around' ];\r\n-\t\t\t$justify_content = in_array( $justify_content, $allowed_justify, true ) ? $justify_content : 'center';\r\n-\r\n-\t\t\t$width = absint( $attributes['width'] ?? 100 );\r\n-\t\t\t$width = min( max( $width, 0 ), 100 );\r\n-\r\n-\t\t\t$html_button = SingleCourseModernLayout::instance()->html_buttons( $courseModel, $userModel );\r\n-\t\t\tif ( empty( $html_button ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$extra_attributes = [\r\n-\t\t\t\t'style' => 'width: 100%; text-align: ' . esc_attr( $text_align ) . ';',\r\n-\t\t\t];\r\n-\t\t\t$wrapper          = get_block_wrapper_attributes( $extra_attributes );\r\n-\r\n-\t\t\t$style = sprintf(\r\n-\t\t\t\t'display: flex; align-items: %s; justify-content: %s;',\r\n-\t\t\t\tesc_attr( $align_items ),\r\n-\t\t\t\tesc_attr( $justify_content )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_button = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-buttons__wrapper\" style=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_attr( $style ),\r\n-\t\t\t\t$html_button\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_button = str_replace(\r\n-\t\t\t\t'class=\"course-buttons\"',\r\n-\t\t\t\t'class=\"course-buttons\" ' . 'style=\"width: ' . $width . '%; display: flex; flex-direction: column; gap: 10px;\"',\r\n-\t\t\t\t$html_button\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( isset( $attributes['align'] ) && $attributes['align'] ) {\r\n-\t\t\t\t$html_button = str_replace(\r\n-\t\t\t\t\t'class=\"course-buttons',\r\n-\t\t\t\t\t'class=\"course-buttons ' . 'align' . sanitize_html_class( $attributes['align'] ) . ' ',\r\n-\t\t\t\t\t$html_button\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tpreg_match( '#class=\"(.*)\"#i', $wrapper, $class_wrapper_find );\r\n-\t\t\tif ( isset( $class_wrapper_find['1'] ) ) {\r\n-\t\t\t\t\u002F\u002F Find class button lp to replace.\r\n-\t\t\t\t$pattern_btn_find = '#\u003Cbutton.*>.*\u003C\u002Fbutton>#i';\r\n-\t\t\t\tpreg_match( $pattern_btn_find, $html_button, $lp_btn_find );\r\n-\t\t\t\tif ( isset( $lp_btn_find[0] ) ) {\r\n-\t\t\t\t\tpreg_match( '#class=\"(.*)\"#i', $lp_btn_find[0], $lp_btn_class_find );\r\n-\t\t\t\t\tif ( isset( $lp_btn_class_find[1] ) ) {\r\n-\t\t\t\t\t\t$merge_class = $class_wrapper_find[1] . ' ' . $lp_btn_class_find[1];\r\n-\t\t\t\t\t\t$wrapper     = str_replace( $class_wrapper_find[1], $merge_class, $wrapper );\r\n-\t\t\t\t\t\t$html        = str_replace( \"class=\\\"$lp_btn_class_find[1]\\\"\", $wrapper, $html_button );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F If not find button lp\r\n-\t\t\t\t\t$html = $html_button;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F If not find class wrapper\r\n-\t\t\t\t$html = $html_button;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LP_Debug;\n+use Throwable;\n+use WP_Block;\n+\n+\u002F**\n+ * Class CourseButtonBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseButtonBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-button';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'html'                 => false,\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'                => [\n+\t\t\t\t'background'                    => true,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'background' => true,\n+\t\t\t\t\t'text'       => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'                         => true,\n+\t\t\t\t'radius'                        => true,\n+\t\t\t\t'width'                         => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'width'  => false,\n+\t\t\t\t\t'color'  => false,\n+\t\t\t\t\t'radius' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'content'                       => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t\t'content' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$map_align_items = [\n+\t\t\t\t'top'    => 'flex-start',\n+\t\t\t\t'center' => 'center',\n+\t\t\t\t'bottom' => 'flex-end',\n+\t\t\t];\n+\n+\t\t\t$text_align     = sanitize_text_field( $attributes['textAlign'] ?? 'center' );\n+\t\t\t$allowed_aligns = [ 'left', 'center', 'right', 'justify' ];\n+\t\t\t$text_align     = in_array( $text_align, $allowed_aligns, true ) ? $text_align : 'center';\n+\n+\t\t\t$align_items   = sanitize_text_field( $attributes['alignItems'] ?? 'top' );\n+\t\t\t$allowed_items = [ 'top', 'center', 'bottom' ];\n+\t\t\t$align_items   = in_array( $align_items, $allowed_items, true ) ? $map_align_items[ $align_items ] : 'flex-start';\n+\n+\t\t\t$justify_content = sanitize_text_field( $attributes['justifyContent'] ?? 'center' );\n+\t\t\t$allowed_justify = [ 'flex-start', 'center', 'flex-end', 'space-between', 'space-around' ];\n+\t\t\t$justify_content = in_array( $justify_content, $allowed_justify, true ) ? $justify_content : 'center';\n+\n+\t\t\t$width = absint( $attributes['width'] ?? 100 );\n+\t\t\t$width = min( max( $width, 0 ), 100 );\n+\n+\t\t\t$html_button = SingleCourseModernLayout::instance()->html_buttons( $courseModel, $userModel );\n+\t\t\tif ( empty( $html_button ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$extra_attributes = [\n+\t\t\t\t'style' => 'width: 100%; text-align: ' . esc_attr( $text_align ) . ';',\n+\t\t\t];\n+\t\t\t$wrapper          = get_block_wrapper_attributes( $extra_attributes );\n+\n+\t\t\t$style = sprintf(\n+\t\t\t\t'display: flex; align-items: %s; justify-content: %s;',\n+\t\t\t\tesc_attr( $align_items ),\n+\t\t\t\tesc_attr( $justify_content )\n+\t\t\t);\n+\n+\t\t\t$html_button = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-buttons__wrapper\" style=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_attr( $style ),\n+\t\t\t\t$html_button\n+\t\t\t);\n+\n+\t\t\t$html_button = str_replace(\n+\t\t\t\t'class=\"course-buttons\"',\n+\t\t\t\t'class=\"course-buttons\" ' . 'style=\"width: ' . $width . '%; display: flex; flex-direction: column; gap: 10px;\"',\n+\t\t\t\t$html_button\n+\t\t\t);\n+\n+\t\t\tif ( isset( $attributes['align'] ) && $attributes['align'] ) {\n+\t\t\t\t$html_button = str_replace(\n+\t\t\t\t\t'class=\"course-buttons',\n+\t\t\t\t\t'class=\"course-buttons ' . 'align' . sanitize_html_class( $attributes['align'] ) . ' ',\n+\t\t\t\t\t$html_button\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tpreg_match( '#class=\"(.*)\"#i', $wrapper, $class_wrapper_find );\n+\t\t\tif ( isset( $class_wrapper_find['1'] ) ) {\n+\t\t\t\t\u002F\u002F Find class button lp to replace.\n+\t\t\t\t$pattern_btn_find = '#\u003Cbutton.*>.*\u003C\u002Fbutton>#i';\n+\t\t\t\tpreg_match( $pattern_btn_find, $html_button, $lp_btn_find );\n+\t\t\t\tif ( isset( $lp_btn_find[0] ) ) {\n+\t\t\t\t\tpreg_match( '#class=\"(.*)\"#i', $lp_btn_find[0], $lp_btn_class_find );\n+\t\t\t\t\tif ( isset( $lp_btn_class_find[1] ) ) {\n+\t\t\t\t\t\t$merge_class = $class_wrapper_find[1] . ' ' . $lp_btn_class_find[1];\n+\t\t\t\t\t\t$wrapper     = str_replace( $class_wrapper_find[1], $merge_class, $wrapper );\n+\t\t\t\t\t\t$html        = str_replace( \"class=\\\"$lp_btn_class_find[1]\\\"\", $wrapper, $html_button );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F If not find button lp\n+\t\t\t\t\t$html = $html_button;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F If not find class wrapper\n+\t\t\t\t$html = $html_button;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonReadMoreBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonReadMoreBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonReadMoreBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseButtonReadMoreBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,124 +1,124 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class CourseButtonReadMoreBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseButtonReadMoreBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-button-read-more';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'html'                 => false,\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'background'                    => true,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'background' => true,\r\n-\t\t\t\t\t'text'       => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'                         => true,\r\n-\t\t\t\t'radius'                        => true,\r\n-\t\t\t\t'width'                         => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'width'  => false,\r\n-\t\t\t\t\t'color'  => false,\r\n-\t\t\t\t\t'radius' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'content'                       => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t\t'content' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$map_align_items = [\r\n-\t\t\t\t'top'    => 'flex-start',\r\n-\t\t\t\t'center' => 'center',\r\n-\t\t\t\t'bottom' => 'flex-end',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$text_align     = sanitize_text_field( $attributes['textAlign'] ?? 'center' );\r\n-\t\t\t$allowed_aligns = [ 'left', 'center', 'right', 'justify' ];\r\n-\t\t\t$text_align     = in_array( $text_align, $allowed_aligns, true ) ? $text_align : 'center';\r\n-\r\n-\t\t\t$align_items   = sanitize_text_field( $attributes['alignItems'] ?? 'top' );\r\n-\t\t\t$allowed_items = [ 'top', 'center', 'bottom' ];\r\n-\t\t\t$align_items   = in_array( $align_items, $allowed_items, true ) ? $map_align_items[ $align_items ] : 'flex-start';\r\n-\r\n-\t\t\t$justify_content = sanitize_text_field( $attributes['justifyContent'] ?? 'center' );\r\n-\t\t\t$allowed_justify = [ 'flex-start', 'center', 'flex-end', 'space-between', 'space-around' ];\r\n-\t\t\t$justify_content = in_array( $justify_content, $allowed_justify, true ) ? $justify_content : 'center';\r\n-\r\n-\t\t\t$width = absint( $attributes['width'] ?? 100 );\r\n-\t\t\t$width = min( max( $width, 0 ), 100 );\r\n-\r\n-\t\t\t$extra_attributes = [\r\n-\t\t\t\t'style' => 'width: 100%; text-align: ' . esc_attr( $text_align ) . ';',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$style_wrapper = 'style=\"display: flex; ' . 'align-items: ' . esc_attr( $align_items ) . ';' . 'justify-content: ' . esc_attr( $justify_content ) . ';' . '\"';\r\n-\t\t\t$wrapper       = get_block_wrapper_attributes( $extra_attributes );\r\n-\t\t\t$btn_text      = SingleCourseTemplate::text_button_course( $courseModel );\r\n-\t\t\t$html          = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-button-read-more\" %s>\r\n-\t\t\t\t\t\u003Ca href=\"%s\" %s aria-label=\"%s\">\r\n-\t\t\t\t\t\t\u003Cbutton %s aria-label=\"%s\">%s\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t$style_wrapper,\r\n-\t\t\t\t$courseModel->get_permalink(),\r\n-\t\t\t\t'style=\" width: ' . $width . '%;\"',\r\n-\t\t\t\t__( 'Learn more about this course', 'learnpress' ),\r\n-\t\t\t\t$wrapper,\r\n-\t\t\t\t$btn_text,\r\n-\t\t\t\t$btn_text\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+use WP_Block;\n+\n+\u002F**\n+ * Class CourseButtonReadMoreBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseButtonReadMoreBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-button-read-more';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'html'                 => false,\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'                => [\n+\t\t\t\t'background'                    => true,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'background' => true,\n+\t\t\t\t\t'text'       => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'                         => true,\n+\t\t\t\t'radius'                        => true,\n+\t\t\t\t'width'                         => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'width'  => false,\n+\t\t\t\t\t'color'  => false,\n+\t\t\t\t\t'radius' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'content'                       => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t\t'content' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$map_align_items = [\n+\t\t\t\t'top'    => 'flex-start',\n+\t\t\t\t'center' => 'center',\n+\t\t\t\t'bottom' => 'flex-end',\n+\t\t\t];\n+\n+\t\t\t$text_align     = sanitize_text_field( $attributes['textAlign'] ?? 'center' );\n+\t\t\t$allowed_aligns = [ 'left', 'center', 'right', 'justify' ];\n+\t\t\t$text_align     = in_array( $text_align, $allowed_aligns, true ) ? $text_align : 'center';\n+\n+\t\t\t$align_items   = sanitize_text_field( $attributes['alignItems'] ?? 'top' );\n+\t\t\t$allowed_items = [ 'top', 'center', 'bottom' ];\n+\t\t\t$align_items   = in_array( $align_items, $allowed_items, true ) ? $map_align_items[ $align_items ] : 'flex-start';\n+\n+\t\t\t$justify_content = sanitize_text_field( $attributes['justifyContent'] ?? 'center' );\n+\t\t\t$allowed_justify = [ 'flex-start', 'center', 'flex-end', 'space-between', 'space-around' ];\n+\t\t\t$justify_content = in_array( $justify_content, $allowed_justify, true ) ? $justify_content : 'center';\n+\n+\t\t\t$width = absint( $attributes['width'] ?? 100 );\n+\t\t\t$width = min( max( $width, 0 ), 100 );\n+\n+\t\t\t$extra_attributes = [\n+\t\t\t\t'style' => 'width: 100%; text-align: ' . esc_attr( $text_align ) . ';',\n+\t\t\t];\n+\n+\t\t\t$style_wrapper = 'style=\"display: flex; ' . 'align-items: ' . esc_attr( $align_items ) . ';' . 'justify-content: ' . esc_attr( $justify_content ) . ';' . '\"';\n+\t\t\t$wrapper       = get_block_wrapper_attributes( $extra_attributes );\n+\t\t\t$btn_text      = SingleCourseTemplate::text_button_course( $courseModel );\n+\t\t\t$html          = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-button-read-more\" %s>\n+\t\t\t\t\t\u003Ca href=\"%s\" %s aria-label=\"%s\">\n+\t\t\t\t\t\t\u003Cbutton %s aria-label=\"%s\">%s\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t$style_wrapper,\n+\t\t\t\t$courseModel->get_permalink(),\n+\t\t\t\t'style=\" width: ' . $width . '%;\"',\n+\t\t\t\t__( 'Learn more about this course', 'learnpress' ),\n+\t\t\t\t$wrapper,\n+\t\t\t\t$btn_text,\n+\t\t\t\t$btn_text\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCapacityBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCapacityBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCapacityBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCapacityBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseCapacityBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseCapacityBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-capacity';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-students\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Capacity', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_capacity( $courseModel ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseCapacityBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseCapacityBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-capacity';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-students\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Capacity', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_capacity( $courseModel ),\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCategoriesBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCategoriesBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCategoriesBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCategoriesBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseCategoriesBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseCategoriesBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-categories';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'link' => false,\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_text = $attributes['showText'] ?? true;\r\n-\t\t\t$is_link   = $attributes['isLink'] ?? true;\r\n-\t\t\t$new_tab   = $attributes['target'] ?? false;\r\n-\t\t\t$setting   = [\r\n-\t\t\t\t'is_link' => $is_link,\r\n-\t\t\t\t'new_tab' => $new_tab,\r\n-\t\t\t];\r\n-\t\t\t$label     = sprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) );\r\n-\t\t\tif ( empty( $show_text ) ) {\r\n-\t\t\t\t$label = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_categories = SingleCourseTemplate::instance()->html_categories( $courseModel, $setting );\r\n-\t\t\tif ( empty( $html_categories ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = sprintf(\r\n-\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$label,\r\n-\t\t\t\t$html_categories\r\n-\t\t\t);\r\n-\t\t\t$html    = $this->get_output( $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseCategoriesBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseCategoriesBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-categories';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'link' => false,\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_text = $attributes['showText'] ?? true;\n+\t\t\t$is_link   = $attributes['isLink'] ?? true;\n+\t\t\t$new_tab   = $attributes['target'] ?? false;\n+\t\t\t$setting   = [\n+\t\t\t\t'is_link' => $is_link,\n+\t\t\t\t'new_tab' => $new_tab,\n+\t\t\t];\n+\t\t\t$label     = sprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) );\n+\t\t\tif ( empty( $show_text ) ) {\n+\t\t\t\t$label = '';\n+\t\t\t}\n+\n+\t\t\t$html_categories = SingleCourseTemplate::instance()->html_categories( $courseModel, $setting );\n+\t\t\tif ( empty( $html_categories ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$content = sprintf(\n+\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\t\t$label,\n+\t\t\t\t$html_categories\n+\t\t\t);\n+\t\t\t$html    = $this->get_output( $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCurriculumBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCurriculumBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCurriculumBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCurriculumBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,84 +1,84 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseCurriculumBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseCurriculumBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-curriculum';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'heading'                       => true,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t\t'h3'   => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_curriculum = SingleCourseTemplate::instance()->html_curriculum( $courseModel, $userModel );\r\n-\t\t\tif ( empty( $html_curriculum ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_curriculum );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseCurriculumBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseCurriculumBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-curriculum';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'heading'                       => true,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t\t'h3'   => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_curriculum = SingleCourseTemplate::instance()->html_curriculum( $courseModel, $userModel );\n+\t\t\tif ( empty( $html_curriculum ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_curriculum );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDeliveryBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDeliveryBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDeliveryBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDeliveryBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseDeliveryBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseDeliveryBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-delivery';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-bookmark-o\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Delivery type', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseOfflineTemplate::instance()->html_deliver_type( $courseModel )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseDeliveryBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseDeliveryBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-delivery';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-bookmark-o\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Delivery type', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseOfflineTemplate::instance()->html_deliver_type( $courseModel )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDescriptionBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDescriptionBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDescriptionBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDescriptionBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class CourseDescriptionBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseDescriptionBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-description';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t\t'heading'    => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$is_list_course = false;\r\n-\t\t\tif ( $block instanceof WP_Block ) {\r\n-\t\t\t\t$is_list_course = $block->context['is_list_course'] ?? false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $is_list_course ) {\r\n-\t\t\t\t$description = SingleCourseTemplate::instance()->html_short_description( $courseModel );\r\n-\t\t\t} else {\r\n-\t\t\t\t$description = SingleCourseTemplate::instance()->html_description( $courseModel );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $description ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$html = $this->get_output( $description );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+use WP_Block;\n+\n+\u002F**\n+ * Class CourseDescriptionBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseDescriptionBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-description';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t\t'heading'    => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$is_list_course = false;\n+\t\t\tif ( $block instanceof WP_Block ) {\n+\t\t\t\t$is_list_course = $block->context['is_list_course'] ?? false;\n+\t\t\t}\n+\n+\t\t\tif ( $is_list_course ) {\n+\t\t\t\t$description = SingleCourseTemplate::instance()->html_short_description( $courseModel );\n+\t\t\t} else {\n+\t\t\t\t$description = SingleCourseTemplate::instance()->html_description( $courseModel );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $description ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$html = $this->get_output( $description );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDurationBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDurationBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDurationBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseDurationBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseDurationBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseDurationBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-duration';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Duration', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_duration( $courseModel )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseDurationBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseDurationBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-duration';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Duration', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_duration( $courseModel )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFaqsBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFaqsBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFaqsBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFaqsBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,83 +1,83 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseFaqsBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseFaqsBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-faqs';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'heading'                       => true,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t\t'h3'   => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_faqs = SingleCourseTemplate::instance()->html_faqs( $courseModel );\r\n-\t\t\tif ( empty( $html_faqs ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_faqs );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseFaqsBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseFaqsBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-faqs';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'heading'                       => true,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t\t'h3'   => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_faqs = SingleCourseTemplate::instance()->html_faqs( $courseModel );\n+\t\t\tif ( empty( $html_faqs ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_faqs );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturedBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturedBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturedBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturedBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,93 +1,93 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\AbstractCourseBlockType;\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseFeaturedBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseFeaturedBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name      = 'course-featured';\r\n-\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'textTransform'                 => false,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => true,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'fontSize'      => true,\r\n-\t\t\t\t\t'textTransform' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'background'                    => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text'       => true,\r\n-\t\t\t\t\t'background' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\t\t$html_content = $singleCourseTemplate->html_featured( $courseModel );\r\n-\t\t\tif ( ! $html_content ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_content, 'div', [ 'style' => 'display:inline-block;' ] );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleCourseElements\\AbstractCourseBlockType;\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseFeaturedBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseFeaturedBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name      = 'course-featured';\n+\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'textTransform'                 => false,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => true,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'fontSize'      => true,\n+\t\t\t\t\t'textTransform' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'color'                => [\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'background'                    => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text'       => true,\n+\t\t\t\t\t'background' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\t\t$html_content = $singleCourseTemplate->html_featured( $courseModel );\n+\t\t\tif ( ! $html_content ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_content, 'div', [ 'style' => 'display:inline-block;' ] );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeatureReviewBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeatureReviewBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeatureReviewBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeatureReviewBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseFeatureReviewBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseFeatureReviewBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-feature-review';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$html_feature_review = SingleCourseTemplate::instance()->html_feature_review( $courseModel, $userModel );\r\n-\r\n-\t\t\tif ( empty( $html_feature_review ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_feature_review );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseFeatureReviewBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseFeatureReviewBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-feature-review';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$html_feature_review = SingleCourseTemplate::instance()->html_feature_review( $courseModel, $userModel );\n+\n+\t\t\tif ( empty( $html_feature_review ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_feature_review );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturesBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturesBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturesBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseFeaturesBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseFeaturesBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseFeaturesBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-features';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t\t'heading'    => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_features = SingleCourseTemplate::instance()->html_features( $courseModel );\r\n-\t\t\tif ( empty( $html_features ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_features );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseFeaturesBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseFeaturesBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-features';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t\t'heading'    => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_features = SingleCourseTemplate::instance()->html_features( $courseModel );\n+\t\t\tif ( empty( $html_features ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_features );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseImageBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseImageBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseImageBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseImageBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,96 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseImageInfoBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseImageBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-image';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$is_link = $attributes['isLink'] ?? true;\r\n-\t\t\t$new_tab = $attributes['target'] ?? false;\r\n-\r\n-\t\t\t$width  = ! empty( $attributes['customWidth'] ) ? absint( $attributes['customWidth'] ) : 500;\r\n-\t\t\t$height = ! empty( $attributes['customHeight'] ) ? absint( $attributes['customHeight'] ) : 300;\r\n-\r\n-\t\t\t$size = $attributes['size'] ?? 'custom';\r\n-\t\t\tif ( $size === 'custom' ) {\r\n-\t\t\t\t$size = [\r\n-\t\t\t\t\t$width,\r\n-\t\t\t\t\t$height,\r\n-\t\t\t\t];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_size = [\r\n-\t\t\t\t'size' => $size,\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_image = SingleCourseTemplate::instance()->html_image( $courseModel, $data_size );\r\n-\r\n-\t\t\tif ( $is_link ) {\r\n-\t\t\t\t$attribute_target = ! empty( $new_tab ) ? 'target=\"_blank\"' : '';\r\n-\t\t\t\t$html_image       = sprintf( '\u003Ca href=\"%s\" %s>%s\u003C\u002Fa>', $courseModel->get_permalink(), $attribute_target, $html_image );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $html_image ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_image );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseImageInfoBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseImageBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-image';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$is_link = $attributes['isLink'] ?? true;\n+\t\t\t$new_tab = $attributes['target'] ?? false;\n+\n+\t\t\t$width  = ! empty( $attributes['customWidth'] ) ? absint( $attributes['customWidth'] ) : 500;\n+\t\t\t$height = ! empty( $attributes['customHeight'] ) ? absint( $attributes['customHeight'] ) : 300;\n+\n+\t\t\t$size = $attributes['size'] ?? 'custom';\n+\t\t\tif ( $size === 'custom' ) {\n+\t\t\t\t$size = [\n+\t\t\t\t\t$width,\n+\t\t\t\t\t$height,\n+\t\t\t\t];\n+\t\t\t}\n+\n+\t\t\t$data_size = [\n+\t\t\t\t'size' => $size,\n+\t\t\t];\n+\n+\t\t\t$html_image = SingleCourseTemplate::instance()->html_image( $courseModel, $data_size );\n+\n+\t\t\tif ( $is_link ) {\n+\t\t\t\t$attribute_target = ! empty( $new_tab ) ? 'target=\"_blank\"' : '';\n+\t\t\t\t$html_image       = sprintf( '\u003Ca href=\"%s\" %s>%s\u003C\u002Fa>', $courseModel->get_permalink(), $attribute_target, $html_image );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $html_image ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_image );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,85 +1,85 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseInstructorBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseInstructorBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-instructor';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_text = $attributes['showText'] ?? true;\r\n-\t\t\t$is_link   = $attributes['isLink'] ?? true;\r\n-\t\t\t$new_tab   = $attributes['target'] ?? false;\r\n-\t\t\t$setting   = [\r\n-\t\t\t\t'is_link' => $is_link,\r\n-\t\t\t\t'new_tab' => $new_tab,\r\n-\t\t\t];\r\n-\t\t\t$label     = sprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) );\r\n-\r\n-\t\t\tif ( ! $show_text ) {\r\n-\t\t\t\t$label = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_instructor = SingleCourseTemplate::instance()->html_instructor( $courseModel, false, $setting );\r\n-\r\n-\t\t\tif ( empty( $html_instructor ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = sprintf(\r\n-\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$label,\r\n-\t\t\t\t$html_instructor\r\n-\t\t\t);\r\n-\t\t\t$html    = $this->get_output( $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseInstructorBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseInstructorBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-instructor';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_text = $attributes['showText'] ?? true;\n+\t\t\t$is_link   = $attributes['isLink'] ?? true;\n+\t\t\t$new_tab   = $attributes['target'] ?? false;\n+\t\t\t$setting   = [\n+\t\t\t\t'is_link' => $is_link,\n+\t\t\t\t'new_tab' => $new_tab,\n+\t\t\t];\n+\t\t\t$label     = sprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) );\n+\n+\t\t\tif ( ! $show_text ) {\n+\t\t\t\t$label = '';\n+\t\t\t}\n+\n+\t\t\t$html_instructor = SingleCourseTemplate::instance()->html_instructor( $courseModel, false, $setting );\n+\n+\t\t\tif ( empty( $html_instructor ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$content = sprintf(\n+\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\t\t$label,\n+\t\t\t\t$html_instructor\n+\t\t\t);\n+\t\t\t$html    = $this->get_output( $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorInfoBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorInfoBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorInfoBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorInfoBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,73 +1,73 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseInstructorInfoBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseInstructorInfoBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-instructor-info';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t\t'heading'    => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_instructor_info = SingleCourseModernLayout::instance()->html_instructor_info( $courseModel, $userModel );\r\n-\t\t\tif ( empty( $html_instructor_info ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_instructor_info );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseInstructorInfoBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseInstructorInfoBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-instructor-info';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t\t'heading'    => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_instructor_info = SingleCourseModernLayout::instance()->html_instructor_info( $courseModel, $userModel );\n+\t\t\tif ( empty( $html_instructor_info ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_instructor_info );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLessonBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLessonBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLessonBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLessonBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseLessonBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseLessonBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-lesson';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Lesson', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_count_item( $courseModel, LP_LESSON_CPT )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseLessonBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseLessonBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-lesson';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Lesson', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_count_item( $courseModel, LP_LESSON_CPT )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLevelBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLevelBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLevelBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLevelBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseLevelBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseLevelBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-level';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Level', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_level( $courseModel )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseLevelBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseLevelBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-level';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Level', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_level( $courseModel )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseMaterialBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseMaterialBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseMaterialBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseMaterialBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseMaterialBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseMaterialBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-material';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_material = SingleCourseTemplate::instance()->html_material( $courseModel, $userModel );\r\n-\r\n-\t\t\tif ( empty( $html_material ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_material );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseMaterialBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseMaterialBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-material';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_material = SingleCourseTemplate::instance()->html_material( $courseModel, $userModel );\n+\n+\t\t\tif ( empty( $html_material ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_material );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseOfflineLessonBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseOfflineLessonBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseOfflineLessonBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseOfflineLessonBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseOfflineLessonBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseOfflineLessonBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-offline-lesson';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Lesson', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseOfflineTemplate::instance()->html_lesson_info( $courseModel )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseOfflineLessonBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseOfflineLessonBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-offline-lesson';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel || ! $courseModel->is_offline() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Lesson', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseOfflineTemplate::instance()->html_lesson_info( $courseModel )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCoursePriceBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCoursePriceBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCoursePriceBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCoursePriceBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CoursePriceInfoBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CoursePriceBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-price';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = $this->get_user();\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\t\tif ( $userCourseModel ) {\r\n-\t\t\t\t\treturn $html;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_price = SingleCourseTemplate::instance()->html_price( $courseModel );\r\n-\t\t\tif ( empty( $html_price ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_price );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CoursePriceInfoBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CoursePriceBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-price';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$userModel = $this->get_user();\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\t\tif ( $userCourseModel ) {\n+\t\t\t\t\treturn $html;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$html_price = SingleCourseTemplate::instance()->html_price( $courseModel );\n+\t\t\tif ( empty( $html_price ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_price );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseProgressBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseProgressBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseProgressBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseProgressBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseProgressBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseProgressBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-progress';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\t$userModel   = $this->get_user();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_price = SingleCourseModernLayout::instance()->html_info_learning( $courseModel, $userModel );\r\n-\t\t\tif ( empty( $html_price ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_price );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseProgressBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseProgressBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-progress';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\t$userModel   = $this->get_user();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_price = SingleCourseModernLayout::instance()->html_info_learning( $courseModel, $userModel );\n+\t\t\tif ( empty( $html_price ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_price );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseQuizBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseQuizBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseQuizBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseQuizBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseQuizBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseQuizBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-quiz';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Quiz', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_count_item( $courseModel, LP_QUIZ_CPT )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseQuizBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseQuizBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-quiz';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Quiz', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_count_item( $courseModel, LP_QUIZ_CPT )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseRequirementsBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseRequirementsBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseRequirementsBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseRequirementsBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseRequirementsBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseRequirementsBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-requirements';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t\t'heading'    => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_requirements = SingleCourseTemplate::instance()->html_requirements( $courseModel );\r\n-\t\t\tif ( empty( $html_requirements ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_requirements );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseRequirementsBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseRequirementsBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-requirements';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t\t'heading'    => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_requirements = SingleCourseTemplate::instance()->html_requirements( $courseModel );\n+\t\t\tif ( empty( $html_requirements ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_requirements );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseShareBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseShareBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseShareBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseShareBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseShareBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseShareBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-share';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_share = SingleCourseModernLayout::instance()->html_share( $courseModel );\r\n-\r\n-\t\t\tif ( empty( $html_share ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_share );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseShareBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseShareBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-share';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_share = SingleCourseModernLayout::instance()->html_share( $courseModel );\n+\n+\t\t\tif ( empty( $html_share ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_share );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseStudentBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseStudentBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseStudentBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseStudentBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseStudentBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseStudentBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-student';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => false,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\r\n-\t\t\t],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'background'                    => false,\r\n-\t\t\t\t'text'                          => true,\r\n-\t\t\t\t'link'                          => false,\r\n-\t\t\t\t'gradients'                     => false,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'text' => true,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding'                       => true,\r\n-\t\t\t\t'margin'                        => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'margin'  => false,\r\n-\t\t\t\t\t'padding' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\r\n-\t\t\t$show_label = $attributes['showLabel'] ?? true;\r\n-\t\t\t$section    = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\r\n-\t\t\t\t'info-left'  => sprintf(\r\n-\t\t\t\t\t'%s',\r\n-\t\t\t\t\t$show_icon || $show_label ?\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>' : '',\r\n-\t\t\t\t\t\t\t$show_label ? __( 'Student', 'learnpress' ) . ':' : ''\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t: ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'info-right' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tSingleCourseTemplate::instance()->html_count_student( $courseModel )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseStudentBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseStudentBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-student';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => false,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [ 'fontSize' => true ],\n+\t\t\t],\n+\t\t\t'color'      => [\n+\t\t\t\t'background'                    => false,\n+\t\t\t\t'text'                          => true,\n+\t\t\t\t'link'                          => false,\n+\t\t\t\t'gradients'                     => false,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'text' => true,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding'                       => true,\n+\t\t\t\t'margin'                        => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'margin'  => false,\n+\t\t\t\t\t'padding' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$show_icon  = $attributes['showIcon'] ?? true;\n+\t\t\t$show_label = $attributes['showLabel'] ?? true;\n+\t\t\t$section    = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"info-meta-item\">',\n+\t\t\t\t'info-left'  => sprintf(\n+\t\t\t\t\t'%s',\n+\t\t\t\t\t$show_icon || $show_label ?\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"info-meta-left\">%s%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\t$show_icon ? '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>' : '',\n+\t\t\t\t\t\t\t$show_label ? __( 'Student', 'learnpress' ) . ':' : ''\n+\t\t\t\t\t\t)\n+\t\t\t\t\t\t: ''\n+\t\t\t\t),\n+\t\t\t\t'info-right' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tSingleCourseTemplate::instance()->html_count_student( $courseModel )\n+\t\t\t\t),\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = $this->get_output( Template::combine_components( $section ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTargetAudiencesBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTargetAudiencesBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTargetAudiencesBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTargetAudiencesBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseTargetAudiencesBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseTargetAudiencesBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name = 'course-target-audiences';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t\t'heading'    => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_target_audiences = SingleCourseTemplate::instance()->html_target( $courseModel );\r\n-\t\t\tif ( empty( $html_target_audiences ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_target_audiences );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseTargetAudiencesBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseTargetAudiencesBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name = 'course-target-audiences';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t\t'heading'    => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_target_audiences = SingleCourseTemplate::instance()->html_target( $courseModel );\n+\t\t\tif ( empty( $html_target_audiences ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_target_audiences );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTitleBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTitleBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTitleBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseTitleBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseTitleBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class CourseTitleBlockType extends AbstractCourseBlockType {\r\n-\tpublic $block_name      = 'course-title';\r\n-\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                      => true,\r\n-\t\t\t\t'lineHeight'                    => false,\r\n-\t\t\t\t'fontWeight'                    => true,\r\n-\t\t\t\t'textTransform'                 => false,\r\n-\t\t\t\t'__experimentalFontFamily'      => false,\r\n-\t\t\t\t'__experimentalTextDecoration'  => false,\r\n-\t\t\t\t'__experimentalFontStyle'       => true,\r\n-\t\t\t\t'__experimentalFontWeight'      => true,\r\n-\t\t\t\t'__experimentalLetterSpacing'   => false,\r\n-\t\t\t\t'__experimentalTextTransform'   => true,\r\n-\t\t\t\t'__experimentalDefaultControls' => [\r\n-\t\t\t\t\t'fontSize'      => true,\r\n-\t\t\t\t\t'textTransform' => false,\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t$tag                  = sanitize_text_field( $attributes['tag'] ?? 'h3' );\r\n-\t\t\t$allowed_aligns       = [ 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ];\r\n-\t\t\t$tag                  = in_array( $tag, $allowed_aligns, true ) ? $tag : 'h3';\r\n-\t\t\t$is_link              = $attributes['isLink'] ?? false;\r\n-\t\t\t$target               = $attributes['target'] ?? false;\r\n-\r\n-\t\t\t$html_content = $singleCourseTemplate->html_title( $courseModel );\r\n-\t\t\tif ( $is_link ) {\r\n-\t\t\t\t$html_content = sprintf(\r\n-\t\t\t\t\t'\u003Ca class=\"course-permalink\" href=\"%s\" %s>%s\u003C\u002Fa>',\r\n-\t\t\t\t\tesc_url( $courseModel->get_permalink() ),\r\n-\t\t\t\t\t$target ? 'target=\"_blank\"' : '',\r\n-\t\t\t\t\t$singleCourseTemplate->html_title( $courseModel )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_content, $tag );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseElements;\n+\n+use LearnPress\\Gutenberg\\Utils\\StyleAttributes;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseTitleBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class CourseTitleBlockType extends AbstractCourseBlockType {\n+\tpublic $block_name      = 'course-title';\n+\tpublic $path_block_json = LP_PLUGIN_PATH . 'assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                      => true,\n+\t\t\t\t'lineHeight'                    => false,\n+\t\t\t\t'fontWeight'                    => true,\n+\t\t\t\t'textTransform'                 => false,\n+\t\t\t\t'__experimentalFontFamily'      => false,\n+\t\t\t\t'__experimentalTextDecoration'  => false,\n+\t\t\t\t'__experimentalFontStyle'       => true,\n+\t\t\t\t'__experimentalFontWeight'      => true,\n+\t\t\t\t'__experimentalLetterSpacing'   => false,\n+\t\t\t\t'__experimentalTextTransform'   => true,\n+\t\t\t\t'__experimentalDefaultControls' => [\n+\t\t\t\t\t'fontSize'      => true,\n+\t\t\t\t\t'textTransform' => false,\n+\t\t\t\t],\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t$tag                  = sanitize_text_field( $attributes['tag'] ?? 'h3' );\n+\t\t\t$allowed_aligns       = [ 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ];\n+\t\t\t$tag                  = in_array( $tag, $allowed_aligns, true ) ? $tag : 'h3';\n+\t\t\t$is_link              = $attributes['isLink'] ?? false;\n+\t\t\t$target               = $attributes['target'] ?? false;\n+\n+\t\t\t$html_content = $singleCourseTemplate->html_title( $courseModel );\n+\t\t\tif ( $is_link ) {\n+\t\t\t\t$html_content = sprintf(\n+\t\t\t\t\t'\u003Ca class=\"course-permalink\" href=\"%s\" %s>%s\u003C\u002Fa>',\n+\t\t\t\t\tesc_url( $courseModel->get_permalink() ),\n+\t\t\t\t\t$target ? 'target=\"_blank\"' : '',\n+\t\t\t\t\t$singleCourseTemplate->html_title( $courseModel )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_content, $tag );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FAbstractCourseItemBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FAbstractCourseItemBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FAbstractCourseItemBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FAbstractCourseItemBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use WP_Block;\r\n-\r\n-\u002F**\r\n- * Class AbstractCourseItemBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-abstract class AbstractCourseItemBlockType extends AbstractBlockType {\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @param $attributes\r\n-\t * @param WP_Block|null $block\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t *\u002F\r\n-\tpublic function get_course( $attributes, $block = null ) {\r\n-\t\tif ( $block instanceof WP_Block ) {\r\n-\t\t\t$courseModel = $block->context['courseModel'] ?? false;\r\n-\t\t\tif ( $courseModel instanceof CourseModel ) {\r\n-\t\t\t\treturn $courseModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\r\n-\t\treturn CourseModel::find( $courseId, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user model\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t *\u002F\r\n-\tpublic function get_user() {\r\n-\t\t$userId = get_current_user_id();\r\n-\t\treturn UserModel::find( $userId, true );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use WP_Block;\n+\n+\u002F**\n+ * Class AbstractCourseItemBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+abstract class AbstractCourseItemBlockType extends AbstractBlockType {\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @param $attributes\n+\t * @param WP_Block|null $block\n+\t *\n+\t * @return false|CourseModel\n+\t *\u002F\n+\tpublic function get_course( $attributes, $block = null ) {\n+\t\tif ( $block instanceof WP_Block ) {\n+\t\t\t$courseModel = $block->context['courseModel'] ?? false;\n+\t\t\tif ( $courseModel instanceof CourseModel ) {\n+\t\t\t\treturn $courseModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\n+\t\treturn CourseModel::find( $courseId, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get user model\n+\t *\n+\t * @return false|UserModel\n+\t *\u002F\n+\tpublic function get_user() {\n+\t\t$userId = get_current_user_id();\n+\t\treturn UserModel::find( $userId, true );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCloseBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCloseBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCloseBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCloseBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemCloseBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemCloseBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-close';\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_progress = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\" class=\"back-course\" aria-label=\"%s\" >\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fa>',\r\n-\t\t\t\tesc_url_raw( $courseModel->get_permalink() ),\r\n-\t\t\t\tesc_attr__( 'Back to course', 'learnpress' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = $this->get_output( $html_progress );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemCloseBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemCloseBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-close';\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_progress = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\" class=\"back-course\" aria-label=\"%s\" >\n+\t\t\t\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fa>',\n+\t\t\t\tesc_url_raw( $courseModel->get_permalink() ),\n+\t\t\t\tesc_attr__( 'Back to course', 'learnpress' )\n+\t\t\t);\n+\n+\t\t\t$html = $this->get_output( $html_progress );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCommentBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCommentBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCommentBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCommentBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LearnPress;\r\n-use LP_Debug;\r\n-use LP_Global;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemCommentBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemCommentBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-comment';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\ttry {\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tLearnPress::instance()->template( 'course' )->course_item_comments();\r\n-\t\t\t$html_comment = ob_get_clean();\r\n-\r\n-\t\t\t$html = $this->get_output( $html_comment );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LearnPress;\n+use LP_Debug;\n+use LP_Global;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemCommentBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemCommentBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-comment';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\ttry {\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\n+\t\t\tob_start();\n+\t\t\tLearnPress::instance()->template( 'course' )->course_item_comments();\n+\t\t\t$html_comment = ob_get_clean();\n+\n+\t\t\t$html = $this->get_output( $html_comment );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemContentBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemContentBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemContentBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemContentBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LearnPress;\r\n-use LP_Debug;\r\n-use LP_Global;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemContentBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemContentBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-content';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tLearnPress::instance()->template( 'course' )->course_content_item();\r\n-\t\t\t$html_content = ob_get_clean();\r\n-\t\t\t$html         = $this->get_output( $html_content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LearnPress;\n+use LP_Debug;\n+use LP_Global;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemContentBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemContentBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-content';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\n+\t\t\tob_start();\n+\t\t\tLearnPress::instance()->template( 'course' )->course_content_item();\n+\t\t\t$html_content = ob_get_clean();\n+\t\t\t$html         = $this->get_output( $html_content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCurriculumBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCurriculumBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCurriculumBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemCurriculumBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,76 +1,76 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LearnPress;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemCurriculumBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemCurriculumBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-curriculum';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\t\tglobal $post;\r\n-\t\tsetup_postdata( $post );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel            = UserModel::find( get_current_user_id(), true );\r\n-\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t$html_curriculum      = $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\r\n-\r\n-\t\t\t$html = $this->get_output( $html_curriculum );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LearnPress;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemCurriculumBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemCurriculumBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-curriculum';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\t\tglobal $post;\n+\t\tsetup_postdata( $post );\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$userModel            = UserModel::find( get_current_user_id(), true );\n+\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t$html_curriculum      = $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\n+\n+\t\t\t$html = $this->get_output( $html_curriculum );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemHiddenSidebarBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemHiddenSidebarBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemHiddenSidebarBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemHiddenSidebarBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,66 +1,66 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemHiddenSidebarBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemHiddenSidebarBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-hidden-sidebar';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_hidden_sidebar = sprintf( '\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\" \u002F>' );\r\n-\t\t\t$html                = $this->get_output( $html_hidden_sidebar );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemHiddenSidebarBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemHiddenSidebarBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-hidden-sidebar';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_hidden_sidebar = sprintf( '\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\" \u002F>' );\n+\t\t\t$html                = $this->get_output( $html_hidden_sidebar );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemNavigationBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemNavigationBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemNavigationBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemNavigationBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LearnPress;\r\n-use LP_Debug;\r\n-use LP_Template_Course;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemNavigationBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemNavigationBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-navigation';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tglobal $post;\r\n-\t\t\tsetup_postdata( $post );\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tLearnPress::instance()->template( 'course' )->popup_footer_nav();\r\n-\t\t\t$html_navigation = ob_get_clean();\r\n-\t\t\t$html            = $this->get_output( $html_navigation );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LearnPress;\n+use LP_Debug;\n+use LP_Template_Course;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemNavigationBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemNavigationBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-navigation';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tglobal $post;\n+\t\t\tsetup_postdata( $post );\n+\n+\t\t\tob_start();\n+\t\t\tLearnPress::instance()->template( 'course' )->popup_footer_nav();\n+\t\t\t$html_navigation = ob_get_clean();\n+\t\t\t$html            = $this->get_output( $html_navigation );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemProgressBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemProgressBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemProgressBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemProgressBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,98 +1,98 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemProgressBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemProgressBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-progress';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user   = learn_press_get_current_user();\r\n-\t\t\t$course = learn_press_get_course();\r\n-\r\n-\t\t\tif ( ! $user || ! $course ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percentage      = 0;\r\n-\t\t\t$total_items     = 0;\r\n-\t\t\t$completed_items = 0;\r\n-\t\t\t$course_data     = $user->get_course_data( $course->get_id() );\r\n-\r\n-\t\t\tif ( $course_data && ! empty( $course_data->get_user_id() ) && ! $course->is_no_required_enroll() ) {\r\n-\t\t\t\t$course_results  = $course_data->get_result();\r\n-\t\t\t\t$completed_items = $course_results['completed_items'];\r\n-\t\t\t\t$total_items     = $course_results['count_items'];\r\n-\t\t\t\t$percentage      = $course_results['count_items'] ? absint( $course_results['completed_items'] \u002F $course_results['count_items'] * 100 ) : 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_progress = '';\r\n-\r\n-\t\t\tif ( $user->has_enrolled_or_finished( $course->get_id() ) ) {\r\n-\t\t\t\t$html_progress = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"items-progress\" data-total-items=\"%s\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"items-completed\">%s\u003C\u002Fspan> of %d items\r\n-\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"learn-press-progress\">\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"%s%%\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$total_items,\r\n-\t\t\t\t\tesc_html( $completed_items ),\r\n-\t\t\t\t\tesc_html( $course->count_items() ),\r\n-\t\t\t\t\tesc_attr( $percentage )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = $this->get_output( $html_progress );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemProgressBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemProgressBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-progress';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$user   = learn_press_get_current_user();\n+\t\t\t$course = learn_press_get_course();\n+\n+\t\t\tif ( ! $user || ! $course ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$percentage      = 0;\n+\t\t\t$total_items     = 0;\n+\t\t\t$completed_items = 0;\n+\t\t\t$course_data     = $user->get_course_data( $course->get_id() );\n+\n+\t\t\tif ( $course_data && ! empty( $course_data->get_user_id() ) && ! $course->is_no_required_enroll() ) {\n+\t\t\t\t$course_results  = $course_data->get_result();\n+\t\t\t\t$completed_items = $course_results['completed_items'];\n+\t\t\t\t$total_items     = $course_results['count_items'];\n+\t\t\t\t$percentage      = $course_results['count_items'] ? absint( $course_results['completed_items'] \u002F $course_results['count_items'] * 100 ) : 0;\n+\t\t\t}\n+\n+\t\t\t$html_progress = '';\n+\n+\t\t\tif ( $user->has_enrolled_or_finished( $course->get_id() ) ) {\n+\t\t\t\t$html_progress = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"items-progress\" data-total-items=\"%s\">\n+\t\t\t\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"items-completed\">%s\u003C\u002Fspan> of %d items\n+\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cdiv class=\"learn-press-progress\">\n+\t\t\t\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"%s%%\">\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\t$total_items,\n+\t\t\t\t\tesc_html( $completed_items ),\n+\t\t\t\t\tesc_html( $course->count_items() ),\n+\t\t\t\t\tesc_attr( $percentage )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$html = $this->get_output( $html_progress );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemSearchBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemSearchBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemSearchBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleCourseItemElements\u002FItemSearchBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,77 +1,77 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\r\n-\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class ItemSearchBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class ItemSearchBlockType extends AbstractCourseItemBlockType {\r\n-\tpublic $block_name = 'item-search';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'                => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'shadow'               => true,\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course( $attributes, $block );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_search = sprintf(\r\n-\t\t\t\t'\u003Cform method=\"post\" class=\"search-course\">\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"s\" autocomplete=\"off\"placeholder=\"%s\"\u002F>\r\n-\t\t\t\t\t\u003Cbutton name=\"submit\" aria-label=\"%s\">\r\n-\t\t\t\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton type=\"button\" class=\"clear\">\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fform>',\r\n-\t\t\t\tesc_attr_x( 'Search for course content', 'search course input placeholder', 'learnpress' ),\r\n-\t\t\t\tesc_html_x( 'Search for course content', 'search course input placeholder', 'learnpress' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = $this->get_output( $html_search );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleCourseItemElements;\n+\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class ItemSearchBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class ItemSearchBlockType extends AbstractCourseItemBlockType {\n+\tpublic $block_name = 'item-search';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'                => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'shadow'               => true,\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course( $attributes, $block );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html_search = sprintf(\n+\t\t\t\t'\u003Cform method=\"post\" class=\"search-course\">\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"s\" autocomplete=\"off\"placeholder=\"%s\"\u002F>\n+\t\t\t\t\t\u003Cbutton name=\"submit\" aria-label=\"%s\">\n+\t\t\t\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton type=\"button\" class=\"clear\">\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fform>',\n+\t\t\t\tesc_attr_x( 'Search for course content', 'search course input placeholder', 'learnpress' ),\n+\t\t\t\tesc_html_x( 'Search for course content', 'search course input placeholder', 'learnpress' )\n+\t\t\t);\n+\n+\t\t\t$html = $this->get_output( $html_search );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructor\u002FSingleInstructorBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructor\u002FSingleInstructorBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructor\u002FSingleInstructorBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructor\u002FSingleInstructorBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructor;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\u002F**\r\n- * Class SingleInstructorBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleInstructorBlockType extends AbstractBlockType {\r\n-\tpublic $block_name = 'single-instructor';\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\t$class_name = $attributes['className'] ?? '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$html = sprintf(\r\n-\t\t\t\t'\u003Carticle class=\"lp-content-area %s\"> \u003Cdiv class=\"lp-single-instructor\"> %s \u003C\u002Fdiv> \u003C\u002Farticle>',\r\n-\t\t\t\t$class_name,\r\n-\t\t\t\t$content\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructor;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LP_Debug;\n+use Throwable;\n+\u002F**\n+ * Class SingleInstructorBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleInstructorBlockType extends AbstractBlockType {\n+\tpublic $block_name = 'single-instructor';\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\t$class_name = $attributes['className'] ?? '';\n+\n+\t\ttry {\n+\t\t\t$html = sprintf(\n+\t\t\t\t'\u003Carticle class=\"lp-content-area %s\"> \u003Cdiv class=\"lp-single-instructor\"> %s \u003C\u002Fdiv> \u003C\u002Farticle>',\n+\t\t\t\t$class_name,\n+\t\t\t\t$content\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FAbstractSingleInstructorBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FAbstractSingleInstructorBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FAbstractSingleInstructorBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FAbstractSingleInstructorBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * Class AbstractSingleInstructorBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-abstract class AbstractSingleInstructorBlockType extends AbstractBlockType {\r\n-\t\u002F**\r\n-\t * @var string Screen Template want to display - Field of LP\r\n-\t *\u002F\r\n-\t\u002F\u002F public $display_on_templates = [\r\n-\t\u002F\u002F \t'lp-instructor',\r\n-\t\u002F\u002F ];\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @param $attributes\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t *\u002F\r\n-\tpublic function get_course( $attributes ) {\r\n-\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\r\n-\t\treturn CourseModel::find( $courseId, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user model\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t *\u002F\r\n-\tpublic function get_user() {\r\n-\t\t$userId = get_current_user_id();\r\n-\t\treturn UserModel::find( $userId, true );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Class AbstractSingleInstructorBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+abstract class AbstractSingleInstructorBlockType extends AbstractBlockType {\n+\t\u002F**\n+\t * @var string Screen Template want to display - Field of LP\n+\t *\u002F\n+\t\u002F\u002F public $display_on_templates = [\n+\t\u002F\u002F \t'lp-instructor',\n+\t\u002F\u002F ];\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @param $attributes\n+\t *\n+\t * @return false|CourseModel\n+\t *\u002F\n+\tpublic function get_course( $attributes ) {\n+\t\t$courseId = ! empty( $attributes['courseId'] ) ? (int) $attributes['courseId'] : get_the_ID();\n+\t\treturn CourseModel::find( $courseId, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get user model\n+\t *\n+\t * @return false|UserModel\n+\t *\u002F\n+\tpublic function get_user() {\n+\t\t$userId = get_current_user_id();\n+\t\treturn UserModel::find( $userId, true );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorAvatarBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorAvatarBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorAvatarBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorAvatarBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorAvatarBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorAvatarBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-avatar';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$html_avatar = SingleInstructorTemplate::instance()->html_avatar_edit( $instructor );\r\n-\t\t\t$html        = $this->get_output( $html_avatar );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorAvatarBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorAvatarBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-avatar';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$html_avatar = SingleInstructorTemplate::instance()->html_avatar_edit( $instructor );\n+\t\t\t$html        = $this->get_output( $html_avatar );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorBackgroundBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorBackgroundBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorBackgroundBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorBackgroundBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,82 +1,82 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorBackgroundBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorBackgroundBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-background';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'      => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography' => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'    => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->enqueue_assets();\r\n-\t\t\t$this->get_class_hash();\r\n-\t\t\t$this->inline_styles( $attributes );\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\techo ProfileTemplate::instance()->html_cover_image( $instructor );\r\n-\t\t\t$html_background = ob_get_clean();\r\n-\r\n-\t\t\t$html = $this->get_output_with_class_hash( $attributes, $html_background, );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\tpublic function get_inline_style( $attributes ) {\r\n-\t\t$size     = isset( $attributes['size'] ) ? sprintf( 'background-size: %s;', $attributes['size'] ) : 'background-size: cover;';\r\n-\t\t$position = isset( $attributes['position'] ) ? sprintf( 'background-position: %s;', $attributes['position'] ) : 'background-position: center;';\r\n-\t\t$repeat   = isset( $attributes['repeat'] ) ? 'background-repeat: repeat;' : 'background-repeat: no-repeat;';\r\n-\t\treturn '.' . $this->class_hash . ' .lp-user-cover-image_background {' . $size . $position . $repeat . '}';\r\n-\t}\r\n-\r\n-\tpublic function inline_styles( $attributes ) {\r\n-\t\t$styles = $this->get_inline_style( $attributes );\r\n-\t\twp_add_inline_style( 'lp-blocks-style', $styles );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorBackgroundBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorBackgroundBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-background';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'      => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography' => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'    => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$this->enqueue_assets();\n+\t\t\t$this->get_class_hash();\n+\t\t\t$this->inline_styles( $attributes );\n+\n+\t\t\tob_start();\n+\t\t\techo ProfileTemplate::instance()->html_cover_image( $instructor );\n+\t\t\t$html_background = ob_get_clean();\n+\n+\t\t\t$html = $this->get_output_with_class_hash( $attributes, $html_background, );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\tpublic function get_inline_style( $attributes ) {\n+\t\t$size     = isset( $attributes['size'] ) ? sprintf( 'background-size: %s;', $attributes['size'] ) : 'background-size: cover;';\n+\t\t$position = isset( $attributes['position'] ) ? sprintf( 'background-position: %s;', $attributes['position'] ) : 'background-position: center;';\n+\t\t$repeat   = isset( $attributes['repeat'] ) ? 'background-repeat: repeat;' : 'background-repeat: no-repeat;';\n+\t\treturn '.' . $this->class_hash . ' .lp-user-cover-image_background {' . $size . $position . $repeat . '}';\n+\t}\n+\n+\tpublic function inline_styles( $attributes ) {\n+\t\t$styles = $this->get_inline_style( $attributes );\n+\t\twp_add_inline_style( 'lp-blocks-style', $styles );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorCourseBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorCourseBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorCourseBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorCourseBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorCourseBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorCourseBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-course';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$hidden = $attributes['hidden'] ?? '';\r\n-\t\t\tob_start();\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"wrapper-instructor-total-courses\">',\r\n-\t\t\t\t'icon'        => $hidden === 'icon' ? '' : '\u003Ci class=\"lp-ico lp-icon-courses\">\u003C\u002Fi>',\r\n-\t\t\t\t'content'     => SingleInstructorTemplate::instance()->html_count_courses( $instructor, $hidden ),\r\n-\t\t\t\t'end_wrapper' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_course  = Template::combine_components( $html_wrapper );\r\n-\t\t\t$html         = $this->get_output( $html_course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorCourseBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorCourseBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-course';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$hidden = $attributes['hidden'] ?? '';\n+\t\t\tob_start();\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"wrapper-instructor-total-courses\">',\n+\t\t\t\t'icon'        => $hidden === 'icon' ? '' : '\u003Ci class=\"lp-ico lp-icon-courses\">\u003C\u002Fi>',\n+\t\t\t\t'content'     => SingleInstructorTemplate::instance()->html_count_courses( $instructor, $hidden ),\n+\t\t\t\t'end_wrapper' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_course  = Template::combine_components( $html_wrapper );\n+\t\t\t$html         = $this->get_output( $html_course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorDescriptionBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorDescriptionBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorDescriptionBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorDescriptionBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorDescriptionBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorDescriptionBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-description';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'spacing'              => [\r\n-\t\t\t\t'padding' => true,\r\n-\t\t\t\t'margin'  => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\techo SingleInstructorTemplate::instance()->html_description( $instructor );\r\n-\t\t\t$html_description = ob_get_clean();\r\n-\r\n-\t\t\t$html = $this->get_output( $html_description );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorDescriptionBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorDescriptionBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-description';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'spacing'              => [\n+\t\t\t\t'padding' => true,\n+\t\t\t\t'margin'  => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\tob_start();\n+\t\t\techo SingleInstructorTemplate::instance()->html_description( $instructor );\n+\t\t\t$html_description = ob_get_clean();\n+\n+\t\t\t$html = $this->get_output( $html_description );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorNameBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorNameBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorNameBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorNameBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorNameBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorNameBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-name';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$html_name = sprintf( '\u003Ch2>%s\u003C\u002Fh2>', SingleInstructorTemplate::instance()->html_display_name( $instructor ) );\r\n-\t\t\t$html      = $this->get_output( $html_name );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorNameBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorNameBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-name';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$html_name = sprintf( '\u003Ch2>%s\u003C\u002Fh2>', SingleInstructorTemplate::instance()->html_display_name( $instructor ) );\n+\t\t\t$html      = $this->get_output( $html_name );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorSocialBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorSocialBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorSocialBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorSocialBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorSocialBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorSocialBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-social';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$setting             = [];\r\n-\t\t\t$setting['target']   = $attributes['target'] ?? false;\r\n-\t\t\t$setting['nofollow'] = $attributes['nofollow'] ?? false;\r\n-\t\t\t$html_social         = SingleInstructorTemplate::instance()->html_social( $instructor );\r\n-\t\t\t$html                = $this->get_output( $html_social );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorSocialBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorSocialBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-social';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$setting             = [];\n+\t\t\t$setting['target']   = $attributes['target'] ?? false;\n+\t\t\t$setting['nofollow'] = $attributes['nofollow'] ?? false;\n+\t\t\t$html_social         = SingleInstructorTemplate::instance()->html_social( $instructor );\n+\t\t\t$html                = $this->get_output( $html_social );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorStudentBlockType.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorStudentBlockType.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorStudentBlockType.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FBlocks\u002FSingleInstructorElements\u002FInstructorStudentBlockType.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class InstructorStudentBlockType\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class InstructorStudentBlockType extends AbstractSingleInstructorBlockType {\r\n-\tpublic $block_name = 'instructor-student';\r\n-\r\n-\tpublic function get_supports(): array {\r\n-\t\treturn [\r\n-\t\t\t'align'      => [ 'wide', 'full' ],\r\n-\t\t\t'color'                => [\r\n-\t\t\t\t'gradients'  => true,\r\n-\t\t\t\t'background' => true,\r\n-\t\t\t\t'text'       => true,\r\n-\t\t\t],\r\n-\t\t\t'typography'           => [\r\n-\t\t\t\t'fontSize'                    => true,\r\n-\t\t\t\t'__experimentalFontWeight'    => true,\r\n-\t\t\t\t'__experimentalTextTransform' => true,\r\n-\t\t\t],\r\n-\t\t\t'__experimentalBorder' => [\r\n-\t\t\t\t'color'  => true,\r\n-\t\t\t\t'radius' => true,\r\n-\t\t\t\t'width'  => true,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of block tag\r\n-\t *\r\n-\t * @param array $attributes | Attributes of block tag.\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\t\t\t$hidden = $attributes['hidden'] ?? '';\r\n-\t\t\tob_start();\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"wrapper-instructor-total-students\">',\r\n-\t\t\t\t'icon'        => $hidden === 'icon' ? '' : '\u003Ci class=\"lp-ico lp-icon-students\">\u003C\u002Fi>',\r\n-\t\t\t\t'content'     => SingleInstructorTemplate::instance()->html_count_students( $instructor, $hidden ),\r\n-\t\t\t\t'end_wrapper' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_student = Template::combine_components( $html_wrapper );\r\n-\t\t\t$html         = $this->get_output( $html_student );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements;\n+\n+use LearnPress\\Gutenberg\\Blocks\\SingleInstructorElements\\AbstractSingleInstructorBlockType;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class InstructorStudentBlockType\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class InstructorStudentBlockType extends AbstractSingleInstructorBlockType {\n+\tpublic $block_name = 'instructor-student';\n+\n+\tpublic function get_supports(): array {\n+\t\treturn [\n+\t\t\t'align'      => [ 'wide', 'full' ],\n+\t\t\t'color'                => [\n+\t\t\t\t'gradients'  => true,\n+\t\t\t\t'background' => true,\n+\t\t\t\t'text'       => true,\n+\t\t\t],\n+\t\t\t'typography'           => [\n+\t\t\t\t'fontSize'                    => true,\n+\t\t\t\t'__experimentalFontWeight'    => true,\n+\t\t\t\t'__experimentalTextTransform' => true,\n+\t\t\t],\n+\t\t\t'__experimentalBorder' => [\n+\t\t\t\t'color'  => true,\n+\t\t\t\t'radius' => true,\n+\t\t\t\t'width'  => true,\n+\t\t\t],\n+\t\t];\n+\t}\n+\n+\t\u002F**\n+\t * Render content of block tag\n+\t *\n+\t * @param array $attributes | Attributes of block tag.\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function render_content_block_template( array $attributes, $content, $block ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = SingleInstructorTemplate::instance()->detect_instructor_by_page();\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\t\t\t$hidden = $attributes['hidden'] ?? '';\n+\t\t\tob_start();\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"wrapper-instructor-total-students\">',\n+\t\t\t\t'icon'        => $hidden === 'icon' ? '' : '\u003Ci class=\"lp-ico lp-icon-students\">\u003C\u002Fi>',\n+\t\t\t\t'content'     => SingleInstructorTemplate::instance()->html_count_students( $instructor, $hidden ),\n+\t\t\t\t'end_wrapper' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_student = Template::combine_components( $html_wrapper );\n+\t\t\t$html         = $this->get_output( $html_student );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FGutenbergHandleMain.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FGutenbergHandleMain.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FGutenbergHandleMain.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FGutenbergHandleMain.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,417 +1,417 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg;\r\n-\r\n-use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\r\n-use LearnPress\\Gutenberg\\Templates\\AbstractBlockTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\SingleCourseItemBlockTemplate;\r\n-use LearnPress\\Gutenberg\\Templates\\SingleCourseOfflineBlockTemplate;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use WP_Block_Template;\r\n-use WP_Post;\r\n-\r\n-\u002F**\r\n- * Class GutenbergHandleMain\r\n- *\r\n- * Handle register, render block template\r\n- * @since 4.2.8.3 Convert from old class Block_Template_Handle\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class GutenbergHandleMain {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * Hooks handle block template\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tif ( ! wp_is_block_theme() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Register block template and register patterns.\r\n-\t\tadd_action( 'init', array( $this, 'wp_hook_init' ) );\r\n-\t\t\u002F\u002F Set block template need to show on frontend\u002Fbackend\r\n-\t\tadd_filter( 'get_block_templates', array( $this, 'set_blocks_template' ), 10, 3 );\r\n-\t\t\u002F\u002F Load block template when Edit.\r\n-\t\tadd_filter( 'pre_get_block_file_template', array( $this, 'edit_block_file_template' ), 10, 3 );\r\n-\t\t\u002F\u002F Register block category\r\n-\t\tadd_filter( 'block_categories_all', array( $this, 'add_block_category' ), 10, 2 );\r\n-\t\t\u002F\u002F Fixed case code block of WooCommerce run on screen list Order is error.\r\n-\t\tadd_filter(\r\n-\t\t\t'current_theme_supports-block-templates',\r\n-\t\t\tfunction ( $flag ) {\r\n-\t\t\t\tif ( ! is_admin() ) {\r\n-\t\t\t\t\treturn $flag;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\t\treturn $flag;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$wp_screen = get_current_screen();\r\n-\t\t\t\tif ( $wp_screen->id === 'edit-lp_order' ) {\r\n-\t\t\t\t\t$flag = false;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $flag;\r\n-\t\t\t}\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook init of WordPress\r\n-\t * .1 Register blocks Gutenberg\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function wp_hook_init() {\r\n-\t\t$this->register_blocks();\r\n-\t\t$this->add_block_pattern_categories();\r\n-\t\t$this->add_block_patterns();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register block, render content of block\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function register_blocks() {\r\n-\t\t\u002F**\r\n-\t\t * @var AbstractBlockType[] $blocks\r\n-\t\t *\u002F\r\n-\t\t$blocks = Config::instance()->get( 'block-elements', 'gutenberg' );\r\n-\t\t\u002F\u002F$template_current = $this->get_edit_template();\r\n-\r\n-\t\tforeach ( $blocks as $block_template ) {\r\n-\t\t\t\u002F\u002F Set block maybe display when Edit on Template.\r\n-\t\t\t\u002F*if ( ! empty( $template_current ) && ! empty( $block_template->display_on_templates )\r\n-\t\t\t\t&& ! in_array( $template_current, $block_template->display_on_templates ) ) {\r\n-\t\t\t\tif ( ! empty( $block_template->ancestor ) ) {\r\n-\t\t\t\t\t$block_template->display_on_templates = [];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( ! empty( $block_template->ancestor )\r\n-\t\t\t\t&& ! empty( $block_template->display_on_templates ) ) {\r\n-\t\t\t\t$block_template->ancestor = null;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t\u002F\u002F Register script to load on the Backend Edit.\r\n-\t\t\twp_register_script(\r\n-\t\t\t\t$block_template->name, \u002F\u002F Block name\r\n-\t\t\t\t$block_template->source_js, \u002F\u002F Block script\r\n-\t\t\t\t[], \u002F\u002F Dependencies\r\n-\t\t\t\tuniqid(), \u002F\u002F Version,\r\n-\t\t\t\t[ 'strategy' => 'defer' ]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$args = [];\r\n-\t\t\tforeach ( get_object_vars( $block_template ) as $property => $value ) {\r\n-\t\t\t\t$args[ $property ] = $value;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$block_type = $block_template->name;\r\n-\t\t\t\u002F**\r\n-\t\t\t * register_block_type_from_metadata\r\n-\t\t\t *\r\n-\t\t\t * For case declare path to file block.json\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! empty( $block_template->path_block_json ) ) {\r\n-\t\t\t\t$block_type = $block_template->path_block_json;\r\n-\t\t\t}\r\n-\r\n-\t\t\tregister_block_type(\r\n-\t\t\t\t$block_type,\r\n-\t\t\t\t$args\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set block template need to show on frontend\u002Fbackend\r\n-\t * 1. Get all templates of LP declare.\r\n-\t * 2. Frontend: check blocks match with type page. Ex: single course, archive course....\r\n-\t * 3. If correct, set Block to $query_result.\r\n-\t *\r\n-\t * @param array $query_result Array of template objects.\r\n-\t * @param array $query Optional. Arguments to retrieve templates.\r\n-\t * @param mixed $template_type wp_template or wp_template_part.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.2.3\r\n-\t * @version 1.0.6\r\n-\t *\u002F\r\n-\tpublic function set_blocks_template( array $query_result, array $query, $template_type ): array {\r\n-\t\tif ( $template_type === 'wp_template_part' ) { \u002F\u002F Template not Template part\r\n-\t\t\treturn $query_result;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_admin() && post_password_required() ) {\r\n-\t\t\treturn $query_result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check is course item.\r\n-\t\tif ( ! is_admin() ) {\r\n-\t\t\tglobal $wp;\r\n-\t\t\t$vars           = $wp->query_vars;\r\n-\t\t\t$item_type      = $vars['item-type'] ?? '';\r\n-\t\t\t$lp_course_item = learn_press_get_post_by_name( $vars['course-item'] ?? '', $item_type );\r\n-\t\t\t$item_types     = CourseModel::item_types_support();\r\n-\t\t\tif ( $lp_course_item && in_array( $lp_course_item->post_type, $item_types ) ) {\r\n-\t\t\t\t$singleCourseItemBlockTemplate = new SingleCourseItemBlockTemplate();\r\n-\t\t\t\t$block_custom                  = $this->is_custom_block_template( $template_type, $singleCourseItemBlockTemplate->slug );\r\n-\t\t\t\tif ( $block_custom ) {\r\n-\t\t\t\t\t$singleCourseItemBlockTemplate->is_custom = true;\r\n-\t\t\t\t\t$singleCourseItemBlockTemplate->source    = 'custom';\r\n-\t\t\t\t\t$singleCourseItemBlockTemplate->content   = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Set slug to single course, to compare with slug in query.\r\n-\t\t\t\t * Because don't have slug 'single-lp_course_item'.\r\n-\t\t\t\t * Slug 'single-lp_course_item' is for save content of block template.\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$singleCourseItemBlockTemplate->slug = 'single-lp_course';\r\n-\t\t\t\t$query_result[]                      = $singleCourseItemBlockTemplate;\r\n-\t\t\t\treturn $query_result;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End check course item.\r\n-\r\n-\t\t\u002F\u002F Check is course offline.\r\n-\t\tif ( ! is_admin() ) {\r\n-\t\t\tglobal $wp;\r\n-\t\t\t$object = get_queried_object();\r\n-\t\t\tif ( $object && isset( $object->ID ) ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $object->ID, true );\r\n-\t\t\t\tif ( $courseModel && $courseModel->is_offline() ) {\r\n-\t\t\t\t\t$singleCourseOfflineBlockTemplate = new SingleCourseOfflineBlockTemplate();\r\n-\t\t\t\t\t$block_custom                     = $this->is_custom_block_template( $template_type, $singleCourseOfflineBlockTemplate->slug );\r\n-\t\t\t\t\tif ( $block_custom ) {\r\n-\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->is_custom = true;\r\n-\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->source    = 'custom';\r\n-\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->content   = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$singleCourseOfflineBlockTemplate->slug = 'single-lp_course';\r\n-\t\t\t\t\t$query_result[]                         = $singleCourseOfflineBlockTemplate;\r\n-\t\t\t\t\treturn $query_result;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End check course offline.\r\n-\r\n-\t\t\u002F\u002F wp_enqueue_script( 'editor-check' );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var AbstractBlockTemplate[] $lp_block_templates\r\n-\t\t *\u002F\r\n-\t\t$lp_block_templates = Config::instance()->get( 'block-templates', 'gutenberg' );\r\n-\t\tforeach ( $lp_block_templates as $block_template ) {\r\n-\r\n-\t\t\t$instance = new $block_template();\r\n-\t\t\tif ( isset( $query['post_type'] ) &&\r\n-\t\t\t\tisset( $instance->post_types ) &&\r\n-\t\t\t\t! in_array( $query['post_type'], $instance->post_types, true )\r\n-\t\t\t\t) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get block template if custom - save on table posts - with post_name = slug of block.\r\n-\t\t\t$block_custom = $this->is_custom_block_template( $template_type, $block_template->slug );\r\n-\t\t\tif ( $block_custom ) {\r\n-\t\t\t\t$block_template->is_custom = true;\r\n-\t\t\t\t$block_template->source    = 'custom';\r\n-\t\t\t\tif ( version_compare( get_bloginfo( 'version' ), '6.4-beta', '>=' ) ) {\r\n-\t\t\t\t\t$block_template->content = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$block_template->content = _inject_theme_attribute_in_block_template_content( $block_custom->post_content );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Frontend: check block template match with slug in query will display.\r\n-\t\t\t$fits_slug_query = ! isset( $query['slug__in'] ) || in_array( $instance->slug, $query['slug__in'], true );\r\n-\t\t\t$fits_area_query = ! isset( $query['area'] ) || ( property_exists( $instance, 'area' ) && $instance->area === $query['area'] );\r\n-\t\t\t$should_include  = $fits_slug_query && $fits_area_query;\r\n-\t\t\tif ( $should_include ) {\r\n-\t\t\t\t$query_result[] = $block_template;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $query_result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load template block when edit and save.\r\n-\t *\r\n-\t * @param WP_Block_Template|null|mixed $template\r\n-\t * @param string $id\r\n-\t * @param string $template_type\r\n-\t *\r\n-\t * @return WP_Block_Template|null\r\n-\t *\u002F\r\n-\tpublic function edit_block_file_template( $template = null, string $id = '', string $template_type = '' ) {\r\n-\t\t\u002F**\r\n-\t\t * @var AbstractBlockTemplate[] $template\r\n-\t\t *\u002F\r\n-\t\t$lp_block_templates = Config::instance()->get( 'block-templates', 'gutenberg' );\r\n-\t\tforeach ( $lp_block_templates as $block_template ) {\r\n-\t\t\tif ( $id === $block_template->id ) {\r\n-\t\t\t\t$template = $block_template;\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $template;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check is custom block template\r\n-\t *\r\n-\t * @param $template_type\r\n-\t * @param $post_name\r\n-\t *\r\n-\t * @return WP_Post|null\r\n-\t *\u002F\r\n-\tpublic function is_custom_block_template( $template_type, $post_name ) {\r\n-\t\t$post_block_theme = null;\r\n-\r\n-\t\t$check_query_args = array(\r\n-\t\t\t'post_type'      => $template_type,\r\n-\t\t\t'posts_per_page' => 1,\r\n-\t\t\t'no_found_rows'  => true,\r\n-\t\t\t'post_name__in'  => array( $post_name ),\r\n-\t\t);\r\n-\r\n-\t\t$check = new \\WP_Query( $check_query_args );\r\n-\r\n-\t\tif ( count( $check->get_posts() ) > 0 ) {\r\n-\t\t\t$post_block_theme = $check->get_posts()[0];\r\n-\t\t}\r\n-\r\n-\t\treturn $post_block_theme;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register block category\r\n-\t *\r\n-\t * @param array $block_categories\r\n-\t * @param $editor_context\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function add_block_category( array $block_categories, $editor_context ) {\r\n-\t\t$lp_block_categories = [\r\n-\t\t\t[\r\n-\t\t\t\t'slug'  => 'learnpress-legacy',\r\n-\t\t\t\t'title' => __( 'LearnPress Legacy', 'learnpress' ),\r\n-\t\t\t\t'icon'  => null,\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'slug'  => 'learnpress-category',\r\n-\t\t\t\t'title' => __( 'LearnPress Global', 'learnpress' ),\r\n-\t\t\t\t'icon'  => null,\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'slug'  => 'learnpress-course-elements',\r\n-\t\t\t\t'title' => __( 'LearnPress Course Elements', 'learnpress' ),\r\n-\t\t\t\t'icon'  => null,\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $lp_block_categories as $block_category ) {\r\n-\t\t\tarray_unshift( $block_categories, $block_category );\r\n-\t\t}\r\n-\r\n-\t\treturn $block_categories;\r\n-\t}\r\n-\r\n-\tpublic function get_edit_template() {\r\n-\t\t$template_current = '';\r\n-\r\n-\t\tif ( is_admin() && isset( $_GET['p'] ) ) {\r\n-\t\t\tif ( function_exists( '\\get_current_screen' ) ) {\r\n-\t\t\t\t$screen = \\get_current_screen();\r\n-\t\t\t\tif ( $screen && (\r\n-\t\t\t\t\t$screen->base === 'site-editor' ||\r\n-\t\t\t\t\t$screen->id === 'appearance_page_gutenberg-edit-site' ||\r\n-\t\t\t\t\tstrpos( $screen->id, 'edit-site' ) !== false\r\n-\t\t\t\t) ) {\r\n-\t\t\t\t\t$template_path    = urldecode( $_GET['p'] );\r\n-\t\t\t\t\t$template_path    = str_replace( '\u002Fwp_template\u002F', '', $template_path );\r\n-\t\t\t\t\t$template_current = trim( $template_path, '\u002F' );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$template_path    = urldecode( $_GET['p'] );\r\n-\t\t\t\t$template_path    = str_replace( '\u002Fwp_template\u002F', '', $template_path );\r\n-\t\t\t\t$template_current = trim( $template_path, '\u002F' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $template_current ) ) {\r\n-\t\t\tif ( ! empty( $_REQUEST['postId'] ) ) {\r\n-\t\t\t\t$template_current = $_REQUEST['postId'];\r\n-\t\t\t} elseif ( ! empty( $_REQUEST['post'] ) ) {\r\n-\t\t\t\t$template_current = $_REQUEST['post'];\r\n-\t\t\t} elseif ( ! empty( $_REQUEST['post_id'] ) ) {\r\n-\t\t\t\t$template_current = $_REQUEST['post_id'];\r\n-\t\t\t} elseif ( function_exists( 'get_the_ID' ) && get_the_ID() ) {\r\n-\t\t\t\t$template_current = get_the_ID();\r\n-\t\t\t} elseif ( isset( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->ID ) ) {\r\n-\t\t\t\t$template_current = $GLOBALS['post']->ID;\r\n-\t\t\t}\r\n-\t\t\tif ( ! is_numeric( $template_current ) ) {\r\n-\t\t\t\t$template_post = get_page_by_path( $template_current, OBJECT, 'wp_template' );\r\n-\t\t\t\tif ( $template_post ) {\r\n-\t\t\t\t\t$template_current = $template_post->ID;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $template_current;\r\n-\t}\r\n-\r\n-\tpublic function add_block_patterns() {\r\n-\t\t$list_course_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Flist-courses-pattern.html' ) );\r\n-\t\tregister_block_pattern(\r\n-\t\t\t'learnpress\u002Flist-course-pattern',\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'       => __( 'Layout List Course', 'learnpress' ),\r\n-\t\t\t\t'description' => __( 'List Course Learnpress', 'learnpress' ),\r\n-\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\r\n-\t\t\t\t'content'     => $list_course_pattern,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$grid_course_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Fgrid-courses-pattern.html' ) );\r\n-\t\tregister_block_pattern(\r\n-\t\t\t'learnpress\u002Fgrid-course-pattern',\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'       => __( 'Layout Grid Course', 'learnpress' ),\r\n-\t\t\t\t'description' => __( 'List Course Learnpress - layout grid', 'learnpress' ),\r\n-\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\r\n-\t\t\t\t'content'     => $grid_course_pattern,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$single_instructor_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Fsingle-instructor-pattern.html' ) );\r\n-\t\tregister_block_pattern(\r\n-\t\t\t'learnpress\u002Fsingle-instructor-pattern',\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'       => __( 'Single Instructor', 'learnpress' ),\r\n-\t\t\t\t'description' => __( 'Single Instructor Learnpress', 'learnpress' ),\r\n-\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\r\n-\t\t\t\t'content'     => $single_instructor_pattern,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function add_block_pattern_categories() {\r\n-\t\tregister_block_pattern_category(\r\n-\t\t\t'learnpress-patterns',\r\n-\t\t\tarray( 'label' => __( 'LearnPress', 'learnpress' ) )\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg;\n+\n+use LearnPress\\Gutenberg\\Blocks\\AbstractBlockType;\n+use LearnPress\\Gutenberg\\Templates\\AbstractBlockTemplate;\n+use LearnPress\\Gutenberg\\Templates\\SingleCourseItemBlockTemplate;\n+use LearnPress\\Gutenberg\\Templates\\SingleCourseOfflineBlockTemplate;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use WP_Block_Template;\n+use WP_Post;\n+\n+\u002F**\n+ * Class GutenbergHandleMain\n+ *\n+ * Handle register, render block template\n+ * @since 4.2.8.3 Convert from old class Block_Template_Handle\n+ * @version 1.0.0\n+ *\u002F\n+class GutenbergHandleMain {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * Hooks handle block template\n+\t *\u002F\n+\tpublic function init() {\n+\t\tif ( ! wp_is_block_theme() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Register block template and register patterns.\n+\t\tadd_action( 'init', array( $this, 'wp_hook_init' ) );\n+\t\t\u002F\u002F Set block template need to show on frontend\u002Fbackend\n+\t\tadd_filter( 'get_block_templates', array( $this, 'set_blocks_template' ), 10, 3 );\n+\t\t\u002F\u002F Load block template when Edit.\n+\t\tadd_filter( 'pre_get_block_file_template', array( $this, 'edit_block_file_template' ), 10, 3 );\n+\t\t\u002F\u002F Register block category\n+\t\tadd_filter( 'block_categories_all', array( $this, 'add_block_category' ), 10, 2 );\n+\t\t\u002F\u002F Fixed case code block of WooCommerce run on screen list Order is error.\n+\t\tadd_filter(\n+\t\t\t'current_theme_supports-block-templates',\n+\t\t\tfunction ( $flag ) {\n+\t\t\t\tif ( ! is_admin() ) {\n+\t\t\t\t\treturn $flag;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\n+\t\t\t\t\treturn $flag;\n+\t\t\t\t}\n+\n+\t\t\t\t$wp_screen = get_current_screen();\n+\t\t\t\tif ( $wp_screen->id === 'edit-lp_order' ) {\n+\t\t\t\t\t$flag = false;\n+\t\t\t\t}\n+\n+\t\t\t\treturn $flag;\n+\t\t\t}\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Hook init of WordPress\n+\t * .1 Register blocks Gutenberg\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function wp_hook_init() {\n+\t\t$this->register_blocks();\n+\t\t$this->add_block_pattern_categories();\n+\t\t$this->add_block_patterns();\n+\t}\n+\n+\t\u002F**\n+\t * Register block, render content of block\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function register_blocks() {\n+\t\t\u002F**\n+\t\t * @var AbstractBlockType[] $blocks\n+\t\t *\u002F\n+\t\t$blocks = Config::instance()->get( 'block-elements', 'gutenberg' );\n+\t\t\u002F\u002F$template_current = $this->get_edit_template();\n+\n+\t\tforeach ( $blocks as $block_template ) {\n+\t\t\t\u002F\u002F Set block maybe display when Edit on Template.\n+\t\t\t\u002F*if ( ! empty( $template_current ) && ! empty( $block_template->display_on_templates )\n+\t\t\t\t&& ! in_array( $template_current, $block_template->display_on_templates ) ) {\n+\t\t\t\tif ( ! empty( $block_template->ancestor ) ) {\n+\t\t\t\t\t$block_template->display_on_templates = [];\n+\t\t\t\t} else {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t} elseif ( ! empty( $block_template->ancestor )\n+\t\t\t\t&& ! empty( $block_template->display_on_templates ) ) {\n+\t\t\t\t$block_template->ancestor = null;\n+\t\t\t}*\u002F\n+\n+\t\t\t\u002F\u002F Register script to load on the Backend Edit.\n+\t\t\twp_register_script(\n+\t\t\t\t$block_template->name, \u002F\u002F Block name\n+\t\t\t\t$block_template->source_js, \u002F\u002F Block script\n+\t\t\t\t[], \u002F\u002F Dependencies\n+\t\t\t\tuniqid(), \u002F\u002F Version,\n+\t\t\t\t[ 'strategy' => 'defer' ]\n+\t\t\t);\n+\n+\t\t\t$args = [];\n+\t\t\tforeach ( get_object_vars( $block_template ) as $property => $value ) {\n+\t\t\t\t$args[ $property ] = $value;\n+\t\t\t}\n+\n+\t\t\t$block_type = $block_template->name;\n+\t\t\t\u002F**\n+\t\t\t * register_block_type_from_metadata\n+\t\t\t *\n+\t\t\t * For case declare path to file block.json\n+\t\t\t *\u002F\n+\t\t\tif ( ! empty( $block_template->path_block_json ) ) {\n+\t\t\t\t$block_type = $block_template->path_block_json;\n+\t\t\t}\n+\n+\t\t\tregister_block_type(\n+\t\t\t\t$block_type,\n+\t\t\t\t$args\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Set block template need to show on frontend\u002Fbackend\n+\t * 1. Get all templates of LP declare.\n+\t * 2. Frontend: check blocks match with type page. Ex: single course, archive course....\n+\t * 3. If correct, set Block to $query_result.\n+\t *\n+\t * @param array $query_result Array of template objects.\n+\t * @param array $query Optional. Arguments to retrieve templates.\n+\t * @param mixed $template_type wp_template or wp_template_part.\n+\t *\n+\t * @return array\n+\t * @since 4.2.2.3\n+\t * @version 1.0.6\n+\t *\u002F\n+\tpublic function set_blocks_template( array $query_result, array $query, $template_type ): array {\n+\t\tif ( $template_type === 'wp_template_part' ) { \u002F\u002F Template not Template part\n+\t\t\treturn $query_result;\n+\t\t}\n+\n+\t\tif ( ! is_admin() && post_password_required() ) {\n+\t\t\treturn $query_result;\n+\t\t}\n+\n+\t\t\u002F\u002F Check is course item.\n+\t\tif ( ! is_admin() ) {\n+\t\t\tglobal $wp;\n+\t\t\t$vars           = $wp->query_vars;\n+\t\t\t$item_type      = $vars['item-type'] ?? '';\n+\t\t\t$lp_course_item = learn_press_get_post_by_name( $vars['course-item'] ?? '', $item_type );\n+\t\t\t$item_types     = CourseModel::item_types_support();\n+\t\t\tif ( $lp_course_item && in_array( $lp_course_item->post_type, $item_types ) ) {\n+\t\t\t\t$singleCourseItemBlockTemplate = new SingleCourseItemBlockTemplate();\n+\t\t\t\t$block_custom                  = $this->is_custom_block_template( $template_type, $singleCourseItemBlockTemplate->slug );\n+\t\t\t\tif ( $block_custom ) {\n+\t\t\t\t\t$singleCourseItemBlockTemplate->is_custom = true;\n+\t\t\t\t\t$singleCourseItemBlockTemplate->source    = 'custom';\n+\t\t\t\t\t$singleCourseItemBlockTemplate->content   = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Set slug to single course, to compare with slug in query.\n+\t\t\t\t * Because don't have slug 'single-lp_course_item'.\n+\t\t\t\t * Slug 'single-lp_course_item' is for save content of block template.\n+\t\t\t\t *\u002F\n+\t\t\t\t$singleCourseItemBlockTemplate->slug = 'single-lp_course';\n+\t\t\t\t$query_result[]                      = $singleCourseItemBlockTemplate;\n+\t\t\t\treturn $query_result;\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End check course item.\n+\n+\t\t\u002F\u002F Check is course offline.\n+\t\tif ( ! is_admin() ) {\n+\t\t\tglobal $wp;\n+\t\t\t$object = get_queried_object();\n+\t\t\tif ( $object && isset( $object->ID ) ) {\n+\t\t\t\t$courseModel = CourseModel::find( $object->ID, true );\n+\t\t\t\tif ( $courseModel && $courseModel->is_offline() ) {\n+\t\t\t\t\t$singleCourseOfflineBlockTemplate = new SingleCourseOfflineBlockTemplate();\n+\t\t\t\t\t$block_custom                     = $this->is_custom_block_template( $template_type, $singleCourseOfflineBlockTemplate->slug );\n+\t\t\t\t\tif ( $block_custom ) {\n+\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->is_custom = true;\n+\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->source    = 'custom';\n+\t\t\t\t\t\t$singleCourseOfflineBlockTemplate->content   = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$singleCourseOfflineBlockTemplate->slug = 'single-lp_course';\n+\t\t\t\t\t$query_result[]                         = $singleCourseOfflineBlockTemplate;\n+\t\t\t\t\treturn $query_result;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End check course offline.\n+\n+\t\t\u002F\u002F wp_enqueue_script( 'editor-check' );\n+\n+\t\t\u002F**\n+\t\t * @var AbstractBlockTemplate[] $lp_block_templates\n+\t\t *\u002F\n+\t\t$lp_block_templates = Config::instance()->get( 'block-templates', 'gutenberg' );\n+\t\tforeach ( $lp_block_templates as $block_template ) {\n+\n+\t\t\t$instance = new $block_template();\n+\t\t\tif ( isset( $query['post_type'] ) &&\n+\t\t\t\tisset( $instance->post_types ) &&\n+\t\t\t\t! in_array( $query['post_type'], $instance->post_types, true )\n+\t\t\t\t) {\n+\t\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get block template if custom - save on table posts - with post_name = slug of block.\n+\t\t\t$block_custom = $this->is_custom_block_template( $template_type, $block_template->slug );\n+\t\t\tif ( $block_custom ) {\n+\t\t\t\t$block_template->is_custom = true;\n+\t\t\t\t$block_template->source    = 'custom';\n+\t\t\t\tif ( version_compare( get_bloginfo( 'version' ), '6.4-beta', '>=' ) ) {\n+\t\t\t\t\t$block_template->content = traverse_and_serialize_blocks( parse_blocks( $block_custom->post_content ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$block_template->content = _inject_theme_attribute_in_block_template_content( $block_custom->post_content );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Frontend: check block template match with slug in query will display.\n+\t\t\t$fits_slug_query = ! isset( $query['slug__in'] ) || in_array( $instance->slug, $query['slug__in'], true );\n+\t\t\t$fits_area_query = ! isset( $query['area'] ) || ( property_exists( $instance, 'area' ) && $instance->area === $query['area'] );\n+\t\t\t$should_include  = $fits_slug_query && $fits_area_query;\n+\t\t\tif ( $should_include ) {\n+\t\t\t\t$query_result[] = $block_template;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $query_result;\n+\t}\n+\n+\t\u002F**\n+\t * Load template block when edit and save.\n+\t *\n+\t * @param WP_Block_Template|null|mixed $template\n+\t * @param string $id\n+\t * @param string $template_type\n+\t *\n+\t * @return WP_Block_Template|null\n+\t *\u002F\n+\tpublic function edit_block_file_template( $template = null, string $id = '', string $template_type = '' ) {\n+\t\t\u002F**\n+\t\t * @var AbstractBlockTemplate[] $template\n+\t\t *\u002F\n+\t\t$lp_block_templates = Config::instance()->get( 'block-templates', 'gutenberg' );\n+\t\tforeach ( $lp_block_templates as $block_template ) {\n+\t\t\tif ( $id === $block_template->id ) {\n+\t\t\t\t$template = $block_template;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $template;\n+\t}\n+\n+\t\u002F**\n+\t * Check is custom block template\n+\t *\n+\t * @param $template_type\n+\t * @param $post_name\n+\t *\n+\t * @return WP_Post|null\n+\t *\u002F\n+\tpublic function is_custom_block_template( $template_type, $post_name ) {\n+\t\t$post_block_theme = null;\n+\n+\t\t$check_query_args = array(\n+\t\t\t'post_type'      => $template_type,\n+\t\t\t'posts_per_page' => 1,\n+\t\t\t'no_found_rows'  => true,\n+\t\t\t'post_name__in'  => array( $post_name ),\n+\t\t);\n+\n+\t\t$check = new \\WP_Query( $check_query_args );\n+\n+\t\tif ( count( $check->get_posts() ) > 0 ) {\n+\t\t\t$post_block_theme = $check->get_posts()[0];\n+\t\t}\n+\n+\t\treturn $post_block_theme;\n+\t}\n+\n+\t\u002F**\n+\t * Register block category\n+\t *\n+\t * @param array $block_categories\n+\t * @param $editor_context\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function add_block_category( array $block_categories, $editor_context ) {\n+\t\t$lp_block_categories = [\n+\t\t\t[\n+\t\t\t\t'slug'  => 'learnpress-legacy',\n+\t\t\t\t'title' => __( 'LearnPress Legacy', 'learnpress' ),\n+\t\t\t\t'icon'  => null,\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'slug'  => 'learnpress-category',\n+\t\t\t\t'title' => __( 'LearnPress Global', 'learnpress' ),\n+\t\t\t\t'icon'  => null,\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'slug'  => 'learnpress-course-elements',\n+\t\t\t\t'title' => __( 'LearnPress Course Elements', 'learnpress' ),\n+\t\t\t\t'icon'  => null,\n+\t\t\t],\n+\t\t];\n+\n+\t\tforeach ( $lp_block_categories as $block_category ) {\n+\t\t\tarray_unshift( $block_categories, $block_category );\n+\t\t}\n+\n+\t\treturn $block_categories;\n+\t}\n+\n+\tpublic function get_edit_template() {\n+\t\t$template_current = '';\n+\n+\t\tif ( is_admin() && isset( $_GET['p'] ) ) {\n+\t\t\tif ( function_exists( '\\get_current_screen' ) ) {\n+\t\t\t\t$screen = \\get_current_screen();\n+\t\t\t\tif ( $screen && (\n+\t\t\t\t\t$screen->base === 'site-editor' ||\n+\t\t\t\t\t$screen->id === 'appearance_page_gutenberg-edit-site' ||\n+\t\t\t\t\tstrpos( $screen->id, 'edit-site' ) !== false\n+\t\t\t\t) ) {\n+\t\t\t\t\t$template_path    = urldecode( $_GET['p'] );\n+\t\t\t\t\t$template_path    = str_replace( '\u002Fwp_template\u002F', '', $template_path );\n+\t\t\t\t\t$template_current = trim( $template_path, '\u002F' );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$template_path    = urldecode( $_GET['p'] );\n+\t\t\t\t$template_path    = str_replace( '\u002Fwp_template\u002F', '', $template_path );\n+\t\t\t\t$template_current = trim( $template_path, '\u002F' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( empty( $template_current ) ) {\n+\t\t\tif ( ! empty( $_REQUEST['postId'] ) ) {\n+\t\t\t\t$template_current = $_REQUEST['postId'];\n+\t\t\t} elseif ( ! empty( $_REQUEST['post'] ) ) {\n+\t\t\t\t$template_current = $_REQUEST['post'];\n+\t\t\t} elseif ( ! empty( $_REQUEST['post_id'] ) ) {\n+\t\t\t\t$template_current = $_REQUEST['post_id'];\n+\t\t\t} elseif ( function_exists( 'get_the_ID' ) && get_the_ID() ) {\n+\t\t\t\t$template_current = get_the_ID();\n+\t\t\t} elseif ( isset( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->ID ) ) {\n+\t\t\t\t$template_current = $GLOBALS['post']->ID;\n+\t\t\t}\n+\t\t\tif ( ! is_numeric( $template_current ) ) {\n+\t\t\t\t$template_post = get_page_by_path( $template_current, OBJECT, 'wp_template' );\n+\t\t\t\tif ( $template_post ) {\n+\t\t\t\t\t$template_current = $template_post->ID;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $template_current;\n+\t}\n+\n+\tpublic function add_block_patterns() {\n+\t\t$list_course_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Flist-courses-pattern.html' ) );\n+\t\tregister_block_pattern(\n+\t\t\t'learnpress\u002Flist-course-pattern',\n+\t\t\tarray(\n+\t\t\t\t'title'       => __( 'Layout List Course', 'learnpress' ),\n+\t\t\t\t'description' => __( 'List Course Learnpress', 'learnpress' ),\n+\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\n+\t\t\t\t'content'     => $list_course_pattern,\n+\t\t\t)\n+\t\t);\n+\t\t$grid_course_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Fgrid-courses-pattern.html' ) );\n+\t\tregister_block_pattern(\n+\t\t\t'learnpress\u002Fgrid-course-pattern',\n+\t\t\tarray(\n+\t\t\t\t'title'       => __( 'Layout Grid Course', 'learnpress' ),\n+\t\t\t\t'description' => __( 'List Course Learnpress - layout grid', 'learnpress' ),\n+\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\n+\t\t\t\t'content'     => $grid_course_pattern,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$single_instructor_pattern = file_get_contents( Template::instance( false )->get_frontend_template_type_block( 'patterns\u002Fsingle-instructor-pattern.html' ) );\n+\t\tregister_block_pattern(\n+\t\t\t'learnpress\u002Fsingle-instructor-pattern',\n+\t\t\tarray(\n+\t\t\t\t'title'       => __( 'Single Instructor', 'learnpress' ),\n+\t\t\t\t'description' => __( 'Single Instructor Learnpress', 'learnpress' ),\n+\t\t\t\t'categories'  => array( 'learnpress-patterns' ),\n+\t\t\t\t'content'     => $single_instructor_pattern,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function add_block_pattern_categories() {\n+\t\tregister_block_pattern_category(\n+\t\t\t'learnpress-patterns',\n+\t\t\tarray( 'label' => __( 'LearnPress', 'learnpress' ) )\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FAbstractBlockTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FAbstractBlockTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FAbstractBlockTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FAbstractBlockTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use WP_Block_Template;\r\n-\r\n-\u002F**\r\n- * Abstract_Block_Template class.\r\n- *\r\n- * @since 4.2.8 Convert from old class Abstract_Block_Template\r\n- * @version 1.0.1\r\n- *\u002F\r\n-abstract class AbstractBlockTemplate extends WP_Block_Template {\r\n-\tpublic $theme = 'learnpress\u002Flearnpress';\r\n-\tpublic $type  = 'wp_template';\r\n-\t\u002F**\r\n-\t * @var string name of the block\r\n-\t *\u002F\r\n-\tpublic $origin                        = 'plugin';\r\n-\tpublic $source                        = 'plugin'; \u002F\u002F plugin|custom|theme, if custom save on db will be use 'custom'.\r\n-\tpublic $content                       = ''; \u002F\u002F Set content will be shown on edit block and the frontend.\r\n-\tpublic $has_theme_file                = true;\r\n-\tpublic $is_custom                     = false;\r\n-\tpublic $path_html_block_template_file = '';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->id      = $this->theme . '\u002F\u002F' . $this->slug;\r\n-\t\t$template_file = '';\r\n-\r\n-\t\tif ( ! empty( $this->path_html_block_template_file ) ) {\r\n-\t\t\t$template_file = Template::instance( false )->get_frontend_template_type_block(\r\n-\t\t\t\t$this->path_html_block_template_file\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set content from theme file.\r\n-\t\tif ( file_exists( $template_file ) ) {\r\n-\t\t\t$content = file_get_contents( $template_file );\r\n-\t\t\tif ( version_compare( get_bloginfo( 'version' ), '6.4-beta', '>=' ) ) {\r\n-\t\t\t\t$this->content = traverse_and_serialize_blocks( parse_blocks( $content ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->content = _inject_theme_attribute_in_block_template_content( $content );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+use LearnPress\\Helpers\\Template;\n+use WP_Block_Template;\n+\n+\u002F**\n+ * Abstract_Block_Template class.\n+ *\n+ * @since 4.2.8 Convert from old class Abstract_Block_Template\n+ * @version 1.0.1\n+ *\u002F\n+abstract class AbstractBlockTemplate extends WP_Block_Template {\n+\tpublic $theme = 'learnpress\u002Flearnpress';\n+\tpublic $type  = 'wp_template';\n+\t\u002F**\n+\t * @var string name of the block\n+\t *\u002F\n+\tpublic $origin                        = 'plugin';\n+\tpublic $source                        = 'plugin'; \u002F\u002F plugin|custom|theme, if custom save on db will be use 'custom'.\n+\tpublic $content                       = ''; \u002F\u002F Set content will be shown on edit block and the frontend.\n+\tpublic $has_theme_file                = true;\n+\tpublic $is_custom                     = false;\n+\tpublic $path_html_block_template_file = '';\n+\n+\tpublic function __construct() {\n+\t\t$this->id      = $this->theme . '\u002F\u002F' . $this->slug;\n+\t\t$template_file = '';\n+\n+\t\tif ( ! empty( $this->path_html_block_template_file ) ) {\n+\t\t\t$template_file = Template::instance( false )->get_frontend_template_type_block(\n+\t\t\t\t$this->path_html_block_template_file\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Set content from theme file.\n+\t\tif ( file_exists( $template_file ) ) {\n+\t\t\t$content = file_get_contents( $template_file );\n+\t\t\tif ( version_compare( get_bloginfo( 'version' ), '6.4-beta', '>=' ) ) {\n+\t\t\t\t$this->content = traverse_and_serialize_blocks( parse_blocks( $content ) );\n+\t\t\t} else {\n+\t\t\t\t$this->content = _inject_theme_attribute_in_block_template_content( $content );\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockCategoryTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockCategoryTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockCategoryTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockCategoryTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class ArchiveCoursesBlockCategoryTemplate\r\n- *\r\n- * @since 4.2.8.2\r\n- *\u002F\r\n-class ArchiveCoursesBlockCategoryTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'taxonomy-course_category';\r\n-\tpublic $title                         = 'Courses by category';\r\n-\tpublic $description                   = 'Displays courses filtered by a category';\r\n-\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class ArchiveCoursesBlockCategoryTemplate\n+ *\n+ * @since 4.2.8.2\n+ *\u002F\n+class ArchiveCoursesBlockCategoryTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'taxonomy-course_category';\n+\tpublic $title                         = 'Courses by category';\n+\tpublic $description                   = 'Displays courses filtered by a category';\n+\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTagTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTagTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTagTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTagTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class ArchiveCoursesBlockTagTemplate\r\n- *\r\n- * @since 4.2.8.2\r\n- *\u002F\r\n-class ArchiveCoursesBlockTagTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'taxonomy-course_tag';\r\n-\tpublic $title                         = 'Courses by Tag';\r\n-\tpublic $description                   = 'Displays courses filtered by a tag';\r\n-\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class ArchiveCoursesBlockTagTemplate\n+ *\n+ * @since 4.2.8.2\n+ *\u002F\n+class ArchiveCoursesBlockTagTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'taxonomy-course_tag';\n+\tpublic $title                         = 'Courses by Tag';\n+\tpublic $description                   = 'Displays courses filtered by a tag';\n+\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FArchiveCoursesBlockTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class ArchiveCoursesBlockTemplate\r\n- *\r\n- * @since 4.2.8.2\r\n- *\u002F\r\n-class ArchiveCoursesBlockTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'archive-lp_course';\r\n-\tpublic $title                         = 'Archive Courses Template';\r\n-\tpublic $description                   = 'Archive Course Block Template';\r\n-\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class ArchiveCoursesBlockTemplate\n+ *\n+ * @since 4.2.8.2\n+ *\u002F\n+class ArchiveCoursesBlockTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'archive-lp_course';\n+\tpublic $title                         = 'Archive Courses Template';\n+\tpublic $description                   = 'Archive Course Block Template';\n+\tpublic $path_html_block_template_file = 'html\u002Farchive-courses-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseBlockTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseBlockTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseBlockTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseBlockTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class Block_Template_Single_Course\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleCourseBlockTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'single-lp_course';\r\n-\tpublic $title                         = 'Single Course Template';\r\n-\tpublic $description                   = 'Single Course Block Template';\r\n-\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class Block_Template_Single_Course\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleCourseBlockTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'single-lp_course';\n+\tpublic $title                         = 'Single Course Template';\n+\tpublic $description                   = 'Single Course Block Template';\n+\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseItemBlockTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseItemBlockTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseItemBlockTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseItemBlockTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class Block_Template_Single_Course\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleCourseItemBlockTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'single-lp_course_item';\r\n-\tpublic $title                         = 'Single Course Item Template';\r\n-\tpublic $description                   = 'Single Course Block Template';\r\n-\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-item-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class Block_Template_Single_Course\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleCourseItemBlockTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'single-lp_course_item';\n+\tpublic $title                         = 'Single Course Item Template';\n+\tpublic $description                   = 'Single Course Block Template';\n+\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-item-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseOfflineBlockTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseOfflineBlockTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseOfflineBlockTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FTemplates\u002FSingleCourseOfflineBlockTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-namespace LearnPress\\Gutenberg\\Templates;\r\n-\r\n-\u002F**\r\n- * Class SingleCourseOfflineBlockTemplate\r\n- *\r\n- * Handle register, render block template\r\n- *\u002F\r\n-class SingleCourseOfflineBlockTemplate extends AbstractBlockTemplate {\r\n-\tpublic $slug                          = 'single-lp_course-offline';\r\n-\tpublic $title                         = 'Single Course Offline Template';\r\n-\tpublic $description                   = 'Single Course Offline Block Template';\r\n-\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-offline-template-default.html';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Gutenberg\\Templates;\n+\n+\u002F**\n+ * Class SingleCourseOfflineBlockTemplate\n+ *\n+ * Handle register, render block template\n+ *\u002F\n+class SingleCourseOfflineBlockTemplate extends AbstractBlockTemplate {\n+\tpublic $slug                          = 'single-lp_course-offline';\n+\tpublic $title                         = 'Single Course Offline Template';\n+\tpublic $description                   = 'Single Course Offline Block Template';\n+\tpublic $path_html_block_template_file = 'html\u002Fsingle-course-offline-template-default.html';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FUtils\u002FStyleAttributes.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FUtils\u002FStyleAttributes.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FGutenberg\u002FUtils\u002FStyleAttributes.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FGutenberg\u002FUtils\u002FStyleAttributes.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,780 +1,780 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Gutenberg\\Utils;\r\n-\r\n-\u002F**\r\n- * StyleAttributes class used for getting class and style from attributes.\r\n- *\u002F\r\n-class StyleAttributes {\r\n-\r\n-\t\u002F\u002F Empty style array.\r\n-\tconst EMPTY_STYLE = [\r\n-\t\t'class' => '',\r\n-\t\t'style' => '',\r\n-\t\t'value' => '',\r\n-\t];\r\n-\r\n-\t\u002F**\r\n-\t * If color value is in preset format, convert it to a CSS var. Else return same value\r\n-\t * For example:\r\n-\t * \"var:preset|color|pale-pink\" -> \"var(--wp--preset--color--pale-pink)\"\r\n-\t * \"#98b66e\" -> \"#98b66e\"\r\n-\t *\r\n-\t * @param string $color_value value to be processed.\r\n-\t *\r\n-\t * @return (string)\r\n-\t *\u002F\r\n-\tpublic static function get_color_value( $color_value ) {\r\n-\t\tif ( is_string( $color_value ) && str_contains( $color_value, 'var:preset|color|' ) ) {\r\n-\t\t\t$color_value = str_replace( 'var:preset|color|', '', $color_value );\r\n-\t\t\treturn sprintf( 'var(--wp--preset--color--%s)', $color_value );\r\n-\t\t}\r\n-\r\n-\t\treturn $color_value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get CSS value for color preset.\r\n-\t *\r\n-\t * @param string $preset_name Preset name.\r\n-\t *\r\n-\t * @return string CSS value for color preset.\r\n-\t *\u002F\r\n-\tpublic static function get_preset_value( $preset_name ) {\r\n-\t\treturn \"var(--wp--preset--color--$preset_name)\";\r\n-\t}\r\n-\r\n-\t\t\u002F**\r\n-\t * Get CSS value for font size.\r\n-\t *\r\n-\t * @param string $preset_name Preset name.\r\n-\t *\r\n-\t * @return string CSS value for font size.\r\n-\t *\u002F\r\n-\tpublic static function get_font_size_value( $preset_name ) {\r\n-\t\treturn \"var(--wp--preset--font-size--$preset_name)\";\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * If spacing value is in preset format, convert it to a CSS var. Else return same value\r\n-\t * For example:\r\n-\t * \"var:preset|spacing|50\" -> \"var(--wp--preset--spacing--50)\"\r\n-\t * \"50px\" -> \"50px\"\r\n-\t *\r\n-\t * @param string $spacing_value value to be processed.\r\n-\t *\r\n-\t * @return (string)\r\n-\t *\u002F\r\n-\tpublic static function get_spacing_value( $spacing_value ) {\r\n-\t\t\u002F\u002F Used following code as reference: https:\u002F\u002Fgithub.com\u002FWordPress\u002Fgutenberg\u002Fblob\u002Fcff6d70d6ff5a26e212958623dc3130569f95685\u002Flib\u002Fblock-supports\u002Flayout.php\u002F#L219-L225.\r\n-\t\tif ( is_string( $spacing_value ) && str_contains( $spacing_value, 'var:preset|spacing|' ) ) {\r\n-\t\t\t$spacing_value = str_replace( 'var:preset|spacing|', '', $spacing_value );\r\n-\t\t\treturn sprintf( 'var(--wp--preset--spacing--%s)', $spacing_value );\r\n-\t\t}\r\n-\r\n-\t\treturn $spacing_value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for align from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_align_class_and_style( $attributes ) {\r\n-\t\t$align_attribute = $attributes['align'] ?? null;\r\n-\r\n-\t\tif ( 'wide' === $align_attribute ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'alignwide',\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( 'full' === $align_attribute ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'alignfull',\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( 'left' === $align_attribute ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'alignleft',\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( 'right' === $align_attribute ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'alignright',\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( 'center' === $align_attribute ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'aligncenter',\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for background-color from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_background_color_class_and_style( $attributes ) {\r\n-\t\t$gradient                = $attributes['gradient'] ?? null;\r\n-\t\t$background_color        = $attributes['backgroundColor'] ?? '';\r\n-\t\t$custom_background_color = $attributes['style']['color']['background'] ?? '';\r\n-\t\t$classes                 = [ $gradient ];\r\n-\t\t$styles                  = [];\r\n-\t\t$value                   = null;\r\n-\r\n-\t\tif ( $background_color || $custom_background_color || $gradient ) {\r\n-\t\t\t$classes[] = 'has-background';\r\n-\t\t}\r\n-\r\n-\t\tif ( $background_color ) {\r\n-\t\t\t$value    = self::get_preset_value( $background_color );\r\n-\t\t\t$styles[] = sprintf( 'background-color: %s;', $value );\r\n-\t\t}\r\n-\r\n-\t\tif ( $custom_background_color ) {\r\n-\t\t\t$styles[] = sprintf( 'background-color: %s;', $custom_background_color );\r\n-\t\t\t$value    = $custom_background_color;\r\n-\t\t}\r\n-\r\n-\t\tif ( $gradient ) {\r\n-\t\t\t$classes[] = sprintf( 'has-%s-gradient-background', $gradient );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => self::join_styles( $classes ),\r\n-\t\t\t'style' => self::join_styles( $styles ),\r\n-\t\t\t'value' => $value,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Join classes and styles while removing duplicates and null values.\r\n-\t *\r\n-\t * @param array $rules Array of classes or styles.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function join_styles( $rules ) {\r\n-\t\treturn implode( ' ', array_unique( array_filter( $rules ) ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for border-color from attributes.\r\n-\t *\r\n-\t * Data passed to this function is not always consistent. It can be:\r\n-\t * Linked - preset color: $attributes['borderColor'] => 'luminous-vivid-orange'.\r\n-\t * Linked - custom color: $attributes['style']['border']['color'] => '#681228'.\r\n-\t * Unlinked - preset color: $attributes['style']['border']['top']['color'] => 'var:preset|color|luminous-vivid-orange'\r\n-\t * Unlinked - custom color: $attributes['style']['border']['top']['color'] => '#681228'.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_border_color_class_and_style( $attributes ) {\r\n-\t\t$border_color_linked_preset = $attributes['borderColor'] ?? '';\r\n-\t\t$border_color_linked_custom = $attributes['style']['border']['color'] ?? '';\r\n-\t\t$custom_border              = $attributes['style']['border'] ?? '';\r\n-\r\n-\t\t$class = '';\r\n-\t\t$style = '';\r\n-\t\t$value = '';\r\n-\r\n-\t\tif ( $border_color_linked_preset ) {\r\n-\t\t\t\u002F\u002F Linked preset color.\r\n-\t\t\t$value  = self::get_preset_value( $border_color_linked_preset );\r\n-\t\t\t$style .= 'border-color:' . $value . ';';\r\n-\t\t} elseif ( $border_color_linked_custom ) {\r\n-\t\t\t\u002F\u002F Linked custom color.\r\n-\t\t\t$style .= 'border-color:' . $border_color_linked_custom . ';';\r\n-\t\t\t$value  = $border_color_linked_custom;\r\n-\t\t} elseif ( is_array( $custom_border ) ) {\r\n-\t\t\t\u002F\u002F $style .= 'border-style: solid;';\r\n-\t\t\t\u002F\u002F Unlinked.\r\n-\t\t\tforeach ( $custom_border as $border_color_key => $border_color_value ) {\r\n-\t\t\t\tif ( is_array( $border_color_value ) && array_key_exists( 'color', ( $border_color_value ) ) ) {\r\n-\t\t\t\t\t$style .= 'border-' . $border_color_key . '-color:' . self::get_color_value( $border_color_value['color'] ) . ';';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $class && ! $style ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => $class,\r\n-\t\t\t'style' => $style,\r\n-\t\t\t'value' => $value,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for border-radius from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_border_radius_class_and_style( $attributes ) {\r\n-\t\t$custom_border_radius = $attributes['style']['border']['radius'] ?? '';\r\n-\r\n-\t\tif ( '' === $custom_border_radius ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t$style = '';\r\n-\r\n-\t\tif ( is_string( $custom_border_radius ) ) {\r\n-\t\t\t\u002F\u002F Linked sides.\r\n-\t\t\t$style = 'border-radius:' . $custom_border_radius . ';';\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Unlinked sides.\r\n-\t\t\t$border_radius = array();\r\n-\r\n-\t\t\t$border_radius['border-top-left-radius']     = $custom_border_radius['topLeft'] ?? '';\r\n-\t\t\t$border_radius['border-top-right-radius']    = $custom_border_radius['topRight'] ?? '';\r\n-\t\t\t$border_radius['border-bottom-right-radius'] = $custom_border_radius['bottomRight'] ?? '';\r\n-\t\t\t$border_radius['border-bottom-left-radius']  = $custom_border_radius['bottomLeft'] ?? '';\r\n-\r\n-\t\t\tforeach ( $border_radius as $border_radius_side => $border_radius_value ) {\r\n-\t\t\t\tif ( '' !== $border_radius_value ) {\r\n-\t\t\t\t\t$style .= $border_radius_side . ':' . $border_radius_value . ';';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => $style,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for border width from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_border_width_class_and_style( $attributes ) {\r\n-\t\t$custom_border = $attributes['style']['border'] ?? '';\r\n-\r\n-\t\tif ( '' === $custom_border ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t$style = '';\r\n-\r\n-\t\tif ( array_key_exists( 'width', ( $custom_border ) ) && ! empty( $custom_border['width'] ) ) {\r\n-\t\t\t\u002F\u002F Linked sides.\r\n-\t\t\t$style .= 'border-style: solid;';\r\n-\t\t\t$style .= 'border-width:' . $custom_border['width'] . ';';\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Unlinked sides.\r\n-\t\t\tforeach ( $custom_border as $border_width_side => $border_width_value ) {\r\n-\t\t\t\tif ( isset( $border_width_value['width'] ) ) {\r\n-\t\t\t\t\t$style .= 'border-' . $border_width_side . '-style: solid;';\r\n-\t\t\t\t\t$style .= 'border-' . $border_width_side . '-width:' . $border_width_value['width'] . ';';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => $style,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for border width from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_border_style_class_and_style( $attributes ) {\r\n-\t\t$custom_border = $attributes['style']['border'] ?? '';\r\n-\r\n-\t\tif ( '' === $custom_border ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t$style = '';\r\n-\r\n-\t\tif ( array_key_exists( 'style', ( $custom_border ) ) && ! empty( $custom_border['style'] ) ) {\r\n-\t\t\t$style = 'border-style:' . $custom_border['style'] . ';';\r\n-\t\t} else {\r\n-\t\t\tforeach ( $custom_border as $side => $value ) {\r\n-\t\t\t\tif ( isset( $value['style'] ) ) {\r\n-\t\t\t\t\t$style .= 'border-' . $side . '-style:' . $value['style'] . ';';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => $style,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get space-separated classes from block attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @param array $properties Properties to get classes from.\r\n-\t *\r\n-\t * @return string Space-separated classes.\r\n-\t *\u002F\r\n-\tpublic static function get_classes_by_attributes( $attributes, $properties = array() ) {\r\n-\t\t$classes_and_styles = self::get_classes_and_styles_by_attributes( $attributes, $properties );\r\n-\r\n-\t\treturn $classes_and_styles['classes'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for font-family from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_font_family_class_and_style( $attributes ) {\r\n-\r\n-\t\t$font_family = $attributes['fontFamily'] ?? '';\r\n-\r\n-\t\tif ( $font_family ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => sprintf( 'has-%s-font-family', $font_family ),\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for font-size from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_font_size_class_and_style( $attributes ) {\r\n-\r\n-\t\t$font_size = $attributes['fontSize'] ?? '';\r\n-\r\n-\t\t$custom_font_size = $attributes['style']['typography']['fontSize'] ?? '';\r\n-\r\n-\t\tif ( ! $font_size && '' === $custom_font_size ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\tif ( $font_size ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => sprintf( 'has-font-size has-%s-font-size', $font_size ),\r\n-\t\t\t\t'style' => sprintf( 'font-size: %s;', self::get_font_size_value( $font_size ) ),\r\n-\t\t\t);\r\n-\t\t} elseif ( '' !== $custom_font_size ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'font-size: %s;', $custom_font_size ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for font-style from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_font_style_class_and_style( $attributes ) {\r\n-\r\n-\t\t$custom_font_style = $attributes['style']['typography']['fontStyle'] ?? '';\r\n-\r\n-\t\tif ( '' !== $custom_font_style ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'font-style: %s;', $custom_font_style ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for font-weight from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_font_weight_class_and_style( $attributes ) {\r\n-\r\n-\t\t$custom_font_weight = $attributes['style']['typography']['fontWeight'] ?? '';\r\n-\r\n-\t\tif ( '' !== $custom_font_weight ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'font-weight: %s;', $custom_font_weight ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for letter-spacing from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_letter_spacing_class_and_style( $attributes ) {\r\n-\r\n-\t\t$custom_letter_spacing = $attributes['style']['typography']['letterSpacing'] ?? '';\r\n-\r\n-\t\tif ( '' !== $custom_letter_spacing ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'letter-spacing: %s;', $custom_letter_spacing ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for line height from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_line_height_class_and_style( $attributes ) {\r\n-\r\n-\t\t$line_height = $attributes['style']['typography']['lineHeight'] ?? '';\r\n-\r\n-\t\tif ( ! $line_height ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => sprintf( 'line-height: %s;', $line_height ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get a value from an array based on a path e.g style.elements.link\r\n-\t *\r\n-\t * @param array  $array Target array.\r\n-\t * @param string $path Path joined by delimiter.\r\n-\t * @param string $delimiter Chosen delimiter defaults to \".\".\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected static function array_get_value_by_path( array &$array, $path, $delimiter = '.' ) {\r\n-\t\t$array_path = explode( $delimiter, $path );\r\n-\t\t$ref        = &$array;\r\n-\r\n-\t\tforeach ( $array_path as $key ) {\r\n-\t\t\tif ( is_array( $ref ) && array_key_exists( $key, $ref ) ) {\r\n-\t\t\t\t$ref = &$ref[ $key ];\r\n-\t\t\t} else {\r\n-\t\t\t\treturn null;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $ref;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for link-color from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_link_color_class_and_style( $attributes ) {\r\n-\t\t$link_color = self::array_get_value_by_path( $attributes, 'style.elements.link.color.text' );\r\n-\r\n-\t\tif ( empty( $link_color ) ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F If the link color is selected from the theme color picker, the value of $link_color is var:preset|color|slug.\r\n-\t\t\u002F\u002F If the link color is selected from the core color picker, the value of $link_color is an hex value.\r\n-\t\t\u002F\u002F When the link color is a string var:preset|color|slug we parsed it for get the slug, otherwise we use the hex value.\r\n-\t\tif ( strstr( $link_color, '|' ) ) {\r\n-\t\t\t$link_color_parts = explode( '|', $link_color );\r\n-\t\t\t$link_color       = self::get_preset_value( end( $link_color_parts ) );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => 'has-link-color',\r\n-\t\t\t'style' => sprintf( 'color: %s;', $link_color ),\r\n-\t\t\t'value' => $link_color,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for link-hover-color from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_link_hover_color_class_and_style( $attributes ) {\r\n-\t\t$link_color = self::array_get_value_by_path( $attributes, 'style.elements.link.:hover.color.text' );\r\n-\r\n-\t\tif ( empty( $link_color ) ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F If the link color is selected from the theme color picker, the value of $link_color is var:preset|color|slug.\r\n-\t\t\u002F\u002F If the link color is selected from the core color picker, the value of $link_color is an hex value.\r\n-\t\t\u002F\u002F When the link color is a string var:preset|color|slug we parsed it for get the slug, otherwise we use the hex value.\r\n-\t\tif ( strstr( $link_color, '|' ) ) {\r\n-\t\t\t$link_color_parts = explode( '|', $link_color );\r\n-\t\t\t$link_color       = self::get_preset_value( end( $link_color_parts ) );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => 'has-link-color',\r\n-\t\t\t'style' => sprintf( 'color: %s;', $link_color ),\r\n-\t\t\t'value' => $link_color,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for margin from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_margin_class_and_style( $attributes ) {\r\n-\t\t$margin = $attributes['style']['spacing']['margin'] ?? null;\r\n-\r\n-\t\tif ( ! $margin ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t$spacing_values_css = '';\r\n-\r\n-\t\tforeach ( $margin as $margin_side => $margin_value ) {\r\n-\t\t\t$spacing_values_css .= 'margin-' . $margin_side . ':' . self::get_spacing_value( $margin_value ) . ';';\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => $spacing_values_css,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for padding from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_padding_class_and_style( $attributes ) {\r\n-\t\t$padding = $attributes['style']['spacing']['padding'] ?? null;\r\n-\r\n-\t\tif ( ! $padding ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\t$spacing_values_css = '';\r\n-\r\n-\t\tforeach ( $padding as $padding_side => $padding_value ) {\r\n-\t\t\t$spacing_values_css .= 'padding-' . $padding_side . ':' . self::get_spacing_value( $padding_value ) . ';';\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'class' => null,\r\n-\t\t\t'style' => $spacing_values_css,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get space-separated style rules from block attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @param array $properties Properties to get styles from.\r\n-\t *\r\n-\t * @return string Space-separated style rules.\r\n-\t *\u002F\r\n-\tpublic static function get_styles_by_attributes( $attributes, $properties = array() ) {\r\n-\t\t$classes_and_styles = self::get_classes_and_styles_by_attributes( $attributes, $properties );\r\n-\r\n-\t\treturn $classes_and_styles['styles'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for text align from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_text_align_class_and_style( $attributes ) {\r\n-\t\tif ( isset( $attributes['textAlign'] ) ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => 'has-text-align-' . $attributes['textAlign'],\r\n-\t\t\t\t'style' => null,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for text-color from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_text_color_class_and_style( $attributes ) {\r\n-\r\n-\t\t$text_color = $attributes['textColor'] ?? '';\r\n-\r\n-\t\t$custom_text_color = $attributes['style']['color']['text'] ?? '';\r\n-\r\n-\t\tif ( ! $text_color && ! $custom_text_color ) {\r\n-\t\t\treturn self::EMPTY_STYLE;\r\n-\t\t}\r\n-\r\n-\t\tif ( $text_color ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => sprintf( 'has-text-color' ),\r\n-\t\t\t\t'value' => self::get_preset_value( $text_color ),\r\n-\t\t\t\t'style' => sprintf( 'color: %s;', self::get_preset_value( $text_color ) ),\r\n-\t\t\t);\r\n-\t\t} elseif ( $custom_text_color ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'color: %s;', $custom_text_color ),\r\n-\t\t\t\t'value' => $custom_text_color,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for text-decoration from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_text_decoration_class_and_style( $attributes ) {\r\n-\r\n-\t\t$custom_text_decoration = $attributes['style']['typography']['textDecoration'] ?? '';\r\n-\r\n-\t\tif ( '' !== $custom_text_decoration ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'text-decoration: %s;', $custom_text_decoration ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get class and style for text-transform from attributes.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_text_transform_class_and_style( $attributes ) {\r\n-\r\n-\t\t$custom_text_transform = $attributes['style']['typography']['textTransform'] ?? '';\r\n-\r\n-\t\tif ( '' !== $custom_text_transform ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'class' => null,\r\n-\t\t\t\t'style' => sprintf( 'text-transform: %s;', $custom_text_transform ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn self::EMPTY_STYLE;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get classes and styles from attributes.\r\n-\t *\r\n-\t * Excludes link_color and link_hover_color since those should not apply to the container.\r\n-\t *\r\n-\t * @param array $attributes Block attributes.\r\n-\t * @param array $properties Properties to get classes\u002Fstyles from.\r\n-\t * @param array $exclude Properties to exclude.\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_classes_and_styles_by_attributes( $attributes, $properties = array(), $exclude = array() ) {\r\n-\t\t$classes_and_styles = array(\r\n-\t\t\t'align'            => self::get_align_class_and_style( $attributes ),\r\n-\t\t\t'background_color' => self::get_background_color_class_and_style( $attributes ),\r\n-\t\t\t'border_color'     => self::get_border_color_class_and_style( $attributes ),\r\n-\t\t\t'border_radius'    => self::get_border_radius_class_and_style( $attributes ),\r\n-\t\t\t'border_width'     => self::get_border_width_class_and_style( $attributes ),\r\n-\t\t\t'border_style'     => self::get_border_style_class_and_style( $attributes ),\r\n-\t\t\t'font_family'      => self::get_font_family_class_and_style( $attributes ),\r\n-\t\t\t'font_size'        => self::get_font_size_class_and_style( $attributes ),\r\n-\t\t\t'font_style'       => self::get_font_style_class_and_style( $attributes ),\r\n-\t\t\t'font_weight'      => self::get_font_weight_class_and_style( $attributes ),\r\n-\t\t\t'letter_spacing'   => self::get_letter_spacing_class_and_style( $attributes ),\r\n-\t\t\t'line_height'      => self::get_line_height_class_and_style( $attributes ),\r\n-\t\t\t'margin'           => self::get_margin_class_and_style( $attributes ),\r\n-\t\t\t'padding'          => self::get_padding_class_and_style( $attributes ),\r\n-\t\t\t'text_align'       => self::get_text_align_class_and_style( $attributes ),\r\n-\t\t\t'text_color'       => self::get_text_color_class_and_style( $attributes ),\r\n-\t\t\t'text_decoration'  => self::get_text_decoration_class_and_style( $attributes ),\r\n-\t\t\t'text_transform'   => self::get_text_transform_class_and_style( $attributes ),\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $properties ) ) {\r\n-\t\t\tforeach ( $classes_and_styles as $key => $value ) {\r\n-\t\t\t\tif ( ! in_array( $key, $properties, true ) ) {\r\n-\t\t\t\t\tunset( $classes_and_styles[ $key ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $exclude ) ) {\r\n-\t\t\tforeach ( $classes_and_styles as $key => $value ) {\r\n-\t\t\t\tif ( in_array( $key, $exclude, true ) ) {\r\n-\t\t\t\t\tunset( $classes_and_styles[ $key ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$classes_and_styles = array_filter( $classes_and_styles );\r\n-\r\n-\t\t$classes = array_map(\r\n-\t\t\tfunction ( $item ) {\r\n-\t\t\t\treturn $item['class'];\r\n-\t\t\t},\r\n-\t\t\t$classes_and_styles\r\n-\t\t);\r\n-\r\n-\t\t$styles = array_map(\r\n-\t\t\tfunction ( $item ) {\r\n-\t\t\t\treturn $item['style'];\r\n-\t\t\t},\r\n-\t\t\t\u002F\u002F Exclude link color styles from parent to avoid conflict with text color.\r\n-\t\t\tarray_diff_key(\r\n-\t\t\t\t$classes_and_styles,\r\n-\t\t\t\tarray_flip( array( 'link_color' ) )\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$classes = array_filter( $classes );\r\n-\t\t$styles  = array_filter( $styles );\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'classes' => implode( ' ', $classes ),\r\n-\t\t\t'styles'  => implode( ' ', $styles ),\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Gutenberg\\Utils;\n+\n+\u002F**\n+ * StyleAttributes class used for getting class and style from attributes.\n+ *\u002F\n+class StyleAttributes {\n+\n+\t\u002F\u002F Empty style array.\n+\tconst EMPTY_STYLE = [\n+\t\t'class' => '',\n+\t\t'style' => '',\n+\t\t'value' => '',\n+\t];\n+\n+\t\u002F**\n+\t * If color value is in preset format, convert it to a CSS var. Else return same value\n+\t * For example:\n+\t * \"var:preset|color|pale-pink\" -> \"var(--wp--preset--color--pale-pink)\"\n+\t * \"#98b66e\" -> \"#98b66e\"\n+\t *\n+\t * @param string $color_value value to be processed.\n+\t *\n+\t * @return (string)\n+\t *\u002F\n+\tpublic static function get_color_value( $color_value ) {\n+\t\tif ( is_string( $color_value ) && str_contains( $color_value, 'var:preset|color|' ) ) {\n+\t\t\t$color_value = str_replace( 'var:preset|color|', '', $color_value );\n+\t\t\treturn sprintf( 'var(--wp--preset--color--%s)', $color_value );\n+\t\t}\n+\n+\t\treturn $color_value;\n+\t}\n+\n+\t\u002F**\n+\t * Get CSS value for color preset.\n+\t *\n+\t * @param string $preset_name Preset name.\n+\t *\n+\t * @return string CSS value for color preset.\n+\t *\u002F\n+\tpublic static function get_preset_value( $preset_name ) {\n+\t\treturn \"var(--wp--preset--color--$preset_name)\";\n+\t}\n+\n+\t\t\u002F**\n+\t * Get CSS value for font size.\n+\t *\n+\t * @param string $preset_name Preset name.\n+\t *\n+\t * @return string CSS value for font size.\n+\t *\u002F\n+\tpublic static function get_font_size_value( $preset_name ) {\n+\t\treturn \"var(--wp--preset--font-size--$preset_name)\";\n+\t}\n+\n+\t\u002F**\n+\t * If spacing value is in preset format, convert it to a CSS var. Else return same value\n+\t * For example:\n+\t * \"var:preset|spacing|50\" -> \"var(--wp--preset--spacing--50)\"\n+\t * \"50px\" -> \"50px\"\n+\t *\n+\t * @param string $spacing_value value to be processed.\n+\t *\n+\t * @return (string)\n+\t *\u002F\n+\tpublic static function get_spacing_value( $spacing_value ) {\n+\t\t\u002F\u002F Used following code as reference: https:\u002F\u002Fgithub.com\u002FWordPress\u002Fgutenberg\u002Fblob\u002Fcff6d70d6ff5a26e212958623dc3130569f95685\u002Flib\u002Fblock-supports\u002Flayout.php\u002F#L219-L225.\n+\t\tif ( is_string( $spacing_value ) && str_contains( $spacing_value, 'var:preset|spacing|' ) ) {\n+\t\t\t$spacing_value = str_replace( 'var:preset|spacing|', '', $spacing_value );\n+\t\t\treturn sprintf( 'var(--wp--preset--spacing--%s)', $spacing_value );\n+\t\t}\n+\n+\t\treturn $spacing_value;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for align from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_align_class_and_style( $attributes ) {\n+\t\t$align_attribute = $attributes['align'] ?? null;\n+\n+\t\tif ( 'wide' === $align_attribute ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'alignwide',\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( 'full' === $align_attribute ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'alignfull',\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( 'left' === $align_attribute ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'alignleft',\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( 'right' === $align_attribute ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'alignright',\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( 'center' === $align_attribute ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'aligncenter',\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for background-color from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_background_color_class_and_style( $attributes ) {\n+\t\t$gradient                = $attributes['gradient'] ?? null;\n+\t\t$background_color        = $attributes['backgroundColor'] ?? '';\n+\t\t$custom_background_color = $attributes['style']['color']['background'] ?? '';\n+\t\t$classes                 = [ $gradient ];\n+\t\t$styles                  = [];\n+\t\t$value                   = null;\n+\n+\t\tif ( $background_color || $custom_background_color || $gradient ) {\n+\t\t\t$classes[] = 'has-background';\n+\t\t}\n+\n+\t\tif ( $background_color ) {\n+\t\t\t$value    = self::get_preset_value( $background_color );\n+\t\t\t$styles[] = sprintf( 'background-color: %s;', $value );\n+\t\t}\n+\n+\t\tif ( $custom_background_color ) {\n+\t\t\t$styles[] = sprintf( 'background-color: %s;', $custom_background_color );\n+\t\t\t$value    = $custom_background_color;\n+\t\t}\n+\n+\t\tif ( $gradient ) {\n+\t\t\t$classes[] = sprintf( 'has-%s-gradient-background', $gradient );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => self::join_styles( $classes ),\n+\t\t\t'style' => self::join_styles( $styles ),\n+\t\t\t'value' => $value,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Join classes and styles while removing duplicates and null values.\n+\t *\n+\t * @param array $rules Array of classes or styles.\n+\t * @return array\n+\t *\u002F\n+\tprotected static function join_styles( $rules ) {\n+\t\treturn implode( ' ', array_unique( array_filter( $rules ) ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for border-color from attributes.\n+\t *\n+\t * Data passed to this function is not always consistent. It can be:\n+\t * Linked - preset color: $attributes['borderColor'] => 'luminous-vivid-orange'.\n+\t * Linked - custom color: $attributes['style']['border']['color'] => '#681228'.\n+\t * Unlinked - preset color: $attributes['style']['border']['top']['color'] => 'var:preset|color|luminous-vivid-orange'\n+\t * Unlinked - custom color: $attributes['style']['border']['top']['color'] => '#681228'.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_border_color_class_and_style( $attributes ) {\n+\t\t$border_color_linked_preset = $attributes['borderColor'] ?? '';\n+\t\t$border_color_linked_custom = $attributes['style']['border']['color'] ?? '';\n+\t\t$custom_border              = $attributes['style']['border'] ?? '';\n+\n+\t\t$class = '';\n+\t\t$style = '';\n+\t\t$value = '';\n+\n+\t\tif ( $border_color_linked_preset ) {\n+\t\t\t\u002F\u002F Linked preset color.\n+\t\t\t$value  = self::get_preset_value( $border_color_linked_preset );\n+\t\t\t$style .= 'border-color:' . $value . ';';\n+\t\t} elseif ( $border_color_linked_custom ) {\n+\t\t\t\u002F\u002F Linked custom color.\n+\t\t\t$style .= 'border-color:' . $border_color_linked_custom . ';';\n+\t\t\t$value  = $border_color_linked_custom;\n+\t\t} elseif ( is_array( $custom_border ) ) {\n+\t\t\t\u002F\u002F $style .= 'border-style: solid;';\n+\t\t\t\u002F\u002F Unlinked.\n+\t\t\tforeach ( $custom_border as $border_color_key => $border_color_value ) {\n+\t\t\t\tif ( is_array( $border_color_value ) && array_key_exists( 'color', ( $border_color_value ) ) ) {\n+\t\t\t\t\t$style .= 'border-' . $border_color_key . '-color:' . self::get_color_value( $border_color_value['color'] ) . ';';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $class && ! $style ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => $class,\n+\t\t\t'style' => $style,\n+\t\t\t'value' => $value,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for border-radius from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_border_radius_class_and_style( $attributes ) {\n+\t\t$custom_border_radius = $attributes['style']['border']['radius'] ?? '';\n+\n+\t\tif ( '' === $custom_border_radius ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t$style = '';\n+\n+\t\tif ( is_string( $custom_border_radius ) ) {\n+\t\t\t\u002F\u002F Linked sides.\n+\t\t\t$style = 'border-radius:' . $custom_border_radius . ';';\n+\t\t} else {\n+\t\t\t\u002F\u002F Unlinked sides.\n+\t\t\t$border_radius = array();\n+\n+\t\t\t$border_radius['border-top-left-radius']     = $custom_border_radius['topLeft'] ?? '';\n+\t\t\t$border_radius['border-top-right-radius']    = $custom_border_radius['topRight'] ?? '';\n+\t\t\t$border_radius['border-bottom-right-radius'] = $custom_border_radius['bottomRight'] ?? '';\n+\t\t\t$border_radius['border-bottom-left-radius']  = $custom_border_radius['bottomLeft'] ?? '';\n+\n+\t\t\tforeach ( $border_radius as $border_radius_side => $border_radius_value ) {\n+\t\t\t\tif ( '' !== $border_radius_value ) {\n+\t\t\t\t\t$style .= $border_radius_side . ':' . $border_radius_value . ';';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => $style,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for border width from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_border_width_class_and_style( $attributes ) {\n+\t\t$custom_border = $attributes['style']['border'] ?? '';\n+\n+\t\tif ( '' === $custom_border ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t$style = '';\n+\n+\t\tif ( array_key_exists( 'width', ( $custom_border ) ) && ! empty( $custom_border['width'] ) ) {\n+\t\t\t\u002F\u002F Linked sides.\n+\t\t\t$style .= 'border-style: solid;';\n+\t\t\t$style .= 'border-width:' . $custom_border['width'] . ';';\n+\t\t} else {\n+\t\t\t\u002F\u002F Unlinked sides.\n+\t\t\tforeach ( $custom_border as $border_width_side => $border_width_value ) {\n+\t\t\t\tif ( isset( $border_width_value['width'] ) ) {\n+\t\t\t\t\t$style .= 'border-' . $border_width_side . '-style: solid;';\n+\t\t\t\t\t$style .= 'border-' . $border_width_side . '-width:' . $border_width_value['width'] . ';';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => $style,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for border width from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_border_style_class_and_style( $attributes ) {\n+\t\t$custom_border = $attributes['style']['border'] ?? '';\n+\n+\t\tif ( '' === $custom_border ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t$style = '';\n+\n+\t\tif ( array_key_exists( 'style', ( $custom_border ) ) && ! empty( $custom_border['style'] ) ) {\n+\t\t\t$style = 'border-style:' . $custom_border['style'] . ';';\n+\t\t} else {\n+\t\t\tforeach ( $custom_border as $side => $value ) {\n+\t\t\t\tif ( isset( $value['style'] ) ) {\n+\t\t\t\t\t$style .= 'border-' . $side . '-style:' . $value['style'] . ';';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => $style,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get space-separated classes from block attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @param array $properties Properties to get classes from.\n+\t *\n+\t * @return string Space-separated classes.\n+\t *\u002F\n+\tpublic static function get_classes_by_attributes( $attributes, $properties = array() ) {\n+\t\t$classes_and_styles = self::get_classes_and_styles_by_attributes( $attributes, $properties );\n+\n+\t\treturn $classes_and_styles['classes'];\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for font-family from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_font_family_class_and_style( $attributes ) {\n+\n+\t\t$font_family = $attributes['fontFamily'] ?? '';\n+\n+\t\tif ( $font_family ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => sprintf( 'has-%s-font-family', $font_family ),\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for font-size from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_font_size_class_and_style( $attributes ) {\n+\n+\t\t$font_size = $attributes['fontSize'] ?? '';\n+\n+\t\t$custom_font_size = $attributes['style']['typography']['fontSize'] ?? '';\n+\n+\t\tif ( ! $font_size && '' === $custom_font_size ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\tif ( $font_size ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => sprintf( 'has-font-size has-%s-font-size', $font_size ),\n+\t\t\t\t'style' => sprintf( 'font-size: %s;', self::get_font_size_value( $font_size ) ),\n+\t\t\t);\n+\t\t} elseif ( '' !== $custom_font_size ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'font-size: %s;', $custom_font_size ),\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for font-style from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_font_style_class_and_style( $attributes ) {\n+\n+\t\t$custom_font_style = $attributes['style']['typography']['fontStyle'] ?? '';\n+\n+\t\tif ( '' !== $custom_font_style ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'font-style: %s;', $custom_font_style ),\n+\t\t\t);\n+\t\t}\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for font-weight from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_font_weight_class_and_style( $attributes ) {\n+\n+\t\t$custom_font_weight = $attributes['style']['typography']['fontWeight'] ?? '';\n+\n+\t\tif ( '' !== $custom_font_weight ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'font-weight: %s;', $custom_font_weight ),\n+\t\t\t);\n+\t\t}\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for letter-spacing from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_letter_spacing_class_and_style( $attributes ) {\n+\n+\t\t$custom_letter_spacing = $attributes['style']['typography']['letterSpacing'] ?? '';\n+\n+\t\tif ( '' !== $custom_letter_spacing ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'letter-spacing: %s;', $custom_letter_spacing ),\n+\t\t\t);\n+\t\t}\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for line height from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_line_height_class_and_style( $attributes ) {\n+\n+\t\t$line_height = $attributes['style']['typography']['lineHeight'] ?? '';\n+\n+\t\tif ( ! $line_height ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => sprintf( 'line-height: %s;', $line_height ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get a value from an array based on a path e.g style.elements.link\n+\t *\n+\t * @param array  $array Target array.\n+\t * @param string $path Path joined by delimiter.\n+\t * @param string $delimiter Chosen delimiter defaults to \".\".\n+\t * @return mixed\n+\t *\u002F\n+\tprotected static function array_get_value_by_path( array &$array, $path, $delimiter = '.' ) {\n+\t\t$array_path = explode( $delimiter, $path );\n+\t\t$ref        = &$array;\n+\n+\t\tforeach ( $array_path as $key ) {\n+\t\t\tif ( is_array( $ref ) && array_key_exists( $key, $ref ) ) {\n+\t\t\t\t$ref = &$ref[ $key ];\n+\t\t\t} else {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\t\t}\n+\t\treturn $ref;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for link-color from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_link_color_class_and_style( $attributes ) {\n+\t\t$link_color = self::array_get_value_by_path( $attributes, 'style.elements.link.color.text' );\n+\n+\t\tif ( empty( $link_color ) ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t\u002F\u002F If the link color is selected from the theme color picker, the value of $link_color is var:preset|color|slug.\n+\t\t\u002F\u002F If the link color is selected from the core color picker, the value of $link_color is an hex value.\n+\t\t\u002F\u002F When the link color is a string var:preset|color|slug we parsed it for get the slug, otherwise we use the hex value.\n+\t\tif ( strstr( $link_color, '|' ) ) {\n+\t\t\t$link_color_parts = explode( '|', $link_color );\n+\t\t\t$link_color       = self::get_preset_value( end( $link_color_parts ) );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => 'has-link-color',\n+\t\t\t'style' => sprintf( 'color: %s;', $link_color ),\n+\t\t\t'value' => $link_color,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for link-hover-color from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_link_hover_color_class_and_style( $attributes ) {\n+\t\t$link_color = self::array_get_value_by_path( $attributes, 'style.elements.link.:hover.color.text' );\n+\n+\t\tif ( empty( $link_color ) ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t\u002F\u002F If the link color is selected from the theme color picker, the value of $link_color is var:preset|color|slug.\n+\t\t\u002F\u002F If the link color is selected from the core color picker, the value of $link_color is an hex value.\n+\t\t\u002F\u002F When the link color is a string var:preset|color|slug we parsed it for get the slug, otherwise we use the hex value.\n+\t\tif ( strstr( $link_color, '|' ) ) {\n+\t\t\t$link_color_parts = explode( '|', $link_color );\n+\t\t\t$link_color       = self::get_preset_value( end( $link_color_parts ) );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => 'has-link-color',\n+\t\t\t'style' => sprintf( 'color: %s;', $link_color ),\n+\t\t\t'value' => $link_color,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for margin from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_margin_class_and_style( $attributes ) {\n+\t\t$margin = $attributes['style']['spacing']['margin'] ?? null;\n+\n+\t\tif ( ! $margin ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t$spacing_values_css = '';\n+\n+\t\tforeach ( $margin as $margin_side => $margin_value ) {\n+\t\t\t$spacing_values_css .= 'margin-' . $margin_side . ':' . self::get_spacing_value( $margin_value ) . ';';\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => $spacing_values_css,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for padding from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_padding_class_and_style( $attributes ) {\n+\t\t$padding = $attributes['style']['spacing']['padding'] ?? null;\n+\n+\t\tif ( ! $padding ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\t$spacing_values_css = '';\n+\n+\t\tforeach ( $padding as $padding_side => $padding_value ) {\n+\t\t\t$spacing_values_css .= 'padding-' . $padding_side . ':' . self::get_spacing_value( $padding_value ) . ';';\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'class' => null,\n+\t\t\t'style' => $spacing_values_css,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get space-separated style rules from block attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @param array $properties Properties to get styles from.\n+\t *\n+\t * @return string Space-separated style rules.\n+\t *\u002F\n+\tpublic static function get_styles_by_attributes( $attributes, $properties = array() ) {\n+\t\t$classes_and_styles = self::get_classes_and_styles_by_attributes( $attributes, $properties );\n+\n+\t\treturn $classes_and_styles['styles'];\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for text align from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_text_align_class_and_style( $attributes ) {\n+\t\tif ( isset( $attributes['textAlign'] ) ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => 'has-text-align-' . $attributes['textAlign'],\n+\t\t\t\t'style' => null,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for text-color from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_text_color_class_and_style( $attributes ) {\n+\n+\t\t$text_color = $attributes['textColor'] ?? '';\n+\n+\t\t$custom_text_color = $attributes['style']['color']['text'] ?? '';\n+\n+\t\tif ( ! $text_color && ! $custom_text_color ) {\n+\t\t\treturn self::EMPTY_STYLE;\n+\t\t}\n+\n+\t\tif ( $text_color ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => sprintf( 'has-text-color' ),\n+\t\t\t\t'value' => self::get_preset_value( $text_color ),\n+\t\t\t\t'style' => sprintf( 'color: %s;', self::get_preset_value( $text_color ) ),\n+\t\t\t);\n+\t\t} elseif ( $custom_text_color ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'color: %s;', $custom_text_color ),\n+\t\t\t\t'value' => $custom_text_color,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for text-decoration from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_text_decoration_class_and_style( $attributes ) {\n+\n+\t\t$custom_text_decoration = $attributes['style']['typography']['textDecoration'] ?? '';\n+\n+\t\tif ( '' !== $custom_text_decoration ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'text-decoration: %s;', $custom_text_decoration ),\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get class and style for text-transform from attributes.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_text_transform_class_and_style( $attributes ) {\n+\n+\t\t$custom_text_transform = $attributes['style']['typography']['textTransform'] ?? '';\n+\n+\t\tif ( '' !== $custom_text_transform ) {\n+\t\t\treturn array(\n+\t\t\t\t'class' => null,\n+\t\t\t\t'style' => sprintf( 'text-transform: %s;', $custom_text_transform ),\n+\t\t\t);\n+\t\t}\n+\t\treturn self::EMPTY_STYLE;\n+\t}\n+\n+\t\u002F**\n+\t * Get classes and styles from attributes.\n+\t *\n+\t * Excludes link_color and link_hover_color since those should not apply to the container.\n+\t *\n+\t * @param array $attributes Block attributes.\n+\t * @param array $properties Properties to get classes\u002Fstyles from.\n+\t * @param array $exclude Properties to exclude.\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_classes_and_styles_by_attributes( $attributes, $properties = array(), $exclude = array() ) {\n+\t\t$classes_and_styles = array(\n+\t\t\t'align'            => self::get_align_class_and_style( $attributes ),\n+\t\t\t'background_color' => self::get_background_color_class_and_style( $attributes ),\n+\t\t\t'border_color'     => self::get_border_color_class_and_style( $attributes ),\n+\t\t\t'border_radius'    => self::get_border_radius_class_and_style( $attributes ),\n+\t\t\t'border_width'     => self::get_border_width_class_and_style( $attributes ),\n+\t\t\t'border_style'     => self::get_border_style_class_and_style( $attributes ),\n+\t\t\t'font_family'      => self::get_font_family_class_and_style( $attributes ),\n+\t\t\t'font_size'        => self::get_font_size_class_and_style( $attributes ),\n+\t\t\t'font_style'       => self::get_font_style_class_and_style( $attributes ),\n+\t\t\t'font_weight'      => self::get_font_weight_class_and_style( $attributes ),\n+\t\t\t'letter_spacing'   => self::get_letter_spacing_class_and_style( $attributes ),\n+\t\t\t'line_height'      => self::get_line_height_class_and_style( $attributes ),\n+\t\t\t'margin'           => self::get_margin_class_and_style( $attributes ),\n+\t\t\t'padding'          => self::get_padding_class_and_style( $attributes ),\n+\t\t\t'text_align'       => self::get_text_align_class_and_style( $attributes ),\n+\t\t\t'text_color'       => self::get_text_color_class_and_style( $attributes ),\n+\t\t\t'text_decoration'  => self::get_text_decoration_class_and_style( $attributes ),\n+\t\t\t'text_transform'   => self::get_text_transform_class_and_style( $attributes ),\n+\t\t);\n+\n+\t\tif ( ! empty( $properties ) ) {\n+\t\t\tforeach ( $classes_and_styles as $key => $value ) {\n+\t\t\t\tif ( ! in_array( $key, $properties, true ) ) {\n+\t\t\t\t\tunset( $classes_and_styles[ $key ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $exclude ) ) {\n+\t\t\tforeach ( $classes_and_styles as $key => $value ) {\n+\t\t\t\tif ( in_array( $key, $exclude, true ) ) {\n+\t\t\t\t\tunset( $classes_and_styles[ $key ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$classes_and_styles = array_filter( $classes_and_styles );\n+\n+\t\t$classes = array_map(\n+\t\t\tfunction ( $item ) {\n+\t\t\t\treturn $item['class'];\n+\t\t\t},\n+\t\t\t$classes_and_styles\n+\t\t);\n+\n+\t\t$styles = array_map(\n+\t\t\tfunction ( $item ) {\n+\t\t\t\treturn $item['style'];\n+\t\t\t},\n+\t\t\t\u002F\u002F Exclude link color styles from parent to avoid conflict with text color.\n+\t\t\tarray_diff_key(\n+\t\t\t\t$classes_and_styles,\n+\t\t\t\tarray_flip( array( 'link_color' ) )\n+\t\t\t)\n+\t\t);\n+\n+\t\t$classes = array_filter( $classes );\n+\t\t$styles  = array_filter( $styles );\n+\n+\t\treturn array(\n+\t\t\t'classes' => implode( ' ', $classes ),\n+\t\t\t'styles'  => implode( ' ', $styles ),\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,80 +1,80 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Handle request(ajax|api) call step by step\r\n- *\r\n- * Class LP_Handle_Steps\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Handle_Steps {\r\n-\t\u002F**\r\n-\t * @var LP_Group_Step[]\r\n-\t *\u002F\r\n-\tpublic $group_steps = array();\r\n-\r\n-\t\u002F**\r\n-\t * @param array $params | keys: steps, step, data.\r\n-\t *\u002F\r\n-\tpublic function handle( array $params ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$steps = $params['steps'] ?? array();\r\n-\r\n-\t\t\tif ( empty( $steps ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid steps', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$step = $params['step'] ?? '';\r\n-\t\t\tif ( empty( $step ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid step', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data = $params['data'] ?? array();\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $response LP_Step\r\n-\t\t\t *\u002F\r\n-\t\t\t$response = $this->call_step( $step, $data );\r\n-\r\n-\t\t\t\u002F\u002F Next step or Finish.\r\n-\t\t\tif ( 'finished' === $response->status ) {\r\n-\t\t\t\t\u002F\u002F Set param to clone table next.\r\n-\t\t\t\t$index = array_search( $step, $steps, true );\r\n-\t\t\t\t++ $index;\r\n-\r\n-\t\t\t\tif ( ! empty( $steps[ $index ] ) ) {\r\n-\t\t\t\t\t$response->status = 'success';\r\n-\t\t\t\t\t$response->name   = $steps[ $index ];\r\n-\t\t\t\t\t$response->data   = new stdClass();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$response->status = 'finished';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $exception ) {\r\n-\t\t\t$response->message = $exception->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Call Step\r\n-\t *\r\n-\t * @param string $step .\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return false|mixed\r\n-\t * @throws Exception .\r\n-\t *\u002F\r\n-\tpublic function call_step( string $step, $data = array() ) {\r\n-\t\t$step_function = apply_filters( \"lp-handle-steps\u002F$step\", array( $this, $step ) );\r\n-\r\n-\t\tif ( is_callable( $step_function ) ) {\r\n-\t\t\treturn call_user_func( $step_function, $data );\r\n-\t\t}\r\n-\r\n-\t\tthrow new Exception( __( 'Function not found', 'learnpress' ) . $step_function );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Handle request(ajax|api) call step by step\n+ *\n+ * Class LP_Handle_Steps\n+ * @author tungnx\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Handle_Steps {\n+\t\u002F**\n+\t * @var LP_Group_Step[]\n+\t *\u002F\n+\tpublic $group_steps = array();\n+\n+\t\u002F**\n+\t * @param array $params | keys: steps, step, data.\n+\t *\u002F\n+\tpublic function handle( array $params ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$steps = $params['steps'] ?? array();\n+\n+\t\t\tif ( empty( $steps ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid steps', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$step = $params['step'] ?? '';\n+\t\t\tif ( empty( $step ) ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid step', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$data = $params['data'] ?? array();\n+\n+\t\t\t\u002F**\n+\t\t\t * @var $response LP_Step\n+\t\t\t *\u002F\n+\t\t\t$response = $this->call_step( $step, $data );\n+\n+\t\t\t\u002F\u002F Next step or Finish.\n+\t\t\tif ( 'finished' === $response->status ) {\n+\t\t\t\t\u002F\u002F Set param to clone table next.\n+\t\t\t\t$index = array_search( $step, $steps, true );\n+\t\t\t\t++ $index;\n+\n+\t\t\t\tif ( ! empty( $steps[ $index ] ) ) {\n+\t\t\t\t\t$response->status = 'success';\n+\t\t\t\t\t$response->name   = $steps[ $index ];\n+\t\t\t\t\t$response->data   = new stdClass();\n+\t\t\t\t} else {\n+\t\t\t\t\t$response->status = 'finished';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Exception $exception ) {\n+\t\t\t$response->message = $exception->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Call Step\n+\t *\n+\t * @param string $step .\n+\t * @param array $data .\n+\t *\n+\t * @return false|mixed\n+\t * @throws Exception .\n+\t *\u002F\n+\tpublic function call_step( string $step, $data = array() ) {\n+\t\t$step_function = apply_filters( \"lp-handle-steps\u002F$step\", array( $this, $step ) );\n+\n+\t\tif ( is_callable( $step_function ) ) {\n+\t\t\treturn call_user_func( $step_function, $data );\n+\t\t}\n+\n+\t\tthrow new Exception( __( 'Function not found', 'learnpress' ) . $step_function );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Handle upgrade lp request(ajax|api) call step by step\r\n- *\r\n- * Class LP_Handle_Upgrade_Steps\r\n- * @author tungnx\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_Handle_Upgrade_Steps extends LP_Handle_Steps {\r\n-\t\u002F**\r\n-\t * Version.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $version = '';\r\n-\r\n-\t\u002F**\r\n-\t * Finish Step.\r\n-\t *\r\n-\t * @param LP_Step $step .\r\n-\t * @param string  $message .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tpublic function finish_step( LP_Step $step, string $message ): LP_Step {\r\n-\t\t$lp_db = LP_Database::getInstance();\r\n-\t\t$lp_db->set_step_complete( $step->name, 'completed' );\r\n-\r\n-\t\t$step->status  = 'finished';\r\n-\t\t$step->percent = 100;\r\n-\t\t$step->message = $message . '\" success - Handles success';\r\n-\r\n-\t\treturn $step;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return error message of a step\r\n-\t *\r\n-\t * @param string $step\r\n-\t * @param string $message\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function error_step( string $step, string $message ): string {\r\n-\t\treturn sprintf( 'Step %s: %s', $step, $message );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Handle upgrade lp request(ajax|api) call step by step\n+ *\n+ * Class LP_Handle_Upgrade_Steps\n+ * @author tungnx\n+ * @version 1.0.0\n+ *\u002F\n+class LP_Handle_Upgrade_Steps extends LP_Handle_Steps {\n+\t\u002F**\n+\t * Version.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $version = '';\n+\n+\t\u002F**\n+\t * Finish Step.\n+\t *\n+\t * @param LP_Step $step .\n+\t * @param string  $message .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tpublic function finish_step( LP_Step $step, string $message ): LP_Step {\n+\t\t$lp_db = LP_Database::getInstance();\n+\t\t$lp_db->set_step_complete( $step->name, 'completed' );\n+\n+\t\t$step->status  = 'finished';\n+\t\t$step->percent = 100;\n+\t\t$step->message = $message . '\" success - Handles success';\n+\n+\t\treturn $step;\n+\t}\n+\n+\t\u002F**\n+\t * Return error message of a step\n+\t *\n+\t * @param string $step\n+\t * @param string $message\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function error_step( string $step, string $message ): string {\n+\t\treturn sprintf( 'Step %s: %s', $step, $message );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FConfig.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FConfig.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FConfig.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FConfig.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,97 +1,97 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Helpers;\r\n-\r\n-\u002F**\r\n- * Class Config\r\n- * Read data config from file\r\n- *\r\n- * @package LP\\Helpers\r\n- * @since 4.1.6.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class Config {\r\n-\t\u002F*\r\n-\t * All of configurations of items\r\n-\t *\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected static $instance;\r\n-\tprotected $file_name = '';\r\n-\tprotected $items     = array();\r\n-\t\u002F**\r\n-\t * @var array Array name files config.\r\n-\t *\u002F\r\n-\tprotected $config_files = array();\r\n-\t\u002F**\r\n-\t * @var string Folder store files config\r\n-\t *\u002F\r\n-\tprotected $dir;\r\n-\r\n-\t\u002F**\r\n-\t * Config constructor.\r\n-\t *\r\n-\t * @param array $items\r\n-\t *\u002F\r\n-\tprotected function __construct( array $items = array() ) {\r\n-\t\t$this->dir = LP_PLUGIN_PATH . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR;\r\n-\r\n-\t\t$this->items = $items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the specified configuration value\r\n-\t *\r\n-\t * @param string $key | Format key: file_name:key_name:key_item:...\r\n-\t * @param string $path | from folder 'config'\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t * @version 1.0.0\r\n-\t * @since 4.1.6.4\r\n-\t *\u002F\r\n-\tpublic function get( string $key = '', string $path = '', array $args = [] ) {\r\n-\t\textract( $args );\r\n-\t\t$data_config        = array();\r\n-\t\t$data_config_by_key = array();\r\n-\r\n-\t\tif ( empty( $key ) ) {\r\n-\t\t\treturn $data_config;\r\n-\t\t}\r\n-\r\n-\t\t$keys      = explode( ':', $key );\r\n-\t\t$file_name = $keys[0];\r\n-\t\t$file_path = $this->dir . $path . DIRECTORY_SEPARATOR . $file_name . '.php';\r\n-\r\n-\t\tif ( ! file_exists( $file_path ) ) {\r\n-\t\t\treturn $data_config;\r\n-\t\t}\r\n-\r\n-\t\t$store_file_config = $this->config_files[ $file_name ] ?? array();\r\n-\t\tif ( empty( $store_file_config ) ) {\r\n-\t\t\t$this->config_files[ $file_name ] = include $file_path;\r\n-\t\t}\r\n-\r\n-\t\t$data_config = $this->config_files[ $file_name ];\r\n-\r\n-\t\t$number_keys = count( $keys );\r\n-\r\n-\t\tif ( 1 === $number_keys ) {\r\n-\t\t\treturn $data_config;\r\n-\t\t} else {\r\n-\t\t\t$data_config_by_key = $data_config;\r\n-\t\t\tfor ( $i = 1; $i \u003C $number_keys; $i ++ ) {\r\n-\t\t\t\t$data_config_by_key = $data_config_by_key[ $keys[ $i ] ] ?? array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data_config_by_key;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic static function instance(): self {\r\n-\t\tif ( is_null( self::$instance ) ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Helpers;\n+\n+\u002F**\n+ * Class Config\n+ * Read data config from file\n+ *\n+ * @package LP\\Helpers\n+ * @since 4.1.6.4\n+ * @version 1.0.0\n+ *\u002F\n+class Config {\n+\t\u002F*\n+\t * All of configurations of items\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tprotected static $instance;\n+\tprotected $file_name = '';\n+\tprotected $items     = array();\n+\t\u002F**\n+\t * @var array Array name files config.\n+\t *\u002F\n+\tprotected $config_files = array();\n+\t\u002F**\n+\t * @var string Folder store files config\n+\t *\u002F\n+\tprotected $dir;\n+\n+\t\u002F**\n+\t * Config constructor.\n+\t *\n+\t * @param array $items\n+\t *\u002F\n+\tprotected function __construct( array $items = array() ) {\n+\t\t$this->dir = LP_PLUGIN_PATH . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR;\n+\n+\t\t$this->items = $items;\n+\t}\n+\n+\t\u002F**\n+\t * Get the specified configuration value\n+\t *\n+\t * @param string $key | Format key: file_name:key_name:key_item:...\n+\t * @param string $path | from folder 'config'\n+\t *\n+\t * @return array|mixed\n+\t * @version 1.0.0\n+\t * @since 4.1.6.4\n+\t *\u002F\n+\tpublic function get( string $key = '', string $path = '', array $args = [] ) {\n+\t\textract( $args );\n+\t\t$data_config        = array();\n+\t\t$data_config_by_key = array();\n+\n+\t\tif ( empty( $key ) ) {\n+\t\t\treturn $data_config;\n+\t\t}\n+\n+\t\t$keys      = explode( ':', $key );\n+\t\t$file_name = $keys[0];\n+\t\t$file_path = $this->dir . $path . DIRECTORY_SEPARATOR . $file_name . '.php';\n+\n+\t\tif ( ! file_exists( $file_path ) ) {\n+\t\t\treturn $data_config;\n+\t\t}\n+\n+\t\t$store_file_config = $this->config_files[ $file_name ] ?? array();\n+\t\tif ( empty( $store_file_config ) ) {\n+\t\t\t$this->config_files[ $file_name ] = include $file_path;\n+\t\t}\n+\n+\t\t$data_config = $this->config_files[ $file_name ];\n+\n+\t\t$number_keys = count( $keys );\n+\n+\t\tif ( 1 === $number_keys ) {\n+\t\t\treturn $data_config;\n+\t\t} else {\n+\t\t\t$data_config_by_key = $data_config;\n+\t\t\tfor ( $i = 1; $i \u003C $number_keys; $i ++ ) {\n+\t\t\t\t$data_config_by_key = $data_config_by_key[ $keys[ $i ] ] ?? array();\n+\t\t\t}\n+\n+\t\t\treturn $data_config_by_key;\n+\t\t}\n+\t}\n+\n+\tpublic static function instance(): self {\n+\t\tif ( is_null( self::$instance ) ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FSingleton.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FSingleton.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FSingleton.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FSingleton.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Singleton\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Helpers;\r\n-\r\n-trait Singleton {\r\n-\tprivate static $instance = null;\r\n-\tfinal public static function instance(): self {\r\n-\t\tif ( is_null( static::$instance ) ) {\r\n-\t\t\tstatic::$instance = new static();\r\n-\t\t}\r\n-\r\n-\t\treturn static::$instance;\r\n-\t}\r\n-\r\n-\tfinal private function __construct() {\r\n-\t\t$this->init();\r\n-\t}\r\n-\r\n-\tabstract function init();\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Singleton\n+ *\u002F\n+\n+namespace LearnPress\\Helpers;\n+\n+trait Singleton {\n+\tprivate static $instance = null;\n+\tfinal public static function instance(): self {\n+\t\tif ( is_null( static::$instance ) ) {\n+\t\t\tstatic::$instance = new static();\n+\t\t}\n+\n+\t\treturn static::$instance;\n+\t}\n+\n+\tfinal private function __construct() {\n+\t\t$this->init();\n+\t}\n+\n+\tabstract function init();\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FHelpers\u002FTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FHelpers\u002FTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,536 +1,536 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Helpers;\r\n-\r\n-use LP_Breadcrumb;\r\n-\r\n-\u002F**\r\n- * Class Template\r\n- *\r\n- * @package LearnPress\\Helpers\r\n- * @since 1.0.0\r\n- * @version 1.0.2\r\n- *\u002F\r\n-class Template {\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $include;\r\n-\r\n-\tprotected function __construct() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set 1 for include file, 0 for not\r\n-\t * Set 1 for separate template is block, 0 for not | use \"wp_is_block_theme\" function\r\n-\t *\r\n-\t * @param bool $has_include\r\n-\t *\r\n-\t * @return self\r\n-\t *\u002F\r\n-\tpublic static function instance( bool $has_include = true ): Template {\r\n-\t\t$self          = new self();\r\n-\t\t$self->include = $has_include;\r\n-\r\n-\t\treturn $self;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get template admin file\r\n-\t *\r\n-\t * @param string $file_name\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return void|string\r\n-\t * @since 1.0.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_admin_template( string $file_name = '', array $args = array() ) {\r\n-\t\t$file_name = str_replace( '.php', '', $file_name );\r\n-\t\t$path_file = LP_PLUGIN_PATH . \"inc\u002Fadmin\u002Fviews\u002F{$file_name}.php\";\r\n-\r\n-\t\t$template = $this->get_template( $path_file, $args );\r\n-\r\n-\t\tif ( ! $this->include ) {\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get template frontend file\r\n-\t *\r\n-\t * @param string $file_name\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return void|string\r\n-\t * @since 4.2.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_frontend_template( string $file_name = '', array $args = array() ) {\r\n-\t\t$default_path          = LP_PLUGIN_PATH . \"templates\u002F{$file_name}\";\r\n-\t\t$folder_name_rewrite   = learn_press_template_path();\r\n-\t\t$file_name             = sanitize_text_field( $file_name );\r\n-\t\t$from_child_theme_path = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s',\r\n-\t\t\tget_stylesheet_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t$file_name\r\n-\t\t);\r\n-\t\t$from_theme_path       = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s',\r\n-\t\t\tget_template_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t$file_name\r\n-\t\t);\r\n-\r\n-\t\t$path_load = $default_path;\r\n-\t\tif ( file_exists( $from_child_theme_path ) ) {\r\n-\t\t\t$path_load = $from_child_theme_path;\r\n-\t\t} elseif ( file_exists( $from_theme_path ) ) {\r\n-\t\t\t$path_load = $from_theme_path;\r\n-\t\t}\r\n-\r\n-\t\t$template = '';\r\n-\t\tif ( realpath( $path_load ) ) {\r\n-\t\t\t$template = $this->get_template( $path_load, $args );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $this->include ) {\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $file_names\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function get_frontend_templates( array $file_names = array(), array $args = array() ) {\r\n-\t\tforeach ( $file_names as $file_name ) {\r\n-\t\t\t$search_extension = strrpos( $file_name, '.php' );\r\n-\t\t\tif ( ! $search_extension ) {\r\n-\t\t\t\t$file_name .= '.php';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->get_frontend_template( $file_name, $args );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Include path file\r\n-\t *\r\n-\t * @param string $path_file\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string|void\r\n-\t * @since 1.0.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_template( string $path_file, array $args = array() ) {\r\n-\t\ttry {\r\n-\t\t\textract( $args );\r\n-\r\n-\t\t\tif ( file_exists( $path_file ) ) {\r\n-\t\t\t\tif ( $this->include ) {\r\n-\t\t\t\t\tinclude $path_file;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn $path_file;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tprintf( esc_html__( 'Path file %s not exists', 'learnpress' ), $path_file );\r\n-\t\t\t\techo '\u003Cbr>';\r\n-\t\t\t}\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get frontend template block file\r\n-\t *\r\n-\t * @param string $file_name\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string|void\r\n-\t *\u002F\r\n-\tpublic function get_frontend_template_type_block( string $file_name = '', array $args = array() ) {\r\n-\t\t$file_name = \"block\u002F{$file_name}\";\r\n-\t\t$template  = $this->get_frontend_template( $file_name, $args );\r\n-\r\n-\t\tif ( ! $this->include ) {\r\n-\t\t\treturn $template;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check file template is overwritten\r\n-\t *\r\n-\t * @param string $file_name\r\n-\t *\r\n-\t * @return bool|string return false if not, path file if yes\r\n-\t * @since 4.2.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function check_template_is_override( string $file_name = '' ) {\r\n-\t\t$default_path          = LP_PLUGIN_PATH . \"templates\u002F{$file_name}\";\r\n-\t\t$folder_name_rewrite   = learn_press_template_path();\r\n-\t\t$from_child_theme_path = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s',\r\n-\t\t\tget_stylesheet_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t$file_name\r\n-\t\t);\r\n-\t\t$from_theme_path       = sprintf(\r\n-\t\t\t'%s\u002F%s\u002F%s',\r\n-\t\t\tget_template_directory(),\r\n-\t\t\t$folder_name_rewrite,\r\n-\t\t\t$file_name\r\n-\t\t);\r\n-\r\n-\t\tif ( file_exists( $from_child_theme_path ) ) {\r\n-\t\t\treturn $from_child_theme_path;\r\n-\t\t} elseif ( file_exists( $from_theme_path ) ) {\r\n-\t\t\treturn $from_theme_path;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Nest elements by tags\r\n-\t *\r\n-\t * @param array $els [ 'html_tag_open' => 'html_tag_close' ]\r\n-\t * @param string $main_content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function nest_elements( array $els = [], string $main_content = '' ): string {\r\n-\t\t$html = '';\r\n-\t\tforeach ( $els as $tag_open => $tag_close ) {\r\n-\t\t\t$html .= $tag_open;\r\n-\t\t}\r\n-\r\n-\t\t$html .= $main_content;\r\n-\r\n-\t\tforeach ( array_reverse( $els, true ) as $tag_close ) {\r\n-\t\t\t$html .= $tag_close;\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display sections\r\n-\t *\r\n-\t * @param array $sections\r\n-\t * ['name_section' => [ 'text_html' => '\u003Cspan>example\u003C\u002Fspan>' ]]\r\n-\t * ['name_section' => [ 'link_templates' => 'path_template' ]]\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function print_sections( array $sections = [], array $args = [] ) {\r\n-\t\tforeach ( $sections as $section ) {\r\n-\t\t\tif ( ! is_array( $section ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $section as $type => $val ) {\r\n-\t\t\t\tswitch ( $type ) {\r\n-\t\t\t\t\tcase 'link_templates':\r\n-\t\t\t\t\t\t$this->get_frontend_template( $val, $args );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\tif ( is_string( $val ) ) {\r\n-\t\t\t\t\t\t\t\u002F\u002F$allow_tag = wp_kses_allowed_html( 'post' );\r\n-\t\t\t\t\t\t\t\u002F\u002Fecho wp_kses( $section, $allow_tag );\r\n-\t\t\t\t\t\t\techo $val;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Combine html elements\r\n-\t *\r\n-\t * @param array $elms\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6.9\r\n-\t *\u002F\r\n-\tpublic static function combine_components( array $elms = [] ): string {\r\n-\t\t$html = '';\r\n-\t\tforeach ( $elms as $tag => $val ) {\r\n-\t\t\t$html .= $val;\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Insert new key to a position of array\r\n-\t *\r\n-\t * @param array $old_array\r\n-\t * @param string $position after\u002Fbefore\r\n-\t * @param string $key_compare key to compare\r\n-\t * @param string $key_add\r\n-\t * @param string $value\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function insert_value_to_position_array(\r\n-\t\tarray $old_array,\r\n-\t\tstring $position,\r\n-\t\tstring $key_compare,\r\n-\t\tstring $key_add,\r\n-\t\tstring $value\r\n-\t): array {\r\n-\t\t$new_array = [];\r\n-\r\n-\t\tforeach ( $old_array as $k => $v ) {\r\n-\t\t\tif ( $position === 'after' ) {\r\n-\t\t\t\t$new_array[ $k ] = $v;\r\n-\t\t\t}\r\n-\t\t\tif ( $key_compare === $k ) {\r\n-\t\t\t\t$new_array[ $key_add ] = $value;\r\n-\t\t\t}\r\n-\t\t\tif ( $position === 'before' ) {\r\n-\t\t\t\t$new_array[ $k ] = $v;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $new_array;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Print message\r\n-\t *\r\n-\t * @param string $message\r\n-\t * @param string $status 'success', 'warning', 'error, 'info'\r\n-\t * @param bool $has_print since 4.2.7.6, true for print, false for return\r\n-\t *\r\n-\t * @return void|string\r\n-\t * @since 4.2.6.9.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function print_message( string $message, string $status = 'success', bool $has_print = true ) {\r\n-\t\tif ( empty( $message ) ) {\r\n-\t\t\tif ( $has_print ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"learn-press-message %s\">', esc_attr( $status ) ),\r\n-\t\t\t'content'     => wp_kses_post( $message ),\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\tif ( $has_print ) {\r\n-\t\t\techo Template::combine_components( $section );\r\n-\t\t} else {\r\n-\t\t\treturn Template::combine_components( $section );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate HTML for pagination.\r\n-\t *\r\n-\t * @param array $data [ 'total_pages' => int, 'paged' => int, 'base' => string ]\r\n-\t *\r\n-\t * @return string HTML for pagination.\r\n-\t * @since 4.2.8.7.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_pagination( array $data = [] ): string {\r\n-\t\t$total_pages = $data['total_pages'] ?? 0;\r\n-\t\t$paged       = $data['paged'] ?? 1;\r\n-\t\tif ( $total_pages \u003C= 1 ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html_wrapper = $data['wrapper'] ?? [\r\n-\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination\">' => '\u003C\u002Fnav>',\r\n-\t\t];\r\n-\r\n-\t\t$pagination = paginate_links(\r\n-\t\t\tapply_filters(\r\n-\t\t\t\t'learn_press_pagination_args',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'base'      => $data['base'] ?? '',\r\n-\t\t\t\t\t'format'    => '',\r\n-\t\t\t\t\t'add_args'  => '',\r\n-\t\t\t\t\t'current'   => max( 1, $paged ),\r\n-\t\t\t\t\t'total'     => $total_pages,\r\n-\t\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'type'      => 'list',\r\n-\t\t\t\t\t'end_size'  => 3,\r\n-\t\t\t\t\t'mid_size'  => 3,\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $pagination );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert data to JSON string\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function convert_data_to_json( $data ): string {\r\n-\t\treturn esc_attr(\r\n-\t\t\thtmlentities2(\r\n-\t\t\t\twp_json_encode(\r\n-\t\t\t\t\t$data,\r\n-\t\t\t\t\tJSON_HEX_QUOT |\r\n-\t\t\t\t\tJSON_HEX_TAG |\r\n-\t\t\t\t\tJSON_HEX_AMP |\r\n-\t\t\t\t\tJSON_HEX_APOS |\r\n-\t\t\t\t\tJSON_UNESCAPED_UNICODE |\r\n-\t\t\t\t\tJSON_UNESCAPED_SLASHES\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize HTML content by allowing specific tags and attributes.\r\n-\t *\r\n-\t * @param string $content\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function sanitize_html_content( string $content = '' ): string {\r\n-\t\t$allowed_tags = wp_kses_allowed_html( 'post' );\r\n-\r\n-\t\t$extra_tag = array(\r\n-\t\t\t'iframe' => [\r\n-\t\t\t\t'src'             => true,\r\n-\t\t\t\t'width'           => true,\r\n-\t\t\t\t'height'          => true,\r\n-\t\t\t\t'frameborder'     => true,\r\n-\t\t\t\t'allowfullscreen' => true,\r\n-\t\t\t\t'allow'           => true,\r\n-\t\t\t],\r\n-\t\t\t'audio'  => array(\r\n-\t\t\t\t'autoplay'         => true,\r\n-\t\t\t\t'controls'         => true,\r\n-\t\t\t\t'loop'             => true,\r\n-\t\t\t\t'muted'            => true,\r\n-\t\t\t\t'preload'          => true,\r\n-\t\t\t\t'src'              => true,\r\n-\t\t\t\t'aria-controls'    => true,\r\n-\t\t\t\t'aria-current'     => true,\r\n-\t\t\t\t'aria-describedby' => true,\r\n-\t\t\t\t'aria-details'     => true,\r\n-\t\t\t\t'aria-expanded'    => true,\r\n-\t\t\t\t'aria-hidden'      => true,\r\n-\t\t\t\t'aria-label'       => true,\r\n-\t\t\t\t'aria-labelledby'  => true,\r\n-\t\t\t\t'aria-live'        => true,\r\n-\t\t\t\t'class'            => true,\r\n-\t\t\t\t'data-*'           => true,\r\n-\t\t\t\t'dir'              => true,\r\n-\t\t\t\t'hidden'           => true,\r\n-\t\t\t\t'id'               => true,\r\n-\t\t\t\t'lang'             => true,\r\n-\t\t\t\t'style'            => true,\r\n-\t\t\t\t'title'            => true,\r\n-\t\t\t\t'role'             => true,\r\n-\t\t\t\t'xml:lang'         => true,\r\n-\t\t\t\t'controlslist'     => true,\r\n-\t\t\t\t'crossorigin'      => true,\r\n-\t\t\t\t'poster'           => true,\r\n-\t\t\t),\r\n-\t\t\t'source' => array(\r\n-\t\t\t\t'src'   => true,\r\n-\t\t\t\t'type'  => true,\r\n-\t\t\t\t'media' => true,\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$allowed_tags = array_merge( $allowed_tags, $extra_tag );\r\n-\r\n-\t\treturn wp_kses( $content, $allowed_tags );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate breadcrumb HTML.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.2.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function html_breadcrumb( array $args = [] ): string {\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tapply_filters(\r\n-\t\t\t\t'learn_press_breadcrumb_defaults',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'delimiter'   => '\u003Cli class=\"breadcrumb-delimiter\">\u003Ci class=\"lp-icon-angle-right\">\u003C\u002Fi>\u003C\u002Fli>',\r\n-\t\t\t\t\t'wrap_before' => '\u003Cul class=\"learn-press-breadcrumb\">',\r\n-\t\t\t\t\t'wrap_after'  => '\u003C\u002Ful>',\r\n-\t\t\t\t\t'after'       => '',\r\n-\t\t\t\t\t'home'        => _x( 'Home', 'breadcrumb', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$breadcrumbs = new LP_Breadcrumb();\r\n-\t\tif ( $args['home'] ) {\r\n-\t\t\t$breadcrumbs->add_crumb( $args['home'], apply_filters( 'learn_press_breadcrumb_home_url', home_url() ) );\r\n-\t\t}\r\n-\r\n-\t\t$args['breadcrumb'] = $breadcrumbs->generate();\r\n-\r\n-\t\t$html_content = '';\r\n-\t\tforeach ( $args['breadcrumb'] as $key => $crumb ) {\r\n-\t\t\t$html_content .= '\u003Cli>';\r\n-\t\t\tif ( ! empty( $crumb[1] ) ) {\r\n-\t\t\t\t$html_content .= sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>',\r\n-\t\t\t\t\tesc_url_raw( $crumb[1] ),\r\n-\t\t\t\t\tesc_html( $crumb[0] )\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$html_content .= sprintf(\r\n-\t\t\t\t\t'\u003Cspan>%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_html( $crumb[0] )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_content .= '\u003C\u002Fli>';\r\n-\t\t\tif ( sizeof( $args['breadcrumb'] ) !== $key + 1 ) {\r\n-\t\t\t\t$html_content .= $args['delimiter'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn_press\u002Fbreadcrumb\u002Fhtml-section',\r\n-\t\t\t[\r\n-\t\t\t\t'wrap'     => $args['wrap_before'],\r\n-\t\t\t\t'content'  => $html_content,\r\n-\t\t\t\t'wrap-end' => $args['wrap_after'],\r\n-\t\t\t],\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Helpers;\n+\n+use LP_Breadcrumb;\n+\n+\u002F**\n+ * Class Template\n+ *\n+ * @package LearnPress\\Helpers\n+ * @since 1.0.0\n+ * @version 1.0.2\n+ *\u002F\n+class Template {\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $include;\n+\n+\tprotected function __construct() {\n+\t}\n+\n+\t\u002F**\n+\t * Set 1 for include file, 0 for not\n+\t * Set 1 for separate template is block, 0 for not | use \"wp_is_block_theme\" function\n+\t *\n+\t * @param bool $has_include\n+\t *\n+\t * @return self\n+\t *\u002F\n+\tpublic static function instance( bool $has_include = true ): Template {\n+\t\t$self          = new self();\n+\t\t$self->include = $has_include;\n+\n+\t\treturn $self;\n+\t}\n+\n+\t\u002F**\n+\t * Get template admin file\n+\t *\n+\t * @param string $file_name\n+\t * @param array $args\n+\t *\n+\t * @return void|string\n+\t * @since 1.0.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_admin_template( string $file_name = '', array $args = array() ) {\n+\t\t$file_name = str_replace( '.php', '', $file_name );\n+\t\t$path_file = LP_PLUGIN_PATH . \"inc\u002Fadmin\u002Fviews\u002F{$file_name}.php\";\n+\n+\t\t$template = $this->get_template( $path_file, $args );\n+\n+\t\tif ( ! $this->include ) {\n+\t\t\treturn $template;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get template frontend file\n+\t *\n+\t * @param string $file_name\n+\t * @param array $args\n+\t *\n+\t * @return void|string\n+\t * @since 4.2.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_frontend_template( string $file_name = '', array $args = array() ) {\n+\t\t$default_path          = LP_PLUGIN_PATH . \"templates\u002F{$file_name}\";\n+\t\t$folder_name_rewrite   = learn_press_template_path();\n+\t\t$file_name             = sanitize_text_field( $file_name );\n+\t\t$from_child_theme_path = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s',\n+\t\t\tget_stylesheet_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t$file_name\n+\t\t);\n+\t\t$from_theme_path       = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s',\n+\t\t\tget_template_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t$file_name\n+\t\t);\n+\n+\t\t$path_load = $default_path;\n+\t\tif ( file_exists( $from_child_theme_path ) ) {\n+\t\t\t$path_load = $from_child_theme_path;\n+\t\t} elseif ( file_exists( $from_theme_path ) ) {\n+\t\t\t$path_load = $from_theme_path;\n+\t\t}\n+\n+\t\t$template = '';\n+\t\tif ( realpath( $path_load ) ) {\n+\t\t\t$template = $this->get_template( $path_load, $args );\n+\t\t}\n+\n+\t\tif ( ! $this->include ) {\n+\t\t\treturn $template;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param array $file_names\n+\t * @param array $args\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function get_frontend_templates( array $file_names = array(), array $args = array() ) {\n+\t\tforeach ( $file_names as $file_name ) {\n+\t\t\t$search_extension = strrpos( $file_name, '.php' );\n+\t\t\tif ( ! $search_extension ) {\n+\t\t\t\t$file_name .= '.php';\n+\t\t\t}\n+\n+\t\t\t$this->get_frontend_template( $file_name, $args );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Include path file\n+\t *\n+\t * @param string $path_file\n+\t * @param array $args\n+\t *\n+\t * @return string|void\n+\t * @since 1.0.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_template( string $path_file, array $args = array() ) {\n+\t\ttry {\n+\t\t\textract( $args );\n+\n+\t\t\tif ( file_exists( $path_file ) ) {\n+\t\t\t\tif ( $this->include ) {\n+\t\t\t\t\tinclude $path_file;\n+\t\t\t\t} else {\n+\t\t\t\t\treturn $path_file;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tprintf( esc_html__( 'Path file %s not exists', 'learnpress' ), $path_file );\n+\t\t\t\techo '\u003Cbr>';\n+\t\t\t}\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get frontend template block file\n+\t *\n+\t * @param string $file_name\n+\t * @param array $args\n+\t *\n+\t * @return string|void\n+\t *\u002F\n+\tpublic function get_frontend_template_type_block( string $file_name = '', array $args = array() ) {\n+\t\t$file_name = \"block\u002F{$file_name}\";\n+\t\t$template  = $this->get_frontend_template( $file_name, $args );\n+\n+\t\tif ( ! $this->include ) {\n+\t\t\treturn $template;\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check file template is overwritten\n+\t *\n+\t * @param string $file_name\n+\t *\n+\t * @return bool|string return false if not, path file if yes\n+\t * @since 4.2.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function check_template_is_override( string $file_name = '' ) {\n+\t\t$default_path          = LP_PLUGIN_PATH . \"templates\u002F{$file_name}\";\n+\t\t$folder_name_rewrite   = learn_press_template_path();\n+\t\t$from_child_theme_path = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s',\n+\t\t\tget_stylesheet_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t$file_name\n+\t\t);\n+\t\t$from_theme_path       = sprintf(\n+\t\t\t'%s\u002F%s\u002F%s',\n+\t\t\tget_template_directory(),\n+\t\t\t$folder_name_rewrite,\n+\t\t\t$file_name\n+\t\t);\n+\n+\t\tif ( file_exists( $from_child_theme_path ) ) {\n+\t\t\treturn $from_child_theme_path;\n+\t\t} elseif ( file_exists( $from_theme_path ) ) {\n+\t\t\treturn $from_theme_path;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Nest elements by tags\n+\t *\n+\t * @param array $els [ 'html_tag_open' => 'html_tag_close' ]\n+\t * @param string $main_content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function nest_elements( array $els = [], string $main_content = '' ): string {\n+\t\t$html = '';\n+\t\tforeach ( $els as $tag_open => $tag_close ) {\n+\t\t\t$html .= $tag_open;\n+\t\t}\n+\n+\t\t$html .= $main_content;\n+\n+\t\tforeach ( array_reverse( $els, true ) as $tag_close ) {\n+\t\t\t$html .= $tag_close;\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Display sections\n+\t *\n+\t * @param array $sections\n+\t * ['name_section' => [ 'text_html' => '\u003Cspan>example\u003C\u002Fspan>' ]]\n+\t * ['name_section' => [ 'link_templates' => 'path_template' ]]\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function print_sections( array $sections = [], array $args = [] ) {\n+\t\tforeach ( $sections as $section ) {\n+\t\t\tif ( ! is_array( $section ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tforeach ( $section as $type => $val ) {\n+\t\t\t\tswitch ( $type ) {\n+\t\t\t\t\tcase 'link_templates':\n+\t\t\t\t\t\t$this->get_frontend_template( $val, $args );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\tif ( is_string( $val ) ) {\n+\t\t\t\t\t\t\t\u002F\u002F$allow_tag = wp_kses_allowed_html( 'post' );\n+\t\t\t\t\t\t\t\u002F\u002Fecho wp_kses( $section, $allow_tag );\n+\t\t\t\t\t\t\techo $val;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Combine html elements\n+\t *\n+\t * @param array $elms\n+\t *\n+\t * @return string\n+\t * @since 4.2.6.9\n+\t *\u002F\n+\tpublic static function combine_components( array $elms = [] ): string {\n+\t\t$html = '';\n+\t\tforeach ( $elms as $tag => $val ) {\n+\t\t\t$html .= $val;\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Insert new key to a position of array\n+\t *\n+\t * @param array $old_array\n+\t * @param string $position after\u002Fbefore\n+\t * @param string $key_compare key to compare\n+\t * @param string $key_add\n+\t * @param string $value\n+\t *\n+\t * @return array\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function insert_value_to_position_array(\n+\t\tarray $old_array,\n+\t\tstring $position,\n+\t\tstring $key_compare,\n+\t\tstring $key_add,\n+\t\tstring $value\n+\t): array {\n+\t\t$new_array = [];\n+\n+\t\tforeach ( $old_array as $k => $v ) {\n+\t\t\tif ( $position === 'after' ) {\n+\t\t\t\t$new_array[ $k ] = $v;\n+\t\t\t}\n+\t\t\tif ( $key_compare === $k ) {\n+\t\t\t\t$new_array[ $key_add ] = $value;\n+\t\t\t}\n+\t\t\tif ( $position === 'before' ) {\n+\t\t\t\t$new_array[ $k ] = $v;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $new_array;\n+\t}\n+\n+\t\u002F**\n+\t * Print message\n+\t *\n+\t * @param string $message\n+\t * @param string $status 'success', 'warning', 'error, 'info'\n+\t * @param bool $has_print since 4.2.7.6, true for print, false for return\n+\t *\n+\t * @return void|string\n+\t * @since 4.2.6.9.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function print_message( string $message, string $status = 'success', bool $has_print = true ) {\n+\t\tif ( empty( $message ) ) {\n+\t\t\tif ( $has_print ) {\n+\t\t\t\treturn;\n+\t\t\t} else {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"learn-press-message %s\">', esc_attr( $status ) ),\n+\t\t\t'content'     => wp_kses_post( $message ),\n+\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\tif ( $has_print ) {\n+\t\t\techo Template::combine_components( $section );\n+\t\t} else {\n+\t\t\treturn Template::combine_components( $section );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Generate HTML for pagination.\n+\t *\n+\t * @param array $data [ 'total_pages' => int, 'paged' => int, 'base' => string ]\n+\t *\n+\t * @return string HTML for pagination.\n+\t * @since 4.2.8.7.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_pagination( array $data = [] ): string {\n+\t\t$total_pages = $data['total_pages'] ?? 0;\n+\t\t$paged       = $data['paged'] ?? 1;\n+\t\tif ( $total_pages \u003C= 1 ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html_wrapper = $data['wrapper'] ?? [\n+\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination\">' => '\u003C\u002Fnav>',\n+\t\t];\n+\n+\t\t$pagination = paginate_links(\n+\t\t\tapply_filters(\n+\t\t\t\t'learn_press_pagination_args',\n+\t\t\t\tarray(\n+\t\t\t\t\t'base'      => $data['base'] ?? add_query_arg( 'paged', '%#%', '' ),\n+\t\t\t\t\t'format'    => $data['format'] ?? '?paged=%#%',\n+\t\t\t\t\t'add_args'  => $data['add_args'] ?? '',\n+\t\t\t\t\t'current'   => max( 1, $paged ),\n+\t\t\t\t\t'total'     => $total_pages,\n+\t\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\n+\t\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\n+\t\t\t\t\t'type'      => 'list',\n+\t\t\t\t\t'end_size'  => 3,\n+\t\t\t\t\t'mid_size'  => 3,\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $pagination );\n+\t}\n+\n+\t\u002F**\n+\t * Convert data to JSON string\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function convert_data_to_json( $data ): string {\n+\t\treturn esc_attr(\n+\t\t\thtmlentities2(\n+\t\t\t\twp_json_encode(\n+\t\t\t\t\t$data,\n+\t\t\t\t\tJSON_HEX_QUOT |\n+\t\t\t\t\tJSON_HEX_TAG |\n+\t\t\t\t\tJSON_HEX_AMP |\n+\t\t\t\t\tJSON_HEX_APOS |\n+\t\t\t\t\tJSON_UNESCAPED_UNICODE |\n+\t\t\t\t\tJSON_UNESCAPED_SLASHES\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize HTML content by allowing specific tags and attributes.\n+\t *\n+\t * @param string $content\n+\t *\n+\t * @return string\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function sanitize_html_content( string $content = '' ): string {\n+\t\t$allowed_tags = wp_kses_allowed_html( 'post' );\n+\n+\t\t$extra_tag = array(\n+\t\t\t'iframe' => [\n+\t\t\t\t'src'             => true,\n+\t\t\t\t'width'           => true,\n+\t\t\t\t'height'          => true,\n+\t\t\t\t'frameborder'     => true,\n+\t\t\t\t'allowfullscreen' => true,\n+\t\t\t\t'allow'           => true,\n+\t\t\t],\n+\t\t\t'audio'  => array(\n+\t\t\t\t'autoplay'         => true,\n+\t\t\t\t'controls'         => true,\n+\t\t\t\t'loop'             => true,\n+\t\t\t\t'muted'            => true,\n+\t\t\t\t'preload'          => true,\n+\t\t\t\t'src'              => true,\n+\t\t\t\t'aria-controls'    => true,\n+\t\t\t\t'aria-current'     => true,\n+\t\t\t\t'aria-describedby' => true,\n+\t\t\t\t'aria-details'     => true,\n+\t\t\t\t'aria-expanded'    => true,\n+\t\t\t\t'aria-hidden'      => true,\n+\t\t\t\t'aria-label'       => true,\n+\t\t\t\t'aria-labelledby'  => true,\n+\t\t\t\t'aria-live'        => true,\n+\t\t\t\t'class'            => true,\n+\t\t\t\t'data-*'           => true,\n+\t\t\t\t'dir'              => true,\n+\t\t\t\t'hidden'           => true,\n+\t\t\t\t'id'               => true,\n+\t\t\t\t'lang'             => true,\n+\t\t\t\t'style'            => true,\n+\t\t\t\t'title'            => true,\n+\t\t\t\t'role'             => true,\n+\t\t\t\t'xml:lang'         => true,\n+\t\t\t\t'controlslist'     => true,\n+\t\t\t\t'crossorigin'      => true,\n+\t\t\t\t'poster'           => true,\n+\t\t\t),\n+\t\t\t'source' => array(\n+\t\t\t\t'src'   => true,\n+\t\t\t\t'type'  => true,\n+\t\t\t\t'media' => true,\n+\t\t\t),\n+\t\t);\n+\n+\t\t$allowed_tags = array_merge( $allowed_tags, $extra_tag );\n+\n+\t\treturn wp_kses( $content, $allowed_tags );\n+\t}\n+\n+\t\u002F**\n+\t * Generate breadcrumb HTML.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return string\n+\t * @since 4.3.2.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function html_breadcrumb( array $args = [] ): string {\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tapply_filters(\n+\t\t\t\t'learn_press_breadcrumb_defaults',\n+\t\t\t\tarray(\n+\t\t\t\t\t'delimiter'   => '\u003Cli class=\"breadcrumb-delimiter\">\u003Ci class=\"lp-icon-angle-right\">\u003C\u002Fi>\u003C\u002Fli>',\n+\t\t\t\t\t'wrap_before' => '\u003Cul class=\"learn-press-breadcrumb\">',\n+\t\t\t\t\t'wrap_after'  => '\u003C\u002Ful>',\n+\t\t\t\t\t'after'       => '',\n+\t\t\t\t\t'home'        => _x( 'Home', 'breadcrumb', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\n+\t\t$breadcrumbs = new LP_Breadcrumb();\n+\t\tif ( $args['home'] ) {\n+\t\t\t$breadcrumbs->add_crumb( $args['home'], apply_filters( 'learn_press_breadcrumb_home_url', home_url() ) );\n+\t\t}\n+\n+\t\t$args['breadcrumb'] = $breadcrumbs->generate();\n+\n+\t\t$html_content = '';\n+\t\tforeach ( $args['breadcrumb'] as $key => $crumb ) {\n+\t\t\t$html_content .= '\u003Cli>';\n+\t\t\tif ( ! empty( $crumb[1] ) ) {\n+\t\t\t\t$html_content .= sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>',\n+\t\t\t\t\tesc_url_raw( $crumb[1] ),\n+\t\t\t\t\tesc_html( $crumb[0] )\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$html_content .= sprintf(\n+\t\t\t\t\t'\u003Cspan>%s\u003C\u002Fspan>',\n+\t\t\t\t\tesc_html( $crumb[0] )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$html_content .= '\u003C\u002Fli>';\n+\t\t\tif ( sizeof( $args['breadcrumb'] ) !== $key + 1 ) {\n+\t\t\t\t$html_content .= $args['delimiter'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn_press\u002Fbreadcrumb\u002Fhtml-section',\n+\t\t\t[\n+\t\t\t\t'wrap'     => $args['wrap_before'],\n+\t\t\t\t'content'  => $html_content,\n+\t\t\t\t'wrap-end' => $args['wrap_after'],\n+\t\t\t],\n+\t\t\t$args\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Finterfaces\u002Finterface-curd.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Finterfaces\u002Finterface-curd.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Finterfaces\u002Finterface-curd.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Finterfaces\u002Finterface-curd.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,234 +1,234 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Interface LP_Interface_CURD\r\n- *\u002F\r\n-interface LP_Interface_CURD {\r\n-\r\n-\t\u002F**\r\n-\t * Create item and insert to database.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param object $object\r\n-\t *\u002F\r\n-\tpublic function create( &$object );\r\n-\r\n-\t\u002F**\r\n-\t * Load data from database.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param object $object\r\n-\t *\u002F\r\n-\tpublic function load( &$object );\r\n-\r\n-\t\u002F**\r\n-\t * Update data into database.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param object $object\r\n-\t *\u002F\r\n-\tpublic function update( &$object );\r\n-\r\n-\t\u002F**\r\n-\t * Delete data from database.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param object $object\r\n-\t *\u002F\r\n-\tpublic function delete( &$object );\r\n-\r\n-\t\u002F**\r\n-\t * Duplicate item and insert to database\r\n-\t *\r\n-\t * @param       $object\r\n-\t * @param array  $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function duplicate( &$object, $args = array() );\r\n-\r\n-\t\u002F**\r\n-\t * Add new meta data.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function add_meta( &$object, $meta );\r\n-\r\n-\t\u002F**\r\n-\t * Read meta data for passed object.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object\r\n-\t *\u002F\r\n-\tpublic function read_meta( &$object );\r\n-\r\n-\t\u002F**\r\n-\t * Update meta data.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function update_meta( &$object, $meta );\r\n-\r\n-\t\u002F**\r\n-\t * Delete meta data.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function delete_meta( &$object, $meta );\r\n-\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Object_Data_Meta\r\n- *\u002F\r\n-class LP_Object_Data_CURD {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $_meta_type = 'post';\r\n-\r\n-\t\u002F**\r\n-\t * Errors codes and message.\r\n-\t *\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $_error_messages = false;\r\n-\r\n-\t\u002F**\r\n-\t * Add new meta data.\r\n-\t *\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function add_meta( &$object, $meta ) {\r\n-\t\t\u002F\u002F TODO: Implement add_meta() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete meta data.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function delete_meta( &$object, $meta ) {\r\n-\t\t\u002F\u002F TODO: Implement delete_meta() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $object\r\n-\t *\u002F\r\n-\tpublic function read_meta( &$object ) {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4 - comment - not use\r\n-\t *\u002F\r\n-\t\u002F*public function read_meta_by_ids( $ids, $type = 'post' ) {\r\n-\t\t$this->_meta_type = $type;\r\n-\t\tforeach ( $ids as $id ) {\r\n-\t\t\t$this->read_meta( $id );\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4 - comment - not use\r\n-\t *\u002F\r\n-\t\u002F*public function _filter_meta_by_object( $v, $k ) {\r\n-\t\treturn $v->{$this->_filter_object_name} == $this->_filter_object;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Update meta data.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param $object LP_Course|LP_Lesson|LP_Quiz|LP_Question\r\n-\t * @param $meta\r\n-\t *\u002F\r\n-\tpublic function update_meta( &$object, $meta ) {\r\n-\t\tupdate_metadata( $this->_meta_type, $object->get_id(), $meta->meta_key, $meta->meta_value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $type\r\n-\t *\r\n-\t * @return mixed|LP_Object_Data_CURD\r\n-\t *\u002F\r\n-\tpublic static function get( $type ) {\r\n-\t\tstatic $curds = false;\r\n-\t\tif ( ! $curds ) {\r\n-\t\t\t$curds = array(\r\n-\t\t\t\t'user'  => new LP_User_CURD(),\r\n-\t\t\t\t'order' => new LP_Order_CURD(),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn ! empty( $curds[ $type ] ) ? $curds[ $type ] : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get WP_Object.\r\n-\t *\r\n-\t * @param $code\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tprotected function get_error( $code ) {\r\n-\t\tif ( isset( $this->_error_messages[ $code ] ) ) {\r\n-\t\t\treturn new WP_Error( $code, $this->_error_messages[ $code ] );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Wrap function $wpdb->prepare(...) to support arguments as\r\n-\t * array.\r\n-\t *\r\n-\t * @param string      $query\r\n-\t * @param array|mixed $args\r\n-\t *\r\n-\t * @example\r\n-\t *\r\n-\t * $this->prepare($sql, $one, $two, array($three, $four, $file))\r\n-\t * => $wpdb->prepare($sql, $one, $two, $three, $four, $file)\r\n-\t *\r\n-\t * @return string\r\n-\t * @editor tungnx - comment method\r\n-\t *\u002F\r\n-\t\u002F*public function prepare( $query, $args ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$args = func_get_args();\r\n-\t\tarray_shift( $args );\r\n-\t\t$new_args = array();\r\n-\r\n-\t\tforeach ( $args as $arg ) {\r\n-\t\t\tif ( is_array( $arg ) ) {\r\n-\t\t\t\t$new_args = array_merge( $new_args, $arg );\r\n-\t\t\t} else {\r\n-\t\t\t\t$new_args[] = $arg;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $wpdb->prepare( $query, $new_args );\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Interface LP_Interface_CURD\n+ *\u002F\n+interface LP_Interface_CURD {\n+\n+\t\u002F**\n+\t * Create item and insert to database.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param object $object\n+\t *\u002F\n+\tpublic function create( &$object );\n+\n+\t\u002F**\n+\t * Load data from database.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param object $object\n+\t *\u002F\n+\tpublic function load( &$object );\n+\n+\t\u002F**\n+\t * Update data into database.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param object $object\n+\t *\u002F\n+\tpublic function update( &$object );\n+\n+\t\u002F**\n+\t * Delete data from database.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param object $object\n+\t *\u002F\n+\tpublic function delete( &$object );\n+\n+\t\u002F**\n+\t * Duplicate item and insert to database\n+\t *\n+\t * @param       $object\n+\t * @param array  $args\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function duplicate( &$object, $args = array() );\n+\n+\t\u002F**\n+\t * Add new meta data.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function add_meta( &$object, $meta );\n+\n+\t\u002F**\n+\t * Read meta data for passed object.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object\n+\t *\u002F\n+\tpublic function read_meta( &$object );\n+\n+\t\u002F**\n+\t * Update meta data.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function update_meta( &$object, $meta );\n+\n+\t\u002F**\n+\t * Delete meta data.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function delete_meta( &$object, $meta );\n+\n+}\n+\n+\u002F**\n+ * Class LP_Object_Data_Meta\n+ *\u002F\n+class LP_Object_Data_CURD {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $_meta_type = 'post';\n+\n+\t\u002F**\n+\t * Errors codes and message.\n+\t *\n+\t * @var bool\n+\t *\u002F\n+\tprotected $_error_messages = false;\n+\n+\t\u002F**\n+\t * Add new meta data.\n+\t *\n+\t * @param $object\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function add_meta( &$object, $meta ) {\n+\t\t\u002F\u002F TODO: Implement add_meta() method.\n+\t}\n+\n+\t\u002F**\n+\t * Delete meta data.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function delete_meta( &$object, $meta ) {\n+\t\t\u002F\u002F TODO: Implement delete_meta() method.\n+\t}\n+\n+\t\u002F**\n+\t * @param $object\n+\t *\u002F\n+\tpublic function read_meta( &$object ) {\n+\t}\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @modify 4.1.4 - comment - not use\n+\t *\u002F\n+\t\u002F*public function read_meta_by_ids( $ids, $type = 'post' ) {\n+\t\t$this->_meta_type = $type;\n+\t\tforeach ( $ids as $id ) {\n+\t\t\t$this->read_meta( $id );\n+\t\t}\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @modify 4.1.4 - comment - not use\n+\t *\u002F\n+\t\u002F*public function _filter_meta_by_object( $v, $k ) {\n+\t\treturn $v->{$this->_filter_object_name} == $this->_filter_object;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Update meta data.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param $object LP_Course|LP_Lesson|LP_Quiz|LP_Question\n+\t * @param $meta\n+\t *\u002F\n+\tpublic function update_meta( &$object, $meta ) {\n+\t\tupdate_metadata( $this->_meta_type, $object->get_id(), $meta->meta_key, $meta->meta_value );\n+\t}\n+\n+\t\u002F**\n+\t * @param $type\n+\t *\n+\t * @return mixed|LP_Object_Data_CURD\n+\t *\u002F\n+\tpublic static function get( $type ) {\n+\t\tstatic $curds = false;\n+\t\tif ( ! $curds ) {\n+\t\t\t$curds = array(\n+\t\t\t\t'user'  => new LP_User_CURD(),\n+\t\t\t\t'order' => new LP_Order_CURD(),\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn ! empty( $curds[ $type ] ) ? $curds[ $type ] : false;\n+\t}\n+\n+\t\u002F**\n+\t * Get WP_Object.\n+\t *\n+\t * @param $code\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tprotected function get_error( $code ) {\n+\t\tif ( isset( $this->_error_messages[ $code ] ) ) {\n+\t\t\treturn new WP_Error( $code, $this->_error_messages[ $code ] );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Wrap function $wpdb->prepare(...) to support arguments as\n+\t * array.\n+\t *\n+\t * @param string      $query\n+\t * @param array|mixed $args\n+\t *\n+\t * @example\n+\t *\n+\t * $this->prepare($sql, $one, $two, array($three, $four, $file))\n+\t * => $wpdb->prepare($sql, $one, $two, $three, $four, $file)\n+\t *\n+\t * @return string\n+\t * @editor tungnx - comment method\n+\t *\u002F\n+\t\u002F*public function prepare( $query, $args ) {\n+\t\tglobal $wpdb;\n+\t\t$args = func_get_args();\n+\t\tarray_shift( $args );\n+\t\t$new_args = array();\n+\n+\t\tforeach ( $args as $arg ) {\n+\t\t\tif ( is_array( $arg ) ) {\n+\t\t\t\t$new_args = array_merge( $new_args, $arg );\n+\t\t\t} else {\n+\t\t\t\t$new_args[] = $arg;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $wpdb->prepare( $query, $new_args );\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fclass-jwt-auth.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fclass-jwt-auth.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fclass-jwt-auth.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fclass-jwt-auth.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,83 +1,83 @@\n-\u003C?php\r\n-\u002F**\r\n- * REST API: LP_Jwt_Auth\r\n- *\r\n- * @package LPJWTAuth\r\n- * @since 1.0.0\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-\r\n-class LP_Jwt_Auth {\r\n-\tpublic static $_instance = null;\r\n-\r\n-\tprotected $name;\r\n-\r\n-\tprotected $version;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->name    = 'learnpress';\r\n-\t\t$this->version = 'v1';\r\n-\r\n-\t\t\u002F\u002F Is enable rest api?\r\n-\t\t\u002F\u002F if ( LP_Settings::instance()->get( 'enable_jwt_rest_api' ) !== 'yes' ) {\r\n-\t\t\u002F\u002F return;\r\n-\t\t\u002F\u002F }\r\n-\r\n-\t\t$this->includes();\r\n-\t\t$this->define_hooks();\r\n-\t}\r\n-\r\n-\tprivate function includes() {\r\n-\t\t\u002F\u002F JWT Classes.\r\n-\t\tif ( ! class_exists( '\\LP\\Firebase\\JWT\\JWT' ) ) {\r\n-\t\t\tforeach ( glob( LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002F*.php' ) as $filename ) {\r\n-\t\t\t\trequire_once $filename;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Authentic.\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php';\r\n-\r\n-\t\t\u002F\u002F Include Rest API.\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php';\r\n-\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php';\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php';\r\n-\t}\r\n-\r\n-\tprivate function define_hooks() {\r\n-\t\t\u002F\u002F Authentic.\r\n-\t\t$public = new LP_Jwt_Public( $this->name, $this->version );\r\n-\r\n-\t\tadd_action( 'rest_api_init', array( $public, 'register_routes' ) );\r\n-\t\tadd_filter( 'rest_api_init', array( $public, 'add_cors_support' ) );\r\n-\t\tadd_filter( 'rest_pre_dispatch', array( $public, 'rest_pre_dispatch' ), 10, 2 );\r\n-\t\tadd_filter( 'determine_current_user', array( $public, 'determine_current_user' ), 30 );\r\n-\r\n-\t\t\u002F\u002F Rest API\r\n-\t\tadd_action( 'init', array( $this, 'load_rest_api' ) );\r\n-\t}\r\n-\r\n-\tpublic function load_rest_api() {\r\n-\t\tLP_Jwt_RestApi::instance()->init();\r\n-\t}\r\n-\r\n-\tpublic static function instance() {\r\n-\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\tself::$_instance = new LP_Jwt_Auth();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_instance;\r\n-\t}\r\n-}\r\n-\r\n-LP_Jwt_Auth::instance();\r\n+\u003C?php\n+\u002F**\n+ * REST API: LP_Jwt_Auth\n+ *\n+ * @package LPJWTAuth\n+ * @since 1.0.0\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+\n+class LP_Jwt_Auth {\n+\tpublic static $_instance = null;\n+\n+\tprotected $name;\n+\n+\tprotected $version;\n+\n+\tpublic function __construct() {\n+\t\t$this->name    = 'learnpress';\n+\t\t$this->version = 'v1';\n+\n+\t\t\u002F\u002F Is enable rest api?\n+\t\t\u002F\u002F if ( LP_Settings::instance()->get( 'enable_jwt_rest_api' ) !== 'yes' ) {\n+\t\t\u002F\u002F return;\n+\t\t\u002F\u002F }\n+\n+\t\t$this->includes();\n+\t\t$this->define_hooks();\n+\t}\n+\n+\tprivate function includes() {\n+\t\t\u002F\u002F JWT Classes.\n+\t\tif ( ! class_exists( '\\LP\\Firebase\\JWT\\JWT' ) ) {\n+\t\t\tforeach ( glob( LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002F*.php' ) as $filename ) {\n+\t\t\t\trequire_once $filename;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Authentic.\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php';\n+\n+\t\t\u002F\u002F Include Rest API.\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php';\n+\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php';\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php';\n+\t}\n+\n+\tprivate function define_hooks() {\n+\t\t\u002F\u002F Authentic.\n+\t\t$public = new LP_Jwt_Public( $this->name, $this->version );\n+\n+\t\tadd_action( 'rest_api_init', array( $public, 'register_routes' ) );\n+\t\tadd_filter( 'rest_api_init', array( $public, 'add_cors_support' ) );\n+\t\tadd_filter( 'rest_pre_dispatch', array( $public, 'rest_pre_dispatch' ), 10, 2 );\n+\t\tadd_filter( 'determine_current_user', array( $public, 'determine_current_user' ), 30 );\n+\n+\t\t\u002F\u002F Rest API\n+\t\tadd_action( 'init', array( $this, 'load_rest_api' ) );\n+\t}\n+\n+\tpublic function load_rest_api() {\n+\t\tLP_Jwt_RestApi::instance()->init();\n+\t}\n+\n+\tpublic static function instance() {\n+\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\tself::$_instance = new LP_Jwt_Auth();\n+\t\t}\n+\n+\t\treturn self::$_instance;\n+\t}\n+}\n+\n+LP_Jwt_Auth::instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fclass-jwt-public.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,392 +1,392 @@\n-\u003C?php\r\n-\r\n-use LP\\Firebase\\JWT\\JWT;\r\n-\r\n-\u002F**\r\n- * REST API: LP_Jwt_Public\r\n- *\r\n- * @package LPJWTAuth\r\n- * @since 1.0.0\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-\r\n-class LP_Jwt_Public {\r\n-\tprivate $name;\r\n-\r\n-\tprivate $version;\r\n-\r\n-\tprivate $namespace;\r\n-\r\n-\tprivate $jwt_error;\r\n-\r\n-\tprivate $secret_key;\r\n-\r\n-\tpublic function __construct( $name, $version ) {\r\n-\t\t$this->name      = $name;\r\n-\t\t$this->version   = $version;\r\n-\t\t$this->namespace = $this->name . '\u002F' . $this->version;\r\n-\r\n-\t\tif ( ! defined( 'SECURE_AUTH_KEY' ) && ! defined( 'LP_SECURE_AUTH_KEY' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$this->secret_key = defined( 'LP_SECURE_AUTH_KEY' ) ? LP_SECURE_AUTH_KEY : SECURE_AUTH_KEY;\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'token',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'generate_token' ),\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'username' => array(\r\n-\t\t\t\t\t\t'description'       => esc_html__( 'The username of the user.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'              => 'string',\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'password' => array(\r\n-\t\t\t\t\t\t'description'       => esc_html__( 'The password of the user.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'              => 'string',\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema'              => array( $this, 'get_item_schema' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'token\u002Fvalidate',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'validate_token' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'token\u002Fregister',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'register' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => esc_html__( 'JSON Web Token', 'learnpress' ),\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'token'      => array(\r\n-\t\t\t\t\t'description' => esc_html__( 'JSON Web Token.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'user_id'    => array(\r\n-\t\t\t\t\t'description' => esc_html__( 'The ID of the user.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'user_login' => array(\r\n-\t\t\t\t\t'description' => esc_html__( 'The username of the user', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'user_email' => array(\r\n-\t\t\t\t\t'description' => esc_html__( 'The email address of the user.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'lp_rest_authentication_token_schema', $schema );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add CORs support to the request.\r\n-\t *\u002F\r\n-\tpublic function add_cors_support() {\r\n-\t\t$enable_cors = defined( 'LP_JWT_AUTH_CORS_ENABLE' ) ? LP_JWT_AUTH_CORS_ENABLE : false;\r\n-\r\n-\t\tif ( $enable_cors ) {\r\n-\t\t\t$headers = apply_filters( 'lp_jwt_auth_cors_allow_headers', 'Access-Control-Allow-Headers, Content-Type, Authorization' );\r\n-\t\t\theader( sprintf( 'Access-Control-Allow-Headers: %s', $headers ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function register( WP_REST_Request $request ) {\r\n-\t\t$username         = $request->get_param( 'username' );\r\n-\t\t$password         = $request->get_param( 'password' );\r\n-\t\t$confirm_password = $request->get_param( 'confirm_password' );\r\n-\t\t$email            = $request->get_param( 'email' );\r\n-\r\n-\t\t$customer_id = LP_Forms_Handler::learnpress_create_new_customer( $email, $username, $password, $confirm_password );\r\n-\r\n-\t\tif ( is_wp_error( $customer_id ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t$customer_id->get_error_code(),\r\n-\t\t\t\t$customer_id->get_error_message(),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 403,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $this->generate_token( $request );\r\n-\t}\r\n-\r\n-\tpublic function generate_token( WP_REST_Request $request ) {\r\n-\t\t$secret_key = $this->secret_key;\r\n-\t\t$username   = $request->get_param( 'username' );\r\n-\t\t$password   = $request->get_param( 'password' );\r\n-\r\n-\t\tif ( ! $secret_key ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'lp_jwt_auth_bad_config',\r\n-\t\t\t\tesc_html__( 'LearnPress JWT is not configurated properly, please contact the admin', 'learnpress' ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 403,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Try to authenticate the user with the passed credentials*\u002F\r\n-\t\t$user = wp_authenticate( $username, $password );\r\n-\r\n-\t\t\u002F** If the authentication fails return a error*\u002F\r\n-\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\t$error_code = $user->get_error_code();\r\n-\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'[lp_jwt_auth] ' . $error_code,\r\n-\t\t\t\t$user->get_error_message( $error_code ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 403,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Valid credentials, the user exists create the according Token *\u002F\r\n-\t\t$issued_at  = time();\r\n-\t\t$not_before = apply_filters( 'lp_jwt_auth_not_before', $issued_at, $issued_at );\r\n-\t\t$expire     = apply_filters( 'lp_jwt_auth_expire', $issued_at + WEEK_IN_SECONDS, $issued_at );\r\n-\r\n-\t\t$token = array(\r\n-\t\t\t'iss'  => get_bloginfo( 'url' ),\r\n-\t\t\t'iat'  => $issued_at,\r\n-\t\t\t'nbf'  => $not_before,\r\n-\t\t\t'exp'  => $expire,\r\n-\t\t\t'data' => array(\r\n-\t\t\t\t'user' => array(\r\n-\t\t\t\t\t'id' => $user->data->ID,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t\u002F** Let the user modify the token data before the sign. *\u002F\r\n-\t\t$token = JWT::encode( apply_filters( 'lp_jwt_auth_token_before_sign', $token, $user ), $secret_key );\r\n-\r\n-\t\t\u002F** The token is signed, now create the object with no sensible user data to the client*\u002F\r\n-\t\t$data = array(\r\n-\t\t\t'token'             => $token,\r\n-\t\t\t'user_id'           => $user->data->ID,\r\n-\t\t\t'user_login'        => $user->data->user_login,\r\n-\t\t\t'user_email'        => $user->data->user_email,\r\n-\t\t\t'user_display_name' => $user->data->display_name,\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'lp_jwt_auth_token_before_dispatch', $data, $user );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * This is our Middleware to try to authenticate the user according to the\r\n-\t * token send.\r\n-\t *\r\n-\t * @param (int|bool) $user Logged User ID\r\n-\t *\r\n-\t * @return (int|bool)\r\n-\t *\u002F\r\n-\tpublic function determine_current_user( $user_id ) {\r\n-\t\t$rest_prefix   = trailingslashit( rest_get_url_prefix() );\r\n-\t\t$request_uri   = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );\r\n-\t\t$valid_api_uri = strpos( $request_uri, $rest_prefix . $this->name . '\u002F' );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Only check when rest url has wp-json\u002Flearnpress\u002F.\r\n-\t\t *\u002F\r\n-\t\tif ( ! empty( $user_id ) || $valid_api_uri === false ) {\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*\r\n-\t\t * if the request URI is for validate the token don't do anything,\r\n-\t\t * this avoid double calls to the validate_token function.\r\n-\t\t *\u002F\r\n-\t\t$validate_token = strpos( $request_uri, '\u002Ftoken' );\r\n-\r\n-\t\t\u002F** All course is public so donot need token *\u002F\r\n-\t\t$is_rest_courses = strpos( $request_uri, '\u002Fcourses' ) || strpos( $request_uri, '\u002Freset-password' ) || strpos( $request_uri, '\u002Fcourse_category' ) || strpos( $request_uri, '\u002Fsections\u002F' ) || strpos( $request_uri, '\u002Fsection-items\u002F' ) || strpos( $request_uri, '\u002Fusers' );\r\n-\r\n-\t\tif ( $validate_token > 0 ) {\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\r\n-\t\t$token = $this->validate_token( false );\r\n-\r\n-\t\tif ( is_wp_error( $token ) ) {\r\n-\t\t\tif ( ! $is_rest_courses ) {\r\n-\t\t\t\t$this->jwt_error = $token;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\r\n-\t\treturn $token->data->user->id;\r\n-\t}\r\n-\r\n-\tpublic function validate_token( $output = true ) {\r\n-\t\t\u002F*\r\n-\t\t * Looking for the HTTP_AUTHORIZATION header, if not present just\r\n-\t\t * return the user.\r\n-\t\t *\u002F\r\n-\t\t$auth = isset( $_SERVER['HTTP_AUTHORIZATION'] ) ? sanitize_text_field( $_SERVER['HTTP_AUTHORIZATION'] ) : false;\r\n-\r\n-\t\t\u002F* Double check for different auth header string (server dependent) *\u002F\r\n-\t\tif ( ! $auth ) {\r\n-\t\t\t$auth = isset( $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ) ? sanitize_text_field( $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ) : false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $auth ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'lp_jwt_auth_no_auth_header',\r\n-\t\t\t\tesc_html__( 'Authorization header not found.', 'learnpress' ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F*\r\n-\t\t * The HTTP_AUTHORIZATION is present verify the format\r\n-\t\t * if the format is wrong return the user.\r\n-\t\t *\u002F\r\n-\t\tlist( $token ) = sscanf( $auth, 'Bearer %s' );\r\n-\r\n-\t\tif ( ! $token ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'lp_jwt_auth_bad_auth_header',\r\n-\t\t\t\tesc_html__( 'Authentication token is missing.', 'learnpress' ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Get the Secret Key *\u002F\r\n-\t\t$secret_key = $this->secret_key;\r\n-\r\n-\t\tif ( ! $secret_key ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'lp_jwt_auth_bad_config',\r\n-\t\t\t\tesc_html__( 'LearnPress JWT is not configurated properly, please contact the admin', 'learnpress' ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Try to decode the token *\u002F\r\n-\t\ttry {\r\n-\t\t\t$token = JWT::decode( $token, $secret_key, array( 'HS256' ) );\r\n-\r\n-\t\t\t\u002F** The Token is decoded now validate the iss *\u002F\r\n-\t\t\tif ( $token->iss != get_bloginfo( 'url' ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'lp_jwt_auth_bad_iss',\r\n-\t\t\t\t\tesc_html__( 'The iss do not match with this server', 'learnpress' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F** So far so good, validate the user id in the token *\u002F\r\n-\t\t\tif ( ! isset( $token->data->user->id ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'lp_jwt_auth_bad_request',\r\n-\t\t\t\t\tesc_html__( 'User ID not found in the token', 'learnpress' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! isset( $token->exp ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_authentication_missing_token_expiration',\r\n-\t\t\t\t\tesc_html__( 'The token must have an expiration date.', 'learnpress' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( time() > $token->exp ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_authentication_token_expired',\r\n-\t\t\t\t\tesc_html__( 'The token has expired.', 'learnpress' ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F** Everything looks good return the decoded token if the $output is false *\u002F\r\n-\t\t\tif ( ! $output ) {\r\n-\t\t\t\treturn $token;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F** If the output is true return an answer to the request to show it *\u002F\r\n-\t\t\treturn array(\r\n-\t\t\t\t'code'    => 'lp_jwt_auth_valid_token',\r\n-\t\t\t\t'message' => esc_html__( 'Valid access token.', 'learnpress' ),\r\n-\t\t\t\t'data'    => array(\r\n-\t\t\t\t\t'status' => 200,\r\n-\t\t\t\t\t'exp'    => $token->exp - time(),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'lp_jwt_auth_invalid_token',\r\n-\t\t\t\t$e->getMessage(),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status' => 401,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Filter to hook the rest_pre_dispatch, if the is an error in the request\r\n-\t * send it, if there is no error just continue with the current request.\r\n-\t *\r\n-\t * @param $request\r\n-\t *\u002F\r\n-\tpublic function rest_pre_dispatch( $request ) {\r\n-\t\tif ( is_wp_error( $this->jwt_error ) ) {\r\n-\t\t\treturn $this->jwt_error;\r\n-\t\t}\r\n-\r\n-\t\treturn $request;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LP\\Firebase\\JWT\\JWT;\n+\n+\u002F**\n+ * REST API: LP_Jwt_Public\n+ *\n+ * @package LPJWTAuth\n+ * @since 1.0.0\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+\n+class LP_Jwt_Public {\n+\tprivate $name;\n+\n+\tprivate $version;\n+\n+\tprivate $namespace;\n+\n+\tprivate $jwt_error;\n+\n+\tprivate $secret_key;\n+\n+\tpublic function __construct( $name, $version ) {\n+\t\t$this->name      = $name;\n+\t\t$this->version   = $version;\n+\t\t$this->namespace = $this->name . '\u002F' . $this->version;\n+\n+\t\tif ( ! defined( 'SECURE_AUTH_KEY' ) && ! defined( 'LP_SECURE_AUTH_KEY' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$this->secret_key = defined( 'LP_SECURE_AUTH_KEY' ) ? LP_SECURE_AUTH_KEY : SECURE_AUTH_KEY;\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'token',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t'callback'            => array( $this, 'generate_token' ),\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'username' => array(\n+\t\t\t\t\t\t'description'       => esc_html__( 'The username of the user.', 'learnpress' ),\n+\t\t\t\t\t\t'type'              => 'string',\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t\t\t\t),\n+\t\t\t\t\t'password' => array(\n+\t\t\t\t\t\t'description'       => esc_html__( 'The password of the user.', 'learnpress' ),\n+\t\t\t\t\t\t'type'              => 'string',\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'schema'              => array( $this, 'get_item_schema' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'token\u002Fvalidate',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t'callback'            => array( $this, 'validate_token' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'token\u002Fregister',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t'callback'            => array( $this, 'register' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => esc_html__( 'JSON Web Token', 'learnpress' ),\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'token'      => array(\n+\t\t\t\t\t'description' => esc_html__( 'JSON Web Token.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'user_id'    => array(\n+\t\t\t\t\t'description' => esc_html__( 'The ID of the user.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'user_login' => array(\n+\t\t\t\t\t'description' => esc_html__( 'The username of the user', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'user_email' => array(\n+\t\t\t\t\t'description' => esc_html__( 'The email address of the user.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn apply_filters( 'lp_rest_authentication_token_schema', $schema );\n+\t}\n+\n+\t\u002F**\n+\t * Add CORs support to the request.\n+\t *\u002F\n+\tpublic function add_cors_support() {\n+\t\t$enable_cors = defined( 'LP_JWT_AUTH_CORS_ENABLE' ) ? LP_JWT_AUTH_CORS_ENABLE : false;\n+\n+\t\tif ( $enable_cors ) {\n+\t\t\t$headers = apply_filters( 'lp_jwt_auth_cors_allow_headers', 'Access-Control-Allow-Headers, Content-Type, Authorization' );\n+\t\t\theader( sprintf( 'Access-Control-Allow-Headers: %s', $headers ) );\n+\t\t}\n+\t}\n+\n+\tpublic function register( WP_REST_Request $request ) {\n+\t\t$username         = $request->get_param( 'username' );\n+\t\t$password         = $request->get_param( 'password' );\n+\t\t$confirm_password = $request->get_param( 'confirm_password' );\n+\t\t$email            = $request->get_param( 'email' );\n+\n+\t\t$customer_id = LP_Forms_Handler::learnpress_create_new_customer( $email, $username, $password, $confirm_password );\n+\n+\t\tif ( is_wp_error( $customer_id ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t$customer_id->get_error_code(),\n+\t\t\t\t$customer_id->get_error_message(),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 403,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $this->generate_token( $request );\n+\t}\n+\n+\tpublic function generate_token( WP_REST_Request $request ) {\n+\t\t$secret_key = $this->secret_key;\n+\t\t$username   = $request->get_param( 'username' );\n+\t\t$password   = $request->get_param( 'password' );\n+\n+\t\tif ( ! $secret_key ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'lp_jwt_auth_bad_config',\n+\t\t\t\tesc_html__( 'LearnPress JWT is not configurated properly, please contact the admin', 'learnpress' ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 403,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F** Try to authenticate the user with the passed credentials*\u002F\n+\t\t$user = wp_authenticate( $username, $password );\n+\n+\t\t\u002F** If the authentication fails return a error*\u002F\n+\t\tif ( is_wp_error( $user ) ) {\n+\t\t\t$error_code = $user->get_error_code();\n+\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'[lp_jwt_auth] ' . $error_code,\n+\t\t\t\t$user->get_error_message( $error_code ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 403,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F** Valid credentials, the user exists create the according Token *\u002F\n+\t\t$issued_at  = time();\n+\t\t$not_before = apply_filters( 'lp_jwt_auth_not_before', $issued_at, $issued_at );\n+\t\t$expire     = apply_filters( 'lp_jwt_auth_expire', $issued_at + WEEK_IN_SECONDS, $issued_at );\n+\n+\t\t$token = array(\n+\t\t\t'iss'  => get_bloginfo( 'url' ),\n+\t\t\t'iat'  => $issued_at,\n+\t\t\t'nbf'  => $not_before,\n+\t\t\t'exp'  => $expire,\n+\t\t\t'data' => array(\n+\t\t\t\t'user' => array(\n+\t\t\t\t\t'id' => $user->data->ID,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\t\u002F** Let the user modify the token data before the sign. *\u002F\n+\t\t$token = JWT::encode( apply_filters( 'lp_jwt_auth_token_before_sign', $token, $user ), $secret_key );\n+\n+\t\t\u002F** The token is signed, now create the object with no sensible user data to the client*\u002F\n+\t\t$data = array(\n+\t\t\t'token'             => $token,\n+\t\t\t'user_id'           => $user->data->ID,\n+\t\t\t'user_login'        => $user->data->user_login,\n+\t\t\t'user_email'        => $user->data->user_email,\n+\t\t\t'user_display_name' => $user->data->display_name,\n+\t\t);\n+\n+\t\treturn apply_filters( 'lp_jwt_auth_token_before_dispatch', $data, $user );\n+\t}\n+\n+\t\u002F**\n+\t * This is our Middleware to try to authenticate the user according to the\n+\t * token send.\n+\t *\n+\t * @param (int|bool) $user Logged User ID\n+\t *\n+\t * @return (int|bool)\n+\t *\u002F\n+\tpublic function determine_current_user( $user_id ) {\n+\t\t$rest_prefix   = trailingslashit( rest_get_url_prefix() );\n+\t\t$request_uri   = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );\n+\t\t$valid_api_uri = strpos( $request_uri, $rest_prefix . $this->name . '\u002F' );\n+\n+\t\t\u002F**\n+\t\t * Only check when rest url has wp-json\u002Flearnpress\u002F.\n+\t\t *\u002F\n+\t\tif ( ! empty( $user_id ) || $valid_api_uri === false ) {\n+\t\t\treturn $user_id;\n+\t\t}\n+\n+\t\t\u002F*\n+\t\t * if the request URI is for validate the token don't do anything,\n+\t\t * this avoid double calls to the validate_token function.\n+\t\t *\u002F\n+\t\t$validate_token = strpos( $request_uri, '\u002Ftoken' );\n+\n+\t\t\u002F** All course is public so donot need token *\u002F\n+\t\t$is_rest_courses = strpos( $request_uri, '\u002Fcourses' ) || strpos( $request_uri, '\u002Freset-password' ) || strpos( $request_uri, '\u002Fcourse_category' ) || strpos( $request_uri, '\u002Fsections\u002F' ) || strpos( $request_uri, '\u002Fsection-items\u002F' ) || strpos( $request_uri, '\u002Fusers' );\n+\n+\t\tif ( $validate_token > 0 ) {\n+\t\t\treturn $user_id;\n+\t\t}\n+\n+\t\t$token = $this->validate_token( false );\n+\n+\t\tif ( is_wp_error( $token ) ) {\n+\t\t\tif ( ! $is_rest_courses ) {\n+\t\t\t\t$this->jwt_error = $token;\n+\t\t\t}\n+\n+\t\t\treturn $user_id;\n+\t\t}\n+\n+\t\treturn $token->data->user->id;\n+\t}\n+\n+\tpublic function validate_token( $output = true ) {\n+\t\t\u002F*\n+\t\t * Looking for the HTTP_AUTHORIZATION header, if not present just\n+\t\t * return the user.\n+\t\t *\u002F\n+\t\t$auth = isset( $_SERVER['HTTP_AUTHORIZATION'] ) ? sanitize_text_field( $_SERVER['HTTP_AUTHORIZATION'] ) : false;\n+\n+\t\t\u002F* Double check for different auth header string (server dependent) *\u002F\n+\t\tif ( ! $auth ) {\n+\t\t\t$auth = isset( $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ) ? sanitize_text_field( $_SERVER['REDIRECT_HTTP_AUTHORIZATION'] ) : false;\n+\t\t}\n+\n+\t\tif ( ! $auth ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'lp_jwt_auth_no_auth_header',\n+\t\t\t\tesc_html__( 'Authorization header not found.', 'learnpress' ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 401,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F*\n+\t\t * The HTTP_AUTHORIZATION is present verify the format\n+\t\t * if the format is wrong return the user.\n+\t\t *\u002F\n+\t\tlist( $token ) = sscanf( $auth, 'Bearer %s' );\n+\n+\t\tif ( ! $token ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'lp_jwt_auth_bad_auth_header',\n+\t\t\t\tesc_html__( 'Authentication token is missing.', 'learnpress' ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 401,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F** Get the Secret Key *\u002F\n+\t\t$secret_key = $this->secret_key;\n+\n+\t\tif ( ! $secret_key ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'lp_jwt_auth_bad_config',\n+\t\t\t\tesc_html__( 'LearnPress JWT is not configurated properly, please contact the admin', 'learnpress' ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 401,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F** Try to decode the token *\u002F\n+\t\ttry {\n+\t\t\t$token = JWT::decode( $token, $secret_key, array( 'HS256' ) );\n+\n+\t\t\t\u002F** The Token is decoded now validate the iss *\u002F\n+\t\t\tif ( $token->iss != get_bloginfo( 'url' ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'lp_jwt_auth_bad_iss',\n+\t\t\t\t\tesc_html__( 'The iss do not match with this server', 'learnpress' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => 401,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F** So far so good, validate the user id in the token *\u002F\n+\t\t\tif ( ! isset( $token->data->user->id ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'lp_jwt_auth_bad_request',\n+\t\t\t\t\tesc_html__( 'User ID not found in the token', 'learnpress' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => 401,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! isset( $token->exp ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_authentication_missing_token_expiration',\n+\t\t\t\t\tesc_html__( 'The token must have an expiration date.', 'learnpress' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => 401,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( time() > $token->exp ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_authentication_token_expired',\n+\t\t\t\t\tesc_html__( 'The token has expired.', 'learnpress' ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => 401,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F** Everything looks good return the decoded token if the $output is false *\u002F\n+\t\t\tif ( ! $output ) {\n+\t\t\t\treturn $token;\n+\t\t\t}\n+\n+\t\t\t\u002F** If the output is true return an answer to the request to show it *\u002F\n+\t\t\treturn array(\n+\t\t\t\t'code'    => 'lp_jwt_auth_valid_token',\n+\t\t\t\t'message' => esc_html__( 'Valid access token.', 'learnpress' ),\n+\t\t\t\t'data'    => array(\n+\t\t\t\t\t'status' => 200,\n+\t\t\t\t\t'exp'    => $token->exp - time(),\n+\t\t\t\t),\n+\t\t\t);\n+\t\t} catch ( Exception $e ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'lp_jwt_auth_invalid_token',\n+\t\t\t\t$e->getMessage(),\n+\t\t\t\tarray(\n+\t\t\t\t\t'status' => 401,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Filter to hook the rest_pre_dispatch, if the is an error in the request\n+\t * send it, if there is no error just continue with the current request.\n+\t *\n+\t * @param $request\n+\t *\u002F\n+\tpublic function rest_pre_dispatch( $request ) {\n+\t\tif ( is_wp_error( $this->jwt_error ) ) {\n+\t\t\treturn $this->jwt_error;\n+\t\t}\n+\n+\t\treturn $request;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FBeforeValidException.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FBeforeValidException.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FBeforeValidException.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FBeforeValidException.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003C?php\r\n-namespace LP\\Firebase\\JWT;\r\n-\r\n-class BeforeValidException extends \\UnexpectedValueException {\r\n-\r\n-\r\n-}\r\n+\u003C?php\n+namespace LP\\Firebase\\JWT;\n+\n+class BeforeValidException extends \\UnexpectedValueException {\n+\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FExpiredException.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FExpiredException.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FExpiredException.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FExpiredException.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003C?php\r\n-namespace LP\\Firebase\\JWT;\r\n-\r\n-class ExpiredException extends \\UnexpectedValueException {\r\n-\r\n-\r\n-}\r\n+\u003C?php\n+namespace LP\\Firebase\\JWT;\n+\n+class ExpiredException extends \\UnexpectedValueException {\n+\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FJWT.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FJWT.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FJWT.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FJWT.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,372 +1,372 @@\n-\u003C?php\r\n-\r\n-namespace LP\\Firebase\\JWT;\r\n-use \\DomainException;\r\n-use \\InvalidArgumentException;\r\n-use \\UnexpectedValueException;\r\n-use \\DateTime;\r\n-\r\n-\u002F**\r\n- * JSON Web Token implementation, based on this spec:\r\n- * https:\u002F\u002Ftools.ietf.org\u002Fhtml\u002Frfc7519\r\n- *\r\n- * PHP version 5\r\n- *\r\n- * @category Authentication\r\n- * @package  Authentication_JWT\r\n- * @author   Neuman Vong \u003Cneuman@twilio.com>\r\n- * @author   Anant Narayanan \u003Canant@php.net>\r\n- * @license  http:\u002F\u002Fopensource.org\u002Flicenses\u002FBSD-3-Clause 3-clause BSD\r\n- * @link     https:\u002F\u002Fgithub.com\u002Ffirebase\u002Fphp-jwt\r\n- *\u002F\r\n-class JWT {\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * When checking nbf, iat or expiration times,\r\n-\t * we want to provide some extra leeway time to\r\n-\t * account for clock skew.\r\n-\t *\u002F\r\n-\tpublic static $leeway = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Allow the current timestamp to be specified.\r\n-\t * Useful for fixing a value within unit testing.\r\n-\t *\r\n-\t * Will default to PHP time() value if null.\r\n-\t *\u002F\r\n-\tpublic static $timestamp = null;\r\n-\r\n-\tpublic static $supported_algs = array(\r\n-\t\t'HS256' => array( 'hash_hmac', 'SHA256' ),\r\n-\t\t'HS512' => array( 'hash_hmac', 'SHA512' ),\r\n-\t\t'HS384' => array( 'hash_hmac', 'SHA384' ),\r\n-\t\t'RS256' => array( 'openssl', 'SHA256' ),\r\n-\t\t'RS384' => array( 'openssl', 'SHA384' ),\r\n-\t\t'RS512' => array( 'openssl', 'SHA512' ),\r\n-\t);\r\n-\r\n-\t\u002F**\r\n-\t * Decodes a JWT string into a PHP object.\r\n-\t *\r\n-\t * @param string        $jwt            The JWT\r\n-\t * @param string|array  $key            The key, or map of keys.\r\n-\t *                                      If the algorithm used is asymmetric, this is the public key\r\n-\t * @param array         $allowed_algs   List of supported verification algorithms\r\n-\t *                                      Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\r\n-\t *\r\n-\t * @return object The JWT's payload as a PHP object\r\n-\t *\r\n-\t * @throws UnexpectedValueException     Provided JWT was invalid\r\n-\t * @throws SignatureInvalidException    Provided JWT was invalid because the signature verification failed\r\n-\t * @throws BeforeValidException         Provided JWT is trying to be used before it's eligible as defined by 'nbf'\r\n-\t * @throws BeforeValidException         Provided JWT is trying to be used before it's been created as defined by 'iat'\r\n-\t * @throws ExpiredException             Provided JWT has since expired, as defined by the 'exp' claim\r\n-\t *\r\n-\t * @uses jsonDecode\r\n-\t * @uses urlsafeB64Decode\r\n-\t *\u002F\r\n-\tpublic static function decode( $jwt, $key, array $allowed_algs = array() ) {\r\n-\t\t$timestamp = is_null( static::$timestamp ) ? time() : static::$timestamp;\r\n-\r\n-\t\tif ( empty( $key ) ) {\r\n-\t\t\tthrow new InvalidArgumentException( 'Key may not be empty' );\r\n-\t\t}\r\n-\t\t$tks = explode( '.', $jwt );\r\n-\t\tif ( count( $tks ) != 3 ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Wrong number of segments' );\r\n-\t\t}\r\n-\t\tlist($headb64, $bodyb64, $cryptob64) = $tks;\r\n-\t\tif ( null === ( $header = static::jsonDecode( static::urlsafeB64Decode( $headb64 ) ) ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Invalid header encoding' );\r\n-\t\t}\r\n-\t\tif ( null === $payload = static::jsonDecode( static::urlsafeB64Decode( $bodyb64 ) ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Invalid claims encoding' );\r\n-\t\t}\r\n-\t\tif ( false === ( $sig = static::urlsafeB64Decode( $cryptob64 ) ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Invalid signature encoding' );\r\n-\t\t}\r\n-\t\tif ( empty( $header->alg ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Empty algorithm' );\r\n-\t\t}\r\n-\t\tif ( empty( static::$supported_algs[ $header->alg ] ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Algorithm not supported' );\r\n-\t\t}\r\n-\t\tif ( ! in_array( $header->alg, $allowed_algs ) ) {\r\n-\t\t\tthrow new UnexpectedValueException( 'Algorithm not allowed' );\r\n-\t\t}\r\n-\t\tif ( is_array( $key ) || $key instanceof \\ArrayAccess ) {\r\n-\t\t\tif ( isset( $header->kid ) ) {\r\n-\t\t\t\tif ( ! isset( $key[ $header->kid ] ) ) {\r\n-\t\t\t\t\tthrow new UnexpectedValueException( '\"kid\" invalid, unable to lookup correct key' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$key = $key[ $header->kid ];\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new UnexpectedValueException( '\"kid\" empty, unable to lookup correct key' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check the signature\r\n-\t\tif ( ! static::verify( \"$headb64.$bodyb64\", $sig, $key, $header->alg ) ) {\r\n-\t\t\tthrow new SignatureInvalidException( 'Signature verification failed' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check if the nbf if it is defined. This is the time that the\r\n-\t\t\u002F\u002F token can actually be used. If it's not yet that time, abort.\r\n-\t\tif ( isset( $payload->nbf ) && $payload->nbf > ( $timestamp + static::$leeway ) ) {\r\n-\t\t\tthrow new BeforeValidException(\r\n-\t\t\t\t'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->nbf )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check that this token has been created before 'now'. This prevents\r\n-\t\t\u002F\u002F using tokens that have been created for later use (and haven't\r\n-\t\t\u002F\u002F correctly used the nbf claim).\r\n-\t\tif ( isset( $payload->iat ) && $payload->iat > ( $timestamp + static::$leeway ) ) {\r\n-\t\t\tthrow new BeforeValidException(\r\n-\t\t\t\t'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->iat )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check if this token has expired.\r\n-\t\tif ( isset( $payload->exp ) && ( $timestamp - static::$leeway ) >= $payload->exp ) {\r\n-\t\t\tthrow new ExpiredException( 'Expired token' );\r\n-\t\t}\r\n-\r\n-\t\treturn $payload;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Converts and signs a PHP object or array into a JWT string.\r\n-\t *\r\n-\t * @param object|array  $payload    PHP object or array\r\n-\t * @param string        $key        The secret key.\r\n-\t *                                  If the algorithm used is asymmetric, this is the private key\r\n-\t * @param string        $alg        The signing algorithm.\r\n-\t *                                  Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\r\n-\t * @param mixed         $keyId\r\n-\t * @param array         $head       An array with header elements to attach\r\n-\t *\r\n-\t * @return string A signed JWT\r\n-\t *\r\n-\t * @uses jsonEncode\r\n-\t * @uses urlsafeB64Encode\r\n-\t *\u002F\r\n-\tpublic static function encode( $payload, $key, $alg = 'HS256', $keyId = null, $head = null ) {\r\n-\t\t$header = array(\r\n-\t\t\t'typ' => 'JWT',\r\n-\t\t\t'alg' => $alg,\r\n-\t\t);\r\n-\t\tif ( $keyId !== null ) {\r\n-\t\t\t$header['kid'] = $keyId;\r\n-\t\t}\r\n-\t\tif ( isset( $head ) && is_array( $head ) ) {\r\n-\t\t\t$header = array_merge( $head, $header );\r\n-\t\t}\r\n-\t\t$segments      = array();\r\n-\t\t$segments[]    = static::urlsafeB64Encode( static::jsonEncode( $header ) );\r\n-\t\t$segments[]    = static::urlsafeB64Encode( static::jsonEncode( $payload ) );\r\n-\t\t$signing_input = implode( '.', $segments );\r\n-\r\n-\t\t$signature  = static::sign( $signing_input, $key, $alg );\r\n-\t\t$segments[] = static::urlsafeB64Encode( $signature );\r\n-\r\n-\t\treturn implode( '.', $segments );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sign a string with a given key and algorithm.\r\n-\t *\r\n-\t * @param string            $msg    The message to sign\r\n-\t * @param string|resource   $key    The secret key\r\n-\t * @param string            $alg    The signing algorithm.\r\n-\t *                                  Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\r\n-\t *\r\n-\t * @return string An encrypted message\r\n-\t *\r\n-\t * @throws DomainException Unsupported algorithm was specified\r\n-\t *\u002F\r\n-\tpublic static function sign( $msg, $key, $alg = 'HS256' ) {\r\n-\t\tif ( empty( static::$supported_algs[ $alg ] ) ) {\r\n-\t\t\tthrow new DomainException( 'Algorithm not supported' );\r\n-\t\t}\r\n-\t\tlist($function, $algorithm) = static::$supported_algs[ $alg ];\r\n-\t\tswitch ( $function ) {\r\n-\t\t\tcase 'hash_hmac':\r\n-\t\t\t\treturn hash_hmac( $algorithm, $msg, $key, true );\r\n-\t\t\tcase 'openssl':\r\n-\t\t\t\t$signature = '';\r\n-\t\t\t\t$success   = openssl_sign( $msg, $signature, $key, $algorithm );\r\n-\t\t\t\tif ( ! $success ) {\r\n-\t\t\t\t\tthrow new DomainException( 'OpenSSL unable to sign data' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn $signature;\r\n-\t\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Verify a signature with the message, key and method. Not all methods\r\n-\t * are symmetric, so we must have a separate verify and sign method.\r\n-\t *\r\n-\t * @param string            $msg        The original message (header and body)\r\n-\t * @param string            $signature  The original signature\r\n-\t * @param string|resource   $key        For HS*, a string key works. for RS*, must be a resource of an openssl public key\r\n-\t * @param string            $alg        The algorithm\r\n-\t *\r\n-\t * @return bool\r\n-\t *\r\n-\t * @throws DomainException Invalid Algorithm or OpenSSL failure\r\n-\t *\u002F\r\n-\tprivate static function verify( $msg, $signature, $key, $alg ) {\r\n-\t\tif ( empty( static::$supported_algs[ $alg ] ) ) {\r\n-\t\t\tthrow new DomainException( 'Algorithm not supported' );\r\n-\t\t}\r\n-\r\n-\t\tlist($function, $algorithm) = static::$supported_algs[ $alg ];\r\n-\t\tswitch ( $function ) {\r\n-\t\t\tcase 'openssl':\r\n-\t\t\t\t$success = openssl_verify( $msg, $signature, $key, $algorithm );\r\n-\t\t\t\tif ( $success === 1 ) {\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t} elseif ( $success === 0 ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F returns 1 on success, 0 on failure, -1 on error.\r\n-\t\t\t\tthrow new DomainException(\r\n-\t\t\t\t\t'OpenSSL error: ' . openssl_error_string()\r\n-\t\t\t\t);\r\n-\t\t\tcase 'hash_hmac':\r\n-\t\t\tdefault:\r\n-\t\t\t\t$hash = hash_hmac( $algorithm, $msg, $key, true );\r\n-\t\t\t\tif ( function_exists( 'hash_equals' ) ) {\r\n-\t\t\t\t\treturn hash_equals( $signature, $hash );\r\n-\t\t\t\t}\r\n-\t\t\t\t$len = min( static::safeStrlen( $signature ), static::safeStrlen( $hash ) );\r\n-\r\n-\t\t\t\t$status = 0;\r\n-\t\t\t\tfor ( $i = 0; $i \u003C $len; $i++ ) {\r\n-\t\t\t\t\t$status |= ( ord( $signature[ $i ] ) ^ ord( $hash[ $i ] ) );\r\n-\t\t\t\t}\r\n-\t\t\t\t$status |= ( static::safeStrlen( $signature ) ^ static::safeStrlen( $hash ) );\r\n-\r\n-\t\t\t\treturn ( $status === 0 );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Decode a JSON string into a PHP object.\r\n-\t *\r\n-\t * @param string $input JSON string\r\n-\t *\r\n-\t * @return object Object representation of JSON string\r\n-\t *\r\n-\t * @throws DomainException Provided string was invalid JSON\r\n-\t *\u002F\r\n-\tpublic static function jsonDecode( $input ) {\r\n-\t\tif ( version_compare( PHP_VERSION, '5.4.0', '>=' ) && ! ( defined( 'JSON_C_VERSION' ) && PHP_INT_SIZE > 4 ) ) {\r\n-\t\t\t\u002F** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you\r\n-\t\t\t * to specify that large ints (like Steam Transaction IDs) should be treated as\r\n-\t\t\t * strings, rather than the PHP default behaviour of converting them to floats.\r\n-\t\t\t *\u002F\r\n-\t\t\t$obj = json_decode( $input, false, 512, JSON_BIGINT_AS_STRING );\r\n-\t\t} else {\r\n-\t\t\t\u002F** Not all servers will support that, however, so for older versions we must\r\n-\t\t\t * manually detect large ints in the JSON string and quote them (thus converting\r\n-\t\t\t *them to strings) before decoding, hence the preg_replace() call.\r\n-\t\t\t *\u002F\r\n-\t\t\t$max_int_length       = strlen( (string) PHP_INT_MAX ) - 1;\r\n-\t\t\t$json_without_bigints = preg_replace( '\u002F:\\s*(-?\\d{' . $max_int_length . ',})\u002F', ': \"$1\"', $input );\r\n-\t\t\t$obj                  = json_decode( $json_without_bigints );\r\n-\t\t}\r\n-\r\n-\t\tif ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {\r\n-\t\t\tstatic::handleJsonError( $errno );\r\n-\t\t} elseif ( $obj === null && $input !== 'null' ) {\r\n-\t\t\tthrow new DomainException( 'Null result with non-null input' );\r\n-\t\t}\r\n-\t\treturn $obj;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Encode a PHP object into a JSON string.\r\n-\t *\r\n-\t * @param object|array $input A PHP object or array\r\n-\t *\r\n-\t * @return string JSON representation of the PHP object or array\r\n-\t *\r\n-\t * @throws DomainException Provided object could not be encoded to valid JSON\r\n-\t *\u002F\r\n-\tpublic static function jsonEncode( $input ) {\r\n-\t\t$json = json_encode( $input );\r\n-\t\tif ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {\r\n-\t\t\tstatic::handleJsonError( $errno );\r\n-\t\t} elseif ( $json === 'null' && $input !== null ) {\r\n-\t\t\tthrow new DomainException( 'Null result with non-null input' );\r\n-\t\t}\r\n-\t\treturn $json;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Decode a string with URL-safe Base64.\r\n-\t *\r\n-\t * @param string $input A Base64 encoded string\r\n-\t *\r\n-\t * @return string A decoded string\r\n-\t *\u002F\r\n-\tpublic static function urlsafeB64Decode( $input ) {\r\n-\t\t$remainder = strlen( $input ) % 4;\r\n-\t\tif ( $remainder ) {\r\n-\t\t\t$padlen = 4 - $remainder;\r\n-\t\t\t$input .= str_repeat( '=', $padlen );\r\n-\t\t}\r\n-\t\treturn base64_decode( strtr( $input, '-_', '+\u002F' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Encode a string with URL-safe Base64.\r\n-\t *\r\n-\t * @param string $input The string you want encoded\r\n-\t *\r\n-\t * @return string The base64 encode of what you passed in\r\n-\t *\u002F\r\n-\tpublic static function urlsafeB64Encode( $input ) {\r\n-\t\treturn str_replace( '=', '', strtr( base64_encode( $input ), '+\u002F', '-_' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Helper method to create a JSON error.\r\n-\t *\r\n-\t * @param int $errno An error number from json_last_error()\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprivate static function handleJsonError( $errno ) {\r\n-\t\t$messages = array(\r\n-\t\t\tJSON_ERROR_DEPTH          => 'Maximum stack depth exceeded',\r\n-\t\t\tJSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',\r\n-\t\t\tJSON_ERROR_CTRL_CHAR      => 'Unexpected control character found',\r\n-\t\t\tJSON_ERROR_SYNTAX         => 'Syntax error, malformed JSON',\r\n-\t\t\tJSON_ERROR_UTF8           => 'Malformed UTF-8 characters', \u002F\u002FPHP >= 5.3.3\r\n-\t\t);\r\n-\t\tthrow new DomainException(\r\n-\t\t\tisset( $messages[ $errno ] )\r\n-\t\t\t? $messages[ $errno ]\r\n-\t\t\t: 'Unknown JSON error: ' . $errno\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the number of bytes in cryptographic strings.\r\n-\t *\r\n-\t * @param string\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprivate static function safeStrlen( $str ) {\r\n-\t\tif ( function_exists( 'mb_strlen' ) ) {\r\n-\t\t\treturn mb_strlen( $str, '8bit' );\r\n-\t\t}\r\n-\t\treturn strlen( $str );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LP\\Firebase\\JWT;\n+use \\DomainException;\n+use \\InvalidArgumentException;\n+use \\UnexpectedValueException;\n+use \\DateTime;\n+\n+\u002F**\n+ * JSON Web Token implementation, based on this spec:\n+ * https:\u002F\u002Ftools.ietf.org\u002Fhtml\u002Frfc7519\n+ *\n+ * PHP version 5\n+ *\n+ * @category Authentication\n+ * @package  Authentication_JWT\n+ * @author   Neuman Vong \u003Cneuman@twilio.com>\n+ * @author   Anant Narayanan \u003Canant@php.net>\n+ * @license  http:\u002F\u002Fopensource.org\u002Flicenses\u002FBSD-3-Clause 3-clause BSD\n+ * @link     https:\u002F\u002Fgithub.com\u002Ffirebase\u002Fphp-jwt\n+ *\u002F\n+class JWT {\n+\n+\n+\t\u002F**\n+\t * When checking nbf, iat or expiration times,\n+\t * we want to provide some extra leeway time to\n+\t * account for clock skew.\n+\t *\u002F\n+\tpublic static $leeway = 0;\n+\n+\t\u002F**\n+\t * Allow the current timestamp to be specified.\n+\t * Useful for fixing a value within unit testing.\n+\t *\n+\t * Will default to PHP time() value if null.\n+\t *\u002F\n+\tpublic static $timestamp = null;\n+\n+\tpublic static $supported_algs = array(\n+\t\t'HS256' => array( 'hash_hmac', 'SHA256' ),\n+\t\t'HS512' => array( 'hash_hmac', 'SHA512' ),\n+\t\t'HS384' => array( 'hash_hmac', 'SHA384' ),\n+\t\t'RS256' => array( 'openssl', 'SHA256' ),\n+\t\t'RS384' => array( 'openssl', 'SHA384' ),\n+\t\t'RS512' => array( 'openssl', 'SHA512' ),\n+\t);\n+\n+\t\u002F**\n+\t * Decodes a JWT string into a PHP object.\n+\t *\n+\t * @param string        $jwt            The JWT\n+\t * @param string|array  $key            The key, or map of keys.\n+\t *                                      If the algorithm used is asymmetric, this is the public key\n+\t * @param array         $allowed_algs   List of supported verification algorithms\n+\t *                                      Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\n+\t *\n+\t * @return object The JWT's payload as a PHP object\n+\t *\n+\t * @throws UnexpectedValueException     Provided JWT was invalid\n+\t * @throws SignatureInvalidException    Provided JWT was invalid because the signature verification failed\n+\t * @throws BeforeValidException         Provided JWT is trying to be used before it's eligible as defined by 'nbf'\n+\t * @throws BeforeValidException         Provided JWT is trying to be used before it's been created as defined by 'iat'\n+\t * @throws ExpiredException             Provided JWT has since expired, as defined by the 'exp' claim\n+\t *\n+\t * @uses jsonDecode\n+\t * @uses urlsafeB64Decode\n+\t *\u002F\n+\tpublic static function decode( $jwt, $key, array $allowed_algs = array() ) {\n+\t\t$timestamp = is_null( static::$timestamp ) ? time() : static::$timestamp;\n+\n+\t\tif ( empty( $key ) ) {\n+\t\t\tthrow new InvalidArgumentException( 'Key may not be empty' );\n+\t\t}\n+\t\t$tks = explode( '.', $jwt );\n+\t\tif ( count( $tks ) != 3 ) {\n+\t\t\tthrow new UnexpectedValueException( 'Wrong number of segments' );\n+\t\t}\n+\t\tlist($headb64, $bodyb64, $cryptob64) = $tks;\n+\t\tif ( null === ( $header = static::jsonDecode( static::urlsafeB64Decode( $headb64 ) ) ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Invalid header encoding' );\n+\t\t}\n+\t\tif ( null === $payload = static::jsonDecode( static::urlsafeB64Decode( $bodyb64 ) ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Invalid claims encoding' );\n+\t\t}\n+\t\tif ( false === ( $sig = static::urlsafeB64Decode( $cryptob64 ) ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Invalid signature encoding' );\n+\t\t}\n+\t\tif ( empty( $header->alg ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Empty algorithm' );\n+\t\t}\n+\t\tif ( empty( static::$supported_algs[ $header->alg ] ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Algorithm not supported' );\n+\t\t}\n+\t\tif ( ! in_array( $header->alg, $allowed_algs ) ) {\n+\t\t\tthrow new UnexpectedValueException( 'Algorithm not allowed' );\n+\t\t}\n+\t\tif ( is_array( $key ) || $key instanceof \\ArrayAccess ) {\n+\t\t\tif ( isset( $header->kid ) ) {\n+\t\t\t\tif ( ! isset( $key[ $header->kid ] ) ) {\n+\t\t\t\t\tthrow new UnexpectedValueException( '\"kid\" invalid, unable to lookup correct key' );\n+\t\t\t\t}\n+\t\t\t\t$key = $key[ $header->kid ];\n+\t\t\t} else {\n+\t\t\t\tthrow new UnexpectedValueException( '\"kid\" empty, unable to lookup correct key' );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Check the signature\n+\t\tif ( ! static::verify( \"$headb64.$bodyb64\", $sig, $key, $header->alg ) ) {\n+\t\t\tthrow new SignatureInvalidException( 'Signature verification failed' );\n+\t\t}\n+\n+\t\t\u002F\u002F Check if the nbf if it is defined. This is the time that the\n+\t\t\u002F\u002F token can actually be used. If it's not yet that time, abort.\n+\t\tif ( isset( $payload->nbf ) && $payload->nbf > ( $timestamp + static::$leeway ) ) {\n+\t\t\tthrow new BeforeValidException(\n+\t\t\t\t'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->nbf )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Check that this token has been created before 'now'. This prevents\n+\t\t\u002F\u002F using tokens that have been created for later use (and haven't\n+\t\t\u002F\u002F correctly used the nbf claim).\n+\t\tif ( isset( $payload->iat ) && $payload->iat > ( $timestamp + static::$leeway ) ) {\n+\t\t\tthrow new BeforeValidException(\n+\t\t\t\t'Cannot handle token prior to ' . date( DateTime::ISO8601, $payload->iat )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Check if this token has expired.\n+\t\tif ( isset( $payload->exp ) && ( $timestamp - static::$leeway ) >= $payload->exp ) {\n+\t\t\tthrow new ExpiredException( 'Expired token' );\n+\t\t}\n+\n+\t\treturn $payload;\n+\t}\n+\n+\t\u002F**\n+\t * Converts and signs a PHP object or array into a JWT string.\n+\t *\n+\t * @param object|array  $payload    PHP object or array\n+\t * @param string        $key        The secret key.\n+\t *                                  If the algorithm used is asymmetric, this is the private key\n+\t * @param string        $alg        The signing algorithm.\n+\t *                                  Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\n+\t * @param mixed         $keyId\n+\t * @param array         $head       An array with header elements to attach\n+\t *\n+\t * @return string A signed JWT\n+\t *\n+\t * @uses jsonEncode\n+\t * @uses urlsafeB64Encode\n+\t *\u002F\n+\tpublic static function encode( $payload, $key, $alg = 'HS256', $keyId = null, $head = null ) {\n+\t\t$header = array(\n+\t\t\t'typ' => 'JWT',\n+\t\t\t'alg' => $alg,\n+\t\t);\n+\t\tif ( $keyId !== null ) {\n+\t\t\t$header['kid'] = $keyId;\n+\t\t}\n+\t\tif ( isset( $head ) && is_array( $head ) ) {\n+\t\t\t$header = array_merge( $head, $header );\n+\t\t}\n+\t\t$segments      = array();\n+\t\t$segments[]    = static::urlsafeB64Encode( static::jsonEncode( $header ) );\n+\t\t$segments[]    = static::urlsafeB64Encode( static::jsonEncode( $payload ) );\n+\t\t$signing_input = implode( '.', $segments );\n+\n+\t\t$signature  = static::sign( $signing_input, $key, $alg );\n+\t\t$segments[] = static::urlsafeB64Encode( $signature );\n+\n+\t\treturn implode( '.', $segments );\n+\t}\n+\n+\t\u002F**\n+\t * Sign a string with a given key and algorithm.\n+\t *\n+\t * @param string            $msg    The message to sign\n+\t * @param string|resource   $key    The secret key\n+\t * @param string            $alg    The signing algorithm.\n+\t *                                  Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256'\n+\t *\n+\t * @return string An encrypted message\n+\t *\n+\t * @throws DomainException Unsupported algorithm was specified\n+\t *\u002F\n+\tpublic static function sign( $msg, $key, $alg = 'HS256' ) {\n+\t\tif ( empty( static::$supported_algs[ $alg ] ) ) {\n+\t\t\tthrow new DomainException( 'Algorithm not supported' );\n+\t\t}\n+\t\tlist($function, $algorithm) = static::$supported_algs[ $alg ];\n+\t\tswitch ( $function ) {\n+\t\t\tcase 'hash_hmac':\n+\t\t\t\treturn hash_hmac( $algorithm, $msg, $key, true );\n+\t\t\tcase 'openssl':\n+\t\t\t\t$signature = '';\n+\t\t\t\t$success   = openssl_sign( $msg, $signature, $key, $algorithm );\n+\t\t\t\tif ( ! $success ) {\n+\t\t\t\t\tthrow new DomainException( 'OpenSSL unable to sign data' );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn $signature;\n+\t\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Verify a signature with the message, key and method. Not all methods\n+\t * are symmetric, so we must have a separate verify and sign method.\n+\t *\n+\t * @param string            $msg        The original message (header and body)\n+\t * @param string            $signature  The original signature\n+\t * @param string|resource   $key        For HS*, a string key works. for RS*, must be a resource of an openssl public key\n+\t * @param string            $alg        The algorithm\n+\t *\n+\t * @return bool\n+\t *\n+\t * @throws DomainException Invalid Algorithm or OpenSSL failure\n+\t *\u002F\n+\tprivate static function verify( $msg, $signature, $key, $alg ) {\n+\t\tif ( empty( static::$supported_algs[ $alg ] ) ) {\n+\t\t\tthrow new DomainException( 'Algorithm not supported' );\n+\t\t}\n+\n+\t\tlist($function, $algorithm) = static::$supported_algs[ $alg ];\n+\t\tswitch ( $function ) {\n+\t\t\tcase 'openssl':\n+\t\t\t\t$success = openssl_verify( $msg, $signature, $key, $algorithm );\n+\t\t\t\tif ( $success === 1 ) {\n+\t\t\t\t\treturn true;\n+\t\t\t\t} elseif ( $success === 0 ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F returns 1 on success, 0 on failure, -1 on error.\n+\t\t\t\tthrow new DomainException(\n+\t\t\t\t\t'OpenSSL error: ' . openssl_error_string()\n+\t\t\t\t);\n+\t\t\tcase 'hash_hmac':\n+\t\t\tdefault:\n+\t\t\t\t$hash = hash_hmac( $algorithm, $msg, $key, true );\n+\t\t\t\tif ( function_exists( 'hash_equals' ) ) {\n+\t\t\t\t\treturn hash_equals( $signature, $hash );\n+\t\t\t\t}\n+\t\t\t\t$len = min( static::safeStrlen( $signature ), static::safeStrlen( $hash ) );\n+\n+\t\t\t\t$status = 0;\n+\t\t\t\tfor ( $i = 0; $i \u003C $len; $i++ ) {\n+\t\t\t\t\t$status |= ( ord( $signature[ $i ] ) ^ ord( $hash[ $i ] ) );\n+\t\t\t\t}\n+\t\t\t\t$status |= ( static::safeStrlen( $signature ) ^ static::safeStrlen( $hash ) );\n+\n+\t\t\t\treturn ( $status === 0 );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Decode a JSON string into a PHP object.\n+\t *\n+\t * @param string $input JSON string\n+\t *\n+\t * @return object Object representation of JSON string\n+\t *\n+\t * @throws DomainException Provided string was invalid JSON\n+\t *\u002F\n+\tpublic static function jsonDecode( $input ) {\n+\t\tif ( version_compare( PHP_VERSION, '5.4.0', '>=' ) && ! ( defined( 'JSON_C_VERSION' ) && PHP_INT_SIZE > 4 ) ) {\n+\t\t\t\u002F** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you\n+\t\t\t * to specify that large ints (like Steam Transaction IDs) should be treated as\n+\t\t\t * strings, rather than the PHP default behaviour of converting them to floats.\n+\t\t\t *\u002F\n+\t\t\t$obj = json_decode( $input, false, 512, JSON_BIGINT_AS_STRING );\n+\t\t} else {\n+\t\t\t\u002F** Not all servers will support that, however, so for older versions we must\n+\t\t\t * manually detect large ints in the JSON string and quote them (thus converting\n+\t\t\t *them to strings) before decoding, hence the preg_replace() call.\n+\t\t\t *\u002F\n+\t\t\t$max_int_length       = strlen( (string) PHP_INT_MAX ) - 1;\n+\t\t\t$json_without_bigints = preg_replace( '\u002F:\\s*(-?\\d{' . $max_int_length . ',})\u002F', ': \"$1\"', $input );\n+\t\t\t$obj                  = json_decode( $json_without_bigints );\n+\t\t}\n+\n+\t\tif ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {\n+\t\t\tstatic::handleJsonError( $errno );\n+\t\t} elseif ( $obj === null && $input !== 'null' ) {\n+\t\t\tthrow new DomainException( 'Null result with non-null input' );\n+\t\t}\n+\t\treturn $obj;\n+\t}\n+\n+\t\u002F**\n+\t * Encode a PHP object into a JSON string.\n+\t *\n+\t * @param object|array $input A PHP object or array\n+\t *\n+\t * @return string JSON representation of the PHP object or array\n+\t *\n+\t * @throws DomainException Provided object could not be encoded to valid JSON\n+\t *\u002F\n+\tpublic static function jsonEncode( $input ) {\n+\t\t$json = json_encode( $input );\n+\t\tif ( function_exists( 'json_last_error' ) && $errno = json_last_error() ) {\n+\t\t\tstatic::handleJsonError( $errno );\n+\t\t} elseif ( $json === 'null' && $input !== null ) {\n+\t\t\tthrow new DomainException( 'Null result with non-null input' );\n+\t\t}\n+\t\treturn $json;\n+\t}\n+\n+\t\u002F**\n+\t * Decode a string with URL-safe Base64.\n+\t *\n+\t * @param string $input A Base64 encoded string\n+\t *\n+\t * @return string A decoded string\n+\t *\u002F\n+\tpublic static function urlsafeB64Decode( $input ) {\n+\t\t$remainder = strlen( $input ) % 4;\n+\t\tif ( $remainder ) {\n+\t\t\t$padlen = 4 - $remainder;\n+\t\t\t$input .= str_repeat( '=', $padlen );\n+\t\t}\n+\t\treturn base64_decode( strtr( $input, '-_', '+\u002F' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Encode a string with URL-safe Base64.\n+\t *\n+\t * @param string $input The string you want encoded\n+\t *\n+\t * @return string The base64 encode of what you passed in\n+\t *\u002F\n+\tpublic static function urlsafeB64Encode( $input ) {\n+\t\treturn str_replace( '=', '', strtr( base64_encode( $input ), '+\u002F', '-_' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Helper method to create a JSON error.\n+\t *\n+\t * @param int $errno An error number from json_last_error()\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprivate static function handleJsonError( $errno ) {\n+\t\t$messages = array(\n+\t\t\tJSON_ERROR_DEPTH          => 'Maximum stack depth exceeded',\n+\t\t\tJSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',\n+\t\t\tJSON_ERROR_CTRL_CHAR      => 'Unexpected control character found',\n+\t\t\tJSON_ERROR_SYNTAX         => 'Syntax error, malformed JSON',\n+\t\t\tJSON_ERROR_UTF8           => 'Malformed UTF-8 characters', \u002F\u002FPHP >= 5.3.3\n+\t\t);\n+\t\tthrow new DomainException(\n+\t\t\tisset( $messages[ $errno ] )\n+\t\t\t? $messages[ $errno ]\n+\t\t\t: 'Unknown JSON error: ' . $errno\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get the number of bytes in cryptographic strings.\n+\t *\n+\t * @param string\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprivate static function safeStrlen( $str ) {\n+\t\tif ( function_exists( 'mb_strlen' ) ) {\n+\t\t\treturn mb_strlen( $str, '8bit' );\n+\t\t}\n+\t\treturn strlen( $str );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FSignatureInvalidException.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FSignatureInvalidException.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FSignatureInvalidException.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Fincludes\u002Fphp-jwt\u002FSignatureInvalidException.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-\u003C?php\r\n-namespace LP\\Firebase\\JWT;\r\n-\r\n-class SignatureInvalidException extends \\UnexpectedValueException {\r\n-\r\n-\r\n-}\r\n+\u003C?php\n+namespace LP\\Firebase\\JWT;\n+\n+class SignatureInvalidException extends \\UnexpectedValueException {\n+\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fclass-rest-api.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Initialize this version of the REST API.\r\n- *\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- * @package LP\u002FJWT\u002FRestApi\r\n- *\u002F\r\n-class LP_Jwt_RestApi {\r\n-\r\n-\tprotected static $instance = null;\r\n-\r\n-\tprotected $controllers = array();\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'rest_api_init', array( $this, 'register_rest_routes' ), 10 );\r\n-\t}\r\n-\r\n-\tpublic function register_rest_routes() {\r\n-\t\tforeach ( $this->get_rest_namespaces() as $namespace => $controllers ) {\r\n-\t\t\tforeach ( $controllers as $controller_name => $controller_class ) {\r\n-\t\t\t\t$this->controllers[ $namespace ][ $controller_name ] = new $controller_class();\r\n-\t\t\t\t$this->controllers[ $namespace ][ $controller_name ]->register_routes();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tprotected function get_rest_namespaces() {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'lp_rest_api_get_rest_namespaces',\r\n-\t\t\tarray(\r\n-\t\t\t\t'learnpress\u002Fv1' => $this->get_v1_controllers(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tprotected function get_v1_controllers() {\r\n-\t\treturn array(\r\n-\t\t\t'courses'         => 'LP_Jwt_Courses_V1_Controller',\r\n-\t\t\t'lessons'         => 'LP_Jwt_Lessons_V1_Controller',\r\n-\t\t\t'quiz'            => 'LP_Jwt_Quiz_V1_Controller',\r\n-\t\t\t'questions'       => 'LP_Jwt_Questions_V1_Controller',\r\n-\t\t\t'users'           => 'LP_Jwt_Users_V1_Controller',\r\n-\t\t\t'course_category' => 'LP_Jwt_Course_Category_V1_Controller',\r\n-\t\t\t'sections'        => 'LP_Jwt_Sections_V1_Controller',\r\n-\t\t\t'section-items'   => 'LP_Jwt_Section_Items_V1_Controller',\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic static function get_path() {\r\n-\t\treturn dirname( __DIR__ );\r\n-\t}\r\n-\r\n-\tfinal public static function instance() {\r\n-\t\tif ( null === static::$instance ) {\r\n-\t\t\tstatic::$instance = new static();\r\n-\t\t}\r\n-\t\treturn static::$instance;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Initialize this version of the REST API.\n+ *\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ * @package LP\u002FJWT\u002FRestApi\n+ *\u002F\n+class LP_Jwt_RestApi {\n+\n+\tprotected static $instance = null;\n+\n+\tprotected $controllers = array();\n+\n+\tpublic function init() {\n+\t\tadd_action( 'rest_api_init', array( $this, 'register_rest_routes' ), 10 );\n+\t}\n+\n+\tpublic function register_rest_routes() {\n+\t\tforeach ( $this->get_rest_namespaces() as $namespace => $controllers ) {\n+\t\t\tforeach ( $controllers as $controller_name => $controller_class ) {\n+\t\t\t\t$this->controllers[ $namespace ][ $controller_name ] = new $controller_class();\n+\t\t\t\t$this->controllers[ $namespace ][ $controller_name ]->register_routes();\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tprotected function get_rest_namespaces() {\n+\t\treturn apply_filters(\n+\t\t\t'lp_rest_api_get_rest_namespaces',\n+\t\t\tarray(\n+\t\t\t\t'learnpress\u002Fv1' => $this->get_v1_controllers(),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tprotected function get_v1_controllers() {\n+\t\treturn array(\n+\t\t\t'courses'         => 'LP_Jwt_Courses_V1_Controller',\n+\t\t\t'lessons'         => 'LP_Jwt_Lessons_V1_Controller',\n+\t\t\t'quiz'            => 'LP_Jwt_Quiz_V1_Controller',\n+\t\t\t'questions'       => 'LP_Jwt_Questions_V1_Controller',\n+\t\t\t'users'           => 'LP_Jwt_Users_V1_Controller',\n+\t\t\t'course_category' => 'LP_Jwt_Course_Category_V1_Controller',\n+\t\t\t'sections'        => 'LP_Jwt_Sections_V1_Controller',\n+\t\t\t'section-items'   => 'LP_Jwt_Section_Items_V1_Controller',\n+\t\t);\n+\t}\n+\n+\tpublic static function get_path() {\n+\t\treturn dirname( __DIR__ );\n+\t}\n+\n+\tfinal public static function instance() {\n+\t\tif ( null === static::$instance ) {\n+\t\t\tstatic::$instance = new static();\n+\t\t}\n+\t\treturn static::$instance;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Flp-rest-function.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Check permissions of posts on REST API.\r\n- *\r\n- * @param [type]  $post_type Post type.\r\n- * @param string  $context Request context.\r\n- * @param integer $object_id Post ID.\r\n- * @return void\r\n- *\u002F\r\n-function lp_rest_check_post_permissions( $post_type, $context = 'read', $object_id = 0 ) {\r\n-\t$contexts = array(\r\n-\t\t'read'   => 'read_private_posts',\r\n-\t\t'create' => 'publish_posts',\r\n-\t\t'edit'   => 'edit_post',\r\n-\t\t'delete' => 'delete_post',\r\n-\t\t'batch'  => 'edit_others_posts',\r\n-\t);\r\n-\r\n-\tif ( 'revision' === $post_type ) {\r\n-\t\t$permission = false;\r\n-\t} else {\r\n-\t\t$cap              = $contexts[ $context ];\r\n-\t\t$post_type_object = get_post_type_object( $post_type );\r\n-\t\t$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'lp_rest_check_permissions', $permission, $context, $object_id, $post_type );\r\n-}\r\n-\r\n-function lp_jwt_prepare_date_response( $date_gmt, $date = null ) {\r\n-\t\u002F\u002F Use the date if passed.\r\n-\tif ( isset( $date ) ) {\r\n-\t\treturn mysql_to_rfc3339( $date );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Return null if $date_gmt is empty\u002Fzeros.\r\n-\tif ( '0000-00-00 00:00:00' === $date_gmt ) {\r\n-\t\treturn null;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Return the formatted datetime.\r\n-\treturn mysql_to_rfc3339( $date_gmt );\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Check permissions of posts on REST API.\n+ *\n+ * @param [type]  $post_type Post type.\n+ * @param string  $context Request context.\n+ * @param integer $object_id Post ID.\n+ * @return void\n+ *\u002F\n+function lp_rest_check_post_permissions( $post_type, $context = 'read', $object_id = 0 ) {\n+\t$contexts = array(\n+\t\t'read'   => 'read_private_posts',\n+\t\t'create' => 'publish_posts',\n+\t\t'edit'   => 'edit_post',\n+\t\t'delete' => 'delete_post',\n+\t\t'batch'  => 'edit_others_posts',\n+\t);\n+\n+\tif ( 'revision' === $post_type ) {\n+\t\t$permission = false;\n+\t} else {\n+\t\t$cap              = $contexts[ $context ];\n+\t\t$post_type_object = get_post_type_object( $post_type );\n+\t\t$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );\n+\t}\n+\n+\treturn apply_filters( 'lp_rest_check_permissions', $permission, $context, $object_id, $post_type );\n+}\n+\n+function lp_jwt_prepare_date_response( $date_gmt, $date = null ) {\n+\t\u002F\u002F Use the date if passed.\n+\tif ( isset( $date ) ) {\n+\t\treturn mysql_to_rfc3339( $date );\n+\t}\n+\n+\t\u002F\u002F Return null if $date_gmt is empty\u002Fzeros.\n+\tif ( '0000-00-00 00:00:00' === $date_gmt ) {\n+\t\treturn null;\n+\t}\n+\n+\t\u002F\u002F Return the formatted datetime.\n+\treturn mysql_to_rfc3339( $date_gmt );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-abstract class LP_REST_Jwt_Controller extends WP_REST_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = '';\r\n-\r\n-\tprivate $_fields = null;\r\n-\r\n-\tprivate $_request = null;\r\n-\r\n-\tprotected function add_additional_fields_schema( $schema ) {\r\n-\t\tif ( empty( $schema['title'] ) ) {\r\n-\t\t\treturn $schema;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Can't use $this->get_object_type otherwise we cause an inf loop.\r\n-\t\t *\u002F\r\n-\t\t$object_type = $schema['title'];\r\n-\r\n-\t\t$additional_fields = $this->get_additional_fields( $object_type );\r\n-\r\n-\t\tforeach ( $additional_fields as $field_name => $field_options ) {\r\n-\t\t\tif ( ! $field_options['schema'] ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$schema['properties'][ $field_name ] = $field_options['schema'];\r\n-\t\t}\r\n-\r\n-\t\t$schema['properties'] = apply_filters( 'lp_jwt_rest_' . $object_type . '_schema', $schema['properties'] );\r\n-\r\n-\t\treturn $schema;\r\n-\t}\r\n-}\r\n+\u003C?php\n+abstract class LP_REST_Jwt_Controller extends WP_REST_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = '';\n+\n+\tprivate $_fields = null;\n+\n+\tprivate $_request = null;\n+\n+\tprotected function add_additional_fields_schema( $schema ) {\n+\t\tif ( empty( $schema['title'] ) ) {\n+\t\t\treturn $schema;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Can't use $this->get_object_type otherwise we cause an inf loop.\n+\t\t *\u002F\n+\t\t$object_type = $schema['title'];\n+\n+\t\t$additional_fields = $this->get_additional_fields( $object_type );\n+\n+\t\tforeach ( $additional_fields as $field_name => $field_options ) {\n+\t\t\tif ( ! $field_options['schema'] ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$schema['properties'][ $field_name ] = $field_options['schema'];\n+\t\t}\n+\n+\t\t$schema['properties'] = apply_filters( 'lp_jwt_rest_' . $object_type . '_schema', $schema['properties'] );\n+\n+\t\treturn $schema;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-course-category-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-class LP_Jwt_Course_Category_V1_Controller extends WP_REST_Terms_Controller {\r\n-\r\n-\tprotected $taxonomy = 'course_category';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct( $this->taxonomy );\r\n-\r\n-\t\t$this->namespace = 'learnpress\u002Fv1';\r\n-\t\t$this->rest_base = 'course_category';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register routes for courses.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Jwt_Course_Category_V1_Controller extends WP_REST_Terms_Controller {\n+\n+\tprotected $taxonomy = 'course_category';\n+\n+\tpublic function __construct() {\n+\t\tparent::__construct( $this->taxonomy );\n+\n+\t\t$this->namespace = 'learnpress\u002Fv1';\n+\t\t$this->rest_base = 'course_category';\n+\t}\n+\n+\t\u002F**\n+\t * Register routes for courses.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\tparent::register_routes();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1703 +1,1703 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-class LP_Jwt_Courses_V1_Controller extends LP_REST_Jwt_Posts_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'courses';\r\n-\r\n-\tprotected $post_type = LP_COURSE_CPT;\r\n-\r\n-\tprotected $hierarchical = true;\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_courses' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'create_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'create_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'view',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fenroll',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'enroll_course' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_course_need_login_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'edit',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'finish_course' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'edit',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fretake',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'retake_course' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'edit',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fverify-receipt',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'verify_receipt' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'context'      => $this->get_context_param(\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'default' => 'edit',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'receipt-data' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Receipt data.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_items_permissions_check( $request ) {\r\n-\t\t$post_type = get_post_type_object( $this->post_type );\r\n-\r\n-\t\tif ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_forbidden_context',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to edit posts in this post type.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_course_need_login_check( $request ) {\r\n-\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_forbidden_context',\r\n-\t\t\t\t__( 'Please login to continue' ),\r\n-\t\t\t\tarray( 'status' => 401 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if a course can be read.\r\n-\t *\r\n-\t * Correctly handles courses with the inherit status.\r\n-\t *\r\n-\t * @return bool Whether the post can be read.\r\n-\t * *@author Nhamdv\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function check_read_permission( $post_id ) {\r\n-\t\tif ( empty( absint( $post_id ) ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $post_id );\r\n-\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Is the post readable?\r\n-\t\tif ( 'publish' === $post->post_status || current_user_can( 'read_post', $post->ID ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t$post_status_obj = get_post_status_object( $post->post_status );\r\n-\t\tif ( $post_status_obj && $post_status_obj->public ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Can we read the parent if we're inheriting?\r\n-\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\r\n-\t\t\t$parent = get_post( $post->post_parent );\r\n-\r\n-\t\t\tif ( $parent ) {\r\n-\t\t\t\treturn $this->check_read_permission( $parent );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F*\r\n-\t\t * If there isn't a parent, but the status is set to inherit, assume\r\n-\t\t * it's published (as per get_post_status()).\r\n-\t\t *\u002F\r\n-\t\tif ( 'inherit' === $post->post_status ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tprotected function get_object( $course = 0 ) {\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( false === $course && isset( $post, $post->ID ) && LP_COURSE_CPT === get_post_type( $post->ID ) ) {\r\n-\t\t\t$id = absint( $post->ID );\r\n-\t\t} elseif ( is_numeric( $course ) ) {\r\n-\t\t\t$id = $course;\r\n-\t\t} elseif ( $course instanceof LP_Course ) {\r\n-\t\t\t$id = $course->get_id();\r\n-\t\t} elseif ( ! empty( $course->ID ) ) {\r\n-\t\t\t$id = $course->ID;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_course( $id );\r\n-\t}\r\n-\r\n-\tpublic function verify_receipt( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\t$receipt  = ! empty( $request['receipt-data'] ) ? $request['receipt-data'] : '';\r\n-\t\t$is_ios   = ! empty( $request['is-ios'] ) ? true : false;\r\n-\r\n-\t\t\u002F\u002F Get request header.\r\n-\t\t$platform = ! empty( $request->get_header( 'x-platform' ) ) ? sanitize_text_field( $request->get_header( 'x-platform' ) ) : '';\r\n-\t\t$password = function_exists( 'learnpress_mobile_iap_settings' ) ? learnpress_mobile_iap_settings( $platform )['apple_token_secret'] : LP_Settings::instance()->get( 'in_app_purchase_apple_shared_secret', '' );\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $receipt ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Receipt data is empty.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $is_ios ) {\r\n-\t\t\t\t$course_id = ! empty( $request['course-id'] ) ? absint( $request['course-id'] ) : 0;\r\n-\r\n-\t\t\t\tif ( empty( $password ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'The secret key is empty.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$url = LP_Settings::instance()->get( 'in_app_purchase_apple_sandbox' ) === 'yes' ? 'https:\u002F\u002Fsandbox.itunes.apple.com\u002FverifyReceipt' : 'https:\u002F\u002Fbuy.itunes.apple.com\u002FverifyReceipt';\r\n-\r\n-\t\t\t\t$verify = wp_remote_post(\r\n-\t\t\t\t\t$url,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'method'  => 'POST',\r\n-\t\t\t\t\t\t'timeout' => 60,\r\n-\t\t\t\t\t\t'body'    => wp_json_encode(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'receipt-data' => $receipt,\r\n-\t\t\t\t\t\t\t\t'password'     => $password,\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( is_wp_error( $verify ) ) {\r\n-\t\t\t\t\tthrow new Exception( $verify->get_error_message() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$body = json_decode( wp_remote_retrieve_body( $verify ) );\r\n-\r\n-\t\t\t\tif ( $body->status !== 0 ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Cannot verify the receipt', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$latest_receipt_info = ! empty( $body->latest_receipt_info ) ? $body->latest_receipt_info : array();\r\n-\r\n-\t\t\t\tif ( empty( $latest_receipt_info ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course_ids = array_map(\r\n-\t\t\t\t\tfunction ( $receipt_id ) {\r\n-\t\t\t\t\t\treturn absint( $receipt_id->product_id );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t$latest_receipt_info\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( ! in_array( $course_id, $course_ids ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$receipt        = json_decode( $receipt, true );\r\n-\t\t\t\t$package_name   = $receipt['packageName'] ?? '';\r\n-\t\t\t\t$course_id      = ! empty( $receipt['productId'] ) ? absint( $receipt['productId'] ) : 0;\r\n-\t\t\t\t$purchase_token = $receipt['purchaseToken'] ?? '';\r\n-\r\n-\t\t\t\tif ( ! function_exists( 'learnpress_in_app_purchase_get_access_token' ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Cannot verify the receipt', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$access_token = function_exists( 'learnpress_mobile_iap_settings' ) ? learnpress_in_app_purchase_get_access_token( $platform ) : learnpress_in_app_purchase_get_access_token();\r\n-\r\n-\t\t\t\t$verify = wp_remote_get(\r\n-\t\t\t\t\t'https:\u002F\u002Fandroidpublisher.googleapis.com\u002Fandroidpublisher\u002Fv3\u002Fapplications\u002F' . $package_name . '\u002Fpurchases\u002Fproducts\u002F' . $course_id . '\u002Ftokens\u002F' . $purchase_token,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'headers' => array(\r\n-\t\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\r\n-\t\t\t\t\t\t\t'Authorization' => 'Bearer ' . $access_token,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'timeout' => 60,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$body = json_decode( wp_remote_retrieve_body( $verify ) );\r\n-\r\n-\t\t\t\tif ( isset( $body->error->message ) ) {\r\n-\t\t\t\t\tthrow new Exception( $body->error->message );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\t\t$cart     = LearnPress::instance()->cart;\r\n-\t\t\t$checkout = LP_Checkout::instance();\r\n-\r\n-\t\t\tif ( ! learn_press_enable_cart() ) {\r\n-\t\t\t\t\u002F\u002F $order_awaiting_payment = LearnPress::instance()->session->get( 'order_awaiting_payment' );\r\n-\t\t\t\t$cart->empty_cart();\r\n-\t\t\t\t\u002F\u002F LearnPress::instance()->session->set( 'order_awaiting_payment', $order_awaiting_payment );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cart_id = $cart->add_to_cart( $course_id, 1, array() );\r\n-\r\n-\t\t\tif ( ! $cart_id ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t$order_id = $checkout->create_order();\r\n-\t\t\t\t$order    = new LP_Order( $order_id );\r\n-\t\t\t\t$order->payment_complete();\r\n-\t\t\t\t$cart->empty_cart();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = esc_html__( 'Verify Receipt Data successfully.', 'learnpress' );\r\n-\t\t} catch ( \\Throwable $th ) {\r\n-\t\t\terror_log( $th->getMessage() );\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert params App to query courses.\r\n-\t *\r\n-\t * @param $params\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic function convert_params_query_courses( $params = [] ) {\r\n-\t\t$params['limit'] = $params['per_page'] ?? 10;\r\n-\r\n-\t\t$params['paged'] = $params['page'] ?? 1;\r\n-\r\n-\t\tif ( ! empty( $params['popular'] ) ) {\r\n-\t\t\t$params['order_by'] = 'popular';\r\n-\t\t} else {\r\n-\t\t\t$params['order_by'] = $params['orderby'] ?? 'menu_order';\r\n-\t\t\tswitch ( $params['order_by'] ) {\r\n-\t\t\t\tcase 'date':\r\n-\t\t\t\t\t$params['order_by'] = 'post_date';\r\n-\t\t\t\t\t$params['order']    = $params['order'] ?? 'DESC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'title':\r\n-\t\t\t\t\t$params['order_by'] = 'post_title';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\t\tif ( ! empty( $params['order'] ) && 'asc' === $params['order'] ) {\r\n-\t\t\t\t\t\t$params['order_by'] = 'price_low';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$params['order'] = $params['order'] ?? 'DESC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $params['search'] ) ) {\r\n-\t\t\t$params['c_search'] = trim( $params['search'] );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $params['user'] ) ) {\r\n-\t\t\t$params['c_author'] = $params['user'];\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $params['on_sale'] ) ) {\r\n-\t\t\t$params['sort_by'] = 'on_sale';\r\n-\t\t}\r\n-\r\n-\t\t$params['return_type'] = 'json';\r\n-\t\t\u002F\u002F$params['c_only_fields'] = empty( $params['c_only_fields'] ) ? '' : explode( ',', $params['c_only_fields'] );\r\n-\t\t$params['term_id'] = empty( $params['category'] ) || 'all' === $params['category'] ? '' : implode( ',', $params['category'] );\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response|LP_REST_Response\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_courses( WP_REST_Request $request ) {\r\n-\t\t$res         = new LP_REST_Response();\r\n-\t\t$courses     = [];\r\n-\t\t$total       = 0;\r\n-\t\t$total_pages = 0;\r\n-\t\ttry {\r\n-\t\t\t$filter = new LP_Course_Filter();\r\n-\t\t\t$params = $request->get_params();\r\n-\t\t\t$params = $this->convert_params_query_courses( $params );\r\n-\r\n-\t\t\tCourses::handle_params_for_query_courses( $filter, $params );\r\n-\t\t\t$key_cache             = 'api\u002F' . md5( json_encode( $params ) );\r\n-\t\t\t$key_cache_total       = $key_cache . '_total';\r\n-\t\t\t$key_cache_total_pages = $key_cache . '_total_pages';\r\n-\t\t\t$lp_courses_cache      = new LP_Courses_Cache( true );\r\n-\r\n-\t\t\tif ( ! empty( $params['learned'] ) ) {\r\n-\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t\t\u002F\u002F For tst user hard code\r\n-\t\t\t\t\u002F\u002F $user_id = ! empty( $params['user_id'] ) ? $params['user_id'] : get_current_user_id();\r\n-\t\t\t\tif ( $user_id \u003C= 0 ) {\r\n-\t\t\t\t\t$user_id = - 1;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F Get courses that user has learned\r\n-\t\t\t\t\u002F*$lp_user_courses                         = LP_User_Items_DB::getInstance();\r\n-\t\t\t\t$filter_user_course                      = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter_user_course->only_fields         = array( 'DISTINCT(item_id) AS ID' );\r\n-\t\t\t\t$filter_user_course->user_id             = $user_id;\r\n-\t\t\t\t$filter_user_course->item_type           = LP_COURSE_CPT;\r\n-\t\t\t\t$filter_user_course->return_string_query = true;\r\n-\t\t\t\t$user_courses_query                      = $lp_user_courses->get_user_items( $filter_user_course );\r\n-\t\t\t\t$params                                  = $lp_user_courses->get_user_items( $filter_user_course );\r\n-\t\t\t\t$filter->where[] = \"AND p.ID IN ({$user_courses_query})\";*\u002F\r\n-\r\n-\t\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t\t\t$filter->fields[] = 'ui.user_item_id, ui.user_id, ui.item_id, ui.start_time, ui.end_time, ui.item_type, ui.graduation, ui.status';\r\n-\t\t\t\t$filter->join[]   = \"LEFT JOIN $lp_user_items_db->tb_lp_user_items AS ui ON p.ID = ui.item_id\";\r\n-\t\t\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND ui.user_id = %s', $user_id );\r\n-\t\t\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\r\n-\t\t\t\tif ( ! empty( $params['course_filter'] ) ) {\r\n-\t\t\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare( 'AND ui.graduation = %s', $params['course_filter'] );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Check cache with case not learned\r\n-\t\t\t\t$courses_cache = $lp_courses_cache->get_cache( $key_cache );\r\n-\t\t\t\tif ( $courses_cache !== false ) {\r\n-\t\t\t\t\t$courses     = json_decode( $courses_cache, true );\r\n-\t\t\t\t\t$total       = (int) $lp_courses_cache->get_cache( $key_cache_total );\r\n-\t\t\t\t\t$total_pages = (int) $lp_courses_cache->get_cache( $key_cache_total_pages );\r\n-\r\n-\t\t\t\t\t$response = rest_ensure_response( $courses );\r\n-\t\t\t\t\t$response->header( 'X-WP-Total', $total );\r\n-\t\t\t\t\t$response->header( 'X-WP-TotalPages', $total_pages );\r\n-\r\n-\t\t\t\t\treturn $response;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$rs_courses  = Courses::get_courses( $filter, $total );\r\n-\t\t\t$courses     = $this->prepare_struct_courses_response( $rs_courses, $params );\r\n-\t\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$res->message = $e->getMessage();\r\n-\r\n-\t\t\treturn $res;\r\n-\t\t}\r\n-\r\n-\t\t$response = rest_ensure_response( $courses );\r\n-\t\t$response->header( 'X-WP-Total', $total );\r\n-\t\t$response->header( 'X-WP-TotalPages', $total_pages );\r\n-\r\n-\t\t\u002F\u002F Set cache with case not learned\r\n-\t\tif ( empty( $params['learned'] ) ) {\r\n-\t\t\t$lp_courses_cache->set_cache( $key_cache, json_encode( $courses, JSON_UNESCAPED_UNICODE ) );\r\n-\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache );\r\n-\t\t\t$lp_courses_cache->set_cache( $key_cache_total, $total );\r\n-\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache_total );\r\n-\t\t\t$lp_courses_cache->set_cache( $key_cache_total_pages, $total_pages );\r\n-\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache_total_pages );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function prepare_struct_courses_response( $courses, $params ): array {\r\n-\t\t$data = [];\r\n-\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t$course = CourseModel::find( $courseObj->ID, true );\r\n-\t\t\tif ( empty( $course ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseObjPrepare             = new stdClass();\r\n-\t\t\t$courseObjPrepare->id         = (int) $courseObj->ID ?? 0;\r\n-\t\t\t$courseObjPrepare->name       = html_entity_decode( $course->get_title() );\r\n-\t\t\t$courseObjPrepare->image      = $course->get_image_url();\r\n-\t\t\t$author                       = $course->get_author_model();\r\n-\t\t\t$courseObjPrepare->instructor = ! empty( $author ) ? $this->get_author_info( $author ) : [];\r\n-\t\t\t$duration                     = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '' );\r\n-\t\t\t$duration_arr                 = explode( ' ', $duration );\r\n-\t\t\t$duration_number              = floatval( $duration_arr[0] ?? 0 );\r\n-\t\t\t$duration_type                = $duration_arr[1] ?? '';\r\n-\t\t\tif ( empty( $duration_number ) ) {\r\n-\t\t\t\t$duration_str = __( 'Lifetime', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\r\n-\t\t\t}\r\n-\t\t\t$courseObjPrepare->duration = $duration_str;\r\n-\t\t\t$course_categories          = $course->get_categories();\r\n-\t\t\t\u002F\u002F Add key id, for old app.\r\n-\t\t\tforeach ( $course_categories as $k => $category ) {\r\n-\t\t\t\t$category->id            = $category->term_id;\r\n-\t\t\t\t$course_categories[ $k ] = $category;\r\n-\t\t\t}\r\n-\t\t\t$courseObjPrepare->categories            = $course_categories;\r\n-\t\t\t$courseObjPrepare->price                 = $course->get_price();\r\n-\t\t\t$courseObjPrepare->price_rendered        = $this->render_course_price( $course );\r\n-\t\t\t$courseObjPrepare->origin_price          = $course->get_regular_price();\r\n-\t\t\t$courseObjPrepare->origin_price_rendered = html_entity_decode(\r\n-\t\t\t\tlearn_press_format_price( $courseObjPrepare->origin_price, true )\r\n-\t\t\t);\r\n-\t\t\t$courseObjPrepare->on_sale               = $course->has_sale_price();\r\n-\t\t\t$courseObjPrepare->sale_price            = (float) $course->get_sale_price();\r\n-\t\t\t$courseObjPrepare->sale_price_rendered   = html_entity_decode(\r\n-\t\t\t\tlearn_press_format_price( $course->get_sale_price(), true )\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F When release Addon Course Review v4.1.3 a long time, we will remove this code.\r\n-\t\t\t$courseObjPrepare->rating                           = $this->get_course_rating( $courseObj->ID );\r\n-\t\t\t$courseObjPrepare->meta_data                        = new stdClass();\r\n-\t\t\t$courseObjPrepare->meta_data->_lp_passing_condition = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PASSING_CONDITION );\r\n-\r\n-\t\t\t\u002F\u002F Add more fields\r\n-\t\t\tif ( ! empty( $params['learned'] ) ) {\r\n-\t\t\t\t$courseObjPrepare->course_data               = new stdClass();\r\n-\t\t\t\t$courseObjPrepare->course_data->user_item_id = $courseObj->user_item_id ?? 0;\r\n-\t\t\t\t$courseObjPrepare->course_data->user_id      = $courseObj->user_id ?? 0;\r\n-\t\t\t\t$courseObjPrepare->course_data->item_id      = $courseObj->item_id ?? 0;\r\n-\t\t\t\t$courseObjPrepare->course_data->item_type    = $courseObj->item_type ?? 0;\r\n-\t\t\t\t$courseObjPrepare->course_data->status       = $courseObj->status ?? '';\r\n-\t\t\t\t$courseObjPrepare->course_data->graduation   = $courseObj->graduation ?? '';\r\n-\t\t\t\t$courseObjPrepare->course_data->start_time   = $courseObj->start_time ?? '';\r\n-\t\t\t\t$courseObjPrepare->course_data->end_time     = $courseObj->end_time ?? '';\r\n-\r\n-\t\t\t\t$userCourse                                     = new UserCourseModel( $courseObjPrepare->course_data );\r\n-\t\t\t\t$expirationTime                                 = $userCourse->get_expiration_time();\r\n-\t\t\t\t$courseObjPrepare->course_data->expiration_time = $expirationTime ? $expirationTime->format( LP_Datetime::I18N_FORMAT ) : __( 'Lifetime', 'learnpress' );\r\n-\t\t\t\t$courseObjPrepare->course_data->result          = $userCourse->calculate_course_results();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseObjPrepare = apply_filters( 'learnPress\u002Fprepare_struct_courses_response\u002FcourseObjPrepare', $courseObjPrepare, $course );\r\n-\t\t\t$data[]           = $courseObjPrepare;\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function enroll_course( $request ) {\r\n-\t\tif ( ! class_exists( 'LP_REST_Courses_Controller' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php';\r\n-\t\t}\r\n-\r\n-\t\t$course_controller = new LP_REST_Courses_Controller();\r\n-\r\n-\t\treturn $course_controller->enroll_courses( $request );\r\n-\t}\r\n-\r\n-\tpublic function finish_course( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user      = learn_press_get_current_user();\r\n-\t\t\t$course_id = isset( $request['id'] ) ? wp_unslash( $request['id'] ) : false;\r\n-\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course ID available.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t$check  = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\t\tif ( $check['status'] !== 'success' ) {\r\n-\t\t\t\tthrow new Exception( $check['message'] ?? esc_html__( 'Cannot finish this course.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$finished = $user->finish_course( $course_id );\r\n-\r\n-\t\t\tif ( empty( $finished ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: Cannot finish this course.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = esc_html__( 'Congrats! You have completed the Course.', 'learnpress' );\r\n-\t\t} catch ( \\Throwable $th ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\tpublic function retake_course( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! class_exists( 'LP_REST_Courses_Controller' ) ) {\r\n-\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_controller = new LP_REST_Courses_Controller();\r\n-\t\t\t$response          = $course_controller->retake_course( $request );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a single product.\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t *\r\n-\t * @return WP_Error|WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function create_item( $request ) {\r\n-\t\tif ( ! empty( $request['id'] ) ) {\r\n-\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_exists\", sprintf( __( 'Cannot create existing %s.', 'learnpress' ), $this->post_type ), array( 'status' => 400 ) );\r\n-\t\t}\r\n-\r\n-\t\t$prepared_post = $this->prepare_item_for_database( $request );\r\n-\r\n-\t\tif ( is_wp_error( $prepared_post ) ) {\r\n-\t\t\treturn $prepared_post;\r\n-\t\t}\r\n-\r\n-\t\t$prepared_post->post_type = $this->post_type;\r\n-\r\n-\t\t$post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true, false );\r\n-\r\n-\t\tif ( is_wp_error( $post_id ) ) {\r\n-\t\t\tif ( 'db_insert_error' === $post_id->get_error_code() ) {\r\n-\t\t\t\t$post_id->add_data( array( 'status' => 500 ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$post_id->add_data( array( 'status' => 400 ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $post_id;\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $post_id );\r\n-\r\n-\t\tdo_action( \"lp_rest_insert_{$this->post_type}\", $post, $request, true );\r\n-\r\n-\t\t$fields_update = $this->update_additional_fields_for_object( $post, $request );\r\n-\r\n-\t\tif ( is_wp_error( $fields_update ) ) {\r\n-\t\t\treturn $fields_update;\r\n-\t\t}\r\n-\r\n-\t\t$request->set_param( 'context', 'edit' );\r\n-\r\n-\t\tdo_action( \"lp_rest_after_insert_{$this->post_type}\", $post, $request, true );\r\n-\r\n-\t\twp_after_insert_post( $post, false, null );\r\n-\r\n-\t\t$object = $this->get_object( $post_id );\r\n-\r\n-\t\t$response = $this->prepare_object_for_response( $object, $request );\r\n-\t\t$response = rest_ensure_response( $response );\r\n-\r\n-\t\t$response->set_status( 201 );\r\n-\t\t$response->header( 'Location', rest_url( sprintf( '\u002F%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $object, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\t\t$data    = $this->get_course_data( $object, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Course $course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function get_course_data( $course, $context = 'view' ) {\r\n-\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\r\n-\t\t$fields  = $this->get_fields_for_response( $request );\r\n-\r\n-\t\t$id   = $course->get_id();\r\n-\t\t$post = get_post( $course->get_id() );\r\n-\r\n-\t\t$data = array();\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tif ( ! empty( $request['optimize'] ) ) {\r\n-\t\t\t\t$disables = is_bool( $request['optimize'] ) ? 'sections,course_data,instructor,meta_data,tags,can_finish,can_retake,count_students,rataken,ratake_count' : $request['optimize'];\r\n-\t\t\t\t$disable  = explode( ',', $disables );\r\n-\r\n-\t\t\t\tif ( ! empty( $disable ) && in_array( $field, $disable ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $course->get_id();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $post->post_title;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'slug':\r\n-\t\t\t\t\t$data['slug'] = $post->post_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'permalink':\r\n-\t\t\t\t\t$data['permalink'] = $course->get_permalink();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'image':\r\n-\t\t\t\t\t$data['image'] = $course->get_image_url( 'full' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created':\r\n-\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created_gmt':\r\n-\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified':\r\n-\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified_gmt':\r\n-\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'on_sale':\r\n-\t\t\t\t\t$data['on_sale'] = $course->has_sale_price();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$data['status'] = $post->post_status;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'content':\r\n-\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'excerpt':\r\n-\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'count_students':\r\n-\t\t\t\t\t$data['count_students'] = $course->count_students();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'can_finish':\r\n-\t\t\t\t\t$data['can_finish'] = $this->check_can_finish( $course );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'can_retake':\r\n-\t\t\t\t\t$data['can_retake'] = $this->check_can_retake( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'ratake_count':\r\n-\t\t\t\t\t$data['ratake_count'] = (int) $course->get_data( 'retake_count' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'rataken':\r\n-\t\t\t\t\t$data['rataken'] = $this->get_retaken_count( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'categories':\r\n-\t\t\t\t\t$data['categories'] = $this->get_course_taxonomy( $id, 'course_category' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'tags':\r\n-\t\t\t\t\t$data['tags'] = $this->get_course_taxonomy( $id, 'course_tag' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'instructor':\r\n-\t\t\t\t\t$data['instructor'] = $this->get_instructor_info( $course );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'sections':\r\n-\t\t\t\t\t$data['sections'] = $this->get_all_items( $course );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'course_data':\r\n-\t\t\t\t\t$data['course_data'] = $this->get_course_data_for_current_user( $id, $request );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'rating':\r\n-\t\t\t\t\t$data['rating'] = $this->get_course_rating( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\t\t$data['price'] = floatval( $course->get_price() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'price_rendered':\r\n-\t\t\t\t\t$data['price_rendered'] = html_entity_decode( $course->get_price_html() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'origin_price':\r\n-\t\t\t\t\t$data['origin_price'] = floatval( $course->get_origin_price() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'origin_price_rendered':\r\n-\t\t\t\t\t$data['origin_price_rendered'] = html_entity_decode( $course->get_origin_price_html() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'sale_price':\r\n-\t\t\t\t\t$data['sale_price'] = floatval( $course->get_sale_price() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'sale_price_rendered':\r\n-\t\t\t\t\t$data['sale_price_rendered'] = html_entity_decode( learn_press_format_price( $course->get_sale_price(), true ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$data['meta_data'] = $this->get_course_meta( $id );\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle price course return to App\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.6.9\r\n-\t *\u002F\r\n-\tpublic function render_course_price( CourseModel $course ): string {\r\n-\t\t$price_string = '';\r\n-\r\n-\t\tif ( $course->is_free() ) {\r\n-\t\t\t$price_string = apply_filters(\r\n-\t\t\t\t'learn_press_course_price_html_free',\r\n-\t\t\t\tesc_html__( 'Free', 'learnpress' ),\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\t$price_string .= learn_press_format_price( $course->get_price() );\r\n-\t\t}\r\n-\r\n-\t\treturn html_entity_decode( $price_string );\r\n-\t}\r\n-\r\n-\tpublic function get_retaken_count( $id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$user_course_data = $user->get_course_data( $id );\r\n-\t\tif ( ! $user_course_data ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\treturn absint( $user_course_data->get_retaken_count() );\r\n-\t}\r\n-\r\n-\tpublic function check_can_retake( $id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\tif ( $user ) {\r\n-\t\t\t$can_retake_times = $user->can_retry_course( $id );\r\n-\r\n-\t\t\tif ( $can_retake_times ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function get_course_rating( $id ) {\r\n-\t\tif ( ! function_exists( 'learn_press_get_course_rate' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_rate = learn_press_get_course_rate( $id );\r\n-\r\n-\t\treturn ! empty( $course_rate ) ? floatval( number_format( $course_rate, 1 ) ) : 0;\r\n-\t}\r\n-\r\n-\tpublic function check_can_finish( $course ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\tif ( $user && $course ) {\r\n-\t\t\t$check = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\t\tif ( $check['status'] === 'success' ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get instructor info\r\n-\t *\r\n-\t * @param LP_Course $course\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_instructor_info( $course ) {\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$courseModel = CourseModel::find( $course->get_id(), true );\r\n-\t\t} elseif ( $course instanceof CourseModel ) {\r\n-\t\t\t$courseModel = $course;\r\n-\t\t} else {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$output     = array();\r\n-\t\t$extra_info = learn_press_get_user_extra_profile_info( $courseModel->get_id() );\r\n-\t\t$author     = $courseModel->get_author_model();\r\n-\t\tif ( ! $author ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$output['avatar']      = $author->get_avatar_url();\r\n-\t\t$output['id']          = $author->get_id();\r\n-\t\t$output['name']        = $author->get_display_name();\r\n-\t\t$output['description'] = $author->get_description();\r\n-\t\t$output['social']      = $extra_info;\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get instructor info\r\n-\t *\r\n-\t * @param UserModel $author\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_author_info( $author ): array {\r\n-\t\t$output                = [];\r\n-\t\t$output['avatar']      = $author->get_avatar_url();\r\n-\t\t$output['id']          = $author->get_id();\r\n-\t\t$output['name']        = $author->display_name;\r\n-\t\t$output['description'] = $author->get_description();\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_item_learned_ids( $request ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$filter = ! empty( $request['course_filter'] ) ? $request['course_filter'] : false;\r\n-\t\t$where  = $wpdb->prepare( 'user_id=%d AND item_type=%s', $user_id, $this->post_type ); \u002F\u002F phpcs:ignore\r\n-\r\n-\t\tif ( $filter ) {\r\n-\t\t\tif ( $filter === 'in-progress' ) {\r\n-\t\t\t\t$where .= $wpdb->prepare( ' AND status=%s AND graduation=%s', 'enrolled', 'in-progress' );\r\n-\t\t\t} elseif ( in_array( $filter, array( 'passed', 'failed' ) ) ) { \u002F\u002F is \"passed\" or \"failed\"\r\n-\t\t\t\t$where .= $wpdb->prepare( ' AND status=%s AND graduation=%s', 'finished', $filter );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$query = \"SELECT item_id FROM {$wpdb->prefix}learnpress_user_items WHERE {$where}\";\r\n-\r\n-\t\t$item_ids = $wpdb->get_col( $query );\r\n-\r\n-\t\treturn $item_ids;\r\n-\t}\r\n-\r\n-\tpublic function get_course_data_for_current_user( $id, $request ) {\r\n-\t\t$user = learn_press_get_user( get_current_user_id() );\r\n-\r\n-\t\tif ( empty( $user ) || empty( $id ) ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t$course_data = $user->get_course_data( $id );\r\n-\r\n-\t\tif ( ! $course_data ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'graduation'      => $course_data->get_graduation() ?? '',\r\n-\t\t\t'status'          => $course_data->get_status() ?? '',\r\n-\t\t\t'start_time'      => $course_data->get_start_time() ? lp_jwt_prepare_date_response( $course_data->get_start_time()->toSql() ) : null,\r\n-\t\t\t'end_time'        => $course_data->get_end_time() ? lp_jwt_prepare_date_response( $course_data->get_end_time()->toSql() ) : null,\r\n-\t\t\t'expiration_time' => $course_data->get_expiration_time() ? lp_jwt_prepare_date_response( $course_data->get_expiration_time()->toSql() ) : '',\r\n-\t\t\t'result'          => $course_data->calculate_course_results(),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_course_taxonomy( $id, $taxonomy ) {\r\n-\t\t$terms  = get_the_terms( $id, $taxonomy );\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( $terms ) {\r\n-\t\t\tforeach ( $terms as $term ) {\r\n-\t\t\t\t$output[] = array(\r\n-\t\t\t\t\t'id'   => $term->term_id,\r\n-\t\t\t\t\t'name' => $term->name,\r\n-\t\t\t\t\t'slug' => $term->slug,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Items of sections\r\n-\t *\r\n-\t * @param LP_Course $course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function get_all_items( $course ): array {\r\n-\t\t$curriculum  = $course->get_curriculum();\r\n-\t\t$user        = learn_press_get_current_user();\r\n-\t\t$user_course = $user ? $user->get_course_data( $course->get_id() ) : false;\r\n-\t\t$output      = array();\r\n-\r\n-\t\tif ( ! empty( $curriculum ) ) {\r\n-\t\t\tforeach ( $curriculum as $section ) {\r\n-\t\t\t\tif ( $section ) {\r\n-\t\t\t\t\t$data = array(\r\n-\t\t\t\t\t\t'id'          => $section->get_id(),\r\n-\t\t\t\t\t\t'title'       => $section->get_title(),\r\n-\t\t\t\t\t\t'course_id'   => $section->get_course_id(),\r\n-\t\t\t\t\t\t'description' => $section->get_description(),\r\n-\t\t\t\t\t\t'order'       => $section->get_order(),\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( $user_course && $user->has_enrolled_or_finished( $section->get_course_id() ) ) {\r\n-\t\t\t\t\t\t$data['percent'] = $user_course->get_percent_completed_items( '', $section->get_id() );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$data_item = array();\r\n-\r\n-\t\t\t\t\t$items = $section->get_items();\r\n-\r\n-\t\t\t\t\tif ( ! empty( $items ) ) {\r\n-\t\t\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\t\t\t$post = get_post( $item->get_id() );\r\n-\r\n-\t\t\t\t\t\t\t$format = array(\r\n-\t\t\t\t\t\t\t\t'day'    => __( '%s days', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'hour'   => __( '%s hours', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'minute' => __( '%s mins', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'second' => __( '%s secs', 'learnpress' ),\r\n-\t\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\t\t$user_item = $user_course ? $user_course->get_item( $item->get_id() ) : false;\r\n-\r\n-\t\t\t\t\t\t\tif ( $user ) {\r\n-\t\t\t\t\t\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $section->get_course_id() ) );\r\n-\t\t\t\t\t\t\t\t$can_view_item           = $user->can_view_item( $item->get_id(), $can_view_content_course );\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t$data_item[] = array(\r\n-\t\t\t\t\t\t\t\t'id'         => $item->get_id(),\r\n-\t\t\t\t\t\t\t\t'type'       => $item->get_item_type(),\r\n-\t\t\t\t\t\t\t\t'title'      => $post->post_title,\r\n-\t\t\t\t\t\t\t\t'preview'    => $item->is_preview(),\r\n-\t\t\t\t\t\t\t\t'duration'   => $item->get_duration()->to_timer( $format, true ),\r\n-\t\t\t\t\t\t\t\t'graduation' => $user_item ? $user_item->get_graduation() : '',\r\n-\t\t\t\t\t\t\t\t'status'     => $user_item ? $user_item->get_status() : '',\r\n-\t\t\t\t\t\t\t\t'locked'     => ! isset( $can_view_item->flag ) || ! $can_view_item->flag,\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$data['items'] = $data_item;\r\n-\t\t\t\t\t$output[]      = $data;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_course_meta( $id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! class_exists( 'LP_Meta_Box' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! class_exists( 'LP_Meta_Box_Course' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php';\r\n-\t\t}\r\n-\r\n-\t\t$metabox = new LP_Meta_Box_Course();\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\tforeach ( $metabox->metabox( $id ) as $key => $tab ) {\r\n-\t\t\tif ( isset( $tab['content'] ) ) {\r\n-\t\t\t\tforeach ( $tab['content'] as $meta_key => $object ) {\r\n-\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t\t\t$object->id          = $meta_key;\r\n-\t\t\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tprotected function prepare_objects_query( $request ) {\r\n-\t\t$args = parent::prepare_objects_query( $request );\r\n-\r\n-\t\t$taxonomies = array(\r\n-\t\t\t'course_category' => 'category',\r\n-\t\t\t'course_tag'      => 'tag',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $taxonomies as $taxonomy => $key ) {\r\n-\t\t\tif ( ! empty( $request[ $key ] ) ) {\r\n-\t\t\t\t$tax_query[] = array(\r\n-\t\t\t\t\t'taxonomy' => $taxonomy,\r\n-\t\t\t\t\t'field'    => 'term_id',\r\n-\t\t\t\t\t'terms'    => $request[ $key ],\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $tax_query ) ) {\r\n-\t\t\t$args['tax_query'] = $tax_query;\r\n-\t\t}\r\n-\r\n-\t\t$orderby = $request->get_param( 'orderby' );\r\n-\t\t$order   = $request->get_param( 'order' );\r\n-\r\n-\t\t$orderby = strtolower( is_array( $orderby ) ? (string) current( $orderby ) : (string) $orderby );\r\n-\t\t$order   = strtoupper( is_array( $order ) ? (string) current( $order ) : (string) $order );\r\n-\r\n-\t\tswitch ( $orderby ) {\r\n-\t\t\tcase 'id':\r\n-\t\t\t\t$args['orderby'] = 'ID';\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'menu_order':\r\n-\t\t\t\t$args['orderby'] = 'menu_order title';\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'title':\r\n-\t\t\t\t$args['orderby'] = 'post_title';\r\n-\t\t\t\t$args['order']   = ( 'DESC' === $order ) ? 'DESC' : 'ASC';\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'relevance':\r\n-\t\t\t\t$args['orderby'] = 'relevance';\r\n-\t\t\t\t$args['order']   = 'DESC';\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'rand':\r\n-\t\t\t\t$args['orderby'] = 'rand'; \u002F\u002F @codingStandardsIgnoreLine\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'date':\r\n-\t\t\t\t$args['orderby'] = 'date ID';\r\n-\t\t\t\t$args['order']   = ( 'ASC' === $order ) ? 'ASC' : 'DESC';\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'price':\r\n-\t\t\t\t$args['orderby']  = 'meta_value_num';\r\n-\t\t\t\t$args['meta_key'] = '_lp_price';\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_bool( $request['on_sale'] ) ) {\r\n-\t\t\t$on_sale_key = $request['on_sale'] ? 'post__in' : 'post__not_in';\r\n-\r\n-\t\t\t$filter              = new LP_Course_Filter();\r\n-\t\t\t$filter->only_fields = array( 'ID' );\r\n-\r\n-\t\t\t$filter      = LP_Course_DB::getInstance()->get_courses_sort_by_sale( $filter );\r\n-\t\t\t$on_sale_ids = LP_Course_DB::getInstance()->get_courses( $filter );\r\n-\t\t\t$on_sale_ids = LP_Database::get_values_by_key( $on_sale_ids );\r\n-\t\t\t$on_sale_ids = empty( $on_sale_ids ) ? array( 0 ) : $on_sale_ids;\r\n-\r\n-\t\t\t$args[ $on_sale_key ] += $on_sale_ids;\r\n-\t\t} elseif ( is_bool( $request['popular'] ) ) {\r\n-\t\t\t$on_popular_key = $request['popular'] ? 'post__in' : 'post__not_in';\r\n-\r\n-\t\t\t$filter              = new LP_Course_Filter();\r\n-\t\t\t$filter->only_fields = array( 'ID' );\r\n-\t\t\t$filter->limit       = $request['per_page'] ?? 10;\r\n-\t\t\t$filter->page        = $request['page'] ?? 1;\r\n-\r\n-\t\t\t$filter         = LP_Course_DB::getInstance()->get_courses_order_by_popular( $filter );\r\n-\t\t\t$on_popular_ids = LP_Course_DB::getInstance()->get_courses( $filter );\r\n-\t\t\t$on_popular_ids = LP_Database::get_values_by_key( $on_popular_ids );\r\n-\r\n-\t\t\t$on_popular_ids = empty( $on_popular_ids ) ? array( 0 ) : $on_popular_ids;\r\n-\r\n-\t\t\t$args[ $on_popular_key ] += $on_popular_ids;\r\n-\r\n-\t\t\t$args['orderby'] = 'post__in';\r\n-\t\t}\r\n-\r\n-\t\treturn $args;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => $this->post_type,\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'                    => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'                  => array(\r\n-\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'                  => array(\r\n-\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permalink'             => array(\r\n-\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'image'                 => array(\r\n-\t\t\t\t\t'description' => __( 'Course Image URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created'          => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => array( 'string', 'null' ),\r\n-\t\t\t\t\t'format'      => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created_gmt'      => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => array( 'string', 'null' ),\r\n-\t\t\t\t\t'format'      => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified'         => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => array( 'string', 'null' ),\r\n-\t\t\t\t\t'format'      => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified_gmt'     => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => array( 'string', 'null' ),\r\n-\t\t\t\t\t'format'      => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'on_sale'               => array(\r\n-\t\t\t\t\t'description' => __( 'Display courses if they are on sale.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'                => array(\r\n-\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => 'publish',\r\n-\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'               => array(\r\n-\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'excerpt'               => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'duration'              => array(\r\n-\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'count_students'        => array(\r\n-\t\t\t\t\t'description' => __( 'Count the number of enrolled students.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'can_finish'            => array(\r\n-\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'can_retake'            => array(\r\n-\t\t\t\t\t'description' => __( 'Can retake the course', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'ratake_count'          => array(\r\n-\t\t\t\t\t'description' => __( 'Total retakes', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'rataken'               => array(\r\n-\t\t\t\t\t'description' => __( 'Retaken', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'rating'                => array(\r\n-\t\t\t\t\t'description' => __( 'Course Review add-on', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => array( 'boolean', 'integer' ),\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'price'                 => array(\r\n-\t\t\t\t\t'description' => __( 'Course Price', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'price_rendered'        => array(\r\n-\t\t\t\t\t'description' => __( 'Course Price Rendered', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'origin_price'          => array(\r\n-\t\t\t\t\t'description' => __( 'Course Origin Price', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'origin_price_rendered' => array(\r\n-\t\t\t\t\t'description' => __( 'Course Origin Price Rendered', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'sale_price'            => array(\r\n-\t\t\t\t\t'description' => __( 'Course Sale Price', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'sale_price_rendered'   => array(\r\n-\t\t\t\t\t'description' => __( 'Course Sale Price Rendered', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'categories'            => array(\r\n-\t\t\t\t\t'description' => __( 'List of categories.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type'       => 'object',\r\n-\t\t\t\t\t\t'properties' => array(\r\n-\t\t\t\t\t\t\t'id'   => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Category ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'name' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Category name.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'slug' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Category slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'tags'                  => array(\r\n-\t\t\t\t\t'description' => __( 'List of tags.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type'       => 'object',\r\n-\t\t\t\t\t\t'properties' => array(\r\n-\t\t\t\t\t\t\t'id'   => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Tag ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'name' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Tag name.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'slug' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Tag slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'instructor'            => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course sections and items..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type'       => 'object',\r\n-\t\t\t\t\t\t'properties' => array(\r\n-\t\t\t\t\t\t\t'id'          => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'User ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'name'        => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Display name.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'description' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Tag slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'social'      => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Social Infor.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'sections'              => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course sections and items..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type'       => 'object',\r\n-\t\t\t\t\t\t'properties' => array(\r\n-\t\t\t\t\t\t\t'id'          => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Section ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'title'       => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Section name.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'course_id'   => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Course ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'description' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Section description.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Section items.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t\t\t\t'id'         => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'type'       => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item Type.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'title'      => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'preview'    => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'percent'    => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Percent.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'duration'   => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Duration.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'graduation' => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Graduation.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'status'     => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Status.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t'locked'     => array(\r\n-\t\t\t\t\t\t\t\t\t\t'description' => __( 'Locked.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'course_data'           => array(\r\n-\t\t\t\t\t'description' => __( 'List of course user data.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type'       => 'object',\r\n-\t\t\t\t\t\t'properties' => array(\r\n-\t\t\t\t\t\t\t'graduation'      => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Graduation', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'status'          => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Status', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'start_time'      => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Start time', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'end_time'        => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'End time', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'expiration_time' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Expiration time', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-\r\n-\tpublic function get_collection_params() {\r\n-\t\t$params = parent::get_collection_params();\r\n-\r\n-\t\t$params['orderby']['enum'] = array_merge( $params['orderby']['enum'], array( 'menu_order', 'price' ) );\r\n-\r\n-\t\t$params['category']      = array(\r\n-\t\t\t'description'       => 'Limit the result set to courses assigned to a specific category ID.',\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['tag']           = array(\r\n-\t\t\t'description'       => 'Limit the result set to courses assigned to a specific tag ID.',\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['course_filter'] = array(\r\n-\t\t\t'description'       => 'Filter by course to in-progress, passed, failed.',\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\r\n-\t\t$params['on_sale'] = array(\r\n-\t\t\t'description'       => 'Get item learned by user.',\r\n-\t\t\t'type'              => 'boolean',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\r\n-\t\t$params['popular']  = array(\r\n-\t\t\t'description'       => 'Get item popularity.',\r\n-\t\t\t'type'              => 'boolean',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['optimize'] = array(\r\n-\t\t\t'description'       => 'Disable some fields in the schema.',\r\n-\t\t\t'type'              => array( 'boolean', 'string' ),\r\n-\t\t\t'validate_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+\n+class LP_Jwt_Courses_V1_Controller extends LP_REST_Jwt_Posts_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'courses';\n+\n+\tprotected $post_type = LP_COURSE_CPT;\n+\n+\tprotected $hierarchical = true;\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_courses' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'create_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'create_item_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'view',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fenroll',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'enroll_course' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_course_need_login_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'edit',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'finish_course' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'edit',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fretake',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'retake_course' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'edit',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fverify-receipt',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t'callback'            => array( $this, 'verify_receipt' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'context'      => $this->get_context_param(\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'default' => 'edit',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\t'receipt-data' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Receipt data.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_items_permissions_check( $request ) {\n+\t\t$post_type = get_post_type_object( $this->post_type );\n+\n+\t\tif ( 'edit' === $request['context'] && ! current_user_can( $post_type->cap->edit_posts ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_forbidden_context',\n+\t\t\t\t__( 'Sorry, you are not allowed to edit posts in this post type.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_course_need_login_check( $request ) {\n+\t\tif ( ! is_user_logged_in() ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_forbidden_context',\n+\t\t\t\t__( 'Please login to continue' ),\n+\t\t\t\tarray( 'status' => 401 )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Checks if a course can be read.\n+\t *\n+\t * Correctly handles courses with the inherit status.\n+\t *\n+\t * @return bool Whether the post can be read.\n+\t * *@author Nhamdv\n+\t *\n+\t *\u002F\n+\tpublic function check_read_permission( $post_id ) {\n+\t\tif ( empty( absint( $post_id ) ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$post = get_post( $post_id );\n+\n+\t\tif ( ! $post ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F Is the post readable?\n+\t\tif ( 'publish' === $post->post_status || current_user_can( 'read_post', $post->ID ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t$post_status_obj = get_post_status_object( $post->post_status );\n+\t\tif ( $post_status_obj && $post_status_obj->public ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F\u002F Can we read the parent if we're inheriting?\n+\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\n+\t\t\t$parent = get_post( $post->post_parent );\n+\n+\t\t\tif ( $parent ) {\n+\t\t\t\treturn $this->check_read_permission( $parent );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F*\n+\t\t * If there isn't a parent, but the status is set to inherit, assume\n+\t\t * it's published (as per get_post_status()).\n+\t\t *\u002F\n+\t\tif ( 'inherit' === $post->post_status ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tprotected function get_object( $course = 0 ) {\n+\t\tglobal $post;\n+\n+\t\tif ( false === $course && isset( $post, $post->ID ) && LP_COURSE_CPT === get_post_type( $post->ID ) ) {\n+\t\t\t$id = absint( $post->ID );\n+\t\t} elseif ( is_numeric( $course ) ) {\n+\t\t\t$id = $course;\n+\t\t} elseif ( $course instanceof LP_Course ) {\n+\t\t\t$id = $course->get_id();\n+\t\t} elseif ( ! empty( $course->ID ) ) {\n+\t\t\t$id = $course->ID;\n+\t\t}\n+\n+\t\treturn learn_press_get_course( $id );\n+\t}\n+\n+\tpublic function verify_receipt( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\t$receipt  = ! empty( $request['receipt-data'] ) ? $request['receipt-data'] : '';\n+\t\t$is_ios   = ! empty( $request['is-ios'] ) ? true : false;\n+\n+\t\t\u002F\u002F Get request header.\n+\t\t$platform = ! empty( $request->get_header( 'x-platform' ) ) ? sanitize_text_field( $request->get_header( 'x-platform' ) ) : '';\n+\t\t$password = function_exists( 'learnpress_mobile_iap_settings' ) ? learnpress_mobile_iap_settings( $platform )['apple_token_secret'] : LP_Settings::instance()->get( 'in_app_purchase_apple_shared_secret', '' );\n+\n+\t\ttry {\n+\t\t\tif ( empty( $receipt ) ) {\n+\t\t\t\tthrow new Exception( __( 'Receipt data is empty.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $is_ios ) {\n+\t\t\t\t$course_id = ! empty( $request['course-id'] ) ? absint( $request['course-id'] ) : 0;\n+\n+\t\t\t\tif ( empty( $password ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'The secret key is empty.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$url = LP_Settings::instance()->get( 'in_app_purchase_apple_sandbox' ) === 'yes' ? 'https:\u002F\u002Fsandbox.itunes.apple.com\u002FverifyReceipt' : 'https:\u002F\u002Fbuy.itunes.apple.com\u002FverifyReceipt';\n+\n+\t\t\t\t$verify = wp_remote_post(\n+\t\t\t\t\t$url,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'method'  => 'POST',\n+\t\t\t\t\t\t'timeout' => 60,\n+\t\t\t\t\t\t'body'    => wp_json_encode(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'receipt-data' => $receipt,\n+\t\t\t\t\t\t\t\t'password'     => $password,\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tif ( is_wp_error( $verify ) ) {\n+\t\t\t\t\tthrow new Exception( $verify->get_error_message() );\n+\t\t\t\t}\n+\n+\t\t\t\t$body = json_decode( wp_remote_retrieve_body( $verify ) );\n+\n+\t\t\t\tif ( $body->status !== 0 ) {\n+\t\t\t\t\tthrow new Exception( __( 'Cannot verify the receipt', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$latest_receipt_info = ! empty( $body->latest_receipt_info ) ? $body->latest_receipt_info : array();\n+\n+\t\t\t\tif ( empty( $latest_receipt_info ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$course_ids = array_map(\n+\t\t\t\t\tfunction ( $receipt_id ) {\n+\t\t\t\t\t\treturn absint( $receipt_id->product_id );\n+\t\t\t\t\t},\n+\t\t\t\t\t$latest_receipt_info\n+\t\t\t\t);\n+\n+\t\t\t\tif ( ! in_array( $course_id, $course_ids ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$receipt        = json_decode( $receipt, true );\n+\t\t\t\t$package_name   = $receipt['packageName'] ?? '';\n+\t\t\t\t$course_id      = ! empty( $receipt['productId'] ) ? absint( $receipt['productId'] ) : 0;\n+\t\t\t\t$purchase_token = $receipt['purchaseToken'] ?? '';\n+\n+\t\t\t\tif ( ! function_exists( 'learnpress_in_app_purchase_get_access_token' ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Cannot verify the receipt', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$access_token = function_exists( 'learnpress_mobile_iap_settings' ) ? learnpress_in_app_purchase_get_access_token( $platform ) : learnpress_in_app_purchase_get_access_token();\n+\n+\t\t\t\t$verify = wp_remote_get(\n+\t\t\t\t\t'https:\u002F\u002Fandroidpublisher.googleapis.com\u002Fandroidpublisher\u002Fv3\u002Fapplications\u002F' . $package_name . '\u002Fpurchases\u002Fproducts\u002F' . $course_id . '\u002Ftokens\u002F' . $purchase_token,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'headers' => array(\n+\t\t\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\n+\t\t\t\t\t\t\t'Authorization' => 'Bearer ' . $access_token,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'timeout' => 60,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$body = json_decode( wp_remote_retrieve_body( $verify ) );\n+\n+\t\t\t\tif ( isset( $body->error->message ) ) {\n+\t\t\t\t\tthrow new Exception( $body->error->message );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'The course ID is invalid.', 'learnpress' ) );\n+\t\t\t}\n+\t\t\t$user = learn_press_get_current_user();\n+\n+\t\t\t$cart     = LearnPress::instance()->cart;\n+\t\t\t$checkout = LP_Checkout::instance();\n+\n+\t\t\tif ( ! learn_press_enable_cart() ) {\n+\t\t\t\t\u002F\u002F $order_awaiting_payment = LearnPress::instance()->session->get( 'order_awaiting_payment' );\n+\t\t\t\t$cart->empty_cart();\n+\t\t\t\t\u002F\u002F LearnPress::instance()->session->set( 'order_awaiting_payment', $order_awaiting_payment );\n+\t\t\t}\n+\n+\t\t\t$cart_id = $cart->add_to_cart( $course_id, 1, array() );\n+\n+\t\t\tif ( ! $cart_id ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t$order_id = $checkout->create_order();\n+\t\t\t\t$order    = new LP_Order( $order_id );\n+\t\t\t\t$order->payment_complete();\n+\t\t\t\t$cart->empty_cart();\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = esc_html__( 'Verify Receipt Data successfully.', 'learnpress' );\n+\t\t} catch ( \\Throwable $th ) {\n+\t\t\terror_log( $th->getMessage() );\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Convert params App to query courses.\n+\t *\n+\t * @param $params\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic function convert_params_query_courses( $params = [] ) {\n+\t\t$params['limit'] = $params['per_page'] ?? 10;\n+\n+\t\t$params['paged'] = $params['page'] ?? 1;\n+\n+\t\tif ( ! empty( $params['popular'] ) ) {\n+\t\t\t$params['order_by'] = 'popular';\n+\t\t} else {\n+\t\t\t$params['order_by'] = $params['orderby'] ?? 'menu_order';\n+\t\t\tswitch ( $params['order_by'] ) {\n+\t\t\t\tcase 'date':\n+\t\t\t\t\t$params['order_by'] = 'post_date';\n+\t\t\t\t\t$params['order']    = $params['order'] ?? 'DESC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'title':\n+\t\t\t\t\t$params['order_by'] = 'post_title';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'price':\n+\t\t\t\t\tif ( ! empty( $params['order'] ) && 'asc' === $params['order'] ) {\n+\t\t\t\t\t\t$params['order_by'] = 'price_low';\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$params['order'] = $params['order'] ?? 'DESC';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $params['search'] ) ) {\n+\t\t\t$params['c_search'] = trim( $params['search'] );\n+\t\t}\n+\n+\t\tif ( ! empty( $params['user'] ) ) {\n+\t\t\t$params['c_author'] = $params['user'];\n+\t\t}\n+\n+\t\tif ( ! empty( $params['on_sale'] ) ) {\n+\t\t\t$params['sort_by'] = 'on_sale';\n+\t\t}\n+\n+\t\t$params['return_type'] = 'json';\n+\t\t\u002F\u002F$params['c_only_fields'] = empty( $params['c_only_fields'] ) ? '' : explode( ',', $params['c_only_fields'] );\n+\t\t$params['term_id'] = empty( $params['category'] ) || 'all' === $params['category'] ? '' : implode( ',', $params['category'] );\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Get courses.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response|LP_REST_Response\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_courses( WP_REST_Request $request ) {\n+\t\t$res         = new LP_REST_Response();\n+\t\t$courses     = [];\n+\t\t$total       = 0;\n+\t\t$total_pages = 0;\n+\t\ttry {\n+\t\t\t$filter = new LP_Course_Filter();\n+\t\t\t$params = $request->get_params();\n+\t\t\t$params = $this->convert_params_query_courses( $params );\n+\n+\t\t\tCourses::handle_params_for_query_courses( $filter, $params );\n+\t\t\t$key_cache             = 'api\u002F' . md5( json_encode( $params ) );\n+\t\t\t$key_cache_total       = $key_cache . '_total';\n+\t\t\t$key_cache_total_pages = $key_cache . '_total_pages';\n+\t\t\t$lp_courses_cache      = new LP_Courses_Cache( true );\n+\n+\t\t\tif ( ! empty( $params['learned'] ) ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t\t\u002F\u002F For tst user hard code\n+\t\t\t\t\u002F\u002F $user_id = ! empty( $params['user_id'] ) ? $params['user_id'] : get_current_user_id();\n+\t\t\t\tif ( $user_id \u003C= 0 ) {\n+\t\t\t\t\t$user_id = - 1;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F Get courses that user has learned\n+\t\t\t\t\u002F*$lp_user_courses                         = LP_User_Items_DB::getInstance();\n+\t\t\t\t$filter_user_course                      = new LP_User_Items_Filter();\n+\t\t\t\t$filter_user_course->only_fields         = array( 'DISTINCT(item_id) AS ID' );\n+\t\t\t\t$filter_user_course->user_id             = $user_id;\n+\t\t\t\t$filter_user_course->item_type           = LP_COURSE_CPT;\n+\t\t\t\t$filter_user_course->return_string_query = true;\n+\t\t\t\t$user_courses_query                      = $lp_user_courses->get_user_items( $filter_user_course );\n+\t\t\t\t$params                                  = $lp_user_courses->get_user_items( $filter_user_course );\n+\t\t\t\t$filter->where[] = \"AND p.ID IN ({$user_courses_query})\";*\u002F\n+\n+\t\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t\t\t$filter->fields[] = 'ui.user_item_id, ui.user_id, ui.item_id, ui.start_time, ui.end_time, ui.item_type, ui.graduation, ui.status';\n+\t\t\t\t$filter->join[]   = \"LEFT JOIN $lp_user_items_db->tb_lp_user_items AS ui ON p.ID = ui.item_id\";\n+\t\t\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND ui.user_id = %s', $user_id );\n+\t\t\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND ui.item_type = %s', LP_COURSE_CPT );\n+\t\t\t\tif ( ! empty( $params['course_filter'] ) ) {\n+\t\t\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare( 'AND ui.graduation = %s', $params['course_filter'] );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Check cache with case not learned\n+\t\t\t\t$courses_cache = $lp_courses_cache->get_cache( $key_cache );\n+\t\t\t\tif ( $courses_cache !== false ) {\n+\t\t\t\t\t$courses     = json_decode( $courses_cache, true );\n+\t\t\t\t\t$total       = (int) $lp_courses_cache->get_cache( $key_cache_total );\n+\t\t\t\t\t$total_pages = (int) $lp_courses_cache->get_cache( $key_cache_total_pages );\n+\n+\t\t\t\t\t$response = rest_ensure_response( $courses );\n+\t\t\t\t\t$response->header( 'X-WP-Total', $total );\n+\t\t\t\t\t$response->header( 'X-WP-TotalPages', $total_pages );\n+\n+\t\t\t\t\treturn $response;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$rs_courses  = Courses::get_courses( $filter, $total );\n+\t\t\t$courses     = $this->prepare_struct_courses_response( $rs_courses, $params );\n+\t\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$res->message = $e->getMessage();\n+\n+\t\t\treturn $res;\n+\t\t}\n+\n+\t\t$response = rest_ensure_response( $courses );\n+\t\t$response->header( 'X-WP-Total', $total );\n+\t\t$response->header( 'X-WP-TotalPages', $total_pages );\n+\n+\t\t\u002F\u002F Set cache with case not learned\n+\t\tif ( empty( $params['learned'] ) ) {\n+\t\t\t$lp_courses_cache->set_cache( $key_cache, json_encode( $courses, JSON_UNESCAPED_UNICODE ) );\n+\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache );\n+\t\t\t$lp_courses_cache->set_cache( $key_cache_total, $total );\n+\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache_total );\n+\t\t\t$lp_courses_cache->set_cache( $key_cache_total_pages, $total_pages );\n+\t\t\t$lp_courses_cache->save_cache_keys( LP_Courses_Cache::KEYS_QUERY_COURSES_APP, $key_cache_total_pages );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function prepare_struct_courses_response( $courses, $params ): array {\n+\t\t$data = [];\n+\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t$course = CourseModel::find( $courseObj->ID, true );\n+\t\t\tif ( empty( $course ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$courseObjPrepare             = new stdClass();\n+\t\t\t$courseObjPrepare->id         = (int) $courseObj->ID ?? 0;\n+\t\t\t$courseObjPrepare->name       = html_entity_decode( $course->get_title() );\n+\t\t\t$courseObjPrepare->image      = $course->get_image_url();\n+\t\t\t$author                       = $course->get_author_model();\n+\t\t\t$courseObjPrepare->instructor = ! empty( $author ) ? $this->get_author_info( $author ) : [];\n+\t\t\t$duration                     = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '' );\n+\t\t\t$duration_arr                 = explode( ' ', $duration );\n+\t\t\t$duration_number              = floatval( $duration_arr[0] ?? 0 );\n+\t\t\t$duration_type                = $duration_arr[1] ?? '';\n+\t\t\tif ( empty( $duration_number ) ) {\n+\t\t\t\t$duration_str = __( 'Lifetime', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\n+\t\t\t}\n+\t\t\t$courseObjPrepare->duration = $duration_str;\n+\t\t\t$course_categories          = $course->get_categories();\n+\t\t\t\u002F\u002F Add key id, for old app.\n+\t\t\tforeach ( $course_categories as $k => $category ) {\n+\t\t\t\t$category->id            = $category->term_id;\n+\t\t\t\t$course_categories[ $k ] = $category;\n+\t\t\t}\n+\t\t\t$courseObjPrepare->categories            = $course_categories;\n+\t\t\t$courseObjPrepare->price                 = $course->get_price();\n+\t\t\t$courseObjPrepare->price_rendered        = $this->render_course_price( $course );\n+\t\t\t$courseObjPrepare->origin_price          = $course->get_regular_price();\n+\t\t\t$courseObjPrepare->origin_price_rendered = html_entity_decode(\n+\t\t\t\tlearn_press_format_price( $courseObjPrepare->origin_price, true )\n+\t\t\t);\n+\t\t\t$courseObjPrepare->on_sale               = $course->has_sale_price();\n+\t\t\t$courseObjPrepare->sale_price            = (float) $course->get_sale_price();\n+\t\t\t$courseObjPrepare->sale_price_rendered   = html_entity_decode(\n+\t\t\t\tlearn_press_format_price( $course->get_sale_price(), true )\n+\t\t\t);\n+\t\t\t\u002F\u002F When release Addon Course Review v4.1.3 a long time, we will remove this code.\n+\t\t\t$courseObjPrepare->rating                           = $this->get_course_rating( $courseObj->ID );\n+\t\t\t$courseObjPrepare->meta_data                        = new stdClass();\n+\t\t\t$courseObjPrepare->meta_data->_lp_passing_condition = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PASSING_CONDITION );\n+\n+\t\t\t\u002F\u002F Add more fields\n+\t\t\tif ( ! empty( $params['learned'] ) ) {\n+\t\t\t\t$courseObjPrepare->course_data               = new stdClass();\n+\t\t\t\t$courseObjPrepare->course_data->user_item_id = $courseObj->user_item_id ?? 0;\n+\t\t\t\t$courseObjPrepare->course_data->user_id      = $courseObj->user_id ?? 0;\n+\t\t\t\t$courseObjPrepare->course_data->item_id      = $courseObj->item_id ?? 0;\n+\t\t\t\t$courseObjPrepare->course_data->item_type    = $courseObj->item_type ?? 0;\n+\t\t\t\t$courseObjPrepare->course_data->status       = $courseObj->status ?? '';\n+\t\t\t\t$courseObjPrepare->course_data->graduation   = $courseObj->graduation ?? '';\n+\t\t\t\t$courseObjPrepare->course_data->start_time   = $courseObj->start_time ?? '';\n+\t\t\t\t$courseObjPrepare->course_data->end_time     = $courseObj->end_time ?? '';\n+\n+\t\t\t\t$userCourse                                     = new UserCourseModel( $courseObjPrepare->course_data );\n+\t\t\t\t$expirationTime                                 = $userCourse->get_expiration_time();\n+\t\t\t\t$courseObjPrepare->course_data->expiration_time = $expirationTime ? $expirationTime->format( LP_Datetime::I18N_FORMAT ) : __( 'Lifetime', 'learnpress' );\n+\t\t\t\t$courseObjPrepare->course_data->result          = $userCourse->calculate_course_results();\n+\t\t\t}\n+\n+\t\t\t$courseObjPrepare = apply_filters( 'learnPress\u002Fprepare_struct_courses_response\u002FcourseObjPrepare', $courseObjPrepare, $course );\n+\t\t\t$data[]           = $courseObjPrepare;\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function enroll_course( $request ) {\n+\t\tif ( ! class_exists( 'LP_REST_Courses_Controller' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php';\n+\t\t}\n+\n+\t\t$course_controller = new LP_REST_Courses_Controller();\n+\n+\t\treturn $course_controller->enroll_courses( $request );\n+\t}\n+\n+\tpublic function finish_course( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$user      = learn_press_get_current_user();\n+\t\t\t$course_id = isset( $request['id'] ) ? wp_unslash( $request['id'] ) : false;\n+\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course ID available.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t$check  = $user->can_show_finish_course_btn( $course );\n+\n+\t\t\tif ( $check['status'] !== 'success' ) {\n+\t\t\t\tthrow new Exception( $check['message'] ?? esc_html__( 'Cannot finish this course.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$finished = $user->finish_course( $course_id );\n+\n+\t\t\tif ( empty( $finished ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: Cannot finish this course.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = esc_html__( 'Congrats! You have completed the Course.', 'learnpress' );\n+\t\t} catch ( \\Throwable $th ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\tpublic function retake_course( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\tif ( ! class_exists( 'LP_REST_Courses_Controller' ) ) {\n+\t\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php';\n+\t\t\t}\n+\n+\t\t\t$course_controller = new LP_REST_Courses_Controller();\n+\t\t\t$response          = $course_controller->retake_course( $request );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Create a single product.\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t *\n+\t * @return WP_Error|WP_REST_Response\n+\t *\u002F\n+\tpublic function create_item( $request ) {\n+\t\tif ( ! empty( $request['id'] ) ) {\n+\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_exists\", sprintf( __( 'Cannot create existing %s.', 'learnpress' ), $this->post_type ), array( 'status' => 400 ) );\n+\t\t}\n+\n+\t\t$prepared_post = $this->prepare_item_for_database( $request );\n+\n+\t\tif ( is_wp_error( $prepared_post ) ) {\n+\t\t\treturn $prepared_post;\n+\t\t}\n+\n+\t\t$prepared_post->post_type = $this->post_type;\n+\n+\t\t$post_id = wp_insert_post( wp_slash( (array) $prepared_post ), true, false );\n+\n+\t\tif ( is_wp_error( $post_id ) ) {\n+\t\t\tif ( 'db_insert_error' === $post_id->get_error_code() ) {\n+\t\t\t\t$post_id->add_data( array( 'status' => 500 ) );\n+\t\t\t} else {\n+\t\t\t\t$post_id->add_data( array( 'status' => 400 ) );\n+\t\t\t}\n+\n+\t\t\treturn $post_id;\n+\t\t}\n+\n+\t\t$post = get_post( $post_id );\n+\n+\t\tdo_action( \"lp_rest_insert_{$this->post_type}\", $post, $request, true );\n+\n+\t\t$fields_update = $this->update_additional_fields_for_object( $post, $request );\n+\n+\t\tif ( is_wp_error( $fields_update ) ) {\n+\t\t\treturn $fields_update;\n+\t\t}\n+\n+\t\t$request->set_param( 'context', 'edit' );\n+\n+\t\tdo_action( \"lp_rest_after_insert_{$this->post_type}\", $post, $request, true );\n+\n+\t\twp_after_insert_post( $post, false, null );\n+\n+\t\t$object = $this->get_object( $post_id );\n+\n+\t\t$response = $this->prepare_object_for_response( $object, $request );\n+\t\t$response = rest_ensure_response( $response );\n+\n+\t\t$response->set_status( 201 );\n+\t\t$response->header( 'Location', rest_url( sprintf( '\u002F%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );\n+\n+\t\treturn $response;\n+\t}\n+\n+\tpublic function prepare_object_for_response( $object, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\t\t$data    = $this->get_course_data( $object, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Course $course\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function get_course_data( $course, $context = 'view' ) {\n+\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\n+\t\t$fields  = $this->get_fields_for_response( $request );\n+\n+\t\t$id   = $course->get_id();\n+\t\t$post = get_post( $course->get_id() );\n+\n+\t\t$data = array();\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tif ( ! empty( $request['optimize'] ) ) {\n+\t\t\t\t$disables = is_bool( $request['optimize'] ) ? 'sections,course_data,instructor,meta_data,tags,can_finish,can_retake,count_students,rataken,ratake_count' : $request['optimize'];\n+\t\t\t\t$disable  = explode( ',', $disables );\n+\n+\t\t\t\tif ( ! empty( $disable ) && in_array( $field, $disable ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $course->get_id();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $post->post_title;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'slug':\n+\t\t\t\t\t$data['slug'] = $post->post_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'permalink':\n+\t\t\t\t\t$data['permalink'] = $course->get_permalink();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'image':\n+\t\t\t\t\t$data['image'] = $course->get_image_url( 'full' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created':\n+\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created_gmt':\n+\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified':\n+\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified_gmt':\n+\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'on_sale':\n+\t\t\t\t\t$data['on_sale'] = $course->has_sale_price();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$data['status'] = $post->post_status;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'content':\n+\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'excerpt':\n+\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'count_students':\n+\t\t\t\t\t$data['count_students'] = $course->count_students();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'can_finish':\n+\t\t\t\t\t$data['can_finish'] = $this->check_can_finish( $course );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'can_retake':\n+\t\t\t\t\t$data['can_retake'] = $this->check_can_retake( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'ratake_count':\n+\t\t\t\t\t$data['ratake_count'] = (int) $course->get_data( 'retake_count' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'rataken':\n+\t\t\t\t\t$data['rataken'] = $this->get_retaken_count( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'categories':\n+\t\t\t\t\t$data['categories'] = $this->get_course_taxonomy( $id, 'course_category' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'tags':\n+\t\t\t\t\t$data['tags'] = $this->get_course_taxonomy( $id, 'course_tag' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'instructor':\n+\t\t\t\t\t$data['instructor'] = $this->get_instructor_info( $course );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'sections':\n+\t\t\t\t\t$data['sections'] = $this->get_all_items( $course );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'course_data':\n+\t\t\t\t\t$data['course_data'] = $this->get_course_data_for_current_user( $id, $request );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'rating':\n+\t\t\t\t\t$data['rating'] = $this->get_course_rating( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'price':\n+\t\t\t\t\t$data['price'] = floatval( $course->get_price() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'price_rendered':\n+\t\t\t\t\t$data['price_rendered'] = html_entity_decode( $course->get_price_html() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'origin_price':\n+\t\t\t\t\t$data['origin_price'] = floatval( $course->get_origin_price() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'origin_price_rendered':\n+\t\t\t\t\t$data['origin_price_rendered'] = html_entity_decode( $course->get_origin_price_html() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'sale_price':\n+\t\t\t\t\t$data['sale_price'] = floatval( $course->get_sale_price() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'sale_price_rendered':\n+\t\t\t\t\t$data['sale_price_rendered'] = html_entity_decode( learn_press_format_price( $course->get_sale_price(), true ) );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$data['meta_data'] = $this->get_course_meta( $id );\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Handle price course return to App\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return string\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.6.9\n+\t *\u002F\n+\tpublic function render_course_price( CourseModel $course ): string {\n+\t\t$price_string = '';\n+\n+\t\tif ( $course->is_free() ) {\n+\t\t\t$price_string = apply_filters(\n+\t\t\t\t'learn_press_course_price_html_free',\n+\t\t\t\tesc_html__( 'Free', 'learnpress' ),\n+\t\t\t\t$this\n+\t\t\t);\n+\t\t} else {\n+\t\t\t$price_string .= learn_press_format_price( $course->get_price() );\n+\t\t}\n+\n+\t\treturn html_entity_decode( $price_string );\n+\t}\n+\n+\tpublic function get_retaken_count( $id ) {\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$user_course_data = $user->get_course_data( $id );\n+\t\tif ( ! $user_course_data ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\treturn absint( $user_course_data->get_retaken_count() );\n+\t}\n+\n+\tpublic function check_can_retake( $id ) {\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\tif ( $user ) {\n+\t\t\t$can_retake_times = $user->can_retry_course( $id );\n+\n+\t\t\tif ( $can_retake_times ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function get_course_rating( $id ) {\n+\t\tif ( ! function_exists( 'learn_press_get_course_rate' ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_rate = learn_press_get_course_rate( $id );\n+\n+\t\treturn ! empty( $course_rate ) ? floatval( number_format( $course_rate, 1 ) ) : 0;\n+\t}\n+\n+\tpublic function check_can_finish( $course ) {\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\tif ( $user && $course ) {\n+\t\t\t$check = $user->can_show_finish_course_btn( $course );\n+\n+\t\t\tif ( $check['status'] === 'success' ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get instructor info\n+\t *\n+\t * @param LP_Course $course\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_instructor_info( $course ) {\n+\t\tif ( ! $course ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$courseModel = CourseModel::find( $course->get_id(), true );\n+\t\t} elseif ( $course instanceof CourseModel ) {\n+\t\t\t$courseModel = $course;\n+\t\t} else {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$output     = array();\n+\t\t$extra_info = learn_press_get_user_extra_profile_info( $courseModel->get_id() );\n+\t\t$author     = $courseModel->get_author_model();\n+\t\tif ( ! $author ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$output['avatar']      = $author->get_avatar_url();\n+\t\t$output['id']          = $author->get_id();\n+\t\t$output['name']        = $author->get_display_name();\n+\t\t$output['description'] = $author->get_description();\n+\t\t$output['social']      = $extra_info;\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get instructor info\n+\t *\n+\t * @param UserModel $author\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_author_info( $author ): array {\n+\t\t$output                = [];\n+\t\t$output['avatar']      = $author->get_avatar_url();\n+\t\t$output['id']          = $author->get_id();\n+\t\t$output['name']        = $author->display_name;\n+\t\t$output['description'] = $author->get_description();\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_item_learned_ids( $request ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$filter = ! empty( $request['course_filter'] ) ? $request['course_filter'] : false;\n+\t\t$where  = $wpdb->prepare( 'user_id=%d AND item_type=%s', $user_id, $this->post_type ); \u002F\u002F phpcs:ignore\n+\n+\t\tif ( $filter ) {\n+\t\t\tif ( $filter === 'in-progress' ) {\n+\t\t\t\t$where .= $wpdb->prepare( ' AND status=%s AND graduation=%s', 'enrolled', 'in-progress' );\n+\t\t\t} elseif ( in_array( $filter, array( 'passed', 'failed' ) ) ) { \u002F\u002F is \"passed\" or \"failed\"\n+\t\t\t\t$where .= $wpdb->prepare( ' AND status=%s AND graduation=%s', 'finished', $filter );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$query = \"SELECT item_id FROM {$wpdb->prefix}learnpress_user_items WHERE {$where}\";\n+\n+\t\t$item_ids = $wpdb->get_col( $query );\n+\n+\t\treturn $item_ids;\n+\t}\n+\n+\tpublic function get_course_data_for_current_user( $id, $request ) {\n+\t\t$user = learn_press_get_user( get_current_user_id() );\n+\n+\t\tif ( empty( $user ) || empty( $id ) ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t$course_data = $user->get_course_data( $id );\n+\n+\t\tif ( ! $course_data ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'graduation'      => $course_data->get_graduation() ?? '',\n+\t\t\t'status'          => $course_data->get_status() ?? '',\n+\t\t\t'start_time'      => $course_data->get_start_time() ? lp_jwt_prepare_date_response( $course_data->get_start_time()->toSql() ) : null,\n+\t\t\t'end_time'        => $course_data->get_end_time() ? lp_jwt_prepare_date_response( $course_data->get_end_time()->toSql() ) : null,\n+\t\t\t'expiration_time' => $course_data->get_expiration_time() ? lp_jwt_prepare_date_response( $course_data->get_expiration_time()->toSql() ) : '',\n+\t\t\t'result'          => $course_data->calculate_course_results(),\n+\t\t);\n+\t}\n+\n+\tpublic function get_course_taxonomy( $id, $taxonomy ) {\n+\t\t$terms  = get_the_terms( $id, $taxonomy );\n+\t\t$output = array();\n+\n+\t\tif ( $terms ) {\n+\t\t\tforeach ( $terms as $term ) {\n+\t\t\t\t$output[] = array(\n+\t\t\t\t\t'id'   => $term->term_id,\n+\t\t\t\t\t'name' => $term->name,\n+\t\t\t\t\t'slug' => $term->slug,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get Items of sections\n+\t *\n+\t * @param LP_Course $course\n+\t *\n+\t * @throws Exception\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function get_all_items( $course ): array {\n+\t\t$curriculum  = $course->get_curriculum();\n+\t\t$user        = learn_press_get_current_user();\n+\t\t$user_course = $user ? $user->get_course_data( $course->get_id() ) : false;\n+\t\t$output      = array();\n+\n+\t\tif ( ! empty( $curriculum ) ) {\n+\t\t\tforeach ( $curriculum as $section ) {\n+\t\t\t\tif ( $section ) {\n+\t\t\t\t\t$data = array(\n+\t\t\t\t\t\t'id'          => $section->get_id(),\n+\t\t\t\t\t\t'title'       => $section->get_title(),\n+\t\t\t\t\t\t'course_id'   => $section->get_course_id(),\n+\t\t\t\t\t\t'description' => $section->get_description(),\n+\t\t\t\t\t\t'order'       => $section->get_order(),\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( $user_course && $user->has_enrolled_or_finished( $section->get_course_id() ) ) {\n+\t\t\t\t\t\t$data['percent'] = $user_course->get_percent_completed_items( '', $section->get_id() );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$data_item = array();\n+\n+\t\t\t\t\t$items = $section->get_items();\n+\n+\t\t\t\t\tif ( ! empty( $items ) ) {\n+\t\t\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\t\t\t$post = get_post( $item->get_id() );\n+\n+\t\t\t\t\t\t\t$format = array(\n+\t\t\t\t\t\t\t\t'day'    => __( '%s days', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'hour'   => __( '%s hours', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'minute' => __( '%s mins', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'second' => __( '%s secs', 'learnpress' ),\n+\t\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\t\t$user_item = $user_course ? $user_course->get_item( $item->get_id() ) : false;\n+\n+\t\t\t\t\t\t\tif ( $user ) {\n+\t\t\t\t\t\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $section->get_course_id() ) );\n+\t\t\t\t\t\t\t\t$can_view_item           = $user->can_view_item( $item->get_id(), $can_view_content_course );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t$data_item[] = array(\n+\t\t\t\t\t\t\t\t'id'         => $item->get_id(),\n+\t\t\t\t\t\t\t\t'type'       => $item->get_item_type(),\n+\t\t\t\t\t\t\t\t'title'      => $post->post_title,\n+\t\t\t\t\t\t\t\t'preview'    => $item->is_preview(),\n+\t\t\t\t\t\t\t\t'duration'   => $item->get_duration()->to_timer( $format, true ),\n+\t\t\t\t\t\t\t\t'graduation' => $user_item ? $user_item->get_graduation() : '',\n+\t\t\t\t\t\t\t\t'status'     => $user_item ? $user_item->get_status() : '',\n+\t\t\t\t\t\t\t\t'locked'     => ! isset( $can_view_item->flag ) || ! $can_view_item->flag,\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$data['items'] = $data_item;\n+\t\t\t\t\t$output[]      = $data;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_course_meta( $id ) {\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\tif ( ! class_exists( 'LP_Meta_Box' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php';\n+\t\t}\n+\n+\t\tif ( ! class_exists( 'LP_Meta_Box_Course' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php';\n+\t\t}\n+\n+\t\t$metabox = new LP_Meta_Box_Course();\n+\n+\t\t$output = array();\n+\n+\t\tforeach ( $metabox->metabox( $id ) as $key => $tab ) {\n+\t\t\tif ( isset( $tab['content'] ) ) {\n+\t\t\t\tforeach ( $tab['content'] as $meta_key => $object ) {\n+\t\t\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t\t\t$object->id          = $meta_key;\n+\t\t\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tprotected function prepare_objects_query( $request ) {\n+\t\t$args = parent::prepare_objects_query( $request );\n+\n+\t\t$taxonomies = array(\n+\t\t\t'course_category' => 'category',\n+\t\t\t'course_tag'      => 'tag',\n+\t\t);\n+\n+\t\tforeach ( $taxonomies as $taxonomy => $key ) {\n+\t\t\tif ( ! empty( $request[ $key ] ) ) {\n+\t\t\t\t$tax_query[] = array(\n+\t\t\t\t\t'taxonomy' => $taxonomy,\n+\t\t\t\t\t'field'    => 'term_id',\n+\t\t\t\t\t'terms'    => $request[ $key ],\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $tax_query ) ) {\n+\t\t\t$args['tax_query'] = $tax_query;\n+\t\t}\n+\n+\t\t$orderby = $request->get_param( 'orderby' );\n+\t\t$order   = $request->get_param( 'order' );\n+\n+\t\t$orderby = strtolower( is_array( $orderby ) ? (string) current( $orderby ) : (string) $orderby );\n+\t\t$order   = strtoupper( is_array( $order ) ? (string) current( $order ) : (string) $order );\n+\n+\t\tswitch ( $orderby ) {\n+\t\t\tcase 'id':\n+\t\t\t\t$args['orderby'] = 'ID';\n+\t\t\t\tbreak;\n+\t\t\tcase 'menu_order':\n+\t\t\t\t$args['orderby'] = 'menu_order title';\n+\t\t\t\tbreak;\n+\t\t\tcase 'title':\n+\t\t\t\t$args['orderby'] = 'post_title';\n+\t\t\t\t$args['order']   = ( 'DESC' === $order ) ? 'DESC' : 'ASC';\n+\t\t\t\tbreak;\n+\t\t\tcase 'relevance':\n+\t\t\t\t$args['orderby'] = 'relevance';\n+\t\t\t\t$args['order']   = 'DESC';\n+\t\t\t\tbreak;\n+\t\t\tcase 'rand':\n+\t\t\t\t$args['orderby'] = 'rand'; \u002F\u002F @codingStandardsIgnoreLine\n+\t\t\t\tbreak;\n+\t\t\tcase 'date':\n+\t\t\t\t$args['orderby'] = 'date ID';\n+\t\t\t\t$args['order']   = ( 'ASC' === $order ) ? 'ASC' : 'DESC';\n+\t\t\t\tbreak;\n+\t\t\tcase 'price':\n+\t\t\t\t$args['orderby']  = 'meta_value_num';\n+\t\t\t\t$args['meta_key'] = '_lp_price';\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\tif ( is_bool( $request['on_sale'] ) ) {\n+\t\t\t$on_sale_key = $request['on_sale'] ? 'post__in' : 'post__not_in';\n+\n+\t\t\t$filter              = new LP_Course_Filter();\n+\t\t\t$filter->only_fields = array( 'ID' );\n+\n+\t\t\t$filter      = LP_Course_DB::getInstance()->get_courses_sort_by_sale( $filter );\n+\t\t\t$on_sale_ids = LP_Course_DB::getInstance()->get_courses( $filter );\n+\t\t\t$on_sale_ids = LP_Database::get_values_by_key( $on_sale_ids );\n+\t\t\t$on_sale_ids = empty( $on_sale_ids ) ? array( 0 ) : $on_sale_ids;\n+\n+\t\t\t$args[ $on_sale_key ] += $on_sale_ids;\n+\t\t} elseif ( is_bool( $request['popular'] ) ) {\n+\t\t\t$on_popular_key = $request['popular'] ? 'post__in' : 'post__not_in';\n+\n+\t\t\t$filter              = new LP_Course_Filter();\n+\t\t\t$filter->only_fields = array( 'ID' );\n+\t\t\t$filter->limit       = $request['per_page'] ?? 10;\n+\t\t\t$filter->page        = $request['page'] ?? 1;\n+\n+\t\t\t$filter         = LP_Course_DB::getInstance()->get_courses_order_by_popular( $filter );\n+\t\t\t$on_popular_ids = LP_Course_DB::getInstance()->get_courses( $filter );\n+\t\t\t$on_popular_ids = LP_Database::get_values_by_key( $on_popular_ids );\n+\n+\t\t\t$on_popular_ids = empty( $on_popular_ids ) ? array( 0 ) : $on_popular_ids;\n+\n+\t\t\t$args[ $on_popular_key ] += $on_popular_ids;\n+\n+\t\t\t$args['orderby'] = 'post__in';\n+\t\t}\n+\n+\t\treturn $args;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => $this->post_type,\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'                    => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'                  => array(\n+\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'slug'                  => array(\n+\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'permalink'             => array(\n+\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'image'                 => array(\n+\t\t\t\t\t'description' => __( 'Course Image URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'date_created'          => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => array( 'string', 'null' ),\n+\t\t\t\t\t'format'      => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created_gmt'      => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => array( 'string', 'null' ),\n+\t\t\t\t\t'format'      => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified'         => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => array( 'string', 'null' ),\n+\t\t\t\t\t'format'      => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified_gmt'     => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => array( 'string', 'null' ),\n+\t\t\t\t\t'format'      => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'on_sale'               => array(\n+\t\t\t\t\t'description' => __( 'Display courses if they are on sale.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'status'                => array(\n+\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => 'publish',\n+\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'content'               => array(\n+\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'excerpt'               => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'duration'              => array(\n+\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'count_students'        => array(\n+\t\t\t\t\t'description' => __( 'Count the number of enrolled students.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'can_finish'            => array(\n+\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'can_retake'            => array(\n+\t\t\t\t\t'description' => __( 'Can retake the course', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'ratake_count'          => array(\n+\t\t\t\t\t'description' => __( 'Total retakes', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'rataken'               => array(\n+\t\t\t\t\t'description' => __( 'Retaken', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'rating'                => array(\n+\t\t\t\t\t'description' => __( 'Course Review add-on', 'learnpress' ),\n+\t\t\t\t\t'type'        => array( 'boolean', 'integer' ),\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'price'                 => array(\n+\t\t\t\t\t'description' => __( 'Course Price', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'price_rendered'        => array(\n+\t\t\t\t\t'description' => __( 'Course Price Rendered', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'origin_price'          => array(\n+\t\t\t\t\t'description' => __( 'Course Origin Price', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'origin_price_rendered' => array(\n+\t\t\t\t\t'description' => __( 'Course Origin Price Rendered', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'sale_price'            => array(\n+\t\t\t\t\t'description' => __( 'Course Sale Price', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'sale_price_rendered'   => array(\n+\t\t\t\t\t'description' => __( 'Course Sale Price Rendered', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'categories'            => array(\n+\t\t\t\t\t'description' => __( 'List of categories.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type'       => 'object',\n+\t\t\t\t\t\t'properties' => array(\n+\t\t\t\t\t\t\t'id'   => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Category ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'name' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Category name.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'slug' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Category slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'tags'                  => array(\n+\t\t\t\t\t'description' => __( 'List of tags.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type'       => 'object',\n+\t\t\t\t\t\t'properties' => array(\n+\t\t\t\t\t\t\t'id'   => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Tag ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'name' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Tag name.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'slug' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Tag slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'instructor'            => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course sections and items..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type'       => 'object',\n+\t\t\t\t\t\t'properties' => array(\n+\t\t\t\t\t\t\t'id'          => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'User ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'name'        => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Display name.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'description' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Tag slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'social'      => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Social Infor.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'sections'              => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course sections and items..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type'       => 'object',\n+\t\t\t\t\t\t'properties' => array(\n+\t\t\t\t\t\t\t'id'          => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Section ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'title'       => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Section name.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'course_id'   => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Course ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'description' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Section description.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Section items.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t\t\t\t'id'         => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'type'       => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item Type.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'title'      => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'preview'    => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'percent'    => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Percent.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'duration'   => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Duration.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'graduation' => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Graduation.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'status'     => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Status.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t'locked'     => array(\n+\t\t\t\t\t\t\t\t\t\t'description' => __( 'Locked.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'course_data'           => array(\n+\t\t\t\t\t'description' => __( 'List of course user data.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type'       => 'object',\n+\t\t\t\t\t\t'properties' => array(\n+\t\t\t\t\t\t\t'graduation'      => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Graduation', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'status'          => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Status', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'start_time'      => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Start time', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'end_time'        => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'End time', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'expiration_time' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Expiration time', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+\n+\tpublic function get_collection_params() {\n+\t\t$params = parent::get_collection_params();\n+\n+\t\t$params['orderby']['enum'] = array_merge( $params['orderby']['enum'], array( 'menu_order', 'price' ) );\n+\n+\t\t$params['category']      = array(\n+\t\t\t'description'       => 'Limit the result set to courses assigned to a specific category ID.',\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['tag']           = array(\n+\t\t\t'description'       => 'Limit the result set to courses assigned to a specific tag ID.',\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['course_filter'] = array(\n+\t\t\t'description'       => 'Filter by course to in-progress, passed, failed.',\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\n+\t\t$params['on_sale'] = array(\n+\t\t\t'description'       => 'Get item learned by user.',\n+\t\t\t'type'              => 'boolean',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\n+\t\t$params['popular']  = array(\n+\t\t\t'description'       => 'Get item popularity.',\n+\t\t\t'type'              => 'boolean',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['optimize'] = array(\n+\t\t\t'description'       => 'Disable some fields in the schema.',\n+\t\t\t'type'              => array( 'boolean', 'string' ),\n+\t\t\t'validate_callback' => 'wp_parse_id_list',\n+\t\t);\n+\n+\t\treturn $params;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,635 +1,635 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserLessonModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-class LP_Jwt_Lessons_V1_Controller extends LP_REST_Jwt_Posts_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'lessons';\r\n-\r\n-\tprotected $post_type = LP_LESSON_CPT;\r\n-\r\n-\tprotected $hierarchical = true;\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'view',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'finish_lesson' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'edit',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if a course can be read.\r\n-\t *\r\n-\t * Correctly handles courses with the inherit status.\r\n-\t *\r\n-\t * @author Nhamdv\r\n-\t *\r\n-\t * @return bool Whether the post can be read.\r\n-\t * *\u002F\r\n-\tpublic function check_read_permission( $post_id ) {\r\n-\t\tif ( empty( absint( $post_id ) ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $post_id );\r\n-\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t$post_status_obj = get_post_status_object( $post->post_status );\r\n-\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\u002F\u002F Get course ID by lesson ID assigned.\r\n-\t\t$course_id = $this->get_course_by_item_id( $post_id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\r\n-\r\n-\t\t$can_view_item = $user->can_view_item( $post_id, $can_view_content_course );\r\n-\r\n-\t\tif ( ! $can_view_item->flag ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Can we read the parent if we're inheriting?\r\n-\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\r\n-\t\t\t$parent = get_post( $post->post_parent );\r\n-\r\n-\t\t\tif ( $parent ) {\r\n-\t\t\t\treturn $this->check_read_permission( $parent );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tprotected function get_object( $lesson = 0 ) {\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( false === $lesson && isset( $post, $post->ID ) && LP_LESSON_CPT === get_post_type( $post->ID ) ) {\r\n-\t\t\t$id = absint( $post->ID );\r\n-\t\t} elseif ( is_numeric( $lesson ) ) {\r\n-\t\t\t$id = $lesson;\r\n-\t\t} elseif ( $lesson instanceof LP_Lesson ) {\r\n-\t\t\t$id = $lesson->get_id();\r\n-\t\t} elseif ( ! empty( $lesson->ID ) ) {\r\n-\t\t\t$id = $lesson->ID;\r\n-\t\t}\r\n-\r\n-\t\treturn LP_Course_Item::get_item( $id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course ID by lesson ID assigned.\r\n-\t *\r\n-\t * @param [type] $item_id\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function get_course_by_item_id( $item_id ) {\r\n-\t\tstatic $output;\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( empty( $item_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $output ) ) {\r\n-\t\t\t$output = $wpdb->get_var(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT c.ID FROM {$wpdb->posts} c\r\n-\t\t\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\r\n-\t\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\r\n-\t\t\t\t\tWHERE si.item_id = %d ORDER BY si.section_id DESC LIMIT 1\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( $output ) {\r\n-\t\t\treturn absint( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function finish_lesson( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$id = isset( $request['id'] ) ? absint( $request['id'] ) : '';\r\n-\t\t\tif ( empty( $id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: No lesson available!.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lessonModel = LessonPostModel::find( $id, true );\r\n-\t\t\tif ( ! $lessonModel ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: Lesson is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_id = $this->get_course_by_item_id( $id );\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: This lesson is not assigned in the Course.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t$userModel   = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\tif ( empty( $courseModel ) || empty( $userModel ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course or User available.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userLessonModel = UserLessonModel::find_user_item(\r\n-\t\t\t\tget_current_user_id(),\r\n-\t\t\t\t$id,\r\n-\t\t\t\t$lessonModel->post_type,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\t\t\tif ( ! $userLessonModel instanceof UserLessonModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'You have not started lesson', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userLessonModel->set_complete();\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = esc_html__( 'Congrats! You have completed the lesson successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $object, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\t\t$data    = $this->get_lesson_data( $object, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\r\n-\t}\r\n-\r\n-\tprotected function get_lesson_data( $object, $context = 'view' ) {\r\n-\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\r\n-\t\t$fields  = $this->get_fields_for_response( $request );\r\n-\r\n-\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\r\n-\t\t$post = get_post( $id );\r\n-\t\t$data = array();\r\n-\r\n-\t\t$assigned = $this->get_assigned( $id );\r\n-\r\n-\t\t$course_id = 0;\r\n-\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\r\n-\t\t\t$course_id = $assigned['course']['id'];\r\n-\t\t\t$object->set_course( $course_id );\r\n-\t\t}\r\n-\r\n-\t\t$userLessonModel = UserLessonModel::find_user_item(\r\n-\t\t\tget_current_user_id(),\r\n-\t\t\t$id,\r\n-\t\t\tLP_LESSON_CPT,\r\n-\t\t\t$course_id,\r\n-\t\t\tLP_COURSE_CPT,\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\t\t$end_time        = '';\r\n-\r\n-\t\tif ( $userLessonModel instanceof UserLessonModel ) {\r\n-\t\t\t$end_time = $userLessonModel->get_end_time();\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $id;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $post->post_title;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'slug':\r\n-\t\t\t\t\t$data['slug'] = $post->post_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'permalink':\r\n-\t\t\t\t\t$data['permalink'] = $object->get_permalink();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created':\r\n-\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created_gmt':\r\n-\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified':\r\n-\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified_gmt':\r\n-\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$data['status'] = $post->post_status;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'content':\r\n-\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'excerpt':\r\n-\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'can_finish_course':\r\n-\t\t\t\t\t$data['can_finish_course'] = $this->check_can_finish_course( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'assigned':\r\n-\t\t\t\t\t$data['assigned'] = $assigned;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'results':\r\n-\t\t\t\t\t$data['results'] = $this->get_lesson_results( $object );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'video_intro':\r\n-\t\t\t\t\t$data['video_intro'] = $this->get_video_intro( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$data['end_time']  = $end_time;\r\n-\t\t$data['meta_data'] = $this->get_course_meta( $id );\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function get_video_intro( $id ) {\r\n-\t\t$video_intro = get_post_meta( $id, '_lp_lesson_video_intro', true );\r\n-\r\n-\t\tif ( ! $video_intro ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( wp_oembed_get( $video_intro ) ) {\r\n-\t\t\treturn wp_oembed_get( $video_intro );\r\n-\t\t}\r\n-\r\n-\t\treturn do_shortcode( $video_intro );\r\n-\t}\r\n-\r\n-\tpublic function check_can_finish_course( $id ) {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user || ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( $user && $course ) {\r\n-\t\t\t$check = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\t\tif ( $check['status'] === 'success' ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function get_lesson_results( $lesson ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\t$user_id = learn_press_get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id || ! $lesson ) {\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t$id = ! empty( $lesson->ID ) ? $lesson->ID : $lesson->get_id();\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t$query = $wpdb->prepare( \"SELECT status FROM {$wpdb->prefix}learnpress_user_items WHERE user_id=%d AND item_id=%d AND ref_id=%d\", $user_id, $id, $course_id );\r\n-\r\n-\t\t$status = $wpdb->get_var( $query );\r\n-\r\n-\t\t$output['status'] = ! empty( $status ) ? $status : '';\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_course_meta( $id ) {\r\n-\t\tif ( ! class_exists( 'LP_Meta_Box_Lesson' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php';\r\n-\t\t}\r\n-\r\n-\t\t$metabox = new LP_Meta_Box_Lesson();\r\n-\r\n-\t\t$output = array();\r\n-\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\r\n-\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t$object->id          = $meta_key;\r\n-\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_assigned( $id ) {\r\n-\t\t$courses = learn_press_get_item_courses( $id );\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( $courses ) {\r\n-\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t$output['course'] = array(\r\n-\t\t\t\t\t'id'      => $course->ID,\r\n-\t\t\t\t\t'title'   => $course->post_title,\r\n-\t\t\t\t\t'slug'    => $course->post_name,\r\n-\t\t\t\t\t'content' => $course->post_content,\r\n-\t\t\t\t\t'author'  => $course->post_author,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => $this->post_type,\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'                => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permalink'         => array(\r\n-\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created'      => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created_gmt'  => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified'     => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified_gmt' => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'            => array(\r\n-\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => 'publish',\r\n-\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'           => array(\r\n-\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'excerpt'           => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'can_finish_course' => array(\r\n-\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'duration'          => array(\r\n-\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'assigned'          => array(\r\n-\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'id'      => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'title'   => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'slug'    => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'content' => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'author'  => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'results'           => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the Lesson result..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'status' => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Status.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'video_intro'       => array(\r\n-\t\t\t\t\t'description' => __( 'Video intro.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * API get item lesson\r\n-\t * @since 4.1.6.9.1\r\n-\t *\r\n-\t * @param $request\r\n-\t *\r\n-\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_item( $request ) {\r\n-\t\t$object = $this->get_object( (int) $request['id'] );\r\n-\r\n-\t\tif ( ! $object || 0 === $object->get_id() ) {\r\n-\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_invalid_id\", esc_html__( 'Invalid ID.', 'learnpress' ), array( 'status' => 404 ) );\r\n-\t\t}\r\n-\r\n-\t\t$item_id = (int) $request['id'];\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $item_id );\r\n-\t\t$course    = learn_press_get_course( $course_id );\r\n-\t\tif ( $course && is_user_logged_in() ) {\r\n-\t\t\t$user        = learn_press_get_current_user();\r\n-\t\t\t$course_data = $user->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data && $course_data->is_enrolled() ) {\r\n-\t\t\t\t$item = $course_data->get_item( $item_id );\r\n-\r\n-\t\t\t\tif ( ! $item ) {\r\n-\t\t\t\t\t$item = LP_User_Item::get_item_object( $item_id );\r\n-\r\n-\t\t\t\t\t$item->set_ref_id( $course_id );\r\n-\t\t\t\t\t$item->set_parent_id( $course_data->get_user_item_id() );\r\n-\t\t\t\t\t$item->update();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$data     = $this->prepare_object_for_response( $object, $request );\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\tif ( $this->public ) {\r\n-\t\t\t$response->link_header( 'alternate', $this->get_permalink( $object ), array( 'type' => 'text\u002Fhtml' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\UserItems\\UserLessonModel;\n+use LearnPress\\Models\\UserModel;\n+\n+class LP_Jwt_Lessons_V1_Controller extends LP_REST_Jwt_Posts_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'lessons';\n+\n+\tprotected $post_type = LP_LESSON_CPT;\n+\n+\tprotected $hierarchical = true;\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'view',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'finish_lesson' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'edit',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Checks if a course can be read.\n+\t *\n+\t * Correctly handles courses with the inherit status.\n+\t *\n+\t * @author Nhamdv\n+\t *\n+\t * @return bool Whether the post can be read.\n+\t * *\u002F\n+\tpublic function check_read_permission( $post_id ) {\n+\t\tif ( empty( absint( $post_id ) ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$post = get_post( $post_id );\n+\n+\t\tif ( ! $post ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t$post_status_obj = get_post_status_object( $post->post_status );\n+\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\u002F\u002F Get course ID by lesson ID assigned.\n+\t\t$course_id = $this->get_course_by_item_id( $post_id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\n+\n+\t\t$can_view_item = $user->can_view_item( $post_id, $can_view_content_course );\n+\n+\t\tif ( ! $can_view_item->flag ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F Can we read the parent if we're inheriting?\n+\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\n+\t\t\t$parent = get_post( $post->post_parent );\n+\n+\t\t\tif ( $parent ) {\n+\t\t\t\treturn $this->check_read_permission( $parent );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tprotected function get_object( $lesson = 0 ) {\n+\t\tglobal $post;\n+\n+\t\tif ( false === $lesson && isset( $post, $post->ID ) && LP_LESSON_CPT === get_post_type( $post->ID ) ) {\n+\t\t\t$id = absint( $post->ID );\n+\t\t} elseif ( is_numeric( $lesson ) ) {\n+\t\t\t$id = $lesson;\n+\t\t} elseif ( $lesson instanceof LP_Lesson ) {\n+\t\t\t$id = $lesson->get_id();\n+\t\t} elseif ( ! empty( $lesson->ID ) ) {\n+\t\t\t$id = $lesson->ID;\n+\t\t}\n+\n+\t\treturn LP_Course_Item::get_item( $id );\n+\t}\n+\n+\t\u002F**\n+\t * Get course ID by lesson ID assigned.\n+\t *\n+\t * @param [type] $item_id\n+\t * @return void\n+\t *\u002F\n+\tprotected function get_course_by_item_id( $item_id ) {\n+\t\tstatic $output;\n+\n+\t\tglobal $wpdb;\n+\n+\t\tif ( empty( $item_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! isset( $output ) ) {\n+\t\t\t$output = $wpdb->get_var(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT c.ID FROM {$wpdb->posts} c\n+\t\t\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\n+\t\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\n+\t\t\t\t\tWHERE si.item_id = %d ORDER BY si.section_id DESC LIMIT 1\n+\t\t\t\t\t\",\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( $output ) {\n+\t\t\treturn absint( $output );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function finish_lesson( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$id = isset( $request['id'] ) ? absint( $request['id'] ) : '';\n+\t\t\tif ( empty( $id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: No lesson available!.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$lessonModel = LessonPostModel::find( $id, true );\n+\t\t\tif ( ! $lessonModel ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: Lesson is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_id = $this->get_course_by_item_id( $id );\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: This lesson is not assigned in the Course.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t$userModel   = UserModel::find( get_current_user_id(), true );\n+\n+\t\t\tif ( empty( $courseModel ) || empty( $userModel ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course or User available.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userLessonModel = UserLessonModel::find_user_item(\n+\t\t\t\tget_current_user_id(),\n+\t\t\t\t$id,\n+\t\t\t\t$lessonModel->post_type,\n+\t\t\t\t$course_id,\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\ttrue\n+\t\t\t);\n+\t\t\tif ( ! $userLessonModel instanceof UserLessonModel ) {\n+\t\t\t\tthrow new Exception( __( 'You have not started lesson', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userLessonModel->set_complete();\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = esc_html__( 'Congrats! You have completed the lesson successfully', 'learnpress' );\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\tpublic function prepare_object_for_response( $object, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\t\t$data    = $this->get_lesson_data( $object, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\n+\t}\n+\n+\tprotected function get_lesson_data( $object, $context = 'view' ) {\n+\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\n+\t\t$fields  = $this->get_fields_for_response( $request );\n+\n+\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\n+\t\t$post = get_post( $id );\n+\t\t$data = array();\n+\n+\t\t$assigned = $this->get_assigned( $id );\n+\n+\t\t$course_id = 0;\n+\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\n+\t\t\t$course_id = $assigned['course']['id'];\n+\t\t\t$object->set_course( $course_id );\n+\t\t}\n+\n+\t\t$userLessonModel = UserLessonModel::find_user_item(\n+\t\t\tget_current_user_id(),\n+\t\t\t$id,\n+\t\t\tLP_LESSON_CPT,\n+\t\t\t$course_id,\n+\t\t\tLP_COURSE_CPT,\n+\t\t\ttrue\n+\t\t);\n+\t\t$end_time        = '';\n+\n+\t\tif ( $userLessonModel instanceof UserLessonModel ) {\n+\t\t\t$end_time = $userLessonModel->get_end_time();\n+\t\t}\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $id;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $post->post_title;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'slug':\n+\t\t\t\t\t$data['slug'] = $post->post_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'permalink':\n+\t\t\t\t\t$data['permalink'] = $object->get_permalink();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created':\n+\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created_gmt':\n+\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified':\n+\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified_gmt':\n+\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$data['status'] = $post->post_status;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'content':\n+\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'excerpt':\n+\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'can_finish_course':\n+\t\t\t\t\t$data['can_finish_course'] = $this->check_can_finish_course( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'assigned':\n+\t\t\t\t\t$data['assigned'] = $assigned;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'results':\n+\t\t\t\t\t$data['results'] = $this->get_lesson_results( $object );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'video_intro':\n+\t\t\t\t\t$data['video_intro'] = $this->get_video_intro( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$data['end_time']  = $end_time;\n+\t\t$data['meta_data'] = $this->get_course_meta( $id );\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function get_video_intro( $id ) {\n+\t\t$video_intro = get_post_meta( $id, '_lp_lesson_video_intro', true );\n+\n+\t\tif ( ! $video_intro ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( wp_oembed_get( $video_intro ) ) {\n+\t\t\treturn wp_oembed_get( $video_intro );\n+\t\t}\n+\n+\t\treturn do_shortcode( $video_intro );\n+\t}\n+\n+\tpublic function check_can_finish_course( $id ) {\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user || ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_id = $this->get_course_by_item_id( $id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\tif ( $user && $course ) {\n+\t\t\t$check = $user->can_show_finish_course_btn( $course );\n+\n+\t\t\tif ( $check['status'] === 'success' ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function get_lesson_results( $lesson ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$output = array();\n+\n+\t\t$user_id = learn_press_get_current_user_id();\n+\n+\t\tif ( ! $user_id || ! $lesson ) {\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t$id = ! empty( $lesson->ID ) ? $lesson->ID : $lesson->get_id();\n+\n+\t\t$course_id = $this->get_course_by_item_id( $id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t$query = $wpdb->prepare( \"SELECT status FROM {$wpdb->prefix}learnpress_user_items WHERE user_id=%d AND item_id=%d AND ref_id=%d\", $user_id, $id, $course_id );\n+\n+\t\t$status = $wpdb->get_var( $query );\n+\n+\t\t$output['status'] = ! empty( $status ) ? $status : '';\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_course_meta( $id ) {\n+\t\tif ( ! class_exists( 'LP_Meta_Box_Lesson' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flesson\u002Fsettings.php';\n+\t\t}\n+\n+\t\t$metabox = new LP_Meta_Box_Lesson();\n+\n+\t\t$output = array();\n+\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\n+\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t$object->id          = $meta_key;\n+\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_assigned( $id ) {\n+\t\t$courses = learn_press_get_item_courses( $id );\n+\n+\t\t$output = array();\n+\n+\t\tif ( $courses ) {\n+\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t$output['course'] = array(\n+\t\t\t\t\t'id'      => $course->ID,\n+\t\t\t\t\t'title'   => $course->post_title,\n+\t\t\t\t\t'slug'    => $course->post_name,\n+\t\t\t\t\t'content' => $course->post_content,\n+\t\t\t\t\t'author'  => $course->post_author,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => $this->post_type,\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'                => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'              => array(\n+\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'slug'              => array(\n+\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'permalink'         => array(\n+\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created'      => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created_gmt'  => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified'     => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified_gmt' => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'status'            => array(\n+\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => 'publish',\n+\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'content'           => array(\n+\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'excerpt'           => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'can_finish_course' => array(\n+\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'duration'          => array(\n+\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'assigned'          => array(\n+\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'id'      => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'title'   => array(\n+\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'slug'    => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'content' => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'author'  => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'results'           => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the Lesson result..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'status' => array(\n+\t\t\t\t\t\t\t'description' => __( 'Status.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'video_intro'       => array(\n+\t\t\t\t\t'description' => __( 'Video intro.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+\n+\t\u002F**\n+\t * API get item lesson\n+\t * @since 4.1.6.9.1\n+\t *\n+\t * @param $request\n+\t *\n+\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_item( $request ) {\n+\t\t$object = $this->get_object( (int) $request['id'] );\n+\n+\t\tif ( ! $object || 0 === $object->get_id() ) {\n+\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_invalid_id\", esc_html__( 'Invalid ID.', 'learnpress' ), array( 'status' => 404 ) );\n+\t\t}\n+\n+\t\t$item_id = (int) $request['id'];\n+\n+\t\t$course_id = $this->get_course_by_item_id( $item_id );\n+\t\t$course    = learn_press_get_course( $course_id );\n+\t\tif ( $course && is_user_logged_in() ) {\n+\t\t\t$user        = learn_press_get_current_user();\n+\t\t\t$course_data = $user->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data && $course_data->is_enrolled() ) {\n+\t\t\t\t$item = $course_data->get_item( $item_id );\n+\n+\t\t\t\tif ( ! $item ) {\n+\t\t\t\t\t$item = LP_User_Item::get_item_object( $item_id );\n+\n+\t\t\t\t\t$item->set_ref_id( $course_id );\n+\t\t\t\t\t$item->set_parent_id( $course_data->get_user_item_id() );\n+\t\t\t\t\t$item->update();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$data     = $this->prepare_object_for_response( $object, $request );\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\tif ( $this->public ) {\n+\t\t\t$response->link_header( 'alternate', $this->get_permalink( $object ), array( 'type' => 'text\u002Fhtml' ) );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,639 +1,639 @@\n-\u003C?php\r\n-abstract class LP_REST_Jwt_Posts_Controller extends LP_REST_Jwt_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = '';\r\n-\r\n-\tprotected $post_type = '';\r\n-\r\n-\tprotected $public = false;\r\n-\r\n-\tprotected $hierarchical = false;\r\n-\r\n-\tprotected function get_object( $id ) {\r\n-\t\treturn new WP_Error( 'invalid-method', sprintf( __( \"The method '%s' not implemented. It must be overridden in the subclass.\", 'learnpress' ), __METHOD__ ), array( 'status' => 405 ) );\r\n-\t}\r\n-\r\n-\tpublic function get_items_permissions_check( $request ) {\r\n-\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'read' ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_jwt_rest_cannot_view', __( 'Sorry, you cannot get lists', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if a given request has access to create an item.\r\n-\t *\r\n-\t * @param  WP_REST_Request $request Full details about the request.\r\n-\t * @return WP_Error|boolean\r\n-\t *\u002F\r\n-\tpublic function create_item_permissions_check( $request ) {\r\n-\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'create' ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_item_permissions_check( $request ) {\r\n-\t\tif ( $this->post_type !== get_post_type( (int) $request['id'] ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_jwt_rest_not_in_post_type', __( 'Sorry, You cannot view this item.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\t$object = $this->get_object( (int) $request['id'] );\r\n-\r\n-\t\tif ( $object && 0 !== $object->get_id() && ! $this->check_read_permission( $object->get_id() ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_jwt_rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function check_read_permission( $post_id ) {\r\n-\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_item( $request ) {\r\n-\t\t$object = $this->get_object( (int) $request['id'] );\r\n-\r\n-\t\tif ( ! $object || 0 === $object->get_id() ) {\r\n-\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_invalid_id\", esc_html__( 'Invalid ID.', 'learnpress' ), array( 'status' => 404 ) );\r\n-\t\t}\r\n-\r\n-\t\t$data     = $this->prepare_object_for_response( $object, $request );\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\tif ( $this->public ) {\r\n-\t\t\t$response->link_header( 'alternate', $this->get_permalink( $object ), array( 'type' => 'text\u002Fhtml' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\tpublic function get_items( $request ) {\r\n-\t\t$query_args    = $this->prepare_objects_query( $request );\r\n-\t\t$query_results = $this->get_objects( $query_args );\r\n-\r\n-\t\t$objects = array();\r\n-\t\tforeach ( $query_results['objects'] as $object ) {\r\n-\t\t\t$object_id = ! empty( $object->ID ) ? $object->ID : $object->get_id();\r\n-\r\n-\t\t\tif ( ! $this->check_read_permission( $object_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data      = $this->prepare_object_for_response( $object, $request );\r\n-\t\t\t$objects[] = $this->prepare_response_for_collection( $data );\r\n-\t\t}\r\n-\r\n-\t\t$page      = (int) $query_args['paged'];\r\n-\t\t$max_pages = $query_results['pages'];\r\n-\r\n-\t\t$response = rest_ensure_response( $objects );\r\n-\t\t$response->header( 'X-WP-Total', $query_results['total'] );\r\n-\t\t$response->header( 'X-WP-TotalPages', (int) $max_pages );\r\n-\r\n-\t\t$base          = $this->rest_base;\r\n-\t\t$attrib_prefix = '(?P\u003C';\r\n-\r\n-\t\tif ( strpos( $base, $attrib_prefix ) !== false ) {\r\n-\t\t\t$attrib_names = array();\r\n-\t\t\tpreg_match( '\u002F\\(\\?P\u003C[^>]+>.*\\)\u002F', $base, $attrib_names, PREG_OFFSET_CAPTURE );\r\n-\r\n-\t\t\tforeach ( $attrib_names as $attrib_name_match ) {\r\n-\t\t\t\t$beginning_offset = strlen( $attrib_prefix );\r\n-\t\t\t\t$attrib_name_end  = strpos( $attrib_name_match[0], '>', $attrib_name_match[1] );\r\n-\t\t\t\t$attrib_name      = substr( $attrib_name_match[0], $beginning_offset, $attrib_name_end - $beginning_offset );\r\n-\r\n-\t\t\t\tif ( isset( $request[ $attrib_name ] ) ) {\r\n-\t\t\t\t\t$base = str_replace( \"(?P\u003C$attrib_name>[\\d]+)\", $request[ $attrib_name ], $base );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$base = esc_url_raw( add_query_arg( $request->get_query_params(), rest_url( sprintf( '\u002F%s\u002F%s', $this->namespace, $base ) ) ) );\r\n-\r\n-\t\tif ( $page > 1 ) {\r\n-\t\t\t$prev_page = $page - 1;\r\n-\t\t\tif ( $prev_page > $max_pages ) {\r\n-\t\t\t\t$prev_page = $max_pages;\r\n-\t\t\t}\r\n-\t\t\t$prev_link = esc_url_raw( add_query_arg( 'page', $prev_page, $base ) );\r\n-\t\t\t$response->link_header( 'prev', $prev_link );\r\n-\t\t}\r\n-\r\n-\t\tif ( $max_pages > $page ) {\r\n-\t\t\t$next_page = $page + 1;\r\n-\t\t\t$next_link = esc_url_raw( add_query_arg( 'page', $next_page, $base ) );\r\n-\t\t\t$response->link_header( 'next', $next_link );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a single item.\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @return WP_Error|WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function create_item( $request ) {\r\n-\t\tif ( ! empty( $request['id'] ) ) {\r\n-\t\t\t\u002F* translators: %s: post type *\u002F\r\n-\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_exists\", sprintf( __( 'Cannot create existing %s.', 'learnpress' ), $this->post_type ), array( 'status' => 400 ) );\r\n-\t\t}\r\n-\r\n-\t\t$post = $this->prepare_item_for_database( $request );\r\n-\t\tif ( is_wp_error( $post ) ) {\r\n-\t\t\treturn $post;\r\n-\t\t}\r\n-\r\n-\t\t$post->post_type = $this->post_type;\r\n-\t\t$post_id         = wp_insert_post( $post, true );\r\n-\r\n-\t\tif ( is_wp_error( $post_id ) ) {\r\n-\t\t\tif ( in_array( $post_id->get_error_code(), array( 'db_insert_error' ) ) ) {\r\n-\t\t\t\t$post_id->add_data( array( 'status' => 500 ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$post_id->add_data( array( 'status' => 400 ) );\r\n-\t\t\t}\r\n-\t\t\treturn $post_id;\r\n-\t\t}\r\n-\r\n-\t\t$post->ID = $post_id;\r\n-\t\t$post     = get_post( $post_id );\r\n-\r\n-\t\t$this->update_additional_fields_for_object( $post, $request );\r\n-\r\n-\t\t\u002F\u002F Add meta fields.\r\n-\t\t$meta_fields = $this->add_post_meta_fields( $post, $request );\r\n-\t\tif ( is_wp_error( $meta_fields ) ) {\r\n-\t\t\t\u002F\u002F Remove post.\r\n-\t\t\t$this->delete_post( $post );\r\n-\r\n-\t\t\treturn $meta_fields;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Fires after a single item is created or updated via the REST API.\r\n-\t\t *\r\n-\t\t * @param WP_Post         $post      Post object.\r\n-\t\t * @param WP_REST_Request $request   Request object.\r\n-\t\t * @param boolean         $creating  True when creating item, false when updating.\r\n-\t\t *\u002F\r\n-\t\tdo_action( \"lp_rest_insert_{$this->post_type}\", $post, $request, true );\r\n-\r\n-\t\t$request->set_param( 'context', 'edit' );\r\n-\t\t$response = $this->prepare_item_for_response( $post, $request );\r\n-\t\t$response = rest_ensure_response( $response );\r\n-\t\t$response->set_status( 201 );\r\n-\t\t$response->header( 'Location', rest_url( sprintf( '\u002F%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $post_id ) ) );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\tpublic function prepare_item_for_database( $request, $creating = false ) {\r\n-\t\t$prepared_post  = new stdClass();\r\n-\t\t$current_status = '';\r\n-\r\n-\t\t$id = isset( $request['id'] ) ? absint( $request['id'] ) : 0;\r\n-\r\n-\t\tif ( isset( $request['id'] ) ) {\r\n-\t\t\t$existing_post = get_post( $id );\r\n-\r\n-\t\t\tif ( empty( $existing_post ) || empty( $existing_post->ID ) || $this->post_type !== $existing_post->post_type ) {\r\n-\t\t\t\treturn new WP_Error( 'rest_invalid_course', __( 'Invalid Course', 'learnpress' ), array( 'status' => 404 ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$prepared_post->ID = $existing_post->ID;\r\n-\t\t\t$current_status    = $existing_post->post_status;\r\n-\t\t}\r\n-\r\n-\t\t$schema = $this->get_item_schema();\r\n-\r\n-\t\t\u002F\u002F Post title.\r\n-\t\tif ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) {\r\n-\t\t\tif ( is_string( $request['name'] ) ) {\r\n-\t\t\t\t$prepared_post->post_title = $request['name'];\r\n-\t\t\t} elseif ( ! empty( $request['name']['raw'] ) ) {\r\n-\t\t\t\t$prepared_post->post_title = $request['name']['raw'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post content.\r\n-\t\tif ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {\r\n-\t\t\tif ( is_string( $request['content'] ) ) {\r\n-\t\t\t\t$prepared_post->post_content = $request['content'];\r\n-\t\t\t} elseif ( isset( $request['content']['raw'] ) ) {\r\n-\t\t\t\t$prepared_post->post_content = $request['content']['raw'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post excerpt.\r\n-\t\tif ( ! empty( $schema['properties']['excerpt'] ) && isset( $request['excerpt'] ) ) {\r\n-\t\t\tif ( is_string( $request['excerpt'] ) ) {\r\n-\t\t\t\t$prepared_post->post_excerpt = $request['excerpt'];\r\n-\t\t\t} elseif ( isset( $request['excerpt']['raw'] ) ) {\r\n-\t\t\t\t$prepared_post->post_excerpt = $request['excerpt']['raw'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post type.\r\n-\t\tif ( empty( $request['id'] ) ) {\r\n-\t\t\t\u002F\u002F Creating new post, use default type for the controller.\r\n-\t\t\t$prepared_post->post_type = $this->post_type;\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Updating a post, use previous type.\r\n-\t\t\t$prepared_post->post_type = get_post_type( $request['id'] );\r\n-\t\t}\r\n-\r\n-\t\t$post_type = get_post_type_object( $prepared_post->post_type );\r\n-\r\n-\t\t\u002F\u002F Post status.\r\n-\t\tif (\r\n-\t\t\t! empty( $schema['properties']['status'] ) &&\r\n-\t\t\tisset( $request['status'] ) &&\r\n-\t\t\t( ! $current_status || $current_status !== $request['status'] )\r\n-\t\t) {\r\n-\t\t\t$status = $this->handle_status_param( $request['status'], $post_type );\r\n-\r\n-\t\t\tif ( is_wp_error( $status ) ) {\r\n-\t\t\t\treturn $status;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$prepared_post->post_status = $status;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post date.\r\n-\t\tif ( ! empty( $schema['properties']['date'] ) && ! empty( $request['date'] ) ) {\r\n-\t\t\t$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date : false;\r\n-\t\t\t$date_data    = rest_get_date_with_gmt( $request['date'] );\r\n-\r\n-\t\t\tif ( ! empty( $date_data ) && $current_date !== $date_data[0] ) {\r\n-\t\t\t\tlist( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;\r\n-\t\t\t\t$prepared_post->edit_date                                        = true;\r\n-\t\t\t}\r\n-\t\t} elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) {\r\n-\t\t\t$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date_gmt : false;\r\n-\t\t\t$date_data    = rest_get_date_with_gmt( $request['date_gmt'], true );\r\n-\r\n-\t\t\tif ( ! empty( $date_data ) && $current_date !== $date_data[1] ) {\r\n-\t\t\t\tlist( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;\r\n-\t\t\t\t$prepared_post->edit_date                                        = true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sending a null date or date_gmt value resets date and date_gmt to their\r\n-\t\t\u002F\u002F default values (`0000-00-00 00:00:00`).\r\n-\t\tif (\r\n-\t\t\t( ! empty( $schema['properties']['date_gmt'] ) && $request->has_param( 'date_gmt' ) && null === $request['date_gmt'] ) ||\r\n-\t\t\t( ! empty( $schema['properties']['date'] ) && $request->has_param( 'date' ) && null === $request['date'] )\r\n-\t\t) {\r\n-\t\t\t$prepared_post->post_date_gmt = null;\r\n-\t\t\t$prepared_post->post_date     = null;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post slug.\r\n-\t\tif ( ! empty( $schema['properties']['slug'] ) && isset( $request['slug'] ) ) {\r\n-\t\t\t$prepared_post->post_name = $request['slug'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author.\r\n-\t\tif ( ! empty( $schema['properties']['author'] ) && ! empty( $request['author'] ) ) {\r\n-\t\t\t$post_author = (int) $request['author'];\r\n-\r\n-\t\t\tif ( get_current_user_id() !== $post_author ) {\r\n-\t\t\t\t$user_obj = get_userdata( $post_author );\r\n-\r\n-\t\t\t\tif ( ! $user_obj ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_invalid_author',\r\n-\t\t\t\t\t\t__( 'Invalid author ID.' ),\r\n-\t\t\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$prepared_post->post_author = $post_author;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Post password.\r\n-\t\tif ( ! empty( $schema['properties']['password'] ) && isset( $request['password'] ) ) {\r\n-\t\t\t$prepared_post->post_password = $request['password'];\r\n-\r\n-\t\t\tif ( '' !== $request['password'] ) {\r\n-\t\t\t\tif ( ! empty( $schema['properties']['sticky'] ) && ! empty( $request['sticky'] ) ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_invalid_field',\r\n-\t\t\t\t\t\t__( 'A post can not be sticky and have a password.' ),\r\n-\t\t\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! empty( $prepared_post->ID ) && is_sticky( $prepared_post->ID ) ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_invalid_field',\r\n-\t\t\t\t\t\t__( 'A sticky post can not be password protected.' ),\r\n-\t\t\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( \"lp_rest_pre_insert_{$this->post_type}\", $prepared_post, $request );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Determines validity and normalizes the given status parameter.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param string       $post_status Post status.\r\n-\t * @param WP_Post_Type $post_type   Post type.\r\n-\t * @return string|WP_Error Post status or WP_Error if lacking the proper permission.\r\n-\t *\u002F\r\n-\tprotected function handle_status_param( $post_status, $post_type ) {\r\n-\r\n-\t\tswitch ( $post_status ) {\r\n-\t\t\tcase 'draft':\r\n-\t\t\tcase 'pending':\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'private':\r\n-\t\t\t\tif ( ! current_user_can( $post_type->cap->publish_posts ) ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_cannot_publish',\r\n-\t\t\t\t\t\t__( 'Sorry, you are not allowed to create private posts in this post type.' ),\r\n-\t\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'publish':\r\n-\t\t\tcase 'future':\r\n-\t\t\t\tif ( ! current_user_can( $post_type->cap->publish_posts ) ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_cannot_publish',\r\n-\t\t\t\t\t\t__( 'Sorry, you are not allowed to publish posts in this post type.' ),\r\n-\t\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\tif ( ! get_post_status_object( $post_status ) ) {\r\n-\t\t\t\t\t$post_status = 'draft';\r\n-\t\t\t\t}\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn $post_status;\r\n-\t}\r\n-\r\n-\tprotected function prepare_objects_query( $request ) {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$args                        = array();\r\n-\t\t$args['offset']              = $request['offset'];\r\n-\t\t$args['order']               = $request['order'];\r\n-\t\t$args['orderby']             = $request['orderby'];\r\n-\t\t$args['paged']               = $request['page'];\r\n-\t\t$args['post__in']            = $request['include'];\r\n-\t\t$args['post__not_in']        = $request['exclude'];\r\n-\t\t$args['posts_per_page']      = $request['per_page'];\r\n-\t\t$args['name']                = $request['slug'];\r\n-\t\t$args['post_parent__in']     = $request['parent'];\r\n-\t\t$args['post_parent__not_in'] = $request['parent_exclude'];\r\n-\t\t$args['s']                   = $request['search'];\r\n-\t\t$args['author__in']          = ! empty( $request['user'] ) ? $request['user'] : $request['author'];\r\n-\t\t$args['author__not_in']      = $request['author_exclude'];\r\n-\t\t$args['fields']              = $this->get_fields_for_response( $request );\r\n-\r\n-\t\tif ( 'date' === $args['orderby'] ) {\r\n-\t\t\t$args['orderby'] = 'date ID';\r\n-\t\t}\r\n-\r\n-\t\t$args['date_query'] = array();\r\n-\r\n-\t\tif ( isset( $request['before'] ) ) {\r\n-\t\t\t$args['date_query'][0]['before'] = $request['before'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['after'] ) ) {\r\n-\t\t\t$args['date_query'][0]['after'] = $request['after'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get item user is learned\r\n-\t\tif ( ! empty( $request['learned'] ) ) {\r\n-\t\t\t$item_ids = $this->get_item_learned_ids( $request );\r\n-\r\n-\t\t\t\u002F\u002F Force WP_Query return empty if don't found any order.\r\n-\t\t\t$item_ids = ! empty( $item_ids ) ? $item_ids : array( 0 );\r\n-\r\n-\t\t\t$args['post__in'] = $item_ids;\r\n-\t\t}\r\n-\r\n-\t\t$args['post_type'] = $this->post_type;\r\n-\r\n-\t\t$args = apply_filters( \"lp_jwt_rest_{$this->post_type}_object_query\", $args, $request );\r\n-\r\n-\t\treturn $this->prepare_items_query( $args, $request );\r\n-\t}\r\n-\r\n-\t\u002F** Get all items has in database learnpress_user_items by post_type *\u002F\r\n-\tpublic function get_item_learned_ids( $request ) {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\tprotected function get_objects( $query_args ) {\r\n-\t\t$query  = new WP_Query();\r\n-\t\t$result = $query->query( $query_args );\r\n-\r\n-\t\t$total_posts = $query->found_posts;\r\n-\r\n-\t\tif ( $total_posts \u003C 1 ) {\r\n-\t\t\tunset( $query_args['paged'] );\r\n-\t\t\t$count_query = new WP_Query();\r\n-\t\t\t$count_query->query( $query_args );\r\n-\t\t\t$total_posts = $count_query->found_posts;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'objects' => array_filter( array_map( array( $this, 'get_object' ), $result ) ),\r\n-\t\t\t'total'   => (int) $total_posts,\r\n-\t\t\t'pages'   => (int) ceil( $total_posts \u002F (int) $query->query_vars['posts_per_page'] ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tprotected function add_post_meta_fields( $post, $request ) {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tprotected function prepare_object_for_response( $object, $request ) {\r\n-\t\treturn new WP_Error( 'invalid-method', sprintf( __( \"The method '%s' not implemented. It must be overridden in the subclass.\", 'learnpress' ), __METHOD__ ), array( 'status' => 405 ) );\r\n-\t}\r\n-\r\n-\tprotected function prepare_items_query( $prepared_args = array(), $request = null ) {\r\n-\t\t$query_args = array();\r\n-\r\n-\t\tforeach ( $prepared_args as $key => $value ) {\r\n-\t\t\t$query_args[ $key ] = apply_filters( \"rest_query_var-{$key}\", $value ); \u002F\u002F phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores\r\n-\t\t}\r\n-\r\n-\t\tif ( 'post' !== $this->post_type || ! isset( $query_args['ignore_sticky_posts'] ) ) {\r\n-\t\t\t$query_args['ignore_sticky_posts'] = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'include' === $query_args['orderby'] ) {\r\n-\t\t\t$query_args['orderby'] = 'post__in';\r\n-\t\t} elseif ( 'id' === $query_args['orderby'] ) {\r\n-\t\t\t$query_args['orderby'] = 'ID';\r\n-\t\t} elseif ( 'slug' === $query_args['orderby'] ) {\r\n-\t\t\t$query_args['orderby'] = 'name';\r\n-\t\t}\r\n-\r\n-\t\treturn $query_args;\r\n-\t}\r\n-\r\n-\tpublic function get_collection_params() {\r\n-\t\t$params                       = array();\r\n-\t\t$params['context']            = $this->get_context_param();\r\n-\t\t$params['context']['default'] = 'view';\r\n-\r\n-\t\t$params['page']           = array(\r\n-\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 1,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t);\r\n-\t\t$params['per_page']       = array(\r\n-\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 10,\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t\t'maximum'           => 100,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['search']         = array(\r\n-\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['after']          = array(\r\n-\t\t\t'description'       => __( 'Limit response to resources published after a given ISO8601 compliant date.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'format'            => 'date-time',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['before']         = array(\r\n-\t\t\t'description'       => __( 'Limit response to resources published before a given ISO8601 compliant date.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'format'            => 'date-time',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['exclude']        = array(\r\n-\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\t\t$params['include']        = array(\r\n-\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\t\t$params['offset']         = array(\r\n-\t\t\t'description'       => __( 'Offset the result set by a specific number of items.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['order']          = array(\r\n-\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'default'           => 'desc',\r\n-\t\t\t'enum'              => array( 'asc', 'desc' ),\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['orderby']        = array(\r\n-\t\t\t'description'       => __( 'Sort collections by the object attribute.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'default'           => 'date',\r\n-\t\t\t'enum'              => array(\r\n-\t\t\t\t'date',\r\n-\t\t\t\t'id',\r\n-\t\t\t\t'include',\r\n-\t\t\t\t'title',\r\n-\t\t\t\t'slug',\r\n-\t\t\t\t'modified',\r\n-\t\t\t),\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['author']         = array(\r\n-\t\t\t'description' => __( 'Limit the result set to posts assigned to specific authors.', 'learnpress' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'     => array(),\r\n-\t\t);\r\n-\t\t$params['author_exclude'] = array(\r\n-\t\t\t'description' => __( 'Ensure the result set excludes posts assigned to specific authors.', 'learnpress' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'     => array(),\r\n-\t\t);\r\n-\t\t$params['user']           = array(\r\n-\t\t\t'description' => __( 'Limit the result set to posts assigned to specific authors.', 'learnpress' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'     => array(),\r\n-\t\t);\r\n-\t\t$params['learned']        = array(\r\n-\t\t\t'description'       => __( 'Get item learned by user.', 'learnpress' ),\r\n-\t\t\t'type'              => 'boolean',\r\n-\t\t\t'default'           => false,\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\r\n-\t\tif ( $this->hierarchical ) {\r\n-\t\t\t$params['parent']         = array(\r\n-\t\t\t\t'description'       => __( 'Limit the result set to those of particular parent IDs.', 'learnpress' ),\r\n-\t\t\t\t'type'              => 'array',\r\n-\t\t\t\t'items'             => array(\r\n-\t\t\t\t\t'type' => 'integer',\r\n-\t\t\t\t),\r\n-\t\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t\t\t'default'           => array(),\r\n-\t\t\t);\r\n-\t\t\t$params['parent_exclude'] = array(\r\n-\t\t\t\t'description'       => __( 'Limit the result set to all items except those of a particular parent ID.', 'learnpress' ),\r\n-\t\t\t\t'type'              => 'array',\r\n-\t\t\t\t'items'             => array(\r\n-\t\t\t\t\t'type' => 'integer',\r\n-\t\t\t\t),\r\n-\t\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t\t\t'default'           => array(),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( \"rest_{$this->post_type}_collection_params\", $params, $this->post_type );\r\n-\t}\r\n-}\r\n+\u003C?php\n+abstract class LP_REST_Jwt_Posts_Controller extends LP_REST_Jwt_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = '';\n+\n+\tprotected $post_type = '';\n+\n+\tprotected $public = false;\n+\n+\tprotected $hierarchical = false;\n+\n+\tprotected function get_object( $id ) {\n+\t\treturn new WP_Error( 'invalid-method', sprintf( __( \"The method '%s' not implemented. It must be overridden in the subclass.\", 'learnpress' ), __METHOD__ ), array( 'status' => 405 ) );\n+\t}\n+\n+\tpublic function get_items_permissions_check( $request ) {\n+\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'read' ) ) {\n+\t\t\treturn new WP_Error( 'lp_jwt_rest_cannot_view', __( 'Sorry, you cannot get lists', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check if a given request has access to create an item.\n+\t *\n+\t * @param  WP_REST_Request $request Full details about the request.\n+\t * @return WP_Error|boolean\n+\t *\u002F\n+\tpublic function create_item_permissions_check( $request ) {\n+\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'create' ) ) {\n+\t\t\treturn new WP_Error( 'lp_rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_item_permissions_check( $request ) {\n+\t\tif ( $this->post_type !== get_post_type( (int) $request['id'] ) ) {\n+\t\t\treturn new WP_Error( 'lp_jwt_rest_not_in_post_type', __( 'Sorry, You cannot view this item.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\t$object = $this->get_object( (int) $request['id'] );\n+\n+\t\tif ( $object && 0 !== $object->get_id() && ! $this->check_read_permission( $object->get_id() ) ) {\n+\t\t\treturn new WP_Error( 'lp_jwt_rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function check_read_permission( $post_id ) {\n+\t\tif ( ! lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_item( $request ) {\n+\t\t$object = $this->get_object( (int) $request['id'] );\n+\n+\t\tif ( ! $object || 0 === $object->get_id() ) {\n+\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_invalid_id\", esc_html__( 'Invalid ID.', 'learnpress' ), array( 'status' => 404 ) );\n+\t\t}\n+\n+\t\t$data     = $this->prepare_object_for_response( $object, $request );\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\tif ( $this->public ) {\n+\t\t\t$response->link_header( 'alternate', $this->get_permalink( $object ), array( 'type' => 'text\u002Fhtml' ) );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\tpublic function get_items( $request ) {\n+\t\t$query_args    = $this->prepare_objects_query( $request );\n+\t\t$query_results = $this->get_objects( $query_args );\n+\n+\t\t$objects = array();\n+\t\tforeach ( $query_results['objects'] as $object ) {\n+\t\t\t$object_id = ! empty( $object->ID ) ? $object->ID : $object->get_id();\n+\n+\t\t\tif ( ! $this->check_read_permission( $object_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$data      = $this->prepare_object_for_response( $object, $request );\n+\t\t\t$objects[] = $this->prepare_response_for_collection( $data );\n+\t\t}\n+\n+\t\t$page      = (int) $query_args['paged'];\n+\t\t$max_pages = $query_results['pages'];\n+\n+\t\t$response = rest_ensure_response( $objects );\n+\t\t$response->header( 'X-WP-Total', $query_results['total'] );\n+\t\t$response->header( 'X-WP-TotalPages', (int) $max_pages );\n+\n+\t\t$base          = $this->rest_base;\n+\t\t$attrib_prefix = '(?P\u003C';\n+\n+\t\tif ( strpos( $base, $attrib_prefix ) !== false ) {\n+\t\t\t$attrib_names = array();\n+\t\t\tpreg_match( '\u002F\\(\\?P\u003C[^>]+>.*\\)\u002F', $base, $attrib_names, PREG_OFFSET_CAPTURE );\n+\n+\t\t\tforeach ( $attrib_names as $attrib_name_match ) {\n+\t\t\t\t$beginning_offset = strlen( $attrib_prefix );\n+\t\t\t\t$attrib_name_end  = strpos( $attrib_name_match[0], '>', $attrib_name_match[1] );\n+\t\t\t\t$attrib_name      = substr( $attrib_name_match[0], $beginning_offset, $attrib_name_end - $beginning_offset );\n+\n+\t\t\t\tif ( isset( $request[ $attrib_name ] ) ) {\n+\t\t\t\t\t$base = str_replace( \"(?P\u003C$attrib_name>[\\d]+)\", $request[ $attrib_name ], $base );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$base = esc_url_raw( add_query_arg( $request->get_query_params(), rest_url( sprintf( '\u002F%s\u002F%s', $this->namespace, $base ) ) ) );\n+\n+\t\tif ( $page > 1 ) {\n+\t\t\t$prev_page = $page - 1;\n+\t\t\tif ( $prev_page > $max_pages ) {\n+\t\t\t\t$prev_page = $max_pages;\n+\t\t\t}\n+\t\t\t$prev_link = esc_url_raw( add_query_arg( 'page', $prev_page, $base ) );\n+\t\t\t$response->link_header( 'prev', $prev_link );\n+\t\t}\n+\n+\t\tif ( $max_pages > $page ) {\n+\t\t\t$next_page = $page + 1;\n+\t\t\t$next_link = esc_url_raw( add_query_arg( 'page', $next_page, $base ) );\n+\t\t\t$response->link_header( 'next', $next_link );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Create a single item.\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @return WP_Error|WP_REST_Response\n+\t *\u002F\n+\tpublic function create_item( $request ) {\n+\t\tif ( ! empty( $request['id'] ) ) {\n+\t\t\t\u002F* translators: %s: post type *\u002F\n+\t\t\treturn new WP_Error( \"lp_rest_{$this->post_type}_exists\", sprintf( __( 'Cannot create existing %s.', 'learnpress' ), $this->post_type ), array( 'status' => 400 ) );\n+\t\t}\n+\n+\t\t$post = $this->prepare_item_for_database( $request );\n+\t\tif ( is_wp_error( $post ) ) {\n+\t\t\treturn $post;\n+\t\t}\n+\n+\t\t$post->post_type = $this->post_type;\n+\t\t$post_id         = wp_insert_post( $post, true );\n+\n+\t\tif ( is_wp_error( $post_id ) ) {\n+\t\t\tif ( in_array( $post_id->get_error_code(), array( 'db_insert_error' ) ) ) {\n+\t\t\t\t$post_id->add_data( array( 'status' => 500 ) );\n+\t\t\t} else {\n+\t\t\t\t$post_id->add_data( array( 'status' => 400 ) );\n+\t\t\t}\n+\t\t\treturn $post_id;\n+\t\t}\n+\n+\t\t$post->ID = $post_id;\n+\t\t$post     = get_post( $post_id );\n+\n+\t\t$this->update_additional_fields_for_object( $post, $request );\n+\n+\t\t\u002F\u002F Add meta fields.\n+\t\t$meta_fields = $this->add_post_meta_fields( $post, $request );\n+\t\tif ( is_wp_error( $meta_fields ) ) {\n+\t\t\t\u002F\u002F Remove post.\n+\t\t\t$this->delete_post( $post );\n+\n+\t\t\treturn $meta_fields;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Fires after a single item is created or updated via the REST API.\n+\t\t *\n+\t\t * @param WP_Post         $post      Post object.\n+\t\t * @param WP_REST_Request $request   Request object.\n+\t\t * @param boolean         $creating  True when creating item, false when updating.\n+\t\t *\u002F\n+\t\tdo_action( \"lp_rest_insert_{$this->post_type}\", $post, $request, true );\n+\n+\t\t$request->set_param( 'context', 'edit' );\n+\t\t$response = $this->prepare_item_for_response( $post, $request );\n+\t\t$response = rest_ensure_response( $response );\n+\t\t$response->set_status( 201 );\n+\t\t$response->header( 'Location', rest_url( sprintf( '\u002F%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $post_id ) ) );\n+\n+\t\treturn $response;\n+\t}\n+\n+\tpublic function prepare_item_for_database( $request, $creating = false ) {\n+\t\t$prepared_post  = new stdClass();\n+\t\t$current_status = '';\n+\n+\t\t$id = isset( $request['id'] ) ? absint( $request['id'] ) : 0;\n+\n+\t\tif ( isset( $request['id'] ) ) {\n+\t\t\t$existing_post = get_post( $id );\n+\n+\t\t\tif ( empty( $existing_post ) || empty( $existing_post->ID ) || $this->post_type !== $existing_post->post_type ) {\n+\t\t\t\treturn new WP_Error( 'rest_invalid_course', __( 'Invalid Course', 'learnpress' ), array( 'status' => 404 ) );\n+\t\t\t}\n+\n+\t\t\t$prepared_post->ID = $existing_post->ID;\n+\t\t\t$current_status    = $existing_post->post_status;\n+\t\t}\n+\n+\t\t$schema = $this->get_item_schema();\n+\n+\t\t\u002F\u002F Post title.\n+\t\tif ( ! empty( $schema['properties']['name'] ) && isset( $request['name'] ) ) {\n+\t\t\tif ( is_string( $request['name'] ) ) {\n+\t\t\t\t$prepared_post->post_title = $request['name'];\n+\t\t\t} elseif ( ! empty( $request['name']['raw'] ) ) {\n+\t\t\t\t$prepared_post->post_title = $request['name']['raw'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Post content.\n+\t\tif ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {\n+\t\t\tif ( is_string( $request['content'] ) ) {\n+\t\t\t\t$prepared_post->post_content = $request['content'];\n+\t\t\t} elseif ( isset( $request['content']['raw'] ) ) {\n+\t\t\t\t$prepared_post->post_content = $request['content']['raw'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Post excerpt.\n+\t\tif ( ! empty( $schema['properties']['excerpt'] ) && isset( $request['excerpt'] ) ) {\n+\t\t\tif ( is_string( $request['excerpt'] ) ) {\n+\t\t\t\t$prepared_post->post_excerpt = $request['excerpt'];\n+\t\t\t} elseif ( isset( $request['excerpt']['raw'] ) ) {\n+\t\t\t\t$prepared_post->post_excerpt = $request['excerpt']['raw'];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Post type.\n+\t\tif ( empty( $request['id'] ) ) {\n+\t\t\t\u002F\u002F Creating new post, use default type for the controller.\n+\t\t\t$prepared_post->post_type = $this->post_type;\n+\t\t} else {\n+\t\t\t\u002F\u002F Updating a post, use previous type.\n+\t\t\t$prepared_post->post_type = get_post_type( $request['id'] );\n+\t\t}\n+\n+\t\t$post_type = get_post_type_object( $prepared_post->post_type );\n+\n+\t\t\u002F\u002F Post status.\n+\t\tif (\n+\t\t\t! empty( $schema['properties']['status'] ) &&\n+\t\t\tisset( $request['status'] ) &&\n+\t\t\t( ! $current_status || $current_status !== $request['status'] )\n+\t\t) {\n+\t\t\t$status = $this->handle_status_param( $request['status'], $post_type );\n+\n+\t\t\tif ( is_wp_error( $status ) ) {\n+\t\t\t\treturn $status;\n+\t\t\t}\n+\n+\t\t\t$prepared_post->post_status = $status;\n+\t\t}\n+\n+\t\t\u002F\u002F Post date.\n+\t\tif ( ! empty( $schema['properties']['date'] ) && ! empty( $request['date'] ) ) {\n+\t\t\t$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date : false;\n+\t\t\t$date_data    = rest_get_date_with_gmt( $request['date'] );\n+\n+\t\t\tif ( ! empty( $date_data ) && $current_date !== $date_data[0] ) {\n+\t\t\t\tlist( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;\n+\t\t\t\t$prepared_post->edit_date                                        = true;\n+\t\t\t}\n+\t\t} elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) {\n+\t\t\t$current_date = isset( $prepared_post->ID ) ? get_post( $prepared_post->ID )->post_date_gmt : false;\n+\t\t\t$date_data    = rest_get_date_with_gmt( $request['date_gmt'], true );\n+\n+\t\t\tif ( ! empty( $date_data ) && $current_date !== $date_data[1] ) {\n+\t\t\t\tlist( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;\n+\t\t\t\t$prepared_post->edit_date                                        = true;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Sending a null date or date_gmt value resets date and date_gmt to their\n+\t\t\u002F\u002F default values (`0000-00-00 00:00:00`).\n+\t\tif (\n+\t\t\t( ! empty( $schema['properties']['date_gmt'] ) && $request->has_param( 'date_gmt' ) && null === $request['date_gmt'] ) ||\n+\t\t\t( ! empty( $schema['properties']['date'] ) && $request->has_param( 'date' ) && null === $request['date'] )\n+\t\t) {\n+\t\t\t$prepared_post->post_date_gmt = null;\n+\t\t\t$prepared_post->post_date     = null;\n+\t\t}\n+\n+\t\t\u002F\u002F Post slug.\n+\t\tif ( ! empty( $schema['properties']['slug'] ) && isset( $request['slug'] ) ) {\n+\t\t\t$prepared_post->post_name = $request['slug'];\n+\t\t}\n+\n+\t\t\u002F\u002F Author.\n+\t\tif ( ! empty( $schema['properties']['author'] ) && ! empty( $request['author'] ) ) {\n+\t\t\t$post_author = (int) $request['author'];\n+\n+\t\t\tif ( get_current_user_id() !== $post_author ) {\n+\t\t\t\t$user_obj = get_userdata( $post_author );\n+\n+\t\t\t\tif ( ! $user_obj ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_invalid_author',\n+\t\t\t\t\t\t__( 'Invalid author ID.' ),\n+\t\t\t\t\t\tarray( 'status' => 400 )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$prepared_post->post_author = $post_author;\n+\t\t}\n+\n+\t\t\u002F\u002F Post password.\n+\t\tif ( ! empty( $schema['properties']['password'] ) && isset( $request['password'] ) ) {\n+\t\t\t$prepared_post->post_password = $request['password'];\n+\n+\t\t\tif ( '' !== $request['password'] ) {\n+\t\t\t\tif ( ! empty( $schema['properties']['sticky'] ) && ! empty( $request['sticky'] ) ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_invalid_field',\n+\t\t\t\t\t\t__( 'A post can not be sticky and have a password.' ),\n+\t\t\t\t\t\tarray( 'status' => 400 )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! empty( $prepared_post->ID ) && is_sticky( $prepared_post->ID ) ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_invalid_field',\n+\t\t\t\t\t\t__( 'A sticky post can not be password protected.' ),\n+\t\t\t\t\t\tarray( 'status' => 400 )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( \"lp_rest_pre_insert_{$this->post_type}\", $prepared_post, $request );\n+\t}\n+\n+\t\u002F**\n+\t * Determines validity and normalizes the given status parameter.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param string       $post_status Post status.\n+\t * @param WP_Post_Type $post_type   Post type.\n+\t * @return string|WP_Error Post status or WP_Error if lacking the proper permission.\n+\t *\u002F\n+\tprotected function handle_status_param( $post_status, $post_type ) {\n+\n+\t\tswitch ( $post_status ) {\n+\t\t\tcase 'draft':\n+\t\t\tcase 'pending':\n+\t\t\t\tbreak;\n+\t\t\tcase 'private':\n+\t\t\t\tif ( ! current_user_can( $post_type->cap->publish_posts ) ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_cannot_publish',\n+\t\t\t\t\t\t__( 'Sorry, you are not allowed to create private posts in this post type.' ),\n+\t\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tcase 'publish':\n+\t\t\tcase 'future':\n+\t\t\t\tif ( ! current_user_can( $post_type->cap->publish_posts ) ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_cannot_publish',\n+\t\t\t\t\t\t__( 'Sorry, you are not allowed to publish posts in this post type.' ),\n+\t\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tif ( ! get_post_status_object( $post_status ) ) {\n+\t\t\t\t\t$post_status = 'draft';\n+\t\t\t\t}\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn $post_status;\n+\t}\n+\n+\tprotected function prepare_objects_query( $request ) {\n+\t\tglobal $wpdb;\n+\n+\t\t$args                        = array();\n+\t\t$args['offset']              = $request['offset'];\n+\t\t$args['order']               = $request['order'];\n+\t\t$args['orderby']             = $request['orderby'];\n+\t\t$args['paged']               = $request['page'];\n+\t\t$args['post__in']            = $request['include'];\n+\t\t$args['post__not_in']        = $request['exclude'];\n+\t\t$args['posts_per_page']      = $request['per_page'];\n+\t\t$args['name']                = $request['slug'];\n+\t\t$args['post_parent__in']     = $request['parent'];\n+\t\t$args['post_parent__not_in'] = $request['parent_exclude'];\n+\t\t$args['s']                   = $request['search'];\n+\t\t$args['author__in']          = ! empty( $request['user'] ) ? $request['user'] : $request['author'];\n+\t\t$args['author__not_in']      = $request['author_exclude'];\n+\t\t$args['fields']              = $this->get_fields_for_response( $request );\n+\n+\t\tif ( 'date' === $args['orderby'] ) {\n+\t\t\t$args['orderby'] = 'date ID';\n+\t\t}\n+\n+\t\t$args['date_query'] = array();\n+\n+\t\tif ( isset( $request['before'] ) ) {\n+\t\t\t$args['date_query'][0]['before'] = $request['before'];\n+\t\t}\n+\n+\t\tif ( isset( $request['after'] ) ) {\n+\t\t\t$args['date_query'][0]['after'] = $request['after'];\n+\t\t}\n+\n+\t\t\u002F\u002F Get item user is learned\n+\t\tif ( ! empty( $request['learned'] ) ) {\n+\t\t\t$item_ids = $this->get_item_learned_ids( $request );\n+\n+\t\t\t\u002F\u002F Force WP_Query return empty if don't found any order.\n+\t\t\t$item_ids = ! empty( $item_ids ) ? $item_ids : array( 0 );\n+\n+\t\t\t$args['post__in'] = $item_ids;\n+\t\t}\n+\n+\t\t$args['post_type'] = $this->post_type;\n+\n+\t\t$args = apply_filters( \"lp_jwt_rest_{$this->post_type}_object_query\", $args, $request );\n+\n+\t\treturn $this->prepare_items_query( $args, $request );\n+\t}\n+\n+\t\u002F** Get all items has in database learnpress_user_items by post_type *\u002F\n+\tpublic function get_item_learned_ids( $request ) {\n+\t\treturn array();\n+\t}\n+\n+\tprotected function get_objects( $query_args ) {\n+\t\t$query  = new WP_Query();\n+\t\t$result = $query->query( $query_args );\n+\n+\t\t$total_posts = $query->found_posts;\n+\n+\t\tif ( $total_posts \u003C 1 ) {\n+\t\t\tunset( $query_args['paged'] );\n+\t\t\t$count_query = new WP_Query();\n+\t\t\t$count_query->query( $query_args );\n+\t\t\t$total_posts = $count_query->found_posts;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'objects' => array_filter( array_map( array( $this, 'get_object' ), $result ) ),\n+\t\t\t'total'   => (int) $total_posts,\n+\t\t\t'pages'   => (int) ceil( $total_posts \u002F (int) $query->query_vars['posts_per_page'] ),\n+\t\t);\n+\t}\n+\n+\tprotected function add_post_meta_fields( $post, $request ) {\n+\t\treturn true;\n+\t}\n+\n+\tprotected function prepare_object_for_response( $object, $request ) {\n+\t\treturn new WP_Error( 'invalid-method', sprintf( __( \"The method '%s' not implemented. It must be overridden in the subclass.\", 'learnpress' ), __METHOD__ ), array( 'status' => 405 ) );\n+\t}\n+\n+\tprotected function prepare_items_query( $prepared_args = array(), $request = null ) {\n+\t\t$query_args = array();\n+\n+\t\tforeach ( $prepared_args as $key => $value ) {\n+\t\t\t$query_args[ $key ] = apply_filters( \"rest_query_var-{$key}\", $value ); \u002F\u002F phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores\n+\t\t}\n+\n+\t\tif ( 'post' !== $this->post_type || ! isset( $query_args['ignore_sticky_posts'] ) ) {\n+\t\t\t$query_args['ignore_sticky_posts'] = true;\n+\t\t}\n+\n+\t\tif ( 'include' === $query_args['orderby'] ) {\n+\t\t\t$query_args['orderby'] = 'post__in';\n+\t\t} elseif ( 'id' === $query_args['orderby'] ) {\n+\t\t\t$query_args['orderby'] = 'ID';\n+\t\t} elseif ( 'slug' === $query_args['orderby'] ) {\n+\t\t\t$query_args['orderby'] = 'name';\n+\t\t}\n+\n+\t\treturn $query_args;\n+\t}\n+\n+\tpublic function get_collection_params() {\n+\t\t$params                       = array();\n+\t\t$params['context']            = $this->get_context_param();\n+\t\t$params['context']['default'] = 'view';\n+\n+\t\t$params['page']           = array(\n+\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 1,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t\t'minimum'           => 1,\n+\t\t);\n+\t\t$params['per_page']       = array(\n+\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 10,\n+\t\t\t'minimum'           => 1,\n+\t\t\t'maximum'           => 100,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['search']         = array(\n+\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['after']          = array(\n+\t\t\t'description'       => __( 'Limit response to resources published after a given ISO8601 compliant date.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'format'            => 'date-time',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['before']         = array(\n+\t\t\t'description'       => __( 'Limit response to resources published before a given ISO8601 compliant date.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'format'            => 'date-time',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['exclude']        = array(\n+\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\t\t$params['include']        = array(\n+\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\t\t$params['offset']         = array(\n+\t\t\t'description'       => __( 'Offset the result set by a specific number of items.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['order']          = array(\n+\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'default'           => 'desc',\n+\t\t\t'enum'              => array( 'asc', 'desc' ),\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['orderby']        = array(\n+\t\t\t'description'       => __( 'Sort collections by the object attribute.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'default'           => 'date',\n+\t\t\t'enum'              => array(\n+\t\t\t\t'date',\n+\t\t\t\t'id',\n+\t\t\t\t'include',\n+\t\t\t\t'title',\n+\t\t\t\t'slug',\n+\t\t\t\t'modified',\n+\t\t\t),\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['author']         = array(\n+\t\t\t'description' => __( 'Limit the result set to posts assigned to specific authors.', 'learnpress' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'     => array(),\n+\t\t);\n+\t\t$params['author_exclude'] = array(\n+\t\t\t'description' => __( 'Ensure the result set excludes posts assigned to specific authors.', 'learnpress' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'     => array(),\n+\t\t);\n+\t\t$params['user']           = array(\n+\t\t\t'description' => __( 'Limit the result set to posts assigned to specific authors.', 'learnpress' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'     => array(),\n+\t\t);\n+\t\t$params['learned']        = array(\n+\t\t\t'description'       => __( 'Get item learned by user.', 'learnpress' ),\n+\t\t\t'type'              => 'boolean',\n+\t\t\t'default'           => false,\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\n+\t\tif ( $this->hierarchical ) {\n+\t\t\t$params['parent']         = array(\n+\t\t\t\t'description'       => __( 'Limit the result set to those of particular parent IDs.', 'learnpress' ),\n+\t\t\t\t'type'              => 'array',\n+\t\t\t\t'items'             => array(\n+\t\t\t\t\t'type' => 'integer',\n+\t\t\t\t),\n+\t\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t\t\t'default'           => array(),\n+\t\t\t);\n+\t\t\t$params['parent_exclude'] = array(\n+\t\t\t\t'description'       => __( 'Limit the result set to all items except those of a particular parent ID.', 'learnpress' ),\n+\t\t\t\t'type'              => 'array',\n+\t\t\t\t'items'             => array(\n+\t\t\t\t\t'type' => 'integer',\n+\t\t\t\t),\n+\t\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t\t\t'default'           => array(),\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn apply_filters( \"rest_{$this->post_type}_collection_params\", $params, $this->post_type );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-questions-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,297 +1,297 @@\n-\u003C?php\r\n-class LP_Jwt_Questions_V1_Controller extends LP_REST_Jwt_Posts_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'questions';\r\n-\r\n-\tprotected $post_type = LP_QUESTION_CPT;\r\n-\r\n-\tprotected $hierarchical = true;\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'view',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tprotected function get_object( $question = 0 ) {\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( false === $question && isset( $post, $post->ID ) && LP_QUESTION_CPT === get_post_type( $post->ID ) ) {\r\n-\t\t\t$id = absint( $post->ID );\r\n-\t\t} elseif ( is_numeric( $question ) ) {\r\n-\t\t\t$id = $question;\r\n-\t\t} elseif ( $question instanceof LP_Question ) {\r\n-\t\t\t$id = $question->get_id();\r\n-\t\t} elseif ( ! empty( $question->ID ) ) {\r\n-\t\t\t$id = $question->ID;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_question( $id );\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $object, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\t\t$data    = $this->get_lesson_data( $object, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\r\n-\t}\r\n-\r\n-\tprotected function get_lesson_data( $object, $context = 'view' ) {\r\n-\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\r\n-\t\t$fields  = $this->get_fields_for_response( $request );\r\n-\r\n-\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\r\n-\t\t$post = get_post( $id );\r\n-\t\t$data = array();\r\n-\r\n-\t\t$assigned = $this->get_assigned( $id );\r\n-\r\n-\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\r\n-\t\t\t$course_id = $assigned['course']['id'];\r\n-\t\t\t$object->set_course( $course_id );\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $id;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $post->post_title;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'slug':\r\n-\t\t\t\t\t$data['slug'] = $post->post_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'permalink':\r\n-\t\t\t\t\t$data['permalink'] = $object->get_permalink();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created':\r\n-\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created_gmt':\r\n-\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified':\r\n-\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified_gmt':\r\n-\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$data['status'] = $post->post_status;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'content':\r\n-\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'excerpt':\r\n-\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'assigned':\r\n-\t\t\t\t\t$data['assigned'] = $assigned;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$data['meta_data'] = $this->get_question_meta( $id );\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function get_question_meta( $id ) {\r\n-\t\tif ( ! class_exists( 'LP_Meta_Box_Question' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php';\r\n-\t\t}\r\n-\r\n-\t\t$metabox = new LP_Meta_Box_Question();\r\n-\r\n-\t\t$output = array();\r\n-\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\r\n-\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t$object->id          = $meta_key;\r\n-\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_assigned( $id ) {\r\n-\t\t$curd = new LP_Question_CURD();\r\n-\t\t$quiz = $curd->get_quiz( $id );\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( $quiz ) {\r\n-\t\t\t$courses = learn_press_get_item_courses( $quiz->ID );\r\n-\r\n-\t\t\t$output['quiz'] = array(\r\n-\t\t\t\t'id'      => $quiz->ID,\r\n-\t\t\t\t'title'   => $quiz->post_title,\r\n-\t\t\t\t'slug'    => $quiz->post_name,\r\n-\t\t\t\t'content' => $quiz->post_content,\r\n-\t\t\t\t'author'  => $quiz->post_author,\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $courses ) {\r\n-\t\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t\t$output['course'] = array(\r\n-\t\t\t\t\t\t'id'      => $course->ID,\r\n-\t\t\t\t\t\t'title'   => $course->post_title,\r\n-\t\t\t\t\t\t'slug'    => $course->post_name,\r\n-\t\t\t\t\t\t'content' => $course->post_content,\r\n-\t\t\t\t\t\t'author'  => $course->post_author,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => $this->post_type,\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'                => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permalink'         => array(\r\n-\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created'      => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created_gmt'  => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified'     => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified_gmt' => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'            => array(\r\n-\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => 'publish',\r\n-\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'           => array(\r\n-\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'excerpt'           => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'assigned'          => array(\r\n-\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'id'      => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'title'   => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'slug'    => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'content' => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'author'  => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Jwt_Questions_V1_Controller extends LP_REST_Jwt_Posts_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'questions';\n+\n+\tprotected $post_type = LP_QUESTION_CPT;\n+\n+\tprotected $hierarchical = true;\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'view',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tprotected function get_object( $question = 0 ) {\n+\t\tglobal $post;\n+\n+\t\tif ( false === $question && isset( $post, $post->ID ) && LP_QUESTION_CPT === get_post_type( $post->ID ) ) {\n+\t\t\t$id = absint( $post->ID );\n+\t\t} elseif ( is_numeric( $question ) ) {\n+\t\t\t$id = $question;\n+\t\t} elseif ( $question instanceof LP_Question ) {\n+\t\t\t$id = $question->get_id();\n+\t\t} elseif ( ! empty( $question->ID ) ) {\n+\t\t\t$id = $question->ID;\n+\t\t}\n+\n+\t\treturn learn_press_get_question( $id );\n+\t}\n+\n+\tpublic function prepare_object_for_response( $object, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\t\t$data    = $this->get_lesson_data( $object, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\n+\t}\n+\n+\tprotected function get_lesson_data( $object, $context = 'view' ) {\n+\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\n+\t\t$fields  = $this->get_fields_for_response( $request );\n+\n+\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\n+\t\t$post = get_post( $id );\n+\t\t$data = array();\n+\n+\t\t$assigned = $this->get_assigned( $id );\n+\n+\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\n+\t\t\t$course_id = $assigned['course']['id'];\n+\t\t\t$object->set_course( $course_id );\n+\t\t}\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $id;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $post->post_title;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'slug':\n+\t\t\t\t\t$data['slug'] = $post->post_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'permalink':\n+\t\t\t\t\t$data['permalink'] = $object->get_permalink();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created':\n+\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created_gmt':\n+\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified':\n+\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified_gmt':\n+\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$data['status'] = $post->post_status;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'content':\n+\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'excerpt':\n+\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'assigned':\n+\t\t\t\t\t$data['assigned'] = $assigned;\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$data['meta_data'] = $this->get_question_meta( $id );\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function get_question_meta( $id ) {\n+\t\tif ( ! class_exists( 'LP_Meta_Box_Question' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquestion\u002Fsettings.php';\n+\t\t}\n+\n+\t\t$metabox = new LP_Meta_Box_Question();\n+\n+\t\t$output = array();\n+\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\n+\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t$object->id          = $meta_key;\n+\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_assigned( $id ) {\n+\t\t$curd = new LP_Question_CURD();\n+\t\t$quiz = $curd->get_quiz( $id );\n+\n+\t\t$output = array();\n+\n+\t\tif ( $quiz ) {\n+\t\t\t$courses = learn_press_get_item_courses( $quiz->ID );\n+\n+\t\t\t$output['quiz'] = array(\n+\t\t\t\t'id'      => $quiz->ID,\n+\t\t\t\t'title'   => $quiz->post_title,\n+\t\t\t\t'slug'    => $quiz->post_name,\n+\t\t\t\t'content' => $quiz->post_content,\n+\t\t\t\t'author'  => $quiz->post_author,\n+\t\t\t);\n+\n+\t\t\tif ( $courses ) {\n+\t\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t\t$output['course'] = array(\n+\t\t\t\t\t\t'id'      => $course->ID,\n+\t\t\t\t\t\t'title'   => $course->post_title,\n+\t\t\t\t\t\t'slug'    => $course->post_name,\n+\t\t\t\t\t\t'content' => $course->post_content,\n+\t\t\t\t\t\t'author'  => $course->post_author,\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => $this->post_type,\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'                => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'              => array(\n+\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'slug'              => array(\n+\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'permalink'         => array(\n+\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created'      => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created_gmt'  => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified'     => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified_gmt' => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'status'            => array(\n+\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => 'publish',\n+\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'content'           => array(\n+\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'excerpt'           => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'assigned'          => array(\n+\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'id'      => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'title'   => array(\n+\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'slug'    => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'content' => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'author'  => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,751 +1,751 @@\n-\u003C?php\r\n-class LP_Jwt_Quiz_V1_Controller extends LP_REST_Jwt_Posts_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'quiz';\r\n-\r\n-\tprotected $post_type = LP_QUIZ_CPT;\r\n-\r\n-\tprotected $hierarchical = true;\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'view',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fstart',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'start_quiz' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fcheck_answer',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id'          => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'question_id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Question ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'check_quiz' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'id'       => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'answered' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Answer all questions.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'submit_quiz' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if a course can be read.\r\n-\t *\r\n-\t * Correctly handles courses with the inherit status.\r\n-\t *\r\n-\t * @author Nhamdv\r\n-\t *\r\n-\t * @return bool Whether the post can be read.\r\n-\t * *\u002F\r\n-\tpublic function check_read_permission( $post_id ) {\r\n-\t\tif ( empty( absint( $post_id ) ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $post_id );\r\n-\r\n-\t\tif ( ! $post ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t$post_status_obj = get_post_status_object( $post->post_status );\r\n-\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\u002F\u002F Get course ID by lesson ID assigned.\r\n-\t\t$course_id = $this->get_course_by_item_id( $post_id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\r\n-\r\n-\t\t$can_view_item = $user->can_view_item( $post_id, $can_view_content_course );\r\n-\r\n-\t\tif ( ! $can_view_item->flag ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Can we read the parent if we're inheriting?\r\n-\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\r\n-\t\t\t$parent = get_post( $post->post_parent );\r\n-\r\n-\t\t\tif ( $parent ) {\r\n-\t\t\t\treturn $this->check_read_permission( $parent );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tprotected function get_course_by_item_id( $item_id ) {\r\n-\t\tstatic $output;\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\tif ( empty( $item_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $output ) ) {\r\n-\t\t\t$output = $wpdb->get_var(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT c.ID FROM {$wpdb->posts} c\r\n-\t\t\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\r\n-\t\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\r\n-\t\t\t\t\tWHERE si.item_id = %d ORDER BY si.section_id DESC LIMIT 1\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$item_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( $output ) {\r\n-\t\t\treturn absint( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tprotected function get_object( $quiz = 0 ) {\r\n-\t\tglobal $post;\r\n-\r\n-\t\tif ( false === $quiz && isset( $post, $post->ID ) && LP_QUIZ_CPT === get_post_type( $post->ID ) ) {\r\n-\t\t\t$id = absint( $post->ID );\r\n-\t\t} elseif ( is_numeric( $quiz ) ) {\r\n-\t\t\t$id = $quiz;\r\n-\t\t} elseif ( $quiz instanceof LP_Quiz ) {\r\n-\t\t\t$id = $quiz->get_id();\r\n-\t\t} elseif ( ! empty( $quiz->ID ) ) {\r\n-\t\t\t$id = $quiz->ID;\r\n-\t\t}\r\n-\r\n-\t\treturn new LP_Quiz( $id );\r\n-\t}\r\n-\r\n-\tpublic function start_quiz( $request ) {\r\n-\t\t$response  = new LP_REST_Response();\r\n-\t\t$quiz_id   = isset( $request['id'] ) ? absint( $request['id'] ) : '';\r\n-\t\t$course_id = $this->get_course_by_item_id( $quiz_id );\r\n-\r\n-\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\r\n-\r\n-\t\t\treturn rest_ensure_response( $response );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\r\n-\t\t}\r\n-\r\n-\t\t$controller = new LP_REST_Users_Controller();\r\n-\r\n-\t\t$request->set_param( 'course_id', $course_id );\r\n-\t\t$request->set_param( 'item_id', $quiz_id );\r\n-\r\n-\t\treturn $controller->start_quiz( $request );\r\n-\t}\r\n-\r\n-\tpublic function check_quiz( $request ) {\r\n-\t\t$response    = new LP_REST_Response();\r\n-\t\t$quiz_id     = isset( $request['id'] ) ? absint( $request['id'] ) : '';\r\n-\t\t$question_id = isset( $request['question_id'] ) ? absint( $request['question_id'] ) : '';\r\n-\t\t$answered    = isset( $request['answered'] ) ? wp_unslash( $request['answered'] ) : '';\r\n-\t\t$course_id   = $this->get_course_by_item_id( $quiz_id );\r\n-\r\n-\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\r\n-\r\n-\t\t\treturn rest_ensure_response( $response );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\r\n-\t\t}\r\n-\r\n-\t\t$controller = new LP_REST_Users_Controller();\r\n-\r\n-\t\t$request->set_param( 'answered', $answered );\r\n-\t\t$request->set_param( 'question_id', $question_id );\r\n-\t\t$request->set_param( 'course_id', $course_id );\r\n-\t\t$request->set_param( 'item_id', $quiz_id );\r\n-\r\n-\t\treturn $controller->check_answer( $request );\r\n-\t}\r\n-\r\n-\tpublic function submit_quiz( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\t$quiz_id  = isset( $request['id'] ) ? absint( $request['id'] ) : '';\r\n-\t\t$answered = isset( $request['answered'] ) ? wp_unslash( $request['answered'] ) : '';\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $quiz_id );\r\n-\r\n-\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\r\n-\r\n-\t\t\treturn rest_ensure_response( $response );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $request['answered'] ) ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = esc_html__( 'No Answer param.', 'learnpress' );\r\n-\r\n-\t\t\treturn rest_ensure_response( $response );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\r\n-\t\t}\r\n-\r\n-\t\t$controller = new LP_REST_Users_Controller();\r\n-\r\n-\t\t$request->set_param( 'answered', $answered );\r\n-\t\t$request->set_param( 'course_id', $course_id );\r\n-\t\t$request->set_param( 'item_id', $quiz_id );\r\n-\r\n-\t\treturn $controller->submit_quiz( $request );\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $object, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\t\t$data    = $this->get_quiz_data( $object, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\r\n-\t}\r\n-\r\n-\tprotected function get_quiz_data( $object, $context = 'view' ) {\r\n-\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\r\n-\t\t$fields  = $this->get_fields_for_response( $request );\r\n-\r\n-\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\r\n-\t\t$post = get_post( $id );\r\n-\t\t$data = array();\r\n-\r\n-\t\t$assigned = $this->get_assigned( $id );\r\n-\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\r\n-\t\t\t$course_id = $assigned['course']['id'];\r\n-\t\t\t$object->set_course( $course_id );\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $id;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $post->post_title;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'slug':\r\n-\t\t\t\t\t$data['slug'] = $post->post_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'permalink':\r\n-\t\t\t\t\t$data['permalink'] = $object->get_permalink();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created':\r\n-\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_created_gmt':\r\n-\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified':\r\n-\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'date_modified_gmt':\r\n-\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$data['status'] = $post->post_status;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'content':\r\n-\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'excerpt':\r\n-\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'can_finish_course':\r\n-\t\t\t\t\t$data['can_finish_course'] = $this->check_can_finish_course( $id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'assigned':\r\n-\t\t\t\t\t$data['assigned'] = $assigned;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'questions':\r\n-\t\t\t\t\t$data['questions'] = $this->get_quiz_results( $object, true )['questions'] ?? array();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'results':\r\n-\t\t\t\t\t$data['results'] = $this->get_quiz_results( $object );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$data['meta_data'] = $this->get_course_meta( $id );\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function check_can_finish_course( $id ) {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user || ! $id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( $user && $course ) {\r\n-\t\t\t$check = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\t\tif ( $check['status'] === 'success' ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function get_quiz_results( $quiz, $get_question = false ) {\r\n-\t\t$output = array(\r\n-\t\t\t'status' => '',\r\n-\t\t);\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user || ! $quiz ) {\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t$id = ! empty( $quiz->ID ) ? $quiz->ID : $quiz->get_id();\r\n-\r\n-\t\t$course_id = $this->get_course_by_item_id( $id );\r\n-\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t$user_course         = $user->get_course_data( $course_id );\r\n-\t\t$user_quiz           = $user_course ? $user_course->get_item( $id ) : false;\r\n-\t\t$show_check          = $quiz->get_instant_check();\r\n-\t\t$show_correct_review = $quiz->get_show_correct_review();\r\n-\t\t$answered            = array();\r\n-\t\t$status              = '';\r\n-\t\t$checked_questions   = array();\r\n-\t\t$question_ids        = $quiz->get_question_ids();\r\n-\r\n-\t\tif ( $user_quiz ) {\r\n-\t\t\t$status            = $user_quiz->get_status();\r\n-\t\t\t$quiz_results      = $user_quiz->get_results( '' );\r\n-\t\t\t$checked_questions = $user_quiz->get_checked_questions();\r\n-\t\t\t$expiration_time   = $user_quiz->get_expiration_time();\r\n-\r\n-\t\t\t$output = array(\r\n-\t\t\t\t'status'            => $status,\r\n-\t\t\t\t'attempts'          => $user_quiz->get_attempts(),\r\n-\t\t\t\t'checked_questions' => $checked_questions,\r\n-\t\t\t\t'start_time'        => lp_jwt_prepare_date_response( $user_quiz->get_start_time()->toSql() ),\r\n-\t\t\t\t'retaken'           => absint( $user_quiz->get_retaken_count() ),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$output['total_time'] = $user_quiz->get_timestamp_remaining();\r\n-\r\n-\t\t\tif ( $quiz_results ) {\r\n-\t\t\t\t$output['results'] = $quiz_results->get();\r\n-\t\t\t\t$answered          = $quiz_results->getQuestions();\r\n-\t\t\t\t$question_ids      = $quiz_results->getQuestions( 'ids' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$output['answered']     = ! empty( $answered ) ? (object) $answered : new stdClass();\r\n-\t\t\t$output['question_ids'] = array_map( 'absint', array_values( $question_ids ) );\r\n-\t\t}\r\n-\r\n-\t\t$duration = $quiz->get_duration();\r\n-\r\n-\t\t$array = array(\r\n-\t\t\t'passing_grade'      => $quiz->get_passing_grade(),\r\n-\t\t\t'negative_marking'   => $quiz->get_negative_marking(),\r\n-\t\t\t'instant_check'      => $quiz->get_instant_check(),\r\n-\t\t\t'retake_count'       => (float) $quiz->get_retake_count(),\r\n-\t\t\t'questions_per_page' => $quiz->get_pagination(),\r\n-\t\t\t'page_numbers'       => get_post_meta( $quiz->get_id(), '_lp_pagination_numbers', true ) === 'yes',\r\n-\t\t\t'review_questions'   => $quiz->get_review_questions(),\r\n-\t\t\t'support_options'    => learn_press_get_question_support_answer_options(),\r\n-\t\t\t'duration'           => $duration ? $duration->get() : false,\r\n-\t\t);\r\n-\r\n-\t\tif ( function_exists( 'learn_press_rest_prepare_user_questions' ) && $get_question ) {\r\n-\t\t\t$questions = learn_press_rest_prepare_user_questions(\r\n-\t\t\t\t$question_ids,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'instant_check'       => $show_check,\r\n-\t\t\t\t\t'quiz_status'         => $status,\r\n-\t\t\t\t\t'checked_questions'   => $checked_questions,\r\n-\t\t\t\t\t'answered'            => $answered,\r\n-\t\t\t\t\t'show_correct_review' => $show_correct_review,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$output['questions'] = $questions;\r\n-\t\t}\r\n-\r\n-\t\treturn array_merge( $array, $output );\r\n-\t}\r\n-\r\n-\tpublic function get_course_meta( $id ) {\r\n-\t\tif ( ! class_exists( 'LP_Meta_Box_Quiz' ) ) {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php';\r\n-\t\t}\r\n-\r\n-\t\t$metabox = new LP_Meta_Box_Quiz();\r\n-\r\n-\t\t$output = array();\r\n-\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\r\n-\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\r\n-\t\t\t\t$object->id          = $meta_key;\r\n-\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_assigned( int $id ) : array {\r\n-\t\t$courses = learn_press_get_item_courses( $id );\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( $courses ) {\r\n-\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t$output['course'] = array(\r\n-\t\t\t\t\t'id'      => $course->ID,\r\n-\t\t\t\t\t'title'   => $course->post_title,\r\n-\t\t\t\t\t'slug'    => $course->post_name,\r\n-\t\t\t\t\t'content' => $course->post_content,\r\n-\t\t\t\t\t'author'  => $course->post_author,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_all_question( object $quiz ) : array {\r\n-\t\t$questions = array();\r\n-\r\n-\t\tif ( function_exists( 'learn_press_rest_prepare_user_questions' ) ) {\r\n-\t\t\t$questions = learn_press_rest_prepare_user_questions(\r\n-\t\t\t\t$quiz->get_question_ids(),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'instant_check'       => $quiz->get_instant_check(),\r\n-\t\t\t\t\t'show_correct_review' => $quiz->get_show_correct_review(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $questions;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => $this->post_type,\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'                => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'              => array(\r\n-\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permalink'         => array(\r\n-\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created'      => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_created_gmt'  => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified'     => array(\r\n-\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'date_modified_gmt' => array(\r\n-\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'            => array(\r\n-\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => 'publish',\r\n-\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'           => array(\r\n-\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'excerpt'           => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'can_finish_course' => array(\r\n-\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'duration'          => array(\r\n-\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'assigned'          => array(\r\n-\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'id'      => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'title'   => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'slug'    => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'content' => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'author'  => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'questions'         => array(\r\n-\t\t\t\t\t'description' => __( 'List all of the Quiz Questions.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'description' => __( 'Question items.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t\t'id'      => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'type'    => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Item Type.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'title'   => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'content' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'point'   => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Point.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'hint'    => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Question Hint.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t\t\t'description' => __( 'Question Options.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t\t\t\t'description' => __( 'Question items.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t\t\t\t\t'title' => array(\r\n-\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t\t'value' => array(\r\n-\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item value.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t\t'uid'   => array(\r\n-\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item id.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'results'           => array(\r\n-\t\t\t\t\t'description' => __( 'Retrieves the quiz result..', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Jwt_Quiz_V1_Controller extends LP_REST_Jwt_Posts_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'quiz';\n+\n+\tprotected $post_type = LP_QUIZ_CPT;\n+\n+\tprotected $hierarchical = true;\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'view',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fstart',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'start_quiz' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fcheck_answer',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id'          => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t\t'question_id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Question ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'check_quiz' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Ffinish',\n+\t\t\tarray(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'id'       => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Quiz ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t\t'answered' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Answer all questions.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'submit_quiz' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Checks if a course can be read.\n+\t *\n+\t * Correctly handles courses with the inherit status.\n+\t *\n+\t * @author Nhamdv\n+\t *\n+\t * @return bool Whether the post can be read.\n+\t * *\u002F\n+\tpublic function check_read_permission( $post_id ) {\n+\t\tif ( empty( absint( $post_id ) ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$post = get_post( $post_id );\n+\n+\t\tif ( ! $post ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( lp_rest_check_post_permissions( $this->post_type, 'read', $post_id ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t$post_status_obj = get_post_status_object( $post->post_status );\n+\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\u002F\u002F Get course ID by lesson ID assigned.\n+\t\t$course_id = $this->get_course_by_item_id( $post_id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$can_view_content_course = $user->can_view_content_course( $course_id );\n+\n+\t\t$can_view_item = $user->can_view_item( $post_id, $can_view_content_course );\n+\n+\t\tif ( ! $can_view_item->flag ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F\u002F Can we read the parent if we're inheriting?\n+\t\tif ( 'inherit' === $post->post_status && $post->post_parent > 0 ) {\n+\t\t\t$parent = get_post( $post->post_parent );\n+\n+\t\t\tif ( $parent ) {\n+\t\t\t\treturn $this->check_read_permission( $parent );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tprotected function get_course_by_item_id( $item_id ) {\n+\t\tstatic $output;\n+\n+\t\tglobal $wpdb;\n+\n+\t\tif ( empty( $item_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! isset( $output ) ) {\n+\t\t\t$output = $wpdb->get_var(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT c.ID FROM {$wpdb->posts} c\n+\t\t\t\t\tINNER JOIN {$wpdb->learnpress_sections} s ON c.ID = s.section_course_id\n+\t\t\t\t\tINNER JOIN {$wpdb->learnpress_section_items} si ON si.section_id = s.section_id\n+\t\t\t\t\tWHERE si.item_id = %d ORDER BY si.section_id DESC LIMIT 1\n+\t\t\t\t\t\",\n+\t\t\t\t\t$item_id\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( $output ) {\n+\t\t\treturn absint( $output );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tprotected function get_object( $quiz = 0 ) {\n+\t\tglobal $post;\n+\n+\t\tif ( false === $quiz && isset( $post, $post->ID ) && LP_QUIZ_CPT === get_post_type( $post->ID ) ) {\n+\t\t\t$id = absint( $post->ID );\n+\t\t} elseif ( is_numeric( $quiz ) ) {\n+\t\t\t$id = $quiz;\n+\t\t} elseif ( $quiz instanceof LP_Quiz ) {\n+\t\t\t$id = $quiz->get_id();\n+\t\t} elseif ( ! empty( $quiz->ID ) ) {\n+\t\t\t$id = $quiz->ID;\n+\t\t}\n+\n+\t\treturn new LP_Quiz( $id );\n+\t}\n+\n+\tpublic function start_quiz( $request ) {\n+\t\t$response  = new LP_REST_Response();\n+\t\t$quiz_id   = isset( $request['id'] ) ? absint( $request['id'] ) : '';\n+\t\t$course_id = $this->get_course_by_item_id( $quiz_id );\n+\n+\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\n+\n+\t\t\treturn rest_ensure_response( $response );\n+\t\t}\n+\n+\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\n+\t\t}\n+\n+\t\t$controller = new LP_REST_Users_Controller();\n+\n+\t\t$request->set_param( 'course_id', $course_id );\n+\t\t$request->set_param( 'item_id', $quiz_id );\n+\n+\t\treturn $controller->start_quiz( $request );\n+\t}\n+\n+\tpublic function check_quiz( $request ) {\n+\t\t$response    = new LP_REST_Response();\n+\t\t$quiz_id     = isset( $request['id'] ) ? absint( $request['id'] ) : '';\n+\t\t$question_id = isset( $request['question_id'] ) ? absint( $request['question_id'] ) : '';\n+\t\t$answered    = isset( $request['answered'] ) ? wp_unslash( $request['answered'] ) : '';\n+\t\t$course_id   = $this->get_course_by_item_id( $quiz_id );\n+\n+\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\n+\n+\t\t\treturn rest_ensure_response( $response );\n+\t\t}\n+\n+\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\n+\t\t}\n+\n+\t\t$controller = new LP_REST_Users_Controller();\n+\n+\t\t$request->set_param( 'answered', $answered );\n+\t\t$request->set_param( 'question_id', $question_id );\n+\t\t$request->set_param( 'course_id', $course_id );\n+\t\t$request->set_param( 'item_id', $quiz_id );\n+\n+\t\treturn $controller->check_answer( $request );\n+\t}\n+\n+\tpublic function submit_quiz( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\t$quiz_id  = isset( $request['id'] ) ? absint( $request['id'] ) : '';\n+\t\t$answered = isset( $request['answered'] ) ? wp_unslash( $request['answered'] ) : '';\n+\n+\t\t$course_id = $this->get_course_by_item_id( $quiz_id );\n+\n+\t\tif ( empty( $quiz_id ) || empty( $course_id ) ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = esc_html__( 'There is no Quiz ID or Quiz assigned in the course.', 'learnpress' );\n+\n+\t\t\treturn rest_ensure_response( $response );\n+\t\t}\n+\n+\t\tif ( ! isset( $request['answered'] ) ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = esc_html__( 'No Answer param.', 'learnpress' );\n+\n+\t\t\treturn rest_ensure_response( $response );\n+\t\t}\n+\n+\t\tif ( ! class_exists( 'LP_REST_Users_Controller' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php';\n+\t\t}\n+\n+\t\t$controller = new LP_REST_Users_Controller();\n+\n+\t\t$request->set_param( 'answered', $answered );\n+\t\t$request->set_param( 'course_id', $course_id );\n+\t\t$request->set_param( 'item_id', $quiz_id );\n+\n+\t\treturn $controller->submit_quiz( $request );\n+\t}\n+\n+\tpublic function prepare_object_for_response( $object, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\t\t$data    = $this->get_quiz_data( $object, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( \"lp_jwt_rest_prepare_{$this->post_type}_object\", $response, $object, $request );\n+\t}\n+\n+\tprotected function get_quiz_data( $object, $context = 'view' ) {\n+\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\n+\t\t$fields  = $this->get_fields_for_response( $request );\n+\n+\t\t$id   = ! empty( $object->ID ) ? $object->ID : $object->get_id();\n+\t\t$post = get_post( $id );\n+\t\t$data = array();\n+\n+\t\t$assigned = $this->get_assigned( $id );\n+\t\tif ( ! empty( $assigned ) && method_exists( $object, 'set_course' ) ) {\n+\t\t\t$course_id = $assigned['course']['id'];\n+\t\t\t$object->set_course( $course_id );\n+\t\t}\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $id;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $post->post_title;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'slug':\n+\t\t\t\t\t$data['slug'] = $post->post_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'permalink':\n+\t\t\t\t\t$data['permalink'] = $object->get_permalink();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created':\n+\t\t\t\t\t$data['date_created'] = lp_jwt_prepare_date_response( $post->post_date_gmt, $post->post_date );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_created_gmt':\n+\t\t\t\t\t$data['date_created_gmt'] = lp_jwt_prepare_date_response( $post->post_date_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified':\n+\t\t\t\t\t$data['date_modified'] = lp_jwt_prepare_date_response( $post->post_modified_gmt, $post->post_modified );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'date_modified_gmt':\n+\t\t\t\t\t$data['date_modified_gmt'] = lp_jwt_prepare_date_response( $post->post_modified_gmt );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$data['status'] = $post->post_status;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'content':\n+\t\t\t\t\t$data['content'] = 'view' === $context ? apply_filters( 'the_content', $post->post_content ) : $post->post_content;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'excerpt':\n+\t\t\t\t\t$data['excerpt'] = $post->post_excerpt;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'can_finish_course':\n+\t\t\t\t\t$data['can_finish_course'] = $this->check_can_finish_course( $id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\t$data['duration'] = learn_press_get_post_translated_duration( $id, esc_html__( 'Lifetime', 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'assigned':\n+\t\t\t\t\t$data['assigned'] = $assigned;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'questions':\n+\t\t\t\t\t$data['questions'] = $this->get_quiz_results( $object, true )['questions'] ?? array();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'results':\n+\t\t\t\t\t$data['results'] = $this->get_quiz_results( $object );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$data['meta_data'] = $this->get_course_meta( $id );\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function check_can_finish_course( $id ) {\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user || ! $id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_id = $this->get_course_by_item_id( $id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\tif ( $user && $course ) {\n+\t\t\t$check = $user->can_show_finish_course_btn( $course );\n+\n+\t\t\tif ( $check['status'] === 'success' ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function get_quiz_results( $quiz, $get_question = false ) {\n+\t\t$output = array(\n+\t\t\t'status' => '',\n+\t\t);\n+\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user || ! $quiz ) {\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t$id = ! empty( $quiz->ID ) ? $quiz->ID : $quiz->get_id();\n+\n+\t\t$course_id = $this->get_course_by_item_id( $id );\n+\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t$user_course         = $user->get_course_data( $course_id );\n+\t\t$user_quiz           = $user_course ? $user_course->get_item( $id ) : false;\n+\t\t$show_check          = $quiz->get_instant_check();\n+\t\t$show_correct_review = $quiz->get_show_correct_review();\n+\t\t$answered            = array();\n+\t\t$status              = '';\n+\t\t$checked_questions   = array();\n+\t\t$question_ids        = $quiz->get_question_ids();\n+\n+\t\tif ( $user_quiz ) {\n+\t\t\t$status            = $user_quiz->get_status();\n+\t\t\t$quiz_results      = $user_quiz->get_results( '' );\n+\t\t\t$checked_questions = $user_quiz->get_checked_questions();\n+\t\t\t$expiration_time   = $user_quiz->get_expiration_time();\n+\n+\t\t\t$output = array(\n+\t\t\t\t'status'            => $status,\n+\t\t\t\t'attempts'          => $user_quiz->get_attempts(),\n+\t\t\t\t'checked_questions' => $checked_questions,\n+\t\t\t\t'start_time'        => lp_jwt_prepare_date_response( $user_quiz->get_start_time()->toSql() ),\n+\t\t\t\t'retaken'           => absint( $user_quiz->get_retaken_count() ),\n+\t\t\t);\n+\n+\t\t\t$output['total_time'] = $user_quiz->get_timestamp_remaining();\n+\n+\t\t\tif ( $quiz_results ) {\n+\t\t\t\t$output['results'] = $quiz_results->get();\n+\t\t\t\t$answered          = $quiz_results->getQuestions();\n+\t\t\t\t$question_ids      = $quiz_results->getQuestions( 'ids' );\n+\t\t\t}\n+\n+\t\t\t$output['answered']     = ! empty( $answered ) ? (object) $answered : new stdClass();\n+\t\t\t$output['question_ids'] = array_map( 'absint', array_values( $question_ids ) );\n+\t\t}\n+\n+\t\t$duration = $quiz->get_duration();\n+\n+\t\t$array = array(\n+\t\t\t'passing_grade'      => $quiz->get_passing_grade(),\n+\t\t\t'negative_marking'   => $quiz->get_negative_marking(),\n+\t\t\t'instant_check'      => $quiz->get_instant_check(),\n+\t\t\t'retake_count'       => (float) $quiz->get_retake_count(),\n+\t\t\t'questions_per_page' => $quiz->get_pagination(),\n+\t\t\t'page_numbers'       => get_post_meta( $quiz->get_id(), '_lp_pagination_numbers', true ) === 'yes',\n+\t\t\t'review_questions'   => $quiz->get_review_questions(),\n+\t\t\t'support_options'    => learn_press_get_question_support_answer_options(),\n+\t\t\t'duration'           => $duration ? $duration->get() : false,\n+\t\t);\n+\n+\t\tif ( function_exists( 'learn_press_rest_prepare_user_questions' ) && $get_question ) {\n+\t\t\t$questions = learn_press_rest_prepare_user_questions(\n+\t\t\t\t$question_ids,\n+\t\t\t\tarray(\n+\t\t\t\t\t'instant_check'       => $show_check,\n+\t\t\t\t\t'quiz_status'         => $status,\n+\t\t\t\t\t'checked_questions'   => $checked_questions,\n+\t\t\t\t\t'answered'            => $answered,\n+\t\t\t\t\t'show_correct_review' => $show_correct_review,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$output['questions'] = $questions;\n+\t\t}\n+\n+\t\treturn array_merge( $array, $output );\n+\t}\n+\n+\tpublic function get_course_meta( $id ) {\n+\t\tif ( ! class_exists( 'LP_Meta_Box_Quiz' ) ) {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php';\n+\t\t}\n+\n+\t\t$metabox = new LP_Meta_Box_Quiz();\n+\n+\t\t$output = array();\n+\t\tforeach ( $metabox->metabox( $id ) as $meta_key => $object ) {\n+\t\t\tif ( is_a( $object, 'LP_Meta_Box_Field' ) ) {\n+\t\t\t\t$object->id          = $meta_key;\n+\t\t\t\t$output[ $meta_key ] = $object->meta_value( $id );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_assigned( int $id ) : array {\n+\t\t$courses = learn_press_get_item_courses( $id );\n+\n+\t\t$output = array();\n+\n+\t\tif ( $courses ) {\n+\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t$output['course'] = array(\n+\t\t\t\t\t'id'      => $course->ID,\n+\t\t\t\t\t'title'   => $course->post_title,\n+\t\t\t\t\t'slug'    => $course->post_name,\n+\t\t\t\t\t'content' => $course->post_content,\n+\t\t\t\t\t'author'  => $course->post_author,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_all_question( object $quiz ) : array {\n+\t\t$questions = array();\n+\n+\t\tif ( function_exists( 'learn_press_rest_prepare_user_questions' ) ) {\n+\t\t\t$questions = learn_press_rest_prepare_user_questions(\n+\t\t\t\t$quiz->get_question_ids(),\n+\t\t\t\tarray(\n+\t\t\t\t\t'instant_check'       => $quiz->get_instant_check(),\n+\t\t\t\t\t'show_correct_review' => $quiz->get_show_correct_review(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $questions;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => $this->post_type,\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'                => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'              => array(\n+\t\t\t\t\t'description' => __( 'Course name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'slug'              => array(\n+\t\t\t\t\t'description' => __( 'Course slug.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'permalink'         => array(\n+\t\t\t\t\t'description' => __( 'Course URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created'      => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was created, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_created_gmt'  => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was created, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified'     => array(\n+\t\t\t\t\t'description' => __( \"The date the Course was last modified, in the site's timezone.\", 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'date_modified_gmt' => array(\n+\t\t\t\t\t'description' => __( 'The date the Course was last modified, as GMT.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'date-time',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'status'            => array(\n+\t\t\t\t\t'description' => __( 'Course status (post status).', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => 'publish',\n+\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'content'           => array(\n+\t\t\t\t\t'description' => __( 'Course content.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'excerpt'           => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the course excerpt..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'can_finish_course' => array(\n+\t\t\t\t\t'description' => __( 'Can finish the course', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'duration'          => array(\n+\t\t\t\t\t'description' => __( 'Duration', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'assigned'          => array(\n+\t\t\t\t\t'description' => __( 'Assigned.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'id'      => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'title'   => array(\n+\t\t\t\t\t\t\t'description' => __( 'Title.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'slug'    => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'content' => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'author'  => array(\n+\t\t\t\t\t\t\t'description' => __( 'Item Author.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'questions'         => array(\n+\t\t\t\t\t'description' => __( 'List all of the Quiz Questions.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'description' => __( 'Question items.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t\t'id'      => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Item ID.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'type'    => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Item Type.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'title'   => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'content' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Item Content.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'point'   => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Point.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'hint'    => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Question Hint.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t\t\t'description' => __( 'Question Options.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t\t\t\t'description' => __( 'Question items.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t\t\t\t\t'title' => array(\n+\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item title.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t\t'value' => array(\n+\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item value.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t\t'uid'   => array(\n+\t\t\t\t\t\t\t\t\t\t\t'description' => __( 'Item id.', 'learnpress' ),\n+\t\t\t\t\t\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'results'           => array(\n+\t\t\t\t\t'description' => __( 'Retrieves the quiz result..', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,365 +1,365 @@\n-\u003C?php\r\n-class LP_Jwt_Section_Items_V1_Controller extends LP_REST_Jwt_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'section-items';\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fitems\u002F(?P\u003Csection_id>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'section_id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Section ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_section_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_items_permissions_check( $request ) {\r\n-\t\tif ( empty( $request['section_id'] ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_section_not_section_id', __( 'Sorry, Invalid Section ID param.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $request['section_id'] );\r\n-\r\n-\t\tif ( ! $course_id ) {\r\n-\t\t\treturn new WP_Error( 'lp_section_not_course', __( 'Please assign a section to the Course.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $course_id );\r\n-\r\n-\t\t$post_status_obj = get_post_status_object( $post->post_status );\r\n-\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\r\n-\t\t\treturn new WP_Error( 'lp_section_not_public', __( 'The course is not public', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_section_items( $request ) {\r\n-\t\t$filters               = new LP_Section_Items_Filter();\r\n-\t\t$filters->section_id   = $request['section_id'];\r\n-\t\t$filters->limit        = $request['per_page'];\r\n-\t\t$filters->page         = $request['page'];\r\n-\t\t$filters->order        = $request['order'];\r\n-\t\t$filters->search_title = $request['search'];\r\n-\t\t$filters->item_ids     = $request['include'];\r\n-\t\t$filters->item_not_ids = $request['exclude'];\r\n-\r\n-\t\t$query_results = LP_Section_DB::getInstance()->get_section_items_by_section_id( $filters );\r\n-\r\n-\t\tif ( is_wp_error( $query_results ) ) {\r\n-\t\t\treturn $query_results;\r\n-\t\t}\r\n-\r\n-\t\t$results = $query_results['results'];\r\n-\r\n-\t\t$return = array();\r\n-\r\n-\t\tforeach ( $results as $result ) {\r\n-\t\t\t$data     = $this->prepare_object_for_response( $result, $request );\r\n-\t\t\t$return[] = $this->prepare_response_for_collection( $data );\r\n-\t\t}\r\n-\r\n-\t\t$response = rest_ensure_response( $return );\r\n-\r\n-\t\t$response->header( 'X-WP-Total', $query_results['total'] );\r\n-\t\t$response->header( 'X-WP-TotalPages', (int) $query_results['pages'] );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $section_data, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\r\n-\t\t$data = $this->get_sections_data( $section_data, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( 'lp_jwt_rest_prepare_sections_object', $response, $section_data, $request );\r\n-\t}\r\n-\r\n-\tpublic function get_sections_data( $item_data, $context, $request ) {\r\n-\t\t$fields = $this->get_fields_for_response( $request );\r\n-\r\n-\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $request['section_id'] ?? 0 );\r\n-\t\t$course    = learn_press_get_course( $course_id );\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$item_id = absint( $item_data['ID'] );\r\n-\r\n-\t\t$course_item = $course->get_item( $item_id );\r\n-\r\n-\t\t\u002F\u002F Check if item is not exists or deactive add-on( Assignment, H5P, etc )\r\n-\t\tif ( ! $course_item instanceof LP_Course_Item ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user = $this->get_current_user();\r\n-\r\n-\t\t$user_course = $user ? $user->get_course_data( $course_id ) : false;\r\n-\r\n-\t\t$user_item = $user_course ? $user_course->get_item( $item_id ) : false;\r\n-\r\n-\t\tif ( $user_item ) {\r\n-\t\t\t$graduation = $user_item->get_graduation();\r\n-\t\t\t$status     = $user_item->get_status();\r\n-\t\t}\r\n-\r\n-\t\t$can_view_item = new LP_Model_User_Can_View_Course_Item();\r\n-\t\tif ( $user ) {\r\n-\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $course_id ) );\r\n-\t\t\t$can_view_item           = $user->can_view_item( $item_id, $can_view_content_course );\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'id', $fields ) ) {\r\n-\t\t\t$data['id'] = $item_data['ID'] ?? 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'name', $fields ) ) {\r\n-\t\t\t$data['name'] = $item_data['post_title'] ?? '';\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'slug', $fields ) ) {\r\n-\t\t\t$data['slug'] = $item_data['post_name'] ?? '';\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'status', $fields ) ) {\r\n-\t\t\t$data['status'] = $item_data['post_status'] ?? '';\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'permalink', $fields ) ) {\r\n-\t\t\t$data['permalink'] = $can_view_item->flag ? $course_item->get_permalink() : '';\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'type', $fields ) ) {\r\n-\t\t\t$data['type'] = $course_item->get_item_type();\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'preview', $fields ) ) {\r\n-\t\t\t$data['preview'] = $course_item->is_preview();\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'duration', $fields ) ) {\r\n-\t\t\t$data['duration'] = $course_item->get_duration()->to_timer(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'day'    => __( '%s days', 'learnpress' ),\r\n-\t\t\t\t\t'hour'   => __( '%s hours', 'learnpress' ),\r\n-\t\t\t\t\t'minute' => __( '%s mins', 'learnpress' ),\r\n-\t\t\t\t\t'second' => __( '%s secs', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'graduation', $fields ) && $graduation ) {\r\n-\t\t\t$data['graduation'] = $graduation;\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'user_status', $fields ) && $status ) {\r\n-\t\t\t$data['user_status'] = $status;\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'locked', $fields ) ) {\r\n-\t\t\t$data['locked'] = ! $can_view_item->flag;\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'count_question', $fields ) && $course_item->get_item_type() === LP_QUIZ_CPT ) {\r\n-\t\t\t$data['count_question'] = $course_item->count_questions();\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'content.raw', $fields ) && $can_view_item->flag ) {\r\n-\t\t\t$data['content']['raw'] = $item_data['post_content'];\r\n-\t\t}\r\n-\r\n-\t\tif ( rest_is_field_included( 'content.rendered', $fields ) && $can_view_item->flag ) {\r\n-\t\t\t$data['content']['rendered'] = apply_filters( 'the_content', $item_data['post_content'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function get_current_user() {\r\n-\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_user( $user_id );\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => 'learnpress_sections',\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'             => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'           => array(\r\n-\t\t\t\t\t'description' => __( 'Item name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'           => array(\r\n-\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permalink'      => array(\r\n-\t\t\t\t\t'description' => __( 'Item URL.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'         => array(\r\n-\t\t\t\t\t'description' => __( 'Item status (post status).', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => 'publish',\r\n-\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'type'           => array(\r\n-\t\t\t\t\t'description' => __( 'Item type.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => '',\r\n-\t\t\t\t\t'enum'        => learn_press_get_block_course_item_types(),\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'preview'        => array(\r\n-\t\t\t\t\t'description' => __( 'Item preview.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'default'     => false,\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'duration'       => array(\r\n-\t\t\t\t\t'description' => __( 'Item duration.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => '',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'graduation'     => array(\r\n-\t\t\t\t\t'description' => __( 'Item graduation.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => '',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'user_status'    => array(\r\n-\t\t\t\t\t'description' => __( 'Item status.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'default'     => '',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'locked'         => array(\r\n-\t\t\t\t\t'description' => __( 'Item locked.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'boolean',\r\n-\t\t\t\t\t'default'     => false,\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'count_question' => array(\r\n-\t\t\t\t\t'description' => __( 'Count questions.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'default'     => 0,\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'content'        => array(\r\n-\t\t\t\t\t'description' => __( 'Item content.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'properties'  => array(\r\n-\t\t\t\t\t\t'raw'      => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'Title for the post, as it exists in the database.' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'rendered' => array(\r\n-\t\t\t\t\t\t\t'description' => __( 'HTML title for the post, transformed for display.' ),\r\n-\t\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t\t'context'     => array( 'view', 'edit', 'embed' ),\r\n-\t\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-\r\n-\tpublic function get_collection_params() {\r\n-\t\t$params                       = array();\r\n-\t\t$params['context']            = $this->get_context_param();\r\n-\t\t$params['context']['default'] = 'view';\r\n-\r\n-\t\t$params['page']     = array(\r\n-\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 1,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t);\r\n-\t\t$params['per_page'] = array(\r\n-\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 10,\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t\t'maximum'           => 100,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['order']    = array(\r\n-\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'default'           => 'asc',\r\n-\t\t\t'enum'              => array( 'asc', 'desc' ),\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['search']   = array(\r\n-\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['exclude']  = array(\r\n-\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\t\t$params['include']  = array(\r\n-\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'lp_rest_sections_collection_params', $params );\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Jwt_Section_Items_V1_Controller extends LP_REST_Jwt_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'section-items';\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fitems\u002F(?P\u003Csection_id>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'section_id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Section ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_section_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_items_permissions_check( $request ) {\n+\t\tif ( empty( $request['section_id'] ) ) {\n+\t\t\treturn new WP_Error( 'lp_section_not_section_id', __( 'Sorry, Invalid Section ID param.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $request['section_id'] );\n+\n+\t\tif ( ! $course_id ) {\n+\t\t\treturn new WP_Error( 'lp_section_not_course', __( 'Please assign a section to the Course.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\t$post = get_post( $course_id );\n+\n+\t\t$post_status_obj = get_post_status_object( $post->post_status );\n+\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\n+\t\t\treturn new WP_Error( 'lp_section_not_public', __( 'The course is not public', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_section_items( $request ) {\n+\t\t$filters               = new LP_Section_Items_Filter();\n+\t\t$filters->section_id   = $request['section_id'];\n+\t\t$filters->limit        = $request['per_page'];\n+\t\t$filters->page         = $request['page'];\n+\t\t$filters->order        = $request['order'];\n+\t\t$filters->search_title = $request['search'];\n+\t\t$filters->item_ids     = $request['include'];\n+\t\t$filters->item_not_ids = $request['exclude'];\n+\n+\t\t$query_results = LP_Section_DB::getInstance()->get_section_items_by_section_id( $filters );\n+\n+\t\tif ( is_wp_error( $query_results ) ) {\n+\t\t\treturn $query_results;\n+\t\t}\n+\n+\t\t$results = $query_results['results'];\n+\n+\t\t$return = array();\n+\n+\t\tforeach ( $results as $result ) {\n+\t\t\t$data     = $this->prepare_object_for_response( $result, $request );\n+\t\t\t$return[] = $this->prepare_response_for_collection( $data );\n+\t\t}\n+\n+\t\t$response = rest_ensure_response( $return );\n+\n+\t\t$response->header( 'X-WP-Total', $query_results['total'] );\n+\t\t$response->header( 'X-WP-TotalPages', (int) $query_results['pages'] );\n+\n+\t\treturn $response;\n+\t}\n+\n+\tpublic function prepare_object_for_response( $section_data, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\n+\t\t$data = $this->get_sections_data( $section_data, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( 'lp_jwt_rest_prepare_sections_object', $response, $section_data, $request );\n+\t}\n+\n+\tpublic function get_sections_data( $item_data, $context, $request ) {\n+\t\t$fields = $this->get_fields_for_response( $request );\n+\n+\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $request['section_id'] ?? 0 );\n+\t\t$course    = learn_press_get_course( $course_id );\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$item_id = absint( $item_data['ID'] );\n+\n+\t\t$course_item = $course->get_item( $item_id );\n+\n+\t\t\u002F\u002F Check if item is not exists or deactive add-on( Assignment, H5P, etc )\n+\t\tif ( ! $course_item instanceof LP_Course_Item ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user = $this->get_current_user();\n+\n+\t\t$user_course = $user ? $user->get_course_data( $course_id ) : false;\n+\n+\t\t$user_item = $user_course ? $user_course->get_item( $item_id ) : false;\n+\n+\t\tif ( $user_item ) {\n+\t\t\t$graduation = $user_item->get_graduation();\n+\t\t\t$status     = $user_item->get_status();\n+\t\t}\n+\n+\t\t$can_view_item = new LP_Model_User_Can_View_Course_Item();\n+\t\tif ( $user ) {\n+\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $course_id ) );\n+\t\t\t$can_view_item           = $user->can_view_item( $item_id, $can_view_content_course );\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'id', $fields ) ) {\n+\t\t\t$data['id'] = $item_data['ID'] ?? 0;\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'name', $fields ) ) {\n+\t\t\t$data['name'] = $item_data['post_title'] ?? '';\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'slug', $fields ) ) {\n+\t\t\t$data['slug'] = $item_data['post_name'] ?? '';\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'status', $fields ) ) {\n+\t\t\t$data['status'] = $item_data['post_status'] ?? '';\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'permalink', $fields ) ) {\n+\t\t\t$data['permalink'] = $can_view_item->flag ? $course_item->get_permalink() : '';\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'type', $fields ) ) {\n+\t\t\t$data['type'] = $course_item->get_item_type();\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'preview', $fields ) ) {\n+\t\t\t$data['preview'] = $course_item->is_preview();\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'duration', $fields ) ) {\n+\t\t\t$data['duration'] = $course_item->get_duration()->to_timer(\n+\t\t\t\tarray(\n+\t\t\t\t\t'day'    => __( '%s days', 'learnpress' ),\n+\t\t\t\t\t'hour'   => __( '%s hours', 'learnpress' ),\n+\t\t\t\t\t'minute' => __( '%s mins', 'learnpress' ),\n+\t\t\t\t\t'second' => __( '%s secs', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\ttrue\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'graduation', $fields ) && $graduation ) {\n+\t\t\t$data['graduation'] = $graduation;\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'user_status', $fields ) && $status ) {\n+\t\t\t$data['user_status'] = $status;\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'locked', $fields ) ) {\n+\t\t\t$data['locked'] = ! $can_view_item->flag;\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'count_question', $fields ) && $course_item->get_item_type() === LP_QUIZ_CPT ) {\n+\t\t\t$data['count_question'] = $course_item->count_questions();\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'content.raw', $fields ) && $can_view_item->flag ) {\n+\t\t\t$data['content']['raw'] = $item_data['post_content'];\n+\t\t}\n+\n+\t\tif ( rest_is_field_included( 'content.rendered', $fields ) && $can_view_item->flag ) {\n+\t\t\t$data['content']['rendered'] = apply_filters( 'the_content', $item_data['post_content'] );\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function get_current_user() {\n+\t\t$user_id = get_current_user_id();\n+\n+\t\tif ( ! $user_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn learn_press_get_user( $user_id );\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => 'learnpress_sections',\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'             => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'           => array(\n+\t\t\t\t\t'description' => __( 'Item name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'slug'           => array(\n+\t\t\t\t\t'description' => __( 'Item slug.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'permalink'      => array(\n+\t\t\t\t\t'description' => __( 'Item URL.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'status'         => array(\n+\t\t\t\t\t'description' => __( 'Item status (post status).', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => 'publish',\n+\t\t\t\t\t'enum'        => array_merge( array_keys( get_post_statuses() ), array( 'future' ) ),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'type'           => array(\n+\t\t\t\t\t'description' => __( 'Item type.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => '',\n+\t\t\t\t\t'enum'        => learn_press_get_block_course_item_types(),\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'preview'        => array(\n+\t\t\t\t\t'description' => __( 'Item preview.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'default'     => false,\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'duration'       => array(\n+\t\t\t\t\t'description' => __( 'Item duration.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => '',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'graduation'     => array(\n+\t\t\t\t\t'description' => __( 'Item graduation.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => '',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'user_status'    => array(\n+\t\t\t\t\t'description' => __( 'Item status.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'default'     => '',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'locked'         => array(\n+\t\t\t\t\t'description' => __( 'Item locked.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'boolean',\n+\t\t\t\t\t'default'     => false,\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'count_question' => array(\n+\t\t\t\t\t'description' => __( 'Count questions.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'default'     => 0,\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'content'        => array(\n+\t\t\t\t\t'description' => __( 'Item content.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'properties'  => array(\n+\t\t\t\t\t\t'raw'      => array(\n+\t\t\t\t\t\t\t'description' => __( 'Title for the post, as it exists in the database.' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'rendered' => array(\n+\t\t\t\t\t\t\t'description' => __( 'HTML title for the post, transformed for display.' ),\n+\t\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t\t'context'     => array( 'view', 'edit', 'embed' ),\n+\t\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+\n+\tpublic function get_collection_params() {\n+\t\t$params                       = array();\n+\t\t$params['context']            = $this->get_context_param();\n+\t\t$params['context']['default'] = 'view';\n+\n+\t\t$params['page']     = array(\n+\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 1,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t\t'minimum'           => 1,\n+\t\t);\n+\t\t$params['per_page'] = array(\n+\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 10,\n+\t\t\t'minimum'           => 1,\n+\t\t\t'maximum'           => 100,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['order']    = array(\n+\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'default'           => 'asc',\n+\t\t\t'enum'              => array( 'asc', 'desc' ),\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['search']   = array(\n+\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['exclude']  = array(\n+\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\t\t$params['include']  = array(\n+\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\n+\t\treturn apply_filters( 'lp_rest_sections_collection_params', $params );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,193 +1,193 @@\n-\u003C?php\r\n-class LP_Jwt_Sections_V1_Controller extends LP_REST_Jwt_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'sections';\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fsections-by-course-id\u002F(?P\u003Ccourse_id>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Course ID.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_sections_by_course' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_items_permissions_check( $request ) {\r\n-\t\tif ( empty( $request['course_id'] ) ) {\r\n-\t\t\treturn new WP_Error( 'lp_section_not_course_id', __( 'Sorry, Invalid course ID param.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\t$course_id = absint( $request['course_id'] );\r\n-\t\t$post      = get_post( $course_id );\r\n-\r\n-\t\t$post_status_obj = get_post_status_object( $post->post_status );\r\n-\r\n-\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\r\n-\t\t\treturn new WP_Error( 'lp_section_not_public', __( 'The course is not public', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_sections_by_course( $request ) {\r\n-\t\t$filters                    = new LP_Section_Filter();\r\n-\t\t$filters->section_course_id = $request['course_id'];\r\n-\t\t$filters->limit             = $request['per_page'];\r\n-\t\t$filters->page              = $request['page'];\r\n-\t\t$filters->order             = $request['order'];\r\n-\t\t$filters->search_section    = $request['search'];\r\n-\t\t$filters->section_ids       = $request['include'];\r\n-\t\t$filters->section_not_ids   = $request['exclude'];\r\n-\r\n-\t\t$query_results = LP_Section_DB::getInstance()->get_sections_by_course_id( $filters );\r\n-\r\n-\t\tif ( is_wp_error( $query_results ) ) {\r\n-\t\t\treturn $query_results;\r\n-\t\t}\r\n-\r\n-\t\t$results = $query_results['results'];\r\n-\r\n-\t\t$return = array();\r\n-\r\n-\t\tforeach ( $results as $result ) {\r\n-\t\t\t$data     = $this->prepare_object_for_response( $result, $request );\r\n-\t\t\t$return[] = $this->prepare_response_for_collection( $data );\r\n-\t\t}\r\n-\r\n-\t\t$response = rest_ensure_response( $return );\r\n-\r\n-\t\t$response->header( 'X-WP-Total', $query_results['total'] );\r\n-\t\t$response->header( 'X-WP-TotalPages', (int) $query_results['pages'] );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\tpublic function prepare_object_for_response( $section_data, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\r\n-\r\n-\t\t$data = $this->get_sections_data( $section_data, $context, $request );\r\n-\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\treturn apply_filters( 'lp_jwt_rest_prepare_sections_object', $response, $section_data, $request );\r\n-\t}\r\n-\r\n-\tpublic function get_sections_data( $section_data, $context, $request ) {\r\n-\t\t$fields = $this->get_fields_for_response( $request );\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $section_data['section_id'] ?? 0;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $section_data['section_name'] ?? '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'description':\r\n-\t\t\t\t\t$data['description'] = $section_data['section_description'] ?? '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => 'learnpress_sections',\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'          => array(\r\n-\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'        => array(\r\n-\t\t\t\t\t'description' => __( 'Section name.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'description' => array(\r\n-\t\t\t\t\t'description' => __( 'Section description.', 'learnpress' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-\r\n-\tpublic function get_collection_params() {\r\n-\t\t$params                       = array();\r\n-\t\t$params['context']            = $this->get_context_param();\r\n-\t\t$params['context']['default'] = 'view';\r\n-\r\n-\t\t$params['page']     = array(\r\n-\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 1,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t);\r\n-\t\t$params['per_page'] = array(\r\n-\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\r\n-\t\t\t'type'              => 'integer',\r\n-\t\t\t'default'           => 10,\r\n-\t\t\t'minimum'           => 1,\r\n-\t\t\t'maximum'           => 100,\r\n-\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['order']    = array(\r\n-\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'default'           => 'asc',\r\n-\t\t\t'enum'              => array( 'asc', 'desc' ),\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['search']   = array(\r\n-\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\r\n-\t\t\t'type'              => 'string',\r\n-\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t'validate_callback' => 'rest_validate_request_arg',\r\n-\t\t);\r\n-\t\t$params['exclude']  = array(\r\n-\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\t\t$params['include']  = array(\r\n-\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\r\n-\t\t\t'type'              => 'array',\r\n-\t\t\t'items'             => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'           => array(),\r\n-\t\t\t'sanitize_callback' => 'wp_parse_id_list',\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'lp_rest_sections_collection_params', $params );\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Jwt_Sections_V1_Controller extends LP_REST_Jwt_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'sections';\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fsections-by-course-id\u002F(?P\u003Ccourse_id>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'course_id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Course ID.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_sections_by_course' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_items_permissions_check( $request ) {\n+\t\tif ( empty( $request['course_id'] ) ) {\n+\t\t\treturn new WP_Error( 'lp_section_not_course_id', __( 'Sorry, Invalid course ID param.', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\t$course_id = absint( $request['course_id'] );\n+\t\t$post      = get_post( $course_id );\n+\n+\t\t$post_status_obj = get_post_status_object( $post->post_status );\n+\n+\t\tif ( ! $post_status_obj || ! $post_status_obj->public ) {\n+\t\t\treturn new WP_Error( 'lp_section_not_public', __( 'The course is not public', 'learnpress' ), array( 'status' => rest_authorization_required_code() ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_sections_by_course( $request ) {\n+\t\t$filters                    = new LP_Section_Filter();\n+\t\t$filters->section_course_id = $request['course_id'];\n+\t\t$filters->limit             = $request['per_page'];\n+\t\t$filters->page              = $request['page'];\n+\t\t$filters->order             = $request['order'];\n+\t\t$filters->search_section    = $request['search'];\n+\t\t$filters->section_ids       = $request['include'];\n+\t\t$filters->section_not_ids   = $request['exclude'];\n+\n+\t\t$query_results = LP_Section_DB::getInstance()->get_sections_by_course_id( $filters );\n+\n+\t\tif ( is_wp_error( $query_results ) ) {\n+\t\t\treturn $query_results;\n+\t\t}\n+\n+\t\t$results = $query_results['results'];\n+\n+\t\t$return = array();\n+\n+\t\tforeach ( $results as $result ) {\n+\t\t\t$data     = $this->prepare_object_for_response( $result, $request );\n+\t\t\t$return[] = $this->prepare_response_for_collection( $data );\n+\t\t}\n+\n+\t\t$response = rest_ensure_response( $return );\n+\n+\t\t$response->header( 'X-WP-Total', $query_results['total'] );\n+\t\t$response->header( 'X-WP-TotalPages', (int) $query_results['pages'] );\n+\n+\t\treturn $response;\n+\t}\n+\n+\tpublic function prepare_object_for_response( $section_data, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'view';\n+\n+\t\t$data = $this->get_sections_data( $section_data, $context, $request );\n+\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\treturn apply_filters( 'lp_jwt_rest_prepare_sections_object', $response, $section_data, $request );\n+\t}\n+\n+\tpublic function get_sections_data( $section_data, $context, $request ) {\n+\t\t$fields = $this->get_fields_for_response( $request );\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $section_data['section_id'] ?? 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $section_data['section_name'] ?? '';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'description':\n+\t\t\t\t\t$data['description'] = $section_data['section_description'] ?? '';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => 'learnpress_sections',\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'          => array(\n+\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'name'        => array(\n+\t\t\t\t\t'description' => __( 'Section name.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'description' => array(\n+\t\t\t\t\t'description' => __( 'Section description.', 'learnpress' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+\n+\tpublic function get_collection_params() {\n+\t\t$params                       = array();\n+\t\t$params['context']            = $this->get_context_param();\n+\t\t$params['context']['default'] = 'view';\n+\n+\t\t$params['page']     = array(\n+\t\t\t'description'       => __( 'The current page of the collection.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 1,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t\t'minimum'           => 1,\n+\t\t);\n+\t\t$params['per_page'] = array(\n+\t\t\t'description'       => __( 'The maximum number of items to be returned in the result set.', 'learnpress' ),\n+\t\t\t'type'              => 'integer',\n+\t\t\t'default'           => 10,\n+\t\t\t'minimum'           => 1,\n+\t\t\t'maximum'           => 100,\n+\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['order']    = array(\n+\t\t\t'description'       => __( 'Sorting attributes in ascending or descending order.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'default'           => 'asc',\n+\t\t\t'enum'              => array( 'asc', 'desc' ),\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['search']   = array(\n+\t\t\t'description'       => __( 'Limit results to those matching a string.', 'learnpress' ),\n+\t\t\t'type'              => 'string',\n+\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t'validate_callback' => 'rest_validate_request_arg',\n+\t\t);\n+\t\t$params['exclude']  = array(\n+\t\t\t'description'       => __( 'Ensure the result set excludes specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\t\t$params['include']  = array(\n+\t\t\t'description'       => __( 'Limit the result set to specific IDs.', 'learnpress' ),\n+\t\t\t'type'              => 'array',\n+\t\t\t'items'             => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'           => array(),\n+\t\t\t'sanitize_callback' => 'wp_parse_id_list',\n+\t\t);\n+\n+\t\treturn apply_filters( 'lp_rest_sections_collection_params', $params );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1583 +1,1583 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * REST API for the user.\r\n- *\r\n- * @package LearnPress\u002FJWT\u002FRESTAPI\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-class LP_Jwt_Users_V1_Controller extends LP_REST_Jwt_Controller {\r\n-\tprotected $namespace = 'learnpress\u002Fv1';\r\n-\r\n-\tprotected $rest_base = 'users';\r\n-\r\n-\tprotected $hierarchical = true;\r\n-\r\n-\tprotected $meta;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->meta = new WP_REST_User_Meta_Fields();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_collection_params(),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\r\n-\t\t\tarray(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'context' => $this->get_context_param(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'default' => 'view',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'update_item_permissions_check' ),\r\n-\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Freset-password',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'reset_password' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'user_login' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'User or Email login.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fchange-password',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'change_password' ),\r\n-\t\t\t\t'permission_callback' => array( $this, 'update_item_password_permissions' ),\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'old_password' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Old Password', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'new_password' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'New Password', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\t$this->namespace,\r\n-\t\t\t'\u002F' . $this->rest_base . '\u002Fdelete',\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'delete_account' ),\r\n-\t\t\t\t'permission_callback' => array( $this, 'update_item_password_permissions' ),\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'id'       => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'User ID', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'password' => array(\r\n-\t\t\t\t\t\t'description' => esc_html__( 'Password', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function get_items_permissions_check( $request ) {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_item_permissions_check( $request ) {\r\n-\t\t$user = $this->get_user( $request['id'] );\r\n-\r\n-\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\treturn $user;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_forbidden',\r\n-\t\t\t\t__( 'Authentication required to access user information.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$types = get_post_types( array( 'show_in_rest' => true ), 'names' );\r\n-\r\n-\t\tif ( get_current_user_id() === $user->ID ) {\r\n-\t\t\treturn true;\r\n-\t\t} elseif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_cannot_view',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to list users.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Checks if a given request has access to update a user.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.\r\n-\t *\u002F\r\n-\tpublic function update_item_permissions_check( $request ) {\r\n-\t\t$user = $this->get_user( $request['id'] );\r\n-\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\treturn $user;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $request['roles'] ) ) {\r\n-\t\t\tif ( ! current_user_can( 'promote_user', $user->ID ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_cannot_edit_roles',\r\n-\t\t\t\t\t__( 'Sorry, you are not allowed to edit roles of this user.' ),\r\n-\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$request_params = array_keys( $request->get_params() );\r\n-\t\t\tsort( $request_params );\r\n-\t\t\t\u002F\u002F If only 'id' and 'roles' are specified (we are only trying to\r\n-\t\t\t\u002F\u002F edit roles), then only the 'promote_user' cap is required.\r\n-\t\t\tif ( array( 'id', 'roles' ) === $request_params ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( 'edit_user', $user->ID ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_cannot_edit',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to edit this user.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function update_item_password_permissions( $request ) {\r\n-\t\t$user = wp_get_current_user();\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_cannot_update',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to update this user.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( 'edit_user', $user->ID ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_cannot_edit',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to edit this user.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Determines if the current user is allowed to make the desired roles change.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param int   $user_id User ID.\r\n-\t * @param array $roles   New user roles.\r\n-\t * @return true|WP_Error True if the current user is allowed to make the role change,\r\n-\t *                       otherwise a WP_Error object.\r\n-\t *\u002F\r\n-\tprotected function check_role_update( $user_id, $roles ) {\r\n-\t\tglobal $wp_roles;\r\n-\r\n-\t\tforeach ( $roles as $role ) {\r\n-\r\n-\t\t\tif ( ! isset( $wp_roles->role_objects[ $role ] ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_user_invalid_role',\r\n-\t\t\t\t\t\u002F* translators: %s: Role key. *\u002F\r\n-\t\t\t\t\tsprintf( __( 'The role %s does not exist.' ), $role ),\r\n-\t\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$potential_role = $wp_roles->role_objects[ $role ];\r\n-\r\n-\t\t\t\u002F*\r\n-\t\t\t * Don't let anyone with 'edit_users' (admins) edit their own role to something without it.\r\n-\t\t\t * Multisite super admins can freely edit their blog roles -- they possess all caps.\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! ( is_multisite()\r\n-\t\t\t\t&& current_user_can( 'manage_sites' ) )\r\n-\t\t\t\t&& get_current_user_id() === $user_id\r\n-\t\t\t\t&& ! $potential_role->has_cap( 'edit_users' )\r\n-\t\t\t) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_user_invalid_role',\r\n-\t\t\t\t\t__( 'Sorry, you are not allowed to give users that role.' ),\r\n-\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Include user admin functions to get access to get_editable_roles().\r\n-\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fuser.php';\r\n-\r\n-\t\t\t\u002F\u002F The new role must be editable by the logged-in user.\r\n-\t\t\t$editable_roles = get_editable_roles();\r\n-\r\n-\t\t\tif ( empty( $editable_roles[ $role ] ) ) {\r\n-\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t'rest_user_invalid_role',\r\n-\t\t\t\t\t__( 'Sorry, you are not allowed to give users that role.' ),\r\n-\t\t\t\t\tarray( 'status' => 403 )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function reset_password( $request ) {\r\n-\t\t$user_login = $request['user_login'];\r\n-\t\t$reset      = LP_Forms_Handler::retrieve_password( $user_login );\r\n-\r\n-\t\tif ( is_wp_error( $reset ) ) {\r\n-\t\t\treturn $reset;\r\n-\t\t} else {\r\n-\t\t\treturn rest_ensure_response(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'code'    => 'success',\r\n-\t\t\t\t\t'message' => esc_html__( 'A link to reset your password has been emailed to you.', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function delete_account( $request ) {\r\n-\t\t$user_id  = $request['id'];\r\n-\t\t$password = $request['password'];\r\n-\r\n-\t\t$user = wp_get_current_user();\r\n-\r\n-\t\tif ( ! $user || $user_id !== $user->ID ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_id',\r\n-\t\t\t\t__( 'Invalid user ID.', 'learnpress' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! wp_check_password( $password, $user->data->user_pass, $user->ID ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_password',\r\n-\t\t\t\t__( 'Invalid password.', 'learnpress' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! function_exists( 'wp_delete_user' ) ) {\r\n-\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fuser.php';\r\n-\t\t}\r\n-\r\n-\t\t$delete = wp_delete_user( $user_id );\r\n-\r\n-\t\tif ( is_wp_error( $delete ) ) {\r\n-\t\t\treturn $delete;\r\n-\t\t} else {\r\n-\t\t\treturn rest_ensure_response(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'code'    => 'success',\r\n-\t\t\t\t\t'message' => esc_html__( 'Your account has been deleted.', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function change_password( $request ) {\r\n-\t\t$old_password = $request['old_password'];\r\n-\t\t$new_password = $request['new_password'];\r\n-\r\n-\t\t$user = wp_get_current_user();\r\n-\r\n-\t\tif ( ! $user || ! $user->ID || ( empty( $old_password ) || empty( $new_password ) ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_cannot_change_password',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to change password.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! wp_check_password( $old_password, $user->user_pass, $user->ID ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_incorrect_password',\r\n-\t\t\t\t__( 'Your current password is incorrect.' ),\r\n-\t\t\t\tarray( 'status' => 403 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( apply_filters( 'learnpress_rest_api_user_change_password', true, $user ) ) {\r\n-\t\t\twp_set_password( $new_password, $user->ID );\r\n-\t\t} else {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_cannot_change_password',\r\n-\t\t\t\t__( 'Sorry, you are not allowed to change password.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response(\r\n-\t\t\tarray(\r\n-\t\t\t\t'code'    => 'success',\r\n-\t\t\t\t'message' => esc_html__( 'Your password has been updated. Please log in again to continue!', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tprotected function get_user( $id ) {\r\n-\t\t$error = new WP_Error(\r\n-\t\t\t'rest_user_invalid_id',\r\n-\t\t\t__( 'Invalid user ID.' ),\r\n-\t\t\tarray( 'status' => 404 )\r\n-\t\t);\r\n-\r\n-\t\tif ( (int) $id \u003C= 0 ) {\r\n-\t\t\treturn $error;\r\n-\t\t}\r\n-\r\n-\t\t$user = get_userdata( (int) $id );\r\n-\t\tif ( empty( $user ) || ! $user->exists() ) {\r\n-\t\t\treturn $error;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_multisite() && ! is_user_member_of_blog( $user->ID ) ) {\r\n-\t\t\treturn $error;\r\n-\t\t}\r\n-\r\n-\t\treturn $user;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Updates a single user.\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\r\n-\t *\u002F\r\n-\tpublic function update_item( $request ) {\r\n-\t\t$user = $this->get_user( $request['id'] );\r\n-\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\treturn $user;\r\n-\t\t}\r\n-\r\n-\t\t$id = $user->ID;\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_id',\r\n-\t\t\t\t__( 'Invalid user ID.' ),\r\n-\t\t\t\tarray( 'status' => 404 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$owner_id = email_exists( $request['email'] );\r\n-\r\n-\t\tif ( $owner_id && $owner_id !== $id ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_email',\r\n-\t\t\t\t__( 'Invalid email address.' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $request['username'] ) && $request['username'] !== $user->user_login ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_argument',\r\n-\t\t\t\t__( \"Username isn't editable.\" ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $request['slug'] ) && $request['slug'] !== $user->user_nicename && get_user_by( 'slug', $request['slug'] ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_slug',\r\n-\t\t\t\t__( 'Invalid slug.' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $request['roles'] ) ) {\r\n-\t\t\t$check_permission = $this->check_role_update( $id, $request['roles'] );\r\n-\r\n-\t\t\tif ( is_wp_error( $check_permission ) ) {\r\n-\t\t\t\treturn $check_permission;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$user = $this->prepare_item_for_database( $request );\r\n-\r\n-\t\t\u002F\u002F Ensure we're operating on the same user we already checked.\r\n-\t\t$user->ID = $id;\r\n-\r\n-\t\t$user_id = wp_update_user( wp_slash( (array) $user ) );\r\n-\r\n-\t\tif ( is_wp_error( $user_id ) ) {\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\r\n-\t\t$files = $request->get_file_params();\r\n-\r\n-\t\tif ( ! empty( $files['lp_avatar_file'] ) ) {\r\n-\t\t\t$file = $files['lp_avatar_file'];\r\n-\r\n-\t\t\tif ( ! empty( $file['name'] ) ) {\r\n-\t\t\t\tlist($width, $height) = getimagesize( $file['tmp_name'] );\r\n-\r\n-\t\t\t\t$upload_size = learn_press_get_avatar_thumb_size();\r\n-\r\n-\t\t\t\tif ( $width != $upload_size['width'] || $height != $upload_size['height'] ) {\r\n-\t\t\t\t\treturn new WP_Error(\r\n-\t\t\t\t\t\t'rest_user_invalid_avatar_dimensions',\r\n-\t\t\t\t\t\tsprintf( __( 'Invalid avatar dimensions. Please upload a new avatar width size %1$1sx%2$2s' ), $upload_size['width'], $upload_size['height'] ),\r\n-\t\t\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$data   = LP_WP_Filesystem::instance()->file_get_contents( $file['tmp_name'] );\r\n-\t\t\t\t$base64 = base64_encode( $data );\r\n-\r\n-\t\t\t\t$controller = new LP_REST_Profile_Controller();\r\n-\r\n-\t\t\t\t$request->set_param( 'file', $base64 );\r\n-\r\n-\t\t\t\t$uploaded_avatar = $controller->upload_avatar( $request );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $request['avatar_url'] ) ) {\r\n-\t\t\t$controller = new LP_REST_Profile_Controller();\r\n-\r\n-\t\t\t$request->set_param( 'file', $request['avatar_url'] );\r\n-\r\n-\t\t\t$uploaded_avatar = $controller->upload_avatar( $request );\r\n-\t\t}\r\n-\r\n-\t\t$user = get_user_by( 'id', $user_id );\r\n-\r\n-\t\tdo_action( 'lp_rest_insert_user', $user, $request, false );\r\n-\r\n-\t\tif ( ! empty( $request['roles'] ) ) {\r\n-\t\t\tarray_map( array( $user, 'add_role' ), $request['roles'] );\r\n-\t\t}\r\n-\r\n-\t\t$schema = $this->get_item_schema();\r\n-\r\n-\t\tif ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {\r\n-\t\t\t$meta_update = $this->meta->update_value( $request['meta'], $user_id );\r\n-\r\n-\t\t\tif ( is_wp_error( $meta_update ) ) {\r\n-\t\t\t\treturn $meta_update;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$user          = get_user_by( 'id', $user_id );\r\n-\t\t$fields_update = $this->update_additional_fields_for_object( $user, $request );\r\n-\r\n-\t\tif ( is_wp_error( $fields_update ) ) {\r\n-\t\t\treturn $fields_update;\r\n-\t\t}\r\n-\r\n-\t\t$request->set_param( 'context', 'edit' );\r\n-\r\n-\t\tdo_action( 'lp_rest_after_insert_user', $user, $request, false );\r\n-\r\n-\t\t$response = $this->prepare_item_for_response( $user, $request );\r\n-\t\t$response = rest_ensure_response( $response );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Prepares a single user for creation or update.\r\n-\t *\r\n-\t * @param WP_REST_Request $request Request object.\r\n-\t * @return object User object.\r\n-\t *\u002F\r\n-\tprotected function prepare_item_for_database( $request ) {\r\n-\t\t$prepared_user = new stdClass();\r\n-\r\n-\t\t$schema = $this->get_item_schema();\r\n-\r\n-\t\t\u002F\u002F Required arguments.\r\n-\t\tif ( isset( $request['email'] ) && ! empty( $schema['properties']['email'] ) ) {\r\n-\t\t\t$prepared_user->user_email = $request['email'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['username'] ) && ! empty( $schema['properties']['username'] ) ) {\r\n-\t\t\t$prepared_user->user_login = $request['username'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['password'] ) && ! empty( $schema['properties']['password'] ) ) {\r\n-\t\t\t$prepared_user->user_pass = $request['password'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Optional arguments.\r\n-\t\tif ( isset( $request['id'] ) ) {\r\n-\t\t\t$prepared_user->ID = absint( $request['id'] );\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {\r\n-\t\t\t$prepared_user->display_name = $request['name'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['first_name'] ) && ! empty( $schema['properties']['first_name'] ) ) {\r\n-\t\t\t$prepared_user->first_name = $request['first_name'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['last_name'] ) && ! empty( $schema['properties']['last_name'] ) ) {\r\n-\t\t\t$prepared_user->last_name = $request['last_name'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['nickname'] ) && ! empty( $schema['properties']['nickname'] ) ) {\r\n-\t\t\t$prepared_user->nickname = $request['nickname'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['slug'] ) && ! empty( $schema['properties']['slug'] ) ) {\r\n-\t\t\t$prepared_user->user_nicename = $request['slug'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['description'] ) && ! empty( $schema['properties']['description'] ) ) {\r\n-\t\t\t$prepared_user->description = $request['description'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['url'] ) && ! empty( $schema['properties']['url'] ) ) {\r\n-\t\t\t$prepared_user->user_url = $request['url'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $request['locale'] ) && ! empty( $schema['properties']['locale'] ) ) {\r\n-\t\t\t$prepared_user->locale = $request['locale'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Setting roles will be handled outside of this function.\r\n-\t\tif ( isset( $request['roles'] ) ) {\r\n-\t\t\t$prepared_user->role = false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters user data before insertion via the REST API.\r\n-\t\t *\r\n-\t\t * @param object          $prepared_user User object.\r\n-\t\t * @param WP_REST_Request $request       Request object.\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( 'lp_rest_pre_insert_user', $prepared_user, $request );\r\n-\t}\r\n-\r\n-\tpublic function get_overview_tab_contents( $user ) {\r\n-\t\t$output    = array();\r\n-\t\t$statistic = LP_Profile::instance( $user->get_id )->get_statistic_info();\r\n-\r\n-\t\t$output['statistic'] = array_map( 'absint', $statistic );\r\n-\r\n-\t\t$featured_query = new LP_Course_Query(\r\n-\t\t\tarray(\r\n-\t\t\t\t'paginate' => false,\r\n-\t\t\t\t'featured' => 'yes',\r\n-\t\t\t\t'return'   => 'ids',\r\n-\t\t\t\t'author'   => $user->ID,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$output['featured'] = $featured_query->get_courses();\r\n-\r\n-\t\t$latest_query = new LP_Course_Query(\r\n-\t\t\tarray(\r\n-\t\t\t\t'paginate' => false,\r\n-\t\t\t\t'return'   => 'ids',\r\n-\t\t\t\t'author'   => $user->get_id(),\r\n-\t\t\t\t'limit'    => '-1',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$output['latest'] = $latest_query->get_courses();\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\tpublic function get_course_tab_contents( $user, $request ) {\r\n-\t\t$output = array(\r\n-\t\t\t'enrolled' => array(),\r\n-\t\t\t'created'  => array(),\r\n-\t\t);\r\n-\r\n-\t\t$profile          = learn_press_get_profile( $user->get_id() );\r\n-\t\t$filters_enrolled = array(\r\n-\t\t\t'all'         => 'all',\r\n-\t\t\t'finished'    => 'finished',\r\n-\t\t\t'passed'      => 'passed',\r\n-\t\t\t'failed'      => 'failed',\r\n-\t\t\t'in-progress' => 'in-progress',\r\n-\t\t);\r\n-\r\n-\t\tif ( method_exists( $profile, 'query_courses' ) ) {\r\n-\t\t\tforeach ( $filters_enrolled as $key => $filter ) {\r\n-\t\t\t\t$query_enrolled = $profile->query_courses(\r\n-\t\t\t\t\t'purchased',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => $filter,\r\n-\t\t\t\t\t\t'limit'  => $request['per_page'] ?? '100',\r\n-\t\t\t\t\t\t'paged'  => $request['paged'] ?? 1,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( empty( $query_enrolled->get_items() ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$items        = $query_enrolled->get_items();\r\n-\t\t\t\t$enrolled_ids = array();\r\n-\t\t\t\tforeach ( $items as $enrolled_item ) {\r\n-\t\t\t\t\t$course_data = $user->get_course_data( $enrolled_item );\r\n-\r\n-\t\t\t\t\tif ( $course_data ) {\r\n-\t\t\t\t\t\t$post = get_post( $enrolled_item );\r\n-\r\n-\t\t\t\t\t\t$enrolled_ids[] = array(\r\n-\t\t\t\t\t\t\t'id'         => $enrolled_item ?? '',\r\n-\t\t\t\t\t\t\t'title'      => $post->post_title,\r\n-\t\t\t\t\t\t\t'graduation' => ! empty( $course_data->get_graduation() ) ? $course_data->get_graduation() : '',\r\n-\t\t\t\t\t\t\t'status'     => ! empty( $course_data->get_status() ) ? $course_data->get_status() : '',\r\n-\t\t\t\t\t\t\t'start_time' => lp_jwt_prepare_date_response( $course_data->get_start_time() ? $course_data->get_start_time()->toSql() : '' ),\r\n-\t\t\t\t\t\t\t'end_time'   => lp_jwt_prepare_date_response( $course_data->get_end_time() ? $course_data->get_end_time()->toSql() : '' ),\r\n-\t\t\t\t\t\t\t'expiration' => lp_jwt_prepare_date_response( $course_data->get_expiration_time() ? $course_data->get_expiration_time()->toSql() : '' ),\r\n-\t\t\t\t\t\t\t'results'    => $course_data->calculate_course_results(),\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$output['enrolled'][ $key ] = $enrolled_ids;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filters_created = array(\r\n-\t\t\t'all'     => '',\r\n-\t\t\t'publish' => 'publish',\r\n-\t\t\t'pending' => 'pending',\r\n-\t\t);\r\n-\r\n-\t\tif ( method_exists( $profile, 'query_courses' ) ) {\r\n-\t\t\tforeach ( $filters_created as $created_key => $filter ) {\r\n-\t\t\t\t$query_created = $profile->query_courses(\r\n-\t\t\t\t\t'own',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => $filter,\r\n-\t\t\t\t\t\t'limit'  => $request['per_page'] ?? '100',\r\n-\t\t\t\t\t\t'paged'  => $request['paged'] ?? 1,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$created_ids = array();\r\n-\t\t\t\tif ( ! empty( $query_created->get_items() ) ) {\r\n-\t\t\t\t\tforeach ( $query_created->get_items() as $created_item ) {\r\n-\t\t\t\t\t\t$created_ids[] = $created_item;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$output['created'][ $created_key ] = array_map( 'absint', $created_ids );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Profile Quiz Tab content\r\n-\t *\r\n-\t * @param [type] $request\r\n-\t * @return void\r\n-\t *\r\n-\t * @author Nhamdv \u003Cdaonham@gmail.com>\r\n-\t *\u002F\r\n-\tpublic function get_quiz_tab_contents( $user, $request ) {\r\n-\t\t$output = array();\r\n-\r\n-\t\t$user_profile = learn_press_get_user( $request['id'] );\r\n-\t\t$filters      = array(\r\n-\t\t\t'all'         => '',\r\n-\t\t\t'finished'    => 'completed',\r\n-\t\t\t'passed'      => 'passed',\r\n-\t\t\t'failed'      => 'failed',\r\n-\t\t\t'in-progress' => 'in-progress',\r\n-\t\t);\r\n-\r\n-\t\tif ( method_exists( $user_profile, 'get_user_quizzes' ) ) {\r\n-\t\t\tforeach ( $filters as $key => $quiz_filter ) {\r\n-\t\t\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter->user_id    = $request['id'];\r\n-\t\t\t\t$filter->limit      = 100;\r\n-\t\t\t\t$filter->status     = $quiz_filter === 'complete' ? 'complete' : '';\r\n-\t\t\t\t$filter->graduation = $quiz_filter !== 'complete' ? $quiz_filter : '';\r\n-\t\t\t\t$query              = $user_profile->get_user_quizzes( $filter );\r\n-\r\n-\t\t\t\t$ids = array();\r\n-\t\t\t\tif ( ! empty( $query->get_items() ) ) {\r\n-\t\t\t\t\tforeach ( $query->get_items() as $item ) {\r\n-\t\t\t\t\t\t$ids[] = array(\r\n-\t\t\t\t\t\t\t'id'         => $item->get_id(),\r\n-\t\t\t\t\t\t\t'result'     => $item->get_percent_result() ?? '',\r\n-\t\t\t\t\t\t\t'graduation' => $item->get_graduation() ?? '',\r\n-\t\t\t\t\t\t\t'start_time' => $item->get_start_time() ? lp_jwt_prepare_date_response( $item->get_start_time()->toSql( false ) ) : '',\r\n-\t\t\t\t\t\t\t'end_time'   => $item->get_end_time() ? lp_jwt_prepare_date_response( $item->get_end_time()->toSql( false ) ) : '',\r\n-\t\t\t\t\t\t\t'data'       => $filter !== 'in-progress' ? $item->calculate_quiz_result() : array(),\r\n-\t\t\t\t\t\t\t'attempt'    => $filter !== 'in-progress' ? $item->get_attempts() : array(),\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$output[ $key ] = $ids;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get order by user id\r\n-\t *\r\n-\t * @param array $request [id: user ID]\r\n-\t * @return array\r\n-\t *\r\n-\t * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n-\t *\u002F\r\n-\tpublic function get_order_content_tab( $user, $request ) {\r\n-\t\t$output = array();\r\n-\r\n-\t\t$profile = learn_press_get_profile( $request['id'] );\r\n-\r\n-\t\tif ( method_exists( $profile, 'query_orders' ) ) {\r\n-\t\t\t$query_orders = $profile->query_orders( array( 'fields' => 'ids' ) );\r\n-\t\t\tif ( ! empty( $query_orders->get_items() ) ) {\r\n-\t\t\t\tforeach ( $query_orders->get_items() as $order_id ) {\r\n-\t\t\t\t\t$order = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\t\t\t$output[ $order_id ] = array(\r\n-\t\t\t\t\t\t'order_key' => $order->get_order_number() ?? '',\r\n-\t\t\t\t\t\t'total'     => $order->get_total(),\r\n-\t\t\t\t\t\t'currency'  => $order->get_currency(),\r\n-\t\t\t\t\t\t'status'    => $order->get_status(),\r\n-\t\t\t\t\t\t'date'      => $order->get_order_date( 'timestamp' ) ? lp_jwt_prepare_date_response( get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $order->get_order_date( 'timestamp' ) ), 'Y-m-d H:i:s' ) ) : '',\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retrieves a single user.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\r\n-\t *\u002F\r\n-\tpublic function get_item( $request ) {\r\n-\t\t$user = $this->get_user( $request['id'] );\r\n-\r\n-\t\tif ( is_wp_error( $user ) ) {\r\n-\t\t\treturn $user;\r\n-\t\t}\r\n-\r\n-\t\t$user     = $this->prepare_item_for_response( $user, $request );\r\n-\t\t$response = rest_ensure_response( $user );\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retrieves all users.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\r\n-\t *\u002F\r\n-\tpublic function get_items( $request ) {\r\n-\r\n-\t\t\u002F\u002F Retrieve the list of registered collection query parameters.\r\n-\t\t$registered = $this->get_collection_params();\r\n-\r\n-\t\t\u002F*\r\n-\t\t * This array defines mappings between public API query parameters whose\r\n-\t\t * values are accepted as-passed, and their internal WP_Query parameter\r\n-\t\t * name equivalents (some are the same). Only values which are also\r\n-\t\t * present in $registered will be set.\r\n-\t\t *\u002F\r\n-\t\t$parameter_mappings = array(\r\n-\t\t\t'exclude'  => 'exclude',\r\n-\t\t\t'include'  => 'include',\r\n-\t\t\t'order'    => 'order',\r\n-\t\t\t'per_page' => 'number',\r\n-\t\t\t'search'   => 'search',\r\n-\t\t\t'roles'    => 'role__in',\r\n-\t\t\t'slug'     => 'nicename__in',\r\n-\t\t);\r\n-\r\n-\t\t$roles = $request->get_param( 'roles' );\r\n-\t\tif ( ! empty( $roles ) && $roles == [ UserModel::ROLE_ADMINISTRATOR ] ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_forbidden',\r\n-\t\t\t\t__( 'You are not allowed.' ),\r\n-\t\t\t\tarray( 'status' => rest_authorization_required_code() )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Always only get instructors and administrators.\r\n-\t\t$request['roles'] = [ UserModel::ROLE_INSTRUCTOR, UserModel::ROLE_ADMINISTRATOR ];\r\n-\r\n-\t\t$prepared_args = array();\r\n-\r\n-\t\t\u002F*\r\n-\t\t * For each known parameter which is both registered and present in the request,\r\n-\t\t * set the parameter's value on the query $prepared_args.\r\n-\t\t *\u002F\r\n-\t\tforeach ( $parameter_mappings as $api_param => $wp_param ) {\r\n-\t\t\tif ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {\r\n-\t\t\t\t$prepared_args[ $wp_param ] = $request[ $api_param ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $registered['offset'] ) && ! empty( $request['offset'] ) ) {\r\n-\t\t\t$prepared_args['offset'] = $request['offset'];\r\n-\t\t} else {\r\n-\t\t\t$prepared_args['offset'] = ( $request['page'] - 1 ) * $prepared_args['number'];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $registered['orderby'] ) ) {\r\n-\t\t\t$orderby_possibles        = array(\r\n-\t\t\t\t'id'              => 'ID',\r\n-\t\t\t\t'include'         => 'include',\r\n-\t\t\t\t'name'            => 'display_name',\r\n-\t\t\t\t'registered_date' => 'registered',\r\n-\t\t\t\t'slug'            => 'user_nicename',\r\n-\t\t\t\t'include_slugs'   => 'nicename__in',\r\n-\t\t\t\t'email'           => 'user_email',\r\n-\t\t\t\t'url'             => 'user_url',\r\n-\t\t\t);\r\n-\t\t\t$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];\r\n-\t\t}\r\n-\r\n-\t\tif ( isset( $registered['who'] ) && ! empty( $request['who'] ) && 'authors' === $request['who'] ) {\r\n-\t\t\t$prepared_args['who'] = 'authors';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $prepared_args['search'] ) ) {\r\n-\t\t\t$prepared_args['search'] = '*' . $prepared_args['search'] . '*';\r\n-\t\t}\r\n-\t\t\u002F**\r\n-\t\t * Filters WP_User_Query arguments when querying users via the REST API.\r\n-\t\t *\r\n-\t\t * @link https:\u002F\u002Fdeveloper.wordpress.org\u002Freference\u002Fclasses\u002Fwp_user_query\u002F\r\n-\t\t *\r\n-\t\t * @since 4.7.0\r\n-\t\t *\r\n-\t\t * @param array           $prepared_args Array of arguments for WP_User_Query.\r\n-\t\t * @param WP_REST_Request $request       The REST API request.\r\n-\t\t *\u002F\r\n-\t\t$prepared_args = apply_filters( 'rest_user_query', $prepared_args, $request );\r\n-\r\n-\t\t$users                      = array();\r\n-\t\t$lp_cache                   = new LP_Cache();\r\n-\t\t$key_cache_list_instructors = 'lp_get_instructors';\r\n-\r\n-\t\t\u002F\u002F Check cache with cache get instructors.\r\n-\t\tif ( isset( $prepared_args['role__in'] ) ) {\r\n-\t\t\t$users       = $lp_cache->get_cache( $key_cache_list_instructors );\r\n-\t\t\t$total_users = $lp_cache->get_cache( $key_cache_list_instructors . '\u002Ftotal' );\r\n-\t\t}\r\n-\r\n-\t\tif ( $users === false ) {\r\n-\t\t\t\u002F\u002F Query max 10 instructors only.\r\n-\t\t\t$prepared_args['number'] = 10;\r\n-\r\n-\t\t\t$query        = new WP_User_Query( $prepared_args );\r\n-\t\t\t$users_result = $query->get_results();\r\n-\t\t\t$total_users  = $query->get_total();\r\n-\r\n-\t\t\tforeach ( $users_result as $user ) {\r\n-\t\t\t\t$data = $this->prepare_item_for_response( $user, $request );\r\n-\r\n-\t\t\t\t$user = $this->prepare_response_for_collection( $data );\r\n-\t\t\t\tunset( $user['custom_register'] );\r\n-\t\t\t\tunset( $user['is_super_admin'] );\r\n-\t\t\t\t$users[] = $user;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set cache with cache get instructors.\r\n-\t\t\t$lp_cache->set_cache( $key_cache_list_instructors, $users );\r\n-\t\t\t$lp_cache->set_cache( $key_cache_list_instructors . '\u002Ftotal', $total_users );\r\n-\t\t}\r\n-\r\n-\t\t$response = rest_ensure_response( $users );\r\n-\r\n-\t\t\u002F\u002F Store pagination values for headers then unset for count query.\r\n-\t\t$per_page = (int) $prepared_args['number'];\r\n-\t\t$page     = ceil( ( ( (int) $prepared_args['offset'] ) \u002F $per_page ) + 1 );\r\n-\r\n-\t\t$prepared_args['fields'] = 'ID';\r\n-\r\n-\t\tif ( $total_users \u003C 1 ) {\r\n-\t\t\t\u002F\u002F Out-of-bounds, run the query again without LIMIT for total count.\r\n-\t\t\tunset( $prepared_args['number'], $prepared_args['offset'] );\r\n-\t\t\t$count_query = new WP_User_Query( $prepared_args );\r\n-\t\t\t$total_users = $count_query->get_total();\r\n-\t\t}\r\n-\r\n-\t\t$response->header( 'X-WP-Total', (int) $total_users );\r\n-\r\n-\t\t$max_pages = ceil( $total_users \u002F $per_page );\r\n-\r\n-\t\t$response->header( 'X-WP-TotalPages', (int) $max_pages );\r\n-\r\n-\t\t$base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( sprintf( '%s\u002F%s', $this->namespace, $this->rest_base ) ) );\r\n-\t\tif ( $page > 1 ) {\r\n-\t\t\t$prev_page = $page - 1;\r\n-\r\n-\t\t\tif ( $prev_page > $max_pages ) {\r\n-\t\t\t\t$prev_page = $max_pages;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$prev_link = add_query_arg( 'page', $prev_page, $base );\r\n-\t\t\t$response->link_header( 'prev', $prev_link );\r\n-\t\t}\r\n-\t\tif ( $max_pages > $page ) {\r\n-\t\t\t$next_page = $page + 1;\r\n-\t\t\t$next_link = add_query_arg( 'page', $next_page, $base );\r\n-\r\n-\t\t\t$response->link_header( 'next', $next_link );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Prepares a single user output for response.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param WP_User         $user    User object.\r\n-\t * @param WP_REST_Request $request Request object.\r\n-\t * @return WP_REST_Response Response object.\r\n-\t *\u002F\r\n-\tpublic function prepare_item_for_response( $user, $request ) {\r\n-\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'embed';\r\n-\t\t$data    = $this->get_users_data( $user, $context, $request );\r\n-\r\n-\t\t$data = $this->add_additional_fields_to_object( $data, $request );\r\n-\t\t$data = $this->filter_response_by_context( $data, $context );\r\n-\r\n-\t\t\u002F\u002F Wrap the data in a response object.\r\n-\t\t$response = rest_ensure_response( $data );\r\n-\r\n-\t\t$response->add_links( $this->prepare_links( $user ) );\r\n-\r\n-\t\treturn apply_filters( 'lp_rest_prepare_user', $response, $user, $request );\r\n-\t}\r\n-\r\n-\tpublic function get_users_data( $user, $context = 'view' ) {\r\n-\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\r\n-\t\t$fields  = $this->get_fields_for_response( $request );\r\n-\t\t$data    = array();\r\n-\r\n-\t\tforeach ( $fields as $field ) {\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'id':\r\n-\t\t\t\t\t$data['id'] = $user->ID;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'username':\r\n-\t\t\t\t\tif ( current_user_can( 'list_users' ) || current_user_can( 'edit_user', $user->ID ) ) {\r\n-\t\t\t\t\t\t$data['username'] = $user->user_login;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'name':\r\n-\t\t\t\t\t$data['name'] = $user->display_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'first_name':\r\n-\t\t\t\t\t$data['first_name'] = $user->first_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'last_name':\r\n-\t\t\t\t\t$data['last_name'] = $user->last_name;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'email':\r\n-\t\t\t\t\tif ( current_user_can( 'list_users' ) || current_user_can( 'edit_user', $user->ID ) ) {\r\n-\t\t\t\t\t\t$data['email'] = $user->user_email;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'url':\r\n-\t\t\t\t\t$data['url'] = $user->user_url;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'description':\r\n-\t\t\t\t\t$data['description'] = $user->description;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'link':\r\n-\t\t\t\t\t$data['link'] = get_author_posts_url( $user->ID, $user->user_nicename );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'locale':\r\n-\t\t\t\t\t$data['locale'] = get_user_locale( $user );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'nickname':\r\n-\t\t\t\t\t$data['nickname'] = $user->nickname;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'slug':\r\n-\t\t\t\t\t$data['slug'] = $user->user_nicename;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'roles':\r\n-\t\t\t\t\t$data['roles'] = array_values( $user->roles );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'registered_date':\r\n-\t\t\t\t\t$data['registered_date'] = gmdate( 'c', strtotime( $user->user_registered ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'capabilities':\r\n-\t\t\t\t\t$data['capabilities'] = (object) $user->allcaps;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'extra_capabilities':\r\n-\t\t\t\t\t$data['extra_capabilities'] = (object) $user->caps;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'avatar_url':\r\n-\t\t\t\t\t$data['avatar_url'] = $this->get_profile_avatar( $user->ID );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'avatar_size':\r\n-\t\t\t\t\t$data['avatar_size']['width']  = learn_press_get_avatar_thumb_size()['width'];\r\n-\t\t\t\t\t$data['avatar_size']['height'] = learn_press_get_avatar_thumb_size()['height'];\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'instructor_data':\r\n-\t\t\t\t\t\u002F\u002F $data['instructor_data'] = $this->get_instructor_data( $user->ID );\r\n-\t\t\t\t\t$data['instructor_data'] = LP_Profile::instance( $user->ID )->get_statistic_info();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'meta':\r\n-\t\t\t\t\t$data['meta'] = $this->meta->get_value( $user->ID, $request );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'tabs':\r\n-\t\t\t\t\t$data['tabs'] = $this->get_lp_data_tabs( $user, $request );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'custom_register':\r\n-\t\t\t\t\t$data['custom_register'] = $this->custom_register( $user );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'social':\r\n-\t\t\t\t\t$data['social'] = $this->get_social_data( $user->ID );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function get_social_data( $user_id ) {\r\n-\t\treturn learn_press_get_user_extra_profile_info( $user_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_profile_avatar( $user_id ): string {\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\treturn $user->get_profile_avatar_url();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @editor tungnx\r\n-\t * @deprecated 4.1.6\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tpublic function get_instructor_data( $user_id ) {\r\n-\t\t$profile = learn_press_get_profile( $user_id );\r\n-\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( is_wp_error( $profile ) ) {\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\t$query  = $profile->query_courses( 'purchased' );\r\n-\t\t$counts = $query['counts'];\r\n-\r\n-\t\t$output = array(\r\n-\t\t\t'enrolled_courses'  => isset( $counts['all'] ) ? absint( $counts['all'] ) : 0,\r\n-\t\t\t'completed_courses' => isset( $counts['finished'] ) ? absint( $counts['finished'] ) : 0,\r\n-\t\t\t'courses'           => absint( count_user_posts( $user_id, LP_COURSE_CPT ) ),\r\n-\t\t\t'students'          => absint( learn_press_count_instructor_users( $user_id ) ),\r\n-\t\t);\r\n-\r\n-\t\treturn $output;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get data tabs.\r\n-\t *\r\n-\t * @param $user\r\n-\t * @param $request\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_lp_data_tabs( $user, $request ): array {\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( get_current_user_id() === $user->ID || current_user_can( 'list_users' ) ) {\r\n-\t\t\tif ( function_exists( 'learn_press_get_user_profile_tabs' ) ) {\r\n-\t\t\t\t$tabs = learn_press_get_user_profile_tabs();\r\n-\r\n-\t\t\t\t$content = array(\r\n-\t\t\t\t\t'overview' => $this->get_overview_tab_contents( $user ),\r\n-\t\t\t\t\t'courses'  => $this->get_course_tab_contents( $user, $request ),\r\n-\t\t\t\t\t'quizzes'  => $this->get_quiz_tab_contents( $user, $request ),\r\n-\t\t\t\t\t'orders'   => $this->get_order_content_tab( $user, $request ),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var LP_Profile_Tab $tab\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tforeach ( $tabs->get() as $key => $tab ) {\r\n-\t\t\t\t\t$output[ $key ] = array(\r\n-\t\t\t\t\t\t'title'    => $tab->get( 'title' ) ?? '',\r\n-\t\t\t\t\t\t'slug'     => $tab->get( 'slug' ) ?? '',\r\n-\t\t\t\t\t\t'priority' => $tab->get( 'priority' ) ?? '',\r\n-\t\t\t\t\t\t'icon'     => $tab->get( 'icon' ) ?? '',\r\n-\t\t\t\t\t\t'content'  => $content[ $key ] ?? '',\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( ! empty( $tab->get( 'sections' ) ) ) {\r\n-\t\t\t\t\t\tforeach ( $tab->get( 'sections' ) as $section_key => $section ) {\r\n-\t\t\t\t\t\t\t$output[ $key ]['section'][ $section_key ] = array(\r\n-\t\t\t\t\t\t\t\t'title'    => $section['title'] ?? '',\r\n-\t\t\t\t\t\t\t\t'slug'     => $section['slug'] ?? '',\r\n-\t\t\t\t\t\t\t\t'priority' => $section['priority'] ?? '',\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display register cutom form in LearnPress Setting\r\n-\t *\r\n-\t * @param object $user\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function custom_register( $user ) {\r\n-\t\t$output = array();\r\n-\r\n-\t\tif ( function_exists( 'lp_get_user_custom_register_fields' ) ) {\r\n-\t\t\t$custom_fields  = LP_Profile::get_register_fields_custom();\r\n-\t\t\t$custom_profile = lp_get_user_custom_register_fields( $user->ID );\r\n-\r\n-\t\t\tif ( $custom_fields ) {\r\n-\t\t\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t\t\t$value            = $field['id'];\r\n-\t\t\t\t\t$output[ $value ] = array(\r\n-\t\t\t\t\t\t'title'    => $field['name'] ?? '',\r\n-\t\t\t\t\t\t'type'     => $field['type'] ?? '',\r\n-\t\t\t\t\t\t'required' => $field['required'] ?? 'no',\r\n-\t\t\t\t\t\t'value'    => $custom_profile[ $value ] ?? '',\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Prepares links for the user request.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param WP_User $user User object.\r\n-\t * @return array Links for the given user.\r\n-\t *\u002F\r\n-\tprotected function prepare_links( $user ) {\r\n-\t\t$links = array(\r\n-\t\t\t'self'       => array(\r\n-\t\t\t\t'href' => rest_url( sprintf( '%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $user->ID ) ),\r\n-\t\t\t),\r\n-\t\t\t'collection' => array(\r\n-\t\t\t\t'href' => rest_url( sprintf( '%s\u002F%s', $this->namespace, $this->rest_base ) ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn $links;\r\n-\t}\r\n-\r\n-\tpublic function check_username( $value, $request, $param ) {\r\n-\t\t$username = (string) $value;\r\n-\r\n-\t\tif ( ! validate_username( $username ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_username',\r\n-\t\t\t\t__( 'This username is invalid because it uses illegal characters. Please enter a valid username.' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F** This filter is documented in wp-includes\u002Fuser.php *\u002F\r\n-\t\t$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );\r\n-\r\n-\t\tif ( in_array( strtolower( $username ), array_map( 'strtolower', $illegal_logins ), true ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_username',\r\n-\t\t\t\t__( 'Sorry, that username is not allowed.' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $username;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check a user password for the REST API.\r\n-\t *\r\n-\t * Performs a couple of checks like edit_user() in wp-admin\u002Fincludes\u002Fuser.php.\r\n-\t *\r\n-\t * @since 4.7.0\r\n-\t *\r\n-\t * @param string          $value   The password submitted in the request.\r\n-\t * @param WP_REST_Request $request Full details about the request.\r\n-\t * @param string          $param   The parameter name.\r\n-\t * @return string|WP_Error The sanitized password, if valid, otherwise an error.\r\n-\t *\u002F\r\n-\tpublic function check_user_password( $value, $request, $param ) {\r\n-\t\t$password = (string) $value;\r\n-\r\n-\t\tif ( empty( $password ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_password',\r\n-\t\t\t\t__( 'Passwords cannot be empty.' ),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( false !== strpos( $password, '\\\\' ) ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'rest_user_invalid_password',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t\u002F* translators: %s: The '\\' character. *\u002F\r\n-\t\t\t\t\t__( 'Passwords cannot contain the \"%s\" character.' ),\r\n-\t\t\t\t\t'\\\\'\r\n-\t\t\t\t),\r\n-\t\t\t\tarray( 'status' => 400 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $password;\r\n-\t}\r\n-\r\n-\tpublic function get_item_schema() {\r\n-\t\t$schema = array(\r\n-\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\r\n-\t\t\t'title'      => 'user',\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'id'                 => array(\r\n-\t\t\t\t\t'description' => __( 'Unique identifier for the user.' ),\r\n-\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'username'           => array(\r\n-\t\t\t\t\t'description' => __( 'Login name for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => array( $this, 'check_username' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'name'               => array(\r\n-\t\t\t\t\t'description' => __( 'Display name for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'first_name'         => array(\r\n-\t\t\t\t\t'description' => __( 'First name for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'last_name'          => array(\r\n-\t\t\t\t\t'description' => __( 'Last name for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'email'              => array(\r\n-\t\t\t\t\t'description' => __( 'The email address for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'email',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'url'                => array(\r\n-\t\t\t\t\t'description' => __( 'URL of the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'description'        => array(\r\n-\t\t\t\t\t'description' => __( 'Description of the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'link'               => array(\r\n-\t\t\t\t\t'description' => __( 'Author URL of the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'uri',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'locale'             => array(\r\n-\t\t\t\t\t'description' => __( 'Locale for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'enum'        => array_merge( array( '', 'en_US' ), get_available_languages() ),\r\n-\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'nickname'           => array(\r\n-\t\t\t\t\t'description' => __( 'The nickname for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'slug'               => array(\r\n-\t\t\t\t\t'description' => __( 'An alphanumeric identifier for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => array( $this, 'sanitize_slug' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'registered_date'    => array(\r\n-\t\t\t\t\t'description' => __( 'Registration date for the user.' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'format'      => 'date-time',\r\n-\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'roles'              => array(\r\n-\t\t\t\t\t'description' => __( 'Roles assigned to the user.' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'items'       => array(\r\n-\t\t\t\t\t\t'type' => 'string',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'password'           => array(\r\n-\t\t\t\t\t'description' => __( 'Password for the user (never included).' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array(), \u002F\u002F Password is never displayed.\r\n-\t\t\t\t\t'required'    => true,\r\n-\t\t\t\t\t'arg_options' => array(\r\n-\t\t\t\t\t\t'sanitize_callback' => array( $this, 'check_user_password' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'capabilities'       => array(\r\n-\t\t\t\t\t'description' => __( 'All capabilities assigned to the user.' ),\r\n-\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'extra_capabilities' => array(\r\n-\t\t\t\t\t'description' => __( 'Any extra capabilities assigned to the user.' ),\r\n-\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t'context'     => array( 'edit' ),\r\n-\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t),\r\n-\t\t\t\t'tabs'               => array(\r\n-\t\t\t\t\t'description' => __( 'Get all items in user like course, lesson, quiz...' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'avatar_url'         => array(\r\n-\t\t\t\t\t'description' => __( 'URL avatar' ),\r\n-\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t'context'     => array( 'view', 'edit' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'avatar_size'        => array(\r\n-\t\t\t\t\t'description' => __( 'URL avatar size' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'instructor_data'    => array(\r\n-\t\t\t\t\t'description' => __( 'Instructor data' ),\r\n-\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'custom_register'    => array(\r\n-\t\t\t\t\t'description' => __( 'Get custom register fields.' ),\r\n-\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'social'             => array(\r\n-\t\t\t\t\t'description' => __( 'Get social fields.' ),\r\n-\t\t\t\t\t'type'        => 'object',\r\n-\t\t\t\t\t'context'     => array( 'view' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$schema['properties']['meta'] = $this->meta->get_field_schema();\r\n-\r\n-\t\treturn $this->add_additional_fields_schema( $schema );\r\n-\t}\r\n-\r\n-\tpublic function get_collection_params() {\r\n-\t\t$query_params = parent::get_collection_params();\r\n-\r\n-\t\t$query_params['context']['default'] = 'view';\r\n-\r\n-\t\t$query_params['exclude'] = array(\r\n-\t\t\t'description' => __( 'Ensure the result set excludes specific IDs.' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'     => array(),\r\n-\t\t);\r\n-\r\n-\t\t$query_params['include'] = array(\r\n-\t\t\t'description' => __( 'Limit the result set to specific IDs.' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'integer',\r\n-\t\t\t),\r\n-\t\t\t'default'     => array(),\r\n-\t\t);\r\n-\r\n-\t\t$query_params['offset'] = array(\r\n-\t\t\t'description' => __( 'Offset the result set by a specific number of items.' ),\r\n-\t\t\t'type'        => 'integer',\r\n-\t\t);\r\n-\r\n-\t\t$query_params['order'] = array(\r\n-\t\t\t'default'     => 'asc',\r\n-\t\t\t'description' => __( 'Sorting attributes in ascending or descending order.' ),\r\n-\t\t\t'enum'        => array( 'asc', 'desc' ),\r\n-\t\t\t'type'        => 'string',\r\n-\t\t);\r\n-\r\n-\t\t$query_params['orderby'] = array(\r\n-\t\t\t'default'     => 'name',\r\n-\t\t\t'description' => __( 'Sort collections by the object attribute.' ),\r\n-\t\t\t'enum'        => array(\r\n-\t\t\t\t'id',\r\n-\t\t\t\t'include',\r\n-\t\t\t\t'name',\r\n-\t\t\t\t'registered_date',\r\n-\t\t\t\t'slug',\r\n-\t\t\t\t'include_slugs',\r\n-\t\t\t\t'email',\r\n-\t\t\t\t'url',\r\n-\t\t\t),\r\n-\t\t\t'type'        => 'string',\r\n-\t\t);\r\n-\r\n-\t\t$query_params['slug'] = array(\r\n-\t\t\t'description' => __( 'Limit result set to users with one or more specific slugs.' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'string',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$query_params['roles'] = array(\r\n-\t\t\t'description' => __( 'Limit result set to users matching at least one specific role provided. Accepts csv list or single role.' ),\r\n-\t\t\t'type'        => 'array',\r\n-\t\t\t'items'       => array(\r\n-\t\t\t\t'type' => 'string',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$query_params['who'] = array(\r\n-\t\t\t'description' => __( 'Limit result set to users who are considered authors.' ),\r\n-\t\t\t'type'        => 'string',\r\n-\t\t\t'enum'        => array(\r\n-\t\t\t\t'authors',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters REST API collection parameters for the users controller.\r\n-\t\t *\r\n-\t\t * This filter registers the collection parameter, but does not map the\r\n-\t\t * collection parameter to an internal WP_User_Query parameter.  Use the\r\n-\t\t * `rest_user_query` filter to set WP_User_Query arguments.\r\n-\t\t *\r\n-\t\t * @since 4.7.0\r\n-\t\t *\r\n-\t\t * @param array $query_params JSON Schema-formatted collection parameters.\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( 'rest_user_collection_params', $query_params );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * REST API for the user.\n+ *\n+ * @package LearnPress\u002FJWT\u002FRESTAPI\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+class LP_Jwt_Users_V1_Controller extends LP_REST_Jwt_Controller {\n+\tprotected $namespace = 'learnpress\u002Fv1';\n+\n+\tprotected $rest_base = 'users';\n+\n+\tprotected $hierarchical = true;\n+\n+\tprotected $meta;\n+\n+\tpublic function __construct() {\n+\t\t$this->meta = new WP_REST_User_Meta_Fields();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_items_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_collection_params(),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002F(?P\u003Cid>[\\d]+)',\n+\t\t\tarray(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'get_item_permissions_check' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'context' => $this->get_context_param(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'default' => 'view',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'update_item_permissions_check' ),\n+\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Freset-password',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t'callback'            => array( $this, 'reset_password' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'user_login' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'User or Email login.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fchange-password',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t'callback'            => array( $this, 'change_password' ),\n+\t\t\t\t'permission_callback' => array( $this, 'update_item_password_permissions' ),\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'old_password' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Old Password', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t),\n+\t\t\t\t\t'new_password' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'New Password', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\tregister_rest_route(\n+\t\t\t$this->namespace,\n+\t\t\t'\u002F' . $this->rest_base . '\u002Fdelete',\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t'callback'            => array( $this, 'delete_account' ),\n+\t\t\t\t'permission_callback' => array( $this, 'update_item_password_permissions' ),\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'id'       => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'User ID', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t),\n+\t\t\t\t\t'password' => array(\n+\t\t\t\t\t\t'description' => esc_html__( 'Password', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function get_items_permissions_check( $request ) {\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_item_permissions_check( $request ) {\n+\t\t$user = $this->get_user( $request['id'] );\n+\n+\t\tif ( is_wp_error( $user ) ) {\n+\t\t\treturn $user;\n+\t\t}\n+\n+\t\tif ( ! is_user_logged_in() ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_forbidden',\n+\t\t\t\t__( 'Authentication required to access user information.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$types = get_post_types( array( 'show_in_rest' => true ), 'names' );\n+\n+\t\tif ( get_current_user_id() === $user->ID ) {\n+\t\t\treturn true;\n+\t\t} elseif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_cannot_view',\n+\t\t\t\t__( 'Sorry, you are not allowed to list users.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Checks if a given request has access to update a user.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @return true|WP_Error True if the request has access to update the item, WP_Error object otherwise.\n+\t *\u002F\n+\tpublic function update_item_permissions_check( $request ) {\n+\t\t$user = $this->get_user( $request['id'] );\n+\t\tif ( is_wp_error( $user ) ) {\n+\t\t\treturn $user;\n+\t\t}\n+\n+\t\tif ( ! empty( $request['roles'] ) ) {\n+\t\t\tif ( ! current_user_can( 'promote_user', $user->ID ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_cannot_edit_roles',\n+\t\t\t\t\t__( 'Sorry, you are not allowed to edit roles of this user.' ),\n+\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$request_params = array_keys( $request->get_params() );\n+\t\t\tsort( $request_params );\n+\t\t\t\u002F\u002F If only 'id' and 'roles' are specified (we are only trying to\n+\t\t\t\u002F\u002F edit roles), then only the 'promote_user' cap is required.\n+\t\t\tif ( array( 'id', 'roles' ) === $request_params ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! current_user_can( 'edit_user', $user->ID ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_cannot_edit',\n+\t\t\t\t__( 'Sorry, you are not allowed to edit this user.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function update_item_password_permissions( $request ) {\n+\t\t$user = wp_get_current_user();\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_cannot_update',\n+\t\t\t\t__( 'Sorry, you are not allowed to update this user.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! current_user_can( 'edit_user', $user->ID ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_cannot_edit',\n+\t\t\t\t__( 'Sorry, you are not allowed to edit this user.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Determines if the current user is allowed to make the desired roles change.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param int   $user_id User ID.\n+\t * @param array $roles   New user roles.\n+\t * @return true|WP_Error True if the current user is allowed to make the role change,\n+\t *                       otherwise a WP_Error object.\n+\t *\u002F\n+\tprotected function check_role_update( $user_id, $roles ) {\n+\t\tglobal $wp_roles;\n+\n+\t\tforeach ( $roles as $role ) {\n+\n+\t\t\tif ( ! isset( $wp_roles->role_objects[ $role ] ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_user_invalid_role',\n+\t\t\t\t\t\u002F* translators: %s: Role key. *\u002F\n+\t\t\t\t\tsprintf( __( 'The role %s does not exist.' ), $role ),\n+\t\t\t\t\tarray( 'status' => 400 )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$potential_role = $wp_roles->role_objects[ $role ];\n+\n+\t\t\t\u002F*\n+\t\t\t * Don't let anyone with 'edit_users' (admins) edit their own role to something without it.\n+\t\t\t * Multisite super admins can freely edit their blog roles -- they possess all caps.\n+\t\t\t *\u002F\n+\t\t\tif ( ! ( is_multisite()\n+\t\t\t\t&& current_user_can( 'manage_sites' ) )\n+\t\t\t\t&& get_current_user_id() === $user_id\n+\t\t\t\t&& ! $potential_role->has_cap( 'edit_users' )\n+\t\t\t) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_user_invalid_role',\n+\t\t\t\t\t__( 'Sorry, you are not allowed to give users that role.' ),\n+\t\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Include user admin functions to get access to get_editable_roles().\n+\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fuser.php';\n+\n+\t\t\t\u002F\u002F The new role must be editable by the logged-in user.\n+\t\t\t$editable_roles = get_editable_roles();\n+\n+\t\t\tif ( empty( $editable_roles[ $role ] ) ) {\n+\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t'rest_user_invalid_role',\n+\t\t\t\t\t__( 'Sorry, you are not allowed to give users that role.' ),\n+\t\t\t\t\tarray( 'status' => 403 )\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function reset_password( $request ) {\n+\t\t$user_login = $request['user_login'];\n+\t\t$reset      = LP_Forms_Handler::retrieve_password( $user_login );\n+\n+\t\tif ( is_wp_error( $reset ) ) {\n+\t\t\treturn $reset;\n+\t\t} else {\n+\t\t\treturn rest_ensure_response(\n+\t\t\t\tarray(\n+\t\t\t\t\t'code'    => 'success',\n+\t\t\t\t\t'message' => esc_html__( 'A link to reset your password has been emailed to you.', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function delete_account( $request ) {\n+\t\t$user_id  = $request['id'];\n+\t\t$password = $request['password'];\n+\n+\t\t$user = wp_get_current_user();\n+\n+\t\tif ( ! $user || $user_id !== $user->ID ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_id',\n+\t\t\t\t__( 'Invalid user ID.', 'learnpress' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! wp_check_password( $password, $user->data->user_pass, $user->ID ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_password',\n+\t\t\t\t__( 'Invalid password.', 'learnpress' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! function_exists( 'wp_delete_user' ) ) {\n+\t\t\trequire_once ABSPATH . 'wp-admin\u002Fincludes\u002Fuser.php';\n+\t\t}\n+\n+\t\t$delete = wp_delete_user( $user_id );\n+\n+\t\tif ( is_wp_error( $delete ) ) {\n+\t\t\treturn $delete;\n+\t\t} else {\n+\t\t\treturn rest_ensure_response(\n+\t\t\t\tarray(\n+\t\t\t\t\t'code'    => 'success',\n+\t\t\t\t\t'message' => esc_html__( 'Your account has been deleted.', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function change_password( $request ) {\n+\t\t$old_password = $request['old_password'];\n+\t\t$new_password = $request['new_password'];\n+\n+\t\t$user = wp_get_current_user();\n+\n+\t\tif ( ! $user || ! $user->ID || ( empty( $old_password ) || empty( $new_password ) ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_cannot_change_password',\n+\t\t\t\t__( 'Sorry, you are not allowed to change password.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! wp_check_password( $old_password, $user->user_pass, $user->ID ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_incorrect_password',\n+\t\t\t\t__( 'Your current password is incorrect.' ),\n+\t\t\t\tarray( 'status' => 403 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( apply_filters( 'learnpress_rest_api_user_change_password', true, $user ) ) {\n+\t\t\twp_set_password( $new_password, $user->ID );\n+\t\t} else {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_cannot_change_password',\n+\t\t\t\t__( 'Sorry, you are not allowed to change password.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn rest_ensure_response(\n+\t\t\tarray(\n+\t\t\t\t'code'    => 'success',\n+\t\t\t\t'message' => esc_html__( 'Your password has been updated. Please log in again to continue!', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tprotected function get_user( $id ) {\n+\t\t$error = new WP_Error(\n+\t\t\t'rest_user_invalid_id',\n+\t\t\t__( 'Invalid user ID.' ),\n+\t\t\tarray( 'status' => 404 )\n+\t\t);\n+\n+\t\tif ( (int) $id \u003C= 0 ) {\n+\t\t\treturn $error;\n+\t\t}\n+\n+\t\t$user = get_userdata( (int) $id );\n+\t\tif ( empty( $user ) || ! $user->exists() ) {\n+\t\t\treturn $error;\n+\t\t}\n+\n+\t\tif ( is_multisite() && ! is_user_member_of_blog( $user->ID ) ) {\n+\t\t\treturn $error;\n+\t\t}\n+\n+\t\treturn $user;\n+\t}\n+\n+\t\u002F**\n+\t * Updates a single user.\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\n+\t *\u002F\n+\tpublic function update_item( $request ) {\n+\t\t$user = $this->get_user( $request['id'] );\n+\t\tif ( is_wp_error( $user ) ) {\n+\t\t\treturn $user;\n+\t\t}\n+\n+\t\t$id = $user->ID;\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_id',\n+\t\t\t\t__( 'Invalid user ID.' ),\n+\t\t\t\tarray( 'status' => 404 )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$owner_id = email_exists( $request['email'] );\n+\n+\t\tif ( $owner_id && $owner_id !== $id ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_email',\n+\t\t\t\t__( 'Invalid email address.' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! empty( $request['username'] ) && $request['username'] !== $user->user_login ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_argument',\n+\t\t\t\t__( \"Username isn't editable.\" ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! empty( $request['slug'] ) && $request['slug'] !== $user->user_nicename && get_user_by( 'slug', $request['slug'] ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_slug',\n+\t\t\t\t__( 'Invalid slug.' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( ! empty( $request['roles'] ) ) {\n+\t\t\t$check_permission = $this->check_role_update( $id, $request['roles'] );\n+\n+\t\t\tif ( is_wp_error( $check_permission ) ) {\n+\t\t\t\treturn $check_permission;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$user = $this->prepare_item_for_database( $request );\n+\n+\t\t\u002F\u002F Ensure we're operating on the same user we already checked.\n+\t\t$user->ID = $id;\n+\n+\t\t$user_id = wp_update_user( wp_slash( (array) $user ) );\n+\n+\t\tif ( is_wp_error( $user_id ) ) {\n+\t\t\treturn $user_id;\n+\t\t}\n+\n+\t\t$files = $request->get_file_params();\n+\n+\t\tif ( ! empty( $files['lp_avatar_file'] ) ) {\n+\t\t\t$file = $files['lp_avatar_file'];\n+\n+\t\t\tif ( ! empty( $file['name'] ) ) {\n+\t\t\t\tlist($width, $height) = getimagesize( $file['tmp_name'] );\n+\n+\t\t\t\t$upload_size = learn_press_get_avatar_thumb_size();\n+\n+\t\t\t\tif ( $width != $upload_size['width'] || $height != $upload_size['height'] ) {\n+\t\t\t\t\treturn new WP_Error(\n+\t\t\t\t\t\t'rest_user_invalid_avatar_dimensions',\n+\t\t\t\t\t\tsprintf( __( 'Invalid avatar dimensions. Please upload a new avatar width size %1$1sx%2$2s' ), $upload_size['width'], $upload_size['height'] ),\n+\t\t\t\t\t\tarray( 'status' => 400 )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$data   = LP_WP_Filesystem::instance()->file_get_contents( $file['tmp_name'] );\n+\t\t\t\t$base64 = base64_encode( $data );\n+\n+\t\t\t\t$controller = new LP_REST_Profile_Controller();\n+\n+\t\t\t\t$request->set_param( 'file', $base64 );\n+\n+\t\t\t\t$uploaded_avatar = $controller->upload_avatar( $request );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $request['avatar_url'] ) ) {\n+\t\t\t$controller = new LP_REST_Profile_Controller();\n+\n+\t\t\t$request->set_param( 'file', $request['avatar_url'] );\n+\n+\t\t\t$uploaded_avatar = $controller->upload_avatar( $request );\n+\t\t}\n+\n+\t\t$user = get_user_by( 'id', $user_id );\n+\n+\t\tdo_action( 'lp_rest_insert_user', $user, $request, false );\n+\n+\t\tif ( ! empty( $request['roles'] ) ) {\n+\t\t\tarray_map( array( $user, 'add_role' ), $request['roles'] );\n+\t\t}\n+\n+\t\t$schema = $this->get_item_schema();\n+\n+\t\tif ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {\n+\t\t\t$meta_update = $this->meta->update_value( $request['meta'], $user_id );\n+\n+\t\t\tif ( is_wp_error( $meta_update ) ) {\n+\t\t\t\treturn $meta_update;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$user          = get_user_by( 'id', $user_id );\n+\t\t$fields_update = $this->update_additional_fields_for_object( $user, $request );\n+\n+\t\tif ( is_wp_error( $fields_update ) ) {\n+\t\t\treturn $fields_update;\n+\t\t}\n+\n+\t\t$request->set_param( 'context', 'edit' );\n+\n+\t\tdo_action( 'lp_rest_after_insert_user', $user, $request, false );\n+\n+\t\t$response = $this->prepare_item_for_response( $user, $request );\n+\t\t$response = rest_ensure_response( $response );\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Prepares a single user for creation or update.\n+\t *\n+\t * @param WP_REST_Request $request Request object.\n+\t * @return object User object.\n+\t *\u002F\n+\tprotected function prepare_item_for_database( $request ) {\n+\t\t$prepared_user = new stdClass();\n+\n+\t\t$schema = $this->get_item_schema();\n+\n+\t\t\u002F\u002F Required arguments.\n+\t\tif ( isset( $request['email'] ) && ! empty( $schema['properties']['email'] ) ) {\n+\t\t\t$prepared_user->user_email = $request['email'];\n+\t\t}\n+\n+\t\tif ( isset( $request['username'] ) && ! empty( $schema['properties']['username'] ) ) {\n+\t\t\t$prepared_user->user_login = $request['username'];\n+\t\t}\n+\n+\t\tif ( isset( $request['password'] ) && ! empty( $schema['properties']['password'] ) ) {\n+\t\t\t$prepared_user->user_pass = $request['password'];\n+\t\t}\n+\n+\t\t\u002F\u002F Optional arguments.\n+\t\tif ( isset( $request['id'] ) ) {\n+\t\t\t$prepared_user->ID = absint( $request['id'] );\n+\t\t}\n+\n+\t\tif ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {\n+\t\t\t$prepared_user->display_name = $request['name'];\n+\t\t}\n+\n+\t\tif ( isset( $request['first_name'] ) && ! empty( $schema['properties']['first_name'] ) ) {\n+\t\t\t$prepared_user->first_name = $request['first_name'];\n+\t\t}\n+\n+\t\tif ( isset( $request['last_name'] ) && ! empty( $schema['properties']['last_name'] ) ) {\n+\t\t\t$prepared_user->last_name = $request['last_name'];\n+\t\t}\n+\n+\t\tif ( isset( $request['nickname'] ) && ! empty( $schema['properties']['nickname'] ) ) {\n+\t\t\t$prepared_user->nickname = $request['nickname'];\n+\t\t}\n+\n+\t\tif ( isset( $request['slug'] ) && ! empty( $schema['properties']['slug'] ) ) {\n+\t\t\t$prepared_user->user_nicename = $request['slug'];\n+\t\t}\n+\n+\t\tif ( isset( $request['description'] ) && ! empty( $schema['properties']['description'] ) ) {\n+\t\t\t$prepared_user->description = $request['description'];\n+\t\t}\n+\n+\t\tif ( isset( $request['url'] ) && ! empty( $schema['properties']['url'] ) ) {\n+\t\t\t$prepared_user->user_url = $request['url'];\n+\t\t}\n+\n+\t\tif ( isset( $request['locale'] ) && ! empty( $schema['properties']['locale'] ) ) {\n+\t\t\t$prepared_user->locale = $request['locale'];\n+\t\t}\n+\n+\t\t\u002F\u002F Setting roles will be handled outside of this function.\n+\t\tif ( isset( $request['roles'] ) ) {\n+\t\t\t$prepared_user->role = false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Filters user data before insertion via the REST API.\n+\t\t *\n+\t\t * @param object          $prepared_user User object.\n+\t\t * @param WP_REST_Request $request       Request object.\n+\t\t *\u002F\n+\t\treturn apply_filters( 'lp_rest_pre_insert_user', $prepared_user, $request );\n+\t}\n+\n+\tpublic function get_overview_tab_contents( $user ) {\n+\t\t$output    = array();\n+\t\t$statistic = LP_Profile::instance( $user->get_id )->get_statistic_info();\n+\n+\t\t$output['statistic'] = array_map( 'absint', $statistic );\n+\n+\t\t$featured_query = new LP_Course_Query(\n+\t\t\tarray(\n+\t\t\t\t'paginate' => false,\n+\t\t\t\t'featured' => 'yes',\n+\t\t\t\t'return'   => 'ids',\n+\t\t\t\t'author'   => $user->ID,\n+\t\t\t)\n+\t\t);\n+\n+\t\t$output['featured'] = $featured_query->get_courses();\n+\n+\t\t$latest_query = new LP_Course_Query(\n+\t\t\tarray(\n+\t\t\t\t'paginate' => false,\n+\t\t\t\t'return'   => 'ids',\n+\t\t\t\t'author'   => $user->get_id(),\n+\t\t\t\t'limit'    => '-1',\n+\t\t\t)\n+\t\t);\n+\n+\t\t$output['latest'] = $latest_query->get_courses();\n+\n+\t\treturn $output;\n+\t}\n+\n+\tpublic function get_course_tab_contents( $user, $request ) {\n+\t\t$output = array(\n+\t\t\t'enrolled' => array(),\n+\t\t\t'created'  => array(),\n+\t\t);\n+\n+\t\t$profile          = learn_press_get_profile( $user->get_id() );\n+\t\t$filters_enrolled = array(\n+\t\t\t'all'         => 'all',\n+\t\t\t'finished'    => 'finished',\n+\t\t\t'passed'      => 'passed',\n+\t\t\t'failed'      => 'failed',\n+\t\t\t'in-progress' => 'in-progress',\n+\t\t);\n+\n+\t\tif ( method_exists( $profile, 'query_courses' ) ) {\n+\t\t\tforeach ( $filters_enrolled as $key => $filter ) {\n+\t\t\t\t$query_enrolled = $profile->query_courses(\n+\t\t\t\t\t'purchased',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => $filter,\n+\t\t\t\t\t\t'limit'  => $request['per_page'] ?? '100',\n+\t\t\t\t\t\t'paged'  => $request['paged'] ?? 1,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tif ( empty( $query_enrolled->get_items() ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$items        = $query_enrolled->get_items();\n+\t\t\t\t$enrolled_ids = array();\n+\t\t\t\tforeach ( $items as $enrolled_item ) {\n+\t\t\t\t\t$course_data = $user->get_course_data( $enrolled_item );\n+\n+\t\t\t\t\tif ( $course_data ) {\n+\t\t\t\t\t\t$post = get_post( $enrolled_item );\n+\n+\t\t\t\t\t\t$enrolled_ids[] = array(\n+\t\t\t\t\t\t\t'id'         => $enrolled_item ?? '',\n+\t\t\t\t\t\t\t'title'      => $post->post_title,\n+\t\t\t\t\t\t\t'graduation' => ! empty( $course_data->get_graduation() ) ? $course_data->get_graduation() : '',\n+\t\t\t\t\t\t\t'status'     => ! empty( $course_data->get_status() ) ? $course_data->get_status() : '',\n+\t\t\t\t\t\t\t'start_time' => lp_jwt_prepare_date_response( $course_data->get_start_time() ? $course_data->get_start_time()->toSql() : '' ),\n+\t\t\t\t\t\t\t'end_time'   => lp_jwt_prepare_date_response( $course_data->get_end_time() ? $course_data->get_end_time()->toSql() : '' ),\n+\t\t\t\t\t\t\t'expiration' => lp_jwt_prepare_date_response( $course_data->get_expiration_time() ? $course_data->get_expiration_time()->toSql() : '' ),\n+\t\t\t\t\t\t\t'results'    => $course_data->calculate_course_results(),\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$output['enrolled'][ $key ] = $enrolled_ids;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filters_created = array(\n+\t\t\t'all'     => '',\n+\t\t\t'publish' => 'publish',\n+\t\t\t'pending' => 'pending',\n+\t\t);\n+\n+\t\tif ( method_exists( $profile, 'query_courses' ) ) {\n+\t\t\tforeach ( $filters_created as $created_key => $filter ) {\n+\t\t\t\t$query_created = $profile->query_courses(\n+\t\t\t\t\t'own',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => $filter,\n+\t\t\t\t\t\t'limit'  => $request['per_page'] ?? '100',\n+\t\t\t\t\t\t'paged'  => $request['paged'] ?? 1,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$created_ids = array();\n+\t\t\t\tif ( ! empty( $query_created->get_items() ) ) {\n+\t\t\t\t\tforeach ( $query_created->get_items() as $created_item ) {\n+\t\t\t\t\t\t$created_ids[] = $created_item;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$output['created'][ $created_key ] = array_map( 'absint', $created_ids );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get Profile Quiz Tab content\n+\t *\n+\t * @param [type] $request\n+\t * @return void\n+\t *\n+\t * @author Nhamdv \u003Cdaonham@gmail.com>\n+\t *\u002F\n+\tpublic function get_quiz_tab_contents( $user, $request ) {\n+\t\t$output = array();\n+\n+\t\t$user_profile = learn_press_get_user( $request['id'] );\n+\t\t$filters      = array(\n+\t\t\t'all'         => '',\n+\t\t\t'finished'    => 'completed',\n+\t\t\t'passed'      => 'passed',\n+\t\t\t'failed'      => 'failed',\n+\t\t\t'in-progress' => 'in-progress',\n+\t\t);\n+\n+\t\tif ( method_exists( $user_profile, 'get_user_quizzes' ) ) {\n+\t\t\tforeach ( $filters as $key => $quiz_filter ) {\n+\t\t\t\t$filter             = new LP_User_Items_Filter();\n+\t\t\t\t$filter->user_id    = $request['id'];\n+\t\t\t\t$filter->limit      = 100;\n+\t\t\t\t$filter->status     = $quiz_filter === 'complete' ? 'complete' : '';\n+\t\t\t\t$filter->graduation = $quiz_filter !== 'complete' ? $quiz_filter : '';\n+\t\t\t\t$query              = $user_profile->get_user_quizzes( $filter );\n+\n+\t\t\t\t$ids = array();\n+\t\t\t\tif ( ! empty( $query->get_items() ) ) {\n+\t\t\t\t\tforeach ( $query->get_items() as $item ) {\n+\t\t\t\t\t\t$ids[] = array(\n+\t\t\t\t\t\t\t'id'         => $item->get_id(),\n+\t\t\t\t\t\t\t'result'     => $item->get_percent_result() ?? '',\n+\t\t\t\t\t\t\t'graduation' => $item->get_graduation() ?? '',\n+\t\t\t\t\t\t\t'start_time' => $item->get_start_time() ? lp_jwt_prepare_date_response( $item->get_start_time()->toSql( false ) ) : '',\n+\t\t\t\t\t\t\t'end_time'   => $item->get_end_time() ? lp_jwt_prepare_date_response( $item->get_end_time()->toSql( false ) ) : '',\n+\t\t\t\t\t\t\t'data'       => $filter !== 'in-progress' ? $item->calculate_quiz_result() : array(),\n+\t\t\t\t\t\t\t'attempt'    => $filter !== 'in-progress' ? $item->get_attempts() : array(),\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$output[ $key ] = $ids;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get order by user id\n+\t *\n+\t * @param array $request [id: user ID]\n+\t * @return array\n+\t *\n+\t * @author Nhamdv \u003Cdaonham95@gmail.com>\n+\t *\u002F\n+\tpublic function get_order_content_tab( $user, $request ) {\n+\t\t$output = array();\n+\n+\t\t$profile = learn_press_get_profile( $request['id'] );\n+\n+\t\tif ( method_exists( $profile, 'query_orders' ) ) {\n+\t\t\t$query_orders = $profile->query_orders( array( 'fields' => 'ids' ) );\n+\t\t\tif ( ! empty( $query_orders->get_items() ) ) {\n+\t\t\t\tforeach ( $query_orders->get_items() as $order_id ) {\n+\t\t\t\t\t$order = learn_press_get_order( $order_id );\n+\n+\t\t\t\t\t$output[ $order_id ] = array(\n+\t\t\t\t\t\t'order_key' => $order->get_order_number() ?? '',\n+\t\t\t\t\t\t'total'     => $order->get_total(),\n+\t\t\t\t\t\t'currency'  => $order->get_currency(),\n+\t\t\t\t\t\t'status'    => $order->get_status(),\n+\t\t\t\t\t\t'date'      => $order->get_order_date( 'timestamp' ) ? lp_jwt_prepare_date_response( get_date_from_gmt( gmdate( 'Y-m-d H:i:s', $order->get_order_date( 'timestamp' ) ), 'Y-m-d H:i:s' ) ) : '',\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Retrieves a single user.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\n+\t *\u002F\n+\tpublic function get_item( $request ) {\n+\t\t$user = $this->get_user( $request['id'] );\n+\n+\t\tif ( is_wp_error( $user ) ) {\n+\t\t\treturn $user;\n+\t\t}\n+\n+\t\t$user     = $this->prepare_item_for_response( $user, $request );\n+\t\t$response = rest_ensure_response( $user );\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Retrieves all users.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.\n+\t *\u002F\n+\tpublic function get_items( $request ) {\n+\n+\t\t\u002F\u002F Retrieve the list of registered collection query parameters.\n+\t\t$registered = $this->get_collection_params();\n+\n+\t\t\u002F*\n+\t\t * This array defines mappings between public API query parameters whose\n+\t\t * values are accepted as-passed, and their internal WP_Query parameter\n+\t\t * name equivalents (some are the same). Only values which are also\n+\t\t * present in $registered will be set.\n+\t\t *\u002F\n+\t\t$parameter_mappings = array(\n+\t\t\t'exclude'  => 'exclude',\n+\t\t\t'include'  => 'include',\n+\t\t\t'order'    => 'order',\n+\t\t\t'per_page' => 'number',\n+\t\t\t'search'   => 'search',\n+\t\t\t'roles'    => 'role__in',\n+\t\t\t'slug'     => 'nicename__in',\n+\t\t);\n+\n+\t\t$roles = $request->get_param( 'roles' );\n+\t\tif ( ! empty( $roles ) && $roles == [ UserModel::ROLE_ADMINISTRATOR ] ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_forbidden',\n+\t\t\t\t__( 'You are not allowed.' ),\n+\t\t\t\tarray( 'status' => rest_authorization_required_code() )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Always only get instructors and administrators.\n+\t\t$request['roles'] = [ UserModel::ROLE_INSTRUCTOR, UserModel::ROLE_ADMINISTRATOR ];\n+\n+\t\t$prepared_args = array();\n+\n+\t\t\u002F*\n+\t\t * For each known parameter which is both registered and present in the request,\n+\t\t * set the parameter's value on the query $prepared_args.\n+\t\t *\u002F\n+\t\tforeach ( $parameter_mappings as $api_param => $wp_param ) {\n+\t\t\tif ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {\n+\t\t\t\t$prepared_args[ $wp_param ] = $request[ $api_param ];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( isset( $registered['offset'] ) && ! empty( $request['offset'] ) ) {\n+\t\t\t$prepared_args['offset'] = $request['offset'];\n+\t\t} else {\n+\t\t\t$prepared_args['offset'] = ( $request['page'] - 1 ) * $prepared_args['number'];\n+\t\t}\n+\n+\t\tif ( isset( $registered['orderby'] ) ) {\n+\t\t\t$orderby_possibles        = array(\n+\t\t\t\t'id'              => 'ID',\n+\t\t\t\t'include'         => 'include',\n+\t\t\t\t'name'            => 'display_name',\n+\t\t\t\t'registered_date' => 'registered',\n+\t\t\t\t'slug'            => 'user_nicename',\n+\t\t\t\t'include_slugs'   => 'nicename__in',\n+\t\t\t\t'email'           => 'user_email',\n+\t\t\t\t'url'             => 'user_url',\n+\t\t\t);\n+\t\t\t$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];\n+\t\t}\n+\n+\t\tif ( isset( $registered['who'] ) && ! empty( $request['who'] ) && 'authors' === $request['who'] ) {\n+\t\t\t$prepared_args['who'] = 'authors';\n+\t\t}\n+\n+\t\tif ( ! empty( $prepared_args['search'] ) ) {\n+\t\t\t$prepared_args['search'] = '*' . $prepared_args['search'] . '*';\n+\t\t}\n+\t\t\u002F**\n+\t\t * Filters WP_User_Query arguments when querying users via the REST API.\n+\t\t *\n+\t\t * @link https:\u002F\u002Fdeveloper.wordpress.org\u002Freference\u002Fclasses\u002Fwp_user_query\u002F\n+\t\t *\n+\t\t * @since 4.7.0\n+\t\t *\n+\t\t * @param array           $prepared_args Array of arguments for WP_User_Query.\n+\t\t * @param WP_REST_Request $request       The REST API request.\n+\t\t *\u002F\n+\t\t$prepared_args = apply_filters( 'rest_user_query', $prepared_args, $request );\n+\n+\t\t$users                      = array();\n+\t\t$lp_cache                   = new LP_Cache();\n+\t\t$key_cache_list_instructors = 'lp_get_instructors';\n+\n+\t\t\u002F\u002F Check cache with cache get instructors.\n+\t\tif ( isset( $prepared_args['role__in'] ) ) {\n+\t\t\t$users       = $lp_cache->get_cache( $key_cache_list_instructors );\n+\t\t\t$total_users = $lp_cache->get_cache( $key_cache_list_instructors . '\u002Ftotal' );\n+\t\t}\n+\n+\t\tif ( $users === false ) {\n+\t\t\t\u002F\u002F Query max 10 instructors only.\n+\t\t\t$prepared_args['number'] = 10;\n+\n+\t\t\t$query        = new WP_User_Query( $prepared_args );\n+\t\t\t$users_result = $query->get_results();\n+\t\t\t$total_users  = $query->get_total();\n+\n+\t\t\tforeach ( $users_result as $user ) {\n+\t\t\t\t$data = $this->prepare_item_for_response( $user, $request );\n+\n+\t\t\t\t$user = $this->prepare_response_for_collection( $data );\n+\t\t\t\tunset( $user['custom_register'] );\n+\t\t\t\tunset( $user['is_super_admin'] );\n+\t\t\t\t$users[] = $user;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set cache with cache get instructors.\n+\t\t\t$lp_cache->set_cache( $key_cache_list_instructors, $users );\n+\t\t\t$lp_cache->set_cache( $key_cache_list_instructors . '\u002Ftotal', $total_users );\n+\t\t}\n+\n+\t\t$response = rest_ensure_response( $users );\n+\n+\t\t\u002F\u002F Store pagination values for headers then unset for count query.\n+\t\t$per_page = (int) $prepared_args['number'];\n+\t\t$page     = ceil( ( ( (int) $prepared_args['offset'] ) \u002F $per_page ) + 1 );\n+\n+\t\t$prepared_args['fields'] = 'ID';\n+\n+\t\tif ( $total_users \u003C 1 ) {\n+\t\t\t\u002F\u002F Out-of-bounds, run the query again without LIMIT for total count.\n+\t\t\tunset( $prepared_args['number'], $prepared_args['offset'] );\n+\t\t\t$count_query = new WP_User_Query( $prepared_args );\n+\t\t\t$total_users = $count_query->get_total();\n+\t\t}\n+\n+\t\t$response->header( 'X-WP-Total', (int) $total_users );\n+\n+\t\t$max_pages = ceil( $total_users \u002F $per_page );\n+\n+\t\t$response->header( 'X-WP-TotalPages', (int) $max_pages );\n+\n+\t\t$base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( sprintf( '%s\u002F%s', $this->namespace, $this->rest_base ) ) );\n+\t\tif ( $page > 1 ) {\n+\t\t\t$prev_page = $page - 1;\n+\n+\t\t\tif ( $prev_page > $max_pages ) {\n+\t\t\t\t$prev_page = $max_pages;\n+\t\t\t}\n+\n+\t\t\t$prev_link = add_query_arg( 'page', $prev_page, $base );\n+\t\t\t$response->link_header( 'prev', $prev_link );\n+\t\t}\n+\t\tif ( $max_pages > $page ) {\n+\t\t\t$next_page = $page + 1;\n+\t\t\t$next_link = add_query_arg( 'page', $next_page, $base );\n+\n+\t\t\t$response->link_header( 'next', $next_link );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Prepares a single user output for response.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param WP_User         $user    User object.\n+\t * @param WP_REST_Request $request Request object.\n+\t * @return WP_REST_Response Response object.\n+\t *\u002F\n+\tpublic function prepare_item_for_response( $user, $request ) {\n+\t\t$context = ! empty( $request['context'] ) ? $request['context'] : 'embed';\n+\t\t$data    = $this->get_users_data( $user, $context, $request );\n+\n+\t\t$data = $this->add_additional_fields_to_object( $data, $request );\n+\t\t$data = $this->filter_response_by_context( $data, $context );\n+\n+\t\t\u002F\u002F Wrap the data in a response object.\n+\t\t$response = rest_ensure_response( $data );\n+\n+\t\t$response->add_links( $this->prepare_links( $user ) );\n+\n+\t\treturn apply_filters( 'lp_rest_prepare_user', $response, $user, $request );\n+\t}\n+\n+\tpublic function get_users_data( $user, $context = 'view' ) {\n+\t\t$request = func_num_args() >= 2 ? func_get_arg( 2 ) : new WP_REST_Request( '', '', array( 'context' => $context ) );\n+\t\t$fields  = $this->get_fields_for_response( $request );\n+\t\t$data    = array();\n+\n+\t\tforeach ( $fields as $field ) {\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'id':\n+\t\t\t\t\t$data['id'] = $user->ID;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'username':\n+\t\t\t\t\tif ( current_user_can( 'list_users' ) || current_user_can( 'edit_user', $user->ID ) ) {\n+\t\t\t\t\t\t$data['username'] = $user->user_login;\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'name':\n+\t\t\t\t\t$data['name'] = $user->display_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'first_name':\n+\t\t\t\t\t$data['first_name'] = $user->first_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'last_name':\n+\t\t\t\t\t$data['last_name'] = $user->last_name;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'email':\n+\t\t\t\t\tif ( current_user_can( 'list_users' ) || current_user_can( 'edit_user', $user->ID ) ) {\n+\t\t\t\t\t\t$data['email'] = $user->user_email;\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'url':\n+\t\t\t\t\t$data['url'] = $user->user_url;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'description':\n+\t\t\t\t\t$data['description'] = $user->description;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'link':\n+\t\t\t\t\t$data['link'] = get_author_posts_url( $user->ID, $user->user_nicename );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'locale':\n+\t\t\t\t\t$data['locale'] = get_user_locale( $user );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'nickname':\n+\t\t\t\t\t$data['nickname'] = $user->nickname;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'slug':\n+\t\t\t\t\t$data['slug'] = $user->user_nicename;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'roles':\n+\t\t\t\t\t$data['roles'] = array_values( $user->roles );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'registered_date':\n+\t\t\t\t\t$data['registered_date'] = gmdate( 'c', strtotime( $user->user_registered ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'capabilities':\n+\t\t\t\t\t$data['capabilities'] = (object) $user->allcaps;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'extra_capabilities':\n+\t\t\t\t\t$data['extra_capabilities'] = (object) $user->caps;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'avatar_url':\n+\t\t\t\t\t$data['avatar_url'] = $this->get_profile_avatar( $user->ID );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'avatar_size':\n+\t\t\t\t\t$data['avatar_size']['width']  = learn_press_get_avatar_thumb_size()['width'];\n+\t\t\t\t\t$data['avatar_size']['height'] = learn_press_get_avatar_thumb_size()['height'];\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'instructor_data':\n+\t\t\t\t\t\u002F\u002F $data['instructor_data'] = $this->get_instructor_data( $user->ID );\n+\t\t\t\t\t$data['instructor_data'] = LP_Profile::instance( $user->ID )->get_statistic_info();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'meta':\n+\t\t\t\t\t$data['meta'] = $this->meta->get_value( $user->ID, $request );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'tabs':\n+\t\t\t\t\t$data['tabs'] = $this->get_lp_data_tabs( $user, $request );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'custom_register':\n+\t\t\t\t\t$data['custom_register'] = $this->custom_register( $user );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'social':\n+\t\t\t\t\t$data['social'] = $this->get_social_data( $user->ID );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function get_social_data( $user_id ) {\n+\t\treturn learn_press_get_user_extra_profile_info( $user_id );\n+\t}\n+\n+\t\u002F**\n+\t * @since 4.1.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_profile_avatar( $user_id ): string {\n+\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\treturn $user->get_profile_avatar_url();\n+\t}\n+\n+\t\u002F**\n+\t * @editor tungnx\n+\t * @deprecated 4.1.6\n+\t *\u002F\n+\t\u002F*\n+\tpublic function get_instructor_data( $user_id ) {\n+\t\t$profile = learn_press_get_profile( $user_id );\n+\n+\t\t$output = array();\n+\n+\t\tif ( is_wp_error( $profile ) ) {\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\t$query  = $profile->query_courses( 'purchased' );\n+\t\t$counts = $query['counts'];\n+\n+\t\t$output = array(\n+\t\t\t'enrolled_courses'  => isset( $counts['all'] ) ? absint( $counts['all'] ) : 0,\n+\t\t\t'completed_courses' => isset( $counts['finished'] ) ? absint( $counts['finished'] ) : 0,\n+\t\t\t'courses'           => absint( count_user_posts( $user_id, LP_COURSE_CPT ) ),\n+\t\t\t'students'          => absint( learn_press_count_instructor_users( $user_id ) ),\n+\t\t);\n+\n+\t\treturn $output;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get data tabs.\n+\t *\n+\t * @param $user\n+\t * @param $request\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_lp_data_tabs( $user, $request ): array {\n+\t\t$output = array();\n+\n+\t\tif ( get_current_user_id() === $user->ID || current_user_can( 'list_users' ) ) {\n+\t\t\tif ( function_exists( 'learn_press_get_user_profile_tabs' ) ) {\n+\t\t\t\t$tabs = learn_press_get_user_profile_tabs();\n+\n+\t\t\t\t$content = array(\n+\t\t\t\t\t'overview' => $this->get_overview_tab_contents( $user ),\n+\t\t\t\t\t'courses'  => $this->get_course_tab_contents( $user, $request ),\n+\t\t\t\t\t'quizzes'  => $this->get_quiz_tab_contents( $user, $request ),\n+\t\t\t\t\t'orders'   => $this->get_order_content_tab( $user, $request ),\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var LP_Profile_Tab $tab\n+\t\t\t\t *\u002F\n+\t\t\t\tforeach ( $tabs->get() as $key => $tab ) {\n+\t\t\t\t\t$output[ $key ] = array(\n+\t\t\t\t\t\t'title'    => $tab->get( 'title' ) ?? '',\n+\t\t\t\t\t\t'slug'     => $tab->get( 'slug' ) ?? '',\n+\t\t\t\t\t\t'priority' => $tab->get( 'priority' ) ?? '',\n+\t\t\t\t\t\t'icon'     => $tab->get( 'icon' ) ?? '',\n+\t\t\t\t\t\t'content'  => $content[ $key ] ?? '',\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( ! empty( $tab->get( 'sections' ) ) ) {\n+\t\t\t\t\t\tforeach ( $tab->get( 'sections' ) as $section_key => $section ) {\n+\t\t\t\t\t\t\t$output[ $key ]['section'][ $section_key ] = array(\n+\t\t\t\t\t\t\t\t'title'    => $section['title'] ?? '',\n+\t\t\t\t\t\t\t\t'slug'     => $section['slug'] ?? '',\n+\t\t\t\t\t\t\t\t'priority' => $section['priority'] ?? '',\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Display register cutom form in LearnPress Setting\n+\t *\n+\t * @param object $user\n+\t * @return array\n+\t *\u002F\n+\tpublic function custom_register( $user ) {\n+\t\t$output = array();\n+\n+\t\tif ( function_exists( 'lp_get_user_custom_register_fields' ) ) {\n+\t\t\t$custom_fields  = LP_Profile::get_register_fields_custom();\n+\t\t\t$custom_profile = lp_get_user_custom_register_fields( $user->ID );\n+\n+\t\t\tif ( $custom_fields ) {\n+\t\t\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t\t\t$value            = $field['id'];\n+\t\t\t\t\t$output[ $value ] = array(\n+\t\t\t\t\t\t'title'    => $field['name'] ?? '',\n+\t\t\t\t\t\t'type'     => $field['type'] ?? '',\n+\t\t\t\t\t\t'required' => $field['required'] ?? 'no',\n+\t\t\t\t\t\t'value'    => $custom_profile[ $value ] ?? '',\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Prepares links for the user request.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param WP_User $user User object.\n+\t * @return array Links for the given user.\n+\t *\u002F\n+\tprotected function prepare_links( $user ) {\n+\t\t$links = array(\n+\t\t\t'self'       => array(\n+\t\t\t\t'href' => rest_url( sprintf( '%s\u002F%s\u002F%d', $this->namespace, $this->rest_base, $user->ID ) ),\n+\t\t\t),\n+\t\t\t'collection' => array(\n+\t\t\t\t'href' => rest_url( sprintf( '%s\u002F%s', $this->namespace, $this->rest_base ) ),\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn $links;\n+\t}\n+\n+\tpublic function check_username( $value, $request, $param ) {\n+\t\t$username = (string) $value;\n+\n+\t\tif ( ! validate_username( $username ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_username',\n+\t\t\t\t__( 'This username is invalid because it uses illegal characters. Please enter a valid username.' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F** This filter is documented in wp-includes\u002Fuser.php *\u002F\n+\t\t$illegal_logins = (array) apply_filters( 'illegal_user_logins', array() );\n+\n+\t\tif ( in_array( strtolower( $username ), array_map( 'strtolower', $illegal_logins ), true ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_username',\n+\t\t\t\t__( 'Sorry, that username is not allowed.' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $username;\n+\t}\n+\n+\t\u002F**\n+\t * Check a user password for the REST API.\n+\t *\n+\t * Performs a couple of checks like edit_user() in wp-admin\u002Fincludes\u002Fuser.php.\n+\t *\n+\t * @since 4.7.0\n+\t *\n+\t * @param string          $value   The password submitted in the request.\n+\t * @param WP_REST_Request $request Full details about the request.\n+\t * @param string          $param   The parameter name.\n+\t * @return string|WP_Error The sanitized password, if valid, otherwise an error.\n+\t *\u002F\n+\tpublic function check_user_password( $value, $request, $param ) {\n+\t\t$password = (string) $value;\n+\n+\t\tif ( empty( $password ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_password',\n+\t\t\t\t__( 'Passwords cannot be empty.' ),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( false !== strpos( $password, '\\\\' ) ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'rest_user_invalid_password',\n+\t\t\t\tsprintf(\n+\t\t\t\t\t\u002F* translators: %s: The '\\' character. *\u002F\n+\t\t\t\t\t__( 'Passwords cannot contain the \"%s\" character.' ),\n+\t\t\t\t\t'\\\\'\n+\t\t\t\t),\n+\t\t\t\tarray( 'status' => 400 )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $password;\n+\t}\n+\n+\tpublic function get_item_schema() {\n+\t\t$schema = array(\n+\t\t\t'$schema'    => 'http:\u002F\u002Fjson-schema.org\u002Fdraft-04\u002Fschema#',\n+\t\t\t'title'      => 'user',\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'id'                 => array(\n+\t\t\t\t\t'description' => __( 'Unique identifier for the user.' ),\n+\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'username'           => array(\n+\t\t\t\t\t'description' => __( 'Login name for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => array( $this, 'check_username' ),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'name'               => array(\n+\t\t\t\t\t'description' => __( 'Display name for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'first_name'         => array(\n+\t\t\t\t\t'description' => __( 'First name for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'last_name'          => array(\n+\t\t\t\t\t'description' => __( 'Last name for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'email'              => array(\n+\t\t\t\t\t'description' => __( 'The email address for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'email',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'required'    => true,\n+\t\t\t\t),\n+\t\t\t\t'url'                => array(\n+\t\t\t\t\t'description' => __( 'URL of the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'description'        => array(\n+\t\t\t\t\t'description' => __( 'Description of the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'link'               => array(\n+\t\t\t\t\t'description' => __( 'Author URL of the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'uri',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'locale'             => array(\n+\t\t\t\t\t'description' => __( 'Locale for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'enum'        => array_merge( array( '', 'en_US' ), get_available_languages() ),\n+\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'nickname'           => array(\n+\t\t\t\t\t'description' => __( 'The nickname for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'slug'               => array(\n+\t\t\t\t\t'description' => __( 'An alphanumeric identifier for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'embed', 'view', 'edit' ),\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => array( $this, 'sanitize_slug' ),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'registered_date'    => array(\n+\t\t\t\t\t'description' => __( 'Registration date for the user.' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'format'      => 'date-time',\n+\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'roles'              => array(\n+\t\t\t\t\t'description' => __( 'Roles assigned to the user.' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'items'       => array(\n+\t\t\t\t\t\t'type' => 'string',\n+\t\t\t\t\t),\n+\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'password'           => array(\n+\t\t\t\t\t'description' => __( 'Password for the user (never included).' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array(), \u002F\u002F Password is never displayed.\n+\t\t\t\t\t'required'    => true,\n+\t\t\t\t\t'arg_options' => array(\n+\t\t\t\t\t\t'sanitize_callback' => array( $this, 'check_user_password' ),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'capabilities'       => array(\n+\t\t\t\t\t'description' => __( 'All capabilities assigned to the user.' ),\n+\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'extra_capabilities' => array(\n+\t\t\t\t\t'description' => __( 'Any extra capabilities assigned to the user.' ),\n+\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t'context'     => array( 'edit' ),\n+\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t),\n+\t\t\t\t'tabs'               => array(\n+\t\t\t\t\t'description' => __( 'Get all items in user like course, lesson, quiz...' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'avatar_url'         => array(\n+\t\t\t\t\t'description' => __( 'URL avatar' ),\n+\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t'context'     => array( 'view', 'edit' ),\n+\t\t\t\t),\n+\t\t\t\t'avatar_size'        => array(\n+\t\t\t\t\t'description' => __( 'URL avatar size' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'instructor_data'    => array(\n+\t\t\t\t\t'description' => __( 'Instructor data' ),\n+\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'custom_register'    => array(\n+\t\t\t\t\t'description' => __( 'Get custom register fields.' ),\n+\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t\t'social'             => array(\n+\t\t\t\t\t'description' => __( 'Get social fields.' ),\n+\t\t\t\t\t'type'        => 'object',\n+\t\t\t\t\t'context'     => array( 'view' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\t$schema['properties']['meta'] = $this->meta->get_field_schema();\n+\n+\t\treturn $this->add_additional_fields_schema( $schema );\n+\t}\n+\n+\tpublic function get_collection_params() {\n+\t\t$query_params = parent::get_collection_params();\n+\n+\t\t$query_params['context']['default'] = 'view';\n+\n+\t\t$query_params['exclude'] = array(\n+\t\t\t'description' => __( 'Ensure the result set excludes specific IDs.' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'     => array(),\n+\t\t);\n+\n+\t\t$query_params['include'] = array(\n+\t\t\t'description' => __( 'Limit the result set to specific IDs.' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'integer',\n+\t\t\t),\n+\t\t\t'default'     => array(),\n+\t\t);\n+\n+\t\t$query_params['offset'] = array(\n+\t\t\t'description' => __( 'Offset the result set by a specific number of items.' ),\n+\t\t\t'type'        => 'integer',\n+\t\t);\n+\n+\t\t$query_params['order'] = array(\n+\t\t\t'default'     => 'asc',\n+\t\t\t'description' => __( 'Sorting attributes in ascending or descending order.' ),\n+\t\t\t'enum'        => array( 'asc', 'desc' ),\n+\t\t\t'type'        => 'string',\n+\t\t);\n+\n+\t\t$query_params['orderby'] = array(\n+\t\t\t'default'     => 'name',\n+\t\t\t'description' => __( 'Sort collections by the object attribute.' ),\n+\t\t\t'enum'        => array(\n+\t\t\t\t'id',\n+\t\t\t\t'include',\n+\t\t\t\t'name',\n+\t\t\t\t'registered_date',\n+\t\t\t\t'slug',\n+\t\t\t\t'include_slugs',\n+\t\t\t\t'email',\n+\t\t\t\t'url',\n+\t\t\t),\n+\t\t\t'type'        => 'string',\n+\t\t);\n+\n+\t\t$query_params['slug'] = array(\n+\t\t\t'description' => __( 'Limit result set to users with one or more specific slugs.' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'string',\n+\t\t\t),\n+\t\t);\n+\n+\t\t$query_params['roles'] = array(\n+\t\t\t'description' => __( 'Limit result set to users matching at least one specific role provided. Accepts csv list or single role.' ),\n+\t\t\t'type'        => 'array',\n+\t\t\t'items'       => array(\n+\t\t\t\t'type' => 'string',\n+\t\t\t),\n+\t\t);\n+\n+\t\t$query_params['who'] = array(\n+\t\t\t'description' => __( 'Limit result set to users who are considered authors.' ),\n+\t\t\t'type'        => 'string',\n+\t\t\t'enum'        => array(\n+\t\t\t\t'authors',\n+\t\t\t),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Filters REST API collection parameters for the users controller.\n+\t\t *\n+\t\t * This filter registers the collection parameter, but does not map the\n+\t\t * collection parameter to an internal WP_User_Query parameter.  Use the\n+\t\t * `rest_user_query` filter to set WP_User_Query arguments.\n+\t\t *\n+\t\t * @since 4.7.0\n+\t\t *\n+\t\t * @param array $query_params JSON Schema-formatted collection parameters.\n+\t\t *\u002F\n+\t\treturn apply_filters( 'rest_user_collection_params', $query_params );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flesson\u002Fclass-lp-lesson.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flesson\u002Fclass-lp-lesson.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flesson\u002Fclass-lp-lesson.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flesson\u002Fclass-lp-lesson.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,246 +1,246 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Lesson.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! function_exists( 'LP_Lesson' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Lesson.\r\n-\t *\u002F\r\n-\tclass LP_Lesson extends LP_Course_Item {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var mixed|string|void\r\n-\t\t *\u002F\r\n-\t\tpublic $content = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $lesson_type = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_item_type = LP_LESSON_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected static $_loaded = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Lesson constructor.\r\n-\t\t *\r\n-\t\t * @param        $lesson\r\n-\t\t * @param string $args\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $lesson, $args = '' ) {\r\n-\t\t\tparent::__construct( $lesson, $args );\r\n-\t\t\t$this->_curd = new LP_Lesson_CURD();\r\n-\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\r\n-\t\t\tself::$_loaded ++;\r\n-\t\t\tif ( self::$_loaded == 1 ) {\r\n-\t\t\t\tadd_filter( 'debug_data', array( __CLASS__, 'log' ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Read course data, curriculum: sections, items, etc...\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\t$this->_curd->load( $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Debug log.\r\n-\t\t *\r\n-\t\t * @param $data\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function log( $data ) {\r\n-\t\t\t$data[] = __CLASS__ . '( ' . self::$_loaded . ' )';\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $tag\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function is( $tag ) {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\r\n-\t\t\t$args = func_get_args();\r\n-\t\t\tunset( $args[0] );\r\n-\t\t\t$method   = 'is_' . preg_replace( '!-!', '_', $tag );\r\n-\t\t\t$callback = array( $this, $method );\r\n-\t\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get LP Lesson.\r\n-\t\t *\r\n-\t\t * @param mixed $the_lesson\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return LP_Lesson|bool\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_lesson( $the_lesson = false, $args = array() ) {\r\n-\r\n-\t\t\tif ( is_numeric( $the_lesson ) && isset( LP_Global::$lessons[ $the_lesson ] ) ) {\r\n-\t\t\t\treturn LP_Global::$lessons[ $the_lesson ];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$the_lesson = self::get_lesson_object( $the_lesson );\r\n-\r\n-\t\t\tif ( ! $the_lesson ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( LP_Global::$lessons[ $the_lesson->ID ] ) ) {\r\n-\t\t\t\treturn LP_Global::$lessons[ $the_lesson->ID ];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $args['force'] ) ) {\r\n-\t\t\t\t$force = ! ! $args['force'];\r\n-\t\t\t\tunset( $args['force'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$force = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$key_args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'   => $the_lesson->ID,\r\n-\t\t\t\t\t'type' => $the_lesson->post_type,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$key = LP_Helper::array_to_md5( $key_args );\r\n-\r\n-\t\t\tif ( $force ) {\r\n-\t\t\t\tLP_Global::$lessons[ $key ]            = false;\r\n-\t\t\t\tLP_Global::$lessons[ $the_lesson->ID ] = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( LP_Global::$lessons[ $key ] ) ) {\r\n-\t\t\t\t$class_name = self::get_lesson_class( $the_lesson, $args );\r\n-\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\r\n-\t\t\t\t\t$lesson = new $class_name( $the_lesson->ID, $args );\r\n-\t\t\t\t} elseif ( $class_name instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t$lesson = $class_name;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$lesson = new self( $the_lesson->ID, $args );\r\n-\t\t\t\t}\r\n-\t\t\t\tLP_Global::$lessons[ $key ]            = $lesson;\r\n-\t\t\t\tLP_Global::$lessons[ $the_lesson->ID ] = $lesson;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn LP_Global::$lessons[ $key ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default meta.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_meta() {\r\n-\t\t\t$meta = array(\r\n-\t\t\t\t'duration' => '0 minute',\r\n-\t\t\t\t'preview'  => 'no',\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Flesson\u002Fdefault-meta', $meta );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get duration of lesson\r\n-\t\t *\r\n-\t\t * @return LP_Duration\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration() {\r\n-\t\t\t$duration = parent::get_duration();\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Flesson-duration', $duration, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param  string $lesson_type\r\n-\t\t *\r\n-\t\t * @return string|false\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_class_name_from_lesson_type( $lesson_type ) {\r\n-\t\t\treturn LP_LESSON_CPT === $lesson_type ? __CLASS__ : 'LP_Lesson_' . implode( '_', array_map( 'ucfirst', explode( '-', $lesson_type ) ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the lesson class name\r\n-\t\t *\r\n-\t\t * @param  WP_Post $the_lesson\r\n-\t\t * @param  array   $args (default: array())\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_lesson_class( $the_lesson, $args = array() ) {\r\n-\t\t\t$lesson_id = absint( $the_lesson->ID );\r\n-\t\t\t$type      = $the_lesson->post_type;\r\n-\r\n-\t\t\t$class_name = self::get_class_name_from_lesson_type( $type );\r\n-\r\n-\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\r\n-\t\t\treturn apply_filters( 'learn-press\u002Flesson\u002Fobject-class', $class_name, $type, $lesson_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the lesson object\r\n-\t\t *\r\n-\t\t * @param  mixed $the_lesson\r\n-\t\t *\r\n-\t\t * @uses   WP_Post\r\n-\t\t * @return WP_Post|bool false on failure\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_lesson_object( $the_lesson ) {\r\n-\t\t\tif ( false === $the_lesson ) {\r\n-\t\t\t\t$the_lesson = get_post_type() === LP_LESSON_CPT ? $GLOBALS['post'] : false;\r\n-\t\t\t} elseif ( is_numeric( $the_lesson ) ) {\r\n-\t\t\t\t$the_lesson = get_post( $the_lesson );\r\n-\t\t\t} elseif ( $the_lesson instanceof LP_Course_Item ) {\r\n-\t\t\t\t$the_lesson = get_post( $the_lesson->get_id() );\r\n-\t\t\t} elseif ( ! ( $the_lesson instanceof WP_Post ) ) {\r\n-\t\t\t\t$the_lesson = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Flesson\u002Fpost-object', $the_lesson );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Lesson.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! function_exists( 'LP_Lesson' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Lesson.\n+\t *\u002F\n+\tclass LP_Lesson extends LP_Course_Item {\n+\n+\t\t\u002F**\n+\t\t * @var mixed|string|void\n+\t\t *\u002F\n+\t\tpublic $content = '';\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $lesson_type = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_item_type = LP_LESSON_CPT;\n+\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected static $_loaded = 0;\n+\n+\t\t\u002F**\n+\t\t * LP_Lesson constructor.\n+\t\t *\n+\t\t * @param        $lesson\n+\t\t * @param string $args\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $lesson, $args = '' ) {\n+\t\t\tparent::__construct( $lesson, $args );\n+\t\t\t$this->_curd = new LP_Lesson_CURD();\n+\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\n+\t\t\tself::$_loaded ++;\n+\t\t\tif ( self::$_loaded == 1 ) {\n+\t\t\t\tadd_filter( 'debug_data', array( __CLASS__, 'log' ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Read course data, curriculum: sections, items, etc...\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\t$this->_curd->load( $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Debug log.\n+\t\t *\n+\t\t * @param $data\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function log( $data ) {\n+\t\t\t$data[] = __CLASS__ . '( ' . self::$_loaded . ' )';\n+\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $tag\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function is( $tag ) {\n+\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\n+\t\t\t$args = func_get_args();\n+\t\t\tunset( $args[0] );\n+\t\t\t$method   = 'is_' . preg_replace( '!-!', '_', $tag );\n+\t\t\t$callback = array( $this, $method );\n+\t\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $tag ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get LP Lesson.\n+\t\t *\n+\t\t * @param mixed $the_lesson\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return LP_Lesson|bool\n+\t\t *\u002F\n+\t\tpublic static function get_lesson( $the_lesson = false, $args = array() ) {\n+\n+\t\t\tif ( is_numeric( $the_lesson ) && isset( LP_Global::$lessons[ $the_lesson ] ) ) {\n+\t\t\t\treturn LP_Global::$lessons[ $the_lesson ];\n+\t\t\t}\n+\n+\t\t\t$the_lesson = self::get_lesson_object( $the_lesson );\n+\n+\t\t\tif ( ! $the_lesson ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( isset( LP_Global::$lessons[ $the_lesson->ID ] ) ) {\n+\t\t\t\treturn LP_Global::$lessons[ $the_lesson->ID ];\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $args['force'] ) ) {\n+\t\t\t\t$force = ! ! $args['force'];\n+\t\t\t\tunset( $args['force'] );\n+\t\t\t} else {\n+\t\t\t\t$force = false;\n+\t\t\t}\n+\n+\t\t\t$key_args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'   => $the_lesson->ID,\n+\t\t\t\t\t'type' => $the_lesson->post_type,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$key = LP_Helper::array_to_md5( $key_args );\n+\n+\t\t\tif ( $force ) {\n+\t\t\t\tLP_Global::$lessons[ $key ]            = false;\n+\t\t\t\tLP_Global::$lessons[ $the_lesson->ID ] = false;\n+\t\t\t}\n+\n+\t\t\tif ( empty( LP_Global::$lessons[ $key ] ) ) {\n+\t\t\t\t$class_name = self::get_lesson_class( $the_lesson, $args );\n+\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\n+\t\t\t\t\t$lesson = new $class_name( $the_lesson->ID, $args );\n+\t\t\t\t} elseif ( $class_name instanceof LP_Course_Item ) {\n+\t\t\t\t\t$lesson = $class_name;\n+\t\t\t\t} else {\n+\t\t\t\t\t$lesson = new self( $the_lesson->ID, $args );\n+\t\t\t\t}\n+\t\t\t\tLP_Global::$lessons[ $key ]            = $lesson;\n+\t\t\t\tLP_Global::$lessons[ $the_lesson->ID ] = $lesson;\n+\t\t\t}\n+\n+\t\t\treturn LP_Global::$lessons[ $key ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default meta.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function get_default_meta() {\n+\t\t\t$meta = array(\n+\t\t\t\t'duration' => '0 minute',\n+\t\t\t\t'preview'  => 'no',\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Flesson\u002Fdefault-meta', $meta );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get duration of lesson\n+\t\t *\n+\t\t * @return LP_Duration\n+\t\t *\u002F\n+\t\tpublic function get_duration() {\n+\t\t\t$duration = parent::get_duration();\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Flesson-duration', $duration, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param  string $lesson_type\n+\t\t *\n+\t\t * @return string|false\n+\t\t *\u002F\n+\t\tprivate static function get_class_name_from_lesson_type( $lesson_type ) {\n+\t\t\treturn LP_LESSON_CPT === $lesson_type ? __CLASS__ : 'LP_Lesson_' . implode( '_', array_map( 'ucfirst', explode( '-', $lesson_type ) ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the lesson class name\n+\t\t *\n+\t\t * @param  WP_Post $the_lesson\n+\t\t * @param  array   $args (default: array())\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate static function get_lesson_class( $the_lesson, $args = array() ) {\n+\t\t\t$lesson_id = absint( $the_lesson->ID );\n+\t\t\t$type      = $the_lesson->post_type;\n+\n+\t\t\t$class_name = self::get_class_name_from_lesson_type( $type );\n+\n+\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\n+\t\t\treturn apply_filters( 'learn-press\u002Flesson\u002Fobject-class', $class_name, $type, $lesson_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the lesson object\n+\t\t *\n+\t\t * @param  mixed $the_lesson\n+\t\t *\n+\t\t * @uses   WP_Post\n+\t\t * @return WP_Post|bool false on failure\n+\t\t *\u002F\n+\t\tprivate static function get_lesson_object( $the_lesson ) {\n+\t\t\tif ( false === $the_lesson ) {\n+\t\t\t\t$the_lesson = get_post_type() === LP_LESSON_CPT ? $GLOBALS['post'] : false;\n+\t\t\t} elseif ( is_numeric( $the_lesson ) ) {\n+\t\t\t\t$the_lesson = get_post( $the_lesson );\n+\t\t\t} elseif ( $the_lesson instanceof LP_Course_Item ) {\n+\t\t\t\t$the_lesson = get_post( $the_lesson->get_id() );\n+\t\t\t} elseif ( ! ( $the_lesson instanceof WP_Post ) ) {\n+\t\t\t\t$the_lesson = false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Flesson\u002Fpost-object', $the_lesson );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flesson\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flesson\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flesson\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flesson\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fclass-emogrifier.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fclass-emogrifier.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fclass-emogrifier.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fclass-emogrifier.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,792 +1,792 @@\n-\u003C?php\r\n-\u002F**\r\n- * This class provides functions for converting CSS styles into inline style attributes in your HTML code.\r\n- *\r\n- * For more information, please see the README.md file.\r\n- *\r\n- * @author Cameron Brooks\r\n- * @author Jaime Prado\r\n- * @author Roman O�ana \u003Cozana@omdesign.cz>\r\n- * @deprecated v4.2.9.1\r\n- *\u002F\r\n-if(!class_exists('Emogrifier')) {\r\n-\tclass Emogrifier {\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tconst ENCODING = 'UTF-8';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst CACHE_KEY_CSS = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst CACHE_KEY_SELECTOR = 1;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst CACHE_KEY_XPATH = 2;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst CACHE_KEY_CSS_DECLARATION_BLOCK = 3;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * for calculating nth-of-type and nth-child selectors\r\n-\t\t *\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst INDEX = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * for calculating nth-of-type and nth-child selectors\r\n-\t\t *\r\n-\t\t * @var integer\r\n-\t\t *\u002F\r\n-\t\tconst MULTIPLIER = 1;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tconst ID_ATTRIBUTE_MATCHER = '\u002F(\\\\w+)?\\\\#([\\\\w\\\\-]+)\u002F';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tconst CLASS_ATTRIBUTE_MATCHER = '\u002F(\\\\w+|[\\\\*\\\\]])?((\\\\.[\\\\w\\\\-]+)+)\u002F';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprivate $html = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprivate $css = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\u003Cstring>\r\n-\t\t *\u002F\r\n-\t\tprivate $unprocessableHtmlTags = array( 'wbr' );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\u003Carray>\r\n-\t\t *\u002F\r\n-\t\tprivate $caches = array(\r\n-\t\t\tself::CACHE_KEY_CSS                   => array(),\r\n-\t\t\tself::CACHE_KEY_SELECTOR              => array(),\r\n-\t\t\tself::CACHE_KEY_XPATH                 => array(),\r\n-\t\t\tself::CACHE_KEY_CSS_DECLARATION_BLOCK => array(),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * the visited nodes with the XPath paths as array keys\r\n-\t\t *\r\n-\t\t * @var array\u003C\\DOMNode>\r\n-\t\t *\u002F\r\n-\t\tprivate $visitedNodes = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * the styles to apply to the nodes with the XPath paths as array keys for the outer array and the attribute names\u002Fvalues\r\n-\t\t * as key\u002Fvalue pairs for the inner array\r\n-\t\t *\r\n-\t\t * @var array\u003Carray>\u003Cstring>\r\n-\t\t *\u002F\r\n-\t\tprivate $styleAttributesForNodes = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * This attribute applies to the case where you want to preserve your original text encoding.\r\n-\t\t *\r\n-\t\t * By default, emogrifier translates your text into HTML entities for two reasons:\r\n-\t\t *\r\n-\t\t * 1. Because of client incompatibilities, it is better practice to send out HTML entities rather than unicode over email.\r\n-\t\t *\r\n-\t\t * 2. It translates any illegal XML characters that DOMDocument cannot work with.\r\n-\t\t *\r\n-\t\t * If you would like to preserve your original encoding, set this attribute to TRUE.\r\n-\t\t *\r\n-\t\t * @var boolean\r\n-\t\t *\u002F\r\n-\t\tpublic $preserveEncoding = false;\r\n-\r\n-\t\tpublic static $_media = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The constructor.\r\n-\t\t *\r\n-\t\t * @param string $html the HTML to emogrify, must be UTF-8-encoded\r\n-\t\t * @param string $css  the CSS to merge, must be UTF-8-encoded\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $html = '', $css = '' ) {\r\n-\t\t\t$this->setHtml( $html );\r\n-\t\t\t$this->setCss( $css );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The destructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __destruct() {\r\n-\t\t\t$this->purgeVisitedNodes();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sets the HTML to emogrify.\r\n-\t\t *\r\n-\t\t * @param string $html the HTML to emogrify, must be UTF-8-encoded\r\n-\t\t *\u002F\r\n-\t\tpublic function setHtml( $html = '' ) {\r\n-\t\t\t$this->html = $html;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sets the CSS to merge with the HTML.\r\n-\t\t *\r\n-\t\t * @param string $css the CSS to merge, must be UTF-8-encoded\r\n-\t\t *\u002F\r\n-\t\tpublic function setCss( $css = '' ) {\r\n-\t\t\t$this->css = $css;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Clears all caches.\r\n-\t\t *\u002F\r\n-\t\tprivate function clearAllCaches() {\r\n-\t\t\t$this->clearCache( self::CACHE_KEY_CSS );\r\n-\t\t\t$this->clearCache( self::CACHE_KEY_SELECTOR );\r\n-\t\t\t$this->clearCache( self::CACHE_KEY_XPATH );\r\n-\t\t\t$this->clearCache( self::CACHE_KEY_CSS_DECLARATION_BLOCK );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Clears a single cache by key.\r\n-\t\t *\r\n-\t\t * @param integer $key the cache key, must be CACHE_KEY_CSS, CACHE_KEY_SELECTOR, CACHE_KEY_XPATH or CACHE_KEY_CSS_DECLARATION_BLOCK\r\n-\t\t *\r\n-\t\t * @throws InvalidArgumentException\r\n-\t\t *\u002F\r\n-\t\tprivate function clearCache( $key ) {\r\n-\t\t\t$allowedCacheKeys = array( self::CACHE_KEY_CSS, self::CACHE_KEY_SELECTOR, self::CACHE_KEY_XPATH, self::CACHE_KEY_CSS_DECLARATION_BLOCK );\r\n-\t\t\tif ( !in_array( $key, $allowedCacheKeys, true ) ) {\r\n-\t\t\t\tthrow new InvalidArgumentException( 'Invalid cache key: ' . $key, 1391822035 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->caches[$key] = array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Purges the visited nodes.\r\n-\t\t *\u002F\r\n-\t\tprivate function purgeVisitedNodes() {\r\n-\t\t\t$this->visitedNodes            = array();\r\n-\t\t\t$this->styleAttributesForNodes = array();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Marks a tag for removal.\r\n-\t\t *\r\n-\t\t * There are some HTML tags that DOMDocument cannot process, and it will throw an error if it encounters them.\r\n-\t\t * In particular, DOMDocument will complain if you try to use HTML5 tags in an XHTML document.\r\n-\t\t *\r\n-\t\t * Note: The tags will not be removed if they have any content.\r\n-\t\t *\r\n-\t\t * @param string $tagName the tag name, e.g., \"p\"\r\n-\t\t *\u002F\r\n-\t\tpublic function addUnprocessableHtmlTag( $tagName ) {\r\n-\t\t\t$this->unprocessableHtmlTags[] = $tagName;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Drops a tag from the removal list.\r\n-\t\t *\r\n-\t\t * @param string $tagName the tag name, e.g., \"p\"\r\n-\t\t *\u002F\r\n-\t\tpublic function removeUnprocessableHtmlTag( $tagName ) {\r\n-\t\t\t$key = array_search( $tagName, $this->unprocessableHtmlTags, true );\r\n-\t\t\tif ( $key !== false ) {\r\n-\t\t\t\tunset( $this->unprocessableHtmlTags[$key] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Applies the CSS you submit to the HTML you submit.\r\n-\t\t *\r\n-\t\t * This method places the CSS inline.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\r\n-\t\t * @throws BadMethodCallException\r\n-\t\t *\u002F\r\n-\t\tpublic function emogrify() {\r\n-\t\t\tif ( $this->html === '' ) {\r\n-\t\t\t\tthrow new BadMethodCallException( 'Please set some HTML first before calling emogrify.', 1390393096 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$xmlDocument = $this->createXmlDocument();\r\n-\t\t\t$xpath       = new DOMXPath( $xmlDocument );\r\n-\t\t\t$this->clearAllCaches();\r\n-\r\n-\t\t\t\u002F\u002F before be begin processing the CSS file, parse the document and normalize all existing CSS attributes (changes 'DISPLAY: none' to 'display: none');\r\n-\t\t\t\u002F\u002F we wouldn't have to do this if DOMXPath supported XPath 2.0.\r\n-\t\t\t\u002F\u002F also store a reference of nodes with existing inline styles so we don't overwrite them\r\n-\t\t\t$this->purgeVisitedNodes();\r\n-\r\n-\t\t\t$nodesWithStyleAttributes = $xpath->query( '\u002F\u002F*[@style]' );\r\n-\t\t\tif ( $nodesWithStyleAttributes !== false ) {\r\n-\t\t\t\t\u002F** @var $nodeWithStyleAttribute DOMNode *\u002F\r\n-\t\t\t\tforeach ( $nodesWithStyleAttributes as $node ) {\r\n-\t\t\t\t\t$normalizedOriginalStyle = preg_replace_callback( '\u002F[A-z\\\\-]+(?=\\\\:)\u002FS', array( $this, 'strtolower' ), $node->getAttribute( 'style' ) );\r\n-\r\n-\t\t\t\t\t\u002F\u002F in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles\r\n-\t\t\t\t\t$nodePath = $node->getNodePath();\r\n-\t\t\t\t\tif ( !isset( $this->styleAttributesForNodes[$nodePath] ) ) {\r\n-\t\t\t\t\t\t$this->styleAttributesForNodes[$nodePath] = $this->parseCssDeclarationBlock( $normalizedOriginalStyle );\r\n-\t\t\t\t\t\t$this->visitedNodes[$nodePath]            = $node;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$node->setAttribute( 'style', $normalizedOriginalStyle );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F grab any existing style blocks from the html and append them to the existing CSS\r\n-\t\t\t\u002F\u002F (these blocks should be appended so as to have precedence over conflicting styles in the existing CSS)\r\n-\t\t\t$allCss = $this->css;\r\n-\r\n-\t\t\t$allCss .= $this->getCssFromAllStyleNodes( $xpath );\r\n-\r\n-\t\t\t$cssParts     = $this->splitCssAndMediaQuery( $allCss );\r\n-\t\t\tself::$_media = ''; \u002F\u002F reset\r\n-\r\n-\t\t\t$cssKey = md5( $cssParts['css'] );\r\n-\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_CSS][$cssKey] ) ) {\r\n-\t\t\t\t\u002F\u002F process the CSS file for selectors and definitions\r\n-\t\t\t\tpreg_match_all( '\u002F(?:^|[\\\\s^{}]*)([^{]+){([^}]*)}\u002Fmis', $cssParts['css'], $matches, PREG_SET_ORDER );\r\n-\r\n-\t\t\t\t$allSelectors = array();\r\n-\t\t\t\tforeach ( $matches as $key => $selectorString ) {\r\n-\t\t\t\t\t\u002F\u002F if there is a blank definition, skip\r\n-\t\t\t\t\tif ( !strlen( trim( $selectorString[2] ) ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F else split by commas and duplicate attributes so we can sort by selector precedence\r\n-\t\t\t\t\t$selectors = explode( ',', $selectorString[1] );\r\n-\t\t\t\t\tforeach ( $selectors as $selector ) {\r\n-\t\t\t\t\t\t\u002F\u002F don't process pseudo-elements and behavioral (dynamic) pseudo-classes; ONLY allow structural pseudo-classes\r\n-\t\t\t\t\t\tif ( strpos( $selector, ':' ) !== false && !preg_match( '\u002F:\\\\S+\\\\-(child|type)\\\\(\u002Fi', $selector ) ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$allSelectors[] = array( 'selector'   => trim( $selector ),\r\n-\t\t\t\t\t\t\t\t\t\t\t\t 'attributes' => trim( $selectorString[2] ),\r\n-\t\t\t\t\t\t\t\u002F\u002F keep track of where it appears in the file, since order is important\r\n-\t\t\t\t\t\t\t\t\t\t\t\t 'line'       => $key,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F now sort the selectors by precedence\r\n-\t\t\t\tusort( $allSelectors, array( $this, 'sortBySelectorPrecedence' ) );\r\n-\r\n-\t\t\t\t$this->caches[self::CACHE_KEY_CSS][$cssKey] = $allSelectors;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $this->caches[self::CACHE_KEY_CSS][$cssKey] as $value ) {\r\n-\t\t\t\t\u002F\u002F query the body for the xpath selector\r\n-\t\t\t\t$nodesMatchingCssSelectors = $xpath->query( $this->translateCssToXpath( $value['selector'] ) );\r\n-\r\n-\t\t\t\t\u002F** @var $node \\DOMNode *\u002F\r\n-\t\t\t\tforeach ( $nodesMatchingCssSelectors as $node ) {\r\n-\t\t\t\t\t\u002F\u002F if it has a style attribute, get it, process it, and append (overwrite) new stuff\r\n-\t\t\t\t\tif ( $node->hasAttribute( 'style' ) ) {\r\n-\t\t\t\t\t\t\u002F\u002F break it up into an associative array\r\n-\t\t\t\t\t\t$oldStyleDeclarations = $this->parseCssDeclarationBlock( $node->getAttribute( 'style' ) );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$oldStyleDeclarations = array();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$newStyleDeclarations = $this->parseCssDeclarationBlock( $value['attributes'] );\r\n-\t\t\t\t\t$node->setAttribute( 'style', $this->generateStyleStringFromDeclarationsArrays( $oldStyleDeclarations, $newStyleDeclarations ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F now iterate through the nodes that contained inline styles in the original HTML\r\n-\t\t\tforeach ( $this->styleAttributesForNodes as $nodePath => $styleAttributesForNode ) {\r\n-\t\t\t\t$node                   = $this->visitedNodes[$nodePath];\r\n-\t\t\t\t$currentStyleAttributes = $this->parseCssDeclarationBlock( $node->getAttribute( 'style' ) );\r\n-\t\t\t\t$node->setAttribute( 'style', $this->generateStyleStringFromDeclarationsArrays( $currentStyleAttributes, $styleAttributesForNode ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F This removes styles from your email that contain display:none.\r\n-\t\t\t\u002F\u002F We need to look for display:none, but we need to do a case-insensitive search. Since DOMDocument only supports XPath 1.0,\r\n-\t\t\t\u002F\u002F lower-case() isn't available to us. We've thus far only set attributes to lowercase, not attribute values. Consequently, we need\r\n-\t\t\t\u002F\u002F to translate() the letters that would be in 'NONE' (\"NOE\") to lowercase.\r\n-\t\t\t$nodesWithStyleDisplayNone = $xpath->query( '\u002F\u002F*[contains(translate(translate(@style,\" \",\"\"),\"NOE\",\"noe\"),\"display:none\")]' );\r\n-\t\t\t\u002F\u002F The checks on parentNode and is_callable below ensure that if we've deleted the parent node,\r\n-\t\t\t\u002F\u002F we don't try to call removeChild on a nonexistent child node\r\n-\t\t\tif ( $nodesWithStyleDisplayNone->length > 0 ) {\r\n-\t\t\t\t\u002F** @var $node \\DOMNode *\u002F\r\n-\t\t\t\tforeach ( $nodesWithStyleDisplayNone as $node ) {\r\n-\t\t\t\t\tif ( $node->parentNode && is_callable( array( $node->parentNode, 'removeChild' ) ) ) {\r\n-\t\t\t\t\t\t$node->parentNode->removeChild( $node );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->copyCssWithMediaToStyleNode( $cssParts, $xmlDocument );\r\n-\r\n-\t\t\tif ( $this->preserveEncoding ) {\r\n-\t\t\t\tif ( function_exists( 'mb_convert_encoding' ) ) {\r\n-\t\t\t\t\treturn mb_convert_encoding( $xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn htmlspecialchars_decode( utf8_encode( html_entity_decode( $xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING ) ) );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $xmlDocument->saveHTML();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function strtolower( array $m ) {\r\n-\t\t\treturn strtolower( $m[0] );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * This method merges old or existing name\u002Fvalue array with new name\u002Fvalue array\r\n-\t\t * and then generates a string of the combined style suitable for placing inline.\r\n-\t\t * This becomes the single point for CSS string generation allowing for consistent\r\n-\t\t * CSS output no matter where the CSS originally came from.\r\n-\t\t *\r\n-\t\t * @param array $oldStyles\r\n-\t\t * @param array $newStyles\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function generateStyleStringFromDeclarationsArrays( array $oldStyles, array $newStyles ) {\r\n-\t\t\t$combinedStyles = array_merge( $oldStyles, $newStyles );\r\n-\t\t\t$style          = '';\r\n-\t\t\tforeach ( $combinedStyles as $attributeName => $attributeValue ) {\r\n-\t\t\t\t$style .= ( strtolower( trim( $attributeName ) ) . ': ' . trim( $attributeValue ) . '; ' );\r\n-\t\t\t}\r\n-\t\t\treturn trim( $style );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Copies the media part from CSS array parts to $xmlDocument.\r\n-\t\t *\r\n-\t\t * @param array       $cssParts\r\n-\t\t * @param DOMDocument $xmlDocument\r\n-\t\t *\u002F\r\n-\t\tpublic function copyCssWithMediaToStyleNode( array $cssParts, DOMDocument $xmlDocument ) {\r\n-\t\t\tif ( isset( $cssParts['media'] ) && $cssParts['media'] !== '' ) {\r\n-\t\t\t\t$this->addStyleElementToDocument( $xmlDocument, $cssParts['media'] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Returns CSS content.\r\n-\t\t *\r\n-\t\t * @param DOMXPath $xpath\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function getCssFromAllStyleNodes( DOMXPath $xpath ) {\r\n-\t\t\t$styleNodes = $xpath->query( '\u002F\u002Fstyle' );\r\n-\r\n-\t\t\tif ( $styleNodes === false ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$css = '';\r\n-\t\t\t\u002F** @var $styleNode DOMNode *\u002F\r\n-\t\t\tforeach ( $styleNodes as $styleNode ) {\r\n-\t\t\t\t$css .= \"\\n\\n\" . $styleNode->nodeValue;\r\n-\t\t\t\t$styleNode->parentNode->removeChild( $styleNode );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $css;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Adds a style element with $css to $document.\r\n-\t\t *\r\n-\t\t * @param DOMDocument $document\r\n-\t\t * @param string      $css\r\n-\t\t *\u002F\r\n-\t\tprivate function addStyleElementToDocument( DOMDocument $document, $css ) {\r\n-\t\t\t$styleElement          = $document->createElement( 'style', $css );\r\n-\t\t\t$styleAttribute        = $document->createAttribute( 'type' );\r\n-\t\t\t$styleAttribute->value = 'text\u002Fcss';\r\n-\t\t\t$styleElement->appendChild( $styleAttribute );\r\n-\r\n-\t\t\t$head = $this->getOrCreateHeadElement( $document );\r\n-\t\t\t$head->appendChild( $styleElement );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Returns the existing or creates a new head element in $document.\r\n-\t\t *\r\n-\t\t * @param DOMDocument $document\r\n-\t\t *\r\n-\t\t * @return DOMNode the head element\r\n-\t\t *\u002F\r\n-\t\tprivate function getOrCreateHeadElement( DOMDocument $document ) {\r\n-\t\t\t$head = $document->getElementsByTagName( 'head' )->item( 0 );\r\n-\r\n-\t\t\tif ( $head === null ) {\r\n-\t\t\t\t$head = $document->createElement( 'head' );\r\n-\t\t\t\t$html = $document->getElementsByTagName( 'html' )->item( 0 );\r\n-\t\t\t\t$html->insertBefore( $head, $document->getElementsByTagName( 'body' )->item( 0 ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $head;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Splits input CSS code to an array where:\r\n-\t\t *\r\n-\t\t * - key \"css\" will be contains clean CSS code\r\n-\t\t * - key \"media\" will be contains all valuable media queries\r\n-\t\t *\r\n-\t\t * Example:\r\n-\t\t *\r\n-\t\t * The CSS code\r\n-\t\t *\r\n-\t\t *   \"@import \"file.css\"; h1 { color:red; } @media { h1 {}} @media tv { h1 {}}\"\r\n-\t\t *\r\n-\t\t * will be parsed into the following array:\r\n-\t\t *\r\n-\t\t *   \"css\" => \"h1 { color:red; }\"\r\n-\t\t *   \"media\" => \"@media { h1 {}}\"\r\n-\t\t *\r\n-\t\t * @param string $css\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprivate function splitCssAndMediaQuery( $css ) {\r\n-\t\t\t$css = preg_replace_callback( '#@media\\\\s+(?:only\\\\s)?(?:[\\\\s{\\(]|screen|all)\\\\s?[^{]+{.*}\\\\s*}\\\\s*#misU', array( $this, '_media_concat' ), $css );\r\n-\r\n-\t\t\t\u002F\u002F filter the CSS\r\n-\t\t\t$search = array(\r\n-\t\t\t\t\u002F\u002F get rid of css comment code\r\n-\t\t\t\t'\u002F\\\\\u002F\\\\*.*\\\\*\\\\\u002F\u002FsU',\r\n-\t\t\t\t\u002F\u002F strip out any import directives\r\n-\t\t\t\t'\u002F^\\\\s*@import\\\\s[^;]+;\u002FmisU',\r\n-\t\t\t\t\u002F\u002F strip remains media enclosures\r\n-\t\t\t\t'\u002F^\\\\s*@media\\\\s[^{]+{(.*)}\\\\s*}\\\\s\u002FmisU',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$replace = array(\r\n-\t\t\t\t'',\r\n-\t\t\t\t'',\r\n-\t\t\t\t'',\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F clean CSS before output\r\n-\t\t\t$css = preg_replace( $search, $replace, $css );\r\n-\r\n-\t\t\treturn array( 'css' => $css, 'media' => self::$_media );\r\n-\t\t}\r\n-\r\n-\t\tprivate function _media_concat( $matches ) {\r\n-\t\t\tself::$_media .= $matches[0];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Creates a DOMDocument instance with the current HTML.\r\n-\t\t *\r\n-\t\t * @return DOMDocument\r\n-\t\t *\u002F\r\n-\t\tprivate function createXmlDocument() {\r\n-\t\t\t$xmlDocument                      = new DOMDocument;\r\n-\t\t\t$xmlDocument->encoding            = self::ENCODING;\r\n-\t\t\t$xmlDocument->strictErrorChecking = false;\r\n-\t\t\t$xmlDocument->formatOutput        = true;\r\n-\t\t\t$libXmlState                      = libxml_use_internal_errors( true );\r\n-\t\t\t$xmlDocument->loadHTML( $this->getUnifiedHtml() );\r\n-\t\t\tlibxml_clear_errors();\r\n-\t\t\tlibxml_use_internal_errors( $libXmlState );\r\n-\t\t\t$xmlDocument->normalizeDocument();\r\n-\r\n-\t\t\treturn $xmlDocument;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Returns the HTML with the non-ASCII characters converts into HTML entities and the unprocessable HTML tags removed.\r\n-\t\t *\r\n-\t\t * @return string the unified HTML\r\n-\t\t *\r\n-\t\t * @throws BadMethodCallException\r\n-\t\t *\u002F\r\n-\t\tprivate function getUnifiedHtml() {\r\n-\t\t\tif ( !empty( $this->unprocessableHtmlTags ) ) {\r\n-\t\t\t\t$unprocessableHtmlTags        = implode( '|', $this->unprocessableHtmlTags );\r\n-\t\t\t\t$bodyWithoutUnprocessableTags = preg_replace( '\u002F\u003C\\\\\u002F?(' . $unprocessableHtmlTags . ')[^>]*>\u002Fi', '', $this->html );\r\n-\t\t\t} else {\r\n-\t\t\t\t$bodyWithoutUnprocessableTags = $this->html;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn htmlspecialchars_decode( utf8_decode( htmlentities( $bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false ) ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $a\r\n-\t\t * @param array $b\r\n-\t\t *\r\n-\t\t * @return integer\r\n-\t\t *\u002F\r\n-\t\tprivate function sortBySelectorPrecedence( array $a, array $b ) {\r\n-\t\t\t$precedenceA = $this->getCssSelectorPrecedence( $a['selector'] );\r\n-\t\t\t$precedenceB = $this->getCssSelectorPrecedence( $b['selector'] );\r\n-\r\n-\t\t\t\u002F\u002F We want these sorted in ascending order so selectors with lesser precedence get processed first and\r\n-\t\t\t\u002F\u002F selectors with greater precedence get sorted last.\r\n-\t\t\t\u002F\u002F The parenthesis around the -1 are necessary to avoid a PHP_CodeSniffer warning about missing spaces around\r\n-\t\t\t\u002F\u002F arithmetic operators.\r\n-\t\t\t\u002F\u002F @see http:\u002F\u002Fforge.typo3.org\u002Fissues\u002F55605\r\n-\t\t\t$precedenceForEquals    = ( $a['line'] \u003C $b['line'] ? ( - 1 ) : 1 );\r\n-\t\t\t$precedenceForNotEquals = ( $precedenceA \u003C $precedenceB ? ( - 1 ) : 1 );\r\n-\t\t\treturn ( $precedenceA === $precedenceB ) ? $precedenceForEquals : $precedenceForNotEquals;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $selector\r\n-\t\t *\r\n-\t\t * @return integer\r\n-\t\t *\u002F\r\n-\t\tprivate function getCssSelectorPrecedence( $selector ) {\r\n-\t\t\t$selectorKey = md5( $selector );\r\n-\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] ) ) {\r\n-\t\t\t\t$precedence = 0;\r\n-\t\t\t\t$value      = 100;\r\n-\t\t\t\t\u002F\u002F ids: worth 100, classes: worth 10, elements: worth 1\r\n-\t\t\t\t$search = array( '\\\\#', '\\\\.', '' );\r\n-\r\n-\t\t\t\tforeach ( $search as $s ) {\r\n-\t\t\t\t\tif ( trim( $selector == '' ) ) {\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$number   = 0;\r\n-\t\t\t\t\t$selector = preg_replace( '\u002F' . $s . '\\\\w+\u002F', '', $selector, - 1, $number );\r\n-\t\t\t\t\t$precedence += ( $value * $number );\r\n-\t\t\t\t\t$value \u002F= 10;\r\n-\t\t\t\t}\r\n-\t\t\t\t$this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] = $precedence;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Right now, we support all CSS 1 selectors and most CSS2\u002F3 selectors.\r\n-\t\t *\r\n-\t\t * @see http:\u002F\u002Fplasmasturm.org\u002Flog\u002F444\u002F\r\n-\t\t *\r\n-\t\t * @param string $paramCssSelector\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function translateCssToXpath( $paramCssSelector ) {\r\n-\t\t\t$cssSelector = ' ' . $paramCssSelector . ' ';\r\n-\t\t\t$cssSelector = preg_replace_callback( '\u002F\\s+\\w+\\s+\u002F', array( $this, 'strtolower' ), $cssSelector );\r\n-\t\t\t$cssSelector = trim( $cssSelector );\r\n-\t\t\t$xpathKey    = md5( $cssSelector );\r\n-\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_XPATH][$xpathKey] ) ) {\r\n-\t\t\t\t\u002F\u002F returns an Xpath selector\r\n-\t\t\t\t$search  = array(\r\n-\t\t\t\t\t\u002F\u002F Matches any element that is a child of parent.\r\n-\t\t\t\t\t'\u002F\\\\s+>\\\\s+\u002F',\r\n-\t\t\t\t\t\u002F\u002F Matches any element that is an adjacent sibling.\r\n-\t\t\t\t\t'\u002F\\\\s+\\\\+\\\\s+\u002F',\r\n-\t\t\t\t\t\u002F\u002F Matches any element that is a descendant of an parent element element.\r\n-\t\t\t\t\t'\u002F\\\\s+\u002F',\r\n-\t\t\t\t\t\u002F\u002F first-child pseudo-selector\r\n-\t\t\t\t\t'\u002F([^\\\\\u002F]+):first-child\u002Fi',\r\n-\t\t\t\t\t\u002F\u002F last-child pseudo-selector\r\n-\t\t\t\t\t'\u002F([^\\\\\u002F]+):last-child\u002Fi',\r\n-\t\t\t\t\t\u002F\u002F Matches attribute only selector\r\n-\t\t\t\t\t'\u002F^\\\\[(\\\\w+)\\\\]\u002F',\r\n-\t\t\t\t\t\u002F\u002F Matches element with attribute\r\n-\t\t\t\t\t'\u002F(\\\\w)\\\\[(\\\\w+)\\\\]\u002F',\r\n-\t\t\t\t\t\u002F\u002F Matches element with EXACT attribute\r\n-\t\t\t\t\t'\u002F(\\\\w)\\\\[(\\\\w+)\\\\=[\\'\"]?(\\\\w+)[\\'\"]?\\\\]\u002F',\r\n-\t\t\t\t);\r\n-\t\t\t\t$replace = array(\r\n-\t\t\t\t\t'\u002F',\r\n-\t\t\t\t\t'\u002Ffollowing-sibling::*[1]\u002Fself::',\r\n-\t\t\t\t\t'\u002F\u002F',\r\n-\t\t\t\t\t'*[1]\u002Fself::\\\\1',\r\n-\t\t\t\t\t'*[last()]\u002Fself::\\\\1',\r\n-\t\t\t\t\t'*[@\\\\1]',\r\n-\t\t\t\t\t'\\\\1[@\\\\2]',\r\n-\t\t\t\t\t'\\\\1[@\\\\2=\"\\\\3\"]',\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$cssSelector = '\u002F\u002F' . preg_replace( $search, $replace, $cssSelector );\r\n-\r\n-\t\t\t\t$cssSelector = preg_replace_callback( self::ID_ATTRIBUTE_MATCHER, array( $this, 'matchIdAttributes' ), $cssSelector );\r\n-\t\t\t\t$cssSelector = preg_replace_callback( self::CLASS_ATTRIBUTE_MATCHER, array( $this, 'matchClassAttributes' ), $cssSelector );\r\n-\r\n-\t\t\t\t\u002F\u002F Advanced selectors are going to require a bit more advanced emogrification.\r\n-\t\t\t\t\u002F\u002F When we required PHP 5.3, we could do this with closures.\r\n-\t\t\t\t$cssSelector = preg_replace_callback(\r\n-\t\t\t\t\t'\u002F([^\\\\\u002F]+):nth-child\\\\(\\s*(odd|even|[+\\-]?\\\\d|[+\\\\-]?\\\\d?n(\\\\s*[+\\\\-]\\\\s*\\\\d)?)\\\\s*\\\\)\u002Fi',\r\n-\t\t\t\t\tarray( $this, 'translateNthChild' ), $cssSelector\r\n-\t\t\t\t);\r\n-\t\t\t\t$cssSelector = preg_replace_callback(\r\n-\t\t\t\t\t'\u002F([^\\\\\u002F]+):nth-of-type\\\\(\\s*(odd|even|[+\\-]?\\\\d|[+\\\\-]?\\\\d?n(\\\\s*[+\\\\-]\\\\s*\\\\d)?)\\\\s*\\\\)\u002Fi',\r\n-\t\t\t\t\tarray( $this, 'translateNthOfType' ), $cssSelector\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$this->caches[self::CACHE_KEY_SELECTOR][$xpathKey] = $cssSelector;\r\n-\t\t\t}\r\n-\t\t\treturn $this->caches[self::CACHE_KEY_SELECTOR][$xpathKey];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $match\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function matchIdAttributes( array $match ) {\r\n-\t\t\treturn ( strlen( $match[1] ) ? $match[1] : '*' ) . '[@id=\"' . $match[2] . '\"]';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $match\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function matchClassAttributes( array $match ) {\r\n-\t\t\treturn ( strlen( $match[1] ) ? $match[1] : '*' ) . '[contains(concat(\" \",@class,\" \"),concat(\" \",\"' .\r\n-\t\t\t\timplode(\r\n-\t\t\t\t\t'\",\" \"))][contains(concat(\" \",@class,\" \"),concat(\" \",\"',\r\n-\t\t\t\t\texplode( '.', substr( $match[2], 1 ) )\r\n-\t\t\t\t) . '\",\" \"))]';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $match\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function translateNthChild( array $match ) {\r\n-\t\t\t$result = $this->parseNth( $match );\r\n-\r\n-\t\t\tif ( isset( $result[self::MULTIPLIER] ) ) {\r\n-\t\t\t\tif ( $result[self::MULTIPLIER] \u003C 0 ) {\r\n-\t\t\t\t\t$result[self::MULTIPLIER] = abs( $result[self::MULTIPLIER] );\r\n-\t\t\t\t\treturn sprintf( '*[(last() - position()) mod %u = %u]\u002Fself::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1] );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn sprintf( '*[position() mod %u = %u]\u002Fself::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1] );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn sprintf( '*[%u]\u002Fself::%s', $result[self::INDEX], $match[1] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $match\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function translateNthOfType( array $match ) {\r\n-\t\t\t$result = $this->parseNth( $match );\r\n-\r\n-\t\t\tif ( isset( $result[self::MULTIPLIER] ) ) {\r\n-\t\t\t\tif ( $result[self::MULTIPLIER] \u003C 0 ) {\r\n-\t\t\t\t\t$result[self::MULTIPLIER] = abs( $result[self::MULTIPLIER] );\r\n-\t\t\t\t\treturn sprintf( '%s[(last() - position()) mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX] );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn sprintf( '%s[position() mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX] );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\treturn sprintf( '%s[%u]', $match[1], $result[self::INDEX] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param array $match\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tprivate function parseNth( array $match ) {\r\n-\t\t\tif ( in_array( strtolower( $match[2] ), array( 'even', 'odd' ) ) ) {\r\n-\t\t\t\t$index = strtolower( $match[2] ) == 'even' ? 0 : 1;\r\n-\t\t\t\treturn array( self::MULTIPLIER => 2, self::INDEX => $index );\r\n-\t\t\t} elseif ( stripos( $match[2], 'n' ) === false ) {\r\n-\t\t\t\t\u002F\u002F if there is a multiplier\r\n-\t\t\t\t$index = intval( str_replace( ' ', '', $match[2] ) );\r\n-\t\t\t\treturn array( self::INDEX => $index );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( isset( $match[3] ) ) {\r\n-\t\t\t\t\t$multipleTerm = str_replace( $match[3], '', $match[2] );\r\n-\t\t\t\t\t$index        = intval( str_replace( ' ', '', $match[3] ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$multipleTerm = $match[2];\r\n-\t\t\t\t\t$index        = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$multiplier = str_ireplace( 'n', '', $multipleTerm );\r\n-\r\n-\t\t\t\tif ( !strlen( $multiplier ) ) {\r\n-\t\t\t\t\t$multiplier = 1;\r\n-\t\t\t\t} elseif ( $multiplier == 0 ) {\r\n-\t\t\t\t\treturn array( self::INDEX => $index );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$multiplier = intval( $multiplier );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\twhile ( $index \u003C 0 ) {\r\n-\t\t\t\t\t$index += abs( $multiplier );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn array( self::MULTIPLIER => $multiplier, self::INDEX => $index );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Parses a CSS declaration block into property name\u002Fvalue pairs.\r\n-\t\t *\r\n-\t\t * Example:\r\n-\t\t *\r\n-\t\t * The declaration block\r\n-\t\t *\r\n-\t\t *   \"color: #000; font-weight: bold;\"\r\n-\t\t *\r\n-\t\t * will be parsed into the following array:\r\n-\t\t *\r\n-\t\t *   \"color\" => \"#000\"\r\n-\t\t *   \"font-weight\" => \"bold\"\r\n-\t\t *\r\n-\t\t * @param string $cssDeclarationBlock the CSS declaration block without the curly braces, may be empty\r\n-\t\t *\r\n-\t\t * @return array the CSS declarations with the property names as array keys and the property values as array values\r\n-\t\t *\u002F\r\n-\t\tprivate function parseCssDeclarationBlock( $cssDeclarationBlock ) {\r\n-\t\t\tif ( isset( $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] ) ) {\r\n-\t\t\t\treturn $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$properties   = array();\r\n-\t\t\t$declarations = explode( ';', $cssDeclarationBlock );\r\n-\t\t\tforeach ( $declarations as $declaration ) {\r\n-\t\t\t\t$matches = array();\r\n-\t\t\t\tif ( !preg_match( '\u002F *([A-Za-z\\\\-]+) *: *([^;]+) *\u002F', $declaration, $matches ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$propertyName              = strtolower( $matches[1] );\r\n-\t\t\t\t$propertyValue             = $matches[2];\r\n-\t\t\t\t$properties[$propertyName] = $propertyValue;\r\n-\t\t\t}\r\n-\t\t\t$this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] = $properties;\r\n-\r\n-\t\t\treturn $properties;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * This class provides functions for converting CSS styles into inline style attributes in your HTML code.\n+ *\n+ * For more information, please see the README.md file.\n+ *\n+ * @author Cameron Brooks\n+ * @author Jaime Prado\n+ * @author Roman O�ana \u003Cozana@omdesign.cz>\n+ * @deprecated v4.2.9.1\n+ *\u002F\n+if(!class_exists('Emogrifier')) {\n+\tclass Emogrifier {\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tconst ENCODING = 'UTF-8';\n+\n+\t\t\u002F**\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst CACHE_KEY_CSS = 0;\n+\n+\t\t\u002F**\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst CACHE_KEY_SELECTOR = 1;\n+\n+\t\t\u002F**\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst CACHE_KEY_XPATH = 2;\n+\n+\t\t\u002F**\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst CACHE_KEY_CSS_DECLARATION_BLOCK = 3;\n+\n+\t\t\u002F**\n+\t\t * for calculating nth-of-type and nth-child selectors\n+\t\t *\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst INDEX = 0;\n+\n+\t\t\u002F**\n+\t\t * for calculating nth-of-type and nth-child selectors\n+\t\t *\n+\t\t * @var integer\n+\t\t *\u002F\n+\t\tconst MULTIPLIER = 1;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tconst ID_ATTRIBUTE_MATCHER = '\u002F(\\\\w+)?\\\\#([\\\\w\\\\-]+)\u002F';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tconst CLASS_ATTRIBUTE_MATCHER = '\u002F(\\\\w+|[\\\\*\\\\]])?((\\\\.[\\\\w\\\\-]+)+)\u002F';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprivate $html = '';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprivate $css = '';\n+\n+\t\t\u002F**\n+\t\t * @var array\u003Cstring>\n+\t\t *\u002F\n+\t\tprivate $unprocessableHtmlTags = array( 'wbr' );\n+\n+\t\t\u002F**\n+\t\t * @var array\u003Carray>\n+\t\t *\u002F\n+\t\tprivate $caches = array(\n+\t\t\tself::CACHE_KEY_CSS                   => array(),\n+\t\t\tself::CACHE_KEY_SELECTOR              => array(),\n+\t\t\tself::CACHE_KEY_XPATH                 => array(),\n+\t\t\tself::CACHE_KEY_CSS_DECLARATION_BLOCK => array(),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * the visited nodes with the XPath paths as array keys\n+\t\t *\n+\t\t * @var array\u003C\\DOMNode>\n+\t\t *\u002F\n+\t\tprivate $visitedNodes = array();\n+\n+\t\t\u002F**\n+\t\t * the styles to apply to the nodes with the XPath paths as array keys for the outer array and the attribute names\u002Fvalues\n+\t\t * as key\u002Fvalue pairs for the inner array\n+\t\t *\n+\t\t * @var array\u003Carray>\u003Cstring>\n+\t\t *\u002F\n+\t\tprivate $styleAttributesForNodes = array();\n+\n+\t\t\u002F**\n+\t\t * This attribute applies to the case where you want to preserve your original text encoding.\n+\t\t *\n+\t\t * By default, emogrifier translates your text into HTML entities for two reasons:\n+\t\t *\n+\t\t * 1. Because of client incompatibilities, it is better practice to send out HTML entities rather than unicode over email.\n+\t\t *\n+\t\t * 2. It translates any illegal XML characters that DOMDocument cannot work with.\n+\t\t *\n+\t\t * If you would like to preserve your original encoding, set this attribute to TRUE.\n+\t\t *\n+\t\t * @var boolean\n+\t\t *\u002F\n+\t\tpublic $preserveEncoding = false;\n+\n+\t\tpublic static $_media = '';\n+\n+\t\t\u002F**\n+\t\t * The constructor.\n+\t\t *\n+\t\t * @param string $html the HTML to emogrify, must be UTF-8-encoded\n+\t\t * @param string $css  the CSS to merge, must be UTF-8-encoded\n+\t\t *\u002F\n+\t\tpublic function __construct( $html = '', $css = '' ) {\n+\t\t\t$this->setHtml( $html );\n+\t\t\t$this->setCss( $css );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * The destructor.\n+\t\t *\u002F\n+\t\tpublic function __destruct() {\n+\t\t\t$this->purgeVisitedNodes();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sets the HTML to emogrify.\n+\t\t *\n+\t\t * @param string $html the HTML to emogrify, must be UTF-8-encoded\n+\t\t *\u002F\n+\t\tpublic function setHtml( $html = '' ) {\n+\t\t\t$this->html = $html;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sets the CSS to merge with the HTML.\n+\t\t *\n+\t\t * @param string $css the CSS to merge, must be UTF-8-encoded\n+\t\t *\u002F\n+\t\tpublic function setCss( $css = '' ) {\n+\t\t\t$this->css = $css;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Clears all caches.\n+\t\t *\u002F\n+\t\tprivate function clearAllCaches() {\n+\t\t\t$this->clearCache( self::CACHE_KEY_CSS );\n+\t\t\t$this->clearCache( self::CACHE_KEY_SELECTOR );\n+\t\t\t$this->clearCache( self::CACHE_KEY_XPATH );\n+\t\t\t$this->clearCache( self::CACHE_KEY_CSS_DECLARATION_BLOCK );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Clears a single cache by key.\n+\t\t *\n+\t\t * @param integer $key the cache key, must be CACHE_KEY_CSS, CACHE_KEY_SELECTOR, CACHE_KEY_XPATH or CACHE_KEY_CSS_DECLARATION_BLOCK\n+\t\t *\n+\t\t * @throws InvalidArgumentException\n+\t\t *\u002F\n+\t\tprivate function clearCache( $key ) {\n+\t\t\t$allowedCacheKeys = array( self::CACHE_KEY_CSS, self::CACHE_KEY_SELECTOR, self::CACHE_KEY_XPATH, self::CACHE_KEY_CSS_DECLARATION_BLOCK );\n+\t\t\tif ( !in_array( $key, $allowedCacheKeys, true ) ) {\n+\t\t\t\tthrow new InvalidArgumentException( 'Invalid cache key: ' . $key, 1391822035 );\n+\t\t\t}\n+\n+\t\t\t$this->caches[$key] = array();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Purges the visited nodes.\n+\t\t *\u002F\n+\t\tprivate function purgeVisitedNodes() {\n+\t\t\t$this->visitedNodes            = array();\n+\t\t\t$this->styleAttributesForNodes = array();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Marks a tag for removal.\n+\t\t *\n+\t\t * There are some HTML tags that DOMDocument cannot process, and it will throw an error if it encounters them.\n+\t\t * In particular, DOMDocument will complain if you try to use HTML5 tags in an XHTML document.\n+\t\t *\n+\t\t * Note: The tags will not be removed if they have any content.\n+\t\t *\n+\t\t * @param string $tagName the tag name, e.g., \"p\"\n+\t\t *\u002F\n+\t\tpublic function addUnprocessableHtmlTag( $tagName ) {\n+\t\t\t$this->unprocessableHtmlTags[] = $tagName;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Drops a tag from the removal list.\n+\t\t *\n+\t\t * @param string $tagName the tag name, e.g., \"p\"\n+\t\t *\u002F\n+\t\tpublic function removeUnprocessableHtmlTag( $tagName ) {\n+\t\t\t$key = array_search( $tagName, $this->unprocessableHtmlTags, true );\n+\t\t\tif ( $key !== false ) {\n+\t\t\t\tunset( $this->unprocessableHtmlTags[$key] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Applies the CSS you submit to the HTML you submit.\n+\t\t *\n+\t\t * This method places the CSS inline.\n+\t\t *\n+\t\t * @return string\n+\t\t *\n+\t\t * @throws BadMethodCallException\n+\t\t *\u002F\n+\t\tpublic function emogrify() {\n+\t\t\tif ( $this->html === '' ) {\n+\t\t\t\tthrow new BadMethodCallException( 'Please set some HTML first before calling emogrify.', 1390393096 );\n+\t\t\t}\n+\n+\t\t\t$xmlDocument = $this->createXmlDocument();\n+\t\t\t$xpath       = new DOMXPath( $xmlDocument );\n+\t\t\t$this->clearAllCaches();\n+\n+\t\t\t\u002F\u002F before be begin processing the CSS file, parse the document and normalize all existing CSS attributes (changes 'DISPLAY: none' to 'display: none');\n+\t\t\t\u002F\u002F we wouldn't have to do this if DOMXPath supported XPath 2.0.\n+\t\t\t\u002F\u002F also store a reference of nodes with existing inline styles so we don't overwrite them\n+\t\t\t$this->purgeVisitedNodes();\n+\n+\t\t\t$nodesWithStyleAttributes = $xpath->query( '\u002F\u002F*[@style]' );\n+\t\t\tif ( $nodesWithStyleAttributes !== false ) {\n+\t\t\t\t\u002F** @var $nodeWithStyleAttribute DOMNode *\u002F\n+\t\t\t\tforeach ( $nodesWithStyleAttributes as $node ) {\n+\t\t\t\t\t$normalizedOriginalStyle = preg_replace_callback( '\u002F[A-z\\\\-]+(?=\\\\:)\u002FS', array( $this, 'strtolower' ), $node->getAttribute( 'style' ) );\n+\n+\t\t\t\t\t\u002F\u002F in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles\n+\t\t\t\t\t$nodePath = $node->getNodePath();\n+\t\t\t\t\tif ( !isset( $this->styleAttributesForNodes[$nodePath] ) ) {\n+\t\t\t\t\t\t$this->styleAttributesForNodes[$nodePath] = $this->parseCssDeclarationBlock( $normalizedOriginalStyle );\n+\t\t\t\t\t\t$this->visitedNodes[$nodePath]            = $node;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$node->setAttribute( 'style', $normalizedOriginalStyle );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F grab any existing style blocks from the html and append them to the existing CSS\n+\t\t\t\u002F\u002F (these blocks should be appended so as to have precedence over conflicting styles in the existing CSS)\n+\t\t\t$allCss = $this->css;\n+\n+\t\t\t$allCss .= $this->getCssFromAllStyleNodes( $xpath );\n+\n+\t\t\t$cssParts     = $this->splitCssAndMediaQuery( $allCss );\n+\t\t\tself::$_media = ''; \u002F\u002F reset\n+\n+\t\t\t$cssKey = md5( $cssParts['css'] );\n+\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_CSS][$cssKey] ) ) {\n+\t\t\t\t\u002F\u002F process the CSS file for selectors and definitions\n+\t\t\t\tpreg_match_all( '\u002F(?:^|[\\\\s^{}]*)([^{]+){([^}]*)}\u002Fmis', $cssParts['css'], $matches, PREG_SET_ORDER );\n+\n+\t\t\t\t$allSelectors = array();\n+\t\t\t\tforeach ( $matches as $key => $selectorString ) {\n+\t\t\t\t\t\u002F\u002F if there is a blank definition, skip\n+\t\t\t\t\tif ( !strlen( trim( $selectorString[2] ) ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F else split by commas and duplicate attributes so we can sort by selector precedence\n+\t\t\t\t\t$selectors = explode( ',', $selectorString[1] );\n+\t\t\t\t\tforeach ( $selectors as $selector ) {\n+\t\t\t\t\t\t\u002F\u002F don't process pseudo-elements and behavioral (dynamic) pseudo-classes; ONLY allow structural pseudo-classes\n+\t\t\t\t\t\tif ( strpos( $selector, ':' ) !== false && !preg_match( '\u002F:\\\\S+\\\\-(child|type)\\\\(\u002Fi', $selector ) ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$allSelectors[] = array( 'selector'   => trim( $selector ),\n+\t\t\t\t\t\t\t\t\t\t\t\t 'attributes' => trim( $selectorString[2] ),\n+\t\t\t\t\t\t\t\u002F\u002F keep track of where it appears in the file, since order is important\n+\t\t\t\t\t\t\t\t\t\t\t\t 'line'       => $key,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F now sort the selectors by precedence\n+\t\t\t\tusort( $allSelectors, array( $this, 'sortBySelectorPrecedence' ) );\n+\n+\t\t\t\t$this->caches[self::CACHE_KEY_CSS][$cssKey] = $allSelectors;\n+\t\t\t}\n+\n+\t\t\tforeach ( $this->caches[self::CACHE_KEY_CSS][$cssKey] as $value ) {\n+\t\t\t\t\u002F\u002F query the body for the xpath selector\n+\t\t\t\t$nodesMatchingCssSelectors = $xpath->query( $this->translateCssToXpath( $value['selector'] ) );\n+\n+\t\t\t\t\u002F** @var $node \\DOMNode *\u002F\n+\t\t\t\tforeach ( $nodesMatchingCssSelectors as $node ) {\n+\t\t\t\t\t\u002F\u002F if it has a style attribute, get it, process it, and append (overwrite) new stuff\n+\t\t\t\t\tif ( $node->hasAttribute( 'style' ) ) {\n+\t\t\t\t\t\t\u002F\u002F break it up into an associative array\n+\t\t\t\t\t\t$oldStyleDeclarations = $this->parseCssDeclarationBlock( $node->getAttribute( 'style' ) );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$oldStyleDeclarations = array();\n+\t\t\t\t\t}\n+\t\t\t\t\t$newStyleDeclarations = $this->parseCssDeclarationBlock( $value['attributes'] );\n+\t\t\t\t\t$node->setAttribute( 'style', $this->generateStyleStringFromDeclarationsArrays( $oldStyleDeclarations, $newStyleDeclarations ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F now iterate through the nodes that contained inline styles in the original HTML\n+\t\t\tforeach ( $this->styleAttributesForNodes as $nodePath => $styleAttributesForNode ) {\n+\t\t\t\t$node                   = $this->visitedNodes[$nodePath];\n+\t\t\t\t$currentStyleAttributes = $this->parseCssDeclarationBlock( $node->getAttribute( 'style' ) );\n+\t\t\t\t$node->setAttribute( 'style', $this->generateStyleStringFromDeclarationsArrays( $currentStyleAttributes, $styleAttributesForNode ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F This removes styles from your email that contain display:none.\n+\t\t\t\u002F\u002F We need to look for display:none, but we need to do a case-insensitive search. Since DOMDocument only supports XPath 1.0,\n+\t\t\t\u002F\u002F lower-case() isn't available to us. We've thus far only set attributes to lowercase, not attribute values. Consequently, we need\n+\t\t\t\u002F\u002F to translate() the letters that would be in 'NONE' (\"NOE\") to lowercase.\n+\t\t\t$nodesWithStyleDisplayNone = $xpath->query( '\u002F\u002F*[contains(translate(translate(@style,\" \",\"\"),\"NOE\",\"noe\"),\"display:none\")]' );\n+\t\t\t\u002F\u002F The checks on parentNode and is_callable below ensure that if we've deleted the parent node,\n+\t\t\t\u002F\u002F we don't try to call removeChild on a nonexistent child node\n+\t\t\tif ( $nodesWithStyleDisplayNone->length > 0 ) {\n+\t\t\t\t\u002F** @var $node \\DOMNode *\u002F\n+\t\t\t\tforeach ( $nodesWithStyleDisplayNone as $node ) {\n+\t\t\t\t\tif ( $node->parentNode && is_callable( array( $node->parentNode, 'removeChild' ) ) ) {\n+\t\t\t\t\t\t$node->parentNode->removeChild( $node );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$this->copyCssWithMediaToStyleNode( $cssParts, $xmlDocument );\n+\n+\t\t\tif ( $this->preserveEncoding ) {\n+\t\t\t\tif ( function_exists( 'mb_convert_encoding' ) ) {\n+\t\t\t\t\treturn mb_convert_encoding( $xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES' );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn htmlspecialchars_decode( utf8_encode( html_entity_decode( $xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING ) ) );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn $xmlDocument->saveHTML();\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function strtolower( array $m ) {\n+\t\t\treturn strtolower( $m[0] );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * This method merges old or existing name\u002Fvalue array with new name\u002Fvalue array\n+\t\t * and then generates a string of the combined style suitable for placing inline.\n+\t\t * This becomes the single point for CSS string generation allowing for consistent\n+\t\t * CSS output no matter where the CSS originally came from.\n+\t\t *\n+\t\t * @param array $oldStyles\n+\t\t * @param array $newStyles\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function generateStyleStringFromDeclarationsArrays( array $oldStyles, array $newStyles ) {\n+\t\t\t$combinedStyles = array_merge( $oldStyles, $newStyles );\n+\t\t\t$style          = '';\n+\t\t\tforeach ( $combinedStyles as $attributeName => $attributeValue ) {\n+\t\t\t\t$style .= ( strtolower( trim( $attributeName ) ) . ': ' . trim( $attributeValue ) . '; ' );\n+\t\t\t}\n+\t\t\treturn trim( $style );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Copies the media part from CSS array parts to $xmlDocument.\n+\t\t *\n+\t\t * @param array       $cssParts\n+\t\t * @param DOMDocument $xmlDocument\n+\t\t *\u002F\n+\t\tpublic function copyCssWithMediaToStyleNode( array $cssParts, DOMDocument $xmlDocument ) {\n+\t\t\tif ( isset( $cssParts['media'] ) && $cssParts['media'] !== '' ) {\n+\t\t\t\t$this->addStyleElementToDocument( $xmlDocument, $cssParts['media'] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Returns CSS content.\n+\t\t *\n+\t\t * @param DOMXPath $xpath\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function getCssFromAllStyleNodes( DOMXPath $xpath ) {\n+\t\t\t$styleNodes = $xpath->query( '\u002F\u002Fstyle' );\n+\n+\t\t\tif ( $styleNodes === false ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$css = '';\n+\t\t\t\u002F** @var $styleNode DOMNode *\u002F\n+\t\t\tforeach ( $styleNodes as $styleNode ) {\n+\t\t\t\t$css .= \"\\n\\n\" . $styleNode->nodeValue;\n+\t\t\t\t$styleNode->parentNode->removeChild( $styleNode );\n+\t\t\t}\n+\n+\t\t\treturn $css;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Adds a style element with $css to $document.\n+\t\t *\n+\t\t * @param DOMDocument $document\n+\t\t * @param string      $css\n+\t\t *\u002F\n+\t\tprivate function addStyleElementToDocument( DOMDocument $document, $css ) {\n+\t\t\t$styleElement          = $document->createElement( 'style', $css );\n+\t\t\t$styleAttribute        = $document->createAttribute( 'type' );\n+\t\t\t$styleAttribute->value = 'text\u002Fcss';\n+\t\t\t$styleElement->appendChild( $styleAttribute );\n+\n+\t\t\t$head = $this->getOrCreateHeadElement( $document );\n+\t\t\t$head->appendChild( $styleElement );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Returns the existing or creates a new head element in $document.\n+\t\t *\n+\t\t * @param DOMDocument $document\n+\t\t *\n+\t\t * @return DOMNode the head element\n+\t\t *\u002F\n+\t\tprivate function getOrCreateHeadElement( DOMDocument $document ) {\n+\t\t\t$head = $document->getElementsByTagName( 'head' )->item( 0 );\n+\n+\t\t\tif ( $head === null ) {\n+\t\t\t\t$head = $document->createElement( 'head' );\n+\t\t\t\t$html = $document->getElementsByTagName( 'html' )->item( 0 );\n+\t\t\t\t$html->insertBefore( $head, $document->getElementsByTagName( 'body' )->item( 0 ) );\n+\t\t\t}\n+\n+\t\t\treturn $head;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Splits input CSS code to an array where:\n+\t\t *\n+\t\t * - key \"css\" will be contains clean CSS code\n+\t\t * - key \"media\" will be contains all valuable media queries\n+\t\t *\n+\t\t * Example:\n+\t\t *\n+\t\t * The CSS code\n+\t\t *\n+\t\t *   \"@import \"file.css\"; h1 { color:red; } @media { h1 {}} @media tv { h1 {}}\"\n+\t\t *\n+\t\t * will be parsed into the following array:\n+\t\t *\n+\t\t *   \"css\" => \"h1 { color:red; }\"\n+\t\t *   \"media\" => \"@media { h1 {}}\"\n+\t\t *\n+\t\t * @param string $css\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprivate function splitCssAndMediaQuery( $css ) {\n+\t\t\t$css = preg_replace_callback( '#@media\\\\s+(?:only\\\\s)?(?:[\\\\s{\\(]|screen|all)\\\\s?[^{]+{.*}\\\\s*}\\\\s*#misU', array( $this, '_media_concat' ), $css );\n+\n+\t\t\t\u002F\u002F filter the CSS\n+\t\t\t$search = array(\n+\t\t\t\t\u002F\u002F get rid of css comment code\n+\t\t\t\t'\u002F\\\\\u002F\\\\*.*\\\\*\\\\\u002F\u002FsU',\n+\t\t\t\t\u002F\u002F strip out any import directives\n+\t\t\t\t'\u002F^\\\\s*@import\\\\s[^;]+;\u002FmisU',\n+\t\t\t\t\u002F\u002F strip remains media enclosures\n+\t\t\t\t'\u002F^\\\\s*@media\\\\s[^{]+{(.*)}\\\\s*}\\\\s\u002FmisU',\n+\t\t\t);\n+\n+\t\t\t$replace = array(\n+\t\t\t\t'',\n+\t\t\t\t'',\n+\t\t\t\t'',\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F clean CSS before output\n+\t\t\t$css = preg_replace( $search, $replace, $css );\n+\n+\t\t\treturn array( 'css' => $css, 'media' => self::$_media );\n+\t\t}\n+\n+\t\tprivate function _media_concat( $matches ) {\n+\t\t\tself::$_media .= $matches[0];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Creates a DOMDocument instance with the current HTML.\n+\t\t *\n+\t\t * @return DOMDocument\n+\t\t *\u002F\n+\t\tprivate function createXmlDocument() {\n+\t\t\t$xmlDocument                      = new DOMDocument;\n+\t\t\t$xmlDocument->encoding            = self::ENCODING;\n+\t\t\t$xmlDocument->strictErrorChecking = false;\n+\t\t\t$xmlDocument->formatOutput        = true;\n+\t\t\t$libXmlState                      = libxml_use_internal_errors( true );\n+\t\t\t$xmlDocument->loadHTML( $this->getUnifiedHtml() );\n+\t\t\tlibxml_clear_errors();\n+\t\t\tlibxml_use_internal_errors( $libXmlState );\n+\t\t\t$xmlDocument->normalizeDocument();\n+\n+\t\t\treturn $xmlDocument;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Returns the HTML with the non-ASCII characters converts into HTML entities and the unprocessable HTML tags removed.\n+\t\t *\n+\t\t * @return string the unified HTML\n+\t\t *\n+\t\t * @throws BadMethodCallException\n+\t\t *\u002F\n+\t\tprivate function getUnifiedHtml() {\n+\t\t\tif ( !empty( $this->unprocessableHtmlTags ) ) {\n+\t\t\t\t$unprocessableHtmlTags        = implode( '|', $this->unprocessableHtmlTags );\n+\t\t\t\t$bodyWithoutUnprocessableTags = preg_replace( '\u002F\u003C\\\\\u002F?(' . $unprocessableHtmlTags . ')[^>]*>\u002Fi', '', $this->html );\n+\t\t\t} else {\n+\t\t\t\t$bodyWithoutUnprocessableTags = $this->html;\n+\t\t\t}\n+\n+\t\t\treturn htmlspecialchars_decode( utf8_decode( htmlentities( $bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false ) ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $a\n+\t\t * @param array $b\n+\t\t *\n+\t\t * @return integer\n+\t\t *\u002F\n+\t\tprivate function sortBySelectorPrecedence( array $a, array $b ) {\n+\t\t\t$precedenceA = $this->getCssSelectorPrecedence( $a['selector'] );\n+\t\t\t$precedenceB = $this->getCssSelectorPrecedence( $b['selector'] );\n+\n+\t\t\t\u002F\u002F We want these sorted in ascending order so selectors with lesser precedence get processed first and\n+\t\t\t\u002F\u002F selectors with greater precedence get sorted last.\n+\t\t\t\u002F\u002F The parenthesis around the -1 are necessary to avoid a PHP_CodeSniffer warning about missing spaces around\n+\t\t\t\u002F\u002F arithmetic operators.\n+\t\t\t\u002F\u002F @see http:\u002F\u002Fforge.typo3.org\u002Fissues\u002F55605\n+\t\t\t$precedenceForEquals    = ( $a['line'] \u003C $b['line'] ? ( - 1 ) : 1 );\n+\t\t\t$precedenceForNotEquals = ( $precedenceA \u003C $precedenceB ? ( - 1 ) : 1 );\n+\t\t\treturn ( $precedenceA === $precedenceB ) ? $precedenceForEquals : $precedenceForNotEquals;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $selector\n+\t\t *\n+\t\t * @return integer\n+\t\t *\u002F\n+\t\tprivate function getCssSelectorPrecedence( $selector ) {\n+\t\t\t$selectorKey = md5( $selector );\n+\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] ) ) {\n+\t\t\t\t$precedence = 0;\n+\t\t\t\t$value      = 100;\n+\t\t\t\t\u002F\u002F ids: worth 100, classes: worth 10, elements: worth 1\n+\t\t\t\t$search = array( '\\\\#', '\\\\.', '' );\n+\n+\t\t\t\tforeach ( $search as $s ) {\n+\t\t\t\t\tif ( trim( $selector == '' ) ) {\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t\t$number   = 0;\n+\t\t\t\t\t$selector = preg_replace( '\u002F' . $s . '\\\\w+\u002F', '', $selector, - 1, $number );\n+\t\t\t\t\t$precedence += ( $value * $number );\n+\t\t\t\t\t$value \u002F= 10;\n+\t\t\t\t}\n+\t\t\t\t$this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] = $precedence;\n+\t\t\t}\n+\n+\t\t\treturn $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Right now, we support all CSS 1 selectors and most CSS2\u002F3 selectors.\n+\t\t *\n+\t\t * @see http:\u002F\u002Fplasmasturm.org\u002Flog\u002F444\u002F\n+\t\t *\n+\t\t * @param string $paramCssSelector\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function translateCssToXpath( $paramCssSelector ) {\n+\t\t\t$cssSelector = ' ' . $paramCssSelector . ' ';\n+\t\t\t$cssSelector = preg_replace_callback( '\u002F\\s+\\w+\\s+\u002F', array( $this, 'strtolower' ), $cssSelector );\n+\t\t\t$cssSelector = trim( $cssSelector );\n+\t\t\t$xpathKey    = md5( $cssSelector );\n+\t\t\tif ( !isset( $this->caches[self::CACHE_KEY_XPATH][$xpathKey] ) ) {\n+\t\t\t\t\u002F\u002F returns an Xpath selector\n+\t\t\t\t$search  = array(\n+\t\t\t\t\t\u002F\u002F Matches any element that is a child of parent.\n+\t\t\t\t\t'\u002F\\\\s+>\\\\s+\u002F',\n+\t\t\t\t\t\u002F\u002F Matches any element that is an adjacent sibling.\n+\t\t\t\t\t'\u002F\\\\s+\\\\+\\\\s+\u002F',\n+\t\t\t\t\t\u002F\u002F Matches any element that is a descendant of an parent element element.\n+\t\t\t\t\t'\u002F\\\\s+\u002F',\n+\t\t\t\t\t\u002F\u002F first-child pseudo-selector\n+\t\t\t\t\t'\u002F([^\\\\\u002F]+):first-child\u002Fi',\n+\t\t\t\t\t\u002F\u002F last-child pseudo-selector\n+\t\t\t\t\t'\u002F([^\\\\\u002F]+):last-child\u002Fi',\n+\t\t\t\t\t\u002F\u002F Matches attribute only selector\n+\t\t\t\t\t'\u002F^\\\\[(\\\\w+)\\\\]\u002F',\n+\t\t\t\t\t\u002F\u002F Matches element with attribute\n+\t\t\t\t\t'\u002F(\\\\w)\\\\[(\\\\w+)\\\\]\u002F',\n+\t\t\t\t\t\u002F\u002F Matches element with EXACT attribute\n+\t\t\t\t\t'\u002F(\\\\w)\\\\[(\\\\w+)\\\\=[\\'\"]?(\\\\w+)[\\'\"]?\\\\]\u002F',\n+\t\t\t\t);\n+\t\t\t\t$replace = array(\n+\t\t\t\t\t'\u002F',\n+\t\t\t\t\t'\u002Ffollowing-sibling::*[1]\u002Fself::',\n+\t\t\t\t\t'\u002F\u002F',\n+\t\t\t\t\t'*[1]\u002Fself::\\\\1',\n+\t\t\t\t\t'*[last()]\u002Fself::\\\\1',\n+\t\t\t\t\t'*[@\\\\1]',\n+\t\t\t\t\t'\\\\1[@\\\\2]',\n+\t\t\t\t\t'\\\\1[@\\\\2=\"\\\\3\"]',\n+\t\t\t\t);\n+\n+\t\t\t\t$cssSelector = '\u002F\u002F' . preg_replace( $search, $replace, $cssSelector );\n+\n+\t\t\t\t$cssSelector = preg_replace_callback( self::ID_ATTRIBUTE_MATCHER, array( $this, 'matchIdAttributes' ), $cssSelector );\n+\t\t\t\t$cssSelector = preg_replace_callback( self::CLASS_ATTRIBUTE_MATCHER, array( $this, 'matchClassAttributes' ), $cssSelector );\n+\n+\t\t\t\t\u002F\u002F Advanced selectors are going to require a bit more advanced emogrification.\n+\t\t\t\t\u002F\u002F When we required PHP 5.3, we could do this with closures.\n+\t\t\t\t$cssSelector = preg_replace_callback(\n+\t\t\t\t\t'\u002F([^\\\\\u002F]+):nth-child\\\\(\\s*(odd|even|[+\\-]?\\\\d|[+\\\\-]?\\\\d?n(\\\\s*[+\\\\-]\\\\s*\\\\d)?)\\\\s*\\\\)\u002Fi',\n+\t\t\t\t\tarray( $this, 'translateNthChild' ), $cssSelector\n+\t\t\t\t);\n+\t\t\t\t$cssSelector = preg_replace_callback(\n+\t\t\t\t\t'\u002F([^\\\\\u002F]+):nth-of-type\\\\(\\s*(odd|even|[+\\-]?\\\\d|[+\\\\-]?\\\\d?n(\\\\s*[+\\\\-]\\\\s*\\\\d)?)\\\\s*\\\\)\u002Fi',\n+\t\t\t\t\tarray( $this, 'translateNthOfType' ), $cssSelector\n+\t\t\t\t);\n+\n+\t\t\t\t$this->caches[self::CACHE_KEY_SELECTOR][$xpathKey] = $cssSelector;\n+\t\t\t}\n+\t\t\treturn $this->caches[self::CACHE_KEY_SELECTOR][$xpathKey];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $match\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function matchIdAttributes( array $match ) {\n+\t\t\treturn ( strlen( $match[1] ) ? $match[1] : '*' ) . '[@id=\"' . $match[2] . '\"]';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $match\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function matchClassAttributes( array $match ) {\n+\t\t\treturn ( strlen( $match[1] ) ? $match[1] : '*' ) . '[contains(concat(\" \",@class,\" \"),concat(\" \",\"' .\n+\t\t\t\timplode(\n+\t\t\t\t\t'\",\" \"))][contains(concat(\" \",@class,\" \"),concat(\" \",\"',\n+\t\t\t\t\texplode( '.', substr( $match[2], 1 ) )\n+\t\t\t\t) . '\",\" \"))]';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $match\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function translateNthChild( array $match ) {\n+\t\t\t$result = $this->parseNth( $match );\n+\n+\t\t\tif ( isset( $result[self::MULTIPLIER] ) ) {\n+\t\t\t\tif ( $result[self::MULTIPLIER] \u003C 0 ) {\n+\t\t\t\t\t$result[self::MULTIPLIER] = abs( $result[self::MULTIPLIER] );\n+\t\t\t\t\treturn sprintf( '*[(last() - position()) mod %u = %u]\u002Fself::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1] );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn sprintf( '*[position() mod %u = %u]\u002Fself::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1] );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn sprintf( '*[%u]\u002Fself::%s', $result[self::INDEX], $match[1] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $match\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function translateNthOfType( array $match ) {\n+\t\t\t$result = $this->parseNth( $match );\n+\n+\t\t\tif ( isset( $result[self::MULTIPLIER] ) ) {\n+\t\t\t\tif ( $result[self::MULTIPLIER] \u003C 0 ) {\n+\t\t\t\t\t$result[self::MULTIPLIER] = abs( $result[self::MULTIPLIER] );\n+\t\t\t\t\treturn sprintf( '%s[(last() - position()) mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX] );\n+\t\t\t\t} else {\n+\t\t\t\t\treturn sprintf( '%s[position() mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX] );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\treturn sprintf( '%s[%u]', $match[1], $result[self::INDEX] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param array $match\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tprivate function parseNth( array $match ) {\n+\t\t\tif ( in_array( strtolower( $match[2] ), array( 'even', 'odd' ) ) ) {\n+\t\t\t\t$index = strtolower( $match[2] ) == 'even' ? 0 : 1;\n+\t\t\t\treturn array( self::MULTIPLIER => 2, self::INDEX => $index );\n+\t\t\t} elseif ( stripos( $match[2], 'n' ) === false ) {\n+\t\t\t\t\u002F\u002F if there is a multiplier\n+\t\t\t\t$index = intval( str_replace( ' ', '', $match[2] ) );\n+\t\t\t\treturn array( self::INDEX => $index );\n+\t\t\t} else {\n+\t\t\t\tif ( isset( $match[3] ) ) {\n+\t\t\t\t\t$multipleTerm = str_replace( $match[3], '', $match[2] );\n+\t\t\t\t\t$index        = intval( str_replace( ' ', '', $match[3] ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$multipleTerm = $match[2];\n+\t\t\t\t\t$index        = 0;\n+\t\t\t\t}\n+\n+\t\t\t\t$multiplier = str_ireplace( 'n', '', $multipleTerm );\n+\n+\t\t\t\tif ( !strlen( $multiplier ) ) {\n+\t\t\t\t\t$multiplier = 1;\n+\t\t\t\t} elseif ( $multiplier == 0 ) {\n+\t\t\t\t\treturn array( self::INDEX => $index );\n+\t\t\t\t} else {\n+\t\t\t\t\t$multiplier = intval( $multiplier );\n+\t\t\t\t}\n+\n+\t\t\t\twhile ( $index \u003C 0 ) {\n+\t\t\t\t\t$index += abs( $multiplier );\n+\t\t\t\t}\n+\n+\t\t\t\treturn array( self::MULTIPLIER => $multiplier, self::INDEX => $index );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Parses a CSS declaration block into property name\u002Fvalue pairs.\n+\t\t *\n+\t\t * Example:\n+\t\t *\n+\t\t * The declaration block\n+\t\t *\n+\t\t *   \"color: #000; font-weight: bold;\"\n+\t\t *\n+\t\t * will be parsed into the following array:\n+\t\t *\n+\t\t *   \"color\" => \"#000\"\n+\t\t *   \"font-weight\" => \"bold\"\n+\t\t *\n+\t\t * @param string $cssDeclarationBlock the CSS declaration block without the curly braces, may be empty\n+\t\t *\n+\t\t * @return array the CSS declarations with the property names as array keys and the property values as array values\n+\t\t *\u002F\n+\t\tprivate function parseCssDeclarationBlock( $cssDeclarationBlock ) {\n+\t\t\tif ( isset( $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] ) ) {\n+\t\t\t\treturn $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock];\n+\t\t\t}\n+\n+\t\t\t$properties   = array();\n+\t\t\t$declarations = explode( ';', $cssDeclarationBlock );\n+\t\t\tforeach ( $declarations as $declaration ) {\n+\t\t\t\t$matches = array();\n+\t\t\t\tif ( !preg_match( '\u002F *([A-Za-z\\\\-]+) *: *([^;]+) *\u002F', $declaration, $matches ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$propertyName              = strtolower( $matches[1] );\n+\t\t\t\t$propertyValue             = $matches[2];\n+\t\t\t\t$properties[$propertyName] = $propertyValue;\n+\t\t\t}\n+\t\t\t$this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] = $properties;\n+\n+\t\t\treturn $properties;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fphp-crypto.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fphp-crypto.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fphp-crypto.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fphp-crypto.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-\u003C?php\r\n-\u002F**\r\n- * Helper library for CryptoJS AES encryption\u002Fdecryption\r\n- * Allow you to use AES encryption on client side and server side vice versa\r\n- *\r\n- * @author BrainFooLong (bfldev.com)\r\n- * @link https:\u002F\u002Fgithub.com\u002Fbrainfoolong\u002Fcryptojs-aes-php\r\n- *\u002F\r\n-\u002F**\r\n- * Decrypt data from a CryptoJS json encoding string\r\n- *\r\n- * @param mixed $passphrase\r\n- * @param mixed $jsonString\r\n- * @return mixed\r\n- *\u002F\r\n-function cryptoJsAesDecrypt($passphrase, $jsonString){\r\n-\t$jsondata = json_decode($jsonString, true);\r\n-\ttry {\r\n-\t\t$salt = hex2bin($jsondata[\"s\"]);\r\n-\t\t$iv  = hex2bin($jsondata[\"iv\"]);\r\n-\t} catch(Exception $e) { return null; }\r\n-\t$ct = base64_decode($jsondata[\"ct\"]);\r\n-\t$concatedPassphrase = $passphrase.$salt;\r\n-\t$md5 = array();\r\n-\t$md5[0] = md5($concatedPassphrase, true);\r\n-\t$result = $md5[0];\r\n-\tfor ($i = 1; $i \u003C 3; $i++) {\r\n-\t\t$md5[$i] = md5($md5[$i - 1].$concatedPassphrase, true);\r\n-\t\t$result .= $md5[$i];\r\n-\t}\r\n-\t$key = substr($result, 0, 32);\r\n-\t$data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv);\r\n-\treturn json_decode($data, true);\r\n-}\r\n-\u002F**\r\n- * Encrypt value to a cryptojs compatiable json encoding string\r\n- *\r\n- * @param mixed $passphrase\r\n- * @param mixed $value\r\n- * @return string\r\n- *\u002F\r\n-function cryptoJsAesEncrypt($passphrase, $value){\r\n-\t$salt = openssl_random_pseudo_bytes(8);\r\n-\t$salted = '';\r\n-\t$dx = '';\r\n-\twhile (strlen($salted) \u003C 48) {\r\n-\t\t$dx = md5($dx.$passphrase.$salt, true);\r\n-\t\t$salted .= $dx;\r\n-\t}\r\n-\t$key = substr($salted, 0, 32);\r\n-\t$iv  = substr($salted, 32,16);\r\n-\t$encrypted_data = openssl_encrypt(json_encode($value), 'aes-256-cbc', $key, true, $iv);\r\n-\t$data = array(\"ct\" => base64_encode($encrypted_data), \"iv\" => bin2hex($iv), \"s\" => bin2hex($salt));\r\n-\treturn json_encode($data);\r\n+\u003C?php\n+\u002F**\n+ * Helper library for CryptoJS AES encryption\u002Fdecryption\n+ * Allow you to use AES encryption on client side and server side vice versa\n+ *\n+ * @author BrainFooLong (bfldev.com)\n+ * @link https:\u002F\u002Fgithub.com\u002Fbrainfoolong\u002Fcryptojs-aes-php\n+ *\u002F\n+\u002F**\n+ * Decrypt data from a CryptoJS json encoding string\n+ *\n+ * @param mixed $passphrase\n+ * @param mixed $jsonString\n+ * @return mixed\n+ *\u002F\n+function cryptoJsAesDecrypt($passphrase, $jsonString){\n+\t$jsondata = json_decode($jsonString, true);\n+\ttry {\n+\t\t$salt = hex2bin($jsondata[\"s\"]);\n+\t\t$iv  = hex2bin($jsondata[\"iv\"]);\n+\t} catch(Exception $e) { return null; }\n+\t$ct = base64_decode($jsondata[\"ct\"]);\n+\t$concatedPassphrase = $passphrase.$salt;\n+\t$md5 = array();\n+\t$md5[0] = md5($concatedPassphrase, true);\n+\t$result = $md5[0];\n+\tfor ($i = 1; $i \u003C 3; $i++) {\n+\t\t$md5[$i] = md5($md5[$i - 1].$concatedPassphrase, true);\n+\t\t$result .= $md5[$i];\n+\t}\n+\t$key = substr($result, 0, 32);\n+\t$data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv);\n+\treturn json_decode($data, true);\n+}\n+\u002F**\n+ * Encrypt value to a cryptojs compatiable json encoding string\n+ *\n+ * @param mixed $passphrase\n+ * @param mixed $value\n+ * @return string\n+ *\u002F\n+function cryptoJsAesEncrypt($passphrase, $value){\n+\t$salt = openssl_random_pseudo_bytes(8);\n+\t$salted = '';\n+\t$dx = '';\n+\twhile (strlen($salted) \u003C 48) {\n+\t\t$dx = md5($dx.$passphrase.$salt, true);\n+\t\t$salted .= $dx;\n+\t}\n+\t$key = substr($salted, 0, 32);\n+\t$iv  = substr($salted, 32,16);\n+\t$encrypted_data = openssl_encrypt(json_encode($value), 'aes-256-cbc', $key, true, $iv);\n+\t$data = array(\"ct\" => base64_encode($encrypted_data), \"iv\" => bin2hex($iv), \"s\" => bin2hex($salt));\n+\treturn json_encode($data);\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-async-request.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-async-request.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-async-request.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-async-request.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,189 +1,189 @@\n-\u003C?php\r\n-\u002F**\r\n- * WP Async Request\r\n- *\r\n- * @package WP-Background-Processing\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Abstract WP_Async_Request class.\r\n- *\r\n- * @abstract\r\n- *\u002F\r\n-abstract class WP_Async_Request {\r\n-\r\n-\t\u002F**\r\n-\t * Prefix\r\n-\t *\r\n-\t * (default value: 'wp')\r\n-\t *\r\n-\t * @var string\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $prefix = 'wp';\r\n-\r\n-\t\u002F**\r\n-\t * Action\r\n-\t *\r\n-\t * (default value: 'async_request')\r\n-\t *\r\n-\t * @var string\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $action = 'async_request';\r\n-\r\n-\t\u002F**\r\n-\t * Identifier\r\n-\t *\r\n-\t * @var mixed\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $identifier;\r\n-\r\n-\t\u002F**\r\n-\t * Data\r\n-\t *\r\n-\t * (default value: array())\r\n-\t *\r\n-\t * @var array\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $data = array();\r\n-\r\n-\t\u002F**\r\n-\t * Initiate new async request\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->identifier = $this->prefix . '_' . $this->action;\r\n-\r\n-\t\tadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\t\tadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set data used during the request\r\n-\t *\r\n-\t * @param array $data Data.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function data( $data ) {\r\n-\t\t$this->data = $data;\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Dispatch the async request\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\t$url  = esc_url_raw( add_query_arg( $this->get_query_args(), $this->get_query_url() ) );\r\n-\t\t$args = $this->get_post_args();\r\n-\r\n-\t\treturn wp_remote_post( $url, $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_query_args() {\r\n-\t\tif ( property_exists( $this, 'query_args' ) ) {\r\n-\t\t\treturn $this->query_args;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'action' => $this->identifier,\r\n-\t\t\t'nonce'  => wp_create_nonce( $this->identifier ),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters the post arguments used during an async request.\r\n-\t\t *\r\n-\t\t * @param array $url\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( $this->identifier . '_query_args', $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get query URL\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_query_url() {\r\n-\t\tif ( property_exists( $this, 'query_url' ) ) {\r\n-\t\t\treturn $this->query_url;\r\n-\t\t}\r\n-\r\n-\t\t$url = admin_url( 'admin-ajax.php' );\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters the post arguments used during an async request.\r\n-\t\t *\r\n-\t\t * @param string $url\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( $this->identifier . '_query_url', $url );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function get_post_args() {\r\n-\t\tif ( property_exists( $this, 'post_args' ) ) {\r\n-\t\t\treturn $this->post_args;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'timeout'   => 0.01,\r\n-\t\t\t'blocking'  => false,\r\n-\t\t\t'body'      => $this->data,\r\n-\t\t\t'cookies'   => $_COOKIE,\r\n-\t\t\t'sslverify' => apply_filters( 'https_local_ssl_verify', false ),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Filters the post arguments used during an async request.\r\n-\t\t *\r\n-\t\t * @param array $args\r\n-\t\t *\u002F\r\n-\t\treturn apply_filters( $this->identifier . '_post_args', $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Maybe handle\r\n-\t *\r\n-\t * Check for correct nonce and pass to handler.\r\n-\t *\u002F\r\n-\tpublic function maybe_handle() {\r\n-\t\t\u002F\u002F Don't lock up other requests while processing\r\n-\t\tsession_write_close();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * set params $_POST['lp_no_check_referer'] = 1\r\n-\t\t * for case: send request when user not login, but get request when user logged\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4\r\n-\t\t *\u002F\r\n-\t\tif( ! isset( $_POST['lp_no_check_referer'] ) ) {\r\n-\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\r\n-\t\t}\r\n-\r\n-\t\t$this->handle();\r\n-\r\n-\t\twp_die();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle\r\n-\t *\r\n-\t * Override this method to perform any actions required\r\n-\t * during the async request.\r\n-\t *\u002F\r\n-\tabstract protected function handle();\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * WP Async Request\n+ *\n+ * @package WP-Background-Processing\n+ *\u002F\n+\n+\u002F**\n+ * Abstract WP_Async_Request class.\n+ *\n+ * @abstract\n+ *\u002F\n+abstract class WP_Async_Request {\n+\n+\t\u002F**\n+\t * Prefix\n+\t *\n+\t * (default value: 'wp')\n+\t *\n+\t * @var string\n+\t * @access protected\n+\t *\u002F\n+\tprotected $prefix = 'wp';\n+\n+\t\u002F**\n+\t * Action\n+\t *\n+\t * (default value: 'async_request')\n+\t *\n+\t * @var string\n+\t * @access protected\n+\t *\u002F\n+\tprotected $action = 'async_request';\n+\n+\t\u002F**\n+\t * Identifier\n+\t *\n+\t * @var mixed\n+\t * @access protected\n+\t *\u002F\n+\tprotected $identifier;\n+\n+\t\u002F**\n+\t * Data\n+\t *\n+\t * (default value: array())\n+\t *\n+\t * @var array\n+\t * @access protected\n+\t *\u002F\n+\tprotected $data = array();\n+\n+\t\u002F**\n+\t * Initiate new async request\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->identifier = $this->prefix . '_' . $this->action;\n+\n+\t\tadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\t\tadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Set data used during the request\n+\t *\n+\t * @param array $data Data.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function data( $data ) {\n+\t\t$this->data = $data;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Dispatch the async request\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\t$url  = esc_url_raw( add_query_arg( $this->get_query_args(), $this->get_query_url() ) );\n+\t\t$args = $this->get_post_args();\n+\n+\t\treturn wp_remote_post( $url, $args );\n+\t}\n+\n+\t\u002F**\n+\t * Get query args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_query_args() {\n+\t\tif ( property_exists( $this, 'query_args' ) ) {\n+\t\t\treturn $this->query_args;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'action' => $this->identifier,\n+\t\t\t'nonce'  => wp_create_nonce( $this->identifier ),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Filters the post arguments used during an async request.\n+\t\t *\n+\t\t * @param array $url\n+\t\t *\u002F\n+\t\treturn apply_filters( $this->identifier . '_query_args', $args );\n+\t}\n+\n+\t\u002F**\n+\t * Get query URL\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_query_url() {\n+\t\tif ( property_exists( $this, 'query_url' ) ) {\n+\t\t\treturn $this->query_url;\n+\t\t}\n+\n+\t\t$url = admin_url( 'admin-ajax.php' );\n+\n+\t\t\u002F**\n+\t\t * Filters the post arguments used during an async request.\n+\t\t *\n+\t\t * @param string $url\n+\t\t *\u002F\n+\t\treturn apply_filters( $this->identifier . '_query_url', $url );\n+\t}\n+\n+\t\u002F**\n+\t * Get post args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function get_post_args() {\n+\t\tif ( property_exists( $this, 'post_args' ) ) {\n+\t\t\treturn $this->post_args;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'timeout'   => 0.01,\n+\t\t\t'blocking'  => false,\n+\t\t\t'body'      => $this->data,\n+\t\t\t'cookies'   => $_COOKIE,\n+\t\t\t'sslverify' => apply_filters( 'https_local_ssl_verify', false ),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Filters the post arguments used during an async request.\n+\t\t *\n+\t\t * @param array $args\n+\t\t *\u002F\n+\t\treturn apply_filters( $this->identifier . '_post_args', $args );\n+\t}\n+\n+\t\u002F**\n+\t * Maybe handle\n+\t *\n+\t * Check for correct nonce and pass to handler.\n+\t *\u002F\n+\tpublic function maybe_handle() {\n+\t\t\u002F\u002F Don't lock up other requests while processing\n+\t\tsession_write_close();\n+\n+\t\t\u002F**\n+\t\t * set params $_POST['lp_no_check_referer'] = 1\n+\t\t * for case: send request when user not login, but get request when user logged\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4\n+\t\t *\u002F\n+\t\tif( ! isset( $_POST['lp_no_check_referer'] ) ) {\n+\t\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n+\t\t}\n+\n+\t\t$this->handle();\n+\n+\t\twp_die();\n+\t}\n+\n+\t\u002F**\n+\t * Handle\n+\t *\n+\t * Override this method to perform any actions required\n+\t * during the async request.\n+\t *\u002F\n+\tabstract protected function handle();\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-background-process.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-background-process.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-background-process.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fclasses\u002Fwp-background-process.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,505 +1,505 @@\n-\u003C?php\r\n-\u002F**\r\n- * WP Background Process\r\n- *\r\n- * @package WP-Background-Processing\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Abstract WP_Background_Process class.\r\n- *\r\n- * @abstract\r\n- * @extends WP_Async_Request\r\n- *\u002F\r\n-abstract class WP_Background_Process extends WP_Async_Request {\r\n-\r\n-\t\u002F**\r\n-\t * Action\r\n-\t *\r\n-\t * (default value: 'background_process')\r\n-\t *\r\n-\t * @var string\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $action = 'background_process';\r\n-\r\n-\t\u002F**\r\n-\t * Start time of current process.\r\n-\t *\r\n-\t * (default value: 0)\r\n-\t *\r\n-\t * @var int\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $start_time = 0;\r\n-\r\n-\t\u002F**\r\n-\t * Cron_hook_identifier\r\n-\t *\r\n-\t * @var mixed\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $cron_hook_identifier;\r\n-\r\n-\t\u002F**\r\n-\t * Cron_interval_identifier\r\n-\t *\r\n-\t * @var mixed\r\n-\t * @access protected\r\n-\t *\u002F\r\n-\tprotected $cron_interval_identifier;\r\n-\r\n-\t\u002F**\r\n-\t * Initiate new background process\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\t$this->cron_hook_identifier     = $this->identifier . '_cron';\r\n-\t\t$this->cron_interval_identifier = $this->identifier . '_cron_interval';\r\n-\r\n-\t\tadd_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );\r\n-\t\tadd_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Dispatch\r\n-\t *\r\n-\t * @access public\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic function dispatch() {\r\n-\t\t\u002F\u002F Schedule the cron healthcheck.\r\n-\t\t$this->schedule_event();\r\n-\r\n-\t\t\u002F\u002F Perform remote post.\r\n-\t\treturn parent::dispatch();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Push to queue\r\n-\t *\r\n-\t * @param mixed $data Data.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function push_to_queue( $data ) {\r\n-\t\t$this->data[] = $data;\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save queue\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function save() {\r\n-\t\t$key = $this->generate_key();\r\n-\r\n-\t\tif ( ! empty( $this->data ) ) {\r\n-\t\t\tupdate_site_option( $key, $this->data );\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update queue\r\n-\t *\r\n-\t * @param string $key  Key.\r\n-\t * @param array  $data Data.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function update( $key, $data ) {\r\n-\t\tif ( ! empty( $data ) ) {\r\n-\t\t\tupdate_site_option( $key, $data );\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete queue\r\n-\t *\r\n-\t * @param string $key Key.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function delete( $key ) {\r\n-\t\tdelete_site_option( $key );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate key\r\n-\t *\r\n-\t * Generates a unique key based on microtime. Queue items are\r\n-\t * given a unique key so that they can be merged upon save.\r\n-\t *\r\n-\t * @param int $length Length.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function generate_key( $length = 64 ) {\r\n-\t\t$unique  = md5( microtime() . rand() );\r\n-\t\t$prepend = $this->identifier . '_batch_';\r\n-\r\n-\t\treturn substr( $prepend . $unique, 0, $length );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Maybe process queue\r\n-\t *\r\n-\t * Checks whether data exists within the queue and that\r\n-\t * the process is not already running.\r\n-\t *\u002F\r\n-\tpublic function maybe_handle() {\r\n-\t\t\u002F\u002F Don't lock up other requests while processing\r\n-\t\tsession_write_close();\r\n-\r\n-\t\tif ( $this->is_process_running() ) {\r\n-\t\t\t\u002F\u002F Background process already running.\r\n-\t\t\twp_die();\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->is_queue_empty() ) {\r\n-\t\t\t\u002F\u002F No data to process.\r\n-\t\t\twp_die();\r\n-\t\t}\r\n-\r\n-\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\r\n-\r\n-\t\t$this->handle();\r\n-\r\n-\t\twp_die();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Is queue empty\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_queue_empty() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$table  = $wpdb->options;\r\n-\t\t$column = 'option_name';\r\n-\r\n-\t\tif ( is_multisite() ) {\r\n-\t\t\t$table  = $wpdb->sitemeta;\r\n-\t\t\t$column = 'meta_key';\r\n-\t\t}\r\n-\r\n-\t\t$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';\r\n-\r\n-\t\t$count = $wpdb->get_var( $wpdb->prepare( \"\r\n-\t\t\tSELECT COUNT(*)\r\n-\t\t\tFROM {$table}\r\n-\t\t\tWHERE {$column} LIKE %s\r\n-\t\t\", $key ) );\r\n-\r\n-\t\treturn ( $count > 0 ) ? false : true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Is process running\r\n-\t *\r\n-\t * Check whether the current process is already running\r\n-\t * in a background process.\r\n-\t *\u002F\r\n-\tprotected function is_process_running() {\r\n-\t\tif ( get_site_transient( $this->identifier . '_process_lock' ) ) {\r\n-\t\t\t\u002F\u002F Process already running.\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Lock process\r\n-\t *\r\n-\t * Lock the process so that multiple instances can't run simultaneously.\r\n-\t * Override if applicable, but the duration should be greater than that\r\n-\t * defined in the time_exceeded() method.\r\n-\t *\u002F\r\n-\tprotected function lock_process() {\r\n-\t\t$this->start_time = time(); \u002F\u002F Set start time of current process.\r\n-\r\n-\t\t$lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; \u002F\u002F 1 minute\r\n-\t\t$lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration );\r\n-\r\n-\t\tset_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Unlock process\r\n-\t *\r\n-\t * Unlock the process so that other instances can spawn.\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tprotected function unlock_process() {\r\n-\t\tdelete_site_transient( $this->identifier . '_process_lock' );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get batch\r\n-\t *\r\n-\t * @return stdClass Return the first batch from the queue\r\n-\t *\u002F\r\n-\tprotected function get_batch() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$table        = $wpdb->options;\r\n-\t\t$column       = 'option_name';\r\n-\t\t$key_column   = 'option_id';\r\n-\t\t$value_column = 'option_value';\r\n-\r\n-\t\tif ( is_multisite() ) {\r\n-\t\t\t$table        = $wpdb->sitemeta;\r\n-\t\t\t$column       = 'meta_key';\r\n-\t\t\t$key_column   = 'meta_id';\r\n-\t\t\t$value_column = 'meta_value';\r\n-\t\t}\r\n-\r\n-\t\t$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';\r\n-\r\n-\t\t$query = $wpdb->get_row( $wpdb->prepare( \"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$table}\r\n-\t\t\tWHERE {$column} LIKE %s\r\n-\t\t\tORDER BY {$key_column} ASC\r\n-\t\t\tLIMIT 1\r\n-\t\t\", $key ) );\r\n-\r\n-\t\t$batch       = new stdClass();\r\n-\t\t$batch->key  = $query->$column;\r\n-\t\t$batch->data = maybe_unserialize( $query->$value_column );\r\n-\r\n-\t\treturn $batch;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle\r\n-\t *\r\n-\t * Pass each queue item to the task handler, while remaining\r\n-\t * within server memory and time limit constraints.\r\n-\t *\u002F\r\n-\tprotected function handle() {\r\n-\t\t$this->lock_process();\r\n-\r\n-\t\tdo {\r\n-\t\t\t$batch = $this->get_batch();\r\n-\r\n-\t\t\tforeach ( $batch->data as $key => $value ) {\r\n-\t\t\t\t$task = $this->task( $value );\r\n-\r\n-\t\t\t\tif ( false !== $task ) {\r\n-\t\t\t\t\t$batch->data[ $key ] = $task;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tunset( $batch->data[ $key ] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $this->time_exceeded() || $this->memory_exceeded() ) {\r\n-\t\t\t\t\t\u002F\u002F Batch limits reached.\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Update or delete current batch.\r\n-\t\t\tif ( ! empty( $batch->data ) ) {\r\n-\t\t\t\t$this->update( $batch->key, $batch->data );\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->delete( $batch->key );\r\n-\t\t\t}\r\n-\t\t} while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() );\r\n-\r\n-\t\t$this->unlock_process();\r\n-\r\n-\t\t\u002F\u002F Start next batch or complete process.\r\n-\t\tif ( ! $this->is_queue_empty() ) {\r\n-\t\t\t$this->dispatch();\r\n-\t\t} else {\r\n-\t\t\t$this->complete();\r\n-\t\t}\r\n-\r\n-\t\twp_die();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Memory exceeded\r\n-\t *\r\n-\t * Ensures the batch process never exceeds 90%\r\n-\t * of the maximum WordPress memory.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function memory_exceeded() {\r\n-\t\t$memory_limit   = $this->get_memory_limit() * 0.9; \u002F\u002F 90% of max memory\r\n-\t\t$current_memory = memory_get_usage( true );\r\n-\t\t$return         = false;\r\n-\r\n-\t\tif ( $current_memory >= $memory_limit ) {\r\n-\t\t\t$return = true;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( $this->identifier . '_memory_exceeded', $return );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get memory limit\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprotected function get_memory_limit() {\r\n-\t\tif ( function_exists( 'ini_get' ) ) {\r\n-\t\t\t$memory_limit = ini_get( 'memory_limit' );\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Sensible default.\r\n-\t\t\t$memory_limit = '128M';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $memory_limit || - 1 === intval( $memory_limit ) ) {\r\n-\t\t\t\u002F\u002F Unlimited, set to 32GB.\r\n-\t\t\t$memory_limit = '32000M';\r\n-\t\t}\r\n-\r\n-\t\treturn wp_convert_hr_to_bytes( $memory_limit );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Time exceeded.\r\n-\t *\r\n-\t * Ensures the batch never exceeds a sensible time limit.\r\n-\t * A timeout limit of 30s is common on shared hosting.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function time_exceeded() {\r\n-\t\t$finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); \u002F\u002F 20 seconds\r\n-\t\t$return = false;\r\n-\r\n-\t\tif ( time() >= $finish ) {\r\n-\t\t\t$return = true;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( $this->identifier . '_time_exceeded', $return );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Complete.\r\n-\t *\r\n-\t * Override if applicable, but ensure that the below actions are\r\n-\t * performed, or, call parent::complete().\r\n-\t *\u002F\r\n-\tprotected function complete() {\r\n-\t\t\u002F\u002F Unschedule the cron healthcheck.\r\n-\t\t$this->clear_scheduled_event();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Schedule cron healthcheck\r\n-\t *\r\n-\t * @access public\r\n-\t *\r\n-\t * @param mixed $schedules Schedules.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function schedule_cron_healthcheck( $schedules ) {\r\n-\t\t$interval = apply_filters( $this->identifier . '_cron_interval', 5 );\r\n-\r\n-\t\tif ( property_exists( $this, 'cron_interval' ) ) {\r\n-\t\t\t$interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Adds every 5 minutes to the existing schedules.\r\n-\t\t$schedules[ $this->identifier . '_cron_interval' ] = array(\r\n-\t\t\t'interval' => MINUTE_IN_SECONDS * $interval,\r\n-\t\t\t'display'  => sprintf( __( 'Every %d Minutes' ), $interval ),\r\n-\t\t);\r\n-\r\n-\t\treturn $schedules;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle cron healthcheck\r\n-\t *\r\n-\t * Restart the background process if not already running\r\n-\t * and data exists in the queue.\r\n-\t *\u002F\r\n-\tpublic function handle_cron_healthcheck() {\r\n-\t\tif ( $this->is_process_running() ) {\r\n-\t\t\t\u002F\u002F Background process already running.\r\n-\t\t\texit;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->is_queue_empty() ) {\r\n-\t\t\t\u002F\u002F No data to process.\r\n-\t\t\t$this->clear_scheduled_event();\r\n-\t\t\texit;\r\n-\t\t}\r\n-\r\n-\t\t$this->handle();\r\n-\r\n-\t\texit;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Schedule event\r\n-\t *\u002F\r\n-\tprotected function schedule_event() {\r\n-\t\tif ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) {\r\n-\t\t\twp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clear scheduled event\r\n-\t *\u002F\r\n-\tprotected function clear_scheduled_event() {\r\n-\t\t$timestamp = wp_next_scheduled( $this->cron_hook_identifier );\r\n-\r\n-\t\tif ( $timestamp ) {\r\n-\t\t\twp_unschedule_event( $timestamp, $this->cron_hook_identifier );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Cancel Process\r\n-\t *\r\n-\t * Stop processing queue items, clear cronjob and delete batch.\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function cancel_process() {\r\n-\t\tif ( ! $this->is_queue_empty() ) {\r\n-\t\t\t$batch = $this->get_batch();\r\n-\r\n-\t\t\t$this->delete( $batch->key );\r\n-\r\n-\t\t\twp_clear_scheduled_hook( $this->cron_hook_identifier );\r\n-\t\t}\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Task\r\n-\t *\r\n-\t * Override this method to perform any actions required on each\r\n-\t * queue item. Return the modified item for further processing\r\n-\t * in the next pass through. Or, return false to remove the\r\n-\t * item from the queue.\r\n-\t *\r\n-\t * @param mixed $item Queue item to iterate over.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tabstract protected function task( $item );\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * WP Background Process\n+ *\n+ * @package WP-Background-Processing\n+ *\u002F\n+\n+\u002F**\n+ * Abstract WP_Background_Process class.\n+ *\n+ * @abstract\n+ * @extends WP_Async_Request\n+ *\u002F\n+abstract class WP_Background_Process extends WP_Async_Request {\n+\n+\t\u002F**\n+\t * Action\n+\t *\n+\t * (default value: 'background_process')\n+\t *\n+\t * @var string\n+\t * @access protected\n+\t *\u002F\n+\tprotected $action = 'background_process';\n+\n+\t\u002F**\n+\t * Start time of current process.\n+\t *\n+\t * (default value: 0)\n+\t *\n+\t * @var int\n+\t * @access protected\n+\t *\u002F\n+\tprotected $start_time = 0;\n+\n+\t\u002F**\n+\t * Cron_hook_identifier\n+\t *\n+\t * @var mixed\n+\t * @access protected\n+\t *\u002F\n+\tprotected $cron_hook_identifier;\n+\n+\t\u002F**\n+\t * Cron_interval_identifier\n+\t *\n+\t * @var mixed\n+\t * @access protected\n+\t *\u002F\n+\tprotected $cron_interval_identifier;\n+\n+\t\u002F**\n+\t * Initiate new background process\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\t$this->cron_hook_identifier     = $this->identifier . '_cron';\n+\t\t$this->cron_interval_identifier = $this->identifier . '_cron_interval';\n+\n+\t\tadd_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );\n+\t\tadd_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Dispatch\n+\t *\n+\t * @access public\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic function dispatch() {\n+\t\t\u002F\u002F Schedule the cron healthcheck.\n+\t\t$this->schedule_event();\n+\n+\t\t\u002F\u002F Perform remote post.\n+\t\treturn parent::dispatch();\n+\t}\n+\n+\t\u002F**\n+\t * Push to queue\n+\t *\n+\t * @param mixed $data Data.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function push_to_queue( $data ) {\n+\t\t$this->data[] = $data;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Save queue\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function save() {\n+\t\t$key = $this->generate_key();\n+\n+\t\tif ( ! empty( $this->data ) ) {\n+\t\t\tupdate_site_option( $key, $this->data );\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Update queue\n+\t *\n+\t * @param string $key  Key.\n+\t * @param array  $data Data.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function update( $key, $data ) {\n+\t\tif ( ! empty( $data ) ) {\n+\t\t\tupdate_site_option( $key, $data );\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete queue\n+\t *\n+\t * @param string $key Key.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function delete( $key ) {\n+\t\tdelete_site_option( $key );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Generate key\n+\t *\n+\t * Generates a unique key based on microtime. Queue items are\n+\t * given a unique key so that they can be merged upon save.\n+\t *\n+\t * @param int $length Length.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function generate_key( $length = 64 ) {\n+\t\t$unique  = md5( microtime() . rand() );\n+\t\t$prepend = $this->identifier . '_batch_';\n+\n+\t\treturn substr( $prepend . $unique, 0, $length );\n+\t}\n+\n+\t\u002F**\n+\t * Maybe process queue\n+\t *\n+\t * Checks whether data exists within the queue and that\n+\t * the process is not already running.\n+\t *\u002F\n+\tpublic function maybe_handle() {\n+\t\t\u002F\u002F Don't lock up other requests while processing\n+\t\tsession_write_close();\n+\n+\t\tif ( $this->is_process_running() ) {\n+\t\t\t\u002F\u002F Background process already running.\n+\t\t\twp_die();\n+\t\t}\n+\n+\t\tif ( $this->is_queue_empty() ) {\n+\t\t\t\u002F\u002F No data to process.\n+\t\t\twp_die();\n+\t\t}\n+\n+\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n+\n+\t\t$this->handle();\n+\n+\t\twp_die();\n+\t}\n+\n+\t\u002F**\n+\t * Is queue empty\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_queue_empty() {\n+\t\tglobal $wpdb;\n+\n+\t\t$table  = $wpdb->options;\n+\t\t$column = 'option_name';\n+\n+\t\tif ( is_multisite() ) {\n+\t\t\t$table  = $wpdb->sitemeta;\n+\t\t\t$column = 'meta_key';\n+\t\t}\n+\n+\t\t$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';\n+\n+\t\t$count = $wpdb->get_var( $wpdb->prepare( \"\n+\t\t\tSELECT COUNT(*)\n+\t\t\tFROM {$table}\n+\t\t\tWHERE {$column} LIKE %s\n+\t\t\", $key ) );\n+\n+\t\treturn ( $count > 0 ) ? false : true;\n+\t}\n+\n+\t\u002F**\n+\t * Is process running\n+\t *\n+\t * Check whether the current process is already running\n+\t * in a background process.\n+\t *\u002F\n+\tprotected function is_process_running() {\n+\t\tif ( get_site_transient( $this->identifier . '_process_lock' ) ) {\n+\t\t\t\u002F\u002F Process already running.\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Lock process\n+\t *\n+\t * Lock the process so that multiple instances can't run simultaneously.\n+\t * Override if applicable, but the duration should be greater than that\n+\t * defined in the time_exceeded() method.\n+\t *\u002F\n+\tprotected function lock_process() {\n+\t\t$this->start_time = time(); \u002F\u002F Set start time of current process.\n+\n+\t\t$lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; \u002F\u002F 1 minute\n+\t\t$lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration );\n+\n+\t\tset_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration );\n+\t}\n+\n+\t\u002F**\n+\t * Unlock process\n+\t *\n+\t * Unlock the process so that other instances can spawn.\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tprotected function unlock_process() {\n+\t\tdelete_site_transient( $this->identifier . '_process_lock' );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get batch\n+\t *\n+\t * @return stdClass Return the first batch from the queue\n+\t *\u002F\n+\tprotected function get_batch() {\n+\t\tglobal $wpdb;\n+\n+\t\t$table        = $wpdb->options;\n+\t\t$column       = 'option_name';\n+\t\t$key_column   = 'option_id';\n+\t\t$value_column = 'option_value';\n+\n+\t\tif ( is_multisite() ) {\n+\t\t\t$table        = $wpdb->sitemeta;\n+\t\t\t$column       = 'meta_key';\n+\t\t\t$key_column   = 'meta_id';\n+\t\t\t$value_column = 'meta_value';\n+\t\t}\n+\n+\t\t$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';\n+\n+\t\t$query = $wpdb->get_row( $wpdb->prepare( \"\n+\t\t\tSELECT *\n+\t\t\tFROM {$table}\n+\t\t\tWHERE {$column} LIKE %s\n+\t\t\tORDER BY {$key_column} ASC\n+\t\t\tLIMIT 1\n+\t\t\", $key ) );\n+\n+\t\t$batch       = new stdClass();\n+\t\t$batch->key  = $query->$column;\n+\t\t$batch->data = maybe_unserialize( $query->$value_column );\n+\n+\t\treturn $batch;\n+\t}\n+\n+\t\u002F**\n+\t * Handle\n+\t *\n+\t * Pass each queue item to the task handler, while remaining\n+\t * within server memory and time limit constraints.\n+\t *\u002F\n+\tprotected function handle() {\n+\t\t$this->lock_process();\n+\n+\t\tdo {\n+\t\t\t$batch = $this->get_batch();\n+\n+\t\t\tforeach ( $batch->data as $key => $value ) {\n+\t\t\t\t$task = $this->task( $value );\n+\n+\t\t\t\tif ( false !== $task ) {\n+\t\t\t\t\t$batch->data[ $key ] = $task;\n+\t\t\t\t} else {\n+\t\t\t\t\tunset( $batch->data[ $key ] );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $this->time_exceeded() || $this->memory_exceeded() ) {\n+\t\t\t\t\t\u002F\u002F Batch limits reached.\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Update or delete current batch.\n+\t\t\tif ( ! empty( $batch->data ) ) {\n+\t\t\t\t$this->update( $batch->key, $batch->data );\n+\t\t\t} else {\n+\t\t\t\t$this->delete( $batch->key );\n+\t\t\t}\n+\t\t} while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() );\n+\n+\t\t$this->unlock_process();\n+\n+\t\t\u002F\u002F Start next batch or complete process.\n+\t\tif ( ! $this->is_queue_empty() ) {\n+\t\t\t$this->dispatch();\n+\t\t} else {\n+\t\t\t$this->complete();\n+\t\t}\n+\n+\t\twp_die();\n+\t}\n+\n+\t\u002F**\n+\t * Memory exceeded\n+\t *\n+\t * Ensures the batch process never exceeds 90%\n+\t * of the maximum WordPress memory.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function memory_exceeded() {\n+\t\t$memory_limit   = $this->get_memory_limit() * 0.9; \u002F\u002F 90% of max memory\n+\t\t$current_memory = memory_get_usage( true );\n+\t\t$return         = false;\n+\n+\t\tif ( $current_memory >= $memory_limit ) {\n+\t\t\t$return = true;\n+\t\t}\n+\n+\t\treturn apply_filters( $this->identifier . '_memory_exceeded', $return );\n+\t}\n+\n+\t\u002F**\n+\t * Get memory limit\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprotected function get_memory_limit() {\n+\t\tif ( function_exists( 'ini_get' ) ) {\n+\t\t\t$memory_limit = ini_get( 'memory_limit' );\n+\t\t} else {\n+\t\t\t\u002F\u002F Sensible default.\n+\t\t\t$memory_limit = '128M';\n+\t\t}\n+\n+\t\tif ( ! $memory_limit || - 1 === intval( $memory_limit ) ) {\n+\t\t\t\u002F\u002F Unlimited, set to 32GB.\n+\t\t\t$memory_limit = '32000M';\n+\t\t}\n+\n+\t\treturn wp_convert_hr_to_bytes( $memory_limit );\n+\t}\n+\n+\t\u002F**\n+\t * Time exceeded.\n+\t *\n+\t * Ensures the batch never exceeds a sensible time limit.\n+\t * A timeout limit of 30s is common on shared hosting.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function time_exceeded() {\n+\t\t$finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); \u002F\u002F 20 seconds\n+\t\t$return = false;\n+\n+\t\tif ( time() >= $finish ) {\n+\t\t\t$return = true;\n+\t\t}\n+\n+\t\treturn apply_filters( $this->identifier . '_time_exceeded', $return );\n+\t}\n+\n+\t\u002F**\n+\t * Complete.\n+\t *\n+\t * Override if applicable, but ensure that the below actions are\n+\t * performed, or, call parent::complete().\n+\t *\u002F\n+\tprotected function complete() {\n+\t\t\u002F\u002F Unschedule the cron healthcheck.\n+\t\t$this->clear_scheduled_event();\n+\t}\n+\n+\t\u002F**\n+\t * Schedule cron healthcheck\n+\t *\n+\t * @access public\n+\t *\n+\t * @param mixed $schedules Schedules.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function schedule_cron_healthcheck( $schedules ) {\n+\t\t$interval = apply_filters( $this->identifier . '_cron_interval', 5 );\n+\n+\t\tif ( property_exists( $this, 'cron_interval' ) ) {\n+\t\t\t$interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval );\n+\t\t}\n+\n+\t\t\u002F\u002F Adds every 5 minutes to the existing schedules.\n+\t\t$schedules[ $this->identifier . '_cron_interval' ] = array(\n+\t\t\t'interval' => MINUTE_IN_SECONDS * $interval,\n+\t\t\t'display'  => sprintf( __( 'Every %d Minutes' ), $interval ),\n+\t\t);\n+\n+\t\treturn $schedules;\n+\t}\n+\n+\t\u002F**\n+\t * Handle cron healthcheck\n+\t *\n+\t * Restart the background process if not already running\n+\t * and data exists in the queue.\n+\t *\u002F\n+\tpublic function handle_cron_healthcheck() {\n+\t\tif ( $this->is_process_running() ) {\n+\t\t\t\u002F\u002F Background process already running.\n+\t\t\texit;\n+\t\t}\n+\n+\t\tif ( $this->is_queue_empty() ) {\n+\t\t\t\u002F\u002F No data to process.\n+\t\t\t$this->clear_scheduled_event();\n+\t\t\texit;\n+\t\t}\n+\n+\t\t$this->handle();\n+\n+\t\texit;\n+\t}\n+\n+\t\u002F**\n+\t * Schedule event\n+\t *\u002F\n+\tprotected function schedule_event() {\n+\t\tif ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) {\n+\t\t\twp_schedule_event( time(), $this->cron_interval_identifier, $this->cron_hook_identifier );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Clear scheduled event\n+\t *\u002F\n+\tprotected function clear_scheduled_event() {\n+\t\t$timestamp = wp_next_scheduled( $this->cron_hook_identifier );\n+\n+\t\tif ( $timestamp ) {\n+\t\t\twp_unschedule_event( $timestamp, $this->cron_hook_identifier );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Cancel Process\n+\t *\n+\t * Stop processing queue items, clear cronjob and delete batch.\n+\t *\n+\t *\u002F\n+\tpublic function cancel_process() {\n+\t\tif ( ! $this->is_queue_empty() ) {\n+\t\t\t$batch = $this->get_batch();\n+\n+\t\t\t$this->delete( $batch->key );\n+\n+\t\t\twp_clear_scheduled_hook( $this->cron_hook_identifier );\n+\t\t}\n+\n+\t}\n+\n+\t\u002F**\n+\t * Task\n+\t *\n+\t * Override this method to perform any actions required on each\n+\t * queue item. Return the modified item for further processing\n+\t * in the next pass through. Or, return false to remove the\n+\t * item from the queue.\n+\t *\n+\t * @param mixed $item Queue item to iterate over.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tabstract protected function task( $item );\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fcomposer.json \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fcomposer.json\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fcomposer.json\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fcomposer.json\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-{\r\n-  \"name\": \"deliciousbrains\u002Fwp-background-processing\",\r\n-  \"description\": \"WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.\",\r\n-  \"type\": \"library\",\r\n-  \"require\": {\r\n-    \"php\": \">=5.2\"\r\n-  },\r\n-  \"suggest\": {\r\n-    \"coenjacobs\u002Fmozart\": \"Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library\"\r\n-  },\r\n-  \"license\": \"GPL-2.0-or-later\",\r\n-  \"authors\": [\r\n-    {\r\n-      \"name\": \"Delicious Brains\",\r\n-      \"email\": \"nom@deliciousbrains.com\"\r\n-    }\r\n-  ],\r\n-  \"autoload\": {\r\n-    \"classmap\": [ \"classes\u002F\" ]\r\n-  }\r\n+{\n+  \"name\": \"deliciousbrains\u002Fwp-background-processing\",\n+  \"description\": \"WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks.\",\n+  \"type\": \"library\",\n+  \"require\": {\n+    \"php\": \">=5.2\"\n+  },\n+  \"suggest\": {\n+    \"coenjacobs\u002Fmozart\": \"Easily wrap this library with your own prefix, to prevent collisions when multiple plugins use this library\"\n+  },\n+  \"license\": \"GPL-2.0-or-later\",\n+  \"authors\": [\n+    {\n+      \"name\": \"Delicious Brains\",\n+      \"email\": \"nom@deliciousbrains.com\"\n+    }\n+  ],\n+  \"autoload\": {\n+    \"classmap\": [ \"classes\u002F\" ]\n+  }\n }\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Flicense.txt \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Flicense.txt\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Flicense.txt\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Flicense.txt\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,280 +1,280 @@\n-        GNU GENERAL PUBLIC LICENSE\r\n-           Version 2, June 1991\r\n-\r\n- Copyright (C) 1989, 1991 Free Software Foundation, Inc.\r\n-              51 Franklin St, Fifth Floor, Boston, MA 02110, USA\r\n-\r\n- Everyone is permitted to copy and distribute verbatim copies\r\n- of this license document, but changing it is not allowed.\r\n-\r\n-          Preamble\r\n-\r\n-  The licenses for most software are designed to take away your\r\n-freedom to share and change it.  By contrast, the GNU General Public\r\n-License is intended to guarantee your freedom to share and change free\r\n-software--to make sure the software is free for all its users.  This\r\n-General Public License applies to most of the Free Software\r\n-Foundation's software and to any other program whose authors commit to\r\n-using it.  (Some other Free Software Foundation software is covered by\r\n-the GNU Library General Public License instead.)  You can apply it to\r\n-your programs, too.\r\n-\r\n-  When we speak of free software, we are referring to freedom, not\r\n-price.  Our General Public Licenses are designed to make sure that you\r\n-have the freedom to distribute copies of free software (and charge for\r\n-this service if you wish), that you receive source code or can get it\r\n-if you want it, that you can change the software or use pieces of it\r\n-in new free programs; and that you know you can do these things.\r\n-\r\n-  To protect your rights, we need to make restrictions that forbid\r\n-anyone to deny you these rights or to ask you to surrender the rights.\r\n-These restrictions translate to certain responsibilities for you if you\r\n-distribute copies of the software, or if you modify it.\r\n-\r\n-  For example, if you distribute copies of such a program, whether\r\n-gratis or for a fee, you must give the recipients all the rights that\r\n-you have.  You must make sure that they, too, receive or can get the\r\n-source code.  And you must show them these terms so they know their\r\n-rights.\r\n-\r\n-  We protect your rights with two steps: (1) copyright the software, and\r\n-(2) offer you this license which gives you legal permission to copy,\r\n-distribute and\u002For modify the software.\r\n-\r\n-  Also, for each author's protection and ours, we want to make certain\r\n-that everyone understands that there is no warranty for this free\r\n-software.  If the software is modified by someone else and passed on, we\r\n-want its recipients to know that what they have is not the original, so\r\n-that any problems introduced by others will not reflect on the original\r\n-authors' reputations.\r\n-\r\n-  Finally, any free program is threatened constantly by software\r\n-patents.  We wish to avoid the danger that redistributors of a free\r\n-program will individually obtain patent licenses, in effect making the\r\n-program proprietary.  To prevent this, we have made it clear that any\r\n-patent must be licensed for everyone's free use or not licensed at all.\r\n-\r\n-  The precise terms and conditions for copying, distribution and\r\n-modification follow.\r\n-\r\n-        GNU GENERAL PUBLIC LICENSE\r\n-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r\n-\r\n-  0. This License applies to any program or other work which contains\r\n-a notice placed by the copyright holder saying it may be distributed\r\n-under the terms of this General Public License.  The \"Program\", below,\r\n-refers to any such program or work, and a \"work based on the Program\"\r\n-means either the Program or any derivative work under copyright law:\r\n-that is to say, a work containing the Program or a portion of it,\r\n-either verbatim or with modifications and\u002For translated into another\r\n-language.  (Hereinafter, translation is included without limitation in\r\n-the term \"modification\".)  Each licensee is addressed as \"you\".\r\n-\r\n-Activities other than copying, distribution and modification are not\r\n-covered by this License; they are outside its scope.  The act of\r\n-running the Program is not restricted, and the output from the Program\r\n-is covered only if its contents constitute a work based on the\r\n-Program (independent of having been made by running the Program).\r\n-Whether that is true depends on what the Program does.\r\n-\r\n-  1. You may copy and distribute verbatim copies of the Program's\r\n-source code as you receive it, in any medium, provided that you\r\n-conspicuously and appropriately publish on each copy an appropriate\r\n-copyright notice and disclaimer of warranty; keep intact all the\r\n-notices that refer to this License and to the absence of any warranty;\r\n-and give any other recipients of the Program a copy of this License\r\n-along with the Program.\r\n-\r\n-You may charge a fee for the physical act of transferring a copy, and\r\n-you may at your option offer warranty protection in exchange for a fee.\r\n-\r\n-  2. You may modify your copy or copies of the Program or any portion\r\n-of it, thus forming a work based on the Program, and copy and\r\n-distribute such modifications or work under the terms of Section 1\r\n-above, provided that you also meet all of these conditions:\r\n-\r\n-    a) You must cause the modified files to carry prominent notices\r\n-    stating that you changed the files and the date of any change.\r\n-\r\n-    b) You must cause any work that you distribute or publish, that in\r\n-    whole or in part contains or is derived from the Program or any\r\n-    part thereof, to be licensed as a whole at no charge to all third\r\n-    parties under the terms of this License.\r\n-\r\n-    c) If the modified program normally reads commands interactively\r\n-    when run, you must cause it, when started running for such\r\n-    interactive use in the most ordinary way, to print or display an\r\n-    announcement including an appropriate copyright notice and a\r\n-    notice that there is no warranty (or else, saying that you provide\r\n-    a warranty) and that users may redistribute the program under\r\n-    these conditions, and telling the user how to view a copy of this\r\n-    License.  (Exception: if the Program itself is interactive but\r\n-    does not normally print such an announcement, your work based on\r\n-    the Program is not required to print an announcement.)\r\n-\r\n-These requirements apply to the modified work as a whole.  If\r\n-identifiable sections of that work are not derived from the Program,\r\n-and can be reasonably considered independent and separate works in\r\n-themselves, then this License, and its terms, do not apply to those\r\n-sections when you distribute them as separate works.  But when you\r\n-distribute the same sections as part of a whole which is a work based\r\n-on the Program, the distribution of the whole must be on the terms of\r\n-this License, whose permissions for other licensees extend to the\r\n-entire whole, and thus to each and every part regardless of who wrote it.\r\n-Thus, it is not the intent of this section to claim rights or contest\r\n-your rights to work written entirely by you; rather, the intent is to\r\n-exercise the right to control the distribution of derivative or\r\n-collective works based on the Program.\r\n-\r\n-In addition, mere aggregation of another work not based on the Program\r\n-with the Program (or with a work based on the Program) on a volume of\r\n-a storage or distribution medium does not bring the other work under\r\n-the scope of this License.\r\n-\r\n-  3. You may copy and distribute the Program (or a work based on it,\r\n-under Section 2) in object code or executable form under the terms of\r\n-Sections 1 and 2 above provided that you also do one of the following:\r\n-\r\n-    a) Accompany it with the complete corresponding machine-readable\r\n-    source code, which must be distributed under the terms of Sections\r\n-    1 and 2 above on a medium customarily used for software interchange; or,\r\n-\r\n-    b) Accompany it with a written offer, valid for at least three\r\n-    years, to give any third party, for a charge no more than your\r\n-    cost of physically performing source distribution, a complete\r\n-    machine-readable copy of the corresponding source code, to be\r\n-    distributed under the terms of Sections 1 and 2 above on a medium\r\n-    customarily used for software interchange; or,\r\n-\r\n-    c) Accompany it with the information you received as to the offer\r\n-    to distribute corresponding source code.  (This alternative is\r\n-    allowed only for noncommercial distribution and only if you\r\n-    received the program in object code or executable form with such\r\n-    an offer, in accord with Subsection b above.)\r\n-\r\n-The source code for a work means the preferred form of the work for\r\n-making modifications to it.  For an executable work, complete source\r\n-code means all the source code for all modules it contains, plus any\r\n-associated interface definition files, plus the scripts used to\r\n-control compilation and installation of the executable.  However, as a\r\n-special exception, the source code distributed need not include\r\n-anything that is normally distributed (in either source or binary\r\n-form) with the major components (compiler, kernel, and so on) of the\r\n-operating system on which the executable runs, unless that component\r\n-itself accompanies the executable.\r\n-\r\n-If distribution of executable or object code is made by offering\r\n-access to copy from a designated place, then offering equivalent\r\n-access to copy the source code from the same place counts as\r\n-distribution of the source code, even though third parties are not\r\n-compelled to copy the source along with the object code.\r\n-\r\n-  4. You may not copy, modify, sublicense, or distribute the Program\r\n-except as expressly provided under this License.  Any attempt\r\n-otherwise to copy, modify, sublicense or distribute the Program is\r\n-void, and will automatically terminate your rights under this License.\r\n-However, parties who have received copies, or rights, from you under\r\n-this License will not have their licenses terminated so long as such\r\n-parties remain in full compliance.\r\n-\r\n-  5. You are not required to accept this License, since you have not\r\n-signed it.  However, nothing else grants you permission to modify or\r\n-distribute the Program or its derivative works.  These actions are\r\n-prohibited by law if you do not accept this License.  Therefore, by\r\n-modifying or distributing the Program (or any work based on the\r\n-Program), you indicate your acceptance of this License to do so, and\r\n-all its terms and conditions for copying, distributing or modifying\r\n-the Program or works based on it.\r\n-\r\n-  6. Each time you redistribute the Program (or any work based on the\r\n-Program), the recipient automatically receives a license from the\r\n-original licensor to copy, distribute or modify the Program subject to\r\n-these terms and conditions.  You may not impose any further\r\n-restrictions on the recipients' exercise of the rights granted herein.\r\n-You are not responsible for enforcing compliance by third parties to\r\n-this License.\r\n-\r\n-  7. If, as a consequence of a court judgment or allegation of patent\r\n-infringement or for any other reason (not limited to patent issues),\r\n-conditions are imposed on you (whether by court order, agreement or\r\n-otherwise) that contradict the conditions of this License, they do not\r\n-excuse you from the conditions of this License.  If you cannot\r\n-distribute so as to satisfy simultaneously your obligations under this\r\n-License and any other pertinent obligations, then as a consequence you\r\n-may not distribute the Program at all.  For example, if a patent\r\n-license would not permit royalty-free redistribution of the Program by\r\n-all those who receive copies directly or indirectly through you, then\r\n-the only way you could satisfy both it and this License would be to\r\n-refrain entirely from distribution of the Program.\r\n-\r\n-If any portion of this section is held invalid or unenforceable under\r\n-any particular circumstance, the balance of the section is intended to\r\n-apply and the section as a whole is intended to apply in other\r\n-circumstances.\r\n-\r\n-It is not the purpose of this section to induce you to infringe any\r\n-patents or other property right claims or to contest validity of any\r\n-such claims; this section has the sole purpose of protecting the\r\n-integrity of the free software distribution system, which is\r\n-implemented by public license practices.  Many people have made\r\n-generous contributions to the wide range of software distributed\r\n-through that system in reliance on consistent application of that\r\n-system; it is up to the author\u002Fdonor to decide if he or she is willing\r\n-to distribute software through any other system and a licensee cannot\r\n-impose that choice.\r\n-\r\n-This section is intended to make thoroughly clear what is believed to\r\n-be a consequence of the rest of this License.\r\n-\r\n-  8. If the distribution and\u002For use of the Program is restricted in\r\n-certain countries either by patents or by copyrighted interfaces, the\r\n-original copyright holder who places the Program under this License\r\n-may add an explicit geographical distribution limitation excluding\r\n-those countries, so that distribution is permitted only in or among\r\n-countries not thus excluded.  In such case, this License incorporates\r\n-the limitation as if written in the body of this License.\r\n-\r\n-  9. The Free Software Foundation may publish revised and\u002For new versions\r\n-of the General Public License from time to time.  Such new versions will\r\n-be similar in spirit to the present version, but may differ in detail to\r\n-address new problems or concerns.\r\n-\r\n-Each version is given a distinguishing version number.  If the Program\r\n-specifies a version number of this License which applies to it and \"any\r\n-later version\", you have the option of following the terms and conditions\r\n-either of that version or of any later version published by the Free\r\n-Software Foundation.  If the Program does not specify a version number of\r\n-this License, you may choose any version ever published by the Free Software\r\n-Foundation.\r\n-\r\n-  10. If you wish to incorporate parts of the Program into other free\r\n-programs whose distribution conditions are different, write to the author\r\n-to ask for permission.  For software which is copyrighted by the Free\r\n-Software Foundation, write to the Free Software Foundation; we sometimes\r\n-make exceptions for this.  Our decision will be guided by the two goals\r\n-of preserving the free status of all derivatives of our free software and\r\n-of promoting the sharing and reuse of software generally.\r\n-\r\n-          NO WARRANTY\r\n-\r\n-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r\n-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\r\n-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND\u002FOR OTHER PARTIES\r\n-PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r\n-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\r\n-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\r\n-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r\n-REPAIR OR CORRECTION.\r\n-\r\n-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r\n-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND\u002FOR\r\n-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r\n-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r\n-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r\n-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r\n-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r\n-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r\n-POSSIBILITY OF SUCH DAMAGES.\r\n-\r\n+        GNU GENERAL PUBLIC LICENSE\n+           Version 2, June 1991\n+\n+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n+              51 Franklin St, Fifth Floor, Boston, MA 02110, USA\n+\n+ Everyone is permitted to copy and distribute verbatim copies\n+ of this license document, but changing it is not allowed.\n+\n+          Preamble\n+\n+  The licenses for most software are designed to take away your\n+freedom to share and change it.  By contrast, the GNU General Public\n+License is intended to guarantee your freedom to share and change free\n+software--to make sure the software is free for all its users.  This\n+General Public License applies to most of the Free Software\n+Foundation's software and to any other program whose authors commit to\n+using it.  (Some other Free Software Foundation software is covered by\n+the GNU Library General Public License instead.)  You can apply it to\n+your programs, too.\n+\n+  When we speak of free software, we are referring to freedom, not\n+price.  Our General Public Licenses are designed to make sure that you\n+have the freedom to distribute copies of free software (and charge for\n+this service if you wish), that you receive source code or can get it\n+if you want it, that you can change the software or use pieces of it\n+in new free programs; and that you know you can do these things.\n+\n+  To protect your rights, we need to make restrictions that forbid\n+anyone to deny you these rights or to ask you to surrender the rights.\n+These restrictions translate to certain responsibilities for you if you\n+distribute copies of the software, or if you modify it.\n+\n+  For example, if you distribute copies of such a program, whether\n+gratis or for a fee, you must give the recipients all the rights that\n+you have.  You must make sure that they, too, receive or can get the\n+source code.  And you must show them these terms so they know their\n+rights.\n+\n+  We protect your rights with two steps: (1) copyright the software, and\n+(2) offer you this license which gives you legal permission to copy,\n+distribute and\u002For modify the software.\n+\n+  Also, for each author's protection and ours, we want to make certain\n+that everyone understands that there is no warranty for this free\n+software.  If the software is modified by someone else and passed on, we\n+want its recipients to know that what they have is not the original, so\n+that any problems introduced by others will not reflect on the original\n+authors' reputations.\n+\n+  Finally, any free program is threatened constantly by software\n+patents.  We wish to avoid the danger that redistributors of a free\n+program will individually obtain patent licenses, in effect making the\n+program proprietary.  To prevent this, we have made it clear that any\n+patent must be licensed for everyone's free use or not licensed at all.\n+\n+  The precise terms and conditions for copying, distribution and\n+modification follow.\n+\n+        GNU GENERAL PUBLIC LICENSE\n+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n+\n+  0. This License applies to any program or other work which contains\n+a notice placed by the copyright holder saying it may be distributed\n+under the terms of this General Public License.  The \"Program\", below,\n+refers to any such program or work, and a \"work based on the Program\"\n+means either the Program or any derivative work under copyright law:\n+that is to say, a work containing the Program or a portion of it,\n+either verbatim or with modifications and\u002For translated into another\n+language.  (Hereinafter, translation is included without limitation in\n+the term \"modification\".)  Each licensee is addressed as \"you\".\n+\n+Activities other than copying, distribution and modification are not\n+covered by this License; they are outside its scope.  The act of\n+running the Program is not restricted, and the output from the Program\n+is covered only if its contents constitute a work based on the\n+Program (independent of having been made by running the Program).\n+Whether that is true depends on what the Program does.\n+\n+  1. You may copy and distribute verbatim copies of the Program's\n+source code as you receive it, in any medium, provided that you\n+conspicuously and appropriately publish on each copy an appropriate\n+copyright notice and disclaimer of warranty; keep intact all the\n+notices that refer to this License and to the absence of any warranty;\n+and give any other recipients of the Program a copy of this License\n+along with the Program.\n+\n+You may charge a fee for the physical act of transferring a copy, and\n+you may at your option offer warranty protection in exchange for a fee.\n+\n+  2. You may modify your copy or copies of the Program or any portion\n+of it, thus forming a work based on the Program, and copy and\n+distribute such modifications or work under the terms of Section 1\n+above, provided that you also meet all of these conditions:\n+\n+    a) You must cause the modified files to carry prominent notices\n+    stating that you changed the files and the date of any change.\n+\n+    b) You must cause any work that you distribute or publish, that in\n+    whole or in part contains or is derived from the Program or any\n+    part thereof, to be licensed as a whole at no charge to all third\n+    parties under the terms of this License.\n+\n+    c) If the modified program normally reads commands interactively\n+    when run, you must cause it, when started running for such\n+    interactive use in the most ordinary way, to print or display an\n+    announcement including an appropriate copyright notice and a\n+    notice that there is no warranty (or else, saying that you provide\n+    a warranty) and that users may redistribute the program under\n+    these conditions, and telling the user how to view a copy of this\n+    License.  (Exception: if the Program itself is interactive but\n+    does not normally print such an announcement, your work based on\n+    the Program is not required to print an announcement.)\n+\n+These requirements apply to the modified work as a whole.  If\n+identifiable sections of that work are not derived from the Program,\n+and can be reasonably considered independent and separate works in\n+themselves, then this License, and its terms, do not apply to those\n+sections when you distribute them as separate works.  But when you\n+distribute the same sections as part of a whole which is a work based\n+on the Program, the distribution of the whole must be on the terms of\n+this License, whose permissions for other licensees extend to the\n+entire whole, and thus to each and every part regardless of who wrote it.\n+Thus, it is not the intent of this section to claim rights or contest\n+your rights to work written entirely by you; rather, the intent is to\n+exercise the right to control the distribution of derivative or\n+collective works based on the Program.\n+\n+In addition, mere aggregation of another work not based on the Program\n+with the Program (or with a work based on the Program) on a volume of\n+a storage or distribution medium does not bring the other work under\n+the scope of this License.\n+\n+  3. You may copy and distribute the Program (or a work based on it,\n+under Section 2) in object code or executable form under the terms of\n+Sections 1 and 2 above provided that you also do one of the following:\n+\n+    a) Accompany it with the complete corresponding machine-readable\n+    source code, which must be distributed under the terms of Sections\n+    1 and 2 above on a medium customarily used for software interchange; or,\n+\n+    b) Accompany it with a written offer, valid for at least three\n+    years, to give any third party, for a charge no more than your\n+    cost of physically performing source distribution, a complete\n+    machine-readable copy of the corresponding source code, to be\n+    distributed under the terms of Sections 1 and 2 above on a medium\n+    customarily used for software interchange; or,\n+\n+    c) Accompany it with the information you received as to the offer\n+    to distribute corresponding source code.  (This alternative is\n+    allowed only for noncommercial distribution and only if you\n+    received the program in object code or executable form with such\n+    an offer, in accord with Subsection b above.)\n+\n+The source code for a work means the preferred form of the work for\n+making modifications to it.  For an executable work, complete source\n+code means all the source code for all modules it contains, plus any\n+associated interface definition files, plus the scripts used to\n+control compilation and installation of the executable.  However, as a\n+special exception, the source code distributed need not include\n+anything that is normally distributed (in either source or binary\n+form) with the major components (compiler, kernel, and so on) of the\n+operating system on which the executable runs, unless that component\n+itself accompanies the executable.\n+\n+If distribution of executable or object code is made by offering\n+access to copy from a designated place, then offering equivalent\n+access to copy the source code from the same place counts as\n+distribution of the source code, even though third parties are not\n+compelled to copy the source along with the object code.\n+\n+  4. You may not copy, modify, sublicense, or distribute the Program\n+except as expressly provided under this License.  Any attempt\n+otherwise to copy, modify, sublicense or distribute the Program is\n+void, and will automatically terminate your rights under this License.\n+However, parties who have received copies, or rights, from you under\n+this License will not have their licenses terminated so long as such\n+parties remain in full compliance.\n+\n+  5. You are not required to accept this License, since you have not\n+signed it.  However, nothing else grants you permission to modify or\n+distribute the Program or its derivative works.  These actions are\n+prohibited by law if you do not accept this License.  Therefore, by\n+modifying or distributing the Program (or any work based on the\n+Program), you indicate your acceptance of this License to do so, and\n+all its terms and conditions for copying, distributing or modifying\n+the Program or works based on it.\n+\n+  6. Each time you redistribute the Program (or any work based on the\n+Program), the recipient automatically receives a license from the\n+original licensor to copy, distribute or modify the Program subject to\n+these terms and conditions.  You may not impose any further\n+restrictions on the recipients' exercise of the rights granted herein.\n+You are not responsible for enforcing compliance by third parties to\n+this License.\n+\n+  7. If, as a consequence of a court judgment or allegation of patent\n+infringement or for any other reason (not limited to patent issues),\n+conditions are imposed on you (whether by court order, agreement or\n+otherwise) that contradict the conditions of this License, they do not\n+excuse you from the conditions of this License.  If you cannot\n+distribute so as to satisfy simultaneously your obligations under this\n+License and any other pertinent obligations, then as a consequence you\n+may not distribute the Program at all.  For example, if a patent\n+license would not permit royalty-free redistribution of the Program by\n+all those who receive copies directly or indirectly through you, then\n+the only way you could satisfy both it and this License would be to\n+refrain entirely from distribution of the Program.\n+\n+If any portion of this section is held invalid or unenforceable under\n+any particular circumstance, the balance of the section is intended to\n+apply and the section as a whole is intended to apply in other\n+circumstances.\n+\n+It is not the purpose of this section to induce you to infringe any\n+patents or other property right claims or to contest validity of any\n+such claims; this section has the sole purpose of protecting the\n+integrity of the free software distribution system, which is\n+implemented by public license practices.  Many people have made\n+generous contributions to the wide range of software distributed\n+through that system in reliance on consistent application of that\n+system; it is up to the author\u002Fdonor to decide if he or she is willing\n+to distribute software through any other system and a licensee cannot\n+impose that choice.\n+\n+This section is intended to make thoroughly clear what is believed to\n+be a consequence of the rest of this License.\n+\n+  8. If the distribution and\u002For use of the Program is restricted in\n+certain countries either by patents or by copyrighted interfaces, the\n+original copyright holder who places the Program under this License\n+may add an explicit geographical distribution limitation excluding\n+those countries, so that distribution is permitted only in or among\n+countries not thus excluded.  In such case, this License incorporates\n+the limitation as if written in the body of this License.\n+\n+  9. The Free Software Foundation may publish revised and\u002For new versions\n+of the General Public License from time to time.  Such new versions will\n+be similar in spirit to the present version, but may differ in detail to\n+address new problems or concerns.\n+\n+Each version is given a distinguishing version number.  If the Program\n+specifies a version number of this License which applies to it and \"any\n+later version\", you have the option of following the terms and conditions\n+either of that version or of any later version published by the Free\n+Software Foundation.  If the Program does not specify a version number of\n+this License, you may choose any version ever published by the Free Software\n+Foundation.\n+\n+  10. If you wish to incorporate parts of the Program into other free\n+programs whose distribution conditions are different, write to the author\n+to ask for permission.  For software which is copyrighted by the Free\n+Software Foundation, write to the Free Software Foundation; we sometimes\n+make exceptions for this.  Our decision will be guided by the two goals\n+of preserving the free status of all derivatives of our free software and\n+of promoting the sharing and reuse of software generally.\n+\n+          NO WARRANTY\n+\n+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\n+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND\u002FOR OTHER PARTIES\n+PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\n+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\n+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n+REPAIR OR CORRECTION.\n+\n+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND\u002FOR\n+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n+POSSIBILITY OF SUCH DAMAGES.\n+\n          END OF TERMS AND CONDITIONS\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002FREADME.md \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002FREADME.md\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002FREADME.md\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002FREADME.md\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,172 +1,172 @@\n-# WP Background Processing\r\n-\r\n-WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks. Check out the [example plugin](https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing-example) or read the [accompanying article](https:\u002F\u002Fdeliciousbrains.com\u002Fbackground-processing-wordpress\u002F).\r\n-\r\n-Inspired by [TechCrunch WP Asynchronous Tasks](https:\u002F\u002Fgithub.com\u002Ftechcrunch\u002Fwp-async-task).\r\n-\r\n-__Requires PHP 5.2+__\r\n-\r\n-## Install\r\n-\r\n-The recommended way to install this library in your project is by loading it through Composer:\r\n-\r\n-```\r\n-composer require deliciousbrains\u002Fwp-background-processing\r\n-```\r\n-\r\n-It is highly recommended to prefix wrap the library class files using [the Mozart package](https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fcoenjacobs\u002Fmozart), to prevent collisions with other projects using this same library.\r\n-\r\n-## Usage\r\n-\r\n-### Async Request\r\n-\r\n-Async requests are useful for pushing slow one-off tasks such as sending emails to a background process. Once the request has been dispatched it will process in the background instantly.\r\n-\r\n-Extend the `WP_Async_Request` class:\r\n-\r\n-```php\r\n-class WP_Example_Request extends WP_Async_Request {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $action = 'example_request';\r\n-\r\n-\t\u002F**\r\n-\t * Handle\r\n-\t *\r\n-\t * Override this method to perform any actions required\r\n-\t * during the async request.\r\n-\t *\u002F\r\n-\tprotected function handle() {\r\n-\t\t\u002F\u002F Actions to perform\r\n-\t}\r\n-\r\n-}\r\n-```\r\n-\r\n-##### `protected $action`\r\n-\r\n-Should be set to a unique name.\r\n-\r\n-##### `protected function handle()`\r\n-\r\n-Should contain any logic to perform during the non-blocking request. The data passed to the request will be accessible via `$_POST`.\r\n-\r\n-##### Dispatching Requests\r\n-\r\n-Instantiate your request:\r\n-\r\n-`$this->example_request = new WP_Example_Request();`\r\n-\r\n-Add data to the request if required:\r\n-\r\n-`$this->example_request->data( array( 'value1' => $value1, 'value2' => $value2 ) );`\r\n-\r\n-Fire off the request:\r\n-\r\n-`$this->example_request->dispatch();`\r\n-\r\n-Chaining is also supported:\r\n-\r\n-`$this->example_request->data( array( 'data' => $data ) )->dispatch();`\r\n-\r\n-### Background Process\r\n-\r\n-Background processes work in a similar fashion to async requests but they allow you to queue tasks. Items pushed onto the queue will be processed in the background once the queue has been dispatched. Queues will also scale based on available server resources, so higher end servers will process more items per batch. Once a batch has completed the next batch will start instantly.\r\n-\r\n-Health checks run by default every 5 minutes to ensure the queue is running when queued items exist. If the queue has failed it will be restarted.\r\n-\r\n-Queues work on a first in first out basis, which allows additional items to be pushed to the queue even if it’s already processing.\r\n-\r\n-Extend the `WP_Background_Process` class:\r\n-\r\n-```php\r\n-class WP_Example_Process extends WP_Background_Process {\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $action = 'example_process';\r\n-\r\n-\t\u002F**\r\n-\t * Task\r\n-\t *\r\n-\t * Override this method to perform any actions required on each\r\n-\t * queue item. Return the modified item for further processing\r\n-\t * in the next pass through. Or, return false to remove the\r\n-\t * item from the queue.\r\n-\t *\r\n-\t * @param mixed $item Queue item to iterate over\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tprotected function task( $item ) {\r\n-\t\t\u002F\u002F Actions to perform\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Complete\r\n-\t *\r\n-\t * Override if applicable, but ensure that the below actions are\r\n-\t * performed, or, call parent::complete().\r\n-\t *\u002F\r\n-\tprotected function complete() {\r\n-\t\tparent::complete();\r\n-\r\n-\t\t\u002F\u002F Show notice to user or perform some other arbitrary task...\r\n-\t}\r\n-\r\n-}\r\n-```\r\n-\r\n-##### `protected $action`\r\n-\r\n-Should be set to a unique name.\r\n-\r\n-##### `protected function task( $item )`\r\n-\r\n-Should contain any logic to perform on the queued item. Return `false` to remove the item from the queue or return `$item` to push it back onto the queue for further processing. If the item has been modified and is pushed back onto the queue the current state will be saved before the batch is exited.\r\n-\r\n-##### `protected function complete()`\r\n-\r\n-Optionally contain any logic to perform once the queue has completed.\r\n-\r\n-##### Dispatching Processes\r\n-\r\n-Instantiate your process:\r\n-\r\n-`$this->example_process = new WP_Example_Process();`\r\n-\r\n-**Note:** You must instantiate your process unconditionally. All requests should do this, even if nothing is pushed to the queue.\r\n-\r\n-Push items to the queue:\r\n-\r\n-```php\r\n-foreach ( $items as $item ) {\r\n-    $this->example_process->push_to_queue( $item );\r\n-}\r\n-```\r\n-\r\n-Save and dispatch the queue:\r\n-\r\n-`$this->example_process->save()->dispatch();`\r\n-\r\n-### BasicAuth\r\n-\r\n-If your site is behind BasicAuth, both async requests and background processes will fail to complete. This is because WP Background Processing relies on the [WordPress HTTP API](http:\u002F\u002Fcodex.wordpress.org\u002FHTTP_API), which requires you to attach your BasicAuth credentials to requests. The easiest way to do this is using the following filter:\r\n-\r\n-```php\r\n-function wpbp_http_request_args( $r, $url ) {\r\n-\t$r['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );\r\n-\r\n-\treturn $r;\r\n-}\r\n-add_filter( 'http_request_args', 'wpbp_http_request_args', 10, 2);\r\n-```\r\n-\r\n-## License\r\n-\r\n-[GPLv2+](http:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html)\r\n+# WP Background Processing\n+\n+WP Background Processing can be used to fire off non-blocking asynchronous requests or as a background processing tool, allowing you to queue tasks. Check out the [example plugin](https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing-example) or read the [accompanying article](https:\u002F\u002Fdeliciousbrains.com\u002Fbackground-processing-wordpress\u002F).\n+\n+Inspired by [TechCrunch WP Asynchronous Tasks](https:\u002F\u002Fgithub.com\u002Ftechcrunch\u002Fwp-async-task).\n+\n+__Requires PHP 5.2+__\n+\n+## Install\n+\n+The recommended way to install this library in your project is by loading it through Composer:\n+\n+```\n+composer require deliciousbrains\u002Fwp-background-processing\n+```\n+\n+It is highly recommended to prefix wrap the library class files using [the Mozart package](https:\u002F\u002Fpackagist.org\u002Fpackages\u002Fcoenjacobs\u002Fmozart), to prevent collisions with other projects using this same library.\n+\n+## Usage\n+\n+### Async Request\n+\n+Async requests are useful for pushing slow one-off tasks such as sending emails to a background process. Once the request has been dispatched it will process in the background instantly.\n+\n+Extend the `WP_Async_Request` class:\n+\n+```php\n+class WP_Example_Request extends WP_Async_Request {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $action = 'example_request';\n+\n+\t\u002F**\n+\t * Handle\n+\t *\n+\t * Override this method to perform any actions required\n+\t * during the async request.\n+\t *\u002F\n+\tprotected function handle() {\n+\t\t\u002F\u002F Actions to perform\n+\t}\n+\n+}\n+```\n+\n+##### `protected $action`\n+\n+Should be set to a unique name.\n+\n+##### `protected function handle()`\n+\n+Should contain any logic to perform during the non-blocking request. The data passed to the request will be accessible via `$_POST`.\n+\n+##### Dispatching Requests\n+\n+Instantiate your request:\n+\n+`$this->example_request = new WP_Example_Request();`\n+\n+Add data to the request if required:\n+\n+`$this->example_request->data( array( 'value1' => $value1, 'value2' => $value2 ) );`\n+\n+Fire off the request:\n+\n+`$this->example_request->dispatch();`\n+\n+Chaining is also supported:\n+\n+`$this->example_request->data( array( 'data' => $data ) )->dispatch();`\n+\n+### Background Process\n+\n+Background processes work in a similar fashion to async requests but they allow you to queue tasks. Items pushed onto the queue will be processed in the background once the queue has been dispatched. Queues will also scale based on available server resources, so higher end servers will process more items per batch. Once a batch has completed the next batch will start instantly.\n+\n+Health checks run by default every 5 minutes to ensure the queue is running when queued items exist. If the queue has failed it will be restarted.\n+\n+Queues work on a first in first out basis, which allows additional items to be pushed to the queue even if it’s already processing.\n+\n+Extend the `WP_Background_Process` class:\n+\n+```php\n+class WP_Example_Process extends WP_Background_Process {\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $action = 'example_process';\n+\n+\t\u002F**\n+\t * Task\n+\t *\n+\t * Override this method to perform any actions required on each\n+\t * queue item. Return the modified item for further processing\n+\t * in the next pass through. Or, return false to remove the\n+\t * item from the queue.\n+\t *\n+\t * @param mixed $item Queue item to iterate over\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tprotected function task( $item ) {\n+\t\t\u002F\u002F Actions to perform\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Complete\n+\t *\n+\t * Override if applicable, but ensure that the below actions are\n+\t * performed, or, call parent::complete().\n+\t *\u002F\n+\tprotected function complete() {\n+\t\tparent::complete();\n+\n+\t\t\u002F\u002F Show notice to user or perform some other arbitrary task...\n+\t}\n+\n+}\n+```\n+\n+##### `protected $action`\n+\n+Should be set to a unique name.\n+\n+##### `protected function task( $item )`\n+\n+Should contain any logic to perform on the queued item. Return `false` to remove the item from the queue or return `$item` to push it back onto the queue for further processing. If the item has been modified and is pushed back onto the queue the current state will be saved before the batch is exited.\n+\n+##### `protected function complete()`\n+\n+Optionally contain any logic to perform once the queue has completed.\n+\n+##### Dispatching Processes\n+\n+Instantiate your process:\n+\n+`$this->example_process = new WP_Example_Process();`\n+\n+**Note:** You must instantiate your process unconditionally. All requests should do this, even if nothing is pushed to the queue.\n+\n+Push items to the queue:\n+\n+```php\n+foreach ( $items as $item ) {\n+    $this->example_process->push_to_queue( $item );\n+}\n+```\n+\n+Save and dispatch the queue:\n+\n+`$this->example_process->save()->dispatch();`\n+\n+### BasicAuth\n+\n+If your site is behind BasicAuth, both async requests and background processes will fail to complete. This is because WP Background Processing relies on the [WordPress HTTP API](http:\u002F\u002Fcodex.wordpress.org\u002FHTTP_API), which requires you to attach your BasicAuth credentials to requests. The easiest way to do this is using the following filter:\n+\n+```php\n+function wpbp_http_request_args( $r, $url ) {\n+\t$r['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );\n+\n+\treturn $r;\n+}\n+add_filter( 'http_request_args', 'wpbp_http_request_args', 10, 2);\n+```\n+\n+## License\n+\n+[GPLv2+](http:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-2.0.html)\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * WP-Background Processing\r\n- *\r\n- * @package WP-Background-Processing\r\n- *\u002F\r\n-\r\n-\u002F*\r\n-Plugin Name: WP Background Processing\r\n-Plugin URI: https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing\r\n-Description: Asynchronous requests and background processing in WordPress.\r\n-Author: Delicious Brains Inc.\r\n-Version: 1.0\r\n-Author URI: https:\u002F\u002Fdeliciousbrains.com\u002F\r\n-GitHub Plugin URI: https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing\r\n-GitHub Branch: master\r\n-*\u002F\r\n-\r\n-if ( ! class_exists( 'WP_Async_Request' ) ) {\r\n-\trequire_once plugin_dir_path( __FILE__ ) . 'classes\u002Fwp-async-request.php';\r\n-}\r\n-if ( ! class_exists( 'WP_Background_Process' ) ) {\r\n-\trequire_once plugin_dir_path( __FILE__ ) . 'classes\u002Fwp-background-process.php';\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * WP-Background Processing\n+ *\n+ * @package WP-Background-Processing\n+ *\u002F\n+\n+\u002F*\n+Plugin Name: WP Background Processing\n+Plugin URI: https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing\n+Description: Asynchronous requests and background processing in WordPress.\n+Author: Delicious Brains Inc.\n+Version: 1.0\n+Author URI: https:\u002F\u002Fdeliciousbrains.com\u002F\n+GitHub Plugin URI: https:\u002F\u002Fgithub.com\u002FA5hleyRich\u002Fwp-background-processing\n+GitHub Branch: master\n+*\u002F\n+\n+if ( ! class_exists( 'WP_Async_Request' ) ) {\n+\trequire_once plugin_dir_path( __FILE__ ) . 'classes\u002Fwp-async-request.php';\n+}\n+if ( ! class_exists( 'WP_Background_Process' ) ) {\n+\trequire_once plugin_dir_path( __FILE__ ) . 'classes\u002Fwp-background-process.php';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-constants.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-constants.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-constants.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-constants.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,120 +1,121 @@\n-\u003C?php\r\n-\u002F**\r\n- * Define common constants used by LearnPress\r\n- *\u002F\r\n-require_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\r\n-$upload_dir = wp_upload_dir();\r\n-\r\n-$default_headers = array(\r\n-\t'Version'    => 'Version',\r\n-\t'TextDomain' => 'Text Domain',\r\n-);\r\n-$plugin_info     = get_file_data( LP_PLUGIN_FILE, $default_headers, 'plugin' );\r\n-\r\n-\u002F\u002F version.\r\n-define( 'LEARNPRESS_VERSION', $plugin_info['Version'] );\r\n-const LP_KEY_DB_VERSION = 'learnpress_db_version';\r\n-\u002F**\r\n- * @since 4.2.6.5\r\n- *\u002F\r\n-define( 'LP_TEXT_DOMAIN', $plugin_info['TextDomain'] );\r\n-\r\n-\u002F\u002F Plugin paths and urls.\r\n-define( 'LP_PLUGIN_PATH', plugin_dir_path( LP_PLUGIN_FILE ) );\r\n-define( 'LP_PLUGIN_BASENAME', plugin_basename( LP_PLUGIN_FILE ) );\r\n-define( 'LP_PLUGIN_FOLDER_NAME', dirname( LP_PLUGIN_BASENAME ) );\r\n-const LP_TEMPLATE_PATH = LP_PLUGIN_PATH . 'templates\u002F';\r\n-define( 'LP_PLUGIN_URL', trailingslashit( plugins_url( '\u002F', LP_PLUGIN_FILE ) ) );\r\n-const LP_JS_URL  = LP_PLUGIN_URL . 'assets\u002Fjs\u002F';\r\n-const LP_CSS_URL = LP_PLUGIN_URL . 'assets\u002Fcss\u002F';\r\n-\r\n-\u002F\u002F Log path.\r\n-define( 'LP_LOG_PATH', $upload_dir['basedir'] . '\u002Flearn-press-logs\u002F' );\r\n-\r\n-\u002F\u002F Turn on\u002Foff cart.\r\n-const LP_ENABLE_CART = false;\r\n-\r\n-\u002F\u002F Table prefix.\r\n-const LP_TABLE_PREFIX = 'learnpress_';\r\n-\r\n-\u002F\u002F Define constants for custom post types.\r\n-const LP_COURSE_CPT   = 'lp_course';\r\n-const LP_LESSON_CPT   = 'lp_lesson';\r\n-const LP_QUESTION_CPT = 'lp_question';\r\n-const LP_QUIZ_CPT     = 'lp_quiz';\r\n-const LP_ORDER_CPT    = 'lp_order';\r\n-\r\n-\u002F\u002F Define constants for custom taxonomies.\r\n-const LP_COURSE_CATEGORY_TAX = 'course_category';\r\n-const LP_COURSE_TAXONOMY_TAG = 'course_tag';\r\n-\r\n-\u002F\u002F Role of user .\r\n-const LP_TEACHER_ROLE = 'lp_teacher';\r\n-const ADMIN_ROLE      = 'administrator';\r\n-\r\n-\u002F\u002F Options.\r\n-const LP_USE_ATTRIBUTES = false;\r\n-\r\n-\u002F\u002F Error codes.\r\n-const LP_REQUIRE_LOGIN                    = 120;\r\n-const LP_INVALID_QUIZ_OR_COURSE           = 140;\r\n-const LP_COURSE_IS_FINISHED               = 150;\r\n-const LP_QUIZ_HAS_STARTED_OR_COMPLETED    = 160;\r\n-const LP_ERROR_NO_PAYMENT_METHOD_SELECTED = 1000;\r\n-const LP_COMPLETE_ITEM_FAIL               = 170;\r\n-\r\n-\u002F\u002F Pages.\r\n-const LP_PAGE_CHECKOUT                 = 'lp_page_checkout';\r\n-const LP_PAGE_COURSES                  = 'lp_page_courses';\r\n-const LP_PAGE_SINGLE_COURSE            = 'lp_page_single_course';\r\n-const LP_PAGE_QUIZ                     = 'lp_page_quiz';\r\n-const LP_PAGE_QUESTION                 = 'lp_page_question';\r\n-const LP_PAGE_PROFILE                  = 'lp_page_profile';\r\n-const LP_PAGE_BECOME_A_TEACHER         = 'lp_page_become_a_teacher';\r\n-const LP_PAGE_SINGLE_COURSE_CURRICULUM = 'lp_page_single_course_curriculum';\r\n-const LP_PAGE_INSTRUCTORS              = 'lp_page_instructors';\r\n-const LP_PAGE_INSTRUCTOR               = 'lp_page_single_instructor';\r\n-\r\n-\u002F\u002F Key block course's item.\r\n-const LP_BLOCK_COURSE_FINISHED        = 'block_course_finished';\r\n-const LP_BLOCK_COURSE_DURATION_EXPIRE = 'block_course_duration_expire';\r\n-const LP_BLOCK_COURSE_PURCHASE        = 'block_course_purchased';\r\n-\r\n-\u002F\u002F Status user item course.\r\n-const LP_COURSE_ENROLLED    = 'enrolled';\r\n-const LP_COURSE_FINISHED    = 'finished';\r\n-const LP_COURSE_PURCHASED   = 'purchased';\r\n-const LP_USER_COURSE_CANCEL = 'cancel'; \u002F\u002F When Order change complete to another status\r\n-const LP_ITEM_COMPLETED     = 'completed';\r\n-const LP_ITEM_STARTED       = 'started';\r\n-\r\n-\u002F\u002F Status LP Order to compare.\r\n-const LP_ORDER_COMPLETED  = 'completed';\r\n-const LP_ORDER_PENDING    = 'pending';\r\n-const LP_ORDER_PROCESSING = 'processing';\r\n-const LP_ORDER_CANCELLED  = 'cancelled';\r\n-const LP_ORDER_FAILED     = 'failed';\r\n-const LP_ORDER_TRASH      = 'trash';\r\n-\r\n-\u002F\u002F Status LP Order to set DB.\r\n-const LP_ORDER_COMPLETED_DB  = 'lp-completed';\r\n-const LP_ORDER_PENDING_DB    = 'lp-pending';\r\n-const LP_ORDER_PROCESSING_DB = 'lp-processing';\r\n-const LP_ORDER_CANCELLED_DB  = 'lp-cancelled';\r\n-const LP_ORDER_FAILED_DB     = 'lp-failed';\r\n-const LP_ORDER_TRASH_DB      = 'lp-trash';\r\n-\r\n-\u002F\u002F LP Order type create via.\r\n-const LP_ORDER_CREATED_VIA_MANUAL = 'manual';\r\n-\r\n-\u002F\u002F Graduation user item course\r\n-const LP_COURSE_GRADUATION_IN_PROGRESS = 'in-progress';\r\n-const LP_COURSE_GRADUATION_PASSED      = 'passed';\r\n-const LP_COURSE_GRADUATION_FAILED      = 'failed';\r\n-\u002F\u002F @since 4.2.7.4\r\n-const LP_GRADUATION_IN_PROGRESS = 'in-progress';\r\n-const LP_GRADUATION_PASSED      = 'passed';\r\n-const LP_GRADUATION_FAILED      = 'failed';\r\n-\r\n-\u002F\u002F Enable lazy-load animation placeholder.\r\n-const LP_LAZY_LOAD_ANIMATION = true;\r\n+\u003C?php\n+\u002F**\n+ * Define common constants used by LearnPress\n+ *\u002F\n+require_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\n+$upload_dir = wp_upload_dir();\n+\n+$default_headers = array(\n+\t'Version'    => 'Version',\n+\t'TextDomain' => 'Text Domain',\n+);\n+$plugin_info     = get_file_data( LP_PLUGIN_FILE, $default_headers, 'plugin' );\n+\n+\u002F\u002F version.\n+define( 'LEARNPRESS_VERSION', $plugin_info['Version'] );\n+const LP_KEY_DB_VERSION = 'learnpress_db_version';\n+\u002F**\n+ * @since 4.2.6.5\n+ *\u002F\n+define( 'LP_TEXT_DOMAIN', $plugin_info['TextDomain'] );\n+\n+\u002F\u002F Plugin paths and urls.\n+define( 'LP_PLUGIN_PATH', plugin_dir_path( LP_PLUGIN_FILE ) );\n+define( 'LP_PLUGIN_BASENAME', plugin_basename( LP_PLUGIN_FILE ) );\n+define( 'LP_PLUGIN_FOLDER_NAME', dirname( LP_PLUGIN_BASENAME ) );\n+const LP_TEMPLATE_PATH = LP_PLUGIN_PATH . 'templates\u002F';\n+define( 'LP_PLUGIN_URL', trailingslashit( plugins_url( '\u002F', LP_PLUGIN_FILE ) ) );\n+const LP_JS_URL  = LP_PLUGIN_URL . 'assets\u002Fjs\u002F';\n+const LP_CSS_URL = LP_PLUGIN_URL . 'assets\u002Fcss\u002F';\n+\n+\u002F\u002F Log path.\n+define( 'LP_LOG_PATH', $upload_dir['basedir'] . '\u002Flearn-press-logs\u002F' );\n+\n+\u002F\u002F Turn on\u002Foff cart.\n+const LP_ENABLE_CART = false;\n+\n+\u002F\u002F Table prefix.\n+const LP_TABLE_PREFIX = 'learnpress_';\n+\n+\u002F\u002F Define constants for custom post types.\n+const LP_COURSE_CPT   = 'lp_course';\n+const LP_LESSON_CPT   = 'lp_lesson';\n+const LP_QUESTION_CPT = 'lp_question';\n+const LP_QUIZ_CPT     = 'lp_quiz';\n+const LP_ORDER_CPT    = 'lp_order';\n+\n+\u002F\u002F Define constants for custom taxonomies.\n+const LP_COURSE_CATEGORY_TAX = 'course_category';\n+const LP_COURSE_TAXONOMY_TAG = 'course_tag';\n+\n+\u002F\u002F Role of user .\n+const LP_TEACHER_ROLE = 'lp_teacher';\n+const ADMIN_ROLE      = 'administrator';\n+\n+\u002F\u002F Options.\n+const LP_USE_ATTRIBUTES = false;\n+\n+\u002F\u002F Error codes.\n+const LP_REQUIRE_LOGIN                    = 120;\n+const LP_INVALID_QUIZ_OR_COURSE           = 140;\n+const LP_COURSE_IS_FINISHED               = 150;\n+const LP_QUIZ_HAS_STARTED_OR_COMPLETED    = 160;\n+const LP_ERROR_NO_PAYMENT_METHOD_SELECTED = 1000;\n+const LP_COMPLETE_ITEM_FAIL               = 170;\n+\n+\u002F\u002F Pages.\n+const LP_PAGE_CHECKOUT                 = 'lp_page_checkout';\n+const LP_PAGE_COURSES                  = 'lp_page_courses';\n+const LP_PAGE_SINGLE_COURSE            = 'lp_page_single_course';\n+const LP_PAGE_QUIZ                     = 'lp_page_quiz';\n+const LP_PAGE_QUESTION                 = 'lp_page_question';\n+const LP_PAGE_PROFILE                  = 'lp_page_profile';\n+const LP_PAGE_BECOME_A_TEACHER         = 'lp_page_become_a_teacher';\n+const LP_PAGE_SINGLE_COURSE_CURRICULUM = 'lp_page_single_course_curriculum';\n+const LP_PAGE_INSTRUCTORS              = 'lp_page_instructors';\n+const LP_PAGE_INSTRUCTOR               = 'lp_page_single_instructor';\n+const LP_PAGE_COURSE_BUILDER           = 'lp_page_course_builder';\n+\n+\u002F\u002F Key block course's item.\n+const LP_BLOCK_COURSE_FINISHED        = 'block_course_finished';\n+const LP_BLOCK_COURSE_DURATION_EXPIRE = 'block_course_duration_expire';\n+const LP_BLOCK_COURSE_PURCHASE        = 'block_course_purchased';\n+\n+\u002F\u002F Status user item course.\n+const LP_COURSE_ENROLLED    = 'enrolled';\n+const LP_COURSE_FINISHED    = 'finished';\n+const LP_COURSE_PURCHASED   = 'purchased';\n+const LP_USER_COURSE_CANCEL = 'cancel'; \u002F\u002F When Order change complete to another status\n+const LP_ITEM_COMPLETED     = 'completed';\n+const LP_ITEM_STARTED       = 'started';\n+\n+\u002F\u002F Status LP Order to compare.\n+const LP_ORDER_COMPLETED  = 'completed';\n+const LP_ORDER_PENDING    = 'pending';\n+const LP_ORDER_PROCESSING = 'processing';\n+const LP_ORDER_CANCELLED  = 'cancelled';\n+const LP_ORDER_FAILED     = 'failed';\n+const LP_ORDER_TRASH      = 'trash';\n+\n+\u002F\u002F Status LP Order to set DB.\n+const LP_ORDER_COMPLETED_DB  = 'lp-completed';\n+const LP_ORDER_PENDING_DB    = 'lp-pending';\n+const LP_ORDER_PROCESSING_DB = 'lp-processing';\n+const LP_ORDER_CANCELLED_DB  = 'lp-cancelled';\n+const LP_ORDER_FAILED_DB     = 'lp-failed';\n+const LP_ORDER_TRASH_DB      = 'lp-trash';\n+\n+\u002F\u002F LP Order type create via.\n+const LP_ORDER_CREATED_VIA_MANUAL = 'manual';\n+\n+\u002F\u002F Graduation user item course\n+const LP_COURSE_GRADUATION_IN_PROGRESS = 'in-progress';\n+const LP_COURSE_GRADUATION_PASSED      = 'passed';\n+const LP_COURSE_GRADUATION_FAILED      = 'failed';\n+\u002F\u002F @since 4.2.7.4\n+const LP_GRADUATION_IN_PROGRESS = 'in-progress';\n+const LP_GRADUATION_PASSED      = 'passed';\n+const LP_GRADUATION_FAILED      = 'failed';\n+\n+\u002F\u002F Enable lazy-load animation placeholder.\n+const LP_LAZY_LOAD_ANIMATION = true;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-core-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-core-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-core-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-core-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,2337 +1,2337 @@\n-\u003C?php\r\n-\u002F**\r\n- * LearnPress Core Functions\r\n- * Define common functions for both front-end and back-end\r\n- *\r\n- * @author   ThimPress\r\n- * @package  LearnPress\u002FFunctions\r\n- * @version  1.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Vue write php has script, so when sanitize will error, so use code is mask pass check sanitize, esc\r\n- *\r\n- * @param $content\r\n- *\r\n- * @return void\r\n- * @since 4.1.6.9\r\n- *\u002F\r\n-function learn_press_echo_vuejs_write_on_php( $content ) {\r\n-\techo ( $content );\r\n-}\r\n-\r\n-function learnpress_gutenberg_disable_cpt( $can_edit, $post_type ) {\r\n-\t$post_types = array(\r\n-\t\tLP_COURSE_CPT   => LP_Settings::get_option( 'enable_gutenberg_course', 'no' ),\r\n-\t\tLP_LESSON_CPT   => LP_Settings::get_option( 'enable_gutenberg_lesson', 'no' ),\r\n-\t\tLP_QUIZ_CPT     => LP_Settings::get_option( 'enable_gutenberg_quiz', 'no' ),\r\n-\t\tLP_QUESTION_CPT => LP_Settings::get_option( 'enable_gutenberg_question', 'no' ),\r\n-\t);\r\n-\r\n-\tforeach ( $post_types as $key => $pt ) {\r\n-\t\tif ( $post_type === $key && $pt !== 'yes' ) {\r\n-\t\t\t$can_edit = false;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $can_edit;\r\n-}\r\n-add_filter( 'use_block_editor_for_post_type', 'learnpress_gutenberg_disable_cpt', 10, 2 );\r\n-\r\n-if ( ! function_exists( 'lp_add_body_class' ) ) {\r\n-\tfunction lp_add_body_class( $classes ) {\r\n-\t\t$classes = (array) $classes;\r\n-\r\n-\t\tif ( LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\t$classes[] = 'learnpress-profile';\r\n-\t\t} elseif ( learn_press_is_checkout() ) {\r\n-\t\t\t$classes[] = 'learnpress-checkout';\r\n-\t\t}\r\n-\r\n-\t\treturn $classes;\r\n-\t}\r\n-\tadd_filter( 'body_class', 'lp_add_body_class' );\r\n-}\r\n-\r\n-\u002F**\r\n- * Short function to get name of a theme\r\n- *\r\n- * @param string $folder\r\n- *\r\n- * @return mixed|string\r\n- *\u002F\r\n-function learn_press_get_theme_name( $folder ) {\r\n-\t$theme = wp_get_theme( $folder );\r\n-\r\n-\treturn ! empty( $theme['Name'] ) ? $theme['Name'] : '';\r\n-}\r\n-\r\n-\u002F**\r\n- * Clean.\r\n- *\r\n- * @param [type] $var\r\n- *\r\n- * @version 4.0.0\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-function learnpress_clean( $var ) {\r\n-\tif ( is_array( $var ) ) {\r\n-\t\treturn array_map( 'learnpress_clean', $var );\r\n-\t} else {\r\n-\t\treturn is_scalar( $var ) ? sanitize_text_field( $var ) : $var;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Display HTML of element for building QuickTip JS.\r\n- *\r\n- * @param string $tip\r\n- * @param bool   $echo\r\n- * @param array  $options\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- *\u002F\r\n-function learn_press_quick_tip( $tip, $echo = true, $options = array() ) {\r\n-\t$atts = '';\r\n-\tif ( $options ) {\r\n-\t\tforeach ( $options as $k => $v ) {\r\n-\t\t\t$options[ $k ] = \"data-{$k}=\\\"{$v}\\\"\";\r\n-\t\t}\r\n-\t\t$atts = ' ' . implode( ' ', $options );\r\n-\t}\r\n-\r\n-\t$tip = sprintf( '\u003Cspan class=\"learn-press-tip\" ' . $atts . '>%s\u003C\u002Fspan>', $tip );\r\n-\r\n-\tif ( $echo ) {\r\n-\t\techo wp_kses_post( $tip );\r\n-\t}\r\n-\r\n-\treturn $tip;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current post ID.\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_post() {\r\n-\tglobal $post;\r\n-\r\n-\t$post_id = learn_press_get_request( 'post' );\r\n-\r\n-\tif ( ! $post_id ) {\r\n-\t\t$post_id = ! empty( $post ) ? $post->ID : 0;\r\n-\t}\r\n-\tif ( empty( $post_id ) ) {\r\n-\t\t$post_id = learn_press_get_request( 'post_ID' );\r\n-\t}\r\n-\r\n-\treturn absint( $post_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the LearnPress plugin url\r\n- *\r\n- * @param string $sub_dir\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_plugin_url( $sub_dir = '' ) {\r\n-\treturn LearnPress::instance()->plugin_url( $sub_dir );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the LearnPress plugin path.\r\n- *\r\n- * @param string $sub_dir\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_plugin_path( $sub_dir = '' ) {\r\n-\treturn LearnPress::instance()->plugin_path( $sub_dir );\r\n-}\r\n-\r\n-\u002F**\r\n- * Includes file base on LearnPress path\r\n- *\r\n- * @param string $file\r\n- * @param string $folder\r\n- * @param bool   $include_once\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_include( $file, $folder = 'inc', $include_once = true ) {\r\n-\t$include = learn_press_plugin_path( \"{$folder}\u002F{$file}\" );\r\n-\r\n-\tif ( file_exists( $include ) ) {\r\n-\t\tif ( $include_once ) {\r\n-\t\t\tinclude_once $include;\r\n-\t\t} else {\r\n-\t\t\tinclude $include;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current IP of the user\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_ip() {\r\n-\tif ( isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {\r\n-\t\treturn sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_REAL_IP'] ) );\r\n-\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\r\n-\t\t\u002F\u002F Proxy servers can send through this header like this: X-Forwarded-For: client1, proxy1, proxy2\r\n-\t\t\u002F\u002F Make sure we always only send through the first IP in the list which should always be the client IP.\r\n-\t\treturn (string) rest_is_ip_address( trim( current( preg_split( '\u002F,\u002F', sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) ) ) );\r\n-\t} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {\r\n-\t\treturn sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );\r\n-\t}\r\n-\treturn '';\r\n-}\r\n-\r\n-\u002F**\r\n- * Get user agent.\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_user_agent(): string {\r\n-\treturn LP_Helper::sanitize_params_submitted( $_SERVER['HTTP_USER_AGENT'] ?? '' );\r\n-}\r\n-\r\n-\u002F**\r\n- * Generate an unique string.\r\n- *\r\n- * @param string $prefix\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_uniqid( $prefix = '' ) {\r\n-\t$hash = str_replace( '.', '', microtime( true ) . uniqid() );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fgenerate-hash', $prefix . $hash, $prefix );\r\n-}\r\n-\r\n-function learn_press_random_value( $len = 8 ) {\r\n-\treturn substr( md5( uniqid( mt_rand(), true ) ), 0, $len );\r\n-}\r\n-\r\n-function learn_press_map_columns_format( $columns, $format ) {\r\n-\t$return = array();\r\n-\tforeach ( $columns as $k => $v ) {\r\n-\t\tif ( ! empty( $format[ $k ] ) ) {\r\n-\t\t\t$return[] = $format[ $k ];\r\n-\t\t} else {\r\n-\t\t\t$return[] = '%s'; \u002F\u002F default is string\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $return;\r\n-}\r\n-\r\n-\u002F**\r\n- * Check to see if an endpoint is showing in current URL.\r\n- *\r\n- * @param bool $endpoint\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_endpoint_url( $endpoint = false ) {\r\n-\tglobal $wp;\r\n-\r\n-\t$endpoints = array();\r\n-\r\n-\tif ( $endpoint !== false ) {\r\n-\t\tif ( ! isset( $endpoints[ $endpoint ] ) ) {\r\n-\t\t\treturn false;\r\n-\t\t} else {\r\n-\t\t\t$endpoint_var = $endpoints[ $endpoint ];\r\n-\t\t}\r\n-\r\n-\t\treturn isset( $wp->query_vars[ $endpoint_var ] );\r\n-\t} else {\r\n-\t\tforeach ( $endpoints as $key => $value ) {\r\n-\t\t\tif ( isset( $wp->query_vars[ $key ] ) ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current URL user is viewing.\r\n- *\r\n- * @return string\r\n- * @deprecated 4.2.2\r\n- *\u002F\r\n-function learn_press_get_current_url() {\r\n-\t\u002F\u002F_deprecated_function( __FUNCTION__, '4.2.2', 'LP_Helper::getUrlCurrent' );\r\n-\treturn LP_Helper::getUrlCurrent();\r\n-\r\n-\t$url = untrailingslashit( esc_url_raw( $_SERVER['REQUEST_URI'] ) );\r\n-\r\n-\tif ( ! preg_match( '!^https?!', $url ) ) {\r\n-\t\t$siteurl    = trailingslashit( get_home_url() );\r\n-\t\t$home_query = '';\r\n-\r\n-\t\tif ( strpos( $siteurl, '?' ) !== false ) {\r\n-\t\t\t$parts      = explode( '?', $siteurl );\r\n-\t\t\t$home_query = $parts[1];\r\n-\t\t\t$siteurl    = $parts[0];\r\n-\t\t}\r\n-\r\n-\t\tif ( $home_query ) {\r\n-\t\t\tparse_str( untrailingslashit( $home_query ), $home_query );\r\n-\t\t\t$url = esc_url_raw( add_query_arg( $home_query, $url ) );\r\n-\t\t}\r\n-\r\n-\t\t$segs1 = explode( '\u002F', $siteurl );\r\n-\t\t$segs2 = explode( '\u002F', $url );\r\n-\r\n-\t\tif ( $removed = array_intersect( $segs1, $segs2 ) ) {\r\n-\t\t\tif ( $segs2 = array_diff( $segs2, $removed ) ) {\r\n-\t\t\t\t$current_url = $siteurl . join( '\u002F', $segs2 );\r\n-\t\t\t\tif ( strpos( $current_url, '?' ) === false ) {\r\n-\t\t\t\t\t$current_url = trailingslashit( $current_url );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $current_url;\r\n-}\r\n-\r\n-\u002F**\r\n- * Remove unneeded characters in an URL\r\n- *\r\n- * @param string $url\r\n- * @param bool   $trailingslashit\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_sanitize_url( $url, $trailingslashit = true ) {\r\n-\tif ( $url ) {\r\n-\t\tpreg_match( '!(https?:\u002F\u002F)?(.*)!', $url, $matches );\r\n-\t\t$url_without_http = $matches[2];\r\n-\t\t$url_without_http = preg_replace( '![\u002F]+!', '\u002F', $url_without_http );\r\n-\t\t$url              = $matches[1] . $url_without_http;\r\n-\r\n-\t\treturn ( $trailingslashit &&\r\n-\t\t\t\tstrpos( $url, '?' ) === false ) ? trailingslashit( $url ) : untrailingslashit( $url );\r\n-\t}\r\n-\r\n-\treturn $url;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get all types of question supported\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_question_types() {\r\n-\treturn LP_Question::get_types();\r\n-}\r\n-\r\n-\u002F**\r\n- * Get human name of question's type by slug\r\n- *\r\n- * @param string $slug\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_question_name_from_slug( $slug ) {\r\n-\t$types = learn_press_question_types();\r\n-\t$name  = ! empty( $types[ $slug ] ) ? $types[ $slug ] : '';\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fquestion\u002Fslug-to-name', $name, $slug );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get terms of a course by taxonomy.\r\n- * E.g: course_tag, course_category\r\n- *\r\n- * @param int    $course_id\r\n- * @param string $taxonomy\r\n- * @param array  $args\r\n- *\r\n- * @return array|mixed\r\n- *\u002F\r\n-function learn_press_get_course_terms( $course_id, $taxonomy, $args = array() ) {\r\n-\tif ( ! taxonomy_exists( $taxonomy ) ) {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F\u002F Support ordering by parent\r\n-\tif ( ! empty( $args['orderby'] ) && in_array( $args['orderby'], array( 'name_num', 'parent' ) ) ) {\r\n-\t\t$fields  = isset( $args['fields'] ) ? $args['fields'] : 'all';\r\n-\t\t$orderby = $args['orderby'];\r\n-\r\n-\t\t\u002F\u002F Unset for wp_get_post_terms\r\n-\t\tunset( $args['orderby'] );\r\n-\t\tunset( $args['fields'] );\r\n-\r\n-\t\t$terms = wp_get_post_terms( $course_id, $taxonomy, $args );\r\n-\r\n-\t\tswitch ( $orderby ) {\r\n-\t\t\tcase 'name_num':\r\n-\t\t\t\tusort( $terms, '_learn_press_get_course_terms_name_num_usort_callback' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'parent':\r\n-\t\t\t\tusort( $terms, '_learn_press_get_course_terms_parent_usort_callback' );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\tswitch ( $fields ) {\r\n-\t\t\tcase 'names':\r\n-\t\t\t\t$terms = wp_list_pluck( $terms, 'name' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'ids':\r\n-\t\t\t\t$terms = wp_list_pluck( $terms, 'term_id' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'slugs':\r\n-\t\t\t\t$terms = wp_list_pluck( $terms, 'slug' );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t} elseif ( ! empty( $args['orderby'] ) && $args['orderby'] === 'menu_order' ) {\r\n-\t\t\u002F\u002F wp_get_post_terms doesn't let us use custom sort order\r\n-\t\t$args['include'] = wp_get_post_terms( $course_id, $taxonomy, array( 'fields' => 'ids' ) );\r\n-\r\n-\t\tif ( empty( $args['include'] ) ) {\r\n-\t\t\t$terms = array();\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F This isn't needed for get_terms\r\n-\t\t\tunset( $args['orderby'] );\r\n-\r\n-\t\t\t\u002F\u002F Set args for get_terms\r\n-\t\t\t$args['menu_order'] = $args['order'] ?? 'ASC';\r\n-\t\t\t$args['hide_empty'] = $args['hide_empty'] ?? 0;\r\n-\t\t\t$args['fields']     = $args['fields'] ?? 'names';\r\n-\r\n-\t\t\t\u002F\u002F Ensure slugs is valid for get_terms - slugs isn't supported\r\n-\t\t\t$args['fields'] = $args['fields'] === 'slugs' ? 'id=>slug' : $args['fields'];\r\n-\t\t\t$terms          = get_terms( $taxonomy, $args );\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$terms = wp_get_post_terms( $course_id, $taxonomy, $args );\r\n-\t}\r\n-\r\n-\t\u002F\u002F @deprecated\r\n-\t$terms = apply_filters( 'learn_press_get_course_terms', $terms, $course_id, $taxonomy, $args );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fcourse\u002Fterms', $terms, $course_id, $taxonomy, $args );\r\n-}\r\n-\r\n-\u002F**\r\n- * Callback function for sorting terms of course by name.\r\n- *\r\n- * @param object $a\r\n- * @param object $b\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function _learn_press_get_course_terms_name_num_usort_callback( $a, $b ) {\r\n-\tif ( $a->name + 0 === $b->name + 0 ) {\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\treturn ( $a->name + 0 \u003C $b->name + 0 ) ? - 1 : 1;\r\n-}\r\n-\r\n-\u002F**\r\n- * Callback function for sorting terms of course by parent.\r\n- *\r\n- * @param object $a\r\n- * @param object $b\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function _learn_press_get_course_terms_parent_usort_callback( $a, $b ) {\r\n-\tif ( $a->parent === $b->parent ) {\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\treturn ( $a->parent \u003C $b->parent ) ? 1 : - 1;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get posts by it's post-name (slug).\r\n- *\r\n- * @param string $name\r\n- * @param string $type\r\n- * @param bool   $single\r\n- *\r\n- * @return array|bool|null|WP_Post\r\n- *\u002F\r\n-function learn_press_get_post_by_name( $name, $type, $single = true ) {\r\n-\t$post_name = sanitize_title( $name );\r\n-\t$id        = LP_Object_Cache::get( $type . '-' . $post_name, 'learn-press\u002Fpost-names' );\r\n-\r\n-\tif ( false === $id ) {\r\n-\t\tforeach ( array( $name, urldecode( $name ) ) as $_name ) {\r\n-\t\t\t$args = array(\r\n-\t\t\t\t'name'      => $_name,\r\n-\t\t\t\t'post_type' => array( $type ),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$posts = get_posts( $args );\r\n-\r\n-\t\t\tif ( $posts ) {\r\n-\t\t\t\t$post = $posts[0];\r\n-\t\t\t\t$id   = $post->ID;\r\n-\t\t\t\twp_cache_set( $id, $post, 'posts' );\r\n-\t\t\t\tLP_Object_Cache::set( $type . '-' . $name, $id, 'learn-press\u002Fpost-names' );\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $id ? get_post( $id ) : false;\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_ajax' ) ) {\r\n-\tfunction learn_press_is_ajax() {\r\n-\t\treturn defined( 'LP_DOING_AJAX' ) && LP_DOING_AJAX && 'yes' != learn_press_get_request( 'noajax' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get page id from admin settings page\r\n- *\r\n- * @param string $name\r\n- *\r\n- * @since 3.0.0\r\n- * @version 1.0.2\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_page_id( string $name ): int {\r\n-\t$page_id = LP_Settings::get_option( \"{$name}_page_id\", false );\r\n-\r\n-\t\u002F*if ( function_exists( 'icl_object_id' ) ) {\r\n-\t\t$page_id = icl_object_id( $page_id, 'page', false, defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : '' );\r\n-\t}*\u002F\r\n-\r\n-\t$page_id = (int) $page_id;\r\n-\r\n-\treturn apply_filters( 'learn_press_get_page_id', $page_id, $name );\r\n-}\r\n-\r\n-\u002F**\r\n- * display the seconds in time format h:i:s\r\n- *\r\n- * @param        $seconds\r\n- * @param string  $separator\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_seconds_to_time( $seconds, $separator = ':' ) {\r\n-\treturn sprintf(\r\n-\t\t'%02d%s%02d%s%02d',\r\n-\t\tfloor( $seconds \u002F 3600 ),\r\n-\t\t$separator,\r\n-\t\t( $seconds \u002F 60 ) % 60,\r\n-\t\t$separator,\r\n-\t\t$seconds % 60\r\n-\t);\r\n-}\r\n-\r\n-\u002F* nav *\u002F\r\n-if ( ! function_exists( 'learn_press_course_paging_nav' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Display navigation to next\u002Fprevious set of posts when applicable.\r\n-\t *\r\n-\t * @param array\r\n-\t *\u002F\r\n-\tfunction learn_press_course_paging_nav( $args = array() ) {\r\n-\t\tlearn_press_paging_nav(\r\n-\t\t\tarray(\r\n-\t\t\t\t'num_pages'     => $GLOBALS['wp_query']->max_num_pages,\r\n-\t\t\t\t'wrapper_class' => 'navigation pagination',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-}\r\n-\r\n-\u002F* nav *\u002F\r\n-if ( ! function_exists( 'learn_press_paging_nav' ) ) {\r\n-\tfunction learn_press_paging_nav( $args = array() ) {\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'num_pages'     => 0,\r\n-\t\t\t\t'paged'         => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,\r\n-\t\t\t\t'wrapper_class' => 'learn-press-pagination',\r\n-\t\t\t\t'base'          => false,\r\n-\t\t\t\t'format'        => '',\r\n-\t\t\t\t'echo'          => true,\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( $args['num_pages'] \u003C 2 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$paged        = $args['paged'];\r\n-\t\t$pagenum_link = html_entity_decode( $args['base'] === false ? get_pagenum_link() : $args['base'] );\r\n-\r\n-\t\t$query_args = array();\r\n-\t\t$url_parts  = explode( '?', $pagenum_link );\r\n-\r\n-\t\tif ( isset( $url_parts[1] ) ) {\r\n-\t\t\twp_parse_str( $url_parts[1], $query_args );\r\n-\t\t}\r\n-\r\n-\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\r\n-\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\r\n-\r\n-\t\t$format  = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos(\r\n-\t\t\t$pagenum_link,\r\n-\t\t\t'index.php'\r\n-\t\t) ? 'index.php\u002F' : '';\r\n-\t\t$format .= $args['format'] ? $args['format'] : ( $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit(\r\n-\t\t\t'page\u002F%#%',\r\n-\t\t\t'paged'\r\n-\t\t) : '?paged=%#%' );\r\n-\r\n-\t\t$link_args = array(\r\n-\t\t\t'base'      => $pagenum_link,\r\n-\t\t\t'format'    => $format,\r\n-\t\t\t'total'     => $args['num_pages'],\r\n-\t\t\t'current'   => max( 1, $paged ),\r\n-\t\t\t'mid_size'  => 1,\r\n-\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\r\n-\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\r\n-\t\t\t'next_text' => __( '>', 'learnpress' ),\r\n-\t\t\t'type'      => 'list',\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Set up paginated links.\r\n-\t\t$links = paginate_links( $link_args );\r\n-\r\n-\t\tob_start();\r\n-\r\n-\t\tif ( $links ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( $args['wrapper_class'] ); ?>\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $links ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\t$output = ob_get_clean();\r\n-\r\n-\t\tif ( $args['echo'] ) {\r\n-\t\t\techo wp_kses_post( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get number of pages by rows and items per page.\r\n- *\r\n- * @param int $total\r\n- * @param int $limit\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_num_pages( $total, $limit = 10 ) {\r\n-\t$limit = $limit \u003C= 0 ? 10 : $limit;\r\n-\r\n-\tif ( $total \u003C= $limit ) {\r\n-\t\treturn 1;\r\n-\t}\r\n-\r\n-\t$pages = absint( $total \u002F $limit );\r\n-\r\n-\tif ( $total % $limit != 0 ) {\r\n-\t\t++$pages;\r\n-\t}\r\n-\r\n-\treturn $pages;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get text\r\n- *\r\n- * @param $status_id\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_status_text( $status_id ) {\r\n-\tswitch ( $status_id ) {\r\n-\t\tcase 1:\r\n-\t\t\t$text = 'pending';\r\n-\t\t\tbreak;\r\n-\t\tcase 2:\r\n-\t\t\t$text = 'complete';\r\n-\t\t\tbreak;\r\n-\t\tcase - 1:\r\n-\t\t\t$text = 'cancel';\r\n-\t\t\tbreak;\r\n-\t\tcase - 2:\r\n-\t\t\t$text = 'refund';\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\t$text = 'on-hold';\r\n-\t}\r\n-\r\n-\treturn $text;\r\n-}\r\n-\r\n-function learn_press_get_course_duration_support() {\r\n-\treturn apply_filters(\r\n-\t\t'learn_press_course_duration_support',\r\n-\t\tarray(\r\n-\t\t\t'minute' => esc_html__( 'Minute(s)', 'learnpress' ),\r\n-\t\t\t'hour'   => esc_html__( 'Hour(s)', 'learnpress' ),\r\n-\t\t\t'day'    => esc_html__( 'Day(s)', 'learnpress' ),\r\n-\t\t\t'week'   => esc_html__( 'Week(s)', 'learnpress' ),\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-function learn_press_number_to_string_time( $number ) {\r\n-\t$str = $number;\r\n-\r\n-\tif ( preg_match( '!([0-9.]+) (minute|hour|day|week)!', $number, $matches ) ) {\r\n-\t\tswitch ( $matches[2] ) {\r\n-\t\t\tcase 'hour':\r\n-\t\t\t\t$minute = $matches[1] * 60;\r\n-\t\t\t\t$str    = sprintf( '%s hour %s minute', absint( $minute \u002F 60 ), $minute % 60 );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'day':\r\n-\t\t\t\t$hour = $matches[1] * 24;\r\n-\t\t\t\t$str  = sprintf( '%s day %s hour', absint( $hour \u002F 24 ), $hour % 24 );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'week':\r\n-\t\t\t\t$day = $matches[1] * 7;\r\n-\t\t\t\t$str = sprintf( '%s week %s day', absint( $day \u002F 7 ), $day % 7 );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $str;\r\n-}\r\n-\r\n-function learn_press_human_time_to_seconds( $time, $default = '' ) {\r\n-\t$duration      = learn_press_get_course_duration_support();\r\n-\t$duration_keys = array_keys( $duration );\r\n-\r\n-\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $time, $matches ) ) {\r\n-\t\t$a1 = $matches[1][0];\r\n-\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : '';\r\n-\t} else {\r\n-\t\t$a1 = absint( $time );\r\n-\t\t$a2 = '';\r\n-\t}\r\n-\r\n-\tif ( $a2 ) {\r\n-\t\t$b  = array(\r\n-\t\t\t'minute' => 60,\r\n-\t\t\t'hour'   => 3600,\r\n-\t\t\t'day'    => 3600 * 24,\r\n-\t\t\t'week'   => 3600 * 24 * 7,\r\n-\t\t);\r\n-\t\t$a1 = $a1 * $b[ $a2 ];\r\n-\t}\r\n-\r\n-\treturn $a1;\r\n-}\r\n-\r\n-\u002F**\r\n- * @param $user_id\r\n- *\r\n- * @return WP_Query\r\n- *\u002F\r\n-function learn_press_get_own_courses( $user_id ) {\r\n-\t$arr_query = array(\r\n-\t\t'post_type'           => 'lp_course',\r\n-\t\t'author'              => $user_id,\r\n-\t\t'post_status'         => 'publish',\r\n-\t\t'ignore_sticky_posts' => true,\r\n-\t\t'posts_per_page'      => - 1,\r\n-\t);\r\n-\t$my_query  = new WP_Query( $arr_query );\r\n-\r\n-\treturn $my_query;\r\n-}\r\n-\r\n-\u002F**\r\n- * Return array list of currency positions.\r\n- *\r\n- * @param bool|string $currency\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_currency_positions( $currency = false ) {\r\n-\t$positions = array(\r\n-\t\t'left'             => __( 'Left', 'learnpress' ),\r\n-\t\t'right'            => __( 'Right', 'learnpress' ),\r\n-\t\t'left_with_space'  => __( 'Left with space', 'learnpress' ),\r\n-\t\t'right_with_space' => __( 'Right with space', 'learnpress' ),\r\n-\t);\r\n-\r\n-\tif ( false === $currency ) {\r\n-\t\t$currency = learn_press_get_currency_symbol();\r\n-\t}\r\n-\r\n-\t$settings = LP_Settings::instance();\r\n-\r\n-\t$thousands_separator = '';\r\n-\t$decimals_separator  = $settings->get( 'decimals_separator', '.' );\r\n-\t$number_of_decimals  = $settings->get( 'number_of_decimals', 2 );\r\n-\r\n-\tif ( $number_of_decimals > 0 ) {\r\n-\t\t$example = '69' . $decimals_separator . str_repeat( '9', $number_of_decimals );\r\n-\t} else {\r\n-\t\t$example = '69';\r\n-\t}\r\n-\r\n-\tforeach ( $positions as $pos => $text ) {\r\n-\t\tswitch ( $pos ) {\r\n-\t\t\tcase 'left':\r\n-\t\t\t\t$text = sprintf( '%s ( %s%s )', $text, $currency, $example );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'right':\r\n-\t\t\t\t$text = sprintf( '%s ( %s%s )', $text, $example, $currency );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'left_with_space':\r\n-\t\t\t\t$text = sprintf( '%s ( %s %s )', $text, $currency, $example );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'right_with_space':\r\n-\t\t\t\t$text = sprintf( '%s ( %s %s )', $text, $example, $currency );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t\t$positions[ $pos ] = $text;\r\n-\t}\r\n-\r\n-\t$positions = apply_filters( 'learn_press_currency_positions', $positions );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fcurrency-positions', $positions );\r\n-}\r\n-\r\n-\u002F**\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_get_payment_currencies() {\r\n-\treturn apply_filters( 'learn_press_get_payment_currencies', learn_press_currencies() );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the list of currencies with code and name.\r\n- *\r\n- * @return  array\r\n- * @version 3.0.1\r\n- *\r\n- * @author  ThimPress\r\n- *\u002F\r\n-function learn_press_currencies() {\r\n-\treturn Config::instance()->get( 'currencies', 'settings' );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return list of common symbols of the currencies on the world.\r\n- *\r\n- * @return array\r\n- * @version 3.0.1\r\n- *\u002F\r\n-function learn_press_currency_symbols() {\r\n-\treturn Config::instance()->get( 'currency-symbols', 'settings' );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current setting of currency.\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_currency(): string {\r\n-\t$currency = LP_Settings::instance()->get( 'currency', 'USD' );\r\n-\r\n-\treturn esc_html( apply_filters( 'learn-press\u002Fcurrency', $currency ) );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return currency symbol from the code.\r\n- *\r\n- * @param string $currency\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_currency_symbol( $currency = '' ) {\r\n-\tif ( ! $currency ) {\r\n-\t\t$currency = learn_press_get_currency();\r\n-\t}\r\n-\t$symbols         = learn_press_currency_symbols();\r\n-\t$currency_symbol = $symbols[ $currency ] ?? '';\r\n-\r\n-\t$currency_symbol = apply_filters( 'learn_press_currency_symbol', $currency_symbol, $currency );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fcurrency-symbol', $currency_symbol, $currency );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get static page for LP page by name.\r\n- *\r\n- * @param string $key\r\n- *\r\n- * @return string\r\n- * @editor tungnx\r\n- * @modify 4.1.4\r\n- *\u002F\r\n-function learn_press_get_page_link( string $key ): string {\r\n-\t$page_id   = learn_press_get_page_id( $key );\r\n-\t$key_cache = \"lp\u002Fpage-link\u002F{$key}\";\r\n-\t$link      = LP_Cache::cache_load_first( 'get', $key_cache );\r\n-\tif ( false !== $link ) {\r\n-\t\treturn $link;\r\n-\t}\r\n-\r\n-\tif ( $page_id && get_post_status( $page_id ) == 'publish' ) {\r\n-\t\t$permalink = get_permalink( $page_id );\r\n-\t\t$link      = apply_filters( 'learn-press\u002Fget-page-link', trailingslashit( $permalink ), $page_id, $key );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_cache, $link );\r\n-\t}\r\n-\r\n-\treturn $link;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get static page for LP page by name.\r\n- *\r\n- * @param string $key\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_page_title( $key ) {\r\n-\t$page_id = LP_Settings::instance()->get( $key . '_page_id' );\r\n-\t$title   = '';\r\n-\r\n-\tif ( $page_id && get_post_status( $page_id ) == 'publish' ) {\r\n-\t\t$title = apply_filters( 'learn-press\u002Fget-page-title', get_the_title( $page_id ), $page_id, $key );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fget-page-' . $key . '-title', $title, $page_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * get the ID of a course by order ID\r\n- *\r\n- * @param $order_id\r\n- *\r\n- * @return bool|mixed\r\n- *\u002F\r\n-function learn_press_get_course_by_order( $order_id ) {\r\n-\t$order_items = get_post_meta( $order_id, '_learn_press_order_items', true );\r\n-\r\n-\tif ( $order_items && $order_items->products ) {\r\n-\t\t$array_keys = array_keys( $order_items->products );\r\n-\r\n-\t\treturn reset( $array_keys );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Convert a number of seconds to weeks\u002Fdays\u002Fhours.\r\n- *\r\n- * @param int $secs\r\n- *\r\n- * @return bool|string\r\n- *\u002F\r\n-function learn_press_seconds_to_weeks( int $secs = 0 ) {\r\n-\t$secs = (int) $secs;\r\n-\r\n-\tif ( 0 === $secs ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\t\u002F\u002F variables for holding values.\r\n-\t$mins  = 0;\r\n-\t$hours = 0;\r\n-\t$days  = 0;\r\n-\t$weeks = 0;\r\n-\t\u002F\u002F calculations.\r\n-\tif ( $secs >= 60 ) {\r\n-\t\t$mins = (int) ( $secs \u002F 60 );\r\n-\t\t$secs = $secs % 60;\r\n-\t}\r\n-\tif ( $mins >= 60 ) {\r\n-\t\t$hours = (int) ( $mins \u002F 60 );\r\n-\t\t$mins  = $mins % 60;\r\n-\t}\r\n-\tif ( $hours >= 24 ) {\r\n-\t\t$days  = (int) ( $hours \u002F 24 );\r\n-\t\t$hours = $hours % 24;\r\n-\t}\r\n-\tif ( $days >= 7 ) {\r\n-\t\t$weeks = (int) ( $days \u002F 7 );\r\n-\t\t$days  = $days % 7;\r\n-\t}\r\n-\t\u002F\u002F format result.\r\n-\t$result = '';\r\n-\tif ( $weeks ) {\r\n-\t\t$result .= sprintf( _n( '%s week', '%s weeks', $weeks, 'learnpress' ), $weeks ) . ' ';\r\n-\t}\r\n-\r\n-\tif ( $days ) {\r\n-\t\t$result .= sprintf( _n( '%s day', '%s days', $days, 'learnpress' ), $days ) . ' ';\r\n-\t}\r\n-\r\n-\tif ( ! $weeks ) {\r\n-\t\tif ( $hours ) {\r\n-\t\t\t$result .= sprintf( _n( '%s hour', '%s hours', $hours, 'learnpress' ), $hours ) . ' ';\r\n-\t\t}\r\n-\r\n-\t\tif ( $mins ) {\r\n-\t\t\t$result .= sprintf( _n( '%s minute', '%s minutes', $mins, 'learnpress' ), $mins ) . ' ';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$result = rtrim( $result );\r\n-\r\n-\treturn $result;\r\n-}\r\n-\r\n-function learn_press_user_maybe_is_a_teacher( $user = null ) {\r\n-\tif ( ! $user ) {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t} elseif ( is_numeric( $user ) ) {\r\n-\t\t$user = learn_press_get_user( $user );\r\n-\t}\r\n-\tif ( ! $user || $user instanceof LP_User_Guest ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t$role = $user->has_role( 'administrator' ) ? 'administrator' : false;\r\n-\tif ( ! $role ) {\r\n-\t\t$role = $user->has_role( 'lp_teacher' ) ? 'lp_teacher' : false;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fuser\u002Fis-teacher', $role, $user->get_id() );\r\n-}\r\n-\r\n-function learn_press_become_teacher_sent( $user_id = 0 ) {\r\n-\tif ( func_num_args() == 0 ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\r\n-\treturn 'yes' === get_user_meta( $user_id, '_requested_become_teacher', true );\r\n-}\r\n-\r\n-function _learn_press_translate_user_roles( $translations, $text, $context, $domain ) {\r\n-\t$plugin_domain = 'learnpress';\r\n-\t$roles         = array( 'LP Instructor' );\r\n-\r\n-\tif ( $context === 'User role' && in_array( $text, $roles ) && $domain !== $plugin_domain ) {\r\n-\t\treturn translate_with_gettext_context( $text, $context, $plugin_domain );\r\n-\t}\r\n-\r\n-\treturn $translations;\r\n-}\r\n-\r\n-add_filter( 'gettext_with_context', '_learn_press_translate_user_roles', 10, 4 );\r\n-\r\n-if ( ! function_exists( 'learn_press_send_json' ) ) {\r\n-\tfunction learn_press_send_json( $data ) {\r\n-\t\techo '\u003C-- LP_AJAX_START -->';\r\n-\t\techo wp_json_encode( $data );\r\n-\t\techo '\u003C-- LP_AJAX_END -->';\r\n-\t\tdie;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Send json with success signal to browser.\r\n- *\r\n- * @param array|object|WP_Error $data\r\n- *\r\n- * @since 3.0.1\r\n- *\u002F\r\n-function learn_press_send_json_error( $data = '' ) {\r\n-\t$response = array( 'success' => false );\r\n-\r\n-\tif ( isset( $data ) ) {\r\n-\t\tif ( is_wp_error( $data ) ) {\r\n-\t\t\t$result = array();\r\n-\t\t\tforeach ( $data->errors as $code => $messages ) {\r\n-\t\t\t\tforeach ( $messages as $message ) {\r\n-\t\t\t\t\t$result[] = array(\r\n-\t\t\t\t\t\t'code'    => $code,\r\n-\t\t\t\t\t\t'message' => $message,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response['data'] = $result;\r\n-\t\t} else {\r\n-\t\t\t$response['data'] = $data;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tlearn_press_send_json( $response );\r\n-}\r\n-\r\n-\u002F**\r\n- * Send json with error signal to browser.\r\n- *\r\n- * @param array|object|WP_Error $data\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-function learn_press_send_json_success( $data = '' ) {\r\n-\t$response = array( 'success' => true );\r\n-\r\n-\tif ( isset( $data ) ) {\r\n-\t\t$response['data'] = $data;\r\n-\t}\r\n-\r\n-\tlearn_press_send_json( $response );\r\n-}\r\n-\r\n-\u002F**\r\n- * Check if ajax is calling then send json data.\r\n- *\r\n- * @param array $data\r\n- * @param mixed $callback\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_maybe_send_json( $data, $callback = null ) {\r\n-\tif ( learn_press_is_ajax() ) {\r\n-\t\tis_callable( $callback ) && call_user_func( $callback );\r\n-\t\t$message = learn_press_get_messages( true );\r\n-\t\tif ( empty( $data['message'] ) && $message ) {\r\n-\t\t\t$data['message'] = $message;\r\n-\t\t}\r\n-\t\tlearn_press_send_json( $data );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get data from request.\r\n- *\r\n- * @param string $key\r\n- * @param mixed  $default\r\n- * @param mixed  $hash\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_request( $key, $default = null, $hash = null ) {\r\n-\t$return = $default;\r\n-\r\n-\tif ( $hash ) {\r\n-\t\tif ( ! empty( $hash[ $key ] ) ) {\r\n-\t\t\t$return = $hash[ $key ];\r\n-\t\t}\r\n-\t} else {\r\n-\t\tif ( ! empty( $_POST[ $key ] ) ) {\r\n-\t\t\t$return = LP_Helper::sanitize_params_submitted( $_POST[ $key ] );\r\n-\t\t} elseif ( ! empty( $_GET[ $key ] ) ) {\r\n-\t\t\t$return = LP_Helper::sanitize_params_submitted( $_GET[ $key ] );\r\n-\t\t} elseif ( ! empty( $_REQUEST[ $key ] ) ) {\r\n-\t\t\t$return = LP_Helper::sanitize_params_submitted( $_REQUEST[ $key ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $return;\r\n-}\r\n-\r\n-\u002F**\r\n- * @return mixed\r\n- *\u002F\r\n-function is_learnpress() {\r\n-\treturn apply_filters(\r\n-\t\t'is_learnpress',\r\n-\t\t( learn_press_is_course_archive() || learn_press_is_course_taxonomy() || learn_press_is_course() || learn_press_is_quiz() || learn_press_is_search() ) ? true : false\r\n-\t);\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_search' ) ) {\r\n-\tfunction learn_press_is_search() {\r\n-\t\treturn array_key_exists( 's', $_REQUEST ) && array_key_exists( 'ref', $_REQUEST ) && sanitize_text_field( $_REQUEST['ref'] ) == 'course';\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_courses' ) ) {\r\n-\tfunction learn_press_is_courses() {\r\n-\t\treturn learn_press_is_course_archive();\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course_archive' ) ) {\r\n-\tfunction learn_press_is_course_archive() {\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\t$queried_object_id = ! empty( $wp_query->queried_object ) ? $wp_query->queried_object : 0;\r\n-\t\t$is_tag            = defined( 'LEARNPRESS_IS_TAG' ) && LEARNPRESS_IS_TAG || is_tax( 'course_tag' );\r\n-\t\t$is_category       = defined( 'LEARNPRESS_IS_CATEGORY' ) && LEARNPRESS_IS_CATEGORY || is_tax( 'course_category' );\r\n-\t\t$page_id           = learn_press_get_page_id( 'courses' );\r\n-\r\n-\t\treturn ( $is_category || $is_tag ) || is_post_type_archive( 'lp_course' ) || ( $page_id && ( $queried_object_id && is_page( $page_id ) ) );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course_tax' ) ) {\r\n-\tfunction learn_press_is_course_tax() {\r\n-\t\treturn is_tax( get_object_taxonomies( LP_COURSE_CPT ) );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course_taxonomy' ) ) {\r\n-\tfunction learn_press_is_course_taxonomy() {\r\n-\t\treturn ( defined( 'LEARNPRESS_IS_TAX' ) && LEARNPRESS_IS_TAX ) || learn_press_is_course_tax();\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course_category' ) ) {\r\n-\tfunction learn_press_is_course_category( $term = '' ) {\r\n-\t\treturn ( defined( 'LEARNPRESS_IS_CATEGORY' ) && LEARNPRESS_IS_CATEGORY ) || is_tax( 'course_category', $term );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course_tag' ) ) {\r\n-\tfunction learn_press_is_course_tag( $term = '' ) {\r\n-\t\treturn ( defined( 'LEARNPRESS_IS_TAG' ) && LEARNPRESS_IS_TAG ) || is_tax( 'course_tag', $term );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_course' ) ) {\r\n-\tfunction learn_press_is_course(): bool {\r\n-\t\ttry {\r\n-\t\t\treturn is_singular( array( LP_COURSE_CPT ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_lesson' ) ) {\r\n-\tfunction learn_press_is_lesson() {\r\n-\t\treturn is_singular( array( LP_LESSON_CPT ) );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_quiz' ) ) {\r\n-\tfunction learn_press_is_quiz() {\r\n-\t\treturn is_singular( array( LP_QUIZ_CPT ) );\r\n-\t}\r\n-}\r\n-\r\n-function lp_content_has_shortcode( $tag = '' ) {\r\n-\tglobal $post;\r\n-\r\n-\treturn is_singular() && is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, $tag );\r\n-}\r\n-\r\n-\u002F**\r\n- * Returns true when viewing profile page.\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_profile() {\r\n-\t$page_id = learn_press_get_page_id( 'profile' );\r\n-\r\n-\tif ( $page_id && is_page( $page_id ) || lp_content_has_shortcode( 'learn_press_profile' ) ) {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fis-profile', false );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return true if user is in checking out page\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_checkout() {\r\n-\t$page_id = learn_press_get_page_id( 'checkout' );\r\n-\r\n-\tif ( $page_id && is_page( $page_id ) ) {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fis-checkout', false );\r\n-}\r\n-\r\n-function learn_press_is_instructors() {\r\n-\t$page_id = learn_press_get_page_id( 'instructors' );\r\n-\r\n-\tif ( $page_id && is_page( $page_id ) ) {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fis-instructor', false );\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Return register permalink\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_register_url() {\r\n-\treturn apply_filters( 'learn_press_register_url', wp_registration_url() );\r\n-}\r\n-\r\n-\u002F**\r\n- * Add a new notice into queue\r\n- *\r\n- * @param string\r\n- * @param string\r\n- *\r\n- * @return mixed\r\n- * @deprecated 4.2.5\r\n- *\u002F\r\n-function learn_press_add_notice( $message, $type = 'updated' ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.5' );\r\n-\tLP_Admin_Notice::instance()->add( $message, $type );\r\n-}\r\n-\r\n-\u002F**\r\n- * Set user's cookie\r\n- *\r\n- * @param string $name\r\n- * @param mixed $value\r\n- * @param int $expire\r\n- * @param bool $httponly\r\n- *\r\n- * @editor tungnx\r\n- * @version 1.0.3\r\n- *\u002F\r\n-function learn_press_setcookie( string $name = '', string $value = '', int $expire = 0, bool $httponly = true ) {\r\n-\t@setcookie( $name, $value, $expire, COOKIEPATH ?: '\u002F', COOKIE_DOMAIN, is_ssl(), $httponly );\r\n-}\r\n-\r\n-\u002F**\r\n- * Clear cookie\r\n- *\r\n- * @param string $name\r\n- *\u002F\r\n-function learn_press_remove_cookie( string $name = '' ) {\r\n-\tif ( ! empty( $name ) ) {\r\n-\t\tsetcookie( $name, '', time() - YEAR_IN_SECONDS, COOKIEPATH ? COOKIEPATH : '\u002F', COOKIE_DOMAIN, is_ssl(), true );\r\n-\t}\r\n-\r\n-\tif ( array_key_exists( $name, $_COOKIE ) ) {\r\n-\t\tunset( $_COOKIE[ $name ] );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Filter the login url so third-party can be customized\r\n- *\r\n- * @param string $redirect\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_login_url( $redirect = null ) {\r\n-\t$url          = wp_login_url( $redirect );\r\n-\t$profile_page = learn_press_get_page_link( 'profile' );\r\n-\r\n-\tif ( 'yes' === LP_Settings::instance()->get( 'enable_login_profile' ) && $profile_page ) {\r\n-\t\t$parse_url = parse_url( $url );\r\n-\t\t$url       = $profile_page . ( ! empty( $parse_url['query'] ) ? '?' . $parse_url['query'] : '' );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Flogin-url', $url );\r\n-}\r\n-\r\n-\u002F**\r\n- * Add variable to an url by checking the permalink structure.\r\n- *\r\n- * @param string $name\r\n- * @param string $value\r\n- * @param string $url\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_endpoint_url( $name, $value, $url ) {\r\n-\tif ( ! $url ) {\r\n-\t\t$url = get_permalink();\r\n-\t}\r\n-\r\n-\t\u002F\u002F Map endpoint to options\r\n-\t$name = isset( LearnPress::instance()->query_vars[ $name ] ) ? LearnPress::instance()->query_vars[ $name ] : $name;\r\n-\r\n-\tif ( get_option( 'permalink_structure' ) ) {\r\n-\t\tif ( strstr( $url, '?' ) ) {\r\n-\t\t\t$query_string = '?' . parse_url( $url, PHP_URL_QUERY );\r\n-\t\t\t$url          = current( explode( '?', $url ) );\r\n-\t\t} else {\r\n-\t\t\t$query_string = '';\r\n-\t\t}\r\n-\t\t$url = trailingslashit( $url ) . ( $name ? $name . '\u002F' : '' ) . $value . $query_string;\r\n-\r\n-\t} else {\r\n-\t\t$url = esc_url_raw( add_query_arg( $name, $value, $url ) );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_get_endpoint_url', esc_url_raw( $url ), $name, $value, $url );\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.3\r\n- *\u002F\r\n-function learn_press_is_yes( $value ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.3' );\r\n-\treturn ( $value === 1 ) || ( $value === '1' ) || ( $value == 'yes' ) || ( $value == true ) || ( $value == 'on' );\r\n-}\r\n-\r\n-\u002F**\r\n- * @param mixed $value\r\n- *\r\n- * @return bool\r\n- * @deprecated 4.2.3\r\n- *\u002F\r\n-function _is_false_value( $value ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.3' );\r\n-\tif ( is_numeric( $value ) ) {\r\n-\t\treturn $value == 0;\r\n-\t} elseif ( is_string( $value ) ) {\r\n-\t\treturn ( empty( $value ) || is_null( $value ) || in_array( $value, array( 'no', 'off', 'false' ) ) );\r\n-\t}\r\n-\r\n-\treturn ! ! $value;\r\n-}\r\n-\r\n-\u002F**\r\n- * Map the query vars from LP to query vars of WP core\r\n- * when WP parse the requesting.\r\n- *\u002F\r\n-function learn_press_parse_request() {\r\n-\tglobal $wp;\r\n-\r\n-\t\u002F\u002F Map query vars to their keys, or get them if endpoints are not supported\r\n-\tforeach ( LearnPress::instance()->query_vars as $key => $var ) {\r\n-\t\tif ( isset( $_GET[ $var ] ) ) {\r\n-\t\t\t$wp->query_vars[ $key ] = LP_Helper::sanitize_params_submitted( $_GET[ $var ] ?? '' );\r\n-\t\t} elseif ( isset( $wp->query_vars[ $var ] ) ) {\r\n-\t\t\t$wp->query_vars[ $key ] = LP_Helper::sanitize_params_submitted( $wp->query_vars[ $var ] ?? '' );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'parse_request', 'learn_press_parse_request' );\r\n-\r\n-if ( ! function_exists( 'learn_press_reset_auto_increment' ) ) {\r\n-\t\u002F**\r\n-\t * Reset AUTO INCREMENT of the table.\r\n-\t *\r\n-\t * @param $table\r\n-\t *\u002F\r\n-\tfunction learn_press_reset_auto_increment( $table ) {\r\n-\t\tglobal $wpdb;\r\n-\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->prefix}$table AUTO_INCREMENT = %d\", 1 ) );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the cart object in checkout page\r\n- *\r\n- * @return LP_Cart\r\n- * @deprecated 4.2.0\r\n- *\u002F\r\n-function learn_press_get_checkout_cart() {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.0', 'LearnPress::instance()->cart' );\r\n-\treturn apply_filters( 'learn_press_checkout_cart', LearnPress::instance()->cart );\r\n-}\r\n-\r\n-function learn_press_user_time( $time, $format = 'timestamp' ) {\r\n-\tif ( is_string( $time ) ) {\r\n-\t\t$time = @strtotime( $time );\r\n-\t}\r\n-\t$time = $time + ( get_option( 'gmt_offset' ) - $_COOKIE['timezone'] \u002F 60 ) * HOUR_IN_SECONDS;\r\n-\tswitch ( $format ) {\r\n-\t\tcase 'timestamp':\r\n-\t\t\treturn $time;\r\n-\t\tdefault:\r\n-\t\t\treturn date( 'Y-m-d H:i:s', $time );\r\n-\t}\r\n-}\r\n-\r\n-function learn_press_get_current_version() {\r\n-\t$data = get_plugin_data( LP_PLUGIN_FILE, $markup = true, $translate = true );\r\n-\r\n-\treturn $data['Version'];\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current tab is displaying in user profile.\r\n- * If there is no tab then get the first tab in\r\n- * the list of tabs.\r\n- *\r\n- * @param bool $default\r\n- *\r\n- * @return mixed|string\r\n- * @deprecated 4.2.2\r\n- * addon commission 4.0.2 still use this function\r\n- *\u002F\r\n-function learn_press_get_current_profile_tab( $default = true ) {\r\n-\tglobal $wp_query, $wp;\r\n-\t$current = '';\r\n-\r\n-\t\u002F\u002F Only load on profile page.\r\n-\tif ( ! LP_Page_Controller::is_page_profile() ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tif ( ! empty( $_REQUEST['tab'] ) ) {\r\n-\t\t$current = LP_Helper::sanitize_params_submitted( $_REQUEST['tab'] );\r\n-\t} elseif ( ! empty( $wp_query->query_vars['tab'] ) ) {\r\n-\t\t$current = $wp_query->query_vars['tab'];\r\n-\t} elseif ( ! empty( $wp->query_vars['view'] ) ) {\r\n-\t\t$current = $wp->query_vars['view'];\r\n-\t} else {\r\n-\t\t$tabs = learn_press_get_user_profile_tabs();\r\n-\t\tif ( $default && $tabs ) {\r\n-\t\t\t\u002F\u002F Fixed for array_keys does not work with ArrayAccess instance\r\n-\t\t\tif ( $tabs instanceof LP_Profile_Tabs ) {\r\n-\t\t\t\t$tabs = $tabs->tabs();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tab_keys = array_keys( $tabs );\r\n-\t\t\t$current  = reset( $tab_keys );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $current;\r\n-}\r\n-\r\n-\u002F\u002Fadd_action( 'init', 'learn_press_get_current_profile_tab' );\r\n-\r\n-function learn_press_profile_tab_exists( $tab ) {\r\n-\t$tabs = learn_press_get_user_profile_tabs();\r\n-\r\n-\tif ( $tabs ) {\r\n-\t\treturn ! empty( $tabs[ $tab ] ) ? true : false;\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-function learn_press_single_term_title( $prefix = '', $display = true ) {\r\n-\t$term = get_queried_object();\r\n-\r\n-\tif ( ! $term ) {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\tif ( learn_press_is_course_category() ) {\r\n-\t\t$term_name = apply_filters( 'single_course_category_title', $term->name );\r\n-\t} elseif ( learn_press_is_course_tag() ) {\r\n-\t\t$term_name = apply_filters( 'single_course_tag_title', $term->name );\r\n-\t} elseif ( learn_press_is_course_taxonomy() ) {\r\n-\t\t$term_name = apply_filters( 'single_course_term_title', $term->name );\r\n-\t} else {\r\n-\t\treturn single_term_title( $prefix, $display );\r\n-\t}\r\n-\r\n-\tif ( empty( $term_name ) ) {\r\n-\t\treturn single_term_title( $prefix, $display );\r\n-\t}\r\n-\r\n-\tif ( $display ) {\r\n-\t\techo wp_kses_post( $prefix . $term_name );\r\n-\t}\r\n-\r\n-\treturn $prefix . $term_name;\r\n-}\r\n-\r\n-\u002F**\r\n- * Control the template file if user is searching course.\r\n- * Use the template of archive course to display the\r\n- * result if there is a flag in request to search course.\r\n- *\r\n- * @param string $template\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_search_template( $template ) {\r\n-\tif ( ! empty( $_REQUEST['ref'] ) && sanitize_text_field( $_REQUEST['ref'] ) == 'course' ) {\r\n-\t\t$template = learn_press_locate_template( 'archive-course.php' );\r\n-\t}\r\n-\r\n-\treturn $template;\r\n-}\r\n-\r\n-\u002F**\r\n- * Auto enroll user to a course after an order is completed\r\n- * if the option auto-enroll is turn on.\r\n- *\r\n- * @param int $order_id\r\n- *\r\n- * @return mixed\r\n- * @editor tungnx\r\n- *\u002F\r\n-function learn_press_auto_enroll_user_to_courses( $order_id ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.1.3' );\r\n-}\r\n-\r\n-\u002F\u002F add_action( 'learn_press_order_status_completed', 'learn_press_auto_enroll_user_to_courses' );\r\n-\r\n-\u002F**\r\n- * Return true if enable cart\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_enable_cart() {\r\n-\treturn defined( 'LP_ENABLE_CART' ) && LP_ENABLE_CART == true;\r\n-}\r\n-\r\n-\u002F**\r\n- * Short way to get checkout object\r\n- *\r\n- * @param array\r\n- *\r\n- * @return LP_Checkout\r\n- *\u002F\r\n-function learn_press_get_checkout( $args = null ) {\r\n-\t$checkout = LP_Checkout::instance();\r\n-\r\n-\tif ( is_array( $args ) ) {\r\n-\t\tforeach ( $args as $k => $v ) {\r\n-\t\t\t$checkout->{$k} = $v;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $checkout;\r\n-}\r\n-\r\n-if ( defined( 'LP_ENABLE_CART' ) && LP_ENABLE_CART ) {\r\n-\tadd_filter( 'learn_press_checkout_settings', '_learn_press_cart_settings', 10, 2 );\r\n-\tfunction _learn_press_cart_settings( $settings, $class ) {\r\n-\t\t$settings = array_merge(\r\n-\t\t\t$settings,\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => __( 'Cart', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'title',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => __( 'Enable cart', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => __(\r\n-\t\t\t\t\t\t'Check this option to enable users to purchase multiple courses at one time.',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'id'      => $class->get_field_name( 'enable_cart' ),\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => __( 'Add to cart redirect', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => __( 'Redirect to checkout immediately after adding the course to the cart.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => $class->get_field_name( 'redirect_after_add' ),\r\n-\t\t\t\t\t'default' => 'yes',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => __( 'AJAX add to cart', 'learnpress' ),\r\n-\t\t\t\t\t'desc'    => __( 'Using AJAX to add the course to the cart.', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => $class->get_field_name( 'ajax_add_to_cart' ),\r\n-\t\t\t\t\t'default' => 'no',\r\n-\t\t\t\t\t'type'    => 'checkbox',\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title'   => __( 'Cart page', 'learnpress' ),\r\n-\t\t\t\t\t'id'      => $class->get_field_name( 'cart_page_id' ),\r\n-\t\t\t\t\t'default' => '',\r\n-\t\t\t\t\t'type'    => 'pages-dropdown',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn $settings;\r\n-\t}\r\n-} else {\r\n-\tadd_filter( 'learn_press_enable_cart', '_learn_press_enable_cart', 1000 );\r\n-\tfunction _learn_press_enable_cart( $r ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tadd_filter( 'learn_press_get_template', '_learn_press_enroll_button', 1000, 5 );\r\n-\tfunction _learn_press_enroll_button( $located, $template_name, $args, $template_path, $default_path ) {\r\n-\t\tif ( $template_name == 'single-course\u002Fenroll-button.php' ) {\r\n-\t\t\t$located = learn_press_locate_template(\r\n-\t\t\t\t'single-course\u002Fenroll-button-new.php',\r\n-\t\t\t\t$template_path,\r\n-\t\t\t\t$default_path\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $located;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Returns checkout url from setting\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_checkout_url() {\r\n-\t$checkout_url = learn_press_get_page_link( 'checkout' );\r\n-\r\n-\treturn apply_filters( 'learn_press_get_checkout_url', $checkout_url );\r\n-}\r\n-\r\n-\u002F**\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_checkout_needs_payment() {\r\n-\treturn LearnPress::instance()->cart->needs_payment();\r\n-}\r\n-\r\n-\u002F**\r\n- * Return plugin basename\r\n- *\r\n- * @param string $filepath\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-\u002F*\r\n-function learn_press_plugin_basename( $filepath ) {\r\n-\t$file          = str_replace( '\\\\', '\u002F', $filepath );\r\n-\t$file          = preg_replace( '|\u002F+|', '\u002F', $file );\r\n-\t$plugin_dir    = str_replace( '\\\\', '\u002F', WP_PLUGIN_DIR );\r\n-\t$plugin_dir    = preg_replace( '|\u002F+|', '\u002F', $plugin_dir );\r\n-\t$mu_plugin_dir = str_replace( '\\\\', '\u002F', WPMU_PLUGIN_DIR );\r\n-\t$mu_plugin_dir = preg_replace( '|\u002F+|', '\u002F', $mu_plugin_dir );\r\n-\t$sp_plugin_dir = dirname( $filepath );\r\n-\t$sp_plugin_dir = dirname( $sp_plugin_dir );\r\n-\t$sp_plugin_dir = str_replace( '\\\\', '\u002F', $sp_plugin_dir );\r\n-\t$sp_plugin_dir = preg_replace( '|\u002F+|', '\u002F', $sp_plugin_dir );\r\n-\r\n-\t$file = preg_replace(\r\n-\t\t'#^' . preg_quote( $sp_plugin_dir, '#' ) . '\u002F|^' . preg_quote(\r\n-\t\t\t$plugin_dir,\r\n-\t\t\t'#'\r\n-\t\t) . '\u002F|^' . preg_quote(\r\n-\t\t\t$mu_plugin_dir,\r\n-\t\t\t'#'\r\n-\t\t) . '\u002F#',\r\n-\t\t'',\r\n-\t\t$file\r\n-\t);\r\n-\t$file = trim( $file, '\u002F' );\r\n-\r\n-\treturn strtolower( $file );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Update log data for each LP version into wp option.\r\n- *\r\n- * @param string $version\r\n- * @param mixed  $data\r\n- *\u002F\r\n-function learn_press_update_log( $version, $data ) {\r\n-\t$logs = get_option( 'learn_press_update_logs' );\r\n-\tif ( ! $logs ) {\r\n-\t\t$logs = array( $version => $data );\r\n-\t} else {\r\n-\t\t$logs[ $version ] = $data;\r\n-\t}\r\n-\tupdate_option( 'learn_press_update_logs', $logs );\r\n-}\r\n-\r\n-\u002F**\r\n- * Output variables to screen for debugging.\r\n- *\u002F\r\n-function learn_press_debug() {\r\n-\t$args  = func_get_args();\r\n-\t$debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );\r\n-\r\n-\techo '\u003Cpre>';\r\n-\tprint_r( $debug );\r\n-\t$arg = false;\r\n-\r\n-\tif ( $args ) {\r\n-\t\tforeach ( $args as $arg ) {\r\n-\t\t\techo \"\\n======LearnPress Debug=======\\n\";\r\n-\t\t\tprint_r( $arg );\r\n-\t\t\techo \"\\n=============================\\n\";\r\n-\t\t}\r\n-\t}\r\n-\techo '\u003C\u002Fpre>';\r\n-\r\n-\tif ( true === $arg ) {\r\n-\t\tdie( __FUNCTION__ );\r\n-\t}\r\n-}\r\n-\r\n-function learn_press_get_requested_post_type() {\r\n-\tglobal $pagenow;\r\n-\tif ( $pagenow == 'post-new.php' && ! empty( $_REQUEST['post_type'] ) ) {\r\n-\t\t$post_type = LP_Helper::sanitize_params_submitted( $_REQUEST['post_type'] );\r\n-\t} else {\r\n-\t\t$post_id   = learn_press_get_post();\r\n-\t\t$post_type = learn_press_get_post_type( $post_id );\r\n-\t}\r\n-\r\n-\treturn $post_type;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get human string from grade slug.\r\n- *\r\n- * @param string $slug\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_graduation_text( $slug ) {\r\n-\tswitch ( $slug ) {\r\n-\t\tcase 'passed':\r\n-\t\t\t$text = esc_html__( 'Passed', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'failed':\r\n-\t\t\t$text = esc_html__( 'Failed', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'in-progress':\r\n-\t\t\t$text = esc_html__( 'In Progress', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\t$text = $slug;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fget-graduation-text', $text, $slug );\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_negative_value' ) ) {\r\n-\tfunction learn_press_is_negative_value( $value ) {\r\n-\t\t$return = in_array( $value, array( 'no', 'off', 'false', '0' ) ) || ! $value || $value == '' || $value == null;\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Filter to comment reply link to fix bug the link is invalid for\r\n- * lesson or quiz.\r\n- *\r\n- * @param string     $link\r\n- * @param array      $args\r\n- * @param WP_Comment $comment\r\n- * @param WP_Post    $post\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_comment_reply_link( $link, $args = array(), $comment = null, $post = null ) {\r\n-\r\n-\t$post_type = learn_press_get_post_type( $post );\r\n-\r\n-\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\r\n-\t\treturn $link;\r\n-\t}\r\n-\r\n-\t$course_item = LP_Global::course_item();\r\n-\r\n-\tif ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {\r\n-\t\t$link = sprintf(\r\n-\t\t\t'\u003Ca rel=\"nofollow\" class=\"comment-reply-login\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\tesc_url_raw( wp_login_url( get_permalink() ) ),\r\n-\t\t\t$args['login_text']\r\n-\t\t);\r\n-\t} elseif ( $course_item ) {\r\n-\t\t$onclick = sprintf(\r\n-\t\t\t'return addComment.moveForm( \"%1$s-%2$s\", \"%2$s\", \"%3$s\", \"%4$s\" )',\r\n-\t\t\t$args['add_below'],\r\n-\t\t\t$comment->comment_ID,\r\n-\t\t\t$args['respond_id'],\r\n-\t\t\t$post->ID\r\n-\t\t);\r\n-\r\n-\t\t$link = sprintf(\r\n-\t\t\t\"\u003Ca rel='nofollow' class='comment-reply-link' href='%s' onclick='%s' aria-label='%s'>%s\u003C\u002Fa>\",\r\n-\t\t\tesc_url_raw(\r\n-\t\t\t\tadd_query_arg(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'replytocom' => $comment->comment_ID,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$course_item->get_permalink()\r\n-\t\t\t\t)\r\n-\t\t\t) . '#' . $args['respond_id'],\r\n-\t\t\t$onclick,\r\n-\t\t\tesc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),\r\n-\t\t\t$args['reply_text']\r\n-\t\t);\r\n-\t}\r\n-\r\n-\treturn $link;\r\n-}\r\n-\r\n-add_filter( 'comment_reply_link', 'learn_press_comment_reply_link', 10, 4 );\r\n-\r\n-\u002F**\r\n- * Sanitize content of tooltip\r\n- *\r\n- * @param string $tooltip\r\n- * @param bool   $html\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_sanitize_tooltip( $tooltip, $html = false ) {\r\n-\tif ( $html ) {\r\n-\t\t$tooltip = htmlspecialchars(\r\n-\t\t\twp_kses(\r\n-\t\t\t\thtml_entity_decode( $tooltip ),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'br'     => array(),\r\n-\t\t\t\t\t'em'     => array(),\r\n-\t\t\t\t\t'strong' => array(),\r\n-\t\t\t\t\t'small'  => array(),\r\n-\t\t\t\t\t'span'   => array(),\r\n-\t\t\t\t\t'ul'     => array(),\r\n-\t\t\t\t\t'li'     => array(),\r\n-\t\t\t\t\t'ol'     => array(),\r\n-\t\t\t\t\t'p'      => array(),\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\t} else {\r\n-\t\t$tooltip = esc_attr( $tooltip );\r\n-\t}\r\n-\r\n-\treturn $tooltip;\r\n-}\r\n-\r\n-function learn_press_tooltip( $tooltip, $html = false ) {\r\n-\t$tooltip = learn_press_sanitize_tooltip( $tooltip, $html );\r\n-\techo '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"' . esc_attr( $tooltip ) . '\">\u003C\u002Fspan>';\r\n-}\r\n-\r\n-\u002F**\r\n- * Get default static pages of LP.\r\n- *\r\n- * @return array\r\n- *\r\n- * @since 3.0.0\r\n- * @deprecated 4.2.3\r\n- *\u002F\r\n-function learn_press_static_page_ids() {\r\n-\t$pages = LP_Object_Cache::get( 'static-page-ids', 'learn-press' );\r\n-\r\n-\tif ( false === $pages ) {\r\n-\t\t$pages = array(\r\n-\t\t\t'checkout'         => learn_press_get_page_id( 'checkout' ),\r\n-\t\t\t'courses'          => learn_press_get_page_id( 'courses' ),\r\n-\t\t\t'profile'          => learn_press_get_page_id( 'profile' ),\r\n-\t\t\t'become_a_teacher' => learn_press_get_page_id( 'become_a_teacher' ),\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $pages as $name => $id ) {\r\n-\t\t\tif ( ! get_post( $id ) ) {\r\n-\t\t\t\t$pages[ $name ] = 0;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tLP_Object_Cache::set( 'static-page-ids', $pages, 'learn-press' );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fstatic-page-ids', $pages );\r\n-}\r\n-\r\n-\u002F**\r\n- * Callback function for sorting to array|object by key|prop priority.\r\n- *\r\n- * @param array|object $a\r\n- * @param array|object $b\r\n- *\r\n- * @return int\r\n- * @since 3.0.0\r\n- *\u002F\r\n-function learn_press_sort_list_by_priority_callback( $a, $b ) {\r\n-\t$a_priority = null;\r\n-\t$b_priority = null;\r\n-\r\n-\tif ( is_array( $a ) && array_key_exists( 'priority', $a ) ) {\r\n-\t\t$a_priority = $a['priority'];\r\n-\t} elseif ( is_object( $a ) ) {\r\n-\t\tif ( is_callable( array( $a, 'get_priority' ) ) ) {\r\n-\t\t\t$a_priority = $a->get_priority();\r\n-\t\t} elseif ( property_exists( $a, 'priority' ) ) {\r\n-\t\t\t$a_priority = $a->priority;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( is_array( $b ) && array_key_exists( 'priority', $b ) ) {\r\n-\t\t$b_priority = $b['priority'];\r\n-\t} elseif ( is_object( $b ) ) {\r\n-\t\tif ( is_callable( array( $b, 'get_priority' ) ) ) {\r\n-\t\t\t$b_priority = $b->get_priority();\r\n-\t\t} elseif ( property_exists( $b, 'priority' ) ) {\r\n-\t\t\t$b_priority = $b->priority;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( $a_priority === $b_priority ) {\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\treturn ( $a_priority \u003C $b_priority ) ? - 1 : 1;\r\n-}\r\n-\r\n-\u002F**\r\n- * Localize date with custom format.\r\n- *\r\n- * @param int|bool $timestamp\r\n- * @param string $format\r\n- * @param bool   $gmt\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- * @deprcated 4.2.6 use LP_Datetime format instead\r\n- *\u002F\r\n-function learn_press_date_i18n( $timestamp = 0, string $format = '', bool $gmt = false ): string {\r\n-\tif ( ! $format ) {\r\n-\t\t$format = get_option( 'date_format' );\r\n-\t}\r\n-\r\n-\t$date_str = date_i18n( $format, $timestamp, $gmt );\r\n-\tif ( ! is_string( $date_str ) ) {\r\n-\t\t$date_str = '';\r\n-\t}\r\n-\r\n-\treturn $date_str;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get item types of course support for blocking. Default is lp_lesson\r\n- *\r\n- * @return array\r\n- * @since 3.0.0\r\n- *\u002F\r\n-function learn_press_get_block_course_item_types() {\r\n-\treturn apply_filters( 'learn-press\u002Fblock-course-item-types', array( LP_LESSON_CPT, LP_QUIZ_CPT ) );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get post type of a post from cache.\r\n- * If there is no data stored in cache then\r\n- * get it from WP API.\r\n- *\r\n- * @param int|WP_Post $post\r\n- *\r\n- * @return string\r\n- * @since 3.1.0\r\n- *\u002F\r\n-function learn_press_get_post_type( $post ) {\r\n-\t$post_types = LP_Object_Cache::get( 'post-types', 'learn-press' );\r\n-\r\n-\tif ( false === $post_types ) {\r\n-\t\t$post_types = array();\r\n-\t}\r\n-\r\n-\tif ( is_object( $post ) ) {\r\n-\t\t$post_id = $post->ID;\r\n-\t} else {\r\n-\t\t$post_id = absint( $post );\r\n-\t}\r\n-\r\n-\tif ( empty( $post_types[ $post_id ] ) ) {\r\n-\t\t$post_type              = get_post_type( $post_id );\r\n-\t\t$post_types[ $post_id ] = $post_type;\r\n-\t\tLP_Object_Cache::set( 'post-types', $post_types, 'learn-press' );\r\n-\t} else {\r\n-\t\t$post_type = $post_types[ $post_id ];\r\n-\t}\r\n-\r\n-\treturn $post_type;\r\n-}\r\n-\r\n-\u002F**\r\n- * Update option to enable shuffle themes for ad.\r\n- *\r\n- * @since 3.2.1\r\n- *\u002F\r\n-function _learn_press_schedule_enable_shuffle_themes() {\r\n-\tupdate_option( 'learn_press_ad_shuffle_themes', 'yes' );\r\n-}\r\n-\r\n-add_action( 'learn-press\u002Fschedule-enable-shuffle-themes', '_learn_press_schedule_enable_shuffle_themes' );\r\n-\r\n-\u002F**\r\n- * Return localize script data for admin.\r\n- *\r\n- * @return array\r\n- * @since 3.2.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-function learn_press_global_script_params(): array {\r\n-\t$localize = [\r\n-\t\t'ajax'       => admin_url( 'admin-ajax.php' ),\r\n-\t\t'plugin_url' => LearnPress::instance()->plugin_url(),\r\n-\t\t'siteurl'    => home_url(),\r\n-\t\t\u002F\u002F'current_url' => learn_press_get_current_url(),\r\n-\t\t'theme'      => get_stylesheet(),\r\n-\t\t'localize'   => array(\r\n-\t\t\t'button_ok'     => __( 'OK', 'learnpress' ),\r\n-\t\t\t'button_cancel' => __( 'Cancel', 'learnpress' ),\r\n-\t\t\t'button_yes'    => __( 'Yes', 'learnpress' ),\r\n-\t\t\t'button_no'     => __( 'No', 'learnpress' ),\r\n-\t\t),\r\n-\t\t'rest'       => esc_url_raw( rest_url() ),\r\n-\t\t'nonce'      => wp_create_nonce( 'wp_rest' ),\r\n-\t\t'is_admin'   => current_user_can( ADMIN_ROLE ),\r\n-\t];\r\n-\r\n-\treturn apply_filters( 'lp\u002Fadmin\u002Flocalize\u002Fscripts', $localize );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return list types of questions that support answer options.\r\n- *\r\n- * @return array\r\n- * @since 3.3.0\r\n- *\u002F\r\n-function learn_press_get_question_support_answer_options() {\r\n-\t$questions = learn_press_get_question_support_feature( 'answer-options' );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fquestions-support-answer-options', $questions );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return list types of question that support a feature.\r\n- *\r\n- * @param string $feature\r\n- *\r\n- * @return array\r\n- * @since 3.3.0\r\n- *\u002F\r\n-function learn_press_get_question_support_feature( $feature ) {\r\n-\t$questions = array();\r\n-\t$types     = LP_Global::get_object_supports( 'question' );\r\n-\r\n-\tif ( $types ) {\r\n-\t\tforeach ( $types as $type => $features ) {\r\n-\t\t\tif ( array_key_exists( $feature, $features ) ) {\r\n-\t\t\t\t$questions[] = $type;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $questions;\r\n-}\r\n-\r\n-\u002F**\r\n- * LP Cookie\r\n- *\r\n- * @param $name\r\n- * @param $namespace\r\n- *\r\n- * @return mixed|null\r\n- *\u002F\r\n-function learn_press_cookie_get( $name, $namespace = 'LP' ) {\r\n-\tif ( $namespace ) {\r\n-\t\t$cookie = ! empty( $_COOKIE[ $namespace ] ) ? (array) json_decode( LP_Helper::sanitize_params_submitted( stripslashes( $_COOKIE[ $namespace ] ), 'html' ) ) : array();\r\n-\t} else {\r\n-\t\t$cookie = $_COOKIE;\r\n-\t}\r\n-\r\n-\treturn $cookie[ $name ] ?? null;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get default methods to evaluate course results.\r\n- *\r\n- * @param string $return - Optional. 'keys' will return keys instead of all.\r\n- *\r\n- * @return array\r\n- * @since 3.x.x\r\n- *\u002F\r\n-function learn_press_course_evaluation_methods( $postid, $return = '', $final_quizz_passing = '' ) {\r\n-\t$final_quiz_btn = sprintf(\r\n-\t\t'\u003Ca href=\"#\" class=\"lp-metabox-get-final-quiz\" data-postid=\"%d\" data-loading=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t$postid,\r\n-\t\tesc_attr__( 'Loading...', 'learnpress' ),\r\n-\t\tesc_html__( 'Get A Passing Grade', 'learnpress' )\r\n-\t);\r\n-\r\n-\t$evaluations_desc = array(\r\n-\t\t'evaluate_lesson'     => sprintf(\r\n-\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\r\n-\t\t\t__( 'Evaluate by the number of completed lessons per the total number of lessons.', 'learnpress' ),\r\n-\t\t\t__( 'E.g: If a course has 10 lessons and a user completes 5 lessons, then the result is 5\u002F10 (50%).', 'learnpress' )\r\n-\t\t),\r\n-\t\t'evaluate_final_quiz' => __(\r\n-\t\t\t'Evaluate by the result of the final quiz in the course. You have to add a quiz at the end of the course.',\r\n-\t\t\t'learnpress'\r\n-\t\t),\r\n-\t\t'evaluate_quiz'       => sprintf(\r\n-\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\r\n-\t\t\t__( 'Evaluate by the number of passed quizzes per the total number of quizzes.', 'learnpress' ),\r\n-\t\t\t__(\r\n-\t\t\t\t'E.g: If the course has 10 quizzes and the user passes 5 quizzes, then the result is 5\u002F10 (50%).',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\t'evaluate_questions'  => sprintf(\r\n-\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\r\n-\t\t\t__( 'Evaluate by the number of correct answers per the total number of questions.', 'learnpress' ),\r\n-\t\t\t__(\r\n-\t\t\t\t'E.g: If the course has 10 questions and the user corrects 5 questions, then the result is 5\u002F10 (50%).',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\t'evaluate_mark'       => __( 'Evaluate by the number of achieved scores per the total score of the questions.', 'learnpress' ),\r\n-\t);\r\n-\r\n-\t$methods = apply_filters(\r\n-\t\t'learnpress\u002Fcourse-evaluation\u002Fmethods',\r\n-\t\tarray(\r\n-\t\t\t'evaluate_lesson'     => sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'Evaluate via lessons', 'learnpress' ),\r\n-\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_lesson'], false )\r\n-\t\t\t),\r\n-\t\t\t'evaluate_final_quiz' => sprintf(\r\n-\t\t\t\t'%s %s %s %s',\r\n-\t\t\t\t__( 'Evaluate via results of the final quiz', 'learnpress' ),\r\n-\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_final_quiz'], false ),\r\n-\t\t\t\t$final_quiz_btn,\r\n-\t\t\t\t$final_quizz_passing\r\n-\t\t\t),\r\n-\t\t\t'evaluate_quiz'       => sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'Evaluate via passed quizzes', 'learnpress' ),\r\n-\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_quiz'], false )\r\n-\t\t\t),\r\n-\t\t\t'evaluate_questions'  => sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'Evaluate via questions', 'learnpress' ),\r\n-\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_questions'], false )\r\n-\t\t\t),\r\n-\t\t\t'evaluate_mark'       => sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'Evaluate via mark', 'learnpress' ),\r\n-\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_mark'], false )\r\n-\t\t\t),\r\n-\t\t),\r\n-\t\t$postid\r\n-\t);\r\n-\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Fcourse-evaluation-methods',\r\n-\t\t$return === 'keys' ? array_keys( $methods ) : $methods,\r\n-\t\t$return\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Get max retrying quiz allowed.\r\n- *\r\n- * @param int $quiz_id\r\n- * @param int $course_id\r\n- *\r\n- * @return int\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_get_quiz_max_retrying( $quiz_id = 0, $course_id = 0 ) {\r\n-\treturn apply_filters( 'learn-press\u002Fmax-retry-quiz-allowed', 1, $quiz_id, $course_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get slug for status of course\u002Flesson\u002Fquiz if user\r\n- * completed\u002Ffinished and graduation is passed.\r\n- *\r\n- * @param string $type\r\n- *\r\n- * @return string\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_user_item_in_progress_slug( $type = '' ) {\r\n-\treturn apply_filters( 'learn-press\u002Fuser-item-in-progress-slug', 'in-progress', $type );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get slug for status of course\u002Flesson\u002Fquiz if user\r\n- * completed\u002Ffinished and result is under-evaluation\r\n- *\r\n- * @param string $item - Optional. Type of item\r\n- *\r\n- * @return string\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_user_item_under_evaluation_slug( $item = '' ) {\r\n-\treturn apply_filters( 'learn-press\u002Fuser-item-under-evaluation-slug', 'in-progress', $item );\r\n-}\r\n-\r\n-function learn_press_is_enrolled_slug( $slug ) {\r\n-\treturn in_array(\r\n-\t\t$slug,\r\n-\t\tarray(\r\n-\t\t\t'in-progress',\r\n-\t\t\t'enrolled',\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * @return array\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function lp_item_course_class( $class = array() ) {\r\n-\t$classes = array_merge(\r\n-\t\t$class,\r\n-\t\tarray( 'learn-press-courses' )\r\n-\t);\r\n-\techo 'class=\"' . esc_attr( implode( ' ', apply_filters( 'lp_item_course_class', $classes ) ) ) . '\"';\r\n-}\r\n-\r\n-\u002F\u002Frequire_once dirname( __FILE__ ) . '\u002Flp-custom-hooks.php';\r\n-\r\n-\u002F\u002F Notify update message for LearnPress plugin\r\n-\u002F*add_action(\r\n-\t'in_plugin_update_message-learnpress\u002Flearnpress.php',\r\n-\tfunction ( $plugin_data ) {\r\n-\t\tif ( version_compare( $plugin_data['new_version'], LEARNPRESS_VERSION, '\u003C=' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo sprintf(\r\n-\t\t\t'\u003Chr\u002F>\u003Ch3>%s\u003C\u002Fh3>\u003Cdiv>%s\u003C\u002Fdiv>',\r\n-\t\t\tesc_html__( 'Heads up! Please backup before upgrading!', 'learnpress' ),\r\n-\t\t\tesc_html__( 'The latest update includes some substantial changes across different areas of the plugin. We highly recommend you backup your site before upgrading, and make sure you first update in a staging environment', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-);*\u002F\r\n-\r\n-\u002F**\r\n- * If Elementor Pro set Theme builder type \"Archive\", will not show content on page \"Archive course\"\r\n- *\r\n- * @editor tungnx\r\n- * @author nhamdv\r\n- *\r\n- * @since 4.0.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-add_filter(\r\n-\t'elementor\u002Ftheme\u002Fget_location_templates\u002Ftemplate_id',\r\n-\tfunction ( $theme_template_id ) {\r\n-\t\t$elementor_template_type = get_post_meta( $theme_template_id, '_elementor_template_type', true );\r\n-\r\n-\t\tif ( in_array( $elementor_template_type, array( 'archive' ) ) ) {\r\n-\t\t\tif ( LP_PAGE_COURSES === LP_Page_Controller::page_current() && class_exists( 'ElementorPro\\Modules\\ThemeBuilder\\Conditions\\Archive' ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $theme_template_id;\r\n-\t}\r\n-);\r\n+\u003C?php\n+\u002F**\n+ * LearnPress Core Functions\n+ * Define common functions for both front-end and back-end\n+ *\n+ * @author   ThimPress\n+ * @package  LearnPress\u002FFunctions\n+ * @version  1.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Vue write php has script, so when sanitize will error, so use code is mask pass check sanitize, esc\n+ *\n+ * @param $content\n+ *\n+ * @return void\n+ * @since 4.1.6.9\n+ *\u002F\n+function learn_press_echo_vuejs_write_on_php( $content ) {\n+\techo ( $content );\n+}\n+\n+function learnpress_gutenberg_disable_cpt( $can_edit, $post_type ) {\n+\t$post_types = array(\n+\t\tLP_COURSE_CPT   => LP_Settings::get_option( 'enable_gutenberg_course', 'no' ),\n+\t\tLP_LESSON_CPT   => LP_Settings::get_option( 'enable_gutenberg_lesson', 'no' ),\n+\t\tLP_QUIZ_CPT     => LP_Settings::get_option( 'enable_gutenberg_quiz', 'no' ),\n+\t\tLP_QUESTION_CPT => LP_Settings::get_option( 'enable_gutenberg_question', 'no' ),\n+\t);\n+\n+\tforeach ( $post_types as $key => $pt ) {\n+\t\tif ( $post_type === $key && $pt !== 'yes' ) {\n+\t\t\t$can_edit = false;\n+\t\t}\n+\t}\n+\n+\treturn $can_edit;\n+}\n+add_filter( 'use_block_editor_for_post_type', 'learnpress_gutenberg_disable_cpt', 10, 2 );\n+\n+if ( ! function_exists( 'lp_add_body_class' ) ) {\n+\tfunction lp_add_body_class( $classes ) {\n+\t\t$classes = (array) $classes;\n+\n+\t\tif ( LP_Page_Controller::is_page_profile() ) {\n+\t\t\t$classes[] = 'learnpress-profile';\n+\t\t} elseif ( learn_press_is_checkout() ) {\n+\t\t\t$classes[] = 'learnpress-checkout';\n+\t\t}\n+\n+\t\treturn $classes;\n+\t}\n+\tadd_filter( 'body_class', 'lp_add_body_class' );\n+}\n+\n+\u002F**\n+ * Short function to get name of a theme\n+ *\n+ * @param string $folder\n+ *\n+ * @return mixed|string\n+ *\u002F\n+function learn_press_get_theme_name( $folder ) {\n+\t$theme = wp_get_theme( $folder );\n+\n+\treturn ! empty( $theme['Name'] ) ? $theme['Name'] : '';\n+}\n+\n+\u002F**\n+ * Clean.\n+ *\n+ * @param [type] $var\n+ *\n+ * @version 4.0.0\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+function learnpress_clean( $var ) {\n+\tif ( is_array( $var ) ) {\n+\t\treturn array_map( 'learnpress_clean', $var );\n+\t} else {\n+\t\treturn is_scalar( $var ) ? sanitize_text_field( $var ) : $var;\n+\t}\n+}\n+\n+\u002F**\n+ * Display HTML of element for building QuickTip JS.\n+ *\n+ * @param string $tip\n+ * @param bool   $echo\n+ * @param array  $options\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ *\u002F\n+function learn_press_quick_tip( $tip, $echo = true, $options = array() ) {\n+\t$atts = '';\n+\tif ( $options ) {\n+\t\tforeach ( $options as $k => $v ) {\n+\t\t\t$options[ $k ] = \"data-{$k}=\\\"{$v}\\\"\";\n+\t\t}\n+\t\t$atts = ' ' . implode( ' ', $options );\n+\t}\n+\n+\t$tip = sprintf( '\u003Cdiv class=\"learn-press-tip\" ' . $atts . '>\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fdiv>', $tip );\n+\n+\tif ( $echo ) {\n+\t\techo wp_kses_post( $tip );\n+\t}\n+\n+\treturn $tip;\n+}\n+\n+\u002F**\n+ * Get current post ID.\n+ *\n+ * @return int\n+ *\u002F\n+function learn_press_get_post() {\n+\tglobal $post;\n+\n+\t$post_id = learn_press_get_request( 'post' );\n+\n+\tif ( ! $post_id ) {\n+\t\t$post_id = ! empty( $post ) ? $post->ID : 0;\n+\t}\n+\tif ( empty( $post_id ) ) {\n+\t\t$post_id = learn_press_get_request( 'post_ID' );\n+\t}\n+\n+\treturn absint( $post_id );\n+}\n+\n+\u002F**\n+ * Get the LearnPress plugin url\n+ *\n+ * @param string $sub_dir\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_plugin_url( $sub_dir = '' ) {\n+\treturn LearnPress::instance()->plugin_url( $sub_dir );\n+}\n+\n+\u002F**\n+ * Get the LearnPress plugin path.\n+ *\n+ * @param string $sub_dir\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_plugin_path( $sub_dir = '' ) {\n+\treturn LearnPress::instance()->plugin_path( $sub_dir );\n+}\n+\n+\u002F**\n+ * Includes file base on LearnPress path\n+ *\n+ * @param string $file\n+ * @param string $folder\n+ * @param bool   $include_once\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_include( $file, $folder = 'inc', $include_once = true ) {\n+\t$include = learn_press_plugin_path( \"{$folder}\u002F{$file}\" );\n+\n+\tif ( file_exists( $include ) ) {\n+\t\tif ( $include_once ) {\n+\t\t\tinclude_once $include;\n+\t\t} else {\n+\t\t\tinclude $include;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\treturn false;\n+}\n+\n+\u002F**\n+ * Get current IP of the user\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_ip() {\n+\tif ( isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {\n+\t\treturn sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_REAL_IP'] ) );\n+\t} elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\n+\t\t\u002F\u002F Proxy servers can send through this header like this: X-Forwarded-For: client1, proxy1, proxy2\n+\t\t\u002F\u002F Make sure we always only send through the first IP in the list which should always be the client IP.\n+\t\treturn (string) rest_is_ip_address( trim( current( preg_split( '\u002F,\u002F', sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) ) ) ) );\n+\t} elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {\n+\t\treturn sanitize_text_field( wp_unslash( $_SERVER['REMOTE_ADDR'] ) );\n+\t}\n+\treturn '';\n+}\n+\n+\u002F**\n+ * Get user agent.\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_user_agent(): string {\n+\treturn LP_Helper::sanitize_params_submitted( $_SERVER['HTTP_USER_AGENT'] ?? '' );\n+}\n+\n+\u002F**\n+ * Generate an unique string.\n+ *\n+ * @param string $prefix\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_uniqid( $prefix = '' ) {\n+\t$hash = str_replace( '.', '', microtime( true ) . uniqid() );\n+\n+\treturn apply_filters( 'learn-press\u002Fgenerate-hash', $prefix . $hash, $prefix );\n+}\n+\n+function learn_press_random_value( $len = 8 ) {\n+\treturn substr( md5( uniqid( mt_rand(), true ) ), 0, $len );\n+}\n+\n+function learn_press_map_columns_format( $columns, $format ) {\n+\t$return = array();\n+\tforeach ( $columns as $k => $v ) {\n+\t\tif ( ! empty( $format[ $k ] ) ) {\n+\t\t\t$return[] = $format[ $k ];\n+\t\t} else {\n+\t\t\t$return[] = '%s'; \u002F\u002F default is string\n+\t\t}\n+\t}\n+\n+\treturn $return;\n+}\n+\n+\u002F**\n+ * Check to see if an endpoint is showing in current URL.\n+ *\n+ * @param bool $endpoint\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_endpoint_url( $endpoint = false ) {\n+\tglobal $wp;\n+\n+\t$endpoints = array();\n+\n+\tif ( $endpoint !== false ) {\n+\t\tif ( ! isset( $endpoints[ $endpoint ] ) ) {\n+\t\t\treturn false;\n+\t\t} else {\n+\t\t\t$endpoint_var = $endpoints[ $endpoint ];\n+\t\t}\n+\n+\t\treturn isset( $wp->query_vars[ $endpoint_var ] );\n+\t} else {\n+\t\tforeach ( $endpoints as $key => $value ) {\n+\t\t\tif ( isset( $wp->query_vars[ $key ] ) ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+}\n+\n+\u002F**\n+ * Get current URL user is viewing.\n+ *\n+ * @return string\n+ * @deprecated 4.2.2\n+ *\u002F\n+function learn_press_get_current_url() {\n+\t\u002F\u002F_deprecated_function( __FUNCTION__, '4.2.2', 'LP_Helper::getUrlCurrent' );\n+\treturn LP_Helper::getUrlCurrent();\n+\n+\t$url = untrailingslashit( esc_url_raw( $_SERVER['REQUEST_URI'] ) );\n+\n+\tif ( ! preg_match( '!^https?!', $url ) ) {\n+\t\t$siteurl    = trailingslashit( get_home_url() );\n+\t\t$home_query = '';\n+\n+\t\tif ( strpos( $siteurl, '?' ) !== false ) {\n+\t\t\t$parts      = explode( '?', $siteurl );\n+\t\t\t$home_query = $parts[1];\n+\t\t\t$siteurl    = $parts[0];\n+\t\t}\n+\n+\t\tif ( $home_query ) {\n+\t\t\tparse_str( untrailingslashit( $home_query ), $home_query );\n+\t\t\t$url = esc_url_raw( add_query_arg( $home_query, $url ) );\n+\t\t}\n+\n+\t\t$segs1 = explode( '\u002F', $siteurl );\n+\t\t$segs2 = explode( '\u002F', $url );\n+\n+\t\tif ( $removed = array_intersect( $segs1, $segs2 ) ) {\n+\t\t\tif ( $segs2 = array_diff( $segs2, $removed ) ) {\n+\t\t\t\t$current_url = $siteurl . join( '\u002F', $segs2 );\n+\t\t\t\tif ( strpos( $current_url, '?' ) === false ) {\n+\t\t\t\t\t$current_url = trailingslashit( $current_url );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn $current_url;\n+}\n+\n+\u002F**\n+ * Remove unneeded characters in an URL\n+ *\n+ * @param string $url\n+ * @param bool   $trailingslashit\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_sanitize_url( $url, $trailingslashit = true ) {\n+\tif ( $url ) {\n+\t\tpreg_match( '!(https?:\u002F\u002F)?(.*)!', $url, $matches );\n+\t\t$url_without_http = $matches[2];\n+\t\t$url_without_http = preg_replace( '![\u002F]+!', '\u002F', $url_without_http );\n+\t\t$url              = $matches[1] . $url_without_http;\n+\n+\t\treturn ( $trailingslashit &&\n+\t\t\t\tstrpos( $url, '?' ) === false ) ? trailingslashit( $url ) : untrailingslashit( $url );\n+\t}\n+\n+\treturn $url;\n+}\n+\n+\u002F**\n+ * Get all types of question supported\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_question_types() {\n+\treturn LP_Question::get_types();\n+}\n+\n+\u002F**\n+ * Get human name of question's type by slug\n+ *\n+ * @param string $slug\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_question_name_from_slug( $slug ) {\n+\t$types = learn_press_question_types();\n+\t$name  = ! empty( $types[ $slug ] ) ? $types[ $slug ] : '';\n+\n+\treturn apply_filters( 'learn-press\u002Fquestion\u002Fslug-to-name', $name, $slug );\n+}\n+\n+\u002F**\n+ * Get terms of a course by taxonomy.\n+ * E.g: course_tag, course_category\n+ *\n+ * @param int    $course_id\n+ * @param string $taxonomy\n+ * @param array  $args\n+ *\n+ * @return array|mixed\n+ *\u002F\n+function learn_press_get_course_terms( $course_id, $taxonomy, $args = array() ) {\n+\tif ( ! taxonomy_exists( $taxonomy ) ) {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F\u002F Support ordering by parent\n+\tif ( ! empty( $args['orderby'] ) && in_array( $args['orderby'], array( 'name_num', 'parent' ) ) ) {\n+\t\t$fields  = isset( $args['fields'] ) ? $args['fields'] : 'all';\n+\t\t$orderby = $args['orderby'];\n+\n+\t\t\u002F\u002F Unset for wp_get_post_terms\n+\t\tunset( $args['orderby'] );\n+\t\tunset( $args['fields'] );\n+\n+\t\t$terms = wp_get_post_terms( $course_id, $taxonomy, $args );\n+\n+\t\tswitch ( $orderby ) {\n+\t\t\tcase 'name_num':\n+\t\t\t\tusort( $terms, '_learn_press_get_course_terms_name_num_usort_callback' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'parent':\n+\t\t\t\tusort( $terms, '_learn_press_get_course_terms_parent_usort_callback' );\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\tswitch ( $fields ) {\n+\t\t\tcase 'names':\n+\t\t\t\t$terms = wp_list_pluck( $terms, 'name' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'ids':\n+\t\t\t\t$terms = wp_list_pluck( $terms, 'term_id' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'slugs':\n+\t\t\t\t$terms = wp_list_pluck( $terms, 'slug' );\n+\t\t\t\tbreak;\n+\t\t}\n+\t} elseif ( ! empty( $args['orderby'] ) && $args['orderby'] === 'menu_order' ) {\n+\t\t\u002F\u002F wp_get_post_terms doesn't let us use custom sort order\n+\t\t$args['include'] = wp_get_post_terms( $course_id, $taxonomy, array( 'fields' => 'ids' ) );\n+\n+\t\tif ( empty( $args['include'] ) ) {\n+\t\t\t$terms = array();\n+\t\t} else {\n+\t\t\t\u002F\u002F This isn't needed for get_terms\n+\t\t\tunset( $args['orderby'] );\n+\n+\t\t\t\u002F\u002F Set args for get_terms\n+\t\t\t$args['menu_order'] = $args['order'] ?? 'ASC';\n+\t\t\t$args['hide_empty'] = $args['hide_empty'] ?? 0;\n+\t\t\t$args['fields']     = $args['fields'] ?? 'names';\n+\n+\t\t\t\u002F\u002F Ensure slugs is valid for get_terms - slugs isn't supported\n+\t\t\t$args['fields'] = $args['fields'] === 'slugs' ? 'id=>slug' : $args['fields'];\n+\t\t\t$terms          = get_terms( $taxonomy, $args );\n+\t\t}\n+\t} else {\n+\t\t$terms = wp_get_post_terms( $course_id, $taxonomy, $args );\n+\t}\n+\n+\t\u002F\u002F @deprecated\n+\t$terms = apply_filters( 'learn_press_get_course_terms', $terms, $course_id, $taxonomy, $args );\n+\n+\treturn apply_filters( 'learn-press\u002Fcourse\u002Fterms', $terms, $course_id, $taxonomy, $args );\n+}\n+\n+\u002F**\n+ * Callback function for sorting terms of course by name.\n+ *\n+ * @param object $a\n+ * @param object $b\n+ *\n+ * @return int\n+ *\u002F\n+function _learn_press_get_course_terms_name_num_usort_callback( $a, $b ) {\n+\tif ( $a->name + 0 === $b->name + 0 ) {\n+\t\treturn 0;\n+\t}\n+\n+\treturn ( $a->name + 0 \u003C $b->name + 0 ) ? - 1 : 1;\n+}\n+\n+\u002F**\n+ * Callback function for sorting terms of course by parent.\n+ *\n+ * @param object $a\n+ * @param object $b\n+ *\n+ * @return int\n+ *\u002F\n+function _learn_press_get_course_terms_parent_usort_callback( $a, $b ) {\n+\tif ( $a->parent === $b->parent ) {\n+\t\treturn 0;\n+\t}\n+\n+\treturn ( $a->parent \u003C $b->parent ) ? 1 : - 1;\n+}\n+\n+\u002F**\n+ * Get posts by it's post-name (slug).\n+ *\n+ * @param string $name\n+ * @param string $type\n+ * @param bool   $single\n+ *\n+ * @return array|bool|null|WP_Post\n+ *\u002F\n+function learn_press_get_post_by_name( $name, $type, $single = true ) {\n+\t$post_name = sanitize_title( $name );\n+\t$id        = LP_Object_Cache::get( $type . '-' . $post_name, 'learn-press\u002Fpost-names' );\n+\n+\tif ( false === $id ) {\n+\t\tforeach ( array( $name, urldecode( $name ) ) as $_name ) {\n+\t\t\t$args = array(\n+\t\t\t\t'name'      => $_name,\n+\t\t\t\t'post_type' => array( $type ),\n+\t\t\t);\n+\n+\t\t\t$posts = get_posts( $args );\n+\n+\t\t\tif ( $posts ) {\n+\t\t\t\t$post = $posts[0];\n+\t\t\t\t$id   = $post->ID;\n+\t\t\t\twp_cache_set( $id, $post, 'posts' );\n+\t\t\t\tLP_Object_Cache::set( $type . '-' . $name, $id, 'learn-press\u002Fpost-names' );\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn $id ? get_post( $id ) : false;\n+}\n+\n+if ( ! function_exists( 'learn_press_is_ajax' ) ) {\n+\tfunction learn_press_is_ajax() {\n+\t\treturn defined( 'LP_DOING_AJAX' ) && LP_DOING_AJAX && 'yes' != learn_press_get_request( 'noajax' );\n+\t}\n+}\n+\n+\u002F**\n+ * Get page id from admin settings page\n+ *\n+ * @param string $name\n+ *\n+ * @since 3.0.0\n+ * @version 1.0.2\n+ * @return int\n+ *\u002F\n+function learn_press_get_page_id( string $name ): int {\n+\t$page_id = LP_Settings::get_option( \"{$name}_page_id\", false );\n+\n+\t\u002F*if ( function_exists( 'icl_object_id' ) ) {\n+\t\t$page_id = icl_object_id( $page_id, 'page', false, defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : '' );\n+\t}*\u002F\n+\n+\t$page_id = (int) $page_id;\n+\n+\treturn apply_filters( 'learn_press_get_page_id', $page_id, $name );\n+}\n+\n+\u002F**\n+ * display the seconds in time format h:i:s\n+ *\n+ * @param        $seconds\n+ * @param string  $separator\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_seconds_to_time( $seconds, $separator = ':' ) {\n+\treturn sprintf(\n+\t\t'%02d%s%02d%s%02d',\n+\t\tfloor( $seconds \u002F 3600 ),\n+\t\t$separator,\n+\t\t( $seconds \u002F 60 ) % 60,\n+\t\t$separator,\n+\t\t$seconds % 60\n+\t);\n+}\n+\n+\u002F* nav *\u002F\n+if ( ! function_exists( 'learn_press_course_paging_nav' ) ) {\n+\n+\t\u002F**\n+\t * Display navigation to next\u002Fprevious set of posts when applicable.\n+\t *\n+\t * @param array\n+\t *\u002F\n+\tfunction learn_press_course_paging_nav( $args = array() ) {\n+\t\tlearn_press_paging_nav(\n+\t\t\tarray(\n+\t\t\t\t'num_pages'     => $GLOBALS['wp_query']->max_num_pages,\n+\t\t\t\t'wrapper_class' => 'navigation pagination',\n+\t\t\t)\n+\t\t);\n+\t}\n+}\n+\n+\u002F* nav *\u002F\n+if ( ! function_exists( 'learn_press_paging_nav' ) ) {\n+\tfunction learn_press_paging_nav( $args = array() ) {\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'num_pages'     => 0,\n+\t\t\t\t'paged'         => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,\n+\t\t\t\t'wrapper_class' => 'learn-press-pagination',\n+\t\t\t\t'base'          => false,\n+\t\t\t\t'format'        => '',\n+\t\t\t\t'echo'          => true,\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( $args['num_pages'] \u003C 2 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$paged        = $args['paged'];\n+\t\t$pagenum_link = html_entity_decode( $args['base'] === false ? get_pagenum_link() : $args['base'] );\n+\n+\t\t$query_args = array();\n+\t\t$url_parts  = explode( '?', $pagenum_link );\n+\n+\t\tif ( isset( $url_parts[1] ) ) {\n+\t\t\twp_parse_str( $url_parts[1], $query_args );\n+\t\t}\n+\n+\t\t$pagenum_link = esc_url_raw( remove_query_arg( array_keys( $query_args ), $pagenum_link ) );\n+\t\t$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';\n+\n+\t\t$format  = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos(\n+\t\t\t$pagenum_link,\n+\t\t\t'index.php'\n+\t\t) ? 'index.php\u002F' : '';\n+\t\t$format .= $args['format'] ? $args['format'] : ( $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit(\n+\t\t\t'page\u002F%#%',\n+\t\t\t'paged'\n+\t\t) : '?paged=%#%' );\n+\n+\t\t$link_args = array(\n+\t\t\t'base'      => $pagenum_link,\n+\t\t\t'format'    => $format,\n+\t\t\t'total'     => $args['num_pages'],\n+\t\t\t'current'   => max( 1, $paged ),\n+\t\t\t'mid_size'  => 1,\n+\t\t\t'add_args'  => array_map( 'urlencode', $query_args ),\n+\t\t\t'prev_text' => __( '\u003C', 'learnpress' ),\n+\t\t\t'next_text' => __( '>', 'learnpress' ),\n+\t\t\t'type'      => 'list',\n+\t\t);\n+\n+\t\t\u002F\u002F Set up paginated links.\n+\t\t$links = paginate_links( $link_args );\n+\n+\t\tob_start();\n+\n+\t\tif ( $links ) {\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( $args['wrapper_class'] ); ?>\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $links ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\t$output = ob_get_clean();\n+\n+\t\tif ( $args['echo'] ) {\n+\t\t\techo wp_kses_post( $output );\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+}\n+\n+\u002F**\n+ * Get number of pages by rows and items per page.\n+ *\n+ * @param int $total\n+ * @param int $limit\n+ *\n+ * @return int\n+ *\u002F\n+function learn_press_get_num_pages( $total, $limit = 10 ) {\n+\t$limit = $limit \u003C= 0 ? 10 : $limit;\n+\n+\tif ( $total \u003C= $limit ) {\n+\t\treturn 1;\n+\t}\n+\n+\t$pages = absint( $total \u002F $limit );\n+\n+\tif ( $total % $limit != 0 ) {\n+\t\t++$pages;\n+\t}\n+\n+\treturn $pages;\n+}\n+\n+\u002F**\n+ * Get text\n+ *\n+ * @param $status_id\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_status_text( $status_id ) {\n+\tswitch ( $status_id ) {\n+\t\tcase 1:\n+\t\t\t$text = 'pending';\n+\t\t\tbreak;\n+\t\tcase 2:\n+\t\t\t$text = 'complete';\n+\t\t\tbreak;\n+\t\tcase - 1:\n+\t\t\t$text = 'cancel';\n+\t\t\tbreak;\n+\t\tcase - 2:\n+\t\t\t$text = 'refund';\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t$text = 'on-hold';\n+\t}\n+\n+\treturn $text;\n+}\n+\n+function learn_press_get_course_duration_support() {\n+\treturn apply_filters(\n+\t\t'learn_press_course_duration_support',\n+\t\tarray(\n+\t\t\t'minute' => esc_html__( 'Minute(s)', 'learnpress' ),\n+\t\t\t'hour'   => esc_html__( 'Hour(s)', 'learnpress' ),\n+\t\t\t'day'    => esc_html__( 'Day(s)', 'learnpress' ),\n+\t\t\t'week'   => esc_html__( 'Week(s)', 'learnpress' ),\n+\t\t)\n+\t);\n+}\n+\n+function learn_press_number_to_string_time( $number ) {\n+\t$str = $number;\n+\n+\tif ( preg_match( '!([0-9.]+) (minute|hour|day|week)!', $number, $matches ) ) {\n+\t\tswitch ( $matches[2] ) {\n+\t\t\tcase 'hour':\n+\t\t\t\t$minute = $matches[1] * 60;\n+\t\t\t\t$str    = sprintf( '%s hour %s minute', absint( $minute \u002F 60 ), $minute % 60 );\n+\t\t\t\tbreak;\n+\t\t\tcase 'day':\n+\t\t\t\t$hour = $matches[1] * 24;\n+\t\t\t\t$str  = sprintf( '%s day %s hour', absint( $hour \u002F 24 ), $hour % 24 );\n+\t\t\t\tbreak;\n+\t\t\tcase 'week':\n+\t\t\t\t$day = $matches[1] * 7;\n+\t\t\t\t$str = sprintf( '%s week %s day', absint( $day \u002F 7 ), $day % 7 );\n+\t\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\treturn $str;\n+}\n+\n+function learn_press_human_time_to_seconds( $time, $default = '' ) {\n+\t$duration      = learn_press_get_course_duration_support();\n+\t$duration_keys = array_keys( $duration );\n+\n+\tif ( preg_match_all( '!([0-9]+)\\s*(' . join( '|', $duration_keys ) . ')?!', $time, $matches ) ) {\n+\t\t$a1 = $matches[1][0];\n+\t\t$a2 = in_array( $matches[2][0], $duration_keys ) ? $matches[2][0] : '';\n+\t} else {\n+\t\t$a1 = absint( $time );\n+\t\t$a2 = '';\n+\t}\n+\n+\tif ( $a2 ) {\n+\t\t$b  = array(\n+\t\t\t'minute' => 60,\n+\t\t\t'hour'   => 3600,\n+\t\t\t'day'    => 3600 * 24,\n+\t\t\t'week'   => 3600 * 24 * 7,\n+\t\t);\n+\t\t$a1 = $a1 * $b[ $a2 ];\n+\t}\n+\n+\treturn $a1;\n+}\n+\n+\u002F**\n+ * @param $user_id\n+ *\n+ * @return WP_Query\n+ *\u002F\n+function learn_press_get_own_courses( $user_id ) {\n+\t$arr_query = array(\n+\t\t'post_type'           => 'lp_course',\n+\t\t'author'              => $user_id,\n+\t\t'post_status'         => 'publish',\n+\t\t'ignore_sticky_posts' => true,\n+\t\t'posts_per_page'      => - 1,\n+\t);\n+\t$my_query  = new WP_Query( $arr_query );\n+\n+\treturn $my_query;\n+}\n+\n+\u002F**\n+ * Return array list of currency positions.\n+ *\n+ * @param bool|string $currency\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_currency_positions( $currency = false ) {\n+\t$positions = array(\n+\t\t'left'             => __( 'Left', 'learnpress' ),\n+\t\t'right'            => __( 'Right', 'learnpress' ),\n+\t\t'left_with_space'  => __( 'Left with space', 'learnpress' ),\n+\t\t'right_with_space' => __( 'Right with space', 'learnpress' ),\n+\t);\n+\n+\tif ( false === $currency ) {\n+\t\t$currency = learn_press_get_currency_symbol();\n+\t}\n+\n+\t$settings = LP_Settings::instance();\n+\n+\t$thousands_separator = '';\n+\t$decimals_separator  = $settings->get( 'decimals_separator', '.' );\n+\t$number_of_decimals  = $settings->get( 'number_of_decimals', 2 );\n+\n+\tif ( $number_of_decimals > 0 ) {\n+\t\t$example = '69' . $decimals_separator . str_repeat( '9', $number_of_decimals );\n+\t} else {\n+\t\t$example = '69';\n+\t}\n+\n+\tforeach ( $positions as $pos => $text ) {\n+\t\tswitch ( $pos ) {\n+\t\t\tcase 'left':\n+\t\t\t\t$text = sprintf( '%s ( %s%s )', $text, $currency, $example );\n+\t\t\t\tbreak;\n+\t\t\tcase 'right':\n+\t\t\t\t$text = sprintf( '%s ( %s%s )', $text, $example, $currency );\n+\t\t\t\tbreak;\n+\t\t\tcase 'left_with_space':\n+\t\t\t\t$text = sprintf( '%s ( %s %s )', $text, $currency, $example );\n+\t\t\t\tbreak;\n+\t\t\tcase 'right_with_space':\n+\t\t\t\t$text = sprintf( '%s ( %s %s )', $text, $example, $currency );\n+\t\t\t\tbreak;\n+\t\t}\n+\t\t$positions[ $pos ] = $text;\n+\t}\n+\n+\t$positions = apply_filters( 'learn_press_currency_positions', $positions );\n+\n+\treturn apply_filters( 'learn-press\u002Fcurrency-positions', $positions );\n+}\n+\n+\u002F**\n+ * @return array\n+ *\u002F\n+function learn_press_get_payment_currencies() {\n+\treturn apply_filters( 'learn_press_get_payment_currencies', learn_press_currencies() );\n+}\n+\n+\u002F**\n+ * Get the list of currencies with code and name.\n+ *\n+ * @return  array\n+ * @version 3.0.1\n+ *\n+ * @author  ThimPress\n+ *\u002F\n+function learn_press_currencies() {\n+\treturn Config::instance()->get( 'currencies', 'settings' );\n+}\n+\n+\u002F**\n+ * Return list of common symbols of the currencies on the world.\n+ *\n+ * @return array\n+ * @version 3.0.1\n+ *\u002F\n+function learn_press_currency_symbols() {\n+\treturn Config::instance()->get( 'currency-symbols', 'settings' );\n+}\n+\n+\u002F**\n+ * Get current setting of currency.\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_currency(): string {\n+\t$currency = LP_Settings::instance()->get( 'currency', 'USD' );\n+\n+\treturn esc_html( apply_filters( 'learn-press\u002Fcurrency', $currency ) );\n+}\n+\n+\u002F**\n+ * Return currency symbol from the code.\n+ *\n+ * @param string $currency\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_currency_symbol( $currency = '' ) {\n+\tif ( ! $currency ) {\n+\t\t$currency = learn_press_get_currency();\n+\t}\n+\t$symbols         = learn_press_currency_symbols();\n+\t$currency_symbol = $symbols[ $currency ] ?? '';\n+\n+\t$currency_symbol = apply_filters( 'learn_press_currency_symbol', $currency_symbol, $currency );\n+\n+\treturn apply_filters( 'learn-press\u002Fcurrency-symbol', $currency_symbol, $currency );\n+}\n+\n+\u002F**\n+ * Get static page for LP page by name.\n+ *\n+ * @param string $key\n+ *\n+ * @return string\n+ * @editor tungnx\n+ * @modify 4.1.4\n+ *\u002F\n+function learn_press_get_page_link( string $key ): string {\n+\t$page_id   = learn_press_get_page_id( $key );\n+\t$key_cache = \"lp\u002Fpage-link\u002F{$key}\";\n+\t$link      = LP_Cache::cache_load_first( 'get', $key_cache );\n+\tif ( false !== $link ) {\n+\t\treturn $link;\n+\t}\n+\n+\tif ( $page_id && get_post_status( $page_id ) == 'publish' ) {\n+\t\t$permalink = get_permalink( $page_id );\n+\t\t$link      = apply_filters( 'learn-press\u002Fget-page-link', trailingslashit( $permalink ), $page_id, $key );\n+\t\tLP_Cache::cache_load_first( 'set', $key_cache, $link );\n+\t}\n+\n+\treturn $link;\n+}\n+\n+\u002F**\n+ * Get static page for LP page by name.\n+ *\n+ * @param string $key\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_page_title( $key ) {\n+\t$page_id = LP_Settings::instance()->get( $key . '_page_id' );\n+\t$title   = '';\n+\n+\tif ( $page_id && get_post_status( $page_id ) == 'publish' ) {\n+\t\t$title = apply_filters( 'learn-press\u002Fget-page-title', get_the_title( $page_id ), $page_id, $key );\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fget-page-' . $key . '-title', $title, $page_id );\n+}\n+\n+\u002F**\n+ * get the ID of a course by order ID\n+ *\n+ * @param $order_id\n+ *\n+ * @return bool|mixed\n+ *\u002F\n+function learn_press_get_course_by_order( $order_id ) {\n+\t$order_items = get_post_meta( $order_id, '_learn_press_order_items', true );\n+\n+\tif ( $order_items && $order_items->products ) {\n+\t\t$array_keys = array_keys( $order_items->products );\n+\n+\t\treturn reset( $array_keys );\n+\t}\n+\n+\treturn false;\n+}\n+\n+\u002F**\n+ * Convert a number of seconds to weeks\u002Fdays\u002Fhours.\n+ *\n+ * @param int $secs\n+ *\n+ * @return bool|string\n+ *\u002F\n+function learn_press_seconds_to_weeks( int $secs = 0 ) {\n+\t$secs = (int) $secs;\n+\n+\tif ( 0 === $secs ) {\n+\t\treturn false;\n+\t}\n+\t\u002F\u002F variables for holding values.\n+\t$mins  = 0;\n+\t$hours = 0;\n+\t$days  = 0;\n+\t$weeks = 0;\n+\t\u002F\u002F calculations.\n+\tif ( $secs >= 60 ) {\n+\t\t$mins = (int) ( $secs \u002F 60 );\n+\t\t$secs = $secs % 60;\n+\t}\n+\tif ( $mins >= 60 ) {\n+\t\t$hours = (int) ( $mins \u002F 60 );\n+\t\t$mins  = $mins % 60;\n+\t}\n+\tif ( $hours >= 24 ) {\n+\t\t$days  = (int) ( $hours \u002F 24 );\n+\t\t$hours = $hours % 24;\n+\t}\n+\tif ( $days >= 7 ) {\n+\t\t$weeks = (int) ( $days \u002F 7 );\n+\t\t$days  = $days % 7;\n+\t}\n+\t\u002F\u002F format result.\n+\t$result = '';\n+\tif ( $weeks ) {\n+\t\t$result .= sprintf( _n( '%s week', '%s weeks', $weeks, 'learnpress' ), $weeks ) . ' ';\n+\t}\n+\n+\tif ( $days ) {\n+\t\t$result .= sprintf( _n( '%s day', '%s days', $days, 'learnpress' ), $days ) . ' ';\n+\t}\n+\n+\tif ( ! $weeks ) {\n+\t\tif ( $hours ) {\n+\t\t\t$result .= sprintf( _n( '%s hour', '%s hours', $hours, 'learnpress' ), $hours ) . ' ';\n+\t\t}\n+\n+\t\tif ( $mins ) {\n+\t\t\t$result .= sprintf( _n( '%s minute', '%s minutes', $mins, 'learnpress' ), $mins ) . ' ';\n+\t\t}\n+\t}\n+\n+\t$result = rtrim( $result );\n+\n+\treturn $result;\n+}\n+\n+function learn_press_user_maybe_is_a_teacher( $user = null ) {\n+\tif ( ! $user ) {\n+\t\t$user = learn_press_get_current_user();\n+\t} elseif ( is_numeric( $user ) ) {\n+\t\t$user = learn_press_get_user( $user );\n+\t}\n+\tif ( ! $user || $user instanceof LP_User_Guest ) {\n+\t\treturn false;\n+\t}\n+\n+\t$role = $user->has_role( 'administrator' ) ? 'administrator' : false;\n+\tif ( ! $role ) {\n+\t\t$role = $user->has_role( 'lp_teacher' ) ? 'lp_teacher' : false;\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fuser\u002Fis-teacher', $role, $user->get_id() );\n+}\n+\n+function learn_press_become_teacher_sent( $user_id = 0 ) {\n+\tif ( func_num_args() == 0 ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\n+\treturn 'yes' === get_user_meta( $user_id, '_requested_become_teacher', true );\n+}\n+\n+function _learn_press_translate_user_roles( $translations, $text, $context, $domain ) {\n+\t$plugin_domain = 'learnpress';\n+\t$roles         = array( 'LP Instructor' );\n+\n+\tif ( $context === 'User role' && in_array( $text, $roles ) && $domain !== $plugin_domain ) {\n+\t\treturn translate_with_gettext_context( $text, $context, $plugin_domain );\n+\t}\n+\n+\treturn $translations;\n+}\n+\n+add_filter( 'gettext_with_context', '_learn_press_translate_user_roles', 10, 4 );\n+\n+if ( ! function_exists( 'learn_press_send_json' ) ) {\n+\tfunction learn_press_send_json( $data ) {\n+\t\techo '\u003C-- LP_AJAX_START -->';\n+\t\techo wp_json_encode( $data );\n+\t\techo '\u003C-- LP_AJAX_END -->';\n+\t\tdie;\n+\t}\n+}\n+\n+\u002F**\n+ * Send json with success signal to browser.\n+ *\n+ * @param array|object|WP_Error $data\n+ *\n+ * @since 3.0.1\n+ *\u002F\n+function learn_press_send_json_error( $data = '' ) {\n+\t$response = array( 'success' => false );\n+\n+\tif ( isset( $data ) ) {\n+\t\tif ( is_wp_error( $data ) ) {\n+\t\t\t$result = array();\n+\t\t\tforeach ( $data->errors as $code => $messages ) {\n+\t\t\t\tforeach ( $messages as $message ) {\n+\t\t\t\t\t$result[] = array(\n+\t\t\t\t\t\t'code'    => $code,\n+\t\t\t\t\t\t'message' => $message,\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response['data'] = $result;\n+\t\t} else {\n+\t\t\t$response['data'] = $data;\n+\t\t}\n+\t}\n+\n+\tlearn_press_send_json( $response );\n+}\n+\n+\u002F**\n+ * Send json with error signal to browser.\n+ *\n+ * @param array|object|WP_Error $data\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+function learn_press_send_json_success( $data = '' ) {\n+\t$response = array( 'success' => true );\n+\n+\tif ( isset( $data ) ) {\n+\t\t$response['data'] = $data;\n+\t}\n+\n+\tlearn_press_send_json( $response );\n+}\n+\n+\u002F**\n+ * Check if ajax is calling then send json data.\n+ *\n+ * @param array $data\n+ * @param mixed $callback\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_maybe_send_json( $data, $callback = null ) {\n+\tif ( learn_press_is_ajax() ) {\n+\t\tis_callable( $callback ) && call_user_func( $callback );\n+\t\t$message = learn_press_get_messages( true );\n+\t\tif ( empty( $data['message'] ) && $message ) {\n+\t\t\t$data['message'] = $message;\n+\t\t}\n+\t\tlearn_press_send_json( $data );\n+\t}\n+\n+\treturn false;\n+}\n+\n+\u002F**\n+ * Get data from request.\n+ *\n+ * @param string $key\n+ * @param mixed  $default\n+ * @param mixed  $hash\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_request( $key, $default = null, $hash = null ) {\n+\t$return = $default;\n+\n+\tif ( $hash ) {\n+\t\tif ( ! empty( $hash[ $key ] ) ) {\n+\t\t\t$return = $hash[ $key ];\n+\t\t}\n+\t} else {\n+\t\tif ( ! empty( $_POST[ $key ] ) ) {\n+\t\t\t$return = LP_Helper::sanitize_params_submitted( $_POST[ $key ] );\n+\t\t} elseif ( ! empty( $_GET[ $key ] ) ) {\n+\t\t\t$return = LP_Helper::sanitize_params_submitted( $_GET[ $key ] );\n+\t\t} elseif ( ! empty( $_REQUEST[ $key ] ) ) {\n+\t\t\t$return = LP_Helper::sanitize_params_submitted( $_REQUEST[ $key ] );\n+\t\t}\n+\t}\n+\n+\treturn $return;\n+}\n+\n+\u002F**\n+ * @return mixed\n+ *\u002F\n+function is_learnpress() {\n+\treturn apply_filters(\n+\t\t'is_learnpress',\n+\t\t( learn_press_is_course_archive() || learn_press_is_course_taxonomy() || learn_press_is_course() || learn_press_is_quiz() || learn_press_is_search() ) ? true : false\n+\t);\n+}\n+\n+if ( ! function_exists( 'learn_press_is_search' ) ) {\n+\tfunction learn_press_is_search() {\n+\t\treturn array_key_exists( 's', $_REQUEST ) && array_key_exists( 'ref', $_REQUEST ) && sanitize_text_field( $_REQUEST['ref'] ) == 'course';\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_courses' ) ) {\n+\tfunction learn_press_is_courses() {\n+\t\treturn learn_press_is_course_archive();\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_is_course_archive' ) ) {\n+\tfunction learn_press_is_course_archive() {\n+\t\tglobal $wp_query;\n+\n+\t\t$queried_object_id = ! empty( $wp_query->queried_object ) ? $wp_query->queried_object : 0;\n+\t\t$is_tag            = defined( 'LEARNPRESS_IS_TAG' ) && LEARNPRESS_IS_TAG || is_tax( 'course_tag' );\n+\t\t$is_category       = defined( 'LEARNPRESS_IS_CATEGORY' ) && LEARNPRESS_IS_CATEGORY || is_tax( 'course_category' );\n+\t\t$page_id           = learn_press_get_page_id( 'courses' );\n+\n+\t\treturn ( $is_category || $is_tag ) || is_post_type_archive( 'lp_course' ) || ( $page_id && ( $queried_object_id && is_page( $page_id ) ) );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_course_tax' ) ) {\n+\tfunction learn_press_is_course_tax() {\n+\t\treturn is_tax( get_object_taxonomies( LP_COURSE_CPT ) );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_course_taxonomy' ) ) {\n+\tfunction learn_press_is_course_taxonomy() {\n+\t\treturn ( defined( 'LEARNPRESS_IS_TAX' ) && LEARNPRESS_IS_TAX ) || learn_press_is_course_tax();\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_is_course_category' ) ) {\n+\tfunction learn_press_is_course_category( $term = '' ) {\n+\t\treturn ( defined( 'LEARNPRESS_IS_CATEGORY' ) && LEARNPRESS_IS_CATEGORY ) || is_tax( 'course_category', $term );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_is_course_tag' ) ) {\n+\tfunction learn_press_is_course_tag( $term = '' ) {\n+\t\treturn ( defined( 'LEARNPRESS_IS_TAG' ) && LEARNPRESS_IS_TAG ) || is_tax( 'course_tag', $term );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_course' ) ) {\n+\tfunction learn_press_is_course(): bool {\n+\t\ttry {\n+\t\t\treturn is_singular( array( LP_COURSE_CPT ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_lesson' ) ) {\n+\tfunction learn_press_is_lesson() {\n+\t\treturn is_singular( array( LP_LESSON_CPT ) );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_is_quiz' ) ) {\n+\tfunction learn_press_is_quiz() {\n+\t\treturn is_singular( array( LP_QUIZ_CPT ) );\n+\t}\n+}\n+\n+function lp_content_has_shortcode( $tag = '' ) {\n+\tglobal $post;\n+\n+\treturn is_singular() && is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, $tag );\n+}\n+\n+\u002F**\n+ * Returns true when viewing profile page.\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_profile() {\n+\t$page_id = learn_press_get_page_id( 'profile' );\n+\n+\tif ( $page_id && is_page( $page_id ) || lp_content_has_shortcode( 'learn_press_profile' ) ) {\n+\t\treturn true;\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fis-profile', false );\n+}\n+\n+\u002F**\n+ * Return true if user is in checking out page\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_checkout() {\n+\t$page_id = learn_press_get_page_id( 'checkout' );\n+\n+\tif ( $page_id && is_page( $page_id ) ) {\n+\t\treturn true;\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fis-checkout', false );\n+}\n+\n+function learn_press_is_instructors() {\n+\t$page_id = learn_press_get_page_id( 'instructors' );\n+\n+\tif ( $page_id && is_page( $page_id ) ) {\n+\t\treturn true;\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fis-instructor', false );\n+}\n+\n+\n+\u002F**\n+ * Return register permalink\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_register_url() {\n+\treturn apply_filters( 'learn_press_register_url', wp_registration_url() );\n+}\n+\n+\u002F**\n+ * Add a new notice into queue\n+ *\n+ * @param string\n+ * @param string\n+ *\n+ * @return mixed\n+ * @deprecated 4.2.5\n+ *\u002F\n+function learn_press_add_notice( $message, $type = 'updated' ) {\n+\t_deprecated_function( __FUNCTION__, '4.2.5' );\n+\tLP_Admin_Notice::instance()->add( $message, $type );\n+}\n+\n+\u002F**\n+ * Set user's cookie\n+ *\n+ * @param string $name\n+ * @param mixed $value\n+ * @param int $expire\n+ * @param bool $httponly\n+ *\n+ * @editor tungnx\n+ * @version 1.0.3\n+ *\u002F\n+function learn_press_setcookie( string $name = '', string $value = '', int $expire = 0, bool $httponly = true ) {\n+\t@setcookie( $name, $value, $expire, COOKIEPATH ?: '\u002F', COOKIE_DOMAIN, is_ssl(), $httponly );\n+}\n+\n+\u002F**\n+ * Clear cookie\n+ *\n+ * @param string $name\n+ *\u002F\n+function learn_press_remove_cookie( string $name = '' ) {\n+\tif ( ! empty( $name ) ) {\n+\t\tsetcookie( $name, '', time() - YEAR_IN_SECONDS, COOKIEPATH ? COOKIEPATH : '\u002F', COOKIE_DOMAIN, is_ssl(), true );\n+\t}\n+\n+\tif ( array_key_exists( $name, $_COOKIE ) ) {\n+\t\tunset( $_COOKIE[ $name ] );\n+\t}\n+}\n+\n+\u002F**\n+ * Filter the login url so third-party can be customized\n+ *\n+ * @param string $redirect\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_login_url( $redirect = null ) {\n+\t$url          = wp_login_url( $redirect );\n+\t$profile_page = learn_press_get_page_link( 'profile' );\n+\n+\tif ( 'yes' === LP_Settings::instance()->get( 'enable_login_profile' ) && $profile_page ) {\n+\t\t$parse_url = parse_url( $url );\n+\t\t$url       = $profile_page . ( ! empty( $parse_url['query'] ) ? '?' . $parse_url['query'] : '' );\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Flogin-url', $url );\n+}\n+\n+\u002F**\n+ * Add variable to an url by checking the permalink structure.\n+ *\n+ * @param string $name\n+ * @param string $value\n+ * @param string $url\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_endpoint_url( $name, $value, $url ) {\n+\tif ( ! $url ) {\n+\t\t$url = get_permalink();\n+\t}\n+\n+\t\u002F\u002F Map endpoint to options\n+\t$name = isset( LearnPress::instance()->query_vars[ $name ] ) ? LearnPress::instance()->query_vars[ $name ] : $name;\n+\n+\tif ( get_option( 'permalink_structure' ) ) {\n+\t\tif ( strstr( $url, '?' ) ) {\n+\t\t\t$query_string = '?' . parse_url( $url, PHP_URL_QUERY );\n+\t\t\t$url          = current( explode( '?', $url ) );\n+\t\t} else {\n+\t\t\t$query_string = '';\n+\t\t}\n+\t\t$url = trailingslashit( $url ) . ( $name ? $name . '\u002F' : '' ) . $value . $query_string;\n+\n+\t} else {\n+\t\t$url = esc_url_raw( add_query_arg( $name, $value, $url ) );\n+\t}\n+\n+\treturn apply_filters( 'learn_press_get_endpoint_url', esc_url_raw( $url ), $name, $value, $url );\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.3\n+ *\u002F\n+function learn_press_is_yes( $value ) {\n+\t_deprecated_function( __FUNCTION__, '4.2.3' );\n+\treturn ( $value === 1 ) || ( $value === '1' ) || ( $value == 'yes' ) || ( $value == true ) || ( $value == 'on' );\n+}\n+\n+\u002F**\n+ * @param mixed $value\n+ *\n+ * @return bool\n+ * @deprecated 4.2.3\n+ *\u002F\n+function _is_false_value( $value ) {\n+\t_deprecated_function( __FUNCTION__, '4.2.3' );\n+\tif ( is_numeric( $value ) ) {\n+\t\treturn $value == 0;\n+\t} elseif ( is_string( $value ) ) {\n+\t\treturn ( empty( $value ) || is_null( $value ) || in_array( $value, array( 'no', 'off', 'false' ) ) );\n+\t}\n+\n+\treturn ! ! $value;\n+}\n+\n+\u002F**\n+ * Map the query vars from LP to query vars of WP core\n+ * when WP parse the requesting.\n+ *\u002F\n+function learn_press_parse_request() {\n+\tglobal $wp;\n+\n+\t\u002F\u002F Map query vars to their keys, or get them if endpoints are not supported\n+\tforeach ( LearnPress::instance()->query_vars as $key => $var ) {\n+\t\tif ( isset( $_GET[ $var ] ) ) {\n+\t\t\t$wp->query_vars[ $key ] = LP_Helper::sanitize_params_submitted( $_GET[ $var ] ?? '' );\n+\t\t} elseif ( isset( $wp->query_vars[ $var ] ) ) {\n+\t\t\t$wp->query_vars[ $key ] = LP_Helper::sanitize_params_submitted( $wp->query_vars[ $var ] ?? '' );\n+\t\t}\n+\t}\n+}\n+\n+add_action( 'parse_request', 'learn_press_parse_request' );\n+\n+if ( ! function_exists( 'learn_press_reset_auto_increment' ) ) {\n+\t\u002F**\n+\t * Reset AUTO INCREMENT of the table.\n+\t *\n+\t * @param $table\n+\t *\u002F\n+\tfunction learn_press_reset_auto_increment( $table ) {\n+\t\tglobal $wpdb;\n+\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->prefix}$table AUTO_INCREMENT = %d\", 1 ) );\n+\t}\n+}\n+\n+\u002F**\n+ * Get the cart object in checkout page\n+ *\n+ * @return LP_Cart\n+ * @deprecated 4.2.0\n+ *\u002F\n+function learn_press_get_checkout_cart() {\n+\t_deprecated_function( __FUNCTION__, '4.2.0', 'LearnPress::instance()->cart' );\n+\treturn apply_filters( 'learn_press_checkout_cart', LearnPress::instance()->cart );\n+}\n+\n+function learn_press_user_time( $time, $format = 'timestamp' ) {\n+\tif ( is_string( $time ) ) {\n+\t\t$time = @strtotime( $time );\n+\t}\n+\t$time = $time + ( get_option( 'gmt_offset' ) - $_COOKIE['timezone'] \u002F 60 ) * HOUR_IN_SECONDS;\n+\tswitch ( $format ) {\n+\t\tcase 'timestamp':\n+\t\t\treturn $time;\n+\t\tdefault:\n+\t\t\treturn date( 'Y-m-d H:i:s', $time );\n+\t}\n+}\n+\n+function learn_press_get_current_version() {\n+\t$data = get_plugin_data( LP_PLUGIN_FILE, $markup = true, $translate = true );\n+\n+\treturn $data['Version'];\n+}\n+\n+\u002F**\n+ * Get current tab is displaying in user profile.\n+ * If there is no tab then get the first tab in\n+ * the list of tabs.\n+ *\n+ * @param bool $default\n+ *\n+ * @return mixed|string\n+ * @deprecated 4.2.2\n+ * addon commission 4.0.2 still use this function\n+ *\u002F\n+function learn_press_get_current_profile_tab( $default = true ) {\n+\tglobal $wp_query, $wp;\n+\t$current = '';\n+\n+\t\u002F\u002F Only load on profile page.\n+\tif ( ! LP_Page_Controller::is_page_profile() ) {\n+\t\treturn false;\n+\t}\n+\n+\tif ( ! empty( $_REQUEST['tab'] ) ) {\n+\t\t$current = LP_Helper::sanitize_params_submitted( $_REQUEST['tab'] );\n+\t} elseif ( ! empty( $wp_query->query_vars['tab'] ) ) {\n+\t\t$current = $wp_query->query_vars['tab'];\n+\t} elseif ( ! empty( $wp->query_vars['view'] ) ) {\n+\t\t$current = $wp->query_vars['view'];\n+\t} else {\n+\t\t$tabs = learn_press_get_user_profile_tabs();\n+\t\tif ( $default && $tabs ) {\n+\t\t\t\u002F\u002F Fixed for array_keys does not work with ArrayAccess instance\n+\t\t\tif ( $tabs instanceof LP_Profile_Tabs ) {\n+\t\t\t\t$tabs = $tabs->tabs();\n+\t\t\t}\n+\n+\t\t\t$tab_keys = array_keys( $tabs );\n+\t\t\t$current  = reset( $tab_keys );\n+\t\t}\n+\t}\n+\n+\treturn $current;\n+}\n+\n+\u002F\u002Fadd_action( 'init', 'learn_press_get_current_profile_tab' );\n+\n+function learn_press_profile_tab_exists( $tab ) {\n+\t$tabs = learn_press_get_user_profile_tabs();\n+\n+\tif ( $tabs ) {\n+\t\treturn ! empty( $tabs[ $tab ] ) ? true : false;\n+\t}\n+\n+\treturn false;\n+}\n+\n+function learn_press_single_term_title( $prefix = '', $display = true ) {\n+\t$term = get_queried_object();\n+\n+\tif ( ! $term ) {\n+\t\treturn '';\n+\t}\n+\n+\tif ( learn_press_is_course_category() ) {\n+\t\t$term_name = apply_filters( 'single_course_category_title', $term->name );\n+\t} elseif ( learn_press_is_course_tag() ) {\n+\t\t$term_name = apply_filters( 'single_course_tag_title', $term->name );\n+\t} elseif ( learn_press_is_course_taxonomy() ) {\n+\t\t$term_name = apply_filters( 'single_course_term_title', $term->name );\n+\t} else {\n+\t\treturn single_term_title( $prefix, $display );\n+\t}\n+\n+\tif ( empty( $term_name ) ) {\n+\t\treturn single_term_title( $prefix, $display );\n+\t}\n+\n+\tif ( $display ) {\n+\t\techo wp_kses_post( $prefix . $term_name );\n+\t}\n+\n+\treturn $prefix . $term_name;\n+}\n+\n+\u002F**\n+ * Control the template file if user is searching course.\n+ * Use the template of archive course to display the\n+ * result if there is a flag in request to search course.\n+ *\n+ * @param string $template\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_search_template( $template ) {\n+\tif ( ! empty( $_REQUEST['ref'] ) && sanitize_text_field( $_REQUEST['ref'] ) == 'course' ) {\n+\t\t$template = learn_press_locate_template( 'archive-course.php' );\n+\t}\n+\n+\treturn $template;\n+}\n+\n+\u002F**\n+ * Auto enroll user to a course after an order is completed\n+ * if the option auto-enroll is turn on.\n+ *\n+ * @param int $order_id\n+ *\n+ * @return mixed\n+ * @editor tungnx\n+ *\u002F\n+function learn_press_auto_enroll_user_to_courses( $order_id ) {\n+\t_deprecated_function( __FUNCTION__, '4.1.3' );\n+}\n+\n+\u002F\u002F add_action( 'learn_press_order_status_completed', 'learn_press_auto_enroll_user_to_courses' );\n+\n+\u002F**\n+ * Return true if enable cart\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_enable_cart() {\n+\treturn defined( 'LP_ENABLE_CART' ) && LP_ENABLE_CART == true;\n+}\n+\n+\u002F**\n+ * Short way to get checkout object\n+ *\n+ * @param array\n+ *\n+ * @return LP_Checkout\n+ *\u002F\n+function learn_press_get_checkout( $args = null ) {\n+\t$checkout = LP_Checkout::instance();\n+\n+\tif ( is_array( $args ) ) {\n+\t\tforeach ( $args as $k => $v ) {\n+\t\t\t$checkout->{$k} = $v;\n+\t\t}\n+\t}\n+\n+\treturn $checkout;\n+}\n+\n+if ( defined( 'LP_ENABLE_CART' ) && LP_ENABLE_CART ) {\n+\tadd_filter( 'learn_press_checkout_settings', '_learn_press_cart_settings', 10, 2 );\n+\tfunction _learn_press_cart_settings( $settings, $class ) {\n+\t\t$settings = array_merge(\n+\t\t\t$settings,\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => __( 'Cart', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'title',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => __( 'Enable cart', 'learnpress' ),\n+\t\t\t\t\t'desc'    => __(\n+\t\t\t\t\t\t'Check this option to enable users to purchase multiple courses at one time.',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t),\n+\t\t\t\t\t'id'      => $class->get_field_name( 'enable_cart' ),\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => __( 'Add to cart redirect', 'learnpress' ),\n+\t\t\t\t\t'desc'    => __( 'Redirect to checkout immediately after adding the course to the cart.', 'learnpress' ),\n+\t\t\t\t\t'id'      => $class->get_field_name( 'redirect_after_add' ),\n+\t\t\t\t\t'default' => 'yes',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => __( 'AJAX add to cart', 'learnpress' ),\n+\t\t\t\t\t'desc'    => __( 'Using AJAX to add the course to the cart.', 'learnpress' ),\n+\t\t\t\t\t'id'      => $class->get_field_name( 'ajax_add_to_cart' ),\n+\t\t\t\t\t'default' => 'no',\n+\t\t\t\t\t'type'    => 'checkbox',\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title'   => __( 'Cart page', 'learnpress' ),\n+\t\t\t\t\t'id'      => $class->get_field_name( 'cart_page_id' ),\n+\t\t\t\t\t'default' => '',\n+\t\t\t\t\t'type'    => 'pages-dropdown',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn $settings;\n+\t}\n+} else {\n+\tadd_filter( 'learn_press_enable_cart', '_learn_press_enable_cart', 1000 );\n+\tfunction _learn_press_enable_cart( $r ) {\n+\t\treturn false;\n+\t}\n+\n+\tadd_filter( 'learn_press_get_template', '_learn_press_enroll_button', 1000, 5 );\n+\tfunction _learn_press_enroll_button( $located, $template_name, $args, $template_path, $default_path ) {\n+\t\tif ( $template_name == 'single-course\u002Fenroll-button.php' ) {\n+\t\t\t$located = learn_press_locate_template(\n+\t\t\t\t'single-course\u002Fenroll-button-new.php',\n+\t\t\t\t$template_path,\n+\t\t\t\t$default_path\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $located;\n+\t}\n+}\n+\n+\u002F**\n+ * Returns checkout url from setting\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_checkout_url() {\n+\t$checkout_url = learn_press_get_page_link( 'checkout' );\n+\n+\treturn apply_filters( 'learn_press_get_checkout_url', $checkout_url );\n+}\n+\n+\u002F**\n+ * @return string\n+ *\u002F\n+function learn_press_checkout_needs_payment() {\n+\treturn LearnPress::instance()->cart->needs_payment();\n+}\n+\n+\u002F**\n+ * Return plugin basename\n+ *\n+ * @param string $filepath\n+ *\n+ * @return string\n+ *\u002F\n+\u002F*\n+function learn_press_plugin_basename( $filepath ) {\n+\t$file          = str_replace( '\\\\', '\u002F', $filepath );\n+\t$file          = preg_replace( '|\u002F+|', '\u002F', $file );\n+\t$plugin_dir    = str_replace( '\\\\', '\u002F', WP_PLUGIN_DIR );\n+\t$plugin_dir    = preg_replace( '|\u002F+|', '\u002F', $plugin_dir );\n+\t$mu_plugin_dir = str_replace( '\\\\', '\u002F', WPMU_PLUGIN_DIR );\n+\t$mu_plugin_dir = preg_replace( '|\u002F+|', '\u002F', $mu_plugin_dir );\n+\t$sp_plugin_dir = dirname( $filepath );\n+\t$sp_plugin_dir = dirname( $sp_plugin_dir );\n+\t$sp_plugin_dir = str_replace( '\\\\', '\u002F', $sp_plugin_dir );\n+\t$sp_plugin_dir = preg_replace( '|\u002F+|', '\u002F', $sp_plugin_dir );\n+\n+\t$file = preg_replace(\n+\t\t'#^' . preg_quote( $sp_plugin_dir, '#' ) . '\u002F|^' . preg_quote(\n+\t\t\t$plugin_dir,\n+\t\t\t'#'\n+\t\t) . '\u002F|^' . preg_quote(\n+\t\t\t$mu_plugin_dir,\n+\t\t\t'#'\n+\t\t) . '\u002F#',\n+\t\t'',\n+\t\t$file\n+\t);\n+\t$file = trim( $file, '\u002F' );\n+\n+\treturn strtolower( $file );\n+}*\u002F\n+\n+\u002F**\n+ * Update log data for each LP version into wp option.\n+ *\n+ * @param string $version\n+ * @param mixed  $data\n+ *\u002F\n+function learn_press_update_log( $version, $data ) {\n+\t$logs = get_option( 'learn_press_update_logs' );\n+\tif ( ! $logs ) {\n+\t\t$logs = array( $version => $data );\n+\t} else {\n+\t\t$logs[ $version ] = $data;\n+\t}\n+\tupdate_option( 'learn_press_update_logs', $logs );\n+}\n+\n+\u002F**\n+ * Output variables to screen for debugging.\n+ *\u002F\n+function learn_press_debug() {\n+\t$args  = func_get_args();\n+\t$debug = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );\n+\n+\techo '\u003Cpre>';\n+\tprint_r( $debug );\n+\t$arg = false;\n+\n+\tif ( $args ) {\n+\t\tforeach ( $args as $arg ) {\n+\t\t\techo \"\\n======LearnPress Debug=======\\n\";\n+\t\t\tprint_r( $arg );\n+\t\t\techo \"\\n=============================\\n\";\n+\t\t}\n+\t}\n+\techo '\u003C\u002Fpre>';\n+\n+\tif ( true === $arg ) {\n+\t\tdie( __FUNCTION__ );\n+\t}\n+}\n+\n+function learn_press_get_requested_post_type() {\n+\tglobal $pagenow;\n+\tif ( $pagenow == 'post-new.php' && ! empty( $_REQUEST['post_type'] ) ) {\n+\t\t$post_type = LP_Helper::sanitize_params_submitted( $_REQUEST['post_type'] );\n+\t} else {\n+\t\t$post_id   = learn_press_get_post();\n+\t\t$post_type = learn_press_get_post_type( $post_id );\n+\t}\n+\n+\treturn $post_type;\n+}\n+\n+\u002F**\n+ * Get human string from grade slug.\n+ *\n+ * @param string $slug\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_graduation_text( $slug ) {\n+\tswitch ( $slug ) {\n+\t\tcase 'passed':\n+\t\t\t$text = esc_html__( 'Passed', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'failed':\n+\t\t\t$text = esc_html__( 'Failed', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'in-progress':\n+\t\t\t$text = esc_html__( 'In Progress', 'learnpress' );\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t$text = $slug;\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fget-graduation-text', $text, $slug );\n+}\n+\n+if ( ! function_exists( 'learn_press_is_negative_value' ) ) {\n+\tfunction learn_press_is_negative_value( $value ) {\n+\t\t$return = in_array( $value, array( 'no', 'off', 'false', '0' ) ) || ! $value || $value == '' || $value == null;\n+\n+\t\treturn $return;\n+\t}\n+}\n+\n+\u002F**\n+ * Filter to comment reply link to fix bug the link is invalid for\n+ * lesson or quiz.\n+ *\n+ * @param string     $link\n+ * @param array      $args\n+ * @param WP_Comment $comment\n+ * @param WP_Post    $post\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_comment_reply_link( $link, $args = array(), $comment = null, $post = null ) {\n+\n+\t$post_type = learn_press_get_post_type( $post );\n+\n+\tif ( ! learn_press_is_support_course_item_type( $post_type ) ) {\n+\t\treturn $link;\n+\t}\n+\n+\t$course_item = LP_Global::course_item();\n+\n+\tif ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {\n+\t\t$link = sprintf(\n+\t\t\t'\u003Ca rel=\"nofollow\" class=\"comment-reply-login\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\tesc_url_raw( wp_login_url( get_permalink() ) ),\n+\t\t\t$args['login_text']\n+\t\t);\n+\t} elseif ( $course_item ) {\n+\t\t$onclick = sprintf(\n+\t\t\t'return addComment.moveForm( \"%1$s-%2$s\", \"%2$s\", \"%3$s\", \"%4$s\" )',\n+\t\t\t$args['add_below'],\n+\t\t\t$comment->comment_ID,\n+\t\t\t$args['respond_id'],\n+\t\t\t$post->ID\n+\t\t);\n+\n+\t\t$link = sprintf(\n+\t\t\t\"\u003Ca rel='nofollow' class='comment-reply-link' href='%s' onclick='%s' aria-label='%s'>%s\u003C\u002Fa>\",\n+\t\t\tesc_url_raw(\n+\t\t\t\tadd_query_arg(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'replytocom' => $comment->comment_ID,\n+\t\t\t\t\t),\n+\t\t\t\t\t$course_item->get_permalink()\n+\t\t\t\t)\n+\t\t\t) . '#' . $args['respond_id'],\n+\t\t\t$onclick,\n+\t\t\tesc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),\n+\t\t\t$args['reply_text']\n+\t\t);\n+\t}\n+\n+\treturn $link;\n+}\n+\n+add_filter( 'comment_reply_link', 'learn_press_comment_reply_link', 10, 4 );\n+\n+\u002F**\n+ * Sanitize content of tooltip\n+ *\n+ * @param string $tooltip\n+ * @param bool   $html\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_sanitize_tooltip( $tooltip, $html = false ) {\n+\tif ( $html ) {\n+\t\t$tooltip = htmlspecialchars(\n+\t\t\twp_kses(\n+\t\t\t\thtml_entity_decode( $tooltip ),\n+\t\t\t\tarray(\n+\t\t\t\t\t'br'     => array(),\n+\t\t\t\t\t'em'     => array(),\n+\t\t\t\t\t'strong' => array(),\n+\t\t\t\t\t'small'  => array(),\n+\t\t\t\t\t'span'   => array(),\n+\t\t\t\t\t'ul'     => array(),\n+\t\t\t\t\t'li'     => array(),\n+\t\t\t\t\t'ol'     => array(),\n+\t\t\t\t\t'p'      => array(),\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\t} else {\n+\t\t$tooltip = esc_attr( $tooltip );\n+\t}\n+\n+\treturn $tooltip;\n+}\n+\n+function learn_press_tooltip( $tooltip, $html = false ) {\n+\t$tooltip = learn_press_sanitize_tooltip( $tooltip, $html );\n+\techo '\u003Cspan class=\"learn-press-tooltip\" data-tooltip=\"' . esc_attr( $tooltip ) . '\">\u003C\u002Fspan>';\n+}\n+\n+\u002F**\n+ * Get default static pages of LP.\n+ *\n+ * @return array\n+ *\n+ * @since 3.0.0\n+ * @deprecated 4.2.3\n+ *\u002F\n+function learn_press_static_page_ids() {\n+\t$pages = LP_Object_Cache::get( 'static-page-ids', 'learn-press' );\n+\n+\tif ( false === $pages ) {\n+\t\t$pages = array(\n+\t\t\t'checkout'         => learn_press_get_page_id( 'checkout' ),\n+\t\t\t'courses'          => learn_press_get_page_id( 'courses' ),\n+\t\t\t'profile'          => learn_press_get_page_id( 'profile' ),\n+\t\t\t'become_a_teacher' => learn_press_get_page_id( 'become_a_teacher' ),\n+\t\t);\n+\n+\t\tforeach ( $pages as $name => $id ) {\n+\t\t\tif ( ! get_post( $id ) ) {\n+\t\t\t\t$pages[ $name ] = 0;\n+\t\t\t}\n+\t\t}\n+\n+\t\tLP_Object_Cache::set( 'static-page-ids', $pages, 'learn-press' );\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fstatic-page-ids', $pages );\n+}\n+\n+\u002F**\n+ * Callback function for sorting to array|object by key|prop priority.\n+ *\n+ * @param array|object $a\n+ * @param array|object $b\n+ *\n+ * @return int\n+ * @since 3.0.0\n+ *\u002F\n+function learn_press_sort_list_by_priority_callback( $a, $b ) {\n+\t$a_priority = null;\n+\t$b_priority = null;\n+\n+\tif ( is_array( $a ) && array_key_exists( 'priority', $a ) ) {\n+\t\t$a_priority = $a['priority'];\n+\t} elseif ( is_object( $a ) ) {\n+\t\tif ( is_callable( array( $a, 'get_priority' ) ) ) {\n+\t\t\t$a_priority = $a->get_priority();\n+\t\t} elseif ( property_exists( $a, 'priority' ) ) {\n+\t\t\t$a_priority = $a->priority;\n+\t\t}\n+\t}\n+\n+\tif ( is_array( $b ) && array_key_exists( 'priority', $b ) ) {\n+\t\t$b_priority = $b['priority'];\n+\t} elseif ( is_object( $b ) ) {\n+\t\tif ( is_callable( array( $b, 'get_priority' ) ) ) {\n+\t\t\t$b_priority = $b->get_priority();\n+\t\t} elseif ( property_exists( $b, 'priority' ) ) {\n+\t\t\t$b_priority = $b->priority;\n+\t\t}\n+\t}\n+\n+\tif ( $a_priority === $b_priority ) {\n+\t\treturn 0;\n+\t}\n+\n+\treturn ( $a_priority \u003C $b_priority ) ? - 1 : 1;\n+}\n+\n+\u002F**\n+ * Localize date with custom format.\n+ *\n+ * @param int|bool $timestamp\n+ * @param string $format\n+ * @param bool   $gmt\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ * @deprcated 4.2.6 use LP_Datetime format instead\n+ *\u002F\n+function learn_press_date_i18n( $timestamp = 0, string $format = '', bool $gmt = false ): string {\n+\tif ( ! $format ) {\n+\t\t$format = get_option( 'date_format' );\n+\t}\n+\n+\t$date_str = date_i18n( $format, $timestamp, $gmt );\n+\tif ( ! is_string( $date_str ) ) {\n+\t\t$date_str = '';\n+\t}\n+\n+\treturn $date_str;\n+}\n+\n+\u002F**\n+ * Get item types of course support for blocking. Default is lp_lesson\n+ *\n+ * @return array\n+ * @since 3.0.0\n+ *\u002F\n+function learn_press_get_block_course_item_types() {\n+\treturn apply_filters( 'learn-press\u002Fblock-course-item-types', array( LP_LESSON_CPT, LP_QUIZ_CPT ) );\n+}\n+\n+\u002F**\n+ * Get post type of a post from cache.\n+ * If there is no data stored in cache then\n+ * get it from WP API.\n+ *\n+ * @param int|WP_Post $post\n+ *\n+ * @return string\n+ * @since 3.1.0\n+ *\u002F\n+function learn_press_get_post_type( $post ) {\n+\t$post_types = LP_Object_Cache::get( 'post-types', 'learn-press' );\n+\n+\tif ( false === $post_types ) {\n+\t\t$post_types = array();\n+\t}\n+\n+\tif ( is_object( $post ) ) {\n+\t\t$post_id = $post->ID;\n+\t} else {\n+\t\t$post_id = absint( $post );\n+\t}\n+\n+\tif ( empty( $post_types[ $post_id ] ) ) {\n+\t\t$post_type              = get_post_type( $post_id );\n+\t\t$post_types[ $post_id ] = $post_type;\n+\t\tLP_Object_Cache::set( 'post-types', $post_types, 'learn-press' );\n+\t} else {\n+\t\t$post_type = $post_types[ $post_id ];\n+\t}\n+\n+\treturn $post_type;\n+}\n+\n+\u002F**\n+ * Update option to enable shuffle themes for ad.\n+ *\n+ * @since 3.2.1\n+ *\u002F\n+function _learn_press_schedule_enable_shuffle_themes() {\n+\tupdate_option( 'learn_press_ad_shuffle_themes', 'yes' );\n+}\n+\n+add_action( 'learn-press\u002Fschedule-enable-shuffle-themes', '_learn_press_schedule_enable_shuffle_themes' );\n+\n+\u002F**\n+ * Return localize script data for admin.\n+ *\n+ * @return array\n+ * @since 3.2.6\n+ * @version 1.0.1\n+ *\u002F\n+function learn_press_global_script_params(): array {\n+\t$localize = [\n+\t\t'ajax'       => admin_url( 'admin-ajax.php' ),\n+\t\t'plugin_url' => LearnPress::instance()->plugin_url(),\n+\t\t'siteurl'    => home_url(),\n+\t\t\u002F\u002F'current_url' => learn_press_get_current_url(),\n+\t\t'theme'      => get_stylesheet(),\n+\t\t'localize'   => array(\n+\t\t\t'button_ok'     => __( 'OK', 'learnpress' ),\n+\t\t\t'button_cancel' => __( 'Cancel', 'learnpress' ),\n+\t\t\t'button_yes'    => __( 'Yes', 'learnpress' ),\n+\t\t\t'button_no'     => __( 'No', 'learnpress' ),\n+\t\t),\n+\t\t'rest'       => esc_url_raw( rest_url() ),\n+\t\t'nonce'      => wp_create_nonce( 'wp_rest' ),\n+\t\t'is_admin'   => current_user_can( ADMIN_ROLE ),\n+\t];\n+\n+\treturn apply_filters( 'lp\u002Fadmin\u002Flocalize\u002Fscripts', $localize );\n+}\n+\n+\u002F**\n+ * Return list types of questions that support answer options.\n+ *\n+ * @return array\n+ * @since 3.3.0\n+ *\u002F\n+function learn_press_get_question_support_answer_options() {\n+\t$questions = learn_press_get_question_support_feature( 'answer-options' );\n+\n+\treturn apply_filters( 'learn-press\u002Fquestions-support-answer-options', $questions );\n+}\n+\n+\u002F**\n+ * Return list types of question that support a feature.\n+ *\n+ * @param string $feature\n+ *\n+ * @return array\n+ * @since 3.3.0\n+ *\u002F\n+function learn_press_get_question_support_feature( $feature ) {\n+\t$questions = array();\n+\t$types     = LP_Global::get_object_supports( 'question' );\n+\n+\tif ( $types ) {\n+\t\tforeach ( $types as $type => $features ) {\n+\t\t\tif ( array_key_exists( $feature, $features ) ) {\n+\t\t\t\t$questions[] = $type;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn $questions;\n+}\n+\n+\u002F**\n+ * LP Cookie\n+ *\n+ * @param $name\n+ * @param $namespace\n+ *\n+ * @return mixed|null\n+ *\u002F\n+function learn_press_cookie_get( $name, $namespace = 'LP' ) {\n+\tif ( $namespace ) {\n+\t\t$cookie = ! empty( $_COOKIE[ $namespace ] ) ? (array) json_decode( LP_Helper::sanitize_params_submitted( stripslashes( $_COOKIE[ $namespace ] ), 'html' ) ) : array();\n+\t} else {\n+\t\t$cookie = $_COOKIE;\n+\t}\n+\n+\treturn $cookie[ $name ] ?? null;\n+}\n+\n+\u002F**\n+ * Get default methods to evaluate course results.\n+ *\n+ * @param string $return - Optional. 'keys' will return keys instead of all.\n+ *\n+ * @return array\n+ * @since 3.x.x\n+ *\u002F\n+function learn_press_course_evaluation_methods( $postid, $return = '', $final_quizz_passing = '' ) {\n+\t$final_quiz_btn = sprintf(\n+\t\t'\u003Ca href=\"#\" class=\"lp-metabox-get-final-quiz\" data-postid=\"%d\" data-loading=\"%s\">%s\u003C\u002Fa>',\n+\t\t$postid,\n+\t\tesc_attr__( 'Loading...', 'learnpress' ),\n+\t\tesc_html__( 'Get A Passing Grade', 'learnpress' )\n+\t);\n+\n+\t$evaluations_desc = array(\n+\t\t'evaluate_lesson'     => sprintf(\n+\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\n+\t\t\t__( 'Evaluate by the number of completed lessons per the total number of lessons.', 'learnpress' ),\n+\t\t\t__( 'E.g: If a course has 10 lessons and a user completes 5 lessons, then the result is 5\u002F10 (50%).', 'learnpress' )\n+\t\t),\n+\t\t'evaluate_final_quiz' => __(\n+\t\t\t'Evaluate by the result of the final quiz in the course. You have to add a quiz at the end of the course.',\n+\t\t\t'learnpress'\n+\t\t),\n+\t\t'evaluate_quiz'       => sprintf(\n+\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\n+\t\t\t__( 'Evaluate by the number of passed quizzes per the total number of quizzes.', 'learnpress' ),\n+\t\t\t__(\n+\t\t\t\t'E.g: If the course has 10 quizzes and the user passes 5 quizzes, then the result is 5\u002F10 (50%).',\n+\t\t\t\t'learnpress'\n+\t\t\t)\n+\t\t),\n+\t\t'evaluate_questions'  => sprintf(\n+\t\t\t'\u003Cp>%s\u003Cbr\u002F>%s\u003C\u002Fp>',\n+\t\t\t__( 'Evaluate by the number of correct answers per the total number of questions.', 'learnpress' ),\n+\t\t\t__(\n+\t\t\t\t'E.g: If the course has 10 questions and the user corrects 5 questions, then the result is 5\u002F10 (50%).',\n+\t\t\t\t'learnpress'\n+\t\t\t)\n+\t\t),\n+\t\t'evaluate_mark'       => __( 'Evaluate by the number of achieved scores per the total score of the questions.', 'learnpress' ),\n+\t);\n+\n+\t$methods = apply_filters(\n+\t\t'learnpress\u002Fcourse-evaluation\u002Fmethods',\n+\t\tarray(\n+\t\t\t'evaluate_lesson'     => sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'Evaluate via lessons', 'learnpress' ),\n+\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_lesson'], false )\n+\t\t\t),\n+\t\t\t'evaluate_final_quiz' => sprintf(\n+\t\t\t\t'%s %s %s %s',\n+\t\t\t\t__( 'Evaluate via results of the final quiz', 'learnpress' ),\n+\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_final_quiz'], false ),\n+\t\t\t\t$final_quiz_btn,\n+\t\t\t\t$final_quizz_passing\n+\t\t\t),\n+\t\t\t'evaluate_quiz'       => sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'Evaluate via passed quizzes', 'learnpress' ),\n+\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_quiz'], false )\n+\t\t\t),\n+\t\t\t'evaluate_questions'  => sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'Evaluate via questions', 'learnpress' ),\n+\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_questions'], false )\n+\t\t\t),\n+\t\t\t'evaluate_mark'       => sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'Evaluate via mark', 'learnpress' ),\n+\t\t\t\tlearn_press_quick_tip( $evaluations_desc['evaluate_mark'], false )\n+\t\t\t),\n+\t\t),\n+\t\t$postid\n+\t);\n+\n+\treturn apply_filters(\n+\t\t'learn-press\u002Fcourse-evaluation-methods',\n+\t\t$return === 'keys' ? array_keys( $methods ) : $methods,\n+\t\t$return\n+\t);\n+}\n+\n+\u002F**\n+ * Get max retrying quiz allowed.\n+ *\n+ * @param int $quiz_id\n+ * @param int $course_id\n+ *\n+ * @return int\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_get_quiz_max_retrying( $quiz_id = 0, $course_id = 0 ) {\n+\treturn apply_filters( 'learn-press\u002Fmax-retry-quiz-allowed', 1, $quiz_id, $course_id );\n+}\n+\n+\u002F**\n+ * Get slug for status of course\u002Flesson\u002Fquiz if user\n+ * completed\u002Ffinished and graduation is passed.\n+ *\n+ * @param string $type\n+ *\n+ * @return string\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_user_item_in_progress_slug( $type = '' ) {\n+\treturn apply_filters( 'learn-press\u002Fuser-item-in-progress-slug', 'in-progress', $type );\n+}\n+\n+\u002F**\n+ * Get slug for status of course\u002Flesson\u002Fquiz if user\n+ * completed\u002Ffinished and result is under-evaluation\n+ *\n+ * @param string $item - Optional. Type of item\n+ *\n+ * @return string\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_user_item_under_evaluation_slug( $item = '' ) {\n+\treturn apply_filters( 'learn-press\u002Fuser-item-under-evaluation-slug', 'in-progress', $item );\n+}\n+\n+function learn_press_is_enrolled_slug( $slug ) {\n+\treturn in_array(\n+\t\t$slug,\n+\t\tarray(\n+\t\t\t'in-progress',\n+\t\t\t'enrolled',\n+\t\t)\n+\t);\n+}\n+\n+\u002F**\n+ * @return array\n+ * @since 4.0.0\n+ *\u002F\n+function lp_item_course_class( $class = array() ) {\n+\t$classes = array_merge(\n+\t\t$class,\n+\t\tarray( 'learn-press-courses' )\n+\t);\n+\techo 'class=\"' . esc_attr( implode( ' ', apply_filters( 'lp_item_course_class', $classes ) ) ) . '\"';\n+}\n+\n+\u002F\u002Frequire_once dirname( __FILE__ ) . '\u002Flp-custom-hooks.php';\n+\n+\u002F\u002F Notify update message for LearnPress plugin\n+\u002F*add_action(\n+\t'in_plugin_update_message-learnpress\u002Flearnpress.php',\n+\tfunction ( $plugin_data ) {\n+\t\tif ( version_compare( $plugin_data['new_version'], LEARNPRESS_VERSION, '\u003C=' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo sprintf(\n+\t\t\t'\u003Chr\u002F>\u003Ch3>%s\u003C\u002Fh3>\u003Cdiv>%s\u003C\u002Fdiv>',\n+\t\t\tesc_html__( 'Heads up! Please backup before upgrading!', 'learnpress' ),\n+\t\t\tesc_html__( 'The latest update includes some substantial changes across different areas of the plugin. We highly recommend you backup your site before upgrading, and make sure you first update in a staging environment', 'learnpress' )\n+\t\t);\n+\t}\n+);*\u002F\n+\n+\u002F**\n+ * If Elementor Pro set Theme builder type \"Archive\", will not show content on page \"Archive course\"\n+ *\n+ * @editor tungnx\n+ * @author nhamdv\n+ *\n+ * @since 4.0.6\n+ * @version 1.0.1\n+ *\u002F\n+add_filter(\n+\t'elementor\u002Ftheme\u002Fget_location_templates\u002Ftemplate_id',\n+\tfunction ( $theme_template_id ) {\n+\t\t$elementor_template_type = get_post_meta( $theme_template_id, '_elementor_template_type', true );\n+\n+\t\tif ( in_array( $elementor_template_type, array( 'archive' ) ) ) {\n+\t\t\tif ( LP_PAGE_COURSES === LP_Page_Controller::page_current() && class_exists( 'ElementorPro\\Modules\\ThemeBuilder\\Conditions\\Archive' ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $theme_template_id;\n+\t}\n+);\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-custom-hooks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-custom-hooks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-custom-hooks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-custom-hooks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Re-evaluate course results when user started, tried and finished quiz.\r\n- *\r\n- * @since 3.x.x\r\n- *\r\n- * @param int $quiz_id\r\n- * @param int $course_id\r\n- * @param int $user_id\r\n- *\u002F\r\n-\u002F*function learn_press_evaluate_course_results( $quiz_id, $course_id, $user_id ) {\r\n-\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\tLP_Object_Cache::delete( 'user-course-' . $user_id . '-' . $course_id, 'learn-press\u002Fcourse-results' );\r\n-\t$course_data = $user->get_course_data( $course_id );\r\n-\r\n-\tif ( $course_data ) {\r\n-\t\t$r = $course_data->calculate_course_results();\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*add_action( 'learn-press\u002Fuser\u002Fquiz-started', 'learn_press_evaluate_course_results', 10, 3 );\r\n-add_action( 'learn-press\u002Fuser\u002Fquiz-redone', 'learn_press_evaluate_course_results', 10, 3 );\r\n-add_action( 'learn-press\u002Fuser\u002Fquiz-finished', 'learn_press_evaluate_course_results', 10, 3 );*\u002F\r\n-\r\n-\u002F*add_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_archive_course_page_content' );\r\n-add_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_taxonomy_archive_course_description' );*\u002F\r\n-\r\n+\u003C?php\n+\n+\u002F**\n+ * Re-evaluate course results when user started, tried and finished quiz.\n+ *\n+ * @since 3.x.x\n+ *\n+ * @param int $quiz_id\n+ * @param int $course_id\n+ * @param int $user_id\n+ *\u002F\n+\u002F*function learn_press_evaluate_course_results( $quiz_id, $course_id, $user_id ) {\n+\t$user = learn_press_get_user( $user_id );\n+\n+\tLP_Object_Cache::delete( 'user-course-' . $user_id . '-' . $course_id, 'learn-press\u002Fcourse-results' );\n+\t$course_data = $user->get_course_data( $course_id );\n+\n+\tif ( $course_data ) {\n+\t\t$r = $course_data->calculate_course_results();\n+\t}\n+}*\u002F\n+\n+\u002F*add_action( 'learn-press\u002Fuser\u002Fquiz-started', 'learn_press_evaluate_course_results', 10, 3 );\n+add_action( 'learn-press\u002Fuser\u002Fquiz-redone', 'learn_press_evaluate_course_results', 10, 3 );\n+add_action( 'learn-press\u002Fuser\u002Fquiz-finished', 'learn_press_evaluate_course_results', 10, 3 );*\u002F\n+\n+\u002F*add_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_archive_course_page_content' );\n+add_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_taxonomy_archive_course_description' );*\u002F\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-deprecated.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-deprecated.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-deprecated.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-deprecated.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1106 +1,1106 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-if ( ! function_exists( 'learn_press_course_content_lesson' ) ) {\r\n-\t\u002F**\r\n-\t * Display course description\r\n-\t *\u002F\r\n-\tfunction learn_press_course_content_lesson() {\r\n-\t\tlearn_press_get_template( 'content-lesson\u002Fsummary.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_lesson_description' ) ) {\r\n-\t\u002F**\r\n-\t * Display course lesson description\r\n-\t *\u002F\r\n-\tfunction learn_press_course_lesson_description() {\r\n-\t\tlearn_press_get_template( 'content-lesson\u002Fdescription.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_quiz_description' ) ) {\r\n-\t\u002F**\r\n-\t * Display lesson content\r\n-\t *\u002F\r\n-\tfunction learn_press_course_quiz_description() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-quiz.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_course_lesson_complete_button' ) ) {\r\n-\t\u002F**\r\n-\t * Display lesson complete button\r\n-\t *\u002F\r\n-\tfunction learn_press_course_lesson_complete_button() {\r\n-\t\tlearn_press_get_template( 'content-lesson\u002Fcomplete-button.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_course_lesson_navigation' ) ) {\r\n-\t\u002F**\r\n-\t * Display lesson navigation\r\n-\t *\u002F\r\n-\tfunction learn_press_course_lesson_navigation() {\r\n-\t\tlearn_press_get_template( 'content-lesson\u002Fnavigation.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_preview_mode' ) ) {\r\n-\t\u002F**\r\n-\t * Output the title of the quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_preview_mode() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fpreview-mode.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_left_start_wrap' ) ) {\r\n-\tfunction learn_press_single_quiz_left_start_wrap() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fleft-start-wrap.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_question' ) ) {\r\n-\t\u002F**\r\n-\t * Output the single question for quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_question() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fcontent-question.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_result' ) ) {\r\n-\t\u002F**\r\n-\t * Output the result for the quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_result() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fresult.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_questions_nav' ) ) {\r\n-\t\u002F**\r\n-\t * Output the navigation to next and previous questions\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_questions_nav() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fnav.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_questions' ) ) {\r\n-\t\u002F**\r\n-\t * Output the list of questions for quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_questions() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fquestions.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_history' ) ) {\r\n-\t\u002F**\r\n-\t * Output the history of a quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_history() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fhistory.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_left_end_wrap' ) ) {\r\n-\tfunction learn_press_single_quiz_left_end_wrap() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fleft-end-wrap.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_sidebar' ) ) {\r\n-\t\u002F**\r\n-\t * Output the sidebar for a quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_sidebar() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fsidebar.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_information' ) ) {\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_information() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_timer' ) ) {\r\n-\t\u002F**\r\n-\t * Output the quiz countdown timer\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_timer() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Ftimer.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_buttons' ) ) {\r\n-\t\u002F**\r\n-\t * Output the buttons for quiz actions\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_buttons() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_description' ) ) {\r\n-\t\u002F**\r\n-\t * Output the content of the quiz\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_description() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fdescription.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_information' ) ) {\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_information() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_sidebar_buttons' ) ) {\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tfunction learn_press_single_quiz_sidebar_buttons() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fsidebar-buttons.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( '_learn_press_default_course_tabs' ) ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Add default tabs to course\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param array $tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @return array\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction _learn_press_default_course_tabs( $tabs = array() ) {\r\n-\u002F\u002F\t\t_deprecated_function( __FUNCTION__, '3.0.0', 'learn_press_get_course_tabs' );\r\n-\u002F\u002F\r\n-\u002F\u002F\t\treturn learn_press_get_course_tabs();\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002F Show filters for students list\r\n-\u002F\u002F Wait addon student list v4.0.3 update will remove it\r\n-\u002F\u002F @deprecated 4.2.7.4\r\n-\u002F*function learn_press_get_students_list_filter() {\r\n-\t$filter = array(\r\n-\t\t'all'         => esc_html__( 'All', 'learnpress' ),\r\n-\t\t'in-progress' => esc_html__( 'In Progress', 'learnpress' ),\r\n-\t\t'finished'    => esc_html__( 'Finished', 'learnpress' ),\r\n-\t);\r\n-\r\n-\treturn apply_filters( 'learn_press_get_students_list_filter', $filter );\r\n-}*\u002F\r\n-\r\n-\r\n-function learn_press_output_question_nonce( $question ) {\r\n-\tprintf( '\u003Cinput type=\"hidden\" name=\"update-question-nonce\" value=\"%s\" \u002F>', wp_create_nonce( 'current-question-nonce-' . $question->id ) );\r\n-}\r\n-\r\n-add_action( 'learn_press_after_question_wrap', 'learn_press_output_question_nonce' );\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_nav_items' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Displaying course items navigation\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param null $item_id\r\n-\u002F\u002F\t * @param null $course_id\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_nav_items( $item_id = null, $course_id = null ) {\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'single-course\u002Fnav-items.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'course_id'    => $course_id,\r\n-\u002F\u002F\t\t\t\t'item_id'      => $item_id,\r\n-\u002F\u002F\t\t\t\t'content_only' => learn_press_is_content_item_only(),\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F**\r\n- * Version 3.3.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * New functions since 3.0.0\r\n- *\u002F\r\n-if ( ! function_exists( 'learn_press_course_purchase_button' ) ) {\r\n-\t\u002F**\r\n-\t * Purchase course button.\r\n-\t *\u002F\r\n-\tfunction learn_press_course_purchase_button() {\r\n-\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_enroll_button' ) ) {\r\n-\t\u002F**\r\n-\t * Enroll course button.\r\n-\t *\u002F\r\n-\tfunction learn_press_course_enroll_button() {\r\n-\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_external_button' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Retake course button\r\n-\t * @deprecated 4.2.5.3\r\n-\t *\u002F\r\n-\tfunction learn_press_course_external_button() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.2.5.3' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_students' ) ) {\r\n-\t\u002F**\r\n-\t * Display course students\r\n-\t *\u002F\r\n-\tfunction learn_press_course_students() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fstudents.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_status' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display the title for single course\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_status() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fstatus.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_courses_loop_item_instructor' ) ) {\r\n-\t\u002F**\r\n-\t * Output the instructor of the course within loop\r\n-\t * @using in many themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_courses_loop_item_instructor() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finstructor.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_tabs' ) ) {\r\n-\t\u002F*\r\n-\t * Output course tabs\r\n-\t * @using in theme starkid\r\n-\t *\u002F\r\n-\tfunction learn_press_course_tabs() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Ftabs.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_quiz_title' ) ) {\r\n-\tfunction learn_press_content_item_quiz_title() {\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Ftitle.php' );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_quiz_intro' ) ) {\r\n-\tfunction learn_press_content_item_quiz_intro() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\t$quiz   = LP_Global::course_item_quiz();\r\n-\r\n-\t\tif ( $user->has_quiz_status( array( 'started', 'completed' ), $quiz->get_id(), $course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user->has_quiz_status( 'started', $quiz->get_id(), $course->get_id() ) ) {\r\n-\t\t\t\u002F\u002F return;\r\n-\t\t}\r\n-\r\n-\t\tif ( $quiz->get_viewing_question() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_content' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_quiz_content() {\r\n-\t\t$item = LP_Global::course_item();\r\n-\r\n-\t\tif ( ! $item->get_viewing_question() ) {\r\n-\t\t\tlearn_press_get_template( 'content-quiz\u002Fdescription.php' );\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_question_title' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_question_title() {\r\n-\t\t$quiz = LP_Global::course_item_quiz();\r\n-\r\n-\t\tif ( $question = $quiz->get_viewing_question() ) {\r\n-\t\t\tlearn_press_get_template( 'content-question\u002Ftitle.php' );\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_progress' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_quiz_progress() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\t$quiz   = LP_Global::course_item_quiz();\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $user->has_quiz_status( array( 'viewed', '' ), $quiz->get_id(), $course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $question = $quiz->get_viewing_question() ) {\r\n-\t\t\tlearn_press_get_template( 'content-quiz\u002Fprogress.php' );\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_countdown' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_quiz_countdown() {\r\n-\t\t$quiz = LP_Global::course_item_quiz();\r\n-\r\n-\t\tif ( $question = $quiz->get_viewing_question() ) {\r\n-\t\t\tlearn_press_get_template( 'content-quiz\u002Fcountdown.php' );\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_question_content' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_question_content() {\r\n-\t\t$quiz = LP_Global::course_item_quiz();\r\n-\r\n-\t\tif ( $question = $quiz->get_viewing_question() ) {\r\n-\t\t\tlearn_press_get_template( 'content-question\u002Fdescription.php' );\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_buttons' ) ) {\r\n-\r\n-\tfunction learn_press_content_item_summary_quiz_buttons() {\r\n-\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\r\n-\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons.php' );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_profile_recover_order_form' ) ) {\r\n-\tfunction learn_press_profile_recover_order_form( $order ) {\r\n-\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Frecover-order.php', array( 'order' => $order ) );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_wrapper_start' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Wrapper Start\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_wrapper_start() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fbefore-main-content.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_wrapper_end' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * wrapper end\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_wrapper_end() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fafter-main-content.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_thumbnail' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the thumbnail of the course within loop\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_thumbnail() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fthumbnail.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_title' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the title of the course within loop\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_title() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Ftitle.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_begin_meta' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the excerpt of the course within loop\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_begin_meta() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta-begin.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_end_meta' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the excerpt of the course within loop\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_end_meta() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta-end.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_introduce' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the excerpt of the course within loop\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_introduce() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fintroduce.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_courses_loop_item_price' ) ) {\r\n-\t\u002F**\r\n-\t * Output the price of the course within loop\r\n-\t * @using in many themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_courses_loop_item_price() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fprice.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_begin_courses_loop' ) ) {\r\n-\t\u002F**\r\n-\t * Output the price of the course within loop\r\n-\t * @using in many themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_begin_courses_loop() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-begin.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_end_courses_loop' ) ) {\r\n-\t\u002F**\r\n-\t * Output the price of the course within loop\r\n-\t * @using in many themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_end_courses_loop() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-end.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_students' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the students of the course within loop\r\n-\u002F\u002F\t * @deprecated 4.0.0\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_loop_item_students() {\r\n-\u002F\u002F\t\t_deprecated_function( __FUNCTION__, '4.0.0' );\r\n-\u002F\u002F\t\techo '\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>';\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fstudents.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_courses_pagination' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the pagination of archive courses\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_courses_pagination() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fpagination.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_output_single_course_learning_summary' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the content of learning course content\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_output_single_course_learning_summary() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-learning.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_output_single_course_landing_summary' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the content of landing course content\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_output_single_course_landing_summary() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-landing.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_title' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display the title for single course\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_title() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftitle.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_progress' ) ) {\r\n-\t\u002F**\r\n-\t * Display course curriculum\r\n-\t * @using ivy-school\r\n-\t *\u002F\r\n-\tfunction learn_press_course_progress() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fprogress.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_curriculum' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display course curriculum\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_curriculum() {\r\n-\u002F\u002F\t\t\u002F\u002F learn_press_get_template( 'single-course\u002Fcurriculum.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_categories' ) ) {\r\n-\t\u002F**\r\n-\t * Display course categories\r\n-\t * @using eduma child theme v5.5.5\r\n-\t *\u002F\r\n-\tfunction learn_press_course_categories() {\r\n-\t\t\u002F\u002F learn_press_get_template( 'single-course\u002Fcategories.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_tags' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display course tags\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_tags() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftags.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_instructor' ) ) {\r\n-\t\u002F**\r\n-\t * Display course instructor\r\n-\t * @using in many themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_course_instructor() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Finstructor.php' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_thumbnail' ) ) {\r\n-\t\u002F**\r\n-\t * Display Course Thumbnail\r\n-\t * @using in Eduma, Education Pack themes.\r\n-\t *\u002F\r\n-\tfunction learn_press_course_thumbnail() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fthumbnail.php' );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_single_course_description' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display course description\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_single_course_description() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fdescription.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_single_course_content_item' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display lesson content\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_single_course_content_item() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_form_login' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output login form before order review if user is not logged in\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_checkout_user_form_login() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-login.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_form_register' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output register form before order review if user is not logged in\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_checkout_user_form_register() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-register.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_logged_in' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output message before order review if user is logged in\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_checkout_user_logged_in() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-logged-in.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_after_profile_tab_loop_course' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_after_profile_tab_loop_course( $user, $course_id ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t$args = array(\r\n-\u002F\u002F\t\t\t'user'      => $user,\r\n-\u002F\u002F\t\t\t'course_id' => $course_id,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fprogress.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_output_user_profile_info' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Displaying user info\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param $user\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_output_user_profile_info( $user, $current, $tabs ) {\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'profile\u002Finfo.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'user'    => $user,\r\n-\u002F\u002F\t\t\t\t'tabs'    => $tabs,\r\n-\u002F\u002F\t\t\t\t'current' => $current,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F* QUIZ TEMPLATES *\u002F\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_single_quiz_title' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the title of the quiz\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_single_quiz_title() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'content-quiz\u002Ftitle.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_message' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Template to display the messages\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param        $content\r\n-\u002F\u002F\t * @param string  $type\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_message( $content, $type = 'message' ) {\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'global\u002Fmessage.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'type'    => $type,\r\n-\u002F\u002F\t\t\t\t'content' => $content,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_overview_tab' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output course overview\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @since 1.1\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_overview_tab() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Foverview.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_curriculum_tab' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output course curriculum\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @since 1.1\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_curriculum_tab() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Fcurriculum.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_instructor_tab' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output course curriculum\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @since 1.1\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_course_instructor_tab() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Finstructor.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_header' ) ) {\r\n-\u002F\u002F\tfunction learn_press_content_item_header() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fheader.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_footer' ) ) {\r\n-\u002F\u002F\tfunction learn_press_content_item_footer() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Ffooter.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_mobile_menu' ) ) {\r\n-\u002F\u002F\tfunction learn_press_profile_mobile_menu() {\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Fmobile-menu.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_quiz_complete_button' ) ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\tfunction learn_press_quiz_complete_button() {\r\n-\u002F\u002F\t\t$course = learn_press_get_course();\r\n-\u002F\u002F\t\t$user   = learn_press_get_current_user();\r\n-\u002F\u002F\t\t$quiz   = LP_Global::course_item_quiz();\r\n-\u002F\u002F\r\n-\u002F\u002F\t\tif ( $user->has_course_status( $course->get_id(), array( 'finished' ) ) || ! $user->has_quiz_status( 'started', $quiz->get_id(), $course->get_id() ) ) {\r\n-\u002F\u002F\t\t\treturn;\r\n-\u002F\u002F\t\t}\r\n-\u002F\u002F\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons\u002Fcomplete.php' );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_summary_question_explanation' ) ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Render content if quiz question.\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_content_item_summary_question_explanation() {\r\n-\u002F\u002F\t\t$quiz     = LP_Global::course_item_quiz();\r\n-\u002F\u002F\t\t$question = $quiz->get_viewing_question();\r\n-\u002F\u002F\t\tif ( $question ) {\r\n-\u002F\u002F\t\t\t$course      = learn_press_get_course();\r\n-\u002F\u002F\t\t\t$user        = learn_press_get_current_user();\r\n-\u002F\u002F\t\t\t$course_data = $user->get_course_data( $course->get_id() );\r\n-\u002F\u002F\t\t\t$user_quiz   = $course_data->get_item_quiz( $quiz->get_id() );\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\tif ( ! $question->get_explanation() ) {\r\n-\u002F\u002F\t\t\t\treturn;\r\n-\u002F\u002F\t\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\tif ( $user_quiz->has_checked_question( $question->get_id() ) || $user_quiz->is_answered_true( $question->get_id() ) ) {\r\n-\u002F\u002F\t\t\t\tlearn_press_get_template( 'content-question\u002Fexplanation.php', array( 'question' => $question ) );\r\n-\u002F\u002F\t\t\t}\r\n-\u002F\u002F\t\t}\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_breadcrumb' ) ) {\r\n-\t\u002F**\r\n-\t * Output the breadcrumb of archive courses\r\n-\t * Still using\r\n-\t *\r\n-\t * @param array $args\r\n-\t * @deprecated still using addons collection, upsell, themes\r\n-\t *\u002F\r\n-\tfunction learn_press_breadcrumb( $args = array() ) {\r\n-\t\techo Template::html_breadcrumb( $args );\r\n-\t\treturn;\r\n-\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tapply_filters(\r\n-\t\t\t\t'learn_press_breadcrumb_defaults',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'delimiter'   => '\u003Cli class=\"breadcrumb-delimiter\">\u003Ci class=\"lp-icon-angle-right\">\u003C\u002Fi>\u003C\u002Fli>',\r\n-\t\t\t\t\t'wrap_before' => '\u003Cul class=\"learn-press-breadcrumb\">',\r\n-\t\t\t\t\t'wrap_after'  => '\u003C\u002Ful>',\r\n-\t\t\t\t\t'before'      => '',\r\n-\t\t\t\t\t'after'       => '',\r\n-\t\t\t\t\t'home'        => _x( 'Home', 'breadcrumb', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$breadcrumbs = new LP_Breadcrumb();\r\n-\r\n-\t\tif ( $args['home'] ) {\r\n-\t\t\t$breadcrumbs->add_crumb( $args['home'], apply_filters( 'learn_press_breadcrumb_home_url', home_url() ) );\r\n-\t\t}\r\n-\r\n-\t\t$args['breadcrumb'] = $breadcrumbs->generate();\r\n-\r\n-\t\tlearn_press_get_template( 'global\u002Fbreadcrumb.php', $args );\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_search_form' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Output the breadcrumb of archive courses\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param array\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_search_form() {\r\n-\u002F\u002F\t\tif ( ! empty( $_REQUEST['s'] ) && ! empty( $_REQUEST['ref'] ) && 'course' == $_REQUEST['ref'] ) {\r\n-\u002F\u002F\t\t\t$s = stripslashes_deep( $_REQUEST['s'] );\r\n-\u002F\u002F\t\t} else {\r\n-\u002F\u002F\t\t\t$s = '';\r\n-\u002F\u002F\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\tlearn_press_get_template( 'search-form.php', array( 's' => $s ) );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_section_item_meta' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * @param object\r\n-\u002F\u002F\t * @param array\r\n-\u002F\u002F\t * @param LP_Course\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_section_item_meta( $item, $section ) {\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'single-course\u002Fsection\u002Fitem-meta.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'item'    => $item,\r\n-\u002F\u002F\t\t\t\t'section' => $section,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_order_details_table' ) ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Displays order details in a table.\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param mixed $order_id\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @subpackage    Orders\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_order_details_table( $order_id ) {\r\n-\u002F\u002F\t\tif ( ! $order_id ) {\r\n-\u002F\u002F\t\t\treturn;\r\n-\u002F\u002F\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'order\u002Forder-details.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'order' => learn_press_get_order( $order_id ),\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_own' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_profile_tab_courses_own( $user, $tab = null ) {\r\n-\u002F\u002F\t\t$args              = array(\r\n-\u002F\u002F\t\t\t'user'   => $user,\r\n-\u002F\u002F\t\t\t'subtab' => $tab,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\r\n-\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_own_limit', $limit );\r\n-\u002F\u002F\t\t$courses           = $user->get( 'own-courses', array( 'limit' => $limit ) );\r\n-\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\r\n-\u002F\u002F\t\t$args['courses']   = $courses;\r\n-\u002F\u002F\t\t$args['num_pages'] = $num_pages;\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fown.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_learning' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_profile_tab_courses_learning( $user, $tab = null ) {\r\n-\u002F\u002F\t\t$args              = array(\r\n-\u002F\u002F\t\t\t'user'   => $user,\r\n-\u002F\u002F\t\t\t'subtab' => $tab,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\r\n-\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_learning_limit', $limit );\r\n-\u002F\u002F\t\t$courses           = $user->get(\r\n-\u002F\u002F\t\t\t'enrolled-courses',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'status' => 'enrolled',\r\n-\u002F\u002F\t\t\t\t'limit'  => $limit,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\r\n-\u002F\u002F\t\t$args['courses']   = $courses;\r\n-\u002F\u002F\t\t$args['num_pages'] = $num_pages;\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Flearning.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_purchased' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_profile_tab_courses_purchased( $user, $tab = null ) {\r\n-\u002F\u002F\t\t$args              = array(\r\n-\u002F\u002F\t\t\t'user'   => $user,\r\n-\u002F\u002F\t\t\t'subtab' => $tab,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\r\n-\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_purchased_limit', $limit );\r\n-\u002F\u002F\t\t$courses           = $user->get( 'purchased-courses', array( 'limit' => $limit ) );\r\n-\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\r\n-\u002F\u002F\t\t$args['courses']   = $courses;\r\n-\u002F\u002F\t\t$args['num_pages'] = $num_pages;\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fpurchased.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_finished' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_profile_tab_courses_finished( $user, $tab = null ) {\r\n-\u002F\u002F\t\t$args              = array(\r\n-\u002F\u002F\t\t\t'user'   => $user,\r\n-\u002F\u002F\t\t\t'subtab' => $tab,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\r\n-\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_finished_limit', $limit );\r\n-\u002F\u002F\t\t$courses           = $user->get(\r\n-\u002F\u002F\t\t\t'enrolled-courses',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'status' => 'finished',\r\n-\u002F\u002F\t\t\t\t'limit'  => $limit,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\r\n-\u002F\u002F\t\t$args['courses']   = $courses;\r\n-\u002F\u002F\t\t$args['num_pages'] = $num_pages;\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Ffinished.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_output_user_profile_tabs' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_output_user_profile_tabs( $user, $current, $tabs ) {\r\n-\u002F\u002F\t\tlearn_press_get_template(\r\n-\u002F\u002F\t\t\t'profile\u002Ftabs.php',\r\n-\u002F\u002F\t\t\tarray(\r\n-\u002F\u002F\t\t\t\t'user'    => $user,\r\n-\u002F\u002F\t\t\t\t'tabs'    => $tabs,\r\n-\u002F\u002F\t\t\t\t'current' => $current,\r\n-\u002F\u002F\t\t\t)\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_all' ) ) {\r\n-\u002F\u002F\t\u002F**\r\n-\u002F\u002F\t * Display user profile tabs\r\n-\u002F\u002F\t *\r\n-\u002F\u002F\t * @param LP_User\r\n-\u002F\u002F\t *\u002F\r\n-\u002F\u002F\tfunction learn_press_profile_tab_courses_all( $user, $tab = null ) {\r\n-\u002F\u002F\t\t$args              = array(\r\n-\u002F\u002F\t\t\t'user'   => $user,\r\n-\u002F\u002F\t\t\t'subtab' => $tab,\r\n-\u002F\u002F\t\t);\r\n-\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\r\n-\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_all_limit', $limit );\r\n-\u002F\u002F\t\t$courses           = $user->get( 'courses', array( 'limit' => $limit ) );\r\n-\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\r\n-\u002F\u002F\t\t$args['courses']   = $courses;\r\n-\u002F\u002F\t\t$args['num_pages'] = $num_pages;\r\n-\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses.php', $args );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_become_teacher_messages' ) ) {\r\n-\u002F\u002F\tfunction learn_press_become_teacher_messages() {\r\n-\u002F\u002F\t\t$messages = LP_Shortcode_Become_A_Teacher::get_messages();\r\n-\u002F\u002F\t\tif ( ! $messages ) {\r\n-\u002F\u002F\t\t\treturn;\r\n-\u002F\u002F\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form\u002Fmessage.php', array( 'messages' => $messages ) );\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_become_teacher_heading' ) ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\tfunction learn_press_become_teacher_heading() {\r\n-\u002F\u002F\t\treturn '';\r\n-\u002F\u002F\t}\r\n-\u002F\u002F}\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_become_teacher_button' ) ) {\r\n-\r\n-\tfunction learn_press_become_teacher_button() {\r\n-\t\t$messages = LP_Shortcode_Become_A_Teacher::get_messages();\r\n-\t\tif ( $messages ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form\u002Fbutton.php' );\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*if ( ! function_exists( 'learn_press_back_to_class_button' ) ) {\r\n-\tfunction learn_press_back_to_class_button() {\r\n-\t\treturn '';\r\n-\t}\r\n-}*\u002F\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+if ( ! function_exists( 'learn_press_course_content_lesson' ) ) {\n+\t\u002F**\n+\t * Display course description\n+\t *\u002F\n+\tfunction learn_press_course_content_lesson() {\n+\t\tlearn_press_get_template( 'content-lesson\u002Fsummary.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_lesson_description' ) ) {\n+\t\u002F**\n+\t * Display course lesson description\n+\t *\u002F\n+\tfunction learn_press_course_lesson_description() {\n+\t\tlearn_press_get_template( 'content-lesson\u002Fdescription.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_quiz_description' ) ) {\n+\t\u002F**\n+\t * Display lesson content\n+\t *\u002F\n+\tfunction learn_press_course_quiz_description() {\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-quiz.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_course_lesson_complete_button' ) ) {\n+\t\u002F**\n+\t * Display lesson complete button\n+\t *\u002F\n+\tfunction learn_press_course_lesson_complete_button() {\n+\t\tlearn_press_get_template( 'content-lesson\u002Fcomplete-button.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_course_lesson_navigation' ) ) {\n+\t\u002F**\n+\t * Display lesson navigation\n+\t *\u002F\n+\tfunction learn_press_course_lesson_navigation() {\n+\t\tlearn_press_get_template( 'content-lesson\u002Fnavigation.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_preview_mode' ) ) {\n+\t\u002F**\n+\t * Output the title of the quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_preview_mode() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fpreview-mode.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_left_start_wrap' ) ) {\n+\tfunction learn_press_single_quiz_left_start_wrap() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fleft-start-wrap.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_question' ) ) {\n+\t\u002F**\n+\t * Output the single question for quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_question() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fcontent-question.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_result' ) ) {\n+\t\u002F**\n+\t * Output the result for the quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_result() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fresult.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_questions_nav' ) ) {\n+\t\u002F**\n+\t * Output the navigation to next and previous questions\n+\t *\u002F\n+\tfunction learn_press_single_quiz_questions_nav() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fnav.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_questions' ) ) {\n+\t\u002F**\n+\t * Output the list of questions for quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_questions() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fquestions.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_history' ) ) {\n+\t\u002F**\n+\t * Output the history of a quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_history() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fhistory.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_left_end_wrap' ) ) {\n+\tfunction learn_press_single_quiz_left_end_wrap() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fleft-end-wrap.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_sidebar' ) ) {\n+\t\u002F**\n+\t * Output the sidebar for a quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_sidebar() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fsidebar.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_information' ) ) {\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tfunction learn_press_single_quiz_information() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_timer' ) ) {\n+\t\u002F**\n+\t * Output the quiz countdown timer\n+\t *\u002F\n+\tfunction learn_press_single_quiz_timer() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Ftimer.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_buttons' ) ) {\n+\t\u002F**\n+\t * Output the buttons for quiz actions\n+\t *\u002F\n+\tfunction learn_press_single_quiz_buttons() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_single_quiz_description' ) ) {\n+\t\u002F**\n+\t * Output the content of the quiz\n+\t *\u002F\n+\tfunction learn_press_single_quiz_description() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fdescription.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_information' ) ) {\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tfunction learn_press_single_quiz_information() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_single_quiz_sidebar_buttons' ) ) {\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tfunction learn_press_single_quiz_sidebar_buttons() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Fsidebar-buttons.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( '_learn_press_default_course_tabs' ) ) {\n+\u002F\u002F\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Add default tabs to course\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param array $tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @return array\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction _learn_press_default_course_tabs( $tabs = array() ) {\n+\u002F\u002F\t\t_deprecated_function( __FUNCTION__, '3.0.0', 'learn_press_get_course_tabs' );\n+\u002F\u002F\n+\u002F\u002F\t\treturn learn_press_get_course_tabs();\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002F Show filters for students list\n+\u002F\u002F Wait addon student list v4.0.3 update will remove it\n+\u002F\u002F @deprecated 4.2.7.4\n+\u002F*function learn_press_get_students_list_filter() {\n+\t$filter = array(\n+\t\t'all'         => esc_html__( 'All', 'learnpress' ),\n+\t\t'in-progress' => esc_html__( 'In Progress', 'learnpress' ),\n+\t\t'finished'    => esc_html__( 'Finished', 'learnpress' ),\n+\t);\n+\n+\treturn apply_filters( 'learn_press_get_students_list_filter', $filter );\n+}*\u002F\n+\n+\n+function learn_press_output_question_nonce( $question ) {\n+\tprintf( '\u003Cinput type=\"hidden\" name=\"update-question-nonce\" value=\"%s\" \u002F>', wp_create_nonce( 'current-question-nonce-' . $question->id ) );\n+}\n+\n+add_action( 'learn_press_after_question_wrap', 'learn_press_output_question_nonce' );\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_nav_items' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Displaying course items navigation\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param null $item_id\n+\u002F\u002F\t * @param null $course_id\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_nav_items( $item_id = null, $course_id = null ) {\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'single-course\u002Fnav-items.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'course_id'    => $course_id,\n+\u002F\u002F\t\t\t\t'item_id'      => $item_id,\n+\u002F\u002F\t\t\t\t'content_only' => learn_press_is_content_item_only(),\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F**\n+ * Version 3.3.0\n+ *\u002F\n+\n+\u002F**\n+ * New functions since 3.0.0\n+ *\u002F\n+if ( ! function_exists( 'learn_press_course_purchase_button' ) ) {\n+\t\u002F**\n+\t * Purchase course button.\n+\t *\u002F\n+\tfunction learn_press_course_purchase_button() {\n+\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_enroll_button' ) ) {\n+\t\u002F**\n+\t * Enroll course button.\n+\t *\u002F\n+\tfunction learn_press_course_enroll_button() {\n+\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_external_button' ) ) {\n+\n+\t\u002F**\n+\t * Retake course button\n+\t * @deprecated 4.2.5.3\n+\t *\u002F\n+\tfunction learn_press_course_external_button() {\n+\t\t_deprecated_function( __FUNCTION__, '4.2.5.3' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_students' ) ) {\n+\t\u002F**\n+\t * Display course students\n+\t *\u002F\n+\tfunction learn_press_course_students() {\n+\t\tlearn_press_get_template( 'single-course\u002Fstudents.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_status' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display the title for single course\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_status() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fstatus.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_courses_loop_item_instructor' ) ) {\n+\t\u002F**\n+\t * Output the instructor of the course within loop\n+\t * @using in many themes.\n+\t *\u002F\n+\tfunction learn_press_courses_loop_item_instructor() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finstructor.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_tabs' ) ) {\n+\t\u002F*\n+\t * Output course tabs\n+\t * @using in theme starkid\n+\t *\u002F\n+\tfunction learn_press_course_tabs() {\n+\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Ftabs.php' );\n+\t}\n+}\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_quiz_title' ) ) {\n+\tfunction learn_press_content_item_quiz_title() {\n+\t\tlearn_press_get_template( 'content-quiz\u002Ftitle.php' );\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_quiz_intro' ) ) {\n+\tfunction learn_press_content_item_quiz_intro() {\n+\t\t$course = learn_press_get_course();\n+\t\t$user   = learn_press_get_current_user();\n+\t\t$quiz   = LP_Global::course_item_quiz();\n+\n+\t\tif ( $user->has_quiz_status( array( 'started', 'completed' ), $quiz->get_id(), $course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! $user->has_quiz_status( 'started', $quiz->get_id(), $course->get_id() ) ) {\n+\t\t\t\u002F\u002F return;\n+\t\t}\n+\n+\t\tif ( $quiz->get_viewing_question() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'content-quiz\u002Fintro.php' );\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_content' ) ) {\n+\n+\tfunction learn_press_content_item_summary_quiz_content() {\n+\t\t$item = LP_Global::course_item();\n+\n+\t\tif ( ! $item->get_viewing_question() ) {\n+\t\t\tlearn_press_get_template( 'content-quiz\u002Fdescription.php' );\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_question_title' ) ) {\n+\n+\tfunction learn_press_content_item_summary_question_title() {\n+\t\t$quiz = LP_Global::course_item_quiz();\n+\n+\t\tif ( $question = $quiz->get_viewing_question() ) {\n+\t\t\tlearn_press_get_template( 'content-question\u002Ftitle.php' );\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_progress' ) ) {\n+\n+\tfunction learn_press_content_item_summary_quiz_progress() {\n+\t\t$course = learn_press_get_course();\n+\t\t$quiz   = LP_Global::course_item_quiz();\n+\t\t$user   = learn_press_get_current_user();\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $user->has_quiz_status( array( 'viewed', '' ), $quiz->get_id(), $course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $question = $quiz->get_viewing_question() ) {\n+\t\t\tlearn_press_get_template( 'content-quiz\u002Fprogress.php' );\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_countdown' ) ) {\n+\n+\tfunction learn_press_content_item_summary_quiz_countdown() {\n+\t\t$quiz = LP_Global::course_item_quiz();\n+\n+\t\tif ( $question = $quiz->get_viewing_question() ) {\n+\t\t\tlearn_press_get_template( 'content-quiz\u002Fcountdown.php' );\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_question_content' ) ) {\n+\n+\tfunction learn_press_content_item_summary_question_content() {\n+\t\t$quiz = LP_Global::course_item_quiz();\n+\n+\t\tif ( $question = $quiz->get_viewing_question() ) {\n+\t\t\tlearn_press_get_template( 'content-question\u002Fdescription.php' );\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_content_item_summary_quiz_buttons' ) ) {\n+\n+\tfunction learn_press_content_item_summary_quiz_buttons() {\n+\t\t_deprecated_function( __FUNCTION__, '3.3.0' );\n+\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons.php' );\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_profile_recover_order_form' ) ) {\n+\tfunction learn_press_profile_recover_order_form( $order ) {\n+\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Frecover-order.php', array( 'order' => $order ) );\n+\t}\n+}*\u002F\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_wrapper_start' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Wrapper Start\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_wrapper_start() {\n+\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fbefore-main-content.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_wrapper_end' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * wrapper end\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_wrapper_end() {\n+\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fafter-main-content.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_thumbnail' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the thumbnail of the course within loop\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_thumbnail() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fthumbnail.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_title' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the title of the course within loop\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_title() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Ftitle.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_begin_meta' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the excerpt of the course within loop\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_begin_meta() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta-begin.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_end_meta' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the excerpt of the course within loop\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_end_meta() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta-end.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_introduce' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the excerpt of the course within loop\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_introduce() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fintroduce.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_courses_loop_item_price' ) ) {\n+\t\u002F**\n+\t * Output the price of the course within loop\n+\t * @using in many themes.\n+\t *\u002F\n+\tfunction learn_press_courses_loop_item_price() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fprice.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_begin_courses_loop' ) ) {\n+\t\u002F**\n+\t * Output the price of the course within loop\n+\t * @using in many themes.\n+\t *\u002F\n+\tfunction learn_press_begin_courses_loop() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-begin.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_end_courses_loop' ) ) {\n+\t\u002F**\n+\t * Output the price of the course within loop\n+\t * @using in many themes.\n+\t *\u002F\n+\tfunction learn_press_end_courses_loop() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-end.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_loop_item_students' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the students of the course within loop\n+\u002F\u002F\t * @deprecated 4.0.0\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_loop_item_students() {\n+\u002F\u002F\t\t_deprecated_function( __FUNCTION__, '4.0.0' );\n+\u002F\u002F\t\techo '\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>';\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fstudents.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_courses_pagination' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the pagination of archive courses\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_courses_pagination() {\n+\u002F\u002F\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fpagination.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_output_single_course_learning_summary' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the content of learning course content\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_output_single_course_learning_summary() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-learning.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_output_single_course_landing_summary' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the content of landing course content\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_output_single_course_landing_summary() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-landing.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_title' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display the title for single course\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_title() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftitle.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_course_progress' ) ) {\n+\t\u002F**\n+\t * Display course curriculum\n+\t * @using ivy-school\n+\t *\u002F\n+\tfunction learn_press_course_progress() {\n+\t\tlearn_press_get_template( 'single-course\u002Fprogress.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_curriculum' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display course curriculum\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_curriculum() {\n+\u002F\u002F\t\t\u002F\u002F learn_press_get_template( 'single-course\u002Fcurriculum.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_course_categories' ) ) {\n+\t\u002F**\n+\t * Display course categories\n+\t * @using eduma child theme v5.5.5\n+\t *\u002F\n+\tfunction learn_press_course_categories() {\n+\t\t\u002F\u002F learn_press_get_template( 'single-course\u002Fcategories.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_tags' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display course tags\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_tags() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftags.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_course_instructor' ) ) {\n+\t\u002F**\n+\t * Display course instructor\n+\t * @using in many themes.\n+\t *\u002F\n+\tfunction learn_press_course_instructor() {\n+\t\tlearn_press_get_template( 'single-course\u002Finstructor.php' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_thumbnail' ) ) {\n+\t\u002F**\n+\t * Display Course Thumbnail\n+\t * @using in Eduma, Education Pack themes.\n+\t *\u002F\n+\tfunction learn_press_course_thumbnail() {\n+\t\tlearn_press_get_template( 'single-course\u002Fthumbnail.php' );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_single_course_description' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display course description\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_single_course_description() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fdescription.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_single_course_content_item' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display lesson content\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_single_course_content_item() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_form_login' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output login form before order review if user is not logged in\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_checkout_user_form_login() {\n+\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-login.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_form_register' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output register form before order review if user is not logged in\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_checkout_user_form_register() {\n+\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-register.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_checkout_user_logged_in' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output message before order review if user is logged in\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_checkout_user_logged_in() {\n+\u002F\u002F\t\tlearn_press_get_template( 'checkout\u002Fform-logged-in.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_after_profile_tab_loop_course' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_after_profile_tab_loop_course( $user, $course_id ) {\n+\u002F\u002F\n+\u002F\u002F\t\t$args = array(\n+\u002F\u002F\t\t\t'user'      => $user,\n+\u002F\u002F\t\t\t'course_id' => $course_id,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fprogress.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_output_user_profile_info' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Displaying user info\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param $user\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_output_user_profile_info( $user, $current, $tabs ) {\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'profile\u002Finfo.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'user'    => $user,\n+\u002F\u002F\t\t\t\t'tabs'    => $tabs,\n+\u002F\u002F\t\t\t\t'current' => $current,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F* QUIZ TEMPLATES *\u002F\n+\u002F\u002Fif ( ! function_exists( 'learn_press_single_quiz_title' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the title of the quiz\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_single_quiz_title() {\n+\u002F\u002F\t\tlearn_press_get_template( 'content-quiz\u002Ftitle.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_message' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Template to display the messages\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param        $content\n+\u002F\u002F\t * @param string  $type\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_message( $content, $type = 'message' ) {\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'global\u002Fmessage.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'type'    => $type,\n+\u002F\u002F\t\t\t\t'content' => $content,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_overview_tab' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output course overview\n+\u002F\u002F\t *\n+\u002F\u002F\t * @since 1.1\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_overview_tab() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Foverview.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_curriculum_tab' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output course curriculum\n+\u002F\u002F\t *\n+\u002F\u002F\t * @since 1.1\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_curriculum_tab() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Fcurriculum.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_instructor_tab' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output course curriculum\n+\u002F\u002F\t *\n+\u002F\u002F\t * @since 1.1\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_course_instructor_tab() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Finstructor.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_header' ) ) {\n+\u002F\u002F\tfunction learn_press_content_item_header() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fheader.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_footer' ) ) {\n+\u002F\u002F\tfunction learn_press_content_item_footer() {\n+\u002F\u002F\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Ffooter.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_mobile_menu' ) ) {\n+\u002F\u002F\tfunction learn_press_profile_mobile_menu() {\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Fmobile-menu.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_quiz_complete_button' ) ) {\n+\u002F\u002F\n+\u002F\u002F\tfunction learn_press_quiz_complete_button() {\n+\u002F\u002F\t\t$course = learn_press_get_course();\n+\u002F\u002F\t\t$user   = learn_press_get_current_user();\n+\u002F\u002F\t\t$quiz   = LP_Global::course_item_quiz();\n+\u002F\u002F\n+\u002F\u002F\t\tif ( $user->has_course_status( $course->get_id(), array( 'finished' ) ) || ! $user->has_quiz_status( 'started', $quiz->get_id(), $course->get_id() ) ) {\n+\u002F\u002F\t\t\treturn;\n+\u002F\u002F\t\t}\n+\u002F\u002F\t\tlearn_press_get_template( 'content-quiz\u002Fbuttons\u002Fcomplete.php' );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_content_item_summary_question_explanation' ) ) {\n+\u002F\u002F\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Render content if quiz question.\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_content_item_summary_question_explanation() {\n+\u002F\u002F\t\t$quiz     = LP_Global::course_item_quiz();\n+\u002F\u002F\t\t$question = $quiz->get_viewing_question();\n+\u002F\u002F\t\tif ( $question ) {\n+\u002F\u002F\t\t\t$course      = learn_press_get_course();\n+\u002F\u002F\t\t\t$user        = learn_press_get_current_user();\n+\u002F\u002F\t\t\t$course_data = $user->get_course_data( $course->get_id() );\n+\u002F\u002F\t\t\t$user_quiz   = $course_data->get_item_quiz( $quiz->get_id() );\n+\u002F\u002F\n+\u002F\u002F\t\t\tif ( ! $question->get_explanation() ) {\n+\u002F\u002F\t\t\t\treturn;\n+\u002F\u002F\t\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\t\tif ( $user_quiz->has_checked_question( $question->get_id() ) || $user_quiz->is_answered_true( $question->get_id() ) ) {\n+\u002F\u002F\t\t\t\tlearn_press_get_template( 'content-question\u002Fexplanation.php', array( 'question' => $question ) );\n+\u002F\u002F\t\t\t}\n+\u002F\u002F\t\t}\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_breadcrumb' ) ) {\n+\t\u002F**\n+\t * Output the breadcrumb of archive courses\n+\t * Still using\n+\t *\n+\t * @param array $args\n+\t * @deprecated still using addons collection, upsell, themes\n+\t *\u002F\n+\tfunction learn_press_breadcrumb( $args = array() ) {\n+\t\techo Template::html_breadcrumb( $args );\n+\t\treturn;\n+\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tapply_filters(\n+\t\t\t\t'learn_press_breadcrumb_defaults',\n+\t\t\t\tarray(\n+\t\t\t\t\t'delimiter'   => '\u003Cli class=\"breadcrumb-delimiter\">\u003Ci class=\"lp-icon-angle-right\">\u003C\u002Fi>\u003C\u002Fli>',\n+\t\t\t\t\t'wrap_before' => '\u003Cul class=\"learn-press-breadcrumb\">',\n+\t\t\t\t\t'wrap_after'  => '\u003C\u002Ful>',\n+\t\t\t\t\t'before'      => '',\n+\t\t\t\t\t'after'       => '',\n+\t\t\t\t\t'home'        => _x( 'Home', 'breadcrumb', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\n+\t\t$breadcrumbs = new LP_Breadcrumb();\n+\n+\t\tif ( $args['home'] ) {\n+\t\t\t$breadcrumbs->add_crumb( $args['home'], apply_filters( 'learn_press_breadcrumb_home_url', home_url() ) );\n+\t\t}\n+\n+\t\t$args['breadcrumb'] = $breadcrumbs->generate();\n+\n+\t\tlearn_press_get_template( 'global\u002Fbreadcrumb.php', $args );\n+\t}\n+}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_search_form' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Output the breadcrumb of archive courses\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param array\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_search_form() {\n+\u002F\u002F\t\tif ( ! empty( $_REQUEST['s'] ) && ! empty( $_REQUEST['ref'] ) && 'course' == $_REQUEST['ref'] ) {\n+\u002F\u002F\t\t\t$s = stripslashes_deep( $_REQUEST['s'] );\n+\u002F\u002F\t\t} else {\n+\u002F\u002F\t\t\t$s = '';\n+\u002F\u002F\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\tlearn_press_get_template( 'search-form.php', array( 's' => $s ) );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_section_item_meta' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * @param object\n+\u002F\u002F\t * @param array\n+\u002F\u002F\t * @param LP_Course\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_section_item_meta( $item, $section ) {\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'single-course\u002Fsection\u002Fitem-meta.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'item'    => $item,\n+\u002F\u002F\t\t\t\t'section' => $section,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_order_details_table' ) ) {\n+\u002F\u002F\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Displays order details in a table.\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param mixed $order_id\n+\u002F\u002F\t *\n+\u002F\u002F\t * @subpackage    Orders\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_order_details_table( $order_id ) {\n+\u002F\u002F\t\tif ( ! $order_id ) {\n+\u002F\u002F\t\t\treturn;\n+\u002F\u002F\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'order\u002Forder-details.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'order' => learn_press_get_order( $order_id ),\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_own' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_profile_tab_courses_own( $user, $tab = null ) {\n+\u002F\u002F\t\t$args              = array(\n+\u002F\u002F\t\t\t'user'   => $user,\n+\u002F\u002F\t\t\t'subtab' => $tab,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\n+\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_own_limit', $limit );\n+\u002F\u002F\t\t$courses           = $user->get( 'own-courses', array( 'limit' => $limit ) );\n+\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\n+\u002F\u002F\t\t$args['courses']   = $courses;\n+\u002F\u002F\t\t$args['num_pages'] = $num_pages;\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fown.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_learning' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_profile_tab_courses_learning( $user, $tab = null ) {\n+\u002F\u002F\t\t$args              = array(\n+\u002F\u002F\t\t\t'user'   => $user,\n+\u002F\u002F\t\t\t'subtab' => $tab,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\n+\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_learning_limit', $limit );\n+\u002F\u002F\t\t$courses           = $user->get(\n+\u002F\u002F\t\t\t'enrolled-courses',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'status' => 'enrolled',\n+\u002F\u002F\t\t\t\t'limit'  => $limit,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\n+\u002F\u002F\t\t$args['courses']   = $courses;\n+\u002F\u002F\t\t$args['num_pages'] = $num_pages;\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Flearning.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_purchased' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_profile_tab_courses_purchased( $user, $tab = null ) {\n+\u002F\u002F\t\t$args              = array(\n+\u002F\u002F\t\t\t'user'   => $user,\n+\u002F\u002F\t\t\t'subtab' => $tab,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\n+\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_purchased_limit', $limit );\n+\u002F\u002F\t\t$courses           = $user->get( 'purchased-courses', array( 'limit' => $limit ) );\n+\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\n+\u002F\u002F\t\t$args['courses']   = $courses;\n+\u002F\u002F\t\t$args['num_pages'] = $num_pages;\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Fpurchased.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_finished' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_profile_tab_courses_finished( $user, $tab = null ) {\n+\u002F\u002F\t\t$args              = array(\n+\u002F\u002F\t\t\t'user'   => $user,\n+\u002F\u002F\t\t\t'subtab' => $tab,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\n+\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_finished_limit', $limit );\n+\u002F\u002F\t\t$courses           = $user->get(\n+\u002F\u002F\t\t\t'enrolled-courses',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'status' => 'finished',\n+\u002F\u002F\t\t\t\t'limit'  => $limit,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\n+\u002F\u002F\t\t$args['courses']   = $courses;\n+\u002F\u002F\t\t$args['num_pages'] = $num_pages;\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses\u002Ffinished.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_output_user_profile_tabs' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_output_user_profile_tabs( $user, $current, $tabs ) {\n+\u002F\u002F\t\tlearn_press_get_template(\n+\u002F\u002F\t\t\t'profile\u002Ftabs.php',\n+\u002F\u002F\t\t\tarray(\n+\u002F\u002F\t\t\t\t'user'    => $user,\n+\u002F\u002F\t\t\t\t'tabs'    => $tabs,\n+\u002F\u002F\t\t\t\t'current' => $current,\n+\u002F\u002F\t\t\t)\n+\u002F\u002F\t\t);\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_profile_tab_courses_all' ) ) {\n+\u002F\u002F\t\u002F**\n+\u002F\u002F\t * Display user profile tabs\n+\u002F\u002F\t *\n+\u002F\u002F\t * @param LP_User\n+\u002F\u002F\t *\u002F\n+\u002F\u002F\tfunction learn_press_profile_tab_courses_all( $user, $tab = null ) {\n+\u002F\u002F\t\t$args              = array(\n+\u002F\u002F\t\t\t'user'   => $user,\n+\u002F\u002F\t\t\t'subtab' => $tab,\n+\u002F\u002F\t\t);\n+\u002F\u002F\t\t$limit             = LP_Settings::instance()->get( 'profile_courses_limit', 10 );\n+\u002F\u002F\t\t$limit             = apply_filters( 'learn_press_profile_tab_courses_all_limit', $limit );\n+\u002F\u002F\t\t$courses           = $user->get( 'courses', array( 'limit' => $limit ) );\n+\u002F\u002F\t\t$num_pages         = learn_press_get_num_pages( $user->_get_found_rows(), $limit );\n+\u002F\u002F\t\t$args['courses']   = $courses;\n+\u002F\u002F\t\t$args['num_pages'] = $num_pages;\n+\u002F\u002F\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fcourses.php', $args );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_become_teacher_messages' ) ) {\n+\u002F\u002F\tfunction learn_press_become_teacher_messages() {\n+\u002F\u002F\t\t$messages = LP_Shortcode_Become_A_Teacher::get_messages();\n+\u002F\u002F\t\tif ( ! $messages ) {\n+\u002F\u002F\t\t\treturn;\n+\u002F\u002F\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form\u002Fmessage.php', array( 'messages' => $messages ) );\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F\u002Fif ( ! function_exists( 'learn_press_become_teacher_heading' ) ) {\n+\u002F\u002F\n+\u002F\u002F\tfunction learn_press_become_teacher_heading() {\n+\u002F\u002F\t\treturn '';\n+\u002F\u002F\t}\n+\u002F\u002F}\n+\n+\u002F*if ( ! function_exists( 'learn_press_become_teacher_button' ) ) {\n+\n+\tfunction learn_press_become_teacher_button() {\n+\t\t$messages = LP_Shortcode_Become_A_Teacher::get_messages();\n+\t\tif ( $messages ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form\u002Fbutton.php' );\n+\t}\n+}*\u002F\n+\n+\u002F*if ( ! function_exists( 'learn_press_back_to_class_button' ) ) {\n+\tfunction learn_press_back_to_class_button() {\n+\t\treturn '';\n+\t}\n+}*\u002F\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-template-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-template-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-template-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-template-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1679 +1,1679 @@\n-\u003C?php\r\n-\u002F**\r\n- * All functions for LearnPress template\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FFunctions\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_add_course_buttons' ) ) {\r\n-\tfunction learn_press_add_course_buttons() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.3.2.4' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_remove_course_buttons' ) ) {\r\n-\tfunction learn_press_remove_course_buttons() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.3.2.4' );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_get_course_tabs' ) ) {\r\n-\t\u002F**\r\n-\t * Return an array of tabs display in single course page.\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tfunction learn_press_get_course_tabs() {\r\n-\t\t$courseModel = CourseModel::find( get_the_ID(), true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn [];\r\n-\t\t}\r\n-\r\n-\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t$defaults               = [];\r\n-\t\t$defaults['overview']   = [\r\n-\t\t\t'title'    => esc_html__( 'Overview', 'learnpress' ),\r\n-\t\t\t'priority' => 10,\r\n-\t\t\t'callback' => LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Foverview.php' ),\r\n-\t\t];\r\n-\t\t$defaults['curriculum'] = [\r\n-\t\t\t'title'    => esc_html__( 'Curriculum', 'learnpress' ),\r\n-\t\t\t'priority' => 30,\r\n-\t\t\t'callback' => function () use ( $courseModel, $userModel ) {\r\n-\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\r\n-\t\t\t},\r\n-\t\t];\r\n-\t\t$defaults['instructor'] = [\r\n-\t\t\t'title'    => esc_html__( 'Instructor', 'learnpress' ),\r\n-\t\t\t'priority' => 40,\r\n-\t\t\t'callback' => LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Finstructor.php' ),\r\n-\t\t];\r\n-\r\n-\t\t$faq = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FAQS, [] );\r\n-\t\tif ( ! empty( $faq ) ) {\r\n-\t\t\t$defaults['faqs'] = [\r\n-\t\t\t\t'title'    => esc_html__( 'FAQs', 'learnpress' ),\r\n-\t\t\t\t'priority' => 50,\r\n-\t\t\t\t'callback' => function () use ( $courseModel ) {\r\n-\t\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t\t\techo $singleCourseTemplate->html_faqs( $courseModel, [ 'show_heading' => false ] );\r\n-\t\t\t\t},\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t$html_material        = $singleCourseTemplate->html_material( $courseModel, $userModel, [ 'show_heading' => false ] );\r\n-\t\tif ( ! empty( $html_material ) ) {\r\n-\t\t\t$defaults['materials'] = [\r\n-\t\t\t\t'title'    => esc_html__( 'Materials', 'learnpress' ),\r\n-\t\t\t\t'priority' => 45,\r\n-\t\t\t\t'callback' => function () use ( $html_material ) {\r\n-\t\t\t\t\techo $html_material;\r\n-\t\t\t\t},\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F @since 4.2.8.7.1 update new parameter $courseModel\r\n-\t\t$tabs = apply_filters( 'learn-press\u002Fcourse-tabs', $defaults, $courseModel );\r\n-\r\n-\t\tif ( ! empty( $tabs ) ) {\r\n-\t\t\t$has_tab_active = false;\r\n-\r\n-\t\t\t\u002F\u002F sort tabs by priority, from low to high\r\n-\t\t\tuasort(\r\n-\t\t\t\t$tabs,\r\n-\t\t\t\tfunction ( $a, $b ) {\r\n-\t\t\t\t\t$priority1 = $a['priority'] ?? 1;\r\n-\t\t\t\t\t$priority2 = $b['priority'] ?? 2;\r\n-\r\n-\t\t\t\t\treturn ( $priority1 \u003C $priority2 ) ? - 1 : 1;\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $tabs as $k => $v ) {\r\n-\t\t\t\t$v['id'] = $v['id'] ?? 'tab-' . $k;\r\n-\t\t\t\tif ( ! empty( $v['active'] ) ) {\r\n-\t\t\t\t\t$has_tab_active = true;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$tabs[ $k ] = $v;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if there is no tab active, set first tab active\r\n-\t\t\tif ( ! $has_tab_active ) {\r\n-\t\t\t\t\u002F\u002F set first tab active\r\n-\t\t\t\t$first_key = array_key_first( $tabs );\r\n-\t\t\t\tif ( $first_key ) {\r\n-\t\t\t\t\t$tabs[ $first_key ]['active'] = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $tabs;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_content_item_summary_question' ) ) {\r\n-\tfunction learn_press_content_item_summary_question() {\r\n-\t\t$quiz     = LP_Global::course_item_quiz();\r\n-\t\t$question = $quiz->get_viewing_question();\r\n-\r\n-\t\tif ( $question ) {\r\n-\t\t\t$course      = learn_press_get_course();\r\n-\t\t\t$user        = learn_press_get_current_user();\r\n-\t\t\t$answered    = false;\r\n-\t\t\t$course_data = $user->get_course_data( $course->get_id() );\r\n-\t\t\t$user_quiz   = $course_data->get_item_quiz( $quiz->get_id() );\r\n-\r\n-\t\t\tif ( $user_quiz ) {\r\n-\t\t\t\t$answered = $user_quiz->get_question_answer( $question->get_id() );\r\n-\t\t\t\t$question->show_correct_answers(\r\n-\t\t\t\t\t$user->has_checked_answer(\r\n-\t\t\t\t\t\t$question->get_id(),\r\n-\t\t\t\t\t\t$quiz->get_id(),\r\n-\t\t\t\t\t\t$course->get_id()\r\n-\t\t\t\t\t) ? 'yes' : false\r\n-\t\t\t\t);\r\n-\t\t\t\t$question->disable_answers( $user_quiz->get_status() == 'completed' ? 'yes' : false );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question->render( $answered );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_content_item_body_class' ) ) {\r\n-\t\u002F\u002F Add more assets into page that displaying content of an item\r\n-\tadd_filter( 'body_class', 'learn_press_content_item_body_class', 10 );\r\n-\r\n-\tfunction learn_press_content_item_body_class( $classes ) {\r\n-\t\tglobal $lp_course_item;\r\n-\r\n-\t\tif ( wp_is_mobile() ) {\r\n-\t\t\t$sidebar_toggle_class = 'lp-sidebar-toggle__close';\r\n-\t\t} else {\r\n-\t\t\t$sidebar_toggle_class = learn_press_cookie_get( 'sidebar-toggle' ) ? 'lp-sidebar-toggle__close' : 'lp-sidebar-toggle__open';\r\n-\t\t}\r\n-\r\n-\t\tif ( $lp_course_item ) {\r\n-\t\t\t$classes[] = 'course-item-popup';\r\n-\t\t\t$classes[] = 'viewing-course-item';\r\n-\t\t\t$classes[] = 'viewing-course-item-' . $lp_course_item->get_id();\r\n-\t\t\t$classes[] = 'course-item-' . $lp_course_item->get_item_type();\r\n-\t\t\t$classes[] = $sidebar_toggle_class;\r\n-\t\t}\r\n-\r\n-\t\treturn $classes;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_content_item_edit_links' ) ) {\r\n-\t\u002F**\r\n-\t * Add edit links for course item question to admin bar.\r\n-\t *\u002F\r\n-\tfunction learn_press_content_item_edit_links() {\r\n-\t\tglobal $wp_admin_bar, $post, $lp_course_item, $lp_quiz_question;\r\n-\r\n-\t\tif ( ! ( ! is_admin() && is_user_logged_in() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Edit link for lesson\u002Fquiz or any other course's item.\r\n-\t\t *\u002F\r\n-\t\tif ( $lp_course_item ) {\r\n-\t\t\t$post_type_object = get_post_type_object( $lp_course_item->get_item_type() );\r\n-\r\n-\t\t\tif ( $post_type_object && current_user_can(\r\n-\t\t\t\t\t'edit_post',\r\n-\t\t\t\t\t$lp_course_item->get_id()\r\n-\t\t\t\t) && $post_type_object->show_in_admin_bar && get_edit_post_link( $lp_course_item->get_id() ) ) {\r\n-\t\t\t\t$type = get_post_type( $lp_course_item->get_id() );\r\n-\r\n-\t\t\t\tif ( apply_filters( 'learn-press\u002Fedit-admin-bar-button', true, $lp_course_item ) ) {\r\n-\t\t\t\t\t$wp_admin_bar->add_menu(\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'id'    => 'edit-' . $type,\r\n-\t\t\t\t\t\t\t'title' => $post_type_object->labels->edit_item,\r\n-\t\t\t\t\t\t\t'href'  => get_edit_post_link( $lp_course_item->get_id() ),\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Edit link for quiz's question.\r\n-\t\t *\u002F\r\n-\t\tif ( $lp_quiz_question ) {\r\n-\t\t\t$post_type_object = get_post_type_object( $lp_quiz_question->get_item_type() );\r\n-\t\t\t$edit_post_link   = get_edit_post_link( $lp_quiz_question->get_id() );\r\n-\r\n-\t\t\tif ( $post_type_object && current_user_can(\r\n-\t\t\t\t\t'edit_post',\r\n-\t\t\t\t\t$lp_quiz_question->get_id()\r\n-\t\t\t\t) && $post_type_object->show_in_admin_bar && $edit_post_link ) {\r\n-\t\t\t\t$type = get_post_type( $lp_quiz_question->get_id() );\r\n-\t\t\t\t$wp_admin_bar->add_menu(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'id'    => 'edit-' . $type,\r\n-\t\t\t\t\t\t'title' => $post_type_object->labels->edit_item,\r\n-\t\t\t\t\t\t'href'  => $edit_post_link,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n-add_filter( 'admin_bar_menu', 'learn_press_content_item_edit_links', 90 );\r\n-\r\n-if ( ! function_exists( 'learn_press_single_quiz_args' ) ) {\r\n-\tfunction learn_press_single_quiz_args() {\r\n-\t\t$args = array();\r\n-\r\n-\t\tif ( LP_PAGE_QUIZ !== LP_Page_Controller::page_current() ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$quiz   = LP_Global::course_item_quiz();\r\n-\t\t$course = learn_press_get_course();\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\tif ( $quiz && $course ) {\r\n-\t\t\t$course_id = $course->get_id();\r\n-\t\t\t\u002F\u002F$user_quiz = $user->get_item_data( $quiz->get_id(), $course_id );\r\n-\r\n-\t\t\t\u002F*if ( $user_quiz ) {\r\n-\t\t\t\t$remaining_time = $user_quiz->get_time_remaining();\r\n-\t\t\t} else {\r\n-\t\t\t\t$remaining_time = false;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$args = array(\r\n-\t\t\t\t'id'                  => $quiz->get_id(),\r\n-\t\t\t\t\u002F\u002F'totalTime'           => -1,\r\n-\t\t\t\t\u002F\u002F'remainingTime'       => $remaining_time ? $remaining_time->get() : $quiz->get_duration()->get(),\r\n-\t\t\t\t'status'              => $user->get_item_status( $quiz->get_id(), $course_id ),\r\n-\t\t\t\t'checkNorequizenroll' => $course->is_no_required_enroll(),\r\n-\t\t\t\t'navigationPosition'  => LP_Settings::get_option( 'navigation_position', 'yes' ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Flocalize_script\u002Fquiz', $args, $user, $course, $quiz );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_single_document_title_parts' ) ) {\r\n-\t\u002F**\r\n-\t * Custom document title depending on LP current page.\r\n-\t * E.g: Single course, profile, etc...\r\n-\t *\r\n-\t * @param array $title\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.0.0\r\n-\t * @version 3.0.1\r\n-\t *\u002F\r\n-\tfunction learn_press_single_document_title_parts( $title ) {\r\n-\t\tif ( learn_press_is_course() ) {\r\n-\t\t\t$item = LP_Global::course_item();\r\n-\r\n-\t\t\tif ( $item ) {\r\n-\t\t\t\t$title['title'] = join(\r\n-\t\t\t\t\t' ',\r\n-\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Fdocument-course-title-parts',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t$title['title'],\r\n-\t\t\t\t\t\t\t' &rarr; ',\r\n-\t\t\t\t\t\t\t$item->get_title(),\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t} elseif ( learn_press_is_courses() ) {\r\n-\t\t\tif ( learn_press_is_search() ) {\r\n-\t\t\t\t$title['title'] = esc_html__( 'Course Search Results', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$title['title'] = esc_html__( 'Courses', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\t$profile  = LP_Profile::instance();\r\n-\t\t\t$tab_slug = $profile->get_current_tab();\r\n-\t\t\t$tab      = $profile->get_tab_at( $tab_slug );\r\n-\t\t\t$page_id  = learn_press_get_page_id( 'profile' );\r\n-\r\n-\t\t\tif ( $page_id ) {\r\n-\t\t\t\t$page_title = get_the_title( $page_id );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page_title = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\r\n-\t\t\t\t$title['title'] = join(\r\n-\t\t\t\t\t' ',\r\n-\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Fdocument-profile-title-parts',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t$page_title,\r\n-\t\t\t\t\t\t\t'&rarr;',\r\n-\t\t\t\t\t\t\t$tab->get( 'title' ),\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $title;\r\n-\t}\r\n-}\r\n-\r\n-\u002F\u002F @deprecated 4.2.7.3\r\n-\u002F*if ( ! function_exists( 'learn_press_course_item_class' ) ) {\r\n-\tfunction learn_press_course_item_class( $item_id, $course_id = 0, $class = null ) {\r\n-\t\tswitch ( get_post_type( $item_id ) ) {\r\n-\t\t\tcase 'lp_lesson':\r\n-\t\t\t\tlearn_press_course_lesson_class( $item_id, $course_id, $class );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'lp_quiz':\r\n-\t\t\t\tlearn_press_course_quiz_class( $item_id, $course_id, $class );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F\u002F @deprecated 4.2.7.3\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_lesson_class' ) ) {\r\n-\u002F\u002F  \u002F**\r\n-\u002F\u002F   * The class of lesson in course curriculum\r\n-\u002F\u002F   *\r\n-\u002F\u002F   * @param int          $lesson_id\r\n-\u002F\u002F   * @param int          $course_id\r\n-\u002F\u002F   * @param array|string $class\r\n-\u002F\u002F   * @param boolean      $echo\r\n-\u002F\u002F   *\r\n-\u002F\u002F   * @return mixed\r\n-\u002F\u002F   *\u002F\r\n-\u002F\u002F  function learn_press_course_lesson_class( $lesson_id = null, $course_id = 0, $class = null, $echo = true ) {\r\n-\u002F\u002F      $user = learn_press_get_current_user();\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( ! $course_id ) {\r\n-\u002F\u002F          $course_id = get_the_ID();\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $course = learn_press_get_course( $course_id );\r\n-\u002F\u002F      if ( ! $course ) {\r\n-\u002F\u002F          return '';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( is_string( $class ) && $class ) {\r\n-\u002F\u002F          $class = preg_split( '!\\s+!', $class );\r\n-\u002F\u002F      } else {\r\n-\u002F\u002F          $class = array();\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $classes = array(\r\n-\u002F\u002F          'course-lesson course-item course-item-' . $lesson_id,\r\n-\u002F\u002F      );\r\n-\u002F\u002F\r\n-\u002F\u002F      $user   = learn_press_get_current_user();\r\n-\u002F\u002F      $status = $user->get_item_status( $lesson_id );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $status ) {\r\n-\u002F\u002F          $classes[] = \"item-has-status item-{$status}\";\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $lesson_id && $course->is_current_item( $lesson_id ) ) {\r\n-\u002F\u002F          $classes[] = 'item-current';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( learn_press_is_course() ) {\r\n-\u002F\u002F          if ( $course->is_free() ) {\r\n-\u002F\u002F              $classes[] = 'free-item';\r\n-\u002F\u002F          }\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $lesson = LP_Lesson::get_lesson( $lesson_id );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $lesson && $lesson->is_preview() ) {\r\n-\u002F\u002F          $classes[] = 'preview-item';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $classes = array_unique( array_merge( $classes, $class ) );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $echo ) {\r\n-\u002F\u002F          echo 'class=\"' . implode( ' ', $classes ) . '\"';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      return $classes;\r\n-\u002F\u002F  }\r\n-\u002F\u002F}\r\n-\r\n-\u002F\u002F @deprecated 4.2.7.3\r\n-\u002F\u002Fif ( ! function_exists( 'learn_press_course_quiz_class' ) ) {\r\n-\u002F\u002F  \u002F**\r\n-\u002F\u002F   * The class of lesson in course curriculum\r\n-\u002F\u002F   *\r\n-\u002F\u002F   * @param int          $quiz_id\r\n-\u002F\u002F   * @param int          $course_id\r\n-\u002F\u002F   * @param string|array $class\r\n-\u002F\u002F   * @param boolean      $echo\r\n-\u002F\u002F   *\r\n-\u002F\u002F   * @return mixed\r\n-\u002F\u002F   *\u002F\r\n-\u002F\u002F  function learn_press_course_quiz_class( $quiz_id = null, $course_id = 0, $class = null, $echo = true ) {\r\n-\u002F\u002F      $user = learn_press_get_current_user();\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( ! $course_id ) {\r\n-\u002F\u002F          $course_id = get_the_ID();\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( is_string( $class ) && $class ) {\r\n-\u002F\u002F          $class = preg_split( '!\\s+!', $class );\r\n-\u002F\u002F      } else {\r\n-\u002F\u002F          $class = array();\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $course = learn_press_get_course( $course_id );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( ! $course ) {\r\n-\u002F\u002F          return '';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $classes = array(\r\n-\u002F\u002F          'course-quiz course-item course-item-' . $quiz_id,\r\n-\u002F\u002F      );\r\n-\u002F\u002F\r\n-\u002F\u002F      $status = $user->get_item_status( $quiz_id );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $status ) {\r\n-\u002F\u002F          $classes[] = \"item-has-status item-{$status}\";\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $quiz_id && $course->is_current_item( $quiz_id ) ) {\r\n-\u002F\u002F          $classes[] = 'item-current';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      \u002F*\r\n-\u002F\u002F      if ( $user->can_view_item( $quiz_id, $course_id )->flag ) {\r\n-\u002F\u002F          $classes[] = 'viewable';\r\n-\u002F\u002F      }*\u002F\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $course->get_evaluation_type() == 'evaluate_final_quiz' && $course->is_final_quiz( $quiz_id ) ) {\r\n-\u002F\u002F          $classes[] = 'final-quiz';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      $classes = array_unique( array_merge( $classes, $class ) );\r\n-\u002F\u002F\r\n-\u002F\u002F      if ( $echo ) {\r\n-\u002F\u002F          echo 'class=\"' . implode( ' ', $classes ) . '\"';\r\n-\u002F\u002F      }\r\n-\u002F\u002F\r\n-\u002F\u002F      return $classes;\r\n-\u002F\u002F  }\r\n-\u002F\u002F}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_class' ) ) {\r\n-\t\u002F**\r\n-\t * Append new class to course post type\r\n-\t *\r\n-\t * @param $classes\r\n-\t * @param $class\r\n-\t * @param $post_id\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tfunction learn_press_course_class( $classes, $class, $post_id = '' ) {\r\n-\t\tif ( is_learnpress() ) {\r\n-\t\t\t$classes = (array) $classes;\r\n-\t\t}\r\n-\r\n-\t\tif ( $post_id === 0 ) {\r\n-\t\t\t$classes[] = 'page type-page';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $post_id || 'lp_course' !== get_post_type( $post_id ) ) {\r\n-\t\t\treturn $classes;\r\n-\t\t}\r\n-\r\n-\t\t$classes[] = 'course';\r\n-\r\n-\t\treturn apply_filters( 'learn_press_course_class', $classes );\r\n-\t}\r\n-}\r\n-\r\n-function learn_press_setup_user() {\r\n-\t$GLOBALS['lp_user'] = learn_press_get_current_user();\r\n-}\r\n-\r\n-\u002F\u002Fadd_action( 'init', 'learn_press_setup_user', 1000 );\r\n-\r\n-\u002F**\r\n- * Display a message immediately with out push into queue\r\n- *\r\n- * @param        $message\r\n- * @param string $type\r\n- *\r\n- * @Todo tungnx review code.\r\n- *\u002F\r\n-\r\n-function learn_press_display_message( $message, $type = 'success' ) {\r\n-\t$messages = learn_press_session_get( learn_press_session_message_id() );\r\n-\tlearn_press_session_set( learn_press_session_message_id(), null );\r\n-\r\n-\t\u002F\u002F add new notice and display\r\n-\tlearn_press_add_message( $message, $type );\r\n-\techo learn_press_get_messages( true );\r\n-\r\n-\t\u002F\u002F store back messages\r\n-\tlearn_press_session_set( learn_press_session_message_id(), $messages );\r\n-}\r\n-\r\n-\u002F**\r\n- * Returns all notices added\r\n- *\r\n- * @param bool $clear\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_messages( $clear = false ) {\r\n-\tob_start();\r\n-\tlearn_press_print_messages( $clear );\r\n-\r\n-\treturn ob_get_clean();\r\n-}\r\n-\r\n-\u002F**\r\n- * Add new message into queue for displaying.\r\n- *\r\n- * @param string $message\r\n- * @param string $type\r\n- * @param array $options\r\n- * @param int|bool $current_user . @since 3.0.9 - add for current user only\r\n- *\r\n- * @deprecated 4.2.2.1\r\n- *\u002F\r\n-function learn_press_add_message( $message, $type = 'success', $options = array(), $current_user = true ) {\r\n-\tif ( is_string( $options ) ) {\r\n-\t\t$options = array( 'id' => $options );\r\n-\t}\r\n-\r\n-\t$options = wp_parse_args(\r\n-\t\t$options,\r\n-\t\tarray(\r\n-\t\t\t'id' => '',\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( $current_user ) {\r\n-\t\tif ( true === $current_user ) {\r\n-\t\t\t$current_user = get_current_user_id();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$key = \"messages{$current_user}\";\r\n-\r\n-\t$messages = learn_press_session_get( $key );\r\n-\r\n-\tif ( empty( $messages[ $type ] ) ) {\r\n-\t\t$messages[ $type ] = array();\r\n-\t}\r\n-\r\n-\t$messages[ $type ][ $options['id'] ] = array(\r\n-\t\t'content' => $message,\r\n-\t\t'options' => $options,\r\n-\t);\r\n-\r\n-\tlearn_press_session_set( $key, $messages );\r\n-}\r\n-\r\n-function learn_press_get_message( $message, $type = 'success' ) {\r\n-\tob_start();\r\n-\tlearn_press_display_message( $message, $type );\r\n-\t$message = ob_get_clean();\r\n-\r\n-\treturn $message;\r\n-}\r\n-\r\n-\u002F**\r\n- * Set LP message to COOKIE.\r\n- *\r\n- * @param array $message_data ['status' => 'success\u002Fwarning\u002Ferror', 'content' => 'Message content']\r\n- *\r\n- * @return void\r\n- * @version 1.0.0\r\n- * @since 4.2.0\r\n- *\u002F\r\n-function learn_press_set_message( array $message_data = [] ) {\r\n-\tif ( ! isset( $message_data ['status'] ) ) {\r\n-\t\terror_log( 'Message data must have status' );\r\n-\r\n-\t\treturn;\r\n-\t}\r\n-\tif ( ! isset( $message_data ['content'] ) ) {\r\n-\t\terror_log( 'Message data must have content' );\r\n-\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$customer_id      = LP_Session_Handler::instance()->get_customer_id();\r\n-\t$customer_message = [ $customer_id => $message_data ];\r\n-\tupdate_option( 'lp-customer-message', $customer_message );\r\n-}\r\n-\r\n-\u002F**\r\n- * Show message only one time.\r\n- * @return void\r\n- * @version 1.0.0\r\n- * @since 4.2.0\r\n- *\u002F\r\n-function learn_press_show_message() {\r\n-\ttry {\r\n-\t\t$customer_id      = LP_Session_Handler::instance()->get_customer_id();\r\n-\t\t$message_data     = get_option( 'lp-customer-message' ) ?? [];\r\n-\t\t$customer_message = $message_data[ $customer_id ] ?? '';\r\n-\t\tif ( ! $customer_message ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tunset( $message_data[ $customer_id ] );\r\n-\t\tupdate_option( 'lp-customer-message', $message_data );\r\n-\t\t\u002F\u002Fdelete_option( 'lp-message' );\r\n-\t\tTemplate::instance()->get_frontend_template( 'global\u002Flp-message.php', compact( 'customer_message' ) );\r\n-\t} catch ( Throwable $e ) {\r\n-\t\terror_log( $e->getMessage() );\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'learn-press\u002Fbefore-course-item-content', 'learn_press_show_message', 50 );\r\n-\r\n-\u002F**\r\n- * Remove message added into queue by id and\u002For type.\r\n- *\r\n- * @param string $id\r\n- * @param string|array $type\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-function learn_press_remove_message( $id = '', $type = '' ) {\r\n-\t$groups = learn_press_session_get( learn_press_session_message_id() );\r\n-\r\n-\tif ( ! $groups ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tsettype( $type, 'array' );\r\n-\r\n-\tif ( $id ) {\r\n-\t\tforeach ( $groups as $message_type => $messages ) {\r\n-\t\t\tif ( ! sizeof( $type ) ) {\r\n-\t\t\t\tif ( isset( $groups[ $message_type ][ $id ] ) ) {\r\n-\t\t\t\t\tunset( $groups[ $message_type ][ $id ] );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( in_array( $message_type, $type ) ) {\r\n-\t\t\t\tif ( isset( $groups[ $message_type ][ $id ] ) ) {\r\n-\t\t\t\t\tunset( $groups[ $message_type ][ $id ] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} elseif ( sizeof( $type ) ) {\r\n-\t\tforeach ( $type as $t ) {\r\n-\t\t\tif ( isset( $groups[ $t ] ) ) {\r\n-\t\t\t\tunset( $groups[ $t ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$groups = array();\r\n-\t}\r\n-\r\n-\tlearn_press_session_set( learn_press_session_message_id(), $groups );\r\n-}\r\n-\r\n-\u002F**\r\n- * Print out the message stored in the queue\r\n- *\r\n- * @param bool\r\n- *\u002F\r\n-function learn_press_print_messages( $clear = true ) {\r\n-\t$messages = learn_press_session_get( learn_press_session_message_id() );\r\n-\tlearn_press_get_template( 'global\u002Fmessage.php', array( 'messages' => $messages ) );\r\n-\r\n-\tif ( $clear ) {\r\n-\t\tlearn_press_session_set( learn_press_session_message_id(), array() );\r\n-\t}\r\n-}\r\n-\r\n-function learn_press_session_message_id() {\r\n-\treturn 'messages' . get_current_user_id();\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_page_title' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * learn_press_page_title function.\r\n-\t *\r\n-\t * @param boolean $echo\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tfunction learn_press_page_title( bool $echo = false ): string {\r\n-\t\t$page_title = '';\r\n-\r\n-\t\tif ( is_search() ) {\r\n-\t\t\t\u002F\u002F Comment by tungnx\r\n-\t\t\t\u002F*$page_title = sprintf( __( 'Search Results for: &ldquo;%s&rdquo;', 'learnpress' ), get_search_query() );\r\n-\r\n-\t\t\tif ( get_query_var( 'paged' ) ) {\r\n-\t\t\t\t$page_title .= sprintf( __( '&nbsp;&ndash; Page %s', 'learnpress' ), get_query_var( 'paged' ) );\r\n-\t\t\t}*\u002F\r\n-\t\t} elseif ( is_tax() ) {\r\n-\t\t\t$page_title = single_term_title( '', false );\r\n-\t\t} else {\r\n-\t\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\r\n-\t\t\t$page_title      = get_the_title( $courses_page_id );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn_press_page_title', $page_title );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get template part.\r\n- *\r\n- * @param string $slug\r\n- * @param string $name\r\n- *\r\n- * @return  string\r\n- *\u002F\r\n-function learn_press_get_template_part( $slug, $name = '' ) {\r\n-\t$template = '';\r\n-\r\n-\tif ( $name ) {\r\n-\t\t$template = locate_template(\r\n-\t\t\tarray(\r\n-\t\t\t\t\"{$slug}-{$name}.php\",\r\n-\t\t\t\tlearn_press_template_path() . \"\u002F{$slug}-{$name}.php\",\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F\u002F Get default slug-name.php\r\n-\tif ( ! $template && $name && file_exists( LP_PLUGIN_PATH . \"\u002Ftemplates\u002F{$slug}-{$name}.php\" ) ) {\r\n-\t\t$template = LP_PLUGIN_PATH . \"\u002Ftemplates\u002F{$slug}-{$name}.php\";\r\n-\t}\r\n-\r\n-\t\u002F\u002F If template file doesn't exist, look in yourtheme\u002Fslug.php and yourtheme\u002Flearnpress\u002Fslug.php\r\n-\tif ( ! $template ) {\r\n-\t\t$template = locate_template( array( \"{$slug}.php\", learn_press_template_path() . \"\u002F{$slug}.php\" ) );\r\n-\t}\r\n-\t\u002F\u002F override path of child theme in parent theme - Fix for eduma by tuanta\r\n-\t$file_ct_in_pr = apply_filters( 'learn_press_child_in_parrent_template_path', '' );\r\n-\tif ( $file_ct_in_pr && $name ) {\r\n-\t\t$template_child = locate_template(\r\n-\t\t\tarray(\r\n-\t\t\t\t\"{$slug}-{$name}.php\",\r\n-\t\t\t\t'lp-child-path\u002F' . learn_press_template_path() . '\u002F' . $file_ct_in_pr . \"\u002F{$slug}-{$name}.php\",\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\tif ( $template_child && file_exists( $template_child ) ) {\r\n-\t\t\t$template = $template_child;\r\n-\t\t}\r\n-\t\t\u002F\u002F check in child theme if have filter learn_press_child_in_parrent_template_path\r\n-\r\n-\t\t$check_child_theme = get_stylesheet_directory() . '\u002F' . learn_press_template_path() . \"{$slug}-{$name}.php\";\r\n-\t\tif ( $check_child_theme && file_exists( $check_child_theme ) ) {\r\n-\t\t\t$template = $check_child_theme;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Allow 3rd party plugin filter template file from their plugin\r\n-\tif ( $template ) {\r\n-\t\t$template = apply_filters( 'learn_press_get_template_part', $template, $slug, $name );\r\n-\t}\r\n-\tif ( $template && file_exists( $template ) ) {\r\n-\t\tload_template( $template, false );\r\n-\t}\r\n-\r\n-\treturn $template;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get other templates passing attributes and including the file.\r\n- *\r\n- * @param string $template_name .\r\n- * @param array $args (default: array()) .\r\n- * @param string $template_path (default: '').\r\n- * @param string $default_path (default: '').\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function learn_press_get_template( $template_name = '', $args = array(), $template_path = '', $default_path = '' ) {\r\n-\tif ( $args && is_array( $args ) ) {\r\n-\t\textract( $args );\r\n-\t}\r\n-\r\n-\tif ( false === strpos( $template_name, '.php' ) ) {\r\n-\t\t$template_name .= '.php';\r\n-\t}\r\n-\r\n-\t$located = learn_press_locate_template( $template_name, $template_path, $default_path );\r\n-\r\n-\tif ( ! file_exists( $located ) ) {\r\n-\t\t_doing_it_wrong( __FUNCTION__, sprintf( '\u003Ccode>%s\u003C\u002Fcode> does not exist.', $located ), '2.1' );\r\n-\r\n-\t\t$log = sprintf( 'TEMPLATE MISSING: Template %s doesn\\'t exists.', $template_name );\r\n-\t\terror_log( $log );\r\n-\r\n-\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\techo sprintf( '\u003Cspan title=\"%s\" class=\"learn-press-template-warning\">\u003C\u002Fspan>', $log );\r\n-\t\t}\r\n-\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Allow 3rd party plugin filter template file from their plugin\r\n-\t$located = apply_filters(\r\n-\t\t'learn_press_get_template',\r\n-\t\t$located,\r\n-\t\t$template_name,\r\n-\t\t$args,\r\n-\t\t$template_path,\r\n-\t\t$default_path\r\n-\t);\r\n-\tif ( $located != '' ) {\r\n-\t\tdo_action( 'learn_press_before_template_part', $template_name, $template_path, $located, $args );\r\n-\r\n-\t\tinclude $located;\r\n-\r\n-\t\tdo_action( 'learn_press_after_template_part', $template_name, $template_path, $located, $args );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Get template content\r\n- *\r\n- * @param        $template_name\r\n- * @param array $args\r\n- * @param string $template_path\r\n- * @param string $default_path\r\n- *\r\n- * @return string\r\n- * @uses learn_press_get_template();\r\n- *\u002F\r\n-function learn_press_get_template_content( $template_name, $args = array(), $template_path = '', $default_path = '' ) {\r\n-\tob_start();\r\n-\tlearn_press_get_template( $template_name, $args, $template_path, $default_path );\r\n-\r\n-\treturn ob_get_clean();\r\n-}\r\n-\r\n-\u002F**\r\n- * Locate a template and return the path for inclusion.\r\n- *\r\n- * @param string $template_name\r\n- * @param string $template_path (default: '')\r\n- * @param string $default_path (default: '')\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_locate_template( $template_name, $template_path = '', $default_path = '' ) {\r\n-\tif ( ! $template_path ) {\r\n-\t\t$template_path = learn_press_template_path();\r\n-\t}\r\n-\r\n-\tif ( ! $default_path ) {\r\n-\t\t$default_path = LP_PLUGIN_PATH . 'templates\u002F';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Disable override templates in theme by default since LP 4.0.0\r\n-\t *\u002F\r\n-\tif ( learn_press_override_templates() ) {\r\n-\t\t$template = locate_template(\r\n-\t\t\tarray(\r\n-\t\t\t\ttrailingslashit( $template_path ) . $template_name,\r\n-\t\t\t\t$template_name,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t\u002F\u002F override path of child theme in parent theme - Fix for eduma by tuanta\r\n-\t\t$file_ct_in_pr = apply_filters( 'learn_press_child_in_parrent_template_path', '' );\r\n-\t\tif ( $file_ct_in_pr ) {\r\n-\t\t\t$template_child = locate_template(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\ttrailingslashit( 'lp-child-path\u002F' . $template_path . '\u002F' . $file_ct_in_pr ) . $template_name,\r\n-\t\t\t\t\t$template_name,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tif ( $template_child && file_exists( $template_child ) ) {\r\n-\t\t\t\t$template = $template_child;\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F check in child theme if have filter learn_press_child_in_parrent_template_path\r\n-\t\t\t$check_child_theme = get_stylesheet_directory() . '\u002F' . trailingslashit( $template_path ) . $template_name;\r\n-\t\t\tif ( $check_child_theme && file_exists( $check_child_theme ) ) {\r\n-\t\t\t\t$template = $check_child_theme;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\tif ( ! isset( $template ) || ! $template ) {\r\n-\t\t$template = trailingslashit( $default_path ) . $template_name;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_locate_template', $template, $template_name, $template_path );\r\n-}\r\n-\r\n-\u002F**\r\n- * Returns the name of folder contains override template files in theme\r\n- *\r\n- * @return string\r\n- * @since 3.0.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-function learn_press_template_path(): string {\r\n-\t$lp_folder_name_override = apply_filters( 'learn_press_template_path', LP_PLUGIN_FOLDER_NAME );\r\n-\tif ( ! is_string( $lp_folder_name_override ) ) {\r\n-\t\t$lp_folder_name_override = LP_PLUGIN_FOLDER_NAME;\r\n-\t}\r\n-\r\n-\treturn $lp_folder_name_override;\r\n-}\r\n-\r\n-\u002F**\r\n- * Disable override templates in theme by default\r\n- *\r\n- * @return bool\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_override_templates() {\r\n-\treturn apply_filters( 'learn-press\u002Foverride-templates', false );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get html view path for admin to display\r\n- *\r\n- * @param $name\r\n- * @param $plugin_file\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_admin_view( $name, $plugin_file = null ) {\r\n-\tif ( ! preg_match( '\u002F\\.(html|php)$\u002F', $name ) ) {\r\n-\t\t$name .= '.php';\r\n-\t}\r\n-\tif ( $plugin_file ) {\r\n-\t\t$view = dirname( $plugin_file ) . '\u002Finc\u002Fadmin\u002Fviews\u002F' . $name;\r\n-\t} else {\r\n-\t\t$view = LearnPress::instance()->plugin_path( 'inc\u002Fadmin\u002Fviews\u002F' . $name );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_admin_view', $view, $name );\r\n-}\r\n-\r\n-function learn_press_admin_view_content( $name, $args = array() ) {\r\n-\treturn learn_press_admin_view( $name, $args, false, true );\r\n-}\r\n-\r\n-\u002F**\r\n- * Find a full path of a view and display the content in admin\r\n- *\r\n- * @param            $name\r\n- * @param array $args\r\n- * @param bool|false $include_once\r\n- * @param bool\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_admin_view( $name, $args = array(), $include_once = false, $return = false ) {\r\n-\t$view = learn_press_get_admin_view( $name, ! empty( $args['plugin_file'] ) ? $args['plugin_file'] : null );\r\n-\r\n-\tif ( file_exists( $view ) ) {\r\n-\r\n-\t\tob_start();\r\n-\r\n-\t\tis_array( $args ) && extract( $args );\r\n-\r\n-\t\tdo_action( 'learn_press_before_display_admin_view', $name, $args );\r\n-\r\n-\t\tif ( $include_once ) {\r\n-\t\t\tinclude_once $view;\r\n-\t\t} else {\r\n-\t\t\tinclude $view;\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn_press_after_display_admin_view', $name, $args );\r\n-\t\t$output = ob_get_clean();\r\n-\r\n-\t\tif ( ! $return ) {\r\n-\t\t\tlearn_press_echo_vuejs_write_on_php( $output );\r\n-\t\t}\r\n-\r\n-\t\treturn $return ? $output : true;\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_is_404' ) ) {\r\n-\t\u002F**\r\n-\t * Set header is 404\r\n-\t * @deprecated 4.2.8\r\n-\t *\u002F\r\n-\tfunction learn_press_is_404() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.2.8', 'LP_Page_Controller::set_page_404' );\r\n-\r\n-\t\treturn;\r\n-\t\tglobal $wp_query;\r\n-\t\t$wp_query->set_404();\r\n-\t\tstatus_header( 404 );\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_404_page' ) ) {\r\n-\t\u002F**\r\n-\t * Display 404 page\r\n-\t *\r\n-\t * @deprecated 4.2.8\r\n-\t *\u002F\r\n-\tfunction learn_press_404_page() {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.2.8', 'LP_Page_Controller::set_page_404' );\r\n-\r\n-\t\treturn;\r\n-\t\tlearn_press_is_404();\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_generate_template_information' ) ) {\r\n-\tfunction learn_press_generate_template_information( $template_name, $template_path, $located, $args ) {\r\n-\t\t$debug = learn_press_get_request( 'show-template-location' );\r\n-\t\tif ( $debug == 'on' ) {\r\n-\t\t\techo '\u003C!-- Template Location:' . str_replace( array( LP_PLUGIN_PATH, ABSPATH ), '', $located ) . ' -->';\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_course_remaining_time' ) ) {\r\n-\t\u002F**\r\n-\t * Show the time remain of a course\r\n-\t *\u002F\r\n-\tfunction learn_press_course_remaining_time() {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t\tif ( ! $user->has_finished_course( get_the_ID() ) && $text = learn_press_get_course( get_the_ID() )->get_user_duration_html( $user->get_id() ) ) {\r\n-\t\t\tlearn_press_display_message( $text );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_item_meta_type' ) ) {\r\n-\tfunction learn_press_item_meta_type( $course, $item ) {\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php if ( $item->post_type == 'lp_quiz' ) { ?>\r\n-\r\n-\t\t\t\u003Cspan class=\"lp-label lp-label-quiz\">\u003C?php _e( 'Quiz', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\r\n-\t\t\t\u003C?php if ( $course->final_quiz == $item->ID ) { ?>\r\n-\r\n-\t\t\t\t\u003Cspan class=\"lp-label lp-label-final\">\u003C?php _e( 'Final', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\r\n-\t\t\t\u003C?php } ?>\r\n-\r\n-\t\t\u003C?php } elseif ( $item->post_type == 'lp_lesson' ) { ?>\r\n-\r\n-\t\t\t\u003Cspan class=\"lp-label lp-label-lesson\">\u003C?php _e( 'Lesson', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\t\t\t\u003C?php if ( get_post_meta( $item->ID, '_lp_preview', true ) == 'yes' ) { ?>\r\n-\r\n-\t\t\t\t\u003Cspan class=\"lp-label lp-label-preview\">\u003C?php _e( 'Preview', 'learnpress' ); ?>\u003C\u002Fspan>\r\n-\r\n-\t\t\t\u003C?php } ?>\r\n-\r\n-\t\t\u003C?php } else { ?>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn_press_item_meta_type', $course, $item ); ?>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_sort_course_tabs' ) ) {\r\n-\tfunction learn_press_sort_course_tabs( $tabs = array() ) {\r\n-\t\tuasort( $tabs, 'learn_press_sort_list_by_priority_callback' );\r\n-\r\n-\t\treturn $tabs;\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_get_profile_display_name' ) ) {\r\n-\t\u002F**\r\n-\t * Get Display name publicly as in Profile page\r\n-\t *\u002F\r\n-\tfunction learn_press_get_profile_display_name( $user ) {\r\n-\t\tif ( empty( $user ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$id = '';\r\n-\r\n-\t\tif ( $user instanceof LP_Abstract_User ) {\r\n-\t\t\t$id = $user->get_id();\r\n-\t\t} elseif ( $user instanceof WP_User ) {\r\n-\t\t\t$id = $user->ID;\r\n-\t\t} elseif ( is_numeric( $user ) ) {\r\n-\t\t\t$id = $user;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $id ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$info = get_userdata( $id );\r\n-\r\n-\t\treturn $info ? $info->display_name : '';\r\n-\t}\r\n-}\r\n-\r\n-function learn_press_is_content_item_only() {\r\n-\treturn ! empty( $_REQUEST['content-item-only'] );\r\n-}\r\n-\r\n-function learn_press_label_html( $label, $type = '' ) {\r\n-\t?>\r\n-\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $type ? $type : $label ); ?>\">\r\n-\t\t\u003C?php echo esc_html( $label ); ?>\r\n-\t\u003C\u002Fspan>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-\u002F**\r\n- * @param LP_Quiz $item\r\n- *\r\n- * @deprecated 4.2.3.5\r\n- *\u002F\r\n-function learn_press_quiz_meta_final( $item ) {\r\n-\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\r\n-\treturn;\r\n-\t$course = learn_press_get_course();\r\n-\r\n-\tif ( ! $course->is_final_quiz( $item->get_id() ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\techo '\u003Cspan class=\"item-meta final-quiz\">' . esc_html__( 'Final', 'learnpress' ) . '\u003C\u002Fspan>';\r\n-}\r\n-\r\n-function learn_press_comments_template_query_args( $comment_args ) {\r\n-\t$post_type = get_post_type( $comment_args['post_id'] );\r\n-\r\n-\tif ( $post_type == LP_COURSE_CPT ) {\r\n-\t\t$comment_args['type__not_in'] = 'review';\r\n-\t}\r\n-\r\n-\treturn $comment_args;\r\n-}\r\n-\r\n-add_filter( 'comments_template_query_args', 'learn_press_comments_template_query_args' );\r\n-\r\n-function learn_press_comment_form_logged_in( $html_login ) {\r\n-\tif ( get_post_type() == LP_COURSE_CPT || get_post_type() == LP_LESSON_CPT ) {\r\n-\t\t$html_login = '';\r\n-\t}\r\n-\r\n-\treturn $html_login;\r\n-}\r\n-\r\n-add_filter( 'comment_form_logged_in', 'learn_press_comment_form_logged_in' );\r\n-\r\n-function learn_press_comment_form_defaults( $defaults ) {\r\n-\tif ( get_post_type() == LP_COURSE_CPT || get_post_type() == LP_LESSON_CPT ) {\r\n-\t\t$defaults['comment_notes_before'] = '';\r\n-\t}\r\n-\r\n-\treturn $defaults;\r\n-}\r\n-\r\n-add_filter( 'comment_form_defaults', 'learn_press_comment_form_defaults' );\r\n-\r\n-function learn_press_filter_get_comments_number( $count, $post_id = 0 ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\tif ( ! $post_id ) {\r\n-\t\t$post_id = get_the_ID();\r\n-\t\tif ( ! $post_id ) {\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( get_post_type( $post_id ) == LP_COURSE_CPT ) {\r\n-\t\t$sql = $wpdb->prepare(\r\n-\t\t\t' SELECT count(*) '\r\n-\t\t\t. \" FROM {$wpdb->comments} \"\r\n-\t\t\t. ' WHERE comment_post_ID = %d '\r\n-\t\t\t. ' AND comment_approved = 1 '\r\n-\t\t\t. ' AND comment_type != %s ',\r\n-\t\t\t$post_id,\r\n-\t\t\t'review'\r\n-\t\t);\r\n-\r\n-\t\t$count = $wpdb->get_var( $sql );\r\n-\t}\r\n-\r\n-\treturn $count;\r\n-}\r\n-\r\n-add_filter( 'get_comments_number', 'learn_press_filter_get_comments_number' );\r\n-\r\n-\u002F**\r\n- * Add custom classes to body tag class name\r\n- *\r\n- * @param array $classes\r\n- *\r\n- * @return array\r\n- *\r\n- * @since 3.0.0\r\n- * @Todo tungnx review to remove\r\n- * @deprecated 4.2.3\r\n- *\u002F\r\n-function learn_press_body_classes( $classes ) {\r\n-\tif ( is_learnpress() ) {\r\n-\t\t$classes[] = get_stylesheet();\r\n-\t\t$classes[] = 'learnpress';\r\n-\t\t$classes[] = 'learnpress-page';\r\n-\t}\r\n-\r\n-\treturn $classes;\r\n-}\r\n-\r\n-\u002F\u002Fadd_filter( 'body_class', 'learn_press_body_classes', 10 );\r\n-\r\n-\u002F**\r\n- * Return true if user is learning a course\r\n- *\r\n- * @param int $course_id\r\n- *\r\n- * @return bool\r\n- * @since 3.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-function learn_press_is_learning_course( int $course_id = 0 ): bool {\r\n-\t$is_learning = false;\r\n-\t$user        = learn_press_get_current_user();\r\n-\t$course      = learn_press_get_course( $course_id );\r\n-\tif ( ! $course ) {\r\n-\t\treturn $is_learning;\r\n-\t}\r\n-\r\n-\tif ( $user ) {\r\n-\t\treturn $user->has_enrolled_or_finished( $course_id );\r\n-\t}\r\n-\r\n-\tif ( $course->is_no_required_enroll() ) {\r\n-\t\t$is_learning = true;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'lp\u002Fis-learning-course', $is_learning, $course_id );\r\n-}\r\n-\r\n-function learn_press_content_item_summary_class( $more = '', $echo = true ) {\r\n-\t$classes = array( 'content-item-summary' );\r\n-\t$classes = LP_Helper::merge_class( $classes, $more );\r\n-\t$classes = apply_filters( 'learn-press\u002Fcontent-item-summary-class', $classes );\r\n-\t$output  = 'class=\"' . esc_attr( join( ' ', $classes ) ) . '\"';\r\n-\r\n-\tif ( $echo ) {\r\n-\t\techo wp_kses_post( $output );\r\n-\t}\r\n-\r\n-\treturn $output;\r\n-}\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.3.1\r\n- *\u002F\r\n-function learn_press_content_item_summary_classes( $classes ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.2.3.1' );\r\n-\t$item = LP_Global::course_item();\r\n-\r\n-\tif ( ! $item ) {\r\n-\t\treturn $classes;\r\n-\t}\r\n-\r\n-\tif ( $item->get_post_type() !== LP_LESSON_CPT ) {\r\n-\t\treturn $classes;\r\n-\t}\r\n-\r\n-\treturn $classes;\r\n-}\r\n-\r\n-function learn_press_maybe_load_comment_js() {\r\n-\t$item = LP_Global::course_item();\r\n-\r\n-\tif ( $item ) {\r\n-\t\twp_enqueue_script( 'comment-reply' );\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'wp_enqueue_scripts', 'learn_press_maybe_load_comment_js' );\r\n-\r\n-\u002F**\r\n- * Get list layouts archive course setting\r\n- *\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-function learn_press_courses_layouts() {\r\n-\treturn apply_filters(\r\n-\t\t'learnpress\u002Farchive-courses-layouts',\r\n-\t\t[\r\n-\t\t\t'grid' => __( 'Grid', 'learnpress' ),\r\n-\t\t\t'list' => __( 'List', 'learnpress' ),\r\n-\t\t]\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Get layout template for archive course page.\r\n- *\r\n- * @return mixed\r\n- * @since 3.3.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-function learn_press_get_courses_layout() {\r\n-\t$layout = LP_Request::get_cookie( 'courses-layout' );\r\n-\r\n-\tif ( ! $layout ) {\r\n-\t\t$layout = LP_Settings::get_option( 'archive_courses_layout', 'list' );\r\n-\t}\r\n-\r\n-\treturn $layout;\r\n-}\r\n-\r\n-function learn_press_register_sidebars() {\r\n-\tregister_sidebar(\r\n-\t\tarray(\r\n-\t\t\t'name'          => esc_html__( 'Course Sidebar', 'learnpress' ),\r\n-\t\t\t'id'            => 'course-sidebar',\r\n-\t\t\t'description'   => esc_html__( 'Widgets in this area will be shown in a single course', 'learnpress' ),\r\n-\t\t\t'before_widget' => '\u003Cdiv id=\"%1$s\" class=\"widget %2$s\">',\r\n-\t\t\t'after_widget'  => '\u003C\u002Fdiv>',\r\n-\t\t\t'before_title'  => '\u003Ch3 class=\"widget-title\">',\r\n-\t\t\t'after_title'   => '\u003C\u002Fh3>',\r\n-\t\t)\r\n-\t);\r\n-\tregister_sidebar(\r\n-\t\tarray(\r\n-\t\t\t'name'          => esc_html__( 'All Courses', 'learnpress' ),\r\n-\t\t\t'id'            => 'archive-courses-sidebar',\r\n-\t\t\t'description'   => esc_html__( 'Widgets in this area will be shown on all course pages', 'learnpress' ),\r\n-\t\t\t'before_widget' => '\u003Cdiv id=\"%1$s\" class=\"widget %2$s\">',\r\n-\t\t\t'after_widget'  => '\u003C\u002Fdiv>',\r\n-\t\t\t'before_title'  => '\u003Ch3 class=\"widget-title\">',\r\n-\t\t\t'after_title'   => '\u003C\u002Fh3>',\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-add_action( 'widgets_init', 'learn_press_register_sidebars' );\r\n-\r\n-function learn_press_setup_theme() {\r\n-\t$support = array(\r\n-\t\t'widgets' => array(\r\n-\t\t\t\u002F\u002F Place three core-defined widgets in the sidebar area.\r\n-\t\t\t'course-sidebar' => array(\r\n-\t\t\t\t'xxx' => array( 'lp-widget-course-progress' ),\r\n-\t\t\t\t'yyy' => array( 'lp-widget-course-info' ),\r\n-\t\t\t),\r\n-\t\t),\r\n-\t);\r\n-\r\n-\tadd_theme_support( 'starter-content', $support );\r\n-}\r\n-\r\n-add_action( 'after_setup_theme', 'learn_press_setup_theme' );\r\n-\r\n-\u002F**\r\n- * @param LP_Question $question\r\n- * @param array $args\r\n- *\r\n- * @return array\r\n- * @since 4.x.x\r\n- *\u002F\r\n-function learn_press_get_question_options_for_js( $question, $args = array() ) {\r\n-\t$args = wp_parse_args(\r\n-\t\t$args,\r\n-\t\tarray(\r\n-\t\t\t'cryptoJsAes'     => false,\r\n-\t\t\t'include_is_true' => true,\r\n-\t\t\t'answer'          => false,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( $args['cryptoJsAes'] ) {\r\n-\t\t$options = array_values( $question->get_answer_options() );\r\n-\r\n-\t\t$key     = uniqid();\r\n-\t\t$options = array(\r\n-\t\t\t'data' => cryptoJsAesEncrypt( $key, wp_json_encode( $options ) ),\r\n-\t\t\t'key'  => $key,\r\n-\t\t);\r\n-\t} else {\r\n-\t\t$exclude_option_key = array( 'question_id', 'order' );\r\n-\t\tif ( ! $args['include_is_true'] ) {\r\n-\t\t\t$exclude_option_key[] = 'is_true';\r\n-\t\t}\r\n-\r\n-\t\t$options = array_values(\r\n-\t\t\t$question->get_answer_options(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'exclude' => $exclude_option_key,\r\n-\t\t\t\t\t'map'     => array( 'question_answer_id' => 'uid' ),\r\n-\t\t\t\t\t'answer'  => $args['answer'],\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\treturn $options;\r\n-}\r\n-\r\n-function learn_press_custom_excerpt_length( $length ) {\r\n-\treturn 20;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get post meta with key _lp_duration and translate.\r\n- *\r\n- * @param int $post_id\r\n- * @param string $default\r\n- *\r\n- * @return string\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_get_post_translated_duration( $post_id, $default = '' ) {\r\n-\t$duration = get_post_meta( $post_id, '_lp_duration', true );\r\n-\r\n-\t$duration_arr = explode( ' ', $duration );\r\n-\t$duration_str = '';\r\n-\r\n-\tif ( count( $duration_arr ) > 1 ) {\r\n-\t\t$duration_number = $duration_arr[0];\r\n-\t\t$duration_text   = $duration_arr[1];\r\n-\r\n-\t\tswitch ( strtolower( $duration_text ) ) {\r\n-\t\t\tcase 'minute':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s minute', '%s minutes', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'hour':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s hour', '%s hours', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'day':\r\n-\t\t\t\t$duration_str = sprintf( _n( '%s day', '%s days', $duration_number, 'learnpress' ), $duration_number );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'week':\r\n-\t\t\t\t$duration_str = sprintf(\r\n-\t\t\t\t\t_n( '%s week', '%s weeks', $duration_number, 'learnpress' ),\r\n-\t\t\t\t\t$duration_number\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$duration_str = $duration;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn empty( absint( $duration ) ) ? $default : $duration_str;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get level post meta.\r\n- *\r\n- * @param int $post_id\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_post_level( $post_id ) {\r\n-\t$level = get_post_meta( $post_id, '_lp_level', true );\r\n-\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Flevel-label',\r\n-\t\t! empty( $level ) ? lp_course_level()[ $level ] : esc_html__( 'All levels', 'learnpress' ),\r\n-\t\t$post_id\r\n-\t);\r\n-}\r\n-\r\n-function lp_course_level() {\r\n-\treturn apply_filters(\r\n-\t\t'lp\u002Ftemplate\u002Ffunction\u002Fcourse\u002Flevel',\r\n-\t\tarray(\r\n-\t\t\t'all'          => esc_html__( 'All levels', 'learnpress' ),\r\n-\t\t\t'beginner'     => esc_html__( 'Beginner', 'learnpress' ),\r\n-\t\t\t'intermediate' => esc_html__( 'Intermediate', 'learnpress' ),\r\n-\t\t\t'expert'       => esc_html__( 'Expert', 'learnpress' ),\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Get slug for logout action in user profile.\r\n- *\r\n- * @return string\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_profile_logout_slug() {\r\n-\treturn apply_filters( 'learn-press\u002Fprofile-logout-slug', 'lp-logout' );\r\n-}\r\n-\r\n-function lp_get_email_content( $format, $meta = array(), $field = array() ) {\r\n-\tif ( $meta && isset( $meta[ $format ] ) ) {\r\n-\t\t$content = stripslashes( $meta[ $format ] );\r\n-\t} else {\r\n-\t\t$template      = ! empty( $field[\"template_{$format}\"] ) ? $field[\"template_{$format}\"] : null;\r\n-\t\t$template_file = $field['template_base'] . $template;\r\n-\t\t$content       = LP_WP_Filesystem::instance()->file_get_contents( $template_file );\r\n-\t}\r\n-\r\n-\treturn $content;\r\n-}\r\n-\r\n-function lp_skeleton_animation_html( $count_li = 3, $width = 'random', $styleli = '', $styleul = '' ) {\r\n-\t?>\r\n-\t\u003Cul class=\"lp-skeleton-animation\" style=\"\u003C?php echo esc_attr( $styleul ); ?>\">\r\n-\t\t\u003C?php for ( $i = 0; $i \u003C absint( $count_li ); $i ++ ) : ?>\r\n-\t\t\t\u003Cli style=\"width: \u003C?php echo esc_attr( $width === 'random' ? wp_rand( 90, 100 ) . '%' : $width ); ?>; \u003C?php echo ! empty( $styleli ) ? $styleli : ''; ?>\">\u003C\u002Fli>\r\n-\t\t\u003C?php endfor; ?>\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php\r\n-}\r\n-\r\n-add_filter( 'lp_format_page_content', 'wptexturize' );\r\n-add_filter( 'lp_format_page_content', 'convert_smilies' );\r\n-add_filter( 'lp_format_page_content', 'convert_chars' );\r\n-add_filter( 'lp_format_page_content', 'wpautop' );\r\n-add_filter( 'lp_format_page_content', 'shortcode_unautop' );\r\n-add_filter( 'lp_format_page_content', 'prepend_attachment' );\r\n-add_filter( 'lp_format_page_content', 'do_shortcode', 11 );\r\n-add_filter( 'lp_format_page_content', array( $GLOBALS['wp_embed'], 'run_shortcode' ), 8 );\r\n-\r\n-if ( function_exists( 'do_blocks' ) ) {\r\n-\tadd_filter( 'lp_format_page_content', 'do_blocks', 9 );\r\n-}\r\n-\r\n-function lp_format_page_content( $raw_string ) {\r\n-\treturn apply_filters( 'lp_format_page_content', $raw_string );\r\n-}\r\n-\r\n-if ( ! function_exists( 'lp_profile_page_content' ) ) {\r\n-\tfunction lp_profile_page_content() {\r\n-\t\t$profile_id = learn_press_get_page_id( 'profile' );\r\n-\r\n-\t\tif ( $profile_id ) {\r\n-\t\t\t$profile_page = get_post( $profile_id );\r\n-\r\n-\t\t\t\u002F\u002F remove_shortcode( 'learn_press_profile' );\r\n-\t\t\t$description = lp_format_page_content( wp_kses_post( $profile_page->post_content ) );\r\n-\r\n-\t\t\tif ( $description ) {\r\n-\t\t\t\techo '\u003Cdiv class=\"lp-profile-page__content\">' . $description . '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'lp_archive_course_page_content' ) ) {\r\n-\tadd_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_archive_course_page_content' );\r\n-\r\n-\tfunction lp_archive_course_page_content() {\r\n-\t\tif ( is_search() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_post_type_archive( LP_COURSE_CPT )\r\n-\t\t\t&& in_array( absint( get_query_var( 'paged' ) ), array( 0, 1 ), true ) ) {\r\n-\t\t\t$profile_id = learn_press_get_page_id( 'courses' );\r\n-\r\n-\t\t\tif ( $profile_id ) {\r\n-\t\t\t\t$profile_page = get_post( $profile_id );\r\n-\r\n-\t\t\t\t$description = lp_format_page_content( wp_kses_post( $profile_page->post_content ) );\r\n-\t\t\t\tif ( $description ) {\r\n-\t\t\t\t\techo '\u003Cdiv class=\"lp-course-page__content\">' . $description . '\u003C\u002Fdiv>';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-if ( ! function_exists( 'lp_taxonomy_archive_course_description' ) ) {\r\n-\tadd_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_taxonomy_archive_course_description' );\r\n-\r\n-\tfunction lp_taxonomy_archive_course_description() {\r\n-\r\n-\t\tif ( learn_press_is_course_tax() && 0 === absint( get_query_var( 'paged' ) ) ) {\r\n-\t\t\t$term = get_queried_object();\r\n-\r\n-\t\t\tif ( $term && ! empty( $term->description ) ) {\r\n-\t\t\t\techo '\u003Cdiv class=\"lp-archive-course-term-description\">' . lp_format_page_content( wp_kses_post( $term->description ) ) . '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Params to query courses on Archive Course.\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function lp_archive_skeleton_get_args(): array {\r\n-\t$args = [];\r\n-\r\n-\tif ( ! empty( $_GET ) ) {\r\n-\t\t$args = $_GET;\r\n-\t}\r\n-\r\n-\tglobal $wp_query;\r\n-\tif ( ! empty( $wp_query->get( 'paged' ) ) ) {\r\n-\t\t$args['paged'] = $wp_query->get( 'paged' );\r\n-\t}\r\n-\r\n-\tif ( learn_press_is_course_category() || learn_press_is_course_tag() ) {\r\n-\t\t$cat = get_queried_object();\r\n-\r\n-\t\t\u002F\u002F Info of page\r\n-\t\tif ( learn_press_is_course_category() ) {\r\n-\t\t\t$args['page_term_id_current'] = $cat->term_id;\r\n-\t\t} elseif ( learn_press_is_course_tag() ) {\r\n-\t\t\t$args['page_tag_id_current'] = $cat->term_id;\r\n-\t\t}\r\n-\r\n-\t\t$args['page_term_url'] = get_term_link( $cat );\r\n-\t}\r\n-\r\n-\t$args = apply_filters( 'lp\u002Ftemplate\u002Farchive-course\u002Fskeleton\u002Fargs', $args );\r\n-\tif ( ! is_array( $args ) ) {\r\n-\t\t$args = [];\r\n-\t}\r\n-\r\n-\treturn LP_Helper::sanitize_params_submitted( $args, 'sanitize_text_field' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * All functions for LearnPress template\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FFunctions\n+ * @version 1.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+if ( ! function_exists( 'learn_press_add_course_buttons' ) ) {\n+\tfunction learn_press_add_course_buttons() {\n+\t\t_deprecated_function( __FUNCTION__, '4.3.2.4' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_remove_course_buttons' ) ) {\n+\tfunction learn_press_remove_course_buttons() {\n+\t\t_deprecated_function( __FUNCTION__, '4.3.2.4' );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_get_course_tabs' ) ) {\n+\t\u002F**\n+\t * Return an array of tabs display in single course page.\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tfunction learn_press_get_course_tabs() {\n+\t\t$courseModel = CourseModel::find( get_the_ID(), true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn [];\n+\t\t}\n+\n+\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\n+\t\t$defaults               = [];\n+\t\t$defaults['overview']   = [\n+\t\t\t'title'    => esc_html__( 'Overview', 'learnpress' ),\n+\t\t\t'priority' => 10,\n+\t\t\t'callback' => LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Foverview.php' ),\n+\t\t];\n+\t\t$defaults['curriculum'] = [\n+\t\t\t'title'    => esc_html__( 'Curriculum', 'learnpress' ),\n+\t\t\t'priority' => 30,\n+\t\t\t'callback' => function () use ( $courseModel, $userModel ) {\n+\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\n+\t\t\t},\n+\t\t];\n+\t\t$defaults['instructor'] = [\n+\t\t\t'title'    => esc_html__( 'Instructor', 'learnpress' ),\n+\t\t\t'priority' => 40,\n+\t\t\t'callback' => LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Finstructor.php' ),\n+\t\t];\n+\n+\t\t$faq = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FAQS, [] );\n+\t\tif ( ! empty( $faq ) ) {\n+\t\t\t$defaults['faqs'] = [\n+\t\t\t\t'title'    => esc_html__( 'FAQs', 'learnpress' ),\n+\t\t\t\t'priority' => 50,\n+\t\t\t\t'callback' => function () use ( $courseModel ) {\n+\t\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t\t\techo $singleCourseTemplate->html_faqs( $courseModel, [ 'show_heading' => false ] );\n+\t\t\t\t},\n+\t\t\t];\n+\t\t}\n+\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t$html_material        = $singleCourseTemplate->html_material( $courseModel, $userModel, [ 'show_heading' => false ] );\n+\t\tif ( ! empty( $html_material ) ) {\n+\t\t\t$defaults['materials'] = [\n+\t\t\t\t'title'    => esc_html__( 'Materials', 'learnpress' ),\n+\t\t\t\t'priority' => 45,\n+\t\t\t\t'callback' => function () use ( $html_material ) {\n+\t\t\t\t\techo $html_material;\n+\t\t\t\t},\n+\t\t\t];\n+\t\t}\n+\n+\t\t\u002F\u002F @since 4.2.8.7.1 update new parameter $courseModel\n+\t\t$tabs = apply_filters( 'learn-press\u002Fcourse-tabs', $defaults, $courseModel );\n+\n+\t\tif ( ! empty( $tabs ) ) {\n+\t\t\t$has_tab_active = false;\n+\n+\t\t\t\u002F\u002F sort tabs by priority, from low to high\n+\t\t\tuasort(\n+\t\t\t\t$tabs,\n+\t\t\t\tfunction ( $a, $b ) {\n+\t\t\t\t\t$priority1 = $a['priority'] ?? 1;\n+\t\t\t\t\t$priority2 = $b['priority'] ?? 2;\n+\n+\t\t\t\t\treturn ( $priority1 \u003C $priority2 ) ? - 1 : 1;\n+\t\t\t\t}\n+\t\t\t);\n+\n+\t\t\tforeach ( $tabs as $k => $v ) {\n+\t\t\t\t$v['id'] = $v['id'] ?? 'tab-' . $k;\n+\t\t\t\tif ( ! empty( $v['active'] ) ) {\n+\t\t\t\t\t$has_tab_active = true;\n+\t\t\t\t}\n+\n+\t\t\t\t$tabs[ $k ] = $v;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if there is no tab active, set first tab active\n+\t\t\tif ( ! $has_tab_active ) {\n+\t\t\t\t\u002F\u002F set first tab active\n+\t\t\t\t$first_key = array_key_first( $tabs );\n+\t\t\t\tif ( $first_key ) {\n+\t\t\t\t\t$tabs[ $first_key ]['active'] = true;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $tabs;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_content_item_summary_question' ) ) {\n+\tfunction learn_press_content_item_summary_question() {\n+\t\t$quiz     = LP_Global::course_item_quiz();\n+\t\t$question = $quiz->get_viewing_question();\n+\n+\t\tif ( $question ) {\n+\t\t\t$course      = learn_press_get_course();\n+\t\t\t$user        = learn_press_get_current_user();\n+\t\t\t$answered    = false;\n+\t\t\t$course_data = $user->get_course_data( $course->get_id() );\n+\t\t\t$user_quiz   = $course_data->get_item_quiz( $quiz->get_id() );\n+\n+\t\t\tif ( $user_quiz ) {\n+\t\t\t\t$answered = $user_quiz->get_question_answer( $question->get_id() );\n+\t\t\t\t$question->show_correct_answers(\n+\t\t\t\t\t$user->has_checked_answer(\n+\t\t\t\t\t\t$question->get_id(),\n+\t\t\t\t\t\t$quiz->get_id(),\n+\t\t\t\t\t\t$course->get_id()\n+\t\t\t\t\t) ? 'yes' : false\n+\t\t\t\t);\n+\t\t\t\t$question->disable_answers( $user_quiz->get_status() == 'completed' ? 'yes' : false );\n+\t\t\t}\n+\n+\t\t\t$question->render( $answered );\n+\t\t}\n+\t}\n+}\n+\n+\n+if ( ! function_exists( 'learn_press_content_item_body_class' ) ) {\n+\t\u002F\u002F Add more assets into page that displaying content of an item\n+\tadd_filter( 'body_class', 'learn_press_content_item_body_class', 10 );\n+\n+\tfunction learn_press_content_item_body_class( $classes ) {\n+\t\tglobal $lp_course_item;\n+\n+\t\tif ( wp_is_mobile() ) {\n+\t\t\t$sidebar_toggle_class = 'lp-sidebar-toggle__close';\n+\t\t} else {\n+\t\t\t$sidebar_toggle_class = learn_press_cookie_get( 'sidebar-toggle' ) ? 'lp-sidebar-toggle__close' : 'lp-sidebar-toggle__open';\n+\t\t}\n+\n+\t\tif ( $lp_course_item ) {\n+\t\t\t$classes[] = 'course-item-popup';\n+\t\t\t$classes[] = 'viewing-course-item';\n+\t\t\t$classes[] = 'viewing-course-item-' . $lp_course_item->get_id();\n+\t\t\t$classes[] = 'course-item-' . $lp_course_item->get_item_type();\n+\t\t\t$classes[] = $sidebar_toggle_class;\n+\t\t}\n+\n+\t\treturn $classes;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_content_item_edit_links' ) ) {\n+\t\u002F**\n+\t * Add edit links for course item question to admin bar.\n+\t *\u002F\n+\tfunction learn_press_content_item_edit_links() {\n+\t\tglobal $wp_admin_bar, $post, $lp_course_item, $lp_quiz_question;\n+\n+\t\tif ( ! ( ! is_admin() && is_user_logged_in() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Edit link for lesson\u002Fquiz or any other course's item.\n+\t\t *\u002F\n+\t\tif ( $lp_course_item ) {\n+\t\t\t$post_type_object = get_post_type_object( $lp_course_item->get_item_type() );\n+\n+\t\t\tif ( $post_type_object && current_user_can(\n+\t\t\t\t\t'edit_post',\n+\t\t\t\t\t$lp_course_item->get_id()\n+\t\t\t\t) && $post_type_object->show_in_admin_bar && get_edit_post_link( $lp_course_item->get_id() ) ) {\n+\t\t\t\t$type = get_post_type( $lp_course_item->get_id() );\n+\n+\t\t\t\tif ( apply_filters( 'learn-press\u002Fedit-admin-bar-button', true, $lp_course_item ) ) {\n+\t\t\t\t\t$wp_admin_bar->add_menu(\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'id'    => 'edit-' . $type,\n+\t\t\t\t\t\t\t'title' => $post_type_object->labels->edit_item,\n+\t\t\t\t\t\t\t'href'  => get_edit_post_link( $lp_course_item->get_id() ),\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Edit link for quiz's question.\n+\t\t *\u002F\n+\t\tif ( $lp_quiz_question ) {\n+\t\t\t$post_type_object = get_post_type_object( $lp_quiz_question->get_item_type() );\n+\t\t\t$edit_post_link   = get_edit_post_link( $lp_quiz_question->get_id() );\n+\n+\t\t\tif ( $post_type_object && current_user_can(\n+\t\t\t\t\t'edit_post',\n+\t\t\t\t\t$lp_quiz_question->get_id()\n+\t\t\t\t) && $post_type_object->show_in_admin_bar && $edit_post_link ) {\n+\t\t\t\t$type = get_post_type( $lp_quiz_question->get_id() );\n+\t\t\t\t$wp_admin_bar->add_menu(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'id'    => 'edit-' . $type,\n+\t\t\t\t\t\t'title' => $post_type_object->labels->edit_item,\n+\t\t\t\t\t\t'href'  => $edit_post_link,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+add_filter( 'admin_bar_menu', 'learn_press_content_item_edit_links', 90 );\n+\n+if ( ! function_exists( 'learn_press_single_quiz_args' ) ) {\n+\tfunction learn_press_single_quiz_args() {\n+\t\t$args = array();\n+\n+\t\tif ( LP_PAGE_QUIZ !== LP_Page_Controller::page_current() ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$quiz   = LP_Global::course_item_quiz();\n+\t\t$course = learn_press_get_course();\n+\t\t$user   = learn_press_get_current_user();\n+\t\tif ( $quiz && $course ) {\n+\t\t\t$course_id = $course->get_id();\n+\t\t\t\u002F\u002F$user_quiz = $user->get_item_data( $quiz->get_id(), $course_id );\n+\n+\t\t\t\u002F*if ( $user_quiz ) {\n+\t\t\t\t$remaining_time = $user_quiz->get_time_remaining();\n+\t\t\t} else {\n+\t\t\t\t$remaining_time = false;\n+\t\t\t}*\u002F\n+\n+\t\t\t$args = array(\n+\t\t\t\t'id'                  => $quiz->get_id(),\n+\t\t\t\t\u002F\u002F'totalTime'           => -1,\n+\t\t\t\t\u002F\u002F'remainingTime'       => $remaining_time ? $remaining_time->get() : $quiz->get_duration()->get(),\n+\t\t\t\t'status'              => $user->get_item_status( $quiz->get_id(), $course_id ),\n+\t\t\t\t'checkNorequizenroll' => $course->is_no_required_enroll(),\n+\t\t\t\t'navigationPosition'  => LP_Settings::get_option( 'navigation_position', 'yes' ),\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Flocalize_script\u002Fquiz', $args, $user, $course, $quiz );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_single_document_title_parts' ) ) {\n+\t\u002F**\n+\t * Custom document title depending on LP current page.\n+\t * E.g: Single course, profile, etc...\n+\t *\n+\t * @param array $title\n+\t *\n+\t * @return array\n+\t * @since 3.0.0\n+\t * @version 3.0.1\n+\t *\u002F\n+\tfunction learn_press_single_document_title_parts( $title ) {\n+\t\tif ( learn_press_is_course() ) {\n+\t\t\t$item = LP_Global::course_item();\n+\n+\t\t\tif ( $item ) {\n+\t\t\t\t$title['title'] = join(\n+\t\t\t\t\t' ',\n+\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t'learn-press\u002Fdocument-course-title-parts',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t$title['title'],\n+\t\t\t\t\t\t\t' &rarr; ',\n+\t\t\t\t\t\t\t$item->get_title(),\n+\t\t\t\t\t\t)\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t} elseif ( learn_press_is_courses() ) {\n+\t\t\tif ( learn_press_is_search() ) {\n+\t\t\t\t$title['title'] = esc_html__( 'Course Search Results', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$title['title'] = esc_html__( 'Courses', 'learnpress' );\n+\t\t\t}\n+\t\t} elseif ( LP_Page_Controller::is_page_profile() ) {\n+\t\t\t$profile  = LP_Profile::instance();\n+\t\t\t$tab_slug = $profile->get_current_tab();\n+\t\t\t$tab      = $profile->get_tab_at( $tab_slug );\n+\t\t\t$page_id  = learn_press_get_page_id( 'profile' );\n+\n+\t\t\tif ( $page_id ) {\n+\t\t\t\t$page_title = get_the_title( $page_id );\n+\t\t\t} else {\n+\t\t\t\t$page_title = '';\n+\t\t\t}\n+\n+\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\n+\t\t\t\t$title['title'] = join(\n+\t\t\t\t\t' ',\n+\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t'learn-press\u002Fdocument-profile-title-parts',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t$page_title,\n+\t\t\t\t\t\t\t'&rarr;',\n+\t\t\t\t\t\t\t$tab->get( 'title' ),\n+\t\t\t\t\t\t)\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $title;\n+\t}\n+}\n+\n+\u002F\u002F @deprecated 4.2.7.3\n+\u002F*if ( ! function_exists( 'learn_press_course_item_class' ) ) {\n+\tfunction learn_press_course_item_class( $item_id, $course_id = 0, $class = null ) {\n+\t\tswitch ( get_post_type( $item_id ) ) {\n+\t\t\tcase 'lp_lesson':\n+\t\t\t\tlearn_press_course_lesson_class( $item_id, $course_id, $class );\n+\t\t\t\tbreak;\n+\t\t\tcase 'lp_quiz':\n+\t\t\t\tlearn_press_course_quiz_class( $item_id, $course_id, $class );\n+\t\t\t\tbreak;\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F\u002F @deprecated 4.2.7.3\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_lesson_class' ) ) {\n+\u002F\u002F  \u002F**\n+\u002F\u002F   * The class of lesson in course curriculum\n+\u002F\u002F   *\n+\u002F\u002F   * @param int          $lesson_id\n+\u002F\u002F   * @param int          $course_id\n+\u002F\u002F   * @param array|string $class\n+\u002F\u002F   * @param boolean      $echo\n+\u002F\u002F   *\n+\u002F\u002F   * @return mixed\n+\u002F\u002F   *\u002F\n+\u002F\u002F  function learn_press_course_lesson_class( $lesson_id = null, $course_id = 0, $class = null, $echo = true ) {\n+\u002F\u002F      $user = learn_press_get_current_user();\n+\u002F\u002F\n+\u002F\u002F      if ( ! $course_id ) {\n+\u002F\u002F          $course_id = get_the_ID();\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $course = learn_press_get_course( $course_id );\n+\u002F\u002F      if ( ! $course ) {\n+\u002F\u002F          return '';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      if ( is_string( $class ) && $class ) {\n+\u002F\u002F          $class = preg_split( '!\\s+!', $class );\n+\u002F\u002F      } else {\n+\u002F\u002F          $class = array();\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $classes = array(\n+\u002F\u002F          'course-lesson course-item course-item-' . $lesson_id,\n+\u002F\u002F      );\n+\u002F\u002F\n+\u002F\u002F      $user   = learn_press_get_current_user();\n+\u002F\u002F      $status = $user->get_item_status( $lesson_id );\n+\u002F\u002F\n+\u002F\u002F      if ( $status ) {\n+\u002F\u002F          $classes[] = \"item-has-status item-{$status}\";\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      if ( $lesson_id && $course->is_current_item( $lesson_id ) ) {\n+\u002F\u002F          $classes[] = 'item-current';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      if ( learn_press_is_course() ) {\n+\u002F\u002F          if ( $course->is_free() ) {\n+\u002F\u002F              $classes[] = 'free-item';\n+\u002F\u002F          }\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $lesson = LP_Lesson::get_lesson( $lesson_id );\n+\u002F\u002F\n+\u002F\u002F      if ( $lesson && $lesson->is_preview() ) {\n+\u002F\u002F          $classes[] = 'preview-item';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $classes = array_unique( array_merge( $classes, $class ) );\n+\u002F\u002F\n+\u002F\u002F      if ( $echo ) {\n+\u002F\u002F          echo 'class=\"' . implode( ' ', $classes ) . '\"';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      return $classes;\n+\u002F\u002F  }\n+\u002F\u002F}\n+\n+\u002F\u002F @deprecated 4.2.7.3\n+\u002F\u002Fif ( ! function_exists( 'learn_press_course_quiz_class' ) ) {\n+\u002F\u002F  \u002F**\n+\u002F\u002F   * The class of lesson in course curriculum\n+\u002F\u002F   *\n+\u002F\u002F   * @param int          $quiz_id\n+\u002F\u002F   * @param int          $course_id\n+\u002F\u002F   * @param string|array $class\n+\u002F\u002F   * @param boolean      $echo\n+\u002F\u002F   *\n+\u002F\u002F   * @return mixed\n+\u002F\u002F   *\u002F\n+\u002F\u002F  function learn_press_course_quiz_class( $quiz_id = null, $course_id = 0, $class = null, $echo = true ) {\n+\u002F\u002F      $user = learn_press_get_current_user();\n+\u002F\u002F\n+\u002F\u002F      if ( ! $course_id ) {\n+\u002F\u002F          $course_id = get_the_ID();\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      if ( is_string( $class ) && $class ) {\n+\u002F\u002F          $class = preg_split( '!\\s+!', $class );\n+\u002F\u002F      } else {\n+\u002F\u002F          $class = array();\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $course = learn_press_get_course( $course_id );\n+\u002F\u002F\n+\u002F\u002F      if ( ! $course ) {\n+\u002F\u002F          return '';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $classes = array(\n+\u002F\u002F          'course-quiz course-item course-item-' . $quiz_id,\n+\u002F\u002F      );\n+\u002F\u002F\n+\u002F\u002F      $status = $user->get_item_status( $quiz_id );\n+\u002F\u002F\n+\u002F\u002F      if ( $status ) {\n+\u002F\u002F          $classes[] = \"item-has-status item-{$status}\";\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      if ( $quiz_id && $course->is_current_item( $quiz_id ) ) {\n+\u002F\u002F          $classes[] = 'item-current';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      \u002F*\n+\u002F\u002F      if ( $user->can_view_item( $quiz_id, $course_id )->flag ) {\n+\u002F\u002F          $classes[] = 'viewable';\n+\u002F\u002F      }*\u002F\n+\u002F\u002F\n+\u002F\u002F      if ( $course->get_evaluation_type() == 'evaluate_final_quiz' && $course->is_final_quiz( $quiz_id ) ) {\n+\u002F\u002F          $classes[] = 'final-quiz';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      $classes = array_unique( array_merge( $classes, $class ) );\n+\u002F\u002F\n+\u002F\u002F      if ( $echo ) {\n+\u002F\u002F          echo 'class=\"' . implode( ' ', $classes ) . '\"';\n+\u002F\u002F      }\n+\u002F\u002F\n+\u002F\u002F      return $classes;\n+\u002F\u002F  }\n+\u002F\u002F}\n+\n+if ( ! function_exists( 'learn_press_course_class' ) ) {\n+\t\u002F**\n+\t * Append new class to course post type\n+\t *\n+\t * @param $classes\n+\t * @param $class\n+\t * @param $post_id\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tfunction learn_press_course_class( $classes, $class, $post_id = '' ) {\n+\t\tif ( is_learnpress() ) {\n+\t\t\t$classes = (array) $classes;\n+\t\t}\n+\n+\t\tif ( $post_id === 0 ) {\n+\t\t\t$classes[] = 'page type-page';\n+\t\t}\n+\n+\t\tif ( ! $post_id || 'lp_course' !== get_post_type( $post_id ) ) {\n+\t\t\treturn $classes;\n+\t\t}\n+\n+\t\t$classes[] = 'course';\n+\n+\t\treturn apply_filters( 'learn_press_course_class', $classes );\n+\t}\n+}\n+\n+function learn_press_setup_user() {\n+\t$GLOBALS['lp_user'] = learn_press_get_current_user();\n+}\n+\n+\u002F\u002Fadd_action( 'init', 'learn_press_setup_user', 1000 );\n+\n+\u002F**\n+ * Display a message immediately with out push into queue\n+ *\n+ * @param        $message\n+ * @param string $type\n+ *\n+ * @Todo tungnx review code.\n+ *\u002F\n+\n+function learn_press_display_message( $message, $type = 'success' ) {\n+\t$messages = learn_press_session_get( learn_press_session_message_id() );\n+\tlearn_press_session_set( learn_press_session_message_id(), null );\n+\n+\t\u002F\u002F add new notice and display\n+\tlearn_press_add_message( $message, $type );\n+\techo learn_press_get_messages( true );\n+\n+\t\u002F\u002F store back messages\n+\tlearn_press_session_set( learn_press_session_message_id(), $messages );\n+}\n+\n+\u002F**\n+ * Returns all notices added\n+ *\n+ * @param bool $clear\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_messages( $clear = false ) {\n+\tob_start();\n+\tlearn_press_print_messages( $clear );\n+\n+\treturn ob_get_clean();\n+}\n+\n+\u002F**\n+ * Add new message into queue for displaying.\n+ *\n+ * @param string $message\n+ * @param string $type\n+ * @param array $options\n+ * @param int|bool $current_user . @since 3.0.9 - add for current user only\n+ *\n+ * @deprecated 4.2.2.1\n+ *\u002F\n+function learn_press_add_message( $message, $type = 'success', $options = array(), $current_user = true ) {\n+\tif ( is_string( $options ) ) {\n+\t\t$options = array( 'id' => $options );\n+\t}\n+\n+\t$options = wp_parse_args(\n+\t\t$options,\n+\t\tarray(\n+\t\t\t'id' => '',\n+\t\t)\n+\t);\n+\n+\tif ( $current_user ) {\n+\t\tif ( true === $current_user ) {\n+\t\t\t$current_user = get_current_user_id();\n+\t\t}\n+\t}\n+\n+\t$key = \"messages{$current_user}\";\n+\n+\t$messages = learn_press_session_get( $key );\n+\n+\tif ( empty( $messages[ $type ] ) ) {\n+\t\t$messages[ $type ] = array();\n+\t}\n+\n+\t$messages[ $type ][ $options['id'] ] = array(\n+\t\t'content' => $message,\n+\t\t'options' => $options,\n+\t);\n+\n+\tlearn_press_session_set( $key, $messages );\n+}\n+\n+function learn_press_get_message( $message, $type = 'success' ) {\n+\tob_start();\n+\tlearn_press_display_message( $message, $type );\n+\t$message = ob_get_clean();\n+\n+\treturn $message;\n+}\n+\n+\u002F**\n+ * Set LP message to COOKIE.\n+ *\n+ * @param array $message_data ['status' => 'success\u002Fwarning\u002Ferror', 'content' => 'Message content']\n+ *\n+ * @return void\n+ * @version 1.0.0\n+ * @since 4.2.0\n+ *\u002F\n+function learn_press_set_message( array $message_data = [] ) {\n+\tif ( ! isset( $message_data ['status'] ) ) {\n+\t\terror_log( 'Message data must have status' );\n+\n+\t\treturn;\n+\t}\n+\tif ( ! isset( $message_data ['content'] ) ) {\n+\t\terror_log( 'Message data must have content' );\n+\n+\t\treturn;\n+\t}\n+\n+\t$customer_id      = LP_Session_Handler::instance()->get_customer_id();\n+\t$customer_message = [ $customer_id => $message_data ];\n+\tupdate_option( 'lp-customer-message', $customer_message );\n+}\n+\n+\u002F**\n+ * Show message only one time.\n+ * @return void\n+ * @version 1.0.0\n+ * @since 4.2.0\n+ *\u002F\n+function learn_press_show_message() {\n+\ttry {\n+\t\t$customer_id      = LP_Session_Handler::instance()->get_customer_id();\n+\t\t$message_data     = get_option( 'lp-customer-message' ) ?? [];\n+\t\t$customer_message = $message_data[ $customer_id ] ?? '';\n+\t\tif ( ! $customer_message ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tunset( $message_data[ $customer_id ] );\n+\t\tupdate_option( 'lp-customer-message', $message_data );\n+\t\t\u002F\u002Fdelete_option( 'lp-message' );\n+\t\tTemplate::instance()->get_frontend_template( 'global\u002Flp-message.php', compact( 'customer_message' ) );\n+\t} catch ( Throwable $e ) {\n+\t\terror_log( $e->getMessage() );\n+\t}\n+}\n+\n+add_action( 'learn-press\u002Fbefore-course-item-content', 'learn_press_show_message', 50 );\n+\n+\u002F**\n+ * Remove message added into queue by id and\u002For type.\n+ *\n+ * @param string $id\n+ * @param string|array $type\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+function learn_press_remove_message( $id = '', $type = '' ) {\n+\t$groups = learn_press_session_get( learn_press_session_message_id() );\n+\n+\tif ( ! $groups ) {\n+\t\treturn;\n+\t}\n+\n+\tsettype( $type, 'array' );\n+\n+\tif ( $id ) {\n+\t\tforeach ( $groups as $message_type => $messages ) {\n+\t\t\tif ( ! sizeof( $type ) ) {\n+\t\t\t\tif ( isset( $groups[ $message_type ][ $id ] ) ) {\n+\t\t\t\t\tunset( $groups[ $message_type ][ $id ] );\n+\t\t\t\t}\n+\t\t\t} elseif ( in_array( $message_type, $type ) ) {\n+\t\t\t\tif ( isset( $groups[ $message_type ][ $id ] ) ) {\n+\t\t\t\t\tunset( $groups[ $message_type ][ $id ] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t} elseif ( sizeof( $type ) ) {\n+\t\tforeach ( $type as $t ) {\n+\t\t\tif ( isset( $groups[ $t ] ) ) {\n+\t\t\t\tunset( $groups[ $t ] );\n+\t\t\t}\n+\t\t}\n+\t} else {\n+\t\t$groups = array();\n+\t}\n+\n+\tlearn_press_session_set( learn_press_session_message_id(), $groups );\n+}\n+\n+\u002F**\n+ * Print out the message stored in the queue\n+ *\n+ * @param bool\n+ *\u002F\n+function learn_press_print_messages( $clear = true ) {\n+\t$messages = learn_press_session_get( learn_press_session_message_id() );\n+\tlearn_press_get_template( 'global\u002Fmessage.php', array( 'messages' => $messages ) );\n+\n+\tif ( $clear ) {\n+\t\tlearn_press_session_set( learn_press_session_message_id(), array() );\n+\t}\n+}\n+\n+function learn_press_session_message_id() {\n+\treturn 'messages' . get_current_user_id();\n+}\n+\n+if ( ! function_exists( 'learn_press_page_title' ) ) {\n+\n+\t\u002F**\n+\t * learn_press_page_title function.\n+\t *\n+\t * @param boolean $echo\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tfunction learn_press_page_title( bool $echo = false ): string {\n+\t\t$page_title = '';\n+\n+\t\tif ( is_search() ) {\n+\t\t\t\u002F\u002F Comment by tungnx\n+\t\t\t\u002F*$page_title = sprintf( __( 'Search Results for: &ldquo;%s&rdquo;', 'learnpress' ), get_search_query() );\n+\n+\t\t\tif ( get_query_var( 'paged' ) ) {\n+\t\t\t\t$page_title .= sprintf( __( '&nbsp;&ndash; Page %s', 'learnpress' ), get_query_var( 'paged' ) );\n+\t\t\t}*\u002F\n+\t\t} elseif ( is_tax() ) {\n+\t\t\t$page_title = single_term_title( '', false );\n+\t\t} else {\n+\t\t\t$courses_page_id = learn_press_get_page_id( 'courses' );\n+\t\t\t$page_title      = get_the_title( $courses_page_id );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn_press_page_title', $page_title );\n+\t}\n+}\n+\n+\u002F**\n+ * Get template part.\n+ *\n+ * @param string $slug\n+ * @param string $name\n+ *\n+ * @return  string\n+ *\u002F\n+function learn_press_get_template_part( $slug, $name = '' ) {\n+\t$template = '';\n+\n+\tif ( $name ) {\n+\t\t$template = locate_template(\n+\t\t\tarray(\n+\t\t\t\t\"{$slug}-{$name}.php\",\n+\t\t\t\tlearn_press_template_path() . \"\u002F{$slug}-{$name}.php\",\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F\u002F Get default slug-name.php\n+\tif ( ! $template && $name && file_exists( LP_PLUGIN_PATH . \"\u002Ftemplates\u002F{$slug}-{$name}.php\" ) ) {\n+\t\t$template = LP_PLUGIN_PATH . \"\u002Ftemplates\u002F{$slug}-{$name}.php\";\n+\t}\n+\n+\t\u002F\u002F If template file doesn't exist, look in yourtheme\u002Fslug.php and yourtheme\u002Flearnpress\u002Fslug.php\n+\tif ( ! $template ) {\n+\t\t$template = locate_template( array( \"{$slug}.php\", learn_press_template_path() . \"\u002F{$slug}.php\" ) );\n+\t}\n+\t\u002F\u002F override path of child theme in parent theme - Fix for eduma by tuanta\n+\t$file_ct_in_pr = apply_filters( 'learn_press_child_in_parrent_template_path', '' );\n+\tif ( $file_ct_in_pr && $name ) {\n+\t\t$template_child = locate_template(\n+\t\t\tarray(\n+\t\t\t\t\"{$slug}-{$name}.php\",\n+\t\t\t\t'lp-child-path\u002F' . learn_press_template_path() . '\u002F' . $file_ct_in_pr . \"\u002F{$slug}-{$name}.php\",\n+\t\t\t)\n+\t\t);\n+\t\tif ( $template_child && file_exists( $template_child ) ) {\n+\t\t\t$template = $template_child;\n+\t\t}\n+\t\t\u002F\u002F check in child theme if have filter learn_press_child_in_parrent_template_path\n+\n+\t\t$check_child_theme = get_stylesheet_directory() . '\u002F' . learn_press_template_path() . \"{$slug}-{$name}.php\";\n+\t\tif ( $check_child_theme && file_exists( $check_child_theme ) ) {\n+\t\t\t$template = $check_child_theme;\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Allow 3rd party plugin filter template file from their plugin\n+\tif ( $template ) {\n+\t\t$template = apply_filters( 'learn_press_get_template_part', $template, $slug, $name );\n+\t}\n+\tif ( $template && file_exists( $template ) ) {\n+\t\tload_template( $template, false );\n+\t}\n+\n+\treturn $template;\n+}\n+\n+\u002F**\n+ * Get other templates passing attributes and including the file.\n+ *\n+ * @param string $template_name .\n+ * @param array $args (default: array()) .\n+ * @param string $template_path (default: '').\n+ * @param string $default_path (default: '').\n+ *\n+ * @return void\n+ *\u002F\n+function learn_press_get_template( $template_name = '', $args = array(), $template_path = '', $default_path = '' ) {\n+\tif ( $args && is_array( $args ) ) {\n+\t\textract( $args );\n+\t}\n+\n+\tif ( false === strpos( $template_name, '.php' ) ) {\n+\t\t$template_name .= '.php';\n+\t}\n+\n+\t$located = learn_press_locate_template( $template_name, $template_path, $default_path );\n+\n+\tif ( ! file_exists( $located ) ) {\n+\t\t_doing_it_wrong( __FUNCTION__, sprintf( '\u003Ccode>%s\u003C\u002Fcode> does not exist.', $located ), '2.1' );\n+\n+\t\t$log = sprintf( 'TEMPLATE MISSING: Template %s doesn\\'t exists.', $template_name );\n+\t\terror_log( $log );\n+\n+\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\techo sprintf( '\u003Cspan title=\"%s\" class=\"learn-press-template-warning\">\u003C\u002Fspan>', $log );\n+\t\t}\n+\n+\t\treturn;\n+\t}\n+\n+\t\u002F\u002F Allow 3rd party plugin filter template file from their plugin\n+\t$located = apply_filters(\n+\t\t'learn_press_get_template',\n+\t\t$located,\n+\t\t$template_name,\n+\t\t$args,\n+\t\t$template_path,\n+\t\t$default_path\n+\t);\n+\tif ( $located != '' ) {\n+\t\tdo_action( 'learn_press_before_template_part', $template_name, $template_path, $located, $args );\n+\n+\t\tinclude $located;\n+\n+\t\tdo_action( 'learn_press_after_template_part', $template_name, $template_path, $located, $args );\n+\t}\n+}\n+\n+\u002F**\n+ * Get template content\n+ *\n+ * @param        $template_name\n+ * @param array $args\n+ * @param string $template_path\n+ * @param string $default_path\n+ *\n+ * @return string\n+ * @uses learn_press_get_template();\n+ *\u002F\n+function learn_press_get_template_content( $template_name, $args = array(), $template_path = '', $default_path = '' ) {\n+\tob_start();\n+\tlearn_press_get_template( $template_name, $args, $template_path, $default_path );\n+\n+\treturn ob_get_clean();\n+}\n+\n+\u002F**\n+ * Locate a template and return the path for inclusion.\n+ *\n+ * @param string $template_name\n+ * @param string $template_path (default: '')\n+ * @param string $default_path (default: '')\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_locate_template( $template_name, $template_path = '', $default_path = '' ) {\n+\tif ( ! $template_path ) {\n+\t\t$template_path = learn_press_template_path();\n+\t}\n+\n+\tif ( ! $default_path ) {\n+\t\t$default_path = LP_PLUGIN_PATH . 'templates\u002F';\n+\t}\n+\n+\t\u002F**\n+\t * Disable override templates in theme by default since LP 4.0.0\n+\t *\u002F\n+\tif ( learn_press_override_templates() ) {\n+\t\t$template = locate_template(\n+\t\t\tarray(\n+\t\t\t\ttrailingslashit( $template_path ) . $template_name,\n+\t\t\t\t$template_name,\n+\t\t\t)\n+\t\t);\n+\t\t\u002F\u002F override path of child theme in parent theme - Fix for eduma by tuanta\n+\t\t$file_ct_in_pr = apply_filters( 'learn_press_child_in_parrent_template_path', '' );\n+\t\tif ( $file_ct_in_pr ) {\n+\t\t\t$template_child = locate_template(\n+\t\t\t\tarray(\n+\t\t\t\t\ttrailingslashit( 'lp-child-path\u002F' . $template_path . '\u002F' . $file_ct_in_pr ) . $template_name,\n+\t\t\t\t\t$template_name,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tif ( $template_child && file_exists( $template_child ) ) {\n+\t\t\t\t$template = $template_child;\n+\t\t\t}\n+\t\t\t\u002F\u002F check in child theme if have filter learn_press_child_in_parrent_template_path\n+\t\t\t$check_child_theme = get_stylesheet_directory() . '\u002F' . trailingslashit( $template_path ) . $template_name;\n+\t\t\tif ( $check_child_theme && file_exists( $check_child_theme ) ) {\n+\t\t\t\t$template = $check_child_theme;\n+\t\t\t}\n+\t\t}\n+\t}\n+\tif ( ! isset( $template ) || ! $template ) {\n+\t\t$template = trailingslashit( $default_path ) . $template_name;\n+\t}\n+\n+\treturn apply_filters( 'learn_press_locate_template', $template, $template_name, $template_path );\n+}\n+\n+\u002F**\n+ * Returns the name of folder contains override template files in theme\n+ *\n+ * @return string\n+ * @since 3.0.0\n+ * @version 1.0.1\n+ *\u002F\n+function learn_press_template_path(): string {\n+\t$lp_folder_name_override = apply_filters( 'learn_press_template_path', LP_PLUGIN_FOLDER_NAME );\n+\tif ( ! is_string( $lp_folder_name_override ) ) {\n+\t\t$lp_folder_name_override = LP_PLUGIN_FOLDER_NAME;\n+\t}\n+\n+\treturn $lp_folder_name_override;\n+}\n+\n+\u002F**\n+ * Disable override templates in theme by default\n+ *\n+ * @return bool\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_override_templates() {\n+\treturn apply_filters( 'learn-press\u002Foverride-templates', false );\n+}\n+\n+\u002F**\n+ * Get html view path for admin to display\n+ *\n+ * @param $name\n+ * @param $plugin_file\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_admin_view( $name, $plugin_file = null ) {\n+\tif ( ! preg_match( '\u002F\\.(html|php)$\u002F', $name ) ) {\n+\t\t$name .= '.php';\n+\t}\n+\tif ( $plugin_file ) {\n+\t\t$view = dirname( $plugin_file ) . '\u002Finc\u002Fadmin\u002Fviews\u002F' . $name;\n+\t} else {\n+\t\t$view = LearnPress::instance()->plugin_path( 'inc\u002Fadmin\u002Fviews\u002F' . $name );\n+\t}\n+\n+\treturn apply_filters( 'learn_press_admin_view', $view, $name );\n+}\n+\n+function learn_press_admin_view_content( $name, $args = array() ) {\n+\treturn learn_press_admin_view( $name, $args, false, true );\n+}\n+\n+\u002F**\n+ * Find a full path of a view and display the content in admin\n+ *\n+ * @param            $name\n+ * @param array $args\n+ * @param bool|false $include_once\n+ * @param bool\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_admin_view( $name, $args = array(), $include_once = false, $return = false ) {\n+\t$view = learn_press_get_admin_view( $name, ! empty( $args['plugin_file'] ) ? $args['plugin_file'] : null );\n+\n+\tif ( file_exists( $view ) ) {\n+\n+\t\tob_start();\n+\n+\t\tis_array( $args ) && extract( $args );\n+\n+\t\tdo_action( 'learn_press_before_display_admin_view', $name, $args );\n+\n+\t\tif ( $include_once ) {\n+\t\t\tinclude_once $view;\n+\t\t} else {\n+\t\t\tinclude $view;\n+\t\t}\n+\n+\t\tdo_action( 'learn_press_after_display_admin_view', $name, $args );\n+\t\t$output = ob_get_clean();\n+\n+\t\tif ( ! $return ) {\n+\t\t\tlearn_press_echo_vuejs_write_on_php( $output );\n+\t\t}\n+\n+\t\treturn $return ? $output : true;\n+\t}\n+\n+\treturn false;\n+}\n+\n+if ( ! function_exists( 'learn_press_is_404' ) ) {\n+\t\u002F**\n+\t * Set header is 404\n+\t * @deprecated 4.2.8\n+\t *\u002F\n+\tfunction learn_press_is_404() {\n+\t\t_deprecated_function( __FUNCTION__, '4.2.8', 'LP_Page_Controller::set_page_404' );\n+\n+\t\treturn;\n+\t\tglobal $wp_query;\n+\t\t$wp_query->set_404();\n+\t\tstatus_header( 404 );\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_404_page' ) ) {\n+\t\u002F**\n+\t * Display 404 page\n+\t *\n+\t * @deprecated 4.2.8\n+\t *\u002F\n+\tfunction learn_press_404_page() {\n+\t\t_deprecated_function( __FUNCTION__, '4.2.8', 'LP_Page_Controller::set_page_404' );\n+\n+\t\treturn;\n+\t\tlearn_press_is_404();\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_generate_template_information' ) ) {\n+\tfunction learn_press_generate_template_information( $template_name, $template_path, $located, $args ) {\n+\t\t$debug = learn_press_get_request( 'show-template-location' );\n+\t\tif ( $debug == 'on' ) {\n+\t\t\techo '\u003C!-- Template Location:' . str_replace( array( LP_PLUGIN_PATH, ABSPATH ), '', $located ) . ' -->';\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_course_remaining_time' ) ) {\n+\t\u002F**\n+\t * Show the time remain of a course\n+\t *\u002F\n+\tfunction learn_press_course_remaining_time() {\n+\t\t$user = learn_press_get_current_user();\n+\t\tif ( ! $user->has_finished_course( get_the_ID() ) && $text = learn_press_get_course( get_the_ID() )->get_user_duration_html( $user->get_id() ) ) {\n+\t\t\tlearn_press_display_message( $text );\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_item_meta_type' ) ) {\n+\tfunction learn_press_item_meta_type( $course, $item ) {\n+\t\t?>\n+\n+\t\t\u003C?php if ( $item->post_type == 'lp_quiz' ) { ?>\n+\n+\t\t\t\u003Cspan class=\"lp-label lp-label-quiz\">\u003C?php _e( 'Quiz', 'learnpress' ); ?>\u003C\u002Fspan>\n+\n+\t\t\t\u003C?php if ( $course->final_quiz == $item->ID ) { ?>\n+\n+\t\t\t\t\u003Cspan class=\"lp-label lp-label-final\">\u003C?php _e( 'Final', 'learnpress' ); ?>\u003C\u002Fspan>\n+\n+\t\t\t\u003C?php } ?>\n+\n+\t\t\u003C?php } elseif ( $item->post_type == 'lp_lesson' ) { ?>\n+\n+\t\t\t\u003Cspan class=\"lp-label lp-label-lesson\">\u003C?php _e( 'Lesson', 'learnpress' ); ?>\u003C\u002Fspan>\n+\t\t\t\u003C?php if ( get_post_meta( $item->ID, '_lp_preview', true ) == 'yes' ) { ?>\n+\n+\t\t\t\t\u003Cspan class=\"lp-label lp-label-preview\">\u003C?php _e( 'Preview', 'learnpress' ); ?>\u003C\u002Fspan>\n+\n+\t\t\t\u003C?php } ?>\n+\n+\t\t\u003C?php } else { ?>\n+\n+\t\t\t\u003C?php do_action( 'learn_press_item_meta_type', $course, $item ); ?>\n+\n+\t\t\t\u003C?php\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_sort_course_tabs' ) ) {\n+\tfunction learn_press_sort_course_tabs( $tabs = array() ) {\n+\t\tuasort( $tabs, 'learn_press_sort_list_by_priority_callback' );\n+\n+\t\treturn $tabs;\n+\t}\n+}\n+\n+if ( ! function_exists( 'learn_press_get_profile_display_name' ) ) {\n+\t\u002F**\n+\t * Get Display name publicly as in Profile page\n+\t *\u002F\n+\tfunction learn_press_get_profile_display_name( $user ) {\n+\t\tif ( empty( $user ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$id = '';\n+\n+\t\tif ( $user instanceof LP_Abstract_User ) {\n+\t\t\t$id = $user->get_id();\n+\t\t} elseif ( $user instanceof WP_User ) {\n+\t\t\t$id = $user->ID;\n+\t\t} elseif ( is_numeric( $user ) ) {\n+\t\t\t$id = $user;\n+\t\t}\n+\n+\t\tif ( ! isset( $id ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$info = get_userdata( $id );\n+\n+\t\treturn $info ? $info->display_name : '';\n+\t}\n+}\n+\n+function learn_press_is_content_item_only() {\n+\treturn ! empty( $_REQUEST['content-item-only'] );\n+}\n+\n+function learn_press_label_html( $label, $type = '' ) {\n+\t?>\n+\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $type ? $type : $label ); ?>\">\n+\t\t\u003C?php echo esc_html( $label ); ?>\n+\t\u003C\u002Fspan>\n+\t\u003C?php\n+}\n+\n+\u002F**\n+ * @param LP_Quiz $item\n+ *\n+ * @deprecated 4.2.3.5\n+ *\u002F\n+function learn_press_quiz_meta_final( $item ) {\n+\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\n+\treturn;\n+\t$course = learn_press_get_course();\n+\n+\tif ( ! $course->is_final_quiz( $item->get_id() ) ) {\n+\t\treturn;\n+\t}\n+\techo '\u003Cspan class=\"item-meta final-quiz\">' . esc_html__( 'Final', 'learnpress' ) . '\u003C\u002Fspan>';\n+}\n+\n+function learn_press_comments_template_query_args( $comment_args ) {\n+\t$post_type = get_post_type( $comment_args['post_id'] );\n+\n+\tif ( $post_type == LP_COURSE_CPT ) {\n+\t\t$comment_args['type__not_in'] = 'review';\n+\t}\n+\n+\treturn $comment_args;\n+}\n+\n+add_filter( 'comments_template_query_args', 'learn_press_comments_template_query_args' );\n+\n+function learn_press_comment_form_logged_in( $html_login ) {\n+\tif ( get_post_type() == LP_COURSE_CPT || get_post_type() == LP_LESSON_CPT ) {\n+\t\t$html_login = '';\n+\t}\n+\n+\treturn $html_login;\n+}\n+\n+add_filter( 'comment_form_logged_in', 'learn_press_comment_form_logged_in' );\n+\n+function learn_press_comment_form_defaults( $defaults ) {\n+\tif ( get_post_type() == LP_COURSE_CPT || get_post_type() == LP_LESSON_CPT ) {\n+\t\t$defaults['comment_notes_before'] = '';\n+\t}\n+\n+\treturn $defaults;\n+}\n+\n+add_filter( 'comment_form_defaults', 'learn_press_comment_form_defaults' );\n+\n+function learn_press_filter_get_comments_number( $count, $post_id = 0 ) {\n+\tglobal $wpdb;\n+\n+\tif ( ! $post_id ) {\n+\t\t$post_id = get_the_ID();\n+\t\tif ( ! $post_id ) {\n+\t\t\treturn $count;\n+\t\t}\n+\t}\n+\n+\tif ( get_post_type( $post_id ) == LP_COURSE_CPT ) {\n+\t\t$sql = $wpdb->prepare(\n+\t\t\t' SELECT count(*) '\n+\t\t\t. \" FROM {$wpdb->comments} \"\n+\t\t\t. ' WHERE comment_post_ID = %d '\n+\t\t\t. ' AND comment_approved = 1 '\n+\t\t\t. ' AND comment_type != %s ',\n+\t\t\t$post_id,\n+\t\t\t'review'\n+\t\t);\n+\n+\t\t$count = $wpdb->get_var( $sql );\n+\t}\n+\n+\treturn $count;\n+}\n+\n+add_filter( 'get_comments_number', 'learn_press_filter_get_comments_number' );\n+\n+\u002F**\n+ * Add custom classes to body tag class name\n+ *\n+ * @param array $classes\n+ *\n+ * @return array\n+ *\n+ * @since 3.0.0\n+ * @Todo tungnx review to remove\n+ * @deprecated 4.2.3\n+ *\u002F\n+function learn_press_body_classes( $classes ) {\n+\tif ( is_learnpress() ) {\n+\t\t$classes[] = get_stylesheet();\n+\t\t$classes[] = 'learnpress';\n+\t\t$classes[] = 'learnpress-page';\n+\t}\n+\n+\treturn $classes;\n+}\n+\n+\u002F\u002Fadd_filter( 'body_class', 'learn_press_body_classes', 10 );\n+\n+\u002F**\n+ * Return true if user is learning a course\n+ *\n+ * @param int $course_id\n+ *\n+ * @return bool\n+ * @since 3.0\n+ * @version 1.0.1\n+ *\u002F\n+function learn_press_is_learning_course( int $course_id = 0 ): bool {\n+\t$is_learning = false;\n+\t$user        = learn_press_get_current_user();\n+\t$course      = learn_press_get_course( $course_id );\n+\tif ( ! $course ) {\n+\t\treturn $is_learning;\n+\t}\n+\n+\tif ( $user ) {\n+\t\treturn $user->has_enrolled_or_finished( $course_id );\n+\t}\n+\n+\tif ( $course->is_no_required_enroll() ) {\n+\t\t$is_learning = true;\n+\t}\n+\n+\treturn apply_filters( 'lp\u002Fis-learning-course', $is_learning, $course_id );\n+}\n+\n+function learn_press_content_item_summary_class( $more = '', $echo = true ) {\n+\t$classes = array( 'content-item-summary' );\n+\t$classes = LP_Helper::merge_class( $classes, $more );\n+\t$classes = apply_filters( 'learn-press\u002Fcontent-item-summary-class', $classes );\n+\t$output  = 'class=\"' . esc_attr( join( ' ', $classes ) ) . '\"';\n+\n+\tif ( $echo ) {\n+\t\techo wp_kses_post( $output );\n+\t}\n+\n+\treturn $output;\n+}\n+\n+\u002F**\n+ * @deprecated 4.2.3.1\n+ *\u002F\n+function learn_press_content_item_summary_classes( $classes ) {\n+\t_deprecated_function( __FUNCTION__, '4.2.3.1' );\n+\t$item = LP_Global::course_item();\n+\n+\tif ( ! $item ) {\n+\t\treturn $classes;\n+\t}\n+\n+\tif ( $item->get_post_type() !== LP_LESSON_CPT ) {\n+\t\treturn $classes;\n+\t}\n+\n+\treturn $classes;\n+}\n+\n+function learn_press_maybe_load_comment_js() {\n+\t$item = LP_Global::course_item();\n+\n+\tif ( $item ) {\n+\t\twp_enqueue_script( 'comment-reply' );\n+\t}\n+}\n+\n+add_action( 'wp_enqueue_scripts', 'learn_press_maybe_load_comment_js' );\n+\n+\u002F**\n+ * Get list layouts archive course setting\n+ *\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+function learn_press_courses_layouts() {\n+\treturn apply_filters(\n+\t\t'learnpress\u002Farchive-courses-layouts',\n+\t\t[\n+\t\t\t'grid' => __( 'Grid', 'learnpress' ),\n+\t\t\t'list' => __( 'List', 'learnpress' ),\n+\t\t]\n+\t);\n+}\n+\n+\u002F**\n+ * Get layout template for archive course page.\n+ *\n+ * @return mixed\n+ * @since 3.3.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+function learn_press_get_courses_layout() {\n+\t$layout = LP_Request::get_cookie( 'courses-layout' );\n+\n+\tif ( ! $layout ) {\n+\t\t$layout = LP_Settings::get_option( 'archive_courses_layout', 'list' );\n+\t}\n+\n+\treturn $layout;\n+}\n+\n+function learn_press_register_sidebars() {\n+\tregister_sidebar(\n+\t\tarray(\n+\t\t\t'name'          => esc_html__( 'Course Sidebar', 'learnpress' ),\n+\t\t\t'id'            => 'course-sidebar',\n+\t\t\t'description'   => esc_html__( 'Widgets in this area will be shown in a single course', 'learnpress' ),\n+\t\t\t'before_widget' => '\u003Cdiv id=\"%1$s\" class=\"widget %2$s\">',\n+\t\t\t'after_widget'  => '\u003C\u002Fdiv>',\n+\t\t\t'before_title'  => '\u003Ch3 class=\"widget-title\">',\n+\t\t\t'after_title'   => '\u003C\u002Fh3>',\n+\t\t)\n+\t);\n+\tregister_sidebar(\n+\t\tarray(\n+\t\t\t'name'          => esc_html__( 'All Courses', 'learnpress' ),\n+\t\t\t'id'            => 'archive-courses-sidebar',\n+\t\t\t'description'   => esc_html__( 'Widgets in this area will be shown on all course pages', 'learnpress' ),\n+\t\t\t'before_widget' => '\u003Cdiv id=\"%1$s\" class=\"widget %2$s\">',\n+\t\t\t'after_widget'  => '\u003C\u002Fdiv>',\n+\t\t\t'before_title'  => '\u003Ch3 class=\"widget-title\">',\n+\t\t\t'after_title'   => '\u003C\u002Fh3>',\n+\t\t)\n+\t);\n+}\n+\n+add_action( 'widgets_init', 'learn_press_register_sidebars' );\n+\n+function learn_press_setup_theme() {\n+\t$support = array(\n+\t\t'widgets' => array(\n+\t\t\t\u002F\u002F Place three core-defined widgets in the sidebar area.\n+\t\t\t'course-sidebar' => array(\n+\t\t\t\t'xxx' => array( 'lp-widget-course-progress' ),\n+\t\t\t\t'yyy' => array( 'lp-widget-course-info' ),\n+\t\t\t),\n+\t\t),\n+\t);\n+\n+\tadd_theme_support( 'starter-content', $support );\n+}\n+\n+add_action( 'after_setup_theme', 'learn_press_setup_theme' );\n+\n+\u002F**\n+ * @param LP_Question $question\n+ * @param array $args\n+ *\n+ * @return array\n+ * @since 4.x.x\n+ *\u002F\n+function learn_press_get_question_options_for_js( $question, $args = array() ) {\n+\t$args = wp_parse_args(\n+\t\t$args,\n+\t\tarray(\n+\t\t\t'cryptoJsAes'     => false,\n+\t\t\t'include_is_true' => true,\n+\t\t\t'answer'          => false,\n+\t\t)\n+\t);\n+\n+\tif ( $args['cryptoJsAes'] ) {\n+\t\t$options = array_values( $question->get_answer_options() );\n+\n+\t\t$key     = uniqid();\n+\t\t$options = array(\n+\t\t\t'data' => cryptoJsAesEncrypt( $key, wp_json_encode( $options ) ),\n+\t\t\t'key'  => $key,\n+\t\t);\n+\t} else {\n+\t\t$exclude_option_key = array( 'question_id', 'order' );\n+\t\tif ( ! $args['include_is_true'] ) {\n+\t\t\t$exclude_option_key[] = 'is_true';\n+\t\t}\n+\n+\t\t$options = array_values(\n+\t\t\t$question->get_answer_options(\n+\t\t\t\tarray(\n+\t\t\t\t\t'exclude' => $exclude_option_key,\n+\t\t\t\t\t'map'     => array( 'question_answer_id' => 'uid' ),\n+\t\t\t\t\t'answer'  => $args['answer'],\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\treturn $options;\n+}\n+\n+function learn_press_custom_excerpt_length( $length ) {\n+\treturn 20;\n+}\n+\n+\u002F**\n+ * Get post meta with key _lp_duration and translate.\n+ *\n+ * @param int $post_id\n+ * @param string $default\n+ *\n+ * @return string\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_get_post_translated_duration( $post_id, $default = '' ) {\n+\t$duration = get_post_meta( $post_id, '_lp_duration', true );\n+\n+\t$duration_arr = explode( ' ', $duration );\n+\t$duration_str = '';\n+\n+\tif ( count( $duration_arr ) > 1 ) {\n+\t\t$duration_number = $duration_arr[0];\n+\t\t$duration_text   = $duration_arr[1];\n+\n+\t\tswitch ( strtolower( $duration_text ) ) {\n+\t\t\tcase 'minute':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s minute', '%s minutes', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'hour':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s hour', '%s hours', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase 'day':\n+\t\t\t\t$duration_str = sprintf( _n( '%s day', '%s days', $duration_number, 'learnpress' ), $duration_number );\n+\t\t\t\tbreak;\n+\t\t\tcase 'week':\n+\t\t\t\t$duration_str = sprintf(\n+\t\t\t\t\t_n( '%s week', '%s weeks', $duration_number, 'learnpress' ),\n+\t\t\t\t\t$duration_number\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$duration_str = $duration;\n+\t\t}\n+\t}\n+\n+\treturn empty( absint( $duration ) ) ? $default : $duration_str;\n+}\n+\n+\u002F**\n+ * Get level post meta.\n+ *\n+ * @param int $post_id\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_post_level( $post_id ) {\n+\t$level = get_post_meta( $post_id, '_lp_level', true );\n+\n+\treturn apply_filters(\n+\t\t'learn-press\u002Flevel-label',\n+\t\t! empty( $level ) ? lp_course_level()[ $level ] : esc_html__( 'All levels', 'learnpress' ),\n+\t\t$post_id\n+\t);\n+}\n+\n+function lp_course_level() {\n+\treturn apply_filters(\n+\t\t'lp\u002Ftemplate\u002Ffunction\u002Fcourse\u002Flevel',\n+\t\tarray(\n+\t\t\t'all'          => esc_html__( 'All levels', 'learnpress' ),\n+\t\t\t'beginner'     => esc_html__( 'Beginner', 'learnpress' ),\n+\t\t\t'intermediate' => esc_html__( 'Intermediate', 'learnpress' ),\n+\t\t\t'expert'       => esc_html__( 'Expert', 'learnpress' ),\n+\t\t)\n+\t);\n+}\n+\n+\u002F**\n+ * Get slug for logout action in user profile.\n+ *\n+ * @return string\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_profile_logout_slug() {\n+\treturn apply_filters( 'learn-press\u002Fprofile-logout-slug', 'lp-logout' );\n+}\n+\n+function lp_get_email_content( $format, $meta = array(), $field = array() ) {\n+\tif ( $meta && isset( $meta[ $format ] ) ) {\n+\t\t$content = stripslashes( $meta[ $format ] );\n+\t} else {\n+\t\t$template      = ! empty( $field[\"template_{$format}\"] ) ? $field[\"template_{$format}\"] : null;\n+\t\t$template_file = $field['template_base'] . $template;\n+\t\t$content       = LP_WP_Filesystem::instance()->file_get_contents( $template_file );\n+\t}\n+\n+\treturn $content;\n+}\n+\n+function lp_skeleton_animation_html( $count_li = 3, $width = 'random', $styleli = '', $styleul = '' ) {\n+\t?>\n+\t\u003Cul class=\"lp-skeleton-animation\" style=\"\u003C?php echo esc_attr( $styleul ); ?>\">\n+\t\t\u003C?php for ( $i = 0; $i \u003C absint( $count_li ); $i ++ ) : ?>\n+\t\t\t\u003Cli style=\"width: \u003C?php echo esc_attr( $width === 'random' ? wp_rand( 90, 100 ) . '%' : $width ); ?>; \u003C?php echo ! empty( $styleli ) ? $styleli : ''; ?>\">\u003C\u002Fli>\n+\t\t\u003C?php endfor; ?>\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php\n+}\n+\n+add_filter( 'lp_format_page_content', 'wptexturize' );\n+add_filter( 'lp_format_page_content', 'convert_smilies' );\n+add_filter( 'lp_format_page_content', 'convert_chars' );\n+add_filter( 'lp_format_page_content', 'wpautop' );\n+add_filter( 'lp_format_page_content', 'shortcode_unautop' );\n+add_filter( 'lp_format_page_content', 'prepend_attachment' );\n+add_filter( 'lp_format_page_content', 'do_shortcode', 11 );\n+add_filter( 'lp_format_page_content', array( $GLOBALS['wp_embed'], 'run_shortcode' ), 8 );\n+\n+if ( function_exists( 'do_blocks' ) ) {\n+\tadd_filter( 'lp_format_page_content', 'do_blocks', 9 );\n+}\n+\n+function lp_format_page_content( $raw_string ) {\n+\treturn apply_filters( 'lp_format_page_content', $raw_string );\n+}\n+\n+if ( ! function_exists( 'lp_profile_page_content' ) ) {\n+\tfunction lp_profile_page_content() {\n+\t\t$profile_id = learn_press_get_page_id( 'profile' );\n+\n+\t\tif ( $profile_id ) {\n+\t\t\t$profile_page = get_post( $profile_id );\n+\n+\t\t\t\u002F\u002F remove_shortcode( 'learn_press_profile' );\n+\t\t\t$description = lp_format_page_content( wp_kses_post( $profile_page->post_content ) );\n+\n+\t\t\tif ( $description ) {\n+\t\t\t\techo '\u003Cdiv class=\"lp-profile-page__content\">' . $description . '\u003C\u002Fdiv>';\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'lp_archive_course_page_content' ) ) {\n+\tadd_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_archive_course_page_content' );\n+\n+\tfunction lp_archive_course_page_content() {\n+\t\tif ( is_search() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( is_post_type_archive( LP_COURSE_CPT )\n+\t\t\t&& in_array( absint( get_query_var( 'paged' ) ), array( 0, 1 ), true ) ) {\n+\t\t\t$profile_id = learn_press_get_page_id( 'courses' );\n+\n+\t\t\tif ( $profile_id ) {\n+\t\t\t\t$profile_page = get_post( $profile_id );\n+\n+\t\t\t\t$description = lp_format_page_content( wp_kses_post( $profile_page->post_content ) );\n+\t\t\t\tif ( $description ) {\n+\t\t\t\t\techo '\u003Cdiv class=\"lp-course-page__content\">' . $description . '\u003C\u002Fdiv>';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\n+if ( ! function_exists( 'lp_taxonomy_archive_course_description' ) ) {\n+\tadd_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription', 'lp_taxonomy_archive_course_description' );\n+\n+\tfunction lp_taxonomy_archive_course_description() {\n+\n+\t\tif ( learn_press_is_course_tax() && 0 === absint( get_query_var( 'paged' ) ) ) {\n+\t\t\t$term = get_queried_object();\n+\n+\t\t\tif ( $term && ! empty( $term->description ) ) {\n+\t\t\t\techo '\u003Cdiv class=\"lp-archive-course-term-description\">' . lp_format_page_content( wp_kses_post( $term->description ) ) . '\u003C\u002Fdiv>';\n+\t\t\t}\n+\t\t}\n+\t}\n+}\n+\n+\u002F**\n+ * Params to query courses on Archive Course.\n+ *\n+ * @return array\n+ *\u002F\n+function lp_archive_skeleton_get_args(): array {\n+\t$args = [];\n+\n+\tif ( ! empty( $_GET ) ) {\n+\t\t$args = $_GET;\n+\t}\n+\n+\tglobal $wp_query;\n+\tif ( ! empty( $wp_query->get( 'paged' ) ) ) {\n+\t\t$args['paged'] = $wp_query->get( 'paged' );\n+\t}\n+\n+\tif ( learn_press_is_course_category() || learn_press_is_course_tag() ) {\n+\t\t$cat = get_queried_object();\n+\n+\t\t\u002F\u002F Info of page\n+\t\tif ( learn_press_is_course_category() ) {\n+\t\t\t$args['page_term_id_current'] = $cat->term_id;\n+\t\t} elseif ( learn_press_is_course_tag() ) {\n+\t\t\t$args['page_tag_id_current'] = $cat->term_id;\n+\t\t}\n+\n+\t\t$args['page_term_url'] = get_term_link( $cat );\n+\t}\n+\n+\t$args = apply_filters( 'lp\u002Ftemplate\u002Farchive-course\u002Fskeleton\u002Fargs', $args );\n+\tif ( ! is_array( $args ) ) {\n+\t\t$args = [];\n+\t}\n+\n+\treturn LP_Helper::sanitize_params_submitted( $args, 'sanitize_text_field' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-template-hooks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-template-hooks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-template-hooks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-template-hooks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,520 +1,520 @@\n-\u003C?php\r\n-\u002F**\r\n- * Build courses content\r\n- *\u002F\r\n-\r\n-\u002F*****************************************\u002F\r\n-\u002F**                                      *\u002F\r\n-\u002F**            DOCUMENTATION             *\u002F\r\n-\u002F**                                      *\u002F\r\n-\u002F*****************************************\u002F\r\n-\r\n-\u002F**\r\n- * Core template classes: LP_Template_General, LP_Template_Profile, LP_Template_Course.\r\n- *\r\n- * + Get instance of a template: LearnPress::instance()->template( TYPE ) e.g: LearnPress::instance()->template( 'course' )\r\n- * + LearnPress::instance()->template( TYPE )->func(CALLBACK) => hook to an action with function CALLBACK of TYPE class\r\n- * + LearnPress::instance()->template( TYPE )->callback( TEMPLATE ) => hook to an action to c\r\n- *\u002F\r\n-\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * New functions since 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Header and Footer\r\n- *\r\n- * @see LP_Template_General::template_header()\r\n- * @see LP_Template_General::template_footer()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Ftemplate-header', LearnPress::instance()->template( 'general' )->func( 'template_header' ) );\r\n-add_action( 'learn-press\u002Ftemplate-footer', LearnPress::instance()->template( 'general' )->func( 'template_footer' ) );\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fbefore-main-content',\r\n-\tLearnPress::instance()->template( 'general' )->text( '\u003Cdiv class=\"lp-archive-courses\">', 'lp-archive-courses-open' ),\r\n-\t- 100\r\n-);\r\n-\u002F**\r\n- * Course breadcrumb\r\n- *\r\n- * @see LP_Template_General::breadcrumb()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fbefore-main-content', LearnPress::instance()->template( 'general' )->func( 'breadcrumb' ) );\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fafter-main-content',\r\n-\tLearnPress::instance()->template( 'general' )->text( '\u003C\u002Fdiv>', 'lp-archive-courses-close' ),\r\n-\t100\r\n-);\r\n-\r\n-\r\n-\u002F**\r\n- * Course buttons\r\n- * old hook: learn-press\u002Fcourse-buttons\r\n- *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-buttons',\r\n-\tfunction () {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t$course               = CourseModel::find( get_the_ID(), true );\r\n-\t\t$user                 = UserModel::find( get_current_user_id(), true );\r\n-\t\t$userCourseModel      = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );\r\n-\t\t$userCourseTemplate   = UserCourseTemplate::instance();\r\n-\r\n-\t\t\u002F\u002F Button enroll\r\n-\t\techo $singleCourseTemplate->html_btn_enroll_course( $course, $user );\r\n-\t\t\u002F\u002F Button purchase\r\n-\t\techo $singleCourseTemplate->html_btn_purchase_course( $course, $user );\r\n-\t\t\u002F\u002F Button external\r\n-\t\techo '\u003Cdiv style=\"display:flex;flex-direction:column\">';\r\n-\t\techo $singleCourseTemplate->html_btn_external( $course, $user );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t\u002F\u002F Button retake\r\n-\t\t\techo $userCourseTemplate->html_btn_retake( $userCourseModel );\r\n-\t\t\t\u002F\u002F Button continue\r\n-\t\t\techo '\u003Cdiv style=\"margin-bottom: 10px\">';\r\n-\t\t\techo $userCourseTemplate->html_btn_continue( $userCourseModel );\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t\t\u002F\u002F Button finish\r\n-\t\t\techo $userCourseTemplate->html_btn_finish( $userCourseModel );\r\n-\t\t}\r\n-\t},\r\n-\t5\r\n-);\r\n-\r\n-\u002F** BEGIN: Archive course *\u002F\r\n-add_action( 'learn-press\u002Fbefore-courses-loop', LearnPress::instance()->template( 'course' )->func( 'courses_top_bar' ), 10 );\r\n-\r\n-\u002F** BEGIN: Archive course loop item *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fcourses-loop-item-title',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'loop\u002Fcourse\u002Ftitle.php' ),\r\n-\t20\r\n-);\r\n-\r\n-\u002F** END: Archive course loop item *\u002F\r\n-\r\n-\u002F** Archive course pagination *\u002F\r\n-if ( LP_Settings::theme_no_support_load_courses_ajax() ) {\r\n-\tadd_action(\r\n-\t\t'learn-press\u002Fafter-courses-loop',\r\n-\t\tLearnPress::instance()->template( 'course' )->callback( 'loop\u002Fcourse\u002Fpagination.php' )\r\n-\t);\r\n-} else {\r\n-\tadd_action(\r\n-\t\t'learn-press\u002Fafter-courses-loop',\r\n-\t\tfunction () {\r\n-\t\t\t$listCourseTemplate    = ListCoursesTemplate::instance();\r\n-\t\t\t$pagination_type       = LP_Settings::get_option( 'course_pagination_type', 'number' );\r\n-\t\t\t$enableAjaxLoadCourses = LP_Settings_Courses::is_ajax_load_courses();\r\n-\t\t\t$enableNoLoadAjaxFirst = LP_Settings_Courses::is_no_load_ajax_first_courses();\r\n-\t\t\tif ( $enableAjaxLoadCourses && $pagination_type !== 'number' ) {\r\n-\t\t\t\tif ( $enableNoLoadAjaxFirst ) {\r\n-\t\t\t\t\tif ( 'load-more' === $pagination_type ) {\r\n-\t\t\t\t\t\techo $listCourseTemplate->html_pagination_load_more();\r\n-\t\t\t\t\t} elseif ( 'infinite' === $pagination_type ) {\r\n-\t\t\t\t\t\techo $listCourseTemplate->html_pagination_infinite();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $enableAjaxLoadCourses || ( $enableAjaxLoadCourses && $enableNoLoadAjaxFirst ) ) {\r\n-\t\t\t\tTemplate::instance()->get_frontend_template( 'loop\u002Fcourse\u002Fpagination.php' );\r\n-\t\t\t}\r\n-\t\t},\r\n-\t\t10\r\n-\t);\r\n-}\r\n-\u002F** END: Archive course *\u002F\r\n-\r\n-\u002F** BEGIN: Main content of single course *\u002F\r\n-\r\n-\r\n-\u002F\u002F Sidebar and content\r\n-add_action( 'learn-press\u002Fsingle-course-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fcontent' ), 10 );\r\n-\r\n-\u002F\u002F Content\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text(\r\n-\t\t'\u003Cdiv class=\"course-detail-info\"> \u003Cdiv class=\"lp-content-area\"> \u003Cdiv class=\"course-info-left\">',\r\n-\t\t'course-info-left-open'\r\n-\t),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta-primary' ),\r\n-\t10\r\n-);\r\n-add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftitle' ), 10 );\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta-secondary' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text( ' \u003C\u002Fdiv> \u003C\u002Fdiv> \u003C\u002Fdiv>', 'course-info-left-close' ),\r\n-\t15\r\n-);\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text( '\u003Cdiv class=\"lp-entry-content lp-content-area\">', 'lp-entry-content-open' ),\r\n-\t30\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text( '\u003Cdiv class=\"entry-content-left\">', 'entry-content-left-open' ),\r\n-\t35\r\n-);\r\n-\u002F\u002Fadd_action(\r\n-\u002F\u002F  'learn-press\u002Fcourse-content-summary',\r\n-\u002F\u002F  LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes_position_control' ),\r\n-\u002F\u002F  39\r\n-\u002F\u002F);\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 40 );\r\n-\u002F\u002F add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fprogress' ), 40 );\r\n-\u002F\u002F add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'remaining_time' ), 50 );\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Ftabs' ),\r\n-\t60\r\n-);\r\n-\u002F\u002F appear at bottom after enrolled\r\n-add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 70 );\r\n-\r\n-add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_comment_template' ), 75 );\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text( '\u003C!-- end entry content left --> \u003C\u002Fdiv>', 'entry-content-left-close' ),\r\n-\t80\r\n-);\r\n-\r\n-add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsidebar' ), 85 );\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-content-summary',\r\n-\tLearnPress::instance()->template( 'course' )->text( ' \u003C\u002Fdiv>', 'lp-entry-content-close' ),\r\n-\t100\r\n-);\r\n-\r\n-\u002F\u002F Meta\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-meta-primary-left',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Finstructor' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-meta-primary-left',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Fcategory' ),\r\n-\t20\r\n-);\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-meta-secondary-left',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Fduration' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-meta-secondary-left',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Flevel' ),\r\n-\t20\r\n-);\r\n-\u002F**\r\n- * @see LP_Template_Course::count_object()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fcourse-meta-secondary-left', LearnPress::instance()->template( 'course' )->func( 'count_object' ), 20 );\r\n-\r\n-\r\n-\u002F\u002F Sidebar content\r\n-\u002F**\r\n- * @see LP_Template_Course::course_sidebar_preview()\r\n- * @see LP_Template_Course::course_extra_key_features()\r\n- * @see LP_Template_Course::course_extra_requirements()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_sidebar_preview' ), 10 );\r\n-add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_featured_review' ), 20 );\r\n-\u002F\u002F add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_key_features' ), 20 );\r\n-\u002F\u002F add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_requirements' ), 30 );\r\n-\r\n-\u002F** END: Main content of single course *\u002F\r\n-\r\n-\u002F** BEGIN: Course section *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fsection-summary',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsection\u002Ftitle.php', array( 'section' ) ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fsection-summary',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsection\u002Fcontent.php', array( 'section' ) ),\r\n-\t20\r\n-);\r\n-\r\n-add_action(\r\n-\t'learn-press\u002Fafter-section-loop-item-title',\r\n-\tLearnPress::instance()->template( 'course' )->callback(\r\n-\t\t'single-course\u002Fsection\u002Fitem-meta.php',\r\n-\t\tarray(\r\n-\t\t\t'item',\r\n-\t\t\t'section',\r\n-\t\t)\r\n-\t),\r\n-\t10,\r\n-\t2\r\n-);\r\n-\r\n-\u002F** BEGIN: Quiz item *\u002F\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Course::quiz_meta_questions()\r\n- * @see LP_Template_Course::item_meta_duration()\r\n- * @see LP_Template_Course::quiz_meta_final()\r\n- *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'quiz_meta_questions' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),\r\n-\t20\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'quiz_meta_final' ),\r\n-\t30\r\n-);\r\n-\u002F** END: Quiz item *\u002F\r\n-\r\n-\u002F** BEGIN: Lesson item *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_lesson-meta',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),\r\n-\t10\r\n-);\r\n-\u002F** END: Lesson item *\u002F\r\n-\r\n-\u002F** END: Course section *\u002F\r\n-\r\n-\u002F** BEGIN: Popup *\u002F\r\n-\u002F**\r\n- * @see single-button-toggle-sidebar\r\n- *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fsingle-button-toggle-sidebar',\r\n-\tLearnPress::instance()->template( 'course' )->text( '\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\" \u002F>', 'single-button-toggle-sidebar' ),\r\n-\t5\r\n-);\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Course::popup_header()\r\n- * @see LP_Template_Course::popup_sidebar()\r\n- * @see LP_Template_Course::popup_content()\r\n- * @see LP_Template_Course::popup_footer()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_header' ), 10 );\r\n-add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_sidebar' ), 20 );\r\n-add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_content' ), 30 );\r\n-add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_footer' ), 40 );\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Course::popup_footer_nav()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fpopup-footer', LearnPress::instance()->template( 'course' )->func( 'popup_footer_nav' ), 10 );\r\n-\u002F** END: Popup *\u002F\r\n-\r\n-\u002F** BEGIN: Popup quiz *\u002F\r\n-\u002F**\r\n- * @see LP_Template_Course::course_finish_button()\r\n- *\u002F\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fquiz-buttons', LearnPress::instance()->template( 'course' )->func( 'course_finish_button' ), 10 );\r\n-\u002F** END: Popup quiz *\u002F\r\n-\r\n-\u002F** BEGIN: Popup lesson *\u002F\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Course::item_lesson_title()\r\n- * @see LP_Template_Course::item_lesson_content()\r\n- * @see LP_Template_Course::item_lesson_complete_button()\r\n- *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fbefore-content-item-summary\u002Flp_lesson',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_title' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fcontent-item-summary\u002Flp_lesson',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_content' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_material' ),\r\n-\t10\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\r\n-\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_complete_button' ),\r\n-\t11\r\n-);\r\n-add_action(\r\n-\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\r\n-\tfunction () {\r\n-\t\t$userCourseModel    = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );\r\n-\t\t$userCourseTemplate = UserCourseTemplate::instance();\r\n-\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\techo $userCourseTemplate->html_btn_finish( $userCourseModel );\r\n-\t\t}\r\n-\t},\r\n-\t15\r\n-);\r\n-\u002F** END: Popup lesson *\u002F\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Course::course_item_content()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fcourse-item-content', LearnPress::instance()->template( 'course' )->func( 'course_item_content' ), 5 );\r\n-\r\n-\u002F** BEGIN: User profile *\u002F\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Profile::header()\r\n- * @see LP_Template_Profile::tabs()\r\n- * @see LP_Template_Profile::content()\r\n- *\u002F\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fbefore-user-profile', LearnPress::instance()->template( 'profile' )->func( 'header' ), 10 );\r\n-\r\n-add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );\r\n-add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'content' ), 20 );\r\n-\r\n-add_action( 'learn-press\u002Fuser-profile\u002Fprivate', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );\r\n-\r\n-add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->text( ' \u003Cdiv class=\"lp-profile-left\">', 'user-profile-account-left-open' ), 5 );\r\n-add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'avatar' ), 10 );\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'socials' ), 10 );\r\n-add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->text( ' \u003C\u002Fdiv>', 'user-profile-account-left-close' ), 15 );\r\n-add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'header' ), 20 );\r\n-\r\n-add_action( 'learn-press\u002Fuser-profile-tabs', LearnPress::instance()->template( 'profile' )->func( 'tabs' ), 10 );\r\n-\r\n-\u002F**\r\n- * @deprecated 4.2.6.2\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fprofile\u002Forders', LearnPress::instance()->template( 'profile' )->callback( 'profile\u002Ftabs\u002Forders\u002Flist.php' ), 10 );\r\n-\u002F**\r\n- * @deprecated 4.2.6.2\r\n- *\u002F\r\n-add_action(\r\n-\t'learn-press\u002Fprofile\u002Forders',\r\n-\tLearnPress::instance()->template( 'profile' )->callback( 'profile\u002Ftabs\u002Forders\u002Frecover-order.php' ),\r\n-\t20\r\n-);\r\n-\r\n-\u002F\u002F Comment from v4.3.2.6, hook not using from v4.2.6.4\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_details' ), 5 );\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_recover' ), 10 );\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_message' ), 15 );\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Profile::dashboard_logged_in()\r\n- * @deprecated 4.1.6\r\n- *\u002F\r\n-\u002F\u002F add_action( 'learn-press\u002Fprofile\u002Fbefore-dashboard', LearnPress::instance()->template( 'profile' )->func( 'dashboard_statistic' ), 10 );\r\n-\u002F*add_action(\r\n-\t'learn-press\u002Fprofile\u002Fdashboard-summary',\r\n-\tLearnPress::instance()->template( 'profile' )->func( 'dashboard_featured_courses' ),\r\n-\t20\r\n-);*\u002F\r\n-\u002F*add_action(\r\n-\t'learn-press\u002Fprofile\u002Fdashboard-summary',\r\n-\tLearnPress::instance()->template( 'profile' )->func( 'dashboard_latest_courses' ),\r\n-\t30\r\n-);*\u002F\r\n-\r\n-\u002F**\r\n- * @see LP_Template_Profile::dashboard_not_logged_in()\r\n- * @see LP_Template_Profile::login_form()\r\n- * @see LP_Template_Profile::register_form()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'dashboard_not_logged_in' ), 5 );\r\n-add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'login_form' ), 10 );\r\n-add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'register_form' ), 15 );\r\n-\r\n-\u002F** BEGIN: Checkout page *\u002F\r\n-\u002F**\r\n- * @see LP_Template_Checkout::review_order()\r\n- *\u002F\r\n-add_action( 'learn-press\u002Fbefore-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'review_order' ), 10 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_logged_in' ), 20 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_register' ), 30 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_login' ), 40 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'guest_checkout' ), 50 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'order_comment' ), 60 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'payment' ), 70 );\r\n-add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'terms' ), 80 );\r\n-\r\n-\u002F\u002F ******************************************************************************************************************* \u002F\u002F\r\n-\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fcontent-item-summary-class', 'learn_press_content_item_summary_classes', 15 );\r\n-add_action(\r\n-\t'learn-press\u002Fbefore-content-item-summary\u002Flp_quiz',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'content-quiz\u002Ftitle.php' ),\r\n-\t5\r\n-);\r\n-add_action( 'learn-press\u002Fcontent-item-summary\u002Flp_quiz', LearnPress::instance()->template( 'course' )->callback( 'content-quiz\u002Fjs' ), 25 );\r\n-\u002F\u002F add_action( 'learn-press\u002Fparse-course-item', 'learn_press_control_displaying_course_item', 5 ); \u002F\u002F comment by tungnx\r\n-\u002F\u002Fadd_action( 'learn-press\u002Fafter-single-course', 'learn_press_single_course_args', 5 );\r\n-add_filter( 'document_title_parts', 'learn_press_single_document_title_parts', 5 );\r\n-\r\n-add_filter( 'body_class', 'learn_press_body_classes', 10 );\r\n-add_filter( 'post_class', 'learn_press_course_class', 15, 3 );\r\n-\u002F\u002Fadd_action( 'wp_head', 'learn_press_single_course_args', 5 );\r\n-add_action(\r\n-\t'learn-press\u002Fbefore-checkout-order-review',\r\n-\tLearnPress::instance()->template( 'course' )->callback( 'checkout\u002Fform-logged-in.php' ),\r\n-\t10\r\n-);\r\n-\r\n-add_filter( 'excerpt_length', 'learn_press_custom_excerpt_length', 999 );\r\n-\u002F\u002F add_filter( 'learn_press_get_template', LearnPress::instance()->template( 'general' )->func( 'filter_block_content_template' ), 10, 5 );\r\n-\r\n-\u002F**\r\n- * Filter to hide the section if there is no item.\r\n- *\r\n- * @param bool $visible\r\n- * @param LP_Course_Section $section\r\n- * @param LP_Course $course\r\n- *\r\n- * @return bool\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_filter_section_visible( $visible, $section, $course ) {\r\n-\tif ( ! $section->get_items() ) {\r\n-\t\t$visible = false;\r\n-\t}\r\n-\r\n-\treturn $visible;\r\n-}\r\n-\r\n-add_filter( 'learn-press\u002Fsection-visible', 'learn_press_filter_section_visible', 10, 3 );\r\n+\u003C?php\n+\u002F**\n+ * Build courses content\n+ *\u002F\n+\n+\u002F*****************************************\u002F\n+\u002F**                                      *\u002F\n+\u002F**            DOCUMENTATION             *\u002F\n+\u002F**                                      *\u002F\n+\u002F*****************************************\u002F\n+\n+\u002F**\n+ * Core template classes: LP_Template_General, LP_Template_Profile, LP_Template_Course.\n+ *\n+ * + Get instance of a template: LearnPress::instance()->template( TYPE ) e.g: LearnPress::instance()->template( 'course' )\n+ * + LearnPress::instance()->template( TYPE )->func(CALLBACK) => hook to an action with function CALLBACK of TYPE class\n+ * + LearnPress::instance()->template( TYPE )->callback( TEMPLATE ) => hook to an action to c\n+ *\u002F\n+\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * New functions since 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Header and Footer\n+ *\n+ * @see LP_Template_General::template_header()\n+ * @see LP_Template_General::template_footer()\n+ *\u002F\n+add_action( 'learn-press\u002Ftemplate-header', LearnPress::instance()->template( 'general' )->func( 'template_header' ) );\n+add_action( 'learn-press\u002Ftemplate-footer', LearnPress::instance()->template( 'general' )->func( 'template_footer' ) );\n+\n+add_action(\n+\t'learn-press\u002Fbefore-main-content',\n+\tLearnPress::instance()->template( 'general' )->text( '\u003Cdiv class=\"lp-archive-courses\">', 'lp-archive-courses-open' ),\n+\t- 100\n+);\n+\u002F**\n+ * Course breadcrumb\n+ *\n+ * @see LP_Template_General::breadcrumb()\n+ *\u002F\n+add_action( 'learn-press\u002Fbefore-main-content', LearnPress::instance()->template( 'general' )->func( 'breadcrumb' ) );\n+\n+add_action(\n+\t'learn-press\u002Fafter-main-content',\n+\tLearnPress::instance()->template( 'general' )->text( '\u003C\u002Fdiv>', 'lp-archive-courses-close' ),\n+\t100\n+);\n+\n+\n+\u002F**\n+ * Course buttons\n+ * old hook: learn-press\u002Fcourse-buttons\n+ *\u002F\n+add_action(\n+\t'learn-press\u002Fcourse-buttons',\n+\tfunction () {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t$course               = CourseModel::find( get_the_ID(), true );\n+\t\t$user                 = UserModel::find( get_current_user_id(), true );\n+\t\t$userCourseModel      = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );\n+\t\t$userCourseTemplate   = UserCourseTemplate::instance();\n+\n+\t\t\u002F\u002F Button enroll\n+\t\techo $singleCourseTemplate->html_btn_enroll_course( $course, $user );\n+\t\t\u002F\u002F Button purchase\n+\t\techo $singleCourseTemplate->html_btn_purchase_course( $course, $user );\n+\t\t\u002F\u002F Button external\n+\t\techo '\u003Cdiv style=\"display:flex;flex-direction:column\">';\n+\t\techo $singleCourseTemplate->html_btn_external( $course, $user );\n+\t\techo '\u003C\u002Fdiv>';\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t\u002F\u002F Button retake\n+\t\t\techo $userCourseTemplate->html_btn_retake( $userCourseModel );\n+\t\t\t\u002F\u002F Button continue\n+\t\t\techo '\u003Cdiv style=\"margin-bottom: 10px\">';\n+\t\t\techo $userCourseTemplate->html_btn_continue( $userCourseModel );\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t\t\u002F\u002F Button finish\n+\t\t\techo $userCourseTemplate->html_btn_finish( $userCourseModel );\n+\t\t}\n+\t},\n+\t5\n+);\n+\n+\u002F** BEGIN: Archive course *\u002F\n+add_action( 'learn-press\u002Fbefore-courses-loop', LearnPress::instance()->template( 'course' )->func( 'courses_top_bar' ), 10 );\n+\n+\u002F** BEGIN: Archive course loop item *\u002F\n+add_action(\n+\t'learn-press\u002Fcourses-loop-item-title',\n+\tLearnPress::instance()->template( 'course' )->callback( 'loop\u002Fcourse\u002Ftitle.php' ),\n+\t20\n+);\n+\n+\u002F** END: Archive course loop item *\u002F\n+\n+\u002F** Archive course pagination *\u002F\n+if ( LP_Settings::theme_no_support_load_courses_ajax() ) {\n+\tadd_action(\n+\t\t'learn-press\u002Fafter-courses-loop',\n+\t\tLearnPress::instance()->template( 'course' )->callback( 'loop\u002Fcourse\u002Fpagination.php' )\n+\t);\n+} else {\n+\tadd_action(\n+\t\t'learn-press\u002Fafter-courses-loop',\n+\t\tfunction () {\n+\t\t\t$listCourseTemplate    = ListCoursesTemplate::instance();\n+\t\t\t$pagination_type       = LP_Settings::get_option( 'course_pagination_type', 'number' );\n+\t\t\t$enableAjaxLoadCourses = LP_Settings_Courses::is_ajax_load_courses();\n+\t\t\t$enableNoLoadAjaxFirst = LP_Settings_Courses::is_no_load_ajax_first_courses();\n+\t\t\tif ( $enableAjaxLoadCourses && $pagination_type !== 'number' ) {\n+\t\t\t\tif ( $enableNoLoadAjaxFirst ) {\n+\t\t\t\t\tif ( 'load-more' === $pagination_type ) {\n+\t\t\t\t\t\techo $listCourseTemplate->html_pagination_load_more();\n+\t\t\t\t\t} elseif ( 'infinite' === $pagination_type ) {\n+\t\t\t\t\t\techo $listCourseTemplate->html_pagination_infinite();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( ! $enableAjaxLoadCourses || ( $enableAjaxLoadCourses && $enableNoLoadAjaxFirst ) ) {\n+\t\t\t\tTemplate::instance()->get_frontend_template( 'loop\u002Fcourse\u002Fpagination.php' );\n+\t\t\t}\n+\t\t},\n+\t\t10\n+\t);\n+}\n+\u002F** END: Archive course *\u002F\n+\n+\u002F** BEGIN: Main content of single course *\u002F\n+\n+\n+\u002F\u002F Sidebar and content\n+add_action( 'learn-press\u002Fsingle-course-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fcontent' ), 10 );\n+\n+\u002F\u002F Content\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text(\n+\t\t'\u003Cdiv class=\"course-detail-info\"> \u003Cdiv class=\"lp-content-area\"> \u003Cdiv class=\"course-info-left\">',\n+\t\t'course-info-left-open'\n+\t),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta-primary' ),\n+\t10\n+);\n+add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftitle' ), 10 );\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta-secondary' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text( ' \u003C\u002Fdiv> \u003C\u002Fdiv> \u003C\u002Fdiv>', 'course-info-left-close' ),\n+\t15\n+);\n+\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text( '\u003Cdiv class=\"lp-entry-content lp-content-area\">', 'lp-entry-content-open' ),\n+\t30\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text( '\u003Cdiv class=\"entry-content-left\">', 'entry-content-left-open' ),\n+\t35\n+);\n+\u002F\u002Fadd_action(\n+\u002F\u002F  'learn-press\u002Fcourse-content-summary',\n+\u002F\u002F  LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes_position_control' ),\n+\u002F\u002F  39\n+\u002F\u002F);\n+\u002F\u002Fadd_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 40 );\n+\u002F\u002F add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fprogress' ), 40 );\n+\u002F\u002F add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'remaining_time' ), 50 );\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Ftabs\u002Ftabs' ),\n+\t60\n+);\n+\u002F\u002F appear at bottom after enrolled\n+add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 70 );\n+\n+add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_comment_template' ), 75 );\n+\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text( '\u003C!-- end entry content left --> \u003C\u002Fdiv>', 'entry-content-left-close' ),\n+\t80\n+);\n+\n+add_action( 'learn-press\u002Fcourse-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsidebar' ), 85 );\n+\n+add_action(\n+\t'learn-press\u002Fcourse-content-summary',\n+\tLearnPress::instance()->template( 'course' )->text( ' \u003C\u002Fdiv>', 'lp-entry-content-close' ),\n+\t100\n+);\n+\n+\u002F\u002F Meta\n+add_action(\n+\t'learn-press\u002Fcourse-meta-primary-left',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Finstructor' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-meta-primary-left',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Fcategory' ),\n+\t20\n+);\n+\n+add_action(\n+\t'learn-press\u002Fcourse-meta-secondary-left',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Fduration' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-meta-secondary-left',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fmeta\u002Flevel' ),\n+\t20\n+);\n+\u002F**\n+ * @see LP_Template_Course::count_object()\n+ *\u002F\n+add_action( 'learn-press\u002Fcourse-meta-secondary-left', LearnPress::instance()->template( 'course' )->func( 'count_object' ), 20 );\n+\n+\n+\u002F\u002F Sidebar content\n+\u002F**\n+ * @see LP_Template_Course::course_sidebar_preview()\n+ * @see LP_Template_Course::course_extra_key_features()\n+ * @see LP_Template_Course::course_extra_requirements()\n+ *\u002F\n+add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_sidebar_preview' ), 10 );\n+add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_featured_review' ), 20 );\n+\u002F\u002F add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_key_features' ), 20 );\n+\u002F\u002F add_action( 'learn-press\u002Fcourse-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_requirements' ), 30 );\n+\n+\u002F** END: Main content of single course *\u002F\n+\n+\u002F** BEGIN: Course section *\u002F\n+add_action(\n+\t'learn-press\u002Fsection-summary',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsection\u002Ftitle.php', array( 'section' ) ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fsection-summary',\n+\tLearnPress::instance()->template( 'course' )->callback( 'single-course\u002Fsection\u002Fcontent.php', array( 'section' ) ),\n+\t20\n+);\n+\n+add_action(\n+\t'learn-press\u002Fafter-section-loop-item-title',\n+\tLearnPress::instance()->template( 'course' )->callback(\n+\t\t'single-course\u002Fsection\u002Fitem-meta.php',\n+\t\tarray(\n+\t\t\t'item',\n+\t\t\t'section',\n+\t\t)\n+\t),\n+\t10,\n+\t2\n+);\n+\n+\u002F** BEGIN: Quiz item *\u002F\n+\n+\u002F**\n+ * @see LP_Template_Course::quiz_meta_questions()\n+ * @see LP_Template_Course::item_meta_duration()\n+ * @see LP_Template_Course::quiz_meta_final()\n+ *\u002F\n+add_action(\n+\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\n+\tLearnPress::instance()->template( 'course' )->func( 'quiz_meta_questions' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),\n+\t20\n+);\n+add_action(\n+\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_quiz-meta',\n+\tLearnPress::instance()->template( 'course' )->func( 'quiz_meta_final' ),\n+\t30\n+);\n+\u002F** END: Quiz item *\u002F\n+\n+\u002F** BEGIN: Lesson item *\u002F\n+add_action(\n+\t'learn-press\u002Fcourse-section-item\u002Fbefore-lp_lesson-meta',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),\n+\t10\n+);\n+\u002F** END: Lesson item *\u002F\n+\n+\u002F** END: Course section *\u002F\n+\n+\u002F** BEGIN: Popup *\u002F\n+\u002F**\n+ * @see single-button-toggle-sidebar\n+ *\u002F\n+add_action(\n+\t'learn-press\u002Fsingle-button-toggle-sidebar',\n+\tLearnPress::instance()->template( 'course' )->text( '\u003Cinput type=\"checkbox\" id=\"sidebar-toggle\" title=\"Show\u002FHide curriculum\" \u002F>', 'single-button-toggle-sidebar' ),\n+\t5\n+);\n+\n+\u002F**\n+ * @see LP_Template_Course::popup_header()\n+ * @see LP_Template_Course::popup_sidebar()\n+ * @see LP_Template_Course::popup_content()\n+ * @see LP_Template_Course::popup_footer()\n+ *\u002F\n+add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_header' ), 10 );\n+add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_sidebar' ), 20 );\n+add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_content' ), 30 );\n+add_action( 'learn-press\u002Fsingle-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_footer' ), 40 );\n+\n+\u002F**\n+ * @see LP_Template_Course::popup_footer_nav()\n+ *\u002F\n+add_action( 'learn-press\u002Fpopup-footer', LearnPress::instance()->template( 'course' )->func( 'popup_footer_nav' ), 10 );\n+\u002F** END: Popup *\u002F\n+\n+\u002F** BEGIN: Popup quiz *\u002F\n+\u002F**\n+ * @see LP_Template_Course::course_finish_button()\n+ *\u002F\n+\u002F\u002Fadd_action( 'learn-press\u002Fquiz-buttons', LearnPress::instance()->template( 'course' )->func( 'course_finish_button' ), 10 );\n+\u002F** END: Popup quiz *\u002F\n+\n+\u002F** BEGIN: Popup lesson *\u002F\n+\n+\u002F**\n+ * @see LP_Template_Course::item_lesson_title()\n+ * @see LP_Template_Course::item_lesson_content()\n+ * @see LP_Template_Course::item_lesson_complete_button()\n+ *\u002F\n+add_action(\n+\t'learn-press\u002Fbefore-content-item-summary\u002Flp_lesson',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_title' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fcontent-item-summary\u002Flp_lesson',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_content' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_material' ),\n+\t10\n+);\n+add_action(\n+\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\n+\tLearnPress::instance()->template( 'course' )->func( 'item_lesson_complete_button' ),\n+\t11\n+);\n+add_action(\n+\t'learn-press\u002Fafter-content-item-summary\u002Flp_lesson',\n+\tfunction () {\n+\t\t$userCourseModel    = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );\n+\t\t$userCourseTemplate = UserCourseTemplate::instance();\n+\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\techo $userCourseTemplate->html_btn_finish( $userCourseModel );\n+\t\t}\n+\t},\n+\t15\n+);\n+\u002F** END: Popup lesson *\u002F\n+\n+\u002F**\n+ * @see LP_Template_Course::course_item_content()\n+ *\u002F\n+add_action( 'learn-press\u002Fcourse-item-content', LearnPress::instance()->template( 'course' )->func( 'course_item_content' ), 5 );\n+\n+\u002F** BEGIN: User profile *\u002F\n+\n+\u002F**\n+ * @see LP_Template_Profile::header()\n+ * @see LP_Template_Profile::tabs()\n+ * @see LP_Template_Profile::content()\n+ *\u002F\n+\u002F\u002Fadd_action( 'learn-press\u002Fbefore-user-profile', LearnPress::instance()->template( 'profile' )->func( 'header' ), 10 );\n+\n+add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );\n+add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'content' ), 20 );\n+\n+add_action( 'learn-press\u002Fuser-profile\u002Fprivate', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );\n+\n+add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->text( ' \u003Cdiv class=\"lp-profile-left\">', 'user-profile-account-left-open' ), 5 );\n+add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'avatar' ), 10 );\n+\u002F\u002Fadd_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'socials' ), 10 );\n+add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->text( ' \u003C\u002Fdiv>', 'user-profile-account-left-close' ), 15 );\n+add_action( 'learn-press\u002Fuser-profile-account', LearnPress::instance()->template( 'profile' )->func( 'header' ), 20 );\n+\n+add_action( 'learn-press\u002Fuser-profile-tabs', LearnPress::instance()->template( 'profile' )->func( 'tabs' ), 10 );\n+\n+\u002F**\n+ * @deprecated 4.2.6.2\n+ *\u002F\n+add_action( 'learn-press\u002Fprofile\u002Forders', LearnPress::instance()->template( 'profile' )->callback( 'profile\u002Ftabs\u002Forders\u002Flist.php' ), 10 );\n+\u002F**\n+ * @deprecated 4.2.6.2\n+ *\u002F\n+add_action(\n+\t'learn-press\u002Fprofile\u002Forders',\n+\tLearnPress::instance()->template( 'profile' )->callback( 'profile\u002Ftabs\u002Forders\u002Frecover-order.php' ),\n+\t20\n+);\n+\n+\u002F\u002F Comment from v4.3.2.6, hook not using from v4.2.6.4\n+\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_details' ), 5 );\n+\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_recover' ), 10 );\n+\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Forder-details', LearnPress::instance()->template( 'profile' )->func( 'order_message' ), 15 );\n+\n+\u002F**\n+ * @see LP_Template_Profile::dashboard_logged_in()\n+ * @deprecated 4.1.6\n+ *\u002F\n+\u002F\u002F add_action( 'learn-press\u002Fprofile\u002Fbefore-dashboard', LearnPress::instance()->template( 'profile' )->func( 'dashboard_statistic' ), 10 );\n+\u002F*add_action(\n+\t'learn-press\u002Fprofile\u002Fdashboard-summary',\n+\tLearnPress::instance()->template( 'profile' )->func( 'dashboard_featured_courses' ),\n+\t20\n+);*\u002F\n+\u002F*add_action(\n+\t'learn-press\u002Fprofile\u002Fdashboard-summary',\n+\tLearnPress::instance()->template( 'profile' )->func( 'dashboard_latest_courses' ),\n+\t30\n+);*\u002F\n+\n+\u002F**\n+ * @see LP_Template_Profile::dashboard_not_logged_in()\n+ * @see LP_Template_Profile::login_form()\n+ * @see LP_Template_Profile::register_form()\n+ *\u002F\n+add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'dashboard_not_logged_in' ), 5 );\n+add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'login_form' ), 10 );\n+add_action( 'learn-press\u002Fuser-profile', LearnPress::instance()->template( 'profile' )->func( 'register_form' ), 15 );\n+\n+\u002F** BEGIN: Checkout page *\u002F\n+\u002F**\n+ * @see LP_Template_Checkout::review_order()\n+ *\u002F\n+add_action( 'learn-press\u002Fbefore-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'review_order' ), 10 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_logged_in' ), 20 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_register' ), 30 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_login' ), 40 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'guest_checkout' ), 50 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'order_comment' ), 60 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'payment' ), 70 );\n+add_action( 'learn-press\u002Fafter-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'terms' ), 80 );\n+\n+\u002F\u002F ******************************************************************************************************************* \u002F\u002F\n+\n+\u002F\u002Fadd_action( 'learn-press\u002Fcontent-item-summary-class', 'learn_press_content_item_summary_classes', 15 );\n+add_action(\n+\t'learn-press\u002Fbefore-content-item-summary\u002Flp_quiz',\n+\tLearnPress::instance()->template( 'course' )->callback( 'content-quiz\u002Ftitle.php' ),\n+\t5\n+);\n+add_action( 'learn-press\u002Fcontent-item-summary\u002Flp_quiz', LearnPress::instance()->template( 'course' )->callback( 'content-quiz\u002Fjs' ), 25 );\n+\u002F\u002F add_action( 'learn-press\u002Fparse-course-item', 'learn_press_control_displaying_course_item', 5 ); \u002F\u002F comment by tungnx\n+\u002F\u002Fadd_action( 'learn-press\u002Fafter-single-course', 'learn_press_single_course_args', 5 );\n+add_filter( 'document_title_parts', 'learn_press_single_document_title_parts', 5 );\n+\n+add_filter( 'body_class', 'learn_press_body_classes', 10 );\n+add_filter( 'post_class', 'learn_press_course_class', 15, 3 );\n+\u002F\u002Fadd_action( 'wp_head', 'learn_press_single_course_args', 5 );\n+add_action(\n+\t'learn-press\u002Fbefore-checkout-order-review',\n+\tLearnPress::instance()->template( 'course' )->callback( 'checkout\u002Fform-logged-in.php' ),\n+\t10\n+);\n+\n+add_filter( 'excerpt_length', 'learn_press_custom_excerpt_length', 999 );\n+\u002F\u002F add_filter( 'learn_press_get_template', LearnPress::instance()->template( 'general' )->func( 'filter_block_content_template' ), 10, 5 );\n+\n+\u002F**\n+ * Filter to hide the section if there is no item.\n+ *\n+ * @param bool $visible\n+ * @param LP_Course_Section $section\n+ * @param LP_Course $course\n+ *\n+ * @return bool\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_filter_section_visible( $visible, $section, $course ) {\n+\tif ( ! $section->get_items() ) {\n+\t\t$visible = false;\n+\t}\n+\n+\treturn $visible;\n+}\n+\n+add_filter( 'learn-press\u002Fsection-visible', 'learn_press_filter_section_visible', 10, 3 );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-webhooks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-webhooks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-webhooks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-webhooks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,95 +1,95 @@\n-\u003C?php\r\n-\u002F**\r\n- * Common functions to process the webhooks\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FFunctions\r\n- * @version 1.0\r\n- * @deprecated 4.2.5.4 Addon learnpress-2checkout-payment v4.0.1 is using\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Register a webhook\r\n- *\r\n- * @param $key\r\n- * @param $param\r\n- *\u002F\r\n-function learn_press_register_web_hook( $key, $param ) {\r\n-\tif ( ! $key ) {\r\n-\t\treturn;\r\n-\t}\r\n-\tif ( empty( $GLOBALS['learn_press']['web_hooks'] ) ) {\r\n-\t\t$GLOBALS['learn_press']['web_hooks'] = array();\r\n-\t}\r\n-\t$GLOBALS['learn_press']['web_hooks'][ $key ] = $param;\r\n-\tdo_action( 'learn_press_register_web_hook', $key, $param );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return all registered webhooks\r\n- *\r\n- * @return mixed|void\r\n- *\u002F\r\n-function learn_press_get_web_hooks() {\r\n-\t$web_hooks = empty( $GLOBALS['learn_press']['web_hooks'] ) ? array() : (array) $GLOBALS['learn_press']['web_hooks'];\r\n-\treturn apply_filters( 'learn_press_web_hooks', $web_hooks );\r\n-}\r\n-\r\n-\u002F**\r\n- * Return a registered webhook by it's name\r\n- *\r\n- * @param $key\r\n- *\r\n- * @return mixed|void\r\n- *\u002F\r\n-function learn_press_get_web_hook( $key ) {\r\n-\t$web_hooks = learn_press_get_web_hooks();\r\n-\t$web_hook  = empty( $web_hooks[ $key ] ) ? false : $web_hooks[ $key ];\r\n-\r\n-\treturn apply_filters( 'learn_press_web_hook', $web_hook, $key );\r\n-}\r\n-\r\n-\u002F**\r\n- * Process all registered webhooks\r\n- *\u002F\r\n-function learn_press_process_web_hooks() {\r\n-\t$web_hooks           = learn_press_get_web_hooks();\r\n-\t$web_hooks_processed = array();\r\n-\r\n-\tforeach ( $web_hooks as $key => $param ) {\r\n-\t\tif ( ! empty( $_REQUEST[ $param ] ) ) {\r\n-\t\t\t\u002F\u002F $web_hooks_processed           = true;\r\n-\t\t\t$request_scheme                = is_ssl() ? 'https:\u002F\u002F' : 'http:\u002F\u002F';\r\n-\t\t\t$requested_web_hook_url        = untrailingslashit( $request_scheme . esc_url_raw( $_SERVER['HTTP_HOST'] ) ) . esc_url_raw( $_SERVER['REQUEST_URI'] );\r\n-\t\t\t$parsed_requested_web_hook_url = parse_url( $requested_web_hook_url );\r\n-\t\t\t$required_web_hook_url         = add_query_arg( $param, '1', trailingslashit( get_home_url() \u002F* SITE_URL *\u002F ) );\r\n-\t\t\t$parsed_required_web_hook_url  = parse_url( $required_web_hook_url );\r\n-\t\t\t$web_hook_diff                 = array_diff_assoc( $parsed_requested_web_hook_url, $parsed_required_web_hook_url );\r\n-\r\n-\t\t\tif ( empty( $web_hook_diff ) ) {\r\n-\t\t\t\tdo_action( 'learn_press_web_hook_' . $param, $_REQUEST );\r\n-\t\t\t} else {\r\n-\r\n-\t\t\t}\r\n-\t\t\t$web_hooks_processed[ $param ] = LP_Helper::sanitize_params_submitted( $_REQUEST );\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\t}\r\n-\tif ( $web_hooks_processed ) {\r\n-\t\tdo_action( 'learn_press_web_hooks_processed' );\r\n-\t\tob_start();\r\n-\t\tforeach ( $web_hooks_processed as $k => $v ) {\r\n-\t\t\techo \"\\n===============================================================\\n\u003Cbr \u002F>\";\r\n-\t\t\tprintf( __( 'LearnPress webhook %s process completed', 'learnpress' ), $k );\r\n-\t\t\techo \"\\n\u003Cpre>\";\r\n-\t\t\tprint_r( $v );\r\n-\t\t\techo \"\u003C\u002Fpre>\\n===============================================================\\n\";\r\n-\t\t}\r\n-\t\t$output = ob_get_clean();\r\n-\t\twp_die( $output, __( 'The LearnPress webhook process is complete', 'learnpress' ), array( 'response' => 200 ) );\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'wp_loaded', 'learn_press_process_web_hooks', 999 );\r\n+\u003C?php\n+\u002F**\n+ * Common functions to process the webhooks\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FFunctions\n+ * @version 1.0\n+ * @deprecated 4.2.5.4 Addon learnpress-2checkout-payment v4.0.1 is using\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Register a webhook\n+ *\n+ * @param $key\n+ * @param $param\n+ *\u002F\n+function learn_press_register_web_hook( $key, $param ) {\n+\tif ( ! $key ) {\n+\t\treturn;\n+\t}\n+\tif ( empty( $GLOBALS['learn_press']['web_hooks'] ) ) {\n+\t\t$GLOBALS['learn_press']['web_hooks'] = array();\n+\t}\n+\t$GLOBALS['learn_press']['web_hooks'][ $key ] = $param;\n+\tdo_action( 'learn_press_register_web_hook', $key, $param );\n+}\n+\n+\u002F**\n+ * Return all registered webhooks\n+ *\n+ * @return mixed|void\n+ *\u002F\n+function learn_press_get_web_hooks() {\n+\t$web_hooks = empty( $GLOBALS['learn_press']['web_hooks'] ) ? array() : (array) $GLOBALS['learn_press']['web_hooks'];\n+\treturn apply_filters( 'learn_press_web_hooks', $web_hooks );\n+}\n+\n+\u002F**\n+ * Return a registered webhook by it's name\n+ *\n+ * @param $key\n+ *\n+ * @return mixed|void\n+ *\u002F\n+function learn_press_get_web_hook( $key ) {\n+\t$web_hooks = learn_press_get_web_hooks();\n+\t$web_hook  = empty( $web_hooks[ $key ] ) ? false : $web_hooks[ $key ];\n+\n+\treturn apply_filters( 'learn_press_web_hook', $web_hook, $key );\n+}\n+\n+\u002F**\n+ * Process all registered webhooks\n+ *\u002F\n+function learn_press_process_web_hooks() {\n+\t$web_hooks           = learn_press_get_web_hooks();\n+\t$web_hooks_processed = array();\n+\n+\tforeach ( $web_hooks as $key => $param ) {\n+\t\tif ( ! empty( $_REQUEST[ $param ] ) ) {\n+\t\t\t\u002F\u002F $web_hooks_processed           = true;\n+\t\t\t$request_scheme                = is_ssl() ? 'https:\u002F\u002F' : 'http:\u002F\u002F';\n+\t\t\t$requested_web_hook_url        = untrailingslashit( $request_scheme . esc_url_raw( $_SERVER['HTTP_HOST'] ) ) . esc_url_raw( $_SERVER['REQUEST_URI'] );\n+\t\t\t$parsed_requested_web_hook_url = parse_url( $requested_web_hook_url );\n+\t\t\t$required_web_hook_url         = add_query_arg( $param, '1', trailingslashit( get_home_url() \u002F* SITE_URL *\u002F ) );\n+\t\t\t$parsed_required_web_hook_url  = parse_url( $required_web_hook_url );\n+\t\t\t$web_hook_diff                 = array_diff_assoc( $parsed_requested_web_hook_url, $parsed_required_web_hook_url );\n+\n+\t\t\tif ( empty( $web_hook_diff ) ) {\n+\t\t\t\tdo_action( 'learn_press_web_hook_' . $param, $_REQUEST );\n+\t\t\t} else {\n+\n+\t\t\t}\n+\t\t\t$web_hooks_processed[ $param ] = LP_Helper::sanitize_params_submitted( $_REQUEST );\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\tif ( $web_hooks_processed ) {\n+\t\tdo_action( 'learn_press_web_hooks_processed' );\n+\t\tob_start();\n+\t\tforeach ( $web_hooks_processed as $k => $v ) {\n+\t\t\techo \"\\n===============================================================\\n\u003Cbr \u002F>\";\n+\t\t\tprintf( __( 'LearnPress webhook %s process completed', 'learnpress' ), $k );\n+\t\t\techo \"\\n\u003Cpre>\";\n+\t\t\tprint_r( $v );\n+\t\t\techo \"\u003C\u002Fpre>\\n===============================================================\\n\";\n+\t\t}\n+\t\t$output = ob_get_clean();\n+\t\twp_die( $output, __( 'The LearnPress webhook process is complete', 'learnpress' ), array( 'response' => 200 ) );\n+\t}\n+}\n+\n+add_action( 'wp_loaded', 'learn_press_process_web_hooks', 999 );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-widget-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-widget-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Flp-widget-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Flp-widget-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Include & register widget.\r\n- *\r\n- * @package LearnPress\u002FWidgets\r\n- * @author ThimPress \u003CNhamdv>\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-extra.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-info.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-progress.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Ffeatured-courses.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fpopular-courses.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Frecent-courses.php';\r\n-require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-filter.php';\r\n-\r\n-add_action(\r\n-\t'widgets_init',\r\n-\tfunction() {\r\n-\t\tregister_widget( 'LP_Widget_Course_Extra' );\r\n-\t\tregister_widget( 'LP_Widget_Course_Info' );\r\n-\t\tregister_widget( 'LP_Widget_Course_Progress' );\r\n-\t\tregister_widget( 'LP_Widget_Featured_Courses' );\r\n-\t\tregister_widget( 'LP_Widget_Popular_Courses' );\r\n-\t\tregister_widget( 'LP_Widget_Recent_Courses' );\r\n-\t\tregister_widget( 'LP_Widget_Course_Filter' );\r\n-\t}\r\n-);\r\n-\r\n-add_action(\r\n-\t'wp_enqueue_scripts',\r\n-\tfunction() {\r\n-\t\tif ( isset( $_GET['legacy-widget-preview'] ) ) {\r\n-\t\t\twp_enqueue_style( 'learnpress-widgets-admin', LP_PLUGIN_URL . 'assets\u002Fcss\u002Fwidgets.css', array() );\r\n-\t\t}\r\n-\t}\r\n-);\r\n-\r\n-add_action(\r\n-\t'elementor\u002Feditor\u002Fbefore_enqueue_scripts',\r\n-\tfunction() {\r\n-\t\twp_enqueue_script( 'learnpress-widgets-eleentor-select2', LP_PLUGIN_URL . 'assets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js', array( 'jquery' ), false );\r\n-\t\twp_enqueue_script( 'learnpress-widgets-eleentor', LP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js', array( 'jquery' ), false );\r\n-\t}\r\n-);\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Include & register widget.\n+ *\n+ * @package LearnPress\u002FWidgets\n+ * @author ThimPress \u003CNhamdv>\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-extra.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-info.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-progress.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Ffeatured-courses.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fpopular-courses.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Frecent-courses.php';\n+require_once dirname( __FILE__ ) . '\u002FWidgets\u002Fcourse-filter.php';\n+\n+add_action(\n+\t'widgets_init',\n+\tfunction() {\n+\t\tregister_widget( 'LP_Widget_Course_Extra' );\n+\t\tregister_widget( 'LP_Widget_Course_Info' );\n+\t\tregister_widget( 'LP_Widget_Course_Progress' );\n+\t\tregister_widget( 'LP_Widget_Featured_Courses' );\n+\t\tregister_widget( 'LP_Widget_Popular_Courses' );\n+\t\tregister_widget( 'LP_Widget_Recent_Courses' );\n+\t\tregister_widget( 'LP_Widget_Course_Filter' );\n+\t}\n+);\n+\n+add_action(\n+\t'wp_enqueue_scripts',\n+\tfunction() {\n+\t\tif ( isset( $_GET['legacy-widget-preview'] ) ) {\n+\t\t\twp_enqueue_style( 'learnpress-widgets-admin', LP_PLUGIN_URL . 'assets\u002Fcss\u002Fwidgets.css', array() );\n+\t\t}\n+\t}\n+);\n+\n+add_action(\n+\t'elementor\u002Feditor\u002Fbefore_enqueue_scripts',\n+\tfunction() {\n+\t\twp_enqueue_script( 'learnpress-widgets-eleentor-select2', LP_PLUGIN_URL . 'assets\u002Fsrc\u002Fjs\u002Fvendor\u002Fselect2.full.min.js', array( 'jquery' ), false );\n+\t\twp_enqueue_script( 'learnpress-widgets-eleentor', LP_PLUGIN_URL . 'assets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Fwidgets.js', array( 'jquery' ), false );\n+\t}\n+);\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAbilities.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAbilities.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAbilities.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAbilities.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,407 +1,407 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP;\r\n-\r\n-use LearnPress\\MCP\\Auth\\AuthContext;\r\n-use LearnPress\\MCP\\Concerns\\AbilityExecutors;\r\n-use LearnPress\\MCP\\Concerns\\AbilityHelpers;\r\n-use LearnPress\\MCP\\Concerns\\AbilitySchemas;\r\n-use WP_REST_Server;\r\n-use WP_REST_Request;\r\n-use WP_REST_Response;\r\n-use WP_Error;\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Registers LearnPress abilities for the WordPress Abilities API.\r\n- *\r\n- * This class is intentionally small and orchestration-focused:\r\n- * - bootstrap lifecycle hooks\r\n- * - register category\r\n- * - define ability manifests\r\n- *\r\n- * Execution logic, schemas, and mapping helpers are split into traits.\r\n- *\u002F\r\n-class Abilities {\r\n-\r\n-\tuse AbilitySchemas;\r\n-\tuse AbilityHelpers;\r\n-\tuse AbilityExecutors;\r\n-\r\n-\t\u002F**\r\n-\t * Abilities API category slug for LearnPress abilities.\r\n-\t*\u002F\r\n-\tconst CATEGORY = 'learnpress';\r\n-\r\n-\t\u002F**\r\n-\t * Core MCP adapter route provided by WordPress Abilities API.\r\n- *\u002F\r\n-\tconst MCP_ADAPTER_ROUTE = '\u002Fmcp\u002Fmcp-adapter-default-server';\r\n-\r\n-\t\u002F**\r\n-\t\t* LearnPress MCP alias route for clients.\r\n-\t*\u002F\r\n-\tconst MCP_ALIAS_NAMESPACE = 'lp\u002Fv1';\r\n-\tconst MCP_ALIAS_ROUTE     = '\u002Fmcp';\r\n-\t\u002F**\r\n-\t * Guard flag to avoid registering hooks more than once.\r\n-\t *\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $initialized = false;\r\n-\r\n-\t\u002F**\r\n-\t * Initialize ability registration hooks when Abilities API exists.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function init(): void {\r\n-\t\tif ( self::$initialized || ! function_exists( 'wp_register_ability' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tadd_action( 'wp_abilities_api_categories_init', array( __CLASS__, 'register_category' ) );\r\n-\t\tadd_action( 'wp_abilities_api_init', array( __CLASS__, 'register_abilities' ) );\r\n-\t\tadd_action( 'rest_api_init', array( __CLASS__, 'register_mcp_alias_route' ), 20 );\r\n-\t\tself::$initialized = true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register LearnPress MCP alias endpoint.\r\n-\t *\r\n-\t * Proxy requests to the default MCP adapter server so clients can use:\r\n-\t * \u002Fwp-json\u002Flp\u002Fv1\u002Fmcp\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function register_mcp_alias_route(): void {\r\n-\r\n-\t\tregister_rest_route(\r\n-\t\t\tself::MCP_ALIAS_NAMESPACE,\r\n-\t\t\tself::MCP_ALIAS_ROUTE,\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t'callback'            => array( __CLASS__, 'proxy_mcp_adapter_request' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Proxy LearnPress MCP alias request to the core MCP adapter route.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function proxy_mcp_adapter_request( WP_REST_Request $request ) {\r\n-\r\n-\t\t$proxy_request = new WP_REST_Request( $request->get_method(), self::MCP_ADAPTER_ROUTE );\r\n-\t\t$proxy_request->set_headers( $request->get_headers() );\r\n-\t\t$proxy_request->set_query_params( $request->get_query_params() );\r\n-\t\t$proxy_request->set_body_params( $request->get_body_params() );\r\n-\t\t$proxy_request->set_file_params( $request->get_file_params() );\r\n-\t\t$proxy_request->set_body( $request->get_body() );\r\n-\r\n-\t\treturn rest_do_request( $proxy_request );\r\n-\t}\r\n-\t\u002F**\r\n-\t * Register the LearnPress ability category.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function register_category(): void {\r\n-\t\twp_register_ability_category(\r\n-\t\t\tself::CATEGORY,\r\n-\t\t\tarray(\r\n-\t\t\t\t'label'       => __( 'LearnPress LMS', 'learnpress' ),\r\n-\t\t\t\t'description' => __( 'Read-only abilities for LearnPress LMS data.', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register all Phase 1 (read-only) LearnPress abilities.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function register_abilities(): void {\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-courses',\r\n-\t\t\t__( 'Get Courses', 'learnpress' ),\r\n-\t\t\t__( 'List courses with optional filters and pagination.', 'learnpress' ),\r\n-\t\t\tself::schema_get_courses_input(),\r\n-\t\t\tself::schema_list_output( self::schema_course_summary() ),\r\n-\t\t\tarray( __CLASS__, 'execute_get_courses' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-course-details',\r\n-\t\t\t__( 'Get Course Details', 'learnpress' ),\r\n-\t\t\t__( 'Get details and curriculum summary for a course.', 'learnpress' ),\r\n-\t\t\tself::schema_required_id( 'course_id' ),\r\n-\t\t\tself::schema_course_detail_output(),\r\n-\t\t\tarray( __CLASS__, 'execute_get_course_details' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Flist-lessons',\r\n-\t\t\t__( 'List Lessons', 'learnpress' ),\r\n-\t\t\t__( 'List lessons in a course with optional filters.', 'learnpress' ),\r\n-\t\t\tself::schema_list_lessons_input(),\r\n-\t\t\tself::schema_list_output( self::schema_lesson_summary() ),\r\n-\t\t\tarray( __CLASS__, 'execute_list_lessons' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-lesson-details',\r\n-\t\t\t__( 'Get Lesson Details', 'learnpress' ),\r\n-\t\t\t__( 'Get lesson details including content, video intro, and materials.', 'learnpress' ),\r\n-\t\t\tself::schema_required_id( 'lesson_id' ),\r\n-\t\t\tself::schema_lesson_detail_output(),\r\n-\t\t\tarray( __CLASS__, 'execute_get_lesson_details' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Flist-quizzes',\r\n-\t\t\t__( 'List Quizzes', 'learnpress' ),\r\n-\t\t\t__( 'List quizzes in a course with pagination.', 'learnpress' ),\r\n-\t\t\tself::schema_list_quizzes_input(),\r\n-\t\t\tself::schema_list_output( self::schema_quiz_summary() ),\r\n-\t\t\tarray( __CLASS__, 'execute_list_quizzes' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-quiz-details',\r\n-\t\t\t__( 'Get Quiz Details', 'learnpress' ),\r\n-\t\t\t__( 'Get quiz details including duration, passing grade, and question count.', 'learnpress' ),\r\n-\t\t\tself::schema_required_id( 'quiz_id' ),\r\n-\t\t\tself::schema_quiz_detail_output(),\r\n-\t\t\tarray( __CLASS__, 'execute_get_quiz_details' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-student-progress',\r\n-\t\t\t__( 'Get Student Progress', 'learnpress' ),\r\n-\t\t\t__( 'Get user progress and results for a course enrollment.', 'learnpress' ),\r\n-\t\t\tself::schema_progress_input(),\r\n-\t\t\tself::schema_object_output( 'progress' ),\r\n-\t\t\tarray( __CLASS__, 'execute_get_student_progress' )\r\n-\t\t);\r\n-\r\n-\t\tself::reg(\r\n-\t\t\t'learnpress\u002Fget-enrollments',\r\n-\t\t\t__( 'Get Enrollments', 'learnpress' ),\r\n-\t\t\t__( 'List course enrollments with optional filters and pagination.', 'learnpress' ),\r\n-\t\t\tself::schema_get_enrollments_input(),\r\n-\t\t\tself::schema_list_output( array( 'type' => 'object' ) ),\r\n-\t\t\tarray( __CLASS__, 'execute_get_enrollments' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Shared permission callback for LearnPress MCP abilities.\r\n-\t *\r\n-\t * @param string $ability_name Ability ID.\r\n-\t * @param mixed  $input        Ability input.\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function permission_callback( string $ability_name, $input = null ) {\r\n-\r\n-\t\tif ( ! AuthContext::is_api_key_auth() ) {\r\n-\t\t\treturn self::error_missing_auth();\r\n-\t\t}\r\n-\r\n-\t\t$current_user_id = get_current_user_id();\r\n-\t\t$base_capability = self::get_base_capability( $ability_name, $input );\r\n-\r\n-\t\tif ( $current_user_id \u003C= 0 ) {\r\n-\t\t\treturn self::error_missing_auth();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! current_user_can( $base_capability ) ) {\r\n-\t\t\treturn self::error_missing_base_capability( $base_capability );\r\n-\t\t}\r\n-\r\n-\t\t$required_scope = self::get_required_scope( $ability_name, $input );\r\n-\t\t$granted_scope  = AuthContext::get_permissions();\r\n-\r\n-\t\tif ( ! self::scope_allows( $granted_scope, $required_scope ) ) {\r\n-\t\t\treturn self::error_insufficient_scope( $required_scope, $granted_scope );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Register a single ability with common metadata annotations.\r\n-\t *\r\n-\t * @param string   $name             Ability name.\r\n-\t * @param string   $label            Human-readable label.\r\n-\t * @param string   $description      Description for clients.\r\n-\t * @param array    $input_schema     Input JSON schema.\r\n-\t * @param array    $output_schema    Output JSON schema.\r\n-\t * @param callable $execute_callback Callback that executes the ability.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected static function reg(\r\n-\t\tstring $name,\r\n-\t\tstring $label,\r\n-\t\tstring $description,\r\n-\t\tarray $input_schema,\r\n-\t\tarray $output_schema,\r\n-\t\t$execute_callback\r\n-\t): void {\r\n-\t\t$permission_callback = static function ( $input = null ) use ( $name ) {\r\n-\t\t\treturn self::permission_callback( $name, $input );\r\n-\t\t};\r\n-\r\n-\t\twp_register_ability(\r\n-\t\t\t$name,\r\n-\t\t\tarray(\r\n-\t\t\t\t'label'               => $label,\r\n-\t\t\t\t'description'         => $description,\r\n-\t\t\t\t'category'            => self::CATEGORY,\r\n-\t\t\t\t'execute_callback'    => $execute_callback,\r\n-\t\t\t\t'permission_callback' => $permission_callback,\r\n-\t\t\t\t'input_schema'        => $input_schema,\r\n-\t\t\t\t'output_schema'       => $output_schema,\r\n-\t\t\t\t'meta'                => array(\r\n-\t\t\t\t\t'annotations'  => array(\r\n-\t\t\t\t\t\t'readonly'    => true,\r\n-\t\t\t\t\t\t'destructive' => false,\r\n-\t\t\t\t\t\t'idempotent'  => true,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'mcp'          => array(\r\n-\t\t\t\t\t\t'public'         => true,\r\n-\t\t\t\t\t\t'type'           => 'tool',\r\n-\t\t\t\t\t\t'required_scope' => self::get_required_scope( $name ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'show_in_rest' => true,\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Resolve base capability required for ability execution.\r\n-\t *\r\n-\t * @param string $ability_name Ability ID.\r\n-\t * @param mixed  $input        Ability input payload.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected static function get_base_capability( string $ability_name, $input = null ): string {\r\n-\r\n-\t\t$capability = apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fbase-capability', 'manage_options', $ability_name, $input );\r\n-\r\n-\t\treturn is_string( $capability ) && '' !== $capability ? $capability : 'manage_options';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Resolve required key scope for an ability.\r\n-\t *\r\n-\t * @param string $ability_name Ability ID.\r\n-\t * @param mixed  $input        Ability input payload.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected static function get_required_scope( string $ability_name, $input = null ): string {\r\n-\r\n-\t\t$default_scopes = array(\r\n-\t\t\t'learnpress\u002Fget-courses'          => 'read',\r\n-\t\t\t'learnpress\u002Fget-course-details'   => 'read',\r\n-\t\t\t'learnpress\u002Flist-lessons'         => 'read',\r\n-\t\t\t'learnpress\u002Fget-lesson-details'   => 'read',\r\n-\t\t\t'learnpress\u002Flist-quizzes'         => 'read',\r\n-\t\t\t'learnpress\u002Fget-quiz-details'     => 'read',\r\n-\t\t\t'learnpress\u002Fget-student-progress' => 'read',\r\n-\t\t\t'learnpress\u002Fget-enrollments'      => 'read',\r\n-\t\t);\r\n-\r\n-\t\t$scope = $default_scopes[ $ability_name ] ?? 'read';\r\n-\t\t$scope = apply_filters( 'learn-press\u002Fmcp\u002Fability-required-scope', $scope, $ability_name, $input );\r\n-\r\n-\t\treturn in_array( $scope, array( 'read', 'write', 'read_write' ), true ) ? $scope : 'read';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if granted key scope satisfies required scope.\r\n-\t *\r\n-\t * @param string $granted_scope  Scope attached to current API key.\r\n-\t * @param string $required_scope Scope required by the ability.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected static function scope_allows( string $granted_scope, string $required_scope ): bool {\r\n-\r\n-\t\tif ( 'read_write' === $granted_scope ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\treturn $granted_scope === $required_scope;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Error for missing\u002Finvalid authentication.\r\n-\t *\r\n-\t * @param string $message Optional custom error message.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function error_missing_auth( string $message = '' ): WP_Error {\r\n-\r\n-\t\tif ( '' === $message ) {\r\n-\t\t\t$message = __( 'Missing or invalid MCP authentication.', 'learnpress' );\r\n-\t\t}\r\n-\r\n-\t\treturn new WP_Error(\r\n-\t\t\t'learnpress_mcp_missing_auth',\r\n-\t\t\t$message,\r\n-\t\t\tarray( 'status' => 401 )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Error for base capability failure.\r\n-\t *\r\n-\t * @param string $capability Required capability name.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function error_missing_base_capability( string $capability ): WP_Error {\r\n-\r\n-\t\treturn new WP_Error(\r\n-\t\t\t'learnpress_mcp_missing_base_capability',\r\n-\t\t\tsprintf(\r\n-\t\t\t\t\u002F* translators: %s: capability. *\u002F\r\n-\t\t\t\t__( 'Current user does not have required base capability: %s.', 'learnpress' ),\r\n-\t\t\t\t$capability\r\n-\t\t\t),\r\n-\t\t\tarray( 'status' => 403 )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Error for scope mismatch.\r\n-\t *\r\n-\t * @param string $required_scope Required scope for the ability.\r\n-\t * @param string $granted_scope  Scope granted by authenticated API key.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function error_insufficient_scope( string $required_scope, string $granted_scope ): WP_Error {\r\n-\r\n-\t\treturn new WP_Error(\r\n-\t\t\t'learnpress_mcp_insufficient_scope',\r\n-\t\t\tsprintf(\r\n-\t\t\t\t\u002F* translators: 1: required scope, 2: granted scope. *\u002F\r\n-\t\t\t\t__( 'API key scope is insufficient. Required: %1$s. Granted: %2$s.', 'learnpress' ),\r\n-\t\t\t\t$required_scope,\r\n-\t\t\t\t$granted_scope\r\n-\t\t\t),\r\n-\t\t\tarray( 'status' => 403 )\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP;\n+\n+use LearnPress\\MCP\\Auth\\AuthContext;\n+use LearnPress\\MCP\\Concerns\\AbilityExecutors;\n+use LearnPress\\MCP\\Concerns\\AbilityHelpers;\n+use LearnPress\\MCP\\Concerns\\AbilitySchemas;\n+use WP_REST_Server;\n+use WP_REST_Request;\n+use WP_REST_Response;\n+use WP_Error;\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Registers LearnPress abilities for the WordPress Abilities API.\n+ *\n+ * This class is intentionally small and orchestration-focused:\n+ * - bootstrap lifecycle hooks\n+ * - register category\n+ * - define ability manifests\n+ *\n+ * Execution logic, schemas, and mapping helpers are split into traits.\n+ *\u002F\n+class Abilities {\n+\n+\tuse AbilitySchemas;\n+\tuse AbilityHelpers;\n+\tuse AbilityExecutors;\n+\n+\t\u002F**\n+\t * Abilities API category slug for LearnPress abilities.\n+\t*\u002F\n+\tconst CATEGORY = 'learnpress';\n+\n+\t\u002F**\n+\t * Core MCP adapter route provided by WordPress Abilities API.\n+ *\u002F\n+\tconst MCP_ADAPTER_ROUTE = '\u002Fmcp\u002Fmcp-adapter-default-server';\n+\n+\t\u002F**\n+\t\t* LearnPress MCP alias route for clients.\n+\t*\u002F\n+\tconst MCP_ALIAS_NAMESPACE = 'lp\u002Fv1';\n+\tconst MCP_ALIAS_ROUTE     = '\u002Fmcp';\n+\t\u002F**\n+\t * Guard flag to avoid registering hooks more than once.\n+\t *\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $initialized = false;\n+\n+\t\u002F**\n+\t * Initialize ability registration hooks when Abilities API exists.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function init(): void {\n+\t\tif ( self::$initialized || ! function_exists( 'wp_register_ability' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tadd_action( 'wp_abilities_api_categories_init', array( __CLASS__, 'register_category' ) );\n+\t\tadd_action( 'wp_abilities_api_init', array( __CLASS__, 'register_abilities' ) );\n+\t\tadd_action( 'rest_api_init', array( __CLASS__, 'register_mcp_alias_route' ), 20 );\n+\t\tself::$initialized = true;\n+\t}\n+\n+\t\u002F**\n+\t * Register LearnPress MCP alias endpoint.\n+\t *\n+\t * Proxy requests to the default MCP adapter server so clients can use:\n+\t * \u002Fwp-json\u002Flp\u002Fv1\u002Fmcp\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function register_mcp_alias_route(): void {\n+\n+\t\tregister_rest_route(\n+\t\t\tself::MCP_ALIAS_NAMESPACE,\n+\t\t\tself::MCP_ALIAS_ROUTE,\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t'callback'            => array( __CLASS__, 'proxy_mcp_adapter_request' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Proxy LearnPress MCP alias request to the core MCP adapter route.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response|WP_Error\n+\t *\u002F\n+\tpublic static function proxy_mcp_adapter_request( WP_REST_Request $request ) {\n+\n+\t\t$proxy_request = new WP_REST_Request( $request->get_method(), self::MCP_ADAPTER_ROUTE );\n+\t\t$proxy_request->set_headers( $request->get_headers() );\n+\t\t$proxy_request->set_query_params( $request->get_query_params() );\n+\t\t$proxy_request->set_body_params( $request->get_body_params() );\n+\t\t$proxy_request->set_file_params( $request->get_file_params() );\n+\t\t$proxy_request->set_body( $request->get_body() );\n+\n+\t\treturn rest_do_request( $proxy_request );\n+\t}\n+\t\u002F**\n+\t * Register the LearnPress ability category.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function register_category(): void {\n+\t\twp_register_ability_category(\n+\t\t\tself::CATEGORY,\n+\t\t\tarray(\n+\t\t\t\t'label'       => __( 'LearnPress LMS', 'learnpress' ),\n+\t\t\t\t'description' => __( 'Read-only abilities for LearnPress LMS data.', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Register all Phase 1 (read-only) LearnPress abilities.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function register_abilities(): void {\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-courses',\n+\t\t\t__( 'Get Courses', 'learnpress' ),\n+\t\t\t__( 'List courses with optional filters and pagination.', 'learnpress' ),\n+\t\t\tself::schema_get_courses_input(),\n+\t\t\tself::schema_list_output( self::schema_course_summary() ),\n+\t\t\tarray( __CLASS__, 'execute_get_courses' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-course-details',\n+\t\t\t__( 'Get Course Details', 'learnpress' ),\n+\t\t\t__( 'Get details and curriculum summary for a course.', 'learnpress' ),\n+\t\t\tself::schema_required_id( 'course_id' ),\n+\t\t\tself::schema_course_detail_output(),\n+\t\t\tarray( __CLASS__, 'execute_get_course_details' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Flist-lessons',\n+\t\t\t__( 'List Lessons', 'learnpress' ),\n+\t\t\t__( 'List lessons in a course with optional filters.', 'learnpress' ),\n+\t\t\tself::schema_list_lessons_input(),\n+\t\t\tself::schema_list_output( self::schema_lesson_summary() ),\n+\t\t\tarray( __CLASS__, 'execute_list_lessons' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-lesson-details',\n+\t\t\t__( 'Get Lesson Details', 'learnpress' ),\n+\t\t\t__( 'Get lesson details including content, video intro, and materials.', 'learnpress' ),\n+\t\t\tself::schema_required_id( 'lesson_id' ),\n+\t\t\tself::schema_lesson_detail_output(),\n+\t\t\tarray( __CLASS__, 'execute_get_lesson_details' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Flist-quizzes',\n+\t\t\t__( 'List Quizzes', 'learnpress' ),\n+\t\t\t__( 'List quizzes in a course with pagination.', 'learnpress' ),\n+\t\t\tself::schema_list_quizzes_input(),\n+\t\t\tself::schema_list_output( self::schema_quiz_summary() ),\n+\t\t\tarray( __CLASS__, 'execute_list_quizzes' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-quiz-details',\n+\t\t\t__( 'Get Quiz Details', 'learnpress' ),\n+\t\t\t__( 'Get quiz details including duration, passing grade, and question count.', 'learnpress' ),\n+\t\t\tself::schema_required_id( 'quiz_id' ),\n+\t\t\tself::schema_quiz_detail_output(),\n+\t\t\tarray( __CLASS__, 'execute_get_quiz_details' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-student-progress',\n+\t\t\t__( 'Get Student Progress', 'learnpress' ),\n+\t\t\t__( 'Get user progress and results for a course enrollment.', 'learnpress' ),\n+\t\t\tself::schema_progress_input(),\n+\t\t\tself::schema_object_output( 'progress' ),\n+\t\t\tarray( __CLASS__, 'execute_get_student_progress' )\n+\t\t);\n+\n+\t\tself::reg(\n+\t\t\t'learnpress\u002Fget-enrollments',\n+\t\t\t__( 'Get Enrollments', 'learnpress' ),\n+\t\t\t__( 'List course enrollments with optional filters and pagination.', 'learnpress' ),\n+\t\t\tself::schema_get_enrollments_input(),\n+\t\t\tself::schema_list_output( array( 'type' => 'object' ) ),\n+\t\t\tarray( __CLASS__, 'execute_get_enrollments' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Shared permission callback for LearnPress MCP abilities.\n+\t *\n+\t * @param string $ability_name Ability ID.\n+\t * @param mixed  $input        Ability input.\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tpublic static function permission_callback( string $ability_name, $input = null ) {\n+\n+\t\tif ( ! AuthContext::is_api_key_auth() ) {\n+\t\t\treturn self::error_missing_auth();\n+\t\t}\n+\n+\t\t$current_user_id = get_current_user_id();\n+\t\t$base_capability = self::get_base_capability( $ability_name, $input );\n+\n+\t\tif ( $current_user_id \u003C= 0 ) {\n+\t\t\treturn self::error_missing_auth();\n+\t\t}\n+\n+\t\tif ( ! current_user_can( $base_capability ) ) {\n+\t\t\treturn self::error_missing_base_capability( $base_capability );\n+\t\t}\n+\n+\t\t$required_scope = self::get_required_scope( $ability_name, $input );\n+\t\t$granted_scope  = AuthContext::get_permissions();\n+\n+\t\tif ( ! self::scope_allows( $granted_scope, $required_scope ) ) {\n+\t\t\treturn self::error_insufficient_scope( $required_scope, $granted_scope );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\t\u002F**\n+\t * Register a single ability with common metadata annotations.\n+\t *\n+\t * @param string   $name             Ability name.\n+\t * @param string   $label            Human-readable label.\n+\t * @param string   $description      Description for clients.\n+\t * @param array    $input_schema     Input JSON schema.\n+\t * @param array    $output_schema    Output JSON schema.\n+\t * @param callable $execute_callback Callback that executes the ability.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected static function reg(\n+\t\tstring $name,\n+\t\tstring $label,\n+\t\tstring $description,\n+\t\tarray $input_schema,\n+\t\tarray $output_schema,\n+\t\t$execute_callback\n+\t): void {\n+\t\t$permission_callback = static function ( $input = null ) use ( $name ) {\n+\t\t\treturn self::permission_callback( $name, $input );\n+\t\t};\n+\n+\t\twp_register_ability(\n+\t\t\t$name,\n+\t\t\tarray(\n+\t\t\t\t'label'               => $label,\n+\t\t\t\t'description'         => $description,\n+\t\t\t\t'category'            => self::CATEGORY,\n+\t\t\t\t'execute_callback'    => $execute_callback,\n+\t\t\t\t'permission_callback' => $permission_callback,\n+\t\t\t\t'input_schema'        => $input_schema,\n+\t\t\t\t'output_schema'       => $output_schema,\n+\t\t\t\t'meta'                => array(\n+\t\t\t\t\t'annotations'  => array(\n+\t\t\t\t\t\t'readonly'    => true,\n+\t\t\t\t\t\t'destructive' => false,\n+\t\t\t\t\t\t'idempotent'  => true,\n+\t\t\t\t\t),\n+\t\t\t\t\t'mcp'          => array(\n+\t\t\t\t\t\t'public'         => true,\n+\t\t\t\t\t\t'type'           => 'tool',\n+\t\t\t\t\t\t'required_scope' => self::get_required_scope( $name ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'show_in_rest' => true,\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Resolve base capability required for ability execution.\n+\t *\n+\t * @param string $ability_name Ability ID.\n+\t * @param mixed  $input        Ability input payload.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected static function get_base_capability( string $ability_name, $input = null ): string {\n+\n+\t\t$capability = apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fbase-capability', 'manage_options', $ability_name, $input );\n+\n+\t\treturn is_string( $capability ) && '' !== $capability ? $capability : 'manage_options';\n+\t}\n+\n+\t\u002F**\n+\t * Resolve required key scope for an ability.\n+\t *\n+\t * @param string $ability_name Ability ID.\n+\t * @param mixed  $input        Ability input payload.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected static function get_required_scope( string $ability_name, $input = null ): string {\n+\n+\t\t$default_scopes = array(\n+\t\t\t'learnpress\u002Fget-courses'          => 'read',\n+\t\t\t'learnpress\u002Fget-course-details'   => 'read',\n+\t\t\t'learnpress\u002Flist-lessons'         => 'read',\n+\t\t\t'learnpress\u002Fget-lesson-details'   => 'read',\n+\t\t\t'learnpress\u002Flist-quizzes'         => 'read',\n+\t\t\t'learnpress\u002Fget-quiz-details'     => 'read',\n+\t\t\t'learnpress\u002Fget-student-progress' => 'read',\n+\t\t\t'learnpress\u002Fget-enrollments'      => 'read',\n+\t\t);\n+\n+\t\t$scope = $default_scopes[ $ability_name ] ?? 'read';\n+\t\t$scope = apply_filters( 'learn-press\u002Fmcp\u002Fability-required-scope', $scope, $ability_name, $input );\n+\n+\t\treturn in_array( $scope, array( 'read', 'write', 'read_write' ), true ) ? $scope : 'read';\n+\t}\n+\n+\t\u002F**\n+\t * Check if granted key scope satisfies required scope.\n+\t *\n+\t * @param string $granted_scope  Scope attached to current API key.\n+\t * @param string $required_scope Scope required by the ability.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected static function scope_allows( string $granted_scope, string $required_scope ): bool {\n+\n+\t\tif ( 'read_write' === $granted_scope ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\treturn $granted_scope === $required_scope;\n+\t}\n+\n+\t\u002F**\n+\t * Error for missing\u002Finvalid authentication.\n+\t *\n+\t * @param string $message Optional custom error message.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function error_missing_auth( string $message = '' ): WP_Error {\n+\n+\t\tif ( '' === $message ) {\n+\t\t\t$message = __( 'Missing or invalid MCP authentication.', 'learnpress' );\n+\t\t}\n+\n+\t\treturn new WP_Error(\n+\t\t\t'learnpress_mcp_missing_auth',\n+\t\t\t$message,\n+\t\t\tarray( 'status' => 401 )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Error for base capability failure.\n+\t *\n+\t * @param string $capability Required capability name.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function error_missing_base_capability( string $capability ): WP_Error {\n+\n+\t\treturn new WP_Error(\n+\t\t\t'learnpress_mcp_missing_base_capability',\n+\t\t\tsprintf(\n+\t\t\t\t\u002F* translators: %s: capability. *\u002F\n+\t\t\t\t__( 'Current user does not have required base capability: %s.', 'learnpress' ),\n+\t\t\t\t$capability\n+\t\t\t),\n+\t\t\tarray( 'status' => 403 )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Error for scope mismatch.\n+\t *\n+\t * @param string $required_scope Required scope for the ability.\n+\t * @param string $granted_scope  Scope granted by authenticated API key.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function error_insufficient_scope( string $required_scope, string $granted_scope ): WP_Error {\n+\n+\t\treturn new WP_Error(\n+\t\t\t'learnpress_mcp_insufficient_scope',\n+\t\t\tsprintf(\n+\t\t\t\t\u002F* translators: 1: required scope, 2: granted scope. *\u002F\n+\t\t\t\t__( 'API key scope is insufficient. Required: %1$s. Granted: %2$s.', 'learnpress' ),\n+\t\t\t\t$required_scope,\n+\t\t\t\t$granted_scope\n+\t\t\t),\n+\t\t\tarray( 'status' => 403 )\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FApiKeyAuthenticator.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FApiKeyAuthenticator.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FApiKeyAuthenticator.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FApiKeyAuthenticator.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,425 +1,425 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Auth;\r\n-\r\n-use LP_Helper;\r\n-use WP_Error;\r\n-use WP_REST_Request;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Authenticates MCP HTTP transport requests using LearnPress API keys.\r\n- *\u002F\r\n-class ApiKeyAuthenticator {\r\n-\t\u002F**\r\n-\t * Core MCP REST route path.\r\n-\t *\u002F\r\n-\tpublic const MCP_ROUTE = '\u002Fmcp\u002Fmcp-adapter-default-server';\r\n-\r\n-\t\u002F**\r\n-\t * LearnPress MCP alias route.\r\n-\t *\u002F\r\n-\tpublic const MCP_ALIAS_ROUTE = '\u002Flp\u002Fv1\u002Fmcp';\r\n-\t\u002F**\r\n-\t * @var self|null\r\n-\t *\u002F\r\n-\tprotected static $instance;\r\n-\r\n-\t\u002F**\r\n-\t * @var ApiKeysRepository\r\n-\t *\u002F\r\n-\tprotected $keys_repository;\r\n-\r\n-\t\u002F**\r\n-\t * @var WP_Error|null\r\n-\t *\u002F\r\n-\tprotected $auth_error;\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $api_key_present = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $is_target_rest_request = false;\r\n-\t\u002F**\r\n-\t * Bootstrap singleton.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function init(): void {\r\n-\r\n-\t\tif ( self::$instance ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tself::$instance = new self();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register repository and auth lifecycle hooks.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\r\n-\t\t$this->keys_repository = new ApiKeysRepository();\r\n-\r\n-\t\tadd_filter( 'determine_current_user', array( $this, 'determine_current_user' ), 15 );\r\n-\t\tadd_filter( 'rest_authentication_errors', array( $this, 'rest_authentication_errors' ), 15 );\r\n-\t\tadd_filter( 'rest_post_dispatch', array( $this, 'rest_post_dispatch' ), 10, 3 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Determine current user for MCP route using API key credentials.\r\n-\t *\r\n-\t * @param int|false $user_id Previously resolved user ID.\r\n-\t *\r\n-\t * @return int|false\r\n-\t *\u002F\r\n-\tpublic function determine_current_user( $user_id ) {\r\n-\t\treturn $this->authenticate_request( $user_id );\r\n-\t}\r\n-\t\u002F**\r\n-\t * Normalize auth errors for invalid API key attempts.\r\n-\t *\r\n-\t * @param WP_Error|null|bool $error Existing error from other authenticators.\r\n-\t *\r\n-\t * @return WP_Error|null|bool\r\n-\t *\u002F\r\n-\tpublic function rest_authentication_errors( $error ) {\r\n-\t\tif ( ! $this->is_target_rest_request && ! $this->is_target_rest_request() ) {\r\n-\t\t\treturn $error;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $error ) ) {\r\n-\t\t\treturn $error;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! AuthContext::is_api_key_auth() && ! ( $this->auth_error instanceof WP_Error ) ) {\r\n-\t\t\t$resolved_user_id = $this->authenticate_request( 0 );\r\n-\t\t\tif ( is_numeric( $resolved_user_id ) && (int) $resolved_user_id > 0 ) {\r\n-\t\t\t\twp_set_current_user( (int) $resolved_user_id );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->auth_error instanceof WP_Error ) {\r\n-\t\t\treturn $this->auth_error;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! AuthContext::is_api_key_auth() ) {\r\n-\t\t\treturn new WP_Error(\r\n-\t\t\t\t'learnpress_mcp_api_key_required',\r\n-\t\t\t\t__( 'MCP API key authentication is required.', 'learnpress' ),\r\n-\t\t\t\tarray( 'status' => 401 )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $error;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Attempt API-key authentication for current MCP request.\r\n-\t *\r\n-\t * @param int|false $user_id Previously resolved user ID.\r\n-\t *\r\n-\t * @return int|false\r\n-\t *\u002F\r\n-\tprotected function authenticate_request( $user_id ) {\r\n-\r\n-\t\t$this->auth_error             = null;\r\n-\t\t$this->api_key_present        = false;\r\n-\t\t$this->is_target_rest_request = $this->is_target_rest_request();\r\n-\t\tif ( ! $this->is_target_rest_request ) {\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\r\n-\t\tAuthContext::reset();\r\n-\r\n-\t\t$credentials = $this->parse_credentials();\r\n-\t\tif ( ! $credentials['present'] ) {\r\n-\t\t\treturn $user_id;\r\n-\t\t}\r\n-\t\t$this->api_key_present = true;\r\n-\r\n-\t\t$consumer_key    = $credentials['consumer_key'];\r\n-\t\t$consumer_secret = $credentials['consumer_secret'];\r\n-\r\n-\t\tif ( '' === $consumer_key || '' === $consumer_secret ) {\r\n-\t\t\t$this->auth_error = $this->invalid_credentials_error();\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$key = $this->keys_repository->find_by_consumer_key( $consumer_key );\r\n-\t\tif ( ! $key || empty( $key->consumer_secret ) || ! $this->keys_repository->verify_secret_hash( (string) $key->consumer_secret, $consumer_secret ) ) {\r\n-\t\t\t$this->auth_error = $this->invalid_credentials_error();\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$resolved_user_id = absint( $key->user_id );\r\n-\t\tif ( $resolved_user_id \u003C= 0 || ! get_user_by( 'id', $resolved_user_id ) ) {\r\n-\t\t\t$this->auth_error = $this->invalid_credentials_error();\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\tAuthContext::set_api_key_auth(\r\n-\t\t\tabsint( $key->key_id ),\r\n-\t\t\t$resolved_user_id,\r\n-\t\t\t(string) $key->permissions\r\n-\t\t);\r\n-\r\n-\t\treturn $resolved_user_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Post-dispatch behavior: update usage metrics for API-key-authenticated requests.\r\n-\t *\r\n-\t * @param mixed           $result  REST response object.\r\n-\t * @param mixed           $server  REST server instance.\r\n-\t * @param WP_REST_Request $request Request object.\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function rest_post_dispatch( $result, $server, $request ) {\r\n-\t\tunset( $server );\r\n-\r\n-\t\tif ( ! ( $request instanceof WP_REST_Request ) ) {\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $this->is_target_route_from_request( $request ) ) {\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\tif ( AuthContext::is_api_key_auth() && ! AuthContext::is_usage_touched() ) {\r\n-\t\t\t$key_id = AuthContext::get_key_id();\r\n-\t\t\tif ( $key_id > 0 ) {\r\n-\t\t\t\t$this->keys_repository->touch_usage( $key_id );\r\n-\t\t\t\tAuthContext::mark_usage_touched();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Parse API key credentials from query params or Basic auth.\r\n-\t *\r\n-\t * @return array\u003Cstring, mixed>\r\n-\t *\u002F\r\n-\tprotected function parse_credentials(): array {\r\n-\t\t$consumer_key_present    = isset( $_GET['consumer_key'] ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$consumer_secret_present = isset( $_GET['consumer_secret'] ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\r\n-\t\t$consumer_key    = $consumer_key_present ? LP_Helper::sanitize_params_submitted( $_GET['consumer_key'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\t$consumer_secret = $consumer_secret_present ? LP_Helper::sanitize_params_submitted( $_GET['consumer_secret'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\r\n-\t\tif ( $consumer_key_present || $consumer_secret_present ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'present'         => true,\r\n-\t\t\t\t'consumer_key'    => $consumer_key,\r\n-\t\t\t\t'consumer_secret' => $consumer_secret,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$has_php_auth_user = isset( $_SERVER['PHP_AUTH_USER'] );\r\n-\t\t$has_php_auth_pw   = isset( $_SERVER['PHP_AUTH_PW'] );\r\n-\r\n-\t\tif ( $has_php_auth_user || $has_php_auth_pw ) {\r\n-\t\t\t$basic_user = LP_Helper::sanitize_params_submitted( $_SERVER['PHP_AUTH_USER'] ?? '' );\r\n-\t\t\tif ( ! $this->looks_like_consumer_key( $basic_user ) ) {\r\n-\t\t\t\treturn array(\r\n-\t\t\t\t\t'present'         => false,\r\n-\t\t\t\t\t'consumer_key'    => '',\r\n-\t\t\t\t\t'consumer_secret' => '',\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'present'         => true,\r\n-\t\t\t\t'consumer_key'    => $basic_user,\r\n-\t\t\t\t'consumer_secret' => LP_Helper::sanitize_params_submitted( $_SERVER['PHP_AUTH_PW'] ?? '' ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$authorization = $this->get_authorization_header();\r\n-\t\tif ( stripos( $authorization, 'Basic ' ) !== 0 ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'present'         => false,\r\n-\t\t\t\t'consumer_key'    => '',\r\n-\t\t\t\t'consumer_secret' => '',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$decoded = base64_decode( trim( substr( $authorization, 6 ) ), true );\r\n-\t\tif ( false === $decoded || strpos( $decoded, ':' ) === false ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'present'         => true,\r\n-\t\t\t\t'consumer_key'    => '',\r\n-\t\t\t\t'consumer_secret' => '',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tlist( $consumer_key, $consumer_secret ) = explode( ':', $decoded, 2 );\r\n-\t\t$consumer_key                           = LP_Helper::sanitize_params_submitted( $consumer_key, 'text', false );\r\n-\t\tif ( ! $this->looks_like_consumer_key( $consumer_key ) ) {\r\n-\t\t\treturn array(\r\n-\t\t\t\t'present'         => false,\r\n-\t\t\t\t'consumer_key'    => '',\r\n-\t\t\t\t'consumer_secret' => '',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'present'         => true,\r\n-\t\t\t'consumer_key'    => $consumer_key,\r\n-\t\t\t'consumer_secret' => LP_Helper::sanitize_params_submitted( $consumer_secret, 'text', false ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Read Authorization header from server\u002Fglobal headers.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function get_authorization_header(): string {\r\n-\r\n-\t\t$server_header_candidates = array(\r\n-\t\t\t'HTTP_AUTHORIZATION',\r\n-\t\t\t'REDIRECT_HTTP_AUTHORIZATION',\r\n-\t\t\t'REDIRECT_REDIRECT_HTTP_AUTHORIZATION',\r\n-\t\t);\r\n-\t\tforeach ( $server_header_candidates as $server_key ) {\r\n-\t\t\tif ( ! empty( $_SERVER[ $server_key ] ) ) {\r\n-\t\t\t\treturn (string) wp_unslash( $_SERVER[ $server_key ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( function_exists( 'getallheaders' ) ) {\r\n-\t\t\t$headers = getallheaders();\r\n-\t\t\tif ( is_array( $headers ) ) {\r\n-\t\t\t\tforeach ( $headers as $key => $value ) {\r\n-\t\t\t\t\tif ( 'authorization' === strtolower( (string) $key ) ) {\r\n-\t\t\t\t\t\treturn (string) $value;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( function_exists( 'apache_request_headers' ) ) {\r\n-\t\t\t$headers = apache_request_headers();\r\n-\t\t\tif ( is_array( $headers ) ) {\r\n-\t\t\t\tforeach ( $headers as $key => $value ) {\r\n-\t\t\t\t\tif ( 'authorization' === strtolower( (string) $key ) ) {\r\n-\t\t\t\t\t\treturn (string) $value;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Whether current request targets the MCP default route.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_target_rest_request(): bool {\r\n-\t\t$rest_route = isset( $_GET['rest_route'] ) ? LP_Helper::sanitize_params_submitted( $_GET['rest_route'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\r\n-\t\tif ( '' !== $rest_route && $this->route_matches_mcp_target( $rest_route ) ) {\r\n-\t\t\treturn (bool) apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fis-target-rest-request', true, $rest_route, self::MCP_ROUTE );\r\n-\t\t}\r\n-\t\t$request_uri = '';\r\n-\t\tif ( ! empty( $_SERVER['REQUEST_URI'] ) ) {\r\n-\t\t\t$request_uri = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( '' === $request_uri ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$rest_prefix   = trailingslashit( rest_get_url_prefix() );\r\n-\t\t$is_mcp_target = false;\r\n-\t\tforeach ( $this->get_target_routes() as $route ) {\r\n-\t\t\t$target_path = $rest_prefix . ltrim( $route, '\u002F' );\r\n-\t\t\tif ( false !== strpos( $request_uri, $target_path ) ) {\r\n-\t\t\t\t$is_mcp_target = true;\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn (bool) apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fis-target-rest-request', $is_mcp_target, $request_uri, self::MCP_ROUTE );\r\n-\t}\r\n-\t\u002F**\r\n-\t * Whether a WP_REST_Request route is the MCP endpoint.\r\n-\t *\r\n-\t * @param WP_REST_Request $request Current REST request object.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_target_route_from_request( WP_REST_Request $request ): bool {\r\n-\r\n-\t\t$route = (string) $request->get_route();\r\n-\r\n-\t\treturn $this->route_matches_mcp_target( $route );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Target routes that should use LearnPress MCP auth behavior.\r\n-\t *\r\n-\t * @return array\u003Cint, string>\r\n-\t *\u002F\r\n-\tprotected function get_target_routes(): array {\r\n-\r\n-\t\treturn array(\r\n-\t\t\tself::MCP_ROUTE,\r\n-\t\t\tself::MCP_ALIAS_ROUTE,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Whether a route path matches one of MCP target routes.\r\n-\t *\r\n-\t * @param string $route Route path from request.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function route_matches_mcp_target( string $route ): bool {\r\n-\r\n-\t\tforeach ( $this->get_target_routes() as $target_route ) {\r\n-\t\t\tif ( 0 === strpos( $route, $target_route ) ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Standardized invalid credentials error.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected function invalid_credentials_error(): WP_Error {\r\n-\r\n-\t\treturn new WP_Error(\r\n-\t\t\t'learnpress_mcp_invalid_api_key_credentials',\r\n-\t\t\t__( 'Invalid MCP API credentials.', 'learnpress' ),\r\n-\t\t\tarray( 'status' => 401 )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validate expected consumer key format.\r\n-\t *\r\n-\t * @param string $consumer_key Plaintext consumer key.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function looks_like_consumer_key( string $consumer_key ): bool {\r\n-\r\n-\t\treturn 1 === preg_match( '\u002F^ck_[a-f0-9]{40}$\u002F', $consumer_key );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Auth;\n+\n+use LP_Helper;\n+use WP_Error;\n+use WP_REST_Request;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Authenticates MCP HTTP transport requests using LearnPress API keys.\n+ *\u002F\n+class ApiKeyAuthenticator {\n+\t\u002F**\n+\t * Core MCP REST route path.\n+\t *\u002F\n+\tpublic const MCP_ROUTE = '\u002Fmcp\u002Fmcp-adapter-default-server';\n+\n+\t\u002F**\n+\t * LearnPress MCP alias route.\n+\t *\u002F\n+\tpublic const MCP_ALIAS_ROUTE = '\u002Flp\u002Fv1\u002Fmcp';\n+\t\u002F**\n+\t * @var self|null\n+\t *\u002F\n+\tprotected static $instance;\n+\n+\t\u002F**\n+\t * @var ApiKeysRepository\n+\t *\u002F\n+\tprotected $keys_repository;\n+\n+\t\u002F**\n+\t * @var WP_Error|null\n+\t *\u002F\n+\tprotected $auth_error;\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $api_key_present = false;\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $is_target_rest_request = false;\n+\t\u002F**\n+\t * Bootstrap singleton.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function init(): void {\n+\n+\t\tif ( self::$instance ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tself::$instance = new self();\n+\t}\n+\n+\t\u002F**\n+\t * Register repository and auth lifecycle hooks.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tprotected function __construct() {\n+\n+\t\t$this->keys_repository = new ApiKeysRepository();\n+\n+\t\tadd_filter( 'determine_current_user', array( $this, 'determine_current_user' ), 15 );\n+\t\tadd_filter( 'rest_authentication_errors', array( $this, 'rest_authentication_errors' ), 15 );\n+\t\tadd_filter( 'rest_post_dispatch', array( $this, 'rest_post_dispatch' ), 10, 3 );\n+\t}\n+\n+\t\u002F**\n+\t * Determine current user for MCP route using API key credentials.\n+\t *\n+\t * @param int|false $user_id Previously resolved user ID.\n+\t *\n+\t * @return int|false\n+\t *\u002F\n+\tpublic function determine_current_user( $user_id ) {\n+\t\treturn $this->authenticate_request( $user_id );\n+\t}\n+\t\u002F**\n+\t * Normalize auth errors for invalid API key attempts.\n+\t *\n+\t * @param WP_Error|null|bool $error Existing error from other authenticators.\n+\t *\n+\t * @return WP_Error|null|bool\n+\t *\u002F\n+\tpublic function rest_authentication_errors( $error ) {\n+\t\tif ( ! $this->is_target_rest_request && ! $this->is_target_rest_request() ) {\n+\t\t\treturn $error;\n+\t\t}\n+\n+\t\tif ( ! empty( $error ) ) {\n+\t\t\treturn $error;\n+\t\t}\n+\n+\t\tif ( ! AuthContext::is_api_key_auth() && ! ( $this->auth_error instanceof WP_Error ) ) {\n+\t\t\t$resolved_user_id = $this->authenticate_request( 0 );\n+\t\t\tif ( is_numeric( $resolved_user_id ) && (int) $resolved_user_id > 0 ) {\n+\t\t\t\twp_set_current_user( (int) $resolved_user_id );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $this->auth_error instanceof WP_Error ) {\n+\t\t\treturn $this->auth_error;\n+\t\t}\n+\n+\t\tif ( ! AuthContext::is_api_key_auth() ) {\n+\t\t\treturn new WP_Error(\n+\t\t\t\t'learnpress_mcp_api_key_required',\n+\t\t\t\t__( 'MCP API key authentication is required.', 'learnpress' ),\n+\t\t\t\tarray( 'status' => 401 )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $error;\n+\t}\n+\n+\t\u002F**\n+\t * Attempt API-key authentication for current MCP request.\n+\t *\n+\t * @param int|false $user_id Previously resolved user ID.\n+\t *\n+\t * @return int|false\n+\t *\u002F\n+\tprotected function authenticate_request( $user_id ) {\n+\n+\t\t$this->auth_error             = null;\n+\t\t$this->api_key_present        = false;\n+\t\t$this->is_target_rest_request = $this->is_target_rest_request();\n+\t\tif ( ! $this->is_target_rest_request ) {\n+\t\t\treturn $user_id;\n+\t\t}\n+\n+\t\tAuthContext::reset();\n+\n+\t\t$credentials = $this->parse_credentials();\n+\t\tif ( ! $credentials['present'] ) {\n+\t\t\treturn $user_id;\n+\t\t}\n+\t\t$this->api_key_present = true;\n+\n+\t\t$consumer_key    = $credentials['consumer_key'];\n+\t\t$consumer_secret = $credentials['consumer_secret'];\n+\n+\t\tif ( '' === $consumer_key || '' === $consumer_secret ) {\n+\t\t\t$this->auth_error = $this->invalid_credentials_error();\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$key = $this->keys_repository->find_by_consumer_key( $consumer_key );\n+\t\tif ( ! $key || empty( $key->consumer_secret ) || ! $this->keys_repository->verify_secret_hash( (string) $key->consumer_secret, $consumer_secret ) ) {\n+\t\t\t$this->auth_error = $this->invalid_credentials_error();\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$resolved_user_id = absint( $key->user_id );\n+\t\tif ( $resolved_user_id \u003C= 0 || ! get_user_by( 'id', $resolved_user_id ) ) {\n+\t\t\t$this->auth_error = $this->invalid_credentials_error();\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\tAuthContext::set_api_key_auth(\n+\t\t\tabsint( $key->key_id ),\n+\t\t\t$resolved_user_id,\n+\t\t\t(string) $key->permissions\n+\t\t);\n+\n+\t\treturn $resolved_user_id;\n+\t}\n+\n+\t\u002F**\n+\t * Post-dispatch behavior: update usage metrics for API-key-authenticated requests.\n+\t *\n+\t * @param mixed           $result  REST response object.\n+\t * @param mixed           $server  REST server instance.\n+\t * @param WP_REST_Request $request Request object.\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function rest_post_dispatch( $result, $server, $request ) {\n+\t\tunset( $server );\n+\n+\t\tif ( ! ( $request instanceof WP_REST_Request ) ) {\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\tif ( ! $this->is_target_route_from_request( $request ) ) {\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\tif ( AuthContext::is_api_key_auth() && ! AuthContext::is_usage_touched() ) {\n+\t\t\t$key_id = AuthContext::get_key_id();\n+\t\t\tif ( $key_id > 0 ) {\n+\t\t\t\t$this->keys_repository->touch_usage( $key_id );\n+\t\t\t\tAuthContext::mark_usage_touched();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\t\u002F**\n+\t * Parse API key credentials from query params or Basic auth.\n+\t *\n+\t * @return array\u003Cstring, mixed>\n+\t *\u002F\n+\tprotected function parse_credentials(): array {\n+\t\t$consumer_key_present    = isset( $_GET['consumer_key'] ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$consumer_secret_present = isset( $_GET['consumer_secret'] ); \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\n+\t\t$consumer_key    = $consumer_key_present ? LP_Helper::sanitize_params_submitted( $_GET['consumer_key'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\t$consumer_secret = $consumer_secret_present ? LP_Helper::sanitize_params_submitted( $_GET['consumer_secret'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\n+\t\tif ( $consumer_key_present || $consumer_secret_present ) {\n+\t\t\treturn array(\n+\t\t\t\t'present'         => true,\n+\t\t\t\t'consumer_key'    => $consumer_key,\n+\t\t\t\t'consumer_secret' => $consumer_secret,\n+\t\t\t);\n+\t\t}\n+\n+\t\t$has_php_auth_user = isset( $_SERVER['PHP_AUTH_USER'] );\n+\t\t$has_php_auth_pw   = isset( $_SERVER['PHP_AUTH_PW'] );\n+\n+\t\tif ( $has_php_auth_user || $has_php_auth_pw ) {\n+\t\t\t$basic_user = LP_Helper::sanitize_params_submitted( $_SERVER['PHP_AUTH_USER'] ?? '' );\n+\t\t\tif ( ! $this->looks_like_consumer_key( $basic_user ) ) {\n+\t\t\t\treturn array(\n+\t\t\t\t\t'present'         => false,\n+\t\t\t\t\t'consumer_key'    => '',\n+\t\t\t\t\t'consumer_secret' => '',\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn array(\n+\t\t\t\t'present'         => true,\n+\t\t\t\t'consumer_key'    => $basic_user,\n+\t\t\t\t'consumer_secret' => LP_Helper::sanitize_params_submitted( $_SERVER['PHP_AUTH_PW'] ?? '' ),\n+\t\t\t);\n+\t\t}\n+\n+\t\t$authorization = $this->get_authorization_header();\n+\t\tif ( stripos( $authorization, 'Basic ' ) !== 0 ) {\n+\t\t\treturn array(\n+\t\t\t\t'present'         => false,\n+\t\t\t\t'consumer_key'    => '',\n+\t\t\t\t'consumer_secret' => '',\n+\t\t\t);\n+\t\t}\n+\n+\t\t$decoded = base64_decode( trim( substr( $authorization, 6 ) ), true );\n+\t\tif ( false === $decoded || strpos( $decoded, ':' ) === false ) {\n+\t\t\treturn array(\n+\t\t\t\t'present'         => true,\n+\t\t\t\t'consumer_key'    => '',\n+\t\t\t\t'consumer_secret' => '',\n+\t\t\t);\n+\t\t}\n+\n+\t\tlist( $consumer_key, $consumer_secret ) = explode( ':', $decoded, 2 );\n+\t\t$consumer_key                           = LP_Helper::sanitize_params_submitted( $consumer_key, 'text', false );\n+\t\tif ( ! $this->looks_like_consumer_key( $consumer_key ) ) {\n+\t\t\treturn array(\n+\t\t\t\t'present'         => false,\n+\t\t\t\t'consumer_key'    => '',\n+\t\t\t\t'consumer_secret' => '',\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'present'         => true,\n+\t\t\t'consumer_key'    => $consumer_key,\n+\t\t\t'consumer_secret' => LP_Helper::sanitize_params_submitted( $consumer_secret, 'text', false ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Read Authorization header from server\u002Fglobal headers.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_authorization_header(): string {\n+\n+\t\t$server_header_candidates = array(\n+\t\t\t'HTTP_AUTHORIZATION',\n+\t\t\t'REDIRECT_HTTP_AUTHORIZATION',\n+\t\t\t'REDIRECT_REDIRECT_HTTP_AUTHORIZATION',\n+\t\t);\n+\t\tforeach ( $server_header_candidates as $server_key ) {\n+\t\t\tif ( ! empty( $_SERVER[ $server_key ] ) ) {\n+\t\t\t\treturn (string) wp_unslash( $_SERVER[ $server_key ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( function_exists( 'getallheaders' ) ) {\n+\t\t\t$headers = getallheaders();\n+\t\t\tif ( is_array( $headers ) ) {\n+\t\t\t\tforeach ( $headers as $key => $value ) {\n+\t\t\t\t\tif ( 'authorization' === strtolower( (string) $key ) ) {\n+\t\t\t\t\t\treturn (string) $value;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( function_exists( 'apache_request_headers' ) ) {\n+\t\t\t$headers = apache_request_headers();\n+\t\t\tif ( is_array( $headers ) ) {\n+\t\t\t\tforeach ( $headers as $key => $value ) {\n+\t\t\t\t\tif ( 'authorization' === strtolower( (string) $key ) ) {\n+\t\t\t\t\t\treturn (string) $value;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Whether current request targets the MCP default route.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_target_rest_request(): bool {\n+\t\t$rest_route = isset( $_GET['rest_route'] ) ? LP_Helper::sanitize_params_submitted( $_GET['rest_route'] ) : ''; \u002F\u002F phpcs:ignore WordPress.Security.NonceVerification.Recommended\n+\t\tif ( '' !== $rest_route && $this->route_matches_mcp_target( $rest_route ) ) {\n+\t\t\treturn (bool) apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fis-target-rest-request', true, $rest_route, self::MCP_ROUTE );\n+\t\t}\n+\t\t$request_uri = '';\n+\t\tif ( ! empty( $_SERVER['REQUEST_URI'] ) ) {\n+\t\t\t$request_uri = esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) );\n+\t\t}\n+\n+\t\tif ( '' === $request_uri ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$rest_prefix   = trailingslashit( rest_get_url_prefix() );\n+\t\t$is_mcp_target = false;\n+\t\tforeach ( $this->get_target_routes() as $route ) {\n+\t\t\t$target_path = $rest_prefix . ltrim( $route, '\u002F' );\n+\t\t\tif ( false !== strpos( $request_uri, $target_path ) ) {\n+\t\t\t\t$is_mcp_target = true;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn (bool) apply_filters( 'learn-press\u002Fmcp\u002Fapi-keys\u002Fis-target-rest-request', $is_mcp_target, $request_uri, self::MCP_ROUTE );\n+\t}\n+\t\u002F**\n+\t * Whether a WP_REST_Request route is the MCP endpoint.\n+\t *\n+\t * @param WP_REST_Request $request Current REST request object.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function is_target_route_from_request( WP_REST_Request $request ): bool {\n+\n+\t\t$route = (string) $request->get_route();\n+\n+\t\treturn $this->route_matches_mcp_target( $route );\n+\t}\n+\n+\t\u002F**\n+\t * Target routes that should use LearnPress MCP auth behavior.\n+\t *\n+\t * @return array\u003Cint, string>\n+\t *\u002F\n+\tprotected function get_target_routes(): array {\n+\n+\t\treturn array(\n+\t\t\tself::MCP_ROUTE,\n+\t\t\tself::MCP_ALIAS_ROUTE,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Whether a route path matches one of MCP target routes.\n+\t *\n+\t * @param string $route Route path from request.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function route_matches_mcp_target( string $route ): bool {\n+\n+\t\tforeach ( $this->get_target_routes() as $target_route ) {\n+\t\t\tif ( 0 === strpos( $route, $target_route ) ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\t\u002F**\n+\t * Standardized invalid credentials error.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected function invalid_credentials_error(): WP_Error {\n+\n+\t\treturn new WP_Error(\n+\t\t\t'learnpress_mcp_invalid_api_key_credentials',\n+\t\t\t__( 'Invalid MCP API credentials.', 'learnpress' ),\n+\t\t\tarray( 'status' => 401 )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Validate expected consumer key format.\n+\t *\n+\t * @param string $consumer_key Plaintext consumer key.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprotected function looks_like_consumer_key( string $consumer_key ): bool {\n+\n+\t\treturn 1 === preg_match( '\u002F^ck_[a-f0-9]{40}$\u002F', $consumer_key );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FApiKeysRepository.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FApiKeysRepository.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FApiKeysRepository.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FApiKeysRepository.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,515 +1,517 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Auth;\r\n-\r\n-use LP_Database;\r\n-use LP_Filter;\r\n-use LP_Helper;\r\n-use LP_User_DB;\r\n-use LP_User_Filter;\r\n-use Exception;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Handles persistence and credential lifecycle for LearnPress MCP API keys.\r\n- *\u002F\r\n-class ApiKeysRepository {\r\n-\t\u002F**\r\n-\t * Allowed key permission values.\r\n-\t *\u002F\r\n-\tpublic const PERMISSIONS = array( 'read', 'write', 'read_write' );\r\n-\r\n-\t\u002F**\r\n-\t * @var \\wpdb\r\n-\t *\u002F\r\n-\tprotected $wpdb;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $table;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $users_table;\r\n-\r\n-\t\u002F**\r\n-\t * Initialize DB handles for MCP API key storage.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$this->wpdb        = $wpdb;\r\n-\t\t$this->table       = LP_Database::getInstance()->tb_lp_mcp_api_keys;\r\n-\t\t$this->users_table = $wpdb->users;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a new API key and return plaintext credentials once.\r\n-\t *\r\n-\t * @param int    $user_id User ID that owns the key.\r\n-\t * @param string $description Optional key description.\r\n-\t * @param string $permissions Key permission.\r\n-\t *\r\n-\t * @return array\u003Cstring, mixed>|null\r\n-\t *\u002F\r\n-\tpublic function create_key( int $user_id, string $description = '', string $permissions = 'read' ): ?array {\r\n-\t\t$user_id = absint( $user_id );\r\n-\t\tif ( $user_id \u003C= 0 || ! $this->is_valid_user_id( $user_id ) ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$permissions     = $this->normalize_permissions( $permissions );\r\n-\t\t$description     = $this->normalize_description( $description );\r\n-\t\t$consumer_key    = $this->generate_token( 'ck_' );\r\n-\t\t$consumer_secret = $this->generate_token( 'cs_' );\r\n-\t\t$created_at      = current_time( 'mysql', true );\r\n-\r\n-\t\t$inserted = $this->wpdb->insert(\r\n-\t\t\t$this->table,\r\n-\t\t\tarray(\r\n-\t\t\t\t'user_id'         => $user_id,\r\n-\t\t\t\t'description'     => $description,\r\n-\t\t\t\t'permissions'     => $permissions,\r\n-\t\t\t\t'consumer_key'    => self::hash_consumer_key( $consumer_key ),\r\n-\t\t\t\t'consumer_secret' => self::hash_consumer_secret( $consumer_secret ),\r\n-\t\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\r\n-\t\t\t\t'created_at'      => $created_at,\r\n-\t\t\t),\r\n-\t\t\tarray( '%d', '%s', '%s', '%s', '%s', '%s', '%s' )\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $inserted ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'key_id'          => (int) $this->wpdb->insert_id,\r\n-\t\t\t'user_id'         => $user_id,\r\n-\t\t\t'description'     => $description,\r\n-\t\t\t'permissions'     => $permissions,\r\n-\t\t\t'consumer_key'    => $consumer_key,\r\n-\t\t\t'consumer_secret' => $consumer_secret,\r\n-\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\r\n-\t\t\t'created_at'      => $created_at,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update mutable metadata for an API key.\r\n-\t *\r\n-\t * @param int    $key_id      Key ID.\r\n-\t * @param int    $user_id     New owner user ID.\r\n-\t * @param string $description New key description.\r\n-\t * @param string $permissions New key permissions.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function update_key_meta( int $key_id, int $user_id, string $description, string $permissions ): bool {\r\n-\t\t$key_id  = absint( $key_id );\r\n-\t\t$user_id = absint( $user_id );\r\n-\r\n-\t\tif ( $key_id \u003C= 0 || $user_id \u003C= 0 || ! $this->is_valid_user_id( $user_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$updated = $this->wpdb->update(\r\n-\t\t\t$this->table,\r\n-\t\t\tarray(\r\n-\t\t\t\t'user_id'     => $user_id,\r\n-\t\t\t\t'description' => $this->normalize_description( $description ),\r\n-\t\t\t\t'permissions' => $this->normalize_permissions( $permissions ),\r\n-\t\t\t\t'updated_at'  => current_time( 'mysql', true ),\r\n-\t\t\t),\r\n-\t\t\tarray( 'key_id' => $key_id ),\r\n-\t\t\tarray( '%d', '%s', '%s', '%s' ),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\r\n-\t\treturn false !== $updated;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rotate consumer key and secret for an existing key.\r\n-\t *\r\n-\t * @param int $key_id Key ID.\r\n-\t *\r\n-\t * @return array\u003Cstring, mixed>|null\r\n-\t *\u002F\r\n-\tpublic function regenerate_key( int $key_id ): ?array {\r\n-\t\t$key_id = absint( $key_id );\r\n-\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$row = $this->get_key( $key_id );\r\n-\t\tif ( ! $row ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$consumer_key    = $this->generate_token( 'ck_' );\r\n-\t\t$consumer_secret = $this->generate_token( 'cs_' );\r\n-\t\t$updated_at      = current_time( 'mysql', true );\r\n-\r\n-\t\t$updated = $this->wpdb->update(\r\n-\t\t\t$this->table,\r\n-\t\t\tarray(\r\n-\t\t\t\t'consumer_key'    => self::hash_consumer_key( $consumer_key ),\r\n-\t\t\t\t'consumer_secret' => self::hash_consumer_secret( $consumer_secret ),\r\n-\t\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\r\n-\t\t\t\t'updated_at'      => $updated_at,\r\n-\t\t\t),\r\n-\t\t\tarray( 'key_id' => $key_id ),\r\n-\t\t\tarray( '%s', '%s', '%s', '%s' ),\r\n-\t\t\tarray( '%d' )\r\n-\t\t);\r\n-\r\n-\t\tif ( false === $updated ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'key_id'          => $key_id,\r\n-\t\t\t'user_id'         => (int) $row->user_id,\r\n-\t\t\t'description'     => (string) $row->description,\r\n-\t\t\t'permissions'     => (string) $row->permissions,\r\n-\t\t\t'consumer_key'    => $consumer_key,\r\n-\t\t\t'consumer_secret' => $consumer_secret,\r\n-\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\r\n-\t\t\t'updated_at'      => $updated_at,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Revoke (delete) one key.\r\n-\t *\r\n-\t * @param int $key_id Key ID.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function revoke_key( int $key_id ): bool {\r\n-\t\t$key_id = absint( $key_id );\r\n-\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$deleted = $this->wpdb->delete( $this->table, array( 'key_id' => $key_id ), array( '%d' ) );\r\n-\r\n-\t\treturn false !== $deleted;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Revoke multiple keys.\r\n-\t *\r\n-\t * @param array\u003Cint, int|string> $key_ids Key IDs to revoke.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function revoke_keys( array $key_ids ): int {\r\n-\t\t$key_ids = array_values( array_filter( array_map( 'absint', $key_ids ) ) );\r\n-\t\tif ( empty( $key_ids ) ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\"DELETE FROM {$this->table} WHERE key_id IN (\" . LP_Helper::db_format_array( $key_ids, '%d' ) . ')',\r\n-\t\t\t$key_ids\r\n-\t\t);\r\n-\r\n-\t\t$deleted = $this->wpdb->query( $sql );\r\n-\r\n-\t\treturn $deleted > 0 ? (int) $deleted : 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find key row by plaintext consumer key.\r\n-\t *\r\n-\t * @param string $consumer_key Plaintext consumer key.\r\n-\t *\r\n-\t * @return object|null\r\n-\t *\u002F\r\n-\tpublic function find_by_consumer_key( string $consumer_key ) {\r\n-\t\t$consumer_key = LP_Helper::sanitize_params_submitted( $consumer_key );\r\n-\t\tif ( '' === $consumer_key ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->table;\r\n-\t\t$filter->collection_alias = 'k';\r\n-\t\t$filter->only_fields      = array( 'k.*' );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND k.consumer_key = %s', self::hash_consumer_key( $consumer_key ) );\r\n-\t\t$filter->limit            = 1;\r\n-\t\t$filter->field_count      = 'k.key_id';\r\n-\t\t$filter->run_query_count  = false;\r\n-\r\n-\t\t$total_rows = 0;\r\n-\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\r\n-\t\tif ( ! is_array( $rows ) || empty( $rows ) ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn reset( $rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get a key row by key ID.\r\n-\t *\r\n-\t * @param int $key_id Key ID.\r\n-\t *\r\n-\t * @return object|null\r\n-\t *\u002F\r\n-\tpublic function get_key( int $key_id ) {\r\n-\t\t$key_id = absint( $key_id );\r\n-\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->table;\r\n-\t\t$filter->collection_alias = 'k';\r\n-\t\t$filter->only_fields      = array( 'k.*' );\r\n-\t\t$filter->where[]          = $this->wpdb->prepare( 'AND k.key_id = %d', $key_id );\r\n-\t\t$filter->limit            = 1;\r\n-\t\t$filter->field_count      = 'k.key_id';\r\n-\t\t$filter->run_query_count  = false;\r\n-\r\n-\t\t$total_rows = 0;\r\n-\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\r\n-\t\tif ( ! is_array( $rows ) || empty( $rows ) ) {\r\n-\t\t\treturn null;\r\n-\t\t}\r\n-\r\n-\t\treturn reset( $rows );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check whether raw secret matches stored secret hash.\r\n-\t *\r\n-\t * @param string $stored_hash     Stored secret hash from database.\r\n-\t * @param string $provided_secret Raw secret provided by request.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function verify_secret_hash( string $stored_hash, string $provided_secret ): bool {\r\n-\t\t$provided_hash = self::hash_consumer_secret( $provided_secret );\r\n-\r\n-\t\treturn hash_equals( $stored_hash, $provided_hash );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update key usage metrics.\r\n-\t *\r\n-\t * @param int $key_id Key ID.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function touch_usage( int $key_id ): void {\r\n-\t\t$key_id = absint( $key_id );\r\n-\t\tif ( $key_id \u003C= 0 ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$now = current_time( 'mysql', true );\r\n-\t\t$sql = $this->wpdb->prepare(\r\n-\t\t\t\"UPDATE {$this->table} SET last_access = %s, call_count = call_count + 1 WHERE key_id = %d\",\r\n-\t\t\t$now,\r\n-\t\t\t$key_id\r\n-\t\t);\r\n-\r\n-\t\t$this->wpdb->query( $sql );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Query keys list for admin table.\r\n-\t *\r\n-\t * @param array\u003Cstring, mixed> $args Query arguments.\r\n-\t *\r\n-\t * @return array\u003Cstring, mixed>\r\n-\t *\u002F\r\n-\tpublic function query_keys( array $args = array() ): array {\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'page'     => 1,\r\n-\t\t\t\t'per_page' => 20,\r\n-\t\t\t\t'search'   => '',\r\n-\t\t\t\t'user_id'  => 0,\r\n-\t\t\t\t'orderby'  => 'created_at',\r\n-\t\t\t\t'order'    => 'DESC',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$page     = max( 1, absint( $args['page'] ) );\r\n-\t\t$per_page = max( 1, min( 100, absint( $args['per_page'] ) ) );\r\n-\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->table;\r\n-\t\t$filter->collection_alias = 'k';\r\n-\t\t$filter->only_fields      = array(\r\n-\t\t\t'k.*',\r\n-\t\t\t'u.display_name AS user_display_name',\r\n-\t\t\t'u.user_login',\r\n-\t\t);\r\n-\t\t$filter->join[]           = \"LEFT JOIN {$this->users_table} u ON u.ID = k.user_id\";\r\n-\t\t$filter->field_count      = 'k.key_id';\r\n-\t\t$filter->limit            = $per_page;\r\n-\t\t$filter->page             = $page;\r\n-\r\n-\t\t$search = LP_Helper::sanitize_params_submitted( (string) $args['search'] );\r\n-\t\tif ( '' !== $search ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND k.description LIKE %s', '%' . $this->wpdb->esc_like( $search ) . '%' );\r\n-\t\t}\r\n-\r\n-\t\t$user_id = absint( $args['user_id'] );\r\n-\t\tif ( $user_id > 0 ) {\r\n-\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND k.user_id = %d', $user_id );\r\n-\t\t}\r\n-\r\n-\t\t$order_by_map     = array(\r\n-\t\t\t'description' => 'k.description',\r\n-\t\t\t'user'        => 'u.display_name',\r\n-\t\t\t'permissions' => 'k.permissions',\r\n-\t\t\t'last_access' => 'k.last_access',\r\n-\t\t\t'call_count'  => 'k.call_count',\r\n-\t\t\t'created_at'  => 'k.created_at',\r\n-\t\t);\r\n-\t\t$filter->order_by = $order_by_map[ $args['orderby'] ] ?? $order_by_map['created_at'];\r\n-\t\t$filter->order    = 'ASC' === strtoupper( (string) $args['order'] ) ? LP_Filter::ORDER_ASC : LP_Filter::ORDER_DESC;\r\n-\r\n-\t\t$total_items = 0;\r\n-\t\t$items       = LP_Database::getInstance()->execute( $filter, $total_items );\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'items'    => is_array( $items ) ? $items : array(),\r\n-\t\t\t'total'    => $total_items,\r\n-\t\t\t'page'     => $page,\r\n-\t\t\t'per_page' => $per_page,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return users currently owning MCP API keys.\r\n-\t *\r\n-\t * @return array\u003Cint, object>\r\n-\t *\u002F\r\n-\tpublic function users_with_keys(): array {\r\n-\t\t$filter                   = new LP_Filter();\r\n-\t\t$filter->collection       = $this->users_table;\r\n-\t\t$filter->collection_alias = 'u';\r\n-\t\t$filter->only_fields      = array(\r\n-\t\t\t'u.ID',\r\n-\t\t\t'u.user_login',\r\n-\t\t\t'u.display_name',\r\n-\t\t);\r\n-\t\t$filter->join[]           = \"INNER JOIN {$this->table} k ON u.ID = k.user_id\";\r\n-\t\t$filter->group_by         = 'u.ID';\r\n-\t\t$filter->order_by         = 'u.display_name';\r\n-\t\t$filter->order            = LP_Filter::ORDER_ASC;\r\n-\t\t$filter->limit            = -1;\r\n-\t\t$filter->run_query_count  = false;\r\n-\r\n-\t\t$total_rows = 0;\r\n-\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\r\n-\r\n-\t\treturn is_array( $rows ) ? $rows : array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hash plaintext consumer key for storage\u002Flookup.\r\n-\t *\r\n-\t * @param string $consumer_key Plaintext consumer key.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function hash_consumer_key( string $consumer_key ): string {\r\n-\t\treturn hash_hmac( 'sha256', $consumer_key, 'lp-mcp-api' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hash plaintext consumer secret for storage\u002Fverification.\r\n-\t *\r\n-\t * @param string $consumer_secret Plaintext consumer secret.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function hash_consumer_secret( string $consumer_secret ): string {\r\n-\t\treturn hash_hmac( 'sha256', $consumer_secret, 'lp-mcp-secret' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Normalize description for DB storage.\r\n-\t *\r\n-\t * @param string $description Raw key description.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function normalize_description( string $description ): string {\r\n-\t\t$description = LP_Helper::sanitize_params_submitted( $description );\r\n-\r\n-\t\treturn function_exists( 'mb_substr' ) ? mb_substr( $description, 0, 200 ) : substr( $description, 0, 200 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Normalize requested permission to a supported value.\r\n-\t *\r\n-\t * @param string $permissions Raw requested permission.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function normalize_permissions( string $permissions ): string {\r\n-\t\t$permissions = LP_Helper::sanitize_params_submitted( $permissions, 'key' );\r\n-\r\n-\t\tif ( ! in_array( $permissions, self::PERMISSIONS, true ) ) {\r\n-\t\t\t$permissions = 'read';\r\n-\t\t}\r\n-\r\n-\t\treturn $permissions;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate token in ck_\u002Fcs_ format.\r\n-\t *\r\n-\t * @param string $prefix Token prefix (`ck_` or `cs_`).\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprotected function generate_token( string $prefix ): string {\r\n-\t\ttry {\r\n-\t\t\t$hex = bin2hex( random_bytes( 20 ) );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$hex = substr( hash( 'sha256', wp_generate_password( 64, true, true ) . microtime( true ) ), 0, 40 );\r\n-\t\t}\r\n-\r\n-\t\treturn $prefix . $hex;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validate user existence via LearnPress DB + Filter classes.\r\n-\t *\r\n-\t * @param int $user_id User ID.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprotected function is_valid_user_id( int $user_id ): bool {\r\n-\t\t$user_id = absint( $user_id );\r\n-\t\tif ( $user_id \u003C= 0 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$filter              = new LP_User_Filter();\r\n-\t\t$filter->ID          = $user_id;\r\n-\t\t$filter->limit       = 1;\r\n-\t\t$filter->only_fields = array( 'u.ID' );\r\n-\t\t$filter->field_count = 'u.ID';\r\n-\r\n-\t\t$total_rows = 0;\r\n-\t\t$rows       = LP_User_DB::instance()->get_users( $filter, $total_rows );\r\n-\r\n-\t\treturn is_array( $rows ) && ! empty( $rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Auth;\n+\n+use LP_Database;\n+use LP_Filter;\n+use LP_Helper;\n+use LearnPress\\Databases\\UserDB;\n+use LearnPress\\Filters\\UserFilter;\n+use Exception;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Handles persistence and credential lifecycle for LearnPress MCP API keys.\n+ *\u002F\n+class ApiKeysRepository {\n+\t\u002F**\n+\t * Allowed key permission values.\n+\t *\u002F\n+\tpublic const PERMISSIONS = array( 'read', 'write', 'read_write' );\n+\n+\t\u002F**\n+\t * @var \\wpdb\n+\t *\u002F\n+\tprotected $wpdb;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $table;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $users_table;\n+\n+\t\u002F**\n+\t * Initialize DB handles for MCP API key storage.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tglobal $wpdb;\n+\n+\t\t$this->wpdb        = $wpdb;\n+\t\t$this->table       = LP_Database::getInstance()->tb_lp_mcp_api_keys;\n+\t\t$this->users_table = $wpdb->users;\n+\t}\n+\n+\t\u002F**\n+\t * Create a new API key and return plaintext credentials once.\n+\t *\n+\t * @param int $user_id User ID that owns the key.\n+\t * @param string $description Optional key description.\n+\t * @param string $permissions Key permission.\n+\t *\n+\t * @return array\u003Cstring, mixed>|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_key( int $user_id, string $description = '', string $permissions = 'read' ): ?array {\n+\t\t$user_id = absint( $user_id );\n+\t\tif ( $user_id \u003C= 0 || ! $this->is_valid_user_id( $user_id ) ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$permissions     = $this->normalize_permissions( $permissions );\n+\t\t$description     = $this->normalize_description( $description );\n+\t\t$consumer_key    = $this->generate_token( 'ck_' );\n+\t\t$consumer_secret = $this->generate_token( 'cs_' );\n+\t\t$created_at      = current_time( 'mysql', true );\n+\n+\t\t$inserted = $this->wpdb->insert(\n+\t\t\t$this->table,\n+\t\t\tarray(\n+\t\t\t\t'user_id'         => $user_id,\n+\t\t\t\t'description'     => $description,\n+\t\t\t\t'permissions'     => $permissions,\n+\t\t\t\t'consumer_key'    => self::hash_consumer_key( $consumer_key ),\n+\t\t\t\t'consumer_secret' => self::hash_consumer_secret( $consumer_secret ),\n+\t\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\n+\t\t\t\t'created_at'      => $created_at,\n+\t\t\t),\n+\t\t\tarray( '%d', '%s', '%s', '%s', '%s', '%s', '%s' )\n+\t\t);\n+\n+\t\tif ( ! $inserted ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'key_id'          => (int) $this->wpdb->insert_id,\n+\t\t\t'user_id'         => $user_id,\n+\t\t\t'description'     => $description,\n+\t\t\t'permissions'     => $permissions,\n+\t\t\t'consumer_key'    => $consumer_key,\n+\t\t\t'consumer_secret' => $consumer_secret,\n+\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\n+\t\t\t'created_at'      => $created_at,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Update mutable metadata for an API key.\n+\t *\n+\t * @param int    $key_id      Key ID.\n+\t * @param int    $user_id     New owner user ID.\n+\t * @param string $description New key description.\n+\t * @param string $permissions New key permissions.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function update_key_meta( int $key_id, int $user_id, string $description, string $permissions ): bool {\n+\t\t$key_id  = absint( $key_id );\n+\t\t$user_id = absint( $user_id );\n+\n+\t\tif ( $key_id \u003C= 0 || $user_id \u003C= 0 || ! $this->is_valid_user_id( $user_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$updated = $this->wpdb->update(\n+\t\t\t$this->table,\n+\t\t\tarray(\n+\t\t\t\t'user_id'     => $user_id,\n+\t\t\t\t'description' => $this->normalize_description( $description ),\n+\t\t\t\t'permissions' => $this->normalize_permissions( $permissions ),\n+\t\t\t\t'updated_at'  => current_time( 'mysql', true ),\n+\t\t\t),\n+\t\t\tarray( 'key_id' => $key_id ),\n+\t\t\tarray( '%d', '%s', '%s', '%s' ),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\n+\t\treturn false !== $updated;\n+\t}\n+\n+\t\u002F**\n+\t * Rotate consumer key and secret for an existing key.\n+\t *\n+\t * @param int $key_id Key ID.\n+\t *\n+\t * @return array\u003Cstring, mixed>|null\n+\t *\u002F\n+\tpublic function regenerate_key( int $key_id ): ?array {\n+\t\t$key_id = absint( $key_id );\n+\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$row = $this->get_key( $key_id );\n+\t\tif ( ! $row ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$consumer_key    = $this->generate_token( 'ck_' );\n+\t\t$consumer_secret = $this->generate_token( 'cs_' );\n+\t\t$updated_at      = current_time( 'mysql', true );\n+\n+\t\t$updated = $this->wpdb->update(\n+\t\t\t$this->table,\n+\t\t\tarray(\n+\t\t\t\t'consumer_key'    => self::hash_consumer_key( $consumer_key ),\n+\t\t\t\t'consumer_secret' => self::hash_consumer_secret( $consumer_secret ),\n+\t\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\n+\t\t\t\t'updated_at'      => $updated_at,\n+\t\t\t),\n+\t\t\tarray( 'key_id' => $key_id ),\n+\t\t\tarray( '%s', '%s', '%s', '%s' ),\n+\t\t\tarray( '%d' )\n+\t\t);\n+\n+\t\tif ( false === $updated ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'key_id'          => $key_id,\n+\t\t\t'user_id'         => (int) $row->user_id,\n+\t\t\t'description'     => (string) $row->description,\n+\t\t\t'permissions'     => (string) $row->permissions,\n+\t\t\t'consumer_key'    => $consumer_key,\n+\t\t\t'consumer_secret' => $consumer_secret,\n+\t\t\t'truncated_key'   => substr( $consumer_key, -7 ),\n+\t\t\t'updated_at'      => $updated_at,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Revoke (delete) one key.\n+\t *\n+\t * @param int $key_id Key ID.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function revoke_key( int $key_id ): bool {\n+\t\t$key_id = absint( $key_id );\n+\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$deleted = $this->wpdb->delete( $this->table, array( 'key_id' => $key_id ), array( '%d' ) );\n+\n+\t\treturn false !== $deleted;\n+\t}\n+\n+\t\u002F**\n+\t * Revoke multiple keys.\n+\t *\n+\t * @param array\u003Cint, int|string> $key_ids Key IDs to revoke.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function revoke_keys( array $key_ids ): int {\n+\t\t$key_ids = array_values( array_filter( array_map( 'absint', $key_ids ) ) );\n+\t\tif ( empty( $key_ids ) ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\"DELETE FROM {$this->table} WHERE key_id IN (\" . LP_Helper::db_format_array( $key_ids, '%d' ) . ')',\n+\t\t\t$key_ids\n+\t\t);\n+\n+\t\t$deleted = $this->wpdb->query( $sql );\n+\n+\t\treturn $deleted > 0 ? (int) $deleted : 0;\n+\t}\n+\n+\t\u002F**\n+\t * Find key row by plaintext consumer key.\n+\t *\n+\t * @param string $consumer_key Plaintext consumer key.\n+\t *\n+\t * @return object|null\n+\t *\u002F\n+\tpublic function find_by_consumer_key( string $consumer_key ) {\n+\t\t$consumer_key = LP_Helper::sanitize_params_submitted( $consumer_key );\n+\t\tif ( '' === $consumer_key ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->table;\n+\t\t$filter->collection_alias = 'k';\n+\t\t$filter->only_fields      = array( 'k.*' );\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND k.consumer_key = %s', self::hash_consumer_key( $consumer_key ) );\n+\t\t$filter->limit            = 1;\n+\t\t$filter->field_count      = 'k.key_id';\n+\t\t$filter->run_query_count  = false;\n+\n+\t\t$total_rows = 0;\n+\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\n+\t\tif ( ! is_array( $rows ) || empty( $rows ) ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn reset( $rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get a key row by key ID.\n+\t *\n+\t * @param int $key_id Key ID.\n+\t *\n+\t * @return object|null\n+\t *\u002F\n+\tpublic function get_key( int $key_id ) {\n+\t\t$key_id = absint( $key_id );\n+\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->table;\n+\t\t$filter->collection_alias = 'k';\n+\t\t$filter->only_fields      = array( 'k.*' );\n+\t\t$filter->where[]          = $this->wpdb->prepare( 'AND k.key_id = %d', $key_id );\n+\t\t$filter->limit            = 1;\n+\t\t$filter->field_count      = 'k.key_id';\n+\t\t$filter->run_query_count  = false;\n+\n+\t\t$total_rows = 0;\n+\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\n+\t\tif ( ! is_array( $rows ) || empty( $rows ) ) {\n+\t\t\treturn null;\n+\t\t}\n+\n+\t\treturn reset( $rows );\n+\t}\n+\n+\t\u002F**\n+\t * Check whether raw secret matches stored secret hash.\n+\t *\n+\t * @param string $stored_hash     Stored secret hash from database.\n+\t * @param string $provided_secret Raw secret provided by request.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function verify_secret_hash( string $stored_hash, string $provided_secret ): bool {\n+\t\t$provided_hash = self::hash_consumer_secret( $provided_secret );\n+\n+\t\treturn hash_equals( $stored_hash, $provided_hash );\n+\t}\n+\n+\t\u002F**\n+\t * Update key usage metrics.\n+\t *\n+\t * @param int $key_id Key ID.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function touch_usage( int $key_id ): void {\n+\t\t$key_id = absint( $key_id );\n+\t\tif ( $key_id \u003C= 0 ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$now = current_time( 'mysql', true );\n+\t\t$sql = $this->wpdb->prepare(\n+\t\t\t\"UPDATE {$this->table} SET last_access = %s, call_count = call_count + 1 WHERE key_id = %d\",\n+\t\t\t$now,\n+\t\t\t$key_id\n+\t\t);\n+\n+\t\t$this->wpdb->query( $sql );\n+\t}\n+\n+\t\u002F**\n+\t * Query keys list for admin table.\n+\t *\n+\t * @param array\u003Cstring, mixed> $args Query arguments.\n+\t *\n+\t * @return array\u003Cstring, mixed>\n+\t *\u002F\n+\tpublic function query_keys( array $args = array() ): array {\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'page'     => 1,\n+\t\t\t\t'per_page' => 20,\n+\t\t\t\t'search'   => '',\n+\t\t\t\t'user_id'  => 0,\n+\t\t\t\t'orderby'  => 'created_at',\n+\t\t\t\t'order'    => 'DESC',\n+\t\t\t)\n+\t\t);\n+\n+\t\t$page     = max( 1, absint( $args['page'] ) );\n+\t\t$per_page = max( 1, min( 100, absint( $args['per_page'] ) ) );\n+\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->table;\n+\t\t$filter->collection_alias = 'k';\n+\t\t$filter->only_fields      = array(\n+\t\t\t'k.*',\n+\t\t\t'u.display_name AS user_display_name',\n+\t\t\t'u.user_login',\n+\t\t);\n+\t\t$filter->join[]           = \"LEFT JOIN {$this->users_table} u ON u.ID = k.user_id\";\n+\t\t$filter->field_count      = 'k.key_id';\n+\t\t$filter->limit            = $per_page;\n+\t\t$filter->page             = $page;\n+\n+\t\t$search = LP_Helper::sanitize_params_submitted( (string) $args['search'] );\n+\t\tif ( '' !== $search ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND k.description LIKE %s', '%' . $this->wpdb->esc_like( $search ) . '%' );\n+\t\t}\n+\n+\t\t$user_id = absint( $args['user_id'] );\n+\t\tif ( $user_id > 0 ) {\n+\t\t\t$filter->where[] = $this->wpdb->prepare( 'AND k.user_id = %d', $user_id );\n+\t\t}\n+\n+\t\t$order_by_map     = array(\n+\t\t\t'description' => 'k.description',\n+\t\t\t'user'        => 'u.display_name',\n+\t\t\t'permissions' => 'k.permissions',\n+\t\t\t'last_access' => 'k.last_access',\n+\t\t\t'call_count'  => 'k.call_count',\n+\t\t\t'created_at'  => 'k.created_at',\n+\t\t);\n+\t\t$filter->order_by = $order_by_map[ $args['orderby'] ] ?? $order_by_map['created_at'];\n+\t\t$filter->order    = 'ASC' === strtoupper( (string) $args['order'] ) ? LP_Filter::ORDER_ASC : LP_Filter::ORDER_DESC;\n+\n+\t\t$total_items = 0;\n+\t\t$items       = LP_Database::getInstance()->execute( $filter, $total_items );\n+\n+\t\treturn array(\n+\t\t\t'items'    => is_array( $items ) ? $items : array(),\n+\t\t\t'total'    => $total_items,\n+\t\t\t'page'     => $page,\n+\t\t\t'per_page' => $per_page,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Return users currently owning MCP API keys.\n+\t *\n+\t * @return array\u003Cint, object>\n+\t *\u002F\n+\tpublic function users_with_keys(): array {\n+\t\t$filter                   = new LP_Filter();\n+\t\t$filter->collection       = $this->users_table;\n+\t\t$filter->collection_alias = 'u';\n+\t\t$filter->only_fields      = array(\n+\t\t\t'u.ID',\n+\t\t\t'u.user_login',\n+\t\t\t'u.display_name',\n+\t\t);\n+\t\t$filter->join[]           = \"INNER JOIN {$this->table} k ON u.ID = k.user_id\";\n+\t\t$filter->group_by         = 'u.ID';\n+\t\t$filter->order_by         = 'u.display_name';\n+\t\t$filter->order            = LP_Filter::ORDER_ASC;\n+\t\t$filter->limit            = -1;\n+\t\t$filter->run_query_count  = false;\n+\n+\t\t$total_rows = 0;\n+\t\t$rows       = LP_Database::getInstance()->execute( $filter, $total_rows );\n+\n+\t\treturn is_array( $rows ) ? $rows : array();\n+\t}\n+\n+\t\u002F**\n+\t * Hash plaintext consumer key for storage\u002Flookup.\n+\t *\n+\t * @param string $consumer_key Plaintext consumer key.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function hash_consumer_key( string $consumer_key ): string {\n+\t\treturn hash_hmac( 'sha256', $consumer_key, 'lp-mcp-api' );\n+\t}\n+\n+\t\u002F**\n+\t * Hash plaintext consumer secret for storage\u002Fverification.\n+\t *\n+\t * @param string $consumer_secret Plaintext consumer secret.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function hash_consumer_secret( string $consumer_secret ): string {\n+\t\treturn hash_hmac( 'sha256', $consumer_secret, 'lp-mcp-secret' );\n+\t}\n+\n+\t\u002F**\n+\t * Normalize description for DB storage.\n+\t *\n+\t * @param string $description Raw key description.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function normalize_description( string $description ): string {\n+\t\t$description = LP_Helper::sanitize_params_submitted( $description );\n+\n+\t\treturn function_exists( 'mb_substr' ) ? mb_substr( $description, 0, 200 ) : substr( $description, 0, 200 );\n+\t}\n+\n+\t\u002F**\n+\t * Normalize requested permission to a supported value.\n+\t *\n+\t * @param string $permissions Raw requested permission.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function normalize_permissions( string $permissions ): string {\n+\t\t$permissions = LP_Helper::sanitize_params_submitted( $permissions, 'key' );\n+\n+\t\tif ( ! in_array( $permissions, self::PERMISSIONS, true ) ) {\n+\t\t\t$permissions = 'read';\n+\t\t}\n+\n+\t\treturn $permissions;\n+\t}\n+\n+\t\u002F**\n+\t * Generate token in ck_\u002Fcs_ format.\n+\t *\n+\t * @param string $prefix Token prefix (`ck_` or `cs_`).\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function generate_token( string $prefix ): string {\n+\t\ttry {\n+\t\t\t$hex = bin2hex( random_bytes( 20 ) );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$hex = substr( hash( 'sha256', wp_generate_password( 64, true, true ) . microtime( true ) ), 0, 40 );\n+\t\t}\n+\n+\t\treturn $prefix . $hex;\n+\t}\n+\n+\t\u002F**\n+\t * Validate user existence via LearnPress DB + Filter classes.\n+\t *\n+\t * @param int $user_id User ID.\n+\t *\n+\t * @return bool\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function is_valid_user_id( int $user_id ): bool {\n+\t\t$user_id = absint( $user_id );\n+\t\tif ( $user_id \u003C= 0 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$filter              = new UserFilter();\n+\t\t$filter->ID          = $user_id;\n+\t\t$filter->limit       = 1;\n+\t\t$filter->only_fields = array( 'u.ID' );\n+\t\t$filter->field_count = 'u.ID';\n+\n+\t\t$total_rows = 0;\n+\t\t$rows       = UserDB::getInstance()->get_users( $filter, $total_rows );\n+\n+\t\treturn is_array( $rows ) && ! empty( $rows );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FAuthContext.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FAuthContext.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002FAuthContext.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002FAuthContext.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,128 +1,128 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Auth;\r\n-\r\n-use LP_Helper;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Request-scoped authentication context for MCP API key auth.\r\n- *\u002F\r\n-class AuthContext {\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $is_api_key_auth = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected static $key_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprotected static $user_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected static $permissions = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected static $usage_touched = false;\r\n-\r\n-\t\u002F**\r\n-\t * Reset state for current request.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function reset(): void {\r\n-\r\n-\t\tself::$is_api_key_auth = false;\r\n-\t\tself::$key_id          = 0;\r\n-\t\tself::$user_id         = 0;\r\n-\t\tself::$permissions     = '';\r\n-\t\tself::$usage_touched   = false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Store successful API key auth context.\r\n-\t *\r\n-\t * @param int    $key_id      API key ID.\r\n-\t * @param int    $user_id     Authenticated user ID.\r\n-\t * @param string $permissions Granted permissions scope.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function set_api_key_auth( int $key_id, int $user_id, string $permissions ): void {\r\n-\r\n-\t\tself::$is_api_key_auth = true;\r\n-\t\tself::$key_id          = absint( $key_id );\r\n-\t\tself::$user_id         = absint( $user_id );\r\n-\t\tself::$permissions     = LP_Helper::sanitize_params_submitted( $permissions, 'key', false );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Whether request is authenticated by MCP API key.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_api_key_auth(): bool {\r\n-\r\n-\t\treturn self::$is_api_key_auth;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get API key ID from context.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function get_key_id(): int {\r\n-\r\n-\t\treturn self::$key_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user ID from context.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic static function get_user_id(): int {\r\n-\r\n-\t\treturn self::$user_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get granted key permissions.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_permissions(): string {\r\n-\r\n-\t\treturn self::$permissions;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Mark usage metrics as already touched.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function mark_usage_touched(): void {\r\n-\r\n-\t\tself::$usage_touched = true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Whether usage metrics were already touched in this request.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_usage_touched(): bool {\r\n-\r\n-\t\treturn self::$usage_touched;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Auth;\n+\n+use LP_Helper;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Request-scoped authentication context for MCP API key auth.\n+ *\u002F\n+class AuthContext {\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $is_api_key_auth = false;\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected static $key_id = 0;\n+\n+\t\u002F**\n+\t * @var int\n+\t *\u002F\n+\tprotected static $user_id = 0;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected static $permissions = '';\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected static $usage_touched = false;\n+\n+\t\u002F**\n+\t * Reset state for current request.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function reset(): void {\n+\n+\t\tself::$is_api_key_auth = false;\n+\t\tself::$key_id          = 0;\n+\t\tself::$user_id         = 0;\n+\t\tself::$permissions     = '';\n+\t\tself::$usage_touched   = false;\n+\t}\n+\n+\t\u002F**\n+\t * Store successful API key auth context.\n+\t *\n+\t * @param int    $key_id      API key ID.\n+\t * @param int    $user_id     Authenticated user ID.\n+\t * @param string $permissions Granted permissions scope.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function set_api_key_auth( int $key_id, int $user_id, string $permissions ): void {\n+\n+\t\tself::$is_api_key_auth = true;\n+\t\tself::$key_id          = absint( $key_id );\n+\t\tself::$user_id         = absint( $user_id );\n+\t\tself::$permissions     = LP_Helper::sanitize_params_submitted( $permissions, 'key', false );\n+\t}\n+\n+\t\u002F**\n+\t * Whether request is authenticated by MCP API key.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_api_key_auth(): bool {\n+\n+\t\treturn self::$is_api_key_auth;\n+\t}\n+\n+\t\u002F**\n+\t * Get API key ID from context.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function get_key_id(): int {\n+\n+\t\treturn self::$key_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get user ID from context.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic static function get_user_id(): int {\n+\n+\t\treturn self::$user_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get granted key permissions.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_permissions(): string {\n+\n+\t\treturn self::$permissions;\n+\t}\n+\n+\t\u002F**\n+\t * Mark usage metrics as already touched.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function mark_usage_touched(): void {\n+\n+\t\tself::$usage_touched = true;\n+\t}\n+\n+\t\u002F**\n+\t * Whether usage metrics were already touched in this request.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_usage_touched(): bool {\n+\n+\t\treturn self::$usage_touched;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FAuth\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FAuth\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,3 +1,3 @@\n-\u003C?php\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n+\u003C?php\n+\n+defined( 'ABSPATH' ) || exit;\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilityExecutors.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilityExecutors.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilityExecutors.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilityExecutors.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,508 +1,508 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Concerns;\r\n-\r\n-use LearnPress\\Databases\\UserItemsDB;\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Helper;\r\n-use LP_Material_Files_DB;\r\n-use Throwable;\r\n-use WP_Error;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Ability execute callbacks for LearnPress MCP read-only abilities.\r\n- *\u002F\r\n-trait AbilityExecutors {\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-courses`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_courses( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-courses' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$page                = self::page( $args['page'] ?? 1 );\r\n-\t\t$per_page            = self::per_page( $args['per_page'] ?? 10 );\r\n-\t\t$filter              = new CourseJsonFilter();\r\n-\t\t$filter->page        = $page;\r\n-\t\t$filter->limit       = $per_page;\r\n-\t\t$filter->post_status = self::status_list( $args['status'] ?? array( 'publish' ) );\r\n-\t\tif ( empty( $filter->post_status ) ) {\r\n-\t\t\t$filter->post_status = array( 'publish' );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $args['category'] ) ) {\r\n-\t\t\t$filter->term_ids = array( absint( $args['category'] ) );\r\n-\t\t}\r\n-\t\tif ( ! empty( $args['instructor'] ) ) {\r\n-\t\t\t$filter->post_author = absint( $args['instructor'] );\r\n-\t\t}\r\n-\t\tif ( isset( $args['search'] ) ) {\r\n-\t\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( (string) $args['search'] );\r\n-\t\t}\r\n-\r\n-\t\t$price_min = isset( $args['price_min'] ) && is_numeric( $args['price_min'] ) ? (float) $args['price_min'] : null;\r\n-\t\t$price_max = isset( $args['price_max'] ) && is_numeric( $args['price_max'] ) ? (float) $args['price_max'] : null;\r\n-\t\tif ( null !== $price_min && $price_min \u003C 0 ) {\r\n-\t\t\treturn self::invalid( __( 'price_min must be greater than or equal to 0.', 'learnpress' ) );\r\n-\t\t}\r\n-\t\tif ( null !== $price_max && $price_max \u003C 0 ) {\r\n-\t\t\treturn self::invalid( __( 'price_max must be greater than or equal to 0.', 'learnpress' ) );\r\n-\t\t}\r\n-\t\tif ( null !== $price_min && null !== $price_max && $price_min > $price_max ) {\r\n-\t\t\treturn self::invalid( __( 'price_min must not be greater than price_max.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\t\tif ( null !== $price_min && $wpdb ) {\r\n-\t\t\t$filter->where[] = $wpdb->prepare( 'AND c.price_to_sort >= %f', $price_min );\r\n-\t\t}\r\n-\t\tif ( null !== $price_max && $wpdb ) {\r\n-\t\t\t$filter->where[] = $wpdb->prepare( 'AND c.price_to_sort \u003C= %f', $price_max );\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$rows       = Courses::get_list_courses( $filter, $total_rows );\r\n-\t\t\t$rows       = is_array( $rows ) ? $rows : array();\r\n-\t\t\t$items      = array();\r\n-\t\t\tforeach ( $rows as $row ) {\r\n-\t\t\t\t$course = CourseModel::find( absint( $row->ID ?? 0 ), true );\r\n-\t\t\t\tif ( $course instanceof CourseModel ) {\r\n-\t\t\t\t\t$items[] = self::course_summary( $course );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'items'      => $items,\r\n-\t\t\t\t'pagination' => array(\r\n-\t\t\t\t\t'page'        => $page,\r\n-\t\t\t\t\t'per_page'    => $per_page,\r\n-\t\t\t\t\t'total_items' => (int) $total_rows,\r\n-\t\t\t\t\t'total_pages' => self::total_pages( (int) $total_rows, $per_page ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn self::internal();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-course-details`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_course_details( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-course-details' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = absint( $args['course_id'] ?? 0 );\r\n-\t\tif ( $course_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$sections = array();\r\n-\t\tforeach ( $course->get_section_items() as $section ) {\r\n-\t\t\t$items = array();\r\n-\t\t\tforeach ( $section->items as $item ) {\r\n-\t\t\t\t$items[] = array(\r\n-\t\t\t\t\t'item_id'   => absint( $item->item_id ?? $item->id ?? 0 ),\r\n-\t\t\t\t\t'item_type' => (string) ( $item->item_type ?? $item->type ?? '' ),\r\n-\t\t\t\t\t'title'     => (string) ( $item->title ?? '' ),\r\n-\t\t\t\t\t'preview'   => ! empty( $item->preview ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$sections[] = array(\r\n-\t\t\t\t'section_id'          => absint( $section->section_id ?? $section->id ?? 0 ),\r\n-\t\t\t\t'section_name'        => (string) ( $section->section_name ?? $section->title ?? '' ),\r\n-\t\t\t\t'section_description' => (string) ( $section->section_description ?? $section->description ?? '' ),\r\n-\t\t\t\t'items'               => $items,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$detail                 = self::course_summary( $course );\r\n-\t\t$detail['description']  = (string) $course->get_description();\r\n-\t\t$detail['requirements'] = (string) $course->get_meta_value_by_key( CoursePostModel::META_KEY_REQUIREMENTS, '' );\r\n-\t\t$detail['curriculum']   = array(\r\n-\t\t\t'sections'    => $sections,\r\n-\t\t\t'items_count' => (int) $course->count_items(),\r\n-\t\t);\r\n-\r\n-\t\treturn array( 'course' => $detail );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Flist-lessons`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_list_lessons( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Flist-lessons' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = absint( $args['course_id'] ?? 0 );\r\n-\t\tif ( $course_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$section_id = absint( $args['section_id'] ?? 0 );\r\n-\t\t$page       = self::page( $args['page'] ?? 1 );\r\n-\t\t$per_page   = self::per_page( $args['per_page'] ?? 10 );\r\n-\t\t$statuses   = self::status_list( $args['status'] ?? null );\r\n-\t\t$refs       = self::collect_items( $course, LP_LESSON_CPT, $section_id );\r\n-\r\n-\t\t$all = array();\r\n-\t\tforeach ( $refs as $ref ) {\r\n-\t\t\t$lesson = LessonPostModel::find( (int) $ref['item_id'], true );\r\n-\t\t\tif ( ! $lesson instanceof LessonPostModel ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tif ( ! empty( $statuses ) && ! in_array( $lesson->post_status, $statuses, true ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\t$all[] = self::lesson_summary( $lesson, $ref );\r\n-\t\t}\r\n-\r\n-\t\t$total = count( $all );\r\n-\t\t$items = array_slice( $all, ( $page - 1 ) * $per_page, $per_page );\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'items'      => array_values( $items ),\r\n-\t\t\t'pagination' => array(\r\n-\t\t\t\t'page'        => $page,\r\n-\t\t\t\t'per_page'    => $per_page,\r\n-\t\t\t\t'total_items' => $total,\r\n-\t\t\t\t'total_pages' => self::total_pages( $total, $per_page ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-lesson-details`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_lesson_details( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-lesson-details' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$lesson_id = absint( $args['lesson_id'] ?? 0 );\r\n-\t\tif ( $lesson_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'lesson_id is required and must be a positive integer.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lesson = LessonPostModel::find( $lesson_id, true );\r\n-\t\tif ( ! $lesson instanceof LessonPostModel ) {\r\n-\t\t\treturn self::not_found( __( 'Lesson not found.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$materials = array();\r\n-\t\tif ( class_exists( 'LP_Material_Files_DB' ) ) {\r\n-\t\t\t$materials_rs = LP_Material_Files_DB::getInstance()->get_material_by_item_id( $lesson_id, 0, 0, false );\r\n-\t\t\t$materials_rs = is_array( $materials_rs ) ? $materials_rs : array();\r\n-\t\t\tforeach ( $materials_rs as $material ) {\r\n-\t\t\t\t$materials[] = array(\r\n-\t\t\t\t\t'file_id'   => absint( $material->file_id ?? 0 ),\r\n-\t\t\t\t\t'name'      => (string) ( $material->file_name ?? '' ),\r\n-\t\t\t\t\t'type'      => (string) ( $material->file_type ?? '' ),\r\n-\t\t\t\t\t'method'    => (string) ( $material->method ?? '' ),\r\n-\t\t\t\t\t'file_path' => (string) ( $material->file_path ?? '' ),\r\n-\t\t\t\t\t'url'       => (string) ( $material->file_url ?? '' ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'lesson' => array(\r\n-\t\t\t\t'lesson_id'    => $lesson->get_id(),\r\n-\t\t\t\t'title'        => (string) $lesson->get_the_title(),\r\n-\t\t\t\t'content'      => (string) $lesson->get_the_content(),\r\n-\t\t\t\t'excerpt'      => (string) $lesson->get_the_excerpt(),\r\n-\t\t\t\t'duration'     => (string) $lesson->get_duration(),\r\n-\t\t\t\t'video_intro'  => (string) $lesson->get_meta_value_by_key( '_lp_lesson_video_intro', '' ),\r\n-\t\t\t\t'preview'      => (bool) $lesson->has_preview(),\r\n-\t\t\t\t'status'       => (string) $lesson->post_status,\r\n-\t\t\t\t'permalink'    => (string) $lesson->get_permalink(),\r\n-\t\t\t\t'materials'    => $materials,\r\n-\t\t\t\t'materials_no' => count( $materials ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Flist-quizzes`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_list_quizzes( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Flist-quizzes' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$course_id = absint( $args['course_id'] ?? 0 );\r\n-\t\tif ( $course_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$page     = self::page( $args['page'] ?? 1 );\r\n-\t\t$per_page = self::per_page( $args['per_page'] ?? 10 );\r\n-\t\t$refs     = self::collect_items( $course, LP_QUIZ_CPT );\r\n-\r\n-\t\t$all = array();\r\n-\t\tforeach ( $refs as $ref ) {\r\n-\t\t\t$quiz = QuizPostModel::find( (int) $ref['item_id'], true );\r\n-\t\t\tif ( $quiz instanceof QuizPostModel ) {\r\n-\t\t\t\t$all[] = self::quiz_summary( $quiz, $ref );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$total = count( $all );\r\n-\t\t$items = array_slice( $all, ( $page - 1 ) * $per_page, $per_page );\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'items'      => array_values( $items ),\r\n-\t\t\t'pagination' => array(\r\n-\t\t\t\t'page'        => $page,\r\n-\t\t\t\t'per_page'    => $per_page,\r\n-\t\t\t\t'total_items' => $total,\r\n-\t\t\t\t'total_pages' => self::total_pages( $total, $per_page ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-quiz-details`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_quiz_details( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-quiz-details' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$quiz_id = absint( $args['quiz_id'] ?? 0 );\r\n-\t\tif ( $quiz_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'quiz_id is required and must be a positive integer.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quiz = QuizPostModel::find( $quiz_id, true );\r\n-\t\tif ( ! $quiz instanceof QuizPostModel ) {\r\n-\t\t\treturn self::not_found( __( 'Quiz not found.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'quiz' => array(\r\n-\t\t\t\t'quiz_id'              => $quiz->get_id(),\r\n-\t\t\t\t'title'                => (string) $quiz->get_the_title(),\r\n-\t\t\t\t'excerpt'              => (string) $quiz->get_the_excerpt(),\r\n-\t\t\t\t'status'               => (string) $quiz->post_status,\r\n-\t\t\t\t'permalink'            => (string) $quiz->get_permalink(),\r\n-\t\t\t\t'duration'             => (string) $quiz->get_duration(),\r\n-\t\t\t\t'passing_grade'        => (float) $quiz->get_passing_grade(),\r\n-\t\t\t\t'retake_count'         => (int) $quiz->get_retake_count(),\r\n-\t\t\t\t'questions_count'      => (int) $quiz->count_questions(),\r\n-\t\t\t\t'mark'                 => (float) $quiz->get_mark(),\r\n-\t\t\t\t'instant_check'        => (bool) $quiz->has_instant_check(),\r\n-\t\t\t\t'negative_marking'     => (bool) $quiz->has_negative_marking(),\r\n-\t\t\t\t'minus_skip_questions' => (bool) $quiz->has_minus_skip_questions(),\r\n-\t\t\t\t'show_correct_review'  => (bool) $quiz->has_show_correct_review(),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-student-progress`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_student_progress( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-student-progress' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$user_id   = absint( $args['user_id'] ?? 0 );\r\n-\t\t$course_id = absint( $args['course_id'] ?? 0 );\r\n-\t\tif ( $user_id \u003C= 0 || $course_id \u003C= 0 ) {\r\n-\t\t\treturn self::invalid( __( 'user_id and course_id are required positive integers.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_course = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\tif ( ! $user_course instanceof UserCourseModel ) {\r\n-\t\t\t\treturn self::not_found( __( 'Enrollment not found for this user and course.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course  = CourseModel::find( $course_id, true );\r\n-\t\t\t$user    = UserModel::find( $user_id, true );\r\n-\t\t\t$results = $user_course->calculate_course_results();\r\n-\t\t\t$count   = (int) ( $results['count_items'] ?? 0 );\r\n-\t\t\t$done    = (int) ( $results['completed_items'] ?? 0 );\r\n-\t\t\t$percent = $count > 0 ? round( ( $done * 100 ) \u002F $count, 2 ) : 0;\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'progress' => array(\r\n-\t\t\t\t\t'user'       => array(\r\n-\t\t\t\t\t\t'user_id'      => $user_id,\r\n-\t\t\t\t\t\t'display_name' => $user instanceof UserModel ? $user->get_display_name() : '',\r\n-\t\t\t\t\t\t'email'        => $user instanceof UserModel ? $user->get_email() : '',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'course'     => array(\r\n-\t\t\t\t\t\t'course_id' => $course_id,\r\n-\t\t\t\t\t\t'title'     => $course instanceof CourseModel ? $course->get_title() : '',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'enrollment' => array(\r\n-\t\t\t\t\t\t'status'     => (string) $user_course->status,\r\n-\t\t\t\t\t\t'graduation' => (string) $user_course->graduation,\r\n-\t\t\t\t\t\t'start_time' => (string) $user_course->start_time,\r\n-\t\t\t\t\t\t'end_time'   => (string) $user_course->end_time,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'result'     => array(\r\n-\t\t\t\t\t\t'count_items'      => $count,\r\n-\t\t\t\t\t\t'completed_items'  => $done,\r\n-\t\t\t\t\t\t'progress_percent' => $percent,\r\n-\t\t\t\t\t\t'evaluate_type'    => (string) ( $results['evaluate_type'] ?? '' ),\r\n-\t\t\t\t\t\t'pass'             => (int) ( $results['pass'] ?? 0 ),\r\n-\t\t\t\t\t\t'result'           => (float) ( $results['result'] ?? 0 ),\r\n-\t\t\t\t\t\t'items'            => (array) ( $results['items'] ?? array() ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn self::internal();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Execute `learnpress\u002Fget-enrollments`.\r\n-\t *\r\n-\t * @param mixed $input Ability input.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tpublic static function execute_get_enrollments( $input ) {\r\n-\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-enrollments' );\r\n-\t\tif ( is_wp_error( $args ) ) {\r\n-\t\t\treturn $args;\r\n-\t\t}\r\n-\r\n-\t\t$page              = self::page( $args['page'] ?? 1 );\r\n-\t\t$per_page          = self::per_page( $args['per_page'] ?? 10 );\r\n-\t\t$filter            = new UserItemsFilter();\r\n-\t\t$filter->item_type = LP_COURSE_CPT;\r\n-\t\t$filter->page      = $page;\r\n-\t\t$filter->limit     = $per_page;\r\n-\t\t$filter->order_by  = 'ui.user_item_id';\r\n-\t\t$filter->order     = 'DESC';\r\n-\r\n-\t\tif ( ! empty( $args['course_id'] ) ) {\r\n-\t\t\t$filter->item_id = absint( $args['course_id'] );\r\n-\t\t}\r\n-\t\tif ( ! empty( $args['user_id'] ) ) {\r\n-\t\t\t$filter->user_id = absint( $args['user_id'] );\r\n-\t\t}\r\n-\r\n-\t\t$statuses = self::status_list( $args['status'] ?? null );\r\n-\t\tif ( count( $statuses ) === 1 ) {\r\n-\t\t\t$filter->status = $statuses[0];\r\n-\t\t} elseif ( count( $statuses ) > 1 ) {\r\n-\t\t\t$filter->statues = $statuses;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$rows       = UserItemsDB::getInstance()->get_user_items( $filter, $total_rows );\r\n-\t\t\t$rows       = is_array( $rows ) ? $rows : array();\r\n-\t\t\t$items      = array();\r\n-\r\n-\t\t\tforeach ( $rows as $row ) {\r\n-\t\t\t\t$enroll_user_id   = absint( $row->user_id ?? 0 );\r\n-\t\t\t\t$enroll_course_id = absint( $row->item_id ?? 0 );\r\n-\t\t\t\t$course           = $enroll_course_id > 0 ? CourseModel::find( $enroll_course_id, true ) : false;\r\n-\t\t\t\t$user             = $enroll_user_id > 0 ? UserModel::find( $enroll_user_id, true ) : false;\r\n-\r\n-\t\t\t\t$items[] = array(\r\n-\t\t\t\t\t'enrollment_id' => absint( $row->user_item_id ?? 0 ),\r\n-\t\t\t\t\t'user'          => array(\r\n-\t\t\t\t\t\t'user_id'      => $enroll_user_id,\r\n-\t\t\t\t\t\t'display_name' => $user instanceof UserModel ? $user->get_display_name() : '',\r\n-\t\t\t\t\t\t'email'        => $user instanceof UserModel ? $user->get_email() : '',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'course'        => array(\r\n-\t\t\t\t\t\t'course_id' => $enroll_course_id,\r\n-\t\t\t\t\t\t'title'     => $course instanceof CourseModel ? $course->get_title() : '',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'status'        => (string) ( $row->status ?? '' ),\r\n-\t\t\t\t\t'graduation'    => (string) ( $row->graduation ?? '' ),\r\n-\t\t\t\t\t'start_time'    => (string) ( $row->start_time ?? '' ),\r\n-\t\t\t\t\t'end_time'      => (string) ( $row->end_time ?? '' ),\r\n-\t\t\t\t\t'ref_id'        => absint( $row->ref_id ?? 0 ),\r\n-\t\t\t\t\t'ref_type'      => (string) ( $row->ref_type ?? '' ),\r\n-\t\t\t\t\t'parent_id'     => absint( $row->parent_id ?? 0 ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn array(\r\n-\t\t\t\t'items'      => $items,\r\n-\t\t\t\t'pagination' => array(\r\n-\t\t\t\t\t'page'        => $page,\r\n-\t\t\t\t\t'per_page'    => $per_page,\r\n-\t\t\t\t\t'total_items' => (int) $total_rows,\r\n-\t\t\t\t\t'total_pages' => self::total_pages( (int) $total_rows, $per_page ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn self::internal();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Concerns;\n+\n+use LearnPress\\Databases\\UserItemsDB;\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LP_Helper;\n+use LP_Material_Files_DB;\n+use Throwable;\n+use WP_Error;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Ability execute callbacks for LearnPress MCP read-only abilities.\n+ *\u002F\n+trait AbilityExecutors {\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-courses`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_courses( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-courses' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$page                = self::page( $args['page'] ?? 1 );\n+\t\t$per_page            = self::per_page( $args['per_page'] ?? 10 );\n+\t\t$filter              = new CourseJsonFilter();\n+\t\t$filter->page        = $page;\n+\t\t$filter->limit       = $per_page;\n+\t\t$filter->post_status = self::status_list( $args['status'] ?? array( 'publish' ) );\n+\t\tif ( empty( $filter->post_status ) ) {\n+\t\t\t$filter->post_status = array( 'publish' );\n+\t\t}\n+\n+\t\tif ( ! empty( $args['category'] ) ) {\n+\t\t\t$filter->term_ids = array( absint( $args['category'] ) );\n+\t\t}\n+\t\tif ( ! empty( $args['instructor'] ) ) {\n+\t\t\t$filter->post_author = absint( $args['instructor'] );\n+\t\t}\n+\t\tif ( isset( $args['search'] ) ) {\n+\t\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( (string) $args['search'] );\n+\t\t}\n+\n+\t\t$price_min = isset( $args['price_min'] ) && is_numeric( $args['price_min'] ) ? (float) $args['price_min'] : null;\n+\t\t$price_max = isset( $args['price_max'] ) && is_numeric( $args['price_max'] ) ? (float) $args['price_max'] : null;\n+\t\tif ( null !== $price_min && $price_min \u003C 0 ) {\n+\t\t\treturn self::invalid( __( 'price_min must be greater than or equal to 0.', 'learnpress' ) );\n+\t\t}\n+\t\tif ( null !== $price_max && $price_max \u003C 0 ) {\n+\t\t\treturn self::invalid( __( 'price_max must be greater than or equal to 0.', 'learnpress' ) );\n+\t\t}\n+\t\tif ( null !== $price_min && null !== $price_max && $price_min > $price_max ) {\n+\t\t\treturn self::invalid( __( 'price_min must not be greater than price_max.', 'learnpress' ) );\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\t\tif ( null !== $price_min && $wpdb ) {\n+\t\t\t$filter->where[] = $wpdb->prepare( 'AND c.price_to_sort >= %f', $price_min );\n+\t\t}\n+\t\tif ( null !== $price_max && $wpdb ) {\n+\t\t\t$filter->where[] = $wpdb->prepare( 'AND c.price_to_sort \u003C= %f', $price_max );\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$total_rows = 0;\n+\t\t\t$rows       = Courses::get_list_courses( $filter, $total_rows );\n+\t\t\t$rows       = is_array( $rows ) ? $rows : array();\n+\t\t\t$items      = array();\n+\t\t\tforeach ( $rows as $row ) {\n+\t\t\t\t$course = CourseModel::find( absint( $row->ID ?? 0 ), true );\n+\t\t\t\tif ( $course instanceof CourseModel ) {\n+\t\t\t\t\t$items[] = self::course_summary( $course );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn array(\n+\t\t\t\t'items'      => $items,\n+\t\t\t\t'pagination' => array(\n+\t\t\t\t\t'page'        => $page,\n+\t\t\t\t\t'per_page'    => $per_page,\n+\t\t\t\t\t'total_items' => (int) $total_rows,\n+\t\t\t\t\t'total_pages' => self::total_pages( (int) $total_rows, $per_page ),\n+\t\t\t\t),\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn self::internal();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-course-details`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_course_details( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-course-details' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$course_id = absint( $args['course_id'] ?? 0 );\n+\t\tif ( $course_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$course = CourseModel::find( $course_id, true );\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$sections = array();\n+\t\tforeach ( $course->get_section_items() as $section ) {\n+\t\t\t$items = array();\n+\t\t\tforeach ( $section->items as $item ) {\n+\t\t\t\t$items[] = array(\n+\t\t\t\t\t'item_id'   => absint( $item->item_id ?? $item->id ?? 0 ),\n+\t\t\t\t\t'item_type' => (string) ( $item->item_type ?? $item->type ?? '' ),\n+\t\t\t\t\t'title'     => (string) ( $item->title ?? '' ),\n+\t\t\t\t\t'preview'   => ! empty( $item->preview ),\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$sections[] = array(\n+\t\t\t\t'section_id'          => absint( $section->section_id ?? $section->id ?? 0 ),\n+\t\t\t\t'section_name'        => (string) ( $section->section_name ?? $section->title ?? '' ),\n+\t\t\t\t'section_description' => (string) ( $section->section_description ?? $section->description ?? '' ),\n+\t\t\t\t'items'               => $items,\n+\t\t\t);\n+\t\t}\n+\n+\t\t$detail                 = self::course_summary( $course );\n+\t\t$detail['description']  = (string) $course->get_description();\n+\t\t$detail['requirements'] = (string) $course->get_meta_value_by_key( CoursePostModel::META_KEY_REQUIREMENTS, '' );\n+\t\t$detail['curriculum']   = array(\n+\t\t\t'sections'    => $sections,\n+\t\t\t'items_count' => (int) $course->count_items(),\n+\t\t);\n+\n+\t\treturn array( 'course' => $detail );\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Flist-lessons`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_list_lessons( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Flist-lessons' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$course_id = absint( $args['course_id'] ?? 0 );\n+\t\tif ( $course_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$course = CourseModel::find( $course_id, true );\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$section_id = absint( $args['section_id'] ?? 0 );\n+\t\t$page       = self::page( $args['page'] ?? 1 );\n+\t\t$per_page   = self::per_page( $args['per_page'] ?? 10 );\n+\t\t$statuses   = self::status_list( $args['status'] ?? null );\n+\t\t$refs       = self::collect_items( $course, LP_LESSON_CPT, $section_id );\n+\n+\t\t$all = array();\n+\t\tforeach ( $refs as $ref ) {\n+\t\t\t$lesson = LessonPostModel::find( (int) $ref['item_id'], true );\n+\t\t\tif ( ! $lesson instanceof LessonPostModel ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tif ( ! empty( $statuses ) && ! in_array( $lesson->post_status, $statuses, true ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t$all[] = self::lesson_summary( $lesson, $ref );\n+\t\t}\n+\n+\t\t$total = count( $all );\n+\t\t$items = array_slice( $all, ( $page - 1 ) * $per_page, $per_page );\n+\n+\t\treturn array(\n+\t\t\t'items'      => array_values( $items ),\n+\t\t\t'pagination' => array(\n+\t\t\t\t'page'        => $page,\n+\t\t\t\t'per_page'    => $per_page,\n+\t\t\t\t'total_items' => $total,\n+\t\t\t\t'total_pages' => self::total_pages( $total, $per_page ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-lesson-details`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_lesson_details( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-lesson-details' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$lesson_id = absint( $args['lesson_id'] ?? 0 );\n+\t\tif ( $lesson_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'lesson_id is required and must be a positive integer.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lesson = LessonPostModel::find( $lesson_id, true );\n+\t\tif ( ! $lesson instanceof LessonPostModel ) {\n+\t\t\treturn self::not_found( __( 'Lesson not found.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$materials = array();\n+\t\tif ( class_exists( 'LP_Material_Files_DB' ) ) {\n+\t\t\t$materials_rs = LP_Material_Files_DB::getInstance()->get_material_by_item_id( $lesson_id, 0, 0, false );\n+\t\t\t$materials_rs = is_array( $materials_rs ) ? $materials_rs : array();\n+\t\t\tforeach ( $materials_rs as $material ) {\n+\t\t\t\t$materials[] = array(\n+\t\t\t\t\t'file_id'   => absint( $material->file_id ?? 0 ),\n+\t\t\t\t\t'name'      => (string) ( $material->file_name ?? '' ),\n+\t\t\t\t\t'type'      => (string) ( $material->file_type ?? '' ),\n+\t\t\t\t\t'method'    => (string) ( $material->method ?? '' ),\n+\t\t\t\t\t'file_path' => (string) ( $material->file_path ?? '' ),\n+\t\t\t\t\t'url'       => (string) ( $material->file_url ?? '' ),\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'lesson' => array(\n+\t\t\t\t'lesson_id'    => $lesson->get_id(),\n+\t\t\t\t'title'        => (string) $lesson->get_the_title(),\n+\t\t\t\t'content'      => (string) $lesson->get_the_content(),\n+\t\t\t\t'excerpt'      => (string) $lesson->get_the_excerpt(),\n+\t\t\t\t'duration'     => (string) $lesson->get_duration(),\n+\t\t\t\t'video_intro'  => (string) $lesson->get_meta_value_by_key( '_lp_lesson_video_intro', '' ),\n+\t\t\t\t'preview'      => (bool) $lesson->has_preview(),\n+\t\t\t\t'status'       => (string) $lesson->post_status,\n+\t\t\t\t'permalink'    => (string) $lesson->get_permalink(),\n+\t\t\t\t'materials'    => $materials,\n+\t\t\t\t'materials_no' => count( $materials ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Flist-quizzes`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_list_quizzes( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Flist-quizzes' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$course_id = absint( $args['course_id'] ?? 0 );\n+\t\tif ( $course_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'course_id is required and must be a positive integer.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$course = CourseModel::find( $course_id, true );\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\treturn self::not_found( __( 'Course not found.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$page     = self::page( $args['page'] ?? 1 );\n+\t\t$per_page = self::per_page( $args['per_page'] ?? 10 );\n+\t\t$refs     = self::collect_items( $course, LP_QUIZ_CPT );\n+\n+\t\t$all = array();\n+\t\tforeach ( $refs as $ref ) {\n+\t\t\t$quiz = QuizPostModel::find( (int) $ref['item_id'], true );\n+\t\t\tif ( $quiz instanceof QuizPostModel ) {\n+\t\t\t\t$all[] = self::quiz_summary( $quiz, $ref );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$total = count( $all );\n+\t\t$items = array_slice( $all, ( $page - 1 ) * $per_page, $per_page );\n+\n+\t\treturn array(\n+\t\t\t'items'      => array_values( $items ),\n+\t\t\t'pagination' => array(\n+\t\t\t\t'page'        => $page,\n+\t\t\t\t'per_page'    => $per_page,\n+\t\t\t\t'total_items' => $total,\n+\t\t\t\t'total_pages' => self::total_pages( $total, $per_page ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-quiz-details`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_quiz_details( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-quiz-details' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$quiz_id = absint( $args['quiz_id'] ?? 0 );\n+\t\tif ( $quiz_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'quiz_id is required and must be a positive integer.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quiz = QuizPostModel::find( $quiz_id, true );\n+\t\tif ( ! $quiz instanceof QuizPostModel ) {\n+\t\t\treturn self::not_found( __( 'Quiz not found.', 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'quiz' => array(\n+\t\t\t\t'quiz_id'              => $quiz->get_id(),\n+\t\t\t\t'title'                => (string) $quiz->get_the_title(),\n+\t\t\t\t'excerpt'              => (string) $quiz->get_the_excerpt(),\n+\t\t\t\t'status'               => (string) $quiz->post_status,\n+\t\t\t\t'permalink'            => (string) $quiz->get_permalink(),\n+\t\t\t\t'duration'             => (string) $quiz->get_duration(),\n+\t\t\t\t'passing_grade'        => (float) $quiz->get_passing_grade(),\n+\t\t\t\t'retake_count'         => (int) $quiz->get_retake_count(),\n+\t\t\t\t'questions_count'      => (int) $quiz->count_questions(),\n+\t\t\t\t'mark'                 => (float) $quiz->get_mark(),\n+\t\t\t\t'instant_check'        => (bool) $quiz->has_instant_check(),\n+\t\t\t\t'negative_marking'     => (bool) $quiz->has_negative_marking(),\n+\t\t\t\t'minus_skip_questions' => (bool) $quiz->has_minus_skip_questions(),\n+\t\t\t\t'show_correct_review'  => (bool) $quiz->has_show_correct_review(),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-student-progress`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_student_progress( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-student-progress' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$user_id   = absint( $args['user_id'] ?? 0 );\n+\t\t$course_id = absint( $args['course_id'] ?? 0 );\n+\t\tif ( $user_id \u003C= 0 || $course_id \u003C= 0 ) {\n+\t\t\treturn self::invalid( __( 'user_id and course_id are required positive integers.', 'learnpress' ) );\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$user_course = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\tif ( ! $user_course instanceof UserCourseModel ) {\n+\t\t\t\treturn self::not_found( __( 'Enrollment not found for this user and course.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course  = CourseModel::find( $course_id, true );\n+\t\t\t$user    = UserModel::find( $user_id, true );\n+\t\t\t$results = $user_course->calculate_course_results();\n+\t\t\t$count   = (int) ( $results['count_items'] ?? 0 );\n+\t\t\t$done    = (int) ( $results['completed_items'] ?? 0 );\n+\t\t\t$percent = $count > 0 ? round( ( $done * 100 ) \u002F $count, 2 ) : 0;\n+\n+\t\t\treturn array(\n+\t\t\t\t'progress' => array(\n+\t\t\t\t\t'user'       => array(\n+\t\t\t\t\t\t'user_id'      => $user_id,\n+\t\t\t\t\t\t'display_name' => $user instanceof UserModel ? $user->get_display_name() : '',\n+\t\t\t\t\t\t'email'        => $user instanceof UserModel ? $user->get_email() : '',\n+\t\t\t\t\t),\n+\t\t\t\t\t'course'     => array(\n+\t\t\t\t\t\t'course_id' => $course_id,\n+\t\t\t\t\t\t'title'     => $course instanceof CourseModel ? $course->get_title() : '',\n+\t\t\t\t\t),\n+\t\t\t\t\t'enrollment' => array(\n+\t\t\t\t\t\t'status'     => (string) $user_course->status,\n+\t\t\t\t\t\t'graduation' => (string) $user_course->graduation,\n+\t\t\t\t\t\t'start_time' => (string) $user_course->start_time,\n+\t\t\t\t\t\t'end_time'   => (string) $user_course->end_time,\n+\t\t\t\t\t),\n+\t\t\t\t\t'result'     => array(\n+\t\t\t\t\t\t'count_items'      => $count,\n+\t\t\t\t\t\t'completed_items'  => $done,\n+\t\t\t\t\t\t'progress_percent' => $percent,\n+\t\t\t\t\t\t'evaluate_type'    => (string) ( $results['evaluate_type'] ?? '' ),\n+\t\t\t\t\t\t'pass'             => (int) ( $results['pass'] ?? 0 ),\n+\t\t\t\t\t\t'result'           => (float) ( $results['result'] ?? 0 ),\n+\t\t\t\t\t\t'items'            => (array) ( $results['items'] ?? array() ),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn self::internal();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Execute `learnpress\u002Fget-enrollments`.\n+\t *\n+\t * @param mixed $input Ability input.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tpublic static function execute_get_enrollments( $input ) {\n+\t\t$args = self::input_arr( $input, 'learnpress\u002Fget-enrollments' );\n+\t\tif ( is_wp_error( $args ) ) {\n+\t\t\treturn $args;\n+\t\t}\n+\n+\t\t$page              = self::page( $args['page'] ?? 1 );\n+\t\t$per_page          = self::per_page( $args['per_page'] ?? 10 );\n+\t\t$filter            = new UserItemsFilter();\n+\t\t$filter->item_type = LP_COURSE_CPT;\n+\t\t$filter->page      = $page;\n+\t\t$filter->limit     = $per_page;\n+\t\t$filter->order_by  = 'ui.user_item_id';\n+\t\t$filter->order     = 'DESC';\n+\n+\t\tif ( ! empty( $args['course_id'] ) ) {\n+\t\t\t$filter->item_id = absint( $args['course_id'] );\n+\t\t}\n+\t\tif ( ! empty( $args['user_id'] ) ) {\n+\t\t\t$filter->user_id = absint( $args['user_id'] );\n+\t\t}\n+\n+\t\t$statuses = self::status_list( $args['status'] ?? null );\n+\t\tif ( count( $statuses ) === 1 ) {\n+\t\t\t$filter->status = $statuses[0];\n+\t\t} elseif ( count( $statuses ) > 1 ) {\n+\t\t\t$filter->statues = $statuses;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$total_rows = 0;\n+\t\t\t$rows       = UserItemsDB::getInstance()->get_user_items( $filter, $total_rows );\n+\t\t\t$rows       = is_array( $rows ) ? $rows : array();\n+\t\t\t$items      = array();\n+\n+\t\t\tforeach ( $rows as $row ) {\n+\t\t\t\t$enroll_user_id   = absint( $row->user_id ?? 0 );\n+\t\t\t\t$enroll_course_id = absint( $row->item_id ?? 0 );\n+\t\t\t\t$course           = $enroll_course_id > 0 ? CourseModel::find( $enroll_course_id, true ) : false;\n+\t\t\t\t$user             = $enroll_user_id > 0 ? UserModel::find( $enroll_user_id, true ) : false;\n+\n+\t\t\t\t$items[] = array(\n+\t\t\t\t\t'enrollment_id' => absint( $row->user_item_id ?? 0 ),\n+\t\t\t\t\t'user'          => array(\n+\t\t\t\t\t\t'user_id'      => $enroll_user_id,\n+\t\t\t\t\t\t'display_name' => $user instanceof UserModel ? $user->get_display_name() : '',\n+\t\t\t\t\t\t'email'        => $user instanceof UserModel ? $user->get_email() : '',\n+\t\t\t\t\t),\n+\t\t\t\t\t'course'        => array(\n+\t\t\t\t\t\t'course_id' => $enroll_course_id,\n+\t\t\t\t\t\t'title'     => $course instanceof CourseModel ? $course->get_title() : '',\n+\t\t\t\t\t),\n+\t\t\t\t\t'status'        => (string) ( $row->status ?? '' ),\n+\t\t\t\t\t'graduation'    => (string) ( $row->graduation ?? '' ),\n+\t\t\t\t\t'start_time'    => (string) ( $row->start_time ?? '' ),\n+\t\t\t\t\t'end_time'      => (string) ( $row->end_time ?? '' ),\n+\t\t\t\t\t'ref_id'        => absint( $row->ref_id ?? 0 ),\n+\t\t\t\t\t'ref_type'      => (string) ( $row->ref_type ?? '' ),\n+\t\t\t\t\t'parent_id'     => absint( $row->parent_id ?? 0 ),\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn array(\n+\t\t\t\t'items'      => $items,\n+\t\t\t\t'pagination' => array(\n+\t\t\t\t\t'page'        => $page,\n+\t\t\t\t\t'per_page'    => $per_page,\n+\t\t\t\t\t'total_items' => (int) $total_rows,\n+\t\t\t\t\t'total_pages' => self::total_pages( (int) $total_rows, $per_page ),\n+\t\t\t\t),\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn self::internal();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilityHelpers.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilityHelpers.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilityHelpers.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilityHelpers.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,260 +1,260 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Concerns;\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Helper;\r\n-use WP_Error;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Shared helper methods used across ability executors.\r\n- *\u002F\r\n-trait AbilityHelpers {\r\n-\t\u002F**\r\n-\t * Normalize ability input to array.\r\n-\t *\r\n-\t * @param mixed  $input   Raw ability input.\r\n-\t * @param string $ability Ability name for error context.\r\n-\t *\r\n-\t * @return array|WP_Error\r\n-\t *\u002F\r\n-\tprotected static function input_arr( $input, string $ability ) {\r\n-\t\tif ( null === $input ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\t\tif ( is_array( $input ) ) {\r\n-\t\t\treturn $input;\r\n-\t\t}\r\n-\r\n-\t\treturn self::invalid(\r\n-\t\t\tsprintf(\r\n-\t\t\t\t__( 'Invalid input for ability \"%s\". Input must be an object.', 'learnpress' ),\r\n-\t\t\t\t$ability\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize page number.\r\n-\t *\r\n-\t * @param mixed $value Raw page value.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprotected static function page( $value ): int {\r\n-\t\t$page = absint( $value );\r\n-\t\treturn $page > 0 ? $page : 1;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize per-page number and clamp to safe range.\r\n-\t *\r\n-\t * @param mixed $value Raw per-page value.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprotected static function per_page( $value ): int {\r\n-\t\t$per_page = absint( $value );\r\n-\t\tif ( $per_page \u003C 1 ) {\r\n-\t\t\t$per_page = 10;\r\n-\t\t}\r\n-\t\tif ( $per_page > 100 ) {\r\n-\t\t\t$per_page = 100;\r\n-\t\t}\r\n-\r\n-\t\treturn $per_page;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Normalize status input into unique sanitized status list.\r\n-\t *\r\n-\t * @param mixed $input String, CSV string, array, or null.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function status_list( $input ): array {\r\n-\t\tif ( null === $input || '' === $input ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\t$values = is_array( $input )\r\n-\t\t\t? $input\r\n-\t\t\t: ( false !== strpos( (string) $input, ',' ) ? explode( ',', (string) $input ) : array( (string) $input ) );\r\n-\r\n-\t\t$out = array();\r\n-\t\tforeach ( $values as $value ) {\r\n-\t\t\t$status = LP_Helper::sanitize_params_submitted( (string) $value, 'key' );\r\n-\t\t\tif ( '' !== $status ) {\r\n-\t\t\t\t$out[] = $status;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn array_values( array_unique( $out ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate total pages from total item count.\r\n-\t *\r\n-\t * @param int $total_items Total items.\r\n-\t * @param int $per_page    Items per page.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprotected static function total_pages( int $total_items, int $per_page ): int {\r\n-\t\treturn $per_page > 0 ? (int) ceil( $total_items \u002F $per_page ) : 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Build invalid input error.\r\n-\t *\r\n-\t * @param string $message Error message.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function invalid( string $message ): WP_Error {\r\n-\t\treturn new WP_Error( 'lp_mcp_invalid_input', $message, array( 'status' => 400 ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Build not-found error.\r\n-\t *\r\n-\t * @param string $message Error message.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function not_found( string $message ): WP_Error {\r\n-\t\treturn new WP_Error( 'lp_mcp_not_found', $message, array( 'status' => 404 ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Build generic internal error.\r\n-\t *\r\n-\t * @return WP_Error\r\n-\t *\u002F\r\n-\tprotected static function internal(): WP_Error {\r\n-\t\treturn new WP_Error(\r\n-\t\t\t'lp_mcp_internal_error',\r\n-\t\t\t__( 'An internal LearnPress MCP error occurred.', 'learnpress' ),\r\n-\t\t\tarray( 'status' => 500 )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map course model into ability response summary.\r\n-\t *\r\n-\t * @param CourseModel $course Course model.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function course_summary( CourseModel $course ): array {\r\n-\t\t$categories = array();\r\n-\t\tforeach ( $course->get_categories() as $term ) {\r\n-\t\t\t$categories[] = array(\r\n-\t\t\t\t'term_id' => (int) $term->term_id,\r\n-\t\t\t\t'name'    => (string) $term->name,\r\n-\t\t\t\t'slug'    => (string) $term->slug,\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$author = $course->get_author_model();\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'course_id'  => $course->get_id(),\r\n-\t\t\t'title'      => (string) $course->get_title(),\r\n-\t\t\t'status'     => (string) $course->get_status(),\r\n-\t\t\t'price'      => (float) $course->get_price(),\r\n-\t\t\t'duration'   => (string) $course->get_duration(),\r\n-\t\t\t'permalink'  => (string) $course->get_permalink(),\r\n-\t\t\t'instructor' => array(\r\n-\t\t\t\t'user_id'      => $author instanceof UserModel ? $author->get_id() : 0,\r\n-\t\t\t\t'display_name' => $author instanceof UserModel ? $author->get_display_name() : '',\r\n-\t\t\t),\r\n-\t\t\t'categories' => $categories,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map lesson model + curriculum ref into summary response.\r\n-\t *\r\n-\t * @param LessonPostModel $lesson Lesson model.\r\n-\t * @param array           $ref    Curriculum reference.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function lesson_summary( LessonPostModel $lesson, array $ref ): array {\r\n-\t\treturn array(\r\n-\t\t\t'lesson_id'    => $lesson->get_id(),\r\n-\t\t\t'course_id'    => (int) $ref['course_id'],\r\n-\t\t\t'section_id'   => (int) $ref['section_id'],\r\n-\t\t\t'section_name' => (string) $ref['section_name'],\r\n-\t\t\t'title'        => (string) $lesson->get_the_title(),\r\n-\t\t\t'excerpt'      => (string) $lesson->get_the_excerpt(),\r\n-\t\t\t'duration'     => (string) $lesson->get_duration(),\r\n-\t\t\t'preview'      => (bool) $ref['preview'],\r\n-\t\t\t'status'       => (string) $lesson->post_status,\r\n-\t\t\t'permalink'    => (string) $lesson->get_permalink(),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map quiz model + curriculum ref into summary response.\r\n-\t *\r\n-\t * @param QuizPostModel $quiz Quiz model.\r\n-\t * @param array         $ref  Curriculum reference.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function quiz_summary( QuizPostModel $quiz, array $ref ): array {\r\n-\t\treturn array(\r\n-\t\t\t'quiz_id'         => $quiz->get_id(),\r\n-\t\t\t'course_id'       => (int) $ref['course_id'],\r\n-\t\t\t'section_id'      => (int) $ref['section_id'],\r\n-\t\t\t'section_name'    => (string) $ref['section_name'],\r\n-\t\t\t'title'           => (string) $quiz->get_the_title(),\r\n-\t\t\t'duration'        => (string) $quiz->get_duration(),\r\n-\t\t\t'passing_grade'   => (float) $quiz->get_passing_grade(),\r\n-\t\t\t'questions_count' => (int) $quiz->count_questions(),\r\n-\t\t\t'status'          => (string) $quiz->post_status,\r\n-\t\t\t'permalink'       => (string) $quiz->get_permalink(),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Collect course items by type, optionally filtered by section.\r\n-\t *\r\n-\t * @param CourseModel $course     Course model.\r\n-\t * @param string      $item_type  LearnPress item type.\r\n-\t * @param int         $section_id Optional section filter.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function collect_items( CourseModel $course, string $item_type, int $section_id = 0 ): array {\r\n-\t\t$items = array();\r\n-\t\tforeach ( $course->get_section_items() as $section ) {\r\n-\t\t\t$current_section_id = absint( $section->section_id ?? $section->id ?? 0 );\r\n-\t\t\tif ( $section_id > 0 && $section_id !== $current_section_id ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $section->items as $item ) {\r\n-\t\t\t\t$current_type = (string) ( $item->item_type ?? $item->type ?? '' );\r\n-\t\t\t\tif ( $item_type !== $current_type ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$items[] = array(\r\n-\t\t\t\t\t'course_id'    => $course->get_id(),\r\n-\t\t\t\t\t'section_id'   => $current_section_id,\r\n-\t\t\t\t\t'section_name' => (string) ( $section->section_name ?? $section->title ?? '' ),\r\n-\t\t\t\t\t'item_id'      => absint( $item->item_id ?? $item->id ?? 0 ),\r\n-\t\t\t\t\t'preview'      => ! empty( $item->preview ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Concerns;\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserModel;\n+use LP_Helper;\n+use WP_Error;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Shared helper methods used across ability executors.\n+ *\u002F\n+trait AbilityHelpers {\n+\t\u002F**\n+\t * Normalize ability input to array.\n+\t *\n+\t * @param mixed  $input   Raw ability input.\n+\t * @param string $ability Ability name for error context.\n+\t *\n+\t * @return array|WP_Error\n+\t *\u002F\n+\tprotected static function input_arr( $input, string $ability ) {\n+\t\tif ( null === $input ) {\n+\t\t\treturn array();\n+\t\t}\n+\t\tif ( is_array( $input ) ) {\n+\t\t\treturn $input;\n+\t\t}\n+\n+\t\treturn self::invalid(\n+\t\t\tsprintf(\n+\t\t\t\t__( 'Invalid input for ability \"%s\". Input must be an object.', 'learnpress' ),\n+\t\t\t\t$ability\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize page number.\n+\t *\n+\t * @param mixed $value Raw page value.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprotected static function page( $value ): int {\n+\t\t$page = absint( $value );\n+\t\treturn $page > 0 ? $page : 1;\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize per-page number and clamp to safe range.\n+\t *\n+\t * @param mixed $value Raw per-page value.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprotected static function per_page( $value ): int {\n+\t\t$per_page = absint( $value );\n+\t\tif ( $per_page \u003C 1 ) {\n+\t\t\t$per_page = 10;\n+\t\t}\n+\t\tif ( $per_page > 100 ) {\n+\t\t\t$per_page = 100;\n+\t\t}\n+\n+\t\treturn $per_page;\n+\t}\n+\n+\t\u002F**\n+\t * Normalize status input into unique sanitized status list.\n+\t *\n+\t * @param mixed $input String, CSV string, array, or null.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function status_list( $input ): array {\n+\t\tif ( null === $input || '' === $input ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\t$values = is_array( $input )\n+\t\t\t? $input\n+\t\t\t: ( false !== strpos( (string) $input, ',' ) ? explode( ',', (string) $input ) : array( (string) $input ) );\n+\n+\t\t$out = array();\n+\t\tforeach ( $values as $value ) {\n+\t\t\t$status = LP_Helper::sanitize_params_submitted( (string) $value, 'key' );\n+\t\t\tif ( '' !== $status ) {\n+\t\t\t\t$out[] = $status;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn array_values( array_unique( $out ) );\n+\t}\n+\n+\t\u002F**\n+\t * Calculate total pages from total item count.\n+\t *\n+\t * @param int $total_items Total items.\n+\t * @param int $per_page    Items per page.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprotected static function total_pages( int $total_items, int $per_page ): int {\n+\t\treturn $per_page > 0 ? (int) ceil( $total_items \u002F $per_page ) : 0;\n+\t}\n+\n+\t\u002F**\n+\t * Build invalid input error.\n+\t *\n+\t * @param string $message Error message.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function invalid( string $message ): WP_Error {\n+\t\treturn new WP_Error( 'lp_mcp_invalid_input', $message, array( 'status' => 400 ) );\n+\t}\n+\n+\t\u002F**\n+\t * Build not-found error.\n+\t *\n+\t * @param string $message Error message.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function not_found( string $message ): WP_Error {\n+\t\treturn new WP_Error( 'lp_mcp_not_found', $message, array( 'status' => 404 ) );\n+\t}\n+\n+\t\u002F**\n+\t * Build generic internal error.\n+\t *\n+\t * @return WP_Error\n+\t *\u002F\n+\tprotected static function internal(): WP_Error {\n+\t\treturn new WP_Error(\n+\t\t\t'lp_mcp_internal_error',\n+\t\t\t__( 'An internal LearnPress MCP error occurred.', 'learnpress' ),\n+\t\t\tarray( 'status' => 500 )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Map course model into ability response summary.\n+\t *\n+\t * @param CourseModel $course Course model.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function course_summary( CourseModel $course ): array {\n+\t\t$categories = array();\n+\t\tforeach ( $course->get_categories() as $term ) {\n+\t\t\t$categories[] = array(\n+\t\t\t\t'term_id' => (int) $term->term_id,\n+\t\t\t\t'name'    => (string) $term->name,\n+\t\t\t\t'slug'    => (string) $term->slug,\n+\t\t\t);\n+\t\t}\n+\t\t$author = $course->get_author_model();\n+\n+\t\treturn array(\n+\t\t\t'course_id'  => $course->get_id(),\n+\t\t\t'title'      => (string) $course->get_title(),\n+\t\t\t'status'     => (string) $course->get_status(),\n+\t\t\t'price'      => (float) $course->get_price(),\n+\t\t\t'duration'   => (string) $course->get_duration(),\n+\t\t\t'permalink'  => (string) $course->get_permalink(),\n+\t\t\t'instructor' => array(\n+\t\t\t\t'user_id'      => $author instanceof UserModel ? $author->get_id() : 0,\n+\t\t\t\t'display_name' => $author instanceof UserModel ? $author->get_display_name() : '',\n+\t\t\t),\n+\t\t\t'categories' => $categories,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Map lesson model + curriculum ref into summary response.\n+\t *\n+\t * @param LessonPostModel $lesson Lesson model.\n+\t * @param array           $ref    Curriculum reference.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function lesson_summary( LessonPostModel $lesson, array $ref ): array {\n+\t\treturn array(\n+\t\t\t'lesson_id'    => $lesson->get_id(),\n+\t\t\t'course_id'    => (int) $ref['course_id'],\n+\t\t\t'section_id'   => (int) $ref['section_id'],\n+\t\t\t'section_name' => (string) $ref['section_name'],\n+\t\t\t'title'        => (string) $lesson->get_the_title(),\n+\t\t\t'excerpt'      => (string) $lesson->get_the_excerpt(),\n+\t\t\t'duration'     => (string) $lesson->get_duration(),\n+\t\t\t'preview'      => (bool) $ref['preview'],\n+\t\t\t'status'       => (string) $lesson->post_status,\n+\t\t\t'permalink'    => (string) $lesson->get_permalink(),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Map quiz model + curriculum ref into summary response.\n+\t *\n+\t * @param QuizPostModel $quiz Quiz model.\n+\t * @param array         $ref  Curriculum reference.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function quiz_summary( QuizPostModel $quiz, array $ref ): array {\n+\t\treturn array(\n+\t\t\t'quiz_id'         => $quiz->get_id(),\n+\t\t\t'course_id'       => (int) $ref['course_id'],\n+\t\t\t'section_id'      => (int) $ref['section_id'],\n+\t\t\t'section_name'    => (string) $ref['section_name'],\n+\t\t\t'title'           => (string) $quiz->get_the_title(),\n+\t\t\t'duration'        => (string) $quiz->get_duration(),\n+\t\t\t'passing_grade'   => (float) $quiz->get_passing_grade(),\n+\t\t\t'questions_count' => (int) $quiz->count_questions(),\n+\t\t\t'status'          => (string) $quiz->post_status,\n+\t\t\t'permalink'       => (string) $quiz->get_permalink(),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Collect course items by type, optionally filtered by section.\n+\t *\n+\t * @param CourseModel $course     Course model.\n+\t * @param string      $item_type  LearnPress item type.\n+\t * @param int         $section_id Optional section filter.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function collect_items( CourseModel $course, string $item_type, int $section_id = 0 ): array {\n+\t\t$items = array();\n+\t\tforeach ( $course->get_section_items() as $section ) {\n+\t\t\t$current_section_id = absint( $section->section_id ?? $section->id ?? 0 );\n+\t\t\tif ( $section_id > 0 && $section_id !== $current_section_id ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tforeach ( $section->items as $item ) {\n+\t\t\t\t$current_type = (string) ( $item->item_type ?? $item->type ?? '' );\n+\t\t\t\tif ( $item_type !== $current_type ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$items[] = array(\n+\t\t\t\t\t'course_id'    => $course->get_id(),\n+\t\t\t\t\t'section_id'   => $current_section_id,\n+\t\t\t\t\t'section_name' => (string) ( $section->section_name ?? $section->title ?? '' ),\n+\t\t\t\t\t'item_id'      => absint( $item->item_id ?? $item->id ?? 0 ),\n+\t\t\t\t\t'preview'      => ! empty( $item->preview ),\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilitySchemas.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilitySchemas.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMCP\u002FConcerns\u002FAbilitySchemas.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMCP\u002FConcerns\u002FAbilitySchemas.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,364 +1,364 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MCP\\Concerns;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * JSON schema builders for LearnPress abilities.\r\n- *\u002F\r\n-trait AbilitySchemas {\r\n-\t\u002F**\r\n-\t * Build schema for required integer identifier.\r\n-\t *\r\n-\t * @param string $id Field name.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_required_id( string $id ): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( $id ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t$id => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Build list response schema with pagination.\r\n-\t *\r\n-\t * @param array $item_schema Schema for each list item.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_list_output( array $item_schema ): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'items', 'pagination' ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'items'      => array(\r\n-\t\t\t\t\t'type'  => 'array',\r\n-\t\t\t\t\t'items' => $item_schema,\r\n-\t\t\t\t),\r\n-\t\t\t\t'pagination' => self::schema_pagination(),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Build wrapper schema for a named object.\r\n-\t *\r\n-\t * @param string $key Object key.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_object_output( string $key ): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( $key ),\r\n-\t\t\t'properties'           => array( $key => array( 'type' => 'object' ) ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination schema used by list abilities.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_pagination(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'page', 'per_page', 'total_items', 'total_pages' ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'page'        => array( 'type' => 'integer' ),\r\n-\t\t\t\t'per_page'    => array( 'type' => 'integer' ),\r\n-\t\t\t\t'total_items' => array( 'type' => 'integer' ),\r\n-\t\t\t\t'total_pages' => array( 'type' => 'integer' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Course summary schema.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_course_summary(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'course_id'  => array( 'type' => 'integer' ),\r\n-\t\t\t\t'title'      => array( 'type' => 'string' ),\r\n-\t\t\t\t'status'     => array( 'type' => 'string' ),\r\n-\t\t\t\t'price'      => array( 'type' => 'number' ),\r\n-\t\t\t\t'duration'   => array( 'type' => 'string' ),\r\n-\t\t\t\t'permalink'  => array( 'type' => 'string' ),\r\n-\t\t\t\t'instructor' => array( 'type' => 'object' ),\r\n-\t\t\t\t'categories' => array( 'type' => 'array' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Lesson summary schema.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_lesson_summary(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'lesson_id'    => array( 'type' => 'integer' ),\r\n-\t\t\t\t'course_id'    => array( 'type' => 'integer' ),\r\n-\t\t\t\t'section_id'   => array( 'type' => 'integer' ),\r\n-\t\t\t\t'section_name' => array( 'type' => 'string' ),\r\n-\t\t\t\t'title'        => array( 'type' => 'string' ),\r\n-\t\t\t\t'excerpt'      => array( 'type' => 'string' ),\r\n-\t\t\t\t'duration'     => array( 'type' => 'string' ),\r\n-\t\t\t\t'preview'      => array( 'type' => 'boolean' ),\r\n-\t\t\t\t'status'       => array( 'type' => 'string' ),\r\n-\t\t\t\t'permalink'    => array( 'type' => 'string' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Quiz summary schema.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_quiz_summary(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'       => 'object',\r\n-\t\t\t'properties' => array(\r\n-\t\t\t\t'quiz_id'         => array( 'type' => 'integer' ),\r\n-\t\t\t\t'course_id'       => array( 'type' => 'integer' ),\r\n-\t\t\t\t'section_id'      => array( 'type' => 'integer' ),\r\n-\t\t\t\t'section_name'    => array( 'type' => 'string' ),\r\n-\t\t\t\t'title'           => array( 'type' => 'string' ),\r\n-\t\t\t\t'duration'        => array( 'type' => 'string' ),\r\n-\t\t\t\t'passing_grade'   => array( 'type' => 'number' ),\r\n-\t\t\t\t'questions_count' => array( 'type' => 'integer' ),\r\n-\t\t\t\t'status'          => array( 'type' => 'string' ),\r\n-\t\t\t\t'permalink'       => array( 'type' => 'string' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Input schema for course listing.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_get_courses_input(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'status'     => array( 'type' => array( 'string', 'array', 'null' ) ),\r\n-\t\t\t\t'category'   => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'instructor' => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'price_min'  => array(\r\n-\t\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t\t'minimum' => 0,\r\n-\t\t\t\t),\r\n-\t\t\t\t'price_max'  => array(\r\n-\t\t\t\t\t'type'    => 'number',\r\n-\t\t\t\t\t'minimum' => 0,\r\n-\t\t\t\t),\r\n-\t\t\t\t'search'     => array( 'type' => 'string' ),\r\n-\t\t\t\t'page'       => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'default' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'per_page'   => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'maximum' => 100,\r\n-\t\t\t\t\t'default' => 10,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'default'              => array(),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output schema for course detail.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_course_detail_output(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'course' ),\r\n-\t\t\t'properties'           => array( 'course' => array( 'type' => 'object' ) ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Input schema for lesson listing.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_list_lessons_input(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'course_id' ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'course_id'  => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'section_id' => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'     => array( 'type' => array( 'string', 'array', 'null' ) ),\r\n-\t\t\t\t'page'       => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'default' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'per_page'   => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'maximum' => 100,\r\n-\t\t\t\t\t'default' => 10,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output schema for lesson detail.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_lesson_detail_output(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'lesson' ),\r\n-\t\t\t'properties'           => array( 'lesson' => array( 'type' => 'object' ) ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Input schema for quiz listing.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_list_quizzes_input(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'course_id' ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'page'      => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'default' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'per_page'  => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'maximum' => 100,\r\n-\t\t\t\t\t'default' => 10,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Output schema for quiz detail.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_quiz_detail_output(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'quiz' ),\r\n-\t\t\t'properties'           => array( 'quiz' => array( 'type' => 'object' ) ),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Input schema for student progress.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_progress_input(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'required'             => array( 'user_id', 'course_id' ),\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'user_id'   => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Input schema for enrollment listing.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected static function schema_get_enrollments_input(): array {\r\n-\t\treturn array(\r\n-\t\t\t'type'                 => 'object',\r\n-\t\t\t'additionalProperties' => false,\r\n-\t\t\t'properties'           => array(\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'user_id'   => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'    => array( 'type' => array( 'string', 'array', 'null' ) ),\r\n-\t\t\t\t'page'      => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'default' => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'per_page'  => array(\r\n-\t\t\t\t\t'type'    => 'integer',\r\n-\t\t\t\t\t'minimum' => 1,\r\n-\t\t\t\t\t'maximum' => 100,\r\n-\t\t\t\t\t'default' => 10,\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'default'              => array(),\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MCP\\Concerns;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * JSON schema builders for LearnPress abilities.\n+ *\u002F\n+trait AbilitySchemas {\n+\t\u002F**\n+\t * Build schema for required integer identifier.\n+\t *\n+\t * @param string $id Field name.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_required_id( string $id ): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( $id ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t$id => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Build list response schema with pagination.\n+\t *\n+\t * @param array $item_schema Schema for each list item.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_list_output( array $item_schema ): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'items', 'pagination' ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t'items'      => array(\n+\t\t\t\t\t'type'  => 'array',\n+\t\t\t\t\t'items' => $item_schema,\n+\t\t\t\t),\n+\t\t\t\t'pagination' => self::schema_pagination(),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Build wrapper schema for a named object.\n+\t *\n+\t * @param string $key Object key.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_object_output( string $key ): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( $key ),\n+\t\t\t'properties'           => array( $key => array( 'type' => 'object' ) ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Pagination schema used by list abilities.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_pagination(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'page', 'per_page', 'total_items', 'total_pages' ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t'page'        => array( 'type' => 'integer' ),\n+\t\t\t\t'per_page'    => array( 'type' => 'integer' ),\n+\t\t\t\t'total_items' => array( 'type' => 'integer' ),\n+\t\t\t\t'total_pages' => array( 'type' => 'integer' ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Course summary schema.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_course_summary(): array {\n+\t\treturn array(\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'course_id'  => array( 'type' => 'integer' ),\n+\t\t\t\t'title'      => array( 'type' => 'string' ),\n+\t\t\t\t'status'     => array( 'type' => 'string' ),\n+\t\t\t\t'price'      => array( 'type' => 'number' ),\n+\t\t\t\t'duration'   => array( 'type' => 'string' ),\n+\t\t\t\t'permalink'  => array( 'type' => 'string' ),\n+\t\t\t\t'instructor' => array( 'type' => 'object' ),\n+\t\t\t\t'categories' => array( 'type' => 'array' ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Lesson summary schema.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_lesson_summary(): array {\n+\t\treturn array(\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'lesson_id'    => array( 'type' => 'integer' ),\n+\t\t\t\t'course_id'    => array( 'type' => 'integer' ),\n+\t\t\t\t'section_id'   => array( 'type' => 'integer' ),\n+\t\t\t\t'section_name' => array( 'type' => 'string' ),\n+\t\t\t\t'title'        => array( 'type' => 'string' ),\n+\t\t\t\t'excerpt'      => array( 'type' => 'string' ),\n+\t\t\t\t'duration'     => array( 'type' => 'string' ),\n+\t\t\t\t'preview'      => array( 'type' => 'boolean' ),\n+\t\t\t\t'status'       => array( 'type' => 'string' ),\n+\t\t\t\t'permalink'    => array( 'type' => 'string' ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Quiz summary schema.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_quiz_summary(): array {\n+\t\treturn array(\n+\t\t\t'type'       => 'object',\n+\t\t\t'properties' => array(\n+\t\t\t\t'quiz_id'         => array( 'type' => 'integer' ),\n+\t\t\t\t'course_id'       => array( 'type' => 'integer' ),\n+\t\t\t\t'section_id'      => array( 'type' => 'integer' ),\n+\t\t\t\t'section_name'    => array( 'type' => 'string' ),\n+\t\t\t\t'title'           => array( 'type' => 'string' ),\n+\t\t\t\t'duration'        => array( 'type' => 'string' ),\n+\t\t\t\t'passing_grade'   => array( 'type' => 'number' ),\n+\t\t\t\t'questions_count' => array( 'type' => 'integer' ),\n+\t\t\t\t'status'          => array( 'type' => 'string' ),\n+\t\t\t\t'permalink'       => array( 'type' => 'string' ),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Input schema for course listing.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_get_courses_input(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'properties'           => array(\n+\t\t\t\t'status'     => array( 'type' => array( 'string', 'array', 'null' ) ),\n+\t\t\t\t'category'   => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'instructor' => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'price_min'  => array(\n+\t\t\t\t\t'type'    => 'number',\n+\t\t\t\t\t'minimum' => 0,\n+\t\t\t\t),\n+\t\t\t\t'price_max'  => array(\n+\t\t\t\t\t'type'    => 'number',\n+\t\t\t\t\t'minimum' => 0,\n+\t\t\t\t),\n+\t\t\t\t'search'     => array( 'type' => 'string' ),\n+\t\t\t\t'page'       => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'default' => 1,\n+\t\t\t\t),\n+\t\t\t\t'per_page'   => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'maximum' => 100,\n+\t\t\t\t\t'default' => 10,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'default'              => array(),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Output schema for course detail.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_course_detail_output(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'course' ),\n+\t\t\t'properties'           => array( 'course' => array( 'type' => 'object' ) ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Input schema for lesson listing.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_list_lessons_input(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'course_id' ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t'course_id'  => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'section_id' => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'status'     => array( 'type' => array( 'string', 'array', 'null' ) ),\n+\t\t\t\t'page'       => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'default' => 1,\n+\t\t\t\t),\n+\t\t\t\t'per_page'   => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'maximum' => 100,\n+\t\t\t\t\t'default' => 10,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Output schema for lesson detail.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_lesson_detail_output(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'lesson' ),\n+\t\t\t'properties'           => array( 'lesson' => array( 'type' => 'object' ) ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Input schema for quiz listing.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_list_quizzes_input(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'course_id' ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'page'      => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'default' => 1,\n+\t\t\t\t),\n+\t\t\t\t'per_page'  => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'maximum' => 100,\n+\t\t\t\t\t'default' => 10,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Output schema for quiz detail.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_quiz_detail_output(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'quiz' ),\n+\t\t\t'properties'           => array( 'quiz' => array( 'type' => 'object' ) ),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Input schema for student progress.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_progress_input(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'required'             => array( 'user_id', 'course_id' ),\n+\t\t\t'properties'           => array(\n+\t\t\t\t'user_id'   => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Input schema for enrollment listing.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected static function schema_get_enrollments_input(): array {\n+\t\treturn array(\n+\t\t\t'type'                 => 'object',\n+\t\t\t'additionalProperties' => false,\n+\t\t\t'properties'           => array(\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'user_id'   => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t),\n+\t\t\t\t'status'    => array( 'type' => array( 'string', 'array', 'null' ) ),\n+\t\t\t\t'page'      => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'default' => 1,\n+\t\t\t\t),\n+\t\t\t\t'per_page'  => array(\n+\t\t\t\t\t'type'    => 'integer',\n+\t\t\t\t\t'minimum' => 1,\n+\t\t\t\t\t'maximum' => 100,\n+\t\t\t\t\t'default' => 10,\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'default'              => array(),\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMetaBox\u002FLPMetaBoxField.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMetaBox\u002FLPMetaBoxField.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FMetaBox\u002FLPMetaBoxField.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FMetaBox\u002FLPMetaBoxField.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,79 +1,79 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\MetaBox;\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * LP_Meta_Box_Field\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.3.1\r\n- *\u002F\r\n-class LPMetaBoxField {\r\n-\tconst TEXT     = 'text';\r\n-\tconst NUMBER   = 'number';\r\n-\tconst CHECKBOX = 'checkbox';\r\n-\tconst SELECT   = 'select';\r\n-\r\n-\t\u002F**\r\n-\t * Extra options of field.\r\n-\t *\r\n-\t * @var string $class\r\n-\t *\u002F\r\n-\tpublic $extra = array();\r\n-\r\n-\tpublic static function render( string $type, string $name, array $extra = [], array $el_wrapper = [] ) {\r\n-\t\t$content = '';\r\n-\t\t$value   = $extra['value'] ?? ( $extra['default'] ?? '' );\r\n-\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase self::TEXT:\r\n-\t\t\tcase self::NUMBER:\r\n-\t\t\t\t$content = sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"%s\" name=\"%s\" id=\"%s\" value=\"%s\" placeholder=\"%s\" \u002F>',\r\n-\t\t\t\t\tesc_attr( $type ),\r\n-\t\t\t\t\tesc_attr( $name ),\r\n-\t\t\t\t\tesc_attr( $extra['id'] ?? '' ),\r\n-\t\t\t\t\tesc_attr( $value ),\r\n-\t\t\t\t\tesc_attr( $extra['placeholder'] ?? '' )\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::CHECKBOX:\r\n-\t\t\t\t$content = sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"%s\" id=\"%s\" value=\"1\" %s \u002F>',\r\n-\t\t\t\t\tesc_attr( $name ),\r\n-\t\t\t\t\tesc_attr( $extra['id'] ?? '' ),\r\n-\t\t\t\t\tchecked( $value, 1, false ) ? 'checked' : ''\r\n-\t\t\t\t);\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::SELECT:\r\n-\t\t\t\t$select = [\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cselect name=\"%s\" id=\"%s\">',\r\n-\t\t\t\t\t\tesc_attr( $name ),\r\n-\t\t\t\t\t\tesc_attr( $extra['id'] ?? '' )\r\n-\t\t\t\t\t) => '\u003C\u002Fselect>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$options = '';\r\n-\t\t\t\tforeach ( $extra['options'] ?? [] as $key => $value_option ) {\r\n-\t\t\t\t\tif ( $value === $key ) {\r\n-\t\t\t\t\t\t$options .= sprintf( '\u003Coption value=\"%s\" selected>%s\u003C\u002Foption>', esc_attr( $key ), wp_kses_post( $value_option ) );\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$options .= sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', esc_attr( $key ), wp_kses_post( $value_option ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$content = Template::instance()->nest_elements( $select, $options );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase apply_filters( 'learn-press\u002Fmeta-box-field-type', 'custom' ):\r\n-\t\t\t\t$content = apply_filters( 'learn-press\u002Fmeta-box-field-content', '', $type, $name, $extra );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\techo 'Not support type';\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\techo Template::instance()->nest_elements( $el_wrapper, $content );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\MetaBox;\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * LP_Meta_Box_Field\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.3.1\n+ *\u002F\n+class LPMetaBoxField {\n+\tconst TEXT     = 'text';\n+\tconst NUMBER   = 'number';\n+\tconst CHECKBOX = 'checkbox';\n+\tconst SELECT   = 'select';\n+\n+\t\u002F**\n+\t * Extra options of field.\n+\t *\n+\t * @var string $class\n+\t *\u002F\n+\tpublic $extra = array();\n+\n+\tpublic static function render( string $type, string $name, array $extra = [], array $el_wrapper = [] ) {\n+\t\t$content = '';\n+\t\t$value   = $extra['value'] ?? ( $extra['default'] ?? '' );\n+\n+\t\tswitch ( $type ) {\n+\t\t\tcase self::TEXT:\n+\t\t\tcase self::NUMBER:\n+\t\t\t\t$content = sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"%s\" name=\"%s\" id=\"%s\" value=\"%s\" placeholder=\"%s\" \u002F>',\n+\t\t\t\t\tesc_attr( $type ),\n+\t\t\t\t\tesc_attr( $name ),\n+\t\t\t\t\tesc_attr( $extra['id'] ?? '' ),\n+\t\t\t\t\tesc_attr( $value ),\n+\t\t\t\t\tesc_attr( $extra['placeholder'] ?? '' )\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase self::CHECKBOX:\n+\t\t\t\t$content = sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"%s\" id=\"%s\" value=\"1\" %s \u002F>',\n+\t\t\t\t\tesc_attr( $name ),\n+\t\t\t\t\tesc_attr( $extra['id'] ?? '' ),\n+\t\t\t\t\tchecked( $value, 1, false ) ? 'checked' : ''\n+\t\t\t\t);\n+\t\t\t\tbreak;\n+\t\t\tcase self::SELECT:\n+\t\t\t\t$select = [\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cselect name=\"%s\" id=\"%s\">',\n+\t\t\t\t\t\tesc_attr( $name ),\n+\t\t\t\t\t\tesc_attr( $extra['id'] ?? '' )\n+\t\t\t\t\t) => '\u003C\u002Fselect>',\n+\t\t\t\t];\n+\n+\t\t\t\t$options = '';\n+\t\t\t\tforeach ( $extra['options'] ?? [] as $key => $value_option ) {\n+\t\t\t\t\tif ( $value === $key ) {\n+\t\t\t\t\t\t$options .= sprintf( '\u003Coption value=\"%s\" selected>%s\u003C\u002Foption>', esc_attr( $key ), wp_kses_post( $value_option ) );\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\t$options .= sprintf( '\u003Coption value=\"%s\">%s\u003C\u002Foption>', esc_attr( $key ), wp_kses_post( $value_option ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$content = Template::instance()->nest_elements( $select, $options );\n+\t\t\t\tbreak;\n+\t\t\tcase apply_filters( 'learn-press\u002Fmeta-box-field-type', 'custom' ):\n+\t\t\t\t$content = apply_filters( 'learn-press\u002Fmeta-box-field-content', '', $type, $name, $extra );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\techo 'Not support type';\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\techo Template::instance()->nest_elements( $el_wrapper, $content );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Extra_Info_Fast_Query_Model\r\n- *\r\n- * @author tungnnx\r\n- * @version 1.0.2\r\n- * @since 4.1.3\r\n- *\u002F\r\n-class LP_Course_Extra_Info_Fast_Query_Model {\r\n-\t\u002F**\r\n-\t * @var int First item of Course\r\n-\t *\u002F\r\n-\tpublic $first_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var object Total items of course\r\n-\t * {\"count_items\":\"3\",\"lp_lesson\":\"2\",\"lp_quiz\":\"1\", \"{item_type}\":\"0\"}\r\n-\t *\u002F\r\n-\tpublic $total_items;\r\n-\t\u002F**\r\n-\t * @var object list sections, items of course\r\n-\t *\u002F\r\n-\tpublic $sections_items;\r\n-\r\n-\t\u002F**\r\n-\t * Mapper stdclass to model\r\n-\t *\r\n-\t * @param stdClass $object\r\n-\t * @return LP_Course_Extra_Info_Fast_Query_Model\r\n-\t *\u002F\r\n-\tpublic function map_stdclass( stdClass $object ): self {\r\n-\t\t$extra_info = new self();\r\n-\r\n-\t\tforeach ( $object as $key => $value ) {\r\n-\t\t\tif ( property_exists( $extra_info, $key ) ) {\r\n-\t\t\t\t$extra_info->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $extra_info;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Course_Extra_Info_Fast_Query_Model\n+ *\n+ * @author tungnnx\n+ * @version 1.0.2\n+ * @since 4.1.3\n+ *\u002F\n+class LP_Course_Extra_Info_Fast_Query_Model {\n+\t\u002F**\n+\t * @var int First item of Course\n+\t *\u002F\n+\tpublic $first_item_id = 0;\n+\t\u002F**\n+\t * @var object Total items of course\n+\t * {\"count_items\":\"3\",\"lp_lesson\":\"2\",\"lp_quiz\":\"1\", \"{item_type}\":\"0\"}\n+\t *\u002F\n+\tpublic $total_items;\n+\t\u002F**\n+\t * @var object list sections, items of course\n+\t *\u002F\n+\tpublic $sections_items;\n+\n+\t\u002F**\n+\t * Mapper stdclass to model\n+\t *\n+\t * @param stdClass $object\n+\t * @return LP_Course_Extra_Info_Fast_Query_Model\n+\t *\u002F\n+\tpublic function map_stdclass( stdClass $object ): self {\n+\t\t$extra_info = new self();\n+\n+\t\tforeach ( $object as $key => $value ) {\n+\t\t\tif ( property_exists( $extra_info, $key ) ) {\n+\t\t\t\t$extra_info->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $extra_info;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fclass-lp-rest-response.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fclass-lp-rest-response.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fclass-lp-rest-response.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fclass-lp-rest-response.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Asset_Key\r\n- *\r\n- * @author  tungnx\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- * @since 3.2.8\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-class LP_REST_Response {\r\n-\t\u002F**\r\n-\t * Status.\r\n-\t *\r\n-\t * @var string.\r\n-\t *\u002F\r\n-\tpublic $status = 'error';\r\n-\t\u002F**\r\n-\t * Message.\r\n-\t *\r\n-\t * @var string .\r\n-\t *\u002F\r\n-\tpublic $message = '';\r\n-\t\u002F**\r\n-\t * Extra data\r\n-\t *\r\n-\t * @var object\r\n-\t *\u002F\r\n-\tpublic $data;\r\n-\r\n-\t\u002F**\r\n-\t * LP_REST_Response constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->data = new stdClass();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Asset_Key\n+ *\n+ * @author  tungnx\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ * @since 3.2.8\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+class LP_REST_Response {\n+\t\u002F**\n+\t * Status.\n+\t *\n+\t * @var string.\n+\t *\u002F\n+\tpublic $status = 'error';\n+\t\u002F**\n+\t * Message.\n+\t *\n+\t * @var string .\n+\t *\u002F\n+\tpublic $message = '';\n+\t\u002F**\n+\t * Extra data\n+\t *\n+\t * @var object\n+\t *\u002F\n+\tpublic $data;\n+\n+\t\u002F**\n+\t * LP_REST_Response constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->data = new stdClass();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1516 +1,1527 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Course Model\r\n- * Purpose: Use to map property separate table learnpress_course\r\n- * Field json for store all value of single course.\r\n- * Another fields for query list courses faster\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.5\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LP_Course_Cache;\r\n-use LP_Course_DB;\r\n-use LP_Course_Item;\r\n-use LP_Course_JSON_DB;\r\n-use LP_Course_JSON_Filter;\r\n-use LP_Datetime;\r\n-use LP_Helper;\r\n-use LP_Section_Items_Filter;\r\n-use LP_Settings;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Error;\r\n-use WP_Post;\r\n-\r\n-class CourseModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID = 0;\r\n-\t\u002F**\r\n-\t * @var string author id, foreign key\r\n-\t *\u002F\r\n-\tpublic $post_author = 0;\r\n-\t\u002F**\r\n-\t * @var string post date gmt\r\n-\t *\u002F\r\n-\tpublic $post_date_gmt = null;\r\n-\t\u002F**\r\n-\t * @var string post content\r\n-\t *\u002F\r\n-\tpublic $post_content = '';\r\n-\t\u002F**\r\n-\t * @var string Post title\r\n-\t *\u002F\r\n-\tpublic $post_title = '';\r\n-\t\u002F**\r\n-\t * @var string Post Status (publish, draft, ...)\r\n-\t *\u002F\r\n-\tpublic $post_status = '';\r\n-\t\u002F**\r\n-\t * @var string Post name (slug for link)\r\n-\t *\u002F\r\n-\tpublic $post_name = '';\r\n-\t\u002F**\r\n-\t * @var float price only using for filter courses, don't use for course detail\r\n-\t * Because price can change by date if set schedule sale\r\n-\t *\u002F\r\n-\tpublic $price_to_sort = 0;\r\n-\tpublic $is_sale       = 0;\r\n-\t\u002F**\r\n-\t * @var string JSON Store all data a single course\r\n-\t *\u002F\r\n-\tpublic $json = null; \u002F\u002F Only set when save, don't set when get\r\n-\t\u002F**\r\n-\t * @var string lang of Course\r\n-\t *\u002F\r\n-\tpublic $lang = null;\r\n-\t\u002F********** Field not on table **********\u002F\r\n-\t\u002F**\r\n-\t * @var stdClass all meta data\r\n-\t *\u002F\r\n-\tpublic $meta_data = null;\r\n-\tpublic $image_url = null;\r\n-\tpublic $permalink = '';\r\n-\tpublic $categories;\r\n-\tpublic $tags;\r\n-\tprivate $price; \u002F\u002F Not save in database, must auto reload calculate\r\n-\tprivate $passing_condition = '';\r\n-\tpublic $post_excerpt       = '';\r\n-\t\u002F**\r\n-\t * @var int ID of first item\r\n-\t *\u002F\r\n-\tpublic $first_item_id;\r\n-\t\u002F**\r\n-\t * @var null|object info total items {'count_items': 20, 'lp_lesson': 10, 'lp_quiz': 10, ...}\r\n-\t *\u002F\r\n-\tpublic $total_items;\r\n-\t\u002F**\r\n-\t * @var array list sections items\r\n-\t *\u002F\r\n-\tpublic $sections_items;\r\n-\t\u002F**\r\n-\t * @var array|null cached items of course (per instance)\r\n-\t *\u002F\r\n-\tprotected array $only_items;\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_null( $this->meta_data ) ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to CourseModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return CourseModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): CourseModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_id(): int {\r\n-\t\treturn $this->ID;\r\n-\t}\r\n-\r\n-\tpublic function get_title(): string {\r\n-\t\t$course_post = new CoursePostModel( $this );\r\n-\r\n-\t\treturn $course_post->get_the_title();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get image url\r\n-\t * if not check get from Post\r\n-\t *\r\n-\t * @param string|int[] $size\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_image_url( $size = 'post-thumbnail' ): string {\r\n-\t\t\u002F**\r\n-\t\t * Comment code isset( $this->image_url )\r\n-\t\t * To apply for many size on a course\r\n-\t\t * To apply cache need handle cache before, where set size for image.\r\n-\t\t *\u002F\r\n-\t\t\u002F*if ( isset( $this->image_url ) ) {\r\n-\t\t\treturn $this->image_url;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t$post      = new CoursePostModel( $this );\r\n-\t\t$image_url = $post->get_image_url( $size );\r\n-\r\n-\t\t$this->image_url = $image_url;\r\n-\r\n-\t\treturn $image_url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get author model\r\n-\t * Check has data on table learnpress_courses return\r\n-\t * if not check get from Post\r\n-\t *\r\n-\t * @return UserModel|false\r\n-\t *\u002F\r\n-\tpublic function get_author_model() {\r\n-\t\t$post = new CoursePostModel( $this );\r\n-\r\n-\t\treturn $post->get_author_model();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get status of course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_status(): string {\r\n-\t\treturn $this->post_status;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get categories\r\n-\t * Check has data on table learnpress_courses return\r\n-\t * if not check get from Post\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_categories(): array {\r\n-\t\tif ( isset( $this->categories ) ) {\r\n-\t\t\treturn $this->categories;\r\n-\t\t}\r\n-\r\n-\t\t$post       = new PostModel( $this );\r\n-\t\t$categories = $post->get_categories();\r\n-\r\n-\t\t$this->categories = $categories;\r\n-\r\n-\t\treturn $this->categories;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get tags of course.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_tags(): array {\r\n-\t\tif ( isset( $this->tags ) ) {\r\n-\t\t\treturn $this->tags;\r\n-\t\t}\r\n-\r\n-\t\t$post = new PostModel( $this );\r\n-\t\t$tags = $post->get_tags();\r\n-\r\n-\t\t$this->tags = $tags;\r\n-\r\n-\t\treturn $this->tags;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get price\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic function get_price(): float {\r\n-\t\t\u002F*if ( ! empty( $this->price ) ) {\r\n-\t\t\treturn $this->price;\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( $this->has_sale_price() ) {\r\n-\t\t\t$price = $this->get_sale_price();\r\n-\t\t} else {\r\n-\t\t\t$price = $this->get_regular_price();\r\n-\t\t}\r\n-\r\n-\t\t$this->price                                        = (float) $price;\r\n-\t\t$this->meta_data->{CoursePostModel::META_KEY_PRICE} = (float) $price;\r\n-\r\n-\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fprice', (float) $price, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get regular price\r\n-\t * Check has data on table learnpress_courses return\r\n-\t * if not check get from Post\r\n-\t * Value can be string empty if not set\r\n-\t *\r\n-\t * @return float|string\r\n-\t *\u002F\r\n-\tpublic function get_regular_price() {\r\n-\t\t$key = CoursePostModel::META_KEY_REGULAR_PRICE;\r\n-\t\tif ( $this->meta_data && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn $this->meta_data->{$key};\r\n-\t\t}\r\n-\r\n-\t\t$coursePost              = new CoursePostModel( $this );\r\n-\t\t$this->meta_data->{$key} = $coursePost->get_regular_price();\r\n-\r\n-\t\treturn $this->meta_data->{$key};\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get sale price\r\n-\t * Sale price can is string empty if not set\r\n-\t * Sale price set if is number >= 0\r\n-\t * Check has data on table learnpress_courses return\r\n-\t * if not check get from Post\r\n-\t *\r\n-\t * @return float|string\r\n-\t *\u002F\r\n-\tpublic function get_sale_price() {\r\n-\t\t$key = CoursePostModel::META_KEY_SALE_PRICE;\r\n-\t\tif ( $this->meta_data && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn $this->meta_data->{$key};\r\n-\t\t}\r\n-\r\n-\t\t$coursePost              = new CoursePostModel( $this );\r\n-\t\t$sale_price              = $coursePost->get_sale_price();\r\n-\t\t$this->meta_data->{$key} = $sale_price;\r\n-\r\n-\t\treturn $this->meta_data->{$key};\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course has 'sale price'\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_sale_price(): bool {\r\n-\t\t$has_sale_price = false;\r\n-\t\t$regular_price  = $this->get_regular_price();\r\n-\t\t$sale_price     = $this->get_sale_price();\r\n-\t\t$start_date     = $this->get_sale_start();\r\n-\t\t$end_date       = $this->get_sale_end();\r\n-\r\n-\t\tif ( $sale_price !== '' && (float) $regular_price > (float) $sale_price ) {\r\n-\t\t\t$has_sale_price = true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check in days sale\r\n-\t\tif ( $has_sale_price && ! empty( $start_date ) && ! empty( $end_date ) ) {\r\n-\t\t\t$nowObj = new LP_Datetime();\r\n-\t\t\t\u002F\u002F Compare via timezone WP\r\n-\t\t\t$nowStr = $nowObj->toSql( true );\r\n-\t\t\t$now    = strtotime( $nowStr );\r\n-\t\t\t$end    = strtotime( $end_date );\r\n-\t\t\t$start  = strtotime( $start_date );\r\n-\r\n-\t\t\t$has_sale_price = $now >= $start && $now \u003C= $end;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fhas-sale-price', $has_sale_price, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get date sale start\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_sale_start() {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_SALE_START );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get date sale end\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_sale_end() {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_SALE_END );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if a course is Free\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_free(): bool {\r\n-\t\treturn $this->get_price() == 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if a course is enabled Offline\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_offline(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option \"Block course when expire\" enable.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function enable_block_when_expire(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_BLOCK_EXPIRE_DURATION, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option \"Block course when finished\" enable.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function enable_block_when_finished(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_BLOCK_FINISH, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get first item of course\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_first_item_id(): int {\r\n-\t\tif ( isset( $this->first_item_id ) ) {\r\n-\t\t\treturn $this->first_item_id;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->first_item_id = LP_Course_DB::getInstance()->get_first_item_id( $this->get_id() );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->first_item_id = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->first_item_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total items of course\r\n-\t *\r\n-\t * @return null|object\r\n-\t *\u002F\r\n-\tpublic function get_total_items() {\r\n-\t\tif ( isset( $this->total_items ) ) {\r\n-\t\t\treturn $this->total_items;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->total_items = LP_Course_DB::getInstance()->get_total_items( $this->get_id() );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->total_items = null;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->total_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total sections of course\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_total_sections(): int {\r\n-\t\t$section_items = $this->get_section_items();\r\n-\r\n-\t\treturn count( $section_items );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total items of course\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_section_items(): array {\r\n-\t\tif ( isset( $this->sections_items ) ) {\r\n-\t\t\treturn $this->sections_items;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->sections_items = $this->get_sections_and_items_course_from_db_and_sort();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->sections_items = [];\r\n-\t\t}\r\n-\r\n-\t\treturn $this->sections_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get only items of course\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_only_items(): array {\r\n-\t\tif ( isset( $this->only_items ) ) {\r\n-\t\t\treturn $this->only_items;\r\n-\t\t}\r\n-\r\n-\t\t$this->only_items = [];\r\n-\r\n-\t\tforeach ( $this->get_section_items() as $section ) {\r\n-\t\t\tforeach ( $section->items as $item ) {\r\n-\t\t\t\t$this->only_items[ $item->item_id ] = $item;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this->only_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section id of item\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.8\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_section_of_item( int $item_id ): int {\r\n-\t\t$section_id = 0;\r\n-\r\n-\t\t$section_items = $this->get_section_items();\r\n-\t\tforeach ( $section_items as $section ) {\r\n-\t\t\tforeach ( $section->items as $item ) {\r\n-\t\t\t\t$item_id_check = (int) ( $item->item_id ?? $item->id ?? 0 );\r\n-\t\t\t\tif ( $item_id_check === $item_id ) {\r\n-\t\t\t\t\t$section_id = $section->section_id ?? $section->id ?? 0;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn (int) $section_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course Evaluation type.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_evaluation_type(): string {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_EVALUATION_TYPE, 'evaluate_lesson' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course Evaluation type.\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.3.2.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_evaluation_types( string $type = '' ): array {\r\n-\t\tif ( has_filter( 'learnpress\u002Fcourse-evaluation\u002Fmethods' ) ) {\r\n-\t\t\t$methods = apply_filters( 'learnpress\u002Fcourse-evaluation\u002Fmethods', [], 0 );\r\n-\t\t}\r\n-\r\n-\t\t$types = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fevaluation-types',\r\n-\t\t\tarray(\r\n-\t\t\t\t'evaluate_lesson'     => [\r\n-\t\t\t\t\t'label' => __( 'Evaluate via completed lessons', 'learnpress' ),\r\n-\t\t\t\t\t'tip'   => __( 'Course will be completed when all lessons are completed.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'evaluate_final_quiz' => [\r\n-\t\t\t\t\t'label' => __( 'Evaluate via final quiz', 'learnpress' ),\r\n-\t\t\t\t\t'tip'   => __( 'Course will be completed when the final quiz is passed.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'evaluate_quiz'       => [\r\n-\t\t\t\t\t'label' => __( 'Evaluate via quizzes', 'learnpress' ),\r\n-\t\t\t\t\t'tip'   => __( 'Course will be completed when all quizzes are passed.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'evaluate_questions'  => [\r\n-\t\t\t\t\t'label' => __( 'Evaluate via questions', 'learnpress' ),\r\n-\t\t\t\t\t'tip'   => __( 'Course will be completed when all questions are answered correctly.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t'evaluate_mark'       => [\r\n-\t\t\t\t\t'label' => __( 'Evaluate via marks', 'learnpress' ),\r\n-\t\t\t\t\t'tip'   => __( 'Course will be completed when the passing mark is achieved.', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tif ( empty( $type ) ) {\r\n-\t\t\treturn $types;\r\n-\t\t} elseif ( empty( $types[ $type ] ) && ! empty( $methods[ $type ] ) ) {\r\n-\t\t\treturn $methods[ $type ];\r\n-\t\t}\r\n-\r\n-\t\treturn $types[ $type ] ?? [];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course passing condition value.\r\n-\t *\r\n-\t * @return float\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_passing_condition(): float {\r\n-\t\treturn (float) $this->get_meta_value_by_key( CoursePostModel::META_KEY_PASSING_CONDITION, 80 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get final quiz id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_final_quiz(): int {\r\n-\t\t$key = '_lp_final_quiz';\r\n-\t\tif ( ! empty( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn $this->meta_data->$key;\r\n-\t\t}\r\n-\r\n-\t\t$final_quiz = 0;\r\n-\r\n-\t\t\u002F\u002F Not use array_reverse, it's make change object\r\n-\t\t$section_items = $this->get_section_items();\r\n-\t\t$found         = 0;\r\n-\t\tfor ( $i = count( $section_items ); $i > 0; $i-- ) {\r\n-\t\t\t$section = $section_items[ $i - 1 ];\r\n-\t\t\tfor ( $j = count( $section->items ); $j > 0; $j-- ) {\r\n-\t\t\t\t$item = $section->items[ $j - 1 ];\r\n-\t\t\t\tif ( learn_press_get_post_type( $item->id ) === LP_QUIZ_CPT ) {\r\n-\t\t\t\t\t$final_quiz = $item->id;\r\n-\t\t\t\t\t$found      = 1;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $found ) {\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$evaluation_type = $this->get_evaluation_type();\r\n-\t\tif ( $evaluation_type === 'evaluate_final_quiz' ) {\r\n-\t\t\tif ( isset( $final_quiz ) ) {\r\n-\t\t\t\tupdate_post_meta( $this->ID, $key, $final_quiz );\r\n-\t\t\t} else {\r\n-\t\t\t\tdelete_post_meta( $this->ID, $key );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$this->meta_data->{$key} = $final_quiz;\r\n-\r\n-\t\treturn $final_quiz;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all sections and items from database, then handle sort\r\n-\t * Only call when data change or not set\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.6.9\r\n-\t * @version 1.0.4\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tprivate function get_sections_and_items_course_from_db_and_sort(): array {\r\n-\t\t$sections_items = [];\r\n-\t\t$course_id      = $this->get_id();\r\n-\t\t$lp_course_db   = LP_Course_DB::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$sections_results       = $lp_course_db->get_sections( $course_id );\r\n-\t\t\t$sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );\r\n-\t\t\t$count_items            = count( $sections_items_results );\r\n-\t\t\t$index_items_last       = $count_items - 1;\r\n-\t\t\t$section_current        = 0;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $section_order_plus int\r\n-\t\t\t * @var $item_order_plus int\r\n-\t\t\t * To fixed case: section order start from 0, item order start from 0\r\n-\t\t\t *\u002F\r\n-\t\t\t$section_order_plus = 0;\r\n-\t\t\t$item_order_plus    = 0;\r\n-\t\t\tforeach ( $sections_items_results as $index => $sections_item ) {\r\n-\t\t\t\t$section_new   = $sections_item->section_id;\r\n-\t\t\t\t$section_order = (int) $sections_item->section_order;\r\n-\t\t\t\tif ( $index === 0 && $section_order === 0 ) {\r\n-\t\t\t\t\t$section_order_plus = 1;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$section_order += $section_order_plus;\r\n-\t\t\t\t$item           = new stdClass();\r\n-\t\t\t\t$item->id       = $sections_item->item_id;\r\n-\t\t\t\t$item->item_id  = $sections_item->item_id;\r\n-\t\t\t\t$item_order     = (int) $sections_item->item_order;\r\n-\t\t\t\tif ( $index === 0 && $item_order === 0 ) {\r\n-\t\t\t\t\t$item_order_plus = 1;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item_order      += $item_order_plus;\r\n-\t\t\t\t$item->order      = $item_order;\r\n-\t\t\t\t$item->item_order = $item_order;\r\n-\t\t\t\t$item->type       = $sections_item->item_type;\r\n-\t\t\t\t$item->item_type  = $sections_item->item_type;\r\n-\t\t\t\t$item_tmp         = LP_Course_Item::get_item( $item->id );\r\n-\t\t\t\tif ( $item_tmp ) {\r\n-\t\t\t\t\t$item->title   = html_entity_decode( $item_tmp->get_title() );\r\n-\t\t\t\t\t$item->preview = $item_tmp->is_preview();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $section_new != $section_current ) {\r\n-\t\t\t\t\t$sections_items[ $section_new ]                      = new stdClass();\r\n-\t\t\t\t\t$sections_items[ $section_new ]->id                  = $section_new; \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t$sections_items[ $section_new ]->section_id          = $section_new; \u002F\u002F new field\r\n-\t\t\t\t\t$sections_items[ $section_new ]->order               = $section_order; \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t$sections_items[ $section_new ]->section_order       = $section_order; \u002F\u002F new field\r\n-\t\t\t\t\t$sections_items[ $section_new ]->title               = html_entity_decode( $sections_item->section_name ); \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t$sections_items[ $section_new ]->section_name        = html_entity_decode( $sections_item->section_name ); \u002F\u002F new field\r\n-\t\t\t\t\t$sections_items[ $section_new ]->description         = html_entity_decode( $sections_item->section_description ); \u002F\u002F old field will be deprecated in future\r\n-\t\t\t\t\t$sections_items[ $section_new ]->section_description = html_entity_decode( $sections_item->section_description ); \u002F\u002F new field\r\n-\t\t\t\t\t$sections_items[ $section_new ]->items               = [];\r\n-\r\n-\t\t\t\t\t\u002F\u002F Sort item by item_order\r\n-\t\t\t\t\tif ( $section_current != 0 ) {\r\n-\t\t\t\t\t\tusort(\r\n-\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\r\n-\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\r\n-\t\t\t\t\t\t\t\treturn $item1->item_order - $item2->item_order;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$section_current = $section_new;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$sections_items[ $section_new ]->items[ $item->item_id ] = $item;\r\n-\r\n-\t\t\t\tif ( $index_items_last === $index ) {\r\n-\t\t\t\t\tusort(\r\n-\t\t\t\t\t\t$sections_items[ $section_current ]->items,\r\n-\t\t\t\t\t\tfunction ( $item1, $item2 ) {\r\n-\t\t\t\t\t\t\treturn $item1->item_order - $item2->item_order;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check case if section empty items\r\n-\t\t\tforeach ( $sections_results as $section ) {\r\n-\t\t\t\t$section_id = $section->section_id;\r\n-\t\t\t\tif ( isset( $sections_items[ $section_id ] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$section_obj                      = new stdClass();\r\n-\t\t\t\t$section_obj->id                  = $section_id;\r\n-\t\t\t\t$section_obj->section_id          = $section_id;\r\n-\t\t\t\t$section_obj->order               = $section->section_order;\r\n-\t\t\t\t$section_obj->section_order       = $section->section_order;\r\n-\t\t\t\t$section_obj->title               = html_entity_decode( $section->section_name );\r\n-\t\t\t\t$section_obj->section_name        = html_entity_decode( $section->section_name );\r\n-\t\t\t\t$section_obj->description         = html_entity_decode( $section->section_description );\r\n-\t\t\t\t$section_obj->section_description = html_entity_decode( $section->section_description );\r\n-\t\t\t\t$section_obj->items               = [];\r\n-\t\t\t\t$sections_items[ $section_id ]    = $section_obj;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Sort section by section_order\r\n-\t\t\tusort(\r\n-\t\t\t\t$sections_items,\r\n-\t\t\t\tfunction ( $section1, $section2 ) {\r\n-\t\t\t\t\treturn $section1->section_order - $section2->section_order;\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $sections_items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get permalink course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_permalink(): string {\r\n-\t\tif ( ! empty( $this->permalink ) ) {\r\n-\t\t\treturn $this->permalink;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$coursePostModel = new CoursePostModel( $this );\r\n-\t\t\t$this->permalink = $coursePostModel->get_permalink();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$this->permalink = '';\r\n-\t\t}\r\n-\r\n-\t\treturn $this->permalink;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value option No enroll requirement\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_no_enroll_requirement() {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_NO_REQUIRED_ENROLL, 'no' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get description of Course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_description(): string {\r\n-\t\t$course_post = new CoursePostModel( $this );\r\n-\r\n-\t\treturn $course_post->get_the_content();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get short description of Course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_short_description(): string {\r\n-\t\t$course_post = new CoursePostModel( $this );\r\n-\r\n-\t\treturn $course_post->get_the_excerpt();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value option No enroll requirement\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_no_enroll_requirement(): bool {\r\n-\t\treturn $this->get_no_enroll_requirement() === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get value from meta data by key\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed|false $default_value\r\n-\t * @param bool $single\r\n-\t *\r\n-\t * @return false|mixed\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_meta_value_by_key( string $key, $default_value = false, bool $single = true ) {\r\n-\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\t$value = maybe_unserialize( $this->meta_data->{$key} );\r\n-\t\t} else {\r\n-\t\t\t$coursePost = new CoursePostModel( $this );\r\n-\t\t\t$value      = $coursePost->get_meta_value_by_key( $key, $default_value, $single );\r\n-\t\t}\r\n-\r\n-\t\t$value = maybe_unserialize( $value );\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is in stock\r\n-\t * True is in stock, False is out of stock\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function is_in_stock() {\r\n-\t\t$in_stock    = true;\r\n-\t\t$max_allowed = (int) $this->get_meta_value_by_key( CoursePostModel::META_KEY_MAX_STUDENTS, 0 );\r\n-\r\n-\t\tif ( $max_allowed ) {\r\n-\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is enable repurchase\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function enable_allow_repurchase(): bool {\r\n-\t\t$enable = $this->get_meta_value_by_key( CoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE, 'no' );\r\n-\r\n-\t\treturn 'yes' === $enable;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Type repurchase\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_type_repurchase(): string {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_COURSE_REPURCHASE_OPTION, 'reset' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get external link\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_external_link(): string {\r\n-\t\treturn esc_url_raw(\r\n-\t\t\t$this->get_meta_value_by_key( CoursePostModel::META_KEY_EXTERNAL_LINK_BY_COURSE, '' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item's link\r\n-\t * @move from LP_Abstract_Course\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t * @param string $item_type\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_item_link( int $item_id, string $item_type = '' ): string {\r\n-\t\tif ( empty( $item_type ) ) {\r\n-\t\t\t$item_type = get_post_type( $item_id );\r\n-\t\t}\r\n-\t\t$course_permalink = trailingslashit( $this->get_permalink() );\r\n-\t\t$item_slug        = get_post_field( 'post_name', $item_id );\r\n-\r\n-\t\t$slug_prefixes = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fcustom-item-prefixes',\r\n-\t\t\tarray(\r\n-\t\t\t\tLP_QUIZ_CPT   => sanitize_title_with_dashes( LP_Settings::get_option( 'quiz_slug', 'quizzes' ) ),\r\n-\t\t\t\tLP_LESSON_CPT => sanitize_title_with_dashes( LP_Settings::get_option( 'lesson_slug', 'lessons' ) ),\r\n-\t\t\t),\r\n-\t\t\t$this->get_id()\r\n-\t\t);\r\n-\r\n-\t\t$slug_prefix = trailingslashit( $slug_prefixes[ $item_type ] ?? '' );\r\n-\t\t$item_link   = trailingslashit( $course_permalink . $slug_prefix . $item_slug );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fitem-link', $item_link, $item_id, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total user enrolled, purchased or finished\r\n-\t *\r\n-\t * @move from LP_Abstract_Course\r\n-\t * @return int\r\n-\t * @version 1.0.1\r\n-\t * @since 4.1.4\r\n-\t *\u002F\r\n-\tpublic function get_total_user_enrolled_or_purchased(): int {\r\n-\t\t$total           = 0;\r\n-\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total = $lp_course_cache->get_total_students_enrolled_or_purchased( $this->get_id() );\r\n-\t\t\tif ( false !== $total ) {\r\n-\t\t\t\treturn $total;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\t\t\t$total        = $lp_course_db->get_total_user_enrolled_or_purchased( $this->get_id() );\r\n-\t\t\t$lp_course_cache->set_total_students_enrolled_or_purchased( $this->get_id(), $total );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $total;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get fake students.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_fake_students(): int {\r\n-\t\treturn (int) $this->get_meta_value_by_key( CoursePostModel::META_KEY_STUDENTS, 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count number of students enrolled course.\r\n-\t * Check global settings `enrolled_students_number`\r\n-\t * and add the fake value if both are set.\r\n-\t *\r\n-\t * @return int\r\n-\t * @move from LP_Abstract_Course\r\n-\t *\u002F\r\n-\tpublic function count_students(): int {\r\n-\t\t$total  = $this->get_total_user_enrolled_or_purchased();\r\n-\t\t$total += $this->get_fake_students();\r\n-\r\n-\t\treturn $total;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count total items in Course\r\n-\t * item_type empty will return all items if exists.\r\n-\t *\r\n-\t * @param string $item_type\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function count_items( string $item_type = '' ): int {\r\n-\t\t$count = 0;\r\n-\r\n-\t\t$total_items = $this->get_total_items();\r\n-\t\tif ( empty( $item_type ) ) {\r\n-\t\t\t$count = $total_items->count_items ?? 0;\r\n-\t\t} elseif ( isset( $total_items->{$item_type} ) ) {\r\n-\t\t\treturn $total_items->{$item_type};\r\n-\t\t}\r\n-\r\n-\t\treturn $count;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Duration of course\r\n-\t * Timestamp in second\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_duration(): string {\r\n-\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '10 week' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can enroll course.\r\n-\t * @move from can_enroll_course method of LP_User class, since 4.1.1\r\n-\t *\r\n-\t * @param UserModel|false $user\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function can_enroll( $user ) {\r\n-\t\t$can_enroll = true;\r\n-\t\t$error_code = '';\r\n-\r\n-\t\t$user_id = 0;\r\n-\t\tif ( $user instanceof UserModel ) {\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! in_array( $this->post_status, [ 'publish', 'private' ] ) ) {\r\n-\t\t\t\t$error_code = 'course_not_publish';\r\n-\t\t\t\tthrow new Exception( __( 'The course is not public', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel           = UserCourseModel::find( $user_id, $this->get_id(), true );\r\n-\t\t\t$enable_no_required_enroll = $this->has_no_enroll_requirement();\r\n-\t\t\t$out_of_stock              = ! $this->is_in_stock();\r\n-\r\n-\t\t\t\u002F\u002F Case user can retake course.\r\n-\t\t\tif ( $userCourseModel && $userCourseModel->can_retake() ) {\r\n-\t\t\t\t$error_code = 'course_can_retry';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Course can retake.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Case course is out of stock, show message when user is not login or user_item not exits\r\n-\t\t\tif ( $out_of_stock &&\r\n-\t\t\t\t( ! $user || ! $userCourseModel || ! $userCourseModel->has_enrolled_or_finished() ) ) {\r\n-\t\t\t\t$error_code = 'course_out_of_stock';\r\n-\t\t\t\tthrow new Exception( __( 'The course is full of students.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Case user is logged in and user_item exists\r\n-\t\t\tif ( $userCourseModel && $user ) {\r\n-\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\r\n-\t\t\t\t\t$error_code = 'course_is_enrolled';\r\n-\t\t\t\t\tthrow new Exception( __( 'This course is already enrolled!', 'learnpress' ) );\r\n-\t\t\t\t} elseif ( $userCourseModel->has_finished() ) {\r\n-\t\t\t\t\t$error_code = 'course_is_finished';\r\n-\t\t\t\t\tthrow new Exception( __( 'The course is finished.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $enable_no_required_enroll ) {\r\n-\t\t\t\tif ( ! $user ) {\r\n-\t\t\t\t\t$error_code = 'course_is_no_required_enroll_not_login';\r\n-\t\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'Enrollment in the course is not mandatory. You can access course for learning now.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! empty( $this->get_external_link() )\r\n-\t\t\t\t\t&& ( ! $user || ! $userCourseModel\r\n-\t\t\t\t\t\t|| $userCourseModel->get_status() === UserItemModel::STATUS_CANCEL )\r\n-\t\t\t\t\t&& ! $this->is_offline() ) {\r\n-\t\t\t\t\t$error_code = 'course_is_external';\r\n-\t\t\t\t\tthrow new Exception( __( 'The course is external', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $this->is_free() ) {\r\n-\t\t\t\t\tif ( ! $user ) {\r\n-\t\t\t\t\t\t$error_code = 'course_is_not_purchased_not_login';\r\n-\t\t\t\t\t\tthrow new Exception( __( 'The course is not purchased.', 'learnpress' ) );\r\n-\t\t\t\t\t} elseif ( ! $userCourseModel || ! $userCourseModel->has_purchased() ) {\r\n-\t\t\t\t\t\t$error_code = 'course_is_not_purchased';\r\n-\t\t\t\t\t\tthrow new Exception( __( 'The course is not purchased.', 'learnpress' ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tif ( empty( $error_code ) ) {\r\n-\t\t\t\t$error_code = 'course_can_not_enroll';\r\n-\t\t\t}\r\n-\t\t\t$can_enroll = new WP_Error( $error_code, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook old\r\n-\t\tif ( has_filter( 'learn-press\u002Fuser\u002Fcan-enroll-course' ) ) {\r\n-\t\t\t$output          = new stdClass();\r\n-\t\t\t$output->check   = true;\r\n-\t\t\t$output->message = '';\r\n-\t\t\tif ( $can_enroll instanceof WP_Error ) {\r\n-\t\t\t\t$output->check   = false;\r\n-\t\t\t\t$output->message = $can_enroll->get_error_message();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_old = learn_press_get_course( $this->get_id() );\r\n-\t\t\t$user_old   = learn_press_get_user( $user_id );\r\n-\t\t\t$output     = apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll-course', $output, $course_old, false, $user_old );\r\n-\t\t\tif ( $output === false ) {\r\n-\t\t\t\t$can_enroll = new WP_Error( '', '' );\r\n-\t\t\t} elseif ( ! $output->check && $output->message ) {\r\n-\t\t\t\t$can_enroll = new WP_Error( 'error_custom', $output->message );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F_deprecated_function( 'The learn-press\u002Fuser\u002Fcan-enroll-course filter', '4.2.7.3', 'learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse' );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse', $can_enroll, $this, $user );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can purchase course.\r\n-\t * @move from can_purchase_course method of LP_User class, since 4.0.8\r\n-\t * @use LP_User::can_purchase_course\r\n-\t *\r\n-\t * @param UserModel|false $user\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function can_purchase( $user ) {\r\n-\t\t$can_purchase = true;\r\n-\t\t$error_code   = '';\r\n-\r\n-\t\t$user_id = 0;\r\n-\t\tif ( $user instanceof UserModel ) {\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$can_enroll = $this->can_enroll( $user );\r\n-\t\t\tif ( $can_enroll instanceof WP_Error ) {\r\n-\t\t\t\t$error_code_return = [\r\n-\t\t\t\t\t'course_is_not_purchased_not_login',\r\n-\t\t\t\t\t'course_is_not_purchased',\r\n-\t\t\t\t\t'course_is_enrolled',\r\n-\t\t\t\t\t'course_is_finished',\r\n-\t\t\t\t];\r\n-\t\t\t\tif ( ! in_array( $can_enroll->get_error_code(), $error_code_return ) ) {\r\n-\t\t\t\t\t$error_code = $can_enroll->get_error_code();\r\n-\t\t\t\t\tthrow new Exception( $can_enroll->get_error_message() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->is_free() ) {\r\n-\t\t\t\t$error_code = 'course_is_free';\r\n-\t\t\t\tthrow new Exception( __( 'The course is free.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$enable_no_required_enroll = $this->has_no_enroll_requirement();\r\n-\t\t\tif ( $enable_no_required_enroll ) {\r\n-\t\t\t\t$error_code = 'course_is_no_required_enroll';\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'Enrollment in the course is not mandatory. You can access course for learning now.', 'learnpress' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $this->get_id(), true );\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\tif ( $userCourseModel ) {\r\n-\t\t\t\t\tif ( $userCourseModel->has_purchased() ) {\r\n-\t\t\t\t\t\t$error_code = 'course_purchased';\r\n-\t\t\t\t\t\tthrow new Exception( __( 'Course is purchased', 'learnpress' ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $this->enable_allow_repurchase() ) {\r\n-\t\t\t\t\t\tif ( $userCourseModel->has_enrolled() && $userCourseModel->timestamp_remaining_duration() !== 0 ) {\r\n-\t\t\t\t\t\t\t$error_code = 'course_is_enrolled';\r\n-\t\t\t\t\t\t\tthrow new Exception( 'This course is already enrolled!' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif ( $userCourseModel->has_enrolled_or_finished() ) {\r\n-\t\t\t\t\t\t\t$error_code = 'course_is_enrolled_or_finished';\r\n-\t\t\t\t\t\t\tthrow new Exception( __( 'Course is enrolled or finished', 'learnpress' ) );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tif ( empty( $error_code ) ) {\r\n-\t\t\t\t$error_code = 'course_can_not_purchase';\r\n-\t\t\t}\r\n-\t\t\t$can_purchase = new WP_Error( $error_code, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook old\r\n-\t\tif ( has_filter( 'learn-press\u002Fuser\u002Fcan-purchase-course' ) ) {\r\n-\t\t\t$can_purchase = apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase-course', $can_purchase, $user_id, $this->get_id() );\r\n-\t\t\tif ( $can_purchase === false ) {\r\n-\t\t\t\t$can_purchase = new WP_Error( '', '' );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F_deprecated_function( 'The learn-press\u002Fuser\u002Fcan-purchase-course filter', '4.2.7.3', 'learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse' );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse', $can_purchase, $this, $user );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user is author or co-in of course.\r\n-\t *\r\n-\t * @param UserModel|false $userModel\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function check_user_is_author( $userModel ): bool {\r\n-\t\t$is_author = false;\r\n-\r\n-\t\tif ( $userModel instanceof UserModel\r\n-\t\t\t&& $userModel->get_id() === $this->post_author ) {\r\n-\t\t\t$is_author = true;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fis-author', $is_author, $this, $userModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item model assigned to this course\r\n-\t *\r\n-\t * @return mixed|false|null|WP_Post|PostModel\r\n-\t * @since v4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_item_model( int $item_id, string $item_type ) {\r\n-\t\ttry {\r\n-\t\t\t$item = false;\r\n-\r\n-\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t\t$item = LessonPostModel::find( $item_id, true );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t$item = QuizPostModel::find( $item_id, true );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUESTION_CPT:\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$item = apply_filters( 'learn-press\u002Fcourse\u002Fget-item-model', $item, $item_id, $item_type, $this );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If not defined class, get post default\r\n-\t\t\tif ( ! $item ) {\r\n-\t\t\t\t$filter            = new PostFilter();\r\n-\t\t\t\t$filter->ID        = $item_id;\r\n-\t\t\t\t$filter->post_type = $item_type;\r\n-\t\t\t\t$item              = PostModel::get_item_model_from_db( $filter );\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item model if query success.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return PostModel.\r\n-\t *\r\n-\t * @param LP_Course_JSON_Filter $filter\r\n-\t *\r\n-\t * @return CourseModel|false|static\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function get_item_model_from_db( LP_Course_JSON_Filter $filter ) {\r\n-\t\t$course_model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter->only_fields = [ 'json', 'post_content' ];\r\n-\r\n-\t\t\t$course_rs = self::get_course_from_db( $filter );\r\n-\t\t\tif ( $course_rs instanceof stdClass && isset( $course_rs->json ) ) {\r\n-\t\t\t\t$course_obj   = LP_Helper::json_decode( $course_rs->json );\r\n-\t\t\t\t$course_model = new static( $course_obj );\r\n-\t\t\t\t\u002F\u002F$course_model->json         = $course_rs->json;\r\n-\t\t\t\t$course_model->post_content = $course_rs->post_content;\r\n-\t\t\t\t$course_model->get_author_model();\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course by ID\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|CourseModel|static\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function find( int $course_id, bool $check_cache = false ) {\r\n-\t\tif ( ! $course_id ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$filter_course     = new LP_Course_JSON_Filter();\r\n-\t\t$filter_course->ID = $course_id;\r\n-\t\t$key_cache         = \"courseModel\u002Ffind\u002Fid\u002F{$course_id}\";\r\n-\t\t$lp_course_cache   = new LP_Course_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$course_model = $lp_course_cache->get_cache( $key_cache );\r\n-\t\t\tif ( $course_model instanceof CourseModel ) {\r\n-\t\t\t\treturn $course_model;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query database no cache.\r\n-\t\t$course_model = self::get_item_model_from_db( $filter_course );\r\n-\t\tif ( false === $course_model ) { \u002F\u002F Find on table posts\r\n-\t\t\t$course_rs = CoursePostModel::find( $course_id );\r\n-\t\t\tif ( $course_rs instanceof CoursePostModel ) {\r\n-\t\t\t\t$course_model = new static( $course_rs );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $course_model instanceof CourseModel ) {\r\n-\t\t\t$lp_course_cache->set_cache( $key_cache, $course_model );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course from table learnpress_courses\r\n-\t *\r\n-\t * @return array|object|stdClass|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprivate static function get_course_from_db( LP_Course_JSON_Filter $filter ) {\r\n-\t\t$lp_course_json_db = LP_Course_JSON_DB::getInstance();\r\n-\t\t$lp_course_json_db->get_query_single_row( $filter );\r\n-\t\t$query_single_row = $lp_course_json_db->get_courses( $filter );\r\n-\r\n-\t\treturn $lp_course_json_db->wpdb->get_row( $query_single_row );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save course data to table learnpress_courses.\r\n-\t *\r\n-\t * @param bool $force_save\r\n-\t *\r\n-\t * @return CourseModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function save( bool $force_save = false ): CourseModel {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\tif ( ! $force_save ) {\r\n-\t\t\t$this->check_permission();\r\n-\t\t}\r\n-\r\n-\t\t$lp_course_json_db = LP_Course_JSON_DB::getInstance();\r\n-\r\n-\t\t$courseObjToJSON = clone $this;\r\n-\t\tunset( $courseObjToJSON->post_content );\r\n-\t\tunset( $courseObjToJSON->json );\r\n-\t\t$this->json = json_encode( $courseObjToJSON, JSON_UNESCAPED_UNICODE );\r\n-\t\t$data       = get_object_vars( $this );\r\n-\r\n-\t\tif ( ! isset( $data['ID'] ) ) {\r\n-\t\t\tthrow new Exception( 'Course ID is invalid!' );\r\n-\t\t}\r\n-\r\n-\t\t$filter              = new LP_Course_JSON_Filter();\r\n-\t\t$filter->ID          = $this->ID;\r\n-\t\t$filter->only_fields = [ 'ID' ];\r\n-\t\t$course_rs           = self::get_course_from_db( $filter );\r\n-\t\t\u002F\u002F Check if exists course id.\r\n-\t\tif ( empty( $course_rs ) ) { \u002F\u002F Insert data.\r\n-\t\t\t$lp_course_json_db->insert_data( $data );\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$lp_course_json_db->update_data( $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t$lp_course_json_db  = LP_Course_JSON_DB::getInstance();\r\n-\t\t$filter             = new LP_Course_JSON_Filter();\r\n-\t\t$filter->where[]    = $lp_course_json_db->wpdb->prepare( 'AND ID = %d', $this->ID );\r\n-\t\t$filter->collection = $lp_course_json_db->tb_lp_courses;\r\n-\t\t$lp_course_json_db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.7.4\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t$key_cache       = \"courseModel\u002Ffind\u002Fid\u002F{$this->ID}\";\r\n-\t\t$lp_course_cache = new LP_Course_Cache();\r\n-\t\t$lp_course_cache->clear( $key_cache );\r\n-\r\n-\t\t\u002F\u002F Clear cache image urls, store with many sizes\r\n-\t\t$img_urls_key_cache = \"image_urls\u002F{$this->ID}\";\r\n-\t\t$lp_course_cache->clear_cache_on_group( $img_urls_key_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission to update\u002Fcreate course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_permission() {\r\n-\t\t$coursePostModel = new CoursePostModel( $this );\r\n-\t\tif ( ! $coursePostModel->check_capabilities_update() ) {\r\n-\t\t\tthrow new Exception( 'You do not have permission to update this course!' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return course's items support.\r\n-\t * To replace learn_press_course_get_support_item_types()\r\n-\t * Should add hook on addons before use this function.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function item_types_support(): array {\r\n-\t\t$item_types = [\r\n-\t\t\tLP_LESSON_CPT,\r\n-\t\t\tLP_QUIZ_CPT,\r\n-\t\t];\r\n-\r\n-\t\t\u002F\u002F Hook old\r\n-\t\tif ( has_filter( 'learn-press\u002Fcourse-item-type' ) ) {\r\n-\t\t\t$item_types = apply_filters( 'learn-press\u002Fcourse-item-type', $item_types );\r\n-\t\t}\r\n-\r\n-\t\t$item_types = apply_filters( 'learn-press\u002Fcourse\u002Fitem-types-support', $item_types );\r\n-\r\n-\t\t\u002F\u002F set types unique\r\n-\t\treturn array_unique( $item_types );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get label of item type\r\n-\t *\r\n-\t * @param string $item_type\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function item_types_label( string $item_type = '' ): string {\r\n-\t\tswitch ( $item_type ) {\r\n-\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t$label = __( 'Lesson', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t$label = __( 'Quiz', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$label = ucfirst( strtolower( str_replace( [ 'lp_', '_' ], '', $item_type ) ) );\r\n-\t\t\t\t$label = apply_filters( 'learn-press\u002Fcourse\u002Fitem-type-label', $label, $item_type );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn $label;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Course Model\n+ * Purpose: Use to map property separate table learnpress_course\n+ * Field json for store all value of single course.\n+ * Another fields for query list courses faster\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.5\n+ * @since 4.2.6.9\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LP_Course_Cache;\n+use LP_Course_DB;\n+use LP_Course_Item;\n+use LP_Course_JSON_DB;\n+use LP_Course_JSON_Filter;\n+use LP_Datetime;\n+use LP_Helper;\n+use LP_Section_Items_Filter;\n+use LP_Settings;\n+use stdClass;\n+use Throwable;\n+use WP_Error;\n+use WP_Post;\n+\n+class CourseModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID = 0;\n+\t\u002F**\n+\t * @var string author id, foreign key\n+\t *\u002F\n+\tpublic $post_author = 0;\n+\t\u002F**\n+\t * @var string post date gmt\n+\t *\u002F\n+\tpublic $post_date_gmt = null;\n+\t\u002F**\n+\t * @var string post content\n+\t *\u002F\n+\tpublic $post_content = '';\n+\t\u002F**\n+\t * @var string Post title\n+\t *\u002F\n+\tpublic $post_title = '';\n+\t\u002F**\n+\t * @var string Post Status (publish, draft, ...)\n+\t *\u002F\n+\tpublic $post_status = '';\n+\t\u002F**\n+\t * @var string Post name (slug for link)\n+\t *\u002F\n+\tpublic $post_name = '';\n+\t\u002F**\n+\t * @var float price only using for filter courses, don't use for course detail\n+\t * Because price can change by date if set schedule sale\n+\t *\u002F\n+\tpublic $price_to_sort = 0;\n+\tpublic $is_sale       = 0;\n+\t\u002F**\n+\t * @var string JSON Store all data a single course\n+\t *\u002F\n+\tpublic $json = null; \u002F\u002F Only set when save, don't set when get\n+\t\u002F**\n+\t * @var string lang of Course\n+\t *\u002F\n+\tpublic $lang = null;\n+\t\u002F********** Field not on table **********\u002F\n+\t\u002F**\n+\t * @var stdClass all meta data\n+\t *\u002F\n+\tpublic $meta_data = null;\n+\tpublic $image_url = null;\n+\tpublic $permalink = '';\n+\tpublic $categories;\n+\tpublic $tags;\n+\tprivate $price; \u002F\u002F Not save in database, must auto reload calculate\n+\tprivate $passing_condition = '';\n+\tpublic $post_excerpt       = '';\n+\t\u002F**\n+\t * @var int ID of first item\n+\t *\u002F\n+\tpublic $first_item_id;\n+\t\u002F**\n+\t * @var null|object info total items {'count_items': 20, 'lp_lesson': 10, 'lp_quiz': 10, ...}\n+\t *\u002F\n+\tpublic $total_items;\n+\t\u002F**\n+\t * @var array list sections items\n+\t *\u002F\n+\tpublic $sections_items;\n+\t\u002F**\n+\t * @var array|null cached items of course (per instance)\n+\t *\u002F\n+\tprotected array $only_items;\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\n+\t\tif ( is_null( $this->meta_data ) ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to CourseModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return CourseModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): CourseModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get course id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_id(): int {\n+\t\treturn $this->ID;\n+\t}\n+\n+\t\u002F**\n+\t * Get post model\n+\t *\n+\t * @return CoursePostModel\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_post_model(): CoursePostModel {\n+\t\treturn new CoursePostModel( $this );\n+\t}\n+\n+\tpublic function get_title(): string {\n+\t\t$course_post = new CoursePostModel( $this );\n+\n+\t\treturn $course_post->get_the_title();\n+\t}\n+\n+\t\u002F**\n+\t * Get image url\n+\t * if not check get from Post\n+\t *\n+\t * @param string|int[] $size\n+\t *\n+\t * @return string\n+\t * @since 4.2.6.9\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_image_url( $size = 'post-thumbnail' ): string {\n+\t\t\u002F**\n+\t\t * Comment code isset( $this->image_url )\n+\t\t * To apply for many size on a course\n+\t\t * To apply cache need handle cache before, where set size for image.\n+\t\t *\u002F\n+\t\t\u002F*if ( isset( $this->image_url ) ) {\n+\t\t\treturn $this->image_url;\n+\t\t}*\u002F\n+\n+\t\t$post      = new CoursePostModel( $this );\n+\t\t$image_url = $post->get_image_url( $size );\n+\n+\t\t$this->image_url = $image_url;\n+\n+\t\treturn $image_url;\n+\t}\n+\n+\t\u002F**\n+\t * Get author model\n+\t * Check has data on table learnpress_courses return\n+\t * if not check get from Post\n+\t *\n+\t * @return UserModel|false\n+\t *\u002F\n+\tpublic function get_author_model() {\n+\t\t$post = new CoursePostModel( $this );\n+\n+\t\treturn $post->get_author_model();\n+\t}\n+\n+\t\u002F**\n+\t * Get status of course\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_status(): string {\n+\t\treturn $this->post_status;\n+\t}\n+\n+\t\u002F**\n+\t * Get categories\n+\t * Check has data on table learnpress_courses return\n+\t * if not check get from Post\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_categories(): array {\n+\t\tif ( isset( $this->categories ) ) {\n+\t\t\treturn $this->categories;\n+\t\t}\n+\n+\t\t$post       = new PostModel( $this );\n+\t\t$categories = $post->get_categories();\n+\n+\t\t$this->categories = $categories;\n+\n+\t\treturn $this->categories;\n+\t}\n+\n+\t\u002F**\n+\t * Get tags of course.\n+\t *\n+\t * @return array\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_tags(): array {\n+\t\tif ( isset( $this->tags ) ) {\n+\t\t\treturn $this->tags;\n+\t\t}\n+\n+\t\t$post = new PostModel( $this );\n+\t\t$tags = $post->get_tags();\n+\n+\t\t$this->tags = $tags;\n+\n+\t\treturn $this->tags;\n+\t}\n+\n+\t\u002F**\n+\t * Get price\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic function get_price(): float {\n+\t\t\u002F*if ( ! empty( $this->price ) ) {\n+\t\t\treturn $this->price;\n+\t\t}*\u002F\n+\n+\t\tif ( $this->has_sale_price() ) {\n+\t\t\t$price = $this->get_sale_price();\n+\t\t} else {\n+\t\t\t$price = $this->get_regular_price();\n+\t\t}\n+\n+\t\t$this->price                                        = (float) $price;\n+\t\t$this->meta_data->{CoursePostModel::META_KEY_PRICE} = (float) $price;\n+\n+\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fprice', (float) $price, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Get regular price\n+\t * Check has data on table learnpress_courses return\n+\t * if not check get from Post\n+\t * Value can be string empty if not set\n+\t *\n+\t * @return float|string\n+\t *\u002F\n+\tpublic function get_regular_price() {\n+\t\t$key = CoursePostModel::META_KEY_REGULAR_PRICE;\n+\t\tif ( $this->meta_data && isset( $this->meta_data->{$key} ) ) {\n+\t\t\treturn $this->meta_data->{$key};\n+\t\t}\n+\n+\t\t$coursePost              = new CoursePostModel( $this );\n+\t\t$this->meta_data->{$key} = $coursePost->get_regular_price();\n+\n+\t\treturn $this->meta_data->{$key};\n+\t}\n+\n+\t\u002F**\n+\t * Get sale price\n+\t * Sale price can is string empty if not set\n+\t * Sale price set if is number >= 0\n+\t * Check has data on table learnpress_courses return\n+\t * if not check get from Post\n+\t *\n+\t * @return float|string\n+\t *\u002F\n+\tpublic function get_sale_price() {\n+\t\t$key = CoursePostModel::META_KEY_SALE_PRICE;\n+\t\tif ( $this->meta_data && isset( $this->meta_data->{$key} ) ) {\n+\t\t\treturn $this->meta_data->{$key};\n+\t\t}\n+\n+\t\t$coursePost              = new CoursePostModel( $this );\n+\t\t$sale_price              = $coursePost->get_sale_price();\n+\t\t$this->meta_data->{$key} = $sale_price;\n+\n+\t\treturn $this->meta_data->{$key};\n+\t}\n+\n+\t\u002F**\n+\t * Check course has 'sale price'\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_sale_price(): bool {\n+\t\t$has_sale_price = false;\n+\t\t$regular_price  = $this->get_regular_price();\n+\t\t$sale_price     = $this->get_sale_price();\n+\t\t$start_date     = $this->get_sale_start();\n+\t\t$end_date       = $this->get_sale_end();\n+\n+\t\tif ( $sale_price !== '' && (float) $regular_price > (float) $sale_price ) {\n+\t\t\t$has_sale_price = true;\n+\t\t}\n+\n+\t\t\u002F\u002F Check in days sale\n+\t\tif ( $has_sale_price && ! empty( $start_date ) && ! empty( $end_date ) ) {\n+\t\t\t$nowObj = new LP_Datetime();\n+\t\t\t\u002F\u002F Compare via timezone WP\n+\t\t\t$nowStr = $nowObj->toSql( true );\n+\t\t\t$now    = strtotime( $nowStr );\n+\t\t\t$end    = strtotime( $end_date );\n+\t\t\t$start  = strtotime( $start_date );\n+\n+\t\t\t$has_sale_price = $now >= $start && $now \u003C= $end;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fhas-sale-price', $has_sale_price, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get date sale start\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_sale_start() {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_SALE_START );\n+\t}\n+\n+\t\u002F**\n+\t * Get date sale end\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_sale_end() {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_SALE_END );\n+\t}\n+\n+\t\u002F**\n+\t * Check if a course is Free\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_free(): bool {\n+\t\treturn $this->get_price() == 0;\n+\t}\n+\n+\t\u002F**\n+\t * Check if a course is enabled Offline\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_offline(): bool {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_COURSE, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check option \"Block course when expire\" enable.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function enable_block_when_expire(): bool {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_BLOCK_EXPIRE_DURATION, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check option \"Block course when finished\" enable.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function enable_block_when_finished(): bool {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_BLOCK_FINISH, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Get first item of course\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_first_item_id(): int {\n+\t\tif ( isset( $this->first_item_id ) ) {\n+\t\t\treturn $this->first_item_id;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$this->first_item_id = LP_Course_DB::getInstance()->get_first_item_id( $this->get_id() );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->first_item_id = 0;\n+\t\t}\n+\n+\t\treturn $this->first_item_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get total items of course\n+\t *\n+\t * @return null|object\n+\t *\u002F\n+\tpublic function get_total_items() {\n+\t\tif ( isset( $this->total_items ) ) {\n+\t\t\treturn $this->total_items;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$this->total_items = LP_Course_DB::getInstance()->get_total_items( $this->get_id() );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->total_items = null;\n+\t\t}\n+\n+\t\treturn $this->total_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get total sections of course\n+\t *\n+\t * @return int\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_total_sections(): int {\n+\t\t$section_items = $this->get_section_items();\n+\n+\t\treturn count( $section_items );\n+\t}\n+\n+\t\u002F**\n+\t * Get total items of course\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_section_items(): array {\n+\t\tif ( isset( $this->sections_items ) ) {\n+\t\t\treturn $this->sections_items;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$this->sections_items = $this->get_sections_and_items_course_from_db_and_sort();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->sections_items = [];\n+\t\t}\n+\n+\t\treturn $this->sections_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get only items of course\n+\t *\n+\t * @return array\n+\t * @since 4.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_only_items(): array {\n+\t\tif ( isset( $this->only_items ) ) {\n+\t\t\treturn $this->only_items;\n+\t\t}\n+\n+\t\t$this->only_items = [];\n+\n+\t\tforeach ( $this->get_section_items() as $section ) {\n+\t\t\tforeach ( $section->items as $item ) {\n+\t\t\t\t$this->only_items[ $item->item_id ] = $item;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this->only_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get section id of item\n+\t *\n+\t * @param int $item_id\n+\t *\n+\t * @return int\n+\t * @since 4.2.8\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_section_of_item( int $item_id ): int {\n+\t\t$section_id = 0;\n+\n+\t\t$section_items = $this->get_section_items();\n+\t\tforeach ( $section_items as $section ) {\n+\t\t\tforeach ( $section->items as $item ) {\n+\t\t\t\t$item_id_check = (int) ( $item->item_id ?? $item->id ?? 0 );\n+\t\t\t\tif ( $item_id_check === $item_id ) {\n+\t\t\t\t\t$section_id = $section->section_id ?? $section->id ?? 0;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn (int) $section_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get course Evaluation type.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_evaluation_type(): string {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_EVALUATION_TYPE, 'evaluate_lesson' );\n+\t}\n+\n+\t\u002F**\n+\t * Get course Evaluation type.\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return array\n+\t * @since 4.3.2.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_evaluation_types( string $type = '' ): array {\n+\t\tif ( has_filter( 'learnpress\u002Fcourse-evaluation\u002Fmethods' ) ) {\n+\t\t\t$methods = apply_filters( 'learnpress\u002Fcourse-evaluation\u002Fmethods', [], 0 );\n+\t\t}\n+\n+\t\t$types = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fevaluation-types',\n+\t\t\tarray(\n+\t\t\t\t'evaluate_lesson'     => [\n+\t\t\t\t\t'label' => __( 'Evaluate via completed lessons', 'learnpress' ),\n+\t\t\t\t\t'tip'   => __( 'Course will be completed when all lessons are completed.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'evaluate_final_quiz' => [\n+\t\t\t\t\t'label' => __( 'Evaluate via final quiz', 'learnpress' ),\n+\t\t\t\t\t'tip'   => __( 'Course will be completed when the final quiz is passed.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'evaluate_quiz'       => [\n+\t\t\t\t\t'label' => __( 'Evaluate via quizzes', 'learnpress' ),\n+\t\t\t\t\t'tip'   => __( 'Course will be completed when all quizzes are passed.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'evaluate_questions'  => [\n+\t\t\t\t\t'label' => __( 'Evaluate via questions', 'learnpress' ),\n+\t\t\t\t\t'tip'   => __( 'Course will be completed when all questions are answered correctly.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t'evaluate_mark'       => [\n+\t\t\t\t\t'label' => __( 'Evaluate via marks', 'learnpress' ),\n+\t\t\t\t\t'tip'   => __( 'Course will be completed when the passing mark is achieved.', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t),\n+\t\t);\n+\n+\t\tif ( empty( $type ) ) {\n+\t\t\treturn $types;\n+\t\t} elseif ( empty( $types[ $type ] ) && ! empty( $methods[ $type ] ) ) {\n+\t\t\treturn $methods[ $type ];\n+\t\t}\n+\n+\t\treturn $types[ $type ] ?? [];\n+\t}\n+\n+\t\u002F**\n+\t * Get course passing condition value.\n+\t *\n+\t * @return float\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_passing_condition(): float {\n+\t\treturn (float) $this->get_meta_value_by_key( CoursePostModel::META_KEY_PASSING_CONDITION, 80 );\n+\t}\n+\n+\t\u002F**\n+\t * Get final quiz id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_final_quiz(): int {\n+\t\t$key = '_lp_final_quiz';\n+\t\tif ( ! empty( $this->meta_data->{$key} ) ) {\n+\t\t\treturn $this->meta_data->$key;\n+\t\t}\n+\n+\t\t$final_quiz = 0;\n+\n+\t\t\u002F\u002F Not use array_reverse, it's make change object\n+\t\t$section_items = $this->get_section_items();\n+\t\t$found         = 0;\n+\t\tfor ( $i = count( $section_items ); $i > 0; $i-- ) {\n+\t\t\t$section = $section_items[ $i - 1 ];\n+\t\t\tfor ( $j = count( $section->items ); $j > 0; $j-- ) {\n+\t\t\t\t$item = $section->items[ $j - 1 ];\n+\t\t\t\tif ( learn_press_get_post_type( $item->id ) === LP_QUIZ_CPT ) {\n+\t\t\t\t\t$final_quiz = $item->id;\n+\t\t\t\t\t$found      = 1;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $found ) {\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$evaluation_type = $this->get_evaluation_type();\n+\t\tif ( $evaluation_type === 'evaluate_final_quiz' ) {\n+\t\t\tif ( isset( $final_quiz ) ) {\n+\t\t\t\tupdate_post_meta( $this->ID, $key, $final_quiz );\n+\t\t\t} else {\n+\t\t\t\tdelete_post_meta( $this->ID, $key );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$this->meta_data->{$key} = $final_quiz;\n+\n+\t\treturn $final_quiz;\n+\t}\n+\n+\t\u002F**\n+\t * Get all sections and items from database, then handle sort\n+\t * Only call when data change or not set\n+\t *\n+\t * @return array\n+\t * @since 4.1.6.9\n+\t * @version 1.0.4\n+\t * @author tungnx\n+\t *\u002F\n+\tprivate function get_sections_and_items_course_from_db_and_sort(): array {\n+\t\t$sections_items = [];\n+\t\t$course_id      = $this->get_id();\n+\t\t$lp_course_db   = LP_Course_DB::getInstance();\n+\n+\t\ttry {\n+\t\t\t$sections_results       = $lp_course_db->get_sections( $course_id );\n+\t\t\t$sections_items_results = $lp_course_db->get_full_sections_and_items_course( $course_id );\n+\t\t\t$count_items            = count( $sections_items_results );\n+\t\t\t$index_items_last       = $count_items - 1;\n+\t\t\t$section_current        = 0;\n+\n+\t\t\t\u002F**\n+\t\t\t * @var $section_order_plus int\n+\t\t\t * @var $item_order_plus int\n+\t\t\t * To fixed case: section order start from 0, item order start from 0\n+\t\t\t *\u002F\n+\t\t\t$section_order_plus = 0;\n+\t\t\t$item_order_plus    = 0;\n+\t\t\tforeach ( $sections_items_results as $index => $sections_item ) {\n+\t\t\t\t$section_new   = $sections_item->section_id;\n+\t\t\t\t$section_order = (int) $sections_item->section_order;\n+\t\t\t\tif ( $index === 0 && $section_order === 0 ) {\n+\t\t\t\t\t$section_order_plus = 1;\n+\t\t\t\t}\n+\n+\t\t\t\t$section_order += $section_order_plus;\n+\t\t\t\t$item           = new stdClass();\n+\t\t\t\t$item->id       = $sections_item->item_id;\n+\t\t\t\t$item->item_id  = $sections_item->item_id;\n+\t\t\t\t$item_order     = (int) $sections_item->item_order;\n+\t\t\t\tif ( $index === 0 && $item_order === 0 ) {\n+\t\t\t\t\t$item_order_plus = 1;\n+\t\t\t\t}\n+\n+\t\t\t\t$item_order      += $item_order_plus;\n+\t\t\t\t$item->order      = $item_order;\n+\t\t\t\t$item->item_order = $item_order;\n+\t\t\t\t$item->type       = $sections_item->item_type;\n+\t\t\t\t$item->item_type  = $sections_item->item_type;\n+\t\t\t\t$item_tmp         = LP_Course_Item::get_item( $item->id );\n+\t\t\t\tif ( $item_tmp ) {\n+\t\t\t\t\t$item->title   = html_entity_decode( $item_tmp->get_title() );\n+\t\t\t\t\t$item->preview = $item_tmp->is_preview();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $section_new != $section_current ) {\n+\t\t\t\t\t$sections_items[ $section_new ]                      = new stdClass();\n+\t\t\t\t\t$sections_items[ $section_new ]->id                  = $section_new; \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t$sections_items[ $section_new ]->section_id          = $section_new; \u002F\u002F new field\n+\t\t\t\t\t$sections_items[ $section_new ]->order               = $section_order; \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t$sections_items[ $section_new ]->section_order       = $section_order; \u002F\u002F new field\n+\t\t\t\t\t$sections_items[ $section_new ]->title               = html_entity_decode( $sections_item->section_name ); \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t$sections_items[ $section_new ]->section_name        = html_entity_decode( $sections_item->section_name ); \u002F\u002F new field\n+\t\t\t\t\t$sections_items[ $section_new ]->description         = html_entity_decode( $sections_item->section_description ); \u002F\u002F old field will be deprecated in future\n+\t\t\t\t\t$sections_items[ $section_new ]->section_description = html_entity_decode( $sections_item->section_description ); \u002F\u002F new field\n+\t\t\t\t\t$sections_items[ $section_new ]->items               = [];\n+\n+\t\t\t\t\t\u002F\u002F Sort item by item_order\n+\t\t\t\t\tif ( $section_current != 0 ) {\n+\t\t\t\t\t\tusort(\n+\t\t\t\t\t\t\t$sections_items[ $section_current ]->items,\n+\t\t\t\t\t\t\tfunction ( $item1, $item2 ) {\n+\t\t\t\t\t\t\t\treturn $item1->item_order - $item2->item_order;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$section_current = $section_new;\n+\t\t\t\t}\n+\n+\t\t\t\t$sections_items[ $section_new ]->items[ $item->item_id ] = $item;\n+\n+\t\t\t\tif ( $index_items_last === $index ) {\n+\t\t\t\t\tusort(\n+\t\t\t\t\t\t$sections_items[ $section_current ]->items,\n+\t\t\t\t\t\tfunction ( $item1, $item2 ) {\n+\t\t\t\t\t\t\treturn $item1->item_order - $item2->item_order;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check case if section empty items\n+\t\t\tforeach ( $sections_results as $section ) {\n+\t\t\t\t$section_id = $section->section_id;\n+\t\t\t\tif ( isset( $sections_items[ $section_id ] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$section_obj                      = new stdClass();\n+\t\t\t\t$section_obj->id                  = $section_id;\n+\t\t\t\t$section_obj->section_id          = $section_id;\n+\t\t\t\t$section_obj->order               = $section->section_order;\n+\t\t\t\t$section_obj->section_order       = $section->section_order;\n+\t\t\t\t$section_obj->title               = html_entity_decode( $section->section_name );\n+\t\t\t\t$section_obj->section_name        = html_entity_decode( $section->section_name );\n+\t\t\t\t$section_obj->description         = html_entity_decode( $section->section_description );\n+\t\t\t\t$section_obj->section_description = html_entity_decode( $section->section_description );\n+\t\t\t\t$section_obj->items               = [];\n+\t\t\t\t$sections_items[ $section_id ]    = $section_obj;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Sort section by section_order\n+\t\t\tusort(\n+\t\t\t\t$sections_items,\n+\t\t\t\tfunction ( $section1, $section2 ) {\n+\t\t\t\t\treturn $section1->section_order - $section2->section_order;\n+\t\t\t\t}\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $sections_items;\n+\t}\n+\n+\t\u002F**\n+\t * Get permalink course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_permalink(): string {\n+\t\tif ( ! empty( $this->permalink ) ) {\n+\t\t\treturn $this->permalink;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$coursePostModel = new CoursePostModel( $this );\n+\t\t\t$this->permalink = $coursePostModel->get_permalink();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$this->permalink = '';\n+\t\t}\n+\n+\t\treturn $this->permalink;\n+\t}\n+\n+\t\u002F**\n+\t * Get value option No enroll requirement\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_no_enroll_requirement() {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_NO_REQUIRED_ENROLL, 'no' );\n+\t}\n+\n+\t\u002F**\n+\t * Get description of Course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_description(): string {\n+\t\t$course_post = new CoursePostModel( $this );\n+\n+\t\treturn $course_post->get_the_content();\n+\t}\n+\n+\t\u002F**\n+\t * Get short description of Course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_short_description(): string {\n+\t\t$course_post = new CoursePostModel( $this );\n+\n+\t\treturn $course_post->get_the_excerpt();\n+\t}\n+\n+\t\u002F**\n+\t * Get value option No enroll requirement\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_no_enroll_requirement(): bool {\n+\t\treturn $this->get_no_enroll_requirement() === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Get value from meta data by key\n+\t *\n+\t * @param string $key\n+\t * @param mixed|false $default_value\n+\t * @param bool $single\n+\t *\n+\t * @return false|mixed\n+\t * @since 4.2.6.9\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_meta_value_by_key( string $key, $default_value = false, bool $single = true ) {\n+\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\n+\t\t\t$value = maybe_unserialize( $this->meta_data->{$key} );\n+\t\t} else {\n+\t\t\t$coursePost = new CoursePostModel( $this );\n+\t\t\t$value      = $coursePost->get_meta_value_by_key( $key, $default_value, $single );\n+\t\t}\n+\n+\t\t$value = maybe_unserialize( $value );\n+\t\t$this->meta_data->{$key} = $value;\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * Check course is in stock\n+\t * True is in stock, False is out of stock\n+\t *\n+\t * @return mixed\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function is_in_stock() {\n+\t\t$in_stock    = true;\n+\t\t$max_allowed = (int) $this->get_meta_value_by_key( CoursePostModel::META_KEY_MAX_STUDENTS, 0 );\n+\n+\t\tif ( $max_allowed ) {\n+\t\t\t$in_stock = $max_allowed > $this->get_total_user_enrolled_or_purchased();\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fis-in-stock', $in_stock, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Check course is enable repurchase\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function enable_allow_repurchase(): bool {\n+\t\t$enable = $this->get_meta_value_by_key( CoursePostModel::META_KEY_ALLOW_COURSE_REPURCHASE, 'no' );\n+\n+\t\treturn 'yes' === $enable;\n+\t}\n+\n+\t\u002F**\n+\t * Type repurchase\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_type_repurchase(): string {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_COURSE_REPURCHASE_OPTION, 'reset' );\n+\t}\n+\n+\t\u002F**\n+\t * Get external link\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_external_link(): string {\n+\t\treturn esc_url_raw(\n+\t\t\t$this->get_meta_value_by_key( CoursePostModel::META_KEY_EXTERNAL_LINK_BY_COURSE, '' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get item's link\n+\t * @move from LP_Abstract_Course\n+\t *\n+\t * @param int $item_id\n+\t * @param string $item_type\n+\t *\n+\t * @return string\n+\t * @since 3.0.0\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_item_link( int $item_id, string $item_type = '' ): string {\n+\t\tif ( empty( $item_type ) ) {\n+\t\t\t$item_type = get_post_type( $item_id );\n+\t\t}\n+\t\t$course_permalink = trailingslashit( $this->get_permalink() );\n+\t\t$item_slug        = get_post_field( 'post_name', $item_id );\n+\n+\t\t$slug_prefixes = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fcustom-item-prefixes',\n+\t\t\tarray(\n+\t\t\t\tLP_QUIZ_CPT   => sanitize_title_with_dashes( LP_Settings::get_option( 'quiz_slug', 'quizzes' ) ),\n+\t\t\t\tLP_LESSON_CPT => sanitize_title_with_dashes( LP_Settings::get_option( 'lesson_slug', 'lessons' ) ),\n+\t\t\t),\n+\t\t\t$this->get_id()\n+\t\t);\n+\n+\t\t$slug_prefix = trailingslashit( $slug_prefixes[ $item_type ] ?? '' );\n+\t\t$item_link   = trailingslashit( $course_permalink . $slug_prefix . $item_slug );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fitem-link', $item_link, $item_id, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get total user enrolled, purchased or finished\n+\t *\n+\t * @move from LP_Abstract_Course\n+\t * @return int\n+\t * @version 1.0.1\n+\t * @since 4.1.4\n+\t *\u002F\n+\tpublic function get_total_user_enrolled_or_purchased(): int {\n+\t\t$total           = 0;\n+\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\n+\t\ttry {\n+\t\t\t$total = $lp_course_cache->get_total_students_enrolled_or_purchased( $this->get_id() );\n+\t\t\tif ( false !== $total ) {\n+\t\t\t\treturn $total;\n+\t\t\t}\n+\n+\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\t\t\t$total        = $lp_course_db->get_total_user_enrolled_or_purchased( $this->get_id() );\n+\t\t\t$lp_course_cache->set_total_students_enrolled_or_purchased( $this->get_id(), $total );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $total;\n+\t}\n+\n+\t\u002F**\n+\t * Get fake students.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_fake_students(): int {\n+\t\treturn (int) $this->get_meta_value_by_key( CoursePostModel::META_KEY_STUDENTS, 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Count number of students enrolled course.\n+\t * Check global settings `enrolled_students_number`\n+\t * and add the fake value if both are set.\n+\t *\n+\t * @return int\n+\t * @move from LP_Abstract_Course\n+\t *\u002F\n+\tpublic function count_students(): int {\n+\t\t$total  = $this->get_total_user_enrolled_or_purchased();\n+\t\t$total += $this->get_fake_students();\n+\n+\t\treturn $total;\n+\t}\n+\n+\t\u002F**\n+\t * Count total items in Course\n+\t * item_type empty will return all items if exists.\n+\t *\n+\t * @param string $item_type\n+\t *\n+\t * @return int\n+\t * @since 4.2.7.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function count_items( string $item_type = '' ): int {\n+\t\t$count = 0;\n+\n+\t\t$total_items = $this->get_total_items();\n+\t\tif ( empty( $item_type ) ) {\n+\t\t\t$count = $total_items->count_items ?? 0;\n+\t\t} elseif ( isset( $total_items->{$item_type} ) ) {\n+\t\t\treturn $total_items->{$item_type};\n+\t\t}\n+\n+\t\treturn $count;\n+\t}\n+\n+\t\u002F**\n+\t * Get Duration of course\n+\t * Timestamp in second\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_duration(): string {\n+\t\treturn $this->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '10 week' );\n+\t}\n+\n+\t\u002F**\n+\t * Check user can enroll course.\n+\t * @move from can_enroll_course method of LP_User class, since 4.1.1\n+\t *\n+\t * @param UserModel|false $user\n+\t *\n+\t * @return bool|WP_Error\n+\t * @since 4.2.7.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function can_enroll( $user ) {\n+\t\t$can_enroll = true;\n+\t\t$error_code = '';\n+\n+\t\t$user_id = 0;\n+\t\tif ( $user instanceof UserModel ) {\n+\t\t\t$user_id = $user->get_id();\n+\t\t}\n+\n+\t\ttry {\n+\t\t\tif ( ! in_array( $this->post_status, [ 'publish', 'private' ] ) ) {\n+\t\t\t\t$error_code = 'course_not_publish';\n+\t\t\t\tthrow new Exception( __( 'The course is not public', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userCourseModel           = UserCourseModel::find( $user_id, $this->get_id(), true );\n+\t\t\t$enable_no_required_enroll = $this->has_no_enroll_requirement();\n+\t\t\t$out_of_stock              = ! $this->is_in_stock();\n+\n+\t\t\t\u002F\u002F Case user can retake course.\n+\t\t\tif ( $userCourseModel && $userCourseModel->can_retake() ) {\n+\t\t\t\t$error_code = 'course_can_retry';\n+\t\t\t\tthrow new Exception( esc_html__( 'Course can retake.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Case course is out of stock, show message when user is not login or user_item not exits\n+\t\t\tif ( $out_of_stock &&\n+\t\t\t\t( ! $user || ! $userCourseModel || ! $userCourseModel->has_enrolled_or_finished() ) ) {\n+\t\t\t\t$error_code = 'course_out_of_stock';\n+\t\t\t\tthrow new Exception( __( 'The course is full of students.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Case user is logged in and user_item exists\n+\t\t\tif ( $userCourseModel && $user ) {\n+\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\n+\t\t\t\t\t$error_code = 'course_is_enrolled';\n+\t\t\t\t\tthrow new Exception( __( 'This course is already enrolled!', 'learnpress' ) );\n+\t\t\t\t} elseif ( $userCourseModel->has_finished() ) {\n+\t\t\t\t\t$error_code = 'course_is_finished';\n+\t\t\t\t\tthrow new Exception( __( 'The course is finished.', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $enable_no_required_enroll ) {\n+\t\t\t\tif ( ! $user ) {\n+\t\t\t\t\t$error_code = 'course_is_no_required_enroll_not_login';\n+\t\t\t\t\tthrow new Exception(\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'Enrollment in the course is not mandatory. You can access course for learning now.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( ! empty( $this->get_external_link() )\n+\t\t\t\t\t&& ( ! $user || ! $userCourseModel\n+\t\t\t\t\t\t|| $userCourseModel->get_status() === UserItemModel::STATUS_CANCEL )\n+\t\t\t\t\t&& ! $this->is_offline() ) {\n+\t\t\t\t\t$error_code = 'course_is_external';\n+\t\t\t\t\tthrow new Exception( __( 'The course is external', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $this->is_free() ) {\n+\t\t\t\t\tif ( ! $user ) {\n+\t\t\t\t\t\t$error_code = 'course_is_not_purchased_not_login';\n+\t\t\t\t\t\tthrow new Exception( __( 'The course is not purchased.', 'learnpress' ) );\n+\t\t\t\t\t} elseif ( ! $userCourseModel || ! $userCourseModel->has_purchased() ) {\n+\t\t\t\t\t\t$error_code = 'course_is_not_purchased';\n+\t\t\t\t\t\tthrow new Exception( __( 'The course is not purchased.', 'learnpress' ) );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tif ( empty( $error_code ) ) {\n+\t\t\t\t$error_code = 'course_can_not_enroll';\n+\t\t\t}\n+\t\t\t$can_enroll = new WP_Error( $error_code, $e->getMessage() );\n+\t\t}\n+\n+\t\t\u002F\u002F Hook old\n+\t\tif ( has_filter( 'learn-press\u002Fuser\u002Fcan-enroll-course' ) ) {\n+\t\t\t$output          = new stdClass();\n+\t\t\t$output->check   = true;\n+\t\t\t$output->message = '';\n+\t\t\tif ( $can_enroll instanceof WP_Error ) {\n+\t\t\t\t$output->check   = false;\n+\t\t\t\t$output->message = $can_enroll->get_error_message();\n+\t\t\t}\n+\n+\t\t\t$course_old = learn_press_get_course( $this->get_id() );\n+\t\t\t$user_old   = learn_press_get_user( $user_id );\n+\t\t\t$output     = apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll-course', $output, $course_old, false, $user_old );\n+\t\t\tif ( $output === false ) {\n+\t\t\t\t$can_enroll = new WP_Error( '', '' );\n+\t\t\t} elseif ( ! $output->check && $output->message ) {\n+\t\t\t\t$can_enroll = new WP_Error( 'error_custom', $output->message );\n+\t\t\t}\n+\t\t\t\u002F\u002F_deprecated_function( 'The learn-press\u002Fuser\u002Fcan-enroll-course filter', '4.2.7.3', 'learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll\u002Fcourse', $can_enroll, $this, $user );\n+\t}\n+\n+\t\u002F**\n+\t * Check user can purchase course.\n+\t * @move from can_purchase_course method of LP_User class, since 4.0.8\n+\t * @use LP_User::can_purchase_course\n+\t *\n+\t * @param UserModel|false $user\n+\t *\n+\t * @return bool|WP_Error\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function can_purchase( $user ) {\n+\t\t$can_purchase = true;\n+\t\t$error_code   = '';\n+\n+\t\t$user_id = 0;\n+\t\tif ( $user instanceof UserModel ) {\n+\t\t\t$user_id = $user->get_id();\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$can_enroll = $this->can_enroll( $user );\n+\t\t\tif ( $can_enroll instanceof WP_Error ) {\n+\t\t\t\t$error_code_return = [\n+\t\t\t\t\t'course_is_not_purchased_not_login',\n+\t\t\t\t\t'course_is_not_purchased',\n+\t\t\t\t\t'course_is_enrolled',\n+\t\t\t\t\t'course_is_finished',\n+\t\t\t\t];\n+\t\t\t\tif ( ! in_array( $can_enroll->get_error_code(), $error_code_return ) ) {\n+\t\t\t\t\t$error_code = $can_enroll->get_error_code();\n+\t\t\t\t\tthrow new Exception( $can_enroll->get_error_message() );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $this->is_free() ) {\n+\t\t\t\t$error_code = 'course_is_free';\n+\t\t\t\tthrow new Exception( __( 'The course is free.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$enable_no_required_enroll = $this->has_no_enroll_requirement();\n+\t\t\tif ( $enable_no_required_enroll ) {\n+\t\t\t\t$error_code = 'course_is_no_required_enroll';\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'Enrollment in the course is not mandatory. You can access course for learning now.', 'learnpress' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $this->get_id(), true );\n+\t\t\tif ( $user ) {\n+\t\t\t\tif ( $userCourseModel ) {\n+\t\t\t\t\tif ( $userCourseModel->has_purchased() ) {\n+\t\t\t\t\t\t$error_code = 'course_purchased';\n+\t\t\t\t\t\tthrow new Exception( __( 'Course is purchased', 'learnpress' ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $this->enable_allow_repurchase() ) {\n+\t\t\t\t\t\tif ( $userCourseModel->has_enrolled() && $userCourseModel->timestamp_remaining_duration() !== 0 ) {\n+\t\t\t\t\t\t\t$error_code = 'course_is_enrolled';\n+\t\t\t\t\t\t\tthrow new Exception( 'This course is already enrolled!' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif ( $userCourseModel->has_enrolled_or_finished() ) {\n+\t\t\t\t\t\t\t$error_code = 'course_is_enrolled_or_finished';\n+\t\t\t\t\t\t\tthrow new Exception( __( 'Course is enrolled or finished', 'learnpress' ) );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tif ( empty( $error_code ) ) {\n+\t\t\t\t$error_code = 'course_can_not_purchase';\n+\t\t\t}\n+\t\t\t$can_purchase = new WP_Error( $error_code, $e->getMessage() );\n+\t\t}\n+\n+\t\t\u002F\u002F Hook old\n+\t\tif ( has_filter( 'learn-press\u002Fuser\u002Fcan-purchase-course' ) ) {\n+\t\t\t$can_purchase = apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase-course', $can_purchase, $user_id, $this->get_id() );\n+\t\t\tif ( $can_purchase === false ) {\n+\t\t\t\t$can_purchase = new WP_Error( '', '' );\n+\t\t\t}\n+\t\t\t\u002F\u002F_deprecated_function( 'The learn-press\u002Fuser\u002Fcan-purchase-course filter', '4.2.7.3', 'learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse' );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase\u002Fcourse', $can_purchase, $this, $user );\n+\t}\n+\n+\t\u002F**\n+\t * Check user is author or co-in of course.\n+\t *\n+\t * @param UserModel|false $userModel\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function check_user_is_author( $userModel ): bool {\n+\t\t$is_author = false;\n+\n+\t\tif ( $userModel instanceof UserModel\n+\t\t\t&& $userModel->get_id() === $this->post_author ) {\n+\t\t\t$is_author = true;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fis-author', $is_author, $this, $userModel );\n+\t}\n+\n+\t\u002F**\n+\t * Get item model assigned to this course\n+\t *\n+\t * @return mixed|false|null|WP_Post|PostModel\n+\t * @since v4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_item_model( int $item_id, string $item_type ) {\n+\t\ttry {\n+\t\t\t$item = false;\n+\n+\t\t\tswitch ( $item_type ) {\n+\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t\t$item = LessonPostModel::find( $item_id, true );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t$item = QuizPostModel::find( $item_id, true );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUESTION_CPT:\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$item = apply_filters( 'learn-press\u002Fcourse\u002Fget-item-model', $item, $item_id, $item_type, $this );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If not defined class, get post default\n+\t\t\tif ( ! $item ) {\n+\t\t\t\t$filter            = new PostFilter();\n+\t\t\t\t$filter->ID        = $item_id;\n+\t\t\t\t$filter->post_type = $item_type;\n+\t\t\t\t$item              = PostModel::get_item_model_from_db( $filter );\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $item;\n+\t}\n+\n+\t\u002F**\n+\t * Get item model if query success.\n+\t * If not exists, return false.\n+\t * If exists, return PostModel.\n+\t *\n+\t * @param LP_Course_JSON_Filter $filter\n+\t *\n+\t * @return CourseModel|false|static\n+\t * @since 4.2.6.9\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function get_item_model_from_db( LP_Course_JSON_Filter $filter ) {\n+\t\t$course_model = false;\n+\n+\t\ttry {\n+\t\t\t$filter->only_fields = [ 'json', 'post_content' ];\n+\n+\t\t\t$course_rs = self::get_course_from_db( $filter );\n+\t\t\tif ( $course_rs instanceof stdClass && isset( $course_rs->json ) ) {\n+\t\t\t\t$course_obj   = LP_Helper::json_decode( $course_rs->json );\n+\t\t\t\t$course_model = new static( $course_obj );\n+\t\t\t\t\u002F\u002F$course_model->json         = $course_rs->json;\n+\t\t\t\t$course_model->post_content = $course_rs->post_content;\n+\t\t\t\t$course_model->get_author_model();\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $course_model;\n+\t}\n+\n+\t\u002F**\n+\t * Get course by ID\n+\t *\n+\t * @param int $course_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|CourseModel|static\n+\t * @since 4.2.6.9\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function find( int $course_id, bool $check_cache = false ) {\n+\t\tif ( ! $course_id ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$filter_course     = new LP_Course_JSON_Filter();\n+\t\t$filter_course->ID = $course_id;\n+\t\t$key_cache         = \"courseModel\u002Ffind\u002Fid\u002F{$course_id}\";\n+\t\t$lp_course_cache   = new LP_Course_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$course_model = $lp_course_cache->get_cache( $key_cache );\n+\t\t\tif ( $course_model instanceof CourseModel ) {\n+\t\t\t\treturn $course_model;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Query database no cache.\n+\t\t$course_model = self::get_item_model_from_db( $filter_course );\n+\t\tif ( false === $course_model ) { \u002F\u002F Find on table posts\n+\t\t\t$course_rs = CoursePostModel::find( $course_id );\n+\t\t\tif ( $course_rs instanceof CoursePostModel ) {\n+\t\t\t\t$course_model = new static( $course_rs );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $course_model instanceof CourseModel ) {\n+\t\t\t$lp_course_cache->set_cache( $key_cache, $course_model );\n+\t\t}\n+\n+\t\treturn $course_model;\n+\t}\n+\n+\t\u002F**\n+\t * Get course from table learnpress_courses\n+\t *\n+\t * @return array|object|stdClass|null\n+\t * @throws Exception\n+\t *\u002F\n+\tprivate static function get_course_from_db( LP_Course_JSON_Filter $filter ) {\n+\t\t$lp_course_json_db = LP_Course_JSON_DB::getInstance();\n+\t\t$lp_course_json_db->get_query_single_row( $filter );\n+\t\t$query_single_row = $lp_course_json_db->get_courses( $filter );\n+\n+\t\treturn $lp_course_json_db->wpdb->get_row( $query_single_row );\n+\t}\n+\n+\t\u002F**\n+\t * Save course data to table learnpress_courses.\n+\t *\n+\t * @param bool $force_save\n+\t *\n+\t * @return CourseModel\n+\t * @throws Exception\n+\t * @since 4.2.6.9\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function save( bool $force_save = false ): CourseModel {\n+\t\t\u002F\u002F Check permission\n+\t\tif ( ! $force_save ) {\n+\t\t\t$this->check_permission();\n+\t\t}\n+\n+\t\t$lp_course_json_db = LP_Course_JSON_DB::getInstance();\n+\n+\t\t$courseObjToJSON = clone $this;\n+\t\tunset( $courseObjToJSON->post_content );\n+\t\tunset( $courseObjToJSON->json );\n+\t\t$this->json = json_encode( $courseObjToJSON, JSON_UNESCAPED_UNICODE );\n+\t\t$data       = get_object_vars( $this );\n+\n+\t\tif ( ! isset( $data['ID'] ) ) {\n+\t\t\tthrow new Exception( 'Course ID is invalid!' );\n+\t\t}\n+\n+\t\t$filter              = new LP_Course_JSON_Filter();\n+\t\t$filter->ID          = $this->ID;\n+\t\t$filter->only_fields = [ 'ID' ];\n+\t\t$course_rs           = self::get_course_from_db( $filter );\n+\t\t\u002F\u002F Check if exists course id.\n+\t\tif ( empty( $course_rs ) ) { \u002F\u002F Insert data.\n+\t\t\t$lp_course_json_db->insert_data( $data );\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$lp_course_json_db->update_data( $data );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t$lp_course_json_db  = LP_Course_JSON_DB::getInstance();\n+\t\t$filter             = new LP_Course_JSON_Filter();\n+\t\t$filter->where[]    = $lp_course_json_db->wpdb->prepare( 'AND ID = %d', $this->ID );\n+\t\t$filter->collection = $lp_course_json_db->tb_lp_courses;\n+\t\t$lp_course_json_db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches\n+\t *\n+\t * @return void\n+\t * @version 1.0.0\n+\t * @since 4.2.7.4\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t$key_cache       = \"courseModel\u002Ffind\u002Fid\u002F{$this->ID}\";\n+\t\t$lp_course_cache = new LP_Course_Cache();\n+\t\t$lp_course_cache->clear( $key_cache );\n+\n+\t\t\u002F\u002F Clear cache image urls, store with many sizes\n+\t\t$img_urls_key_cache = \"image_urls\u002F{$this->ID}\";\n+\t\t$lp_course_cache->clear_cache_on_group( $img_urls_key_cache );\n+\t}\n+\n+\t\u002F**\n+\t * Check permission to update\u002Fcreate course\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_permission() {\n+\t\t$coursePostModel = new CoursePostModel( $this );\n+\t\tif ( ! $coursePostModel->check_capabilities_update() ) {\n+\t\t\tthrow new Exception( 'You do not have permission to update this course!' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Return course's items support.\n+\t * To replace learn_press_course_get_support_item_types()\n+\t * Should add hook on addons before use this function.\n+\t *\n+\t * @return array\n+\t * @since 4.2.7.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function item_types_support(): array {\n+\t\t$item_types = [\n+\t\t\tLP_LESSON_CPT,\n+\t\t\tLP_QUIZ_CPT,\n+\t\t];\n+\n+\t\t\u002F\u002F Hook old\n+\t\tif ( has_filter( 'learn-press\u002Fcourse-item-type' ) ) {\n+\t\t\t$item_types = apply_filters( 'learn-press\u002Fcourse-item-type', $item_types );\n+\t\t}\n+\n+\t\t$item_types = apply_filters( 'learn-press\u002Fcourse\u002Fitem-types-support', $item_types );\n+\n+\t\t\u002F\u002F set types unique\n+\t\treturn array_unique( $item_types );\n+\t}\n+\n+\t\u002F**\n+\t * Get label of item type\n+\t *\n+\t * @param string $item_type\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function item_types_label( string $item_type = '' ): string {\n+\t\tswitch ( $item_type ) {\n+\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t$label = __( 'Lesson', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t$label = __( 'Quiz', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$label = ucfirst( strtolower( str_replace( [ 'lp_', '_' ], '', $item_type ) ) );\n+\t\t\t\t$label = apply_filters( 'learn-press\u002Fcourse\u002Fitem-type-label', $label, $item_type );\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn $label;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCoursePostModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCoursePostModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCoursePostModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCoursePostModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,270 +1,274 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Course Post Model\r\n- * To replace class LP_Course old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\r\n-use LearnPress\\Databases\\CourseSectionDB;\r\n-use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\r\n-use LP_Course_Filter;\r\n-\r\n-use LP_Helper;\r\n-\r\n-class CoursePostModel extends PostModel {\r\n-\t\u002F**\r\n-\t * @var string Post Type\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_COURSE_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * Const meta key\r\n-\t *\u002F\r\n-\tconst META_KEY_PRICE                    = '_lp_price';\r\n-\tconst META_KEY_REGULAR_PRICE            = '_lp_regular_price';\r\n-\tconst META_KEY_SALE_PRICE               = '_lp_sale_price';\r\n-\tconst META_KEY_SALE_START               = '_lp_sale_start';\r\n-\tconst META_KEY_SALE_END                 = '_lp_sale_end';\r\n-\tconst META_KEY_EVALUATION_TYPE          = '_lp_course_result';\r\n-\tconst META_KEY_PASSING_CONDITION        = '_lp_passing_condition';\r\n-\tconst META_KEY_DURATION                 = '_lp_duration';\r\n-\tconst META_KEY_BLOCK_EXPIRE_DURATION    = '_lp_block_expire_duration';\r\n-\tconst META_KEY_BLOCK_FINISH             = '_lp_block_finished';\r\n-\tconst META_KEY_ALLOW_COURSE_REPURCHASE  = '_lp_allow_course_repurchase';\r\n-\tconst META_KEY_COURSE_REPURCHASE_OPTION = '_lp_course_repurchase_option';\r\n-\tconst META_KEY_LEVEL                    = '_lp_level';\r\n-\tconst META_KEY_STUDENTS                 = '_lp_students'; \u002F\u002F Fake students key\r\n-\tconst META_KEY_MAX_STUDENTS             = '_lp_max_students';\r\n-\tconst META_KEY_RETAKE_COUNT             = '_lp_retake_count';\r\n-\tconst META_KEY_HAS_FINISH               = '_lp_has_finish';\r\n-\tconst META_KEY_FEATURED                 = '_lp_featured';\r\n-\tconst META_KEY_FEATURED_REVIEW          = '_lp_featured_review';\r\n-\tconst META_KEY_EXTERNAL_LINK_BY_COURSE  = '_lp_external_link_buy_course';\r\n-\tconst META_KEY_IS_SALE                  = '_lp_course_is_sale';\r\n-\tconst META_KEY_NO_REQUIRED_ENROLL       = '_lp_no_required_enroll';\r\n-\tconst META_KEY_OFFLINE_COURSE           = '_lp_offline_course';\r\n-\tconst META_KEY_ADDRESS                  = '_lp_address';\r\n-\tconst META_KEY_DELIVER                  = '_lp_deliver_type';\r\n-\tconst META_KEY_OFFLINE_LESSON_COUNT     = '_lp_offline_lesson_count';\r\n-\tconst META_KEY_REQUIREMENTS             = '_lp_requirements';\r\n-\tconst META_KEY_TARGET                   = '_lp_target_audiences';\r\n-\tconst META_KEY_FEATURES                 = '_lp_key_features';\r\n-\tconst META_KEY_FAQS                     = '_lp_faqs';\r\n-\tconst META_KEY_PRICE_PREFIX             = '_lp_price_prefix';\r\n-\tconst META_KEY_PRICE_SUFFIX             = '_lp_price_suffix';\r\n-\tconst META_KEY_FINAL_QUIZ               = '_lp_final_quiz';\r\n-\tconst META_KEY_SAMPLE_DATA              = '_lp_sample_data';\r\n-\r\n-\t\u002F**\r\n-\t * Get the regular price of course.\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic function get_regular_price(): float {\r\n-\t\t\u002F\u002F Regular price\r\n-\t\t$regular_price = $this->get_meta_value_by_key( self::META_KEY_PRICE, '' ); \u002F\u002F For LP version \u003C 1.4.1.2\r\n-\t\tif ( metadata_exists( 'post', $this->ID, self::META_KEY_REGULAR_PRICE ) ) {\r\n-\t\t\t$regular_price = $this->get_meta_value_by_key( self::META_KEY_REGULAR_PRICE, '' );\r\n-\t\t}\r\n-\r\n-\t\t$regular_price = floatval( $regular_price );\r\n-\r\n-\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fregular-price', $regular_price, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the sale price of course. Check if sale price is set\r\n-\t * and the dates are valid.\r\n-\t *\r\n-\t * @return string|float\r\n-\t *\u002F\r\n-\tpublic function get_sale_price() {\r\n-\t\t$sale_price_value = $this->get_meta_value_by_key( self::META_KEY_SALE_PRICE, '' );\r\n-\r\n-\t\tif ( '' !== $sale_price_value ) {\r\n-\t\t\treturn floatval( $sale_price_value );\r\n-\t\t}\r\n-\r\n-\t\treturn $sale_price_value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post course by ID\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t *\u002F\r\n-\tpublic static function find( int $post_id, bool $check_cache = false ) {\r\n-\t\t$filter_post     = new LP_Course_Filter();\r\n-\t\t$filter_post->ID = $post_id;\r\n-\r\n-\t\treturn self::get_item_model_from_db( $filter_post );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return CourseModel|null\r\n-\t *\u002F\r\n-\tpublic function get_course_model(): ?CourseModel {\r\n-\t\treturn CourseModel::find( $this->get_id(), true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add section to course\r\n-\t *\r\n-\t * @param array $data [ 'section_name' => '', 'section_description' => '' ]\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function add_section( array $data ): CourseSectionModel {\r\n-\t\t$course_id    = $this->get_id();\r\n-\t\t$section_name = trim( $data['section_name'] ?? '' );\r\n-\t\tif ( empty( $section_name ) ) {\r\n-\t\t\tthrow new Exception( __( 'Section title is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$section_description = LP_Helper::sanitize_params_submitted( $data['section_description'] ?? '', 'html' );\r\n-\r\n-\t\t\u002F\u002F Get max section order\r\n-\t\t$max_order = CourseSectionDB::getInstance()->get_last_number_order( $course_id );\r\n-\r\n-\t\t$sectionNew                      = new CourseSectionModel();\r\n-\t\t$sectionNew->section_name        = $section_name;\r\n-\t\t$sectionNew->section_description = $section_description;\r\n-\t\t$sectionNew->section_course_id   = $course_id;\r\n-\t\t$sectionNew->section_order       = $max_order + 1;\r\n-\t\t$sectionNew->save();\r\n-\r\n-\t\treturn $sectionNew;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update section\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since  4.3.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function update_section( CourseSectionModel $courseSectionModel, array $data ) {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( $key !== 'section_id' && property_exists( $courseSectionModel, $key ) ) {\r\n-\t\t\t\t$courseSectionModel->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseSectionModel->save();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update sections position\r\n-\t * new_position => list of section id by order\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.3.0\r\n-\t *\u002F\r\n-\tpublic function update_sections_position( array $data ) {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\tif ( ! $this->check_capabilities_update() ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to update course sections', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$new_position = $data['new_position'] ?? [];\r\n-\t\tif ( ! is_array( $new_position ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid section position', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$course_id   = $this->get_id();\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tCourseSectionDB::getInstance()->update_sections_position( $new_position, $course_id );\r\n-\r\n-\t\t$courseModel->sections_items = null;\r\n-\t\t$courseModel->save();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update items position in curriculum, can change section of item.\r\n-\t *\r\n-\t * @param array $data [ items_position, item_id_change, section_id_new_of_item, section_id_old_of_item ]\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_items_position( array $data ) {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\tif ( ! $this->check_capabilities_update() ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to update course items position', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\r\n-\t\t$items_position         = $data['items_position'] ?? [];\r\n-\t\t$item_id_change         = $data['item_id_change'] ?? 0;\r\n-\t\t$section_id_new_of_item = $data['section_id_new_of_item'] ?? 0;\r\n-\t\t$section_id_old_of_item = $data['section_id_old_of_item'] ?? 0;\r\n-\r\n-\t\tif ( ! is_array( $items_position ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid item position', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find item of section id old\r\n-\t\t$filter                  = new CourseSectionItemsFilter();\r\n-\t\t$filter->section_id      = $section_id_old_of_item;\r\n-\t\t$filter->item_id         = $item_id_change;\r\n-\t\t$filter->run_query_count = false;\r\n-\r\n-\t\t$courseSectionItemModel = CourseSectionItemModel::get_item_model_from_db( $filter );\r\n-\t\tif ( ! $courseSectionItemModel ) {\r\n-\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Update section id of item\r\n-\t\t$courseSectionItemModel->section_id        = $section_id_new_of_item;\r\n-\t\t$courseSectionItemModel->section_course_id = $this->get_id();\r\n-\t\t$courseSectionItemModel->save();\r\n-\r\n-\t\t\u002F\u002F For each section to find item then update section id of item and position of item in the new section\r\n-\t\t$sections_items = $courseModel->get_section_items();\r\n-\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t$section_id = $section_items->section_id ?? 0;\r\n-\r\n-\t\t\tif ( $section_id != $section_id_new_of_item ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Update position of item in section\r\n-\t\t\tCourseSectionItemsDB::getInstance()->update_items_position( $items_position, $section_id_new_of_item );\r\n-\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$courseModel->sections_items = null;\r\n-\t}\r\n-\r\n-\tpublic function check_capabilities_create(): bool {\r\n-\t\treturn current_user_can( 'edit_' . $this->post_type . 's' );\r\n-\t}\r\n-\r\n-\tpublic function check_capabilities_update(): bool {\r\n-\t\treturn current_user_can( 'edit_' . $this->post_type, $this->ID );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Course Post Model\n+ * To replace class LP_Course old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.6.9\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\n+use LearnPress\\Databases\\CourseSectionDB;\n+use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\n+use LP_Course_Filter;\n+\n+use LP_Helper;\n+\n+class CoursePostModel extends PostModel {\n+\t\u002F**\n+\t * @var string Post Type\n+\t *\u002F\n+\tpublic $post_type = LP_COURSE_CPT;\n+\n+\t\u002F\u002F Taxonomy\n+\tconst TAXONOMY_CATEGORY = 'course_category';\n+\tconst TAXONOMY_TAG      = 'course_tag';\n+\n+\t\u002F**\n+\t * Const meta key\n+\t *\u002F\n+\tconst META_KEY_PRICE                    = '_lp_price';\n+\tconst META_KEY_REGULAR_PRICE            = '_lp_regular_price';\n+\tconst META_KEY_SALE_PRICE               = '_lp_sale_price';\n+\tconst META_KEY_SALE_START               = '_lp_sale_start';\n+\tconst META_KEY_SALE_END                 = '_lp_sale_end';\n+\tconst META_KEY_EVALUATION_TYPE          = '_lp_course_result';\n+\tconst META_KEY_PASSING_CONDITION        = '_lp_passing_condition';\n+\tconst META_KEY_DURATION                 = '_lp_duration';\n+\tconst META_KEY_BLOCK_EXPIRE_DURATION    = '_lp_block_expire_duration';\n+\tconst META_KEY_BLOCK_FINISH             = '_lp_block_finished';\n+\tconst META_KEY_ALLOW_COURSE_REPURCHASE  = '_lp_allow_course_repurchase';\n+\tconst META_KEY_COURSE_REPURCHASE_OPTION = '_lp_course_repurchase_option';\n+\tconst META_KEY_LEVEL                    = '_lp_level';\n+\tconst META_KEY_STUDENTS                 = '_lp_students'; \u002F\u002F Fake students key\n+\tconst META_KEY_MAX_STUDENTS             = '_lp_max_students';\n+\tconst META_KEY_RETAKE_COUNT             = '_lp_retake_count';\n+\tconst META_KEY_HAS_FINISH               = '_lp_has_finish';\n+\tconst META_KEY_FEATURED                 = '_lp_featured';\n+\tconst META_KEY_FEATURED_REVIEW          = '_lp_featured_review';\n+\tconst META_KEY_EXTERNAL_LINK_BY_COURSE  = '_lp_external_link_buy_course';\n+\tconst META_KEY_IS_SALE                  = '_lp_course_is_sale';\n+\tconst META_KEY_NO_REQUIRED_ENROLL       = '_lp_no_required_enroll';\n+\tconst META_KEY_OFFLINE_COURSE           = '_lp_offline_course';\n+\tconst META_KEY_ADDRESS                  = '_lp_address';\n+\tconst META_KEY_DELIVER                  = '_lp_deliver_type';\n+\tconst META_KEY_OFFLINE_LESSON_COUNT     = '_lp_offline_lesson_count';\n+\tconst META_KEY_REQUIREMENTS             = '_lp_requirements';\n+\tconst META_KEY_TARGET                   = '_lp_target_audiences';\n+\tconst META_KEY_FEATURES                 = '_lp_key_features';\n+\tconst META_KEY_FAQS                     = '_lp_faqs';\n+\tconst META_KEY_PRICE_PREFIX             = '_lp_price_prefix';\n+\tconst META_KEY_PRICE_SUFFIX             = '_lp_price_suffix';\n+\tconst META_KEY_FINAL_QUIZ               = '_lp_final_quiz';\n+\tconst META_KEY_SAMPLE_DATA              = '_lp_sample_data';\n+\n+\t\u002F**\n+\t * Get the regular price of course.\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic function get_regular_price(): float {\n+\t\t\u002F\u002F Regular price\n+\t\t$regular_price = $this->get_meta_value_by_key( self::META_KEY_PRICE, '' ); \u002F\u002F For LP version \u003C 1.4.1.2\n+\t\tif ( metadata_exists( 'post', $this->ID, self::META_KEY_REGULAR_PRICE ) ) {\n+\t\t\t$regular_price = $this->get_meta_value_by_key( self::META_KEY_REGULAR_PRICE, '' );\n+\t\t}\n+\n+\t\t$regular_price = floatval( $regular_price );\n+\n+\t\treturn apply_filters( 'learnPress\u002Fcourse\u002Fregular-price', $regular_price, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get the sale price of course. Check if sale price is set\n+\t * and the dates are valid.\n+\t *\n+\t * @return string|float\n+\t *\u002F\n+\tpublic function get_sale_price() {\n+\t\t$sale_price_value = $this->get_meta_value_by_key( self::META_KEY_SALE_PRICE, '' );\n+\n+\t\tif ( '' !== $sale_price_value ) {\n+\t\t\treturn floatval( $sale_price_value );\n+\t\t}\n+\n+\t\treturn $sale_price_value;\n+\t}\n+\n+\t\u002F**\n+\t * Get post course by ID\n+\t *\n+\t * @param int $post_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t *\u002F\n+\tpublic static function find( int $post_id, bool $check_cache = false ) {\n+\t\t$filter_post     = new LP_Course_Filter();\n+\t\t$filter_post->ID = $post_id;\n+\n+\t\treturn self::get_item_model_from_db( $filter_post );\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return CourseModel|null\n+\t *\u002F\n+\tpublic function get_course_model(): ?CourseModel {\n+\t\treturn CourseModel::find( $this->get_id(), true );\n+\t}\n+\n+\t\u002F**\n+\t * Add section to course\n+\t *\n+\t * @param array $data [ 'section_name' => '', 'section_description' => '' ]\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function add_section( array $data ): CourseSectionModel {\n+\t\t$course_id    = $this->get_id();\n+\t\t$section_name = trim( $data['section_name'] ?? '' );\n+\t\tif ( empty( $section_name ) ) {\n+\t\t\tthrow new Exception( __( 'Section title is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$section_description = LP_Helper::sanitize_params_submitted( $data['section_description'] ?? '', 'html' );\n+\n+\t\t\u002F\u002F Get max section order\n+\t\t$max_order = CourseSectionDB::getInstance()->get_last_number_order( $course_id );\n+\n+\t\t$sectionNew                      = new CourseSectionModel();\n+\t\t$sectionNew->section_name        = $section_name;\n+\t\t$sectionNew->section_description = $section_description;\n+\t\t$sectionNew->section_course_id   = $course_id;\n+\t\t$sectionNew->section_order       = $max_order + 1;\n+\t\t$sectionNew->save();\n+\n+\t\treturn $sectionNew;\n+\t}\n+\n+\t\u002F**\n+\t * Update section\n+\t *\n+\t * @throws Exception\n+\t * @since  4.3.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_section( CourseSectionModel $courseSectionModel, array $data ) {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( $key !== 'section_id' && property_exists( $courseSectionModel, $key ) ) {\n+\t\t\t\t$courseSectionModel->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseSectionModel->save();\n+\t}\n+\n+\t\u002F**\n+\t * Update sections position\n+\t * new_position => list of section id by order\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function update_sections_position( array $data ) {\n+\t\t\u002F\u002F Check permission\n+\t\tif ( ! $this->check_capabilities_update() ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to update course sections', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$new_position = $data['new_position'] ?? [];\n+\t\tif ( ! is_array( $new_position ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid section position', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$course_id   = $this->get_id();\n+\t\t$courseModel = $this->get_course_model();\n+\t\tif ( ! $courseModel ) {\n+\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\tCourseSectionDB::getInstance()->update_sections_position( $new_position, $course_id );\n+\n+\t\t$courseModel->sections_items = null;\n+\t\t$courseModel->save();\n+\t}\n+\n+\t\u002F**\n+\t * Update items position in curriculum, can change section of item.\n+\t *\n+\t * @param array $data [ items_position, item_id_change, section_id_new_of_item, section_id_old_of_item ]\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_items_position( array $data ) {\n+\t\t\u002F\u002F Check permission\n+\t\tif ( ! $this->check_capabilities_update() ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to update course items position', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$courseModel = $this->get_course_model();\n+\n+\t\t$items_position         = $data['items_position'] ?? [];\n+\t\t$item_id_change         = $data['item_id_change'] ?? 0;\n+\t\t$section_id_new_of_item = $data['section_id_new_of_item'] ?? 0;\n+\t\t$section_id_old_of_item = $data['section_id_old_of_item'] ?? 0;\n+\n+\t\tif ( ! is_array( $items_position ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid item position', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Find item of section id old\n+\t\t$filter                  = new CourseSectionItemsFilter();\n+\t\t$filter->section_id      = $section_id_old_of_item;\n+\t\t$filter->item_id         = $item_id_change;\n+\t\t$filter->run_query_count = false;\n+\n+\t\t$courseSectionItemModel = CourseSectionItemModel::get_item_model_from_db( $filter );\n+\t\tif ( ! $courseSectionItemModel ) {\n+\t\t\tthrow new Exception( __( 'Item not found in section', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Update section id of item\n+\t\t$courseSectionItemModel->section_id        = $section_id_new_of_item;\n+\t\t$courseSectionItemModel->section_course_id = $this->get_id();\n+\t\t$courseSectionItemModel->save();\n+\n+\t\t\u002F\u002F For each section to find item then update section id of item and position of item in the new section\n+\t\t$sections_items = $courseModel->get_section_items();\n+\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t$section_id = $section_items->section_id ?? 0;\n+\n+\t\t\tif ( $section_id != $section_id_new_of_item ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Update position of item in section\n+\t\t\tCourseSectionItemsDB::getInstance()->update_items_position( $items_position, $section_id_new_of_item );\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$courseModel->sections_items = null;\n+\t}\n+\n+\tpublic function check_capabilities_create(): bool {\n+\t\treturn current_user_can( 'edit_' . $this->post_type . 's' );\n+\t}\n+\n+\tpublic function check_capabilities_update(): bool {\n+\t\treturn current_user_can( 'edit_' . $this->post_type, $this->ID );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseSectionItemModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseSectionItemModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseSectionItemModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseSectionItemModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,317 +1,317 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\r\n-use LearnPress\\Databases\\CourseSectionDB;\r\n-use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\r\n-use LearnPress\\Filters\\CourseSectionFilter;\r\n-use LearnPress\\Models\\CourseSectionModel;\r\n-use LP_Background_Single_Course;\r\n-use LP_Cache;\r\n-use LP_Debug;\r\n-use LP_Section_DB;\r\n-use LP_Section_Filter;\r\n-use LP_Section_Items_DB;\r\n-use LP_Section_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseSectionModel\r\n- *\r\n- * Handle all method about section course\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.8.6\r\n- *\u002F\r\n-class CourseSectionItemModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprivate $section_item_id = 0;\r\n-\t\u002F**\r\n-\t * Foreign key, section_id\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_id = '';\r\n-\t\u002F**\r\n-\t * Foreign key, item ID (lesson, quiz, etc.)\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_id = 0;\r\n-\t\u002F**\r\n-\t * Order of the item\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $item_order = 0;\r\n-\t\u002F**\r\n-\t * Type of the item\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $item_type = '';\r\n-\t\u002F**\r\n-\t * @var int course id\r\n-\t *\u002F\r\n-\tpublic $section_course_id = 0;\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to CourseSectionModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return CourseSectionItemModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): CourseSectionItemModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return CourseModel|false\r\n-\t *\u002F\r\n-\tpublic function get_course_model(): ?CourseModel {\r\n-\t\treturn CourseModel::find( $this->section_course_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course post model\r\n-\t *\r\n-\t * @return false|CoursePostModel\r\n-\t *\u002F\r\n-\tpublic function get_course_post_model(): ?CoursePostModel {\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\t\tif ( $courseModel ) {\r\n-\t\t\treturn new CoursePostModel( $courseModel );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section item id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_section_item_id(): int {\r\n-\t\treturn $this->section_item_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section item by section id and item id.\r\n-\t *\r\n-\t * @return false|CourseSectionItemModel\r\n-\t *\u002F\r\n-\tpublic static function find( int $section_id, $item_id, $check_cache = true ) {\r\n-\t\t$filter             = new CourseSectionItemsFilter();\r\n-\t\t$filter->section_id = $section_id;\r\n-\t\t$filter->item_id    = $item_id;\r\n-\t\t$key_cache          = \"courseSectionItem\u002Ffind\u002F{$section_id}\u002F{$item_id}\";\r\n-\t\t$lpSectionCache     = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\r\n-\t\t\tif ( $courseSectionModel instanceof CourseSectionItemModel ) {\r\n-\t\t\t\treturn $courseSectionModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $courseSectionModel instanceof CourseSectionItemModel ) {\r\n-\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $courseSectionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get data from database.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return CourseSectionItemModel.\r\n-\t *\r\n-\t * @param CourseSectionItemsFilter|LP_Section_Items_Filter $filter\r\n-\t *\r\n-\t * @return CourseSectionItemModel|false|static\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_item_model_from_db( $filter ) {\r\n-\t\t$lp_section_db = CourseSectionItemsDB::getInstance();\r\n-\t\t$sectionModel  = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_section_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_section_db->get_section_items( $filter );\r\n-\t\t\t$section_rs       = $lp_section_db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\t\tif ( $section_rs instanceof stdClass ) {\r\n-\t\t\t\t$sectionModel = new static( $section_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $sectionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course ids from item id.\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t * @param string $item_type\r\n-\t *\r\n-\t * @return array [ stdClass(section_course_id) ]\r\n-\t * @version 1.0.0\r\n-\t * @since 4.3.3\r\n-\t *\u002F\r\n-\tpublic static function get_courses_from_item_id( int $item_id, string $item_type ): array {\r\n-\t\t$lp_section_db = CourseSectionItemsDB::getInstance();\r\n-\t\t$course_ids    = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter                      = new CourseSectionItemsFilter();\r\n-\t\t\t$filter->item_id             = $item_id;\r\n-\t\t\t$filter->item_type           = $item_type;\r\n-\t\t\t$filter->run_query_count     = false;\r\n-\t\t\t$filter->only_fields         = [ CourseSectionItemsFilter::COL_SECTION_ID ];\r\n-\t\t\t$filter->return_string_query = true;\r\n-\r\n-\t\t\t$query_get_list_section = $lp_section_db->get_section_items( $filter );\r\n-\r\n-\t\t\t\u002F\u002F Find course ids from section ids\r\n-\t\t\t$courseSectionDB                = CourseSectionDB::getInstance();\r\n-\t\t\t$filterSection                  = new CourseSectionFilter();\r\n-\t\t\t$filterSection->run_query_count = false;\r\n-\t\t\t$filterSection->where[]         = sprintf( 'AND section_id IN (%s)', $query_get_list_section );\r\n-\t\t\t$filterSection->only_fields     = [ CourseSectionFilter::COL_SECTION_COURSE_ID ];\r\n-\t\t\t$course_ids                     = $courseSectionDB->get_sections( $filterSection );\r\n-\r\n-\t\t\tif ( ! is_array( $course_ids ) ) {\r\n-\t\t\t\t$course_ids = [];\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $course_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save course data to table learnpress_section_items.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function save(): CourseSectionItemModel {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$this->check_permission();\r\n-\r\n-\t\t$lp_section_items_db = LP_Section_items_DB::getInstance();\r\n-\r\n-\t\t$data = get_object_vars( $this );\r\n-\r\n-\t\tif ( $data['section_item_id'] === 0 ) { \u002F\u002F Insert data.\r\n-\t\t\t$section_item_id       = $lp_section_items_db->insert_data( $data );\r\n-\t\t\t$this->section_item_id = $section_item_id;\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$lp_section_items_db->update_data( $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$this->check_permission();\r\n-\r\n-\t\t$lp_section_items_db = LP_Section_Items_DB::getInstance();\r\n-\t\t$filter              = new LP_Section_Items_Filter();\r\n-\t\t$filter->where[]     = $lp_section_items_db->wpdb->prepare( 'AND section_item_id = %d', $this->section_item_id );\r\n-\t\t$filter->collection  = $lp_section_items_db->tb_lp_section_items;\r\n-\t\t$lp_section_items_db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission to handle\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_permission() {\r\n-\t\t$coursePostModel = $this->get_course_post_model();\r\n-\t\tif ( ! $coursePostModel || ! $coursePostModel->check_capabilities_update() ) {\r\n-\t\t\tthrow new Exception( esc_html__( 'You do not have permission to delete section item.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t\u002F\u002F Call background multiple times will not cause any problem.\r\n-\t\t\u002F*$bg = LP_Background_Single_Course::instance();\r\n-\t\t$bg->data(\r\n-\t\t\tarray(\r\n-\t\t\t\t'handle_name' => 'save_post',\r\n-\t\t\t\t'course_id'   => $this->section_course_id,\r\n-\t\t\t\t'data'        => [],\r\n-\t\t\t)\r\n-\t\t)->dispatch();*\u002F\r\n-\t\t$courseModel                 = CourseModel::find( $this->section_course_id, true );\r\n-\t\t$courseModel->sections_items = null;\r\n-\t\t$courseModel->total_items    = null;\r\n-\t\t$courseModel->save();\r\n-\r\n-\t\t$key_cache       = \"courseSectionItem\u002Ffind\u002F{$this->section_id}\u002F{$this->item_id}\";\r\n-\t\t$lp_course_cache = new LP_Cache();\r\n-\t\t$lp_course_cache->clear( $key_cache );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress\\Databases\\Course\\CourseSectionItemsDB;\n+use LearnPress\\Databases\\CourseSectionDB;\n+use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\n+use LearnPress\\Filters\\CourseSectionFilter;\n+use LearnPress\\Models\\CourseSectionModel;\n+use LP_Background_Single_Course;\n+use LP_Cache;\n+use LP_Debug;\n+use LP_Section_DB;\n+use LP_Section_Filter;\n+use LP_Section_Items_DB;\n+use LP_Section_Items_Filter;\n+use stdClass;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseSectionModel\n+ *\n+ * Handle all method about section course\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.8.6\n+ *\u002F\n+class CourseSectionItemModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tprivate $section_item_id = 0;\n+\t\u002F**\n+\t * Foreign key, section_id\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_id = '';\n+\t\u002F**\n+\t * Foreign key, item ID (lesson, quiz, etc.)\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_id = 0;\n+\t\u002F**\n+\t * Order of the item\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $item_order = 0;\n+\t\u002F**\n+\t * Type of the item\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $item_type = '';\n+\t\u002F**\n+\t * @var int course id\n+\t *\u002F\n+\tpublic $section_course_id = 0;\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to CourseSectionModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return CourseSectionItemModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): CourseSectionItemModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return CourseModel|false\n+\t *\u002F\n+\tpublic function get_course_model(): ?CourseModel {\n+\t\treturn CourseModel::find( $this->section_course_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get course post model\n+\t *\n+\t * @return false|CoursePostModel\n+\t *\u002F\n+\tpublic function get_course_post_model(): ?CoursePostModel {\n+\t\t$courseModel = $this->get_course_model();\n+\t\tif ( $courseModel ) {\n+\t\t\treturn new CoursePostModel( $courseModel );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get section item id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_section_item_id(): int {\n+\t\treturn $this->section_item_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get section item by section id and item id.\n+\t *\n+\t * @return false|CourseSectionItemModel\n+\t *\u002F\n+\tpublic static function find( int $section_id, $item_id, $check_cache = true ) {\n+\t\t$filter             = new CourseSectionItemsFilter();\n+\t\t$filter->section_id = $section_id;\n+\t\t$filter->item_id    = $item_id;\n+\t\t$key_cache          = \"courseSectionItem\u002Ffind\u002F{$section_id}\u002F{$item_id}\";\n+\t\t$lpSectionCache     = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\n+\t\t\tif ( $courseSectionModel instanceof CourseSectionItemModel ) {\n+\t\t\t\treturn $courseSectionModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $courseSectionModel instanceof CourseSectionItemModel ) {\n+\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\n+\t\t}\n+\n+\t\treturn $courseSectionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get data from database.\n+\t * If not exists, return false.\n+\t * If exists, return CourseSectionItemModel.\n+\t *\n+\t * @param CourseSectionItemsFilter|LP_Section_Items_Filter $filter\n+\t *\n+\t * @return CourseSectionItemModel|false|static\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_item_model_from_db( $filter ) {\n+\t\t$lp_section_db = CourseSectionItemsDB::getInstance();\n+\t\t$sectionModel  = false;\n+\n+\t\ttry {\n+\t\t\t$lp_section_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_section_db->get_section_items( $filter );\n+\t\t\t$section_rs       = $lp_section_db->wpdb->get_row( $query_single_row );\n+\n+\t\t\tif ( $section_rs instanceof stdClass ) {\n+\t\t\t\t$sectionModel = new static( $section_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $sectionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get course ids from item id.\n+\t *\n+\t * @param int $item_id\n+\t * @param string $item_type\n+\t *\n+\t * @return array [ stdClass(section_course_id) ]\n+\t * @version 1.0.0\n+\t * @since 4.3.3\n+\t *\u002F\n+\tpublic static function get_courses_from_item_id( int $item_id, string $item_type ): array {\n+\t\t$lp_section_db = CourseSectionItemsDB::getInstance();\n+\t\t$course_ids    = [];\n+\n+\t\ttry {\n+\t\t\t$filter                      = new CourseSectionItemsFilter();\n+\t\t\t$filter->item_id             = $item_id;\n+\t\t\t$filter->item_type           = $item_type;\n+\t\t\t$filter->run_query_count     = false;\n+\t\t\t$filter->only_fields         = [ CourseSectionItemsFilter::COL_SECTION_ID ];\n+\t\t\t$filter->return_string_query = true;\n+\n+\t\t\t$query_get_list_section = $lp_section_db->get_section_items( $filter );\n+\n+\t\t\t\u002F\u002F Find course ids from section ids\n+\t\t\t$courseSectionDB                = CourseSectionDB::getInstance();\n+\t\t\t$filterSection                  = new CourseSectionFilter();\n+\t\t\t$filterSection->run_query_count = false;\n+\t\t\t$filterSection->where[]         = sprintf( 'AND section_id IN (%s)', $query_get_list_section );\n+\t\t\t$filterSection->only_fields     = [ CourseSectionFilter::COL_SECTION_COURSE_ID ];\n+\t\t\t$course_ids                     = $courseSectionDB->get_sections( $filterSection );\n+\n+\t\t\tif ( ! is_array( $course_ids ) ) {\n+\t\t\t\t$course_ids = [];\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $course_ids;\n+\t}\n+\n+\t\u002F**\n+\t * Save course data to table learnpress_section_items.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function save(): CourseSectionItemModel {\n+\t\t\u002F\u002F Check permission\n+\t\t$this->check_permission();\n+\n+\t\t$lp_section_items_db = LP_Section_items_DB::getInstance();\n+\n+\t\t$data = get_object_vars( $this );\n+\n+\t\tif ( $data['section_item_id'] === 0 ) { \u002F\u002F Insert data.\n+\t\t\t$section_item_id       = $lp_section_items_db->insert_data( $data );\n+\t\t\t$this->section_item_id = $section_item_id;\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$lp_section_items_db->update_data( $data );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t\u002F\u002F Check permission\n+\t\t$this->check_permission();\n+\n+\t\t$lp_section_items_db = LP_Section_Items_DB::getInstance();\n+\t\t$filter              = new LP_Section_Items_Filter();\n+\t\t$filter->where[]     = $lp_section_items_db->wpdb->prepare( 'AND section_item_id = %d', $this->section_item_id );\n+\t\t$filter->collection  = $lp_section_items_db->tb_lp_section_items;\n+\t\t$lp_section_items_db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Check permission to handle\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_permission() {\n+\t\t$coursePostModel = $this->get_course_post_model();\n+\t\tif ( ! $coursePostModel || ! $coursePostModel->check_capabilities_update() ) {\n+\t\t\tthrow new Exception( esc_html__( 'You do not have permission to delete section item.', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t\u002F\u002F Call background multiple times will not cause any problem.\n+\t\t\u002F*$bg = LP_Background_Single_Course::instance();\n+\t\t$bg->data(\n+\t\t\tarray(\n+\t\t\t\t'handle_name' => 'save_post',\n+\t\t\t\t'course_id'   => $this->section_course_id,\n+\t\t\t\t'data'        => [],\n+\t\t\t)\n+\t\t)->dispatch();*\u002F\n+\t\t$courseModel                 = CourseModel::find( $this->section_course_id, true );\n+\t\t$courseModel->sections_items = null;\n+\t\t$courseModel->total_items    = null;\n+\t\t$courseModel->save();\n+\n+\t\t$key_cache       = \"courseSectionItem\u002Ffind\u002F{$this->section_id}\u002F{$this->item_id}\";\n+\t\t$lp_course_cache = new LP_Cache();\n+\t\t$lp_course_cache->clear( $key_cache );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseSectionModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseSectionModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourseSectionModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourseSectionModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,448 +1,448 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\CourseSectionDB;\r\n-use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\r\n-use LearnPress\\Filters\\CourseSectionFilter;\r\n-use LP_Background_Single_Course;\r\n-use LP_Cache;\r\n-use LP_Database;\r\n-use LP_Helper;\r\n-use LP_Section_DB;\r\n-use LP_Section_Filter;\r\n-use LP_Section_Items_DB;\r\n-use LP_Section_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class CourseSectionModel\r\n- *\r\n- * Handle all method about section course\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.8.6\r\n- *\u002F\r\n-class CourseSectionModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_id = 0;\r\n-\t\u002F**\r\n-\t * Title of the section\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_name = '';\r\n-\t\u002F**\r\n-\t * Foreign key, Course ID\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_course_id = 0;\r\n-\t\u002F**\r\n-\t * Order of the section\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $section_order = 0;\r\n-\t\u002F**\r\n-\t * Description of the section\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $section_description = '';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to CourseSectionModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return CourseSectionModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): CourseSectionModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_section_id(): int {\r\n-\t\treturn $this->section_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\treturn CourseModel::find( $this->section_course_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course post model\r\n-\t *\r\n-\t * @return false|CoursePostModel\r\n-\t * @version 1.0.0\r\n-\t * @since 4.3.2\r\n-\t *\u002F\r\n-\tpublic function get_course_post_model() {\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\t\tif ( $courseModel instanceof CourseModel ) {\r\n-\t\t\treturn new CoursePostModel( $courseModel );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section by course id\r\n-\t *\r\n-\t * @return false|CourseSectionModel\r\n-\t *\u002F\r\n-\tpublic static function find( int $section_id, int $course_id, $check_cache = true ) {\r\n-\t\t$filter                    = new LP_Section_Filter();\r\n-\t\t$filter->section_id        = $section_id;\r\n-\t\t$filter->section_course_id = $course_id;\r\n-\t\t$key_cache                 = \"courseSection\u002Ffind\u002F{$section_id}\u002F{$course_id}\";\r\n-\t\t$lpSectionCache            = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\r\n-\t\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\r\n-\t\t\t\treturn $courseSectionModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\r\n-\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $courseSectionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section by course id\r\n-\t *\r\n-\t * @return false|CourseSectionModel\r\n-\t *\u002F\r\n-\tpublic static function find_by_course( int $course_id, $check_cache = true ) {\r\n-\t\t$filter                    = new LP_Section_Filter();\r\n-\t\t$filter->section_course_id = $course_id;\r\n-\t\t$key_cache                 = \"courseSection\u002Ffind\u002Fcourse\u002F{$course_id}\";\r\n-\t\t$lpSectionCache            = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\r\n-\t\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\r\n-\t\t\t\treturn $courseSectionModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\r\n-\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $courseSectionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post from database.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return CourseSectionModel.\r\n-\t *\r\n-\t * @param LP_Section_Filter $filter\r\n-\t *\r\n-\t * @return CourseSectionModel|false|static\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_item_model_from_db( LP_Section_Filter $filter ) {\r\n-\t\t$lp_section_db = LP_Section_DB::getInstance();\r\n-\t\t$sectionModel  = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_section_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_section_db->get_sections( $filter );\r\n-\t\t\t$section_rs       = $lp_section_db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\t\tif ( $section_rs instanceof stdClass ) {\r\n-\t\t\t\t$sectionModel = new static( $section_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $sectionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create item and add to section.\r\n-\t *\r\n-\t * @param array $data [ 'item_type' => '', 'item_title' => '', 'item_content' => '' ]\r\n-\t *\r\n-\t * @return CourseSectionItemModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function create_item_and_add( array $data ): CourseSectionItemModel {\r\n-\t\t$item_type    = trim( $data['item_type'] ?? '' );\r\n-\t\t$item_title   = $data['item_title'] ?? '';\r\n-\t\t$item_content = $data['item_content'] ?? '';\r\n-\t\t$courseModel  = $this->get_course_model();\r\n-\t\t$section_id   = $this->get_section_id();\r\n-\r\n-\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$item_types = CourseModel::item_types_support();\r\n-\t\tif ( ! in_array( $item_type, $item_types ) ) {\r\n-\t\t\tthrow new Exception( __( 'Item type invalid', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create new item\r\n-\t\tif ( empty( $item_title ) ) {\r\n-\t\t\tthrow new Exception( __( 'Item title is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create item\r\n-\t\t$itemModelNew               = new PostModel();\r\n-\t\t$itemModelNew->post_type    = $item_type;\r\n-\t\t$itemModelNew->post_title   = $item_title;\r\n-\t\t$itemModelNew->post_content = $item_content;\r\n-\t\t$itemModelNew->post_status  = 'publish';\r\n-\t\t$itemModelNew->post_author  = get_current_user_id();\r\n-\t\t$itemModelNew->save();\r\n-\t\t$item_id = $itemModelNew->get_id();\r\n-\r\n-\t\t\u002F*$post_args = [\r\n-\t\t\t'post_author' => get_current_user_id(),\r\n-\t\t\t'post_title'  => $item_title,\r\n-\t\t\t'post_type'   => $item_type,\r\n-\t\t\t'post_status' => 'publish',\r\n-\t\t];\r\n-\t\t$item_id   = wp_insert_post( $post_args );\r\n-\t\tif ( is_wp_error( $item_id ) ) {\r\n-\t\t\tthrow new Exception( $item_id->get_error_message() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F\u002F Get max item order\r\n-\t\t$max_order = LP_Section_Items_DB::getInstance()->get_last_number_order( $section_id );\r\n-\r\n-\t\t\u002F\u002F Add item to section\r\n-\t\t$courseSectionItemModel                    = new CourseSectionItemModel();\r\n-\t\t$courseSectionItemModel->item_id           = $item_id;\r\n-\t\t$courseSectionItemModel->item_type         = $item_type;\r\n-\t\t$courseSectionItemModel->section_id        = $section_id;\r\n-\t\t$courseSectionItemModel->item_order        = $max_order + 1;\r\n-\t\t$courseSectionItemModel->section_course_id = $this->section_course_id;\r\n-\t\t$courseSectionItemModel->save();\r\n-\r\n-\t\treturn $courseSectionItemModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add items created to section.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function add_items( array $data ): array {\r\n-\t\t$courseSectionItems = [];\r\n-\t\t$courseModel        = $this->get_course_model();\r\n-\t\t$section_id         = $this->get_section_id();\r\n-\r\n-\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$items = $data['items'] ?? [];\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\tif ( ! key_exists( 'id', $item ) || ! key_exists( 'type', $item ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Keys data invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_id   = intval( $item['id'] ?? 0 );\r\n-\t\t\t$item_type = $item['type'] ?? '';\r\n-\t\t\tif ( ! $item_id ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if item already exists in course.\r\n-\t\t\t$lp_db                  = LP_Database::getInstance();\r\n-\t\t\t$filter                 = new CourseSectionItemsFilter();\r\n-\t\t\t$filter->item_id        = $item_id;\r\n-\t\t\t$filter->item_type      = $item_type;\r\n-\t\t\t$filter->join[]         = 'LEFT JOIN ' . $lp_db->tb_lp_sections . ' AS cs ON si.section_id = cs.section_id';\r\n-\t\t\t$filter->where[]        = $lp_db->wpdb->prepare( 'AND cs.section_course_id = %d', $this->section_course_id );\r\n-\t\t\t$courseSectionItemModel = CourseSectionItemModel::get_item_model_from_db( $filter );\r\n-\t\t\tif ( $courseSectionItemModel instanceof CourseSectionItemModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Item already exists in this course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get max item order\r\n-\t\t\t$max_order = LP_Section_Items_DB::getInstance()->get_last_number_order( $section_id );\r\n-\r\n-\t\t\t\u002F\u002F Add item to section\r\n-\t\t\t$courseSectionItemModel                    = new CourseSectionItemModel();\r\n-\t\t\t$courseSectionItemModel->item_id           = $item_id;\r\n-\t\t\t$courseSectionItemModel->item_type         = $item_type;\r\n-\t\t\t$courseSectionItemModel->item_order        = ++ $max_order;\r\n-\t\t\t$courseSectionItemModel->section_id        = $section_id;\r\n-\t\t\t$courseSectionItemModel->section_course_id = $this->section_course_id;\r\n-\t\t\t$courseSectionItemModel->save();\r\n-\r\n-\t\t\t$courseSectionItems[] = $courseSectionItemModel;\r\n-\t\t}\r\n-\r\n-\t\treturn $courseSectionItems;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save course data to table learnpress_sections.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function save(): CourseSectionModel {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$this->check_permission();\r\n-\r\n-\t\t$courseSectionDB = CourseSectionDB::getInstance();\r\n-\r\n-\t\t$data = get_object_vars( $this );\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'data'               => $data,\r\n-\t\t\t'filter'             => new CourseSectionFilter(),\r\n-\t\t\t'table_name'         => $courseSectionDB->tb_lp_sections,\r\n-\t\t\t'key_auto_increment' => 'section_id',\r\n-\t\t];\r\n-\r\n-\t\tif ( $data['section_id'] === 0 ) { \u002F\u002F Insert data.\r\n-\t\t\t$section_id       = $courseSectionDB->insert_data( $args );\r\n-\t\t\t$this->section_id = $section_id;\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$args['where_key'] = 'section_id';\r\n-\t\t\t$courseSectionDB->update_data( $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$this->check_permission();\r\n-\r\n-\t\t\u002F\u002F Unassign items of section\r\n-\t\t$lp_section_items_db = LP_Section_Items_DB::getInstance();\r\n-\t\t$filter              = new LP_Section_Items_Filter();\r\n-\t\t$filter->where[]     = $lp_section_items_db->wpdb->prepare( 'AND section_id = %d', $this->section_id );\r\n-\t\t$filter->collection  = $lp_section_items_db->tb_lp_section_items;\r\n-\t\t$lp_section_items_db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Delete section\r\n-\t\t$lp_section_db      = LP_Section_DB::getInstance();\r\n-\t\t$filter             = new LP_Section_Filter();\r\n-\t\t$filter->where[]    = $lp_section_db->wpdb->prepare( 'AND section_id = %d', $this->section_id );\r\n-\t\t$filter->collection = $lp_section_db->tb_lp_sections;\r\n-\t\t$lp_section_db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission to handle\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_permission() {\r\n-\t\t$coursePostModel = $this->get_course_post_model();\r\n-\t\tif ( ! $coursePostModel || ! $coursePostModel->check_capabilities_update() ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to delete section', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t\u002F\u002F Call background multiple times will not cause any problem.\r\n-\t\t\u002F*$bg = LP_Background_Single_Course::instance();\r\n-\t\t$bg->data(\r\n-\t\t\tarray(\r\n-\t\t\t\t'handle_name' => 'save_post',\r\n-\t\t\t\t'course_id'   => $this->section_course_id,\r\n-\t\t\t\t'data'        => [],\r\n-\t\t\t)\r\n-\t\t)->dispatch();*\u002F\r\n-\t\t$courseModel                 = CourseModel::find( $this->section_course_id, true );\r\n-\t\t$courseModel->sections_items = null;\r\n-\t\t$courseModel->save();\r\n-\r\n-\t\t$key_cache        = \"courseSection\u002Ffind\u002F{$this->get_section_id()}\u002F{$this->section_course_id}\";\r\n-\t\t$key_cache_course = \"courseSection\u002Ffind\u002Fcourse\u002F{$this->section_course_id}\";\r\n-\t\t$lp_course_cache  = new LP_Cache();\r\n-\t\t$lp_course_cache->clear( $key_cache );\r\n-\t\t$lp_course_cache->clear( $key_cache_course );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress\\Databases\\CourseSectionDB;\n+use LearnPress\\Filters\\Course\\CourseSectionItemsFilter;\n+use LearnPress\\Filters\\CourseSectionFilter;\n+use LP_Background_Single_Course;\n+use LP_Cache;\n+use LP_Database;\n+use LP_Helper;\n+use LP_Section_DB;\n+use LP_Section_Filter;\n+use LP_Section_Items_DB;\n+use LP_Section_Items_Filter;\n+use stdClass;\n+use Throwable;\n+\n+\u002F**\n+ * Class CourseSectionModel\n+ *\n+ * Handle all method about section course\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.8.6\n+ *\u002F\n+class CourseSectionModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_id = 0;\n+\t\u002F**\n+\t * Title of the section\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_name = '';\n+\t\u002F**\n+\t * Foreign key, Course ID\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_course_id = 0;\n+\t\u002F**\n+\t * Order of the section\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $section_order = 0;\n+\t\u002F**\n+\t * Description of the section\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $section_description = '';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to CourseSectionModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return CourseSectionModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): CourseSectionModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get section id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_section_id(): int {\n+\t\treturn $this->section_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return false|CourseModel\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\treturn CourseModel::find( $this->section_course_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get course post model\n+\t *\n+\t * @return false|CoursePostModel\n+\t * @version 1.0.0\n+\t * @since 4.3.2\n+\t *\u002F\n+\tpublic function get_course_post_model() {\n+\t\t$courseModel = $this->get_course_model();\n+\t\tif ( $courseModel instanceof CourseModel ) {\n+\t\t\treturn new CoursePostModel( $courseModel );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get section by course id\n+\t *\n+\t * @return false|CourseSectionModel\n+\t *\u002F\n+\tpublic static function find( int $section_id, int $course_id, $check_cache = true ) {\n+\t\t$filter                    = new LP_Section_Filter();\n+\t\t$filter->section_id        = $section_id;\n+\t\t$filter->section_course_id = $course_id;\n+\t\t$key_cache                 = \"courseSection\u002Ffind\u002F{$section_id}\u002F{$course_id}\";\n+\t\t$lpSectionCache            = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\n+\t\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\n+\t\t\t\treturn $courseSectionModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\n+\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\n+\t\t}\n+\n+\t\treturn $courseSectionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get section by course id\n+\t *\n+\t * @return false|CourseSectionModel\n+\t *\u002F\n+\tpublic static function find_by_course( int $course_id, $check_cache = true ) {\n+\t\t$filter                    = new LP_Section_Filter();\n+\t\t$filter->section_course_id = $course_id;\n+\t\t$key_cache                 = \"courseSection\u002Ffind\u002Fcourse\u002F{$course_id}\";\n+\t\t$lpSectionCache            = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$courseSectionModel = $lpSectionCache->get_cache( $key_cache );\n+\t\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\n+\t\t\t\treturn $courseSectionModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$courseSectionModel = static::get_item_model_from_db( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $courseSectionModel instanceof CourseSectionModel ) {\n+\t\t\t$lpSectionCache->set_cache( $key_cache, $courseSectionModel );\n+\t\t}\n+\n+\t\treturn $courseSectionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get post from database.\n+\t * If not exists, return false.\n+\t * If exists, return CourseSectionModel.\n+\t *\n+\t * @param LP_Section_Filter $filter\n+\t *\n+\t * @return CourseSectionModel|false|static\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_item_model_from_db( LP_Section_Filter $filter ) {\n+\t\t$lp_section_db = LP_Section_DB::getInstance();\n+\t\t$sectionModel  = false;\n+\n+\t\ttry {\n+\t\t\t$lp_section_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_section_db->get_sections( $filter );\n+\t\t\t$section_rs       = $lp_section_db->wpdb->get_row( $query_single_row );\n+\n+\t\t\tif ( $section_rs instanceof stdClass ) {\n+\t\t\t\t$sectionModel = new static( $section_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $sectionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Create item and add to section.\n+\t *\n+\t * @param array $data [ 'item_type' => '', 'item_title' => '', 'item_content' => '' ]\n+\t *\n+\t * @return CourseSectionItemModel\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function create_item_and_add( array $data ): CourseSectionItemModel {\n+\t\t$item_type    = trim( $data['item_type'] ?? '' );\n+\t\t$item_title   = $data['item_title'] ?? '';\n+\t\t$item_content = $data['item_content'] ?? '';\n+\t\t$courseModel  = $this->get_course_model();\n+\t\t$section_id   = $this->get_section_id();\n+\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$item_types = CourseModel::item_types_support();\n+\t\tif ( ! in_array( $item_type, $item_types ) ) {\n+\t\t\tthrow new Exception( __( 'Item type invalid', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Create new item\n+\t\tif ( empty( $item_title ) ) {\n+\t\t\tthrow new Exception( __( 'Item title is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Create item\n+\t\t$itemModelNew               = new PostModel();\n+\t\t$itemModelNew->post_type    = $item_type;\n+\t\t$itemModelNew->post_title   = $item_title;\n+\t\t$itemModelNew->post_content = $item_content;\n+\t\t$itemModelNew->post_status  = 'publish';\n+\t\t$itemModelNew->post_author  = get_current_user_id();\n+\t\t$itemModelNew->save();\n+\t\t$item_id = $itemModelNew->get_id();\n+\n+\t\t\u002F*$post_args = [\n+\t\t\t'post_author' => get_current_user_id(),\n+\t\t\t'post_title'  => $item_title,\n+\t\t\t'post_type'   => $item_type,\n+\t\t\t'post_status' => 'publish',\n+\t\t];\n+\t\t$item_id   = wp_insert_post( $post_args );\n+\t\tif ( is_wp_error( $item_id ) ) {\n+\t\t\tthrow new Exception( $item_id->get_error_message() );\n+\t\t}*\u002F\n+\n+\t\t\u002F\u002F Get max item order\n+\t\t$max_order = LP_Section_Items_DB::getInstance()->get_last_number_order( $section_id );\n+\n+\t\t\u002F\u002F Add item to section\n+\t\t$courseSectionItemModel                    = new CourseSectionItemModel();\n+\t\t$courseSectionItemModel->item_id           = $item_id;\n+\t\t$courseSectionItemModel->item_type         = $item_type;\n+\t\t$courseSectionItemModel->section_id        = $section_id;\n+\t\t$courseSectionItemModel->item_order        = $max_order + 1;\n+\t\t$courseSectionItemModel->section_course_id = $this->section_course_id;\n+\t\t$courseSectionItemModel->save();\n+\n+\t\treturn $courseSectionItemModel;\n+\t}\n+\n+\t\u002F**\n+\t * Add items created to section.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function add_items( array $data ): array {\n+\t\t$courseSectionItems = [];\n+\t\t$courseModel        = $this->get_course_model();\n+\t\t$section_id         = $this->get_section_id();\n+\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$items = $data['items'] ?? [];\n+\t\tforeach ( $items as $item ) {\n+\t\t\tif ( ! key_exists( 'id', $item ) || ! key_exists( 'type', $item ) ) {\n+\t\t\t\tthrow new Exception( __( 'Keys data invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$item_id   = intval( $item['id'] ?? 0 );\n+\t\t\t$item_type = $item['type'] ?? '';\n+\t\t\tif ( ! $item_id ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if item already exists in course.\n+\t\t\t$lp_db                  = LP_Database::getInstance();\n+\t\t\t$filter                 = new CourseSectionItemsFilter();\n+\t\t\t$filter->item_id        = $item_id;\n+\t\t\t$filter->item_type      = $item_type;\n+\t\t\t$filter->join[]         = 'LEFT JOIN ' . $lp_db->tb_lp_sections . ' AS cs ON si.section_id = cs.section_id';\n+\t\t\t$filter->where[]        = $lp_db->wpdb->prepare( 'AND cs.section_course_id = %d', $this->section_course_id );\n+\t\t\t$courseSectionItemModel = CourseSectionItemModel::get_item_model_from_db( $filter );\n+\t\t\tif ( $courseSectionItemModel instanceof CourseSectionItemModel ) {\n+\t\t\t\tthrow new Exception( __( 'Item already exists in this course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get max item order\n+\t\t\t$max_order = LP_Section_Items_DB::getInstance()->get_last_number_order( $section_id );\n+\n+\t\t\t\u002F\u002F Add item to section\n+\t\t\t$courseSectionItemModel                    = new CourseSectionItemModel();\n+\t\t\t$courseSectionItemModel->item_id           = $item_id;\n+\t\t\t$courseSectionItemModel->item_type         = $item_type;\n+\t\t\t$courseSectionItemModel->item_order        = ++ $max_order;\n+\t\t\t$courseSectionItemModel->section_id        = $section_id;\n+\t\t\t$courseSectionItemModel->section_course_id = $this->section_course_id;\n+\t\t\t$courseSectionItemModel->save();\n+\n+\t\t\t$courseSectionItems[] = $courseSectionItemModel;\n+\t\t}\n+\n+\t\treturn $courseSectionItems;\n+\t}\n+\n+\t\u002F**\n+\t * Save course data to table learnpress_sections.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function save(): CourseSectionModel {\n+\t\t\u002F\u002F Check permission\n+\t\t$this->check_permission();\n+\n+\t\t$courseSectionDB = CourseSectionDB::getInstance();\n+\n+\t\t$data = get_object_vars( $this );\n+\n+\t\t$args = [\n+\t\t\t'data'               => $data,\n+\t\t\t'filter'             => new CourseSectionFilter(),\n+\t\t\t'table_name'         => $courseSectionDB->tb_lp_sections,\n+\t\t\t'key_auto_increment' => 'section_id',\n+\t\t];\n+\n+\t\tif ( $data['section_id'] === 0 ) { \u002F\u002F Insert data.\n+\t\t\t$section_id       = $courseSectionDB->insert_data( $args );\n+\t\t\t$this->section_id = $section_id;\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$args['where_key'] = 'section_id';\n+\t\t\t$courseSectionDB->update_data( $args );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t\u002F\u002F Check permission\n+\t\t$this->check_permission();\n+\n+\t\t\u002F\u002F Unassign items of section\n+\t\t$lp_section_items_db = LP_Section_Items_DB::getInstance();\n+\t\t$filter              = new LP_Section_Items_Filter();\n+\t\t$filter->where[]     = $lp_section_items_db->wpdb->prepare( 'AND section_id = %d', $this->section_id );\n+\t\t$filter->collection  = $lp_section_items_db->tb_lp_section_items;\n+\t\t$lp_section_items_db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Delete section\n+\t\t$lp_section_db      = LP_Section_DB::getInstance();\n+\t\t$filter             = new LP_Section_Filter();\n+\t\t$filter->where[]    = $lp_section_db->wpdb->prepare( 'AND section_id = %d', $this->section_id );\n+\t\t$filter->collection = $lp_section_db->tb_lp_sections;\n+\t\t$lp_section_db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Check permission to handle\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_permission() {\n+\t\t$coursePostModel = $this->get_course_post_model();\n+\t\tif ( ! $coursePostModel || ! $coursePostModel->check_capabilities_update() ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to delete section', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t\u002F\u002F Call background multiple times will not cause any problem.\n+\t\t\u002F*$bg = LP_Background_Single_Course::instance();\n+\t\t$bg->data(\n+\t\t\tarray(\n+\t\t\t\t'handle_name' => 'save_post',\n+\t\t\t\t'course_id'   => $this->section_course_id,\n+\t\t\t\t'data'        => [],\n+\t\t\t)\n+\t\t)->dispatch();*\u002F\n+\t\t$courseModel                 = CourseModel::find( $this->section_course_id, true );\n+\t\t$courseModel->sections_items = null;\n+\t\t$courseModel->save();\n+\n+\t\t$key_cache        = \"courseSection\u002Ffind\u002F{$this->get_section_id()}\u002F{$this->section_course_id}\";\n+\t\t$key_cache_course = \"courseSection\u002Ffind\u002Fcourse\u002F{$this->section_course_id}\";\n+\t\t$lp_course_cache  = new LP_Cache();\n+\t\t$lp_course_cache->clear( $key_cache );\n+\t\t$lp_course_cache->clear( $key_cache_course );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FCourses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FCourses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,496 +1,496 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Courses\r\n- *\r\n- * Handle all method about list courses\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.5.4\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use LearnPress\\Databases\\Course\\CourseJsonDB;\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LP_Cache;\r\n-use LP_Course_DB;\r\n-use LP_Course_Filter;\r\n-use LP_Courses_Cache;\r\n-use LP_Database;\r\n-use LP_Debug;\r\n-use LP_Helper;\r\n-use LP_Settings;\r\n-use Throwable;\r\n-\r\n-class Courses {\r\n-\t\u002F**\r\n-\t * Count total courses free\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function count_course_free( LP_Course_Filter $filter ): int {\r\n-\t\t\u002F\u002F Check cache\r\n-\t\t$lang      = $_REQUEST['lang'] ?? '';\r\n-\t\t$key_cache = 'count-courses-free-' . md5( json_encode( $filter ) . $lang );\r\n-\t\t$count     = LP_Cache::cache_load_first( 'get', $key_cache );\r\n-\t\tif ( false !== $count ) {\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\r\n-\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t$count            = $lp_courses_cache->get_cache( $key_cache );\r\n-\t\tif ( false !== $count ) {\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\r\n-\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\r\n-\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\t\t$count        = $lp_course_db->count_course_free( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\t$lp_courses_cache->set_cache( $key_cache, $count );\r\n-\t\t$lp_courses_cache_keys = new LP_Courses_Cache( true );\r\n-\t\t$lp_courses_cache_keys->save_cache_keys_count_courses_free( $key_cache );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\r\n-\r\n-\t\treturn (int) $count;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle params before query courses\r\n-\t *\r\n-\t * @param array $param\r\n-\t * @param LP_Course_Filter $filter\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.3\r\n-\t * @since 4.2.3.3 move from class LP_Course\r\n-\t *\u002F\r\n-\tpublic static function handle_params_for_query_courses( LP_Course_Filter &$filter, array $param = [] ) {\r\n-\t\t$filter->page       = absint( $param['paged'] ?? 1 );\r\n-\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\r\n-\r\n-\t\t\u002F\u002F Get Columns\r\n-\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_str ) ) {\r\n-\t\t\t$fields = explode( ',', $fields_str );\r\n-\t\t\tforeach ( $fields as $key => $field ) {\r\n-\t\t\t\t$fields[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\r\n-\t\t\t}\r\n-\t\t\t$filter->fields = $fields;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get only columns\r\n-\t\t$fields_only_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_only_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_only_str ) ) {\r\n-\t\t\t$fields_only = explode( ',', $fields_only_str );\r\n-\t\t\tforeach ( $fields_only as $key => $field ) {\r\n-\t\t\t\t$fields_only[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\r\n-\t\t\t}\r\n-\t\t\t$filter->only_fields = $fields_only;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Exclude Columns\r\n-\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_exclude_str ) ) {\r\n-\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\r\n-\t\t\t$filter->exclude_fields = $fields_exclude;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by ids\r\n-\t\t$course_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['ids'] ?? '' ) );\r\n-\t\tif ( ! empty( $course_ids_str ) ) {\r\n-\t\t\t$course_ids       = explode( ',', $course_ids_str );\r\n-\t\t\t$filter->post_ids = $course_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\t$c_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\r\n-\t\tif ( ! empty( $c_author ) ) {\r\n-\t\t\t$filter->post_author = $c_author;\r\n-\t\t}\r\n-\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? '' );\r\n-\t\tif ( ! empty( $author_ids_str ) ) {\r\n-\t\t\t$author_ids           = explode( ',', $author_ids_str );\r\n-\t\t\t$filter->post_authors = $author_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by status\r\n-\t\t$post_status = LP_Helper::sanitize_params_submitted( $param['c_status'] ?? '' );\r\n-\t\tif ( ! empty( $post_status ) ) {\r\n-\t\t\tif ( 'all' !== $post_status ) {\r\n-\t\t\t\t$filter->post_status = explode( ',', $post_status );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$filter->post_status = [ 'publish' ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sort by\r\n-\t\t * 1. on_sale\r\n-\t\t * 2. on_free\r\n-\t\t * 3. on_paid\r\n-\t\t * 4. on_feature\r\n-\t\t *\u002F\r\n-\t\tif ( ! empty( $param['sort_by'] ) ) {\r\n-\t\t\t$filter->sort_by[] = $param['sort_by'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort by level\r\n-\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\r\n-\t\tif ( ! empty( $levels_str ) ) {\r\n-\t\t\t$levels = explode( ',', $levels_str );\r\n-\t\t\tif ( in_array( 'all', $levels ) ) {\r\n-\t\t\t\t$levels[] = '';\r\n-\t\t\t}\r\n-\t\t\t$filter->levels = $levels;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort by type (oline\u002Foffline)\r\n-\t\t$course_type = LP_Helper::sanitize_params_submitted( urldecode( $param['c_type'] ?? '' ) );\r\n-\t\tif ( ! empty( $course_type ) ) {\r\n-\t\t\t$course_type = explode( ',', $course_type );\r\n-\t\t\tif ( in_array( 'online', $course_type ) && in_array( 'offline', $course_type ) ) {\r\n-\t\t\t\t$filter->type = 'all';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->type = $course_type[0];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check is in category page.\r\n-\t\tif ( ! empty( $param['page_term_id_current'] ) && empty( $param['term_id'] ) ) {\r\n-\t\t\t$filter->term_ids[] = $param['page_term_id_current'];\r\n-\t\t} \u002F\u002F Check is in tag page.\r\n-\t\telseif ( ! empty( $param['page_tag_id_current'] ) && empty( $param['tag_id'] ) ) {\r\n-\t\t\t$filter->tag_ids[] = $param['page_tag_id_current'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by category\r\n-\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\r\n-\t\tif ( ! empty( $term_ids_str ) ) {\r\n-\t\t\t$term_ids         = explode( ',', $term_ids_str );\r\n-\t\t\t$filter->term_ids = array_merge( $filter->term_ids, $term_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by tag\r\n-\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\r\n-\t\tif ( ! empty( $tag_ids_str ) ) {\r\n-\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\r\n-\t\t\t$filter->tag_ids = array_merge( $filter->tag_ids, $tag_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Order by\r\n-\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date', 'key' );\r\n-\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC', 'key' );\r\n-\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\r\n-\r\n-\t\t\u002F\u002F For search suggest courses\r\n-\t\tif ( ! empty( $param['c_suggest'] ) ) {\r\n-\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\r\n-\t\t}\r\n-\r\n-\t\t$return_type = $param['return_type'] ?? 'html';\r\n-\t\tif ( 'json' !== $return_type ) {\r\n-\t\t\t$filter->only_fields = array( 'DISTINCT(ID) AS ID' );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_courses', $filter, $param );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list course\r\n-\t * Order By: price, title, rating, date ...\r\n-\t * Order: ASC, DES\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return object|null|string|int\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @sicne 4.1.5\r\n-\t *\u002F\r\n-\tpublic static function get_courses( LP_Course_Filter $filter, int &$total_rows = 0 ) {\r\n-\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Order by\r\n-\t\t\tswitch ( $filter->order_by ) {\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\tcase 'price_low':\r\n-\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\r\n-\t\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$filter->order = 'DESC';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_price( $filter );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'popular':\r\n-\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_popular( $filter );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'post_title':\r\n-\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'post_title_desc':\r\n-\t\t\t\t\t$filter->order_by = 'post_title';\r\n-\t\t\t\t\t$filter->order    = 'DESC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'menu_order':\r\n-\t\t\t\t\t$filter->order_by = 'menu_order';\r\n-\t\t\t\t\t$filter->order    = 'ASC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Sort by\r\n-\t\t\t$filter->sort_by = (array) $filter->sort_by;\r\n-\t\t\tforeach ( $filter->sort_by as $sort_by ) {\r\n-\t\t\t\t$filter_tmp                      = clone $filter;\r\n-\t\t\t\t$filter_tmp->only_fields         = array( 'DISTINCT(ID)' );\r\n-\t\t\t\t$filter_tmp->return_string_query = true;\r\n-\r\n-\t\t\t\tswitch ( $sort_by ) {\r\n-\t\t\t\t\tcase 'on_sale':\r\n-\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_sale( $filter_tmp );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'on_free':\r\n-\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_free( $filter_tmp );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'on_paid':\r\n-\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_paid( $filter_tmp );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'on_feature':\r\n-\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_feature( $filter_tmp );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$filter_tmp = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Fsort_by\u002F' . $sort_by, $filter_tmp );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$query_courses_str = $lp_course_db->get_courses( $filter_tmp );\r\n-\r\n-\t\t\t\t$filter->where[] = \"AND ID IN ({$query_courses_str})\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Query get results\r\n-\t\t\t$filter  = apply_filters( 'lp\u002Fcourses\u002Ffilter', $filter );\r\n-\t\t\t$courses = LP_Course_DB::getInstance()->get_courses( $filter, $total_rows );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$courses = [];\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $courses;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle params before query list courses on table learnpress_courses\r\n-\t *\r\n-\t * @param CourseJsonFilter $filter\r\n-\t * @param array $param\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.3.2.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function handle_params_for_query_list_courses( CourseJsonFilter &$filter, array $param = [] ) {\r\n-\t\t$filter->page       = absint( $param['paged'] ?? 1 );\r\n-\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\r\n-\r\n-\t\t\u002F\u002F Get Columns\r\n-\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_str ) ) {\r\n-\t\t\t$fields = explode( ',', $fields_str );\r\n-\t\t\tforeach ( $fields as $key => $field ) {\r\n-\t\t\t\t$fields[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\r\n-\t\t\t}\r\n-\t\t\t$filter->fields = $fields;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Get only columns\r\n-\t\t$fields_only_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_only_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_only_str ) ) {\r\n-\t\t\t$fields_only = explode( ',', $fields_only_str );\r\n-\t\t\tforeach ( $fields_only as $key => $field ) {\r\n-\t\t\t\t$fields_only[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\r\n-\t\t\t}\r\n-\t\t\t$filter->only_fields = $fields_only;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Exclude Columns\r\n-\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\r\n-\t\tif ( ! empty( $fields_exclude_str ) ) {\r\n-\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\r\n-\t\t\t$filter->exclude_fields = $fields_exclude;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by ids\r\n-\t\t$course_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['ids'] ?? '' ) );\r\n-\t\tif ( ! empty( $course_ids_str ) ) {\r\n-\t\t\t$course_ids  = explode( ',', $course_ids_str );\r\n-\t\t\t$filter->ids = $course_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\t$c_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\r\n-\t\tif ( ! empty( $c_author ) ) {\r\n-\t\t\t$filter->post_author = $c_author;\r\n-\t\t}\r\n-\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? '' );\r\n-\t\tif ( ! empty( $author_ids_str ) ) {\r\n-\t\t\t$author_ids           = explode( ',', $author_ids_str );\r\n-\t\t\t$filter->post_authors = $author_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by status\r\n-\t\t$post_status = LP_Helper::sanitize_params_submitted( $param['c_status'] ?? '' );\r\n-\t\tif ( ! empty( $post_status ) ) {\r\n-\t\t\tif ( 'all' !== $post_status ) {\r\n-\t\t\t\t$filter->post_status = explode( ',', $post_status );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Type price\r\n-\t\tif ( ! empty( $param['c_type_price'] ) ) {\r\n-\t\t\t$filter->type_price = explode( ',', LP_Helper::sanitize_params_submitted( urldecode( $param['c_type_price'] ) ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F On sale\r\n-\t\tif ( isset( $param['on_sale'] ) ) {\r\n-\t\t\t$filter->is_sale = 1;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F On feature\r\n-\t\tif ( isset( $param['on_feature'] ) ) {\r\n-\t\t\t$filter->is_feature = 1;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort by level\r\n-\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\r\n-\t\tif ( ! empty( $levels_str ) ) {\r\n-\t\t\t$levels = explode( ',', $levels_str );\r\n-\t\t\tif ( in_array( 'all', $levels ) ) {\r\n-\t\t\t\t$levels[] = '';\r\n-\t\t\t}\r\n-\t\t\t$filter->levels = $levels;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort by type (oline\u002Foffline)\r\n-\t\t$course_type = LP_Helper::sanitize_params_submitted( urldecode( $param['c_type'] ?? '' ) );\r\n-\t\tif ( ! empty( $course_type ) ) {\r\n-\t\t\t$course_type = explode( ',', $course_type );\r\n-\t\t\tif ( in_array( 'online', $course_type ) && in_array( 'offline', $course_type ) ) {\r\n-\t\t\t\t$filter->type = 'all';\r\n-\t\t\t} else {\r\n-\t\t\t\t$filter->type = $course_type[0];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check is in category page.\r\n-\t\tif ( ! empty( $param['page_term_id_current'] ) && empty( $param['term_id'] ) ) {\r\n-\t\t\t$filter->term_ids[] = $param['page_term_id_current'];\r\n-\t\t} \u002F\u002F Check is in tag page.\r\n-\t\telseif ( ! empty( $param['page_tag_id_current'] ) && empty( $param['tag_id'] ) ) {\r\n-\t\t\t$filter->tag_ids[] = $param['page_tag_id_current'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by category\r\n-\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\r\n-\t\tif ( ! empty( $term_ids_str ) ) {\r\n-\t\t\t$term_ids         = explode( ',', $term_ids_str );\r\n-\t\t\t$filter->term_ids = array_merge( $filter->term_ids, $term_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find by tag\r\n-\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\r\n-\t\tif ( ! empty( $tag_ids_str ) ) {\r\n-\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\r\n-\t\t\t$filter->tag_ids = array_merge( $filter->tag_ids, $tag_ids );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Order by\r\n-\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date_gmt', 'key' );\r\n-\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC', 'key' );\r\n-\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\r\n-\r\n-\t\t\u002F\u002F For search suggest courses\r\n-\t\tif ( ! empty( $param['c_suggest'] ) ) {\r\n-\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_list_courses', $filter, $param );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses on table learnpress_courses\r\n-\t *\r\n-\t * @param CourseJsonFilter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.3.2.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_list_courses( CourseJsonFilter $filter, int &$total_rows = 0 ): array {\r\n-\t\t$db = CourseJsonDB::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$is_order_by_popular = 'popular' === $filter->order_by;\r\n-\r\n-\t\t\t\u002F\u002F Order by\r\n-\t\t\tswitch ( $filter->order_by ) {\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\tcase 'price_low':\r\n-\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\r\n-\t\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$filter->order = 'DESC';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$filter->order_by = 'price_to_sort';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'popular':\r\n-\t\t\t\t\t$filter = $db->get_courses_order_by_popular( $filter );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'post_title':\r\n-\t\t\t\t\t$filter->order = 'ASC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'post_title_desc':\r\n-\t\t\t\t\t$filter->order_by = 'post_title';\r\n-\t\t\t\t\t$filter->order    = 'DESC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'menu_order':\r\n-\t\t\t\t\t$filter->order_by = 'menu_order';\r\n-\t\t\t\t\t$filter->order    = 'ASC';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Query get results\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var CourseJsonFilter $filter\r\n-\t\t\t *\u002F\r\n-\t\t\t$filter  = apply_filters( 'lp\u002Fcourses-json\u002Ffilter', $filter );\r\n-\t\t\t$courses = $db->get_courses( $filter, $total_rows );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$courses = [];\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $courses;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Courses\n+ *\n+ * Handle all method about list courses\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.5.4\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use LearnPress\\Databases\\Course\\CourseJsonDB;\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LP_Cache;\n+use LP_Course_DB;\n+use LP_Course_Filter;\n+use LP_Courses_Cache;\n+use LP_Database;\n+use LP_Debug;\n+use LP_Helper;\n+use LP_Settings;\n+use Throwable;\n+\n+class Courses {\n+\t\u002F**\n+\t * Count total courses free\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return int\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function count_course_free( LP_Course_Filter $filter ): int {\n+\t\t\u002F\u002F Check cache\n+\t\t$lang      = $_REQUEST['lang'] ?? '';\n+\t\t$key_cache = 'count-courses-free-' . md5( json_encode( $filter ) . $lang );\n+\t\t$count     = LP_Cache::cache_load_first( 'get', $key_cache );\n+\t\tif ( false !== $count ) {\n+\t\t\treturn $count;\n+\t\t}\n+\n+\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t$count            = $lp_courses_cache->get_cache( $key_cache );\n+\t\tif ( false !== $count ) {\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\n+\n+\t\t\treturn $count;\n+\t\t}\n+\n+\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\t\t$count        = $lp_course_db->count_course_free( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\t$lp_courses_cache->set_cache( $key_cache, $count );\n+\t\t$lp_courses_cache_keys = new LP_Courses_Cache( true );\n+\t\t$lp_courses_cache_keys->save_cache_keys_count_courses_free( $key_cache );\n+\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\n+\n+\t\treturn (int) $count;\n+\t}\n+\n+\t\u002F**\n+\t * Handle params before query courses\n+\t *\n+\t * @param array $param\n+\t * @param LP_Course_Filter $filter\n+\t *\n+\t * @return void\n+\t * @version 1.0.3\n+\t * @since 4.2.3.3 move from class LP_Course\n+\t *\u002F\n+\tpublic static function handle_params_for_query_courses( LP_Course_Filter &$filter, array $param = [] ) {\n+\t\t$filter->page       = absint( $param['paged'] ?? 1 );\n+\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\n+\n+\t\t\u002F\u002F Get Columns\n+\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_str ) ) {\n+\t\t\t$fields = explode( ',', $fields_str );\n+\t\t\tforeach ( $fields as $key => $field ) {\n+\t\t\t\t$fields[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\n+\t\t\t}\n+\t\t\t$filter->fields = $fields;\n+\t\t}\n+\n+\t\t\u002F\u002F Get only columns\n+\t\t$fields_only_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_only_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_only_str ) ) {\n+\t\t\t$fields_only = explode( ',', $fields_only_str );\n+\t\t\tforeach ( $fields_only as $key => $field ) {\n+\t\t\t\t$fields_only[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\n+\t\t\t}\n+\t\t\t$filter->only_fields = $fields_only;\n+\t\t}\n+\n+\t\t\u002F\u002F Exclude Columns\n+\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_exclude_str ) ) {\n+\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\n+\t\t\t$filter->exclude_fields = $fields_exclude;\n+\t\t}\n+\n+\t\t\u002F\u002F Find by ids\n+\t\t$course_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['ids'] ?? '' ) );\n+\t\tif ( ! empty( $course_ids_str ) ) {\n+\t\t\t$course_ids       = explode( ',', $course_ids_str );\n+\t\t\t$filter->post_ids = $course_ids;\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\t$c_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\n+\t\tif ( ! empty( $c_author ) ) {\n+\t\t\t$filter->post_author = $c_author;\n+\t\t}\n+\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? '' );\n+\t\tif ( ! empty( $author_ids_str ) ) {\n+\t\t\t$author_ids           = explode( ',', $author_ids_str );\n+\t\t\t$filter->post_authors = $author_ids;\n+\t\t}\n+\n+\t\t\u002F\u002F Find by status\n+\t\t$post_status = LP_Helper::sanitize_params_submitted( $param['c_status'] ?? '' );\n+\t\tif ( ! empty( $post_status ) ) {\n+\t\t\tif ( 'all' !== $post_status ) {\n+\t\t\t\t$filter->post_status = explode( ',', $post_status );\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$filter->post_status = [ 'publish' ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sort by\n+\t\t * 1. on_sale\n+\t\t * 2. on_free\n+\t\t * 3. on_paid\n+\t\t * 4. on_feature\n+\t\t *\u002F\n+\t\tif ( ! empty( $param['sort_by'] ) ) {\n+\t\t\t$filter->sort_by[] = $param['sort_by'];\n+\t\t}\n+\n+\t\t\u002F\u002F Sort by level\n+\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\n+\t\tif ( ! empty( $levels_str ) ) {\n+\t\t\t$levels = explode( ',', $levels_str );\n+\t\t\tif ( in_array( 'all', $levels ) ) {\n+\t\t\t\t$levels[] = '';\n+\t\t\t}\n+\t\t\t$filter->levels = $levels;\n+\t\t}\n+\n+\t\t\u002F\u002F Sort by type (oline\u002Foffline)\n+\t\t$course_type = LP_Helper::sanitize_params_submitted( urldecode( $param['c_type'] ?? '' ) );\n+\t\tif ( ! empty( $course_type ) ) {\n+\t\t\t$course_type = explode( ',', $course_type );\n+\t\t\tif ( in_array( 'online', $course_type ) && in_array( 'offline', $course_type ) ) {\n+\t\t\t\t$filter->type = 'all';\n+\t\t\t} else {\n+\t\t\t\t$filter->type = $course_type[0];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Check is in category page.\n+\t\tif ( ! empty( $param['page_term_id_current'] ) && empty( $param['term_id'] ) ) {\n+\t\t\t$filter->term_ids[] = $param['page_term_id_current'];\n+\t\t} \u002F\u002F Check is in tag page.\n+\t\telseif ( ! empty( $param['page_tag_id_current'] ) && empty( $param['tag_id'] ) ) {\n+\t\t\t$filter->tag_ids[] = $param['page_tag_id_current'];\n+\t\t}\n+\n+\t\t\u002F\u002F Find by category\n+\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\n+\t\tif ( ! empty( $term_ids_str ) ) {\n+\t\t\t$term_ids         = explode( ',', $term_ids_str );\n+\t\t\t$filter->term_ids = array_merge( $filter->term_ids, $term_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Find by tag\n+\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\n+\t\tif ( ! empty( $tag_ids_str ) ) {\n+\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\n+\t\t\t$filter->tag_ids = array_merge( $filter->tag_ids, $tag_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Order by\n+\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date', 'key' );\n+\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC', 'key' );\n+\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\n+\n+\t\t\u002F\u002F For search suggest courses\n+\t\tif ( ! empty( $param['c_suggest'] ) ) {\n+\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\n+\t\t}\n+\n+\t\t$return_type = $param['return_type'] ?? 'html';\n+\t\tif ( 'json' !== $return_type ) {\n+\t\t\t$filter->only_fields = array( 'DISTINCT(ID) AS ID' );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_courses', $filter, $param );\n+\t}\n+\n+\t\u002F**\n+\t * Get list course\n+\t * Order By: price, title, rating, date ...\n+\t * Order: ASC, DES\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return object|null|string|int\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @sicne 4.1.5\n+\t *\u002F\n+\tpublic static function get_courses( LP_Course_Filter $filter, int &$total_rows = 0 ) {\n+\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Order by\n+\t\t\tswitch ( $filter->order_by ) {\n+\t\t\t\tcase 'price':\n+\t\t\t\tcase 'price_low':\n+\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\n+\t\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$filter->order = 'DESC';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_price( $filter );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'popular':\n+\t\t\t\t\t$filter = $lp_course_db->get_courses_order_by_popular( $filter );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'post_title':\n+\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'post_title_desc':\n+\t\t\t\t\t$filter->order_by = 'post_title';\n+\t\t\t\t\t$filter->order    = 'DESC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'menu_order':\n+\t\t\t\t\t$filter->order_by = 'menu_order';\n+\t\t\t\t\t$filter->order    = 'ASC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Sort by\n+\t\t\t$filter->sort_by = (array) $filter->sort_by;\n+\t\t\tforeach ( $filter->sort_by as $sort_by ) {\n+\t\t\t\t$filter_tmp                      = clone $filter;\n+\t\t\t\t$filter_tmp->only_fields         = array( 'DISTINCT(ID)' );\n+\t\t\t\t$filter_tmp->return_string_query = true;\n+\n+\t\t\t\tswitch ( $sort_by ) {\n+\t\t\t\t\tcase 'on_sale':\n+\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_sale( $filter_tmp );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'on_free':\n+\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_free( $filter_tmp );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'on_paid':\n+\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_paid( $filter_tmp );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'on_feature':\n+\t\t\t\t\t\t$filter_tmp = $lp_course_db->get_courses_sort_by_feature( $filter_tmp );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$filter_tmp = apply_filters( 'lp\u002Fcourses\u002Ffilter\u002Fsort_by\u002F' . $sort_by, $filter_tmp );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t$query_courses_str = $lp_course_db->get_courses( $filter_tmp );\n+\n+\t\t\t\t$filter->where[] = \"AND ID IN ({$query_courses_str})\";\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Query get results\n+\t\t\t$filter  = apply_filters( 'lp\u002Fcourses\u002Ffilter', $filter );\n+\t\t\t$courses = LP_Course_DB::getInstance()->get_courses( $filter, $total_rows );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$courses = [];\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $courses;\n+\t}\n+\n+\t\u002F**\n+\t * Handle params before query list courses on table learnpress_courses\n+\t *\n+\t * @param CourseJsonFilter $filter\n+\t * @param array $param\n+\t *\n+\t * @return void\n+\t * @since 4.3.2.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function handle_params_for_query_list_courses( CourseJsonFilter &$filter, array $param = [] ) {\n+\t\t$filter->page       = absint( $param['paged'] ?? 1 );\n+\t\t$filter->post_title = LP_Helper::sanitize_params_submitted( trim( $param['c_search'] ?? '' ) );\n+\n+\t\t\u002F\u002F Get Columns\n+\t\t$fields_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_str ) ) {\n+\t\t\t$fields = explode( ',', $fields_str );\n+\t\t\tforeach ( $fields as $key => $field ) {\n+\t\t\t\t$fields[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\n+\t\t\t}\n+\t\t\t$filter->fields = $fields;\n+\t\t}\n+\n+\t\t\u002F\u002F Get only columns\n+\t\t$fields_only_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_only_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_only_str ) ) {\n+\t\t\t$fields_only = explode( ',', $fields_only_str );\n+\t\t\tforeach ( $fields_only as $key => $field ) {\n+\t\t\t\t$fields_only[ $key ] = LP_Database::getInstance()->wpdb->prepare( '%i', $field );\n+\t\t\t}\n+\t\t\t$filter->only_fields = $fields_only;\n+\t\t}\n+\n+\t\t\u002F\u002F Exclude Columns\n+\t\t$fields_exclude_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_exclude_fields'] ?? '' ) );\n+\t\tif ( ! empty( $fields_exclude_str ) ) {\n+\t\t\t$fields_exclude         = explode( ',', $fields_exclude_str );\n+\t\t\t$filter->exclude_fields = $fields_exclude;\n+\t\t}\n+\n+\t\t\u002F\u002F Find by ids\n+\t\t$course_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['ids'] ?? '' ) );\n+\t\tif ( ! empty( $course_ids_str ) ) {\n+\t\t\t$course_ids  = explode( ',', $course_ids_str );\n+\t\t\t$filter->ids = $course_ids;\n+\t\t}\n+\n+\t\t\u002F\u002F Author\n+\t\t$c_author = LP_Helper::sanitize_params_submitted( $param['c_author'] ?? 0 );\n+\t\tif ( ! empty( $c_author ) ) {\n+\t\t\t$filter->post_author = $c_author;\n+\t\t}\n+\t\t$author_ids_str = LP_Helper::sanitize_params_submitted( $param['c_authors'] ?? '' );\n+\t\tif ( ! empty( $author_ids_str ) ) {\n+\t\t\t$author_ids           = explode( ',', $author_ids_str );\n+\t\t\t$filter->post_authors = $author_ids;\n+\t\t}\n+\n+\t\t\u002F\u002F Find by status\n+\t\t$post_status = LP_Helper::sanitize_params_submitted( $param['c_status'] ?? '' );\n+\t\tif ( ! empty( $post_status ) ) {\n+\t\t\tif ( 'all' !== $post_status ) {\n+\t\t\t\t$filter->post_status = explode( ',', $post_status );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Type price\n+\t\tif ( ! empty( $param['c_type_price'] ) ) {\n+\t\t\t$filter->type_price = explode( ',', LP_Helper::sanitize_params_submitted( urldecode( $param['c_type_price'] ) ) );\n+\t\t}\n+\n+\t\t\u002F\u002F On sale\n+\t\tif ( isset( $param['on_sale'] ) ) {\n+\t\t\t$filter->is_sale = 1;\n+\t\t}\n+\n+\t\t\u002F\u002F On feature\n+\t\tif ( isset( $param['on_feature'] ) ) {\n+\t\t\t$filter->is_feature = 1;\n+\t\t}\n+\n+\t\t\u002F\u002F Sort by level\n+\t\t$levels_str = LP_Helper::sanitize_params_submitted( urldecode( $param['c_level'] ?? '' ) );\n+\t\tif ( ! empty( $levels_str ) ) {\n+\t\t\t$levels = explode( ',', $levels_str );\n+\t\t\tif ( in_array( 'all', $levels ) ) {\n+\t\t\t\t$levels[] = '';\n+\t\t\t}\n+\t\t\t$filter->levels = $levels;\n+\t\t}\n+\n+\t\t\u002F\u002F Sort by type (oline\u002Foffline)\n+\t\t$course_type = LP_Helper::sanitize_params_submitted( urldecode( $param['c_type'] ?? '' ) );\n+\t\tif ( ! empty( $course_type ) ) {\n+\t\t\t$course_type = explode( ',', $course_type );\n+\t\t\tif ( in_array( 'online', $course_type ) && in_array( 'offline', $course_type ) ) {\n+\t\t\t\t$filter->type = 'all';\n+\t\t\t} else {\n+\t\t\t\t$filter->type = $course_type[0];\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Check is in category page.\n+\t\tif ( ! empty( $param['page_term_id_current'] ) && empty( $param['term_id'] ) ) {\n+\t\t\t$filter->term_ids[] = $param['page_term_id_current'];\n+\t\t} \u002F\u002F Check is in tag page.\n+\t\telseif ( ! empty( $param['page_tag_id_current'] ) && empty( $param['tag_id'] ) ) {\n+\t\t\t$filter->tag_ids[] = $param['page_tag_id_current'];\n+\t\t}\n+\n+\t\t\u002F\u002F Find by category\n+\t\t$term_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['term_id'] ?? '' ) );\n+\t\tif ( ! empty( $term_ids_str ) ) {\n+\t\t\t$term_ids         = explode( ',', $term_ids_str );\n+\t\t\t$filter->term_ids = array_merge( $filter->term_ids, $term_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Find by tag\n+\t\t$tag_ids_str = LP_Helper::sanitize_params_submitted( urldecode( $param['tag_id'] ?? '' ) );\n+\t\tif ( ! empty( $tag_ids_str ) ) {\n+\t\t\t$tag_ids         = explode( ',', $tag_ids_str );\n+\t\t\t$filter->tag_ids = array_merge( $filter->tag_ids, $tag_ids );\n+\t\t}\n+\n+\t\t\u002F\u002F Order by\n+\t\t$filter->order_by = LP_Helper::sanitize_params_submitted( ! empty( $param['order_by'] ) ? $param['order_by'] : 'post_date_gmt', 'key' );\n+\t\t$filter->order    = LP_Helper::sanitize_params_submitted( ! empty( $param['order'] ) ? $param['order'] : 'DESC', 'key' );\n+\t\t$filter->limit    = $param['limit'] ?? LP_Settings::get_option( 'archive_course_limit', 10 );\n+\n+\t\t\u002F\u002F For search suggest courses\n+\t\tif ( ! empty( $param['c_suggest'] ) ) {\n+\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t$filter->limit       = apply_filters( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest-limit', 10 );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fcourses\u002Fhandle_params_for_query_list_courses', $filter, $param );\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses on table learnpress_courses\n+\t *\n+\t * @param CourseJsonFilter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array\n+\t * @since 4.3.2.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_list_courses( CourseJsonFilter $filter, int &$total_rows = 0 ): array {\n+\t\t$db = CourseJsonDB::getInstance();\n+\n+\t\ttry {\n+\t\t\t$is_order_by_popular = 'popular' === $filter->order_by;\n+\n+\t\t\t\u002F\u002F Order by\n+\t\t\tswitch ( $filter->order_by ) {\n+\t\t\t\tcase 'price':\n+\t\t\t\tcase 'price_low':\n+\t\t\t\t\tif ( 'price_low' === $filter->order_by ) {\n+\t\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$filter->order = 'DESC';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$filter->order_by = 'price_to_sort';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'popular':\n+\t\t\t\t\t$filter = $db->get_courses_order_by_popular( $filter );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'post_title':\n+\t\t\t\t\t$filter->order = 'ASC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'post_title_desc':\n+\t\t\t\t\t$filter->order_by = 'post_title';\n+\t\t\t\t\t$filter->order    = 'DESC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'menu_order':\n+\t\t\t\t\t$filter->order_by = 'menu_order';\n+\t\t\t\t\t$filter->order    = 'ASC';\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$filter = apply_filters( 'lp\u002Fcourses-json\u002Ffilter\u002Forder_by\u002F' . $filter->order_by, $filter );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Query get results\n+\t\t\t\u002F**\n+\t\t\t * @var CourseJsonFilter $filter\n+\t\t\t *\u002F\n+\t\t\t$filter  = apply_filters( 'lp\u002Fcourses-json\u002Ffilter', $filter );\n+\t\t\t$courses = $db->get_courses( $filter, $total_rows );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$courses = [];\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $courses;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FLessonPostModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FLessonPostModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FLessonPostModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FLessonPostModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,93 +1,93 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Lesson Post Model\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.7.6\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LP_Cache;\r\n-use LP_Post_Type_Filter;\r\n-\r\n-class LessonPostModel extends PostModel {\r\n-\t\u002F**\r\n-\t * @var string Post Type\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_LESSON_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * Const meta key\r\n-\t *\u002F\r\n-\tconst META_KEY_DURATION = '_lp_duration';\r\n-\tconst META_KEY_PREVIEW  = '_lp_preview';\r\n-\r\n-\t\u002F**\r\n-\t * Get post assignment by ID\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t *\u002F\r\n-\tpublic static function find( int $post_id, bool $check_cache = false ) {\r\n-\t\t$filter_post            = new LP_Post_Type_Filter();\r\n-\t\t$filter_post->ID        = $post_id;\r\n-\t\t$filter_post->post_type = LP_LESSON_CPT;\r\n-\r\n-\t\t$key_cache     = \"lessonPostModel\u002Ffind\u002F{$post_id}\";\r\n-\t\t$lpLessonCache = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$lessonPostModel = $lpLessonCache->get_cache( $key_cache );\r\n-\t\t\tif ( $lessonPostModel instanceof self ) {\r\n-\t\t\t\treturn $lessonPostModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$lessonPostModel = self::get_item_model_from_db( $filter_post );\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $lessonPostModel instanceof LessonPostModel ) {\r\n-\t\t\t$lpLessonCache->set_cache( $key_cache, $lessonPostModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $lessonPostModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get duration lesson\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_duration(): string {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_DURATION, '0 minute' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check lesson enable preview\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_preview(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_PREVIEW, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set lesson is preview or not\r\n-\t *\r\n-\t * @param bool $enable\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.8.6\r\n-\t *\u002F\r\n-\tpublic function set_preview( bool $enable = true ) {\r\n-\t\t$this->save_meta_value_by_key( LessonPostModel::META_KEY_PREVIEW, $enable ? 'yes' : 'no' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Lesson Post Model\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.7.6\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LP_Cache;\n+use LP_Post_Type_Filter;\n+\n+class LessonPostModel extends PostModel {\n+\t\u002F**\n+\t * @var string Post Type\n+\t *\u002F\n+\tpublic $post_type = LP_LESSON_CPT;\n+\n+\t\u002F**\n+\t * Const meta key\n+\t *\u002F\n+\tconst META_KEY_DURATION = '_lp_duration';\n+\tconst META_KEY_PREVIEW  = '_lp_preview';\n+\n+\t\u002F**\n+\t * Get post assignment by ID\n+\t *\n+\t * @param int $post_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t *\u002F\n+\tpublic static function find( int $post_id, bool $check_cache = false ) {\n+\t\t$filter_post            = new LP_Post_Type_Filter();\n+\t\t$filter_post->ID        = $post_id;\n+\t\t$filter_post->post_type = LP_LESSON_CPT;\n+\n+\t\t$key_cache     = \"lessonPostModel\u002Ffind\u002F{$post_id}\";\n+\t\t$lpLessonCache = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$lessonPostModel = $lpLessonCache->get_cache( $key_cache );\n+\t\t\tif ( $lessonPostModel instanceof self ) {\n+\t\t\t\treturn $lessonPostModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$lessonPostModel = self::get_item_model_from_db( $filter_post );\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $lessonPostModel instanceof LessonPostModel ) {\n+\t\t\t$lpLessonCache->set_cache( $key_cache, $lessonPostModel );\n+\t\t}\n+\n+\t\treturn $lessonPostModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get duration lesson\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_duration(): string {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_DURATION, '0 minute' );\n+\t}\n+\n+\t\u002F**\n+\t * Check lesson enable preview\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_preview(): bool {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_PREVIEW, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Set lesson is preview or not\n+\t *\n+\t * @param bool $enable\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.8.6\n+\t *\u002F\n+\tpublic function set_preview( bool $enable = true ) {\n+\t\t$this->save_meta_value_by_key( LessonPostModel::META_KEY_PREVIEW, $enable ? 'yes' : 'no' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FListCourseCategories.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FListCourseCategories.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FListCourseCategories.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FListCourseCategories.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class ListCourseCategories\r\n- *\r\n- * Handle lit course categories\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.6.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Throwable;\r\n-\r\n-class ListCourseCategories {\r\n-\t\u002F**\r\n-\t * Get all course categories\r\n-\t *\r\n-\t * @param array $arg_query_terms\r\n-\t *\r\n-\t * @return array [ term_id => term_name ]\r\n-\t *\u002F\r\n-\tpublic static function get_all_categories_id_name( array $arg_query_terms = [] ): array {\r\n-\t\t$terms = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$arg_query_terms_default = [\r\n-\t\t\t\t'taxonomy' => LP_COURSE_CATEGORY_TAX,\r\n-\t\t\t\t'fields'   => 'id=>name',\r\n-\t\t\t\t'parent'   => 0,\r\n-\t\t\t\t'orderby'  => 'term_order',\r\n-\t\t\t\t'order'    => 'ASC',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$arg_query_terms = array_merge( $arg_query_terms_default, $arg_query_terms );\r\n-\r\n-\t\t\t$terms = get_terms( $arg_query_terms );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $terms;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class ListCourseCategories\n+ *\n+ * Handle lit course categories\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.6.5\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Throwable;\n+\n+class ListCourseCategories {\n+\t\u002F**\n+\t * Get all course categories\n+\t *\n+\t * @param array $arg_query_terms\n+\t *\n+\t * @return array [ term_id => term_name ]\n+\t *\u002F\n+\tpublic static function get_all_categories_id_name( array $arg_query_terms = [] ): array {\n+\t\t$terms = [];\n+\n+\t\ttry {\n+\t\t\t$arg_query_terms_default = [\n+\t\t\t\t'taxonomy' => LP_COURSE_CATEGORY_TAX,\n+\t\t\t\t'fields'   => 'id=>name',\n+\t\t\t\t'parent'   => 0,\n+\t\t\t\t'orderby'  => 'term_order',\n+\t\t\t\t'order'    => 'ASC',\n+\t\t\t];\n+\n+\t\t\t$arg_query_terms = array_merge( $arg_query_terms_default, $arg_query_terms );\n+\n+\t\t\t$terms = get_terms( $arg_query_terms );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $terms;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FPostModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FPostModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FPostModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FPostModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,602 +1,628 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Course\r\n- * To replace class LP_User_Item\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.8\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\FilterBase;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LP_Cache;\r\n-use LP_Post_Meta_DB;\r\n-use LP_Post_Meta_Filter;\r\n-use LP_Post_Type_Filter;\r\n-\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Error;\r\n-use WP_Post;\r\n-use WP_Term;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class PostModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID = 0;\r\n-\t\u002F**\r\n-\t * @var string author id, foreign key\r\n-\t *\u002F\r\n-\tpublic $post_author = 0;\r\n-\t\u002F**\r\n-\t * @var string post date\r\n-\t *\u002F\r\n-\tpublic $post_date = null;\r\n-\t\u002F**\r\n-\t * @var string post date gmt\r\n-\t *\u002F\r\n-\tpublic $post_date_gmt = null;\r\n-\t\u002F**\r\n-\t * @var string post content\r\n-\t *\u002F\r\n-\tpublic $post_content = '';\r\n-\t\u002F**\r\n-\t * @var string Post title\r\n-\t *\u002F\r\n-\tpublic $post_title = '';\r\n-\t\u002F**\r\n-\t * @var string Post excerpt\r\n-\t *\u002F\r\n-\tpublic $post_excerpt = '';\r\n-\t\u002F**\r\n-\t * @var string Post Status (publish, draft, ...)\r\n-\t *\u002F\r\n-\tpublic $post_status = '';\r\n-\t\u002F**\r\n-\t * @var string Post name (slug for link)\r\n-\t *\u002F\r\n-\tpublic $post_name = '';\r\n-\t\u002F**\r\n-\t * @var string Post type\r\n-\t *\u002F\r\n-\tpublic $post_type = 'post';\r\n-\t\u002F**\r\n-\t * @var int post parent\r\n-\t *\u002F\r\n-\tpublic $post_parent = 0;\r\n-\t\u002F**\r\n-\t * @var stdClass all meta data\r\n-\t *\u002F\r\n-\tpublic $meta_data = null;\r\n-\t\u002F**\r\n-\t * @var stdClass all meta data\r\n-\t *\u002F\r\n-\tpublic $is_got_meta_data;\r\n-\t\u002F**\r\n-\t * @var string only for set same property with class WP_Post\r\n-\t *\u002F\r\n-\tpublic $filter;\r\n-\r\n-\tconst STATUS_PUBLISH = 'publish';\r\n-\tconst STATUS_TRASH   = 'trash';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_null( $this->meta_data ) ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user model\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_author_model() {\r\n-\t\tif ( ! empty( $this->post_author ) ) {\r\n-\t\t\t$author_id = $this->post_author;\r\n-\t\t} else {\r\n-\t\t\t$author_id = get_post_field( 'post_author', $this );\r\n-\t\t}\r\n-\r\n-\t\treturn UserModel::find( $author_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to PostModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return PostModel|static\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): PostModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post course by ID\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|PostModel\r\n-\t * @version 1.0.0\r\n-\t * @since 4.3.2\r\n-\t *\u002F\r\n-\tpublic static function find_by_id( int $post_id, bool $check_cache = false ) {\r\n-\t\t$filter            = new PostFilter();\r\n-\t\t$filter->ID        = $post_id;\r\n-\t\t$filter->post_type = ( new static() )->post_type;\r\n-\r\n-\t\t$type      = ( new static() )->post_type;\r\n-\t\t$key_cache = \"postModel\u002Ffind\u002F{$post_id}\u002F\" . $type;\r\n-\t\t$lp_cache  = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check first load cache\r\n-\t\t$postModel = LP_Cache::cache_load_first( 'get', $key_cache );\r\n-\t\tif ( false !== $postModel ) {\r\n-\t\t\treturn $postModel;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$quizPostModel = $lp_cache->get_cache( $key_cache );\r\n-\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t\treturn $quizPostModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$postModel = self::get_item_model_from_db( $filter );\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $postModel instanceof PostModel ) {\r\n-\t\t\t$lp_cache->set_cache( $key_cache, $postModel );\r\n-\t\t}\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_cache, $postModel );\r\n-\r\n-\t\treturn $postModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post from database.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return PostModel.\r\n-\t *\r\n-\t * @param LP_Post_Type_Filter|FilterBase $filter\r\n-\t *\r\n-\t * @return PostModel|false|static\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function get_item_model_from_db( $filter ) {\r\n-\t\t$lp_post_db = PostDB::getInstance();\r\n-\t\t$post_model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $filter->post_type ) ) {\r\n-\t\t\t\t$filter->post_type = ( new static() )->post_type;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_post_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_post_db->get_posts( $filter );\r\n-\t\t\t$post_rs          = $lp_post_db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\t\tif ( $post_rs instanceof stdClass ) {\r\n-\t\t\t\t$post_model = new static( $post_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $post_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all meta_data, all keys of a user it\r\n-\t *\r\n-\t * @return stdClass|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_all_metadata() {\r\n-\t\tif ( ! isset( $this->is_got_meta_data ) ) {\r\n-\t\t\t$lp_item_meta_db         = LP_Post_Meta_DB::getInstance();\r\n-\t\t\t$filter                  = new LP_Post_Meta_Filter();\r\n-\t\t\t$filter->post_id         = $this->get_id();\r\n-\t\t\t$filter->run_query_count = false;\r\n-\t\t\t$filter->limit           = - 1;\r\n-\r\n-\t\t\t$metadata_rs = $lp_item_meta_db->get_post_metas( $filter );\r\n-\t\t\tif ( ! $metadata_rs instanceof stdClass ) {\r\n-\t\t\t\t$this->meta_data = new stdClass();\r\n-\t\t\t\tforeach ( $metadata_rs as $value ) {\r\n-\t\t\t\t\t$this->meta_data->{$value->meta_key} = $value->meta_value;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->is_got_meta_data = 1;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->meta_data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities to create new post.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.9.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_create(): bool {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities to update post.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.9.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_update(): bool {\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities of item's course.\r\n-\t * Check user current can edit it.\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.9\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_create_item_course() {\r\n-\t\t$course_item_types = CourseModel::item_types_support();\r\n-\t\t\u002F\u002F Questions not type item of course, it is type item of quiz, but need check here.\r\n-\t\t$course_item_types[] = LP_QUESTION_CPT;\r\n-\t\tif ( ! in_array( $this->post_type, $course_item_types, true ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = wp_get_current_user();\r\n-\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT . 's' ) ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to create item.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities of item's course.\r\n-\t * Check user current can edit it.\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.9\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_update_item_course() {\r\n-\t\t$course_item_types = CourseModel::item_types_support();\r\n-\t\t\u002F\u002F Questions not type item of course, it is type item of quiz, but need check here.\r\n-\t\t$course_item_types[] = LP_QUESTION_CPT;\r\n-\t\tif ( ! in_array( $this->post_type, $course_item_types, true ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = wp_get_current_user();\r\n-\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT, $this->ID ) ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database.\r\n-\t *\r\n-\t * If user_item_id is empty, insert new data, else update data.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function save( bool $force_save = false ) {\r\n-\t\t$data = [];\r\n-\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\r\n-\t\t\t$data[ $property ] = $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check if exists course id.\r\n-\t\tif ( empty( $this->ID ) ) { \u002F\u002F Insert data.\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! $force_save ) {\r\n-\t\t\t\tif ( ! $this->check_capabilities_create() ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You do not have permission to create item.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->check_capabilities_create_item_course();\r\n-\t\t\t}\r\n-\r\n-\t\t\tunset( $data['ID'] );\r\n-\t\t\t$post_id = wp_insert_post( $data, true );\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! $force_save ) {\r\n-\t\t\t\tif ( ! $this->check_capabilities_update() ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->check_capabilities_update_item_course();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_id = wp_update_post( $data, true );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_wp_error( $post_id ) ) {\r\n-\t\t\tthrow new Exception( $post_id->get_error_message() );\r\n-\t\t} else {\r\n-\t\t\t$this->ID = $post_id;\r\n-\t\t}\r\n-\r\n-\t\t$post = get_post( $this->ID );\r\n-\t\tforeach ( get_object_vars( $post ) as $property => $value ) {\r\n-\t\t\t\u002F\u002F If property is not exists in PostModel, skip it.\r\n-\t\t\tif ( ! property_exists( $this, $property ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\t$this->{$property} = $value;\r\n-\t\t}\r\n-\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t\u002F\u002F Clear cache.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_id(): int {\r\n-\t\treturn (int) $this->ID;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get image url of post.\r\n-\t *\r\n-\t * @param string|int[] $size\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function get_image_url( $size = 'post-thumbnail' ): string {\r\n-\t\t$image_url = '';\r\n-\r\n-\t\tif ( has_post_thumbnail( $this ) ) {\r\n-\t\t\tif ( is_string( $size ) ) {\r\n-\t\t\t\t$image_url = get_the_post_thumbnail_url( $this, $size );\r\n-\t\t\t} elseif ( is_array( $size ) && count( $size ) === 2 ) {\r\n-\t\t\t\t\u002F\u002F Check file crop is existing.\r\n-\t\t\t\t$attachment_id = get_post_thumbnail_id( $this );\r\n-\t\t\t\t$file_path     = get_attached_file( $attachment_id );\r\n-\t\t\t\t$file_url      = wp_get_attachment_url( $attachment_id );\r\n-\t\t\t\t$upload_dir    = wp_upload_dir();\r\n-\t\t\t\t$base_dir      = $upload_dir['basedir'];\r\n-\r\n-\t\t\t\t\u002F\u002F Get file path with size.\r\n-\t\t\t\t$file_path_arr    = explode( '.', $file_path );\r\n-\t\t\t\t$file_path_length = count( $file_path_arr );\r\n-\t\t\t\t$extension        = end( $file_path_arr );\r\n-\t\t\t\tunset( $file_path_arr[ $file_path_length - 1 ] );\r\n-\t\t\t\t$file_path_join      = implode( '.', $file_path_arr );\r\n-\t\t\t\t$file_path_with_size = $file_path_join . '-' . $size[0] . 'x' . $size[1] . '.' . $extension;\r\n-\t\t\t\tif ( file_exists( $file_path_with_size ) ) {\r\n-\t\t\t\t\t$file_url_arr    = explode( '.', $file_url );\r\n-\t\t\t\t\t$file_url_length = count( $file_url_arr );\r\n-\t\t\t\t\t$url_extension   = end( $file_url_arr );\r\n-\t\t\t\t\tunset( $file_url_arr[ $file_url_length - 1 ] );\r\n-\t\t\t\t\t$file_url_join = implode( '.', $file_url_arr );\r\n-\t\t\t\t\t$image_url     = $file_url_join . '-' . $size[0] . 'x' . $size[1] . '.' . $url_extension;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Custom crop size for image.\r\n-\t\t\t\t\t$resized_file = wp_get_image_editor( $file_path );\r\n-\r\n-\t\t\t\t\tif ( ! is_wp_error( $resized_file ) ) {\r\n-\t\t\t\t\t\t$resized_file->resize( $size[0], $size[1], true );\r\n-\t\t\t\t\t\t$resized_image = $resized_file->save( $file_path_with_size );\r\n-\r\n-\t\t\t\t\t\tif ( ! is_wp_error( $resized_image ) ) {\r\n-\t\t\t\t\t\t\t\u002F\u002F Build the URL for the resized image\r\n-\t\t\t\t\t\t\t$imag_dir  = $resized_image['path'];\r\n-\t\t\t\t\t\t\t$imag_dir  = str_replace( $base_dir, '', $imag_dir );\r\n-\t\t\t\t\t\t\t$image_url = $upload_dir['baseurl'] . $imag_dir;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $image_url ) ) {\r\n-\t\t\t$image_url = LearnPress::instance()->image( 'no-image.png' );\r\n-\t\t}\r\n-\r\n-\t\treturn $image_url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get meta value by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $default_value\r\n-\t * @param bool $single\r\n-\t *\r\n-\t * @return false|mixed\r\n-\t *\u002F\r\n-\tpublic function get_meta_value_by_key( string $key, $default_value = false, bool $single = true ) {\r\n-\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn maybe_unserialize( $this->meta_data->{$key} );\r\n-\t\t}\r\n-\r\n-\t\t$value = get_post_meta( $this->ID, $key, $single );\r\n-\t\tif ( empty( $value ) ) {\r\n-\t\t\t$value = $default_value;\r\n-\t\t}\r\n-\r\n-\t\t$value = maybe_unserialize( $value );\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get meta value by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $value\r\n-\t * @param bool $fore_update\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function save_meta_value_by_key( string $key, $value, bool $fore_update = false ) {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\tif ( ! $fore_update ) {\r\n-\t\t\tif ( ! $this->check_capabilities_update() ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t\t$this->check_capabilities_create_item_course();\r\n-\t\t}\r\n-\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\t\tupdate_post_meta( $this->ID, $key, $value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get categories of course.\r\n-\t *\r\n-\t * @return array|WP_Term[]\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function get_categories(): array {\r\n-\t\t$wpPost     = new WP_Post( $this );\r\n-\t\t$categories = get_the_terms( $wpPost, LP_COURSE_CATEGORY_TAX );\r\n-\t\tif ( ! $categories || $categories instanceof WP_Error ) {\r\n-\t\t\t$categories = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $categories;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get tags of course.\r\n-\t *\r\n-\t * @return array|WP_Term[]\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.7.2\r\n-\t *\u002F\r\n-\tpublic function get_tags(): array {\r\n-\t\t$wpPost = new WP_Post( $this );\r\n-\t\t$tags   = get_the_terms( $wpPost, LP_COURSE_TAXONOMY_TAG );\r\n-\t\tif ( ! $tags || $tags instanceof WP_Error ) {\r\n-\t\t\t$tags = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $tags;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get permalink of post\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_permalink(): string {\r\n-\t\t$permalink = get_permalink( $this );\r\n-\t\tif ( empty( $permalink ) ) {\r\n-\t\t\t$permalink = '';\r\n-\t\t}\r\n-\r\n-\t\treturn $permalink;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the content of WP\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_the_content(): string {\r\n-\t\t$content = get_the_content( null, false, $this );\r\n-\t\t$content = apply_filters( 'the_content', $content );\r\n-\t\t$content = str_replace( ']]>', ']]&gt;', $content );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get excerpt of WP\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_the_excerpt(): string {\r\n-\t\t$content = get_the_excerpt( $this );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get title of course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_the_title(): string {\r\n-\t\treturn get_the_title( $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get edit link of post\r\n-\t *\r\n-\t * @return string|null\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_edit_link() {\r\n-\t\treturn admin_url( \"post.php?post=$this->ID&action=edit\" );\r\n-\t\t\u002F**\r\n-\t\t * Not using get_edit_post_link() because it may not return the correct link in some cases\r\n-\t\t * get_post_type_object is null.\r\n-\t\t *\u002F\r\n-\t\t\u002F\u002Freturn get_edit_post_link( $this->get_id() );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Course\n+ * To replace class LP_User_Item\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.8\n+ * @since 4.2.6.9\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\FilterBase;\n+use LearnPress\\Filters\\PostFilter;\n+use LP_Cache;\n+use LP_Post_Meta_DB;\n+use LP_Post_Meta_Filter;\n+use LP_Post_Type_Filter;\n+\n+use stdClass;\n+use Throwable;\n+use WP_Error;\n+use WP_Post;\n+use WP_Term;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class PostModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID                = 0;\n+\tpublic $post_author       = 0;\n+\tpublic $post_date         = null;\n+\tpublic $post_date_gmt     = null;\n+\tpublic $post_modified     = null;\n+\tpublic $post_modified_gmt = null;\n+\tpublic $post_content      = '';\n+\tpublic $post_title        = '';\n+\tpublic $post_excerpt      = '';\n+\tpublic $post_status       = '';\n+\tpublic $post_password     = '';\n+\tpublic $post_name         = '';\n+\tpublic $post_type         = 'post';\n+\tpublic $post_parent       = 0;\n+\t\u002F**\n+\t * @var stdClass all meta data\n+\t *\u002F\n+\tpublic $meta_data = null;\n+\t\u002F**\n+\t * @var stdClass all meta data\n+\t *\u002F\n+\tpublic $is_got_meta_data;\n+\t\u002F**\n+\t * @var string only for set same property with class WP_Post\n+\t *\u002F\n+\tpublic $filter;\n+\n+\tconst STATUS_PUBLISH      = 'publish';\n+\tconst STATUS_TRASH        = 'trash';\n+\tconst STATUS_DRAFT        = 'draft';\n+\tconst STATUS_PRIVATE      = 'private';\n+\tconst STATUS_PENDING      = 'pending';\n+\tconst STATUS_FEATURE      = 'future';\n+\tconst STATUS_AUTO_DRAFT   = 'auto-draft';\n+\tconst VISIBILITY_PASSWORD = 'password';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\n+\t\tif ( is_null( $this->meta_data ) ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get user model\n+\t *\n+\t * @return false|UserModel\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_author_model() {\n+\t\tif ( ! empty( $this->post_author ) ) {\n+\t\t\t$author_id = $this->post_author;\n+\t\t} else {\n+\t\t\t$author_id = get_post_field( 'post_author', $this );\n+\t\t}\n+\n+\t\treturn UserModel::find( $author_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to PostModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return PostModel|static\n+\t *\u002F\n+\tpublic function map_to_object( $data ): PostModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get post course by ID\n+\t *\n+\t * @param int $post_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|PostModel\n+\t * @version 1.0.0\n+\t * @since 4.3.2\n+\t *\u002F\n+\tpublic static function find_by_id( int $post_id, bool $check_cache = false ) {\n+\t\t$filter            = new PostFilter();\n+\t\t$filter->ID        = $post_id;\n+\t\t$filter->post_type = ( new static() )->post_type;\n+\n+\t\t$type      = ( new static() )->post_type;\n+\t\t$key_cache = \"postModel\u002Ffind\u002F{$post_id}\u002F\" . $type;\n+\t\t$lp_cache  = new LP_Cache();\n+\n+\t\t\u002F\u002F Check first load cache\n+\t\t$postModel = LP_Cache::cache_load_first( 'get', $key_cache );\n+\t\tif ( false !== $postModel ) {\n+\t\t\treturn $postModel;\n+\t\t}\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$quizPostModel = $lp_cache->get_cache( $key_cache );\n+\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t\treturn $quizPostModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$postModel = self::get_item_model_from_db( $filter );\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $postModel instanceof PostModel ) {\n+\t\t\t$lp_cache->set_cache( $key_cache, $postModel );\n+\t\t}\n+\t\tLP_Cache::cache_load_first( 'set', $key_cache, $postModel );\n+\n+\t\treturn $postModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get post from database.\n+\t * If not exists, return false.\n+\t * If exists, return PostModel.\n+\t *\n+\t * @param LP_Post_Type_Filter|FilterBase $filter\n+\t *\n+\t * @return PostModel|false|static\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function get_item_model_from_db( $filter ) {\n+\t\t$lp_post_db = PostDB::getInstance();\n+\t\t$post_model = false;\n+\n+\t\ttry {\n+\t\t\tif ( empty( $filter->post_type ) ) {\n+\t\t\t\t$filter->post_type = ( new static() )->post_type;\n+\t\t\t}\n+\n+\t\t\t$lp_post_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_post_db->get_posts( $filter );\n+\t\t\t$post_rs          = $lp_post_db->wpdb->get_row( $query_single_row );\n+\n+\t\t\tif ( $post_rs instanceof stdClass ) {\n+\t\t\t\t$post_model = new static( $post_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $post_model;\n+\t}\n+\n+\t\u002F**\n+\t * Get all meta_data, all keys of a user it\n+\t *\n+\t * @return stdClass|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_all_metadata() {\n+\t\tif ( ! isset( $this->is_got_meta_data ) ) {\n+\t\t\t$lp_item_meta_db         = LP_Post_Meta_DB::getInstance();\n+\t\t\t$filter                  = new LP_Post_Meta_Filter();\n+\t\t\t$filter->post_id         = $this->get_id();\n+\t\t\t$filter->run_query_count = false;\n+\t\t\t$filter->limit           = - 1;\n+\n+\t\t\t$metadata_rs = $lp_item_meta_db->get_post_metas( $filter );\n+\t\t\tif ( ! $metadata_rs instanceof stdClass ) {\n+\t\t\t\t$this->meta_data = new stdClass();\n+\t\t\t\tforeach ( $metadata_rs as $value ) {\n+\t\t\t\t\t$this->meta_data->{$value->meta_key} = $value->meta_value;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$this->is_got_meta_data = 1;\n+\t\t}\n+\n+\t\treturn $this->meta_data;\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities to create new post.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.9.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_capabilities_create(): bool {\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities to update post.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.9.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_capabilities_update(): bool {\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities of item's course.\n+\t * Check user current can edit it.\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.9\n+\t *\u002F\n+\tpublic function check_capabilities_create_item_course() {\n+\t\t$course_item_types = CourseModel::item_types_support();\n+\t\t\u002F\u002F Questions not type item of course, it is type item of quiz, but need check here.\n+\t\t$course_item_types[] = LP_QUESTION_CPT;\n+\t\tif ( ! in_array( $this->post_type, $course_item_types, true ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = wp_get_current_user();\n+\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT . 's' ) ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to create item.', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities of item's course.\n+\t * Check user current can edit it.\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @version 1.0.0\n+\t * @since 4.2.9\n+\t *\u002F\n+\tpublic function check_capabilities_update_item_course() {\n+\t\t$course_item_types = CourseModel::item_types_support();\n+\t\t\u002F\u002F Questions not type item of course, it is type item of quiz, but need check here.\n+\t\t$course_item_types[] = LP_QUESTION_CPT;\n+\t\tif ( ! in_array( $this->post_type, $course_item_types, true ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = wp_get_current_user();\n+\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT, $this->ID ) ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database.\n+\t *\n+\t * If user_item_id is empty, insert new data, else update data.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function save( bool $force_save = false ) {\n+\t\t$data = get_object_vars( $this );\n+\n+\t\tif ( ! empty( $this->meta_data ) ) {\n+\t\t\t$data['meta_input'] = [];\n+\t\t\tforeach ( $this->meta_data as $key_meta => $value_meta ) {\n+\t\t\t\t$data['meta_input'][ $key_meta ] = $value_meta;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Check if exists course id.\n+\t\tif ( empty( $this->ID ) ) { \u002F\u002F Insert data.\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! $force_save ) {\n+\t\t\t\tif ( ! $this->check_capabilities_create() ) {\n+\t\t\t\t\tthrow new Exception( __( 'You do not have permission to create item.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->check_capabilities_create_item_course();\n+\t\t\t}\n+\n+\t\t\tunset( $data['ID'] );\n+\t\t\t$post_id = wp_insert_post( $data, true );\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! $force_save ) {\n+\t\t\t\tif ( ! $this->check_capabilities_update() ) {\n+\t\t\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$this->check_capabilities_update_item_course();\n+\t\t\t}\n+\n+\t\t\t$post_id = wp_update_post( $data, true );\n+\t\t}\n+\n+\t\tif ( is_wp_error( $post_id ) ) {\n+\t\t\tthrow new Exception( $post_id->get_error_message() );\n+\t\t} else {\n+\t\t\t$this->ID = $post_id;\n+\t\t}\n+\n+\t\t$post = get_post( $this->ID );\n+\t\tforeach ( get_object_vars( $post ) as $property => $value ) {\n+\t\t\t\u002F\u002F If property is not exists in PostModel, skip it.\n+\t\t\tif ( ! property_exists( $this, $property ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\t$this->{$property} = $value;\n+\t\t}\n+\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete() {\n+\t\twp_delete_post( $this->get_id(), true );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t\u002F\u002F Clear cache.\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_id(): int {\n+\t\treturn (int) $this->ID;\n+\t}\n+\n+\t\u002F**\n+\t * Get image url of post.\n+\t *\n+\t * @param string|int[] $size\n+\t *\n+\t * @return string\n+\t * @since 4.2.6.9\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function get_image_url( $size = 'post-thumbnail' ): string {\n+\t\t$image_url = '';\n+\n+\t\tif ( has_post_thumbnail( $this ) ) {\n+\t\t\tif ( is_string( $size ) ) {\n+\t\t\t\t$image_url = get_the_post_thumbnail_url( $this, $size );\n+\t\t\t} elseif ( is_array( $size ) && count( $size ) === 2 ) {\n+\t\t\t\t\u002F\u002F Check file crop is existing.\n+\t\t\t\t$attachment_id = get_post_thumbnail_id( $this );\n+\t\t\t\t$file_path     = get_attached_file( $attachment_id );\n+\t\t\t\t$file_url      = wp_get_attachment_url( $attachment_id );\n+\t\t\t\t$upload_dir    = wp_upload_dir();\n+\t\t\t\t$base_dir      = $upload_dir['basedir'];\n+\n+\t\t\t\t\u002F\u002F Get file path with size.\n+\t\t\t\t$file_path_arr    = explode( '.', $file_path );\n+\t\t\t\t$file_path_length = count( $file_path_arr );\n+\t\t\t\t$extension        = end( $file_path_arr );\n+\t\t\t\tunset( $file_path_arr[ $file_path_length - 1 ] );\n+\t\t\t\t$file_path_join      = implode( '.', $file_path_arr );\n+\t\t\t\t$file_path_with_size = $file_path_join . '-' . $size[0] . 'x' . $size[1] . '.' . $extension;\n+\t\t\t\tif ( file_exists( $file_path_with_size ) ) {\n+\t\t\t\t\t$file_url_arr    = explode( '.', $file_url );\n+\t\t\t\t\t$file_url_length = count( $file_url_arr );\n+\t\t\t\t\t$url_extension   = end( $file_url_arr );\n+\t\t\t\t\tunset( $file_url_arr[ $file_url_length - 1 ] );\n+\t\t\t\t\t$file_url_join = implode( '.', $file_url_arr );\n+\t\t\t\t\t$image_url     = $file_url_join . '-' . $size[0] . 'x' . $size[1] . '.' . $url_extension;\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Custom crop size for image.\n+\t\t\t\t\t$resized_file = wp_get_image_editor( $file_path );\n+\n+\t\t\t\t\tif ( ! is_wp_error( $resized_file ) ) {\n+\t\t\t\t\t\t$resized_file->resize( $size[0], $size[1], true );\n+\t\t\t\t\t\t$resized_image = $resized_file->save( $file_path_with_size );\n+\n+\t\t\t\t\t\tif ( ! is_wp_error( $resized_image ) ) {\n+\t\t\t\t\t\t\t\u002F\u002F Build the URL for the resized image\n+\t\t\t\t\t\t\t$imag_dir  = $resized_image['path'];\n+\t\t\t\t\t\t\t$imag_dir  = str_replace( $base_dir, '', $imag_dir );\n+\t\t\t\t\t\t\t$image_url = $upload_dir['baseurl'] . $imag_dir;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( empty( $image_url ) ) {\n+\t\t\t$image_url = LearnPress::instance()->image( 'no-image.png' );\n+\t\t}\n+\n+\t\treturn $image_url;\n+\t}\n+\n+\t\u002F**\n+\t * Get meta value by key.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $default_value\n+\t * @param bool $single\n+\t *\n+\t * @return false|mixed\n+\t *\u002F\n+\tpublic function get_meta_value_by_key( string $key, $default_value = false, bool $single = true ) {\n+\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\n+\t\t\treturn maybe_unserialize( $this->meta_data->{$key} );\n+\t\t}\n+\n+\t\t$value = get_post_meta( $this->ID, $key, $single );\n+\t\tif ( empty( $value ) ) {\n+\t\t\t$value = $default_value;\n+\t\t}\n+\n+\t\t$value                   = maybe_unserialize( $value );\n+\t\t$this->meta_data->{$key} = $value;\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * Get meta value by key.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $value\n+\t * @param bool $fore_update\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @since 4.2.6.9\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function save_meta_value_by_key( string $key, $value, bool $fore_update = false ) {\n+\t\t\u002F\u002F Check permission\n+\t\tif ( ! $fore_update ) {\n+\t\t\tif ( ! $this->check_capabilities_update() ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\n+\t\t\t}\n+\t\t\t$this->check_capabilities_create_item_course();\n+\t\t}\n+\n+\t\t$this->meta_data->{$key} = $value;\n+\t\tupdate_post_meta( $this->ID, $key, $value );\n+\t}\n+\n+\t\u002F**\n+\t * Get categories of course.\n+\t *\n+\t * @return array|WP_Term[]\n+\t * @version 1.0.1\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function get_categories(): array {\n+\t\t$wpPost     = new WP_Post( $this );\n+\t\t$categories = get_the_terms( $wpPost, LP_COURSE_CATEGORY_TAX );\n+\t\tif ( ! $categories || $categories instanceof WP_Error ) {\n+\t\t\t$categories = array();\n+\t\t}\n+\n+\t\treturn $categories;\n+\t}\n+\n+\t\u002F**\n+\t * Get tags of course.\n+\t *\n+\t * @return array|WP_Term[]\n+\t * @version 1.0.1\n+\t * @since 4.2.7.2\n+\t *\u002F\n+\tpublic function get_tags(): array {\n+\t\t$wpPost = new WP_Post( $this );\n+\t\t$tags   = get_the_terms( $wpPost, LP_COURSE_TAXONOMY_TAG );\n+\t\tif ( ! $tags || $tags instanceof WP_Error ) {\n+\t\t\t$tags = array();\n+\t\t}\n+\n+\t\treturn $tags;\n+\t}\n+\n+\t\u002F**\n+\t * Get permalink of post\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_permalink(): string {\n+\t\t$permalink = get_permalink( $this );\n+\t\tif ( empty( $permalink ) ) {\n+\t\t\t$permalink = '';\n+\t\t}\n+\n+\t\treturn $permalink;\n+\t}\n+\n+\t\u002F**\n+\t * Get the content of WP\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_the_content(): string {\n+\t\t$content = get_the_content( null, false, $this );\n+\t\t$content = apply_filters( 'the_content', $content );\n+\t\t$content = str_replace( ']]>', ']]&gt;', $content );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get excerpt of WP\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_the_excerpt(): string {\n+\t\t$content = get_the_excerpt( $this );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get title of course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_the_title(): string {\n+\t\treturn get_the_title( $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get edit link of post\n+\t *\n+\t * @return string|null\n+\t * @since 4.2.7.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_edit_link() {\n+\t\treturn admin_url( \"post.php?post=$this->ID&action=edit\" );\n+\t\t\u002F**\n+\t\t * Not using get_edit_post_link() because it may not return the correct link in some cases\n+\t\t * get_post_type_object is null.\n+\t\t *\u002F\n+\t\t\u002F\u002Freturn get_edit_post_link( $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Get i18n status\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_status_i18n(): string {\n+\t\tswitch ( $this->post_status ) {\n+\t\t\tcase self::STATUS_PUBLISH:\n+\t\t\t\treturn __( 'Published', 'learnpress' );\n+\t\t\tcase self::STATUS_FEATURE:\n+\t\t\t\treturn __( 'Scheduled', 'learnpress' );\n+\t\t\tcase self::STATUS_TRASH:\n+\t\t\t\treturn __( 'Trash', 'learnpress' );\n+\t\t\tcase self::STATUS_DRAFT:\n+\t\t\t\treturn __( 'Draft', 'learnpress' );\n+\t\t\tcase self::STATUS_PRIVATE:\n+\t\t\t\treturn __( 'Private', 'learnpress' );\n+\t\t\tcase self::STATUS_PENDING:\n+\t\t\t\treturn __( 'Pending', 'learnpress' );\n+\t\t\tcase self::STATUS_AUTO_DRAFT:\n+\t\t\t\treturn __( 'Auto Draft', 'learnpress' );\n+\t\t\tcase self::VISIBILITY_PASSWORD:\n+\t\t\t\treturn __( 'Protected', 'learnpress' );\n+\n+\t\t\tdefault:\n+\t\t\t\treturn ucfirst( $this->post_status );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,270 +1,270 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\QuestionAnswersDB;\r\n-use LearnPress\\Filters\\QuestionAnswersFilter;\r\n-use LP_Cache;\r\n-use stdClass;\r\n-\r\n-\u002F**\r\n- * Class QuestionAnswerModel\r\n- * Answers for questions in LearnPress.\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionAnswerModel {\r\n-\tpublic $question_answer_id;\r\n-\tpublic $question_id;\r\n-\tpublic $title;\r\n-\tpublic $value;\r\n-\tpublic $order;\r\n-\tpublic $is_true;\r\n-\r\n-\t\u002F********** Fields not on table **********\u002F\r\n-\tpublic $meta_data;\r\n-\tpublic $is_get_all_metadata = false;\r\n-\r\n-\t\u002F** Constant *\u002F\r\n-\tconst META_KEY_BLANKS = '_blanks';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_null( $this->meta_data ) ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to QuestionAnswerModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return QuestionAnswerModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): QuestionAnswerModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question post model.\r\n-\t *\r\n-\t * @return QuestionPostModel|false\r\n-\t *\u002F\r\n-\tpublic function get_question_post_model() {\r\n-\t\treturn QuestionPostModel::find( $this->question_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find question answer by question_answer_id.\r\n-\t *\r\n-\t * @param int $question_answer_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return QuestionAnswerModel|false\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function find( int $question_answer_id, bool $check_cache = false ) {\r\n-\t\t$model                      = null;\r\n-\t\t$filter                     = new QuestionAnswersFilter();\r\n-\t\t$filter->question_answer_id = $question_answer_id;\r\n-\r\n-\t\t$key_cache = \"questionAnswerModel\u002Ffind\u002F{$question_answer_id}\";\r\n-\t\t$cache     = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$model = $cache->get_cache( $key_cache );\r\n-\t\t\tif ( $model instanceof QuestionAnswerModel ) {\r\n-\t\t\t\treturn $model;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$db = QuestionAnswersDB::getInstance();\r\n-\t\t$db->get_query_single_row( $filter );\r\n-\t\t$query_single_row = $db->get_question_answers( $filter );\r\n-\t\t$rs               = $db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\tif ( $rs instanceof stdClass ) {\r\n-\t\t\t$model = new static( $rs );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $model instanceof QuestionAnswerModel ) {\r\n-\t\t\t$cache->set_cache( $key_cache, $model );\r\n-\t\t}\r\n-\r\n-\t\treturn $model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all meta_data\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t *\u002F\r\n-\tpublic function get_all_metadata() {\r\n-\t\tif ( $this->is_get_all_metadata ) {\r\n-\t\t\treturn $this->meta_data;\r\n-\t\t}\r\n-\r\n-\t\t$questionPostModel = $this->get_question_post_model();\r\n-\t\tif ( $questionPostModel && $questionPostModel->get_type() === 'fill_in_blanks' ) {\r\n-\t\t\t$blanks                    = learn_press_get_question_answer_meta( $this->question_answer_id, '_blanks' );\r\n-\t\t\t$this->meta_data           = $blanks;\r\n-\t\t\t$this->is_get_all_metadata = true;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->meta_data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get meta value by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $value\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save_meta_value_by_key( string $key, $value ) {\r\n-\t\tif ( ! $this->meta_data instanceof stdClass ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\t\tupdate_metadata( 'learnpress_question_answer', $this->question_answer_id, $key, $value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities of current user to create question answer.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_create() {\r\n-\t\t$user = wp_get_current_user();\r\n-\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT . 's' ) ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to create answer.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check capabilities of current user to update question answer.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function check_capabilities_update() {\r\n-\t\t$user = wp_get_current_user();\r\n-\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT, $this->question_id ) ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database.\r\n-\t *\r\n-\t * If question_answer_id is empty, insert new data, else update data.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save() {\r\n-\t\t$db   = QuestionAnswersDB::getInstance();\r\n-\t\t$data = [];\r\n-\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\r\n-\t\t\t$data[ $property ] = $value;\r\n-\t\t}\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'data'       => $data,\r\n-\t\t\t'filter'     => new QuestionAnswersFilter(),\r\n-\t\t\t'table_name' => $db->tb_lp_question_answers,\r\n-\t\t];\r\n-\r\n-\t\t\u002F\u002F Check if exists course id.\r\n-\t\tif ( empty( $this->question_answer_id ) ) { \u002F\u002F Insert data.\r\n-\t\t\t$this->check_capabilities_create();\r\n-\t\t\t$args['key_auto_increment'] = 'question_answer_id';\r\n-\t\t\t$this->question_answer_id   = $db->insert_data( $args );\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$this->check_capabilities_update();\r\n-\t\t\t$args['where_key'] = 'question_answer_id';\r\n-\t\t\t$db->update_data( $args );\r\n-\t\t}\r\n-\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function check_valid_before_delete() {\r\n-\t\t$questionPostModel = $this->get_question_post_model();\r\n-\t\tif ( ! $questionPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->check_capabilities_update();\r\n-\r\n-\t\tif ( $questionPostModel->get_type() === 'single_choice' || $questionPostModel->get_type() === 'multi_choice' ) {\r\n-\t\t\t\u002F\u002F For single choice and multiple choice, at least two answer is required.\r\n-\t\t\t$filter              = new QuestionAnswersFilter();\r\n-\t\t\t$filter->question_id = $this->question_id;\r\n-\t\t\t$total_rows          = 0;\r\n-\t\t\t$filter->query_count = true;\r\n-\t\t\t$answers             = (int) QuestionAnswersDB::getInstance()->get_question_answers( $filter, $total_rows );\r\n-\t\t\tif ( $answers \u003C= 2 ) {\r\n-\t\t\t\tthrow new Exception( __( 'At least two answer is required.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t$this->check_valid_before_delete();\r\n-\r\n-\t\t$db                 = QuestionAnswersDB::getInstance();\r\n-\t\t$filter             = new QuestionAnswersFilter();\r\n-\t\t$filter->where[]    = $db->wpdb->prepare( 'AND question_answer_id = %d', $this->question_answer_id );\r\n-\t\t$filter->collection = $db->tb_lp_question_answers;\r\n-\t\t$db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t$lpQuizCache = new LP_Cache();\r\n-\t\t$key_cache   = \"questionAnswerModel\u002Ffind\u002F{$this->question_answer_id}\";\r\n-\t\t$lpQuizCache->clear( $key_cache );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+use Exception;\n+use LearnPress\\Databases\\QuestionAnswersDB;\n+use LearnPress\\Filters\\QuestionAnswersFilter;\n+use LP_Cache;\n+use stdClass;\n+\n+\u002F**\n+ * Class QuestionAnswerModel\n+ * Answers for questions in LearnPress.\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionAnswerModel {\n+\tpublic $question_answer_id;\n+\tpublic $question_id;\n+\tpublic $title;\n+\tpublic $value;\n+\tpublic $order;\n+\tpublic $is_true;\n+\n+\t\u002F********** Fields not on table **********\u002F\n+\tpublic $meta_data;\n+\tpublic $is_get_all_metadata = false;\n+\n+\t\u002F** Constant *\u002F\n+\tconst META_KEY_BLANKS = '_blanks';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\n+\t\tif ( is_null( $this->meta_data ) ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to QuestionAnswerModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return QuestionAnswerModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): QuestionAnswerModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get question post model.\n+\t *\n+\t * @return QuestionPostModel|false\n+\t *\u002F\n+\tpublic function get_question_post_model() {\n+\t\treturn QuestionPostModel::find( $this->question_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Find question answer by question_answer_id.\n+\t *\n+\t * @param int $question_answer_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return QuestionAnswerModel|false\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function find( int $question_answer_id, bool $check_cache = false ) {\n+\t\t$model                      = null;\n+\t\t$filter                     = new QuestionAnswersFilter();\n+\t\t$filter->question_answer_id = $question_answer_id;\n+\n+\t\t$key_cache = \"questionAnswerModel\u002Ffind\u002F{$question_answer_id}\";\n+\t\t$cache     = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$model = $cache->get_cache( $key_cache );\n+\t\t\tif ( $model instanceof QuestionAnswerModel ) {\n+\t\t\t\treturn $model;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$db = QuestionAnswersDB::getInstance();\n+\t\t$db->get_query_single_row( $filter );\n+\t\t$query_single_row = $db->get_question_answers( $filter );\n+\t\t$rs               = $db->wpdb->get_row( $query_single_row );\n+\n+\t\tif ( $rs instanceof stdClass ) {\n+\t\t\t$model = new static( $rs );\n+\t\t}\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $model instanceof QuestionAnswerModel ) {\n+\t\t\t$cache->set_cache( $key_cache, $model );\n+\t\t}\n+\n+\t\treturn $model;\n+\t}\n+\n+\t\u002F**\n+\t * Get all meta_data\n+\t *\n+\t * @return mixed|null\n+\t *\u002F\n+\tpublic function get_all_metadata() {\n+\t\tif ( $this->is_get_all_metadata ) {\n+\t\t\treturn $this->meta_data;\n+\t\t}\n+\n+\t\t$questionPostModel = $this->get_question_post_model();\n+\t\tif ( $questionPostModel && $questionPostModel->get_type() === 'fill_in_blanks' ) {\n+\t\t\t$blanks                    = learn_press_get_question_answer_meta( $this->question_answer_id, '_blanks' );\n+\t\t\t$this->meta_data           = $blanks;\n+\t\t\t$this->is_get_all_metadata = true;\n+\t\t}\n+\n+\t\treturn $this->meta_data;\n+\t}\n+\n+\t\u002F**\n+\t * Get meta value by key.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $value\n+\t *\n+\t * @return void\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save_meta_value_by_key( string $key, $value ) {\n+\t\tif ( ! $this->meta_data instanceof stdClass ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\n+\t\t$this->meta_data->{$key} = $value;\n+\t\tupdate_metadata( 'learnpress_question_answer', $this->question_answer_id, $key, $value );\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities of current user to create question answer.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_capabilities_create() {\n+\t\t$user = wp_get_current_user();\n+\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT . 's' ) ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to create answer.', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check capabilities of current user to update question answer.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function check_capabilities_update() {\n+\t\t$user = wp_get_current_user();\n+\t\tif ( ! user_can( $user, 'edit_' . LP_LESSON_CPT, $this->question_id ) ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to edit this item.', 'learnpress' ) );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database.\n+\t *\n+\t * If question_answer_id is empty, insert new data, else update data.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save() {\n+\t\t$db   = QuestionAnswersDB::getInstance();\n+\t\t$data = [];\n+\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\n+\t\t\t$data[ $property ] = $value;\n+\t\t}\n+\n+\t\t$args = [\n+\t\t\t'data'       => $data,\n+\t\t\t'filter'     => new QuestionAnswersFilter(),\n+\t\t\t'table_name' => $db->tb_lp_question_answers,\n+\t\t];\n+\n+\t\t\u002F\u002F Check if exists course id.\n+\t\tif ( empty( $this->question_answer_id ) ) { \u002F\u002F Insert data.\n+\t\t\t$this->check_capabilities_create();\n+\t\t\t$args['key_auto_increment'] = 'question_answer_id';\n+\t\t\t$this->question_answer_id   = $db->insert_data( $args );\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$this->check_capabilities_update();\n+\t\t\t$args['where_key'] = 'question_answer_id';\n+\t\t\t$db->update_data( $args );\n+\t\t}\n+\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function check_valid_before_delete() {\n+\t\t$questionPostModel = $this->get_question_post_model();\n+\t\tif ( ! $questionPostModel ) {\n+\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$this->check_capabilities_update();\n+\n+\t\tif ( $questionPostModel->get_type() === 'single_choice' || $questionPostModel->get_type() === 'multi_choice' ) {\n+\t\t\t\u002F\u002F For single choice and multiple choice, at least two answer is required.\n+\t\t\t$filter              = new QuestionAnswersFilter();\n+\t\t\t$filter->question_id = $this->question_id;\n+\t\t\t$total_rows          = 0;\n+\t\t\t$filter->query_count = true;\n+\t\t\t$answers             = (int) QuestionAnswersDB::getInstance()->get_question_answers( $filter, $total_rows );\n+\t\t\tif ( $answers \u003C= 2 ) {\n+\t\t\t\tthrow new Exception( __( 'At least two answer is required.', 'learnpress' ) );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t$this->check_valid_before_delete();\n+\n+\t\t$db                 = QuestionAnswersDB::getInstance();\n+\t\t$filter             = new QuestionAnswersFilter();\n+\t\t$filter->where[]    = $db->wpdb->prepare( 'AND question_answer_id = %d', $this->question_answer_id );\n+\t\t$filter->collection = $db->tb_lp_question_answers;\n+\t\t$db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t$lpQuizCache = new LP_Cache();\n+\t\t$key_cache   = \"questionAnswerModel\u002Ffind\u002F{$this->question_answer_id}\";\n+\t\t$lpQuizCache->clear( $key_cache );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostFIBModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostFIBModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostFIBModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostFIBModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,50 +1,50 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-\u002F**\r\n- * Class QuestionPostFIBModel\r\n- * Question type Fill in the Blank\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionPostFIBModel extends QuestionPostModel {\r\n-\tpublic $question_type = 'fill_in_blanks';\r\n-\r\n-\t\u002F**\r\n-\t * Create default answers for question\r\n-\t *\r\n-\t * @return array[]\r\n-\t *\u002F\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'value' => $this->random_value(),\r\n-\t\t\t\t'title' => '',\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert content to format [fib fill=\"\" id=\"\" ]\r\n-\t *\r\n-\t * @param string $content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function convert_content_from_editor_to_db( string $content ): string {\r\n-\t\t$pattern = '#\u003Cspan class=\"lp-question-fib-input\" data-id=\"([^\"]+)\">([^\u003C]+)\u003C\\\u002Fspan>#';\r\n-\r\n-\t\treturn preg_replace_callback(\r\n-\t\t\t$pattern,\r\n-\t\t\tfunction ( $matches ) {\r\n-\t\t\t\t$id   = $matches[1];\r\n-\t\t\t\t$fill = $matches[2];\r\n-\t\t\t\treturn '[fib fill=\"' . $fill . '\" id=\"' . $id . '\" ]';\r\n-\t\t\t},\r\n-\t\t\t$content\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+\u002F**\n+ * Class QuestionPostFIBModel\n+ * Question type Fill in the Blank\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionPostFIBModel extends QuestionPostModel {\n+\tpublic $question_type = 'fill_in_blanks';\n+\n+\t\u002F**\n+\t * Create default answers for question\n+\t *\n+\t * @return array[]\n+\t *\u002F\n+\tpublic function get_default_answers(): array {\n+\t\treturn array(\n+\t\t\tarray(\n+\t\t\t\t'value' => $this->random_value(),\n+\t\t\t\t'title' => '',\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Convert content to format [fib fill=\"\" id=\"\" ]\n+\t *\n+\t * @param string $content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function convert_content_from_editor_to_db( string $content ): string {\n+\t\t$pattern = '#\u003Cspan class=\"lp-question-fib-input\" data-id=\"([^\"]+)\">([^\u003C]+)\u003C\\\u002Fspan>#';\n+\n+\t\treturn preg_replace_callback(\n+\t\t\t$pattern,\n+\t\t\tfunction ( $matches ) {\n+\t\t\t\t$id   = $matches[1];\n+\t\t\t\t$fill = $matches[2];\n+\t\t\t\treturn '[fib fill=\"' . $fill . '\" id=\"' . $id . '\" ]';\n+\t\t\t},\n+\t\t\t$content\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,265 +1,276 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Question Post Model\r\n- * To replace class LP_Question old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-use ClassPress\\Helpers\\Debug;\r\n-use Exception;\r\n-use LearnPress\\Databases\\QuestionAnswersDB;\r\n-use LearnPress\\Filters\\QuestionAnswersFilter;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LP_Cache;\r\n-use LP_Question_Filter;\r\n-\r\n-class QuestionPostModel extends PostModel {\r\n-\t\u002F**\r\n-\t * @var string Post Type\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_QUESTION_CPT;\r\n-\r\n-\tprotected $answer_options = [];\r\n-\r\n-\tprivate $question_type = '';\r\n-\r\n-\t\u002F**\r\n-\t * Const meta key\r\n-\t *\u002F\r\n-\tconst META_KEY_TYPE        = '_lp_type';\r\n-\tconst META_KEY_MARK        = '_lp_mark';\r\n-\tconst META_KEY_HINT        = '_lp_hint';\r\n-\tconst META_KEY_EXPLANATION = '_lp_explanation';\r\n-\r\n-\t\u002F**\r\n-\t * Get post question by ID\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t *\u002F\r\n-\tpublic static function find( int $post_id, bool $check_cache = false ) {\r\n-\t\t$filter_post     = new LP_Question_Filter();\r\n-\t\t$filter_post->ID = $post_id;\r\n-\r\n-\t\t$key_cache   = \"questionPostModel\u002Ffind\u002F{$post_id}\";\r\n-\t\t$lpQuizCache = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$questionPostModel = $lpQuizCache->get_cache( $key_cache );\r\n-\t\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\r\n-\t\t\t\treturn $questionPostModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$questionPostModel = self::get_item_model_from_db( $filter_post );\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\r\n-\t\t\t$lpQuizCache->set_cache( $key_cache, $questionPostModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $questionPostModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get answer options for question\r\n-\t *\u002F\r\n-\tpublic function get_answer_option() {\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $this->answer_options ) ) {\r\n-\t\t\t\t$db                  = QuestionAnswersDB::getInstance();\r\n-\t\t\t\t$filter              = new QuestionAnswersFilter();\r\n-\t\t\t\t$filter->question_id = $this->get_id();\r\n-\t\t\t\t$filter->limit       = -1; \u002F\u002F Get all answers for question\r\n-\t\t\t\t$answers_rs          = $db->get_question_answers( $filter );\r\n-\t\t\t\t$answer_options      = [];\r\n-\r\n-\t\t\t\tforeach ( $answers_rs as $answer ) {\r\n-\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t\t$questionAnswerModel->get_all_metadata();\r\n-\t\t\t\t\t$answer_options[] = $questionAnswerModel;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->answer_options = $answer_options;\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\tDebug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->answer_options;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all types of question\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_types(): array {\r\n-\t\t$types = [\r\n-\t\t\t'true_or_false'  => esc_html__( 'True Or False', 'learnpress' ),\r\n-\t\t\t'multi_choice'   => esc_html__( 'Multi Choice', 'learnpress' ),\r\n-\t\t\t'single_choice'  => esc_html__( 'Single Choice', 'learnpress' ),\r\n-\t\t\t'fill_in_blanks' => esc_html__( 'Fill In Blanks', 'learnpress' ),\r\n-\t\t];\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fquestion-types', $types );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question object by type\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_question_obj_by_type( string $type = '' ): string {\r\n-\t\t$types = self::get_types();\r\n-\r\n-\t\tif ( ! array_key_exists( $type, $types ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\r\n-\t\tif ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) && $type === 'sorting_choice' ) {\r\n-\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\r\n-\t\t\t\treturn QuestionSortingChoiceModel::class;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase 'true_or_false':\r\n-\t\t\t\treturn QuestionPostTrueFalseModel::class;\r\n-\t\t\tcase 'multi_choice':\r\n-\t\t\t\treturn QuestionPostMultipleChoiceModel::class;\r\n-\t\t\tcase 'single_choice':\r\n-\t\t\t\treturn QuestionPostSingleChoiceModel::class;\r\n-\t\t\tcase 'fill_in_blanks':\r\n-\t\t\t\treturn QuestionPostFIBModel::class;\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn apply_filters( 'learn-press\u002Fquestion-object-by-type', '', $type );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get type question\r\n-\t *\r\n-\t * @return string|float\r\n-\t *\u002F\r\n-\tpublic function get_type() {\r\n-\t\tif ( empty( $this->question_type ) ) {\r\n-\t\t\t$this->question_type = $this->get_meta_value_by_key( self::META_KEY_TYPE, '' );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->question_type;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check type question is valid\r\n-\t *\r\n-\t * @param string $type\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic static function check_type_valid( string $type ): bool {\r\n-\t\t$types = self::get_types();\r\n-\r\n-\t\tif ( ! array_key_exists( $type, $types ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get type label by type\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_type_label(): string {\r\n-\t\t$type  = $this->get_type();\r\n-\t\t$types = self::get_types();\r\n-\r\n-\t\tif ( ! array_key_exists( $type, $types ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\treturn $types[ $type ];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_hint() {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_HINT, '' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_explanation() {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_EXPLANATION, '' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_mark() {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_MARK, 1 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create default answers for question\r\n-\t * For case question does not have answers yet.\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_default_answers(): array {\r\n-\t\t$answers = $this->get_default_answers();\r\n-\r\n-\t\tforeach ( $answers as $index => $answer ) {\r\n-\t\t\t$answer = array(\r\n-\t\t\t\t'question_id' => $this->get_id(),\r\n-\t\t\t\t'title'       => $answer['title'],\r\n-\t\t\t\t'value'       => $answer['value'] ?? '',\r\n-\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\r\n-\t\t\t\t'order'       => $index + 1,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t$questionAnswerModel->save();\r\n-\t\t\t$answers[ $index ]['question_answer_id'] = $questionAnswerModel->question_answer_id;\r\n-\t\t}\r\n-\r\n-\t\treturn $answers;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get default question list answers.\r\n-\t *\r\n-\t * @return array\r\n-\t * @move from class LP_Question old\r\n-\t *\u002F\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn [];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate random value\r\n-\t *\r\n-\t * @param int $length\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function random_value( int $length = 10 ): string {\r\n-\t\treturn substr( md5( uniqid( mt_rand(), true ) ), 0, $length );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Question Post Model\n+ * To replace class LP_Question old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+\n+namespace LearnPress\\Models\\Question;\n+\n+use ClassPress\\Helpers\\Debug;\n+use Exception;\n+use LearnPress\\Databases\\QuestionAnswersDB;\n+use LearnPress\\Filters\\QuestionAnswersFilter;\n+use LearnPress\\Models\\PostModel;\n+use LP_Cache;\n+use LP_Question_Filter;\n+\n+class QuestionPostModel extends PostModel {\n+\t\u002F**\n+\t * @var string Post Type\n+\t *\u002F\n+\tpublic $post_type = LP_QUESTION_CPT;\n+\n+\tprotected $answer_options = [];\n+\n+\tprivate $question_type = '';\n+\n+\t\u002F**\n+\t * Const meta key\n+\t *\u002F\n+\tconst META_KEY_TYPE        = '_lp_type';\n+\tconst META_KEY_MARK        = '_lp_mark';\n+\tconst META_KEY_HINT        = '_lp_hint';\n+\tconst META_KEY_EXPLANATION = '_lp_explanation';\n+\n+\t\u002F**\n+\t * Get post question by ID\n+\t *\n+\t * @param int $post_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t *\u002F\n+\tpublic static function find( int $post_id, bool $check_cache = false ) {\n+\t\t$filter_post     = new LP_Question_Filter();\n+\t\t$filter_post->ID = $post_id;\n+\n+\t\t$key_cache   = \"questionPostModel\u002Ffind\u002F{$post_id}\";\n+\t\t$lpQuizCache = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$questionPostModel = $lpQuizCache->get_cache( $key_cache );\n+\t\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\n+\t\t\t\treturn $questionPostModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$questionPostModel = self::get_item_model_from_db( $filter_post );\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\n+\t\t\t$lpQuizCache->set_cache( $key_cache, $questionPostModel );\n+\t\t}\n+\n+\t\treturn $questionPostModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get answer options for question\n+\t *\u002F\n+\tpublic function get_answer_option() {\n+\t\ttry {\n+\t\t\tif ( empty( $this->answer_options ) ) {\n+\t\t\t\t$db                  = QuestionAnswersDB::getInstance();\n+\t\t\t\t$filter              = new QuestionAnswersFilter();\n+\t\t\t\t$filter->question_id = $this->get_id();\n+\t\t\t\t$filter->limit       = -1; \u002F\u002F Get all answers for question\n+\t\t\t\t$answers_rs          = $db->get_question_answers( $filter );\n+\t\t\t\t$answer_options      = [];\n+\n+\t\t\t\tforeach ( $answers_rs as $answer ) {\n+\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t\t$questionAnswerModel->get_all_metadata();\n+\t\t\t\t\t$answer_options[] = $questionAnswerModel;\n+\t\t\t\t}\n+\n+\t\t\t\t$this->answer_options = $answer_options;\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\tDebug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $this->answer_options;\n+\t}\n+\n+\t\u002F**\n+\t * Get all types of question\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_types(): array {\n+\t\t$types = [\n+\t\t\t'true_or_false'  => esc_html__( 'True Or False', 'learnpress' ),\n+\t\t\t'multi_choice'   => esc_html__( 'Multi Choice', 'learnpress' ),\n+\t\t\t'single_choice'  => esc_html__( 'Single Choice', 'learnpress' ),\n+\t\t\t'fill_in_blanks' => esc_html__( 'Fill In Blanks', 'learnpress' ),\n+\t\t];\n+\n+\t\treturn apply_filters( 'learn-press\u002Fquestion-types', $types );\n+\t}\n+\n+\t\u002F**\n+\t * Get question object by type\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_question_obj_by_type( string $type = '' ): string {\n+\t\t$types = self::get_types();\n+\n+\t\tif ( ! array_key_exists( $type, $types ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\n+\t\tif ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) && $type === 'sorting_choice' ) {\n+\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\n+\t\t\t\treturn QuestionSortingChoiceModel::class;\n+\t\t\t}\n+\t\t}\n+\n+\t\tswitch ( $type ) {\n+\t\t\tcase 'true_or_false':\n+\t\t\t\treturn QuestionPostTrueFalseModel::class;\n+\t\t\tcase 'multi_choice':\n+\t\t\t\treturn QuestionPostMultipleChoiceModel::class;\n+\t\t\tcase 'single_choice':\n+\t\t\t\treturn QuestionPostSingleChoiceModel::class;\n+\t\t\tcase 'fill_in_blanks':\n+\t\t\t\treturn QuestionPostFIBModel::class;\n+\t\t\tdefault:\n+\t\t\t\treturn apply_filters( 'learn-press\u002Fquestion-object-by-type', '', $type );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get type question\n+\t *\n+\t * @return string|float\n+\t *\u002F\n+\tpublic function get_type() {\n+\t\tif ( empty( $this->question_type ) ) {\n+\t\t\t$this->question_type = $this->get_meta_value_by_key( self::META_KEY_TYPE, '' );\n+\t\t}\n+\n+\t\treturn $this->question_type;\n+\t}\n+\n+\t\u002F**\n+\t * @param $question_type\n+\t * @return $this\n+\t *\u002F\n+\tpublic function set_type($question_type)\n+\t{\n+\t\t$this->question_type = $question_type;\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Check type question is valid\n+\t *\n+\t * @param string $type\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic static function check_type_valid( string $type ): bool {\n+\t\t$types = self::get_types();\n+\n+\t\tif ( ! array_key_exists( $type, $types ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get type label by type\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_type_label(): string {\n+\t\t$type  = $this->get_type();\n+\t\t$types = self::get_types();\n+\n+\t\tif ( ! array_key_exists( $type, $types ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\treturn $types[ $type ];\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_hint() {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_HINT, '' );\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_explanation() {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_EXPLANATION, '' );\n+\t}\n+\n+\t\u002F**\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_mark() {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_MARK, 1 );\n+\t}\n+\n+\t\u002F**\n+\t * Create default answers for question\n+\t * For case question does not have answers yet.\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_default_answers(): array {\n+\t\t$answers = $this->get_default_answers();\n+\n+\t\tforeach ( $answers as $index => $answer ) {\n+\t\t\t$answer = array(\n+\t\t\t\t'question_id' => $this->get_id(),\n+\t\t\t\t'title'       => $answer['title'],\n+\t\t\t\t'value'       => $answer['value'] ?? '',\n+\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\n+\t\t\t\t'order'       => $index + 1,\n+\t\t\t);\n+\n+\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t$questionAnswerModel->save();\n+\t\t\t$answers[ $index ]['question_answer_id'] = $questionAnswerModel->question_answer_id;\n+\t\t}\n+\n+\t\treturn $answers;\n+\t}\n+\n+\t\u002F**\n+\t * Get default question list answers.\n+\t *\n+\t * @return array\n+\t * @move from class LP_Question old\n+\t *\u002F\n+\tpublic function get_default_answers(): array {\n+\t\treturn [];\n+\t}\n+\n+\t\u002F**\n+\t * Generate random value\n+\t *\n+\t * @param int $length\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function random_value( int $length = 10 ): string {\n+\t\treturn substr( md5( uniqid( mt_rand(), true ) ), 0, $length );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostMultipleChoiceModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostMultipleChoiceModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostMultipleChoiceModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostMultipleChoiceModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-\u002F**\r\n- * Class QuestionPostTrueFalseModel\r\n- * To replace class LP_Question old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionPostMultipleChoiceModel extends QuestionPostModel {\r\n-\tpublic $question_type = 'multi_choice';\r\n-\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => learn_press_random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 1,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => learn_press_random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 2,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => learn_press_random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 3,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => learn_press_random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Four option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 4,\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+\u002F**\n+ * Class QuestionPostTrueFalseModel\n+ * To replace class LP_Question old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionPostMultipleChoiceModel extends QuestionPostModel {\n+\tpublic $question_type = 'multi_choice';\n+\n+\tpublic function get_default_answers(): array {\n+\t\treturn array(\n+\t\t\tarray(\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => learn_press_random_value(),\n+\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\n+\t\t\t\t'order'   => 1,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => learn_press_random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\n+\t\t\t\t'order'   => 2,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => learn_press_random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\n+\t\t\t\t'order'   => 3,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => learn_press_random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Four option', 'learnpress' ),\n+\t\t\t\t'order'   => 4,\n+\t\t\t),\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostSingleChoiceModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostSingleChoiceModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostSingleChoiceModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostSingleChoiceModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-\u002F**\r\n- * Class QuestionPostTrueFalseModel\r\n- * To replace class LP_Question old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionPostSingleChoiceModel extends QuestionPostModel {\r\n-\tpublic $question_type = 'single_choice';\r\n-\r\n-\t\u002F**\r\n-\t * Create default answers for question\r\n-\t *\r\n-\t * @return array[]\r\n-\t *\u002F\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 1,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 2,\r\n-\t\t\t),\r\n-\t\t\tarray(\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\r\n-\t\t\t\t'order'   => 3,\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+\u002F**\n+ * Class QuestionPostTrueFalseModel\n+ * To replace class LP_Question old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionPostSingleChoiceModel extends QuestionPostModel {\n+\tpublic $question_type = 'single_choice';\n+\n+\t\u002F**\n+\t * Create default answers for question\n+\t *\n+\t * @return array[]\n+\t *\u002F\n+\tpublic function get_default_answers(): array {\n+\t\treturn array(\n+\t\t\tarray(\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\n+\t\t\t\t'order'   => 1,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\n+\t\t\t\t'order'   => 2,\n+\t\t\t),\n+\t\t\tarray(\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\n+\t\t\t\t'order'   => 3,\n+\t\t\t),\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostTrueFalseModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostTrueFalseModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostTrueFalseModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionPostTrueFalseModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-\u002F**\r\n- * Class QuestionPostTrueFalseModel\r\n- * To replace class LP_Question old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionPostTrueFalseModel extends QuestionPostModel {\r\n-\tpublic $question_type = 'true_or_false';\r\n-\r\n-\t\u002F**\r\n-\t * Get true or false default answers.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn [\r\n-\t\t\t[\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'True', 'learnpress' ),\r\n-\t\t\t\t'order'   => 1,\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'is_true' => '',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'False', 'learnpress' ),\r\n-\t\t\t\t'order'   => 2,\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+\u002F**\n+ * Class QuestionPostTrueFalseModel\n+ * To replace class LP_Question old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionPostTrueFalseModel extends QuestionPostModel {\n+\tpublic $question_type = 'true_or_false';\n+\n+\t\u002F**\n+\t * Get true or false default answers.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_default_answers(): array {\n+\t\treturn [\n+\t\t\t[\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'True', 'learnpress' ),\n+\t\t\t\t'order'   => 1,\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'is_true' => '',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'False', 'learnpress' ),\n+\t\t\t\t'order'   => 2,\n+\t\t\t],\n+\t\t];\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionSortingChoiceModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionSortingChoiceModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuestion\u002FQuestionSortingChoiceModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuestion\u002FQuestionSortingChoiceModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Question;\r\n-\r\n-\u002F**\r\n- * Class QuestionPostTrueFalseModel\r\n- * To replace class LP_Question old\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuestionSortingChoiceModel extends QuestionPostModel {\r\n-\tpublic $question_type = 'sorting_choice';\r\n-\r\n-\t\u002F**\r\n-\t * Get true or false default answers.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_default_answers(): array {\r\n-\t\treturn [\r\n-\t\t\t[\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t'value'   => $this->random_value(),\r\n-\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\r\n-\t\t\t],\r\n-\t\t];\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Question;\n+\n+\u002F**\n+ * Class QuestionPostTrueFalseModel\n+ * To replace class LP_Question old\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.9\n+ *\u002F\n+class QuestionSortingChoiceModel extends QuestionPostModel {\n+\tpublic $question_type = 'sorting_choice';\n+\n+\t\u002F**\n+\t * Get true or false default answers.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_default_answers(): array {\n+\t\treturn [\n+\t\t\t[\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'First option', 'learnpress' ),\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Second option', 'learnpress' ),\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t'value'   => $this->random_value(),\n+\t\t\t\t'title'   => esc_html__( 'Third option', 'learnpress' ),\n+\t\t\t],\n+\t\t];\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,239 +1,239 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\Quiz;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\QuizQuestionsDB;\r\n-use LearnPress\\Filters\\QuizQuestionsFilter;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LP_Cache;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class QuizQuestionModel\r\n- *\r\n- * Handle all method about quiz question.\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.9\r\n- *\u002F\r\n-class QuizQuestionModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $quiz_question_id = 0;\r\n-\t\u002F**\r\n-\t * Title of the section\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $quiz_id = 0;\r\n-\t\u002F**\r\n-\t * Foreign key, Course ID\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_id = 0;\r\n-\t\u002F**\r\n-\t * Order of the section\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $question_order = 0;\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to QuizQuestionModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return QuizQuestionModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): QuizQuestionModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get section id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_quiz_question_id(): int {\r\n-\t\treturn $this->quiz_question_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return false|QuizPostModel\r\n-\t *\u002F\r\n-\tpublic function get_quiz_post_model() {\r\n-\t\treturn QuizPostModel::find( $this->quiz_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return false|QuestionPostModel\r\n-\t *\u002F\r\n-\tpublic function get_question_post_model() {\r\n-\t\treturn QuestionPostModel::find( $this->question_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get quizQuestionsModel by quiz_id and question_id.\r\n-\t *\r\n-\t * @return false|QuizQuestionModel\r\n-\t *\u002F\r\n-\tpublic static function find( int $quiz_id, int $question_id, $check_cache = true ) {\r\n-\t\t$filter              = new QuizQuestionsFilter();\r\n-\t\t$filter->quiz_id     = $quiz_id;\r\n-\t\t$filter->question_id = $question_id;\r\n-\t\t$key_cache           = \"quizQuestion\u002Ffind\u002F{$quiz_id}\u002F{$question_id}\";\r\n-\t\t$cache               = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$model = $cache->get_cache( $key_cache );\r\n-\t\t\tif ( $model instanceof QuizQuestionModel ) {\r\n-\t\t\t\treturn $model;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$model = static::get_item_model_from_db( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $model instanceof QuizQuestionModel ) {\r\n-\t\t\t$cache->set_cache( $key_cache, $model );\r\n-\t\t}\r\n-\r\n-\t\treturn $model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post from database.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return QuizQuestionModel.\r\n-\t *\r\n-\t * @param QuizQuestionsFilter $filter\r\n-\t *\r\n-\t * @return QuizQuestionModel|false|static\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_item_model_from_db( QuizQuestionsFilter $filter ) {\r\n-\t\t$db    = QuizQuestionsDB::getInstance();\r\n-\t\t$model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $db->get_quiz_questions( $filter );\r\n-\t\t\t$rs               = $db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\t\tif ( $rs instanceof stdClass ) {\r\n-\t\t\t\t$model = new static( $rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save data to table quiz_questions.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function save(): QuizQuestionModel {\r\n-\t\t$quizPostModel = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizPostModel->check_capabilities_update_item_course();\r\n-\r\n-\t\t$db = QuizQuestionsDB::getInstance();\r\n-\r\n-\t\t$data = [];\r\n-\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\r\n-\t\t\t$data[ $property ] = $value;\r\n-\t\t}\r\n-\r\n-\t\tif ( $data['quiz_question_id'] === 0 ) { \u002F\u002F Insert data.\r\n-\t\t\t$quiz_question_id       = $db->insert_data( $data );\r\n-\t\t\t$this->quiz_question_id = $quiz_question_id;\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$db->update_data( $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete row\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$quizPostModel = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizPostModel->check_capabilities_update_item_course();\r\n-\r\n-\t\t$db                 = QuizQuestionsDB::getInstance();\r\n-\t\t$filter             = new QuizQuestionsFilter();\r\n-\t\t$filter->where[]    = $db->wpdb->prepare( 'AND quiz_question_id = %d', $this->quiz_question_id );\r\n-\t\t$filter->collection = $db->tb_lp_quiz_questions;\r\n-\t\t$db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Clear cache\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t$key_cache       = \"quizQuestion\u002Ffind\u002F{$this->quiz_id}\u002F{$this->question_id}\";\r\n-\t\t$lp_course_cache = new LP_Cache();\r\n-\t\t$lp_course_cache->clear( $key_cache );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\Quiz;\n+\n+use Exception;\n+use LearnPress\\Databases\\QuizQuestionsDB;\n+use LearnPress\\Filters\\QuizQuestionsFilter;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LP_Cache;\n+use stdClass;\n+use Throwable;\n+\n+\u002F**\n+ * Class QuizQuestionModel\n+ *\n+ * Handle all method about quiz question.\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.9\n+ *\u002F\n+class QuizQuestionModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $quiz_question_id = 0;\n+\t\u002F**\n+\t * Title of the section\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $quiz_id = 0;\n+\t\u002F**\n+\t * Foreign key, Course ID\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_id = 0;\n+\t\u002F**\n+\t * Order of the section\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $question_order = 0;\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to QuizQuestionModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return QuizQuestionModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): QuizQuestionModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get section id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_quiz_question_id(): int {\n+\t\treturn $this->quiz_question_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return false|QuizPostModel\n+\t *\u002F\n+\tpublic function get_quiz_post_model() {\n+\t\treturn QuizPostModel::find( $this->quiz_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return false|QuestionPostModel\n+\t *\u002F\n+\tpublic function get_question_post_model() {\n+\t\treturn QuestionPostModel::find( $this->question_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get quizQuestionsModel by quiz_id and question_id.\n+\t *\n+\t * @return false|QuizQuestionModel\n+\t *\u002F\n+\tpublic static function find( int $quiz_id, int $question_id, $check_cache = true ) {\n+\t\t$filter              = new QuizQuestionsFilter();\n+\t\t$filter->quiz_id     = $quiz_id;\n+\t\t$filter->question_id = $question_id;\n+\t\t$key_cache           = \"quizQuestion\u002Ffind\u002F{$quiz_id}\u002F{$question_id}\";\n+\t\t$cache               = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$model = $cache->get_cache( $key_cache );\n+\t\t\tif ( $model instanceof QuizQuestionModel ) {\n+\t\t\t\treturn $model;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$model = static::get_item_model_from_db( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $model instanceof QuizQuestionModel ) {\n+\t\t\t$cache->set_cache( $key_cache, $model );\n+\t\t}\n+\n+\t\treturn $model;\n+\t}\n+\n+\t\u002F**\n+\t * Get post from database.\n+\t * If not exists, return false.\n+\t * If exists, return QuizQuestionModel.\n+\t *\n+\t * @param QuizQuestionsFilter $filter\n+\t *\n+\t * @return QuizQuestionModel|false|static\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_item_model_from_db( QuizQuestionsFilter $filter ) {\n+\t\t$db    = QuizQuestionsDB::getInstance();\n+\t\t$model = false;\n+\n+\t\ttry {\n+\t\t\t$db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $db->get_quiz_questions( $filter );\n+\t\t\t$rs               = $db->wpdb->get_row( $query_single_row );\n+\n+\t\t\tif ( $rs instanceof stdClass ) {\n+\t\t\t\t$model = new static( $rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $model;\n+\t}\n+\n+\t\u002F**\n+\t * Save data to table quiz_questions.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function save(): QuizQuestionModel {\n+\t\t$quizPostModel = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel ) {\n+\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizPostModel->check_capabilities_update_item_course();\n+\n+\t\t$db = QuizQuestionsDB::getInstance();\n+\n+\t\t$data = [];\n+\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\n+\t\t\t$data[ $property ] = $value;\n+\t\t}\n+\n+\t\tif ( $data['quiz_question_id'] === 0 ) { \u002F\u002F Insert data.\n+\t\t\t$quiz_question_id       = $db->insert_data( $data );\n+\t\t\t$this->quiz_question_id = $quiz_question_id;\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$db->update_data( $data );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete row\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t\u002F\u002F Check permission\n+\t\t$quizPostModel = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel ) {\n+\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizPostModel->check_capabilities_update_item_course();\n+\n+\t\t$db                 = QuizQuestionsDB::getInstance();\n+\t\t$filter             = new QuizQuestionsFilter();\n+\t\t$filter->where[]    = $db->wpdb->prepare( 'AND quiz_question_id = %d', $this->quiz_question_id );\n+\t\t$filter->collection = $db->tb_lp_quiz_questions;\n+\t\t$db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Clear cache\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t$key_cache       = \"quizQuestion\u002Ffind\u002F{$this->quiz_id}\u002F{$this->question_id}\";\n+\t\t$lp_course_cache = new LP_Cache();\n+\t\t$lp_course_cache->clear( $key_cache );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuizPostModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuizPostModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FQuizPostModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FQuizPostModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,393 +1,393 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class Quiz Post Model\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.7.6\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\QuizQuestionsDB;\r\n-use LearnPress\\Models\\Question\\QuestionAnswerModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\Models\\Quiz\\QuizQuestionModel;\r\n-use LP_Cache;\r\n-use LP_Question;\r\n-use LP_Question_DB;\r\n-use LP_Question_Filter;\r\n-use LP_Quiz;\r\n-use LP_Quiz_Filter;\r\n-use Throwable;\r\n-\r\n-\r\n-class QuizPostModel extends PostModel {\r\n-\t\u002F**\r\n-\t * @var string Post Type\r\n-\t *\u002F\r\n-\tpublic $post_type = LP_QUIZ_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * Const meta key\r\n-\t *\u002F\r\n-\tconst META_KEY_PASSING_GRADE        = '_lp_passing_grade';\r\n-\tconst META_KEY_RETAKE_COUNT         = '_lp_retake_count';\r\n-\tconst META_KEY_DURATION             = '_lp_duration';\r\n-\tconst META_KEY_PAGINATION           = '_lp_pagination';\r\n-\tconst META_KEY_REVIEW               = '_lp_review';\r\n-\tconst META_KEY_SHOW_CORRECT_REVIEW  = '_lp_show_correct_review';\r\n-\tconst META_KEY_INSTANT_CHECK        = '_lp_instant_check';\r\n-\tconst META_KEY_NEGATIVE_MARKING     = '_lp_negative_marking';\r\n-\tconst META_KEY_MINUS_SKIP_QUESTIONS = '_lp_minus_skip_questions';\r\n-\r\n-\t\u002F**\r\n-\t * Get post assignment by ID\r\n-\t *\r\n-\t * @param int $post_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t *\u002F\r\n-\tpublic static function find( int $post_id, bool $check_cache = false ) {\r\n-\t\t$filter_post     = new LP_Quiz_Filter();\r\n-\t\t$filter_post->ID = $post_id;\r\n-\r\n-\t\t$key_cache   = \"quizPostModel\u002Ffind\u002F{$post_id}\";\r\n-\t\t$lpQuizCache = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$quizPostModel = $lpQuizCache->get_cache( $key_cache );\r\n-\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t\treturn $quizPostModel;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$quizPostModel = self::get_item_model_from_db( $filter_post );\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t$lpQuizCache->set_cache( $key_cache, $quizPostModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $quizPostModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get max mark of assignment\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_duration(): string {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_DURATION, '0 minute' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get max mark of assignment\r\n-\t *\r\n-\t * @return float\r\n-\t *\u002F\r\n-\tpublic function get_passing_grade(): float {\r\n-\t\treturn (float) $this->get_meta_value_by_key( self::META_KEY_PASSING_GRADE, 80 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get retake count option.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_retake_count(): int {\r\n-\t\treturn (int) $this->get_meta_value_by_key( self::META_KEY_RETAKE_COUNT, 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all question's ids of the quiz.\r\n-\t *\r\n-\t * @param array $statuses\r\n-\t *\r\n-\t * @return int[]\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.7.6\r\n-\t *\u002F\r\n-\tpublic function get_question_ids( array $statuses = [ 'publish' ] ): array {\r\n-\t\t$lp_question_db = LP_Question_DB::getInstance();\r\n-\t\t$question_ids   = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter              = new LP_Question_Filter();\r\n-\t\t\t$filter->ID          = $this->get_id();\r\n-\t\t\t$filter->post_status = $statuses;\r\n-\t\t\t$question_ids        = $lp_question_db->get_list_question_ids_of_quiz( $filter );\r\n-\r\n-\t\t\t\u002F\u002F Hook old\r\n-\t\t\tif ( has_filter( 'learn-press\u002Fquiz\u002Fget-question-ids' ) ) {\r\n-\t\t\t\t$quiz_old              = new LP_Quiz( $this->get_id() );\r\n-\t\t\t\t$course_id_of_quiz_old = $quiz_old->get_course_id();\r\n-\r\n-\t\t\t\t$question_ids = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fquiz\u002Fget-question-ids',\r\n-\t\t\t\t\t$question_ids,\r\n-\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t$course_id_of_quiz_old\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question_ids = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fquiz\u002Fquestion-ids',\r\n-\t\t\t\t$question_ids,\r\n-\t\t\t\t$this,\r\n-\t\t\t\t$statuses\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! is_array( $question_ids ) ) {\r\n-\t\t\t\t$question_ids = array();\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $question_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number questions in quiz.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function count_questions(): int {\r\n-\t\t$size      = 0;\r\n-\t\t$questions = $this->get_question_ids();\r\n-\r\n-\t\tif ( $questions ) {\r\n-\t\t\t$size = sizeof( $questions );\r\n-\t\t}\r\n-\r\n-\t\treturn (int) apply_filters( 'learn-press\u002Fquiz\u002Fcount-questions', $size, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Mark of the quiz (total mark questions).\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t *\u002F\r\n-\tpublic function get_mark() {\r\n-\t\t$questions = $this->get_question_ids();\r\n-\t\t$mark      = 0;\r\n-\r\n-\t\tforeach ( $questions as $question_id ) {\r\n-\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\tif ( $question ) {\r\n-\t\t\t\t$mark += $question->get_mark();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fquiz-mark', $mark, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option instant check has enabled.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_instant_check(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_INSTANT_CHECK, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option negative marking has enabled.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_negative_marking(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_NEGATIVE_MARKING, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option minus skip questions has enabled.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_minus_skip_questions(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_MINUS_SKIP_QUESTIONS, 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check option minus skip questions has enabled.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_show_correct_review(): bool {\r\n-\t\treturn $this->get_meta_value_by_key( self::META_KEY_SHOW_CORRECT_REVIEW, 'yes' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create question and add to quiz.\r\n-\t *\r\n-\t * @param array $data [ question_title, question_type, question_content ]\r\n-\t *\r\n-\t * @return QuizQuestionModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function create_question_and_add( array $data ): QuizQuestionModel {\r\n-\t\t$question_title   = $data['question_title'] ?? '';\r\n-\t\t$question_type    = $data['question_type'] ?? '';\r\n-\t\t$question_content = $data['question_content'] ?? '';\r\n-\t\t$question_options = $data['question_options'] ?? [];\r\n-\r\n-\t\tif ( empty( $question_title ) ) {\r\n-\t\t\tthrow new Exception( __( 'Question title is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! QuestionPostModel::check_type_valid( $question_type ) ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid question type', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create question\r\n-\t\t$questionPostModelNew               = new QuestionPostModel();\r\n-\t\t$questionPostModelNew->post_title   = $question_title;\r\n-\t\t$questionPostModelNew->post_content = $question_content;\r\n-\t\t$questionPostModelNew->post_status  = 'publish';\r\n-\t\t$questionPostModelNew->post_author  = get_current_user_id();\r\n-\t\t$questionPostModelNew->save();\r\n-\t\t$questionPostModelNew->save_meta_value_by_key(\r\n-\t\t\tQuestionPostModel::META_KEY_TYPE,\r\n-\t\t\t$question_type\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Get question object by type\r\n-\t\t$questionClassName = $questionPostModelNew::get_question_obj_by_type( $question_type );\r\n-\t\tif ( class_exists( $questionClassName ) ) {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var QuestionPostModel $questionPostTyeModel\r\n-\t\t\t *\u002F\r\n-\t\t\t$questionPostTyeModel = new $questionClassName( $questionPostModelNew );\r\n-\t\t\tif ( ! empty( $question_options ) ) {\r\n-\t\t\t\tforeach ( $question_options as $index => $answer ) {\r\n-\t\t\t\t\t$answer = array(\r\n-\t\t\t\t\t\t'question_id' => $questionPostTyeModel->get_id(),\r\n-\t\t\t\t\t\t'title'       => $answer['title'],\r\n-\t\t\t\t\t\t'value'       => $questionPostTyeModel->random_value(),\r\n-\t\t\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\r\n-\t\t\t\t\t\t'order'       => $index + 1,\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t\t$questionAnswerModel->save();\r\n-\t\t\t\t\t$answers[ $index ]['question_answer_id'] = $questionAnswerModel->question_answer_id;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( method_exists( $questionPostTyeModel, 'create_default_answers' ) ) {\r\n-\t\t\t\t$questionPostTyeModel->create_default_answers();\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tthrow new Exception( __( 'Question type not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizQuestionsDB = QuizQuestionsDB::getInstance();\r\n-\t\t$max_order       = $quizQuestionsDB->get_last_number_order( $this->get_id() );\r\n-\r\n-\t\t\u002F\u002F Add question to quiz\r\n-\t\t$quizQuestionModel                 = new QuizQuestionModel();\r\n-\t\t$quizQuestionModel->quiz_id        = $this->get_id();\r\n-\t\t$quizQuestionModel->question_id    = $questionPostModelNew->get_id();\r\n-\t\t$quizQuestionModel->question_order = $max_order + 1;\r\n-\t\t$quizQuestionModel->save();\r\n-\r\n-\t\treturn $quizQuestionModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add questions exists (from Question Bank) to quiz.\r\n-\t *\r\n-\t * @param array $data [ 'question_ids' => [] ]\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function add_questions_to_quiz( array $data ): array {\r\n-\t\t$this->check_capabilities_update_item_course();\r\n-\r\n-\t\t$question_ids = $data['question_ids'] ?? [];\r\n-\t\tif ( empty( $question_ids ) ) {\r\n-\t\t\tthrow new Exception( __( 'Question IDs are required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quiz_questions_added = [];\r\n-\t\tforeach ( $question_ids as $question_id ) {\r\n-\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\t\tif ( ! $questionPostModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if question already exists in quiz\r\n-\t\t\t$quizQuestionModel = QuizQuestionModel::find( $this->get_id(), $question_id, true );\r\n-\t\t\tif ( $quizQuestionModel ) {\r\n-\t\t\t\tcontinue; \u002F\u002F Skip if question already exists in quiz\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quizQuestionsDB = QuizQuestionsDB::getInstance();\r\n-\t\t\t$max_order       = $quizQuestionsDB->get_last_number_order( $this->get_id() );\r\n-\r\n-\t\t\t\u002F\u002F Add question to quiz\r\n-\t\t\t$quizQuestionModel                 = new QuizQuestionModel();\r\n-\t\t\t$quizQuestionModel->quiz_id        = $this->get_id();\r\n-\t\t\t$quizQuestionModel->question_id    = $question_id;\r\n-\t\t\t$quizQuestionModel->question_order = $max_order + 1;\r\n-\t\t\t$quizQuestionModel->save();\r\n-\r\n-\t\t\t$quiz_questions_added[] = $quizQuestionModel;\r\n-\t\t}\r\n-\r\n-\t\treturn $quiz_questions_added;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update question positions in quiz.\r\n-\t *\r\n-\t * @param int[] $data [ 'question_ids' => [] ]\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_question_position( array $data ) {\r\n-\t\t$this->check_capabilities_update_item_course();\r\n-\r\n-\t\t$question_ids = $data['question_ids'] ?? [];\r\n-\t\tif ( empty( $question_ids ) ) {\r\n-\t\t\tthrow new Exception( __( 'Question IDs are required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$question_ids = $data['question_ids'] ?? [];\r\n-\t\tQuizQuestionsDB::getInstance()->update_question_position( $question_ids, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove question from quiz.\r\n-\t *\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function remove_question_from_quiz( int $question_id ) {\r\n-\t\t$this->check_capabilities_update_item_course();\r\n-\r\n-\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\tif ( ! $questionPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizQuestionModel = QuizQuestionModel::find( $this->get_id(), $question_id );\r\n-\t\tif ( ! $quizQuestionModel ) {\r\n-\t\t\tthrow new Exception( __( 'Question not found in quiz', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizQuestionModel->delete();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class Quiz Post Model\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.7.6\n+ *\u002F\n+\n+namespace LearnPress\\Models;\n+\n+use Exception;\n+use LearnPress\\Databases\\QuizQuestionsDB;\n+use LearnPress\\Models\\Question\\QuestionAnswerModel;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\Models\\Quiz\\QuizQuestionModel;\n+use LP_Cache;\n+use LP_Question;\n+use LP_Question_DB;\n+use LP_Question_Filter;\n+use LP_Quiz;\n+use LP_Quiz_Filter;\n+use Throwable;\n+\n+\n+class QuizPostModel extends PostModel {\n+\t\u002F**\n+\t * @var string Post Type\n+\t *\u002F\n+\tpublic $post_type = LP_QUIZ_CPT;\n+\n+\t\u002F**\n+\t * Const meta key\n+\t *\u002F\n+\tconst META_KEY_PASSING_GRADE        = '_lp_passing_grade';\n+\tconst META_KEY_RETAKE_COUNT         = '_lp_retake_count';\n+\tconst META_KEY_DURATION             = '_lp_duration';\n+\tconst META_KEY_PAGINATION           = '_lp_pagination';\n+\tconst META_KEY_REVIEW               = '_lp_review';\n+\tconst META_KEY_SHOW_CORRECT_REVIEW  = '_lp_show_correct_review';\n+\tconst META_KEY_INSTANT_CHECK        = '_lp_instant_check';\n+\tconst META_KEY_NEGATIVE_MARKING     = '_lp_negative_marking';\n+\tconst META_KEY_MINUS_SKIP_QUESTIONS = '_lp_minus_skip_questions';\n+\n+\t\u002F**\n+\t * Get post assignment by ID\n+\t *\n+\t * @param int $post_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t *\u002F\n+\tpublic static function find( int $post_id, bool $check_cache = false ) {\n+\t\t$filter_post     = new LP_Quiz_Filter();\n+\t\t$filter_post->ID = $post_id;\n+\n+\t\t$key_cache   = \"quizPostModel\u002Ffind\u002F{$post_id}\";\n+\t\t$lpQuizCache = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$quizPostModel = $lpQuizCache->get_cache( $key_cache );\n+\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t\treturn $quizPostModel;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$quizPostModel = self::get_item_model_from_db( $filter_post );\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t$lpQuizCache->set_cache( $key_cache, $quizPostModel );\n+\t\t}\n+\n+\t\treturn $quizPostModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get max mark of assignment\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_duration(): string {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_DURATION, '0 minute' );\n+\t}\n+\n+\t\u002F**\n+\t * Get max mark of assignment\n+\t *\n+\t * @return float\n+\t *\u002F\n+\tpublic function get_passing_grade(): float {\n+\t\treturn (float) $this->get_meta_value_by_key( self::META_KEY_PASSING_GRADE, 80 );\n+\t}\n+\n+\t\u002F**\n+\t * Get retake count option.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_retake_count(): int {\n+\t\treturn (int) $this->get_meta_value_by_key( self::META_KEY_RETAKE_COUNT, 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Get all question's ids of the quiz.\n+\t *\n+\t * @param array $statuses\n+\t *\n+\t * @return int[]\n+\t * @version 1.0.0\n+\t * @since 4.2.7.6\n+\t *\u002F\n+\tpublic function get_question_ids( array $statuses = [ 'publish' ] ): array {\n+\t\t$lp_question_db = LP_Question_DB::getInstance();\n+\t\t$question_ids   = [];\n+\n+\t\ttry {\n+\t\t\t$filter              = new LP_Question_Filter();\n+\t\t\t$filter->ID          = $this->get_id();\n+\t\t\t$filter->post_status = $statuses;\n+\t\t\t$question_ids        = $lp_question_db->get_list_question_ids_of_quiz( $filter );\n+\n+\t\t\t\u002F\u002F Hook old\n+\t\t\tif ( has_filter( 'learn-press\u002Fquiz\u002Fget-question-ids' ) ) {\n+\t\t\t\t$quiz_old              = new LP_Quiz( $this->get_id() );\n+\t\t\t\t$course_id_of_quiz_old = $quiz_old->get_course_id();\n+\n+\t\t\t\t$question_ids = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fquiz\u002Fget-question-ids',\n+\t\t\t\t\t$question_ids,\n+\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t$course_id_of_quiz_old\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$question_ids = apply_filters(\n+\t\t\t\t'learn-press\u002Fquiz\u002Fquestion-ids',\n+\t\t\t\t$question_ids,\n+\t\t\t\t$this,\n+\t\t\t\t$statuses\n+\t\t\t);\n+\n+\t\t\tif ( ! is_array( $question_ids ) ) {\n+\t\t\t\t$question_ids = array();\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $question_ids;\n+\t}\n+\n+\t\u002F**\n+\t * Get number questions in quiz.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function count_questions(): int {\n+\t\t$size      = 0;\n+\t\t$questions = $this->get_question_ids();\n+\n+\t\tif ( $questions ) {\n+\t\t\t$size = sizeof( $questions );\n+\t\t}\n+\n+\t\treturn (int) apply_filters( 'learn-press\u002Fquiz\u002Fcount-questions', $size, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Get Mark of the quiz (total mark questions).\n+\t *\n+\t * @return mixed|null\n+\t *\u002F\n+\tpublic function get_mark() {\n+\t\t$questions = $this->get_question_ids();\n+\t\t$mark      = 0;\n+\n+\t\tforeach ( $questions as $question_id ) {\n+\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\tif ( $question ) {\n+\t\t\t\t$mark += $question->get_mark();\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fquiz-mark', $mark, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Check option instant check has enabled.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_instant_check(): bool {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_INSTANT_CHECK, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check option negative marking has enabled.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_negative_marking(): bool {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_NEGATIVE_MARKING, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check option minus skip questions has enabled.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_minus_skip_questions(): bool {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_MINUS_SKIP_QUESTIONS, 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Check option minus skip questions has enabled.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_show_correct_review(): bool {\n+\t\treturn $this->get_meta_value_by_key( self::META_KEY_SHOW_CORRECT_REVIEW, 'yes' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Create question and add to quiz.\n+\t *\n+\t * @param array $data [ question_title, question_type, question_content ]\n+\t *\n+\t * @return QuizQuestionModel\n+\t * @throws Exception\n+\t * @since 4.2.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function create_question_and_add( array $data ): QuizQuestionModel {\n+\t\t$question_title   = $data['question_title'] ?? '';\n+\t\t$question_type    = $data['question_type'] ?? '';\n+\t\t$question_content = $data['question_content'] ?? '';\n+\t\t$question_options = $data['question_options'] ?? [];\n+\n+\t\tif ( empty( $question_title ) ) {\n+\t\t\tthrow new Exception( __( 'Question title is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( ! QuestionPostModel::check_type_valid( $question_type ) ) {\n+\t\t\tthrow new Exception( __( 'Invalid question type', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Create question\n+\t\t$questionPostModelNew               = new QuestionPostModel();\n+\t\t$questionPostModelNew->post_title   = $question_title;\n+\t\t$questionPostModelNew->post_content = $question_content;\n+\t\t$questionPostModelNew->post_status  = 'publish';\n+\t\t$questionPostModelNew->post_author  = get_current_user_id();\n+\t\t$questionPostModelNew->save();\n+\t\t$questionPostModelNew->save_meta_value_by_key(\n+\t\t\tQuestionPostModel::META_KEY_TYPE,\n+\t\t\t$question_type\n+\t\t);\n+\n+\t\t\u002F\u002F Get question object by type\n+\t\t$questionClassName = $questionPostModelNew::get_question_obj_by_type( $question_type );\n+\t\tif ( class_exists( $questionClassName ) ) {\n+\t\t\t\u002F**\n+\t\t\t * @var QuestionPostModel $questionPostTyeModel\n+\t\t\t *\u002F\n+\t\t\t$questionPostTyeModel = new $questionClassName( $questionPostModelNew );\n+\t\t\tif ( ! empty( $question_options ) ) {\n+\t\t\t\tforeach ( $question_options as $index => $answer ) {\n+\t\t\t\t\t$answer = array(\n+\t\t\t\t\t\t'question_id' => $questionPostTyeModel->get_id(),\n+\t\t\t\t\t\t'title'       => $answer['title'],\n+\t\t\t\t\t\t'value'       => $questionPostTyeModel->random_value(),\n+\t\t\t\t\t\t'is_true'     => $answer['is_true'] ?? '',\n+\t\t\t\t\t\t'order'       => $index + 1,\n+\t\t\t\t\t);\n+\n+\t\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t\t$questionAnswerModel->save();\n+\t\t\t\t\t$answers[ $index ]['question_answer_id'] = $questionAnswerModel->question_answer_id;\n+\t\t\t\t}\n+\t\t\t} elseif ( method_exists( $questionPostTyeModel, 'create_default_answers' ) ) {\n+\t\t\t\t$questionPostTyeModel->create_default_answers();\n+\t\t\t}\n+\t\t} else {\n+\t\t\tthrow new Exception( __( 'Question type not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizQuestionsDB = QuizQuestionsDB::getInstance();\n+\t\t$max_order       = $quizQuestionsDB->get_last_number_order( $this->get_id() );\n+\n+\t\t\u002F\u002F Add question to quiz\n+\t\t$quizQuestionModel                 = new QuizQuestionModel();\n+\t\t$quizQuestionModel->quiz_id        = $this->get_id();\n+\t\t$quizQuestionModel->question_id    = $questionPostModelNew->get_id();\n+\t\t$quizQuestionModel->question_order = $max_order + 1;\n+\t\t$quizQuestionModel->save();\n+\n+\t\treturn $quizQuestionModel;\n+\t}\n+\n+\t\u002F**\n+\t * Add questions exists (from Question Bank) to quiz.\n+\t *\n+\t * @param array $data [ 'question_ids' => [] ]\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function add_questions_to_quiz( array $data ): array {\n+\t\t$this->check_capabilities_update_item_course();\n+\n+\t\t$question_ids = $data['question_ids'] ?? [];\n+\t\tif ( empty( $question_ids ) ) {\n+\t\t\tthrow new Exception( __( 'Question IDs are required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quiz_questions_added = [];\n+\t\tforeach ( $question_ids as $question_id ) {\n+\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\t\tif ( ! $questionPostModel ) {\n+\t\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if question already exists in quiz\n+\t\t\t$quizQuestionModel = QuizQuestionModel::find( $this->get_id(), $question_id, true );\n+\t\t\tif ( $quizQuestionModel ) {\n+\t\t\t\tcontinue; \u002F\u002F Skip if question already exists in quiz\n+\t\t\t}\n+\n+\t\t\t$quizQuestionsDB = QuizQuestionsDB::getInstance();\n+\t\t\t$max_order       = $quizQuestionsDB->get_last_number_order( $this->get_id() );\n+\n+\t\t\t\u002F\u002F Add question to quiz\n+\t\t\t$quizQuestionModel                 = new QuizQuestionModel();\n+\t\t\t$quizQuestionModel->quiz_id        = $this->get_id();\n+\t\t\t$quizQuestionModel->question_id    = $question_id;\n+\t\t\t$quizQuestionModel->question_order = $max_order + 1;\n+\t\t\t$quizQuestionModel->save();\n+\n+\t\t\t$quiz_questions_added[] = $quizQuestionModel;\n+\t\t}\n+\n+\t\treturn $quiz_questions_added;\n+\t}\n+\n+\t\u002F**\n+\t * Update question positions in quiz.\n+\t *\n+\t * @param int[] $data [ 'question_ids' => [] ]\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_question_position( array $data ) {\n+\t\t$this->check_capabilities_update_item_course();\n+\n+\t\t$question_ids = $data['question_ids'] ?? [];\n+\t\tif ( empty( $question_ids ) ) {\n+\t\t\tthrow new Exception( __( 'Question IDs are required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$question_ids = $data['question_ids'] ?? [];\n+\t\tQuizQuestionsDB::getInstance()->update_question_position( $question_ids, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Remove question from quiz.\n+\t *\n+\t * @param int $question_id\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function remove_question_from_quiz( int $question_id ) {\n+\t\t$this->check_capabilities_update_item_course();\n+\n+\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\tif ( ! $questionPostModel ) {\n+\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizQuestionModel = QuizQuestionModel::find( $this->get_id(), $question_id );\n+\t\tif ( ! $quizQuestionModel ) {\n+\t\t\tthrow new Exception( __( 'Question not found in quiz', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizQuestionModel->delete();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Group_Step\r\n- *\u002F\r\n-class LP_Group_Step {\r\n-\tpublic $name  = '';\r\n-\tpublic $label = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Step[] .\r\n-\t *\u002F\r\n-\tpublic $steps = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Group_Step constructor.\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param string $label\r\n-\t * @param LP_Step[]  $steps\r\n-\t *\u002F\r\n-\tpublic function __construct( string $name, string $label, array $steps ) {\r\n-\t\t$this->name  = $name;\r\n-\t\t$this->label = $label;\r\n-\t\t$this->steps = $steps;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Group_Step\n+ *\u002F\n+class LP_Group_Step {\n+\tpublic $name  = '';\n+\tpublic $label = '';\n+\n+\t\u002F**\n+\t * @var LP_Step[] .\n+\t *\u002F\n+\tpublic $steps = array();\n+\n+\t\u002F**\n+\t * LP_Group_Step constructor.\n+\t *\n+\t * @param string $name\n+\t * @param string $label\n+\t * @param LP_Step[]  $steps\n+\t *\u002F\n+\tpublic function __construct( string $name, string $label, array $steps ) {\n+\t\t$this->name  = $name;\n+\t\t$this->label = $label;\n+\t\t$this->steps = $steps;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-step.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-step.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-step.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002Fsteps\u002Fclass-lp-step.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Group_Step\r\n- *\r\n- * @author tungnnx\r\n- * @version 1.0.0\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Step extends LP_REST_Response {\r\n-\t\u002F**\r\n-\t * Step Name\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $name = '';\r\n-\t\u002F**\r\n-\t * Step label\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $label = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $description = '';\r\n-\t\u002F**\r\n-\t * @var int .\r\n-\t *\u002F\r\n-\tpublic $percent = 0;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Step constructor.\r\n-\t *\r\n-\t * @param string $name .\r\n-\t * @param string $label .\r\n-\t * @param string $description .\r\n-\t * @param string $status .\r\n-\t *\u002F\r\n-\tpublic function __construct( string $name, string $label, string $description = '', string $status = '' ) {\r\n-\t\t$this->name        = $name;\r\n-\t\t$this->label       = $label;\r\n-\t\t$this->description = $description;\r\n-\t\t$this->status      = $status;\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Group_Step\n+ *\n+ * @author tungnnx\n+ * @version 1.0.0\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Step extends LP_REST_Response {\n+\t\u002F**\n+\t * Step Name\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $name = '';\n+\t\u002F**\n+\t * Step label\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $label = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $description = '';\n+\t\u002F**\n+\t * @var int .\n+\t *\u002F\n+\tpublic $percent = 0;\n+\n+\t\u002F**\n+\t * LP_Step constructor.\n+\t *\n+\t * @param string $name .\n+\t * @param string $label .\n+\t * @param string $description .\n+\t * @param string $status .\n+\t *\u002F\n+\tpublic function __construct( string $name, string $label, string $description = '', string $status = '' ) {\n+\t\t$this->name        = $name;\n+\t\t$this->label       = $label;\n+\t\t$this->description = $description;\n+\t\t$this->status      = $status;\n+\n+\t\tparent::__construct();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItemMeta\u002FUserItemMetaModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItemMeta\u002FUserItemMetaModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItemMeta\u002FUserItemMetaModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItemMeta\u002FUserItemMetaModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,199 +1,199 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserItemModel\r\n- * To replace class LP_User_Item\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItemMeta;\r\n-\r\n-use Exception;\r\n-use LP_User_Item_Meta_DB;\r\n-use LP_User_Item_Meta_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class UserItemMetaModel {\r\n-\t\u002F**\r\n-\t * Auto increment\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprivate $meta_id = 0;\r\n-\t\u002F**\r\n-\t * @var string User ID, foreign key\r\n-\t *\u002F\r\n-\tpublic $learnpress_user_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var string meta key\r\n-\t *\u002F\r\n-\tpublic $meta_key = 0;\r\n-\t\u002F**\r\n-\t * @var string meta value\r\n-\t *\u002F\r\n-\tpublic $meta_value = '';\r\n-\t\u002F**\r\n-\t * @var string Extra value\r\n-\t *\u002F\r\n-\tpublic $extra_value = '';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to UserItemModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param  array|object|mixed $data\r\n-\t * @return UserItemMetaModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): UserItemMetaModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get meta id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_meta_id(): int {\r\n-\t\treturn $this->meta_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set meta id\r\n-\t *\r\n-\t * @param int $meta_id\r\n-\t *\u002F\r\n-\tpublic function set_meta_id( int $meta_id ) {\r\n-\t\t$this->meta_id = $meta_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all data, all keys of a user item\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @return stdClass|false\r\n-\t *\u002F\r\n-\tpublic static function get_all_data( $user_item_id ) {\r\n-\t\t$lp_user_item_meta_db            = LP_User_Item_Meta_DB::getInstance();\r\n-\t\t$filter                          = new LP_User_Item_Meta_Filter();\r\n-\t\t$filter->learnpress_user_item_id = $user_item_id;\r\n-\t\t$filter->run_query_count         = false;\r\n-\t\t$user_itemmeta_rs                = $lp_user_item_meta_db->get_user_item_metas( $filter );\r\n-\t\t$all_data                        = false;\r\n-\t\tif ( $user_itemmeta_rs instanceof stdClass ) {\r\n-\t\t\t$all_data = new stdClass();\r\n-\t\t\tforeach ( $user_itemmeta_rs as $value ) {\r\n-\t\t\t\t$all_data->{$value->meta_key} = new static( $value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $all_data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user item from database by le, item_id, item_type.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return UserItemModel.\r\n-\t *\r\n-\t * @param LP_User_Item_Meta_Filter $filter\r\n-\t * @param bool $no_cache\r\n-\t * @return UserItemMetaModel|false\r\n-\t *\u002F\r\n-\tpublic static function get_user_item_meta_model_from_db( LP_User_Item_Meta_Filter $filter, bool $no_cache = true ) {\r\n-\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\r\n-\t\t$user_item_meta_model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_user_item_meta_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_user_item_meta_db->get_user_item_metas( $filter );\r\n-\t\t\t$user_item_rs     = $lp_user_item_meta_db->wpdb->get_row( $query_single_row );\r\n-\t\t\tif ( $user_item_rs instanceof stdClass ) {\r\n-\t\t\t\t$user_item_meta_model = new static( $user_item_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_item_meta_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database.\r\n-\t *\r\n-\t * If user_item_id is empty, insert new data, else update data.\r\n-\t *\r\n-\t * @return UserItemMetaModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save(): UserItemMetaModel {\r\n-\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\r\n-\t\t$data                 = [];\r\n-\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\r\n-\t\t\t$data[ $property ] = $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check if exists user_item_id.\r\n-\t\tif ( empty( $this->get_meta_id() ) ) { \u002F\u002F Insert data.\r\n-\t\t\t$meta_id_new = $lp_user_item_meta_db->insert_data( $data );\r\n-\t\t\tif ( empty( $meta_id_new ) ) {\r\n-\t\t\t\tthrow new Exception( __METHOD__ . ': ' . 'Cannot insert data to database.' );\r\n-\t\t\t}\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$lp_user_item_meta_db->update_data( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $meta_id_new ) ) {\r\n-\t\t\t$this->set_meta_id( $meta_id_new );\r\n-\t\t}\r\n-\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete user_item_meta\r\n-\t *\r\n-\t * @param mixed $meta_value\r\n-\t * @param bool $delete_all\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.4\r\n-\t *\u002F\r\n-\tpublic function delete( $meta_value = '', bool $delete_all = false ) {\r\n-\t\tlearn_press_delete_user_item_meta( $this->learnpress_user_item_id, $this->meta_key, $meta_value, $delete_all );\r\n-\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserItemModel\n+ * To replace class LP_User_Item\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.5\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItemMeta;\n+\n+use Exception;\n+use LP_User_Item_Meta_DB;\n+use LP_User_Item_Meta_Filter;\n+use stdClass;\n+use Throwable;\n+\n+class UserItemMetaModel {\n+\t\u002F**\n+\t * Auto increment\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tprivate $meta_id = 0;\n+\t\u002F**\n+\t * @var string User ID, foreign key\n+\t *\u002F\n+\tpublic $learnpress_user_item_id = 0;\n+\t\u002F**\n+\t * @var string meta key\n+\t *\u002F\n+\tpublic $meta_key = 0;\n+\t\u002F**\n+\t * @var string meta value\n+\t *\u002F\n+\tpublic $meta_value = '';\n+\t\u002F**\n+\t * @var string Extra value\n+\t *\u002F\n+\tpublic $extra_value = '';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to UserItemModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param  array|object|mixed $data\n+\t * @return UserItemMetaModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): UserItemMetaModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get meta id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_meta_id(): int {\n+\t\treturn $this->meta_id;\n+\t}\n+\n+\t\u002F**\n+\t * Set meta id\n+\t *\n+\t * @param int $meta_id\n+\t *\u002F\n+\tpublic function set_meta_id( int $meta_id ) {\n+\t\t$this->meta_id = $meta_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get all data, all keys of a user item\n+\t *\n+\t * @throws Exception\n+\t * @return stdClass|false\n+\t *\u002F\n+\tpublic static function get_all_data( $user_item_id ) {\n+\t\t$lp_user_item_meta_db            = LP_User_Item_Meta_DB::getInstance();\n+\t\t$filter                          = new LP_User_Item_Meta_Filter();\n+\t\t$filter->learnpress_user_item_id = $user_item_id;\n+\t\t$filter->run_query_count         = false;\n+\t\t$user_itemmeta_rs                = $lp_user_item_meta_db->get_user_item_metas( $filter );\n+\t\t$all_data                        = false;\n+\t\tif ( $user_itemmeta_rs instanceof stdClass ) {\n+\t\t\t$all_data = new stdClass();\n+\t\t\tforeach ( $user_itemmeta_rs as $value ) {\n+\t\t\t\t$all_data->{$value->meta_key} = new static( $value );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $all_data;\n+\t}\n+\n+\t\u002F**\n+\t * Get user item from database by le, item_id, item_type.\n+\t * If not exists, return false.\n+\t * If exists, return UserItemModel.\n+\t *\n+\t * @param LP_User_Item_Meta_Filter $filter\n+\t * @param bool $no_cache\n+\t * @return UserItemMetaModel|false\n+\t *\u002F\n+\tpublic static function get_user_item_meta_model_from_db( LP_User_Item_Meta_Filter $filter, bool $no_cache = true ) {\n+\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\n+\t\t$user_item_meta_model = false;\n+\n+\t\ttry {\n+\t\t\t$lp_user_item_meta_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_user_item_meta_db->get_user_item_metas( $filter );\n+\t\t\t$user_item_rs     = $lp_user_item_meta_db->wpdb->get_row( $query_single_row );\n+\t\t\tif ( $user_item_rs instanceof stdClass ) {\n+\t\t\t\t$user_item_meta_model = new static( $user_item_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_item_meta_model;\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database.\n+\t *\n+\t * If user_item_id is empty, insert new data, else update data.\n+\t *\n+\t * @return UserItemMetaModel\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function save(): UserItemMetaModel {\n+\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\n+\t\t$data                 = [];\n+\t\tforeach ( get_object_vars( $this ) as $property => $value ) {\n+\t\t\t$data[ $property ] = $value;\n+\t\t}\n+\n+\t\t\u002F\u002F Check if exists user_item_id.\n+\t\tif ( empty( $this->get_meta_id() ) ) { \u002F\u002F Insert data.\n+\t\t\t$meta_id_new = $lp_user_item_meta_db->insert_data( $data );\n+\t\t\tif ( empty( $meta_id_new ) ) {\n+\t\t\t\tthrow new Exception( __METHOD__ . ': ' . 'Cannot insert data to database.' );\n+\t\t\t}\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$lp_user_item_meta_db->update_data( $data );\n+\t\t}\n+\n+\t\tif ( ! empty( $meta_id_new ) ) {\n+\t\t\t$this->set_meta_id( $meta_id_new );\n+\t\t}\n+\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Delete user_item_meta\n+\t *\n+\t * @param mixed $meta_value\n+\t * @param bool $delete_all\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.4\n+\t *\u002F\n+\tpublic function delete( $meta_value = '', bool $delete_all = false ) {\n+\t\tlearn_press_delete_user_item_meta( $this->learnpress_user_item_id, $this->meta_key, $meta_value, $delete_all );\n+\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItemMeta\u002FUserQuizMetaModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItemMeta\u002FUserQuizMetaModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItemMeta\u002FUserQuizMetaModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItemMeta\u002FUserQuizMetaModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserItemModel\r\n- * To replace class LP_User_Item\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.0\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItemMeta;\r\n-\r\n-class UserQuizMetaModel extends UserItemMetaModel {\r\n-\tconst KEY_QUESTION_CHECKED = '_lp_question_checked';\r\n-\tconst KEY_QUESTION_HINT    = '_lp_question_hint';\r\n-\tconst KEY_RETAKEN_COUNT    = '_lp_retaken_count';\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserItemModel\n+ * To replace class LP_User_Item\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.0\n+ * @since 4.2.5\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItemMeta;\n+\n+class UserQuizMetaModel extends UserItemMetaModel {\n+\tconst KEY_QUESTION_CHECKED = '_lp_question_checked';\n+\tconst KEY_QUESTION_HINT    = '_lp_question_hint';\n+\tconst KEY_RETAKEN_COUNT    = '_lp_retaken_count';\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserCourseModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserCourseModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserCourseModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserCourseModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1136 +1,1136 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserItemModel\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItems;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LP_Cache;\r\n-use LP_Course_Cache;\r\n-use LP_Course_Item;\r\n-use LP_Courses_Cache;\r\n-use LP_Datetime;\r\n-use LP_User;\r\n-use LP_User_Item_Course;\r\n-use LP_User_Items_Cache;\r\n-use LP_User_Items_DB;\r\n-use LP_User_Items_Filter;\r\n-use LP_User_Items_Result_DB;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Error;\r\n-\r\n-class UserCourseModel extends UserItemModel {\r\n-\t\u002F**\r\n-\t * Item type Course\r\n-\t *\r\n-\t * @var string Item type\r\n-\t *\u002F\r\n-\tpublic $item_type = LP_COURSE_CPT;\r\n-\t\u002F**\r\n-\t * Ref type Order\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type = LP_ORDER_CPT;\r\n-\r\n-\t\u002F\u002F Constants status\r\n-\tconst STATUS_PURCHASED = 'purchased';\r\n-\r\n-\t\u002F**\r\n-\t * Constant key meta\r\n-\t *\u002F\r\n-\tconst META_KEY_RETAKEN_COUNT = '_lp_retaken_count';\r\n-\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tparent::__construct( $data );\r\n-\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->get_course_model();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return bool|CourseModel\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\treturn CourseModel::find( $this->item_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find User Item by user_id, item_id, item_type.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param int $course_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function find( int $user_id, int $course_id, bool $check_cache = false ) {\r\n-\t\tstatic $staticData = [];\r\n-\r\n-\t\t$filter            = new LP_User_Items_Filter();\r\n-\t\t$filter->user_id   = $user_id;\r\n-\t\t$filter->item_id   = $course_id;\r\n-\t\t$filter->item_type = LP_COURSE_CPT;\r\n-\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$user_id}\u002F{$course_id}\u002F{$filter->item_type}\";\r\n-\t\t$lpUserCourseCache = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$userCourseModel = $lpUserCourseCache->get_cache( $key_cache );\r\n-\t\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t\treturn $userCourseModel;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $staticData[ $key_cache ] ) ) {\r\n-\t\t\t\treturn $staticData[ $key_cache ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$userCourseModel = static::get_user_item_model_from_db( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t$lpUserCourseCache->set_cache( $key_cache, $userCourseModel );\r\n-\t\t}\r\n-\r\n-\t\t$staticData[ $key_cache ] = $userCourseModel;\r\n-\r\n-\t\treturn $userCourseModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user_item is child of user course.\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t * @param string $item_type\r\n-\t *\r\n-\t * @return false|UserItemModel|UserQuizModel|mixed\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_item_attend( int $item_id, string $item_type = '' ) {\r\n-\t\t$item = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$item = UserItemModel::find_user_item(\r\n-\t\t\t\t$this->user_id,\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$item_type,\r\n-\t\t\t\t$this->item_id,\r\n-\t\t\t\t$this->item_type,\r\n-\t\t\t\ttrue\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $item ) {\r\n-\t\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t\t\t$item = new UserLessonModel( $item );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t\t$item = new UserQuizModel( $item );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$item = apply_filters( 'learn-press\u002FuserCourseModel\u002Fget-item-attend', $item, $this, $item_id, $item_type );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item continue to learn.\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_item_continue() {\r\n-\t\tif ( isset( $this->meta_data->item_continue ) ) {\r\n-\t\t\treturn $this->meta_data->item_continue;\r\n-\t\t}\r\n-\r\n-\t\t$itemModel = null;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel   = $this->get_course_model();\r\n-\t\t\t$totalItemsObj = $courseModel->count_items();\r\n-\t\t\tif ( empty( $totalItemsObj ) ) {\r\n-\t\t\t\treturn $itemModel;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_id        = 0;\r\n-\t\t\t$item_type      = '';\r\n-\t\t\t$sections_items = $courseModel->get_section_items();\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\tif ( $itemModel ) {\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t$item_id   = $item->id ?? $item->item_id;\r\n-\t\t\t\t\t$item_type = $item->type ?? $item->item_type;\r\n-\r\n-\t\t\t\t\t$userItemModel = UserItemModel::find_user_item(\r\n-\t\t\t\t\t\t$this->user_id,\r\n-\t\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t\t$item_type,\r\n-\t\t\t\t\t\t$courseModel->get_id(),\r\n-\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( ! $userItemModel || $userItemModel->get_status() !== LP_ITEM_COMPLETED ) {\r\n-\t\t\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For all items are completed\r\n-\t\t\tif ( empty( $itemModel ) && ! empty( $item_id ) && ! empty( $item_type ) ) {\r\n-\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->meta_data->item_continue = $itemModel;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $itemModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find next item when have just completed lesson.\r\n-\t * Logic: find item next not completed, circle to find next item, if not found return current item.\r\n-\t *\r\n-\t * @param int $item_id_current\r\n-\t *\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t * @return mixed|null\r\n-\t *\u002F\r\n-\tpublic function get_item_next_when_complete_lesson( int $item_id_current ) {\r\n-\t\t$itemModel         = null;\r\n-\t\t$item_before_found = 0;\r\n-\t\t$item_after_found  = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel      = $this->get_course_model();\r\n-\t\t\t$course_items     = $courseModel->get_only_items();\r\n-\t\t\t$course_item_keys = array_keys( $course_items );\r\n-\r\n-\t\t\t$index_of_current = array_search( $item_id_current, $course_item_keys, true );\r\n-\r\n-\t\t\tforeach ( $course_item_keys as $index => $item_id ) {\r\n-\t\t\t\t$course_item = $course_items[ $item_id ];\r\n-\t\t\t\t$item_type   = $course_item->item_type;\r\n-\r\n-\t\t\t\t$userItemModel  = UserItemModel::find_user_item(\r\n-\t\t\t\t\t$this->user_id,\r\n-\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t$item_type,\r\n-\t\t\t\t\t$courseModel->get_id(),\r\n-\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\ttrue\r\n-\t\t\t\t);\r\n-\t\t\t\t$status_compare = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fuser-course-model\u002Fget-item-next-when-complete-lesson\u002Fstatus-compare',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\tUserItemModel::STATUS_COMPLETED,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t\u002F\u002F Found item before current item not completed\r\n-\t\t\t\tif ( $index \u003C $index_of_current ) {\r\n-\t\t\t\t\tif ( ! $item_before_found &&\r\n-\t\t\t\t\t\t( ! $userItemModel || ! in_array( $userItemModel->get_status(), $status_compare ) ) ) {\r\n-\t\t\t\t\t\t$item_before_found = $course_item;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( $index > $index_of_current ) {\r\n-\t\t\t\t\t\u002F\u002F Found item after current item not completed\r\n-\t\t\t\t\tif ( ! $item_after_found &&\r\n-\t\t\t\t\t\t( ! $userItemModel || ! in_array( $userItemModel->get_status(), $status_compare ) ) ) {\r\n-\t\t\t\t\t\t$item_after_found = $course_item;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $item_after_found ) {\r\n-\t\t\t\t$itemModel = $courseModel->get_item_model( $item_after_found->item_id, $item_after_found->item_type );\r\n-\t\t\t} elseif ( $item_before_found ) {\r\n-\t\t\t\t$itemModel = $courseModel->get_item_model( $item_before_found->item_id, $item_before_found->item_type );\r\n-\t\t\t} else {\r\n-\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id_current, LP_LESSON_CPT );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $itemModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Count students.\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function count_students( $filter ): int {\r\n-\t\t\u002F\u002F Check cache\r\n-\t\t$key_cache = 'count-courses-student-' . md5( json_encode( $filter ) );\r\n-\t\t$count     = LP_Cache::cache_load_first( 'get', $key_cache );\r\n-\t\tif ( false !== $count ) {\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\r\n-\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t$count            = $lp_courses_cache->get_cache( $key_cache );\r\n-\t\tif ( false !== $count ) {\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\r\n-\r\n-\t\t\treturn $count;\r\n-\t\t}\r\n-\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$count            = $lp_user_items_db->count_students( $filter );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\t$lp_courses_cache->set_cache( $key_cache, $count );\r\n-\t\t$lp_courses_cache_keys = new LP_Courses_Cache( true );\r\n-\t\t$lp_courses_cache_keys->save_cache_keys_count_student_courses( $key_cache );\r\n-\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\r\n-\r\n-\t\treturn $count;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course of user is enrolled or finished\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_enrolled_or_finished(): bool {\r\n-\t\treturn $this->has_enrolled() || $this->has_finished();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user has enrolled course\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_enrolled(): bool {\r\n-\t\treturn $this->status === UserItemModel::STATUS_ENROLLED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user has purchased course\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_purchased(): bool {\r\n-\t\treturn $this->status === UserItemModel::STATUS_PURCHASED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user has finished course\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_finished(): bool {\r\n-\t\treturn $this->status === UserItemModel::STATUS_FINISHED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course has finished or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @move from class-lp-user-item-course.php\r\n-\t * @since  3.0.0\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function is_finished(): bool {\r\n-\t\treturn $this->has_finished();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate course result\r\n-\t *\r\n-\t * @move from class-lp-user-item-course.php\r\n-\t *\r\n-\t * @param bool $force_cache\r\n-\t *\r\n-\t * @return array [ 'count_items' => int, 'completed_items' => int, 'items' => array, 'evaluate_type' => string, 'pass' => int, 'result' => float ]\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function calculate_course_results( bool $force_cache = false ): array {\r\n-\t\t$items   = array();\r\n-\t\t$results = array(\r\n-\t\t\t'count_items'     => 0,\r\n-\t\t\t'completed_items' => 0,\r\n-\t\t\t'items'           => array(),\r\n-\t\t\t'evaluate_type'   => '',\r\n-\t\t\t'pass'            => 0,\r\n-\t\t\t'result'          => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course_model();\r\n-\t\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\t\tthrow new Exception( 'Course invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$key_first_cache = 'calculate_course\u002F' . $this->user_id . '\u002F' . $courseModel->get_id();\r\n-\t\t\t$results_cache   = LP_Cache::cache_load_first( 'get', $key_first_cache );\r\n-\t\t\tif ( false !== $results_cache && ! $force_cache ) {\r\n-\t\t\t\treturn $results_cache;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->is_finished() ) {\r\n-\t\t\t\t\u002F\u002F Get result from lp_user_item_results\r\n-\t\t\t\t\u002F\u002F Todo: tungnx - set cache\r\n-\t\t\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->status !== LP_COURSE_ENROLLED ) {\r\n-\t\t\t\treturn $results;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$count_items           = $courseModel->count_items();\r\n-\t\t\t$count_items_completed = $this->count_items_completed();\r\n-\r\n-\t\t\t$evaluate_type = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_EVALUATION_TYPE, 'evaluate_lesson' );\r\n-\t\t\tswitch ( $evaluate_type ) {\r\n-\t\t\t\tcase 'evaluate_lesson':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_lesson( $count_items_completed, $courseModel->count_items( LP_LESSON_CPT ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_final_quiz':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_final_quiz();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_quiz':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_quizzes_passed( $count_items_completed, $courseModel->count_items( LP_QUIZ_CPT ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_questions':\r\n-\t\t\t\tcase 'evaluate_mark':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_question( $evaluate_type );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t\u002F\u002F Old Hook\r\n-\t\t\t\t\tif ( has_filter( 'learn-press\u002Fevaluate_passed_conditions' ) ) {\r\n-\t\t\t\t\t\t$user_course_old = new LP_User_Item_Course( $this );\r\n-\t\t\t\t\t\t$results         = apply_filters( 'learn-press\u002Fevaluate_passed_conditions', $results, $evaluate_type, $user_course_old );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$results_evaluate = apply_filters( 'learn-press\u002Fevaluate\u002Fcalculate', $results, $evaluate_type, $this );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_array( $results_evaluate ) ) {\r\n-\t\t\t\t$results_evaluate = array(\r\n-\t\t\t\t\t'result' => 0,\r\n-\t\t\t\t\t'pass'   => 0,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$results_evaluate['result'] = round( $results_evaluate['result'], 2 );\r\n-\r\n-\t\t\t$completed_items = intval( $count_items_completed->count_status ?? 0 );\r\n-\r\n-\t\t\t$item_types = CourseModel::item_types_support();\r\n-\t\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t\t$item_type_key = str_replace( 'lp_', '', $item_type );\r\n-\r\n-\t\t\t\t$items[ $item_type_key ] = array(\r\n-\t\t\t\t\t'completed' => $count_items_completed->{$item_type . '_status_completed'} ?? 0,\r\n-\t\t\t\t\t'passed'    => $count_items_completed->{$item_type . '_graduation_passed'} ?? 0,\r\n-\t\t\t\t\t'total'     => $courseModel->count_items( $item_type ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$results = array_merge(\r\n-\t\t\t\t$results_evaluate,\r\n-\t\t\t\tcompact( 'count_items', 'completed_items', 'items', 'evaluate_type' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$results = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fupdate-course-results',\r\n-\t\t\t\t$results,\r\n-\t\t\t\t$this->item_id,\r\n-\t\t\t\t$this->user_id,\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $results );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $results;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can retake course or not.\r\n-\t *\r\n-\t * @move from class-lp-user.php method can_retry_course since 4.0.0\r\n-\t * @use LP_User::can_retry_course\r\n-\t * @return int|mixed|null\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function can_retake() {\r\n-\t\t$flag = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = $this->get_course_model();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn $flag;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$retake_option = (int) $course->get_meta_value_by_key( CoursePostModel::META_KEY_RETAKE_COUNT, 0 );\r\n-\t\t\tif ( $retake_option > 0 ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Check course is finished\r\n-\t\t\t\t * Check duration is blocked\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tif ( ! $this->has_finished() ) {\r\n-\t\t\t\t\tif ( 0 !== $this->timestamp_remaining_duration() ) {\r\n-\t\t\t\t\t\tthrow new Exception();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$retaken          = $this->get_retaken_count();\r\n-\t\t\t\t$can_retake_times = $retake_option - $retaken;\r\n-\r\n-\t\t\t\tif ( $can_retake_times > 0 ) {\r\n-\t\t\t\t\t$flag = $can_retake_times;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fcan-retake', $flag, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get retaken count of user attend course.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_retaken_count(): int {\r\n-\t\treturn (int) $this->get_meta_value_from_key( self::META_KEY_RETAKEN_COUNT, 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check time remaining course when enable duration expire\r\n-\t * Value: -1 is no limit (default)\r\n-\t * Value: 0 is block\r\n-\t * Administrator || (is instructor && is author course) will be not block.\r\n-\t *\r\n-\t * @return int second\r\n-\t * @since 4.0.0\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @depecated 4.2.7.6, instead of get_time_remaining\r\n-\t *\u002F\r\n-\tpublic function timestamp_remaining_duration(): int {\r\n-\t\t$timestamp_remaining = - 1;\r\n-\t\t$user                = $this->get_user_model();\r\n-\t\t\u002F**\r\n-\t\t * @var CourseModel $course\r\n-\t\t *\u002F\r\n-\t\t$course = $this->get_course_model();\r\n-\t\tif ( ! $user || ! $course ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$author = $course->get_author_model();\r\n-\t\tif ( ! $author ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$user_id = $user->get_id();\r\n-\r\n-\t\tif ( current_user_can( 'administrator' ) ||\r\n-\t\t\t( current_user_can( LP_TEACHER_ROLE ) && $author->get_id() === $user_id ) ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\tif ( 0 === (int) $course->get_duration() ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $course->enable_block_when_expire() ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$course_start_time_str = $this->get_start_time();\r\n-\t\t$course_start_time     = new LP_Datetime( $course_start_time_str );\r\n-\t\t$course_start_time     = $course_start_time->get_raw_date();\r\n-\t\t$duration              = $course->get_duration();\r\n-\t\t$timestamp_expire      = strtotime( $course_start_time . ' +' . $duration );\r\n-\t\t$timestamp_current     = time();\r\n-\t\t$timestamp_remaining   = $timestamp_expire - $timestamp_current;\r\n-\r\n-\t\tif ( $timestamp_remaining \u003C 0 ) {\r\n-\t\t\t$timestamp_remaining = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check time remaining course when enable duration expire\r\n-\t * Value: -1 is no limit (default)\r\n-\t * Value: 0 is block\r\n-\t * Administrator || (is instructor && is author course) will be not block.\r\n-\t *\r\n-\t * @return int second\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_time_remaining(): int {\r\n-\t\t$timestamp_remaining = - 1;\r\n-\t\t$userModel           = $this->get_user_model();\r\n-\t\t$courseModel         = $this->get_course_model();\r\n-\t\tif ( ! $userModel || ! $courseModel ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$author = $courseModel->get_author_model();\r\n-\t\tif ( ! $author ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*$user_id = $userModel->get_id();\r\n-\t\t$user_wp = new \\WP_User( $userModel );\r\n-\t\tif ( user_can( $user_wp, ADMIN_ROLE ) ||\r\n-\t\t\t( user_can( $user_wp, LP_TEACHER_ROLE ) && $author->get_id() === $user_id ) ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}*\u002F\r\n-\r\n-\t\tif ( 0 === (int) $courseModel->get_duration() ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $courseModel->enable_block_when_expire() ) {\r\n-\t\t\treturn $timestamp_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$course_start_time   = new LP_Datetime( $this->get_start_time() );\r\n-\t\t$course_start_time   = $course_start_time->get_raw_date();\r\n-\t\t$duration            = $courseModel->get_duration();\r\n-\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\r\n-\t\t$timestamp_current   = time();\r\n-\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\r\n-\r\n-\t\tif ( $timestamp_remaining \u003C 0 ) {\r\n-\t\t\t$timestamp_remaining = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get completed items.\r\n-\t *\r\n-\t * @return object\r\n-\t * @modify 4.1.4.1\r\n-\t * @since 4.0.0\r\n-\t * @version 4.0.3\r\n-\t *\u002F\r\n-\tpublic function count_items_completed() {\r\n-\t\t$lp_user_items_db      = LP_User_Items_DB::getInstance();\r\n-\t\t$count_items_completed = new stdClass();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$key_cache_first       = \"userCourseModel\u002Fcount_items_completed\u002F{$this->user_id}\u002F{$this->item_id}\";\r\n-\t\t\t$count_items_completed = LP_Cache::cache_load_first( 'get', $key_cache_first );\r\n-\t\t\tif ( false !== $count_items_completed ) {\r\n-\t\t\t\treturn $count_items_completed;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter_count             = new LP_User_Items_Filter();\r\n-\t\t\t$filter_count->parent_id  = $this->get_user_item_id();\r\n-\t\t\t$filter_count->item_id    = $this->item_id;\r\n-\t\t\t$filter_count->user_id    = $this->user_id;\r\n-\t\t\t$filter_count->status     = LP_ITEM_COMPLETED;\r\n-\t\t\t$filter_count->graduation = LP_COURSE_GRADUATION_PASSED;\r\n-\t\t\t$count_items_completed    = $lp_user_items_db->count_items_of_course_with_status( $filter_count );\r\n-\r\n-\t\t\t\u002F\u002F Set cache first\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_cache_first, $count_items_completed );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $count_items_completed;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get graduation of course.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_graduation(): string {\r\n-\t\treturn (string) $this->graduation;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is passed or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function is_passed(): bool {\r\n-\t\treturn $this->graduation === UserItemModel::GRADUATION_PASSED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is canceled or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function has_canceled(): bool {\r\n-\t\treturn $this->status === self::STATUS_CANCEL;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course result by lessons.\r\n-\t *\r\n-\t * @param $count_items_completed\r\n-\t * @param int $total_item_lesson\r\n-\t *\r\n-\t * @return array\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_lesson( $count_items_completed, int $total_item_lesson = 0 ): array {\r\n-\t\t$evaluate = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\t$count_items_completed = intval( $count_items_completed->{LP_LESSON_CPT . '_status_completed'} ?? 0 );\r\n-\r\n-\t\tif ( $total_item_lesson && $count_items_completed ) {\r\n-\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_lesson;\r\n-\t\t}\r\n-\r\n-\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\r\n-\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t$evaluate['pass'] = 1;\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course result by final quiz.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_final_quiz(): array {\r\n-\t\t$lp_user_items_db       = LP_User_Items_DB::getInstance();\r\n-\t\t$lp_user_item_result_db = LP_User_Items_Result_DB::instance();\r\n-\t\t$evaluate               = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course_model();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $evaluate;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quiz_final_id = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FINAL_QUIZ, 0 );\r\n-\t\t\tif ( ! $quiz_final_id ) {\r\n-\t\t\t\treturn $evaluate;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quizPostModel = QuizPostModel::find( $quiz_final_id, true );\r\n-\t\t\tif ( ! $quizPostModel ) {\r\n-\t\t\t\treturn $evaluate;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t\t$filter->query_type = 'get_row';\r\n-\t\t\t$filter->parent_id  = $this->get_user_item_id();\r\n-\t\t\t$filter->item_type  = LP_QUIZ_CPT;\r\n-\t\t\t$filter->item_id    = $quiz_final_id;\r\n-\t\t\t$user_quiz          = $lp_user_items_db->get_user_course_items_by_item_type( $filter );\r\n-\t\t\tif ( ! $user_quiz ) {\r\n-\t\t\t\tthrow new Exception();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get result did quiz\r\n-\t\t\t$quiz_result = $lp_user_item_result_db->get_result( $user_quiz->user_item_id );\r\n-\r\n-\t\t\tif ( $quiz_result ) {\r\n-\t\t\t\tif ( ! isset( $quiz_result['result'] ) ) {\r\n-\t\t\t\t\t$evaluate['result'] = $quiz_result['user_mark'] * 100 \u002F $quiz_result['mark'];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$evaluate['result'] = $quiz_result['result'];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$passing_condition = $quizPostModel->get_passing_grade();\r\n-\t\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by count quizzes passed\u002Fall quizzes.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_quizzes_passed( $count_items_completed, $total_item_quizzes ): array {\r\n-\t\t$evaluate = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\t$count_items_completed = intval( $count_items_completed->{LP_QUIZ_CPT . '_graduation_passed'} ?? 0 );\r\n-\r\n-\t\tif ( $total_item_quizzes && $count_items_completed ) {\r\n-\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_quizzes;\r\n-\r\n-\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by count questions true\u002Fall questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprivate function evaluate_course_by_questions( &$evaluate, $lp_quizzes, $total_questions ) {\r\n-\t\t$lp_user_item_results_db = LP_User_Items_Result_DB::instance();\r\n-\t\t$count_questions_correct = 0;\r\n-\r\n-\t\t\u002F\u002F get questions correct\r\n-\t\tforeach ( $lp_quizzes as $lp_quiz ) {\r\n-\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\r\n-\t\t\tif ( $lp_quiz_result ) {\r\n-\t\t\t\t$count_questions_correct += $lp_quiz_result['question_correct'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $total_questions && $count_questions_correct ) {\r\n-\t\t\t$evaluate['result'] = $count_questions_correct * 100 \u002F $total_questions;\r\n-\r\n-\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by total mark of questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprivate function evaluate_course_by_mark( &$evaluate, $lp_quizzes, $total_mark_questions ) {\r\n-\t\t$lp_user_item_results_db       = LP_User_Items_Result_DB::instance();\r\n-\t\t$count_mark_questions_receiver = 0;\r\n-\r\n-\t\tforeach ( $lp_quizzes as $lp_quiz ) {\r\n-\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\r\n-\t\t\tif ( $lp_quiz_result ) {\r\n-\t\t\t\t$count_mark_questions_receiver += $lp_quiz_result['user_mark'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $count_mark_questions_receiver && $total_mark_questions ) {\r\n-\t\t\t$evaluate['result'] = $count_mark_questions_receiver * 100 \u002F $total_mark_questions;\r\n-\r\n-\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by total mark of questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_question( string $evaluate_type ): array {\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$evaluate         = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F get quiz_ids\r\n-\t\t\t$filter_get_quiz_ids            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_get_quiz_ids->parent_id = $this->get_user_item_id();\r\n-\t\t\t$filter_get_quiz_ids->item_type = LP_QUIZ_CPT;\r\n-\t\t\t$lp_quizzes                     = $lp_user_items_db->get_user_course_items_by_item_type( $filter_get_quiz_ids );\r\n-\r\n-\t\t\t\u002F\u002F Get total questions, mark\r\n-\t\t\t$course = $this->get_course_model();\r\n-\r\n-\t\t\t$total_questions     = 0;\r\n-\t\t\t$total_mark_question = 0;\r\n-\r\n-\t\t\t\u002F\u002F Get all items' course\r\n-\t\t\t$sections_items = $course->get_section_items();\r\n-\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t$itemObj = LP_Course_Item::get_item( $item->id );\r\n-\t\t\t\t\tif ( ! $itemObj instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $item->type == LP_QUIZ_CPT ) {\r\n-\t\t\t\t\t\t$total_questions     += count( $itemObj->get_question_ids() );\r\n-\t\t\t\t\t\t$total_mark_question += $itemObj->get_mark();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End get total questions, mark\r\n-\r\n-\t\t\tswitch ( $evaluate_type ) {\r\n-\t\t\t\tcase 'evaluate_questions':\r\n-\t\t\t\t\t$this->evaluate_course_by_questions( $evaluate, $lp_quizzes, $total_questions );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_mark':\r\n-\t\t\t\t\t$this->evaluate_course_by_mark( $evaluate, $lp_quizzes, $total_mark_question );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get results of each quiz - has questions\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\tprotected function count_item_completed() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can finish course or not.\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function can_finish() {\r\n-\t\t$can_finish = true;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $this->get_course_model();\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not exists!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_impact_item = $this->can_impact_item();\r\n-\t\t\tif ( $can_impact_item instanceof WP_Error ) {\r\n-\t\t\t\tthrow new Exception( $can_impact_item->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_results = $this->calculate_course_results();\r\n-\t\t\tif ( empty( $course_results['pass'] ) ) {\r\n-\t\t\t\t$allow_finish_when_all_item_completed = $courseModel->get_meta_value_by_key(\r\n-\t\t\t\t\tCoursePostModel::META_KEY_HAS_FINISH,\r\n-\t\t\t\t\t'yes'\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( $allow_finish_when_all_item_completed ) {\r\n-\t\t\t\t\t$course_total_items_obj = $courseModel->get_total_items();\r\n-\t\t\t\t\tif ( $course_total_items_obj && $course_results['completed_items'] \u003C $course_total_items_obj->count_items ) {\r\n-\t\t\t\t\t\tthrow new Exception( __( 'You must complete all items in course', 'learnpress' ) );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow new Exception( __( 'You must passed course', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$can_finish = new WP_Error( 'lp_user_course_can_finish_err', $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-course\u002Fcan-finish', $can_finish, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle finish course.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.7.6\r\n-\t *\u002F\r\n-\tpublic function handle_finish() {\r\n-\t\t$can_finish = $this->can_finish();\r\n-\t\tif ( is_wp_error( $can_finish ) ) {\r\n-\t\t\tthrow new Exception( $can_finish->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\t$course_results   = $this->calculate_course_results();\r\n-\t\t$this->graduation = $course_results['pass'] ? LP_COURSE_GRADUATION_PASSED : LP_COURSE_GRADUATION_FAILED;\r\n-\t\t$this->status     = LP_COURSE_FINISHED;\r\n-\t\t$this->end_time   = gmdate( LP_Datetime::$format, time() );\r\n-\t\t$this->save();\r\n-\r\n-\t\t\u002F\u002F Save result for course\r\n-\t\tLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), wp_json_encode( $course_results ) );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fuser-course-finished', $this->item_id, $this->user_id, $this->get_user_item_id() );\r\n-\t\tdo_action( 'learn-press\u002Fuser-course\u002Ffinished', $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle retake course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function handle_retake() {\r\n-\t\t$remaining_retake = $this->can_retake();\r\n-\t\tif ( $remaining_retake === 0 ) {\r\n-\t\t\tthrow new Exception( __( 'You can not retake this course!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$this->status     = self::STATUS_ENROLLED;\r\n-\t\t$this->graduation = self::GRADUATION_IN_PROGRESS;\r\n-\t\t$this->start_time = gmdate( LP_Datetime::$format, time() );\r\n-\t\t$this->end_time   = null;\r\n-\t\t$this->set_meta_value_for_key( self::META_KEY_RETAKEN_COUNT, $this->get_retaken_count() + 1 );\r\n-\t\t$this->save();\r\n-\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\r\n-\t\tif ( $courseModel->count_items() > 0 ) {\r\n-\t\t\t\u002F\u002F Remove items' course user learned.\r\n-\t\t\t$filter_remove            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_remove->parent_id = $this->get_user_item_id();\r\n-\t\t\t$filter_remove->user_id   = $this->user_id;\r\n-\t\t\t$filter_remove->limit     = - 1;\r\n-\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\r\n-\r\n-\t\t\t\u002F\u002F Clean cache items.\r\n-\t\t\tforeach ( $courseModel->get_section_items() as $section_items ) {\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t$key_cache       = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$item->id}\u002F{$item->type}\u002F{$this->item_id}\u002F\" . LP_COURSE_CPT;\r\n-\t\t\t\t\t$lpUserItemCache = new LP_User_Items_Cache();\r\n-\t\t\t\t\t$lpUserItemCache->clear( $key_cache );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Create new result in table learnpress_user_item_results.\r\n-\t\tLP_User_Items_Result_DB::instance()->insert( $this->get_user_item_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check can impact item.\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function can_impact_item() {\r\n-\t\t$can_impact_item = true;\r\n-\r\n-\t\t\u002F\u002F For case user Guest\r\n-\t\t$userModel = $this->get_user_model();\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\t$can_impact_item = new WP_Error( 'user_not_exists', __( 'User not exists!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$status = $this->get_status();\r\n-\t\tif ( $this->has_canceled() || ! $this->has_enrolled() ) {\r\n-\t\t\t$can_impact_item = new WP_Error( 'user_not_enroll_course', __( 'You have not enroll this course!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->has_finished() ) {\r\n-\t\t\t$can_impact_item = new WP_Error( 'user_finished_course', __( 'You have finished this course!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->get_time_remaining() === 0 ) {\r\n-\t\t\t$can_impact_item = new WP_Error( 'course_is_blocked', __( 'Course was blocked by expire!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-course\u002Fcan-impact-item', $can_impact_item, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\r\n-\t * @return void\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\";\r\n-\t\t$lpUserCourseCache = new LP_Cache();\r\n-\t\t$lpUserCourseCache->clear( $key_cache );\r\n-\r\n-\t\tparent::clean_caches();\r\n-\t\t\u002F\u002F Clear cache total students enrolled of a course.\r\n-\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\t\t$lp_course_cache->clean_total_students_enrolled( $this->item_id );\r\n-\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $this->item_id );\r\n-\t\t\u002F\u002F Clear cache count students of many course\r\n-\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserItemModel\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.5\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItems;\n+\n+use Exception;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LP_Cache;\n+use LP_Course_Cache;\n+use LP_Course_Item;\n+use LP_Courses_Cache;\n+use LP_Datetime;\n+use LP_User;\n+use LP_User_Item_Course;\n+use LP_User_Items_Cache;\n+use LP_User_Items_DB;\n+use LP_User_Items_Filter;\n+use LP_User_Items_Result_DB;\n+use stdClass;\n+use Throwable;\n+use WP_Error;\n+\n+class UserCourseModel extends UserItemModel {\n+\t\u002F**\n+\t * Item type Course\n+\t *\n+\t * @var string Item type\n+\t *\u002F\n+\tpublic $item_type = LP_COURSE_CPT;\n+\t\u002F**\n+\t * Ref type Order\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type = LP_ORDER_CPT;\n+\n+\t\u002F\u002F Constants status\n+\tconst STATUS_PURCHASED = 'purchased';\n+\n+\t\u002F**\n+\t * Constant key meta\n+\t *\u002F\n+\tconst META_KEY_RETAKEN_COUNT = '_lp_retaken_count';\n+\n+\tpublic function __construct( $data = null ) {\n+\t\tparent::__construct( $data );\n+\n+\t\tif ( $data ) {\n+\t\t\t$this->get_course_model();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return bool|CourseModel\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\treturn CourseModel::find( $this->item_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Find User Item by user_id, item_id, item_type.\n+\t *\n+\t * @param int $user_id\n+\t * @param int $course_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t * @since 4.2.7\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function find( int $user_id, int $course_id, bool $check_cache = false ) {\n+\t\tstatic $staticData = [];\n+\n+\t\t$filter            = new LP_User_Items_Filter();\n+\t\t$filter->user_id   = $user_id;\n+\t\t$filter->item_id   = $course_id;\n+\t\t$filter->item_type = LP_COURSE_CPT;\n+\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$user_id}\u002F{$course_id}\u002F{$filter->item_type}\";\n+\t\t$lpUserCourseCache = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$userCourseModel = $lpUserCourseCache->get_cache( $key_cache );\n+\t\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t\treturn $userCourseModel;\n+\t\t\t}\n+\n+\t\t\tif ( isset( $staticData[ $key_cache ] ) ) {\n+\t\t\t\treturn $staticData[ $key_cache ];\n+\t\t\t}\n+\t\t}\n+\n+\t\t$userCourseModel = static::get_user_item_model_from_db( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t$lpUserCourseCache->set_cache( $key_cache, $userCourseModel );\n+\t\t}\n+\n+\t\t$staticData[ $key_cache ] = $userCourseModel;\n+\n+\t\treturn $userCourseModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get user_item is child of user course.\n+\t *\n+\t * @param int $item_id\n+\t * @param string $item_type\n+\t *\n+\t * @return false|UserItemModel|UserQuizModel|mixed\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_item_attend( int $item_id, string $item_type = '' ) {\n+\t\t$item = false;\n+\n+\t\ttry {\n+\t\t\t$item = UserItemModel::find_user_item(\n+\t\t\t\t$this->user_id,\n+\t\t\t\t$item_id,\n+\t\t\t\t$item_type,\n+\t\t\t\t$this->item_id,\n+\t\t\t\t$this->item_type,\n+\t\t\t\ttrue\n+\t\t\t);\n+\n+\t\t\tif ( $item ) {\n+\t\t\t\tswitch ( $item_type ) {\n+\t\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t\t\t$item = new UserLessonModel( $item );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t\t$item = new UserQuizModel( $item );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$item = apply_filters( 'learn-press\u002FuserCourseModel\u002Fget-item-attend', $item, $this, $item_id, $item_type );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $item;\n+\t}\n+\n+\t\u002F**\n+\t * Get item continue to learn.\n+\t *\n+\t * @return mixed|null\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_item_continue() {\n+\t\tif ( isset( $this->meta_data->item_continue ) ) {\n+\t\t\treturn $this->meta_data->item_continue;\n+\t\t}\n+\n+\t\t$itemModel = null;\n+\n+\t\ttry {\n+\t\t\t$courseModel   = $this->get_course_model();\n+\t\t\t$totalItemsObj = $courseModel->count_items();\n+\t\t\tif ( empty( $totalItemsObj ) ) {\n+\t\t\t\treturn $itemModel;\n+\t\t\t}\n+\n+\t\t\t$item_id        = 0;\n+\t\t\t$item_type      = '';\n+\t\t\t$sections_items = $courseModel->get_section_items();\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\tif ( $itemModel ) {\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t$item_id   = $item->id ?? $item->item_id;\n+\t\t\t\t\t$item_type = $item->type ?? $item->item_type;\n+\n+\t\t\t\t\t$userItemModel = UserItemModel::find_user_item(\n+\t\t\t\t\t\t$this->user_id,\n+\t\t\t\t\t\t$item_id,\n+\t\t\t\t\t\t$item_type,\n+\t\t\t\t\t\t$courseModel->get_id(),\n+\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\ttrue\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( ! $userItemModel || $userItemModel->get_status() !== LP_ITEM_COMPLETED ) {\n+\t\t\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For all items are completed\n+\t\t\tif ( empty( $itemModel ) && ! empty( $item_id ) && ! empty( $item_type ) ) {\n+\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\t\t\t}\n+\n+\t\t\t$this->meta_data->item_continue = $itemModel;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $itemModel;\n+\t}\n+\n+\t\u002F**\n+\t * Find next item when have just completed lesson.\n+\t * Logic: find item next not completed, circle to find next item, if not found return current item.\n+\t *\n+\t * @param int $item_id_current\n+\t *\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t * @return mixed|null\n+\t *\u002F\n+\tpublic function get_item_next_when_complete_lesson( int $item_id_current ) {\n+\t\t$itemModel         = null;\n+\t\t$item_before_found = 0;\n+\t\t$item_after_found  = 0;\n+\n+\t\ttry {\n+\t\t\t$courseModel      = $this->get_course_model();\n+\t\t\t$course_items     = $courseModel->get_only_items();\n+\t\t\t$course_item_keys = array_keys( $course_items );\n+\n+\t\t\t$index_of_current = array_search( $item_id_current, $course_item_keys, true );\n+\n+\t\t\tforeach ( $course_item_keys as $index => $item_id ) {\n+\t\t\t\t$course_item = $course_items[ $item_id ];\n+\t\t\t\t$item_type   = $course_item->item_type;\n+\n+\t\t\t\t$userItemModel  = UserItemModel::find_user_item(\n+\t\t\t\t\t$this->user_id,\n+\t\t\t\t\t$item_id,\n+\t\t\t\t\t$item_type,\n+\t\t\t\t\t$courseModel->get_id(),\n+\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\ttrue\n+\t\t\t\t);\n+\t\t\t\t$status_compare = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fuser-course-model\u002Fget-item-next-when-complete-lesson\u002Fstatus-compare',\n+\t\t\t\t\t[\n+\t\t\t\t\t\tUserItemModel::STATUS_COMPLETED,\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\n+\t\t\t\t\u002F\u002F Found item before current item not completed\n+\t\t\t\tif ( $index \u003C $index_of_current ) {\n+\t\t\t\t\tif ( ! $item_before_found &&\n+\t\t\t\t\t\t( ! $userItemModel || ! in_array( $userItemModel->get_status(), $status_compare ) ) ) {\n+\t\t\t\t\t\t$item_before_found = $course_item;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( $index > $index_of_current ) {\n+\t\t\t\t\t\u002F\u002F Found item after current item not completed\n+\t\t\t\t\tif ( ! $item_after_found &&\n+\t\t\t\t\t\t( ! $userItemModel || ! in_array( $userItemModel->get_status(), $status_compare ) ) ) {\n+\t\t\t\t\t\t$item_after_found = $course_item;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $item_after_found ) {\n+\t\t\t\t$itemModel = $courseModel->get_item_model( $item_after_found->item_id, $item_after_found->item_type );\n+\t\t\t} elseif ( $item_before_found ) {\n+\t\t\t\t$itemModel = $courseModel->get_item_model( $item_before_found->item_id, $item_before_found->item_type );\n+\t\t\t} else {\n+\t\t\t\t$itemModel = $courseModel->get_item_model( $item_id_current, LP_LESSON_CPT );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $itemModel;\n+\t}\n+\n+\t\u002F**\n+\t * Count students.\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return int\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function count_students( $filter ): int {\n+\t\t\u002F\u002F Check cache\n+\t\t$key_cache = 'count-courses-student-' . md5( json_encode( $filter ) );\n+\t\t$count     = LP_Cache::cache_load_first( 'get', $key_cache );\n+\t\tif ( false !== $count ) {\n+\t\t\treturn $count;\n+\t\t}\n+\n+\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t$count            = $lp_courses_cache->get_cache( $key_cache );\n+\t\tif ( false !== $count ) {\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\n+\n+\t\t\treturn $count;\n+\t\t}\n+\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$count            = $lp_user_items_db->count_students( $filter );\n+\n+\t\t\u002F\u002F Set cache\n+\t\t$lp_courses_cache->set_cache( $key_cache, $count );\n+\t\t$lp_courses_cache_keys = new LP_Courses_Cache( true );\n+\t\t$lp_courses_cache_keys->save_cache_keys_count_student_courses( $key_cache );\n+\t\tLP_Cache::cache_load_first( 'set', $key_cache, $count );\n+\n+\t\treturn $count;\n+\t}\n+\n+\t\u002F**\n+\t * Check course of user is enrolled or finished\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_enrolled_or_finished(): bool {\n+\t\treturn $this->has_enrolled() || $this->has_finished();\n+\t}\n+\n+\t\u002F**\n+\t * Check user has enrolled course\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_enrolled(): bool {\n+\t\treturn $this->status === UserItemModel::STATUS_ENROLLED;\n+\t}\n+\n+\t\u002F**\n+\t * Check user has purchased course\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_purchased(): bool {\n+\t\treturn $this->status === UserItemModel::STATUS_PURCHASED;\n+\t}\n+\n+\t\u002F**\n+\t * Check user has finished course\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_finished(): bool {\n+\t\treturn $this->status === UserItemModel::STATUS_FINISHED;\n+\t}\n+\n+\t\u002F**\n+\t * Check course has finished or not.\n+\t *\n+\t * @return bool\n+\t * @move from class-lp-user-item-course.php\n+\t * @since  3.0.0\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function is_finished(): bool {\n+\t\treturn $this->has_finished();\n+\t}\n+\n+\t\u002F**\n+\t * Calculate course result\n+\t *\n+\t * @move from class-lp-user-item-course.php\n+\t *\n+\t * @param bool $force_cache\n+\t *\n+\t * @return array [ 'count_items' => int, 'completed_items' => int, 'items' => array, 'evaluate_type' => string, 'pass' => int, 'result' => float ]\n+\t * @since 4.1.4\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function calculate_course_results( bool $force_cache = false ): array {\n+\t\t$items   = array();\n+\t\t$results = array(\n+\t\t\t'count_items'     => 0,\n+\t\t\t'completed_items' => 0,\n+\t\t\t'items'           => array(),\n+\t\t\t'evaluate_type'   => '',\n+\t\t\t'pass'            => 0,\n+\t\t\t'result'          => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course_model();\n+\t\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\t\tthrow new Exception( 'Course invalid!' );\n+\t\t\t}\n+\n+\t\t\t$key_first_cache = 'calculate_course\u002F' . $this->user_id . '\u002F' . $courseModel->get_id();\n+\t\t\t$results_cache   = LP_Cache::cache_load_first( 'get', $key_first_cache );\n+\t\t\tif ( false !== $results_cache && ! $force_cache ) {\n+\t\t\t\treturn $results_cache;\n+\t\t\t}\n+\n+\t\t\tif ( $this->is_finished() ) {\n+\t\t\t\t\u002F\u002F Get result from lp_user_item_results\n+\t\t\t\t\u002F\u002F Todo: tungnx - set cache\n+\t\t\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\t\t\t}\n+\n+\t\t\tif ( $this->status !== LP_COURSE_ENROLLED ) {\n+\t\t\t\treturn $results;\n+\t\t\t}\n+\n+\t\t\t$count_items           = $courseModel->count_items();\n+\t\t\t$count_items_completed = $this->count_items_completed();\n+\n+\t\t\t$evaluate_type = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_EVALUATION_TYPE, 'evaluate_lesson' );\n+\t\t\tswitch ( $evaluate_type ) {\n+\t\t\t\tcase 'evaluate_lesson':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_lesson( $count_items_completed, $courseModel->count_items( LP_LESSON_CPT ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_final_quiz':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_final_quiz();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_quiz':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_quizzes_passed( $count_items_completed, $courseModel->count_items( LP_QUIZ_CPT ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_questions':\n+\t\t\t\tcase 'evaluate_mark':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_question( $evaluate_type );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t\u002F\u002F Old Hook\n+\t\t\t\t\tif ( has_filter( 'learn-press\u002Fevaluate_passed_conditions' ) ) {\n+\t\t\t\t\t\t$user_course_old = new LP_User_Item_Course( $this );\n+\t\t\t\t\t\t$results         = apply_filters( 'learn-press\u002Fevaluate_passed_conditions', $results, $evaluate_type, $user_course_old );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$results_evaluate = apply_filters( 'learn-press\u002Fevaluate\u002Fcalculate', $results, $evaluate_type, $this );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ( ! is_array( $results_evaluate ) ) {\n+\t\t\t\t$results_evaluate = array(\n+\t\t\t\t\t'result' => 0,\n+\t\t\t\t\t'pass'   => 0,\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$results_evaluate['result'] = round( $results_evaluate['result'], 2 );\n+\n+\t\t\t$completed_items = intval( $count_items_completed->count_status ?? 0 );\n+\n+\t\t\t$item_types = CourseModel::item_types_support();\n+\t\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t\t$item_type_key = str_replace( 'lp_', '', $item_type );\n+\n+\t\t\t\t$items[ $item_type_key ] = array(\n+\t\t\t\t\t'completed' => $count_items_completed->{$item_type . '_status_completed'} ?? 0,\n+\t\t\t\t\t'passed'    => $count_items_completed->{$item_type . '_graduation_passed'} ?? 0,\n+\t\t\t\t\t'total'     => $courseModel->count_items( $item_type ),\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$results = array_merge(\n+\t\t\t\t$results_evaluate,\n+\t\t\t\tcompact( 'count_items', 'completed_items', 'items', 'evaluate_type' )\n+\t\t\t);\n+\n+\t\t\t$results = apply_filters(\n+\t\t\t\t'learn-press\u002Fupdate-course-results',\n+\t\t\t\t$results,\n+\t\t\t\t$this->item_id,\n+\t\t\t\t$this->user_id,\n+\t\t\t\t$this\n+\t\t\t);\n+\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $results );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $results;\n+\t}\n+\n+\t\u002F**\n+\t * Check user can retake course or not.\n+\t *\n+\t * @move from class-lp-user.php method can_retry_course since 4.0.0\n+\t * @use LP_User::can_retry_course\n+\t * @return int|mixed|null\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function can_retake() {\n+\t\t$flag = 0;\n+\n+\t\ttry {\n+\t\t\t$course = $this->get_course_model();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn $flag;\n+\t\t\t}\n+\n+\t\t\t$retake_option = (int) $course->get_meta_value_by_key( CoursePostModel::META_KEY_RETAKE_COUNT, 0 );\n+\t\t\tif ( $retake_option > 0 ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * Check course is finished\n+\t\t\t\t * Check duration is blocked\n+\t\t\t\t *\u002F\n+\t\t\t\tif ( ! $this->has_finished() ) {\n+\t\t\t\t\tif ( 0 !== $this->timestamp_remaining_duration() ) {\n+\t\t\t\t\t\tthrow new Exception();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$retaken          = $this->get_retaken_count();\n+\t\t\t\t$can_retake_times = $retake_option - $retaken;\n+\n+\t\t\t\tif ( $can_retake_times > 0 ) {\n+\t\t\t\t\t$flag = $can_retake_times;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fcan-retake', $flag, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get retaken count of user attend course.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_retaken_count(): int {\n+\t\treturn (int) $this->get_meta_value_from_key( self::META_KEY_RETAKEN_COUNT, 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Check time remaining course when enable duration expire\n+\t * Value: -1 is no limit (default)\n+\t * Value: 0 is block\n+\t * Administrator || (is instructor && is author course) will be not block.\n+\t *\n+\t * @return int second\n+\t * @since 4.0.0\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @depecated 4.2.7.6, instead of get_time_remaining\n+\t *\u002F\n+\tpublic function timestamp_remaining_duration(): int {\n+\t\t$timestamp_remaining = - 1;\n+\t\t$user                = $this->get_user_model();\n+\t\t\u002F**\n+\t\t * @var CourseModel $course\n+\t\t *\u002F\n+\t\t$course = $this->get_course_model();\n+\t\tif ( ! $user || ! $course ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t$author = $course->get_author_model();\n+\t\tif ( ! $author ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t$user_id = $user->get_id();\n+\n+\t\tif ( current_user_can( 'administrator' ) ||\n+\t\t\t( current_user_can( LP_TEACHER_ROLE ) && $author->get_id() === $user_id ) ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\tif ( 0 === (int) $course->get_duration() ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\tif ( ! $course->enable_block_when_expire() ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t$course_start_time_str = $this->get_start_time();\n+\t\t$course_start_time     = new LP_Datetime( $course_start_time_str );\n+\t\t$course_start_time     = $course_start_time->get_raw_date();\n+\t\t$duration              = $course->get_duration();\n+\t\t$timestamp_expire      = strtotime( $course_start_time . ' +' . $duration );\n+\t\t$timestamp_current     = time();\n+\t\t$timestamp_remaining   = $timestamp_expire - $timestamp_current;\n+\n+\t\tif ( $timestamp_remaining \u003C 0 ) {\n+\t\t\t$timestamp_remaining = 0;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\n+\t}\n+\n+\t\u002F**\n+\t * Check time remaining course when enable duration expire\n+\t * Value: -1 is no limit (default)\n+\t * Value: 0 is block\n+\t * Administrator || (is instructor && is author course) will be not block.\n+\t *\n+\t * @return int second\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_time_remaining(): int {\n+\t\t$timestamp_remaining = - 1;\n+\t\t$userModel           = $this->get_user_model();\n+\t\t$courseModel         = $this->get_course_model();\n+\t\tif ( ! $userModel || ! $courseModel ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t$author = $courseModel->get_author_model();\n+\t\tif ( ! $author ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t\u002F*$user_id = $userModel->get_id();\n+\t\t$user_wp = new \\WP_User( $userModel );\n+\t\tif ( user_can( $user_wp, ADMIN_ROLE ) ||\n+\t\t\t( user_can( $user_wp, LP_TEACHER_ROLE ) && $author->get_id() === $user_id ) ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}*\u002F\n+\n+\t\tif ( 0 === (int) $courseModel->get_duration() ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\tif ( ! $courseModel->enable_block_when_expire() ) {\n+\t\t\treturn $timestamp_remaining;\n+\t\t}\n+\n+\t\t$course_start_time   = new LP_Datetime( $this->get_start_time() );\n+\t\t$course_start_time   = $course_start_time->get_raw_date();\n+\t\t$duration            = $courseModel->get_duration();\n+\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\n+\t\t$timestamp_current   = time();\n+\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\n+\n+\t\tif ( $timestamp_remaining \u003C 0 ) {\n+\t\t\t$timestamp_remaining = 0;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fblock_duration_expire\u002Ftimestamp_remaining', $timestamp_remaining );\n+\t}\n+\n+\t\u002F**\n+\t * Get completed items.\n+\t *\n+\t * @return object\n+\t * @modify 4.1.4.1\n+\t * @since 4.0.0\n+\t * @version 4.0.3\n+\t *\u002F\n+\tpublic function count_items_completed() {\n+\t\t$lp_user_items_db      = LP_User_Items_DB::getInstance();\n+\t\t$count_items_completed = new stdClass();\n+\n+\t\ttry {\n+\t\t\t$key_cache_first       = \"userCourseModel\u002Fcount_items_completed\u002F{$this->user_id}\u002F{$this->item_id}\";\n+\t\t\t$count_items_completed = LP_Cache::cache_load_first( 'get', $key_cache_first );\n+\t\t\tif ( false !== $count_items_completed ) {\n+\t\t\t\treturn $count_items_completed;\n+\t\t\t}\n+\n+\t\t\t$filter_count             = new LP_User_Items_Filter();\n+\t\t\t$filter_count->parent_id  = $this->get_user_item_id();\n+\t\t\t$filter_count->item_id    = $this->item_id;\n+\t\t\t$filter_count->user_id    = $this->user_id;\n+\t\t\t$filter_count->status     = LP_ITEM_COMPLETED;\n+\t\t\t$filter_count->graduation = LP_COURSE_GRADUATION_PASSED;\n+\t\t\t$count_items_completed    = $lp_user_items_db->count_items_of_course_with_status( $filter_count );\n+\n+\t\t\t\u002F\u002F Set cache first\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_cache_first, $count_items_completed );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $count_items_completed;\n+\t}\n+\n+\t\u002F**\n+\t * Get graduation of course.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_graduation(): string {\n+\t\treturn (string) $this->graduation;\n+\t}\n+\n+\t\u002F**\n+\t * Check course is passed or not.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function is_passed(): bool {\n+\t\treturn $this->graduation === UserItemModel::GRADUATION_PASSED;\n+\t}\n+\n+\t\u002F**\n+\t * Check course is canceled or not.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function has_canceled(): bool {\n+\t\treturn $this->status === self::STATUS_CANCEL;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course result by lessons.\n+\t *\n+\t * @param $count_items_completed\n+\t * @param int $total_item_lesson\n+\t *\n+\t * @return array\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function evaluate_course_by_lesson( $count_items_completed, int $total_item_lesson = 0 ): array {\n+\t\t$evaluate = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\t$count_items_completed = intval( $count_items_completed->{LP_LESSON_CPT . '_status_completed'} ?? 0 );\n+\n+\t\tif ( $total_item_lesson && $count_items_completed ) {\n+\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_lesson;\n+\t\t}\n+\n+\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\n+\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t$evaluate['pass'] = 1;\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course result by final quiz.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function evaluate_course_by_final_quiz(): array {\n+\t\t$lp_user_items_db       = LP_User_Items_DB::getInstance();\n+\t\t$lp_user_item_result_db = LP_User_Items_Result_DB::instance();\n+\t\t$evaluate               = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course_model();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $evaluate;\n+\t\t\t}\n+\n+\t\t\t$quiz_final_id = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FINAL_QUIZ, 0 );\n+\t\t\tif ( ! $quiz_final_id ) {\n+\t\t\t\treturn $evaluate;\n+\t\t\t}\n+\n+\t\t\t$quizPostModel = QuizPostModel::find( $quiz_final_id, true );\n+\t\t\tif ( ! $quizPostModel ) {\n+\t\t\t\treturn $evaluate;\n+\t\t\t}\n+\n+\t\t\t$filter             = new LP_User_Items_Filter();\n+\t\t\t$filter->query_type = 'get_row';\n+\t\t\t$filter->parent_id  = $this->get_user_item_id();\n+\t\t\t$filter->item_type  = LP_QUIZ_CPT;\n+\t\t\t$filter->item_id    = $quiz_final_id;\n+\t\t\t$user_quiz          = $lp_user_items_db->get_user_course_items_by_item_type( $filter );\n+\t\t\tif ( ! $user_quiz ) {\n+\t\t\t\tthrow new Exception();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get result did quiz\n+\t\t\t$quiz_result = $lp_user_item_result_db->get_result( $user_quiz->user_item_id );\n+\n+\t\t\tif ( $quiz_result ) {\n+\t\t\t\tif ( ! isset( $quiz_result['result'] ) ) {\n+\t\t\t\t\t$evaluate['result'] = $quiz_result['user_mark'] * 100 \u002F $quiz_result['mark'];\n+\t\t\t\t} else {\n+\t\t\t\t\t$evaluate['result'] = $quiz_result['result'];\n+\t\t\t\t}\n+\n+\t\t\t\t$passing_condition = $quizPostModel->get_passing_grade();\n+\t\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by count quizzes passed\u002Fall quizzes.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function evaluate_course_by_quizzes_passed( $count_items_completed, $total_item_quizzes ): array {\n+\t\t$evaluate = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\t$count_items_completed = intval( $count_items_completed->{LP_QUIZ_CPT . '_graduation_passed'} ?? 0 );\n+\n+\t\tif ( $total_item_quizzes && $count_items_completed ) {\n+\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_quizzes;\n+\n+\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by count questions true\u002Fall questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprivate function evaluate_course_by_questions( &$evaluate, $lp_quizzes, $total_questions ) {\n+\t\t$lp_user_item_results_db = LP_User_Items_Result_DB::instance();\n+\t\t$count_questions_correct = 0;\n+\n+\t\t\u002F\u002F get questions correct\n+\t\tforeach ( $lp_quizzes as $lp_quiz ) {\n+\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\n+\t\t\tif ( $lp_quiz_result ) {\n+\t\t\t\t$count_questions_correct += $lp_quiz_result['question_correct'];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $total_questions && $count_questions_correct ) {\n+\t\t\t$evaluate['result'] = $count_questions_correct * 100 \u002F $total_questions;\n+\n+\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by total mark of questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprivate function evaluate_course_by_mark( &$evaluate, $lp_quizzes, $total_mark_questions ) {\n+\t\t$lp_user_item_results_db       = LP_User_Items_Result_DB::instance();\n+\t\t$count_mark_questions_receiver = 0;\n+\n+\t\tforeach ( $lp_quizzes as $lp_quiz ) {\n+\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\n+\t\t\tif ( $lp_quiz_result ) {\n+\t\t\t\t$count_mark_questions_receiver += $lp_quiz_result['user_mark'];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $count_mark_questions_receiver && $total_mark_questions ) {\n+\t\t\t$evaluate['result'] = $count_mark_questions_receiver * 100 \u002F $total_mark_questions;\n+\n+\t\t\t$passing_condition = $this->get_course_model()->get_passing_condition();\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by total mark of questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.2\n+\t *\u002F\n+\tprotected function evaluate_course_by_question( string $evaluate_type ): array {\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$evaluate         = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F get quiz_ids\n+\t\t\t$filter_get_quiz_ids            = new LP_User_Items_Filter();\n+\t\t\t$filter_get_quiz_ids->parent_id = $this->get_user_item_id();\n+\t\t\t$filter_get_quiz_ids->item_type = LP_QUIZ_CPT;\n+\t\t\t$lp_quizzes                     = $lp_user_items_db->get_user_course_items_by_item_type( $filter_get_quiz_ids );\n+\n+\t\t\t\u002F\u002F Get total questions, mark\n+\t\t\t$course = $this->get_course_model();\n+\n+\t\t\t$total_questions     = 0;\n+\t\t\t$total_mark_question = 0;\n+\n+\t\t\t\u002F\u002F Get all items' course\n+\t\t\t$sections_items = $course->get_section_items();\n+\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t$itemObj = LP_Course_Item::get_item( $item->id );\n+\t\t\t\t\tif ( ! $itemObj instanceof LP_Course_Item ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $item->type == LP_QUIZ_CPT ) {\n+\t\t\t\t\t\t$total_questions     += count( $itemObj->get_question_ids() );\n+\t\t\t\t\t\t$total_mark_question += $itemObj->get_mark();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End get total questions, mark\n+\n+\t\t\tswitch ( $evaluate_type ) {\n+\t\t\t\tcase 'evaluate_questions':\n+\t\t\t\t\t$this->evaluate_course_by_questions( $evaluate, $lp_quizzes, $total_questions );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_mark':\n+\t\t\t\t\t$this->evaluate_course_by_mark( $evaluate, $lp_quizzes, $total_mark_question );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get results of each quiz - has questions\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\tprotected function count_item_completed() {\n+\t}\n+\n+\t\u002F**\n+\t * Check user can finish course or not.\n+\t *\n+\t * @return bool|WP_Error\n+\t *\n+\t * @since 4.2.7.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function can_finish() {\n+\t\t$can_finish = true;\n+\n+\t\ttry {\n+\t\t\t$courseModel = $this->get_course_model();\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Course not exists!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$can_impact_item = $this->can_impact_item();\n+\t\t\tif ( $can_impact_item instanceof WP_Error ) {\n+\t\t\t\tthrow new Exception( $can_impact_item->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$course_results = $this->calculate_course_results();\n+\t\t\tif ( empty( $course_results['pass'] ) ) {\n+\t\t\t\t$allow_finish_when_all_item_completed = $courseModel->get_meta_value_by_key(\n+\t\t\t\t\tCoursePostModel::META_KEY_HAS_FINISH,\n+\t\t\t\t\t'yes'\n+\t\t\t\t);\n+\t\t\t\tif ( $allow_finish_when_all_item_completed ) {\n+\t\t\t\t\t$course_total_items_obj = $courseModel->get_total_items();\n+\t\t\t\t\tif ( $course_total_items_obj && $course_results['completed_items'] \u003C $course_total_items_obj->count_items ) {\n+\t\t\t\t\t\tthrow new Exception( __( 'You must complete all items in course', 'learnpress' ) );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow new Exception( __( 'You must passed course', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$can_finish = new WP_Error( 'lp_user_course_can_finish_err', $e->getMessage() );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-course\u002Fcan-finish', $can_finish, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Handle finish course.\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.7.6\n+\t *\u002F\n+\tpublic function handle_finish() {\n+\t\t$can_finish = $this->can_finish();\n+\t\tif ( is_wp_error( $can_finish ) ) {\n+\t\t\tthrow new Exception( $can_finish->get_error_message() );\n+\t\t}\n+\n+\t\t$course_results   = $this->calculate_course_results();\n+\t\t$this->graduation = $course_results['pass'] ? LP_COURSE_GRADUATION_PASSED : LP_COURSE_GRADUATION_FAILED;\n+\t\t$this->status     = LP_COURSE_FINISHED;\n+\t\t$this->end_time   = gmdate( LP_Datetime::$format, time() );\n+\t\t$this->save();\n+\n+\t\t\u002F\u002F Save result for course\n+\t\tLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), wp_json_encode( $course_results ) );\n+\n+\t\tdo_action( 'learn-press\u002Fuser-course-finished', $this->item_id, $this->user_id, $this->get_user_item_id() );\n+\t\tdo_action( 'learn-press\u002Fuser-course\u002Ffinished', $this );\n+\t}\n+\n+\t\u002F**\n+\t * Handle retake course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function handle_retake() {\n+\t\t$remaining_retake = $this->can_retake();\n+\t\tif ( $remaining_retake === 0 ) {\n+\t\t\tthrow new Exception( __( 'You can not retake this course!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$this->status     = self::STATUS_ENROLLED;\n+\t\t$this->graduation = self::GRADUATION_IN_PROGRESS;\n+\t\t$this->start_time = gmdate( LP_Datetime::$format, time() );\n+\t\t$this->end_time   = null;\n+\t\t$this->set_meta_value_for_key( self::META_KEY_RETAKEN_COUNT, $this->get_retaken_count() + 1 );\n+\t\t$this->save();\n+\n+\t\t$courseModel = $this->get_course_model();\n+\n+\t\tif ( $courseModel->count_items() > 0 ) {\n+\t\t\t\u002F\u002F Remove items' course user learned.\n+\t\t\t$filter_remove            = new LP_User_Items_Filter();\n+\t\t\t$filter_remove->parent_id = $this->get_user_item_id();\n+\t\t\t$filter_remove->user_id   = $this->user_id;\n+\t\t\t$filter_remove->limit     = - 1;\n+\t\t\tLP_User_Items_DB::getInstance()->remove_items_of_user_course( $filter_remove );\n+\n+\t\t\t\u002F\u002F Clean cache items.\n+\t\t\tforeach ( $courseModel->get_section_items() as $section_items ) {\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t$key_cache       = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$item->id}\u002F{$item->type}\u002F{$this->item_id}\u002F\" . LP_COURSE_CPT;\n+\t\t\t\t\t$lpUserItemCache = new LP_User_Items_Cache();\n+\t\t\t\t\t$lpUserItemCache->clear( $key_cache );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Create new result in table learnpress_user_item_results.\n+\t\tLP_User_Items_Result_DB::instance()->insert( $this->get_user_item_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Check can impact item.\n+\t *\n+\t * @return bool|WP_Error\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function can_impact_item() {\n+\t\t$can_impact_item = true;\n+\n+\t\t\u002F\u002F For case user Guest\n+\t\t$userModel = $this->get_user_model();\n+\t\tif ( ! $userModel ) {\n+\t\t\t$can_impact_item = new WP_Error( 'user_not_exists', __( 'User not exists!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$status = $this->get_status();\n+\t\tif ( $this->has_canceled() || ! $this->has_enrolled() ) {\n+\t\t\t$can_impact_item = new WP_Error( 'user_not_enroll_course', __( 'You have not enroll this course!', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( $this->has_finished() ) {\n+\t\t\t$can_impact_item = new WP_Error( 'user_finished_course', __( 'You have finished this course!', 'learnpress' ) );\n+\t\t}\n+\n+\t\tif ( $this->get_time_remaining() === 0 ) {\n+\t\t\t$can_impact_item = new WP_Error( 'course_is_blocked', __( 'Course was blocked by expire!', 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-course\u002Fcan-impact-item', $can_impact_item, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\n+\t * @return void\n+\t *\n+\t * @since 4.2.5.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t$key_cache         = \"userCourseModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\";\n+\t\t$lpUserCourseCache = new LP_Cache();\n+\t\t$lpUserCourseCache->clear( $key_cache );\n+\n+\t\tparent::clean_caches();\n+\t\t\u002F\u002F Clear cache total students enrolled of a course.\n+\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\t\t$lp_course_cache->clean_total_students_enrolled( $this->item_id );\n+\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $this->item_id );\n+\t\t\u002F\u002F Clear cache count students of many course\n+\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserItemModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserItemModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserItemModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserItemModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,597 +1,597 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserItemModel\r\n- * To replace class LP_User_Item\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.3\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItems;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LearnPress\\Models\\UserItemMeta\\UserItemMetaModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Datetime;\r\n-use LP_User_Item_Meta_DB;\r\n-use LP_User_Item_Meta_Filter;\r\n-use LP_User_Items_Cache;\r\n-use LP_User_Items_DB;\r\n-use LP_User_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class UserItemModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tprivate $user_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var string User ID, foreign key\r\n-\t *\u002F\r\n-\tpublic $user_id = 0;\r\n-\t\u002F**\r\n-\t * Item id (course, lesson, quiz ...)\r\n-\t *\r\n-\t * @var string foreign key\r\n-\t *\u002F\r\n-\tpublic $item_id = 0;\r\n-\t\u002F**\r\n-\t * @var string Time start item\r\n-\t *\u002F\r\n-\tpublic $start_time = null;\r\n-\t\u002F**\r\n-\t * @var string Time finish item\r\n-\t *\u002F\r\n-\tpublic $end_time = null;\r\n-\t\u002F**\r\n-\t * Item type (course, lesson, quiz ...)\r\n-\t *\r\n-\t * @var string Item type\r\n-\t *\u002F\r\n-\tpublic $item_type = '';\r\n-\t\u002F**\r\n-\t * Item status (completed, enrolled, finished ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $status = '';\r\n-\t\u002F**\r\n-\t * Item graduation\r\n-\t *\r\n-\t * @var string (passed, failed, in-progress...)\r\n-\t *\u002F\r\n-\tpublic $graduation = null;\r\n-\t\u002F**\r\n-\t * Ref id (Order, course ...)\r\n-\t *\r\n-\t * @var int Reference id\r\n-\t *\u002F\r\n-\tpublic $ref_id = 0;\r\n-\t\u002F**\r\n-\t * Ref type (Order, course ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type = '';\r\n-\t\u002F**\r\n-\t * Parent id\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $parent_id = 0;\r\n-\t\u002F**\r\n-\t * @var null|PostModel|CoursePostModel\r\n-\t *\u002F\r\n-\tpublic $item;\r\n-\t\u002F**\r\n-\t * List UserItemMetaModel\r\n-\t * object {meta_key: {meta_id, learnpress_user_item_id, meta_key, meta_value, extra_value}}\r\n-\t *\r\n-\t * @var {meta_key: UserItemMetaModel}\r\n-\t *\u002F\r\n-\tpublic $meta_data;\r\n-\r\n-\t\u002F\u002F Constants\r\n-\tconst STATUS_COMPLETED       = 'completed';\r\n-\tconst STATUS_FINISHED        = 'finished';\r\n-\tconst STATUS_ENROLLED        = 'enrolled';\r\n-\tconst STATUS_PURCHASED       = 'purchased';\r\n-\tconst STATUS_CANCEL          = 'cancel';\r\n-\tconst GRADUATION_IN_PROGRESS = 'in-progress';\r\n-\tconst GRADUATION_PASSED      = 'passed';\r\n-\tconst GRADUATION_FAILED      = 'failed';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t\t$this->get_user_model();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $this->meta_data instanceof stdClass ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get start time\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_start_time(): string {\r\n-\t\treturn is_null( $this->start_time ) ? '' : $this->start_time;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get end time\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_end_time(): string {\r\n-\t\treturn is_null( $this->end_time ) ? '' : $this->end_time;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get status\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_status(): string {\r\n-\t\treturn $this->status;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get graduation\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_graduation(): string {\r\n-\t\treturn is_null( $this->graduation ) ? '' : $this->graduation;\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * Get user item id\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_user_item_id(): int {\r\n-\t\treturn $this->user_item_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set user item id\r\n-\t *\r\n-\t * @param int $user_item_id\r\n-\t *\u002F\r\n-\tprivate function set_user_item_id( int $user_item_id ) {\r\n-\t\t$this->user_item_id = $user_item_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user model\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t * @since 4.2.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_user_model() {\r\n-\t\treturn UserModel::find( $this->user_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to UserItemModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return UserItemModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): UserItemModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user item from database by user_id, item_id, item_type.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return UserItemModel.\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return UserItemModel|false|static\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function get_user_item_model_from_db( $filter ) {\r\n-\t\t$lp_user_item_db = LP_User_Items_DB::getInstance();\r\n-\t\t$user_item_model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Set order by user_item_id DESC to get the latest user item.\r\n-\t\t\t$filter->order    = $filter::ORDER_DESC;\r\n-\t\t\t$filter->order_by = $filter::COL_USER_ITEM_ID;\r\n-\t\t\tif ( empty( $filter->item_type ) ) {\r\n-\t\t\t\t$filter->item_type = ( new static() )->item_type;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_user_item_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_user_item_db->get_user_items( $filter );\r\n-\t\t\t$user_item_rs     = $lp_user_item_db->wpdb->get_row( $query_single_row );\r\n-\t\t\tif ( $user_item_rs instanceof stdClass ) {\r\n-\t\t\t\t$user_item_model = new static( $user_item_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_item_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find User Item by user_id, item_id, item_type.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param int $item_id\r\n-\t * @param string $item_type\r\n-\t * @param int $ref_id\r\n-\t * @param string $ref_type\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|UserItemModel|static\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function find_user_item(\r\n-\t\tint $user_id,\r\n-\t\tint $item_id,\r\n-\t\tstring $item_type,\r\n-\t\tint $ref_id = 0,\r\n-\t\tstring $ref_type = '',\r\n-\t\tbool $check_cache = false\r\n-\t) {\r\n-\t\t$key_cache         = \"userItemModel\u002Ffind\u002F{$user_id}\u002F{$item_id}\u002F{$item_type}\";\r\n-\t\t$filter            = new LP_User_Items_Filter();\r\n-\t\t$filter->user_id   = $user_id;\r\n-\t\t$filter->item_id   = $item_id;\r\n-\t\t$filter->item_type = $item_type;\r\n-\t\tif ( ! empty( $ref_id ) ) {\r\n-\t\t\t$filter->ref_id = $ref_id;\r\n-\t\t\t$key_cache     .= \"\u002F{$ref_id}\";\r\n-\t\t}\r\n-\t\tif ( ! empty( $ref_type ) ) {\r\n-\t\t\t$filter->ref_type = $ref_type;\r\n-\t\t\t$key_cache       .= \"\u002F{$ref_type}\";\r\n-\t\t}\r\n-\t\t$lpUserItemCache = new LP_User_Items_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$userItemModel = $lpUserItemCache->get_cache( $key_cache );\r\n-\t\t\tif ( $userItemModel instanceof UserItemModel ) {\r\n-\t\t\t\treturn new static( $userItemModel );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$userItemModel = static::get_user_item_model_from_db( $filter );\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $userItemModel instanceof UserItemModel ) {\r\n-\t\t\tif ( ! $userItemModel->meta_data instanceof stdClass ) {\r\n-\t\t\t\t$userItemModel->meta_data = new stdClass();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lpUserItemCache->set_cache( $key_cache, $userItemModel );\r\n-\t\t}\r\n-\r\n-\t\treturn $userItemModel;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user item metadata from object meta_data or database by user_item_id, meta_key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return false|UserItemMetaModel\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_meta_model_from_key( string $key ) {\r\n-\t\t$filter                          = new LP_User_Item_Meta_Filter();\r\n-\t\t$filter->meta_key                = $key;\r\n-\t\t$filter->learnpress_user_item_id = $this->get_user_item_id();\r\n-\r\n-\t\treturn UserItemMetaModel::get_user_item_meta_model_from_db( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get metadata from key\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $default_value\r\n-\t * @param bool $get_extra\r\n-\t *\r\n-\t * @return false|string\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function get_meta_value_from_key( string $key, $default_value = false, bool $get_extra = false ) {\r\n-\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn maybe_unserialize( $this->meta_data->{$key} );\r\n-\t\t}\r\n-\r\n-\t\t$user_item_metadata = $this->get_meta_model_from_key( $key );\r\n-\t\tif ( $user_item_metadata instanceof UserItemMetaModel ) {\r\n-\t\t\tif ( ! $this->meta_data instanceof stdClass ) {\r\n-\t\t\t\t$this->meta_data = new stdClass();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $get_extra ) {\r\n-\t\t\t\t$data = $user_item_metadata->extra_value;\r\n-\t\t\t} else {\r\n-\t\t\t\t$data = $user_item_metadata->meta_value;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->meta_data->{$key} = maybe_unserialize( $data );\r\n-\t\t} else {\r\n-\t\t\t$data = $default_value;\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update meta value for key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $value\r\n-\t * @param bool $is_extra\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function set_meta_value_for_key( string $key, $value, bool $is_extra = false ) {\r\n-\t\tif ( ! $this->meta_data instanceof stdClass ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\t\t$lp_db                   = LP_User_Items_DB::getInstance();\r\n-\t\tif ( $is_extra ) {\r\n-\t\t\tif ( is_object( $value ) || is_array( $value ) ) {\r\n-\t\t\t\t$value = json_encode( $value );\r\n-\t\t\t}\r\n-\t\t\t$lp_db->update_extra_value( $this->get_user_item_id(), $key, $value );\r\n-\t\t} else {\r\n-\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete meta from key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_meta( string $key ) {\r\n-\t\t$user_item_metadata = $this->get_meta_model_from_key( $key );\r\n-\t\tif ( $user_item_metadata instanceof UserItemMetaModel ) {\r\n-\t\t\t$user_item_metadata->delete();\r\n-\t\t\t$this->meta_data->{$key} = null;\r\n-\t\t\t$this->clean_caches();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database.\r\n-\t *\r\n-\t * If user_item_id is empty, insert new data, else update data.\r\n-\t *\r\n-\t * @return UserItemModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function save(): UserItemModel {\r\n-\t\t$lp_user_item_db  = LP_User_Items_DB::getInstance();\r\n-\t\t$user_item_id_new = 0;\r\n-\t\t$data             = get_object_vars( $this );\r\n-\r\n-\t\tif ( ! isset( $data['start_time'] ) ) {\r\n-\t\t\t$data['start_time'] = gmdate( 'Y-m-d H:i:s', time() );\r\n-\t\t\t$this->start_time   = $data['start_time'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check if exists user_item_id.\r\n-\t\tif ( empty( $this->get_user_item_id() ) ) { \u002F\u002F Insert data.\r\n-\t\t\tif ( empty( $data['item_id'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Item ID is require.' );\r\n-\t\t\t}\r\n-\t\t\tif ( empty( $data['item_type'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Item Type is require.' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Guest can buy course if enable guest checkout.\r\n-\t\t\tif ( empty( $data['user_id'] ) && LP_COURSE_CPT !== $data['item_type'] ) {\r\n-\t\t\t\tthrow new Exception( 'User ID is require.' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_item_id_new = $lp_user_item_db->insert_data( $data );\r\n-\t\t\tif ( empty( $user_item_id_new ) ) {\r\n-\t\t\t\tthrow new Exception( 'Cannot insert data to database.' );\r\n-\t\t\t}\r\n-\t\t} else { \u002F\u002F Update data.\r\n-\t\t\t$lp_user_item_db->update_data( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( $user_item_id_new ) {\r\n-\t\t\t$this->set_user_item_id( $user_item_id_new );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Clear caches.\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total timestamp complete, done item.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_total_timestamp_completed(): int {\r\n-\t\t$time_interval = 0;\r\n-\r\n-\t\tif ( empty( $this->get_start_time() ) || empty( $this->get_end_time() ) ) {\r\n-\t\t\treturn $time_interval;\r\n-\t\t}\r\n-\r\n-\t\t$start = new LP_Datetime( $this->get_start_time() );\r\n-\t\t$end   = new LP_Datetime( $this->get_end_time() );\r\n-\r\n-\t\treturn $end->getTimestamp() - $start->getTimestamp();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get expiration time.\r\n-\t *\r\n-\t * @return null|LP_Datetime $time\r\n-\t * @since 3.3.0\r\n-\t * @version 3.3.3\r\n-\t *\u002F\r\n-\tpublic function get_expiration_time() {\r\n-\t\t$duration = get_post_meta( $this->item_id, '_lp_duration', true );\r\n-\r\n-\t\tif ( ! absint( $duration ) || empty( $this->start_time ) ) {\r\n-\t\t\t$expire = null;\r\n-\t\t} else {\r\n-\t\t\t$start      = new LP_Datetime( $this->start_time );\r\n-\t\t\t$start_time = $start->getTimestamp();\r\n-\t\t\t\u002F\u002F Convert duration from string to seconds.\r\n-\t\t\tif ( ! is_numeric( $duration ) ) {\r\n-\t\t\t\t$duration = strtotime( $duration ) - time();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$expire_time = $start_time + $duration;\r\n-\t\t\t$expire      = new LP_Datetime( $expire_time );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnPress\u002Fuser-item\u002Fexpiration-time', $expire, $duration, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get translate value.\r\n-\t *\r\n-\t * @param string $value\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.8\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_string_i18n( string $value ): string {\r\n-\t\tswitch ( $value ) {\r\n-\t\t\tcase self::STATUS_COMPLETED:\r\n-\t\t\t\t$value = __( 'Completed', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::STATUS_FINISHED:\r\n-\t\t\t\t$value = __( 'Finished', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::STATUS_ENROLLED:\r\n-\t\t\t\t$value = __( 'Enrolled', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::STATUS_CANCEL:\r\n-\t\t\t\t$value = __( 'Cancel', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::GRADUATION_IN_PROGRESS:\r\n-\t\t\t\t$value = __( 'In Progress', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::GRADUATION_PASSED:\r\n-\t\t\t\t$value = __( 'Passed', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase self::GRADUATION_FAILED:\r\n-\t\t\t\t$value = __( 'Failed', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete user item.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function delete() {\r\n-\t\t\u002F\u002F Delete meta data of user item.\r\n-\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\r\n-\t\t$filter               = new LP_User_Item_Meta_Filter();\r\n-\t\t$filter->where[]      = $lp_user_item_meta_db->wpdb->prepare( 'AND learnpress_user_item_id = %d', $this->get_user_item_id() );\r\n-\t\t$filter->collection   = $lp_user_item_meta_db->tb_lp_user_itemmeta;\r\n-\t\t$lp_user_item_meta_db->delete_execute( $filter );\r\n-\t\t$this->meta_data = null;\r\n-\r\n-\t\t\u002F\u002F Delete user item relationships.\r\n-\t\t$lp_user_item_db    = LP_User_Items_DB::getInstance();\r\n-\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t$filter->where[]    = $lp_user_item_db->wpdb->prepare( 'AND parent_id = %d', $this->get_user_item_id() );\r\n-\t\t$filter->collection = $lp_user_item_db->tb_lp_user_items;\r\n-\t\t$lp_user_item_db->delete_execute( $filter );\r\n-\r\n-\t\t\u002F\u002F Delete user item.\r\n-\t\t$lp_user_item_db    = LP_User_Items_DB::getInstance();\r\n-\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t$filter->where[]    = $lp_user_item_db->wpdb->prepare( 'AND user_item_id = %d', $this->get_user_item_id() );\r\n-\t\t$filter->collection = $lp_user_item_db->tb_lp_user_items;\r\n-\t\t$lp_user_item_db->delete_execute( $filter );\r\n-\r\n-\t\t$this->clean_caches();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t\u002F\u002F Clear cache user item.\r\n-\t\t$lp_user_items_cache = new LP_User_Items_Cache();\r\n-\t\t$lp_user_items_cache->clean_user_item(\r\n-\t\t\t[\r\n-\t\t\t\t$this->user_id,\r\n-\t\t\t\t$this->item_id,\r\n-\t\t\t\t$this->item_type,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$key_cache_user_item = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\";\r\n-\t\t$lp_user_items_cache->clear( $key_cache_user_item );\r\n-\r\n-\t\t$key_cache_user_item_ref = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\u002F{$this->ref_id}\u002F{$this->ref_type}\";\r\n-\t\t$lp_user_items_cache->clear( $key_cache_user_item_ref );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserItemModel\n+ * To replace class LP_User_Item\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.3\n+ * @since 4.2.5\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItems;\n+\n+use Exception;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\PostModel;\n+use LearnPress\\Models\\UserItemMeta\\UserItemMetaModel;\n+use LearnPress\\Models\\UserModel;\n+use LP_Datetime;\n+use LP_User_Item_Meta_DB;\n+use LP_User_Item_Meta_Filter;\n+use LP_User_Items_Cache;\n+use LP_User_Items_DB;\n+use LP_User_Items_Filter;\n+use stdClass;\n+use Throwable;\n+\n+class UserItemModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tprivate $user_item_id = 0;\n+\t\u002F**\n+\t * @var string User ID, foreign key\n+\t *\u002F\n+\tpublic $user_id = 0;\n+\t\u002F**\n+\t * Item id (course, lesson, quiz ...)\n+\t *\n+\t * @var string foreign key\n+\t *\u002F\n+\tpublic $item_id = 0;\n+\t\u002F**\n+\t * @var string Time start item\n+\t *\u002F\n+\tpublic $start_time = null;\n+\t\u002F**\n+\t * @var string Time finish item\n+\t *\u002F\n+\tpublic $end_time = null;\n+\t\u002F**\n+\t * Item type (course, lesson, quiz ...)\n+\t *\n+\t * @var string Item type\n+\t *\u002F\n+\tpublic $item_type = '';\n+\t\u002F**\n+\t * Item status (completed, enrolled, finished ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $status = '';\n+\t\u002F**\n+\t * Item graduation\n+\t *\n+\t * @var string (passed, failed, in-progress...)\n+\t *\u002F\n+\tpublic $graduation = null;\n+\t\u002F**\n+\t * Ref id (Order, course ...)\n+\t *\n+\t * @var int Reference id\n+\t *\u002F\n+\tpublic $ref_id = 0;\n+\t\u002F**\n+\t * Ref type (Order, course ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type = '';\n+\t\u002F**\n+\t * Parent id\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $parent_id = 0;\n+\t\u002F**\n+\t * @var null|PostModel|CoursePostModel\n+\t *\u002F\n+\tpublic $item;\n+\t\u002F**\n+\t * List UserItemMetaModel\n+\t * object {meta_key: {meta_id, learnpress_user_item_id, meta_key, meta_value, extra_value}}\n+\t *\n+\t * @var {meta_key: UserItemMetaModel}\n+\t *\u002F\n+\tpublic $meta_data;\n+\n+\t\u002F\u002F Constants\n+\tconst STATUS_COMPLETED       = 'completed';\n+\tconst STATUS_FINISHED        = 'finished';\n+\tconst STATUS_ENROLLED        = 'enrolled';\n+\tconst STATUS_PURCHASED       = 'purchased';\n+\tconst STATUS_CANCEL          = 'cancel';\n+\tconst GRADUATION_IN_PROGRESS = 'in-progress';\n+\tconst GRADUATION_PASSED      = 'passed';\n+\tconst GRADUATION_FAILED      = 'failed';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t\t$this->get_user_model();\n+\t\t}\n+\n+\t\tif ( ! $this->meta_data instanceof stdClass ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get start time\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_start_time(): string {\n+\t\treturn is_null( $this->start_time ) ? '' : $this->start_time;\n+\t}\n+\n+\t\u002F**\n+\t * Get end time\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_end_time(): string {\n+\t\treturn is_null( $this->end_time ) ? '' : $this->end_time;\n+\t}\n+\n+\t\u002F**\n+\t * Get status\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_status(): string {\n+\t\treturn $this->status;\n+\t}\n+\n+\t\u002F**\n+\t * Get graduation\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_graduation(): string {\n+\t\treturn is_null( $this->graduation ) ? '' : $this->graduation;\n+\t}\n+\n+\n+\t\u002F**\n+\t * Get user item id\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_user_item_id(): int {\n+\t\treturn $this->user_item_id;\n+\t}\n+\n+\t\u002F**\n+\t * Set user item id\n+\t *\n+\t * @param int $user_item_id\n+\t *\u002F\n+\tprivate function set_user_item_id( int $user_item_id ) {\n+\t\t$this->user_item_id = $user_item_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get user model\n+\t *\n+\t * @return false|UserModel\n+\t * @since 4.2.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_user_model() {\n+\t\treturn UserModel::find( $this->user_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to UserItemModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return UserItemModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): UserItemModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get user item from database by user_id, item_id, item_type.\n+\t * If not exists, return false.\n+\t * If exists, return UserItemModel.\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return UserItemModel|false|static\n+\t * @since 4.2.5\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function get_user_item_model_from_db( $filter ) {\n+\t\t$lp_user_item_db = LP_User_Items_DB::getInstance();\n+\t\t$user_item_model = false;\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Set order by user_item_id DESC to get the latest user item.\n+\t\t\t$filter->order    = $filter::ORDER_DESC;\n+\t\t\t$filter->order_by = $filter::COL_USER_ITEM_ID;\n+\t\t\tif ( empty( $filter->item_type ) ) {\n+\t\t\t\t$filter->item_type = ( new static() )->item_type;\n+\t\t\t}\n+\n+\t\t\t$lp_user_item_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_user_item_db->get_user_items( $filter );\n+\t\t\t$user_item_rs     = $lp_user_item_db->wpdb->get_row( $query_single_row );\n+\t\t\tif ( $user_item_rs instanceof stdClass ) {\n+\t\t\t\t$user_item_model = new static( $user_item_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_item_model;\n+\t}\n+\n+\t\u002F**\n+\t * Find User Item by user_id, item_id, item_type.\n+\t *\n+\t * @param int $user_id\n+\t * @param int $item_id\n+\t * @param string $item_type\n+\t * @param int $ref_id\n+\t * @param string $ref_type\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|UserItemModel|static\n+\t * @since 4.2.7.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function find_user_item(\n+\t\tint $user_id,\n+\t\tint $item_id,\n+\t\tstring $item_type,\n+\t\tint $ref_id = 0,\n+\t\tstring $ref_type = '',\n+\t\tbool $check_cache = false\n+\t) {\n+\t\t$key_cache         = \"userItemModel\u002Ffind\u002F{$user_id}\u002F{$item_id}\u002F{$item_type}\";\n+\t\t$filter            = new LP_User_Items_Filter();\n+\t\t$filter->user_id   = $user_id;\n+\t\t$filter->item_id   = $item_id;\n+\t\t$filter->item_type = $item_type;\n+\t\tif ( ! empty( $ref_id ) ) {\n+\t\t\t$filter->ref_id = $ref_id;\n+\t\t\t$key_cache     .= \"\u002F{$ref_id}\";\n+\t\t}\n+\t\tif ( ! empty( $ref_type ) ) {\n+\t\t\t$filter->ref_type = $ref_type;\n+\t\t\t$key_cache       .= \"\u002F{$ref_type}\";\n+\t\t}\n+\t\t$lpUserItemCache = new LP_User_Items_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$userItemModel = $lpUserItemCache->get_cache( $key_cache );\n+\t\t\tif ( $userItemModel instanceof UserItemModel ) {\n+\t\t\t\treturn new static( $userItemModel );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$userItemModel = static::get_user_item_model_from_db( $filter );\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $userItemModel instanceof UserItemModel ) {\n+\t\t\tif ( ! $userItemModel->meta_data instanceof stdClass ) {\n+\t\t\t\t$userItemModel->meta_data = new stdClass();\n+\t\t\t}\n+\n+\t\t\t$lpUserItemCache->set_cache( $key_cache, $userItemModel );\n+\t\t}\n+\n+\t\treturn $userItemModel;\n+\t}\n+\n+\t\u002F**\n+\t * Get user item metadata from object meta_data or database by user_item_id, meta_key.\n+\t *\n+\t * @param string $key\n+\t *\n+\t * @return false|UserItemMetaModel\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_meta_model_from_key( string $key ) {\n+\t\t$filter                          = new LP_User_Item_Meta_Filter();\n+\t\t$filter->meta_key                = $key;\n+\t\t$filter->learnpress_user_item_id = $this->get_user_item_id();\n+\n+\t\treturn UserItemMetaModel::get_user_item_meta_model_from_db( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Get metadata from key\n+\t *\n+\t * @param string $key\n+\t * @param mixed $default_value\n+\t * @param bool $get_extra\n+\t *\n+\t * @return false|string\n+\t * @since 4.2.5\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function get_meta_value_from_key( string $key, $default_value = false, bool $get_extra = false ) {\n+\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\n+\t\t\treturn maybe_unserialize( $this->meta_data->{$key} );\n+\t\t}\n+\n+\t\t$user_item_metadata = $this->get_meta_model_from_key( $key );\n+\t\tif ( $user_item_metadata instanceof UserItemMetaModel ) {\n+\t\t\tif ( ! $this->meta_data instanceof stdClass ) {\n+\t\t\t\t$this->meta_data = new stdClass();\n+\t\t\t}\n+\n+\t\t\tif ( $get_extra ) {\n+\t\t\t\t$data = $user_item_metadata->extra_value;\n+\t\t\t} else {\n+\t\t\t\t$data = $user_item_metadata->meta_value;\n+\t\t\t}\n+\n+\t\t\t$this->meta_data->{$key} = maybe_unserialize( $data );\n+\t\t} else {\n+\t\t\t$data = $default_value;\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Update meta value for key.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $value\n+\t * @param bool $is_extra\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function set_meta_value_for_key( string $key, $value, bool $is_extra = false ) {\n+\t\tif ( ! $this->meta_data instanceof stdClass ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\n+\t\t$this->meta_data->{$key} = $value;\n+\t\t$lp_db                   = LP_User_Items_DB::getInstance();\n+\t\tif ( $is_extra ) {\n+\t\t\tif ( is_object( $value ) || is_array( $value ) ) {\n+\t\t\t\t$value = json_encode( $value );\n+\t\t\t}\n+\t\t\t$lp_db->update_extra_value( $this->get_user_item_id(), $key, $value );\n+\t\t} else {\n+\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value );\n+\t\t}\n+\n+\t\t\u002F\u002F$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Delete meta from key.\n+\t *\n+\t * @param string $key\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_meta( string $key ) {\n+\t\t$user_item_metadata = $this->get_meta_model_from_key( $key );\n+\t\tif ( $user_item_metadata instanceof UserItemMetaModel ) {\n+\t\t\t$user_item_metadata->delete();\n+\t\t\t$this->meta_data->{$key} = null;\n+\t\t\t$this->clean_caches();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database.\n+\t *\n+\t * If user_item_id is empty, insert new data, else update data.\n+\t *\n+\t * @return UserItemModel\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function save(): UserItemModel {\n+\t\t$lp_user_item_db  = LP_User_Items_DB::getInstance();\n+\t\t$user_item_id_new = 0;\n+\t\t$data             = get_object_vars( $this );\n+\n+\t\tif ( ! isset( $data['start_time'] ) ) {\n+\t\t\t$data['start_time'] = gmdate( 'Y-m-d H:i:s', time() );\n+\t\t\t$this->start_time   = $data['start_time'];\n+\t\t}\n+\n+\t\t\u002F\u002F Check if exists user_item_id.\n+\t\tif ( empty( $this->get_user_item_id() ) ) { \u002F\u002F Insert data.\n+\t\t\tif ( empty( $data['item_id'] ) ) {\n+\t\t\t\tthrow new Exception( 'Item ID is require.' );\n+\t\t\t}\n+\t\t\tif ( empty( $data['item_type'] ) ) {\n+\t\t\t\tthrow new Exception( 'Item Type is require.' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Guest can buy course if enable guest checkout.\n+\t\t\tif ( empty( $data['user_id'] ) && LP_COURSE_CPT !== $data['item_type'] ) {\n+\t\t\t\tthrow new Exception( 'User ID is require.' );\n+\t\t\t}\n+\n+\t\t\t$user_item_id_new = $lp_user_item_db->insert_data( $data );\n+\t\t\tif ( empty( $user_item_id_new ) ) {\n+\t\t\t\tthrow new Exception( 'Cannot insert data to database.' );\n+\t\t\t}\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\t$lp_user_item_db->update_data( $data );\n+\t\t}\n+\n+\t\tif ( $user_item_id_new ) {\n+\t\t\t$this->set_user_item_id( $user_item_id_new );\n+\t\t}\n+\n+\t\t\u002F\u002F Clear caches.\n+\t\t$this->clean_caches();\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get total timestamp complete, done item.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_total_timestamp_completed(): int {\n+\t\t$time_interval = 0;\n+\n+\t\tif ( empty( $this->get_start_time() ) || empty( $this->get_end_time() ) ) {\n+\t\t\treturn $time_interval;\n+\t\t}\n+\n+\t\t$start = new LP_Datetime( $this->get_start_time() );\n+\t\t$end   = new LP_Datetime( $this->get_end_time() );\n+\n+\t\treturn $end->getTimestamp() - $start->getTimestamp();\n+\t}\n+\n+\t\u002F**\n+\t * Get expiration time.\n+\t *\n+\t * @return null|LP_Datetime $time\n+\t * @since 3.3.0\n+\t * @version 3.3.3\n+\t *\u002F\n+\tpublic function get_expiration_time() {\n+\t\t$duration = get_post_meta( $this->item_id, '_lp_duration', true );\n+\n+\t\tif ( ! absint( $duration ) || empty( $this->start_time ) ) {\n+\t\t\t$expire = null;\n+\t\t} else {\n+\t\t\t$start      = new LP_Datetime( $this->start_time );\n+\t\t\t$start_time = $start->getTimestamp();\n+\t\t\t\u002F\u002F Convert duration from string to seconds.\n+\t\t\tif ( ! is_numeric( $duration ) ) {\n+\t\t\t\t$duration = strtotime( $duration ) - time();\n+\t\t\t}\n+\n+\t\t\t$expire_time = $start_time + $duration;\n+\t\t\t$expire      = new LP_Datetime( $expire_time );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnPress\u002Fuser-item\u002Fexpiration-time', $expire, $duration, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get translate value.\n+\t *\n+\t * @param string $value\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.8\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_string_i18n( string $value ): string {\n+\t\tswitch ( $value ) {\n+\t\t\tcase self::STATUS_COMPLETED:\n+\t\t\t\t$value = __( 'Completed', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::STATUS_FINISHED:\n+\t\t\t\t$value = __( 'Finished', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::STATUS_ENROLLED:\n+\t\t\t\t$value = __( 'Enrolled', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::STATUS_CANCEL:\n+\t\t\t\t$value = __( 'Cancel', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::GRADUATION_IN_PROGRESS:\n+\t\t\t\t$value = __( 'In Progress', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::GRADUATION_PASSED:\n+\t\t\t\t$value = __( 'Passed', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase self::GRADUATION_FAILED:\n+\t\t\t\t$value = __( 'Failed', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * Delete user item.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.7.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function delete() {\n+\t\t\u002F\u002F Delete meta data of user item.\n+\t\t$lp_user_item_meta_db = LP_User_Item_Meta_DB::getInstance();\n+\t\t$filter               = new LP_User_Item_Meta_Filter();\n+\t\t$filter->where[]      = $lp_user_item_meta_db->wpdb->prepare( 'AND learnpress_user_item_id = %d', $this->get_user_item_id() );\n+\t\t$filter->collection   = $lp_user_item_meta_db->tb_lp_user_itemmeta;\n+\t\t$lp_user_item_meta_db->delete_execute( $filter );\n+\t\t$this->meta_data = null;\n+\n+\t\t\u002F\u002F Delete user item relationships.\n+\t\t$lp_user_item_db    = LP_User_Items_DB::getInstance();\n+\t\t$filter             = new LP_User_Items_Filter();\n+\t\t$filter->where[]    = $lp_user_item_db->wpdb->prepare( 'AND parent_id = %d', $this->get_user_item_id() );\n+\t\t$filter->collection = $lp_user_item_db->tb_lp_user_items;\n+\t\t$lp_user_item_db->delete_execute( $filter );\n+\n+\t\t\u002F\u002F Delete user item.\n+\t\t$lp_user_item_db    = LP_User_Items_DB::getInstance();\n+\t\t$filter             = new LP_User_Items_Filter();\n+\t\t$filter->where[]    = $lp_user_item_db->wpdb->prepare( 'AND user_item_id = %d', $this->get_user_item_id() );\n+\t\t$filter->collection = $lp_user_item_db->tb_lp_user_items;\n+\t\t$lp_user_item_db->delete_execute( $filter );\n+\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t\u002F\u002F Clear cache user item.\n+\t\t$lp_user_items_cache = new LP_User_Items_Cache();\n+\t\t$lp_user_items_cache->clean_user_item(\n+\t\t\t[\n+\t\t\t\t$this->user_id,\n+\t\t\t\t$this->item_id,\n+\t\t\t\t$this->item_type,\n+\t\t\t]\n+\t\t);\n+\n+\t\t$key_cache_user_item = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\";\n+\t\t$lp_user_items_cache->clear( $key_cache_user_item );\n+\n+\t\t$key_cache_user_item_ref = \"userItemModel\u002Ffind\u002F{$this->user_id}\u002F{$this->item_id}\u002F{$this->item_type}\u002F{$this->ref_id}\u002F{$this->ref_type}\";\n+\t\t$lp_user_items_cache->clear( $key_cache_user_item_ref );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserLessonModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserLessonModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserLessonModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserLessonModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,100 +1,100 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserLessonModel\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- * @since 4.2.7.6\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItems;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LP_Datetime;\r\n-use WP_Error;\r\n-\r\n-class UserLessonModel extends UserItemModel {\r\n-\t\u002F**\r\n-\t * Item type Lesson\r\n-\t *\r\n-\t * @var string Item type\r\n-\t *\u002F\r\n-\tpublic $item_type = LP_LESSON_CPT;\r\n-\t\u002F**\r\n-\t * Ref type Course\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type = LP_COURSE_CPT;\r\n-\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get lesson model\r\n-\t *\r\n-\t * @return bool|LessonPostModel\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_lesson_post_model() {\r\n-\t\treturn LessonPostModel::find( $this->item_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\treturn CourseModel::find( $this->ref_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user course model\r\n-\t *\r\n-\t * @return false|UserCourseModel\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_user_course_model() {\r\n-\t\treturn UserCourseModel::find( $this->user_id, $this->ref_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Complete lesson\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.7.6\r\n-\t *\u002F\r\n-\tpublic function set_complete() {\r\n-\t\tif ( $this->get_status() === self::STATUS_COMPLETED ) {\r\n-\t\t\tthrow new Exception( __( 'Lesson is already completed.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$userCourseModel = $this->get_user_course_model();\r\n-\t\tif ( ! $userCourseModel ) {\r\n-\t\t\tthrow new Exception( __( 'You have not started course', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$can_impact_lesson = $userCourseModel->can_impact_item();\r\n-\t\tif ( $can_impact_lesson instanceof WP_Error ) {\r\n-\t\t\tthrow new Exception( $can_impact_lesson->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\t$this->status     = self::STATUS_COMPLETED;\r\n-\t\t$this->end_time   = gmdate( LP_Datetime::$format, time() );\r\n-\t\t$this->graduation = self::GRADUATION_PASSED;\r\n-\t\t$this->save();\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fuser-completed-lesson', $this->item_id, $this->ref_id, $this->user_id );\r\n-\t\tdo_action( 'learn-press\u002Fuser-lesson\u002Fcompleted', $this );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserLessonModel\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ * @since 4.2.7.6\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItems;\n+\n+use Exception;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LP_Datetime;\n+use WP_Error;\n+\n+class UserLessonModel extends UserItemModel {\n+\t\u002F**\n+\t * Item type Lesson\n+\t *\n+\t * @var string Item type\n+\t *\u002F\n+\tpublic $item_type = LP_LESSON_CPT;\n+\t\u002F**\n+\t * Ref type Course\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type = LP_COURSE_CPT;\n+\n+\tpublic function __construct( $data = null ) {\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Get lesson model\n+\t *\n+\t * @return bool|LessonPostModel\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_lesson_post_model() {\n+\t\treturn LessonPostModel::find( $this->item_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return false|CourseModel\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\treturn CourseModel::find( $this->ref_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get user course model\n+\t *\n+\t * @return false|UserCourseModel\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_user_course_model() {\n+\t\treturn UserCourseModel::find( $this->user_id, $this->ref_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Complete lesson\n+\t *\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.2.7.6\n+\t *\u002F\n+\tpublic function set_complete() {\n+\t\tif ( $this->get_status() === self::STATUS_COMPLETED ) {\n+\t\t\tthrow new Exception( __( 'Lesson is already completed.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$userCourseModel = $this->get_user_course_model();\n+\t\tif ( ! $userCourseModel ) {\n+\t\t\tthrow new Exception( __( 'You have not started course', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$can_impact_lesson = $userCourseModel->can_impact_item();\n+\t\tif ( $can_impact_lesson instanceof WP_Error ) {\n+\t\t\tthrow new Exception( $can_impact_lesson->get_error_message() );\n+\t\t}\n+\n+\t\t$this->status     = self::STATUS_COMPLETED;\n+\t\t$this->end_time   = gmdate( LP_Datetime::$format, time() );\n+\t\t$this->graduation = self::GRADUATION_PASSED;\n+\t\t$this->save();\n+\n+\t\tdo_action( 'learn-press\u002Fuser-completed-lesson', $this->item_id, $this->ref_id, $this->user_id );\n+\t\tdo_action( 'learn-press\u002Fuser-lesson\u002Fcompleted', $this );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserQuizModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserQuizModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserItems\u002FUserQuizModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserItems\u002FUserQuizModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,639 +1,639 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class UserQuizModel\r\n- *\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.2\r\n- * @since 4.2.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\Models\\UserItems;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItemMeta\\UserItemMetaModel;\r\n-use LearnPress\\Models\\UserItemMeta\\UserQuizMetaModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPressAssignment\\Models\\AssignmentPostModel;\r\n-use LP_Course;\r\n-use LP_Datetime;\r\n-use LP_Helper;\r\n-use LP_Question;\r\n-use LP_Quiz;\r\n-use LP_Quiz_CURD;\r\n-use LP_User;\r\n-use LP_User_Items_Result_DB;\r\n-use Throwable;\r\n-use WP_Error;\r\n-\r\n-class UserQuizModel extends UserItemModel {\r\n-\t\u002F**\r\n-\t * Item type Course\r\n-\t *\r\n-\t * @var string Item type\r\n-\t *\u002F\r\n-\tpublic $item_type = LP_QUIZ_CPT;\r\n-\t\u002F**\r\n-\t * Ref type Order\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $ref_type = LP_COURSE_CPT;\r\n-\r\n-\tpublic const STATUS_STARTED = 'started';\r\n-\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tparent::__construct( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get quiz model\r\n-\t *\r\n-\t * @return bool|QuizPostModel\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_quiz_post_model() {\r\n-\t\treturn QuizPostModel::find( $this->item_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course model\r\n-\t *\r\n-\t * @return false|CourseModel\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_course_model() {\r\n-\t\treturn CourseModel::find( $this->ref_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user course model\r\n-\t *\r\n-\t * @return false|UserCourseModel\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_user_course_model() {\r\n-\t\treturn UserCourseModel::find( $this->user_id, $this->ref_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get status\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_status(): string {\r\n-\t\treturn $this->status;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all question's ids of the quiz.\r\n-\t *\r\n-\t * @param string $context\r\n-\t *\r\n-\t * @move from LP_Quiz\r\n-\t * @return int[]\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.1\r\n-\t * @since 3.2.0\r\n-\t *\u002F\r\n-\tpublic function get_question_ids( string $context = 'display' ): array {\r\n-\t\t$curd         = new LP_Quiz_CURD();\r\n-\t\t$question_ids = $curd->read_question_ids( $this->item_id, $context );\r\n-\t\t$question_ids = apply_filters( 'learn-press\u002Fquiz\u002Fget-question-ids', $question_ids, $this->item_id, $this->ref_id, $context );\r\n-\t\tif ( ! is_array( $question_ids ) ) {\r\n-\t\t\t$question_ids = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $question_ids;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get time remaining when user doing assignment.\r\n-\t *\r\n-\t * @return int seconds\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_time_remaining(): int {\r\n-\t\t$time_remaining = 0;\r\n-\t\t$quizPostModel  = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\treturn $time_remaining;\r\n-\t\t}\r\n-\r\n-\t\t$duration          = $quizPostModel->get_duration();\r\n-\t\t$start_time_stamp  = strtotime( $this->get_start_time() );\r\n-\t\t$expire_time_stamp = strtotime( '+' . $duration, $start_time_stamp );\r\n-\t\t$time_remaining    = $expire_time_stamp - time();\r\n-\r\n-\t\tif ( $time_remaining \u003C 0 ) {\r\n-\t\t\t$time_remaining = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $time_remaining;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Start quiz.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function start_quiz() {\r\n-\t\t$can_start = $this->check_can_start();\r\n-\t\tif ( is_wp_error( $can_start ) ) {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var WP_Error $can_start\r\n-\t\t\t *\u002F\r\n-\t\t\tthrow new Exception( $can_start->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\t$this->status     = self::STATUS_STARTED;\r\n-\t\t$this->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\r\n-\t\t$this->save();\r\n-\r\n-\t\t\u002F\u002F Hook old - random quiz using.\r\n-\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-started', $this->item_id, $this->ref_id, $this->user_id );\r\n-\t\t\u002F\u002F Hook new\r\n-\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz\u002Fstarted', $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retake quiz.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function retake() {\r\n-\t\t$can_retake = $this->check_can_retake();\r\n-\t\tif ( is_wp_error( $can_retake ) ) {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var WP_Error $can_retake\r\n-\t\t\t *\u002F\r\n-\t\t\tthrow new Exception( $can_retake->get_error_message() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Update retaken count.\r\n-\t\t$user_quiz_retaken = $this->get_meta_model_from_key( UserQuizMetaModel::KEY_RETAKEN_COUNT );\r\n-\t\tif ( $user_quiz_retaken instanceof UserItemMetaModel ) {\r\n-\t\t\t$number_retaken = absint( $user_quiz_retaken->meta_value );\r\n-\t\t\t++$number_retaken;\r\n-\t\t\t$user_quiz_retaken->meta_value = $number_retaken;\r\n-\t\t\t$user_quiz_retaken->save();\r\n-\t\t} else {\r\n-\t\t\t$user_quiz_retaken_new                          = new UserQuizMetaModel();\r\n-\t\t\t$user_quiz_retaken_new->learnpress_user_item_id = $this->get_user_item_id();\r\n-\t\t\t$user_quiz_retaken_new->meta_key                = UserQuizMetaModel::KEY_RETAKEN_COUNT;\r\n-\t\t\t$user_quiz_retaken_new->meta_value              = 1;\r\n-\t\t\t$user_quiz_retaken_new->save();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002FTodo: rewrite by object.\r\n-\t\t\u002F\u002FCreate new result in table learnpress_user_item_results.\r\n-\t\tLP_User_Items_Result_DB::instance()->insert( $this->get_user_item_id() );\r\n-\t\t\u002F\u002F Remove user_item_meta.\r\n-\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), '_lp_question_checked' );\r\n-\r\n-\t\t$this->status     = self::STATUS_STARTED;\r\n-\t\t$this->start_time = gmdate( LP_Datetime::$format, time() );\r\n-\t\t$this->end_time   = null;\r\n-\t\t$this->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\r\n-\t\t$this->save();\r\n-\r\n-\t\t\u002F\u002F Hook old - random quiz using.\r\n-\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-retried', $this->item_id, $this->ref_id, $this->user_id );\r\n-\t\t\u002F\u002F Hook new\r\n-\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz\u002Fretake', $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can start quiz.\r\n-\t * If user can start quiz, return true, else return WP_Error.\r\n-\t * Set user, quiz, course, user_course and parent_id for this object.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * return bool|WP_Error\r\n-\t *\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function check_can_start() {\r\n-\t\t$can_start = true;\r\n-\r\n-\t\t$userModel = $this->get_user_model();\r\n-\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\t$can_start = new WP_Error( 'user_invalid', __( 'User is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizPostModel = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t$can_start = new WP_Error( 'quiz_invalid', __( 'Quiz is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$courseModel = $this->get_course_model();\r\n-\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\t$can_start = new WP_Error( 'course_invalid', __( 'Course is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$userQuizModel = UserQuizModel::find_user_item(\r\n-\t\t\t$this->user_id,\r\n-\t\t\t$this->item_id,\r\n-\t\t\t$this->item_type,\r\n-\t\t\t$this->ref_id,\r\n-\t\t\t$this->ref_type,\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\t\tif ( $userQuizModel instanceof UserQuizModel ) {\r\n-\t\t\t$can_start = new WP_Error( 'started_quiz', __( 'You have already started the quiz.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check user, course of quiz is enrolled.\r\n-\t\t$userCourseModel = $this->get_user_course_model();\r\n-\t\tif ( ! $userCourseModel instanceof UserCourseModel\r\n-\t\t\t|| $userCourseModel->status !== LP_COURSE_ENROLLED ) {\r\n-\t\t\t$can_start = new WP_Error( 'not_errol_course', __( 'Please enroll in the course before starting the quiz.', 'learnpress' ) );\r\n-\t\t} elseif ( $userCourseModel->status === LP_COURSE_FINISHED ) {\r\n-\t\t\t$can_start = new WP_Error( 'finished_course', __( 'You have already finished the course of this quiz.', 'learnpress' ) );\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Set Parent id for user quiz to save DB.\r\n-\t\t\t$this->parent_id = $userCourseModel->get_user_item_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook old.\r\n-\t\tif ( has_filter( 'learn-press\u002Fcan-start-quiz' ) ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$can_start = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fcan-start-quiz',\r\n-\t\t\t\t\t$can_start,\r\n-\t\t\t\t\t$userQuizModel->item_id,\r\n-\t\t\t\t\t$userQuizModel->ref_id,\r\n-\t\t\t\t\t$userQuizModel->user_id\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$can_start = new WP_Error( 'can_not_start_quiz', $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook can start quiz\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fuser\u002Fcan-start-quiz',\r\n-\t\t\t$can_start,\r\n-\t\t\t$this\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check can retake quiz.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function check_can_retake() {\r\n-\t\t$can_retake = true;\r\n-\r\n-\t\t$userModel = $this->get_user_model();\r\n-\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\t$can_retake = new WP_Error( 'user_invalid', __( 'User is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$quizPostModel = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t$can_retake = new WP_Error( 'quiz_invalid', __( 'Quiz is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$course = CourseModel::find( $this->ref_id, true );\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\t$can_retake = new WP_Error( 'course_invalid', __( 'Course is invalid.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check user, course of quiz is enrolled.\r\n-\t\t$userCourseModel = $this->get_user_course_model();\r\n-\t\tif ( ! $userCourseModel instanceof UserCourseModel\r\n-\t\t\t|| $userCourseModel->get_graduation() !== LP_COURSE_GRADUATION_IN_PROGRESS ) {\r\n-\t\t\t$can_retake = new WP_Error(\r\n-\t\t\t\t'not_errol_course',\r\n-\t\t\t\t__( 'Please enroll in the course before starting the quiz.', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t} elseif ( $userCourseModel->get_status() === LP_COURSE_FINISHED ) {\r\n-\t\t\t$can_retake = new WP_Error(\r\n-\t\t\t\t'finished_course',\r\n-\t\t\t\t__( 'You have already finished the course of this quiz.', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check user quiz start and completed?.\r\n-\t\tif ( $this->get_status() !== LP_ITEM_COMPLETED ) {\r\n-\t\t\t$can_retake = new WP_Error( 'not_completed_quiz', __( 'You have not completed the quiz.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check retaken count.\r\n-\t\t$retake_max = $quizPostModel->get_retake_count();\r\n-\t\tif ( $retake_max != -1 && $this->get_remaining_retake() === 0 ) {\r\n-\t\t\t$can_retake = new WP_Error( 'exceed_retaken_count', __( 'You have exceeded the number of retakes.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook can retake quiz\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fuser\u002Fcan-retake-quiz',\r\n-\t\t\t$can_retake,\r\n-\t\t\t$this\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number retake remaining.\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_remaining_retake(): int {\r\n-\t\t$quizPostModel    = $this->get_quiz_post_model();\r\n-\t\t$retake_max       = $quizPostModel->get_retake_count();\r\n-\t\t$retaken_count    = $this->get_retaken_count();\r\n-\t\t$remaining_retake = $retake_max - $retaken_count;\r\n-\t\tif ( $remaining_retake \u003C= 0 ) {\r\n-\t\t\t$remaining_retake = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $remaining_retake;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all attempts of a quiz.\r\n-\t *\r\n-\t * @move from LP_Quiz\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_attempts( $limit = 3 ) {\r\n-\t\t$limit = $limit ?? 3;\r\n-\r\n-\t\t$limit = absint( apply_filters( 'lp\u002Fquiz\u002Fget-attempts\u002Flimit', $limit ) );\r\n-\r\n-\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\r\n-\t\t$output  = array();\r\n-\r\n-\t\tif ( ! empty( $results ) ) {\r\n-\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\tif ( $result && is_string( $result ) ) {\r\n-\t\t\t\t\t$result = json_decode( $result );\r\n-\r\n-\t\t\t\t\tunset( $result->questions );\r\n-\r\n-\t\t\t\t\t$output[] = $result;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number retaken count.\r\n-\t * @move from LP_Quiz\r\n-\t *\r\n-\t * @return integer\r\n-\t *\u002F\r\n-\tpublic function get_retaken_count(): int {\r\n-\t\treturn absint( $this->get_meta_value_from_key( UserQuizMetaModel::KEY_RETAKEN_COUNT, 0 ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all questions user has already used \"Check\"\r\n-\t * @move from LP_Quiz\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_checked_questions(): array {\r\n-\t\t$value_str = $this->get_meta_value_from_key( UserQuizMetaModel::KEY_QUESTION_CHECKED, [] );\r\n-\t\t$value     = maybe_unserialize( $value_str );\r\n-\r\n-\t\tif ( $value ) {\r\n-\t\t\t$value = (array) $value;\r\n-\t\t} else {\r\n-\t\t\t$value = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get result when user completed quiz.\r\n-\t *\r\n-\t * @move from LP_Quiz\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_result(): array {\r\n-\t\t$result = array(\r\n-\t\t\t'questions'         => array(),\r\n-\t\t\t'mark'              => 0,\r\n-\t\t\t'user_mark'         => 0,\r\n-\t\t\t'minus_point'       => 0,\r\n-\t\t\t'question_count'    => 0,\r\n-\t\t\t'question_empty'    => 0,\r\n-\t\t\t'question_answered' => 0,\r\n-\t\t\t'question_wrong'    => 0,\r\n-\t\t\t'question_correct'  => 0,\r\n-\t\t\t'status'            => '',\r\n-\t\t\t'result'            => 0,\r\n-\t\t\t'time_spend'        => '',\r\n-\t\t\t'passing_grade'     => '',\r\n-\t\t\t'pass'              => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$result_tmp = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\t\t\tif ( $result_tmp ) {\r\n-\t\t\t\tif ( isset( $result_tmp['user_mark'] ) && $result_tmp['user_mark'] \u003C 0 ) {\r\n-\t\t\t\t\t$result_tmp['user_mark'] = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result = $result_tmp;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate result of quiz.\r\n-\t * @move from LP_Quiz\r\n-\t * @param array $answered [question_id => answered, 'instant_check' => 0]\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprivate function calculate_quiz_result( array $answered ): array {\r\n-\t\t$result = array(\r\n-\t\t\t'questions'         => array(),\r\n-\t\t\t'mark'              => 0,\r\n-\t\t\t'user_mark'         => 0,\r\n-\t\t\t'minus_point'       => 0,\r\n-\t\t\t'question_count'    => 0,\r\n-\t\t\t'question_empty'    => 0,\r\n-\t\t\t'question_answered' => 0,\r\n-\t\t\t'question_wrong'    => 0,\r\n-\t\t\t'question_correct'  => 0,\r\n-\t\t\t'status'            => '',\r\n-\t\t\t'result'            => 0,\r\n-\t\t\t'time_spend'        => '',\r\n-\t\t\t'passing_grade'     => '',\r\n-\t\t\t'pass'              => 0,\r\n-\t\t);\r\n-\r\n-\t\t$quizPostModel = $this->get_quiz_post_model();\r\n-\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t$question_ids             = $quizPostModel->get_question_ids();\r\n-\t\t$result['mark']           = $quizPostModel->get_mark();\r\n-\t\t$result['question_count'] = $quizPostModel->count_questions();\r\n-\t\t$result['time_spend']     = $this->get_time_spend();\r\n-\t\t$result['passing_grade']  = $quizPostModel->get_passing_grade();\r\n-\t\t$checked_questions        = $this->get_checked_questions();\r\n-\r\n-\t\tforeach ( $question_ids as $question_id ) {\r\n-\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t$point    = floatval( $question->get_mark() );\r\n-\r\n-\t\t\t$result['questions'][ $question_id ]             = array();\r\n-\t\t\t$result['questions'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\r\n-\r\n-\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\r\n-\t\t\t\t++$result['question_answered'];\r\n-\r\n-\t\t\t\t$check = $question->check( $answered[ $question_id ] );\r\n-\t\t\t\t$point = apply_filters( 'learn-press\u002Fuser\u002Fcalculate-quiz-result\u002Fpoint', $point, $question, $check );\r\n-\t\t\t\tif ( $check['correct'] ) {\r\n-\t\t\t\t\t++$result['question_correct'];\r\n-\t\t\t\t\t$result['user_mark'] += $point;\r\n-\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = true;\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = $point;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( $quizPostModel->has_negative_marking() ) {\r\n-\t\t\t\t\t\t$result['user_mark']   -= $point;\r\n-\t\t\t\t\t\t$result['minus_point'] += $point;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t++$result['question_wrong'];\r\n-\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\r\n-\t\t\t\tif ( $quizPostModel->has_minus_skip_questions() ) {\r\n-\t\t\t\t\t$result['user_mark']   -= $point;\r\n-\t\t\t\t\t$result['minus_point'] += $point;\r\n-\t\t\t\t}\r\n-\t\t\t\t++$result['question_empty'];\r\n-\r\n-\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $quizPostModel->has_instant_check() && ! array_key_exists( 'instant_check', $answered ) ) {\r\n-\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\r\n-\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\r\n-\t\t\t\t\t$question,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'include_is_true' => in_array( $question_id, $checked_questions ) || $quizPostModel->has_show_correct_review(),\r\n-\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $result['user_mark'] \u003C 0 ) {\r\n-\t\t\t$result['user_mark'] = 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\r\n-\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\r\n-\t\t}\r\n-\r\n-\t\t$passing_grade = $quizPostModel->get_passing_grade();\r\n-\t\tif ( $result['result'] >= $passing_grade ) {\r\n-\t\t\t$result['pass'] = 1;\r\n-\t\t} else {\r\n-\t\t\t$result['pass'] = 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get string time spend.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_time_spend(): string {\r\n-\t\t$interval = $this->get_total_timestamp_completed();\r\n-\t\tif ( empty( $interval ) ) {\r\n-\t\t\treturn '--:--';\r\n-\t\t}\r\n-\r\n-\t\t$duration = new LP_Datetime( $interval );\r\n-\t\treturn $duration->format( 'H:i:s' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get history user did quiz.\r\n-\t *\r\n-\t * @param int $limit\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.7.6\r\n-\t *\u002F\r\n-\tpublic function get_history( int $limit = 3 ): array {\r\n-\t\t$history = array();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\r\n-\r\n-\t\t\tif ( ! empty( $results ) ) {\r\n-\t\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\t\tif ( $result && is_string( $result ) ) {\r\n-\t\t\t\t\t\t$result = LP_Helper::json_decode( $result );\r\n-\r\n-\t\t\t\t\t\tunset( $result->questions );\r\n-\r\n-\t\t\t\t\t\t$history[] = $result;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $history;\r\n-\t}\r\n-\tpublic function get_status_label( $status = '' ) {\r\n-\t\t$statuses = array(\r\n-\t\t\t'started'     => __( 'In Progress', 'learnpress' ),\r\n-\t\t\t'in-progress' => __( 'In Progress', 'learnpress' ),\r\n-\t\t\t'completed'   => __( 'Completed', 'learnpress' ),\r\n-\t\t\t'passed'      => __( 'Passed', 'learnpress' ),\r\n-\t\t\t'failed'      => __( 'Failed', 'learnpress' ),\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $status ) {\r\n-\t\t\t$status = $this->get_status();\r\n-\t\t}\r\n-\r\n-\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : __( 'Not Started', 'learnpress' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class UserQuizModel\n+ *\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.2\n+ * @since 4.2.5\n+ *\u002F\n+\n+namespace LearnPress\\Models\\UserItems;\n+\n+use Exception;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItemMeta\\UserItemMetaModel;\n+use LearnPress\\Models\\UserItemMeta\\UserQuizMetaModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPressAssignment\\Models\\AssignmentPostModel;\n+use LP_Course;\n+use LP_Datetime;\n+use LP_Helper;\n+use LP_Question;\n+use LP_Quiz;\n+use LP_Quiz_CURD;\n+use LP_User;\n+use LP_User_Items_Result_DB;\n+use Throwable;\n+use WP_Error;\n+\n+class UserQuizModel extends UserItemModel {\n+\t\u002F**\n+\t * Item type Course\n+\t *\n+\t * @var string Item type\n+\t *\u002F\n+\tpublic $item_type = LP_QUIZ_CPT;\n+\t\u002F**\n+\t * Ref type Order\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $ref_type = LP_COURSE_CPT;\n+\n+\tpublic const STATUS_STARTED = 'started';\n+\n+\tpublic function __construct( $data = null ) {\n+\t\tparent::__construct( $data );\n+\t}\n+\n+\t\u002F**\n+\t * Get quiz model\n+\t *\n+\t * @return bool|QuizPostModel\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_quiz_post_model() {\n+\t\treturn QuizPostModel::find( $this->item_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get course model\n+\t *\n+\t * @return false|CourseModel\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_course_model() {\n+\t\treturn CourseModel::find( $this->ref_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get user course model\n+\t *\n+\t * @return false|UserCourseModel\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_user_course_model() {\n+\t\treturn UserCourseModel::find( $this->user_id, $this->ref_id, true );\n+\t}\n+\n+\t\u002F**\n+\t * Get status\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_status(): string {\n+\t\treturn $this->status;\n+\t}\n+\n+\t\u002F**\n+\t * Get all question's ids of the quiz.\n+\t *\n+\t * @param string $context\n+\t *\n+\t * @move from LP_Quiz\n+\t * @return int[]\n+\t * @editor tungnx\n+\t * @version 1.0.1\n+\t * @since 3.2.0\n+\t *\u002F\n+\tpublic function get_question_ids( string $context = 'display' ): array {\n+\t\t$curd         = new LP_Quiz_CURD();\n+\t\t$question_ids = $curd->read_question_ids( $this->item_id, $context );\n+\t\t$question_ids = apply_filters( 'learn-press\u002Fquiz\u002Fget-question-ids', $question_ids, $this->item_id, $this->ref_id, $context );\n+\t\tif ( ! is_array( $question_ids ) ) {\n+\t\t\t$question_ids = array();\n+\t\t}\n+\n+\t\treturn $question_ids;\n+\t}\n+\n+\t\u002F**\n+\t * Get time remaining when user doing assignment.\n+\t *\n+\t * @return int seconds\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_time_remaining(): int {\n+\t\t$time_remaining = 0;\n+\t\t$quizPostModel  = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\n+\t\t\treturn $time_remaining;\n+\t\t}\n+\n+\t\t$duration          = $quizPostModel->get_duration();\n+\t\t$start_time_stamp  = strtotime( $this->get_start_time() );\n+\t\t$expire_time_stamp = strtotime( '+' . $duration, $start_time_stamp );\n+\t\t$time_remaining    = $expire_time_stamp - time();\n+\n+\t\tif ( $time_remaining \u003C 0 ) {\n+\t\t\t$time_remaining = 0;\n+\t\t}\n+\n+\t\treturn $time_remaining;\n+\t}\n+\n+\t\u002F**\n+\t * Start quiz.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function start_quiz() {\n+\t\t$can_start = $this->check_can_start();\n+\t\tif ( is_wp_error( $can_start ) ) {\n+\t\t\t\u002F**\n+\t\t\t * @var WP_Error $can_start\n+\t\t\t *\u002F\n+\t\t\tthrow new Exception( $can_start->get_error_message() );\n+\t\t}\n+\n+\t\t$this->status     = self::STATUS_STARTED;\n+\t\t$this->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\n+\t\t$this->save();\n+\n+\t\t\u002F\u002F Hook old - random quiz using.\n+\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-started', $this->item_id, $this->ref_id, $this->user_id );\n+\t\t\u002F\u002F Hook new\n+\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz\u002Fstarted', $this );\n+\t}\n+\n+\t\u002F**\n+\t * Retake quiz.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function retake() {\n+\t\t$can_retake = $this->check_can_retake();\n+\t\tif ( is_wp_error( $can_retake ) ) {\n+\t\t\t\u002F**\n+\t\t\t * @var WP_Error $can_retake\n+\t\t\t *\u002F\n+\t\t\tthrow new Exception( $can_retake->get_error_message() );\n+\t\t}\n+\n+\t\t\u002F\u002F Update retaken count.\n+\t\t$user_quiz_retaken = $this->get_meta_model_from_key( UserQuizMetaModel::KEY_RETAKEN_COUNT );\n+\t\tif ( $user_quiz_retaken instanceof UserItemMetaModel ) {\n+\t\t\t$number_retaken = absint( $user_quiz_retaken->meta_value );\n+\t\t\t++$number_retaken;\n+\t\t\t$user_quiz_retaken->meta_value = $number_retaken;\n+\t\t\t$user_quiz_retaken->save();\n+\t\t} else {\n+\t\t\t$user_quiz_retaken_new                          = new UserQuizMetaModel();\n+\t\t\t$user_quiz_retaken_new->learnpress_user_item_id = $this->get_user_item_id();\n+\t\t\t$user_quiz_retaken_new->meta_key                = UserQuizMetaModel::KEY_RETAKEN_COUNT;\n+\t\t\t$user_quiz_retaken_new->meta_value              = 1;\n+\t\t\t$user_quiz_retaken_new->save();\n+\t\t}\n+\n+\t\t\u002F\u002FTodo: rewrite by object.\n+\t\t\u002F\u002FCreate new result in table learnpress_user_item_results.\n+\t\tLP_User_Items_Result_DB::instance()->insert( $this->get_user_item_id() );\n+\t\t\u002F\u002F Remove user_item_meta.\n+\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), '_lp_question_checked' );\n+\n+\t\t$this->status     = self::STATUS_STARTED;\n+\t\t$this->start_time = gmdate( LP_Datetime::$format, time() );\n+\t\t$this->end_time   = null;\n+\t\t$this->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\n+\t\t$this->save();\n+\n+\t\t\u002F\u002F Hook old - random quiz using.\n+\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-retried', $this->item_id, $this->ref_id, $this->user_id );\n+\t\t\u002F\u002F Hook new\n+\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz\u002Fretake', $this );\n+\t}\n+\n+\t\u002F**\n+\t * Check user can start quiz.\n+\t * If user can start quiz, return true, else return WP_Error.\n+\t * Set user, quiz, course, user_course and parent_id for this object.\n+\t *\n+\t * @throws Exception\n+\t * return bool|WP_Error\n+\t *\n+\t * @since 4.2.5\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function check_can_start() {\n+\t\t$can_start = true;\n+\n+\t\t$userModel = $this->get_user_model();\n+\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\t$can_start = new WP_Error( 'user_invalid', __( 'User is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizPostModel = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t$can_start = new WP_Error( 'quiz_invalid', __( 'Quiz is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$courseModel = $this->get_course_model();\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\t$can_start = new WP_Error( 'course_invalid', __( 'Course is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$userQuizModel = UserQuizModel::find_user_item(\n+\t\t\t$this->user_id,\n+\t\t\t$this->item_id,\n+\t\t\t$this->item_type,\n+\t\t\t$this->ref_id,\n+\t\t\t$this->ref_type,\n+\t\t\ttrue\n+\t\t);\n+\t\tif ( $userQuizModel instanceof UserQuizModel ) {\n+\t\t\t$can_start = new WP_Error( 'started_quiz', __( 'You have already started the quiz.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check user, course of quiz is enrolled.\n+\t\t$userCourseModel = $this->get_user_course_model();\n+\t\tif ( ! $userCourseModel instanceof UserCourseModel\n+\t\t\t|| $userCourseModel->status !== LP_COURSE_ENROLLED ) {\n+\t\t\t$can_start = new WP_Error( 'not_errol_course', __( 'Please enroll in the course before starting the quiz.', 'learnpress' ) );\n+\t\t} elseif ( $userCourseModel->status === LP_COURSE_FINISHED ) {\n+\t\t\t$can_start = new WP_Error( 'finished_course', __( 'You have already finished the course of this quiz.', 'learnpress' ) );\n+\t\t} else {\n+\t\t\t\u002F\u002F Set Parent id for user quiz to save DB.\n+\t\t\t$this->parent_id = $userCourseModel->get_user_item_id();\n+\t\t}\n+\n+\t\t\u002F\u002F Hook old.\n+\t\tif ( has_filter( 'learn-press\u002Fcan-start-quiz' ) ) {\n+\t\t\ttry {\n+\t\t\t\t$can_start = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcan-start-quiz',\n+\t\t\t\t\t$can_start,\n+\t\t\t\t\t$userQuizModel->item_id,\n+\t\t\t\t\t$userQuizModel->ref_id,\n+\t\t\t\t\t$userQuizModel->user_id\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$can_start = new WP_Error( 'can_not_start_quiz', $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Hook can start quiz\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fuser\u002Fcan-start-quiz',\n+\t\t\t$can_start,\n+\t\t\t$this\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Check can retake quiz.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function check_can_retake() {\n+\t\t$can_retake = true;\n+\n+\t\t$userModel = $this->get_user_model();\n+\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\t$can_retake = new WP_Error( 'user_invalid', __( 'User is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$quizPostModel = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t$can_retake = new WP_Error( 'quiz_invalid', __( 'Quiz is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$course = CourseModel::find( $this->ref_id, true );\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\t$can_retake = new WP_Error( 'course_invalid', __( 'Course is invalid.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check user, course of quiz is enrolled.\n+\t\t$userCourseModel = $this->get_user_course_model();\n+\t\tif ( ! $userCourseModel instanceof UserCourseModel\n+\t\t\t|| $userCourseModel->get_graduation() !== LP_COURSE_GRADUATION_IN_PROGRESS ) {\n+\t\t\t$can_retake = new WP_Error(\n+\t\t\t\t'not_errol_course',\n+\t\t\t\t__( 'Please enroll in the course before starting the quiz.', 'learnpress' )\n+\t\t\t);\n+\t\t} elseif ( $userCourseModel->get_status() === LP_COURSE_FINISHED ) {\n+\t\t\t$can_retake = new WP_Error(\n+\t\t\t\t'finished_course',\n+\t\t\t\t__( 'You have already finished the course of this quiz.', 'learnpress' )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Check user quiz start and completed?.\n+\t\tif ( $this->get_status() !== LP_ITEM_COMPLETED ) {\n+\t\t\t$can_retake = new WP_Error( 'not_completed_quiz', __( 'You have not completed the quiz.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check retaken count.\n+\t\t$retake_max = $quizPostModel->get_retake_count();\n+\t\tif ( $retake_max != -1 && $this->get_remaining_retake() === 0 ) {\n+\t\t\t$can_retake = new WP_Error( 'exceed_retaken_count', __( 'You have exceeded the number of retakes.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Hook can retake quiz\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fuser\u002Fcan-retake-quiz',\n+\t\t\t$can_retake,\n+\t\t\t$this\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get number retake remaining.\n+\t *\n+\t * @return int\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_remaining_retake(): int {\n+\t\t$quizPostModel    = $this->get_quiz_post_model();\n+\t\t$retake_max       = $quizPostModel->get_retake_count();\n+\t\t$retaken_count    = $this->get_retaken_count();\n+\t\t$remaining_retake = $retake_max - $retaken_count;\n+\t\tif ( $remaining_retake \u003C= 0 ) {\n+\t\t\t$remaining_retake = 0;\n+\t\t}\n+\n+\t\treturn $remaining_retake;\n+\t}\n+\n+\t\u002F**\n+\t * Get all attempts of a quiz.\n+\t *\n+\t * @move from LP_Quiz\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_attempts( $limit = 3 ) {\n+\t\t$limit = $limit ?? 3;\n+\n+\t\t$limit = absint( apply_filters( 'lp\u002Fquiz\u002Fget-attempts\u002Flimit', $limit ) );\n+\n+\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\n+\t\t$output  = array();\n+\n+\t\tif ( ! empty( $results ) ) {\n+\t\t\tforeach ( $results as $result ) {\n+\t\t\t\tif ( $result && is_string( $result ) ) {\n+\t\t\t\t\t$result = json_decode( $result );\n+\n+\t\t\t\t\tunset( $result->questions );\n+\n+\t\t\t\t\t$output[] = $result;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get number retaken count.\n+\t * @move from LP_Quiz\n+\t *\n+\t * @return integer\n+\t *\u002F\n+\tpublic function get_retaken_count(): int {\n+\t\treturn absint( $this->get_meta_value_from_key( UserQuizMetaModel::KEY_RETAKEN_COUNT, 0 ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get all questions user has already used \"Check\"\n+\t * @move from LP_Quiz\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_checked_questions(): array {\n+\t\t$value_str = $this->get_meta_value_from_key( UserQuizMetaModel::KEY_QUESTION_CHECKED, [] );\n+\t\t$value     = maybe_unserialize( $value_str );\n+\n+\t\tif ( $value ) {\n+\t\t\t$value = (array) $value;\n+\t\t} else {\n+\t\t\t$value = array();\n+\t\t}\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * Get result when user completed quiz.\n+\t *\n+\t * @move from LP_Quiz\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_result(): array {\n+\t\t$result = array(\n+\t\t\t'questions'         => array(),\n+\t\t\t'mark'              => 0,\n+\t\t\t'user_mark'         => 0,\n+\t\t\t'minus_point'       => 0,\n+\t\t\t'question_count'    => 0,\n+\t\t\t'question_empty'    => 0,\n+\t\t\t'question_answered' => 0,\n+\t\t\t'question_wrong'    => 0,\n+\t\t\t'question_correct'  => 0,\n+\t\t\t'status'            => '',\n+\t\t\t'result'            => 0,\n+\t\t\t'time_spend'        => '',\n+\t\t\t'passing_grade'     => '',\n+\t\t\t'pass'              => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$result_tmp = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\t\t\tif ( $result_tmp ) {\n+\t\t\t\tif ( isset( $result_tmp['user_mark'] ) && $result_tmp['user_mark'] \u003C 0 ) {\n+\t\t\t\t\t$result_tmp['user_mark'] = 0;\n+\t\t\t\t}\n+\n+\t\t\t\t$result = $result_tmp;\n+\t\t\t}\n+\n+\t\t\treturn $result;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Calculate result of quiz.\n+\t * @move from LP_Quiz\n+\t * @param array $answered [question_id => answered, 'instant_check' => 0]\n+\t *\n+\t * @return array\n+\t * @since 4.2.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function calculate_quiz_result( array $answered ): array {\n+\t\t$result = array(\n+\t\t\t'questions'         => array(),\n+\t\t\t'mark'              => 0,\n+\t\t\t'user_mark'         => 0,\n+\t\t\t'minus_point'       => 0,\n+\t\t\t'question_count'    => 0,\n+\t\t\t'question_empty'    => 0,\n+\t\t\t'question_answered' => 0,\n+\t\t\t'question_wrong'    => 0,\n+\t\t\t'question_correct'  => 0,\n+\t\t\t'status'            => '',\n+\t\t\t'result'            => 0,\n+\t\t\t'time_spend'        => '',\n+\t\t\t'passing_grade'     => '',\n+\t\t\t'pass'              => 0,\n+\t\t);\n+\n+\t\t$quizPostModel = $this->get_quiz_post_model();\n+\t\tif ( ! $quizPostModel instanceof QuizPostModel ) {\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t$question_ids             = $quizPostModel->get_question_ids();\n+\t\t$result['mark']           = $quizPostModel->get_mark();\n+\t\t$result['question_count'] = $quizPostModel->count_questions();\n+\t\t$result['time_spend']     = $this->get_time_spend();\n+\t\t$result['passing_grade']  = $quizPostModel->get_passing_grade();\n+\t\t$checked_questions        = $this->get_checked_questions();\n+\n+\t\tforeach ( $question_ids as $question_id ) {\n+\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t$point    = floatval( $question->get_mark() );\n+\n+\t\t\t$result['questions'][ $question_id ]             = array();\n+\t\t\t$result['questions'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\n+\n+\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\n+\t\t\t\t++$result['question_answered'];\n+\n+\t\t\t\t$check = $question->check( $answered[ $question_id ] );\n+\t\t\t\t$point = apply_filters( 'learn-press\u002Fuser\u002Fcalculate-quiz-result\u002Fpoint', $point, $question, $check );\n+\t\t\t\tif ( $check['correct'] ) {\n+\t\t\t\t\t++$result['question_correct'];\n+\t\t\t\t\t$result['user_mark'] += $point;\n+\n+\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = true;\n+\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = $point;\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( $quizPostModel->has_negative_marking() ) {\n+\t\t\t\t\t\t$result['user_mark']   -= $point;\n+\t\t\t\t\t\t$result['minus_point'] += $point;\n+\t\t\t\t\t}\n+\t\t\t\t\t++$result['question_wrong'];\n+\n+\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\n+\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\n+\t\t\t\t}\n+\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\n+\t\t\t\tif ( $quizPostModel->has_minus_skip_questions() ) {\n+\t\t\t\t\t$result['user_mark']   -= $point;\n+\t\t\t\t\t$result['minus_point'] += $point;\n+\t\t\t\t}\n+\t\t\t\t++$result['question_empty'];\n+\n+\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\n+\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\n+\t\t\t}\n+\n+\t\t\tif ( $quizPostModel->has_instant_check() && ! array_key_exists( 'instant_check', $answered ) ) {\n+\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\n+\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\n+\t\t\t\t\t$question,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'include_is_true' => in_array( $question_id, $checked_questions ) || $quizPostModel->has_show_correct_review(),\n+\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $result['user_mark'] \u003C 0 ) {\n+\t\t\t$result['user_mark'] = 0;\n+\t\t}\n+\n+\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\n+\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\n+\t\t}\n+\n+\t\t$passing_grade = $quizPostModel->get_passing_grade();\n+\t\tif ( $result['result'] >= $passing_grade ) {\n+\t\t\t$result['pass'] = 1;\n+\t\t} else {\n+\t\t\t$result['pass'] = 0;\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Get string time spend.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_time_spend(): string {\n+\t\t$interval = $this->get_total_timestamp_completed();\n+\t\tif ( empty( $interval ) ) {\n+\t\t\treturn '--:--';\n+\t\t}\n+\n+\t\t$duration = new LP_Datetime( $interval );\n+\t\treturn $duration->format( 'H:i:s' );\n+\t}\n+\n+\t\u002F**\n+\t * Get history user did quiz.\n+\t *\n+\t * @param int $limit\n+\t *\n+\t * @return array\n+\t * @version 1.0.0\n+\t * @since 4.2.7.6\n+\t *\u002F\n+\tpublic function get_history( int $limit = 3 ): array {\n+\t\t$history = array();\n+\n+\t\ttry {\n+\t\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\n+\n+\t\t\tif ( ! empty( $results ) ) {\n+\t\t\t\tforeach ( $results as $result ) {\n+\t\t\t\t\tif ( $result && is_string( $result ) ) {\n+\t\t\t\t\t\t$result = LP_Helper::json_decode( $result );\n+\n+\t\t\t\t\t\tunset( $result->questions );\n+\n+\t\t\t\t\t\t$history[] = $result;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $history;\n+\t}\n+\tpublic function get_status_label( $status = '' ) {\n+\t\t$statuses = array(\n+\t\t\t'started'     => __( 'In Progress', 'learnpress' ),\n+\t\t\t'in-progress' => __( 'In Progress', 'learnpress' ),\n+\t\t\t'completed'   => __( 'Completed', 'learnpress' ),\n+\t\t\t'passed'      => __( 'Passed', 'learnpress' ),\n+\t\t\t'failed'      => __( 'Failed', 'learnpress' ),\n+\t\t);\n+\n+\t\tif ( ! $status ) {\n+\t\t\t$status = $this->get_status();\n+\t\t}\n+\n+\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : __( 'Not Started', 'learnpress' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserModel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserModel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FUserModel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FUserModel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,814 +1,801 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models;\r\n-\r\n-\u002F**\r\n- * Class UserModel\r\n- *\r\n- * @version 1.0.3\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\Course\\CourseJsonDB;\r\n-use LearnPress\\Databases\\UserItemsDB;\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Services\\UserService;\r\n-use LP_Cache;\r\n-use LP_Debug;\r\n-use LP_User;\r\n-use LP_User_DB;\r\n-use LP_User_Filter;\r\n-\r\n-use LP_User_Items_DB;\r\n-use LP_User_Items_Filter;\r\n-use LP_WP_Filesystem;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Error;\r\n-use WP_User;\r\n-\r\n-class UserModel {\r\n-\t\u002F**\r\n-\t * Auto increment, Primary key\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $ID = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $user_login = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $user_nicename;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $user_email = null;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $user_url = null;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $user_register = '';\r\n-\t\u002F**\r\n-\t * Display name of user.\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $display_name = '';\r\n-\t\u002F**\r\n-\t * @var stdClass all meta data\r\n-\t *\u002F\r\n-\tpublic $meta_data = null;\r\n-\t\u002F**\r\n-\t * @var string image url\r\n-\t *\u002F\r\n-\tpublic $image_url = '';\r\n-\r\n-\t\u002F\u002F Meta keys\r\n-\tconst META_KEY_IMAGE       = '_lp_profile_picture';\r\n-\tconst META_KEY_COVER_IMAGE = '_lp_profile_cover_image';\r\n-\tconst META_KEY_USER_SLUG   = '_lp_user_slug';\r\n-\t\u002F\u002F Roles\r\n-\tconst ROLE_INSTRUCTOR    = LP_TEACHER_ROLE;\r\n-\tconst ROLE_ADMINISTRATOR = 'administrator';\r\n-\r\n-\t\u002F**\r\n-\t * If data get from database, map to object.\r\n-\t * Else create new object to save data to database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data = null ) {\r\n-\t\tif ( $data ) {\r\n-\t\t\t$this->map_to_object( $data );\r\n-\t\t}\r\n-\r\n-\t\tif ( is_null( $this->meta_data ) ) {\r\n-\t\t\t$this->meta_data = new stdClass();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map array, object data to UserItemModel.\r\n-\t * Use for data get from database.\r\n-\t *\r\n-\t * @param array|object|mixed $data\r\n-\t *\r\n-\t * @return UserModel\r\n-\t *\u002F\r\n-\tpublic function map_to_object( $data ): UserModel {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\tif ( property_exists( $this, $key ) ) {\r\n-\t\t\t\t$this->{$key} = $value;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course by ID\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param bool $check_cache\r\n-\t *\r\n-\t * @return false|static\r\n-\t *\u002F\r\n-\tpublic static function find( int $user_id, bool $check_cache = false ) {\r\n-\t\t$filter_user     = new LP_User_Filter();\r\n-\t\t$filter_user->ID = $user_id;\r\n-\t\t$key_cache       = \"userModel\u002Ffind\u002Fid\u002F{$user_id}\";\r\n-\t\t$lp_course_cache = new LP_Cache();\r\n-\r\n-\t\t\u002F\u002F Check cache\r\n-\t\tif ( $check_cache ) {\r\n-\t\t\t$user_model = $lp_course_cache->get_cache( $key_cache );\r\n-\t\t\tif ( $user_model instanceof UserModel ) {\r\n-\t\t\t\treturn $user_model;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Query database no cache.\r\n-\t\t$user_model = self::get_user_model_from_db( $filter_user );\r\n-\r\n-\t\t\u002F\u002F Set cache\r\n-\t\tif ( $user_model instanceof UserModel ) {\r\n-\t\t\t$lp_course_cache->set_cache( $key_cache, $user_model );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course from database.\r\n-\t * If not exists, return false.\r\n-\t * If exists, return CoursePostModel.\r\n-\t *\r\n-\t * @param LP_User_Filter $filter\r\n-\t *\r\n-\t * @return UserModel|false|static\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function get_user_model_from_db( LP_User_Filter $filter ) {\r\n-\t\t$lp_user_db = LP_User_DB::instance();\r\n-\t\t$user_model = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter->only_fields = [ 'ID', 'user_nicename', 'user_login', 'user_email', 'display_name' ];\r\n-\t\t\t$lp_user_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $lp_user_db->get_users( $filter );\r\n-\t\t\t$user_rs          = $lp_user_db->wpdb->get_row( $query_single_row );\r\n-\t\t\tif ( $user_rs instanceof stdClass ) {\r\n-\t\t\t\t$user_model = new UserModel( $user_rs );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_model;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all meta_data, all keys of a user it\r\n-\t *\r\n-\t * @return stdClass|null\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_all_metadata() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get meta value by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param mixed $default_value\r\n-\t *\r\n-\t * @return false|mixed\r\n-\t *\u002F\r\n-\tpublic function get_meta_value_by_key( string $key, $default_value = false ) {\r\n-\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\r\n-\t\t\treturn $this->meta_data->{$key};\r\n-\t\t}\r\n-\r\n-\t\t$value = get_user_meta( $this->ID, $key, true );\r\n-\t\tif ( empty( $value ) ) {\r\n-\t\t\t$value = $default_value;\r\n-\t\t}\r\n-\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set meta value by key.\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param $value\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function set_meta_value_by_key( string $key, $value ) {\r\n-\t\t$this->meta_data->{$key} = $value;\r\n-\t\tupdate_user_meta( $this->ID, $key, $value );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retrieve the pretty slug used instead of user_name.\r\n-\t *\r\n-\t * This value is used to build links such as instructor links and user profile links.\r\n-\t * If a pretty slug has not been generated yet, it falls back to user_name when\r\n-\t * $fallback_to_username is true.\r\n-\t *\r\n-\t * @param bool $fallback_to_username Whether to fall back to username if no pretty slug exists.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_pretty_slug( bool $fallback_to_username = true ): string {\r\n-\t\t$slug = sanitize_title( (string) $this->get_meta_value_by_key( self::META_KEY_USER_SLUG, '' ) );\r\n-\r\n-\t\tif ( '' !== $slug || ! $fallback_to_username ) {\r\n-\t\t\treturn $slug;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->get_username();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create a unique pretty slug for user.\r\n-\t *\r\n-\t * If the user already has a pretty slug, it will return the existing one without generating a new one.\r\n-\t * The slug is generated based on the user's first name and last name.\r\n-\t * If empty user's first name and last name, it will use the username with uniqid() to generate a slug.\r\n-\t *\r\n-\t * @return string|WP_Error\r\n-\t * @since 4.3.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function generate_pretty_slug() {\r\n-\t\t$user_slug_new = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check if pretty slug already exists, if exists, return it without generating a new one.\r\n-\t\t\t$existing_slug = $this->get_pretty_slug( false );\r\n-\t\t\tif ( ! empty( $existing_slug ) ) {\r\n-\t\t\t\treturn $existing_slug;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Generate pretty slug based on first name and last name.\r\n-\t\t\t$first_name  = $this->get_meta_value_by_key( 'first_name', '' );\r\n-\t\t\t$last_name   = $this->get_meta_value_by_key( 'last_name', '' );\r\n-\t\t\t$base_source = trim( \"{$first_name} {$last_name}\" );\r\n-\t\t\t$base_slug   = sanitize_title( $base_source );\r\n-\r\n-\t\t\tif ( empty( $base_slug ) ) {\r\n-\t\t\t\t\u002F\u002F Shuffle username with uniqid to make it more unique and less guessable, get first 10 characters to make slug shorter.\r\n-\t\t\t\t$base_slug = substr( str_shuffle( sanitize_title( $this->user_login . uniqid() ) ), 0, 10 );\r\n-\t\t\t} else {\r\n-\t\t\t\t$base_slug = $base_slug . substr( str_shuffle( uniqid() ), 0, 3 );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check slug exists.\r\n-\t\t\t$userModelFind = UserService::instance()->get_user_by_pretty_slug( $base_slug );\r\n-\t\t\tif ( ! $userModelFind ) {\r\n-\t\t\t\t$this->set_meta_value_by_key( self::META_KEY_USER_SLUG, $base_slug );\r\n-\t\t\t\t$user_slug_new = $base_slug;\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Regenerate slug by adding random string at the end of base slug until it is unique.\r\n-\t\t\t\t$user_slug_new = $this->generate_pretty_slug();\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn new WP_Error( 'lp_user_slug_generation_failed', $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_slug_new;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update pretty slug manually.\r\n-\t *\r\n-\t * @param string $slug\r\n-\t *\r\n-\t * @return string|WP_Error\r\n-\t * @since 4.3.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function update_pretty_slug( string $slug ) {\r\n-\t\ttry {\r\n-\t\t\t$slug = sanitize_title( wp_unslash( $slug ) );\r\n-\r\n-\t\t\tif ( '' === $slug ) {\r\n-\t\t\t\tdelete_user_meta( $this->get_id(), self::META_KEY_USER_SLUG );\r\n-\t\t\t\t$this->meta_data->{self::META_KEY_USER_SLUG} = '';\r\n-\t\t\t\t$this->save();\r\n-\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModelFind = UserService::instance()->get_user_by_pretty_slug( $slug );\r\n-\t\t\t\u002F\u002F If not found any user with the slug, or found user is current user, update slug, else throw error.\r\n-\t\t\tif ( ! $userModelFind ) {\r\n-\t\t\t\t$this->set_meta_value_by_key( self::META_KEY_USER_SLUG, $slug );\r\n-\r\n-\t\t\t\treturn $slug;\r\n-\t\t\t} elseif ( $userModelFind->get_id() !== $this->get_id() ) {\r\n-\t\t\t\t\u002F\u002F Found another user with the slug, throw error.\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\u002F* translators: 1: user slug *\u002F\r\n-\t\t\t\t\t\tesc_html__( 'This user slug \"%s\" already exists.', 'learnpress' ),\r\n-\t\t\t\t\t\t$slug\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_meta_value_by_key( self::META_KEY_USER_SLUG, $slug );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\treturn new WP_Error( 'lp_user_slug_update_failed', $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $slug;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get upload profile src.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_image_url(): string {\r\n-\t\tif ( ! empty( $this->image_url ) ) {\r\n-\t\t\treturn $this->image_url;\r\n-\t\t}\r\n-\r\n-\t\t$profile_picture = $this->get_meta_value_by_key( self::META_KEY_IMAGE, '' );\r\n-\t\tif ( ! empty( $profile_picture ) ) {\r\n-\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not add it.\r\n-\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\r\n-\t\t\t$profile_picture = $slash . $profile_picture;\r\n-\t\t\t\u002F\u002F End check.\r\n-\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\r\n-\t\t\t$file_path = $upload['basedir'] . $profile_picture;\r\n-\r\n-\t\t\tif ( file_exists( $file_path ) ) {\r\n-\t\t\t\t$this->image_url = $upload['baseurl'] . $profile_picture;\r\n-\t\t\t} else { \u002F\u002F For remote url.\r\n-\t\t\t\t$this->image_url = $profile_picture;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $this->image_url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get upload cover image src.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_cover_image_url(): string {\r\n-\t\t$cover_image = $this->get_meta_value_by_key( self::META_KEY_COVER_IMAGE, '' );\r\n-\t\tif ( ! empty( $cover_image ) ) {\r\n-\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not add it.\r\n-\t\t\t$slash       = substr( $cover_image, 0, 1 ) === '\u002F' ? '' : '\u002F';\r\n-\t\t\t$cover_image = $slash . $cover_image;\r\n-\t\t\t\u002F\u002F End check.\r\n-\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\r\n-\t\t\t$file_path = $upload['basedir'] . $cover_image;\r\n-\r\n-\t\t\tif ( file_exists( $file_path ) ) {\r\n-\t\t\t\treturn $upload['baseurl'] . $cover_image;\r\n-\t\t\t} else { \u002F\u002F For remote url.\r\n-\t\t\t\treturn $cover_image;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set cover image url.\r\n-\t *\r\n-\t * @param string $url\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function set_cover_image_url( string $url ) {\r\n-\t\t$this->set_meta_value_by_key( self::META_KEY_COVER_IMAGE, $url );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete cover image.\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function delete_cover_image() {\r\n-\t\t$upload_dir = learn_press_user_profile_picture_upload_dir();\r\n-\r\n-\t\t\u002F\u002F Delete old image if exists\r\n-\t\t$image_path = $this->get_meta_value_by_key( UserModel::META_KEY_COVER_IMAGE, '' );\r\n-\t\tif ( $image_path ) {\r\n-\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $image_path;\r\n-\r\n-\t\t\tif ( file_exists( $path ) ) {\r\n-\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Save empty string to database.\r\n-\t\t$this->set_cover_image_url( '' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display name\r\n-\t *\r\n-\t * Hook from function get_the_author_meta of WP\r\n-\t *\r\n-\t * @return string\r\n-\t * @uses get_the_author_meta\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.7\r\n-\t *\u002F\r\n-\tpublic function get_display_name(): string {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'get_the_author_display_name',\r\n-\t\t\t$this->display_name,\r\n-\t\t\t$this->get_id(),\r\n-\t\t\t$this->get_id()\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get url instructor.\r\n-\t *\r\n-\t * @move from LP_User\r\n-\t * @return string\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function get_url_instructor(): string {\r\n-\r\n-\t\t$single_instructor_link = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_name                 = $this->get_pretty_slug();\r\n-\t\t\t$single_instructor_page_id = learn_press_get_page_id( 'single_instructor' );\r\n-\t\t\tif ( ! $single_instructor_page_id ) {\r\n-\t\t\t\treturn $single_instructor_link;\r\n-\t\t\t}\r\n-\t\t\t$single_instructor_link = trailingslashit(\r\n-\t\t\t\ttrailingslashit( get_page_link( $single_instructor_page_id ) ) . $user_name\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $single_instructor_link;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get profile avatar url\r\n-\t * 1. Get upload avatar src\r\n-\t * 2. If not exists, get form Gravatar\r\n-\t * 3. If not exists, get default image\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_avatar_url(): string {\r\n-\t\t$avatar_url = $this->get_upload_avatar_src();\r\n-\t\tif ( empty( $avatar_url ) ) {\r\n-\t\t\t\u002F\u002F Get form Gravatar.\r\n-\t\t\t$args       = learn_press_get_avatar_thumb_size();\r\n-\t\t\t$args       = apply_filters( 'learn-press\u002Fgravatar\u002Fargs', $args );\r\n-\t\t\t$avatar_url = get_avatar_url( $this->get_id(), $args );\r\n-\t\t\t\u002F\u002F If not exists, get default avatar.\r\n-\t\t\tif ( empty( $avatar_url ) ) {\r\n-\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $avatar_url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get upload avatar src.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t * @move from get_upload_profile_src method on LP_Profile class\r\n-\t *\u002F\r\n-\tpublic function get_upload_avatar_src(): string {\r\n-\t\t$uploaded_avatar_src = '';\r\n-\t\t$profile_picture     = $this->get_meta_value_by_key( self::META_KEY_IMAGE, '' );\r\n-\r\n-\t\tif ( $profile_picture ) {\r\n-\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\r\n-\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\r\n-\t\t\t$profile_picture = $slash . $profile_picture;\r\n-\t\t\t\u002F\u002F End check.\r\n-\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\r\n-\t\t\t$file_path = $upload['basedir'] . $profile_picture;\r\n-\r\n-\t\t\tif ( file_exists( $file_path ) ) {\r\n-\t\t\t\t$uploaded_avatar_src = $upload['baseurl'] . $profile_picture;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fupload-avatar-src', $uploaded_avatar_src, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get links socials of use on Profile page\r\n-\t * Icon is svg\r\n-\t *\r\n-\t * @move from LP_Abstract_User\r\n-\t * @return array\r\n-\t * @since 4.2.3\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_profile_social(): array {\r\n-\t\t$socials    = array();\r\n-\t\t$extra_info = learn_press_get_user_extra_profile_info( $this->get_id() );\r\n-\r\n-\t\tif ( $extra_info ) {\r\n-\t\t\tforeach ( $extra_info as $k => $v ) {\r\n-\t\t\t\tif ( empty( $v ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tswitch ( $k ) {\r\n-\t\t\t\t\tcase 'facebook':\r\n-\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'twitter':\r\n-\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'linkedin':\r\n-\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'youtube':\r\n-\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$i = sprintf(\r\n-\t\t\t\t\t\t\t'\u003Ci class=\"lp-user-ico lp-icon-%s\">\u003C\u002Fi>',\r\n-\t\t\t\t\t\t\tesc_attr( $k )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$icon          = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\r\n-\t\t\t\t\t$i,\r\n-\t\t\t\t\t$k,\r\n-\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t$this\r\n-\t\t\t\t);\r\n-\t\t\t\t$socials[ $k ] = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tesc_url_raw( $v ),\r\n-\t\t\t\t\t$icon\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database.\r\n-\t *\r\n-\t * If user_item_id is empty, insert new data, else update data.\r\n-\t *\r\n-\t * @return UserModel\r\n-\t * @throws Exception\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function save(): UserModel {\r\n-\t\t\u002F\u002F Clear caches.\r\n-\t\t$this->clean_caches();\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Clean caches.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function clean_caches() {\r\n-\t\t\u002F\u002F Clear cache.\r\n-\t\t$key_cache       = \"userModel\u002Ffind\u002Fid\u002F{$this->get_id()}\";\r\n-\t\t$lp_course_cache = new LP_Cache();\r\n-\t\t$lp_course_cache->clear( $key_cache );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_id(): int {\r\n-\t\treturn (int) $this->ID;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get description of user.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6.9\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_description(): string {\r\n-\t\treturn get_the_author_meta( 'description', $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get email of user.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_email(): string {\r\n-\t\treturn $this->user_email ?? '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get username of user.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_username(): string {\r\n-\t\treturn $this->user_login ?? '';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get statistic info of instructor user\r\n-\t *\r\n-\t * @param array $params\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.7\r\n-\t *\u002F\r\n-\tpublic function get_instructor_statistic( array $params = [] ): array {\r\n-\t\t$statistic = array(\r\n-\t\t\t'total_course'        => 0,\r\n-\t\t\t'published_course'    => 0,\r\n-\t\t\t'pending_course'      => 0,\r\n-\t\t\t'total_student'       => 0,\r\n-\t\t\t'student_completed'   => 0,\r\n-\t\t\t'student_in_progress' => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$key_cache_first = \"instructor\u002F{$this->get_id()}\u002Fstatistic\";\r\n-\t\t\t$statistic_cache = LP_Cache::cache_load_first( 'get', $key_cache_first );\r\n-\t\t\tif ( $statistic_cache !== false ) {\r\n-\t\t\t\treturn $statistic_cache;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id          = $this->get_id();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t\t$courseJsonDB     = CourseJsonDB::getInstance();\r\n-\r\n-\t\t\t\u002F\u002F Count total user completed course of author\r\n-\t\t\t$filter_course                      = new CourseJsonFilter();\r\n-\t\t\t$filter_course->only_fields         = array( 'ID' );\r\n-\t\t\t$filter_course->post_author         = $user_id;\r\n-\t\t\t$filter_course->post_status         = [ 'publish', 'private' ];\r\n-\t\t\t$filter_course->return_string_query = true;\r\n-\t\t\t$query_courses_str                  = $courseJsonDB::getInstance()->get_courses( $filter_course );\r\n-\r\n-\t\t\t$filter_count_users            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_count_users->item_type = LP_COURSE_CPT;\r\n-\t\t\t$filter_count_users->where[]   = \"AND item_id IN ({$query_courses_str})\";\r\n-\t\t\t$count_student_has_status      = $lp_user_items_db->count_status_by_items( $filter_count_users );\r\n-\t\t\t\u002F\u002F Count total user in progress course of author\r\n-\r\n-\t\t\t\u002F\u002F Get total users attend course of author\r\n-\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\r\n-\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses publish of author\r\n-\t\t\t$filter_count_courses            = $courseJsonDB->count_courses_of_author( $user_id, [ 'publish' ] );\r\n-\t\t\t$total_courses_publish_of_author = $courseJsonDB->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses of author\r\n-\t\t\t$filter_count_courses    = $courseJsonDB->count_courses_of_author( $user_id );\r\n-\t\t\t$total_courses_of_author = $courseJsonDB->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses pending of author\r\n-\t\t\t$filter_count_courses            = $courseJsonDB->count_courses_of_author( $user_id, [ 'pending' ] );\r\n-\t\t\t$total_courses_pending_of_author = $courseJsonDB->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t$statistic['total_course']        = $total_courses_of_author;\r\n-\t\t\t$statistic['published_course']    = $total_courses_publish_of_author;\r\n-\t\t\t$statistic['pending_course']      = $total_courses_pending_of_author;\r\n-\t\t\t$statistic['total_student']       = $count_users_attend_courses_of_author;\r\n-\t\t\t$statistic['student_completed']   = $count_student_has_status->{LP_COURSE_FINISHED} ?? 0;\r\n-\t\t\t$statistic['student_in_progress'] = $count_student_has_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\r\n-\r\n-\t\t\t$statistic = apply_filters( 'lp\u002Fprofile\u002Finstructor\u002Fstatistic', $statistic, $this );\r\n-\r\n-\t\t\t\u002F\u002F Set cache first.\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_cache_first, $statistic );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $statistic;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get statistic info of student user\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_student_statistic(): array {\r\n-\t\t$statistic = array(\r\n-\t\t\t'enrolled_courses'   => 0,\r\n-\t\t\t'in_progress_course' => 0,\r\n-\t\t\t'finished_courses'   => 0,\r\n-\t\t\t'passed_courses'     => 0,\r\n-\t\t\t'failed_courses'     => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id          = $this->get_id();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\t\u002F\u002F Count status\r\n-\t\t\t$filter                 = new LP_User_Items_Filter();\r\n-\t\t\t$filter->user_id        = $user_id;\r\n-\t\t\t$count_status           = $lp_user_items_db->count_status_by_items( $filter );\r\n-\t\t\t$total_courses_enrolled = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 )\r\n-\t\t\t\t\t\t\t\t\t\t+ intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 )\r\n-\t\t\t\t\t\t\t\t\t\t+ intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\r\n-\r\n-\t\t\t$statistic['enrolled_courses']   = $total_courses_enrolled;\r\n-\t\t\t$statistic['in_progress_course'] = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\r\n-\t\t\t$statistic['finished_courses']   = $count_status->{LP_COURSE_FINISHED} ?? 0;\r\n-\t\t\t$statistic['passed_courses']     = $count_status->{LP_COURSE_GRADUATION_PASSED} ?? 0;\r\n-\t\t\t$statistic['failed_courses']     = $count_status->{LP_COURSE_GRADUATION_FAILED} ?? 0;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstudent\u002Fstatistic', $statistic, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user is instructor or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function is_instructor(): bool {\r\n-\t\treturn user_can( $this->get_id(), self::ROLE_INSTRUCTOR )\r\n-\t\t\t\t|| user_can( $this->get_id(), self::ROLE_ADMINISTRATOR );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get quizzes attend of user.\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param int $total_rows\r\n-\t *\r\n-\t * @return array|int|string|null\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_quizzes_attend( $filter, int &$total_rows = 0 ) {\r\n-\t\t$lp_db_user_items  = UserItemsDB::getInstance();\r\n-\t\t$filter->order_by  = 'user_item_id';\r\n-\t\t$filter->order     = 'DESC';\r\n-\t\t$filter->user_id   = $this->get_id();\r\n-\t\t$filter->item_type = LP_QUIZ_CPT;\r\n-\t\t$filter->ref_type  = LP_COURSE_CPT;\r\n-\r\n-\t\treturn $lp_db_user_items->get_user_items( $filter, $total_rows );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models;\n+\n+\u002F**\n+ * Class UserModel\n+ *\n+ * @version 1.0.3\n+ * @since 4.2.6.9\n+ *\u002F\n+\n+use Exception;\n+use LearnPress\\Databases\\Course\\CourseJsonDB;\n+use LearnPress\\Databases\\UserItemsDB;\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Services\\UserService;\n+use LP_Cache;\n+use LP_Debug;\n+use LearnPress\\Databases\\UserDB;\n+use LearnPress\\Filters\\UserFilter;\n+\n+use LP_User_Items_DB;\n+use LP_User_Items_Filter;\n+use LP_WP_Filesystem;\n+use stdClass;\n+use Throwable;\n+use WP_Error;\n+use WP_User;\n+\n+class UserModel {\n+\t\u002F**\n+\t * Auto increment, Primary key\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $ID = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $user_login = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $user_nicename;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $user_email = null;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $user_url = null;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $user_register = '';\n+\t\u002F**\n+\t * Display name of user.\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $display_name = '';\n+\t\u002F**\n+\t * @var stdClass all meta data\n+\t *\u002F\n+\tpublic $meta_data = null;\n+\t\u002F**\n+\t * @var string image url\n+\t *\u002F\n+\tpublic $image_url = '';\n+\n+\t\u002F\u002F Meta keys\n+\tconst META_KEY_IMAGE       = '_lp_profile_picture';\n+\tconst META_KEY_COVER_IMAGE = '_lp_profile_cover_image';\n+\tconst META_KEY_USER_SLUG   = '_lp_user_slug';\n+\t\u002F\u002F Roles\n+\tconst ROLE_INSTRUCTOR    = LP_TEACHER_ROLE;\n+\tconst ROLE_ADMINISTRATOR = 'administrator';\n+\n+\t\u002F**\n+\t * If data get from database, map to object.\n+\t * Else create new object to save data to database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\u002F\n+\tpublic function __construct( $data = null ) {\n+\t\tif ( $data ) {\n+\t\t\t$this->map_to_object( $data );\n+\t\t}\n+\n+\t\tif ( is_null( $this->meta_data ) ) {\n+\t\t\t$this->meta_data = new stdClass();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Map array, object data to UserItemModel.\n+\t * Use for data get from database.\n+\t *\n+\t * @param array|object|mixed $data\n+\t *\n+\t * @return UserModel\n+\t *\u002F\n+\tpublic function map_to_object( $data ): UserModel {\n+\t\tforeach ( $data as $key => $value ) {\n+\t\t\tif ( property_exists( $this, $key ) ) {\n+\t\t\t\t$this->{$key} = $value;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get course by ID\n+\t *\n+\t * @param int $user_id\n+\t * @param bool $check_cache\n+\t *\n+\t * @return false|static\n+\t *\u002F\n+\tpublic static function find( int $user_id, bool $check_cache = false ) {\n+\t\t$filter_user     = new UserFilter();\n+\t\t$filter_user->ID = $user_id;\n+\t\t$key_cache       = \"userModel\u002Ffind\u002Fid\u002F{$user_id}\";\n+\t\t$lp_course_cache = new LP_Cache();\n+\n+\t\t\u002F\u002F Check cache\n+\t\tif ( $check_cache ) {\n+\t\t\t$user_model = $lp_course_cache->get_cache( $key_cache );\n+\t\t\tif ( $user_model instanceof UserModel ) {\n+\t\t\t\treturn $user_model;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Query database no cache.\n+\t\t$user_model = self::get_user_model_from_db( $filter_user );\n+\n+\t\t\u002F\u002F Set cache\n+\t\tif ( $user_model instanceof UserModel ) {\n+\t\t\t$lp_course_cache->set_cache( $key_cache, $user_model );\n+\t\t}\n+\n+\t\treturn $user_model;\n+\t}\n+\n+\t\u002F**\n+\t * Get course from database.\n+\t * If not exists, return false.\n+\t * If exists, return CoursePostModel.\n+\t *\n+\t * @param UserFilter $filter\n+\t *\n+\t * @return UserModel|false|static\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function get_user_model_from_db( UserFilter $filter ) {\n+\t\t$lp_user_db = UserDB::getInstance();\n+\t\t$user_model = false;\n+\n+\t\ttry {\n+\t\t\t$filter->only_fields = [ 'ID', 'user_nicename', 'user_login', 'user_email', 'display_name' ];\n+\t\t\t$lp_user_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $lp_user_db->get_users( $filter );\n+\t\t\t$user_rs          = $lp_user_db->wpdb->get_row( $query_single_row );\n+\t\t\tif ( $user_rs instanceof stdClass ) {\n+\t\t\t\t$user_model = new UserModel( $user_rs );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_model;\n+\t}\n+\n+\t\u002F**\n+\t * Get all meta_data, all keys of a user it\n+\t *\n+\t * @return stdClass|null\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_all_metadata() {\n+\t}\n+\n+\t\u002F**\n+\t * Get meta value by key.\n+\t *\n+\t * @param string $key\n+\t * @param mixed $default_value\n+\t *\n+\t * @return false|mixed\n+\t *\u002F\n+\tpublic function get_meta_value_by_key( string $key, $default_value = false ) {\n+\t\tif ( $this->meta_data instanceof stdClass && isset( $this->meta_data->{$key} ) ) {\n+\t\t\treturn $this->meta_data->{$key};\n+\t\t}\n+\n+\t\t$value = get_user_meta( $this->ID, $key, true );\n+\t\tif ( empty( $value ) ) {\n+\t\t\t$value = $default_value;\n+\t\t}\n+\n+\t\t$this->meta_data->{$key} = $value;\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * Set meta value by key.\n+\t *\n+\t * @param string $key\n+\t * @param $value\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function set_meta_value_by_key( string $key, $value ) {\n+\t\t$this->meta_data->{$key} = $value;\n+\t\tupdate_user_meta( $this->ID, $key, $value );\n+\t}\n+\n+\t\u002F**\n+\t * Retrieve the pretty slug used instead of user_name.\n+\t *\n+\t * This value is used to build links such as instructor links and user profile links.\n+\t * If a pretty slug has not been generated yet, it falls back to user_name when\n+\t * $fallback_to_username is true.\n+\t *\n+\t * @param bool $fallback_to_username Whether to fall back to username if no pretty slug exists.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\t\u002F*public function get_pretty_slug( bool $fallback_to_username = true ): string {\n+\t\t$slug = sanitize_title( (string) $this->get_meta_value_by_key( self::META_KEY_USER_SLUG, '' ) );\n+\n+\t\tif ( '' !== $slug || ! $fallback_to_username ) {\n+\t\t\treturn $slug;\n+\t\t}\n+\n+\t\treturn $this->get_username();\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get slug link of user.\n+\t * Get from column user_nicename of table wp_users\n+\t *\n+\t * @return string\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_slug_link(): string {\n+\t\treturn (string) $this->user_nicename;\n+\t}\n+\n+\t\u002F**\n+\t * Update pretty slug manually.\n+\t *\n+\t * @param string $slug\n+\t *\n+\t * @return string|WP_Error\n+\t * @since 4.3.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function update_user_nicename( string $slug ) {\n+\t\ttry {\n+\t\t\t$slug = sanitize_title( wp_unslash( $slug ) );\n+\n+\t\t\tif ( empty( $slug ) ) {\n+\t\t\t\tthrow new Exception( __( 'Cannot create a user with an empty nicename.' ) );\n+\t\t\t} elseif ( mb_strlen( $slug ) > 50 ) {\n+\t\t\t\tthrow new Exception( __( 'Nicename may not be longer than 50 characters.' ) );\n+\t\t\t}\n+\n+\t\t\t$userModelFind = UserService::instance()->get_user_by_slug_link( $slug );\n+\t\t\t\u002F\u002F If not found any user with the slug, or found user is current user, update slug, else throw error.\n+\t\t\tif ( ! $userModelFind ) {\n+\t\t\t\t$this->user_nicename = $slug;\n+\t\t\t\t$this->save();\n+\t\t\t} elseif ( $userModelFind->get_id() !== $this->get_id() ) {\n+\t\t\t\t\u002F\u002F Found another user with the slug, throw error.\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\u002F* translators: 1: user slug *\u002F\n+\t\t\t\t\t\tesc_html__( 'This user slug \"%s\" already exists.', 'learnpress' ),\n+\t\t\t\t\t\t$slug\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn new WP_Error( 'lp_user_slug_update_failed', $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $slug;\n+\t}\n+\n+\t\u002F**\n+\t * Get upload profile src.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_image_url(): string {\n+\t\tif ( ! empty( $this->image_url ) ) {\n+\t\t\treturn $this->image_url;\n+\t\t}\n+\n+\t\t$profile_picture = $this->get_meta_value_by_key( self::META_KEY_IMAGE, '' );\n+\t\tif ( ! empty( $profile_picture ) ) {\n+\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not add it.\n+\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\n+\t\t\t$profile_picture = $slash . $profile_picture;\n+\t\t\t\u002F\u002F End check.\n+\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\n+\t\t\t$file_path = $upload['basedir'] . $profile_picture;\n+\n+\t\t\tif ( file_exists( $file_path ) ) {\n+\t\t\t\t$this->image_url = $upload['baseurl'] . $profile_picture;\n+\t\t\t} else { \u002F\u002F For remote url.\n+\t\t\t\t$this->image_url = $profile_picture;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $this->image_url;\n+\t}\n+\n+\t\u002F**\n+\t * Get upload cover image src.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_cover_image_url(): string {\n+\t\t$cover_image = $this->get_meta_value_by_key( self::META_KEY_COVER_IMAGE, '' );\n+\t\tif ( ! empty( $cover_image ) ) {\n+\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not add it.\n+\t\t\t$slash       = substr( $cover_image, 0, 1 ) === '\u002F' ? '' : '\u002F';\n+\t\t\t$cover_image = $slash . $cover_image;\n+\t\t\t\u002F\u002F End check.\n+\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\n+\t\t\t$file_path = $upload['basedir'] . $cover_image;\n+\n+\t\t\tif ( file_exists( $file_path ) ) {\n+\t\t\t\treturn $upload['baseurl'] . $cover_image;\n+\t\t\t} else { \u002F\u002F For remote url.\n+\t\t\t\treturn $cover_image;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * Set cover image url.\n+\t *\n+\t * @param string $url\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function set_cover_image_url( string $url ) {\n+\t\t$this->set_meta_value_by_key( self::META_KEY_COVER_IMAGE, $url );\n+\t}\n+\n+\t\u002F**\n+\t * Delete cover image.\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function delete_cover_image() {\n+\t\t$upload_dir = learn_press_user_profile_picture_upload_dir();\n+\n+\t\t\u002F\u002F Delete old image if exists\n+\t\t$image_path = $this->get_meta_value_by_key( UserModel::META_KEY_COVER_IMAGE, '' );\n+\t\tif ( $image_path ) {\n+\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $image_path;\n+\n+\t\t\tif ( file_exists( $path ) ) {\n+\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Save empty string to database.\n+\t\t$this->set_cover_image_url( '' );\n+\t}\n+\n+\t\u002F**\n+\t * Get display name\n+\t *\n+\t * Hook from function get_the_author_meta of WP\n+\t *\n+\t * @return string\n+\t * @uses get_the_author_meta\n+\t * @version 1.0.1\n+\t * @since 4.2.7\n+\t *\u002F\n+\tpublic function get_display_name(): string {\n+\t\treturn apply_filters(\n+\t\t\t'get_the_author_display_name',\n+\t\t\t$this->display_name,\n+\t\t\t$this->get_id(),\n+\t\t\t$this->get_id()\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get url instructor.\n+\t *\n+\t * @move from LP_User\n+\t * @return string\n+\t * @version 1.0.1\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function get_url_instructor(): string {\n+\n+\t\t$single_instructor_link = '';\n+\n+\t\ttry {\n+\t\t\t$user_name                 = $this->get_slug_link();\n+\t\t\t$single_instructor_page_id = learn_press_get_page_id( 'single_instructor' );\n+\t\t\tif ( ! $single_instructor_page_id ) {\n+\t\t\t\treturn $single_instructor_link;\n+\t\t\t}\n+\t\t\t$single_instructor_link = trailingslashit(\n+\t\t\t\ttrailingslashit( get_page_link( $single_instructor_page_id ) ) . $user_name\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $single_instructor_link;\n+\t}\n+\n+\t\u002F**\n+\t * Get profile avatar url\n+\t * 1. Get upload avatar src\n+\t * 2. If not exists, get form Gravatar\n+\t * 3. If not exists, get default image\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_avatar_url(): string {\n+\t\t$avatar_url = $this->get_upload_avatar_src();\n+\t\tif ( empty( $avatar_url ) ) {\n+\t\t\t\u002F\u002F Get form Gravatar.\n+\t\t\t$args       = learn_press_get_avatar_thumb_size();\n+\t\t\t$args       = apply_filters( 'learn-press\u002Fgravatar\u002Fargs', $args );\n+\t\t\t$avatar_url = get_avatar_url( $this->get_id(), $args );\n+\t\t\t\u002F\u002F If not exists, get default avatar.\n+\t\t\tif ( empty( $avatar_url ) ) {\n+\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $avatar_url;\n+\t}\n+\n+\t\u002F**\n+\t * Get upload avatar src.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t * @move from get_upload_profile_src method on LP_Profile class\n+\t *\u002F\n+\tpublic function get_upload_avatar_src(): string {\n+\t\t$uploaded_avatar_src = '';\n+\t\t$profile_picture     = $this->get_meta_value_by_key( self::META_KEY_IMAGE, '' );\n+\n+\t\tif ( $profile_picture ) {\n+\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\n+\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\n+\t\t\t$profile_picture = $slash . $profile_picture;\n+\t\t\t\u002F\u002F End check.\n+\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\n+\t\t\t$file_path = $upload['basedir'] . $profile_picture;\n+\n+\t\t\tif ( file_exists( $file_path ) ) {\n+\t\t\t\t$uploaded_avatar_src = $upload['baseurl'] . $profile_picture;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fupload-avatar-src', $uploaded_avatar_src, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get links socials of use on Profile page\n+\t * Icon is svg\n+\t *\n+\t * @move from LP_Abstract_User\n+\t * @return array\n+\t * @since 4.2.3\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_profile_social(): array {\n+\t\t$socials    = array();\n+\t\t$extra_info = learn_press_get_user_extra_profile_info( $this->get_id() );\n+\n+\t\tif ( $extra_info ) {\n+\t\t\tforeach ( $extra_info as $k => $v ) {\n+\t\t\t\tif ( empty( $v ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tswitch ( $k ) {\n+\t\t\t\t\tcase 'facebook':\n+\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'twitter':\n+\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'linkedin':\n+\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'youtube':\n+\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$i = sprintf(\n+\t\t\t\t\t\t\t'\u003Ci class=\"lp-user-ico lp-icon-%s\">\u003C\u002Fi>',\n+\t\t\t\t\t\t\tesc_attr( $k )\n+\t\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$icon          = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\n+\t\t\t\t\t$i,\n+\t\t\t\t\t$k,\n+\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t$this\n+\t\t\t\t);\n+\t\t\t\t$socials[ $k ] = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\tesc_url_raw( $v ),\n+\t\t\t\t\t$icon\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database.\n+\t *\n+\t * If user_item_id is empty, insert new data, else update data.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function save( bool $force_save = false ) {\n+\t\t$data = get_object_vars( $this );\n+\n+\t\t\u002F\u002F Check if exists user id.\n+\t\tif ( empty( $this->ID ) ) { \u002F\u002F Insert data.\n+\t\t\tunset( $data['ID'] );\n+\t\t\t$user_id = wp_insert_user( $data );\n+\t\t} else { \u002F\u002F Update data.\n+\t\t\tif ( ! $force_save ) {\n+\t\t\t\tif ( ! current_user_can( 'edit_user', $this->get_id() ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Sorry, you are not allowed to edit this user.' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$user_id = wp_update_user( $data );\n+\t\t}\n+\n+\t\tif ( is_wp_error( $user_id ) ) {\n+\t\t\tthrow new Exception( $user_id->get_error_message() );\n+\t\t} else {\n+\t\t\t$this->ID = $user_id;\n+\t\t}\n+\n+\t\t$this->clean_caches();\n+\t}\n+\n+\t\u002F**\n+\t * Clean caches.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function clean_caches() {\n+\t\t\u002F\u002F Clear cache.\n+\t\t$key_cache       = \"userModel\u002Ffind\u002Fid\u002F{$this->get_id()}\";\n+\t\t$lp_course_cache = new LP_Cache();\n+\t\t$lp_course_cache->clear( $key_cache );\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_id(): int {\n+\t\treturn (int) $this->ID;\n+\t}\n+\n+\t\u002F**\n+\t * Get description of user.\n+\t *\n+\t * @return string\n+\t * @since 4.2.6.9\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_description(): string {\n+\t\treturn get_the_author_meta( 'description', $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Get email of user.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_email(): string {\n+\t\treturn $this->user_email ?? '';\n+\t}\n+\n+\t\u002F**\n+\t * Get username of user.\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_username(): string {\n+\t\treturn $this->user_login ?? '';\n+\t}\n+\n+\t\u002F**\n+\t * Get statistic info of instructor user\n+\t *\n+\t * @param array $params\n+\t *\n+\t * @return array\n+\t * @since 4.1.6\n+\t * @version 1.0.7\n+\t *\u002F\n+\tpublic function get_instructor_statistic( array $params = [] ): array {\n+\t\t$statistic = array(\n+\t\t\t'total_course'        => 0,\n+\t\t\t'published_course'    => 0,\n+\t\t\t'pending_course'      => 0,\n+\t\t\t'total_student'       => 0,\n+\t\t\t'student_completed'   => 0,\n+\t\t\t'student_in_progress' => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$key_cache_first = \"instructor\u002F{$this->get_id()}\u002Fstatistic\";\n+\t\t\t$statistic_cache = LP_Cache::cache_load_first( 'get', $key_cache_first );\n+\t\t\tif ( $statistic_cache !== false ) {\n+\t\t\t\treturn $statistic_cache;\n+\t\t\t}\n+\n+\t\t\t$user_id          = $this->get_id();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t\t$courseJsonDB     = CourseJsonDB::getInstance();\n+\n+\t\t\t\u002F\u002F Count total user completed course of author\n+\t\t\t$filter_course                      = new CourseJsonFilter();\n+\t\t\t$filter_course->only_fields         = array( 'ID' );\n+\t\t\t$filter_course->post_author         = $user_id;\n+\t\t\t$filter_course->post_status         = [ 'publish', 'private' ];\n+\t\t\t$filter_course->return_string_query = true;\n+\t\t\t$query_courses_str                  = $courseJsonDB::getInstance()->get_courses( $filter_course );\n+\n+\t\t\t$filter_count_users            = new LP_User_Items_Filter();\n+\t\t\t$filter_count_users->item_type = LP_COURSE_CPT;\n+\t\t\t$filter_count_users->where[]   = \"AND item_id IN ({$query_courses_str})\";\n+\t\t\t$count_student_has_status      = $lp_user_items_db->count_status_by_items( $filter_count_users );\n+\t\t\t\u002F\u002F Count total user in progress course of author\n+\n+\t\t\t\u002F\u002F Get total users attend course of author\n+\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\n+\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\n+\n+\t\t\t\u002F\u002F Get total courses publish of author\n+\t\t\t$filter_count_courses            = $courseJsonDB->count_courses_of_author( $user_id, [ 'publish' ] );\n+\t\t\t$total_courses_publish_of_author = $courseJsonDB->get_courses( $filter_count_courses );\n+\n+\t\t\t\u002F\u002F Get total courses of author\n+\t\t\t$filter_count_courses    = $courseJsonDB->count_courses_of_author( $user_id );\n+\t\t\t$total_courses_of_author = $courseJsonDB->get_courses( $filter_count_courses );\n+\n+\t\t\t\u002F\u002F Get total courses pending of author\n+\t\t\t$filter_count_courses            = $courseJsonDB->count_courses_of_author( $user_id, [ 'pending' ] );\n+\t\t\t$total_courses_pending_of_author = $courseJsonDB->get_courses( $filter_count_courses );\n+\n+\t\t\t$statistic['total_course']        = $total_courses_of_author;\n+\t\t\t$statistic['published_course']    = $total_courses_publish_of_author;\n+\t\t\t$statistic['pending_course']      = $total_courses_pending_of_author;\n+\t\t\t$statistic['total_student']       = $count_users_attend_courses_of_author;\n+\t\t\t$statistic['student_completed']   = $count_student_has_status->{LP_COURSE_FINISHED} ?? 0;\n+\t\t\t$statistic['student_in_progress'] = $count_student_has_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\n+\n+\t\t\t$statistic = apply_filters( 'lp\u002Fprofile\u002Finstructor\u002Fstatistic', $statistic, $this );\n+\n+\t\t\t\u002F\u002F Set cache first.\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_cache_first, $statistic );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $statistic;\n+\t}\n+\n+\t\u002F**\n+\t * Get statistic info of student user\n+\t *\n+\t * @return array\n+\t * @since 4.1.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_student_statistic(): array {\n+\t\t$statistic = array(\n+\t\t\t'enrolled_courses'   => 0,\n+\t\t\t'in_progress_course' => 0,\n+\t\t\t'finished_courses'   => 0,\n+\t\t\t'passed_courses'     => 0,\n+\t\t\t'failed_courses'     => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user_id          = $this->get_id();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\n+\t\t\t\u002F\u002F Count status\n+\t\t\t$filter                 = new LP_User_Items_Filter();\n+\t\t\t$filter->user_id        = $user_id;\n+\t\t\t$count_status           = $lp_user_items_db->count_status_by_items( $filter );\n+\t\t\t$total_courses_enrolled = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 )\n+\t\t\t\t\t\t\t\t\t\t+ intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 )\n+\t\t\t\t\t\t\t\t\t\t+ intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\n+\n+\t\t\t$statistic['enrolled_courses']   = $total_courses_enrolled;\n+\t\t\t$statistic['in_progress_course'] = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\n+\t\t\t$statistic['finished_courses']   = $count_status->{LP_COURSE_FINISHED} ?? 0;\n+\t\t\t$statistic['passed_courses']     = $count_status->{LP_COURSE_GRADUATION_PASSED} ?? 0;\n+\t\t\t$statistic['failed_courses']     = $count_status->{LP_COURSE_GRADUATION_FAILED} ?? 0;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstudent\u002Fstatistic', $statistic, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Check user is instructor or not.\n+\t *\n+\t * @return bool\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function is_instructor(): bool {\n+\t\t$wp_user = new WP_User( $this );\n+\t\treturn user_can( $wp_user, self::ROLE_INSTRUCTOR )\n+\t\t\t\t|| user_can( $wp_user, self::ROLE_ADMINISTRATOR );\n+\t}\n+\n+\t\u002F**\n+\t * Get quizzes attend of user.\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param int $total_rows\n+\t *\n+\t * @return array|int|string|null\n+\t * @throws Exception\n+\t * @since 4.2.8.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_quizzes_attend( $filter, int &$total_rows = 0 ) {\n+\t\t$lp_db_user_items  = UserItemsDB::getInstance();\n+\t\t$filter->order_by  = 'user_item_id';\n+\t\t$filter->order     = 'DESC';\n+\t\t$filter->user_id   = $this->get_id();\n+\t\t$filter->item_type = LP_QUIZ_CPT;\n+\t\t$filter->ref_type  = LP_COURSE_CPT;\n+\n+\t\treturn $lp_db_user_items->get_user_items( $filter, $total_rows );\n+\t}\n+\n+\t\u002F**\n+\t * Get roles of user.\n+\t *\n+\t * @return array\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_roles(): array {\n+\t\t$user = new WP_User( $this );\n+\t\treturn is_array( $user->roles ) ? $user->roles : [];\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FWPTables\u002FCoursesTable.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FWPTables\u002FCoursesTable.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FModels\u002FWPTables\u002FCoursesTable.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FModels\u002FWPTables\u002FCoursesTable.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,197 +1,197 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Models\\WPTables;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LP_Abstract_Post_Type;\r\n-use LP_Helper;\r\n-use WP_List_Table;\r\n-use WP_Posts_List_Table;\r\n-\r\n-\u002F**\r\n- * LearnPress Courses Table class.\r\n- *\u002F\r\n-\r\n-class CoursesTable extends WP_Posts_List_Table {\r\n-\t\u002F**\r\n-\t * Get the table columns.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_columns() {\r\n-\t\t$columns = parent::get_columns();\r\n-\r\n-\t\tunset( $columns['comments'] );\r\n-\r\n-\t\t$columns = Template::insert_value_to_position_array(\r\n-\t\t\t$columns,\r\n-\t\t\t'before',\r\n-\t\t\t'title',\r\n-\t\t\t'thumbnail',\r\n-\t\t\tesc_html__( 'Thumbnail', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$columns = Template::insert_value_to_position_array(\r\n-\t\t\t$columns,\r\n-\t\t\t'after',\r\n-\t\t\t'author',\r\n-\t\t\t'curriculum',\r\n-\t\t\tesc_html__( 'Curriculum', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$columns = Template::insert_value_to_position_array(\r\n-\t\t\t$columns,\r\n-\t\t\t'after',\r\n-\t\t\t'curriculum',\r\n-\t\t\t'student',\r\n-\t\t\tesc_html__( 'Student', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$columns = Template::insert_value_to_position_array(\r\n-\t\t\t$columns,\r\n-\t\t\t'after',\r\n-\t\t\t'student',\r\n-\t\t\t'price',\r\n-\t\t\tesc_html__( 'Price', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn $columns;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set columns can be sortable query\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_sortable_columns() {\r\n-\t\t$sortable_columns           = parent::get_sortable_columns();\r\n-\t\t$sortable_columns['author'] = array( 'author', 'asc' );\r\n-\t\t$sortable_columns['price']  = array( 'price', 'desc' );\r\n-\t\treturn $sortable_columns;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Column thumbnail\r\n-\t * @use WP_List_Table::single_row_columns\r\n-\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function column_thumbnail( $post ) {\r\n-\t\t$courseModel = CourseModel::find( $post->ID, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\techo $singleCourseTemplate->html_image( $courseModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Column author\r\n-\t * @use WP_List_Table::single_row_columns\r\n-\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function column_author( $post ) {\r\n-\t\tLP_Abstract_Post_Type::column_author( $post );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Column Curriculum\r\n-\t * @use WP_List_Table::single_row_columns\r\n-\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function column_curriculum( $post ) {\r\n-\t\t$courseModel = CourseModel::find( $post->ID, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$count_sections = $courseModel->get_total_sections();\r\n-\r\n-\t\t$html_count_item      = '';\r\n-\t\t$item_types_of_course = CourseModel::item_types_support();\r\n-\t\tforeach ( $item_types_of_course as $type ) {\r\n-\t\t\t$count_items      = $courseModel->count_items( $type );\r\n-\t\t\t$html_count_item .= sprintf(\r\n-\t\t\t\t'\u003Cdiv>\u003Cstrong>%d\u003C\u002Fstrong> %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$count_items,\r\n-\t\t\t\tLP_Helper::get_i18n_string_plural( $count_items, $type, false )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'count_section' => sprintf(\r\n-\t\t\t\t'\u003Cdiv>%d %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$count_sections,\r\n-\t\t\t\t_n( 'Section', 'Sections', $count_sections, 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'count_item'    => $html_count_item,\r\n-\t\t];\r\n-\r\n-\t\techo Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Column count student\r\n-\t * @use WP_List_Table::single_row_columns\r\n-\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function column_student( $post ) {\r\n-\t\t$courseModel = CourseModel::find( $post->ID, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Count students\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-label-counter\">%d\u003C\u002Fdiv>',\r\n-\t\t\t$courseModel->count_students()\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Button view list students\r\n-\t\tprintf(\r\n-\t\t\t'\u003Ca type=\"button\"\r\n-\t\t\t\tclass=\"lp-button lp-btn-view-students\"\r\n-\t\t\t\tdata-course-id=\"%d\"\r\n-\t\t\t\tdata-course-title=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t$post->ID,\r\n-\t\t\tesc_attr( $post->post_title ),\r\n-\t\t\tesc_html__( 'View List', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Column count student\r\n-\t * @use WP_List_Table::single_row_columns\r\n-\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\r\n-\t *\r\n-\t * @param $post\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function column_price( $post ) {\r\n-\t\t$courseModel = CourseModel::find( $post->ID, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo SingleCourseTemplate::instance()->html_price( $courseModel );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Models\\WPTables;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LP_Abstract_Post_Type;\n+use LP_Helper;\n+use WP_List_Table;\n+use WP_Posts_List_Table;\n+\n+\u002F**\n+ * LearnPress Courses Table class.\n+ *\u002F\n+\n+class CoursesTable extends WP_Posts_List_Table {\n+\t\u002F**\n+\t * Get the table columns.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_columns() {\n+\t\t$columns = parent::get_columns();\n+\n+\t\tunset( $columns['comments'] );\n+\n+\t\t$columns = Template::insert_value_to_position_array(\n+\t\t\t$columns,\n+\t\t\t'before',\n+\t\t\t'title',\n+\t\t\t'thumbnail',\n+\t\t\tesc_html__( 'Thumbnail', 'learnpress' )\n+\t\t);\n+\n+\t\t$columns = Template::insert_value_to_position_array(\n+\t\t\t$columns,\n+\t\t\t'after',\n+\t\t\t'author',\n+\t\t\t'curriculum',\n+\t\t\tesc_html__( 'Curriculum', 'learnpress' )\n+\t\t);\n+\n+\t\t$columns = Template::insert_value_to_position_array(\n+\t\t\t$columns,\n+\t\t\t'after',\n+\t\t\t'curriculum',\n+\t\t\t'student',\n+\t\t\tesc_html__( 'Student', 'learnpress' )\n+\t\t);\n+\n+\t\t$columns = Template::insert_value_to_position_array(\n+\t\t\t$columns,\n+\t\t\t'after',\n+\t\t\t'student',\n+\t\t\t'price',\n+\t\t\tesc_html__( 'Price', 'learnpress' )\n+\t\t);\n+\n+\t\treturn $columns;\n+\t}\n+\n+\t\u002F**\n+\t * Set columns can be sortable query\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_sortable_columns() {\n+\t\t$sortable_columns           = parent::get_sortable_columns();\n+\t\t$sortable_columns['author'] = array( 'author', 'asc' );\n+\t\t$sortable_columns['price']  = array( 'price', 'desc' );\n+\t\treturn $sortable_columns;\n+\t}\n+\n+\t\u002F**\n+\t * Column thumbnail\n+\t * @use WP_List_Table::single_row_columns\n+\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function column_thumbnail( $post ) {\n+\t\t$courseModel = CourseModel::find( $post->ID, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\techo $singleCourseTemplate->html_image( $courseModel );\n+\t}\n+\n+\t\u002F**\n+\t * Column author\n+\t * @use WP_List_Table::single_row_columns\n+\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function column_author( $post ) {\n+\t\tLP_Abstract_Post_Type::column_author( $post );\n+\t}\n+\n+\t\u002F**\n+\t * Column Curriculum\n+\t * @use WP_List_Table::single_row_columns\n+\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function column_curriculum( $post ) {\n+\t\t$courseModel = CourseModel::find( $post->ID, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$count_sections = $courseModel->get_total_sections();\n+\n+\t\t$html_count_item      = '';\n+\t\t$item_types_of_course = CourseModel::item_types_support();\n+\t\tforeach ( $item_types_of_course as $type ) {\n+\t\t\t$count_items      = $courseModel->count_items( $type );\n+\t\t\t$html_count_item .= sprintf(\n+\t\t\t\t'\u003Cdiv>\u003Cstrong>%d\u003C\u002Fstrong> %s\u003C\u002Fdiv>',\n+\t\t\t\t$count_items,\n+\t\t\t\tLP_Helper::get_i18n_string_plural( $count_items, $type, false )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'count_section' => sprintf(\n+\t\t\t\t'\u003Cdiv>%d %s\u003C\u002Fdiv>',\n+\t\t\t\t$count_sections,\n+\t\t\t\t_n( 'Section', 'Sections', $count_sections, 'learnpress' )\n+\t\t\t),\n+\t\t\t'count_item'    => $html_count_item,\n+\t\t];\n+\n+\t\techo Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Column count student\n+\t * @use WP_List_Table::single_row_columns\n+\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function column_student( $post ) {\n+\t\t$courseModel = CourseModel::find( $post->ID, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Count students\n+\t\tprintf(\n+\t\t\t'\u003Cdiv class=\"lp-label-counter\">%d\u003C\u002Fdiv>',\n+\t\t\t$courseModel->count_students()\n+\t\t);\n+\n+\t\t\u002F\u002F Button view list students\n+\t\tprintf(\n+\t\t\t'\u003Ca type=\"button\"\n+\t\t\t\tclass=\"lp-button lp-btn-view-students\"\n+\t\t\t\tdata-course-id=\"%d\"\n+\t\t\t\tdata-course-title=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t$post->ID,\n+\t\t\tesc_attr( $post->post_title ),\n+\t\t\tesc_html__( 'View List', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Column count student\n+\t * @use WP_List_Table::single_row_columns\n+\t * call_user_func( array( $this, 'column_' . $column_name ), $item )\n+\t *\n+\t * @param $post\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function column_price( $post ) {\n+\t\t$courseModel = CourseModel::find( $post->ID, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo SingleCourseTemplate::instance()->html_price( $courseModel );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Fclass-lp-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Fclass-lp-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Fclass-lp-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Fclass-lp-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1495 +1,1496 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Order\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Order' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Order\r\n-\t *\u002F\r\n-\tclass LP_Order extends LP_Abstract_Post_Data {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_post_type = LP_ORDER_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array(\r\n-\t\t\t'user_id'          => '',\r\n-\t\t\t'order_date'       => '',\r\n-\t\t\t'date_modified'    => '',\r\n-\t\t\t'customer_message' => '',\r\n-\t\t\t'customer_note'    => '',\r\n-\t\t\t'status'           => '',\r\n-\t\t\t'order_key'        => '',\r\n-\t\t\t'total'            => 0,\r\n-\t\t\t'subtotal'         => 0,\r\n-\t\t\t'created_via'      => '',\r\n-\t\t\t'checkout_email'   => '',\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_meta_keys = array(\r\n-\t\t\t'_user_id'              => 'user',\r\n-\t\t\t'_order_currency'       => 'currency',\r\n-\t\t\t'_order_subtotal'       => 'subtotal',\r\n-\t\t\t'_order_total'          => 'total',\r\n-\t\t\t'_payment_method'       => 'payment_method',\r\n-\t\t\t'_payment_method_title' => 'payment_method_title',\r\n-\t\t\t'_order_version'        => 'order_version',\r\n-\t\t\t'_edit_last'            => '',\r\n-\t\t\t'_edit_lock'            => '',\r\n-\t\t\t'_prices_include_tax'   => '',\r\n-\t\t\t'_order_key'            => '',\r\n-\t\t\t'_user_ip'              => '',\r\n-\t\t\t'_checkout_email'       => '',\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Store order status in transactions.\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_status = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Order constructor.\r\n-\t\t *\r\n-\t\t * @param bool $order_id\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $order_id = false ) {\r\n-\t\t\t$this->_curd = new LP_Order_CURD();\r\n-\t\t\tif ( is_numeric( $order_id ) && $order_id > 0 ) {\r\n-\t\t\t\t$this->set_id( $order_id );\r\n-\t\t\t} elseif ( $order_id instanceof self ) {\r\n-\t\t\t\t$this->set_id( absint( $order_id->get_id() ) );\r\n-\t\t\t} elseif ( ! empty( $order_id->ID ) ) {\r\n-\t\t\t\t$this->set_id( absint( $order_id->ID ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load the order data.\r\n-\t\t * Check if the id is not zero but it's post type does not exists.\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\t$this->_curd->load( $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set order date.\r\n-\t\t *\r\n-\t\t * @param int|string $date\r\n-\t\t *\u002F\r\n-\t\tpublic function set_order_date( $date ): LP_Order {\r\n-\t\t\t$this->set_data_date( 'order_date', $date );\r\n-\r\n-\t\t\treturn $this;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get date of this order.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string|LP_Datetime\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_date( $context = '' ) {\r\n-\t\t\t$date = $this->get_data( 'order_date' );\r\n-\r\n-\t\t\tif ( 'edit' !== $context ) {\r\n-\r\n-\t\t\t\tif ( $date instanceof LP_Datetime ) {\r\n-\t\t\t\t\t$strtime = strtotime( $date->toSql() );\r\n-\r\n-\t\t\t\t\tswitch ( $context ) {\r\n-\t\t\t\t\t\tcase 'd':\r\n-\t\t\t\t\t\t\t$date = date_i18n( 'Y-m-d', $strtime );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'h':\r\n-\t\t\t\t\t\t\t$date = date_i18n( 'H', $strtime );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'm':\r\n-\t\t\t\t\t\t\t$date = date_i18n( 'i', $strtime );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'timestamp':\r\n-\t\t\t\t\t\t\t$date = $strtime;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t$post      = get_post( $this->get_id() );\r\n-\t\t\t\t\t\t\t$m_time    = $post->post_date;\r\n-\t\t\t\t\t\t\t$time      = get_post_time( 'G', true, $post );\r\n-\t\t\t\t\t\t\t$time_diff = time() - $time;\r\n-\r\n-\t\t\t\t\t\t\tif ( $time_diff > 0 && $time_diff \u003C DAY_IN_SECONDS ) {\r\n-\t\t\t\t\t\t\t\t$date = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time ) );\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$date = mysql2date( get_option( 'date_format' ), $m_time );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( ! $date instanceof LP_Datetime ) {\r\n-\t\t\t\t$date = new LP_Datetime( $date );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $date;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set order key\r\n-\t\t *\r\n-\t\t * @param string $order_key\r\n-\t\t *\u002F\r\n-\t\tpublic function set_order_key( $order_key ) {\r\n-\t\t\t$this->_set_data( 'order_key', $order_key );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get order key.\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_key() {\r\n-\t\t\treturn $this->get_data( 'order_key', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get confirm received text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_confirm_order_received_text() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fconfirm-order-received-text', __( 'Thank you. Your order has been received.', 'learnpress' ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get thank you message after the order is placed.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_thankyou_message() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fconfirm-order-received-text', __( 'Thank you. Your order has been received.', 'learnpress' ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Checks to see if current order has status as passed.\r\n-\t\t *\r\n-\t\t * @param string|array $status String or an array of statuses\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function has_status( $status ) {\r\n-\t\t\tsettype( $status, 'array' );\r\n-\t\t\t$has = in_array( $this->get_status(), $status );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fhas-order-status', $has, $status, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Updates order to new status if needed\r\n-\t\t *\r\n-\t\t * @param mixed $new_status\r\n-\t\t * @param bool $manual Is this a manual order status change?.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function update_status( $new_status = 'pending', $manual = false ): bool {\r\n-\t\t\t$result = false;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$this->set_status( $new_status );\r\n-\t\t\t\t$result = $this->save();\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Format order number id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_number(): string {\r\n-\t\t\treturn learn_press_transaction_order_number( $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get status of the order\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_status() {\r\n-\t\t\treturn $this->get_status();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_user_ip_address() {\r\n-\t\t\treturn $this->get_data( 'user_ip_address' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current status of order\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_status() {\r\n-\t\t\treturn $this->get_data( 'status', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get label of lp order status\r\n-\t\t *\r\n-\t\t * @param string $status\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 4.2.0\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_status_label( string $status ): string {\r\n-\t\t\tswitch ( $status ) {\r\n-\t\t\t\tcase LP_ORDER_COMPLETED:\r\n-\t\t\t\t\t$status = __( 'Completed', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_PENDING:\r\n-\t\t\t\t\t$status = __( 'Pending', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_PROCESSING:\r\n-\t\t\t\t\t$status = __( 'Processing', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_CANCELLED:\r\n-\t\t\t\t\t$status = __( 'Cancelled', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_FAILED:\r\n-\t\t\t\t\t$status = __( 'Failed', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_TRASH:\r\n-\t\t\t\t\t$status = __( 'Trash', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'on-hold':\r\n-\t\t\t\t\t$status = __( 'On hold', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'refunded':\r\n-\t\t\t\t\t$status = __( 'Refunded', 'learnpress' );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$status = '';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_string( $status ) ) {\r\n-\t\t\t\t$status = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $status;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get icons of lp order status\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.2.0\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_icons_status(): array {\r\n-\t\t\t$icons = [\r\n-\t\t\t\tLP_ORDER_COMPLETED  => \"\u003Ci class='dashicons dashicons-yes-alt'>\u003C\u002Fi>\",\r\n-\t\t\t\tLP_ORDER_PENDING    => \"\u003Ci class='dashicons dashicons-flag'>\u003C\u002Fi>\",\r\n-\t\t\t\tLP_ORDER_PROCESSING => \"\u003Ci class='dashicons dashicons-clock'>\u003C\u002Fi>\",\r\n-\t\t\t\tLP_ORDER_CANCELLED  => \"\u003Ci class='dashicons dashicons-dismiss'>\u003C\u002Fi>\",\r\n-\t\t\t\tLP_ORDER_FAILED     => \"\u003Ci class='dashicons dashicons-warning'>\u003C\u002Fi>\",\r\n-\t\t\t];\r\n-\r\n-\t\t\treturn apply_filters( 'lp\u002Forder\u002Fstatus\u002Ficons', $icons );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set order status.\r\n-\t\t * $new_status shouldn't have prefix 'lp-'\r\n-\t\t *\r\n-\t\t * @param string $new_status\r\n-\t\t * @param string $note - Optional. Note for changing status.\r\n-\t\t *\r\n-\t\t * @sicne 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function set_status( string $new_status = '', string $note = '' ) {\r\n-\t\t\t\u002F\u002F Ensure status not has prefix 'lp-'.\r\n-\t\t\t$new_status     = str_replace( 'lp-', '', $new_status );\r\n-\t\t\t$valid_statuses = array_values( LP_Order::get_order_statuses() );\r\n-\t\t\tif ( ! in_array( $new_status, $valid_statuses ) && 'trash' !== $new_status ) {\r\n-\t\t\t\t$new_status = LP_ORDER_PENDING;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_set_data( 'status', $new_status );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_order_status_html() {\r\n-\t\t\t$order_status = self::get_status_label( $this->get_status() );\r\n-\t\t\t$status       = ucfirst( $order_status );\r\n-\t\t\t$class        = 'order-status order-status-' . sanitize_title( $status );\r\n-\t\t\t$html         = sprintf( '\u003Cspan class=\"%s\">%s\u003C\u002Fspan>', apply_filters( 'learn_press_order_status_class', $class, $status, $this ), $status );\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_order_status_html', $html, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Mark order as complete\r\n-\t\t *\r\n-\t\t * @param string $transaction_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function payment_complete( $transaction_id = '' ): bool {\r\n-\t\t\tdo_action( 'learn-press\u002Fpayment-pre-complete', $this->get_id() );\r\n-\r\n-\t\t\t$valid_order_statuses = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fvalid-order-statuses-for-payment-complete',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'pending',\r\n-\t\t\t\t\t'processing',\r\n-\t\t\t\t),\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $this->get_id() && $this->has_status( $valid_order_statuses ) ) {\r\n-\r\n-\t\t\t\t$this->update_status( 'completed' );\r\n-\r\n-\t\t\t\tif ( ! empty( $transaction_id ) ) {\r\n-\t\t\t\t\tadd_post_meta( $this->get_id(), '_transaction_id', $transaction_id, true );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fpayment-complete', $this->get_id() );\r\n-\t\t\t} else {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fpayment-complete-order-status-' . $this->get_status(), $this->get_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get checkout order successful url.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_checkout_order_received_url() {\r\n-\t\t\t$received_url = learn_press_get_endpoint_url( 'lp-order-received', $this->get_id(), learn_press_get_page_link( 'checkout' ) );\r\n-\r\n-\t\t\t$received_url = add_query_arg( 'key', $this->get_order_key(), $received_url );\r\n-\r\n-\t\t\t$received_url = apply_filters( 'learn_press_get_checkout_order_received_url', $received_url, $this );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fcheckout-order-received-url', $received_url, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*********************************\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get customer name of the order\r\n-\t\t *\u002F\r\n-\t\tpublic function get_customer_name() {\r\n-\t\t\t$customer_name = '';\r\n-\r\n-\t\t\tif ( 'auto-draft' !== get_post_status( $this->get_id() ) ) {\r\n-\t\t\t\t$user_ids = $this->get_users();\r\n-\t\t\t\tif ( ! empty( $user_ids ) ) {\r\n-\t\t\t\t\t$customer_name = array();\r\n-\t\t\t\t\tforeach ( $user_ids as $uid ) {\r\n-\t\t\t\t\t\t$customer = learn_press_get_user( $uid );\r\n-\t\t\t\t\t\tif ( $customer && $customer->is_exists() ) {\r\n-\t\t\t\t\t\t\tif ( $customer->get_data( 'display_name' ) ) {\r\n-\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'display_name' );\r\n-\t\t\t\t\t\t\t} elseif ( $customer->get_data( 'user_nicename' ) ) {\r\n-\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'user_nicename' );\r\n-\t\t\t\t\t\t\t} elseif ( $customer->get_data( 'user_login' ) ) {\r\n-\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'user_login' );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$customer_name[] = $this->get_guest_customer_name();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$customer_name = join( ', ', $customer_name );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $customer_name ) {\r\n-\t\t\t\t$customer_name = $this->get_guest_customer_name();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $customer_name;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_guest_customer_name() {\r\n-\t\t\t$checkout_email = $this->get_checkout_email();\r\n-\t\t\tif ( $checkout_email ) {\r\n-\t\t\t\t$customer_name = sprintf( __( '%s (Guest)', 'learnpress' ), $checkout_email );\r\n-\t\t\t} else {\r\n-\t\t\t\t$customer_name = sprintf( __( '(Guest)', 'learnpress' ), $checkout_email );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Forder\u002Fguest-customer-name', $customer_name );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*public function customer_exists() {\r\n-\t\t\treturn false !== get_userdata( $this->get_data( 'user_id' ) );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get items of the order only to show.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_items() {\r\n-\t\t\t$items = $this->_curd->read_items( $this );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Forder-items', $items );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all items of the order.\r\n-\t\t * Only use for add\u002Fremove items to learn (learn_press_user_items) table.\r\n-\t\t * Where call this function, must be careful, must set_time_limit( 0 );.\r\n-\t\t *\r\n-\t\t * @return array|null\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 4.2.7.2\r\n-\t\t *\u002F\r\n-\t\tpublic function get_all_items() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$lp_order_items    = LP_Database::getInstance();\r\n-\t\t\t$table_order_items = $lp_order_items->tb_lp_order_items;\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"SELECT order_item_id, order_item_name, item_id, item_type\r\n-\t\t\t\tFrom $table_order_items\r\n-\t\t\t\tWHERE order_id = %d\",\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $wpdb->get_results( $query, ARRAY_A );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get items of the order by filter\r\n-\t\t *\r\n-\t\t * @param array $filter\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @author tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_items_filter( $filter = array() ) {\r\n-\t\t\t$items = $this->_curd->read_items_filter( $this, $filter );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Forder-items', $items );\r\n-\t\t}\r\n-\r\n-\t\tpublic function is_child() {\r\n-\t\t\treturn $this->get_parent_id();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_parent() {\r\n-\t\t\treturn $this->get_parent_id() ? learn_press_get_order( $this->get_parent_id() ) : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get list of course ids from order.\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t * @editor tungnx\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_ids() {\r\n-\t\t\t$items = $this->get_all_items();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\t$course_ids = array();\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\tif ( $item['item_type'] === LP_COURSE_CPT ) {\r\n-\t\t\t\t\t\t$course_ids[] = (int) $item['item_id'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $course_ids;\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Comment by tungnx. Because it will error if item didn't have key 'course_id'.\r\n-\t\t\t\t * Ex: case buy certificate, will not have that key\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t\u002F\u002Freturn @wp_list_pluck( $items, 'course_id' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check is order of Guest (user not login)\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_guest(): bool {\r\n-\t\t\treturn ! get_user_by( 'ID', $this->get_user_id() );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_item_meta( &$item ) {\r\n-\t\t\t$metas = get_metadata( 'learnpress_order_item', $item['id'] );\r\n-\t\t\tif ( $metas ) {\r\n-\t\t\t\tforeach ( $metas as $k => $v ) {\r\n-\t\t\t\t\t$item[ preg_replace( '!^_!', '', $k ) ] = LP_Helper::maybe_unserialize( $v[0] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove all items from an order\r\n-\t\t *\u002F\r\n-\t\tpublic function remove_order_items() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$wpdb->query(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM itemmeta\r\n-\t\t\t\tUSING $wpdb->learnpress_order_itemmeta itemmeta\r\n-\t\t\t\tINNER JOIN $wpdb->learnpress_order_items items\r\n-\t\t\t\tWHERE itemmeta.learnpress_order_item_id = items.order_item_id\r\n-\t\t\t\tAND items.order_id = %d\",\r\n-\t\t\t\t\t$this->get_id()\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$wpdb->query(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM {$wpdb->learnpress_order_items}\r\n-\t\t\t\tWHERE order_id = %d\",\r\n-\t\t\t\t\t$this->get_id()\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->learnpress_order_itemmeta} AUTO_INCREMENT = %d\", 1 ) );\r\n-\t\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->learnpress_order_items} AUTO_INCREMENT = %d\", 1 ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add a new item to order.\r\n-\t\t *\r\n-\t\t * @param array|int $item\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t * @throws Exception\r\n-\t\t * @since 1.0.0\r\n-\t\t * @version 4.2.5\r\n-\t\t *\u002F\r\n-\t\tpublic function add_item( $item ): int {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$order_item_id = 0;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( is_numeric( $item ) ) {\r\n-\t\t\t\t\t$item = array(\r\n-\t\t\t\t\t\t'item_id'         => absint( $item ),\r\n-\t\t\t\t\t\t'order_item_name' => get_the_title( $item ),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item_type = $item['item_type'] ?? get_post_type( $item['item_id'] );\r\n-\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\r\n-\t\t\t\t\treturn false;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item = wp_parse_args(\r\n-\t\t\t\t\t$item,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'item_id'         => 0,\r\n-\t\t\t\t\t\t'item_type'       => '',\r\n-\t\t\t\t\t\t'order_item_name' => '',\r\n-\t\t\t\t\t\t'quantity'        => 1,\r\n-\t\t\t\t\t\t'subtotal'        => 0,\r\n-\t\t\t\t\t\t'total'           => 0,\r\n-\t\t\t\t\t\t'meta'            => array(),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\t\tcase LP_COURSE_CPT:\r\n-\t\t\t\t\t\t$course                     = learn_press_get_course( $item['item_id'] );\r\n-\t\t\t\t\t\t$item['subtotal']           = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Fsubtotal', $course->get_price() * $item['quantity'], $course, $item, $this );\r\n-\t\t\t\t\t\t$item['total']              = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Ftotal', $course->get_price() * $item['quantity'], $course, $item, $this );\r\n-\t\t\t\t\t\t$item['order_item_name']    = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Ftitle', get_post_field( 'post_title', $item['item_id'], 'raw' ), $course, $item, $this );\r\n-\t\t\t\t\t\t$item['meta']['_course_id'] = $item['item_id'];\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t$item = apply_filters( 'learnpress\u002Forder\u002Fadd-item\u002Fitem_type_' . $item_type, $item );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Insert new order item\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_order_items,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'order_item_name' => $item['order_item_name'],\r\n-\t\t\t\t\t\t'order_id'        => $this->get_id(),\r\n-\t\t\t\t\t\t'item_id'         => $item['item_id'],\r\n-\t\t\t\t\t\t'item_type'       => $item_type,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%d',\r\n-\t\t\t\t\t\t'%s',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t\t$order_item_id = absint( $wpdb->insert_id );\r\n-\t\t\t\t\u002F\u002F Clear cache\r\n-\t\t\t\t$key = \"order\u002F{$this->get_id()}\u002F{$this->get_status()}\u002Fitems\";\r\n-\t\t\t\tLP_Cache::cache_load_first( 'clear', $key );\r\n-\t\t\t\t\u002F\u002F End insert new order item\r\n-\r\n-\t\t\t\t\u002F\u002F Add learnpress_order_itemmeta\r\n-\t\t\t\t$item['meta']['_quantity'] = $item['quantity'] ?? 1;\r\n-\t\t\t\t$item['meta']['_subtotal'] = $item['subtotal'] ?? 0;\r\n-\t\t\t\t$item['meta']['_total']    = $item['total'] ?? 0;\r\n-\r\n-\t\t\t\tif ( is_array( $item['meta'] ) ) {\r\n-\t\t\t\t\tforeach ( $item['meta'] as $k => $v ) {\r\n-\t\t\t\t\t\tlearn_press_add_order_item_meta( $order_item_id, $k, $v );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fadded-order-item-data', $order_item_id, $item, $this->get_id() );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $order_item_id;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set total\r\n-\t\t *\r\n-\t\t * @param int|float $total\r\n-\t\t *\u002F\r\n-\t\tpublic function set_total( $total = 0 ) {\r\n-\t\t\t$this->_set_data( 'total', $total );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get total\r\n-\t\t *\r\n-\t\t * @return int|float\r\n-\t\t *\u002F\r\n-\t\tpublic function get_total() {\r\n-\t\t\treturn $this->get_data( 'total', 0 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param float|int $subtotal\r\n-\t\t *\u002F\r\n-\t\tpublic function set_subtotal( $subtotal = 0 ) {\r\n-\t\t\t$this->_set_data( 'subtotal', $subtotal );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get subtotal\r\n-\t\t *\r\n-\t\t * @return float\r\n-\t\t *\u002F\r\n-\t\tpublic function get_subtotal() {\r\n-\t\t\treturn $this->get_data( 'subtotal' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove an item from database and it's data.\r\n-\t\t *\r\n-\t\t * @param $order_item_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function remove_item( $order_item_id ): bool {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$item_id       = absint( $order_item_id );\r\n-\t\t\t$order_item_id = absint( $order_item_id );\r\n-\r\n-\t\t\tif ( ! $item_id ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn_press_before_delete_order_item', $item_id );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-delete-order-item', $item_id, $this->get_id() );\r\n-\r\n-\t\t\t$filter                      = new OrderItemsFilter();\r\n-\t\t\t$filter->order_item_id       = $order_item_id;\r\n-\t\t\t$filter->return_string_query = true;\r\n-\t\t\t$filter->run_query_count     = false;\r\n-\t\t\t$order_items_db              = LPOrderItemsDB::getInstance();\r\n-\t\t\t$order_items_db->get_query_single_row( $filter );\r\n-\t\t\t$query_single_row = $order_items_db->get_items( $filter );\r\n-\t\t\t$itemObj          = $order_items_db->wpdb->get_row( $query_single_row );\r\n-\r\n-\t\t\tif ( $itemObj && $itemObj->item_type === LP_COURSE_CPT ) {\r\n-\t\t\t\t$course_id = $itemObj->item_id;\r\n-\t\t\t\t$user_ids  = $this->get_user_id();\r\n-\t\t\t\tif ( is_array( $user_ids ) ) {\r\n-\t\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t\t\u002F\u002F Delete course item on learnpress_user_items if exists\r\n-\t\t\t\t\t\t$userCourseItem = UserItemModel::find_user_item(\r\n-\t\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t\t\t$course_id,\r\n-\t\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t\t\tLP_ORDER_CPT,\r\n-\t\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tif ( $userCourseItem instanceof UserItemModel ) {\r\n-\t\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userCourseItem );\r\n-\t\t\t\t\t\t\t$userCourseModel->delete();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Delete course item on learnpress_user_items if exists\r\n-\t\t\t\t\t$userCourseItem = UserItemModel::find_user_item(\r\n-\t\t\t\t\t\t$user_ids,\r\n-\t\t\t\t\t\t$course_id,\r\n-\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t\tLP_ORDER_CPT,\r\n-\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( $userCourseItem instanceof UserItemModel ) {\r\n-\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userCourseItem );\r\n-\t\t\t\t\t\t$userCourseModel->delete();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$wpdb->query( $wpdb->prepare( \"DELETE FROM {$wpdb->prefix}learnpress_order_items WHERE order_item_id = %d\", $item_id ) );\r\n-\t\t\t$wpdb->query( $wpdb->prepare( \"DELETE FROM {$wpdb->prefix}learnpress_order_itemmeta WHERE learnpress_order_item_id = %d\", $item_id ) );\r\n-\r\n-\t\t\t\u002F\u002FClear cache\r\n-\t\t\t$key = \"order\u002F{$this->get_id()}\u002F{$this->get_status()}\u002Fitems\";\r\n-\t\t\tLP_Cache::cache_load_first( 'clear', $key );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fdeleted-order-item', $item_id, $this->get_id() );\r\n-\r\n-\t\t\tdo_action( 'learn_press_delete_order_item', $item_id );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add multiple items.\r\n-\t\t *\r\n-\t\t * @param array $items\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function add_items( $items ) {\r\n-\t\t\tsettype( $items, 'array' );\r\n-\t\t\t$item_ids = array();\r\n-\t\t\ttry {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\t$item_id = $this->add_item( $item );\r\n-\t\t\t\t\tif ( $item_id ) {\r\n-\t\t\t\t\t\t$item_ids[] = $item_id;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $item_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $field\r\n-\t\t *\r\n-\t\t * @return array|bool|int|LP_User|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user( $field = '' ) {\r\n-\r\n-\t\t\t$users = $this->get_users();\r\n-\t\t\t$uid   = reset( $users );\r\n-\r\n-\t\t\t$user = learn_press_get_user( $uid );\r\n-\t\t\tif ( false === $user ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( strtolower( $field ) == 'id' ) {\r\n-\t\t\t\treturn $user->get_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $field && $user ) {\r\n-\t\t\t\treturn $user->get_data( $field );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $user;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user id in array.\r\n-\t\t * user_id = 0 -> User type Guest\r\n-\t\t * @return int[]\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_users(): array {\r\n-\t\t\t$users = $this->get_user_id();\r\n-\t\t\tif ( $users !== - 1 ) {\r\n-\t\t\t\tsettype( $users, 'array' );\r\n-\r\n-\t\t\t\t$users = array_map(\r\n-\t\t\t\t\tfunction ( $user ) {\r\n-\t\t\t\t\t\treturn absint( $user );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t$users\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$users = array_unique( $users );\r\n-\t\t\t} else {\r\n-\t\t\t\t$users = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $users;\r\n-\t\t}\r\n-\r\n-\t\tpublic function dropdown_users() {\r\n-\t\t\t$order_users = $this->get_users();\r\n-\t\t\t$users       = get_users( array() );\r\n-\t\t\techo '\u003Cselect name=\"order-customer[]\" id=\"order-customer\" multiple=\"multiple\">';\r\n-\t\t\tforeach ( (array) $users as $user ) {\r\n-\t\t\t\t\u002F\u002F $user->get_id() = (int) $user->get_id();\r\n-\t\t\t\tif ( in_array( $user->get_id(), $order_users ) ) {\r\n-\t\t\t\t\t$found_selected = true;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$found_selected = false;\r\n-\t\t\t\t}\r\n-\t\t\t\techo sprintf( '\u003Coption value=\"%d\" %s>%s\u003C\u002Foption>', esc_attr( $user->get_id() ), selected( $found_selected, true, false ), esc_html( $user->user_login ) );\r\n-\t\t\t}\r\n-\t\t\techo '\u003C\u002Fselect>';\r\n-\t\t}\r\n-\r\n-\r\n-\t\tpublic function get_checkout_payment_url() {\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_formatted_order_subtotal() {\r\n-\t\t\t$currency_symbol = learn_press_get_currency_symbol( $this->get_currency() );\r\n-\r\n-\t\t\treturn learn_press_format_price( $this->get_subtotal(), $currency_symbol );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_formatted_order_total() {\r\n-\t\t\t$currency_symbol = learn_press_get_currency_symbol( $this->get_currency() );\r\n-\r\n-\t\t\treturn learn_press_format_price( $this->get_total(), $currency_symbol );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_currency() {\r\n-\t\t\treturn $this->get_data( 'currency' ) ? $this->get_data( 'currency' ) : learn_press_get_currency();\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_currency( $value ) {\r\n-\t\t\t$this->_set_data( 'currency', $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get payment method title.\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_payment_method_title() {\r\n-\t\t\treturn esc_html( $this->get_data( 'payment_method_title', '' ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_view_order_url() {\r\n-\t\t\tglobal $wp_query;\r\n-\r\n-\t\t\t$view_order_url      = learn_press_get_endpoint_url( 'view-order', $this->get_id(), learn_press_get_page_link( 'profile' ) );\r\n-\t\t\t$user                = learn_press_get_current_user();\r\n-\t\t\t$view_order_endpoint = LP_Settings::instance()->get( 'profile_endpoints.order-details' );\r\n-\r\n-\t\t\tif ( ! $view_order_endpoint ) {\r\n-\t\t\t\t$view_order_endpoint = 'order-details';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$view_order_endpoint = urlencode( $view_order_endpoint );\r\n-\t\t\tif ( get_option( 'permalink_structure' ) ) {\r\n-\t\t\t\t$view_order_url = learn_press_get_page_link( 'profile' ) . $user->get_data( 'user_login' ) . '\u002F' . $view_order_endpoint . '\u002F' . $this->get_id() . '\u002F';\r\n-\t\t\t} else {\r\n-\t\t\t\t$args         = array(\r\n-\t\t\t\t\t'user' => $user->get_data( 'user_login' ),\r\n-\t\t\t\t);\r\n-\t\t\t\t$args['view'] = $view_order_endpoint;\r\n-\r\n-\t\t\t\tif ( $view_order_endpoint ) {\r\n-\t\t\t\t\t$args['id'] = $this->get_id();\r\n-\t\t\t\t}\r\n-\t\t\t\t$view_order_url = add_query_arg(\r\n-\t\t\t\t\t$args,\r\n-\t\t\t\t\tlearn_press_get_page_link( 'profile' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_view_order_url', $view_order_url, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get cancel url if it's status is pending.\r\n-\t\t *\r\n-\t\t * @param bool $force\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_cancel_order_url( $force = false ) {\r\n-\r\n-\t\t\t$url = false;\r\n-\t\t\tif ( $this->has_status( 'pending' ) ) {\r\n-\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t\t$url  = learn_press_user_profile_link( $user->get_id(), LP_Settings::instance()->get( 'profile_endpoints.orders' ) );\r\n-\t\t\t\tif ( ! $force ) {\r\n-\t\t\t\t\t$url = esc_url_raw( add_query_arg( 'cancel-order', $this->get_id(), $url ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$url = esc_url_raw( add_query_arg( 'cancelled-order', $this->get_id(), $url ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$url = wp_nonce_url( $url, 'cancel-order', 'lp-nonce' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Forder-cancel-url', $url, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get profile order's actions.\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_order_actions() {\r\n-\t\t\t$actions = array(\r\n-\t\t\t\t'view' => array(\r\n-\t\t\t\t\t'url'  => $this->get_view_order_url(),\r\n-\t\t\t\t\t'text' => __( 'View', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\t$cancel_url = $this->get_cancel_order_url();\r\n-\t\t\tif ( $cancel_url ) {\r\n-\t\t\t\t$actions['cancel'] = array(\r\n-\t\t\t\t\t'url'  => $this->get_cancel_order_url(),\r\n-\t\t\t\t\t'text' => __( 'Cancel', 'learnpress' ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$actions = apply_filters( 'learn-press\u002Fprofile-order-actions', $actions, $this->get_id() );\r\n-\r\n-\t\t\treturn $actions;\r\n-\t\t}\r\n-\r\n-\t\tpublic function add_note( $note = null ) {\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t$user                 = get_user_by( 'id', get_current_user_id() );\r\n-\t\t\t\t$comment_author       = $user->display_name;\r\n-\t\t\t\t$comment_author_email = $user->user_email;\r\n-\t\t\t\t$comment_post_ID      = $this->get_id();\r\n-\t\t\t\t$comment_author_url   = '';\r\n-\t\t\t\t$comment_content      = $note;\r\n-\t\t\t\t$comment_agent        = 'LearnPress';\r\n-\t\t\t\t$comment_type         = 'lp_order_note';\r\n-\t\t\t\t$comment_parent       = 0;\r\n-\t\t\t\t$comment_approved     = 1;\r\n-\r\n-\t\t\t\t$commentdata = apply_filters(\r\n-\t\t\t\t\t'learn_press_new_order_note_data',\r\n-\t\t\t\t\tcompact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_agent', 'comment_type', 'comment_parent', 'comment_approved' ),\r\n-\t\t\t\t\t$this->get_id()\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$comment_id = wp_insert_comment( $commentdata );\r\n-\r\n-\t\t\t\treturn $comment_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user_name\r\n-\t\t *\r\n-\t\t * @param int $user_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_name( int $user_id = 0 ): string {\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\tif ( $user && ! $user instanceof LP_User_Guest ) {\r\n-\t\t\t\t$user_name = $user->get_display_name();\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_name = $this->get_checkout_email();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Forder\u002Fuser-name', sprintf( _x( '%1$s', 'full name', 'learnpress' ), $user_name ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check to see if this order is for multi users\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 2.1.5\r\n-\t\t *\u002F\r\n-\t\tpublic function is_multi_users(): bool {\r\n-\t\t\treturn is_array( $this->get_user_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email of user has bought this order.\r\n-\t\t * In case this order is for multi users return an array with multi email addresses.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 2.1.5\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_data(): array {\r\n-\t\t\t$data = array();\r\n-\r\n-\t\t\t$user_ids = $this->get_users();\r\n-\t\t\tif ( ! empty( $user_ids ) ) {\r\n-\t\t\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t\t\t$user = learn_press_get_user( $user_id );\r\n-\t\t\t\t\tif ( $user && $user->is_exists() ) {\r\n-\t\t\t\t\t\t$data[ $user_id ] = $user->get_data(\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'id',\r\n-\t\t\t\t\t\t\t\t'email',\r\n-\t\t\t\t\t\t\t\t'user_login',\r\n-\t\t\t\t\t\t\t\t'description',\r\n-\t\t\t\t\t\t\t\t'first_name',\r\n-\t\t\t\t\t\t\t\t'last_name',\r\n-\t\t\t\t\t\t\t\t'nickname',\r\n-\t\t\t\t\t\t\t\t'display_name',\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email's user by user_id\r\n-\t\t *\r\n-\t\t * @param int $user_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.3\r\n-\t\t * @version 1.0.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_email( int $user_id = 0 ): string {\r\n-\t\t\tif ( $user_id == 0 ) {\r\n-\t\t\t\t$user_id = (int) $this->get_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\t$email = $userModel->get_email();\r\n-\t\t\t} else {\r\n-\t\t\t\t$email = $this->get_checkout_email();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $email;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Order title\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_title( $context = '' ) {\r\n-\t\t\treturn $this->get_data( 'order_title', __( 'Order on', 'learnpress' ) . ' ' . current_time( 'l jS F Y h:i:s A' ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_parent_id() {\r\n-\t\t\treturn $this->get_data( 'parent_id', 0 );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_parent_id( $parent_id ) {\r\n-\t\t\t$this->_set_data( 'parent_id', $parent_id );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_user_id( $user_id ) {\r\n-\t\t\t$this->_set_data( 'user_id', $user_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set 1 for is user guest\r\n-\t\t *\r\n-\t\t * @param int $user_type_guest\r\n-\t\t *\u002F\r\n-\t\tpublic function set_user_type_guest( int $user_type_guest ) {\r\n-\t\t\t$this->_set_data( 'user_type_guest', $user_type_guest );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user's ids of order.\r\n-\t\t *\r\n-\t\t * @return array|int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_id() {\r\n-\t\t\treturn $this->get_data( 'user_id', - 1 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get date modified of order.\r\n-\t\t *\r\n-\t\t * @return LP_Datetime\r\n-\t\t *\u002F\r\n-\t\tpublic function get_date_modified() {\r\n-\t\t\treturn $this->get_data( 'date_modified' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set date modified of order.\r\n-\t\t *\r\n-\t\t * @param mixed $date\r\n-\t\t *\u002F\r\n-\t\tpublic function set_date_modified( $date ) {\r\n-\t\t\t$this->_set_data( 'date_modified', $date );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set method for creating the order, such as: checkout\r\n-\t\t *\r\n-\t\t * @param string $created_via\r\n-\t\t *\u002F\r\n-\t\tpublic function set_created_via( $created_via ) {\r\n-\t\t\t$this->_set_data( 'created_via', $created_via );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get method which order is created, such as: checkout\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_created_via(): string {\r\n-\t\t\treturn $this->get_data( 'created_via', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save order data.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function save() {\r\n-\t\t\t$old_status = '';\r\n-\r\n-\t\t\tif ( $this->get_id() ) {\r\n-\t\t\t\t$old_status_post = get_post_status( $this->get_id() );\r\n-\t\t\t\tif ( ! in_array( $old_status_post, [ 'trash', 'auto-draft' ] ) ) {\r\n-\t\t\t\t\t$old_status = str_replace( 'lp-', '', $old_status_post );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$old_status = $old_status_post;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$return = $this->_curd->update( $this );\r\n-\t\t\t} else {\r\n-\t\t\t\t$return = $this->_curd->create( $this );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$new_status_post = get_post_status( $this->get_id() );\r\n-\t\t\tif ( ! in_array( $new_status_post, [ 'trash', 'auto-draft' ] ) ) {\r\n-\t\t\t\t$new_status = str_replace( 'lp-', '', $new_status_post );\r\n-\t\t\t} else {\r\n-\t\t\t\t$new_status = $new_status_post;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order_id = $this->get_id();\r\n-\r\n-\t\t\tif ( $new_status !== $old_status ) {\r\n-\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-changed', $order_id, $old_status, $new_status );\r\n-\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-' . $new_status, $order_id, $old_status );\r\n-\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-' . $old_status . '-to-' . $new_status, $order_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F$this->_save_status();\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get an instance of LP_Order by post ID or WP_Post object\r\n-\t\t *\r\n-\t\t * @param $order\r\n-\t\t * @param $force\r\n-\t\t *\r\n-\t\t * @return LP_Order\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance( $order, $force = true ) {\r\n-\t\t\t\u002F\u002F learn_press_deprecated_function( 'new LP_Order', '3.0', 'learn_press_get_order' );\r\n-\r\n-\t\t\treturn learn_press_get_order( $order );\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Getter\u002FSetter  **\u002F\r\n-\r\n-\t\tpublic function set_customer_message( $message ) {\r\n-\t\t\t$this->_set_data( 'customer_message', $message );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_customer_note( $note ) {\r\n-\t\t\t$this->_set_data( 'customer_note', $note );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_customer_note() {\r\n-\t\t\treturn $this->get_data( 'customer_note' ) . '';\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_user_ip_address( $value ) {\r\n-\t\t\t$this->_set_data( 'user_ip_address', $value );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_user_agent( $value ) {\r\n-\t\t\t$this->_set_data( 'user_agent', $value );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_user_agent() {\r\n-\t\t\treturn $this->get_data( 'user_agent' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_checkout_email( $email ) {\r\n-\t\t\t$this->_set_data( 'checkout_email', $email );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email checkout for case Guest\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_checkout_email(): string {\r\n-\t\t\treturn $this->get_data( 'checkout_email', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Short function to check order is completed.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_completed(): bool {\r\n-\t\t\treturn $this->get_status() === LP_ORDER_COMPLETED;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check Order is created manual.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 4.1.3\r\n-\t\t * @author tungnx\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_manual(): bool {\r\n-\t\t\treturn $this->get_created_via() === LP_ORDER_CREATED_VIA_MANUAL;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check can delete lp_user_items old\r\n-\t\t *\r\n-\t\t * @param LP_Course $course\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @throws Exception\r\n-\t\t * @author tungnx\r\n-\t\t * @since 4.1.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function check_can_delete_item_old( LP_Course $course ): bool {\r\n-\t\t\t$can_delete = false;\r\n-\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * For case user buy on frontend (not LP Order manual)\r\n-\t\t\t * And course enable repurchase and repurchase_type is keep\r\n-\t\t\t *\u002F\r\n-\t\t\t$allow_repurchase_type = '';\r\n-\r\n-\t\t\t$filter          = new LP_User_Items_Filter();\r\n-\t\t\t$filter->user_id = get_current_user_id();\r\n-\t\t\t$filter->item_id = $course->get_id();\r\n-\t\t\t$user_course     = $lp_user_items_db->get_last_user_course( $filter );\r\n-\r\n-\t\t\tif ( $user_course && isset( $user_course->user_item_id ) ) {\r\n-\t\t\t\t$latest_user_item_id = $user_course->user_item_id;\r\n-\r\n-\t\t\t\t\u002F** Get allow_repurchase_type for reset or update. Add in: rest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-courses-controller.php: purchase_course *\u002F\r\n-\t\t\t\t$allow_repurchase_type = learn_press_get_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Course is free\r\n-\t\t\t * Or not allow repurchase\r\n-\t\t\t * Or repurchase not type 'Keep'\r\n-\t\t\t * And else\r\n-\t\t\t * Will deleted lp_user_items old\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( $course->is_free() || empty( $allow_repurchase_type ) || ! $course->allow_repurchase() || $allow_repurchase_type != 'keep' ) {\r\n-\t\t\t\t$can_delete = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learnpress\u002Forder\u002Fcan_delete_old_item', $can_delete, $course );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get list status of LP Order\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_order_statuses(): array {\r\n-\t\t\t$order_statuses = [\r\n-\t\t\t\tLP_ORDER_COMPLETED_DB  => LP_ORDER_COMPLETED,\r\n-\t\t\t\tLP_ORDER_PROCESSING_DB => LP_ORDER_PROCESSING,\r\n-\t\t\t\tLP_ORDER_PENDING_DB    => LP_ORDER_PENDING,\r\n-\t\t\t\tLP_ORDER_CANCELLED_DB  => LP_ORDER_CANCELLED,\r\n-\t\t\t\tLP_ORDER_FAILED_DB     => LP_ORDER_FAILED,\r\n-\t\t\t];\r\n-\r\n-\t\t\treturn apply_filters( 'lp\u002Forder\u002Fstatuses', $order_statuses );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query list orders.\r\n-\t\t *\r\n-\t\t * @param PostFilter $post_filter\r\n-\t\t * @param array $param [ 'author' => int, 'post_status' => string|array, 's' => string, 'm' => string, 'posts_per_page' => int, 'paged' => int, 'orderby' => string, 'order' => string ]\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @throws Exception\r\n-\t\t * @since 4.3.2.8\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function handle_params_query_list_orders( PostFilter &$post_filter, array $param = [] ) {\r\n-\t\t\t$post_db       = PostDB::getInstance();\r\n-\t\t\t$user_of_order = absint( $param['author'] ?? 0 );\r\n-\t\t\t$status        = $param['post_status'] ?? '';\r\n-\t\t\t$key           = $param['s'] ?? '';\r\n-\t\t\t$month         = $param['m'] ?? '';\r\n-\t\t\t$limit         = $param['posts_per_page'] ?? 20;\r\n-\t\t\t$paged         = $param['paged'] ?? 1;\r\n-\r\n-\t\t\t$order_by = $param['orderby'] ?? 'date';\r\n-\t\t\tif ( empty( $order_by ) ) {\r\n-\t\t\t\t$order_by = 'ID';\r\n-\t\t\t} else {\r\n-\t\t\t\tswitch ( $order_by ) {\r\n-\t\t\t\t\tcase 'date':\r\n-\t\t\t\t\t\t$order_by = 'post_date';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'title':\r\n-\t\t\t\t\t\t$order_by = 'ID';\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$order = $param['order'] ?? 'DESC';\r\n-\t\t\t\u002F\u002F End convert params\r\n-\r\n-\t\t\tif ( $order_by === 'order_total' ) {\r\n-\t\t\t\t$post_filter->join[]   = \"INNER JOIN {$post_db->tb_postmeta} pm2 ON p.ID = pm2.post_id AND pm2.meta_key = '_order_total'\";\r\n-\t\t\t\t$post_filter->where[]  = 'AND CAST(pm2.meta_value AS UNSIGNED)';\r\n-\t\t\t\t$post_filter->order_by = 'pm2.meta_value';\r\n-\t\t\t} else {\r\n-\t\t\t\t$post_filter->order_by = $order_by;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $key ) ) {\r\n-\t\t\t\t$pattern          = '\u002F^#\\d+$\u002F';\r\n-\t\t\t\t$is_order_id_sure = false;\r\n-\t\t\t\tif ( preg_match( $pattern, $key ) ) {\r\n-\t\t\t\t\t$is_order_id_sure = true;\r\n-\t\t\t\t\t$key              = str_replace( '#', '', $key );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$pattern2 = '#^0+.*\\d+$#';\r\n-\t\t\t\tif ( preg_match( $pattern2, $key ) ) {\r\n-\t\t\t\t\t$key = (int) $key;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$key = trim( $key );\r\n-\r\n-\t\t\t\tif ( $is_order_id_sure ) {\r\n-\t\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare( 'AND p.ID = %d', $key );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$post_filter->join[]  = \"INNER JOIN {$post_db->tb_lp_order_items} lpori ON p.ID = lpori.order_id\";\r\n-\t\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare(\r\n-\t\t\t\t\t\t'AND (p.ID = %d OR lpori.order_item_name like %s)',\r\n-\t\t\t\t\t\t$key,\r\n-\t\t\t\t\t\t'%' . $key . '%'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $month ) ) {\r\n-\t\t\t\t$year                 = substr( $month, 0, 4 );\r\n-\t\t\t\t$post_filter->where[] = \"AND YEAR(p.post_date) = $year\";\r\n-\t\t\t\tif ( strlen( $month ) > 5 ) {\r\n-\t\t\t\t\t$mon                  = substr( $month, 4, 2 );\r\n-\t\t\t\t\t$post_filter->where[] = \"AND MONTH(p.post_date) = $mon\";\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post_filter->order = $order;\r\n-\t\t\t$post_filter->limit = $limit;\r\n-\t\t\t$post_filter->page  = $paged;\r\n-\r\n-\t\t\tif ( ! empty( $user_of_order ) ) {\r\n-\t\t\t\t$user_id              = absint( $user_of_order );\r\n-\t\t\t\t$post_filter->join[]  = \"INNER JOIN {$post_db->tb_postmeta} pm1 ON p.ID = pm1.post_id AND pm1.meta_key = '_user_id'\";\r\n-\t\t\t\t$post_filter->where[] = \"AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id )\";\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $status ) && $status !== 'all' ) {\r\n-\t\t\t\t$post_filter->post_status = (array) $status;\r\n-\t\t\t} else {\r\n-\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare( 'AND p.post_status != %s', LP_ORDER_TRASH );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Order\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 4.0.1\n+ *\u002F\n+\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Order' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Order\n+\t *\u002F\n+\tclass LP_Order extends LP_Abstract_Post_Data {\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_post_type = LP_ORDER_CPT;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array(\n+\t\t\t'user_id'          => '',\n+\t\t\t'order_date'       => '',\n+\t\t\t'date_modified'    => '',\n+\t\t\t'customer_message' => '',\n+\t\t\t'customer_note'    => '',\n+\t\t\t'status'           => '',\n+\t\t\t'order_key'        => '',\n+\t\t\t'total'            => 0,\n+\t\t\t'subtotal'         => 0,\n+\t\t\t'created_via'      => '',\n+\t\t\t'checkout_email'   => '',\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_meta_keys = array(\n+\t\t\t'_user_id'              => 'user',\n+\t\t\t'_order_currency'       => 'currency',\n+\t\t\t'_order_subtotal'       => 'subtotal',\n+\t\t\t'_order_total'          => 'total',\n+\t\t\t'_payment_method'       => 'payment_method',\n+\t\t\t'_payment_method_title' => 'payment_method_title',\n+\t\t\t'_order_version'        => 'order_version',\n+\t\t\t'_edit_last'            => '',\n+\t\t\t'_edit_lock'            => '',\n+\t\t\t'_prices_include_tax'   => '',\n+\t\t\t'_order_key'            => '',\n+\t\t\t'_user_ip'              => '',\n+\t\t\t'_checkout_email'       => '',\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Store order status in transactions.\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_status = array();\n+\n+\t\t\u002F**\n+\t\t * LP_Order constructor.\n+\t\t *\n+\t\t * @param bool $order_id\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $order_id = false ) {\n+\t\t\t$this->_curd = new LP_Order_CURD();\n+\t\t\tif ( is_numeric( $order_id ) && $order_id > 0 ) {\n+\t\t\t\t$this->set_id( $order_id );\n+\t\t\t} elseif ( $order_id instanceof self ) {\n+\t\t\t\t$this->set_id( absint( $order_id->get_id() ) );\n+\t\t\t} elseif ( ! empty( $order_id->ID ) ) {\n+\t\t\t\t$this->set_id( absint( $order_id->ID ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load the order data.\n+\t\t * Check if the id is not zero but it's post type does not exists.\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\t$this->_curd->load( $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set order date.\n+\t\t *\n+\t\t * @param int|string $date\n+\t\t *\u002F\n+\t\tpublic function set_order_date( $date ): LP_Order {\n+\t\t\t$this->set_data_date( 'order_date', $date );\n+\n+\t\t\treturn $this;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get date of this order.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string|LP_Datetime\n+\t\t *\u002F\n+\t\tpublic function get_order_date( $context = '' ) {\n+\t\t\t$date = $this->get_data( 'order_date' );\n+\n+\t\t\tif ( 'edit' !== $context ) {\n+\n+\t\t\t\tif ( $date instanceof LP_Datetime ) {\n+\t\t\t\t\t$strtime = strtotime( $date->toSql() );\n+\n+\t\t\t\t\tswitch ( $context ) {\n+\t\t\t\t\t\tcase 'd':\n+\t\t\t\t\t\t\t$date = date_i18n( 'Y-m-d', $strtime );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'h':\n+\t\t\t\t\t\t\t$date = date_i18n( 'H', $strtime );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'm':\n+\t\t\t\t\t\t\t$date = date_i18n( 'i', $strtime );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'timestamp':\n+\t\t\t\t\t\t\t$date = $strtime;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t$post      = get_post( $this->get_id() );\n+\t\t\t\t\t\t\t$m_time    = $post->post_date;\n+\t\t\t\t\t\t\t$time      = get_post_time( 'G', true, $post );\n+\t\t\t\t\t\t\t$time_diff = time() - $time;\n+\n+\t\t\t\t\t\t\tif ( $time_diff > 0 && $time_diff \u003C DAY_IN_SECONDS ) {\n+\t\t\t\t\t\t\t\t$date = sprintf( __( '%s ago', 'learnpress' ), human_time_diff( $time ) );\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$date = mysql2date( get_option( 'date_format' ), $m_time );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} elseif ( ! $date instanceof LP_Datetime ) {\n+\t\t\t\t$date = new LP_Datetime( $date );\n+\t\t\t}\n+\n+\t\t\treturn $date;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set order key\n+\t\t *\n+\t\t * @param string $order_key\n+\t\t *\u002F\n+\t\tpublic function set_order_key( $order_key ) {\n+\t\t\t$this->_set_data( 'order_key', $order_key );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get order key.\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_order_key() {\n+\t\t\treturn $this->get_data( 'order_key', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get confirm received text\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_confirm_order_received_text() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fconfirm-order-received-text', __( 'Thank you. Your order has been received.', 'learnpress' ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get thank you message after the order is placed.\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_thankyou_message() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fconfirm-order-received-text', __( 'Thank you. Your order has been received.', 'learnpress' ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Checks to see if current order has status as passed.\n+\t\t *\n+\t\t * @param string|array $status String or an array of statuses\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function has_status( $status ) {\n+\t\t\tsettype( $status, 'array' );\n+\t\t\t$has = in_array( $this->get_status(), $status );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fhas-order-status', $has, $status, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Updates order to new status if needed\n+\t\t *\n+\t\t * @param mixed $new_status\n+\t\t * @param bool $manual Is this a manual order status change?.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function update_status( $new_status = 'pending', $manual = false ): bool {\n+\t\t\t$result = false;\n+\n+\t\t\ttry {\n+\t\t\t\t$this->set_status( $new_status );\n+\t\t\t\t$result = $this->save();\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Format order number id\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_order_number(): string {\n+\t\t\treturn learn_press_transaction_order_number( $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get status of the order\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_order_status() {\n+\t\t\treturn $this->get_status();\n+\t\t}\n+\n+\t\tpublic function get_user_ip_address() {\n+\t\t\treturn $this->get_data( 'user_ip_address' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current status of order\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_status() {\n+\t\t\treturn $this->get_data( 'status', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get label of lp order status\n+\t\t *\n+\t\t * @param string $status\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 4.2.0\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic static function get_status_label( string $status ): string {\n+\t\t\tswitch ( $status ) {\n+\t\t\t\tcase LP_ORDER_COMPLETED:\n+\t\t\t\t\t$status = __( 'Completed', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_PENDING:\n+\t\t\t\t\t$status = __( 'Pending', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_PROCESSING:\n+\t\t\t\t\t$status = __( 'Processing', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_CANCELLED:\n+\t\t\t\t\t$status = __( 'Cancelled', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_FAILED:\n+\t\t\t\t\t$status = __( 'Failed', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_TRASH:\n+\t\t\t\t\t$status = __( 'Trash', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'on-hold':\n+\t\t\t\t\t$status = __( 'On hold', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'refunded':\n+\t\t\t\t\t$status = __( 'Refunded', 'learnpress' );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$status = '';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ( ! is_string( $status ) ) {\n+\t\t\t\t$status = '';\n+\t\t\t}\n+\n+\t\t\treturn $status;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get icons of lp order status\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.2.0\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic static function get_icons_status(): array {\n+\t\t\t$icons = [\n+\t\t\t\tLP_ORDER_COMPLETED  => \"\u003Ci class='dashicons dashicons-yes-alt'>\u003C\u002Fi>\",\n+\t\t\t\tLP_ORDER_PENDING    => \"\u003Ci class='dashicons dashicons-flag'>\u003C\u002Fi>\",\n+\t\t\t\tLP_ORDER_PROCESSING => \"\u003Ci class='dashicons dashicons-clock'>\u003C\u002Fi>\",\n+\t\t\t\tLP_ORDER_CANCELLED  => \"\u003Ci class='dashicons dashicons-dismiss'>\u003C\u002Fi>\",\n+\t\t\t\tLP_ORDER_FAILED     => \"\u003Ci class='dashicons dashicons-warning'>\u003C\u002Fi>\",\n+\t\t\t];\n+\n+\t\t\treturn apply_filters( 'lp\u002Forder\u002Fstatus\u002Ficons', $icons );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set order status.\n+\t\t * $new_status shouldn't have prefix 'lp-'\n+\t\t *\n+\t\t * @param string $new_status\n+\t\t * @param string $note - Optional. Note for changing status.\n+\t\t *\n+\t\t * @sicne 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function set_status( string $new_status = '', string $note = '' ) {\n+\t\t\t\u002F\u002F Ensure status not has prefix 'lp-'.\n+\t\t\t$new_status     = str_replace( 'lp-', '', $new_status );\n+\t\t\t$valid_statuses = array_values( LP_Order::get_order_statuses() );\n+\t\t\tif ( ! in_array( $new_status, $valid_statuses ) && 'trash' !== $new_status ) {\n+\t\t\t\t$new_status = LP_ORDER_PENDING;\n+\t\t\t}\n+\n+\t\t\t$this->_set_data( 'status', $new_status );\n+\t\t}\n+\n+\t\tpublic function get_order_status_html() {\n+\t\t\t$order_status = self::get_status_label( $this->get_status() );\n+\t\t\t$status       = ucfirst( $order_status );\n+\t\t\t$class        = 'order-status order-status-' . sanitize_title( $status );\n+\t\t\t$html         = sprintf( '\u003Cspan class=\"%s\">%s\u003C\u002Fspan>', apply_filters( 'learn_press_order_status_class', $class, $status, $this ), $status );\n+\n+\t\t\treturn apply_filters( 'learn_press_order_status_html', $html, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Mark order as complete\n+\t\t *\n+\t\t * @param string $transaction_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function payment_complete( $transaction_id = '' ): bool {\n+\t\t\tdo_action( 'learn-press\u002Fpayment-pre-complete', $this->get_id() );\n+\n+\t\t\t$valid_order_statuses = apply_filters(\n+\t\t\t\t'learn-press\u002Fvalid-order-statuses-for-payment-complete',\n+\t\t\t\tarray(\n+\t\t\t\t\t'pending',\n+\t\t\t\t\t'processing',\n+\t\t\t\t),\n+\t\t\t\t$this\n+\t\t\t);\n+\n+\t\t\tif ( $this->get_id() && $this->has_status( $valid_order_statuses ) ) {\n+\n+\t\t\t\t$this->update_status( 'completed' );\n+\n+\t\t\t\tif ( ! empty( $transaction_id ) ) {\n+\t\t\t\t\tadd_post_meta( $this->get_id(), '_transaction_id', $transaction_id, true );\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fpayment-complete', $this->get_id() );\n+\t\t\t} else {\n+\t\t\t\tdo_action( 'learn-press\u002Fpayment-complete-order-status-' . $this->get_status(), $this->get_id() );\n+\t\t\t}\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get checkout order successful url.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_checkout_order_received_url() {\n+\t\t\t$received_url = learn_press_get_endpoint_url( 'lp-order-received', $this->get_id(), learn_press_get_page_link( 'checkout' ) );\n+\n+\t\t\t$received_url = add_query_arg( 'key', $this->get_order_key(), $received_url );\n+\n+\t\t\t$received_url = apply_filters( 'learn_press_get_checkout_order_received_url', $received_url, $this );\n+\n+\t\t\t\u002F**\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\treturn apply_filters( 'learn-press\u002Fcheckout-order-received-url', $received_url, $this );\n+\t\t}\n+\n+\t\t\u002F*********************************\u002F\n+\n+\t\t\u002F**\n+\t\t * Get customer name of the order\n+\t\t *\u002F\n+\t\tpublic function get_customer_name() {\n+\t\t\t$customer_name = '';\n+\n+\t\t\tif ( 'auto-draft' !== get_post_status( $this->get_id() ) ) {\n+\t\t\t\t$user_ids = $this->get_users();\n+\t\t\t\tif ( ! empty( $user_ids ) ) {\n+\t\t\t\t\t$customer_name = array();\n+\t\t\t\t\tforeach ( $user_ids as $uid ) {\n+\t\t\t\t\t\t$customer = learn_press_get_user( $uid );\n+\t\t\t\t\t\tif ( $customer && $customer->is_exists() ) {\n+\t\t\t\t\t\t\tif ( $customer->get_data( 'display_name' ) ) {\n+\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'display_name' );\n+\t\t\t\t\t\t\t} elseif ( $customer->get_data( 'user_nicename' ) ) {\n+\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'user_nicename' );\n+\t\t\t\t\t\t\t} elseif ( $customer->get_data( 'user_login' ) ) {\n+\t\t\t\t\t\t\t\t$customer_name[] = $customer->get_data( 'user_login' );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$customer_name[] = $this->get_guest_customer_name();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$customer_name = join( ', ', $customer_name );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! $customer_name ) {\n+\t\t\t\t$customer_name = $this->get_guest_customer_name();\n+\t\t\t}\n+\n+\t\t\treturn $customer_name;\n+\t\t}\n+\n+\t\tpublic function get_guest_customer_name() {\n+\t\t\t$checkout_email = $this->get_checkout_email();\n+\t\t\tif ( $checkout_email ) {\n+\t\t\t\t$customer_name = sprintf( __( '%s (Guest)', 'learnpress' ), $checkout_email );\n+\t\t\t} else {\n+\t\t\t\t$customer_name = sprintf( __( '(Guest)', 'learnpress' ), $checkout_email );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Forder\u002Fguest-customer-name', $customer_name );\n+\t\t}\n+\n+\t\t\u002F*public function customer_exists() {\n+\t\t\treturn false !== get_userdata( $this->get_data( 'user_id' ) );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get items of the order only to show.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_items() {\n+\t\t\t$items = $this->_curd->read_items( $this );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Forder-items', $items );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all items of the order.\n+\t\t * Only use for add\u002Fremove items to learn (learn_press_user_items) table.\n+\t\t * Where call this function, must be careful, must set_time_limit( 0 );.\n+\t\t *\n+\t\t * @return array|null\n+\t\t * @version 1.0.1\n+\t\t * @since 4.2.7.2\n+\t\t *\u002F\n+\t\tpublic function get_all_items() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$lp_order_items    = LP_Database::getInstance();\n+\t\t\t$table_order_items = $lp_order_items->tb_lp_order_items;\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"SELECT order_item_id, order_item_name, item_id, item_type\n+\t\t\t\tFrom $table_order_items\n+\t\t\t\tWHERE order_id = %d\",\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\n+\t\t\treturn $wpdb->get_results( $query, ARRAY_A );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get items of the order by filter\n+\t\t *\n+\t\t * @param array $filter\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @author tungnx\n+\t\t *\u002F\n+\t\tpublic function get_items_filter( $filter = array() ) {\n+\t\t\t$items = $this->_curd->read_items_filter( $this, $filter );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Forder-items', $items );\n+\t\t}\n+\n+\t\tpublic function is_child() {\n+\t\t\treturn $this->get_parent_id();\n+\t\t}\n+\n+\t\tpublic function get_parent() {\n+\t\t\treturn $this->get_parent_id() ? learn_press_get_order( $this->get_parent_id() ) : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get list of course ids from order.\n+\t\t *\n+\t\t * @return array|bool\n+\t\t * @editor tungnx\n+\t\t *\u002F\n+\t\tpublic function get_item_ids() {\n+\t\t\t$items = $this->get_all_items();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\t$course_ids = array();\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\tif ( $item['item_type'] === LP_COURSE_CPT ) {\n+\t\t\t\t\t\t$course_ids[] = (int) $item['item_id'];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn $course_ids;\n+\t\t\t\t\u002F**\n+\t\t\t\t * Comment by tungnx. Because it will error if item didn't have key 'course_id'.\n+\t\t\t\t * Ex: case buy certificate, will not have that key\n+\t\t\t\t *\u002F\n+\t\t\t\t\u002F\u002Freturn @wp_list_pluck( $items, 'course_id' );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check is order of Guest (user not login)\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_guest(): bool {\n+\t\t\treturn ! get_user_by( 'ID', $this->get_user_id() );\n+\t\t}\n+\n+\t\tpublic function get_item_meta( &$item ) {\n+\t\t\t$metas = get_metadata( 'learnpress_order_item', $item['id'] );\n+\t\t\tif ( $metas ) {\n+\t\t\t\tforeach ( $metas as $k => $v ) {\n+\t\t\t\t\t$item[ preg_replace( '!^_!', '', $k ) ] = LP_Helper::maybe_unserialize( $v[0] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove all items from an order\n+\t\t *\u002F\n+\t\tpublic function remove_order_items() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$wpdb->query(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\tDELETE FROM itemmeta\n+\t\t\t\tUSING $wpdb->learnpress_order_itemmeta itemmeta\n+\t\t\t\tINNER JOIN $wpdb->learnpress_order_items items\n+\t\t\t\tWHERE itemmeta.learnpress_order_item_id = items.order_item_id\n+\t\t\t\tAND items.order_id = %d\",\n+\t\t\t\t\t$this->get_id()\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$wpdb->query(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\tDELETE FROM {$wpdb->learnpress_order_items}\n+\t\t\t\tWHERE order_id = %d\",\n+\t\t\t\t\t$this->get_id()\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->learnpress_order_itemmeta} AUTO_INCREMENT = %d\", 1 ) );\n+\t\t\t$wpdb->query( $wpdb->prepare( \"ALTER TABLE {$wpdb->learnpress_order_items} AUTO_INCREMENT = %d\", 1 ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add a new item to order.\n+\t\t *\n+\t\t * @param array|int $item\n+\t\t *\n+\t\t * @return int\n+\t\t * @throws Exception\n+\t\t * @since 1.0.0\n+\t\t * @version 4.2.5\n+\t\t *\u002F\n+\t\tpublic function add_item( $item ): int {\n+\t\t\tglobal $wpdb;\n+\t\t\t$order_item_id = 0;\n+\n+\t\t\ttry {\n+\t\t\t\tif ( is_numeric( $item ) ) {\n+\t\t\t\t\t$item = array(\n+\t\t\t\t\t\t'item_id'         => absint( $item ),\n+\t\t\t\t\t\t'order_item_name' => get_the_title( $item ),\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$item_type = $item['item_type'] ?? get_post_type( $item['item_id'] );\n+\t\t\t\tif ( ! in_array( $item_type, learn_press_get_item_types_can_purchase() ) ) {\n+\t\t\t\t\treturn false;\n+\t\t\t\t}\n+\n+\t\t\t\t$item = wp_parse_args(\n+\t\t\t\t\t$item,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'item_id'         => 0,\n+\t\t\t\t\t\t'item_type'       => '',\n+\t\t\t\t\t\t'order_item_name' => '',\n+\t\t\t\t\t\t'quantity'        => 1,\n+\t\t\t\t\t\t'subtotal'        => 0,\n+\t\t\t\t\t\t'total'           => 0,\n+\t\t\t\t\t\t'meta'            => array(),\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tswitch ( $item_type ) {\n+\t\t\t\t\tcase LP_COURSE_CPT:\n+\t\t\t\t\t\t$course                     = learn_press_get_course( $item['item_id'] );\n+\t\t\t\t\t\t$item['subtotal']           = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Fsubtotal', $course->get_price() * $item['quantity'], $course, $item, $this );\n+\t\t\t\t\t\t$item['total']              = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Ftotal', $course->get_price() * $item['quantity'], $course, $item, $this );\n+\t\t\t\t\t\t$item['order_item_name']    = apply_filters( 'learnpress\u002Forder\u002Fitem\u002Ftitle', get_post_field( 'post_title', $item['item_id'], 'raw' ), $course, $item, $this );\n+\t\t\t\t\t\t$item['meta']['_course_id'] = $item['item_id'];\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tdefault:\n+\t\t\t\t\t\t$item = apply_filters( 'learnpress\u002Forder\u002Fadd-item\u002Fitem_type_' . $item_type, $item );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Insert new order item\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_order_items,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'order_item_name' => $item['order_item_name'],\n+\t\t\t\t\t\t'order_id'        => $this->get_id(),\n+\t\t\t\t\t\t'item_id'         => $item['item_id'],\n+\t\t\t\t\t\t'item_type'       => $item_type,\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%d',\n+\t\t\t\t\t\t'%s',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t\t$order_item_id = absint( $wpdb->insert_id );\n+\t\t\t\t\u002F\u002F Clear cache\n+\t\t\t\t$key = \"order\u002F{$this->get_id()}\u002F{$this->get_status()}\u002Fitems\";\n+\t\t\t\tLP_Cache::cache_load_first( 'clear', $key );\n+\t\t\t\t\u002F\u002F End insert new order item\n+\n+\t\t\t\t\u002F\u002F Add learnpress_order_itemmeta\n+\t\t\t\t$item['meta']['_quantity'] = $item['quantity'] ?? 1;\n+\t\t\t\t$item['meta']['_subtotal'] = $item['subtotal'] ?? 0;\n+\t\t\t\t$item['meta']['_total']    = $item['total'] ?? 0;\n+\n+\t\t\t\tif ( is_array( $item['meta'] ) ) {\n+\t\t\t\t\tforeach ( $item['meta'] as $k => $v ) {\n+\t\t\t\t\t\tlearn_press_add_order_item_meta( $order_item_id, $k, $v );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fadded-order-item-data', $order_item_id, $item, $this->get_id() );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $order_item_id;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set total\n+\t\t *\n+\t\t * @param int|float $total\n+\t\t *\u002F\n+\t\tpublic function set_total( $total = 0 ) {\n+\t\t\t$this->_set_data( 'total', $total );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get total\n+\t\t *\n+\t\t * @return int|float\n+\t\t *\u002F\n+\t\tpublic function get_total() {\n+\t\t\treturn $this->get_data( 'total', 0 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param float|int $subtotal\n+\t\t *\u002F\n+\t\tpublic function set_subtotal( $subtotal = 0 ) {\n+\t\t\t$this->_set_data( 'subtotal', $subtotal );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get subtotal\n+\t\t *\n+\t\t * @return float\n+\t\t *\u002F\n+\t\tpublic function get_subtotal() {\n+\t\t\treturn $this->get_data( 'subtotal' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove an item from database and it's data.\n+\t\t *\n+\t\t * @param $order_item_id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function remove_item( $order_item_id ): bool {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$item_id       = absint( $order_item_id );\n+\t\t\t$order_item_id = absint( $order_item_id );\n+\n+\t\t\tif ( ! $item_id ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn_press_before_delete_order_item', $item_id );\n+\n+\t\t\t\u002F**\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fbefore-delete-order-item', $item_id, $this->get_id() );\n+\n+\t\t\t$filter                      = new OrderItemsFilter();\n+\t\t\t$filter->order_item_id       = $order_item_id;\n+\t\t\t$filter->return_string_query = true;\n+\t\t\t$filter->run_query_count     = false;\n+\t\t\t$order_items_db              = LPOrderItemsDB::getInstance();\n+\t\t\t$order_items_db->get_query_single_row( $filter );\n+\t\t\t$query_single_row = $order_items_db->get_items( $filter );\n+\t\t\t$itemObj          = $order_items_db->wpdb->get_row( $query_single_row );\n+\n+\t\t\tif ( $itemObj && $itemObj->item_type === LP_COURSE_CPT ) {\n+\t\t\t\t$course_id = $itemObj->item_id;\n+\t\t\t\t$user_ids  = $this->get_user_id();\n+\t\t\t\tif ( is_array( $user_ids ) ) {\n+\t\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t\t\u002F\u002F Delete course item on learnpress_user_items if exists\n+\t\t\t\t\t\t$userCourseItem = UserItemModel::find_user_item(\n+\t\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t\t\t$course_id,\n+\t\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t\t\tLP_ORDER_CPT,\n+\t\t\t\t\t\t\ttrue\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tif ( $userCourseItem instanceof UserItemModel ) {\n+\t\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userCourseItem );\n+\t\t\t\t\t\t\t$userCourseModel->delete();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Delete course item on learnpress_user_items if exists\n+\t\t\t\t\t$userCourseItem = UserItemModel::find_user_item(\n+\t\t\t\t\t\t$user_ids,\n+\t\t\t\t\t\t$course_id,\n+\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t\tLP_ORDER_CPT,\n+\t\t\t\t\t\ttrue\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( $userCourseItem instanceof UserItemModel ) {\n+\t\t\t\t\t\t$userCourseModel = new UserCourseModel( $userCourseItem );\n+\t\t\t\t\t\t$userCourseModel->delete();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$wpdb->query( $wpdb->prepare( \"DELETE FROM {$wpdb->prefix}learnpress_order_items WHERE order_item_id = %d\", $item_id ) );\n+\t\t\t$wpdb->query( $wpdb->prepare( \"DELETE FROM {$wpdb->prefix}learnpress_order_itemmeta WHERE learnpress_order_item_id = %d\", $item_id ) );\n+\n+\t\t\t\u002F\u002FClear cache\n+\t\t\t$key = \"order\u002F{$this->get_id()}\u002F{$this->get_status()}\u002Fitems\";\n+\t\t\tLP_Cache::cache_load_first( 'clear', $key );\n+\n+\t\t\t\u002F**\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fdeleted-order-item', $item_id, $this->get_id() );\n+\n+\t\t\tdo_action( 'learn_press_delete_order_item', $item_id );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add multiple items.\n+\t\t *\n+\t\t * @param array $items\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function add_items( $items ) {\n+\t\t\tsettype( $items, 'array' );\n+\t\t\t$item_ids = array();\n+\t\t\ttry {\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\t$item_id = $this->add_item( $item );\n+\t\t\t\t\tif ( $item_id ) {\n+\t\t\t\t\t\t$item_ids[] = $item_id;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $item_ids;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $field\n+\t\t *\n+\t\t * @return array|bool|int|LP_User|mixed\n+\t\t *\u002F\n+\t\tpublic function get_user( $field = '' ) {\n+\n+\t\t\t$users = $this->get_users();\n+\t\t\t$uid   = reset( $users );\n+\n+\t\t\t$user = learn_press_get_user( $uid );\n+\t\t\tif ( false === $user ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( strtolower( $field ) == 'id' ) {\n+\t\t\t\treturn $user->get_id();\n+\t\t\t}\n+\n+\t\t\tif ( $field && $user ) {\n+\t\t\t\treturn $user->get_data( $field );\n+\t\t\t}\n+\n+\t\t\treturn $user;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user id in array.\n+\t\t * user_id = 0 -> User type Guest\n+\t\t * @return int[]\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_users(): array {\n+\t\t\t$users = $this->get_user_id();\n+\t\t\tif ( $users !== - 1 ) {\n+\t\t\t\tsettype( $users, 'array' );\n+\n+\t\t\t\t$users = array_map(\n+\t\t\t\t\tfunction ( $user ) {\n+\t\t\t\t\t\treturn absint( $user );\n+\t\t\t\t\t},\n+\t\t\t\t\t$users\n+\t\t\t\t);\n+\n+\t\t\t\t$users = array_unique( $users );\n+\t\t\t} else {\n+\t\t\t\t$users = array();\n+\t\t\t}\n+\n+\t\t\treturn $users;\n+\t\t}\n+\n+\t\tpublic function dropdown_users() {\n+\t\t\t$order_users = $this->get_users();\n+\t\t\t$users       = get_users( array() );\n+\t\t\techo '\u003Cselect name=\"order-customer[]\" id=\"order-customer\" multiple=\"multiple\">';\n+\t\t\tforeach ( (array) $users as $user ) {\n+\t\t\t\t\u002F\u002F $user->get_id() = (int) $user->get_id();\n+\t\t\t\tif ( in_array( $user->get_id(), $order_users ) ) {\n+\t\t\t\t\t$found_selected = true;\n+\t\t\t\t} else {\n+\t\t\t\t\t$found_selected = false;\n+\t\t\t\t}\n+\t\t\t\techo sprintf( '\u003Coption value=\"%d\" %s>%s\u003C\u002Foption>', esc_attr( $user->get_id() ), selected( $found_selected, true, false ), esc_html( $user->user_login ) );\n+\t\t\t}\n+\t\t\techo '\u003C\u002Fselect>';\n+\t\t}\n+\n+\n+\t\tpublic function get_checkout_payment_url() {\n+\t\t}\n+\n+\t\tpublic function get_formatted_order_subtotal() {\n+\t\t\t$currency_symbol = learn_press_get_currency_symbol( $this->get_currency() );\n+\n+\t\t\treturn learn_press_format_price( $this->get_subtotal(), $currency_symbol );\n+\t\t}\n+\n+\t\tpublic function get_formatted_order_total() {\n+\t\t\t$currency_symbol = learn_press_get_currency_symbol( $this->get_currency() );\n+\n+\t\t\treturn learn_press_format_price( $this->get_total(), $currency_symbol );\n+\t\t}\n+\n+\t\tpublic function get_currency() {\n+\t\t\treturn $this->get_data( 'currency' ) ? $this->get_data( 'currency' ) : learn_press_get_currency();\n+\t\t}\n+\n+\t\tpublic function set_currency( $value ) {\n+\t\t\t$this->_set_data( 'currency', $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get payment method title.\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_payment_method_title() {\n+\t\t\treturn esc_html( $this->get_data( 'payment_method_title', '' ) );\n+\t\t}\n+\n+\t\tpublic function get_view_order_url() {\n+\t\t\tglobal $wp_query;\n+\n+\t\t\t$view_order_url      = learn_press_get_endpoint_url( 'view-order', $this->get_id(), learn_press_get_page_link( 'profile' ) );\n+\t\t\t$user                = learn_press_get_current_user();\n+\t\t\t$view_order_endpoint = LP_Settings::instance()->get( 'profile_endpoints.order-details' );\n+\n+\t\t\tif ( ! $view_order_endpoint ) {\n+\t\t\t\t$view_order_endpoint = 'order-details';\n+\t\t\t}\n+\n+\t\t\t$view_order_endpoint = urlencode( $view_order_endpoint );\n+\t\t\tif ( get_option( 'permalink_structure' ) ) {\n+\t\t\t\t$view_order_url = learn_press_get_page_link( 'profile' ) . $user->get_data( 'user_login' ) . '\u002F' . $view_order_endpoint . '\u002F' . $this->get_id() . '\u002F';\n+\t\t\t} else {\n+\t\t\t\t$args         = array(\n+\t\t\t\t\t'user' => $user->get_data( 'user_login' ),\n+\t\t\t\t);\n+\t\t\t\t$args['view'] = $view_order_endpoint;\n+\n+\t\t\t\tif ( $view_order_endpoint ) {\n+\t\t\t\t\t$args['id'] = $this->get_id();\n+\t\t\t\t}\n+\t\t\t\t$view_order_url = add_query_arg(\n+\t\t\t\t\t$args,\n+\t\t\t\t\tlearn_press_get_page_link( 'profile' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn_press_view_order_url', $view_order_url, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get cancel url if it's status is pending.\n+\t\t *\n+\t\t * @param bool $force\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_cancel_order_url( $force = false ) {\n+\n+\t\t\t$url = false;\n+\t\t\tif ( $this->has_status( 'pending' ) ) {\n+\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t\t$profile = LP_Profile::instance( $user_id );\n+\t\t\t\t$url     = $profile->get_tab_link( LP_Settings::instance()->get( 'profile_endpoints.orders' ) );\n+\t\t\t\tif ( ! $force ) {\n+\t\t\t\t\t$url = esc_url_raw( add_query_arg( 'cancel-order', $this->get_id(), $url ) );\n+\t\t\t\t} else {\n+\t\t\t\t\t$url = esc_url_raw( add_query_arg( 'cancelled-order', $this->get_id(), $url ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$url = wp_nonce_url( $url, 'cancel-order', 'lp-nonce' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Forder-cancel-url', $url, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get profile order's actions.\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_profile_order_actions() {\n+\t\t\t$actions = array(\n+\t\t\t\t'view' => array(\n+\t\t\t\t\t'url'  => $this->get_view_order_url(),\n+\t\t\t\t\t'text' => __( 'View', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\t$cancel_url = $this->get_cancel_order_url();\n+\t\t\tif ( $cancel_url ) {\n+\t\t\t\t$actions['cancel'] = array(\n+\t\t\t\t\t'url'  => $this->get_cancel_order_url(),\n+\t\t\t\t\t'text' => __( 'Cancel', 'learnpress' ),\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$actions = apply_filters( 'learn-press\u002Fprofile-order-actions', $actions, $this->get_id() );\n+\n+\t\t\treturn $actions;\n+\t\t}\n+\n+\t\tpublic function add_note( $note = null ) {\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t$user                 = get_user_by( 'id', get_current_user_id() );\n+\t\t\t\t$comment_author       = $user->display_name;\n+\t\t\t\t$comment_author_email = $user->user_email;\n+\t\t\t\t$comment_post_ID      = $this->get_id();\n+\t\t\t\t$comment_author_url   = '';\n+\t\t\t\t$comment_content      = $note;\n+\t\t\t\t$comment_agent        = 'LearnPress';\n+\t\t\t\t$comment_type         = 'lp_order_note';\n+\t\t\t\t$comment_parent       = 0;\n+\t\t\t\t$comment_approved     = 1;\n+\n+\t\t\t\t$commentdata = apply_filters(\n+\t\t\t\t\t'learn_press_new_order_note_data',\n+\t\t\t\t\tcompact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_agent', 'comment_type', 'comment_parent', 'comment_approved' ),\n+\t\t\t\t\t$this->get_id()\n+\t\t\t\t);\n+\n+\t\t\t\t$comment_id = wp_insert_comment( $commentdata );\n+\n+\t\t\t\treturn $comment_id;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user_name\n+\t\t *\n+\t\t * @param int $user_id\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_user_name( int $user_id = 0 ): string {\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\tif ( $user && ! $user instanceof LP_User_Guest ) {\n+\t\t\t\t$user_name = $user->get_display_name();\n+\t\t\t} else {\n+\t\t\t\t$user_name = $this->get_checkout_email();\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Forder\u002Fuser-name', sprintf( _x( '%1$s', 'full name', 'learnpress' ), $user_name ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check to see if this order is for multi users\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 2.1.5\n+\t\t *\u002F\n+\t\tpublic function is_multi_users(): bool {\n+\t\t\treturn is_array( $this->get_user_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email of user has bought this order.\n+\t\t * In case this order is for multi users return an array with multi email addresses.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 2.1.5\n+\t\t *\u002F\n+\t\tpublic function get_user_data(): array {\n+\t\t\t$data = array();\n+\n+\t\t\t$user_ids = $this->get_users();\n+\t\t\tif ( ! empty( $user_ids ) ) {\n+\t\t\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t\t\t$user = learn_press_get_user( $user_id );\n+\t\t\t\t\tif ( $user && $user->is_exists() ) {\n+\t\t\t\t\t\t$data[ $user_id ] = $user->get_data(\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'id',\n+\t\t\t\t\t\t\t\t'email',\n+\t\t\t\t\t\t\t\t'user_login',\n+\t\t\t\t\t\t\t\t'description',\n+\t\t\t\t\t\t\t\t'first_name',\n+\t\t\t\t\t\t\t\t'last_name',\n+\t\t\t\t\t\t\t\t'nickname',\n+\t\t\t\t\t\t\t\t'display_name',\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email's user by user_id\n+\t\t *\n+\t\t * @param int $user_id\n+\t\t *\n+\t\t * @return string\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.3\n+\t\t * @version 1.0.3\n+\t\t *\u002F\n+\t\tpublic function get_user_email( int $user_id = 0 ): string {\n+\t\t\tif ( $user_id == 0 ) {\n+\t\t\t\t$user_id = (int) $this->get_user_id();\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\t$email = $userModel->get_email();\n+\t\t\t} else {\n+\t\t\t\t$email = $this->get_checkout_email();\n+\t\t\t}\n+\n+\t\t\treturn $email;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Order title\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_title( $context = '' ) {\n+\t\t\treturn $this->get_data( 'order_title', __( 'Order on', 'learnpress' ) . ' ' . current_time( 'l jS F Y h:i:s A' ) );\n+\t\t}\n+\n+\t\tpublic function get_parent_id() {\n+\t\t\treturn $this->get_data( 'parent_id', 0 );\n+\t\t}\n+\n+\t\tpublic function set_parent_id( $parent_id ) {\n+\t\t\t$this->_set_data( 'parent_id', $parent_id );\n+\t\t}\n+\n+\t\tpublic function set_user_id( $user_id ) {\n+\t\t\t$this->_set_data( 'user_id', $user_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set 1 for is user guest\n+\t\t *\n+\t\t * @param int $user_type_guest\n+\t\t *\u002F\n+\t\tpublic function set_user_type_guest( int $user_type_guest ) {\n+\t\t\t$this->_set_data( 'user_type_guest', $user_type_guest );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user's ids of order.\n+\t\t *\n+\t\t * @return array|int\n+\t\t *\u002F\n+\t\tpublic function get_user_id() {\n+\t\t\treturn $this->get_data( 'user_id', - 1 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get date modified of order.\n+\t\t *\n+\t\t * @return LP_Datetime\n+\t\t *\u002F\n+\t\tpublic function get_date_modified() {\n+\t\t\treturn $this->get_data( 'date_modified' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set date modified of order.\n+\t\t *\n+\t\t * @param mixed $date\n+\t\t *\u002F\n+\t\tpublic function set_date_modified( $date ) {\n+\t\t\t$this->_set_data( 'date_modified', $date );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set method for creating the order, such as: checkout\n+\t\t *\n+\t\t * @param string $created_via\n+\t\t *\u002F\n+\t\tpublic function set_created_via( $created_via ) {\n+\t\t\t$this->_set_data( 'created_via', $created_via );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get method which order is created, such as: checkout\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_created_via(): string {\n+\t\t\treturn $this->get_data( 'created_via', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save order data.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function save() {\n+\t\t\t$old_status = '';\n+\n+\t\t\tif ( $this->get_id() ) {\n+\t\t\t\t$old_status_post = get_post_status( $this->get_id() );\n+\t\t\t\tif ( ! in_array( $old_status_post, [ 'trash', 'auto-draft' ] ) ) {\n+\t\t\t\t\t$old_status = str_replace( 'lp-', '', $old_status_post );\n+\t\t\t\t} else {\n+\t\t\t\t\t$old_status = $old_status_post;\n+\t\t\t\t}\n+\n+\t\t\t\t$return = $this->_curd->update( $this );\n+\t\t\t} else {\n+\t\t\t\t$return = $this->_curd->create( $this );\n+\t\t\t}\n+\n+\t\t\t$new_status_post = get_post_status( $this->get_id() );\n+\t\t\tif ( ! in_array( $new_status_post, [ 'trash', 'auto-draft' ] ) ) {\n+\t\t\t\t$new_status = str_replace( 'lp-', '', $new_status_post );\n+\t\t\t} else {\n+\t\t\t\t$new_status = $new_status_post;\n+\t\t\t}\n+\n+\t\t\t$order_id = $this->get_id();\n+\n+\t\t\tif ( $new_status !== $old_status ) {\n+\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-changed', $order_id, $old_status, $new_status );\n+\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-' . $new_status, $order_id, $old_status );\n+\t\t\t\tdo_action( 'learn-press\u002Forder\u002Fstatus-' . $old_status . '-to-' . $new_status, $order_id );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F$this->_save_status();\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get an instance of LP_Order by post ID or WP_Post object\n+\t\t *\n+\t\t * @param $order\n+\t\t * @param $force\n+\t\t *\n+\t\t * @return LP_Order\n+\t\t *\u002F\n+\t\tpublic static function instance( $order, $force = true ) {\n+\t\t\t\u002F\u002F learn_press_deprecated_function( 'new LP_Order', '3.0', 'learn_press_get_order' );\n+\n+\t\t\treturn learn_press_get_order( $order );\n+\t\t}\n+\n+\t\t\u002F** Getter\u002FSetter  **\u002F\n+\n+\t\tpublic function set_customer_message( $message ) {\n+\t\t\t$this->_set_data( 'customer_message', $message );\n+\t\t}\n+\n+\t\tpublic function set_customer_note( $note ) {\n+\t\t\t$this->_set_data( 'customer_note', $note );\n+\t\t}\n+\n+\t\tpublic function get_customer_note() {\n+\t\t\treturn $this->get_data( 'customer_note' ) . '';\n+\t\t}\n+\n+\t\tpublic function set_user_ip_address( $value ) {\n+\t\t\t$this->_set_data( 'user_ip_address', $value );\n+\t\t}\n+\n+\t\tpublic function set_user_agent( $value ) {\n+\t\t\t$this->_set_data( 'user_agent', $value );\n+\t\t}\n+\n+\t\tpublic function get_user_agent() {\n+\t\t\treturn $this->get_data( 'user_agent' );\n+\t\t}\n+\n+\t\tpublic function set_checkout_email( $email ) {\n+\t\t\t$this->_set_data( 'checkout_email', $email );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email checkout for case Guest\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_checkout_email(): string {\n+\t\t\treturn $this->get_data( 'checkout_email', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Short function to check order is completed.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_completed(): bool {\n+\t\t\treturn $this->get_status() === LP_ORDER_COMPLETED;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check Order is created manual.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 4.1.3\n+\t\t * @author tungnx\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function is_manual(): bool {\n+\t\t\treturn $this->get_created_via() === LP_ORDER_CREATED_VIA_MANUAL;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check can delete lp_user_items old\n+\t\t *\n+\t\t * @param LP_Course $course\n+\t\t *\n+\t\t * @return bool\n+\t\t * @throws Exception\n+\t\t * @author tungnx\n+\t\t * @since 4.1.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function check_can_delete_item_old( LP_Course $course ): bool {\n+\t\t\t$can_delete = false;\n+\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\n+\t\t\t\u002F**\n+\t\t\t * For case user buy on frontend (not LP Order manual)\n+\t\t\t * And course enable repurchase and repurchase_type is keep\n+\t\t\t *\u002F\n+\t\t\t$allow_repurchase_type = '';\n+\n+\t\t\t$filter          = new LP_User_Items_Filter();\n+\t\t\t$filter->user_id = get_current_user_id();\n+\t\t\t$filter->item_id = $course->get_id();\n+\t\t\t$user_course     = $lp_user_items_db->get_last_user_course( $filter );\n+\n+\t\t\tif ( $user_course && isset( $user_course->user_item_id ) ) {\n+\t\t\t\t$latest_user_item_id = $user_course->user_item_id;\n+\n+\t\t\t\t\u002F** Get allow_repurchase_type for reset or update. Add in: rest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-courses-controller.php: purchase_course *\u002F\n+\t\t\t\t$allow_repurchase_type = learn_press_get_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Course is free\n+\t\t\t * Or not allow repurchase\n+\t\t\t * Or repurchase not type 'Keep'\n+\t\t\t * And else\n+\t\t\t * Will deleted lp_user_items old\n+\t\t\t *\u002F\n+\t\t\tif ( $course->is_free() || empty( $allow_repurchase_type ) || ! $course->allow_repurchase() || $allow_repurchase_type != 'keep' ) {\n+\t\t\t\t$can_delete = true;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learnpress\u002Forder\u002Fcan_delete_old_item', $can_delete, $course );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get list status of LP Order\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function get_order_statuses(): array {\n+\t\t\t$order_statuses = [\n+\t\t\t\tLP_ORDER_COMPLETED_DB  => LP_ORDER_COMPLETED,\n+\t\t\t\tLP_ORDER_PROCESSING_DB => LP_ORDER_PROCESSING,\n+\t\t\t\tLP_ORDER_PENDING_DB    => LP_ORDER_PENDING,\n+\t\t\t\tLP_ORDER_CANCELLED_DB  => LP_ORDER_CANCELLED,\n+\t\t\t\tLP_ORDER_FAILED_DB     => LP_ORDER_FAILED,\n+\t\t\t];\n+\n+\t\t\treturn apply_filters( 'lp\u002Forder\u002Fstatuses', $order_statuses );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query list orders.\n+\t\t *\n+\t\t * @param PostFilter $post_filter\n+\t\t * @param array $param [ 'author' => int, 'post_status' => string|array, 's' => string, 'm' => string, 'posts_per_page' => int, 'paged' => int, 'orderby' => string, 'order' => string ]\n+\t\t *\n+\t\t * @return void\n+\t\t * @throws Exception\n+\t\t * @since 4.3.2.8\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic static function handle_params_query_list_orders( PostFilter &$post_filter, array $param = [] ) {\n+\t\t\t$post_db       = PostDB::getInstance();\n+\t\t\t$user_of_order = absint( $param['author'] ?? 0 );\n+\t\t\t$status        = $param['post_status'] ?? '';\n+\t\t\t$key           = $param['s'] ?? '';\n+\t\t\t$month         = $param['m'] ?? '';\n+\t\t\t$limit         = $param['posts_per_page'] ?? 20;\n+\t\t\t$paged         = $param['paged'] ?? 1;\n+\n+\t\t\t$order_by = $param['orderby'] ?? 'date';\n+\t\t\tif ( empty( $order_by ) ) {\n+\t\t\t\t$order_by = 'ID';\n+\t\t\t} else {\n+\t\t\t\tswitch ( $order_by ) {\n+\t\t\t\t\tcase 'date':\n+\t\t\t\t\t\t$order_by = 'post_date';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'title':\n+\t\t\t\t\t\t$order_by = 'ID';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$order = $param['order'] ?? 'DESC';\n+\t\t\t\u002F\u002F End convert params\n+\n+\t\t\tif ( $order_by === 'order_total' ) {\n+\t\t\t\t$post_filter->join[]   = \"INNER JOIN {$post_db->tb_postmeta} pm2 ON p.ID = pm2.post_id AND pm2.meta_key = '_order_total'\";\n+\t\t\t\t$post_filter->where[]  = 'AND CAST(pm2.meta_value AS UNSIGNED)';\n+\t\t\t\t$post_filter->order_by = 'pm2.meta_value';\n+\t\t\t} else {\n+\t\t\t\t$post_filter->order_by = $order_by;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $key ) ) {\n+\t\t\t\t$pattern          = '\u002F^#\\d+$\u002F';\n+\t\t\t\t$is_order_id_sure = false;\n+\t\t\t\tif ( preg_match( $pattern, $key ) ) {\n+\t\t\t\t\t$is_order_id_sure = true;\n+\t\t\t\t\t$key              = str_replace( '#', '', $key );\n+\t\t\t\t}\n+\n+\t\t\t\t$pattern2 = '#^0+.*\\d+$#';\n+\t\t\t\tif ( preg_match( $pattern2, $key ) ) {\n+\t\t\t\t\t$key = (int) $key;\n+\t\t\t\t}\n+\n+\t\t\t\t$key = trim( $key );\n+\n+\t\t\t\tif ( $is_order_id_sure ) {\n+\t\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare( 'AND p.ID = %d', $key );\n+\t\t\t\t} else {\n+\t\t\t\t\t$post_filter->join[]  = \"INNER JOIN {$post_db->tb_lp_order_items} lpori ON p.ID = lpori.order_id\";\n+\t\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare(\n+\t\t\t\t\t\t'AND (p.ID = %d OR lpori.order_item_name like %s)',\n+\t\t\t\t\t\t$key,\n+\t\t\t\t\t\t'%' . $key . '%'\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $month ) ) {\n+\t\t\t\t$year                 = substr( $month, 0, 4 );\n+\t\t\t\t$post_filter->where[] = \"AND YEAR(p.post_date) = $year\";\n+\t\t\t\tif ( strlen( $month ) > 5 ) {\n+\t\t\t\t\t$mon                  = substr( $month, 4, 2 );\n+\t\t\t\t\t$post_filter->where[] = \"AND MONTH(p.post_date) = $mon\";\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$post_filter->order = $order;\n+\t\t\t$post_filter->limit = $limit;\n+\t\t\t$post_filter->page  = $paged;\n+\n+\t\t\tif ( ! empty( $user_of_order ) ) {\n+\t\t\t\t$user_id              = absint( $user_of_order );\n+\t\t\t\t$post_filter->join[]  = \"INNER JOIN {$post_db->tb_postmeta} pm1 ON p.ID = pm1.post_id AND pm1.meta_key = '_user_id'\";\n+\t\t\t\t$post_filter->where[] = \"AND ( pm1.meta_value like '%\\\"$user_id\\\"%' OR pm1.meta_value = $user_id )\";\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $status ) && $status !== 'all' ) {\n+\t\t\t\t$post_filter->post_status = (array) $status;\n+\t\t\t} else {\n+\t\t\t\t$post_filter->where[] = $post_db->wpdb->prepare( 'AND p.post_status != %s', LP_ORDER_TRASH );\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Flp-order-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Flp-order-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Forder\u002Flp-order-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Forder\u002Flp-order-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,445 +1,445 @@\n-\u003C?php\r\n-\u002F**\r\n- * Defines functions related to order\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FFunctions\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Generate unique key for an order.\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_generate_order_key() {\r\n-\treturn apply_filters( 'learn-press\u002Forder-key', strtoupper( uniqid( 'ORDER' ) ) );\r\n-}\r\n-\r\n-\u002F**\r\n- * Update Order status\r\n- *\r\n- * @param int\r\n- * @param string\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_update_order_status( $order_id, $status = '' ) {\r\n-\t$order = new LP_Order( $order_id );\r\n-\tif ( $order ) {\r\n-\t\treturn $order->update_status( $status );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Add order item meta data.\r\n- *\r\n- * @param int    $item_id\r\n- * @param string $meta_key\r\n- * @param mixed  $meta_value\r\n- * @param string $prev_value\r\n- *\r\n- * @return false|int\r\n- *\u002F\r\n-function learn_press_add_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn add_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-\u002F**\r\n- * Update order item meta data.\r\n- *\r\n- * @param int    $item_id\r\n- * @param string $meta_key\r\n- * @param mixed  $meta_value\r\n- * @param string $prev_value\r\n- *\r\n- * @return bool|int\r\n- *\u002F\r\n-function learn_press_update_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn update_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-\u002F**\r\n- * Delete order item meta data.\r\n- *\r\n- * @param int    $item_id\r\n- * @param string $meta_key\r\n- * @param mixed  $meta_value\r\n- * @param bool   $delete_all\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_delete_order_item_meta( $item_id, $meta_key, $meta_value, $delete_all = false ) {\r\n-\treturn delete_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $delete_all );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get order item meta data.\r\n- *\r\n- * @param int    $item_id\r\n- * @param string $meta_key\r\n- * @param bool   $single\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_order_item_meta( $item_id, $meta_key, $single = true ) {\r\n-\treturn get_metadata( 'learnpress_order_item', $item_id, $meta_key, $single );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get order\r\n- *\r\n- * @param mixed $the_order\r\n- *\r\n- * @return LP_Order|bool object instance\r\n- *\u002F\r\n-function learn_press_get_order( $the_order = false ) {\r\n-\tglobal $post;\r\n-\t$the_id = 0;\r\n-\tif ( false === $the_order && is_a( $post, 'WP_Post' ) && LP_ORDER_CPT === get_post_type( $post ) ) {\r\n-\t\t$the_id = $post->ID;\r\n-\t} elseif ( is_numeric( $the_order ) ) {\r\n-\t\t$the_id = $the_order;\r\n-\t} elseif ( $the_order instanceof LP_Order ) {\r\n-\t\t$the_id = $the_order->get_id();\r\n-\t} elseif ( ! empty( $the_order->ID ) ) {\r\n-\t\t$the_id = $the_order->ID;\r\n-\t}\r\n-\r\n-\tif ( LP_ORDER_CPT != get_post_type( $the_id ) ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\treturn new LP_Order( $the_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * Count orders by it's status\r\n- *\r\n- * @param array $args\r\n- * @Todo tungnx review to rewrite query\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_count_orders( $args = array() ) {\r\n-\tif ( is_string( $args ) ) {\r\n-\t\t$args = array( 'status' => $args );\r\n-\t} else {\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'status' => '',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\tglobal $wpdb;\r\n-\t$statuses = $args['status'];\r\n-\r\n-\tif ( ! $statuses ) {\r\n-\t\t$statuses = array_keys( LP_Order::get_order_statuses() );\r\n-\t}\r\n-\r\n-\tsettype( $statuses, 'array' );\r\n-\t$size_of_status = sizeof( $statuses );\r\n-\r\n-\tforeach ( $statuses as $k => $status ) {\r\n-\t\t$statuses[ $k ] = ! preg_match( '~^lp-~', $status ) ? 'lp-' . $status : $status;\r\n-\t}\r\n-\r\n-\t$format     = array_fill( 0, $size_of_status, '%s' );\r\n-\t$counts     = array_fill_keys( $statuses, 0 );\r\n-\t$statuses[] = LP_ORDER_CPT;\r\n-\t$query      = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tSELECT COUNT(ID) AS count, post_status AS status\r\n-\t\tFROM {$wpdb->posts} o\r\n-\t\tWHERE post_status IN(\" . join( ',', $format ) . ')\r\n-\t\tAND post_type = %s\r\n-\t\tGROUP BY o.post_status\r\n-\t',\r\n-\t\t$statuses\r\n-\t);\r\n-\r\n-\t$results = $wpdb->get_results( $query );\r\n-\tif ( $results ) {\r\n-\t\tforeach ( $results as $result ) {\r\n-\t\t\tif ( array_key_exists( $result->status, $counts ) ) {\r\n-\t\t\t\t$counts[ $result->status ] = absint( $result->count );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $size_of_status > 1 ? $counts : reset( $counts );\r\n-}\r\n-\r\n-\u002F**\r\n- * Format price with currency and other settings.\r\n- *\r\n- * @param float $price\r\n- * @param string $currency\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_format_price( $price = 0, $currency = '' ): string {\r\n-\tif ( ! is_numeric( $price ) ) {\r\n-\t\t$price = 0;\r\n-\t}\r\n-\r\n-\t$before = $after = '';\r\n-\r\n-\t$currency            = esc_html(\r\n-\t\tis_string( $currency ) && '' !== $currency\r\n-\t\t\t? $currency\r\n-\t\t\t: learn_press_get_currency_symbol()\r\n-\t);\r\n-\t$thousands_separator = esc_html( LP_Settings::get_option( 'thousands_separator', ',' ) );\r\n-\t$number_of_decimals  = esc_html( LP_Settings::get_option( 'number_of_decimals', 2 ) );\r\n-\t$decimals_separator  = esc_html( LP_Settings::get_option( 'decimals_separator', '.' ) );\r\n-\r\n-\tswitch ( LP_Settings::get_option( 'currency_pos' ) ) {\r\n-\t\tdefault:\r\n-\t\t\t$before = $currency;\r\n-\t\t\tbreak;\r\n-\t\tcase 'left_with_space':\r\n-\t\t\t$before = $currency . ' ';\r\n-\t\t\tbreak;\r\n-\t\tcase 'right':\r\n-\t\t\t$after = $currency;\r\n-\t\t\tbreak;\r\n-\t\tcase 'right_with_space':\r\n-\t\t\t$after = ' ' . $currency;\r\n-\t}\r\n-\r\n-\treturn $before . number_format( $price, $number_of_decimals, $decimals_separator, $thousands_separator ) . $after;\r\n-}\r\n-\r\n-\u002F**\r\n- * Update\r\n- *\r\n- * @param $order_id\r\n- *\r\n- * @return array|bool\r\n- *\u002F\r\n-function learn_press_update_order_items( $order_id ) {\r\n-\t$order = learn_press_get_order( $order_id );\r\n-\tif ( ! $order ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t$subtotal = 0;\r\n-\t$total    = 0;\r\n-\t$items    = $order->get_items();\r\n-\r\n-\tif ( $items ) {\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\t$subtotal += $item['subtotal'];\r\n-\t\t\t$total    += $item['total'];\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tupdate_post_meta( $order_id, '_order_currency', learn_press_get_currency() );\r\n-\tupdate_post_meta( $order_id, '_prices_include_tax', 'no' );\r\n-\tupdate_post_meta( $order_id, '_order_subtotal', $subtotal );\r\n-\tupdate_post_meta( $order_id, '_order_total', $total );\r\n-\tupdate_post_meta( $order_id, '_order_key', learn_press_generate_order_key() );\r\n-\tupdate_post_meta( $order_id, '_payment_method', '' );\r\n-\tupdate_post_meta( $order_id, '_payment_method_title', '' );\r\n-\tupdate_post_meta( $order_id, '_order_version', '1.0' );\r\n-\r\n-\treturn array(\r\n-\t\t'subtotal' => $subtotal,\r\n-\t\t'total'    => $total,\r\n-\t\t'currency' => learn_press_get_currency(),\r\n-\t);\r\n-}\r\n-\r\n-\u002F**\r\n- * Format order's ID in ten numbers. Eg: 0000000XXX.\r\n- *\r\n- * @param int $order_number\r\n- *\r\n- * @since 2.0.0\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_transaction_order_number( $order_number ) {\r\n-\t$formatted_number = apply_filters( 'learn_press_get_order_number', '#' . sprintf( \"%'.010d\", $order_number ), $order_number );\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Forder-number-formatted', $formatted_number, $order_number );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get list of registered order's statues for registering with wp post's status.\r\n- *\r\n- * @since 2.0.0\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_get_register_order_statuses() {\r\n-\t$order_statues = array();\r\n-\r\n-\t$order_statues['lp-completed']  = array(\r\n-\t\t'label'                     => _x( 'Completed', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Completed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Completed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\t$order_statues['lp-pending']    = array(\r\n-\t\t'label'                     => _x( 'Pending', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Pending Payment \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Pending Payment \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\t$order_statues['lp-processing'] = array(\r\n-\t\t'label'                     => _x( 'Processing', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Processing \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Processing \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\t$order_statues['lp-cancelled']  = array(\r\n-\t\t'label'                     => _x( 'Cancelled', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Cancelled \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Cancelled \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\t$order_statues['lp-failed']     = array(\r\n-\t\t'label'                     => _x( 'Failed', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Failed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Failed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\t$order_statues['trash']         = array(\r\n-\t\t'label'                     => _x( 'Trash', 'Order status', 'learnpress' ),\r\n-\t\t'public'                    => false,\r\n-\t\t'exclude_from_search'       => false,\r\n-\t\t'show_in_admin_all_list'    => true,\r\n-\t\t'show_in_admin_status_list' => true,\r\n-\t\t'label_count'               => _n_noop( 'Trash \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Trash \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\r\n-\t);\r\n-\r\n-\treturn $order_statues;\r\n-}\r\n-\r\n-function _learn_press_get_order_status_description( $status ) {\r\n-\t$descriptions = array(\r\n-\t\t'pending'    => __( 'Order received in case a user purchases a course but doesn\\'t finalize the order.', 'learnpress' ),\r\n-\t\t'processing' => __( 'Payment received and the order is awaiting fulfillment.', 'learnpress' ),\r\n-\t\t'completed'  => __( 'The order is fulfilled and completed.', 'learnpress' ),\r\n-\t\t'cancelled'  => __( 'The order is cancelled by an admin or the customer.', 'learnpress' ),\r\n-\t);\r\n-\r\n-\treturn apply_filters( 'learn_press_order_status_description', ! empty( $descriptions[ $status ] ) ? $descriptions[ $status ] : '' );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get status of an order by the ID.\r\n- *\r\n- * @param int $order_id\r\n- *\r\n- * @return bool|string\r\n- *\u002F\r\n-function learn_press_get_order_status( $order_id ) {\r\n-\t$order = learn_press_get_order( $order_id );\r\n-\r\n-\tif ( $order ) {\r\n-\t\treturn $order->get_status();\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_cancel_order_process' ) ) {\r\n-\t\u002F**\r\n-\t * Process action allows user to cancel an order is pending\r\n-\t * in their profile.\r\n-\t *\u002F\r\n-\tfunction learn_press_cancel_order_process() {\r\n-\t\tif ( empty( $_REQUEST['cancel-order'] ) || empty( $_REQUEST['lp-nonce'] ) ||\r\n-\t\t\t! wp_verify_nonce( $_REQUEST['lp-nonce'], 'cancel-order' ) || is_admin() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t\t$url  = learn_press_user_profile_link(\r\n-\t\t\t$user->get_id(),\r\n-\t\t\tLP_Settings::instance()->get( 'profile_endpoints.orders', 'orders' )\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$message = [\r\n-\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t'content' => '',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$order_id = absint( $_REQUEST['cancel-order'] );\r\n-\t\t\t$order    = learn_press_get_order( $order_id );\r\n-\r\n-\t\t\tif ( ! $order ) {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'Order number \u003Cstrong>%s\u003C\u002Fstrong> not found', 'learnpress' ), $order_id ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_ids = (array) $order->get_user_id();\r\n-\t\t\tif ( ! in_array( $user->get_id(), $user_ids ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to cancel this order.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $order->has_status( LP_ORDER_PENDING ) ) {\r\n-\t\t\t\t$order->update_status( LP_ORDER_CANCELLED );\r\n-\t\t\t\t$order->add_note( __( 'The order is cancelled by the customer', 'learnpress' ) );\r\n-\r\n-\t\t\t\t$message['status']  = 'success';\r\n-\t\t\t\t$message['content'] = sprintf( __( 'Order number \u003Cstrong>%s\u003C\u002Fstrong> has been cancelled', 'learnpress' ), $order->get_order_number() );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'The order number \u003Cstrong>%s\u003C\u002Fstrong> can not be cancelled.', 'learnpress' ),\r\n-\t\t\t\t\t$order->get_order_number()\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$message['content'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_set_message( $message );\r\n-\t\twp_safe_redirect( $url );\r\n-\t\texit();\r\n-\t}\r\n-}\r\n-add_action( 'init', 'learn_press_cancel_order_process' );\r\n-\r\n-\r\n-\u002F**\r\n- * get total price order complete\r\n- *\r\n- *\u002F\r\n-\r\n-function learn_press_get_total_price_order_complete() {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"SELECT SUM(meta_value) as order_total From `{$wpdb->prefix}postmeta` as mt\r\n-\t\tINNER JOIN `{$wpdb->prefix}posts` as p ON p.id = mt.post_id\r\n-\t\tWHERE p.post_type = %s AND mt.meta_key = %s\r\n-\t\tAND p.post_status = %s\r\n-\t\t\",\r\n-\t\tLP_ORDER_CPT,\r\n-\t\t'_order_total',\r\n-\t\t'lp-completed'\r\n-\t);\r\n-\r\n-\t$total = $wpdb->get_results( $query )[0]->order_total;\r\n-\r\n-\treturn learn_press_format_price( $total, true );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Defines functions related to order\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FFunctions\n+ * @version 1.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Generate unique key for an order.\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_generate_order_key() {\n+\treturn apply_filters( 'learn-press\u002Forder-key', strtoupper( uniqid( 'ORDER' ) ) );\n+}\n+\n+\u002F**\n+ * Update Order status\n+ *\n+ * @param int\n+ * @param string\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_update_order_status( $order_id, $status = '' ) {\n+\t$order = new LP_Order( $order_id );\n+\tif ( $order ) {\n+\t\treturn $order->update_status( $status );\n+\t}\n+\n+\treturn false;\n+}\n+\n+\u002F**\n+ * Add order item meta data.\n+ *\n+ * @param int    $item_id\n+ * @param string $meta_key\n+ * @param mixed  $meta_value\n+ * @param string $prev_value\n+ *\n+ * @return false|int\n+ *\u002F\n+function learn_press_add_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn add_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+\u002F**\n+ * Update order item meta data.\n+ *\n+ * @param int    $item_id\n+ * @param string $meta_key\n+ * @param mixed  $meta_value\n+ * @param string $prev_value\n+ *\n+ * @return bool|int\n+ *\u002F\n+function learn_press_update_order_item_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn update_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+\u002F**\n+ * Delete order item meta data.\n+ *\n+ * @param int    $item_id\n+ * @param string $meta_key\n+ * @param mixed  $meta_value\n+ * @param bool   $delete_all\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_delete_order_item_meta( $item_id, $meta_key, $meta_value, $delete_all = false ) {\n+\treturn delete_metadata( 'learnpress_order_item', $item_id, $meta_key, $meta_value, $delete_all );\n+}\n+\n+\u002F**\n+ * Get order item meta data.\n+ *\n+ * @param int    $item_id\n+ * @param string $meta_key\n+ * @param bool   $single\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_order_item_meta( $item_id, $meta_key, $single = true ) {\n+\treturn get_metadata( 'learnpress_order_item', $item_id, $meta_key, $single );\n+}\n+\n+\u002F**\n+ * Get order\n+ *\n+ * @param mixed $the_order\n+ *\n+ * @return LP_Order|bool object instance\n+ *\u002F\n+function learn_press_get_order( $the_order = false ) {\n+\tglobal $post;\n+\t$the_id = 0;\n+\tif ( false === $the_order && is_a( $post, 'WP_Post' ) && LP_ORDER_CPT === get_post_type( $post ) ) {\n+\t\t$the_id = $post->ID;\n+\t} elseif ( is_numeric( $the_order ) ) {\n+\t\t$the_id = $the_order;\n+\t} elseif ( $the_order instanceof LP_Order ) {\n+\t\t$the_id = $the_order->get_id();\n+\t} elseif ( ! empty( $the_order->ID ) ) {\n+\t\t$the_id = $the_order->ID;\n+\t}\n+\n+\tif ( LP_ORDER_CPT != get_post_type( $the_id ) ) {\n+\t\treturn false;\n+\t}\n+\n+\treturn new LP_Order( $the_id );\n+}\n+\n+\u002F**\n+ * Count orders by it's status\n+ *\n+ * @param array $args\n+ * @Todo tungnx review to rewrite query\n+ * @return array\n+ *\u002F\n+function learn_press_count_orders( $args = array() ) {\n+\tif ( is_string( $args ) ) {\n+\t\t$args = array( 'status' => $args );\n+\t} else {\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'status' => '',\n+\t\t\t)\n+\t\t);\n+\t}\n+\tglobal $wpdb;\n+\t$statuses = $args['status'];\n+\n+\tif ( ! $statuses ) {\n+\t\t$statuses = array_keys( LP_Order::get_order_statuses() );\n+\t}\n+\n+\tsettype( $statuses, 'array' );\n+\t$size_of_status = sizeof( $statuses );\n+\n+\tforeach ( $statuses as $k => $status ) {\n+\t\t$statuses[ $k ] = ! preg_match( '~^lp-~', $status ) ? 'lp-' . $status : $status;\n+\t}\n+\n+\t$format     = array_fill( 0, $size_of_status, '%s' );\n+\t$counts     = array_fill_keys( $statuses, 0 );\n+\t$statuses[] = LP_ORDER_CPT;\n+\t$query      = $wpdb->prepare(\n+\t\t\"\n+\t\tSELECT COUNT(ID) AS count, post_status AS status\n+\t\tFROM {$wpdb->posts} o\n+\t\tWHERE post_status IN(\" . join( ',', $format ) . ')\n+\t\tAND post_type = %s\n+\t\tGROUP BY o.post_status\n+\t',\n+\t\t$statuses\n+\t);\n+\n+\t$results = $wpdb->get_results( $query );\n+\tif ( $results ) {\n+\t\tforeach ( $results as $result ) {\n+\t\t\tif ( array_key_exists( $result->status, $counts ) ) {\n+\t\t\t\t$counts[ $result->status ] = absint( $result->count );\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn $size_of_status > 1 ? $counts : reset( $counts );\n+}\n+\n+\u002F**\n+ * Format price with currency and other settings.\n+ *\n+ * @param float $price\n+ * @param string $currency\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_format_price( $price = 0, $currency = '' ): string {\n+\tif ( ! is_numeric( $price ) ) {\n+\t\t$price = 0;\n+\t}\n+\n+\t$before = $after = '';\n+\n+\t$currency            = esc_html(\n+\t\tis_string( $currency ) && '' !== $currency\n+\t\t\t? $currency\n+\t\t\t: learn_press_get_currency_symbol()\n+\t);\n+\t$thousands_separator = esc_html( LP_Settings::get_option( 'thousands_separator', ',' ) );\n+\t$number_of_decimals  = esc_html( LP_Settings::get_option( 'number_of_decimals', 2 ) );\n+\t$decimals_separator  = esc_html( LP_Settings::get_option( 'decimals_separator', '.' ) );\n+\n+\tswitch ( LP_Settings::get_option( 'currency_pos' ) ) {\n+\t\tdefault:\n+\t\t\t$before = $currency;\n+\t\t\tbreak;\n+\t\tcase 'left_with_space':\n+\t\t\t$before = $currency . ' ';\n+\t\t\tbreak;\n+\t\tcase 'right':\n+\t\t\t$after = $currency;\n+\t\t\tbreak;\n+\t\tcase 'right_with_space':\n+\t\t\t$after = ' ' . $currency;\n+\t}\n+\n+\treturn $before . number_format( $price, $number_of_decimals, $decimals_separator, $thousands_separator ) . $after;\n+}\n+\n+\u002F**\n+ * Update\n+ *\n+ * @param $order_id\n+ *\n+ * @return array|bool\n+ *\u002F\n+function learn_press_update_order_items( $order_id ) {\n+\t$order = learn_press_get_order( $order_id );\n+\tif ( ! $order ) {\n+\t\treturn false;\n+\t}\n+\n+\t$subtotal = 0;\n+\t$total    = 0;\n+\t$items    = $order->get_items();\n+\n+\tif ( $items ) {\n+\t\tforeach ( $items as $item ) {\n+\t\t\t$subtotal += $item['subtotal'];\n+\t\t\t$total    += $item['total'];\n+\t\t}\n+\t}\n+\n+\tupdate_post_meta( $order_id, '_order_currency', learn_press_get_currency() );\n+\tupdate_post_meta( $order_id, '_prices_include_tax', 'no' );\n+\tupdate_post_meta( $order_id, '_order_subtotal', $subtotal );\n+\tupdate_post_meta( $order_id, '_order_total', $total );\n+\tupdate_post_meta( $order_id, '_order_key', learn_press_generate_order_key() );\n+\tupdate_post_meta( $order_id, '_payment_method', '' );\n+\tupdate_post_meta( $order_id, '_payment_method_title', '' );\n+\tupdate_post_meta( $order_id, '_order_version', '1.0' );\n+\n+\treturn array(\n+\t\t'subtotal' => $subtotal,\n+\t\t'total'    => $total,\n+\t\t'currency' => learn_press_get_currency(),\n+\t);\n+}\n+\n+\u002F**\n+ * Format order's ID in ten numbers. Eg: 0000000XXX.\n+ *\n+ * @param int $order_number\n+ *\n+ * @since 2.0.0\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_transaction_order_number( $order_number ) {\n+\t$formatted_number = apply_filters( 'learn_press_get_order_number', '#' . sprintf( \"%'.010d\", $order_number ), $order_number );\n+\n+\treturn apply_filters( 'learn-press\u002Forder-number-formatted', $formatted_number, $order_number );\n+}\n+\n+\u002F**\n+ * Get list of registered order's statues for registering with wp post's status.\n+ *\n+ * @since 2.0.0\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_get_register_order_statuses() {\n+\t$order_statues = array();\n+\n+\t$order_statues['lp-completed']  = array(\n+\t\t'label'                     => _x( 'Completed', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Completed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Completed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\t$order_statues['lp-pending']    = array(\n+\t\t'label'                     => _x( 'Pending', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Pending Payment \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Pending Payment \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\t$order_statues['lp-processing'] = array(\n+\t\t'label'                     => _x( 'Processing', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Processing \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Processing \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\t$order_statues['lp-cancelled']  = array(\n+\t\t'label'                     => _x( 'Cancelled', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Cancelled \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Cancelled \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\t$order_statues['lp-failed']     = array(\n+\t\t'label'                     => _x( 'Failed', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Failed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Failed \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\t$order_statues['trash']         = array(\n+\t\t'label'                     => _x( 'Trash', 'Order status', 'learnpress' ),\n+\t\t'public'                    => false,\n+\t\t'exclude_from_search'       => false,\n+\t\t'show_in_admin_all_list'    => true,\n+\t\t'show_in_admin_status_list' => true,\n+\t\t'label_count'               => _n_noop( 'Trash \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'Trash \u003Cspan class=\"count\">(%s)\u003C\u002Fspan>', 'learnpress' ),\n+\t);\n+\n+\treturn $order_statues;\n+}\n+\n+function _learn_press_get_order_status_description( $status ) {\n+\t$descriptions = array(\n+\t\t'pending'    => __( 'Order received in case a user purchases a course but doesn\\'t finalize the order.', 'learnpress' ),\n+\t\t'processing' => __( 'Payment received and the order is awaiting fulfillment.', 'learnpress' ),\n+\t\t'completed'  => __( 'The order is fulfilled and completed.', 'learnpress' ),\n+\t\t'cancelled'  => __( 'The order is cancelled by an admin or the customer.', 'learnpress' ),\n+\t);\n+\n+\treturn apply_filters( 'learn_press_order_status_description', ! empty( $descriptions[ $status ] ) ? $descriptions[ $status ] : '' );\n+}\n+\n+\u002F**\n+ * Get status of an order by the ID.\n+ *\n+ * @param int $order_id\n+ *\n+ * @return bool|string\n+ *\u002F\n+function learn_press_get_order_status( $order_id ) {\n+\t$order = learn_press_get_order( $order_id );\n+\n+\tif ( $order ) {\n+\t\treturn $order->get_status();\n+\t}\n+\n+\treturn false;\n+}\n+\n+if ( ! function_exists( 'learn_press_cancel_order_process' ) ) {\n+\t\u002F**\n+\t * Process action allows user to cancel an order is pending\n+\t * in their profile.\n+\t *\u002F\n+\tfunction learn_press_cancel_order_process() {\n+\t\tif ( empty( $_REQUEST['cancel-order'] ) || empty( $_REQUEST['lp-nonce'] ) ||\n+\t\t\t! wp_verify_nonce( $_REQUEST['lp-nonce'], 'cancel-order' ) || is_admin() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user_id = get_current_user_id();\n+\t\t$profile = LP_Profile::instance( $user_id );\n+\t\t$url     = $profile->get_tab_link(\n+\t\t\tLP_Settings::instance()->get( 'profile_endpoints.orders', 'orders' )\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$message = [\n+\t\t\t\t'status'  => 'error',\n+\t\t\t\t'content' => '',\n+\t\t\t];\n+\n+\t\t\t$order_id = absint( $_REQUEST['cancel-order'] );\n+\t\t\t$order    = learn_press_get_order( $order_id );\n+\n+\t\t\tif ( ! $order ) {\n+\t\t\t\tthrow new Exception( sprintf( __( 'Order number \u003Cstrong>%s\u003C\u002Fstrong> not found', 'learnpress' ), $order_id ) );\n+\t\t\t}\n+\n+\t\t\t$user_ids = (array) $order->get_user_id();\n+\t\t\tif ( ! in_array( $user_id, $user_ids ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to cancel this order.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $order->has_status( LP_ORDER_PENDING ) ) {\n+\t\t\t\t$order->update_status( LP_ORDER_CANCELLED );\n+\t\t\t\t$order->add_note( __( 'The order is cancelled by the customer', 'learnpress' ) );\n+\n+\t\t\t\t$message['status']  = 'success';\n+\t\t\t\t$message['content'] = sprintf( __( 'Order number \u003Cstrong>%s\u003C\u002Fstrong> has been cancelled', 'learnpress' ), $order->get_order_number() );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'The order number \u003Cstrong>%s\u003C\u002Fstrong> can not be cancelled.', 'learnpress' ),\n+\t\t\t\t\t$order->get_order_number()\n+\t\t\t\t);\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$message['content'] = $e->getMessage();\n+\t\t}\n+\n+\t\tlearn_press_set_message( $message );\n+\t\twp_safe_redirect( $url );\n+\t\texit();\n+\t}\n+}\n+add_action( 'init', 'learn_press_cancel_order_process' );\n+\n+\n+\u002F**\n+ * get total price order complete\n+ *\n+ *\u002F\n+\n+function learn_press_get_total_price_order_complete() {\n+\tglobal $wpdb;\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"SELECT SUM(meta_value) as order_total From `{$wpdb->prefix}postmeta` as mt\n+\t\tINNER JOIN `{$wpdb->prefix}posts` as p ON p.id = mt.post_id\n+\t\tWHERE p.post_type = %s AND mt.meta_key = %s\n+\t\tAND p.post_status = %s\n+\t\t\",\n+\t\tLP_ORDER_CPT,\n+\t\t'_order_total',\n+\t\t'lp-completed'\n+\t);\n+\n+\t$total = $wpdb->get_results( $query )[0]->order_total;\n+\n+\treturn learn_press_format_price( $total, true );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-answers.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-answers.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-answers.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-answers.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,559 +1,559 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Question_Answers\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_Answers' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_Answers\r\n-\t *\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tclass LP_Question_Answers {\r\n-\t\t\u002F**\r\n-\t\t * Answers\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_answers = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Current position of answers.\r\n-\t\t *\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected $_position = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_randomize_options = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Original positions of answers (maybe useful later).\r\n-\t\t *\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_origin_positions = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Question\r\n-\t\t *\u002F\r\n-\t\tprotected $_question = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Answers constructor.\r\n-\t\t *\r\n-\t\t * @param LP_Question $question\r\n-\t\t * @param mixed       $raw\r\n-\t\t *\r\n-\t\t * @param             $raw\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $question, $raw ) {\r\n-\t\t\t$this->_question = $question;\r\n-\t\t\t$this->_init( $raw );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set option randomize answer options.\r\n-\t\t *\r\n-\t\t * @param bool $randomize\r\n-\t\t *\u002F\r\n-\t\tpublic function set_randomize_options( $randomize ) {\r\n-\t\t\t$this->_randomize_options = (bool) $randomize;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get randomize options.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_randomize_options() {\r\n-\t\t\treturn $this->_randomize_options;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Init answer options.\r\n-\t\t *\r\n-\t\t * @param array $raw\r\n-\t\t *\u002F\r\n-\t\tprotected function _init( $raw ) {\r\n-\t\t\tif ( ! $raw ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $raw as $data ) {\r\n-\t\t\t\t$key                    = isset( $data['question_answer_id'] ) ? $data['question_answer_id'] : 0;\r\n-\t\t\t\t$answer                 = new LP_Question_Answer_Option( $this->_question, $data );\r\n-\t\t\t\t$this->_answers[ $key ] = $answer;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Keep origin positions\r\n-\t\t\t$this->_origin_positions = array_keys( $this->_answers );\r\n-\r\n-\t\t\t\u002F\u002F shuffle\r\n-\t\t\tif ( $this->_randomize_options ) {\r\n-\t\t\t\t$this->_shuffle();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answers(): array {\r\n-\t\t\treturn $this->_answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set new option for an answer\r\n-\t\t *\r\n-\t\t * @param int|array $id\r\n-\t\t * @param mixed     $options\r\n-\t\t *\u002F\r\n-\t\tpublic function set_answer_option( $id, $options = '' ) {\r\n-\t\t\tif ( is_array( $id ) && func_num_args() == 1 ) {\r\n-\t\t\t\t$options = $id;\r\n-\t\t\t\tforeach ( $options as $id => $opts ) {\r\n-\t\t\t\t\t$this->set_answer_option( $id, $opts );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! is_a( $options, 'LP_Question_Answer_Option' ) ) {\r\n-\t\t\t\t\t$options = new LP_Question_Answer_Option( $this->_question, $options );\r\n-\t\t\t\t}\r\n-\t\t\t\t$this->_answers[ $id ] = $options;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function remove_answer_option( $id ) {\r\n-\t\t\tif ( isset( $this->_answers[ $id ] ) ) {\r\n-\t\t\t\tunset( $this->_answers[ $id ] );\r\n-\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tpublic function clear_answer_options() {\r\n-\t\t\t$this->_answers = array();\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return LP_Question\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question() {\r\n-\t\t\treturn $this->_question;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question_id() {\r\n-\t\t\treturn $this->_question->get_id();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_ids() {\r\n-\t\t\treturn array_keys( $this->_answers );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Is exists an answer option with passed offset?\r\n-\t\t *\r\n-\t\t * @param string|int $offset\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetExists( $offset ) {\r\n-\t\t\treturn array_key_exists( $offset, $this->_answers );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get answer option by offset.\r\n-\t\t *\r\n-\t\t * @param mixed $offset\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetGet( $offset ) {\r\n-\t\t\treturn $this->offsetExists( $offset ) ? $this->_answers[ $offset ] : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set answer option by offset.\r\n-\t\t *\r\n-\t\t * @param int|string $offset\r\n-\t\t * @param mixed      $value\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t\t$this->_answers[ $offset ] = $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Unset answer option by offset.\r\n-\t\t *\r\n-\t\t * @param int|string $offset\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetUnset( $offset ) {\r\n-\t\t\tif ( $this->offsetExists( $offset ) ) {\r\n-\t\t\t\tunset( $this->_answers[ $offset ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Reset current position of answer options.\r\n-\t\t *\u002F\r\n-\t\tpublic function rewind() {\r\n-\t\t\t$this->_position = 0;\r\n-\t\t\tif ( $this->_randomize_options ) {\r\n-\t\t\t\t$this->_shuffle();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function current() {\r\n-\t\t\t$values = array_values( $this->_answers );\r\n-\r\n-\t\t\treturn $values[ $this->_position ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function key() {\r\n-\t\t\t$keys = array_keys( $this->_answers );\r\n-\r\n-\t\t\treturn $keys[ $this->_position ];\u002F\u002F $this->_position;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Nex question.\r\n-\t\t *\u002F\r\n-\t\tpublic function next() {\r\n-\t\t\t++ $this->_position;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function valid() {\r\n-\t\t\t$values = array_values( $this->_answers );\r\n-\r\n-\t\t\treturn isset( $values[ $this->_position ] );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shuffle options\r\n-\t\t *\u002F\r\n-\t\tprotected function _shuffle() {\r\n-\t\t\tLP_Helper::shuffle_assoc( $this->_answers );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.2.7.6\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_class( $more = '' ) {\r\n-\t\t\t$classes = array( 'answer-options' );\r\n-\t\t\tif ( $more && is_string( $more ) ) {\r\n-\t\t\t\t$more = explode( ' ', $more );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $more && is_array( $more ) ) {\r\n-\t\t\t\t$classes = array_merge( $classes, $more );\r\n-\t\t\t}\r\n-\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' ) {\r\n-\t\t\t\t$classes[] = 'disabled';\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F sanitize unwanted classes\r\n-\t\t\t$classes = LP_Helper::sanitize_array( $classes );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options\u002Fclasses', $classes, $this );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return an answer from a position.\r\n-\t\t *\r\n-\t\t * @param int $at\r\n-\t\t *\r\n-\t\t * @return LP_Question_Answer_Option|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answer_at( $at ) {\r\n-\t\t\t$position = 0;\r\n-\t\t\tforeach ( $this->_answers as $answer ) {\r\n-\t\t\t\tif ( $position == $at ) {\r\n-\t\t\t\t\treturn $answer;\r\n-\t\t\t\t}\r\n-\t\t\t\t$position ++;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $more\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function answers_class( $more = '' ) {\r\n-\t\t\t$classes = $this->get_class( $more );\r\n-\t\t\techo 'class=\"' . join( ' ', $classes ) . '\"';\r\n-\t\t}*\u002F\r\n-\t}\r\n-}\r\n-\r\n-if ( ! class_exists( 'LP_Question_Answer_Option' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Question_Answer_Option\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tclass LP_Question_Answer_Option {\r\n-\t\t\u002F**\r\n-\t\t * Option data\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Question\r\n-\t\t *\u002F\r\n-\t\tprotected $_question = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Answer_Option constructor.\r\n-\t\t *\r\n-\t\t * @param LP_Question $question\r\n-\t\t * @param mixed       $data\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $question, $data ) {\r\n-\t\t\t$this->_data     = $data;\r\n-\t\t\t$this->_question = $question;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get option title.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_title( $context = '' ) {\r\n-\t\t\t$title = array_key_exists( 'title', $this->_data ) ? $this->_data['title'] : '';\r\n-\t\t\tif ( $context == 'display' ) {\r\n-\t\t\t\t$title = do_shortcode( $title );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-title', $title, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get option value.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_value() {\r\n-\t\t\t$value = array_key_exists( 'value', $this->_data ) ? $this->_data['value'] : '';\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-value', $value, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if option is TRUE\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_true(): bool {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-is-true', array_key_exists( 'is_true', $this->_data ) && $this->_data['is_true'] === 'yes', $this );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_id() {\r\n-\t\t\treturn $this->_data['question_answer_id'] ?? 0;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * CSS class for option\r\n-\t\t *\r\n-\t\t * @param string $more\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @deprecated 4.2.7.6\r\n-\t\t *\u002F\r\n-\u002F\u002F\t\tpublic function get_class( $more = '' ) {\r\n-\u002F\u002F\t\t\t$classes = array( 'answer-option' );\r\n-\u002F\u002F\t\t\tif ( $more && is_string( $more ) ) {\r\n-\u002F\u002F\t\t\t\t$more = explode( ' ', $more );\r\n-\u002F\u002F\t\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\tif ( $more && is_array( $more ) ) {\r\n-\u002F\u002F\t\t\t\t$classes = array_merge( $classes, $more );\r\n-\u002F\u002F\t\t\t}\r\n-\u002F\u002F\t\t\t$is_checked = $this->is_checked();\r\n-\u002F\u002F\t\t\t$is_true    = $this->is_true();\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' ) {\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\t\tif ( $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answer-correct';\r\n-\u002F\u002F\t\t\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\t\tif ( $is_checked ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answer-selected';\r\n-\u002F\u002F\t\t\t\t}\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\t\tif ( $is_checked && $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answered-correct';\r\n-\u002F\u002F\t\t\t\t} elseif ( $is_checked && ! $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\r\n-\u002F\u002F\t\t\t\t} elseif ( ! $is_checked && $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\r\n-\u002F\u002F\t\t\t\t}\r\n-\u002F\u002F\t\t\t}\r\n-\u002F\u002F\t\t\t\u002F*elseif ( learn_press_is_review_questions() ) {\r\n-\u002F\u002F\t\t\t\tif ( $is_checked && $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answered-correct';\r\n-\u002F\u002F\t\t\t\t} elseif ( $is_checked && ! $is_true ) {\r\n-\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\r\n-\u002F\u002F\t\t\t\t}\r\n-\u002F\u002F\t\t\t}*\u002F\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\t\u002F\u002F sanitize unwanted classes\r\n-\u002F\u002F\t\t\t$classes = LP_Helper::sanitize_array( $classes );\r\n-\u002F\u002F\r\n-\u002F\u002F\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-option\u002Fclasses', $classes, $this );\r\n-\u002F\u002F\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param bool $echo\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function checked( $echo = true ) {\r\n-\t\t\treturn checked( $this->is_checked(), true, $echo );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param bool $echo\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function disabled( $echo = true ) {\r\n-\t\t\t$q        = $this->_question;\r\n-\t\t\t$disabled = ( $q->show_correct_answers() === 'yes' ) || ( $q->disable_answers() === 'yes' );\r\n-\r\n-\t\t\treturn disabled( $disabled, true, $echo );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answered() {\r\n-\t\t\treturn $this->get_question()->get_answered();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_checked() {\r\n-\t\t\tif ( false === $this->get_answered() ) {\r\n-\t\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' && $this->is_true() ) {\r\n-\r\n-\t\t\t\t\treturn true;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn in_array( $this->get_value(), (array) $this->get_answered() );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|LP_Question\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question() {\r\n-\t\t\treturn $this->_question;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question_id() {\r\n-\t\t\treturn $this->_question->get_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Print class attribute\r\n-\t\t *\r\n-\t\t * @param string $more\r\n-\t\t * @deprecated 4.2.7.6\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function option_class( $more = '' ) {\r\n-\t\t\techo 'class=\"' . join( ' ', $this->get_class( $more ) ) . '\"';\r\n-\t\t}*\u002F\r\n-\r\n-\t\tpublic function get_data() {\r\n-\t\t\treturn $this->_data;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_meta( $key, $single = true ) {\r\n-\t\t\treturn learn_press_get_question_answer_meta( $this->get_id(), $key, $single );\r\n-\t\t}\r\n-\r\n-\t\tpublic function __toString() {\r\n-\t\t\treturn (string) $this->_data['title'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Backward compatibility for accessing property as array.\r\n-\t\t *\r\n-\t\t * @param mixed $offset\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetExists( $offset ) {\r\n-\t\t\treturn array_key_exists( $offset, $this->_data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Backward compatibility for get property as array.\r\n-\t\t *\r\n-\t\t * @param mixed $offset\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetGet( $offset ) {\r\n-\t\t\treturn $this->offsetExists( $offset ) ? $this->_data[ $offset ] : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Backward compatibility for set property as array.\r\n-\t\t *\r\n-\t\t * @param mixed $offset\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t\t$this->_data[ $offset ] = $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Backward compatibility for unset property as array.\r\n-\t\t *\r\n-\t\t * @param mixed $offset\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetUnset( $offset ) {\r\n-\t\t\tif ( $this->offsetExists( $offset ) ) {\r\n-\t\t\t\tunset( $this->_data[ $offset ] );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Question_Answers\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_Answers' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_Answers\n+\t *\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tclass LP_Question_Answers {\n+\t\t\u002F**\n+\t\t * Answers\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_answers = array();\n+\n+\t\t\u002F**\n+\t\t * Current position of answers.\n+\t\t *\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected $_position = 0;\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_randomize_options = false;\n+\n+\t\t\u002F**\n+\t\t * Original positions of answers (maybe useful later).\n+\t\t *\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_origin_positions = false;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Question\n+\t\t *\u002F\n+\t\tprotected $_question = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Answers constructor.\n+\t\t *\n+\t\t * @param LP_Question $question\n+\t\t * @param mixed       $raw\n+\t\t *\n+\t\t * @param             $raw\n+\t\t *\u002F\n+\t\tpublic function __construct( $question, $raw ) {\n+\t\t\t$this->_question = $question;\n+\t\t\t$this->_init( $raw );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set option randomize answer options.\n+\t\t *\n+\t\t * @param bool $randomize\n+\t\t *\u002F\n+\t\tpublic function set_randomize_options( $randomize ) {\n+\t\t\t$this->_randomize_options = (bool) $randomize;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get randomize options.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function get_randomize_options() {\n+\t\t\treturn $this->_randomize_options;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Init answer options.\n+\t\t *\n+\t\t * @param array $raw\n+\t\t *\u002F\n+\t\tprotected function _init( $raw ) {\n+\t\t\tif ( ! $raw ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tforeach ( $raw as $data ) {\n+\t\t\t\t$key                    = isset( $data['question_answer_id'] ) ? $data['question_answer_id'] : 0;\n+\t\t\t\t$answer                 = new LP_Question_Answer_Option( $this->_question, $data );\n+\t\t\t\t$this->_answers[ $key ] = $answer;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Keep origin positions\n+\t\t\t$this->_origin_positions = array_keys( $this->_answers );\n+\n+\t\t\t\u002F\u002F shuffle\n+\t\t\tif ( $this->_randomize_options ) {\n+\t\t\t\t$this->_shuffle();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_answers(): array {\n+\t\t\treturn $this->_answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set new option for an answer\n+\t\t *\n+\t\t * @param int|array $id\n+\t\t * @param mixed     $options\n+\t\t *\u002F\n+\t\tpublic function set_answer_option( $id, $options = '' ) {\n+\t\t\tif ( is_array( $id ) && func_num_args() == 1 ) {\n+\t\t\t\t$options = $id;\n+\t\t\t\tforeach ( $options as $id => $opts ) {\n+\t\t\t\t\t$this->set_answer_option( $id, $opts );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( ! is_a( $options, 'LP_Question_Answer_Option' ) ) {\n+\t\t\t\t\t$options = new LP_Question_Answer_Option( $this->_question, $options );\n+\t\t\t\t}\n+\t\t\t\t$this->_answers[ $id ] = $options;\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function remove_answer_option( $id ) {\n+\t\t\tif ( isset( $this->_answers[ $id ] ) ) {\n+\t\t\t\tunset( $this->_answers[ $id ] );\n+\n+\t\t\t\treturn true;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tpublic function clear_answer_options() {\n+\t\t\t$this->_answers = array();\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return LP_Question\n+\t\t *\u002F\n+\t\tpublic function get_question() {\n+\t\t\treturn $this->_question;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_question_id() {\n+\t\t\treturn $this->_question->get_id();\n+\t\t}\n+\n+\t\tpublic function get_ids() {\n+\t\t\treturn array_keys( $this->_answers );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Is exists an answer option with passed offset?\n+\t\t *\n+\t\t * @param string|int $offset\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function offsetExists( $offset ) {\n+\t\t\treturn array_key_exists( $offset, $this->_answers );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get answer option by offset.\n+\t\t *\n+\t\t * @param mixed $offset\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function offsetGet( $offset ) {\n+\t\t\treturn $this->offsetExists( $offset ) ? $this->_answers[ $offset ] : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set answer option by offset.\n+\t\t *\n+\t\t * @param int|string $offset\n+\t\t * @param mixed      $value\n+\t\t *\u002F\n+\t\tpublic function offsetSet( $offset, $value ) {\n+\t\t\t$this->_answers[ $offset ] = $value;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Unset answer option by offset.\n+\t\t *\n+\t\t * @param int|string $offset\n+\t\t *\u002F\n+\t\tpublic function offsetUnset( $offset ) {\n+\t\t\tif ( $this->offsetExists( $offset ) ) {\n+\t\t\t\tunset( $this->_answers[ $offset ] );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Reset current position of answer options.\n+\t\t *\u002F\n+\t\tpublic function rewind() {\n+\t\t\t$this->_position = 0;\n+\t\t\tif ( $this->_randomize_options ) {\n+\t\t\t\t$this->_shuffle();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function current() {\n+\t\t\t$values = array_values( $this->_answers );\n+\n+\t\t\treturn $values[ $this->_position ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function key() {\n+\t\t\t$keys = array_keys( $this->_answers );\n+\n+\t\t\treturn $keys[ $this->_position ];\u002F\u002F $this->_position;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Nex question.\n+\t\t *\u002F\n+\t\tpublic function next() {\n+\t\t\t++ $this->_position;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function valid() {\n+\t\t\t$values = array_values( $this->_answers );\n+\n+\t\t\treturn isset( $values[ $this->_position ] );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Shuffle options\n+\t\t *\u002F\n+\t\tprotected function _shuffle() {\n+\t\t\tLP_Helper::shuffle_assoc( $this->_answers );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.2.7.6\n+\t\t *\u002F\n+\t\t\u002F*public function get_class( $more = '' ) {\n+\t\t\t$classes = array( 'answer-options' );\n+\t\t\tif ( $more && is_string( $more ) ) {\n+\t\t\t\t$more = explode( ' ', $more );\n+\t\t\t}\n+\n+\t\t\tif ( $more && is_array( $more ) ) {\n+\t\t\t\t$classes = array_merge( $classes, $more );\n+\t\t\t}\n+\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' ) {\n+\t\t\t\t$classes[] = 'disabled';\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F sanitize unwanted classes\n+\t\t\t$classes = LP_Helper::sanitize_array( $classes );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options\u002Fclasses', $classes, $this );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Return an answer from a position.\n+\t\t *\n+\t\t * @param int $at\n+\t\t *\n+\t\t * @return LP_Question_Answer_Option|mixed\n+\t\t *\u002F\n+\t\tpublic function get_answer_at( $at ) {\n+\t\t\t$position = 0;\n+\t\t\tforeach ( $this->_answers as $answer ) {\n+\t\t\t\tif ( $position == $at ) {\n+\t\t\t\t\treturn $answer;\n+\t\t\t\t}\n+\t\t\t\t$position ++;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $more\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\t\u002F*public function answers_class( $more = '' ) {\n+\t\t\t$classes = $this->get_class( $more );\n+\t\t\techo 'class=\"' . join( ' ', $classes ) . '\"';\n+\t\t}*\u002F\n+\t}\n+}\n+\n+if ( ! class_exists( 'LP_Question_Answer_Option' ) ) {\n+\t\u002F**\n+\t * Class LP_Question_Answer_Option\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tclass LP_Question_Answer_Option {\n+\t\t\u002F**\n+\t\t * Option data\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Question\n+\t\t *\u002F\n+\t\tprotected $_question = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Answer_Option constructor.\n+\t\t *\n+\t\t * @param LP_Question $question\n+\t\t * @param mixed       $data\n+\t\t *\u002F\n+\t\tpublic function __construct( $question, $data ) {\n+\t\t\t$this->_data     = $data;\n+\t\t\t$this->_question = $question;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get option title.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_title( $context = '' ) {\n+\t\t\t$title = array_key_exists( 'title', $this->_data ) ? $this->_data['title'] : '';\n+\t\t\tif ( $context == 'display' ) {\n+\t\t\t\t$title = do_shortcode( $title );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-title', $title, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get option value.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_value() {\n+\t\t\t$value = array_key_exists( 'value', $this->_data ) ? $this->_data['value'] : '';\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-value', $value, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if option is TRUE\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_true(): bool {\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Foption-is-true', array_key_exists( 'is_true', $this->_data ) && $this->_data['is_true'] === 'yes', $this );\n+\t\t}\n+\n+\t\tpublic function get_id() {\n+\t\t\treturn $this->_data['question_answer_id'] ?? 0;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * CSS class for option\n+\t\t *\n+\t\t * @param string $more\n+\t\t *\n+\t\t * @return array\n+\t\t * @deprecated 4.2.7.6\n+\t\t *\u002F\n+\u002F\u002F\t\tpublic function get_class( $more = '' ) {\n+\u002F\u002F\t\t\t$classes = array( 'answer-option' );\n+\u002F\u002F\t\t\tif ( $more && is_string( $more ) ) {\n+\u002F\u002F\t\t\t\t$more = explode( ' ', $more );\n+\u002F\u002F\t\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\t\tif ( $more && is_array( $more ) ) {\n+\u002F\u002F\t\t\t\t$classes = array_merge( $classes, $more );\n+\u002F\u002F\t\t\t}\n+\u002F\u002F\t\t\t$is_checked = $this->is_checked();\n+\u002F\u002F\t\t\t$is_true    = $this->is_true();\n+\u002F\u002F\n+\u002F\u002F\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' ) {\n+\u002F\u002F\n+\u002F\u002F\t\t\t\tif ( $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answer-correct';\n+\u002F\u002F\t\t\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\t\t\tif ( $is_checked ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answer-selected';\n+\u002F\u002F\t\t\t\t}\n+\u002F\u002F\n+\u002F\u002F\t\t\t\tif ( $is_checked && $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answered-correct';\n+\u002F\u002F\t\t\t\t} elseif ( $is_checked && ! $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\n+\u002F\u002F\t\t\t\t} elseif ( ! $is_checked && $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\n+\u002F\u002F\t\t\t\t}\n+\u002F\u002F\t\t\t}\n+\u002F\u002F\t\t\t\u002F*elseif ( learn_press_is_review_questions() ) {\n+\u002F\u002F\t\t\t\tif ( $is_checked && $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answered-correct';\n+\u002F\u002F\t\t\t\t} elseif ( $is_checked && ! $is_true ) {\n+\u002F\u002F\t\t\t\t\t$classes[] = 'answered-wrong';\n+\u002F\u002F\t\t\t\t}\n+\u002F\u002F\t\t\t}*\u002F\n+\u002F\u002F\n+\u002F\u002F\t\t\t\u002F\u002F sanitize unwanted classes\n+\u002F\u002F\t\t\t$classes = LP_Helper::sanitize_array( $classes );\n+\u002F\u002F\n+\u002F\u002F\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-option\u002Fclasses', $classes, $this );\n+\u002F\u002F\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param bool $echo\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function checked( $echo = true ) {\n+\t\t\treturn checked( $this->is_checked(), true, $echo );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param bool $echo\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function disabled( $echo = true ) {\n+\t\t\t$q        = $this->_question;\n+\t\t\t$disabled = ( $q->show_correct_answers() === 'yes' ) || ( $q->disable_answers() === 'yes' );\n+\n+\t\t\treturn disabled( $disabled, true, $echo );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_answered() {\n+\t\t\treturn $this->get_question()->get_answered();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_checked() {\n+\t\t\tif ( false === $this->get_answered() ) {\n+\t\t\t\tif ( $this->get_question()->show_correct_answers() === 'yes' && $this->is_true() ) {\n+\n+\t\t\t\t\treturn true;\n+\t\t\t\t}\n+\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn in_array( $this->get_value(), (array) $this->get_answered() );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * @return bool|LP_Question\n+\t\t *\u002F\n+\t\tpublic function get_question() {\n+\t\t\treturn $this->_question;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_question_id() {\n+\t\t\treturn $this->_question->get_id();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Print class attribute\n+\t\t *\n+\t\t * @param string $more\n+\t\t * @deprecated 4.2.7.6\n+\t\t *\u002F\n+\t\t\u002F*public function option_class( $more = '' ) {\n+\t\t\techo 'class=\"' . join( ' ', $this->get_class( $more ) ) . '\"';\n+\t\t}*\u002F\n+\n+\t\tpublic function get_data() {\n+\t\t\treturn $this->_data;\n+\t\t}\n+\n+\t\tpublic function get_meta( $key, $single = true ) {\n+\t\t\treturn learn_press_get_question_answer_meta( $this->get_id(), $key, $single );\n+\t\t}\n+\n+\t\tpublic function __toString() {\n+\t\t\treturn (string) $this->_data['title'];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Backward compatibility for accessing property as array.\n+\t\t *\n+\t\t * @param mixed $offset\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function offsetExists( $offset ) {\n+\t\t\treturn array_key_exists( $offset, $this->_data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Backward compatibility for get property as array.\n+\t\t *\n+\t\t * @param mixed $offset\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function offsetGet( $offset ) {\n+\t\t\treturn $this->offsetExists( $offset ) ? $this->_data[ $offset ] : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Backward compatibility for set property as array.\n+\t\t *\n+\t\t * @param mixed $offset\n+\t\t *\u002F\n+\t\tpublic function offsetSet( $offset, $value ) {\n+\t\t\t$this->_data[ $offset ] = $value;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Backward compatibility for unset property as array.\n+\t\t *\n+\t\t * @param mixed $offset\n+\t\t *\u002F\n+\t\tpublic function offsetUnset( $offset ) {\n+\t\t\tif ( $this->offsetExists( $offset ) ) {\n+\t\t\t\tunset( $this->_data[ $offset ] );\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-fill-in-blanks.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-fill-in-blanks.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-fill-in-blanks.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-fill-in-blanks.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,466 +1,466 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Question_Fill_In_Blanks\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- * @extends LP_Question\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_Fill_In_Blanks' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_Fill_In_Blanks\r\n-\t *\u002F\r\n-\tclass LP_Question_Fill_In_Blanks extends LP_Question {\r\n-\t\t\u002F**\r\n-\t\t * Type of this question.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_question_type = 'fill_in_blanks';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_answer_options = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Fill_In_Blanks constructor.\r\n-\t\t *\r\n-\t\t * @param null $the_question\r\n-\t\t * @param null $args\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_question = null, $args = null ) {\r\n-\t\t\tparent::__construct( $the_question, $args );\r\n-\r\n-\t\t\tadd_filter(\r\n-\t\t\t\t'learn-press\u002Fquestion-editor\u002Flocalize-script',\r\n-\t\t\t\tarray( $this, 'sanitize_question_answers' ),\r\n-\t\t\t\t1000\r\n-\t\t\t);\r\n-\r\n-\t\t\tadd_action( 'learn-press\u002Fbefore-clear-question', array( $this, 'clear_question_answer_meta' ) );\r\n-\r\n-\t\t\tadd_filter(\r\n-\t\t\t\t'learn-press\u002Fquiz-editor\u002Fquestion-answers-data',\r\n-\t\t\t\tarray( $this, 'admin_editor_question_answers' ),\r\n-\t\t\t\t10,\r\n-\t\t\t\t3\r\n-\t\t\t);\r\n-\t\t\tadd_filter(\r\n-\t\t\t\t'learn-press\u002Fquestion-editor\u002Fquestion-answers-data',\r\n-\t\t\t\tarray( $this, 'admin_editor_question_answers' ),\r\n-\t\t\t\t10,\r\n-\t\t\t\t3\r\n-\t\t\t);\r\n-\r\n-\t\t\tadd_filter( 'learn-press\u002Fquestion\u002Ffib\u002Fregex-content', array( $this, 'match_shortcode_api' ), 10, 4 );\r\n-\t\t}\r\n-\r\n-\t\tpublic function fib_get_ids( $content ) {\r\n-\t\t\t$output = array();\r\n-\r\n-\t\t\tif ( ! empty( $content ) ) {\r\n-\t\t\t\tpreg_match_all(\r\n-\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\r\n-\t\t\t\t\t$content,\r\n-\t\t\t\t\t$all_shortcode,\r\n-\t\t\t\t\tPREG_SET_ORDER\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( ! empty( $all_shortcode ) ) {\r\n-\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\r\n-\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\r\n-\r\n-\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\r\n-\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\r\n-\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$ids = $atts['id'];\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$output[] = $ids;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\tpublic function match_shortcode_api( $content, $answer_id, $show_answer = false, $answered = '' ) {\r\n-\t\t\tif ( ! empty( $content ) ) {\r\n-\t\t\t\tpreg_match_all(\r\n-\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\r\n-\t\t\t\t\t$content,\r\n-\t\t\t\t\t$all_shortcode,\r\n-\t\t\t\t\tPREG_SET_ORDER\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( ! empty( $all_shortcode ) ) {\r\n-\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\r\n-\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\r\n-\r\n-\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\r\n-\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\r\n-\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$ids = $atts['id'];\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$fill = $atts['fill'] ?? '';\r\n-\r\n-\t\t\t\t\t\t$new_str = ' {{FIB_' . esc_attr( $ids ) . '}} ';\r\n-\r\n-\t\t\t\t\t\t$content = str_replace( $shortcode[0], $new_str, $content );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_answer_data( $content, $answer_id, $answered = '' ) {\r\n-\t\t\t$output = array();\r\n-\r\n-\t\t\tif ( ! empty( $content ) ) {\r\n-\t\t\t\tpreg_match_all(\r\n-\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\r\n-\t\t\t\t\t$content,\r\n-\t\t\t\t\t$all_shortcode,\r\n-\t\t\t\t\tPREG_SET_ORDER\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( ! empty( $all_shortcode ) ) {\r\n-\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\r\n-\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\r\n-\r\n-\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\r\n-\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\r\n-\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$ids = $atts['id'];\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$fill = $atts['fill'] ?? '';\r\n-\r\n-\t\t\t\t\t\tif ( is_array( $answered ) ) {\r\n-\t\t\t\t\t\t\t$answer = $answered[ $ids ] ?? '';\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$answer = '';\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$is_correct = false;\r\n-\r\n-\t\t\t\t\t\t$blanks = learn_press_get_question_answer_meta( $answer_id, '_blanks', true );\r\n-\r\n-\t\t\t\t\t\tif ( ! empty( $blanks ) ) {\r\n-\t\t\t\t\t\t\t$is_correct = $this->check_answer( $blanks[ $ids ] ?? [], $answer );\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$output[ $ids ]['is_correct'] = $is_correct;\r\n-\t\t\t\t\t\t$output[ $ids ]['answer']     = $answer;\r\n-\t\t\t\t\t\t$output[ $ids ]['correct']    = $fill;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t\tpublic function sanitize_question_answers( $data ) {\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\tif ( $post && ( $post->ID == $this->get_id() ) && isset( $data['root'] ) ) {\r\n-\t\t\t\tif ( isset( $data['root']['answers'] ) ) {\r\n-\t\t\t\t\t$answers     = array();\r\n-\t\t\t\t\t$old_answers = reset( $data['root']['answers'] );\r\n-\r\n-\t\t\t\t\tforeach ( $old_answers as $k => $v ) {\r\n-\t\t\t\t\t\tif ( $k == '0' ) {\r\n-\t\t\t\t\t\t\t$answers['title'] = str_replace( array( '=\\\"', '\\\"' ), array( '=\"', '\"' ), $v );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t$answers[ $k ] = $v;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$data['root']['answers'] = array( $answers );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\tpublic function admin_editor_question_answers( $answers, $question_id, $quiz_id ) {\r\n-\t\t\t$question = learn_press_get_question( $question_id );\r\n-\r\n-\t\t\tif ( ! $question ) {\r\n-\t\t\t\treturn $answers;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( 'fill_in_blanks' !== $question->get_type() ) {\r\n-\t\t\t\treturn $answers;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $answers ) {\r\n-\t\t\t\tforeach ( $answers as $k => $answer ) {\r\n-\t\t\t\t\t$blanks                  = learn_press_get_question_answer_meta(\r\n-\t\t\t\t\t\t$answer['question_answer_id'],\r\n-\t\t\t\t\t\t'_blanks',\r\n-\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$answers[ $k ]['blanks'] = ! empty( $blanks ) ? array_values( $blanks ) : array();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Clear answer meta of the question\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t *\r\n-\t\t * @since 4.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function clear_question_answer_meta( $question_id ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t\t$answers  = $question->get_answers();\r\n-\r\n-\t\t\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t\t\t$answer_id          = $answer->get_id();\r\n-\t\t\t\t\t$lp_db              = LP_Database::getInstance();\r\n-\t\t\t\t\t$filter             = new LP_Question_Answermeta_Filter();\r\n-\t\t\t\t\t$filter->collection = $lp_db->tb_lp_question_answermeta;\r\n-\t\t\t\t\t$filter->where[]    = $lp_db->wpdb->prepare( \"AND learnpress_question_answer_id = %s\", $answer_id );\r\n-\t\t\t\t\t$lp_db->delete_execute( $filter );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get answer options of the question\r\n-\t\t *\r\n-\t\t * @param array $args - Optional.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answer_options( $args = array() ) {\r\n-\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'exclude' => '',\r\n-\t\t\t\t\t'map'     => '',\r\n-\t\t\t\t\t'answer'  => '',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $args['exclude'] && is_string( $args['exclude'] ) ) {\r\n-\t\t\t\t$exclude = array_map( 'trim', explode( ',', $args['exclude'] ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$exclude = $args['exclude'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$map = $args['map'];\r\n-\r\n-\t\t\t$options = $this->get_data( 'answer_options' );\r\n-\r\n-\t\t\t\u002F\u002F Remove key if it present in $exclude.\r\n-\t\t\tif ( $options && ( $exclude || $map ) ) {\r\n-\t\t\t\t$exclude = array_flip( $exclude );\r\n-\r\n-\t\t\t\tforeach ( $options as $k => $option ) {\r\n-\t\t\t\t\t$is_true             = ! isset( $exclude['is_true'] );\r\n-\t\t\t\t\t$fib_answer          = ! empty( $args['answer'] ) ? $args['answer'] : '';\r\n-\t\t\t\t\t$title               = $option['title'];\r\n-\t\t\t\t\t$option['title']     = apply_filters( 'learn-press\u002Fquestion\u002Ffib\u002Fregex-content', $title, $option['question_answer_id'], $is_true, $fib_answer );\r\n-\t\t\t\t\t$option['ids']       = $this->fib_get_ids( $title );\r\n-\t\t\t\t\t$option['title_api'] = wp_strip_all_tags( $this->match_shortcode_api( $title, $option['question_answer_id'], $is_true, $fib_answer ) );\r\n-\t\t\t\t\t$option['answers']   = $is_true ? $this->get_answer_data( $title, $option['question_answer_id'], $fib_answer ) : array();\r\n-\r\n-\t\t\t\t\tforeach ( $map as $k_map => $v_map ) {\r\n-\t\t\t\t\t\tif ( array_key_exists( $k_map, $option ) ) {\r\n-\t\t\t\t\t\t\t$option[ $v_map ]  = $option[ $k_map ];\r\n-\t\t\t\t\t\t\t$exclude[ $k_map ] = 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$options[ $k ] = array_diff_key( $option, $exclude );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options', $options, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\r\n-\t\tpublic function get_editor_settings() {\r\n-\t\t\t$blanks = $this->get_data( 'answer_options' );\r\n-\r\n-\t\t\tglobal $post;\r\n-\r\n-\t\t\treturn array_merge(\r\n-\t\t\t\tparent::get_editor_settings(),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'                 => $post->ID,\r\n-\t\t\t\t\t'instantParseBlanks' => true,\r\n-\t\t\t\t\t'blankOptions'       => $blanks ? array_values( $blanks ) : array(),\r\n-\t\t\t\t\t'blankFillsStyle'    => get_post_meta( $post->ID, '_lp_blank_fills_style', true ),\r\n-\t\t\t\t\t'blanksStyle'        => get_post_meta( $post->ID, '_lp_blanks_style', true ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get input name.\r\n-\t\t *\r\n-\t\t * @param $fill\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_input_name( $fill ) {\r\n-\t\t\treturn '_' . md5( wp_create_nonce( $fill ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set text format.\r\n-\t\t *\r\n-\t\t * @param $text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate function _format_text( $text ) {\r\n-\t\t\treturn trim( preg_replace( '!\\s+!', ' ', $text ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_default_answers() {\r\n-\t\t\t$default = array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'is_true' => 'yes',\r\n-\t\t\t\t\t'value'   => '',\r\n-\t\t\t\t\t'title'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $default;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user answer.\r\n-\t\t *\r\n-\t\t * @param null $user_answer\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function check( $user_answer = null ) {\r\n-\t\t\t$return = parent::check();\r\n-\t\t\tsettype( $user_answer, 'array' );\r\n-\t\t\t$answers = $this->get_answers();\r\n-\r\n-\t\t\tif ( $answers ) {\r\n-\t\t\t\tforeach ( $answers as $key => $option ) {\r\n-\t\t\t\t\t$blanks             = $option->get_meta( '_blanks' );\r\n-\t\t\t\t\t$return['blanks']   = array();\r\n-\t\t\t\t\t$return['answered'] = array();\r\n-\r\n-\t\t\t\t\tif ( ! empty( $blanks ) ) {\r\n-\t\t\t\t\t\t$total_field_input    = count( $blanks );\r\n-\t\t\t\t\t\t$total_answer_correct = 0;\r\n-\r\n-\t\t\t\t\t\tforeach ( $user_answer as $answer_id => $answer_value ) {\r\n-\t\t\t\t\t\t\t$answer_id = trim( $answer_id );\r\n-\r\n-\t\t\t\t\t\t\tforeach ( $blanks as $blank ) {\r\n-\t\t\t\t\t\t\t\tif ( $answer_id === $blank['id'] ) {\r\n-\t\t\t\t\t\t\t\t\t$user_fill     = trim( $answer_value );\r\n-\t\t\t\t\t\t\t\t\t$blank_correct = $this->check_answer( $blank, $answer_value );\r\n-\r\n-\t\t\t\t\t\t\t\t\t$return['blanks'][ $answer_id ]   = $blank_correct;\r\n-\t\t\t\t\t\t\t\t\t$return['answered'][ $answer_id ] = $user_fill;\r\n-\r\n-\t\t\t\t\t\t\t\t\tif ( $blank_correct ) {\r\n-\t\t\t\t\t\t\t\t\t\t$total_answer_correct++;\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( $total_answer_correct === $total_field_input ) {\r\n-\t\t\t\t\t\t\t$return['correct'] = true;\r\n-\t\t\t\t\t\t\t$return['mark']    = $this->get_mark();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question = $this;\r\n-\t\t\t$data     = compact( 'user_answer', 'answers', 'question' );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Ffill-in-blank\u002Fcheck', $return, $data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check answer fill in blank\r\n-\t\t *\r\n-\t\t * @param array $blank\r\n-\t\t * @param $user_fill\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function check_answer( array $blank, $user_fill ): bool {\r\n-\t\t\t$fill       = trim( $blank['fill'] ?? '' );\r\n-\t\t\t$comparison = ! empty( $blank['comparison'] ) ? $blank['comparison'] : false;\r\n-\t\t\t$match_case = ! empty( $blank['match_case'] );\r\n-\t\t\t$user_fill  = trim( $user_fill );\r\n-\r\n-\t\t\t$blank_correct = false;\r\n-\r\n-\t\t\tswitch ( $comparison ) {\r\n-\t\t\t\tcase 'range':\r\n-\t\t\t\t\tif ( is_numeric( $user_fill ) ) {\r\n-\t\t\t\t\t\t$fill      = explode( ',', $fill );\r\n-\t\t\t\t\t\t$words     = array_map( 'trim', $fill );\r\n-\t\t\t\t\t\t$words     = array_map( 'floatval', $fill );\r\n-\t\t\t\t\t\t$user_fill = floatval( $user_fill );\r\n-\r\n-\t\t\t\t\t\tif ( count( $words ) == 2 ) {\r\n-\t\t\t\t\t\t\t$blank_correct = $words[0] \u003C= $user_fill && $user_fill \u003C= $words[1];\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tcase 'any':\r\n-\t\t\t\t\t$fill  = explode( ',', $fill );\r\n-\t\t\t\t\t$words = array_map( 'trim', $fill );\r\n-\r\n-\t\t\t\t\tif ( ! $match_case ) {\r\n-\t\t\t\t\t\t$words     = array_map( 'strtolower', $words );\r\n-\t\t\t\t\t\t$user_fill = strtolower( $user_fill );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$blank_correct = in_array( $user_fill, $words );\r\n-\t\t\t\t\tbreak;\r\n-\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tif ( $match_case ) {\r\n-\t\t\t\t\t\t$blank_correct = strcmp( $user_fill, $fill ) == 0;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$blank_correct = strcasecmp( mb_strtolower( $user_fill, 'UTF-8' ), mb_strtolower( $fill, 'UTF-8' ) ) == 0;\r\n-\t\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data = compact( 'blank', 'user_fill' );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Ffill-in-blank\u002Fcheck_answer', $blank_correct, $data );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * LP_Question_Fill_In_Blanks\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ * @extends LP_Question\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_Fill_In_Blanks' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_Fill_In_Blanks\n+\t *\u002F\n+\tclass LP_Question_Fill_In_Blanks extends LP_Question {\n+\t\t\u002F**\n+\t\t * Type of this question.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_question_type = 'fill_in_blanks';\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_answer_options = false;\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Fill_In_Blanks constructor.\n+\t\t *\n+\t\t * @param null $the_question\n+\t\t * @param null $args\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_question = null, $args = null ) {\n+\t\t\tparent::__construct( $the_question, $args );\n+\n+\t\t\tadd_filter(\n+\t\t\t\t'learn-press\u002Fquestion-editor\u002Flocalize-script',\n+\t\t\t\tarray( $this, 'sanitize_question_answers' ),\n+\t\t\t\t1000\n+\t\t\t);\n+\n+\t\t\tadd_action( 'learn-press\u002Fbefore-clear-question', array( $this, 'clear_question_answer_meta' ) );\n+\n+\t\t\tadd_filter(\n+\t\t\t\t'learn-press\u002Fquiz-editor\u002Fquestion-answers-data',\n+\t\t\t\tarray( $this, 'admin_editor_question_answers' ),\n+\t\t\t\t10,\n+\t\t\t\t3\n+\t\t\t);\n+\t\t\tadd_filter(\n+\t\t\t\t'learn-press\u002Fquestion-editor\u002Fquestion-answers-data',\n+\t\t\t\tarray( $this, 'admin_editor_question_answers' ),\n+\t\t\t\t10,\n+\t\t\t\t3\n+\t\t\t);\n+\n+\t\t\tadd_filter( 'learn-press\u002Fquestion\u002Ffib\u002Fregex-content', array( $this, 'match_shortcode_api' ), 10, 4 );\n+\t\t}\n+\n+\t\tpublic function fib_get_ids( $content ) {\n+\t\t\t$output = array();\n+\n+\t\t\tif ( ! empty( $content ) ) {\n+\t\t\t\tpreg_match_all(\n+\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\n+\t\t\t\t\t$content,\n+\t\t\t\t\t$all_shortcode,\n+\t\t\t\t\tPREG_SET_ORDER\n+\t\t\t\t);\n+\n+\t\t\t\tif ( ! empty( $all_shortcode ) ) {\n+\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\n+\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\n+\n+\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\n+\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\n+\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$ids = $atts['id'];\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$output[] = $ids;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\tpublic function match_shortcode_api( $content, $answer_id, $show_answer = false, $answered = '' ) {\n+\t\t\tif ( ! empty( $content ) ) {\n+\t\t\t\tpreg_match_all(\n+\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\n+\t\t\t\t\t$content,\n+\t\t\t\t\t$all_shortcode,\n+\t\t\t\t\tPREG_SET_ORDER\n+\t\t\t\t);\n+\n+\t\t\t\tif ( ! empty( $all_shortcode ) ) {\n+\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\n+\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\n+\n+\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\n+\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\n+\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$ids = $atts['id'];\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$fill = $atts['fill'] ?? '';\n+\n+\t\t\t\t\t\t$new_str = ' {{FIB_' . esc_attr( $ids ) . '}} ';\n+\n+\t\t\t\t\t\t$content = str_replace( $shortcode[0], $new_str, $content );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\tpublic function get_answer_data( $content, $answer_id, $answered = '' ) {\n+\t\t\t$output = array();\n+\n+\t\t\tif ( ! empty( $content ) ) {\n+\t\t\t\tpreg_match_all(\n+\t\t\t\t\t'\u002F' . get_shortcode_regex( array( 'fib' ) ) . '\u002F',\n+\t\t\t\t\t$content,\n+\t\t\t\t\t$all_shortcode,\n+\t\t\t\t\tPREG_SET_ORDER\n+\t\t\t\t);\n+\n+\t\t\t\tif ( ! empty( $all_shortcode ) ) {\n+\t\t\t\t\tforeach ( $all_shortcode as $shortcode ) {\n+\t\t\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\n+\n+\t\t\t\t\t\tif ( empty( $atts['id'] ) ) {\n+\t\t\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\n+\t\t\t\t\t\t\t$ids = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$ids = $atts['id'];\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$fill = $atts['fill'] ?? '';\n+\n+\t\t\t\t\t\tif ( is_array( $answered ) ) {\n+\t\t\t\t\t\t\t$answer = $answered[ $ids ] ?? '';\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$answer = '';\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$is_correct = false;\n+\n+\t\t\t\t\t\t$blanks = learn_press_get_question_answer_meta( $answer_id, '_blanks', true );\n+\n+\t\t\t\t\t\tif ( ! empty( $blanks ) ) {\n+\t\t\t\t\t\t\t$is_correct = $this->check_answer( $blanks[ $ids ] ?? [], $answer );\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$output[ $ids ]['is_correct'] = $is_correct;\n+\t\t\t\t\t\t$output[ $ids ]['answer']     = $answer;\n+\t\t\t\t\t\t$output[ $ids ]['correct']    = $fill;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t\tpublic function sanitize_question_answers( $data ) {\n+\t\t\tglobal $post;\n+\n+\t\t\tif ( $post && ( $post->ID == $this->get_id() ) && isset( $data['root'] ) ) {\n+\t\t\t\tif ( isset( $data['root']['answers'] ) ) {\n+\t\t\t\t\t$answers     = array();\n+\t\t\t\t\t$old_answers = reset( $data['root']['answers'] );\n+\n+\t\t\t\t\tforeach ( $old_answers as $k => $v ) {\n+\t\t\t\t\t\tif ( $k == '0' ) {\n+\t\t\t\t\t\t\t$answers['title'] = str_replace( array( '=\\\"', '\\\"' ), array( '=\"', '\"' ), $v );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t$answers[ $k ] = $v;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$data['root']['answers'] = array( $answers );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\tpublic function admin_editor_question_answers( $answers, $question_id, $quiz_id ) {\n+\t\t\t$question = learn_press_get_question( $question_id );\n+\n+\t\t\tif ( ! $question ) {\n+\t\t\t\treturn $answers;\n+\t\t\t}\n+\n+\t\t\tif ( 'fill_in_blanks' !== $question->get_type() ) {\n+\t\t\t\treturn $answers;\n+\t\t\t}\n+\n+\t\t\tif ( $answers ) {\n+\t\t\t\tforeach ( $answers as $k => $answer ) {\n+\t\t\t\t\t$blanks                  = learn_press_get_question_answer_meta(\n+\t\t\t\t\t\t$answer['question_answer_id'],\n+\t\t\t\t\t\t'_blanks',\n+\t\t\t\t\t\ttrue\n+\t\t\t\t\t);\n+\t\t\t\t\t$answers[ $k ]['blanks'] = ! empty( $blanks ) ? array_values( $blanks ) : array();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Clear answer meta of the question\n+\t\t *\n+\t\t * @param $question_id\n+\t\t *\n+\t\t * @since 4.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function clear_question_answer_meta( $question_id ) {\n+\t\t\ttry {\n+\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t\t$answers  = $question->get_answers();\n+\n+\t\t\t\tforeach ( $answers as $answer ) {\n+\t\t\t\t\t$answer_id          = $answer->get_id();\n+\t\t\t\t\t$lp_db              = LP_Database::getInstance();\n+\t\t\t\t\t$filter             = new LP_Question_Answermeta_Filter();\n+\t\t\t\t\t$filter->collection = $lp_db->tb_lp_question_answermeta;\n+\t\t\t\t\t$filter->where[]    = $lp_db->wpdb->prepare( \"AND learnpress_question_answer_id = %s\", $answer_id );\n+\t\t\t\t\t$lp_db->delete_execute( $filter );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get answer options of the question\n+\t\t *\n+\t\t * @param array $args - Optional.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_answer_options( $args = array() ) {\n+\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'exclude' => '',\n+\t\t\t\t\t'map'     => '',\n+\t\t\t\t\t'answer'  => '',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $args['exclude'] && is_string( $args['exclude'] ) ) {\n+\t\t\t\t$exclude = array_map( 'trim', explode( ',', $args['exclude'] ) );\n+\t\t\t} else {\n+\t\t\t\t$exclude = $args['exclude'];\n+\t\t\t}\n+\n+\t\t\t$map = $args['map'];\n+\n+\t\t\t$options = $this->get_data( 'answer_options' );\n+\n+\t\t\t\u002F\u002F Remove key if it present in $exclude.\n+\t\t\tif ( $options && ( $exclude || $map ) ) {\n+\t\t\t\t$exclude = array_flip( $exclude );\n+\n+\t\t\t\tforeach ( $options as $k => $option ) {\n+\t\t\t\t\t$is_true             = ! isset( $exclude['is_true'] );\n+\t\t\t\t\t$fib_answer          = ! empty( $args['answer'] ) ? $args['answer'] : '';\n+\t\t\t\t\t$title               = $option['title'];\n+\t\t\t\t\t$option['title']     = apply_filters( 'learn-press\u002Fquestion\u002Ffib\u002Fregex-content', $title, $option['question_answer_id'], $is_true, $fib_answer );\n+\t\t\t\t\t$option['ids']       = $this->fib_get_ids( $title );\n+\t\t\t\t\t$option['title_api'] = wp_strip_all_tags( $this->match_shortcode_api( $title, $option['question_answer_id'], $is_true, $fib_answer ) );\n+\t\t\t\t\t$option['answers']   = $is_true ? $this->get_answer_data( $title, $option['question_answer_id'], $fib_answer ) : array();\n+\n+\t\t\t\t\tforeach ( $map as $k_map => $v_map ) {\n+\t\t\t\t\t\tif ( array_key_exists( $k_map, $option ) ) {\n+\t\t\t\t\t\t\t$option[ $v_map ]  = $option[ $k_map ];\n+\t\t\t\t\t\t\t$exclude[ $k_map ] = 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$options[ $k ] = array_diff_key( $option, $exclude );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options', $options, $this->get_id() );\n+\t\t}\n+\n+\n+\t\tpublic function get_editor_settings() {\n+\t\t\t$blanks = $this->get_data( 'answer_options' );\n+\n+\t\t\tglobal $post;\n+\n+\t\t\treturn array_merge(\n+\t\t\t\tparent::get_editor_settings(),\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'                 => $post->ID,\n+\t\t\t\t\t'instantParseBlanks' => true,\n+\t\t\t\t\t'blankOptions'       => $blanks ? array_values( $blanks ) : array(),\n+\t\t\t\t\t'blankFillsStyle'    => get_post_meta( $post->ID, '_lp_blank_fills_style', true ),\n+\t\t\t\t\t'blanksStyle'        => get_post_meta( $post->ID, '_lp_blanks_style', true ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get input name.\n+\t\t *\n+\t\t * @param $fill\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_input_name( $fill ) {\n+\t\t\treturn '_' . md5( wp_create_nonce( $fill ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set text format.\n+\t\t *\n+\t\t * @param $text\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate function _format_text( $text ) {\n+\t\t\treturn trim( preg_replace( '!\\s+!', ' ', $text ) );\n+\t\t}\n+\n+\t\tpublic function get_default_answers() {\n+\t\t\t$default = array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'is_true' => 'yes',\n+\t\t\t\t\t'value'   => '',\n+\t\t\t\t\t'title'   => '',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\treturn $default;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user answer.\n+\t\t *\n+\t\t * @param null $user_answer\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function check( $user_answer = null ) {\n+\t\t\t$return = parent::check();\n+\t\t\tsettype( $user_answer, 'array' );\n+\t\t\t$answers = $this->get_answers();\n+\n+\t\t\tif ( $answers ) {\n+\t\t\t\tforeach ( $answers as $key => $option ) {\n+\t\t\t\t\t$blanks             = $option->get_meta( '_blanks' );\n+\t\t\t\t\t$return['blanks']   = array();\n+\t\t\t\t\t$return['answered'] = array();\n+\n+\t\t\t\t\tif ( ! empty( $blanks ) ) {\n+\t\t\t\t\t\t$total_field_input    = count( $blanks );\n+\t\t\t\t\t\t$total_answer_correct = 0;\n+\n+\t\t\t\t\t\tforeach ( $user_answer as $answer_id => $answer_value ) {\n+\t\t\t\t\t\t\t$answer_id = trim( $answer_id );\n+\n+\t\t\t\t\t\t\tforeach ( $blanks as $blank ) {\n+\t\t\t\t\t\t\t\tif ( $answer_id === $blank['id'] ) {\n+\t\t\t\t\t\t\t\t\t$user_fill     = trim( $answer_value );\n+\t\t\t\t\t\t\t\t\t$blank_correct = $this->check_answer( $blank, $answer_value );\n+\n+\t\t\t\t\t\t\t\t\t$return['blanks'][ $answer_id ]   = $blank_correct;\n+\t\t\t\t\t\t\t\t\t$return['answered'][ $answer_id ] = $user_fill;\n+\n+\t\t\t\t\t\t\t\t\tif ( $blank_correct ) {\n+\t\t\t\t\t\t\t\t\t\t$total_answer_correct++;\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( $total_answer_correct === $total_field_input ) {\n+\t\t\t\t\t\t\t$return['correct'] = true;\n+\t\t\t\t\t\t\t$return['mark']    = $this->get_mark();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$question = $this;\n+\t\t\t$data     = compact( 'user_answer', 'answers', 'question' );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Ffill-in-blank\u002Fcheck', $return, $data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check answer fill in blank\n+\t\t *\n+\t\t * @param array $blank\n+\t\t * @param $user_fill\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function check_answer( array $blank, $user_fill ): bool {\n+\t\t\t$fill       = trim( $blank['fill'] ?? '' );\n+\t\t\t$comparison = ! empty( $blank['comparison'] ) ? $blank['comparison'] : false;\n+\t\t\t$match_case = ! empty( $blank['match_case'] );\n+\t\t\t$user_fill  = trim( $user_fill );\n+\n+\t\t\t$blank_correct = false;\n+\n+\t\t\tswitch ( $comparison ) {\n+\t\t\t\tcase 'range':\n+\t\t\t\t\tif ( is_numeric( $user_fill ) ) {\n+\t\t\t\t\t\t$fill      = explode( ',', $fill );\n+\t\t\t\t\t\t$words     = array_map( 'trim', $fill );\n+\t\t\t\t\t\t$words     = array_map( 'floatval', $fill );\n+\t\t\t\t\t\t$user_fill = floatval( $user_fill );\n+\n+\t\t\t\t\t\tif ( count( $words ) == 2 ) {\n+\t\t\t\t\t\t\t$blank_correct = $words[0] \u003C= $user_fill && $user_fill \u003C= $words[1];\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tcase 'any':\n+\t\t\t\t\t$fill  = explode( ',', $fill );\n+\t\t\t\t\t$words = array_map( 'trim', $fill );\n+\n+\t\t\t\t\tif ( ! $match_case ) {\n+\t\t\t\t\t\t$words     = array_map( 'strtolower', $words );\n+\t\t\t\t\t\t$user_fill = strtolower( $user_fill );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$blank_correct = in_array( $user_fill, $words );\n+\t\t\t\t\tbreak;\n+\n+\t\t\t\tdefault:\n+\t\t\t\t\tif ( $match_case ) {\n+\t\t\t\t\t\t$blank_correct = strcmp( $user_fill, $fill ) == 0;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$blank_correct = strcasecmp( mb_strtolower( $user_fill, 'UTF-8' ), mb_strtolower( $fill, 'UTF-8' ) ) == 0;\n+\t\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$data = compact( 'blank', 'user_fill' );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Ffill-in-blank\u002Fcheck_answer', $blank_correct, $data );\n+\t\t}\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-multi-choice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-multi-choice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-multi-choice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-multi-choice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Question_Multi_Choice\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- * @extend  LP_Question\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_Multi_Choice' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Question_Multi_Choice\r\n-\t *\u002F\r\n-\tclass LP_Question_Multi_Choice extends LP_Question {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Type of this question.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $_question_type = 'multi_choice';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Multi_Choice constructor.\r\n-\t\t *\r\n-\t\t * @param null $the_question\r\n-\t\t * @param null $options\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_question = null, $options = null ) {\r\n-\t\t\tparent::__construct( $the_question, $options );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Allow check answer.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function can_check_answer() {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user answer.\r\n-\t\t *\r\n-\t\t * @param null $user_answer\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function check( $user_answer = null ) {\r\n-\t\t\t$return = parent::check();\r\n-\t\t\tsettype( $user_answer, 'array' );\r\n-\t\t\t$answers = $this->get_answers();\r\n-\r\n-\t\t\tif ( $answers ) {\r\n-\t\t\t\t$correct = true;\r\n-\t\t\t\tforeach ( $answers as $key => $option ) {\r\n-\t\t\t\t\t$data     = $option->get_data();\r\n-\t\t\t\t\t$selected = $this->is_selected_option( $data, $user_answer );\r\n-\r\n-\t\t\t\t\tif ( $selected && ! $option->is_true() ) {\r\n-\t\t\t\t\t\t$correct = false;\r\n-\t\t\t\t\t} elseif ( ! $selected && $option->is_true() ) {\r\n-\t\t\t\t\t\t$correct = false;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Only one option is selected wrong will wrong the answer.\r\n-\t\t\t\t\tif ( ! $correct ) {\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $correct ) {\r\n-\t\t\t\t\t$return = array(\r\n-\t\t\t\t\t\t'correct' => true,\r\n-\t\t\t\t\t\t'mark'    => floatval( $this->get_mark() ),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Question_Multi_Choice\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ * @extend  LP_Question\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_Multi_Choice' ) ) {\n+\t\u002F**\n+\t * Class LP_Question_Multi_Choice\n+\t *\u002F\n+\tclass LP_Question_Multi_Choice extends LP_Question {\n+\n+\t\t\u002F**\n+\t\t * Type of this question.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $_question_type = 'multi_choice';\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Multi_Choice constructor.\n+\t\t *\n+\t\t * @param null $the_question\n+\t\t * @param null $options\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_question = null, $options = null ) {\n+\t\t\tparent::__construct( $the_question, $options );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Allow check answer.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function can_check_answer() {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user answer.\n+\t\t *\n+\t\t * @param null $user_answer\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function check( $user_answer = null ) {\n+\t\t\t$return = parent::check();\n+\t\t\tsettype( $user_answer, 'array' );\n+\t\t\t$answers = $this->get_answers();\n+\n+\t\t\tif ( $answers ) {\n+\t\t\t\t$correct = true;\n+\t\t\t\tforeach ( $answers as $key => $option ) {\n+\t\t\t\t\t$data     = $option->get_data();\n+\t\t\t\t\t$selected = $this->is_selected_option( $data, $user_answer );\n+\n+\t\t\t\t\tif ( $selected && ! $option->is_true() ) {\n+\t\t\t\t\t\t$correct = false;\n+\t\t\t\t\t} elseif ( ! $selected && $option->is_true() ) {\n+\t\t\t\t\t\t$correct = false;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Only one option is selected wrong will wrong the answer.\n+\t\t\t\t\tif ( ! $correct ) {\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $correct ) {\n+\t\t\t\t\t$return = array(\n+\t\t\t\t\t\t'correct' => true,\n+\t\t\t\t\t\t'mark'    => floatval( $this->get_mark() ),\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1120 +1,1120 @@\n-\u003C?php\r\n-\u002F**\r\n- * Base class for types of question\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question\r\n-\t *\r\n-\t * @extend LP_Course_Item\r\n-\t *\u002F\r\n-\tclass LP_Question extends LP_Course_Item {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $_options = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_content = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Type of this question.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_question_type = 'true_or_false';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_item_type = LP_QUESTION_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected static $_types = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * support answer options\r\n-\t\t *\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected $_answer_options = true;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\t\u002F\u002F protected static $_loaded = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $object_type = 'question';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array(\r\n-\t\t\t'mark'                 => 0,\r\n-\t\t\t'answer_options'       => array(),\r\n-\t\t\t'show_correct_answers' => '',\r\n-\t\t\t'disable_answers'      => '',\r\n-\t\t\t'answered'             => '',\r\n-\t\t\t'explanation'          => '',\r\n-\t\t\t'hint'                 => '',\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Construct\r\n-\t\t *\r\n-\t\t * @param mixed\r\n-\t\t * @param array\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_question = null, $args = null ) {\r\n-\r\n-\t\t\tparent::__construct( $the_question, $args );\r\n-\r\n-\t\t\t$this->_curd = new LP_Question_CURD();\r\n-\t\t\tif ( is_numeric( $the_question ) && $the_question > 0 ) {\r\n-\t\t\t\t$this->set_id( $the_question );\r\n-\t\t\t} elseif ( $the_question instanceof self ) {\r\n-\t\t\t\t$this->set_id( absint( $the_question->get_id() ) );\r\n-\t\t\t} elseif ( ! empty( $the_question->ID ) ) {\r\n-\t\t\t\t$this->set_id( absint( $the_question->ID ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->_answer_options ) {\r\n-\t\t\t\t$this->add_support( 'answer_options' );\r\n-\t\t\t\t$this->add_support( 'auto_calculate_point' );\r\n-\r\n-\t\t\t\tif ( $this->get_type() !== 'true_or_false' ) {\r\n-\t\t\t\t\t$this->add_support( 'add_answer_option' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data( 'answered', false );\r\n-\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_options = $args;\r\n-\t\t\t\u002F\u002F$this->_init();\r\n-\t\t\t\u002F\u002F self::$_loaded ++;\r\n-\t\t}\r\n-\r\n-\t\tpublic function add_support( $feature, $type = 'yes' ) {\r\n-\t\t\t$feature = $this->_sanitize_feature_key( $feature );\r\n-\t\t\tLP_Global::add_object_feature( $this->object_type . '.' . $this->get_type(), $feature, $type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F*public function is_support( $feature, $type = '' ) {\r\n-\t\t\t$feature = $this->_sanitize_feature_key( $feature );\r\n-\r\n-\t\t\treturn LP_Global::object_is_support_feature( $this->object_type . '.' . $this->get_type(), $feature, $type );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_supports() {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\r\n-\t\t\tif ( empty( LP_Global::$object_support_features ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn LP_Global::get_object_supports( $this->object_type . '.' . $this->get_type() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load data for question\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\t$this->_curd->load( $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default question meta.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_meta() {\r\n-\t\t\t$meta = array(\r\n-\t\t\t\t'mark'        => 1,\r\n-\t\t\t\t'explanation' => null,\r\n-\t\t\t\t'hint'        => null,\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fdefault-meta', $meta );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save question data.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @return int|object|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function save() {\r\n-\r\n-\t\t\tif ( $this->get_id() ) {\r\n-\t\t\t\t$return = $this->_curd->update( $this );\r\n-\t\t\t} else {\r\n-\t\t\t\t$return = $this->_curd->create( $this );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_mark() {\r\n-\t\t\treturn $this->get_data( 'mark', 1 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $mark\r\n-\t\t *\u002F\r\n-\t\tpublic function set_mark( $mark ) {\r\n-\t\t\t$this->_set_data( 'mark', abs( $mark ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Do something before get data.\r\n-\t\t * Some data now is not auto loading when object is created\r\n-\t\t * therefore, we will load it here.\r\n-\t\t *\r\n-\t\t * @param string $name\r\n-\t\t * @param string $default\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_data( $name = '', $default = '' ) {\r\n-\t\t\tswitch ( $name ) {\r\n-\t\t\t\tcase 'answer_options':\r\n-\t\t\t\t\t$answer_options = parent::get_data( $name, $default );\r\n-\r\n-\t\t\t\t\tif ( ! $answer_options ) {\r\n-\t\t\t\t\t\t$answer_options = $this->_curd->load_answer_options( $this->get_id() );\r\n-\t\t\t\t\t\t$this->set_data( $name, $answer_options );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn parent::get_data( $name, $default );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $yes_or_no\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function show_correct_answers( $yes_or_no = '' ) {\r\n-\t\t\tif ( in_array( $yes_or_no, array( 'yes', 'no' ) ) ) {\r\n-\t\t\t\t$this->_set_data( 'show_correct_answers', $yes_or_no );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->get_data( 'show_correct_answers' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $yes_or_no\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function disable_answers( $yes_or_no = '' ) {\r\n-\t\t\tif ( in_array( $yes_or_no, array( 'yes', 'no' ) ) ) {\r\n-\t\t\t\t$this->_set_data( 'disable_answers', $yes_or_no );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->get_data( 'disable_answers' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set answer for this question.\r\n-\t\t *\r\n-\t\t * @param mixed $answered\r\n-\t\t *\u002F\r\n-\t\tpublic function set_answered( $answered ) {\r\n-\t\t\t$this->set_data( 'answered', $answered );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get answer for this question if set.\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answered() {\r\n-\t\t\treturn $this->get_data( 'answered' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get answer options of the question\r\n-\t\t *\r\n-\t\t * @param array $args - Optional.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answer_options( $args = array() ) {\r\n-\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'exclude' => '',\r\n-\t\t\t\t\t'map'     => '',\r\n-\t\t\t\t\t'answer'  => '',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $args['exclude'] && is_string( $args['exclude'] ) ) {\r\n-\t\t\t\t$exclude = array_map( 'trim', explode( ',', $args['exclude'] ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$exclude = $args['exclude'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$map = $args['map'];\r\n-\r\n-\t\t\t$options = $this->get_data( 'answer_options' );\r\n-\r\n-\t\t\t\u002F\u002F Remove key if it in $exclude.\r\n-\t\t\tif ( $options && ( $exclude || $map ) ) {\r\n-\t\t\t\t$exclude = array_flip( $exclude );\r\n-\r\n-\t\t\t\tforeach ( $options as $k => $option ) {\r\n-\t\t\t\t\t$option['title'] = do_shortcode( $option['title'] );\r\n-\r\n-\t\t\t\t\tforeach ( $map as $k_map => $v_map ) {\r\n-\t\t\t\t\t\tif ( array_key_exists( $k_map, $option ) ) {\r\n-\t\t\t\t\t\t\t$option[ $v_map ]  = $option[ $k_map ];\r\n-\t\t\t\t\t\t\t$exclude[ $k_map ] = 1;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$options[ $k ] = array_diff_key( $option, $exclude );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options', $options, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $explanation\r\n-\t\t *\u002F\r\n-\t\tpublic function set_explanation( $explanation = '' ) {\r\n-\t\t\t$this->_set_data( 'explanation', $explanation );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_explanation() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fexplanation', do_shortcode( $this->get_data( 'explanation' ) ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $hint\r\n-\t\t *\u002F\r\n-\t\tpublic function set_hint( $hint = '' ) {\r\n-\t\t\t$this->_set_data( 'hint', $hint );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_hint() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fhint', do_shortcode( $this->get_data( 'hint' ) ), $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all type of questions\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_types() {\r\n-\t\t\t$types = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fquestion-types',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'true_or_false'  => esc_html__( 'True Or False', 'learnpress' ),\r\n-\t\t\t\t\t'multi_choice'   => esc_html__( 'Multi Choice', 'learnpress' ),\r\n-\t\t\t\t\t'single_choice'  => esc_html__( 'Single Choice', 'learnpress' ),\r\n-\t\t\t\t\t'fill_in_blanks' => esc_html__( 'Fill In Blanks', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_question_types', $types );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Store question and it's related data into database.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function store() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$id        = absint( $this->get_id() );\r\n-\t\t\t$is_update = $id > 0;\r\n-\t\t\t$post_data = array(\r\n-\t\t\t\t'post_title' => $this->get_data( 'title' ),\r\n-\t\t\t\t'post_type'  => LP_QUESTION_CPT,\r\n-\t\t\t\t'ID'         => $id,\r\n-\t\t\t);\r\n-\t\t\tif ( $is_update ) {\r\n-\t\t\t\t$updated = wp_update_post( $post_data, true );\r\n-\t\t\t} else {\r\n-\t\t\t\t$updated = wp_insert_post( $post_data, true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_numeric( $updated ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Does this question support answer options?\r\n-\t\t\t\u002F*if ( ! $this->is_support( 'answer_options' ) ) {\r\n-\t\t\t\treturn $updated;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$this->empty_answers();\r\n-\t\t\t$answer_options = $this->get_data( 'answer_options' );\r\n-\t\t\tif ( $answer_options ) {\r\n-\t\t\t\t$question_order = 1;\r\n-\t\t\t\t$query          = \"INSERT INTO {$wpdb->prefix}learnpress_question_answers(`question_id`, `order`) VALUES\";\r\n-\t\t\t\tforeach ( $answer_options as $answer_option ) {\r\n-\t\t\t\t\tif ( empty( $answer_option['title'] ) ) {\r\n-\t\t\t\t\t\tif ( apply_filters( 'learn-press\u002Fquestion\u002Fignore-insert-empty-answer-option', true, $answer_option, $id ) ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$qry = $query . $wpdb->prepare( '(%d, %d)', $id, $question_order ++ );\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Finsert-answer-option', $id, $answer_option );\r\n-\t\t\t\t\tif ( $wpdb->query( $qry ) ) {\r\n-\t\t\t\t\t\t$inserted_id = $wpdb->insert_id;\r\n-\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'text', $answer_option['text'] );\r\n-\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'value', $answer_option['value'] );\r\n-\t\t\t\t\t\tif ( ! empty( $answer_option['is_true'] ) && ! learn_press_is_negative_value( $answer_option['is_true'] ) ) {\r\n-\t\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'checked', 'yes' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Finserted-answer-option', $inserted_id, $id, $answer_option );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $updated;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove all answers to prepare for inserting new\r\n-\t\t *\u002F\r\n-\t\tpublic function empty_answers() {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$id         = absint( $this->get_id() );\r\n-\t\t\t$table_meta = $wpdb->learnpress_question_answermeta;\r\n-\t\t\t$table_main = $wpdb->learnpress_question_answers;\r\n-\t\t\t$query      = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM t1, t2\r\n-\t\t\t\tUSING {$table_main} AS t1 INNER JOIN {$table_meta} AS t2 ON t1.question_answer_id = t2.learnpress_question_answer_id\r\n-\t\t\t\tWHERE t1.question_id = %d\r\n-\t\t\t\",\r\n-\t\t\t\t$id\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F deprecated\r\n-\t\t\tdo_action( 'learn_press_before_delete_question_answers', $id );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fquestion\u002Fdelete-answers', $id );\r\n-\t\t\tif ( $wpdb->query( $query ) ) {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Fdeleted-answers', $id );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F deprecated\r\n-\t\t\tdo_action( 'learn_press_delete_question_answers', $id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $meta\r\n-\t\t * @param $field\r\n-\t\t * @param $is_saved\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function _filter_meta_box_meta( $meta, $field, $is_saved ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\t\u002F*if ( preg_match( '~\\[question-content\\]~', $field['id'] ) && $field['context'] == 'quiz-list-questions' ) {\r\n-\t\t\t\t$post = get_post( $this->get_id() );\r\n-\t\t\t\t$meta = $post->post_content;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $meta;*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set new type of question.\r\n-\t\t * Update _lp_type meta to new type.\r\n-\t\t *\r\n-\t\t * @param string $type\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function set_type( $type = '' ) {\r\n-\r\n-\t\t\tif ( ! $type ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! learn_press_is_support_question_type( $type ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Change to new type and update meta value\r\n-\t\t\t$this->_question_type = $type;\r\n-\t\t\tupdate_post_meta( $this->get_id(), '_lp_type', $type );\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Update ordering of question answers\r\n-\t\t *\r\n-\t\t * @param array $orders List of answers\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function update_answer_orders( $orders ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\t\u002F*global $wpdb;\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT qa.question_answer_id, qam2.meta_value as `name`, qam.meta_value as `value`\r\n-\t\t\t\tFROM {$wpdb->learnpress_question_answers} qa\r\n-\t\t\t\tINNER JOIN {$wpdb->learnpress_question_answermeta} qam ON qa.question_answer_id = qam.learnpress_question_answer_id AND qam.meta_key = %s\r\n-\t\t\t\tINNER JOIN {$wpdb->learnpress_question_answermeta} qam2 ON qa.question_answer_id = qam2.learnpress_question_answer_id AND qam2.meta_key = %s\r\n-\t\t\t\tWHERE qa.question_id = %d\r\n-\t\t\t\tORDER BY `order`\r\n-\t\t\t\",\r\n-\t\t\t\t'value',\r\n-\t\t\t\t'text',\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t\tif ( $answers = $wpdb->get_results( $query ) ) {\r\n-\t\t\t\t$query = \"\r\n-\t\t\t\tUPDATE {$wpdb->learnpress_question_answers}\r\n-\t\t\t\tSET `order` = CASE\r\n-\t\t\t\";\r\n-\t\t\t\tfor ( $order = 0, $n = sizeof( $orders ); $order \u003C $n; $order ++ ) {\r\n-\t\t\t\t\t$found_answer = false;\r\n-\t\t\t\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t\t\t\tif ( $answer->value == $orders[ $order ]['value'] && $answer->name == $orders[ $order ]['text'] ) {\r\n-\t\t\t\t\t\t\t$found_answer = $answer;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tif ( $found_answer === false ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_answer_id = %d THEN %d', $found_answer->question_answer_id, $order + 1 ) . \"\\n\";\r\n-\t\t\t\t}\r\n-\t\t\t\t$query .= sprintf( 'ELSE `order` END WHERE question_id = %d', $this->get_id() );\r\n-\t\t\t\t$wpdb->query( $query );\r\n-\t\t\t}*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return type of question.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_type() {\r\n-\t\t\treturn $this->_question_type;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return type of question in 'readable text'.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_type_label() {\r\n-\t\t\treturn learn_press_question_types()[ $this->get_type() ];\r\n-\t\t}\r\n-\r\n-\t\tprotected function _init() {\r\n-\t\t\t\u002F\u002Fadd_filter( 'learn_press_question_answers', array( $this, '_get_default_answers' ), 10, 2 );\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * @param mixed       $answers\r\n-\t\t * @param LP_Question $q\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function _get_default_answers( $answers = false, $q = null ) {\r\n-\t\t\tif ( ! $answers && ( $q && $q->get_id() == $this->get_id() ) ) {\r\n-\t\t\t\t$answers = $this->get_default_answers();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default question answer.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_answer() {\r\n-\t\t\t$answer = array(\r\n-\t\t\t\t'question_answer_id' => - 1,\r\n-\t\t\t\t'title'              => '',\r\n-\t\t\t\t'is_true'            => '',\r\n-\t\t\t\t'value'              => learn_press_random_value(),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $answer;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default question list answers.\r\n-\t\t *\r\n-\t\t * @return array|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_default_answers() {\r\n-\t\t\t$answers = array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_answer_id' => - 1,\r\n-\t\t\t\t\t'is_true'            => 'yes',\r\n-\t\t\t\t\t'value'              => learn_press_random_value(),\r\n-\t\t\t\t\t'title'              => esc_html__( 'First option', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_answer_id' => - 2,\r\n-\t\t\t\t\t'is_true'            => 'no',\r\n-\t\t\t\t\t'value'              => learn_press_random_value(),\r\n-\t\t\t\t\t'title'              => esc_html__( 'Second option', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_answer_id' => - 3,\r\n-\t\t\t\t\t'is_true'            => 'no',\r\n-\t\t\t\t\t'value'              => learn_press_random_value(),\r\n-\t\t\t\t\t'title'              => esc_html__( 'Third option', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question answers option.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 4.0.1\r\n-\t\t * @modify 4.1.7.3 by tungnx\r\n-\t\t * @return LP_Question_Answer_Option[]\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answers(): array {\r\n-\t\t\t$lp_question_cache = LP_Question_Cache::instance();\r\n-\t\t\t$key_cache         = \"{$this->get_id()}\u002Foption_answers\";\r\n-\t\t\t\u002F\u002F$answers = LP_Object_Cache::get( 'answer-options-' . $this->get_id(), 'learn-press\u002Fquestions' );\r\n-\t\t\t$answers_option = $lp_question_cache->get_cache( $key_cache );\r\n-\r\n-\t\t\tif ( false === $answers_option ) {\r\n-\t\t\t\t$answers_option = $this->_curd->load_answer_options( $this->get_id() );\r\n-\r\n-\t\t\t\tif ( ! $answers_option ) {\r\n-\t\t\t\t\t$answers_option = $this->get_default_answers();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$lp_question_cache->set_cache( $key_cache, $answers_option );\r\n-\t\t\t}\r\n-\r\n-\t\t\trequire_once 'class-lp-question-answers.php';\r\n-\r\n-\t\t\t$answers_option_tmp = [];\r\n-\t\t\tforeach ( $answers_option as $k => $answer ) {\r\n-\t\t\t\t$answer_option        = new LP_Question_Answer_Option( $this, $answer );\r\n-\t\t\t\t$answers_option_tmp[] = $answer_option;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answers_option_tmp;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Create default answers.\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t *\u002F\r\n-\t\tpublic function create_default_answers() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$answers = $this->get_default_answers();\r\n-\r\n-\t\t\tforeach ( $answers as $index => $answer ) {\r\n-\t\t\t\t$answer = array(\r\n-\t\t\t\t\t'question_id' => $this->get_id(),\r\n-\t\t\t\t\t'title'       => $answer['title'],\r\n-\t\t\t\t\t'value'       => $answer['value'] ?? '',\r\n-\t\t\t\t\t'is_true'     => ( $answer['is_true'] == 'yes' ) ? $answer['is_true'] : '',\r\n-\t\t\t\t\t'order'       => $index + 1,\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wpdb->insert(\r\n-\t\t\t\t\t$wpdb->learnpress_question_answers,\r\n-\t\t\t\t\t$answer,\r\n-\t\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$question_answer_id = $wpdb->insert_id;\r\n-\r\n-\t\t\t\tif ( $question_answer_id ) {\r\n-\t\t\t\t\t$answer['question_answer_id'] = $question_answer_id;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$answers[ $index ] = $answer;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data( 'answer_options', $answers );\r\n-\t\t}\r\n-\r\n-\t\tpublic function setup_data( $quiz_id, $course_id = 0, $user_id = 0 ) {\r\n-\r\n-\t\t\t$quiz   = learn_press_get_quiz( $quiz_id );\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( $user_id ) {\r\n-\t\t\t\t$user = learn_press_get_user( $user_id );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$show_correct = false;\r\n-\r\n-\t\t\tif ( $user && $quiz && $course ) {\r\n-\t\t\t\t$user_quiz = $user->get_quiz_data( $quiz->get_id(), $course->get_id() );\r\n-\t\t\t\tif ( $user_quiz ) {\r\n-\t\t\t\t\t$has_checked  = $user->has_checked_answer( $this->get_id(), $quiz->get_id(), $course->get_id() );\r\n-\t\t\t\t\t$show_correct = $user_quiz->is_completed() && ( $has_checked || $quiz->get_show_result() ) ? 'yes' : false;\r\n-\t\t\t\t\t$answered     = $user_quiz->get_question_answer( $this->get_id() );\r\n-\t\t\t\t\t$this->set_answered( $answered );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->show_correct_answers( $show_correct );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.1.7.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_name() {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\t\u002F*return $this->_options['name'] ?? ucfirst(\r\n-\t\t\t\tpreg_replace_callback(\r\n-\t\t\t\t\t'!_([a-z])!',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t$this,\r\n-\t\t\t\t\t\t'sanitize_name_callback',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$this->get_type()\r\n-\t\t\t\t)\r\n-\t\t\t);*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $matches\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function sanitize_name_callback( $matches ) {\r\n-\t\t\treturn strtoupper( $matches[1] );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Sets the value for a variable of this class\r\n-\t\t *\r\n-\t\t * @param   $key      string  The name of a variable of this class\r\n-\t\t * @param   $value    mixed     The value to set\r\n-\t\t *\r\n-\t\t * @return  void\r\n-\t\t *\u002F\r\n-\t\tpublic function set( $key, $value ) {\r\n-\t\t\t$this->$key = $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Gets the value of a variable of this class with multiple level of an object or array\r\n-\t\t * example: $obj->get('a.b') -> like this :\r\n-\t\t *          - $obj->a->b\r\n-\t\t *          - or $obj->a['b']\r\n-\t\t *\r\n-\t\t * @param   null $key     string  Single or multiple level such as a.b.c\r\n-\t\t * @param   null $default mixed   Return a default value if the key does not exists or is empty\r\n-\t\t * @param   null $func    string  The function to apply the result before return\r\n-\t\t *\r\n-\t\t * @return  mixed|null\r\n-\t\t *\u002F\r\n-\t\tpublic function get( $key = null, $default = null, $func = null ) {\r\n-\t\t\t$val = $this->_get( $this, $key, $default );\r\n-\r\n-\t\t\treturn is_callable( $func ) ? call_user_func_array( $func, array( $val ) ) : $val;\r\n-\t\t}\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Magic function to get question data.\r\n-\t\t *\r\n-\t\t * @param      $prop\r\n-\t\t * @param      $key\r\n-\t\t * @param null $default\r\n-\t\t * @param null $type\r\n-\t\t *\r\n-\t\t * @return mixed|null\r\n-\t\t *\u002F\r\n-\t\tprotected function _get( $prop, $key, $default = null, $type = null ) {\r\n-\t\t\t$return = $default;\r\n-\r\n-\t\t\tif ( $key === false || $key == null ) {\r\n-\t\t\t\treturn $return;\r\n-\t\t\t}\r\n-\t\t\t$deep = explode( '.', $key );\r\n-\r\n-\t\t\tif ( is_array( $prop ) ) {\r\n-\t\t\t\tif ( isset( $prop[ $deep[0] ] ) ) {\r\n-\t\t\t\t\t$return = $prop[ $deep[0] ];\r\n-\t\t\t\t\tif ( count( $deep ) > 1 ) {\r\n-\t\t\t\t\t\tunset( $deep[0] );\r\n-\t\t\t\t\t\t$return = $this->_get( $return, implode( '.', $deep ), $default, $type );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( is_object( $prop ) ) {\r\n-\t\t\t\tif ( isset( $prop->{$deep[0]} ) ) {\r\n-\t\t\t\t\t$return = $prop->{$deep[0]};\r\n-\t\t\t\t\tif ( count( $deep ) > 1 ) {\r\n-\t\t\t\t\t\tunset( $deep[0] );\r\n-\t\t\t\t\t\t$return = $this->_get( $return, implode( '.', $deep ), $default, $type );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $type == 'object' ) {\r\n-\t\t\t\tsettype( $return, 'object' );\r\n-\t\t\t} elseif ( $type == 'array' ) {\r\n-\t\t\t\tsettype( $return, 'array' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Find value in answer's option and compare with value answered by user.\r\n-\t\t *\r\n-\t\t * @param LP_Question_Answer_Option $answer\r\n-\t\t * @param mixed                     $answered\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_selected_option( $answer, $answered = false ): bool {\r\n-\t\t\tif ( is_array( $answered ) ) {\r\n-\t\t\t\t$is_selected = in_array( $answer['value'], $answered );\r\n-\t\t\t} else {\r\n-\t\t\t\t$is_selected = $answer['value'] === $answered;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fis-selected-option', $is_selected, $answer, $answered, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save user question answer.\r\n-\t\t *\r\n-\t\t * @param      $answer\r\n-\t\t * @param      $quiz_id\r\n-\t\t * @param null    $user_id\r\n-\t\t * @deprecated 4.2.7.3\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function save_user_answer( $answer, $quiz_id, $user_id = null ) {\r\n-\t\t\tif ( $user_id ) {\r\n-\t\t\t\t$user = LP_User_Factory::get_user( $user_id );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$progress = $user->get_quiz_progress( $quiz_id );\r\n-\r\n-\t\t\tif ( $progress ) {\r\n-\t\t\t\tif ( ! isset( $progress->question_answers ) ) {\r\n-\t\t\t\t\t$question_answers = array();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$question_answers = $progress->question_answers;\r\n-\t\t\t\t}\r\n-\t\t\t\t$question_answers[ $this->get_id() ] = $answer;\r\n-\r\n-\t\t\t\t$question_answers = apply_filters( 'learn_press_update_user_question_answers', $question_answers, $progress->history_id, $user_id, $this, $quiz_id );\r\n-\r\n-\t\t\t\t\u002F\u002F learn_press_update_user_quiz_meta( $progress->history_id, 'question_answers', $question_answers );\r\n-\t\t\t}\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Allow check question answer, default disable for True or False and Single choice, override by Multiple choice question.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function can_check_answer() {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user answer, override by question type class.\r\n-\t\t *\r\n-\t\t * @param null $args | question answered\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function check( $args = null ) {\r\n-\t\t\t$return = array(\r\n-\t\t\t\t'correct' => false,\r\n-\t\t\t\t'mark'    => 0,\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get answer at position\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param int $at\r\n-\t\t *\r\n-\t\t * @return LP_Question_Answer_Option|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_answer_at( $at ) {\r\n-\t\t\treturn $this->get_answers()->get_answer_at( $at );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user answered data.\r\n-\t\t *\r\n-\t\t * @param $args\r\n-\t\t *\r\n-\t\t * @return null\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_answered( $args ) {\r\n-\t\t\t$args     = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'history_id' => 0,\r\n-\t\t\t\t\t'quiz_id'    => 0,\r\n-\t\t\t\t\t'course_id'  => 0,\r\n-\t\t\t\t\t'force'      => false,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$answered = null;\r\n-\t\t\tif ( $args['history_id'] ) {\r\n-\t\t\t\t$user_meta = learn_press_get_user_item_meta( $args['history_id'], 'question_answers', true );\r\n-\t\t\t\tif ( $user_meta && array_key_exists( $this->get_id(), $user_meta ) ) {\r\n-\t\t\t\t\t$answered = $user_meta[ $this->get_id() ];\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $args['quiz_id'] && $args['course_id'] ) {\r\n-\t\t\t\t$user    = learn_press_get_current_user();\r\n-\t\t\t\t$history = $user->get_quiz_results( $args['quiz_id'], $args['course_id'] );\r\n-\r\n-\t\t\t\tif ( $history ) {\r\n-\t\t\t\t\t$user_meta = learn_press_get_user_item_meta( $history->history_id, 'question_answers', true );\r\n-\r\n-\t\t\t\t\tif ( $user_meta && array_key_exists( $this->get_id(), $user_meta ) ) {\r\n-\t\t\t\t\t\t$answered = $user_meta[ $this->get_id() ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $answered;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question.\r\n-\t\t *\r\n-\t\t * @param bool  $the_question\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return LP_Question|bool\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_question( $the_question = false, $args = array() ) {\r\n-\t\t\t\u002F\u002F question object\r\n-\t\t\t$the_question = self::get_question_object( $the_question );\r\n-\t\t\tif ( ! $the_question ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $args['force'] ) ) {\r\n-\t\t\t\t$force = ! ! $args['force'];\r\n-\t\t\t\tunset( $args['force'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$force = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$key_args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'   => $the_question->ID,\r\n-\t\t\t\t\t'type' => $the_question->post_type,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$key = LP_Helper::array_to_md5( $key_args );\r\n-\r\n-\t\t\tif ( $force ) {\r\n-\t\t\t\tLP_Global::$questions[ $key ] = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( LP_Global::$questions[ $key ] ) ) {\r\n-\t\t\t\t$class_name = self::get_question_class( $the_question, $args );\r\n-\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\r\n-\t\t\t\t\t$lesson = new $class_name( $the_question->ID, $args );\r\n-\t\t\t\t} elseif ( $class_name instanceof LP_Question ) {\r\n-\t\t\t\t\t$lesson = $class_name;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$lesson = new self( $the_question->ID, $args );\r\n-\t\t\t\t}\r\n-\t\t\t\tLP_Global::$questions[ $key ] = $lesson;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn LP_Global::$questions[ $key ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the question class name.\r\n-\t\t *\r\n-\t\t * @param  WP_Post $the_question\r\n-\t\t * @param  array   $args (default: array())\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_question_class( $the_question, $args = array() ) {\r\n-\t\t\t$question_id = absint( $the_question->ID );\r\n-\t\t\tif ( ! empty( $args['type'] ) ) {\r\n-\t\t\t\t$question_type = $args['type'];\r\n-\t\t\t} else {\r\n-\t\t\t\t$question_type = get_post_meta( $question_id, '_lp_type', true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class_name = self::get_class_name_from_question_type( array( $question_type ) );\r\n-\r\n-\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fobject-class', $class_name, $question_type, $question_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question class from question type.\r\n-\t\t *\r\n-\t\t * @param  string $question_type\r\n-\t\t *\r\n-\t\t * @return string|false\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_class_name_from_question_type( $question_type ) {\r\n-\r\n-\t\t\tif ( is_array( $question_type ) ) {\r\n-\t\t\t\t$question_type = reset( $question_type );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ! $question_type ? __CLASS__ : 'LP_Question_' . implode( '_', array_map( 'ucfirst', explode( '-', $question_type ) ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the question object.\r\n-\t\t *\r\n-\t\t * @since  3.0.0\r\n-\t\t *\r\n-\t\t * @param  mixed $the_question\r\n-\t\t *\r\n-\t\t * @uses   WP_Post\r\n-\t\t * @return WP_Post|bool false on failure\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_question_object( $the_question ) {\r\n-\t\t\tif ( false === $the_question ) {\r\n-\t\t\t\t$the_question = get_post_type() === LP_QUESTION_CPT ? $GLOBALS['post'] : false;\r\n-\t\t\t} elseif ( is_numeric( $the_question ) ) {\r\n-\t\t\t\t$the_question = get_post( $the_question );\r\n-\t\t\t} elseif ( $the_question instanceof LP_Course_Item ) {\r\n-\t\t\t\t$the_question = get_post( $the_question->get_id() );\r\n-\t\t\t} elseif ( ! ( $the_question instanceof WP_Post ) ) {\r\n-\t\t\t\t$the_question = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fpost-object', $the_question );\r\n-\t\t}\r\n-\r\n-\t\tprotected function _get_checked( $user_answer = null ) {\r\n-\t\t\t$key = $user_answer ? md5( serialize( $user_answer ) ) : - 1;\r\n-\r\n-\t\t\treturn LP_Object_Cache::get( 'question-' . $this->get_id() . '\u002F' . $key, 'learn-press\u002Fanswer-checked' );\r\n-\t\t}\r\n-\r\n-\t\tprotected function _set_checked( $checked, $user_answer ) {\r\n-\t\t\t$key = $user_answer ? md5( serialize( $user_answer ) ) : - 1;\r\n-\r\n-\t\t\treturn LP_Object_Cache::set( 'question-' . $this->get_id() . '\u002F' . $key, $checked, 'learn-press\u002Fanswer-checked' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default json data for editor settings\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_editor_default_settings() {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fquestion-editor-default-settings',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'       => $this->get_id(),\r\n-\t\t\t\t\t'type'     => $this->get_type(),\r\n-\t\t\t\t\t'duration' => $this->get_duration(),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get json data for editor settings.\r\n-\t\t *\r\n-\t\t * @since 3.3.0\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_editor_settings() {\r\n-\t\t\t$defaults = $this->get_editor_default_settings();\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fquestion-editor-settings',\r\n-\t\t\t\tarray_merge(\r\n-\t\t\t\t\t$defaults,\r\n-\t\t\t\t\tarray()\r\n-\t\t\t\t),\r\n-\t\t\t\t$this->get_type(),\r\n-\t\t\t\t$this->get_id(),\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Base class for types of question\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question\n+\t *\n+\t * @extend LP_Course_Item\n+\t *\u002F\n+\tclass LP_Question extends LP_Course_Item {\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $_options = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_content = '';\n+\n+\t\t\u002F**\n+\t\t * Type of this question.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_question_type = 'true_or_false';\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_item_type = LP_QUESTION_CPT;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected static $_types = array();\n+\n+\t\t\u002F**\n+\t\t * support answer options\n+\t\t *\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected $_answer_options = true;\n+\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\t\u002F\u002F protected static $_loaded = 0;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $object_type = 'question';\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array(\n+\t\t\t'mark'                 => 0,\n+\t\t\t'answer_options'       => array(),\n+\t\t\t'show_correct_answers' => '',\n+\t\t\t'disable_answers'      => '',\n+\t\t\t'answered'             => '',\n+\t\t\t'explanation'          => '',\n+\t\t\t'hint'                 => '',\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * Construct\n+\t\t *\n+\t\t * @param mixed\n+\t\t * @param array\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_question = null, $args = null ) {\n+\n+\t\t\tparent::__construct( $the_question, $args );\n+\n+\t\t\t$this->_curd = new LP_Question_CURD();\n+\t\t\tif ( is_numeric( $the_question ) && $the_question > 0 ) {\n+\t\t\t\t$this->set_id( $the_question );\n+\t\t\t} elseif ( $the_question instanceof self ) {\n+\t\t\t\t$this->set_id( absint( $the_question->get_id() ) );\n+\t\t\t} elseif ( ! empty( $the_question->ID ) ) {\n+\t\t\t\t$this->set_id( absint( $the_question->ID ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->_answer_options ) {\n+\t\t\t\t$this->add_support( 'answer_options' );\n+\t\t\t\t$this->add_support( 'auto_calculate_point' );\n+\n+\t\t\t\tif ( $this->get_type() !== 'true_or_false' ) {\n+\t\t\t\t\t$this->add_support( 'add_answer_option' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$this->set_data( 'answered', false );\n+\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\n+\t\t\t$this->_options = $args;\n+\t\t\t\u002F\u002F$this->_init();\n+\t\t\t\u002F\u002F self::$_loaded ++;\n+\t\t}\n+\n+\t\tpublic function add_support( $feature, $type = 'yes' ) {\n+\t\t\t$feature = $this->_sanitize_feature_key( $feature );\n+\t\t\tLP_Global::add_object_feature( $this->object_type . '.' . $this->get_type(), $feature, $type );\n+\t\t}\n+\n+\t\t\u002F*public function is_support( $feature, $type = '' ) {\n+\t\t\t$feature = $this->_sanitize_feature_key( $feature );\n+\n+\t\t\treturn LP_Global::object_is_support_feature( $this->object_type . '.' . $this->get_type(), $feature, $type );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function get_supports() {\n+\t\t\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\n+\t\t\tif ( empty( LP_Global::$object_support_features ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn LP_Global::get_object_supports( $this->object_type . '.' . $this->get_type() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load data for question\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\t$this->_curd->load( $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default question meta.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function get_default_meta() {\n+\t\t\t$meta = array(\n+\t\t\t\t'mark'        => 1,\n+\t\t\t\t'explanation' => null,\n+\t\t\t\t'hint'        => null,\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fdefault-meta', $meta );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save question data.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @return int|object|WP_Error\n+\t\t *\u002F\n+\t\tpublic function save() {\n+\n+\t\t\tif ( $this->get_id() ) {\n+\t\t\t\t$return = $this->_curd->update( $this );\n+\t\t\t} else {\n+\t\t\t\t$return = $this->_curd->create( $this );\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_mark() {\n+\t\t\treturn $this->get_data( 'mark', 1 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $mark\n+\t\t *\u002F\n+\t\tpublic function set_mark( $mark ) {\n+\t\t\t$this->_set_data( 'mark', abs( $mark ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Do something before get data.\n+\t\t * Some data now is not auto loading when object is created\n+\t\t * therefore, we will load it here.\n+\t\t *\n+\t\t * @param string $name\n+\t\t * @param string $default\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_data( $name = '', $default = '' ) {\n+\t\t\tswitch ( $name ) {\n+\t\t\t\tcase 'answer_options':\n+\t\t\t\t\t$answer_options = parent::get_data( $name, $default );\n+\n+\t\t\t\t\tif ( ! $answer_options ) {\n+\t\t\t\t\t\t$answer_options = $this->_curd->load_answer_options( $this->get_id() );\n+\t\t\t\t\t\t$this->set_data( $name, $answer_options );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\treturn parent::get_data( $name, $default );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $yes_or_no\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function show_correct_answers( $yes_or_no = '' ) {\n+\t\t\tif ( in_array( $yes_or_no, array( 'yes', 'no' ) ) ) {\n+\t\t\t\t$this->_set_data( 'show_correct_answers', $yes_or_no );\n+\t\t\t}\n+\n+\t\t\treturn $this->get_data( 'show_correct_answers' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $yes_or_no\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function disable_answers( $yes_or_no = '' ) {\n+\t\t\tif ( in_array( $yes_or_no, array( 'yes', 'no' ) ) ) {\n+\t\t\t\t$this->_set_data( 'disable_answers', $yes_or_no );\n+\t\t\t}\n+\n+\t\t\treturn $this->get_data( 'disable_answers' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set answer for this question.\n+\t\t *\n+\t\t * @param mixed $answered\n+\t\t *\u002F\n+\t\tpublic function set_answered( $answered ) {\n+\t\t\t$this->set_data( 'answered', $answered );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get answer for this question if set.\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_answered() {\n+\t\t\treturn $this->get_data( 'answered' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get answer options of the question\n+\t\t *\n+\t\t * @param array $args - Optional.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_answer_options( $args = array() ) {\n+\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'exclude' => '',\n+\t\t\t\t\t'map'     => '',\n+\t\t\t\t\t'answer'  => '',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $args['exclude'] && is_string( $args['exclude'] ) ) {\n+\t\t\t\t$exclude = array_map( 'trim', explode( ',', $args['exclude'] ) );\n+\t\t\t} else {\n+\t\t\t\t$exclude = $args['exclude'];\n+\t\t\t}\n+\n+\t\t\t$map = $args['map'];\n+\n+\t\t\t$options = $this->get_data( 'answer_options' );\n+\n+\t\t\t\u002F\u002F Remove key if it in $exclude.\n+\t\t\tif ( $options && ( $exclude || $map ) ) {\n+\t\t\t\t$exclude = array_flip( $exclude );\n+\n+\t\t\t\tforeach ( $options as $k => $option ) {\n+\t\t\t\t\t$option['title'] = do_shortcode( $option['title'] );\n+\n+\t\t\t\t\tforeach ( $map as $k_map => $v_map ) {\n+\t\t\t\t\t\tif ( array_key_exists( $k_map, $option ) ) {\n+\t\t\t\t\t\t\t$option[ $v_map ]  = $option[ $k_map ];\n+\t\t\t\t\t\t\t$exclude[ $k_map ] = 1;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$options[ $k ] = array_diff_key( $option, $exclude );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fanswer-options', $options, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $explanation\n+\t\t *\u002F\n+\t\tpublic function set_explanation( $explanation = '' ) {\n+\t\t\t$this->_set_data( 'explanation', $explanation );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_explanation() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fexplanation', do_shortcode( $this->get_data( 'explanation' ) ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $hint\n+\t\t *\u002F\n+\t\tpublic function set_hint( $hint = '' ) {\n+\t\t\t$this->_set_data( 'hint', $hint );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_hint() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fhint', do_shortcode( $this->get_data( 'hint' ) ), $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all type of questions\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function get_types() {\n+\t\t\t$types = apply_filters(\n+\t\t\t\t'learn-press\u002Fquestion-types',\n+\t\t\t\tarray(\n+\t\t\t\t\t'true_or_false'  => esc_html__( 'True Or False', 'learnpress' ),\n+\t\t\t\t\t'multi_choice'   => esc_html__( 'Multi Choice', 'learnpress' ),\n+\t\t\t\t\t'single_choice'  => esc_html__( 'Single Choice', 'learnpress' ),\n+\t\t\t\t\t'fill_in_blanks' => esc_html__( 'Fill In Blanks', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn_press_question_types', $types );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Store question and it's related data into database.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function store() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$id        = absint( $this->get_id() );\n+\t\t\t$is_update = $id > 0;\n+\t\t\t$post_data = array(\n+\t\t\t\t'post_title' => $this->get_data( 'title' ),\n+\t\t\t\t'post_type'  => LP_QUESTION_CPT,\n+\t\t\t\t'ID'         => $id,\n+\t\t\t);\n+\t\t\tif ( $is_update ) {\n+\t\t\t\t$updated = wp_update_post( $post_data, true );\n+\t\t\t} else {\n+\t\t\t\t$updated = wp_insert_post( $post_data, true );\n+\t\t\t}\n+\n+\t\t\tif ( ! is_numeric( $updated ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Does this question support answer options?\n+\t\t\t\u002F*if ( ! $this->is_support( 'answer_options' ) ) {\n+\t\t\t\treturn $updated;\n+\t\t\t}*\u002F\n+\n+\t\t\t$this->empty_answers();\n+\t\t\t$answer_options = $this->get_data( 'answer_options' );\n+\t\t\tif ( $answer_options ) {\n+\t\t\t\t$question_order = 1;\n+\t\t\t\t$query          = \"INSERT INTO {$wpdb->prefix}learnpress_question_answers(`question_id`, `order`) VALUES\";\n+\t\t\t\tforeach ( $answer_options as $answer_option ) {\n+\t\t\t\t\tif ( empty( $answer_option['title'] ) ) {\n+\t\t\t\t\t\tif ( apply_filters( 'learn-press\u002Fquestion\u002Fignore-insert-empty-answer-option', true, $answer_option, $id ) ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$qry = $query . $wpdb->prepare( '(%d, %d)', $id, $question_order ++ );\n+\t\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Finsert-answer-option', $id, $answer_option );\n+\t\t\t\t\tif ( $wpdb->query( $qry ) ) {\n+\t\t\t\t\t\t$inserted_id = $wpdb->insert_id;\n+\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'text', $answer_option['text'] );\n+\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'value', $answer_option['value'] );\n+\t\t\t\t\t\tif ( ! empty( $answer_option['is_true'] ) && ! learn_press_is_negative_value( $answer_option['is_true'] ) ) {\n+\t\t\t\t\t\t\tlearn_press_update_question_answer_meta( $inserted_id, 'checked', 'yes' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Finserted-answer-option', $inserted_id, $id, $answer_option );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $updated;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove all answers to prepare for inserting new\n+\t\t *\u002F\n+\t\tpublic function empty_answers() {\n+\t\t\tglobal $wpdb;\n+\t\t\t$id         = absint( $this->get_id() );\n+\t\t\t$table_meta = $wpdb->learnpress_question_answermeta;\n+\t\t\t$table_main = $wpdb->learnpress_question_answers;\n+\t\t\t$query      = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tDELETE FROM t1, t2\n+\t\t\t\tUSING {$table_main} AS t1 INNER JOIN {$table_meta} AS t2 ON t1.question_answer_id = t2.learnpress_question_answer_id\n+\t\t\t\tWHERE t1.question_id = %d\n+\t\t\t\",\n+\t\t\t\t$id\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F deprecated\n+\t\t\tdo_action( 'learn_press_before_delete_question_answers', $id );\n+\n+\t\t\tdo_action( 'learn-press\u002Fquestion\u002Fdelete-answers', $id );\n+\t\t\tif ( $wpdb->query( $query ) ) {\n+\t\t\t\tdo_action( 'learn-press\u002Fquestion\u002Fdeleted-answers', $id );\n+\t\t\t}\n+\t\t\t\u002F\u002F deprecated\n+\t\t\tdo_action( 'learn_press_delete_question_answers', $id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $meta\n+\t\t * @param $field\n+\t\t * @param $is_saved\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function _filter_meta_box_meta( $meta, $field, $is_saved ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\t\u002F*if ( preg_match( '~\\[question-content\\]~', $field['id'] ) && $field['context'] == 'quiz-list-questions' ) {\n+\t\t\t\t$post = get_post( $this->get_id() );\n+\t\t\t\t$meta = $post->post_content;\n+\t\t\t}\n+\n+\t\t\treturn $meta;*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set new type of question.\n+\t\t * Update _lp_type meta to new type.\n+\t\t *\n+\t\t * @param string $type\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function set_type( $type = '' ) {\n+\n+\t\t\tif ( ! $type ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! learn_press_is_support_question_type( $type ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Change to new type and update meta value\n+\t\t\t$this->_question_type = $type;\n+\t\t\tupdate_post_meta( $this->get_id(), '_lp_type', $type );\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Update ordering of question answers\n+\t\t *\n+\t\t * @param array $orders List of answers\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function update_answer_orders( $orders ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\t\u002F*global $wpdb;\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT qa.question_answer_id, qam2.meta_value as `name`, qam.meta_value as `value`\n+\t\t\t\tFROM {$wpdb->learnpress_question_answers} qa\n+\t\t\t\tINNER JOIN {$wpdb->learnpress_question_answermeta} qam ON qa.question_answer_id = qam.learnpress_question_answer_id AND qam.meta_key = %s\n+\t\t\t\tINNER JOIN {$wpdb->learnpress_question_answermeta} qam2 ON qa.question_answer_id = qam2.learnpress_question_answer_id AND qam2.meta_key = %s\n+\t\t\t\tWHERE qa.question_id = %d\n+\t\t\t\tORDER BY `order`\n+\t\t\t\",\n+\t\t\t\t'value',\n+\t\t\t\t'text',\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t\tif ( $answers = $wpdb->get_results( $query ) ) {\n+\t\t\t\t$query = \"\n+\t\t\t\tUPDATE {$wpdb->learnpress_question_answers}\n+\t\t\t\tSET `order` = CASE\n+\t\t\t\";\n+\t\t\t\tfor ( $order = 0, $n = sizeof( $orders ); $order \u003C $n; $order ++ ) {\n+\t\t\t\t\t$found_answer = false;\n+\t\t\t\t\tforeach ( $answers as $answer ) {\n+\t\t\t\t\t\tif ( $answer->value == $orders[ $order ]['value'] && $answer->name == $orders[ $order ]['text'] ) {\n+\t\t\t\t\t\t\t$found_answer = $answer;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\tif ( $found_answer === false ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\t\t\t\t\t$query .= $wpdb->prepare( 'WHEN question_answer_id = %d THEN %d', $found_answer->question_answer_id, $order + 1 ) . \"\\n\";\n+\t\t\t\t}\n+\t\t\t\t$query .= sprintf( 'ELSE `order` END WHERE question_id = %d', $this->get_id() );\n+\t\t\t\t$wpdb->query( $query );\n+\t\t\t}*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return type of question.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_type() {\n+\t\t\treturn $this->_question_type;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return type of question in 'readable text'.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_type_label() {\n+\t\t\treturn learn_press_question_types()[ $this->get_type() ];\n+\t\t}\n+\n+\t\tprotected function _init() {\n+\t\t\t\u002F\u002Fadd_filter( 'learn_press_question_answers', array( $this, '_get_default_answers' ), 10, 2 );\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * @param mixed       $answers\n+\t\t * @param LP_Question $q\n+\t\t *\n+\t\t * @return array|bool\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\t\u002F*public function _get_default_answers( $answers = false, $q = null ) {\n+\t\t\tif ( ! $answers && ( $q && $q->get_id() == $this->get_id() ) ) {\n+\t\t\t\t$answers = $this->get_default_answers();\n+\t\t\t}\n+\n+\t\t\treturn $answers;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get default question answer.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function get_default_answer() {\n+\t\t\t$answer = array(\n+\t\t\t\t'question_answer_id' => - 1,\n+\t\t\t\t'title'              => '',\n+\t\t\t\t'is_true'            => '',\n+\t\t\t\t'value'              => learn_press_random_value(),\n+\t\t\t);\n+\n+\t\t\treturn $answer;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default question list answers.\n+\t\t *\n+\t\t * @return array|bool\n+\t\t *\u002F\n+\t\tpublic function get_default_answers() {\n+\t\t\t$answers = array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_answer_id' => - 1,\n+\t\t\t\t\t'is_true'            => 'yes',\n+\t\t\t\t\t'value'              => learn_press_random_value(),\n+\t\t\t\t\t'title'              => esc_html__( 'First option', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_answer_id' => - 2,\n+\t\t\t\t\t'is_true'            => 'no',\n+\t\t\t\t\t'value'              => learn_press_random_value(),\n+\t\t\t\t\t'title'              => esc_html__( 'Second option', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_answer_id' => - 3,\n+\t\t\t\t\t'is_true'            => 'no',\n+\t\t\t\t\t'value'              => learn_press_random_value(),\n+\t\t\t\t\t'title'              => esc_html__( 'Third option', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Get question answers option.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 4.0.1\n+\t\t * @modify 4.1.7.3 by tungnx\n+\t\t * @return LP_Question_Answer_Option[]\n+\t\t *\u002F\n+\t\tpublic function get_answers(): array {\n+\t\t\t$lp_question_cache = LP_Question_Cache::instance();\n+\t\t\t$key_cache         = \"{$this->get_id()}\u002Foption_answers\";\n+\t\t\t\u002F\u002F$answers = LP_Object_Cache::get( 'answer-options-' . $this->get_id(), 'learn-press\u002Fquestions' );\n+\t\t\t$answers_option = $lp_question_cache->get_cache( $key_cache );\n+\n+\t\t\tif ( false === $answers_option ) {\n+\t\t\t\t$answers_option = $this->_curd->load_answer_options( $this->get_id() );\n+\n+\t\t\t\tif ( ! $answers_option ) {\n+\t\t\t\t\t$answers_option = $this->get_default_answers();\n+\t\t\t\t}\n+\n+\t\t\t\t$lp_question_cache->set_cache( $key_cache, $answers_option );\n+\t\t\t}\n+\n+\t\t\trequire_once 'class-lp-question-answers.php';\n+\n+\t\t\t$answers_option_tmp = [];\n+\t\t\tforeach ( $answers_option as $k => $answer ) {\n+\t\t\t\t$answer_option        = new LP_Question_Answer_Option( $this, $answer );\n+\t\t\t\t$answers_option_tmp[] = $answer_option;\n+\t\t\t}\n+\n+\t\t\treturn $answers_option_tmp;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Create default answers.\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t *\u002F\n+\t\tpublic function create_default_answers() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$answers = $this->get_default_answers();\n+\n+\t\t\tforeach ( $answers as $index => $answer ) {\n+\t\t\t\t$answer = array(\n+\t\t\t\t\t'question_id' => $this->get_id(),\n+\t\t\t\t\t'title'       => $answer['title'],\n+\t\t\t\t\t'value'       => $answer['value'] ?? '',\n+\t\t\t\t\t'is_true'     => ( $answer['is_true'] == 'yes' ) ? $answer['is_true'] : '',\n+\t\t\t\t\t'order'       => $index + 1,\n+\t\t\t\t);\n+\n+\t\t\t\t$wpdb->insert(\n+\t\t\t\t\t$wpdb->learnpress_question_answers,\n+\t\t\t\t\t$answer,\n+\t\t\t\t\tarray( '%d', '%s', '%s', '%s', '%d' )\n+\t\t\t\t);\n+\n+\t\t\t\t$question_answer_id = $wpdb->insert_id;\n+\n+\t\t\t\tif ( $question_answer_id ) {\n+\t\t\t\t\t$answer['question_answer_id'] = $question_answer_id;\n+\t\t\t\t}\n+\n+\t\t\t\t$answers[ $index ] = $answer;\n+\t\t\t}\n+\n+\t\t\t$this->set_data( 'answer_options', $answers );\n+\t\t}\n+\n+\t\tpublic function setup_data( $quiz_id, $course_id = 0, $user_id = 0 ) {\n+\n+\t\t\t$quiz   = learn_press_get_quiz( $quiz_id );\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( $user_id ) {\n+\t\t\t\t$user = learn_press_get_user( $user_id );\n+\t\t\t} else {\n+\t\t\t\t$user = learn_press_get_current_user();\n+\t\t\t}\n+\n+\t\t\t$show_correct = false;\n+\n+\t\t\tif ( $user && $quiz && $course ) {\n+\t\t\t\t$user_quiz = $user->get_quiz_data( $quiz->get_id(), $course->get_id() );\n+\t\t\t\tif ( $user_quiz ) {\n+\t\t\t\t\t$has_checked  = $user->has_checked_answer( $this->get_id(), $quiz->get_id(), $course->get_id() );\n+\t\t\t\t\t$show_correct = $user_quiz->is_completed() && ( $has_checked || $quiz->get_show_result() ) ? 'yes' : false;\n+\t\t\t\t\t$answered     = $user_quiz->get_question_answer( $this->get_id() );\n+\t\t\t\t\t$this->set_answered( $answered );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$this->show_correct_answers( $show_correct );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get question name.\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.1.7.3\n+\t\t *\u002F\n+\t\tpublic function get_name() {\n+\t\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\t\u002F*return $this->_options['name'] ?? ucfirst(\n+\t\t\t\tpreg_replace_callback(\n+\t\t\t\t\t'!_([a-z])!',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t$this,\n+\t\t\t\t\t\t'sanitize_name_callback',\n+\t\t\t\t\t),\n+\t\t\t\t\t$this->get_type()\n+\t\t\t\t)\n+\t\t\t);*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $matches\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function sanitize_name_callback( $matches ) {\n+\t\t\treturn strtoupper( $matches[1] );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Sets the value for a variable of this class\n+\t\t *\n+\t\t * @param   $key      string  The name of a variable of this class\n+\t\t * @param   $value    mixed     The value to set\n+\t\t *\n+\t\t * @return  void\n+\t\t *\u002F\n+\t\tpublic function set( $key, $value ) {\n+\t\t\t$this->$key = $value;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Gets the value of a variable of this class with multiple level of an object or array\n+\t\t * example: $obj->get('a.b') -> like this :\n+\t\t *          - $obj->a->b\n+\t\t *          - or $obj->a['b']\n+\t\t *\n+\t\t * @param   null $key     string  Single or multiple level such as a.b.c\n+\t\t * @param   null $default mixed   Return a default value if the key does not exists or is empty\n+\t\t * @param   null $func    string  The function to apply the result before return\n+\t\t *\n+\t\t * @return  mixed|null\n+\t\t *\u002F\n+\t\tpublic function get( $key = null, $default = null, $func = null ) {\n+\t\t\t$val = $this->_get( $this, $key, $default );\n+\n+\t\t\treturn is_callable( $func ) ? call_user_func_array( $func, array( $val ) ) : $val;\n+\t\t}\n+\n+\n+\t\t\u002F**\n+\t\t * Magic function to get question data.\n+\t\t *\n+\t\t * @param      $prop\n+\t\t * @param      $key\n+\t\t * @param null $default\n+\t\t * @param null $type\n+\t\t *\n+\t\t * @return mixed|null\n+\t\t *\u002F\n+\t\tprotected function _get( $prop, $key, $default = null, $type = null ) {\n+\t\t\t$return = $default;\n+\n+\t\t\tif ( $key === false || $key == null ) {\n+\t\t\t\treturn $return;\n+\t\t\t}\n+\t\t\t$deep = explode( '.', $key );\n+\n+\t\t\tif ( is_array( $prop ) ) {\n+\t\t\t\tif ( isset( $prop[ $deep[0] ] ) ) {\n+\t\t\t\t\t$return = $prop[ $deep[0] ];\n+\t\t\t\t\tif ( count( $deep ) > 1 ) {\n+\t\t\t\t\t\tunset( $deep[0] );\n+\t\t\t\t\t\t$return = $this->_get( $return, implode( '.', $deep ), $default, $type );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} elseif ( is_object( $prop ) ) {\n+\t\t\t\tif ( isset( $prop->{$deep[0]} ) ) {\n+\t\t\t\t\t$return = $prop->{$deep[0]};\n+\t\t\t\t\tif ( count( $deep ) > 1 ) {\n+\t\t\t\t\t\tunset( $deep[0] );\n+\t\t\t\t\t\t$return = $this->_get( $return, implode( '.', $deep ), $default, $type );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $type == 'object' ) {\n+\t\t\t\tsettype( $return, 'object' );\n+\t\t\t} elseif ( $type == 'array' ) {\n+\t\t\t\tsettype( $return, 'array' );\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Find value in answer's option and compare with value answered by user.\n+\t\t *\n+\t\t * @param LP_Question_Answer_Option $answer\n+\t\t * @param mixed                     $answered\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_selected_option( $answer, $answered = false ): bool {\n+\t\t\tif ( is_array( $answered ) ) {\n+\t\t\t\t$is_selected = in_array( $answer['value'], $answered );\n+\t\t\t} else {\n+\t\t\t\t$is_selected = $answer['value'] === $answered;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fis-selected-option', $is_selected, $answer, $answered, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save user question answer.\n+\t\t *\n+\t\t * @param      $answer\n+\t\t * @param      $quiz_id\n+\t\t * @param null    $user_id\n+\t\t * @deprecated 4.2.7.3\n+\t\t *\u002F\n+\t\t\u002F*public function save_user_answer( $answer, $quiz_id, $user_id = null ) {\n+\t\t\tif ( $user_id ) {\n+\t\t\t\t$user = LP_User_Factory::get_user( $user_id );\n+\t\t\t} else {\n+\t\t\t\t$user = learn_press_get_current_user();\n+\t\t\t}\n+\n+\t\t\t$progress = $user->get_quiz_progress( $quiz_id );\n+\n+\t\t\tif ( $progress ) {\n+\t\t\t\tif ( ! isset( $progress->question_answers ) ) {\n+\t\t\t\t\t$question_answers = array();\n+\t\t\t\t} else {\n+\t\t\t\t\t$question_answers = $progress->question_answers;\n+\t\t\t\t}\n+\t\t\t\t$question_answers[ $this->get_id() ] = $answer;\n+\n+\t\t\t\t$question_answers = apply_filters( 'learn_press_update_user_question_answers', $question_answers, $progress->history_id, $user_id, $this, $quiz_id );\n+\n+\t\t\t\t\u002F\u002F learn_press_update_user_quiz_meta( $progress->history_id, 'question_answers', $question_answers );\n+\t\t\t}\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Allow check question answer, default disable for True or False and Single choice, override by Multiple choice question.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function can_check_answer() {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user answer, override by question type class.\n+\t\t *\n+\t\t * @param null $args | question answered\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function check( $args = null ) {\n+\t\t\t$return = array(\n+\t\t\t\t'correct' => false,\n+\t\t\t\t'mark'    => 0,\n+\t\t\t);\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get answer at position\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param int $at\n+\t\t *\n+\t\t * @return LP_Question_Answer_Option|mixed\n+\t\t *\u002F\n+\t\tpublic function get_answer_at( $at ) {\n+\t\t\treturn $this->get_answers()->get_answer_at( $at );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user answered data.\n+\t\t *\n+\t\t * @param $args\n+\t\t *\n+\t\t * @return null\n+\t\t *\u002F\n+\t\tpublic function get_user_answered( $args ) {\n+\t\t\t$args     = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'history_id' => 0,\n+\t\t\t\t\t'quiz_id'    => 0,\n+\t\t\t\t\t'course_id'  => 0,\n+\t\t\t\t\t'force'      => false,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$answered = null;\n+\t\t\tif ( $args['history_id'] ) {\n+\t\t\t\t$user_meta = learn_press_get_user_item_meta( $args['history_id'], 'question_answers', true );\n+\t\t\t\tif ( $user_meta && array_key_exists( $this->get_id(), $user_meta ) ) {\n+\t\t\t\t\t$answered = $user_meta[ $this->get_id() ];\n+\t\t\t\t}\n+\t\t\t} elseif ( $args['quiz_id'] && $args['course_id'] ) {\n+\t\t\t\t$user    = learn_press_get_current_user();\n+\t\t\t\t$history = $user->get_quiz_results( $args['quiz_id'], $args['course_id'] );\n+\n+\t\t\t\tif ( $history ) {\n+\t\t\t\t\t$user_meta = learn_press_get_user_item_meta( $history->history_id, 'question_answers', true );\n+\n+\t\t\t\t\tif ( $user_meta && array_key_exists( $this->get_id(), $user_meta ) ) {\n+\t\t\t\t\t\t$answered = $user_meta[ $this->get_id() ];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $answered;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get question.\n+\t\t *\n+\t\t * @param bool  $the_question\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return LP_Question|bool\n+\t\t *\u002F\n+\t\tpublic static function get_question( $the_question = false, $args = array() ) {\n+\t\t\t\u002F\u002F question object\n+\t\t\t$the_question = self::get_question_object( $the_question );\n+\t\t\tif ( ! $the_question ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $args['force'] ) ) {\n+\t\t\t\t$force = ! ! $args['force'];\n+\t\t\t\tunset( $args['force'] );\n+\t\t\t} else {\n+\t\t\t\t$force = false;\n+\t\t\t}\n+\n+\t\t\t$key_args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'   => $the_question->ID,\n+\t\t\t\t\t'type' => $the_question->post_type,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$key = LP_Helper::array_to_md5( $key_args );\n+\n+\t\t\tif ( $force ) {\n+\t\t\t\tLP_Global::$questions[ $key ] = false;\n+\t\t\t}\n+\n+\t\t\tif ( empty( LP_Global::$questions[ $key ] ) ) {\n+\t\t\t\t$class_name = self::get_question_class( $the_question, $args );\n+\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\n+\t\t\t\t\t$lesson = new $class_name( $the_question->ID, $args );\n+\t\t\t\t} elseif ( $class_name instanceof LP_Question ) {\n+\t\t\t\t\t$lesson = $class_name;\n+\t\t\t\t} else {\n+\t\t\t\t\t$lesson = new self( $the_question->ID, $args );\n+\t\t\t\t}\n+\t\t\t\tLP_Global::$questions[ $key ] = $lesson;\n+\t\t\t}\n+\n+\t\t\treturn LP_Global::$questions[ $key ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the question class name.\n+\t\t *\n+\t\t * @param  WP_Post $the_question\n+\t\t * @param  array   $args (default: array())\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate static function get_question_class( $the_question, $args = array() ) {\n+\t\t\t$question_id = absint( $the_question->ID );\n+\t\t\tif ( ! empty( $args['type'] ) ) {\n+\t\t\t\t$question_type = $args['type'];\n+\t\t\t} else {\n+\t\t\t\t$question_type = get_post_meta( $question_id, '_lp_type', true );\n+\t\t\t}\n+\n+\t\t\t$class_name = self::get_class_name_from_question_type( array( $question_type ) );\n+\n+\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fobject-class', $class_name, $question_type, $question_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get question class from question type.\n+\t\t *\n+\t\t * @param  string $question_type\n+\t\t *\n+\t\t * @return string|false\n+\t\t *\u002F\n+\t\tpublic static function get_class_name_from_question_type( $question_type ) {\n+\n+\t\t\tif ( is_array( $question_type ) ) {\n+\t\t\t\t$question_type = reset( $question_type );\n+\t\t\t}\n+\n+\t\t\treturn ! $question_type ? __CLASS__ : 'LP_Question_' . implode( '_', array_map( 'ucfirst', explode( '-', $question_type ) ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the question object.\n+\t\t *\n+\t\t * @since  3.0.0\n+\t\t *\n+\t\t * @param  mixed $the_question\n+\t\t *\n+\t\t * @uses   WP_Post\n+\t\t * @return WP_Post|bool false on failure\n+\t\t *\u002F\n+\t\tprivate static function get_question_object( $the_question ) {\n+\t\t\tif ( false === $the_question ) {\n+\t\t\t\t$the_question = get_post_type() === LP_QUESTION_CPT ? $GLOBALS['post'] : false;\n+\t\t\t} elseif ( is_numeric( $the_question ) ) {\n+\t\t\t\t$the_question = get_post( $the_question );\n+\t\t\t} elseif ( $the_question instanceof LP_Course_Item ) {\n+\t\t\t\t$the_question = get_post( $the_question->get_id() );\n+\t\t\t} elseif ( ! ( $the_question instanceof WP_Post ) ) {\n+\t\t\t\t$the_question = false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquestion\u002Fpost-object', $the_question );\n+\t\t}\n+\n+\t\tprotected function _get_checked( $user_answer = null ) {\n+\t\t\t$key = $user_answer ? md5( serialize( $user_answer ) ) : - 1;\n+\n+\t\t\treturn LP_Object_Cache::get( 'question-' . $this->get_id() . '\u002F' . $key, 'learn-press\u002Fanswer-checked' );\n+\t\t}\n+\n+\t\tprotected function _set_checked( $checked, $user_answer ) {\n+\t\t\t$key = $user_answer ? md5( serialize( $user_answer ) ) : - 1;\n+\n+\t\t\treturn LP_Object_Cache::set( 'question-' . $this->get_id() . '\u002F' . $key, $checked, 'learn-press\u002Fanswer-checked' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default json data for editor settings\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_editor_default_settings() {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fquestion-editor-default-settings',\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'       => $this->get_id(),\n+\t\t\t\t\t'type'     => $this->get_type(),\n+\t\t\t\t\t'duration' => $this->get_duration(),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get json data for editor settings.\n+\t\t *\n+\t\t * @since 3.3.0\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_editor_settings() {\n+\t\t\t$defaults = $this->get_editor_default_settings();\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fquestion-editor-settings',\n+\t\t\t\tarray_merge(\n+\t\t\t\t\t$defaults,\n+\t\t\t\t\tarray()\n+\t\t\t\t),\n+\t\t\t\t$this->get_type(),\n+\t\t\t\t$this->get_id(),\n+\t\t\t\t$this\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-single-choice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-single-choice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-single-choice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-single-choice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,68 +1,68 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Question_Single_Choice\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 3.0.0\r\n- * @extends LP_Question\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_Single_Choice' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_Single_Choice\r\n-\t *\u002F\r\n-\tclass LP_Question_Single_Choice extends LP_Question {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Type of this question.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_question_type = 'single_choice';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_Single_Choice constructor.\r\n-\t\t *\r\n-\t\t * @param null $the_question\r\n-\t\t * @param null $args\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_question = null, $args = null ) {\r\n-\t\t\tparent::__construct( $the_question, $args );\r\n-\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user answer.\r\n-\t\t *\r\n-\t\t * @param null $user_answer\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function check( $user_answer = null ) {\r\n-\t\t\t$return  = parent::check();\r\n-\t\t\t$answers = $this->get_answers();\r\n-\r\n-\t\t\tif ( $answers ) {\r\n-\t\t\t\tforeach ( $answers as $key => $option ) {\r\n-\t\t\t\t\t$data = $option->get_data();\r\n-\t\t\t\t\tif ( ( $data['is_true'] == 'yes' ) && ( $this->is_selected_option( $data, $user_answer ) ) ) {\r\n-\t\t\t\t\t\t$return['correct'] = true;\r\n-\t\t\t\t\t\t$return['mark']    = floatval( $this->get_mark() );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Question_Single_Choice\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 3.0.0\n+ * @extends LP_Question\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_Single_Choice' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_Single_Choice\n+\t *\u002F\n+\tclass LP_Question_Single_Choice extends LP_Question {\n+\n+\t\t\u002F**\n+\t\t * Type of this question.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_question_type = 'single_choice';\n+\n+\t\t\u002F**\n+\t\t * LP_Question_Single_Choice constructor.\n+\t\t *\n+\t\t * @param null $the_question\n+\t\t * @param null $args\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_question = null, $args = null ) {\n+\t\t\tparent::__construct( $the_question, $args );\n+\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user answer.\n+\t\t *\n+\t\t * @param null $user_answer\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function check( $user_answer = null ) {\n+\t\t\t$return  = parent::check();\n+\t\t\t$answers = $this->get_answers();\n+\n+\t\t\tif ( $answers ) {\n+\t\t\t\tforeach ( $answers as $key => $option ) {\n+\t\t\t\t\t$data = $option->get_data();\n+\t\t\t\t\tif ( ( $data['is_true'] == 'yes' ) && ( $this->is_selected_option( $data, $user_answer ) ) ) {\n+\t\t\t\t\t\t$return['correct'] = true;\n+\t\t\t\t\t\t$return['mark']    = floatval( $this->get_mark() );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-true-or-false.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-true-or-false.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquestion\u002Fclass-lp-question-true-or-false.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquestion\u002Fclass-lp-question-true-or-false.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,90 +1,90 @@\n-\u003C?php\r\n-\u002F**\r\n- * LP_Question_True_Or_False\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 3.0.0\r\n- * @extends LP_Question\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Question_True_Or_False' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Question_True_Or_False\r\n-\t *\u002F\r\n-\tclass LP_Question_True_Or_False extends LP_Question {\r\n-\t\t\u002F**\r\n-\t\t * Type of this question.\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_question_type = 'true_or_false';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Question_True_Or_False constructor.\r\n-\t\t *\r\n-\t\t * @param null $the_question\r\n-\t\t * @param null $args\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_question = null, $args = null ) {\r\n-\t\t\tparent::__construct( $the_question, $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get true or false default answers.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_default_answers() {\r\n-\t\t\t$answers = array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_answer_id' => - 1,\r\n-\t\t\t\t\t'is_true'            => 'yes',\r\n-\t\t\t\t\t'value'              => 'true',\r\n-\t\t\t\t\t'title'              => esc_html__( 'True', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'question_answer_id' => - 2,\r\n-\t\t\t\t\t'is_true'            => 'no',\r\n-\t\t\t\t\t'value'              => 'false',\r\n-\t\t\t\t\t'title'              => esc_html__( 'False', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $answers;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user answer.\r\n-\t\t *\r\n-\t\t * @param null $user_answer\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function check( $user_answer = null ) {\r\n-\t\t\t$return = parent::check();\r\n-\t\t\ttry {\r\n-\t\t\t\t$answers = $this->get_answers();\r\n-\t\t\t\tif ( $answers ) {\r\n-\t\t\t\t\tforeach ( $answers as $key => $option ) {\r\n-\t\t\t\t\t\t$data = $option->get_data();\r\n-\t\t\t\t\t\tif ( $data['is_true'] == 'yes' && $data['value'] == $user_answer ) {\r\n-\t\t\t\t\t\t\t$return['correct'] = true;\r\n-\t\t\t\t\t\t\t$return['mark']    = floatval( $this->get_mark() );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * LP_Question_True_Or_False\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 3.0.0\n+ * @extends LP_Question\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Question_True_Or_False' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Question_True_Or_False\n+\t *\u002F\n+\tclass LP_Question_True_Or_False extends LP_Question {\n+\t\t\u002F**\n+\t\t * Type of this question.\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_question_type = 'true_or_false';\n+\n+\t\t\u002F**\n+\t\t * LP_Question_True_Or_False constructor.\n+\t\t *\n+\t\t * @param null $the_question\n+\t\t * @param null $args\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_question = null, $args = null ) {\n+\t\t\tparent::__construct( $the_question, $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get true or false default answers.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_default_answers() {\n+\t\t\t$answers = array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_answer_id' => - 1,\n+\t\t\t\t\t'is_true'            => 'yes',\n+\t\t\t\t\t'value'              => 'true',\n+\t\t\t\t\t'title'              => esc_html__( 'True', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'question_answer_id' => - 2,\n+\t\t\t\t\t'is_true'            => 'no',\n+\t\t\t\t\t'value'              => 'false',\n+\t\t\t\t\t'title'              => esc_html__( 'False', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\treturn $answers;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user answer.\n+\t\t *\n+\t\t * @param null $user_answer\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function check( $user_answer = null ) {\n+\t\t\t$return = parent::check();\n+\t\t\ttry {\n+\t\t\t\t$answers = $this->get_answers();\n+\t\t\t\tif ( $answers ) {\n+\t\t\t\t\tforeach ( $answers as $key => $option ) {\n+\t\t\t\t\t\t$data = $option->get_data();\n+\t\t\t\t\t\tif ( $data['is_true'] == 'yes' && $data['value'] == $user_answer ) {\n+\t\t\t\t\t\t\t$return['correct'] = true;\n+\t\t\t\t\t\t\t$return['mark']    = floatval( $this->get_mark() );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquiz\u002Fclass-lp-quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquiz\u002Fclass-lp-quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquiz\u002Fclass-lp-quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquiz\u002Fclass-lp-quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1090 +1,1090 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Quiz.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Quiz' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Quiz\r\n-\t *\u002F\r\n-\tclass LP_Quiz extends LP_Course_Item {\r\n-\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\r\n-\t\t * @deprecated\r\n-\t\t *\u002F\r\n-\t\tprotected static $_meta = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_item_type = LP_QUIZ_CPT;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_questions = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array(\r\n-\t\t\t\u002F\u002F 'show_result'        => 'no',\r\n-\t\t\t'passing_grade_type'   => '',\r\n-\t\t\t'passing_grade'        => 0,\r\n-\t\t\t\u002F\u002F 'show_check_answer'  => 'no',\r\n-\t\t\t\u002F\u002F 'count_check_answer' => 0,\r\n-\t\t\t\u002F\u002F 'show_hint'          => 'no',\r\n-\t\t\t\u002F\u002F 'count_hint'         => 0,\r\n-\t\t\t\u002F\u002F 'archive_history'    => 'no',\r\n-\t\t\t\u002F\u002F 'show_hide_question' => 'yes',\r\n-\t\t\t\u002F\u002F 'preview'            => 'no',\r\n-\t\t\t\u002F\u002F 'minus_points'         => 0,\r\n-\t\t\t'minus_skip_questions' => 'no',\r\n-\r\n-\t\t\t'negative_marking'     => 'no',\r\n-\t\t\t'instant_check'        => 'no',\r\n-\t\t\t'retake_count'         => 0,\r\n-\t\t\t'show_correct_review'  => 'yes',\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tprotected static $_loaded = 0;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Constructor gets the post object and sets the ID for the loaded course.\r\n-\t\t *\r\n-\t\t * @param mixed $the_quiz\r\n-\t\t * @param mixed $args\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_quiz, $args = array() ) {\r\n-\t\t\t$this->_curd = new LP_Quiz_CURD();\r\n-\r\n-\t\t\tif ( is_numeric( $the_quiz ) && $the_quiz > 0 ) {\r\n-\t\t\t\t$this->set_id( $the_quiz );\r\n-\t\t\t} elseif ( $the_quiz instanceof self ) {\r\n-\t\t\t\t$this->set_id( absint( $the_quiz->get_id() ) );\r\n-\t\t\t} elseif ( ! empty( $the_quiz->ID ) ) {\r\n-\t\t\t\t$this->set_id( absint( $the_quiz->ID ) );\r\n-\t\t\t}\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\r\n-\t\t\tself::$_loaded ++;\r\n-\t\t\tif ( self::$_loaded == 1 ) {\r\n-\t\t\t\tadd_filter( 'debug_data', array( __CLASS__, 'log' ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Log debug data.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @param $data\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function log( $data ) {\r\n-\t\t\t$data[] = __CLASS__ . '( ' . self::$_loaded . ' )';\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_heading_title( $context = '' ) {\r\n-\t\t\treturn $this->get_title( $context );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load quiz data\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\t$this->_curd->load( $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default quiz meta.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_default_meta() {\r\n-\t\t\t$meta = array(\r\n-\t\t\t\t'review'              => 'no',\r\n-\t\t\t\t'duration'            => '10 minute',\r\n-\t\t\t\t'passing_grade'       => 80,\r\n-\t\t\t\t'negative_marking'    => 'no',\r\n-\t\t\t\t'instant_check'       => 'no',\r\n-\t\t\t\t'retake_count'        => '0',\r\n-\t\t\t\t'pagination'          => 1,\r\n-\t\t\t\t'show_correct_review' => 'yes',\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fdefault-meta', $meta );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save quiz data.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function save() {\r\n-\t\t\tif ( $this->get_id() ) {\r\n-\t\t\t\t$return = $this->_curd->update( $this );\r\n-\t\t\t} else {\r\n-\t\t\t\t$return = $this->_curd->create( $this );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_negative_marking() {\r\n-\t\t\treturn $this->get_data( 'negative_marking' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_negative_marking( $set ) {\r\n-\t\t\t$this->_set_data( 'negative_marking', ! learn_press_is_negative_value( $set ) ? 'yes' : 'no' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_show_correct_review() {\r\n-\t\t\treturn $this->get_data( 'show_correct_review' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_show_correct_review( $set ) {\r\n-\t\t\t$this->_set_data( 'show_correct_review', $set );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_instant_check() {\r\n-\t\t\treturn $this->get_data( 'instant_check' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_instant_check( $set ) {\r\n-\t\t\t$this->_set_data( 'instant_check', ! learn_press_is_negative_value( $set ) ? 'yes' : 'no' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_retake_count( $count ) {\r\n-\t\t\t$this->_set_data( 'retake_count', $count );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_retake_count() {\r\n-\t\t\treturn $this->get_data( 'retake_count' );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_pagination() {\r\n-\t\t\treturn ( $n = $this->get_data( 'pagination' ) ) > 1 ? $n : 0;\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_pagination( $set ) {\r\n-\t\t\t$this->_set_data( 'pagination', absint( $set ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $show_result\r\n-\t\t *\u002F\r\n-\t\tpublic function set_show_result( $show_result ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'show_result', $show_result );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_show_result() {\r\n-\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn $this->get_data( 'show_result' ) === 'yes';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * @param $review_questions\r\n-\t\t *\u002F\r\n-\t\tpublic function set_review_questions( $review_questions ) {\r\n-\r\n-\t\t\t$this->_set_data( 'review_questions', $review_questions );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Enable review quiz\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_review_questions(): bool {\r\n-\t\t\treturn 'yes' === $this->get_data( 'review_questions', 'yes' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $type\r\n-\t\t *\u002F\r\n-\t\tpublic function set_passing_grade_type( $type ) {\r\n-\t\t\t$this->_set_data( 'passing_grade_type', $type );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_passing_grade_type() {\r\n-\t\t\treturn $this->get_data( 'passing_grade_type', 'percentage' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $value\r\n-\t\t *\u002F\r\n-\t\tpublic function set_passing_grade( $value ) {\r\n-\t\t\t$this->_set_data( 'passing_grade', $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_passing_grade() {\r\n-\t\t\t$type  = $this->get_passing_grade_type();\r\n-\t\t\t$value = get_post_meta( $this->get_id(), '_lp_passing_grade', true );\r\n-\t\t\tif ( empty( $value ) ) {\r\n-\t\t\t\t$value = 80;\r\n-\t\t\t}\r\n-\r\n-\t\t\tswitch ( $type ) {\r\n-\t\t\t\tcase 'point':\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'percentage':\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$value = \"{$value}%\";\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $value;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $value\r\n-\t\t *\u002F\r\n-\t\tpublic function set_show_check_answer( $value ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'show_check_answer', $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return int|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_show_check_answer() {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn intval( $this->get_data( 'show_check_answer' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $count\r\n-\t\t *\u002F\r\n-\t\tpublic function set_count_check_answer( $count ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'count_check_answer', $count );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_check_answer_count() {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn intval( $this->get_data( 'check_answer_count' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $value\r\n-\t\t *\u002F\r\n-\t\tpublic function set_show_hint( $value ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'show_hint', $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_show_hint() {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn intval( $this->get_data( 'show_hint' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $count\r\n-\t\t *\u002F\r\n-\t\tpublic function set_count_hint( $count ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'count_hint', $count );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if hint answer is enabled.\r\n-\t\t *\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function enable_show_hint() {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fenable-show-hint', $this->get_data( 'show_hint' ) == 'yes', $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $value\r\n-\t\t *\u002F\r\n-\t\tpublic function set_archive_history( $value ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\t$this->_set_data( 'archive_history', $value );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if archive history is enabled.\r\n-\t\t *\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function enable_archive_history() {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fenable-archive-history', $this->get_data( 'archive_history' ) == 'yes', $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return total mark of quiz by calculating total mark of all questions.\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_mark() {\r\n-\t\t\t$mark = $this->get_data( 'mark', false );\r\n-\t\t\tif ( false === $mark || '' === $mark ) {\r\n-\t\t\t\t$questions = $this->get_question_ids();\r\n-\t\t\t\t$mark      = 0;\r\n-\r\n-\t\t\t\tforeach ( $questions as $question_id ) {\r\n-\t\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t\t\tif ( $question ) {\r\n-\t\t\t\t\t\t$mark += $question->get_mark();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->_set_data( 'mark', $mark );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz-mark', $mark, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get duration of quiz\r\n-\t\t *\r\n-\t\t * @return LP_Duration\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration() {\r\n-\t\t\t$duration = parent::get_duration();\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz-duration', $duration, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz questions.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @editor tungnx\r\n-\t\t * @since 3.x.x\r\n-\t\t * @version 1.0.1\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_questions( $context = 'display' ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.2.0' );\r\n-\t\t\t$questions = array();\r\n-\t\t\t$ids       = $this->_curd->read_question_ids( $this->get_id() );\r\n-\r\n-\t\t\tif ( $ids ) {\r\n-\t\t\t\tforeach ( $ids as $id ) {\r\n-\t\t\t\t\t$questions[ $id ] = $id;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestions', $questions, $this->get_id(), $this->get_course_id(), $context );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Quiz editor get questions.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function quiz_editor_get_questions() {\r\n-\t\t\t\u002F\u002F list questions\r\n-\t\t\t$questions = $this->get_question_ids( 'edit' );\r\n-\t\t\t\u002F\u002F order questions in quiz\r\n-\t\t\t$question_order = learn_press_quiz_get_questions_order( $questions );\r\n-\r\n-\t\t\t$result = array();\r\n-\r\n-\t\t\tforeach ( $questions as $id ) {\r\n-\t\t\t\t$question = LP_Question::get_question( $id );\r\n-\r\n-\t\t\t\t$answers = array();\r\n-\t\t\t\t\u002F\u002F handle question answer\r\n-\t\t\t\tif ( is_array( $question->get_data( 'answer_options' ) ) ) {\r\n-\t\t\t\t\tforeach ( $question->get_data( 'answer_options' ) as $answer ) {\r\n-\t\t\t\t\t\t$answers[] = $answer;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$post     = get_post( $id );\r\n-\t\t\t\t$result[] = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fquiz-editor\u002Fquestion-data',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'id'       => $id,\r\n-\t\t\t\t\t\t'open'     => false,\r\n-\t\t\t\t\t\t'title'    => $post->post_title,\r\n-\t\t\t\t\t\t'type'     => array(\r\n-\t\t\t\t\t\t\t'key'   => $question->get_type(),\r\n-\t\t\t\t\t\t\t'label' => $question->get_type_label(),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'answers'  => apply_filters( 'learn-press\u002Fquiz-editor\u002Fquestion-answers-data', $answers, $id, $this->get_id() ),\r\n-\t\t\t\t\t\t'settings' => array(\r\n-\t\t\t\t\t\t\t'content'     => $post->post_content,\r\n-\t\t\t\t\t\t\t'mark'        => get_post_meta( $id, '_lp_mark', true ),\r\n-\t\t\t\t\t\t\t'explanation' => get_post_meta( $id, '_lp_explanation', true ),\r\n-\t\t\t\t\t\t\t'hint'        => get_post_meta( $id, '_lp_hint', true ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'order'    => $question_order[ $id ],\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$id,\r\n-\t\t\t\t\t$this->get_id()\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquiz_editor_questions', $result, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz duration html.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_duration_html() {\r\n-\t\t\t$duration = $this->get_duration();\r\n-\t\t\tif ( $duration ) {\r\n-\t\t\t\t$duration = learn_press_seconds_to_time( $duration->get_seconds() );\r\n-\t\t\t} else {\r\n-\t\t\t\t$duration = __( 'Unlimited', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_quiz_duration_html', $duration, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get number questions in quiz.\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t *\u002F\r\n-\t\tpublic function count_questions(): int {\r\n-\t\t\t$size      = 0;\r\n-\t\t\t$questions = $this->get_question_ids();\r\n-\r\n-\t\t\tif ( $questions ) {\r\n-\t\t\t\t$size = sizeof( $questions );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn (int) apply_filters( 'learn-press\u002Fquiz\u002Fcount-questions', $size, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all question's ids of the quiz.\r\n-\t\t *\r\n-\t\t * @param string $context\r\n-\t\t *\r\n-\t\t * @return int[]\r\n-\t\t * @editor tungnx\r\n-\t\t * @version 1.0.1\r\n-\t\t * @since 3.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question_ids( string $context = 'display' ): array {\r\n-\t\t\t$question_ids = $this->_curd->read_question_ids( $this->get_id(), $context );\r\n-\t\t\t$question_ids = apply_filters( 'learn-press\u002Fquiz\u002Fget-question-ids', $question_ids, $this->get_id(), $this->get_course_id(), $context );\r\n-\t\t\tif ( ! is_array( $question_ids ) ) {\r\n-\t\t\t\t$question_ids = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $question_ids;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get number questions for user do it.\r\n-\t\t *\r\n-\t\t * @return mixed|null\r\n-\t\t *\u002F\r\n-\t\tpublic function get_number_questions_to_do() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fnumber-questions-show', $this->count_questions(), $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * This quiz has any question?\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function has_questions() {\r\n-\t\t\treturn $this->count_questions() > 0;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get js localize script in frontend. [NOT USED]\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_localize() {\r\n-\t\t\t$localize = array(\r\n-\t\t\t\t'confirm_finish_quiz' => array(\r\n-\t\t\t\t\t'title'   => __( 'Finish quiz', 'learnpress' ),\r\n-\t\t\t\t\t'message' => __( 'Are you sure you want to finish this quiz?', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'confirm_retake_quiz' => array(\r\n-\t\t\t\t\t'title'   => __( 'Retake quiz', 'learnpress' ),\r\n-\t\t\t\t\t'message' => __( 'Are you sure you want to retake this quiz?', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'quiz_time_is_over'   => array(\r\n-\t\t\t\t\t'title'   => __( 'Time\\'s up!', 'learnpress' ),\r\n-\t\t\t\t\t'message' => __( 'The time is up! Your quiz will automatically come to an end', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'finished_quiz'       => __( 'Congrats! You have finished this quiz', 'learnpress' ),\r\n-\t\t\t\t'retaken_quiz'        => __( 'Congrats! You have re-taken this quiz. Please wait a moment and the page will reload', 'learnpress' ),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_single_quiz_localize', $localize, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * __isset function.\r\n-\t\t *\r\n-\t\t * @param mixed $key\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function __isset( $key ) {\r\n-\t\t\treturn metadata_exists( 'post', $this->get_id(), '_' . $key );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * __get function.\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @deprecated 4.0.8\r\n-\t\t *\u002F\r\n-\t\tpublic function __get( $key ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.0.8' );\r\n-\t\t\t\u002F*echo '@deprecated[' . $key . ']';\r\n-\t\t\tlearn_press_debug( debug_backtrace() );\r\n-\r\n-\t\t\treturn false;*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $feature\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @throws Exception\r\n-\t\t * @deprecated 3.0.8\r\n-\t\t *\u002F\r\n-\t\tpublic function has( $feature ) {\r\n-\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\r\n-\r\n-\t\t\t$args = func_get_args();\r\n-\t\t\tunset( $args[0] );\r\n-\t\t\t$method   = 'has_' . preg_replace( '!-!', '_', $feature );\r\n-\t\t\t$callback = array( $this, $method );\r\n-\t\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $feature ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return TRUE if quiz contain a question.\r\n-\t\t *\r\n-\t\t * @param int $question_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function has_question( $question_id ) {\r\n-\t\t\t$questions = $this->get_question_ids();\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fhas-question', in_array( $question_id, $questions ), $question_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question permalink from it's ID.\r\n-\t\t * If permalink option is turn on, add name of question\r\n-\t\t * into quiz permalink. Otherwise, add it's ID into\r\n-\t\t * query var.\r\n-\t\t *\r\n-\t\t * @param int $question_id\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question_link( $question_id = null ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\r\n-\t\t\t\u002F*$course = learn_press_get_course();\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$permalink = $course->get_item_link( $this->get_id() );\r\n-\t\t\tif ( '' != get_option( 'permalink_structure' ) && get_post_status( $this->get_id() ) != 'draft' ) {\r\n-\t\t\t\tif ( get_post_type( $question_id ) === LP_QUESTION_CPT ) {\r\n-\t\t\t\t\t$question_name = get_post_field( 'post_name', $question_id );\r\n-\t\t\t\t\tpreg_match( '\u002F\\?\u002Fi', $permalink, $result );\r\n-\t\t\t\t\tif ( empty( $result ) ) {\r\n-\t\t\t\t\t\t$permalink = $permalink . $question_name;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$permalink = preg_replace( '\u002F\\?\u002Fi', '\u002F' . $question_name . '\u002F?', $permalink );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$permalink = esc_url_raw( add_query_arg( array( 'question', $question_id ), $permalink ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F @deprecated\r\n-\t\t\t$permalink = apply_filters( 'learn_press_quiz_question_permalink', $permalink, $question_id, $this );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestion-permalink', $permalink, $question_id, $this->get_id() );*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int $at\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_question_at( $at = 0 ) {\r\n-\t\t\t$questions = $this->get_questions();\r\n-\r\n-\t\t\tif ( $questions ) {\r\n-\t\t\t\t$questions = array_values( $questions );\r\n-\r\n-\t\t\t\treturn @$questions[ $at ];\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get prev question from a question.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_prev_question( $id ) {\r\n-\t\t\t$prev      = false;\r\n-\t\t\t$questions = $this->get_questions();\r\n-\r\n-\t\t\tif ( $questions ) {\r\n-\t\t\t\t$questions = array_values( $questions );\r\n-\t\t\t\t$at        = array_search( $id, $questions );\r\n-\r\n-\t\t\t\tif ( 0 \u003C $at ) {\r\n-\t\t\t\t\t$prev = $questions[ $at - 1 ];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fprev-question-id', $prev, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get next question from a question.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_next_question( $id ) {\r\n-\t\t\t$next      = false;\r\n-\t\t\t$questions = $this->get_questions();\r\n-\r\n-\t\t\tif ( $questions ) {\r\n-\t\t\t\t$questions = array_values( $questions );\r\n-\t\t\t\t$at        = array_search( $id, $questions );\r\n-\r\n-\t\t\t\tif ( sizeof( $questions ) - 1 > $at ) {\r\n-\t\t\t\t\t$next = $questions[ $at + 1 ];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fnext-question-id', $next, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get index number of a question.\r\n-\t\t *\r\n-\t\t * @param int $id\r\n-\t\t * @param int $start\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_question_index( $id, $start = 0 ) {\r\n-\t\t\t$index     = 0;\r\n-\t\t\t$questions = $this->get_questions();\r\n-\r\n-\t\t\tif ( $questions ) {\r\n-\t\t\t\t$questions = array_values( $questions );\r\n-\t\t\t\t$index     = array_search( $id, $questions );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestion-index', intval( $start ) + $index, $this->get_id() );\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check question.\r\n-\t\t *\r\n-\t\t * @param $question_id\r\n-\t\t * @param $user_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function check_question( $question_id, $user_id ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\r\n-\t\t\t\u002F*$question = LP_Question::get_question( $question_id );\r\n-\r\n-\t\t\tif ( ! $question ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\t$history = $user->get_quiz_results( $this->get_id() );\r\n-\r\n-\t\t\tif ( ! $history ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$checked = array();\r\n-\t\t\t$checked = array_filter( $checked );\r\n-\r\n-\t\t\tif ( ! in_array( $question_id, $checked ) ) {\r\n-\t\t\t\t$checked[] = $question_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;*\u002F\r\n-\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get question position in quiz.\r\n-\t\t *\r\n-\t\t * @param     $question\r\n-\t\t * @param int      $user_id\r\n-\t\t *\r\n-\t\t * @return false|int|string\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_question_position( $question, $user_id = 0 ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\r\n-\t\t\t\u002F*if ( ! $user_id ) {\r\n-\t\t\t\t$user_id = learn_press_get_current_user_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user    = learn_press_get_user( $user_id );\r\n-\t\t\t$results = $user->get_quiz_results( $this->get_id(), '', '' );\r\n-\r\n-\t\t\tif ( $user && $results ) {\r\n-\t\t\t\t$questions = (array) $results->questions;\r\n-\r\n-\t\t\t} else {\r\n-\t\t\t\t$questions = $this->get_question_ids();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$position = array_search( $question, $questions );\r\n-\r\n-\t\t\treturn $position;*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int $user_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool|LP_Question\r\n-\t\t * @deprecated 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current_question( $user_id = 0, $course_id = 0 ) {\r\n-\t\t\t_deprecated_function( sprintf( '%s::%s', __CLASS__, __FUNCTION__ ), '4.0.0' );\r\n-\r\n-\t\t\t\u002F*$user = learn_press_get_user( $user_id );\r\n-\t\t\t$id   = $user->get_current_quiz_question( $this->get_id(), $course_id );\r\n-\r\n-\t\t\treturn LP_Question::get_question( $id );*\u002F\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $return\r\n-\t\t *\r\n-\t\t * @return LP_Question|int\r\n-\t\t *\u002F\r\n-\t\tpublic function get_viewing_question( $return = '' ) {\r\n-\t\t\tglobal $lp_quiz_question;\r\n-\r\n-\t\t\treturn $return !== 'id' ? $lp_quiz_question : ( $lp_quiz_question ? $lp_quiz_question->get_id() : 0 );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param mixed $the_quiz\r\n-\t\t * @param array $args\r\n-\t\t *\r\n-\t\t * @return LP_Quiz|bool\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_quiz( $the_quiz = false, $args = array() ) {\r\n-\t\t\tif ( is_numeric( $the_quiz ) && isset( LP_Global::$quizzes[ $the_quiz ] ) ) {\r\n-\t\t\t\treturn LP_Global::$quizzes[ $the_quiz ];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$the_quiz = self::get_quiz_object( $the_quiz );\r\n-\r\n-\t\t\tif ( ! $the_quiz ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( LP_Global::$quizzes[ $the_quiz->ID ] ) ) {\r\n-\t\t\t\treturn LP_Global::$quizzes[ $the_quiz->ID ];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $args['force'] ) ) {\r\n-\t\t\t\t$force = ! ! $args['force'];\r\n-\t\t\t\tunset( $args['force'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$force = false;\r\n-\t\t\t}\r\n-\t\t\t$key_args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id'   => $the_quiz->ID,\r\n-\t\t\t\t\t'type' => $the_quiz->post_type,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$key = LP_Helper::array_to_md5( $key_args );\r\n-\r\n-\t\t\tif ( $force ) {\r\n-\t\t\t\tLP_Global::$quizzes[ $key ]          = false;\r\n-\t\t\t\tLP_Global::$quizzes[ $the_quiz->ID ] = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( LP_Global::$quizzes[ $key ] ) ) {\r\n-\t\t\t\t$class_name = self::get_quiz_class( $the_quiz, $args );\r\n-\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\r\n-\t\t\t\t\t$quiz = new $class_name( $the_quiz->ID, $args );\r\n-\t\t\t\t} elseif ( $class_name instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t$quiz = $class_name;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$quiz = new self( $the_quiz->ID, $args );\r\n-\t\t\t\t}\r\n-\t\t\t\tLP_Global::$quizzes[ $key ]          = $quiz;\r\n-\t\t\t\tLP_Global::$quizzes[ $the_quiz->ID ] = $quiz;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn LP_Global::$quizzes[ $key ];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param  string $quiz_type\r\n-\t\t *\r\n-\t\t * @return string|false\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_class_name_from_quiz_type( $quiz_type ) {\r\n-\t\t\treturn LP_QUIZ_CPT === $quiz_type ? __CLASS__ : 'LP_Quiz_' . implode( '_', array_map( 'ucfirst', explode( '-', $quiz_type ) ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the lesson class name\r\n-\t\t *\r\n-\t\t * @param  WP_Post $the_quiz\r\n-\t\t * @param  array   $args (default: array())\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_quiz_class( $the_quiz, $args = array() ) {\r\n-\t\t\t$quiz_id = absint( $the_quiz->ID );\r\n-\t\t\t$type    = $the_quiz->post_type;\r\n-\r\n-\t\t\t$class_name = self::get_class_name_from_quiz_type( $type );\r\n-\r\n-\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fobject-class', $class_name, $type, $quiz_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the quiz object\r\n-\t\t *\r\n-\t\t * @param  mixed $the_quiz\r\n-\t\t *\r\n-\t\t * @uses   WP_Post\r\n-\t\t * @return WP_Post|bool false on failure\r\n-\t\t *\u002F\r\n-\t\tprivate static function get_quiz_object( $the_quiz ) {\r\n-\t\t\tif ( false === $the_quiz ) {\r\n-\t\t\t\t$the_quiz = get_post_type() === LP_QUIZ_CPT ? $GLOBALS['post'] : false;\r\n-\t\t\t} elseif ( is_numeric( $the_quiz ) ) {\r\n-\t\t\t\t$the_quiz = get_post( $the_quiz );\r\n-\t\t\t} elseif ( $the_quiz instanceof LP_Course_Item ) {\r\n-\t\t\t\t$the_quiz = get_post( $the_quiz->get_id() );\r\n-\t\t\t} elseif ( ! ( $the_quiz instanceof WP_Post ) ) {\r\n-\t\t\t\t$the_quiz = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fpost-object', $the_quiz );\r\n-\t\t}\r\n-\r\n-\t\tpublic function set_show_hide_question( $show_or_hide ) {\r\n-\t\t\t$this->_set_data( 'show_hide_question', $show_or_hide );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Set quiz is preview or not.\r\n-\t\t * using\r\n-\t\t *\u002F\r\n-\t\tpublic function set_preview( $preview ) {\r\n-\t\t\t$this->_set_data( 'preview', $preview );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated\r\n-\t\t *\r\n-\t\t * @param $skip\r\n-\t\t *\u002F\r\n-\t\tpublic function set_minus_skip_questions( $skip ) {\r\n-\t\t\t$this->_set_data( 'minus_skip_questions', $skip );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz is preview or not.\r\n-\t\t * using\r\n-\t\t *\u002F\r\n-\t\tpublic function get_preview() {\r\n-\t\t\treturn 'yes' === $this->get_data( 'preview' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F public function get_minus_points() {\r\n-\t\t\u002F\u002F return $this->get_data( 'minus_points' );\r\n-\t\t\u002F\u002F }\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get option skip question will be minus points\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_minus_skip_questions(): bool {\r\n-\t\t\treturn 'yes' === $this->get_data( 'minus_skip_questions', 'no' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get css classes of question displays in a list.\r\n-\t\t *\r\n-\t\t * @param int  $question_id\r\n-\t\t * @param null $position\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function get_question_number_class( $question_id, $position = null ) {\r\n-\t\t\tif ( null === $position ) {\r\n-\t\t\t\t$position = $this->get_question_index( $question_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class = array( 'question-' . $position );\r\n-\r\n-\t\t\tif ( $this->is_viewing_question( $question_id ) ) {\r\n-\t\t\t\t$class[] = 'current';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user      = learn_press_get_current_user();\r\n-\t\t\t$quiz_data = $user->get_quiz_data( $this->get_id() );\r\n-\r\n-\t\t\tif ( $quiz_data ) {\r\n-\t\t\t\tif ( $quiz_data->is_skipped( $question_id ) ) {\r\n-\t\t\t\t\t$class[] = 'skipped';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $class;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param mixed $offset\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetGet( $offset ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __METHOD__, '4.2.0' );\r\n-\t\t\treturn $this->offsetExists( $offset ) ? $this->_questions[ $offset ] : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param mixed $offset\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function offsetExists( $offset ) {\r\n-\t\t\t_deprecated_function( __CLASS__ . '::' . __METHOD__, '4.2.0' );\r\n-\t\t\t\u002F*return array_key_exists( $offset, $this->_questions );*\u002F\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Quiz.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Quiz' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Quiz\n+\t *\u002F\n+\tclass LP_Quiz extends LP_Course_Item {\n+\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\n+\t\t * @deprecated\n+\t\t *\u002F\n+\t\tprotected static $_meta = array();\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_item_type = LP_QUIZ_CPT;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_questions = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array(\n+\t\t\t\u002F\u002F 'show_result'        => 'no',\n+\t\t\t'passing_grade_type'   => '',\n+\t\t\t'passing_grade'        => 0,\n+\t\t\t\u002F\u002F 'show_check_answer'  => 'no',\n+\t\t\t\u002F\u002F 'count_check_answer' => 0,\n+\t\t\t\u002F\u002F 'show_hint'          => 'no',\n+\t\t\t\u002F\u002F 'count_hint'         => 0,\n+\t\t\t\u002F\u002F 'archive_history'    => 'no',\n+\t\t\t\u002F\u002F 'show_hide_question' => 'yes',\n+\t\t\t\u002F\u002F 'preview'            => 'no',\n+\t\t\t\u002F\u002F 'minus_points'         => 0,\n+\t\t\t'minus_skip_questions' => 'no',\n+\n+\t\t\t'negative_marking'     => 'no',\n+\t\t\t'instant_check'        => 'no',\n+\t\t\t'retake_count'         => 0,\n+\t\t\t'show_correct_review'  => 'yes',\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tprotected static $_loaded = 0;\n+\n+\t\t\u002F**\n+\t\t * Constructor gets the post object and sets the ID for the loaded course.\n+\t\t *\n+\t\t * @param mixed $the_quiz\n+\t\t * @param mixed $args\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_quiz, $args = array() ) {\n+\t\t\t$this->_curd = new LP_Quiz_CURD();\n+\n+\t\t\tif ( is_numeric( $the_quiz ) && $the_quiz > 0 ) {\n+\t\t\t\t$this->set_id( $the_quiz );\n+\t\t\t} elseif ( $the_quiz instanceof self ) {\n+\t\t\t\t$this->set_id( absint( $the_quiz->get_id() ) );\n+\t\t\t} elseif ( ! empty( $the_quiz->ID ) ) {\n+\t\t\t\t$this->set_id( absint( $the_quiz->ID ) );\n+\t\t\t}\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\n+\t\t\tself::$_loaded ++;\n+\t\t\tif ( self::$_loaded == 1 ) {\n+\t\t\t\tadd_filter( 'debug_data', array( __CLASS__, 'log' ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Log debug data.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @param $data\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function log( $data ) {\n+\t\t\t$data[] = __CLASS__ . '( ' . self::$_loaded . ' )';\n+\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_heading_title( $context = '' ) {\n+\t\t\treturn $this->get_title( $context );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load quiz data\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\t$this->_curd->load( $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default quiz meta.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic static function get_default_meta() {\n+\t\t\t$meta = array(\n+\t\t\t\t'review'              => 'no',\n+\t\t\t\t'duration'            => '10 minute',\n+\t\t\t\t'passing_grade'       => 80,\n+\t\t\t\t'negative_marking'    => 'no',\n+\t\t\t\t'instant_check'       => 'no',\n+\t\t\t\t'retake_count'        => '0',\n+\t\t\t\t'pagination'          => 1,\n+\t\t\t\t'show_correct_review' => 'yes',\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fdefault-meta', $meta );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save quiz data.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function save() {\n+\t\t\tif ( $this->get_id() ) {\n+\t\t\t\t$return = $this->_curd->update( $this );\n+\t\t\t} else {\n+\t\t\t\t$return = $this->_curd->create( $this );\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\tpublic function get_negative_marking() {\n+\t\t\treturn $this->get_data( 'negative_marking' ) === 'yes';\n+\t\t}\n+\n+\t\tpublic function set_negative_marking( $set ) {\n+\t\t\t$this->_set_data( 'negative_marking', ! learn_press_is_negative_value( $set ) ? 'yes' : 'no' );\n+\t\t}\n+\n+\t\tpublic function get_show_correct_review() {\n+\t\t\treturn $this->get_data( 'show_correct_review' ) === 'yes';\n+\t\t}\n+\n+\t\tpublic function set_show_correct_review( $set ) {\n+\t\t\t$this->_set_data( 'show_correct_review', $set );\n+\t\t}\n+\n+\t\tpublic function get_instant_check() {\n+\t\t\treturn $this->get_data( 'instant_check' ) === 'yes';\n+\t\t}\n+\n+\t\tpublic function set_instant_check( $set ) {\n+\t\t\t$this->_set_data( 'instant_check', ! learn_press_is_negative_value( $set ) ? 'yes' : 'no' );\n+\t\t}\n+\n+\t\tpublic function set_retake_count( $count ) {\n+\t\t\t$this->_set_data( 'retake_count', $count );\n+\t\t}\n+\n+\t\tpublic function get_retake_count() {\n+\t\t\treturn $this->get_data( 'retake_count' );\n+\t\t}\n+\n+\t\tpublic function get_pagination() {\n+\t\t\treturn ( $n = $this->get_data( 'pagination' ) ) > 1 ? $n : 0;\n+\t\t}\n+\n+\t\tpublic function set_pagination( $set ) {\n+\t\t\t$this->_set_data( 'pagination', absint( $set ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $show_result\n+\t\t *\u002F\n+\t\tpublic function set_show_result( $show_result ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'show_result', $show_result );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_show_result() {\n+\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn $this->get_data( 'show_result' ) === 'yes';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * @param $review_questions\n+\t\t *\u002F\n+\t\tpublic function set_review_questions( $review_questions ) {\n+\n+\t\t\t$this->_set_data( 'review_questions', $review_questions );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Enable review quiz\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function get_review_questions(): bool {\n+\t\t\treturn 'yes' === $this->get_data( 'review_questions', 'yes' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $type\n+\t\t *\u002F\n+\t\tpublic function set_passing_grade_type( $type ) {\n+\t\t\t$this->_set_data( 'passing_grade_type', $type );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_passing_grade_type() {\n+\t\t\treturn $this->get_data( 'passing_grade_type', 'percentage' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $value\n+\t\t *\u002F\n+\t\tpublic function set_passing_grade( $value ) {\n+\t\t\t$this->_set_data( 'passing_grade', $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array|mixed\n+\t\t *\u002F\n+\t\tpublic function get_passing_grade() {\n+\t\t\t$type  = $this->get_passing_grade_type();\n+\t\t\t$value = get_post_meta( $this->get_id(), '_lp_passing_grade', true );\n+\t\t\tif ( empty( $value ) ) {\n+\t\t\t\t$value = 80;\n+\t\t\t}\n+\n+\t\t\tswitch ( $type ) {\n+\t\t\t\tcase 'point':\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'percentage':\n+\t\t\t\tdefault:\n+\t\t\t\t\t$value = \"{$value}%\";\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\treturn $value;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $value\n+\t\t *\u002F\n+\t\tpublic function set_show_check_answer( $value ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'show_check_answer', $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return int|bool\n+\t\t *\u002F\n+\t\tpublic function get_show_check_answer() {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn intval( $this->get_data( 'show_check_answer' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $count\n+\t\t *\u002F\n+\t\tpublic function set_count_check_answer( $count ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'count_check_answer', $count );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_check_answer_count() {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn intval( $this->get_data( 'check_answer_count' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $value\n+\t\t *\u002F\n+\t\tpublic function set_show_hint( $value ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'show_hint', $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_show_hint() {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn intval( $this->get_data( 'show_hint' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $count\n+\t\t *\u002F\n+\t\tpublic function set_count_hint( $count ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'count_hint', $count );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if hint answer is enabled.\n+\t\t *\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function enable_show_hint() {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fenable-show-hint', $this->get_data( 'show_hint' ) == 'yes', $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $value\n+\t\t *\u002F\n+\t\tpublic function set_archive_history( $value ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\t$this->_set_data( 'archive_history', $value );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if archive history is enabled.\n+\t\t *\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function enable_archive_history() {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.0.0' );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fenable-archive-history', $this->get_data( 'archive_history' ) == 'yes', $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return total mark of quiz by calculating total mark of all questions.\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function get_mark() {\n+\t\t\t$mark = $this->get_data( 'mark', false );\n+\t\t\tif ( false === $mark || '' === $mark ) {\n+\t\t\t\t$questions = $this->get_question_ids();\n+\t\t\t\t$mark      = 0;\n+\n+\t\t\t\tforeach ( $questions as $question_id ) {\n+\t\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t\t\tif ( $question ) {\n+\t\t\t\t\t\t$mark += $question->get_mark();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$this->_set_data( 'mark', $mark );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz-mark', $mark, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get duration of quiz\n+\t\t *\n+\t\t * @return LP_Duration\n+\t\t *\u002F\n+\t\tpublic function get_duration() {\n+\t\t\t$duration = parent::get_duration();\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz-duration', $duration, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get quiz questions.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @editor tungnx\n+\t\t * @since 3.x.x\n+\t\t * @version 1.0.1\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function get_questions( $context = 'display' ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __FUNCTION__, '4.2.0' );\n+\t\t\t$questions = array();\n+\t\t\t$ids       = $this->_curd->read_question_ids( $this->get_id() );\n+\n+\t\t\tif ( $ids ) {\n+\t\t\t\tforeach ( $ids as $id ) {\n+\t\t\t\t\t$questions[ $id ] = $id;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestions', $questions, $this->get_id(), $this->get_course_id(), $context );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Quiz editor get questions.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function quiz_editor_get_questions() {\n+\t\t\t\u002F\u002F list questions\n+\t\t\t$questions = $this->get_question_ids( 'edit' );\n+\t\t\t\u002F\u002F order questions in quiz\n+\t\t\t$question_order = learn_press_quiz_get_questions_order( $questions );\n+\n+\t\t\t$result = array();\n+\n+\t\t\tforeach ( $questions as $id ) {\n+\t\t\t\t$question = LP_Question::get_question( $id );\n+\n+\t\t\t\t$answers = array();\n+\t\t\t\t\u002F\u002F handle question answer\n+\t\t\t\tif ( is_array( $question->get_data( 'answer_options' ) ) ) {\n+\t\t\t\t\tforeach ( $question->get_data( 'answer_options' ) as $answer ) {\n+\t\t\t\t\t\t$answers[] = $answer;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$post     = get_post( $id );\n+\t\t\t\t$result[] = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fquiz-editor\u002Fquestion-data',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'id'       => $id,\n+\t\t\t\t\t\t'open'     => false,\n+\t\t\t\t\t\t'title'    => $post->post_title,\n+\t\t\t\t\t\t'type'     => array(\n+\t\t\t\t\t\t\t'key'   => $question->get_type(),\n+\t\t\t\t\t\t\t'label' => $question->get_type_label(),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'answers'  => apply_filters( 'learn-press\u002Fquiz-editor\u002Fquestion-answers-data', $answers, $id, $this->get_id() ),\n+\t\t\t\t\t\t'settings' => array(\n+\t\t\t\t\t\t\t'content'     => $post->post_content,\n+\t\t\t\t\t\t\t'mark'        => get_post_meta( $id, '_lp_mark', true ),\n+\t\t\t\t\t\t\t'explanation' => get_post_meta( $id, '_lp_explanation', true ),\n+\t\t\t\t\t\t\t'hint'        => get_post_meta( $id, '_lp_hint', true ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'order'    => $question_order[ $id ],\n+\t\t\t\t\t),\n+\t\t\t\t\t$id,\n+\t\t\t\t\t$this->get_id()\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquiz_editor_questions', $result, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get quiz duration html.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_duration_html() {\n+\t\t\t$duration = $this->get_duration();\n+\t\t\tif ( $duration ) {\n+\t\t\t\t$duration = learn_press_seconds_to_time( $duration->get_seconds() );\n+\t\t\t} else {\n+\t\t\t\t$duration = __( 'Unlimited', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn_press_quiz_duration_html', $duration, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get number questions in quiz.\n+\t\t *\n+\t\t * @return int\n+\t\t *\u002F\n+\t\tpublic function count_questions(): int {\n+\t\t\t$size      = 0;\n+\t\t\t$questions = $this->get_question_ids();\n+\n+\t\t\tif ( $questions ) {\n+\t\t\t\t$size = sizeof( $questions );\n+\t\t\t}\n+\n+\t\t\treturn (int) apply_filters( 'learn-press\u002Fquiz\u002Fcount-questions', $size, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all question's ids of the quiz.\n+\t\t *\n+\t\t * @param string $context\n+\t\t *\n+\t\t * @return int[]\n+\t\t * @editor tungnx\n+\t\t * @version 1.0.1\n+\t\t * @since 3.2.0\n+\t\t *\u002F\n+\t\tpublic function get_question_ids( string $context = 'display' ): array {\n+\t\t\t$question_ids = $this->_curd->read_question_ids( $this->get_id(), $context );\n+\t\t\t$question_ids = apply_filters( 'learn-press\u002Fquiz\u002Fget-question-ids', $question_ids, $this->get_id(), $this->get_course_id(), $context );\n+\t\t\tif ( ! is_array( $question_ids ) ) {\n+\t\t\t\t$question_ids = array();\n+\t\t\t}\n+\n+\t\t\treturn $question_ids;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get number questions for user do it.\n+\t\t *\n+\t\t * @return mixed|null\n+\t\t *\u002F\n+\t\tpublic function get_number_questions_to_do() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fnumber-questions-show', $this->count_questions(), $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * This quiz has any question?\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function has_questions() {\n+\t\t\treturn $this->count_questions() > 0;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get js localize script in frontend. [NOT USED]\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_localize() {\n+\t\t\t$localize = array(\n+\t\t\t\t'confirm_finish_quiz' => array(\n+\t\t\t\t\t'title'   => __( 'Finish quiz', 'learnpress' ),\n+\t\t\t\t\t'message' => __( 'Are you sure you want to finish this quiz?', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'confirm_retake_quiz' => array(\n+\t\t\t\t\t'title'   => __( 'Retake quiz', 'learnpress' ),\n+\t\t\t\t\t'message' => __( 'Are you sure you want to retake this quiz?', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'quiz_time_is_over'   => array(\n+\t\t\t\t\t'title'   => __( 'Time\\'s up!', 'learnpress' ),\n+\t\t\t\t\t'message' => __( 'The time is up! Your quiz will automatically come to an end', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'finished_quiz'       => __( 'Congrats! You have finished this quiz', 'learnpress' ),\n+\t\t\t\t'retaken_quiz'        => __( 'Congrats! You have re-taken this quiz. Please wait a moment and the page will reload', 'learnpress' ),\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn_press_single_quiz_localize', $localize, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * __isset function.\n+\t\t *\n+\t\t * @param mixed $key\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function __isset( $key ) {\n+\t\t\treturn metadata_exists( 'post', $this->get_id(), '_' . $key );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * __get function.\n+\t\t *\n+\t\t * @param string $key\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @deprecated 4.0.8\n+\t\t *\u002F\n+\t\tpublic function __get( $key ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.0.8' );\n+\t\t\t\u002F*echo '@deprecated[' . $key . ']';\n+\t\t\tlearn_press_debug( debug_backtrace() );\n+\n+\t\t\treturn false;*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $feature\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @throws Exception\n+\t\t * @deprecated 3.0.8\n+\t\t *\u002F\n+\t\tpublic function has( $feature ) {\n+\t\t\t_deprecated_function( __FUNCTION__, '3.0.8' );\n+\n+\t\t\t$args = func_get_args();\n+\t\t\tunset( $args[0] );\n+\t\t\t$method   = 'has_' . preg_replace( '!-!', '_', $feature );\n+\t\t\t$callback = array( $this, $method );\n+\t\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( sprintf( __( 'The function %s doesn\\'t exist', 'learnpress' ), $feature ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return TRUE if quiz contain a question.\n+\t\t *\n+\t\t * @param int $question_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function has_question( $question_id ) {\n+\t\t\t$questions = $this->get_question_ids();\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fhas-question', in_array( $question_id, $questions ), $question_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get question permalink from it's ID.\n+\t\t * If permalink option is turn on, add name of question\n+\t\t * into quiz permalink. Otherwise, add it's ID into\n+\t\t * query var.\n+\t\t *\n+\t\t * @param int $question_id\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function get_question_link( $question_id = null ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\n+\t\t\t\u002F*$course = learn_press_get_course();\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$permalink = $course->get_item_link( $this->get_id() );\n+\t\t\tif ( '' != get_option( 'permalink_structure' ) && get_post_status( $this->get_id() ) != 'draft' ) {\n+\t\t\t\tif ( get_post_type( $question_id ) === LP_QUESTION_CPT ) {\n+\t\t\t\t\t$question_name = get_post_field( 'post_name', $question_id );\n+\t\t\t\t\tpreg_match( '\u002F\\?\u002Fi', $permalink, $result );\n+\t\t\t\t\tif ( empty( $result ) ) {\n+\t\t\t\t\t\t$permalink = $permalink . $question_name;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$permalink = preg_replace( '\u002F\\?\u002Fi', '\u002F' . $question_name . '\u002F?', $permalink );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$permalink = esc_url_raw( add_query_arg( array( 'question', $question_id ), $permalink ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F @deprecated\n+\t\t\t$permalink = apply_filters( 'learn_press_quiz_question_permalink', $permalink, $question_id, $this );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestion-permalink', $permalink, $question_id, $this->get_id() );*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param int $at\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_question_at( $at = 0 ) {\n+\t\t\t$questions = $this->get_questions();\n+\n+\t\t\tif ( $questions ) {\n+\t\t\t\t$questions = array_values( $questions );\n+\n+\t\t\t\treturn @$questions[ $at ];\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get prev question from a question.\n+\t\t *\n+\t\t * @param int $id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_prev_question( $id ) {\n+\t\t\t$prev      = false;\n+\t\t\t$questions = $this->get_questions();\n+\n+\t\t\tif ( $questions ) {\n+\t\t\t\t$questions = array_values( $questions );\n+\t\t\t\t$at        = array_search( $id, $questions );\n+\n+\t\t\t\tif ( 0 \u003C $at ) {\n+\t\t\t\t\t$prev = $questions[ $at - 1 ];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fprev-question-id', $prev, $this->get_id() );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get next question from a question.\n+\t\t *\n+\t\t * @param int $id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_next_question( $id ) {\n+\t\t\t$next      = false;\n+\t\t\t$questions = $this->get_questions();\n+\n+\t\t\tif ( $questions ) {\n+\t\t\t\t$questions = array_values( $questions );\n+\t\t\t\t$at        = array_search( $id, $questions );\n+\n+\t\t\t\tif ( sizeof( $questions ) - 1 > $at ) {\n+\t\t\t\t\t$next = $questions[ $at + 1 ];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fnext-question-id', $next, $this->get_id() );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Get index number of a question.\n+\t\t *\n+\t\t * @param int $id\n+\t\t * @param int $start\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_question_index( $id, $start = 0 ) {\n+\t\t\t$index     = 0;\n+\t\t\t$questions = $this->get_questions();\n+\n+\t\t\tif ( $questions ) {\n+\t\t\t\t$questions = array_values( $questions );\n+\t\t\t\t$index     = array_search( $id, $questions );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fquestion-index', intval( $start ) + $index, $this->get_id() );\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Check question.\n+\t\t *\n+\t\t * @param $question_id\n+\t\t * @param $user_id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function check_question( $question_id, $user_id ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\n+\t\t\t\u002F*$question = LP_Question::get_question( $question_id );\n+\n+\t\t\tif ( ! $question ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\t$history = $user->get_quiz_results( $this->get_id() );\n+\n+\t\t\tif ( ! $history ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$checked = array();\n+\t\t\t$checked = array_filter( $checked );\n+\n+\t\t\tif ( ! in_array( $question_id, $checked ) ) {\n+\t\t\t\t$checked[] = $question_id;\n+\t\t\t}\n+\n+\t\t\treturn true;*\u002F\n+\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get question position in quiz.\n+\t\t *\n+\t\t * @param     $question\n+\t\t * @param int      $user_id\n+\t\t *\n+\t\t * @return false|int|string\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function get_question_position( $question, $user_id = 0 ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.0' );\n+\t\t\t\u002F*if ( ! $user_id ) {\n+\t\t\t\t$user_id = learn_press_get_current_user_id();\n+\t\t\t}\n+\n+\t\t\t$user    = learn_press_get_user( $user_id );\n+\t\t\t$results = $user->get_quiz_results( $this->get_id(), '', '' );\n+\n+\t\t\tif ( $user && $results ) {\n+\t\t\t\t$questions = (array) $results->questions;\n+\n+\t\t\t} else {\n+\t\t\t\t$questions = $this->get_question_ids();\n+\t\t\t}\n+\n+\t\t\t$position = array_search( $question, $questions );\n+\n+\t\t\treturn $position;*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param int $user_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool|LP_Question\n+\t\t * @deprecated 4.0.0\n+\t\t *\u002F\n+\t\tpublic function get_current_question( $user_id = 0, $course_id = 0 ) {\n+\t\t\t_deprecated_function( sprintf( '%s::%s', __CLASS__, __FUNCTION__ ), '4.0.0' );\n+\n+\t\t\t\u002F*$user = learn_press_get_user( $user_id );\n+\t\t\t$id   = $user->get_current_quiz_question( $this->get_id(), $course_id );\n+\n+\t\t\treturn LP_Question::get_question( $id );*\u002F\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $return\n+\t\t *\n+\t\t * @return LP_Question|int\n+\t\t *\u002F\n+\t\tpublic function get_viewing_question( $return = '' ) {\n+\t\t\tglobal $lp_quiz_question;\n+\n+\t\t\treturn $return !== 'id' ? $lp_quiz_question : ( $lp_quiz_question ? $lp_quiz_question->get_id() : 0 );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param mixed $the_quiz\n+\t\t * @param array $args\n+\t\t *\n+\t\t * @return LP_Quiz|bool\n+\t\t *\u002F\n+\t\tpublic static function get_quiz( $the_quiz = false, $args = array() ) {\n+\t\t\tif ( is_numeric( $the_quiz ) && isset( LP_Global::$quizzes[ $the_quiz ] ) ) {\n+\t\t\t\treturn LP_Global::$quizzes[ $the_quiz ];\n+\t\t\t}\n+\n+\t\t\t$the_quiz = self::get_quiz_object( $the_quiz );\n+\n+\t\t\tif ( ! $the_quiz ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\tif ( isset( LP_Global::$quizzes[ $the_quiz->ID ] ) ) {\n+\t\t\t\treturn LP_Global::$quizzes[ $the_quiz->ID ];\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $args['force'] ) ) {\n+\t\t\t\t$force = ! ! $args['force'];\n+\t\t\t\tunset( $args['force'] );\n+\t\t\t} else {\n+\t\t\t\t$force = false;\n+\t\t\t}\n+\t\t\t$key_args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'id'   => $the_quiz->ID,\n+\t\t\t\t\t'type' => $the_quiz->post_type,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$key = LP_Helper::array_to_md5( $key_args );\n+\n+\t\t\tif ( $force ) {\n+\t\t\t\tLP_Global::$quizzes[ $key ]          = false;\n+\t\t\t\tLP_Global::$quizzes[ $the_quiz->ID ] = false;\n+\t\t\t}\n+\n+\t\t\tif ( empty( LP_Global::$quizzes[ $key ] ) ) {\n+\t\t\t\t$class_name = self::get_quiz_class( $the_quiz, $args );\n+\t\t\t\tif ( is_string( $class_name ) && class_exists( $class_name ) ) {\n+\t\t\t\t\t$quiz = new $class_name( $the_quiz->ID, $args );\n+\t\t\t\t} elseif ( $class_name instanceof LP_Course_Item ) {\n+\t\t\t\t\t$quiz = $class_name;\n+\t\t\t\t} else {\n+\t\t\t\t\t$quiz = new self( $the_quiz->ID, $args );\n+\t\t\t\t}\n+\t\t\t\tLP_Global::$quizzes[ $key ]          = $quiz;\n+\t\t\t\tLP_Global::$quizzes[ $the_quiz->ID ] = $quiz;\n+\t\t\t}\n+\n+\t\t\treturn LP_Global::$quizzes[ $key ];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param  string $quiz_type\n+\t\t *\n+\t\t * @return string|false\n+\t\t *\u002F\n+\t\tprivate static function get_class_name_from_quiz_type( $quiz_type ) {\n+\t\t\treturn LP_QUIZ_CPT === $quiz_type ? __CLASS__ : 'LP_Quiz_' . implode( '_', array_map( 'ucfirst', explode( '-', $quiz_type ) ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the lesson class name\n+\t\t *\n+\t\t * @param  WP_Post $the_quiz\n+\t\t * @param  array   $args (default: array())\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tprivate static function get_quiz_class( $the_quiz, $args = array() ) {\n+\t\t\t$quiz_id = absint( $the_quiz->ID );\n+\t\t\t$type    = $the_quiz->post_type;\n+\n+\t\t\t$class_name = self::get_class_name_from_quiz_type( $type );\n+\n+\t\t\t\u002F\u002F Filter class name so that the class can be overridden if extended.\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fobject-class', $class_name, $type, $quiz_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the quiz object\n+\t\t *\n+\t\t * @param  mixed $the_quiz\n+\t\t *\n+\t\t * @uses   WP_Post\n+\t\t * @return WP_Post|bool false on failure\n+\t\t *\u002F\n+\t\tprivate static function get_quiz_object( $the_quiz ) {\n+\t\t\tif ( false === $the_quiz ) {\n+\t\t\t\t$the_quiz = get_post_type() === LP_QUIZ_CPT ? $GLOBALS['post'] : false;\n+\t\t\t} elseif ( is_numeric( $the_quiz ) ) {\n+\t\t\t\t$the_quiz = get_post( $the_quiz );\n+\t\t\t} elseif ( $the_quiz instanceof LP_Course_Item ) {\n+\t\t\t\t$the_quiz = get_post( $the_quiz->get_id() );\n+\t\t\t} elseif ( ! ( $the_quiz instanceof WP_Post ) ) {\n+\t\t\t\t$the_quiz = false;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Fpost-object', $the_quiz );\n+\t\t}\n+\n+\t\tpublic function set_show_hide_question( $show_or_hide ) {\n+\t\t\t$this->_set_data( 'show_hide_question', $show_or_hide );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Set quiz is preview or not.\n+\t\t * using\n+\t\t *\u002F\n+\t\tpublic function set_preview( $preview ) {\n+\t\t\t$this->_set_data( 'preview', $preview );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated\n+\t\t *\n+\t\t * @param $skip\n+\t\t *\u002F\n+\t\tpublic function set_minus_skip_questions( $skip ) {\n+\t\t\t$this->_set_data( 'minus_skip_questions', $skip );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get quiz is preview or not.\n+\t\t * using\n+\t\t *\u002F\n+\t\tpublic function get_preview() {\n+\t\t\treturn 'yes' === $this->get_data( 'preview' );\n+\t\t}\n+\n+\t\t\u002F\u002F public function get_minus_points() {\n+\t\t\u002F\u002F return $this->get_data( 'minus_points' );\n+\t\t\u002F\u002F }\n+\n+\t\t\u002F**\n+\t\t * Get option skip question will be minus points\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function get_minus_skip_questions(): bool {\n+\t\t\treturn 'yes' === $this->get_data( 'minus_skip_questions', 'no' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get css classes of question displays in a list.\n+\t\t *\n+\t\t * @param int  $question_id\n+\t\t * @param null $position\n+\t\t *\n+\t\t * @return array\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function get_question_number_class( $question_id, $position = null ) {\n+\t\t\tif ( null === $position ) {\n+\t\t\t\t$position = $this->get_question_index( $question_id );\n+\t\t\t}\n+\n+\t\t\t$class = array( 'question-' . $position );\n+\n+\t\t\tif ( $this->is_viewing_question( $question_id ) ) {\n+\t\t\t\t$class[] = 'current';\n+\t\t\t}\n+\n+\t\t\t$user      = learn_press_get_current_user();\n+\t\t\t$quiz_data = $user->get_quiz_data( $this->get_id() );\n+\n+\t\t\tif ( $quiz_data ) {\n+\t\t\t\tif ( $quiz_data->is_skipped( $question_id ) ) {\n+\t\t\t\t\t$class[] = 'skipped';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $class;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * @param mixed $offset\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function offsetGet( $offset ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __METHOD__, '4.2.0' );\n+\t\t\treturn $this->offsetExists( $offset ) ? $this->_questions[ $offset ] : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param mixed $offset\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.2.0\n+\t\t *\u002F\n+\t\tpublic function offsetExists( $offset ) {\n+\t\t\t_deprecated_function( __CLASS__ . '::' . __METHOD__, '4.2.0' );\n+\t\t\t\u002F*return array_key_exists( $offset, $this->_questions );*\u002F\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquiz\u002Flp-quiz-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquiz\u002Flp-quiz-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fquiz\u002Flp-quiz-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fquiz\u002Flp-quiz-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,347 +1,347 @@\n-\u003C?php\r\n-\u002F**\r\n- * Common functions to manipulate with the quiz.\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Get quiz from anything is passed\r\n- *\r\n- * @param mixed $the_quiz\r\n- *\r\n- * @return bool|LP_Quiz\r\n- *\u002F\r\n-function learn_press_get_quiz( $the_quiz ) {\r\n-\treturn LP_Quiz::get_quiz( $the_quiz );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get question from anything is passed\r\n- *\r\n- * @param mixed $the_question\r\n- *\r\n- * @return bool|LP_Question\r\n- *\u002F\r\n-function learn_press_get_question( $the_question ) {\r\n-\treturn LP_Question::get_question( $the_question );\r\n-}\r\n-\r\n-function learn_press_add_question_answer_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn add_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-function learn_press_update_question_answer_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn update_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-function learn_press_delete_question_answer_meta( $item_id, $meta_key, $meta_value, $delete_all = false ) {\r\n-\treturn delete_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $delete_all );\r\n-}\r\n-\r\n-function learn_press_get_question_answer_meta( $item_id, $meta_key, $single = true ) {\r\n-\treturn get_metadata( 'learnpress_question_answer', $item_id, $meta_key, $single );\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Get all questions of a quiz\r\n- *\r\n- * @author  TuNN\r\n- *\r\n- * @param   int     $quiz_id  The ID of a quiz to get all questions\r\n- * @param   boolean $only_ids return an array of questions with IDs only or as post objects\r\n- *\r\n- * @return  array|null\r\n- * @deprecated 4.1.7.3\r\n- *\u002F\r\n-function learn_press_get_quiz_questions( $quiz_id = null, $only_ids = true ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\r\n-\tif ( ! $quiz_id ) {\r\n-\t\t$quiz_id = get_the_ID();\r\n-\t}\r\n-\r\n-\treturn ( $quiz = LP_Quiz::get_quiz( $quiz_id ) ) ? $quiz->get_question_ids() : false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Check to see if user not passed the ID of quiz try to get it from global\r\n- * Only works in single quiz page\r\n- *\r\n- * @param $id\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_quiz_id( $id ) {\r\n-\tif ( ! $id ) {\r\n-\t\tglobal $quiz;\r\n-\t\t$id = $quiz->id;\r\n-\t}\r\n-\r\n-\treturn $id;\r\n-}\r\n-\r\n-\u002F**\r\n- * Check if user has completed a quiz or not\r\n- *\r\n- * @author  TuNN\r\n- *\r\n- * @param   int $user_id The ID of user need to check\r\n- * @param   int $quiz_id The ID of quiz need to check\r\n- *\r\n- * @return  boolean\r\n- * @deprecated 4.1.6.9\r\n- *\u002F\r\n-\u002F*function learn_press_user_has_completed_quiz( $user_id = null, $quiz_id = null ) {\r\n-\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\tif ( $user ) {\r\n-\t\treturn $user->has_completed_quiz( $quiz_id );\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * get the time remaining of a quiz has started by an user\r\n- *\r\n- * @param null $user_id\r\n- * @param null $quiz_id\r\n- *\r\n- * @return int\r\n- *\u002F\r\n-function learn_press_get_quiz_time_remaining( $user_id = null, $quiz_id = null ) {\r\n-\tglobal $quiz;\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\t$quiz_id = $quiz_id ? $quiz_id : ( $quiz ? $quiz->id : 0 );\r\n-\tif ( ! $quiz_id ) {\r\n-\t\treturn 0;\r\n-\t}\r\n-\t$meta            = get_user_meta( $user_id, '_lpr_quiz_start_time', true );\r\n-\t$quiz_duration   = get_post_meta( $quiz_id, '_lpr_duration', true );\r\n-\t$time_remaining  = $quiz_duration * 60;\r\n-\t$quiz_start_time = ! empty( $meta[ $quiz_id ] ) ? $meta[ $quiz_id ] : 0;\r\n-\t$quiz_start_time = apply_filters( 'learn_press_user_quiz_start_time', $quiz_start_time, $quiz_id, $user_id );\r\n-\r\n-\tif ( $quiz_duration && learn_press_user_has_started_quiz( $user_id, $quiz_id ) ) {\r\n-\t\t$quiz_duration *= 60;\r\n-\t\t$now            = current_time( 'timestamp' );\r\n-\r\n-\t\tif ( $now \u003C $quiz_start_time + $quiz_duration ) {\r\n-\t\t\t$time_remaining = $quiz_start_time + $quiz_duration - $now;\r\n-\t\t} else {\r\n-\t\t\t$time_remaining = 0;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_get_quiz_time_remaining', $time_remaining, $user_id, $quiz_id );\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Check if user has started a quiz or not.\r\n- *\r\n- * @param null $user_id\r\n- * @param null $quiz_id\r\n- *\r\n- * @return bool|mixed\r\n- * @throws Exception\r\n- *\u002F\r\n-function learn_press_user_has_started_quiz( $user_id = null, $quiz_id = null ) {\r\n-\t$user = $user_id ? learn_press_get_user( $user_id ) : learn_press_get_current_user();\r\n-\r\n-\treturn $user ? $user->has_started_quiz( $quiz_id ) : false;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current status of a quiz for user\r\n- * Status:\r\n- *      - null => User does not start quiz\r\n- *        - Started => User has started quiz\r\n- *        - Completed => User has finished quiz\r\n- *\r\n- * @param            $quiz_id\r\n- * @param bool|false $user_id\r\n- *\r\n- * @return string\r\n- *\u002F\r\n-function learn_press_get_user_quiz_status( $quiz_id, $user_id = false ) {\r\n-\t$user = $user_id ? learn_press_get_user( $user_id ) : learn_press_get_current_user();\r\n-\r\n-\treturn $user ? $user->get_quiz_status( $quiz_id ) : '';\r\n-}\r\n-\r\n-function learn_press_get_quizzes( $user_id = 0, &$args = array() ) {\r\n-\t\u002F\u002F TODO: get all quizzes by user\r\n-}\r\n-\r\n-\u002F**\r\n- * Add new type that LP question can support\r\n- *\r\n- * @param string|array $types\r\n- * @param string|array $supports\r\n- *\u002F\r\n-function learn_press_add_question_type_support( $types, $supports ) {\r\n-\tif ( empty( $GLOBALS['learn_press_question_type_support'] ) ) {\r\n-\t\t$GLOBALS['learn_press_question_type_support'] = array();\r\n-\t}\r\n-\t$_supports = $GLOBALS['learn_press_question_type_support'];\r\n-\tsettype( $types, 'array' );\r\n-\tsettype( $supports, 'array' );\r\n-\r\n-\t$types    = array_filter( $types );\r\n-\t$supports = array_filter( $supports );\r\n-\r\n-\tif ( $types ) {\r\n-\t\tforeach ( $types as $type ) {\r\n-\t\t\tif ( ! $type ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\tif ( empty( $_supports[ $type ] ) ) {\r\n-\t\t\t\t$_supports[ $type ] = array();\r\n-\t\t\t}\r\n-\t\t\tif ( $supports ) {\r\n-\t\t\t\tforeach ( $supports as $s ) {\r\n-\t\t\t\t\t$_supports[ $type ][] = $s;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$_supports[ $type ] = array_filter( $_supports[ $type ] );\r\n-\t\t}\r\n-\t}\r\n-\t$GLOBALS['learn_press_question_type_support'] = $_supports;\r\n-}\r\n-\r\n-\u002F**\r\n- * @param string $type\r\n- *\r\n- * @return array|mixed\r\n- *\u002F\r\n-function learn_press_get_question_type_support( $type = '' ) {\r\n-\t$supports = ! empty( $GLOBALS['learn_press_question_type_support'] ) ? $GLOBALS['learn_press_question_type_support'] : array();\r\n-\r\n-\treturn $type && ! empty( $supports[ $type ] ) ? $supports[ $type ] : $supports;\r\n-}\r\n-\r\n-\u002F**\r\n- * Check if a type question is supported.\r\n- *\r\n- * @param string $type\r\n- *\r\n- * @return bool\r\n- *\u002F\r\n-function learn_press_is_support_question_type( $type ) {\r\n-\r\n-\tif ( is_array( $type ) ) {\r\n-\t\t$type = reset( $type );\r\n-\t}\r\n-\r\n-\t$supports = learn_press_get_question_type_support();\r\n-\r\n-\t\u002F\u002F New type is supported?\r\n-\tif ( $supports && ! array_key_exists( $type, $supports ) ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\treturn true;\r\n-}\r\n-\r\n-function learn_press_question_type_support( $type, $features ) {\r\n-\tsettype( $features, 'array' );\r\n-\t$features    = array_filter( $features );\r\n-\t$supports    = learn_press_get_question_type_support( $type );\r\n-\t$has_support = true;\r\n-\r\n-\tif ( $features ) {\r\n-\t\tforeach ( $features as $feature ) {\r\n-\t\t\t$has_support = $has_support && in_array( $feature, $supports );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $has_support;\r\n-}\r\n-\r\n-function learn_press_default_question_type_support() {\r\n-\tlearn_press_add_question_type_support(\r\n-\t\tarray(\r\n-\t\t\t'multi_choice',\r\n-\t\t\t'single_choice',\r\n-\t\t\t'true_or_false',\r\n-\t\t\t'fill_in_blanks',\r\n-\t\t),\r\n-\t\t'check-answer'\r\n-\t);\r\n-}\r\n-\r\n-add_action( 'plugins_loaded', 'learn_press_default_question_type_support' );\r\n-\r\n-\r\n-if ( ! function_exists( 'learn_press_quiz_get_questions_order' ) ) {\r\n-\t\u002F**\r\n-\t * Get question order in quiz.\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @param array $questions\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tfunction learn_press_quiz_get_questions_order( $questions = array() ) {\r\n-\t\tif ( ! $questions ) {\r\n-\t\t\treturn array();\r\n-\t\t}\r\n-\r\n-\t\tglobal $wpdb;\r\n-\r\n-\t\t$ids = $orders = array();\r\n-\r\n-\t\tforeach ( $questions as $id => $question ) {\r\n-\t\t\t$ids[] = $id;\r\n-\t\t}\r\n-\r\n-\t\t$order = $wpdb->get_results( \"SELECT q.question_id AS q_id, q.question_order AS q_order FROM $wpdb->learnpress_quiz_questions AS q\", ARRAY_A );\r\n-\r\n-\t\tif ( $order ) {\r\n-\t\t\tforeach ( $order as $id => $_order ) {\r\n-\t\t\t\t$orders[ $_order['q_id'] ] = $_order['q_order'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $orders;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * @return bool\r\n- * @deprecated 4.1.6.1\r\n- * We will remove on version 4.1.7, you can use \"get_status\" function on the class LP_User_Item_Quiz to replace\r\n- *\u002F\r\n-function learn_press_is_review_questions() {\r\n-\t_deprecated_function( __FUNCTION__, '4.1.6.1' );\r\n-\r\n-\t$item = LP_Global::course_item();\r\n-\t$user = learn_press_get_current_user();\r\n-\r\n-\tif ( $item && $user ) {\r\n-\t\t$course = learn_press_get_course();\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$quiz_data = $user->get_item_data( $item->get_id(), $course->get_id() );\r\n-\r\n-\t\treturn $quiz_data && $quiz_data->is_review_questions();\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}\r\n-\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Common functions to manipulate with the quiz.\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Get quiz from anything is passed\n+ *\n+ * @param mixed $the_quiz\n+ *\n+ * @return bool|LP_Quiz\n+ *\u002F\n+function learn_press_get_quiz( $the_quiz ) {\n+\treturn LP_Quiz::get_quiz( $the_quiz );\n+}\n+\n+\u002F**\n+ * Get question from anything is passed\n+ *\n+ * @param mixed $the_question\n+ *\n+ * @return bool|LP_Question\n+ *\u002F\n+function learn_press_get_question( $the_question ) {\n+\treturn LP_Question::get_question( $the_question );\n+}\n+\n+function learn_press_add_question_answer_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn add_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+function learn_press_update_question_answer_meta( $item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn update_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+function learn_press_delete_question_answer_meta( $item_id, $meta_key, $meta_value, $delete_all = false ) {\n+\treturn delete_metadata( 'learnpress_question_answer', $item_id, $meta_key, $meta_value, $delete_all );\n+}\n+\n+function learn_press_get_question_answer_meta( $item_id, $meta_key, $single = true ) {\n+\treturn get_metadata( 'learnpress_question_answer', $item_id, $meta_key, $single );\n+}\n+\n+\n+\u002F**\n+ * Get all questions of a quiz\n+ *\n+ * @author  TuNN\n+ *\n+ * @param   int     $quiz_id  The ID of a quiz to get all questions\n+ * @param   boolean $only_ids return an array of questions with IDs only or as post objects\n+ *\n+ * @return  array|null\n+ * @deprecated 4.1.7.3\n+ *\u002F\n+function learn_press_get_quiz_questions( $quiz_id = null, $only_ids = true ) {\n+\t_deprecated_function( __FUNCTION__, '4.1.7.3' );\n+\tif ( ! $quiz_id ) {\n+\t\t$quiz_id = get_the_ID();\n+\t}\n+\n+\treturn ( $quiz = LP_Quiz::get_quiz( $quiz_id ) ) ? $quiz->get_question_ids() : false;\n+}\n+\n+\u002F**\n+ * Check to see if user not passed the ID of quiz try to get it from global\n+ * Only works in single quiz page\n+ *\n+ * @param $id\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_quiz_id( $id ) {\n+\tif ( ! $id ) {\n+\t\tglobal $quiz;\n+\t\t$id = $quiz->id;\n+\t}\n+\n+\treturn $id;\n+}\n+\n+\u002F**\n+ * Check if user has completed a quiz or not\n+ *\n+ * @author  TuNN\n+ *\n+ * @param   int $user_id The ID of user need to check\n+ * @param   int $quiz_id The ID of quiz need to check\n+ *\n+ * @return  boolean\n+ * @deprecated 4.1.6.9\n+ *\u002F\n+\u002F*function learn_press_user_has_completed_quiz( $user_id = null, $quiz_id = null ) {\n+\t$user = learn_press_get_user( $user_id );\n+\n+\tif ( $user ) {\n+\t\treturn $user->has_completed_quiz( $quiz_id );\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F**\n+ * get the time remaining of a quiz has started by an user\n+ *\n+ * @param null $user_id\n+ * @param null $quiz_id\n+ *\n+ * @return int\n+ *\u002F\n+function learn_press_get_quiz_time_remaining( $user_id = null, $quiz_id = null ) {\n+\tglobal $quiz;\n+\tif ( ! $user_id ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\t$quiz_id = $quiz_id ? $quiz_id : ( $quiz ? $quiz->id : 0 );\n+\tif ( ! $quiz_id ) {\n+\t\treturn 0;\n+\t}\n+\t$meta            = get_user_meta( $user_id, '_lpr_quiz_start_time', true );\n+\t$quiz_duration   = get_post_meta( $quiz_id, '_lpr_duration', true );\n+\t$time_remaining  = $quiz_duration * 60;\n+\t$quiz_start_time = ! empty( $meta[ $quiz_id ] ) ? $meta[ $quiz_id ] : 0;\n+\t$quiz_start_time = apply_filters( 'learn_press_user_quiz_start_time', $quiz_start_time, $quiz_id, $user_id );\n+\n+\tif ( $quiz_duration && learn_press_user_has_started_quiz( $user_id, $quiz_id ) ) {\n+\t\t$quiz_duration *= 60;\n+\t\t$now            = current_time( 'timestamp' );\n+\n+\t\tif ( $now \u003C $quiz_start_time + $quiz_duration ) {\n+\t\t\t$time_remaining = $quiz_start_time + $quiz_duration - $now;\n+\t\t} else {\n+\t\t\t$time_remaining = 0;\n+\t\t}\n+\t}\n+\n+\treturn apply_filters( 'learn_press_get_quiz_time_remaining', $time_remaining, $user_id, $quiz_id );\n+}\n+\n+\n+\u002F**\n+ * Check if user has started a quiz or not.\n+ *\n+ * @param null $user_id\n+ * @param null $quiz_id\n+ *\n+ * @return bool|mixed\n+ * @throws Exception\n+ *\u002F\n+function learn_press_user_has_started_quiz( $user_id = null, $quiz_id = null ) {\n+\t$user = $user_id ? learn_press_get_user( $user_id ) : learn_press_get_current_user();\n+\n+\treturn $user ? $user->has_started_quiz( $quiz_id ) : false;\n+}\n+\n+\u002F**\n+ * Get current status of a quiz for user\n+ * Status:\n+ *      - null => User does not start quiz\n+ *        - Started => User has started quiz\n+ *        - Completed => User has finished quiz\n+ *\n+ * @param            $quiz_id\n+ * @param bool|false $user_id\n+ *\n+ * @return string\n+ *\u002F\n+function learn_press_get_user_quiz_status( $quiz_id, $user_id = false ) {\n+\t$user = $user_id ? learn_press_get_user( $user_id ) : learn_press_get_current_user();\n+\n+\treturn $user ? $user->get_quiz_status( $quiz_id ) : '';\n+}\n+\n+function learn_press_get_quizzes( $user_id = 0, &$args = array() ) {\n+\t\u002F\u002F TODO: get all quizzes by user\n+}\n+\n+\u002F**\n+ * Add new type that LP question can support\n+ *\n+ * @param string|array $types\n+ * @param string|array $supports\n+ *\u002F\n+function learn_press_add_question_type_support( $types, $supports ) {\n+\tif ( empty( $GLOBALS['learn_press_question_type_support'] ) ) {\n+\t\t$GLOBALS['learn_press_question_type_support'] = array();\n+\t}\n+\t$_supports = $GLOBALS['learn_press_question_type_support'];\n+\tsettype( $types, 'array' );\n+\tsettype( $supports, 'array' );\n+\n+\t$types    = array_filter( $types );\n+\t$supports = array_filter( $supports );\n+\n+\tif ( $types ) {\n+\t\tforeach ( $types as $type ) {\n+\t\t\tif ( ! $type ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tif ( empty( $_supports[ $type ] ) ) {\n+\t\t\t\t$_supports[ $type ] = array();\n+\t\t\t}\n+\t\t\tif ( $supports ) {\n+\t\t\t\tforeach ( $supports as $s ) {\n+\t\t\t\t\t$_supports[ $type ][] = $s;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$_supports[ $type ] = array_filter( $_supports[ $type ] );\n+\t\t}\n+\t}\n+\t$GLOBALS['learn_press_question_type_support'] = $_supports;\n+}\n+\n+\u002F**\n+ * @param string $type\n+ *\n+ * @return array|mixed\n+ *\u002F\n+function learn_press_get_question_type_support( $type = '' ) {\n+\t$supports = ! empty( $GLOBALS['learn_press_question_type_support'] ) ? $GLOBALS['learn_press_question_type_support'] : array();\n+\n+\treturn $type && ! empty( $supports[ $type ] ) ? $supports[ $type ] : $supports;\n+}\n+\n+\u002F**\n+ * Check if a type question is supported.\n+ *\n+ * @param string $type\n+ *\n+ * @return bool\n+ *\u002F\n+function learn_press_is_support_question_type( $type ) {\n+\n+\tif ( is_array( $type ) ) {\n+\t\t$type = reset( $type );\n+\t}\n+\n+\t$supports = learn_press_get_question_type_support();\n+\n+\t\u002F\u002F New type is supported?\n+\tif ( $supports && ! array_key_exists( $type, $supports ) ) {\n+\t\treturn false;\n+\t}\n+\n+\treturn true;\n+}\n+\n+function learn_press_question_type_support( $type, $features ) {\n+\tsettype( $features, 'array' );\n+\t$features    = array_filter( $features );\n+\t$supports    = learn_press_get_question_type_support( $type );\n+\t$has_support = true;\n+\n+\tif ( $features ) {\n+\t\tforeach ( $features as $feature ) {\n+\t\t\t$has_support = $has_support && in_array( $feature, $supports );\n+\t\t}\n+\t}\n+\n+\treturn $has_support;\n+}\n+\n+function learn_press_default_question_type_support() {\n+\tlearn_press_add_question_type_support(\n+\t\tarray(\n+\t\t\t'multi_choice',\n+\t\t\t'single_choice',\n+\t\t\t'true_or_false',\n+\t\t\t'fill_in_blanks',\n+\t\t),\n+\t\t'check-answer'\n+\t);\n+}\n+\n+add_action( 'plugins_loaded', 'learn_press_default_question_type_support' );\n+\n+\n+if ( ! function_exists( 'learn_press_quiz_get_questions_order' ) ) {\n+\t\u002F**\n+\t * Get question order in quiz.\n+\t *\n+\t * @since 3.0.0\n+\t *\n+\t * @param array $questions\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tfunction learn_press_quiz_get_questions_order( $questions = array() ) {\n+\t\tif ( ! $questions ) {\n+\t\t\treturn array();\n+\t\t}\n+\n+\t\tglobal $wpdb;\n+\n+\t\t$ids = $orders = array();\n+\n+\t\tforeach ( $questions as $id => $question ) {\n+\t\t\t$ids[] = $id;\n+\t\t}\n+\n+\t\t$order = $wpdb->get_results( \"SELECT q.question_id AS q_id, q.question_order AS q_order FROM $wpdb->learnpress_quiz_questions AS q\", ARRAY_A );\n+\n+\t\tif ( $order ) {\n+\t\t\tforeach ( $order as $id => $_order ) {\n+\t\t\t\t$orders[ $_order['q_id'] ] = $_order['q_order'];\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $orders;\n+\t}\n+}\n+\n+\u002F**\n+ * @return bool\n+ * @deprecated 4.1.6.1\n+ * We will remove on version 4.1.7, you can use \"get_status\" function on the class LP_User_Item_Quiz to replace\n+ *\u002F\n+function learn_press_is_review_questions() {\n+\t_deprecated_function( __FUNCTION__, '4.1.6.1' );\n+\n+\t$item = LP_Global::course_item();\n+\t$user = learn_press_get_current_user();\n+\n+\tif ( $item && $user ) {\n+\t\t$course = learn_press_get_course();\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$quiz_data = $user->get_item_data( $item->get_id(), $course->get_id() );\n+\n+\t\treturn $quiz_data && $quiz_data->is_review_questions();\n+\t}\n+\n+\treturn false;\n+}\n+\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fclass-lp-admin-core-api.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fclass-lp-admin-core-api.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fclass-lp-admin-core-api.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fclass-lp-admin-core-api.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Admin_Core_API\r\n- *\r\n- * @author Thimpress\r\n- * @editor tungnx, nhamdv\r\n- * @version 1.0.2\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Admin_Core_API extends LP_Abstract_API {\r\n-\tpublic function __construct() {\r\n-\t\tif ( ! LP_Helper::isRestApiLP() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Includes files\r\n-\t *\u002F\r\n-\tpublic function rest_api_includes() {\r\n-\t\tparent::rest_api_includes();\r\n-\r\n-\t\t$list_rest_admin = array(\r\n-\t\t\t\u002F\u002F 'class-lp-admin-rest-question-controller.php',\r\n-\t\t\t'class-lp-admin-rest-database-controller.php',\r\n-\t\t\t'class-lp-admin-rest-course-controller.php',\r\n-\t\t\t'class-lp-admin-rest-tools-controller.php',\r\n-\t\t\t'class-lp-admin-rest-reset-data-controller.php',\r\n-\t\t\t'class-lp-admin-rest-statistics-controller.php',\r\n-\t\t);\r\n-\r\n-\t\t$path_version  = $this->version . '\u002Fadmin\u002F';\r\n-\t\t$path_rest_api = LP_PLUGIN_PATH . 'inc\u002Frest-api\u002F' . $path_version;\r\n-\r\n-\t\tforeach ( $list_rest_admin as $rest_admin ) {\r\n-\t\t\tinclude_once realpath( $path_rest_api . $rest_admin );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fadmin\u002Fcore-api\u002Fincludes' );\r\n-\t}\r\n-\r\n-\tpublic function rest_api_register_routes() {\r\n-\t\t$controllers = array(\r\n-\t\t\t\u002F\u002F'LP_REST_Admin_Question_Controller',\r\n-\t\t\t'LP_REST_Admin_Database_Controller',\r\n-\t\t\t'LP_REST_Admin_Course_Controller',\r\n-\t\t\t'LP_REST_Admin_Tools_Controller',\r\n-\t\t\t'LP_REST_Admin_Reset_Data_Controller',\r\n-\t\t\t'LP_REST_Admin_Statistics_Controller',\r\n-\t\t);\r\n-\r\n-\t\t$this->controllers = apply_filters( 'learn-press\u002Fcore-api\u002Fcontrollers', $controllers );\r\n-\r\n-\t\tparent::rest_api_register_routes();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Admin_Core_API\n+ *\n+ * @author Thimpress\n+ * @editor tungnx, nhamdv\n+ * @version 1.0.2\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Admin_Core_API extends LP_Abstract_API {\n+\tpublic function __construct() {\n+\t\tif ( ! LP_Helper::isRestApiLP() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Includes files\n+\t *\u002F\n+\tpublic function rest_api_includes() {\n+\t\tparent::rest_api_includes();\n+\n+\t\t$list_rest_admin = array(\n+\t\t\t\u002F\u002F 'class-lp-admin-rest-question-controller.php',\n+\t\t\t'class-lp-admin-rest-database-controller.php',\n+\t\t\t'class-lp-admin-rest-course-controller.php',\n+\t\t\t'class-lp-admin-rest-tools-controller.php',\n+\t\t\t'class-lp-admin-rest-reset-data-controller.php',\n+\t\t\t'class-lp-admin-rest-statistics-controller.php',\n+\t\t);\n+\n+\t\t$path_version  = $this->version . '\u002Fadmin\u002F';\n+\t\t$path_rest_api = LP_PLUGIN_PATH . 'inc\u002Frest-api\u002F' . $path_version;\n+\n+\t\tforeach ( $list_rest_admin as $rest_admin ) {\n+\t\t\tinclude_once realpath( $path_rest_api . $rest_admin );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fcore-api\u002Fincludes' );\n+\t}\n+\n+\tpublic function rest_api_register_routes() {\n+\t\t$controllers = array(\n+\t\t\t\u002F\u002F'LP_REST_Admin_Question_Controller',\n+\t\t\t'LP_REST_Admin_Database_Controller',\n+\t\t\t'LP_REST_Admin_Course_Controller',\n+\t\t\t'LP_REST_Admin_Tools_Controller',\n+\t\t\t'LP_REST_Admin_Reset_Data_Controller',\n+\t\t\t'LP_REST_Admin_Statistics_Controller',\n+\t\t);\n+\n+\t\t$this->controllers = apply_filters( 'learn-press\u002Fcore-api\u002Fcontrollers', $controllers );\n+\n+\t\tparent::rest_api_register_routes();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fclass-lp-core-api.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fclass-lp-core-api.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fclass-lp-core-api.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fclass-lp-core-api.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Core_API\r\n- *\r\n- * @author Thimpress\r\n- * @editor tungnx, nhamdv\r\n- * @version 1.0.1\r\n- * @since 4.0.0\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Core_API extends LP_Abstract_API {\r\n-\tpublic function __construct() {\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Includes files\r\n-\t *\u002F\r\n-\tpublic function rest_api_includes() {\r\n-\t\tparent::rest_api_includes();\r\n-\r\n-\t\t$list_rest_frontend = array(\r\n-\t\t\t'class-lp-rest-settings-controller.php',\r\n-\t\t\t'class-lp-rest-users-controller.php',\r\n-\t\t\t'class-lp-rest-courses-controller.php',\r\n-\t\t\t'class-lp-rest-lazy-load-controller.php',\r\n-\t\t\t'class-lp-rest-profile-controller.php',\r\n-\t\t\t'class-lp-rest-widgets-controller.php',\r\n-\t\t\t'class-lp-rest-addon-controller.php',\r\n-\t\t\t'class-lp-rest-material-controller.php',\r\n-\t\t\t'class-lp-rest-instructor-controller.php',\r\n-\t\t\t'class-lp-rest-ajax-controller.php',\r\n-\t\t);\r\n-\r\n-\t\t$path_version  = $this->version . '\u002Ffrontend\u002F';\r\n-\t\t$path_rest_api = LP_PLUGIN_PATH . 'inc\u002Frest-api\u002F' . $path_version;\r\n-\r\n-\t\tforeach ( $list_rest_frontend as $rest_frontend ) {\r\n-\t\t\tinclude_once realpath( $path_rest_api . $rest_frontend );\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcore-api\u002Fincludes' );\r\n-\t}\r\n-\r\n-\tpublic function rest_api_register_routes() {\r\n-\t\t$controllers = array(\r\n-\t\t\t'LP_REST_Settings_Controller',\r\n-\t\t\t'LP_REST_Users_Controller',\r\n-\t\t\t'LP_REST_Courses_Controller',\r\n-\t\t\t'LP_REST_Lazy_Load_Controller',\r\n-\t\t\t'LP_REST_Profile_Controller',\r\n-\t\t\t'LP_REST_Widgets_Controller',\r\n-\t\t\t'LP_REST_Addon_Controller',\r\n-\t\t\t'LP_Rest_Material_Controller',\r\n-\t\t\t'LP_REST_Instructor_Controller',\r\n-\t\t\t'LP_REST_AJAX_Controller',\r\n-\t\t);\r\n-\r\n-\t\t$this->controllers = apply_filters( 'learn-press\u002Fcore-api\u002Fcontrollers', $controllers );\r\n-\r\n-\t\tparent::rest_api_register_routes();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Core_API\n+ *\n+ * @author Thimpress\n+ * @editor tungnx, nhamdv\n+ * @version 1.0.1\n+ * @since 4.0.0\n+ *\u002F\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Core_API extends LP_Abstract_API {\n+\tpublic function __construct() {\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Includes files\n+\t *\u002F\n+\tpublic function rest_api_includes() {\n+\t\tparent::rest_api_includes();\n+\n+\t\t$list_rest_frontend = array(\n+\t\t\t'class-lp-rest-settings-controller.php',\n+\t\t\t'class-lp-rest-users-controller.php',\n+\t\t\t'class-lp-rest-courses-controller.php',\n+\t\t\t'class-lp-rest-lazy-load-controller.php',\n+\t\t\t'class-lp-rest-profile-controller.php',\n+\t\t\t'class-lp-rest-widgets-controller.php',\n+\t\t\t'class-lp-rest-addon-controller.php',\n+\t\t\t'class-lp-rest-material-controller.php',\n+\t\t\t'class-lp-rest-instructor-controller.php',\n+\t\t\t'class-lp-rest-ajax-controller.php',\n+\t\t);\n+\n+\t\t$path_version  = $this->version . '\u002Ffrontend\u002F';\n+\t\t$path_rest_api = LP_PLUGIN_PATH . 'inc\u002Frest-api\u002F' . $path_version;\n+\n+\t\tforeach ( $list_rest_frontend as $rest_frontend ) {\n+\t\t\tinclude_once realpath( $path_rest_api . $rest_frontend );\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fcore-api\u002Fincludes' );\n+\t}\n+\n+\tpublic function rest_api_register_routes() {\n+\t\t$controllers = array(\n+\t\t\t'LP_REST_Settings_Controller',\n+\t\t\t'LP_REST_Users_Controller',\n+\t\t\t'LP_REST_Courses_Controller',\n+\t\t\t'LP_REST_Lazy_Load_Controller',\n+\t\t\t'LP_REST_Profile_Controller',\n+\t\t\t'LP_REST_Widgets_Controller',\n+\t\t\t'LP_REST_Addon_Controller',\n+\t\t\t'LP_Rest_Material_Controller',\n+\t\t\t'LP_REST_Instructor_Controller',\n+\t\t\t'LP_REST_AJAX_Controller',\n+\t\t);\n+\n+\t\t$this->controllers = apply_filters( 'learn-press\u002Fcore-api\u002Fcontrollers', $controllers );\n+\n+\t\tparent::rest_api_register_routes();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,128 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Users_Controller\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-class LP_REST_Admin_Course_Controller extends LP_Abstract_REST_Controller {\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin';\r\n-\t\t$this->rest_base = 'course';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register rest routes.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'get_final_quiz' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_final_quiz' ),\r\n-\t\t\t\t\t'permission_callback' => function() {\r\n-\t\t\t\t\t\treturn current_user_can( 'edit_posts' );\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Final Quiz in Course Settings.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function get_final_quiz( WP_REST_Request $request ) {\r\n-\t\t$params         = $request->get_params();\r\n-\t\t$course_id      = $params['courseId'] ?? false;\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\t\t$final_quiz     = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No Course ID available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No Course available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$items = $course->get_item_ids();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\tif ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {\r\n-\t\t\t\t\t\t$final_quiz = $item;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $final_quiz ) ) {\r\n-\t\t\t\tupdate_post_meta( $course_id, '_lp_final_quiz', $final_quiz );\r\n-\t\t\t\t$passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true );\r\n-\r\n-\t\t\t\t$post_type_object = get_post_type_object( LP_QUIZ_CPT );\r\n-\t\t\t\t$url              = admin_url( sprintf( $post_type_object->_edit_link . '&action=edit#_lp_passing_grade', $final_quiz ) );\r\n-\r\n-\t\t\t\tob_start();\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message\">\r\n-\t\t\t\t\t\u003C?php printf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ); ?>\r\n-\t\t\t\t\t-\r\n-\t\t\t\t\t\u003C?php printf( esc_html__( 'Edit: %s', 'learnpress' ), '\u003Ca href=\"' . esc_url_raw( $url ) . '\">' . get_the_title( $final_quiz ) . '\u003C\u002Fa>' ); ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$response->status = 'success';\r\n-\t\t\t\t$response->data   = ob_get_clean();\r\n-\t\t\t} else {\r\n-\t\t\t\tdelete_post_meta( $course_id, '_lp_final_quiz' );\r\n-\t\t\t\t$response->data = '\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message lp-metabox-evaluate-final_quiz__message-error\">' . esc_html__( 'No Quiz in this course!', 'learnpress' ) . '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_REST_Users_Controller\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+class LP_REST_Admin_Course_Controller extends LP_Abstract_REST_Controller {\n+\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin';\n+\t\t$this->rest_base = 'course';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Register rest routes.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'get_final_quiz' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_final_quiz' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn current_user_can( 'edit_posts' );\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Get Final Quiz in Course Settings.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function get_final_quiz( WP_REST_Request $request ) {\n+\t\t$params            = $request->get_params();\n+\t\t$course_id         = $params['courseId'] ?? false;\n+\t\t$is_course_builder = ! empty( $params['is_course_builder'] ) || ! empty( $params['isCourseBuilder'] );\n+\t\t$response          = new LP_REST_Response();\n+\t\t$response->data    = '';\n+\t\t$final_quiz        = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No Course ID available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No Course available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$items = $course->get_item_ids();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\tif ( learn_press_get_post_type( $item ) === LP_QUIZ_CPT ) {\n+\t\t\t\t\t\t$final_quiz = $item;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $final_quiz ) ) {\n+\t\t\t\tupdate_post_meta( $course_id, '_lp_final_quiz', $final_quiz );\n+\t\t\t\t$passing_grade = get_post_meta( $final_quiz, '_lp_passing_grade', true );\n+\t\t\t\tif ( '' === (string) $passing_grade ) {\n+\t\t\t\t\t$quiz_model = \\LearnPress\\Models\\QuizPostModel::find( absint( $final_quiz ), true );\n+\t\t\t\t\tif ( $quiz_model ) {\n+\t\t\t\t\t\t$passing_grade = $quiz_model->get_passing_grade();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$passing_grade = 80;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t\t$url = $this->get_final_quiz_edit_link( $final_quiz, $course_id, $is_course_builder );\n+\n+\t\t\t\tob_start();\n+\t\t\t\t?>\n+\t\t\t\t\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message\">\n+\t\t\t\t\t\u003C?php printf( esc_html__( 'Passing Grade: %s', 'learpress' ), $passing_grade . '%' ); ?>\n+\t\t\t\t\t-\n+\t\t\t\t\t\u003C?php printf( esc_html__( 'Edit: %s', 'learnpress' ), '\u003Ca href=\"' . esc_url_raw( $url ) . '\">' . get_the_title( $final_quiz ) . '\u003C\u002Fa>' ); ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php\n+\t\t\t\t$response->status = 'success';\n+\t\t\t\t$response->data   = ob_get_clean();\n+\t\t\t} else {\n+\t\t\t\tdelete_post_meta( $course_id, '_lp_final_quiz' );\n+\t\t\t\t$response->data = '\u003Cdiv class=\"lp-metabox-evaluate-final_quiz__message lp-metabox-evaluate-final_quiz__message-error\">' . esc_html__( 'No Quiz in this course!', 'learnpress' ) . '\u003C\u002Fdiv>';\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Build edit link for final quiz in course settings.\n+\t *\n+\t * @param int  $final_quiz_id\n+\t * @param int  $course_id\n+\t * @param bool $is_course_builder\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprotected function get_final_quiz_edit_link( int $final_quiz_id, int $course_id, bool $is_course_builder = false ): string {\n+\t\t$post_type_object = get_post_type_object( LP_QUIZ_CPT );\n+\t\t$url              = admin_url( sprintf( $post_type_object->_edit_link . '&action=edit#_lp_passing_grade', $final_quiz_id ) );\n+\n+\t\tif ( $is_course_builder && class_exists( '\\LearnPress\\CourseBuilder\\CourseBuilder' ) ) {\n+\t\t\t$url = \\LearnPress\\CourseBuilder\\CourseBuilder::get_tab_link( 'quizzes', absint( $final_quiz_id ), 'settings' ) . '#_lp_passing_grade';\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fmeta-box\u002Fassessment\u002Ffinal-quiz\u002Fedit-link',\n+\t\t\t$url,\n+\t\t\t$final_quiz_id,\n+\t\t\t$course_id\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-database-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-database-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-database-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-database-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,222 +1,222 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Users_Controller\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-class LP_REST_Admin_Database_Controller extends LP_Abstract_REST_Controller {\r\n-\t\u002F**\r\n-\t * @var LP_User\r\n-\t *\u002F\r\n-\tprotected $user = null;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'database';\r\n-\t\tparent::__construct();\r\n-\r\n-\t\tadd_filter( 'rest_pre_dispatch', array( $this, 'rest_pre_dispatch' ), 10, 3 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Init data prepares for callbacks of rest\r\n-\t *\r\n-\t * @param                 $null\r\n-\t * @param WP_REST_Server  $server\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function rest_pre_dispatch( $response, $handler, $request ) {\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register rest routes.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'upgrade'                   => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'upgrade' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'get_steps'                 => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_steps' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'agree_terms'               => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'agree_terms_upgrade' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'check-db-valid-re-upgrade' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'check_DB_valid_to_re_upgrade' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'del-tb-lp-upgrade-db'      => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'delete_tb_lp_upgrade_db' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\tpublic function check_admin_permission() {\r\n-\t\treturn LP_Abstract_API::check_admin_permission();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set agree terms upgrade database.\r\n-\t *\r\n-\t * @param WP_REST_Request $request .\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function agree_terms_upgrade( WP_REST_Request $request ) {\r\n-\t\t$result = new LP_REST_Response();\r\n-\r\n-\t\tif ( $request->get_param( 'agree_terms' ) ) {\r\n-\t\t\tLP_Settings::update_option( 'agree_terms', LP_Updater::instance()->check_lp_db_need_upgrade() );\r\n-\t\t\t$result->status = 'success';\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $result );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Upgrade DB\r\n-\t *\r\n-\t * @param WP_REST_Request $request .\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function upgrade( WP_REST_Request $request ) {\r\n-\t\t$lp_updater   = LP_Updater::instance();\r\n-\t\t$result       = new LP_REST_Response();\r\n-\t\t$class_handle = $lp_updater->load_file_version_upgrade_db();\r\n-\r\n-\t\tif ( empty( $class_handle ) ) {\r\n-\t\t\t$result->message = sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'The LP Database is Latest:', 'learnpress' ),\r\n-\t\t\t\t'v' . get_option( LP_KEY_DB_VERSION )\r\n-\t\t\t);\r\n-\t\t\twp_send_json( $result );\r\n-\t\t}\r\n-\r\n-\t\t$params = $request->get_params();\r\n-\r\n-\t\twp_send_json( $class_handle->handle( $params ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Steps upgrade completed.\r\n-\t *\u002F\r\n-\tpublic function get_steps() {\r\n-\t\t$lp_updater      = LP_Updater::instance();\r\n-\t\t$lp_db           = LP_Database::getInstance();\r\n-\t\t$steps_completed = array();\r\n-\t\t$steps_default   = array();\r\n-\r\n-\t\t$class_handle = $lp_updater->load_file_version_upgrade_db();\r\n-\r\n-\t\tif ( ! empty( $class_handle ) ) {\r\n-\t\t\t$steps_default = $class_handle->group_steps;\r\n-\r\n-\t\t\t$tb_lp_upgrade_db_exists = $lp_db->check_table_exists( $lp_db->tb_lp_upgrade_db );\r\n-\r\n-\t\t\tif ( $tb_lp_upgrade_db_exists ) {\r\n-\t\t\t\t$steps_completed = $lp_db->get_steps_completed();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$steps = array(\r\n-\t\t\t'steps_default'   => $steps_default,\r\n-\t\t\t'steps_completed' => $steps_completed,\r\n-\t\t);\r\n-\r\n-\t\twp_send_json( $steps );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check DB valid to re upgrade\r\n-\t *\r\n-\t * can_re_upgrade | 1: can, 0: can't\r\n-\t *\u002F\r\n-\tpublic function check_DB_valid_to_re_upgrade() {\r\n-\t\t$response                       = new LP_REST_Response();\r\n-\t\t$lp_db                          = LP_Database::getInstance();\r\n-\t\t$response->data->can_re_upgrade = 0;\r\n-\r\n-\t\t$col_start_time_gmt_exist = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\r\n-\t\t$col_graduation_exist     = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'graduation' );\r\n-\t\t$col_item_id_exist        = $lp_db->check_col_table( $lp_db->tb_lp_order_items, 'item_id' );\r\n-\r\n-\t\tif ( $col_start_time_gmt_exist || ! $col_graduation_exist || ! $col_item_id_exist ) {\r\n-\t\t\t$response->data->can_re_upgrade = 1;\r\n-\t\t}\r\n-\r\n-\t\t$response->status = 'success';\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove table lp_upgrade_db\r\n-\t *\r\n-\t * can_re_upgrade | 1: can, 0: can't\r\n-\t *\u002F\r\n-\tpublic function delete_tb_lp_upgrade_db() {\r\n-\t\t$response                       = new LP_REST_Response();\r\n-\t\t$lp_db                          = LP_Database::getInstance();\r\n-\t\t$response->data->can_re_upgrade = 0;\r\n-\t\t$tables                         = array(\r\n-\t\t\t$lp_db->tb_lp_user_items,\r\n-\t\t\t$lp_db->tb_lp_user_itemmeta,\r\n-\t\t\t$lp_db->tb_lp_question_answers,\r\n-\t\t\t$lp_db->tb_postmeta,\r\n-\t\t\t$lp_db->tb_options,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$result = $lp_db->drop_table( $lp_db->tb_lp_upgrade_db );\r\n-\t\t\tupdate_option( LP_KEY_DB_VERSION, 3 );\r\n-\r\n-\t\t\tforeach ( $tables as $table ) {\r\n-\t\t\t\t\u002F\u002F Drop - Rename tables bk.\r\n-\t\t\t\t$tb_bk        = $table . '_bk';\r\n-\t\t\t\t$tb_bk_exists = $lp_db->check_table_exists( $tb_bk );\r\n-\t\t\t\tif ( $tb_bk_exists ) {\r\n-\t\t\t\t\t$lp_db->drop_table( $table );\r\n-\t\t\t\t\t$lp_db->rename_table( $tb_bk, $table );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $result ) {\r\n-\t\t\t\t$response->status    = 'success';\r\n-\t\t\t\t$response->data->url = admin_url( 'admin.php?page=learn-press-tools&tab=database&action=upgrade-db' );\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_REST_Users_Controller\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+class LP_REST_Admin_Database_Controller extends LP_Abstract_REST_Controller {\n+\t\u002F**\n+\t * @var LP_User\n+\t *\u002F\n+\tprotected $user = null;\n+\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'database';\n+\t\tparent::__construct();\n+\n+\t\tadd_filter( 'rest_pre_dispatch', array( $this, 'rest_pre_dispatch' ), 10, 3 );\n+\t}\n+\n+\t\u002F**\n+\t * Init data prepares for callbacks of rest\n+\t *\n+\t * @param                 $null\n+\t * @param WP_REST_Server  $server\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function rest_pre_dispatch( $response, $handler, $request ) {\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Register rest routes.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'upgrade'                   => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'upgrade' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'get_steps'                 => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_steps' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'agree_terms'               => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'agree_terms_upgrade' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'check-db-valid-re-upgrade' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'check_DB_valid_to_re_upgrade' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'del-tb-lp-upgrade-db'      => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'delete_tb_lp_upgrade_db' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\tpublic function check_admin_permission() {\n+\t\treturn LP_Abstract_API::check_admin_permission();\n+\t}\n+\n+\t\u002F**\n+\t * Set agree terms upgrade database.\n+\t *\n+\t * @param WP_REST_Request $request .\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function agree_terms_upgrade( WP_REST_Request $request ) {\n+\t\t$result = new LP_REST_Response();\n+\n+\t\tif ( $request->get_param( 'agree_terms' ) ) {\n+\t\t\tLP_Settings::update_option( 'agree_terms', LP_Updater::instance()->check_lp_db_need_upgrade() );\n+\t\t\t$result->status = 'success';\n+\t\t}\n+\n+\t\twp_send_json( $result );\n+\t}\n+\n+\t\u002F**\n+\t * Upgrade DB\n+\t *\n+\t * @param WP_REST_Request $request .\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function upgrade( WP_REST_Request $request ) {\n+\t\t$lp_updater   = LP_Updater::instance();\n+\t\t$result       = new LP_REST_Response();\n+\t\t$class_handle = $lp_updater->load_file_version_upgrade_db();\n+\n+\t\tif ( empty( $class_handle ) ) {\n+\t\t\t$result->message = sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'The LP Database is Latest:', 'learnpress' ),\n+\t\t\t\t'v' . get_option( LP_KEY_DB_VERSION )\n+\t\t\t);\n+\t\t\twp_send_json( $result );\n+\t\t}\n+\n+\t\t$params = $request->get_params();\n+\n+\t\twp_send_json( $class_handle->handle( $params ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get Steps upgrade completed.\n+\t *\u002F\n+\tpublic function get_steps() {\n+\t\t$lp_updater      = LP_Updater::instance();\n+\t\t$lp_db           = LP_Database::getInstance();\n+\t\t$steps_completed = array();\n+\t\t$steps_default   = array();\n+\n+\t\t$class_handle = $lp_updater->load_file_version_upgrade_db();\n+\n+\t\tif ( ! empty( $class_handle ) ) {\n+\t\t\t$steps_default = $class_handle->group_steps;\n+\n+\t\t\t$tb_lp_upgrade_db_exists = $lp_db->check_table_exists( $lp_db->tb_lp_upgrade_db );\n+\n+\t\t\tif ( $tb_lp_upgrade_db_exists ) {\n+\t\t\t\t$steps_completed = $lp_db->get_steps_completed();\n+\t\t\t}\n+\t\t}\n+\n+\t\t$steps = array(\n+\t\t\t'steps_default'   => $steps_default,\n+\t\t\t'steps_completed' => $steps_completed,\n+\t\t);\n+\n+\t\twp_send_json( $steps );\n+\t}\n+\n+\t\u002F**\n+\t * Check DB valid to re upgrade\n+\t *\n+\t * can_re_upgrade | 1: can, 0: can't\n+\t *\u002F\n+\tpublic function check_DB_valid_to_re_upgrade() {\n+\t\t$response                       = new LP_REST_Response();\n+\t\t$lp_db                          = LP_Database::getInstance();\n+\t\t$response->data->can_re_upgrade = 0;\n+\n+\t\t$col_start_time_gmt_exist = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\n+\t\t$col_graduation_exist     = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'graduation' );\n+\t\t$col_item_id_exist        = $lp_db->check_col_table( $lp_db->tb_lp_order_items, 'item_id' );\n+\n+\t\tif ( $col_start_time_gmt_exist || ! $col_graduation_exist || ! $col_item_id_exist ) {\n+\t\t\t$response->data->can_re_upgrade = 1;\n+\t\t}\n+\n+\t\t$response->status = 'success';\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Remove table lp_upgrade_db\n+\t *\n+\t * can_re_upgrade | 1: can, 0: can't\n+\t *\u002F\n+\tpublic function delete_tb_lp_upgrade_db() {\n+\t\t$response                       = new LP_REST_Response();\n+\t\t$lp_db                          = LP_Database::getInstance();\n+\t\t$response->data->can_re_upgrade = 0;\n+\t\t$tables                         = array(\n+\t\t\t$lp_db->tb_lp_user_items,\n+\t\t\t$lp_db->tb_lp_user_itemmeta,\n+\t\t\t$lp_db->tb_lp_question_answers,\n+\t\t\t$lp_db->tb_postmeta,\n+\t\t\t$lp_db->tb_options,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$result = $lp_db->drop_table( $lp_db->tb_lp_upgrade_db );\n+\t\t\tupdate_option( LP_KEY_DB_VERSION, 3 );\n+\n+\t\t\tforeach ( $tables as $table ) {\n+\t\t\t\t\u002F\u002F Drop - Rename tables bk.\n+\t\t\t\t$tb_bk        = $table . '_bk';\n+\t\t\t\t$tb_bk_exists = $lp_db->check_table_exists( $tb_bk );\n+\t\t\t\tif ( $tb_bk_exists ) {\n+\t\t\t\t\t$lp_db->drop_table( $table );\n+\t\t\t\t\t$lp_db->rename_table( $tb_bk, $table );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $result ) {\n+\t\t\t\t$response->status    = 'success';\n+\t\t\t\t$response->data->url = admin_url( 'admin.php?page=learn-press-tools&tab=database&action=upgrade-db' );\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-reset-data-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-reset-data-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-reset-data-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-reset-data-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,219 +1,219 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Users_Controller\r\n- * in LearnPres > Tool\r\n- *\r\n- * @since 4.0.4\r\n- * @author Nhamdv \u003Cemail@email.com>\r\n- *\u002F\r\n-class LP_REST_Admin_Reset_Data_Controller extends LP_Abstract_REST_Controller {\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin\u002Ftools';\r\n-\t\t$this->rest_base = 'reset-data';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register rest routes.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'search-courses' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'search_courses' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'reset-courses'  => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'reset_courses' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\tpublic function check_admin_permission() {\r\n-\t\treturn LP_Abstract_API::check_admin_permission();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Search Course for Reset Course\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function search_courses( $request ) {\r\n-\t\t$params = $request->get_params();\r\n-\t\t$s      = ! empty( $params['s'] ) ? $params['s'] : '';\r\n-\r\n-\t\t\u002F\u002F Response.\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"SELECT ID as id, post_title AS title, 'students', '' AS status\r\n-\t\t\t\tFROM {$wpdb->posts}\r\n-\t\t\t\tWHERE post_type = %s AND post_title LIKE %s\",\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t'%' . $wpdb->esc_like( $s ) . '%'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$courses = array();\r\n-\t\t\t$rows    = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( $rows ) {\r\n-\t\t\t\t$course_ids = wp_list_pluck( $rows, 'id' );\r\n-\t\t\t\t$format     = array_fill( 0, count( $course_ids ), '%d' );\r\n-\t\t\t\t$args       = $course_ids;\r\n-\t\t\t\t$args[]     = LP_COURSE_CPT;\r\n-\t\t\t\t$query      = $wpdb->prepare( \"SELECT item_id FROM {$wpdb->learnpress_user_items} WHERE item_id IN(\" . implode( ',', $format ) . ') AND item_type = %s', $args );\r\n-\r\n-\t\t\t\t$item_ids = $wpdb->get_col( $query );\r\n-\r\n-\t\t\t\tif ( $item_ids ) {\r\n-\t\t\t\t\tfor ( $n = count( $rows ), $i = $n - 1; $i >= 0; $i -- ) {\r\n-\t\t\t\t\t\tif ( ! in_array( $rows[ $i ]->id, $item_ids ) ) {\r\n-\t\t\t\t\t\t\tunset( $rows[ $i ] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'No items available!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $rows ) {\r\n-\t\t\t\t\tforeach ( $rows as $k => $row ) {\r\n-\t\t\t\t\t\t$course        = learn_press_get_course( $row->id );\r\n-\t\t\t\t\t\t$row->students = $course->get_total_user_enrolled_or_purchased();\r\n-\r\n-\t\t\t\t\t\tif ( $row->students ) {\r\n-\t\t\t\t\t\t\t$courses[] = $row;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No courses available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t\t$response->data   = $courses;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Final Quiz in Course Settings.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function reset_courses( WP_REST_Request $request ) {\r\n-\t\t$params    = $request->get_params();\r\n-\t\t$course_id = isset( $params['courseId'] ) ? $params['courseId'] : false;\r\n-\r\n-\t\t\u002F\u002F Responsive.\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No course ID available', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t\u002F\u002F GET list user_item_id child of parent course ids.\r\n-\t\t\t$child_user_item_ids = $wpdb->get_col(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT user_item_id FROM $wpdb->learnpress_user_items\r\n-\t\t\t\t\tWHERE ref_id=%d\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$course_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F DELETE course_item ( lesson, quiz ) by course id in table user_items.\r\n-\t\t\t$wpdb->delete(\r\n-\t\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'ref_id' => $course_id,\r\n-\t\t\t\t),\r\n-\t\t\t\tarray( '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F DELETE user_itemmeta for ( lesson, quiz... )\r\n-\t\t\tif ( ! empty( $child_user_item_ids ) ) {\r\n-\t\t\t\tforeach ( $child_user_item_ids as $child_user_item_id ) {\r\n-\t\t\t\t\t$wpdb->delete(\r\n-\t\t\t\t\t\t$wpdb->learnpress_user_itemmeta,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'learnpress_user_item_id' => absint( $child_user_item_id ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tarray( '%d' )\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tLP_User_Items_Result_DB::instance()->delete( absint( $child_user_item_id ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Change status, graduation... by course id\r\n-\t\t\t$wpdb->update(\r\n-\t\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'status'     => LP_COURSE_ENROLLED,\r\n-\t\t\t\t\t'graduation' => 'in-progress',\r\n-\t\t\t\t\t'start_time' => current_time( 'mysql', 1 ),\r\n-\t\t\t\t\t'end_time'   => null,\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'item_id' => $course_id,\r\n-\t\t\t\t),\r\n-\t\t\t\tarray( '%s', '%s', '%s', null ),\r\n-\t\t\t\tarray( '%d' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F GET all user_item_ids by course ids\r\n-\t\t\t$user_item_ids = $wpdb->get_col(\r\n-\t\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\t\"SELECT user_item_id FROM $wpdb->learnpress_user_items\r\n-\t\t\t\t\tWHERE item_id=%d\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$course_id\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F DELETE user_itemmeta course by course id.\r\n-\t\t\tif ( ! empty( $user_item_ids ) ) {\r\n-\t\t\t\tforeach ( $user_item_ids as $user_item_id ) {\r\n-\t\t\t\t\t$wpdb->delete(\r\n-\t\t\t\t\t\t$wpdb->learnpress_user_itemmeta,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'learnpress_user_item_id' => absint( $user_item_id ),\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tarray( '%d' )\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tLP_User_Items_Result_DB::instance()->delete( absint( $user_item_id ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_REST_Users_Controller\n+ * in LearnPres > Tool\n+ *\n+ * @since 4.0.4\n+ * @author Nhamdv \u003Cemail@email.com>\n+ *\u002F\n+class LP_REST_Admin_Reset_Data_Controller extends LP_Abstract_REST_Controller {\n+\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin\u002Ftools';\n+\t\t$this->rest_base = 'reset-data';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Register rest routes.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'search-courses' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'search_courses' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'reset-courses'  => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'reset_courses' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\tpublic function check_admin_permission() {\n+\t\treturn LP_Abstract_API::check_admin_permission();\n+\t}\n+\n+\t\u002F**\n+\t * Search Course for Reset Course\n+\t *\n+\t * @param WP_REST_Request $request\n+\t * @return void\n+\t *\u002F\n+\tpublic function search_courses( $request ) {\n+\t\t$params = $request->get_params();\n+\t\t$s      = ! empty( $params['s'] ) ? $params['s'] : '';\n+\n+\t\t\u002F\u002F Response.\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"SELECT ID as id, post_title AS title, 'students', '' AS status\n+\t\t\t\tFROM {$wpdb->posts}\n+\t\t\t\tWHERE post_type = %s AND post_title LIKE %s\",\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t'%' . $wpdb->esc_like( $s ) . '%'\n+\t\t\t);\n+\n+\t\t\t$courses = array();\n+\t\t\t$rows    = $wpdb->get_results( $query );\n+\n+\t\t\tif ( $rows ) {\n+\t\t\t\t$course_ids = wp_list_pluck( $rows, 'id' );\n+\t\t\t\t$format     = array_fill( 0, count( $course_ids ), '%d' );\n+\t\t\t\t$args       = $course_ids;\n+\t\t\t\t$args[]     = LP_COURSE_CPT;\n+\t\t\t\t$query      = $wpdb->prepare( \"SELECT item_id FROM {$wpdb->learnpress_user_items} WHERE item_id IN(\" . implode( ',', $format ) . ') AND item_type = %s', $args );\n+\n+\t\t\t\t$item_ids = $wpdb->get_col( $query );\n+\n+\t\t\t\tif ( $item_ids ) {\n+\t\t\t\t\tfor ( $n = count( $rows ), $i = $n - 1; $i >= 0; $i -- ) {\n+\t\t\t\t\t\tif ( ! in_array( $rows[ $i ]->id, $item_ids ) ) {\n+\t\t\t\t\t\t\tunset( $rows[ $i ] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'No items available!', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $rows ) {\n+\t\t\t\t\tforeach ( $rows as $k => $row ) {\n+\t\t\t\t\t\t$course        = learn_press_get_course( $row->id );\n+\t\t\t\t\t\t$row->students = $course->get_total_user_enrolled_or_purchased();\n+\n+\t\t\t\t\t\tif ( $row->students ) {\n+\t\t\t\t\t\t\t$courses[] = $row;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( esc_html__( 'No courses available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t\t$response->data   = $courses;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Get Final Quiz in Course Settings.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function reset_courses( WP_REST_Request $request ) {\n+\t\t$params    = $request->get_params();\n+\t\t$course_id = isset( $params['courseId'] ) ? $params['courseId'] : false;\n+\n+\t\t\u002F\u002F Responsive.\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No course ID available', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t\u002F\u002F GET list user_item_id child of parent course ids.\n+\t\t\t$child_user_item_ids = $wpdb->get_col(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT user_item_id FROM $wpdb->learnpress_user_items\n+\t\t\t\t\tWHERE ref_id=%d\n+\t\t\t\t\t\",\n+\t\t\t\t\t$course_id\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F DELETE course_item ( lesson, quiz ) by course id in table user_items.\n+\t\t\t$wpdb->delete(\n+\t\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t\tarray(\n+\t\t\t\t\t'ref_id' => $course_id,\n+\t\t\t\t),\n+\t\t\t\tarray( '%d' )\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F DELETE user_itemmeta for ( lesson, quiz... )\n+\t\t\tif ( ! empty( $child_user_item_ids ) ) {\n+\t\t\t\tforeach ( $child_user_item_ids as $child_user_item_id ) {\n+\t\t\t\t\t$wpdb->delete(\n+\t\t\t\t\t\t$wpdb->learnpress_user_itemmeta,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'learnpress_user_item_id' => absint( $child_user_item_id ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tarray( '%d' )\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tLP_User_Items_Result_DB::instance()->delete( absint( $child_user_item_id ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Change status, graduation... by course id\n+\t\t\t$wpdb->update(\n+\t\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t\tarray(\n+\t\t\t\t\t'status'     => LP_COURSE_ENROLLED,\n+\t\t\t\t\t'graduation' => 'in-progress',\n+\t\t\t\t\t'start_time' => current_time( 'mysql', 1 ),\n+\t\t\t\t\t'end_time'   => null,\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'item_id' => $course_id,\n+\t\t\t\t),\n+\t\t\t\tarray( '%s', '%s', '%s', null ),\n+\t\t\t\tarray( '%d' )\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F GET all user_item_ids by course ids\n+\t\t\t$user_item_ids = $wpdb->get_col(\n+\t\t\t\t$wpdb->prepare(\n+\t\t\t\t\t\"SELECT user_item_id FROM $wpdb->learnpress_user_items\n+\t\t\t\t\tWHERE item_id=%d\n+\t\t\t\t\t\",\n+\t\t\t\t\t$course_id\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F DELETE user_itemmeta course by course id.\n+\t\t\tif ( ! empty( $user_item_ids ) ) {\n+\t\t\t\tforeach ( $user_item_ids as $user_item_id ) {\n+\t\t\t\t\t$wpdb->delete(\n+\t\t\t\t\t\t$wpdb->learnpress_user_itemmeta,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'learnpress_user_item_id' => absint( $user_item_id ),\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tarray( '%d' )\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tLP_User_Items_Result_DB::instance()->delete( absint( $user_item_id ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,516 +1,516 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Admin_Statistics_Controller\r\n- *\r\n- * @since 4.2.5.5\r\n- *\u002F\r\n-class LP_REST_Admin_Statistics_Controller extends LP_Abstract_REST_Controller {\r\n-\tprotected static $_instance = null;\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'statistics';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'overviews-statistics' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_overviews_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'order-statistics'     => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_order_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'course-statistics'    => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_courses_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'user-statistics'      => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_users_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Gets the overviews statistics.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response.\r\n-\t *\u002F\r\n-\tpublic function get_overviews_statistics( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params = $request->get_params();\r\n-\t\t\t$params = LP_Helper::sanitize_params_submitted( $params );\r\n-\t\t\t$filter = $this->get_statistics_filter( $params );\r\n-\r\n-\t\t\t$lp_statistic_db                    = LP_Statistics_DB::getInstance();\r\n-\t\t\t$net_sales                          = $lp_statistic_db->get_net_sales_data( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_courses                      = $lp_statistic_db->get_total_course_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_orders                       = $lp_statistic_db->get_total_order_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_instructors                  = $lp_statistic_db->get_total_instructor_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_students                     = $lp_statistic_db->get_total_student_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$chart_data                         = $this->process_chart_data( $filter, $net_sales );\r\n-\t\t\t$top_courses                        = $lp_statistic_db->get_top_sold_courses( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$top_categories                     = $lp_statistic_db->get_top_sold_categories( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$chart_data['line_label']           = __( 'Net sales', 'learnpress' );\r\n-\t\t\t$total_sales                        = html_entity_decode( learn_press_format_price( array_sum( $chart_data['data'] ) ) );\r\n-\r\n-\t\t\t$data             = array(\r\n-\t\t\t\t'total_sales'       => $total_sales,\r\n-\t\t\t\t'total_orders'      => $total_orders,\r\n-\t\t\t\t'total_instructors' => $total_instructors,\r\n-\t\t\t\t'total_courses'     => $total_courses,\r\n-\t\t\t\t'total_students'    => $total_students,\r\n-\t\t\t\t'chart_data'        => $chart_data,\r\n-\t\t\t\t'top_courses'       => $top_courses,\r\n-\t\t\t\t'top_categories'    => $top_categories,\r\n-\t\t\t);\r\n-\t\t\t$response->data   = $data;\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_order_statistics( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params                   = $request->get_params();\r\n-\t\t\t$params                   = LP_Helper::sanitize_params_submitted( $params );\r\n-\t\t\t$filter                   = $this->get_statistics_filter( $params );\r\n-\t\t\t$lp_statistic_db          = LP_Statistics_DB::getInstance();\r\n-\t\t\t$statistics               = $lp_statistic_db->get_order_statics( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$completed_orders         = $lp_statistic_db->get_completed_order_data( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$chart_data               = $this->process_chart_data( $filter, $completed_orders );\r\n-\t\t\t$chart_data['line_label'] = __( 'Completed orders', 'learnpress' );\r\n-\t\t\t$data                     = array(\r\n-\t\t\t\t'statistics' => $statistics,\r\n-\t\t\t\t'chart_data' => $chart_data,\r\n-\t\t\t);\r\n-\t\t\t$response->data           = $data;\r\n-\t\t\t$response->status         = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\tpublic function get_courses_statistics( $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$params                   = $request->get_params();\r\n-\t\t\t$params                   = LP_Helper::sanitize_params_submitted( $params );\r\n-\t\t\t$filter                   = $this->get_statistics_filter( $params );\r\n-\t\t\t$lp_statistic_db          = LP_Statistics_DB::getInstance();\r\n-\t\t\t$published_course         = $lp_statistic_db->get_published_course_data( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$courses                  = $lp_statistic_db->get_course_count_by_statuses( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$items                    = $lp_statistic_db->get_course_items_count( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$chart_data               = $this->process_chart_data( $filter, $published_course );\r\n-\t\t\t$chart_data['line_label'] = __( 'Published Courses', 'learnpress' );\r\n-\t\t\t$data                     = array(\r\n-\t\t\t\t'courses'    => $courses,\r\n-\t\t\t\t'items'      => $items,\r\n-\t\t\t\t'chart_data' => $chart_data,\r\n-\t\t\t);\r\n-\t\t\t$response->data           = $data;\r\n-\t\t\t$response->status         = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $request\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_users_statistics( $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$params                  = $request->get_params();\r\n-\t\t\t$params                  = LP_Helper::sanitize_params_submitted( $params );\r\n-\t\t\t$filter                  = $this->get_statistics_filter( $params );\r\n-\t\t\t$lp_statistic_db         = LP_Statistics_DB::getInstance();\r\n-\t\t\t$user_registers          = $lp_statistic_db->get_user_registered_data( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$user_course_statused    = $lp_statistic_db->get_users_by_user_item_graduation_statuses( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$user_not_start_course   = $lp_statistic_db->get_users_not_started_any_course( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$top_enrolled_courses    = $lp_statistic_db->get_top_enrolled_courses( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_instructors       = $lp_statistic_db->get_total_instructor_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$total_students          = $lp_statistic_db->get_total_student_created( $filter['filter_type'], $filter['time'] );\r\n-\t\t\t$chart_data              = $this->process_chart_data( $filter, $user_registers );\r\n-\t\t\t$top_enrolled_instructor = array();\r\n-\t\t\tif ( ! empty( $top_enrolled_courses ) ) {\r\n-\t\t\t\tforeach ( $top_enrolled_courses as $key => $course ) {\r\n-\t\t\t\t\tif ( ! array_key_exists( $course->instructor_id, $top_enrolled_instructor ) ) {\r\n-\t\t\t\t\t\t$top_enrolled_instructor[ $course->instructor_id ] = array(\r\n-\t\t\t\t\t\t\t'name'     => $course->instructor_name,\r\n-\t\t\t\t\t\t\t'students' => (int) $course->enrolled_user,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$top_enrolled_instructor[ $course->instructor_id ]['students'] += (int) $course->enrolled_user;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$chart_data['line_label'] = __( 'User registed', 'learnpress' );\r\n-\t\t\t$data                     = array(\r\n-\t\t\t\t'chart_data'              => $chart_data,\r\n-\t\t\t\t'user_course_statused'    => $user_course_statused,\r\n-\t\t\t\t'user_not_start_course'   => $user_not_start_course,\r\n-\t\t\t\t'top_enrolled_courses'    => $top_enrolled_courses,\r\n-\t\t\t\t'top_enrolled_instructor' => $top_enrolled_instructor,\r\n-\t\t\t\t'total_instructors'       => $total_instructors,\r\n-\t\t\t\t'total_students'          => $total_students,\r\n-\t\t\t);\r\n-\t\t\t$response->data           = $data;\r\n-\t\t\t$response->status         = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Process data use for chart js\r\n-\t *\r\n-\t * @param      array  $filter      The filter in get_statistics_filter\r\n-\t * @param      array  $input_data  The input data ( data from DB )\r\n-\t *\r\n-\t * @return     array  $chart_data  Data use for chart js\r\n-\t *\u002F\r\n-\tpublic function process_chart_data( array $filter, array $input_data ) {\r\n-\t\t$chart_data = array();\r\n-\t\t$data       = array();\r\n-\t\tif ( $filter['filter_type'] == 'date' ) {\r\n-\t\t\t$data                  = $this->process_date_data( $input_data );\r\n-\t\t\t$chart_data['x_label'] = __( 'Hour', 'learnpress' );\r\n-\t\t} elseif ( $filter['filter_type'] == 'previous_days' ) {\r\n-\t\t\t$data                  = $this->process_previous_days_data( $filter['time'], $input_data );\r\n-\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\r\n-\t\t} elseif ( $filter['filter_type'] == 'month' ) {\r\n-\t\t\t$data                  = $this->process_month_data( $filter, $input_data );\r\n-\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\r\n-\t\t} elseif ( $filter['filter_type'] == 'previous_months' ) {\r\n-\t\t\t$data                  = $this->process_previous_months_data( $filter['time'], $input_data );\r\n-\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\r\n-\t\t} elseif ( $filter['filter_type'] == 'year' ) {\r\n-\t\t\t$data                  = $this->process_year_data( $input_data );\r\n-\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\r\n-\t\t} elseif ( $filter['filter_type'] == 'custom' ) {\r\n-\t\t\t$dates = $filter['time'];\r\n-\t\t\t$dates = explode( '+', $dates );\r\n-\t\t\tsort( $dates );\r\n-\t\t\t$diff = date_diff( date_create( $dates[0] ), date_create( $dates[1] ), true );\r\n-\t\t\t$y    = $diff->y;\r\n-\t\t\t$m    = $diff->m;\r\n-\t\t\t$d    = $diff->d;\r\n-\t\t\tif ( $y \u003C 1 ) {\r\n-\t\t\t\tif ( $m \u003C= 1 ) {\r\n-\t\t\t\t\tif ( $d \u003C 1 ) {\r\n-\t\t\t\t\t\t$data                  = $this->process_date_data( $input_data );\r\n-\t\t\t\t\t\t$chart_data['x_label'] = __( 'Hour', 'learnpress' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$data                  = $this->process_previous_days_data( $d, $input_data, $dates[1] );\r\n-\t\t\t\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$data                  = $this->process_previous_months_data( $m, $input_data, $dates[1] );\r\n-\t\t\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\r\n-\t\t\t\t\t\u002F\u002F $filter = $this->chart_filter_previous_months_group_by( $filter );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $y \u003C 2 ) {\r\n-\t\t\t\t$months                = $y * 12 + $m;\r\n-\t\t\t\t$data                  = $this->process_previous_months_data( $months, $input_data, $dates[1] );\r\n-\t\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\r\n-\t\t\t} elseif ( $y \u003C 5 ) {\r\n-\t\t\t\t\u002F\u002F TODO\r\n-\t\t\t\t$data                  = $this->process_quarters_data( $dates, $input_data );\r\n-\t\t\t\t$chart_data['x_label'] = __( 'Quarters', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$data                  = $this->process_years_data( $y, $input_data, $dates[1] );\r\n-\t\t\t\t$chart_data['x_label'] = __( 'Years', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tforeach ( $data as $row ) {\r\n-\t\t\t$chart_data['labels'][] = $row->x_data_label;\r\n-\t\t\t$chart_data['data'][]   = (float) $row->x_data;\r\n-\t\t}\r\n-\t\t\u002F\u002F $chart_data['line_label'] = __( 'Completed orders', 'learnpress' );\r\n-\r\n-\t\treturn $chart_data;\r\n-\t}\r\n-\t\u002F**\r\n-\t * Gets the statistics filter.\r\n-\t *\r\n-\t * @param      http request  $params  The parameters\r\n-\t *\r\n-\t * @return     array   The statistics filter. use for process data\r\n-\t *\u002F\r\n-\tpublic function get_statistics_filter( $params ) {\r\n-\t\t$filter     = [];\r\n-\t\t$filtertype = $params['filtertype'] ?? 'today';\r\n-\t\tswitch ( $filtertype ) {\r\n-\t\t\tcase 'today':\r\n-\t\t\t\t$filter['filter_type'] = 'date';\r\n-\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'yesterday':\r\n-\t\t\t\t$filter['filter_type'] = 'date';\r\n-\t\t\t\t$filter['time']        = date( 'Y-m-d', strtotime( current_time( 'Y-m-d' ) . '-1 days' ) );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'last7days':\r\n-\t\t\t\t$filter['filter_type'] = 'previous_days';\r\n-\t\t\t\t$filter['time']        = 6;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'last30days':\r\n-\t\t\t\t$filter['filter_type'] = 'previous_days';\r\n-\t\t\t\t$filter['time']        = 30;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'thismonth':\r\n-\t\t\t\t$filter['filter_type'] = 'month';\r\n-\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'last12months':\r\n-\t\t\t\t$filter['filter_type'] = 'previous_months';\r\n-\t\t\t\t$filter['time']        = 11;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'thisyear':\r\n-\t\t\t\t$filter['filter_type'] = 'year';\r\n-\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'custom':\r\n-\t\t\t\t$filter['filter_type'] = 'custom';\r\n-\t\t\t\t$filter['time']        = $params['date'];\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\t\treturn $filter;\r\n-\t}\r\n-\t\u002F**\r\n-\t * process data of a date ( in 24h )\r\n-\t *\r\n-\t * @param      array  $input_data  The input data\r\n-\t *\r\n-\t * @return     array  ( description_of_the_return_value )\r\n-\t *\u002F\r\n-\tpublic function process_date_data( array $input_data ) {\r\n-\t\t$data = array();\r\n-\t\tfor ( $i = 0; $i \u003C 24;$i++ ) {\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $i;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $i ]        = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\t\u002F**\r\n-\t * process data of days since the last date, if dont have last date, last date is current date\r\n-\t *\r\n-\t * @param      int    $days        The days\r\n-\t * @param      array  $input_data  The input data\r\n-\t * @param      bool   $last_date   The last date\r\n-\t *\r\n-\t * @return     array  ( description_of_the_return_value )\r\n-\t *\u002F\r\n-\tpublic function process_previous_days_data( int $days, array $input_data, $last_date = false ) {\r\n-\t\t$data = array();\r\n-\t\tfor ( $i = $days; $i >= 0; $i-- ) {\r\n-\t\t\t$date              = date( 'Y-m-d', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'days' ) );\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $date;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $date ]     = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\t\u002F**\r\n-\t * process data of a month\r\n-\t *\r\n-\t * @param      array  $filter      The filter\r\n-\t * @param      array  $input_data  The input data\r\n-\t *\r\n-\t * @return     array  ( description_of_the_return_value )\r\n-\t *\u002F\r\n-\tpublic function process_month_data( array $filter, array $input_data ) {\r\n-\t\t$data    = array();\r\n-\t\t$max_day = cal_days_in_month( 0, date( 'm', strtotime( $filter['time'] ) ), date( 'Y', strtotime( $filter['time'] ) ) );\r\n-\t\tfor ( $i = 1; $i \u003C= $max_day; $i++ ) {\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $i;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $i ]        = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\t\u002F**\r\n-\t * process data of months since the last date, if dont have last date, last date is current date\r\n-\t *\r\n-\t * @param      int    $months      The months\r\n-\t * @param      array  $input_data  The input data\r\n-\t * @param      bool   $last_date   The last date\r\n-\t *\r\n-\t * @return     array  ( description_of_the_return_value )\r\n-\t *\u002F\r\n-\tpublic function process_previous_months_data( int $months, array $input_data, $last_date = false ) {\r\n-\t\t$data = array();\r\n-\t\tfor ( $i = $months; $i >= 0; $i-- ) {\r\n-\t\t\t$date              = date( 'm-Y', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'months' ) );\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $date;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $date ]     = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\t\u002F**\r\n-\t *\r\n-\t * @param      array  $dates       The dates\r\n-\t * @param      array  $input_data  The input data\r\n-\t *\r\n-\t * @return     array  process data for date range 2-5 years\r\n-\t *\u002F\r\n-\tpublic function process_quarters_data( array $dates, array $input_data ) {\r\n-\t\t$data       = array();\r\n-\t\t$start_time = strtotime( $dates[0] );\r\n-\t\t$end_time   = strtotime( $dates[1] );\r\n-\t\tfor ( $i = date( 'Y', $start_time ); $i \u003C= date( 'Y', $end_time ); $i++ ) {\r\n-\t\t\tif ( $i == date( 'Y', $start_time ) ) {\r\n-\t\t\t\t$quarter = ceil( date( 'm', $start_time ) \u002F 3 );\r\n-\t\t\t\tfor ( $j = $quarter;$j \u003C= 4;$j++ ) {\r\n-\t\t\t\t\t$row               = new stdClass();\r\n-\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\r\n-\t\t\t\t\t$row->x_data       = 0;\r\n-\t\t\t\t\t$data[]            = $row;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $i == date( 'Y', $start_time ) ) {\r\n-\t\t\t\t$quarter = ceil( date( 'm', $end_time ) \u002F 3 );\r\n-\t\t\t\tfor ( $j = 1;$j \u003C= $quarter;$j++ ) {\r\n-\t\t\t\t\t$row               = new stdClass();\r\n-\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\r\n-\t\t\t\t\t$row->x_data       = 0;\r\n-\t\t\t\t\t$data[]            = $row;\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tfor ( $j = 1; $j \u003C= 4;$j++ ) {\r\n-\t\t\t\t\t$row               = new stdClass();\r\n-\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\r\n-\t\t\t\t\t$row->x_data       = 0;\r\n-\t\t\t\t\t$data[]            = $row;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\t\u002F**\r\n-\t * process data of a year\r\n-\t *\r\n-\t * @param      array  $input_data  data from DB\r\n-\t *\r\n-\t * @return     array  chart data\r\n-\t *\u002F\r\n-\tpublic function process_year_data( array $input_data ) {\r\n-\t\t$data = array();\r\n-\t\tfor ( $i = 1; $i \u003C= 12; $i++ ) {\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $i;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $i ]        = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * process data of years( when date range > 5 years )\r\n-\t *\r\n-\t * @param      int    $years       The years\r\n-\t * @param      array  $input_data  The input data\r\n-\t * @param      bool   $last_date   The last date\r\n-\t *\r\n-\t * @return     array  ( description_of_the_return_value )\r\n-\t *\u002F\r\n-\tpublic function process_years_data( int $years, array $input_data, $last_date = false ) {\r\n-\t\t$data = array();\r\n-\t\tfor ( $i = $years; $i >= 0; $i-- ) {\r\n-\t\t\t$year              = date( 'Y', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'years' ) );\r\n-\t\t\t$row               = new stdClass();\r\n-\t\t\t$row->x_data_label = $year;\r\n-\t\t\t$row->x_data       = 0;\r\n-\t\t\t$data[ $year ]     = $row;\r\n-\t\t}\r\n-\t\tif ( ! empty( $input_data ) ) {\r\n-\t\t\tforeach ( $input_data as $row ) {\r\n-\t\t\t\t$data[ $row->x_data_label ] = $row;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\tpublic function permission_check( $request ) {\r\n-\t\treturn apply_filters( 'learnpress\u002Fadmin-statistics\u002Fpermission', current_user_can( 'administrator' ) );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_REST_Admin_Statistics_Controller\n+ *\n+ * @since 4.2.5.5\n+ *\u002F\n+class LP_REST_Admin_Statistics_Controller extends LP_Abstract_REST_Controller {\n+\tprotected static $_instance = null;\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'statistics';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'overviews-statistics' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_overviews_statistics' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'order-statistics'     => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_order_statistics' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'course-statistics'    => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_courses_statistics' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'user-statistics'      => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_users_statistics' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'permission_check' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Gets the overviews statistics.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response.\n+\t *\u002F\n+\tpublic function get_overviews_statistics( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params = $request->get_params();\n+\t\t\t$params = LP_Helper::sanitize_params_submitted( $params );\n+\t\t\t$filter = $this->get_statistics_filter( $params );\n+\n+\t\t\t$lp_statistic_db                    = LP_Statistics_DB::getInstance();\n+\t\t\t$net_sales                          = $lp_statistic_db->get_net_sales_data( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_courses                      = $lp_statistic_db->get_total_course_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_orders                       = $lp_statistic_db->get_total_order_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_instructors                  = $lp_statistic_db->get_total_instructor_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_students                     = $lp_statistic_db->get_total_student_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$chart_data                         = $this->process_chart_data( $filter, $net_sales );\n+\t\t\t$top_courses                        = $lp_statistic_db->get_top_sold_courses( $filter['filter_type'], $filter['time'] );\n+\t\t\t$top_categories                     = $lp_statistic_db->get_top_sold_categories( $filter['filter_type'], $filter['time'] );\n+\t\t\t$chart_data['line_label']           = __( 'Net sales', 'learnpress' );\n+\t\t\t$total_sales                        = html_entity_decode( learn_press_format_price( array_sum( $chart_data['data'] ) ) );\n+\n+\t\t\t$data             = array(\n+\t\t\t\t'total_sales'       => $total_sales,\n+\t\t\t\t'total_orders'      => $total_orders,\n+\t\t\t\t'total_instructors' => $total_instructors,\n+\t\t\t\t'total_courses'     => $total_courses,\n+\t\t\t\t'total_students'    => $total_students,\n+\t\t\t\t'chart_data'        => $chart_data,\n+\t\t\t\t'top_courses'       => $top_courses,\n+\t\t\t\t'top_categories'    => $top_categories,\n+\t\t\t);\n+\t\t\t$response->data   = $data;\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\t$response->status  = 'error';\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function get_order_statistics( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params                   = $request->get_params();\n+\t\t\t$params                   = LP_Helper::sanitize_params_submitted( $params );\n+\t\t\t$filter                   = $this->get_statistics_filter( $params );\n+\t\t\t$lp_statistic_db          = LP_Statistics_DB::getInstance();\n+\t\t\t$statistics               = $lp_statistic_db->get_order_statics( $filter['filter_type'], $filter['time'] );\n+\t\t\t$completed_orders         = $lp_statistic_db->get_completed_order_data( $filter['filter_type'], $filter['time'] );\n+\t\t\t$chart_data               = $this->process_chart_data( $filter, $completed_orders );\n+\t\t\t$chart_data['line_label'] = __( 'Completed orders', 'learnpress' );\n+\t\t\t$data                     = array(\n+\t\t\t\t'statistics' => $statistics,\n+\t\t\t\t'chart_data' => $chart_data,\n+\t\t\t);\n+\t\t\t$response->data           = $data;\n+\t\t\t$response->status         = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\t$response->status  = 'error';\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\tpublic function get_courses_statistics( $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$params                   = $request->get_params();\n+\t\t\t$params                   = LP_Helper::sanitize_params_submitted( $params );\n+\t\t\t$filter                   = $this->get_statistics_filter( $params );\n+\t\t\t$lp_statistic_db          = LP_Statistics_DB::getInstance();\n+\t\t\t$published_course         = $lp_statistic_db->get_published_course_data( $filter['filter_type'], $filter['time'] );\n+\t\t\t$courses                  = $lp_statistic_db->get_course_count_by_statuses( $filter['filter_type'], $filter['time'] );\n+\t\t\t$items                    = $lp_statistic_db->get_course_items_count( $filter['filter_type'], $filter['time'] );\n+\t\t\t$chart_data               = $this->process_chart_data( $filter, $published_course );\n+\t\t\t$chart_data['line_label'] = __( 'Published Courses', 'learnpress' );\n+\t\t\t$data                     = array(\n+\t\t\t\t'courses'    => $courses,\n+\t\t\t\t'items'      => $items,\n+\t\t\t\t'chart_data' => $chart_data,\n+\t\t\t);\n+\t\t\t$response->data           = $data;\n+\t\t\t$response->status         = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\t$response->status  = 'error';\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * @param $request\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function get_users_statistics( $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$params                  = $request->get_params();\n+\t\t\t$params                  = LP_Helper::sanitize_params_submitted( $params );\n+\t\t\t$filter                  = $this->get_statistics_filter( $params );\n+\t\t\t$lp_statistic_db         = LP_Statistics_DB::getInstance();\n+\t\t\t$user_registers          = $lp_statistic_db->get_user_registered_data( $filter['filter_type'], $filter['time'] );\n+\t\t\t$user_course_statused    = $lp_statistic_db->get_users_by_user_item_graduation_statuses( $filter['filter_type'], $filter['time'] );\n+\t\t\t$user_not_start_course   = $lp_statistic_db->get_users_not_started_any_course( $filter['filter_type'], $filter['time'] );\n+\t\t\t$top_enrolled_courses    = $lp_statistic_db->get_top_enrolled_courses( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_instructors       = $lp_statistic_db->get_total_instructor_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$total_students          = $lp_statistic_db->get_total_student_created( $filter['filter_type'], $filter['time'] );\n+\t\t\t$chart_data              = $this->process_chart_data( $filter, $user_registers );\n+\t\t\t$top_enrolled_instructor = array();\n+\t\t\tif ( ! empty( $top_enrolled_courses ) ) {\n+\t\t\t\tforeach ( $top_enrolled_courses as $key => $course ) {\n+\t\t\t\t\tif ( ! array_key_exists( $course->instructor_id, $top_enrolled_instructor ) ) {\n+\t\t\t\t\t\t$top_enrolled_instructor[ $course->instructor_id ] = array(\n+\t\t\t\t\t\t\t'name'     => $course->instructor_name,\n+\t\t\t\t\t\t\t'students' => (int) $course->enrolled_user,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$top_enrolled_instructor[ $course->instructor_id ]['students'] += (int) $course->enrolled_user;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$chart_data['line_label'] = __( 'User registed', 'learnpress' );\n+\t\t\t$data                     = array(\n+\t\t\t\t'chart_data'              => $chart_data,\n+\t\t\t\t'user_course_statused'    => $user_course_statused,\n+\t\t\t\t'user_not_start_course'   => $user_not_start_course,\n+\t\t\t\t'top_enrolled_courses'    => $top_enrolled_courses,\n+\t\t\t\t'top_enrolled_instructor' => $top_enrolled_instructor,\n+\t\t\t\t'total_instructors'       => $total_instructors,\n+\t\t\t\t'total_students'          => $total_students,\n+\t\t\t);\n+\t\t\t$response->data           = $data;\n+\t\t\t$response->status         = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t\t$response->status  = 'error';\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\t\u002F**\n+\t * Process data use for chart js\n+\t *\n+\t * @param      array  $filter      The filter in get_statistics_filter\n+\t * @param      array  $input_data  The input data ( data from DB )\n+\t *\n+\t * @return     array  $chart_data  Data use for chart js\n+\t *\u002F\n+\tpublic function process_chart_data( array $filter, array $input_data ) {\n+\t\t$chart_data = array();\n+\t\t$data       = array();\n+\t\tif ( $filter['filter_type'] == 'date' ) {\n+\t\t\t$data                  = $this->process_date_data( $input_data );\n+\t\t\t$chart_data['x_label'] = __( 'Hour', 'learnpress' );\n+\t\t} elseif ( $filter['filter_type'] == 'previous_days' ) {\n+\t\t\t$data                  = $this->process_previous_days_data( $filter['time'], $input_data );\n+\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\n+\t\t} elseif ( $filter['filter_type'] == 'month' ) {\n+\t\t\t$data                  = $this->process_month_data( $filter, $input_data );\n+\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\n+\t\t} elseif ( $filter['filter_type'] == 'previous_months' ) {\n+\t\t\t$data                  = $this->process_previous_months_data( $filter['time'], $input_data );\n+\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\n+\t\t} elseif ( $filter['filter_type'] == 'year' ) {\n+\t\t\t$data                  = $this->process_year_data( $input_data );\n+\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\n+\t\t} elseif ( $filter['filter_type'] == 'custom' ) {\n+\t\t\t$dates = $filter['time'];\n+\t\t\t$dates = explode( '+', $dates );\n+\t\t\tsort( $dates );\n+\t\t\t$diff = date_diff( date_create( $dates[0] ), date_create( $dates[1] ), true );\n+\t\t\t$y    = $diff->y;\n+\t\t\t$m    = $diff->m;\n+\t\t\t$d    = $diff->d;\n+\t\t\tif ( $y \u003C 1 ) {\n+\t\t\t\tif ( $m \u003C= 1 ) {\n+\t\t\t\t\tif ( $d \u003C 1 ) {\n+\t\t\t\t\t\t$data                  = $this->process_date_data( $input_data );\n+\t\t\t\t\t\t$chart_data['x_label'] = __( 'Hour', 'learnpress' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$data                  = $this->process_previous_days_data( $d, $input_data, $dates[1] );\n+\t\t\t\t\t\t$chart_data['x_label'] = __( 'Dates', 'learnpress' );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t$data                  = $this->process_previous_months_data( $m, $input_data, $dates[1] );\n+\t\t\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\n+\t\t\t\t\t\u002F\u002F $filter = $this->chart_filter_previous_months_group_by( $filter );\n+\t\t\t\t}\n+\t\t\t} elseif ( $y \u003C 2 ) {\n+\t\t\t\t$months                = $y * 12 + $m;\n+\t\t\t\t$data                  = $this->process_previous_months_data( $months, $input_data, $dates[1] );\n+\t\t\t\t$chart_data['x_label'] = __( 'Months', 'learnpress' );\n+\t\t\t} elseif ( $y \u003C 5 ) {\n+\t\t\t\t\u002F\u002F TODO\n+\t\t\t\t$data                  = $this->process_quarters_data( $dates, $input_data );\n+\t\t\t\t$chart_data['x_label'] = __( 'Quarters', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$data                  = $this->process_years_data( $y, $input_data, $dates[1] );\n+\t\t\t\t$chart_data['x_label'] = __( 'Years', 'learnpress' );\n+\t\t\t}\n+\t\t}\n+\t\tforeach ( $data as $row ) {\n+\t\t\t$chart_data['labels'][] = $row->x_data_label;\n+\t\t\t$chart_data['data'][]   = (float) $row->x_data;\n+\t\t}\n+\t\t\u002F\u002F $chart_data['line_label'] = __( 'Completed orders', 'learnpress' );\n+\n+\t\treturn $chart_data;\n+\t}\n+\t\u002F**\n+\t * Gets the statistics filter.\n+\t *\n+\t * @param      http request  $params  The parameters\n+\t *\n+\t * @return     array   The statistics filter. use for process data\n+\t *\u002F\n+\tpublic function get_statistics_filter( $params ) {\n+\t\t$filter     = [];\n+\t\t$filtertype = $params['filtertype'] ?? 'today';\n+\t\tswitch ( $filtertype ) {\n+\t\t\tcase 'today':\n+\t\t\t\t$filter['filter_type'] = 'date';\n+\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'yesterday':\n+\t\t\t\t$filter['filter_type'] = 'date';\n+\t\t\t\t$filter['time']        = date( 'Y-m-d', strtotime( current_time( 'Y-m-d' ) . '-1 days' ) );\n+\t\t\t\tbreak;\n+\t\t\tcase 'last7days':\n+\t\t\t\t$filter['filter_type'] = 'previous_days';\n+\t\t\t\t$filter['time']        = 6;\n+\t\t\t\tbreak;\n+\t\t\tcase 'last30days':\n+\t\t\t\t$filter['filter_type'] = 'previous_days';\n+\t\t\t\t$filter['time']        = 30;\n+\t\t\t\tbreak;\n+\t\t\tcase 'thismonth':\n+\t\t\t\t$filter['filter_type'] = 'month';\n+\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'last12months':\n+\t\t\t\t$filter['filter_type'] = 'previous_months';\n+\t\t\t\t$filter['time']        = 11;\n+\t\t\t\tbreak;\n+\t\t\tcase 'thisyear':\n+\t\t\t\t$filter['filter_type'] = 'year';\n+\t\t\t\t$filter['time']        = current_time( 'Y-m-d' );\n+\t\t\t\tbreak;\n+\t\t\tcase 'custom':\n+\t\t\t\t$filter['filter_type'] = 'custom';\n+\t\t\t\t$filter['time']        = $params['date'];\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t}\n+\t\treturn $filter;\n+\t}\n+\t\u002F**\n+\t * process data of a date ( in 24h )\n+\t *\n+\t * @param      array  $input_data  The input data\n+\t *\n+\t * @return     array  ( description_of_the_return_value )\n+\t *\u002F\n+\tpublic function process_date_data( array $input_data ) {\n+\t\t$data = array();\n+\t\tfor ( $i = 0; $i \u003C 24;$i++ ) {\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $i;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $i ]        = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\t\u002F**\n+\t * process data of days since the last date, if dont have last date, last date is current date\n+\t *\n+\t * @param      int    $days        The days\n+\t * @param      array  $input_data  The input data\n+\t * @param      bool   $last_date   The last date\n+\t *\n+\t * @return     array  ( description_of_the_return_value )\n+\t *\u002F\n+\tpublic function process_previous_days_data( int $days, array $input_data, $last_date = false ) {\n+\t\t$data = array();\n+\t\tfor ( $i = $days; $i >= 0; $i-- ) {\n+\t\t\t$date              = date( 'Y-m-d', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'days' ) );\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $date;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $date ]     = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\t\u002F**\n+\t * process data of a month\n+\t *\n+\t * @param      array  $filter      The filter\n+\t * @param      array  $input_data  The input data\n+\t *\n+\t * @return     array  ( description_of_the_return_value )\n+\t *\u002F\n+\tpublic function process_month_data( array $filter, array $input_data ) {\n+\t\t$data    = array();\n+\t\t$max_day = cal_days_in_month( 0, date( 'm', strtotime( $filter['time'] ) ), date( 'Y', strtotime( $filter['time'] ) ) );\n+\t\tfor ( $i = 1; $i \u003C= $max_day; $i++ ) {\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $i;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $i ]        = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\t\u002F**\n+\t * process data of months since the last date, if dont have last date, last date is current date\n+\t *\n+\t * @param      int    $months      The months\n+\t * @param      array  $input_data  The input data\n+\t * @param      bool   $last_date   The last date\n+\t *\n+\t * @return     array  ( description_of_the_return_value )\n+\t *\u002F\n+\tpublic function process_previous_months_data( int $months, array $input_data, $last_date = false ) {\n+\t\t$data = array();\n+\t\tfor ( $i = $months; $i >= 0; $i-- ) {\n+\t\t\t$date              = date( 'm-Y', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'months' ) );\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $date;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $date ]     = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\t\u002F**\n+\t *\n+\t * @param      array  $dates       The dates\n+\t * @param      array  $input_data  The input data\n+\t *\n+\t * @return     array  process data for date range 2-5 years\n+\t *\u002F\n+\tpublic function process_quarters_data( array $dates, array $input_data ) {\n+\t\t$data       = array();\n+\t\t$start_time = strtotime( $dates[0] );\n+\t\t$end_time   = strtotime( $dates[1] );\n+\t\tfor ( $i = date( 'Y', $start_time ); $i \u003C= date( 'Y', $end_time ); $i++ ) {\n+\t\t\tif ( $i == date( 'Y', $start_time ) ) {\n+\t\t\t\t$quarter = ceil( date( 'm', $start_time ) \u002F 3 );\n+\t\t\t\tfor ( $j = $quarter;$j \u003C= 4;$j++ ) {\n+\t\t\t\t\t$row               = new stdClass();\n+\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\n+\t\t\t\t\t$row->x_data       = 0;\n+\t\t\t\t\t$data[]            = $row;\n+\t\t\t\t}\n+\t\t\t} elseif ( $i == date( 'Y', $start_time ) ) {\n+\t\t\t\t$quarter = ceil( date( 'm', $end_time ) \u002F 3 );\n+\t\t\t\tfor ( $j = 1;$j \u003C= $quarter;$j++ ) {\n+\t\t\t\t\t$row               = new stdClass();\n+\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\n+\t\t\t\t\t$row->x_data       = 0;\n+\t\t\t\t\t$data[]            = $row;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tfor ( $j = 1; $j \u003C= 4;$j++ ) {\n+\t\t\t\t\t$row               = new stdClass();\n+\t\t\t\t\t$row->x_data_label = 'q' . $j . '-' . $i;\n+\t\t\t\t\t$row->x_data       = 0;\n+\t\t\t\t\t$data[]            = $row;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\t\u002F**\n+\t * process data of a year\n+\t *\n+\t * @param      array  $input_data  data from DB\n+\t *\n+\t * @return     array  chart data\n+\t *\u002F\n+\tpublic function process_year_data( array $input_data ) {\n+\t\t$data = array();\n+\t\tfor ( $i = 1; $i \u003C= 12; $i++ ) {\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $i;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $i ]        = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * process data of years( when date range > 5 years )\n+\t *\n+\t * @param      int    $years       The years\n+\t * @param      array  $input_data  The input data\n+\t * @param      bool   $last_date   The last date\n+\t *\n+\t * @return     array  ( description_of_the_return_value )\n+\t *\u002F\n+\tpublic function process_years_data( int $years, array $input_data, $last_date = false ) {\n+\t\t$data = array();\n+\t\tfor ( $i = $years; $i >= 0; $i-- ) {\n+\t\t\t$year              = date( 'Y', strtotime( ( $last_date ? $last_date : '' ) . -$i . 'years' ) );\n+\t\t\t$row               = new stdClass();\n+\t\t\t$row->x_data_label = $year;\n+\t\t\t$row->x_data       = 0;\n+\t\t\t$data[ $year ]     = $row;\n+\t\t}\n+\t\tif ( ! empty( $input_data ) ) {\n+\t\t\tforeach ( $input_data as $row ) {\n+\t\t\t\t$data[ $row->x_data_label ] = $row;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\n+\tpublic function permission_check( $request ) {\n+\t\treturn apply_filters( 'learnpress\u002Fadmin-statistics\u002Fpermission', current_user_can( 'administrator' ) );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-tools-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-tools-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-tools-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-tools-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,686 +1,686 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Admin_Tools_Controller\r\n- *\r\n- * @since 4.0.3\r\n- * @author tungnx\r\n- * @version 1.0.3\r\n- *\u002F\r\n-class LP_REST_Admin_Tools_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin';\r\n-\t\t$this->rest_base = 'tools';\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register rest routes.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'create-indexs'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'create_indexes' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'list-tables-indexs'   => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_list_tables_indexs' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'clean-tables'         => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'clean_tables' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'admin-notices'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'admin_notices' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'search-course'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'search_courses' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'search-user'          => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'search_users' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'search-roles'         => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'search_roles' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'assign-user-course'   => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'assign_courses_to_users' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'unassign-user-course' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'unassign_user_from_course' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create create_indexes.\r\n-\t *\r\n-\t * @param WP_REST_Request $request .\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function create_indexes( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$tables_valid = [\r\n-\t\t\t\t$lp_db->tb_lp_user_items,\r\n-\t\t\t\t$lp_db->tb_lp_user_itemmeta,\r\n-\t\t\t\t$lp_db->tb_lp_quiz_questions,\r\n-\t\t\t\t$lp_db->tb_lp_question_answers,\r\n-\t\t\t\t$lp_db->tb_lp_question_answermeta,\r\n-\t\t\t\t$lp_db->tb_lp_order_items,\r\n-\t\t\t\t$lp_db->tb_lp_order_itemmeta,\r\n-\t\t\t\t$lp_db->tb_lp_sections,\r\n-\t\t\t\t$lp_db->tb_lp_section_items,\r\n-\t\t\t];\r\n-\t\t\t$table        = $request->get_param( 'table' );\r\n-\t\t\t$tables       = $request->get_param( 'tables' );\r\n-\r\n-\t\t\t$lp_db->wpdb->query( 'SET autocommit = 0' );\r\n-\r\n-\t\t\tif ( empty( $tables ) ) {\r\n-\t\t\t\tthrow new Exception( 'Param invalid!' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$table_keys = array_keys( $tables );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! array_key_exists( $table, $tables )\r\n-\t\t\t\t|| ! in_array( $table, $tables_valid ) ) {\r\n-\t\t\t\tthrow new Exception( 'Table invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Create Indexs for a table.\r\n-\t\t\tif ( $table === $lp_db->tb_lp_question_answermeta ) {\r\n-\t\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_question_answermeta );\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\r\n-\t\t\t\t\tADD INDEX question_answer_meta (`learnpress_question_answer_id`, `meta_key`(150))\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t} elseif ( $table === $lp_db->tb_lp_section_items ) {\r\n-\t\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_section_items );\r\n-\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_section_items}\r\n-\t\t\t\t\tADD INDEX section_item (`section_id`, `item_id`)\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t} else {\r\n-\t\t\t\t$lp_db->add_indexs_table( $table, $tables[ $table ] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set next table key.\r\n-\t\t\t$index_key = array_search( $table, $table_keys );\r\n-\t\t\t++ $index_key;\r\n-\r\n-\t\t\tif ( ! array_key_exists( $index_key, $table_keys ) ) {\r\n-\t\t\t\t$response->status        = 'finished';\r\n-\t\t\t\t$response->data->percent = 100;\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->data->table   = $table_keys[ $index_key ];\r\n-\t\t\t\t$response->data->percent = 100;\r\n-\t\t\t\t$response->status        = 'success';\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\tpublic function get_list_tables_indexs( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\t$tables_indexes = array(\r\n-\t\t\t$lp_db->tb_lp_user_items          => array(\r\n-\t\t\t\t'user_id',\r\n-\t\t\t\t'item_id',\r\n-\t\t\t\t'item_type',\r\n-\t\t\t\t'status',\r\n-\t\t\t\t'ref_type',\r\n-\t\t\t\t'ref_id',\r\n-\t\t\t\t'parent_id',\r\n-\t\t\t),\r\n-\t\t\t$lp_db->tb_lp_user_itemmeta       => array( 'learnpress_user_item_id', 'meta_key', 'meta_value' ),\r\n-\t\t\t$lp_db->tb_lp_quiz_questions      => array( 'quiz_id', 'question_id' ),\r\n-\t\t\t$lp_db->tb_lp_question_answers    => array( 'question_id' ),\r\n-\t\t\t$lp_db->tb_lp_question_answermeta => '',\r\n-\t\t\t$lp_db->tb_lp_order_items         => array( 'order_id', 'item_id', 'item_type' ),\r\n-\t\t\t$lp_db->tb_lp_order_itemmeta      => array( 'learnpress_order_item_id', 'meta_key', 'meta_value' ),\r\n-\t\t\t$lp_db->tb_lp_sections            => array( 'section_course_id' ),\r\n-\t\t\t$lp_db->tb_lp_section_items       => '',\r\n-\t\t);\r\n-\r\n-\t\t$response->data->tables = $tables_indexes;\r\n-\t\t$response->data->table  = $lp_db->tb_lp_user_items;\r\n-\t\t$response->status       = 'success';\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\tpublic function clean_tables( WP_REST_Request $request ) {\r\n-\t\t$response            = new LP_REST_Response();\r\n-\t\t$lp_db_sessions      = LP_Sessions_DB::getInstance();\r\n-\t\t$tables              = $request->get_param( 'tables' );\r\n-\t\t$item_before_process = $request->get_param( 'itemtotal' );\r\n-\t\tif ( empty( $tables ) ) {\r\n-\t\t\tthrow new Exception( 'Param invalid!' );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $item_before_process ) ) {\r\n-\t\t\t$item_before_process = 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $item_before_process == 0 ) {\r\n-\t\t\t$response->data->percent = 100;\r\n-\t\t\t$response->status        = 'finished';\r\n-\t\t\twp_send_json( $response );\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Delete result in table select\r\n-\t\t\tif ( $tables == 'learnpress_sessions' ) {\r\n-\t\t\t\t$lp_db_sessions->delete_rows();\r\n-\t\t\t\t\u002F\u002F check the number of lines remaining after each query\r\n-\t\t\t\t$item_after_process        = $lp_db_sessions->count_row_db_sessions();\r\n-\t\t\t\t$response->data->processed = $item_before_process - $item_after_process;\r\n-\t\t\t\t$percent                   = ( ( $item_before_process - $item_after_process ) \u002F $item_before_process ) * 100;\r\n-\t\t\t\t$response->data->percent   = number_format_i18n( $percent, '2' );\r\n-\t\t\t}\r\n-\t\t\tif ( $response->data->percent == 100 ) {\r\n-\t\t\t\t$response->status = 'finished';\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->status = 'success';\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show admin notices.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.1.7.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function admin_notices( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\t$content  = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params                = $request->get_params();\r\n-\t\t\t$admin_notices_dismiss = get_option( 'lp_admin_notices_dismiss', [] );\r\n-\t\t\t$lp_beta_version_info  = LP_Admin_Notice::check_lp_beta_version();\r\n-\r\n-\t\t\tif ( isset( $params['dismiss'] ) ) {\r\n-\t\t\t\tif ( $lp_beta_version_info ) {\r\n-\t\t\t\t\t\u002F\u002F Store version of LP beta to session.\r\n-\t\t\t\t\tlearn_press_setcookie( 'lp_beta_version', $lp_beta_version_info['version'] ?? 0 );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$admin_notices_dismiss[ $params['dismiss'] ] = $params['dismiss'];\r\n-\t\t\t\tupdate_option( 'lp_admin_notices_dismiss', $admin_notices_dismiss );\r\n-\t\t\t\t$response->message = __( 'Dismissed!', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$show_notice_lp_beta_version = false;\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Check if LP beta version is not dismissed or dismissed version lower than current version, will bet to show notice.\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tif ( $lp_beta_version_info && ! isset( $_GET['tab'] ) &&\r\n-\t\t\t\t\t( ! isset( $_COOKIE['lp_beta_version'] ) || version_compare( $_COOKIE['lp_beta_version'], $lp_beta_version_info['version'], '\u003C' ) ) ) {\r\n-\t\t\t\t\t$show_notice_lp_beta_version = true;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$rules = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fadmin-notices',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t\u002F\u002F Check wp_remote call success.\r\n-\t\t\t\t\t\t'check_wp_remote'            => [\r\n-\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fwp-remote.php',\r\n-\t\t\t\t\t\t\t'check'    => LP_Admin_Notice::check_wp_remote(),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Check name plugin base.\r\n-\t\t\t\t\t\t'check_plugin_base'          => [\r\n-\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fplugin-base.php',\r\n-\t\t\t\t\t\t\t'check'    => LP_Admin_Notice::check_plugin_base(),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show beta version of LP.\r\n-\t\t\t\t\t\t'lp-beta-version'            => [\r\n-\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Fbeta-version.php',\r\n-\t\t\t\t\t\t\t'check'         => $show_notice_lp_beta_version,\r\n-\t\t\t\t\t\t\t'info'          => $lp_beta_version_info,\r\n-\t\t\t\t\t\t\t'allow_dismiss' => 1,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show message needs upgrades database compatible with LP version current.\r\n-\t\t\t\t\t\t'lp-upgrade-db'              => [\r\n-\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fupgrade-db.php',\r\n-\t\t\t\t\t\t\t'check'    => LP_Updater::instance()->check_lp_db_need_upgrade(),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show message wrong permalink structure.\r\n-\t\t\t\t\t\t'lp-permalink'               => [\r\n-\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fpermalink-wrong.php',\r\n-\t\t\t\t\t\t\t'check'    => ! get_option( 'permalink_structure' ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show notice setup wizard.\r\n-\t\t\t\t\t\t'lp-setup-wizard'            => [\r\n-\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Fsetup-wizard.php',\r\n-\t\t\t\t\t\t\t'check'         => ! get_option( 'learn_press_setup_wizard_completed', false )\r\n-\t\t\t\t\t\t\t\t\t\t\t\t&& ! isset( $admin_notices_dismiss['lp-setup-wizard'] ),\r\n-\t\t\t\t\t\t\t'allow_dismiss' => 1,\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show notification addons new version.\r\n-\t\t\t\t\t\t'lp-addons-new-version'      => [\r\n-\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Faddons-new-version.php',\r\n-\t\t\t\t\t\t\t'addons'        => LP_Manager_Addons::instance()->list_addon_new_version(),\r\n-\t\t\t\t\t\t\t'allow_dismiss' => 1,\r\n-\t\t\t\t\t\t\t'dismiss'       => isset( $admin_notices_dismiss['lp-addons-new-version'] ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t\t\u002F\u002F Show notification addons purchased need extend.\r\n-\t\t\t\t\t\t'lp-addons-purchased-extend' => [\r\n-\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Faddons-purchased-extend.php',\r\n-\t\t\t\t\t\t\t'need-extend'   => LP_Manager_Addons::instance()->check_addons_purchased_need_extend(),\r\n-\t\t\t\t\t\t\t'allow_dismiss' => 1,\r\n-\t\t\t\t\t\t\t'dismiss'       => isset( $admin_notices_dismiss['lp-addons-purchased-extend'] ),\r\n-\t\t\t\t\t\t],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tforeach ( $rules as $template_data ) {\r\n-\t\t\t\t\tTemplate::instance()->get_admin_template(\r\n-\t\t\t\t\t\t$template_data['template'] ?? '',\r\n-\t\t\t\t\t\t[ 'data' => $template_data ]\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status        = 'success';\r\n-\t\t\t$response->data->content = ob_get_clean();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\twp_send_json( $response );\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * Search courses by title\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function search_courses( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\r\n-\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$params  = $request->get_params();\r\n-\t\t\t$ids_str = LP_Helper::sanitize_params_submitted( $params['ids'] ?? '' );\r\n-\t\t\t\u002F\u002F$not_ids_str         = LP_Helper::sanitize_params_submitted( $params['not_ids'] ?? '' );\r\n-\t\t\t$not_ids_str         = LP_Helper::sanitize_params_submitted( $params['id_not_in'] ?? '' );\r\n-\t\t\t$current_ids         = (array) LP_Helper::sanitize_params_submitted( $params['current_ids'] ?? [] );\r\n-\t\t\t$total_rows          = 0;\r\n-\t\t\t$filter              = new CourseJsonFilter();\r\n-\t\t\t$filter->limit       = 20;\r\n-\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t$filter->post_status = [ 'publish' ];\r\n-\t\t\t$filter->post_title  = LP_Helper::sanitize_params_submitted( $params['search'] ?? '' );\r\n-\t\t\t$filter->page        = LP_Helper::sanitize_params_submitted( $params['paged'] ?? 1, 'int' );\r\n-\r\n-\t\t\tif ( ! empty( $ids_str ) ) {\r\n-\t\t\t\t$filter->ids = explode( ',', $ids_str );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $not_ids_str ) ) {\r\n-\t\t\t\t$not_ids         = explode( ',', $not_ids_str );\r\n-\t\t\t\t$not_ids         = array_map( 'absint', $not_ids );\r\n-\t\t\t\t$not_ids         = implode( ',', $not_ids );\r\n-\t\t\t\t$filter->where[] = \"AND ID NOT IN ({$not_ids})\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get all courses.\r\n-\t\t\t$courses = Courses::get_list_courses( $filter, $total_rows );\r\n-\r\n-\t\t\t\u002F\u002F Get selected courses.\r\n-\t\t\t$courses_current = [];\r\n-\t\t\tif ( ! empty( $current_ids ) ) {\r\n-\t\t\t\t$current_ids                     = array_map( 'absint', $current_ids );\r\n-\t\t\t\t$filter_current_ids              = new LP_Course_Filter();\r\n-\t\t\t\t$filter_current_ids->limit       = -1;\r\n-\t\t\t\t$filter_current_ids->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t\t$filter->post_status             = [ 'publish' ];\r\n-\t\t\t\t$filter_current_ids->post_ids    = $current_ids;\r\n-\t\t\t\t$courses_current                 = Courses::get_courses( $filter_current_ids );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$check_ids    = [];\r\n-\t\t\t$courses_rs   = [];\r\n-\t\t\t$courses_data = array_merge( $courses_current, $courses );\r\n-\t\t\tforeach ( $courses_data as $course ) {\r\n-\t\t\t\tif ( ! in_array( $course->ID, $check_ids ) ) {\r\n-\t\t\t\t\t$courses_rs[] = $course;\r\n-\t\t\t\t\t$check_ids[]  = $course->ID;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$response->data->courses     = $courses_rs;\r\n-\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t\t$response->status            = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Search user by name or email\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function search_users( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\r\n-\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$params        = $request->get_params();\r\n-\t\t\t$search_string = LP_Helper::sanitize_params_submitted( $params['search'] ?? '' );\r\n-\t\t\t$current_ids   = LP_Helper::sanitize_params_submitted( $params['current_ids'] ?? '' );\r\n-\t\t\t$number        = LP_Helper::sanitize_params_submitted( $params['number'] ?? 20 );\r\n-\t\t\t$args_get_user = array(\r\n-\t\t\t\t'search_columns' => array(\r\n-\t\t\t\t\t'user_login',\r\n-\t\t\t\t\t'user_nicename',\r\n-\t\t\t\t\t'user_email',\r\n-\t\t\t\t),\r\n-\t\t\t\t'number'         => $number,\r\n-\t\t\t\t'fields'         => array( 'ID', 'display_name', 'user_login', 'user_email' ),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! empty( $search_string ) ) {\r\n-\t\t\t\t$args_get_user['search'] = \"*{$search_string}*\";\r\n-\t\t\t}\r\n-\r\n-\t\t\t$role_in = sanitize_text_field( $params['role_in'] ?? '' );\r\n-\t\t\tif ( ! empty( $role_in ) ) {\r\n-\t\t\t\t$args_get_user['role__in'] = explode( ',', $role_in );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$id_not_in = sanitize_text_field( $params['id_not_in'] ?? '' );\r\n-\t\t\tif ( ! empty( $id_not_in ) ) {\r\n-\t\t\t\t$args_get_user['exclude'] = explode( ',', $id_not_in );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get only users selected.\r\n-\t\t\t$users_selected = [];\r\n-\t\t\t$total_selected = 0;\r\n-\t\t\tif ( ! empty( $current_ids ) ) {\r\n-\t\t\t\tif ( ! is_array( $current_ids ) ) {\r\n-\t\t\t\t\t$current_ids_array = explode( ',', $current_ids );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$current_ids_array = $current_ids;\r\n-\t\t\t\t}\r\n-\t\t\t\t$args_get_user_current = array(\r\n-\t\t\t\t\t'include' => $current_ids_array,\r\n-\t\t\t\t\t'fields'  => array( 'ID', 'display_name', 'user_login', 'user_email' ),\r\n-\t\t\t\t);\r\n-\t\t\t\t$users_selected_query  = new WP_User_Query( $args_get_user_current );\r\n-\t\t\t\t$users_selected        = $users_selected_query->get_results();\r\n-\t\t\t\t$total_selected        = $users_selected_query->get_total() ?? 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$args_get_user = apply_filters( 'learn-press\u002Frest-admin-tools\u002Fargs-search-users', $args_get_user );\r\n-\r\n-\t\t\t\u002F\u002F Get list users for search.\r\n-\t\t\t$args_get_user['count_total'] = true;\r\n-\t\t\t$users_search_query           = new WP_User_Query( $args_get_user );\r\n-\t\t\t$users_search                 = $users_search_query->get_results() ?? [];\r\n-\t\t\t$total_search                 = $users_search_query->get_total() ?? 0;\r\n-\t\t\t$users                        = array_merge( $users_selected, $users_search );\r\n-\r\n-\t\t\t$response->data->users       = $users;\r\n-\t\t\t$total                       = $total_selected + $total_search;\r\n-\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $number, $total );\r\n-\t\t\t$response->status            = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Search roles\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function search_roles( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\tglobal $wp_roles;\r\n-\t\t\t$data  = [];\r\n-\t\t\t$roles = $wp_roles->get_names();\r\n-\t\t\tforeach ( $roles as $key => $value ) {\r\n-\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t'slug' => $key,\r\n-\t\t\t\t\t'name' => $value,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$response->data   = $data;\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enroll users to courses\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function assign_courses_to_users( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params     = $request->get_params();\r\n-\t\t\t$data       = $params['data'] ?? [];\r\n-\t\t\t$page       = $params['page'] ?? 1;\r\n-\t\t\t$total_page = $params['totalPage'] ?? 1;\r\n-\r\n-\t\t\tif ( ! is_array( $data ) ) {\r\n-\t\t\t\tthrow new Exception( 'Data assign is invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\tthrow new Exception( 'Please choose User and Course you want to Assign' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $data as $user_course ) {\r\n-\t\t\t\t$user_id   = $user_course['user_id'] ?? 0;\r\n-\t\t\t\t$course_id = $user_course['course_id'] ?? 0;\r\n-\t\t\t\tif ( ! $user_id || ! $course_id ) {\r\n-\t\t\t\t\tthrow new Exception( 'User or Course is invalid', 'learnpress' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$can_handle = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fassign-courses-to-users\u002Fcan-handle',\r\n-\t\t\t\t\ttrue,\r\n-\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t$course_id\r\n-\t\t\t\t);\r\n-\t\t\t\tif ( ! $can_handle ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Delete data user who already enrolled this course.\r\n-\t\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user_id, $course_id );\r\n-\t\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\t\u002F\u002F Insert new data user to user_item table.\r\n-\t\t\t\t$user_course_new             = new UserCourseModel();\r\n-\t\t\t\t$user_course_new->user_id    = $user_id;\r\n-\t\t\t\t$user_course_new->item_id    = $course_id;\r\n-\t\t\t\t$user_course_new->item_type  = LP_COURSE_CPT;\r\n-\t\t\t\t$user_course_new->ref_type   = '';\r\n-\t\t\t\t$user_course_new->status     = LP_COURSE_ENROLLED;\r\n-\t\t\t\t$user_course_new->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\r\n-\t\t\t\t$user_course_new->start_time = gmdate( LP_Datetime::$format, time() );\r\n-\t\t\t\t$user_course_new->save();\r\n-\t\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fassigned-course-to-user', $user_course_new );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $page == $total_page ) {\r\n-\t\t\t\t$response->status        = 'finished';\r\n-\t\t\t\t$response->data->percent = 100 . '%';\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->status        = 'success';\r\n-\t\t\t\t$response->data->page    = $page;\r\n-\t\t\t\t$response->data->percent = ( $page \u002F $total_page ) * 100 . '%';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->message = __( 'Assign users to courses successfully.', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enroll users to courses\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.5.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function unassign_user_from_course( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params     = $request->get_params();\r\n-\t\t\t$data       = $params['data'] ?? [];\r\n-\t\t\t$page       = $params['page'] ?? 1;\r\n-\t\t\t$total_page = $params['totalPage'] ?? 1;\r\n-\r\n-\t\t\tif ( ! is_array( $data ) ) {\r\n-\t\t\t\tthrow new Exception( 'Data assign is invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\tthrow new Exception( 'Please choose User and Course you want to Unassign' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $data as $user_course ) {\r\n-\t\t\t\t$user_id   = $user_course['user_id'] ?? 0;\r\n-\t\t\t\t$course_id = $user_course['course_id'] ?? 0;\r\n-\t\t\t\tif ( ! $user_id || ! $course_id ) {\r\n-\t\t\t\t\tthrow new Exception( 'User or Course is invalid', 'learnpress' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Delete data user who already enrolled this course.\r\n-\t\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user_id, $course_id );\r\n-\t\t\t\t\u002F\u002F End\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $page === $total_page ) {\r\n-\t\t\t\t$response->status        = 'finished';\r\n-\t\t\t\t$response->data->percent = 100 . '%';\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->status        = 'success';\r\n-\t\t\t\t$response->data->page    = $page;\r\n-\t\t\t\t$response->data->percent = number_format( ( $page \u002F $total_page ) * 100, 2 ) . '%';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->message = __( 'Unassigned users from courses successfully.', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission for request.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_permission(): bool {\r\n-\t\t$permission = current_user_can( ADMIN_ROLE );\r\n-\t\t$permission = apply_filters( 'learn-press\u002Fapi-admin-tools\u002Fpermission', $permission );\r\n-\r\n-\t\treturn $permission;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+\n+\u002F**\n+ * Class LP_REST_Admin_Tools_Controller\n+ *\n+ * @since 4.0.3\n+ * @author tungnx\n+ * @version 1.0.3\n+ *\u002F\n+class LP_REST_Admin_Tools_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1\u002Fadmin';\n+\t\t$this->rest_base = 'tools';\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Register rest routes.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'create-indexs'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'create_indexes' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'list-tables-indexs'   => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_list_tables_indexs' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'clean-tables'         => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'clean_tables' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'admin-notices'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'admin_notices' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'search-course'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'search_courses' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'search-user'          => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'search_users' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'search-roles'         => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'search_roles' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'assign-user-course'   => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'assign_courses_to_users' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'unassign-user-course' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'unassign_user_from_course' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Create create_indexes.\n+\t *\n+\t * @param WP_REST_Request $request .\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function create_indexes( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$tables_valid = [\n+\t\t\t\t$lp_db->tb_lp_user_items,\n+\t\t\t\t$lp_db->tb_lp_user_itemmeta,\n+\t\t\t\t$lp_db->tb_lp_quiz_questions,\n+\t\t\t\t$lp_db->tb_lp_question_answers,\n+\t\t\t\t$lp_db->tb_lp_question_answermeta,\n+\t\t\t\t$lp_db->tb_lp_order_items,\n+\t\t\t\t$lp_db->tb_lp_order_itemmeta,\n+\t\t\t\t$lp_db->tb_lp_sections,\n+\t\t\t\t$lp_db->tb_lp_section_items,\n+\t\t\t];\n+\t\t\t$table        = $request->get_param( 'table' );\n+\t\t\t$tables       = $request->get_param( 'tables' );\n+\n+\t\t\t$lp_db->wpdb->query( 'SET autocommit = 0' );\n+\n+\t\t\tif ( empty( $tables ) ) {\n+\t\t\t\tthrow new Exception( 'Param invalid!' );\n+\t\t\t} else {\n+\t\t\t\t$table_keys = array_keys( $tables );\n+\t\t\t}\n+\n+\t\t\tif ( ! array_key_exists( $table, $tables )\n+\t\t\t\t|| ! in_array( $table, $tables_valid ) ) {\n+\t\t\t\tthrow new Exception( 'Table invalid!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Create Indexs for a table.\n+\t\t\tif ( $table === $lp_db->tb_lp_question_answermeta ) {\n+\t\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_question_answermeta );\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\n+\t\t\t\t\tADD INDEX question_answer_meta (`learnpress_question_answer_id`, `meta_key`(150))\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t} elseif ( $table === $lp_db->tb_lp_section_items ) {\n+\t\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_section_items );\n+\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_section_items}\n+\t\t\t\t\tADD INDEX section_item (`section_id`, `item_id`)\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t} else {\n+\t\t\t\t$lp_db->add_indexs_table( $table, $tables[ $table ] );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set next table key.\n+\t\t\t$index_key = array_search( $table, $table_keys );\n+\t\t\t++ $index_key;\n+\n+\t\t\tif ( ! array_key_exists( $index_key, $table_keys ) ) {\n+\t\t\t\t$response->status        = 'finished';\n+\t\t\t\t$response->data->percent = 100;\n+\t\t\t} else {\n+\t\t\t\t$response->data->table   = $table_keys[ $index_key ];\n+\t\t\t\t$response->data->percent = 100;\n+\t\t\t\t$response->status        = 'success';\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\tpublic function get_list_tables_indexs( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\t$tables_indexes = array(\n+\t\t\t$lp_db->tb_lp_user_items          => array(\n+\t\t\t\t'user_id',\n+\t\t\t\t'item_id',\n+\t\t\t\t'item_type',\n+\t\t\t\t'status',\n+\t\t\t\t'ref_type',\n+\t\t\t\t'ref_id',\n+\t\t\t\t'parent_id',\n+\t\t\t),\n+\t\t\t$lp_db->tb_lp_user_itemmeta       => array( 'learnpress_user_item_id', 'meta_key', 'meta_value' ),\n+\t\t\t$lp_db->tb_lp_quiz_questions      => array( 'quiz_id', 'question_id' ),\n+\t\t\t$lp_db->tb_lp_question_answers    => array( 'question_id' ),\n+\t\t\t$lp_db->tb_lp_question_answermeta => '',\n+\t\t\t$lp_db->tb_lp_order_items         => array( 'order_id', 'item_id', 'item_type' ),\n+\t\t\t$lp_db->tb_lp_order_itemmeta      => array( 'learnpress_order_item_id', 'meta_key', 'meta_value' ),\n+\t\t\t$lp_db->tb_lp_sections            => array( 'section_course_id' ),\n+\t\t\t$lp_db->tb_lp_section_items       => '',\n+\t\t);\n+\n+\t\t$response->data->tables = $tables_indexes;\n+\t\t$response->data->table  = $lp_db->tb_lp_user_items;\n+\t\t$response->status       = 'success';\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\tpublic function clean_tables( WP_REST_Request $request ) {\n+\t\t$response            = new LP_REST_Response();\n+\t\t$lp_db_sessions      = LP_Sessions_DB::getInstance();\n+\t\t$tables              = $request->get_param( 'tables' );\n+\t\t$item_before_process = $request->get_param( 'itemtotal' );\n+\t\tif ( empty( $tables ) ) {\n+\t\t\tthrow new Exception( 'Param invalid!' );\n+\t\t}\n+\n+\t\tif ( empty( $item_before_process ) ) {\n+\t\t\t$item_before_process = 0;\n+\t\t}\n+\n+\t\tif ( $item_before_process == 0 ) {\n+\t\t\t$response->data->percent = 100;\n+\t\t\t$response->status        = 'finished';\n+\t\t\twp_send_json( $response );\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Delete result in table select\n+\t\t\tif ( $tables == 'learnpress_sessions' ) {\n+\t\t\t\t$lp_db_sessions->delete_rows();\n+\t\t\t\t\u002F\u002F check the number of lines remaining after each query\n+\t\t\t\t$item_after_process        = $lp_db_sessions->count_row_db_sessions();\n+\t\t\t\t$response->data->processed = $item_before_process - $item_after_process;\n+\t\t\t\t$percent                   = ( ( $item_before_process - $item_after_process ) \u002F $item_before_process ) * 100;\n+\t\t\t\t$response->data->percent   = number_format_i18n( $percent, '2' );\n+\t\t\t}\n+\t\t\tif ( $response->data->percent == 100 ) {\n+\t\t\t\t$response->status = 'finished';\n+\t\t\t} else {\n+\t\t\t\t$response->status = 'success';\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\t\twp_send_json( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Show admin notices.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return void\n+\t * @since 4.1.7.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function admin_notices( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\t$content  = '';\n+\n+\t\ttry {\n+\t\t\t$params                = $request->get_params();\n+\t\t\t$admin_notices_dismiss = get_option( 'lp_admin_notices_dismiss', [] );\n+\t\t\t$lp_beta_version_info  = LP_Admin_Notice::check_lp_beta_version();\n+\n+\t\t\tif ( isset( $params['dismiss'] ) ) {\n+\t\t\t\tif ( $lp_beta_version_info ) {\n+\t\t\t\t\t\u002F\u002F Store version of LP beta to session.\n+\t\t\t\t\tlearn_press_setcookie( 'lp_beta_version', $lp_beta_version_info['version'] ?? 0 );\n+\t\t\t\t}\n+\n+\t\t\t\t$admin_notices_dismiss[ $params['dismiss'] ] = $params['dismiss'];\n+\t\t\t\tupdate_option( 'lp_admin_notices_dismiss', $admin_notices_dismiss );\n+\t\t\t\t$response->message = __( 'Dismissed!', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$show_notice_lp_beta_version = false;\n+\t\t\t\t\u002F**\n+\t\t\t\t * Check if LP beta version is not dismissed or dismissed version lower than current version, will bet to show notice.\n+\t\t\t\t *\u002F\n+\t\t\t\tif ( $lp_beta_version_info && ! isset( $_GET['tab'] ) &&\n+\t\t\t\t\t( ! isset( $_COOKIE['lp_beta_version'] ) || version_compare( $_COOKIE['lp_beta_version'], $lp_beta_version_info['version'], '\u003C' ) ) ) {\n+\t\t\t\t\t$show_notice_lp_beta_version = true;\n+\t\t\t\t}\n+\n+\t\t\t\t$rules = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fadmin-notices',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t\u002F\u002F Check wp_remote call success.\n+\t\t\t\t\t\t'check_wp_remote'            => [\n+\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fwp-remote.php',\n+\t\t\t\t\t\t\t'check'    => LP_Admin_Notice::check_wp_remote(),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Check name plugin base.\n+\t\t\t\t\t\t'check_plugin_base'          => [\n+\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fplugin-base.php',\n+\t\t\t\t\t\t\t'check'    => LP_Admin_Notice::check_plugin_base(),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show beta version of LP.\n+\t\t\t\t\t\t'lp-beta-version'            => [\n+\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Fbeta-version.php',\n+\t\t\t\t\t\t\t'check'         => $show_notice_lp_beta_version,\n+\t\t\t\t\t\t\t'info'          => $lp_beta_version_info,\n+\t\t\t\t\t\t\t'allow_dismiss' => 1,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show message needs upgrades database compatible with LP version current.\n+\t\t\t\t\t\t'lp-upgrade-db'              => [\n+\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fupgrade-db.php',\n+\t\t\t\t\t\t\t'check'    => LP_Updater::instance()->check_lp_db_need_upgrade(),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show message wrong permalink structure.\n+\t\t\t\t\t\t'lp-permalink'               => [\n+\t\t\t\t\t\t\t'template' => 'admin-notices\u002Fpermalink-wrong.php',\n+\t\t\t\t\t\t\t'check'    => ! get_option( 'permalink_structure' ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show notice setup wizard.\n+\t\t\t\t\t\t'lp-setup-wizard'            => [\n+\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Fsetup-wizard.php',\n+\t\t\t\t\t\t\t'check'         => ! get_option( 'learn_press_setup_wizard_completed', false )\n+\t\t\t\t\t\t\t\t\t\t\t\t&& ! isset( $admin_notices_dismiss['lp-setup-wizard'] ),\n+\t\t\t\t\t\t\t'allow_dismiss' => 1,\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show notification addons new version.\n+\t\t\t\t\t\t'lp-addons-new-version'      => [\n+\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Faddons-new-version.php',\n+\t\t\t\t\t\t\t'addons'        => LP_Manager_Addons::instance()->list_addon_new_version(),\n+\t\t\t\t\t\t\t'allow_dismiss' => 1,\n+\t\t\t\t\t\t\t'dismiss'       => isset( $admin_notices_dismiss['lp-addons-new-version'] ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t\t\u002F\u002F Show notification addons purchased need extend.\n+\t\t\t\t\t\t'lp-addons-purchased-extend' => [\n+\t\t\t\t\t\t\t'template'      => 'admin-notices\u002Faddons-purchased-extend.php',\n+\t\t\t\t\t\t\t'need-extend'   => LP_Manager_Addons::instance()->check_addons_purchased_need_extend(),\n+\t\t\t\t\t\t\t'allow_dismiss' => 1,\n+\t\t\t\t\t\t\t'dismiss'       => isset( $admin_notices_dismiss['lp-addons-purchased-extend'] ),\n+\t\t\t\t\t\t],\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\n+\t\t\t\tob_start();\n+\t\t\t\tforeach ( $rules as $template_data ) {\n+\t\t\t\t\tTemplate::instance()->get_admin_template(\n+\t\t\t\t\t\t$template_data['template'] ?? '',\n+\t\t\t\t\t\t[ 'data' => $template_data ]\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->status        = 'success';\n+\t\t\t$response->data->content = ob_get_clean();\n+\t\t} catch ( Exception $e ) {\n+\t\t\tob_end_clean();\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\twp_send_json( $response );\n+\t}\n+\n+\n+\t\u002F**\n+\t * Search courses by title\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.5\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function search_courses( WP_REST_Request $request ): LP_REST_Response {\n+\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\n+\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$params  = $request->get_params();\n+\t\t\t$ids_str = LP_Helper::sanitize_params_submitted( $params['ids'] ?? '' );\n+\t\t\t\u002F\u002F$not_ids_str         = LP_Helper::sanitize_params_submitted( $params['not_ids'] ?? '' );\n+\t\t\t$not_ids_str         = LP_Helper::sanitize_params_submitted( $params['id_not_in'] ?? '' );\n+\t\t\t$current_ids         = (array) LP_Helper::sanitize_params_submitted( $params['current_ids'] ?? [] );\n+\t\t\t$total_rows          = 0;\n+\t\t\t$filter              = new CourseJsonFilter();\n+\t\t\t$filter->limit       = 20;\n+\t\t\t$filter->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t$filter->post_status = [ 'publish' ];\n+\t\t\t$filter->post_title  = LP_Helper::sanitize_params_submitted( $params['search'] ?? '' );\n+\t\t\t$filter->page        = LP_Helper::sanitize_params_submitted( $params['paged'] ?? 1, 'int' );\n+\n+\t\t\tif ( ! empty( $ids_str ) ) {\n+\t\t\t\t$filter->ids = explode( ',', $ids_str );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $not_ids_str ) ) {\n+\t\t\t\t$not_ids         = explode( ',', $not_ids_str );\n+\t\t\t\t$not_ids         = array_map( 'absint', $not_ids );\n+\t\t\t\t$not_ids         = implode( ',', $not_ids );\n+\t\t\t\t$filter->where[] = \"AND ID NOT IN ({$not_ids})\";\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get all courses.\n+\t\t\t$courses = Courses::get_list_courses( $filter, $total_rows );\n+\n+\t\t\t\u002F\u002F Get selected courses.\n+\t\t\t$courses_current = [];\n+\t\t\tif ( ! empty( $current_ids ) ) {\n+\t\t\t\t$current_ids                     = array_map( 'absint', $current_ids );\n+\t\t\t\t$filter_current_ids              = new LP_Course_Filter();\n+\t\t\t\t$filter_current_ids->limit       = -1;\n+\t\t\t\t$filter_current_ids->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t\t$filter->post_status             = [ 'publish' ];\n+\t\t\t\t$filter_current_ids->post_ids    = $current_ids;\n+\t\t\t\t$courses_current                 = Courses::get_courses( $filter_current_ids );\n+\t\t\t}\n+\n+\t\t\t$check_ids    = [];\n+\t\t\t$courses_rs   = [];\n+\t\t\t$courses_data = array_merge( $courses_current, $courses );\n+\t\t\tforeach ( $courses_data as $course ) {\n+\t\t\t\tif ( ! in_array( $course->ID, $check_ids ) ) {\n+\t\t\t\t\t$courses_rs[] = $course;\n+\t\t\t\t\t$check_ids[]  = $course->ID;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$response->data->courses     = $courses_rs;\n+\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t\t$response->status            = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Search user by name or email\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.5\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function search_users( WP_REST_Request $request ): LP_REST_Response {\n+\t\tini_set( 'max_execution_time', HOUR_IN_SECONDS );\n+\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$params        = $request->get_params();\n+\t\t\t$search_string = LP_Helper::sanitize_params_submitted( $params['search'] ?? '' );\n+\t\t\t$current_ids   = LP_Helper::sanitize_params_submitted( $params['current_ids'] ?? '' );\n+\t\t\t$number        = LP_Helper::sanitize_params_submitted( $params['number'] ?? 20 );\n+\t\t\t$args_get_user = array(\n+\t\t\t\t'search_columns' => array(\n+\t\t\t\t\t'user_login',\n+\t\t\t\t\t'user_nicename',\n+\t\t\t\t\t'user_email',\n+\t\t\t\t),\n+\t\t\t\t'number'         => $number,\n+\t\t\t\t'fields'         => array( 'ID', 'display_name', 'user_login', 'user_email' ),\n+\t\t\t);\n+\n+\t\t\tif ( ! empty( $search_string ) ) {\n+\t\t\t\t$args_get_user['search'] = \"*{$search_string}*\";\n+\t\t\t}\n+\n+\t\t\t$role_in = sanitize_text_field( $params['role_in'] ?? '' );\n+\t\t\tif ( ! empty( $role_in ) ) {\n+\t\t\t\t$args_get_user['role__in'] = explode( ',', $role_in );\n+\t\t\t}\n+\n+\t\t\t$id_not_in = sanitize_text_field( $params['id_not_in'] ?? '' );\n+\t\t\tif ( ! empty( $id_not_in ) ) {\n+\t\t\t\t$args_get_user['exclude'] = explode( ',', $id_not_in );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get only users selected.\n+\t\t\t$users_selected = [];\n+\t\t\t$total_selected = 0;\n+\t\t\tif ( ! empty( $current_ids ) ) {\n+\t\t\t\tif ( ! is_array( $current_ids ) ) {\n+\t\t\t\t\t$current_ids_array = explode( ',', $current_ids );\n+\t\t\t\t} else {\n+\t\t\t\t\t$current_ids_array = $current_ids;\n+\t\t\t\t}\n+\t\t\t\t$args_get_user_current = array(\n+\t\t\t\t\t'include' => $current_ids_array,\n+\t\t\t\t\t'fields'  => array( 'ID', 'display_name', 'user_login', 'user_email' ),\n+\t\t\t\t);\n+\t\t\t\t$users_selected_query  = new WP_User_Query( $args_get_user_current );\n+\t\t\t\t$users_selected        = $users_selected_query->get_results();\n+\t\t\t\t$total_selected        = $users_selected_query->get_total() ?? 0;\n+\t\t\t}\n+\n+\t\t\t$args_get_user = apply_filters( 'learn-press\u002Frest-admin-tools\u002Fargs-search-users', $args_get_user );\n+\n+\t\t\t\u002F\u002F Get list users for search.\n+\t\t\t$args_get_user['count_total'] = true;\n+\t\t\t$users_search_query           = new WP_User_Query( $args_get_user );\n+\t\t\t$users_search                 = $users_search_query->get_results() ?? [];\n+\t\t\t$total_search                 = $users_search_query->get_total() ?? 0;\n+\t\t\t$users                        = array_merge( $users_selected, $users_search );\n+\n+\t\t\t$response->data->users       = $users;\n+\t\t\t$total                       = $total_selected + $total_search;\n+\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $number, $total );\n+\t\t\t$response->status            = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Search roles\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function search_roles( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\tglobal $wp_roles;\n+\t\t\t$data  = [];\n+\t\t\t$roles = $wp_roles->get_names();\n+\t\t\tforeach ( $roles as $key => $value ) {\n+\t\t\t\t$data[] = array(\n+\t\t\t\t\t'slug' => $key,\n+\t\t\t\t\t'name' => $value,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$response->data   = $data;\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Enroll users to courses\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function assign_courses_to_users( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params     = $request->get_params();\n+\t\t\t$data       = $params['data'] ?? [];\n+\t\t\t$page       = $params['page'] ?? 1;\n+\t\t\t$total_page = $params['totalPage'] ?? 1;\n+\n+\t\t\tif ( ! is_array( $data ) ) {\n+\t\t\t\tthrow new Exception( 'Data assign is invalid' );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\tthrow new Exception( 'Please choose User and Course you want to Assign' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $data as $user_course ) {\n+\t\t\t\t$user_id   = $user_course['user_id'] ?? 0;\n+\t\t\t\t$course_id = $user_course['course_id'] ?? 0;\n+\t\t\t\tif ( ! $user_id || ! $course_id ) {\n+\t\t\t\t\tthrow new Exception( 'User or Course is invalid', 'learnpress' );\n+\t\t\t\t}\n+\n+\t\t\t\t$can_handle = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fassign-courses-to-users\u002Fcan-handle',\n+\t\t\t\t\ttrue,\n+\t\t\t\t\t$user_id,\n+\t\t\t\t\t$course_id\n+\t\t\t\t);\n+\t\t\t\tif ( ! $can_handle ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Delete data user who already enrolled this course.\n+\t\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user_id, $course_id );\n+\t\t\t\t\u002F\u002F End\n+\n+\t\t\t\t\u002F\u002F Insert new data user to user_item table.\n+\t\t\t\t$user_course_new             = new UserCourseModel();\n+\t\t\t\t$user_course_new->user_id    = $user_id;\n+\t\t\t\t$user_course_new->item_id    = $course_id;\n+\t\t\t\t$user_course_new->item_type  = LP_COURSE_CPT;\n+\t\t\t\t$user_course_new->ref_type   = '';\n+\t\t\t\t$user_course_new->status     = LP_COURSE_ENROLLED;\n+\t\t\t\t$user_course_new->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\n+\t\t\t\t$user_course_new->start_time = gmdate( LP_Datetime::$format, time() );\n+\t\t\t\t$user_course_new->save();\n+\t\t\t\t\u002F\u002F End\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fassigned-course-to-user', $user_course_new );\n+\t\t\t}\n+\n+\t\t\tif ( $page == $total_page ) {\n+\t\t\t\t$response->status        = 'finished';\n+\t\t\t\t$response->data->percent = 100 . '%';\n+\t\t\t} else {\n+\t\t\t\t$response->status        = 'success';\n+\t\t\t\t$response->data->page    = $page;\n+\t\t\t\t$response->data->percent = ( $page \u002F $total_page ) * 100 . '%';\n+\t\t\t}\n+\n+\t\t\t$response->message = __( 'Assign users to courses successfully.', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Enroll users to courses\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.5.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function unassign_user_from_course( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params     = $request->get_params();\n+\t\t\t$data       = $params['data'] ?? [];\n+\t\t\t$page       = $params['page'] ?? 1;\n+\t\t\t$total_page = $params['totalPage'] ?? 1;\n+\n+\t\t\tif ( ! is_array( $data ) ) {\n+\t\t\t\tthrow new Exception( 'Data assign is invalid' );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\tthrow new Exception( 'Please choose User and Course you want to Unassign' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $data as $user_course ) {\n+\t\t\t\t$user_id   = $user_course['user_id'] ?? 0;\n+\t\t\t\t$course_id = $user_course['course_id'] ?? 0;\n+\t\t\t\tif ( ! $user_id || ! $course_id ) {\n+\t\t\t\t\tthrow new Exception( 'User or Course is invalid', 'learnpress' );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Delete data user who already enrolled this course.\n+\t\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user_id, $course_id );\n+\t\t\t\t\u002F\u002F End\n+\t\t\t}\n+\n+\t\t\tif ( $page === $total_page ) {\n+\t\t\t\t$response->status        = 'finished';\n+\t\t\t\t$response->data->percent = 100 . '%';\n+\t\t\t} else {\n+\t\t\t\t$response->status        = 'success';\n+\t\t\t\t$response->data->page    = $page;\n+\t\t\t\t$response->data->percent = number_format( ( $page \u002F $total_page ) * 100, 2 ) . '%';\n+\t\t\t}\n+\n+\t\t\t$response->message = __( 'Unassigned users from courses successfully.', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Check permission for request.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_permission(): bool {\n+\t\t$permission = current_user_can( ADMIN_ROLE );\n+\t\t$permission = apply_filters( 'learn-press\u002Fapi-admin-tools\u002Fpermission', $permission );\n+\n+\t\treturn $permission;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-addon-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-addon-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-addon-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-addon-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,214 +1,214 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * REST API LP Widget.\r\n- *\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-class LP_REST_Addon_Controller extends LP_Abstract_REST_Controller {\r\n-\t\u002F**\r\n-\t * @var LP_Manager_Addons $lp_addons\r\n-\t *\u002F\r\n-\tprivate $lp_addons;\r\n-\r\n-\t\u002F**\r\n-\t * LP_REST_Addon_Controller constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'addon';\r\n-\r\n-\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fclass-lp-manager-addons.php';\r\n-\t\t$this->lp_addons = LP_Manager_Addons::instance();\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'all'      => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'list_addons' ),\r\n-\t\t\t\t\t'permission_callback' => [ $this, 'permission_callback' ],\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'action-n' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'action' ),\r\n-\t\t\t\t\t'permission_callback' => [ $this, 'permission_callback' ],\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\tpublic function permission_callback() {\r\n-\t\treturn current_user_can( UserModel::ROLE_ADMINISTRATOR );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list addons\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.1\r\n-\t *\u002F\r\n-\tpublic function list_addons( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params   = $request->get_params();\r\n-\t\t\t$lp_addon = LP_Manager_Addons::instance();\r\n-\t\t\t$res      = wp_remote_get( $lp_addon->url_list_addons, [ 'timeout' => 30 ] );\r\n-\t\t\tif ( is_wp_error( $res ) ) {\r\n-\t\t\t\tthrow new Exception( $res->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$addons = LP_Helper::json_decode( wp_remote_retrieve_body( $res ) );\r\n-\r\n-\t\t\t\u002F\u002F Get list addons purchased.\r\n-\t\t\t$addons_purchase = LP_Settings::get_option( $lp_addon->key_purchase_addons, [] );\r\n-\t\t\tif ( ! empty( $addons_purchase ) ) {\r\n-\t\t\t\t$args = [\r\n-\t\t\t\t\t'method'     => 'POST',\r\n-\t\t\t\t\t'body'       => [\r\n-\t\t\t\t\t\t'addons_purchase' => $addons_purchase,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'timeout'    => 30,\r\n-\t\t\t\t\t'user-agent' => site_url(),\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$result = wp_remote_post( $lp_addon->link_addons_purchased, $args );\r\n-\t\t\t\tif ( is_wp_error( $result ) ) {\r\n-\t\t\t\t\tthrow new Exception( $result->get_error_message() );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$data_str = wp_remote_retrieve_body( $result );\r\n-\t\t\t\tif ( preg_match( '\u002F^Error.*\u002F', $data_str ) ) {\r\n-\t\t\t\t\tthrow new Exception( $data_str );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$data = LP_Helper::json_decode( $data_str );\r\n-\r\n-\t\t\t\tforeach ( $addons as $key => $addon ) {\r\n-\t\t\t\t\tif ( isset( $data->{$key} ) ) {\r\n-\t\t\t\t\t\t$addons->{$key}->purchase_info = $data->{$key};\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End get list addons purchased.\r\n-\r\n-\t\t\tif ( isset( $params['return_obj'] ) ) {\r\n-\t\t\t\t$response->status = 'success';\r\n-\t\t\t\t$response->data   = $addons;\r\n-\r\n-\t\t\t\treturn $response;\r\n-\t\t\t}\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_admin_template( 'addons.php', compact( 'addons' ) );\r\n-\t\t\t$response->data->html   = ob_get_clean();\r\n-\t\t\t$response->data->addons = $addons;\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Get addons successfully', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ':' . $e->getMessage() );\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Action addon\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.1\r\n-\t *\u002F\r\n-\tpublic function action( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\t\t$lp_file_system = LP_WP_Filesystem::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$action = $request->get_param( 'action' );\r\n-\t\t\tif ( empty( $action ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Action is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$addon = $request->get_param( 'addon' );\r\n-\t\t\tif ( empty( $addon ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Params is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$purchase_code = $request->get_param( 'purchase_code' );\r\n-\r\n-\t\t\tswitch ( $action ) {\r\n-\t\t\t\tcase 'install':\r\n-\t\t\t\tcase 'update':\r\n-\t\t\t\t\t$link_download = '';\r\n-\t\t\t\t\t$path_file     = '';\r\n-\t\t\t\t\t$package       = '';\r\n-\r\n-\t\t\t\t\tif ( $addon['is_org'] ) {\r\n-\t\t\t\t\t\t$link_download = \"{$this->lp_addons->link_org}{$addon['slug']}.{$addon['version']}.zip\";\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\u002F\u002F Allow active key for site if site active on DB \"updates\" is empty.\r\n-\t\t\t\t\t\t$this->lp_addons->active_site( $addon['slug'], $purchase_code );\r\n-\t\t\t\t\t\t\u002F\u002F Download addon from ThimPress server.\r\n-\t\t\t\t\t\t$path_file = $this->lp_addons->download_from_thimpress( $addon, $purchase_code );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( ! empty( $link_download ) ) {\r\n-\t\t\t\t\t\t$package = $link_download;\r\n-\t\t\t\t\t} elseif ( ! empty( $path_file ) ) {\r\n-\t\t\t\t\t\t$package = $path_file;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( 'update' === $action ) {\r\n-\t\t\t\t\t\t$this->lp_addons->update( $addon, $package );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$this->lp_addons->install( $addon, $package );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( ! empty( $path_file ) ) {\r\n-\t\t\t\t\t\t$lp_file_system->lp_filesystem->delete( $path_file );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'activate':\r\n-\t\t\t\t\t$this->lp_addons->activate( $addon );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'deactivate':\r\n-\t\t\t\t\t$this->lp_addons->deactivate( $addon );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'update-purchase':\r\n-\t\t\t\t\t$key_purchase                   = LP_Settings::get_option( $this->lp_addons->key_purchase_addons, [] );\r\n-\t\t\t\t\t$key_purchase[ $addon['slug'] ] = $purchase_code;\r\n-\t\t\t\t\tLP_Settings::update_option( $this->lp_addons->key_purchase_addons, $key_purchase );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = sprintf( '\"%s\" %s \u003Cstrong>%s\u003C\u002Fstrong>', $addon['name'], $action, __( 'successfully', 'learnpress' ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * REST API LP Widget.\n+ *\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+class LP_REST_Addon_Controller extends LP_Abstract_REST_Controller {\n+\t\u002F**\n+\t * @var LP_Manager_Addons $lp_addons\n+\t *\u002F\n+\tprivate $lp_addons;\n+\n+\t\u002F**\n+\t * LP_REST_Addon_Controller constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'addon';\n+\n+\t\trequire_once LP_PLUGIN_PATH . 'inc\u002Fclass-lp-manager-addons.php';\n+\t\t$this->lp_addons = LP_Manager_Addons::instance();\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'all'      => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'list_addons' ),\n+\t\t\t\t\t'permission_callback' => [ $this, 'permission_callback' ],\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'action-n' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'action' ),\n+\t\t\t\t\t'permission_callback' => [ $this, 'permission_callback' ],\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\tpublic function permission_callback() {\n+\t\treturn current_user_can( UserModel::ROLE_ADMINISTRATOR );\n+\t}\n+\n+\t\u002F**\n+\t * Get list addons\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @version 1.0.1\n+\t * @since 4.2.1\n+\t *\u002F\n+\tpublic function list_addons( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params   = $request->get_params();\n+\t\t\t$lp_addon = LP_Manager_Addons::instance();\n+\t\t\t$res      = wp_remote_get( $lp_addon->url_list_addons, [ 'timeout' => 30 ] );\n+\t\t\tif ( is_wp_error( $res ) ) {\n+\t\t\t\tthrow new Exception( $res->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$addons = LP_Helper::json_decode( wp_remote_retrieve_body( $res ) );\n+\n+\t\t\t\u002F\u002F Get list addons purchased.\n+\t\t\t$addons_purchase = LP_Settings::get_option( $lp_addon->key_purchase_addons, [] );\n+\t\t\tif ( ! empty( $addons_purchase ) ) {\n+\t\t\t\t$args = [\n+\t\t\t\t\t'method'     => 'POST',\n+\t\t\t\t\t'body'       => [\n+\t\t\t\t\t\t'addons_purchase' => $addons_purchase,\n+\t\t\t\t\t],\n+\t\t\t\t\t'timeout'    => 30,\n+\t\t\t\t\t'user-agent' => site_url(),\n+\t\t\t\t];\n+\n+\t\t\t\t$result = wp_remote_post( $lp_addon->link_addons_purchased, $args );\n+\t\t\t\tif ( is_wp_error( $result ) ) {\n+\t\t\t\t\tthrow new Exception( $result->get_error_message() );\n+\t\t\t\t}\n+\n+\t\t\t\t$data_str = wp_remote_retrieve_body( $result );\n+\t\t\t\tif ( preg_match( '\u002F^Error.*\u002F', $data_str ) ) {\n+\t\t\t\t\tthrow new Exception( $data_str );\n+\t\t\t\t}\n+\n+\t\t\t\t$data = LP_Helper::json_decode( $data_str );\n+\n+\t\t\t\tforeach ( $addons as $key => $addon ) {\n+\t\t\t\t\tif ( isset( $data->{$key} ) ) {\n+\t\t\t\t\t\t$addons->{$key}->purchase_info = $data->{$key};\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End get list addons purchased.\n+\n+\t\t\tif ( isset( $params['return_obj'] ) ) {\n+\t\t\t\t$response->status = 'success';\n+\t\t\t\t$response->data   = $addons;\n+\n+\t\t\t\treturn $response;\n+\t\t\t}\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_admin_template( 'addons.php', compact( 'addons' ) );\n+\t\t\t$response->data->html   = ob_get_clean();\n+\t\t\t$response->data->addons = $addons;\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Get addons successfully', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ':' . $e->getMessage() );\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Action addon\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @version 1.0.0\n+\t * @since 4.2.1\n+\t *\u002F\n+\tpublic function action( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\t\t$lp_file_system = LP_WP_Filesystem::instance();\n+\n+\t\ttry {\n+\t\t\t$action = $request->get_param( 'action' );\n+\t\t\tif ( empty( $action ) ) {\n+\t\t\t\tthrow new Exception( __( 'Action is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$addon = $request->get_param( 'addon' );\n+\t\t\tif ( empty( $addon ) ) {\n+\t\t\t\tthrow new Exception( __( 'Params is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$purchase_code = $request->get_param( 'purchase_code' );\n+\n+\t\t\tswitch ( $action ) {\n+\t\t\t\tcase 'install':\n+\t\t\t\tcase 'update':\n+\t\t\t\t\t$link_download = '';\n+\t\t\t\t\t$path_file     = '';\n+\t\t\t\t\t$package       = '';\n+\n+\t\t\t\t\tif ( $addon['is_org'] ) {\n+\t\t\t\t\t\t$link_download = \"{$this->lp_addons->link_org}{$addon['slug']}.{$addon['version']}.zip\";\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t\u002F\u002F Allow active key for site if site active on DB \"updates\" is empty.\n+\t\t\t\t\t\t$this->lp_addons->active_site( $addon['slug'], $purchase_code );\n+\t\t\t\t\t\t\u002F\u002F Download addon from ThimPress server.\n+\t\t\t\t\t\t$path_file = $this->lp_addons->download_from_thimpress( $addon, $purchase_code );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( ! empty( $link_download ) ) {\n+\t\t\t\t\t\t$package = $link_download;\n+\t\t\t\t\t} elseif ( ! empty( $path_file ) ) {\n+\t\t\t\t\t\t$package = $path_file;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( 'update' === $action ) {\n+\t\t\t\t\t\t$this->lp_addons->update( $addon, $package );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$this->lp_addons->install( $addon, $package );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( ! empty( $path_file ) ) {\n+\t\t\t\t\t\t$lp_file_system->lp_filesystem->delete( $path_file );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'activate':\n+\t\t\t\t\t$this->lp_addons->activate( $addon );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'deactivate':\n+\t\t\t\t\t$this->lp_addons->deactivate( $addon );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'update-purchase':\n+\t\t\t\t\t$key_purchase                   = LP_Settings::get_option( $this->lp_addons->key_purchase_addons, [] );\n+\t\t\t\t\t$key_purchase[ $addon['slug'] ] = $purchase_code;\n+\t\t\t\t\tLP_Settings::update_option( $this->lp_addons->key_purchase_addons, $key_purchase );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = sprintf( '\"%s\" %s \u003Cstrong>%s\u003C\u002Fstrong>', $addon['name'], $action, __( 'successfully', 'learnpress' ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-ajax-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-ajax-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-ajax-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-ajax-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,110 +1,110 @@\n-\u003C?php\r\n-\u002F**\r\n- * REST API LP, load all content want via REST.\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-class LP_REST_AJAX_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'load_content_via_ajax';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'\u002F' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_content' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t * Has two params: callback and args.\r\n-\t * Data type of callback is [ 'class' => '', 'method' => '' ].\r\n-\t * Data type of args is array.\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.5.7\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function get_content( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check verify nonce.\r\n-\t\t\t *\r\n-\t\t\t * Certificate, custom lpct-hmmbiz.com-certificate, lpct-assignment-file-jyoti-nagda,\r\n-\t\t\t * lpct-hivetutoring-schedule-enroll-users-to-courses using.\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! wp_verify_nonce( $request->get_header( 'X-WP-Nonce' ), 'wp_rest' ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: invalid nonce!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$params = $request->get_params();\r\n-\r\n-\t\t\tif ( empty( $params['callback'] ) ||\r\n-\t\t\t\t! isset( $params['args'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: params invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F @var array $args\r\n-\t\t\t$args     = $params['args'];\r\n-\t\t\t$callBack = $params['callback'];\r\n-\t\t\tif ( $request->get_method() === 'GET' ) {\r\n-\t\t\t\t$args     = LP_Helper::json_decode( $params['args'], true );\r\n-\t\t\t\t$callBack = LP_Helper::json_decode( $params['callback'], true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $callBack['class'] ) ||\r\n-\t\t\t\tempty( $callBack['method'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: callback invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class  = $callBack['class'];\r\n-\t\t\t$method = $callBack['method'];\r\n-\t\t\t$data   = null;\r\n-\r\n-\t\t\t\u002F\u002F Security: check callback is registered.\r\n-\t\t\t$allow_callbacks = apply_filters(\r\n-\t\t\t\t'lp\u002Frest\u002Fajax\u002Fallow_callback',\r\n-\t\t\t\t[]\r\n-\t\t\t);\r\n-\t\t\t$callBackStr     = $class . ':' . $method;\r\n-\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check class and method is callable.\r\n-\t\t\tif ( is_callable( [ $class, $method ] ) ) {\r\n-\t\t\t\t$data = call_user_func( [ $class, $method ], $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $data instanceof stdClass && ! isset( $data->content ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: data content invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = 'Success!';\r\n-\t\t\t$response->data    = $data;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * REST API LP, load all content want via REST.\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.1\n+ *\u002F\n+\n+class LP_REST_AJAX_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'load_content_via_ajax';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'\u002F' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'get_content' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t * Has two params: callback and args.\n+\t * Data type of callback is [ 'class' => '', 'method' => '' ].\n+\t * Data type of args is array.\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.5.7\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function get_content( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t\u002F**\n+\t\t\t * Check verify nonce.\n+\t\t\t *\n+\t\t\t * Certificate, custom lpct-hmmbiz.com-certificate, lpct-assignment-file-jyoti-nagda,\n+\t\t\t * lpct-hivetutoring-schedule-enroll-users-to-courses using.\n+\t\t\t *\u002F\n+\t\t\tif ( ! wp_verify_nonce( $request->get_header( 'X-WP-Nonce' ), 'wp_rest' ) ) {\n+\t\t\t\tthrow new Exception( 'Error: invalid nonce!' );\n+\t\t\t}\n+\n+\t\t\t$params = $request->get_params();\n+\n+\t\t\tif ( empty( $params['callback'] ) ||\n+\t\t\t\t! isset( $params['args'] ) ) {\n+\t\t\t\tthrow new Exception( 'Error: params invalid!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F @var array $args\n+\t\t\t$args     = $params['args'];\n+\t\t\t$callBack = $params['callback'];\n+\t\t\tif ( $request->get_method() === 'GET' ) {\n+\t\t\t\t$args     = LP_Helper::json_decode( $params['args'], true );\n+\t\t\t\t$callBack = LP_Helper::json_decode( $params['callback'], true );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $callBack['class'] ) ||\n+\t\t\t\tempty( $callBack['method'] ) ) {\n+\t\t\t\tthrow new Exception( 'Error: callback invalid!' );\n+\t\t\t}\n+\n+\t\t\t$class  = $callBack['class'];\n+\t\t\t$method = $callBack['method'];\n+\t\t\t$data   = null;\n+\n+\t\t\t\u002F\u002F Security: check callback is registered.\n+\t\t\t$allow_callbacks = apply_filters(\n+\t\t\t\t'lp\u002Frest\u002Fajax\u002Fallow_callback',\n+\t\t\t\t[]\n+\t\t\t);\n+\t\t\t$callBackStr     = $class . ':' . $method;\n+\t\t\tif ( ! in_array( $callBackStr, $allow_callbacks ) ) {\n+\t\t\t\tthrow new Exception( 'Error: callback is not register!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check class and method is callable.\n+\t\t\tif ( is_callable( [ $class, $method ] ) ) {\n+\t\t\t\t$data = call_user_func( [ $class, $method ], $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( 'Error: callback is not callable!' );\n+\t\t\t}\n+\n+\t\t\tif ( ! $data instanceof stdClass && ! isset( $data->content ) ) {\n+\t\t\t\tthrow new Exception( 'Error: data content invalid!' );\n+\t\t\t}\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = 'Success!';\n+\t\t\t$response->data    = $data;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,764 +1,764 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Courses_Controller\r\n- *\u002F\r\n-\r\n-use LearnPress\\Background\\LPBackgroundAjax;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\ListCoursesByPageElementor;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-class LP_REST_Courses_Controller extends LP_Abstract_REST_Controller {\r\n-\t\u002F**\r\n-\t * LP_REST_Courses_Controller constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'courses';\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register routes API\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t''                       => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_courses' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => array(),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'purchase-course'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'purchase_course' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'enroll-course'          => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'enroll_courses' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'retake-course'          => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'retake_course' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn is_user_logged_in();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t\t'schema'              => array(\r\n-\t\t\t\t\t\t'type' => 'int',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'archive-course'         => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'list_courses' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => [],\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'courses-widget-by-page' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\r\n-\t\t\t\t\t'callback'            => array( $this, 'courses_widget_by_page' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => [],\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'(?P\u003Ckey>[\\w]+)'         => array(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'delete_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t),\r\n-\t\t\t'continue-course'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'continue_course' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user is Admin\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_admin_permission(): bool {\r\n-\t\treturn LP_Abstract_API::check_admin_permission();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses, return JSON data, not to handle HTML\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_courses( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter     = new LP_Course_Filter();\r\n-\t\t\t$params     = $request->get_params();\r\n-\t\t\t$total_rows = 0;\r\n-\r\n-\t\t\tCourses::handle_params_for_query_courses( $filter, $params );\r\n-\t\t\t$filter->only_fields = [ 'ID' ];\r\n-\t\t\t$coursesRs           = Courses::get_courses( $filter, $total_rows );\r\n-\r\n-\t\t\t$courses              = [];\r\n-\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\tforeach ( $coursesRs as $course ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\r\n-\t\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$courseItem              = new stdClass();\r\n-\t\t\t\t$courseItem->ID          = $course->ID;\r\n-\t\t\t\t$courseItem->description = $singleCourseTemplate->html_short_description( $courseModel );\r\n-\t\t\t\t$courseItem->price       = $singleCourseTemplate->html_price( $courseModel );\r\n-\t\t\t\t$courseItem->title       = $courseModel->get_title();\r\n-\t\t\t\t$courseItem->student     = $singleCourseTemplate->html_count_student( $courseModel );\r\n-\t\t\t\t$courseItem->lesson      = $singleCourseTemplate->html_count_item( $courseModel, LP_LESSON_CPT );\r\n-\t\t\t\t$courseItem->duration    = $singleCourseTemplate->html_duration( $courseModel );\r\n-\t\t\t\t$courseItem->quiz        = $singleCourseTemplate->html_count_item( $courseModel, LP_QUIZ_CPT );\r\n-\t\t\t\t$courseItem->level       = $singleCourseTemplate->html_level( $courseModel );\r\n-\t\t\t\t$courseItem->image       = $singleCourseTemplate->html_image( $courseModel );\r\n-\t\t\t\t$courseItem->instructor  = $singleCourseTemplate->html_instructor( $courseModel, false, [ 'is_link' => false ] );\r\n-\t\t\t\t$courseItem->category    = $singleCourseTemplate->html_categories( $courseModel );\r\n-\t\t\t\t$courseItem->button      = __( 'Read more', 'learnpress' );\r\n-\r\n-\t\t\t\t$courses[] = apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fcourses', $courseItem, $courseModel );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status            = 'success';\r\n-\t\t\t$response->data->courses     = $courses;\r\n-\t\t\t$response->data->total       = $total_rows;\r\n-\t\t\t$response->data->page        = $filter->page;\r\n-\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function list_courses( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response            = new LP_REST_Response();\r\n-\t\t$response->data      = new stdClass();\r\n-\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\r\n-\t\t$pagination_type     = LP_Settings::get_option( 'course_pagination_type' );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter = new LP_Course_Filter();\r\n-\t\t\tCourses::handle_params_for_query_courses( $filter, $request->get_params() );\r\n-\r\n-\t\t\t\u002F\u002F Check is in category page.\r\n-\t\t\t\u002F*if ( ! empty( $request->get_param( 'page_term_id_current' ) ) &&\r\n-\t\t\t\tempty( $request->get_param( 'term_id' ) ) ) {\r\n-\t\t\t\t$filter->term_ids[] = $request->get_param( 'page_term_id_current' );\r\n-\t\t\t} \u002F\u002F Check is in tag page.\r\n-\t\t\telseif ( ! empty( $request->get_param( 'page_tag_id_current' ) ) &&\r\n-\t\t\t\t\tempty( $request->get_param( 'tag_id' ) ) ) {\r\n-\t\t\t\t$filter->tag_ids[] = $request->get_param( 'page_tag_id_current' );\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$filter     = apply_filters( 'lp\u002Fapi\u002Fcourses\u002Ffilter', $filter, $request );\r\n-\r\n-\t\t\t$courses     = Courses::get_courses( $filter, $total_rows );\r\n-\t\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t\t$return_type = $request['return_type'] ?? 'html';\r\n-\t\t\tif ( 'json' === $return_type ) {\r\n-\t\t\t\t$response->data->courses     = $courses;\r\n-\t\t\t\t$response->data->total_pages = $total_pages;\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F For return data has html\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tif ( $courses ) {\r\n-\t\t\t\t\tif ( ! empty( $request['c_suggest'] ) ) {\r\n-\t\t\t\t\t\t$data = array(\r\n-\t\t\t\t\t\t\t'courses'      => $courses,\r\n-\t\t\t\t\t\t\t'keyword'      => $request['c_search'],\r\n-\t\t\t\t\t\t\t'total_course' => $total_rows,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest\u002Flayout', $data );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tglobal $wp, $post;\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Template Pagination.\r\n-\t\t\t\t\t\tswitch ( $pagination_type ) {\r\n-\t\t\t\t\t\t\tcase 'load-more':\r\n-\t\t\t\t\t\t\t\tif ( $filter->page \u003C $total_pages ) {\r\n-\t\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_load_more();\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tcase 'infinite':\r\n-\t\t\t\t\t\t\t\tif ( $filter->page \u003C $total_pages ) {\r\n-\t\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_infinite();\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t\t$pagination_args            = [\r\n-\t\t\t\t\t\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t\t\t\t\t\t'paged'       => $filter->page,\r\n-\t\t\t\t\t\t\t\t\t'base'        => add_query_arg( 'paged', '%#%', learn_press_get_page_link( 'courses' ) ),\r\n-\t\t\t\t\t\t\t\t];\r\n-\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_number( $pagination_args );\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$response->data->pagination_type = $pagination_type;\r\n-\t\t\t\t\t\t\u002F\u002F End Pagination\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F For custom template\r\n-\t\t\t\t\t\t$template_path = apply_filters( 'lp\u002Fapi\u002Fcourses\u002Ftemplate', '', $request );\r\n-\t\t\t\t\t\tif ( ! empty( $template_path ) ) {\r\n-\t\t\t\t\t\t\tTemplate::instance()->get_template( $template_path, compact( 'courses', 'total_pages', 'request' ) );\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t\t\t\t\t$post = get_post( $course->ID );\r\n-\t\t\t\t\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\t\t\t\t\tTemplate::instance()->get_frontend_template( 'content-course.php' );\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\twp_reset_postdata();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\u002F\u002F End content items\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tLearnPress::instance()->template( 'course' )->no_courses_found();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$response->data->content = ob_get_clean();\r\n-\t\t\t\t$response->data->totals  = $total_rows;\r\n-\r\n-\t\t\t\t$from = 1 + ( $filter->page - 1 ) * $filter->limit;\r\n-\t\t\t\t$to   = ( $filter->page * $filter->limit > $total_rows ) ? $total_rows : $filter->page * $filter->limit;\r\n-\r\n-\t\t\t\tif ( 0 === $total_rows ) {\r\n-\t\t\t\t\t$response->data->from_to = '';\r\n-\t\t\t\t} elseif ( 1 === $total_rows ) {\r\n-\t\t\t\t\t$response->data->from_to = esc_html__( 'Showing only one result', 'learnpress' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( $from == $to ) {\r\n-\t\t\t\t\t\t$response->data->from_to = sprintf( esc_html__( 'Showing last course of %s results', 'learnpress' ), $total_rows );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tswitch ( $pagination_type ) {\r\n-\t\t\t\t\t\t\tcase 'load-more':\r\n-\t\t\t\t\t\t\tcase 'infinite':\r\n-\t\t\t\t\t\t\t\t$from_to = $filter->page * $filter->limit;\r\n-\t\t\t\t\t\t\t\tif ( $from_to > $total_rows ) {\r\n-\t\t\t\t\t\t\t\t\t$from_to = $total_rows;\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t\t$from_to = $from . '-' . $to;\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$response->data->from_to = sprintf( esc_html__( 'Showing %1$s of %2$s results', 'learnpress' ), $from_to, $total_rows );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->data->content = $e->getMessage();\r\n-\t\t\t$response->message       = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list courses - Widget Elementor\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function courses_widget_by_page( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = new stdClass();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$settings                = array_merge(\r\n-\t\t\t\t$request->get_params(),\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'courses_ul_classes' => [ 'list-courses-elm' ],\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\t\t\t$response->data->content = ListCoursesByPageElementor::render_data_from_setting( $settings );\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\t$response->data->content = $e->getMessage();\r\n-\t\t\t$response->message       = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rest API for Enroll in single course.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @author Nhamdv\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.3\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function enroll_courses( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = new stdClass();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id = absint( $request['id'] ?? 0 );\r\n-\t\t\t$course    = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid course!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id    = get_current_user_id();\r\n-\t\t\t$user       = UserModel::find( $user_id, true );\r\n-\t\t\t$can_enroll = $course->can_enroll( $user );\r\n-\t\t\tif ( $can_enroll instanceof WP_Error ) {\r\n-\t\t\t\tthrow new Exception( $can_enroll->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Case: if user bought course\r\n-\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\tif ( $userCourse && $userCourse->has_purchased() ) {\r\n-\t\t\t\t$userCourse->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\r\n-\t\t\t\t$userCourse->status     = LP_COURSE_ENROLLED;\r\n-\t\t\t\t$userCourse->start_time = gmdate( LP_Datetime::$format, time() );\r\n-\t\t\t\t$userCourse->save();\r\n-\r\n-\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $userCourse->ref_id, $course_id, $user->get_id() );\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Send mail user enrolled course\r\n-\t\t\t\t * @uses SendEmailAjax::send_mail_user_enrolled_course()\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$data_send = [\r\n-\t\t\t\t\t$userCourse->ref_id,\r\n-\t\t\t\t\t$course_id,\r\n-\t\t\t\t\t$user->get_id(),\r\n-\t\t\t\t];\r\n-\t\t\t\tLPBackgroundAjax::handle(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'params'       => $data_send,\r\n-\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_user_enrolled_course',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\t\t\t} else { \u002F\u002F Case enroll course free\r\n-\t\t\t\t$cart     = LearnPress::instance()->cart;\r\n-\t\t\t\t$checkout = LP_Checkout::instance();\r\n-\r\n-\t\t\t\tif ( ! learn_press_enable_cart() ) {\r\n-\t\t\t\t\t$cart->empty_cart();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$cart_id = $cart->add_to_cart( $course_id );\r\n-\t\t\t\tif ( ! $cart_id ) {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t\t$order_id = $checkout->create_order();\r\n-\t\t\t\t\t$order    = new LP_Order( $order_id );\r\n-\t\t\t\t\t$order->payment_complete();\r\n-\r\n-\t\t\t\t\t$cart->empty_cart();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t$response->message = esc_html__(\r\n-\t\t\t\t\t'Congrats! You have enrolled in the course successfully. Redirecting...',\r\n-\t\t\t\t\t'learnpress'\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$first_item_id            = $course->get_first_item_id();\r\n-\t\t\t\t$response->data->redirect = $first_item_id ? $course->get_item_link( $first_item_id ) : get_the_permalink( $course->get_id() );\r\n-\t\t\t} else {\r\n-\t\t\t\t$redirect_url = LP_Page_Controller::get_link_page( 'checkout', [], true );\r\n-\t\t\t\t$redirect_url = apply_filters(\r\n-\t\t\t\t\t'learnpress\u002Frest-api\u002Fcourses\u002Fenroll\u002Fredirect',\r\n-\t\t\t\t\t$redirect_url,\r\n-\t\t\t\t\t$course_id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( empty( $redirect_url ) ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Error: Please set up a page for checkout.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$redirect_url             = LP_Helper::get_link_no_cache( $redirect_url );\r\n-\t\t\t\t$response->message        = esc_html__( 'Redirecting...', 'learnpress' );\r\n-\t\t\t\t$response->data->redirect = esc_url_raw( $redirect_url );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rest API for Purchase course in single course.\r\n-\t *\r\n-\t * @param WP_REST_Request $request .\r\n-\t *\r\n-\t * @return WP_REST_Response|WP_Error\r\n-\t * @throws Exception .\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tpublic function purchase_course( WP_REST_Request $request ) {\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = new stdClass();\r\n-\t\t$params         = $request->get_params();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id             = $params['id'];\r\n-\t\t\t$allow_repurchase_type = $params['repurchaseType'] ?? false;\r\n-\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'Error: Invalid Course ID.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'Error: No Course available.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id      = get_current_user_id();\r\n-\t\t\t$user         = UserModel::find( $user_id, true );\r\n-\t\t\t$can_purchase = $course->can_purchase( $user );\r\n-\t\t\tif ( $can_purchase instanceof WP_Error ) {\r\n-\t\t\t\tthrow new Exception( $can_purchase->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourse         = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t$option_repurchase  = [\r\n-\t\t\t\t'reset' => esc_html__( 'Reset course progress', 'learnpress' ),\r\n-\t\t\t\t'keep'  => esc_html__( 'Keep course progress', 'learnpress' ),\r\n-\t\t\t];\r\n-\t\t\t$html_li_repurchase = '';\r\n-\t\t\tforeach ( $option_repurchase as $key => $value ) {\r\n-\t\t\t\t$html_li_repurchase .= sprintf(\r\n-\t\t\t\t\t'\u003Cli>\u003Clabel>%s\u003C\u002Flabel>\u003C\u002Fli>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cinput name=\"_lp_allow_repurchase_type\" value=\"%s\" type=\"radio\" checked=\"checked\"\u002F> %s',\r\n-\t\t\t\t\t\t$key,\r\n-\t\t\t\t\t\t$value\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$repurchase_type          = $course->get_type_repurchase();\r\n-\t\t\t$section_popup_repurchase = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp_allow_repurchase_select\">',\r\n-\t\t\t\t'ul'          => '\u003Cul>',\r\n-\t\t\t\t'list'        => $html_li_repurchase,\r\n-\t\t\t\t'ul_end'      => '\u003C\u002Ful>',\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\tif ( $course->enable_allow_repurchase()\r\n-\t\t\t\t&& $user_id && $userCourse\r\n-\t\t\t\t&& empty( $allow_repurchase_type ) ) {\r\n-\t\t\t\tif ( $repurchase_type === 'popup' ) {\r\n-\t\t\t\t\t$response->data->html       = Template::combine_components( $section_popup_repurchase );\r\n-\t\t\t\t\t$response->data->type       = 'allow_repurchase';\r\n-\t\t\t\t\t$response->data->titlePopup = esc_html__( 'Repurchase Options', 'learnpress' );\r\n-\t\t\t\t\t$response->status           = 'success';\r\n-\r\n-\t\t\t\t\treturn rest_ensure_response( $response );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cart = LearnPress::instance()->cart;\r\n-\t\t\tif ( ! learn_press_enable_cart() ) {\r\n-\t\t\t\t$cart->empty_cart();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F @deprecated hook since v4.2.7.3\r\n-\t\t\t\u002F\u002Fdo_action( 'learnpress\u002Frest-api\u002Fcourses\u002Fpurchase\u002Fbefore-add-to-cart' );\r\n-\r\n-\t\t\t$cart_id = $cart->add_to_cart( $course_id, 1, $params );\r\n-\t\t\tif ( empty( $cart_id ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $allow_repurchase_type ) && $userCourse ) {\r\n-\t\t\t\tlearn_press_update_user_item_meta( $userCourse->get_user_item_id(), '_lp_allow_repurchase_type', $allow_repurchase_type );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$redirect_url = LP_Page_Controller::get_link_page( 'checkout', [], true );\r\n-\t\t\t$redirect_url = apply_filters(\r\n-\t\t\t\t'learnpress\u002Frest-api\u002Fcourses\u002Fpurchase\u002Fredirect',\r\n-\t\t\t\t$redirect_url,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$cart_id\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( empty( $redirect_url ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'Error: Please set up a page for checkout.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$redirect_url             = LP_Helper::get_link_no_cache( $redirect_url );\r\n-\t\t\t$response->status         = 'success';\r\n-\t\t\t$response->message        = sprintf(\r\n-\t\t\t\tesc_html__( '\"%s\" has been added to your cart. Redirecting...', 'learnpress' ),\r\n-\t\t\t\t$course->get_title()\r\n-\t\t\t);\r\n-\t\t\t$response->data->redirect = esc_url_raw( $redirect_url );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rest API for retake course.\r\n-\t *\r\n-\t * @param WP_REST_Request $request .\r\n-\t *\r\n-\t * @throws Exception .\r\n-\t *\u002F\r\n-\tpublic function retake_course( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id = $request->get_param( 'id' );\r\n-\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid params', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid user', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\tif ( ! $userCourseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid user course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel->handle_retake();\r\n-\t\t\t$item_continue = $userCourseModel->get_item_continue();\r\n-\t\t\tif ( $item_continue ) {\r\n-\t\t\t\t$link_continue = $courseModel->get_item_link( $item_continue->ID );\r\n-\t\t\t} else {\r\n-\t\t\t\t$link_continue = $courseModel->get_permalink();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status             = 'success';\r\n-\t\t\t$response->message            = esc_html__( 'Now you can begin this course', 'learnpress' );\r\n-\t\t\t$response->data->url_redirect = $link_continue;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_items( $request ) {\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$response = array(\r\n-\t\t\t'result' => $settings->get(),\r\n-\t\t);\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_item( $request ) {\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$response = array(\r\n-\t\t\t'result' => $settings->get( $request['key'] ),\r\n-\t\t);\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function update_item( $request ) {\r\n-\t\t$response = array();\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$option   = $settings->get( $request['key'] );\r\n-\r\n-\t\t$settings->update( $request['key'], $request['data'] );\r\n-\t\t$new_option = $settings->get( $request['key'] );\r\n-\t\t$success    = maybe_serialize( $option ) !== maybe_serialize( $new_option );\r\n-\r\n-\t\t$response['success'] = $success;\r\n-\t\t$response['result']  = $success ? $new_option : $option;\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function delete_item( $request ) {\r\n-\t\t$response = array();\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Rest API for get item continue in single course.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.1.4\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function continue_course( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$params         = $request->get_params();\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$flag_found = false;\r\n-\t\t\t$item_link  = '';\r\n-\t\t\t$course_id  = absint( $params['courseId'] ?? 0 );\r\n-\t\t\t$user_id    = absint( $params['userId'] ?? 0 );\r\n-\r\n-\t\t\t$user   = UserModel::find( $user_id, true );\r\n-\t\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn $response;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\tif ( ! $userCourseModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid user course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections_items = $course->get_section_items();\r\n-\t\t\t$total_items    = $course->get_total_items();\r\n-\r\n-\t\t\tif ( ! empty( $total_items ) ) {\r\n-\t\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\t\tif ( $flag_found ) {\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t\t$item_id   = $item->id ?? $item->item_id;\r\n-\t\t\t\t\t\t$item_type = $item->type ?? $item->item_type;\r\n-\r\n-\t\t\t\t\t\t$userItemModel = UserItemModel::find_user_item(\r\n-\t\t\t\t\t\t\t$user_id,\r\n-\t\t\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t\t\t$item_type,\r\n-\t\t\t\t\t\t\t$course_id,\r\n-\t\t\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tif ( ! $userItemModel || $userItemModel->get_status() !== LP_ITEM_COMPLETED ) {\r\n-\t\t\t\t\t\t\t$item_link  = $course->get_item_link( $item->id );\r\n-\t\t\t\t\t\t\t$flag_found = true;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $flag_found ) {\r\n-\t\t\t\t\t$item_link = $course->get_item_link( $course->get_first_item_id() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data    = $item_link;\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = '';\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_REST_Courses_Controller\n+ *\u002F\n+\n+use LearnPress\\Background\\LPBackgroundAjax;\n+use LearnPress\\ExternalPlugin\\Elementor\\Widgets\\Course\\ListCoursesByPageElementor;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+class LP_REST_Courses_Controller extends LP_Abstract_REST_Controller {\n+\t\u002F**\n+\t * LP_REST_Courses_Controller constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'courses';\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Register routes API\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t''                       => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'get_courses' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => array(),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'purchase-course'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'purchase_course' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'enroll-course'          => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'enroll_courses' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'retake-course'          => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'retake_course' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn is_user_logged_in();\n+\t\t\t\t\t},\n+\t\t\t\t\t'schema'              => array(\n+\t\t\t\t\t\t'type' => 'int',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'archive-course'         => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'list_courses' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => [],\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'courses-widget-by-page' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::ALLMETHODS,\n+\t\t\t\t\t'callback'            => array( $this, 'courses_widget_by_page' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => [],\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'(?P\u003Ckey>[\\w]+)'         => array(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'delete_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t),\n+\t\t\t'continue-course'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'continue_course' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Check user is Admin\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_admin_permission(): bool {\n+\t\treturn LP_Abstract_API::check_admin_permission();\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses, return JSON data, not to handle HTML\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.8.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_courses( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$filter     = new LP_Course_Filter();\n+\t\t\t$params     = $request->get_params();\n+\t\t\t$total_rows = 0;\n+\n+\t\t\tCourses::handle_params_for_query_courses( $filter, $params );\n+\t\t\t$filter->only_fields = [ 'ID' ];\n+\t\t\t$coursesRs           = Courses::get_courses( $filter, $total_rows );\n+\n+\t\t\t$courses              = [];\n+\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\tforeach ( $coursesRs as $course ) {\n+\t\t\t\t$courseModel = CourseModel::find( $course->ID, true );\n+\t\t\t\tif ( ! $courseModel ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$courseItem              = new stdClass();\n+\t\t\t\t$courseItem->ID          = $course->ID;\n+\t\t\t\t$courseItem->description = $singleCourseTemplate->html_short_description( $courseModel );\n+\t\t\t\t$courseItem->price       = $singleCourseTemplate->html_price( $courseModel );\n+\t\t\t\t$courseItem->title       = $courseModel->get_title();\n+\t\t\t\t$courseItem->student     = $singleCourseTemplate->html_count_student( $courseModel );\n+\t\t\t\t$courseItem->lesson      = $singleCourseTemplate->html_count_item( $courseModel, LP_LESSON_CPT );\n+\t\t\t\t$courseItem->duration    = $singleCourseTemplate->html_duration( $courseModel );\n+\t\t\t\t$courseItem->quiz        = $singleCourseTemplate->html_count_item( $courseModel, LP_QUIZ_CPT );\n+\t\t\t\t$courseItem->level       = $singleCourseTemplate->html_level( $courseModel );\n+\t\t\t\t$courseItem->image       = $singleCourseTemplate->html_image( $courseModel );\n+\t\t\t\t$courseItem->instructor  = $singleCourseTemplate->html_instructor( $courseModel, false, [ 'is_link' => false ] );\n+\t\t\t\t$courseItem->category    = $singleCourseTemplate->html_categories( $courseModel );\n+\t\t\t\t$courseItem->button      = __( 'Read more', 'learnpress' );\n+\n+\t\t\t\t$courses[] = apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fcourses', $courseItem, $courseModel );\n+\t\t\t}\n+\n+\t\t\t$response->status            = 'success';\n+\t\t\t$response->data->courses     = $courses;\n+\t\t\t$response->data->total       = $total_rows;\n+\t\t\t$response->data->page        = $filter->page;\n+\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function list_courses( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response            = new LP_REST_Response();\n+\t\t$response->data      = new stdClass();\n+\t\t$listCoursesTemplate = ListCoursesTemplate::instance();\n+\t\t$pagination_type     = LP_Settings::get_option( 'course_pagination_type' );\n+\n+\t\ttry {\n+\t\t\t$filter = new LP_Course_Filter();\n+\t\t\tCourses::handle_params_for_query_courses( $filter, $request->get_params() );\n+\n+\t\t\t\u002F\u002F Check is in category page.\n+\t\t\t\u002F*if ( ! empty( $request->get_param( 'page_term_id_current' ) ) &&\n+\t\t\t\tempty( $request->get_param( 'term_id' ) ) ) {\n+\t\t\t\t$filter->term_ids[] = $request->get_param( 'page_term_id_current' );\n+\t\t\t} \u002F\u002F Check is in tag page.\n+\t\t\telseif ( ! empty( $request->get_param( 'page_tag_id_current' ) ) &&\n+\t\t\t\t\tempty( $request->get_param( 'tag_id' ) ) ) {\n+\t\t\t\t$filter->tag_ids[] = $request->get_param( 'page_tag_id_current' );\n+\t\t\t}*\u002F\n+\n+\t\t\t$total_rows = 0;\n+\t\t\t$filter     = apply_filters( 'lp\u002Fapi\u002Fcourses\u002Ffilter', $filter, $request );\n+\n+\t\t\t$courses     = Courses::get_courses( $filter, $total_rows );\n+\t\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t\t$return_type = $request['return_type'] ?? 'html';\n+\t\t\tif ( 'json' === $return_type ) {\n+\t\t\t\t$response->data->courses     = $courses;\n+\t\t\t\t$response->data->total_pages = $total_pages;\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F For return data has html\n+\t\t\t\tob_start();\n+\t\t\t\tif ( $courses ) {\n+\t\t\t\t\tif ( ! empty( $request['c_suggest'] ) ) {\n+\t\t\t\t\t\t$data = array(\n+\t\t\t\t\t\t\t'courses'      => $courses,\n+\t\t\t\t\t\t\t'keyword'      => $request['c_search'],\n+\t\t\t\t\t\t\t'total_course' => $total_rows,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest\u002Flayout', $data );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tglobal $wp, $post;\n+\n+\t\t\t\t\t\t\u002F\u002F Template Pagination.\n+\t\t\t\t\t\tswitch ( $pagination_type ) {\n+\t\t\t\t\t\t\tcase 'load-more':\n+\t\t\t\t\t\t\t\tif ( $filter->page \u003C $total_pages ) {\n+\t\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_load_more();\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tcase 'infinite':\n+\t\t\t\t\t\t\t\tif ( $filter->page \u003C $total_pages ) {\n+\t\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_infinite();\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t\t$pagination_args            = [\n+\t\t\t\t\t\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t\t\t\t\t\t'paged'       => $filter->page,\n+\t\t\t\t\t\t\t\t\t'base'        => add_query_arg( 'paged', '%#%', learn_press_get_page_link( 'courses' ) ),\n+\t\t\t\t\t\t\t\t];\n+\t\t\t\t\t\t\t\t$response->data->pagination = $listCoursesTemplate->html_pagination_number( $pagination_args );\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$response->data->pagination_type = $pagination_type;\n+\t\t\t\t\t\t\u002F\u002F End Pagination\n+\n+\t\t\t\t\t\t\u002F\u002F For custom template\n+\t\t\t\t\t\t$template_path = apply_filters( 'lp\u002Fapi\u002Fcourses\u002Ftemplate', '', $request );\n+\t\t\t\t\t\tif ( ! empty( $template_path ) ) {\n+\t\t\t\t\t\t\tTemplate::instance()->get_template( $template_path, compact( 'courses', 'total_pages', 'request' ) );\n+\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t\t\t\t\t$post = get_post( $course->ID );\n+\t\t\t\t\t\t\t\tsetup_postdata( $post );\n+\t\t\t\t\t\t\t\tTemplate::instance()->get_frontend_template( 'content-course.php' );\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\twp_reset_postdata();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t\u002F\u002F End content items\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tLearnPress::instance()->template( 'course' )->no_courses_found();\n+\t\t\t\t}\n+\n+\t\t\t\t$response->data->content = ob_get_clean();\n+\t\t\t\t$response->data->totals  = $total_rows;\n+\n+\t\t\t\t$from = 1 + ( $filter->page - 1 ) * $filter->limit;\n+\t\t\t\t$to   = ( $filter->page * $filter->limit > $total_rows ) ? $total_rows : $filter->page * $filter->limit;\n+\n+\t\t\t\tif ( 0 === $total_rows ) {\n+\t\t\t\t\t$response->data->from_to = '';\n+\t\t\t\t} elseif ( 1 === $total_rows ) {\n+\t\t\t\t\t$response->data->from_to = esc_html__( 'Showing only one result', 'learnpress' );\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( $from == $to ) {\n+\t\t\t\t\t\t$response->data->from_to = sprintf( esc_html__( 'Showing last course of %s results', 'learnpress' ), $total_rows );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tswitch ( $pagination_type ) {\n+\t\t\t\t\t\t\tcase 'load-more':\n+\t\t\t\t\t\t\tcase 'infinite':\n+\t\t\t\t\t\t\t\t$from_to = $filter->page * $filter->limit;\n+\t\t\t\t\t\t\t\tif ( $from_to > $total_rows ) {\n+\t\t\t\t\t\t\t\t\t$from_to = $total_rows;\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t\t$from_to = $from . '-' . $to;\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$response->data->from_to = sprintf( esc_html__( 'Showing %1$s of %2$s results', 'learnpress' ), $from_to, $total_rows );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->data->content = $e->getMessage();\n+\t\t\t$response->message       = $e->getMessage();\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\n+\t}\n+\n+\t\u002F**\n+\t * Get list courses - Widget Elementor\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function courses_widget_by_page( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = new stdClass();\n+\n+\t\ttry {\n+\t\t\t$settings                = array_merge(\n+\t\t\t\t$request->get_params(),\n+\t\t\t\t[\n+\t\t\t\t\t'courses_ul_classes' => [ 'list-courses-elm' ],\n+\t\t\t\t]\n+\t\t\t);\n+\t\t\t$response->data->content = ListCoursesByPageElementor::render_data_from_setting( $settings );\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\t$response->data->content = $e->getMessage();\n+\t\t\t$response->message       = $e->getMessage();\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Frest-api\u002Ffrontend\u002Fcourse\u002Farchive_course\u002Fresponse', $response );\n+\t}\n+\n+\t\u002F**\n+\t * Rest API for Enroll in single course.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @author Nhamdv\n+\t * @editor tungnx\n+\t * @version 1.0.3\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function enroll_courses( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = new stdClass();\n+\n+\t\ttry {\n+\t\t\t$course_id = absint( $request['id'] ?? 0 );\n+\t\t\t$course    = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid course!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user_id    = get_current_user_id();\n+\t\t\t$user       = UserModel::find( $user_id, true );\n+\t\t\t$can_enroll = $course->can_enroll( $user );\n+\t\t\tif ( $can_enroll instanceof WP_Error ) {\n+\t\t\t\tthrow new Exception( $can_enroll->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Case: if user bought course\n+\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\tif ( $userCourse && $userCourse->has_purchased() ) {\n+\t\t\t\t$userCourse->graduation = LP_COURSE_GRADUATION_IN_PROGRESS;\n+\t\t\t\t$userCourse->status     = LP_COURSE_ENROLLED;\n+\t\t\t\t$userCourse->start_time = gmdate( LP_Datetime::$format, time() );\n+\t\t\t\t$userCourse->save();\n+\n+\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $userCourse->ref_id, $course_id, $user->get_id() );\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Send mail user enrolled course\n+\t\t\t\t * @uses SendEmailAjax::send_mail_user_enrolled_course()\n+\t\t\t\t *\u002F\n+\t\t\t\t$data_send = [\n+\t\t\t\t\t$userCourse->ref_id,\n+\t\t\t\t\t$course_id,\n+\t\t\t\t\t$user->get_id(),\n+\t\t\t\t];\n+\t\t\t\tLPBackgroundAjax::handle(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'params'       => $data_send,\n+\t\t\t\t\t\t'lp-load-ajax' => 'send_mail_user_enrolled_course',\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\t\t\t} else { \u002F\u002F Case enroll course free\n+\t\t\t\t$cart     = LearnPress::instance()->cart;\n+\t\t\t\t$checkout = LP_Checkout::instance();\n+\n+\t\t\t\tif ( ! learn_press_enable_cart() ) {\n+\t\t\t\t\t$cart->empty_cart();\n+\t\t\t\t}\n+\n+\t\t\t\t$cart_id = $cart->add_to_cart( $course_id );\n+\t\t\t\tif ( ! $cart_id ) {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t\t$order_id = $checkout->create_order();\n+\t\t\t\t\t$order    = new LP_Order( $order_id );\n+\t\t\t\t\t$order->payment_complete();\n+\n+\t\t\t\t\t$cart->empty_cart();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t$response->message = esc_html__(\n+\t\t\t\t\t'Congrats! You have enrolled in the course successfully. Redirecting...',\n+\t\t\t\t\t'learnpress'\n+\t\t\t\t);\n+\n+\t\t\t\t$first_item_id            = $course->get_first_item_id();\n+\t\t\t\t$response->data->redirect = $first_item_id ? $course->get_item_link( $first_item_id ) : get_the_permalink( $course->get_id() );\n+\t\t\t} else {\n+\t\t\t\t$redirect_url = LP_Page_Controller::get_link_page( 'checkout', [], true );\n+\t\t\t\t$redirect_url = apply_filters(\n+\t\t\t\t\t'learnpress\u002Frest-api\u002Fcourses\u002Fenroll\u002Fredirect',\n+\t\t\t\t\t$redirect_url,\n+\t\t\t\t\t$course_id\n+\t\t\t\t);\n+\n+\t\t\t\tif ( empty( $redirect_url ) ) {\n+\t\t\t\t\tthrow new Exception( __( 'Error: Please set up a page for checkout.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$redirect_url             = LP_Helper::get_link_no_cache( $redirect_url );\n+\t\t\t\t$response->message        = esc_html__( 'Redirecting...', 'learnpress' );\n+\t\t\t\t$response->data->redirect = esc_url_raw( $redirect_url );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Rest API for Purchase course in single course.\n+\t *\n+\t * @param WP_REST_Request $request .\n+\t *\n+\t * @return WP_REST_Response|WP_Error\n+\t * @throws Exception .\n+\t * @author Nhamdv\n+\t *\u002F\n+\tpublic function purchase_course( WP_REST_Request $request ) {\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = new stdClass();\n+\t\t$params         = $request->get_params();\n+\n+\t\ttry {\n+\t\t\t$course_id             = $params['id'];\n+\t\t\t$allow_repurchase_type = $params['repurchaseType'] ?? false;\n+\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\tthrow new Exception( __( 'Error: Invalid Course ID.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'Error: No Course available.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user_id      = get_current_user_id();\n+\t\t\t$user         = UserModel::find( $user_id, true );\n+\t\t\t$can_purchase = $course->can_purchase( $user );\n+\t\t\tif ( $can_purchase instanceof WP_Error ) {\n+\t\t\t\tthrow new Exception( $can_purchase->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$userCourse         = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t$option_repurchase  = [\n+\t\t\t\t'reset' => esc_html__( 'Reset course progress', 'learnpress' ),\n+\t\t\t\t'keep'  => esc_html__( 'Keep course progress', 'learnpress' ),\n+\t\t\t];\n+\t\t\t$html_li_repurchase = '';\n+\t\t\tforeach ( $option_repurchase as $key => $value ) {\n+\t\t\t\t$html_li_repurchase .= sprintf(\n+\t\t\t\t\t'\u003Cli>\u003Clabel>%s\u003C\u002Flabel>\u003C\u002Fli>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cinput name=\"_lp_allow_repurchase_type\" value=\"%s\" type=\"radio\" checked=\"checked\"\u002F> %s',\n+\t\t\t\t\t\t$key,\n+\t\t\t\t\t\t$value\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$repurchase_type          = $course->get_type_repurchase();\n+\t\t\t$section_popup_repurchase = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp_allow_repurchase_select\">',\n+\t\t\t\t'ul'          => '\u003Cul>',\n+\t\t\t\t'list'        => $html_li_repurchase,\n+\t\t\t\t'ul_end'      => '\u003C\u002Ful>',\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\tif ( $course->enable_allow_repurchase()\n+\t\t\t\t&& $user_id && $userCourse\n+\t\t\t\t&& empty( $allow_repurchase_type ) ) {\n+\t\t\t\tif ( $repurchase_type === 'popup' ) {\n+\t\t\t\t\t$response->data->html       = Template::combine_components( $section_popup_repurchase );\n+\t\t\t\t\t$response->data->type       = 'allow_repurchase';\n+\t\t\t\t\t$response->data->titlePopup = esc_html__( 'Repurchase Options', 'learnpress' );\n+\t\t\t\t\t$response->status           = 'success';\n+\n+\t\t\t\t\treturn rest_ensure_response( $response );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$cart = LearnPress::instance()->cart;\n+\t\t\tif ( ! learn_press_enable_cart() ) {\n+\t\t\t\t$cart->empty_cart();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F @deprecated hook since v4.2.7.3\n+\t\t\t\u002F\u002Fdo_action( 'learnpress\u002Frest-api\u002Fcourses\u002Fpurchase\u002Fbefore-add-to-cart' );\n+\n+\t\t\t$cart_id = $cart->add_to_cart( $course_id, 1, $params );\n+\t\t\tif ( empty( $cart_id ) ) {\n+\t\t\t\tthrow new Exception( __( 'Error: The course cannot be added to the cart.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $allow_repurchase_type ) && $userCourse ) {\n+\t\t\t\tlearn_press_update_user_item_meta( $userCourse->get_user_item_id(), '_lp_allow_repurchase_type', $allow_repurchase_type );\n+\t\t\t}\n+\n+\t\t\t$redirect_url = LP_Page_Controller::get_link_page( 'checkout', [], true );\n+\t\t\t$redirect_url = apply_filters(\n+\t\t\t\t'learnpress\u002Frest-api\u002Fcourses\u002Fpurchase\u002Fredirect',\n+\t\t\t\t$redirect_url,\n+\t\t\t\t$course_id,\n+\t\t\t\t$cart_id\n+\t\t\t);\n+\n+\t\t\tif ( empty( $redirect_url ) ) {\n+\t\t\t\tthrow new Exception( __( 'Error: Please set up a page for checkout.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$redirect_url             = LP_Helper::get_link_no_cache( $redirect_url );\n+\t\t\t$response->status         = 'success';\n+\t\t\t$response->message        = sprintf(\n+\t\t\t\tesc_html__( '\"%s\" has been added to your cart. Redirecting...', 'learnpress' ),\n+\t\t\t\t$course->get_title()\n+\t\t\t);\n+\t\t\t$response->data->redirect = esc_url_raw( $redirect_url );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Rest API for retake course.\n+\t *\n+\t * @param WP_REST_Request $request .\n+\t *\n+\t * @throws Exception .\n+\t *\u002F\n+\tpublic function retake_course( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$course_id = $request->get_param( 'id' );\n+\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid params', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid user', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\tif ( ! $userCourseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid user course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userCourseModel->handle_retake();\n+\t\t\t$item_continue = $userCourseModel->get_item_continue();\n+\t\t\tif ( $item_continue ) {\n+\t\t\t\t$link_continue = $courseModel->get_item_link( $item_continue->ID );\n+\t\t\t} else {\n+\t\t\t\t$link_continue = $courseModel->get_permalink();\n+\t\t\t}\n+\n+\t\t\t$response->status             = 'success';\n+\t\t\t$response->message            = esc_html__( 'Now you can begin this course', 'learnpress' );\n+\t\t\t$response->data->url_redirect = $link_continue;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function get_items( $request ) {\n+\t\t$settings = LP_Settings::instance();\n+\t\t$response = array(\n+\t\t\t'result' => $settings->get(),\n+\t\t);\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function get_item( $request ) {\n+\t\t$settings = LP_Settings::instance();\n+\t\t$response = array(\n+\t\t\t'result' => $settings->get( $request['key'] ),\n+\t\t);\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function update_item( $request ) {\n+\t\t$response = array();\n+\t\t$settings = LP_Settings::instance();\n+\t\t$option   = $settings->get( $request['key'] );\n+\n+\t\t$settings->update( $request['key'], $request['data'] );\n+\t\t$new_option = $settings->get( $request['key'] );\n+\t\t$success    = maybe_serialize( $option ) !== maybe_serialize( $new_option );\n+\n+\t\t$response['success'] = $success;\n+\t\t$response['result']  = $success ? $new_option : $option;\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function delete_item( $request ) {\n+\t\t$response = array();\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Rest API for get item continue in single course.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.1.4\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function continue_course( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$params         = $request->get_params();\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\t$flag_found = false;\n+\t\t\t$item_link  = '';\n+\t\t\t$course_id  = absint( $params['courseId'] ?? 0 );\n+\t\t\t$user_id    = absint( $params['userId'] ?? 0 );\n+\n+\t\t\t$user   = UserModel::find( $user_id, true );\n+\t\t\t$course = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn $response;\n+\t\t\t}\n+\n+\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\tif ( ! $userCourseModel ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid user course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$sections_items = $course->get_section_items();\n+\t\t\t$total_items    = $course->get_total_items();\n+\n+\t\t\tif ( ! empty( $total_items ) ) {\n+\t\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\t\tif ( $flag_found ) {\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t\t$item_id   = $item->id ?? $item->item_id;\n+\t\t\t\t\t\t$item_type = $item->type ?? $item->item_type;\n+\n+\t\t\t\t\t\t$userItemModel = UserItemModel::find_user_item(\n+\t\t\t\t\t\t\t$user_id,\n+\t\t\t\t\t\t\t$item_id,\n+\t\t\t\t\t\t\t$item_type,\n+\t\t\t\t\t\t\t$course_id,\n+\t\t\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t\t\ttrue\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tif ( ! $userItemModel || $userItemModel->get_status() !== LP_ITEM_COMPLETED ) {\n+\t\t\t\t\t\t\t$item_link  = $course->get_item_link( $item->id );\n+\t\t\t\t\t\t\t$flag_found = true;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $flag_found ) {\n+\t\t\t\t\t$item_link = $course->get_item_link( $course->get_first_item_id() );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$response->data    = $item_link;\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = '';\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-instructor-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-instructor-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-instructor-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-instructor-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,111 +1,111 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\ListInstructorsTemplate;\r\n-\r\n-\u002F**\r\n- * REST API LP Instructor.\r\n- *\r\n- * @class LP_REST_Instructor_Controller\r\n- * @author thimpress\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LP_REST_Instructor_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'instructors';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'list_instructors' ),\r\n-\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t'posts_per_page' => array(\r\n-\t\t\t\t\t\t'required'    => false,\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t'description' => 'The posts per page must be an integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'page'           => array(\r\n-\t\t\t\t\t\t'required'    => false,\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t\t'description' => 'The page must be an integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list instructor attend\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function list_instructors( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params      = $request->get_params();\r\n-\t\t\t$roles_query = [ LP_TEACHER_ROLE ];\r\n-\t\t\tif ( 'yes' === LP_Settings::get_option( 'show_admin_on_list_instructors', 'yes' ) ) {\r\n-\t\t\t\t$roles_query[] = ADMIN_ROLE;\r\n-\t\t\t}\r\n-\t\t\t$args = apply_filters(\r\n-\t\t\t\t'learnpress\u002Finstructor-list\u002Fargs',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'fields'   => [ 'ID' ],\r\n-\t\t\t\t\t'number'   => LP_Settings::get_option( 'instructor_per_page', 12 ),\r\n-\t\t\t\t\t'paged'    => $params['paged'] ?? 1,\r\n-\t\t\t\t\t'orderby'  => $params['orderby'] ?? 'display_name',\r\n-\t\t\t\t\t'order'    => $params['order'] ?? 'asc',\r\n-\t\t\t\t\t'role__in' => $roles_query,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$query = new WP_User_Query( $args );\r\n-\r\n-\t\t\t$instructors = $query->get_results();\r\n-\t\t\t\u002F\u002FContent\r\n-\t\t\tob_start();\r\n-\t\t\tif ( empty( $instructors ) ) {\r\n-\t\t\t\techo '\u003Cli class=\"no-instructor\">' . __( 'No instructor found!', 'learnpress' ) . '\u003C\u002Fli>';\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var LP_User $instructor\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$instructors_template = ListInstructorsTemplate::instance();\r\n-\t\t\t\tforeach ( $instructors as $instructor_obj ) {\r\n-\t\t\t\t\t$instructor = UserModel::find( $instructor_obj->ID, true );\r\n-\t\t\t\t\techo $instructors_template->instructor_item( $instructor );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$instructor_total = $query->get_total();\r\n-\r\n-\t\t\t\t\u002F\u002F Paginate\r\n-\t\t\t\t$response->data->pagination = $instructors_template->instructors_pagination(\r\n-\t\t\t\t\t$args['paged'],\r\n-\t\t\t\t\t$args['number'],\r\n-\t\t\t\t\t$instructor_total\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$response->data->content = ob_get_clean();\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\ListInstructorsTemplate;\n+\n+\u002F**\n+ * REST API LP Instructor.\n+ *\n+ * @class LP_REST_Instructor_Controller\n+ * @author thimpress\n+ * @version 1.0.0\n+ *\u002F\n+class LP_REST_Instructor_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'instructors';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t'callback'            => array( $this, 'list_instructors' ),\n+\t\t\t\t'args'                => array(\n+\t\t\t\t\t'posts_per_page' => array(\n+\t\t\t\t\t\t'required'    => false,\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t'description' => 'The posts per page must be an integer',\n+\t\t\t\t\t),\n+\t\t\t\t\t'page'           => array(\n+\t\t\t\t\t\t'required'    => false,\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t\t'description' => 'The page must be an integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Get list instructor attend\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function list_instructors( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params      = $request->get_params();\n+\t\t\t$roles_query = [ LP_TEACHER_ROLE ];\n+\t\t\tif ( 'yes' === LP_Settings::get_option( 'show_admin_on_list_instructors', 'yes' ) ) {\n+\t\t\t\t$roles_query[] = ADMIN_ROLE;\n+\t\t\t}\n+\t\t\t$args = apply_filters(\n+\t\t\t\t'learnpress\u002Finstructor-list\u002Fargs',\n+\t\t\t\tarray(\n+\t\t\t\t\t'fields'   => [ 'ID' ],\n+\t\t\t\t\t'number'   => LP_Settings::get_option( 'instructor_per_page', 12 ),\n+\t\t\t\t\t'paged'    => $params['paged'] ?? 1,\n+\t\t\t\t\t'orderby'  => $params['orderby'] ?? 'display_name',\n+\t\t\t\t\t'order'    => $params['order'] ?? 'asc',\n+\t\t\t\t\t'role__in' => $roles_query,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$query = new WP_User_Query( $args );\n+\n+\t\t\t$instructors = $query->get_results();\n+\t\t\t\u002F\u002FContent\n+\t\t\tob_start();\n+\t\t\tif ( empty( $instructors ) ) {\n+\t\t\t\techo '\u003Cli class=\"no-instructor\">' . __( 'No instructor found!', 'learnpress' ) . '\u003C\u002Fli>';\n+\t\t\t} else {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var LP_User $instructor\n+\t\t\t\t *\u002F\n+\t\t\t\t$instructors_template = ListInstructorsTemplate::instance();\n+\t\t\t\tforeach ( $instructors as $instructor_obj ) {\n+\t\t\t\t\t$instructor = UserModel::find( $instructor_obj->ID, true );\n+\t\t\t\t\techo $instructors_template->instructor_item( $instructor );\n+\t\t\t\t}\n+\n+\t\t\t\t$instructor_total = $query->get_total();\n+\n+\t\t\t\t\u002F\u002F Paginate\n+\t\t\t\t$response->data->pagination = $instructors_template->instructors_pagination(\n+\t\t\t\t\t$args['paged'],\n+\t\t\t\t\t$args['number'],\n+\t\t\t\t\t$instructor_total\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$response->data->content = ob_get_clean();\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-lazy-load-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-lazy-load-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-lazy-load-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-lazy-load-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,329 +1,329 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Lazy_Load_Controller\r\n- *\u002F\r\n-class LP_REST_Lazy_Load_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'lazy-load';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'course-progress'         => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'user_progress' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn is_user_logged_in();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'course-curriculum'       => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'course_curriculum' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'course-curriculum-items' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'course_curriculum_items' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'items-progress'          => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'items_progress' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn is_user_logged_in();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load items progress in single curriculum items.\r\n-\t *\r\n-\t * @param [type] $request\r\n-\t *\r\n-\t * @return WP_REST_Response|WP_Error\r\n-\t *\r\n-\t * @author Nhamdv \u003Cdaonham95>\r\n-\t *\u002F\r\n-\tpublic function items_progress( $request ) {\r\n-\t\t$params         = $request->get_params();\r\n-\t\t$course_id      = $params['courseId'] ?? 0;\r\n-\t\t$user_id        = get_current_user_id();\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $course->is_no_required_enroll() ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is not required to enroll!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\t$check = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\t\tif ( $check['status'] !== 'success' ) {\r\n-\t\t\t\tthrow new Exception( $check['message'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t\t$response->data   = learn_press_get_template_content(\r\n-\t\t\t\t'single-course\u002Fbuttons\u002Ffinish.php',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'course' => $course,\r\n-\t\t\t\t\t'user'   => $user,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load user_progress in single course.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.1\r\n-\t * @sicne 4.0.0\r\n-\t *\u002F\r\n-\tpublic function user_progress( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$params         = $request->get_params();\r\n-\t\t$course_id      = intval( $params['courseId'] ?? 0 );\r\n-\t\t$user_id        = intval( $params['userId'] ?? 0 );\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $course_id || ! $user_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'Params is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\t\t\tif ( ! $user || $user->is_guest() ) {\r\n-\t\t\t\tthrow new Exception( __( 'You are a Guest', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user->can_create_course() && get_current_user_id() !== $user_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'You are a not permission!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_data = $user->get_course_data( $course->get_id() );\r\n-\t\t\tif ( ! $course_data ) {\r\n-\t\t\t\tthrow new Exception( __( 'You are a not enroll course', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_results = $course_data->calculate_course_results();\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t\t$response->data   = learn_press_get_template_content(\r\n-\t\t\t\t'single-course\u002Fsidebar\u002Fuser-progress',\r\n-\t\t\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load sections of single course\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @author nhamdv\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.2\r\n-\t * @depreacted 4.2.8.7.1\r\n-\t * use new curriculum from LP v4.2.8, so now deprecated this function\r\n-\t *\u002F\r\n-\tpublic function course_curriculum( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.8.7.1' );\r\n-\t\t$response     = new LP_REST_Response();\r\n-\t\treturn $response;\r\n-\t\t$params       = $request->get_params();\r\n-\t\t$total_rows   = 0;\r\n-\t\t$course_id    = absint( $params['courseId'] ?? 0 );\r\n-\t\t$per_page     = LP_Settings::get_option( 'section_per_page', - 1 );\r\n-\t\t$page         = absint( $params['page'] ?? 1 );\r\n-\t\t$section_id   = wp_unslash( $params['sectionID'] ?? false );\r\n-\t\t$item_viewing = absint( $params['idItemViewing'] ?? 0 );\r\n-\r\n-\t\ttry {\r\n-\t\t\tob_start();\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filters                    = new LP_Section_Filter();\r\n-\t\t\t$filters->section_course_id = $course_id;\r\n-\t\t\t$filters->limit             = $per_page;\r\n-\t\t\t$filters->page              = $page;\r\n-\t\t\t$sections_result            = LP_Section_DB::getInstance()->get_sections( $filters, $total_rows );\r\n-\t\t\t$sections_tmp               = [];\r\n-\t\t\tforeach ( $sections_result as $section ) {\r\n-\t\t\t\t$sections_tmp[] = (array) $section;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_page = 1;\r\n-\t\t\tif ( $filters->limit > 0 ) {\r\n-\t\t\t\t$total_page = LP_Database::get_total_pages( $filters->limit, $total_rows );\r\n-\t\t\t}\r\n-\t\t\t$sections = array(\r\n-\t\t\t\t'results' => $sections_tmp,\r\n-\t\t\t\t'total'   => $total_rows,\r\n-\t\t\t\t'pages'   => $total_page,\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! empty( $params['loadMore'] ) ) {\r\n-\t\t\t\tforeach ( $sections_tmp as $section ) {\r\n-\t\t\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t\t\t'loop\u002Fsingle-course\u002Floop-section.php',\r\n-\t\t\t\t\t\tcompact( 'sections', 'section', 'course_id', 'filters' )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t\t'single-course\u002Ftabs\u002Fcurriculum-v2.php',\r\n-\t\t\t\t\tcompact( 'sections', 'course_id', 'filters' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $section_id ) {\r\n-\t\t\t\t$response->data->section_ids = LP_Database::get_values_by_key( $sections_result, 'section_id' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status        = 'success';\r\n-\t\t\t$response->data->pages   = $total_page;\r\n-\t\t\t$response->data->page    = $filters->page;\r\n-\t\t\t$response->data->content = ob_get_clean();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Load items' section on the single course\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response|WP_Error\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.2\r\n-\t * @author nhamdv\r\n-\t *\u002F\r\n-\tpublic function course_curriculum_items( WP_REST_Request $request ) {\r\n-\t\t$params = $request->get_params();\r\n-\r\n-\t\t$section_id = absint( $params['sectionId'] ?? 0 );\r\n-\t\t$course_id  = absint( $params['courseId'] ?? 0 );\r\n-\t\t$per_page   = LP_Settings::get_option( 'course_item_per_page', - 1 );\r\n-\t\t$page       = absint( $params['page'] ?? 1 );\r\n-\r\n-\t\t$response                = new LP_REST_Response();\r\n-\t\t$response->data->content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tob_start();\r\n-\t\t\tif ( empty( $section_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The section is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filters              = new LP_Section_Items_Filter();\r\n-\t\t\t$filters->only_fields = [ 'ID', 'post_title' ];\r\n-\t\t\t$filters->section_id  = $section_id;\r\n-\t\t\t$filters->limit       = $per_page;\r\n-\t\t\t$filters->page        = $page;\r\n-\t\t\t$total_rows           = 0;\r\n-\t\t\t$section_items_result = LP_Section_DB::getInstance()->get_items( $filters, $total_rows );\r\n-\t\t\t$total_pages          = 1;\r\n-\t\t\tif ( $filters->limit > 0 ) {\r\n-\t\t\t\t$total_pages = LP_Database::get_total_pages( $filters->limit, $total_rows );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $section_items_result as $key => $section_item ) {\r\n-\t\t\t\t$section_item = (array) $section_item;\r\n-\t\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'Item not assign to course', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\tthrow new Exception( 'Course is not exists!' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course_item   = $course->get_item( absint( $section_item['ID'] ?? 0 ) );\r\n-\t\t\t\t$can_view_item = new LP_Model_User_Can_View_Course_Item();\r\n-\t\t\t\t$user          = learn_press_get_user( get_current_user_id() );\r\n-\t\t\t\tif ( $user ) {\r\n-\t\t\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $course_id ) );\r\n-\t\t\t\t\t$can_view_item           = $user->can_view_item( $section_item['ID'], $can_view_content_course );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Ordinal numbers\r\n-\t\t\t\t$key = absint( ( ( $page - 1 ) * $per_page ) + $key + 1 );\r\n-\r\n-\t\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t\t'loop\u002Fsingle-course\u002Floop-section-item.php',\r\n-\t\t\t\t\tcompact( 'section_item', 'course_item', 'can_view_item', 'course_id', 'user', 'key' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->data->pages    = $total_pages;\r\n-\t\t\t$response->data->page     = $filters->page;\r\n-\t\t\t$response->data->content  = ob_get_clean();\r\n-\t\t\t$response->data->item_ids = LP_Database::get_values_by_key( $section_items_result );\r\n-\t\t\t$response->status         = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_REST_Lazy_Load_Controller\n+ *\u002F\n+class LP_REST_Lazy_Load_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'lazy-load';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'course-progress'         => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'user_progress' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn is_user_logged_in();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'course-curriculum'       => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'course_curriculum' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'course-curriculum-items' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'course_curriculum_items' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'items-progress'          => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'items_progress' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn is_user_logged_in();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Load items progress in single curriculum items.\n+\t *\n+\t * @param [type] $request\n+\t *\n+\t * @return WP_REST_Response|WP_Error\n+\t *\n+\t * @author Nhamdv \u003Cdaonham95>\n+\t *\u002F\n+\tpublic function items_progress( $request ) {\n+\t\t$params         = $request->get_params();\n+\t\t$course_id      = $params['courseId'] ?? 0;\n+\t\t$user_id        = get_current_user_id();\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $course->is_no_required_enroll() ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is not required to enroll!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\t$check = $user->can_show_finish_course_btn( $course );\n+\n+\t\t\tif ( $check['status'] !== 'success' ) {\n+\t\t\t\tthrow new Exception( $check['message'] );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t\t$response->data   = learn_press_get_template_content(\n+\t\t\t\t'single-course\u002Fbuttons\u002Ffinish.php',\n+\t\t\t\tarray(\n+\t\t\t\t\t'course' => $course,\n+\t\t\t\t\t'user'   => $user,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Load user_progress in single course.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @author Nhamdv \u003Cemail@email.com>\n+\t * @editor tungnx\n+\t * @version 1.0.1\n+\t * @sicne 4.0.0\n+\t *\u002F\n+\tpublic function user_progress( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$params         = $request->get_params();\n+\t\t$course_id      = intval( $params['courseId'] ?? 0 );\n+\t\t$user_id        = intval( $params['userId'] ?? 0 );\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\tif ( ! $course_id || ! $user_id ) {\n+\t\t\t\tthrow new Exception( __( 'Params is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\t\t\tif ( ! $user || $user->is_guest() ) {\n+\t\t\t\tthrow new Exception( __( 'You are a Guest', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $user->can_create_course() && get_current_user_id() !== $user_id ) {\n+\t\t\t\tthrow new Exception( __( 'You are a not permission!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_data = $user->get_course_data( $course->get_id() );\n+\t\t\tif ( ! $course_data ) {\n+\t\t\t\tthrow new Exception( __( 'You are a not enroll course', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_results = $course_data->calculate_course_results();\n+\n+\t\t\t$response->status = 'success';\n+\t\t\t$response->data   = learn_press_get_template_content(\n+\t\t\t\t'single-course\u002Fsidebar\u002Fuser-progress',\n+\t\t\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Load sections of single course\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @author nhamdv\n+\t * @since 4.1.5\n+\t * @version 1.0.2\n+\t * @depreacted 4.2.8.7.1\n+\t * use new curriculum from LP v4.2.8, so now deprecated this function\n+\t *\u002F\n+\tpublic function course_curriculum( WP_REST_Request $request ): LP_REST_Response {\n+\t\t_deprecated_function( __METHOD__, '4.2.8.7.1' );\n+\t\t$response     = new LP_REST_Response();\n+\t\treturn $response;\n+\t\t$params       = $request->get_params();\n+\t\t$total_rows   = 0;\n+\t\t$course_id    = absint( $params['courseId'] ?? 0 );\n+\t\t$per_page     = LP_Settings::get_option( 'section_per_page', - 1 );\n+\t\t$page         = absint( $params['page'] ?? 1 );\n+\t\t$section_id   = wp_unslash( $params['sectionID'] ?? false );\n+\t\t$item_viewing = absint( $params['idItemViewing'] ?? 0 );\n+\n+\t\ttry {\n+\t\t\tob_start();\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$filters                    = new LP_Section_Filter();\n+\t\t\t$filters->section_course_id = $course_id;\n+\t\t\t$filters->limit             = $per_page;\n+\t\t\t$filters->page              = $page;\n+\t\t\t$sections_result            = LP_Section_DB::getInstance()->get_sections( $filters, $total_rows );\n+\t\t\t$sections_tmp               = [];\n+\t\t\tforeach ( $sections_result as $section ) {\n+\t\t\t\t$sections_tmp[] = (array) $section;\n+\t\t\t}\n+\n+\t\t\t$total_page = 1;\n+\t\t\tif ( $filters->limit > 0 ) {\n+\t\t\t\t$total_page = LP_Database::get_total_pages( $filters->limit, $total_rows );\n+\t\t\t}\n+\t\t\t$sections = array(\n+\t\t\t\t'results' => $sections_tmp,\n+\t\t\t\t'total'   => $total_rows,\n+\t\t\t\t'pages'   => $total_page,\n+\t\t\t);\n+\n+\t\t\tif ( ! empty( $params['loadMore'] ) ) {\n+\t\t\t\tforeach ( $sections_tmp as $section ) {\n+\t\t\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t\t\t'loop\u002Fsingle-course\u002Floop-section.php',\n+\t\t\t\t\t\tcompact( 'sections', 'section', 'course_id', 'filters' )\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t\t'single-course\u002Ftabs\u002Fcurriculum-v2.php',\n+\t\t\t\t\tcompact( 'sections', 'course_id', 'filters' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( $section_id ) {\n+\t\t\t\t$response->data->section_ids = LP_Database::get_values_by_key( $sections_result, 'section_id' );\n+\t\t\t}\n+\n+\t\t\t$response->status        = 'success';\n+\t\t\t$response->data->pages   = $total_page;\n+\t\t\t$response->data->page    = $filters->page;\n+\t\t\t$response->data->content = ob_get_clean();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Load items' section on the single course\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response|WP_Error\n+\t * @since 4.1.5\n+\t * @version 1.0.2\n+\t * @author nhamdv\n+\t *\u002F\n+\tpublic function course_curriculum_items( WP_REST_Request $request ) {\n+\t\t$params = $request->get_params();\n+\n+\t\t$section_id = absint( $params['sectionId'] ?? 0 );\n+\t\t$course_id  = absint( $params['courseId'] ?? 0 );\n+\t\t$per_page   = LP_Settings::get_option( 'course_item_per_page', - 1 );\n+\t\t$page       = absint( $params['page'] ?? 1 );\n+\n+\t\t$response                = new LP_REST_Response();\n+\t\t$response->data->content = '';\n+\n+\t\ttry {\n+\t\t\tob_start();\n+\t\t\tif ( empty( $section_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The section is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$filters              = new LP_Section_Items_Filter();\n+\t\t\t$filters->only_fields = [ 'ID', 'post_title' ];\n+\t\t\t$filters->section_id  = $section_id;\n+\t\t\t$filters->limit       = $per_page;\n+\t\t\t$filters->page        = $page;\n+\t\t\t$total_rows           = 0;\n+\t\t\t$section_items_result = LP_Section_DB::getInstance()->get_items( $filters, $total_rows );\n+\t\t\t$total_pages          = 1;\n+\t\t\tif ( $filters->limit > 0 ) {\n+\t\t\t\t$total_pages = LP_Database::get_total_pages( $filters->limit, $total_rows );\n+\t\t\t}\n+\n+\t\t\tforeach ( $section_items_result as $key => $section_item ) {\n+\t\t\t\t$section_item = (array) $section_item;\n+\t\t\t\tif ( ! $course_id ) {\n+\t\t\t\t\t$course_id = LP_Section_DB::getInstance()->get_course_id_by_section( $section_id );\n+\t\t\t\t}\n+\t\t\t\tif ( ! $course_id ) {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'Item not assign to course', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\tthrow new Exception( 'Course is not exists!' );\n+\t\t\t\t}\n+\n+\t\t\t\t$course_item   = $course->get_item( absint( $section_item['ID'] ?? 0 ) );\n+\t\t\t\t$can_view_item = new LP_Model_User_Can_View_Course_Item();\n+\t\t\t\t$user          = learn_press_get_user( get_current_user_id() );\n+\t\t\t\tif ( $user ) {\n+\t\t\t\t\t$can_view_content_course = $user->can_view_content_course( absint( $course_id ) );\n+\t\t\t\t\t$can_view_item           = $user->can_view_item( $section_item['ID'], $can_view_content_course );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Ordinal numbers\n+\t\t\t\t$key = absint( ( ( $page - 1 ) * $per_page ) + $key + 1 );\n+\n+\t\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t\t'loop\u002Fsingle-course\u002Floop-section-item.php',\n+\t\t\t\t\tcompact( 'section_item', 'course_item', 'can_view_item', 'course_id', 'user', 'key' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$response->data->pages    = $total_pages;\n+\t\t\t$response->data->page     = $filters->page;\n+\t\t\t$response->data->content  = ob_get_clean();\n+\t\t\t$response->data->item_ids = LP_Database::get_values_by_key( $section_items_result );\n+\t\t\t$response->status         = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,566 +1,566 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Rest_Material_Controller\r\n- * in LearnPres > Downloadable Materials\r\n- *\r\n- * @since 4.2.2\r\n- * @author khanhbd\r\n- * @version 1.0.2\r\n- *\u002F\r\n-class LP_Rest_Material_Controller extends LP_Abstract_REST_Controller {\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1\u002F';\r\n-\t\t$this->rest_base = 'material';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'item-materials\u002F(?P\u003Citem_id>[\\d]+)' => array(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'item_id' => array(\r\n-\t\t\t\t\t\t'description'       => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'              => 'integer',\r\n-\t\t\t\t\t\t'sanitize_callback' => 'absint',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'save_post_materials' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'data' => array(\r\n-\t\t\t\t\t\t\t'description'       => esc_html__( 'Data of material', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'              => 'string',\r\n-\t\t\t\t\t\t\t'required'          => true,\r\n-\t\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'file' => array(\r\n-\t\t\t\t\t\t\t'description' => esc_html__( 'File.', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'        => 'array',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'backend_get_materials_by_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'update_material_orders' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\r\n-\t\t\t\t\t'args'                => array(\r\n-\t\t\t\t\t\t'sort_arr' => array(\r\n-\t\t\t\t\t\t\t'description'       => esc_html__( 'Material orders', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'type'              => 'string',\r\n-\t\t\t\t\t\t\t'required'          => true,\r\n-\t\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'(?P\u003Cfile_id>[\\d]+)'                => array(\r\n-\t\t\t\t'args' => array(\r\n-\t\t\t\t\t'file_id' => array(\r\n-\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'integer',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'delete_material' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t\u002F*'by-item'                           => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_materials_by_item' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),*\u002F\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save files materials\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.2\r\n-\t *\u002F\r\n-\tpublic function save_post_materials( WP_REST_Request $request ) {\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = [];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params               = $request->get_params();\r\n-\t\t\t$item_id              = $params['item_id'] ?? 0;\r\n-\t\t\t$material_data_string = $params['data'] ?? false;\r\n-\t\t\t$upload_file          = $request->get_file_params();\r\n-\r\n-\t\t\tif ( empty( $item_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid course or lesson', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $material_data_string ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid materials', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$material_data = LP_Helper::json_decode( wp_unslash( $material_data_string ), true );\r\n-\t\t\t$file          = $upload_file['file'] ?? false;\r\n-\r\n-\t\t\t\u002F\u002F DB Init\r\n-\t\t\t$material_db = LP_Material_Files_DB::getInstance();\r\n-\t\t\t\u002F\u002F LP Material Settings\r\n-\t\t\t$max_file_size       = (int) LP_Settings::get_option( 'material_max_file_size', 2 );\r\n-\t\t\t$allow_upload_amount = (int) LP_Settings::get_option( 'material_upload_files', 2 );\r\n-\t\t\t\u002F\u002F check file was uploaded\r\n-\t\t\t$count_uploaded_files = count( $material_db->get_material_by_item_id( $item_id, 0, 0, 1 ) );\r\n-\t\t\t\u002F\u002F check file amount which can upload\r\n-\t\t\t$can_upload = $allow_upload_amount - $count_uploaded_files;\r\n-\r\n-\t\t\t\u002F\u002FCheck file amount validation\r\n-\t\t\tif ( $can_upload \u003C= 0 ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Material feature is not allowed to upload', 'learnpress' ) );\r\n-\t\t\t} elseif ( $allow_upload_amount > 0 ) {\r\n-\t\t\t\tif ( count( $material_data ) > $can_upload ) {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'Your uploaded files reach the maximum amount!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$file_methods     = array( 'upload', 'external' );\r\n-\t\t\t$error_messages   = '';\r\n-\t\t\t$success_messages = '';\r\n-\t\t\tforeach ( $material_data as $key => $material ) {\r\n-\t\t\t\t$label     = LP_Helper::sanitize_params_submitted( $material['label'] ?? '' );\r\n-\t\t\t\t$method    = $material['method'] ?? '';\r\n-\t\t\t\t$file_name = $file['name'][ $key ] ?? '';\r\n-\r\n-\t\t\t\t\u002F\u002F check file title\r\n-\t\t\t\tif ( empty( $label ) ) {\r\n-\t\t\t\t\t$error_messages .= sprintf( __( 'File \"%s\" title is not empty!', 'learnpress' ), $file_name );\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t\u002F\u002F check file upload method\r\n-\t\t\t\tif ( ! in_array( $method, $file_methods ) ) {\r\n-\t\t\t\t\t$error_messages .= sprintf( __( 'File %s method is invalid!', 'learnpress' ), $label );\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$file_path = '';\r\n-\t\t\t\tif ( $method == 'upload' ) {\r\n-\t\t\t\t\tif ( $file['size'][ $key ] > $max_file_size * 1024 * 1024 ) {\r\n-\t\t\t\t\t\t$error_messages .= sprintf( __( 'File %s size is too large!', 'learnpress' ), $label );\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check type file\r\n-\t\t\t\t\t$file_info = wp_check_filetype( $file_name );\r\n-\t\t\t\t\t$file_type = $file_info['ext'] ?? '';\r\n-\t\t\t\t\tif ( empty( $file_info['ext'] )\r\n-\t\t\t\t\t\t|| false === $this->material_check_file_extention( $file_info['ext'] )\r\n-\t\t\t\t\t\t|| ! in_array( $file_info['type'], get_allowed_mime_types() ) ) {\r\n-\t\t\t\t\t\t$error_messages .= sprintf( esc_html__( 'File %s type is invalid!', 'learnpress' ), $label );\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tLP_WP_Filesystem::instance();\r\n-\t\t\t\t\t$file_uploading     = [\r\n-\t\t\t\t\t\t'name'     => $file_name,\r\n-\t\t\t\t\t\t'type'     => $file_type,\r\n-\t\t\t\t\t\t'tmp_name' => $file['tmp_name'][ $key ],\r\n-\t\t\t\t\t\t'error'    => $file['error'][ $key ],\r\n-\t\t\t\t\t\t'size'     => $file['size'][ $key ],\r\n-\t\t\t\t\t];\r\n-\t\t\t\t\t$file_handle_upload = wp_handle_upload( $file_uploading, [ 'test_form' => false ] );\r\n-\t\t\t\t\tif ( ! empty( $file_handle_upload['error'] ) ) {\r\n-\t\t\t\t\t\t$error_messages .= sprintf( esc_html__( 'File %s: ', 'learnpress' ), $label ) . $file_handle_upload['error'];\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$file_path = str_replace( wp_upload_dir()['baseurl'], '', $file_handle_upload['url'] );\r\n-\t\t\t\t} elseif ( $method == 'external' ) {\r\n-\t\t\t\t\t$file_path   = sanitize_url( $material['link'] );\r\n-\t\t\t\t\t$file_info   = pathinfo( $file_path );\r\n-\t\t\t\t\t$file_extend = $file_info['extension'] ?? '';\r\n-\t\t\t\t\tif ( ! $file_extend ) {\r\n-\t\t\t\t\t\t$file_type = __( 'Unknown', 'learnpress' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$file_type = $file_extend;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$check_allow_file = $this->check_wp_allowed_file_type( $file_extend );\r\n-\t\t\t\t\tif ( ! $check_allow_file ) {\r\n-\t\t\t\t\t\t$error_messages .= sprintf(\r\n-\t\t\t\t\t\t\tesc_html__( 'An error occurred while checking %1$s. %2$s', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$label,\r\n-\t\t\t\t\t\t\t__( 'Oops! That file type isn’t allowed.', 'learnpress' )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F For a long time remove this code. @since 4.2.6.6\r\n-\t\t\t\t\t$material_db->wpdb->query(\r\n-\t\t\t\t\t\t\"ALTER TABLE $material_db->tb_lp_files MODIFY file_type VARCHAR(100) NOT NULL DEFAULT '';\"\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$orders     = $count_uploaded_files + $key + 1;\r\n-\t\t\t\t$insert_arr = [\r\n-\t\t\t\t\t'file_name'  => sanitize_text_field( $label ),\r\n-\t\t\t\t\t'file_type'  => $file_type ?? '',\r\n-\t\t\t\t\t'item_id'    => (int) $item_id,\r\n-\t\t\t\t\t'item_type'  => get_post_type( $item_id ),\r\n-\t\t\t\t\t'method'     => $method,\r\n-\t\t\t\t\t'file_path'  => $file_path,\r\n-\t\t\t\t\t'orders'     => $orders,\r\n-\t\t\t\t\t'created_at' => current_time( 'Y-m-d H:i:s' ),\r\n-\t\t\t\t];\r\n-\t\t\t\t$insert     = $material_db->create_material( $insert_arr );\r\n-\t\t\t\tif ( ! $insert ) {\r\n-\t\t\t\t\t$error_messages .= sprintf( __( 'Cannot save file %s', 'learnpress' ), $label );\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$success_messages .= __( 'Other files is upload successfully.', 'learnpress' );\r\n-\t\t\t\t$response->data[]  = [\r\n-\t\t\t\t\t'file_name' => $label,\r\n-\t\t\t\t\t'method'    => ucfirst( $method ),\r\n-\t\t\t\t\t'file_id'   => $insert,\r\n-\t\t\t\t\t'orders'    => $orders,\r\n-\t\t\t\t];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $error_messages ) ) {\r\n-\t\t\t\t$response->message .= $error_messages;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $success_messages ) ) {\r\n-\t\t\t\t$response->status = 'success';\r\n-\t\t\t\tif ( empty( $error_messages ) ) {\r\n-\t\t\t\t\t$success_messages = __( 'Files upload successfully.', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t$response->message .= $success_messages;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list files of a course or a lesson (use in wp-admin)\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @version 1.0.2\r\n-\t * @since 4.2.2\r\n-\t *\u002F\r\n-\tpublic function backend_get_materials_by_item( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params  = $request->get_params();\r\n-\t\t\t$item_id = $params['item_id'] ?? 0;\r\n-\t\t\tif ( ! $item_id ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid item id!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$material_db    = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$page           = absint( $params['page'] ?? 1 );\r\n-\t\t\t$per_page       = $params['per_page'] ?? (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\r\n-\t\t\t$offset         = ( $per_page > 0 && $page > 1 ) ? $per_page * ( $page - 1 ) : 0;\r\n-\t\t\t$item_materials = $material_db->get_material_by_item_id( $item_id, $per_page, $offset, true );\r\n-\r\n-\t\t\tif ( $item_materials ) {\r\n-\t\t\t\t$response->data->items = $item_materials;\r\n-\t\t\t\t$response->message     = esc_html__( 'Successfully', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->message = esc_html__( 'Empty material!', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get info file from external link\r\n-\t *\r\n-\t * @param $file_url\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.2\r\n-\t * @depreacted 4.2.7.8.5\r\n-\t *\u002F\r\n-\tpublic function check_external_file( $file_url ): array {\r\n-\t\t$lp_file   = LP_WP_Filesystem::instance();\r\n-\t\t$temp_file = $lp_file->download_url( $file_url );\r\n-\t\t$file      = [];\r\n-\t\tif ( is_wp_error( $temp_file ) ) {\r\n-\t\t\t$file['error']         = true;\r\n-\t\t\t$file['error_message'] = $temp_file->get_error_message();\r\n-\t\t} else {\r\n-\t\t\t$file = array(\r\n-\t\t\t\t'name'          => basename( $file_url ),\r\n-\t\t\t\t'type'          => mime_content_type( $temp_file ),\r\n-\t\t\t\t'tmp_name'      => $temp_file,\r\n-\t\t\t\t'size'          => filesize( $temp_file ),\r\n-\t\t\t\t'error'         => false,\r\n-\t\t\t\t'error_message' => '',\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $file;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param  [string] $file_name [upload file name]\r\n-\t * @param  [] $file_tmp  [file content]\r\n-\t *\r\n-\t * @return [array]            [file infomations]\r\n-\t * @since 4.2.2\r\n-\t * [material_upload_file upload file when user choose upload method]\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function material_upload_file( $file_name, $file_tmp ) {\r\n-\t\ttry {\r\n-\t\t\t$file = wp_upload_bits( $file_name, null, file_get_contents( $file_tmp ) );\r\n-\r\n-\t\t\treturn $file['error'] ? false : $file;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param  [string] $ext [file extendsion]\r\n-\t *\r\n-\t * @return [string]      [file extendsion]\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [material_check_file_extention return file type of file]\r\n-\t *\u002F\r\n-\tpublic function material_check_file_extention( $ext ) {\r\n-\t\t$allow_file_type = LP_Settings::get_option( 'material_allow_file_type', array( 'pdf', 'txt' ) );\r\n-\t\t$allow_file_type = implode( ',', $allow_file_type );\r\n-\t\t$allow_file_type = explode( ',', $allow_file_type );\r\n-\r\n-\t\treturn in_array( $ext, $allow_file_type ) ? $ext : false;\r\n-\t}\r\n-\r\n-\r\n-\tpublic function update_material_orders( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$item_id     = $request['item_id'];\r\n-\t\t\t$sort_arr    = $request->get_param( 'sort_arr' );\r\n-\t\t\t$sort_arr    = json_decode( wp_unslash( $sort_arr ), true );\r\n-\t\t\t$material_db = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$update_sort = $material_db->update_material_orders( $sort_arr, $item_id );\r\n-\t\t\tif ( $update_sort ) {\r\n-\t\t\t\t$response->status  = 200;\r\n-\t\t\t\t$response->message = esc_html__( 'Updated.', 'learnpress' );\r\n-\t\t\t\t\u002F\u002F $response->data = $sort_arr;\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Update failed!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->status  = 400;\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param  [type] $request [description]\r\n-\t *\r\n-\t * @return [json]          [return message]\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.2\r\n-\t * [delete_material delete a material when a delete request is send]\r\n-\t *\u002F\r\n-\tpublic function delete_material( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\t\ttry {\r\n-\t\t\t$file_id = $request['file_id'];\r\n-\t\t\tif ( ! $file_id ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Invalid file identifier', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F DB Init\r\n-\t\t\t$material_db = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$file        = $material_db->get_material( $file_id );\r\n-\t\t\tif ( ! $file ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'File not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get file author\r\n-\t\t\t$item_id         = $file->item_id ?? 0;\r\n-\t\t\t$author          = get_post_field( 'post_author', $item_id );\r\n-\t\t\t$current_user_id = get_current_user_id();\r\n-\t\t\t\u002F\u002F check permission\r\n-\t\t\tif ( ! ( ( $author == $current_user_id && current_user_can( LP_TEACHER_ROLE ) ) || current_user_can( ADMIN_ROLE ) ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to delete this file.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete record\r\n-\t\t\t$delete = $material_db->delete_material( $file_id );\r\n-\t\t\tif ( $delete ) {\r\n-\t\t\t\t$message = esc_html__( 'File is deleted.', 'learnpress' );\r\n-\t\t\t\t$deleted = true;\r\n-\t\t\t} else {\r\n-\t\t\t\t$message = esc_html__( 'There is an error when delete this file.', 'learnpress' );\r\n-\t\t\t\t$deleted = false;\r\n-\t\t\t}\r\n-\t\t\t$response->status  = 200;\r\n-\t\t\t$response->delete  = $deleted;\r\n-\t\t\t$response->message = $message;\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$response->status  = 400;\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can view materials of item\r\n-\t *\r\n-\t * @param int $course_id course id\r\n-\t * @param int $lesson_id lesson id\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.7.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_user_can_get_materials( int $course_id, int $lesson_id ) {\r\n-\t\t$current_user = learn_press_get_current_user();\r\n-\t\tif ( $lesson_id && get_post_field( 'post_type', $lesson_id ) === LP_LESSON_CPT ) {\r\n-\t\t\t$can_view_content_course = $current_user->can_view_content_course( $course_id );\r\n-\t\t\t$can_view                = $current_user->can_view_item( $lesson_id, $can_view_content_course );\r\n-\t\t} else {\r\n-\t\t\t$can_view = $current_user->can_view_content_course( $course_id );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $can_view->flag ) {\r\n-\t\t\t$error_message = $can_view->message;\r\n-\t\t\tthrow new Exception( $error_message );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get material file of course or lesson\r\n-\t *\r\n-\t * @param  WP_REST_Request $request\r\n-\t * @return WP_REST_Response  $response\r\n-\t * @since 4.2.7.4\r\n-\t * @deprecated 4.2.8.7.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tpublic function get_materials_by_item( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params    = $request->get_params();\r\n-\t\t\t$course_id = (int) $params['course_id'] ?? 0;\r\n-\t\t\t$item_id   = (int) $params['item_id'] ?? 0;\r\n-\r\n-\t\t\t$course = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->check_user_can_get_materials( $course_id, $item_id );\r\n-\r\n-\t\t\tif ( ! $item_id ) {\r\n-\t\t\t\t$get_materials_for_item_id = $course_id;\r\n-\t\t\t} else {\r\n-\t\t\t\t$get_materials_for_item_id = $item_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$material_db    = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$page           = absint( $params['page'] ?? 1 );\r\n-\t\t\t$per_page       = $params['per_page'] ?? (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\r\n-\t\t\t$offset         = ( $per_page > 0 && $page > 1 ) ? $per_page * ( $page - 1 ) : 0;\r\n-\t\t\t$total          = $material_db->get_total( $get_materials_for_item_id );\r\n-\t\t\t$pages          = $per_page > 0 ? ceil( $total \u002F $per_page ) : 0;\r\n-\t\t\t$item_materials = $material_db->get_material_by_item_id( $get_materials_for_item_id, $per_page, $offset, false );\r\n-\t\t\tif ( $item_materials ) {\r\n-\t\t\t\t$response->data->load_more = $page \u003C $pages && $per_page > 0;\r\n-\t\t\t\tob_start();\r\n-\t\t\t\t$material_template = CourseMaterialTemplate::instance();\r\n-\t\t\t\tforeach ( $item_materials as $m ) {\r\n-\t\t\t\t\t$m->current_item_id = $get_materials_for_item_id;\r\n-\t\t\t\t\techo $material_template->material_item( $m );\r\n-\t\t\t\t}\r\n-\t\t\t\t$response->data->items = ob_get_clean();\r\n-\t\t\t\t$response->message     = esc_html__( 'Successfully', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$response->message = esc_html__( 'Empty material!', 'learnpress' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = Template::print_message( $e->getMessage(), 'warning', false );\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Check user permission\r\n-\t *\r\n-\t * @param $request\r\n-\t *\r\n-\t * @return bool\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.2\r\n-\t *\u002F\r\n-\tpublic function check_user_can_edit_material( $request ): bool {\r\n-\t\t$permission      = false;\r\n-\t\t$item_id         = $request['item_id'] ?? $request->get_param( 'item_id' );\r\n-\t\t$author          = get_post_field( 'post_author', $item_id );\r\n-\t\t$current_user_id = get_current_user_id();\r\n-\t\tif ( ( $author == $current_user_id && current_user_can( LP_TEACHER_ROLE ) ) || current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t$permission = true;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Frest-material\u002Fcan-edit-material', $permission );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * [check_wp_allowed_file_type description]\r\n-\t * @param  string $file_ext file extend(png, jpg.....)\r\n-\t * @return boolean\r\n-\t *\u002F\r\n-\tpublic function check_wp_allowed_file_type( string $file_ext = '' ): bool {\r\n-\t\t$allowed = get_allowed_mime_types();\r\n-\t\tforeach ( $allowed as $ext => $mime ) {\r\n-\t\t\tif ( strpos( $ext, $file_ext ) !== false ) {\r\n-\t\t\t\treturn true; \u002F\u002F Found the string in a key\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn false;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\n+use LearnPress\\Models\\CourseModel;\n+\n+\u002F**\n+ * Class LP_Rest_Material_Controller\n+ * in LearnPres > Downloadable Materials\n+ *\n+ * @since 4.2.2\n+ * @author khanhbd\n+ * @version 1.0.2\n+ *\u002F\n+class LP_Rest_Material_Controller extends LP_Abstract_REST_Controller {\n+\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1\u002F';\n+\t\t$this->rest_base = 'material';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'item-materials\u002F(?P\u003Citem_id>[\\d]+)' => array(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'item_id' => array(\n+\t\t\t\t\t\t'description'       => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'              => 'integer',\n+\t\t\t\t\t\t'sanitize_callback' => 'absint',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'save_post_materials' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'data' => array(\n+\t\t\t\t\t\t\t'description'       => esc_html__( 'Data of material', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'              => 'string',\n+\t\t\t\t\t\t\t'required'          => true,\n+\t\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'file' => array(\n+\t\t\t\t\t\t\t'description' => esc_html__( 'File.', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'        => 'array',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'backend_get_materials_by_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'update_material_orders' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\n+\t\t\t\t\t'args'                => array(\n+\t\t\t\t\t\t'sort_arr' => array(\n+\t\t\t\t\t\t\t'description'       => esc_html__( 'Material orders', 'learnpress' ),\n+\t\t\t\t\t\t\t'type'              => 'string',\n+\t\t\t\t\t\t\t'required'          => true,\n+\t\t\t\t\t\t\t'sanitize_callback' => 'sanitize_text_field',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'(?P\u003Cfile_id>[\\d]+)'                => array(\n+\t\t\t\t'args' => array(\n+\t\t\t\t\t'file_id' => array(\n+\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'integer',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'delete_material' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_user_can_edit_material' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t\u002F*'by-item'                           => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_materials_by_item' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),*\u002F\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Save files materials\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @version 1.0.1\n+\t * @since 4.2.2\n+\t *\u002F\n+\tpublic function save_post_materials( WP_REST_Request $request ) {\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = [];\n+\n+\t\ttry {\n+\t\t\t$params               = $request->get_params();\n+\t\t\t$item_id              = $params['item_id'] ?? 0;\n+\t\t\t$material_data_string = $params['data'] ?? false;\n+\t\t\t$upload_file          = $request->get_file_params();\n+\n+\t\t\tif ( empty( $item_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid course or lesson', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $material_data_string ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid materials', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$material_data = LP_Helper::json_decode( wp_unslash( $material_data_string ), true );\n+\t\t\t$file          = $upload_file['file'] ?? false;\n+\n+\t\t\t\u002F\u002F DB Init\n+\t\t\t$material_db = LP_Material_Files_DB::getInstance();\n+\t\t\t\u002F\u002F LP Material Settings\n+\t\t\t$max_file_size       = (int) LP_Settings::get_option( 'material_max_file_size', 2 );\n+\t\t\t$allow_upload_amount = (int) LP_Settings::get_option( 'material_upload_files', 2 );\n+\t\t\t\u002F\u002F check file was uploaded\n+\t\t\t$count_uploaded_files = count( $material_db->get_material_by_item_id( $item_id, 0, 0, 1 ) );\n+\t\t\t\u002F\u002F check file amount which can upload\n+\t\t\t$can_upload = $allow_upload_amount - $count_uploaded_files;\n+\n+\t\t\t\u002F\u002FCheck file amount validation\n+\t\t\tif ( $can_upload \u003C= 0 ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Material feature is not allowed to upload', 'learnpress' ) );\n+\t\t\t} elseif ( $allow_upload_amount > 0 ) {\n+\t\t\t\tif ( count( $material_data ) > $can_upload ) {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'Your uploaded files reach the maximum amount!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$file_methods     = array( 'upload', 'external' );\n+\t\t\t$error_messages   = '';\n+\t\t\t$success_messages = '';\n+\t\t\tforeach ( $material_data as $key => $material ) {\n+\t\t\t\t$label     = LP_Helper::sanitize_params_submitted( $material['label'] ?? '' );\n+\t\t\t\t$method    = $material['method'] ?? '';\n+\t\t\t\t$file_name = $file['name'][ $key ] ?? '';\n+\n+\t\t\t\t\u002F\u002F check file title\n+\t\t\t\tif ( empty( $label ) ) {\n+\t\t\t\t\t$error_messages .= sprintf( __( 'File \"%s\" title is not empty!', 'learnpress' ), $file_name );\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t\u002F\u002F check file upload method\n+\t\t\t\tif ( ! in_array( $method, $file_methods ) ) {\n+\t\t\t\t\t$error_messages .= sprintf( __( 'File %s method is invalid!', 'learnpress' ), $label );\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$file_path = '';\n+\t\t\t\tif ( $method == 'upload' ) {\n+\t\t\t\t\tif ( $file['size'][ $key ] > $max_file_size * 1024 * 1024 ) {\n+\t\t\t\t\t\t$error_messages .= sprintf( __( 'File %s size is too large!', 'learnpress' ), $label );\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Check type file\n+\t\t\t\t\t$file_info = wp_check_filetype( $file_name );\n+\t\t\t\t\t$file_type = $file_info['ext'] ?? '';\n+\t\t\t\t\tif ( empty( $file_info['ext'] )\n+\t\t\t\t\t\t|| false === $this->material_check_file_extention( $file_info['ext'] )\n+\t\t\t\t\t\t|| ! in_array( $file_info['type'], get_allowed_mime_types() ) ) {\n+\t\t\t\t\t\t$error_messages .= sprintf( esc_html__( 'File %s type is invalid!', 'learnpress' ), $label );\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tLP_WP_Filesystem::instance();\n+\t\t\t\t\t$file_uploading     = [\n+\t\t\t\t\t\t'name'     => $file_name,\n+\t\t\t\t\t\t'type'     => $file_type,\n+\t\t\t\t\t\t'tmp_name' => $file['tmp_name'][ $key ],\n+\t\t\t\t\t\t'error'    => $file['error'][ $key ],\n+\t\t\t\t\t\t'size'     => $file['size'][ $key ],\n+\t\t\t\t\t];\n+\t\t\t\t\t$file_handle_upload = wp_handle_upload( $file_uploading, [ 'test_form' => false ] );\n+\t\t\t\t\tif ( ! empty( $file_handle_upload['error'] ) ) {\n+\t\t\t\t\t\t$error_messages .= sprintf( esc_html__( 'File %s: ', 'learnpress' ), $label ) . $file_handle_upload['error'];\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$file_path = str_replace( wp_upload_dir()['baseurl'], '', $file_handle_upload['url'] );\n+\t\t\t\t} elseif ( $method == 'external' ) {\n+\t\t\t\t\t$file_path   = sanitize_url( $material['link'] );\n+\t\t\t\t\t$file_info   = pathinfo( $file_path );\n+\t\t\t\t\t$file_extend = $file_info['extension'] ?? '';\n+\t\t\t\t\tif ( ! $file_extend ) {\n+\t\t\t\t\t\t$file_type = __( 'Unknown', 'learnpress' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$file_type = $file_extend;\n+\t\t\t\t\t}\n+\t\t\t\t\t$check_allow_file = $this->check_wp_allowed_file_type( $file_extend );\n+\t\t\t\t\tif ( ! $check_allow_file ) {\n+\t\t\t\t\t\t$error_messages .= sprintf(\n+\t\t\t\t\t\t\tesc_html__( 'An error occurred while checking %1$s. %2$s', 'learnpress' ),\n+\t\t\t\t\t\t\t$label,\n+\t\t\t\t\t\t\t__( 'Oops! That file type isn’t allowed.', 'learnpress' )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F For a long time remove this code. @since 4.2.6.6\n+\t\t\t\t\t$material_db->wpdb->query(\n+\t\t\t\t\t\t\"ALTER TABLE $material_db->tb_lp_files MODIFY file_type VARCHAR(100) NOT NULL DEFAULT '';\"\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\t$orders     = $count_uploaded_files + $key + 1;\n+\t\t\t\t$insert_arr = [\n+\t\t\t\t\t'file_name'  => sanitize_text_field( $label ),\n+\t\t\t\t\t'file_type'  => $file_type ?? '',\n+\t\t\t\t\t'item_id'    => (int) $item_id,\n+\t\t\t\t\t'item_type'  => get_post_type( $item_id ),\n+\t\t\t\t\t'method'     => $method,\n+\t\t\t\t\t'file_path'  => $file_path,\n+\t\t\t\t\t'orders'     => $orders,\n+\t\t\t\t\t'created_at' => current_time( 'Y-m-d H:i:s' ),\n+\t\t\t\t];\n+\t\t\t\t$insert     = $material_db->create_material( $insert_arr );\n+\t\t\t\tif ( ! $insert ) {\n+\t\t\t\t\t$error_messages .= sprintf( __( 'Cannot save file %s', 'learnpress' ), $label );\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$success_messages .= __( 'Other files is upload successfully.', 'learnpress' );\n+\t\t\t\t$response->data[]  = [\n+\t\t\t\t\t'file_name' => $label,\n+\t\t\t\t\t'method'    => ucfirst( $method ),\n+\t\t\t\t\t'file_id'   => $insert,\n+\t\t\t\t\t'orders'    => $orders,\n+\t\t\t\t];\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $error_messages ) ) {\n+\t\t\t\t$response->message .= $error_messages;\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $success_messages ) ) {\n+\t\t\t\t$response->status = 'success';\n+\t\t\t\tif ( empty( $error_messages ) ) {\n+\t\t\t\t\t$success_messages = __( 'Files upload successfully.', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t$response->message .= $success_messages;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Get list files of a course or a lesson (use in wp-admin)\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @version 1.0.2\n+\t * @since 4.2.2\n+\t *\u002F\n+\tpublic function backend_get_materials_by_item( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params  = $request->get_params();\n+\t\t\t$item_id = $params['item_id'] ?? 0;\n+\t\t\tif ( ! $item_id ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid item id!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$material_db    = LP_Material_Files_DB::getInstance();\n+\t\t\t$page           = absint( $params['page'] ?? 1 );\n+\t\t\t$per_page       = $params['per_page'] ?? (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\n+\t\t\t$offset         = ( $per_page > 0 && $page > 1 ) ? $per_page * ( $page - 1 ) : 0;\n+\t\t\t$item_materials = $material_db->get_material_by_item_id( $item_id, $per_page, $offset, true );\n+\n+\t\t\tif ( $item_materials ) {\n+\t\t\t\t$response->data->items = $item_materials;\n+\t\t\t\t$response->message     = esc_html__( 'Successfully', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$response->message = esc_html__( 'Empty material!', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Get info file from external link\n+\t *\n+\t * @param $file_url\n+\t *\n+\t * @return array\n+\t * @version 1.0.1\n+\t * @since 4.2.2\n+\t * @depreacted 4.2.7.8.5\n+\t *\u002F\n+\tpublic function check_external_file( $file_url ): array {\n+\t\t$lp_file   = LP_WP_Filesystem::instance();\n+\t\t$temp_file = $lp_file->download_url( $file_url );\n+\t\t$file      = [];\n+\t\tif ( is_wp_error( $temp_file ) ) {\n+\t\t\t$file['error']         = true;\n+\t\t\t$file['error_message'] = $temp_file->get_error_message();\n+\t\t} else {\n+\t\t\t$file = array(\n+\t\t\t\t'name'          => basename( $file_url ),\n+\t\t\t\t'type'          => mime_content_type( $temp_file ),\n+\t\t\t\t'tmp_name'      => $temp_file,\n+\t\t\t\t'size'          => filesize( $temp_file ),\n+\t\t\t\t'error'         => false,\n+\t\t\t\t'error_message' => '',\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $file;\n+\t}\n+\n+\t\u002F**\n+\t * @param  [string] $file_name [upload file name]\n+\t * @param  [] $file_tmp  [file content]\n+\t *\n+\t * @return [array]            [file infomations]\n+\t * @since 4.2.2\n+\t * [material_upload_file upload file when user choose upload method]\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function material_upload_file( $file_name, $file_tmp ) {\n+\t\ttry {\n+\t\t\t$file = wp_upload_bits( $file_name, null, file_get_contents( $file_tmp ) );\n+\n+\t\t\treturn $file['error'] ? false : $file;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param  [string] $ext [file extendsion]\n+\t *\n+\t * @return [string]      [file extendsion]\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [material_check_file_extention return file type of file]\n+\t *\u002F\n+\tpublic function material_check_file_extention( $ext ) {\n+\t\t$allow_file_type = LP_Settings::get_option( 'material_allow_file_type', array( 'pdf', 'txt' ) );\n+\t\t$allow_file_type = implode( ',', $allow_file_type );\n+\t\t$allow_file_type = explode( ',', $allow_file_type );\n+\n+\t\treturn in_array( $ext, $allow_file_type ) ? $ext : false;\n+\t}\n+\n+\n+\tpublic function update_material_orders( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$item_id     = $request['item_id'];\n+\t\t\t$sort_arr    = $request->get_param( 'sort_arr' );\n+\t\t\t$sort_arr    = json_decode( wp_unslash( $sort_arr ), true );\n+\t\t\t$material_db = LP_Material_Files_DB::getInstance();\n+\t\t\t$update_sort = $material_db->update_material_orders( $sort_arr, $item_id );\n+\t\t\tif ( $update_sort ) {\n+\t\t\t\t$response->status  = 200;\n+\t\t\t\t$response->message = esc_html__( 'Updated.', 'learnpress' );\n+\t\t\t\t\u002F\u002F $response->data = $sort_arr;\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( esc_html__( 'Update failed!', 'learnpress' ) );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->status  = 400;\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param  [type] $request [description]\n+\t *\n+\t * @return [json]          [return message]\n+\t * @version 1.0.0\n+\t * @since 4.2.2\n+\t * [delete_material delete a material when a delete request is send]\n+\t *\u002F\n+\tpublic function delete_material( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\t\ttry {\n+\t\t\t$file_id = $request['file_id'];\n+\t\t\tif ( ! $file_id ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Invalid file identifier', 'learnpress' ) );\n+\t\t\t}\n+\t\t\t\u002F\u002F DB Init\n+\t\t\t$material_db = LP_Material_Files_DB::getInstance();\n+\t\t\t$file        = $material_db->get_material( $file_id );\n+\t\t\tif ( ! $file ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'File not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get file author\n+\t\t\t$item_id         = $file->item_id ?? 0;\n+\t\t\t$author          = get_post_field( 'post_author', $item_id );\n+\t\t\t$current_user_id = get_current_user_id();\n+\t\t\t\u002F\u002F check permission\n+\t\t\tif ( ! ( ( $author == $current_user_id && current_user_can( LP_TEACHER_ROLE ) ) || current_user_can( ADMIN_ROLE ) ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to delete this file.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete record\n+\t\t\t$delete = $material_db->delete_material( $file_id );\n+\t\t\tif ( $delete ) {\n+\t\t\t\t$message = esc_html__( 'File is deleted.', 'learnpress' );\n+\t\t\t\t$deleted = true;\n+\t\t\t} else {\n+\t\t\t\t$message = esc_html__( 'There is an error when delete this file.', 'learnpress' );\n+\t\t\t\t$deleted = false;\n+\t\t\t}\n+\t\t\t$response->status  = 200;\n+\t\t\t$response->delete  = $deleted;\n+\t\t\t$response->message = $message;\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$response->status  = 400;\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Check user can view materials of item\n+\t *\n+\t * @param int $course_id course id\n+\t * @param int $lesson_id lesson id\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.7.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_user_can_get_materials( int $course_id, int $lesson_id ) {\n+\t\t$current_user = learn_press_get_current_user();\n+\t\tif ( $lesson_id && get_post_field( 'post_type', $lesson_id ) === LP_LESSON_CPT ) {\n+\t\t\t$can_view_content_course = $current_user->can_view_content_course( $course_id );\n+\t\t\t$can_view                = $current_user->can_view_item( $lesson_id, $can_view_content_course );\n+\t\t} else {\n+\t\t\t$can_view = $current_user->can_view_content_course( $course_id );\n+\t\t}\n+\n+\t\tif ( ! $can_view->flag ) {\n+\t\t\t$error_message = $can_view->message;\n+\t\t\tthrow new Exception( $error_message );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get material file of course or lesson\n+\t *\n+\t * @param  WP_REST_Request $request\n+\t * @return WP_REST_Response  $response\n+\t * @since 4.2.7.4\n+\t * @deprecated 4.2.8.7.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\t\u002F*\n+\tpublic function get_materials_by_item( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params    = $request->get_params();\n+\t\t\t$course_id = (int) $params['course_id'] ?? 0;\n+\t\t\t$item_id   = (int) $params['item_id'] ?? 0;\n+\n+\t\t\t$course = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$this->check_user_can_get_materials( $course_id, $item_id );\n+\n+\t\t\tif ( ! $item_id ) {\n+\t\t\t\t$get_materials_for_item_id = $course_id;\n+\t\t\t} else {\n+\t\t\t\t$get_materials_for_item_id = $item_id;\n+\t\t\t}\n+\n+\t\t\t$material_db    = LP_Material_Files_DB::getInstance();\n+\t\t\t$page           = absint( $params['page'] ?? 1 );\n+\t\t\t$per_page       = $params['per_page'] ?? (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\n+\t\t\t$offset         = ( $per_page > 0 && $page > 1 ) ? $per_page * ( $page - 1 ) : 0;\n+\t\t\t$total          = $material_db->get_total( $get_materials_for_item_id );\n+\t\t\t$pages          = $per_page > 0 ? ceil( $total \u002F $per_page ) : 0;\n+\t\t\t$item_materials = $material_db->get_material_by_item_id( $get_materials_for_item_id, $per_page, $offset, false );\n+\t\t\tif ( $item_materials ) {\n+\t\t\t\t$response->data->load_more = $page \u003C $pages && $per_page > 0;\n+\t\t\t\tob_start();\n+\t\t\t\t$material_template = CourseMaterialTemplate::instance();\n+\t\t\t\tforeach ( $item_materials as $m ) {\n+\t\t\t\t\t$m->current_item_id = $get_materials_for_item_id;\n+\t\t\t\t\techo $material_template->material_item( $m );\n+\t\t\t\t}\n+\t\t\t\t$response->data->items = ob_get_clean();\n+\t\t\t\t$response->message     = esc_html__( 'Successfully', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$response->message = esc_html__( 'Empty material!', 'learnpress' );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = Template::print_message( $e->getMessage(), 'warning', false );\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Check user permission\n+\t *\n+\t * @param $request\n+\t *\n+\t * @return bool\n+\t * @version 1.0.1\n+\t * @since 4.2.2\n+\t *\u002F\n+\tpublic function check_user_can_edit_material( $request ): bool {\n+\t\t$permission      = false;\n+\t\t$item_id         = $request['item_id'] ?? $request->get_param( 'item_id' );\n+\t\t$author          = get_post_field( 'post_author', $item_id );\n+\t\t$current_user_id = get_current_user_id();\n+\t\tif ( ( $author == $current_user_id && current_user_can( LP_TEACHER_ROLE ) ) || current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t$permission = true;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Frest-material\u002Fcan-edit-material', $permission );\n+\t}\n+\n+\t\u002F**\n+\t * [check_wp_allowed_file_type description]\n+\t * @param  string $file_ext file extend(png, jpg.....)\n+\t * @return boolean\n+\t *\u002F\n+\tpublic function check_wp_allowed_file_type( string $file_ext = '' ): bool {\n+\t\t$allowed = get_allowed_mime_types();\n+\t\tforeach ( $allowed as $ext => $mime ) {\n+\t\t\tif ( strpos( $ext, $file_ext ) !== false ) {\n+\t\t\t\treturn true; \u002F\u002F Found the string in a key\n+\t\t\t}\n+\t\t}\n+\t\treturn false;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-profile-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-profile-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-profile-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-profile-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,599 +1,599 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-class LP_REST_Profile_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'profile';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'student\u002Fstatistic'    => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'student_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'instructor\u002Fstatistic' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'instructor_statistics' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'course-tab'           => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'course_tab' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t\u002F*'course-attend'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'course_attend' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),*\u002F\r\n-\t\t\t'get-avatar'           => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_avatar' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn (bool) get_current_user_id();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'upload-avatar'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'upload_avatar' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn (bool) get_current_user_id();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'remove-avatar'        => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'remove_avatar' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn (bool) get_current_user_id();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'cover-image'          => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'handle_cover_image' ),\r\n-\t\t\t\t\t'permission_callback' => function () {\r\n-\t\t\t\t\t\treturn get_current_user_id();\r\n-\t\t\t\t\t},\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check permission\r\n-\t *\r\n-\t * @param $request\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function check_permission( $request ): bool {\r\n-\t\t$user_id = $request->get_param( 'userID' );\r\n-\r\n-\t\tif ( empty( $user_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F*$profile = learn_press_get_profile( $user_id );\r\n-\r\n-\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}*\u002F\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function get_avatar( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\t$thumb_size = learn_press_get_avatar_thumb_size();\r\n-\r\n-\t\t$profile    = LP_Profile::instance( get_current_user_id() );\r\n-\t\t$avatar_url = $profile->get_upload_profile_src();\r\n-\r\n-\t\t$response->data->width  = $thumb_size['width'];\r\n-\t\t$response->data->height = $thumb_size['height'];\r\n-\t\t$response->data->url    = $avatar_url ? $avatar_url : '';\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\tpublic function upload_avatar( WP_REST_Request $request ) {\r\n-\t\t$file_base64 = $request->get_param( 'file' );\r\n-\t\t$response    = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'User not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $file_base64 ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'File not found', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$upload_dir = learn_press_user_profile_picture_upload_dir( true );\r\n-\r\n-\t\t\t$target_dir = LP_WP_Filesystem::instance()->is_dir( $upload_dir['path'] );\r\n-\r\n-\t\t\tif ( ! $target_dir ) {\r\n-\t\t\t\twp_mkdir_p( $upload_dir['path'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $upload_dir['path'] ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete old image if exists\r\n-\t\t\t$path_img = get_user_meta( $user_id, '_lp_profile_picture', true );\r\n-\r\n-\t\t\tif ( $path_img ) {\r\n-\t\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $path_img;\r\n-\r\n-\t\t\t\tif ( file_exists( $path ) ) {\r\n-\t\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$file_name = md5( $user_id . microtime( true ) ) . '.png';\r\n-\r\n-\t\t\t$file_base64 = str_replace( 'data:image\u002Fpng;base64,', '', $file_base64 );\r\n-\t\t\t$file_base64 = base64_decode( $file_base64 );\r\n-\r\n-\t\t\t$put_content = LP_WP_Filesystem::instance()->put_contents( $upload_dir['path'] . '\u002F' . $file_name, $file_base64 );\r\n-\r\n-\t\t\tif ( ! $put_content ) {\r\n-\t\t\t\tthrow new Exception( __( 'Cannot write the file', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tupdate_user_meta( $user_id, '_lp_profile_picture', $upload_dir['subdir'] . '\u002F' . $file_name );\r\n-\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fupload_avatar', $user_id );\r\n-\r\n-\t\t\t$response->status  = 'success';\r\n-\t\t\t$response->message = __( 'Avatar updated', 'learnpress' );\r\n-\t\t} catch ( \\Throwable $th ) {\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\tpublic function remove_avatar( WP_REST_Request $request ) {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The user is invalid', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$upload_dir = learn_press_user_profile_picture_upload_dir( true );\r\n-\r\n-\t\t\t$target_dir = LP_WP_Filesystem::instance()->is_dir( $upload_dir['path'] );\r\n-\r\n-\t\t\tif ( ! $target_dir ) {\r\n-\t\t\t\twp_mkdir_p( $upload_dir['path'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $upload_dir['path'] ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$path_img = get_user_meta( $user_id, '_lp_profile_picture', true );\r\n-\r\n-\t\t\tif ( $path_img ) {\r\n-\t\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $path_img;\r\n-\r\n-\t\t\t\tif ( file_exists( $path ) ) {\r\n-\t\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\r\n-\r\n-\t\t\t\t\t$response->status  = 'success';\r\n-\t\t\t\t\t$response->message = esc_html__( 'The profile picture has been removed successfully', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( \\Throwable $th ) {\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Statistics of a student.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function student_statistics( WP_REST_Request $request ) {\r\n-\t\t$user_id        = (int) $request->get_param( 'userID' );\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $user_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The user does not exist!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\t$profile = LP_Profile::instance( $user_id );\r\n-\t\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this statistic!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$statistic = $userModel->get_student_statistic();\r\n-\t\t\t$data      = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fstudent-statistics\u002Finfo',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'enrolled_courses'   => [\r\n-\t\t\t\t\t\t'title' => __( 'Total enrolled courses', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Enrolled Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['enrolled_courses'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'in_progress_course' => [\r\n-\t\t\t\t\t\t'title' => __( 'Total course is in progress', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Inprogress Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['in_progress_course'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'finished_courses'   => [\r\n-\t\t\t\t\t\t'title' => __( 'Total courses finished', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Finished Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['finished_courses'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'passed_courses'     => [\r\n-\t\t\t\t\t\t'title' => __( 'Total courses passed', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Passed Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['passed_courses'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'failed_courses'     => [\r\n-\t\t\t\t\t\t'title' => __( 'Total courses failed', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Failed Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['failed_courses'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t'profile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php',\r\n-\t\t\t\tcompact( 'data' )\r\n-\t\t\t);\r\n-\t\t\t$response->data   = ob_get_clean();\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Statistics of an instructor.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function instructor_statistics( WP_REST_Request $request ) {\r\n-\t\t$user_id        = $request->get_param( 'userID' );\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $user_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The user does not exist!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$profile = LP_Profile::instance( $user_id );\r\n-\t\t\tif ( $profile instanceof WP_Error ) {\r\n-\t\t\t\tthrow new Exception( $profile->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! $profile->current_user_can( 'view-tab-courses' ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this statistic!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$statistic = $userModel->get_instructor_statistic();\r\n-\r\n-\t\t\t$data = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Finstructor-statistics\u002Finfo',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'total_course'        => [\r\n-\t\t\t\t\t\t'title' => __( 'Total Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Total Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['total_course'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'published_course'    => [\r\n-\t\t\t\t\t\t'title' => __( 'Published Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Published Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['published_course'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'pending_course'      => [\r\n-\t\t\t\t\t\t'title' => __( 'Pending Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Pending Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['pending_course'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'total_student'       => [\r\n-\t\t\t\t\t\t'title' => __( 'Total Student', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Total Student', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['total_student'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'student_completed'   => [\r\n-\t\t\t\t\t\t'title' => __( 'Student Completed', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Student Completed', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['student_completed'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'student_in_progress' => [\r\n-\t\t\t\t\t\t'title' => __( 'Student In-progress', 'learnpress' ),\r\n-\t\t\t\t\t\t'label' => __( 'Student In-progress', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $statistic['student_in_progress'] ?? 0,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t'profile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php',\r\n-\t\t\t\tcompact( 'data' )\r\n-\t\t\t);\r\n-\t\t\t$response->data   = ob_get_clean();\r\n-\t\t\t$response->status = 'success';\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\tpublic function course_tab( $request ) {\r\n-\t\t$params     = $request->get_params();\r\n-\t\t$user_id    = $params['userID'] ?? get_current_user_id();\r\n-\t\t$status     = $params['status'] ?? '';\r\n-\t\t$paged      = $params['paged'] ?? 1;\r\n-\t\t$query_type = $params['query'] ?? '';\r\n-\t\t$layout     = $params['layout'] ?? 'grid';\r\n-\t\t$response   = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $user_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$profile = LP_Profile::instance( $user_id );\r\n-\t\t\tif ( 'purchased' === $query_type ) {\r\n-\t\t\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this tab!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( 'own' === $query_type ) {\r\n-\t\t\t\tif ( ! $profile->current_user_can( 'view-tab-courses' ) ) {\r\n-\t\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this tab!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Request invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = $profile->query_courses(\r\n-\t\t\t\t$query_type,\r\n-\t\t\t\tapply_filters(\r\n-\t\t\t\t\t'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab\u002Fquery',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'status' => $status,\r\n-\t\t\t\t\t\t'limit'  => LP_Settings::get_option( 'archive_course_limit', 6 ),\r\n-\t\t\t\t\t\t'paged'  => $paged,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$request\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F LP_User_Item_Course.\r\n-\t\t\t$course_item_objects = ! empty( $query->get_items() ) ? $query->get_items() : false;\r\n-\r\n-\t\t\tif ( empty( $course_item_objects ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No Course available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_ids = array_map(\r\n-\t\t\t\tfunction ( $course_object ) {\r\n-\t\t\t\t\treturn ! is_object( $course_object ) ? absint( $course_object ) : $course_object->get_id();\r\n-\t\t\t\t},\r\n-\t\t\t\t$course_item_objects\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( empty( $course_ids ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No Course IDs available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\tif ( empty( $user ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No User available!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab', $params );\r\n-\r\n-\t\t\t$num_pages    = $query->get_pages();\r\n-\t\t\t$current_page = $query->get_paged();\r\n-\r\n-\t\t\t$template = $layout === 'grid' ? 'profile\u002Ftabs\u002Fcourses\u002Fcourse-grid' : 'profile\u002Ftabs\u002Fcourses\u002Fcourse-list';\r\n-\r\n-\t\t\t$response->data   = learn_press_get_template_content(\r\n-\t\t\t\t$template,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'user'         => $user,\r\n-\t\t\t\t\t'course_ids'   => $course_ids,\r\n-\t\t\t\t\t'num_pages'    => max( absint( $num_pages ), 1 ),\r\n-\t\t\t\t\t'current_page' => absint( $current_page ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$response->status = 'success';\r\n-\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course's user attend\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\t\u002F*public function course_attend( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$params   = $request->get_params();\r\n-\t\t$user_id  = get_current_user_id();\r\n-\t\t$status   = $params['status'] ?? '';\r\n-\t\t$paged    = $params['paged'] ?? 1;\r\n-\t\t$layout   = $params['layout'] ?? 'grid';\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'The user is invalid', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter                      = new LP_User_Items_Filter();\r\n-\t\t\t$filter->limit               = LP_Settings::get_option( 'archive_course_limit', 6 );\r\n-\t\t\t$filter->user_id             = $user_id;\r\n-\t\t\t$total_rows                  = 0;\r\n-\t\t\t$courses                     = LP_User_Item_Course::get_user_courses( $filter, $total_rows );\r\n-\t\t\t$response->data->courses     = $courses;\r\n-\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * API upload cover image profile.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function handle_cover_image( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$files      = $request->get_file_params();\r\n-\t\t$action     = $request->get_param( 'action' );\r\n-\t\t$response   = new LP_REST_Response();\r\n-\t\t$upload_dir = learn_press_user_profile_picture_upload_dir();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\tthrow new Exception( __( 'User is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = UserModel::find( $user_id, true );\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\tthrow new Exception( __( 'User is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $action === 'remove' ) {\r\n-\t\t\t\t$user->delete_cover_image();\r\n-\r\n-\t\t\t\t$response->status       = 'success';\r\n-\t\t\t\t$response->message      = __( 'Cover image has been removed successfully', 'learnpress' );\r\n-\t\t\t\t$response->data->action = $action;\r\n-\r\n-\t\t\t\treturn $response;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $files ) || empty( $files['image'] ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'File is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cover_image_file = $files['image'];\r\n-\t\t\t$cover_image_name = $cover_image_file['name'];\r\n-\t\t\t$check_type       = wp_check_filetype( $cover_image_name );\r\n-\r\n-\t\t\t\u002F\u002F Only allow image type\r\n-\t\t\t$image_types_allow = [ 'image\u002Fjpeg', 'image\u002Fpng', 'image\u002Fwebp' ];\r\n-\t\t\tif ( ! $check_type['type'] || ! in_array( $check_type['type'], $image_types_allow ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'File type is not allowed', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cover_dir_path = $upload_dir['path'] . '\u002F' . 'cover-image\u002F';\r\n-\t\t\t$target_dir     = LP_WP_Filesystem::instance()->is_dir( $cover_dir_path );\r\n-\t\t\tif ( ! $target_dir ) {\r\n-\t\t\t\twp_mkdir_p( $cover_dir_path );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $cover_dir_path ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete old image if exists\r\n-\t\t\t$user->delete_cover_image();\r\n-\r\n-\t\t\t$file_name         = md5( $user_id . microtime( true ) ) . '.' . $check_type['ext'];\r\n-\t\t\t$file_img_cer_blob = LP_WP_Filesystem::instance()->file_get_contents( $cover_image_file['tmp_name'] );\r\n-\t\t\t$put_content       = LP_WP_Filesystem::instance()->put_contents(\r\n-\t\t\t\t$cover_dir_path . '\u002F' . $file_name,\r\n-\t\t\t\t$file_img_cer_blob\r\n-\t\t\t);\r\n-\t\t\tif ( ! $put_content ) {\r\n-\t\t\t\tthrow new Exception( __( 'Cannot write the file', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$upload_subdir = $upload_dir['subdir'] . '\u002F' . 'cover-image\u002F';\r\n-\t\t\t$path_save     = $upload_subdir . $file_name;\r\n-\t\t\t$user->set_cover_image_url( $path_save );\r\n-\r\n-\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fupload_cover_image', $user_id );\r\n-\r\n-\t\t\t$response->status       = 'success';\r\n-\t\t\t$response->message      = __( 'Cover image is updated', 'learnpress' );\r\n-\t\t\t$response->data->url    = $user->get_cover_image_url();\r\n-\t\t\t$response->data->action = $action;\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+\n+class LP_REST_Profile_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'profile';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'student\u002Fstatistic'    => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'student_statistics' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'instructor\u002Fstatistic' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'instructor_statistics' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'course-tab'           => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'course_tab' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t\u002F*'course-attend'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'course_attend' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_permission' ),\n+\t\t\t\t),\n+\t\t\t),*\u002F\n+\t\t\t'get-avatar'           => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_avatar' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn (bool) get_current_user_id();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'upload-avatar'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'upload_avatar' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn (bool) get_current_user_id();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'remove-avatar'        => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'remove_avatar' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn (bool) get_current_user_id();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'cover-image'          => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'handle_cover_image' ),\n+\t\t\t\t\t'permission_callback' => function () {\n+\t\t\t\t\t\treturn get_current_user_id();\n+\t\t\t\t\t},\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Check permission\n+\t *\n+\t * @param $request\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function check_permission( $request ): bool {\n+\t\t$user_id = $request->get_param( 'userID' );\n+\n+\t\tif ( empty( $user_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F*$profile = learn_press_get_profile( $user_id );\n+\n+\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\n+\t\t\treturn false;\n+\t\t}*\u002F\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function get_avatar( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\t$thumb_size = learn_press_get_avatar_thumb_size();\n+\n+\t\t$profile    = LP_Profile::instance( get_current_user_id() );\n+\t\t$avatar_url = $profile->get_upload_profile_src();\n+\n+\t\t$response->data->width  = $thumb_size['width'];\n+\t\t$response->data->height = $thumb_size['height'];\n+\t\t$response->data->url    = $avatar_url ? $avatar_url : '';\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\tpublic function upload_avatar( WP_REST_Request $request ) {\n+\t\t$file_base64 = $request->get_param( 'file' );\n+\t\t$response    = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\tthrow new Exception( __( 'User not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $file_base64 ) ) {\n+\t\t\t\tthrow new Exception( __( 'File not found', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$upload_dir = learn_press_user_profile_picture_upload_dir( true );\n+\n+\t\t\t$target_dir = LP_WP_Filesystem::instance()->is_dir( $upload_dir['path'] );\n+\n+\t\t\tif ( ! $target_dir ) {\n+\t\t\t\twp_mkdir_p( $upload_dir['path'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $upload_dir['path'] ) ) {\n+\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete old image if exists\n+\t\t\t$path_img = get_user_meta( $user_id, '_lp_profile_picture', true );\n+\n+\t\t\tif ( $path_img ) {\n+\t\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $path_img;\n+\n+\t\t\t\tif ( file_exists( $path ) ) {\n+\t\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$file_name = md5( $user_id . microtime( true ) ) . '.png';\n+\n+\t\t\t$file_base64 = str_replace( 'data:image\u002Fpng;base64,', '', $file_base64 );\n+\t\t\t$file_base64 = base64_decode( $file_base64 );\n+\n+\t\t\t$put_content = LP_WP_Filesystem::instance()->put_contents( $upload_dir['path'] . '\u002F' . $file_name, $file_base64 );\n+\n+\t\t\tif ( ! $put_content ) {\n+\t\t\t\tthrow new Exception( __( 'Cannot write the file', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tupdate_user_meta( $user_id, '_lp_profile_picture', $upload_dir['subdir'] . '\u002F' . $file_name );\n+\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fupload_avatar', $user_id );\n+\n+\t\t\t$response->status  = 'success';\n+\t\t\t$response->message = __( 'Avatar updated', 'learnpress' );\n+\t\t} catch ( \\Throwable $th ) {\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\tpublic function remove_avatar( WP_REST_Request $request ) {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$user_id = get_current_user_id();\n+\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The user is invalid', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$upload_dir = learn_press_user_profile_picture_upload_dir( true );\n+\n+\t\t\t$target_dir = LP_WP_Filesystem::instance()->is_dir( $upload_dir['path'] );\n+\n+\t\t\tif ( ! $target_dir ) {\n+\t\t\t\twp_mkdir_p( $upload_dir['path'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $upload_dir['path'] ) ) {\n+\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$path_img = get_user_meta( $user_id, '_lp_profile_picture', true );\n+\n+\t\t\tif ( $path_img ) {\n+\t\t\t\t$path = $upload_dir['basedir'] . '\u002F' . $path_img;\n+\n+\t\t\t\tif ( file_exists( $path ) ) {\n+\t\t\t\t\tLP_WP_Filesystem::instance()->unlink( $path );\n+\n+\t\t\t\t\t$response->status  = 'success';\n+\t\t\t\t\t$response->message = esc_html__( 'The profile picture has been removed successfully', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( \\Throwable $th ) {\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Statistics of a student.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\n+\t *\u002F\n+\tpublic function student_statistics( WP_REST_Request $request ) {\n+\t\t$user_id        = (int) $request->get_param( 'userID' );\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $user_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The user does not exist!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check permission\n+\t\t\t$profile = LP_Profile::instance( $user_id );\n+\t\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this statistic!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$statistic = $userModel->get_student_statistic();\n+\t\t\t$data      = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fstudent-statistics\u002Finfo',\n+\t\t\t\t[\n+\t\t\t\t\t'enrolled_courses'   => [\n+\t\t\t\t\t\t'title' => __( 'Total enrolled courses', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Enrolled Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['enrolled_courses'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'in_progress_course' => [\n+\t\t\t\t\t\t'title' => __( 'Total course is in progress', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Inprogress Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['in_progress_course'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'finished_courses'   => [\n+\t\t\t\t\t\t'title' => __( 'Total courses finished', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Finished Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['finished_courses'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'passed_courses'     => [\n+\t\t\t\t\t\t'title' => __( 'Total courses passed', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Passed Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['passed_courses'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'failed_courses'     => [\n+\t\t\t\t\t\t'title' => __( 'Total courses failed', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Failed Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['failed_courses'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t'profile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php',\n+\t\t\t\tcompact( 'data' )\n+\t\t\t);\n+\t\t\t$response->data   = ob_get_clean();\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Exception $e ) {\n+\t\t\tob_end_clean();\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Statistics of an instructor.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\n+\t *\u002F\n+\tpublic function instructor_statistics( WP_REST_Request $request ) {\n+\t\t$user_id        = $request->get_param( 'userID' );\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $user_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The user does not exist!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$profile = LP_Profile::instance( $user_id );\n+\t\t\tif ( $profile instanceof WP_Error ) {\n+\t\t\t\tthrow new Exception( $profile->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! $profile->current_user_can( 'view-tab-courses' ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this statistic!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$statistic = $userModel->get_instructor_statistic();\n+\n+\t\t\t$data = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Finstructor-statistics\u002Finfo',\n+\t\t\t\t[\n+\t\t\t\t\t'total_course'        => [\n+\t\t\t\t\t\t'title' => __( 'Total Course', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Total Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['total_course'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'published_course'    => [\n+\t\t\t\t\t\t'title' => __( 'Published Course', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Published Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['published_course'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'pending_course'      => [\n+\t\t\t\t\t\t'title' => __( 'Pending Course', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Pending Course', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['pending_course'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'total_student'       => [\n+\t\t\t\t\t\t'title' => __( 'Total Student', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Total Student', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['total_student'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'student_completed'   => [\n+\t\t\t\t\t\t'title' => __( 'Student Completed', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Student Completed', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['student_completed'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t\t'student_in_progress' => [\n+\t\t\t\t\t\t'title' => __( 'Student In-progress', 'learnpress' ),\n+\t\t\t\t\t\t'label' => __( 'Student In-progress', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $statistic['student_in_progress'] ?? 0,\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t'profile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php',\n+\t\t\t\tcompact( 'data' )\n+\t\t\t);\n+\t\t\t$response->data   = ob_get_clean();\n+\t\t\t$response->status = 'success';\n+\t\t} catch ( Exception $e ) {\n+\t\t\tob_end_clean();\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\tpublic function course_tab( $request ) {\n+\t\t$params     = $request->get_params();\n+\t\t$user_id    = $params['userID'] ?? get_current_user_id();\n+\t\t$status     = $params['status'] ?? '';\n+\t\t$paged      = $params['paged'] ?? 1;\n+\t\t$query_type = $params['query'] ?? '';\n+\t\t$layout     = $params['layout'] ?? 'grid';\n+\t\t$response   = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\tif ( empty( $user_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No user ID found!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$profile = LP_Profile::instance( $user_id );\n+\t\t\tif ( 'purchased' === $query_type ) {\n+\t\t\t\tif ( ! $profile->current_user_can( 'view-tab-my-courses' ) ) {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this tab!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t} elseif ( 'own' === $query_type ) {\n+\t\t\t\tif ( ! $profile->current_user_can( 'view-tab-courses' ) ) {\n+\t\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view this tab!', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( esc_html__( 'Request invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$query = $profile->query_courses(\n+\t\t\t\t$query_type,\n+\t\t\t\tapply_filters(\n+\t\t\t\t\t'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab\u002Fquery',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'status' => $status,\n+\t\t\t\t\t\t'limit'  => LP_Settings::get_option( 'archive_course_limit', 6 ),\n+\t\t\t\t\t\t'paged'  => $paged,\n+\t\t\t\t\t),\n+\t\t\t\t\t$request\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F LP_User_Item_Course.\n+\t\t\t$course_item_objects = ! empty( $query->get_items() ) ? $query->get_items() : false;\n+\n+\t\t\tif ( empty( $course_item_objects ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No Course available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_ids = array_map(\n+\t\t\t\tfunction ( $course_object ) {\n+\t\t\t\t\treturn ! is_object( $course_object ) ? absint( $course_object ) : $course_object->get_id();\n+\t\t\t\t},\n+\t\t\t\t$course_item_objects\n+\t\t\t);\n+\n+\t\t\tif ( empty( $course_ids ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No Course IDs available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\tif ( empty( $user ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'No User available!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fcourse_tab', $params );\n+\n+\t\t\t$num_pages    = $query->get_pages();\n+\t\t\t$current_page = $query->get_paged();\n+\n+\t\t\t$template = $layout === 'grid' ? 'profile\u002Ftabs\u002Fcourses\u002Fcourse-grid' : 'profile\u002Ftabs\u002Fcourses\u002Fcourse-list';\n+\n+\t\t\t$response->data   = learn_press_get_template_content(\n+\t\t\t\t$template,\n+\t\t\t\tarray(\n+\t\t\t\t\t'user'         => $user,\n+\t\t\t\t\t'course_ids'   => $course_ids,\n+\t\t\t\t\t'num_pages'    => max( absint( $num_pages ), 1 ),\n+\t\t\t\t\t'current_page' => absint( $current_page ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$response->status = 'success';\n+\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Get course's user attend\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.1.5\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\t\u002F*public function course_attend( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$params   = $request->get_params();\n+\t\t$user_id  = get_current_user_id();\n+\t\t$status   = $params['status'] ?? '';\n+\t\t$paged    = $params['paged'] ?? 1;\n+\t\t$layout   = $params['layout'] ?? 'grid';\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\tthrow new Exception( __( 'The user is invalid', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$filter                      = new LP_User_Items_Filter();\n+\t\t\t$filter->limit               = LP_Settings::get_option( 'archive_course_limit', 6 );\n+\t\t\t$filter->user_id             = $user_id;\n+\t\t\t$total_rows                  = 0;\n+\t\t\t$courses                     = LP_User_Item_Course::get_user_courses( $filter, $total_rows );\n+\t\t\t$response->data->courses     = $courses;\n+\t\t\t$response->data->total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * API upload cover image profile.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function handle_cover_image( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$files      = $request->get_file_params();\n+\t\t$action     = $request->get_param( 'action' );\n+\t\t$response   = new LP_REST_Response();\n+\t\t$upload_dir = learn_press_user_profile_picture_upload_dir();\n+\n+\t\ttry {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\tthrow new Exception( __( 'User is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = UserModel::find( $user_id, true );\n+\t\t\tif ( ! $user ) {\n+\t\t\t\tthrow new Exception( __( 'User is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $action === 'remove' ) {\n+\t\t\t\t$user->delete_cover_image();\n+\n+\t\t\t\t$response->status       = 'success';\n+\t\t\t\t$response->message      = __( 'Cover image has been removed successfully', 'learnpress' );\n+\t\t\t\t$response->data->action = $action;\n+\n+\t\t\t\treturn $response;\n+\t\t\t}\n+\n+\t\t\tif ( empty( $files ) || empty( $files['image'] ) ) {\n+\t\t\t\tthrow new Exception( __( 'File is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$cover_image_file = $files['image'];\n+\t\t\t$cover_image_name = $cover_image_file['name'];\n+\t\t\t$check_type       = wp_check_filetype( $cover_image_name );\n+\n+\t\t\t\u002F\u002F Only allow image type\n+\t\t\t$image_types_allow = [ 'image\u002Fjpeg', 'image\u002Fpng', 'image\u002Fwebp' ];\n+\t\t\tif ( ! $check_type['type'] || ! in_array( $check_type['type'], $image_types_allow ) ) {\n+\t\t\t\tthrow new Exception( __( 'File type is not allowed', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$cover_dir_path = $upload_dir['path'] . '\u002F' . 'cover-image\u002F';\n+\t\t\t$target_dir     = LP_WP_Filesystem::instance()->is_dir( $cover_dir_path );\n+\t\t\tif ( ! $target_dir ) {\n+\t\t\t\twp_mkdir_p( $cover_dir_path );\n+\t\t\t}\n+\n+\t\t\tif ( ! LP_WP_Filesystem::instance()->is_writable( $cover_dir_path ) ) {\n+\t\t\t\tthrow new Exception( __( 'The upload directory is not writable', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete old image if exists\n+\t\t\t$user->delete_cover_image();\n+\n+\t\t\t$file_name         = md5( $user_id . microtime( true ) ) . '.' . $check_type['ext'];\n+\t\t\t$file_img_cer_blob = LP_WP_Filesystem::instance()->file_get_contents( $cover_image_file['tmp_name'] );\n+\t\t\t$put_content       = LP_WP_Filesystem::instance()->put_contents(\n+\t\t\t\t$cover_dir_path . '\u002F' . $file_name,\n+\t\t\t\t$file_img_cer_blob\n+\t\t\t);\n+\t\t\tif ( ! $put_content ) {\n+\t\t\t\tthrow new Exception( __( 'Cannot write the file', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$upload_subdir = $upload_dir['subdir'] . '\u002F' . 'cover-image\u002F';\n+\t\t\t$path_save     = $upload_subdir . $file_name;\n+\t\t\t$user->set_cover_image_url( $path_save );\n+\n+\t\t\tdo_action( 'learnpress\u002Frest\u002Ffrontend\u002Fprofile\u002Fupload_cover_image', $user_id );\n+\n+\t\t\t$response->status       = 'success';\n+\t\t\t$response->message      = __( 'Cover image is updated', 'learnpress' );\n+\t\t\t$response->data->url    = $user->get_cover_image_url();\n+\t\t\t$response->data->action = $action;\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-settings-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-settings-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-settings-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-settings-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,112 +1,112 @@\n-\u003C?php\r\n-\r\n-class LP_REST_Settings_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'settings';\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t''               => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\r\n-\t\t\t'(?P\u003Ckey>[\\w]+)' => array(\r\n-\t\t\t\t'args'   => array(\r\n-\t\t\t\t\t'id' => array(\r\n-\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\r\n-\t\t\t\t\t\t'type'        => 'string',\r\n-\t\t\t\t\t),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'delete_item' ),\r\n-\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\tpublic function check_admin_permission() {\r\n-\t\treturn LP_Abstract_API::check_admin_permission();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_items( $request ) {\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$response = array(\r\n-\t\t\t'result' => $settings->get(),\r\n-\t\t);\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function get_item( $request ) {\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$response = array(\r\n-\t\t\t'result' => $settings->get( $request['key'] ),\r\n-\t\t);\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function update_item( $request ) {\r\n-\t\t$response = array();\r\n-\t\t$settings = LP_Settings::instance();\r\n-\t\t$option   = $settings->get( $request['key'] );\r\n-\r\n-\t\t$settings->update( $request['key'], $request['data'] );\r\n-\t\t$new_option = $settings->get( $request['key'] );\r\n-\t\t$success    = maybe_serialize( $option ) !== maybe_serialize( $new_option );\r\n-\r\n-\t\t$response['success'] = $success;\r\n-\t\t$response['result']  = $success ? $new_option : $option;\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function delete_item( $request ) {\r\n-\t\t$response = array();\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+class LP_REST_Settings_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'settings';\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t''               => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_items' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t),\n+\n+\t\t\t'(?P\u003Ckey>[\\w]+)' => array(\n+\t\t\t\t'args'   => array(\n+\t\t\t\t\t'id' => array(\n+\t\t\t\t\t\t'description' => __( 'A unique identifier for the resource.', 'learnpress' ),\n+\t\t\t\t\t\t'type'        => 'string',\n+\t\t\t\t\t),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::READABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'update_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t\t'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::DELETABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'delete_item' ),\n+\t\t\t\t\t'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t),\n+\t\t\t\t'schema' => array( $this, 'get_public_item_schema' ),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\tpublic function check_admin_permission() {\n+\t\treturn LP_Abstract_API::check_admin_permission();\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function get_items( $request ) {\n+\t\t$settings = LP_Settings::instance();\n+\t\t$response = array(\n+\t\t\t'result' => $settings->get(),\n+\t\t);\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function get_item( $request ) {\n+\t\t$settings = LP_Settings::instance();\n+\t\t$response = array(\n+\t\t\t'result' => $settings->get( $request['key'] ),\n+\t\t);\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function update_item( $request ) {\n+\t\t$response = array();\n+\t\t$settings = LP_Settings::instance();\n+\t\t$option   = $settings->get( $request['key'] );\n+\n+\t\t$settings->update( $request['key'], $request['data'] );\n+\t\t$new_option = $settings->get( $request['key'] );\n+\t\t$success    = maybe_serialize( $option ) !== maybe_serialize( $new_option );\n+\n+\t\t$response['success'] = $success;\n+\t\t$response['result']  = $success ? $new_option : $option;\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function delete_item( $request ) {\n+\t\t$response = array();\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-student-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-student-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-student-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-student-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,58 @@\n-\u003C?php\r\n-\u002F**\r\n- * REST API LP Student.\r\n- *\r\n- * @class LP_REST_Student_Controller\r\n- * @author thimpress\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-class LP_REST_Student_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'students';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\tarray(\r\n-\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t'callback'            => array( $this, 'list_students' ),\r\n-\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list student attend\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return LP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function list_students( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\t$response = new LP_REST_Response();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params    = $request->get_params();\r\n-\t\t\t$course_id = absint( $params['courseId'] ?? 0 );\r\n-\t\t\t$status    = $params['status'] ?? '';\r\n-\t\t\t$paged     = absint( $params['paged'] ?? 1 );\r\n-\t\t\t$limit     = LP_Settings::get_option( 'archive_course_limit', 10 );\r\n-\r\n-\t\t\t$filter   = new LP_User_Items_Filter();\r\n-\t\t\t$students = LP_User_Items_DB::getInstance()->get_students( $filter );\r\n-\r\n-\t\t\t$response->status        = 'success';\r\n-\t\t\t$response->data->content = $students;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * REST API LP Student.\n+ *\n+ * @class LP_REST_Student_Controller\n+ * @author thimpress\n+ * @version 1.0.0\n+ *\u002F\n+\n+class LP_REST_Student_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'students';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\tarray(\n+\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t'callback'            => array( $this, 'list_students' ),\n+\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Get list student attend\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return LP_REST_Response\n+\t *\u002F\n+\tpublic function list_students( WP_REST_Request $request ): LP_REST_Response {\n+\t\t$response = new LP_REST_Response();\n+\n+\t\ttry {\n+\t\t\t$params    = $request->get_params();\n+\t\t\t$course_id = absint( $params['courseId'] ?? 0 );\n+\t\t\t$status    = $params['status'] ?? '';\n+\t\t\t$paged     = absint( $params['paged'] ?? 1 );\n+\t\t\t$limit     = LP_Settings::get_option( 'archive_course_limit', 10 );\n+\n+\t\t\t$filter   = new LP_User_Items_Filter();\n+\t\t\t$students = LP_User_Items_DB::getInstance()->get_students( $filter );\n+\n+\t\t\t$response->status        = 'success';\n+\t\t\t$response->data->content = $students;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,443 +1,443 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItemMeta\\UserQuizMetaModel;\r\n-use LearnPress\\Models\\UserItems\\UserQuizModel;\r\n-\r\n-\u002F**\r\n- * Class LP_REST_Users_Controller\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-class LP_REST_Users_Controller extends LP_Abstract_REST_Controller {\r\n-\t\u002F**\r\n-\t * @var LP_User\r\n-\t *\u002F\r\n-\tprotected $user = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Course\r\n-\t *\u002F\r\n-\tprotected $course = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Course_Item|LP_Quiz|LP_Lesson\r\n-\t *\u002F\r\n-\tprotected $item = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_User_Item_Course\r\n-\t *\u002F\r\n-\tprotected $user_course = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_User_Item|LP_User_Item_Quiz\r\n-\t *\u002F\r\n-\tprotected $user_item = null;\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'users';\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register rest routes.\r\n-\t *\u002F\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'start-quiz'   => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'start_quiz' ),\r\n-\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'submit-quiz'  => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'submit_quiz' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t\u002F*'hint-answer'  => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'hint_answer' ),\r\n-\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\r\n-\t\t\t\t),\r\n-\t\t\t),*\u002F\r\n-\t\t\t'check-answer' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'check_answer' ),\r\n-\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get args for user item endpoints.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_item_endpoint_args() {\r\n-\t\treturn array(\r\n-\t\t\t'item_id'   => array(\r\n-\t\t\t\t'description'       => __( 'The ID of the course item object.', 'learnpress' ),\r\n-\t\t\t\t'type'              => 'int',\r\n-\t\t\t\t'validate_callback' => array( $this, 'validate_arg' ),\r\n-\t\t\t\t'required'          => true,\r\n-\t\t\t),\r\n-\t\t\t'course_id' => array(\r\n-\t\t\t\t'description'       => __( 'The ID of the course object.', 'learnpress' ),\r\n-\t\t\t\t'type'              => 'int',\r\n-\t\t\t\t'validate_callback' => array( $this, 'validate_arg' ),\r\n-\t\t\t\t'required'          => true,\r\n-\t\t\t),\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Validation callback to verify rest args.\r\n-\t *\r\n-\t * @param mixed           $value\r\n-\t * @param WP_REST_Request $request\r\n-\t * @param string          $param\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic function validate_arg( $value, $request, $param ) {\r\n-\t\t$attributes = $request->get_attributes();\r\n-\r\n-\t\tif ( ! isset( $attributes['args'][ $param ] ) ) {\r\n-\t\t\treturn new WP_Error( 'rest_invalid_param', sprintf( __( '%s was not registered as a request argument.', 'learnpress' ), $param ), array( 'status' => 400 ) );\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\tpublic function check_admin_permission() {\r\n-\t\treturn LP_Abstract_API::check_admin_permission();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * User starts a quiz.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.2\r\n-\t * @sicne 4.0.0\r\n-\t * @return WP_REST_Response\r\n-\t *\u002F\r\n-\tpublic function start_quiz( WP_REST_Request $request ): WP_REST_Response {\r\n-\t\t$user_id   = get_current_user_id();\r\n-\t\t$item_id   = $request['item_id'] ?? 0;\r\n-\t\t$course_id = $request['course_id'] ?? 0;\r\n-\t\t$results   = array(\r\n-\t\t\t'question_ids' => array(),\r\n-\t\t\t'questions'    => array(),\r\n-\t\t\t'total_time'   => 0,\r\n-\t\t);\r\n-\t\t$response  = array(\r\n-\t\t\t'status'  => 'error',\r\n-\t\t\t'message' => '',\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user   = learn_press_get_user( $user_id );\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t$quiz   = learn_press_get_quiz( $item_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( __( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\tthrow new Exception( __( 'The quiz is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quiz->set_course( $course );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fbefore\u002Fstart-quiz', $item_id, $course_id, $user_id );\r\n-\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t$link        = LP_Helper::get_link_no_cache( $courseModel->get_item_link( $item_id, LP_QUIZ_CPT ) );\r\n-\r\n-\t\t\t\u002F\u002F For no required enroll course\r\n-\t\t\tif ( $user->is_guest() && $course->is_no_required_enroll() ) {\r\n-\t\t\t\t$no_required_enroll       = new LP_Course_No_Required_Enroll( $course );\r\n-\t\t\t\t$response                 = $no_required_enroll->guest_start_quiz( $quiz );\r\n-\t\t\t\t$response['redirect_url'] = $link;\r\n-\r\n-\t\t\t\treturn rest_ensure_response( $response );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Require enroll course\r\n-\t\t\t *\r\n-\t\t\t * @var UserQuizModel $user_quiz\r\n-\t\t\t *\u002F\r\n-\t\t\t$retaken_count             = 0;\r\n-\t\t\t$attempts                  = [];\r\n-\t\t\t$filter_user_quiz          = new LP_User_Items_Filter();\r\n-\t\t\t$filter_user_quiz->user_id = $user_id;\r\n-\t\t\t$filter_user_quiz->item_id = $item_id;\r\n-\t\t\t$filter_user_quiz->ref_id  = $course_id;\r\n-\t\t\t$user_quiz_exists          = UserQuizModel::get_user_item_model_from_db( $filter_user_quiz );\r\n-\t\t\tif ( $user_quiz_exists instanceof UserQuizModel\r\n-\t\t\t\t&& $user_quiz_exists->status === LP_ITEM_COMPLETED ) {\r\n-\t\t\t\t$user_quiz = $user_quiz_exists;\r\n-\t\t\t\t$user_quiz->retake();\r\n-\t\t\t\t$results['answered'] = []; \u002F\u002F Reset answered for js\r\n-\t\t\t\t$retaken_count       = $user_quiz->get_retaken_count();\r\n-\t\t\t\t$attempts            = $user_quiz->get_attempts();\r\n-\t\t\t} else { \u002F\u002F Create new user quiz and insert to database.\r\n-\t\t\t\t$user_quiz_new          = new UserQuizModel();\r\n-\t\t\t\t$user_quiz_new->user_id = $user_id;\r\n-\t\t\t\t$user_quiz_new->item_id = $item_id;\r\n-\t\t\t\t$user_quiz_new->ref_id  = $course_id;\r\n-\t\t\t\t$user_quiz_new->start_quiz();\r\n-\t\t\t\t$user_quiz = $user_quiz_new;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_item_id = $user_quiz->get_user_item_id();\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Clear cache result quiz\r\n-\t\t\t * Cache set on @see LP_User_Item_Quiz::get_results\r\n-\t\t\t *\u002F\r\n-\t\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\r\n-\t\t\t$key_cache     = sprintf( '%d\u002Fuser\u002F%d\u002Fcourse\u002F%d', $item_id, $user_id, $course_id );\r\n-\t\t\t$lp_quiz_cache->clear( $key_cache );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t$show_check          = $quiz->get_instant_check();\r\n-\t\t\t$duration            = $quiz->get_duration();\r\n-\t\t\t$show_correct_review = $quiz->get_show_correct_review();\r\n-\t\t\t$question_ids        = $quiz->get_question_ids();\r\n-\t\t\t$status              = $user_quiz->get_status();\r\n-\t\t\t$time_remaining      = $user_quiz->get_time_remaining();\r\n-\r\n-\t\t\t$questions = learn_press_rest_prepare_user_questions(\r\n-\t\t\t\t$question_ids,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'instant_check'       => $show_check,\r\n-\t\t\t\t\t\u002F\u002F'quiz_status'         => $status,\r\n-\t\t\t\t\t\u002F\u002F'checked_questions'   => $checked_questions,\r\n-\t\t\t\t\t\u002F\u002F'hinted_questions'    => $hinted_questions,\r\n-\t\t\t\t\t'answered'            => [],\r\n-\t\t\t\t\t'show_correct_review' => $show_correct_review,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$results['question_ids']  = $question_ids;\r\n-\t\t\t$results['questions']     = $questions;\r\n-\t\t\t$results['total_time']    = $time_remaining;\r\n-\t\t\t$results['duration']      = $duration ? $duration->get() : false;\r\n-\t\t\t$results['status']        = $status; \u002F\u002F Must be started\r\n-\t\t\t$results['retaken']       = $retaken_count;\r\n-\t\t\t$results['attempts']      = $attempts;\r\n-\t\t\t$results['user_item_id']  = $user_item_id;\r\n-\t\t\t$response['status']       = 'success';\r\n-\t\t\t$response['results']      = $results;\r\n-\t\t\t$response['redirect_url'] = $link;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response['message'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Submit quiz answer\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function submit_quiz( WP_REST_Request $request ) {\r\n-\t\t\u002F\u002F$response = new LP_REST_Response();\r\n-\t\t$response = array(\r\n-\t\t\t'status'  => 'error',\r\n-\t\t\t'message' => '',\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id    = get_current_user_id();\r\n-\t\t\t$item_id    = $request['item_id'] ?? 0;\r\n-\t\t\t$course_id  = $request['course_id'] ?? 0;\r\n-\t\t\t$answered   = $request['answered'] ?? [];\r\n-\t\t\t$time_spend = $request['time_spend'] ?? 0;\r\n-\t\t\t$user       = learn_press_get_user( $user_id );\r\n-\t\t\t$course     = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( 'The course is invalid!' );\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Use for Review Quiz.\r\n-\t\t\t$quiz = learn_press_get_quiz( $item_id );\r\n-\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\tthrow new Exception( __( 'The quiz is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t\t$quiz->set_course( $course );\r\n-\r\n-\t\t\t\u002F\u002F Course is no required enroll\r\n-\t\t\tif ( $course->is_no_required_enroll() ) {\r\n-\t\t\t\t$no_required_enroll = new LP_Course_No_Required_Enroll( $course );\r\n-\r\n-\t\t\t\t$result = $no_required_enroll->get_result_quiz( $quiz, $answered );\r\n-\r\n-\t\t\t\t\u002F\u002F Set time spent\r\n-\t\t\t\t$interval             = new LP_Duration( $time_spend );\r\n-\t\t\t\t$interval             = $interval->to_timer();\r\n-\t\t\t\t$result['time_spend'] = $interval;\r\n-\t\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t\t$result['status'] = LP_ITEM_COMPLETED;\r\n-\t\t\t\t\u002F\u002F$result['answered']  = $result['questions'];\r\n-\t\t\t\t$result['attempts']  = [];\r\n-\t\t\t\t$result['results']   = $result;\r\n-\t\t\t\t$response['status']  = 'success';\r\n-\t\t\t\t$response['results'] = $result;\r\n-\r\n-\t\t\t\treturn rest_ensure_response( $response );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_course = $user->get_course_data( $course_id );\r\n-\r\n-\t\t\t\u002F\u002F Course required enroll\r\n-\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\tthrow new Exception( 'User not enrolled course!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var LP_User_Item_Quiz $user_quiz\r\n-\t\t\t *\u002F\r\n-\t\t\t$user_quiz = $user_course->get_item( $item_id );\r\n-\t\t\tif ( ! $user_quiz ) {\r\n-\t\t\t\tthrow new Exception();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For case save result when check instant answer\r\n-\t\t\t$result_instant_check = LP_User_Items_Result_DB::instance()->get_result( $user_quiz->get_user_item_id() );\r\n-\t\t\tif ( $result_instant_check ) {\r\n-\t\t\t\tforeach ( $result_instant_check['questions'] as $question_answer_id => $question_answer ) {\r\n-\t\t\t\t\tif ( ! empty( $question_answer['answered'] ) ) {\r\n-\t\t\t\t\t\t$answered[ $question_answer_id ] = $question_answer['answered'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set end time.\r\n-\t\t\t$start_time = $user_quiz->get_start_time()->getTimestamp();\r\n-\t\t\t$user_quiz->set_end_time( $start_time + $time_spend );\r\n-\r\n-\t\t\t\u002F\u002F Calculate quiz result and save.\r\n-\t\t\t$result = $user_quiz->calculate_quiz_result( $answered );\r\n-\t\t\t\u002F\u002F Save\r\n-\t\t\tLP_User_Items_Result_DB::instance()->update( $user_quiz->get_user_item_id(), wp_json_encode( $result ) );\r\n-\r\n-\t\t\tif ( $result['pass'] ) {\r\n-\t\t\t\t$user_quiz->set_graduation( LP_COURSE_GRADUATION_PASSED );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_quiz->set_graduation( LP_COURSE_GRADUATION_FAILED );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_quiz->complete();\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-finished', $item_id, $course_id, $user_id, $user_quiz );\r\n-\r\n-\t\t\t$result['status']    = $user_quiz->get_status(); \u002F\u002F Must be completed\r\n-\t\t\t$result['attempts']  = $user_quiz->get_attempts();\r\n-\t\t\t$result['answered']  = $result['questions'];\r\n-\t\t\t$result['results']   = $result;\r\n-\t\t\t$response['status']  = 'success';\r\n-\t\t\t$response['results'] = $result;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response['message'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hint the question and response hint content.\r\n-\t *\r\n-\t * @param WP_REST_Request $request\r\n-\t *\r\n-\t * @return mixed|WP_REST_Response\r\n-\t *\u002F\r\n-\t\u002F*public function hint_answer( $request ) {\r\n-\t\t$question_id = $request['question_id'];\r\n-\t\t$question    = learn_press_get_question( $question_id );\r\n-\r\n-\t\t$response = array(\r\n-\t\t\t'hint' => $question->get_hint(),\r\n-\t\t);\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}*\u002F\r\n-\r\n-\tpublic function check_answer( $request ) {\r\n-\t\t$response = array(\r\n-\t\t\t'status'  => 'error',\r\n-\t\t\t'message' => '',\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$question_id = $request['question_id'] ?? 0;\r\n-\t\t\t$answered    = $request['answered'] ?? '';\r\n-\t\t\t$course_id   = $request['course_id'] ?? 0;\r\n-\t\t\t$quiz_id     = $request['item_id'] ?? 0;\r\n-\t\t\t$course      = learn_press_get_course( $course_id );\r\n-\t\t\t$checked     = [];\r\n-\r\n-\t\t\tif ( $course->is_no_required_enroll() ) {\r\n-\t\t\t\t$no_required_enroll = new LP_Course_No_Required_Enroll( $course );\r\n-\t\t\t\t$checked            = $no_required_enroll->guest_check_question( $question_id, $answered );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\t\tif ( $user->is_guest() ) {\r\n-\t\t\t\t\tthrow new Exception( 'The user is invalid', 'learnrpess' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_course = $user->get_course_data( $course_id );\r\n-\t\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\t\tthrow new Exception( 'User\\'s course no data!', 'learnrpess' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_quiz = $user_course->get_item( $quiz_id );\r\n-\t\t\t\tif ( ! $user_quiz ) {\r\n-\t\t\t\t\tthrow new Exception( 'User\\'s quiz no data!', 'learnrpess' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$checked = $user_quiz->instant_check_question( $question_id, $answered );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question                = learn_press_get_question( $question_id );\r\n-\t\t\t$response['explanation'] = $question->get_explanation();\r\n-\t\t\t$response['options']     = learn_press_get_question_options_for_js( $question, array( 'answer' => $answered ) );\r\n-\t\t\t$response['result']      = $checked;\r\n-\t\t\t$response['status']      = 'success';\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response['message'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn rest_ensure_response( $response );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItemMeta\\UserQuizMetaModel;\n+use LearnPress\\Models\\UserItems\\UserQuizModel;\n+\n+\u002F**\n+ * Class LP_REST_Users_Controller\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+class LP_REST_Users_Controller extends LP_Abstract_REST_Controller {\n+\t\u002F**\n+\t * @var LP_User\n+\t *\u002F\n+\tprotected $user = null;\n+\n+\t\u002F**\n+\t * @var LP_Course\n+\t *\u002F\n+\tprotected $course = null;\n+\n+\t\u002F**\n+\t * @var LP_Course_Item|LP_Quiz|LP_Lesson\n+\t *\u002F\n+\tprotected $item = null;\n+\n+\t\u002F**\n+\t * @var LP_User_Item_Course\n+\t *\u002F\n+\tprotected $user_course = null;\n+\n+\t\u002F**\n+\t * @var LP_User_Item|LP_User_Item_Quiz\n+\t *\u002F\n+\tprotected $user_item = null;\n+\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'users';\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Register rest routes.\n+\t *\u002F\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'start-quiz'   => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'start_quiz' ),\n+\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'submit-quiz'  => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'submit_quiz' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t\u002F*'hint-answer'  => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'hint_answer' ),\n+\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\n+\t\t\t\t),\n+\t\t\t),*\u002F\n+\t\t\t'check-answer' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::EDITABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'check_answer' ),\n+\t\t\t\t\t\u002F\u002F 'permission_callback' => array( $this, 'check_admin_permission' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t\t'args'                => $this->get_item_endpoint_args(),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\t\u002F**\n+\t * Get args for user item endpoints.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_item_endpoint_args() {\n+\t\treturn array(\n+\t\t\t'item_id'   => array(\n+\t\t\t\t'description'       => __( 'The ID of the course item object.', 'learnpress' ),\n+\t\t\t\t'type'              => 'int',\n+\t\t\t\t'validate_callback' => array( $this, 'validate_arg' ),\n+\t\t\t\t'required'          => true,\n+\t\t\t),\n+\t\t\t'course_id' => array(\n+\t\t\t\t'description'       => __( 'The ID of the course object.', 'learnpress' ),\n+\t\t\t\t'type'              => 'int',\n+\t\t\t\t'validate_callback' => array( $this, 'validate_arg' ),\n+\t\t\t\t'required'          => true,\n+\t\t\t),\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Validation callback to verify rest args.\n+\t *\n+\t * @param mixed           $value\n+\t * @param WP_REST_Request $request\n+\t * @param string          $param\n+\t *\n+\t * @return bool|WP_Error\n+\t *\u002F\n+\tpublic function validate_arg( $value, $request, $param ) {\n+\t\t$attributes = $request->get_attributes();\n+\n+\t\tif ( ! isset( $attributes['args'][ $param ] ) ) {\n+\t\t\treturn new WP_Error( 'rest_invalid_param', sprintf( __( '%s was not registered as a request argument.', 'learnpress' ), $param ), array( 'status' => 400 ) );\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\tpublic function check_admin_permission() {\n+\t\treturn LP_Abstract_API::check_admin_permission();\n+\t}\n+\n+\t\u002F**\n+\t * User starts a quiz.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @editor tungnx\n+\t * @version 1.0.2\n+\t * @sicne 4.0.0\n+\t * @return WP_REST_Response\n+\t *\u002F\n+\tpublic function start_quiz( WP_REST_Request $request ): WP_REST_Response {\n+\t\t$user_id   = get_current_user_id();\n+\t\t$item_id   = $request['item_id'] ?? 0;\n+\t\t$course_id = $request['course_id'] ?? 0;\n+\t\t$results   = array(\n+\t\t\t'question_ids' => array(),\n+\t\t\t'questions'    => array(),\n+\t\t\t'total_time'   => 0,\n+\t\t);\n+\t\t$response  = array(\n+\t\t\t'status'  => 'error',\n+\t\t\t'message' => '',\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user   = learn_press_get_user( $user_id );\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t$quiz   = learn_press_get_quiz( $item_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( __( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $quiz ) {\n+\t\t\t\tthrow new Exception( __( 'The quiz is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$quiz->set_course( $course );\n+\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fbefore\u002Fstart-quiz', $item_id, $course_id, $user_id );\n+\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t$link        = LP_Helper::get_link_no_cache( $courseModel->get_item_link( $item_id, LP_QUIZ_CPT ) );\n+\n+\t\t\t\u002F\u002F For no required enroll course\n+\t\t\tif ( $user->is_guest() && $course->is_no_required_enroll() ) {\n+\t\t\t\t$no_required_enroll       = new LP_Course_No_Required_Enroll( $course );\n+\t\t\t\t$response                 = $no_required_enroll->guest_start_quiz( $quiz );\n+\t\t\t\t$response['redirect_url'] = $link;\n+\n+\t\t\t\treturn rest_ensure_response( $response );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Require enroll course\n+\t\t\t *\n+\t\t\t * @var UserQuizModel $user_quiz\n+\t\t\t *\u002F\n+\t\t\t$retaken_count             = 0;\n+\t\t\t$attempts                  = [];\n+\t\t\t$filter_user_quiz          = new LP_User_Items_Filter();\n+\t\t\t$filter_user_quiz->user_id = $user_id;\n+\t\t\t$filter_user_quiz->item_id = $item_id;\n+\t\t\t$filter_user_quiz->ref_id  = $course_id;\n+\t\t\t$user_quiz_exists          = UserQuizModel::get_user_item_model_from_db( $filter_user_quiz );\n+\t\t\tif ( $user_quiz_exists instanceof UserQuizModel\n+\t\t\t\t&& $user_quiz_exists->status === LP_ITEM_COMPLETED ) {\n+\t\t\t\t$user_quiz = $user_quiz_exists;\n+\t\t\t\t$user_quiz->retake();\n+\t\t\t\t$results['answered'] = []; \u002F\u002F Reset answered for js\n+\t\t\t\t$retaken_count       = $user_quiz->get_retaken_count();\n+\t\t\t\t$attempts            = $user_quiz->get_attempts();\n+\t\t\t} else { \u002F\u002F Create new user quiz and insert to database.\n+\t\t\t\t$user_quiz_new          = new UserQuizModel();\n+\t\t\t\t$user_quiz_new->user_id = $user_id;\n+\t\t\t\t$user_quiz_new->item_id = $item_id;\n+\t\t\t\t$user_quiz_new->ref_id  = $course_id;\n+\t\t\t\t$user_quiz_new->start_quiz();\n+\t\t\t\t$user_quiz = $user_quiz_new;\n+\t\t\t}\n+\n+\t\t\t$user_item_id = $user_quiz->get_user_item_id();\n+\n+\t\t\t\u002F**\n+\t\t\t * Clear cache result quiz\n+\t\t\t * Cache set on @see LP_User_Item_Quiz::get_results\n+\t\t\t *\u002F\n+\t\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\n+\t\t\t$key_cache     = sprintf( '%d\u002Fuser\u002F%d\u002Fcourse\u002F%d', $item_id, $user_id, $course_id );\n+\t\t\t$lp_quiz_cache->clear( $key_cache );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\t$show_check          = $quiz->get_instant_check();\n+\t\t\t$duration            = $quiz->get_duration();\n+\t\t\t$show_correct_review = $quiz->get_show_correct_review();\n+\t\t\t$question_ids        = $quiz->get_question_ids();\n+\t\t\t$status              = $user_quiz->get_status();\n+\t\t\t$time_remaining      = $user_quiz->get_time_remaining();\n+\n+\t\t\t$questions = learn_press_rest_prepare_user_questions(\n+\t\t\t\t$question_ids,\n+\t\t\t\tarray(\n+\t\t\t\t\t'instant_check'       => $show_check,\n+\t\t\t\t\t\u002F\u002F'quiz_status'         => $status,\n+\t\t\t\t\t\u002F\u002F'checked_questions'   => $checked_questions,\n+\t\t\t\t\t\u002F\u002F'hinted_questions'    => $hinted_questions,\n+\t\t\t\t\t'answered'            => [],\n+\t\t\t\t\t'show_correct_review' => $show_correct_review,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$results['question_ids']  = $question_ids;\n+\t\t\t$results['questions']     = $questions;\n+\t\t\t$results['total_time']    = $time_remaining;\n+\t\t\t$results['duration']      = $duration ? $duration->get() : false;\n+\t\t\t$results['status']        = $status; \u002F\u002F Must be started\n+\t\t\t$results['retaken']       = $retaken_count;\n+\t\t\t$results['attempts']      = $attempts;\n+\t\t\t$results['user_item_id']  = $user_item_id;\n+\t\t\t$response['status']       = 'success';\n+\t\t\t$response['results']      = $results;\n+\t\t\t$response['redirect_url'] = $link;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response['message'] = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Submit quiz answer\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return WP_Error|WP_HTTP_Response|WP_REST_Response\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function submit_quiz( WP_REST_Request $request ) {\n+\t\t\u002F\u002F$response = new LP_REST_Response();\n+\t\t$response = array(\n+\t\t\t'status'  => 'error',\n+\t\t\t'message' => '',\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user_id    = get_current_user_id();\n+\t\t\t$item_id    = $request['item_id'] ?? 0;\n+\t\t\t$course_id  = $request['course_id'] ?? 0;\n+\t\t\t$answered   = $request['answered'] ?? [];\n+\t\t\t$time_spend = $request['time_spend'] ?? 0;\n+\t\t\t$user       = learn_press_get_user( $user_id );\n+\t\t\t$course     = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( 'The course is invalid!' );\n+\t\t\t}\n+\t\t\t\u002F\u002F Use for Review Quiz.\n+\t\t\t$quiz = learn_press_get_quiz( $item_id );\n+\t\t\tif ( ! $quiz ) {\n+\t\t\t\tthrow new Exception( __( 'The quiz is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\t\t\t$quiz->set_course( $course );\n+\n+\t\t\t\u002F\u002F Course is no required enroll\n+\t\t\tif ( $course->is_no_required_enroll() ) {\n+\t\t\t\t$no_required_enroll = new LP_Course_No_Required_Enroll( $course );\n+\n+\t\t\t\t$result = $no_required_enroll->get_result_quiz( $quiz, $answered );\n+\n+\t\t\t\t\u002F\u002F Set time spent\n+\t\t\t\t$interval             = new LP_Duration( $time_spend );\n+\t\t\t\t$interval             = $interval->to_timer();\n+\t\t\t\t$result['time_spend'] = $interval;\n+\t\t\t\t\u002F\u002F End\n+\n+\t\t\t\t$result['status'] = LP_ITEM_COMPLETED;\n+\t\t\t\t\u002F\u002F$result['answered']  = $result['questions'];\n+\t\t\t\t$result['attempts']  = [];\n+\t\t\t\t$result['results']   = $result;\n+\t\t\t\t$response['status']  = 'success';\n+\t\t\t\t$response['results'] = $result;\n+\n+\t\t\t\treturn rest_ensure_response( $response );\n+\t\t\t}\n+\n+\t\t\t$user_course = $user->get_course_data( $course_id );\n+\n+\t\t\t\u002F\u002F Course required enroll\n+\t\t\tif ( ! $user_course ) {\n+\t\t\t\tthrow new Exception( 'User not enrolled course!' );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var LP_User_Item_Quiz $user_quiz\n+\t\t\t *\u002F\n+\t\t\t$user_quiz = $user_course->get_item( $item_id );\n+\t\t\tif ( ! $user_quiz ) {\n+\t\t\t\tthrow new Exception();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For case save result when check instant answer\n+\t\t\t$result_instant_check = LP_User_Items_Result_DB::instance()->get_result( $user_quiz->get_user_item_id() );\n+\t\t\tif ( $result_instant_check ) {\n+\t\t\t\tforeach ( $result_instant_check['questions'] as $question_answer_id => $question_answer ) {\n+\t\t\t\t\tif ( ! empty( $question_answer['answered'] ) ) {\n+\t\t\t\t\t\t$answered[ $question_answer_id ] = $question_answer['answered'];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set end time.\n+\t\t\t$start_time = $user_quiz->get_start_time()->getTimestamp();\n+\t\t\t$user_quiz->set_end_time( $start_time + $time_spend );\n+\n+\t\t\t\u002F\u002F Calculate quiz result and save.\n+\t\t\t$result = $user_quiz->calculate_quiz_result( $answered );\n+\t\t\t\u002F\u002F Save\n+\t\t\tLP_User_Items_Result_DB::instance()->update( $user_quiz->get_user_item_id(), wp_json_encode( $result ) );\n+\n+\t\t\tif ( $result['pass'] ) {\n+\t\t\t\t$user_quiz->set_graduation( LP_COURSE_GRADUATION_PASSED );\n+\t\t\t} else {\n+\t\t\t\t$user_quiz->set_graduation( LP_COURSE_GRADUATION_FAILED );\n+\t\t\t}\n+\n+\t\t\t$user_quiz->complete();\n+\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-finished', $item_id, $course_id, $user_id, $user_quiz );\n+\n+\t\t\t$result['status']    = $user_quiz->get_status(); \u002F\u002F Must be completed\n+\t\t\t$result['attempts']  = $user_quiz->get_attempts();\n+\t\t\t$result['answered']  = $result['questions'];\n+\t\t\t$result['results']   = $result;\n+\t\t\t$response['status']  = 'success';\n+\t\t\t$response['results'] = $result;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response['message'] = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+\n+\t\u002F**\n+\t * Hint the question and response hint content.\n+\t *\n+\t * @param WP_REST_Request $request\n+\t *\n+\t * @return mixed|WP_REST_Response\n+\t *\u002F\n+\t\u002F*public function hint_answer( $request ) {\n+\t\t$question_id = $request['question_id'];\n+\t\t$question    = learn_press_get_question( $question_id );\n+\n+\t\t$response = array(\n+\t\t\t'hint' => $question->get_hint(),\n+\t\t);\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}*\u002F\n+\n+\tpublic function check_answer( $request ) {\n+\t\t$response = array(\n+\t\t\t'status'  => 'error',\n+\t\t\t'message' => '',\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$question_id = $request['question_id'] ?? 0;\n+\t\t\t$answered    = $request['answered'] ?? '';\n+\t\t\t$course_id   = $request['course_id'] ?? 0;\n+\t\t\t$quiz_id     = $request['item_id'] ?? 0;\n+\t\t\t$course      = learn_press_get_course( $course_id );\n+\t\t\t$checked     = [];\n+\n+\t\t\tif ( $course->is_no_required_enroll() ) {\n+\t\t\t\t$no_required_enroll = new LP_Course_No_Required_Enroll( $course );\n+\t\t\t\t$checked            = $no_required_enroll->guest_check_question( $question_id, $answered );\n+\t\t\t} else {\n+\t\t\t\t$user = learn_press_get_current_user();\n+\t\t\t\tif ( $user->is_guest() ) {\n+\t\t\t\t\tthrow new Exception( 'The user is invalid', 'learnrpess' );\n+\t\t\t\t}\n+\n+\t\t\t\t$user_course = $user->get_course_data( $course_id );\n+\t\t\t\tif ( ! $user_course ) {\n+\t\t\t\t\tthrow new Exception( 'User\\'s course no data!', 'learnrpess' );\n+\t\t\t\t}\n+\n+\t\t\t\t$user_quiz = $user_course->get_item( $quiz_id );\n+\t\t\t\tif ( ! $user_quiz ) {\n+\t\t\t\t\tthrow new Exception( 'User\\'s quiz no data!', 'learnrpess' );\n+\t\t\t\t}\n+\n+\t\t\t\t$checked = $user_quiz->instant_check_question( $question_id, $answered );\n+\t\t\t}\n+\n+\t\t\t$question                = learn_press_get_question( $question_id );\n+\t\t\t$response['explanation'] = $question->get_explanation();\n+\t\t\t$response['options']     = learn_press_get_question_options_for_js( $question, array( 'answer' => $answered ) );\n+\t\t\t$response['result']      = $checked;\n+\t\t\t$response['status']      = 'success';\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response['message'] = $e->getMessage();\n+\t\t}\n+\n+\t\treturn rest_ensure_response( $response );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-widgets-controller.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-widgets-controller.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-widgets-controller.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-widgets-controller.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\u002F**\r\n- * REST API LP Widget.\r\n- *\r\n- * @author Nhamdv \u003Cdaonham95@gmail.com>\r\n- *\u002F\r\n-\r\n-class LP_REST_Widgets_Controller extends LP_Abstract_REST_Controller {\r\n-\tpublic function __construct() {\r\n-\t\t$this->namespace = 'lp\u002Fv1';\r\n-\t\t$this->rest_base = 'widgets';\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function register_routes() {\r\n-\t\t$this->routes = array(\r\n-\t\t\t'api' => array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\r\n-\t\t\t\t\t'callback'            => array( $this, 'get_content_widgets' ),\r\n-\t\t\t\t\t'permission_callback' => '__return_true',\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\tparent::register_routes();\r\n-\t}\r\n-\r\n-\tpublic function get_content_widgets( WP_REST_Request $request ): LP_REST_Response {\r\n-\t\tglobal $wp_widget_factory;\r\n-\r\n-\t\t$response       = new LP_REST_Response();\r\n-\t\t$response->data = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$params    = $request->get_params();\r\n-\t\t\t$widget_id = $params['widget'] ?? false; \u002F\u002F LP_Widget.\r\n-\t\t\t$instance  = $params['instance'] ?? false;\r\n-\r\n-\t\t\tif ( empty( $widget_id ) || empty( $instance ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: No params!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$widget_object = $wp_widget_factory->get_widget_object( $widget_id );\r\n-\r\n-\t\t\tif ( ! method_exists( $widget_object, 'lp_rest_api_content' ) ) {\r\n-\t\t\t\tthrow new Exception( 'Error: No method lp_rest_api_content!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$instance = json_decode( $instance, true );\r\n-\r\n-\t\t\tunset( $params['instance'] );\r\n-\t\t\tunset( $params['hash'] );\r\n-\r\n-\t\t\t$data = $widget_object->lp_rest_api_content( $instance, $params ); \u002F\u002F LP_Widget->lp_rest_api_content.\r\n-\r\n-\t\t\tif ( is_wp_error( $data ) ) {\r\n-\t\t\t\tthrow new Exception( $data->get_error_message() );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status = 'success';\r\n-\t\t\t$response->data   = $data;\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$response->status  = 'error';\r\n-\t\t\t$response->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * REST API LP Widget.\n+ *\n+ * @author Nhamdv \u003Cdaonham95@gmail.com>\n+ *\u002F\n+\n+class LP_REST_Widgets_Controller extends LP_Abstract_REST_Controller {\n+\tpublic function __construct() {\n+\t\t$this->namespace = 'lp\u002Fv1';\n+\t\t$this->rest_base = 'widgets';\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function register_routes() {\n+\t\t$this->routes = array(\n+\t\t\t'api' => array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'methods'             => WP_REST_Server::CREATABLE,\n+\t\t\t\t\t'callback'            => array( $this, 'get_content_widgets' ),\n+\t\t\t\t\t'permission_callback' => '__return_true',\n+\t\t\t\t),\n+\t\t\t),\n+\t\t);\n+\n+\t\tparent::register_routes();\n+\t}\n+\n+\tpublic function get_content_widgets( WP_REST_Request $request ): LP_REST_Response {\n+\t\tglobal $wp_widget_factory;\n+\n+\t\t$response       = new LP_REST_Response();\n+\t\t$response->data = '';\n+\n+\t\ttry {\n+\t\t\t$params    = $request->get_params();\n+\t\t\t$widget_id = $params['widget'] ?? false; \u002F\u002F LP_Widget.\n+\t\t\t$instance  = $params['instance'] ?? false;\n+\n+\t\t\tif ( empty( $widget_id ) || empty( $instance ) ) {\n+\t\t\t\tthrow new Exception( 'Error: No params!' );\n+\t\t\t}\n+\n+\t\t\t$widget_object = $wp_widget_factory->get_widget_object( $widget_id );\n+\n+\t\t\tif ( ! method_exists( $widget_object, 'lp_rest_api_content' ) ) {\n+\t\t\t\tthrow new Exception( 'Error: No method lp_rest_api_content!' );\n+\t\t\t}\n+\n+\t\t\t$instance = json_decode( $instance, true );\n+\n+\t\t\tunset( $params['instance'] );\n+\t\t\tunset( $params['hash'] );\n+\n+\t\t\t$data = $widget_object->lp_rest_api_content( $instance, $params ); \u002F\u002F LP_Widget->lp_rest_api_content.\n+\n+\t\t\tif ( is_wp_error( $data ) ) {\n+\t\t\t\tthrow new Exception( $data->get_error_message() );\n+\t\t\t}\n+\n+\t\t\t$response->status = 'success';\n+\t\t\t$response->data   = $data;\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$response->status  = 'error';\n+\t\t\t$response->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FCourseService.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FCourseService.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FCourseService.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FCourseService.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,58 +1,150 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Services;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\CourseSectionDB;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\CourseSectionModel;\r\n-use LP_Helper;\r\n-use LP_Section_DB;\r\n-use LP_Settings;\r\n-use stdClass;\r\n-\r\n-\u002F**\r\n- * Class CourseService\r\n- *\r\n- * Create course with data.\r\n- *\r\n- * @package LearnPress\\Services\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class CourseService {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create course info main\r\n-\t *\r\n-\t * @param array $data [ 'post_title' => '', 'post_content' => '', 'post_status' => '', 'post_author' => , ... ]\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_info_main( array $data ): CoursePostModel {\r\n-\t\t$coursePostModelNew = new CoursePostModel( $data );\r\n-\t\t$coursePostModelNew->save();\r\n-\r\n-\t\treturn $coursePostModelNew;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create metadata for course\r\n-\t *\r\n-\t * @param CoursePostModel $coursePostModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function create_meta_data( CoursePostModel $coursePostModel, array $data ) {\r\n-\t\tforeach ( $data as $key => $value ) {\r\n-\t\t\t$coursePostModel->save_meta_value_by_key( $key, $value );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Services;\n+\n+use Exception;\n+use LearnPress\\Databases\\CourseSectionDB;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\CourseSectionModel;\n+use LP_Helper;\n+use LP_Section_DB;\n+use LP_Settings;\n+use stdClass;\n+\n+\u002F**\n+ * Class CourseService\n+ *\n+ * Create course with data.\n+ *\n+ * @package LearnPress\\Services\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class CourseService {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t}\n+\n+\t\u002F**\n+\t * Create course info main\n+\t *\n+\t * @param array $data [ 'post_title' => '', 'post_content' => '', 'post_status' => '', 'post_author' => , ... ]\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function create_info_main( array $data ): CoursePostModel {\n+\t\t$coursePostModelNew = new CoursePostModel( $data );\n+\n+\t\t\u002F\u002F Set meta data\n+\t\tif ( isset( $data['meta_input'] ) ) {\n+\t\t\t$coursePostModelNew->meta_data = (object) $data['meta_input'];\n+\t\t}\n+\n+\t\t$coursePostModelNew->save();\n+\n+\t\treturn $coursePostModelNew;\n+\t}\n+\n+\t\u002F**\n+\t * Update categories for course\n+\t * Create categories if not exists\n+\t *\n+\t * @param $course_id\n+\t * @param int[] $category_ids\n+\t *\n+\t * @return void\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_categories( $course_id, array $category_ids ) {\n+\t\t\u002F\u002F Create categories if not exists\n+\t\tforeach ( $category_ids as $category_id ) {\n+\t\t\t$term_check = term_exists( $category_id, CoursePostModel::TAXONOMY_CATEGORY );\n+\t\t\tif ( ! $term_check ) {\n+\t\t\t\twp_insert_term( $category_id, CoursePostModel::TAXONOMY_CATEGORY );\n+\t\t\t}\n+\t\t}\n+\n+\t\twp_set_post_terms( $course_id, $category_ids, CoursePostModel::TAXONOMY_CATEGORY );\n+\t}\n+\n+\t\u002F**\n+\t * Update tags for course\n+\t * Create tags if not exists\n+\t *\n+\t * @param $course_id\n+\t * @param array $tag_ids\n+\t *\n+\t * @return void\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function update_tags( $course_id, array $tag_ids ) {\n+\t\t\u002F\u002F Create tags if not exists\n+\t\tforeach ( $tag_ids as $tag_id ) {\n+\t\t\t$term_check = term_exists( $tag_id, CoursePostModel::TAXONOMY_TAG );\n+\t\t\tif ( ! $term_check ) {\n+\t\t\t\twp_insert_term( $tag_id, CoursePostModel::TAXONOMY_TAG );\n+\t\t\t}\n+\t\t}\n+\n+\t\twp_set_post_terms( $course_id, $tag_ids, CoursePostModel::TAXONOMY_TAG );\n+\t}\n+\n+\t\u002F**\n+\t * Duplicate course\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function duplicate( CourseModel $courseModel ): CourseModel {\n+\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\t$coursePostModel->get_all_metadata();\n+\t\t$coursePostModelNew             = new CoursePostModel( $coursePostModel );\n+\t\t$coursePostModelNew->ID         = null;\n+\t\t$coursePostModelNew->post_title = $coursePostModelNew->post_title . ' (Copy)';\n+\t\t$coursePostModelNew->save();\n+\n+\t\t\u002F\u002F Duplicate sections\n+\t\t$sections = $courseModel->get_section_items();\n+\t\tforeach ( $sections as $section ) {\n+\t\t\t$section_name        = $section->section_name ?? $section->title ?? '';\n+\t\t\t$section_description = $section->section_description ?? $section->description ?? '';\n+\n+\t\t\t$courseSectionModel = $coursePostModelNew->add_section(\n+\t\t\t\t[\n+\t\t\t\t\t'section_name'        => $section_name,\n+\t\t\t\t\t'section_description' => $section_description,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Duplicate items for section\n+\t\t\t$items = $section->items ?? [];\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t$item_title   = $item->title ?? '';\n+\t\t\t\t$item_type    = $item->type ?? $item->item_type ?? '';\n+\t\t\t\t$item_content = '';\n+\n+\t\t\t\t\u002F\u002F Get item content from post\n+\t\t\t\t$item_post = get_post( $item->item_id ?? $item->id ?? 0 );\n+\t\t\t\tif ( $item_post ) {\n+\t\t\t\t\t$item_content = $item_post->post_content ?? '';\n+\t\t\t\t}\n+\n+\t\t\t\t$courseSectionModel->create_item_and_add(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'item_title'   => $item_title,\n+\t\t\t\t\t\t'item_type'    => $item_type,\n+\t\t\t\t\t\t'item_content' => $item_content,\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $courseModel;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FOpenAiService.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FOpenAiService.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FOpenAiService.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FOpenAiService.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,271 +1,282 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Services;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LP_Helper;\r\n-use LP_Settings;\r\n-\r\n-\u002F**\r\n- * Class OpenAiService\r\n- *\r\n- * Handles interactions with the OpenAI API for LearnPress.\r\n- *\r\n- * @package LearnPress\\Services\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class OpenAiService {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic string $baseUrl = 'https:\u002F\u002Fapi.openai.com\u002Fv1\u002F';\r\n-\tpublic string $urlChartCompletion;\r\n-\tpublic string $urlResponses;\r\n-\tpublic string $urlCompletionLegacy;\r\n-\tpublic string $urlImage;\r\n-\r\n-\tpublic string $secret_key;\r\n-\tpublic string $text_model_type;\r\n-\tpublic string $image_model_type;\r\n-\tpublic float $frequency_penalty;\r\n-\tpublic float $presence_penalty;\r\n-\tpublic float $creativity_level;\r\n-\tpublic int $max_token;\r\n-\r\n-\tpublic function init() {\r\n-\t\t$this->urlChartCompletion  = $this->baseUrl . 'chat\u002Fcompletions';\r\n-\t\t$this->urlCompletionLegacy = $this->baseUrl . 'completions';\r\n-\t\t$this->urlResponses        = $this->baseUrl . 'responses';\r\n-\t\t$this->urlImage            = $this->baseUrl . 'images\u002Fgenerations';\r\n-\t\t$this->get_settings();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check OpenAI integration is enabled\r\n-\t *\u002F\r\n-\tpublic function is_enable(): bool {\r\n-\t\treturn LP_Settings::get_option( 'enable_open_ai', 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\tpublic function get_settings() {\r\n-\t\t$this->secret_key        = LP_Settings::get_option( 'open_ai_secret_key', '' );\r\n-\t\t$this->text_model_type   = LP_Settings::get_option( 'open_ai_text_model_type', 'gpt-4.1' );\r\n-\t\t$this->image_model_type  = LP_Settings::get_option( 'open_ai_image_model_type', 'dall-e-3' );\r\n-\t\t$this->frequency_penalty = LP_Settings::get_option( 'open_ai_frequency_penalty_level', 0.0 );\r\n-\t\t$this->presence_penalty  = LP_Settings::get_option( 'open_ai_presence_penalty_level', 0.0 );\r\n-\t\t$this->creativity_level  = LP_Settings::get_option( 'open_ai_creativity_level', 1.0 );\r\n-\t\t$this->max_token         = LP_Settings::get_option( 'open_ai_max_token', 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Call OpenAI API\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function send_request( array $args ): array {\r\n-\t\t\u002F\u002F Handle args before send request\r\n-\t\t$url = '';\r\n-\r\n-\t\tif ( in_array(\r\n-\t\t\t$this->text_model_type,\r\n-\t\t\t[ 'chatgpt-4o-latest', 'gpt-4o', 'gpt-4o-mini', 'gpt-3.5-turbo' ]\r\n-\t\t) ) {\r\n-\t\t\t$url  = $this->urlChartCompletion;\r\n-\t\t\t$args = $this->handle_params_for_send_chat_completion( $args );\r\n-\t\t} elseif ( $this->text_model_type == 'gpt-3.5-turbo-instruct' ) {\r\n-\t\t\t$url  = $this->urlCompletionLegacy;\r\n-\t\t\t$args = $this->handle_params_for_send_completion_legacy( $args );\r\n-\t\t} else {\r\n-\t\t\t$url  = $this->urlResponses;\r\n-\t\t\t$args = $this->handle_params_for_send_responses( $args );\r\n-\t\t}\r\n-\r\n-\t\t$response = wp_remote_post(\r\n-\t\t\t$url,\r\n-\t\t\t[\r\n-\t\t\t\t'headers' => [\r\n-\t\t\t\t\t'Authorization' => 'Bearer ' . $this->secret_key,\r\n-\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\r\n-\t\t\t\t],\r\n-\t\t\t\t'body'    => json_encode( $args ),\r\n-\t\t\t\t'timeout' => 3600,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tif ( is_wp_error( $response ) ) {\r\n-\t\t\tthrow new Exception( $response->get_error_message(), 400 );\r\n-\t\t}\r\n-\r\n-\t\t$body = wp_remote_retrieve_body( $response );\r\n-\t\t$data = LP_Helper::json_decode( $body, true );\r\n-\t\tif ( isset( $data['error'] ) ) {\r\n-\t\t\tthrow new Exception( $data['error']['message'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $this->detected_data( $data );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function send_request_create_image( $args ) {\r\n-\t\t$args_default = [\r\n-\t\t\t'model'  => $this->image_model_type,\r\n-\t\t\t'prompt' => '',\r\n-\t\t];\r\n-\r\n-\t\t$args = array_merge( $args_default, $args );\r\n-\r\n-\t\t$model_type = LP_Settings::get_option( 'open_ai_image_model_type', 'gpt-image-1' );\r\n-\t\tif ( $model_type === 'gpt-image-1' ) {\r\n-\t\t\tunset( $args['n'] );\r\n-\t\t}\r\n-\r\n-\t\tif ( $model_type == 'dall-e-3' ) {\r\n-\t\t\t\u002F\u002F only n=1 is supported.\r\n-\t\t\t$args['n'] = 1;\r\n-\t\t}\r\n-\r\n-\t\t$response = wp_remote_post(\r\n-\t\t\t$this->urlImage,\r\n-\t\t\t[\r\n-\t\t\t\t'headers' => [\r\n-\t\t\t\t\t'Authorization' => 'Bearer ' . $this->secret_key,\r\n-\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\r\n-\t\t\t\t],\r\n-\t\t\t\t'body'    => json_encode( $args ),\r\n-\t\t\t\t'timeout' => 3600,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tif ( is_wp_error( $response ) ) {\r\n-\t\t\tthrow new Exception( $response->get_error_message(), 400 );\r\n-\t\t}\r\n-\r\n-\t\t$body = wp_remote_retrieve_body( $response );\r\n-\t\t$data = LP_Helper::json_decode( $body, true );\r\n-\t\tif ( isset( $data['error'] ) ) {\r\n-\t\t\tthrow new Exception( $data['error']['message'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle params for send chat completion\r\n-\t *\r\n-\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fchat\u002Fcreate\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function handle_params_for_send_chat_completion( $params ): array {\r\n-\t\t$params = [\r\n-\t\t\t'model'                 => $this->text_model_type,\r\n-\t\t\t'frequency_penalty'     => $this->frequency_penalty,\r\n-\t\t\t'presence_penalty'      => $this->presence_penalty,\r\n-\t\t\t'temperature'           => $this->creativity_level,\r\n-\t\t\t'max_completion_tokens' => $this->max_token,\r\n-\t\t\t'response_format'       => [ 'type' => 'json_object' ],\r\n-\t\t\t'n'                     => $args['outputs'] ?? 1,\r\n-\t\t\t'messages'              => [\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'role'    => 'system',\r\n-\t\t\t\t\t'content' => 'You are an AI assistant specialized in education and course design.',\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'role'    => 'user',\r\n-\t\t\t\t\t'content' => $params['prompt'] ?? '',\r\n-\t\t\t\t],\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\tif ( $this->max_token === 0 ) {\r\n-\t\t\tunset( $params['max_completion_tokens'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle params for send chat completion\r\n-\t *\r\n-\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fcompletions\u002Fcreate\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function handle_params_for_send_completion_legacy( $params ): array {\r\n-\t\t$params = [\r\n-\t\t\t'model'       => $this->text_model_type,\r\n-\t\t\t'temperature' => $this->creativity_level,\r\n-\t\t\t'max_tokens'  => $this->max_token,\r\n-\t\t\t'n'           => $args['outputs'] ?? 1,\r\n-\t\t\t'prompt'      => $params['prompt'] ?? '',\r\n-\t\t];\r\n-\r\n-\t\tif ( $this->max_token === 0 ) {\r\n-\t\t\tunset( $params['max_tokens'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle params for send chat completion\r\n-\t *\r\n-\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses\u002Fcreate\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function handle_params_for_send_responses( $params ): array {\r\n-\t\t$params = [\r\n-\t\t\t'model'             => $this->text_model_type,\r\n-\t\t\t\u002F\u002F'temperature'       => $this->creativity_level,\r\n-\t\t\t'max_output_tokens' => $this->max_token,\r\n-\t\t\t'input'             => $params['prompt'] ?? '',\r\n-\t\t];\r\n-\r\n-\t\tif ( $this->max_token === 0 ) {\r\n-\t\t\tunset( $params['max_output_tokens'] );\r\n-\t\t}\r\n-\r\n-\t\treturn $params;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Detect data from response\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function detected_data( array $data ): array {\r\n-\t\t$data['lp_structure_data'] = [];\r\n-\r\n-\t\tif ( isset( $data['choices'] ) ) {\r\n-\t\t\tforeach ( $data['choices'] as $choice ) {\r\n-\t\t\t\t$text = $choice['message']['content'] ?? $choice['text'] ?? '';\r\n-\t\t\t\t$text = str_replace( [ \"\\\\n\", \"\\\\r\", \"\\n\", \"\\r\", \"\\t\" ], '', $text );\r\n-\r\n-\t\t\t\t$data['lp_structure_data'][] = LP_Helper::json_decode( $text, true );\r\n-\t\t\t}\r\n-\t\t} elseif ( isset( $data['output'] ) ) {\r\n-\t\t\tforeach ( $data['output'] as $output ) {\r\n-\t\t\t\t$content_data = $output['content'] ?? [];\r\n-\t\t\t\tif ( empty( $content_data ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $output['content'] as $content ) {\r\n-\t\t\t\t\ttry {\r\n-\t\t\t\t\t\t$text                        = $content['text'] ?? '';\r\n-\t\t\t\t\t\t$text                        = str_replace( [ \"\\\\n\", \"\\\\r\", \"\\n\", \"\\r\", \"\\t\" ], '', $text );\r\n-\t\t\t\t\t\t$data['lp_structure_data'][] = LP_Helper::json_decode( $text, true );\r\n-\t\t\t\t\t} catch ( Exception $e ) {\r\n-\t\t\t\t\t\t$data['lp_structure_data'][] = $content['text'] ?? '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Services;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Singleton;\n+use LP_Helper;\n+use LP_Settings;\n+\n+\u002F**\n+ * Class OpenAiService\n+ *\n+ * Handles interactions with the OpenAI API for LearnPress.\n+ *\n+ * @package LearnPress\\Services\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class OpenAiService {\n+\tuse Singleton;\n+\n+\tpublic string $baseUrl = 'https:\u002F\u002Fapi.openai.com\u002Fv1\u002F';\n+\tpublic string $urlChartCompletion;\n+\tpublic string $urlResponses;\n+\tpublic string $urlCompletionLegacy;\n+\tpublic string $urlImage;\n+\n+\tpublic string $secret_key;\n+\tpublic string $text_model_type;\n+\tpublic string $image_model_type;\n+\tpublic float $frequency_penalty;\n+\tpublic float $presence_penalty;\n+\tpublic float $creativity_level;\n+\tpublic int $max_token;\n+\n+\tpublic function init() {\n+\t\t$this->urlChartCompletion  = $this->baseUrl . 'chat\u002Fcompletions';\n+\t\t$this->urlCompletionLegacy = $this->baseUrl . 'completions';\n+\t\t$this->urlResponses        = $this->baseUrl . 'responses';\n+\t\t$this->urlImage            = $this->baseUrl . 'images\u002Fgenerations';\n+\t\t$this->get_settings();\n+\t}\n+\n+\t\u002F**\n+\t * Check OpenAI integration is enabled\n+\t *\u002F\n+\tpublic function is_enable(): bool {\n+\t\treturn LP_Settings::get_option( 'enable_open_ai', 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Get secret key\n+\t *\n+\t * @return string\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_secret_key(): string {\n+\t\treturn (string) LP_Settings::get_option( 'open_ai_secret_key', '' );\n+\t}\n+\n+\tpublic function get_settings() {\n+\t\t$this->secret_key        = LP_Settings::get_option( 'open_ai_secret_key', '' );\n+\t\t$this->text_model_type   = LP_Settings::get_option( 'open_ai_text_model_type', 'gpt-4.1' );\n+\t\t$this->image_model_type  = LP_Settings::get_option( 'open_ai_image_model_type', 'dall-e-3' );\n+\t\t$this->frequency_penalty = LP_Settings::get_option( 'open_ai_frequency_penalty_level', 0.0 );\n+\t\t$this->presence_penalty  = LP_Settings::get_option( 'open_ai_presence_penalty_level', 0.0 );\n+\t\t$this->creativity_level  = LP_Settings::get_option( 'open_ai_creativity_level', 1.0 );\n+\t\t$this->max_token         = LP_Settings::get_option( 'open_ai_max_token', 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Call OpenAI API\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function send_request( array $args ): array {\n+\t\t\u002F\u002F Handle args before send request\n+\t\t$url = '';\n+\n+\t\tif ( in_array(\n+\t\t\t$this->text_model_type,\n+\t\t\t[ 'chatgpt-4o-latest', 'gpt-4o', 'gpt-4o-mini', 'gpt-3.5-turbo' ]\n+\t\t) ) {\n+\t\t\t$url  = $this->urlChartCompletion;\n+\t\t\t$args = $this->handle_params_for_send_chat_completion( $args );\n+\t\t} elseif ( $this->text_model_type == 'gpt-3.5-turbo-instruct' ) {\n+\t\t\t$url  = $this->urlCompletionLegacy;\n+\t\t\t$args = $this->handle_params_for_send_completion_legacy( $args );\n+\t\t} else {\n+\t\t\t$url  = $this->urlResponses;\n+\t\t\t$args = $this->handle_params_for_send_responses( $args );\n+\t\t}\n+\n+\t\t$response = wp_remote_post(\n+\t\t\t$url,\n+\t\t\t[\n+\t\t\t\t'headers' => [\n+\t\t\t\t\t'Authorization' => 'Bearer ' . $this->secret_key,\n+\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\n+\t\t\t\t],\n+\t\t\t\t'body'    => json_encode( $args ),\n+\t\t\t\t'timeout' => 3600,\n+\t\t\t]\n+\t\t);\n+\n+\t\tif ( is_wp_error( $response ) ) {\n+\t\t\tthrow new Exception( $response->get_error_message(), 400 );\n+\t\t}\n+\n+\t\t$body = wp_remote_retrieve_body( $response );\n+\t\t$data = LP_Helper::json_decode( $body, true );\n+\t\tif ( isset( $data['error'] ) ) {\n+\t\t\tthrow new Exception( $data['error']['message'] );\n+\t\t}\n+\n+\t\treturn $this->detected_data( $data );\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function send_request_create_image( $args ) {\n+\t\t$args_default = [\n+\t\t\t'model'  => $this->image_model_type,\n+\t\t\t'prompt' => '',\n+\t\t];\n+\n+\t\t$args = array_merge( $args_default, $args );\n+\n+\t\t$model_type = LP_Settings::get_option( 'open_ai_image_model_type', 'gpt-image-1' );\n+\t\tif ( $model_type === 'gpt-image-1' ) {\n+\t\t\tunset( $args['n'] );\n+\t\t}\n+\n+\t\tif ( $model_type == 'dall-e-3' ) {\n+\t\t\t\u002F\u002F only n=1 is supported.\n+\t\t\t$args['n'] = 1;\n+\t\t}\n+\n+\t\t$response = wp_remote_post(\n+\t\t\t$this->urlImage,\n+\t\t\t[\n+\t\t\t\t'headers' => [\n+\t\t\t\t\t'Authorization' => 'Bearer ' . $this->secret_key,\n+\t\t\t\t\t'Content-Type'  => 'application\u002Fjson',\n+\t\t\t\t],\n+\t\t\t\t'body'    => json_encode( $args ),\n+\t\t\t\t'timeout' => 3600,\n+\t\t\t]\n+\t\t);\n+\n+\t\tif ( is_wp_error( $response ) ) {\n+\t\t\tthrow new Exception( $response->get_error_message(), 400 );\n+\t\t}\n+\n+\t\t$body = wp_remote_retrieve_body( $response );\n+\t\t$data = LP_Helper::json_decode( $body, true );\n+\t\tif ( isset( $data['error'] ) ) {\n+\t\t\tthrow new Exception( $data['error']['message'] );\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Handle params for send chat completion\n+\t *\n+\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fchat\u002Fcreate\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function handle_params_for_send_chat_completion( $params ): array {\n+\t\t$params = [\n+\t\t\t'model'                 => $this->text_model_type,\n+\t\t\t'frequency_penalty'     => $this->frequency_penalty,\n+\t\t\t'presence_penalty'      => $this->presence_penalty,\n+\t\t\t'temperature'           => $this->creativity_level,\n+\t\t\t'max_completion_tokens' => $this->max_token,\n+\t\t\t'response_format'       => [ 'type' => 'json_object' ],\n+\t\t\t'n'                     => $args['outputs'] ?? 1,\n+\t\t\t'messages'              => [\n+\t\t\t\t[\n+\t\t\t\t\t'role'    => 'system',\n+\t\t\t\t\t'content' => 'You are an AI assistant specialized in education and course design.',\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'role'    => 'user',\n+\t\t\t\t\t'content' => $params['prompt'] ?? '',\n+\t\t\t\t],\n+\t\t\t],\n+\t\t];\n+\n+\t\tif ( $this->max_token === 0 ) {\n+\t\t\tunset( $params['max_completion_tokens'] );\n+\t\t}\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Handle params for send chat completion\n+\t *\n+\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fcompletions\u002Fcreate\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function handle_params_for_send_completion_legacy( $params ): array {\n+\t\t$params = [\n+\t\t\t'model'       => $this->text_model_type,\n+\t\t\t'temperature' => $this->creativity_level,\n+\t\t\t'max_tokens'  => $this->max_token,\n+\t\t\t'n'           => $args['outputs'] ?? 1,\n+\t\t\t'prompt'      => $params['prompt'] ?? '',\n+\t\t];\n+\n+\t\tif ( $this->max_token === 0 ) {\n+\t\t\tunset( $params['max_tokens'] );\n+\t\t}\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Handle params for send chat completion\n+\t *\n+\t * @docs https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fapi-reference\u002Fresponses\u002Fcreate\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function handle_params_for_send_responses( $params ): array {\n+\t\t$params = [\n+\t\t\t'model'             => $this->text_model_type,\n+\t\t\t\u002F\u002F'temperature'       => $this->creativity_level,\n+\t\t\t'max_output_tokens' => $this->max_token,\n+\t\t\t'input'             => $params['prompt'] ?? '',\n+\t\t];\n+\n+\t\tif ( $this->max_token === 0 ) {\n+\t\t\tunset( $params['max_output_tokens'] );\n+\t\t}\n+\n+\t\treturn $params;\n+\t}\n+\n+\t\u002F**\n+\t * Detect data from response\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function detected_data( array $data ): array {\n+\t\t$data['lp_structure_data'] = [];\n+\n+\t\tif ( isset( $data['choices'] ) ) {\n+\t\t\tforeach ( $data['choices'] as $choice ) {\n+\t\t\t\t$text = $choice['message']['content'] ?? $choice['text'] ?? '';\n+\t\t\t\t$text = str_replace( [ \"\\\\n\", \"\\\\r\", \"\\n\", \"\\r\", \"\\t\" ], '', $text );\n+\n+\t\t\t\t$data['lp_structure_data'][] = LP_Helper::json_decode( $text, true );\n+\t\t\t}\n+\t\t} elseif ( isset( $data['output'] ) ) {\n+\t\t\tforeach ( $data['output'] as $output ) {\n+\t\t\t\t$content_data = $output['content'] ?? [];\n+\t\t\t\tif ( empty( $content_data ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $output['content'] as $content ) {\n+\t\t\t\t\ttry {\n+\t\t\t\t\t\t$text                        = $content['text'] ?? '';\n+\t\t\t\t\t\t$text                        = str_replace( [ \"\\\\n\", \"\\\\r\", \"\\n\", \"\\r\", \"\\t\" ], '', $text );\n+\t\t\t\t\t\t$data['lp_structure_data'][] = LP_Helper::json_decode( $text, true );\n+\t\t\t\t\t} catch ( Exception $e ) {\n+\t\t\t\t\t\t$data['lp_structure_data'][] = $content['text'] ?? '';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FUserService.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FUserService.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FServices\u002FUserService.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FServices\u002FUserService.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,104 +1,171 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Services;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_User_DB;\r\n-use LP_User_Filter;\r\n-\r\n-\r\n-\u002F**\r\n- * Class UserService\r\n- *\r\n- * Handle logic business for user.\r\n- *\r\n- * @since 4.3.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class UserService {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {}\r\n-\r\n-\t\u002F**\r\n-\t * Check if pretty slug exists of another user.\r\n-\t *\r\n-\t * @param string $slug\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t * @throws Exception\r\n-\t * @version 1.0.0\r\n-\t * @since 4.3.4\r\n-\t *\u002F\r\n-\tpublic function get_user_by_pretty_slug( string $slug ) {\r\n-\t\t$slug = trim( urldecode( $slug ) );\r\n-\t\t$slug = sanitize_title( $slug );\r\n-\r\n-\t\tif ( '' === $slug ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$lp_user_db          = LP_User_DB::instance();\r\n-\t\t$filter              = new LP_User_Filter();\r\n-\t\t$filter->only_fields = [ 'u.ID' ];\r\n-\t\t$lp_user_db->get_query_single_row( $filter );\r\n-\t\t$filter->join[]  = \"INNER JOIN {$lp_user_db->wpdb->usermeta} AS um ON um.user_id = u.ID\";\r\n-\t\t$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_key = %s', UserModel::META_KEY_USER_SLUG );\r\n-\t\t$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_value = %s', $slug );\r\n-\t\t$query           = $lp_user_db->get_users( $filter );\r\n-\r\n-\t\t$user_id = (int) $lp_user_db->wpdb->get_var( $query );\r\n-\r\n-\t\treturn UserModel::find( $user_id, true );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate pretty slug for all users who don't have it yet.\r\n-\t *\r\n-\t * @return array [ 'processed' => int, 'generated' => int, 'skipped' => int, 'failed' => int ]\r\n-\t * @since 4.3.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function generate_users_pretty_slug(): array {\r\n-\t\t$user_ids = get_users(\r\n-\t\t\t[\r\n-\t\t\t\t'fields' => 'ids',\r\n-\t\t\t\t'number' => - 1,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$result = [\r\n-\t\t\t'processed' => 0,\r\n-\t\t\t'generated' => 0,\r\n-\t\t\t'skipped'   => 0,\r\n-\t\t\t'failed'    => 0,\r\n-\t\t];\r\n-\r\n-\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t$user_id = (int) $user_id;\r\n-\t\t\t++ $result['processed'];\r\n-\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\t\t++ $result['failed'];\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( '' !== $userModel->get_pretty_slug( false ) ) {\r\n-\t\t\t\t++ $result['skipped'];\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$generated = $userModel->generate_pretty_slug();\r\n-\t\t\tif ( is_wp_error( $generated ) ) {\r\n-\t\t\t\t++ $result['failed'];\r\n-\t\t\t} else {\r\n-\t\t\t\t++ $result['generated'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Services;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\UserModel;\n+use Throwable;\n+use WP_Error;\n+use WP_User;\n+\n+\n+\u002F**\n+ * Class UserService\n+ *\n+ * Handle logic business for user.\n+ *\n+ * @since 4.3.4\n+ * @version 1.0.0\n+ *\u002F\n+class UserService {\n+\tuse Singleton;\n+\n+\tpublic function init() {}\n+\n+\t\u002F**\n+\t * Check if pretty slug exists of another user.\n+\t *\n+\t * @param string $slug\n+\t *\n+\t * @return false|UserModel\n+\t * @throws Exception\n+\t * @version 1.0.1\n+\t * @since 4.3.4\n+\t *\u002F\n+\t\u002F*public function get_user_by_pretty_slug( string $slug ) {\n+\t\tif ( '' === $slug ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$lp_user_db          = UserDB::getInstance();\n+\t\t$filter              = new UserFilter();\n+\t\t$filter->only_fields = [ 'u.ID' ];\n+\t\t$lp_user_db->get_query_single_row( $filter );\n+\t\t$filter->join[]  = \"INNER JOIN {$lp_user_db->wpdb->usermeta} AS um ON um.user_id = u.ID\";\n+\t\t$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_key = %s', UserModel::META_KEY_USER_SLUG );\n+\t\t$filter->where[] = $lp_user_db->wpdb->prepare( 'AND um.meta_value = %s', $slug );\n+\t\t$query           = $lp_user_db->get_users( $filter );\n+\n+\t\t$user_id = (int) $lp_user_db->wpdb->get_var( $query );\n+\n+\t\treturn UserModel::find( $user_id, true );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Generate pretty slug for all users who don't have it yet.\n+\t *\n+\t * @return array [ 'processed' => int, 'generated' => int, 'skipped' => int, 'failed' => int ]\n+\t * @since 4.3.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function generate_users_pretty_slug(): array {\n+\t\t$user_ids = get_users(\n+\t\t\t[\n+\t\t\t\t'fields' => 'ids',\n+\t\t\t\t'number' => - 1,\n+\t\t\t]\n+\t\t);\n+\n+\t\t$result = [\n+\t\t\t'processed' => 0,\n+\t\t\t'generated' => 0,\n+\t\t\t'skipped'   => 0,\n+\t\t\t'failed'    => 0,\n+\t\t];\n+\n+\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t$user_id = (int) $user_id;\n+\t\t\t++ $result['processed'];\n+\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\t\t++ $result['failed'];\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( '' !== $userModel->get_slug_link() ) {\n+\t\t\t\t++ $result['skipped'];\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$generated = $this->generate_pretty_slug( $userModel );\n+\t\t\tif ( is_wp_error( $generated ) ) {\n+\t\t\t\t++ $result['failed'];\n+\t\t\t} else {\n+\t\t\t\t++ $result['generated'];\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Create a unique pretty slug for user.\n+\t *\n+\t * If the user already has a pretty slug, it will return the existing one without generating a new one.\n+\t * The slug is generated based on the user's first name and last name.\n+\t * If empty user's first name and last name, it will use the username with uniqid() to generate a slug.\n+\t *\n+\t * @return string|WP_Error\n+\t * @since 4.3.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function generate_pretty_slug( UserModel $userModel ) {\n+\t\t$user_slug_new = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check if pretty slug already exists, if exists, return it without generating a new one.\n+\t\t\t$existing_slug = $userModel->get_slug_link();\n+\t\t\tif ( ! empty( $existing_slug ) ) {\n+\t\t\t\treturn $existing_slug;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Generate pretty slug based on first name and last name.\n+\t\t\t$first_name  = $userModel->get_meta_value_by_key( 'first_name', '' );\n+\t\t\t$last_name   = $userModel->get_meta_value_by_key( 'last_name', '' );\n+\t\t\t$base_source = trim( \"{$first_name} {$last_name}\" );\n+\t\t\t$base_slug   = sanitize_title( $base_source );\n+\n+\t\t\tif ( empty( $base_slug ) ) {\n+\t\t\t\t\u002F\u002F Shuffle username with uniqid to make it more unique and less guessable, get first 10 characters to make slug shorter.\n+\t\t\t\t$base_slug = substr( str_shuffle( sanitize_title( $userModel->user_login . uniqid() ) ), 0, 10 );\n+\t\t\t} else {\n+\t\t\t\t$base_slug = $base_slug . substr( str_shuffle( uniqid() ), 0, 3 );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check slug exists.\n+\t\t\t$userModelFind = UserService::instance()->get_user_by_slug_link( $base_slug );\n+\t\t\tif ( ! $userModelFind ) {\n+\t\t\t\t$userModel->user_nicename = $base_slug;\n+\t\t\t\t$userModel->save();\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Regenerate slug by adding random string at the end of base slug until it is unique.\n+\t\t\t\t$user_slug_new = $this->generate_pretty_slug( $userModel );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\treturn new WP_Error( 'lp_user_slug_generation_failed', $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_slug_new;\n+\t}\n+\n+\t\u002F**\n+\t * Detected user by slug link.\n+\t *\n+\t * @param string $slug_link\n+\t *\n+\t * @return false|UserModel\n+\t * @since 4.3.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_user_by_slug_link( string $slug_link ) {\n+\t\t\u002F\u002F Get from column `user_nicename` in table `wp_users`.\n+\t\t$wp_user = get_user_by( 'slug', $slug_link );\n+\t\tif ( ! $wp_user instanceof WP_User ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn new UserModel( $wp_user->data );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fsettings\u002Fabstract-settings-page.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fsettings\u002Fabstract-settings-page.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fsettings\u002Fabstract-settings-page.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fsettings\u002Fabstract-settings-page.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,128 +1,128 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class LP_Abstract_Settings_Page\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-class LP_Abstract_Settings_Page extends LP_Abstract_Settings {\r\n-\r\n-\t\u002F**\r\n-\t * Tab's ID\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $id = '';\r\n-\r\n-\t\u002F**\r\n-\t * Tab's text\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $text = '';\r\n-\r\n-\t\u002F**\r\n-\t * Constructor\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display admin page in LP4.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t * @version 4.0.0\r\n-\t *\u002F\r\n-\tpublic function admin_page_settings( $section = null, $tab = '' ) {\r\n-\t\twp_enqueue_style( 'select2' );\r\n-\t\t$settings = $this->get_settings( $section, $tab );\r\n-\t\t$settings = $this->sanitize_settings( $settings );\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fsettings-render' );\r\n-\r\n-\t\tif ( $settings ) {\r\n-\t\t\tLP_Meta_Box_Helper::output_fields( $settings );\r\n-\t\t} else {\r\n-\t\t\techo esc_html__( 'No settings available.', 'learnpress' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Save option in LP4.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t * @version 4.0.0\r\n-\t *\u002F\r\n-\tpublic function save_settings( $section = null, $tab = '' ) {\r\n-\t\t$settings = apply_filters( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $section, $this->get_settings( $section, $tab ) );\r\n-\t\t$settings = $this->sanitize_settings( $settings );\r\n-\r\n-\t\tif ( $settings ) {\r\n-\t\t\tLP_Meta_Box_Helper::save_fields( $settings, $_POST );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get name for field\r\n-\t *\r\n-\t * @param $name\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_field_name( $name ) {\r\n-\t\t$field_name = apply_filters( 'learn_press_settings_field_name_' . $name, \"learn_press_{$name}\" );\r\n-\r\n-\t\treturn $field_name;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get ID for field\r\n-\t *\r\n-\t * @param $name\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_field_id( $name ) {\r\n-\t\treturn preg_replace( array( '!\\[|(\\]\\[)!', '!\\]!' ), array( '_', '' ), $this->get_field_name( $name ) );\r\n-\t}\r\n-\r\n-\tpublic function get_sections() {\r\n-\t\treturn array();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = '', $tab = '' ) {\r\n-\t\tif ( ! $section ) {\r\n-\t\t\t$section = $this->get_sections();\r\n-\t\t\t$section = array_keys( $section );\r\n-\t\t}\r\n-\r\n-\t\tsettype( $section, 'array' );\r\n-\r\n-\t\t$return = array();\r\n-\r\n-\t\tforeach ( $section as $sec ) {\r\n-\t\t\tif ( is_callable( array( $this, 'get_settings_' . $sec ) ) ) {\r\n-\t\t\t\t$settings = call_user_func( array( $this, 'get_settings_' . $sec ) );\r\n-\r\n-\t\t\t\tif ( $settings ) {\r\n-\t\t\t\t\t$return = array_merge( $return, $settings );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class LP_Abstract_Settings_Page\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+class LP_Abstract_Settings_Page extends LP_Abstract_Settings {\n+\n+\t\u002F**\n+\t * Tab's ID\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $id = '';\n+\n+\t\u002F**\n+\t * Tab's text\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $text = '';\n+\n+\t\u002F**\n+\t * Constructor\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\t\u002F**\n+\t * Display admin page in LP4.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t * @version 4.0.0\n+\t *\u002F\n+\tpublic function admin_page_settings( $section = null, $tab = '' ) {\n+\t\twp_enqueue_style( 'select2' );\n+\t\t$settings = $this->get_settings( $section, $tab );\n+\t\t$settings = $this->sanitize_settings( $settings );\n+\n+\t\tdo_action( 'learn-press\u002Fsettings-render' );\n+\n+\t\tif ( $settings ) {\n+\t\t\tLP_Meta_Box_Helper::output_fields( $settings );\n+\t\t} else {\n+\t\t\techo esc_html__( 'No settings available.', 'learnpress' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Save option in LP4.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t * @version 4.0.0\n+\t *\u002F\n+\tpublic function save_settings( $section = null, $tab = '' ) {\n+\t\t$settings = apply_filters( 'learn-press\u002Fadmin\u002Fget-settings\u002Fadmin-options-' . $section, $this->get_settings( $section, $tab ) );\n+\t\t$settings = $this->sanitize_settings( $settings );\n+\n+\t\tif ( $settings ) {\n+\t\t\tLP_Meta_Box_Helper::save_fields( $settings, $_POST );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get name for field\n+\t *\n+\t * @param $name\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_field_name( $name ) {\n+\t\t$field_name = apply_filters( 'learn_press_settings_field_name_' . $name, \"learn_press_{$name}\" );\n+\n+\t\treturn $field_name;\n+\t}\n+\n+\t\u002F**\n+\t * Get ID for field\n+\t *\n+\t * @param $name\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_field_id( $name ) {\n+\t\treturn preg_replace( array( '!\\[|(\\]\\[)!', '!\\]!' ), array( '_', '' ), $this->get_field_name( $name ) );\n+\t}\n+\n+\tpublic function get_sections() {\n+\t\treturn array();\n+\t}\n+\n+\t\u002F**\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\tpublic function get_settings( $section = '', $tab = '' ) {\n+\t\tif ( ! $section ) {\n+\t\t\t$section = $this->get_sections();\n+\t\t\t$section = array_keys( $section );\n+\t\t}\n+\n+\t\tsettype( $section, 'array' );\n+\n+\t\t$return = array();\n+\n+\t\tforeach ( $section as $sec ) {\n+\t\t\tif ( is_callable( array( $this, 'get_settings_' . $sec ) ) ) {\n+\t\t\t\t$settings = call_user_func( array( $this, 'get_settings_' . $sec ) );\n+\n+\t\t\t\tif ( $settings ) {\n+\t\t\t\t\t$return = array_merge( $return, $settings );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fsettings\u002Fclass-lp-settings-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fsettings\u002Fclass-lp-settings-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fsettings\u002Fclass-lp-settings-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fsettings\u002Fclass-lp-settings-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,74 +1,76 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-\u002F**\r\n- * Class LP_Settings_Courses\r\n- *\r\n- * @author ThimPress \u003Cemail@email.com>\r\n- *\u002F\r\n-class LP_Settings_Courses extends LP_Abstract_Settings_Page {\r\n-\t\u002F**\r\n-\t * LP_Settings_Courses constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\t$this->id   = 'courses';\r\n-\t\t$this->text = esc_html__( 'Courses', 'learnpress' );\r\n-\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function save() {\r\n-\t\t\u002F\u002F Check role publish course of user teacher\r\n-\t\tif ( ! empty( $_POST ) && isset( $_GET['tab'] ) && $_GET['tab'] === 'courses' ) {\r\n-\t\t\t$teacher                  = get_role( LP_TEACHER_ROLE );\r\n-\t\t\t$course_cap               = LP_COURSE_CPT . 's';\r\n-\t\t\t$review_course_instructor = $_POST['learn_press_required_review'] ?? false;\r\n-\t\t\tif ( $review_course_instructor ) {\r\n-\t\t\t\t$teacher->remove_cap( 'publish_' . $course_cap );\r\n-\t\t\t} else {\r\n-\t\t\t\t$teacher->add_cap( 'publish_' . $course_cap );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End check role publish course of user teacher\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get config settings courses.\r\n-\t *\r\n-\t * @param string $section\r\n-\t * @param string $tab\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_settings( $section = null, $tab = null ): array {\r\n-\t\treturn Config::instance()->get( 'course', 'settings' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get option enable load courses with ajax.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_ajax_load_courses(): bool {\r\n-\t\treturn LP_Settings::get_option( 'courses_load_ajax', 'yes' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get option enable courses archive ajax.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic static function is_no_load_ajax_first_courses(): bool {\r\n-\t\treturn LP_Settings::get_option( 'courses_first_no_ajax', 'no' ) === 'yes';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get option type Pagination.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function get_type_pagination(): string {\r\n-\t\treturn LP_Settings::get_option( 'course_pagination_type', 'number' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Config;\n+\n+\u002F**\n+ * Class LP_Settings_Courses\n+ *\n+ * @author ThimPress \u003Cemail@email.com>\n+ *\u002F\n+class LP_Settings_Courses extends LP_Abstract_Settings_Page {\n+\t\u002F**\n+\t * LP_Settings_Courses constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\t$this->id   = 'courses';\n+\t\t$this->text = esc_html__( 'Courses', 'learnpress' );\n+\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function save() {\n+\t\t\u002F\u002F Check role publish course of user teacher\n+\t\tif ( ! empty( $_POST ) && isset( $_GET['tab'] ) && $_GET['tab'] === 'courses' ) {\n+\t\t\t$teacher = get_role( LP_TEACHER_ROLE );\n+\t\t\tif ( $teacher ) {\n+\t\t\t\t$course_cap               = LP_COURSE_CPT . 's';\n+\t\t\t\t$review_course_instructor = $_POST['learn_press_required_review'] ?? false;\n+\t\t\t\tif ( $review_course_instructor ) {\n+\t\t\t\t\t$teacher->remove_cap( 'publish_' . $course_cap );\n+\t\t\t\t} else {\n+\t\t\t\t\t$teacher->add_cap( 'publish_' . $course_cap );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End check role publish course of user teacher\n+\t}\n+\n+\t\u002F**\n+\t * Get config settings courses.\n+\t *\n+\t * @param string $section\n+\t * @param string $tab\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_settings( $section = null, $tab = null ): array {\n+\t\treturn Config::instance()->get( 'course', 'settings' );\n+\t}\n+\n+\t\u002F**\n+\t * Get option enable load courses with ajax.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_ajax_load_courses(): bool {\n+\t\treturn LP_Settings::get_option( 'courses_load_ajax', 'yes' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Get option enable courses archive ajax.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic static function is_no_load_ajax_first_courses(): bool {\n+\t\treturn LP_Settings::get_option( 'courses_first_no_ajax', 'no' ) === 'yes';\n+\t}\n+\n+\t\u002F**\n+\t * Get option type Pagination.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function get_type_pagination(): string {\n+\t\treturn LP_Settings::get_option( 'course_pagination_type', 'number' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FAbstractShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FAbstractShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FAbstractShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FAbstractShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,30 +1,30 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Shortcodes;\r\n-\r\n-\u002F**\r\n- * Class AbstractShortcode\r\n- *\r\n- * @package LearnPress\\Shortcodes\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-abstract class AbstractShortcode {\r\n-\tprotected $prefix = 'learn_press_';\r\n-\tprotected $shortcode_name;\r\n-\r\n-\tprotected function init() {\r\n-\t\t\u002F\u002F Register shortcode.\r\n-\t\tadd_shortcode( $this->prefix . $this->shortcode_name, array( $this, 'render' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render template of shortcode.\r\n-\t * If not set any attribute on short, $attrs is empty string.\r\n-\t *\r\n-\t * @param string|array $attrs\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tabstract public function render( $attrs ): string;\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Shortcodes;\n+\n+\u002F**\n+ * Class AbstractShortcode\n+ *\n+ * @package LearnPress\\Shortcodes\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+abstract class AbstractShortcode {\n+\tprotected $prefix = 'learn_press_';\n+\tprotected $shortcode_name;\n+\n+\tprotected function init() {\n+\t\t\u002F\u002F Register shortcode.\n+\t\tadd_shortcode( $this->prefix . $this->shortcode_name, array( $this, 'render' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Render template of shortcode.\n+\t * If not set any attribute on short, $attrs is empty string.\n+\t *\n+\t * @param string|array $attrs\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tabstract public function render( $attrs ): string;\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,108 +1,108 @@\n-\u003C?php\r\n-\u002F**\r\n- * Become A Teacher Shortcode.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  4.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Become_A_Teacher' ) ) {\r\n-\tclass LP_Shortcode_Become_A_Teacher extends LP_Abstract_Shortcode {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected static $messages = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Checkout_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add new message into queue.\r\n-\t\t *\r\n-\t\t * @param        $message\r\n-\t\t * @param string  $code\r\n-\t\t *\u002F\r\n-\t\tpublic static function add_message( $message, $code = '' ) {\r\n-\t\t\tself::$messages[ $code ] = $message;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get added message by code from queue.\r\n-\t\t *\r\n-\t\t * @param string $code\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_message( $code = '' ) {\r\n-\t\t\treturn isset( self::$messages[ $code ] ) ? self::$messages[ $code ] : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all messages added into queue.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_messages() {\r\n-\t\t\treturn self::$messages;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output form.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\t$message = '';\r\n-\t\t\t$atts    = $this->get_atts();\r\n-\t\t\t$user    = learn_press_get_current_user( false );\r\n-\r\n-\t\t\tif ( ! $user || $user instanceof LP_User_Guest ) {\r\n-\t\t\t\t$message = sprintf( esc_html__( 'Please %s to send your request!', 'learnpress' ), sprintf( '\u003Cstrong>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fstrong>', learn_press_get_login_url(), _x( 'login', 'become-teacher-form', 'learnpress' ) ) );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( learn_press_become_teacher_sent() ) {\r\n-\t\t\t\t\t$message = esc_html__( 'You have already sent the request. Please wait for the approval.', 'learnpress' );\r\n-\t\t\t\t} elseif ( learn_press_user_maybe_is_a_teacher() ) {\r\n-\t\t\t\t\t$message = esc_html__( 'You are a teacher!', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( apply_filters( 'learn_press_become_a_teacher_display_form', true, $message ) ) {\r\n-\t\t\t\t$atts = shortcode_atts(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'title'                      => esc_html__( 'Become a Teacher', 'learnpress' ),\r\n-\t\t\t\t\t\t'description'                => esc_html__( 'Fill in your information and send it to us to become a teacher.', 'learnpress' ),\r\n-\t\t\t\t\t\t'submit_button_text'         => esc_html__( 'Submit', 'learnpress' ),\r\n-\t\t\t\t\t\t'submit_button_process_text' => esc_html__( 'Processing', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$atts\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\t\twp_enqueue_script( 'lp-become-a-teacher' );\r\n-\r\n-\t\t\t\tif ( empty( $message ) || ( class_exists( '\\Elementor\\Plugin' ) && \\Elementor\\Plugin::$instance->editor->is_edit_mode() ) ) {\r\n-\t\t\t\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form.php', $atts );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlearn_press_display_message( $message );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Become A Teacher Shortcode.\n+ *\n+ * @author  ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  4.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Become_A_Teacher' ) ) {\n+\tclass LP_Shortcode_Become_A_Teacher extends LP_Abstract_Shortcode {\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected static $messages = array();\n+\n+\t\t\u002F**\n+\t\t * LP_Checkout_Shortcode constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add new message into queue.\n+\t\t *\n+\t\t * @param        $message\n+\t\t * @param string  $code\n+\t\t *\u002F\n+\t\tpublic static function add_message( $message, $code = '' ) {\n+\t\t\tself::$messages[ $code ] = $message;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get added message by code from queue.\n+\t\t *\n+\t\t * @param string $code\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic static function get_message( $code = '' ) {\n+\t\t\treturn isset( self::$messages[ $code ] ) ? self::$messages[ $code ] : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all messages added into queue.\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic static function get_messages() {\n+\t\t\treturn self::$messages;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output form.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\tob_start();\n+\n+\t\t\t$message = '';\n+\t\t\t$atts    = $this->get_atts();\n+\t\t\t$user    = learn_press_get_current_user( false );\n+\n+\t\t\tif ( ! $user || $user instanceof LP_User_Guest ) {\n+\t\t\t\t$message = sprintf( esc_html__( 'Please %s to send your request!', 'learnpress' ), sprintf( '\u003Cstrong>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fstrong>', learn_press_get_login_url(), _x( 'login', 'become-teacher-form', 'learnpress' ) ) );\n+\t\t\t} else {\n+\t\t\t\tif ( learn_press_become_teacher_sent() ) {\n+\t\t\t\t\t$message = esc_html__( 'You have already sent the request. Please wait for the approval.', 'learnpress' );\n+\t\t\t\t} elseif ( learn_press_user_maybe_is_a_teacher() ) {\n+\t\t\t\t\t$message = esc_html__( 'You are a teacher!', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( apply_filters( 'learn_press_become_a_teacher_display_form', true, $message ) ) {\n+\t\t\t\t$atts = shortcode_atts(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'title'                      => esc_html__( 'Become a Teacher', 'learnpress' ),\n+\t\t\t\t\t\t'description'                => esc_html__( 'Fill in your information and send it to us to become a teacher.', 'learnpress' ),\n+\t\t\t\t\t\t'submit_button_text'         => esc_html__( 'Submit', 'learnpress' ),\n+\t\t\t\t\t\t'submit_button_process_text' => esc_html__( 'Processing', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t$atts\n+\t\t\t\t);\n+\n+\t\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\t\twp_enqueue_script( 'lp-become-a-teacher' );\n+\n+\t\t\t\tif ( empty( $message ) || ( class_exists( '\\Elementor\\Plugin' ) && \\Elementor\\Plugin::$instance->editor->is_edit_mode() ) ) {\n+\t\t\t\t\tlearn_press_get_template( 'global\u002Fbecome-teacher-form.php', $atts );\n+\t\t\t\t} else {\n+\t\t\t\t\tlearn_press_display_message( $message );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-button-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-button-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-button-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-button-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,125 +1,125 @@\n-\u003C?php\r\n-\u002F**\r\n- * Button Course Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.2\r\n- * @extends  LP_Abstract_Shortcode\r\n- * @depreacted 4.3.0\r\n- *\u002F\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Button_Course' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Button_Course\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Button_Course extends LP_Abstract_Shortcode {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Shortcode_Button_Course constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t\t$this->_atts = shortcode_atts(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'id' => 0,\r\n-\t\t\t\t),\r\n-\t\t\t\t$this->_atts\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output button course.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\t$atts = $this->_atts;\r\n-\r\n-\t\t\tif ( 'current' === $atts['id'] ) {\r\n-\t\t\t\t$course_id = learn_press_is_course() ? get_the_ID() : 0;\r\n-\t\t\t} else {\r\n-\t\t\t\t$course_id = $atts['id'];\r\n-\t\t\t}\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t\t\t$courseModel          = CourseModel::find( $course_id, true );\r\n-\t\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\t\treturn '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\t\t\u002F\u002F Load js button course.\r\n-\t\t\t\twp_enqueue_script( 'lp-single-course' );\r\n-\r\n-\t\t\t\tif ( $courseModel->is_free() ) {\r\n-\t\t\t\t\techo $singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel );\r\n-\t\t\t\t} elseif ( ! empty( $courseModel->get_external_link() ) ) {\r\n-\t\t\t\t\techo $singleCourseTemplate->html_btn_external( $courseModel, $userModel );\r\n-\t\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\r\n-\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $courseModel->get_permalink(), __( 'Learn now', 'learnpress' ) );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\techo $singleCourseTemplate->html_btn_purchase_course( $courseModel, $userModel );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Label button purchase.\r\n-\t\t *\r\n-\t\t * @param string $text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.2.7.5\r\n-\t\t *\u002F\r\n-\t\tpublic function button_text_purchase( string $text ): string {\r\n-\t\t\tif ( $this->_atts['purchase_text'] ) {\r\n-\t\t\t\t$text = $this->_atts['purchase_text'];\r\n-\t\t\t} elseif ( $this->_atts['btn_label'] ) {\r\n-\t\t\t\t$text = $this->_atts['btn_label'];\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $text;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Label button enroll.\r\n-\t\t *\r\n-\t\t * @param string $text\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.2.7.5\r\n-\t\t *\u002F\r\n-\t\tpublic function button_text_enroll( string $text ): string {\r\n-\t\t\tif ( $this->_atts['enroll_text'] ) {\r\n-\t\t\t\t$text = $this->_atts['enroll_text'];\r\n-\t\t\t} elseif ( $this->_atts['btn_label'] ) {\r\n-\t\t\t\t$text = $this->_atts['btn_label'];\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $text;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-new LP_Shortcode_Button_Course();\r\n+\u003C?php\n+\u002F**\n+ * Button Course Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.2\n+ * @extends  LP_Abstract_Shortcode\n+ * @depreacted 4.3.0\n+ *\u002F\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Button_Course' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Button_Course\n+\t *\n+\t * @since 3.0.0\n+\t *\u002F\n+\tclass LP_Shortcode_Button_Course extends LP_Abstract_Shortcode {\n+\n+\t\t\u002F**\n+\t\t * LP_Shortcode_Button_Course constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t\t$this->_atts = shortcode_atts(\n+\t\t\t\tarray(\n+\t\t\t\t\t'id' => 0,\n+\t\t\t\t),\n+\t\t\t\t$this->_atts\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output button course.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\tob_start();\n+\n+\t\t\t$atts = $this->_atts;\n+\n+\t\t\tif ( 'current' === $atts['id'] ) {\n+\t\t\t\t$course_id = learn_press_is_course() ? get_the_ID() : 0;\n+\t\t\t} else {\n+\t\t\t\t$course_id = $atts['id'];\n+\t\t\t}\n+\n+\t\t\ttry {\n+\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t\t\t$courseModel          = CourseModel::find( $course_id, true );\n+\t\t\t\tif ( ! $courseModel ) {\n+\t\t\t\t\treturn '';\n+\t\t\t\t}\n+\n+\t\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\n+\t\t\t\t\u002F\u002F Load js button course.\n+\t\t\t\twp_enqueue_script( 'lp-single-course' );\n+\n+\t\t\t\tif ( $courseModel->is_free() ) {\n+\t\t\t\t\techo $singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel );\n+\t\t\t\t} elseif ( ! empty( $courseModel->get_external_link() ) ) {\n+\t\t\t\t\techo $singleCourseTemplate->html_btn_external( $courseModel, $userModel );\n+\t\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\n+\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $courseModel->get_permalink(), __( 'Learn now', 'learnpress' ) );\n+\t\t\t\t} else {\n+\t\t\t\t\techo $singleCourseTemplate->html_btn_purchase_course( $courseModel, $userModel );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Label button purchase.\n+\t\t *\n+\t\t * @param string $text\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.2.7.5\n+\t\t *\u002F\n+\t\tpublic function button_text_purchase( string $text ): string {\n+\t\t\tif ( $this->_atts['purchase_text'] ) {\n+\t\t\t\t$text = $this->_atts['purchase_text'];\n+\t\t\t} elseif ( $this->_atts['btn_label'] ) {\n+\t\t\t\t$text = $this->_atts['btn_label'];\n+\t\t\t}\n+\n+\t\t\treturn $text;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Label button enroll.\n+\t\t *\n+\t\t * @param string $text\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.2.7.5\n+\t\t *\u002F\n+\t\tpublic function button_text_enroll( string $text ): string {\n+\t\t\tif ( $this->_atts['enroll_text'] ) {\n+\t\t\t\t$text = $this->_atts['enroll_text'];\n+\t\t\t} elseif ( $this->_atts['btn_label'] ) {\n+\t\t\t\t$text = $this->_atts['btn_label'];\n+\t\t\t}\n+\n+\t\t\treturn $text;\n+\t\t}\n+\t}\n+}\n+\n+new LP_Shortcode_Button_Course();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-checkout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-checkout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-checkout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-checkout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,94 +1,94 @@\n-\u003C?php\r\n-\u002F**\r\n- * Checkout Page Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Checkout' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Checkout\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Checkout extends LP_Abstract_Shortcode {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Checkout_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param  mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output form.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var WP $wp\r\n-\t\t\t *\u002F\r\n-\t\t\tglobal $wp;\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tif ( isset( $wp->query_vars['lp-order-received'] ) ) {\r\n-\t\t\t\t$this->order_received( $wp->query_vars['lp-order-received'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$checkout_cart = LearnPress::instance()->get_cart();\r\n-\r\n-\t\t\t\techo '\u003Cdiv id=\"learn-press-checkout\" class=\"lp-content-area\">';\r\n-\r\n-\t\t\t\t\u002F\u002F Check cart has contents\r\n-\t\t\t\tif ( $checkout_cart->is_empty() ) {\r\n-\t\t\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Fempty-cart.php' );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\twp_enqueue_script( 'lp-checkout' );\r\n-\t\t\t\t\t$checkout_cart->calculate_totals();\r\n-\t\t\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Fform.php' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Output received order information.\r\n-\t\t *\r\n-\t\t * @param  int $order_id\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tprivate function order_received( int $order_id = 0 ) {\r\n-\t\t\t$order_id       = absint( $order_id );\r\n-\t\t\t$order_key      = LP_Request::get_param( 'key' );\r\n-\t\t\t$order_received = learn_press_get_order( $order_id );\r\n-\t\t\tif ( ! $order_received ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $order_received->is_trashed() || $order_received->get_order_key() !== $order_key ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002FLearnPress::instance()->session->remove( 'order_awaiting_payment' );\r\n-\t\t\t\u002F\u002FLearnPress::instance()->cart->empty_cart();\r\n-\t\t\t\u002F\u002Flearn_press_print_messages();\r\n-\r\n-\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Forder-received.php', compact( 'order_received' ) );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Checkout Page Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Checkout' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Checkout\n+\t *\u002F\n+\tclass LP_Shortcode_Checkout extends LP_Abstract_Shortcode {\n+\n+\t\t\u002F**\n+\t\t * LP_Checkout_Shortcode constructor.\n+\t\t *\n+\t\t * @param  mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output form.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\t\u002F**\n+\t\t\t * @var WP $wp\n+\t\t\t *\u002F\n+\t\t\tglobal $wp;\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\n+\t\t\tob_start();\n+\t\t\tif ( isset( $wp->query_vars['lp-order-received'] ) ) {\n+\t\t\t\t$this->order_received( $wp->query_vars['lp-order-received'] );\n+\t\t\t} else {\n+\t\t\t\t$checkout_cart = LearnPress::instance()->get_cart();\n+\n+\t\t\t\techo '\u003Cdiv id=\"learn-press-checkout\" class=\"lp-content-area\">';\n+\n+\t\t\t\t\u002F\u002F Check cart has contents\n+\t\t\t\tif ( $checkout_cart->is_empty() ) {\n+\t\t\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Fempty-cart.php' );\n+\t\t\t\t} else {\n+\t\t\t\t\twp_enqueue_script( 'lp-checkout' );\n+\t\t\t\t\t$checkout_cart->calculate_totals();\n+\t\t\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Fform.php' );\n+\t\t\t\t}\n+\n+\t\t\t\techo '\u003C\u002Fdiv>';\n+\t\t\t}\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Output received order information.\n+\t\t *\n+\t\t * @param  int $order_id\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tprivate function order_received( int $order_id = 0 ) {\n+\t\t\t$order_id       = absint( $order_id );\n+\t\t\t$order_key      = LP_Request::get_param( 'key' );\n+\t\t\t$order_received = learn_press_get_order( $order_id );\n+\t\t\tif ( ! $order_received ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tif ( $order_received->is_trashed() || $order_received->get_order_key() !== $order_key ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002FLearnPress::instance()->session->remove( 'order_awaiting_payment' );\n+\t\t\t\u002F\u002FLearnPress::instance()->cart->empty_cart();\n+\t\t\t\u002F\u002Flearn_press_print_messages();\n+\n+\t\t\tTemplate::instance()->get_frontend_template( 'checkout\u002Forder-received.php', compact( 'order_received' ) );\n+\t\t}\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-course-curriculum.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-course-curriculum.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-course-curriculum.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-course-curriculum.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\u002F**\r\n- * Register Form Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Course_Curriculum' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Course_Curriculum\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Course_Curriculum extends LP_Abstract_Shortcode {\r\n-\t\t\u002F**\r\n-\t\t * LP_Shortcode_Course_Curriculum constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shortcode content.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\tob_start();\r\n-\t\t\tglobal $post;\r\n-\t\t\t$post = get_post( $this->_atts['id'] );\r\n-\r\n-\t\t\trequire_once realpath( LP_PLUGIN_PATH . '\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php' );\r\n-\r\n-\t\t\tif ( ! $post || ( LP_COURSE_CPT !== get_post_type( $post->ID ) ) ) {\r\n-\t\t\t\tlearn_press_display_message( __( 'Invalid course.', 'learnpress' ), 'error' );\r\n-\t\t\t} else {\r\n-\t\t\t\tsetup_postdata( $post );\r\n-\t\t\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Fcurriculum.php' );\r\n-\t\t\t\twp_reset_postdata();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$output = ob_get_clean();\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Register Form Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Course_Curriculum' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Course_Curriculum\n+\t *\u002F\n+\tclass LP_Shortcode_Course_Curriculum extends LP_Abstract_Shortcode {\n+\t\t\u002F**\n+\t\t * LP_Shortcode_Course_Curriculum constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Shortcode content.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\tob_start();\n+\t\t\tglobal $post;\n+\t\t\t$post = get_post( $this->_atts['id'] );\n+\n+\t\t\trequire_once realpath( LP_PLUGIN_PATH . '\u002Finc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php' );\n+\n+\t\t\tif ( ! $post || ( LP_COURSE_CPT !== get_post_type( $post->ID ) ) ) {\n+\t\t\t\tlearn_press_display_message( __( 'Invalid course.', 'learnpress' ), 'error' );\n+\t\t\t} else {\n+\t\t\t\tsetup_postdata( $post );\n+\t\t\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Fcurriculum.php' );\n+\t\t\t\twp_reset_postdata();\n+\t\t\t}\n+\n+\t\t\t$output = ob_get_clean();\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-featured-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-featured-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-featured-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-featured-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Featured Courses Shortcode.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode_Courses\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Featured_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Featured_Courses\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Featured_Courses extends LP_Abstract_Shortcode_Courses {\r\n-\t\t\u002F**\r\n-\t\t * LP_Featured_Courses_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query courses.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function query_courses() {\r\n-\t\t\t$this->_query = $this->curd->get_featured_courses(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'limit'    => $this->_atts['limit'],\r\n-\t\t\t\t\t'order_by' => $this->_atts['order_by'],\r\n-\t\t\t\t\t'order'    => $this->_atts['order'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Featured Courses Shortcode.\n+ *\n+ * @author  ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode_Courses\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Featured_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Featured_Courses\n+\t *\u002F\n+\tclass LP_Shortcode_Featured_Courses extends LP_Abstract_Shortcode_Courses {\n+\t\t\u002F**\n+\t\t * LP_Featured_Courses_Shortcode constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query courses.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function query_courses() {\n+\t\t\t$this->_query = $this->curd->get_featured_courses(\n+\t\t\t\tarray(\n+\t\t\t\t\t'limit'    => $this->_atts['limit'],\n+\t\t\t\t\t'order_by' => $this->_atts['order_by'],\n+\t\t\t\t\t'order'    => $this->_atts['order'],\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-login-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-login-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-login-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-login-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,48 +1,48 @@\n-\u003C?php\r\n-\u002F**\r\n- * Login Form Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Login_Form' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Login_Form\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Login_Form extends LP_Abstract_Shortcode {\r\n-\t\t\u002F**\r\n-\t\t * LP_Shortcode_Login_Form constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shortcode content.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t$user   = learn_press_get_current_user();\r\n-\t\t\t\t$output = sprintf( __( 'Your are logged in as %1$s. \u003Ca href=\"%2$s\">Log out\u003C\u002Fa>?', 'learnpress' ), $user->get_display_name(), wp_logout_url() );\r\n-\t\t\t} else {\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tlearn_press_show_message();\r\n-\t\t\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\r\n-\t\t\t\t$output = ob_get_clean();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Login Form Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Login_Form' ) ) {\n+\t\u002F**\n+\t * Class LP_Shortcode_Login_Form\n+\t *\u002F\n+\tclass LP_Shortcode_Login_Form extends LP_Abstract_Shortcode {\n+\t\t\u002F**\n+\t\t * LP_Shortcode_Login_Form constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Shortcode content.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t$user   = learn_press_get_current_user();\n+\t\t\t\t$output = sprintf( __( 'Your are logged in as %1$s. \u003Ca href=\"%2$s\">Log out\u003C\u002Fa>?', 'learnpress' ), $user->get_display_name(), wp_logout_url() );\n+\t\t\t} else {\n+\t\t\t\tob_start();\n+\t\t\t\tlearn_press_show_message();\n+\t\t\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\n+\t\t\t\t$output = ob_get_clean();\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-popular-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-popular-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-popular-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-popular-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,52 +1,52 @@\n-\u003C?php\r\n-\u002F**\r\n- * Popular Courses Shortcode.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode_Courses\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Popular_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Popular_Courses\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Popular_Courses extends LP_Abstract_Shortcode_Courses {\r\n-\t\t\u002F**\r\n-\t\t * LP_Popular_Courses_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query courses.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function query_courses() {\r\n-\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$filter        = new LP_Course_Filter();\r\n-\t\t\t\t$filter->limit = $this->_atts['limit'] ?? $filter->limit;\r\n-\t\t\t\t$lp_course_db->get_courses_order_by_popular( $filter );\r\n-\t\t\t\t$courses      = $lp_course_db->get_courses( $filter );\r\n-\t\t\t\t$this->_query = $lp_course_db->get_values_by_key( $courses, 'ID' );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Popular Courses Shortcode.\n+ *\n+ * @author  ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode_Courses\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Popular_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Popular_Courses\n+\t *\u002F\n+\tclass LP_Shortcode_Popular_Courses extends LP_Abstract_Shortcode_Courses {\n+\t\t\u002F**\n+\t\t * LP_Popular_Courses_Shortcode constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query courses.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function query_courses() {\n+\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t$filter        = new LP_Course_Filter();\n+\t\t\t\t$filter->limit = $this->_atts['limit'] ?? $filter->limit;\n+\t\t\t\t$lp_course_db->get_courses_order_by_popular( $filter );\n+\t\t\t\t$courses      = $lp_course_db->get_courses( $filter );\n+\t\t\t\t$this->_query = $lp_course_db->get_values_by_key( $courses, 'ID' );\n+\t\t\t} catch ( Throwable $e ) {\n+\n+\t\t\t}\n+\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,102 +1,102 @@\n-\u003C?php\r\n-\u002F**\r\n- * Profile Page Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  4.0.1\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Profile' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Profile\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Profile extends LP_Abstract_Shortcode {\r\n-\t\t\u002F**\r\n-\t\t * LP_Shortcode_Profile constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return bool|LP_User|LP_User_Guest|WP_Error\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function can_view_profile() {\r\n-\t\t\tglobal $wp;\r\n-\r\n-\t\t\t$current_user = learn_press_get_current_user();\r\n-\t\t\t$viewing_user = true;\r\n-\r\n-\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t\tif ( empty( $wp->query_vars['user'] ) ) {\r\n-\t\t\t\t\t$viewing_user = $current_user;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$request_user = urldecode( (string) $wp->query_vars['user'] );\r\n-\t\t\t\t\t$user_model   = new UserModel();\r\n-\t\t\t\t\t$wp_user      = $user_model->resolve_user_by_public_identifier( $request_user );\r\n-\r\n-\t\t\t\t\tif ( $wp_user ) {\r\n-\t\t\t\t\t\t$viewing_user = learn_press_get_user( $wp_user->ID );\r\n-\r\n-\t\t\t\t\t\tif ( $viewing_user->is_guest() ) {\r\n-\t\t\t\t\t\t\t$viewing_user = false;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$viewing_user = apply_filters( 'learn-press\u002Fprofile\u002Fcan-view-user', $viewing_user );\r\n-\r\n-\t\t\tif ( ! $viewing_user ) {\r\n-\t\t\t\treturn new WP_Error( 'cannot-view-profile', esc_html__( 'You can\\'t view the user profile', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $viewing_user;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shortcode content.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\twp_enqueue_script( 'lp-profile' );\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$profile = LP_Profile::instance();\r\n-\t\t\t\tif ( ! LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t__( 'This shortcode LP Profile only use on the page \u003Ca href=\"%1$s\">%2$s\u003C\u002Fa>', 'learnpress' ),\r\n-\t\t\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-settings' ),\r\n-\t\t\t\t\t\t\t'\u003Cstrong>' . esc_html__( 'Profile', 'learnpress' ) . '\u003C\u002Fstrong>'\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlearn_press_show_message();\r\n-\t\t\t\tTemplate::instance()->get_frontend_template(\r\n-\t\t\t\t\t'pages\u002Fprofile.php',\r\n-\t\t\t\t\tcompact( 'profile' )\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tTemplate::print_message( $e->getMessage(), 'error' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Profile Page Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  4.0.1\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Profile' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Profile\n+\t *\u002F\n+\tclass LP_Shortcode_Profile extends LP_Abstract_Shortcode {\n+\t\t\u002F**\n+\t\t * LP_Shortcode_Profile constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return bool|LP_User|LP_User_Guest|WP_Error\n+\t\t *\u002F\n+\t\t\u002F*public function can_view_profile() {\n+\t\t\tglobal $wp;\n+\n+\t\t\t$current_user = learn_press_get_current_user();\n+\t\t\t$viewing_user = true;\n+\n+\t\t\tif ( ! current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t\tif ( empty( $wp->query_vars['user'] ) ) {\n+\t\t\t\t\t$viewing_user = $current_user;\n+\t\t\t\t} else {\n+\t\t\t\t\t$request_user = urldecode( (string) $wp->query_vars['user'] );\n+\t\t\t\t\t$user_model   = new UserModel();\n+\t\t\t\t\t$wp_user      = $user_model->resolve_user_by_public_identifier( $request_user );\n+\n+\t\t\t\t\tif ( $wp_user ) {\n+\t\t\t\t\t\t$viewing_user = learn_press_get_user( $wp_user->ID );\n+\n+\t\t\t\t\t\tif ( $viewing_user->is_guest() ) {\n+\t\t\t\t\t\t\t$viewing_user = false;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$viewing_user = apply_filters( 'learn-press\u002Fprofile\u002Fcan-view-user', $viewing_user );\n+\n+\t\t\tif ( ! $viewing_user ) {\n+\t\t\t\treturn new WP_Error( 'cannot-view-profile', esc_html__( 'You can\\'t view the user profile', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\treturn $viewing_user;\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Shortcode content.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\twp_enqueue_script( 'lp-profile' );\n+\t\t\tob_start();\n+\n+\t\t\ttry {\n+\t\t\t\t$profile = LP_Profile::instance();\n+\t\t\t\tif ( ! LP_Page_Controller::is_page_profile() ) {\n+\t\t\t\t\tthrow new Exception(\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t__( 'This shortcode LP Profile only use on the page \u003Ca href=\"%1$s\">%2$s\u003C\u002Fa>', 'learnpress' ),\n+\t\t\t\t\t\t\tadmin_url( 'admin.php?page=learn-press-settings' ),\n+\t\t\t\t\t\t\t'\u003Cstrong>' . esc_html__( 'Profile', 'learnpress' ) . '\u003C\u002Fstrong>'\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\n+\t\t\t\tlearn_press_show_message();\n+\t\t\t\tTemplate::instance()->get_frontend_template(\n+\t\t\t\t\t'pages\u002Fprofile.php',\n+\t\t\t\t\tcompact( 'profile' )\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tTemplate::print_message( $e->getMessage(), 'error' );\n+\t\t\t}\n+\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-recent-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-recent-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-recent-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-recent-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Recent Courses Shortcode.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode_Courses\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Recent_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Recent_Courses\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Recent_Courses extends LP_Abstract_Shortcode_Courses {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Recent_Courses_Shortcode constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query courses.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function query_courses() {\r\n-\t\t\t$this->_query = $this->curd->get_recent_courses(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'limit' => $this->_atts['limit'],\r\n-\t\t\t\t\t'order' => $this->_atts['order'],\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Recent Courses Shortcode.\n+ *\n+ * @author  ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode_Courses\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Recent_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Recent_Courses\n+\t *\u002F\n+\tclass LP_Shortcode_Recent_Courses extends LP_Abstract_Shortcode_Courses {\n+\n+\t\t\u002F**\n+\t\t * LP_Recent_Courses_Shortcode constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query courses.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function query_courses() {\n+\t\t\t$this->_query = $this->curd->get_recent_courses(\n+\t\t\t\tarray(\n+\t\t\t\t\t'limit' => $this->_atts['limit'],\n+\t\t\t\t\t'order' => $this->_atts['order'],\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-register-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-register-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-register-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002Fclass-lp-shortcode-register-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Register Form Shortcode.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Shortcodes\r\n- * @package  Learnpress\u002FShortcodes\r\n- * @version  3.0.0\r\n- * @extends  LP_Abstract_Shortcode\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Shortcode_Register_Form' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Shortcode_Register_Form\r\n-\t *\u002F\r\n-\tclass LP_Shortcode_Register_Form extends LP_Abstract_Shortcode {\r\n-\t\t\u002F**\r\n-\t\t * LP_Shortcode_Register_Form constructor.\r\n-\t\t *\r\n-\t\t * @param mixed $atts\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $atts = '' ) {\r\n-\t\t\tparent::__construct( $atts );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Shortcode content.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function output() {\r\n-\t\t\twp_enqueue_style( 'learnpress' );\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\t$user   = learn_press_get_current_user();\r\n-\t\t\t\t$output = sprintf( __( 'Your are logged in as %1$s. \u003Ca href=\"%2$s\">Log out\u003C\u002Fa>?', 'learnpress' ), $user->get_display_name(), wp_logout_url() );\r\n-\t\t\t} else {\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tlearn_press_show_message();\r\n-\t\t\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\r\n-\t\t\t\t$output = ob_get_clean();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $output;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Register Form Shortcode.\n+ *\n+ * @author   ThimPress\n+ * @category Shortcodes\n+ * @package  Learnpress\u002FShortcodes\n+ * @version  3.0.0\n+ * @extends  LP_Abstract_Shortcode\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Shortcode_Register_Form' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Shortcode_Register_Form\n+\t *\u002F\n+\tclass LP_Shortcode_Register_Form extends LP_Abstract_Shortcode {\n+\t\t\u002F**\n+\t\t * LP_Shortcode_Register_Form constructor.\n+\t\t *\n+\t\t * @param mixed $atts\n+\t\t *\u002F\n+\t\tpublic function __construct( $atts = '' ) {\n+\t\t\tparent::__construct( $atts );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Shortcode content.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function output() {\n+\t\t\twp_enqueue_style( 'learnpress' );\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\t$user   = learn_press_get_current_user();\n+\t\t\t\t$output = sprintf( __( 'Your are logged in as %1$s. \u003Ca href=\"%2$s\">Log out\u003C\u002Fa>?', 'learnpress' ), $user->get_display_name(), wp_logout_url() );\n+\t\t\t} else {\n+\t\t\t\tob_start();\n+\t\t\t\tlearn_press_show_message();\n+\t\t\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\n+\t\t\t\t$output = ob_get_clean();\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourse\u002FFilterCourseShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourse\u002FFilterCourseShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourse\u002FFilterCourseShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourse\u002FFilterCourseShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Shortcode display single instructor.\r\n- *\u002F\r\n-namespace LearnPress\\Shortcodes\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Shortcodes\\AbstractShortcode;\r\n-\r\n-class FilterCourseShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\tprotected $shortcode_name = 'filter_course';\r\n-\r\n-\t\u002F**\r\n-\t * Show Course Filter\r\n-\t *\r\n-\t * @param $attrs array\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $attrs ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $attrs ) ) {\r\n-\t\t\t\t$attrs = [];\r\n-\t\t\t}\r\n-\t\t\tob_start();\r\n-\t\t\t$data = array_merge(\r\n-\t\t\t\t[ 'params_url' => lp_archive_skeleton_get_args() ],\r\n-\t\t\t\t$attrs\r\n-\t\t\t);\r\n-\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $data );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Shortcode display single instructor.\n+ *\u002F\n+namespace LearnPress\\Shortcodes\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Shortcodes\\AbstractShortcode;\n+\n+class FilterCourseShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\tprotected $shortcode_name = 'filter_course';\n+\n+\t\u002F**\n+\t * Show Course Filter\n+\t *\n+\t * @param $attrs array\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $attrs ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $attrs ) ) {\n+\t\t\t\t$attrs = [];\n+\t\t\t}\n+\t\t\tob_start();\n+\t\t\t$data = array_merge(\n+\t\t\t\t[ 'params_url' => lp_archive_skeleton_get_args() ],\n+\t\t\t\t$attrs\n+\t\t\t);\n+\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $data );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourseButtonShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourseButtonShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourseButtonShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourseButtonShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-namespace LearnPress\\Shortcodes;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use Throwable;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\r\n-\u002F**\r\n- * Class CourseButtonShortcode\r\n- *\r\n- * Refactor from LP_Shortcode_Button_Course\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class CourseButtonShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\r\n-\tprotected $shortcode_name = 'button_course';\r\n-\r\n-\t\u002F**\r\n-\t * Output button course.\r\n-\t *\r\n-\t * @param $atts\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $atts ): string {\r\n-\t\t$html = '';\r\n-\t\twp_enqueue_style( 'learnpress' );\r\n-\r\n-\t\t$course_id = $atts['id'] ?? 0;\r\n-\t\tif ( 'current' === $course_id ) {\r\n-\t\t\t$course_id = get_the_ID();\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$singleCourseModernLayout = SingleCourseModernLayout::instance();\r\n-\t\t\t$courseModel              = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\t\u002F\u002F Load js button course.\r\n-\t\t\twp_enqueue_script( 'lp-single-course' );\r\n-\r\n-\t\t\t$html = $singleCourseModernLayout->html_buttons( $courseModel, $userModel );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\Shortcodes;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use Throwable;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\n+\u002F**\n+ * Class CourseButtonShortcode\n+ *\n+ * Refactor from LP_Shortcode_Button_Course\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class CourseButtonShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\n+\tprotected $shortcode_name = 'button_course';\n+\n+\t\u002F**\n+\t * Output button course.\n+\t *\n+\t * @param $atts\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $atts ): string {\n+\t\t$html = '';\n+\t\twp_enqueue_style( 'learnpress' );\n+\n+\t\t$course_id = $atts['id'] ?? 0;\n+\t\tif ( 'current' === $course_id ) {\n+\t\t\t$course_id = get_the_ID();\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$singleCourseModernLayout = SingleCourseModernLayout::instance();\n+\t\t\t$courseModel              = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\n+\t\t\t\u002F\u002F Load js button course.\n+\t\t\twp_enqueue_script( 'lp-single-course' );\n+\n+\t\t\t$html = $singleCourseModernLayout->html_buttons( $courseModel, $userModel );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourseMaterialShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourseMaterialShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourseMaterialShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourseMaterialShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Shortcode display single instructor.\r\n- *\u002F\r\n-namespace LearnPress\\Shortcodes;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-class CourseMaterialShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\tprotected $shortcode_name = 'course_materials';\r\n-\r\n-\t\u002F**\r\n-\t * Show single instructor\r\n-\t *\r\n-\t * @param $attrs [instructor_id: int]\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $attrs ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $attrs ) ) {\r\n-\t\t\t\t$attrs = [];\r\n-\t\t\t}\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', $attrs );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Shortcode display single instructor.\n+ *\u002F\n+namespace LearnPress\\Shortcodes;\n+\n+use LearnPress\\Helpers\\Singleton;\n+\n+class CourseMaterialShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\tprotected $shortcode_name = 'course_materials';\n+\n+\t\u002F**\n+\t * Show single instructor\n+\t *\n+\t * @param $attrs [instructor_id: int]\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $attrs ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $attrs ) ) {\n+\t\t\t\t$attrs = [];\n+\t\t\t}\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', $attrs );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourses\u002FListCoursesShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourses\u002FListCoursesShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FCourses\u002FListCoursesShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FCourses\u002FListCoursesShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,93 +1,93 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Shortcodes\\Courses;\r\n-\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Filters\\Course\\CourseJsonFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Shortcodes\\AbstractShortcode;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LP_Debug;\r\n-use LP_Helper;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Shortcode display list courses.\r\n- *\r\n- * @since 4.3.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class ListCoursesShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\r\n-\tprotected $shortcode_name = 'courses';\r\n-\r\n-\t\u002F**\r\n-\t * Show single instructor\r\n-\t *\r\n-\t * @param $attrs [ 'limit', 'c_status', 'order_by', 'order', '' ]\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $attrs ): string {\r\n-\t\t$content = '';\r\n-\t\twp_enqueue_style( 'learnpress' );\r\n-\t\twp_enqueue_script( 'lp-courses-v2' );\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $attrs ) ) {\r\n-\t\t\t\t$attrs = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$attrs['c_status'] = LP_Helper::sanitize_params_submitted( $attrs['c_status'] ?? 'publish' );\r\n-\t\t\t$filter            = new CourseJsonFilter();\r\n-\t\t\tCourses::handle_params_for_query_list_courses( $filter, $attrs );\r\n-\t\t\t$filter->only_fields = [ CourseJsonFilter::COL_ID ];\r\n-\r\n-\t\t\t$total_rows                = 0;\r\n-\t\t\t$courses                   = Courses::get_list_courses( $filter, $total_rows );\r\n-\t\t\t$total_pages               = DataBase::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t\t$attrs['total_pages']      = $total_pages;\r\n-\t\t\t$attrs['total_rows']       = $total_rows;\r\n-\t\t\t$attrs['courses_per_page'] = $filter->limit;\r\n-\t\t\t$skin                      = LP_Helper::sanitize_params_submitted( $attrs['skin'] ?? 'list' );\r\n-\t\t\t$paged                     = $attrs['paged'] ?? 1;\r\n-\t\t\t$attrs['paged']            = $paged;\r\n-\t\t\t$listCoursesTemplate       = self::instance();\r\n-\r\n-\t\t\t\u002F\u002F HTML section courses.\r\n-\t\t\t$html_courses = '';\r\n-\t\t\tif ( empty( $courses ) ) {\r\n-\t\t\t\t$html_courses = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\r\n-\t\t\t} else {\r\n-\t\t\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t\t\t$course        = CourseModel::find( $courseObj->ID, true );\r\n-\t\t\t\t\t$html_courses .= ListCoursesTemplate::render_course( $course, $attrs );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_courses = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fshortcode\u002Fsection',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t\t\t'\u003Cul class=\"learn-press-courses lp-list-courses-no-css %1$s learn-press-courses-shortcode\" data-layout=\"%1$s\">',\r\n-\t\t\t\t\t\tesc_attr( $skin )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'courses'  => wp_kses_post( $html_courses ),\r\n-\t\t\t\t\t'wrap_end' => '\u003C\u002Ful>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courses,\r\n-\t\t\t\t$attrs\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $section_courses );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\Shortcodes\\Courses;\n+\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Filters\\Course\\CourseJsonFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Shortcodes\\AbstractShortcode;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LP_Debug;\n+use LP_Helper;\n+use Throwable;\n+\n+\u002F**\n+ * Shortcode display list courses.\n+ *\n+ * @since 4.3.2.3\n+ * @version 1.0.1\n+ *\u002F\n+class ListCoursesShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\n+\tprotected $shortcode_name = 'courses';\n+\n+\t\u002F**\n+\t * Show single instructor\n+\t *\n+\t * @param $attrs [ 'limit', 'c_status', 'order_by', 'order', '' ]\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $attrs ): string {\n+\t\t$content = '';\n+\t\twp_enqueue_style( 'learnpress' );\n+\t\twp_enqueue_script( 'lp-courses-v2' );\n+\n+\t\ttry {\n+\t\t\tif ( empty( $attrs ) ) {\n+\t\t\t\t$attrs = [];\n+\t\t\t}\n+\n+\t\t\t$attrs['c_status'] = LP_Helper::sanitize_params_submitted( $attrs['c_status'] ?? 'publish' );\n+\t\t\t$filter            = new CourseJsonFilter();\n+\t\t\tCourses::handle_params_for_query_list_courses( $filter, $attrs );\n+\t\t\t$filter->only_fields = [ CourseJsonFilter::COL_ID ];\n+\n+\t\t\t$total_rows                = 0;\n+\t\t\t$courses                   = Courses::get_list_courses( $filter, $total_rows );\n+\t\t\t$total_pages               = DataBase::get_total_pages( $filter->limit, $total_rows );\n+\t\t\t$attrs['total_pages']      = $total_pages;\n+\t\t\t$attrs['total_rows']       = $total_rows;\n+\t\t\t$attrs['courses_per_page'] = $filter->limit;\n+\t\t\t$skin                      = LP_Helper::sanitize_params_submitted( $attrs['skin'] ?? 'list' );\n+\t\t\t$paged                     = $attrs['paged'] ?? 1;\n+\t\t\t$attrs['paged']            = $paged;\n+\t\t\t$listCoursesTemplate       = self::instance();\n+\n+\t\t\t\u002F\u002F HTML section courses.\n+\t\t\t$html_courses = '';\n+\t\t\tif ( empty( $courses ) ) {\n+\t\t\t\t$html_courses = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\n+\t\t\t} else {\n+\t\t\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t\t\t$course        = CourseModel::find( $courseObj->ID, true );\n+\t\t\t\t\t$html_courses .= ListCoursesTemplate::render_course( $course, $attrs );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$section_courses = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fshortcode\u002Fsection',\n+\t\t\t\t[\n+\t\t\t\t\t'wrap'     => sprintf(\n+\t\t\t\t\t\t'\u003Cul class=\"learn-press-courses lp-list-courses-no-css %1$s learn-press-courses-shortcode\" data-layout=\"%1$s\">',\n+\t\t\t\t\t\tesc_attr( $skin )\n+\t\t\t\t\t),\n+\t\t\t\t\t'courses'  => wp_kses_post( $html_courses ),\n+\t\t\t\t\t'wrap_end' => '\u003C\u002Ful>',\n+\t\t\t\t],\n+\t\t\t\t$courses,\n+\t\t\t\t$attrs\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $section_courses );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FListInstructorsShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FListInstructorsShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FListInstructorsShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FListInstructorsShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Shortcode display list instructors.\r\n- *\u002F\r\n-namespace LearnPress\\Shortcodes;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-class ListInstructorsShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\tprotected $shortcode_name = 'instructors';\r\n-\r\n-\t\u002F**\r\n-\t * Show single instructor\r\n-\t *\r\n-\t * @param $attrs []\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $attrs ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\tob_start();\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $attrs ) ) {\r\n-\t\t\t\t$attrs = [];\r\n-\t\t\t}\r\n-\t\t\tdo_action( 'learn-press\u002Flist-instructors\u002Flayout', $attrs );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Shortcode display list instructors.\n+ *\u002F\n+namespace LearnPress\\Shortcodes;\n+\n+use LearnPress\\Helpers\\Singleton;\n+\n+class ListInstructorsShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\tprotected $shortcode_name = 'instructors';\n+\n+\t\u002F**\n+\t * Show single instructor\n+\t *\n+\t * @param $attrs []\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $attrs ): string {\n+\t\t$content = '';\n+\n+\t\tob_start();\n+\t\ttry {\n+\t\t\tif ( empty( $attrs ) ) {\n+\t\t\t\t$attrs = [];\n+\t\t\t}\n+\t\t\tdo_action( 'learn-press\u002Flist-instructors\u002Flayout', $attrs );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FSingleInstructorShortcode.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FSingleInstructorShortcode.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FShortcodes\u002FSingleInstructorShortcode.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FShortcodes\u002FSingleInstructorShortcode.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Shortcode display single instructor.\r\n- *\u002F\r\n-namespace LearnPress\\Shortcodes;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-class SingleInstructorShortcode extends AbstractShortcode {\r\n-\tuse singleton;\r\n-\tprotected $shortcode_name = 'single_instructor';\r\n-\r\n-\t\u002F**\r\n-\t * Show single instructor\r\n-\t *\r\n-\t * @param $attrs [instructor_id: int]\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render( $attrs ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $attrs ) ) {\r\n-\t\t\t\t$attrs = [];\r\n-\t\t\t}\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fsingle-instructor\u002Flayout', $attrs );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( \\Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Shortcode display single instructor.\n+ *\u002F\n+namespace LearnPress\\Shortcodes;\n+\n+use LearnPress\\Helpers\\Singleton;\n+\n+class SingleInstructorShortcode extends AbstractShortcode {\n+\tuse singleton;\n+\tprotected $shortcode_name = 'single_instructor';\n+\n+\t\u002F**\n+\t * Show single instructor\n+\t *\n+\t * @param $attrs [instructor_id: int]\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render( $attrs ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $attrs ) ) {\n+\t\t\t\t$attrs = [];\n+\t\t\t}\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fsingle-instructor\u002Flayout', $attrs );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( \\Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,506 +1,506 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Database;\r\n-use LP_Post_DB;\r\n-use LP_Post_Type_Filter;\r\n-use stdClass;\r\n-\r\n-\u002F**\r\n- * Template Admin Edit Quiz.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminEditQizTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var QuizPostModel\r\n-\t *\u002F\r\n-\tpublic $quizPostModel;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-quiz\u002Flayout', [ $this, 'edit_quiz_layout' ] );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t\tadd_filter(\r\n-\t\t\t'wp_default_editor',\r\n-\t\t\tfunction ( $r ) {\r\n-\t\t\t\tglobal $post;\r\n-\t\t\t\tif ( ! $post ) {\r\n-\t\t\t\t\treturn $r;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $post->post_type !== LP_QUIZ_CPT ) {\r\n-\t\t\t\t\treturn $r;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn 'html';\r\n-\t\t\t},\r\n-\t\t\t1000\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout for edit course curriculum.\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function edit_quiz_layout( QuizPostModel $quizPostModel ) {\r\n-\t\twp_enqueue_style( 'lp-edit-quiz' );\r\n-\t\twp_enqueue_script( 'lp-edit-quiz' );\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'id_url'  => 'edit-quiz',\r\n-\t\t\t'quiz_id' => $quizPostModel->ID,\r\n-\t\t];\r\n-\t\t\u002F**\r\n-\t\t * @uses self::render_edit_quiz\r\n-\t\t *\u002F\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_edit_quiz',\r\n-\t\t);\r\n-\r\n-\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_edit_quiz';\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_list_items_not_assign';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render edit course curriculum html.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function render_edit_quiz( array $data ): stdClass {\r\n-\t\t$quiz_id       = $data['quiz_id'] ?? 0;\r\n-\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\r\n-\t\tif ( ! $quizPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$quizPostModel->check_capabilities_create_item_course();\r\n-\r\n-\t\tself::instance()->quizPostModel = $quizPostModel;\r\n-\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = self::instance()->html_edit_quiz( $quizPostModel );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render html for edit quiz.\r\n-\t *\r\n-\t * @param QuizPostModel $quizPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function html_edit_quiz( QuizPostModel $quizPostModel ): string {\r\n-\t\t$html_questions = '';\r\n-\r\n-\t\t\u002F\u002F Get sections items\r\n-\t\t$question_ids    = $quizPostModel->get_question_ids();\r\n-\t\t$count_questions = count( $question_ids );\r\n-\r\n-\t\tforeach ( $question_ids as $question_id ) {\r\n-\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\t\t$html_questions    .= $this->html_edit_question( $questionPostModel );\r\n-\t\t}\r\n-\r\n-\t\t$section_questions = [\r\n-\t\t\t'wrap'           => '\u003Cdiv class=\"lp-edit-list-questions\">',\r\n-\t\t\t'list-sections'  => $html_questions,\r\n-\t\t\t'question-clone' => $this->html_edit_question(),\r\n-\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'             => '\u003Cdiv class=\"lp-edit-quiz-wrap\">',\r\n-\t\t\t'heading'          => '\u003Cdiv class=\"heading\">',\r\n-\t\t\t'h4'               => sprintf(\r\n-\t\t\t\t'\u003Ch4>%s\u003C\u002Fh4>',\r\n-\t\t\t\t__( 'Details', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'count-questions'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"total-items\" data-count=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$count_questions,\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\r\n-\t\t\t\t\t$count_questions,\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t__( 'Question', 'learnpress' ),\r\n-\t\t\t\t\t\t__( 'Questions', 'learnpress' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'quiz-toggle'      =>\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-toggle-all lp-collapse\">\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'heading_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t'questions'        => Template::combine_components( $section_questions ),\r\n-\t\t\t'add_new_question' => $this->html_add_new_question(),\r\n-\t\t\t'select_items'     => $this->html_popup_items_to_select_clone( $quizPostModel ),\r\n-\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question.\r\n-\t *\r\n-\t * @param $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_question( $questionPostModel = null ): string {\r\n-\t\t$is_clone       = false;\r\n-\t\t$question_id    = 0;\r\n-\t\t$question_title = '';\r\n-\t\t$html_edit_main = '';\r\n-\r\n-\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\r\n-\t\t\t$question_id    = $questionPostModel->ID;\r\n-\t\t\t$question_title = $questionPostModel->post_title;\r\n-\r\n-\t\t\t$section_edit_details = [\r\n-\t\t\t\t'wrap'         => '\u003Cdiv class=\"question-edit-details lp-section-toggle\">',\r\n-\t\t\t\t'header'       => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header lp-trigger-toggle\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-tinymce-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\t__( 'Option Details', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'collapse'     => '\u003Cdiv class=\"lp-section-collapse\">',\r\n-\t\t\t\t'point'        => AdminEditQuestionTemplate::instance()->html_edit_mark( $questionPostModel ),\r\n-\t\t\t\t'hint'         => AdminEditQuestionTemplate::instance()->html_edit_hint( $questionPostModel ),\r\n-\t\t\t\t'explanation'  => AdminEditQuestionTemplate::instance()->html_edit_explanation( $questionPostModel ),\r\n-\t\t\t\t'collapse_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section_edit_main = [\r\n-\t\t\t\t'wrap'        => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-question-edit-main\" data-question-id=\"%d\">',\r\n-\t\t\t\t\t$question_id\r\n-\t\t\t\t),\r\n-\t\t\t\t'left'        => '\u003Cdiv class=\"lp-question-edit-left\">',\r\n-\t\t\t\t'description' => AdminEditQuestionTemplate::instance()->html_edit_question_description( $questionPostModel ),\r\n-\t\t\t\t'answers'     => AdminEditQuestionTemplate::instance()->html_edit_question_by_type( $questionPostModel ),\r\n-\t\t\t\t'left_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'details'     => Template::combine_components( $section_edit_details ),\r\n-\t\t\t\t'wrap_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_edit_main = Template::combine_components( $section_edit_main );\r\n-\t\t} else {\r\n-\t\t\t$is_clone = true;\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv data-question-id=\"%s\"\r\n-\t\t\t\t\tclass=\"lp-question-item lp-section-toggle lp-collapse %s\"\r\n-\t\t\t\t\tdata-question-type=\"%s\">',\r\n-\t\t\t\t$question_id,\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\r\n-\t\t\t\t$is_clone ? '' : $questionPostModel->get_type()\r\n-\t\t\t),\r\n-\t\t\t'head'       => '\u003Cdiv class=\"lp-question-head\">',\r\n-\t\t\t'drag'       => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Drag to reorder section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'loading'    => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t'title'      => AdminEditQuestionTemplate::instance()->html_input_question_title( $question_title ),\r\n-\t\t\t'btn-update' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-question-title button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Update' )\r\n-\t\t\t),\r\n-\t\t\t'btn-cancel' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-question-title button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Cancel' )\r\n-\t\t\t),\r\n-\t\t\t'type'       => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-question-type-label\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t$questionPostModel instanceof QuestionPostModel ? $questionPostModel->get_type_label() : ''\r\n-\t\t\t),\r\n-\t\t\t'btn-edit'   => sprintf(\r\n-\t\t\t\t'\u003Ca class=\"lp-btn-edit-question-title lp-icon-edit-square\" title=\"%s\" href=\"%s\" target=\"_blank\">\u003C\u002Fa>',\r\n-\t\t\t\t__( 'Edit question detail', 'learnpress' ),\r\n-\t\t\t\t$questionPostModel instanceof QuestionPostModel ? $questionPostModel->get_edit_link() : '#'\r\n-\t\t\t),\r\n-\t\t\t'btn-delete' => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-btn-remove-question lp-icon-trash-o\" title=\"%s\" data-title=\"%s\" data-content=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Remove question', 'learnpress' ),\r\n-\t\t\t\t__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\t__( 'This question will be removed from this quiz. The question will no longer be assigned to this quiz, but will not be permanently deleted.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'toggle'     => '\u003Cdiv class=\"lp-question-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t'head_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'edit_main'  => $html_edit_main,\r\n-\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for add new question.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_add_new_question(): string {\r\n-\t\t$html_question_types = sprintf(\r\n-\t\t\t'\u003Coption value=\"\">%s\u003C\u002Foption>',\r\n-\t\t\tesc_html__( 'Select question type', 'learnpress' )\r\n-\t\t);\r\n-\t\t$question_types      = QuestionPostModel::get_types();\r\n-\t\tforeach ( $question_types as $type => $label ) {\r\n-\t\t\t$html_question_types .= sprintf(\r\n-\t\t\t\t'\u003Coption value=\"%s\">%s\u003C\u002Foption>',\r\n-\t\t\t\tesc_attr( $type ),\r\n-\t\t\t\tesc_html( $label )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$html_question_types = Template::instance()->nest_elements(\r\n-\t\t\t[\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Cselect class=\"lp-question-type-new\"\r\n-\t\t\t\t\t\tname=\"lp-question-type-new\" data-mess-empty-type=\"%s\">',\r\n-\t\t\t\t\tesc_attr__( 'Question type is required', 'learnpress' )\r\n-\t\t\t\t)\r\n-\t\t\t\t=> '\u003C\u002Fselect>',\r\n-\t\t\t],\r\n-\t\t\t$html_question_types\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'             => '\u003Cdiv class=\"add-new-question\">',\r\n-\t\t\t'icon'             => '\u003Cspan class=\"lp-icon-plus\">\u003C\u002Fspan>',\r\n-\t\t\t'input'            => sprintf(\r\n-\t\t\t\t'\u003Cinput class=\"lp-question-title-new-input\"\r\n-\t\t\t\t\tname=\"lp-question-title-new-input\"\r\n-\t\t\t\t\ttype=\"text\"\r\n-\t\t\t\t\ttitle=\"%1$s\"\r\n-\t\t\t\t\tplaceholder=\"%1$s\"\r\n-\t\t\t\t\tdata-mess-empty-title=\"%2$s\"\r\n-\t\t\t\t\tdata-send=\"%3$s\">',\r\n-\t\t\t\tesc_attr__( 'Create a new question', 'learnpress' ),\r\n-\t\t\t\tesc_attr__( 'Question title is required', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'id_url'  => 'create-question-add-to-quiz',\r\n-\t\t\t\t\t\t'quiz_id' => $this->quizPostModel->get_id(),\r\n-\t\t\t\t\t\t'action'  => 'create_question_add_to_quiz',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'types'            => $html_question_types,\r\n-\t\t\t'button'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-add-question lp-btn-edit-primary button\" title=\"%s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_attr__( 'Enter title question and choice type', 'learnpress' ),\r\n-\t\t\t\t__( 'Add Question', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-select-items' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tclass=\"button lp-btn-show-popup-items-to-select\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-select-question-bank\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Question Bank', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for popup items to select clone.\r\n-\t *\r\n-\t * @param QuizPostModel $quizPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_popup_items_to_select_clone( QuizPostModel $quizPostModel ): string {\r\n-\t\t$tabs = [\r\n-\t\t\tLP_QUESTION_CPT => __( 'Questions', 'learnpress' ),\r\n-\t\t];\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @uses self::render_list_items_not_assign\r\n-\t\t *\u002F\r\n-\t\t$html_items = TemplateAJAX::load_content_via_ajax(\r\n-\t\t\t[\r\n-\t\t\t\t'id_url'             => 'list-questions-not-assign',\r\n-\t\t\t\t'enableScrollToView' => false,\r\n-\t\t\t\t'quiz_id'            => $quizPostModel->ID,\r\n-\t\t\t\t'paged'              => 1,\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'render_list_items_not_assign',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-select-question-bank\">',\r\n-\t\t\t'popup'                    => AdminTemplate::html_popup_items_to_select_clone( $tabs, $html_items ),\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render list items not assign to any quiz.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\r\n-\t * @since 4.2.8.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function render_list_items_not_assign( $data ): stdClass {\r\n-\t\t$content                = new stdClass();\r\n-\t\t$quiz_id                = $data['quiz_id'] ?? 0;\r\n-\t\t$item_selecting         = $data['item_selecting'] ?? [];\r\n-\t\t$search_title           = $data['search_title'] ?? '';\r\n-\t\t$paged                  = intval( $data['paged'] ?? 1 );\r\n-\t\t$item_selecting_compare = new stdClass();\r\n-\r\n-\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\r\n-\t\tif ( ! $quizPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lp_posts_db         = LP_Post_DB::getInstance();\r\n-\t\t$filter              = new PostFilter();\r\n-\t\t$filter->only_fields = [\r\n-\t\t\t'DISTINCT(p.ID) AS ID',\r\n-\t\t\t'p.post_title',\r\n-\t\t\t'p.post_type',\r\n-\t\t];\r\n-\t\t$filter->post_type   = LP_QUESTION_CPT;\r\n-\t\t$filter->post_status = [ 'publish' ];\r\n-\t\t$filter->order_by    = 'p.ID';\r\n-\t\t$filter->page        = $paged;\r\n-\r\n-\t\tif ( ! empty( $search_title ) ) {\r\n-\t\t\t$filter->post_title = $search_title;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Old logic: Get all questions not assigned to any quiz.\r\n-\t\t\u002F\u002F New logic: Get all questions not assigned to the quiz.\r\n-\t\t$filter->where[] = $lp_posts_db->wpdb->prepare(\r\n-\t\t\t\"AND p.ID NOT IN ( SELECT question_id FROM {$lp_posts_db->tb_lp_quiz_questions} WHERE quiz_id = %d )\",\r\n-\t\t\t$quizPostModel->ID\r\n-\t\t);\r\n-\r\n-\r\n-\t\t$total_rows  = 0;\r\n-\t\t$posts       = $lp_posts_db->get_posts( $filter, $total_rows );\r\n-\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\r\n-\t\t$html_lis = '';\r\n-\t\tif ( empty( $posts ) ) {\r\n-\t\t\t$html_lis = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( 'No items found', 'learnpress' ) );\r\n-\t\t} else {\r\n-\t\t\tif ( ! empty( $item_selecting ) ) {\r\n-\t\t\t\tforeach ( $item_selecting as $item ) {\r\n-\t\t\t\t\tif ( ! isset( $item['id'] ) || ! isset( $item['type'] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item_selecting_compare->{$item['id']} = new stdClass();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $posts as $post ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var $questionPostModel QuestionPostModel\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$questionPostModel = QuestionPostModel::find( $post->ID, true );\r\n-\t\t\t\tif ( ! $questionPostModel ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$checked = '';\r\n-\t\t\t\tif ( isset( $item_selecting_compare->{$post->ID} ) ) {\r\n-\t\t\t\t\t$checked = ' checked=\"checked\"';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$title_display = sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"title\">%s\u003Cstrong>(#%d - %s)\u003C\u002Fstrong>\u003C\u002Fspan>',\r\n-\t\t\t\t\t$post->post_title,\r\n-\t\t\t\t\t$post->ID,\r\n-\t\t\t\t\t$questionPostModel->get_type_label()\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$html_lis .= sprintf(\r\n-\t\t\t\t\t'\u003Cli class=\"lp-select-item\">%s%s\u003C\u002Fli>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cinput name=\"lp-select-item\"\r\n-\t\t\t\t\t\t\tdata-id=\"%d\" data-type-label=\"%s\"\r\n-\t\t\t\t\t\t\tdata-type=\"%s\"\r\n-\t\t\t\t\t\t\tdata-title=\"%s\" %s data-edit-link=\"%s\"\r\n-\t\t\t\t\t\t\tdata-title-selected=\"%s\"\r\n-\t\t\t\t\t\t\ttype=\"checkbox\" \u002F>',\r\n-\t\t\t\t\t\tesc_attr( $post->ID ?? 0 ),\r\n-\t\t\t\t\t\tesc_attr( $questionPostModel->get_type_label() ?? '' ),\r\n-\t\t\t\t\t\tesc_attr( $questionPostModel->get_type() ?? '' ),\r\n-\t\t\t\t\t\tesc_attr( $title_display ), \u002F\u002F For JS display on list selected.\r\n-\t\t\t\t\t\tesc_attr( $checked ),\r\n-\t\t\t\t\t\t$questionPostModel->get_edit_link(),\r\n-\t\t\t\t\t\tesc_attr( $questionPostModel->get_the_title() ?? '' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$title_display\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'ul'         => '\u003Cul class=\"list-items\">',\r\n-\t\t\t'items'      => $html_lis,\r\n-\t\t\t'ul_end'     => '\u003C\u002Ful>',\r\n-\t\t\t'pagination' => Template::instance()->html_pagination(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t\t'paged'       => $paged,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t];\r\n-\r\n-\t\t$content->content = Template::combine_components( $section );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Database;\n+use LP_Post_DB;\n+use LP_Post_Type_Filter;\n+use stdClass;\n+\n+\u002F**\n+ * Template Admin Edit Quiz.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n+ *\u002F\n+class AdminEditQizTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var QuizPostModel\n+\t *\u002F\n+\tpublic $quizPostModel;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-quiz\u002Flayout', [ $this, 'edit_quiz_layout' ] );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t\tadd_filter(\n+\t\t\t'wp_default_editor',\n+\t\t\tfunction ( $r ) {\n+\t\t\t\tglobal $post;\n+\t\t\t\tif ( ! $post ) {\n+\t\t\t\t\treturn $r;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $post->post_type !== LP_QUIZ_CPT ) {\n+\t\t\t\t\treturn $r;\n+\t\t\t\t}\n+\n+\t\t\t\treturn 'html';\n+\t\t\t},\n+\t\t\t1000\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Layout for edit course curriculum.\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function edit_quiz_layout( QuizPostModel $quizPostModel ) {\n+\t\twp_enqueue_style( 'lp-edit-quiz' );\n+\t\twp_enqueue_script( 'lp-edit-quiz' );\n+\n+\t\t$args = [\n+\t\t\t'id_url'  => 'edit-quiz',\n+\t\t\t'quiz_id' => $quizPostModel->ID,\n+\t\t];\n+\t\t\u002F**\n+\t\t * @uses self::render_edit_quiz\n+\t\t *\u002F\n+\t\t$call_back = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_edit_quiz',\n+\t\t);\n+\n+\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_edit_quiz';\n+\t\t$callbacks[] = get_class( $this ) . ':render_list_items_not_assign';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render edit course curriculum html.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function render_edit_quiz( array $data ): stdClass {\n+\t\t$quiz_id       = $data['quiz_id'] ?? 0;\n+\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\n+\t\tif ( ! $quizPostModel ) {\n+\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check permission\n+\t\t$quizPostModel->check_capabilities_create_item_course();\n+\n+\t\tself::instance()->quizPostModel = $quizPostModel;\n+\n+\t\t$content          = new stdClass();\n+\t\t$content->content = self::instance()->html_edit_quiz( $quizPostModel );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Render html for edit quiz.\n+\t *\n+\t * @param QuizPostModel $quizPostModel\n+\t *\n+\t * @return string\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function html_edit_quiz( QuizPostModel $quizPostModel ): string {\n+\t\t$html_questions = '';\n+\n+\t\t\u002F\u002F Get sections items\n+\t\t$question_ids    = $quizPostModel->get_question_ids();\n+\t\t$count_questions = count( $question_ids );\n+\n+\t\tforeach ( $question_ids as $question_id ) {\n+\t\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\t\t$html_questions    .= $this->html_edit_question( $questionPostModel );\n+\t\t}\n+\n+\t\t$section_questions = [\n+\t\t\t'wrap'           => '\u003Cdiv class=\"lp-edit-list-questions\">',\n+\t\t\t'list-sections'  => $html_questions,\n+\t\t\t'question-clone' => $this->html_edit_question(),\n+\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section = [\n+\t\t\t'wrap'             => '\u003Cdiv class=\"lp-edit-quiz-wrap\">',\n+\t\t\t'heading'          => '\u003Cdiv class=\"heading\">',\n+\t\t\t'h4'               => sprintf(\n+\t\t\t\t'\u003Ch4>%s\u003C\u002Fh4>',\n+\t\t\t\t__( 'Details', 'learnpress' )\n+\t\t\t),\n+\t\t\t'count-questions'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"total-items\" data-count=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$count_questions,\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\n+\t\t\t\t\t$count_questions,\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t__( 'Question', 'learnpress' ),\n+\t\t\t\t\t\t__( 'Questions', 'learnpress' )\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'quiz-toggle'      =>\n+\t\t\t\t'\u003Cdiv class=\"lp-question-toggle-all lp-collapse\">\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'heading_end'      => '\u003C\u002Fdiv>',\n+\t\t\t'questions'        => Template::combine_components( $section_questions ),\n+\t\t\t'add_new_question' => $this->html_add_new_question(),\n+\t\t\t'select_items'     => $this->html_popup_items_to_select_clone( $quizPostModel ),\n+\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question.\n+\t *\n+\t * @param $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_question( $questionPostModel = null ): string {\n+\t\t$is_clone       = false;\n+\t\t$question_id    = 0;\n+\t\t$question_title = '';\n+\t\t$html_edit_main = '';\n+\n+\t\tif ( $questionPostModel instanceof QuestionPostModel ) {\n+\t\t\t$question_id    = $questionPostModel->ID;\n+\t\t\t$question_title = $questionPostModel->post_title;\n+\n+\t\t\t$section_edit_details = [\n+\t\t\t\t'wrap'         => '\u003Cdiv class=\"question-edit-details lp-section-toggle\">',\n+\t\t\t\t'header'       => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header lp-trigger-toggle\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cdiv class=\"lp-tinymce-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\t__( 'Option Details', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'collapse'     => '\u003Cdiv class=\"lp-section-collapse\">',\n+\t\t\t\t'point'        => AdminEditQuestionTemplate::instance()->html_edit_mark( $questionPostModel ),\n+\t\t\t\t'hint'         => AdminEditQuestionTemplate::instance()->html_edit_hint( $questionPostModel ),\n+\t\t\t\t'explanation'  => AdminEditQuestionTemplate::instance()->html_edit_explanation( $questionPostModel ),\n+\t\t\t\t'collapse_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section_edit_main = [\n+\t\t\t\t'wrap'        => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-question-edit-main\" data-question-id=\"%d\">',\n+\t\t\t\t\t$question_id\n+\t\t\t\t),\n+\t\t\t\t'left'        => '\u003Cdiv class=\"lp-question-edit-left\">',\n+\t\t\t\t'description' => AdminEditQuestionTemplate::instance()->html_edit_question_description( $questionPostModel ),\n+\t\t\t\t'answers'     => AdminEditQuestionTemplate::instance()->html_edit_question_by_type( $questionPostModel ),\n+\t\t\t\t'left_end'    => '\u003C\u002Fdiv>',\n+\t\t\t\t'details'     => Template::combine_components( $section_edit_details ),\n+\t\t\t\t'wrap_end'    => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html_edit_main = Template::combine_components( $section_edit_main );\n+\t\t} else {\n+\t\t\t$is_clone = true;\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap'       => sprintf(\n+\t\t\t\t'\u003Cdiv data-question-id=\"%s\"\n+\t\t\t\t\tclass=\"lp-question-item lp-section-toggle lp-collapse %s\"\n+\t\t\t\t\tdata-question-type=\"%s\">',\n+\t\t\t\t$question_id,\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\n+\t\t\t\t$is_clone ? '' : $questionPostModel->get_type()\n+\t\t\t),\n+\t\t\t'head'       => '\u003Cdiv class=\"lp-question-head\">',\n+\t\t\t'drag'       => sprintf(\n+\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Drag to reorder section', 'learnpress' )\n+\t\t\t),\n+\t\t\t'loading'    => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t'title'      => AdminEditQuestionTemplate::instance()->html_input_question_title( $question_title ),\n+\t\t\t'btn-update' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-question-title button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Update' )\n+\t\t\t),\n+\t\t\t'btn-cancel' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-question-title button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Cancel' )\n+\t\t\t),\n+\t\t\t'type'       => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-question-type-label\">%s\u003C\u002Fspan>',\n+\t\t\t\t$questionPostModel instanceof QuestionPostModel ? $questionPostModel->get_type_label() : ''\n+\t\t\t),\n+\t\t\t'btn-edit'   => sprintf(\n+\t\t\t\t'\u003Ca class=\"lp-btn-edit-question-title lp-icon-edit-square\" title=\"%s\" href=\"%s\" target=\"_blank\">\u003C\u002Fa>',\n+\t\t\t\t__( 'Edit question detail', 'learnpress' ),\n+\t\t\t\t$questionPostModel instanceof QuestionPostModel ? $questionPostModel->get_edit_link() : '#'\n+\t\t\t),\n+\t\t\t'btn-delete' => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-btn-remove-question lp-icon-trash-o\" title=\"%s\" data-title=\"%s\" data-content=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Remove question', 'learnpress' ),\n+\t\t\t\t__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\t__( 'This question will be removed from this quiz. The question will no longer be assigned to this quiz, but will not be permanently deleted.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'toggle'     => '\u003Cdiv class=\"lp-question-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t'head_end'   => '\u003C\u002Fdiv>',\n+\t\t\t'edit_main'  => $html_edit_main,\n+\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for add new question.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_add_new_question(): string {\n+\t\t$html_question_types = sprintf(\n+\t\t\t'\u003Coption value=\"\">%s\u003C\u002Foption>',\n+\t\t\tesc_html__( 'Select question type', 'learnpress' )\n+\t\t);\n+\t\t$question_types      = QuestionPostModel::get_types();\n+\t\tforeach ( $question_types as $type => $label ) {\n+\t\t\t$html_question_types .= sprintf(\n+\t\t\t\t'\u003Coption value=\"%s\">%s\u003C\u002Foption>',\n+\t\t\t\tesc_attr( $type ),\n+\t\t\t\tesc_html( $label )\n+\t\t\t);\n+\t\t}\n+\t\t$html_question_types = Template::instance()->nest_elements(\n+\t\t\t[\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Cselect class=\"lp-question-type-new\"\n+\t\t\t\t\t\tname=\"lp-question-type-new\" data-mess-empty-type=\"%s\">',\n+\t\t\t\t\tesc_attr__( 'Question type is required', 'learnpress' )\n+\t\t\t\t)\n+\t\t\t\t=> '\u003C\u002Fselect>',\n+\t\t\t],\n+\t\t\t$html_question_types\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'wrap'             => '\u003Cdiv class=\"add-new-question\">',\n+\t\t\t'icon'             => '\u003Cspan class=\"lp-icon-plus\">\u003C\u002Fspan>',\n+\t\t\t'input'            => sprintf(\n+\t\t\t\t'\u003Cinput class=\"lp-question-title-new-input\"\n+\t\t\t\t\tname=\"lp-question-title-new-input\"\n+\t\t\t\t\ttype=\"text\"\n+\t\t\t\t\ttitle=\"%1$s\"\n+\t\t\t\t\tplaceholder=\"%1$s\"\n+\t\t\t\t\tdata-mess-empty-title=\"%2$s\"\n+\t\t\t\t\tdata-send=\"%3$s\">',\n+\t\t\t\tesc_attr__( 'Create a new question', 'learnpress' ),\n+\t\t\t\tesc_attr__( 'Question title is required', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'id_url'  => 'create-question-add-to-quiz',\n+\t\t\t\t\t\t'quiz_id' => $this->quizPostModel->get_id(),\n+\t\t\t\t\t\t'action'  => 'create_question_add_to_quiz',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'types'            => $html_question_types,\n+\t\t\t'button'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-add-question lp-btn-edit-primary button\" title=\"%s\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_attr__( 'Enter title question and choice type', 'learnpress' ),\n+\t\t\t\t__( 'Add Question', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-select-items' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\"\n+\t\t\t\t\tclass=\"button lp-btn-show-popup-items-to-select\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-select-question-bank\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Question Bank', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for popup items to select clone.\n+\t *\n+\t * @param QuizPostModel $quizPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_popup_items_to_select_clone( QuizPostModel $quizPostModel ): string {\n+\t\t$tabs = [\n+\t\t\tLP_QUESTION_CPT => __( 'Questions', 'learnpress' ),\n+\t\t];\n+\n+\t\t\u002F**\n+\t\t * @uses self::render_list_items_not_assign\n+\t\t *\u002F\n+\t\t$html_items = TemplateAJAX::load_content_via_ajax(\n+\t\t\t[\n+\t\t\t\t'id_url'             => 'list-questions-not-assign',\n+\t\t\t\t'enableScrollToView' => false,\n+\t\t\t\t'quiz_id'            => $quizPostModel->ID,\n+\t\t\t\t'paged'              => 1,\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'render_list_items_not_assign',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-select-question-bank\">',\n+\t\t\t'popup'                    => AdminTemplate::html_popup_items_to_select_clone( $tabs, $html_items ),\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render list items not assign to any quiz.\n+\t *\n+\t * @throws Exception\n+\t *\n+\t * @since 4.2.8.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function render_list_items_not_assign( $data ): stdClass {\n+\t\t$content                = new stdClass();\n+\t\t$quiz_id                = $data['quiz_id'] ?? 0;\n+\t\t$item_selecting         = $data['item_selecting'] ?? [];\n+\t\t$search_title           = $data['search_title'] ?? '';\n+\t\t$paged                  = intval( $data['paged'] ?? 1 );\n+\t\t$item_selecting_compare = new stdClass();\n+\n+\t\t$quizPostModel = QuizPostModel::find( $quiz_id, true );\n+\t\tif ( ! $quizPostModel ) {\n+\t\t\tthrow new Exception( __( 'Quiz not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lp_posts_db         = LP_Post_DB::getInstance();\n+\t\t$filter              = new PostFilter();\n+\t\t$filter->only_fields = [\n+\t\t\t'DISTINCT(p.ID) AS ID',\n+\t\t\t'p.post_title',\n+\t\t\t'p.post_type',\n+\t\t];\n+\t\t$filter->post_type   = LP_QUESTION_CPT;\n+\t\t$filter->post_status = [ 'publish' ];\n+\t\t$filter->order_by    = 'p.ID';\n+\t\t$filter->page        = $paged;\n+\n+\t\tif ( ! empty( $search_title ) ) {\n+\t\t\t$filter->post_title = $search_title;\n+\t\t}\n+\n+\t\t\u002F\u002F Old logic: Get all questions not assigned to any quiz.\n+\t\t\u002F\u002F New logic: Get all questions not assigned to the quiz.\n+\t\t$filter->where[] = $lp_posts_db->wpdb->prepare(\n+\t\t\t\"AND p.ID NOT IN ( SELECT question_id FROM {$lp_posts_db->tb_lp_quiz_questions} WHERE quiz_id = %d )\",\n+\t\t\t$quizPostModel->ID\n+\t\t);\n+\n+\n+\t\t$total_rows  = 0;\n+\t\t$posts       = $lp_posts_db->get_posts( $filter, $total_rows );\n+\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\n+\t\t$html_lis = '';\n+\t\tif ( empty( $posts ) ) {\n+\t\t\t$html_lis = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( 'No items found', 'learnpress' ) );\n+\t\t} else {\n+\t\t\tif ( ! empty( $item_selecting ) ) {\n+\t\t\t\tforeach ( $item_selecting as $item ) {\n+\t\t\t\t\tif ( ! isset( $item['id'] ) || ! isset( $item['type'] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item_selecting_compare->{$item['id']} = new stdClass();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $posts as $post ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var $questionPostModel QuestionPostModel\n+\t\t\t\t *\u002F\n+\t\t\t\t$questionPostModel = QuestionPostModel::find( $post->ID, true );\n+\t\t\t\tif ( ! $questionPostModel ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$checked = '';\n+\t\t\t\tif ( isset( $item_selecting_compare->{$post->ID} ) ) {\n+\t\t\t\t\t$checked = ' checked=\"checked\"';\n+\t\t\t\t}\n+\n+\t\t\t\t$title_display = sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"title\">%s\u003Cstrong>(#%d - %s)\u003C\u002Fstrong>\u003C\u002Fspan>',\n+\t\t\t\t\t$post->post_title,\n+\t\t\t\t\t$post->ID,\n+\t\t\t\t\t$questionPostModel->get_type_label()\n+\t\t\t\t);\n+\n+\t\t\t\t$html_lis .= sprintf(\n+\t\t\t\t\t'\u003Cli class=\"lp-select-item\">%s%s\u003C\u002Fli>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cinput name=\"lp-select-item\"\n+\t\t\t\t\t\t\tdata-id=\"%d\" data-type-label=\"%s\"\n+\t\t\t\t\t\t\tdata-type=\"%s\"\n+\t\t\t\t\t\t\tdata-title=\"%s\" %s data-edit-link=\"%s\"\n+\t\t\t\t\t\t\tdata-title-selected=\"%s\"\n+\t\t\t\t\t\t\ttype=\"checkbox\" \u002F>',\n+\t\t\t\t\t\tesc_attr( $post->ID ?? 0 ),\n+\t\t\t\t\t\tesc_attr( $questionPostModel->get_type_label() ?? '' ),\n+\t\t\t\t\t\tesc_attr( $questionPostModel->get_type() ?? '' ),\n+\t\t\t\t\t\tesc_attr( $title_display ), \u002F\u002F For JS display on list selected.\n+\t\t\t\t\t\tesc_attr( $checked ),\n+\t\t\t\t\t\t$questionPostModel->get_edit_link(),\n+\t\t\t\t\t\tesc_attr( $questionPostModel->get_the_title() ?? '' )\n+\t\t\t\t\t),\n+\t\t\t\t\t$title_display\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'ul'         => '\u003Cul class=\"list-items\">',\n+\t\t\t'items'      => $html_lis,\n+\t\t\t'ul_end'     => '\u003C\u002Ful>',\n+\t\t\t'pagination' => Template::instance()->html_pagination(\n+\t\t\t\t[\n+\t\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t\t'paged'       => $paged,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t];\n+\n+\t\t$content->content = Template::combine_components( $section );\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,957 +1,957 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\Question\\QuestionAnswerModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostFIBModel;\r\n-use LearnPress\\Models\\Question\\QuestionPostModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use stdClass;\r\n-\r\n-\u002F**\r\n- * Template Admin Edit Quiz.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminEditQuestionTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-question\u002Flayout', [ $this, 'edit_layout' ] );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t\tadd_filter(\r\n-\t\t\t'wp_default_editor',\r\n-\t\t\tfunction ( $r ) {\r\n-\t\t\t\tglobal $post;\r\n-\t\t\t\tif ( ! $post ) {\r\n-\t\t\t\t\treturn $r;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $post->post_type !== LP_QUESTION_CPT ) {\r\n-\t\t\t\t\treturn $r;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn 'html';\r\n-\t\t\t},\r\n-\t\t\t1000\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout for edit question.\r\n-\t *\r\n-\t * @use self::render_edit_question\r\n-\t *\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function edit_layout( QuestionPostModel $questionPostModel ) {\r\n-\t\twp_enqueue_style( 'lp-edit-question' );\r\n-\t\twp_enqueue_script( 'lp-edit-question' );\r\n-\r\n-\t\t$args      = [\r\n-\t\t\t'id_url'      => 'edit-question',\r\n-\t\t\t'question_id' => $questionPostModel->ID,\r\n-\t\t];\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_edit_question',\r\n-\t\t);\r\n-\r\n-\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t * @use self::render_edit_quiz\r\n-\t * @use self::render_list_items_not_assign\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = self::class . ':render_edit_question';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render edit question html.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function render_edit_question( array $data ): stdClass {\r\n-\t\t$question_id       = $data['question_id'] ?? 0;\r\n-\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\r\n-\t\tif ( ! $questionPostModel ) {\r\n-\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$questionPostModel->check_capabilities_create_item_course();\r\n-\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = self::instance()->html_edit_question( $questionPostModel );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\tpublic function html_edit_question( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$section_edit_details = [\r\n-\t\t\t'wrap'         => '\u003Cdiv class=\"question-edit-details lp-section-toggle\">',\r\n-\t\t\t'header'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header lp-trigger-toggle\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Option Details', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'collapse'     => '\u003Cdiv class=\"lp-section-collapse\">',\r\n-\t\t\t'point'        => AdminEditQuestionTemplate::instance()->html_edit_mark( $questionPostModel ),\r\n-\t\t\t'hint'         => AdminEditQuestionTemplate::instance()->html_edit_hint( $questionPostModel ),\r\n-\t\t\t'explanation'  => AdminEditQuestionTemplate::instance()->html_edit_explanation( $questionPostModel ),\r\n-\t\t\t'collapse_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section_edit_main = [\r\n-\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-edit-question-wrap lp-question-edit-main\" data-question-id=\"%s\">',\r\n-\t\t\t\tesc_attr( $questionPostModel->ID )\r\n-\t\t\t),\r\n-\t\t\t'left'     => '\u003Cdiv class=\"lp-question-edit-left\">',\r\n-\t\t\t'answers'  => AdminEditQuestionTemplate::instance()->html_edit_question_by_type( $questionPostModel ),\r\n-\t\t\t'left_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'details'  => Template::combine_components( $section_edit_details ),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section_edit_main );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for field settings.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_field_settings( array $args = [] ): string {\r\n-\t\t$section = [\r\n-\t\t\t'wrap'        => '\u003Cdiv class=\"lp-question-field-settings\">',\r\n-\t\t\t'label'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-field-settings__label\">\u003Clabel>%s\u003C\u002Flabel>\u003C\u002Fdiv>',\r\n-\t\t\t\t$args['label'] ?? ''\r\n-\t\t\t),\r\n-\t\t\t'input'       => $args['input'] ?? '',\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-field-settings___desc\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$args['description'] ?? ''\r\n-\t\t\t),\r\n-\t\t\t'wrap_end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question mark.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_mark( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$point = $questionPostModel->get_mark();\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'label'       => __( 'Points', 'learnpress' ),\r\n-\t\t\t'input'       => sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"number\" name=\"lp-question-point-input\"\r\n-\t\t\t\t\tclass=\"lp-auto-save-question\"\r\n-\t\t\t\t\tdata-key-auto-save=\"question_mark\"\r\n-\t\t\t\t\tvalue=\"%s\" min=\"0\" step=\"0.01\">',\r\n-\t\t\t\tesc_attr( $point )\r\n-\t\t\t),\r\n-\t\t\t'description' => __( 'Points for choosing the correct answer.', 'learnpress' ),\r\n-\t\t];\r\n-\r\n-\t\treturn $this->html_field_settings( $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question hint.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_hint( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$question_id = $questionPostModel->ID;\r\n-\t\t$hint        = $questionPostModel->get_hint();\r\n-\r\n-\t\t$editor_id = 'lp-question-hint-' . $question_id;\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'label'       => __( 'Hint', 'learnpress' ),\r\n-\t\t\t'input'       => AdminTemplate::editor_tinymce(\r\n-\t\t\t\t$hint,\r\n-\t\t\t\t$editor_id,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'editor_height' => 50,\r\n-\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'description' => __( 'The instructions for the user to select the right answer. The text will be shown when users click the \"Hint\" button.', 'learnpress' ),\r\n-\t\t];\r\n-\r\n-\t\treturn $this->html_field_settings( $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question explanation.\r\n-\t *\r\n-\t * @param QuestionPostModel|null $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_explanation( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$question_id = $questionPostModel->ID;\r\n-\t\t$explanation = $questionPostModel->get_explanation();\r\n-\t\t$editor_id   = 'lp-question-explanation-' . $question_id;\r\n-\r\n-\t\t$args = [\r\n-\t\t\t'label'       => __( 'Explanation', 'learnpress' ),\r\n-\t\t\t'input'       => AdminTemplate::editor_tinymce(\r\n-\t\t\t\t$explanation,\r\n-\t\t\t\t$editor_id,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'editor_height' => 50,\r\n-\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'description' => __( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ),\r\n-\t\t];\r\n-\r\n-\t\treturn $this->html_field_settings( $args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question description.\r\n-\t *\r\n-\t * @param QuestionPostModel|null $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_question_description( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$question_id          = $questionPostModel->ID;\r\n-\t\t$question_description = $questionPostModel->get_the_content();\r\n-\t\t$editor_id            = 'lp-question-description-' . $question_id;\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-question-data-edit\">',\r\n-\t\t\t'header'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Description', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'tinymce'  => AdminTemplate::editor_tinymce(\r\n-\t\t\t\t$question_description,\r\n-\t\t\t\t$editor_id,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\r\n-\t\t\t\t\t'editor_height' => 50,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit question by type.\r\n-\t *\r\n-\t * @param QuestionPostModel|null $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_question_by_type( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$html_answers_config = AdminEditQuestionTemplate::instance()->html_answer_option( $questionPostModel );\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'           => '\u003Cdiv class=\"lp-question-data-edit lp-question-by-type\">',\r\n-\t\t\t'header'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-question-type-label\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Config Your Answer', 'learnpress' ),\r\n-\t\t\t\tesc_html( $questionPostModel->get_type_label() )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'button-save'    => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-question-answer button lp-hidden\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Save Answer', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'answers-config' => $html_answers_config,\r\n-\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML input question title.\r\n-\t *\r\n-\t * @param string $question_title\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_input_question_title( string $question_title = '' ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Cinput class=\"lp-question-title-input\"\r\n-\t\t\t\tname=\"lp-question-title-input\"\r\n-\t\t\t\ttype=\"text\"\r\n-\t\t\t\tvalue=\"%1$s\"\r\n-\t\t\t\tdata-old=\"%1$s\"\r\n-\t\t\t\tplaceholder=\"%2$s\"\r\n-\t\t\t\tdata-mess-empty-title=\"%3$s\">',\r\n-\t\t\tesc_attr( $question_title ),\r\n-\t\t\tesc_attr__( 'Update question title', 'learnpress' ),\r\n-\t\t\tesc_attr__( 'Question title is required', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit question type.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_option( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$type = $questionPostModel->get_type();\r\n-\r\n-\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\r\n-\t\tif ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) && $type === 'sorting_choice' ) {\r\n-\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\r\n-\t\t\t\t$type = 'sorting_choice_old';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tswitch ( $type ) {\r\n-\t\t\tcase 'true_or_false':\r\n-\t\t\t\t$html = self::html_answer_type_true_or_false( $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'single_choice':\r\n-\t\t\t\t$html = self::html_answer_type_single_choice( $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'multi_choice':\r\n-\t\t\t\t$html = self::html_answer_type_multiple_choice( $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'fill_in_blanks':\r\n-\t\t\t\t$html = self::html_answer_type_fill_in_blanks( $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'sorting_choice_old':\r\n-\t\t\t\t$html = self::html_answer_type_sorting_choice_old( $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase $type:\r\n-\t\t\t\t$html = apply_filters( 'learn-press\u002Fedit-question\u002Ftype\u002Fhtml', '', $type, $questionPostModel );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\t$html = '';\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F For create new question, type is empty.\r\n-\t\tif ( empty( $type ) ) {\r\n-\t\t\t$html_question_types = sprintf(\r\n-\t\t\t\t'\u003Coption value=\"\">%s\u003C\u002Foption>',\r\n-\t\t\t\tesc_html__( 'Select question type', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$question_types      = QuestionPostModel::get_types();\r\n-\t\t\tforeach ( $question_types as $type => $label ) {\r\n-\t\t\t\t$html_question_types .= sprintf(\r\n-\t\t\t\t\t'\u003Coption value=\"%s\">%s\u003C\u002Foption>',\r\n-\t\t\t\t\tesc_attr( $type ),\r\n-\t\t\t\t\tesc_html( $label )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$html  = Template::instance()->nest_elements(\r\n-\t\t\t\t[\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cselect class=\"lp-question-type-new\"\r\n-\t\t\t\t\t\tname=\"lp-question-type-new\" data-mess-empty-type=\"%s\">',\r\n-\t\t\t\t\t\tesc_attr__( 'Question type is required', 'learnpress' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t\t=> '\u003C\u002Fselect>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$html_question_types\r\n-\t\t\t);\r\n-\t\t\t$html .= sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"lp-btn-question-create-type button\"\r\n-\t\t\t\t\t\t\ttype=\"button\">%s %s\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan> ',\r\n-\t\t\t\t__( 'Create Question Type', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$html  = Template::instance()->nest_elements(\r\n-\t\t\t\t[ '\u003Cdiv class=\"lp-question-type-new-wrap\">' => '\u003C\u002Fdiv>' ],\r\n-\t\t\t\t$html\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$answers = $questionPostModel->get_answer_option();\r\n-\t\tif ( $questionPostModel->get_type() === 'fill_in_blanks' ) {\r\n-\t\t\t$answers = $answers[0] ?? [];\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-answers-config\" data-question-type=\"%s\" data-answers=\"%s\">',\r\n-\t\t\t\tesc_attr( $type ),\r\n-\t\t\t\tTemplate::convert_data_to_json( $answers )\r\n-\t\t\t),\r\n-\t\t\t'answers'  => $html,\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit question type true or false.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_type_true_or_false( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$name_radio = 'lp-input-answer-set-true-' . $questionPostModel->ID;\r\n-\t\t$answers    = $questionPostModel->get_answer_option();\r\n-\r\n-\t\t$html_answers = '';\r\n-\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\r\n-\t\t\t$html_answers .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item\" data-answer-id=\"%6$s\">\r\n-\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\r\n-\t\t\t\t\t\u003Cinput type=\"radio\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\r\n-\t\t\t\tesc_attr( $questionAnswerModel->title ),\r\n-\t\t\t\t$questionAnswerModel->is_true === 'yes' ? 'checked' : '',\r\n-\t\t\t\t$name_radio,\r\n-\t\t\t\tesc_attr( $questionAnswerModel->is_true ),\r\n-\t\t\t\tesc_attr( $questionAnswerModel->question_answer_id )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'header'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\r\n-\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Answers', 'learnpress' ),\r\n-\t\t\t\t__( 'Corrects', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'answers' => $html_answers,\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit single choice.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_type_single_choice( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$name_radio = 'lp-input-answer-set-true-' . $questionPostModel->ID;\r\n-\t\t$answers    = $questionPostModel->get_answer_option();\r\n-\t\t$answers[]  = null;\r\n-\r\n-\t\t$html_answers = '';\r\n-\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t$is_clone           = true;\r\n-\t\t\t$title              = '';\r\n-\t\t\t$is_true            = 'no';\r\n-\t\t\t$question_answer_id = 0;\r\n-\r\n-\t\t\tif ( ! is_null( $answer ) ) {\r\n-\t\t\t\t$is_clone            = false;\r\n-\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t$title               = $questionAnswerModel->title;\r\n-\t\t\t\t$is_true             = $questionAnswerModel->is_true;\r\n-\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_answers .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %7$s\" data-answer-id=\"%6$s\">\r\n-\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\r\n-\t\t\t\t\t%8$s\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cinput type=\"radio\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\r\n-\t\t\t\tesc_attr( $title ),\r\n-\t\t\t\t$is_true === 'yes' ? 'checked' : '',\r\n-\t\t\t\t$name_radio,\r\n-\t\t\t\tesc_attr( $is_true ),\r\n-\t\t\t\tesc_attr( $question_answer_id ),\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>'\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$html_answers .= sprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\r\n-\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'lp-question-answer-title-new-input',\r\n-\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\r\n-\t\t\t__( 'Add Option', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'header'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\r\n-\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Answers', 'learnpress' ),\r\n-\t\t\t\t__( 'Corrects', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'answers' => $html_answers,\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit question type multiple choice.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_type_multiple_choice( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$name_checkbox = 'lp-input-answer-set-true-' . $questionPostModel->ID;\r\n-\t\t$answers       = $questionPostModel->get_answer_option();\r\n-\t\t$answers[]     = null;\r\n-\r\n-\t\t$html_answers = '';\r\n-\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t$is_clone           = true;\r\n-\t\t\t$title              = '';\r\n-\t\t\t$is_true            = 'no';\r\n-\t\t\t$question_answer_id = 0;\r\n-\r\n-\t\t\tif ( ! is_null( $answer ) ) {\r\n-\t\t\t\t$is_clone            = false;\r\n-\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t$title               = $questionAnswerModel->title;\r\n-\t\t\t\t$is_true             = $questionAnswerModel->is_true;\r\n-\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_answers .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %7$s\" data-answer-id=\"%6$s\">\r\n-\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\r\n-\t\t\t\t\t%8$s\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\r\n-\t\t\t\tesc_attr( $title ),\r\n-\t\t\t\t$is_true === 'yes' ? 'checked' : '',\r\n-\t\t\t\t$name_checkbox,\r\n-\t\t\t\tesc_attr( $is_true ),\r\n-\t\t\t\tesc_attr( $question_answer_id ),\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>'\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$html_answers .= sprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\r\n-\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'lp-question-answer-title-new-input',\r\n-\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\r\n-\t\t\t__( 'Add Option', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'header'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\r\n-\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Answers', 'learnpress' ),\r\n-\t\t\t\t__( 'Corrects', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'answers' => $html_answers,\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit question type multiple choice.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_type_sorting_choice_old( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$answers   = $questionPostModel->get_answer_option();\r\n-\t\t$answers[] = null;\r\n-\r\n-\t\t$html_answers = '';\r\n-\t\tforeach ( $answers as $answer ) {\r\n-\t\t\t$is_clone           = true;\r\n-\t\t\t$title              = '';\r\n-\t\t\t$question_answer_id = 0;\r\n-\r\n-\t\t\tif ( ! is_null( $answer ) ) {\r\n-\t\t\t\t$is_clone            = false;\r\n-\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\r\n-\t\t\t\t$title               = $questionAnswerModel->title;\r\n-\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_answers .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %s\" data-answer-id=\"%d\">\r\n-\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" class=\"%s\" name=\"%s\" value=\"%s\" \u002F>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\r\n-\t\t\t\tesc_attr( $question_answer_id ),\r\n-\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\r\n-\t\t\t\t'lp-question-answer-title-input',\r\n-\t\t\t\tesc_attr( $title )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$html_answers .= sprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\r\n-\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\r\n-\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'lp-question-answer-title-new-input',\r\n-\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\r\n-\t\t\t__( 'Add Option', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'header'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\r\n-\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Answers', 'learnpress' ),\r\n-\t\t\t\t__( 'Corrects', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'answers' => $html_answers,\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html edit question type fill in blanks.\r\n-\t *\r\n-\t * @param QuestionPostModel $questionPostModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_answer_type_fill_in_blanks( QuestionPostModel $questionPostModel ): string {\r\n-\t\t$questionPostFIBModel = new QuestionPostFIBModel( $questionPostModel );\r\n-\t\t$name                 = 'lp-question-fib-input-' . $questionPostFIBModel->ID;\r\n-\t\t$answers              = $questionPostFIBModel->get_answer_option();\r\n-\t\t$options              = [\r\n-\t\t\t'clone' =>\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'fill'       => '',\r\n-\t\t\t\t\t'match_case' => 0,\r\n-\t\t\t\t\t'comparison' => 'equal',\r\n-\t\t\t\t\t'id'         => 'clone',\r\n-\t\t\t\t],\r\n-\t\t];\r\n-\t\t\u002F**\r\n-\t\t * @var QuestionAnswerModel[] $answers\r\n-\t\t *\u002F\r\n-\t\t$questionAnswerModel = $answers[0] ?? null;\r\n-\t\tif ( $questionAnswerModel instanceof QuestionAnswerModel ) {\r\n-\t\t\t$meta_data = $questionAnswerModel->get_all_metadata();\r\n-\r\n-\t\t\tif ( is_array( $meta_data ) ) {\r\n-\t\t\t\t$options = array_merge(\r\n-\t\t\t\t\t$meta_data,\r\n-\t\t\t\t\t$options\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$content = '';\r\n-\r\n-\t\tif ( $questionAnswerModel instanceof QuestionAnswerModel ) {\r\n-\t\t\t$content = $this->convert_content_fib_to_span( $questionAnswerModel->title );\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'input'                 => AdminTemplate::editor_tinymce(\r\n-\t\t\t\t$content,\r\n-\t\t\t\t$name,\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'default_editor' => 'html', \u002F\u002F Use HTML editor by default tinymce\r\n-\t\t\t\t\t'tinymce'        => true,\r\n-\t\t\t\t\t'quicktags'      => true, \u002F\u002F Set true to show tab \"Code\" in editor\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t\t'desc'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-question-fib-desc\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Select a word in the passage above and click \"Insert a new blank\" to make that word a blank for filling.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'buttons'               => '\u003Cdiv class=\"lp-question-fib-buttons\">',\r\n-\t\t\t'btn-insert-new'        => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-fib-insert-blank button\"\r\n-\t\t\t\t\tdata-default-text=\"%s\"\r\n-\t\t\t\t\tdata-mess-inserted=\"%s\"\r\n-\t\t\t\t\tdata-mess-require-select-text=\"%s\">%s %s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Enter answer correct on here', 'learnpress' ),\r\n-\t\t\t\t__( 'This text inserted to blank', 'learnpress' ),\r\n-\t\t\t\t__( 'You must select a text or position on Editor to insert new blank.', 'learnpress' ),\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Insert new blank', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-delete-all-blanks' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\"\r\n-\t\t\t\t\t\t\tclass=\"lp-btn-fib-delete-all-blanks button\"\r\n-\t\t\t\t\t\t\tdata-title=\"%s\"\r\n-\t\t\t\t\t\t\tdata-content=\"%s\"\r\n-\t\t\t\t\t\t\ttitle=\"%s\">%s %s\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'This action will delete all blanks in the editor, only keep text content.', 'learnpress' ),\r\n-\t\t\t\tesc_attr__( 'Delete all blanks on this editor.', 'learnpress' ),\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Delete all blanks', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-save'              => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-fib-save-content button lp-btn-edit-primary active\">%s %s\u003C\u002Fbutton>',\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan> ',\r\n-\t\t\t\t__( 'Save content', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-clear'             => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\"\r\n-\t\t\t\t\t\t\tclass=\"lp-btn-fib-clear-all-content button\"\r\n-\t\t\t\t\t\t\tdata-title=\"%s\"\r\n-\t\t\t\t\t\t\tdata-content=\"%s\"\r\n-\t\t\t\t\t\t\ttitle=\"%s\">%s %s\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'This action will delete all content in the editor.', 'learnpress' ),\r\n-\t\t\t\tesc_attr__( 'Clear all content on this editor.', 'learnpress' ),\r\n-\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Clear content', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'buttons_end'           => '\u003C\u002Fdiv>',\r\n-\t\t\t'options'               => $this->html_fib_options( $options ),\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\tpublic function html_fib_options( $options ): string {\r\n-\t\tif ( empty( $options ) || ! is_array( $options ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html = '';\r\n-\t\t$i    = 1;\r\n-\t\tforeach ( $options as $option ) {\r\n-\t\t\t$match_case = $option['match_case'] ?? 0;\r\n-\t\t\t$comparison = $option['comparison'] ?? '';\r\n-\t\t\t$id         = $option['id'] ?? '';\r\n-\r\n-\t\t\t\u002F*if ( $id === 'clone' ) {\r\n-\t\t\t\t$i = 0;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$section_header = [\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"lp-question-fib-option-header\">',\r\n-\t\t\t\t'number'     => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"lp-question-fib-option-index\">%s.\u003C\u002Fspan>',\r\n-\t\t\t\t\t$i++\r\n-\t\t\t\t),\r\n-\t\t\t\t'loading'    => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t\t'title'      => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"text\"\r\n-\t\t\t\t\t\tname=\"lp-question-fib-option-title-input-%s\"\r\n-\t\t\t\t\t\tvalue=\"%s\"\r\n-\t\t\t\t\t\tclass=\"lp-question-fib-option-title-input\" \u002F>',\r\n-\t\t\t\t\tesc_attr( $id ),\r\n-\t\t\t\t\tesc_html( $option['fill'] ?? '' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn-delete' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan\r\n-\t\t\t\t\t\tclass=\"lp-btn-fib-option-delete lp-icon-trash-o\"\r\n-\t\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">\r\n-\t\t\t\t\t\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Delete this blank and keep text', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'toggle'     => '\u003Cdiv class=\"lp-trigger-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section_detail = [\r\n-\t\t\t\t'wrap'                => '\u003Cdiv class=\"lp-question-fib-option-detail lp-section-collapse\">',\r\n-\t\t\t\t'match-case'          => sprintf(\r\n-\t\t\t\t\t'\u003Clabel>\r\n-\t\t\t\t\t\t\u003Cinput type=\"checkbox\" class=\"lp-question-fib-option-match-case-input\" %s name=\"%s\" data-key=\"%s\" value=\"1\" \u002F> %s\r\n-\t\t\t\t\t\u003C\u002Flabel>',\r\n-\t\t\t\t\t$match_case ? 'checked' : '',\r\n-\t\t\t\t\tesc_attr( 'lp-question-fib-option-match-case-input' . $id ),\r\n-\t\t\t\t\t'match_case',\r\n-\t\t\t\t\t__( 'Match case', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_match_case'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-question-fib-option-match-case-wrap %s\">',\r\n-\t\t\t\t\t$match_case ? '' : 'lp-hidden'\r\n-\t\t\t\t),\r\n-\t\t\t\t'separator-label'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t__( 'Comparison', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'equal'               => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>\r\n-\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\u003Cinput type=\"radio\"\r\n-\t\t\t\t\t\t\tdata-key =\"comparison\"\r\n-\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\r\n-\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"equal\" %s \u002F> %s\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_attr( $id ),\r\n-\t\t\t\t\t$comparison === 'equal' ? 'checked' : '',\r\n-\t\t\t\t\t__( 'Equal', 'learnpress' ),\r\n-\t\t\t\t\t__( 'Match two words are equality.', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'range'               => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>\r\n-\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\u003Cinput type=\"radio\"\r\n-\t\t\t\t\t\t\tdata-key =\"comparison\"\r\n-\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\r\n-\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"range\" %s \u002F> %s\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_attr( $id ),\r\n-\t\t\t\t\t$comparison === 'range' ? 'checked' : '',\r\n-\t\t\t\t\t__( 'Range', 'learnpress' ),\r\n-\t\t\t\t\t__( 'Match any number in a range. Use 100, 200 to match any value from 100 to 200.', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'any'                 => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>\r\n-\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\u003Cinput type=\"radio\"\r\n-\t\t\t\t\t\t\tdata-key =\"comparison\"\r\n-\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\r\n-\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"any\" %s \u002F> %s\r\n-\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_attr( $id ),\r\n-\t\t\t\t\t$comparison === 'any' ? 'checked' : '',\r\n-\t\t\t\t\t__( 'Any', 'learnpress' ),\r\n-\t\t\t\t\t__( 'Match any value in a set of words. Use fill, blank, or question to match any value in the set.', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap_match_case_end' => '\u003C\u002Fdiv>', \u002F\u002F End match case wrap\r\n-\t\t\t\t'wrap_end'            => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-question-fib-blank-option-item %s lp-section-toggle lp-collapse\" data-id=\"%s\">',\r\n-\t\t\t\t\t$id === 'clone' ? 'clone lp-hidden' : '',\r\n-\t\t\t\t\tesc_attr( $id )\r\n-\t\t\t\t),\r\n-\t\t\t\t'header'   => Template::combine_components( $section_header ),\r\n-\t\t\t\t'detail'   => Template::combine_components( $section_detail ),\r\n-\t\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html .= Template::combine_components( $section );\r\n-\t\t}\r\n-\r\n-\t\t$html = Template::instance()->nest_elements(\r\n-\t\t\t[ '\u003Cdiv class=\"lp-question-fib-blank-options\">' => '\u003C\u002Fdiv>' ],\r\n-\t\t\t$html\r\n-\t\t);\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert content of fill in blanks shortcode to span elements display on Editor.\r\n-\t *\r\n-\t * @param string $content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function convert_content_fib_to_span( string $content = '' ): string {\r\n-\t\t$regex_str = get_shortcode_regex( array( 'fib' ) );\r\n-\t\t$pattern   = \"\u002F{$regex_str}\u002F\";\r\n-\t\tpreg_match_all(\r\n-\t\t\t$pattern,\r\n-\t\t\t$content,\r\n-\t\t\t$all_shortcode,\r\n-\t\t\tPREG_SET_ORDER\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $all_shortcode ) ) {\r\n-\t\t\tforeach ( $all_shortcode as $shortcode ) {\r\n-\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\r\n-\r\n-\t\t\t\t$fill = $atts['fill'] ?? '';\r\n-\t\t\t\t$id   = $atts['id'] ?? '';\r\n-\t\t\t\tif ( empty( $id ) ) {\r\n-\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\r\n-\t\t\t\t\t$id  = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$new_str = sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"lp-question-fib-input\" data-id=\"%s\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr( $id ),\r\n-\t\t\t\t\tesc_html( $fill )\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$content = str_replace( $shortcode[0], $new_str, $content );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\Question\\QuestionAnswerModel;\n+use LearnPress\\Models\\Question\\QuestionPostFIBModel;\n+use LearnPress\\Models\\Question\\QuestionPostModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use stdClass;\n+\n+\u002F**\n+ * Template Admin Edit Quiz.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.0\n+ *\u002F\n+class AdminEditQuestionTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-question\u002Flayout', [ $this, 'edit_layout' ] );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t\tadd_filter(\n+\t\t\t'wp_default_editor',\n+\t\t\tfunction ( $r ) {\n+\t\t\t\tglobal $post;\n+\t\t\t\tif ( ! $post ) {\n+\t\t\t\t\treturn $r;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $post->post_type !== LP_QUESTION_CPT ) {\n+\t\t\t\t\treturn $r;\n+\t\t\t\t}\n+\n+\t\t\t\treturn 'html';\n+\t\t\t},\n+\t\t\t1000\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Layout for edit question.\n+\t *\n+\t * @use self::render_edit_question\n+\t *\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function edit_layout( QuestionPostModel $questionPostModel ) {\n+\t\twp_enqueue_style( 'lp-edit-question' );\n+\t\twp_enqueue_script( 'lp-edit-question' );\n+\n+\t\t$args      = [\n+\t\t\t'id_url'      => 'edit-question',\n+\t\t\t'question_id' => $questionPostModel->ID,\n+\t\t];\n+\t\t$call_back = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_edit_question',\n+\t\t);\n+\n+\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t * @use self::render_edit_quiz\n+\t * @use self::render_list_items_not_assign\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = self::class . ':render_edit_question';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render edit question html.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function render_edit_question( array $data ): stdClass {\n+\t\t$question_id       = $data['question_id'] ?? 0;\n+\t\t$questionPostModel = QuestionPostModel::find( $question_id, true );\n+\t\tif ( ! $questionPostModel ) {\n+\t\t\tthrow new Exception( __( 'Question not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check permission\n+\t\t$questionPostModel->check_capabilities_create_item_course();\n+\n+\t\t$content          = new stdClass();\n+\t\t$content->content = self::instance()->html_edit_question( $questionPostModel );\n+\n+\t\treturn $content;\n+\t}\n+\n+\tpublic function html_edit_question( QuestionPostModel $questionPostModel ): string {\n+\t\t$section_edit_details = [\n+\t\t\t'wrap'         => '\u003Cdiv class=\"question-edit-details lp-section-toggle\">',\n+\t\t\t'header'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header lp-trigger-toggle\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Option Details', 'learnpress' )\n+\t\t\t),\n+\t\t\t'collapse'     => '\u003Cdiv class=\"lp-section-collapse\">',\n+\t\t\t'point'        => AdminEditQuestionTemplate::instance()->html_edit_mark( $questionPostModel ),\n+\t\t\t'hint'         => AdminEditQuestionTemplate::instance()->html_edit_hint( $questionPostModel ),\n+\t\t\t'explanation'  => AdminEditQuestionTemplate::instance()->html_edit_explanation( $questionPostModel ),\n+\t\t\t'collapse_end' => '\u003C\u002Fdiv>',\n+\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section_edit_main = [\n+\t\t\t'wrap'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-edit-question-wrap lp-question-edit-main\" data-question-id=\"%s\">',\n+\t\t\t\tesc_attr( $questionPostModel->ID )\n+\t\t\t),\n+\t\t\t'left'     => '\u003Cdiv class=\"lp-question-edit-left\">',\n+\t\t\t'answers'  => AdminEditQuestionTemplate::instance()->html_edit_question_by_type( $questionPostModel ),\n+\t\t\t'left_end' => '\u003C\u002Fdiv>',\n+\t\t\t'details'  => Template::combine_components( $section_edit_details ),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section_edit_main );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for field settings.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_field_settings( array $args = [] ): string {\n+\t\t$section = [\n+\t\t\t'wrap'        => '\u003Cdiv class=\"lp-question-field-settings\">',\n+\t\t\t'label'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-field-settings__label\">\u003Clabel>%s\u003C\u002Flabel>\u003C\u002Fdiv>',\n+\t\t\t\t$args['label'] ?? ''\n+\t\t\t),\n+\t\t\t'input'       => $args['input'] ?? '',\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-field-settings___desc\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$args['description'] ?? ''\n+\t\t\t),\n+\t\t\t'wrap_end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question mark.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_mark( QuestionPostModel $questionPostModel ): string {\n+\t\t$point = $questionPostModel->get_mark();\n+\n+\t\t$args = [\n+\t\t\t'label'       => __( 'Points', 'learnpress' ),\n+\t\t\t'input'       => sprintf(\n+\t\t\t\t'\u003Cinput type=\"number\" name=\"lp-question-point-input\"\n+\t\t\t\t\tclass=\"lp-auto-save-question\"\n+\t\t\t\t\tdata-key-auto-save=\"question_mark\"\n+\t\t\t\t\tvalue=\"%s\" min=\"0\" step=\"0.01\">',\n+\t\t\t\tesc_attr( $point )\n+\t\t\t),\n+\t\t\t'description' => __( 'Points for choosing the correct answer.', 'learnpress' ),\n+\t\t];\n+\n+\t\treturn $this->html_field_settings( $args );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question hint.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_hint( QuestionPostModel $questionPostModel ): string {\n+\t\t$question_id = $questionPostModel->ID;\n+\t\t$hint        = $questionPostModel->get_hint();\n+\n+\t\t$editor_id = 'lp-question-hint-' . $question_id;\n+\n+\t\t$args = [\n+\t\t\t'label'       => __( 'Hint', 'learnpress' ),\n+\t\t\t'input'       => AdminTemplate::editor_tinymce(\n+\t\t\t\t$hint,\n+\t\t\t\t$editor_id,\n+\t\t\t\t[\n+\t\t\t\t\t'editor_height' => 50,\n+\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'description' => __( 'The instructions for the user to select the right answer. The text will be shown when users click the \"Hint\" button.', 'learnpress' ),\n+\t\t];\n+\n+\t\treturn $this->html_field_settings( $args );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question explanation.\n+\t *\n+\t * @param QuestionPostModel|null $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_explanation( QuestionPostModel $questionPostModel ): string {\n+\t\t$question_id = $questionPostModel->ID;\n+\t\t$explanation = $questionPostModel->get_explanation();\n+\t\t$editor_id   = 'lp-question-explanation-' . $question_id;\n+\n+\t\t$args = [\n+\t\t\t'label'       => __( 'Explanation', 'learnpress' ),\n+\t\t\t'input'       => AdminTemplate::editor_tinymce(\n+\t\t\t\t$explanation,\n+\t\t\t\t$editor_id,\n+\t\t\t\t[\n+\t\t\t\t\t'editor_height' => 50,\n+\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'description' => __( 'The explanation will be displayed when students click the \"Check Answer\" button.', 'learnpress' ),\n+\t\t];\n+\n+\t\treturn $this->html_field_settings( $args );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question description.\n+\t *\n+\t * @param QuestionPostModel|null $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_question_description( QuestionPostModel $questionPostModel ): string {\n+\t\t$question_id          = $questionPostModel->ID;\n+\t\t$question_description = $questionPostModel->get_the_content();\n+\t\t$editor_id            = 'lp-question-description-' . $question_id;\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-question-data-edit\">',\n+\t\t\t'header'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Description', 'learnpress' )\n+\t\t\t),\n+\t\t\t'tinymce'  => AdminTemplate::editor_tinymce(\n+\t\t\t\t$question_description,\n+\t\t\t\t$editor_id,\n+\t\t\t\t[\n+\t\t\t\t\t'editor_class'  => 'lp-editor-tinymce lp-auto-save-question',\n+\t\t\t\t\t'editor_height' => 50,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit question by type.\n+\t *\n+\t * @param QuestionPostModel|null $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_question_by_type( QuestionPostModel $questionPostModel ): string {\n+\t\t$html_answers_config = AdminEditQuestionTemplate::instance()->html_answer_option( $questionPostModel );\n+\n+\t\t$section = [\n+\t\t\t'wrap'           => '\u003Cdiv class=\"lp-question-data-edit lp-question-by-type\">',\n+\t\t\t'header'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-data-edit-header\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cspan class=\"lp-question-type-label\">%s\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Config Your Answer', 'learnpress' ),\n+\t\t\t\tesc_html( $questionPostModel->get_type_label() )\n+\t\t\t),\n+\t\t\t\u002F*'button-save'    => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-question-answer button lp-hidden\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Save Answer', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'answers-config' => $html_answers_config,\n+\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML input question title.\n+\t *\n+\t * @param string $question_title\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_input_question_title( string $question_title = '' ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Cinput class=\"lp-question-title-input\"\n+\t\t\t\tname=\"lp-question-title-input\"\n+\t\t\t\ttype=\"text\"\n+\t\t\t\tvalue=\"%1$s\"\n+\t\t\t\tdata-old=\"%1$s\"\n+\t\t\t\tplaceholder=\"%2$s\"\n+\t\t\t\tdata-mess-empty-title=\"%3$s\">',\n+\t\t\tesc_attr( $question_title ),\n+\t\t\tesc_attr__( 'Update question title', 'learnpress' ),\n+\t\t\tesc_attr__( 'Question title is required', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit question type.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_option( QuestionPostModel $questionPostModel ): string {\n+\t\t$type = $questionPostModel->get_type();\n+\n+\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\n+\t\tif ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) && $type === 'sorting_choice' ) {\n+\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\n+\t\t\t\t$type = 'sorting_choice_old';\n+\t\t\t}\n+\t\t}\n+\n+\t\tswitch ( $type ) {\n+\t\t\tcase 'true_or_false':\n+\t\t\t\t$html = self::html_answer_type_true_or_false( $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tcase 'single_choice':\n+\t\t\t\t$html = self::html_answer_type_single_choice( $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tcase 'multi_choice':\n+\t\t\t\t$html = self::html_answer_type_multiple_choice( $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tcase 'fill_in_blanks':\n+\t\t\t\t$html = self::html_answer_type_fill_in_blanks( $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tcase 'sorting_choice_old':\n+\t\t\t\t$html = self::html_answer_type_sorting_choice_old( $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tcase $type:\n+\t\t\t\t$html = apply_filters( 'learn-press\u002Fedit-question\u002Ftype\u002Fhtml', '', $type, $questionPostModel );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\t$html = '';\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\t\u002F\u002F For create new question, type is empty.\n+\t\tif ( empty( $type ) ) {\n+\t\t\t$html_question_types = sprintf(\n+\t\t\t\t'\u003Coption value=\"\">%s\u003C\u002Foption>',\n+\t\t\t\tesc_html__( 'Select question type', 'learnpress' )\n+\t\t\t);\n+\t\t\t$question_types      = QuestionPostModel::get_types();\n+\t\t\tforeach ( $question_types as $type => $label ) {\n+\t\t\t\t$html_question_types .= sprintf(\n+\t\t\t\t\t'\u003Coption value=\"%s\">%s\u003C\u002Foption>',\n+\t\t\t\t\tesc_attr( $type ),\n+\t\t\t\t\tesc_html( $label )\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$html  = Template::instance()->nest_elements(\n+\t\t\t\t[\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cselect class=\"lp-question-type-new\"\n+\t\t\t\t\t\tname=\"lp-question-type-new\" data-mess-empty-type=\"%s\">',\n+\t\t\t\t\t\tesc_attr__( 'Question type is required', 'learnpress' )\n+\t\t\t\t\t)\n+\t\t\t\t\t=> '\u003C\u002Fselect>',\n+\t\t\t\t],\n+\t\t\t\t$html_question_types\n+\t\t\t);\n+\t\t\t$html .= sprintf(\n+\t\t\t\t'\u003Cbutton class=\"lp-btn-question-create-type button\"\n+\t\t\t\t\t\t\ttype=\"button\">%s %s\n+\t\t\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan> ',\n+\t\t\t\t__( 'Create Question Type', 'learnpress' )\n+\t\t\t);\n+\t\t\t$html  = Template::instance()->nest_elements(\n+\t\t\t\t[ '\u003Cdiv class=\"lp-question-type-new-wrap\">' => '\u003C\u002Fdiv>' ],\n+\t\t\t\t$html\n+\t\t\t);\n+\t\t}\n+\n+\t\t$answers = $questionPostModel->get_answer_option();\n+\t\tif ( $questionPostModel->get_type() === 'fill_in_blanks' ) {\n+\t\t\t$answers = $answers[0] ?? [];\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-answers-config\" data-question-type=\"%s\" data-answers=\"%s\">',\n+\t\t\t\tesc_attr( $type ),\n+\t\t\t\tTemplate::convert_data_to_json( $answers )\n+\t\t\t),\n+\t\t\t'answers'  => $html,\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit question type true or false.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_type_true_or_false( QuestionPostModel $questionPostModel ): string {\n+\t\t$name_radio = 'lp-input-answer-set-true-' . $questionPostModel->ID;\n+\t\t$answers    = $questionPostModel->get_answer_option();\n+\n+\t\t$html_answers = '';\n+\t\tforeach ( $answers as $answer ) {\n+\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\n+\t\t\t$html_answers .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item\" data-answer-id=\"%6$s\">\n+\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\n+\t\t\t\t\t\u003Cinput type=\"radio\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\n+\t\t\t\tesc_attr( $questionAnswerModel->title ),\n+\t\t\t\t$questionAnswerModel->is_true === 'yes' ? 'checked' : '',\n+\t\t\t\t$name_radio,\n+\t\t\t\tesc_attr( $questionAnswerModel->is_true ),\n+\t\t\t\tesc_attr( $questionAnswerModel->question_answer_id )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'header'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\n+\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Answers', 'learnpress' ),\n+\t\t\t\t__( 'Corrects', 'learnpress' )\n+\t\t\t),\n+\t\t\t'answers' => $html_answers,\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit single choice.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_type_single_choice( QuestionPostModel $questionPostModel ): string {\n+\t\t$name_radio = 'lp-input-answer-set-true-' . $questionPostModel->ID;\n+\t\t$answers    = $questionPostModel->get_answer_option();\n+\t\t$answers[]  = null;\n+\n+\t\t$html_answers = '';\n+\t\tforeach ( $answers as $answer ) {\n+\t\t\t$is_clone           = true;\n+\t\t\t$title              = '';\n+\t\t\t$is_true            = 'no';\n+\t\t\t$question_answer_id = 0;\n+\n+\t\t\tif ( ! is_null( $answer ) ) {\n+\t\t\t\t$is_clone            = false;\n+\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t$title               = $questionAnswerModel->title;\n+\t\t\t\t$is_true             = $questionAnswerModel->is_true;\n+\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\n+\t\t\t}\n+\n+\t\t\t$html_answers .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %7$s\" data-answer-id=\"%6$s\">\n+\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\n+\t\t\t\t\t%8$s\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cinput type=\"radio\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\n+\t\t\t\tesc_attr( $title ),\n+\t\t\t\t$is_true === 'yes' ? 'checked' : '',\n+\t\t\t\t$name_radio,\n+\t\t\t\tesc_attr( $is_true ),\n+\t\t\t\tesc_attr( $question_answer_id ),\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>'\n+\t\t\t);\n+\t\t}\n+\n+\t\t$html_answers .= sprintf(\n+\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\n+\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'lp-question-answer-title-new-input',\n+\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\n+\t\t\t__( 'Add Option', 'learnpress' )\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'header'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\n+\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Answers', 'learnpress' ),\n+\t\t\t\t__( 'Corrects', 'learnpress' )\n+\t\t\t),\n+\t\t\t'answers' => $html_answers,\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit question type multiple choice.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_type_multiple_choice( QuestionPostModel $questionPostModel ): string {\n+\t\t$name_checkbox = 'lp-input-answer-set-true-' . $questionPostModel->ID;\n+\t\t$answers       = $questionPostModel->get_answer_option();\n+\t\t$answers[]     = null;\n+\n+\t\t$html_answers = '';\n+\t\tforeach ( $answers as $answer ) {\n+\t\t\t$is_clone           = true;\n+\t\t\t$title              = '';\n+\t\t\t$is_true            = 'no';\n+\t\t\t$question_answer_id = 0;\n+\n+\t\t\tif ( ! is_null( $answer ) ) {\n+\t\t\t\t$is_clone            = false;\n+\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t$title               = $questionAnswerModel->title;\n+\t\t\t\t$is_true             = $questionAnswerModel->is_true;\n+\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\n+\t\t\t}\n+\n+\t\t\t$html_answers .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %7$s\" data-answer-id=\"%6$s\">\n+\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\n+\t\t\t\t\t%8$s\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"%2$s\" \u002F>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" class=\"lp-input-answer-set-true lp-auto-save-question-answer\" name=\"%4$s\" %3$s value=\"%5$s\" \u002F>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\n+\t\t\t\tesc_attr( $title ),\n+\t\t\t\t$is_true === 'yes' ? 'checked' : '',\n+\t\t\t\t$name_checkbox,\n+\t\t\t\tesc_attr( $is_true ),\n+\t\t\t\tesc_attr( $question_answer_id ),\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>'\n+\t\t\t);\n+\t\t}\n+\n+\t\t$html_answers .= sprintf(\n+\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\n+\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'lp-question-answer-title-new-input',\n+\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\n+\t\t\t__( 'Add Option', 'learnpress' )\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'header'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\n+\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Answers', 'learnpress' ),\n+\t\t\t\t__( 'Corrects', 'learnpress' )\n+\t\t\t),\n+\t\t\t'answers' => $html_answers,\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit question type multiple choice.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_type_sorting_choice_old( QuestionPostModel $questionPostModel ): string {\n+\t\t$answers   = $questionPostModel->get_answer_option();\n+\t\t$answers[] = null;\n+\n+\t\t$html_answers = '';\n+\t\tforeach ( $answers as $answer ) {\n+\t\t\t$is_clone           = true;\n+\t\t\t$title              = '';\n+\t\t\t$question_answer_id = 0;\n+\n+\t\t\tif ( ! is_null( $answer ) ) {\n+\t\t\t\t$is_clone            = false;\n+\t\t\t\t$questionAnswerModel = new QuestionAnswerModel( $answer );\n+\t\t\t\t$title               = $questionAnswerModel->title;\n+\t\t\t\t$question_answer_id  = $questionAnswerModel->question_answer_id;\n+\t\t\t}\n+\n+\t\t\t$html_answers .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-answer-item %s\" data-answer-id=\"%d\">\n+\t\t\t\t\t\u003Cspan class=\"drag lp-icon-drag\" title=\"Drag to reorder section\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cinput type=\"text\" class=\"%s\" name=\"%s\" value=\"%s\" \u002F>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-trash-o lp-btn-delete-question-answer\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : '',\n+\t\t\t\tesc_attr( $question_answer_id ),\n+\t\t\t\t'lp-question-answer-title-input lp-auto-save-question-answer',\n+\t\t\t\t'lp-question-answer-title-input',\n+\t\t\t\tesc_attr( $title )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$html_answers .= sprintf(\n+\t\t\t'\u003Cdiv class=\"lp-question-answer-item-add-new\">\n+\t\t\t\t\u003Cspan class=\"lp-icon-plus\" title=\"Add answer option\">\u003C\u002Fspan>\n+\t\t\t\t\u003Cinput type=\"text\" class=\"%1$s\" name=\"%1$s\" value=\"\" data-mess-empty-title=\"%2$s\" \u002F>\n+\t\t\t\t\u003Cbutton type=\"button\" class=\"button lp-btn-add-question-answer lp-btn-edit-primary\">%3$s\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'lp-question-answer-title-new-input',\n+\t\t\tesc_attr__( 'Answer title is required', 'learnpress' ),\n+\t\t\t__( 'Add Option', 'learnpress' )\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'header'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-choice-header\">\n+\t\t\t\t\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Answers', 'learnpress' ),\n+\t\t\t\t__( 'Corrects', 'learnpress' )\n+\t\t\t),\n+\t\t\t'answers' => $html_answers,\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html edit question type fill in blanks.\n+\t *\n+\t * @param QuestionPostModel $questionPostModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_answer_type_fill_in_blanks( QuestionPostModel $questionPostModel ): string {\n+\t\t$questionPostFIBModel = new QuestionPostFIBModel( $questionPostModel );\n+\t\t$name                 = 'lp-question-fib-input-' . $questionPostFIBModel->ID;\n+\t\t$answers              = $questionPostFIBModel->get_answer_option();\n+\t\t$options              = [\n+\t\t\t'clone' =>\n+\t\t\t\t[\n+\t\t\t\t\t'fill'       => '',\n+\t\t\t\t\t'match_case' => 0,\n+\t\t\t\t\t'comparison' => 'equal',\n+\t\t\t\t\t'id'         => 'clone',\n+\t\t\t\t],\n+\t\t];\n+\t\t\u002F**\n+\t\t * @var QuestionAnswerModel[] $answers\n+\t\t *\u002F\n+\t\t$questionAnswerModel = $answers[0] ?? null;\n+\t\tif ( $questionAnswerModel instanceof QuestionAnswerModel ) {\n+\t\t\t$meta_data = $questionAnswerModel->get_all_metadata();\n+\n+\t\t\tif ( is_array( $meta_data ) ) {\n+\t\t\t\t$options = array_merge(\n+\t\t\t\t\t$meta_data,\n+\t\t\t\t\t$options\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$content = '';\n+\n+\t\tif ( $questionAnswerModel instanceof QuestionAnswerModel ) {\n+\t\t\t$content = $this->convert_content_fib_to_span( $questionAnswerModel->title );\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'input'                 => AdminTemplate::editor_tinymce(\n+\t\t\t\t$content,\n+\t\t\t\t$name,\n+\t\t\t\t[\n+\t\t\t\t\t'default_editor' => 'html', \u002F\u002F Use HTML editor by default tinymce\n+\t\t\t\t\t'tinymce'        => true,\n+\t\t\t\t\t'quicktags'      => true, \u002F\u002F Set true to show tab \"Code\" in editor\n+\t\t\t\t]\n+\t\t\t),\n+\t\t\t'desc'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-question-fib-desc\">%s\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Select a word in the passage above and click \"Insert a new blank\" to make that word a blank for filling.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'buttons'               => '\u003Cdiv class=\"lp-question-fib-buttons\">',\n+\t\t\t'btn-insert-new'        => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-fib-insert-blank button\"\n+\t\t\t\t\tdata-default-text=\"%s\"\n+\t\t\t\t\tdata-mess-inserted=\"%s\"\n+\t\t\t\t\tdata-mess-require-select-text=\"%s\">%s %s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Enter answer correct on here', 'learnpress' ),\n+\t\t\t\t__( 'This text inserted to blank', 'learnpress' ),\n+\t\t\t\t__( 'You must select a text or position on Editor to insert new blank.', 'learnpress' ),\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Insert new blank', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-delete-all-blanks' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\"\n+\t\t\t\t\t\t\tclass=\"lp-btn-fib-delete-all-blanks button\"\n+\t\t\t\t\t\t\tdata-title=\"%s\"\n+\t\t\t\t\t\t\tdata-content=\"%s\"\n+\t\t\t\t\t\t\ttitle=\"%s\">%s %s\n+\t\t\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\tesc_html__( 'This action will delete all blanks in the editor, only keep text content.', 'learnpress' ),\n+\t\t\t\tesc_attr__( 'Delete all blanks on this editor.', 'learnpress' ),\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Delete all blanks', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-save'              => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-fib-save-content button lp-btn-edit-primary active\">%s %s\u003C\u002Fbutton>',\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan> ',\n+\t\t\t\t__( 'Save content', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-clear'             => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\"\n+\t\t\t\t\t\t\tclass=\"lp-btn-fib-clear-all-content button\"\n+\t\t\t\t\t\t\tdata-title=\"%s\"\n+\t\t\t\t\t\t\tdata-content=\"%s\"\n+\t\t\t\t\t\t\ttitle=\"%s\">%s %s\n+\t\t\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\tesc_html__( 'This action will delete all content in the editor.', 'learnpress' ),\n+\t\t\t\tesc_attr__( 'Clear all content on this editor.', 'learnpress' ),\n+\t\t\t\t'\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Clear content', 'learnpress' )\n+\t\t\t),\n+\t\t\t'buttons_end'           => '\u003C\u002Fdiv>',\n+\t\t\t'options'               => $this->html_fib_options( $options ),\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\tpublic function html_fib_options( $options ): string {\n+\t\tif ( empty( $options ) || ! is_array( $options ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html = '';\n+\t\t$i    = 1;\n+\t\tforeach ( $options as $option ) {\n+\t\t\t$match_case = $option['match_case'] ?? 0;\n+\t\t\t$comparison = $option['comparison'] ?? '';\n+\t\t\t$id         = $option['id'] ?? '';\n+\n+\t\t\t\u002F*if ( $id === 'clone' ) {\n+\t\t\t\t$i = 0;\n+\t\t\t}*\u002F\n+\n+\t\t\t$section_header = [\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"lp-question-fib-option-header\">',\n+\t\t\t\t'number'     => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"lp-question-fib-option-index\">%s.\u003C\u002Fspan>',\n+\t\t\t\t\t$i++\n+\t\t\t\t),\n+\t\t\t\t'loading'    => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t\t'title'      => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"text\"\n+\t\t\t\t\t\tname=\"lp-question-fib-option-title-input-%s\"\n+\t\t\t\t\t\tvalue=\"%s\"\n+\t\t\t\t\t\tclass=\"lp-question-fib-option-title-input\" \u002F>',\n+\t\t\t\t\tesc_attr( $id ),\n+\t\t\t\t\tesc_html( $option['fill'] ?? '' )\n+\t\t\t\t),\n+\t\t\t\t'btn-delete' => sprintf(\n+\t\t\t\t\t'\u003Cspan\n+\t\t\t\t\t\tclass=\"lp-btn-fib-option-delete lp-icon-trash-o\"\n+\t\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">\n+\t\t\t\t\t\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Delete this blank and keep text', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'toggle'     => '\u003Cdiv class=\"lp-trigger-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\t'wrap_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section_detail = [\n+\t\t\t\t'wrap'                => '\u003Cdiv class=\"lp-question-fib-option-detail lp-section-collapse\">',\n+\t\t\t\t'match-case'          => sprintf(\n+\t\t\t\t\t'\u003Clabel>\n+\t\t\t\t\t\t\u003Cinput type=\"checkbox\" class=\"lp-question-fib-option-match-case-input\" %s name=\"%s\" data-key=\"%s\" value=\"1\" \u002F> %s\n+\t\t\t\t\t\u003C\u002Flabel>',\n+\t\t\t\t\t$match_case ? 'checked' : '',\n+\t\t\t\t\tesc_attr( 'lp-question-fib-option-match-case-input' . $id ),\n+\t\t\t\t\t'match_case',\n+\t\t\t\t\t__( 'Match case', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'wrap_match_case'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-question-fib-option-match-case-wrap %s\">',\n+\t\t\t\t\t$match_case ? '' : 'lp-hidden'\n+\t\t\t\t),\n+\t\t\t\t'separator-label'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv>%s\u003C\u002Fdiv>',\n+\t\t\t\t\t__( 'Comparison', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'equal'               => sprintf(\n+\t\t\t\t\t'\u003Cdiv>\n+\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\u003Cinput type=\"radio\"\n+\t\t\t\t\t\t\tdata-key =\"comparison\"\n+\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\n+\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"equal\" %s \u002F> %s\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_attr( $id ),\n+\t\t\t\t\t$comparison === 'equal' ? 'checked' : '',\n+\t\t\t\t\t__( 'Equal', 'learnpress' ),\n+\t\t\t\t\t__( 'Match two words are equality.', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'range'               => sprintf(\n+\t\t\t\t\t'\u003Cdiv>\n+\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\u003Cinput type=\"radio\"\n+\t\t\t\t\t\t\tdata-key =\"comparison\"\n+\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\n+\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"range\" %s \u002F> %s\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_attr( $id ),\n+\t\t\t\t\t$comparison === 'range' ? 'checked' : '',\n+\t\t\t\t\t__( 'Range', 'learnpress' ),\n+\t\t\t\t\t__( 'Match any number in a range. Use 100, 200 to match any value from 100 to 200.', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'any'                 => sprintf(\n+\t\t\t\t\t'\u003Cdiv>\n+\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\u003Cinput type=\"radio\"\n+\t\t\t\t\t\t\tdata-key =\"comparison\"\n+\t\t\t\t\t\t\tname=\"lp-question-fib-option-comparison-input-%s\"\n+\t\t\t\t\t\t\tclass=\"lp-question-fib-option-comparison-input\" value=\"any\" %s \u002F> %s\n+\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\u003Cp>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_attr( $id ),\n+\t\t\t\t\t$comparison === 'any' ? 'checked' : '',\n+\t\t\t\t\t__( 'Any', 'learnpress' ),\n+\t\t\t\t\t__( 'Match any value in a set of words. Use fill, blank, or question to match any value in the set.', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'wrap_match_case_end' => '\u003C\u002Fdiv>', \u002F\u002F End match case wrap\n+\t\t\t\t'wrap_end'            => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section = [\n+\t\t\t\t'wrap'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-question-fib-blank-option-item %s lp-section-toggle lp-collapse\" data-id=\"%s\">',\n+\t\t\t\t\t$id === 'clone' ? 'clone lp-hidden' : '',\n+\t\t\t\t\tesc_attr( $id )\n+\t\t\t\t),\n+\t\t\t\t'header'   => Template::combine_components( $section_header ),\n+\t\t\t\t'detail'   => Template::combine_components( $section_detail ),\n+\t\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html .= Template::combine_components( $section );\n+\t\t}\n+\n+\t\t$html = Template::instance()->nest_elements(\n+\t\t\t[ '\u003Cdiv class=\"lp-question-fib-blank-options\">' => '\u003C\u002Fdiv>' ],\n+\t\t\t$html\n+\t\t);\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Convert content of fill in blanks shortcode to span elements display on Editor.\n+\t *\n+\t * @param string $content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function convert_content_fib_to_span( string $content = '' ): string {\n+\t\t$regex_str = get_shortcode_regex( array( 'fib' ) );\n+\t\t$pattern   = \"\u002F{$regex_str}\u002F\";\n+\t\tpreg_match_all(\n+\t\t\t$pattern,\n+\t\t\t$content,\n+\t\t\t$all_shortcode,\n+\t\t\tPREG_SET_ORDER\n+\t\t);\n+\n+\t\tif ( ! empty( $all_shortcode ) ) {\n+\t\t\tforeach ( $all_shortcode as $shortcode ) {\n+\t\t\t\t$atts = shortcode_parse_atts( $shortcode[0] );\n+\n+\t\t\t\t$fill = $atts['fill'] ?? '';\n+\t\t\t\t$id   = $atts['id'] ?? '';\n+\t\t\t\tif ( empty( $id ) ) {\n+\t\t\t\t\t$ida = explode( '=', str_replace( ']', '', $atts[1] ) );\n+\t\t\t\t\t$id  = isset( $ida[1] ) ? str_replace( '\"', '', $ida[1] ) : '';\n+\t\t\t\t}\n+\n+\t\t\t\t$new_str = sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"lp-question-fib-input\" data-id=\"%s\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr( $id ),\n+\t\t\t\t\tesc_html( $fill )\n+\t\t\t\t);\n+\n+\t\t\t\t$content = str_replace( $shortcode[0], $new_str, $content );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,765 +1,749 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Databases\\UserItemsDB;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\Table\\TableListTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-use LP_Debug;\r\n-use LP_Helper;\r\n-use LP_Page_Controller;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Template Admin List Students Enrolled.\r\n- *\r\n- * Displays enrolled students for Admin (all courses) and Instructor (own courses only).\r\n- * Provides WP Admin submenu + Frontend profile tab.\r\n- *\r\n- * @since 4.3.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminListStudentsEnrolled {\r\n-\tuse Singleton;\r\n-\r\n-\tconst PER_PAGE = 10;\r\n-\r\n-\tpublic function init() {\r\n-\r\n-\t\t\u002F\u002F 1. Register render hook for both admin + frontend profile.\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', array( $this, 'enrolled_students_layout' ) );\r\n-\t\t\u002F\u002F 2. Whitelist AJAX callback.\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\r\n-\t\t\u002F\u002F 3. Register WP admin submenu page.\r\n-\t\tadd_action( 'admin_menu', array( $this, 'register_admin_submenu' ), 30 );\r\n-\t\t\u002F\u002F 4. Render a modal toolbar template from PHP (used by JS modal).\r\n-\t\tadd_action( 'admin_footer', array( $this, 'print_modal_toolbar_template' ) );\r\n-\t\tadd_action( 'wp_footer', array( $this, 'print_modal_toolbar_template' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register submenu under LearnPress.\r\n-\t *\u002F\r\n-\tpublic function register_admin_submenu() {\r\n-\t\tadd_submenu_page(\r\n-\t\t\t'learn_press',\r\n-\t\t\t__( 'Enrolled Students', 'learnpress' ),\r\n-\t\t\t__( 'Enrolled Students', 'learnpress' ),\r\n-\t\t\t'edit_posts', \u002F\u002F Both admin + lp_teacher\r\n-\t\t\t'lp-enrolled-students',\r\n-\t\t\tarray( $this, 'admin_page_output' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Admin page output callback.\r\n-\t *\u002F\r\n-\tpublic function admin_page_output() {\r\n-\t\t$instructor_id = self::resolve_instructor_id_for_request( array() );\r\n-\r\n-\t\techo '\u003Cdiv class=\"wrap\" id=\"lp-enrolled-students\">';\r\n-\t\techo '\u003Ch1 class=\"wp-heading-inline\">' . esc_html__( 'Enrolled Students', 'learnpress' ) . '\u003C\u002Fh1>';\r\n-\t\tdo_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', $instructor_id );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_enrolled_students';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render initial layout with TemplateAJAX::load_content_via_ajax().\r\n-\t *\r\n-\t * @param int $instructor_id 0 for Admin (all), user ID for Instructor.\r\n-\t *\u002F\r\n-\tpublic function enrolled_students_layout( $instructor_id = 0 ) {\r\n-\t\ttry {\r\n-\t\t\t$page_current = '';\r\n-\t\t\tif ( function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\t$wp_screen = get_current_screen();\r\n-\t\t\t\tif ( $wp_screen ) {\r\n-\t\t\t\t\t\u002F\u002F Page on the Admin screen.\r\n-\t\t\t\t\tif ( $wp_screen->id === 'learnpress_page_lp-enrolled-students' ) {\r\n-\t\t\t\t\t\t$page_current = 'learnpress_page_lp-enrolled-students';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Enqueue styles — lp-enrolled-students-table CSS is loaded via admin.css\u002Ffrontend.css import.\r\n-\t\t\t\u002F\u002F Build toolbar HTML (outside AJAX so it persists across reloads).\r\n-\t\t\t$instructor_id = self::resolve_instructor_id_for_request(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'instructor_id' => $instructor_id,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$args = array(\r\n-\t\t\t\t'id_url'                => 'lp-enrolled-students',\r\n-\t\t\t\t'instructor_id'         => (int) $instructor_id,\r\n-\t\t\t\t'course_id'             => abs( LP_Helper::sanitize_params_submitted( $_GET['course_id'] ?? 0, 'int' ) ),\r\n-\t\t\t\t'course_name'           => LP_Helper::sanitize_params_submitted( $_GET['course_name'] ?? '' ),\r\n-\t\t\t\t'paged'                 => 1,\r\n-\t\t\t\t'search'                => LP_Helper::sanitize_params_submitted( $_GET['search'] ?? '' ),\r\n-\t\t\t\t'start_date'            => self::sanitize_date_filter( $_GET['start_date'] ?? '' ),\r\n-\t\t\t\t'end_date'              => self::sanitize_date_filter( $_GET['end_date'] ?? '' ),\r\n-\t\t\t\t'enableUpdateParamsUrl' => false,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$call_back = array(\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'render_enrolled_students',\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-students-enrolled-layout %s\">',\r\n-\t\t\t\t\t$page_current\r\n-\t\t\t\t),\r\n-\t\t\t\t'toolbar'  => $this->html_toolbar(),\r\n-\t\t\t\t'table'    => TemplateAJAX::load_content_via_ajax( $args, $call_back ),\r\n-\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\tTemplate::print_message( $e->getMessage(), 'error' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Static render method called by AJAX — returns stdClass{ content }.\r\n-\t *\r\n-\t * Permission check: Admin=full, Instructor=own courses only.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return stdClass\r\n-\t *\u002F\r\n-\tpublic static function render_enrolled_students( array $data ): stdClass {\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Check permission\r\n-\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t     && ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view enrolled students.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$instructor_id = self::resolve_instructor_id_for_request( $data );\r\n-\r\n-\t\t\t$course_id   = abs( LP_Helper::sanitize_params_submitted( $data['course_id'] ?? 0, 'int' ) );\r\n-\t\t\t$paged       = max( 1, abs( LP_Helper::sanitize_params_submitted( $data['paged'] ?? 1, 'int' ) ) );\r\n-\t\t\t$course_name = LP_Helper::sanitize_params_submitted( $data['course_name'] ?? '' );\r\n-\t\t\t$search      = LP_Helper::sanitize_params_submitted( $data['search'] ?? '' );\r\n-\t\t\t$start_date  = self::sanitize_date_filter( $data['start_date'] ?? '' );\r\n-\t\t\t$end_date    = self::sanitize_date_filter( $data['end_date'] ?? '' );\r\n-\t\t\t$per_page    = self::PER_PAGE;\r\n-\r\n-\t\t\t\u002F\u002F Normalize date range if request is reversed.\r\n-\t\t\tif ( $start_date && $end_date && strtotime( $start_date ) > strtotime( $end_date ) ) {\r\n-\t\t\t\t$tmp        = $start_date;\r\n-\t\t\t\t$start_date = $end_date;\r\n-\t\t\t\t$end_date   = $tmp;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_db_user_items    = UserItemsDB::getInstance();\r\n-\t\t\t$filter              = new UserItemsFilter();\r\n-\t\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t\t$filter->statues     = array( 'enrolled', 'finished' );\r\n-\t\t\t$filter->limit       = $per_page;\r\n-\t\t\t$filter->page        = $paged;\r\n-\t\t\t$filter->order_by    = 'ui.start_time';\r\n-\t\t\t$filter->order       = 'DESC';\r\n-\t\t\t$filter->field_count = 'ui.user_item_id';\r\n-\t\t\t$filter->only_fields = array(\r\n-\t\t\t\t'ui.user_item_id',\r\n-\t\t\t\t'ui.user_id',\r\n-\t\t\t\t'ui.item_id',\r\n-\t\t\t\t'ui.start_time',\r\n-\t\t\t\t'ui.status',\r\n-\t\t\t\t'ui.graduation',\r\n-\t\t\t\t'u.display_name',\r\n-\t\t\t\t'u.user_email',\r\n-\t\t\t\t'p.post_title AS course_title',\r\n-\t\t\t);\r\n-\t\t\t$filter->join[]      = \"JOIN {$lp_db_user_items->wpdb->posts} p ON ui.item_id = p.ID\";\r\n-\t\t\t$filter->join[]      = \"JOIN {$lp_db_user_items->wpdb->users} u ON ui.user_id = u.ID\";\r\n-\r\n-\t\t\tif ( $instructor_id > 0 ) {\r\n-\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare( 'AND p.post_author = %d', $instructor_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $course_id > 0 ) {\r\n-\t\t\t\t$filter->item_id = $course_id;\r\n-\t\t\t} elseif ( ! empty( $course_name ) ) {\r\n-\t\t\t\t$course_name_like = '%' . $lp_db_user_items->wpdb->esc_like( $course_name ) . '%';\r\n-\t\t\t\t$filter->where[]  = $lp_db_user_items->wpdb->prepare(\r\n-\t\t\t\t\t'AND p.post_title LIKE %s',\r\n-\t\t\t\t\t$course_name_like\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $search ) ) {\r\n-\t\t\t\t$search_like     = '%' . $lp_db_user_items->wpdb->esc_like( $search ) . '%';\r\n-\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\r\n-\t\t\t\t\t'AND ( u.display_name LIKE %s OR u.user_email LIKE %s )',\r\n-\t\t\t\t\t$search_like,\r\n-\t\t\t\t\t$search_like\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $start_date ) ) {\r\n-\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\r\n-\t\t\t\t\t'AND ui.start_time >= %s',\r\n-\t\t\t\t\t$start_date . ' 00:00:00'\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $end_date ) ) {\r\n-\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\r\n-\t\t\t\t\t'AND ui.start_time \u003C= %s',\r\n-\t\t\t\t\t$end_date . ' 23:59:59'\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$rows       = $lp_db_user_items->get_user_items( $filter, $total_rows );\r\n-\t\t\tif ( ! is_array( $rows ) ) {\r\n-\t\t\t\t$rows = array();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Build HTML.\r\n-\t\t\t$html = self::instance()->html_table(\r\n-\t\t\t\t$rows,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'total'              => $total_rows,\r\n-\t\t\t\t\t'paged'              => $paged,\r\n-\t\t\t\t\t'per_page'           => $per_page,\r\n-\t\t\t\t\t'students-of-course' => $course_id,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content->content = $html;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check whether user can view enrolled students content.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tprivate static function can_view_enrolled_students( int $user_id = 0 ): bool {\r\n-\t\tif ( $user_id \u003C 1 ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\tif ( $user_id \u003C 1 ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$user_model = UserModel::find( $user_id, true );\r\n-\t\tif ( ! $user_model instanceof UserModel ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $user_model->is_instructor();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Resolve instructor_id from request by permission.\r\n-\t * Admin can keep requested instructor_id; instructor is forced to self.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tprivate static function resolve_instructor_id_for_request( array $data ): int {\r\n-\t\t$current_user_id = get_current_user_id();\r\n-\t\tif ( ! self::can_view_enrolled_students( $current_user_id ) ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$is_admin = user_can( $current_user_id, UserModel::ROLE_ADMINISTRATOR );\r\n-\t\tif ( $is_admin ) {\r\n-\t\t\treturn max( 0, abs( LP_Helper::sanitize_params_submitted( $data['instructor_id'] ?? 0, 'int' ) ) );\r\n-\t\t}\r\n-\r\n-\t\treturn $current_user_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML builder: toolbar (course filter, search).\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_toolbar(): string {\r\n-\t\t$courses = array();\r\n-\r\n-\t\t$data_get        = LP_Helper::sanitize_params_submitted( $_GET );\r\n-\t\t$selected_course = abs( LP_Helper::sanitize_params_submitted( $data_get['course_id'] ?? 0, 'int' ) );\r\n-\t\t$search_course   = LP_Helper::sanitize_params_submitted( $data_get['course_name'] ?? '' );\r\n-\t\t$search_student  = LP_Helper::sanitize_params_submitted( $data_get['search'] ?? '' );\r\n-\t\t$search_start    = self::sanitize_date_filter( $data_get['start_date'] ?? '' );\r\n-\t\t$search_end      = self::sanitize_date_filter( $data_get['end_date'] ?? '' );\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'                => '\u003Cform class=\"lp-enrolled-students-table-toolbar lp-enrolled-students-form\" onsubmit=\"return false;\">',\r\n-\t\t\t'filter-row-open'     => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__row lp-enrolled-students-table-toolbar__row--filters\">',\r\n-\t\t\t'course-field-open'   => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field\">',\r\n-\t\t\t'course-label'        => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-course-name\">' . esc_html__( 'Course Filter', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'course-input'        => '\u003Cinput id=\"lp-enrolled-filter-course-name\" class=\"lp-enrolled-filter-course-name lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"course_name\" list=\"lp-enrolled-course-list\" value=\"' . esc_attr( $search_course ) . '\" placeholder=\"' . esc_attr__( 'Search course...', 'learnpress' ) . '\">',\r\n-\t\t\t'course-field-close'  => '\u003C\u002Fdiv>',\r\n-\t\t\t'student-field-open'  => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--student\">',\r\n-\t\t\t'student-label'       => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-search-input\">' . esc_html__( 'Student', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'student-input'       => '\u003Cinput id=\"lp-enrolled-search-input\" class=\"lp-enrolled-search-input lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"search\" value=\"' . esc_attr( $search_student ) . '\" placeholder=\"' . esc_attr__( 'Enter student name or email', 'learnpress' ) . '\">',\r\n-\t\t\t'student-field-close' => '\u003C\u002Fdiv>',\r\n-\t\t\t'start-field-open'    => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\r\n-\t\t\t'start-label'         => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-start-date\">' . esc_html__( 'Start Date', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'start-input'         => '\u003Cinput id=\"lp-enrolled-filter-start-date\" class=\"lp-enrolled-filter-start-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"start_date\" value=\"' . esc_attr( $search_start ) . '\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\r\n-\t\t\t'start-field-close'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'end-field-open'      => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\r\n-\t\t\t'end-label'           => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-end-date\">' . esc_html__( 'End date', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'end-input'           => '\u003Cinput id=\"lp-enrolled-filter-end-date\" class=\"lp-enrolled-filter-end-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"end_date\" value=\"' . esc_attr( $search_end ) . '\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\r\n-\t\t\t'end-field-close'     => '\u003C\u002Fdiv>',\r\n-\t\t\t'filter-row-close'    => '\u003C\u002Fdiv>',\r\n-\t\t\t'actions-open'        => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__actions\">',\r\n-\t\t\t'search-btn'          => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-search\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Search', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'clear-btn'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-clear\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Clear Filter', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'actions-close'       => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-end'            => '\u003C\u002Fform>',\r\n-\t\t);\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftoolbar\u002Fsection',\r\n-\t\t\t$section,\r\n-\t\t\t$courses,\r\n-\t\t\t$selected_course,\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render toolbar used inside View Students modal.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_toolbar_modal(): string {\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'                => '\u003Cform class=\"lp-enrolled-students-table-toolbar lp-enrolled-students-table-toolbar--modal lp-enrolled-students-form lp-enrolled-students-form--modal\" id=\"lp-modal-enrolled-form\" onsubmit=\"return false;\">',\r\n-\t\t\t'filter-row-open'     => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__row lp-enrolled-students-table-toolbar__row--filters\">',\r\n-\t\t\t'student-field-open'  => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--student\">',\r\n-\t\t\t'student-label'       => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-search-input\">' . esc_html__( 'Student', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'student-input'       => '\u003Cinput id=\"lp-modal-enrolled-search-input\" class=\"lp-enrolled-search-input lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"search\" placeholder=\"' . esc_attr__( 'Enter student name or email', 'learnpress' ) . '\">',\r\n-\t\t\t'student-field-close' => '\u003C\u002Fdiv>',\r\n-\t\t\t'start-field-open'    => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\r\n-\t\t\t'start-label'         => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-filter-start-date\">' . esc_html__( 'Start Date', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'start-input'         => '\u003Cinput id=\"lp-modal-enrolled-filter-start-date\" class=\"lp-enrolled-filter-start-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"start_date\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\r\n-\t\t\t'start-field-close'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'end-field-open'      => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\r\n-\t\t\t'end-label'           => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-filter-end-date\">' . esc_html__( 'End Date', 'learnpress' ) . '\u003C\u002Flabel>',\r\n-\t\t\t'end-input'           => '\u003Cinput id=\"lp-modal-enrolled-filter-end-date\" class=\"lp-enrolled-filter-end-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"end_date\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\r\n-\t\t\t'end-field-close'     => '\u003C\u002Fdiv>',\r\n-\t\t\t'filter-row-close'    => '\u003C\u002Fdiv>',\r\n-\t\t\t'actions-open'        => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__actions\">',\r\n-\t\t\t'search-btn'          => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-search-modal\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Search', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'clear-btn'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-clear-modal\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Clear Filter', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'actions-close'       => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-end'            => '\u003C\u002Fform>',\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render lp-target layout used in View Students modal.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_modal_students_target(): string {\r\n-\t\t$args = array(\r\n-\t\t\t'id_url'                  => 'lp-modal-enrolled-students',\r\n-\t\t\t'course_id'               => 0,\r\n-\t\t\t'paged'                   => 1,\r\n-\t\t\t'enableScrollToView'      => false,\r\n-\t\t\t'enableUpdateParamsUrl'   => false,\r\n-\t\t\t'html_no_load_ajax_first' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"learn-press-message\" style=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t'width: 95%;',\r\n-\t\t\t\tesc_html__( 'Loading', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_enrolled_students',\r\n-\t\t);\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'     => '\u003Cdiv id=\"lp-modal-enrolled-wrap\">',\r\n-\t\t\t'target'   => TemplateAJAX::load_content_via_ajax( $args, $call_back ),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Print HTML template for modal toolbar.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function print_modal_toolbar_template() {\r\n-\r\n-\t\t$should_print = false;\r\n-\r\n-\t\tif ( is_admin() ) {\r\n-\t\t\t$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\r\n-\t\t\tif ( $screen && isset( $screen->id ) && $screen->id === 'edit-' . LP_COURSE_CPT ) {\r\n-\t\t\t\t$should_print = true;\r\n-\t\t\t}\r\n-\t\t} elseif ( class_exists( 'LP_Page_Controller' ) && defined( 'LP_PAGE_PROFILE' ) ) {\r\n-\t\t\t$should_print = LP_Page_Controller::page_current() === LP_PAGE_PROFILE;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $should_print ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cscript type=\"text\u002Fhtml\" id=\"lp-tmpl-enrolled-students-toolbar-modal\">';\r\n-\t\techo $this->html_toolbar_modal();\r\n-\t\techo '\u003C\u002Fscript>';\r\n-\r\n-\t\techo '\u003Cscript type=\"text\u002Fhtml\" id=\"lp-tmpl-enrolled-students-target-modal\">';\r\n-\t\techo $this->html_modal_students_target();\r\n-\t\techo '\u003C\u002Fscript>';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML builder: table wrapper.\r\n-\t *\r\n-\t * @param array $rows DB result rows.\r\n-\t * @param array $meta [ total, paged, per_page ].\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function html_table( array $rows, array $meta ): string {\r\n-\t\tif ( empty( $rows ) ) {\r\n-\t\t\t$section_empty = array(\r\n-\t\t\t\t'wrap'     => '\u003Cdiv class=\"lp-enrolled-students-table-wrap\">',\r\n-\t\t\t\t'empty'    => '\u003Cdiv class=\"lp-enrolled-empty\">\u003Cp>' . esc_html__( 'No students found.', 'learnpress' ) . '\u003C\u002Fp>\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t);\r\n-\t\t\t$section_empty = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fempty\u002Fsection',\r\n-\t\t\t\t$section_empty,\r\n-\t\t\t\t$rows,\r\n-\t\t\t\t$meta\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn Template::combine_components( $section_empty );\r\n-\t\t}\r\n-\r\n-\t\t$rows_html = array();\r\n-\r\n-\t\t$results_map = array();\r\n-\t\tforeach ( $rows as $item ) {\r\n-\t\t\t$userCourseModel = new UserCourseModel( $item );\r\n-\t\t\t$rows_html[]     = $this->html_student_row( $userCourseModel, $meta );\r\n-\t\t}\r\n-\t\t$rows_html = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Frows-html',\r\n-\t\t\t$rows_html,\r\n-\t\t\t$rows,\r\n-\t\t\t$results_map,\r\n-\t\t\t$meta\r\n-\t\t);\r\n-\r\n-\t\t$table_args           = array(\r\n-\t\t\t'class_table' => 'lp-enrolled-students-table',\r\n-\t\t\t'header'      => array(\r\n-\t\t\t\t'student'  => array(\r\n-\t\t\t\t\t'class' => 'lp-col-student',\r\n-\t\t\t\t\t'title' => esc_html__( 'Student', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'course'   => array(\r\n-\t\t\t\t\t'class' => 'lp-col-course',\r\n-\t\t\t\t\t'title' => esc_html__( 'Course', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'date'     => array(\r\n-\t\t\t\t\t'class' => 'lp-col-date',\r\n-\t\t\t\t\t'title' => esc_html__( 'Enrolled Date', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'progress' => array(\r\n-\t\t\t\t\t'class' => 'lp-col-progress',\r\n-\t\t\t\t\t'title' => esc_html__( 'Progress', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'status'   => array(\r\n-\t\t\t\t\t'class' => 'lp-col-status',\r\n-\t\t\t\t\t'title' => esc_html__( 'Status', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'body'        => array(\r\n-\t\t\t\t'rows_html' => Template::combine_components( $rows_html ),\r\n-\t\t\t),\r\n-\t\t);\r\n-\t\t$section_footer       = array(\r\n-\t\t\t'wrap'        => '\u003Cdiv class=\"lp-enrolled-students-table-footer\">',\r\n-\t\t\t'page_result' => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-enrolled-students-table-footer__count\">%s\u003C\u002Fspan>',\r\n-\t\t\t\tTableListTemplate::instance()->html_page_result(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'paged'      => $meta['paged'],\r\n-\t\t\t\t\t\t'per_page'   => $meta['per_page'],\r\n-\t\t\t\t\t\t'total_rows' => $meta['total'],\r\n-\t\t\t\t\t\t'item_name'  => _n( 'student', 'students', $meta['total'], 'learnpress' ),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'pagination'  => $this->html_pagination( $meta['total'], $meta['paged'], $meta['per_page'] ),\r\n-\t\t\t'wrap-end'    => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\t\t$section_footer       = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Ffooter\u002Fsection',\r\n-\t\t\t$section_footer,\r\n-\t\t\t$rows,\r\n-\t\t\t$results_map,\r\n-\t\t\t$meta\r\n-\t\t);\r\n-\t\t$table_args['footer'] = Template::combine_components( $section_footer );\r\n-\t\t$table_args           = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fargs',\r\n-\t\t\t$table_args,\r\n-\t\t\t$rows,\r\n-\t\t\t$results_map,\r\n-\t\t\t$meta\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $meta['students-of-course'] ) ) {\r\n-\t\t\tunset( $table_args['header']['course'] ); \u002F\u002F Remove Course column if filtering by course, as it's redundant.\r\n-\t\t}\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-enrolled-students-table-wrap\">',\r\n-\t\t\t'table'    => TableListTemplate::instance()->html_table( $table_args ),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fsection',\r\n-\t\t\t$section,\r\n-\t\t\t$rows,\r\n-\t\t\t$results_map,\r\n-\t\t\t$meta\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML builder: single student row.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function html_student_row( UserCourseModel $userCourseModel, array $data = [] ): string {\r\n-\t\t\u002F\u002F Avatar initials.\r\n-\t\t$userModel = $userCourseModel->get_user_model();\r\n-\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$courseModel = $userCourseModel->get_course_model();\r\n-\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Progress.\r\n-\t\t$course_result = $userCourseModel->calculate_course_results();\r\n-\t\t$progress      = (float) ( $course_result['result'] ?? 0 );\r\n-\r\n-\t\t\u002F\u002F Status badge.\r\n-\t\t$graduation   = $userCourseModel->get_graduation();\r\n-\t\t$status_raw   = $graduation !== UserItemModel::GRADUATION_IN_PROGRESS\r\n-\t\t\t? $userCourseModel->get_graduation()\r\n-\t\t\t: $userCourseModel->get_status();\r\n-\t\t$status_label = ucfirst( str_replace( array( '-', '_' ), ' ', $status_raw ) );\r\n-\t\t$badge_class  = 'lp-badge--' . sanitize_html_class( $status_raw );\r\n-\r\n-\t\t\u002F\u002F Date.\r\n-\t\t$date = UserCourseTemplate::instance()->html_start_date_time( $userCourseModel, false );\r\n-\r\n-\t\t$user_display_name = $userModel->get_display_name();\r\n-\t\tif ( empty( $user_display_name ) ) {\r\n-\t\t\t$user_display_name = $userModel->get_username();\r\n-\t\t}\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'row'                 => '\u003Ctr>',\r\n-\t\t\t'student-cell-open'   => '\u003Ctd class=\"lp-cell-student\">',\r\n-\t\t\t'avatar'              => SingleInstructorTemplate::instance()->html_avatar( $userModel ),\r\n-\t\t\t'meta-open'           => '\u003Cdiv class=\"lp-meta\">',\r\n-\t\t\t'name'                => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-name\">%s\u003C\u002Fspan>',\r\n-\t\t\t\tesc_html( $user_display_name )\r\n-\t\t\t),\r\n-\t\t\t'email'               => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-email\">%s\u003C\u002Fspan>',\r\n-\t\t\t\tesc_html( $userModel->get_email() )\r\n-\t\t\t),\r\n-\t\t\t'meta-close'          => '\u003C\u002Fdiv>',\r\n-\t\t\t'student-cell-close'  => '\u003C\u002Ftd>',\r\n-\t\t\t'course-cell'         => sprintf(\r\n-\t\t\t\t'\u003Ctd class=\"lp-cell-course\">\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Ftd>',\r\n-\t\t\t\tesc_url_raw( $courseModel->get_permalink() ),\r\n-\t\t\t\t$courseModel->get_title()\r\n-\t\t\t),\r\n-\t\t\t'date-cell'           => sprintf(\r\n-\t\t\t\t'\u003Ctd class=\"lp-cell-date\">%s\u003C\u002Ftd>',\r\n-\t\t\t\twp_kses_post( $date )\r\n-\t\t\t),\r\n-\t\t\t'progress-cell-open'  => '\u003Ctd class=\"lp-cell-progress\">',\r\n-\t\t\t'progress-bar'        => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-progress-bar\">\u003Cspan class=\"\" style=\"width: %d%%;\">\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\t$progress\r\n-\t\t\t),\r\n-\t\t\t'progress-text'       => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-progress-text\">%d%%\u003C\u002Fspan>',\r\n-\t\t\t\t$progress\r\n-\t\t\t),\r\n-\t\t\t'progress-cell-close' => '\u003C\u002Ftd>',\r\n-\t\t\t'status-cell-open'    => '\u003Ctd class=\"lp-cell-status\">',\r\n-\t\t\t'status-badge'        => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-badge %s\">%s\u003C\u002Fspan>',\r\n-\t\t\t\tesc_attr( $badge_class ),\r\n-\t\t\t\tesc_html( $status_label )\r\n-\t\t\t),\r\n-\t\t\t'status-cell-close'   => '\u003C\u002Ftd>',\r\n-\t\t\t'row-end'             => '\u003C\u002Ftr>',\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $data['students-of-course'] ) ) {\r\n-\t\t\tunset( $section['course-cell'] ); \u002F\u002F Remove Course cell if filtering by course, as it's redundant.\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Frow\u002Fsection',\r\n-\t\t\t$section,\r\n-\t\t\t$userCourseModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML builder: pagination.\r\n-\t *\r\n-\t * Uses .page-numbers class for loadAJAX.js compatibility.\r\n-\t *\r\n-\t * @param int $total\r\n-\t * @param int $paged\r\n-\t * @param int $per_page\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate function html_pagination( int $total, int $paged, int $per_page ): string {\r\n-\t\t$total_pages = max( 1, ceil( $total \u002F $per_page ) );\r\n-\r\n-\t\t$pagination_items = Template::instance()->html_pagination(\r\n-\t\t\tarray(\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t'paged'       => $paged,\r\n-\t\t\t\t'wrapper'     => array(\r\n-\t\t\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination lp-pagination\">' => '\u003C\u002Fnav>',\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$pagination_items = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Fpagination\u002Fitems',\r\n-\t\t\t$pagination_items,\r\n-\t\t\t$total,\r\n-\t\t\t$paged,\r\n-\t\t\t$per_page,\r\n-\t\t\t$total_pages\r\n-\t\t);\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'       => '\u003Cdiv class=\"lp-enrolled-students-table-footer__pagination\">',\r\n-\t\t\t'pagination' => $pagination_items,\r\n-\t\t\t'wrap-end'   => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Fpagination\u002Fsection',\r\n-\t\t\t$section,\r\n-\t\t\t$total,\r\n-\t\t\t$paged,\r\n-\t\t\t$per_page,\r\n-\t\t\t$total_pages\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sanitize date filter value in Y-m-d format.\r\n-\t *\r\n-\t * @param string $date\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tprivate static function sanitize_date_filter( $date ): string {\r\n-\t\tif ( ! is_scalar( $date ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$date = LP_Helper::sanitize_params_submitted( (string) $date );\r\n-\t\tif ( preg_match( '\u002F^\\d{4}-\\d{2}-\\d{2}$\u002F', $date ) ) {\r\n-\t\t\treturn $date;\r\n-\t\t}\r\n-\r\n-\t\treturn '';\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin;\n+\n+use Exception;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Databases\\UserItemsDB;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\Table\\TableListTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+use LP_Debug;\n+use LP_Helper;\n+use LP_Page_Controller;\n+use stdClass;\n+use Throwable;\n+\n+\u002F**\n+ * Template Admin List Students Enrolled.\n+ *\n+ * Displays enrolled students for Admin (all courses) and Instructor (own courses only).\n+ * Provides WP Admin submenu + Frontend profile tab.\n+ *\n+ * @since 4.3.3\n+ * @version 1.0.0\n+ *\u002F\n+class AdminListStudentsEnrolled {\n+\tuse Singleton;\n+\n+\tconst PER_PAGE = 10;\n+\n+\tpublic function init() {\n+\n+\t\t\u002F\u002F 1. Register render hook for both admin + frontend profile.\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', array( $this, 'enrolled_students_layout' ) );\n+\t\t\u002F\u002F 2. Whitelist AJAX callback.\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\n+\t\t\u002F\u002F 4. Render a modal toolbar template from PHP (used by JS modal).\n+\t\tadd_action( 'admin_footer', array( $this, 'print_modal_toolbar_template' ) );\n+\t\tadd_action( 'wp_footer', array( $this, 'print_modal_toolbar_template' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Admin page output callback.\n+\t *\u002F\n+\tpublic function admin_page_output() {\n+\t\t$instructor_id = self::resolve_instructor_id_for_request( array() );\n+\n+\t\techo '\u003Cdiv class=\"wrap\" id=\"lp-enrolled-students\">';\n+\t\techo '\u003Ch1 class=\"wp-heading-inline\">' . esc_html__( 'Enrolled Students', 'learnpress' ) . '\u003C\u002Fh1>';\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', $instructor_id );\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_enrolled_students';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render initial layout with TemplateAJAX::load_content_via_ajax().\n+\t *\n+\t * @param int $instructor_id 0 for Admin (all), user ID for Instructor.\n+\t *\u002F\n+\tpublic function enrolled_students_layout( $instructor_id = 0 ) {\n+\t\ttry {\n+\t\t\t$page_current = '';\n+\t\t\tif ( function_exists( 'get_current_screen' ) ) {\n+\t\t\t\t$wp_screen = get_current_screen();\n+\t\t\t\tif ( $wp_screen ) {\n+\t\t\t\t\t\u002F\u002F Page on the Admin screen.\n+\t\t\t\t\tif ( $wp_screen->id === 'learnpress_page_lp-enrolled-students' ) {\n+\t\t\t\t\t\t$page_current = 'learnpress_page_lp-enrolled-students';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Enqueue styles — lp-enrolled-students-table CSS is loaded via admin.css\u002Ffrontend.css import.\n+\t\t\t\u002F\u002F Build toolbar HTML (outside AJAX so it persists across reloads).\n+\t\t\t$instructor_id = self::resolve_instructor_id_for_request(\n+\t\t\t\tarray(\n+\t\t\t\t\t'instructor_id' => $instructor_id,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$args = array(\n+\t\t\t\t'id_url'                => 'lp-enrolled-students',\n+\t\t\t\t'instructor_id'         => (int) $instructor_id,\n+\t\t\t\t'course_id'             => abs( LP_Helper::sanitize_params_submitted( $_GET['course_id'] ?? 0, 'int' ) ),\n+\t\t\t\t'course_name'           => LP_Helper::sanitize_params_submitted( $_GET['course_name'] ?? '' ),\n+\t\t\t\t'paged'                 => 1,\n+\t\t\t\t'search'                => LP_Helper::sanitize_params_submitted( $_GET['search'] ?? '' ),\n+\t\t\t\t'start_date'            => self::sanitize_date_filter( $_GET['start_date'] ?? '' ),\n+\t\t\t\t'end_date'              => self::sanitize_date_filter( $_GET['end_date'] ?? '' ),\n+\t\t\t\t'enableUpdateParamsUrl' => false,\n+\t\t\t);\n+\n+\t\t\t$call_back = array(\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'render_enrolled_students',\n+\t\t\t);\n+\n+\t\t\t$section = [\n+\t\t\t\t'wrap'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-students-enrolled-layout %s\">',\n+\t\t\t\t\t$page_current\n+\t\t\t\t),\n+\t\t\t\t'toolbar'  => $this->html_toolbar(),\n+\t\t\t\t'table'    => TemplateAJAX::load_content_via_ajax( $args, $call_back ),\n+\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\techo Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t\tTemplate::print_message( $e->getMessage(), 'error' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Static render method called by AJAX — returns stdClass{ content }.\n+\t *\n+\t * Permission check: Admin=full, Instructor=own courses only.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return stdClass\n+\t *\u002F\n+\tpublic static function render_enrolled_students( array $data ): stdClass {\n+\t\t$content          = new stdClass();\n+\t\t$content->content = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Check permission\n+\t\t\tif ( ! current_user_can( UserModel::ROLE_ADMINISTRATOR )\n+\t\t\t     && ! current_user_can( UserModel::ROLE_INSTRUCTOR ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'You do not have permission to view enrolled students.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$instructor_id = self::resolve_instructor_id_for_request( $data );\n+\n+\t\t\t$course_id   = abs( LP_Helper::sanitize_params_submitted( $data['course_id'] ?? 0, 'int' ) );\n+\t\t\t$paged       = max( 1, abs( LP_Helper::sanitize_params_submitted( $data['paged'] ?? 1, 'int' ) ) );\n+\t\t\t$course_name = LP_Helper::sanitize_params_submitted( $data['course_name'] ?? '' );\n+\t\t\t$search      = LP_Helper::sanitize_params_submitted( $data['search'] ?? '' );\n+\t\t\t$start_date  = self::sanitize_date_filter( $data['start_date'] ?? '' );\n+\t\t\t$end_date    = self::sanitize_date_filter( $data['end_date'] ?? '' );\n+\t\t\t$per_page    = self::PER_PAGE;\n+\n+\t\t\t\u002F\u002F Normalize date range if request is reversed.\n+\t\t\tif ( $start_date && $end_date && strtotime( $start_date ) > strtotime( $end_date ) ) {\n+\t\t\t\t$tmp        = $start_date;\n+\t\t\t\t$start_date = $end_date;\n+\t\t\t\t$end_date   = $tmp;\n+\t\t\t}\n+\n+\t\t\t$lp_db_user_items    = UserItemsDB::getInstance();\n+\t\t\t$filter              = new UserItemsFilter();\n+\t\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t\t$filter->statues     = array( 'enrolled', 'finished' );\n+\t\t\t$filter->limit       = $per_page;\n+\t\t\t$filter->page        = $paged;\n+\t\t\t$filter->order_by    = 'ui.start_time';\n+\t\t\t$filter->order       = 'DESC';\n+\t\t\t$filter->field_count = 'ui.user_item_id';\n+\t\t\t$filter->only_fields = array(\n+\t\t\t\t'ui.user_item_id',\n+\t\t\t\t'ui.user_id',\n+\t\t\t\t'ui.item_id',\n+\t\t\t\t'ui.start_time',\n+\t\t\t\t'ui.status',\n+\t\t\t\t'ui.graduation',\n+\t\t\t\t'u.display_name',\n+\t\t\t\t'u.user_email',\n+\t\t\t\t'p.post_title AS course_title',\n+\t\t\t);\n+\t\t\t$filter->join[]      = \"JOIN {$lp_db_user_items->wpdb->posts} p ON ui.item_id = p.ID\";\n+\t\t\t$filter->join[]      = \"JOIN {$lp_db_user_items->wpdb->users} u ON ui.user_id = u.ID\";\n+\n+\t\t\tif ( $instructor_id > 0 ) {\n+\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare( 'AND p.post_author = %d', $instructor_id );\n+\t\t\t}\n+\n+\t\t\tif ( $course_id > 0 ) {\n+\t\t\t\t$filter->item_id = $course_id;\n+\t\t\t} elseif ( ! empty( $course_name ) ) {\n+\t\t\t\t$course_name_like = '%' . $lp_db_user_items->wpdb->esc_like( $course_name ) . '%';\n+\t\t\t\t$filter->where[]  = $lp_db_user_items->wpdb->prepare(\n+\t\t\t\t\t'AND p.post_title LIKE %s',\n+\t\t\t\t\t$course_name_like\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $search ) ) {\n+\t\t\t\t$search_like     = '%' . $lp_db_user_items->wpdb->esc_like( $search ) . '%';\n+\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\n+\t\t\t\t\t'AND ( u.display_name LIKE %s OR u.user_email LIKE %s )',\n+\t\t\t\t\t$search_like,\n+\t\t\t\t\t$search_like\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $start_date ) ) {\n+\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\n+\t\t\t\t\t'AND ui.start_time >= %s',\n+\t\t\t\t\t$start_date . ' 00:00:00'\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $end_date ) ) {\n+\t\t\t\t$filter->where[] = $lp_db_user_items->wpdb->prepare(\n+\t\t\t\t\t'AND ui.start_time \u003C= %s',\n+\t\t\t\t\t$end_date . ' 23:59:59'\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$total_rows = 0;\n+\t\t\t$rows       = $lp_db_user_items->get_user_items( $filter, $total_rows );\n+\t\t\tif ( ! is_array( $rows ) ) {\n+\t\t\t\t$rows = array();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Build HTML.\n+\t\t\t$html = self::instance()->html_table(\n+\t\t\t\t$rows,\n+\t\t\t\tarray(\n+\t\t\t\t\t'total'              => $total_rows,\n+\t\t\t\t\t'paged'              => $paged,\n+\t\t\t\t\t'per_page'           => $per_page,\n+\t\t\t\t\t'students-of-course' => $course_id,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$content->content = $html;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Check whether user can view enrolled students content.\n+\t *\n+\t * @param int $user_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tprivate static function can_view_enrolled_students( int $user_id = 0 ): bool {\n+\t\tif ( $user_id \u003C 1 ) {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t}\n+\n+\t\tif ( $user_id \u003C 1 ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$user_model = UserModel::find( $user_id, true );\n+\t\tif ( ! $user_model instanceof UserModel ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $user_model->is_instructor();\n+\t}\n+\n+\t\u002F**\n+\t * Resolve instructor_id from request by permission.\n+\t * Admin can keep requested instructor_id; instructor is forced to self.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tprivate static function resolve_instructor_id_for_request( array $data ): int {\n+\t\t$current_user_id = get_current_user_id();\n+\t\tif ( ! self::can_view_enrolled_students( $current_user_id ) ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$is_admin = user_can( $current_user_id, UserModel::ROLE_ADMINISTRATOR );\n+\t\tif ( $is_admin ) {\n+\t\t\treturn max( 0, abs( LP_Helper::sanitize_params_submitted( $data['instructor_id'] ?? 0, 'int' ) ) );\n+\t\t}\n+\n+\t\treturn $current_user_id;\n+\t}\n+\n+\t\u002F**\n+\t * HTML builder: toolbar (course filter, search).\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_toolbar(): string {\n+\t\t$courses = array();\n+\n+\t\t$data_get        = LP_Helper::sanitize_params_submitted( $_GET );\n+\t\t$selected_course = abs( LP_Helper::sanitize_params_submitted( $data_get['course_id'] ?? 0, 'int' ) );\n+\t\t$search_course   = LP_Helper::sanitize_params_submitted( $data_get['course_name'] ?? '' );\n+\t\t$search_student  = LP_Helper::sanitize_params_submitted( $data_get['search'] ?? '' );\n+\t\t$search_start    = self::sanitize_date_filter( $data_get['start_date'] ?? '' );\n+\t\t$search_end      = self::sanitize_date_filter( $data_get['end_date'] ?? '' );\n+\n+\t\t$section = array(\n+\t\t\t'wrap'                => '\u003Cform class=\"lp-enrolled-students-table-toolbar lp-enrolled-students-form\" onsubmit=\"return false;\">',\n+\t\t\t'filter-row-open'     => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__row lp-enrolled-students-table-toolbar__row--filters\">',\n+\t\t\t'course-field-open'   => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field\">',\n+\t\t\t'course-label'        => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-course-name\">' . esc_html__( 'Course Filter', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'course-input'        => '\u003Cinput id=\"lp-enrolled-filter-course-name\" class=\"lp-enrolled-filter-course-name lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"course_name\" list=\"lp-enrolled-course-list\" value=\"' . esc_attr( $search_course ) . '\" placeholder=\"' . esc_attr__( 'Search course...', 'learnpress' ) . '\">',\n+\t\t\t'course-field-close'  => '\u003C\u002Fdiv>',\n+\t\t\t'student-field-open'  => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--student\">',\n+\t\t\t'student-label'       => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-search-input\">' . esc_html__( 'Student', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'student-input'       => '\u003Cinput id=\"lp-enrolled-search-input\" class=\"lp-enrolled-search-input lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"search\" value=\"' . esc_attr( $search_student ) . '\" placeholder=\"' . esc_attr__( 'Enter student name or email', 'learnpress' ) . '\">',\n+\t\t\t'student-field-close' => '\u003C\u002Fdiv>',\n+\t\t\t'start-field-open'    => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\n+\t\t\t'start-label'         => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-start-date\">' . esc_html__( 'Start Date', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'start-input'         => '\u003Cinput id=\"lp-enrolled-filter-start-date\" class=\"lp-enrolled-filter-start-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"start_date\" value=\"' . esc_attr( $search_start ) . '\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\n+\t\t\t'start-field-close'   => '\u003C\u002Fdiv>',\n+\t\t\t'end-field-open'      => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\n+\t\t\t'end-label'           => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-enrolled-filter-end-date\">' . esc_html__( 'End date', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'end-input'           => '\u003Cinput id=\"lp-enrolled-filter-end-date\" class=\"lp-enrolled-filter-end-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"end_date\" value=\"' . esc_attr( $search_end ) . '\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\n+\t\t\t'end-field-close'     => '\u003C\u002Fdiv>',\n+\t\t\t'filter-row-close'    => '\u003C\u002Fdiv>',\n+\t\t\t'actions-open'        => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__actions\">',\n+\t\t\t'search-btn'          => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-search\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Search', 'learnpress' )\n+\t\t\t),\n+\t\t\t'clear-btn'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-clear\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Clear Filter', 'learnpress' )\n+\t\t\t),\n+\t\t\t'actions-close'       => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-end'            => '\u003C\u002Fform>',\n+\t\t);\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftoolbar\u002Fsection',\n+\t\t\t$section,\n+\t\t\t$courses,\n+\t\t\t$selected_course,\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render toolbar used inside View Students modal.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_toolbar_modal(): string {\n+\n+\t\t$section = array(\n+\t\t\t'wrap'                => '\u003Cform class=\"lp-enrolled-students-table-toolbar lp-enrolled-students-table-toolbar--modal lp-enrolled-students-form lp-enrolled-students-form--modal\" id=\"lp-modal-enrolled-form\" onsubmit=\"return false;\">',\n+\t\t\t'filter-row-open'     => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__row lp-enrolled-students-table-toolbar__row--filters\">',\n+\t\t\t'student-field-open'  => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--student\">',\n+\t\t\t'student-label'       => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-search-input\">' . esc_html__( 'Student', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'student-input'       => '\u003Cinput id=\"lp-modal-enrolled-search-input\" class=\"lp-enrolled-search-input lp-enrolled-students-table-toolbar__input\" type=\"text\" name=\"search\" placeholder=\"' . esc_attr__( 'Enter student name or email', 'learnpress' ) . '\">',\n+\t\t\t'student-field-close' => '\u003C\u002Fdiv>',\n+\t\t\t'start-field-open'    => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\n+\t\t\t'start-label'         => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-filter-start-date\">' . esc_html__( 'Start Date', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'start-input'         => '\u003Cinput id=\"lp-modal-enrolled-filter-start-date\" class=\"lp-enrolled-filter-start-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"start_date\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\n+\t\t\t'start-field-close'   => '\u003C\u002Fdiv>',\n+\t\t\t'end-field-open'      => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__field lp-enrolled-students-table-toolbar__field--date\">',\n+\t\t\t'end-label'           => '\u003Clabel class=\"lp-enrolled-students-table-toolbar__label\" for=\"lp-modal-enrolled-filter-end-date\">' . esc_html__( 'End Date', 'learnpress' ) . '\u003C\u002Flabel>',\n+\t\t\t'end-input'           => '\u003Cinput id=\"lp-modal-enrolled-filter-end-date\" class=\"lp-enrolled-filter-end-date lp-enrolled-students-table-toolbar__input\" type=\"date\" name=\"end_date\" placeholder=\"mm\u002Fdd\u002Fyyyy\">',\n+\t\t\t'end-field-close'     => '\u003C\u002Fdiv>',\n+\t\t\t'filter-row-close'    => '\u003C\u002Fdiv>',\n+\t\t\t'actions-open'        => '\u003Cdiv class=\"lp-enrolled-students-table-toolbar__actions\">',\n+\t\t\t'search-btn'          => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-search-modal\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Search', 'learnpress' )\n+\t\t\t),\n+\t\t\t'clear-btn'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-button lp-enrolled-btn-clear-modal\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Clear Filter', 'learnpress' )\n+\t\t\t),\n+\t\t\t'actions-close'       => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-end'            => '\u003C\u002Fform>',\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render lp-target layout used in View Students modal.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_modal_students_target(): string {\n+\t\t$args = array(\n+\t\t\t'id_url'                  => 'lp-modal-enrolled-students',\n+\t\t\t'course_id'               => 0,\n+\t\t\t'paged'                   => 1,\n+\t\t\t'enableScrollToView'      => false,\n+\t\t\t'enableUpdateParamsUrl'   => false,\n+\t\t\t'html_no_load_ajax_first' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"learn-press-message\" style=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t'width: 95%;',\n+\t\t\t\tesc_html__( 'Loading', 'learnpress' )\n+\t\t\t),\n+\t\t);\n+\n+\t\t$call_back = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_enrolled_students',\n+\t\t);\n+\n+\t\t$section = array(\n+\t\t\t'wrap'     => '\u003Cdiv id=\"lp-modal-enrolled-wrap\">',\n+\t\t\t'target'   => TemplateAJAX::load_content_via_ajax( $args, $call_back ),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Print HTML template for modal toolbar.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function print_modal_toolbar_template() {\n+\n+\t\t$should_print = false;\n+\n+\t\tif ( is_admin() ) {\n+\t\t\t$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;\n+\t\t\tif ( $screen && isset( $screen->id ) && $screen->id === 'edit-' . LP_COURSE_CPT ) {\n+\t\t\t\t$should_print = true;\n+\t\t\t}\n+\t\t} elseif ( class_exists( 'LP_Page_Controller' ) && defined( 'LP_PAGE_PROFILE' ) ) {\n+\t\t\t$should_print = LP_Page_Controller::page_current() === LP_PAGE_PROFILE;\n+\t\t}\n+\n+\t\tif ( ! $should_print ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo '\u003Cscript type=\"text\u002Fhtml\" id=\"lp-tmpl-enrolled-students-toolbar-modal\">';\n+\t\techo $this->html_toolbar_modal();\n+\t\techo '\u003C\u002Fscript>';\n+\n+\t\techo '\u003Cscript type=\"text\u002Fhtml\" id=\"lp-tmpl-enrolled-students-target-modal\">';\n+\t\techo $this->html_modal_students_target();\n+\t\techo '\u003C\u002Fscript>';\n+\t}\n+\n+\t\u002F**\n+\t * HTML builder: table wrapper.\n+\t *\n+\t * @param array $rows DB result rows.\n+\t * @param array $meta [ total, paged, per_page ].\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function html_table( array $rows, array $meta ): string {\n+\t\tif ( empty( $rows ) ) {\n+\t\t\t$section_empty = array(\n+\t\t\t\t'wrap'     => '\u003Cdiv class=\"lp-enrolled-students-table-wrap\">',\n+\t\t\t\t'empty'    => '\u003Cdiv class=\"lp-enrolled-empty\">\u003Cp>' . esc_html__( 'No students found.', 'learnpress' ) . '\u003C\u002Fp>\u003C\u002Fdiv>',\n+\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t\t);\n+\t\t\t$section_empty = apply_filters(\n+\t\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fempty\u002Fsection',\n+\t\t\t\t$section_empty,\n+\t\t\t\t$rows,\n+\t\t\t\t$meta\n+\t\t\t);\n+\n+\t\t\treturn Template::combine_components( $section_empty );\n+\t\t}\n+\n+\t\t$rows_html = array();\n+\n+\t\t$results_map = array();\n+\t\tforeach ( $rows as $item ) {\n+\t\t\t$userCourseModel = new UserCourseModel( $item );\n+\t\t\t$rows_html[]     = $this->html_student_row( $userCourseModel, $meta );\n+\t\t}\n+\t\t$rows_html = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Frows-html',\n+\t\t\t$rows_html,\n+\t\t\t$rows,\n+\t\t\t$results_map,\n+\t\t\t$meta\n+\t\t);\n+\n+\t\t$table_args           = array(\n+\t\t\t'class_table' => 'lp-enrolled-students-table',\n+\t\t\t'header'      => array(\n+\t\t\t\t'student'  => array(\n+\t\t\t\t\t'class' => 'lp-col-student',\n+\t\t\t\t\t'title' => esc_html__( 'Student', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'course'   => array(\n+\t\t\t\t\t'class' => 'lp-col-course',\n+\t\t\t\t\t'title' => esc_html__( 'Course', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'date'     => array(\n+\t\t\t\t\t'class' => 'lp-col-date',\n+\t\t\t\t\t'title' => esc_html__( 'Enrolled Date', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'progress' => array(\n+\t\t\t\t\t'class' => 'lp-col-progress',\n+\t\t\t\t\t'title' => esc_html__( 'Progress', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'status'   => array(\n+\t\t\t\t\t'class' => 'lp-col-status',\n+\t\t\t\t\t'title' => esc_html__( 'Status', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'body'        => array(\n+\t\t\t\t'rows_html' => Template::combine_components( $rows_html ),\n+\t\t\t),\n+\t\t);\n+\t\t$section_footer       = array(\n+\t\t\t'wrap'        => '\u003Cdiv class=\"lp-enrolled-students-table-footer\">',\n+\t\t\t'page_result' => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-enrolled-students-table-footer__count\">%s\u003C\u002Fspan>',\n+\t\t\t\tTableListTemplate::instance()->html_page_result(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'paged'      => $meta['paged'],\n+\t\t\t\t\t\t'per_page'   => $meta['per_page'],\n+\t\t\t\t\t\t'total_rows' => $meta['total'],\n+\t\t\t\t\t\t'item_name'  => _n( 'student', 'students', $meta['total'], 'learnpress' ),\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'pagination'  => $this->html_pagination( $meta['total'], $meta['paged'], $meta['per_page'] ),\n+\t\t\t'wrap-end'    => '\u003C\u002Fdiv>',\n+\t\t);\n+\t\t$section_footer       = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Ffooter\u002Fsection',\n+\t\t\t$section_footer,\n+\t\t\t$rows,\n+\t\t\t$results_map,\n+\t\t\t$meta\n+\t\t);\n+\t\t$table_args['footer'] = Template::combine_components( $section_footer );\n+\t\t$table_args           = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fargs',\n+\t\t\t$table_args,\n+\t\t\t$rows,\n+\t\t\t$results_map,\n+\t\t\t$meta\n+\t\t);\n+\n+\t\tif ( ! empty( $meta['students-of-course'] ) ) {\n+\t\t\tunset( $table_args['header']['course'] ); \u002F\u002F Remove Course column if filtering by course, as it's redundant.\n+\t\t}\n+\n+\t\t$section = array(\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-enrolled-students-table-wrap\">',\n+\t\t\t'table'    => TableListTemplate::instance()->html_table( $table_args ),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t);\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Ftable\u002Fsection',\n+\t\t\t$section,\n+\t\t\t$rows,\n+\t\t\t$results_map,\n+\t\t\t$meta\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML builder: single student row.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function html_student_row( UserCourseModel $userCourseModel, array $data = [] ): string {\n+\t\t\u002F\u002F Avatar initials.\n+\t\t$userModel = $userCourseModel->get_user_model();\n+\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$courseModel = $userCourseModel->get_course_model();\n+\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t\u002F\u002F Progress.\n+\t\t$course_result = $userCourseModel->calculate_course_results();\n+\t\t$progress      = (float) ( $course_result['result'] ?? 0 );\n+\n+\t\t\u002F\u002F Status badge.\n+\t\t$graduation   = $userCourseModel->get_graduation();\n+\t\t$status_raw   = $graduation !== UserItemModel::GRADUATION_IN_PROGRESS\n+\t\t\t? $userCourseModel->get_graduation()\n+\t\t\t: $userCourseModel->get_status();\n+\t\t$status_label = ucfirst( str_replace( array( '-', '_' ), ' ', $status_raw ) );\n+\t\t$badge_class  = 'lp-badge--' . sanitize_html_class( $status_raw );\n+\n+\t\t\u002F\u002F Date.\n+\t\t$date = UserCourseTemplate::instance()->html_start_date_time( $userCourseModel, false );\n+\n+\t\t$user_display_name = $userModel->get_display_name();\n+\t\tif ( empty( $user_display_name ) ) {\n+\t\t\t$user_display_name = $userModel->get_username();\n+\t\t}\n+\n+\t\t$section = array(\n+\t\t\t'row'                 => '\u003Ctr>',\n+\t\t\t'student-cell-open'   => '\u003Ctd class=\"lp-cell-student\">',\n+\t\t\t'avatar'              => SingleInstructorTemplate::instance()->html_avatar( $userModel ),\n+\t\t\t'meta-open'           => '\u003Cdiv class=\"lp-meta\">',\n+\t\t\t'name'                => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-name\">%s\u003C\u002Fspan>',\n+\t\t\t\tesc_html( $user_display_name )\n+\t\t\t),\n+\t\t\t'email'               => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-email\">%s\u003C\u002Fspan>',\n+\t\t\t\tesc_html( $userModel->get_email() )\n+\t\t\t),\n+\t\t\t'meta-close'          => '\u003C\u002Fdiv>',\n+\t\t\t'student-cell-close'  => '\u003C\u002Ftd>',\n+\t\t\t'course-cell'         => sprintf(\n+\t\t\t\t'\u003Ctd class=\"lp-cell-course\">\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Ftd>',\n+\t\t\t\tesc_url_raw( $courseModel->get_permalink() ),\n+\t\t\t\t$courseModel->get_title()\n+\t\t\t),\n+\t\t\t'date-cell'           => sprintf(\n+\t\t\t\t'\u003Ctd class=\"lp-cell-date\">%s\u003C\u002Ftd>',\n+\t\t\t\twp_kses_post( $date )\n+\t\t\t),\n+\t\t\t'progress-cell-open'  => '\u003Ctd class=\"lp-cell-progress\">',\n+\t\t\t'progress-bar'        => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-progress-bar\">\u003Cspan class=\"\" style=\"width: %d%%;\">\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\t$progress\n+\t\t\t),\n+\t\t\t'progress-text'       => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-progress-text\">%d%%\u003C\u002Fspan>',\n+\t\t\t\t$progress\n+\t\t\t),\n+\t\t\t'progress-cell-close' => '\u003C\u002Ftd>',\n+\t\t\t'status-cell-open'    => '\u003Ctd class=\"lp-cell-status\">',\n+\t\t\t'status-badge'        => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-badge %s\">%s\u003C\u002Fspan>',\n+\t\t\t\tesc_attr( $badge_class ),\n+\t\t\t\tesc_html( $status_label )\n+\t\t\t),\n+\t\t\t'status-cell-close'   => '\u003C\u002Ftd>',\n+\t\t\t'row-end'             => '\u003C\u002Ftr>',\n+\t\t);\n+\n+\t\tif ( ! empty( $data['students-of-course'] ) ) {\n+\t\t\tunset( $section['course-cell'] ); \u002F\u002F Remove Course cell if filtering by course, as it's redundant.\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Frow\u002Fsection',\n+\t\t\t$section,\n+\t\t\t$userCourseModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML builder: pagination.\n+\t *\n+\t * Uses .page-numbers class for loadAJAX.js compatibility.\n+\t *\n+\t * @param int $total\n+\t * @param int $paged\n+\t * @param int $per_page\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate function html_pagination( int $total, int $paged, int $per_page ): string {\n+\t\t$total_pages = max( 1, ceil( $total \u002F $per_page ) );\n+\n+\t\t$pagination_items = Template::instance()->html_pagination(\n+\t\t\tarray(\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t'paged'       => $paged,\n+\t\t\t\t'wrapper'     => array(\n+\t\t\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination lp-pagination\">' => '\u003C\u002Fnav>',\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t\t$pagination_items = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Fpagination\u002Fitems',\n+\t\t\t$pagination_items,\n+\t\t\t$total,\n+\t\t\t$paged,\n+\t\t\t$per_page,\n+\t\t\t$total_pages\n+\t\t);\n+\n+\t\t$section = array(\n+\t\t\t'wrap'       => '\u003Cdiv class=\"lp-enrolled-students-table-footer__pagination\">',\n+\t\t\t'pagination' => $pagination_items,\n+\t\t\t'wrap-end'   => '\u003C\u002Fdiv>',\n+\t\t);\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fenrolled-students\u002Fpagination\u002Fsection',\n+\t\t\t$section,\n+\t\t\t$total,\n+\t\t\t$paged,\n+\t\t\t$per_page,\n+\t\t\t$total_pages\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Sanitize date filter value in Y-m-d format.\n+\t *\n+\t * @param string $date\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tprivate static function sanitize_date_filter( $date ): string {\n+\t\tif ( ! is_scalar( $date ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$date = LP_Helper::sanitize_params_submitted( (string) $date );\n+\t\tif ( preg_match( '\u002F^\\d{4}-\\d{2}-\\d{2}$\u002F', $date ) ) {\n+\t\t\treturn $date;\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAdminTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,176 +1,176 @@\n-\u003C?php\r\n-namespace LearnPress\\TemplateHooks\\Admin;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Template Show list items to select in popup.\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class AdminTemplate {\r\n-\t\u002F**\r\n-\t * HTML TinyMCE editor\r\n-\t *\r\n-\t * @param string $value\r\n-\t * @param string $id_name\r\n-\t * @param array $setting\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function editor_tinymce( string $value, string $id_name, array $setting = [] ): string {\r\n-\t\t$args = array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'media_buttons' => true,\r\n-\t\t\t\t'editor_class'  => 'lp-editor-tinymce',\r\n-\t\t\t\t'editor_height' => 210,\r\n-\t\t\t],\r\n-\t\t\t$setting\r\n-\t\t);\r\n-\r\n-\t\tob_start();\r\n-\t\twp_editor(\r\n-\t\t\t$value,\r\n-\t\t\t$id_name,\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for popup items to select.\r\n-\t *\r\n-\t * @param array $tabs [ [ key => label ] ].\r\n-\t * @param string $html_items\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_popup_items_to_select_clone( array $tabs, string $html_items ): string {\r\n-\t\t$html_tabs = '';\r\n-\t\t$i         = 0;\r\n-\t\tforeach ( $tabs as $key => $label ) {\r\n-\t\t\t$tab_active = '';\r\n-\t\t\tif ( $i === 0 ) {\r\n-\t\t\t\t$tab_active = 'active';\r\n-\t\t\t\t++$i;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_tabs .= sprintf(\r\n-\t\t\t\t'\u003Cli data-type=\"%s\" class=\"tab %s\">\u003Ca href=\"#\">%s\u003C\u002Fa>\u003C\u002Fli>',\r\n-\t\t\t\t$key,\r\n-\t\t\t\t$tab_active,\r\n-\t\t\t\t$label\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section_header = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"header\">',\r\n-\t\t\t'count'    => '\u003Cdiv class=\"header-count-items-selected lp-hidden\">\u003C\u002Fdiv>',\r\n-\t\t\t'tabs'     => sprintf(\r\n-\t\t\t\t'\u003Cul class=\"tabs\">%s\u003C\u002Ful>',\r\n-\t\t\t\t$html_tabs\r\n-\t\t\t),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section_main = [\r\n-\t\t\t'wrap'                => '\u003Cdiv class=\"main\">',\r\n-\t\t\t'wrap_items'          => '\u003Cdiv class=\"list-items-wrap\">',\r\n-\t\t\t'search'              => sprintf(\r\n-\t\t\t\t'\u003Cinput class=\"%1$s\" name=\"%1$s\" type=\"text\" placeholder=\"%2$s\">',\r\n-\t\t\t\t'lp-search-title-item',\r\n-\t\t\t\t__( 'Type here to search for an item', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'list-items'          => $html_items,\r\n-\t\t\t'wrap_items_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t'list-items-selected' => '\r\n-\t\t\t\t\u003Cul class=\"list-items-selected lp-hidden\">\r\n-\t\t\t\t\t\u003Cli class=\"li-item-selected clone lp-hidden\" data-id=\"\" data-type=\"\">\r\n-\t\t\t\t\t\t\u003Ci class=\"dashicons dashicons-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"title-display\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C\u002Ful>',\r\n-\t\t\t'wrap_end'            => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section_footer = [\r\n-\t\t\t'wrap'                 => '\u003Cdiv class=\"footer\">',\r\n-\t\t\t'btn-add'              => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" disabled=\"disabled\" class=\"button lp-btn-add-items-selected lp-btn-edit-primary\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Add', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'count-items-selected' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" disabled=\"disabled\" class=\"button lp-btn-count-items-selected\">%s %s\u003C\u002Fbutton>',\r\n-\t\t\t\tsprintf( __( 'Selected items', 'learnpress' ), 0 ),\r\n-\t\t\t\t'\u003Cspan class=\"count\">\u003C\u002Fspan>'\r\n-\t\t\t),\r\n-\t\t\t'btn-back'             => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"button lp-btn-back-to-select-items lp-hidden\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Back', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap_end'             => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-popup-items-to-select\">',\r\n-\t\t\t'header'   => Template::combine_components( $section_header ),\r\n-\t\t\t'main'     => Template::combine_components( $section_main ),\r\n-\t\t\t'footer'   => Template::combine_components( $section_footer ),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for tom select.\r\n-\t *\r\n-\t * @param array $args {\r\n-\t *     Arguments.\r\n-\t *\r\n-\t *     @type array  $options    Options for select.\r\n-\t *     @type string $name       Name attribute for select.\r\n-\t *     @type string $class_name Class name for select.\r\n-\t * }\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.0\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function html_tom_select( array $args = [] ): string {\r\n-\t\t$html_options = '';\r\n-\r\n-\t\t$options       = $args['options'] ?? [];\r\n-\t\t$name          = $args['name'] ?? '';\r\n-\t\t$class_name    = $args['class_name'] ?? '';\r\n-\t\t$default_value = $args['default_value'] ?? '';\r\n-\t\t$multiple      = $args['multiple'] ?? false;\r\n-\t\t$multiple      = $multiple ? 'multiple' : '';\r\n-\t\tforeach ( $options as $key => $value ) {\r\n-\t\t\tif ( is_array( $default_value ) ) {\r\n-\t\t\t\t$selected = in_array( $key, $default_value, true ) ? 'selected' : '';\r\n-\t\t\t} else {\r\n-\t\t\t\t$selected = selected( $default_value, $key, false );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_options .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', esc_attr( $key ), $selected, esc_html( $value ) );\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'select'     => sprintf(\r\n-\t\t\t\t'\u003Cselect name=\"%s\" class=\"%s lp-tom-select\" %s>',\r\n-\t\t\t\tesc_attr( $name ),\r\n-\t\t\t\tesc_attr( $class_name ),\r\n-\t\t\t\t$multiple\r\n-\t\t\t),\r\n-\t\t\t'options'    => $html_options,\r\n-\t\t\t'select-end' => '\u003C\u002Fselect>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\TemplateHooks\\Admin;\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Template Show list items to select in popup.\n+ *\n+ * @since 4.2.9\n+ * @version 1.0.1\n+ *\u002F\n+class AdminTemplate {\n+\t\u002F**\n+\t * HTML TinyMCE editor\n+\t *\n+\t * @param string $value\n+\t * @param string $id_name\n+\t * @param array $setting\n+\t *\n+\t * @return string\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function editor_tinymce( string $value, string $id_name, array $setting = [] ): string {\n+\t\t$args = array_merge(\n+\t\t\t[\n+\t\t\t\t'media_buttons' => true,\n+\t\t\t\t'editor_class'  => 'lp-editor-tinymce',\n+\t\t\t\t'editor_height' => 210,\n+\t\t\t],\n+\t\t\t$setting\n+\t\t);\n+\n+\t\tob_start();\n+\t\twp_editor(\n+\t\t\t$value,\n+\t\t\t$id_name,\n+\t\t\t$args\n+\t\t);\n+\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * HTML for popup items to select.\n+\t *\n+\t * @param array $tabs [ [ key => label ] ].\n+\t * @param string $html_items\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_popup_items_to_select_clone( array $tabs, string $html_items ): string {\n+\t\t$html_tabs = '';\n+\t\t$i         = 0;\n+\t\tforeach ( $tabs as $key => $label ) {\n+\t\t\t$tab_active = '';\n+\t\t\tif ( $i === 0 ) {\n+\t\t\t\t$tab_active = 'active';\n+\t\t\t\t++$i;\n+\t\t\t}\n+\n+\t\t\t$html_tabs .= sprintf(\n+\t\t\t\t'\u003Cli data-type=\"%s\" class=\"tab %s\">\u003Ca href=\"#\">%s\u003C\u002Fa>\u003C\u002Fli>',\n+\t\t\t\t$key,\n+\t\t\t\t$tab_active,\n+\t\t\t\t$label\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section_header = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"header\">',\n+\t\t\t'count'    => '\u003Cdiv class=\"header-count-items-selected lp-hidden\">\u003C\u002Fdiv>',\n+\t\t\t'tabs'     => sprintf(\n+\t\t\t\t'\u003Cul class=\"tabs\">%s\u003C\u002Ful>',\n+\t\t\t\t$html_tabs\n+\t\t\t),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section_main = [\n+\t\t\t'wrap'                => '\u003Cdiv class=\"main\">',\n+\t\t\t'wrap_items'          => '\u003Cdiv class=\"list-items-wrap\">',\n+\t\t\t'search'              => sprintf(\n+\t\t\t\t'\u003Cinput class=\"%1$s\" name=\"%1$s\" type=\"text\" placeholder=\"%2$s\">',\n+\t\t\t\t'lp-search-title-item',\n+\t\t\t\t__( 'Type here to search for an item', 'learnpress' )\n+\t\t\t),\n+\t\t\t'list-items'          => $html_items,\n+\t\t\t'wrap_items_end'      => '\u003C\u002Fdiv>',\n+\t\t\t'list-items-selected' => '\n+\t\t\t\t\u003Cul class=\"list-items-selected lp-hidden\">\n+\t\t\t\t\t\u003Cli class=\"li-item-selected clone lp-hidden\" data-id=\"\" data-type=\"\">\n+\t\t\t\t\t\t\u003Ci class=\"dashicons dashicons-remove\">\u003C\u002Fi>\n+\t\t\t\t\t\t\u003Cdiv class=\"title-display\">\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C\u002Ful>',\n+\t\t\t'wrap_end'            => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section_footer = [\n+\t\t\t'wrap'                 => '\u003Cdiv class=\"footer\">',\n+\t\t\t'btn-add'              => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" disabled=\"disabled\" class=\"button lp-btn-add-items-selected lp-btn-edit-primary\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Add', 'learnpress' )\n+\t\t\t),\n+\t\t\t'count-items-selected' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" disabled=\"disabled\" class=\"button lp-btn-count-items-selected\">%s %s\u003C\u002Fbutton>',\n+\t\t\t\tsprintf( __( 'Selected items', 'learnpress' ), 0 ),\n+\t\t\t\t'\u003Cspan class=\"count\">\u003C\u002Fspan>'\n+\t\t\t),\n+\t\t\t'btn-back'             => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"button lp-btn-back-to-select-items lp-hidden\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Back', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap_end'             => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-popup-items-to-select\">',\n+\t\t\t'header'   => Template::combine_components( $section_header ),\n+\t\t\t'main'     => Template::combine_components( $section_main ),\n+\t\t\t'footer'   => Template::combine_components( $section_footer ),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for tom select.\n+\t *\n+\t * @param array $args {\n+\t *     Arguments.\n+\t *\n+\t *     @type array  $options    Options for select.\n+\t *     @type string $name       Name attribute for select.\n+\t *     @type string $class_name Class name for select.\n+\t * }\n+\t *\n+\t * @return string\n+\t * @since 4.3.0\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function html_tom_select( array $args = [] ): string {\n+\t\t$html_options = '';\n+\n+\t\t$options       = $args['options'] ?? [];\n+\t\t$name          = $args['name'] ?? '';\n+\t\t$class_name    = $args['class_name'] ?? '';\n+\t\t$default_value = $args['default_value'] ?? '';\n+\t\t$multiple      = $args['multiple'] ?? false;\n+\t\t$multiple      = $multiple ? 'multiple' : '';\n+\t\tforeach ( $options as $key => $value ) {\n+\t\t\tif ( is_array( $default_value ) ) {\n+\t\t\t\t$selected = in_array( $key, $default_value, true ) ? 'selected' : '';\n+\t\t\t} else {\n+\t\t\t\t$selected = selected( $default_value, $key, false );\n+\t\t\t}\n+\n+\t\t\t$html_options .= sprintf( '\u003Coption value=\"%s\" %s>%s\u003C\u002Foption>', esc_attr( $key ), $selected, esc_html( $value ) );\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'select'     => sprintf(\n+\t\t\t\t'\u003Cselect name=\"%s\" class=\"%s lp-tom-select\" %s>',\n+\t\t\t\tesc_attr( $name ),\n+\t\t\t\tesc_attr( $class_name ),\n+\t\t\t\t$multiple\n+\t\t\t),\n+\t\t\t'options'    => $html_options,\n+\t\t\t'select-end' => '\u003C\u002Fselect>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminAICloseWarningTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminAICloseWarningTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminAICloseWarningTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminAICloseWarningTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-\u003C?php\r\n-\r\n-namespace learnpress\\inc\\TemplateHooks\\Admin\\AI;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class AdminCreateCourseAITemplate\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class AdminAICloseWarningTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var array|null\r\n-\t *\u002F\r\n-\tprivate ?array $config;\r\n-\r\n-\t\u002F**\r\n-\t * Init hooks.\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\r\n-\t}\r\n-\r\n-\tpublic function layout_popup() {\r\n-\t\t$screen = get_current_screen();\r\n-\t\tif ( ! $screen || $screen->id != 'edit-' . LP_COURSE_CPT ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo $this->template();\r\n-\t}\r\n-\r\n-\tpublic function template(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-close-warning-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-close-warning-data-ai-wrap\">',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generating data is stopped', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'desc'                     => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"desc\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'The process of generating data has been canceled.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace learnpress\\inc\\TemplateHooks\\Admin\\AI;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class AdminCreateCourseAITemplate\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.1\n+ *\u002F\n+class AdminAICloseWarningTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var array|null\n+\t *\u002F\n+\tprivate ?array $config;\n+\n+\t\u002F**\n+\t * Init hooks.\n+\t *\u002F\n+\tpublic function init() {\n+\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\n+\t}\n+\n+\tpublic function layout_popup() {\n+\t\t$screen = get_current_screen();\n+\t\tif ( ! $screen || $screen->id != 'edit-' . LP_COURSE_CPT ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo $this->template();\n+\t}\n+\n+\tpublic function template(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-close-warning-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-close-warning-data-ai-wrap\">',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generating data is stopped', 'learnpress' )\n+\t\t\t),\n+\t\t\t'desc'                     => sprintf(\n+\t\t\t\t'\u003Cp class=\"desc\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'The process of generating data has been canceled.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,652 +1,665 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin\\AI;\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\r\n-use LP_Debug;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class AdminCreateCourseAITemplate\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminCreateCourseAITemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var array|null\r\n-\t *\u002F\r\n-\tprivate ?array $config;\r\n-\r\n-\t\u002F**\r\n-\t * Init hooks.\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\r\n-\t}\r\n-\r\n-\tpublic function layout_popup() {\r\n-\t\ttry {\r\n-\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$screen = get_current_screen();\r\n-\t\t\tif ( ! $screen || $screen->id != 'edit-' . LP_COURSE_CPT ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\r\n-\t\t\techo $this->html_create_course_via_ai();\r\n-\t\t\techo $this->html_creating_course();\r\n-\t\t\techo $this->html_warning_enable_ai();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function html_create_course_via_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-create-course-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t'btn-close'                =>\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'AI Course Builder for LearnPress', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'header'                   => $this->html_step_header(),\r\n-\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t'step_1'                   => $this->html_step_1(),\r\n-\t\t\t'step_2'                   => $this->html_step_2(),\r\n-\t\t\t'step_3'                   => $this->html_step_3(),\r\n-\t\t\t'step_4'                   => $this->html_step_4(),\r\n-\t\t\t'step_5'                   => $this->html_step_5(),\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2,3,4,5\"\r\n-\t\t\t\t\t \tdata-action=\"prev\" type=\"button\">&larr; %s\r\n-\t\t\t\t\t \u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\r\n-\t\t\t\t\t\tdata-step-show=\"1,2\"\r\n-\t\t\t\t\t \tdata-action=\"next\" type=\"button\">%s &rarr;\r\n-\t\t\t\t\t \u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"3\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"4\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-create-course lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"5\"\r\n-\t\t\t\t\t \tdata-send=\"%s\"\r\n-\t\t\t\t\t\ttype=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Next', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action' => 'openai_generate_prompt_course',\r\n-\t\t\t\t\t\t'id_url' => 'generate_prompt_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action' => 'openai_generate_data_course',\r\n-\t\t\t\t\t\t'id_url' => 'submit_to_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Data Course', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action' => 'openai_create_course',\r\n-\t\t\t\t\t\t'id_url' => 'openai_create_course',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Create Course', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_header(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\r\n-\t\t\t'step_1'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_2'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_3'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course Structure', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_4'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_5'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"5\">\r\n-\t\t\t\t\t\u003Cspan class=\"step-number\">5\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Create course', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tprivate function html_step_1(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'        => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 1 — Course Goal', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\t''\r\n-\t\t\t),\r\n-\t\t\t'role'        => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"role_persona\" placeholder=\"\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Role \u002F Persona', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Defines who is creating the course so AI can tailor tone, expertise, and perspective.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'audience'    => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'target_audience',\r\n-\t\t\t\t\t\t'class_name'    => '',\r\n-\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\r\n-\t\t\t\t\t\t'default_value' => 'Students',\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'objective'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea name=\"course_objective\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course objective', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Enter description about course you want AI generate', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Specifies what learners should achieve after completing the course, guiding AI to generate outcome-aligned content.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'step_close'  => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Step 2 HTML.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_step_2(): string {\r\n-\t\t$options         = $this->config;\r\n-\t\t$grid_components = [\r\n-\t\t\t'grid'          => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'language'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Language', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'language',\r\n-\t\t\t\t\t\t'options' => $options['language'] ?? [],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'tone'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'tone',\r\n-\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'reading_level' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"swal-levels\">%s\u003C\u002Flabel>\r\n-\t\t\t\t\t%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Reading level', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'reading_level',\r\n-\t\t\t\t\t\t'options' => $options['reading_level'] ?? [],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Determines the complexity of language (e.g., foundational, intermediate, advanced) so the AI can generate content appropriate for the learners’ comprehension level.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'seo_emphasis'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"seo-emphasis\">%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"seo_emphasis\" value=\"\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'SEO emphasis', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Determines how strongly AI should optimize content for search engines.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'keywords'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"target_keywords\" value=\"\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Target keywords (comma-separated)', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Lists the keywords AI should integrate to improve SEO performance across titles and descriptions.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'grid-end'      => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form_grid'   => Template::combine_components( $grid_components ),\r\n-\t\t\t'step-end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_3(): string {\r\n-\t\t$grid_components = [\r\n-\t\t\t'grid'            => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'sections-number' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_number\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Sections number', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Defines how many main sections\u002Fmodules the course will include.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'sections-title-length' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_title_length\" value=\"60\" min=\"0\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each section title length', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Specifies the word limit for section titles to maintain consistency and readability.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'sections-des-length'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_description_length\" value=\"200\" min=\"0\">\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each section description length', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Sets the word limit for section introductions to control depth and clarity.', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'lesson-number'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_per_section\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Lessons per Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'lesson-title-length'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_title_length\" value=\"60\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each lesson title length (words)', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'lesson-des-length'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_description_length\" value=\"1000\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each lesson description length', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'quizzes'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"quizzes_per_section\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Quizzes per Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'questions'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"questions-per-quiz\">%s\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput type=\"number\" name=\"questions_per_quiz\" value=\"2\" min=\"0\">\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Questions per Quiz', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'grid-end'        => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 3 — Course Structure', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Define the LearnPress Curriculum structure. The Prompt will be generated based on these controls.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form_grid'   => Template::combine_components( $grid_components ),\r\n-\t\t\t'step-end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generated prompt to submit OpenAI\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_step_4(): string {\r\n-\t\t$components = [\r\n-\t\t\t'step'     => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\r\n-\t\t\t'title'    => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 4 — Prompt Generated', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'prompt'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Ctextarea name=\"lp-openai-prompt-generated-field\" rows=\"20\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Preview Course and create\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_step_5(): string {\r\n-\t\t$components = [\r\n-\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"5\">',\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 5 — Create Course', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Data preview before create course.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'preview'     => '\u003Cdiv class=\"lp-ai-generated-results lp-ai-course-data-preview-wrap\">\u003C\u002Fdiv>',\r\n-\t\t\t'step-end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML preview with data received from OpenAI\r\n-\t *\r\n-\t * @param array $data_received\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_preview_with_data( array $data_received ): string {\r\n-\t\t$course_title       = $data_received['course_title'] ?? '';\r\n-\t\t$course_description = $data_received['course_description'] ?? '';\r\n-\t\t$sections           = $data_received['sections'] ?? [];\r\n-\r\n-\t\t$html_section = '';\r\n-\t\tforeach ( $sections as $section ) {\r\n-\t\t\t$section_title = $section['section_title'] ?? '';\r\n-\t\t\t$section_des   = $section['section_description'] ?? '';\r\n-\t\t\t$lessons       = $section['lessons'] ?? [];\r\n-\t\t\t$quizzes       = $section['quizzes'] ?? [];\r\n-\r\n-\t\t\t$html_lessons = '';\r\n-\t\t\tforeach ( $lessons as $lesson ) {\r\n-\t\t\t\t$lesson_title = $lesson['lesson_title'] ?? '';\r\n-\t\t\t\t$lesson_des   = $lesson['lesson_description'] ?? '';\r\n-\r\n-\t\t\t\t$arr_lesson_components = [\r\n-\t\t\t\t\t'wrap'     => '\u003Cli class=\"course-lesson-item\">',\r\n-\t\t\t\t\t'title'    => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lesson-title\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t__( 'Lesson', 'learnpress' ),\r\n-\t\t\t\t\t\tesc_html( $lesson_title )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"lesson-description\">%s\u003C\u002Fdiv>', esc_html( $lesson_des ) ),\r\n-\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$html_lessons .= Template::combine_components( $arr_lesson_components );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Quizzes\r\n-\t\t\t$html_quizzes = '';\r\n-\t\t\tforeach ( $quizzes as $quiz ) {\r\n-\t\t\t\t$quiz_title = $quiz['quiz_title'] ?? '';\r\n-\t\t\t\t$quiz_des   = $quiz['quiz_description'] ?? '';\r\n-\t\t\t\t$questions  = $quiz['questions'] ?? [];\r\n-\r\n-\t\t\t\t$html_questions = '';\r\n-\t\t\t\tforeach ( $questions as $question ) {\r\n-\t\t\t\t\t$question_title = $question['question_title'] ?? '';\r\n-\t\t\t\t\t$question_des   = $question['question_description'] ?? '';\r\n-\t\t\t\t\t$options        = $question['options'] ?? [];\r\n-\r\n-\t\t\t\t\t$html_options = '';\r\n-\t\t\t\t\tforeach ( $options as $option ) {\r\n-\t\t\t\t\t\t$html_options .= sprintf( '\u003Cli class=\"question-option\">%s\u003C\u002Fli>', esc_html( $option ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$arr_question_components = [\r\n-\t\t\t\t\t\t'wrap'     => '\u003Cli class=\"quiz-question-item\">',\r\n-\t\t\t\t\t\t'title'    => sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cdiv class=\"question-title\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t\t__( 'Question', 'learnpress' ),\r\n-\t\t\t\t\t\t\tesc_html( $question_title )\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'desc'     => sprintf( '\u003Cdiv class=\"question-desc\">%s\u003C\u002Fdiv>', esc_html( $question_des ) ),\r\n-\t\t\t\t\t\t'options'  => sprintf( '\u003Cul class=\"course-question-options\">%s\u003C\u002Ful>', $html_options ),\r\n-\t\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\t$html_questions .= Template::combine_components( $arr_question_components );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$arr_quiz_components = [\r\n-\t\t\t\t\t'wrap'      => '\u003Cli class=\"course-quiz-item\">',\r\n-\t\t\t\t\t'title'     => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"quiz-title\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t__( 'Quiz', 'learnpress' ),\r\n-\t\t\t\t\t\tesc_html( $quiz_title )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'des'       => sprintf( '\u003Cdiv class=\"quiz-description\">%s\u003C\u002Fdiv>', esc_html( $quiz_des ) ),\r\n-\t\t\t\t\t'questions' => sprintf( '\u003Cul class=\"course-questions\">%s\u003C\u002Ful>', $html_questions ),\r\n-\t\t\t\t\t'wrap-end'  => '\u003C\u002Fli>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$html_quizzes .= Template::combine_components( $arr_quiz_components );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$arr_section_components = [\r\n-\t\t\t\t'wrap'         => '\u003Cli class=\"course-section-item\">',\r\n-\t\t\t\t'title'        => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"section-title\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t__( 'Curriculum', 'learnpress' ),\r\n-\t\t\t\t\tesc_html( $section_title )\r\n-\t\t\t\t),\r\n-\t\t\t\t'des'          => sprintf( '\u003Cdiv class=\"section-description\">%s\u003C\u002Fdiv>', esc_html( $section_des ) ),\r\n-\t\t\t\t'ul-items'     => '\u003Cul class=\"course-section-items\">',\r\n-\t\t\t\t'items'        => $html_lessons . $html_quizzes,\r\n-\t\t\t\t'ul-items-end' => '\u003C\u002Ful>',\r\n-\t\t\t\t'wrap-end'     => '\u003C\u002Fli>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_section .= Template::combine_components( $arr_section_components );\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-ai-course-data-preview\">',\r\n-\t\t\t'title'    => sprintf( '\u003Cdiv class=\"course-title\">%s\u003C\u002Fdiv>', esc_html( $course_title ) ),\r\n-\t\t\t'des'      => sprintf( '\u003Cdiv class=\"course-description\">%s\u003C\u002Fdiv>', esc_html( $course_description ) ),\r\n-\t\t\t'sections' => sprintf( '\u003Cul class=\"course-sections\">%s\u003C\u002Ful>', $html_section ),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for Popup Creating course template\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_creating_course(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-creating-course-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-creating-course-ai-wrap\">',\r\n-\t\t\t'head'                     => sprintf(\r\n-\t\t\t\t'\u003Ch2>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fh2>',\r\n-\t\t\t\tesc_html__( 'Creating your LearnPress course...', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'desc'                     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"desc\">%s\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv>%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Please wait while we prepare sections, lessons...', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Don\\'t reload page when creating', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'loader'                   => '\u003Cdiv class=\"loading-wrap\">\r\n-\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-loading-circle\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'struct'                   => sprintf(\r\n-\t\t\t\t'\u003Cul>\r\n-\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\r\n-\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\r\n-\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\r\n-\t\t\t\t\u003C\u002Ful>',\r\n-\t\t\t\tesc_html__( 'Creating sections...', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Creating lessons...', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Creating quizzes...', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for Popup warning enable AI\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_warning_enable_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-must-enable-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-must-enable-ai-wrap\">',\r\n-\t\t\t'head'                     => sprintf(\r\n-\t\t\t\t'\u003Ch2>\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fh2>',\r\n-\t\t\t\tesc_html__( 'OpenAI API is not connected', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'desc'                     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"desc\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Connect the OpenAI API to unlock LearnPress AI features.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'paragraph'                => sprintf(\r\n-\t\t\t\t'\u003Cp>%s\u003C\u002Fp>\r\n-\t\t\t\t\u003Cp class=\"p2\">%s\u003C\u002Fp>',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'%s \u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t__( 'Please enter your \u003Cstrong>OpenAI Secret Key\u003C\u002Fstrong> and enable the option \u003Cstrong>Enable OpenAI\u003C\u002Fstrong> option', 'learnpress' ),\r\n-\t\t\t\t\tesc_url( admin_url( 'admin.php?page=learn-press-settings&tab=open-ai' ) ),\r\n-\t\t\t\t\tesc_html__( 'here.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__(\r\n-\t\t\t\t\t'LearnPress AI helps you create courses, lessons, quizzes, and\r\n-\t\t\t\t\tlearning content faster with intelligent AI assistance.',\r\n-\t\t\t\t\t'learnpress'\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'help-link'                => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"help-link\">%s\u003Cbr\u002F>%s\u003C\u002Fdiv>',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'%s %s',\r\n-\t\t\t\t\t'\u003Ci class=\"lp-icon-book\">\u003C\u002Fi>',\r\n-\t\t\t\t\tesc_html__( 'Need help using LearnPress AI?', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tesc_url( 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002Flearnpress\u002Fguide-to-using-ai-to-create-courses-in-learpress\u002F' ),\r\n-\t\t\t\t\tesc_html__( 'View LearnPress AI documentation.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\">\r\n-\t\t\t\t\t\u003Cbutton class=\"button lp-btn-close-ai-popup\" type=\"button\">%s\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Ca class=\"button button-primary\" href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Close', 'learnpress' ),\r\n-\t\t\t\tesc_url( admin_url( 'admin.php?page=learn-press-settings&tab=open-ai' ) ),\r\n-\t\t\t\tesc_html__( 'Go to Settings', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin\\AI;\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\n+use LP_Debug;\n+use Throwable;\n+\n+\u002F**\n+ * Class AdminCreateCourseAITemplate\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+class AdminCreateCourseAITemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var array|null\n+\t *\u002F\n+\tprivate ?array $config;\n+\n+\t\u002F**\n+\t * Init hooks.\n+\t *\u002F\n+\tpublic function init() {\n+\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\n+\t}\n+\n+\tpublic function layout_popup() {\n+\t\ttry {\n+\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$screen = get_current_screen();\n+\t\t\tif ( ! $screen || $screen->id != 'edit-' . LP_COURSE_CPT ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\n+\t\t\techo $this->html_create_course_via_ai();\n+\t\t\techo $this->html_creating_course();\n+\t\t\techo $this->html_warning_enable_ai();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Render AI templates for non-admin contexts (e.g. Course Builder frontend).\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render_for_frontend(): string {\n+\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\n+\n+\t\treturn $this->html_create_course_via_ai()\n+\t\t\t. $this->html_creating_course()\n+\t\t\t. $this->html_warning_enable_ai();\n+\t}\n+\n+\tpublic function html_create_course_via_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-create-course-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t'btn-close'                =>\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'AI Course Builder for LearnPress', 'learnpress' )\n+\t\t\t),\n+\t\t\t'header'                   => $this->html_step_header(),\n+\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t'step_1'                   => $this->html_step_1(),\n+\t\t\t'step_2'                   => $this->html_step_2(),\n+\t\t\t'step_3'                   => $this->html_step_3(),\n+\t\t\t'step_4'                   => $this->html_step_4(),\n+\t\t\t'step_5'                   => $this->html_step_5(),\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2,3,4,5\"\n+\t\t\t\t\t \tdata-action=\"prev\" type=\"button\">&larr; %s\n+\t\t\t\t\t \u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\n+\t\t\t\t\t\tdata-step-show=\"1,2\"\n+\t\t\t\t\t \tdata-action=\"next\" type=\"button\">%s &rarr;\n+\t\t\t\t\t \u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"3\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"4\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-create-course lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"5\"\n+\t\t\t\t\t \tdata-send=\"%s\"\n+\t\t\t\t\t\ttype=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Next', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action' => 'openai_generate_prompt_course',\n+\t\t\t\t\t\t'id_url' => 'generate_prompt_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action' => 'openai_generate_data_course',\n+\t\t\t\t\t\t'id_url' => 'submit_to_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Data Course', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action' => 'openai_create_course',\n+\t\t\t\t\t\t'id_url' => 'openai_create_course',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Create Course', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_header(): string {\n+\t\t$components = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\n+\t\t\t'step_1'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_2'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_3'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course Structure', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_4'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_5'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"5\">\n+\t\t\t\t\t\u003Cspan class=\"step-number\">5\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Create course', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tprivate function html_step_1(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'        => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 1 — Course Goal', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\t''\n+\t\t\t),\n+\t\t\t'role'        => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"role_persona\" placeholder=\"\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Role \u002F Persona', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Defines who is creating the course so AI can tailor tone, expertise, and perspective.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'audience'    => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'target_audience',\n+\t\t\t\t\t\t'class_name'    => '',\n+\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\n+\t\t\t\t\t\t'default_value' => 'Students',\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'objective'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea name=\"course_objective\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course objective', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Enter description about course you want AI generate', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Specifies what learners should achieve after completing the course, guiding AI to generate outcome-aligned content.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'step_close'  => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * Step 2 HTML.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_step_2(): string {\n+\t\t$options         = $this->config;\n+\t\t$grid_components = [\n+\t\t\t'grid'          => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'language'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Language', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'language',\n+\t\t\t\t\t\t'options' => $options['language'] ?? [],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'tone'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'tone',\n+\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'reading_level' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"swal-levels\">%s\u003C\u002Flabel>\n+\t\t\t\t\t%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Reading level', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'reading_level',\n+\t\t\t\t\t\t'options' => $options['reading_level'] ?? [],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Determines the complexity of language (e.g., foundational, intermediate, advanced) so the AI can generate content appropriate for the learners’ comprehension level.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'seo_emphasis'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"seo-emphasis\">%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"seo_emphasis\" value=\"\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'SEO emphasis', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Determines how strongly AI should optimize content for search engines.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'keywords'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"target_keywords\" value=\"\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Target keywords (comma-separated)', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Lists the keywords AI should integrate to improve SEO performance across titles and descriptions.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'grid-end'      => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$components = [\n+\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form_grid'   => Template::combine_components( $grid_components ),\n+\t\t\t'step-end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_3(): string {\n+\t\t$grid_components = [\n+\t\t\t'grid'            => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'sections-number' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_number\" value=\"2\" min=\"0\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Sections number', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Defines how many main sections\u002Fmodules the course will include.', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'sections-title-length' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_title_length\" value=\"60\" min=\"0\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each section title length', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Specifies the word limit for section titles to maintain consistency and readability.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'sections-des-length'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_description_length\" value=\"200\" min=\"0\">\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each section description length', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Sets the word limit for section introductions to control depth and clarity.', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'lesson-number'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_per_section\" value=\"2\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Lessons per Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'lesson-title-length'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_title_length\" value=\"60\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each lesson title length (words)', 'learnpress' )\n+\t\t\t),\n+\t\t\t'lesson-des-length'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_description_length\" value=\"1000\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each lesson description length', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'quizzes'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"quizzes_per_section\" value=\"2\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Quizzes per Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t'questions'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"questions-per-quiz\">%s\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput type=\"number\" name=\"questions_per_quiz\" value=\"2\" min=\"0\">\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Questions per Quiz', 'learnpress' )\n+\t\t\t),\n+\t\t\t'grid-end'        => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$components = [\n+\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 3 — Course Structure', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Define the LearnPress Curriculum structure. The Prompt will be generated based on these controls.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form_grid'   => Template::combine_components( $grid_components ),\n+\t\t\t'step-end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * Generated prompt to submit OpenAI\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_step_4(): string {\n+\t\t$components = [\n+\t\t\t'step'     => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\n+\t\t\t'title'    => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 4 — Prompt Generated', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'prompt'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Ctextarea name=\"lp-openai-prompt-generated-field\" rows=\"20\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * Preview Course and create\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_step_5(): string {\n+\t\t$components = [\n+\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"5\">',\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 5 — Create Course', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Data preview before create course.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'preview'     => '\u003Cdiv class=\"lp-ai-generated-results lp-ai-course-data-preview-wrap\">\u003C\u002Fdiv>',\n+\t\t\t'step-end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * HTML preview with data received from OpenAI\n+\t *\n+\t * @param array $data_received\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_preview_with_data( array $data_received ): string {\n+\t\t$course_title       = $data_received['course_title'] ?? '';\n+\t\t$course_description = $data_received['course_description'] ?? '';\n+\t\t$sections           = $data_received['sections'] ?? [];\n+\n+\t\t$html_section = '';\n+\t\tforeach ( $sections as $section ) {\n+\t\t\t$section_title = $section['section_title'] ?? '';\n+\t\t\t$section_des   = $section['section_description'] ?? '';\n+\t\t\t$lessons       = $section['lessons'] ?? [];\n+\t\t\t$quizzes       = $section['quizzes'] ?? [];\n+\n+\t\t\t$html_lessons = '';\n+\t\t\tforeach ( $lessons as $lesson ) {\n+\t\t\t\t$lesson_title = $lesson['lesson_title'] ?? '';\n+\t\t\t\t$lesson_des   = $lesson['lesson_description'] ?? '';\n+\n+\t\t\t\t$arr_lesson_components = [\n+\t\t\t\t\t'wrap'     => '\u003Cli class=\"course-lesson-item\">',\n+\t\t\t\t\t'title'    => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lesson-title\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t\t__( 'Lesson', 'learnpress' ),\n+\t\t\t\t\t\tesc_html( $lesson_title )\n+\t\t\t\t\t),\n+\t\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"lesson-description\">%s\u003C\u002Fdiv>', esc_html( $lesson_des ) ),\n+\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\n+\t\t\t\t];\n+\n+\t\t\t\t$html_lessons .= Template::combine_components( $arr_lesson_components );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Quizzes\n+\t\t\t$html_quizzes = '';\n+\t\t\tforeach ( $quizzes as $quiz ) {\n+\t\t\t\t$quiz_title = $quiz['quiz_title'] ?? '';\n+\t\t\t\t$quiz_des   = $quiz['quiz_description'] ?? '';\n+\t\t\t\t$questions  = $quiz['questions'] ?? [];\n+\n+\t\t\t\t$html_questions = '';\n+\t\t\t\tforeach ( $questions as $question ) {\n+\t\t\t\t\t$question_title = $question['question_title'] ?? '';\n+\t\t\t\t\t$question_des   = $question['question_description'] ?? '';\n+\t\t\t\t\t$options        = $question['options'] ?? [];\n+\n+\t\t\t\t\t$html_options = '';\n+\t\t\t\t\tforeach ( $options as $option ) {\n+\t\t\t\t\t\t$html_options .= sprintf( '\u003Cli class=\"question-option\">%s\u003C\u002Fli>', esc_html( $option ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$arr_question_components = [\n+\t\t\t\t\t\t'wrap'     => '\u003Cli class=\"quiz-question-item\">',\n+\t\t\t\t\t\t'title'    => sprintf(\n+\t\t\t\t\t\t\t'\u003Cdiv class=\"question-title\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t\t\t__( 'Question', 'learnpress' ),\n+\t\t\t\t\t\t\tesc_html( $question_title )\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'desc'     => sprintf( '\u003Cdiv class=\"question-desc\">%s\u003C\u002Fdiv>', esc_html( $question_des ) ),\n+\t\t\t\t\t\t'options'  => sprintf( '\u003Cul class=\"course-question-options\">%s\u003C\u002Ful>', $html_options ),\n+\t\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\n+\t\t\t\t\t];\n+\n+\t\t\t\t\t$html_questions .= Template::combine_components( $arr_question_components );\n+\t\t\t\t}\n+\n+\t\t\t\t$arr_quiz_components = [\n+\t\t\t\t\t'wrap'      => '\u003Cli class=\"course-quiz-item\">',\n+\t\t\t\t\t'title'     => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"quiz-title\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t\t__( 'Quiz', 'learnpress' ),\n+\t\t\t\t\t\tesc_html( $quiz_title )\n+\t\t\t\t\t),\n+\t\t\t\t\t'des'       => sprintf( '\u003Cdiv class=\"quiz-description\">%s\u003C\u002Fdiv>', esc_html( $quiz_des ) ),\n+\t\t\t\t\t'questions' => sprintf( '\u003Cul class=\"course-questions\">%s\u003C\u002Ful>', $html_questions ),\n+\t\t\t\t\t'wrap-end'  => '\u003C\u002Fli>',\n+\t\t\t\t];\n+\n+\t\t\t\t$html_quizzes .= Template::combine_components( $arr_quiz_components );\n+\t\t\t}\n+\n+\t\t\t$arr_section_components = [\n+\t\t\t\t'wrap'         => '\u003Cli class=\"course-section-item\">',\n+\t\t\t\t'title'        => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"section-title\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t__( 'Curriculum', 'learnpress' ),\n+\t\t\t\t\tesc_html( $section_title )\n+\t\t\t\t),\n+\t\t\t\t'des'          => sprintf( '\u003Cdiv class=\"section-description\">%s\u003C\u002Fdiv>', esc_html( $section_des ) ),\n+\t\t\t\t'ul-items'     => '\u003Cul class=\"course-section-items\">',\n+\t\t\t\t'items'        => $html_lessons . $html_quizzes,\n+\t\t\t\t'ul-items-end' => '\u003C\u002Ful>',\n+\t\t\t\t'wrap-end'     => '\u003C\u002Fli>',\n+\t\t\t];\n+\n+\t\t\t$html_section .= Template::combine_components( $arr_section_components );\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-ai-course-data-preview\">',\n+\t\t\t'title'    => sprintf( '\u003Cdiv class=\"course-title\">%s\u003C\u002Fdiv>', esc_html( $course_title ) ),\n+\t\t\t'des'      => sprintf( '\u003Cdiv class=\"course-description\">%s\u003C\u002Fdiv>', esc_html( $course_description ) ),\n+\t\t\t'sections' => sprintf( '\u003Cul class=\"course-sections\">%s\u003C\u002Ful>', $html_section ),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for Popup Creating course template\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_creating_course(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-creating-course-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-creating-course-ai-wrap\">',\n+\t\t\t'head'                     => sprintf(\n+\t\t\t\t'\u003Ch2>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fh2>',\n+\t\t\t\tesc_html__( 'Creating your LearnPress course...', 'learnpress' )\n+\t\t\t),\n+\t\t\t'desc'                     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"desc\">%s\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv>%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Please wait while we prepare sections, lessons...', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Don\\'t reload page when creating', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'loader'                   => '\u003Cdiv class=\"loading-wrap\">\n+\t\t\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-loading-circle\">\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'struct'                   => sprintf(\n+\t\t\t\t'\u003Cul>\n+\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\n+\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\n+\t\t\t\t\t\u003Cli>%s\u003C\u002Fli>\n+\t\t\t\t\u003C\u002Ful>',\n+\t\t\t\tesc_html__( 'Creating sections...', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Creating lessons...', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Creating quizzes...', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for Popup warning enable AI\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_warning_enable_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-must-enable-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-must-enable-ai-wrap\">',\n+\t\t\t'head'                     => sprintf(\n+\t\t\t\t'\u003Ch2>\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>\u003Cstrong>%s\u003C\u002Fstrong>\u003C\u002Fh2>',\n+\t\t\t\tesc_html__( 'OpenAI API is not connected', 'learnpress' )\n+\t\t\t),\n+\t\t\t'desc'                     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"desc\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Connect the OpenAI API to unlock LearnPress AI features.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'paragraph'                => sprintf(\n+\t\t\t\t'\u003Cp>%s\u003C\u002Fp>\n+\t\t\t\t\u003Cp class=\"p2\">%s\u003C\u002Fp>',\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'%s \u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\n+\t\t\t\t\t__( 'Please enter your \u003Cstrong>OpenAI Secret Key\u003C\u002Fstrong> and enable the option \u003Cstrong>Enable OpenAI\u003C\u002Fstrong> option', 'learnpress' ),\n+\t\t\t\t\tesc_url( admin_url( 'admin.php?page=learn-press-settings&tab=open-ai' ) ),\n+\t\t\t\t\tesc_html__( 'here.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tesc_html__(\n+\t\t\t\t\t'LearnPress AI helps you create courses, lessons, quizzes, and\n+\t\t\t\t\tlearning content faster with intelligent AI assistance.',\n+\t\t\t\t\t'learnpress'\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'help-link'                => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"help-link\">%s\u003Cbr\u002F>%s\u003C\u002Fdiv>',\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'%s %s',\n+\t\t\t\t\t'\u003Ci class=\"lp-icon-book\">\u003C\u002Fi>',\n+\t\t\t\t\tesc_html__( 'Need help using LearnPress AI?', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>',\n+\t\t\t\t\tesc_url( 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002Flearnpress\u002Fguide-to-using-ai-to-create-courses-in-learpress\u002F' ),\n+\t\t\t\t\tesc_html__( 'View LearnPress AI documentation.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\">\n+\t\t\t\t\t\u003Cbutton class=\"button lp-btn-close-ai-popup\" type=\"button\">%s\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Ca class=\"button button-primary\" href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Close', 'learnpress' ),\n+\t\t\t\tesc_url( admin_url( 'admin.php?page=learn-press-settings&tab=open-ai' ) ),\n+\t\t\t\tesc_html__( 'Go to Settings', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,457 +1,473 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin\\AI;\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\r\n-use LP_Debug;\r\n-use LP_Settings;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class AdminEditCourseCurriculumWithAITemplate\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.1.0\r\n- *\u002F\r\n-class AdminEditCourseCurriculumWithAITemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var array|null\r\n-\t *\u002F\r\n-\tprivate ?array $config;\r\n-\r\n-\t\u002F**\r\n-\t * Init hooks.\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout popup to generate course curriculum with AI\r\n-\t *\u002F\r\n-\tpublic function layout_popup() {\r\n-\t\ttry {\r\n-\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$screen  = get_current_screen();\r\n-\t\t\t$screens = [\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t];\r\n-\t\t\tif ( ! $screen || in_array( $screen, $screens ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\r\n-\r\n-\t\t\t$components = [\r\n-\t\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-course-curriculum-ai\">',\r\n-\t\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t\t'btn-close'                =>\r\n-\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Generate Course Sections Curriculum', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'header'                   => $this->html_step_header(),\r\n-\t\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\r\n-\t\t\t\t'step_1'                   => $this->html_step_1(),\r\n-\t\t\t\t'step_2'                   => $this->html_step_2(),\r\n-\t\t\t\t'step_3'                   => $this->html_step_3(),\r\n-\t\t\t\t'step_4'                   => $this->html_step_4(),\r\n-\t\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\tdata-step-show=\"2,3,4\"\r\n-\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\r\n-\t\t\t\t\t\tdata-step-show=\"1\"\r\n-\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"3\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-apply-curriculum lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"4\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\r\n-\t\t\t\t\tesc_html__( 'Next', 'learnpress' ),\r\n-\t\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\r\n-\t\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum', \u002F\u002F define type prompt to generate title.\r\n-\t\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\r\n-\t\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'action'         => 'openai_generate_data',\r\n-\t\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum', \u002F\u002F define type prompt to generate title.\r\n-\t\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tesc_html__( 'Generate Sections Course', 'learnpress' ),\r\n-\t\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'action' => 'openai_create_course_sections',\r\n-\t\t\t\t\t\t\t'id_url' => 'openai_create_course_sections',\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tesc_html__( 'Apply Sections Data To Curriculum', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo Template::combine_components( $components );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function html_step_header(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\r\n-\t\t\t'step_1'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Curriculum Goal', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_2'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_3'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_4'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Result', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_1(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'            => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\r\n-\t\t\t'title'           => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 1 — Curriculum Goal', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'     => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Provide the main goal for the curriculum so the system can generate aligned sections and lessons.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'post-title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Title refer', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'You can edit the course title to better suit the curriculum generation.', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The course title is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'post-content'    => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea class=\"description-refer\" type=\"text\" name=\"post-content\" readonly>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Description refer', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'You can edit the course description to better suit the curriculum generation.', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The course description is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'goal'            => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goal\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Goal', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Defines the main objective of your curriculum. This helps the AI generate course sections and lessons that align with the intended learning outcomes.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid'       => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'sections-number' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_number\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Sections number', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'sections-title-length' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_title_length\" value=\"60\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each section title length', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'sections-des-length'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_description_length\" value=\"50\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each section description length', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'lesson-number'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_per_section\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Lessons per Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'lesson-title-length'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_title_length\" value=\"60\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each lesson title length', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'quizzes'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"quizzes_per_section\" value=\"2\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Quizzes per Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'quiz-title-length'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"number\" name=\"quiz_title_length\" value=\"60\" min=\"0\">\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Each quiz title length', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'form-grid-end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'      => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_2(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\r\n-\t\t\t'title'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'   => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'audience'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'target_audience',\r\n-\t\t\t\t\t\t'class_name'    => '',\r\n-\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\r\n-\t\t\t\t\t\t'default_value' => 'Students',\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'tone'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'tone',\r\n-\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'language'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Language', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'language',\r\n-\t\t\t\t\t\t'options' => $options['language'] ?? [],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_3(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'prompt'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\r\n-\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\r\n-\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_step_4(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results lp-ai-course-data-preview-wrap\">\u003C\u002Fdiv>',\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML preview with data received from OpenAI\r\n-\t *\r\n-\t * @param array $data_received\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_preview_with_data( array $data_received ): string {\r\n-\t\t$sections = $data_received['sections'] ?? [];\r\n-\r\n-\t\t$html_section = '';\r\n-\t\tforeach ( $sections as $section ) {\r\n-\t\t\t$section_title = $section['section_title'] ?? '';\r\n-\t\t\t$section_des   = $section['section_description'] ?? '';\r\n-\t\t\t$lessons       = $section['lessons'] ?? [];\r\n-\t\t\t$quizzes       = $section['quizzes'] ?? [];\r\n-\r\n-\t\t\t$html_lessons = '';\r\n-\t\t\tforeach ( $lessons as $lesson ) {\r\n-\t\t\t\t$lesson_title = $lesson['lesson_title'] ?? '';\r\n-\t\t\t\t$lesson_des   = $lesson['lesson_description'] ?? '';\r\n-\r\n-\t\t\t\t$arr_lesson_components = [\r\n-\t\t\t\t\t'wrap'     => '\u003Cli class=\"course-lesson-item\">',\r\n-\t\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"lesson-title\">%s\u003C\u002Fdiv>', esc_html( $lesson_title ) ),\r\n-\t\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"lesson-description\">%s\u003C\u002Fdiv>', esc_html( $lesson_des ) ),\r\n-\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$html_lessons .= Template::combine_components( $arr_lesson_components );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Quizzes\r\n-\t\t\t$html_quizzes = '';\r\n-\t\t\tforeach ( $quizzes as $quiz ) {\r\n-\t\t\t\t$quiz_title = $quiz['quiz_title'] ?? '';\r\n-\t\t\t\t$quiz_des   = $quiz['quiz_description'] ?? '';\r\n-\t\t\t\t$questions  = $quiz['questions'] ?? [];\r\n-\r\n-\t\t\t\t$html_questions = '';\r\n-\t\t\t\tforeach ( $questions as $question ) {\r\n-\t\t\t\t\t$question_title = $question['question_title'] ?? '';\r\n-\t\t\t\t\t$question_des   = $question['question_description'] ?? '';\r\n-\t\t\t\t\t$options        = $question['options'] ?? [];\r\n-\r\n-\t\t\t\t\t$html_options = '';\r\n-\t\t\t\t\tforeach ( $options as $option ) {\r\n-\t\t\t\t\t\t$html_options .= sprintf( '\u003Cli class=\"question-option\">%s\u003C\u002Fli>', esc_html( $option ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$arr_question_components = [\r\n-\t\t\t\t\t\t'wrap'     => '\u003Cli class=\"quiz-question-item\">',\r\n-\t\t\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"question-title\">%s\u003C\u002Fdiv>', esc_html( $question_title ) ),\r\n-\t\t\t\t\t\t'desc'     => sprintf( '\u003Cdiv class=\"question-desc\">%s\u003C\u002Fdiv>', esc_html( $question_des ) ),\r\n-\t\t\t\t\t\t'options'  => sprintf( '\u003Cul class=\"course-question-options\">%s\u003C\u002Ful>', $html_options ),\r\n-\t\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\t$html_questions .= Template::combine_components( $arr_question_components );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$arr_quiz_components = [\r\n-\t\t\t\t\t'wrap'      => '\u003Cdiv class=\"course-quiz-item\">',\r\n-\t\t\t\t\t'title'     => sprintf( '\u003Cdiv class=\"quiz-title\">%s\u003C\u002Fdiv>', esc_html( $quiz_title ) ),\r\n-\t\t\t\t\t'des'       => sprintf( '\u003Cdiv class=\"quiz-description\">%s\u003C\u002Fdiv>', esc_html( $quiz_des ) ),\r\n-\t\t\t\t\t'questions' => sprintf( '\u003Cul class=\"course-questions\">%s\u003C\u002Ful>', $html_questions ),\r\n-\t\t\t\t\t'wrap-end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$html_quizzes .= Template::combine_components( $arr_quiz_components );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$arr_section_components = [\r\n-\t\t\t\t'wrap'     => '\u003Cli class=\"course-section-item\">',\r\n-\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"section-title\">%s\u003C\u002Fdiv>', esc_html( $section_title ) ),\r\n-\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"section-description\">%s\u003C\u002Fdiv>', esc_html( $section_des ) ),\r\n-\t\t\t\t'lessons'  => sprintf( '\u003Cul class=\"course-section-items\">%s\u003C\u002Ful>', $html_lessons ),\r\n-\t\t\t\t'quizzes'  => sprintf( '\u003Cul class=\"course-section-items\">%s\u003C\u002Ful>', $html_quizzes ),\r\n-\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_section .= Template::combine_components( $arr_section_components );\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-ai-course-data-preview\">',\r\n-\t\t\t'sections' => sprintf( '\u003Cul class=\"course-sections\">%s\u003C\u002Ful>', $html_section ),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin\\AI;\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\n+use LP_Debug;\n+use LP_Settings;\n+use Throwable;\n+\n+\u002F**\n+ * Class AdminEditCourseCurriculumWithAITemplate\n+ *\n+ * @since 4.2.9\n+ * @version 1.1.0\n+ *\u002F\n+class AdminEditCourseCurriculumWithAITemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var array|null\n+\t *\u002F\n+\tprivate ?array $config;\n+\n+\t\u002F**\n+\t * Init hooks.\n+\t *\u002F\n+\tpublic function init() {\n+\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Layout popup to generate course curriculum with AI\n+\t *\u002F\n+\tpublic function layout_popup() {\n+\t\ttry {\n+\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$screen  = get_current_screen();\n+\t\t\t$screens = [\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t];\n+\t\t\tif ( ! $screen || in_array( $screen, $screens ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\techo $this->render_for_frontend();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Render curriculum AI popup template for frontend contexts (e.g. Course Builder).\n+\t *\n+\t * @return string\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function render_for_frontend(): string {\n+\t\ttry {\n+\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\n+\n+\t\t\t$components = [\n+\t\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-course-curriculum-ai\">',\n+\t\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t\t'btn-close'                =>\n+\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\t'h2'                       => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Generate Course Sections Curriculum', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'header'                   => $this->html_step_header(),\n+\t\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\n+\t\t\t\t'step_1'                   => $this->html_step_1(),\n+\t\t\t\t'step_2'                   => $this->html_step_2(),\n+\t\t\t\t'step_3'                   => $this->html_step_3(),\n+\t\t\t\t'step_4'                   => $this->html_step_4(),\n+\t\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\n+\t\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\n+\t\t\t\t\tdata-step-show=\"2,3,4\"\n+\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\n+\t\t\t\t\t\tdata-step-show=\"1\"\n+\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"3\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-apply-curriculum lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"4\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\n+\t\t\t\t\tesc_html__( 'Next', 'learnpress' ),\n+\t\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\n+\t\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum', \u002F\u002F define type prompt to generate title.\n+\t\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\n+\t\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'action'         => 'openai_generate_data',\n+\t\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum', \u002F\u002F define type prompt to generate title.\n+\t\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t\tesc_html__( 'Generate Sections Course', 'learnpress' ),\n+\t\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'action' => 'openai_create_course_sections',\n+\t\t\t\t\t\t\t'id_url' => 'openai_create_course_sections',\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t\tesc_html__( 'Apply Sections Data To Curriculum', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t\t];\n+\n+\t\t\treturn Template::combine_components( $components );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\tpublic function html_step_header(): string {\n+\t\t$components = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\n+\t\t\t'step_1'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Curriculum Goal', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_2'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_3'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_4'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Result', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_1(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'            => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\n+\t\t\t'title'           => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 1 — Curriculum Goal', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'     => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Provide the main goal for the curriculum so the system can generate aligned sections and lessons.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'post-title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\n+\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Title refer', 'learnpress' ),\n+\t\t\t\tesc_html__( 'You can edit the course title to better suit the curriculum generation.', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The course title is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'post-content'    => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea class=\"description-refer\" type=\"text\" name=\"post-content\" readonly>\u003C\u002Ftextarea>\n+\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Description refer', 'learnpress' ),\n+\t\t\t\tesc_html__( 'You can edit the course description to better suit the curriculum generation.', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The course description is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'goal'            => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goal\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Goal', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Defines the main objective of your curriculum. This helps the AI generate course sections and lessons that align with the intended learning outcomes.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid'       => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'sections-number' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_number\" value=\"2\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Sections number', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'sections-title-length' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_title_length\" value=\"60\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each section title length', 'learnpress' )\n+\t\t\t),\n+\t\t\t'sections-des-length'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"section_description_length\" value=\"50\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each section description length', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'lesson-number'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_per_section\" value=\"2\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Lessons per Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'lesson-title-length'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"lessons_title_length\" value=\"60\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each lesson title length', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'quizzes'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"quizzes_per_section\" value=\"2\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Quizzes per Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'quiz-title-length'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"number\" name=\"quiz_title_length\" value=\"60\" min=\"0\">\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Each quiz title length', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'form-grid-end'   => '\u003C\u002Fdiv>',\n+\t\t\t'step_close'      => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_2(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\n+\t\t\t'title'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'   => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'audience'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'target_audience',\n+\t\t\t\t\t\t'class_name'    => '',\n+\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\n+\t\t\t\t\t\t'default_value' => 'Students',\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'tone'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'tone',\n+\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'language'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Language', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'language',\n+\t\t\t\t\t\t'options' => $options['language'] ?? [],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\n+\t\t\t'step_close'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_3(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'prompt'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\n+\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\n+\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_step_4(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results lp-ai-course-data-preview-wrap\">\u003C\u002Fdiv>',\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * HTML preview with data received from OpenAI\n+\t *\n+\t * @param array $data_received\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_preview_with_data( array $data_received ): string {\n+\t\t$sections = $data_received['sections'] ?? [];\n+\n+\t\t$html_section = '';\n+\t\tforeach ( $sections as $section ) {\n+\t\t\t$section_title = $section['section_title'] ?? '';\n+\t\t\t$section_des   = $section['section_description'] ?? '';\n+\t\t\t$lessons       = $section['lessons'] ?? [];\n+\t\t\t$quizzes       = $section['quizzes'] ?? [];\n+\n+\t\t\t$html_lessons = '';\n+\t\t\tforeach ( $lessons as $lesson ) {\n+\t\t\t\t$lesson_title = $lesson['lesson_title'] ?? '';\n+\t\t\t\t$lesson_des   = $lesson['lesson_description'] ?? '';\n+\n+\t\t\t\t$arr_lesson_components = [\n+\t\t\t\t\t'wrap'     => '\u003Cli class=\"course-lesson-item\">',\n+\t\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"lesson-title\">%s\u003C\u002Fdiv>', esc_html( $lesson_title ) ),\n+\t\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"lesson-description\">%s\u003C\u002Fdiv>', esc_html( $lesson_des ) ),\n+\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\n+\t\t\t\t];\n+\n+\t\t\t\t$html_lessons .= Template::combine_components( $arr_lesson_components );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Quizzes\n+\t\t\t$html_quizzes = '';\n+\t\t\tforeach ( $quizzes as $quiz ) {\n+\t\t\t\t$quiz_title = $quiz['quiz_title'] ?? '';\n+\t\t\t\t$quiz_des   = $quiz['quiz_description'] ?? '';\n+\t\t\t\t$questions  = $quiz['questions'] ?? [];\n+\n+\t\t\t\t$html_questions = '';\n+\t\t\t\tforeach ( $questions as $question ) {\n+\t\t\t\t\t$question_title = $question['question_title'] ?? '';\n+\t\t\t\t\t$question_des   = $question['question_description'] ?? '';\n+\t\t\t\t\t$options        = $question['options'] ?? [];\n+\n+\t\t\t\t\t$html_options = '';\n+\t\t\t\t\tforeach ( $options as $option ) {\n+\t\t\t\t\t\t$html_options .= sprintf( '\u003Cli class=\"question-option\">%s\u003C\u002Fli>', esc_html( $option ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$arr_question_components = [\n+\t\t\t\t\t\t'wrap'     => '\u003Cli class=\"quiz-question-item\">',\n+\t\t\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"question-title\">%s\u003C\u002Fdiv>', esc_html( $question_title ) ),\n+\t\t\t\t\t\t'desc'     => sprintf( '\u003Cdiv class=\"question-desc\">%s\u003C\u002Fdiv>', esc_html( $question_des ) ),\n+\t\t\t\t\t\t'options'  => sprintf( '\u003Cul class=\"course-question-options\">%s\u003C\u002Ful>', $html_options ),\n+\t\t\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\n+\t\t\t\t\t];\n+\n+\t\t\t\t\t$html_questions .= Template::combine_components( $arr_question_components );\n+\t\t\t\t}\n+\n+\t\t\t\t$arr_quiz_components = [\n+\t\t\t\t\t'wrap'      => '\u003Cdiv class=\"course-quiz-item\">',\n+\t\t\t\t\t'title'     => sprintf( '\u003Cdiv class=\"quiz-title\">%s\u003C\u002Fdiv>', esc_html( $quiz_title ) ),\n+\t\t\t\t\t'des'       => sprintf( '\u003Cdiv class=\"quiz-description\">%s\u003C\u002Fdiv>', esc_html( $quiz_des ) ),\n+\t\t\t\t\t'questions' => sprintf( '\u003Cul class=\"course-questions\">%s\u003C\u002Ful>', $html_questions ),\n+\t\t\t\t\t'wrap-end'  => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$html_quizzes .= Template::combine_components( $arr_quiz_components );\n+\t\t\t}\n+\n+\t\t\t$arr_section_components = [\n+\t\t\t\t'wrap'     => '\u003Cli class=\"course-section-item\">',\n+\t\t\t\t'title'    => sprintf( '\u003Cdiv class=\"section-title\">%s\u003C\u002Fdiv>', esc_html( $section_title ) ),\n+\t\t\t\t'des'      => sprintf( '\u003Cdiv class=\"section-description\">%s\u003C\u002Fdiv>', esc_html( $section_des ) ),\n+\t\t\t\t'lessons'  => sprintf( '\u003Cul class=\"course-section-items\">%s\u003C\u002Ful>', $html_lessons ),\n+\t\t\t\t'quizzes'  => sprintf( '\u003Cul class=\"course-section-items\">%s\u003C\u002Ful>', $html_quizzes ),\n+\t\t\t\t'wrap-end' => '\u003C\u002Fli>',\n+\t\t\t];\n+\n+\t\t\t$html_section .= Template::combine_components( $arr_section_components );\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-ai-course-data-preview\">',\n+\t\t\t'sections' => sprintf( '\u003Cul class=\"course-sections\">%s\u003C\u002Ful>', $html_section ),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,934 +1,971 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Admin\\AI;\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\r\n-use LP_Debug;\r\n-use LP_Settings;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * Class AdminEditWithAITemplate\r\n- *\r\n- * @since 4.2.9\r\n- * @version 1.1.0\r\n- *\u002F\r\n-class AdminEditWithAITemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var array|null\r\n-\t *\u002F\r\n-\tprivate ?array $config;\r\n-\r\n-\t\u002F**\r\n-\t * Init hooks.\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\r\n-\t}\r\n-\r\n-\tpublic function layout_popup() {\r\n-\t\ttry {\r\n-\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$screen  = get_current_screen();\r\n-\t\t\t$screens = [\r\n-\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t];\r\n-\t\t\tif ( ! $screen || in_array( $screen, $screens ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\r\n-\t\t\techo $this->html_edit_title_via_ai();\r\n-\t\t\techo $this->html_edit_description_via_ai();\r\n-\t\t\techo $this->html_edit_image_via_ai();\r\n-\t\t\techo $this->html_edit_curriculum_via_ai();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML generate title with AI.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_title_via_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-title-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t'btn-close'                =>\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generate Course Title', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'header'                   => $this->html_title_step_header(),\r\n-\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\r\n-\t\t\t'step_1'                   => $this->html_title_step_1(),\r\n-\t\t\t'step_2'                   => $this->html_title_step_2(),\r\n-\t\t\t'step_3'                   => $this->html_title_step_3(),\r\n-\t\t\t'step_4'                   => $this->html_title_step_4(),\r\n-\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\tdata-step-show=\"2,3,4\"\r\n-\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\r\n-\t\t\t\t\t\tdata-step-show=\"1\"\r\n-\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"3\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Next', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-title', \u002F\u002F define type prompt to generate title.\r\n-\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_data',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-title', \u002F\u002F define type prompt to generate title.\r\n-\t\t\t\t\t\t'target-apply'   => 'set-wp-title', \u002F\u002F Click apply to apply title to this field.\r\n-\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Title Course', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_title_step_header(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\r\n-\t\t\t'step_1'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_2'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_3'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_4'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Result', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_title_step_1(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'           => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\r\n-\t\t\t'title'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 1 — Configure Course Title', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'    => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Provide the basic information to generate your course title.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'describe-topic' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"topic\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Describe what your course is about', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Provide a short explanation of the subject or skills your course covers. This helps AI understand the overall direction of your title.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'describe-goals' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goals\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Describe the main goals of your course', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Summarize what learners will achieve. AI uses this to make the title more accurate and meaningful.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'length'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"length\" value=\"60\" \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Title Length (characters)', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Set the maximum number of characters for the generated course title. Ideal for SEO and platform display constraints.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close'     => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_title_step_2(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\r\n-\t\t\t'title'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'   => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'audience'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'target_audience',\r\n-\t\t\t\t\t\t'class_name'    => '',\r\n-\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\r\n-\t\t\t\t\t\t'default_value' => 'Students',\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'tone'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'tone',\r\n-\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'language'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Language', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'language',\r\n-\t\t\t\t\t\t'options' => $options['language'] ?? [],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'outputs'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\r\n-\t\t\t\t'\u003Cinput name=\"outputs\" value=\"2\" \u002F>',\r\n-\t\t\t\tesc_html__( 'Select how many title options the system will generate for you.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_title_step_3(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'prompt'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\r\n-\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\r\n-\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_title_step_4(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML list results openAI returned.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_list_results( array $args ): string {\r\n-\t\t$index = $args['index'] ?? 0;\r\n-\t\t$value = $args['value'] ?? '';\r\n-\t\t\u002F\u002F Target is element html to apply value.\r\n-\t\t$target = $args['target-apply'] ?? '';\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'         => '\u003Cdiv class=\"lp-ai-generated-result-item form-group\">',\r\n-\t\t\t'label'        => sprintf(\r\n-\t\t\t\t'\u003Clabel>%s\u003C\u002Flabel>',\r\n-\t\t\t\tsprintf( __( 'Result %d', 'learnpress' ), $index + 1 )\r\n-\t\t\t),\r\n-\t\t\t'textarea'     => sprintf(\r\n-\t\t\t\t'\u003Ctextarea class=\"lp-ai-string-result\" cols=\"3\">%s\u003C\u002Ftextarea>',\r\n-\t\t\t\tesc_attr( $value )\r\n-\t\t\t),\r\n-\t\t\t'copy_button'  => sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"button lp-btn-copy\" data-copy=\"%s\" type=\"button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_attr( $value ),\r\n-\t\t\t\t__( 'Copy', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'apply_button' => sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"button lp-btn-apply button-primary\"\r\n-\t\t\t\t\tdata-apply=\"%s\" type=\"button\" data-target=\"%s\">%s\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_attr( $value ),\r\n-\t\t\t\tesc_attr( $target ),\r\n-\t\t\t\t__( 'Apply', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F***************** Description *****************\u002F\r\n-\t\u002F**\r\n-\t * HTML generate title with AI.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_description_via_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-description-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t'btn-close'                =>\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generate Course Description', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'header'                   => $this->html_description_step_header(),\r\n-\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\r\n-\t\t\t'step_1'                   => $this->html_description_step_1(),\r\n-\t\t\t'step_2'                   => $this->html_description_step_2(),\r\n-\t\t\t'step_3'                   => $this->html_description_step_3(),\r\n-\t\t\t'step_4'                   => $this->html_description_step_4(),\r\n-\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2,3,4\"\r\n-\t\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\r\n-\t\t\t\t\t\tdata-step-show=\"1\"\r\n-\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"3\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Next', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-description',\r\n-\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_data',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-description',\r\n-\t\t\t\t\t\t'target-apply'   => 'set-wp-editor-content', \u002F\u002F Click apply to apply title to this field.\r\n-\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Description Course', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_description_step_header(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\r\n-\t\t\t'step_1'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_2'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_3'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_4'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Result', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_description_step_1(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'           => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\r\n-\t\t\t'title'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 1 — Configure Course Description', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'    => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Provide the information needed to generate your course description.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'refer-title'    => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Title refer', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The title refer to generate a relevant course description. Please enter title first', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The course title is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'describe-topic' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"topic\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Describe what makes this course stand out?', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Provide the main strengths or unique selling points to help the system build a compelling course description.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'length'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"length\" value=\"1000\" \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Description Length (words)', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Set the maximum number of characters for the generated description.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close'     => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_description_step_2(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\r\n-\t\t\t'title'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'   => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'audience'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'target_audience',\r\n-\t\t\t\t\t\t'class_name'    => '',\r\n-\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\r\n-\t\t\t\t\t\t'default_value' => 'Students',\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'tone'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'tone',\r\n-\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\r\n-\t\t\t\t\t\t'multiple'      => true,\r\n-\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'language'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Language', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'language',\r\n-\t\t\t\t\t\t'options' => $options['language'] ?? [],\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'outputs'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\r\n-\t\t\t\t'\u003Cinput name=\"outputs\" value=\"2\" \u002F>'\r\n-\t\t\t),\r\n-\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_description_step_3(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'prompt'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\r\n-\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\r\n-\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_description_step_4(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\t\u002F***************** Image *****************\u002F\r\n-\tpublic function html_edit_image_via_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-image-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t'btn-close'                =>\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\r\n-\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generate Course Image', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'header'                   => $this->html_image_step_header(), \u002F\u002F You can add header if needed.\r\n-\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\r\n-\t\t\t'step-1'                   => $this->html_image_step_1(),\r\n-\t\t\t'step-2'                   => $this->html_image_step_2(),\r\n-\t\t\t'step-3'                   => $this->html_image_step_3(),\r\n-\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"3\">\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2,3\"\r\n-\t\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"0\"\r\n-\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt\"\r\n-\t\t\t\t\t\tdata-step-show=\"1\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-step-show=\"2\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Next', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-image',\r\n-\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_image',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-image',\r\n-\t\t\t\t\t\t'target-apply'   => 'set-wp-editor-content', \u002F\u002F Click apply to apply title to this field.\r\n-\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Image Course', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'post-id'                  => sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"hidden\" name=\"post-id\" value=\"%d\" \u002F>',\r\n-\t\t\t\tget_the_ID()\r\n-\t\t\t),\r\n-\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_image_step_header(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\r\n-\t\t\t'step_1'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course Image config', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_2'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_3'   => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Result', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_image_step_1(): string {\r\n-\t\t$model_type   = LP_Settings::instance()->get( 'open_ai_image_model_type' );\r\n-\t\t$options      = $this->config;\r\n-\t\t$size_opts    = $options[ \"image-size-$model_type\" ] ?? [];\r\n-\t\t$quality_opts = $options[ \"image-quality-$model_type\" ] ?? $options['image-quality'] ?? [];\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'          => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\r\n-\t\t\t'title'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 1 — Config Image', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description'   => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Config your image you want, data will refer course title, course description to generate image.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'from-title'    => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Title Refer', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The title refer to generate a relevant course image. Please enter title first', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'The current course title that will be used as reference during image generation.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'goal'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goal\" placeholder=\"%s\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Goal', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'A brief description of the image you want to generate.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\r\n-\t\t\t'style'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Style', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'          => 'style',\r\n-\t\t\t\t\t\t'options'       => $options['image-style'] ?? [],\r\n-\t\t\t\t\t\t'default_value' => 'Realistic',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Select the visual style such as modern, minimalist, illustration, 3D, etc.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t\u002F*'write-requirement' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"topic\" placeholder=\"%s\" \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Images or icons should be include', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'e.g., books, laptop, graduation cap', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'List the specific elements or icons that should appear in the generated image.', 'learnpress' )\r\n-\t\t\t),*\u002F\r\n-\t\t\t'size'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Size', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'size',\r\n-\t\t\t\t\t\t'options' => $size_opts,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Set the output.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'quality'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t%s\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Quality', 'learnpress' ),\r\n-\t\t\t\tAdminTemplate::html_tom_select(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'name'    => 'quality',\r\n-\t\t\t\t\t\t'options' => $quality_opts,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Select the desired image quality such as standard, high, or premium.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'outputs'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput name=\"outputs\" value=\"2\" type=\"number\" \u002F>\r\n-\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Number of images you want the system to generate (model dall-e-3 only 1 supported).', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_image_step_2(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\r\n-\t\t\t'title'      => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 2 — Prompt Generated', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'prompt'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"form-group\">\r\n-\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\r\n-\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\r\n-\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\r\n-\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'step_close' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_image_step_3(): string {\r\n-\t\t$options = $this->config;\r\n-\r\n-\t\t$components = [\r\n-\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Step 3 — Result', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'description' => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Note: when applying an image, the process can be very slow (about 1 minute or more), depends on the image size. Please wait until it finishes.', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'results'     => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\r\n-\t\t\t'step_close'  => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-\r\n-\tpublic function html_feature_image_created( $args ): string {\r\n-\t\t$src           = $args['src'] ?? '';\r\n-\t\t$post_id       = $args['post-id'] ?? '';\r\n-\t\t$attachment_id = $args['attachment-id'] ?? '';\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"inside\">',\r\n-\t\t\t'preview'  => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"hide-if-no-js\">\r\n-\t\t\t\t\u003Ca href=\"%s\" id=\"set-post-thumbnail\" aria-describedby=\"set-post-thumbnail-desc\" class=\"thickbox\">\r\n-\t\t\t\t\t\u003Cimg width=\"266\" height=\"266\" src=\"%s\" alt=\"\" \u002F>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fp>',\r\n-\t\t\t\tadmin_url( \"media-upload.php?post_id=$post_id&amp;type=image&amp;TB_iframe=1\" ),\r\n-\t\t\t\t$src\r\n-\t\t\t),\r\n-\t\t\t'desc'     => '\u003Cp class=\"hide-if-no-js howto\" id=\"set-post-thumbnail-desc\">Click the image to edit or update\u003C\u002Fp>',\r\n-\t\t\t'remove'   => sprintf(\r\n-\t\t\t\t'\u003Cp class=\"hide-if-no-js\">\u003Ca href=\"#\" id=\"remove-post-thumbnail\">%s\u003C\u002Fa>\u003C\u002Fp>',\r\n-\t\t\t\t__( 'Remove featured image' )\r\n-\t\t\t),\r\n-\t\t\t'input'    => sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"hidden\" id=\"_thumbnail_id\" name=\"_thumbnail_id\" value=\"%d\" \u002F>',\r\n-\t\t\t\t$attachment_id\r\n-\t\t\t),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F***************** Curriculum *****************\u002F\r\n-\tpublic function html_edit_curriculum_via_ai(): string {\r\n-\t\t$components = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-curriculum-ai\">',\r\n-\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\r\n-\t\t\t'h2'                       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Generate Course Curriculum', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'header'                   => '', \u002F\u002F You can add header if needed.\r\n-\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\r\n-\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\r\n-\t\t\t\u002F\u002F Add steps for curriculum generation here.\r\n-\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t'buttons'                  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"1\">\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\r\n-\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'         => 'openai_generate_data',\r\n-\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum',\r\n-\t\t\t\t\t\t'target-apply'   => 'set-course-curriculum', \u002F\u002F Click apply to apply curriculum to this field.\r\n-\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\tesc_html__( 'Generate Course Curriculum', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t'post-id'                  => sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"hidden\" name=\"post-id\" value=\"%d\" \u002F>',\r\n-\t\t\t\tget_the_ID()\r\n-\t\t\t),\r\n-\t\t\t'form-end'                 => '\u003C\u002Fform>',\r\n-\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $components );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Admin\\AI;\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\n+use LP_Debug;\n+use LP_Settings;\n+use Throwable;\n+\n+\u002F**\n+ * Class AdminEditWithAITemplate\n+ *\n+ * @since 4.2.9\n+ * @version 1.1.0\n+ *\u002F\n+class AdminEditWithAITemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var array|null\n+\t *\u002F\n+\tprivate ?array $config;\n+\n+\t\u002F**\n+\t * Init hooks.\n+\t *\u002F\n+\tpublic function init() {\n+\t\tadd_action( 'admin_footer', [ $this, 'layout_popup' ] );\n+\t}\n+\n+\tpublic function layout_popup() {\n+\t\ttry {\n+\t\t\tif ( ! function_exists( 'get_current_screen' ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$screen  = get_current_screen();\n+\t\t\t$screens = [\n+\t\t\t\tLP_COURSE_CPT,\n+\t\t\t];\n+\t\t\tif ( ! $screen || in_array( $screen, $screens ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\n+\t\t\techo $this->html_edit_title_via_ai();\n+\t\t\techo $this->html_edit_description_via_ai();\n+\t\t\techo $this->html_edit_image_via_ai();\n+\t\t\techo $this->html_edit_curriculum_via_ai();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Render AI templates for frontend contexts (e.g. Course Builder).\n+\t *\n+\t * @param array $template_types Supported: title, description, image, curriculum.\n+\t *\n+\t * @return string\n+\t * @since 4.3.0\n+\t *\u002F\n+\tpublic function render_for_frontend( array $template_types = [ 'title', 'description' ] ): string {\n+\t\ttry {\n+\t\t\t$this->config = Config::instance()->get( 'open-ai-modal', 'settings' );\n+\n+\t\t\t$template_map = [\n+\t\t\t\t'title'       => 'html_edit_title_via_ai',\n+\t\t\t\t'description' => 'html_edit_description_via_ai',\n+\t\t\t\t'image'       => 'html_edit_image_via_ai',\n+\t\t\t\t'curriculum'  => 'html_edit_curriculum_via_ai',\n+\t\t\t];\n+\n+\t\t\t$output = '';\n+\t\t\tforeach ( $template_types as $template_type ) {\n+\t\t\t\t$method = $template_map[ $template_type ] ?? '';\n+\t\t\t\tif ( ! $method || ! method_exists( $this, $method ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$output .= $this->{$method}();\n+\t\t\t}\n+\n+\t\t\treturn $output;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn '';\n+\t}\n+\n+\t\u002F**\n+\t * HTML generate title with AI.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_title_via_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-title-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t'btn-close'                =>\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generate Course Title', 'learnpress' )\n+\t\t\t),\n+\t\t\t'header'                   => $this->html_title_step_header(),\n+\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\n+\t\t\t'step_1'                   => $this->html_title_step_1(),\n+\t\t\t'step_2'                   => $this->html_title_step_2(),\n+\t\t\t'step_3'                   => $this->html_title_step_3(),\n+\t\t\t'step_4'                   => $this->html_title_step_4(),\n+\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\n+\t\t\t\t\tdata-step-show=\"2,3,4\"\n+\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\n+\t\t\t\t\t\tdata-step-show=\"1\"\n+\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"3\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Next', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-title', \u002F\u002F define type prompt to generate title.\n+\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_data',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-title', \u002F\u002F define type prompt to generate title.\n+\t\t\t\t\t\t'target-apply'   => 'set-wp-title', \u002F\u002F Click apply to apply title to this field.\n+\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Title Course', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_title_step_header(): string {\n+\t\t$components = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\n+\t\t\t'step_1'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_2'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_3'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_4'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Result', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_title_step_1(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'           => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\n+\t\t\t'title'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 1 — Configure Course Title', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'    => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Provide the basic information to generate your course title.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'describe-topic' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"topic\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Describe what your course is about', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Provide a short explanation of the subject or skills your course covers. This helps AI understand the overall direction of your title.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'describe-goals' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goals\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Describe the main goals of your course', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Summarize what learners will achieve. AI uses this to make the title more accurate and meaningful.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'length'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"length\" value=\"60\" \u002F>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Title Length (characters)', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Set the maximum number of characters for the generated course title. Ideal for SEO and platform display constraints.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close'     => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_title_step_2(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\n+\t\t\t'title'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'   => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'audience'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'target_audience',\n+\t\t\t\t\t\t'class_name'    => '',\n+\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\n+\t\t\t\t\t\t'default_value' => 'Students',\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'tone'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'tone',\n+\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'language'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Language', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'language',\n+\t\t\t\t\t\t'options' => $options['language'] ?? [],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'outputs'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\n+\t\t\t\t'\u003Cinput name=\"outputs\" value=\"2\" \u002F>',\n+\t\t\t\tesc_html__( 'Select how many title options the system will generate for you.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\n+\t\t\t'step_close'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_title_step_3(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'prompt'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\n+\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\n+\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_title_step_4(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F**\n+\t * HTML list results openAI returned.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_list_results( array $args ): string {\n+\t\t$index = $args['index'] ?? 0;\n+\t\t$value = $args['value'] ?? '';\n+\t\t\u002F\u002F Target is element html to apply value.\n+\t\t$target = $args['target-apply'] ?? '';\n+\n+\t\t$section = [\n+\t\t\t'wrap'         => '\u003Cdiv class=\"lp-ai-generated-result-item form-group\">',\n+\t\t\t'label'        => sprintf(\n+\t\t\t\t'\u003Clabel>%s\u003C\u002Flabel>',\n+\t\t\t\tsprintf( __( 'Result %d', 'learnpress' ), $index + 1 )\n+\t\t\t),\n+\t\t\t'textarea'     => sprintf(\n+\t\t\t\t'\u003Ctextarea class=\"lp-ai-string-result\" cols=\"3\">%s\u003C\u002Ftextarea>',\n+\t\t\t\tesc_attr( $value )\n+\t\t\t),\n+\t\t\t'copy_button'  => sprintf(\n+\t\t\t\t'\u003Cbutton class=\"button lp-btn-copy\" data-copy=\"%s\" type=\"button\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_attr( $value ),\n+\t\t\t\t__( 'Copy', 'learnpress' )\n+\t\t\t),\n+\t\t\t'apply_button' => sprintf(\n+\t\t\t\t'\u003Cbutton class=\"button lp-btn-apply button-primary\"\n+\t\t\t\t\tdata-apply=\"%s\" type=\"button\" data-target=\"%s\">%s\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\tesc_attr( $value ),\n+\t\t\t\tesc_attr( $target ),\n+\t\t\t\t__( 'Apply', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap_end'     => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F***************** Description *****************\u002F\n+\t\u002F**\n+\t * HTML generate title with AI.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_description_via_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-description-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t'btn-close'                =>\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generate Course Description', 'learnpress' )\n+\t\t\t),\n+\t\t\t'header'                   => $this->html_description_step_header(),\n+\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\n+\t\t\t'step_1'                   => $this->html_description_step_1(),\n+\t\t\t'step_2'                   => $this->html_description_step_2(),\n+\t\t\t'step_3'                   => $this->html_description_step_3(),\n+\t\t\t'step_4'                   => $this->html_description_step_4(),\n+\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"4\">\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2,3,4\"\n+\t\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step\"\n+\t\t\t\t\t\tdata-step-show=\"1\"\n+\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"3\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Next', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-description',\n+\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_data',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-description',\n+\t\t\t\t\t\t'target-apply'   => 'set-wp-editor-content', \u002F\u002F Click apply to apply title to this field.\n+\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Description Course', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_description_step_header(): string {\n+\t\t$components = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\n+\t\t\t'step_1'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course Goal', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_2'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'AI Settings', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_3'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_4'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"4\">\u003Cspan class=\"step-number\">4\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Result', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_description_step_1(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'           => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\n+\t\t\t'title'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 1 — Configure Course Description', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'    => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Provide the information needed to generate your course description.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'refer-title'    => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\n+\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Title refer', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The title refer to generate a relevant course description. Please enter title first', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The course title is automatically imported from the previous step. It will guide the AI to build a structured curriculum.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'describe-topic' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"topic\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Describe what makes this course stand out?', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Provide the main strengths or unique selling points to help the system build a compelling course description.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'length'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"length\" value=\"1000\" \u002F>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Description Length (words)', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Set the maximum number of characters for the generated description.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close'     => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_description_step_2(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'          => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\n+\t\t\t'title'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 2 — AI Settings', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'   => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Configure content quality controls for ChatGPT output.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'audience'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Target Audience', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'target_audience',\n+\t\t\t\t\t\t'class_name'    => '',\n+\t\t\t\t\t\t'options'       => $options['audience'] ?? [],\n+\t\t\t\t\t\t'default_value' => 'Students',\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Identifies who will take the course so the content matches their background and skill level.', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'tone'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel for=\"swal-tone\">%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Tone', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'tone',\n+\t\t\t\t\t\t'options'       => $options['tone'] ?? [],\n+\t\t\t\t\t\t'multiple'      => true,\n+\t\t\t\t\t\t'default_value' => [ 'Analytical' ],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'language'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Language', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'language',\n+\t\t\t\t\t\t'options' => $options['language'] ?? [],\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Sets the output language for all generated course content.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'outputs'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\n+\t\t\t\t'\u003Cinput name=\"outputs\" value=\"2\" \u002F>'\n+\t\t\t),\n+\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\n+\t\t\t'step_close'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_description_step_3(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 3 — Prompt Generated', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'prompt'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\n+\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\n+\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_description_step_4(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"4\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 4 — Result', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'results'    => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\t\u002F***************** Image *****************\u002F\n+\tpublic function html_edit_image_via_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-image-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t'btn-close'                =>\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-close-ai-popup\">\n+\t\t\t\t\t\u003Ci class=\"lp-icon-remove\">\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generate Course Image', 'learnpress' )\n+\t\t\t),\n+\t\t\t'header'                   => $this->html_image_step_header(), \u002F\u002F You can add header if needed.\n+\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\n+\t\t\t'step-1'                   => $this->html_image_step_1(),\n+\t\t\t'step-2'                   => $this->html_image_step_2(),\n+\t\t\t'step-3'                   => $this->html_image_step_3(),\n+\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"3\">\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-secondary lp-btn-step lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2,3\"\n+\t\t\t\t\t\tdata-action=\"prev\" type=\"button\">&larr; %s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"btn btn-primary lp-btn-step lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"0\"\n+\t\t\t\t\t\tdata-action=\"next\" type=\"button\">%s &rarr;\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-generate-prompt\"\n+\t\t\t\t\t\tdata-step-show=\"1\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-step-show=\"2\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Previous', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Next', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_prompt',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-image',\n+\t\t\t\t\t\t'id_url'         => 'generate_prompt_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Prompt', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_image',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-image',\n+\t\t\t\t\t\t'target-apply'   => 'set-wp-editor-content', \u002F\u002F Click apply to apply title to this field.\n+\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Image Course', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'post-id'                  => sprintf(\n+\t\t\t\t'\u003Cinput type=\"hidden\" name=\"post-id\" value=\"%d\" \u002F>',\n+\t\t\t\tget_the_ID()\n+\t\t\t),\n+\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_image_step_header(): string {\n+\t\t$components = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"step-header\">',\n+\t\t\t'step_1'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item active\" data-step=\"1\">\u003Cspan class=\"step-number\">1\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course Image config', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_2'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"2\">\u003Cspan class=\"step-number\">2\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Prompt', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_3'   => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-item\" data-step=\"3\">\u003Cspan class=\"step-number\">3\u003C\u002Fspan>\u003Cspan class=\"step-text\">%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Result', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_image_step_1(): string {\n+\t\t$model_type   = LP_Settings::instance()->get( 'open_ai_image_model_type' );\n+\t\t$options      = $this->config;\n+\t\t$size_opts    = $options[ \"image-size-$model_type\" ] ?? [];\n+\t\t$quality_opts = $options[ \"image-quality-$model_type\" ] ?? $options['image-quality'] ?? [];\n+\n+\t\t$components = [\n+\t\t\t'step'          => '\u003Cdiv class=\"step-content active\" data-step=\"1\">',\n+\t\t\t'title'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 1 — Config Image', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description'   => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Config your image you want, data will refer course title, course description to generate image.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'from-title'    => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput class=\"title-refer\" type=\"text\" name=\"post-title\" readonly \u002F>\n+\t\t\t\t\t\u003Cp class=\"lp-ai-warning-refer lp-hidden\">\u003Ci class=\"lp-icon-warning\">\u003C\u002Fi>%s\u003C\u002Fp>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Title Refer', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The title refer to generate a relevant course image. Please enter title first', 'learnpress' ),\n+\t\t\t\tesc_html__( 'The current course title that will be used as reference during image generation.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'goal'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea type=\"text\" name=\"goal\" placeholder=\"%s\">\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Goal', 'learnpress' ),\n+\t\t\t\tesc_html__( 'A brief description of the image you want to generate.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid'     => '\u003Cdiv class=\"form-grid\">',\n+\t\t\t'style'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Style', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'          => 'style',\n+\t\t\t\t\t\t'options'       => $options['image-style'] ?? [],\n+\t\t\t\t\t\t'default_value' => 'Realistic',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Select the visual style such as modern, minimalist, illustration, 3D, etc.', 'learnpress' )\n+\t\t\t),\n+\t\t\t\u002F*'write-requirement' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"topic\" placeholder=\"%s\" \u002F>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Images or icons should be include', 'learnpress' ),\n+\t\t\t\tesc_html__( 'e.g., books, laptop, graduation cap', 'learnpress' ),\n+\t\t\t\tesc_html__( 'List the specific elements or icons that should appear in the generated image.', 'learnpress' )\n+\t\t\t),*\u002F\n+\t\t\t'size'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Size', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'size',\n+\t\t\t\t\t\t'options' => $size_opts,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Set the output.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'quality'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t%s\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Quality', 'learnpress' ),\n+\t\t\t\tAdminTemplate::html_tom_select(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'name'    => 'quality',\n+\t\t\t\t\t\t'options' => $quality_opts,\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Select the desired image quality such as standard, high, or premium.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'outputs'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput name=\"outputs\" value=\"2\" type=\"number\" \u002F>\n+\t\t\t\t\t\u003Cp class=\"field-description\">%s\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Outputs', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Number of images you want the system to generate (model dall-e-3 only 1 supported).', 'learnpress' )\n+\t\t\t),\n+\t\t\t'form-grid-end' => '\u003C\u002Fdiv>',\n+\t\t\t'step_close'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_image_step_2(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'       => '\u003Cdiv class=\"step-content\" data-step=\"2\">',\n+\t\t\t'title'      => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 2 — Prompt Generated', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'prompt'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"form-group\">\n+\t\t\t\t\t\u003Clabel>%s\u003C\u002Flabel>%s\n+\t\t\t\t\t\u003Ci>%s\u003C\u002Fi>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generated Prompt', 'learnpress' ),\n+\t\t\t\t'\u003Ctextarea name=\"lp-openai-prompt-generated-field\">\u003C\u002Ftextarea>',\n+\t\t\t\t__( 'Shows the auto-generated AI prompt, allowing further adjustments before submission.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'step_close' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_image_step_3(): string {\n+\t\t$options = $this->config;\n+\n+\t\t$components = [\n+\t\t\t'step'        => '\u003Cdiv class=\"step-content\" data-step=\"3\">',\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"step-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Step 3 — Result', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'description' => sprintf(\n+\t\t\t\t'\u003Cp class=\"step-description\">%s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Note: when applying an image, the process can be very slow (about 1 minute or more), depends on the image size. Please wait until it finishes.', 'learnpress' )\n+\t\t\t),\n+\t\t\t'results'     => '\u003Cdiv class=\"lp-ai-generated-results\">\u003C\u002Fdiv>',\n+\t\t\t'step_close'  => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+\n+\tpublic function html_feature_image_created( $args ): string {\n+\t\t$src           = $args['src'] ?? '';\n+\t\t$post_id       = $args['post-id'] ?? '';\n+\t\t$attachment_id = $args['attachment-id'] ?? '';\n+\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"inside\">',\n+\t\t\t'preview'  => sprintf(\n+\t\t\t\t'\u003Cp class=\"hide-if-no-js\">\n+\t\t\t\t\u003Ca href=\"%s\" id=\"set-post-thumbnail\" aria-describedby=\"set-post-thumbnail-desc\" class=\"thickbox\">\n+\t\t\t\t\t\u003Cimg width=\"266\" height=\"266\" src=\"%s\" alt=\"\" \u002F>\n+\t\t\t\t\u003C\u002Fa>\n+\t\t\t\u003C\u002Fp>',\n+\t\t\t\tadmin_url( \"media-upload.php?post_id=$post_id&amp;type=image&amp;TB_iframe=1\" ),\n+\t\t\t\t$src\n+\t\t\t),\n+\t\t\t'desc'     => '\u003Cp class=\"hide-if-no-js howto\" id=\"set-post-thumbnail-desc\">Click the image to edit or update\u003C\u002Fp>',\n+\t\t\t'remove'   => sprintf(\n+\t\t\t\t'\u003Cp class=\"hide-if-no-js\">\u003Ca href=\"#\" id=\"remove-post-thumbnail\">%s\u003C\u002Fa>\u003C\u002Fp>',\n+\t\t\t\t__( 'Remove featured image' )\n+\t\t\t),\n+\t\t\t'input'    => sprintf(\n+\t\t\t\t'\u003Cinput type=\"hidden\" id=\"_thumbnail_id\" name=\"_thumbnail_id\" value=\"%d\" \u002F>',\n+\t\t\t\t$attachment_id\n+\t\t\t),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F***************** Curriculum *****************\u002F\n+\tpublic function html_edit_curriculum_via_ai(): string {\n+\t\t$components = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-edit-curriculum-ai\">',\n+\t\t\t'wrap'                     => '\u003Cdiv class=\"lp-generate-data-ai-wrap\">',\n+\t\t\t'h2'                       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"content-title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Generate Course Curriculum', 'learnpress' )\n+\t\t\t),\n+\t\t\t'header'                   => '', \u002F\u002F You can add header if needed.\n+\t\t\t'form'                     => '\u003Cform class=\"lp-form-generate-data-ai\">',\n+\t\t\t'wrap-fields'              => '\u003Cdiv class=\"lp-form-fields\">',\n+\t\t\t\u002F\u002F Add steps for curriculum generation here.\n+\t\t\t'wrap-fields-end'          => '\u003C\u002Fdiv>',\n+\t\t\t'buttons'                  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"button-actions\" data-step=\"1\" data-step-max=\"1\">\n+\t\t\t\t\t\u003Cbutton class=\"lp-button btn-primary lp-btn-call-open-ai lp-hidden\"\n+\t\t\t\t\t\tdata-send=\"%s\" type=\"button\">%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'         => 'openai_generate_data',\n+\t\t\t\t\t\t'lp-prompt-type' => 'course-curriculum',\n+\t\t\t\t\t\t'target-apply'   => 'set-course-curriculum', \u002F\u002F Click apply to apply curriculum to this field.\n+\t\t\t\t\t\t'id_url'         => 'submit_to_openai',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\tesc_html__( 'Generate Course Curriculum', 'learnpress' ),\n+\t\t\t),\n+\t\t\t'post-id'                  => sprintf(\n+\t\t\t\t'\u003Cinput type=\"hidden\" name=\"post-id\" value=\"%d\" \u002F>',\n+\t\t\t\tget_the_ID()\n+\t\t\t),\n+\t\t\t'form-end'                 => '\u003C\u002Fform>',\n+\t\t\t'wrap-end'                 => '\u003C\u002Fdiv>',\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fscript>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $components );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,710 +1,743 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\PostFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Database;\r\n-use LP_Post_DB;\r\n-use LP_Post_Type_Filter;\r\n-use stdClass;\r\n-\r\n-\u002F**\r\n- * Template hooks Admin Edit Course Curriculum.\r\n- *\r\n- * @since 4.2.8.6\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminEditCurriculumTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * Course model.\r\n-\t *\r\n-\t * @var CourseModel\r\n-\t *\u002F\r\n-\tpublic $courseModel;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-curriculum\u002Flayout', [ $this, 'edit_course_curriculum_layout' ] );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout for edit course curriculum.\r\n-\t *\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function edit_course_curriculum_layout( CourseModel $courseModel ) {\r\n-\t\twp_enqueue_style( 'lp-edit-curriculum' );\r\n-\t\twp_enqueue_script( 'lp-edit-course' );\r\n-\r\n-\t\t$args      = [\r\n-\t\t\t'id_url'    => 'edit-course-curriculum',\r\n-\t\t\t'course_id' => $courseModel->ID,\r\n-\t\t];\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_edit_course_curriculum',\r\n-\t\t);\r\n-\r\n-\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t * @use self::render_edit_course_curriculum\r\n-\t * @use self::render_html\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_edit_course_curriculum';\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_list_items_not_assign';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render edit course curriculum html.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function render_edit_course_curriculum( array $data ): stdClass {\r\n-\t\t$course_id   = $data['course_id'] ?? 0;\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\tself::instance()->courseModel = $courseModel;\r\n-\r\n-\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\tif ( ! $coursePostModel->check_capabilities_create() ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to edit this course', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = self::instance()->html_edit_curriculum( $courseModel );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit curriculum.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_curriculum( CourseModel $courseModel ): string {\r\n-\t\t$html_sections = '';\r\n-\r\n-\t\t\u002F\u002F Get sections items\r\n-\t\t$sections_items = $courseModel->get_section_items();\r\n-\t\t$count_sections = count( $sections_items );\r\n-\r\n-\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t$html_sections .= $this->html_edit_section( $courseModel, $section_items );\r\n-\t\t}\r\n-\r\n-\t\t$sections = [\r\n-\t\t\t'wrap'          => '\u003Cdiv class=\"curriculum-sections\">',\r\n-\t\t\t'list-sections' => $html_sections,\r\n-\t\t\t'section-clone' => $this->html_edit_section( $courseModel ),\r\n-\t\t\t'wrap_end'      => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'            => '\u003Cdiv id=\"lp-course-edit-curriculum\">',\r\n-\t\t\t'heading'         => '\u003Cdiv class=\"heading\">',\r\n-\t\t\t'h4'              => sprintf(\r\n-\t\t\t\t'\u003Ch4>%s\u003C\u002Fh4>',\r\n-\t\t\t\t__( 'Details', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'count-sections'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"count-sections\" data-count=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$count_sections,\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\r\n-\t\t\t\t\t$count_sections,\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t__( 'Section', 'learnpress' ),\r\n-\t\t\t\t\t\t__( 'Sections', 'learnpress' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'count-items'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"total-items\" data-count=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$courseModel->count_items(),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\r\n-\t\t\t\t\t$courseModel->count_items(),\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t__( 'Item', 'learnpress' ),\r\n-\t\t\t\t\t\t__( 'Items', 'learnpress' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'section-toggle'  =>\r\n-\t\t\t\t'\u003Cdiv class=\"course-toggle-all-sections lp-collapse\">\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'heading_end'     => '\u003C\u002Fdiv>',\r\n-\t\t\t'sections'        => Template::combine_components( $sections ),\r\n-\t\t\t'add_new_section' => $this->html_add_new_section(),\r\n-\t\t\t'select_items'    => $this->html_popup_items_to_select_clone( $courseModel ),\r\n-\t\t\t'wrap_end'        => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for edit section.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param null|object $section_items\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_section( CourseModel $courseModel, $section_items = null ): string {\r\n-\t\t$is_clone     = is_null( $section_items );\r\n-\t\t$total_items  = 0;\r\n-\t\t$items        = [];\r\n-\t\t$html_items   = '';\r\n-\t\t$section_id   = $section_items->section_id ?? 0;\r\n-\t\t$section_name = $section_items->section_name ?? '';\r\n-\r\n-\t\tif ( ! $is_clone ) {\r\n-\t\t\t$total_items = count( $section_items->items ?? [] );\r\n-\t\t\t$items       = $section_items->items ?? [];\r\n-\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t$html_items .= $this->html_section_item( $courseModel, $item );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section_list_items = [\r\n-\t\t\t'wrap'       => '\u003Cul class=\"section-list-items\">',\r\n-\t\t\t'items'      => $html_items,\r\n-\t\t\t'item_clone' => $this->html_section_item( $courseModel ),\r\n-\t\t\t'wrap_end'   => '\u003C\u002Ful>',\r\n-\t\t];\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'                 => sprintf(\r\n-\t\t\t\t'\u003Cdiv data-section-id=\"%s\" class=\"section lp-collapse %s\">',\r\n-\t\t\t\t$section_id,\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : ''\r\n-\t\t\t),\r\n-\t\t\t'head'                 => '\u003Cdiv class=\"section-head\">',\r\n-\t\t\t'drag'                 => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Drag to reorder section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'loading'              => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t'title'                => $this->html_input_section_title( $section_name ),\r\n-\t\t\t'btn-edit'             => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"lp-btn-edit-section-title lp-icon-edit\" title=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Edit section title', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-delete'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-delete-section button\"\r\n-\t\t\t\t\tdata-send=\"%s\"\r\n-\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">%s\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'    => 'course_delete_section',\r\n-\t\t\t\t\t\t'course_id' => $courseModel->get_id(),\r\n-\t\t\t\t\t\t'id_url'    => 'course-delete-section',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t\t__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\t__( 'This section will be deleted. The items in this section will no longer be assigned to this course, but will not be permanently deleted.', 'learnpress' ),\r\n-\t\t\t\t__( 'Delete Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-update'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-section-title button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Update' )\r\n-\t\t\t),\r\n-\t\t\t'btn-cancel'           => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-section-title button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Cancel' )\r\n-\t\t\t),\r\n-\t\t\t'count-items'          => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"section-items-counts\" data-count=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$total_items,\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\r\n-\t\t\t\t\t$total_items,\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t__( 'Item', 'learnpress' ),\r\n-\t\t\t\t\t\t__( 'Items', 'learnpress' )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'toggle'               => '\u003Cdiv class=\"section-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t'head_end'             => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap_content'         => '\u003Cdiv class=\"section-collapse\">',\r\n-\t\t\t'section-content'      => '\u003Cdiv class=\"section-content\">',\r\n-\t\t\t'section-description'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"section-description\">%s%s%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$this->html_edit_section_description( $section_items->section_description ?? '' ),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-section-description button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t__( 'Update' )\r\n-\t\t\t\t),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-section-description button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t__( 'Cancel' )\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'section-list-items'   => Template::combine_components( $section_list_items ),\r\n-\t\t\t'section-content-end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t'section-item-actions' => $this->html_section_item_actions(),\r\n-\t\t\t'wrap_content_end'     => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap_end'             => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML input section title.\r\n-\t *\r\n-\t * @param string $section_name\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_input_section_title( string $section_name = '' ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Cinput class=\"lp-section-title-input\"\r\n-\t\t\t\tname=\"lp-section-title-input\"\r\n-\t\t\t\ttype=\"text\"\r\n-\t\t\t\tvalue=\"%1$s\"\r\n-\t\t\t\tdata-old=\"%1$s\"\r\n-\t\t\t\tplaceholder=\"%2$s\"\r\n-\t\t\t\tdata-mess-empty-title=\"%3$s\"\r\n-\t\t\t\tdata-send=\"%4$s\">',\r\n-\t\t\tesc_attr( $section_name ),\r\n-\t\t\tesc_attr__( 'Update section title', 'learnpress' ),\r\n-\t\t\tesc_attr__( 'Section title is required', 'learnpress' ),\r\n-\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'action'    => 'course_update_section',\r\n-\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\r\n-\t\t\t\t\t'id_url'    => 'course-update-section-title',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for section description input.\r\n-\t *\r\n-\t * @param string|null $section_description\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_edit_section_description( string $section_description = '' ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Ctextarea class=\"lp-section-description-input\"\r\n-\t\t\t\tname=\"lp-section-description-input\"\r\n-\t\t\t\ttype=\"text\"\r\n-\t\t\t\tdata-old=\"%1$s\"\r\n-\t\t\t\tplaceholder=\"%2$s\"\r\n-\t\t\t\tdata-send=\"%3$s\">%1$s\u003C\u002Ftextarea>',\r\n-\t\t\tesc_attr( $section_description ),\r\n-\t\t\tesc_attr__( '+ Add Description', 'learnpress' ),\r\n-\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'action'    => 'course_update_section',\r\n-\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\r\n-\t\t\t\t\t'id_url'    => 'course-update-section-description',\r\n-\t\t\t\t]\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML add new section.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_add_new_section(): string {\r\n-\t\t$section = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"add-new-section\">',\r\n-\t\t\t'icon'     => '\u003Cspan class=\"lp-icon-plus\">\u003C\u002Fspan>',\r\n-\t\t\t'input'    => sprintf(\r\n-\t\t\t\t'\u003Cinput class=\"lp-section-title-new-input\"\r\n-\t\t\t\t\tname=\"lp-section-title-new-input\"\r\n-\t\t\t\t\ttype=\"text\"\r\n-\t\t\t\t\ttitle=\"%1$s\"\r\n-\t\t\t\t\tplaceholder=\"%1$s\"\r\n-\t\t\t\t\tdata-mess-empty-title=\"%2$s\"\r\n-\t\t\t\t\tdata-send=\"%3$s\">',\r\n-\t\t\t\tesc_attr__( 'Create a new section', 'learnpress' ),\r\n-\t\t\t\tesc_attr__( 'Section title is required', 'learnpress' ),\r\n-\t\t\t\tTemplate::convert_data_to_json(\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'action'    => 'course_add_section',\r\n-\t\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\r\n-\t\t\t\t\t\t'id_url'    => 'course-add-section',\r\n-\t\t\t\t\t]\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\t'button'   => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tclass=\"lp-btn-add-section button lp-btn-edit-primary\">%s\r\n-\t\t\t\t\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Add Section', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for section item.\r\n-\t * $item is null when clone item new\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param null|object $item\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_section_item( CourseModel $courseModel, $item = null ): string {\r\n-\t\t$is_clone   = is_null( $item );\r\n-\t\t$item_id    = $item->item_id ?? 0;\r\n-\t\t$item_title = $item->title ?? '';\r\n-\t\t$item_type  = $item->item_type ?? '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var $itemModel PostModel\r\n-\t\t *\u002F\r\n-\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\r\n-\t\t$section_action = [\r\n-\t\t\t'wrap'     => '\u003Cul class=\"item-actions\">',\r\n-\t\t\t'preview'  => sprintf(\r\n-\t\t\t\t'\u003Cli title=\"%s\" class=\"lp-btn-set-preview-item\">\u003Ca class=\"%s\">\u003C\u002Fa>\u003C\u002Fli>',\r\n-\t\t\t\t__( 'Enable\u002FDisable Preview', 'learnpress' ),\r\n-\t\t\t\t$itemModel && $itemModel->post_type === LP_LESSON_CPT\r\n-\t\t\t\t&& $itemModel->has_preview() ? 'lp-icon-eye' : 'lp-icon-eye-slash'\r\n-\t\t\t),\r\n-\t\t\t'edit'     => sprintf(\r\n-\t\t\t\t'\u003Cli title=\"%s\">\u003Ca href=\"%s\" target=\"_blank\" class=\"lp-icon-edit-square edit-link\">\u003C\u002Fa>\u003C\u002Fli>',\r\n-\t\t\t\t__( 'Edit item detail', 'learnpress' ),\r\n-\t\t\t\t$itemModel ? $itemModel->get_edit_link() : ''\r\n-\t\t\t),\r\n-\t\t\t'delete'   => sprintf(\r\n-\t\t\t\t'\u003Cli class=\"action lp-btn-delete-item\"\r\n-\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">%s\u003C\u002Fli>',\r\n-\t\t\t\t__( 'Are you sure?', 'learnpress' ),\r\n-\t\t\t\t__( 'This item will be removed from this section. This item will no longer be assigned to this course. It will not be permanently deleted from the system.', 'learnpress' ),\r\n-\t\t\t\tsprintf( '\u003Ca class=\"lp-icon-trash-o\" title=\"%s\">\u003C\u002Fa>', __( 'Remove item', 'learnpress' ) )\r\n-\t\t\t),\r\n-\t\t\t'wrap_end' => '\u003C\u002Ful>',\r\n-\t\t];\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'li'           => sprintf(\r\n-\t\t\t\t'\u003Cli data-item-id=\"%s\" data-item-type=\"%s\" class=\"section-item %s %s\">',\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$item_type,\r\n-\t\t\t\t$item_type,\r\n-\t\t\t\t$is_clone ? 'clone lp-hidden' : ''\r\n-\t\t\t),\r\n-\t\t\t'drag'         => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\t__( 'Drag to reorder item', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'icon'         => '\u003Cdiv class=\"item-ico-type\">\u003C\u002Fdiv>',\r\n-\t\t\t'loading'      => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\r\n-\t\t\t'input-title'  => sprintf(\r\n-\t\t\t\t'\u003Cinput name=\"%1$s\" class=\"%1$s\" type=\"text\" value=\"%2$s\" data-old=\"%2$s\" data-mess-empty-title=\"%3$s\">',\r\n-\t\t\t\t'lp-item-title-input',\r\n-\t\t\t\twp_kses_post( $item_title ),\r\n-\t\t\t\tesc_attr__( 'Item title is required', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'btn-update'   => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-item-title button button-primary\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Update' )\r\n-\t\t\t),\r\n-\t\t\t'btn-cancel'   => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-item-title button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Cancel' )\r\n-\t\t\t),\r\n-\t\t\t'item_actions' => Template::combine_components( $section_action ),\r\n-\t\t\t'li_end'       => '\u003C\u002Fli>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\tpublic function html_section_item_actions(): string {\r\n-\t\t$course_item_types = CourseModel::item_types_support();\r\n-\r\n-\t\t$html_buttons = '';\r\n-\t\tforeach ( $course_item_types as $type ) {\r\n-\t\t\t$item_label = CourseModel::item_types_label( $type );\r\n-\r\n-\t\t\t$html_buttons .= sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"lp-btn-select-item-type button\"\r\n-\t\t\t\t\tdata-item-type=\"%s\"\r\n-\t\t\t\t\tdata-placeholder=\"%s\"\r\n-\t\t\t\t\tdata-button-add-text=\"%s\"\r\n-\t\t\t\t\ttype=\"button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t$type,\r\n-\t\t\t\tsprintf( __( 'Create a new %s', 'learnpress' ), $item_label ),\r\n-\t\t\t\tsprintf( __( 'Add %s', 'learnpress' ), $item_label ),\r\n-\t\t\t\tsprintf( __( 'New %s', 'learnpress' ), $item_label )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap'             => '\u003Cdiv class=\"section-actions\">',\r\n-\t\t\t'buttons'          => $html_buttons,\r\n-\t\t\t'btn-select-items' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\"\r\n-\t\t\t\t\tdata-template=\"#lp-tmpl-select-course-items-bank\"\r\n-\t\t\t\t\tclass=\"button lp-btn-show-popup-items-to-select\">\r\n-\t\t\t\t\t%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Content Bank', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'add-item-type'    => $this->html_add_item_type(),\r\n-\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for section item new.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_add_item_type(): string {\r\n-\t\t$section = [\r\n-\t\t\t'wrap'          => '\u003Cdiv class=\"lp-add-item-type clone lp-hidden\">',\r\n-\t\t\t'icon-plus'     => '\u003Cdiv class=\"lp-icon-plus\">\u003C\u002Fdiv>',\r\n-\t\t\t'item-ico-type' => '\u003Cdiv class=\"item-ico-type\">\u003C\u002Fdiv>',\r\n-\t\t\t'actions'       => '\u003Cdiv class=\"new-item-actions\">',\r\n-\t\t\t'input'         => sprintf(\r\n-\t\t\t\t'\u003Cinput class=\"%1$s\" name=\"%1$s\" data-mess-empty-title=\"%2$s\" type=\"text\"\u002F>',\r\n-\t\t\t\t'lp-add-item-type-title-input',\r\n-\t\t\t\tesc_attr__( 'Item title is required', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'button_add'    => '\u003Cbutton class=\"lp-btn-add-item button button-primary\" type=\"button\">\u003C\u002Fbutton>',\r\n-\t\t\t'button_cancel' => sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"lp-btn-add-item-cancel button\" type=\"button\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Cancel' )\r\n-\t\t\t),\r\n-\t\t\t'actions_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrap_end'      => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for popup items to select.\r\n-\t *\r\n-\t * @param CourseModel $course_model\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_popup_items_to_select_clone( CourseModel $course_model ): string {\r\n-\t\t\u002F**\r\n-\t\t * @uses self::render_list_items_not_assign\r\n-\t\t *\u002F\r\n-\t\t$html_items = TemplateAJAX::load_content_via_ajax(\r\n-\t\t\t[\r\n-\t\t\t\t'id_url'             => 'list-items-not-assign',\r\n-\t\t\t\t'enableScrollToView' => false,\r\n-\t\t\t\t'course_id'          => $course_model->ID,\r\n-\t\t\t\t'item_type'          => LP_LESSON_CPT,\r\n-\t\t\t\t'paged'              => 1,\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'render_list_items_not_assign',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$tabs              = [];\r\n-\t\t$course_item_types = CourseModel::item_types_support();\r\n-\t\tforeach ( $course_item_types as $type ) {\r\n-\t\t\t$item_label    = CourseModel::item_types_label( $type );\r\n-\t\t\t$tabs[ $type ] = $item_label;\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-select-course-items-bank\">',\r\n-\t\t\t'popup'                    => AdminTemplate::html_popup_items_to_select_clone( $tabs, $html_items ),\r\n-\t\t\t'wrap-script-template-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render list items not assign to course.\r\n-\t * Get all items not assigned to any course, use old logic.\r\n-\t * If user current is Admin, get all items.\r\n-\t * Else get all items created by user current.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.2.8.6\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic static function render_list_items_not_assign( $data ): stdClass {\r\n-\t\t$user                   = wp_get_current_user();\r\n-\t\t$content                = new stdClass();\r\n-\t\t$course_id              = $data['course_id'] ?? 0;\r\n-\t\t$item_type              = $data['item_type'] ?? LP_LESSON_CPT;\r\n-\t\t$item_selecting         = $data['item_selecting'] ?? [];\r\n-\t\t$search_title           = $data['search_title'] ?? '';\r\n-\t\t$paged                  = intval( $data['paged'] ?? 1 );\r\n-\t\t$item_selecting_compare = new stdClass();\r\n-\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check permission\r\n-\t\t$coursePostModel = new CoursePostModel( $courseModel );\r\n-\t\tif ( ! $coursePostModel->check_capabilities_create() ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission view list', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lp_posts_db         = PostDB::getInstance();\r\n-\t\t$filter              = new PostFilter();\r\n-\t\t$filter->only_fields = [\r\n-\t\t\t'DISTINCT(p.ID) AS ID',\r\n-\t\t\t'p.post_title',\r\n-\t\t\t'p.post_type',\r\n-\t\t];\r\n-\t\t$filter->post_type   = $item_type;\r\n-\t\t$filter->post_status = [ 'publish' ];\r\n-\t\t$filter->order_by    = 'p.ID';\r\n-\t\t$filter->page        = $paged;\r\n-\t\tif ( ! user_can( $user, UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t$filter->post_author = $user->ID;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $search_title ) ) {\r\n-\t\t\t$filter->post_title = $search_title;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Old logic: Get all items not assigned to any course.\r\n-\t\t$filter->where[] = \"AND p.ID NOT IN ( SELECT item_id FROM {$lp_posts_db->tb_lp_section_items} )\";\r\n-\r\n-\t\t\u002F\u002F New logic: Get all items not assigned to the course.\r\n-\t\t\u002F\u002F Code here\r\n-\r\n-\t\t$total_rows  = 0;\r\n-\t\t$filter      = apply_filters(\r\n-\t\t\t'learn-press\u002Ffilter-list-items-not-assign-course',\r\n-\t\t\t$filter,\r\n-\t\t\t$data,\r\n-\t\t\t$courseModel\r\n-\t\t);\r\n-\t\t$posts       = $lp_posts_db->get_posts( $filter, $total_rows );\r\n-\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\r\n-\t\t$html_lis = '';\r\n-\t\tif ( empty( $posts ) ) {\r\n-\t\t\t$html_lis = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( 'No items found', 'learnpress' ) );\r\n-\t\t} else {\r\n-\t\t\tif ( ! empty( $item_selecting ) ) {\r\n-\t\t\t\tforeach ( $item_selecting as $item ) {\r\n-\t\t\t\t\tif ( ! isset( $item['item_id'] ) || ! isset( $item['item_type'] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item_selecting_compare->{$item['item_id']}            = new stdClass();\r\n-\t\t\t\t\t$item_selecting_compare->{$item['item_id']}->item_type = $item['item_type'];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $posts as $post ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var $itemModel PostModel\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$itemModel = $courseModel->get_item_model( $post->ID, $post->post_type );\r\n-\t\t\t\tif ( ! $itemModel ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$checked = '';\r\n-\r\n-\t\t\t\tif ( isset( $item_selecting_compare->{$post->ID} ) ) {\r\n-\t\t\t\t\t$checked = ' checked=\"checked\"';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$title_display = sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"title\">%s\u003Cstrong>(#%d)\u003C\u002Fstrong>\u003C\u002Fspan>',\r\n-\t\t\t\t\t$post->post_title,\r\n-\t\t\t\t\t$post->ID,\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$html_lis .= sprintf(\r\n-\t\t\t\t\t'\u003Cli class=\"lp-select-item\">%s%s\u003C\u002Fli>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cinput name=\"lp-select-item\"\r\n-\t\t\t\t\t\t\tdata-id=\"%d\"\r\n-\t\t\t\t\t\t\tdata-type=\"%s\"\r\n-\t\t\t\t\t\t\tdata-title=\"%s\" %s data-edit-link=\"%s\"\r\n-\t\t\t\t\t\t\tdata-title-selected=\"%s\"\r\n-\t\t\t\t\t\t\ttype=\"checkbox\" \u002F>',\r\n-\t\t\t\t\t\tesc_attr( $post->ID ?? 0 ),\r\n-\t\t\t\t\t\tesc_attr( $post->post_type ?? '' ),\r\n-\t\t\t\t\t\tesc_attr( $title_display ), \u002F\u002F For JS display on list selected.\r\n-\t\t\t\t\t\tesc_attr( $checked ),\r\n-\t\t\t\t\t\tget_edit_post_link( $post->ID ),\r\n-\t\t\t\t\t\tesc_attr( get_the_title( $post->ID ) )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$title_display\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'ul'         => '\u003Cul class=\"list-items\">',\r\n-\t\t\t'items'      => $html_lis,\r\n-\t\t\t'ul_end'     => '\u003C\u002Ful>',\r\n-\t\t\t'pagination' => Template::instance()->html_pagination(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t\t'paged'       => $paged,\r\n-\t\t\t\t]\r\n-\t\t\t),\r\n-\t\t];\r\n-\r\n-\t\t$content->content = Template::combine_components( $section );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\PostFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\PostModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Admin\\AdminTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Database;\n+use LP_Post_DB;\n+use LP_Post_Type_Filter;\n+use stdClass;\n+\n+\u002F**\n+ * Template hooks Admin Edit Course Curriculum.\n+ *\n+ * @since 4.2.8.6\n+ * @version 1.0.1\n+ *\u002F\n+class AdminEditCurriculumTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * Course model.\n+\t *\n+\t * @var CourseModel\n+\t *\u002F\n+\tpublic $courseModel;\n+\n+\t\u002F**\n+\t * Context data from AJAX request.\n+\t * Contains flags like is_course_builder.\n+\t *\n+\t * @var array\n+\t *\u002F\n+\tpublic $context_data = [];\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fedit-curriculum\u002Flayout', [ $this, 'edit_course_curriculum_layout' ] );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Layout for edit course curriculum.\n+\t *\n+\t * @since 4.2.8.6\n+\t * @version 1.0.1\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param array       $context Additional context merged into AJAX args (e.g. ['is_course_builder' => true]).\n+\t *\u002F\n+\tpublic function edit_course_curriculum_layout( CourseModel $courseModel, array $context = [] ) {\n+\t\twp_enqueue_style( 'lp-edit-curriculum' );\n+\t\twp_enqueue_script( 'lp-edit-course' );\n+\n+\t\t$args = array_merge(\n+\t\t\t[\n+\t\t\t\t'id_url'    => 'edit-course-curriculum',\n+\t\t\t\t'course_id' => $courseModel->ID,\n+\t\t\t],\n+\t\t\t$context\n+\t\t);\n+\n+\t\t$call_back = [\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_edit_course_curriculum',\n+\t\t];\n+\n+\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t * @use self::render_edit_course_curriculum\n+\t * @use self::render_html\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_edit_course_curriculum';\n+\t\t$callbacks[] = get_class( $this ) . ':render_list_items_not_assign';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render edit course curriculum html.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function render_edit_course_curriculum( array $data ): stdClass {\n+\t\t$course_id   = $data['course_id'] ?? 0;\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\tself::instance()->courseModel  = $courseModel;\n+\t\tself::instance()->context_data = $data; \u002F\u002F Store context data for filters\n+\n+\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\tif ( ! $coursePostModel->check_capabilities_create() ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to edit this course', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$content          = new stdClass();\n+\t\t$content->content = self::instance()->html_edit_curriculum( $courseModel );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit curriculum.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_curriculum( CourseModel $courseModel ): string {\n+\t\t$html_sections = '';\n+\n+\t\t\u002F\u002F Get sections items\n+\t\t$sections_items = $courseModel->get_section_items();\n+\t\t$count_sections = count( $sections_items );\n+\n+\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t$html_sections .= $this->html_edit_section( $courseModel, $section_items );\n+\t\t}\n+\n+\t\t$sections = [\n+\t\t\t'wrap'          => '\u003Cdiv class=\"curriculum-sections\">',\n+\t\t\t'list-sections' => $html_sections,\n+\t\t\t'section-clone' => $this->html_edit_section( $courseModel ),\n+\t\t\t'wrap_end'      => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section = [\n+\t\t\t'wrap'            => '\u003Cdiv id=\"lp-course-edit-curriculum\">',\n+\t\t\t'heading'         => '\u003Cdiv class=\"heading\">',\n+\t\t\t'h4'              => sprintf(\n+\t\t\t\t'\u003Ch4>%s\u003C\u002Fh4>',\n+\t\t\t\t__( 'Details', 'learnpress' )\n+\t\t\t),\n+\t\t\t'count-sections'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"count-sections\" data-count=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$count_sections,\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\n+\t\t\t\t\t$count_sections,\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t__( 'Section', 'learnpress' ),\n+\t\t\t\t\t\t__( 'Sections', 'learnpress' )\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'count-items'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"total-items\" data-count=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$courseModel->count_items(),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\n+\t\t\t\t\t$courseModel->count_items(),\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t__( 'Item', 'learnpress' ),\n+\t\t\t\t\t\t__( 'Items', 'learnpress' )\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'section-toggle'  =>\n+\t\t\t\t'\u003Cdiv class=\"course-toggle-all-sections lp-collapse\">\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'heading_end'     => '\u003C\u002Fdiv>',\n+\t\t\t'sections'        => Template::combine_components( $sections ),\n+\t\t\t'add_new_section' => $this->html_add_new_section(),\n+\t\t\t'select_items'    => $this->html_popup_items_to_select_clone( $courseModel ),\n+\t\t\t'wrap_end'        => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for edit section.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param null|object $section_items\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_section( CourseModel $courseModel, $section_items = null ): string {\n+\t\t$is_clone     = is_null( $section_items );\n+\t\t$total_items  = 0;\n+\t\t$items        = [];\n+\t\t$html_items   = '';\n+\t\t$section_id   = $section_items->section_id ?? 0;\n+\t\t$section_name = $section_items->section_name ?? '';\n+\n+\t\tif ( ! $is_clone ) {\n+\t\t\t$total_items = count( $section_items->items ?? [] );\n+\t\t\t$items       = $section_items->items ?? [];\n+\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t$html_items .= $this->html_section_item( $courseModel, $item );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section_list_items = [\n+\t\t\t'wrap'       => '\u003Cul class=\"section-list-items\">',\n+\t\t\t'items'      => $html_items,\n+\t\t\t'item_clone' => $this->html_section_item( $courseModel ),\n+\t\t\t'wrap_end'   => '\u003C\u002Ful>',\n+\t\t];\n+\n+\t\t$section = [\n+\t\t\t'wrap'                 => sprintf(\n+\t\t\t\t'\u003Cdiv data-section-id=\"%s\" class=\"section lp-collapse %s\">',\n+\t\t\t\t$section_id,\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : ''\n+\t\t\t),\n+\t\t\t'head'                 => '\u003Cdiv class=\"section-head\">',\n+\t\t\t'drag'                 => sprintf(\n+\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Drag to reorder section', 'learnpress' )\n+\t\t\t),\n+\t\t\t'loading'              => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t'title'                => $this->html_input_section_title( $section_name ),\n+\t\t\t'btn-edit'             => sprintf(\n+\t\t\t\t'\u003Cspan class=\"lp-btn-edit-section-title lp-icon-edit\" title=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Edit section title', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-delete'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-delete-section button\"\n+\t\t\t\t\tdata-send=\"%s\"\n+\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">%s\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'    => 'course_delete_section',\n+\t\t\t\t\t\t'course_id' => $courseModel->get_id(),\n+\t\t\t\t\t\t'id_url'    => 'course-delete-section',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t\t__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\t__( 'This section will be deleted. The items in this section will no longer be assigned to this course, but will not be permanently deleted.', 'learnpress' ),\n+\t\t\t\t__( 'Delete Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-update'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-section-title button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Update' )\n+\t\t\t),\n+\t\t\t'btn-cancel'           => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-section-title button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Cancel' )\n+\t\t\t),\n+\t\t\t'count-items'          => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"section-items-counts\" data-count=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$total_items,\n+\t\t\t\tsprintf(\n+\t\t\t\t\t__( '\u003Cspan class=\"count\">%1$s\u003C\u002Fspan> %2$s', 'learnpress' ),\n+\t\t\t\t\t$total_items,\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"one\">%s\u003C\u002Fspan>\u003Cspan class=\"plural\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t__( 'Item', 'learnpress' ),\n+\t\t\t\t\t\t__( 'Items', 'learnpress' )\n+\t\t\t\t\t)\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'toggle'               => '\u003Cdiv class=\"section-toggle\">\u003Cspan class=\"lp-icon-angle-down\">\u003C\u002Fspan>\u003Cspan class=\"lp-icon-angle-up\">\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t'head_end'             => '\u003C\u002Fdiv>',\n+\t\t\t'wrap_content'         => '\u003Cdiv class=\"section-collapse\">',\n+\t\t\t'section-content'      => '\u003Cdiv class=\"section-content\">',\n+\t\t\t'section-description'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"section-description\">%s%s%s\u003C\u002Fdiv>',\n+\t\t\t\t$this->html_edit_section_description( $section_items->section_description ?? '' ),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-section-description button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t__( 'Update' )\n+\t\t\t\t),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-section-description button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t__( 'Cancel' )\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'section-list-items'   => Template::combine_components( $section_list_items ),\n+\t\t\t'section-content-end'  => '\u003C\u002Fdiv>',\n+\t\t\t'section-item-actions' => $this->html_section_item_actions(),\n+\t\t\t'wrap_content_end'     => '\u003C\u002Fdiv>',\n+\t\t\t'wrap_end'             => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML input section title.\n+\t *\n+\t * @param string $section_name\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_input_section_title( string $section_name = '' ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Cinput class=\"lp-section-title-input\"\n+\t\t\t\tname=\"lp-section-title-input\"\n+\t\t\t\ttype=\"text\"\n+\t\t\t\tvalue=\"%1$s\"\n+\t\t\t\tdata-old=\"%1$s\"\n+\t\t\t\tplaceholder=\"%2$s\"\n+\t\t\t\tdata-mess-empty-title=\"%3$s\"\n+\t\t\t\tdata-send=\"%4$s\">',\n+\t\t\tesc_attr( $section_name ),\n+\t\t\tesc_attr__( 'Update section title', 'learnpress' ),\n+\t\t\tesc_attr__( 'Section title is required', 'learnpress' ),\n+\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t[\n+\t\t\t\t\t'action'    => 'course_update_section',\n+\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\n+\t\t\t\t\t'id_url'    => 'course-update-section-title',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * HTML for section description input.\n+\t *\n+\t * @param string|null $section_description\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_edit_section_description( string $section_description = '' ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Ctextarea class=\"lp-section-description-input\"\n+\t\t\t\tname=\"lp-section-description-input\"\n+\t\t\t\ttype=\"text\"\n+\t\t\t\tdata-old=\"%1$s\"\n+\t\t\t\tplaceholder=\"%2$s\"\n+\t\t\t\tdata-send=\"%3$s\">%1$s\u003C\u002Ftextarea>',\n+\t\t\tesc_attr( $section_description ),\n+\t\t\tesc_attr__( '+ Add Description', 'learnpress' ),\n+\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t[\n+\t\t\t\t\t'action'    => 'course_update_section',\n+\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\n+\t\t\t\t\t'id_url'    => 'course-update-section-description',\n+\t\t\t\t]\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * HTML add new section.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_add_new_section(): string {\n+\t\t$section = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"add-new-section\">',\n+\t\t\t'icon'     => '\u003Cspan class=\"lp-icon-plus\">\u003C\u002Fspan>',\n+\t\t\t'input'    => sprintf(\n+\t\t\t\t'\u003Cinput class=\"lp-section-title-new-input\"\n+\t\t\t\t\tname=\"lp-section-title-new-input\"\n+\t\t\t\t\ttype=\"text\"\n+\t\t\t\t\ttitle=\"%1$s\"\n+\t\t\t\t\tplaceholder=\"%1$s\"\n+\t\t\t\t\tdata-mess-empty-title=\"%2$s\"\n+\t\t\t\t\tdata-send=\"%3$s\">',\n+\t\t\t\tesc_attr__( 'Create a new section', 'learnpress' ),\n+\t\t\t\tesc_attr__( 'Section title is required', 'learnpress' ),\n+\t\t\t\tTemplate::convert_data_to_json(\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'action'    => 'course_add_section',\n+\t\t\t\t\t\t'course_id' => $this->courseModel->get_id(),\n+\t\t\t\t\t\t'id_url'    => 'course-add-section',\n+\t\t\t\t\t]\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\t'button'   => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\"\n+\t\t\t\t\tclass=\"lp-btn-add-section button lp-btn-edit-primary\">%s\n+\t\t\t\t\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Add Section', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for section item.\n+\t * $item is null when clone item new\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param null|object $item\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_section_item( CourseModel $courseModel, $item = null ): string {\n+\t\t$is_clone   = is_null( $item );\n+\t\t$item_id    = $item->item_id ?? 0;\n+\t\t$item_title = $item->title ?? '';\n+\t\t$item_type  = $item->item_type ?? '';\n+\n+\t\t\u002F**\n+\t\t * @var $itemModel PostModel\n+\t\t *\u002F\n+\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\n+\t\t$edit_button = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fcurriculum\u002Fsection-item\u002Fedit-button',\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Cli title=\"%s\">\u003Ca href=\"%s\" target=\"_blank\" class=\"lp-icon-edit-square edit-link\">\u003C\u002Fa>\u003C\u002Fli>',\n+\t\t\t\t__( 'Edit item detail', 'learnpress' ),\n+\t\t\t\t$itemModel ? $itemModel->get_edit_link() : ''\n+\t\t\t),\n+\t\t\t$item,\n+\t\t\t$itemModel,\n+\t\t\t$courseModel\n+\t\t);\n+\n+\t\t$section_action = [\n+\t\t\t'wrap'     => '\u003Cul class=\"item-actions\">',\n+\t\t\t'preview'  => sprintf(\n+\t\t\t\t'\u003Cli title=\"%s\" class=\"lp-btn-set-preview-item\">\u003Ca class=\"%s\">\u003C\u002Fa>\u003C\u002Fli>',\n+\t\t\t\t__( 'Enable\u002FDisable Preview', 'learnpress' ),\n+\t\t\t\t$itemModel && $itemModel->post_type === LP_LESSON_CPT\n+\t\t\t\t&& $itemModel->has_preview() ? 'lp-icon-eye' : 'lp-icon-eye-slash'\n+\t\t\t),\n+\t\t\t'edit'     => $edit_button,\n+\t\t\t'delete'   => sprintf(\n+\t\t\t\t'\u003Cli class=\"action lp-btn-delete-item\"\n+\t\t\t\t\tdata-title=\"%s\" data-content=\"%s\">%s\u003C\u002Fli>',\n+\t\t\t\t__( 'Are you sure?', 'learnpress' ),\n+\t\t\t\t__( 'This item will be removed from this section. This item will no longer be assigned to this course. It will not be permanently deleted from the system.', 'learnpress' ),\n+\t\t\t\tsprintf( '\u003Ca class=\"lp-icon-trash-o\" title=\"%s\">\u003C\u002Fa>', __( 'Remove item', 'learnpress' ) )\n+\t\t\t),\n+\t\t\t'wrap_end' => '\u003C\u002Ful>',\n+\t\t];\n+\n+\t\t$section_action = apply_filters(\n+\t\t\t'learn-press\u002Fadmin\u002Fcurriculum\u002Fsection-item\u002Factions',\n+\t\t\t$section_action,\n+\t\t\t$item,\n+\t\t\t$itemModel,\n+\t\t\t$courseModel,\n+\t\t\t$this->context_data\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'li'           => sprintf(\n+\t\t\t\t'\u003Cli data-item-id=\"%s\" data-item-type=\"%s\" class=\"section-item %s %s\">',\n+\t\t\t\t$item_id,\n+\t\t\t\t$item_type,\n+\t\t\t\t$item_type,\n+\t\t\t\t$is_clone ? 'clone lp-hidden' : ''\n+\t\t\t),\n+\t\t\t'drag'         => sprintf(\n+\t\t\t\t'\u003Cspan class=\"drag lp-icon-drag\" title=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\t__( 'Drag to reorder item', 'learnpress' )\n+\t\t\t),\n+\t\t\t'icon'         => '\u003Cdiv class=\"item-ico-type\">\u003C\u002Fdiv>',\n+\t\t\t'loading'      => '\u003Cspan class=\"lp-icon-spinner\">\u003C\u002Fspan>',\n+\t\t\t'input-title'  => sprintf(\n+\t\t\t\t'\u003Cinput name=\"%1$s\" class=\"%1$s\" type=\"text\" value=\"%2$s\" data-old=\"%2$s\" data-mess-empty-title=\"%3$s\">',\n+\t\t\t\t'lp-item-title-input',\n+\t\t\t\twp_kses_post( $item_title ),\n+\t\t\t\tesc_attr__( 'Item title is required', 'learnpress' )\n+\t\t\t),\n+\t\t\t'btn-update'   => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-update-item-title button button-primary\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Update' )\n+\t\t\t),\n+\t\t\t'btn-cancel'   => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"lp-btn-cancel-update-item-title button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Cancel' )\n+\t\t\t),\n+\t\t\t'item_actions' => Template::combine_components( $section_action ),\n+\t\t\t'li_end'       => '\u003C\u002Fli>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\tpublic function html_section_item_actions(): string {\n+\t\t$course_item_types = CourseModel::item_types_support();\n+\n+\t\t$html_buttons = '';\n+\t\tforeach ( $course_item_types as $type ) {\n+\t\t\t$item_label = CourseModel::item_types_label( $type );\n+\n+\t\t\t$html_buttons .= sprintf(\n+\t\t\t\t'\u003Cbutton class=\"lp-btn-select-item-type button\"\n+\t\t\t\t\tdata-item-type=\"%s\"\n+\t\t\t\t\tdata-placeholder=\"%s\"\n+\t\t\t\t\tdata-button-add-text=\"%s\"\n+\t\t\t\t\ttype=\"button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t$type,\n+\t\t\t\tsprintf( __( 'Create a new %s', 'learnpress' ), $item_label ),\n+\t\t\t\tsprintf( __( 'Add %s', 'learnpress' ), $item_label ),\n+\t\t\t\tsprintf( __( 'New %s', 'learnpress' ), $item_label )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap'             => '\u003Cdiv class=\"section-actions\">',\n+\t\t\t'buttons'          => $html_buttons,\n+\t\t\t'btn-select-items' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\"\n+\t\t\t\t\tdata-template=\"#lp-tmpl-select-course-items-bank\"\n+\t\t\t\t\tclass=\"button lp-btn-show-popup-items-to-select\">\n+\t\t\t\t\t%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Content Bank', 'learnpress' )\n+\t\t\t),\n+\t\t\t'add-item-type'    => $this->html_add_item_type(),\n+\t\t\t'wrap_end'         => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for section item new.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_add_item_type(): string {\n+\t\t$section = [\n+\t\t\t'wrap'          => '\u003Cdiv class=\"lp-add-item-type clone lp-hidden\">',\n+\t\t\t'icon-plus'     => '\u003Cdiv class=\"lp-icon-plus\">\u003C\u002Fdiv>',\n+\t\t\t'item-ico-type' => '\u003Cdiv class=\"item-ico-type\">\u003C\u002Fdiv>',\n+\t\t\t'actions'       => '\u003Cdiv class=\"new-item-actions\">',\n+\t\t\t'input'         => sprintf(\n+\t\t\t\t'\u003Cinput class=\"%1$s\" name=\"%1$s\" data-mess-empty-title=\"%2$s\" type=\"text\"\u002F>',\n+\t\t\t\t'lp-add-item-type-title-input',\n+\t\t\t\tesc_attr__( 'Item title is required', 'learnpress' )\n+\t\t\t),\n+\t\t\t'button_add'    => '\u003Cbutton class=\"lp-btn-add-item button button-primary\" type=\"button\">\u003C\u002Fbutton>',\n+\t\t\t'button_cancel' => sprintf(\n+\t\t\t\t'\u003Cbutton class=\"lp-btn-add-item-cancel button\" type=\"button\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Cancel' )\n+\t\t\t),\n+\t\t\t'actions_end'   => '\u003C\u002Fdiv>',\n+\t\t\t'wrap_end'      => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for popup items to select.\n+\t *\n+\t * @param CourseModel $course_model\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_popup_items_to_select_clone( CourseModel $course_model ): string {\n+\t\t\u002F**\n+\t\t * @uses self::render_list_items_not_assign\n+\t\t *\u002F\n+\t\t$html_items = TemplateAJAX::load_content_via_ajax(\n+\t\t\t[\n+\t\t\t\t'id_url'             => 'list-items-not-assign',\n+\t\t\t\t'enableScrollToView' => false,\n+\t\t\t\t'course_id'          => $course_model->ID,\n+\t\t\t\t'item_type'          => LP_LESSON_CPT,\n+\t\t\t\t'paged'              => 1,\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'render_list_items_not_assign',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$tabs              = [];\n+\t\t$course_item_types = CourseModel::item_types_support();\n+\t\tforeach ( $course_item_types as $type ) {\n+\t\t\t$item_label    = CourseModel::item_types_label( $type );\n+\t\t\t$tabs[ $type ] = $item_label;\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrap-script-template'     => '\u003Cscript type=\"text\u002Ftemplate\" id=\"lp-tmpl-select-course-items-bank\">',\n+\t\t\t'popup'                    => AdminTemplate::html_popup_items_to_select_clone( $tabs, $html_items ),\n+\t\t\t'wrap-script-template-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render list items not assign to course.\n+\t * Get all items not assigned to any course, use old logic.\n+\t * If user current is Admin, get all items.\n+\t * Else get all items created by user current.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.2.8.6\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic static function render_list_items_not_assign( $data ): stdClass {\n+\t\t$user                   = wp_get_current_user();\n+\t\t$content                = new stdClass();\n+\t\t$course_id              = $data['course_id'] ?? 0;\n+\t\t$item_type              = $data['item_type'] ?? LP_LESSON_CPT;\n+\t\t$item_selecting         = $data['item_selecting'] ?? [];\n+\t\t$search_title           = $data['search_title'] ?? '';\n+\t\t$paged                  = intval( $data['paged'] ?? 1 );\n+\t\t$item_selecting_compare = new stdClass();\n+\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\tif ( ! $courseModel ) {\n+\t\t\tthrow new Exception( __( 'Course not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check permission\n+\t\t$coursePostModel = new CoursePostModel( $courseModel );\n+\t\tif ( ! $coursePostModel->check_capabilities_create() ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission view list', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lp_posts_db         = PostDB::getInstance();\n+\t\t$filter              = new PostFilter();\n+\t\t$filter->only_fields = [\n+\t\t\t'DISTINCT(p.ID) AS ID',\n+\t\t\t'p.post_title',\n+\t\t\t'p.post_type',\n+\t\t];\n+\t\t$filter->post_type   = $item_type;\n+\t\t$filter->post_status = [ 'publish' ];\n+\t\t$filter->order_by    = 'p.ID';\n+\t\t$filter->page        = $paged;\n+\t\tif ( ! user_can( $user, UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t$filter->post_author = $user->ID;\n+\t\t}\n+\n+\t\tif ( ! empty( $search_title ) ) {\n+\t\t\t$filter->post_title = $search_title;\n+\t\t}\n+\n+\t\t\u002F\u002F Old logic: Get all items not assigned to any course.\n+\t\t$filter->where[] = \"AND p.ID NOT IN ( SELECT item_id FROM {$lp_posts_db->tb_lp_section_items} )\";\n+\n+\t\t\u002F\u002F New logic: Get all items not assigned to the course.\n+\t\t\u002F\u002F Code here\n+\n+\t\t$total_rows  = 0;\n+\t\t$filter      = apply_filters(\n+\t\t\t'learn-press\u002Ffilter-list-items-not-assign-course',\n+\t\t\t$filter,\n+\t\t\t$data,\n+\t\t\t$courseModel\n+\t\t);\n+\t\t$posts       = $lp_posts_db->get_posts( $filter, $total_rows );\n+\t\t$total_pages = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\n+\t\t$html_lis = '';\n+\t\tif ( empty( $posts ) ) {\n+\t\t\t$html_lis = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( 'No items found', 'learnpress' ) );\n+\t\t} else {\n+\t\t\tif ( ! empty( $item_selecting ) ) {\n+\t\t\t\tforeach ( $item_selecting as $item ) {\n+\t\t\t\t\tif ( ! isset( $item['item_id'] ) || ! isset( $item['item_type'] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item_selecting_compare->{$item['item_id']}            = new stdClass();\n+\t\t\t\t\t$item_selecting_compare->{$item['item_id']}->item_type = $item['item_type'];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tforeach ( $posts as $post ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var $itemModel PostModel\n+\t\t\t\t *\u002F\n+\t\t\t\t$itemModel = $courseModel->get_item_model( $post->ID, $post->post_type );\n+\t\t\t\tif ( ! $itemModel ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$checked = '';\n+\n+\t\t\t\tif ( isset( $item_selecting_compare->{$post->ID} ) ) {\n+\t\t\t\t\t$checked = ' checked=\"checked\"';\n+\t\t\t\t}\n+\n+\t\t\t\t$title_display = sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"title\">%s\u003Cstrong>(#%d)\u003C\u002Fstrong>\u003C\u002Fspan>',\n+\t\t\t\t\t$post->post_title,\n+\t\t\t\t\t$post->ID,\n+\t\t\t\t);\n+\n+\t\t\t\t$html_lis .= sprintf(\n+\t\t\t\t\t'\u003Cli class=\"lp-select-item\">%s%s\u003C\u002Fli>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cinput name=\"lp-select-item\"\n+\t\t\t\t\t\t\tdata-id=\"%d\"\n+\t\t\t\t\t\t\tdata-type=\"%s\"\n+\t\t\t\t\t\t\tdata-title=\"%s\" %s data-edit-link=\"%s\"\n+\t\t\t\t\t\t\tdata-title-selected=\"%s\"\n+\t\t\t\t\t\t\ttype=\"checkbox\" \u002F>',\n+\t\t\t\t\t\tesc_attr( $post->ID ?? 0 ),\n+\t\t\t\t\t\tesc_attr( $post->post_type ?? '' ),\n+\t\t\t\t\t\tesc_attr( $title_display ), \u002F\u002F For JS display on list selected.\n+\t\t\t\t\t\tesc_attr( $checked ),\n+\t\t\t\t\t\tget_edit_post_link( $post->ID ),\n+\t\t\t\t\t\tesc_attr( get_the_title( $post->ID ) )\n+\t\t\t\t\t),\n+\t\t\t\t\t$title_display\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'ul'         => '\u003Cul class=\"list-items\">',\n+\t\t\t'items'      => $html_lis,\n+\t\t\t'ul_end'     => '\u003C\u002Ful>',\n+\t\t\t'pagination' => Template::instance()->html_pagination(\n+\t\t\t\t[\n+\t\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t\t'paged'       => $paged,\n+\t\t\t\t]\n+\t\t\t),\n+\t\t];\n+\n+\t\t$content->content = Template::combine_components( $section );\n+\n+\t\treturn $content;\n+\t}\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse: AdminEditSettingTemplate.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,352 +1,352 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Archive Package.\r\n- *\r\n- * @since 1.0.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Material_Files_DB;\r\n-use stdClass;\r\n-use LP_Global;\r\n-use LP_WP_Filesystem;\r\n-use LP_Settings;\r\n-use Throwable;\r\n-use Exception;\r\n-class CourseMaterialTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Fcourse-material\u002Flayout', array( $this, 'sections' ) );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\r\n-\t}\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_material_items';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout for course material.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function sections( array $data = array() ) {\r\n-\t\t$item    = LP_Global::course_item();\r\n-\t\t$item_id = 0;\r\n-\t\tif ( ! $item && get_post_type( get_the_ID() ) === LP_COURSE_CPT ) {\r\n-\t\t\t$item_id = get_the_ID();\r\n-\t\t} elseif ( $item ) {\r\n-\t\t\t$item_id = $item->get_id();\r\n-\t\t} else {\r\n-\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\r\n-\t\t}\r\n-\t\t\u002F\u002F $item_id     = $item->get_id();\r\n-\t\t$material_db = LP_Material_Files_DB::getInstance();\r\n-\t\t$per_page    = (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\r\n-\t\t$total_rows  = $material_db->get_total( $item_id );\r\n-\t\t$total_pages = $per_page > 0 ? ceil( $total_rows \u002F $per_page ) : 0;\r\n-\r\n-\t\t$args = array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'id_url'      => 'course-material',\r\n-\t\t\t\t'item_id'     => $item_id,\r\n-\t\t\t\t'paged'       => 1,\r\n-\t\t\t\t'per_page'    => $per_page,\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t],\r\n-\t\t\t$data\r\n-\t\t);\r\n-\t\tif ( get_post_type( $item_id ) !== LP_COURSE_CPT ) {\r\n-\t\t\t$args['course_id'] = $item->get_course_id();\r\n-\t\t}\r\n-\r\n-\t\t$callback = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_material_items',\r\n-\t\t);\r\n-\t\t$content  = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t$section  = array(\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"lp-material-skeleton\">',\r\n-\t\t\t'content'  => $content,\r\n-\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\t\techo Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\tpublic static function render_material_items( $args ): stdClass {\r\n-\t\t$content = new stdClass();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\t\t\t$course_id = $args['course_id'] ?? 0;\r\n-\t\t\t$item_id   = $args['item_id'] ?? 0;\r\n-\t\t\tif ( get_post_type( $item_id ) === LP_COURSE_CPT ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $item_id, true );\r\n-\t\t\t} elseif ( $course_id ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Course not found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_show = false;\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\tif ( $courseModel->check_user_is_author( $userModel )\r\n-\t\t\t\t\t|| user_can( $userModel->get_id(), ADMIN_ROLE ) ) {\r\n-\t\t\t\t\t$can_show = true;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\t\t\tif ( $userCourseModel &&\r\n-\t\t\t\t\t\t( $userCourseModel->has_enrolled_or_finished()\r\n-\t\t\t\t\t\t\t|| $userCourseModel->has_purchased() ) ) {\r\n-\t\t\t\t\t\t$can_show = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\r\n-\t\t\t\t$can_show = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_show = apply_filters( 'learn-press\u002Fcourse-material\u002Fcan-show', $can_show, $courseModel, $userModel );\r\n-\r\n-\t\t\t$file_per_page = LP_Settings::get_option( 'material_file_per_page', - 1 );\r\n-\t\t\t$count_files   = LP_Material_Files_DB::getInstance()->get_total( $courseModel->get_id() );\r\n-\t\t\tif ( ! $can_show || $file_per_page == 0 || $count_files \u003C= 0 ) {\r\n-\t\t\t\tthrow new Exception( '' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$material_db = LP_Material_Files_DB::getInstance();\r\n-\t\t\t$paged       = absint( $args['paged'] ?? 1 );\r\n-\t\t\t$per_page    = intval( $args['per_page'] ?? 1 );\r\n-\t\t\t$offset      = ( $per_page > 0 && $paged > 1 ) ? $per_page * ( $paged - 1 ) : 0;\r\n-\t\t\t\u002F\u002F $total_pages    = $per_page > 0 ? ceil( $total_rows \u002F $per_page ) : 0;\r\n-\t\t\t$material_files = $material_db->get_material_by_item_id( $args['item_id'], $per_page, $offset, false );\r\n-\t\t\tif ( empty( $material_files ) ) {\r\n-\t\t\t\t$content->content = '';\r\n-\t\t\t} else {\r\n-\t\t\t\t$material_html = '';\r\n-\t\t\t\tforeach ( $material_files as $m ) {\r\n-\t\t\t\t\t$material_html .= self::material_item( $m, $args['item_id'] );\r\n-\t\t\t\t}\r\n-\t\t\t\tif ( $args['paged'] === 1 ) {\r\n-\t\t\t\t\t$sections         = array(\r\n-\t\t\t\t\t\t'wrap'           => '\u003Cdiv class=\"lp-list-material\">',\r\n-\t\t\t\t\t\t'table_wrap'     => '\u003Ctable class=\"course-material-table\" >',\r\n-\t\t\t\t\t\t'table_header'   => self::table_header(),\r\n-\t\t\t\t\t\t'table_body'     => '\u003Ctbody>',\r\n-\t\t\t\t\t\t'material_html'  => $material_html,\r\n-\t\t\t\t\t\t'table_body_end' => '\u003C\u002Ftbody>',\r\n-\t\t\t\t\t\t'table_wrap_end' => '\u003C\u002Ftable>',\r\n-\t\t\t\t\t\t'loadmore_btn'   => self::html_load_more_btn( $args ),\r\n-\t\t\t\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$content->content = Template::combine_components( $sections );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$content->content = $material_html;\r\n-\t\t\t\t}\r\n-\t\t\t\t$content->total_pages = $args['total_pages'];\r\n-\t\t\t\t$content->paged       = $args['paged'];\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tif ( $e->getMessage() === '' ) {\r\n-\t\t\t\t$content->content = '';\r\n-\t\t\t} else {\r\n-\t\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\tpublic static function table_header() {\r\n-\t\t$sections = array(\r\n-\t\t\t'wrap'      => '\u003Cthead>',\r\n-\t\t\t'file-name' => sprintf( '\u003Cth class=\"lp-material-th-file-name\">%s\u003C\u002Fth>', esc_html__( 'Name', 'learnpress' ) ),\r\n-\t\t\t'file-type' => sprintf( '\u003Cth class=\"lp-material-th-file-type\">%s\u003C\u002Fth>', esc_html__( 'Type', 'learnpress' ) ),\r\n-\t\t\t'file-size' => sprintf( '\u003Cth class=\"lp-material-th-file-size\">%s\u003C\u002Fth>', esc_html__( 'Size', 'learnpress' ) ),\r\n-\t\t\t'file-link' => sprintf( '\u003Cth class=\"lp-material-th-file-link\">%s\u003C\u002Fth>', esc_html__( 'Download', 'learnpress' ) ),\r\n-\t\t\t'wrap_end'  => '\u003C\u002Fthead>',\r\n-\t\t);\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\tpublic static function material_item( $material, $current_item_id ) {\r\n-\t\t$sections = array(\r\n-\t\t\t'wrap'      => '\u003Ctr class=\"lp-material-item\">',\r\n-\t\t\t'file-name' => self::html_file_name( $material, $current_item_id ),\r\n-\t\t\t'file-type' => self::html_file_type( $material ),\r\n-\t\t\t'file-size' => self::html_file_size( $material ),\r\n-\t\t\t'file-link' => self::html_file_link( $material ),\r\n-\t\t\t'wrap_end'  => '\u003C\u002Ftr>',\r\n-\t\t);\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate HTML for file name.\r\n-\t *\r\n-\t * @param object $material Material object.\r\n-\t * @param int    $current_item_id Current item ID.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_file_name( $material, $current_item_id ): string {\r\n-\t\tif ( get_post_type( $current_item_id ) == LP_COURSE_CPT && $material->item_type == LP_LESSON_CPT ) {\r\n-\t\t\t$html_file_name = sprintf( esc_html( '%1$s ( %2$s )' ), $material->file_name, get_the_title( $material->item_id ) );\r\n-\t\t} else {\r\n-\t\t\t$html_file_name = sprintf( esc_html( '%s' ), $material->file_name );\r\n-\t\t}\r\n-\r\n-\t\treturn sprintf( '\u003Ctd class=\"lp-material-file-name\">%s\u003C\u002Ftd>', $html_file_name );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate HTML for file type.\r\n-\t *\r\n-\t * @param object $material Material object.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_file_type( $material ): string {\r\n-\t\treturn sprintf( '\u003Ctd class=\"lp-material-file-type\">%s\u003C\u002Ftd>', $material->file_type );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get file size in human-readable format.\r\n-\t *\r\n-\t * @param object $material Material object.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_file_size( $material ): string {\r\n-\t\tif ( $material->method == 'upload' ) {\r\n-\t\t\t$file_size = filesize( wp_upload_dir()['basedir'] . $material->file_path );\r\n-\t\t\t$file_size = ( $file_size \u002F 1024 \u003C 1024 ) ? round( $file_size \u002F 1024, 2 ) . 'KB' : round( $file_size \u002F 1024 \u002F 1024, 2 ) . 'MB';\r\n-\t\t} else {\r\n-\t\t\t$args      = array(\r\n-\t\t\t\t'timeout' => 0.1,\r\n-\t\t\t);\r\n-\t\t\t$file_head = wp_remote_head( $material->file_path, $args );\r\n-\r\n-\t\t\tif ( is_wp_error( $file_head )\r\n-\t\t\t\t|| ! isset( $file_head['headers']['content-length'] )\r\n-\t\t\t\t|| ! $file_head['headers']['content-length'] ) {\r\n-\t\t\t\t$file_size = '';\r\n-\t\t\t} else {\r\n-\t\t\t\t$file_size = $file_head['headers']['content-length'];\r\n-\t\t\t\t$file_size = self::convert_kb( intval( $file_size ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-material\u002Ffile-size',\r\n-\t\t\tsprintf( '\u003Ctd class=\"lp-material-file-size\">%s\u003C\u002Ftd>', $file_size ),\r\n-\t\t\t$material\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert file size to human-readable format.\r\n-\t *\r\n-\t * @param int $file_size File size in bytes.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function convert_kb( int $file_size ): string {\r\n-\t\t\u002F\u002F Convert bytes to kilobytes\r\n-\t\t$file_size = $file_size \u002F 1024;\r\n-\r\n-\t\tif ( $file_size \u003C 1024 ) {\r\n-\t\t\treturn round( $file_size, 2 ) . 'KB';\r\n-\t\t} elseif ( $file_size \u003C 1048576 ) {\r\n-\t\t\treturn round( $file_size \u002F 1024, 2 ) . 'MB';\r\n-\t\t} else {\r\n-\t\t\treturn round( $file_size \u002F 1048576, 2 ) . 'GB';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate HTML for file link.\r\n-\t *\r\n-\t * @param object $material Material object.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_file_link( $material ): string {\r\n-\t\t$file_path = $material->file_path ?? '';\r\n-\t\tif ( empty( $file_path ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$file_url = $file_path;\r\n-\t\tif ( $material->method === 'upload' ) {\r\n-\t\t\t$file_url = wp_upload_dir()['baseurl'] . $file_path;\r\n-\t\t}\r\n-\r\n-\t\t$enable_nofollow = LP_Settings::instance()->get_option( 'material_url_nofollow', 'yes' );\r\n-\t\t$rel             = '';\r\n-\t\tif ( $enable_nofollow == 'yes' && $material->method == 'external' ) {\r\n-\t\t\t$rel = 'nofollow';\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-material\u002Ffile-link',\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Ctd class=\"lp-material-file-link\">\r\n-\t\t\t\t\t\u003Ca href=\"%s\" target=\"_blank\" rel=\"%s\">\r\n-\t                    \u003Ci class=\"lp-icon-file-download btn-download-material\">\u003C\u002Fi>\r\n-\t                \u003C\u002Fa>\r\n-\t            \u003C\u002Ftd>',\r\n-\t\t\t\tesc_url_raw( $file_url ),\r\n-\t\t\t\t$rel\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Generate HTML for load more button.\r\n-\t *\r\n-\t * @param array $args Arguments containing pagination info.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function html_load_more_btn( array $args = [] ): string {\r\n-\t\t$paged       = $args['paged'] ?? 1;\r\n-\t\t$total_pages = $args['total_pages'] ?? 1;\r\n-\r\n-\t\tif ( $paged >= $total_pages ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-material\u002Fbtn-load-more',\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-loadmore-material\">\r\n-\t\t\t\t\t\u003Cbutton class=\"lp-btn lp-loadmore-material\">\r\n-\t\t\t\t\t\t%s\r\n-\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Load More', 'learnpress' )\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Archive Package.\n+ *\n+ * @since 1.0.0\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Material_Files_DB;\n+use stdClass;\n+use LP_Global;\n+use LP_WP_Filesystem;\n+use LP_Settings;\n+use Throwable;\n+use Exception;\n+class CourseMaterialTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Fcourse-material\u002Flayout', array( $this, 'sections' ) );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\n+\t}\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_material_items';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Layout for course material.\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function sections( array $data = array() ) {\n+\t\t$item    = LP_Global::course_item();\n+\t\t$item_id = 0;\n+\t\tif ( ! $item && get_post_type( get_the_ID() ) === LP_COURSE_CPT ) {\n+\t\t\t$item_id = get_the_ID();\n+\t\t} elseif ( $item ) {\n+\t\t\t$item_id = $item->get_id();\n+\t\t} else {\n+\t\t\tthrow new Exception( __( 'Item not found', 'learnpress' ) );\n+\t\t}\n+\t\t\u002F\u002F $item_id     = $item->get_id();\n+\t\t$material_db = LP_Material_Files_DB::getInstance();\n+\t\t$per_page    = (int) LP_Settings::get_option( 'material_file_per_page', - 1 );\n+\t\t$total_rows  = $material_db->get_total( $item_id );\n+\t\t$total_pages = $per_page > 0 ? ceil( $total_rows \u002F $per_page ) : 0;\n+\n+\t\t$args = array_merge(\n+\t\t\t[\n+\t\t\t\t'id_url'      => 'course-material',\n+\t\t\t\t'item_id'     => $item_id,\n+\t\t\t\t'paged'       => 1,\n+\t\t\t\t'per_page'    => $per_page,\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t],\n+\t\t\t$data\n+\t\t);\n+\t\tif ( get_post_type( $item_id ) !== LP_COURSE_CPT ) {\n+\t\t\t$args['course_id'] = $item->get_course_id();\n+\t\t}\n+\n+\t\t$callback = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_material_items',\n+\t\t);\n+\t\t$content  = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t$section  = array(\n+\t\t\t'wrap'     => '\u003Cdiv class=\"lp-material-skeleton\">',\n+\t\t\t'content'  => $content,\n+\t\t\t'wrap_end' => '\u003C\u002Fdiv>',\n+\t\t);\n+\t\techo Template::combine_components( $section );\n+\t}\n+\n+\tpublic static function render_material_items( $args ): stdClass {\n+\t\t$content = new stdClass();\n+\n+\t\ttry {\n+\t\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\t\t\t$course_id = $args['course_id'] ?? 0;\n+\t\t\t$item_id   = $args['item_id'] ?? 0;\n+\t\t\tif ( get_post_type( $item_id ) === LP_COURSE_CPT ) {\n+\t\t\t\t$courseModel = CourseModel::find( $item_id, true );\n+\t\t\t} elseif ( $course_id ) {\n+\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( esc_html__( 'Course not found!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$can_show = false;\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\tif ( $courseModel->check_user_is_author( $userModel )\n+\t\t\t\t\t|| user_can( $userModel->get_id(), ADMIN_ROLE ) ) {\n+\t\t\t\t\t$can_show = true;\n+\t\t\t\t} else {\n+\t\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\t\t\tif ( $userCourseModel &&\n+\t\t\t\t\t\t( $userCourseModel->has_enrolled_or_finished()\n+\t\t\t\t\t\t\t|| $userCourseModel->has_purchased() ) ) {\n+\t\t\t\t\t\t$can_show = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\n+\t\t\t\t$can_show = true;\n+\t\t\t}\n+\n+\t\t\t$can_show = apply_filters( 'learn-press\u002Fcourse-material\u002Fcan-show', $can_show, $courseModel, $userModel );\n+\n+\t\t\t$file_per_page = LP_Settings::get_option( 'material_file_per_page', - 1 );\n+\t\t\t$count_files   = LP_Material_Files_DB::getInstance()->get_total( $courseModel->get_id() );\n+\t\t\tif ( ! $can_show || $file_per_page == 0 || $count_files \u003C= 0 ) {\n+\t\t\t\tthrow new Exception( '' );\n+\t\t\t}\n+\n+\t\t\t$material_db = LP_Material_Files_DB::getInstance();\n+\t\t\t$paged       = absint( $args['paged'] ?? 1 );\n+\t\t\t$per_page    = intval( $args['per_page'] ?? 1 );\n+\t\t\t$offset      = ( $per_page > 0 && $paged > 1 ) ? $per_page * ( $paged - 1 ) : 0;\n+\t\t\t\u002F\u002F $total_pages    = $per_page > 0 ? ceil( $total_rows \u002F $per_page ) : 0;\n+\t\t\t$material_files = $material_db->get_material_by_item_id( $args['item_id'], $per_page, $offset, false );\n+\t\t\tif ( empty( $material_files ) ) {\n+\t\t\t\t$content->content = '';\n+\t\t\t} else {\n+\t\t\t\t$material_html = '';\n+\t\t\t\tforeach ( $material_files as $m ) {\n+\t\t\t\t\t$material_html .= self::material_item( $m, $args['item_id'] );\n+\t\t\t\t}\n+\t\t\t\tif ( $args['paged'] === 1 ) {\n+\t\t\t\t\t$sections         = array(\n+\t\t\t\t\t\t'wrap'           => '\u003Cdiv class=\"lp-list-material\">',\n+\t\t\t\t\t\t'table_wrap'     => '\u003Ctable class=\"course-material-table\" >',\n+\t\t\t\t\t\t'table_header'   => self::table_header(),\n+\t\t\t\t\t\t'table_body'     => '\u003Ctbody>',\n+\t\t\t\t\t\t'material_html'  => $material_html,\n+\t\t\t\t\t\t'table_body_end' => '\u003C\u002Ftbody>',\n+\t\t\t\t\t\t'table_wrap_end' => '\u003C\u002Ftable>',\n+\t\t\t\t\t\t'loadmore_btn'   => self::html_load_more_btn( $args ),\n+\t\t\t\t\t\t'wrap_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t\t);\n+\t\t\t\t\t$content->content = Template::combine_components( $sections );\n+\t\t\t\t} else {\n+\t\t\t\t\t$content->content = $material_html;\n+\t\t\t\t}\n+\t\t\t\t$content->total_pages = $args['total_pages'];\n+\t\t\t\t$content->paged       = $args['paged'];\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tif ( $e->getMessage() === '' ) {\n+\t\t\t\t$content->content = '';\n+\t\t\t} else {\n+\t\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\n+\t\t\t}\n+\t\t}\n+\t\treturn $content;\n+\t}\n+\n+\tpublic static function table_header() {\n+\t\t$sections = array(\n+\t\t\t'wrap'      => '\u003Cthead>',\n+\t\t\t'file-name' => sprintf( '\u003Cth class=\"lp-material-th-file-name\">%s\u003C\u002Fth>', esc_html__( 'Name', 'learnpress' ) ),\n+\t\t\t'file-type' => sprintf( '\u003Cth class=\"lp-material-th-file-type\">%s\u003C\u002Fth>', esc_html__( 'Type', 'learnpress' ) ),\n+\t\t\t'file-size' => sprintf( '\u003Cth class=\"lp-material-th-file-size\">%s\u003C\u002Fth>', esc_html__( 'Size', 'learnpress' ) ),\n+\t\t\t'file-link' => sprintf( '\u003Cth class=\"lp-material-th-file-link\">%s\u003C\u002Fth>', esc_html__( 'Download', 'learnpress' ) ),\n+\t\t\t'wrap_end'  => '\u003C\u002Fthead>',\n+\t\t);\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\tpublic static function material_item( $material, $current_item_id ) {\n+\t\t$sections = array(\n+\t\t\t'wrap'      => '\u003Ctr class=\"lp-material-item\">',\n+\t\t\t'file-name' => self::html_file_name( $material, $current_item_id ),\n+\t\t\t'file-type' => self::html_file_type( $material ),\n+\t\t\t'file-size' => self::html_file_size( $material ),\n+\t\t\t'file-link' => self::html_file_link( $material ),\n+\t\t\t'wrap_end'  => '\u003C\u002Ftr>',\n+\t\t);\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * Generate HTML for file name.\n+\t *\n+\t * @param object $material Material object.\n+\t * @param int    $current_item_id Current item ID.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_file_name( $material, $current_item_id ): string {\n+\t\tif ( get_post_type( $current_item_id ) == LP_COURSE_CPT && $material->item_type == LP_LESSON_CPT ) {\n+\t\t\t$html_file_name = sprintf( esc_html( '%1$s ( %2$s )' ), $material->file_name, get_the_title( $material->item_id ) );\n+\t\t} else {\n+\t\t\t$html_file_name = sprintf( esc_html( '%s' ), $material->file_name );\n+\t\t}\n+\n+\t\treturn sprintf( '\u003Ctd class=\"lp-material-file-name\">%s\u003C\u002Ftd>', $html_file_name );\n+\t}\n+\n+\t\u002F**\n+\t * Generate HTML for file type.\n+\t *\n+\t * @param object $material Material object.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_file_type( $material ): string {\n+\t\treturn sprintf( '\u003Ctd class=\"lp-material-file-type\">%s\u003C\u002Ftd>', $material->file_type );\n+\t}\n+\n+\t\u002F**\n+\t * Get file size in human-readable format.\n+\t *\n+\t * @param object $material Material object.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_file_size( $material ): string {\n+\t\tif ( $material->method == 'upload' ) {\n+\t\t\t$file_size = filesize( wp_upload_dir()['basedir'] . $material->file_path );\n+\t\t\t$file_size = ( $file_size \u002F 1024 \u003C 1024 ) ? round( $file_size \u002F 1024, 2 ) . 'KB' : round( $file_size \u002F 1024 \u002F 1024, 2 ) . 'MB';\n+\t\t} else {\n+\t\t\t$args      = array(\n+\t\t\t\t'timeout' => 0.1,\n+\t\t\t);\n+\t\t\t$file_head = wp_remote_head( $material->file_path, $args );\n+\n+\t\t\tif ( is_wp_error( $file_head )\n+\t\t\t\t|| ! isset( $file_head['headers']['content-length'] )\n+\t\t\t\t|| ! $file_head['headers']['content-length'] ) {\n+\t\t\t\t$file_size = '';\n+\t\t\t} else {\n+\t\t\t\t$file_size = $file_head['headers']['content-length'];\n+\t\t\t\t$file_size = self::convert_kb( intval( $file_size ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcourse-material\u002Ffile-size',\n+\t\t\tsprintf( '\u003Ctd class=\"lp-material-file-size\">%s\u003C\u002Ftd>', $file_size ),\n+\t\t\t$material\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Convert file size to human-readable format.\n+\t *\n+\t * @param int $file_size File size in bytes.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function convert_kb( int $file_size ): string {\n+\t\t\u002F\u002F Convert bytes to kilobytes\n+\t\t$file_size = $file_size \u002F 1024;\n+\n+\t\tif ( $file_size \u003C 1024 ) {\n+\t\t\treturn round( $file_size, 2 ) . 'KB';\n+\t\t} elseif ( $file_size \u003C 1048576 ) {\n+\t\t\treturn round( $file_size \u002F 1024, 2 ) . 'MB';\n+\t\t} else {\n+\t\t\treturn round( $file_size \u002F 1048576, 2 ) . 'GB';\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Generate HTML for file link.\n+\t *\n+\t * @param object $material Material object.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_file_link( $material ): string {\n+\t\t$file_path = $material->file_path ?? '';\n+\t\tif ( empty( $file_path ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$file_url = $file_path;\n+\t\tif ( $material->method === 'upload' ) {\n+\t\t\t$file_url = wp_upload_dir()['baseurl'] . $file_path;\n+\t\t}\n+\n+\t\t$enable_nofollow = LP_Settings::instance()->get_option( 'material_url_nofollow', 'yes' );\n+\t\t$rel             = '';\n+\t\tif ( $enable_nofollow == 'yes' && $material->method == 'external' ) {\n+\t\t\t$rel = 'nofollow';\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcourse-material\u002Ffile-link',\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Ctd class=\"lp-material-file-link\">\n+\t\t\t\t\t\u003Ca href=\"%s\" target=\"_blank\" rel=\"%s\">\n+\t                    \u003Ci class=\"lp-icon-file-download btn-download-material\">\u003C\u002Fi>\n+\t                \u003C\u002Fa>\n+\t            \u003C\u002Ftd>',\n+\t\t\t\tesc_url_raw( $file_url ),\n+\t\t\t\t$rel\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Generate HTML for load more button.\n+\t *\n+\t * @param array $args Arguments containing pagination info.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function html_load_more_btn( array $args = [] ): string {\n+\t\t$paged       = $args['paged'] ?? 1;\n+\t\t$total_pages = $args['total_pages'] ?? 1;\n+\n+\t\tif ( $paged >= $total_pages ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fcourse-material\u002Fbtn-load-more',\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-loadmore-material\">\n+\t\t\t\t\t\u003Cbutton class=\"lp-btn lp-loadmore-material\">\n+\t\t\t\t\t\t%s\n+\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Load More', 'learnpress' )\n+\t\t\t)\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,859 +1,859 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Archive Package.\r\n- *\r\n- * @since 4.2.3.2\r\n- * @version 1.0.4\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\ListCourseCategories;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Course;\r\n-use LP_Course_Filter;\r\n-use LP_Request;\r\n-use Throwable;\r\n-\r\n-class FilterCourseTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Ffilter-courses\u002Flayout', [ $this, 'sections' ] );\r\n-\t\t\u002F\u002Fadd_action( 'wp_head', [ $this, 'add_internal_scripts_to_head' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sections of template filter courses.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t * @uses self::html_category\r\n-\t *\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function sections( array $data = [] ) {\r\n-\t\twp_enqueue_script( 'lp-course-filter' );\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! isset( $data['fields'] ) ) {\r\n-\t\t\t\t$data['fields'] = [\r\n-\t\t\t\t\t'search',\r\n-\t\t\t\t\t'price',\r\n-\t\t\t\t\t'category',\r\n-\t\t\t\t\t'tag',\r\n-\t\t\t\t\t'author',\r\n-\t\t\t\t\t'level',\r\n-\t\t\t\t\t'type',\r\n-\t\t\t\t\t'btn_submit',\r\n-\t\t\t\t\t'btn_reset',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$data = apply_filters( 'learn-press\u002Ffilter-courses\u002Fdata', $data );\r\n-\t\t\t} elseif ( is_string( $data['fields'] ) ) {\r\n-\t\t\t\t$data['fields'] = explode( ',', $data['fields'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_array( $data['fields'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Fields must be array' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $data['fields']['btn_submit'] ) ) {\r\n-\t\t\t\t$data['fields'][] = 'btn_submit';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = [];\r\n-\t\t\tforeach ( $data['fields'] as $field ) {\r\n-\t\t\t\tif ( is_callable( [ $this, 'html_' . $field ] ) ) {\r\n-\t\t\t\t\t$sections[ $field ] = $this->{'html_' . $field}( $data );\r\n-\t\t\t\t} else { \u002F\u002F For custom field.\r\n-\t\t\t\t\tdo_action_ref_array(\r\n-\t\t\t\t\t\t'learn-press\u002Ffilter-courses\u002Fsections\u002Ffield\u002Fhtml',\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t&$sections,\r\n-\t\t\t\t\t\t\t$field,\r\n-\t\t\t\t\t\t\t$data,\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F Add button Done for mobile if not has btn submit.\r\n-\t\t\tif ( ! in_array( 'btn_submit', $data['fields'] ) ) {\r\n-\t\t\t\t$sections['btn_done'] = $this->html_btn_done( $data );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class_wrapper_form = $data['class_wrapper_form'] ?? 'lp-form-course-filter';\r\n-\r\n-\t\t\t$wrapper = apply_filters(\r\n-\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf( '\u003Cform class=\"%s\">', $class_wrapper_form ),\r\n-\t\t\t\t\t'sections'    => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'close'       => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__close\">%s\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\tesc_html__( 'Close', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fform>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$data\r\n-\t\t\t);\r\n-\r\n-\t\t\techo Template::combine_components( $wrapper );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html item.\r\n-\t *\r\n-\t * @param string $title\r\n-\t * @param string $content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_item( string $title = '', string $content = '' ): string {\r\n-\t\ttry {\r\n-\t\t\t$title_html   = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$title\r\n-\t\t\t);\r\n-\t\t\t$content_html = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__content\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$content\r\n-\t\t\t);\r\n-\t\t\t$sections     = apply_filters(\r\n-\t\t\t\t'lp\u002Ffilter-courses\u002Fitem\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title'   => $title_html,\r\n-\t\t\t\t\t'content' => $content_html,\r\n-\t\t\t\t],\r\n-\t\t\t\t$title,\r\n-\t\t\t\t$content\r\n-\t\t\t);\r\n-\r\n-\t\t\t$wrapper = apply_filters(\r\n-\t\t\t\t'lp\u002Ffilter-courses\u002Fitem\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-form-course-filter__item\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $wrapper );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html search.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_search( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$value    = LP_Request::get_param( 'c_search' );\r\n-\t\t\t$value    = isset( $data['params_url'] ) ? ( $data['params_url']['c_search'] ?? $value ) : $value;\r\n-\t\t\t$content  = sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"text\" name=\"c_search\" placeholder=\"%s\" value=\"%s\" class=\"%s\" data-search-suggest=\"%d\">',\r\n-\t\t\t\t__( 'Search Course', 'learnpress' ),\r\n-\t\t\t\t$value,\r\n-\t\t\t\t'lp-course-filter-search',\r\n-\t\t\t\t$data['search_suggestion'] ?? 1\r\n-\t\t\t);\r\n-\t\t\t$content .= '\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>';\r\n-\r\n-\t\t\t$sections = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-search-field\">',\r\n-\t\t\t\t'content'     => $content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'result'      => '\u003Cdiv class=\"lp-course-filter-search-result\">\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Search', 'learnpress' ), $content );\r\n-\r\n-\t\t\t$wrapper = apply_filters(\r\n-\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fsearch\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-search\">',\r\n-\t\t\t\t\t'content'     => $content,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$data\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $wrapper );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html price.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_price( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url      = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected   = $params_url['sort_by'] ?? '';\r\n-\t\t\t$data_selected   = explode( ',', $data_selected );\r\n-\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\r\n-\r\n-\t\t\t\u002F\u002F Get number courses free\r\n-\t\t\t$filter_courses_free = new LP_Course_Filter();\r\n-\t\t\t$this->handle_filter_params_before_query( $filter_courses_free, $params_url );\r\n-\t\t\t\u002F\u002F Not count include sort by price.\r\n-\t\t\t$filter_courses_free->sort_by = [];\r\n-\t\t\t$count_courses_free           = Courses::count_course_free( $filter_courses_free );\r\n-\r\n-\t\t\t\u002F\u002F Get number courses has price\r\n-\t\t\t$filter_courses_price = new LP_Course_Filter();\r\n-\t\t\t$this->handle_filter_params_before_query( $filter_courses_price, $params_url );\r\n-\t\t\t$filter_courses_price->query_count = true;\r\n-\t\t\t$filter_courses_price->sort_by     = [ 'on_paid' ];\r\n-\t\t\t$count_courses_paid                = 0;\r\n-\t\t\tCourses::get_courses( $filter_courses_price, $count_courses_paid );\r\n-\r\n-\t\t\t$fields = apply_filters(\r\n-\t\t\t\t'learn-press\u002Ffilter-courses\u002Fprice\u002Ffields',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'free' => [\r\n-\t\t\t\t\t\t'label' => __( 'Free', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $count_courses_free,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t'paid' => [\r\n-\t\t\t\t\t\t'label' => __( 'Paid', 'learnpress' ),\r\n-\t\t\t\t\t\t'count' => $count_courses_paid,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $fields as $key => $field ) {\r\n-\t\t\t\t$value    = \"on_{$key}\";\r\n-\t\t\t\t$disabled = $field['count'] > 0 ? '' : 'disabled';\r\n-\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\r\n-\t\t\t\t$input   = sprintf(\r\n-\t\t\t\t\t'\u003Cinput name=\"sort_by\" type=\"checkbox\" value=\"%1$s\" %2$s %3$s>',\r\n-\t\t\t\t\tesc_attr( $value ),\r\n-\t\t\t\t\tesc_attr( $checked ),\r\n-\t\t\t\t\tesc_attr( $disabled )\r\n-\t\t\t\t);\r\n-\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $field['label'] ) );\r\n-\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $field['count'] ) );\r\n-\r\n-\t\t\t\t$sections = apply_filters(\r\n-\t\t\t\t\t'lp\u002Ffilter-courses\u002Fprice\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'input' => $input,\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t\t'count' => $count,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$field,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wrapper = [\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$content .= Template::combine_components( $wrapper );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Price', 'learnpress' ), $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html course list categories.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function html_category( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url            = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected         = $params_url['term_id'] ?? '';\r\n-\t\t\t$data_selected         = explode( ',', $data_selected );\r\n-\t\t\t$data['data_selected'] = $data_selected;\r\n-\t\t\t$parent_cat_id         = 0;\r\n-\t\t\tif ( isset( $params_url['page_term_id_current'] ) ) {\r\n-\t\t\t\t$category_current_id = $params_url['page_term_id_current'];\r\n-\t\t\t\t$category_current    = get_term_by( 'id', $category_current_id, LP_COURSE_CATEGORY_TAX );\r\n-\r\n-\t\t\t\tif ( ! empty( $category_current ) ) {\r\n-\t\t\t\t\t$parent_cat_id = $category_current_id;\r\n-\t\t\t\t\t$content      .= $this->html_field_category( $category_current->term_id, $category_current->name, $data );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F For subcategories.\r\n-\t\t\tob_start();\r\n-\t\t\t$data['level_current']  = 0;\r\n-\t\t\t$data['parent_term_id'] = $parent_cat_id;\r\n-\t\t\t$this->html_struct_categories( $data );\r\n-\t\t\t$content .= ob_get_clean();\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Categories', 'learnpress' ), $content );\r\n-\r\n-\t\t\t$wrapper = apply_filters(\r\n-\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fcategory\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-category\">',\r\n-\t\t\t\t\t'content'     => $content,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$data\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $wrapper );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get list categories course.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.6.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_struct_categories( array $args = [] ) {\r\n-\t\t$level_current         = $args['level_current'] ?? 0;\r\n-\t\t$number_level_category = $args['number_level_category'] ?? 2;\r\n-\t\t$parent_term_id        = $args['parent_term_id'] ?? 0;\r\n-\r\n-\t\tif ( $level_current >= $number_level_category ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$terms = ListCourseCategories::get_all_categories_id_name( [ 'parent' => $parent_term_id ] );\r\n-\t\tif ( empty( $terms ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$class_wrapper = 'lp-cate-parent';\r\n-\t\tif ( $level_current > 0 ) {\r\n-\t\t\t$class_wrapper = 'lp-cate-child';\r\n-\t\t}\r\n-\r\n-\t\techo sprintf( '\u003Cdiv class=\"%s\">', esc_attr( $class_wrapper ) );\r\n-\t\tforeach ( $terms as $term_id => $term_name ) {\r\n-\t\t\techo sprintf( '\u003Cdiv class=\"lp-cat-%s\">', esc_attr( $term_id ) );\r\n-\t\t\techo $this->html_field_category( $term_id, $term_name, $args );\r\n-\r\n-\t\t\t$args['level_current']  = $level_current + 1;\r\n-\t\t\t$args['parent_term_id'] = $term_id;\r\n-\t\t\t$this->html_struct_categories( $args );\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return string html a field category.\r\n-\t *\r\n-\t * @param int $category_id\r\n-\t * @param string $category_name\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return false|string\r\n-\t * @since 4.2.6.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_field_category( int $category_id, string $category_name, array $args = [] ) {\r\n-\t\t$count_courses       = 0;\r\n-\t\t$filter              = new LP_Course_Filter();\r\n-\t\t$filter->query_count = true;\r\n-\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\r\n-\t\t$this->handle_filter_params_before_query( $filter, $args['params_url'] ?? [] );\r\n-\t\t$filter->term_ids = [ $category_id ];\r\n-\t\t\u002F\u002F$filter->debug_string_query = true;\r\n-\t\tCourses::get_courses( $filter, $count_courses );\r\n-\r\n-\t\t$disabled = $count_courses > 0 ? '' : 'disabled';\r\n-\t\tif ( ! empty( $disabled ) && ( $args['hide_count_zero'] ?? 1 ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$checked = in_array( $category_id, $args['data_selected'] ?? [] ) && empty( $disabled ) ? 'checked' : '';\r\n-\t\t$input   = sprintf(\r\n-\t\t\t'\u003Cinput name=\"term_id\" type=\"checkbox\" value=\"%s\" %s %s>',\r\n-\t\t\tesc_attr( $category_id ),\r\n-\t\t\tesc_attr( $checked ),\r\n-\t\t\t$disabled\r\n-\t\t);\r\n-\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $category_name ) );\r\n-\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $count_courses ) );\r\n-\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'lp\u002Ffilter-courses\u002Fcourse-category\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'start' => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t'input' => $input,\r\n-\t\t\t\t'label' => $label,\r\n-\t\t\t\t'count' => $count,\r\n-\t\t\t\t'end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$category_id,\r\n-\t\t\t$category_name,\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html course tag.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_tag( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url      = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected   = $params_url['tag_id'] ?? '';\r\n-\t\t\t$data_selected   = explode( ',', $data_selected );\r\n-\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\r\n-\t\t\t\u002F\u002F Check has in tag page.\r\n-\t\t\tif ( isset( $params_url['page_tag_id_current'] ) &&\r\n-\t\t\t\tempty( $params_url['tag_id'] ) ) {\r\n-\t\t\t\t$data_selected[] = $params_url['page_tag_id_current'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$terms = get_terms(\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'taxonomy'   => LP_COURSE_TAXONOMY_TAG,\r\n-\t\t\t\t\t'hide_empty' => true,\r\n-\t\t\t\t\t'count'      => false,\r\n-\t\t\t\t]\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( empty( $terms ) ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $terms as $term ) {\r\n-\t\t\t\t$value               = $term->term_id;\r\n-\t\t\t\t$filter              = new LP_Course_Filter();\r\n-\t\t\t\t$filter->query_count = true;\r\n-\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\r\n-\t\t\t\t$filter->tag_ids = [ $value ];\r\n-\r\n-\t\t\t\t$count_courses = 0;\r\n-\t\t\t\tCourses::get_courses( $filter, $count_courses );\r\n-\t\t\t\t$disabled = $count_courses > 0 ? '' : 'disabled';\r\n-\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\r\n-\t\t\t\t$input   = sprintf( '\u003Cinput name=\"tag_id\" type=\"checkbox\" value=\"%s\" %s %s>', esc_attr( $value ), esc_attr( $checked ), $disabled );\r\n-\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $term->name ) );\r\n-\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $count_courses ) );\r\n-\r\n-\t\t\t\t$sections = apply_filters(\r\n-\t\t\t\t\t'lp\u002Ffilter-courses\u002Fcourse-tag\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'input' => $input,\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t\t'count' => $count,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$term,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wrapper = [\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$content .= Template::combine_components( $wrapper );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Tags', 'learnpress' ), $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html course tag.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function html_author( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url      = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected   = $params_url['c_authors'] ?? '';\r\n-\t\t\t$data_selected   = explode( ',', $data_selected );\r\n-\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\r\n-\t\t\t$instructors     = get_users(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'role__in' => [ LP_TEACHER_ROLE, ADMIN_ROLE ],\r\n-\t\t\t\t\t'fields'   => array( 'ID' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $instructors as $instructorObj ) {\r\n-\t\t\t\t$userModel = UserModel::find( $instructorObj->ID, true );\r\n-\t\t\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$instructor_id              = $userModel->get_id();\r\n-\t\t\t\t$total_course_of_instructor = 0;\r\n-\r\n-\t\t\t\t$filter              = new LP_Course_Filter();\r\n-\t\t\t\t$filter->query_count = true;\r\n-\t\t\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\r\n-\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\r\n-\t\t\t\t$filter->post_authors = [ $instructor_id ];\r\n-\t\t\t\tCourses::get_courses( $filter, $total_course_of_instructor );\r\n-\r\n-\t\t\t\t$value    = $instructor_id;\r\n-\t\t\t\t$disabled = $total_course_of_instructor > 0 ? '' : 'disabled';\r\n-\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\r\n-\t\t\t\t$input   = sprintf( '\u003Cinput name=\"c_authors\" type=\"checkbox\" value=\"%s\" %s %s>', esc_attr( $value ), esc_attr( $checked ), $disabled );\r\n-\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $userModel->get_display_name() ) );\r\n-\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $total_course_of_instructor ) );\r\n-\r\n-\t\t\t\t$sections = apply_filters(\r\n-\t\t\t\t\t'lp\u002Ffilter-courses\u002Fauthor\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'input' => $input,\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t\t'count' => $count,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$userModel,\r\n-\t\t\t\t\t$total_course_of_instructor,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wrapper = [\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$content .= Template::combine_components( $wrapper );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Author', 'learnpress' ), $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html course tag.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function html_level( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url      = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected   = $params_url['c_level'] ?? '';\r\n-\t\t\t$data_selected   = explode( ',', $data_selected );\r\n-\t\t\t$fields          = lp_course_level();\r\n-\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\r\n-\r\n-\t\t\tforeach ( $fields as $key => $field ) {\r\n-\t\t\t\t$value = $key;\r\n-\t\t\t\tif ( empty( $key ) ) {\r\n-\t\t\t\t\t$value = 'all';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$filter = new LP_Course_Filter();\r\n-\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\r\n-\t\t\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\r\n-\t\t\t\t$filter->query_count = true;\r\n-\t\t\t\t$filter->levels      = [ $key ];\r\n-\t\t\t\tif ( $key === 'all' ) {\r\n-\t\t\t\t\t$filter->levels[] = '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$total_courses = 0;\r\n-\t\t\t\tCourses::get_courses( $filter, $total_courses );\r\n-\r\n-\t\t\t\t$disabled = $total_courses > 0 ? '' : 'disabled';\r\n-\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\r\n-\t\t\t\t$input   = sprintf(\r\n-\t\t\t\t\t'\u003Cinput name=\"c_level\" type=\"checkbox\" value=\"%1$s\" %2$s %3$s>',\r\n-\t\t\t\t\tesc_attr( $value ),\r\n-\t\t\t\t\tesc_attr( $checked ),\r\n-\t\t\t\t\tesc_attr( $disabled )\r\n-\t\t\t\t);\r\n-\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $field ) );\r\n-\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $total_courses ) );\r\n-\r\n-\t\t\t\t$sections = apply_filters(\r\n-\t\t\t\t\t'lp\u002Ffilter-courses\u002Flevels\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'input' => $input,\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t\t'count' => $count,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$field,\r\n-\t\t\t\t\t$value,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wrapper = [\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$content .= Template::combine_components( $wrapper );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Levels', 'learnpress' ), $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get HTML fields type (online\u002Foffline)\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_type( array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\t\ttry {\r\n-\t\t\t$this->check_param_url_has_lang( $data );\r\n-\t\t\t$params_url    = $data['params_url'] ?? [];\r\n-\t\t\t$data_selected = $params_url['c_type'] ?? '';\r\n-\t\t\t$data_selected = explode( ',', $data_selected );\r\n-\t\t\t$filter_types  = apply_filters(\r\n-\t\t\t\t'learn-press\u002Ffilter-courses\u002Ftype\u002Ffields',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'online'  => __( 'Online', 'learnpress' ),\r\n-\t\t\t\t\t'offline' => __( 'Offline', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tforeach ( $filter_types as $key => $type ) {\r\n-\t\t\t\t$checked  = in_array( $key, $data_selected ) ? 'checked' : '';\r\n-\t\t\t\t$input    = sprintf(\r\n-\t\t\t\t\t'\u003Cinput name=\"c_type\" type=\"checkbox\" value=\"%1$s\" %2$s>',\r\n-\t\t\t\t\tesc_attr( $key ),\r\n-\t\t\t\t\tesc_attr( $checked )\r\n-\t\t\t\t);\r\n-\t\t\t\t$label    = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $type ) );\r\n-\t\t\t\t$sections = apply_filters(\r\n-\t\t\t\t\t'lp\u002Ffilter-courses\u002Ftype\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'input' => $input,\r\n-\t\t\t\t\t\t'label' => $label,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$type,\r\n-\t\t\t\t\t$key,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$wrapper = [\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $sections ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$content .= Template::combine_components( $wrapper );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = $this->html_item( esc_html__( 'Type', 'learnpress' ), $content );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html button submit filter.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_btn_submit( array $data = [] ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Cbutton type=\"submit\" class=\"course-filter-submit\">%s\u003C\u002Fbutton>',\r\n-\t\t\tesc_html__( 'Apply', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html button Done - for mobile when not show btn submit.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_btn_done( array $data = [] ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Cbutton type=\"submit\" class=\"course-filter-submit lp-btn-done lp-hidden\">%s\u003C\u002Fbutton>',\r\n-\t\t\tesc_html__( 'Done', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html button reset filter.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_btn_reset( array $data = [] ): string {\r\n-\t\treturn sprintf(\r\n-\t\t\t'\u003Cbutton class=\"course-filter-reset\">%s\u003C\u002Fbutton>',\r\n-\t\t\tesc_html__( 'Reset', 'learnpress' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html button reset filter.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_btn_filter_mobile( array $data = [] ): string {\r\n-\t\t$count = $data['count_fields_selected'] ?? '';\r\n-\t\tif ( $count === '(0)' ) {\r\n-\t\t\t$count = '';\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'               => '\u003Cdiv class=\"course-filter-btn-mobile\">',\r\n-\t\t\t'icon'                  => '\u003Cspan class=\"lp-icon lp-icon-filter\">\u003C\u002Fspan>',\r\n-\t\t\t'count_fields_selected' => sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"course-filter-count-fields-selected\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t$count\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set params from url for filter.\r\n-\t *\r\n-\t * @param LP_Course_Filter $filter\r\n-\t * @param array $params_url\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function handle_filter_params_before_query( LP_Course_Filter &$filter, array $params_url = [] ) {\r\n-\t\tCourses::handle_params_for_query_courses( $filter, $params_url );\r\n-\r\n-\t\t\u002F\u002F Check has in category page.\r\n-\t\tif ( isset( $params_url['page_term_id_current'] ) &&\r\n-\t\t\tempty( $params_url['term_id'] ) ) {\r\n-\t\t\t$filter->term_ids[] = $params_url['page_term_id_current'];\r\n-\t\t} elseif ( isset( $params_url['page_tag_id_current'] )\r\n-\t\t\t&& empty( $params_url['tag_id'] ) ) {\r\n-\t\t\t$filter->tag_ids[] = $params_url['page_tag_id_current'];\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check param url has lang for multiple lang.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.5.7\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function check_param_url_has_lang( array $data = [] ) {\r\n-\t\t$params_url = $data['params_url'] ?? [];\r\n-\t\tif ( isset( $params_url['lang'] ) ) {\r\n-\t\t\t$_REQUEST['lang'] = sanitize_text_field( $params_url['lang'] );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Archive Package.\n+ *\n+ * @since 4.2.3.2\n+ * @version 1.0.4\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\ListCourseCategories;\n+use LearnPress\\Models\\UserModel;\n+use LP_Course;\n+use LP_Course_Filter;\n+use LP_Request;\n+use Throwable;\n+\n+class FilterCourseTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Ffilter-courses\u002Flayout', [ $this, 'sections' ] );\n+\t\t\u002F\u002Fadd_action( 'wp_head', [ $this, 'add_internal_scripts_to_head' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Sections of template filter courses.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t * @uses self::html_category\n+\t *\n+\t * @since 4.2.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function sections( array $data = [] ) {\n+\t\twp_enqueue_script( 'lp-course-filter' );\n+\n+\t\ttry {\n+\t\t\tif ( ! isset( $data['fields'] ) ) {\n+\t\t\t\t$data['fields'] = [\n+\t\t\t\t\t'search',\n+\t\t\t\t\t'price',\n+\t\t\t\t\t'category',\n+\t\t\t\t\t'tag',\n+\t\t\t\t\t'author',\n+\t\t\t\t\t'level',\n+\t\t\t\t\t'type',\n+\t\t\t\t\t'btn_submit',\n+\t\t\t\t\t'btn_reset',\n+\t\t\t\t];\n+\n+\t\t\t\t$data = apply_filters( 'learn-press\u002Ffilter-courses\u002Fdata', $data );\n+\t\t\t} elseif ( is_string( $data['fields'] ) ) {\n+\t\t\t\t$data['fields'] = explode( ',', $data['fields'] );\n+\t\t\t}\n+\n+\t\t\tif ( ! is_array( $data['fields'] ) ) {\n+\t\t\t\tthrow new Exception( 'Fields must be array' );\n+\t\t\t}\n+\n+\t\t\tif ( isset( $data['fields']['btn_submit'] ) ) {\n+\t\t\t\t$data['fields'][] = 'btn_submit';\n+\t\t\t}\n+\n+\t\t\t$sections = [];\n+\t\t\tforeach ( $data['fields'] as $field ) {\n+\t\t\t\tif ( is_callable( [ $this, 'html_' . $field ] ) ) {\n+\t\t\t\t\t$sections[ $field ] = $this->{'html_' . $field}( $data );\n+\t\t\t\t} else { \u002F\u002F For custom field.\n+\t\t\t\t\tdo_action_ref_array(\n+\t\t\t\t\t\t'learn-press\u002Ffilter-courses\u002Fsections\u002Ffield\u002Fhtml',\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t&$sections,\n+\t\t\t\t\t\t\t$field,\n+\t\t\t\t\t\t\t$data,\n+\t\t\t\t\t\t]\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F Add button Done for mobile if not has btn submit.\n+\t\t\tif ( ! in_array( 'btn_submit', $data['fields'] ) ) {\n+\t\t\t\t$sections['btn_done'] = $this->html_btn_done( $data );\n+\t\t\t}\n+\n+\t\t\t$class_wrapper_form = $data['class_wrapper_form'] ?? 'lp-form-course-filter';\n+\n+\t\t\t$wrapper = apply_filters(\n+\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf( '\u003Cform class=\"%s\">', $class_wrapper_form ),\n+\t\t\t\t\t'sections'    => Template::combine_components( $sections ),\n+\t\t\t\t\t'close'       => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__close\">%s\u003Ci class=\"lp-icon-close\">\u003C\u002Fi>\u003C\u002Fdiv>',\n+\t\t\t\t\t\tesc_html__( 'Close', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fform>',\n+\t\t\t\t],\n+\t\t\t\t$data\n+\t\t\t);\n+\n+\t\t\techo Template::combine_components( $wrapper );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get html item.\n+\t *\n+\t * @param string $title\n+\t * @param string $content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_item( string $title = '', string $content = '' ): string {\n+\t\ttry {\n+\t\t\t$title_html   = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__title\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$title\n+\t\t\t);\n+\t\t\t$content_html = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-form-course-filter__content\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$content\n+\t\t\t);\n+\t\t\t$sections     = apply_filters(\n+\t\t\t\t'lp\u002Ffilter-courses\u002Fitem\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'title'   => $title_html,\n+\t\t\t\t\t'content' => $content_html,\n+\t\t\t\t],\n+\t\t\t\t$title,\n+\t\t\t\t$content\n+\t\t\t);\n+\n+\t\t\t$wrapper = apply_filters(\n+\t\t\t\t'lp\u002Ffilter-courses\u002Fitem\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-form-course-filter__item\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $wrapper );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html search.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_search( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$value    = LP_Request::get_param( 'c_search' );\n+\t\t\t$value    = isset( $data['params_url'] ) ? ( $data['params_url']['c_search'] ?? $value ) : $value;\n+\t\t\t$content  = sprintf(\n+\t\t\t\t'\u003Cinput type=\"text\" name=\"c_search\" placeholder=\"%s\" value=\"%s\" class=\"%s\" data-search-suggest=\"%d\">',\n+\t\t\t\t__( 'Search Course', 'learnpress' ),\n+\t\t\t\t$value,\n+\t\t\t\t'lp-course-filter-search',\n+\t\t\t\t$data['search_suggestion'] ?? 1\n+\t\t\t);\n+\t\t\t$content .= '\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>';\n+\n+\t\t\t$sections = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-search-field\">',\n+\t\t\t\t'content'     => $content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'result'      => '\u003Cdiv class=\"lp-course-filter-search-result\">\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Search', 'learnpress' ), $content );\n+\n+\t\t\t$wrapper = apply_filters(\n+\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fsearch\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-search\">',\n+\t\t\t\t\t'content'     => $content,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$data\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $wrapper );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html price.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_price( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url      = $data['params_url'] ?? [];\n+\t\t\t$data_selected   = $params_url['sort_by'] ?? '';\n+\t\t\t$data_selected   = explode( ',', $data_selected );\n+\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\n+\n+\t\t\t\u002F\u002F Get number courses free\n+\t\t\t$filter_courses_free = new LP_Course_Filter();\n+\t\t\t$this->handle_filter_params_before_query( $filter_courses_free, $params_url );\n+\t\t\t\u002F\u002F Not count include sort by price.\n+\t\t\t$filter_courses_free->sort_by = [];\n+\t\t\t$count_courses_free           = Courses::count_course_free( $filter_courses_free );\n+\n+\t\t\t\u002F\u002F Get number courses has price\n+\t\t\t$filter_courses_price = new LP_Course_Filter();\n+\t\t\t$this->handle_filter_params_before_query( $filter_courses_price, $params_url );\n+\t\t\t$filter_courses_price->query_count = true;\n+\t\t\t$filter_courses_price->sort_by     = [ 'on_paid' ];\n+\t\t\t$count_courses_paid                = 0;\n+\t\t\tCourses::get_courses( $filter_courses_price, $count_courses_paid );\n+\n+\t\t\t$fields = apply_filters(\n+\t\t\t\t'learn-press\u002Ffilter-courses\u002Fprice\u002Ffields',\n+\t\t\t\t[\n+\t\t\t\t\t'free' => [\n+\t\t\t\t\t\t'label' => __( 'Free', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $count_courses_free,\n+\t\t\t\t\t],\n+\t\t\t\t\t'paid' => [\n+\t\t\t\t\t\t'label' => __( 'Paid', 'learnpress' ),\n+\t\t\t\t\t\t'count' => $count_courses_paid,\n+\t\t\t\t\t],\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tforeach ( $fields as $key => $field ) {\n+\t\t\t\t$value    = \"on_{$key}\";\n+\t\t\t\t$disabled = $field['count'] > 0 ? '' : 'disabled';\n+\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\n+\t\t\t\t$input   = sprintf(\n+\t\t\t\t\t'\u003Cinput name=\"sort_by\" type=\"checkbox\" value=\"%1$s\" %2$s %3$s>',\n+\t\t\t\t\tesc_attr( $value ),\n+\t\t\t\t\tesc_attr( $checked ),\n+\t\t\t\t\tesc_attr( $disabled )\n+\t\t\t\t);\n+\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $field['label'] ) );\n+\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $field['count'] ) );\n+\n+\t\t\t\t$sections = apply_filters(\n+\t\t\t\t\t'lp\u002Ffilter-courses\u002Fprice\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'input' => $input,\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t\t'count' => $count,\n+\t\t\t\t\t],\n+\t\t\t\t\t$field,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\n+\t\t\t\t$wrapper = [\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$content .= Template::combine_components( $wrapper );\n+\t\t\t}\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Price', 'learnpress' ), $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html course list categories.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function html_category( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url            = $data['params_url'] ?? [];\n+\t\t\t$data_selected         = $params_url['term_id'] ?? '';\n+\t\t\t$data_selected         = explode( ',', $data_selected );\n+\t\t\t$data['data_selected'] = $data_selected;\n+\t\t\t$parent_cat_id         = 0;\n+\t\t\tif ( isset( $params_url['page_term_id_current'] ) ) {\n+\t\t\t\t$category_current_id = $params_url['page_term_id_current'];\n+\t\t\t\t$category_current    = get_term_by( 'id', $category_current_id, LP_COURSE_CATEGORY_TAX );\n+\n+\t\t\t\tif ( ! empty( $category_current ) ) {\n+\t\t\t\t\t$parent_cat_id = $category_current_id;\n+\t\t\t\t\t$content      .= $this->html_field_category( $category_current->term_id, $category_current->name, $data );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F For subcategories.\n+\t\t\tob_start();\n+\t\t\t$data['level_current']  = 0;\n+\t\t\t$data['parent_term_id'] = $parent_cat_id;\n+\t\t\t$this->html_struct_categories( $data );\n+\t\t\t$content .= ob_get_clean();\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Categories', 'learnpress' ), $content );\n+\n+\t\t\t$wrapper = apply_filters(\n+\t\t\t\t'lp\u002Ffilter-courses\u002Fsections\u002Fcategory\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter-category\">',\n+\t\t\t\t\t'content'     => $content,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$data\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $wrapper );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get list categories course.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return void\n+\t * @since 4.2.6.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_struct_categories( array $args = [] ) {\n+\t\t$level_current         = $args['level_current'] ?? 0;\n+\t\t$number_level_category = $args['number_level_category'] ?? 2;\n+\t\t$parent_term_id        = $args['parent_term_id'] ?? 0;\n+\n+\t\tif ( $level_current >= $number_level_category ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$terms = ListCourseCategories::get_all_categories_id_name( [ 'parent' => $parent_term_id ] );\n+\t\tif ( empty( $terms ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$class_wrapper = 'lp-cate-parent';\n+\t\tif ( $level_current > 0 ) {\n+\t\t\t$class_wrapper = 'lp-cate-child';\n+\t\t}\n+\n+\t\techo sprintf( '\u003Cdiv class=\"%s\">', esc_attr( $class_wrapper ) );\n+\t\tforeach ( $terms as $term_id => $term_name ) {\n+\t\t\techo sprintf( '\u003Cdiv class=\"lp-cat-%s\">', esc_attr( $term_id ) );\n+\t\t\techo $this->html_field_category( $term_id, $term_name, $args );\n+\n+\t\t\t$args['level_current']  = $level_current + 1;\n+\t\t\t$args['parent_term_id'] = $term_id;\n+\t\t\t$this->html_struct_categories( $args );\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t}\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+\n+\t\u002F**\n+\t * Return string html a field category.\n+\t *\n+\t * @param int $category_id\n+\t * @param string $category_name\n+\t * @param array $args\n+\t *\n+\t * @return false|string\n+\t * @since 4.2.6.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_field_category( int $category_id, string $category_name, array $args = [] ) {\n+\t\t$count_courses       = 0;\n+\t\t$filter              = new LP_Course_Filter();\n+\t\t$filter->query_count = true;\n+\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\n+\t\t$this->handle_filter_params_before_query( $filter, $args['params_url'] ?? [] );\n+\t\t$filter->term_ids = [ $category_id ];\n+\t\t\u002F\u002F$filter->debug_string_query = true;\n+\t\tCourses::get_courses( $filter, $count_courses );\n+\n+\t\t$disabled = $count_courses > 0 ? '' : 'disabled';\n+\t\tif ( ! empty( $disabled ) && ( $args['hide_count_zero'] ?? 1 ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$checked = in_array( $category_id, $args['data_selected'] ?? [] ) && empty( $disabled ) ? 'checked' : '';\n+\t\t$input   = sprintf(\n+\t\t\t'\u003Cinput name=\"term_id\" type=\"checkbox\" value=\"%s\" %s %s>',\n+\t\t\tesc_attr( $category_id ),\n+\t\t\tesc_attr( $checked ),\n+\t\t\t$disabled\n+\t\t);\n+\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $category_name ) );\n+\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $count_courses ) );\n+\n+\t\t$sections = apply_filters(\n+\t\t\t'lp\u002Ffilter-courses\u002Fcourse-category\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'start' => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t'input' => $input,\n+\t\t\t\t'label' => $label,\n+\t\t\t\t'count' => $count,\n+\t\t\t\t'end'   => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$category_id,\n+\t\t\t$category_name,\n+\t\t\t$args\n+\t\t);\n+\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * Get html course tag.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_tag( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url      = $data['params_url'] ?? [];\n+\t\t\t$data_selected   = $params_url['tag_id'] ?? '';\n+\t\t\t$data_selected   = explode( ',', $data_selected );\n+\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\n+\t\t\t\u002F\u002F Check has in tag page.\n+\t\t\tif ( isset( $params_url['page_tag_id_current'] ) &&\n+\t\t\t\tempty( $params_url['tag_id'] ) ) {\n+\t\t\t\t$data_selected[] = $params_url['page_tag_id_current'];\n+\t\t\t}\n+\n+\t\t\t$terms = get_terms(\n+\t\t\t\t[\n+\t\t\t\t\t'taxonomy'   => LP_COURSE_TAXONOMY_TAG,\n+\t\t\t\t\t'hide_empty' => true,\n+\t\t\t\t\t'count'      => false,\n+\t\t\t\t]\n+\t\t\t);\n+\n+\t\t\tif ( empty( $terms ) ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\tforeach ( $terms as $term ) {\n+\t\t\t\t$value               = $term->term_id;\n+\t\t\t\t$filter              = new LP_Course_Filter();\n+\t\t\t\t$filter->query_count = true;\n+\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\n+\t\t\t\t$filter->tag_ids = [ $value ];\n+\n+\t\t\t\t$count_courses = 0;\n+\t\t\t\tCourses::get_courses( $filter, $count_courses );\n+\t\t\t\t$disabled = $count_courses > 0 ? '' : 'disabled';\n+\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\n+\t\t\t\t$input   = sprintf( '\u003Cinput name=\"tag_id\" type=\"checkbox\" value=\"%s\" %s %s>', esc_attr( $value ), esc_attr( $checked ), $disabled );\n+\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', wp_kses_post( $term->name ) );\n+\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $count_courses ) );\n+\n+\t\t\t\t$sections = apply_filters(\n+\t\t\t\t\t'lp\u002Ffilter-courses\u002Fcourse-tag\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'input' => $input,\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t\t'count' => $count,\n+\t\t\t\t\t],\n+\t\t\t\t\t$term,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\n+\t\t\t\t$wrapper = [\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$content .= Template::combine_components( $wrapper );\n+\t\t\t}\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Tags', 'learnpress' ), $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html course tag.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function html_author( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url      = $data['params_url'] ?? [];\n+\t\t\t$data_selected   = $params_url['c_authors'] ?? '';\n+\t\t\t$data_selected   = explode( ',', $data_selected );\n+\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\n+\t\t\t$instructors     = get_users(\n+\t\t\t\tarray(\n+\t\t\t\t\t'role__in' => [ LP_TEACHER_ROLE, ADMIN_ROLE ],\n+\t\t\t\t\t'fields'   => array( 'ID' ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tforeach ( $instructors as $instructorObj ) {\n+\t\t\t\t$userModel = UserModel::find( $instructorObj->ID, true );\n+\t\t\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$instructor_id              = $userModel->get_id();\n+\t\t\t\t$total_course_of_instructor = 0;\n+\n+\t\t\t\t$filter              = new LP_Course_Filter();\n+\t\t\t\t$filter->query_count = true;\n+\t\t\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\n+\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\n+\t\t\t\t$filter->post_authors = [ $instructor_id ];\n+\t\t\t\tCourses::get_courses( $filter, $total_course_of_instructor );\n+\n+\t\t\t\t$value    = $instructor_id;\n+\t\t\t\t$disabled = $total_course_of_instructor > 0 ? '' : 'disabled';\n+\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\n+\t\t\t\t$input   = sprintf( '\u003Cinput name=\"c_authors\" type=\"checkbox\" value=\"%s\" %s %s>', esc_attr( $value ), esc_attr( $checked ), $disabled );\n+\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $userModel->get_display_name() ) );\n+\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $total_course_of_instructor ) );\n+\n+\t\t\t\t$sections = apply_filters(\n+\t\t\t\t\t'lp\u002Ffilter-courses\u002Fauthor\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'input' => $input,\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t\t'count' => $count,\n+\t\t\t\t\t],\n+\t\t\t\t\t$userModel,\n+\t\t\t\t\t$total_course_of_instructor,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\n+\t\t\t\t$wrapper = [\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$content .= Template::combine_components( $wrapper );\n+\t\t\t}\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Author', 'learnpress' ), $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html course tag.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function html_level( array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url      = $data['params_url'] ?? [];\n+\t\t\t$data_selected   = $params_url['c_level'] ?? '';\n+\t\t\t$data_selected   = explode( ',', $data_selected );\n+\t\t\t$fields          = lp_course_level();\n+\t\t\t$hide_count_zero = $data['hide_count_zero'] ?? 1;\n+\n+\t\t\tforeach ( $fields as $key => $field ) {\n+\t\t\t\t$value = $key;\n+\t\t\t\tif ( empty( $key ) ) {\n+\t\t\t\t\t$value = 'all';\n+\t\t\t\t}\n+\n+\t\t\t\t$filter = new LP_Course_Filter();\n+\t\t\t\t$this->handle_filter_params_before_query( $filter, $params_url );\n+\t\t\t\t$filter->only_fields = [ 'DISTINCT(ID)' ];\n+\t\t\t\t$filter->query_count = true;\n+\t\t\t\t$filter->levels      = [ $key ];\n+\t\t\t\tif ( $key === 'all' ) {\n+\t\t\t\t\t$filter->levels[] = '';\n+\t\t\t\t}\n+\n+\t\t\t\t$total_courses = 0;\n+\t\t\t\tCourses::get_courses( $filter, $total_courses );\n+\n+\t\t\t\t$disabled = $total_courses > 0 ? '' : 'disabled';\n+\t\t\t\tif ( ! empty( $disabled ) && $hide_count_zero ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$checked = in_array( $value, $data_selected ) && empty( $disabled ) ? 'checked' : '';\n+\t\t\t\t$input   = sprintf(\n+\t\t\t\t\t'\u003Cinput name=\"c_level\" type=\"checkbox\" value=\"%1$s\" %2$s %3$s>',\n+\t\t\t\t\tesc_attr( $value ),\n+\t\t\t\t\tesc_attr( $checked ),\n+\t\t\t\t\tesc_attr( $disabled )\n+\t\t\t\t);\n+\t\t\t\t$label   = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $field ) );\n+\t\t\t\t$count   = sprintf( '\u003Cspan class=\"count\">%s\u003C\u002Fspan>', esc_html( $total_courses ) );\n+\n+\t\t\t\t$sections = apply_filters(\n+\t\t\t\t\t'lp\u002Ffilter-courses\u002Flevels\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'input' => $input,\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t\t'count' => $count,\n+\t\t\t\t\t],\n+\t\t\t\t\t$field,\n+\t\t\t\t\t$value,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\n+\t\t\t\t$wrapper = [\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$content .= Template::combine_components( $wrapper );\n+\t\t\t}\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Levels', 'learnpress' ), $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get HTML fields type (online\u002Foffline)\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_type( array $data = [] ): string {\n+\t\t$content = '';\n+\t\ttry {\n+\t\t\t$this->check_param_url_has_lang( $data );\n+\t\t\t$params_url    = $data['params_url'] ?? [];\n+\t\t\t$data_selected = $params_url['c_type'] ?? '';\n+\t\t\t$data_selected = explode( ',', $data_selected );\n+\t\t\t$filter_types  = apply_filters(\n+\t\t\t\t'learn-press\u002Ffilter-courses\u002Ftype\u002Ffields',\n+\t\t\t\tarray(\n+\t\t\t\t\t'online'  => __( 'Online', 'learnpress' ),\n+\t\t\t\t\t'offline' => __( 'Offline', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tforeach ( $filter_types as $key => $type ) {\n+\t\t\t\t$checked  = in_array( $key, $data_selected ) ? 'checked' : '';\n+\t\t\t\t$input    = sprintf(\n+\t\t\t\t\t'\u003Cinput name=\"c_type\" type=\"checkbox\" value=\"%1$s\" %2$s>',\n+\t\t\t\t\tesc_attr( $key ),\n+\t\t\t\t\tesc_attr( $checked )\n+\t\t\t\t);\n+\t\t\t\t$label    = sprintf( '\u003Clabel for=\"\">%s\u003C\u002Flabel>', esc_html( $type ) );\n+\t\t\t\t$sections = apply_filters(\n+\t\t\t\t\t'lp\u002Ffilter-courses\u002Ftype\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'input' => $input,\n+\t\t\t\t\t\t'label' => $label,\n+\t\t\t\t\t],\n+\t\t\t\t\t$type,\n+\t\t\t\t\t$key,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\n+\t\t\t\t$wrapper = [\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-filter__field\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $sections ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\t$content .= Template::combine_components( $wrapper );\n+\t\t\t}\n+\n+\t\t\t$content = $this->html_item( esc_html__( 'Type', 'learnpress' ), $content );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html button submit filter.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_btn_submit( array $data = [] ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Cbutton type=\"submit\" class=\"course-filter-submit\">%s\u003C\u002Fbutton>',\n+\t\t\tesc_html__( 'Apply', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get html button Done - for mobile when not show btn submit.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_btn_done( array $data = [] ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Cbutton type=\"submit\" class=\"course-filter-submit lp-btn-done lp-hidden\">%s\u003C\u002Fbutton>',\n+\t\t\tesc_html__( 'Done', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get html button reset filter.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_btn_reset( array $data = [] ): string {\n+\t\treturn sprintf(\n+\t\t\t'\u003Cbutton class=\"course-filter-reset\">%s\u003C\u002Fbutton>',\n+\t\t\tesc_html__( 'Reset', 'learnpress' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get html button reset filter.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_btn_filter_mobile( array $data = [] ): string {\n+\t\t$count = $data['count_fields_selected'] ?? '';\n+\t\tif ( $count === '(0)' ) {\n+\t\t\t$count = '';\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'               => '\u003Cdiv class=\"course-filter-btn-mobile\">',\n+\t\t\t'icon'                  => '\u003Cspan class=\"lp-icon lp-icon-filter\">\u003C\u002Fspan>',\n+\t\t\t'count_fields_selected' => sprintf(\n+\t\t\t\t'\u003Cspan class=\"course-filter-count-fields-selected\">%s\u003C\u002Fspan>',\n+\t\t\t\t$count\n+\t\t\t),\n+\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Set params from url for filter.\n+\t *\n+\t * @param LP_Course_Filter $filter\n+\t * @param array $params_url\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function handle_filter_params_before_query( LP_Course_Filter &$filter, array $params_url = [] ) {\n+\t\tCourses::handle_params_for_query_courses( $filter, $params_url );\n+\n+\t\t\u002F\u002F Check has in category page.\n+\t\tif ( isset( $params_url['page_term_id_current'] ) &&\n+\t\t\tempty( $params_url['term_id'] ) ) {\n+\t\t\t$filter->term_ids[] = $params_url['page_term_id_current'];\n+\t\t} elseif ( isset( $params_url['page_tag_id_current'] )\n+\t\t\t&& empty( $params_url['tag_id'] ) ) {\n+\t\t\t$filter->tag_ids[] = $params_url['page_tag_id_current'];\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Check param url has lang for multiple lang.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t * @since 4.2.5.7\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function check_param_url_has_lang( array $data = [] ) {\n+\t\t$params_url = $data['params_url'] ?? [];\n+\t\tif ( isset( $params_url['lang'] ) ) {\n+\t\t\t$_REQUEST['lang'] = sanitize_text_field( $params_url['lang'] );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesRelatedTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesRelatedTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesRelatedTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesRelatedTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,219 +1,219 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks List Courses.\r\n- *\r\n- * @since 4.2.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Course_Filter;\r\n-use LP_Database;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class ListCoursesRelatedTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', [ $this, 'layout_courses' ], 10, 2 );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t * @use self::render_courses\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_courses';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout default list courses.\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function layout_courses( CourseModel $course, $limit ) {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"lp-list-courses-related\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$callback = [\r\n-\t\t\t'class'  => get_class( $this ),\r\n-\t\t\t'method' => 'render_courses',\r\n-\t\t];\r\n-\t\t$args     = [\r\n-\t\t\t'id_url'    => 'course-related',\r\n-\t\t\t'course_id' => $course->get_id(),\r\n-\t\t\t'limit'     => $limit,\r\n-\t\t];\r\n-\r\n-\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\r\n-\t\techo Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render template list courses with settings param.\r\n-\t *\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return stdClass { content: string_html }\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic static function render_courses( array $settings = [] ): stdClass {\r\n-\t\t$content          = new stdClass();\r\n-\t\t$content->content = '';\r\n-\r\n-\t\t$filter    = new LP_Course_Filter();\r\n-\t\t$course_id = $settings['course_id'] ?? 0;\r\n-\t\tif ( empty( $course_id ) ) {\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t$courseModelCurrent = CourseModel::find( $course_id, true );\r\n-\t\t$terms              = $courseModelCurrent->get_categories();\r\n-\t\t$term_ids           = [];\r\n-\r\n-\t\tforeach ( $terms as $term ) {\r\n-\t\t\t$term_ids[] = $term->term_id ?? 0;\r\n-\r\n-\t\t\tif ( $term->parent ) {\r\n-\t\t\t\t$term_ids[] = $term->parent;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$total_rows          = 0;\r\n-\t\t$filter->only_fields = [ 'DISTINCT(ID) AS ID' ];\r\n-\t\t$filter->post_status = [ 'publish' ];\r\n-\t\t$filter->limit       = $settings['limit'] ?? 4;\r\n-\t\t$filter->term_ids    = $term_ids;\r\n-\t\t$filter->query_count = false;\r\n-\t\t$filter->order_by    = 'rand()';\r\n-\t\t$filter->where[]     = LP_Database::getInstance()->wpdb->prepare( 'AND p.ID != %d', $course_id );\r\n-\r\n-\t\t$courses = Courses::get_courses( $filter, $total_rows );\r\n-\t\tif ( empty( $courses ) ) {\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Handle layout\r\n-\t\t$html_ul_courses = [\r\n-\t\t\t'\u003Cul class=\"lp-courses-related learn-press-courses\">' => '\u003C\u002Ful>',\r\n-\t\t];\r\n-\r\n-\t\tob_start();\r\n-\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t$courseModel = CourseModel::find( $courseObj->ID, true );\r\n-\t\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\t\t\techo ListCoursesTemplate::render_course( $courseModel, $settings );\r\n-\t\t}\r\n-\t\t$html_courses = Template::instance()->nest_elements( $html_ul_courses, ob_get_clean() );\r\n-\r\n-\t\t$sections         = apply_filters(\r\n-\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'header'  => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'You might be interested in', 'learnpress' ) ),\r\n-\t\t\t\t'courses' => $html_courses,\r\n-\t\t\t],\r\n-\t\t\t$courseModelCurrent,\r\n-\t\t\t$courses,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\t\t$content->content = Template::combine_components( $sections );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render single item course\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function render_course( CourseModel $course, array $settings = [] ): string {\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$top_wrapper = [\r\n-\t\t\t\t'\u003Cdiv class=\"course-wrap-thumbnail\">' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'\u003Cdiv class=\"course-thumbnail\">'      => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$img         = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $singleCourseTemplate->html_image( $course ) );\r\n-\t\t\t$html_top    = Template::instance()->nest_elements( $top_wrapper, $img );\r\n-\r\n-\t\t\t\u002F\u002F Section main top\r\n-\t\t\t$section_main_top = [\r\n-\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content-top\">',\r\n-\t\t\t\t'level'         => $singleCourseTemplate->html_level( $course ),\r\n-\t\t\t\t'price'         => $singleCourseTemplate->html_price( $course ),\r\n-\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_main_top    = Template::combine_components( $section_main_top );\r\n-\t\t\t\u002F\u002F End section main top\r\n-\r\n-\t\t\t\u002F\u002F Section main bottom\r\n-\t\t\t$html_count_student  = $singleCourseTemplate->html_count_student( $course );\r\n-\t\t\t$section_main_bottom = [\r\n-\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content-bottom\">',\r\n-\t\t\t\t'students'      => $html_count_student,\r\n-\t\t\t\t'lessons'       => $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\r\n-\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_main_bottom    = Template::combine_components( $section_main_bottom );\r\n-\t\t\t\u002F\u002F End section main bottom\r\n-\r\n-\t\t\t$section_main      = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Flayout\u002Fitem\u002Fsection\u002Fbottom',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content\">',\r\n-\t\t\t\t\t'top'           => $html_main_top,\r\n-\t\t\t\t\t'category'      => $singleCourseTemplate->html_categories( $course ),\r\n-\t\t\t\t\t'title'         => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $singleCourseTemplate->html_title( $course, 'h4' ) ),\r\n-\t\t\t\t\t'bottom'        => $html_main_bottom,\r\n-\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\t\t\t$html_section_main = Template::combine_components( $section_main );\r\n-\r\n-\t\t\t$section   = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Flayout\u002Fitem\u002Fsection',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper_start' => sprintf( '\u003Cli class=\"course-item\" data-id=\"%s\">', esc_attr( $course->get_id() ) ),\r\n-\t\t\t\t\t'top'           => $html_top,\r\n-\t\t\t\t\t'bottom'        => $html_section_main,\r\n-\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fli>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\t\t\t$html_item = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$html_item = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $html_item;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks List Courses.\n+ *\n+ * @since 4.2.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Course_Filter;\n+use LP_Database;\n+use stdClass;\n+use Throwable;\n+\n+class ListCoursesRelatedTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', [ $this, 'layout_courses' ], 10, 2 );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t * @use self::render_courses\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_courses';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Layout default list courses.\n+\t *\n+\t * @return void\n+\t * @since 4.2.7\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function layout_courses( CourseModel $course, $limit ) {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"lp-list-courses-related\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$callback = [\n+\t\t\t'class'  => get_class( $this ),\n+\t\t\t'method' => 'render_courses',\n+\t\t];\n+\t\t$args     = [\n+\t\t\t'id_url'    => 'course-related',\n+\t\t\t'course_id' => $course->get_id(),\n+\t\t\t'limit'     => $limit,\n+\t\t];\n+\n+\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\n+\t\techo Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Render template list courses with settings param.\n+\t *\n+\t * @param array $settings\n+\t *\n+\t * @return stdClass { content: string_html }\n+\t * @since 4.2.7\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic static function render_courses( array $settings = [] ): stdClass {\n+\t\t$content          = new stdClass();\n+\t\t$content->content = '';\n+\n+\t\t$filter    = new LP_Course_Filter();\n+\t\t$course_id = $settings['course_id'] ?? 0;\n+\t\tif ( empty( $course_id ) ) {\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t$courseModelCurrent = CourseModel::find( $course_id, true );\n+\t\t$terms              = $courseModelCurrent->get_categories();\n+\t\t$term_ids           = [];\n+\n+\t\tforeach ( $terms as $term ) {\n+\t\t\t$term_ids[] = $term->term_id ?? 0;\n+\n+\t\t\tif ( $term->parent ) {\n+\t\t\t\t$term_ids[] = $term->parent;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$total_rows          = 0;\n+\t\t$filter->only_fields = [ 'DISTINCT(ID) AS ID' ];\n+\t\t$filter->post_status = [ 'publish' ];\n+\t\t$filter->limit       = $settings['limit'] ?? 4;\n+\t\t$filter->term_ids    = $term_ids;\n+\t\t$filter->query_count = false;\n+\t\t$filter->order_by    = 'rand()';\n+\t\t$filter->where[]     = LP_Database::getInstance()->wpdb->prepare( 'AND p.ID != %d', $course_id );\n+\n+\t\t$courses = Courses::get_courses( $filter, $total_rows );\n+\t\tif ( empty( $courses ) ) {\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t\u002F\u002F Handle layout\n+\t\t$html_ul_courses = [\n+\t\t\t'\u003Cul class=\"lp-courses-related learn-press-courses\">' => '\u003C\u002Ful>',\n+\t\t];\n+\n+\t\tob_start();\n+\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t$courseModel = CourseModel::find( $courseObj->ID, true );\n+\t\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\techo ListCoursesTemplate::render_course( $courseModel, $settings );\n+\t\t}\n+\t\t$html_courses = Template::instance()->nest_elements( $html_ul_courses, ob_get_clean() );\n+\n+\t\t$sections         = apply_filters(\n+\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'header'  => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'You might be interested in', 'learnpress' ) ),\n+\t\t\t\t'courses' => $html_courses,\n+\t\t\t],\n+\t\t\t$courseModelCurrent,\n+\t\t\t$courses,\n+\t\t\t$settings\n+\t\t);\n+\t\t$content->content = Template::combine_components( $sections );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Render single item course\n+\t *\n+\t * @param CourseModel $course\n+\t * @param array $settings\n+\t *\n+\t * @return string\n+\t * @since 4.2.5.8\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function render_course( CourseModel $course, array $settings = [] ): string {\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\ttry {\n+\t\t\t$top_wrapper = [\n+\t\t\t\t'\u003Cdiv class=\"course-wrap-thumbnail\">' => '\u003C\u002Fdiv>',\n+\t\t\t\t'\u003Cdiv class=\"course-thumbnail\">'      => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$img         = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $singleCourseTemplate->html_image( $course ) );\n+\t\t\t$html_top    = Template::instance()->nest_elements( $top_wrapper, $img );\n+\n+\t\t\t\u002F\u002F Section main top\n+\t\t\t$section_main_top = [\n+\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content-top\">',\n+\t\t\t\t'level'         => $singleCourseTemplate->html_level( $course ),\n+\t\t\t\t'price'         => $singleCourseTemplate->html_price( $course ),\n+\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_main_top    = Template::combine_components( $section_main_top );\n+\t\t\t\u002F\u002F End section main top\n+\n+\t\t\t\u002F\u002F Section main bottom\n+\t\t\t$html_count_student  = $singleCourseTemplate->html_count_student( $course );\n+\t\t\t$section_main_bottom = [\n+\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content-bottom\">',\n+\t\t\t\t'students'      => $html_count_student,\n+\t\t\t\t'lessons'       => $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\n+\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_main_bottom    = Template::combine_components( $section_main_bottom );\n+\t\t\t\u002F\u002F End section main bottom\n+\n+\t\t\t$section_main      = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Flayout\u002Fitem\u002Fsection\u002Fbottom',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper_start' => '\u003Cdiv class=\"course-content\">',\n+\t\t\t\t\t'top'           => $html_main_top,\n+\t\t\t\t\t'category'      => $singleCourseTemplate->html_categories( $course ),\n+\t\t\t\t\t'title'         => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $course->get_permalink(), $singleCourseTemplate->html_title( $course, 'h4' ) ),\n+\t\t\t\t\t'bottom'        => $html_main_bottom,\n+\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\t\t\t$html_section_main = Template::combine_components( $section_main );\n+\n+\t\t\t$section   = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-courses\u002Frelated\u002Flayout\u002Fitem\u002Fsection',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper_start' => sprintf( '\u003Cli class=\"course-item\" data-id=\"%s\">', esc_attr( $course->get_id() ) ),\n+\t\t\t\t\t'top'           => $html_top,\n+\t\t\t\t\t'bottom'        => $html_section_main,\n+\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fli>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\t\t\t$html_item = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$html_item = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $html_item;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,918 +1,918 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks List Courses.\r\n- *\r\n- * @since 4.2.3.2\r\n- * @version 1.0.3\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Course;\r\n-use LP_Course_Filter;\r\n-use LP_Database;\r\n-use LP_Settings;\r\n-use LP_Settings_Courses;\r\n-use LP_User_Items_DB;\r\n-use LP_User_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-use WP_Term;\r\n-\r\n-class ListCoursesTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Flist-courses\u002Flayout', [ $this, 'layout_courses' ] );\r\n-\t\tadd_action( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest\u002Flayout', [ $this, 'sections_course_suggest' ] );\r\n-\t\tadd_action( 'learn-press\u002Farchive-course\u002Fsidebar', [ $this, 'sidebar' ] );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t}\r\n-\r\n-\tpublic function allow_callback( $callbacks ) {\r\n-\t\t\u002F**\r\n-\t\t * @uses self::render_courses()\r\n-\t\t *\u002F\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_courses';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout default list courses.\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function layout_courses() {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$callback = [\r\n-\t\t\t'class'  => get_class( $this ),\r\n-\t\t\t'method' => 'render_courses',\r\n-\t\t];\r\n-\r\n-\t\t$args                          = lp_archive_skeleton_get_args();\r\n-\t\t$args['id_url']                = 'list-courses-default';\r\n-\t\t$args['courses_load_ajax']     = LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0;\r\n-\t\t$args['courses_first_no_ajax'] = LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0;\r\n-\r\n-\t\t\u002F\u002F Load list courses via AJAX.\r\n-\t\tif ( LP_Settings_Courses::is_ajax_load_courses() && ! LP_Settings_Courses::is_no_load_ajax_first_courses() ) {\r\n-\t\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t} else { \u002F\u002F Load courses first not AJAX, or for filter.\r\n-\t\t\t$content_obj                     = static::render_courses( $args );\r\n-\t\t\t$args['html_no_load_ajax_first'] = $content_obj->content;\r\n-\t\t\t$content                         = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t}\r\n-\r\n-\t\techo Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render template list courses with settings param.\r\n-\t *\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return stdClass { content: string_html }\r\n-\t * @since 4.2.5.7\r\n-\t * @version 1.0.5\r\n-\t *\u002F\r\n-\tpublic static function render_courses( array $settings = [] ): stdClass {\r\n-\t\t$filter = new LP_Course_Filter();\r\n-\t\tCourses::handle_params_for_query_courses( $filter, $settings );\r\n-\r\n-\t\t$total_rows                   = 0;\r\n-\t\t$courses                      = Courses::get_courses( $filter, $total_rows );\r\n-\t\t$total_pages                  = LP_Database::get_total_pages( $filter->limit, $total_rows );\r\n-\t\t$settings['total_pages']      = $total_pages;\r\n-\t\t$settings['total_rows']       = $total_rows;\r\n-\t\t$settings['courses_per_page'] = $filter->limit;\r\n-\t\t$skin                         = $settings['skin'] ?? ( wp_is_mobile() ? 'grid' : learn_press_get_courses_layout() );\r\n-\t\t$paged                        = $settings['paged'] ?? 1;\r\n-\t\t$settings['paged']            = $paged;\r\n-\t\t$listCoursesTemplate          = self::instance();\r\n-\r\n-\t\t\u002F\u002F HTML section courses.\r\n-\t\t$html_courses = '';\r\n-\t\tif ( empty( $courses ) ) {\r\n-\t\t\t$html_courses = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\r\n-\t\t} else {\r\n-\t\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t\t$course        = CourseModel::find( $courseObj->ID, true );\r\n-\t\t\t\t$html_courses .= static::render_course( $course, $settings );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section_courses = apply_filters(\r\n-\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Fcourses',\r\n-\t\t\t[\r\n-\t\t\t\t'wrap'     => sprintf(\r\n-\t\t\t\t\t'\u003Cul class=\"learn-press-courses lp-list-courses-no-css %1$s\" data-layout=\"%1$s\">',\r\n-\t\t\t\t\t$skin\r\n-\t\t\t\t),\r\n-\t\t\t\t'courses'  => $html_courses,\r\n-\t\t\t\t'wrap_end' => '\u003C\u002Ful>',\r\n-\t\t\t],\r\n-\t\t\t$courses,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\r\n-\t\t$section_top = apply_filters(\r\n-\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Ftop',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"lp-courses-bar\">',\r\n-\t\t\t\t'search'                    => $listCoursesTemplate->html_search_form( $settings ),\r\n-\t\t\t\t'order_by'                  => $listCoursesTemplate->html_order_by( $settings['order_by'] ?? 'post_date' ),\r\n-\t\t\t\t'switch_layout'             => $listCoursesTemplate->switch_layout(),\r\n-\t\t\t\t'btn_filter_courses_mobile' => FilterCourseTemplate::instance()->html_btn_filter_mobile( $settings ),\r\n-\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courses,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F For old themes use old hook.\r\n-\t\t$section_top = self::fix_theme_cb_hook_courses( $section_top, $courses, $settings );\r\n-\t\t\u002F\u002F$section= self::fix_theme_el_hook_old_render_courses( $section, $courses, $settings );\r\n-\t\t\u002F\u002F End.\r\n-\r\n-\t\t\u002F\u002F Pagination html\r\n-\t\t$data_pagination_type = LP_Settings::get_option( 'course_pagination_type', 'number' );\r\n-\t\tif ( empty( $settings['courses_load_ajax'] ) ) {\r\n-\t\t\t$data_pagination_type = 'number';\r\n-\t\t}\r\n-\t\t$data_pagination = [\r\n-\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t'type'        => $data_pagination_type,\r\n-\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\r\n-\t\t\t'paged'       => $settings['paged'] ?? 1,\r\n-\t\t];\r\n-\t\t$html_pagination = static::instance()->html_pagination( $data_pagination );\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection',\r\n-\t\t\t[\r\n-\t\t\t\t'top'        => Template::combine_components( $section_top ),\r\n-\t\t\t\t'courses'    => Template::combine_components( $section_courses ),\r\n-\t\t\t\t'pagination' => $html_pagination,\r\n-\t\t\t],\r\n-\t\t\t$courses,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\r\n-\t\t$content              = new stdClass();\r\n-\t\t$content->content     = Template::combine_components( $section );\r\n-\t\t$content->total_pages = $total_pages;\r\n-\t\t$content->paged       = $paged;\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render single item course\r\n-\t *\r\n-\t * @param CourseModel|LP_Course $course\r\n-\t * @param array $settings\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic static function render_course( $course, array $settings = [] ): string {\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t}\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t$show_view_students   = ! empty( $settings['show_view_students'] );\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F New layout course item.\r\n-\r\n-\t\t\t\u002F\u002F HTML top section, show image.\r\n-\t\t\t$section_top = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection-top',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-thumbnail\">',\r\n-\t\t\t\t\t'img'         => sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t\t\t$singleCourseTemplate->html_image( $course )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F HTML meta section.\r\n-\t\t\t$meta_data = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fmeta-data',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'duration' => $singleCourseTemplate->html_duration( $course ),\r\n-\t\t\t\t\t'level'    => $singleCourseTemplate->html_level( $course ),\r\n-\t\t\t\t\t'lesson'   => $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\r\n-\t\t\t\t\t'quiz'     => $singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT ),\r\n-\t\t\t\t\t'student'  => $singleCourseTemplate->html_count_student( $course ),\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $course->is_offline() ) {\r\n-\t\t\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\r\n-\t\t\t\tunset( $meta_data['quiz'] );\r\n-\t\t\t\tunset( $meta_data['student'] );\r\n-\t\t\t\tif ( ! empty( $meta_data['lesson'] ) ) {\r\n-\t\t\t\t\t$meta_data['lesson'] = $singleCourseOfflineTemplate->html_lesson_info( $course, true );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Add address for offline course.\r\n-\t\t\t\t$html_address = $singleCourseOfflineTemplate->html_address( $course );\r\n-\t\t\t\tif ( ! empty( $html_address ) ) {\r\n-\t\t\t\t\t$meta_data['address'] = $singleCourseOfflineTemplate->html_address( $course );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_meta_data = '';\r\n-\t\t\tif ( ! empty( $meta_data ) ) {\r\n-\t\t\t\tforeach ( $meta_data as $k => $v ) {\r\n-\t\t\t\t\t$html_meta_data .= sprintf( '\u003Cdiv class=\"meta-item meta-item-%s\">%s\u003C\u002Fdiv>', $k, $v );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$html_meta_data = sprintf( '\u003Cdiv class=\"course-wrap-meta\">%s\u003C\u002Fdiv>', $html_meta_data );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$btn_read_more_text = SingleCourseTemplate::text_button_course( $course );\r\n-\r\n-\t\t\t\u002F\u002F HTML bottom section end.\r\n-\t\t\t$section_bottom_end = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection\u002Fbottom\u002Fend',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'short_des'     => $singleCourseTemplate->html_short_description( $course ),\r\n-\t\t\t\t\t'wrapper'       => '\u003Cdiv class=\"course-info\">',\r\n-\t\t\t\t\t\u002F\u002F'clearfix'          => '\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\u002F\u002F'course_footer'     => '\u003Cdiv class=\"course-footer\">',\r\n-\t\t\t\t\t'price'         => $singleCourseTemplate->html_price( $course ),\r\n-\t\t\t\t\t'btn_read_more' => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"course-readmore\">\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t\t\t$btn_read_more_text\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'btn_view_list' => $show_view_students ? sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lp-wrap-btn-view-course-students\">\r\n-\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"lp-button lp-btn-view-students\" data-course-id=\"%d\" data-course-title=\"%s\">%s\u003C\u002Fbutton>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\t$course->get_id(),\r\n-\t\t\t\t\t\tesc_attr( $course->get_title() ),\r\n-\t\t\t\t\t\tesc_html__( 'View List Students', 'learnpress' )\r\n-\t\t\t\t\t) : '',\r\n-\t\t\t\t\t\u002F\u002F'course_footer_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F HTML bottom section.\r\n-\t\t\t$html_categories = $singleCourseTemplate->html_categories( $course );\r\n-\t\t\tif ( ! empty( $html_categories ) ) {\r\n-\t\t\t\t$html_categories = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) ),\r\n-\t\t\t\t\t$html_categories\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t\t$section_bottom = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection\u002Fbottom',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'                     => '\u003Cdiv class=\"course-content\">',\r\n-\t\t\t\t\t'title'                       => sprintf(\r\n-\t\t\t\t\t\t'\u003Ch3 class=\"wap-course-title\">\u003Ca class=\"course-permalink\" href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fh3>',\r\n-\t\t\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t\t\t$singleCourseTemplate->html_title( $course )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'featured'                    => $singleCourseTemplate->html_featured( $course ),\r\n-\t\t\t\t\t'wrapper_instructor_cate'     => '\u003Cdiv class=\"course-instructor-category\">',\r\n-\t\t\t\t\t'instructor'                  => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) ),\r\n-\t\t\t\t\t\t$singleCourseTemplate->html_instructor( $course )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'category'                    => $html_categories,\r\n-\t\t\t\t\t'wrapper_instructor_cate_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'meta'                        => $html_meta_data,\r\n-\t\t\t\t\t'info'                        => Template::combine_components( $section_bottom_end ),\r\n-\t\t\t\t\t'wrapper_end'                 => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem-li',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper_li'      => '\u003Cli class=\"course\">',\r\n-\t\t\t\t\t'wrapper_div'     => sprintf( '\u003Cdiv class=\"course-item\" data-id=\"%s\">', esc_attr( $course->get_id() ) ),\r\n-\t\t\t\t\t'top'             => Template::combine_components( $section_top ),\r\n-\t\t\t\t\t'bottom'          => Template::combine_components( $section_bottom ),\r\n-\t\t\t\t\t'wrapper_div_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_li_end'  => '\u003C\u002Fli>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$settings\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F For old themes use old hook.\r\n-\t\t\t$section = self::fix_theme_course_old( $section, $course, $settings );\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t$html_item = Template::combine_components( $section );\r\n-\t\t\t\u002F\u002F End new layout course item.\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$html_item = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $html_item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Button Load more\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_pagination_load_more(): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cbutton class=\"courses-btn-load-more learn-press-pagination lp-button courses-btn-load-more-no-css\">' => '\u003C\u002Fbutton>',\r\n-\t\t];\r\n-\t\t$content      = sprintf(\r\n-\t\t\t'%s\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>',\r\n-\t\t\t__( 'Load more', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Button infinite\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_pagination_infinite(): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"courses-load-infinite-no-css courses-load-infinite learn-press-pagination\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\t\t$content      = '\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>';\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination number\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_pagination_number( array $data = [] ): string {\r\n-\t\tif ( empty( $data['total_pages'] ) || $data['total_pages'] \u003C= 1 ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html_wrapper = $data['wrapper'] ?? [\r\n-\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination\">' => '\u003C\u002Fnav>',\r\n-\t\t];\r\n-\r\n-\t\t$pagination = paginate_links(\r\n-\t\t\tapply_filters(\r\n-\t\t\t\t'learn_press_pagination_args',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'base'      => $data['base'] ?? '',\r\n-\t\t\t\t\t'format'    => '',\r\n-\t\t\t\t\t'add_args'  => '',\r\n-\t\t\t\t\t'current'   => max( 1, $data['paged'] ?? 1 ),\r\n-\t\t\t\t\t'total'     => $data[ 'total_pages' ?? 1 ],\r\n-\t\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'type'      => 'list',\r\n-\t\t\t\t\t'end_size'  => 3,\r\n-\t\t\t\t\t'mid_size'  => 3,\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $pagination );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_pagination( array $data = [] ): string {\r\n-\t\tif ( empty( $data['total_pages'] ) || $data['total_pages'] \u003C= 1 ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$pagination_type = $data['type'] ?? 'number';\r\n-\t\tswitch ( $pagination_type ) {\r\n-\t\t\tcase 'load-more':\r\n-\t\t\t\tif ( $data['paged'] >= $data['total_pages'] ) {\r\n-\t\t\t\t\treturn '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $this->html_pagination_load_more();\r\n-\t\t\tcase 'infinite':\r\n-\t\t\t\tif ( $data['paged'] >= $data['total_pages'] ) {\r\n-\t\t\t\t\treturn '';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $this->html_pagination_infinite();\r\n-\t\t\tdefault:\r\n-\t\t\t\treturn $this->html_pagination_number( $data );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_courses_page_result( array $data = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total_rows      = $data['total_rows'] ?? 0;\r\n-\t\t\t$paged           = $data['paged'] ?? 1;\r\n-\t\t\t$course_per_page = $data['courses_per_page'] ?? 8;\r\n-\t\t\t$pagination_type = $data['pagination_type'] ?? 'number';\r\n-\r\n-\t\t\t$from = 1 + ( $paged - 1 ) * $course_per_page;\r\n-\t\t\t$to   = ( $paged * $course_per_page > $total_rows ) ? $total_rows : $paged * $course_per_page;\r\n-\r\n-\t\t\t$content = '';\r\n-\t\t\tif ( 0 === $total_rows ) {\r\n-\r\n-\t\t\t} elseif ( 1 === $total_rows ) {\r\n-\t\t\t\t$content = esc_html__( 'Showing only one result', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$from_to = $from . '-' . $to;\r\n-\t\t\t\t\u002F\u002F For pagination type is load-more or infinite.\r\n-\t\t\t\tif ( $pagination_type !== 'number' ) {\r\n-\t\t\t\t\t$from_to = '1 - ' . $to;\r\n-\t\t\t\t}\r\n-\t\t\t\t$content = sprintf( esc_html__( 'Showing %1$s of %2$s results', 'learnpress' ), $from_to, $total_rows );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $content ) ) {\r\n-\t\t\t\t$html = '\u003Cspan class=\"courses-page-result\">' . $content . '\u003C\u002Fspan>';\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layouts type\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_layout_type( array $data = [] ): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"courses-layouts-display\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$ico_grid_default = wp_remote_fopen( LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficons\u002Fico-grid.svg' );\r\n-\t\t$ico_list_default = wp_remote_fopen( LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficons\u002Fico-list.svg' );\r\n-\t\t$layouts          = [\r\n-\t\t\t'list' => $data['courses_ico_list'] ?? $ico_list_default,\r\n-\t\t\t'grid' => $data['courses_ico_grid'] ?? $ico_grid_default,\r\n-\t\t];\r\n-\r\n-\t\t$content = '\u003Cul class=\"courses-layouts-display-list\">';\r\n-\t\tforeach ( $layouts as $k => $v ) {\r\n-\t\t\t$active   = ( $data['courses_layout_default'] ?? '' ) === $k ? 'active' : '';\r\n-\t\t\t$content .= '\u003Cli class=\"courses-layout ' . $active . '\" data-layout=\"' . $k . '\">' . $v . '\u003C\u002Fli>';\r\n-\t\t}\r\n-\t\t$content .= '\u003C\u002Ful>';\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Order by\r\n-\t *\r\n-\t * @param string $default_value\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_order_by( string $default_value = 'post_date' ): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"courses-order-by-wrapper\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$values = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourses\u002Forder-by\u002Fvalues',\r\n-\t\t\t[\r\n-\t\t\t\t'post_date'       => esc_html__( 'Newly published', 'learnpress' ),\r\n-\t\t\t\t'post_title'      => esc_html__( 'Title a-z', 'learnpress' ),\r\n-\t\t\t\t'post_title_desc' => esc_html__( 'Title z-a', 'learnpress' ),\r\n-\t\t\t\t'price'           => esc_html__( 'Price high to low', 'learnpress' ),\r\n-\t\t\t\t'price_low'       => esc_html__( 'Price low to high', 'learnpress' ),\r\n-\t\t\t\t'popular'         => esc_html__( 'Popular', 'learnpress' ),\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$content = '\u003Cselect name=\"order_by\" class=\"courses-order-by\">';\r\n-\t\tforeach ( $values as $k => $v ) {\r\n-\t\t\t$content .= '\u003Coption value=\"' . $k . '\" ' . selected( $default_value, $k, false ) . '>' . $v . '\u003C\u002Foption>';\r\n-\t\t}\r\n-\t\t$content .= '\u003C\u002Fselect>';\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\tpublic function html_search_form( array $data = [] ) {\r\n-\t\t$s     = $data['c_search'] ?? '';\r\n-\t\t$class = $data['class'] ?? 'search-courses';\r\n-\t\tob_start();\r\n-\t\t?>\r\n-\t\t\u003Cform class=\"\u003C?php echo esc_attr( $class ); ?>\" method=\"get\"\r\n-\t\t\taction=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\">\r\n-\t\t\t\u003Cinput type=\"search\" placeholder=\"\u003C?php esc_attr_e( 'Search courses...', 'learnpress' ); ?>\"\r\n-\t\t\t\t\tname=\"c_search\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $s ); ?>\">\r\n-\t\t\t\u003Cbutton type=\"submit\" name=\"lp-btn-search-courses\">\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fform>\r\n-\t\t\u003C?php\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Html switch layout.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function switch_layout(): string {\r\n-\t\t$layouts = learn_press_courses_layouts();\r\n-\t\t$active  = learn_press_get_courses_layout();\r\n-\r\n-\t\t$html_layouts = '';\r\n-\t\tforeach ( $layouts as $layout => $value ) {\r\n-\t\t\t$html_layouts .= sprintf(\r\n-\t\t\t\t'\u003Cinput type=\"radio\" name=\"lp-switch-layout-btn\" value=\"%s\" id=\"lp-switch-layout-btn-%s\" %s>\r\n-\t\t\t\t\u003Clabel class=\"switch-btn %s\" title=\"%s\" for=\"lp-switch-layout-btn-%s\">\u003C\u002Flabel>',\r\n-\t\t\t\tesc_attr( $layout ),\r\n-\t\t\t\tesc_attr( $layout ),\r\n-\t\t\t\tchecked( $layout, $active, false ),\r\n-\t\t\t\tesc_attr( $layout ),\r\n-\t\t\t\tsprintf( esc_attr__( 'Switch to %s', 'learnpress' ), $value ),\r\n-\t\t\t\tesc_attr( $layout )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Fswitch-layout',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"switch-layout\">',\r\n-\t\t\t\t'layouts'     => $html_layouts,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Layout course search suggest result.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function sections_course_suggest( array $data = [] ) {\r\n-\t\t$content              = '';\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\tob_start();\r\n-\t\ttry {\r\n-\t\t\t$courses       = $data['courses'] ?? [];\r\n-\t\t\t$key_search    = $data['keyword'] ?? '';\r\n-\t\t\t$total_courses = $data['total_course'] ?? 0;\r\n-\r\n-\t\t\t\u002F\u002F HTML section list courses.\r\n-\t\t\t$html_list_course = '';\r\n-\t\t\tforeach ( $courses as $courseObj ) {\r\n-\t\t\t\tif ( ! is_object( $courseObj ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$course_id = $courseObj->ID;\r\n-\t\t\t\t$course    = learn_press_get_course( $course_id );\r\n-\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$section_item      = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fcourse-suggest\u002Fitem\u002Fsections',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'wrapper'      => '\u003Cli class=\"item-course-suggest\">',\r\n-\t\t\t\t\t\t'course_image' => $singleCourseTemplate->html_image( $course ),\r\n-\t\t\t\t\t\t'course_title' => sprintf(\r\n-\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t\t\t\t$singleCourseTemplate->html_title( $course )\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'wrapper_end'  => '\u003C\u002Fli>',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$course,\r\n-\t\t\t\t\t$key_search,\r\n-\t\t\t\t\t$data\r\n-\t\t\t\t);\r\n-\t\t\t\t$html_list_course .= Template::combine_components( $section_item );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$count_courses = sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t$total_courses,\r\n-\t\t\t\t_n( 'Course Found', 'Courses Found', $total_courses, 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$view_all      = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\tadd_query_arg( 'c_search', $key_search, learn_press_get_page_link( 'courses' ) ),\r\n-\t\t\t\t__( 'View All', 'learnpress' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Section.\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrapper'          => '\u003Cul class=\"lp-courses-suggest-list\">',\r\n-\t\t\t\t'courses'          => $html_list_course,\r\n-\t\t\t\t'wrapper_end'      => '\u003C\u002Ful>',\r\n-\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-courses-suggest-info\">',\r\n-\t\t\t\t'count'            => $count_courses,\r\n-\t\t\t\t'view_all'         => $view_all,\r\n-\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$content = Template::combine_components( $section );\r\n-\t\t\techo $content;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sidebar\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3.2\r\n-\t *\u002F\r\n-\tpublic function sidebar() {\r\n-\t\ttry {\r\n-\t\t\tif ( is_active_sidebar( 'archive-courses-sidebar' ) ) {\r\n-\t\t\t\t$html_wrapper = [\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-archive-courses-sidebar\">' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tdynamic_sidebar( 'archive-courses-sidebar' );\r\n-\t\t\t\techo Template::instance()->nest_elements( $html_wrapper, ob_get_clean() );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show total course free by Category.\r\n-\t * @return string\r\n-\t * @version 1.0.0\r\n-\t *\r\n-\t * @since 4.2.5.4\r\n-\t *\u002F\r\n-\tpublic function html_count_course_free(): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"courses-count-free\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$category_current      = 0;\r\n-\t\t$category_current_slug = get_query_var( 'term' );\r\n-\t\tif ( ! empty( $category_current_slug ) ) {\r\n-\t\t\t$category_current_obj = get_term_by( 'slug', $category_current_slug, LP_COURSE_CATEGORY_TAX );\r\n-\t\t\tif ( $category_current_obj instanceof WP_Term ) {\r\n-\t\t\t\t$category_current = $category_current_obj->term_id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$filter = new LP_Course_Filter();\r\n-\t\tif ( ! empty( $category_current ) ) {\r\n-\t\t\t$filter->term_ids = [ $category_current ];\r\n-\t\t}\r\n-\r\n-\t\t$count   = Courses::count_course_free( $filter );\r\n-\t\t$content = sprintf(\r\n-\t\t\t'\u003Cspan class=\"courses-count-free-number\">%1$s\u003C\u002Fspan> %2$s',\r\n-\t\t\t$count,\r\n-\t\t\t_n( 'Free Course', 'Free Courses', $count, 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show total students on Course Category.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.5.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_count_students(): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"courses-count-students\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$category_current      = 0;\r\n-\t\t$category_current_slug = get_query_var( 'term' );\r\n-\t\tif ( ! empty( $category_current_slug ) ) {\r\n-\t\t\t$category_current_obj = get_term_by( 'slug', $category_current_slug, LP_COURSE_CATEGORY_TAX );\r\n-\t\t\tif ( $category_current_obj instanceof WP_Term ) {\r\n-\t\t\t\t$category_current = $category_current_obj->term_id;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$filter           = new LP_User_Items_Filter();\r\n-\r\n-\t\t\u002F\u002F If page is course category, get total students of this category.\r\n-\t\tif ( ! empty( $category_current ) ) {\r\n-\t\t\t$filter->join[]  = \"INNER JOIN {$lp_user_items_db->tb_posts} AS p ON ui.item_id = p.ID\";\r\n-\t\t\t$filter->join[]  = \"INNER JOIN {$lp_user_items_db->tb_term_relationships} AS r_term ON ui.item_id = r_term.object_id\";\r\n-\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare( 'AND r_term.term_taxonomy_id = %d', $category_current );\r\n-\t\t}\r\n-\r\n-\t\t$count   = UserCourseModel::count_students( $filter );\r\n-\t\t$content = sprintf(\r\n-\t\t\t'\u003Cspan class=\"courses-count-students-number\">%1$s\u003C\u002Fspan> %2$s',\r\n-\t\t\t$count,\r\n-\t\t\t_n( 'Student', 'Students', $count, 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F************************** Hook old *****************************\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Fix theme course-builder use old hook.\r\n-\t *\r\n-\t * @param array $section\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function fix_theme_cb_hook_courses( $section, $courses, $settings ) {\r\n-\t\t\u002F*$theme_name = wp_get_theme()->get( 'Name' );\r\n-\t\tif ( 'Course Builder' !== $theme_name ) {\r\n-\t\t\treturn $section;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t$section_top = apply_filters(\r\n-\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fsection\u002Ftop',\r\n-\t\t\t[],\r\n-\t\t\t$courses,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\r\n-\t\t$section_new = [];\r\n-\t\tif ( ! empty( $section_top ) ) {\r\n-\t\t\tforeach ( $section_top as $k => $v ) {\r\n-\t\t\t\t$section_new[ $k ] = $v['text_html'] ?? '';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $section_new;\r\n-\t\t}\r\n-\r\n-\t\treturn $section;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Fix theme course-builder use old hook.\r\n-\t *\r\n-\t * @param array $section\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function fix_theme_course_old( $section, $course, $settings ) {\r\n-\t\t\u002F*$theme_name = wp_get_theme()->get( 'Name' );\r\n-\t\tif ( 'Course Builder' !== $theme_name ) {\r\n-\t\t\treturn $section;\r\n-\t\t}*\u002F\r\n-\r\n-\t\t$course = learn_press_get_course( $course->get_id() );\r\n-\r\n-\t\t$wrapper = apply_filters(\r\n-\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fwrapper',\r\n-\t\t\t[],\r\n-\t\t\t$course,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\t\tif ( ! empty( $wrapper ) ) {\r\n-\t\t\t$i = 0;\r\n-\t\t\tforeach ( $wrapper as $k => $v ) {\r\n-\t\t\t\tif ( $i === 0 ) {\r\n-\t\t\t\t\t$section['wrapper_li']     = $k;\r\n-\t\t\t\t\t$section['wrapper_li_end'] = $v;\r\n-\t\t\t\t} elseif ( $i === 1 ) {\r\n-\t\t\t\t\t$section['wrapper_div']     = $k;\r\n-\t\t\t\t\t$section['wrapper_div_end'] = $v;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t++$i;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section_item = apply_filters(\r\n-\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fsection',\r\n-\t\t\t[],\r\n-\t\t\t$course,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\t\tif ( ! empty( $section_item ) ) {\r\n-\t\t\t$section['top'] = $section_item['thim_top']['text_html'] ?? '';\r\n-\t\t}\r\n-\r\n-\t\t$section_bottom     = apply_filters(\r\n-\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fsection\u002Fbottom',\r\n-\t\t\t[],\r\n-\t\t\t$course,\r\n-\t\t\t$settings\r\n-\t\t);\r\n-\t\t$section_bottom_new = [];\r\n-\t\tif ( ! empty( $section_bottom ) ) {\r\n-\t\t\tforeach ( $section_bottom as $k => $v ) {\r\n-\t\t\t\t$section_bottom_new[ $k ] = $v['text_html'] ?? '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section['bottom'] = Template::combine_components( $section_bottom_new );\r\n-\t\t}\r\n-\r\n-\t\treturn $section;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render string to data content\r\n-\t *\r\n-\t * @param array $data\r\n-\t * @param string $data_content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render_data( array $data, string $data_content ): string {\r\n-\t\treturn str_replace(\r\n-\t\t\t[\r\n-\t\t\t\t'{{courses_order_by}}',\r\n-\t\t\t\t'{{courses_layout_type}}',\r\n-\t\t\t\t'{{courses_pagination}}',\r\n-\t\t\t\t'{{courses_page_result}}',\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t$this->html_order_by( $data['order_by'] ?? '' ),\r\n-\t\t\t\t$this->html_layout_type( $data ),\r\n-\t\t\t\t$this->html_pagination( $data['pagination'] ?? [] ),\r\n-\t\t\t\t$this->html_courses_page_result( $data ),\r\n-\t\t\t],\r\n-\t\t\t$data_content\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks List Courses.\n+ *\n+ * @since 4.2.3.2\n+ * @version 1.0.3\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Course;\n+use LP_Course_Filter;\n+use LP_Database;\n+use LP_Settings;\n+use LP_Settings_Courses;\n+use LP_User_Items_DB;\n+use LP_User_Items_Filter;\n+use stdClass;\n+use Throwable;\n+use WP_Term;\n+\n+class ListCoursesTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Flist-courses\u002Flayout', [ $this, 'layout_courses' ] );\n+\t\tadd_action( 'learn-press\u002Frest-api\u002Fcourses\u002Fsuggest\u002Flayout', [ $this, 'sections_course_suggest' ] );\n+\t\tadd_action( 'learn-press\u002Farchive-course\u002Fsidebar', [ $this, 'sidebar' ] );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t}\n+\n+\tpublic function allow_callback( $callbacks ) {\n+\t\t\u002F**\n+\t\t * @uses self::render_courses()\n+\t\t *\u002F\n+\t\t$callbacks[] = get_class( $this ) . ':render_courses';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Layout default list courses.\n+\t *\n+\t * @return void\n+\t * @since 4.2.5.8\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function layout_courses() {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"lp-list-courses-default\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$callback = [\n+\t\t\t'class'  => get_class( $this ),\n+\t\t\t'method' => 'render_courses',\n+\t\t];\n+\n+\t\t$args                          = lp_archive_skeleton_get_args();\n+\t\t$args['id_url']                = 'list-courses-default';\n+\t\t$args['courses_load_ajax']     = LP_Settings_Courses::is_ajax_load_courses() ? 1 : 0;\n+\t\t$args['courses_first_no_ajax'] = LP_Settings_Courses::is_no_load_ajax_first_courses() ? 1 : 0;\n+\n+\t\t\u002F\u002F Load list courses via AJAX.\n+\t\tif ( LP_Settings_Courses::is_ajax_load_courses() && ! LP_Settings_Courses::is_no_load_ajax_first_courses() ) {\n+\t\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t} else { \u002F\u002F Load courses first not AJAX, or for filter.\n+\t\t\t$content_obj                     = static::render_courses( $args );\n+\t\t\t$args['html_no_load_ajax_first'] = $content_obj->content;\n+\t\t\t$content                         = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t}\n+\n+\t\techo Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Render template list courses with settings param.\n+\t *\n+\t * @param array $settings\n+\t *\n+\t * @return stdClass { content: string_html }\n+\t * @since 4.2.5.7\n+\t * @version 1.0.5\n+\t *\u002F\n+\tpublic static function render_courses( array $settings = [] ): stdClass {\n+\t\t$filter = new LP_Course_Filter();\n+\t\tCourses::handle_params_for_query_courses( $filter, $settings );\n+\n+\t\t$total_rows                   = 0;\n+\t\t$courses                      = Courses::get_courses( $filter, $total_rows );\n+\t\t$total_pages                  = LP_Database::get_total_pages( $filter->limit, $total_rows );\n+\t\t$settings['total_pages']      = $total_pages;\n+\t\t$settings['total_rows']       = $total_rows;\n+\t\t$settings['courses_per_page'] = $filter->limit;\n+\t\t$skin                         = $settings['skin'] ?? ( wp_is_mobile() ? 'grid' : learn_press_get_courses_layout() );\n+\t\t$paged                        = $settings['paged'] ?? 1;\n+\t\t$settings['paged']            = $paged;\n+\t\t$listCoursesTemplate          = self::instance();\n+\n+\t\t\u002F\u002F HTML section courses.\n+\t\t$html_courses = '';\n+\t\tif ( empty( $courses ) ) {\n+\t\t\t$html_courses = Template::print_message( __( 'No courses found', 'learnpress' ), 'info', false );\n+\t\t} else {\n+\t\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t\t$course        = CourseModel::find( $courseObj->ID, true );\n+\t\t\t\t$html_courses .= static::render_course( $course, $settings );\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section_courses = apply_filters(\n+\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Fcourses',\n+\t\t\t[\n+\t\t\t\t'wrap'     => sprintf(\n+\t\t\t\t\t'\u003Cul class=\"learn-press-courses lp-list-courses-no-css %1$s\" data-layout=\"%1$s\">',\n+\t\t\t\t\t$skin\n+\t\t\t\t),\n+\t\t\t\t'courses'  => $html_courses,\n+\t\t\t\t'wrap_end' => '\u003C\u002Ful>',\n+\t\t\t],\n+\t\t\t$courses,\n+\t\t\t$settings\n+\t\t);\n+\n+\t\t$section_top = apply_filters(\n+\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Ftop',\n+\t\t\t[\n+\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"lp-courses-bar\">',\n+\t\t\t\t'search'                    => $listCoursesTemplate->html_search_form( $settings ),\n+\t\t\t\t'order_by'                  => $listCoursesTemplate->html_order_by( $settings['order_by'] ?? 'post_date' ),\n+\t\t\t\t'switch_layout'             => $listCoursesTemplate->switch_layout(),\n+\t\t\t\t'btn_filter_courses_mobile' => FilterCourseTemplate::instance()->html_btn_filter_mobile( $settings ),\n+\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courses,\n+\t\t\t$settings\n+\t\t);\n+\n+\t\t\u002F\u002F For old themes use old hook.\n+\t\t$section_top = self::fix_theme_cb_hook_courses( $section_top, $courses, $settings );\n+\t\t\u002F\u002F$section= self::fix_theme_el_hook_old_render_courses( $section, $courses, $settings );\n+\t\t\u002F\u002F End.\n+\n+\t\t\u002F\u002F Pagination html\n+\t\t$data_pagination_type = LP_Settings::get_option( 'course_pagination_type', 'number' );\n+\t\tif ( empty( $settings['courses_load_ajax'] ) ) {\n+\t\t\t$data_pagination_type = 'number';\n+\t\t}\n+\t\t$data_pagination = [\n+\t\t\t'total_pages' => $total_pages,\n+\t\t\t'type'        => $data_pagination_type,\n+\t\t\t'base'        => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),\n+\t\t\t'paged'       => $settings['paged'] ?? 1,\n+\t\t];\n+\t\t$html_pagination = static::instance()->html_pagination( $data_pagination );\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection',\n+\t\t\t[\n+\t\t\t\t'top'        => Template::combine_components( $section_top ),\n+\t\t\t\t'courses'    => Template::combine_components( $section_courses ),\n+\t\t\t\t'pagination' => $html_pagination,\n+\t\t\t],\n+\t\t\t$courses,\n+\t\t\t$settings\n+\t\t);\n+\n+\t\t$content              = new stdClass();\n+\t\t$content->content     = Template::combine_components( $section );\n+\t\t$content->total_pages = $total_pages;\n+\t\t$content->paged       = $paged;\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Render single item course\n+\t *\n+\t * @param CourseModel|LP_Course $course\n+\t * @param array $settings\n+\t *\n+\t * @return string\n+\t * @since 4.2.5.8\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic static function render_course( $course, array $settings = [] ): string {\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t}\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t$show_view_students   = ! empty( $settings['show_view_students'] );\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F New layout course item.\n+\n+\t\t\t\u002F\u002F HTML top section, show image.\n+\t\t\t$section_top = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection-top',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-thumbnail\">',\n+\t\t\t\t\t'img'         => sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t$course->get_permalink(),\n+\t\t\t\t\t\t$singleCourseTemplate->html_image( $course )\n+\t\t\t\t\t),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F HTML meta section.\n+\t\t\t$meta_data = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fmeta-data',\n+\t\t\t\t[\n+\t\t\t\t\t'duration' => $singleCourseTemplate->html_duration( $course ),\n+\t\t\t\t\t'level'    => $singleCourseTemplate->html_level( $course ),\n+\t\t\t\t\t'lesson'   => $singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\n+\t\t\t\t\t'quiz'     => $singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT ),\n+\t\t\t\t\t'student'  => $singleCourseTemplate->html_count_student( $course ),\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\n+\t\t\tif ( $course->is_offline() ) {\n+\t\t\t\t$singleCourseOfflineTemplate = SingleCourseOfflineTemplate::instance();\n+\t\t\t\tunset( $meta_data['quiz'] );\n+\t\t\t\tunset( $meta_data['student'] );\n+\t\t\t\tif ( ! empty( $meta_data['lesson'] ) ) {\n+\t\t\t\t\t$meta_data['lesson'] = $singleCourseOfflineTemplate->html_lesson_info( $course, true );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Add address for offline course.\n+\t\t\t\t$html_address = $singleCourseOfflineTemplate->html_address( $course );\n+\t\t\t\tif ( ! empty( $html_address ) ) {\n+\t\t\t\t\t$meta_data['address'] = $singleCourseOfflineTemplate->html_address( $course );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$html_meta_data = '';\n+\t\t\tif ( ! empty( $meta_data ) ) {\n+\t\t\t\tforeach ( $meta_data as $k => $v ) {\n+\t\t\t\t\t$html_meta_data .= sprintf( '\u003Cdiv class=\"meta-item meta-item-%s\">%s\u003C\u002Fdiv>', $k, $v );\n+\t\t\t\t}\n+\n+\t\t\t\t$html_meta_data = sprintf( '\u003Cdiv class=\"course-wrap-meta\">%s\u003C\u002Fdiv>', $html_meta_data );\n+\t\t\t}\n+\n+\t\t\t$btn_read_more_text = SingleCourseTemplate::text_button_course( $course );\n+\n+\t\t\t\u002F\u002F HTML bottom section end.\n+\t\t\t$section_bottom_end = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection\u002Fbottom\u002Fend',\n+\t\t\t\t[\n+\t\t\t\t\t'short_des'     => $singleCourseTemplate->html_short_description( $course ),\n+\t\t\t\t\t'wrapper'       => '\u003Cdiv class=\"course-info\">',\n+\t\t\t\t\t\u002F\u002F'clearfix'          => '\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>',\n+\t\t\t\t\t\u002F\u002F'course_footer'     => '\u003Cdiv class=\"course-footer\">',\n+\t\t\t\t\t'price'         => $singleCourseTemplate->html_price( $course ),\n+\t\t\t\t\t'btn_read_more' => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"course-readmore\">\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\n+\t\t\t\t\t\t$course->get_permalink(),\n+\t\t\t\t\t\t$btn_read_more_text\n+\t\t\t\t\t),\n+\t\t\t\t\t'btn_view_list' => $show_view_students ? sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lp-wrap-btn-view-course-students\">\n+\t\t\t\t\t\t\t\u003Cbutton type=\"button\" class=\"lp-button lp-btn-view-students\" data-course-id=\"%d\" data-course-title=\"%s\">%s\u003C\u002Fbutton>\n+\t\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\t\t$course->get_id(),\n+\t\t\t\t\t\tesc_attr( $course->get_title() ),\n+\t\t\t\t\t\tesc_html__( 'View List Students', 'learnpress' )\n+\t\t\t\t\t) : '',\n+\t\t\t\t\t\u002F\u002F'course_footer_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F HTML bottom section.\n+\t\t\t$html_categories = $singleCourseTemplate->html_categories( $course );\n+\t\t\tif ( ! empty( $html_categories ) ) {\n+\t\t\t\t$html_categories = sprintf(\n+\t\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) ),\n+\t\t\t\t\t$html_categories\n+\t\t\t\t);\n+\t\t\t}\n+\t\t\t$section_bottom = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem\u002Fsection\u002Fbottom',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'                     => '\u003Cdiv class=\"course-content\">',\n+\t\t\t\t\t'title'                       => sprintf(\n+\t\t\t\t\t\t'\u003Ch3 class=\"wap-course-title\">\u003Ca class=\"course-permalink\" href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fh3>',\n+\t\t\t\t\t\t$course->get_permalink(),\n+\t\t\t\t\t\t$singleCourseTemplate->html_title( $course )\n+\t\t\t\t\t),\n+\t\t\t\t\t'featured'                    => $singleCourseTemplate->html_featured( $course ),\n+\t\t\t\t\t'wrapper_instructor_cate'     => '\u003Cdiv class=\"course-instructor-category\">',\n+\t\t\t\t\t'instructor'                  => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) ),\n+\t\t\t\t\t\t$singleCourseTemplate->html_instructor( $course )\n+\t\t\t\t\t),\n+\t\t\t\t\t'category'                    => $html_categories,\n+\t\t\t\t\t'wrapper_instructor_cate_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'meta'                        => $html_meta_data,\n+\t\t\t\t\t'info'                        => Template::combine_components( $section_bottom_end ),\n+\t\t\t\t\t'wrapper_end'                 => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fitem-li',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper_li'      => '\u003Cli class=\"course\">',\n+\t\t\t\t\t'wrapper_div'     => sprintf( '\u003Cdiv class=\"course-item\" data-id=\"%s\">', esc_attr( $course->get_id() ) ),\n+\t\t\t\t\t'top'             => Template::combine_components( $section_top ),\n+\t\t\t\t\t'bottom'          => Template::combine_components( $section_bottom ),\n+\t\t\t\t\t'wrapper_div_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_li_end'  => '\u003C\u002Fli>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$settings\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F For old themes use old hook.\n+\t\t\t$section = self::fix_theme_course_old( $section, $course, $settings );\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t$html_item = Template::combine_components( $section );\n+\t\t\t\u002F\u002F End new layout course item.\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$html_item = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $html_item;\n+\t}\n+\n+\t\u002F**\n+\t * Button Load more\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_pagination_load_more(): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cbutton class=\"courses-btn-load-more learn-press-pagination lp-button courses-btn-load-more-no-css\">' => '\u003C\u002Fbutton>',\n+\t\t];\n+\t\t$content      = sprintf(\n+\t\t\t'%s\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>',\n+\t\t\t__( 'Load more', 'learnpress' )\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Button infinite\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_pagination_infinite(): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"courses-load-infinite-no-css courses-load-infinite learn-press-pagination\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\t\t$content      = '\u003Cspan class=\"lp-loading-circle lp-loading-no-css hide\">\u003C\u002Fspan>';\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Pagination number\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_pagination_number( array $data = [] ): string {\n+\t\tif ( empty( $data['total_pages'] ) || $data['total_pages'] \u003C= 1 ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html_wrapper = $data['wrapper'] ?? [\n+\t\t\t'\u003Cnav class=\"learn-press-pagination navigation pagination\">' => '\u003C\u002Fnav>',\n+\t\t];\n+\n+\t\t$pagination = paginate_links(\n+\t\t\tapply_filters(\n+\t\t\t\t'learn_press_pagination_args',\n+\t\t\t\tarray(\n+\t\t\t\t\t'base'      => $data['base'] ?? '',\n+\t\t\t\t\t'format'    => '',\n+\t\t\t\t\t'add_args'  => '',\n+\t\t\t\t\t'current'   => max( 1, $data['paged'] ?? 1 ),\n+\t\t\t\t\t'total'     => $data[ 'total_pages' ?? 1 ],\n+\t\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\n+\t\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\n+\t\t\t\t\t'type'      => 'list',\n+\t\t\t\t\t'end_size'  => 3,\n+\t\t\t\t\t'mid_size'  => 3,\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $pagination );\n+\t}\n+\n+\t\u002F**\n+\t * Pagination\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_pagination( array $data = [] ): string {\n+\t\tif ( empty( $data['total_pages'] ) || $data['total_pages'] \u003C= 1 ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$pagination_type = $data['type'] ?? 'number';\n+\t\tswitch ( $pagination_type ) {\n+\t\t\tcase 'load-more':\n+\t\t\t\tif ( $data['paged'] >= $data['total_pages'] ) {\n+\t\t\t\t\treturn '';\n+\t\t\t\t}\n+\n+\t\t\t\treturn $this->html_pagination_load_more();\n+\t\t\tcase 'infinite':\n+\t\t\t\tif ( $data['paged'] >= $data['total_pages'] ) {\n+\t\t\t\t\treturn '';\n+\t\t\t\t}\n+\n+\t\t\t\treturn $this->html_pagination_infinite();\n+\t\t\tdefault:\n+\t\t\t\treturn $this->html_pagination_number( $data );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Pagination\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_courses_page_result( array $data = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$total_rows      = $data['total_rows'] ?? 0;\n+\t\t\t$paged           = $data['paged'] ?? 1;\n+\t\t\t$course_per_page = $data['courses_per_page'] ?? 8;\n+\t\t\t$pagination_type = $data['pagination_type'] ?? 'number';\n+\n+\t\t\t$from = 1 + ( $paged - 1 ) * $course_per_page;\n+\t\t\t$to   = ( $paged * $course_per_page > $total_rows ) ? $total_rows : $paged * $course_per_page;\n+\n+\t\t\t$content = '';\n+\t\t\tif ( 0 === $total_rows ) {\n+\n+\t\t\t} elseif ( 1 === $total_rows ) {\n+\t\t\t\t$content = esc_html__( 'Showing only one result', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$from_to = $from . '-' . $to;\n+\t\t\t\t\u002F\u002F For pagination type is load-more or infinite.\n+\t\t\t\tif ( $pagination_type !== 'number' ) {\n+\t\t\t\t\t$from_to = '1 - ' . $to;\n+\t\t\t\t}\n+\t\t\t\t$content = sprintf( esc_html__( 'Showing %1$s of %2$s results', 'learnpress' ), $from_to, $total_rows );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $content ) ) {\n+\t\t\t\t$html = '\u003Cspan class=\"courses-page-result\">' . $content . '\u003C\u002Fspan>';\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Layouts type\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_layout_type( array $data = [] ): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"courses-layouts-display\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$ico_grid_default = wp_remote_fopen( LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficons\u002Fico-grid.svg' );\n+\t\t$ico_list_default = wp_remote_fopen( LP_PLUGIN_URL . 'assets\u002Fimages\u002Ficons\u002Fico-list.svg' );\n+\t\t$layouts          = [\n+\t\t\t'list' => $data['courses_ico_list'] ?? $ico_list_default,\n+\t\t\t'grid' => $data['courses_ico_grid'] ?? $ico_grid_default,\n+\t\t];\n+\n+\t\t$content = '\u003Cul class=\"courses-layouts-display-list\">';\n+\t\tforeach ( $layouts as $k => $v ) {\n+\t\t\t$active   = ( $data['courses_layout_default'] ?? '' ) === $k ? 'active' : '';\n+\t\t\t$content .= '\u003Cli class=\"courses-layout ' . $active . '\" data-layout=\"' . $k . '\">' . $v . '\u003C\u002Fli>';\n+\t\t}\n+\t\t$content .= '\u003C\u002Ful>';\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Order by\n+\t *\n+\t * @param string $default_value\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_order_by( string $default_value = 'post_date' ): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"courses-order-by-wrapper\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$values = apply_filters(\n+\t\t\t'learn-press\u002Fcourses\u002Forder-by\u002Fvalues',\n+\t\t\t[\n+\t\t\t\t'post_date'       => esc_html__( 'Newly published', 'learnpress' ),\n+\t\t\t\t'post_title'      => esc_html__( 'Title a-z', 'learnpress' ),\n+\t\t\t\t'post_title_desc' => esc_html__( 'Title z-a', 'learnpress' ),\n+\t\t\t\t'price'           => esc_html__( 'Price high to low', 'learnpress' ),\n+\t\t\t\t'price_low'       => esc_html__( 'Price low to high', 'learnpress' ),\n+\t\t\t\t'popular'         => esc_html__( 'Popular', 'learnpress' ),\n+\t\t\t]\n+\t\t);\n+\n+\t\t$content = '\u003Cselect name=\"order_by\" class=\"courses-order-by\">';\n+\t\tforeach ( $values as $k => $v ) {\n+\t\t\t$content .= '\u003Coption value=\"' . $k . '\" ' . selected( $default_value, $k, false ) . '>' . $v . '\u003C\u002Foption>';\n+\t\t}\n+\t\t$content .= '\u003C\u002Fselect>';\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\tpublic function html_search_form( array $data = [] ) {\n+\t\t$s     = $data['c_search'] ?? '';\n+\t\t$class = $data['class'] ?? 'search-courses';\n+\t\tob_start();\n+\t\t?>\n+\t\t\u003Cform class=\"\u003C?php echo esc_attr( $class ); ?>\" method=\"get\"\n+\t\t\taction=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\">\n+\t\t\t\u003Cinput type=\"search\" placeholder=\"\u003C?php esc_attr_e( 'Search courses...', 'learnpress' ); ?>\"\n+\t\t\t\t\tname=\"c_search\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( $s ); ?>\">\n+\t\t\t\u003Cbutton type=\"submit\" name=\"lp-btn-search-courses\">\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fform>\n+\t\t\u003C?php\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * Html switch layout.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function switch_layout(): string {\n+\t\t$layouts = learn_press_courses_layouts();\n+\t\t$active  = learn_press_get_courses_layout();\n+\n+\t\t$html_layouts = '';\n+\t\tforeach ( $layouts as $layout => $value ) {\n+\t\t\t$html_layouts .= sprintf(\n+\t\t\t\t'\u003Cinput type=\"radio\" name=\"lp-switch-layout-btn\" value=\"%s\" id=\"lp-switch-layout-btn-%s\" %s>\n+\t\t\t\t\u003Clabel class=\"switch-btn %s\" title=\"%s\" for=\"lp-switch-layout-btn-%s\">\u003C\u002Flabel>',\n+\t\t\t\tesc_attr( $layout ),\n+\t\t\t\tesc_attr( $layout ),\n+\t\t\t\tchecked( $layout, $active, false ),\n+\t\t\t\tesc_attr( $layout ),\n+\t\t\t\tsprintf( esc_attr__( 'Switch to %s', 'learnpress' ), $value ),\n+\t\t\t\tesc_attr( $layout )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Flayout\u002Flist-courses\u002Fsection\u002Fswitch-layout',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"switch-layout\">',\n+\t\t\t\t'layouts'     => $html_layouts,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Layout course search suggest result.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function sections_course_suggest( array $data = [] ) {\n+\t\t$content              = '';\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\tob_start();\n+\t\ttry {\n+\t\t\t$courses       = $data['courses'] ?? [];\n+\t\t\t$key_search    = $data['keyword'] ?? '';\n+\t\t\t$total_courses = $data['total_course'] ?? 0;\n+\n+\t\t\t\u002F\u002F HTML section list courses.\n+\t\t\t$html_list_course = '';\n+\t\t\tforeach ( $courses as $courseObj ) {\n+\t\t\t\tif ( ! is_object( $courseObj ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$course_id = $courseObj->ID;\n+\t\t\t\t$course    = learn_press_get_course( $course_id );\n+\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$section_item      = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcourse-suggest\u002Fitem\u002Fsections',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'wrapper'      => '\u003Cli class=\"item-course-suggest\">',\n+\t\t\t\t\t\t'course_image' => $singleCourseTemplate->html_image( $course ),\n+\t\t\t\t\t\t'course_title' => sprintf(\n+\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t\t$course->get_permalink(),\n+\t\t\t\t\t\t\t$singleCourseTemplate->html_title( $course )\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'wrapper_end'  => '\u003C\u002Fli>',\n+\t\t\t\t\t],\n+\t\t\t\t\t$course,\n+\t\t\t\t\t$key_search,\n+\t\t\t\t\t$data\n+\t\t\t\t);\n+\t\t\t\t$html_list_course .= Template::combine_components( $section_item );\n+\t\t\t}\n+\n+\t\t\t$count_courses = sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t$total_courses,\n+\t\t\t\t_n( 'Course Found', 'Courses Found', $total_courses, 'learnpress' )\n+\t\t\t);\n+\t\t\t$view_all      = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\tadd_query_arg( 'c_search', $key_search, learn_press_get_page_link( 'courses' ) ),\n+\t\t\t\t__( 'View All', 'learnpress' )\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Section.\n+\t\t\t$section = [\n+\t\t\t\t'wrapper'          => '\u003Cul class=\"lp-courses-suggest-list\">',\n+\t\t\t\t'courses'          => $html_list_course,\n+\t\t\t\t'wrapper_end'      => '\u003C\u002Ful>',\n+\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-courses-suggest-info\">',\n+\t\t\t\t'count'            => $count_courses,\n+\t\t\t\t'view_all'         => $view_all,\n+\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$content = Template::combine_components( $section );\n+\t\t\techo $content;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Sidebar\n+\t *\n+\t * @return void\n+\t * @version 1.0.0\n+\t * @since 4.2.3.2\n+\t *\u002F\n+\tpublic function sidebar() {\n+\t\ttry {\n+\t\t\tif ( is_active_sidebar( 'archive-courses-sidebar' ) ) {\n+\t\t\t\t$html_wrapper = [\n+\t\t\t\t\t'\u003Cdiv class=\"lp-archive-courses-sidebar\">' => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\n+\t\t\t\tob_start();\n+\t\t\t\tdynamic_sidebar( 'archive-courses-sidebar' );\n+\t\t\t\techo Template::instance()->nest_elements( $html_wrapper, ob_get_clean() );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Show total course free by Category.\n+\t * @return string\n+\t * @version 1.0.0\n+\t *\n+\t * @since 4.2.5.4\n+\t *\u002F\n+\tpublic function html_count_course_free(): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"courses-count-free\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$category_current      = 0;\n+\t\t$category_current_slug = get_query_var( 'term' );\n+\t\tif ( ! empty( $category_current_slug ) ) {\n+\t\t\t$category_current_obj = get_term_by( 'slug', $category_current_slug, LP_COURSE_CATEGORY_TAX );\n+\t\t\tif ( $category_current_obj instanceof WP_Term ) {\n+\t\t\t\t$category_current = $category_current_obj->term_id;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$filter = new LP_Course_Filter();\n+\t\tif ( ! empty( $category_current ) ) {\n+\t\t\t$filter->term_ids = [ $category_current ];\n+\t\t}\n+\n+\t\t$count   = Courses::count_course_free( $filter );\n+\t\t$content = sprintf(\n+\t\t\t'\u003Cspan class=\"courses-count-free-number\">%1$s\u003C\u002Fspan> %2$s',\n+\t\t\t$count,\n+\t\t\t_n( 'Free Course', 'Free Courses', $count, 'learnpress' )\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Show total students on Course Category.\n+\t *\n+\t * @return string\n+\t * @since 4.2.5.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_count_students(): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"courses-count-students\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$category_current      = 0;\n+\t\t$category_current_slug = get_query_var( 'term' );\n+\t\tif ( ! empty( $category_current_slug ) ) {\n+\t\t\t$category_current_obj = get_term_by( 'slug', $category_current_slug, LP_COURSE_CATEGORY_TAX );\n+\t\t\tif ( $category_current_obj instanceof WP_Term ) {\n+\t\t\t\t$category_current = $category_current_obj->term_id;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$filter           = new LP_User_Items_Filter();\n+\n+\t\t\u002F\u002F If page is course category, get total students of this category.\n+\t\tif ( ! empty( $category_current ) ) {\n+\t\t\t$filter->join[]  = \"INNER JOIN {$lp_user_items_db->tb_posts} AS p ON ui.item_id = p.ID\";\n+\t\t\t$filter->join[]  = \"INNER JOIN {$lp_user_items_db->tb_term_relationships} AS r_term ON ui.item_id = r_term.object_id\";\n+\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare( 'AND r_term.term_taxonomy_id = %d', $category_current );\n+\t\t}\n+\n+\t\t$count   = UserCourseModel::count_students( $filter );\n+\t\t$content = sprintf(\n+\t\t\t'\u003Cspan class=\"courses-count-students-number\">%1$s\u003C\u002Fspan> %2$s',\n+\t\t\t$count,\n+\t\t\t_n( 'Student', 'Students', $count, 'learnpress' )\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F************************** Hook old *****************************\u002F\n+\n+\t\u002F**\n+\t * Fix theme course-builder use old hook.\n+\t *\n+\t * @param array $section\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function fix_theme_cb_hook_courses( $section, $courses, $settings ) {\n+\t\t\u002F*$theme_name = wp_get_theme()->get( 'Name' );\n+\t\tif ( 'Course Builder' !== $theme_name ) {\n+\t\t\treturn $section;\n+\t\t}*\u002F\n+\n+\t\t$section_top = apply_filters(\n+\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fsection\u002Ftop',\n+\t\t\t[],\n+\t\t\t$courses,\n+\t\t\t$settings\n+\t\t);\n+\n+\t\t$section_new = [];\n+\t\tif ( ! empty( $section_top ) ) {\n+\t\t\tforeach ( $section_top as $k => $v ) {\n+\t\t\t\t$section_new[ $k ] = $v['text_html'] ?? '';\n+\t\t\t}\n+\n+\t\t\treturn $section_new;\n+\t\t}\n+\n+\t\treturn $section;\n+\t}\n+\n+\t\u002F**\n+\t * Fix theme course-builder use old hook.\n+\t *\n+\t * @param array $section\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function fix_theme_course_old( $section, $course, $settings ) {\n+\t\t\u002F*$theme_name = wp_get_theme()->get( 'Name' );\n+\t\tif ( 'Course Builder' !== $theme_name ) {\n+\t\t\treturn $section;\n+\t\t}*\u002F\n+\n+\t\t$course = learn_press_get_course( $course->get_id() );\n+\n+\t\t$wrapper = apply_filters(\n+\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fwrapper',\n+\t\t\t[],\n+\t\t\t$course,\n+\t\t\t$settings\n+\t\t);\n+\t\tif ( ! empty( $wrapper ) ) {\n+\t\t\t$i = 0;\n+\t\t\tforeach ( $wrapper as $k => $v ) {\n+\t\t\t\tif ( $i === 0 ) {\n+\t\t\t\t\t$section['wrapper_li']     = $k;\n+\t\t\t\t\t$section['wrapper_li_end'] = $v;\n+\t\t\t\t} elseif ( $i === 1 ) {\n+\t\t\t\t\t$section['wrapper_div']     = $k;\n+\t\t\t\t\t$section['wrapper_div_end'] = $v;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\n+\t\t\t\t++$i;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section_item = apply_filters(\n+\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fsection',\n+\t\t\t[],\n+\t\t\t$course,\n+\t\t\t$settings\n+\t\t);\n+\t\tif ( ! empty( $section_item ) ) {\n+\t\t\t$section['top'] = $section_item['thim_top']['text_html'] ?? '';\n+\t\t}\n+\n+\t\t$section_bottom     = apply_filters(\n+\t\t\t'learn-press\u002Flist-courses\u002Flayout\u002Fitem\u002Fsection\u002Fbottom',\n+\t\t\t[],\n+\t\t\t$course,\n+\t\t\t$settings\n+\t\t);\n+\t\t$section_bottom_new = [];\n+\t\tif ( ! empty( $section_bottom ) ) {\n+\t\t\tforeach ( $section_bottom as $k => $v ) {\n+\t\t\t\t$section_bottom_new[ $k ] = $v['text_html'] ?? '';\n+\t\t\t}\n+\n+\t\t\t$section['bottom'] = Template::combine_components( $section_bottom_new );\n+\t\t}\n+\n+\t\treturn $section;\n+\t}\n+\n+\t\u002F**\n+\t * Render string to data content\n+\t *\n+\t * @param array $data\n+\t * @param string $data_content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render_data( array $data, string $data_content ): string {\n+\t\treturn str_replace(\n+\t\t\t[\n+\t\t\t\t'{{courses_order_by}}',\n+\t\t\t\t'{{courses_layout_type}}',\n+\t\t\t\t'{{courses_pagination}}',\n+\t\t\t\t'{{courses_page_result}}',\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t$this->html_order_by( $data['order_by'] ?? '' ),\n+\t\t\t\t$this->html_layout_type( $data ),\n+\t\t\t\t$this->html_pagination( $data['pagination'] ?? [] ),\n+\t\t\t\t$this->html_courses_page_result( $data ),\n+\t\t\t],\n+\t\t\t$data_content\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,440 +1,440 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Course Online.\r\n- *\r\n- * @since 4.2.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\UserTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-class SingleCourseClassicTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var SingleCourseTemplate $singleCourseTemplate\r\n-\t *\u002F\r\n-\tpublic $singleCourseTemplate;\r\n-\r\n-\tpublic function init() {\r\n-\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\tadd_action( 'learn-press\u002Fsingle-course\u002Flayout\u002Fclassic', [ $this, 'section' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Single course layout classic\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function section( CourseModel $course ) {\r\n-\t\t$user = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t$content = [\r\n-\t\t\t'wrapper'        => '\u003Cdiv class=\"course-content course-summary-content\">',\r\n-\t\t\t'section_header' => $this->header_sections( $course, $user ),\r\n-\t\t\t'section_main'   => $this->main_sections( $course, $user ),\r\n-\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'            => '\u003Cdiv class=\"lp-single-course lp-archive-courses\">',\r\n-\t\t\t\t'breadcrumb'         => Template::html_breadcrumb(),\r\n-\t\t\t\t'course_summary'     => '\u003Cdiv id=\"learn-press-course\" class=\"course-summary\">',\r\n-\t\t\t\t'content'            => Template::combine_components( $content ),\r\n-\t\t\t\t'course_summary_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'        => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\techo Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\tpublic function header_sections( $course, $user ): string {\r\n-\r\n-\t\t$meta_primary = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmeta-primary\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-meta course-meta-primary\">',\r\n-\t\t\t\t'instructor'  => $this->html_instructor( $course ),\r\n-\t\t\t\t'category'    => $this->html_category( $course ),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$meta_secondary = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmeta-secondary\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-meta course-meta-secondary\">',\r\n-\t\t\t\t'duration'    => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-duration\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$this->singleCourseTemplate->html_duration( $course )\r\n-\t\t\t\t),\r\n-\t\t\t\t'level'       => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-level\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$this->singleCourseTemplate->html_level( $course )\r\n-\t\t\t\t),\r\n-\t\t\t\t'lesson'      => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-lesson\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$this->singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT )\r\n-\t\t\t\t),\r\n-\t\t\t\t'quiz'        => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-quiz\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$this->singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT )\r\n-\t\t\t\t),\r\n-\t\t\t\t'student'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-student\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$this->singleCourseTemplate->html_count_student( $course )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$header_sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fheader\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'             => '\u003Cdiv class=\"course-detail-info\">',\r\n-\t\t\t\t'wrapper_inner'       => '\u003Cdiv class=\"course-detail-info__inner\">',\r\n-\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"course-meta__pull-left\">',\r\n-\t\t\t\t'meta_primary'        => Template::combine_components( $meta_primary ),\r\n-\t\t\t\t'title'               => $this->singleCourseTemplate->html_title( $course, 'h1' ),\r\n-\t\t\t\t'meta_secondary'      => Template::combine_components( $meta_secondary ),\r\n-\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_inner_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $header_sections );\r\n-\t}\r\n-\r\n-\tpublic function main_sections( $course, $user ): string {\r\n-\r\n-\t\t$content_left = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcontent-left\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"entry-content-left\">',\r\n-\t\t\t\t'course_tabs'  => $this->html_course_tabs( $course, $user ),\r\n-\t\t\t\t'features'     => $this->singleCourseTemplate->html_features( $course ),\r\n-\t\t\t\t'target'       => $this->singleCourseTemplate->html_target( $course ),\r\n-\t\t\t\t'requirements' => $this->singleCourseTemplate->html_requirements( $course ),\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$userCourseModel         = UserCourseModel::find( get_current_user_id(), $course->get_id(), true );\r\n-\t\t$userCourseTemplate      = UserCourseTemplate::instance();\r\n-\t\t$btn_continue_and_finish = [];\r\n-\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t$btn_continue_and_finish = [\r\n-\t\t\t\t'btn_continue' => $userCourseTemplate->html_btn_continue( $userCourseModel ),\r\n-\t\t\t\t'btn_finish'   => $userCourseTemplate->html_btn_finish( $userCourseModel ),\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$section_buttons = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-right\u002Finfo-meta\u002Fbuttons',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'                 => '\u003Cdiv class=\"course-buttons\">',\r\n-\t\t\t\t'btn_contact'             => $this->singleCourseTemplate->html_btn_external( $course, $user ),\r\n-\t\t\t\t'btn_buy'                 => $this->singleCourseTemplate->html_btn_purchase_course( $course, $user ),\r\n-\t\t\t\t'btn_enroll'              => $this->singleCourseTemplate->html_btn_enroll_course( $course, $user ),\r\n-\t\t\t\t'btn_continue_and_finish' => Template::combine_components( $btn_continue_and_finish ),\r\n-\t\t\t\t'wrapper_end'             => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\t$summary_sidebar = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcontent-left\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-summary-sidebar\">',\r\n-\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"course-summary-sidebar__inner\">',\r\n-\t\t\t\t'image'             => $this->singleCourseTemplate->html_image( $course ),\r\n-\t\t\t\t'price'             => $this->singleCourseTemplate->html_price( $course ),\r\n-\t\t\t\t'buttons'           => Template::combine_components( $section_buttons ),\r\n-\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user ),\r\n-\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course ),\r\n-\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$main_sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmain\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'         => '\u003Cdiv class=\"lp-entry-content lp-content-area\">',\r\n-\t\t\t\t'content_left'    => Template::combine_components( $content_left ),\r\n-\t\t\t\t'summary_sidebar' => Template::combine_components( $summary_sidebar ),\r\n-\t\t\t\t'wrapper_end'     => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $main_sections );\r\n-\t}\r\n-\r\n-\tpublic function html_instructor( $course ): string {\r\n-\t\t$instructor = $course->get_author_model();\r\n-\t\tif ( ! $instructor ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\t$html_instructor = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'           => '\u003Cdiv class=\"meta-item meta-item-instructor\">',\r\n-\t\t\t\t'avatar_instructor' => sprintf( '\u003Cdiv class=\"meta-item__image\">%s\u003C\u002Fdiv>', SingleInstructorTemplate::instance()->html_avatar( $instructor, [] ) ),\r\n-\t\t\t\t'instructor'        => '\u003Cdiv class=\"meta-item__value\">',\r\n-\t\t\t\t'label'             => sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html__( 'Instructor', 'learnpress' ) ),\r\n-\t\t\t\t'name'              => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\r\n-\t\t\t\t),\r\n-\t\t\t\t'instructor_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$instructor\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $html_instructor );\r\n-\t}\r\n-\r\n-\tpublic function html_category( $course ): string {\r\n-\t\t$cats = $course->get_categories();\r\n-\t\tif ( empty( $cats ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$cat_names = [];\r\n-\t\tarray_map(\r\n-\t\t\tfunction ( $cat ) use ( &$cat_names ) {\r\n-\t\t\t\t$term        = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_term_link( $cat->term_id ), $cat->name );\r\n-\t\t\t\t$cat_names[] = $term;\r\n-\t\t\t},\r\n-\t\t\t$cats\r\n-\t\t);\r\n-\r\n-\t\t$content = implode( ' | ', $cat_names );\r\n-\r\n-\t\t$html_category = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-categories',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"meta-item meta-item-categories\">',\r\n-\t\t\t\t'category'     => '\u003Cdiv class=\"meta-item__value\">',\r\n-\t\t\t\t'label'        => sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html__( 'Category', 'learnpress' ) ),\r\n-\t\t\t\t'content'      => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $content ),\r\n-\t\t\t\t'category_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$cats,\r\n-\t\t\t$cat_names\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $html_category );\r\n-\t}\r\n-\r\n-\tpublic function html_course_tabs( $course, $user ): string {\r\n-\r\n-\t\t$tabs = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcourse-tabs',\r\n-\t\t\t[\r\n-\t\t\t\t'overview'   => esc_html__( 'Overview', 'learnpress' ),\r\n-\t\t\t\t'curriculum' => esc_html__( 'Curriculum', 'learnpress' ),\r\n-\t\t\t\t'instructor' => esc_html__( 'Instructor', 'learnpress' ),\r\n-\t\t\t\t'materials'  => esc_html__( 'Materials', 'learnpress' ),\r\n-\t\t\t\t'faqs'       => esc_html__( 'FAQs', 'learnpress' ),\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$active_tab = 'overview';\r\n-\t\t$lp_user    = learn_press_get_current_user();\r\n-\r\n-\t\tif ( $lp_user && ! $lp_user instanceof LP_User_Guest ) {\r\n-\t\t\t$can_view_course = $lp_user->can_view_content_course( get_the_ID() );\r\n-\r\n-\t\t\tif ( ! $can_view_course->flag ) {\r\n-\t\t\t\tif ( LP_BLOCK_COURSE_FINISHED === $can_view_course->key ) {\r\n-\t\t\t\t\tlearn_press_display_message(\r\n-\t\t\t\t\t\tesc_html__( 'You finished this course. This course has been blocked', 'learnpress' ),\r\n-\t\t\t\t\t\t'warning'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( LP_BLOCK_COURSE_DURATION_EXPIRE === $can_view_course->key ) {\r\n-\t\t\t\t\tlearn_press_display_message(\r\n-\t\t\t\t\t\tesc_html__( 'This course has been blocked for expiration', 'learnpress' ),\r\n-\t\t\t\t\t\t'warning'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$html_tabs = [];\r\n-\t\tif ( $tabs ) {\r\n-\t\t\tob_start();\r\n-\t\t\tforeach ( $tabs as $key => $tab ) {\r\n-\t\t\t\techo '\u003Cinput type=\"radio\" name=\"learn-press-course-tab-radio\" id=\"tab-' . esc_attr( $key ) . '-input\"\r\n-\t\t\t\t\t' . ( $active_tab === $key ? 'checked ' : '' ) . 'value=\"' . esc_attr( $key ) . '\"\u002F>';\r\n-\t\t\t}\r\n-\t\t\t$html_input = ob_get_clean();\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tforeach ( $tabs as $key => $tab ) {\r\n-\t\t\t\t$classes = array( 'course-nav course-nav-tab-' . esc_attr( $key ) );\r\n-\r\n-\t\t\t\tif ( $active_tab === $key ) {\r\n-\t\t\t\t\t$classes[] = 'active';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\techo '\u003Cli class=\"' . esc_attr( implode( ' ', $classes ) ) . '\">';\r\n-\t\t\t\techo '\u003Clabel for=\"tab-' . esc_attr( $key ) . '-input\">' . esc_html( $tab ) . '\u003C\u002Flabel>';\r\n-\t\t\t\techo '\u003C\u002Fli>';\r\n-\t\t\t}\r\n-\t\t\t$html_tabs_nav = ob_get_clean();\r\n-\r\n-\t\t\t$tabs_nav = [\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"wrapper-course-nav-tabs TabsDragScroll\">',\r\n-\t\t\t\t'nav_tabs'     => '\u003Cul class=\"learn-press-nav-tabs course-nav-tabs\" data-tabs=\"' . esc_attr( count( $tabs ) ) . '\">',\r\n-\t\t\t\t'content'      => $html_tabs_nav,\r\n-\t\t\t\t'nav_tabs_end' => '\u003C\u002Ful>',\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\tob_start();\r\n-\r\n-\t\t\tforeach ( $tabs as $key => $tab ) {\r\n-\t\t\t\techo '\u003Cdiv class=\"course-tab-panel-' . esc_attr( $key ) . ' course-tab-panel\"\r\n-\t\t\t\t\tid=\"tab-' . esc_attr( $key ) . '\">';\r\n-\r\n-\t\t\t\tswitch ( $key ) {\r\n-\t\t\t\t\tcase 'overview':\r\n-\t\t\t\t\t\techo $this->singleCourseTemplate->html_description( $course );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\u002F\u002F case 'curriculum':\r\n-\t\t\t\t\t\u002F\u002F  echo $this->singleCourseTemplate->html_curriculum( $course );\r\n-\t\t\t\t\t\u002F\u002F  break;\r\n-\t\t\t\t\tcase 'instructor':\r\n-\t\t\t\t\t\techo $this->html_instructor_main( $course, $user );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'faqs':\r\n-\t\t\t\t\t\techo $this->singleCourseTemplate->html_faqs( $course );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'materials':\r\n-\t\t\t\t\t\techo $this->singleCourseTemplate->html_material( $course );\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_tabs_content = ob_get_clean();\r\n-\r\n-\t\t\t$tabs_content = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-tab-panels\">',\r\n-\t\t\t\t'content'     => $html_tabs_content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_tabs = [\r\n-\t\t\t\t'input'   => $html_input,\r\n-\t\t\t\t'nav'     => Template::combine_components( $tabs_nav ),\r\n-\t\t\t\t'content' => Template::combine_components( $tabs_content ),\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$course_tabs = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmain\u002Fcourse-tabs',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv id=\"learn-press-course-tabs\" class=\"course-tabs\">',\r\n-\t\t\t\t'tabs'        => Template::combine_components( $html_tabs ),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $course_tabs );\r\n-\t}\r\n-\r\n-\tpublic function html_instructor_main( $course, $user ): string {\r\n-\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\t\t$author                   = $course->get_author_model();\r\n-\r\n-\t\t\u002F\u002F Instructor\r\n-\t\t$html_instructor = '';\r\n-\t\tif ( $author ) {\r\n-\t\t\t$html_instructor_image   = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$author->get_url_instructor(),\r\n-\t\t\t\t$author->get_display_name(),\r\n-\t\t\t\t$singleInstructorTemplate->html_avatar( $author )\r\n-\t\t\t);\r\n-\t\t\t$section_instructor_meta = [\r\n-\t\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\r\n-\t\t\t\t'count_students' => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\r\n-\t\t\t\t),\r\n-\t\t\t\t'count_courses'  => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_instructor_meta    = Template::combine_components( $section_instructor_meta );\r\n-\r\n-\t\t\t$section_instructor_right = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-instructor\u002Fright',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t\t'name'        => sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$author->get_url_instructor(),\r\n-\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'meta'        => $html_instructor_meta,\r\n-\t\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\r\n-\t\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\t\t\t$html_instructor_right    = Template::combine_components( $section_instructor_right );\r\n-\t\t\t$section_instructor       = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-instructor',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\r\n-\t\t\t\t\t'image'            => $html_instructor_image,\r\n-\t\t\t\t\t'instructor_right' => $html_instructor_right,\r\n-\t\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\t\t\t$html_instructor          = Template::combine_components( $section_instructor );\r\n-\t\t}\r\n-\r\n-\t\treturn $html_instructor;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Course Online.\n+ *\n+ * @since 4.2.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\UserTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+class SingleCourseClassicTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var SingleCourseTemplate $singleCourseTemplate\n+\t *\u002F\n+\tpublic $singleCourseTemplate;\n+\n+\tpublic function init() {\n+\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\tadd_action( 'learn-press\u002Fsingle-course\u002Flayout\u002Fclassic', [ $this, 'section' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Single course layout classic\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function section( CourseModel $course ) {\n+\t\t$user = UserModel::find( get_current_user_id(), true );\n+\n+\t\t$content = [\n+\t\t\t'wrapper'        => '\u003Cdiv class=\"course-content course-summary-content\">',\n+\t\t\t'section_header' => $this->header_sections( $course, $user ),\n+\t\t\t'section_main'   => $this->main_sections( $course, $user ),\n+\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'            => '\u003Cdiv class=\"lp-single-course lp-archive-courses\">',\n+\t\t\t\t'breadcrumb'         => Template::html_breadcrumb(),\n+\t\t\t\t'course_summary'     => '\u003Cdiv id=\"learn-press-course\" class=\"course-summary\">',\n+\t\t\t\t'content'            => Template::combine_components( $content ),\n+\t\t\t\t'course_summary_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'        => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\techo Template::combine_components( $sections );\n+\t}\n+\n+\tpublic function header_sections( $course, $user ): string {\n+\n+\t\t$meta_primary = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmeta-primary\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-meta course-meta-primary\">',\n+\t\t\t\t'instructor'  => $this->html_instructor( $course ),\n+\t\t\t\t'category'    => $this->html_category( $course ),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$meta_secondary = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmeta-secondary\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-meta course-meta-secondary\">',\n+\t\t\t\t'duration'    => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-duration\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$this->singleCourseTemplate->html_duration( $course )\n+\t\t\t\t),\n+\t\t\t\t'level'       => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-level\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$this->singleCourseTemplate->html_level( $course )\n+\t\t\t\t),\n+\t\t\t\t'lesson'      => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-lesson\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$this->singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT )\n+\t\t\t\t),\n+\t\t\t\t'quiz'        => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-quiz\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$this->singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT )\n+\t\t\t\t),\n+\t\t\t\t'student'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"meta-item meta-item-student\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$this->singleCourseTemplate->html_count_student( $course )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$header_sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fheader\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'             => '\u003Cdiv class=\"course-detail-info\">',\n+\t\t\t\t'wrapper_inner'       => '\u003Cdiv class=\"course-detail-info__inner\">',\n+\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"course-meta__pull-left\">',\n+\t\t\t\t'meta_primary'        => Template::combine_components( $meta_primary ),\n+\t\t\t\t'title'               => $this->singleCourseTemplate->html_title( $course, 'h1' ),\n+\t\t\t\t'meta_secondary'      => Template::combine_components( $meta_secondary ),\n+\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_inner_end'   => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\treturn Template::combine_components( $header_sections );\n+\t}\n+\n+\tpublic function main_sections( $course, $user ): string {\n+\n+\t\t$content_left = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcontent-left\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"entry-content-left\">',\n+\t\t\t\t'course_tabs'  => $this->html_course_tabs( $course, $user ),\n+\t\t\t\t'features'     => $this->singleCourseTemplate->html_features( $course ),\n+\t\t\t\t'target'       => $this->singleCourseTemplate->html_target( $course ),\n+\t\t\t\t'requirements' => $this->singleCourseTemplate->html_requirements( $course ),\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$userCourseModel         = UserCourseModel::find( get_current_user_id(), $course->get_id(), true );\n+\t\t$userCourseTemplate      = UserCourseTemplate::instance();\n+\t\t$btn_continue_and_finish = [];\n+\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t$btn_continue_and_finish = [\n+\t\t\t\t'btn_continue' => $userCourseTemplate->html_btn_continue( $userCourseModel ),\n+\t\t\t\t'btn_finish'   => $userCourseTemplate->html_btn_finish( $userCourseModel ),\n+\t\t\t];\n+\t\t}\n+\n+\t\t$section_buttons = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-right\u002Finfo-meta\u002Fbuttons',\n+\t\t\t[\n+\t\t\t\t'wrapper'                 => '\u003Cdiv class=\"course-buttons\">',\n+\t\t\t\t'btn_contact'             => $this->singleCourseTemplate->html_btn_external( $course, $user ),\n+\t\t\t\t'btn_buy'                 => $this->singleCourseTemplate->html_btn_purchase_course( $course, $user ),\n+\t\t\t\t'btn_enroll'              => $this->singleCourseTemplate->html_btn_enroll_course( $course, $user ),\n+\t\t\t\t'btn_continue_and_finish' => Template::combine_components( $btn_continue_and_finish ),\n+\t\t\t\t'wrapper_end'             => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\t$summary_sidebar = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcontent-left\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-summary-sidebar\">',\n+\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"course-summary-sidebar__inner\">',\n+\t\t\t\t'image'             => $this->singleCourseTemplate->html_image( $course ),\n+\t\t\t\t'price'             => $this->singleCourseTemplate->html_price( $course ),\n+\t\t\t\t'buttons'           => Template::combine_components( $section_buttons ),\n+\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user ),\n+\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course ),\n+\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$main_sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmain\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'         => '\u003Cdiv class=\"lp-entry-content lp-content-area\">',\n+\t\t\t\t'content_left'    => Template::combine_components( $content_left ),\n+\t\t\t\t'summary_sidebar' => Template::combine_components( $summary_sidebar ),\n+\t\t\t\t'wrapper_end'     => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\treturn Template::combine_components( $main_sections );\n+\t}\n+\n+\tpublic function html_instructor( $course ): string {\n+\t\t$instructor = $course->get_author_model();\n+\t\tif ( ! $instructor ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\t$html_instructor = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\n+\t\t\t[\n+\t\t\t\t'wrapper'           => '\u003Cdiv class=\"meta-item meta-item-instructor\">',\n+\t\t\t\t'avatar_instructor' => sprintf( '\u003Cdiv class=\"meta-item__image\">%s\u003C\u002Fdiv>', SingleInstructorTemplate::instance()->html_avatar( $instructor, [] ) ),\n+\t\t\t\t'instructor'        => '\u003Cdiv class=\"meta-item__value\">',\n+\t\t\t\t'label'             => sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html__( 'Instructor', 'learnpress' ) ),\n+\t\t\t\t'name'              => sprintf(\n+\t\t\t\t\t'\u003Cdiv>\u003Ca href=\"%s\">%s\u003C\u002Fa>\u003C\u002Fdiv>',\n+\t\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\n+\t\t\t\t),\n+\t\t\t\t'instructor_end'    => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$instructor\n+\t\t);\n+\n+\t\treturn Template::combine_components( $html_instructor );\n+\t}\n+\n+\tpublic function html_category( $course ): string {\n+\t\t$cats = $course->get_categories();\n+\t\tif ( empty( $cats ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$cat_names = [];\n+\t\tarray_map(\n+\t\t\tfunction ( $cat ) use ( &$cat_names ) {\n+\t\t\t\t$term        = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', get_term_link( $cat->term_id ), $cat->name );\n+\t\t\t\t$cat_names[] = $term;\n+\t\t\t},\n+\t\t\t$cats\n+\t\t);\n+\n+\t\t$content = implode( ' | ', $cat_names );\n+\n+\t\t$html_category = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-categories',\n+\t\t\t[\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"meta-item meta-item-categories\">',\n+\t\t\t\t'category'     => '\u003Cdiv class=\"meta-item__value\">',\n+\t\t\t\t'label'        => sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html__( 'Category', 'learnpress' ) ),\n+\t\t\t\t'content'      => sprintf( '\u003Cdiv>%s\u003C\u002Fdiv>', $content ),\n+\t\t\t\t'category_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$cats,\n+\t\t\t$cat_names\n+\t\t);\n+\n+\t\treturn Template::combine_components( $html_category );\n+\t}\n+\n+\tpublic function html_course_tabs( $course, $user ): string {\n+\n+\t\t$tabs = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fcourse-tabs',\n+\t\t\t[\n+\t\t\t\t'overview'   => esc_html__( 'Overview', 'learnpress' ),\n+\t\t\t\t'curriculum' => esc_html__( 'Curriculum', 'learnpress' ),\n+\t\t\t\t'instructor' => esc_html__( 'Instructor', 'learnpress' ),\n+\t\t\t\t'materials'  => esc_html__( 'Materials', 'learnpress' ),\n+\t\t\t\t'faqs'       => esc_html__( 'FAQs', 'learnpress' ),\n+\t\t\t]\n+\t\t);\n+\n+\t\t$active_tab = 'overview';\n+\t\t$lp_user    = learn_press_get_current_user();\n+\n+\t\tif ( $lp_user && ! $lp_user instanceof LP_User_Guest ) {\n+\t\t\t$can_view_course = $lp_user->can_view_content_course( get_the_ID() );\n+\n+\t\t\tif ( ! $can_view_course->flag ) {\n+\t\t\t\tif ( LP_BLOCK_COURSE_FINISHED === $can_view_course->key ) {\n+\t\t\t\t\tlearn_press_display_message(\n+\t\t\t\t\t\tesc_html__( 'You finished this course. This course has been blocked', 'learnpress' ),\n+\t\t\t\t\t\t'warning'\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( LP_BLOCK_COURSE_DURATION_EXPIRE === $can_view_course->key ) {\n+\t\t\t\t\tlearn_press_display_message(\n+\t\t\t\t\t\tesc_html__( 'This course has been blocked for expiration', 'learnpress' ),\n+\t\t\t\t\t\t'warning'\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$html_tabs = [];\n+\t\tif ( $tabs ) {\n+\t\t\tob_start();\n+\t\t\tforeach ( $tabs as $key => $tab ) {\n+\t\t\t\techo '\u003Cinput type=\"radio\" name=\"learn-press-course-tab-radio\" id=\"tab-' . esc_attr( $key ) . '-input\"\n+\t\t\t\t\t' . ( $active_tab === $key ? 'checked ' : '' ) . 'value=\"' . esc_attr( $key ) . '\"\u002F>';\n+\t\t\t}\n+\t\t\t$html_input = ob_get_clean();\n+\n+\t\t\tob_start();\n+\t\t\tforeach ( $tabs as $key => $tab ) {\n+\t\t\t\t$classes = array( 'course-nav course-nav-tab-' . esc_attr( $key ) );\n+\n+\t\t\t\tif ( $active_tab === $key ) {\n+\t\t\t\t\t$classes[] = 'active';\n+\t\t\t\t}\n+\n+\t\t\t\techo '\u003Cli class=\"' . esc_attr( implode( ' ', $classes ) ) . '\">';\n+\t\t\t\techo '\u003Clabel for=\"tab-' . esc_attr( $key ) . '-input\">' . esc_html( $tab ) . '\u003C\u002Flabel>';\n+\t\t\t\techo '\u003C\u002Fli>';\n+\t\t\t}\n+\t\t\t$html_tabs_nav = ob_get_clean();\n+\n+\t\t\t$tabs_nav = [\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"wrapper-course-nav-tabs TabsDragScroll\">',\n+\t\t\t\t'nav_tabs'     => '\u003Cul class=\"learn-press-nav-tabs course-nav-tabs\" data-tabs=\"' . esc_attr( count( $tabs ) ) . '\">',\n+\t\t\t\t'content'      => $html_tabs_nav,\n+\t\t\t\t'nav_tabs_end' => '\u003C\u002Ful>',\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\tob_start();\n+\n+\t\t\tforeach ( $tabs as $key => $tab ) {\n+\t\t\t\techo '\u003Cdiv class=\"course-tab-panel-' . esc_attr( $key ) . ' course-tab-panel\"\n+\t\t\t\t\tid=\"tab-' . esc_attr( $key ) . '\">';\n+\n+\t\t\t\tswitch ( $key ) {\n+\t\t\t\t\tcase 'overview':\n+\t\t\t\t\t\techo $this->singleCourseTemplate->html_description( $course );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\u002F\u002F case 'curriculum':\n+\t\t\t\t\t\u002F\u002F  echo $this->singleCourseTemplate->html_curriculum( $course );\n+\t\t\t\t\t\u002F\u002F  break;\n+\t\t\t\t\tcase 'instructor':\n+\t\t\t\t\t\techo $this->html_instructor_main( $course, $user );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'faqs':\n+\t\t\t\t\t\techo $this->singleCourseTemplate->html_faqs( $course );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'materials':\n+\t\t\t\t\t\techo $this->singleCourseTemplate->html_material( $course );\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\techo '\u003C\u002Fdiv>';\n+\t\t\t}\n+\n+\t\t\t$html_tabs_content = ob_get_clean();\n+\n+\t\t\t$tabs_content = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-tab-panels\">',\n+\t\t\t\t'content'     => $html_tabs_content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html_tabs = [\n+\t\t\t\t'input'   => $html_input,\n+\t\t\t\t'nav'     => Template::combine_components( $tabs_nav ),\n+\t\t\t\t'content' => Template::combine_components( $tabs_content ),\n+\t\t\t];\n+\t\t}\n+\n+\t\t$course_tabs = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fclassic\u002Fmain\u002Fcourse-tabs',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv id=\"learn-press-course-tabs\" class=\"course-tabs\">',\n+\t\t\t\t'tabs'        => Template::combine_components( $html_tabs ),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\treturn Template::combine_components( $course_tabs );\n+\t}\n+\n+\tpublic function html_instructor_main( $course, $user ): string {\n+\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\t\t$author                   = $course->get_author_model();\n+\n+\t\t\u002F\u002F Instructor\n+\t\t$html_instructor = '';\n+\t\tif ( $author ) {\n+\t\t\t$html_instructor_image   = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t$author->get_url_instructor(),\n+\t\t\t\t$author->get_display_name(),\n+\t\t\t\t$singleInstructorTemplate->html_avatar( $author )\n+\t\t\t);\n+\t\t\t$section_instructor_meta = [\n+\t\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\n+\t\t\t\t'count_students' => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\n+\t\t\t\t),\n+\t\t\t\t'count_courses'  => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_instructor_meta    = Template::combine_components( $section_instructor_meta );\n+\n+\t\t\t$section_instructor_right = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-instructor\u002Fright',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t\t'name'        => sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t$author->get_url_instructor(),\n+\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\n+\t\t\t\t\t),\n+\t\t\t\t\t'meta'        => $html_instructor_meta,\n+\t\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\n+\t\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$user\n+\t\t\t);\n+\t\t\t$html_instructor_right    = Template::combine_components( $section_instructor_right );\n+\t\t\t$section_instructor       = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Fmodel\u002Fsection-instructor',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\n+\t\t\t\t\t'image'            => $html_instructor_image,\n+\t\t\t\t\t'instructor_right' => $html_instructor_right,\n+\t\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$user\n+\t\t\t);\n+\t\t\t$html_instructor          = Template::combine_components( $section_instructor );\n+\t\t}\n+\n+\t\treturn $html_instructor;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,574 +1,574 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Course Online.\r\n- *\r\n- * @since 4.2.7\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-class SingleCourseModernLayout {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var SingleCourseTemplate\r\n-\t *\u002F\r\n-\tpublic $singleCourseTemplate;\r\n-\r\n-\tpublic function init() {\r\n-\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\tadd_action(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Flayout',\r\n-\t\t\t[ $this, 'course_model_layout' ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Single course layout model\r\n-\t *\r\n-\t * @param $course\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function course_model_layout( $course ) {\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\u002F\u002F Related courses\r\n-\t\tob_start();\r\n-\t\tdo_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', $course, 4 );\r\n-\t\t$html_courses_related = ob_get_clean();\r\n-\r\n-\t\t\u002F\u002F Global message\r\n-\t\tob_start();\r\n-\t\tlearn_press_show_message();\r\n-\t\t$global_message = ob_get_clean();\r\n-\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'               => '\u003Cdiv class=\"lp-single-course\">',\r\n-\t\t\t\t'section_header'        => $this->header_sections( $course, $user ),\r\n-\t\t\t\t'wrapper_container'     => '\u003Cdiv class=\"lp-content-area\">',\r\n-\t\t\t\t'wrapper_main'          => '\u003Cdiv class=\"lp-single-course-main\">',\r\n-\t\t\t\t'global_message'        => $global_message,\r\n-\t\t\t\t'section_left'          => $this->section_left( $course, $user ),\r\n-\t\t\t\t'section_right'         => $this->section_right( $course, $user ),\r\n-\t\t\t\t'wrapper_main_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'related_courses'       => $html_courses_related,\r\n-\t\t\t\t'wrapper_container_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\techo Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML header section\r\n-\t *\r\n-\t * @param $course\r\n-\t * @param $user\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function header_sections( $course, $user ): string {\r\n-\t\t$html_categories = $this->singleCourseTemplate->html_categories( $course );\r\n-\t\tif ( ! empty( $html_categories ) ) {\r\n-\t\t\t$html_categories = sprintf(\r\n-\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) ),\r\n-\t\t\t\t$html_categories\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section_info_one = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Finfo-meta',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-single-course-info-one\">',\r\n-\t\t\t\t'author'      => '',\r\n-\t\t\t\t'last_update' => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"item-meta\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tesc_html__( 'Last updated', 'learnpress' ),\r\n-\t\t\t\t\tesc_attr( get_post_modified_time( get_option( 'date_format' ), true ) )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\t\tif ( ! has_filter( 'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Finfo-meta' ) ) {\r\n-\t\t\t\u002F\u002F Do not use this hook, this hook only for handle hook without update from Addon, when handle on Addon, will remove this hook\r\n-\t\t\t$section_info_one = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-bar',\r\n-\t\t\t\t$section_info_one,\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$html_instructor = sprintf(\r\n-\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\r\n-\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) ),\r\n-\t\t\t$this->singleCourseTemplate->html_instructor( $course )\r\n-\t\t);\r\n-\r\n-\t\t$header_sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper_header'              => '\u003Cdiv class=\"lp-single-course__header\">',\r\n-\t\t\t\t'wrapper_container'           => '\u003Cdiv class=\"lp-single-course__header__inner\">',\r\n-\t\t\t\t'breadcrumb'                  => Template::html_breadcrumb(),\r\n-\t\t\t\t'title'                       => $this->singleCourseTemplate->html_title( $course, 'h1' ),\r\n-\t\t\t\t'wrapper_instructor_cate'     => '\u003Cdiv class=\"course-instructor-category\">',\r\n-\t\t\t\t'instructor'                  => $html_instructor,\r\n-\t\t\t\t'category'                    => $html_categories,\r\n-\t\t\t\t'wrapper_instructor_cate_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'info_one'                    => Template::combine_components( $section_info_one ),\r\n-\t\t\t\t'wrapper_container_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_header_end'          => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $header_sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML left section\r\n-\t *\r\n-\t * @param $course\r\n-\t * @param $user\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function section_left( $course, $user ): string {\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection_left',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'                => '\u003Cdiv class=\"lp-single-course-main__left\">',\r\n-\t\t\t\t'description'            => $this->singleCourseTemplate->html_description( $course ),\r\n-\t\t\t\t'features'               => $this->singleCourseTemplate->html_features( $course ),\r\n-\t\t\t\t'target'                 => $this->singleCourseTemplate->html_target( $course ),\r\n-\t\t\t\t'requirements'           => $this->singleCourseTemplate->html_requirements( $course ),\r\n-\t\t\t\t'curriculum'             => $this->singleCourseTemplate->html_curriculum( $course, $user ),\r\n-\t\t\t\t'material'               => $this->singleCourseTemplate->html_material( $course, $user ),\r\n-\t\t\t\t'faqs'                   => $this->singleCourseTemplate->html_faqs( $course ),\r\n-\t\t\t\t'instructor'             => $this->html_instructor_info( $course, $user ),\r\n-\t\t\t\t'featured_review_mobile' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\r\n-\t\t\t\t'comment'                => $this->singleCourseTemplate->html_comment( $course, $user ),\r\n-\t\t\t\t'sidebar_mobile'         => $this->singleCourseTemplate->html_sidebar( $course, [ 'lp_display_on' => 'lp-is-mobile' ] ),\r\n-\t\t\t\t'wrapper_end'            => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML right section\r\n-\t *\r\n-\t * @param $course\r\n-\t * @param $user\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function section_right( $course, $user ): string {\r\n-\t\t$user_id = 0;\r\n-\t\tif ( $user instanceof UserModel ) {\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t}\r\n-\t\t$userCourseModel = UserCourseModel::find( $user_id, $course->get_id(), true );\r\n-\r\n-\t\t$data_info_meta = [\r\n-\t\t\t'student'  => [\r\n-\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>%s:', __( 'Student', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_count_student( $course ),\r\n-\t\t\t],\r\n-\t\t\t'lesson'   => [\r\n-\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>%s:', __( 'Lesson', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\r\n-\t\t\t],\r\n-\t\t\t'duration' => [\r\n-\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>%s:', __( 'Duration', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_duration( $course ),\r\n-\t\t\t],\r\n-\t\t\t'quiz'     => [\r\n-\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>%s:', __( 'Quiz', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT ),\r\n-\t\t\t],\r\n-\t\t\t'level'    => [\r\n-\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>%s:', __( 'Level', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_level( $course ),\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\t$data_info_meta = apply_filters( 'learn-press\u002Fsingle-course\u002Fmodern\u002Finfo-meta', $data_info_meta, $course, $user );\r\n-\t\t$html_info_meta = '';\r\n-\t\tif ( ! empty( $data_info_meta ) ) {\r\n-\t\t\tforeach ( $data_info_meta as $info_meta ) {\r\n-\t\t\t\t$label              = $info_meta['label'];\r\n-\t\t\t\t$value              = $info_meta['value'];\r\n-\t\t\t\t$html_info_two_item = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"info-meta-item\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"info-meta-left\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$label,\r\n-\t\t\t\t\t$value\r\n-\t\t\t\t);\r\n-\t\t\t\t$html_info_meta    .= $html_info_two_item;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section_info_meta = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-right\u002Finfo-meta',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"info-metas\">',\r\n-\t\t\t\t'featured'    => $this->singleCourseTemplate->html_featured( $course ),\r\n-\t\t\t\t'meta'        => $html_info_meta,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\t$html_price = '';\r\n-\t\tif ( ! $userCourseModel || $user_id === 0\r\n-\t\t\t|| $userCourseModel->get_status() === UserItemModel::STATUS_CANCEL ) {\r\n-\t\t\t$html_price = $this->singleCourseTemplate->html_price( $course );\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection_right',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-single-course-main__right\">',\r\n-\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-course-main__right__inner\">',\r\n-\t\t\t\t'image'             => $this->singleCourseTemplate->html_image( $course ),\r\n-\t\t\t\t'price'             => $html_price,\r\n-\t\t\t\t'info_learning'     => $this->html_info_learning( $course, $user ),\r\n-\t\t\t\t\u002F\u002F'sale_discount'       => $this->singleCourseTemplate->html_sale_discount( $course ), to do\r\n-\t\t\t\t'metas'             => Template::combine_components( $section_info_meta ),\r\n-\t\t\t\t'buttons'           => $this->html_buttons( $course, $user ),\r\n-\t\t\t\t'share'             => $this->html_share( $course ),\r\n-\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\r\n-\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course, [ 'lp_display_on' => 'lp-is-pc' ] ),\r\n-\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML share social.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_share( CourseModel $courseModel, array $data = [] ): string {\r\n-\t\t$list_socials = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share',\r\n-\t\t\t[\r\n-\t\t\t\t'facebook'  => [\r\n-\t\t\t\t\t'label' => esc_html__( 'Facebook', 'learnpress' ),\r\n-\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-facebook\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'url'   => sprintf(\r\n-\t\t\t\t\t\t'https:\u002F\u002Fwww.facebook.com\u002Fsharer.php?u=%s',\r\n-\t\t\t\t\t\turlencode( $courseModel->get_permalink() )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t'twitter'   => [\r\n-\t\t\t\t\t'label' => esc_html__( 'Twitter', 'learnpress' ),\r\n-\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-twitter\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'url'   => sprintf(\r\n-\t\t\t\t\t\t'https:\u002F\u002Ftwitter.com\u002Fshare?url=%1$s&amp;text=%2$s',\r\n-\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\r\n-\t\t\t\t\t\trawurlencode( esc_attr( $courseModel->get_title() ) )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t'pinterest' => [\r\n-\t\t\t\t\t'label' => esc_html__( 'Pinterest', 'learnpress' ),\r\n-\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-pinterest-p\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'url'   => sprintf(\r\n-\t\t\t\t\t\t'https:\u002F\u002Fpinterest.com\u002Fpin\u002Fcreate\u002Fbutton\u002F?url=%1$s&amp;description=%2$s&amp;media=%3$s',\r\n-\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\r\n-\t\t\t\t\t\trawurlencode( esc_attr( $courseModel->get_short_description() ) ),\r\n-\t\t\t\t\t\turlencode( $courseModel->get_image_url() )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t\t'linkedin'  => [\r\n-\t\t\t\t\t'label' => esc_html__( 'Linkedin', 'learnpress' ),\r\n-\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-linkedin\">\u003C\u002Fi>',\r\n-\t\t\t\t\t'url'   => sprintf(\r\n-\t\t\t\t\t\t'https:\u002F\u002Fwww.linkedin.com\u002FshareArticle?mini=true&url=%1$s&title=%2$s&summary=&source=%3$s',\r\n-\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\r\n-\t\t\t\t\t\tesc_attr( $courseModel->get_title() ),\r\n-\t\t\t\t\t\tesc_attr( $courseModel->get_short_description() )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t],\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$html_social = '';\r\n-\t\tif ( ! empty( $list_socials ) ) {\r\n-\t\t\tforeach ( $list_socials as $key => $social ) {\r\n-\t\t\t\t$html_social .= sprintf(\r\n-\t\t\t\t\t'\u003Cli>\r\n-\t\t\t\t\t\t\u003Ca target=\"_blank\" href=\"%s\" title=\"%s\">%s\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fli>',\r\n-\t\t\t\t\t$social['url'],\r\n-\t\t\t\t\t$social['label'],\r\n-\t\t\t\t\t$social['icon'],\r\n-\t\t\t\t\t$social['label']\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$social_media = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share\u002Ful',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cul class=\"lp-social-media\">',\r\n-\t\t\t\t'content'     => $html_social,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$clipboard = [\r\n-\t\t\t'wrapper'     => '\u003Cdiv class=\"clipboard-post\">',\r\n-\t\t\t'input'       => sprintf( '\u003Cinput class=\"clipboard-value\" type=\"text\" value=\"%s\">', $courseModel->get_permalink() ),\r\n-\t\t\t'button'      => sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"btn-clipboard\" data-copied=\"%s\">%s\u003Cspan class=\"tooltip\">%s\u003C\u002Fspan>\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Copied!', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Copy', 'learnpress' ),\r\n-\t\t\t\tesc_html__( 'Copy to Clipboard', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"social-swapper social-share-toggle\">',\r\n-\t\t\t\t'toggle'                    => '\u003Cdiv class=\"share-toggle-icon\">',\r\n-\t\t\t\t'toggle_icon'               => sprintf( '\u003Ci class=\"lp-icon-share-alt\">\u003C\u002Fi>\u003Clabel class=\"share-label\">%s\u003C\u002Flabel>', __( 'Share', 'learnpress' ) ),\r\n-\t\t\t\t'toggle_end'                => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_content'           => '\u003Cdiv class=\"wrapper-content-widget\">',\r\n-\t\t\t\t'wrapper_content_inner'     => '\u003Cdiv class=\"content-widget-social-share\">',\r\n-\t\t\t\t'clipboard'                 => Template::combine_components( $clipboard ),\r\n-\t\t\t\t'social'                    => Template::combine_components( $social_media ),\r\n-\t\t\t\t'wrapper_content_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_content_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$data\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html instructor info\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param UserModel|false $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_instructor_info( CourseModel $course, $user ): string {\r\n-\t\t$html_instructor          = '';\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\t\t$author                   = $course->get_author_model();\r\n-\r\n-\t\tif ( ! $author ) {\r\n-\t\t\treturn $html_instructor;\r\n-\t\t}\r\n-\r\n-\t\t$html_instructor_image    = sprintf(\r\n-\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t$author->get_url_instructor(),\r\n-\t\t\t$author->get_display_name(),\r\n-\t\t\t$singleInstructorTemplate->html_avatar( $author )\r\n-\t\t);\r\n-\t\t$section_instructor_meta  = [\r\n-\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\r\n-\t\t\t'count_students' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\r\n-\t\t\t),\r\n-\t\t\t'count_courses'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\t\t$section_instructor_right = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor\u002Fright',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t'name'        => sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t$author->get_url_instructor(),\r\n-\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\r\n-\t\t\t\t),\r\n-\t\t\t\t'meta'        => Template::combine_components( $section_instructor_meta ),\r\n-\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\r\n-\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\t\t$section_instructor       = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t'header'           => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'Instructor', 'learnpress' ) ),\r\n-\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\r\n-\t\t\t\t'image'            => $html_instructor_image,\r\n-\t\t\t\t'instructor_right' => Template::combine_components( $section_instructor_right ),\r\n-\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\tif ( ! has_filter( 'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor' ) ) {\r\n-\t\t\t\u002F\u002F Do not use this hook, this hook only for handle hook without update from Addon, when handle on Addon, will remove this hook\r\n-\t\t\t$section_instructor = apply_filters( 'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor', $section_instructor, $course, $user );\r\n-\t\t}\r\n-\r\n-\t\treturn Template::combine_components( $section_instructor );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html course info learning\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param UserModel|false $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_info_learning( CourseModel $course, $user = false ): string {\r\n-\t\t$html_info_learning = '';\r\n-\t\t$user_id            = 0;\r\n-\t\tif ( $user instanceof UserModel ) {\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t} else {\r\n-\t\t\treturn $html_info_learning;\r\n-\t\t}\r\n-\r\n-\t\t$userCourseModel = UserCourseModel::find( $user_id, $course->get_id(), true );\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel\r\n-\t\t\t&& $userCourseModel->get_status() !== UserItemModel::STATUS_CANCEL\r\n-\t\t\t&& $userCourseModel->get_status() !== UserCourseModel::STATUS_PURCHASED ) {\r\n-\t\t\t$userCourseTemplate = UserCourseTemplate::instance();\r\n-\t\t\t$html_end_date      = '';\r\n-\t\t\t$html_graduation    = '';\r\n-\r\n-\t\t\tif ( $userCourseModel->has_finished() ) {\r\n-\t\t\t\t$html_end_date   = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"end-date\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t__( 'End date', 'learnpress' ),\r\n-\t\t\t\t\t$userCourseTemplate->html_end_date_time( $userCourseModel, false )\r\n-\t\t\t\t);\r\n-\t\t\t\t$html_graduation = $userCourseTemplate->html_graduation( $userCourseModel );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_info_learning = [\r\n-\t\t\t\t'wrapper'               => '\u003Cdiv class=\"info-learning\">',\r\n-\t\t\t\t'message_lock'          => $userCourseTemplate->html_message_lock( $userCourseModel ),\r\n-\t\t\t\t'graduation'            => $html_graduation,\r\n-\t\t\t\t'progress'              => $userCourseTemplate->html_progress( $userCourseModel ),\r\n-\t\t\t\t'start_date'            => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"start-date\">%s: %s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t__( 'Start date', 'learnpress' ),\r\n-\t\t\t\t\t$userCourseTemplate->html_start_date_time( $userCourseModel, false )\r\n-\t\t\t\t),\r\n-\t\t\t\t'end_date'              => $html_end_date,\r\n-\t\t\t\t'count_items_completed' => $userCourseTemplate->html_count_items_completed( $userCourseModel ),\r\n-\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html_info_learning = Template::combine_components( $section_info_learning );\r\n-\t\t}\r\n-\r\n-\t\treturn $html_info_learning;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html button\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param UserModel|false $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.3\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_buttons( CourseModel $course, $user = false ): string {\r\n-\t\t$user_id = 0;\r\n-\t\tif ( $user instanceof UserModel ) {\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t}\r\n-\r\n-\t\t$userCourseModel         = UserCourseModel::find( $user_id, $course->get_id(), true );\r\n-\t\t$btn_continue_and_finish = [];\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t$userCourseTemplate      = UserCourseTemplate::instance();\r\n-\t\t\t$btn_continue_and_finish = [\r\n-\t\t\t\t'btn_continue' => $userCourseTemplate->html_btn_continue( $userCourseModel ),\r\n-\t\t\t\t'btn_finish'   => $userCourseTemplate->html_btn_finish( $userCourseModel ),\r\n-\t\t\t\t'btn_retake'   => $userCourseTemplate->html_btn_retake( $userCourseModel ),\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$section_buttons = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-right\u002Fbuttons',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"course-buttons\">',\r\n-\t\t\t\t'btn_contact'  => SingleCourseTemplate::instance()->html_btn_external( $course, $user ),\r\n-\t\t\t\t'btn_buy'      => SingleCourseTemplate::instance()->html_btn_purchase_course( $course, $user ),\r\n-\t\t\t\t'btn_enroll'   => SingleCourseTemplate::instance()->html_btn_enroll_course( $course, $user ),\r\n-\t\t\t\t'btn_learning' => Template::combine_components( $btn_continue_and_finish ),\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section_buttons );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Course Online.\n+ *\n+ * @since 4.2.7\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+class SingleCourseModernLayout {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var SingleCourseTemplate\n+\t *\u002F\n+\tpublic $singleCourseTemplate;\n+\n+\tpublic function init() {\n+\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\tadd_action(\n+\t\t\t'learn-press\u002Fsingle-course\u002Flayout',\n+\t\t\t[ $this, 'course_model_layout' ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Single course layout model\n+\t *\n+\t * @param $course\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function course_model_layout( $course ) {\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = UserModel::find( get_current_user_id(), true );\n+\n+\t\t\u002F\u002F Related courses\n+\t\tob_start();\n+\t\tdo_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', $course, 4 );\n+\t\t$html_courses_related = ob_get_clean();\n+\n+\t\t\u002F\u002F Global message\n+\t\tob_start();\n+\t\tlearn_press_show_message();\n+\t\t$global_message = ob_get_clean();\n+\n+\t\t$sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'               => '\u003Cdiv class=\"lp-single-course\">',\n+\t\t\t\t'section_header'        => $this->header_sections( $course, $user ),\n+\t\t\t\t'wrapper_container'     => '\u003Cdiv class=\"lp-content-area\">',\n+\t\t\t\t'wrapper_main'          => '\u003Cdiv class=\"lp-single-course-main\">',\n+\t\t\t\t'global_message'        => $global_message,\n+\t\t\t\t'section_left'          => $this->section_left( $course, $user ),\n+\t\t\t\t'section_right'         => $this->section_right( $course, $user ),\n+\t\t\t\t'wrapper_main_end'      => '\u003C\u002Fdiv>',\n+\t\t\t\t'related_courses'       => $html_courses_related,\n+\t\t\t\t'wrapper_container_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\techo Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * HTML header section\n+\t *\n+\t * @param $course\n+\t * @param $user\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function header_sections( $course, $user ): string {\n+\t\t$html_categories = $this->singleCourseTemplate->html_categories( $course );\n+\t\tif ( ! empty( $html_categories ) ) {\n+\t\t\t$html_categories = sprintf(\n+\t\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'in', 'learnpress' ) ),\n+\t\t\t\t$html_categories\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section_info_one = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Finfo-meta',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-single-course-info-one\">',\n+\t\t\t\t'author'      => '',\n+\t\t\t\t'last_update' => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"item-meta\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\tesc_html__( 'Last updated', 'learnpress' ),\n+\t\t\t\t\tesc_attr( get_post_modified_time( get_option( 'date_format' ), true ) )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\t\tif ( ! has_filter( 'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Finfo-meta' ) ) {\n+\t\t\t\u002F\u002F Do not use this hook, this hook only for handle hook without update from Addon, when handle on Addon, will remove this hook\n+\t\t\t$section_info_one = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-bar',\n+\t\t\t\t$section_info_one,\n+\t\t\t\t$course,\n+\t\t\t\t$user\n+\t\t\t);\n+\t\t}\n+\n+\t\t$html_instructor = sprintf(\n+\t\t\t'\u003Cdiv>%s %s\u003C\u002Fdiv>',\n+\t\t\tsprintf( '\u003Clabel>%s\u003C\u002Flabel>', __( 'by', 'learnpress' ) ),\n+\t\t\t$this->singleCourseTemplate->html_instructor( $course )\n+\t\t);\n+\n+\t\t$header_sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fheader\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper_header'              => '\u003Cdiv class=\"lp-single-course__header\">',\n+\t\t\t\t'wrapper_container'           => '\u003Cdiv class=\"lp-single-course__header__inner\">',\n+\t\t\t\t'breadcrumb'                  => Template::html_breadcrumb(),\n+\t\t\t\t'title'                       => $this->singleCourseTemplate->html_title( $course, 'h1' ),\n+\t\t\t\t'wrapper_instructor_cate'     => '\u003Cdiv class=\"course-instructor-category\">',\n+\t\t\t\t'instructor'                  => $html_instructor,\n+\t\t\t\t'category'                    => $html_categories,\n+\t\t\t\t'wrapper_instructor_cate_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'info_one'                    => Template::combine_components( $section_info_one ),\n+\t\t\t\t'wrapper_container_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_header_end'          => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\treturn Template::combine_components( $header_sections );\n+\t}\n+\n+\t\u002F**\n+\t * HTML left section\n+\t *\n+\t * @param $course\n+\t * @param $user\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function section_left( $course, $user ): string {\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection_left',\n+\t\t\t[\n+\t\t\t\t'wrapper'                => '\u003Cdiv class=\"lp-single-course-main__left\">',\n+\t\t\t\t'description'            => $this->singleCourseTemplate->html_description( $course ),\n+\t\t\t\t'features'               => $this->singleCourseTemplate->html_features( $course ),\n+\t\t\t\t'target'                 => $this->singleCourseTemplate->html_target( $course ),\n+\t\t\t\t'requirements'           => $this->singleCourseTemplate->html_requirements( $course ),\n+\t\t\t\t'curriculum'             => $this->singleCourseTemplate->html_curriculum( $course, $user ),\n+\t\t\t\t'material'               => $this->singleCourseTemplate->html_material( $course, $user ),\n+\t\t\t\t'faqs'                   => $this->singleCourseTemplate->html_faqs( $course ),\n+\t\t\t\t'instructor'             => $this->html_instructor_info( $course, $user ),\n+\t\t\t\t'featured_review_mobile' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\n+\t\t\t\t'comment'                => $this->singleCourseTemplate->html_comment( $course, $user ),\n+\t\t\t\t'sidebar_mobile'         => $this->singleCourseTemplate->html_sidebar( $course, [ 'lp_display_on' => 'lp-is-mobile' ] ),\n+\t\t\t\t'wrapper_end'            => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML right section\n+\t *\n+\t * @param $course\n+\t * @param $user\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function section_right( $course, $user ): string {\n+\t\t$user_id = 0;\n+\t\tif ( $user instanceof UserModel ) {\n+\t\t\t$user_id = $user->get_id();\n+\t\t}\n+\t\t$userCourseModel = UserCourseModel::find( $user_id, $course->get_id(), true );\n+\n+\t\t$data_info_meta = [\n+\t\t\t'student'  => [\n+\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>%s:', __( 'Student', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_count_student( $course ),\n+\t\t\t],\n+\t\t\t'lesson'   => [\n+\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-file-o\">\u003C\u002Fi>%s:', __( 'Lesson', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_count_item( $course, LP_LESSON_CPT ),\n+\t\t\t],\n+\t\t\t'duration' => [\n+\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-clock-o\">\u003C\u002Fi>%s:', __( 'Duration', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_duration( $course ),\n+\t\t\t],\n+\t\t\t'quiz'     => [\n+\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-puzzle-piece\">\u003C\u002Fi>%s:', __( 'Quiz', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_count_item( $course, LP_QUIZ_CPT ),\n+\t\t\t],\n+\t\t\t'level'    => [\n+\t\t\t\t'label' => sprintf( '\u003Ci class=\"lp-icon-signal\">\u003C\u002Fi>%s:', __( 'Level', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_level( $course ),\n+\t\t\t],\n+\t\t];\n+\n+\t\t$data_info_meta = apply_filters( 'learn-press\u002Fsingle-course\u002Fmodern\u002Finfo-meta', $data_info_meta, $course, $user );\n+\t\t$html_info_meta = '';\n+\t\tif ( ! empty( $data_info_meta ) ) {\n+\t\t\tforeach ( $data_info_meta as $info_meta ) {\n+\t\t\t\t$label              = $info_meta['label'];\n+\t\t\t\t$value              = $info_meta['value'];\n+\t\t\t\t$html_info_two_item = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"info-meta-item\">\n+\t\t\t\t\t\t\u003Cspan class=\"info-meta-left\">%s\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\t$label,\n+\t\t\t\t\t$value\n+\t\t\t\t);\n+\t\t\t\t$html_info_meta    .= $html_info_two_item;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section_info_meta = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-right\u002Finfo-meta',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"info-metas\">',\n+\t\t\t\t'featured'    => $this->singleCourseTemplate->html_featured( $course ),\n+\t\t\t\t'meta'        => $html_info_meta,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\t$html_price = '';\n+\t\tif ( ! $userCourseModel || $user_id === 0\n+\t\t\t|| $userCourseModel->get_status() === UserItemModel::STATUS_CANCEL ) {\n+\t\t\t$html_price = $this->singleCourseTemplate->html_price( $course );\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection_right',\n+\t\t\t[\n+\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-single-course-main__right\">',\n+\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-course-main__right__inner\">',\n+\t\t\t\t'image'             => $this->singleCourseTemplate->html_image( $course ),\n+\t\t\t\t'price'             => $html_price,\n+\t\t\t\t'info_learning'     => $this->html_info_learning( $course, $user ),\n+\t\t\t\t\u002F\u002F'sale_discount'       => $this->singleCourseTemplate->html_sale_discount( $course ), to do\n+\t\t\t\t'metas'             => Template::combine_components( $section_info_meta ),\n+\t\t\t\t'buttons'           => $this->html_buttons( $course, $user ),\n+\t\t\t\t'share'             => $this->html_share( $course ),\n+\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\n+\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course, [ 'lp_display_on' => 'lp-is-pc' ] ),\n+\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML share social.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_share( CourseModel $courseModel, array $data = [] ): string {\n+\t\t$list_socials = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share',\n+\t\t\t[\n+\t\t\t\t'facebook'  => [\n+\t\t\t\t\t'label' => esc_html__( 'Facebook', 'learnpress' ),\n+\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-facebook\">\u003C\u002Fi>',\n+\t\t\t\t\t'url'   => sprintf(\n+\t\t\t\t\t\t'https:\u002F\u002Fwww.facebook.com\u002Fsharer.php?u=%s',\n+\t\t\t\t\t\turlencode( $courseModel->get_permalink() )\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t'twitter'   => [\n+\t\t\t\t\t'label' => esc_html__( 'Twitter', 'learnpress' ),\n+\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-twitter\">\u003C\u002Fi>',\n+\t\t\t\t\t'url'   => sprintf(\n+\t\t\t\t\t\t'https:\u002F\u002Ftwitter.com\u002Fshare?url=%1$s&amp;text=%2$s',\n+\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\n+\t\t\t\t\t\trawurlencode( esc_attr( $courseModel->get_title() ) )\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t'pinterest' => [\n+\t\t\t\t\t'label' => esc_html__( 'Pinterest', 'learnpress' ),\n+\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-pinterest-p\">\u003C\u002Fi>',\n+\t\t\t\t\t'url'   => sprintf(\n+\t\t\t\t\t\t'https:\u002F\u002Fpinterest.com\u002Fpin\u002Fcreate\u002Fbutton\u002F?url=%1$s&amp;description=%2$s&amp;media=%3$s',\n+\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\n+\t\t\t\t\t\trawurlencode( esc_attr( $courseModel->get_short_description() ) ),\n+\t\t\t\t\t\turlencode( $courseModel->get_image_url() )\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t\t'linkedin'  => [\n+\t\t\t\t\t'label' => esc_html__( 'Linkedin', 'learnpress' ),\n+\t\t\t\t\t'icon'  => '\u003Ci class=\"lp-icon-linkedin\">\u003C\u002Fi>',\n+\t\t\t\t\t'url'   => sprintf(\n+\t\t\t\t\t\t'https:\u002F\u002Fwww.linkedin.com\u002FshareArticle?mini=true&url=%1$s&title=%2$s&summary=&source=%3$s',\n+\t\t\t\t\t\turlencode( $courseModel->get_permalink() ),\n+\t\t\t\t\t\tesc_attr( $courseModel->get_title() ),\n+\t\t\t\t\t\tesc_attr( $courseModel->get_short_description() )\n+\t\t\t\t\t),\n+\t\t\t\t],\n+\t\t\t]\n+\t\t);\n+\n+\t\t$html_social = '';\n+\t\tif ( ! empty( $list_socials ) ) {\n+\t\t\tforeach ( $list_socials as $key => $social ) {\n+\t\t\t\t$html_social .= sprintf(\n+\t\t\t\t\t'\u003Cli>\n+\t\t\t\t\t\t\u003Ca target=\"_blank\" href=\"%s\" title=\"%s\">%s\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fli>',\n+\t\t\t\t\t$social['url'],\n+\t\t\t\t\t$social['label'],\n+\t\t\t\t\t$social['icon'],\n+\t\t\t\t\t$social['label']\n+\t\t\t\t);\n+\t\t\t}\n+\t\t} else {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$social_media = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share\u002Ful',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cul class=\"lp-social-media\">',\n+\t\t\t\t'content'     => $html_social,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t\t]\n+\t\t);\n+\n+\t\t$clipboard = [\n+\t\t\t'wrapper'     => '\u003Cdiv class=\"clipboard-post\">',\n+\t\t\t'input'       => sprintf( '\u003Cinput class=\"clipboard-value\" type=\"text\" value=\"%s\">', $courseModel->get_permalink() ),\n+\t\t\t'button'      => sprintf(\n+\t\t\t\t'\u003Cbutton class=\"btn-clipboard\" data-copied=\"%s\">%s\u003Cspan class=\"tooltip\">%s\u003C\u002Fspan>\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Copied!', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Copy', 'learnpress' ),\n+\t\t\t\tesc_html__( 'Copy to Clipboard', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fsocial-share\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"social-swapper social-share-toggle\">',\n+\t\t\t\t'toggle'                    => '\u003Cdiv class=\"share-toggle-icon\">',\n+\t\t\t\t'toggle_icon'               => sprintf( '\u003Ci class=\"lp-icon-share-alt\">\u003C\u002Fi>\u003Clabel class=\"share-label\">%s\u003C\u002Flabel>', __( 'Share', 'learnpress' ) ),\n+\t\t\t\t'toggle_end'                => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_content'           => '\u003Cdiv class=\"wrapper-content-widget\">',\n+\t\t\t\t'wrapper_content_inner'     => '\u003Cdiv class=\"content-widget-social-share\">',\n+\t\t\t\t'clipboard'                 => Template::combine_components( $clipboard ),\n+\t\t\t\t'social'                    => Template::combine_components( $social_media ),\n+\t\t\t\t'wrapper_content_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_content_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$data\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html instructor info\n+\t *\n+\t * @param CourseModel $course\n+\t * @param UserModel|false $user\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_instructor_info( CourseModel $course, $user ): string {\n+\t\t$html_instructor          = '';\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\t\t$author                   = $course->get_author_model();\n+\n+\t\tif ( ! $author ) {\n+\t\t\treturn $html_instructor;\n+\t\t}\n+\n+\t\t$html_instructor_image    = sprintf(\n+\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t$author->get_url_instructor(),\n+\t\t\t$author->get_display_name(),\n+\t\t\t$singleInstructorTemplate->html_avatar( $author )\n+\t\t);\n+\t\t$section_instructor_meta  = [\n+\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\n+\t\t\t'count_students' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\n+\t\t\t),\n+\t\t\t'count_courses'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\n+\t\t\t),\n+\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\t\t$section_instructor_right = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor\u002Fright',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t'name'        => sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t$author->get_url_instructor(),\n+\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\n+\t\t\t\t),\n+\t\t\t\t'meta'        => Template::combine_components( $section_instructor_meta ),\n+\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\n+\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\t\t$section_instructor       = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor',\n+\t\t\t[\n+\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t'header'           => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'Instructor', 'learnpress' ) ),\n+\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\n+\t\t\t\t'image'            => $html_instructor_image,\n+\t\t\t\t'instructor_right' => Template::combine_components( $section_instructor_right ),\n+\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\tif ( ! has_filter( 'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-instructor' ) ) {\n+\t\t\t\u002F\u002F Do not use this hook, this hook only for handle hook without update from Addon, when handle on Addon, will remove this hook\n+\t\t\t$section_instructor = apply_filters( 'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor', $section_instructor, $course, $user );\n+\t\t}\n+\n+\t\treturn Template::combine_components( $section_instructor );\n+\t}\n+\n+\t\u002F**\n+\t * Get html course info learning\n+\t *\n+\t * @param CourseModel $course\n+\t * @param UserModel|false $user\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_info_learning( CourseModel $course, $user = false ): string {\n+\t\t$html_info_learning = '';\n+\t\t$user_id            = 0;\n+\t\tif ( $user instanceof UserModel ) {\n+\t\t\t$user_id = $user->get_id();\n+\t\t} else {\n+\t\t\treturn $html_info_learning;\n+\t\t}\n+\n+\t\t$userCourseModel = UserCourseModel::find( $user_id, $course->get_id(), true );\n+\t\tif ( $userCourseModel instanceof UserCourseModel\n+\t\t\t&& $userCourseModel->get_status() !== UserItemModel::STATUS_CANCEL\n+\t\t\t&& $userCourseModel->get_status() !== UserCourseModel::STATUS_PURCHASED ) {\n+\t\t\t$userCourseTemplate = UserCourseTemplate::instance();\n+\t\t\t$html_end_date      = '';\n+\t\t\t$html_graduation    = '';\n+\n+\t\t\tif ( $userCourseModel->has_finished() ) {\n+\t\t\t\t$html_end_date   = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"end-date\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t__( 'End date', 'learnpress' ),\n+\t\t\t\t\t$userCourseTemplate->html_end_date_time( $userCourseModel, false )\n+\t\t\t\t);\n+\t\t\t\t$html_graduation = $userCourseTemplate->html_graduation( $userCourseModel );\n+\t\t\t}\n+\n+\t\t\t$section_info_learning = [\n+\t\t\t\t'wrapper'               => '\u003Cdiv class=\"info-learning\">',\n+\t\t\t\t'message_lock'          => $userCourseTemplate->html_message_lock( $userCourseModel ),\n+\t\t\t\t'graduation'            => $html_graduation,\n+\t\t\t\t'progress'              => $userCourseTemplate->html_progress( $userCourseModel ),\n+\t\t\t\t'start_date'            => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"start-date\">%s: %s\u003C\u002Fdiv>',\n+\t\t\t\t\t__( 'Start date', 'learnpress' ),\n+\t\t\t\t\t$userCourseTemplate->html_start_date_time( $userCourseModel, false )\n+\t\t\t\t),\n+\t\t\t\t'end_date'              => $html_end_date,\n+\t\t\t\t'count_items_completed' => $userCourseTemplate->html_count_items_completed( $userCourseModel ),\n+\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html_info_learning = Template::combine_components( $section_info_learning );\n+\t\t}\n+\n+\t\treturn $html_info_learning;\n+\t}\n+\n+\t\u002F**\n+\t * Get html button\n+\t *\n+\t * @param CourseModel $course\n+\t * @param UserModel|false $user\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.3\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_buttons( CourseModel $course, $user = false ): string {\n+\t\t$user_id = 0;\n+\t\tif ( $user instanceof UserModel ) {\n+\t\t\t$user_id = $user->get_id();\n+\t\t}\n+\n+\t\t$userCourseModel         = UserCourseModel::find( $user_id, $course->get_id(), true );\n+\t\t$btn_continue_and_finish = [];\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t$userCourseTemplate      = UserCourseTemplate::instance();\n+\t\t\t$btn_continue_and_finish = [\n+\t\t\t\t'btn_continue' => $userCourseTemplate->html_btn_continue( $userCourseModel ),\n+\t\t\t\t'btn_finish'   => $userCourseTemplate->html_btn_finish( $userCourseModel ),\n+\t\t\t\t'btn_retake'   => $userCourseTemplate->html_btn_retake( $userCourseModel ),\n+\t\t\t];\n+\t\t}\n+\n+\t\t$section_buttons = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fmodern\u002Fsection-right\u002Fbuttons',\n+\t\t\t[\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"course-buttons\">',\n+\t\t\t\t'btn_contact'  => SingleCourseTemplate::instance()->html_btn_external( $course, $user ),\n+\t\t\t\t'btn_buy'      => SingleCourseTemplate::instance()->html_btn_purchase_course( $course, $user ),\n+\t\t\t\t'btn_enroll'   => SingleCourseTemplate::instance()->html_btn_enroll_course( $course, $user ),\n+\t\t\t\t'btn_learning' => Template::combine_components( $btn_continue_and_finish ),\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section_buttons );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,392 +1,392 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Course Offline.\r\n- *\r\n- * @since 4.2.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LP_Course;\r\n-use LP_Datetime;\r\n-use Throwable;\r\n-\r\n-class SingleCourseOfflineTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var SingleCourseTemplate\r\n-\t *\u002F\r\n-\tpublic $singleCourseTemplate;\r\n-\r\n-\tpublic function init() {\r\n-\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\tadd_action(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Flayout',\r\n-\t\t\t[ $this, 'course_offline_layout' ]\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Offline course layout\r\n-\t *\r\n-\t * @param $course\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function course_offline_layout( $course ) {\r\n-\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $course->is_offline() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\u002F\u002F Author\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\t\t$author                   = $course->get_author_model();\r\n-\t\t$html_author              = '';\r\n-\t\tif ( $author ) {\r\n-\t\t\t$html_author = sprintf(\r\n-\t\t\t\t'%s %s',\r\n-\t\t\t\t__( 'By', 'learnpress' ),\r\n-\t\t\t\tsprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $author->get_url_instructor(), $singleInstructorTemplate->html_display_name( $author ) )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t\u002F\u002F End author\r\n-\r\n-\t\t\u002F\u002F Instructor\r\n-\t\t$html_instructor = '';\r\n-\t\tif ( $author ) {\r\n-\t\t\t$html_instructor_image   = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$author->get_url_instructor(),\r\n-\t\t\t\t$author->get_display_name(),\r\n-\t\t\t\t$singleInstructorTemplate->html_avatar( $author )\r\n-\t\t\t);\r\n-\t\t\t$section_instructor_meta = [\r\n-\t\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\r\n-\t\t\t\t'count_students' => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\r\n-\t\t\t\t),\r\n-\t\t\t\t'count_courses'  => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_instructor_meta    = Template::combine_components( $section_instructor_meta );\r\n-\r\n-\t\t\t$section_instructor_right = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor\u002Fright',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t\t'name'        => sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$author->get_url_instructor(),\r\n-\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'meta'        => $html_instructor_meta,\r\n-\t\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\r\n-\t\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\t\t\t$html_instructor_right    = Template::combine_components( $section_instructor_right );\r\n-\t\t\t$section_instructor       = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\r\n-\t\t\t\t\t'header'           => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'Instructor', 'learnpress' ) ),\r\n-\t\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\r\n-\t\t\t\t\t'image'            => $html_instructor_image,\r\n-\t\t\t\t\t'instructor_right' => $html_instructor_right,\r\n-\t\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\t\t\t$html_instructor          = Template::combine_components( $section_instructor );\r\n-\t\t}\r\n-\t\t\u002F\u002F End instructor\r\n-\r\n-\t\t\u002F\u002F Info one\r\n-\t\t$html_address     = $this->html_address( $course );\r\n-\t\t$section_info_one = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-bar',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-single-course-offline-info-one\">',\r\n-\t\t\t\t'author'      => sprintf( '\u003Cdiv class=\"item-meta\">%s\u003C\u002Fdiv>', $html_author ),\r\n-\t\t\t\t'address'     => ! empty( $html_address ) ? sprintf( '\u003Cdiv class=\"item-meta\">%s\u003C\u002Fdiv>', $html_address ) : '',\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Section left\r\n-\t\t$section_left = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-left',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'                => '\u003Cdiv class=\"lp-single-offline-course__left\">',\r\n-\t\t\t\t'breadcrumb'             => Template::html_breadcrumb(),\r\n-\t\t\t\t'title'                  => $this->singleCourseTemplate->html_title( $course, 'h1' ),\r\n-\t\t\t\t'info_one'               => Template::combine_components( $section_info_one ),\r\n-\t\t\t\t'image'                  => $this->singleCourseTemplate->html_image( $course, [ 'size' => 'full' ] ),\r\n-\t\t\t\t'info_main_mobile'       => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\r\n-\t\t\t\t'description'            => $this->singleCourseTemplate->html_description( $course ),\r\n-\t\t\t\t'features'               => $this->singleCourseTemplate->html_features( $course ),\r\n-\t\t\t\t'target'                 => $this->singleCourseTemplate->html_target( $course ),\r\n-\t\t\t\t'requirements'           => $this->singleCourseTemplate->html_requirements( $course ),\r\n-\t\t\t\t'material'               => $this->singleCourseTemplate->html_material( $course ),\r\n-\t\t\t\t'faqs'                   => $this->singleCourseTemplate->html_faqs( $course ),\r\n-\t\t\t\t'instructor'             => $html_instructor,\r\n-\t\t\t\t'featured_review_mobile' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\r\n-\t\t\t\t'wrapper_end'            => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F Section right\r\n-\t\t$section_right = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-single-offline-course__right\">',\r\n-\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-offline-course__right__sticky\">',\r\n-\t\t\t\t'info_main'         => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\r\n-\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\r\n-\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course ),\r\n-\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$user\r\n-\t\t);\r\n-\t\t\u002F\u002F End section right\r\n-\r\n-\t\t\u002F\u002F Related courses\r\n-\t\tob_start();\r\n-\t\tdo_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', $course, 4 );\r\n-\t\t$html_courses_related = ob_get_clean();\r\n-\t\t\u002F\u002F End related courses\r\n-\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper_container'     => '\u003Cdiv class=\"lp-content-area\">',\r\n-\t\t\t\t'wrapper'               => '\u003Cdiv class=\"lp-single-course lp-single-offline-course\">',\r\n-\t\t\t\t'wrapper_main'          => '\u003Cdiv class=\"lp-single-offline-course-main\">',\r\n-\t\t\t\t'section_left'          => Template::combine_components( $section_left ),\r\n-\t\t\t\t'section_right'         => Template::combine_components( $section_right ),\r\n-\t\t\t\t'wrapper_main_end'      => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'related_courses'       => $html_courses_related,\r\n-\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_container_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\techo Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render html info main\r\n-\t * Price, deliver type, capacity, level, duration, lessons\r\n-\t * Buttons: Contact, Buy, Enroll\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function render_html_info_main( CourseModel $courseModel, $userModel, array $data = [] ): string {\r\n-\t\t\u002F\u002F Info two\r\n-\t\t$data_info_meta = [\r\n-\t\t\t'price'        => [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"currency\">%s\u003C\u002Fspan> %s', learn_press_get_currency_symbol(), __( 'Price', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_price( $courseModel ),\r\n-\t\t\t],\r\n-\t\t\t'deliver_type' => [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-bookmark-o\">\u003C\u002Fspan> %s', __( 'Delivery type', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->html_deliver_type( $courseModel ),\r\n-\t\t\t],\r\n-\t\t\t'capacity'     => [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-students\">\u003C\u002Fspan> %s', __( 'Capacity', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_capacity( $courseModel ),\r\n-\t\t\t],\r\n-\t\t\t'level'        => [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-signal\">\u003C\u002Fspan> %s', __( 'Level', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_level( $courseModel ),\r\n-\t\t\t],\r\n-\t\t\t'duration'     => [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-clock-o\">\u003C\u002Fspan> %s', __( 'Duration', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $this->singleCourseTemplate->html_duration( $courseModel ),\r\n-\t\t\t],\r\n-\t\t];\r\n-\r\n-\t\t$html_lesson = $this->html_lesson_info( $courseModel );\r\n-\t\tif ( ! empty( $html_lesson ) ) {\r\n-\t\t\t$data_info_meta['lessons'] = [\r\n-\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-copy\">\u003C\u002Fspan> %s', __( 'Lessons', 'learnpress' ) ),\r\n-\t\t\t\t'value' => $html_lesson,\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$data_info_meta = apply_filters( 'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-meta', $data_info_meta, $courseModel, $userModel );\r\n-\t\t$html_info_meta = '';\r\n-\t\tif ( ! empty( $data_info_meta ) ) {\r\n-\t\t\tforeach ( $data_info_meta as $info_meta ) {\r\n-\t\t\t\t$label              = $info_meta['label'];\r\n-\t\t\t\t$value              = $info_meta['value'];\r\n-\t\t\t\t$html_info_two_item = sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"info-meta-item\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"info-meta-left\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t\t$label,\r\n-\t\t\t\t\t$value\r\n-\t\t\t\t);\r\n-\t\t\t\t$html_info_meta    .= $html_info_two_item;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section_buttons = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right\u002Finfo-meta\u002Fbuttons',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-buttons\">',\r\n-\t\t\t\t'btn_contact' => $this->singleCourseTemplate->html_btn_external( $courseModel, $userModel ),\r\n-\t\t\t\t'btn_buy'     => $this->singleCourseTemplate->html_btn_purchase_course( $courseModel, $userModel ),\r\n-\t\t\t\t'btn_enroll'  => $this->singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel ),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel\r\n-\t\t);\r\n-\t\t$html_buttons    = Template::combine_components( $section_buttons );\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right\u002Finfo-meta',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"info-metas %s\">',\r\n-\t\t\t\t\t$data['lp_display_on'] ?? ''\r\n-\t\t\t\t),\r\n-\t\t\t\t'meta'        => $html_info_meta,\r\n-\t\t\t\t'buttons'     => $html_buttons,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Html lesson info\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param bool $show_label\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_lesson_info( CourseModel $course, bool $show_label = false ): string {\r\n-\t\tif ( ! $course->is_offline() ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$lesson_count = $course->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_LESSON_COUNT, 10 );\r\n-\r\n-\t\tif ( ! $lesson_count ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html = sprintf(\r\n-\t\t\t'\u003Cspan class=\"course-count-lesson\">%s %s\u003C\u002Fspan>',\r\n-\t\t\t$lesson_count,\r\n-\t\t\t$show_label ? __( 'lessons', 'learnpress' ) : ''\r\n-\t\t);\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html address of course offline\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_address( CourseModel $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $course->is_offline() ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$address = $course->get_meta_value_by_key( CoursePostModel::META_KEY_ADDRESS, '' );\r\n-\t\t\tif ( empty( $address ) ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'\u003Cspan class=\"course-address\">' => '\u003C\u002Fspan>',\r\n-\t\t\t];\r\n-\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $address );\r\n-\t\t\tapply_filters( 'learn-press\u002Fsingle-course\u002Fhtml-address', $content, $course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get deliver type\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_deliver_type( CourseModel $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\tif ( ! $course->is_offline() ) {\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cspan class=\"course-deliver-type\">' => '\u003C\u002Fspan>',\r\n-\t\t];\r\n-\r\n-\t\t$deliver_type_options = Config::instance()->get( 'course-deliver-type' );\r\n-\t\t$key                  = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DELIVER, 'private_1_1' );\r\n-\t\t$content              = $deliver_type_options[ $key ] ?? '';\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Course Offline.\n+ *\n+ * @since 4.2.7\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LP_Course;\n+use LP_Datetime;\n+use Throwable;\n+\n+class SingleCourseOfflineTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var SingleCourseTemplate\n+\t *\u002F\n+\tpublic $singleCourseTemplate;\n+\n+\tpublic function init() {\n+\t\t$this->singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\tadd_action(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Flayout',\n+\t\t\t[ $this, 'course_offline_layout' ]\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Offline course layout\n+\t *\n+\t * @param $course\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function course_offline_layout( $course ) {\n+\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! $course->is_offline() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = UserModel::find( get_current_user_id(), true );\n+\n+\t\t\u002F\u002F Author\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\t\t$author                   = $course->get_author_model();\n+\t\t$html_author              = '';\n+\t\tif ( $author ) {\n+\t\t\t$html_author = sprintf(\n+\t\t\t\t'%s %s',\n+\t\t\t\t__( 'By', 'learnpress' ),\n+\t\t\t\tsprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $author->get_url_instructor(), $singleInstructorTemplate->html_display_name( $author ) )\n+\t\t\t);\n+\t\t}\n+\t\t\u002F\u002F End author\n+\n+\t\t\u002F\u002F Instructor\n+\t\t$html_instructor = '';\n+\t\tif ( $author ) {\n+\t\t\t$html_instructor_image   = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\" title=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t$author->get_url_instructor(),\n+\t\t\t\t$author->get_display_name(),\n+\t\t\t\t$singleInstructorTemplate->html_avatar( $author )\n+\t\t\t);\n+\t\t\t$section_instructor_meta = [\n+\t\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\n+\t\t\t\t'count_students' => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$singleInstructorTemplate->html_count_students( $author )\n+\t\t\t\t),\n+\t\t\t\t'count_courses'  => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\t$singleInstructorTemplate->html_count_courses( $author )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_instructor_meta    = Template::combine_components( $section_instructor_meta );\n+\n+\t\t\t$section_instructor_right = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor\u002Fright',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t\t'name'        => sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t$author->get_url_instructor(),\n+\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $author )\n+\t\t\t\t\t),\n+\t\t\t\t\t'meta'        => $html_instructor_meta,\n+\t\t\t\t\t'description' => $singleInstructorTemplate->html_description( $author ),\n+\t\t\t\t\t'social'      => $singleInstructorTemplate->html_social( $author ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$user\n+\t\t\t);\n+\t\t\t$html_instructor_right    = Template::combine_components( $section_instructor_right );\n+\t\t\t$section_instructor       = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-instructor',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'          => '\u003Cdiv class=\"lp-section-instructor\">',\n+\t\t\t\t\t'header'           => sprintf( '\u003Ch3 class=\"section-title\">%s\u003C\u002Fh3>', __( 'Instructor', 'learnpress' ) ),\n+\t\t\t\t\t'wrapper_info'     => '\u003Cdiv class=\"lp-instructor-info\">',\n+\t\t\t\t\t'image'            => $html_instructor_image,\n+\t\t\t\t\t'instructor_right' => $html_instructor_right,\n+\t\t\t\t\t'wrapper_info_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$user\n+\t\t\t);\n+\t\t\t$html_instructor          = Template::combine_components( $section_instructor );\n+\t\t}\n+\t\t\u002F\u002F End instructor\n+\n+\t\t\u002F\u002F Info one\n+\t\t$html_address     = $this->html_address( $course );\n+\t\t$section_info_one = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-bar',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-single-course-offline-info-one\">',\n+\t\t\t\t'author'      => sprintf( '\u003Cdiv class=\"item-meta\">%s\u003C\u002Fdiv>', $html_author ),\n+\t\t\t\t'address'     => ! empty( $html_address ) ? sprintf( '\u003Cdiv class=\"item-meta\">%s\u003C\u002Fdiv>', $html_address ) : '',\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\t\u002F\u002F Section left\n+\t\t$section_left = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-left',\n+\t\t\t[\n+\t\t\t\t'wrapper'                => '\u003Cdiv class=\"lp-single-offline-course__left\">',\n+\t\t\t\t'breadcrumb'             => Template::html_breadcrumb(),\n+\t\t\t\t'title'                  => $this->singleCourseTemplate->html_title( $course, 'h1' ),\n+\t\t\t\t'info_one'               => Template::combine_components( $section_info_one ),\n+\t\t\t\t'image'                  => $this->singleCourseTemplate->html_image( $course, [ 'size' => 'full' ] ),\n+\t\t\t\t'info_main_mobile'       => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\n+\t\t\t\t'description'            => $this->singleCourseTemplate->html_description( $course ),\n+\t\t\t\t'features'               => $this->singleCourseTemplate->html_features( $course ),\n+\t\t\t\t'target'                 => $this->singleCourseTemplate->html_target( $course ),\n+\t\t\t\t'requirements'           => $this->singleCourseTemplate->html_requirements( $course ),\n+\t\t\t\t'material'               => $this->singleCourseTemplate->html_material( $course ),\n+\t\t\t\t'faqs'                   => $this->singleCourseTemplate->html_faqs( $course ),\n+\t\t\t\t'instructor'             => $html_instructor,\n+\t\t\t\t'featured_review_mobile' => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-mobile' ] ),\n+\t\t\t\t'wrapper_end'            => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\n+\t\t\u002F\u002F Section right\n+\t\t$section_right = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right',\n+\t\t\t[\n+\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-single-offline-course__right\">',\n+\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-offline-course__right__sticky\">',\n+\t\t\t\t'info_main'         => $this->render_html_info_main( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\n+\t\t\t\t'featured_review'   => $this->singleCourseTemplate->html_feature_review( $course, $user, [ 'lp_display_on' => 'lp-is-pc' ] ),\n+\t\t\t\t'sidebar'           => $this->singleCourseTemplate->html_sidebar( $course ),\n+\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$user\n+\t\t);\n+\t\t\u002F\u002F End section right\n+\n+\t\t\u002F\u002F Related courses\n+\t\tob_start();\n+\t\tdo_action( 'learn-press\u002Fsingle-course\u002Fcourses-related\u002Flayout', $course, 4 );\n+\t\t$html_courses_related = ob_get_clean();\n+\t\t\u002F\u002F End related courses\n+\n+\t\t$sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper_container'     => '\u003Cdiv class=\"lp-content-area\">',\n+\t\t\t\t'wrapper'               => '\u003Cdiv class=\"lp-single-course lp-single-offline-course\">',\n+\t\t\t\t'wrapper_main'          => '\u003Cdiv class=\"lp-single-offline-course-main\">',\n+\t\t\t\t'section_left'          => Template::combine_components( $section_left ),\n+\t\t\t\t'section_right'         => Template::combine_components( $section_right ),\n+\t\t\t\t'wrapper_main_end'      => '\u003C\u002Fdiv>',\n+\t\t\t\t'related_courses'       => $html_courses_related,\n+\t\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_container_end' => '\u003C\u002Fdiv>',\n+\t\t\t]\n+\t\t);\n+\n+\t\techo Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * Render html info main\n+\t * Price, deliver type, capacity, level, duration, lessons\n+\t * Buttons: Contact, Buy, Enroll\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function render_html_info_main( CourseModel $courseModel, $userModel, array $data = [] ): string {\n+\t\t\u002F\u002F Info two\n+\t\t$data_info_meta = [\n+\t\t\t'price'        => [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"currency\">%s\u003C\u002Fspan> %s', learn_press_get_currency_symbol(), __( 'Price', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_price( $courseModel ),\n+\t\t\t],\n+\t\t\t'deliver_type' => [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-bookmark-o\">\u003C\u002Fspan> %s', __( 'Delivery type', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->html_deliver_type( $courseModel ),\n+\t\t\t],\n+\t\t\t'capacity'     => [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-students\">\u003C\u002Fspan> %s', __( 'Capacity', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_capacity( $courseModel ),\n+\t\t\t],\n+\t\t\t'level'        => [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-signal\">\u003C\u002Fspan> %s', __( 'Level', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_level( $courseModel ),\n+\t\t\t],\n+\t\t\t'duration'     => [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-clock-o\">\u003C\u002Fspan> %s', __( 'Duration', 'learnpress' ) ),\n+\t\t\t\t'value' => $this->singleCourseTemplate->html_duration( $courseModel ),\n+\t\t\t],\n+\t\t];\n+\n+\t\t$html_lesson = $this->html_lesson_info( $courseModel );\n+\t\tif ( ! empty( $html_lesson ) ) {\n+\t\t\t$data_info_meta['lessons'] = [\n+\t\t\t\t'label' => sprintf( '\u003Cspan class=\"lp-icon-copy\">\u003C\u002Fspan> %s', __( 'Lessons', 'learnpress' ) ),\n+\t\t\t\t'value' => $html_lesson,\n+\t\t\t];\n+\t\t}\n+\n+\t\t$data_info_meta = apply_filters( 'learn-press\u002Fsingle-course\u002Foffline\u002Finfo-meta', $data_info_meta, $courseModel, $userModel );\n+\t\t$html_info_meta = '';\n+\t\tif ( ! empty( $data_info_meta ) ) {\n+\t\t\tforeach ( $data_info_meta as $info_meta ) {\n+\t\t\t\t$label              = $info_meta['label'];\n+\t\t\t\t$value              = $info_meta['value'];\n+\t\t\t\t$html_info_two_item = sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"info-meta-item\">\n+\t\t\t\t\t\t\u003Cspan class=\"info-meta-left\">%s\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003Cspan class=\"info-meta-right\">%s\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t\t$label,\n+\t\t\t\t\t$value\n+\t\t\t\t);\n+\t\t\t\t$html_info_meta    .= $html_info_two_item;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section_buttons = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right\u002Finfo-meta\u002Fbuttons',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-buttons\">',\n+\t\t\t\t'btn_contact' => $this->singleCourseTemplate->html_btn_external( $courseModel, $userModel ),\n+\t\t\t\t'btn_buy'     => $this->singleCourseTemplate->html_btn_purchase_course( $courseModel, $userModel ),\n+\t\t\t\t'btn_enroll'  => $this->singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel ),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel\n+\t\t);\n+\t\t$html_buttons    = Template::combine_components( $section_buttons );\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Foffline\u002Fsection-right\u002Finfo-meta',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"info-metas %s\">',\n+\t\t\t\t\t$data['lp_display_on'] ?? ''\n+\t\t\t\t),\n+\t\t\t\t'meta'        => $html_info_meta,\n+\t\t\t\t'buttons'     => $html_buttons,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Html lesson info\n+\t *\n+\t * @param CourseModel $course\n+\t * @param bool $show_label\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_lesson_info( CourseModel $course, bool $show_label = false ): string {\n+\t\tif ( ! $course->is_offline() ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$lesson_count = $course->get_meta_value_by_key( CoursePostModel::META_KEY_OFFLINE_LESSON_COUNT, 10 );\n+\n+\t\tif ( ! $lesson_count ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html = sprintf(\n+\t\t\t'\u003Cspan class=\"course-count-lesson\">%s %s\u003C\u002Fspan>',\n+\t\t\t$lesson_count,\n+\t\t\t$show_label ? __( 'lessons', 'learnpress' ) : ''\n+\t\t);\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html address of course offline\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_address( CourseModel $course ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( ! $course->is_offline() ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\t$address = $course->get_meta_value_by_key( CoursePostModel::META_KEY_ADDRESS, '' );\n+\t\t\tif ( empty( $address ) ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'\u003Cspan class=\"course-address\">' => '\u003C\u002Fspan>',\n+\t\t\t];\n+\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $address );\n+\t\t\tapply_filters( 'learn-press\u002Fsingle-course\u002Fhtml-address', $content, $course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get deliver type\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_deliver_type( CourseModel $course ): string {\n+\t\t$content = '';\n+\n+\t\tif ( ! $course->is_offline() ) {\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cspan class=\"course-deliver-type\">' => '\u003C\u002Fspan>',\n+\t\t];\n+\n+\t\t$deliver_type_options = Config::instance()->get( 'course-deliver-type' );\n+\t\t$key                  = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DELIVER, 'private_1_1' );\n+\t\t$content              = $deliver_type_options[ $key ] ?? '';\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1939 +1,1951 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Course.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.5\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Course;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\LessonPostModel;\r\n-use LearnPress\\Models\\PostModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LearnPress\\TemplateHooks\\UserTemplate;\r\n-use LearnPressAssignment\\Models\\AssignmentPostModel;\r\n-use LP_Checkout;\r\n-use LP_Course;\r\n-use LP_Course_Item;\r\n-use LP_Datetime;\r\n-use LP_Debug;\r\n-use LP_Global;\r\n-use LP_Material_Files_DB;\r\n-use LP_Settings;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class SingleCourseTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * @var false|LessonPostModel|QuizPostModel|PostModel|mixed $currentItemModel\r\n-\t *\u002F\r\n-\tpublic $currentItemModel = false;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t * @use self::render_html_comments\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_html_comments';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display title course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t * @param string $tag_html\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_title( $course, string $tag_html = 'span' ): string {\r\n-\t\t$tag_html     = esc_attr( sanitize_key( $tag_html ) );\r\n-\t\t$html_wrapper = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-title',\r\n-\t\t\t[\r\n-\t\t\t\t\"\u003C{$tag_html} class='course-title'>\" => \"\u003C\u002F{$tag_html}>\",\r\n-\t\t\t],\r\n-\t\t\t$course\r\n-\t\t);\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $course->get_title() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get short description course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t * @param int $number_words\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_short_description( $course, int $number_words = 0 ): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cp class=\"course-short-description\">' => '\u003C\u002Fp>',\r\n-\t\t];\r\n-\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\t$short_description = $course->get_short_description();\r\n-\t\tif ( empty( $short_description ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( $number_words > 0 ) {\r\n-\t\t\t$short_description = wp_trim_words( $short_description, $number_words, '...' );\r\n-\t\t}\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $short_description );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get description course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_description( $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$content = $course->get_data( 'description' );\r\n-\t\t} elseif ( $course instanceof CourseModel ) {\r\n-\t\t\t$content = $course->get_description();\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-description',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-description\">',\r\n-\t\t\t\t'content'     => $content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display categories course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t * @param array $setting\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_categories( $course, array $setting = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $course ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$cats = $course->get_categories();\r\n-\t\t\tif ( empty( $cats ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$is_link          = $setting['is_link'] ?? true;\r\n-\t\t\t$attribute_target = ! empty( $setting['new_tab'] ) ? 'target=\"_blank\"' : '';\r\n-\t\t\t$cat_names        = [];\r\n-\t\t\tforeach ( $cats as $cat ) {\r\n-\t\t\t\tif ( $is_link ) {\r\n-\t\t\t\t\t$term = sprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\" %s>%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tget_term_link( $cat ),\r\n-\t\t\t\t\t\t$attribute_target,\r\n-\t\t\t\t\t\t$cat->name\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$term = $cat->name;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$cat_names[] = $term;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = implode( ', ', $cat_names );\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-categories',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-categories\">',\r\n-\t\t\t\t\t'content'     => $content,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$cats,\r\n-\t\t\t\t$cat_names\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display tags course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function html_tags( $course ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $course ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tags = $course->get_tags();\r\n-\t\t\tif ( empty( $tags ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tag_names = [];\r\n-\t\t\tforeach ( $tags as $tag ) {\r\n-\t\t\t\t$term        = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\tget_term_link( $tag ),\r\n-\t\t\t\t\t$tag->name\r\n-\t\t\t\t);\r\n-\t\t\t\t$tag_names[] = $term;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = implode( ', ', $tag_names );\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-tags',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-tags\">',\r\n-\t\t\t\t\t'content'     => $content,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$tags,\r\n-\t\t\t\t$tag_names\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display image course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t * @param array $data ['size'] Size of image to get, Ex: [500, 300] or string 'thumbnail', 'medium', 'large', 'full' etc.\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.2\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_image( $course, array $data = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = $course;\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$courseModel = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $courseModel instanceof CourseModel ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $data['size'] ) ) {\r\n-\t\t\t\t$size_img_send = $data['size'];\r\n-\r\n-\t\t\t\t\u002F\u002F If custom size, data size is type int[], like [500, 300], not [ width => 500, height => 300 ]\r\n-\t\t\t\t\u002F\u002F Convert if data is [ width => 500, height => 300 ]\r\n-\t\t\t\tif ( is_array( $size_img_send ) && array_key_exists( 'width', $size_img_send ) ) {\r\n-\t\t\t\t\t$size_img_send = [\r\n-\t\t\t\t\t\t$size_img_send['width'] ?? 500,\r\n-\t\t\t\t\t\t$size_img_send['height'] ?? 300,\r\n-\t\t\t\t\t];\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\t$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\r\n-\t\t\t\t$size_img_send    = [\r\n-\t\t\t\t\t$size_img_setting['width'] ?? 500,\r\n-\t\t\t\t\t$size_img_setting['height'] ?? 300,\r\n-\t\t\t\t];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check cache before get image url\r\n-\t\t\t$cache     = new \\LP_Course_Cache();\r\n-\t\t\t$key_cache = 'image_url\u002F' . $courseModel->get_id();\r\n-\t\t\tif ( is_array( $size_img_send ) && count( $size_img_send ) === 2 ) {\r\n-\t\t\t\t$key_cache .= '\u002F' . implode( 'x', $size_img_send );\r\n-\t\t\t} elseif ( is_string( $size_img_send ) ) {\r\n-\t\t\t\t$key_cache .= '\u002F' . $size_img_send;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Set cache for image url\r\n-\t\t\t$course_img_url = $cache->get_cache( $key_cache );\r\n-\t\t\tif ( false === $course_img_url ) {\r\n-\t\t\t\t$course_img_url = $courseModel->get_image_url( $size_img_send );\r\n-\t\t\t\t$cache->set_cache( $key_cache, $course_img_url );\r\n-\t\t\t\t$cache->save_cache_keys( sprintf( 'image_urls\u002F%s', $courseModel->get_id() ), $key_cache );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$content = sprintf(\r\n-\t\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\">',\r\n-\t\t\t\tesc_url_raw( $course_img_url ),\r\n-\t\t\t\t_x( 'course thumbnail', 'no course thumbnail', 'learnpress' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-image',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-img\">',\r\n-\t\t\t\t\t'content'     => $content,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display instructor course.\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param bool $with_avatar\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.5.8\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function html_instructor( $course, bool $with_avatar = false, $setting = [] ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$instructor = $course->get_author_model();\r\n-\t\t\tif ( ! $instructor ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\t\t\t$userTemplate             = new UserTemplate( 'instructor' );\r\n-\t\t\t$is_link                  = $setting['is_link'] ?? true;\r\n-\t\t\tif ( $is_link ) {\r\n-\t\t\t\t$attribute_target = ! empty( $setting['new_tab'] ) ? 'target=\"_blank\"' : '';\r\n-\t\t\t\t$link_instructor  = sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" %s >%s %s\u003C\u002Fa>',\r\n-\t\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t\t$attribute_target,\r\n-\t\t\t\t\t$with_avatar ? $userTemplate->html_avatar( $instructor ) : '',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$link_instructor = sprintf(\r\n-\t\t\t\t\t'%s %s',\r\n-\t\t\t\t\t$with_avatar ? $userTemplate->html_avatar( $instructor ) : '',\r\n-\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-instructor\">',\r\n-\t\t\t\t\t'content'     => $link_instructor,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$instructor,\r\n-\t\t\t\t$with_avatar\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html regular price\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_regular_price( CourseModel $course ): string {\r\n-\t\t$price = learn_press_format_price( $course->get_regular_price() );\r\n-\t\t$price = apply_filters( 'learn-press\u002Fcourse\u002Fregular-price-html', $price, $course, $this );\r\n-\r\n-\t\treturn sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $price );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display price course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_price( $course ): string {\r\n-\t\t$price_html = '';\r\n-\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn $price_html;\r\n-\t\t}\r\n-\r\n-\t\tif ( $course->is_free() ) {\r\n-\t\t\tif ( '' != $course->get_sale_price() ) {\r\n-\t\t\t\t$price_html .= $this->html_regular_price( $course );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$price_html .= sprintf( '\u003Cspan class=\"free\">%s\u003C\u002Fspan>', esc_html__( 'Free', 'learnpress' ) );\r\n-\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html_free', $price_html, $this );\r\n-\t\t} elseif ( $course->has_no_enroll_requirement() ) {\r\n-\t\t\t$price_html .= '';\r\n-\t\t} else {\r\n-\t\t\tif ( $course->has_sale_price() ) {\r\n-\t\t\t\t$price_html .= $this->html_regular_price( $course );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$price_html .= sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"price\">%s\u003C\u002Fspan>',\r\n-\t\t\t\tlearn_press_format_price( $course->get_price(), true )\r\n-\t\t\t);\r\n-\t\t\t$price_html  = sprintf(\r\n-\t\t\t\t'%1$s %2$s %3$s',\r\n-\t\t\t\t$this->html_price_prefix( $course ),\r\n-\t\t\t\t$price_html,\r\n-\t\t\t\t$this->html_price_suffix( $course )\r\n-\t\t\t);\r\n-\t\t\t$price_html  = apply_filters(\r\n-\t\t\t\t'learn_press_course_price_html',\r\n-\t\t\t\t$price_html,\r\n-\t\t\t\t$course->has_sale_price(),\r\n-\t\t\t\t$course->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F @since 4.2.7\r\n-\t\t$price_html = sprintf( '\u003Cspan class=\"course-price\">\u003Cspan class=\"course-item-price\">%s\u003C\u002Fspan>\u003C\u002Fspan>', $price_html );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhtml-price', $price_html, $course );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get deliver type\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_capacity( CourseModel $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cspan class=\"course-capacity\">' => '\u003C\u002Fspan>',\r\n-\t\t];\r\n-\t\t$capacity     = $course->get_meta_value_by_key( CoursePostModel::META_KEY_MAX_STUDENTS, 0 );\r\n-\r\n-\t\tif ( $capacity == 0 ) {\r\n-\t\t\t$content = __( 'Unlimited', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\t$content = sprintf( '%d %s', $capacity, _n( 'Student', 'Students', $capacity, 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display total student's course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function html_count_student( $course ): string {\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$count_student  = $course->get_total_user_enrolled_or_purchased();\r\n-\t\t$count_student += $course->get_fake_students();\r\n-\t\t$content        = sprintf( '%d %s', $count_student, _n( 'Student', 'Students', $count_student, 'learnpress' ) );\r\n-\t\t$html_wrapper   = [\r\n-\t\t\t'\u003Cdiv class=\"course-count-student\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display total lesson's course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t * @param string $item_type custom post type item\r\n-\t * @param bool $show_only_number\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_count_item( $course, string $item_type, bool $show_only_number = false ): string {\r\n-\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$info_total_items = $course->get_total_items();\r\n-\t\tif ( empty( $info_total_items ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$count_item = $info_total_items->{$item_type} ?? 0;\r\n-\r\n-\t\tif ( $show_only_number ) {\r\n-\t\t\t$content = $count_item;\r\n-\t\t} else {\r\n-\t\t\tswitch ( $item_type ) {\r\n-\t\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Lesson', 'Lessons', $count_item, 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Quiz', 'Quizzes', $count_item, 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'lp_assignment':\r\n-\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Assignment', 'Assignments', $count_item, 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'lp_h5p':\r\n-\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'H5P', 'H5Ps', $count_item, 'learnpress' ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$content = apply_filters( 'learn-press\u002Fsingle-course\u002Fi18n\u002Fcount-item', $count_item, $course, $item_type );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-count-item',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"course-count-item %s\">', $item_type ),\r\n-\t\t\t\t'content'     => $content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$course,\r\n-\t\t\t$item_type,\r\n-\t\t\t$count_item\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html level course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_level( $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$level = $course->get_meta_value_by_key( CoursePostModel::META_KEY_LEVEL, '' );\r\n-\t\t\tif ( empty( $level ) ) {\r\n-\t\t\t\t$level = 'all';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$levels = lp_course_level();\r\n-\t\t\t$level  = $levels[ $level ] ?? $levels['all'];\r\n-\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'\u003Cspan class=\"course-level\">' => '\u003C\u002Fspan>',\r\n-\t\t\t];\r\n-\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $level );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html duration course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_duration( $course ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$duration        = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '' );\r\n-\t\t\t$duration_arr    = explode( ' ', $duration );\r\n-\t\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\r\n-\t\t\t$duration_type   = $duration_arr[1] ?? '';\r\n-\t\t\tif ( empty( $duration_number ) ) {\r\n-\t\t\t\t$duration_str = __( 'Lifetime', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_wrapper = [\r\n-\t\t\t\t'\u003Cspan class=\"course-duration\">' => '\u003C\u002Fspan>',\r\n-\t\t\t];\r\n-\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $duration_str );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get feature review\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function html_feature_review( CourseModel $course, $userModel = false, array $data = [] ): string {\r\n-\t\t$feature_review = $course->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURED_REVIEW, '' );\r\n-\t\tif ( empty( $feature_review ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $course->get_id(), true );\r\n-\t\t\tif ( $userCourseModel ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$stars = '';\r\n-\t\tforeach ( range( 1, 5 ) as $star ) {\r\n-\t\t\t$stars .= '\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>';\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-featured-review %s\">',\r\n-\t\t\t\tesc_attr( $data['lp_display_on'] ?? '' )\r\n-\t\t\t),\r\n-\t\t\t'title'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"featured-review__title\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Featured Review', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'stars'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"featured-review__stars\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$stars\r\n-\t\t\t),\r\n-\t\t\t'content'     => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"featured-review__content\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\twp_kses_post( wpautop( $feature_review ) )\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get button external\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_btn_external( CourseModel $courseModel, $userModel ): string {\r\n-\t\t$external_link = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_EXTERNAL_LINK_BY_COURSE, '' );\r\n-\t\tif ( empty( $external_link ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check user has enrolled, finished or purchased course\r\n-\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t$userCourse = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\tif ( $userCourse && ( $userCourse->has_enrolled_or_finished() || $userCourse->has_purchased() ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$content = sprintf(\r\n-\t\t\t'\u003Ca href=\"%s\" class=\"lp-button course-btn-extra\" target=\"_blank\">%s\u003C\u002Fa>',\r\n-\t\t\tesc_url_raw( $external_link ),\r\n-\t\t\t__( 'Contact To Request', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhtml-button-external', $content, $courseModel, $userModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML button purchase course\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param false|UserModel $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function html_btn_purchase_course( CourseModel $courseModel, $userModel ): string {\r\n-\t\t$html_btn     = '';\r\n-\t\t$can_purchase = $courseModel->can_purchase( $userModel );\r\n-\t\tif ( is_wp_error( $can_purchase ) ) {\r\n-\t\t\t$error_code_show = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase\u002Fshow-messages',\r\n-\t\t\t\t[]\r\n-\t\t\t);\r\n-\t\t\tif ( in_array( $can_purchase->get_error_code(), $error_code_show )\r\n-\t\t\t\t&& ! empty( $can_purchase->get_error_message() ) ) {\r\n-\t\t\t\t$html_btn = Template::print_message( $can_purchase->get_error_message(), 'warning', false );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$html_btn = sprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"lp-button button-purchase-course\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Buy Now', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $html_btn ) ) {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase\u002Fempty',\r\n-\t\t\t\t$html_btn,\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$userModel\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$class_guest_checkout = LP_Checkout::instance()->is_enable_guest_checkout() ? 'guest_checkout' : '';\r\n-\r\n-\t\t\u002F\u002F Hook action old\r\n-\t\t$html_hook_old = '';\r\n-\t\tif ( has_action( 'learn-press\u002Fafter-purchase-button' ) ) {\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fafter-purchase-button' );\r\n-\t\t\t$html_hook_old = ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\tif ( has_filter( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-purchase\u002Fcan-show' ) ) {\r\n-\t\t\t$user_id = 0;\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\t$user_id = $userModel->get_id();\r\n-\t\t\t}\r\n-\t\t\t$user_old   = learn_press_get_user( $user_id );\r\n-\t\t\t$course_old = learn_press_get_course( $courseModel->get_id() );\r\n-\t\t\t$can_show   = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-purchase\u002Fcan-show', true, $user_old, $course_old );\r\n-\t\t\tif ( ! $can_show ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End hook action old\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase',\r\n-\t\t\t[\r\n-\t\t\t\t'form'     => sprintf(\r\n-\t\t\t\t\t'\u003Cform name=\"purchase-course\" class=\"purchase-course %s\" method=\"post\">',\r\n-\t\t\t\t\tesc_attr( $class_guest_checkout )\r\n-\t\t\t\t),\r\n-\t\t\t\t'input'    => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"purchase-course\" value=\"%d\"\u002F>',\r\n-\t\t\t\t\tesc_attr( $courseModel->get_id() )\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn'      => $html_btn,\r\n-\t\t\t\t'hook_old' => $html_hook_old,\r\n-\t\t\t\t'form_end' => '\u003C\u002Fform>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML button enroll course\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param false|UserModel $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_btn_enroll_course( CourseModel $courseModel, $userModel ): string {\r\n-\t\t$html_btn   = '';\r\n-\t\t$can_enroll = $courseModel->can_enroll( $userModel );\r\n-\t\tif ( is_wp_error( $can_enroll ) ) {\r\n-\t\t\t$error_code_show = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-enroll\u002Fshow-messages',\r\n-\t\t\t\t[ 'course_is_no_required_enroll_not_login', 'course_out_of_stock' ]\r\n-\t\t\t);\r\n-\t\t\tif ( in_array( $can_enroll->get_error_code(), $error_code_show )\r\n-\t\t\t\t&& ! empty( $can_enroll->get_error_message() ) ) {\r\n-\t\t\t\t$html_btn = Template::print_message( $can_enroll->get_error_message(), 'warning', false );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$html_btn = sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"submit\" class=\"lp-button button-enroll-course\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t__( 'Start Now', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\tif ( empty( $html_btn ) ) {\r\n-\t\t\treturn $html_btn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Hook old\r\n-\t\t$html_hook_before_old = '';\r\n-\t\tif ( has_action( 'learn-press\u002Fbefore-enroll-button' ) ) {\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-enroll-button' );\r\n-\t\t\t$html_hook_before_old = ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\t$html_hook_after_old = '';\r\n-\t\tif ( has_action( 'learn-press\u002Fafter-enroll-button' ) ) {\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fafter-enroll-button' );\r\n-\t\t\t$html_hook_after_old = ob_get_clean();\r\n-\t\t}\r\n-\r\n-\t\tif ( has_filter( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show' ) ) {\r\n-\t\t\t$user_id = 0;\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\t$user_id = $userModel->get_id();\r\n-\t\t\t}\r\n-\t\t\t$user_old   = learn_press_get_user( $user_id );\r\n-\t\t\t$course_old = learn_press_get_course( $courseModel->get_id() );\r\n-\t\t\t$can_show   = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show', true, $user_old, $course_old );\r\n-\t\t\tif ( ! $can_show ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End hook old\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-enroll',\r\n-\t\t\t[\r\n-\t\t\t\t'form'            => '\u003Cform name=\"enroll-course\" class=\"enroll-course\" method=\"post\">',\r\n-\t\t\t\t'hook_before_old' => $html_hook_before_old,\r\n-\t\t\t\t'input'           => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"enroll-course\" value=\"%s\"\u002F>',\r\n-\t\t\t\t\tesc_attr( $courseModel->get_id() )\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn'             => $html_btn,\r\n-\t\t\t\t'hook_after_old'  => $html_hook_after_old,\r\n-\t\t\t\t'form_end'        => '\u003C\u002Fform>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Sidebar\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.7\r\n-\t *\u002F\r\n-\tpublic function html_sidebar( CourseModel $courseModel, array $data = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( is_active_sidebar( 'course-sidebar' ) ) {\r\n-\t\t\t\tob_start();\r\n-\t\t\t\tdynamic_sidebar( 'course-sidebar' );\r\n-\t\t\t\t$sidebar_content = ob_get_clean();\r\n-\r\n-\t\t\t\t$section = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-sidebar',\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cdiv class=\"lp-single-course-sidebar %s\">',\r\n-\t\t\t\t\t\t\tesc_attr( $data['lp_display_on'] ?? '' )\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'content'     => $sidebar_content,\r\n-\t\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t$courseModel\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$html = Template::combine_components( $section );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML meta faqs\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_faqs( CourseModel $courseModel, array $data = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$show_heading = $data['show_heading'] ?? true;\r\n-\t\t\t$faqs         = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FAQS, [] );\r\n-\t\t\tif ( empty( $faqs ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $faqs as $faq ) {\r\n-\t\t\t\t$title       = $faq[0];\r\n-\t\t\t\t$description = $faq[1];\r\n-\t\t\t\tif ( empty( $title ) || empty( $description ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$key          = uniqid();\r\n-\t\t\t\t$section_item = [\r\n-\t\t\t\t\t'input_checkbox'    => sprintf(\r\n-\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"course-faqs-box-ratio\" id=\"course-faqs-box-ratio-%s\">',\r\n-\t\t\t\t\t\t$key\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-faqs-box\">',\r\n-\t\t\t\t\t'title'             => sprintf(\r\n-\t\t\t\t\t\t'\u003Clabel class=\"course-faqs-box__title\" for=\"course-faqs-box-ratio-%s\">%s\u003C\u002Flabel>',\r\n-\t\t\t\t\t\t$key,\r\n-\t\t\t\t\t\t$title\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'content'           => '\u003Cdiv class=\"course-faqs-box__content\">',\r\n-\t\t\t\t\t'content_inner'     => '\u003Cdiv class=\"course-faqs-box__content-inner\">',\r\n-\t\t\t\t\t'content_main'      => wp_kses_post( $description ),\r\n-\t\t\t\t\t'content_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'content_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t];\r\n-\t\t\t\t$html        .= Template::combine_components( $section_item );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-faqs',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-faqs course-tab-panel-faqs\">',\r\n-\t\t\t\t\t'title'       => $show_heading ? sprintf(\r\n-\t\t\t\t\t\t'\u003Ch3 class=\"course-faqs__title\">%s\u003C\u002Fh3>',\r\n-\t\t\t\t\t\t__( 'FAQs', 'learnpress' )\r\n-\t\t\t\t\t) : '',\r\n-\t\t\t\t\t'content'     => $html,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel\r\n-\t\t\t);\r\n-\t\t\t$html    = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML struct course box extra\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param $title\r\n-\t * @param string $html_list\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_course_box_extra( CourseModel $courseModel, $title, string $html_list ): string {\r\n-\t\tif ( empty( $html_list ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-course-box-extra',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-extra-box\">',\r\n-\t\t\t\t'title'             => sprintf( '\u003Ch3 class=\"course-extra-box__title\">%s\u003C\u002Fh3>', $title ),\r\n-\t\t\t\t'content'           => '\u003Cdiv class=\"course-extra-box__content\">',\r\n-\t\t\t\t'content_inner'     => '\u003Cdiv class=\"course-extra-box__content-inner\">',\r\n-\t\t\t\t'list'              => $html_list,\r\n-\t\t\t\t'content_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'content_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML meta requirements\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_requirements( CourseModel $courseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$requirements = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_REQUIREMENTS, [] );\r\n-\t\t\tif ( empty( $requirements ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_lis = '';\r\n-\t\t\tforeach ( $requirements as $requirement ) {\r\n-\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $requirement );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_list = [\r\n-\t\t\t\t'wrapper'     => '\u003Cul>',\r\n-\t\t\t\t'content'     => $html_lis,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-requirements',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-requirements extra-box\">',\r\n-\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Requirements', 'learnpress' ) ),\r\n-\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$requirements\r\n-\t\t\t);\r\n-\t\t\t$html    = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML meta features\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_features( CourseModel $courseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$features = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURES, [] );\r\n-\t\t\tif ( empty( $features ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_lis = '';\r\n-\t\t\tforeach ( $features as $feature ) {\r\n-\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $feature );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_list = [\r\n-\t\t\t\t'wrapper'     => '\u003Cul>',\r\n-\t\t\t\t'content'     => $html_lis,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-features',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-features extra-box\">',\r\n-\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Features', 'learnpress' ) ),\r\n-\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$features\r\n-\t\t\t);\r\n-\t\t\t$html    = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML meta target\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_target( CourseModel $courseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$targets = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_TARGET, [] );\r\n-\t\t\tif ( empty( $targets ) ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html_lis = '';\r\n-\t\t\tforeach ( $targets as $target ) {\r\n-\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $target );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_list = [\r\n-\t\t\t\t'wrapper'     => '\u003Cul>',\r\n-\t\t\t\t'content'     => $html_lis,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-target',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-target extra-box\">',\r\n-\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Target audiences', 'learnpress' ) ),\r\n-\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$targets\r\n-\t\t\t);\r\n-\t\t\t$html    = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML material\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tpublic function html_material( CourseModel $courseModel, $userModel = false, array $data = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$show_heading = $data['show_heading'] ?? true;\r\n-\t\t\t$can_show     = false;\r\n-\r\n-\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\tif ( $courseModel->check_user_is_author( $userModel )\r\n-\t\t\t\t\t|| user_can( $userModel->get_id(), ADMIN_ROLE ) ) {\r\n-\t\t\t\t\t$can_show = true;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\t\t\tif ( $userCourseModel &&\r\n-\t\t\t\t\t\t( $userCourseModel->has_enrolled_or_finished()\r\n-\t\t\t\t\t\t\t|| $userCourseModel->has_purchased() ) ) {\r\n-\t\t\t\t\t\t$can_show = true;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\r\n-\t\t\t\t$can_show = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$can_show = apply_filters( 'learn-press\u002Fcourse-material\u002Fcan-show', $can_show, $courseModel, $userModel );\r\n-\r\n-\t\t\t$file_per_page = LP_Settings::get_option( 'material_file_per_page', - 1 );\r\n-\t\t\t$count_files   = LP_Material_Files_DB::getInstance()->get_total( $courseModel->get_id() );\r\n-\t\t\tif ( ! $can_show || $file_per_page == 0 || $count_files \u003C= 0 ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', [] );\r\n-\t\t\t$html_content = ob_get_clean();\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-material\">',\r\n-\t\t\t\t'title'       => $show_heading ? sprintf(\r\n-\t\t\t\t\t'\u003Ch3 class=\"course-material__title\">%s\u003C\u002Fh3>',\r\n-\t\t\t\t\t__( 'Course Material', 'learnpress' )\r\n-\t\t\t\t) : '',\r\n-\t\t\t\t'content'     => $html_content,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html level course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_price_prefix( $course ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $course instanceof LP_Course ) {\r\n-\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\r\n-\t\t\t\tif ( ! $course instanceof CourseModel ) {\r\n-\t\t\t\t\treturn $html;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$price_prefix_str = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PRICE_PREFIX, '' );\r\n-\t\t\tif ( empty( $price_prefix_str ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"course-price-prefix\">%s\u003C\u002Fspan>', $price_prefix_str );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html level course.\r\n-\t *\r\n-\t * @param LP_Course|CourseModel $course\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_price_suffix( $course ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$price_suffix_str = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PRICE_SUFFIX, '' );\r\n-\t\t\tif ( empty( $price_suffix_str ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"course-price-suffix\">%s\u003C\u002Fspan>', $price_suffix_str );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html featured course.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.9\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_featured( CourseModel $courseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$is_featured = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURED, 'no' );\r\n-\t\t\tif ( $is_featured !== 'yes' ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"course-featured\">%s\u003C\u002Fspan>', __( 'Featured', 'learnpress' ) );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * GET HTML comment default of WP\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param false|UserModel $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_comment( CourseModel $courseModel, $userModel = false ): string {\r\n-\t\t$args     = [\r\n-\t\t\t'id_url'    => 'course-comments',\r\n-\t\t\t'course_id' => $courseModel->get_id(),\r\n-\t\t\t'user_id'   => $userModel instanceof UserModel ? $userModel->get_id() : 0,\r\n-\t\t];\r\n-\t\t$callBack = [\r\n-\t\t\t'class'  => __CLASS__,\r\n-\t\t\t'method' => 'render_html_comments',\r\n-\t\t];\r\n-\t\t$html     = TemplateAJAX::load_content_via_ajax( $args, $callBack );\r\n-\r\n-\t\t$section_comment = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-comment',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-comment\">',\r\n-\t\t\t\t'content'     => $html,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section_comment );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render HTML comments of course.\r\n-\t *\r\n-\t * @param array $data ['course_id']\r\n-\t *\r\n-\t * @return stdClass\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function render_html_comments( array $data ): stdClass {\r\n-\t\t$response          = new stdClass();\r\n-\t\t$response->content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id = $data['course_id'] ?? 0;\r\n-\t\t\t$user_id   = $data['user_id'] ?? 0;\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\treturn $response;\r\n-\t\t\t}\r\n-\r\n-\t\t\tglobal $withcomments, $post;\r\n-\r\n-\t\t\t$post = get_post( $course_id );\r\n-\t\t\tif ( $post->comment_status !== 'open' ) {\r\n-\t\t\t\treturn $response;\r\n-\t\t\t} else {\r\n-\t\t\t\t$withcomments = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$withcomments = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-course\u002Frender-html-comment\u002Fis-show',\r\n-\t\t\t\t$withcomments,\r\n-\t\t\t\t$post,\r\n-\t\t\t\t$user_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F$post->comment_count = 0;\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t\tcomments_template();\r\n-\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t\t$html              = ob_get_clean();\r\n-\t\t\t$response->content = $html;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->content = Template::print_message( $e->getMessage(), 'error', false );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get HTML curriculum of course.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param LessonPostModel|QuizPostModel|PostModel|mixed $itemModelCurrent\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function html_curriculum( CourseModel $courseModel, $userModel, $itemModelCurrent = false ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Get current item viewing\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $lp_course_item LP_Course_Item\r\n-\t\t\t * @var $post \\WP_Post\r\n-\t\t\t *\u002F\r\n-\t\t\tglobal $lp_course_item, $post;\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var $itemModelCurrent LessonPostModel|QuizPostModel|AssignmentPostModel|PostModel...\r\n-\t\t\t *\u002F\r\n-\t\t\t$itemModelCurrent = $courseModel->get_item_model( $post->ID, $post->post_type );\r\n-\t\t\tif ( $lp_course_item ) {\r\n-\t\t\t\t$itemModelCurrent = $courseModel->get_item_model( $lp_course_item->get_id(), $lp_course_item->get_item_type() );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $itemModelCurrent ) {\r\n-\t\t\t\t$item_types = CourseModel::item_types_support();\r\n-\t\t\t\t\u002F\u002F Check item type is support\r\n-\t\t\t\tif ( in_array( $itemModelCurrent->post_type, $item_types ) ) {\r\n-\t\t\t\t\t$this->currentItemModel = $itemModelCurrent;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End get current item viewing\r\n-\r\n-\t\t\t$section_items = $courseModel->get_section_items();\r\n-\t\t\t$html          = Template::print_message(\r\n-\t\t\t\tesc_html__( 'There are no items in the curriculum yet.', 'learnpress' ),\r\n-\t\t\t\t'info',\r\n-\t\t\t\tfalse\r\n-\t\t\t);\r\n-\t\t\tif ( empty( $section_items ) ) {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_enqueue_script( 'lp-curriculum' );\r\n-\t\t\t$li_section_items = '';\r\n-\t\t\tforeach ( $section_items as $section_item ) {\r\n-\t\t\t\t$li_section_items .= $this->render_html_section_item( $courseModel, $userModel, $section_item );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-curriculum',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"lp-course-curriculum\">',\r\n-\t\t\t\t\t'title'                     => sprintf(\r\n-\t\t\t\t\t\t'\u003Ch3 class=\"lp-course-curriculum__title\">%s\u003C\u002Fh3>',\r\n-\t\t\t\t\t\tesc_html__( 'Curriculum', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'curriculum_info'           => '\u003Cdiv class=\"course-curriculum-info\">',\r\n-\t\t\t\t\t'curriculum_info_left'      => '\u003Cul class=\"course-curriculum-info__left\">',\r\n-\t\t\t\t\t'count_sections'            => sprintf(\r\n-\t\t\t\t\t\t'\u003Cli class=\"course-count-section\">%s\u003C\u002Fli>',\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t_n( '%d Section', '%d Sections', $courseModel->get_total_sections(), 'learnpress' ),\r\n-\t\t\t\t\t\t\t$courseModel->get_total_sections()\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'count_lesson'              => sprintf(\r\n-\t\t\t\t\t\t'\u003Cli class=\"course-count-lesson\">%s\u003C\u002Fli>',\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t_n( '%d Lesson', '%d Lessons', $courseModel->count_items( LP_LESSON_CPT ), 'learnpress' ),\r\n-\t\t\t\t\t\t\t$courseModel->count_items( LP_LESSON_CPT )\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'duration'                  => sprintf(\r\n-\t\t\t\t\t\t'\u003Cli class=\"course-duration\">%s\u003C\u002Fli>',\r\n-\t\t\t\t\t\t$this->html_duration( $courseModel )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'curriculum_info_left_end'  => '\u003C\u002Ful>',\r\n-\t\t\t\t\t'curriculum_info_right'     => '\u003Cdiv class=\"course-curriculum-info__right\">',\r\n-\t\t\t\t\t'expand_all'                => sprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"course-toggle-all-sections\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\tesc_html__( 'Expand all sections', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'collapse_all'              => sprintf(\r\n-\t\t\t\t\t\t'\u003Cspan class=\"course-toggle-all-sections lp-collapse lp-hidden\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\tesc_html__( 'Collapse all sections', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'curriculum_info_right_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'curriculum_info_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'curriculum'                => '\u003Cdiv class=\"course-curriculum\">',\r\n-\t\t\t\t\t'sections'                  => '\u003Cul class=\"course-sections\">',\r\n-\t\t\t\t\t'li_section_items'          => $li_section_items,\r\n-\t\t\t\t\t'sections_end'              => '\u003C\u002Ful>',\r\n-\t\t\t\t\t'curriculum_end'            => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$userModel,\r\n-\t\t\t\t$itemModelCurrent\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render HTML section item\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param $section_item object {section_id, section_name, section_description, items[{item_id, item_order, item_type, title, preview}]}\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function render_html_section_item( CourseModel $courseModel, $userModel, $section_item ): string {\r\n-\t\tif ( ! $section_item instanceof stdClass ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$section_id               = $section_item->section_id ?? 0;\r\n-\t\t$section_name             = $section_item->section_name ?? '';\r\n-\t\t$section_description      = $section_item->section_description ?? '';\r\n-\t\t$section_order            = $section_item->section_order ?? 1;\r\n-\t\t$items                    = $section_item->items ?? [];\r\n-\t\t$html_section_description = '';\r\n-\t\tif ( ! empty( $section_description ) ) {\r\n-\t\t\t$html_section_description = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-section__description\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\twp_kses_post( $section_description )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section_header = [\r\n-\t\t\t'start'       => '\u003Cdiv class=\"course-section-header\">',\r\n-\t\t\t'toggle'      => '\u003Cdiv class=\"section-toggle\">\r\n-\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\r\n-\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\r\n-\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t'info'        => '\u003Cdiv class=\"course-section-info\">',\r\n-\t\t\t'title'       => sprintf( '\u003Cdiv class=\"course-section__title\">%s\u003C\u002Fdiv>', wp_kses_post( $section_name ) ),\r\n-\t\t\t'description' => $html_section_description,\r\n-\t\t\t'info_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t'count_items' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"section-count-items\">%d\u003C\u002Fdiv>',\r\n-\t\t\t\tcount( $items )\r\n-\t\t\t),\r\n-\t\t\t'end'         => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$li_items = '';\r\n-\t\tforeach ( $items as $item ) {\r\n-\t\t\t$li_items .= $this->render_html_course_item( $courseModel, $userModel, $item, $section_item );\r\n-\t\t}\r\n-\t\t$section_items = [\r\n-\t\t\t'start'    => '\u003Cul class=\"course-section__items\">',\r\n-\t\t\t'li_items' => $li_items,\r\n-\t\t\t'end'      => '\u003C\u002Ful>',\r\n-\t\t];\r\n-\r\n-\t\t$curriculum_display_setting = LP_Settings::get_option( 'curriculum_display', 'expand_first_section' );\r\n-\t\t$class_section_toggle       = '';\r\n-\r\n-\t\tif ( $this->currentItemModel ) {\r\n-\t\t\t$current_section = $courseModel->get_section_of_item( $this->currentItemModel->get_id() );\r\n-\t\t\tif ( $current_section != $section_id ) {\r\n-\t\t\t\t$class_section_toggle = 'lp-collapse';\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( $curriculum_display_setting === 'collapse_all' ) {\r\n-\t\t\t\t$class_section_toggle = 'lp-collapse';\r\n-\t\t\t} elseif ( $curriculum_display_setting === 'expand_first_section' ) {\r\n-\t\t\t\tif ( $section_order > 1 ) {\r\n-\t\t\t\t\t$class_section_toggle = 'lp-collapse';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$class_section_toggle = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-section-item\u002Fclass-section-toggle',\r\n-\t\t\t$class_section_toggle,\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel,\r\n-\t\t\t$section_item\r\n-\t\t);\r\n-\r\n-\t\t$section_item = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-section-item',\r\n-\t\t\t[\r\n-\t\t\t\t'start'  => sprintf(\r\n-\t\t\t\t\t'\u003Cli class=\"course-section %s\" data-section-id=\"%s\">',\r\n-\t\t\t\t\t$class_section_toggle,\r\n-\t\t\t\t\t$section_id\r\n-\t\t\t\t),\r\n-\t\t\t\t'header' => Template::combine_components( $section_header ),\r\n-\t\t\t\t'items'  => Template::combine_components( $section_items ),\r\n-\t\t\t\t'end'    => '\u003C\u002Fli>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel,\r\n-\t\t\t$section_item\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section_item );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param CourseModel $courseModel\r\n-\t * @param UserModel|false $userModel\r\n-\t * @param $item stdClass {item_id, item_order, item_type, title, preview}\r\n-\t * @param $section_item stdClass {section_id, section_name, section_description, items[{item_id, item_order, item_type, title, preview}]}\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function render_html_course_item( CourseModel $courseModel, $userModel, $item, $section_item ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\tif ( ! $item instanceof stdClass ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$item_id       = (int) ( $item->item_id ?? $item->id ?? 0 );\r\n-\t\t$item_order    = $item->item_order ?? $item->order ?? 0;\r\n-\t\t$item_type     = $item->item_type ?? $item->type ?? '';\r\n-\t\t$title         = $item->title ?? '';\r\n-\t\t$has_preview   = $item->preview ?? '';\r\n-\t\t$class_current = '';\r\n-\t\tif ( $this->currentItemModel ) {\r\n-\t\t\t$current_item_id = $this->currentItemModel->get_id();\r\n-\t\t\tif ( $current_item_id == $item_id ) {\r\n-\t\t\t\t$class_current = 'current';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002FLP_Course_Item::get_item( $item_id, $course->get_id() );\r\n-\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\r\n-\t\tif ( empty( $itemModel ) ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$link_item = $courseModel->get_item_link( $item_id, $item_type );\r\n-\r\n-\t\t$item_duration      = '';\r\n-\t\t$html_item_duration = '';\r\n-\t\tif ( is_callable( [ $itemModel, 'get_duration' ] ) ) {\r\n-\t\t\t$item_duration = $itemModel->get_duration();\r\n-\t\t} else {\r\n-\t\t\t$item_duration = get_post_meta( $item_id, '_lp_duration', true );\r\n-\t\t}\r\n-\r\n-\t\t$duration_arr    = explode( ' ', $item_duration );\r\n-\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\r\n-\t\t$duration_type   = $duration_arr[1] ?? '';\r\n-\r\n-\t\tif ( $duration_number > 0 ) {\r\n-\t\t\t$item_duration_plural = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\r\n-\r\n-\t\t\t$html_item_duration = sprintf(\r\n-\t\t\t\t'\u003Cspan class=\"duration\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t$item_duration_plural\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Count question of quiz\r\n-\t\t$html_item_count_questions = '';\r\n-\t\tif ( $item_type === LP_QUIZ_CPT ) {\r\n-\t\t\t$quizPostModel = QuizPostModel::find( $item_id, true );\r\n-\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\r\n-\t\t\t\t$question_count      = $quizPostModel->count_questions();\r\n-\t\t\t\t$html_item_duration .= sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"question-count\">%s\u003C\u002Fspan>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t_n( '%d Question', '%d Questions', $question_count, 'learnpress' ),\r\n-\t\t\t\t\t\t$question_count\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$user_item_status_ico_flag = 'locked';\r\n-\t\t$user_attended_course      = false;\r\n-\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t\tif ( $userCourseModel\r\n-\t\t\t\t&& $userCourseModel->get_status() !== UserItemModel::STATUS_CANCEL\r\n-\t\t\t\t&& $userCourseModel->get_status() !== UserCourseModel::STATUS_PURCHASED ) {\r\n-\t\t\t\t$user_attended_course = true;\r\n-\r\n-\t\t\t\t\u002F\u002F Check status of item's course\r\n-\t\t\t\t$userCourseItem = $userCourseModel->get_item_attend( $item_id, $item_type );\r\n-\t\t\t\tif ( ! $userCourseItem instanceof UserItemModel ) {\r\n-\t\t\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$user_item_status_ico_flag = $userCourseItem->get_status();\r\n-\t\t\t\t\t$user_item_graduation      = $userCourseItem->get_graduation();\r\n-\t\t\t\t\tif ( ! empty( $user_item_graduation ) ) {\r\n-\t\t\t\t\t\t$user_item_status_ico_flag = $user_item_graduation . ' completed';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( empty( $user_item_status_ico_flag ) ) {\r\n-\t\t\t\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $user_item_status_ico_flag === UserItemModel::GRADUATION_IN_PROGRESS ) {\r\n-\t\t\t\t\tif ( $userCourseModel->get_time_remaining() === 0 ) {\r\n-\t\t\t\t\t\t$user_item_status_ico_flag = 'locked';\r\n-\t\t\t\t\t} elseif ( $userCourseModel->get_status() === UserItemModel::STATUS_FINISHED\r\n-\t\t\t\t\t\t\t\t&& $courseModel->enable_block_when_finished() ) {\r\n-\t\t\t\t\t\t$user_item_status_ico_flag = 'locked';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $has_preview && ! $user_attended_course ) {\r\n-\t\t\t$user_item_status_ico_flag = 'preview';\r\n-\t\t}\r\n-\r\n-\t\tif ( $courseModel->has_no_enroll_requirement()\r\n-\t\t\t&& ! $user_attended_course && ! $userModel ) {\r\n-\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\r\n-\t\t}\r\n-\r\n-\t\t$user_item_status_ico_flag = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fitem\u002Fstatus-ico-flag',\r\n-\t\t\t$user_item_status_ico_flag,\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel,\r\n-\t\t\t$item,\r\n-\t\t\t$section_item\r\n-\t\t);\r\n-\r\n-\t\t$html_item_status = sprintf(\r\n-\t\t\t'\u003Cdiv class=\"course-item__status\">\u003Cspan class=\"course-item-ico %1$s\">\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t$user_item_status_ico_flag\r\n-\t\t);\r\n-\r\n-\t\t$html_item_right = [];\r\n-\t\tif ( $html_item_count_questions != '' || $html_item_duration != '' ) {\r\n-\t\t\t$html_item_right = [\r\n-\t\t\t\t'item_right'     => '\u003Cdiv class=\"course-item__right\">',\r\n-\t\t\t\t'question_count' => $html_item_count_questions,\r\n-\t\t\t\t'duration'       => $html_item_duration,\r\n-\t\t\t\t'item_right_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t}\r\n-\r\n-\t\t$section_item = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-course-item',\r\n-\t\t\t[\r\n-\t\t\t\t'start'            => sprintf(\r\n-\t\t\t\t\t'\u003Cli class=\"course-item %s\" data-item-id=\"%s\" data-item-order=\"%s\" data-item-type=\"%s\">',\r\n-\t\t\t\t\t$class_current,\r\n-\t\t\t\t\t$item_id,\r\n-\t\t\t\t\t$item_order,\r\n-\t\t\t\t\t$item_type\r\n-\t\t\t\t),\r\n-\t\t\t\t'link'             => sprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\" class=\"course-item__link\">',\r\n-\t\t\t\t\tesc_url_raw( $link_item )\r\n-\t\t\t\t),\r\n-\t\t\t\t'item_info'        => '\u003Cdiv class=\"course-item__info\">',\r\n-\t\t\t\t'icon'             => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"course-item-ico %s\">\u003C\u002Fspan>',\r\n-\t\t\t\t\tesc_attr( $item_type )\r\n-\t\t\t\t),\r\n-\t\t\t\t'item_order'       => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"course-item-order lp-hidden\">%s.%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t$section_item->section_order,\r\n-\t\t\t\t\t$item_order\r\n-\t\t\t\t),\r\n-\t\t\t\t'item_info_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'item_content'     => '\u003Cdiv class=\"course-item__content\">',\r\n-\t\t\t\t'item_left'        => '\u003Cdiv class=\"course-item__left\">',\r\n-\t\t\t\t'title'            => sprintf( '\u003Cdiv class=\"course-item-title\">%s\u003C\u002Fdiv>', wp_kses_post( $title ) ),\r\n-\t\t\t\t'item_left_end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'item_right'       => Template::combine_components( $html_item_right ),\r\n-\t\t\t\t'item_content_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'status'           => $html_item_status,\r\n-\t\t\t\t'link_end'         => '\u003C\u002Fa>',\r\n-\t\t\t\t'end'              => '\u003C\u002Fli>',\r\n-\t\t\t],\r\n-\t\t\t$courseModel,\r\n-\t\t\t$userModel,\r\n-\t\t\t$item,\r\n-\t\t\t$section_item\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section_item );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render string to data content\r\n-\t *\r\n-\t * @param CourseModel $course\r\n-\t * @param string $data_content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render_data( CourseModel $course, string $data_content = '' ): string {\r\n-\t\t$author_of_course         = $course->get_author_model();\r\n-\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\t\u002F\u002F render count items\r\n-\t\t$pattern_count_items = '\u002F{{course_count_.*?}}\u002F';\r\n-\t\tpreg_match_all( $pattern_count_items, $data_content, $matches_count_items );\r\n-\t\tif ( ! empty( $matches_count_items ) ) {\r\n-\t\t\t$items = $matches_count_items[0];\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t$method         = str_replace( [ '{{', '}}' ], '', $item );\r\n-\t\t\t\t$post_type_item = str_replace( 'course_count_', '', $method );\r\n-\t\t\t\t$data_content   = str_replace( $item, $this->html_count_item( $course, $post_type_item ), $data_content );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn str_replace(\r\n-\t\t\t[\r\n-\t\t\t\t'{{course_id}}',\r\n-\t\t\t\t'{{course_title}}',\r\n-\t\t\t\t'{{course_image}}',\r\n-\t\t\t\t'{{course_url}}',\r\n-\t\t\t\t'{{course_short_description}}',\r\n-\t\t\t\t'{{course_price}}',\r\n-\t\t\t\t'{{course_categories}}',\r\n-\t\t\t\t'{{course_count_student}}',\r\n-\t\t\t\t'{{course_author_display_name}}',\r\n-\t\t\t\t'{{course_author_url}}',\r\n-\t\t\t\t'{{course_author_avatar}}',\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t$course->get_id(),\r\n-\t\t\t\t$this->html_title( $course ),\r\n-\t\t\t\t$this->html_image( $course ),\r\n-\t\t\t\t$course->get_permalink(),\r\n-\t\t\t\t$this->html_short_description( $course ),\r\n-\t\t\t\t$this->html_price( $course ),\r\n-\t\t\t\t$this->html_categories( $course ),\r\n-\t\t\t\t$this->html_count_student( $course ),\r\n-\t\t\t\t$singleInstructorTemplate->html_display_name( $author_of_course ),\r\n-\t\t\t\t$author_of_course->get_url_instructor(),\r\n-\t\t\t\t$singleInstructorTemplate->html_avatar( $author_of_course ),\r\n-\t\t\t],\r\n-\t\t\t$data_content\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get text button read more of course on list courses.\r\n-\t *\r\n-\t * @param CourseModel $courseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.4\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function text_button_course( CourseModel $courseModel ): string {\r\n-\t\t$btn_text  = __( 'Enroll Now', 'learnpress' );\r\n-\t\t$userModel = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t$userCourseModel = null;\r\n-\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\tif ( $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\tif ( $userCourseModel->has_enrolled() ) {\r\n-\t\t\t\t$btn_text = __( 'Continue Learning', 'learnpress' );\r\n-\t\t\t} elseif ( $userCourseModel->has_purchased() ) {\r\n-\t\t\t\t$btn_text = __( 'Start Learning', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$btn_text = __( 'View Detail', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( $courseModel->has_no_enroll_requirement() ) {\r\n-\t\t\t\t$btn_text = __( 'Start Learning', 'learnpress' );\r\n-\t\t\t} elseif ( ! $courseModel->is_free() ) {\r\n-\t\t\t\t$btn_text = __( 'Buy Now', 'learnpress' );\r\n-\t\t\t} elseif ( ! empty( $courseModel->get_external_link() ) ) {\r\n-\t\t\t\t$btn_text = __( 'View Detail', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $btn_text;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Course.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.5\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Course;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\LessonPostModel;\n+use LearnPress\\Models\\PostModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LearnPress\\TemplateHooks\\UserTemplate;\n+use LearnPressAssignment\\Models\\AssignmentPostModel;\n+use LP_Checkout;\n+use LP_Course;\n+use LP_Course_Item;\n+use LP_Datetime;\n+use LP_Debug;\n+use LP_Global;\n+use LP_Material_Files_DB;\n+use LP_Settings;\n+use stdClass;\n+use Throwable;\n+\n+class SingleCourseTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * @var false|LessonPostModel|QuizPostModel|PostModel|mixed $currentItemModel\n+\t *\u002F\n+\tpublic $currentItemModel = false;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', [ $this, 'allow_callback' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t * @use self::render_html_comments\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_html_comments';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Get display title course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t * @param string $tag_html\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_title( $course, string $tag_html = 'span' ): string {\n+\t\t$tag_html     = esc_attr( sanitize_key( $tag_html ) );\n+\t\t$html_wrapper = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-title',\n+\t\t\t[\n+\t\t\t\t\"\u003C{$tag_html} class='course-title'>\" => \"\u003C\u002F{$tag_html}>\",\n+\t\t\t],\n+\t\t\t$course\n+\t\t);\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $course->get_title() );\n+\t}\n+\n+\t\u002F**\n+\t * Get short description course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t * @param int $number_words\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_short_description( $course, int $number_words = 0 ): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cp class=\"course-short-description\">' => '\u003C\u002Fp>',\n+\t\t];\n+\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t}\n+\n+\t\t$short_description = $course->get_short_description();\n+\t\tif ( empty( $short_description ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( $number_words > 0 ) {\n+\t\t\t$short_description = wp_trim_words( $short_description, $number_words, '...' );\n+\t\t}\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $short_description );\n+\t}\n+\n+\t\u002F**\n+\t * Get description course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_description( $course ): string {\n+\t\t$content = '';\n+\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$content = $course->get_data( 'description' );\n+\t\t} elseif ( $course instanceof CourseModel ) {\n+\t\t\t$content = $course->get_description();\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-description',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-description\">',\n+\t\t\t\t'content'     => $content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get display categories course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t * @param array $setting\n+\t *\n+\t * @return string\n+\t * @since 4.2.6\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_categories( $course, array $setting = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $course ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$cats = $course->get_categories();\n+\t\t\tif ( empty( $cats ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$is_link          = $setting['is_link'] ?? true;\n+\t\t\t$attribute_target = ! empty( $setting['new_tab'] ) ? 'target=\"_blank\"' : '';\n+\t\t\t$cat_names        = [];\n+\t\t\tforeach ( $cats as $cat ) {\n+\t\t\t\tif ( $is_link ) {\n+\t\t\t\t\t$term = sprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\" %s>%s\u003C\u002Fa>',\n+\t\t\t\t\t\tget_term_link( $cat ),\n+\t\t\t\t\t\t$attribute_target,\n+\t\t\t\t\t\t$cat->name\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\t$term = $cat->name;\n+\t\t\t\t}\n+\n+\t\t\t\t$cat_names[] = $term;\n+\t\t\t}\n+\n+\t\t\t$content = implode( ', ', $cat_names );\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-categories',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-categories\">',\n+\t\t\t\t\t'content'     => $content,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$cats,\n+\t\t\t\t$cat_names\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get display tags course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function html_tags( $course ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $course ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$tags = $course->get_tags();\n+\t\t\tif ( empty( $tags ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$tag_names = [];\n+\t\t\tforeach ( $tags as $tag ) {\n+\t\t\t\t$term        = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\tget_term_link( $tag ),\n+\t\t\t\t\t$tag->name\n+\t\t\t\t);\n+\t\t\t\t$tag_names[] = $term;\n+\t\t\t}\n+\n+\t\t\t$content = implode( ', ', $tag_names );\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-tags',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-tags\">',\n+\t\t\t\t\t'content'     => $content,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$tags,\n+\t\t\t\t$tag_names\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get display image course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t * @param array $data ['size'] Size of image to get, Ex: [500, 300] or string 'thumbnail', 'medium', 'large', 'full' etc.\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.2\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_image( $course, array $data = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$courseModel = $course;\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$courseModel = CourseModel::find( $course->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( ! $courseModel instanceof CourseModel ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $data['size'] ) ) {\n+\t\t\t\t$size_img_send = $data['size'];\n+\n+\t\t\t\t\u002F\u002F If custom size, data size is type int[], like [500, 300], not [ width => 500, height => 300 ]\n+\t\t\t\t\u002F\u002F Convert if data is [ width => 500, height => 300 ]\n+\t\t\t\tif ( is_array( $size_img_send ) && array_key_exists( 'width', $size_img_send ) ) {\n+\t\t\t\t\t$size_img_send = [\n+\t\t\t\t\t\t$size_img_send['width'] ?? 500,\n+\t\t\t\t\t\t$size_img_send['height'] ?? 300,\n+\t\t\t\t\t];\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t$size_img_setting = LP_Settings::get_option( 'course_thumbnail_dimensions', [] );\n+\t\t\t\t$size_img_send    = [\n+\t\t\t\t\t$size_img_setting['width'] ?? 500,\n+\t\t\t\t\t$size_img_setting['height'] ?? 300,\n+\t\t\t\t];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check cache before get image url\n+\t\t\t$cache     = new \\LP_Course_Cache();\n+\t\t\t$key_cache = 'image_url\u002F' . $courseModel->get_id();\n+\t\t\tif ( is_array( $size_img_send ) && count( $size_img_send ) === 2 ) {\n+\t\t\t\t$key_cache .= '\u002F' . implode( 'x', $size_img_send );\n+\t\t\t} elseif ( is_string( $size_img_send ) ) {\n+\t\t\t\t$key_cache .= '\u002F' . $size_img_send;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Set cache for image url\n+\t\t\t$course_img_url = $cache->get_cache( $key_cache );\n+\t\t\tif ( false === $course_img_url ) {\n+\t\t\t\t$course_img_url = $courseModel->get_image_url( $size_img_send );\n+\t\t\t\t$cache->set_cache( $key_cache, $course_img_url );\n+\t\t\t\t$cache->save_cache_keys( sprintf( 'image_urls\u002F%s', $courseModel->get_id() ), $key_cache );\n+\t\t\t}\n+\n+\t\t\t$content = sprintf(\n+\t\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\">',\n+\t\t\t\tesc_url_raw( $course_img_url ),\n+\t\t\t\t_x( 'course thumbnail', 'no course thumbnail', 'learnpress' )\n+\t\t\t);\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-image',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-img\">',\n+\t\t\t\t\t'content'     => $content,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get display instructor course.\n+\t *\n+\t * @param CourseModel $course\n+\t * @param bool $with_avatar\n+\t *\n+\t * @return string\n+\t * @since 4.2.5.8\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function html_instructor( $course, bool $with_avatar = false, $setting = [] ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$instructor = $course->get_author_model();\n+\t\t\tif ( ! $instructor ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\t\t\t$userTemplate             = new UserTemplate( 'instructor' );\n+\t\t\t$is_link                  = $setting['is_link'] ?? true;\n+\t\t\tif ( $is_link ) {\n+\t\t\t\t$attribute_target = ! empty( $setting['new_tab'] ) ? 'target=\"_blank\"' : '';\n+\t\t\t\t$link_instructor  = sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" %s >%s %s\u003C\u002Fa>',\n+\t\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t\t$attribute_target,\n+\t\t\t\t\t$with_avatar ? $userTemplate->html_avatar( $instructor ) : '',\n+\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$link_instructor = sprintf(\n+\t\t\t\t\t'%s %s',\n+\t\t\t\t\t$with_avatar ? $userTemplate->html_avatar( $instructor ) : '',\n+\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Finstructor-html',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-instructor\">',\n+\t\t\t\t\t'content'     => $link_instructor,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$course,\n+\t\t\t\t$instructor,\n+\t\t\t\t$with_avatar\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html regular price\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_regular_price( CourseModel $course ): string {\n+\t\t$price = learn_press_format_price( $course->get_regular_price() );\n+\t\t$price = apply_filters( 'learn-press\u002Fcourse\u002Fregular-price-html', $price, $course, $this );\n+\n+\t\treturn sprintf( '\u003Cspan class=\"origin-price\">%s\u003C\u002Fspan>', $price );\n+\t}\n+\n+\t\u002F**\n+\t * Get display price course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_price( $course ): string {\n+\t\t$price_html = '';\n+\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t}\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn $price_html;\n+\t\t}\n+\n+\t\tif ( $course->is_free() ) {\n+\t\t\tif ( '' != $course->get_sale_price() ) {\n+\t\t\t\t$price_html .= $this->html_regular_price( $course );\n+\t\t\t}\n+\n+\t\t\t$price_html .= sprintf( '\u003Cspan class=\"free\">%s\u003C\u002Fspan>', esc_html__( 'Free', 'learnpress' ) );\n+\t\t\t$price_html  = apply_filters( 'learn_press_course_price_html_free', $price_html, $this );\n+\t\t} elseif ( $course->has_no_enroll_requirement() ) {\n+\t\t\t$price_html .= '';\n+\t\t} else {\n+\t\t\tif ( $course->has_sale_price() ) {\n+\t\t\t\t$price_html .= $this->html_regular_price( $course );\n+\t\t\t}\n+\n+\t\t\t$price_html .= sprintf(\n+\t\t\t\t'\u003Cspan class=\"price\">%s\u003C\u002Fspan>',\n+\t\t\t\tlearn_press_format_price( $course->get_price(), true )\n+\t\t\t);\n+\t\t\t$price_html  = sprintf(\n+\t\t\t\t'%1$s %2$s %3$s',\n+\t\t\t\t$this->html_price_prefix( $course ),\n+\t\t\t\t$price_html,\n+\t\t\t\t$this->html_price_suffix( $course )\n+\t\t\t);\n+\t\t\t$price_html  = apply_filters(\n+\t\t\t\t'learn_press_course_price_html',\n+\t\t\t\t$price_html,\n+\t\t\t\t$course->has_sale_price(),\n+\t\t\t\t$course->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F @since 4.2.7\n+\t\t$price_html = sprintf( '\u003Cspan class=\"course-price\">\u003Cspan class=\"course-item-price\">%s\u003C\u002Fspan>\u003C\u002Fspan>', $price_html );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhtml-price', $price_html, $course );\n+\t}\n+\n+\t\u002F**\n+\t * Get deliver type\n+\t *\n+\t * @param CourseModel $course\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_capacity( CourseModel $course ): string {\n+\t\t$content = '';\n+\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cspan class=\"course-capacity\">' => '\u003C\u002Fspan>',\n+\t\t];\n+\t\t$capacity     = $course->get_meta_value_by_key( CoursePostModel::META_KEY_MAX_STUDENTS, 0 );\n+\n+\t\tif ( $capacity == 0 ) {\n+\t\t\t$content = __( 'Unlimited', 'learnpress' );\n+\t\t} else {\n+\t\t\t$content = sprintf( '%d %s', $capacity, _n( 'Student', 'Students', $capacity, 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Get display total student's course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.4\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function html_count_student( $course ): string {\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t}\n+\n+\t\tif ( empty( $course ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$count_student  = $course->get_total_user_enrolled_or_purchased();\n+\t\t$count_student += $course->get_fake_students();\n+\t\t$content        = sprintf( '%d %s', $count_student, _n( 'Student', 'Students', $count_student, 'learnpress' ) );\n+\t\t$html_wrapper   = [\n+\t\t\t'\u003Cdiv class=\"course-count-student\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $content );\n+\t}\n+\n+\t\u002F**\n+\t * Get display total lesson's course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t * @param string $item_type custom post type item\n+\t * @param bool $show_only_number\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_count_item( $course, string $item_type, bool $show_only_number = false ): string {\n+\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t}\n+\n+\t\tif ( empty( $course ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$info_total_items = $course->get_total_items();\n+\t\tif ( empty( $info_total_items ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$count_item = $info_total_items->{$item_type} ?? 0;\n+\n+\t\tif ( $show_only_number ) {\n+\t\t\t$content = $count_item;\n+\t\t} else {\n+\t\t\tswitch ( $item_type ) {\n+\t\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Lesson', 'Lessons', $count_item, 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Quiz', 'Quizzes', $count_item, 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'lp_assignment':\n+\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'Assignment', 'Assignments', $count_item, 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'lp_h5p':\n+\t\t\t\t\t$content = sprintf( '%d %s', $count_item, _n( 'H5P', 'H5Ps', $count_item, 'learnpress' ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$content = apply_filters( 'learn-press\u002Fsingle-course\u002Fi18n\u002Fcount-item', $count_item, $course, $item_type );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-count-item',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"course-count-item %s\">', $item_type ),\n+\t\t\t\t'content'     => $content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$course,\n+\t\t\t$item_type,\n+\t\t\t$count_item\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get html level course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_level( $course ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\t}\n+\n+\t\t\t$level = $course->get_meta_value_by_key( CoursePostModel::META_KEY_LEVEL, '' );\n+\t\t\tif ( empty( $level ) ) {\n+\t\t\t\t$level = 'all';\n+\t\t\t}\n+\n+\t\t\t$levels = lp_course_level();\n+\t\t\t$level  = $levels[ $level ] ?? $levels['all'];\n+\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'\u003Cspan class=\"course-level\">' => '\u003C\u002Fspan>',\n+\t\t\t];\n+\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $level );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html duration course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_duration( $course ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\t}\n+\n+\t\t\t$duration        = $course->get_meta_value_by_key( CoursePostModel::META_KEY_DURATION, '' );\n+\t\t\t$duration_arr    = explode( ' ', $duration );\n+\t\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\n+\t\t\t$duration_type   = $duration_arr[1] ?? '';\n+\t\t\tif ( empty( $duration_number ) ) {\n+\t\t\t\t$duration_str = __( 'Lifetime', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$duration_str = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\n+\t\t\t}\n+\n+\t\t\t$html_wrapper = [\n+\t\t\t\t'\u003Cspan class=\"course-duration\">' => '\u003C\u002Fspan>',\n+\t\t\t];\n+\t\t\t$content      = Template::instance()->nest_elements( $html_wrapper, $duration_str );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get feature review\n+\t *\n+\t * @param CourseModel $course\n+\t * @param UserModel|false $userModel\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function html_feature_review( CourseModel $course, $userModel = false, array $data = [] ): string {\n+\t\t$feature_review = $course->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURED_REVIEW, '' );\n+\t\tif ( empty( $feature_review ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $course->get_id(), true );\n+\t\t\tif ( $userCourseModel ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$stars = '';\n+\t\tforeach ( range( 1, 5 ) as $star ) {\n+\t\t\t$stars .= '\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>';\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-featured-review %s\">',\n+\t\t\t\tesc_attr( $data['lp_display_on'] ?? '' )\n+\t\t\t),\n+\t\t\t'title'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"featured-review__title\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Featured Review', 'learnpress' )\n+\t\t\t),\n+\t\t\t'stars'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"featured-review__stars\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$stars\n+\t\t\t),\n+\t\t\t'content'     => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"featured-review__content\">%s\u003C\u002Fdiv>',\n+\t\t\t\twp_kses_post( wpautop( $feature_review ) )\n+\t\t\t),\n+\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Get button external\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_btn_external( CourseModel $courseModel, $userModel ): string {\n+\t\t$external_link = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_EXTERNAL_LINK_BY_COURSE, '' );\n+\t\tif ( empty( $external_link ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t\u002F\u002F Check user has enrolled, finished or purchased course\n+\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t$userCourse = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\tif ( $userCourse && ( $userCourse->has_enrolled_or_finished() || $userCourse->has_purchased() ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$content = sprintf(\n+\t\t\t'\u003Ca href=\"%s\" class=\"lp-button course-btn-extra\" target=\"_blank\">%s\u003C\u002Fa>',\n+\t\t\tesc_url_raw( $external_link ),\n+\t\t\t__( 'Contact To Request', 'learnpress' )\n+\t\t);\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcourse\u002Fhtml-button-external', $content, $courseModel, $userModel );\n+\t}\n+\n+\t\u002F**\n+\t * HTML button purchase course\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param false|UserModel $userModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function html_btn_purchase_course( CourseModel $courseModel, $userModel ): string {\n+\t\t$html_btn     = '';\n+\t\t$can_purchase = $courseModel->can_purchase( $userModel );\n+\t\tif ( is_wp_error( $can_purchase ) ) {\n+\t\t\t$error_code_show = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase\u002Fshow-messages',\n+\t\t\t\t[]\n+\t\t\t);\n+\t\t\tif ( in_array( $can_purchase->get_error_code(), $error_code_show )\n+\t\t\t\t&& ! empty( $can_purchase->get_error_message() ) ) {\n+\t\t\t\t$html_btn = Template::print_message( $can_purchase->get_error_message(), 'warning', false );\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$html_btn = sprintf(\n+\t\t\t\t'\u003Cbutton class=\"lp-button button-purchase-course\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Buy Now', 'learnpress' )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( empty( $html_btn ) ) {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase\u002Fempty',\n+\t\t\t\t$html_btn,\n+\t\t\t\t$courseModel,\n+\t\t\t\t$userModel\n+\t\t\t);\n+\t\t}\n+\n+\t\t$class_guest_checkout = LP_Checkout::instance()->is_enable_guest_checkout() ? 'guest_checkout' : '';\n+\n+\t\t\u002F\u002F Hook action old\n+\t\t$html_hook_old = '';\n+\t\tif ( has_action( 'learn-press\u002Fafter-purchase-button' ) ) {\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fafter-purchase-button' );\n+\t\t\t$html_hook_old = ob_get_clean();\n+\t\t}\n+\n+\t\tif ( has_filter( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-purchase\u002Fcan-show' ) ) {\n+\t\t\t$user_id = 0;\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\t$user_id = $userModel->get_id();\n+\t\t\t}\n+\t\t\t$user_old   = learn_press_get_user( $user_id );\n+\t\t\t$course_old = learn_press_get_course( $courseModel->get_id() );\n+\t\t\t$can_show   = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-purchase\u002Fcan-show', true, $user_old, $course_old );\n+\t\t\tif ( ! $can_show ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End hook action old\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-purchase',\n+\t\t\t[\n+\t\t\t\t'form'     => sprintf(\n+\t\t\t\t\t'\u003Cform name=\"purchase-course\" class=\"purchase-course %s\" method=\"post\">',\n+\t\t\t\t\tesc_attr( $class_guest_checkout )\n+\t\t\t\t),\n+\t\t\t\t'input'    => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"purchase-course\" value=\"%d\"\u002F>',\n+\t\t\t\t\tesc_attr( $courseModel->get_id() )\n+\t\t\t\t),\n+\t\t\t\t'btn'      => $html_btn,\n+\t\t\t\t'hook_old' => $html_hook_old,\n+\t\t\t\t'form_end' => '\u003C\u002Fform>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML button enroll course\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param false|UserModel $userModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_btn_enroll_course( CourseModel $courseModel, $userModel ): string {\n+\t\t$html_btn   = '';\n+\t\t$can_enroll = $courseModel->can_enroll( $userModel );\n+\t\tif ( is_wp_error( $can_enroll ) ) {\n+\t\t\t$error_code_show = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-enroll\u002Fshow-messages',\n+\t\t\t\t[ 'course_is_no_required_enroll_not_login', 'course_out_of_stock' ]\n+\t\t\t);\n+\t\t\tif ( in_array( $can_enroll->get_error_code(), $error_code_show )\n+\t\t\t\t&& ! empty( $can_enroll->get_error_message() ) ) {\n+\t\t\t\t$html_btn = Template::print_message( $can_enroll->get_error_message(), 'warning', false );\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$html_btn = sprintf(\n+\t\t\t\t'\u003Cbutton type=\"submit\" class=\"lp-button button-enroll-course\">%s\u003C\u002Fbutton>',\n+\t\t\t\t__( 'Start Now', 'learnpress' )\n+\t\t\t);\n+\t\t}\n+\n+\t\tif ( empty( $html_btn ) ) {\n+\t\t\treturn $html_btn;\n+\t\t}\n+\n+\t\t\u002F\u002F Hook old\n+\t\t$html_hook_before_old = '';\n+\t\tif ( has_action( 'learn-press\u002Fbefore-enroll-button' ) ) {\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fbefore-enroll-button' );\n+\t\t\t$html_hook_before_old = ob_get_clean();\n+\t\t}\n+\n+\t\t$html_hook_after_old = '';\n+\t\tif ( has_action( 'learn-press\u002Fafter-enroll-button' ) ) {\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fafter-enroll-button' );\n+\t\t\t$html_hook_after_old = ob_get_clean();\n+\t\t}\n+\n+\t\tif ( has_filter( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show' ) ) {\n+\t\t\t$user_id = 0;\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\t$user_id = $userModel->get_id();\n+\t\t\t}\n+\t\t\t$user_old   = learn_press_get_user( $user_id );\n+\t\t\t$course_old = learn_press_get_course( $courseModel->get_id() );\n+\t\t\t$can_show   = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show', true, $user_old, $course_old );\n+\t\t\tif ( ! $can_show ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End hook old\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-enroll',\n+\t\t\t[\n+\t\t\t\t'form'            => '\u003Cform name=\"enroll-course\" class=\"enroll-course\" method=\"post\">',\n+\t\t\t\t'hook_before_old' => $html_hook_before_old,\n+\t\t\t\t'input'           => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"enroll-course\" value=\"%s\"\u002F>',\n+\t\t\t\t\tesc_attr( $courseModel->get_id() )\n+\t\t\t\t),\n+\t\t\t\t'btn'             => $html_btn,\n+\t\t\t\t'hook_after_old'  => $html_hook_after_old,\n+\t\t\t\t'form_end'        => '\u003C\u002Fform>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Sidebar\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t * @version 1.0.1\n+\t * @since 4.2.7\n+\t *\u002F\n+\tpublic function html_sidebar( CourseModel $courseModel, array $data = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( is_active_sidebar( 'course-sidebar' ) ) {\n+\t\t\t\tob_start();\n+\t\t\t\tdynamic_sidebar( 'course-sidebar' );\n+\t\t\t\t$sidebar_content = ob_get_clean();\n+\n+\t\t\t\t$section = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-sidebar',\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t\t\t\t'\u003Cdiv class=\"lp-single-course-sidebar %s\">',\n+\t\t\t\t\t\t\tesc_attr( $data['lp_display_on'] ?? '' )\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'content'     => $sidebar_content,\n+\t\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t],\n+\t\t\t\t\t$courseModel\n+\t\t\t\t);\n+\n+\t\t\t\t$html = Template::combine_components( $section );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML meta faqs\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_faqs( CourseModel $courseModel, array $data = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$show_heading = $data['show_heading'] ?? true;\n+\t\t\t$faqs         = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FAQS, [] );\n+\t\t\tif ( ! is_array( $faqs ) && ! is_object( $faqs ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t\tif ( empty( $faqs ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\tforeach ( $faqs as $faq ) {\n+\t\t\t\t$title       = $faq[0];\n+\t\t\t\t$description = $faq[1];\n+\t\t\t\tif ( empty( $title ) || empty( $description ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$key          = uniqid();\n+\t\t\t\t$section_item = [\n+\t\t\t\t\t'input_checkbox'    => sprintf(\n+\t\t\t\t\t\t'\u003Cinput type=\"checkbox\" name=\"course-faqs-box-ratio\" id=\"course-faqs-box-ratio-%s\">',\n+\t\t\t\t\t\t$key\n+\t\t\t\t\t),\n+\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-faqs-box\">',\n+\t\t\t\t\t'title'             => sprintf(\n+\t\t\t\t\t\t'\u003Clabel class=\"course-faqs-box__title\" for=\"course-faqs-box-ratio-%s\">%s\u003C\u002Flabel>',\n+\t\t\t\t\t\t$key,\n+\t\t\t\t\t\t$title\n+\t\t\t\t\t),\n+\t\t\t\t\t'content'           => '\u003Cdiv class=\"course-faqs-box__content\">',\n+\t\t\t\t\t'content_inner'     => '\u003Cdiv class=\"course-faqs-box__content-inner\">',\n+\t\t\t\t\t'content_main'      => wp_kses_post( $description ),\n+\t\t\t\t\t'content_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'content_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t];\n+\t\t\t\t$html        .= Template::combine_components( $section_item );\n+\t\t\t}\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-faqs',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-faqs course-tab-panel-faqs\">',\n+\t\t\t\t\t'title'       => $show_heading ? sprintf(\n+\t\t\t\t\t\t'\u003Ch3 class=\"course-faqs__title\">%s\u003C\u002Fh3>',\n+\t\t\t\t\t\t__( 'FAQs', 'learnpress' )\n+\t\t\t\t\t) : '',\n+\t\t\t\t\t'content'     => $html,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel\n+\t\t\t);\n+\t\t\t$html    = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML struct course box extra\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param $title\n+\t * @param string $html_list\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_course_box_extra( CourseModel $courseModel, $title, string $html_list ): string {\n+\t\tif ( empty( $html_list ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-course-box-extra',\n+\t\t\t[\n+\t\t\t\t'wrapper'           => '\u003Cdiv class=\"course-extra-box\">',\n+\t\t\t\t'title'             => sprintf( '\u003Ch3 class=\"course-extra-box__title\">%s\u003C\u002Fh3>', $title ),\n+\t\t\t\t'content'           => '\u003Cdiv class=\"course-extra-box__content\">',\n+\t\t\t\t'content_inner'     => '\u003Cdiv class=\"course-extra-box__content-inner\">',\n+\t\t\t\t'list'              => $html_list,\n+\t\t\t\t'content_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'content_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courseModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML meta requirements\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_requirements( CourseModel $courseModel ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$requirements = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_REQUIREMENTS, [] );\n+\t\t\tif ( ! is_array( $requirements ) && ! is_object( $requirements ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t\tif ( empty( $requirements ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$html_lis = '';\n+\t\t\tforeach ( $requirements as $requirement ) {\n+\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $requirement );\n+\t\t\t}\n+\n+\t\t\t$section_list = [\n+\t\t\t\t'wrapper'     => '\u003Cul>',\n+\t\t\t\t'content'     => $html_lis,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t\t];\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-requirements',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-requirements extra-box\">',\n+\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Requirements', 'learnpress' ) ),\n+\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel,\n+\t\t\t\t$requirements\n+\t\t\t);\n+\t\t\t$html    = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML meta features\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_features( CourseModel $courseModel ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$features = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURES, [] );\n+\t\t\tif ( ! is_array( $features ) && ! is_object( $features ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t\tif ( empty( $features ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$html_lis = '';\n+\t\t\tforeach ( $features as $feature ) {\n+\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $feature );\n+\t\t\t}\n+\n+\t\t\t$section_list = [\n+\t\t\t\t'wrapper'     => '\u003Cul>',\n+\t\t\t\t'content'     => $html_lis,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t\t];\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-features',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-features extra-box\">',\n+\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Features', 'learnpress' ) ),\n+\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel,\n+\t\t\t\t$features\n+\t\t\t);\n+\t\t\t$html    = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML meta target\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_target( CourseModel $courseModel ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$targets = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_TARGET, [] );\n+\t\t\tif ( ! is_array( $targets ) && ! is_object( $targets ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t\tif ( empty( $targets ) ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$html_lis = '';\n+\t\t\tforeach ( $targets as $target ) {\n+\t\t\t\t$html_lis .= sprintf( '\u003Cli>%s\u003C\u002Fli>', $target );\n+\t\t\t}\n+\n+\t\t\t$section_list = [\n+\t\t\t\t'wrapper'     => '\u003Cul>',\n+\t\t\t\t'content'     => $html_lis,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t\t];\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-target',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-target extra-box\">',\n+\t\t\t\t\t'title'       => sprintf( '\u003Ch3 class=\"extra-box__title\">%s\u003C\u002Fh3>', __( 'Target audiences', 'learnpress' ) ),\n+\t\t\t\t\t'content'     => Template::combine_components( $section_list ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel,\n+\t\t\t\t$targets\n+\t\t\t);\n+\t\t\t$html    = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML material\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function html_material( CourseModel $courseModel, $userModel = false, array $data = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$show_heading = $data['show_heading'] ?? true;\n+\t\t\t$can_show     = false;\n+\n+\t\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t\tif ( $courseModel->check_user_is_author( $userModel )\n+\t\t\t\t\t|| user_can( $userModel->get_id(), ADMIN_ROLE ) ) {\n+\t\t\t\t\t$can_show = true;\n+\t\t\t\t} else {\n+\t\t\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\t\t\tif ( $userCourseModel &&\n+\t\t\t\t\t\t( $userCourseModel->has_enrolled_or_finished()\n+\t\t\t\t\t\t\t|| $userCourseModel->has_purchased() ) ) {\n+\t\t\t\t\t\t$can_show = true;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} elseif ( $courseModel->has_no_enroll_requirement() ) {\n+\t\t\t\t$can_show = true;\n+\t\t\t}\n+\n+\t\t\t$can_show = apply_filters( 'learn-press\u002Fcourse-material\u002Fcan-show', $can_show, $courseModel, $userModel );\n+\n+\t\t\t$file_per_page = LP_Settings::get_option( 'material_file_per_page', - 1 );\n+\t\t\t$count_files   = LP_Material_Files_DB::getInstance()->get_total( $courseModel->get_id() );\n+\t\t\tif ( ! $can_show || $file_per_page == 0 || $count_files \u003C= 0 ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', [] );\n+\t\t\t$html_content = ob_get_clean();\n+\n+\t\t\t$section = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"course-material\">',\n+\t\t\t\t'title'       => $show_heading ? sprintf(\n+\t\t\t\t\t'\u003Ch3 class=\"course-material__title\">%s\u003C\u002Fh3>',\n+\t\t\t\t\t__( 'Course Material', 'learnpress' )\n+\t\t\t\t) : '',\n+\t\t\t\t'content'     => $html_content,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html level course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_price_prefix( $course ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $course instanceof LP_Course ) {\n+\t\t\t\t$course = CourseModel::find( $course->get_id(), true );\n+\t\t\t\tif ( ! $course instanceof CourseModel ) {\n+\t\t\t\t\treturn $html;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$price_prefix_str = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PRICE_PREFIX, '' );\n+\t\t\tif ( empty( $price_prefix_str ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"course-price-prefix\">%s\u003C\u002Fspan>', $price_prefix_str );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html level course.\n+\t *\n+\t * @param LP_Course|CourseModel $course\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_price_suffix( $course ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$price_suffix_str = $course->get_meta_value_by_key( CoursePostModel::META_KEY_PRICE_SUFFIX, '' );\n+\t\t\tif ( empty( $price_suffix_str ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"course-price-suffix\">%s\u003C\u002Fspan>', $price_suffix_str );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html featured course.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.9\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_featured( CourseModel $courseModel ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$is_featured = $courseModel->get_meta_value_by_key( CoursePostModel::META_KEY_FEATURED, 'no' );\n+\t\t\tif ( $is_featured !== 'yes' ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"course-featured\">%s\u003C\u002Fspan>', __( 'Featured', 'learnpress' ) );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * GET HTML comment default of WP\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param false|UserModel $userModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_comment( CourseModel $courseModel, $userModel = false ): string {\n+\t\t$args     = [\n+\t\t\t'id_url'    => 'course-comments',\n+\t\t\t'course_id' => $courseModel->get_id(),\n+\t\t\t'user_id'   => $userModel instanceof UserModel ? $userModel->get_id() : 0,\n+\t\t];\n+\t\t$callBack = [\n+\t\t\t'class'  => __CLASS__,\n+\t\t\t'method' => 'render_html_comments',\n+\t\t];\n+\t\t$html     = TemplateAJAX::load_content_via_ajax( $args, $callBack );\n+\n+\t\t$section_comment = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-course\u002Fhtml-comment',\n+\t\t\t[\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-course-comment\">',\n+\t\t\t\t'content'     => $html,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section_comment );\n+\t}\n+\n+\t\u002F**\n+\t * Render HTML comments of course.\n+\t *\n+\t * @param array $data ['course_id']\n+\t *\n+\t * @return stdClass\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function render_html_comments( array $data ): stdClass {\n+\t\t$response          = new stdClass();\n+\t\t$response->content = '';\n+\n+\t\ttry {\n+\t\t\t$course_id = $data['course_id'] ?? 0;\n+\t\t\t$user_id   = $data['user_id'] ?? 0;\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\treturn $response;\n+\t\t\t}\n+\n+\t\t\tglobal $withcomments, $post;\n+\n+\t\t\t$post = get_post( $course_id );\n+\t\t\tif ( $post->comment_status !== 'open' ) {\n+\t\t\t\treturn $response;\n+\t\t\t} else {\n+\t\t\t\t$withcomments = true;\n+\t\t\t}\n+\n+\t\t\t$withcomments = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-course\u002Frender-html-comment\u002Fis-show',\n+\t\t\t\t$withcomments,\n+\t\t\t\t$post,\n+\t\t\t\t$user_id\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F$post->comment_count = 0;\n+\n+\t\t\tob_start();\n+\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t\tcomments_template();\n+\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t\t$html              = ob_get_clean();\n+\t\t\t$response->content = $html;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->content = Template::print_message( $e->getMessage(), 'error', false );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Get HTML curriculum of course.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t * @param LessonPostModel|QuizPostModel|PostModel|mixed $itemModelCurrent\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function html_curriculum( CourseModel $courseModel, $userModel, $itemModelCurrent = false ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Get current item viewing\n+\t\t\t\u002F**\n+\t\t\t * @var $lp_course_item LP_Course_Item\n+\t\t\t * @var $post \\WP_Post\n+\t\t\t *\u002F\n+\t\t\tglobal $lp_course_item, $post;\n+\t\t\t\u002F**\n+\t\t\t * @var $itemModelCurrent LessonPostModel|QuizPostModel|AssignmentPostModel|PostModel...\n+\t\t\t *\u002F\n+\t\t\t$itemModelCurrent = $courseModel->get_item_model( $post->ID, $post->post_type );\n+\t\t\tif ( $lp_course_item ) {\n+\t\t\t\t$itemModelCurrent = $courseModel->get_item_model( $lp_course_item->get_id(), $lp_course_item->get_item_type() );\n+\t\t\t}\n+\n+\t\t\tif ( $itemModelCurrent ) {\n+\t\t\t\t$item_types = CourseModel::item_types_support();\n+\t\t\t\t\u002F\u002F Check item type is support\n+\t\t\t\tif ( in_array( $itemModelCurrent->post_type, $item_types ) ) {\n+\t\t\t\t\t$this->currentItemModel = $itemModelCurrent;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End get current item viewing\n+\n+\t\t\t$section_items = $courseModel->get_section_items();\n+\t\t\t$html          = Template::print_message(\n+\t\t\t\tesc_html__( 'There are no items in the curriculum yet.', 'learnpress' ),\n+\t\t\t\t'info',\n+\t\t\t\tfalse\n+\t\t\t);\n+\t\t\tif ( empty( $section_items ) ) {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\twp_enqueue_script( 'lp-curriculum' );\n+\t\t\t$li_section_items = '';\n+\t\t\tforeach ( $section_items as $section_item ) {\n+\t\t\t\t$li_section_items .= $this->render_html_section_item( $courseModel, $userModel, $section_item );\n+\t\t\t}\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fcourse\u002Fhtml-curriculum',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'                   => '\u003Cdiv class=\"lp-course-curriculum\">',\n+\t\t\t\t\t'title'                     => sprintf(\n+\t\t\t\t\t\t'\u003Ch3 class=\"lp-course-curriculum__title\">%s\u003C\u002Fh3>',\n+\t\t\t\t\t\tesc_html__( 'Curriculum', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t\t'curriculum_info'           => '\u003Cdiv class=\"course-curriculum-info\">',\n+\t\t\t\t\t'curriculum_info_left'      => '\u003Cul class=\"course-curriculum-info__left\">',\n+\t\t\t\t\t'count_sections'            => sprintf(\n+\t\t\t\t\t\t'\u003Cli class=\"course-count-section\">%s\u003C\u002Fli>',\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t_n( '%d Section', '%d Sections', $courseModel->get_total_sections(), 'learnpress' ),\n+\t\t\t\t\t\t\t$courseModel->get_total_sections()\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\t'count_lesson'              => sprintf(\n+\t\t\t\t\t\t'\u003Cli class=\"course-count-lesson\">%s\u003C\u002Fli>',\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t_n( '%d Lesson', '%d Lessons', $courseModel->count_items( LP_LESSON_CPT ), 'learnpress' ),\n+\t\t\t\t\t\t\t$courseModel->count_items( LP_LESSON_CPT )\n+\t\t\t\t\t\t)\n+\t\t\t\t\t),\n+\t\t\t\t\t'duration'                  => sprintf(\n+\t\t\t\t\t\t'\u003Cli class=\"course-duration\">%s\u003C\u002Fli>',\n+\t\t\t\t\t\t$this->html_duration( $courseModel )\n+\t\t\t\t\t),\n+\t\t\t\t\t'curriculum_info_left_end'  => '\u003C\u002Ful>',\n+\t\t\t\t\t'curriculum_info_right'     => '\u003Cdiv class=\"course-curriculum-info__right\">',\n+\t\t\t\t\t'expand_all'                => sprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"course-toggle-all-sections\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\tesc_html__( 'Expand all sections', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t\t'collapse_all'              => sprintf(\n+\t\t\t\t\t\t'\u003Cspan class=\"course-toggle-all-sections lp-collapse lp-hidden\">%s\u003C\u002Fspan>',\n+\t\t\t\t\t\tesc_html__( 'Collapse all sections', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t\t'curriculum_info_right_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'curriculum_info_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'curriculum'                => '\u003Cdiv class=\"course-curriculum\">',\n+\t\t\t\t\t'sections'                  => '\u003Cul class=\"course-sections\">',\n+\t\t\t\t\t'li_section_items'          => $li_section_items,\n+\t\t\t\t\t'sections_end'              => '\u003C\u002Ful>',\n+\t\t\t\t\t'curriculum_end'            => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'               => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courseModel,\n+\t\t\t\t$userModel,\n+\t\t\t\t$itemModelCurrent\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Render HTML section item\n+\t *\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t * @param $section_item object {section_id, section_name, section_description, items[{item_id, item_order, item_type, title, preview}]}\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function render_html_section_item( CourseModel $courseModel, $userModel, $section_item ): string {\n+\t\tif ( ! $section_item instanceof stdClass ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$section_id               = $section_item->section_id ?? 0;\n+\t\t$section_name             = $section_item->section_name ?? '';\n+\t\t$section_description      = $section_item->section_description ?? '';\n+\t\t$section_order            = $section_item->section_order ?? 1;\n+\t\t$items                    = $section_item->items ?? [];\n+\t\t$html_section_description = '';\n+\t\tif ( ! empty( $section_description ) ) {\n+\t\t\t$html_section_description = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-section__description\">%s\u003C\u002Fdiv>',\n+\t\t\t\twp_kses_post( $section_description )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section_header = [\n+\t\t\t'start'       => '\u003Cdiv class=\"course-section-header\">',\n+\t\t\t'toggle'      => '\u003Cdiv class=\"section-toggle\">\n+\t\t\t\t\u003Ci class=\"lp-icon-angle-down\">\u003C\u002Fi>\n+\t\t\t\t\u003Ci class=\"lp-icon-angle-up\">\u003C\u002Fi>\n+\t\t\t\u003C\u002Fdiv>',\n+\t\t\t'info'        => '\u003Cdiv class=\"course-section-info\">',\n+\t\t\t'title'       => sprintf( '\u003Cdiv class=\"course-section__title\">%s\u003C\u002Fdiv>', wp_kses_post( $section_name ) ),\n+\t\t\t'description' => $html_section_description,\n+\t\t\t'info_end'    => '\u003C\u002Fdiv>',\n+\t\t\t'count_items' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"section-count-items\">%d\u003C\u002Fdiv>',\n+\t\t\t\tcount( $items )\n+\t\t\t),\n+\t\t\t'end'         => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$li_items = '';\n+\t\tforeach ( $items as $item ) {\n+\t\t\t$li_items .= $this->render_html_course_item( $courseModel, $userModel, $item, $section_item );\n+\t\t}\n+\t\t$section_items = [\n+\t\t\t'start'    => '\u003Cul class=\"course-section__items\">',\n+\t\t\t'li_items' => $li_items,\n+\t\t\t'end'      => '\u003C\u002Ful>',\n+\t\t];\n+\n+\t\t$curriculum_display_setting = LP_Settings::get_option( 'curriculum_display', 'expand_first_section' );\n+\t\t$class_section_toggle       = '';\n+\n+\t\tif ( $this->currentItemModel ) {\n+\t\t\t$current_section = $courseModel->get_section_of_item( $this->currentItemModel->get_id() );\n+\t\t\tif ( $current_section != $section_id ) {\n+\t\t\t\t$class_section_toggle = 'lp-collapse';\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( $curriculum_display_setting === 'collapse_all' ) {\n+\t\t\t\t$class_section_toggle = 'lp-collapse';\n+\t\t\t} elseif ( $curriculum_display_setting === 'expand_first_section' ) {\n+\t\t\t\tif ( $section_order > 1 ) {\n+\t\t\t\t\t$class_section_toggle = 'lp-collapse';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$class_section_toggle = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-section-item\u002Fclass-section-toggle',\n+\t\t\t$class_section_toggle,\n+\t\t\t$courseModel,\n+\t\t\t$userModel,\n+\t\t\t$section_item\n+\t\t);\n+\n+\t\t$section_item = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-section-item',\n+\t\t\t[\n+\t\t\t\t'start'  => sprintf(\n+\t\t\t\t\t'\u003Cli class=\"course-section %s\" data-section-id=\"%s\">',\n+\t\t\t\t\t$class_section_toggle,\n+\t\t\t\t\t$section_id\n+\t\t\t\t),\n+\t\t\t\t'header' => Template::combine_components( $section_header ),\n+\t\t\t\t'items'  => Template::combine_components( $section_items ),\n+\t\t\t\t'end'    => '\u003C\u002Fli>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel,\n+\t\t\t$section_item\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section_item );\n+\t}\n+\n+\t\u002F**\n+\t * @param CourseModel $courseModel\n+\t * @param UserModel|false $userModel\n+\t * @param $item stdClass {item_id, item_order, item_type, title, preview}\n+\t * @param $section_item stdClass {section_id, section_name, section_description, items[{item_id, item_order, item_type, title, preview}]}\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function render_html_course_item( CourseModel $courseModel, $userModel, $item, $section_item ): string {\n+\t\t$html = '';\n+\n+\t\tif ( ! $item instanceof stdClass ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$item_id       = (int) ( $item->item_id ?? $item->id ?? 0 );\n+\t\t$item_order    = $item->item_order ?? $item->order ?? 0;\n+\t\t$item_type     = $item->item_type ?? $item->type ?? '';\n+\t\t$title         = $item->title ?? '';\n+\t\t$has_preview   = $item->preview ?? '';\n+\t\t$class_current = '';\n+\t\tif ( $this->currentItemModel ) {\n+\t\t\t$current_item_id = $this->currentItemModel->get_id();\n+\t\t\tif ( $current_item_id == $item_id ) {\n+\t\t\t\t$class_current = 'current';\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002FLP_Course_Item::get_item( $item_id, $course->get_id() );\n+\t\t$itemModel = $courseModel->get_item_model( $item_id, $item_type );\n+\t\tif ( empty( $itemModel ) ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$link_item = $courseModel->get_item_link( $item_id, $item_type );\n+\n+\t\t$item_duration      = '';\n+\t\t$html_item_duration = '';\n+\t\tif ( is_callable( [ $itemModel, 'get_duration' ] ) ) {\n+\t\t\t$item_duration = $itemModel->get_duration();\n+\t\t} else {\n+\t\t\t$item_duration = get_post_meta( $item_id, '_lp_duration', true );\n+\t\t}\n+\n+\t\t$duration_arr    = explode( ' ', $item_duration );\n+\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\n+\t\t$duration_type   = $duration_arr[1] ?? '';\n+\n+\t\tif ( $duration_number > 0 ) {\n+\t\t\t$item_duration_plural = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\n+\n+\t\t\t$html_item_duration = sprintf(\n+\t\t\t\t'\u003Cspan class=\"duration\">%s\u003C\u002Fspan>',\n+\t\t\t\t$item_duration_plural\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F\u002F Count question of quiz\n+\t\t$html_item_count_questions = '';\n+\t\tif ( $item_type === LP_QUIZ_CPT ) {\n+\t\t\t$quizPostModel = QuizPostModel::find( $item_id, true );\n+\t\t\tif ( $quizPostModel instanceof QuizPostModel ) {\n+\t\t\t\t$question_count      = $quizPostModel->count_questions();\n+\t\t\t\t$html_item_duration .= sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"question-count\">%s\u003C\u002Fspan>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t_n( '%d Question', '%d Questions', $question_count, 'learnpress' ),\n+\t\t\t\t\t\t$question_count\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\t$user_item_status_ico_flag = 'locked';\n+\t\t$user_attended_course      = false;\n+\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t\tif ( $userCourseModel\n+\t\t\t\t&& $userCourseModel->get_status() !== UserItemModel::STATUS_CANCEL\n+\t\t\t\t&& $userCourseModel->get_status() !== UserCourseModel::STATUS_PURCHASED ) {\n+\t\t\t\t$user_attended_course = true;\n+\n+\t\t\t\t\u002F\u002F Check status of item's course\n+\t\t\t\t$userCourseItem = $userCourseModel->get_item_attend( $item_id, $item_type );\n+\t\t\t\tif ( ! $userCourseItem instanceof UserItemModel ) {\n+\t\t\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\n+\t\t\t\t} else {\n+\t\t\t\t\t$user_item_status_ico_flag = $userCourseItem->get_status();\n+\t\t\t\t\t$user_item_graduation      = $userCourseItem->get_graduation();\n+\t\t\t\t\tif ( ! empty( $user_item_graduation ) ) {\n+\t\t\t\t\t\t$user_item_status_ico_flag = $user_item_graduation . ' completed';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( empty( $user_item_status_ico_flag ) ) {\n+\t\t\t\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $user_item_status_ico_flag === UserItemModel::GRADUATION_IN_PROGRESS ) {\n+\t\t\t\t\tif ( $userCourseModel->get_time_remaining() === 0 ) {\n+\t\t\t\t\t\t$user_item_status_ico_flag = 'locked';\n+\t\t\t\t\t} elseif ( $userCourseModel->get_status() === UserItemModel::STATUS_FINISHED\n+\t\t\t\t\t\t\t\t&& $courseModel->enable_block_when_finished() ) {\n+\t\t\t\t\t\t$user_item_status_ico_flag = 'locked';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $has_preview && ! $user_attended_course ) {\n+\t\t\t$user_item_status_ico_flag = 'preview';\n+\t\t}\n+\n+\t\tif ( $courseModel->has_no_enroll_requirement()\n+\t\t\t&& ! $user_attended_course && ! $userModel ) {\n+\t\t\t$user_item_status_ico_flag = UserItemModel::GRADUATION_IN_PROGRESS;\n+\t\t}\n+\n+\t\t$user_item_status_ico_flag = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fitem\u002Fstatus-ico-flag',\n+\t\t\t$user_item_status_ico_flag,\n+\t\t\t$courseModel,\n+\t\t\t$userModel,\n+\t\t\t$item,\n+\t\t\t$section_item\n+\t\t);\n+\n+\t\t$html_item_status = sprintf(\n+\t\t\t'\u003Cdiv class=\"course-item__status\">\u003Cspan class=\"course-item-ico %1$s\">\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t$user_item_status_ico_flag\n+\t\t);\n+\n+\t\t$html_item_right = [];\n+\t\tif ( $html_item_count_questions != '' || $html_item_duration != '' ) {\n+\t\t\t$html_item_right = [\n+\t\t\t\t'item_right'     => '\u003Cdiv class=\"course-item__right\">',\n+\t\t\t\t'question_count' => $html_item_count_questions,\n+\t\t\t\t'duration'       => $html_item_duration,\n+\t\t\t\t'item_right_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t}\n+\n+\t\t$section_item = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-course-item',\n+\t\t\t[\n+\t\t\t\t'start'            => sprintf(\n+\t\t\t\t\t'\u003Cli class=\"course-item %s\" data-item-id=\"%s\" data-item-order=\"%s\" data-item-type=\"%s\">',\n+\t\t\t\t\t$class_current,\n+\t\t\t\t\t$item_id,\n+\t\t\t\t\t$item_order,\n+\t\t\t\t\t$item_type\n+\t\t\t\t),\n+\t\t\t\t'link'             => sprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\" class=\"course-item__link\">',\n+\t\t\t\t\tesc_url_raw( $link_item )\n+\t\t\t\t),\n+\t\t\t\t'item_info'        => '\u003Cdiv class=\"course-item__info\">',\n+\t\t\t\t'icon'             => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"course-item-ico %s\">\u003C\u002Fspan>',\n+\t\t\t\t\tesc_attr( $item_type )\n+\t\t\t\t),\n+\t\t\t\t'item_order'       => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"course-item-order lp-hidden\">%s.%s\u003C\u002Fspan>',\n+\t\t\t\t\t$section_item->section_order,\n+\t\t\t\t\t$item_order\n+\t\t\t\t),\n+\t\t\t\t'item_info_end'    => '\u003C\u002Fdiv>',\n+\t\t\t\t'item_content'     => '\u003Cdiv class=\"course-item__content\">',\n+\t\t\t\t'item_left'        => '\u003Cdiv class=\"course-item__left\">',\n+\t\t\t\t'title'            => sprintf( '\u003Cdiv class=\"course-item-title\">%s\u003C\u002Fdiv>', wp_kses_post( $title ) ),\n+\t\t\t\t'item_left_end'    => '\u003C\u002Fdiv>',\n+\t\t\t\t'item_right'       => Template::combine_components( $html_item_right ),\n+\t\t\t\t'item_content_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'status'           => $html_item_status,\n+\t\t\t\t'link_end'         => '\u003C\u002Fa>',\n+\t\t\t\t'end'              => '\u003C\u002Fli>',\n+\t\t\t],\n+\t\t\t$courseModel,\n+\t\t\t$userModel,\n+\t\t\t$item,\n+\t\t\t$section_item\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section_item );\n+\t}\n+\n+\t\u002F**\n+\t * Render string to data content\n+\t *\n+\t * @param CourseModel $course\n+\t * @param string $data_content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render_data( CourseModel $course, string $data_content = '' ): string {\n+\t\t$author_of_course         = $course->get_author_model();\n+\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\t\u002F\u002F render count items\n+\t\t$pattern_count_items = '\u002F{{course_count_.*?}}\u002F';\n+\t\tpreg_match_all( $pattern_count_items, $data_content, $matches_count_items );\n+\t\tif ( ! empty( $matches_count_items ) ) {\n+\t\t\t$items = $matches_count_items[0];\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t$method         = str_replace( [ '{{', '}}' ], '', $item );\n+\t\t\t\t$post_type_item = str_replace( 'course_count_', '', $method );\n+\t\t\t\t$data_content   = str_replace( $item, $this->html_count_item( $course, $post_type_item ), $data_content );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn str_replace(\n+\t\t\t[\n+\t\t\t\t'{{course_id}}',\n+\t\t\t\t'{{course_title}}',\n+\t\t\t\t'{{course_image}}',\n+\t\t\t\t'{{course_url}}',\n+\t\t\t\t'{{course_short_description}}',\n+\t\t\t\t'{{course_price}}',\n+\t\t\t\t'{{course_categories}}',\n+\t\t\t\t'{{course_count_student}}',\n+\t\t\t\t'{{course_author_display_name}}',\n+\t\t\t\t'{{course_author_url}}',\n+\t\t\t\t'{{course_author_avatar}}',\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t$course->get_id(),\n+\t\t\t\t$this->html_title( $course ),\n+\t\t\t\t$this->html_image( $course ),\n+\t\t\t\t$course->get_permalink(),\n+\t\t\t\t$this->html_short_description( $course ),\n+\t\t\t\t$this->html_price( $course ),\n+\t\t\t\t$this->html_categories( $course ),\n+\t\t\t\t$this->html_count_student( $course ),\n+\t\t\t\t$singleInstructorTemplate->html_display_name( $author_of_course ),\n+\t\t\t\t$author_of_course->get_url_instructor(),\n+\t\t\t\t$singleInstructorTemplate->html_avatar( $author_of_course ),\n+\t\t\t],\n+\t\t\t$data_content\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get text button read more of course on list courses.\n+\t *\n+\t * @param CourseModel $courseModel\n+\t *\n+\t * @return string\n+\t * @since 4.3.4\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function text_button_course( CourseModel $courseModel ): string {\n+\t\t$btn_text  = __( 'Enroll Now', 'learnpress' );\n+\t\t$userModel = UserModel::find( get_current_user_id(), true );\n+\n+\t\t$userCourseModel = null;\n+\t\tif ( $userModel instanceof UserModel ) {\n+\t\t\t$userCourseModel = UserCourseModel::find( $userModel->get_id(), $courseModel->get_id(), true );\n+\t\t}\n+\n+\t\tif ( $userCourseModel instanceof UserCourseModel ) {\n+\t\t\tif ( $userCourseModel->has_enrolled() ) {\n+\t\t\t\t$btn_text = __( 'Continue Learning', 'learnpress' );\n+\t\t\t} elseif ( $userCourseModel->has_purchased() ) {\n+\t\t\t\t$btn_text = __( 'Start Learning', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$btn_text = __( 'View Detail', 'learnpress' );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( $courseModel->has_no_enroll_requirement() ) {\n+\t\t\t\t$btn_text = __( 'Start Learning', 'learnpress' );\n+\t\t\t} elseif ( ! $courseModel->is_free() ) {\n+\t\t\t\t$btn_text = __( 'Buy Now', 'learnpress' );\n+\t\t\t} elseif ( ! empty( $courseModel->get_external_link() ) ) {\n+\t\t\t\t$btn_text = __( 'View Detail', 'learnpress' );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $btn_text;\n+\t}\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks: CourseBuilder\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FInstructor\u002FListInstructorsTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FInstructor\u002FListInstructorsTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FInstructor\u002FListInstructorsTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FInstructor\u002FListInstructorsTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,244 +1,244 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks List Instructors.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Instructor;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Assets;\r\n-use LP_Helper;\r\n-use LP_Page_Controller;\r\n-use LP_User;\r\n-use LP_WP_Filesystem;\r\n-use Throwable;\r\n-use WP_Query;\r\n-\r\n-class ListInstructorsTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Flist-instructors\u002Flayout', [ $this, 'sections' ] );\r\n-\t\tadd_action( 'wp_head', [ $this, 'add_internal_scripts_to_head' ] );\r\n-\t}\r\n-\r\n-\tpublic function add_internal_scripts_to_head() {\r\n-\t\tif ( ! class_exists( 'LP_Page_Controller' ) || ! LP_Page_Controller::is_page_instructors() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tLP_Helper::print_inline_script_tag( 'lpSkeletonParam', lp_archive_skeleton_get_args(), [ 'id' => 'lpSkeletonParam' ] );\r\n-\t\t?>\r\n-\t\t\u003Cscript id=\"lp-list-instructors-data\">\r\n-\t\t\tconst lpInstructorsUrl = '\u003C?php echo learn_press_get_page_link( 'instructors' ); ?>';\r\n-\t\t\tconst urlListInstructorsAPI = '\u003C?php echo site_url( 'wp-json\u002Flp\u002Fv1\u002Finstructors' ); ?>';\r\n-\t\t\u003C\u002Fscript>\r\n-\t\t\u003C?php\r\n-\t\t$is_rtl = is_rtl() ? '-rtl' : '';\r\n-\t\t$min    = LP_Assets::$_min_assets;\r\n-\t\t?>\r\n-\t\t\u003Cstyle id=\"lp-list-instructors\">\r\n-\t\t\t\u003C?php echo wp_remote_fopen( LP_Assets::instance()->url( 'css\u002Finstructors' . $is_rtl . $min . '.css' ) ); ?>\r\n-\t\t\u003C\u002Fstyle>\r\n-\t\t\u003Cscript id=\"lp-list-instructors\" async data-wp-strategy=\"async\" >\r\n-\t\t\t\u003C?php \u002F\u002Fecho wp_remote_fopen( LP_Assets::instance()->url( 'js\u002Fdist\u002Ffrontend\u002Finstructors' . $min . '.js' ) ); ?>\r\n-\t\t\t\u003C?php echo LP_WP_Filesystem::instance()->file_get_contents( LP_PLUGIN_PATH . 'assets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors' . $min . '.js' ); ?>\r\n-\t\t\u003C\u002Fscript>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * List section of layout.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function sections( array $data = [] ) {\r\n-\t\tif ( ! LP_Page_Controller::is_page_instructors() ) {\r\n-\t\t\twp_enqueue_style( 'lp-instructors' );\r\n-\t\t\twp_enqueue_script( 'lp-instructors' );\r\n-\t\t}\r\n-\t\t\u002F**\r\n-\t\t * @var WP_Query $wp_query\r\n-\t\t *\u002F\r\n-\t\tglobal $wp_query;\r\n-\r\n-\t\ttry {\r\n-\t\t\tob_start();\r\n-\t\t\t?>\r\n-\t\t\t\u003Cul class=\"ul-list-instructors\">\r\n-\t\t\t\t\u003C?php lp_skeleton_animation_html( 10 ); ?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$skeleton = ob_get_clean();\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-instructors\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-content-area\">',\r\n-\t\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-list-instructors\">',\r\n-\t\t\t\t\t'skeleton'          => $skeleton,\r\n-\t\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$data\r\n-\t\t\t);\r\n-\r\n-\t\t\techo Template::combine_components( $sections );\r\n-\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get instructor item.\r\n-\t *\r\n-\t * @param UserModel $instructor\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function instructor_item( UserModel $instructor ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\t\t$items = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'img'      => $singleInstructorTemplate->html_avatar( $instructor ),\r\n-\t\t\t\t\t'name'     => sprintf(\r\n-\t\t\t\t\t\t'\u003Ca class=\"instructor-name\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'info'     => $this->instructor_item_info( $instructor ),\r\n-\t\t\t\t\t'btn_view' => $singleInstructorTemplate->html_button_view( $instructor ),\r\n-\t\t\t\t],\r\n-\t\t\t\t$instructor,\r\n-\t\t\t\t$singleInstructorTemplate\r\n-\t\t\t);\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cli class=\"item-instructor\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $items ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fli>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$instructor\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get instructor info: total courses, total students.\r\n-\t *\r\n-\t * @param UserModel $instructor\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function instructor_item_info( UserModel $instructor ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-\r\n-\t\t\t$html_total_courses = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-count-courses\">\u003Cspan class=\"lp-ico lp-icon-book-open\">\u003C\u002Fspan> %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$singleInstructorTemplate->html_count_courses( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_total_students = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-count-students\">\u003Cspan class=\"lp-ico lp-icon-students\">\u003C\u002Fspan> %s\u003C\u002Fdiv>',\r\n-\t\t\t\t$singleInstructorTemplate->html_count_students( $instructor )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$items = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Finfo\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'total_courses'  => $html_total_courses,\r\n-\t\t\t\t\t'total_students' => $html_total_students,\r\n-\t\t\t\t],\r\n-\t\t\t\t$instructor,\r\n-\t\t\t\t$singleInstructorTemplate\r\n-\t\t\t);\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fwrapper',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"instructor-info\">',\r\n-\t\t\t\t\t'content'     => Template::combine_components( $items ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$instructor\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination of list instructor.\r\n-\t *\r\n-\t * @param int $page\r\n-\t * @param int $limit\r\n-\t * @param int $total_courses\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function instructors_pagination( int $page, int $limit, int $total_courses ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\t$instructors_page_id  = learn_press_get_page_id( 'instructors' );\r\n-\t\t$instructors_page_url = trailingslashit( get_permalink( $instructors_page_id ) );\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total_pages     = \\LP_Database::get_total_pages( $limit, $total_courses );\r\n-\t\t\t$data_pagination = array(\r\n-\t\t\t\t'total'    => $total_pages,\r\n-\t\t\t\t'current'  => max( 1, $page ),\r\n-\t\t\t\t'base'     => esc_url_raw( trailingslashit( $instructors_page_url . 'page\u002F%#%' ) ),\r\n-\t\t\t\t'format'   => '',\r\n-\t\t\t\t'per_page' => $limit,\r\n-\t\t\t);\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_frontend_template( 'shared\u002Fpagination.php', $data_pagination );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks List Instructors.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Instructor;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LP_Assets;\n+use LP_Helper;\n+use LP_Page_Controller;\n+use LP_User;\n+use LP_WP_Filesystem;\n+use Throwable;\n+use WP_Query;\n+\n+class ListInstructorsTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Flist-instructors\u002Flayout', [ $this, 'sections' ] );\n+\t\tadd_action( 'wp_head', [ $this, 'add_internal_scripts_to_head' ] );\n+\t}\n+\n+\tpublic function add_internal_scripts_to_head() {\n+\t\tif ( ! class_exists( 'LP_Page_Controller' ) || ! LP_Page_Controller::is_page_instructors() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tLP_Helper::print_inline_script_tag( 'lpSkeletonParam', lp_archive_skeleton_get_args(), [ 'id' => 'lpSkeletonParam' ] );\n+\t\t?>\n+\t\t\u003Cscript id=\"lp-list-instructors-data\">\n+\t\t\tconst lpInstructorsUrl = '\u003C?php echo learn_press_get_page_link( 'instructors' ); ?>';\n+\t\t\tconst urlListInstructorsAPI = '\u003C?php echo site_url( 'wp-json\u002Flp\u002Fv1\u002Finstructors' ); ?>';\n+\t\t\u003C\u002Fscript>\n+\t\t\u003C?php\n+\t\t$is_rtl = is_rtl() ? '-rtl' : '';\n+\t\t$min    = LP_Assets::$_min_assets;\n+\t\t?>\n+\t\t\u003Cstyle id=\"lp-list-instructors\">\n+\t\t\t\u003C?php echo wp_remote_fopen( LP_Assets::instance()->url( 'css\u002Finstructors' . $is_rtl . $min . '.css' ) ); ?>\n+\t\t\u003C\u002Fstyle>\n+\t\t\u003Cscript id=\"lp-list-instructors\" async data-wp-strategy=\"async\" >\n+\t\t\t\u003C?php \u002F\u002Fecho wp_remote_fopen( LP_Assets::instance()->url( 'js\u002Fdist\u002Ffrontend\u002Finstructors' . $min . '.js' ) ); ?>\n+\t\t\t\u003C?php echo LP_WP_Filesystem::instance()->file_get_contents( LP_PLUGIN_PATH . 'assets\u002Fjs\u002Fdist\u002Ffrontend\u002Finstructors' . $min . '.js' ); ?>\n+\t\t\u003C\u002Fscript>\n+\t\t\u003C?php\n+\t}\n+\n+\t\u002F**\n+\t * List section of layout.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t * @version 1.0.0\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function sections( array $data = [] ) {\n+\t\tif ( ! LP_Page_Controller::is_page_instructors() ) {\n+\t\t\twp_enqueue_style( 'lp-instructors' );\n+\t\t\twp_enqueue_script( 'lp-instructors' );\n+\t\t}\n+\t\t\u002F**\n+\t\t * @var WP_Query $wp_query\n+\t\t *\u002F\n+\t\tglobal $wp_query;\n+\n+\t\ttry {\n+\t\t\tob_start();\n+\t\t\t?>\n+\t\t\t\u003Cul class=\"ul-list-instructors\">\n+\t\t\t\t\u003C?php lp_skeleton_animation_html( 10 ); ?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C?php\n+\t\t\t$skeleton = ob_get_clean();\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-instructors\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-content-area\">',\n+\t\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-list-instructors\">',\n+\t\t\t\t\t'skeleton'          => $skeleton,\n+\t\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$data\n+\t\t\t);\n+\n+\t\t\techo Template::combine_components( $sections );\n+\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Get instructor item.\n+\t *\n+\t * @param UserModel $instructor\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function instructor_item( UserModel $instructor ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\t\t$items = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'img'      => $singleInstructorTemplate->html_avatar( $instructor ),\n+\t\t\t\t\t'name'     => sprintf(\n+\t\t\t\t\t\t'\u003Ca class=\"instructor-name\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t\t\t$singleInstructorTemplate->html_display_name( $instructor )\n+\t\t\t\t\t),\n+\t\t\t\t\t'info'     => $this->instructor_item_info( $instructor ),\n+\t\t\t\t\t'btn_view' => $singleInstructorTemplate->html_button_view( $instructor ),\n+\t\t\t\t],\n+\t\t\t\t$instructor,\n+\t\t\t\t$singleInstructorTemplate\n+\t\t\t);\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cli class=\"item-instructor\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $items ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fli>',\n+\t\t\t\t],\n+\t\t\t\t$instructor\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get instructor info: total courses, total students.\n+\t *\n+\t * @param UserModel $instructor\n+\t *\n+\t * @return string\n+\t * @version 1.0.1\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function instructor_item_info( UserModel $instructor ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+\n+\t\t\t$html_total_courses = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-count-courses\">\u003Cspan class=\"lp-ico lp-icon-book-open\">\u003C\u002Fspan> %s\u003C\u002Fdiv>',\n+\t\t\t\t$singleInstructorTemplate->html_count_courses( $instructor )\n+\t\t\t);\n+\n+\t\t\t$html_total_students = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-count-students\">\u003Cspan class=\"lp-ico lp-icon-students\">\u003C\u002Fspan> %s\u003C\u002Fdiv>',\n+\t\t\t\t$singleInstructorTemplate->html_count_students( $instructor )\n+\t\t\t);\n+\n+\t\t\t$items = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Finfo\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'total_courses'  => $html_total_courses,\n+\t\t\t\t\t'total_students' => $html_total_students,\n+\t\t\t\t],\n+\t\t\t\t$instructor,\n+\t\t\t\t$singleInstructorTemplate\n+\t\t\t);\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Flist-instructors\u002Finstructor_item\u002Fwrapper',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"instructor-info\">',\n+\t\t\t\t\t'content'     => Template::combine_components( $items ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$instructor\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Pagination of list instructor.\n+\t *\n+\t * @param int $page\n+\t * @param int $limit\n+\t * @param int $total_courses\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function instructors_pagination( int $page, int $limit, int $total_courses ): string {\n+\t\t$content = '';\n+\n+\t\t$instructors_page_id  = learn_press_get_page_id( 'instructors' );\n+\t\t$instructors_page_url = trailingslashit( get_permalink( $instructors_page_id ) );\n+\n+\t\ttry {\n+\t\t\t$total_pages     = \\LP_Database::get_total_pages( $limit, $total_courses );\n+\t\t\t$data_pagination = array(\n+\t\t\t\t'total'    => $total_pages,\n+\t\t\t\t'current'  => max( 1, $page ),\n+\t\t\t\t'base'     => esc_url_raw( trailingslashit( $instructors_page_url . 'page\u002F%#%' ) ),\n+\t\t\t\t'format'   => '',\n+\t\t\t\t'per_page' => $limit,\n+\t\t\t);\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_frontend_template( 'shared\u002Fpagination.php', $data_pagination );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,459 +1,442 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Instructor.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Instructor;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Services\\UserService;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\UserTemplate;\r\n-use LP_Course_Filter;\r\n-use LP_Settings;\r\n-use LP_User;\r\n-use Throwable;\r\n-\r\n-class SingleInstructorTemplate extends UserTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tpublic function __construct( $class_name = 'instructor' ) {\r\n-\t\tparent::__construct( $class_name );\r\n-\t\t$this->init();\r\n-\t}\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fsingle-instructor\u002Flayout', [ $this, 'sections' ] );\r\n-\t\t\u002F\u002Fadd_action( 'wp_head', [ $this, 'add_internal_style_to_head' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html total courses of instructor.\r\n-\t *\r\n-\t * @param LP_User|UserModel $instructor\r\n-\t * @param string $hidden\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.4\r\n-\t *\u002F\r\n-\tpublic function html_count_courses( $instructor, $hidden = '' ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $instructor instanceof LP_User ) {\r\n-\t\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var UserModel $instructor\r\n-\t\t\t *\u002F\r\n-\t\t\t$instructor_statistic = $instructor->get_instructor_statistic();\r\n-\t\t\t$html                 = sprintf(\r\n-\t\t\t\t'%d %s',\r\n-\t\t\t\t$instructor_statistic['published_course'],\r\n-\t\t\t\t_n( 'Course', 'Courses', $instructor_statistic['published_course'], 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\tif ( $hidden === 'text' ) {\r\n-\t\t\t\t$html = $instructor_statistic['published_course'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = [\r\n-\t\t\t\t'wrapper'     => '\u003Cspan class=\"instructor-total-courses\">',\r\n-\t\t\t\t'content'     => $html,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html total students learn instructor.\r\n-\t *\r\n-\t * @param LP_User|UserModel $instructor\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.1\r\n-\t * @since 4.2.4\r\n-\t *\u002F\r\n-\tpublic function html_count_students( $instructor, $hidden = '' ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $instructor instanceof LP_User ) {\r\n-\t\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var UserModel $instructor\r\n-\t\t\t *\u002F\r\n-\t\t\t$instructor_statistic = $instructor->get_instructor_statistic();\r\n-\t\t\t$html                 = sprintf(\r\n-\t\t\t\t'%d %s',\r\n-\t\t\t\t$instructor_statistic['total_student'],\r\n-\t\t\t\t_n( 'Student', 'Students', $instructor_statistic['total_student'], 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\tif ( $hidden === 'text' ) {\r\n-\t\t\t\t$html = $instructor_statistic['total_student'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = [\r\n-\t\t\t\t'wrapper'     => '\u003Cspan class=\"instructor-total-students\">',\r\n-\t\t\t\t'content'     => $html,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get button view instructor.\r\n-\t *\r\n-\t * @param LP_User|UserModel|false $instructor\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function html_button_view( $instructor ): string {\r\n-\t\t$btn_view = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$btn_view = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\" class=\"instructor-btn-view\">%s\u003C\u002Fa>',\r\n-\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t__( 'View Profile', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $btn_view;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render string to data content\r\n-\t *\r\n-\t * @param UserModel|LP_User $instructor\r\n-\t * @param string $data_content\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function render_data( $instructor, string $data_content = '' ): string {\r\n-\t\tif ( $instructor instanceof LP_User ) {\r\n-\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\t$data_render = str_replace(\r\n-\t\t\t[\r\n-\t\t\t\t'{{instructor_id}}',\r\n-\t\t\t\t'{{instructor_avatar}}',\r\n-\t\t\t\t'{{instructor_display_name}}',\r\n-\t\t\t\t'{{instructor_description}}',\r\n-\t\t\t\t'{{instructor_total_courses}}',\r\n-\t\t\t\t'{{instructor_total_students}}',\r\n-\t\t\t\t'{{instructor_social}}',\r\n-\t\t\t\t'{{instructor_url}}',\r\n-\t\t\t],\r\n-\t\t\t[\r\n-\t\t\t\t$instructor->get_id(),\r\n-\t\t\t\t$this->html_avatar( $instructor ),\r\n-\t\t\t\t$this->html_display_name( $instructor ),\r\n-\t\t\t\t$this->html_description( $instructor ),\r\n-\t\t\t\t$this->html_count_courses( $instructor ),\r\n-\t\t\t\t$this->html_count_students( $instructor ),\r\n-\t\t\t\t$this->html_social( $instructor ),\r\n-\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t],\r\n-\t\t\t$data_content\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fsingle-instructor\u002Frender-data', $data_render, $instructor, $data_content );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * List section of layout.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function sections( array $data = [] ) {\r\n-\t\twp_enqueue_style( 'lp-instructor' );\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( isset( $data['instructor_id'] ) ) {\r\n-\t\t\t\t$instructor_id = (int) $data['instructor_id'];\r\n-\t\t\t\t$instructor    = UserModel::find( $instructor_id, true );\r\n-\t\t\t} else {\r\n-\t\t\t\t$instructor = $this->detect_instructor_by_page();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-instructor\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-content-area\">',\r\n-\t\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-instructor\">',\r\n-\t\t\t\t\t'info'              => $this->info( $instructor ),\r\n-\t\t\t\t\t'courses'           => $this->section_list_courses( $instructor ),\r\n-\t\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$instructor\r\n-\t\t\t);\r\n-\r\n-\t\t\techo Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Detected single instructor Page.\r\n-\t *\r\n-\t * @return false|UserModel\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function detect_instructor_by_page() {\r\n-\t\t$instructor = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$userModelCurrent = UserModel::find( get_current_user_id(), true );\r\n-\t\t\tif ( get_query_var( 'is_single_instructor' ) ) {\r\n-\t\t\t\t$instructor_name = get_query_var( 'instructor_name' );\r\n-\t\t\t\tif ( $instructor_name && 'page' !== $instructor_name ) {\r\n-\t\t\t\t\t\u002F\u002F Try to get user by pretty slug first, if not found, get by slug.\r\n-\t\t\t\t\t$userModel = UserService::instance()->get_user_by_pretty_slug( $instructor_name );\r\n-\t\t\t\t\tif ( $userModel instanceof UserModel ) {\r\n-\t\t\t\t\t\t$instructor = $userModel;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\u002F\u002F Get user by slug.\r\n-\t\t\t\t\t\t$wp_user = get_user_by( 'slug', $instructor_name );\r\n-\t\t\t\t\t\t\u002F\u002F Only allow view instructor when user is administrator or view his\u002Fher profile.\r\n-\t\t\t\t\t\tif ( $wp_user ) {\r\n-\t\t\t\t\t\t\t$userModelBySlug = UserModel::find( $wp_user->ID, true );\r\n-\t\t\t\t\t\t\tif ( current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t\t\t\t\t|| ( $userModelCurrent && $userModelCurrent->get_id() === $wp_user->ID ) ) {\r\n-\t\t\t\t\t\t\t\t$instructor = $userModelBySlug;\r\n-\t\t\t\t\t\t\t} elseif ( empty( $userModelBySlug->get_pretty_slug( false ) ) ) {\r\n-\t\t\t\t\t\t\t\t$instructor = $userModelBySlug;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$instructor = $userModelCurrent;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $instructor;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param UserModel $instructor\r\n-\t *\r\n-\t * @return false|string\r\n-\t *\u002F\r\n-\tpublic function info( UserModel $instructor ): string {\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-instructor\u002Finfo\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'             => '\u003Cdiv class=\"lp-single-instructor__info\">',\r\n-\t\t\t\t'cover_img'           => ProfileTemplate::instance()->html_cover_image( $instructor ),\r\n-\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"lp-single-instructor__info__wrapper\">',\r\n-\t\t\t\t'avatar'              => $this->html_avatar_edit( $instructor ),\r\n-\t\t\t\t'info_right'          => $this->info_right( $instructor ),\r\n-\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$instructor\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML info right of instructor.\r\n-\t *\r\n-\t * @param UserModel $instructor\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function info_right( UserModel $instructor ): string {\r\n-\t\t$section_instructor_meta = [\r\n-\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\r\n-\t\t\t'count_students' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$this->html_count_students( $instructor )\r\n-\t\t\t),\r\n-\t\t\t'count_courses'  => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">\u003Ci class=\"lp-icon-file\">\u003C\u002Fi>%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$this->html_count_courses( $instructor )\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$sections = apply_filters(\r\n-\t\t\t'learn-press\u002Fsingle-instructor\u002Finfo-right\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrapper'             => '\u003Cdiv class=\"lp-single-instructor__info__right\">',\r\n-\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"lp-single-instructor__info__right__content\">',\r\n-\t\t\t\t'title'               => sprintf( '\u003Ch2>%s\u003C\u002Fh2>', $this->html_display_name( $instructor ) ),\r\n-\t\t\t\t'social'              => $this->html_social( $instructor ),\r\n-\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'meta'                => Template::combine_components( $section_instructor_meta ),\r\n-\t\t\t\t'description'         => $this->html_description( $instructor ),\r\n-\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$instructor\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\tpublic function section_list_courses( UserModel $instructor ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Query courses of instructor\r\n-\t\t\t$filter = new LP_Course_Filter();\r\n-\t\t\tCourses::handle_params_for_query_courses( $filter, [] );\r\n-\t\t\t$filter->post_author = $instructor->get_id();\r\n-\t\t\t$filter->limit       = LP_Settings::get_option( 'archive_course_limit', 20 );\r\n-\t\t\t$filter->page        = $GLOBALS['wp_query']->get( 'paged', 1 ) ? $GLOBALS['wp_query']->get( 'paged', 1 ) : 1;\r\n-\t\t\t$filter              = apply_filters( 'lp\u002Fsingle-instructor\u002Fcourses\u002Fquery\u002Ffilter', $filter, [] );\r\n-\r\n-\t\t\t$total_courses = 0;\r\n-\t\t\t$courses       = Courses::get_courses( $filter, $total_courses );\r\n-\t\t\tif ( ! empty( $courses ) ) {\r\n-\t\t\t\t$html_courses = $this->list_courses( $instructor, $courses );\r\n-\t\t\t} else {\r\n-\t\t\t\t$html_courses = Template::print_message(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( '%s does not have any courses', 'learnpress' ),\r\n-\t\t\t\t\t\t$instructor->get_display_name()\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'info',\r\n-\t\t\t\t\tfalse\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fsingle-instructor\u002Fcourses\u002Fsections',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"instructor-courses learn-press-courses\">',\r\n-\t\t\t\t\t'courses'     => $html_courses,\r\n-\t\t\t\t\t'pagination'  => $this->courses_pagination( $filter->page, $filter->limit, $total_courses ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$courses,\r\n-\t\t\t\t$instructor\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display list courses.\r\n-\t *\r\n-\t * @param $instructor\r\n-\t * @param $courses\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function list_courses( $instructor, $courses ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Li list courses\r\n-\t\t\t$html_li_item_course = '';\r\n-\t\t\tforeach ( $courses as $course_obj ) {\r\n-\t\t\t\t$course               = CourseModel::find( $course_obj->ID, true );\r\n-\t\t\t\t$html_li_item_course .= ListCoursesTemplate::render_course( $course );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = [\r\n-\t\t\t\t'wrapper'     => '\u003Cul class=\"ul-instructor-courses\">',\r\n-\t\t\t\t'list_course' => $html_li_item_course,\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Pagination courses.\r\n-\t *\r\n-\t * @param int $page\r\n-\t * @param int $limit\r\n-\t * @param int $total_courses\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function courses_pagination( int $page, int $limit, int $total_courses ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$total_pages     = \\LP_Database::get_total_pages( $limit, $total_courses );\r\n-\t\t\t$data_pagination = array(\r\n-\t\t\t\t'total'    => $total_pages,\r\n-\t\t\t\t'current'  => max( 1, $page ),\r\n-\t\t\t\t'base'     => esc_url_raw( str_replace( 999999999, '%#%', get_pagenum_link( 999999999, false ) ) ),\r\n-\t\t\t\t'format'   => '',\r\n-\t\t\t\t'per_page' => $limit,\r\n-\t\t\t);\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tTemplate::instance()->get_frontend_template( 'shared\u002Fpagination.php', $data_pagination );\r\n-\t\t\t$content = ob_get_clean();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tob_end_clean();\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Instructor.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Instructor;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Services\\UserService;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\UserTemplate;\n+use LP_Course_Filter;\n+use LP_Settings;\n+use LP_User;\n+use Throwable;\n+\n+class SingleInstructorTemplate extends UserTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tpublic function __construct( $class_name = 'instructor' ) {\n+\t\tparent::__construct( $class_name );\n+\t\t$this->init();\n+\t}\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fsingle-instructor\u002Flayout', [ $this, 'sections' ] );\n+\t\t\u002F\u002Fadd_action( 'wp_head', [ $this, 'add_internal_style_to_head' ] );\n+\t}\n+\n+\t\u002F**\n+\t * Get html total courses of instructor.\n+\t *\n+\t * @param LP_User|UserModel $instructor\n+\t * @param string $hidden\n+\t *\n+\t * @return string\n+\t * @version 1.0.1\n+\t * @since 4.2.4\n+\t *\u002F\n+\tpublic function html_count_courses( $instructor, $hidden = '' ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $instructor instanceof LP_User ) {\n+\t\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var UserModel $instructor\n+\t\t\t *\u002F\n+\t\t\t$instructor_statistic = $instructor->get_instructor_statistic();\n+\t\t\t$html                 = sprintf(\n+\t\t\t\t'%d %s',\n+\t\t\t\t$instructor_statistic['published_course'],\n+\t\t\t\t_n( 'Course', 'Courses', $instructor_statistic['published_course'], 'learnpress' )\n+\t\t\t);\n+\t\t\tif ( $hidden === 'text' ) {\n+\t\t\t\t$html = $instructor_statistic['published_course'];\n+\t\t\t}\n+\n+\t\t\t$sections = [\n+\t\t\t\t'wrapper'     => '\u003Cspan class=\"instructor-total-courses\">',\n+\t\t\t\t'content'     => $html,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\n+\t\t\t];\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html total students learn instructor.\n+\t *\n+\t * @param LP_User|UserModel $instructor\n+\t *\n+\t * @return string\n+\t * @version 1.0.1\n+\t * @since 4.2.4\n+\t *\u002F\n+\tpublic function html_count_students( $instructor, $hidden = '' ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $instructor instanceof LP_User ) {\n+\t\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var UserModel $instructor\n+\t\t\t *\u002F\n+\t\t\t$instructor_statistic = $instructor->get_instructor_statistic();\n+\t\t\t$html                 = sprintf(\n+\t\t\t\t'%d %s',\n+\t\t\t\t$instructor_statistic['total_student'],\n+\t\t\t\t_n( 'Student', 'Students', $instructor_statistic['total_student'], 'learnpress' )\n+\t\t\t);\n+\t\t\tif ( $hidden === 'text' ) {\n+\t\t\t\t$html = $instructor_statistic['total_student'];\n+\t\t\t}\n+\n+\t\t\t$sections = [\n+\t\t\t\t'wrapper'     => '\u003Cspan class=\"instructor-total-students\">',\n+\t\t\t\t'content'     => $html,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\n+\t\t\t];\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get button view instructor.\n+\t *\n+\t * @param LP_User|UserModel|false $instructor\n+\t *\n+\t * @return string\n+\t * @version 1.0.0\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function html_button_view( $instructor ): string {\n+\t\t$btn_view = '';\n+\n+\t\ttry {\n+\t\t\t$btn_view = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\" class=\"instructor-btn-view\">%s\u003C\u002Fa>',\n+\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t__( 'View Profile', 'learnpress' )\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $btn_view;\n+\t}\n+\n+\t\u002F**\n+\t * Render string to data content\n+\t *\n+\t * @param UserModel|LP_User $instructor\n+\t * @param string $data_content\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function render_data( $instructor, string $data_content = '' ): string {\n+\t\tif ( $instructor instanceof LP_User ) {\n+\t\t\t$instructor = UserModel::find( $instructor->get_id(), true );\n+\t\t}\n+\n+\t\t$data_render = str_replace(\n+\t\t\t[\n+\t\t\t\t'{{instructor_id}}',\n+\t\t\t\t'{{instructor_avatar}}',\n+\t\t\t\t'{{instructor_display_name}}',\n+\t\t\t\t'{{instructor_description}}',\n+\t\t\t\t'{{instructor_total_courses}}',\n+\t\t\t\t'{{instructor_total_students}}',\n+\t\t\t\t'{{instructor_social}}',\n+\t\t\t\t'{{instructor_url}}',\n+\t\t\t],\n+\t\t\t[\n+\t\t\t\t$instructor->get_id(),\n+\t\t\t\t$this->html_avatar( $instructor ),\n+\t\t\t\t$this->html_display_name( $instructor ),\n+\t\t\t\t$this->html_description( $instructor ),\n+\t\t\t\t$this->html_count_courses( $instructor ),\n+\t\t\t\t$this->html_count_students( $instructor ),\n+\t\t\t\t$this->html_social( $instructor ),\n+\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t],\n+\t\t\t$data_content\n+\t\t);\n+\n+\t\treturn apply_filters( 'learn-press\u002Fsingle-instructor\u002Frender-data', $data_render, $instructor, $data_content );\n+\t}\n+\n+\t\u002F**\n+\t * List section of layout.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function sections( array $data = [] ) {\n+\t\twp_enqueue_style( 'lp-instructor' );\n+\n+\t\ttry {\n+\t\t\tif ( isset( $data['instructor_id'] ) ) {\n+\t\t\t\t$instructor_id = (int) $data['instructor_id'];\n+\t\t\t\t$instructor    = UserModel::find( $instructor_id, true );\n+\t\t\t} else {\n+\t\t\t\t$instructor = $this->detect_instructor_by_page();\n+\t\t\t}\n+\n+\t\t\tif ( ! $instructor || ! $instructor->is_instructor() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-instructor\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'           => '\u003Cdiv class=\"lp-content-area\">',\n+\t\t\t\t\t'wrapper_inner'     => '\u003Cdiv class=\"lp-single-instructor\">',\n+\t\t\t\t\t'info'              => $this->info( $instructor ),\n+\t\t\t\t\t'courses'           => $this->section_list_courses( $instructor ),\n+\t\t\t\t\t'wrapper_inner_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t\t'wrapper_end'       => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$instructor\n+\t\t\t);\n+\n+\t\t\techo Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Detected single instructor Page.\n+\t *\n+\t * @return false|UserModel\n+\t * @since 4.2.3.4\n+\t * @version 1.0.4\n+\t *\u002F\n+\tpublic function detect_instructor_by_page() {\n+\t\t$instructor = false;\n+\n+\t\ttry {\n+\t\t\t$userModelCurrent = UserModel::find( get_current_user_id(), true );\n+\t\t\tif ( get_query_var( 'is_single_instructor' ) ) {\n+\t\t\t\t$instructor_name = get_query_var( 'instructor_name' );\n+\t\t\t\tif ( $instructor_name && 'page' !== $instructor_name ) {\n+\t\t\t\t\t$instructor = UserService::instance()->get_user_by_slug_link( $instructor_name );\n+\t\t\t\t} else {\n+\t\t\t\t\t$instructor = $userModelCurrent;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $instructor;\n+\t}\n+\n+\t\u002F**\n+\t * @param UserModel $instructor\n+\t *\n+\t * @return false|string\n+\t *\u002F\n+\tpublic function info( UserModel $instructor ): string {\n+\t\t$sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-instructor\u002Finfo\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'             => '\u003Cdiv class=\"lp-single-instructor__info\">',\n+\t\t\t\t'cover_img'           => ProfileTemplate::instance()->html_cover_image( $instructor ),\n+\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"lp-single-instructor__info__wrapper\">',\n+\t\t\t\t'avatar'              => $this->html_avatar_edit( $instructor ),\n+\t\t\t\t'info_right'          => $this->info_right( $instructor ),\n+\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$instructor\n+\t\t);\n+\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * HTML info right of instructor.\n+\t *\n+\t * @param UserModel $instructor\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function info_right( UserModel $instructor ): string {\n+\t\t$section_instructor_meta = [\n+\t\t\t'wrapper'        => '\u003Cdiv class=\"lp-instructor-meta\">',\n+\t\t\t'count_students' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">\u003Ci class=\"lp-icon-user-graduate\">\u003C\u002Fi>%s\u003C\u002Fdiv>',\n+\t\t\t\t$this->html_count_students( $instructor )\n+\t\t\t),\n+\t\t\t'count_courses'  => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"instructor-item-meta\">\u003Ci class=\"lp-icon-file\">\u003C\u002Fi>%s\u003C\u002Fdiv>',\n+\t\t\t\t$this->html_count_courses( $instructor )\n+\t\t\t),\n+\t\t\t'wrapper_end'    => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$sections = apply_filters(\n+\t\t\t'learn-press\u002Fsingle-instructor\u002Finfo-right\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrapper'             => '\u003Cdiv class=\"lp-single-instructor__info__right\">',\n+\t\t\t\t'wrapper_content'     => '\u003Cdiv class=\"lp-single-instructor__info__right__content\">',\n+\t\t\t\t'title'               => sprintf( '\u003Ch2>%s\u003C\u002Fh2>', $this->html_display_name( $instructor ) ),\n+\t\t\t\t'social'              => $this->html_social( $instructor ),\n+\t\t\t\t'wrapper_content_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'meta'                => Template::combine_components( $section_instructor_meta ),\n+\t\t\t\t'description'         => $this->html_description( $instructor ),\n+\t\t\t\t'wrapper_end'         => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$instructor\n+\t\t);\n+\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\tpublic function section_list_courses( UserModel $instructor ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Query courses of instructor\n+\t\t\t$filter = new LP_Course_Filter();\n+\t\t\tCourses::handle_params_for_query_courses( $filter, [] );\n+\t\t\t$filter->post_author = $instructor->get_id();\n+\t\t\t$filter->limit       = LP_Settings::get_option( 'archive_course_limit', 20 );\n+\t\t\t$filter->page        = $GLOBALS['wp_query']->get( 'paged', 1 ) ? $GLOBALS['wp_query']->get( 'paged', 1 ) : 1;\n+\t\t\t$filter              = apply_filters( 'lp\u002Fsingle-instructor\u002Fcourses\u002Fquery\u002Ffilter', $filter, [] );\n+\n+\t\t\t$total_courses = 0;\n+\t\t\t$courses       = Courses::get_courses( $filter, $total_courses );\n+\t\t\tif ( ! empty( $courses ) ) {\n+\t\t\t\t$html_courses = $this->list_courses( $instructor, $courses );\n+\t\t\t} else {\n+\t\t\t\t$html_courses = Template::print_message(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( '%s does not have any courses', 'learnpress' ),\n+\t\t\t\t\t\t$instructor->get_display_name()\n+\t\t\t\t\t),\n+\t\t\t\t\t'info',\n+\t\t\t\t\tfalse\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Fsingle-instructor\u002Fcourses\u002Fsections',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv class=\"instructor-courses learn-press-courses\">',\n+\t\t\t\t\t'courses'     => $html_courses,\n+\t\t\t\t\t'pagination'  => $this->courses_pagination( $filter->page, $filter->limit, $total_courses ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$courses,\n+\t\t\t\t$instructor\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Display list courses.\n+\t *\n+\t * @param $instructor\n+\t * @param $courses\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function list_courses( $instructor, $courses ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Li list courses\n+\t\t\t$html_li_item_course = '';\n+\t\t\tforeach ( $courses as $course_obj ) {\n+\t\t\t\t$course               = CourseModel::find( $course_obj->ID, true );\n+\t\t\t\t$html_li_item_course .= ListCoursesTemplate::render_course( $course );\n+\t\t\t}\n+\n+\t\t\t$sections = [\n+\t\t\t\t'wrapper'     => '\u003Cul class=\"ul-instructor-courses\">',\n+\t\t\t\t'list_course' => $html_li_item_course,\n+\t\t\t\t'wrapper_end' => '\u003C\u002Ful>',\n+\t\t\t];\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Pagination courses.\n+\t *\n+\t * @param int $page\n+\t * @param int $limit\n+\t * @param int $total_courses\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function courses_pagination( int $page, int $limit, int $total_courses ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\t$total_pages     = \\LP_Database::get_total_pages( $limit, $total_courses );\n+\t\t\t$data_pagination = array(\n+\t\t\t\t'total'    => $total_pages,\n+\t\t\t\t'current'  => max( 1, $page ),\n+\t\t\t\t'base'     => esc_url_raw( str_replace( 999999999, '%#%', get_pagenum_link( 999999999, false ) ) ),\n+\t\t\t\t'format'   => '',\n+\t\t\t\t'per_page' => $limit,\n+\t\t\t);\n+\n+\t\t\tob_start();\n+\t\t\tTemplate::instance()->get_frontend_template( 'shared\u002Fpagination.php', $data_pagination );\n+\t\t\t$content = ob_get_clean();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tob_end_clean();\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,460 +1,460 @@\n-\u003C?php\r\n-namespace LearnPress\\TemplateHooks\\Order;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\Order\\LPOrderItemsDB;\r\n-use LearnPress\\Filters\\Order\\OrderItemsFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use stdClass;\r\n-use LP_Order;\r\n-use Throwable;\r\n-\r\n-\u002F**\r\n- * class AdminOrderItemsTemplate\r\n- *\r\n- * @since 4.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminOrderItemsTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Forder-items\u002Flayout', array( $this, 'order_items_layout' ) );\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Forder-details\u002Fitems\u002Flayout', array( $this, 'order_detail_items_layout' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t *\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_order_items';\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_order_detail_items';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML layout for order items on screen list orders.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function order_items_layout( LP_Order $lp_order ) {\r\n-\t\ttry {\r\n-\t\t\t$args                            = array(\r\n-\t\t\t\t'id_url'                            => 'admin-view-order-items',\r\n-\t\t\t\t'order_id'                          => $lp_order->get_id(),\r\n-\t\t\t\t'paged'                             => 1,\r\n-\t\t\t\t'enableScrollToView'                => false,\r\n-\t\t\t\t'enableUpdateParamsUrl'             => false,\r\n-\t\t\t\t'html_loading_after_content_loaded' => '\u003Ci>\u003C\u002Fi>',\r\n-\t\t\t);\r\n-\t\t\t$content_obj                     = self::render_order_items( $args );\r\n-\t\t\t$args['html_no_load_ajax_first'] = $content_obj->content;\r\n-\t\t\t$call_back                       = array(\r\n-\t\t\t\t'class'  => self::class,\r\n-\t\t\t\t'method' => 'render_order_items',\r\n-\t\t\t);\r\n-\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render html content for order items.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return stdClass\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function render_order_items( array $data ): stdClass {\r\n-\t\t$content  = new stdClass();\r\n-\t\t$order_id = $data['order_id'] ?? 0;\r\n-\t\tif ( ! $order_id ) {\r\n-\t\t\tthrow new Exception( __( 'Order ID is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check permission to view order.\r\n-\t\t$can_view = apply_filters(\r\n-\t\t\t'learn-press\u002Forder-detail\u002Fcan-view',\r\n-\t\t\tcurrent_user_can( 'edit_' . LP_ORDER_CPT, $order_id ),\r\n-\t\t\t$order_id\r\n-\t\t);\r\n-\t\tif ( ! $can_view ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to view this order.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lpOrderItemsDB   = LPOrderItemsDB::getInstance();\r\n-\t\t$filter           = new OrderItemsFilter();\r\n-\t\t$filter->page     = $data['paged'] ?? 1;\r\n-\t\t$filter->order_id = $data['order_id'] ?? 0;\r\n-\t\t$filter->limit    = 5;\r\n-\t\t$total_row        = 0;\r\n-\t\t$items            = $lpOrderItemsDB->get_items( $filter, $total_row );\r\n-\r\n-\t\t$html_items = '';\r\n-\t\tif ( empty( $items ) ) {\r\n-\t\t\t$html_items = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( '(No item)', 'learnpress' ) );\r\n-\t\t} else {\r\n-\t\t\tforeach ( $items as $i => $itemObj ) {\r\n-\t\t\t\t\u002F\u002F Get meta data\r\n-\t\t\t\t$itemObjMeta   = self::get_all_metadata_order_item( $itemObj->order_item_id );\r\n-\t\t\t\t$itemObj->meta = $itemObjMeta;\r\n-\t\t\t\t$item_type     = $itemObj->item_type ?? '';\r\n-\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\r\n-\t\t\t\tif ( ( empty( $item_type ) || empty( $itemObj->item_id ) )\r\n-\t\t\t\t\t&& ! empty( $itemObj->meta['_course_id'] ) ) {\r\n-\t\t\t\t\t$itemObj->item_id = $itemObj->meta['_course_id'];\r\n-\t\t\t\t\t$item_type        = LP_COURSE_CPT;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$index = ( $filter->page - 1 ) * $filter->limit + $i + 1;\r\n-\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\r\n-\t\t\t\t\t$coursePostModel = CoursePostModel::find_by_id( $itemObj->item_id, true );\r\n-\t\t\t\t\tif ( ! $coursePostModel ) {\r\n-\t\t\t\t\t\t$html_items .= sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cli>%s%s (%s)\u003C\u002Fli>',\r\n-\t\t\t\t\t\t\t$total_row > 1 ? \"$index. \" : '',\r\n-\t\t\t\t\t\t\tesc_html( $itemObj->order_item_name ),\r\n-\t\t\t\t\t\t\t__( 'The course does not exist now.', 'learnpress' )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$html_items .= sprintf(\r\n-\t\t\t\t\t\t\t'\u003Cli>%s\u003Ca href=\"%s\" >%s\u003C\u002Fa>\u003C\u002Fli>',\r\n-\t\t\t\t\t\t\t$total_row > 1 ? \"$index. \" : '',\r\n-\t\t\t\t\t\t\tesc_url_raw( $coursePostModel->get_edit_link() ),\r\n-\t\t\t\t\t\t\tesc_html( $itemObj->order_item_name )\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( has_filter( 'learn-press\u002Forder-item-not-course-id' ) ) {\r\n-\t\t\t\t\t\t$item_old       = (array) $itemObj;\r\n-\t\t\t\t\t\t$item_old['id'] = $itemObj->order_item_id;\r\n-\t\t\t\t\t\t$item_old       = array_merge( $item_old, $itemObjMeta );\r\n-\t\t\t\t\t\t$html_items     = apply_filters( 'learn-press\u002Forder-item-not-course-id', esc_html__( 'The course does not exist', 'learnpress' ), $item_old );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$html_items = apply_filters( 'learn-press\u002Forder-items\u002Fitem', '', $itemObj, $order_id, $data );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$total_pages     = $lpOrderItemsDB::get_total_pages( $filter->limit, $total_row );\r\n-\t\t$html_pagination = Template::instance()->html_pagination(\r\n-\t\t\t[\r\n-\t\t\t\t'paged'       => $data['paged'] ?? 1,\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\t$section          = array(\r\n-\t\t\t'wrap-start'  => '\u003Cdiv class=\"lp-order-items-wrapper\">',\r\n-\t\t\t'total_items' => $total_row > 1 ? sprintf(\r\n-\t\t\t\t'\u003Cp class=\"total-items\">%s: %d\u003C\u002Fp>',\r\n-\t\t\t\t__( 'Total items', 'learnpress' ),\r\n-\t\t\t\t$total_row\r\n-\t\t\t) : '',\r\n-\t\t\t'items'       => '\u003Cul class=\"order-list-items\">' . $html_items . '\u003C\u002Ful>',\r\n-\t\t\t'pagination'  => $html_pagination,\r\n-\t\t\t'wrap-end'    => '\u003Cdiv>',\r\n-\t\t);\r\n-\t\t$content->content = Template::combine_components( $section );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\tpublic function order_detail_items_layout( LP_Order $lp_order ) {\r\n-\t\t$args = array(\r\n-\t\t\t'id_url'   => 'admin-view-order-detail-items',\r\n-\t\t\t'order_id' => $lp_order->get_id(),\r\n-\t\t\t'paged'    => 1,\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @use self::render_order_detail_items\r\n-\t\t *\u002F\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_order_detail_items',\r\n-\t\t);\r\n-\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render html content for order detail items.\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic static function render_order_detail_items( array $data ): stdClass {\r\n-\t\t$content  = new stdClass();\r\n-\t\t$order_id = $data['order_id'] ?? 0;\r\n-\t\t$paged    = $data['paged'] ?? 1;\r\n-\t\tif ( ! $order_id ) {\r\n-\t\t\tthrow new Exception( __( 'Order ID is required', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lp_order = learn_press_get_order( $order_id );\r\n-\t\tif ( ! $lp_order ) {\r\n-\t\t\tthrow new Exception( __( 'Order not found', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Check permission to view order.\r\n-\t\t$can_view = apply_filters(\r\n-\t\t\t'learn-press\u002Forder-detail\u002Fcan-view',\r\n-\t\t\tcurrent_user_can( 'edit_' . LP_ORDER_CPT, $order_id ),\r\n-\t\t\t$order_id\r\n-\t\t);\r\n-\t\tif ( ! $can_view ) {\r\n-\t\t\tthrow new Exception( __( 'You do not have permission to view this order.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$lpOrderDB        = LPOrderItemsDB::getInstance();\r\n-\t\t$filter           = new OrderItemsFilter();\r\n-\t\t$filter->order_id = $lp_order->get_id();\r\n-\t\t$filter->page     = $paged;\r\n-\t\t$filter->limit    = - 1;\r\n-\t\t$total_row        = 0;\r\n-\t\t$items            = $lpOrderDB->get_items( $filter, $total_row );\r\n-\r\n-\t\t$html_items = '';\r\n-\t\tif ( ! empty( $items ) ) {\r\n-\t\t\tforeach ( $items as $itemObj ) {\r\n-\t\t\t\t$itemObjMeta   = self::get_all_metadata_order_item( $itemObj->order_item_id );\r\n-\t\t\t\t$itemObj->meta = $itemObjMeta;\r\n-\t\t\t\t$item_type     = $itemObj->item_type ?? '';\r\n-\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\r\n-\t\t\t\tif ( ( empty( $item_type ) || empty( $itemObj->item_id ) )\r\n-\t\t\t\t\t&& ! empty( $itemObj->meta['_course_id'] ) ) {\r\n-\t\t\t\t\t$itemObj->item_id = $itemObj->meta['_course_id'];\r\n-\t\t\t\t\t$item_type        = LP_COURSE_CPT;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\r\n-\t\t\t\t\t$html_items .= self::order_item_detail_html( $lp_order, $itemObj );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tif ( has_filter( 'learn-press\u002Forder-item-not-course' ) ) {\r\n-\t\t\t\t\t\t$item_old       = (array) $itemObj;\r\n-\t\t\t\t\t\t$item_old['id'] = $itemObj->order_item_id;\r\n-\t\t\t\t\t\t$item_old       = array_merge( $item_old, $itemObjMeta );\r\n-\r\n-\t\t\t\t\t\tob_start();\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Forder-item-not-course', $item_old, $lp_order );\r\n-\t\t\t\t\t\t$html_items .= ob_get_clean();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tob_start();\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Forder-detail\u002Fitem', $itemObj, $order_id, $data );\r\n-\t\t\t\t\t\t$html_items .= ob_get_clean();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$total_pages     = $lpOrderDB::get_total_pages( $filter->limit, $total_row );\r\n-\t\t$html_pagination = Template::instance()->html_pagination(\r\n-\t\t\t[\r\n-\t\t\t\t'paged'       => $paged,\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tif ( ! empty( $html_pagination ) ) {\r\n-\t\t\t$html_pagination = '\u003Ctr>\u003Ctd class=\"lp-order-items-wrapper\" style=\"padding: 0 0 0 30px;\" colspan=\"4\">' . $html_pagination . '\u003C\u002Ftd>\u003C\u002Ftr>';\r\n-\t\t}\r\n-\r\n-\t\t$section          = array(\r\n-\t\t\t'wrap-start'       => '\u003Cdiv class=\"order-items lp-order-detail-items\">',\r\n-\t\t\t'table-start'      => '\u003Ctable class=\"list-order-items\">',\r\n-\t\t\t'table-header'     => self::table_header(),\r\n-\t\t\t'table-body-start' => '\u003Ctbody>',\r\n-\t\t\t'items'            => $html_items,\r\n-\t\t\t'pagination'       => $html_pagination,\r\n-\t\t\t'no_item_row'      => sprintf(\r\n-\t\t\t\t'\u003Ctr class=\"no-order-items %s\">\r\n-\t\t\t\t\t\u003Ctd colspan=\"4\">%s\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>',\r\n-\t\t\t\t! empty( $items ) ? 'lp-hidden' : '',\r\n-\t\t\t\t__( 'There are no order items', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'table-body-end'   => '\u003C\u002Ftbody>',\r\n-\t\t\t'table-footer'     => self::table_footer( $lp_order ),\r\n-\t\t\t'table-end'        => '\u003C\u002Ftable>',\r\n-\t\t\t'wrap-end'         => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\t\t$content->content = Template::combine_components( $section );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Table header\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic static function table_header(): string {\r\n-\t\t$content = sprintf(\r\n-\t\t\t'\u003Cthead>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth class=\"column-name\">%1$s\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-price\">%2$s\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-quantity\">%3$s\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-total align-right\">%4$s\u003C\u002Fth>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>',\r\n-\t\t\tesc_html__( 'Item', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Cost', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Quantity', 'learnpress' ),\r\n-\t\t\tesc_html__( 'Total', 'learnpress' )\r\n-\t\t);\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * order item html\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param object $item lp order item\r\n-\t *\r\n-\t * @return string html\r\n-\t *\u002F\r\n-\tpublic static function order_item_detail_html( $order, $item ): string {\r\n-\t\t$coursePostModel = CoursePostModel::find( $item->item_id, true );\r\n-\t\t$total           = $item->meta['_total'] ?? 0;\r\n-\t\t$quantity        = $item->meta['_quantity'] ?? 0;\r\n-\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\r\n-\t\t$item_title      = $item->order_item_name;\r\n-\t\t$item_link       = $coursePostModel ? $coursePostModel->get_edit_link() : '';\r\n-\t\tob_start();\r\n-\t\t?>\r\n-\t\t\u003Ctr class=\"order-item-row\" data-item_id=\"\u003C?php echo esc_attr( $item->order_item_id ); ?>\"\r\n-\t\t\tdata-id=\"\u003C?php echo esc_attr( $item->item_id ); ?>\"\r\n-\t\t\tdata-remove_nonce=\"\u003C?php echo wp_create_nonce( 'remove_order_item' ); ?>\">\r\n-\t\t\t\u003Ctd class=\"column-name\">\r\n-\t\t\t\t\u003C?php if ( $order->is_manual() && $order->get_status() === LP_ORDER_PENDING ) : ?>\r\n-\t\t\t\t\t\u003Ca class=\"remove-order-item\" href=\"#\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\">\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( ! empty( $item_link ) ) {\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t'\u003Ca href=\"%s\" >%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\tesc_url( $item_link ),\r\n-\t\t\t\t\t\tesc_html( $item_title )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\techo esc_html( $item_title );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"column-price align-right\">\r\n-\t\t\t\t\u003C?php echo learn_press_format_price( $total, $currency_symbol ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"column-quantity align-right\">\r\n-\t\t\t\t\u003Csmall class=\"times\">×\u003C\u002Fsmall>\r\n-\t\t\t\t\u003C?php echo esc_html( $quantity ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"column-total align-right\">\u003C?php echo learn_press_format_price( $total, $currency_symbol ); ?>\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Order Details Footer\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return string table footer\r\n-\t *\u002F\r\n-\tpublic static function table_footer( $order ) {\r\n-\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() ?? learn_press_get_currency() );\r\n-\t\tob_start();\r\n-\t\t?>\r\n-\t\t\u003Ctfoot>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr class=\"row-subtotal\">\r\n-\t\t\t\u003Ctd width=\"300\" colspan=\"3\" class=\"align-right\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Subtotal:', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd width=\"100\" class=\"align-right\">\r\n-\t\t\t\t\t\u003Cspan class=\"order-subtotal\">\r\n-\t\t\t\t\t\t\u003C?php echo learn_press_format_price( $order->get_data( 'order_subtotal' ), $currency_symbol ); ?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fadmin\u002Forder\u002Fdetail\u002Fbefore-total', $order ); ?>\r\n-\t\t\u003Ctr class=\"row-total\">\r\n-\t\t\t\u003Ctd class=\"align-right\" colspan=\"3\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Total:', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"align-right total\">\r\n-\t\t\t\t\t\u003Cspan class=\"order-total\">\r\n-\t\t\t\t\t\t\u003C?php echo learn_press_format_price( $order->get_data( 'order_total' ), $currency_symbol ); ?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd colspan=\"2\" style=\"border-bottom: 1px dashed #DDD;\">\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php if ( $order->is_manual() ) : ?>\r\n-\t\t\t\u003Ctr>\r\n-\t\t\t\t\u003Ctd class=\"align-right\" colspan=\"4\" style=\"border-top: 1px solid #DDD;\">\r\n-\t\t\t\t\t\u003C?php if ( 'pending' === $order->get_status() ) : ?>\r\n-\t\t\t\t\t\t\u003Cbutton class=\"button\" type=\"button\" id=\"learn-press-add-order-item\">\r\n-\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add item(s)', 'learnpress' ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fbutton>\r\n-\t\t\t\t\t\u003C?php else : ?>\r\n-\t\t\t\t\t\t\u003Cp class=\"description\"> \u003C?php esc_html_e( 'In order to change the order item, please change the order status to \\'Pending\\'.', 'learnpress' ); ?> \u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Ftfoot>\r\n-\t\t\u003C?php\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all meta data of order item\r\n-\t *\r\n-\t * @param int $order_item_id\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic static function get_all_metadata_order_item( $order_item_id ): array {\r\n-\t\t$meta_data = get_metadata( 'learnpress_order_item', $order_item_id, '', true );\r\n-\t\t$result    = [];\r\n-\t\tif ( is_array( $meta_data ) ) {\r\n-\t\t\tforeach ( $meta_data as $key => $value ) {\r\n-\t\t\t\tif ( is_array( $value ) && count( $value ) === 1 ) {\r\n-\t\t\t\t\t$result[ $key ] = maybe_unserialize( $value[0] );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$result[ $key ] = maybe_unserialize( $value );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\TemplateHooks\\Order;\n+\n+use Exception;\n+use LearnPress\\Databases\\Order\\LPOrderItemsDB;\n+use LearnPress\\Filters\\Order\\OrderItemsFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use stdClass;\n+use LP_Order;\n+use Throwable;\n+\n+\u002F**\n+ * class AdminOrderItemsTemplate\n+ *\n+ * @since 4.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class AdminOrderItemsTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Forder-items\u002Flayout', array( $this, 'order_items_layout' ) );\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Forder-details\u002Fitems\u002Flayout', array( $this, 'order_detail_items_layout' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t *\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_order_items';\n+\t\t$callbacks[] = get_class( $this ) . ':render_order_detail_items';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * HTML layout for order items on screen list orders.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function order_items_layout( LP_Order $lp_order ) {\n+\t\ttry {\n+\t\t\t$args                            = array(\n+\t\t\t\t'id_url'                            => 'admin-view-order-items',\n+\t\t\t\t'order_id'                          => $lp_order->get_id(),\n+\t\t\t\t'paged'                             => 1,\n+\t\t\t\t'enableScrollToView'                => false,\n+\t\t\t\t'enableUpdateParamsUrl'             => false,\n+\t\t\t\t'html_loading_after_content_loaded' => '\u003Ci>\u003C\u002Fi>',\n+\t\t\t);\n+\t\t\t$content_obj                     = self::render_order_items( $args );\n+\t\t\t$args['html_no_load_ajax_first'] = $content_obj->content;\n+\t\t\t$call_back                       = array(\n+\t\t\t\t'class'  => self::class,\n+\t\t\t\t'method' => 'render_order_items',\n+\t\t\t);\n+\t\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Render html content for order items.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return stdClass\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function render_order_items( array $data ): stdClass {\n+\t\t$content  = new stdClass();\n+\t\t$order_id = $data['order_id'] ?? 0;\n+\t\tif ( ! $order_id ) {\n+\t\t\tthrow new Exception( __( 'Order ID is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check permission to view order.\n+\t\t$can_view = apply_filters(\n+\t\t\t'learn-press\u002Forder-detail\u002Fcan-view',\n+\t\t\tcurrent_user_can( 'edit_' . LP_ORDER_CPT, $order_id ),\n+\t\t\t$order_id\n+\t\t);\n+\t\tif ( ! $can_view ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to view this order.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lpOrderItemsDB   = LPOrderItemsDB::getInstance();\n+\t\t$filter           = new OrderItemsFilter();\n+\t\t$filter->page     = $data['paged'] ?? 1;\n+\t\t$filter->order_id = $data['order_id'] ?? 0;\n+\t\t$filter->limit    = 5;\n+\t\t$total_row        = 0;\n+\t\t$items            = $lpOrderItemsDB->get_items( $filter, $total_row );\n+\n+\t\t$html_items = '';\n+\t\tif ( empty( $items ) ) {\n+\t\t\t$html_items = sprintf( '\u003Cli>%s\u003C\u002Fli>', __( '(No item)', 'learnpress' ) );\n+\t\t} else {\n+\t\t\tforeach ( $items as $i => $itemObj ) {\n+\t\t\t\t\u002F\u002F Get meta data\n+\t\t\t\t$itemObjMeta   = self::get_all_metadata_order_item( $itemObj->order_item_id );\n+\t\t\t\t$itemObj->meta = $itemObjMeta;\n+\t\t\t\t$item_type     = $itemObj->item_type ?? '';\n+\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\n+\t\t\t\tif ( ( empty( $item_type ) || empty( $itemObj->item_id ) )\n+\t\t\t\t\t&& ! empty( $itemObj->meta['_course_id'] ) ) {\n+\t\t\t\t\t$itemObj->item_id = $itemObj->meta['_course_id'];\n+\t\t\t\t\t$item_type        = LP_COURSE_CPT;\n+\t\t\t\t}\n+\n+\t\t\t\t$index = ( $filter->page - 1 ) * $filter->limit + $i + 1;\n+\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\n+\t\t\t\t\t$coursePostModel = CoursePostModel::find_by_id( $itemObj->item_id, true );\n+\t\t\t\t\tif ( ! $coursePostModel ) {\n+\t\t\t\t\t\t$html_items .= sprintf(\n+\t\t\t\t\t\t\t'\u003Cli>%s%s (%s)\u003C\u002Fli>',\n+\t\t\t\t\t\t\t$total_row > 1 ? \"$index. \" : '',\n+\t\t\t\t\t\t\tesc_html( $itemObj->order_item_name ),\n+\t\t\t\t\t\t\t__( 'The course does not exist now.', 'learnpress' )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$html_items .= sprintf(\n+\t\t\t\t\t\t\t'\u003Cli>%s\u003Ca href=\"%s\" >%s\u003C\u002Fa>\u003C\u002Fli>',\n+\t\t\t\t\t\t\t$total_row > 1 ? \"$index. \" : '',\n+\t\t\t\t\t\t\tesc_url_raw( $coursePostModel->get_edit_link() ),\n+\t\t\t\t\t\t\tesc_html( $itemObj->order_item_name )\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( has_filter( 'learn-press\u002Forder-item-not-course-id' ) ) {\n+\t\t\t\t\t\t$item_old       = (array) $itemObj;\n+\t\t\t\t\t\t$item_old['id'] = $itemObj->order_item_id;\n+\t\t\t\t\t\t$item_old       = array_merge( $item_old, $itemObjMeta );\n+\t\t\t\t\t\t$html_items     = apply_filters( 'learn-press\u002Forder-item-not-course-id', esc_html__( 'The course does not exist', 'learnpress' ), $item_old );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$html_items = apply_filters( 'learn-press\u002Forder-items\u002Fitem', '', $itemObj, $order_id, $data );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$total_pages     = $lpOrderItemsDB::get_total_pages( $filter->limit, $total_row );\n+\t\t$html_pagination = Template::instance()->html_pagination(\n+\t\t\t[\n+\t\t\t\t'paged'       => $data['paged'] ?? 1,\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t]\n+\t\t);\n+\n+\t\t$section          = array(\n+\t\t\t'wrap-start'  => '\u003Cdiv class=\"lp-order-items-wrapper\">',\n+\t\t\t'total_items' => $total_row > 1 ? sprintf(\n+\t\t\t\t'\u003Cp class=\"total-items\">%s: %d\u003C\u002Fp>',\n+\t\t\t\t__( 'Total items', 'learnpress' ),\n+\t\t\t\t$total_row\n+\t\t\t) : '',\n+\t\t\t'items'       => '\u003Cul class=\"order-list-items\">' . $html_items . '\u003C\u002Ful>',\n+\t\t\t'pagination'  => $html_pagination,\n+\t\t\t'wrap-end'    => '\u003Cdiv>',\n+\t\t);\n+\t\t$content->content = Template::combine_components( $section );\n+\n+\t\treturn $content;\n+\t}\n+\n+\tpublic function order_detail_items_layout( LP_Order $lp_order ) {\n+\t\t$args = array(\n+\t\t\t'id_url'   => 'admin-view-order-detail-items',\n+\t\t\t'order_id' => $lp_order->get_id(),\n+\t\t\t'paged'    => 1,\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * @use self::render_order_detail_items\n+\t\t *\u002F\n+\t\t$call_back = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_order_detail_items',\n+\t\t);\n+\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t}\n+\n+\t\u002F**\n+\t * Render html content for order detail items.\n+\t *\n+\t * @throws Exception\n+\t * @since 4.3.2\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic static function render_order_detail_items( array $data ): stdClass {\n+\t\t$content  = new stdClass();\n+\t\t$order_id = $data['order_id'] ?? 0;\n+\t\t$paged    = $data['paged'] ?? 1;\n+\t\tif ( ! $order_id ) {\n+\t\t\tthrow new Exception( __( 'Order ID is required', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lp_order = learn_press_get_order( $order_id );\n+\t\tif ( ! $lp_order ) {\n+\t\t\tthrow new Exception( __( 'Order not found', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Check permission to view order.\n+\t\t$can_view = apply_filters(\n+\t\t\t'learn-press\u002Forder-detail\u002Fcan-view',\n+\t\t\tcurrent_user_can( 'edit_' . LP_ORDER_CPT, $order_id ),\n+\t\t\t$order_id\n+\t\t);\n+\t\tif ( ! $can_view ) {\n+\t\t\tthrow new Exception( __( 'You do not have permission to view this order.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$lpOrderDB        = LPOrderItemsDB::getInstance();\n+\t\t$filter           = new OrderItemsFilter();\n+\t\t$filter->order_id = $lp_order->get_id();\n+\t\t$filter->page     = $paged;\n+\t\t$filter->limit    = - 1;\n+\t\t$total_row        = 0;\n+\t\t$items            = $lpOrderDB->get_items( $filter, $total_row );\n+\n+\t\t$html_items = '';\n+\t\tif ( ! empty( $items ) ) {\n+\t\t\tforeach ( $items as $itemObj ) {\n+\t\t\t\t$itemObjMeta   = self::get_all_metadata_order_item( $itemObj->order_item_id );\n+\t\t\t\t$itemObj->meta = $itemObjMeta;\n+\t\t\t\t$item_type     = $itemObj->item_type ?? '';\n+\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\n+\t\t\t\tif ( ( empty( $item_type ) || empty( $itemObj->item_id ) )\n+\t\t\t\t\t&& ! empty( $itemObj->meta['_course_id'] ) ) {\n+\t\t\t\t\t$itemObj->item_id = $itemObj->meta['_course_id'];\n+\t\t\t\t\t$item_type        = LP_COURSE_CPT;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $item_type === LP_COURSE_CPT ) {\n+\t\t\t\t\t$html_items .= self::order_item_detail_html( $lp_order, $itemObj );\n+\t\t\t\t} else {\n+\t\t\t\t\tif ( has_filter( 'learn-press\u002Forder-item-not-course' ) ) {\n+\t\t\t\t\t\t$item_old       = (array) $itemObj;\n+\t\t\t\t\t\t$item_old['id'] = $itemObj->order_item_id;\n+\t\t\t\t\t\t$item_old       = array_merge( $item_old, $itemObjMeta );\n+\n+\t\t\t\t\t\tob_start();\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Forder-item-not-course', $item_old, $lp_order );\n+\t\t\t\t\t\t$html_items .= ob_get_clean();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tob_start();\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Forder-detail\u002Fitem', $itemObj, $order_id, $data );\n+\t\t\t\t\t\t$html_items .= ob_get_clean();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$total_pages     = $lpOrderDB::get_total_pages( $filter->limit, $total_row );\n+\t\t$html_pagination = Template::instance()->html_pagination(\n+\t\t\t[\n+\t\t\t\t'paged'       => $paged,\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t]\n+\t\t);\n+\n+\t\tif ( ! empty( $html_pagination ) ) {\n+\t\t\t$html_pagination = '\u003Ctr>\u003Ctd class=\"lp-order-items-wrapper\" style=\"padding: 0 0 0 30px;\" colspan=\"4\">' . $html_pagination . '\u003C\u002Ftd>\u003C\u002Ftr>';\n+\t\t}\n+\n+\t\t$section          = array(\n+\t\t\t'wrap-start'       => '\u003Cdiv class=\"order-items lp-order-detail-items\">',\n+\t\t\t'table-start'      => '\u003Ctable class=\"list-order-items\">',\n+\t\t\t'table-header'     => self::table_header(),\n+\t\t\t'table-body-start' => '\u003Ctbody>',\n+\t\t\t'items'            => $html_items,\n+\t\t\t'pagination'       => $html_pagination,\n+\t\t\t'no_item_row'      => sprintf(\n+\t\t\t\t'\u003Ctr class=\"no-order-items %s\">\n+\t\t\t\t\t\u003Ctd colspan=\"4\">%s\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>',\n+\t\t\t\t! empty( $items ) ? 'lp-hidden' : '',\n+\t\t\t\t__( 'There are no order items', 'learnpress' )\n+\t\t\t),\n+\t\t\t'table-body-end'   => '\u003C\u002Ftbody>',\n+\t\t\t'table-footer'     => self::table_footer( $lp_order ),\n+\t\t\t'table-end'        => '\u003C\u002Ftable>',\n+\t\t\t'wrap-end'         => '\u003C\u002Fdiv>',\n+\t\t);\n+\t\t$content->content = Template::combine_components( $section );\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Table header\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic static function table_header(): string {\n+\t\t$content = sprintf(\n+\t\t\t'\u003Cthead>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth class=\"column-name\">%1$s\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-price\">%2$s\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-quantity\">%3$s\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-total align-right\">%4$s\u003C\u002Fth>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>',\n+\t\t\tesc_html__( 'Item', 'learnpress' ),\n+\t\t\tesc_html__( 'Cost', 'learnpress' ),\n+\t\t\tesc_html__( 'Quantity', 'learnpress' ),\n+\t\t\tesc_html__( 'Total', 'learnpress' )\n+\t\t);\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * order item html\n+\t *\n+\t * @param LP_Order $order\n+\t * @param object $item lp order item\n+\t *\n+\t * @return string html\n+\t *\u002F\n+\tpublic static function order_item_detail_html( $order, $item ): string {\n+\t\t$coursePostModel = CoursePostModel::find( $item->item_id, true );\n+\t\t$total           = $item->meta['_total'] ?? 0;\n+\t\t$quantity        = $item->meta['_quantity'] ?? 0;\n+\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\n+\t\t$item_title      = $item->order_item_name;\n+\t\t$item_link       = $coursePostModel ? $coursePostModel->get_edit_link() : '';\n+\t\tob_start();\n+\t\t?>\n+\t\t\u003Ctr class=\"order-item-row\" data-item_id=\"\u003C?php echo esc_attr( $item->order_item_id ); ?>\"\n+\t\t\tdata-id=\"\u003C?php echo esc_attr( $item->item_id ); ?>\"\n+\t\t\tdata-remove_nonce=\"\u003C?php echo wp_create_nonce( 'remove_order_item' ); ?>\">\n+\t\t\t\u003Ctd class=\"column-name\">\n+\t\t\t\t\u003C?php if ( $order->is_manual() && $order->get_status() === LP_ORDER_PENDING ) : ?>\n+\t\t\t\t\t\u003Ca class=\"remove-order-item\" href=\"#\">\n+\t\t\t\t\t\t\u003Cspan class=\"dashicons dashicons-no-alt\">\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( ! empty( $item_link ) ) {\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t'\u003Ca href=\"%s\" >%s\u003C\u002Fa>',\n+\t\t\t\t\t\tesc_url( $item_link ),\n+\t\t\t\t\t\tesc_html( $item_title )\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\techo esc_html( $item_title );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"column-price align-right\">\n+\t\t\t\t\u003C?php echo learn_press_format_price( $total, $currency_symbol ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"column-quantity align-right\">\n+\t\t\t\t\u003Csmall class=\"times\">×\u003C\u002Fsmall>\n+\t\t\t\t\u003C?php echo esc_html( $quantity ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"column-total align-right\">\u003C?php echo learn_press_format_price( $total, $currency_symbol ); ?>\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003C?php\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * Order Details Footer\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return string table footer\n+\t *\u002F\n+\tpublic static function table_footer( $order ) {\n+\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() ?? learn_press_get_currency() );\n+\t\tob_start();\n+\t\t?>\n+\t\t\u003Ctfoot>\n+\t\t\u003Ctr>\n+\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\n+\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr class=\"row-subtotal\">\n+\t\t\t\u003Ctd width=\"300\" colspan=\"3\" class=\"align-right\">\n+\t\t\t\t\u003C?php esc_html_e( 'Subtotal:', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd width=\"100\" class=\"align-right\">\n+\t\t\t\t\t\u003Cspan class=\"order-subtotal\">\n+\t\t\t\t\t\t\u003C?php echo learn_press_format_price( $order->get_data( 'order_subtotal' ), $currency_symbol ); ?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003C?php do_action( 'learn-press\u002Fadmin\u002Forder\u002Fdetail\u002Fbefore-total', $order ); ?>\n+\t\t\u003Ctr class=\"row-total\">\n+\t\t\t\u003Ctd class=\"align-right\" colspan=\"3\">\n+\t\t\t\t\u003C?php esc_html_e( 'Total:', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"align-right total\">\n+\t\t\t\t\t\u003Cspan class=\"order-total\">\n+\t\t\t\t\t\t\u003C?php echo learn_press_format_price( $order->get_data( 'order_total' ), $currency_symbol ); ?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr>\n+\t\t\t\u003Ctd colspan=\"2\">\u003C\u002Ftd>\n+\t\t\t\u003Ctd colspan=\"2\" style=\"border-bottom: 1px dashed #DDD;\">\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003C?php if ( $order->is_manual() ) : ?>\n+\t\t\t\u003Ctr>\n+\t\t\t\t\u003Ctd class=\"align-right\" colspan=\"4\" style=\"border-top: 1px solid #DDD;\">\n+\t\t\t\t\t\u003C?php if ( 'pending' === $order->get_status() ) : ?>\n+\t\t\t\t\t\t\u003Cbutton class=\"button\" type=\"button\" id=\"learn-press-add-order-item\">\n+\t\t\t\t\t\t\t\u003C?php esc_html_e( 'Add item(s)', 'learnpress' ); ?>\n+\t\t\t\t\t\t\u003C\u002Fbutton>\n+\t\t\t\t\t\u003C?php else : ?>\n+\t\t\t\t\t\t\u003Cp class=\"description\"> \u003C?php esc_html_e( 'In order to change the order item, please change the order status to \\'Pending\\'.', 'learnpress' ); ?> \u003C\u002Fp>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Ftfoot>\n+\t\t\u003C?php\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * Get all meta data of order item\n+\t *\n+\t * @param int $order_item_id\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic static function get_all_metadata_order_item( $order_item_id ): array {\n+\t\t$meta_data = get_metadata( 'learnpress_order_item', $order_item_id, '', true );\n+\t\t$result    = [];\n+\t\tif ( is_array( $meta_data ) ) {\n+\t\t\tforeach ( $meta_data as $key => $value ) {\n+\t\t\t\tif ( is_array( $value ) && count( $value ) === 1 ) {\n+\t\t\t\t\t$result[ $key ] = maybe_unserialize( $value[0] );\n+\t\t\t\t} else {\n+\t\t\t\t\t$result[ $key ] = maybe_unserialize( $value );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderListTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderListTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderListTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FOrder\u002FAdminOrderListTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Order;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LP_Helper;\r\n-\r\n-\u002F**\r\n- * class AdminOrderListTemplate\r\n- *\r\n- * @since 4.3.2.8\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class AdminOrderListTemplate {\r\n-\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'manage_posts_extra_tablenav', array( $this, 'add_export_order_button' ) );\r\n-\t}\r\n-\r\n-\tpublic function add_export_order_button( $which ) {\r\n-\t\tif ( $which !== 'top' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$screen = get_current_screen();\r\n-\t\tif ( ! $screen || $screen->base !== 'edit' || $screen->post_type !== LP_ORDER_CPT ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$order_data = [\r\n-\t\t\t'action'    => 'export_order_csv',\r\n-\t\t\t'export_id' => time() . '-' . uniqid(),\r\n-\t\t];\r\n-\r\n-\t\t$data_get   = LP_Helper::sanitize_params_submitted( $_GET );\r\n-\t\t$order_data = array_merge( $data_get, $order_data );\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrap-start'       => '\u003Cdiv class=\"alignleft actions\">',\r\n-\t\t\t'btn-export-start' => sprintf(\r\n-\t\t\t\t'\u003Cbutton type=\"button\" class=\"button lp-button lp-btn-export-order-to-csv\" data-send=\"%s\">',\r\n-\t\t\t\tesc_attr( Template::convert_data_to_json( $order_data ) )\r\n-\t\t\t),\r\n-\t\t\t'btn-text'         => esc_html__( 'Export to CSV', 'learnpress' ),\r\n-\t\t\t'btn-export-end'   => '\u003C\u002Fbutton>',\r\n-\t\t\t'wrap-end'         => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\techo Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\TemplateHooks\\Order;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LP_Helper;\n+\n+\u002F**\n+ * class AdminOrderListTemplate\n+ *\n+ * @since 4.3.2.8\n+ * @version 1.0.0\n+ *\u002F\n+class AdminOrderListTemplate {\n+\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'manage_posts_extra_tablenav', array( $this, 'add_export_order_button' ) );\n+\t}\n+\n+\tpublic function add_export_order_button( $which ) {\n+\t\tif ( $which !== 'top' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$screen = get_current_screen();\n+\t\tif ( ! $screen || $screen->base !== 'edit' || $screen->post_type !== LP_ORDER_CPT ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$order_data = [\n+\t\t\t'action'    => 'export_order_csv',\n+\t\t\t'export_id' => time() . '-' . uniqid(),\n+\t\t];\n+\n+\t\t$data_get   = LP_Helper::sanitize_params_submitted( $_GET );\n+\t\t$order_data = array_merge( $data_get, $order_data );\n+\n+\t\t$section = [\n+\t\t\t'wrap-start'       => '\u003Cdiv class=\"alignleft actions\">',\n+\t\t\t'btn-export-start' => sprintf(\n+\t\t\t\t'\u003Cbutton type=\"button\" class=\"button lp-button lp-btn-export-order-to-csv\" data-send=\"%s\">',\n+\t\t\t\tesc_attr( Template::convert_data_to_json( $order_data ) )\n+\t\t\t),\n+\t\t\t'btn-text'         => esc_html__( 'Export to CSV', 'learnpress' ),\n+\t\t\t'btn-export-end'   => '\u003C\u002Fbutton>',\n+\t\t\t'wrap-end'         => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\techo Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileCoursesTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileCoursesTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileCoursesTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileCoursesTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,119 +1,134 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileCoursesTemplate.\r\n- *\r\n- * @since 4.3.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LP_Profile;\r\n-\r\n-class ProfileCoursesTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fcourses', [ $this, 'layout' ] );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param array $args\r\n-\t *\u002F\r\n-\tpublic function layout( array $args = [] ) {\r\n-\t\t$courses_created_tab               = $args['courses_created_tab'] ?? [];\r\n-\t\t$args_query_user_courses_created   = $args['args_query_user_courses_created'] ?? [];\r\n-\t\t$args_query_user_courses_statistic = $args['args_query_user_courses_statistic'] ?? [];\r\n-\r\n-\t\t\u002F\u002F Check permission to view courses tab.\r\n-\t\t$profile       = LP_Profile::instance();\r\n-\t\t$user_can_view = $profile->current_user_can( 'view-tab-courses' );\r\n-\t\tif ( ! $user_can_view ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tob_start();\r\n-\t\tlp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' );\r\n-\t\t$html_skeleton = ob_get_clean();\r\n-\r\n-\t\t$html_li_tabs         = '';\r\n-\t\t$html_filter_contents = '';\r\n-\t\tforeach ( $courses_created_tab as $key => $created ) {\r\n-\t\t\t$html_li_tabs .= sprintf(\r\n-\t\t\t\t'\u003Cli>\u003Ca class=\"%s\" data-tab=\"%s\">%s\u003C\u002Fa>\u003C\u002Fli>',\r\n-\t\t\t\tesc_attr( $key === '' ? 'active' : '' ),\r\n-\t\t\t\tesc_attr( $key === '' ? 'all' : $key ),\r\n-\t\t\t\tesc_html( $created )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_filter_contents .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"learn-press-course-tab__filter__content\" data-tab=\"%s\" style=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_attr( $key === '' ? 'all' : $key ),\r\n-\t\t\t\tesc_attr( $key !== '' ? 'display: none' : '' ),\r\n-\t\t\t\t$html_skeleton\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section_tabs = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"learn-press-tabs\">',\r\n-\t\t\t'ul'       => '\u003Cul class=\"learn-press-filters\">',\r\n-\t\t\t'content'  => $html_li_tabs,\r\n-\t\t\t'ul-end'   => '\u003C\u002Ful>',\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section_contents = [\r\n-\t\t\t'wrap'     => '\u003Cdiv class=\"learn-press-profile-course__progress\">',\r\n-\t\t\t'content'  => $html_filter_contents,\r\n-\t\t\t'input'    => sprintf(\r\n-\t\t\t\t'\u003Cinput class=\"lp_profile_tab_input_param\"\r\n-\t\t\t\t\t\ttype=\"hidden\" name=\"args_query_user_courses_created\"\r\n-\t\t\t\t\t\tvalue=\"%s\">',\r\n-\t\t\t\tsanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_created ) ) )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$section_courses_statistic = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections\u002Fstatistic',\r\n-\t\t\t[\r\n-\t\t\t\t'wrap'     => '\u003Cdiv class=\"learn-press-profile-course__statistic\">',\r\n-\t\t\t\t'skeleton' => $html_skeleton,\r\n-\t\t\t\t'input'    => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\" value=\"%s\">',\r\n-\t\t\t\t\tsanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\t$section_courses_list = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections\u002Fcourse-list',\r\n-\t\t\t[\r\n-\t\t\t\t'wrap'       => '\u003Cdiv class=\"learn-press-profile-course__tab\">',\r\n-\t\t\t\t'filter'     => '\u003Cdiv class=\"learn-press-course-tab-created learn-press-course-tab-filters\" data-tab=\"created\">',\r\n-\t\t\t\t'tabs'       => Template::combine_components( $section_tabs ),\r\n-\t\t\t\t'progress'   => Template::combine_components( $section_contents ),\r\n-\t\t\t\t'filter-end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'wrap-end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections',\r\n-\t\t\t[\r\n-\t\t\t\t'wrap'        => '\u003Cdiv class=\"learn-press-profile-course__tab\">',\r\n-\t\t\t\t'statistic'   => Template::combine_components( $section_courses_statistic ),\r\n-\t\t\t\t'course-list' => Template::combine_components( $section_courses_list ),\r\n-\t\t\t\t'wrap-end'    => '\u003C\u002Fdiv>',\r\n-\t\t\t],\r\n-\t\t\t$args\r\n-\t\t);\r\n-\r\n-\t\techo Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileCoursesTemplate.\n+ *\n+ * @since 4.3.0\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\CourseBuilder\\CourseBuilder;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LP_Profile;\n+\n+class ProfileCoursesTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fcourses', [ $this, 'layout' ] );\n+\t}\n+\n+\t\u002F**\n+\t * @param array $args\n+\t *\u002F\n+\tpublic function layout( array $args = [] ) {\n+\t\t$courses_created_tab               = $args['courses_created_tab'] ?? [];\n+\t\t$args_query_user_courses_created   = $args['args_query_user_courses_created'] ?? [];\n+\t\t$args_query_user_courses_statistic = $args['args_query_user_courses_statistic'] ?? [];\n+\n+\t\t\u002F\u002F Check permission to view courses tab.\n+\t\t$profile       = LP_Profile::instance();\n+\t\t$user_can_view = $profile->current_user_can( 'view-tab-courses' );\n+\t\tif ( ! $user_can_view ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tob_start();\n+\t\tlp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' );\n+\t\t$html_skeleton = ob_get_clean();\n+\n+\t\t$html_li_tabs         = '';\n+\t\t$html_filter_contents = '';\n+\t\tforeach ( $courses_created_tab as $key => $created ) {\n+\t\t\t$html_li_tabs .= sprintf(\n+\t\t\t\t'\u003Cli>\u003Ca class=\"%s\" data-tab=\"%s\">%s\u003C\u002Fa>\u003C\u002Fli>',\n+\t\t\t\tesc_attr( $key === '' ? 'active' : '' ),\n+\t\t\t\tesc_attr( $key === '' ? 'all' : $key ),\n+\t\t\t\tesc_html( $created )\n+\t\t\t);\n+\n+\t\t\t$html_filter_contents .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"learn-press-course-tab__filter__content\" data-tab=\"%s\" style=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\tesc_attr( $key === '' ? 'all' : $key ),\n+\t\t\t\tesc_attr( $key !== '' ? 'display: none' : '' ),\n+\t\t\t\t$html_skeleton\n+\t\t\t);\n+\t\t}\n+\n+\t\t$show_course_builder_link = $profile->is_current_user() && CourseBuilder::can_view_course_builder();\n+\t\t$tabs_classes             = [ 'learn-press-tabs' ];\n+\t\t$course_builder_link      = '';\n+\n+\t\tif ( $show_course_builder_link ) {\n+\t\t\t$tabs_classes[]      = 'learn-press-tabs--with-course-builder';\n+\t\t\t$course_builder_link = sprintf(\n+\t\t\t\t'\u003Ca class=\"learn-press-course-builder-link\" href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s\u003C\u002Fa>',\n+\t\t\t\tesc_url( CourseBuilder::get_link_course_builder() ),\n+\t\t\t\tesc_html__( 'Course Builder', 'learnpress' )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section_tabs = [\n+\t\t\t'wrap'           => sprintf( '\u003Cdiv class=\"%s\">', esc_attr( implode( ' ', $tabs_classes ) ) ),\n+\t\t\t'ul'             => '\u003Cul class=\"learn-press-filters\">',\n+\t\t\t'content'        => $html_li_tabs,\n+\t\t\t'ul-end'         => '\u003C\u002Ful>',\n+\t\t\t'course-builder' => $course_builder_link,\n+\t\t\t'wrap-end'       => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section_contents = [\n+\t\t\t'wrap'     => '\u003Cdiv class=\"learn-press-profile-course__progress\">',\n+\t\t\t'content'  => $html_filter_contents,\n+\t\t\t'input'    => sprintf(\n+\t\t\t\t'\u003Cinput class=\"lp_profile_tab_input_param\"\n+\t\t\t\t\t\ttype=\"hidden\" name=\"args_query_user_courses_created\"\n+\t\t\t\t\t\tvalue=\"%s\">',\n+\t\t\t\tsanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_created ) ) )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$section_courses_statistic = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections\u002Fstatistic',\n+\t\t\t[\n+\t\t\t\t'wrap'     => '\u003Cdiv class=\"learn-press-profile-course__statistic\">',\n+\t\t\t\t'skeleton' => $html_skeleton,\n+\t\t\t\t'input'    => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\" value=\"%s\">',\n+\t\t\t\t\tsanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) )\n+\t\t\t\t),\n+\t\t\t\t'wrap-end' => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$args\n+\t\t);\n+\n+\t\t$section_courses_list = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections\u002Fcourse-list',\n+\t\t\t[\n+\t\t\t\t'wrap'       => '\u003Cdiv class=\"learn-press-profile-course__tab\">',\n+\t\t\t\t'filter'     => '\u003Cdiv class=\"learn-press-course-tab-created learn-press-course-tab-filters\" data-tab=\"created\">',\n+\t\t\t\t'tabs'       => Template::combine_components( $section_tabs ),\n+\t\t\t\t'progress'   => Template::combine_components( $section_contents ),\n+\t\t\t\t'filter-end' => '\u003C\u002Fdiv>',\n+\t\t\t\t'wrap-end'   => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$args\n+\t\t);\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses\u002Fsections',\n+\t\t\t[\n+\t\t\t\t'wrap'        => '\u003Cdiv class=\"learn-press-profile-course__tab\">',\n+\t\t\t\t'statistic'   => Template::combine_components( $section_courses_statistic ),\n+\t\t\t\t'course-list' => Template::combine_components( $section_courses_list ),\n+\t\t\t\t'wrap-end'    => '\u003C\u002Fdiv>',\n+\t\t\t],\n+\t\t\t$args\n+\t\t);\n+\n+\t\techo Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileGeneralInfoTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileGeneralInfoTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileGeneralInfoTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileGeneralInfoTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,168 +1,168 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Archive Package.\r\n- *\r\n- * @since 4.2.6.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LP_Profile;\r\n-use LP_Settings;\r\n-\r\n-class ProfileGeneralInfoTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\t\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info', [ $this, 'sections' ], 2 );\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info-custom', [ $this, 'info_custom' ] );\r\n-\t\tadd_action( 'learn-press\u002Fadmin\u002Fuser\u002Flayout\u002Fgeneral-info-custom', [ $this, 'user_info_custom' ], 10, 2 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show custom field in profile.\r\n-\t *\r\n-\t * @param LP_Profile $profile\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function info_custom( $profile ) {\r\n-\t\t$user_info_custom = lp_get_user_custom_register_fields( $profile->get_user()->get_id() );\r\n-\t\t$custom_fields    = LP_Settings::get_option( 'register_profile_fields', [] );\r\n-\r\n-\t\tif ( $custom_fields ) {\r\n-\t\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cli class=\"form-field form-field__\u003C?php echo esc_attr( $field['id'] ); ?> form-field__clear\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tswitch ( $field['type'] ) {\r\n-\t\t\t\t\t\tcase 'text':\r\n-\t\t\t\t\t\tcase 'number':\r\n-\t\t\t\t\t\tcase 'email':\r\n-\t\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\t\tcase 'tel':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel>\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\r\n-\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel>\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Ctextarea\r\n-\t\t\t\t\t\t\t\tname=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\r\n-\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $field['name'] ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function user_info_custom( $user, $user_info_custom ) {\r\n-\t\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', [] );\r\n-\r\n-\t\tif ( $custom_fields ) {\r\n-\t\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth>\r\n-\t\t\t\t\t\t\u003Clabel\r\n-\t\t\t\t\t\t\tfor=\"learn-press-custom-register-\u003C?php echo esc_attr( $field['id'] ); ?>\">\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tswitch ( $field['type'] ) {\r\n-\t\t\t\t\t\t\tcase 'text':\r\n-\t\t\t\t\t\t\tcase 'number':\r\n-\t\t\t\t\t\t\tcase 'email':\r\n-\t\t\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\t\t\tcase 'tel':\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\r\n-\t\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\u003Ctextarea\r\n-\t\t\t\t\t\t\t\t\tname=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\r\n-\t\t\t\t\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function print_type_field( $field, $user_info_custom = [] ) {\r\n-\t\tob_start();\r\n-\r\n-\t\t\u002F\u002Fecho sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html( $field['name'] ?? '' ) );\r\n-\r\n-\t\tswitch ( $field['type'] ?? '' ) {\r\n-\t\t\tcase 'text':\r\n-\t\t\tcase 'number':\r\n-\t\t\tcase 'email':\r\n-\t\t\tcase 'url':\r\n-\t\t\tcase 'tel':\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\r\n-\t\t\t\t\t   placeholder=\"\u003C?php echo esc_attr( $field['name'] ?? '' ); ?>\"\r\n-\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'textarea':\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Ctextarea name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\r\n-\t\t\t\t\t\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\r\n-\t\t\t\t\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'checkbox':\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\r\n-\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\r\n-\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn '\u003Cdiv>' . ob_get_clean() . '\u003C\u002Fdiv>';\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Archive Package.\n+ *\n+ * @since 4.2.6.4\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LP_Profile;\n+use LP_Settings;\n+\n+class ProfileGeneralInfoTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tprotected function __construct() {\n+\t\t\u002F\u002Fadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info', [ $this, 'sections' ], 2 );\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info-custom', [ $this, 'info_custom' ] );\n+\t\tadd_action( 'learn-press\u002Fadmin\u002Fuser\u002Flayout\u002Fgeneral-info-custom', [ $this, 'user_info_custom' ], 10, 2 );\n+\t}\n+\n+\t\u002F**\n+\t * Show custom field in profile.\n+\t *\n+\t * @param LP_Profile $profile\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function info_custom( $profile ) {\n+\t\t$user_info_custom = lp_get_user_custom_register_fields( $profile->get_user()->get_id() );\n+\t\t$custom_fields    = LP_Settings::get_option( 'register_profile_fields', [] );\n+\n+\t\tif ( $custom_fields ) {\n+\t\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t\t?>\n+\t\t\t\t\u003Cli class=\"form-field form-field__\u003C?php echo esc_attr( $field['id'] ); ?> form-field__clear\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tswitch ( $field['type'] ) {\n+\t\t\t\t\t\tcase 'text':\n+\t\t\t\t\t\tcase 'number':\n+\t\t\t\t\t\tcase 'email':\n+\t\t\t\t\t\tcase 'url':\n+\t\t\t\t\t\tcase 'tel':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel>\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\n+\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'textarea':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel>\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Ctextarea\n+\t\t\t\t\t\t\t\tname=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\n+\t\t\t\t\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\n+\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $field['name'] ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tpublic function user_info_custom( $user, $user_info_custom ) {\n+\t\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', [] );\n+\n+\t\tif ( $custom_fields ) {\n+\t\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t\t?>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth>\n+\t\t\t\t\t\t\u003Clabel\n+\t\t\t\t\t\t\tfor=\"learn-press-custom-register-\u003C?php echo esc_attr( $field['id'] ); ?>\">\u003C?php echo esc_html( $field['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003C\u002Fth>\n+\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tswitch ( $field['type'] ) {\n+\t\t\t\t\t\t\tcase 'text':\n+\t\t\t\t\t\t\tcase 'number':\n+\t\t\t\t\t\t\tcase 'email':\n+\t\t\t\t\t\t\tcase 'url':\n+\t\t\t\t\t\t\tcase 'tel':\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\n+\t\t\t\t\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tcase 'textarea':\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\u003Ctextarea\n+\t\t\t\t\t\t\t\t\tname=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\n+\t\t\t\t\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tpublic function print_type_field( $field, $user_info_custom = [] ) {\n+\t\tob_start();\n+\n+\t\t\u002F\u002Fecho sprintf( '\u003Clabel>%s\u003C\u002Flabel>', esc_html( $field['name'] ?? '' ) );\n+\n+\t\tswitch ( $field['type'] ?? '' ) {\n+\t\t\tcase 'text':\n+\t\t\tcase 'number':\n+\t\t\tcase 'email':\n+\t\t\tcase 'url':\n+\t\t\tcase 'tel':\n+\t\t\t\t?>\n+\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\" class=\"regular-text\"\n+\t\t\t\t\t   placeholder=\"\u003C?php echo esc_attr( $field['name'] ?? '' ); ?>\"\n+\t\t\t\t\t   value=\"\u003C?php echo esc_attr( $user_info_custom[ $field['id'] ] ?? '' ); ?>\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tbreak;\n+\t\t\tcase 'textarea':\n+\t\t\t\t?>\n+\t\t\t\t\u003Ctextarea name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\">\n+\t\t\t\t\t\u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? esc_textarea( $user_info_custom[ $field['id'] ] ) : ''; ?>\n+\t\t\t\t\u003C\u002Ftextarea>\n+\t\t\t\t\u003C?php\n+\t\t\t\tbreak;\n+\t\t\tcase 'checkbox':\n+\t\t\t\t?>\n+\t\t\t\t\u003Cinput name=\"_lp_custom_register[\u003C?php echo esc_attr( $field['id'] ); ?>]\"\n+\t\t\t\t\t   type=\"\u003C?php echo esc_attr( $field['type'] ); ?>\"\n+\t\t\t\t\t   value=\"1\" \u003C?php echo isset( $user_info_custom[ $field['id'] ] ) ? checked( $user_info_custom[ $field['id'] ], 1 ) : ''; ?>>\n+\t\t\t\t\u003C?php\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn '\u003Cdiv>' . ob_get_clean() . '\u003C\u002Fdiv>';\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileInstructorStatisticsTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileInstructorStatisticsTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileInstructorStatisticsTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileInstructorStatisticsTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Archive Package.\r\n- *\r\n- * @since 1.0.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-class ProfileInstructorStatisticsTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics', [ $this, 'sections' ], 2 );\r\n-\t}\r\n-\r\n-\tpublic function sections( $data ) {\r\n-\t\t$template_path = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics\u002Fitem-count',\r\n-\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php'\r\n-\t\t);\r\n-\t\tTemplate::instance()->get_template(\r\n-\t\t\t$template_path,\r\n-\t\t\tcompact( 'data' )\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Archive Package.\n+ *\n+ * @since 1.0.0\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Helpers\\Template;\n+\n+class ProfileInstructorStatisticsTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics', [ $this, 'sections' ], 2 );\n+\t}\n+\n+\tpublic function sections( $data ) {\n+\t\t$template_path = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics\u002Fitem-count',\n+\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php'\n+\t\t);\n+\t\tTemplate::instance()->get_template(\n+\t\t\t$template_path,\n+\t\t\tcompact( 'data' )\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrdersTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrdersTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrdersTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrdersTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileOrdersTemplate.\r\n- *\r\n- * @since 4.2.6.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-class ProfileOrdersTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tpublic static function tab_content() {\r\n-\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Forders' );\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Forders', [ $this, 'sections' ], 2 );\r\n-\t}\r\n-\r\n-\tpublic static function init() {\r\n-\t\tself::instance();\r\n-\t}\r\n-\r\n-\tpublic function sections( $data ) {\r\n-\t\techo '\u003Cdiv class=\"profile-orders\">';\r\n-\t\tTemplate::instance()->get_template(\r\n-\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php'\r\n-\t\t);\r\n-\t\tTemplate::instance()->get_template(\r\n-\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php'\r\n-\t\t);\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileOrdersTemplate.\n+ *\n+ * @since 4.2.6.2\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Helpers\\Template;\n+\n+class ProfileOrdersTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tpublic static function tab_content() {\n+\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Forders' );\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Forders', [ $this, 'sections' ], 2 );\n+\t}\n+\n+\tpublic static function init() {\n+\t\tself::instance();\n+\t}\n+\n+\tpublic function sections( $data ) {\n+\t\techo '\u003Cdiv class=\"profile-orders\">';\n+\t\tTemplate::instance()->get_template(\n+\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php'\n+\t\t);\n+\t\tTemplate::instance()->get_template(\n+\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php'\n+\t\t);\n+\t\techo '\u003C\u002Fdiv>';\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,326 +1,326 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileOrdersTemplate.\r\n- *\r\n- * @since 4.2.6.4\r\n- * @version 1.0.2\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Order;\r\n-use LP_Profile;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LP_Order_DB;\r\n-use LP_Filter;\r\n-use stdClass;\r\n-\r\n-class ProfileOrderTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tpublic static function content() {\r\n-\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Forder-detail' );\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Forder-detail', [ $this, 'sections' ] );\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\r\n-\t}\r\n-\r\n-\tpublic static function init() {\r\n-\t\tself::instance();\r\n-\t}\r\n-\r\n-\tpublic function sections() {\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\t$order   = $profile->get_view_order();\r\n-\t\tif ( false === $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$can_view = false;\r\n-\t\tif ( current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t$can_view = true;\r\n-\t\t} elseif ( (int) $order->get_user_id() === get_current_user_id() ) {\r\n-\t\t\t$can_view = true;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $can_view ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! isset( $order ) ) {\r\n-\t\t\techo esc_html__( 'Invalid order', 'learnpress' );\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$args      = array(\r\n-\t\t\t'id_url'   => 'lp-profile-view-order-details',\r\n-\t\t\t'order_id' => $order->get_id(),\r\n-\t\t\t'paged'    => 1,\r\n-\t\t);\r\n-\t\t$call_back = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'render_order_details',\r\n-\t\t);\r\n-\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Allow callback for AJAX.\r\n-\t *\r\n-\t * @use self::render_order_details\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( array $callbacks ): array {\r\n-\t\t$callbacks[] = get_class( $this ) . ':render_order_details';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render order details content via AJAX.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return stdClass\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function render_order_details( array $args ): stdClass {\r\n-\t\t$content = new stdClass();\r\n-\r\n-\t\t$order_id = $args['order_id'] ?? 0;\r\n-\t\t$paged    = $args['paged'] ?? 1;\r\n-\r\n-\t\t$can_view = false;\r\n-\t\t$user_id  = get_current_user_id();\r\n-\r\n-\t\tif ( current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t$can_view = true;\r\n-\t\t} else {\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\t\t\tif ( $order && (int) $order->get_user_id() === $user_id ) {\r\n-\t\t\t\t$can_view = true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $can_view ) {\r\n-\t\t\treturn $content;\r\n-\t\t}\r\n-\r\n-\t\t$limit         = 10;\r\n-\t\t$lp_order_db   = LP_Order_DB::getInstance();\r\n-\t\t$filter        = new LP_Filter();\r\n-\t\t$filter->limit = $limit;\r\n-\t\t$filter->page  = $paged;\r\n-\t\t$total_row     = 0;\r\n-\t\t$items         = $lp_order_db->get_items( $filter, $order_id, $total_row );\r\n-\t\t$html_items    = '';\r\n-\t\t$order         = learn_press_get_order( $order_id );\r\n-\r\n-\t\tif ( empty( $items ) ) {\r\n-\t\t\t$html_items = sprintf(\r\n-\t\t\t\t'\u003Ctr class=\"order-item\">\u003Ctd colspan=\"4\">%s\u003C\u002Ftd>\u003C\u002Ftr>',\r\n-\t\t\t\t__( 'No items found', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t$item_course_id_meta = learn_press_get_order_item_meta( $item->order_item_id, '_course_id' );\r\n-\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\r\n-\t\t\t\tif ( ( empty( $item->item_type ) || empty( $item->item_id ) )\r\n-\t\t\t\t\t&& ! empty( $item_course_id_meta ) ) {\r\n-\t\t\t\t\t$item->item_id   = $item_course_id_meta;\r\n-\t\t\t\t\t$item->item_type = LP_COURSE_CPT;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$html_items .= self::order_item_row_html( $order, $item );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$total_pages     = $lp_order_db::get_total_pages( $limit, $total_row );\r\n-\t\t$html_pagination = Template::instance()->html_pagination(\r\n-\t\t\t[\r\n-\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t'paged'       => $paged,\r\n-\t\t\t]\r\n-\t\t);\r\n-\t\tif ( ! empty( $html_pagination ) ) {\r\n-\t\t\t$html_pagination = sprintf(\r\n-\t\t\t\t'\u003Ctr class=\"order-item\">\r\n-\t\t\t\t\t\u003Ctd class=\"lp-order-items-wrapper\" style=\"margin:0;text-align:left;\" colspan=\"2\">%s\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>',\r\n-\t\t\t\t$html_pagination\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section          = array(\r\n-\t\t\t'header'          => sprintf(\r\n-\t\t\t\t'\u003Ch3>%s\u003C\u002Fh3>',\r\n-\t\t\t\tesc_html__( 'Order Details', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'table'           => '\u003Ctable class=\"lp-list-table order-table-details\">',\r\n-\t\t\t'table-header'    => self::table_header(),\r\n-\t\t\t'table-body'      => '\u003Ctbody>',\r\n-\t\t\t'items'           => $html_items,\r\n-\t\t\t'pagination'      => $html_pagination,\r\n-\t\t\t'do_action_items' => self::action_table_items( $order ),\r\n-\t\t\t'table-body-end'  => '\u003C\u002Ftbody>',\r\n-\t\t\t'table-footer'    => self::table_footer( $order ),\r\n-\t\t\t'table-end'       => '\u003C\u002Ftable>',\r\n-\t\t\t'footer'          => self::order_detail_content_footer( $order ),\r\n-\t\t);\r\n-\t\t$content->content = Template::combine_components( $section );\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\tpublic static function table_header() {\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'     => '\u003Cthead>',\r\n-\t\t\t'row'      => sprintf(\r\n-\t\t\t\t'\u003Ctr>\r\n-\t\t\t\t\t\u003Cth>%s\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth>%s\u003C\u002Fth>\r\n-\t\t\t\t\u003C\u002Ftr>',\r\n-\t\t\t\t__( 'Item', 'learnpress' ),\r\n-\t\t\t\t__( 'Total', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end' => '\u003C\u002Fthead>',\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML for table footer in order detail page.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function table_footer( $order ): string {\r\n-\t\tob_start();\r\n-\t\tdo_action( 'learn-press\u002Forder\u002Fitems-table-foot', $order );\r\n-\t\t$html_after_subtotal_row = ob_get_clean();\r\n-\r\n-\t\t$section = array(\r\n-\t\t\t'wrap'         => '\u003Ctfoot>',\r\n-\t\t\t'subtotal_row' => sprintf(\r\n-\t\t\t\t'\u003Ctr>\u003Cth scope=\"row\">%s\u003C\u002Fth>\u003Ctd>%s\u003C\u002Ftd>\u003C\u002Ftr>',\r\n-\t\t\t\tesc_html__( 'Subtotal', 'learnpress' ),\r\n-\t\t\t\tesc_html( $order->get_formatted_order_subtotal() )\r\n-\t\t\t),\r\n-\t\t\t'action'       => $html_after_subtotal_row,\r\n-\t\t\t'total_row'    => sprintf(\r\n-\t\t\t\t'\u003Ctr>\u003Cth scope=\"row\">%s\u003C\u002Fth>\u003Ctd>%s\u003C\u002Ftd>\u003C\u002Ftr>',\r\n-\t\t\t\tesc_html__( 'Total', 'learnpress' ),\r\n-\t\t\t\tesc_html( $order->get_formatted_order_total() )\r\n-\t\t\t),\r\n-\t\t\t'wrap-end'     => '\u003C\u002Ftfoot>',\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\tpublic static function action_table_items( $order ) {\r\n-\t\tob_start();\r\n-\t\tdo_action( 'learn-press\u002Forder\u002Fitems-table', $order );\r\n-\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTMl for each order item row in order detail page.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param object $item\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function order_item_row_html( $order, $item ): string {\r\n-\t\t$total           = learn_press_get_order_item_meta( $item->order_item_id, '_total' );\r\n-\t\t$total           = ! empty( $total ) ? $total : 0;\r\n-\t\t$quantity        = learn_press_get_order_item_meta( $item->order_item_id, '_quantity' );\r\n-\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() ?? learn_press_get_currency() );\r\n-\t\t$item_label      = esc_html( $item->order_item_name );\r\n-\t\tif ( $item->item_type === LP_COURSE_CPT ) {\r\n-\t\t\t$item_label = sprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\tesc_url_raw( get_permalink( $item->item_id ) ),\r\n-\t\t\t\tesc_html( $item->order_item_name )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\t$item_label = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Forder\u002Fitem-label',\r\n-\t\t\t$item_label,\r\n-\t\t\t(array) $item,\r\n-\t\t\t$order\r\n-\t\t);\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Forder\u002Fitem-row-html',\r\n-\t\t\tarray(\r\n-\t\t\t\t'wrap'       => '\u003Ctr class=\"order-item\">',\r\n-\t\t\t\t'name-cell'  => sprintf(\r\n-\t\t\t\t\t'\u003Ctd>%s\u003C\u002Ftd>',\r\n-\t\t\t\t\t$item_label\r\n-\t\t\t\t),\r\n-\t\t\t\t'total-cell' => sprintf(\r\n-\t\t\t\t\t'\u003Ctd>\u003Cspan class=\"course-price\">%s\u003C\u002Fspan>\u003C\u002Ftd>',\r\n-\t\t\t\t\tlearn_press_format_price( $total, $currency_symbol )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrap-end'   => '\u003C\u002Ftr>',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML content footer, below table list items for order detail page.\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.3.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function order_detail_content_footer( $order ): string {\r\n-\t\t$section = array(\r\n-\t\t\t'order_key'    => sprintf(\r\n-\t\t\t\t'\u003Cp>\u003Cstrong>%s\u003C\u002Fstrong> %s\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Order key:', 'learnpress' ),\r\n-\t\t\t\tesc_html( $order->get_order_key() )\r\n-\t\t\t),\r\n-\t\t\t'order_status' => sprintf(\r\n-\t\t\t\t'\u003Cp>\r\n-\t\t\t\t\t\u003Cstrong>%s\u003C\u002Fstrong>\r\n-\t\t\t\t\t\u003Cspan class=\"lp-label label-%s\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fp>',\r\n-\t\t\t\tesc_html__( 'Order status:', 'learnpress' ),\r\n-\t\t\t\tesc_attr( $order->get_status() ),\r\n-\t\t\t\twp_kses_post( $order->get_order_status_html() )\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileOrdersTemplate.\n+ *\n+ * @since 4.2.6.4\n+ * @version 1.0.2\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Models\\UserModel;\n+use LP_Order;\n+use LP_Profile;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LP_Order_DB;\n+use LP_Filter;\n+use stdClass;\n+\n+class ProfileOrderTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tpublic static function content() {\n+\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Forder-detail' );\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Forder-detail', [ $this, 'sections' ] );\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\n+\t}\n+\n+\tpublic static function init() {\n+\t\tself::instance();\n+\t}\n+\n+\tpublic function sections() {\n+\t\t$profile = LP_Profile::instance();\n+\t\t$order   = $profile->get_view_order();\n+\t\tif ( false === $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$can_view = false;\n+\t\tif ( current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t$can_view = true;\n+\t\t} elseif ( (int) $order->get_user_id() === get_current_user_id() ) {\n+\t\t\t$can_view = true;\n+\t\t}\n+\n+\t\tif ( ! $can_view ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! isset( $order ) ) {\n+\t\t\techo esc_html__( 'Invalid order', 'learnpress' );\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$args      = array(\n+\t\t\t'id_url'   => 'lp-profile-view-order-details',\n+\t\t\t'order_id' => $order->get_id(),\n+\t\t\t'paged'    => 1,\n+\t\t);\n+\t\t$call_back = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'render_order_details',\n+\t\t);\n+\t\techo TemplateAJAX::load_content_via_ajax( $args, $call_back );\n+\t}\n+\n+\t\u002F**\n+\t * Allow callback for AJAX.\n+\t *\n+\t * @use self::render_order_details\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( array $callbacks ): array {\n+\t\t$callbacks[] = get_class( $this ) . ':render_order_details';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * Render order details content via AJAX.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return stdClass\n+\t * @since 4.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function render_order_details( array $args ): stdClass {\n+\t\t$content = new stdClass();\n+\n+\t\t$order_id = $args['order_id'] ?? 0;\n+\t\t$paged    = $args['paged'] ?? 1;\n+\n+\t\t$can_view = false;\n+\t\t$user_id  = get_current_user_id();\n+\n+\t\tif ( current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t$can_view = true;\n+\t\t} else {\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\t\t\tif ( $order && (int) $order->get_user_id() === $user_id ) {\n+\t\t\t\t$can_view = true;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $can_view ) {\n+\t\t\treturn $content;\n+\t\t}\n+\n+\t\t$limit         = 10;\n+\t\t$lp_order_db   = LP_Order_DB::getInstance();\n+\t\t$filter        = new LP_Filter();\n+\t\t$filter->limit = $limit;\n+\t\t$filter->page  = $paged;\n+\t\t$total_row     = 0;\n+\t\t$items         = $lp_order_db->get_items( $filter, $order_id, $total_row );\n+\t\t$html_items    = '';\n+\t\t$order         = learn_press_get_order( $order_id );\n+\n+\t\tif ( empty( $items ) ) {\n+\t\t\t$html_items = sprintf(\n+\t\t\t\t'\u003Ctr class=\"order-item\">\u003Ctd colspan=\"4\">%s\u003C\u002Ftd>\u003C\u002Ftr>',\n+\t\t\t\t__( 'No items found', 'learnpress' )\n+\t\t\t);\n+\t\t} else {\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t$item_course_id_meta = learn_press_get_order_item_meta( $item->order_item_id, '_course_id' );\n+\t\t\t\t\u002F\u002F For old data, the data not migrated yet to new column.\n+\t\t\t\tif ( ( empty( $item->item_type ) || empty( $item->item_id ) )\n+\t\t\t\t\t&& ! empty( $item_course_id_meta ) ) {\n+\t\t\t\t\t$item->item_id   = $item_course_id_meta;\n+\t\t\t\t\t$item->item_type = LP_COURSE_CPT;\n+\t\t\t\t}\n+\n+\t\t\t\t$html_items .= self::order_item_row_html( $order, $item );\n+\t\t\t}\n+\t\t}\n+\t\t$total_pages     = $lp_order_db::get_total_pages( $limit, $total_row );\n+\t\t$html_pagination = Template::instance()->html_pagination(\n+\t\t\t[\n+\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t'paged'       => $paged,\n+\t\t\t]\n+\t\t);\n+\t\tif ( ! empty( $html_pagination ) ) {\n+\t\t\t$html_pagination = sprintf(\n+\t\t\t\t'\u003Ctr class=\"order-item\">\n+\t\t\t\t\t\u003Ctd class=\"lp-order-items-wrapper\" style=\"margin:0;text-align:left;\" colspan=\"2\">%s\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>',\n+\t\t\t\t$html_pagination\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section          = array(\n+\t\t\t'header'          => sprintf(\n+\t\t\t\t'\u003Ch3>%s\u003C\u002Fh3>',\n+\t\t\t\tesc_html__( 'Order Details', 'learnpress' )\n+\t\t\t),\n+\t\t\t'table'           => '\u003Ctable class=\"lp-list-table order-table-details\">',\n+\t\t\t'table-header'    => self::table_header(),\n+\t\t\t'table-body'      => '\u003Ctbody>',\n+\t\t\t'items'           => $html_items,\n+\t\t\t'pagination'      => $html_pagination,\n+\t\t\t'do_action_items' => self::action_table_items( $order ),\n+\t\t\t'table-body-end'  => '\u003C\u002Ftbody>',\n+\t\t\t'table-footer'    => self::table_footer( $order ),\n+\t\t\t'table-end'       => '\u003C\u002Ftable>',\n+\t\t\t'footer'          => self::order_detail_content_footer( $order ),\n+\t\t);\n+\t\t$content->content = Template::combine_components( $section );\n+\n+\t\treturn $content;\n+\t}\n+\n+\tpublic static function table_header() {\n+\t\t$section = array(\n+\t\t\t'wrap'     => '\u003Cthead>',\n+\t\t\t'row'      => sprintf(\n+\t\t\t\t'\u003Ctr>\n+\t\t\t\t\t\u003Cth>%s\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth>%s\u003C\u002Fth>\n+\t\t\t\t\u003C\u002Ftr>',\n+\t\t\t\t__( 'Item', 'learnpress' ),\n+\t\t\t\t__( 'Total', 'learnpress' )\n+\t\t\t),\n+\t\t\t'wrap-end' => '\u003C\u002Fthead>',\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML for table footer in order detail page.\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return string\n+\t * @since 4.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function table_footer( $order ): string {\n+\t\tob_start();\n+\t\tdo_action( 'learn-press\u002Forder\u002Fitems-table-foot', $order );\n+\t\t$html_after_subtotal_row = ob_get_clean();\n+\n+\t\t$section = array(\n+\t\t\t'wrap'         => '\u003Ctfoot>',\n+\t\t\t'subtotal_row' => sprintf(\n+\t\t\t\t'\u003Ctr>\u003Cth scope=\"row\">%s\u003C\u002Fth>\u003Ctd>%s\u003C\u002Ftd>\u003C\u002Ftr>',\n+\t\t\t\tesc_html__( 'Subtotal', 'learnpress' ),\n+\t\t\t\tesc_html( $order->get_formatted_order_subtotal() )\n+\t\t\t),\n+\t\t\t'action'       => $html_after_subtotal_row,\n+\t\t\t'total_row'    => sprintf(\n+\t\t\t\t'\u003Ctr>\u003Cth scope=\"row\">%s\u003C\u002Fth>\u003Ctd>%s\u003C\u002Ftd>\u003C\u002Ftr>',\n+\t\t\t\tesc_html__( 'Total', 'learnpress' ),\n+\t\t\t\tesc_html( $order->get_formatted_order_total() )\n+\t\t\t),\n+\t\t\t'wrap-end'     => '\u003C\u002Ftfoot>',\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\tpublic static function action_table_items( $order ) {\n+\t\tob_start();\n+\t\tdo_action( 'learn-press\u002Forder\u002Fitems-table', $order );\n+\n+\t\treturn ob_get_clean();\n+\t}\n+\n+\t\u002F**\n+\t * HTMl for each order item row in order detail page.\n+\t *\n+\t * @param LP_Order $order\n+\t * @param object $item\n+\t *\n+\t * @return string\n+\t * @since 4.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function order_item_row_html( $order, $item ): string {\n+\t\t$total           = learn_press_get_order_item_meta( $item->order_item_id, '_total' );\n+\t\t$total           = ! empty( $total ) ? $total : 0;\n+\t\t$quantity        = learn_press_get_order_item_meta( $item->order_item_id, '_quantity' );\n+\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() ?? learn_press_get_currency() );\n+\t\t$item_label      = esc_html( $item->order_item_name );\n+\t\tif ( $item->item_type === LP_COURSE_CPT ) {\n+\t\t\t$item_label = sprintf(\n+\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\tesc_url_raw( get_permalink( $item->item_id ) ),\n+\t\t\t\tesc_html( $item->order_item_name )\n+\t\t\t);\n+\t\t}\n+\t\t$item_label = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Forder\u002Fitem-label',\n+\t\t\t$item_label,\n+\t\t\t(array) $item,\n+\t\t\t$order\n+\t\t);\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Forder\u002Fitem-row-html',\n+\t\t\tarray(\n+\t\t\t\t'wrap'       => '\u003Ctr class=\"order-item\">',\n+\t\t\t\t'name-cell'  => sprintf(\n+\t\t\t\t\t'\u003Ctd>%s\u003C\u002Ftd>',\n+\t\t\t\t\t$item_label\n+\t\t\t\t),\n+\t\t\t\t'total-cell' => sprintf(\n+\t\t\t\t\t'\u003Ctd>\u003Cspan class=\"course-price\">%s\u003C\u002Fspan>\u003C\u002Ftd>',\n+\t\t\t\t\tlearn_press_format_price( $total, $currency_symbol )\n+\t\t\t\t),\n+\t\t\t\t'wrap-end'   => '\u003C\u002Ftr>',\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML content footer, below table list items for order detail page.\n+\t *\n+\t * @param LP_Order $order\n+\t *\n+\t * @return string\n+\t * @since 4.3.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function order_detail_content_footer( $order ): string {\n+\t\t$section = array(\n+\t\t\t'order_key'    => sprintf(\n+\t\t\t\t'\u003Cp>\u003Cstrong>%s\u003C\u002Fstrong> %s\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Order key:', 'learnpress' ),\n+\t\t\t\tesc_html( $order->get_order_key() )\n+\t\t\t),\n+\t\t\t'order_status' => sprintf(\n+\t\t\t\t'\u003Cp>\n+\t\t\t\t\t\u003Cstrong>%s\u003C\u002Fstrong>\n+\t\t\t\t\t\u003Cspan class=\"lp-label label-%s\">%s\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fp>',\n+\t\t\t\tesc_html__( 'Order status:', 'learnpress' ),\n+\t\t\t\tesc_attr( $order->get_status() ),\n+\t\t\t\twp_kses_post( $order->get_order_status_html() )\n+\t\t\t),\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,280 +1,280 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileQuizzesTemplate.\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Table\\TableListTemplate;\r\n-use LearnPress\\TemplateHooks\\TemplateAJAX;\r\n-use LearnPress\\Models\\UserItems\\UserQuizModel;\r\n-use LP_Database;\r\n-use LP_Profile;\r\n-use LP_Datetime;\r\n-use Exception;\r\n-use LP_User_Items_Filter;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class ProfileQuizzesTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set up the callback for the AJAX request.\r\n-\t *\r\n-\t * @param array $callbacks\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function allow_callback( $callbacks ) {\r\n-\t\t$callbacks[] = get_class( $this ) . ':renderContent';\r\n-\r\n-\t\treturn $callbacks;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic static function tab_content() {\r\n-\t\t$html_wrapper = array(\r\n-\t\t\t'\u003Cdiv class=\"learn-press-subtab-content\">' => '\u003C\u002Fdiv>',\r\n-\t\t);\r\n-\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\tif ( ! $profile->get_user() ) {\r\n-\t\t\tthrow new Exception( __( 'Invalid User Profile', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$user_id = $profile->get_user()->get_id();\r\n-\t\tif ( ! $user_id ) {\r\n-\t\t\tthrow new Exception( __( 'User is not exist', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @uses ProfileQuizzesTemplate::renderContent()\r\n-\t\t *\u002F\r\n-\t\t$callback = array(\r\n-\t\t\t'class'  => self::class,\r\n-\t\t\t'method' => 'renderContent',\r\n-\t\t);\r\n-\t\t$args     = array(\r\n-\t\t\t'id_url'  => 'profile_quizzes',\r\n-\t\t\t'user_id' => $user_id,\r\n-\t\t\t'paged'   => 1,\r\n-\t\t\t'type'    => 'all',\r\n-\t\t);\r\n-\r\n-\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\r\n-\t\t$html    = Template::instance()->nest_elements( $html_wrapper, $content );\r\n-\t\techo $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the content for the quiz tab.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return stdClass\r\n-\t *\u002F\r\n-\tpublic static function renderContent( array $args ): stdClass {\r\n-\t\t$content = new stdClass();\r\n-\t\t$html    = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$userModel = UserModel::find( $args['user_id'], true );\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\tthrow new Exception( __( 'Invalid User', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check permission, self user or admin can view\r\n-\t\t\t$user_current_id = get_current_user_id();\r\n-\t\t\tif ( $user_current_id !== $userModel->get_id()\r\n-\t\t\t\t&& ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\r\n-\t\t\t\tthrow new Exception( __( 'You do not have permission to view this profile.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_rows = 0;\r\n-\t\t\t$limit      = apply_filters(\r\n-\t\t\t\t'learnpress\u002Fprofile\u002Fuser-quizzes\u002Flimit',\r\n-\t\t\t\tget_option( 'posts_per_page', 10 )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$filter          = new UserItemsFilter();\r\n-\t\t\t$filter->user_id = $userModel->get_id();\r\n-\t\t\t$filter->limit   = $limit;\r\n-\t\t\t$filter->page    = $args['paged'];\r\n-\r\n-\t\t\tswitch ( $args['type'] ) {\r\n-\t\t\t\tcase UserItemModel::STATUS_COMPLETED:\r\n-\t\t\t\t\t$filter->status = LP_ITEM_COMPLETED;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase UserItemModel::GRADUATION_PASSED:\r\n-\t\t\t\t\t$filter->graduation = LP_GRADUATION_PASSED;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase UserItemModel::GRADUATION_FAILED:\r\n-\t\t\t\t\t$filter->graduation = LP_GRADUATION_FAILED;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_quizzes = $userModel->get_quizzes_attend( $filter, $total_rows );\r\n-\t\t\t$total_pages  = LP_Database::get_total_pages( $limit, $total_rows );\r\n-\r\n-\t\t\t$header = [\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => __( 'Quiz', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => __( 'Result', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => __( 'Time spent', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'title' => __( 'Started Date', 'learnpress' ),\r\n-\t\t\t\t],\r\n-\t\t\t];\r\n-\t\t\t$body   = [];\r\n-\r\n-\t\t\tif ( ! empty( $user_quizzes ) ) {\r\n-\t\t\t\tforeach ( $user_quizzes as $user_quiz ) {\r\n-\t\t\t\t\t$userQuizModel = UserQuizModel::find_user_item(\r\n-\t\t\t\t\t\t$user_quiz->user_id,\r\n-\t\t\t\t\t\t$user_quiz->item_id,\r\n-\t\t\t\t\t\t$user_quiz->item_type,\r\n-\t\t\t\t\t\t$user_quiz->ref_id,\r\n-\t\t\t\t\t\t$user_quiz->ref_type,\r\n-\t\t\t\t\t\ttrue\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tif ( ! $userQuizModel ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$quizPostModel = $userQuizModel->get_quiz_post_model();\r\n-\t\t\t\t\tif ( ! $quizPostModel ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$courseModel = $userQuizModel->get_course_model();\r\n-\r\n-\t\t\t\t\t$item_body = [\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t\tesc_url( $courseModel->get_item_link( $quizPostModel->get_id() ) ),\r\n-\t\t\t\t\t\t\tesc_html( $quizPostModel->get_the_title() )\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"result-percent\">%s%%\u003C\u002Fspan>\u003Cspan class=\"lp-label label-%s\">&nbsp;%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t\t\tesc_html( $userQuizModel->get_result()['result'] ),\r\n-\t\t\t\t\t\t\tesc_attr( $user_quiz->status ),\r\n-\t\t\t\t\t\t\t$userQuizModel->get_status_label( $user_quiz->graduation )\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t$userQuizModel->get_time_spend(),\r\n-\t\t\t\t\t\t( new LP_Datetime( $userQuizModel->get_start_time() ) )->format( LP_Datetime::I18N_FORMAT ),\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\t$body[] = $item_body;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$section_footer = [\r\n-\t\t\t\t\t'page_result' => TableListTemplate::instance()->html_page_result(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'paged'      => $args['paged'],\r\n-\t\t\t\t\t\t\t'per_page'   => $limit,\r\n-\t\t\t\t\t\t\t'total_rows' => $total_rows,\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'pagination'  => ListCoursesTemplate::instance()->html_pagination_number(\r\n-\t\t\t\t\t\t[\r\n-\t\t\t\t\t\t\t'total_pages' => $total_pages,\r\n-\t\t\t\t\t\t\t'paged'       => $args['paged'],\r\n-\t\t\t\t\t\t]\r\n-\t\t\t\t\t),\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\t$table_args = array(\r\n-\t\t\t\t\t'header'      => $header,\r\n-\t\t\t\t\t'body'        => $body,\r\n-\t\t\t\t\t'footer'      => Template::combine_components( $section_footer ),\r\n-\t\t\t\t\t'class_table' => 'profile-list-table profile-list-quizzes',\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$html = TableListTemplate::instance()->html_table( $table_args );\r\n-\t\t\t} else {\r\n-\t\t\t\t$html = Template::print_message(\r\n-\t\t\t\t\t__( 'No quizzes found', 'learnpress' ),\r\n-\t\t\t\t\t'info',\r\n-\t\t\t\t\tfalse\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'header'  => self::instance()->html_tabs_header( $args['type'] ),\r\n-\t\t\t\t'content' => $html,\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content->content     = Template::combine_components( $section );\r\n-\t\t\t$content->total_pages = $total_pages;\r\n-\t\t\t$content->paged       = $args['paged'];\r\n-\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the header for the quiz tab.\r\n-\t *\r\n-\t * @param string $tab_active The active tab.\r\n-\t *\r\n-\t * @return string.\r\n-\t *\u002F\r\n-\tpublic static function html_tabs_header( string $tab_active = 'all' ): string {\r\n-\t\t$filter_types = apply_filters(\r\n-\t\t\t'learnpress\u002Fprofile\u002Fquiz-tab\u002Fheader\u002Ffilter-types',\r\n-\t\t\tarray(\r\n-\t\t\t\t'all'       => __( 'All', 'learnpress' ),\r\n-\t\t\t\t'completed' => __( 'Finished', 'learnpress' ),\r\n-\t\t\t\t'passed'    => __( 'Passed', 'learnpress' ),\r\n-\t\t\t\t'failed'    => __( 'Failed', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$html_li = '';\r\n-\t\tforeach ( $filter_types as $type => $label ) {\r\n-\t\t\t$html_li .= sprintf(\r\n-\t\t\t\t'\u003Cli class=\"%s%s\">\r\n-\t\t\t\t\t\u003Cspan data-filter=\"%s\">%s\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fli>',\r\n-\t\t\t\t$type,\r\n-\t\t\t\t$type === $tab_active ? ' active' : '',\r\n-\t\t\t\tesc_attr( $type ),\r\n-\t\t\t\tesc_attr( $label )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => '\u003Cdiv class=\"learn-press-tabs\">',\r\n-\t\t\t'types'       => '\u003Cdiv class=\"learn-press-filters quiz-filter-types\">',\r\n-\t\t\t'lis'         => $html_li,\r\n-\t\t\t'types_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileQuizzesTemplate.\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Table\\TableListTemplate;\n+use LearnPress\\TemplateHooks\\TemplateAJAX;\n+use LearnPress\\Models\\UserItems\\UserQuizModel;\n+use LP_Database;\n+use LP_Profile;\n+use LP_Datetime;\n+use Exception;\n+use LP_User_Items_Filter;\n+use stdClass;\n+use Throwable;\n+\n+class ProfileQuizzesTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'lp\u002Frest\u002Fajax\u002Fallow_callback', array( $this, 'allow_callback' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Set up the callback for the AJAX request.\n+\t *\n+\t * @param array $callbacks\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function allow_callback( $callbacks ) {\n+\t\t$callbacks[] = get_class( $this ) . ':renderContent';\n+\n+\t\treturn $callbacks;\n+\t}\n+\n+\t\u002F**\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic static function tab_content() {\n+\t\t$html_wrapper = array(\n+\t\t\t'\u003Cdiv class=\"learn-press-subtab-content\">' => '\u003C\u002Fdiv>',\n+\t\t);\n+\n+\t\t$profile = LP_Profile::instance();\n+\t\tif ( ! $profile->get_user() ) {\n+\t\t\tthrow new Exception( __( 'Invalid User Profile', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$user_id = $profile->get_user()->get_id();\n+\t\tif ( ! $user_id ) {\n+\t\t\tthrow new Exception( __( 'User is not exist', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @uses ProfileQuizzesTemplate::renderContent()\n+\t\t *\u002F\n+\t\t$callback = array(\n+\t\t\t'class'  => self::class,\n+\t\t\t'method' => 'renderContent',\n+\t\t);\n+\t\t$args     = array(\n+\t\t\t'id_url'  => 'profile_quizzes',\n+\t\t\t'user_id' => $user_id,\n+\t\t\t'paged'   => 1,\n+\t\t\t'type'    => 'all',\n+\t\t);\n+\n+\t\t$content = TemplateAJAX::load_content_via_ajax( $args, $callback );\n+\t\t$html    = Template::instance()->nest_elements( $html_wrapper, $content );\n+\t\techo $html;\n+\t}\n+\n+\t\u002F**\n+\t * Render the content for the quiz tab.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return stdClass\n+\t *\u002F\n+\tpublic static function renderContent( array $args ): stdClass {\n+\t\t$content = new stdClass();\n+\t\t$html    = '';\n+\n+\t\ttry {\n+\t\t\t$userModel = UserModel::find( $args['user_id'], true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\tthrow new Exception( __( 'Invalid User', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check permission, self user or admin can view\n+\t\t\t$user_current_id = get_current_user_id();\n+\t\t\tif ( $user_current_id !== $userModel->get_id()\n+\t\t\t\t&& ! current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) {\n+\t\t\t\tthrow new Exception( __( 'You do not have permission to view this profile.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$total_rows = 0;\n+\t\t\t$limit      = apply_filters(\n+\t\t\t\t'learnpress\u002Fprofile\u002Fuser-quizzes\u002Flimit',\n+\t\t\t\tget_option( 'posts_per_page', 10 )\n+\t\t\t);\n+\n+\t\t\t$filter          = new UserItemsFilter();\n+\t\t\t$filter->user_id = $userModel->get_id();\n+\t\t\t$filter->limit   = $limit;\n+\t\t\t$filter->page    = $args['paged'];\n+\n+\t\t\tswitch ( $args['type'] ) {\n+\t\t\t\tcase UserItemModel::STATUS_COMPLETED:\n+\t\t\t\t\t$filter->status = LP_ITEM_COMPLETED;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase UserItemModel::GRADUATION_PASSED:\n+\t\t\t\t\t$filter->graduation = LP_GRADUATION_PASSED;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase UserItemModel::GRADUATION_FAILED:\n+\t\t\t\t\t$filter->graduation = LP_GRADUATION_FAILED;\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$user_quizzes = $userModel->get_quizzes_attend( $filter, $total_rows );\n+\t\t\t$total_pages  = LP_Database::get_total_pages( $limit, $total_rows );\n+\n+\t\t\t$header = [\n+\t\t\t\t[\n+\t\t\t\t\t'title' => __( 'Quiz', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title' => __( 'Result', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title' => __( 'Time spent', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t\t[\n+\t\t\t\t\t'title' => __( 'Started Date', 'learnpress' ),\n+\t\t\t\t],\n+\t\t\t];\n+\t\t\t$body   = [];\n+\n+\t\t\tif ( ! empty( $user_quizzes ) ) {\n+\t\t\t\tforeach ( $user_quizzes as $user_quiz ) {\n+\t\t\t\t\t$userQuizModel = UserQuizModel::find_user_item(\n+\t\t\t\t\t\t$user_quiz->user_id,\n+\t\t\t\t\t\t$user_quiz->item_id,\n+\t\t\t\t\t\t$user_quiz->item_type,\n+\t\t\t\t\t\t$user_quiz->ref_id,\n+\t\t\t\t\t\t$user_quiz->ref_type,\n+\t\t\t\t\t\ttrue\n+\t\t\t\t\t);\n+\t\t\t\t\tif ( ! $userQuizModel ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$quizPostModel = $userQuizModel->get_quiz_post_model();\n+\t\t\t\t\tif ( ! $quizPostModel ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$courseModel = $userQuizModel->get_course_model();\n+\n+\t\t\t\t\t$item_body = [\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t\tesc_url( $courseModel->get_item_link( $quizPostModel->get_id() ) ),\n+\t\t\t\t\t\t\tesc_html( $quizPostModel->get_the_title() )\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"result-percent\">%s%%\u003C\u002Fspan>\u003Cspan class=\"lp-label label-%s\">&nbsp;%s\u003C\u002Fspan>',\n+\t\t\t\t\t\t\tesc_html( $userQuizModel->get_result()['result'] ),\n+\t\t\t\t\t\t\tesc_attr( $user_quiz->status ),\n+\t\t\t\t\t\t\t$userQuizModel->get_status_label( $user_quiz->graduation )\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t$userQuizModel->get_time_spend(),\n+\t\t\t\t\t\t( new LP_Datetime( $userQuizModel->get_start_time() ) )->format( LP_Datetime::I18N_FORMAT ),\n+\t\t\t\t\t];\n+\n+\t\t\t\t\t$body[] = $item_body;\n+\t\t\t\t}\n+\n+\t\t\t\t$section_footer = [\n+\t\t\t\t\t'page_result' => TableListTemplate::instance()->html_page_result(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'paged'      => $args['paged'],\n+\t\t\t\t\t\t\t'per_page'   => $limit,\n+\t\t\t\t\t\t\t'total_rows' => $total_rows,\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t\t'pagination'  => ListCoursesTemplate::instance()->html_pagination_number(\n+\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t'total_pages' => $total_pages,\n+\t\t\t\t\t\t\t'paged'       => $args['paged'],\n+\t\t\t\t\t\t]\n+\t\t\t\t\t),\n+\t\t\t\t];\n+\n+\t\t\t\t$table_args = array(\n+\t\t\t\t\t'header'      => $header,\n+\t\t\t\t\t'body'        => $body,\n+\t\t\t\t\t'footer'      => Template::combine_components( $section_footer ),\n+\t\t\t\t\t'class_table' => 'profile-list-table profile-list-quizzes',\n+\t\t\t\t);\n+\n+\t\t\t\t$html = TableListTemplate::instance()->html_table( $table_args );\n+\t\t\t} else {\n+\t\t\t\t$html = Template::print_message(\n+\t\t\t\t\t__( 'No quizzes found', 'learnpress' ),\n+\t\t\t\t\t'info',\n+\t\t\t\t\tfalse\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$section = [\n+\t\t\t\t'header'  => self::instance()->html_tabs_header( $args['type'] ),\n+\t\t\t\t'content' => $html,\n+\t\t\t];\n+\n+\t\t\t$content->content     = Template::combine_components( $section );\n+\t\t\t$content->total_pages = $total_pages;\n+\t\t\t$content->paged       = $args['paged'];\n+\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$content->content = Template::print_message( $e->getMessage(), 'error', false );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Render the header for the quiz tab.\n+\t *\n+\t * @param string $tab_active The active tab.\n+\t *\n+\t * @return string.\n+\t *\u002F\n+\tpublic static function html_tabs_header( string $tab_active = 'all' ): string {\n+\t\t$filter_types = apply_filters(\n+\t\t\t'learnpress\u002Fprofile\u002Fquiz-tab\u002Fheader\u002Ffilter-types',\n+\t\t\tarray(\n+\t\t\t\t'all'       => __( 'All', 'learnpress' ),\n+\t\t\t\t'completed' => __( 'Finished', 'learnpress' ),\n+\t\t\t\t'passed'    => __( 'Passed', 'learnpress' ),\n+\t\t\t\t'failed'    => __( 'Failed', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$html_li = '';\n+\t\tforeach ( $filter_types as $type => $label ) {\n+\t\t\t$html_li .= sprintf(\n+\t\t\t\t'\u003Cli class=\"%s%s\">\n+\t\t\t\t\t\u003Cspan data-filter=\"%s\">%s\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fli>',\n+\t\t\t\t$type,\n+\t\t\t\t$type === $tab_active ? ' active' : '',\n+\t\t\t\tesc_attr( $type ),\n+\t\t\t\tesc_attr( $label )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => '\u003Cdiv class=\"learn-press-tabs\">',\n+\t\t\t'types'       => '\u003Cdiv class=\"learn-press-filters quiz-filter-types\">',\n+\t\t\t'lis'         => $html_li,\n+\t\t\t'types_end'   => '\u003C\u002Fdiv>',\n+\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentEnrolledTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentEnrolledTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentEnrolledTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentEnrolledTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,96 +1,96 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileStudentEnrolledTemplate.\r\n- *\r\n- * @since 4.3.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LP_Profile;\r\n-\r\n-class ProfileStudentEnrolledTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'learn-press\u002Fget-profile-tabs', array( $this, 'display_profile_tab' ), 10, 3 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show tab for instructor viewing own profile only.\r\n-\t *\r\n-\t * @param array $tabs\r\n-\t * @param mixed $user_of_profile\r\n-\t * @param mixed $user_current\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function display_profile_tab( array $tabs, $user_of_profile, $user_current ): array {\r\n-\t\tif ( ! isset( $tabs['enrolled-students'] ) ) {\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Force callback to bound instance method to ensure call_user_func_array() can execute.\r\n-\t\t$tabs['enrolled-students']['callback'] = array( $this, 'tab_content' );\r\n-\r\n-\t\tif ( ! is_object( $user_of_profile ) || ! method_exists( $user_of_profile, 'is_instructor' ) ||\r\n-\t\t\t! method_exists( $user_of_profile, 'get_id' ) ) {\r\n-\t\t\tunset( $tabs['enrolled-students'] );\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_object( $user_current ) || ! method_exists( $user_current, 'get_id' ) ) {\r\n-\t\t\tunset( $tabs['enrolled-students'] );\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user_of_profile->can_create_course() ) {\r\n-\t\t\tunset( $tabs['enrolled-students'] );\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Show tab for instructor viewing own profile only.\r\n-\t\tif ( (int) $user_of_profile->get_id() !== (int) $user_current->get_id() ) {\r\n-\t\t\tunset( $tabs['enrolled-students'] );\r\n-\t\t\treturn $tabs;\r\n-\t\t}\r\n-\r\n-\t\treturn $tabs;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render content of profile tab \"Enrolled Students\".\r\n-\t *\r\n-\t * @param string $tab_key\r\n-\t * @param mixed  $profile_tab\r\n-\t * @param mixed  $user\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function tab_content( $tab_key = '', $profile_tab = null, $user = null ): string {\r\n-\t\t$profile      = LP_Profile::instance();\r\n-\t\t$user         = is_object( $user ) ? $user : $profile->get_user();\r\n-\t\t$user_current = $profile->get_user_current();\r\n-\r\n-\t\tif ( ! is_object( $user ) || ! method_exists( $user, 'can_create_course' ) || ! method_exists( $user, 'get_id' ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! is_object( $user_current ) || ! method_exists( $user_current, 'get_id' ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user->can_create_course() || (int) $user->get_id() !== (int) $user_current->get_id() ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\tob_start();\r\n-\t\techo '\u003Cdiv id=\"lp-enrolled-students\">';\r\n-\t\tdo_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', (int) $user->get_id() );\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\r\n-\t\treturn ob_get_clean();\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileStudentEnrolledTemplate.\n+ *\n+ * @since 4.3.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LP_Profile;\n+\n+class ProfileStudentEnrolledTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'learn-press\u002Fget-profile-tabs', array( $this, 'display_profile_tab' ), 10, 3 );\n+\t}\n+\n+\t\u002F**\n+\t * Show tab for instructor viewing own profile only.\n+\t *\n+\t * @param array $tabs\n+\t * @param mixed $user_of_profile\n+\t * @param mixed $user_current\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function display_profile_tab( array $tabs, $user_of_profile, $user_current ): array {\n+\t\tif ( ! isset( $tabs['enrolled-students'] ) ) {\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\t\u002F\u002F Force callback to bound instance method to ensure call_user_func_array() can execute.\n+\t\t$tabs['enrolled-students']['callback'] = array( $this, 'tab_content' );\n+\n+\t\tif ( ! is_object( $user_of_profile ) || ! method_exists( $user_of_profile, 'is_instructor' ) ||\n+\t\t\t! method_exists( $user_of_profile, 'get_id' ) ) {\n+\t\t\tunset( $tabs['enrolled-students'] );\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\tif ( ! is_object( $user_current ) || ! method_exists( $user_current, 'get_id' ) ) {\n+\t\t\tunset( $tabs['enrolled-students'] );\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\tif ( ! $user_of_profile->can_create_course() ) {\n+\t\t\tunset( $tabs['enrolled-students'] );\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\t\u002F\u002F Show tab for instructor viewing own profile only.\n+\t\tif ( (int) $user_of_profile->get_id() !== (int) $user_current->get_id() ) {\n+\t\t\tunset( $tabs['enrolled-students'] );\n+\t\t\treturn $tabs;\n+\t\t}\n+\n+\t\treturn $tabs;\n+\t}\n+\n+\t\u002F**\n+\t * Render content of profile tab \"Enrolled Students\".\n+\t *\n+\t * @param string $tab_key\n+\t * @param mixed  $profile_tab\n+\t * @param mixed  $user\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function tab_content( $tab_key = '', $profile_tab = null, $user = null ): string {\n+\t\t$profile      = LP_Profile::instance();\n+\t\t$user         = is_object( $user ) ? $user : $profile->get_user();\n+\t\t$user_current = $profile->get_user_current();\n+\n+\t\tif ( ! is_object( $user ) || ! method_exists( $user, 'can_create_course' ) || ! method_exists( $user, 'get_id' ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( ! is_object( $user_current ) || ! method_exists( $user_current, 'get_id' ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tif ( ! $user->can_create_course() || (int) $user->get_id() !== (int) $user_current->get_id() ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\tob_start();\n+\t\techo '\u003Cdiv id=\"lp-enrolled-students\">';\n+\t\tdo_action( 'learn-press\u002Fadmin\u002Fenrolled-students\u002Flayout', (int) $user->get_id() );\n+\t\techo '\u003C\u002Fdiv>';\n+\n+\t\treturn ob_get_clean();\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentStatisticsTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentStatisticsTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentStatisticsTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileStudentStatisticsTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Archive Package.\r\n- *\r\n- * @since 1.0.0\r\n- * @version 1.0.0\r\n- *\u002F\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-class ProfileStudentStatisticsTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\tprotected function __construct() {\r\n-\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics', [ $this, 'sections' ], 2 );\r\n-\t}\r\n-\r\n-\tpublic function sections( $data ) {\r\n-\t\t$template_path = apply_filters(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics\u002Fitem-count',\r\n-\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php'\r\n-\t\t);\r\n-\t\tTemplate::instance()->get_template(\r\n-\t\t\t$template_path,\r\n-\t\t\tcompact( 'data' )\r\n-\t\t);\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Archive Package.\n+ *\n+ * @since 1.0.0\n+ * @version 1.0.0\n+ *\u002F\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Helpers\\Template;\n+\n+class ProfileStudentStatisticsTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\tprotected function __construct() {\n+\t\tadd_action( 'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics', [ $this, 'sections' ], 2 );\n+\t}\n+\n+\tpublic function sections( $data ) {\n+\t\t$template_path = apply_filters(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics\u002Fitem-count',\n+\t\t\tLP_PLUGIN_PATH . 'templates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php'\n+\t\t);\n+\t\tTemplate::instance()->get_template(\n+\t\t\t$template_path,\n+\t\t\tcompact( 'data' )\n+\t\t);\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,307 +1,307 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileTemplate.\r\n- *\r\n- * @since 4.2.7.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Profile;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Profile;\r\n-use LP_Settings;\r\n-use Throwable;\r\n-\r\n-class ProfileTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\t\u002F**\r\n-\t * ProfileTemplate constructor.\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function init() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML cover image.\r\n-\t *\r\n-\t * @param UserModel $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_cover_image( UserModel $user ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$cover_image_url              = $user->get_cover_image_url();\r\n-\t\t\t$profile                      = LP_Profile::instance( $user->get_id() );\r\n-\t\t\t$current_section              = $profile->get_current_section();\r\n-\t\t\t$html_btn_to_edit_cover_image = '';\r\n-\t\t\t$cover_image_dimensions       = LP_Settings::get_option(\r\n-\t\t\t\t'cover_image_dimensions',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'width'  => 1290,\r\n-\t\t\t\t\t'height' => 250,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $user->get_id() === get_current_user_id() ) {\r\n-\t\t\t\t$html_btn_to_edit_cover_image = sprintf(\r\n-\t\t\t\t\t'\u003Ca class=\"lp-btn-to-edit-cover-image\" href=\"%s\" data-section-correct=\"%d\">+ %s\u003C\u002Fa>',\r\n-\t\t\t\t\t$profile->get_tab_link( 'settings', 'cover-image' ),\r\n-\t\t\t\t\t$current_section === 'cover-image' ? 1 : 0,\r\n-\t\t\t\t\t__( 'edit cover image', 'learnpress' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-cover-image',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lp-user-cover-image_background %s\" style=\"%s\">',\r\n-\t\t\t\t\t\tempty( $cover_image_url ) ? 'lp-hidden' : '',\r\n-\t\t\t\t\t\tsprintf( 'background-image: url(%s);', $cover_image_url )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'image'       => sprintf(\r\n-\t\t\t\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\r\n-\t\t\t\t\t\t$cover_image_url,\r\n-\t\t\t\t\t\t__( 'Cover image', 'learnpress' )\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'btn-edit'    => $html_btn_to_edit_cover_image,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML upload edit cover image.\r\n-\t *\r\n-\t * @param UserModel $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_upload_cover_image( UserModel $user ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$cover_image_url        = $user->get_cover_image_url();\r\n-\t\t\t$cover_image_dimensions = LP_Settings::get_option(\r\n-\t\t\t\t'cover_image_dimensions',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'width'  => 1290,\r\n-\t\t\t\t\t'height' => 250,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\t$class_hide = 'lp-hidden';\r\n-\r\n-\t\t\t$section_img_empty_info = [\r\n-\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-cover-image-empty__info\">',\r\n-\t\t\t\t'top'         => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty__info__top\">%s%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\t'\u003Cspan class=\"lp-icon-file-image\">\u003C\u002Fspan>',\r\n-\t\t\t\t\t__( 'Drag and drop or click here to choose image', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'bottom'      => sprintf(\r\n-\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty__info__bottom\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( 'Accepted file types: JPG, PNG %1$d x %2$d (px)', 'learnpress' ),\r\n-\t\t\t\t\t\t$cover_image_dimensions['width'],\r\n-\t\t\t\t\t\t$cover_image_dimensions['height']\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\t\t\t$html_img_empty         = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-cover-image-empty',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf(\r\n-\t\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty %s\">',\r\n-\t\t\t\t\t\tempty( $cover_image_url ) ? '' : $class_hide\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'info'        => Template::combine_components( $section_img_empty_info ),\r\n-\t\t\t\t\t'input_file'  => sprintf(\r\n-\t\t\t\t\t\t'\u003Cinput type=\"file\" class=\"%s\" name=\"lp-cover-image-file\" accept=\"%s\" \u002F>',\r\n-\t\t\t\t\t\t'lp-cover-image-file',\r\n-\t\t\t\t\t\t'image\u002Fpng, image\u002Fjpeg, image\u002Fwebp'\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_img_preview = sprintf(\r\n-\t\t\t\t'\u003Cimg class=\"lp-cover-image-preview %s\" src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\r\n-\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\r\n-\t\t\t\t$cover_image_url,\r\n-\t\t\t\t__( 'Cover image', 'learnpress' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section_img = [\r\n-\t\t\t\t'wrapper'       => '\u003Cdiv class=\"lp-user-cover-image__display\">',\r\n-\t\t\t\t'image_empty'   => Template::combine_components( $html_img_empty ),\r\n-\t\t\t\t'image_preview' => $html_img_preview,\r\n-\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section_btn = [\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"lp-user-cover-image__buttons\">',\r\n-\t\t\t\t'input_action' => '\u003Cinput type=\"hidden\" name=\"action\" value=\"upload\"  \u002F>',\r\n-\t\t\t\t'choose_file'  => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-choose-cover-image %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\r\n-\t\t\t\t\t__( 'Replace', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'save_btn'     => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-save-cover-image %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t$class_hide,\r\n-\t\t\t\t\t__( 'Save', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'cancel'       => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-cancel-cover-image %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t$class_hide,\r\n-\t\t\t\t\t__( 'Cancel', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'remove'       => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-remove-cover-image %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\r\n-\t\t\t\t\t__( 'Remove', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-upload-cover-image',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cform class=\"lp-user-cover-image\" enctype=\"multipart\u002Fform-data\" method=\"post\">',\r\n-\t\t\t\t\t'image'       => Template::combine_components( $section_img ),\r\n-\t\t\t\t\t'buttons'     => Template::combine_components( $section_btn ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fform>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML upload avatar image.\r\n-\t *\r\n-\t * @param UserModel $user\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_upload_avatar( UserModel $user ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$class_hide       = 'lp-hidden';\r\n-\t\t\t$avatar_image_url = $user->get_upload_avatar_src();\r\n-\r\n-\t\t\t$html_img_preview = sprintf(\r\n-\t\t\t\t'\u003Cimg class=\"lp-avatar-image %s\" src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\r\n-\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\r\n-\t\t\t\t$avatar_image_url,\r\n-\t\t\t\t__( 'Avatar image', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\t$html_img_empty   = [\r\n-\t\t\t\t'start'     => sprintf(\r\n-\t\t\t\t\t'\u003Cform class=\"lp_avatar__form %s\">',\r\n-\t\t\t\t\tempty( $avatar_image_url ) ? '' : $class_hide\r\n-\t\t\t\t),\r\n-\t\t\t\t'label'     => '\u003Clabel for=\"avatar-file\">',\r\n-\t\t\t\t'div'       => '\u003Cdiv class=\"learnpress_avatar__form__upload\">',\r\n-\t\t\t\t'upload'    => sprintf(\r\n-\t\t\t\t\t'\u003Cspan>%s\u003C\u002Fspan>',\r\n-\t\t\t\t\t__( 'Upload Avatar', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'input'     => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"file\" id=\"avatar-file\" class=\"%s\" name=\"lp-avatar-file\" accept=\"%s\" \u002F>',\r\n-\t\t\t\t\t'lp-avatar-file lp-hidden',\r\n-\t\t\t\t\t'image\u002Fpng, image\u002Fjpeg, image\u002Fwebp'\r\n-\t\t\t\t),\r\n-\t\t\t\t'div_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t\t'label_end' => '\u003C\u002Flabel>',\r\n-\t\t\t\t'end'       => '\u003C\u002Fform>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section_img = [\r\n-\t\t\t\t'wrapper'       => '\u003Cdiv class=\"lp-user-avatar-image__display\" style=\"width: 250px;height:250px\">',\r\n-\t\t\t\t'image_empty'   => Template::combine_components( $html_img_empty ),\r\n-\t\t\t\t'image_preview' => $html_img_preview,\r\n-\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section_btn = [\r\n-\t\t\t\t'wrapper'      => '\u003Cdiv class=\"lp-user-avatar__buttons\">',\r\n-\t\t\t\t'input_action' => '\u003Cinput type=\"hidden\" name=\"action\" value=\"upload\"  \u002F>',\r\n-\t\t\t\t'choose_file'  => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-choose-avatar %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\r\n-\t\t\t\t\t__( 'Replace', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'save_btn'     => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-save-avatar %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t$class_hide,\r\n-\t\t\t\t\t__( 'Save', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'cancel'       => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-cancel-avatar %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\t$class_hide,\r\n-\t\t\t\t\t__( 'Cancel', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'remove'       => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-remove-avatar %s\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\r\n-\t\t\t\t\t__( 'Remove', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-upload-avatar',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => '\u003Cdiv id=\"learnpress-avatar-upload\">',\r\n-\t\t\t\t\t'image'       => Template::combine_components( $section_img ),\r\n-\t\t\t\t\t'buttons'     => Template::combine_components( $section_btn ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$html .= Template::print_message(\r\n-\t\t\t\t$e->getMessage(),\r\n-\t\t\t\t'error',\r\n-\t\t\t\tfalse\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn $html;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileTemplate.\n+ *\n+ * @since 4.2.7.2\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Profile;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LP_Profile;\n+use LP_Settings;\n+use Throwable;\n+\n+class ProfileTemplate {\n+\tuse Singleton;\n+\n+\t\u002F**\n+\t * ProfileTemplate constructor.\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function init() {\n+\t}\n+\n+\t\u002F**\n+\t * HTML cover image.\n+\t *\n+\t * @param UserModel $user\n+\t *\n+\t * @return string\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_cover_image( UserModel $user ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$cover_image_url              = $user->get_cover_image_url();\n+\t\t\t$profile                      = LP_Profile::instance( $user->get_id() );\n+\t\t\t$current_section              = $profile->get_current_section();\n+\t\t\t$html_btn_to_edit_cover_image = '';\n+\t\t\t$cover_image_dimensions       = LP_Settings::get_option(\n+\t\t\t\t'cover_image_dimensions',\n+\t\t\t\tarray(\n+\t\t\t\t\t'width'  => 1290,\n+\t\t\t\t\t'height' => 250,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $user->get_id() === get_current_user_id() ) {\n+\t\t\t\t$html_btn_to_edit_cover_image = sprintf(\n+\t\t\t\t\t'\u003Ca class=\"lp-btn-to-edit-cover-image\" href=\"%s\" data-section-correct=\"%d\">+ %s\u003C\u002Fa>',\n+\t\t\t\t\t$profile->get_tab_link( 'settings', 'cover-image' ),\n+\t\t\t\t\t$current_section === 'cover-image' ? 1 : 0,\n+\t\t\t\t\t__( 'edit cover image', 'learnpress' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-cover-image',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lp-user-cover-image_background %s\" style=\"%s\">',\n+\t\t\t\t\t\tempty( $cover_image_url ) ? 'lp-hidden' : '',\n+\t\t\t\t\t\tsprintf( 'background-image: url(%s);', $cover_image_url )\n+\t\t\t\t\t),\n+\t\t\t\t\t'image'       => sprintf(\n+\t\t\t\t\t\t'\u003Cimg src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\n+\t\t\t\t\t\t$cover_image_url,\n+\t\t\t\t\t\t__( 'Cover image', 'learnpress' )\n+\t\t\t\t\t),\n+\t\t\t\t\t'btn-edit'    => $html_btn_to_edit_cover_image,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML upload edit cover image.\n+\t *\n+\t * @param UserModel $user\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_upload_cover_image( UserModel $user ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$cover_image_url        = $user->get_cover_image_url();\n+\t\t\t$cover_image_dimensions = LP_Settings::get_option(\n+\t\t\t\t'cover_image_dimensions',\n+\t\t\t\tarray(\n+\t\t\t\t\t'width'  => 1290,\n+\t\t\t\t\t'height' => 250,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\t$class_hide = 'lp-hidden';\n+\n+\t\t\t$section_img_empty_info = [\n+\t\t\t\t'wrapper'     => '\u003Cdiv class=\"lp-cover-image-empty__info\">',\n+\t\t\t\t'top'         => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty__info__top\">%s%s\u003C\u002Fdiv>',\n+\t\t\t\t\t'\u003Cspan class=\"lp-icon-file-image\">\u003C\u002Fspan>',\n+\t\t\t\t\t__( 'Drag and drop or click here to choose image', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'bottom'      => sprintf(\n+\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty__info__bottom\">%s\u003C\u002Fdiv>',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( 'Accepted file types: JPG, PNG %1$d x %2$d (px)', 'learnpress' ),\n+\t\t\t\t\t\t$cover_image_dimensions['width'],\n+\t\t\t\t\t\t$cover_image_dimensions['height']\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\t\t\t$html_img_empty         = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-cover-image-empty',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf(\n+\t\t\t\t\t\t'\u003Cdiv class=\"lp-cover-image-empty %s\">',\n+\t\t\t\t\t\tempty( $cover_image_url ) ? '' : $class_hide\n+\t\t\t\t\t),\n+\t\t\t\t\t'info'        => Template::combine_components( $section_img_empty_info ),\n+\t\t\t\t\t'input_file'  => sprintf(\n+\t\t\t\t\t\t'\u003Cinput type=\"file\" class=\"%s\" name=\"lp-cover-image-file\" accept=\"%s\" \u002F>',\n+\t\t\t\t\t\t'lp-cover-image-file',\n+\t\t\t\t\t\t'image\u002Fpng, image\u002Fjpeg, image\u002Fwebp'\n+\t\t\t\t\t),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html_img_preview = sprintf(\n+\t\t\t\t'\u003Cimg class=\"lp-cover-image-preview %s\" src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\n+\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\n+\t\t\t\t$cover_image_url,\n+\t\t\t\t__( 'Cover image', 'learnpress' )\n+\t\t\t);\n+\n+\t\t\t$section_img = [\n+\t\t\t\t'wrapper'       => '\u003Cdiv class=\"lp-user-cover-image__display\">',\n+\t\t\t\t'image_empty'   => Template::combine_components( $html_img_empty ),\n+\t\t\t\t'image_preview' => $html_img_preview,\n+\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section_btn = [\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"lp-user-cover-image__buttons\">',\n+\t\t\t\t'input_action' => '\u003Cinput type=\"hidden\" name=\"action\" value=\"upload\"  \u002F>',\n+\t\t\t\t'choose_file'  => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-choose-cover-image %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\n+\t\t\t\t\t__( 'Replace', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'save_btn'     => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-save-cover-image %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t$class_hide,\n+\t\t\t\t\t__( 'Save', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'cancel'       => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-cancel-cover-image %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t$class_hide,\n+\t\t\t\t\t__( 'Cancel', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'remove'       => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-remove-cover-image %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\tempty( $cover_image_url ) ? $class_hide : '',\n+\t\t\t\t\t__( 'Remove', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-upload-cover-image',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cform class=\"lp-user-cover-image\" enctype=\"multipart\u002Fform-data\" method=\"post\">',\n+\t\t\t\t\t'image'       => Template::combine_components( $section_img ),\n+\t\t\t\t\t'buttons'     => Template::combine_components( $section_btn ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fform>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * HTML upload avatar image.\n+\t *\n+\t * @param UserModel $user\n+\t *\n+\t * @return string\n+\t * @since 4.2.8.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_upload_avatar( UserModel $user ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\t$class_hide       = 'lp-hidden';\n+\t\t\t$avatar_image_url = $user->get_upload_avatar_src();\n+\n+\t\t\t$html_img_preview = sprintf(\n+\t\t\t\t'\u003Cimg class=\"lp-avatar-image %s\" src=\"%s\" alt=\"%s\" decoding=\"async\" \u002F>',\n+\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\n+\t\t\t\t$avatar_image_url,\n+\t\t\t\t__( 'Avatar image', 'learnpress' )\n+\t\t\t);\n+\t\t\t$html_img_empty   = [\n+\t\t\t\t'start'     => sprintf(\n+\t\t\t\t\t'\u003Cform class=\"lp_avatar__form %s\">',\n+\t\t\t\t\tempty( $avatar_image_url ) ? '' : $class_hide\n+\t\t\t\t),\n+\t\t\t\t'label'     => '\u003Clabel for=\"avatar-file\">',\n+\t\t\t\t'div'       => '\u003Cdiv class=\"learnpress_avatar__form__upload\">',\n+\t\t\t\t'upload'    => sprintf(\n+\t\t\t\t\t'\u003Cspan>%s\u003C\u002Fspan>',\n+\t\t\t\t\t__( 'Upload Avatar', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'input'     => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"file\" id=\"avatar-file\" class=\"%s\" name=\"lp-avatar-file\" accept=\"%s\" \u002F>',\n+\t\t\t\t\t'lp-avatar-file lp-hidden',\n+\t\t\t\t\t'image\u002Fpng, image\u002Fjpeg, image\u002Fwebp'\n+\t\t\t\t),\n+\t\t\t\t'div_end'   => '\u003C\u002Fdiv>',\n+\t\t\t\t'label_end' => '\u003C\u002Flabel>',\n+\t\t\t\t'end'       => '\u003C\u002Fform>',\n+\t\t\t];\n+\n+\t\t\t$section_img = [\n+\t\t\t\t'wrapper'       => '\u003Cdiv class=\"lp-user-avatar-image__display\" style=\"width: 250px;height:250px\">',\n+\t\t\t\t'image_empty'   => Template::combine_components( $html_img_empty ),\n+\t\t\t\t'image_preview' => $html_img_preview,\n+\t\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section_btn = [\n+\t\t\t\t'wrapper'      => '\u003Cdiv class=\"lp-user-avatar__buttons\">',\n+\t\t\t\t'input_action' => '\u003Cinput type=\"hidden\" name=\"action\" value=\"upload\"  \u002F>',\n+\t\t\t\t'choose_file'  => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-choose-avatar %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\n+\t\t\t\t\t__( 'Replace', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'save_btn'     => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-save-avatar %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t$class_hide,\n+\t\t\t\t\t__( 'Save', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'cancel'       => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-cancel-avatar %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\t$class_hide,\n+\t\t\t\t\t__( 'Cancel', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'remove'       => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button lp-btn-remove-avatar %s\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\tempty( $avatar_image_url ) ? $class_hide : '',\n+\t\t\t\t\t__( 'Remove', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'wrapper_end'  => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fhtml-upload-avatar',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => '\u003Cdiv id=\"learnpress-avatar-upload\">',\n+\t\t\t\t\t'image'       => Template::combine_components( $section_img ),\n+\t\t\t\t\t'buttons'     => Template::combine_components( $section_btn ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$html .= Template::print_message(\n+\t\t\t\t$e->getMessage(),\n+\t\t\t\t'error',\n+\t\t\t\tfalse\n+\t\t\t);\n+\t\t}\n+\t\treturn $html;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FTable\u002FTableListTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FTable\u002FTableListTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FTable\u002FTableListTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FTable\u002FTableListTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,179 +1,179 @@\n-\u003C?php\r\n-\u002F**\r\n- * Class ProfileQuizzesTemplate.\r\n- *\r\n- * @since 4.2.8.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\Table;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\r\n-class TableListTemplate {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the HTML table.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_table( array $data = [] ): string {\r\n-\t\t$class_tb = $data['class_table'] ?? '';\r\n-\t\t$section  = [\r\n-\t\t\t'wrap'      => '\u003Cdiv class=\"lp-table-wrap\">',\r\n-\t\t\t'table'     => sprintf(\r\n-\t\t\t\t'\u003Ctable class=\"lp-list-table %s\">',\r\n-\t\t\t\tesc_attr( $class_tb )\r\n-\t\t\t),\r\n-\t\t\t'header'    => $this->html_header( $data['header'] ?? [] ),\r\n-\t\t\t'body'      => $this->html_body( $data['body'] ?? [] ),\r\n-\t\t\t'footer'    => $this->html_footer( $data['footer'] ?? '' ),\r\n-\t\t\t'table-end' => '\u003C\u002Ftable>',\r\n-\t\t\t'wrap-end'  => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the HTML table header.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_header( array $data = [] ): string {\r\n-\t\t$html_th = '';\r\n-\r\n-\t\tforeach ( $data as $item ) {\r\n-\t\t\t$html_th .= sprintf(\r\n-\t\t\t\t'\u003Cth class=\"%s\">%s\u003C\u002Fth>',\r\n-\t\t\t\tesc_attr( $item['class'] ?? '' ),\r\n-\t\t\t\twp_kses_post( $item['title'] ?? '' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => '\u003Cthead>',\r\n-\t\t\t'tr'          => '\u003Ctr>',\r\n-\t\t\t'ths'         => $html_th,\r\n-\t\t\t'tr_end'      => '\u003C\u002Ftr>',\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fthead>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the HTML table body.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_body( array $data = [] ): string {\r\n-\t\t$html_tr = '';\r\n-\r\n-\t\t\u002F\u002F Allow callers to pass fully prepared rows HTML.\r\n-\t\tif ( isset( $data['rows_html'] ) && is_string( $data['rows_html'] ) ) {\r\n-\t\t\t$html_tr = $data['rows_html'];\r\n-\t\t} else {\r\n-\t\t\tforeach ( $data as $item_tr ) {\r\n-\t\t\t\t$html_tr .= '\u003Ctr>';\r\n-\t\t\t\tforeach ( $item_tr as $item_td ) {\r\n-\t\t\t\t\t$html_td  = sprintf(\r\n-\t\t\t\t\t\t'\u003Ctd>%s\u003C\u002Ftd>',\r\n-\t\t\t\t\t\twp_kses_post( $item_td )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$html_tr .= $html_td;\r\n-\t\t\t\t}\r\n-\t\t\t\t$html_tr .= '\u003C\u002Ftr>';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => '\u003Ctbody>',\r\n-\t\t\t'trs'         => $html_tr,\r\n-\t\t\t'wrapper_end' => '\u003C\u002Ftbody>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Reder the HTML table footer.\r\n-\t *\r\n-\t * @param string $footer_html\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_footer( string $footer_html = '' ): string {\r\n-\t\tif ( '' === trim( $footer_html ) ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html_td = sprintf(\r\n-\t\t\t'\u003Ctd colspan=\"10\">%s\u003C\u002Ftd>',\r\n-\t\t\twp_kses_post( $footer_html )\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'     => '\u003Ctfoot>',\r\n-\t\t\t'tr'          => '\u003Ctr>',\r\n-\t\t\t'tds'         => $html_td,\r\n-\t\t\t'tr_end'      => '\u003C\u002Ftr>',\r\n-\t\t\t'wrapper_end' => '\u003C\u002Ftfoot>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Render the HTML info page query.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_page_result( array $data = [] ): string {\r\n-\t\t$total_rows = $data['total_rows'] ?? 0;\r\n-\t\t$paged      = $data['paged'] ?? 1;\r\n-\t\t$per_page   = $data['per_page'] ?? 1;\r\n-\t\t$item_name  = $data['item_name'] ?? _n( 'item', 'items', $total_rows, 'learnpress' );\r\n-\r\n-\t\t$from = ( $paged - 1 ) * $per_page + 1;\r\n-\t\t$to   = $from + $per_page - 1;\r\n-\t\t$to   = min( $to, $total_rows );\r\n-\t\tif ( $total_rows \u003C 1 ) {\r\n-\t\t\t$from = 0;\r\n-\t\t}\r\n-\r\n-\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}} {{item_name}}.', 'learnpress' );\r\n-\t\t$format = apply_filters(\r\n-\t\t\t'learnpress\u002Ftable\u002Flist-page-result',\r\n-\t\t\t$format,\r\n-\t\t\t$data\r\n-\t\t);\r\n-\r\n-\t\t$output = str_replace(\r\n-\t\t\tarray( '{{from}}', '{{to}}', '{{total}}', '{{item_name}}' ),\r\n-\t\t\tarray(\r\n-\t\t\t\t$from,\r\n-\t\t\t\t$to,\r\n-\t\t\t\t$total_rows,\r\n-\t\t\t\t$item_name,\r\n-\t\t\t),\r\n-\t\t\t$format\r\n-\t\t);\r\n-\r\n-\t\treturn wp_kses_post( $output );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Class ProfileQuizzesTemplate.\n+ *\n+ * @since 4.2.8.2\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\Table;\n+\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Helpers\\Template;\n+\n+\n+class TableListTemplate {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t}\n+\n+\t\u002F**\n+\t * Render the HTML table.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_table( array $data = [] ): string {\n+\t\t$class_tb = $data['class_table'] ?? '';\n+\t\t$section  = [\n+\t\t\t'wrap'      => '\u003Cdiv class=\"lp-table-wrap\">',\n+\t\t\t'table'     => sprintf(\n+\t\t\t\t'\u003Ctable class=\"lp-list-table %s\">',\n+\t\t\t\tesc_attr( $class_tb )\n+\t\t\t),\n+\t\t\t'header'    => $this->html_header( $data['header'] ?? [] ),\n+\t\t\t'body'      => $this->html_body( $data['body'] ?? [] ),\n+\t\t\t'footer'    => $this->html_footer( $data['footer'] ?? '' ),\n+\t\t\t'table-end' => '\u003C\u002Ftable>',\n+\t\t\t'wrap-end'  => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render the HTML table header.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_header( array $data = [] ): string {\n+\t\t$html_th = '';\n+\n+\t\tforeach ( $data as $item ) {\n+\t\t\t$html_th .= sprintf(\n+\t\t\t\t'\u003Cth class=\"%s\">%s\u003C\u002Fth>',\n+\t\t\t\tesc_attr( $item['class'] ?? '' ),\n+\t\t\t\twp_kses_post( $item['title'] ?? '' )\n+\t\t\t);\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => '\u003Cthead>',\n+\t\t\t'tr'          => '\u003Ctr>',\n+\t\t\t'ths'         => $html_th,\n+\t\t\t'tr_end'      => '\u003C\u002Ftr>',\n+\t\t\t'wrapper_end' => '\u003C\u002Fthead>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render the HTML table body.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_body( array $data = [] ): string {\n+\t\t$html_tr = '';\n+\n+\t\t\u002F\u002F Allow callers to pass fully prepared rows HTML.\n+\t\tif ( isset( $data['rows_html'] ) && is_string( $data['rows_html'] ) ) {\n+\t\t\t$html_tr = $data['rows_html'];\n+\t\t} else {\n+\t\t\tforeach ( $data as $item_tr ) {\n+\t\t\t\t$html_tr .= '\u003Ctr>';\n+\t\t\t\tforeach ( $item_tr as $item_td ) {\n+\t\t\t\t\t$html_td  = sprintf(\n+\t\t\t\t\t\t'\u003Ctd>%s\u003C\u002Ftd>',\n+\t\t\t\t\t\twp_kses_post( $item_td )\n+\t\t\t\t\t);\n+\t\t\t\t\t$html_tr .= $html_td;\n+\t\t\t\t}\n+\t\t\t\t$html_tr .= '\u003C\u002Ftr>';\n+\t\t\t}\n+\t\t}\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => '\u003Ctbody>',\n+\t\t\t'trs'         => $html_tr,\n+\t\t\t'wrapper_end' => '\u003C\u002Ftbody>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Reder the HTML table footer.\n+\t *\n+\t * @param string $footer_html\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_footer( string $footer_html = '' ): string {\n+\t\tif ( '' === trim( $footer_html ) ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html_td = sprintf(\n+\t\t\t'\u003Ctd colspan=\"10\">%s\u003C\u002Ftd>',\n+\t\t\twp_kses_post( $footer_html )\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'wrapper'     => '\u003Ctfoot>',\n+\t\t\t'tr'          => '\u003Ctr>',\n+\t\t\t'tds'         => $html_td,\n+\t\t\t'tr_end'      => '\u003C\u002Ftr>',\n+\t\t\t'wrapper_end' => '\u003C\u002Ftfoot>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * Render the HTML info page query.\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_page_result( array $data = [] ): string {\n+\t\t$total_rows = $data['total_rows'] ?? 0;\n+\t\t$paged      = $data['paged'] ?? 1;\n+\t\t$per_page   = $data['per_page'] ?? 1;\n+\t\t$item_name  = $data['item_name'] ?? _n( 'item', 'items', $total_rows, 'learnpress' );\n+\n+\t\t$from = ( $paged - 1 ) * $per_page + 1;\n+\t\t$to   = $from + $per_page - 1;\n+\t\t$to   = min( $to, $total_rows );\n+\t\tif ( $total_rows \u003C 1 ) {\n+\t\t\t$from = 0;\n+\t\t}\n+\n+\t\t$format = __( 'Displaying {{from}} to {{to}} of {{total}} {{item_name}}.', 'learnpress' );\n+\t\t$format = apply_filters(\n+\t\t\t'learnpress\u002Ftable\u002Flist-page-result',\n+\t\t\t$format,\n+\t\t\t$data\n+\t\t);\n+\n+\t\t$output = str_replace(\n+\t\t\tarray( '{{from}}', '{{to}}', '{{total}}', '{{item_name}}' ),\n+\t\t\tarray(\n+\t\t\t\t$from,\n+\t\t\t\t$to,\n+\t\t\t\t$total_rows,\n+\t\t\t\t$item_name,\n+\t\t\t),\n+\t\t\t$format\n+\t\t);\n+\n+\t\treturn wp_kses_post( $output );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FTemplateAJAX.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FTemplateAJAX.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FTemplateAJAX.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FTemplateAJAX.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,121 +1,121 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template load via AJAX.\r\n- * Use for load any content via AJAX.\r\n- *\r\n- * Logic:\r\n- * 1. Create html has class .lp-load-ajax-element attach setting, args want to handle on Template.\r\n- * 2. Create html element target to attach content via AJAX.\r\n- * 3. (loadAJAX.js) JS detect html element target and send data to server.\r\n- * 4. (LP_REST_AJAX_Controller) Server receive data, call callback Class::Method and render content.\r\n- *\r\n- * @since 4.2.5.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Template;\r\n-use stdClass;\r\n-use Throwable;\r\n-\r\n-class TemplateAJAX {\r\n-\t\u002F**\r\n-\t * When AJAX load done will innerHTML to class lp-target self.\r\n-\t * To use this, you need add hook 'lp\u002Frest\u002Fajax\u002Fallow_callback' to register for security reasons.\r\n-\t *\r\n-\t * @param array $args [ method_request' => 'GET\u002FPOST',... ],\r\n-\t * method_request: default is POST, use to set method type call to server.\r\n-\t * param html_loading_before_show_content: html loading before content call API to render.\r\n-\t * param html_loading_after_content_loaded: html loading when content rendered, and change.\r\n-\t * param html_no_load_ajax_first: if not empty, remove el_loading_before_show_content, will not load ajax first, only send data to handle AJAX via event.\r\n-\t *\r\n-\t * @param array $callback [ 'class', 'method' ] method use to render content html\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.5.7\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic static function load_content_via_ajax( array $args = [], array $callback = [] ): string {\r\n-\t\t$html_wrapper = [\r\n-\t\t\t'\u003Cdiv class=\"lp-load-ajax-element\">' => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\t\t$html_content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! isset( $callback['class'] ) || ! isset( $callback['method'] ) ) {\r\n-\t\t\t\tthrow new Exception( 'Missing args callback class || method' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $args['html_no_load_ajax_first'] ) ) {\r\n-\t\t\t\t$html_wrapper = [];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$target_id = uniqid( 'lp-target-' );\r\n-\t\t\t$data      = [\r\n-\t\t\t\t'args'     => $args,\r\n-\t\t\t\t'callback' => $callback,\r\n-\t\t\t\t'id'       => $target_id,\r\n-\t\t\t];\r\n-\r\n-\t\t\t\u002F\u002F Remove argument html no need send via AJAX.\r\n-\t\t\tif ( ! empty( $args ) ) {\r\n-\t\t\t\t$keys_unset = [\r\n-\t\t\t\t\t'html_no_load_ajax_first',\r\n-\t\t\t\t\t'html_loading_before_show_content',\r\n-\t\t\t\t\t'html_loading_after_content_loaded',\r\n-\t\t\t\t];\r\n-\r\n-\t\t\t\tforeach ( $keys_unset as $key ) {\r\n-\t\t\t\t\tif ( isset( $data['args'][ $key ] ) ) {\r\n-\t\t\t\t\t\tunset( $data['args'][ $key ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If empty args, set to stdClass to JS read like an object, not array.\r\n-\t\t\tif ( empty( $data['args'] ) ) {\r\n-\t\t\t\t$data['args'] = new stdClass();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$data_send = esc_attr( htmlentities2( json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) ) );\r\n-\t\t\tob_start();\r\n-\t\t\tlp_skeleton_animation_html( 10 );\r\n-\t\t\t$el_loading_before_show_content_default = ob_get_clean();\r\n-\r\n-\t\t\t$el_loading_before_show_content = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"loading-first\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$args['html_loading_before_show_content'] ?? $el_loading_before_show_content_default\r\n-\t\t\t);\r\n-\t\t\tif ( isset( $args['html_no_load_ajax_first'] ) ) {\r\n-\t\t\t\t$el_loading_before_show_content = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$el_loading_after_content_loaded = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"loading-after\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$args['html_loading_after_content_loaded'] ?? '\u003Cdiv class=\"lp-loading-change lp-hidden\">\u003C\u002Fdiv>'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_el_target = sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"lp-target\" data-id=\"%s\" data-send=\"%s\">%s\u003C\u002Fdiv>',\r\n-\t\t\t\t$target_id,\r\n-\t\t\t\t$data_send,\r\n-\t\t\t\t$args['html_no_load_ajax_first'] ?? ''\r\n-\t\t\t);\r\n-\t\t\t$html_content   = sprintf(\r\n-\t\t\t\t'%1s%2s%3s',\r\n-\t\t\t\t$el_loading_before_show_content,\r\n-\t\t\t\t$html_el_target,\r\n-\t\t\t\t$el_loading_after_content_loaded\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn Template::instance()->nest_elements( $html_wrapper, $html_content );\r\n-\t}\r\n-\r\n-\tpublic function create_lp_target_with_data_for_load_ajax() {\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template load via AJAX.\n+ * Use for load any content via AJAX.\n+ *\n+ * Logic:\n+ * 1. Create html has class .lp-load-ajax-element attach setting, args want to handle on Template.\n+ * 2. Create html element target to attach content via AJAX.\n+ * 3. (loadAJAX.js) JS detect html element target and send data to server.\n+ * 4. (LP_REST_AJAX_Controller) Server receive data, call callback Class::Method and render content.\n+ *\n+ * @since 4.2.5.7\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Template;\n+use stdClass;\n+use Throwable;\n+\n+class TemplateAJAX {\n+\t\u002F**\n+\t * When AJAX load done will innerHTML to class lp-target self.\n+\t * To use this, you need add hook 'lp\u002Frest\u002Fajax\u002Fallow_callback' to register for security reasons.\n+\t *\n+\t * @param array $args [ method_request' => 'GET\u002FPOST',... ],\n+\t * method_request: default is POST, use to set method type call to server.\n+\t * param html_loading_before_show_content: html loading before content call API to render.\n+\t * param html_loading_after_content_loaded: html loading when content rendered, and change.\n+\t * param html_no_load_ajax_first: if not empty, remove el_loading_before_show_content, will not load ajax first, only send data to handle AJAX via event.\n+\t *\n+\t * @param array $callback [ 'class', 'method' ] method use to render content html\n+\t *\n+\t * @return string\n+\t * @since 4.2.5.7\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic static function load_content_via_ajax( array $args = [], array $callback = [] ): string {\n+\t\t$html_wrapper = [\n+\t\t\t'\u003Cdiv class=\"lp-load-ajax-element\">' => '\u003C\u002Fdiv>',\n+\t\t];\n+\t\t$html_content = '';\n+\n+\t\ttry {\n+\t\t\tif ( ! isset( $callback['class'] ) || ! isset( $callback['method'] ) ) {\n+\t\t\t\tthrow new Exception( 'Missing args callback class || method' );\n+\t\t\t}\n+\n+\t\t\tif ( isset( $args['html_no_load_ajax_first'] ) ) {\n+\t\t\t\t$html_wrapper = [];\n+\t\t\t}\n+\n+\t\t\t$target_id = uniqid( 'lp-target-' );\n+\t\t\t$data      = [\n+\t\t\t\t'args'     => $args,\n+\t\t\t\t'callback' => $callback,\n+\t\t\t\t'id'       => $target_id,\n+\t\t\t];\n+\n+\t\t\t\u002F\u002F Remove argument html no need send via AJAX.\n+\t\t\tif ( ! empty( $args ) ) {\n+\t\t\t\t$keys_unset = [\n+\t\t\t\t\t'html_no_load_ajax_first',\n+\t\t\t\t\t'html_loading_before_show_content',\n+\t\t\t\t\t'html_loading_after_content_loaded',\n+\t\t\t\t];\n+\n+\t\t\t\tforeach ( $keys_unset as $key ) {\n+\t\t\t\t\tif ( isset( $data['args'][ $key ] ) ) {\n+\t\t\t\t\t\tunset( $data['args'][ $key ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If empty args, set to stdClass to JS read like an object, not array.\n+\t\t\tif ( empty( $data['args'] ) ) {\n+\t\t\t\t$data['args'] = new stdClass();\n+\t\t\t}\n+\n+\t\t\t$data_send = esc_attr( htmlentities2( json_encode( $data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) ) );\n+\t\t\tob_start();\n+\t\t\tlp_skeleton_animation_html( 10 );\n+\t\t\t$el_loading_before_show_content_default = ob_get_clean();\n+\n+\t\t\t$el_loading_before_show_content = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"loading-first\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$args['html_loading_before_show_content'] ?? $el_loading_before_show_content_default\n+\t\t\t);\n+\t\t\tif ( isset( $args['html_no_load_ajax_first'] ) ) {\n+\t\t\t\t$el_loading_before_show_content = '';\n+\t\t\t}\n+\n+\t\t\t$el_loading_after_content_loaded = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"loading-after\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$args['html_loading_after_content_loaded'] ?? '\u003Cdiv class=\"lp-loading-change lp-hidden\">\u003C\u002Fdiv>'\n+\t\t\t);\n+\n+\t\t\t$html_el_target = sprintf(\n+\t\t\t\t'\u003Cdiv class=\"lp-target\" data-id=\"%s\" data-send=\"%s\">%s\u003C\u002Fdiv>',\n+\t\t\t\t$target_id,\n+\t\t\t\t$data_send,\n+\t\t\t\t$args['html_no_load_ajax_first'] ?? ''\n+\t\t\t);\n+\t\t\t$html_content   = sprintf(\n+\t\t\t\t'%1s%2s%3s',\n+\t\t\t\t$el_loading_before_show_content,\n+\t\t\t\t$html_el_target,\n+\t\t\t\t$el_loading_after_content_loaded\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ' ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn Template::instance()->nest_elements( $html_wrapper, $html_content );\n+\t}\n+\n+\tpublic function create_lp_target_with_data_for_load_ajax() {\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,386 +1,386 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks Single Instructor.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\UserItem;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LP_Helper;\r\n-use WP_Error;\r\n-\r\n-class UserCourseTemplate extends UserItemBaseTemplate {\r\n-\tpublic static function instance() {\r\n-\t\tstatic $instance = null;\r\n-\t\tif ( is_null( $instance ) ) {\r\n-\t\t\t$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn $instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML button continue course.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_btn_continue( UserCourseModel $userCourseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\tif ( $userCourseModel->can_impact_item() instanceof WP_Error ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$courseModel = $userCourseModel->get_course_model();\r\n-\t\tif ( ! $courseModel ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$total_items = $courseModel->count_items();\r\n-\t\tif ( empty( $total_items ) ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$itemModelContinue = $userCourseModel->get_item_continue();\r\n-\t\tif ( empty( $itemModelContinue ) ) {\r\n-\t\t\t$link_continue = $courseModel->get_permalink();\r\n-\t\t} else {\r\n-\t\t\t$link_continue = $courseModel->get_item_link( $itemModelContinue->ID );\r\n-\t\t}\r\n-\r\n-\t\t$html = sprintf(\r\n-\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\tesc_url_raw( $link_continue ),\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Cbutton class=\"lp-button course-btn-continue\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\tesc_html__( 'Continue', 'learnpress' )\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-button-continue', $html, $userCourseModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML button finish course.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_btn_finish( UserCourseModel $userCourseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\t$can_finish = $userCourseModel->can_finish();\r\n-\t\tif ( is_wp_error( $can_finish ) ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fuser\u002Fcourse\u002Fhtml-button-finish',\r\n-\t\t\t[\r\n-\t\t\t\t'form'     => sprintf(\r\n-\t\t\t\t\t'\u003Cform class=\"lp-form form-button form-button-finish-course\" method=\"post\" data-confirm=\"%s\">',\r\n-\t\t\t\t\t__( 'Do you want to finish the course?', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn'      => sprintf(\r\n-\t\t\t\t\t'\u003Cbutton class=\"lp-button btn-finish-course\">%s\u003C\u002Fbutton>',\r\n-\t\t\t\t\tesc_html__( 'Finish Course', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'input'    => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"course-id\" value=\"%d\"\u002F>',\r\n-\t\t\t\t\tesc_attr( $userCourseModel->item_id )\r\n-\t\t\t\t),\r\n-\t\t\t\t'nonce'    => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"finish-course-nonce\" value=\"%s\"\u002F>',\r\n-\t\t\t\t\tesc_attr(\r\n-\t\t\t\t\t\twp_create_nonce(\r\n-\t\t\t\t\t\t\tsprintf( 'finish-course-%d-%d', $userCourseModel->item_id, $userCourseModel->user_id )\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t\t'lpajax'   => '\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"finish-course\"\u002F>',\r\n-\t\t\t\t'noajax'   => '\u003Cinput type=\"hidden\" name=\"noajax\" value=\"yes\"\u002F>',\r\n-\t\t\t\t'form_end' => '\u003C\u002Fform>',\r\n-\t\t\t],\r\n-\t\t\t$userCourseModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML button retake course\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_btn_retake( UserCourseModel $userCourseModel ): string {\r\n-\t\t$retake_remaining = $userCourseModel->can_retake();\r\n-\r\n-\t\tif ( $retake_remaining === 0 ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$html_btn = sprintf(\r\n-\t\t\t'\u003Cbutton type=\"submit\" class=\"lp-button button-retake-course\">%s (%d)\u003C\u002Fbutton>',\r\n-\t\t\t__( 'Retake course', 'learnpress' ),\r\n-\t\t\t$retake_remaining\r\n-\t\t);\r\n-\r\n-\t\t$section = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-retake',\r\n-\t\t\t[\r\n-\t\t\t\t'form'         => sprintf(\r\n-\t\t\t\t\t'\u003Cform name=\"lp-form-retake-course\" class=\"lp-form-retake-course\" method=\"post\" data-confirm=\"%s\">',\r\n-\t\t\t\t\tesc_html__( 'Do you want to retake the course', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\t'input'        => sprintf(\r\n-\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"retake-course\" value=\"%d\"\u002F>',\r\n-\t\t\t\t\tesc_attr( $userCourseModel->item_id )\r\n-\t\t\t\t),\r\n-\t\t\t\t'btn'          => $html_btn,\r\n-\t\t\t\t'lp-ajax-mess' => '\u003Cdiv class=\"lp-ajax-message\">\u003C\u002Fdiv>',\r\n-\t\t\t\t'form_end'     => '\u003C\u002Fform>',\r\n-\t\t\t],\r\n-\t\t\t$userCourseModel\r\n-\t\t);\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML count items completed of Course.\r\n-\t *\r\n-\t * @return mixed|string|null\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_count_items_completed( UserCourseModel $userCourseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\t\u002F\u002F For case Guest user.\r\n-\t\t$userModel = $userCourseModel->get_user_model();\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$courseModel           = $userCourseModel->get_course_model();\r\n-\t\t$item_types            = CourseModel::item_types_support();\r\n-\t\t$count_items_completed = $userCourseModel->count_items_completed();\r\n-\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t$count_item           = $courseModel->count_items( $item_type );\r\n-\t\t\t$count_item_completed = $count_items_completed->{$item_type . '_status_completed'} ?? '';\r\n-\t\t\tif ( empty( $count_item_completed ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html .= sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"item-completed\">\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fdiv>',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'%s %s: ',\r\n-\t\t\t\t\tLP_Helper::get_i18n_string_plural( $count_item, $item_type, false ),\r\n-\t\t\t\t\t__( 'completed', 'learnpress' )\r\n-\t\t\t\t),\r\n-\t\t\t\tsprintf( '%d\u002F%d', $count_item_completed, $count_item )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-count-items-completed', $html, $userCourseModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTMl progress course.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t * @since 4.2.7.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_progress( UserCourseModel $userCourseModel ) {\r\n-\t\t$html = '';\r\n-\r\n-\t\t\u002F\u002F For case Guest user.\r\n-\t\t$userModel = $userCourseModel->get_user_model();\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$courseModel       = $userCourseModel->get_course_model();\r\n-\t\t$evaluation_type   = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() );\r\n-\t\t$calculate         = $userCourseModel->calculate_course_results();\r\n-\t\t$passing_condition = $courseModel->get_passing_condition();\r\n-\t\tif ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) {\r\n-\t\t\t$final_quiz = $courseModel->get_final_quiz();\r\n-\t\t\tif ( $final_quiz ) {\r\n-\t\t\t\t$quizModel         = QuizPostModel::find( $final_quiz, true );\r\n-\t\t\t\t$passing_condition = $quizModel->get_passing_grade();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t$total_items = $courseModel->count_items();\r\n-\r\n-\t\t$progress_items_completed_percent = round(\r\n-\t\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\r\n-\t\t\t2\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'          => '\u003Cdiv class=\"course-progress\">',\r\n-\t\t\t'progress'         => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-progress__label\">%s %s\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Course progress:', 'learnpress' ),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"course-progress__number\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"number\">%s\u003Cspan class=\"percentage\">%s\u003C\u002Fspan>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fspan>',\r\n-\t\t\t\t\t$progress_items_completed_percent,\r\n-\t\t\t\t\t'%'\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'line-progress'    => $this->html_items_completed_progress_bar( $userCourseModel ),\r\n-\t\t\t'passing-progress' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-progress__label\">%s %s\r\n-\t\t\t\t\t\u003Cspan class=\"lp-icon-question-circle\" title=\"%s\">\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\tesc_html__( 'Passing grade progress:', 'learnpress' ),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"course-progress__number\">\r\n-\t\t\t\t\t\t\u003Cspan class=\"number\">%s\u003Cspan class=\"percentage\">%s\u003C\u002Fspan>\u003C\u002Fspan>\r\n-\t\t\t\t\t\u003C\u002Fspan>',\r\n-\t\t\t\t\t$calculate['result'],\r\n-\t\t\t\t\t'%'\r\n-\t\t\t\t),\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'%s. %s',\r\n-\t\t\t\t\tisset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',\r\n-\t\t\t\t\tesc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\t$html = Template::combine_components( $section );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-progress', $html, $userCourseModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML course items completed progress bar.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\r\n-\t * @since 4.3.2.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_passing_grade_progress_bar( UserCourseModel $userCourseModel ): string {\r\n-\t\t$courseModel       = $userCourseModel->get_course_model();\r\n-\t\t$calculate         = $userCourseModel->calculate_course_results();\r\n-\t\t$passing_condition = $courseModel->get_passing_condition();\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'               => '\u003Cdiv class=\"course-passing-grade-progress-bar\">',\r\n-\t\t\t'line-passing-progress' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-progress__line\">\r\n-\t\t\t\t\t\u003Cdiv class=\"course-progress__line__active\" style=\"width: %s%%\">\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cdiv class=\"course-progress__line__point\" style=\"left: %s%%\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t$calculate['result'],\r\n-\t\t\t\t$passing_condition\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTML course items completed progress bar.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\r\n-\t * @since 4.3.2.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_items_completed_progress_bar( UserCourseModel $userCourseModel ): string {\r\n-\t\t$courseModel = $userCourseModel->get_course_model();\r\n-\t\t$calculate   = $userCourseModel->calculate_course_results();\r\n-\t\t$total_items = $courseModel->count_items();\r\n-\r\n-\t\t$progress_items_completed_percent = round(\r\n-\t\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\r\n-\t\t\t2\r\n-\t\t);\r\n-\r\n-\t\t$section = [\r\n-\t\t\t'wrapper'       => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-items-completed-progress-bar\" title=\"%s\">',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\tesc_html__( '%1$d of %2$d items completed', 'learnpress' ),\r\n-\t\t\t\t\t$calculate['completed_items'],\r\n-\t\t\t\t\t$total_items\r\n-\t\t\t\t)\r\n-\t\t\t),\r\n-\t\t\t'line-progress' => sprintf(\r\n-\t\t\t\t'\u003Cdiv class=\"course-progress__line\">\r\n-\t\t\t\t\t\u003Cdiv class=\"course-progress__line__active\" style=\"width: %s%%\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>',\r\n-\t\t\t\t$progress_items_completed_percent,\r\n-\t\t\t),\r\n-\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $section );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * HTMl progress course.\r\n-\t *\r\n-\t * @param UserCourseModel $userCourseModel\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_message_lock( UserCourseModel $userCourseModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\t\u002F\u002F For case Guest user.\r\n-\t\t$userModel = $userCourseModel->get_user_model();\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$courseModel = $userCourseModel->get_course_model();\r\n-\r\n-\t\tif ( $courseModel->enable_block_when_finished() && $userCourseModel->is_finished() ) {\r\n-\t\t\t$message = __( 'This course is finished.', 'learnpress' );\r\n-\t\t} elseif ( $courseModel->enable_block_when_expire() && $userCourseModel->timestamp_remaining_duration() === 0 ) {\r\n-\t\t\t$message = __( 'This course is expired.', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$html = Template::print_message( $message, 'warning', false );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-message-lock', $html, $userCourseModel );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks Single Instructor.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.0\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\UserItem;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LP_Helper;\n+use WP_Error;\n+\n+class UserCourseTemplate extends UserItemBaseTemplate {\n+\tpublic static function instance() {\n+\t\tstatic $instance = null;\n+\t\tif ( is_null( $instance ) ) {\n+\t\t\t$instance = new self();\n+\t\t}\n+\n+\t\treturn $instance;\n+\t}\n+\n+\t\u002F**\n+\t * HTML button continue course.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_btn_continue( UserCourseModel $userCourseModel ): string {\n+\t\t$html = '';\n+\n+\t\tif ( $userCourseModel->can_impact_item() instanceof WP_Error ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$courseModel = $userCourseModel->get_course_model();\n+\t\tif ( ! $courseModel ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$total_items = $courseModel->count_items();\n+\t\tif ( empty( $total_items ) ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$itemModelContinue = $userCourseModel->get_item_continue();\n+\t\tif ( empty( $itemModelContinue ) ) {\n+\t\t\t$link_continue = $courseModel->get_permalink();\n+\t\t} else {\n+\t\t\t$link_continue = $courseModel->get_item_link( $itemModelContinue->ID );\n+\t\t}\n+\n+\t\t$html = sprintf(\n+\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\tesc_url_raw( $link_continue ),\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Cbutton class=\"lp-button course-btn-continue\">%s\u003C\u002Fbutton>',\n+\t\t\t\tesc_html__( 'Continue', 'learnpress' )\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-button-continue', $html, $userCourseModel );\n+\t}\n+\n+\t\u002F**\n+\t * HTML button finish course.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.5\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_btn_finish( UserCourseModel $userCourseModel ): string {\n+\t\t$html = '';\n+\n+\t\t$can_finish = $userCourseModel->can_finish();\n+\t\tif ( is_wp_error( $can_finish ) ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fuser\u002Fcourse\u002Fhtml-button-finish',\n+\t\t\t[\n+\t\t\t\t'form'     => sprintf(\n+\t\t\t\t\t'\u003Cform class=\"lp-form form-button form-button-finish-course\" method=\"post\" data-confirm=\"%s\">',\n+\t\t\t\t\t__( 'Do you want to finish the course?', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'btn'      => sprintf(\n+\t\t\t\t\t'\u003Cbutton class=\"lp-button btn-finish-course\">%s\u003C\u002Fbutton>',\n+\t\t\t\t\tesc_html__( 'Finish Course', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'input'    => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"course-id\" value=\"%d\"\u002F>',\n+\t\t\t\t\tesc_attr( $userCourseModel->item_id )\n+\t\t\t\t),\n+\t\t\t\t'nonce'    => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"finish-course-nonce\" value=\"%s\"\u002F>',\n+\t\t\t\t\tesc_attr(\n+\t\t\t\t\t\twp_create_nonce(\n+\t\t\t\t\t\t\tsprintf( 'finish-course-%d-%d', $userCourseModel->item_id, $userCourseModel->user_id )\n+\t\t\t\t\t\t)\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t\t'lpajax'   => '\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"finish-course\"\u002F>',\n+\t\t\t\t'noajax'   => '\u003Cinput type=\"hidden\" name=\"noajax\" value=\"yes\"\u002F>',\n+\t\t\t\t'form_end' => '\u003C\u002Fform>',\n+\t\t\t],\n+\t\t\t$userCourseModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML button retake course\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_btn_retake( UserCourseModel $userCourseModel ): string {\n+\t\t$retake_remaining = $userCourseModel->can_retake();\n+\n+\t\tif ( $retake_remaining === 0 ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$html_btn = sprintf(\n+\t\t\t'\u003Cbutton type=\"submit\" class=\"lp-button button-retake-course\">%s (%d)\u003C\u002Fbutton>',\n+\t\t\t__( 'Retake course', 'learnpress' ),\n+\t\t\t$retake_remaining\n+\t\t);\n+\n+\t\t$section = apply_filters(\n+\t\t\t'learn-press\u002Fcourse\u002Fhtml-button-retake',\n+\t\t\t[\n+\t\t\t\t'form'         => sprintf(\n+\t\t\t\t\t'\u003Cform name=\"lp-form-retake-course\" class=\"lp-form-retake-course\" method=\"post\" data-confirm=\"%s\">',\n+\t\t\t\t\tesc_html__( 'Do you want to retake the course', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\t'input'        => sprintf(\n+\t\t\t\t\t'\u003Cinput type=\"hidden\" name=\"retake-course\" value=\"%d\"\u002F>',\n+\t\t\t\t\tesc_attr( $userCourseModel->item_id )\n+\t\t\t\t),\n+\t\t\t\t'btn'          => $html_btn,\n+\t\t\t\t'lp-ajax-mess' => '\u003Cdiv class=\"lp-ajax-message\">\u003C\u002Fdiv>',\n+\t\t\t\t'form_end'     => '\u003C\u002Fform>',\n+\t\t\t],\n+\t\t\t$userCourseModel\n+\t\t);\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML count items completed of Course.\n+\t *\n+\t * @return mixed|string|null\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_count_items_completed( UserCourseModel $userCourseModel ): string {\n+\t\t$html = '';\n+\n+\t\t\u002F\u002F For case Guest user.\n+\t\t$userModel = $userCourseModel->get_user_model();\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$courseModel           = $userCourseModel->get_course_model();\n+\t\t$item_types            = CourseModel::item_types_support();\n+\t\t$count_items_completed = $userCourseModel->count_items_completed();\n+\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t$count_item           = $courseModel->count_items( $item_type );\n+\t\t\t$count_item_completed = $count_items_completed->{$item_type . '_status_completed'} ?? '';\n+\t\t\tif ( empty( $count_item_completed ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$html .= sprintf(\n+\t\t\t\t'\u003Cdiv class=\"item-completed\">\u003Cspan>%s\u003C\u002Fspan>\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fdiv>',\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'%s %s: ',\n+\t\t\t\t\tLP_Helper::get_i18n_string_plural( $count_item, $item_type, false ),\n+\t\t\t\t\t__( 'completed', 'learnpress' )\n+\t\t\t\t),\n+\t\t\t\tsprintf( '%d\u002F%d', $count_item_completed, $count_item )\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-count-items-completed', $html, $userCourseModel );\n+\t}\n+\n+\t\u002F**\n+\t * HTMl progress course.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return mixed|null\n+\t * @since 4.2.7.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_progress( UserCourseModel $userCourseModel ) {\n+\t\t$html = '';\n+\n+\t\t\u002F\u002F For case Guest user.\n+\t\t$userModel = $userCourseModel->get_user_model();\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$courseModel       = $userCourseModel->get_course_model();\n+\t\t$evaluation_type   = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() );\n+\t\t$calculate         = $userCourseModel->calculate_course_results();\n+\t\t$passing_condition = $courseModel->get_passing_condition();\n+\t\tif ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) {\n+\t\t\t$final_quiz = $courseModel->get_final_quiz();\n+\t\t\tif ( $final_quiz ) {\n+\t\t\t\t$quizModel         = QuizPostModel::find( $final_quiz, true );\n+\t\t\t\t$passing_condition = $quizModel->get_passing_grade();\n+\t\t\t}\n+\t\t}\n+\t\t$total_items = $courseModel->count_items();\n+\n+\t\t$progress_items_completed_percent = round(\n+\t\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\n+\t\t\t2\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'wrapper'          => '\u003Cdiv class=\"course-progress\">',\n+\t\t\t'progress'         => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-progress__label\">%s %s\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Course progress:', 'learnpress' ),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Cspan class=\"course-progress__number\">\n+\t\t\t\t\t\t\u003Cspan class=\"number\">%s\u003Cspan class=\"percentage\">%s\u003C\u002Fspan>\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fspan>',\n+\t\t\t\t\t$progress_items_completed_percent,\n+\t\t\t\t\t'%'\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'line-progress'    => $this->html_items_completed_progress_bar( $userCourseModel ),\n+\t\t\t'passing-progress' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-progress__label\">%s %s\n+\t\t\t\t\t\u003Cspan class=\"lp-icon-question-circle\" title=\"%s\">\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\tesc_html__( 'Passing grade progress:', 'learnpress' ),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Cspan class=\"course-progress__number\">\n+\t\t\t\t\t\t\u003Cspan class=\"number\">%s\u003Cspan class=\"percentage\">%s\u003C\u002Fspan>\u003C\u002Fspan>\n+\t\t\t\t\t\u003C\u002Fspan>',\n+\t\t\t\t\t$calculate['result'],\n+\t\t\t\t\t'%'\n+\t\t\t\t),\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'%s. %s',\n+\t\t\t\t\tisset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',\n+\t\t\t\t\tesc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'wrapper_end'      => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\t$html = Template::combine_components( $section );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-progress', $html, $userCourseModel );\n+\t}\n+\n+\t\u002F**\n+\t * HTML course items completed progress bar.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t *\n+\t * @since 4.3.2.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_passing_grade_progress_bar( UserCourseModel $userCourseModel ): string {\n+\t\t$courseModel       = $userCourseModel->get_course_model();\n+\t\t$calculate         = $userCourseModel->calculate_course_results();\n+\t\t$passing_condition = $courseModel->get_passing_condition();\n+\n+\t\t$section = [\n+\t\t\t'wrapper'               => '\u003Cdiv class=\"course-passing-grade-progress-bar\">',\n+\t\t\t'line-passing-progress' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-progress__line\">\n+\t\t\t\t\t\u003Cdiv class=\"course-progress__line__active\" style=\"width: %s%%\">\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cdiv class=\"course-progress__line__point\" style=\"left: %s%%\">\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t$calculate['result'],\n+\t\t\t\t$passing_condition\n+\t\t\t),\n+\t\t\t'wrapper_end'           => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTML course items completed progress bar.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return string\n+\t *\n+\t * @since 4.3.2.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_items_completed_progress_bar( UserCourseModel $userCourseModel ): string {\n+\t\t$courseModel = $userCourseModel->get_course_model();\n+\t\t$calculate   = $userCourseModel->calculate_course_results();\n+\t\t$total_items = $courseModel->count_items();\n+\n+\t\t$progress_items_completed_percent = round(\n+\t\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\n+\t\t\t2\n+\t\t);\n+\n+\t\t$section = [\n+\t\t\t'wrapper'       => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-items-completed-progress-bar\" title=\"%s\">',\n+\t\t\t\tsprintf(\n+\t\t\t\t\tesc_html__( '%1$d of %2$d items completed', 'learnpress' ),\n+\t\t\t\t\t$calculate['completed_items'],\n+\t\t\t\t\t$total_items\n+\t\t\t\t)\n+\t\t\t),\n+\t\t\t'line-progress' => sprintf(\n+\t\t\t\t'\u003Cdiv class=\"course-progress__line\">\n+\t\t\t\t\t\u003Cdiv class=\"course-progress__line__active\" style=\"width: %s%%\">\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>',\n+\t\t\t\t$progress_items_completed_percent,\n+\t\t\t),\n+\t\t\t'wrapper_end'   => '\u003C\u002Fdiv>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $section );\n+\t}\n+\n+\t\u002F**\n+\t * HTMl progress course.\n+\t *\n+\t * @param UserCourseModel $userCourseModel\n+\t *\n+\t * @return mixed|null\n+\t * @since 4.2.7.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_message_lock( UserCourseModel $userCourseModel ): string {\n+\t\t$html = '';\n+\n+\t\t\u002F\u002F For case Guest user.\n+\t\t$userModel = $userCourseModel->get_user_model();\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$courseModel = $userCourseModel->get_course_model();\n+\n+\t\tif ( $courseModel->enable_block_when_finished() && $userCourseModel->is_finished() ) {\n+\t\t\t$message = __( 'This course is finished.', 'learnpress' );\n+\t\t} elseif ( $courseModel->enable_block_when_expire() && $userCourseModel->timestamp_remaining_duration() === 0 ) {\n+\t\t\t$message = __( 'This course is expired.', 'learnpress' );\n+\t\t} else {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$html = Template::print_message( $message, 'warning', false );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fhtml-message-lock', $html, $userCourseModel );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,185 +1,185 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks User Item Base.\r\n- *\r\n- * @since 4.2.3.5\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks\\UserItem;\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LP_Datetime;\r\n-use LP_User_Item;\r\n-use Throwable;\r\n-\r\n-class UserItemBaseTemplate {\r\n-\t\u002F**\r\n-\t * Get html start time of user item.\r\n-\t *\r\n-\t * @param UserItemModel|LP_User_Item $user_item\r\n-\t * @param bool $has_time\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_start_date_time( $user_item, bool $has_time = true ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $user_item instanceof LP_User_Item ) {\r\n-\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\r\n-\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\r\n-\t\t\t\t$userItemModel = $user_item;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$start_time_from_db = $userItemModel->get_start_time();\r\n-\t\t\tif ( empty( $start_time_from_db ) ) {\r\n-\t\t\t\t$start_date_str = ' - ';\r\n-\t\t\t} else {\r\n-\t\t\t\t$start_date = new LP_Datetime( $start_time_from_db );\r\n-\t\t\t\tif ( $has_time ) {\r\n-\t\t\t\t\t$start_date_str = $start_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$start_date_str = $start_date->format( LP_Datetime::I18N_FORMAT );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item start-date-time\">%s\u003C\u002Fspan>', $start_date_str );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html end time of user item.\r\n-\t *\r\n-\t * @param UserItemModel|LP_User_Item $user_item\r\n-\t * @param bool $has_time\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_end_date_time( $user_item, bool $has_time = true ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $user_item instanceof LP_User_Item ) {\r\n-\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\r\n-\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\r\n-\t\t\t\t$userItemModel = $user_item;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$end_time_from_db = $userItemModel->get_end_time();\r\n-\t\t\tif ( empty( $end_time_from_db ) ) {\r\n-\t\t\t\t$end_date_str = ' - ';\r\n-\t\t\t} else {\r\n-\t\t\t\t$end_date = new LP_Datetime( $end_time_from_db );\r\n-\t\t\t\tif ( $has_time ) {\r\n-\t\t\t\t\t$end_date_str = $end_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$end_date_str = $end_date->format( LP_Datetime::I18N_FORMAT );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item end-date-time\">%s\u003C\u002Fspan>', $end_date_str );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html expire time of user item.\r\n-\t *\r\n-\t * @param UserItemModel|LP_User_Item $user_item\r\n-\t * @param bool $has_time\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.5\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_expire_date_time( $user_item, bool $has_time = true ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $user_item instanceof LP_User_Item ) {\r\n-\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\r\n-\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\r\n-\t\t\t\t$userItemModel = $user_item;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn $html;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$expire_date = $userItemModel->get_expiration_time();\r\n-\t\t\tif ( empty( $expire_date ) ) {\r\n-\t\t\t\t$expire_date_str = __( 'Never', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $has_time ) {\r\n-\t\t\t\t\t$expire_date_str = $expire_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$expire_date_str = $expire_date->format( LP_Datetime::I18N_FORMAT );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item expire-date-time\">%s\u003C\u002Fspan>', $expire_date_str );\r\n-\t\t\t\u002F\u002F Hook old\r\n-\t\t\tif ( has_filter( 'learn-press\u002Fuser-item\u002Fhtml-expire-date-time' ) ) {\r\n-\t\t\t\t$html = apply_filters( 'learn-press\u002Fuser-item\u002Fhtml-expire-date-time', $html, $user_item, $has_time );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$html = apply_filters( 'learn-press\u002Fuser-item-model\u002Fhtml-expire-date-time', $html, $userItemModel, $has_time );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html graduation of user item.\r\n-\t * @param UserItemModel $userItemModel\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_graduation( UserItemModel $userItemModel ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\t$graduation = $userItemModel->get_graduation();\r\n-\t\tif ( empty( $graduation ) ) {\r\n-\t\t\treturn $html;\r\n-\t\t}\r\n-\r\n-\t\t$label = '';\r\n-\t\tswitch ( $graduation ) {\r\n-\t\t\tcase UserItemModel::GRADUATION_PASSED:\r\n-\t\t\t\t$label = __( 'Passed', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase UserItemModel::GRADUATION_FAILED:\r\n-\t\t\t\t$label = __( 'Failed', 'learnpress' );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\t$html = sprintf(\r\n-\t\t\t'\u003Cdiv class=\"lp-user-item graduation %s\">%s%s\u003C\u002Fdiv>',\r\n-\t\t\t$graduation,\r\n-\t\t\tsprintf( '\u003Cspan class=\"lp-icon lp-icon-%s\">\u003C\u002Fspan>', $graduation ),\r\n-\t\t\t$label\r\n-\t\t);\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-item-model\u002Fhtml-graduation', $html, $userItemModel );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks User Item Base.\n+ *\n+ * @since 4.2.3.5\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks\\UserItem;\n+\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LP_Datetime;\n+use LP_User_Item;\n+use Throwable;\n+\n+class UserItemBaseTemplate {\n+\t\u002F**\n+\t * Get html start time of user item.\n+\t *\n+\t * @param UserItemModel|LP_User_Item $user_item\n+\t * @param bool $has_time\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_start_date_time( $user_item, bool $has_time = true ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $user_item instanceof LP_User_Item ) {\n+\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\n+\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\n+\t\t\t\t$userItemModel = $user_item;\n+\t\t\t} else {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$start_time_from_db = $userItemModel->get_start_time();\n+\t\t\tif ( empty( $start_time_from_db ) ) {\n+\t\t\t\t$start_date_str = ' - ';\n+\t\t\t} else {\n+\t\t\t\t$start_date = new LP_Datetime( $start_time_from_db );\n+\t\t\t\tif ( $has_time ) {\n+\t\t\t\t\t$start_date_str = $start_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\n+\t\t\t\t} else {\n+\t\t\t\t\t$start_date_str = $start_date->format( LP_Datetime::I18N_FORMAT );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item start-date-time\">%s\u003C\u002Fspan>', $start_date_str );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html end time of user item.\n+\t *\n+\t * @param UserItemModel|LP_User_Item $user_item\n+\t * @param bool $has_time\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_end_date_time( $user_item, bool $has_time = true ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $user_item instanceof LP_User_Item ) {\n+\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\n+\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\n+\t\t\t\t$userItemModel = $user_item;\n+\t\t\t} else {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$end_time_from_db = $userItemModel->get_end_time();\n+\t\t\tif ( empty( $end_time_from_db ) ) {\n+\t\t\t\t$end_date_str = ' - ';\n+\t\t\t} else {\n+\t\t\t\t$end_date = new LP_Datetime( $end_time_from_db );\n+\t\t\t\tif ( $has_time ) {\n+\t\t\t\t\t$end_date_str = $end_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\n+\t\t\t\t} else {\n+\t\t\t\t\t$end_date_str = $end_date->format( LP_Datetime::I18N_FORMAT );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item end-date-time\">%s\u003C\u002Fspan>', $end_date_str );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html expire time of user item.\n+\t *\n+\t * @param UserItemModel|LP_User_Item $user_item\n+\t * @param bool $has_time\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.5\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_expire_date_time( $user_item, bool $has_time = true ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $user_item instanceof LP_User_Item ) {\n+\t\t\t\t$userItemModel = new UserItemModel( $user_item->get_data() );\n+\t\t\t} elseif ( $user_item instanceof UserItemModel ) {\n+\t\t\t\t$userItemModel = $user_item;\n+\t\t\t} else {\n+\t\t\t\treturn $html;\n+\t\t\t}\n+\n+\t\t\t$expire_date = $userItemModel->get_expiration_time();\n+\t\t\tif ( empty( $expire_date ) ) {\n+\t\t\t\t$expire_date_str = __( 'Never', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\tif ( $has_time ) {\n+\t\t\t\t\t$expire_date_str = $expire_date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );\n+\t\t\t\t} else {\n+\t\t\t\t\t$expire_date_str = $expire_date->format( LP_Datetime::I18N_FORMAT );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$html = sprintf( '\u003Cspan class=\"lp-user-item expire-date-time\">%s\u003C\u002Fspan>', $expire_date_str );\n+\t\t\t\u002F\u002F Hook old\n+\t\t\tif ( has_filter( 'learn-press\u002Fuser-item\u002Fhtml-expire-date-time' ) ) {\n+\t\t\t\t$html = apply_filters( 'learn-press\u002Fuser-item\u002Fhtml-expire-date-time', $html, $user_item, $has_time );\n+\t\t\t}\n+\n+\t\t\t$html = apply_filters( 'learn-press\u002Fuser-item-model\u002Fhtml-expire-date-time', $html, $userItemModel, $has_time );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html graduation of user item.\n+\t * @param UserItemModel $userItemModel\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_graduation( UserItemModel $userItemModel ): string {\n+\t\t$html = '';\n+\n+\t\t$graduation = $userItemModel->get_graduation();\n+\t\tif ( empty( $graduation ) ) {\n+\t\t\treturn $html;\n+\t\t}\n+\n+\t\t$label = '';\n+\t\tswitch ( $graduation ) {\n+\t\t\tcase UserItemModel::GRADUATION_PASSED:\n+\t\t\t\t$label = __( 'Passed', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tcase UserItemModel::GRADUATION_FAILED:\n+\t\t\t\t$label = __( 'Failed', 'learnpress' );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\t$html = sprintf(\n+\t\t\t'\u003Cdiv class=\"lp-user-item graduation %s\">%s%s\u003C\u002Fdiv>',\n+\t\t\t$graduation,\n+\t\t\tsprintf( '\u003Cspan class=\"lp-icon lp-icon-%s\">\u003C\u002Fspan>', $graduation ),\n+\t\t\t$label\n+\t\t);\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-item-model\u002Fhtml-graduation', $html, $userItemModel );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserTemplate.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserTemplate.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FTemplateHooks\u002FUserTemplate.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FTemplateHooks\u002FUserTemplate.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,264 +1,264 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template hooks User.\r\n- *\r\n- * @since 4.2.7.2\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-namespace LearnPress\\TemplateHooks;\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Profile;\r\n-use LP_User;\r\n-use Throwable;\r\n-\r\n-class UserTemplate {\r\n-\tpublic $class_name;\r\n-\r\n-\tpublic function __construct( $class_name = 'user' ) {\r\n-\t\t$this->class_name = $class_name;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get display name html of user.\r\n-\t *\r\n-\t * @param UserModel|LP_User $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_display_name( $userModel ): string {\r\n-\t\tif ( $userModel instanceof LP_User ) {\r\n-\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$sections = [\r\n-\t\t\t'wrapper'     => sprintf( '\u003Cspan class=\"%s-display-name\">', $this->class_name ),\r\n-\t\t\t'content'     => $userModel->get_display_name(),\r\n-\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\r\n-\t\t];\r\n-\r\n-\t\treturn Template::combine_components( $sections );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html description of instructor.\r\n-\t *\r\n-\t * @param UserModel|LP_User $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.3.4\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function html_description( $userModel ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $userModel instanceof LP_User ) {\r\n-\t\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$description = $userModel->get_description();\r\n-\t\t\tif ( empty( $description ) ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser\u002Fhtml-description',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-description\">', $this->class_name ),\r\n-\t\t\t\t\t'content'     => wpautop( wp_kses_post( $description ) ),\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$userModel\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html avatar of user.\r\n-\t *\r\n-\t * @param UserModel $user\r\n-\t * @param array $size_display [ 'width' => 100, 'height' => 100 ]\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.5\r\n-\t *\u002F\r\n-\tpublic function html_avatar( UserModel $user, array $size_display = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $user instanceof LP_User ) {\r\n-\t\t\t\t$user = UserModel::find( $user->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $size_display ) ) {\r\n-\t\t\t\t$size_display = learn_press_get_avatar_thumb_size();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$width  = $size_display;\r\n-\t\t\t$height = $size_display;\r\n-\t\t\tif ( is_array( $size_display ) ) {\r\n-\t\t\t\t$width  = $size_display['width'];\r\n-\t\t\t\t$height = $size_display['height'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$avatar_url = $user->get_avatar_url();\r\n-\t\t\t$img_avatar = sprintf(\r\n-\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" decoding=\"async\" loading=\"lazy\" \u002F>',\r\n-\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\r\n-\t\t\t\t$avatar_url,\r\n-\t\t\t\t$width,\r\n-\t\t\t\t$height\r\n-\t\t\t);\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser\u002Fhtml-avatar',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-avatar\">', $this->class_name ),\r\n-\t\t\t\t\t'avatar'      => $img_avatar,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html avatar of instructor with edit link.\r\n-\t * Don't wrapper this html with tag \u003Ca> because has tag \u003Ca> inside.\r\n-\t *\r\n-\t * @param UserModel $user\r\n-\t * @param array $size_display [ 'width' => 100, 'height' => 100 ]\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 4.2.7.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function html_avatar_edit( UserModel $user, array $size_display = [] ): string {\r\n-\t\t$html = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $user instanceof LP_User ) {\r\n-\t\t\t\t$user = UserModel::find( $user->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $size_display ) ) {\r\n-\t\t\t\t$size_display = learn_press_get_avatar_thumb_size();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$profile = LP_Profile::instance( $user->get_id() );\r\n-\t\t\t$width   = $size_display;\r\n-\t\t\t$height  = $size_display;\r\n-\t\t\tif ( is_array( $size_display ) ) {\r\n-\t\t\t\t$width  = $size_display['width'];\r\n-\t\t\t\t$height = $size_display['height'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$avatar_url = $user->get_avatar_url();\r\n-\t\t\t$img_avatar = sprintf(\r\n-\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" decoding=\"async\" \u002F>',\r\n-\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\r\n-\t\t\t\t$avatar_url,\r\n-\t\t\t\t$width,\r\n-\t\t\t\t$height\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html_btn_to_edit_avatar = '';\r\n-\t\t\tif ( $user->get_id() === get_current_user_id() ) {\r\n-\t\t\t\t$html_btn_to_edit_avatar = sprintf(\r\n-\t\t\t\t\t'\u003Ca class=\"lp-btn-to-edit-avatar\" href=\"%s\" data-section-correct=\"%d\" title=\"%s\">+ %s\u003C\u002Fa>',\r\n-\t\t\t\t\t$profile->get_tab_link( 'settings', 'avatar' ),\r\n-\t\t\t\t\t'avatar',\r\n-\t\t\t\t\tesc_attr__( 'Edit avatar', 'learnpress' ),\r\n-\t\t\t\t\t__( 'edit avatar', 'learnpress' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser\u002Fhtml-avatar-edit',\r\n-\t\t\t\t[\r\n-\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-avatar\">', $this->class_name ),\r\n-\t\t\t\t\t'avatar'      => $img_avatar,\r\n-\t\t\t\t\t'btn_edit'    => $html_btn_to_edit_avatar,\r\n-\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t\t],\r\n-\t\t\t\t$user\r\n-\t\t\t);\r\n-\r\n-\t\t\t$html = Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $html;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get html social of instructor.\r\n-\t *\r\n-\t * @param UserModel|LP_User $userModel\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function html_social( $userModel ): string {\r\n-\t\t$content = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( $userModel instanceof LP_User ) {\r\n-\t\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$socials = $userModel->get_profile_social();\r\n-\t\t\tif ( empty( $socials ) ) {\r\n-\t\t\t\treturn $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$sections = [\r\n-\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-social\">', $this->class_name ),\r\n-\t\t\t\t'content'     => Template::combine_components( $socials ),\r\n-\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\t$content = Template::combine_components( $sections );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $content;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template hooks User.\n+ *\n+ * @since 4.2.7.2\n+ * @version 1.0.1\n+ *\u002F\n+\n+namespace LearnPress\\TemplateHooks;\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LP_Profile;\n+use LP_User;\n+use Throwable;\n+\n+class UserTemplate {\n+\tpublic $class_name;\n+\n+\tpublic function __construct( $class_name = 'user' ) {\n+\t\t$this->class_name = $class_name;\n+\t}\n+\n+\t\u002F**\n+\t * Get display name html of user.\n+\t *\n+\t * @param UserModel|LP_User $userModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_display_name( $userModel ): string {\n+\t\tif ( $userModel instanceof LP_User ) {\n+\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\n+\t\t}\n+\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$sections = [\n+\t\t\t'wrapper'     => sprintf( '\u003Cspan class=\"%s-display-name\">', $this->class_name ),\n+\t\t\t'content'     => $userModel->get_display_name(),\n+\t\t\t'wrapper_end' => '\u003C\u002Fspan>',\n+\t\t];\n+\n+\t\treturn Template::combine_components( $sections );\n+\t}\n+\n+\t\u002F**\n+\t * Get html description of instructor.\n+\t *\n+\t * @param UserModel|LP_User $userModel\n+\t *\n+\t * @return string\n+\t * @since 4.2.3.4\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function html_description( $userModel ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $userModel instanceof LP_User ) {\n+\t\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\t$description = $userModel->get_description();\n+\t\t\tif ( empty( $description ) ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\t$sections = apply_filters(\n+\t\t\t\t'learn-press\u002Fuser\u002Fhtml-description',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-description\">', $this->class_name ),\n+\t\t\t\t\t'content'     => wpautop( wp_kses_post( $description ) ),\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$userModel\n+\t\t\t);\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+\n+\t\u002F**\n+\t * Get html avatar of user.\n+\t *\n+\t * @param UserModel $user\n+\t * @param array $size_display [ 'width' => 100, 'height' => 100 ]\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.2\n+\t * @version 1.0.5\n+\t *\u002F\n+\tpublic function html_avatar( UserModel $user, array $size_display = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $user instanceof LP_User ) {\n+\t\t\t\t$user = UserModel::find( $user->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\tif ( empty( $size_display ) ) {\n+\t\t\t\t$size_display = learn_press_get_avatar_thumb_size();\n+\t\t\t}\n+\n+\t\t\t$width  = $size_display;\n+\t\t\t$height = $size_display;\n+\t\t\tif ( is_array( $size_display ) ) {\n+\t\t\t\t$width  = $size_display['width'];\n+\t\t\t\t$height = $size_display['height'];\n+\t\t\t}\n+\n+\t\t\t$avatar_url = $user->get_avatar_url();\n+\t\t\t$img_avatar = sprintf(\n+\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" decoding=\"async\" loading=\"lazy\" \u002F>',\n+\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\n+\t\t\t\t$avatar_url,\n+\t\t\t\t$width,\n+\t\t\t\t$height\n+\t\t\t);\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fuser\u002Fhtml-avatar',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-avatar\">', $this->class_name ),\n+\t\t\t\t\t'avatar'      => $img_avatar,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html avatar of instructor with edit link.\n+\t * Don't wrapper this html with tag \u003Ca> because has tag \u003Ca> inside.\n+\t *\n+\t * @param UserModel $user\n+\t * @param array $size_display [ 'width' => 100, 'height' => 100 ]\n+\t *\n+\t * @return string\n+\t * @since 4.2.7.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function html_avatar_edit( UserModel $user, array $size_display = [] ): string {\n+\t\t$html = '';\n+\n+\t\ttry {\n+\t\t\tif ( $user instanceof LP_User ) {\n+\t\t\t\t$user = UserModel::find( $user->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\tif ( empty( $size_display ) ) {\n+\t\t\t\t$size_display = learn_press_get_avatar_thumb_size();\n+\t\t\t}\n+\n+\t\t\t$profile = LP_Profile::instance( $user->get_id() );\n+\t\t\t$width   = $size_display;\n+\t\t\t$height  = $size_display;\n+\t\t\tif ( is_array( $size_display ) ) {\n+\t\t\t\t$width  = $size_display['width'];\n+\t\t\t\t$height = $size_display['height'];\n+\t\t\t}\n+\n+\t\t\t$avatar_url = $user->get_avatar_url();\n+\t\t\t$img_avatar = sprintf(\n+\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" decoding=\"async\" \u002F>',\n+\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\n+\t\t\t\t$avatar_url,\n+\t\t\t\t$width,\n+\t\t\t\t$height\n+\t\t\t);\n+\n+\t\t\t$html_btn_to_edit_avatar = '';\n+\t\t\tif ( $user->get_id() === get_current_user_id() ) {\n+\t\t\t\t$html_btn_to_edit_avatar = sprintf(\n+\t\t\t\t\t'\u003Ca class=\"lp-btn-to-edit-avatar\" href=\"%s\" data-section-correct=\"%d\" title=\"%s\">+ %s\u003C\u002Fa>',\n+\t\t\t\t\t$profile->get_tab_link( 'settings', 'avatar' ),\n+\t\t\t\t\t'avatar',\n+\t\t\t\t\tesc_attr__( 'Edit avatar', 'learnpress' ),\n+\t\t\t\t\t__( 'edit avatar', 'learnpress' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$section = apply_filters(\n+\t\t\t\t'learn-press\u002Fuser\u002Fhtml-avatar-edit',\n+\t\t\t\t[\n+\t\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-avatar\">', $this->class_name ),\n+\t\t\t\t\t'avatar'      => $img_avatar,\n+\t\t\t\t\t'btn_edit'    => $html_btn_to_edit_avatar,\n+\t\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t\t],\n+\t\t\t\t$user\n+\t\t\t);\n+\n+\t\t\t$html = Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $html;\n+\t}\n+\n+\t\u002F**\n+\t * Get html social of instructor.\n+\t *\n+\t * @param UserModel|LP_User $userModel\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function html_social( $userModel ): string {\n+\t\t$content = '';\n+\n+\t\ttry {\n+\t\t\tif ( $userModel instanceof LP_User ) {\n+\t\t\t\t$userModel = UserModel::find( $userModel->get_id(), true );\n+\t\t\t}\n+\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$socials = $userModel->get_profile_social();\n+\t\t\tif ( empty( $socials ) ) {\n+\t\t\t\treturn $content;\n+\t\t\t}\n+\n+\t\t\t$sections = [\n+\t\t\t\t'wrapper'     => sprintf( '\u003Cdiv class=\"%s-social\">', $this->class_name ),\n+\t\t\t\t'content'     => Template::combine_components( $socials ),\n+\t\t\t\t'wrapper_end' => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\t$content = Template::combine_components( $sections );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $content;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fabstract-template.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fabstract-template.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fabstract-template.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fabstract-template.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,278 +1,278 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Template\r\n- *\r\n- * @since 3.3.0\r\n- *\u002F\r\n-class LP_Abstract_Template {\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Template\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Template constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t}\r\n-\r\n-\tpublic function clearfix() {\r\n-\t\tlearn_press_get_template( 'global\u002Fclearfix' );\r\n-\t}\r\n-\r\n-\tpublic function callback( $template, $args = array() ) {\r\n-\t\treturn array( new LP_Template_Callback( $template, $args ), 'callback' );\r\n-\t}\r\n-\r\n-\tpublic function text( $text, $id = '' ) {\r\n-\t\treturn array( new LP_Template_Callback( $text, $id ), 'text' );\r\n-\t}\r\n-\r\n-\tpublic function __call( $name, $arguments ) {\r\n-\t\t$log = sprintf( 'Template %s::%s doesn\\'t exists.', get_class( $this ), $name );\r\n-\t\terror_log( $log );\r\n-\r\n-\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\techo sprintf( '\u003Cspan title=\"%s\" class=\"learn-press-template-warning\">\u003C\u002Fspan>', $log );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return is callable method of self class.\r\n-\t *\r\n-\t * @since 3.3.0\r\n-\t *\r\n-\t * @param string $callback\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function func( $callback ) {\r\n-\t\treturn array( $this, $callback );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add callable method of self class to a hook of template.\r\n-\t *\r\n-\t * @param string $name\r\n-\t * @param string $callback\r\n-\t * @param int    $priority\r\n-\t * @param int    $number_args\r\n-\t *\u002F\r\n-\tpublic function hook( $name, $callback, $priority = 10, $number_args = 1 ) {\r\n-\t\tadd_action( $name, $this->func( $callback ), $priority, $number_args );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove hooked callable method.\r\n-\t *\r\n-\t * @param string $tag\r\n-\t * @param string $function_to_remove - '*' will remove all methods.\r\n-\t * @param int    $priority\r\n-\t *\r\n-\t * Ex: Remove for text: LearnPress::instance()->template( 'course' )->remove( 'learn-press\u002Fcourse-content-summary', array( '\u003Cdiv class=\"course-detail-info\"> \u003Cdiv class=\"lp-content-area\"> \u003Cdiv class=\"course-info-left\">', 'course-info-left-open' ), 10 );\r\n-\t *\u002F\r\n-\tpublic function remove( $tag, $function_to_remove, $priority = 10 ) {\r\n-\t\tglobal $wp_filter;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( is_array( $function_to_remove ) ) {\r\n-\t\t\t\tif ( empty( $wp_filter[ $tag ] ) ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$callbacks = $wp_filter[ $tag ]->callbacks;\r\n-\t\t\t\tif ( ! $callbacks ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$priorities = array_keys( $callbacks );\r\n-\r\n-\t\t\t\tforeach ( $priorities as $priority1 ) {\r\n-\r\n-\t\t\t\t\tif ( $priority !== '*' && $priority !== $priority1 ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( empty( $callbacks[ $priority1 ] ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $callbacks[ $priority1 ] as $callback ) {\r\n-\r\n-\t\t\t\t\t\tif ( ! $callback['function'][0] instanceof LP_Template_Callback ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tif ( $callback['function'][0]->get_args() !== $function_to_remove[1] ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tremove_action( $tag, $callback['function'], $priority1 );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn;\r\n-\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * $function_to_remove === '*' will remove all functions hooked into a hook\r\n-\t\t * in all priorities\r\n-\t\t *\u002F\r\n-\t\tif ( $function_to_remove === '*' ) {\r\n-\t\t\tif ( ! empty( $wp_filter[ $tag ] ) ) {\r\n-\t\t\t\tunset( $wp_filter[ $tag ] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * $priority === '*' will remove all functions hooked into a hook\r\n-\t\t * in\r\n-\t\t *\u002F\r\n-\t\tif ( $priority === '*' ) {\r\n-\r\n-\t\t\tif ( ! empty( $wp_filter[ $tag ]->callbacks ) ) {\r\n-\t\t\t\t$priorities = array_keys( $wp_filter[ $tag ]->callbacks );\r\n-\r\n-\t\t\t\tforeach ( $priorities as $priority ) {\r\n-\t\t\t\t\tremove_action( $tag, $this->func( $function_to_remove ), $priority );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tremove_action( $tag, $this->func( $function_to_remove ), $priority );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove callback function.\r\n-\t *\r\n-\t * @param [type] $tag\r\n-\t * @param [type] $function\r\n-\t * @param [type] $priority\r\n-\t * @return void\r\n-\t *\r\n-\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t *\r\n-\t * Ex: LearnPress::instance()->template( 'course' )->remove_callback( 'learn-press\u002Fcourse-content-summary', 'single-course\u002Ftitle', 10 );\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic static function remove_callback( $tag, $function, $priority ) {\r\n-\t\tglobal $wp_filter;\r\n-\r\n-\t\tif ( empty( $wp_filter[ $tag ] ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$callbacks = $wp_filter[ $tag ]->callbacks;\r\n-\r\n-\t\t\tif ( ! $callbacks ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$priorities = array_keys( $callbacks );\r\n-\r\n-\t\t\tforeach ( $priorities as $priority1 ) {\r\n-\r\n-\t\t\t\tif ( $priority !== '*' && $priority !== $priority1 ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( empty( $callbacks[ $priority1 ] ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $callbacks[ $priority1 ] as $callback ) {\r\n-\r\n-\t\t\t\t\tif ( ! $callback['function'][0] instanceof LP_Template_Callback ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $callback['function'][1] !== 'callback' ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $callback['function'][0]->get_template() !== $function ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tremove_action( $tag, $callback['function'], $priority1 );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Template\r\n-\t *\u002F\r\n-\tpublic static function instance() {\r\n-\t\tif ( ! self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-}\r\n-\r\n-\r\n-class LP_Template_Callback {\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tprotected $template = '';\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $args = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Template_Caller constructor.\r\n-\t *\r\n-\t * @param       $template\r\n-\t * @param array    $args\r\n-\t *\u002F\r\n-\tpublic function __construct( $template, $args = array() ) {\r\n-\t\t$this->template = $template;\r\n-\t\t$this->args     = $args;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tpublic function callback() {\r\n-\t\t$template_args = array();\r\n-\r\n-\t\tif ( $this->args ) {\r\n-\t\t\tforeach ( $this->args as $k => $v ) {\r\n-\t\t\t\tif ( is_numeric( $k ) && is_string( $v ) ) {\r\n-\t\t\t\t\t$template_args[ $v ] = func_get_arg( $k );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( $this->template, $template_args );\r\n-\t}\r\n-\r\n-\tpublic function text() {\r\n-\t\tlearn_press_echo_vuejs_write_on_php( $this->template );\r\n-\t}\r\n-\r\n-\tpublic function get_args() {\r\n-\t\treturn $this->args;\r\n-\t}\r\n-\r\n-\tpublic function get_template() {\r\n-\t\treturn $this->template;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Template\n+ *\n+ * @since 3.3.0\n+ *\u002F\n+class LP_Abstract_Template {\n+\n+\t\u002F**\n+\t * @var LP_Template\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * LP_Template constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t}\n+\n+\tpublic function clearfix() {\n+\t\tlearn_press_get_template( 'global\u002Fclearfix' );\n+\t}\n+\n+\tpublic function callback( $template, $args = array() ) {\n+\t\treturn array( new LP_Template_Callback( $template, $args ), 'callback' );\n+\t}\n+\n+\tpublic function text( $text, $id = '' ) {\n+\t\treturn array( new LP_Template_Callback( $text, $id ), 'text' );\n+\t}\n+\n+\tpublic function __call( $name, $arguments ) {\n+\t\t$log = sprintf( 'Template %s::%s doesn\\'t exists.', get_class( $this ), $name );\n+\t\terror_log( $log );\n+\n+\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\techo sprintf( '\u003Cspan title=\"%s\" class=\"learn-press-template-warning\">\u003C\u002Fspan>', $log );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Return is callable method of self class.\n+\t *\n+\t * @since 3.3.0\n+\t *\n+\t * @param string $callback\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function func( $callback ) {\n+\t\treturn array( $this, $callback );\n+\t}\n+\n+\t\u002F**\n+\t * Add callable method of self class to a hook of template.\n+\t *\n+\t * @param string $name\n+\t * @param string $callback\n+\t * @param int    $priority\n+\t * @param int    $number_args\n+\t *\u002F\n+\tpublic function hook( $name, $callback, $priority = 10, $number_args = 1 ) {\n+\t\tadd_action( $name, $this->func( $callback ), $priority, $number_args );\n+\t}\n+\n+\t\u002F**\n+\t * Remove hooked callable method.\n+\t *\n+\t * @param string $tag\n+\t * @param string $function_to_remove - '*' will remove all methods.\n+\t * @param int    $priority\n+\t *\n+\t * Ex: Remove for text: LearnPress::instance()->template( 'course' )->remove( 'learn-press\u002Fcourse-content-summary', array( '\u003Cdiv class=\"course-detail-info\"> \u003Cdiv class=\"lp-content-area\"> \u003Cdiv class=\"course-info-left\">', 'course-info-left-open' ), 10 );\n+\t *\u002F\n+\tpublic function remove( $tag, $function_to_remove, $priority = 10 ) {\n+\t\tglobal $wp_filter;\n+\n+\t\ttry {\n+\t\t\tif ( is_array( $function_to_remove ) ) {\n+\t\t\t\tif ( empty( $wp_filter[ $tag ] ) ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$callbacks = $wp_filter[ $tag ]->callbacks;\n+\t\t\t\tif ( ! $callbacks ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t$priorities = array_keys( $callbacks );\n+\n+\t\t\t\tforeach ( $priorities as $priority1 ) {\n+\n+\t\t\t\t\tif ( $priority !== '*' && $priority !== $priority1 ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( empty( $callbacks[ $priority1 ] ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $callbacks[ $priority1 ] as $callback ) {\n+\n+\t\t\t\t\t\tif ( ! $callback['function'][0] instanceof LP_Template_Callback ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tif ( $callback['function'][0]->get_args() !== $function_to_remove[1] ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tremove_action( $tag, $callback['function'], $priority1 );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\treturn;\n+\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * $function_to_remove === '*' will remove all functions hooked into a hook\n+\t\t * in all priorities\n+\t\t *\u002F\n+\t\tif ( $function_to_remove === '*' ) {\n+\t\t\tif ( ! empty( $wp_filter[ $tag ] ) ) {\n+\t\t\t\tunset( $wp_filter[ $tag ] );\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * $priority === '*' will remove all functions hooked into a hook\n+\t\t * in\n+\t\t *\u002F\n+\t\tif ( $priority === '*' ) {\n+\n+\t\t\tif ( ! empty( $wp_filter[ $tag ]->callbacks ) ) {\n+\t\t\t\t$priorities = array_keys( $wp_filter[ $tag ]->callbacks );\n+\n+\t\t\t\tforeach ( $priorities as $priority ) {\n+\t\t\t\t\tremove_action( $tag, $this->func( $function_to_remove ), $priority );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn;\n+\t\t}\n+\t\tremove_action( $tag, $this->func( $function_to_remove ), $priority );\n+\t}\n+\n+\t\u002F**\n+\t * Remove callback function.\n+\t *\n+\t * @param [type] $tag\n+\t * @param [type] $function\n+\t * @param [type] $priority\n+\t * @return void\n+\t *\n+\t * @author Nhamdv \u003Cemail@email.com>\n+\t *\n+\t * Ex: LearnPress::instance()->template( 'course' )->remove_callback( 'learn-press\u002Fcourse-content-summary', 'single-course\u002Ftitle', 10 );\n+\t *\n+\t *\u002F\n+\tpublic static function remove_callback( $tag, $function, $priority ) {\n+\t\tglobal $wp_filter;\n+\n+\t\tif ( empty( $wp_filter[ $tag ] ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$callbacks = $wp_filter[ $tag ]->callbacks;\n+\n+\t\t\tif ( ! $callbacks ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$priorities = array_keys( $callbacks );\n+\n+\t\t\tforeach ( $priorities as $priority1 ) {\n+\n+\t\t\t\tif ( $priority !== '*' && $priority !== $priority1 ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( empty( $callbacks[ $priority1 ] ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $callbacks[ $priority1 ] as $callback ) {\n+\n+\t\t\t\t\tif ( ! $callback['function'][0] instanceof LP_Template_Callback ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $callback['function'][1] !== 'callback' ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $callback['function'][0]->get_template() !== $function ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tremove_action( $tag, $callback['function'], $priority1 );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Template\n+\t *\u002F\n+\tpublic static function instance() {\n+\t\tif ( ! self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+}\n+\n+\n+class LP_Template_Callback {\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tprotected $template = '';\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $args = array();\n+\n+\t\u002F**\n+\t * LP_Template_Caller constructor.\n+\t *\n+\t * @param       $template\n+\t * @param array    $args\n+\t *\u002F\n+\tpublic function __construct( $template, $args = array() ) {\n+\t\t$this->template = $template;\n+\t\t$this->args     = $args;\n+\t}\n+\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tpublic function callback() {\n+\t\t$template_args = array();\n+\n+\t\tif ( $this->args ) {\n+\t\t\tforeach ( $this->args as $k => $v ) {\n+\t\t\t\tif ( is_numeric( $k ) && is_string( $v ) ) {\n+\t\t\t\t\t$template_args[ $v ] = func_get_arg( $k );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tlearn_press_get_template( $this->template, $template_args );\n+\t}\n+\n+\tpublic function text() {\n+\t\tlearn_press_echo_vuejs_write_on_php( $this->template );\n+\t}\n+\n+\tpublic function get_args() {\n+\t\treturn $this->args;\n+\t}\n+\n+\tpublic function get_template() {\n+\t\treturn $this->template;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-checkout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-checkout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-checkout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-checkout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Template_Checkout\r\n- *\r\n- * Groups templates related checkout page\r\n- *\r\n- * @since 3.x.x\r\n- *\u002F\r\n-class LP_Template_Checkout extends LP_Abstract_Template {\r\n-\r\n-\t\u002F**\r\n-\t * LP_Template_Checkout constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function review_order() {\r\n-\t\t$cart = LearnPress::instance()->cart;\r\n-\t\tlearn_press_get_template( 'checkout\u002Freview-order', compact( 'cart' ) );\r\n-\t}\r\n-\r\n-\tpublic function payment() {\r\n-\t\t$available_gateways = LP_Gateways::instance()->get_available_payment_gateways();\r\n-\r\n-\t\tlearn_press_get_template( 'checkout\u002Fpayment.php', array( 'available_gateways' => $available_gateways ) );\r\n-\t}\r\n-\r\n-\tpublic function order_comment() {\r\n-\t\tlearn_press_get_template( 'checkout\u002Forder-comment.php' );\r\n-\t}\r\n-\r\n-\tpublic function account_logged_in() {\r\n-\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'checkout\u002Faccount-logged-in' );\r\n-\t}\r\n-\r\n-\tpublic function account_login() {\r\n-\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_login() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'checkout\u002Faccount-login' );\r\n-\t}\r\n-\r\n-\tpublic function account_register() {\r\n-\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_register() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'checkout\u002Faccount-register' );\r\n-\t}\r\n-\r\n-\tpublic function guest_checkout() {\r\n-\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'checkout\u002Fguest-checkout' );\r\n-\t}\r\n-\r\n-\tpublic function terms() {\r\n-\t\tlearn_press_get_template( 'checkout\u002Fterm-conditions' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Template_Checkout();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Template_Checkout\n+ *\n+ * Groups templates related checkout page\n+ *\n+ * @since 3.x.x\n+ *\u002F\n+class LP_Template_Checkout extends LP_Abstract_Template {\n+\n+\t\u002F**\n+\t * LP_Template_Checkout constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function review_order() {\n+\t\t$cart = LearnPress::instance()->cart;\n+\t\tlearn_press_get_template( 'checkout\u002Freview-order', compact( 'cart' ) );\n+\t}\n+\n+\tpublic function payment() {\n+\t\t$available_gateways = LP_Gateways::instance()->get_available_payment_gateways();\n+\n+\t\tlearn_press_get_template( 'checkout\u002Fpayment.php', array( 'available_gateways' => $available_gateways ) );\n+\t}\n+\n+\tpublic function order_comment() {\n+\t\tlearn_press_get_template( 'checkout\u002Forder-comment.php' );\n+\t}\n+\n+\tpublic function account_logged_in() {\n+\t\tif ( ! is_user_logged_in() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'checkout\u002Faccount-logged-in' );\n+\t}\n+\n+\tpublic function account_login() {\n+\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_login() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'checkout\u002Faccount-login' );\n+\t}\n+\n+\tpublic function account_register() {\n+\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_register() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'checkout\u002Faccount-register' );\n+\t}\n+\n+\tpublic function guest_checkout() {\n+\t\tif ( is_user_logged_in() || ! LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'checkout\u002Fguest-checkout' );\n+\t}\n+\n+\tpublic function terms() {\n+\t\tlearn_press_get_template( 'checkout\u002Fterm-conditions' );\n+\t}\n+}\n+\n+return new LP_Template_Checkout();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1056 +1,1056 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Template\r\n- *\r\n- * Groups templates related course and items\r\n- *\r\n- * @since 3.x.x\r\n- *\u002F\r\n-class LP_Template_Course extends LP_Abstract_Template {\r\n-\t\u002F**\r\n-\t * @var LP_Course\r\n-\t *\u002F\r\n-\tpublic $course = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Template_Course constructor.\r\n-\t *\u002F\r\n-\tpublic function __construct() {\r\n-\t\tparent::__construct();\r\n-\r\n-\t\tadd_action( 'the_post', array( $this, 'get_course' ) );\r\n-\t}\r\n-\r\n-\tpublic function get_course() {\r\n-\t\t\u002F\u002F global $post;\r\n-\r\n-\t\t$this->course = learn_press_get_course();\r\n-\t}\r\n-\r\n-\tpublic function course_sidebar_preview() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fsidebar\u002Fpreview' );\r\n-\t}\r\n-\r\n-\tpublic function course_buttons() {\r\n-\t\tglobal $lp_user;\r\n-\t\t$lp_user = learn_press_get_current_user();\r\n-\t\tlearn_press_get_template( 'single-course\u002Fbuttons' );\r\n-\t}\r\n-\r\n-\tpublic function course_graduation() {\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\t$course = learn_press_get_course();\r\n-\r\n-\t\tif ( ! $user || ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user->has_finished_course( $course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$graduation = $user->get_course_grade( $course->get_id() );\r\n-\r\n-\t\tlearn_press_get_template( 'single-course\u002Fgraduation', array( 'graduation' => $graduation ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show button retry course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function button_retry( $course = null ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_retake' );\r\n-\t\treturn;\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\t$course = learn_press_get_course();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user || ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$can_retake_times = $user->can_retry_course( $course->get_id() );\r\n-\r\n-\t\t\u002F\u002F Course has no items\r\n-\t\tif ( empty( $course->count_items() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $can_retake_times ) {\r\n-\t\t\tlearn_press_get_template(\r\n-\t\t\t\t'single-course\u002Fbuttons\u002Fretry',\r\n-\t\t\t\tarray( 'can_retake_times' => $can_retake_times )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function course_media_preview() {\r\n-\t\t$course = learn_press_get_course();\r\n-\r\n-\t\techo wp_kses_post( $course->get_image() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Quiz $item\r\n-\t *\u002F\r\n-\tpublic function quiz_meta_questions( $item ) {\r\n-\t\t$count = $item->count_questions();\r\n-\t\tprintf(\r\n-\t\t\t'\u003Cspan class=\"item-meta count-questions\">%s\u003C\u002Fspan>',\r\n-\t\t\tsprintf( _n( '%1$d question', '%1$d questions', $count, 'learnpress' ), $count )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Quiz|LP_Lesson $item\r\n-\t *\u002F\r\n-\tpublic function item_meta_duration( $item ) {\r\n-\t\t$duration = learn_press_get_post_translated_duration( $item->get_id(), false );\r\n-\r\n-\t\tif ( $duration ) {\r\n-\t\t\techo '\u003Cspan class=\"item-meta duration\">' . $duration . '\u003C\u002Fspan>';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Course_Item $item\r\n-\t *\u002F\r\n-\tpublic function quiz_meta_final( $item ) {\r\n-\t\t$course = $item->get_course();\r\n-\r\n-\t\tif ( ! $course || ! $course->is_final_quiz( $item->get_id() )\r\n-\t\t\t|| $course->get_evaluation_type() != 'evaluate_final_quiz' ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo '\u003Cspan class=\"item-meta final-quiz\">' . esc_html__( 'Final', 'learnpress' ) . '\u003C\u002Fspan>';\r\n-\t}\r\n-\r\n-\tpublic function course_button() {\r\n-\t\techo '[COURSE BUTTON]';\r\n-\t}\r\n-\r\n-\tpublic function course_title() {\r\n-\t\techo '[COURSE TITLE]';\r\n-\t}\r\n-\r\n-\tpublic function courses_top_bar() {\r\n-\t\tlearn_press_get_template( 'courses-top-bar' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display price or free of course, not button, it is label.\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.0.0\r\n-\t * @version 1.0.3\r\n-\t *\u002F\r\n-\tpublic function course_pricing() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\r\n-\t\t$courseModel     = CourseModel::find( $course->get_id(), true );\r\n-\t\t$can_purchase    = $courseModel->can_purchase( UserModel::find( $user->get_id(), true ) );\r\n-\t\t$userCourseModel = UserCourseModel::find( $user->get_id(), $course->get_id(), true );\r\n-\t\tif ( get_current_user_id() ) {\r\n-\t\t\tif ( $userCourseModel ) {\r\n-\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t} elseif ( $can_purchase instanceof WP_Error ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$price_html = $course->get_course_price_html();\r\n-\t\tlearn_press_get_template( 'single-course\u002Fprice', compact( 'course', 'user', 'price_html' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Template purchase course button\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3.1\r\n-\t * @throws Exception\r\n-\t * @version 4.0.2\r\n-\t *\u002F\r\n-\tpublic function course_purchase_button( $course = null ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2', 'SingleCourseTemplate::html_btn_purchase_course' );\r\n-\t\treturn;\r\n-\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t$course               = CourseModel::find( get_the_ID(), true );\r\n-\t\t$user                 = UserModel::find( get_current_user_id(), true );\r\n-\t\techo $singleCourseTemplate->html_btn_purchase_course( $course, $user );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show button enroll course\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3.1\r\n-\t * @throws Exception\r\n-\t * @version 4.0.3\r\n-\t *\u002F\r\n-\tpublic function course_enroll_button( $course = null ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'SingleCourseTemplate::html_btn_enroll_course' );\r\n-\t\treturn;\r\n-\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\t$course               = CourseModel::find( get_the_ID(), true );\r\n-\t\t$user                 = UserModel::find( get_current_user_id(), true );\r\n-\t\techo $singleCourseTemplate->html_btn_enroll_course( $course, $user );\r\n-\t\treturn;\r\n-\r\n-\t\t$can_show = true;\r\n-\t\t$user     = learn_press_get_current_user();\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\t$course = learn_press_get_course();\r\n-\t\t}\r\n-\t\t$error_code = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $course || ! $user ) {\r\n-\t\t\t\tthrow new Exception( 'User or Course is not exists' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F User can not enroll course.\r\n-\t\t\t$can_enroll_course = $user->can_enroll_course( $course->get_id(), false );\r\n-\t\t\tif ( ! $can_enroll_course->check ) {\r\n-\t\t\t\t$error_code = $can_enroll_course->code;\r\n-\t\t\t\tthrow new Exception( $can_enroll_course->message );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $user->has_finished_course( $course->get_id() ) ) {\r\n-\t\t\t\t$error_code = 'course_is_finished';\r\n-\t\t\t\tthrow new Exception( __( 'Course is finished', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tif ( ! in_array( $error_code, [ 'course_is_enrolled', 'course_can_retry' ] ) ) {\r\n-\t\t\t\tif ( $course && $course->is_free() ) {\r\n-\t\t\t\t\tTemplate::print_message( $e->getMessage(), 'warning' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$can_show = false;\r\n-\t\t}\r\n-\r\n-\t\t$can_show = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show', $can_show, $user, $course );\r\n-\t\tif ( ! $can_show ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$args = array(\r\n-\t\t\t'user'   => $user,\r\n-\t\t\t'course' => $course,\r\n-\t\t);\r\n-\r\n-\t\tlearn_press_get_template( 'single-course\u002Fbuttons\u002Fenroll.php', $args );\r\n-\t}\r\n-\r\n-\tpublic function course_extra_requirements( $course_id ) {\r\n-\t\t$course = LP_Course::get_course( $course_id );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$requirements = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-extra-requirements',\r\n-\t\t\t$course->get_extra_info( 'requirements' ),\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $requirements ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'    => 'requirements',\r\n-\t\t\t\t'title'   => esc_html__( 'Requirements', 'learnpress' ),\r\n-\t\t\t\t'content' => $requirements,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function course_extra_key_features( $course_id ) {\r\n-\t\t$course = LP_Course::get_course( $course_id );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$key_features = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-extra-key-features',\r\n-\t\t\t$course->get_extra_info( 'key_features' ),\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $key_features ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'    => 'key-features',\r\n-\t\t\t\t'title'   => esc_html__( 'Key features', 'learnpress' ),\r\n-\t\t\t\t'content' => $key_features,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function course_extra_target_audiences( $course_id ) {\r\n-\t\t$course = LP_Course::get_course( $course_id );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$target_audiences = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-extra-target-audiences',\r\n-\t\t\t$course->get_extra_info( 'target_audiences' ),\r\n-\t\t\t$course_id\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $target_audiences ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\r\n-\t\t\tarray(\r\n-\t\t\t\t'type'    => 'target-audiences',\r\n-\t\t\t\t'title'   => esc_html__( 'Target audiences', 'learnpress' ),\r\n-\t\t\t\t'content' => $target_audiences,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show template \"continue\" button con single course\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @modify 4.1.3.1\r\n-\t * @version 4.0.4\r\n-\t * @since  4.0.0\r\n-\t *\u002F\r\n-\tpublic static function course_continue_button( $args = [] ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_continue' );\r\n-\t\treturn;\r\n-\r\n-\t\t$course_id_param = $args['course-id'] ?? 0;\r\n-\t\t$course_id       = ! empty( $course_id_param ) ? $course_id_param : get_the_ID();\r\n-\t\t$courseModel     = CourseModel::find( $course_id, true );\r\n-\t\t$user_id         = get_current_user_id();\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $user_id || ! $courseModel ) {\r\n-\t\t\t\tthrow new Exception( 'User or Course not exists!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $courseModel->get_id(), true );\r\n-\t\t\tif ( ! $userCourseModel || ! $userCourseModel->has_enrolled() ) {\r\n-\t\t\t\tthrow new Exception( 'User not enrolled course' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $userCourseModel->has_finished() ) {\r\n-\t\t\t\tthrow new Exception( 'User has finished course' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Course has no items\r\n-\t\t\tif ( empty( $courseModel->get_total_items() ) ) {\r\n-\t\t\t\tthrow new Exception( 'Course no any item' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Do not display continue button if course is block duration\r\n-\t\t\tif ( $userCourseModel->timestamp_remaining_duration() === 0 ) {\r\n-\t\t\t\tthrow new Exception( 'Course is blocked' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section = [\r\n-\t\t\t\t'start' => '\u003Cdiv>',\r\n-\t\t\t\t'link'  => UserCourseTemplate::instance()->html_btn_continue( $userCourseModel ),\r\n-\t\t\t\t'end'   => '\u003C\u002Fdiv>',\r\n-\t\t\t];\r\n-\r\n-\t\t\techo Template::combine_components( $section );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function course_finish_button( $course = null ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_finish' );\r\n-\t\treturn;\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\t$course = learn_press_get_course();\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Course has no items\r\n-\t\tif ( empty( $course->count_items() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$check = $user->can_show_finish_course_btn( $course );\r\n-\r\n-\t\tif ( 'success' !== $check['status'] ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fbuttons\u002Ffinish.php',\r\n-\t\t\tarray(\r\n-\t\t\t\t'course' => $course,\r\n-\t\t\t\t'user'   => $user,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Button course external link\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t *\u002F\r\n-\tpublic function course_external_button( $course = null ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'SingleCourseTemplate::html_btn_external' );\r\n-\t\treturn;\r\n-\r\n-\t\tif ( empty( $course ) ) {\r\n-\t\t\t$course = learn_press_get_course();\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$link = $course->get_external_link();\r\n-\t\tif ( empty( $link ) || $user->has_purchased_course( $course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( $user && ! $user->has_enrolled_or_finished( $course->get_id() ) ) {\r\n-\t\t\t\u002F\u002F Remove all another buttons\r\n-\t\t\t\u002F\u002F learn_press_remove_course_buttons();\r\n-\t\t\tlearn_press_get_template( 'single-course\u002Fbuttons\u002Fexternal-link.php' );\r\n-\r\n-\t\t\t\u002F\u002F Add back other buttons for other courses\r\n-\t\t\tadd_action( 'learn-press\u002Fafter-course-buttons', 'learn_press_add_course_buttons' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function popup_header() {\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\t$course = learn_press_get_course();\r\n-\r\n-\t\tif ( ! $user || ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$percentage      = 0;\r\n-\t\t$total_items     = 0;\r\n-\t\t$completed_items = 0;\r\n-\t\t$course_data     = $user->get_course_data( $course->get_id() );\r\n-\r\n-\t\tif ( $course_data && ! empty( $course_data->get_user_id() ) && ! $course->is_no_required_enroll() ) {\r\n-\t\t\t$course_results  = $course_data->get_result();\r\n-\t\t\t$completed_items = $course_results['completed_items'];\r\n-\t\t\t$total_items     = $course_results['count_items'];\r\n-\t\t\t$percentage      = $course_results['count_items'] ? absint( $course_results['completed_items'] \u002F $course_results['count_items'] * 100 ) : 0;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-header', compact( 'user', 'course', 'total_items', 'completed_items', 'percentage' ) );\r\n-\t}\r\n-\r\n-\tpublic function popup_sidebar() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-sidebar' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get single item's course\r\n-\t *\u002F\r\n-\tpublic function popup_content() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-content' );\r\n-\t}\r\n-\r\n-\tpublic function popup_footer() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-footer' );\r\n-\t}\r\n-\r\n-\tpublic function popup_footer_nav() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$next_item = false;\r\n-\t\t$prev_item = false;\r\n-\r\n-\t\t$next_id = $course->get_next_item();\r\n-\t\t$prev_id = $course->get_prev_item();\r\n-\r\n-\t\tif ( $next_id ) {\r\n-\t\t\t$next_item = $course->get_item( $next_id );\r\n-\t\t\tif ( $next_item instanceof LP_Course_Item ) {\r\n-\t\t\t\t$next_item->set_course( $course->get_id() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $prev_id ) {\r\n-\t\t\t$prev_item = $course->get_item( $prev_id );\r\n-\t\t\tif ( $prev_item instanceof LP_Course_Item ) {\r\n-\t\t\t\t$prev_item->set_course( $course->get_id() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $prev_item && ! $next_item ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fcontent-item\u002Fnav.php',\r\n-\t\t\tarray(\r\n-\t\t\t\t'next_item' => $next_item,\r\n-\t\t\t\t'prev_item' => $prev_item,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display course curriculum.\r\n-\t *\r\n-\t * @since 4.1.6\r\n-\t * @since 4.2.5.5 remove code load old template user for course curriculum load page instead of via AJAX.\r\n-\t * @version 1.0.2\r\n-\t * @depreacted 4.2.8.7.1\r\n-\t *\u002F\r\n-\tpublic function course_curriculum() {\r\n-\t\t\u002F**\r\n-\t\t * @var CourseModel $lpCourseModel\r\n-\t\t *\u002F\r\n-\t\tglobal $lpCourseModel;\r\n-\t\t$courseModel = CourseModel::find( get_the_ID(), true );\r\n-\t\tif ( $lpCourseModel instanceof CourseModel ) {\r\n-\t\t\t$courseModel = $lpCourseModel;\r\n-\t\t}\r\n-\r\n-\t\t$course_item = LP_Global::course_item();\r\n-\t\t$userModel   = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\t\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display course curriculum.\r\n-\t *\r\n-\t * @since 4.1.6\r\n-\t * @since 4.2.5.5 remove code load old template user for course curriculum load page instead of via AJAX.\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function course_curriculum_bk() {\r\n-\t\t\u002F**\r\n-\t\t * @var CourseModel $lpCourseModel\r\n-\t\t *\u002F\r\n-\t\tglobal $lpCourseModel;\r\n-\t\t$course_item = LP_Global::course_item();\r\n-\r\n-\t\tif ( $course_item ) { \u002F\u002F Check if current item is viewable\r\n-\t\t\t$course_id = 0;\r\n-\t\t\tif ( $lpCourseModel ) {\r\n-\t\t\t\t$course_id = $lpCourseModel->get_id();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item_id    = (int) $course_item->get_id();\r\n-\t\t\t$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $item_id, $course_id );\r\n-\t\t}\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"learnpress-course-curriculum\" data-section=\"\u003C?php echo esc_attr( $section_id ?? '' ); ?>\"\r\n-\t\t\tdata-id=\"\u003C?php echo esc_attr( $item_id ?? '' ); ?>\">\r\n-\t\t\t\u003C?php lp_skeleton_animation_html( 10 ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get template content item's course\r\n-\t *\u002F\r\n-\tpublic function course_content_item() {\r\n-\t\tlearn_press_get_template( 'single-course\u002Fcontent-item' );\r\n-\t}\r\n-\r\n-\tpublic function courses_loop_item_meta() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta' );\r\n-\t}\r\n-\r\n-\tpublic function courses_loop_item_info_begin() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finfo-begin' );\r\n-\t}\r\n-\r\n-\tpublic function courses_loop_item_info_end() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finfo-end' );\r\n-\t}\r\n-\r\n-\tpublic function courses_loop_item_price() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$price_html = $course->get_course_price_html();\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fprice', compact( 'course', 'price_html' ) );\r\n-\t}\r\n-\r\n-\tpublic function begin_courses_loop() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-begin.php' );\r\n-\t}\r\n-\r\n-\tpublic function end_courses_loop() {\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-end.php' );\r\n-\t}\r\n-\r\n-\tpublic function course_item_content() {\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$item = LP_Global::course_item();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Fix only for WPBakery load style inline\r\n-\t\t * custom CSS is provided, load inline style.\r\n-\t\t *\r\n-\t\t * @editor tuanta\r\n-\t\t * @since 3.2.8.1\r\n-\t\t *\u002F\r\n-\t\t$shortcodes_custom_css = get_post_meta( $item->get_id(), '_wpb_shortcodes_custom_css', true );\r\n-\r\n-\t\tif ( ! empty( $shortcodes_custom_css ) ) {\r\n-\t\t\t$shortcodes_custom_css = strip_tags( $shortcodes_custom_css );\r\n-\t\t\techo '\u003Cstyle data-type=\"vc_shortcodes-custom-css\">';\r\n-\t\t\techo wp_kses_post( $shortcodes_custom_css );\r\n-\t\t\techo '\u003C\u002Fstyle>';\r\n-\t\t}\r\n-\t\t\u002F\u002F End\r\n-\r\n-\t\t$timestamp_remaining = $course->timestamp_remaining_duration();\r\n-\t\tif ( $timestamp_remaining > 0 ) {\r\n-\t\t\techo '\u003Cinput type=\"hidden\" name=\"lp-course-timestamp-remaining\" value=\"' . esc_attr( $timestamp_remaining ) . '\">';\r\n-\t\t}\r\n-\t\t\u002F\u002F End\r\n-\r\n-\t\t$item_template_name = learn_press_locate_template( 'single-course\u002Fcontent-item-' . $item->get_item_type() . '.php' );\r\n-\r\n-\t\tif ( file_exists( $item_template_name ) ) {\r\n-\t\t\tlearn_press_get_template( 'single-course\u002Fcontent-item-' . $item->get_item_type() . '.php' );\r\n-\t\t} else {\r\n-\t\t\techo esc_html( sprintf( 'File %s not exists', $item_template_name ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function item_lesson_title() {\r\n-\t\t$item            = LP_Global::course_item();\r\n-\t\t$format          = $item->get_format();\r\n-\t\t$format_template = learn_press_locate_template( \"content-lesson\u002F{$format}\u002Ftitle.php\" );\r\n-\r\n-\t\tif ( 'standard' !== $format && file_exists( $format_template ) ) {\r\n-\t\t\tinclude $format_template;\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tlearn_press_get_template( 'content-lesson\u002Ftitle.php', array( 'lesson' => $item ) );\r\n-\t}\r\n-\r\n-\tpublic function item_lesson_content() {\r\n-\t\t$item            = LP_Global::course_item();\r\n-\t\t$format          = $item->get_format();\r\n-\t\t$format_template = learn_press_locate_template( \"content-lesson\u002F{$format}\u002Fcontent.php\" );\r\n-\r\n-\t\tif ( 'standard' !== $format && file_exists( $format_template ) ) {\r\n-\t\t\tinclude $format_template;\r\n-\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\t\tdo_action( 'learn-press\u002Flesson-start', $item );\r\n-\r\n-\t\tTemplate::instance()->get_frontend_template( 'content-lesson\u002Fcontent.php', array( 'lesson' => $item ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get template button complete lesson\r\n-\t *\u002F\r\n-\tpublic function item_lesson_complete_button() {\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\t$item = LP_Global::course_item();\r\n-\t\t\tif ( ! $user || ! $user->is_course_in_progress( $course->get_id() ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F The complete button is not displayed when the course is locked --hungkv--\r\n-\t\t\tif ( $user->can_view_content_course( $course->get_id() )->key === LP_BLOCK_COURSE_DURATION_EXPIRE ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_get_template(\r\n-\t\t\t\t'content-lesson\u002Fbutton-complete.php',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'user'   => $user,\r\n-\t\t\t\t\t'course' => $course,\r\n-\t\t\t\t\t'item'   => $item,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function item_lesson_material() {\r\n-\t\ttry {\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', [] );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Template show count items\r\n-\t *\r\n-\t * @since 4.0.0\r\n-\t * @version 1.0.2\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic function count_object() {\r\n-\t\t$course = CourseModel::find( get_the_ID(), true );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$lessons  = $course->count_items( LP_LESSON_CPT );\r\n-\t\t$quizzes  = $course->count_items( LP_QUIZ_CPT );\r\n-\t\t$students = $course->count_students();\r\n-\r\n-\t\t$counts = apply_filters(\r\n-\t\t\t'learnpress\u002Fcourse\u002Fcount\u002Fitems',\r\n-\t\t\tarray(\r\n-\t\t\t\t'lesson'  => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d lesson', '%d lessons', $lessons, 'learnpress' ) . '\u003C\u002Fspan>',\r\n-\t\t\t\t\t$lessons\r\n-\t\t\t\t),\r\n-\t\t\t\t'quiz'    => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d quiz', '%d quizzes', $quizzes, 'learnpress' ) . '\u003C\u002Fspan>',\r\n-\t\t\t\t\t$quizzes\r\n-\t\t\t\t),\r\n-\t\t\t\t'student' => sprintf(\r\n-\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d student', '%d students', $students, 'learnpress' ) . '\u003C\u002Fspan>',\r\n-\t\t\t\t\t$students\r\n-\t\t\t\t),\r\n-\t\t\t),\r\n-\t\t\tarray( $lessons, $quizzes, $students )\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $counts as $object => $count ) {\r\n-\t\t\tlearn_press_get_template(\r\n-\t\t\t\t'single-course\u002Fmeta\u002Fcount',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'count'  => $count,\r\n-\t\t\t\t\t'object' => $object,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function course_extra_boxes() {\r\n-\t\t$course = LP_Course::get_course( get_the_ID() );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$boxes = apply_filters(\r\n-\t\t\t'learn-press\u002Fcourse-extra-boxes-data',\r\n-\t\t\tarray(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => __( 'Requirements', 'learnpress' ),\r\n-\t\t\t\t\t'items' => $course->get_extra_info( 'requirements' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => __( 'Features', 'learnpress' ),\r\n-\t\t\t\t\t'items' => $course->get_extra_info( 'key_features' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'title' => __( 'Target audiences', 'learnpress' ),\r\n-\t\t\t\t\t'items' => $course->get_extra_info( 'target_audiences' ),\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$is_checked = 0;\r\n-\t\tforeach ( $boxes as $box ) {\r\n-\r\n-\t\t\tif ( ! isset( $box['items'] ) || ! $box['items'] ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $is_checked ) {\r\n-\t\t\t\t$box['checked'] = true;\r\n-\t\t\t\t$is_checked     = true;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_get_template( 'single-course\u002Fextra-info', $box );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F*public function metarials() {\r\n-\t\techo wp_kses_post( do_shortcode( '[learn_press_course_materials]' ) );\r\n-\t}*\u002F\r\n-\r\n-\tpublic function faqs() {\r\n-\t\t$course = LP_Course::get_course( get_the_ID() );\r\n-\t\t$faqs   = $course->get_faqs();\r\n-\t\tif ( ! $faqs ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $faqs as $faq ) {\r\n-\t\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Ffaqs', $faq );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function sidebar() {\r\n-\t}\r\n-\r\n-\tpublic function course_featured_review() {\r\n-\t\t$review_content = get_post_meta( $this->course->get_id(), '_lp_featured_review', true );\r\n-\r\n-\t\tif ( ! $review_content ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $user->has_enrolled_or_finished( $this->course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Ffeatured-review',\r\n-\t\t\tarray(\r\n-\t\t\t\t'review_content' => $review_content,\r\n-\t\t\t\t'review_value'   => 5,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function has_sidebar() {\r\n-\t\t$actions = array(\r\n-\t\t\t'learn-press\u002Fbefore-course-summary-sidebar',\r\n-\t\t\t'learn-press\u002Fcourse-summary-sidebar',\r\n-\t\t\t'learn-press\u002Fafter-course-summary-sidebar',\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $actions as $action ) {\r\n-\t\t\tif ( has_action( $action ) ) {\r\n-\t\t\t\treturn true;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F\u002F button readmore in archive courses\r\n-\tpublic function course_readmore() {\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"course-readmore\">\r\n-\t\t\t\u003Ca href=\"\u003C?php the_permalink(); ?>\">\u003C?php echo esc_html__( 'View More', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tpublic function course_item_comments() {\r\n-\t\tglobal $post;\r\n-\t\t$course = learn_press_get_course();\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$item = LP_Global::course_item();\r\n-\t\tif ( ! $item ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user                 = learn_press_get_current_user();\r\n-\t\t$user_can_view_course = $user->can_view_content_course( $course->get_id() );\r\n-\t\t$user_can_view_item   = $user->can_view_item( $item->get_id(), $user_can_view_course );\r\n-\t\tif ( ! $user_can_view_item->flag ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $item->setup_postdata() ) {\r\n-\r\n-\t\t\tif ( comments_open() || get_comments_number() ) {\r\n-\t\t\t\tlearn_press_get_template( 'single-course\u002Fitem-comments' );\r\n-\t\t\t}\r\n-\t\t\t$item->reset_postdata();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\r\n-\tpublic function course_comment_template() {\r\n-\t\tif ( comments_open() || get_comments_number() ) {\r\n-\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t\tcomments_template();\r\n-\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Show info time handle of user\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function user_time() {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $user ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user->has_enrolled_or_finished( $this->course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User_Item_Course\r\n-\t\t *\u002F\r\n-\t\t$user_course = $user->get_course_data( $this->course->get_id() );\r\n-\r\n-\t\tif ( ! $user_course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$status          = $user_course->get_status();\r\n-\t\t$start_time      = $user_course->get_start_time();\r\n-\t\t$end_time        = $user_course->get_end_time();\r\n-\t\t$expiration_time = $user_course->get_expiration_time();\r\n-\t\t$data            = [\r\n-\t\t\t'status'          => $status,\r\n-\t\t\t'start_time'      => $start_time,\r\n-\t\t\t'end_time'        => $end_time,\r\n-\t\t\t'expiration_time' => $expiration_time,\r\n-\t\t];\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'single-course\u002Fsidebar\u002Fuser-time',\r\n-\t\t\tcompact( 'data' )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Animation placholder in user-progress file.\r\n-\t * Content will show in class-rest-lazy-load-controller file.\r\n-\t *\r\n-\t * @return void\r\n-\t * @throws Exception\r\n-\t * @author Nhamdv.\r\n-\t *\u002F\r\n-\tpublic function user_progress() {\r\n-\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$course = learn_press_get_course();\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $user->has_enrolled_or_finished( $course->get_id() ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( LP_LAZY_LOAD_ANIMATION ) {\r\n-\t\t\techo '\u003Cdiv class=\"lp-course-progress-wrapper\">';\r\n-\t\t\tlp_skeleton_animation_html();\r\n-\t\t\techo '\u003C\u002Fdiv>';\r\n-\t\t} else {\r\n-\t\t\t$course_data = $user->get_course_data( $course->get_id() );\r\n-\t\t\tif ( ! $course_data ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_results = $course_data->calculate_course_results();\r\n-\r\n-\t\t\tlearn_press_get_template(\r\n-\t\t\t\t'single-course\u002Fsidebar\u002Fuser-progress',\r\n-\t\t\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function course_extra_boxes_position_control() {\r\n-\t\t$course = LP_Course::get_course( get_the_ID() );\r\n-\t\t$user   = learn_press_get_current_user();\r\n-\t\tif ( ! $user || ! $course ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$enrolled = $user->has_enrolled_course( $course->get_id() );\r\n-\t\tif ( $enrolled ) {\r\n-\t\t\tremove_action(\r\n-\t\t\t\t'learn-press\u002Fcourse-content-summary',\r\n-\t\t\t\tLearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ),\r\n-\t\t\t\t40\r\n-\t\t\t);\r\n-\t\t} else {\r\n-\t\t\tremove_action(\r\n-\t\t\t\t'learn-press\u002Fcourse-content-summary',\r\n-\t\t\t\tLearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ),\r\n-\t\t\t\t70\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Template for case not any courses\r\n-\t *\r\n-\t * @author Nhamdv\r\n-\t * @since 4.1.2\r\n-\t *\u002F\r\n-\tpublic function no_courses_found() {\r\n-\t\tlearn_press_get_template( 'global\u002Fno-courses-found' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Template_Course();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+\n+\u002F**\n+ * Class LP_Course_Template\n+ *\n+ * Groups templates related course and items\n+ *\n+ * @since 3.x.x\n+ *\u002F\n+class LP_Template_Course extends LP_Abstract_Template {\n+\t\u002F**\n+\t * @var LP_Course\n+\t *\u002F\n+\tpublic $course = null;\n+\n+\t\u002F**\n+\t * LP_Template_Course constructor.\n+\t *\u002F\n+\tpublic function __construct() {\n+\t\tparent::__construct();\n+\n+\t\tadd_action( 'the_post', array( $this, 'get_course' ) );\n+\t}\n+\n+\tpublic function get_course() {\n+\t\t\u002F\u002F global $post;\n+\n+\t\t$this->course = learn_press_get_course();\n+\t}\n+\n+\tpublic function course_sidebar_preview() {\n+\t\tlearn_press_get_template( 'single-course\u002Fsidebar\u002Fpreview' );\n+\t}\n+\n+\tpublic function course_buttons() {\n+\t\tglobal $lp_user;\n+\t\t$lp_user = learn_press_get_current_user();\n+\t\tlearn_press_get_template( 'single-course\u002Fbuttons' );\n+\t}\n+\n+\tpublic function course_graduation() {\n+\t\t$user   = learn_press_get_current_user();\n+\t\t$course = learn_press_get_course();\n+\n+\t\tif ( ! $user || ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! $user->has_finished_course( $course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$graduation = $user->get_course_grade( $course->get_id() );\n+\n+\t\tlearn_press_get_template( 'single-course\u002Fgraduation', array( 'graduation' => $graduation ) );\n+\t}\n+\n+\t\u002F**\n+\t * Show button retry course\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function button_retry( $course = null ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_retake' );\n+\t\treturn;\n+\n+\t\t$user = learn_press_get_current_user();\n+\t\tif ( empty( $course ) ) {\n+\t\t\t$course = learn_press_get_course();\n+\t\t}\n+\n+\t\tif ( ! $user || ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$can_retake_times = $user->can_retry_course( $course->get_id() );\n+\n+\t\t\u002F\u002F Course has no items\n+\t\tif ( empty( $course->count_items() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $can_retake_times ) {\n+\t\t\tlearn_press_get_template(\n+\t\t\t\t'single-course\u002Fbuttons\u002Fretry',\n+\t\t\t\tarray( 'can_retake_times' => $can_retake_times )\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function course_media_preview() {\n+\t\t$course = learn_press_get_course();\n+\n+\t\techo wp_kses_post( $course->get_image() );\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Quiz $item\n+\t *\u002F\n+\tpublic function quiz_meta_questions( $item ) {\n+\t\t$count = $item->count_questions();\n+\t\tprintf(\n+\t\t\t'\u003Cspan class=\"item-meta count-questions\">%s\u003C\u002Fspan>',\n+\t\t\tsprintf( _n( '%1$d question', '%1$d questions', $count, 'learnpress' ), $count )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Quiz|LP_Lesson $item\n+\t *\u002F\n+\tpublic function item_meta_duration( $item ) {\n+\t\t$duration = learn_press_get_post_translated_duration( $item->get_id(), false );\n+\n+\t\tif ( $duration ) {\n+\t\t\techo '\u003Cspan class=\"item-meta duration\">' . $duration . '\u003C\u002Fspan>';\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @var LP_Course_Item $item\n+\t *\u002F\n+\tpublic function quiz_meta_final( $item ) {\n+\t\t$course = $item->get_course();\n+\n+\t\tif ( ! $course || ! $course->is_final_quiz( $item->get_id() )\n+\t\t\t|| $course->get_evaluation_type() != 'evaluate_final_quiz' ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo '\u003Cspan class=\"item-meta final-quiz\">' . esc_html__( 'Final', 'learnpress' ) . '\u003C\u002Fspan>';\n+\t}\n+\n+\tpublic function course_button() {\n+\t\techo '[COURSE BUTTON]';\n+\t}\n+\n+\tpublic function course_title() {\n+\t\techo '[COURSE TITLE]';\n+\t}\n+\n+\tpublic function courses_top_bar() {\n+\t\tlearn_press_get_template( 'courses-top-bar' );\n+\t}\n+\n+\t\u002F**\n+\t * Display price or free of course, not button, it is label.\n+\t *\n+\t * @return void\n+\t * @since 4.0.0\n+\t * @version 1.0.3\n+\t *\u002F\n+\tpublic function course_pricing() {\n+\t\t$course = learn_press_get_course();\n+\t\t$user   = learn_press_get_current_user();\n+\n+\t\t$courseModel     = CourseModel::find( $course->get_id(), true );\n+\t\t$can_purchase    = $courseModel->can_purchase( UserModel::find( $user->get_id(), true ) );\n+\t\t$userCourseModel = UserCourseModel::find( $user->get_id(), $course->get_id(), true );\n+\t\tif ( get_current_user_id() ) {\n+\t\t\tif ( $userCourseModel ) {\n+\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t} elseif ( $can_purchase instanceof WP_Error ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$price_html = $course->get_course_price_html();\n+\t\tlearn_press_get_template( 'single-course\u002Fprice', compact( 'course', 'user', 'price_html' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Template purchase course button\n+\t *\n+\t * @editor tungnx\n+\t * @modify 4.1.3.1\n+\t * @throws Exception\n+\t * @version 4.0.2\n+\t *\u002F\n+\tpublic function course_purchase_button( $course = null ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2', 'SingleCourseTemplate::html_btn_purchase_course' );\n+\t\treturn;\n+\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t$course               = CourseModel::find( get_the_ID(), true );\n+\t\t$user                 = UserModel::find( get_current_user_id(), true );\n+\t\techo $singleCourseTemplate->html_btn_purchase_course( $course, $user );\n+\t}\n+\n+\t\u002F**\n+\t * Show button enroll course\n+\t *\n+\t * @editor tungnx\n+\t * @modify 4.1.3.1\n+\t * @throws Exception\n+\t * @version 4.0.3\n+\t *\u002F\n+\tpublic function course_enroll_button( $course = null ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'SingleCourseTemplate::html_btn_enroll_course' );\n+\t\treturn;\n+\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\t$course               = CourseModel::find( get_the_ID(), true );\n+\t\t$user                 = UserModel::find( get_current_user_id(), true );\n+\t\techo $singleCourseTemplate->html_btn_enroll_course( $course, $user );\n+\t\treturn;\n+\n+\t\t$can_show = true;\n+\t\t$user     = learn_press_get_current_user();\n+\t\tif ( empty( $course ) ) {\n+\t\t\t$course = learn_press_get_course();\n+\t\t}\n+\t\t$error_code = '';\n+\n+\t\ttry {\n+\t\t\tif ( ! $course || ! $user ) {\n+\t\t\t\tthrow new Exception( 'User or Course is not exists' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F User can not enroll course.\n+\t\t\t$can_enroll_course = $user->can_enroll_course( $course->get_id(), false );\n+\t\t\tif ( ! $can_enroll_course->check ) {\n+\t\t\t\t$error_code = $can_enroll_course->code;\n+\t\t\t\tthrow new Exception( $can_enroll_course->message );\n+\t\t\t}\n+\n+\t\t\tif ( $user->has_finished_course( $course->get_id() ) ) {\n+\t\t\t\t$error_code = 'course_is_finished';\n+\t\t\t\tthrow new Exception( __( 'Course is finished', 'learnpress' ) );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tif ( ! in_array( $error_code, [ 'course_is_enrolled', 'course_can_retry' ] ) ) {\n+\t\t\t\tif ( $course && $course->is_free() ) {\n+\t\t\t\t\tTemplate::print_message( $e->getMessage(), 'warning' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$can_show = false;\n+\t\t}\n+\n+\t\t$can_show = apply_filters( 'learnpress\u002Fcourse\u002Ftemplate\u002Fbutton-enroll\u002Fcan-show', $can_show, $user, $course );\n+\t\tif ( ! $can_show ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$args = array(\n+\t\t\t'user'   => $user,\n+\t\t\t'course' => $course,\n+\t\t);\n+\n+\t\tlearn_press_get_template( 'single-course\u002Fbuttons\u002Fenroll.php', $args );\n+\t}\n+\n+\tpublic function course_extra_requirements( $course_id ) {\n+\t\t$course = LP_Course::get_course( $course_id );\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$requirements = apply_filters(\n+\t\t\t'learn-press\u002Fcourse-extra-requirements',\n+\t\t\t$course->get_extra_info( 'requirements' ),\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\tif ( ! $requirements ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\n+\t\t\tarray(\n+\t\t\t\t'type'    => 'requirements',\n+\t\t\t\t'title'   => esc_html__( 'Requirements', 'learnpress' ),\n+\t\t\t\t'content' => $requirements,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function course_extra_key_features( $course_id ) {\n+\t\t$course = LP_Course::get_course( $course_id );\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$key_features = apply_filters(\n+\t\t\t'learn-press\u002Fcourse-extra-key-features',\n+\t\t\t$course->get_extra_info( 'key_features' ),\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\tif ( ! $key_features ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\n+\t\t\tarray(\n+\t\t\t\t'type'    => 'key-features',\n+\t\t\t\t'title'   => esc_html__( 'Key features', 'learnpress' ),\n+\t\t\t\t'content' => $key_features,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function course_extra_target_audiences( $course_id ) {\n+\t\t$course = LP_Course::get_course( $course_id );\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$target_audiences = apply_filters(\n+\t\t\t'learn-press\u002Fcourse-extra-target-audiences',\n+\t\t\t$course->get_extra_info( 'target_audiences' ),\n+\t\t\t$course_id\n+\t\t);\n+\n+\t\tif ( ! $target_audiences ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fsidebar\u002Fcourse-extra',\n+\t\t\tarray(\n+\t\t\t\t'type'    => 'target-audiences',\n+\t\t\t\t'title'   => esc_html__( 'Target audiences', 'learnpress' ),\n+\t\t\t\t'content' => $target_audiences,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Show template \"continue\" button con single course\n+\t *\n+\t * @throws Exception\n+\t * @modify 4.1.3.1\n+\t * @version 4.0.4\n+\t * @since  4.0.0\n+\t *\u002F\n+\tpublic static function course_continue_button( $args = [] ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_continue' );\n+\t\treturn;\n+\n+\t\t$course_id_param = $args['course-id'] ?? 0;\n+\t\t$course_id       = ! empty( $course_id_param ) ? $course_id_param : get_the_ID();\n+\t\t$courseModel     = CourseModel::find( $course_id, true );\n+\t\t$user_id         = get_current_user_id();\n+\n+\t\ttry {\n+\t\t\tif ( ! $user_id || ! $courseModel ) {\n+\t\t\t\tthrow new Exception( 'User or Course not exists!' );\n+\t\t\t}\n+\n+\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $courseModel->get_id(), true );\n+\t\t\tif ( ! $userCourseModel || ! $userCourseModel->has_enrolled() ) {\n+\t\t\t\tthrow new Exception( 'User not enrolled course' );\n+\t\t\t}\n+\n+\t\t\tif ( $userCourseModel->has_finished() ) {\n+\t\t\t\tthrow new Exception( 'User has finished course' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Course has no items\n+\t\t\tif ( empty( $courseModel->get_total_items() ) ) {\n+\t\t\t\tthrow new Exception( 'Course no any item' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Do not display continue button if course is block duration\n+\t\t\tif ( $userCourseModel->timestamp_remaining_duration() === 0 ) {\n+\t\t\t\tthrow new Exception( 'Course is blocked' );\n+\t\t\t}\n+\n+\t\t\t$section = [\n+\t\t\t\t'start' => '\u003Cdiv>',\n+\t\t\t\t'link'  => UserCourseTemplate::instance()->html_btn_continue( $userCourseModel ),\n+\t\t\t\t'end'   => '\u003C\u002Fdiv>',\n+\t\t\t];\n+\n+\t\t\techo Template::combine_components( $section );\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\t}\n+\n+\tpublic function course_finish_button( $course = null ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'UserCourseTemplate::html_btn_finish' );\n+\t\treturn;\n+\n+\t\t$user = learn_press_get_current_user();\n+\t\tif ( empty( $course ) ) {\n+\t\t\t$course = learn_press_get_course();\n+\t\t}\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002F Course has no items\n+\t\tif ( empty( $course->count_items() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$check = $user->can_show_finish_course_btn( $course );\n+\n+\t\tif ( 'success' !== $check['status'] ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fbuttons\u002Ffinish.php',\n+\t\t\tarray(\n+\t\t\t\t'course' => $course,\n+\t\t\t\t'user'   => $user,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Button course external link\n+\t *\n+\t * @throws Exception\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t *\u002F\n+\tpublic function course_external_button( $course = null ) {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.4', 'SingleCourseTemplate::html_btn_external' );\n+\t\treturn;\n+\n+\t\tif ( empty( $course ) ) {\n+\t\t\t$course = learn_press_get_course();\n+\t\t}\n+\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$link = $course->get_external_link();\n+\t\tif ( empty( $link ) || $user->has_purchased_course( $course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( $user && ! $user->has_enrolled_or_finished( $course->get_id() ) ) {\n+\t\t\t\u002F\u002F Remove all another buttons\n+\t\t\t\u002F\u002F learn_press_remove_course_buttons();\n+\t\t\tlearn_press_get_template( 'single-course\u002Fbuttons\u002Fexternal-link.php' );\n+\n+\t\t\t\u002F\u002F Add back other buttons for other courses\n+\t\t\tadd_action( 'learn-press\u002Fafter-course-buttons', 'learn_press_add_course_buttons' );\n+\t\t}\n+\t}\n+\n+\tpublic function popup_header() {\n+\t\t$user   = learn_press_get_current_user();\n+\t\t$course = learn_press_get_course();\n+\n+\t\tif ( ! $user || ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$percentage      = 0;\n+\t\t$total_items     = 0;\n+\t\t$completed_items = 0;\n+\t\t$course_data     = $user->get_course_data( $course->get_id() );\n+\n+\t\tif ( $course_data && ! empty( $course_data->get_user_id() ) && ! $course->is_no_required_enroll() ) {\n+\t\t\t$course_results  = $course_data->get_result();\n+\t\t\t$completed_items = $course_results['completed_items'];\n+\t\t\t$total_items     = $course_results['count_items'];\n+\t\t\t$percentage      = $course_results['count_items'] ? absint( $course_results['completed_items'] \u002F $course_results['count_items'] * 100 ) : 0;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-header', compact( 'user', 'course', 'total_items', 'completed_items', 'percentage' ) );\n+\t}\n+\n+\tpublic function popup_sidebar() {\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-sidebar' );\n+\t}\n+\n+\t\u002F**\n+\t * Get single item's course\n+\t *\u002F\n+\tpublic function popup_content() {\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-content' );\n+\t}\n+\n+\tpublic function popup_footer() {\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-item\u002Fpopup-footer' );\n+\t}\n+\n+\tpublic function popup_footer_nav() {\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$next_item = false;\n+\t\t$prev_item = false;\n+\n+\t\t$next_id = $course->get_next_item();\n+\t\t$prev_id = $course->get_prev_item();\n+\n+\t\tif ( $next_id ) {\n+\t\t\t$next_item = $course->get_item( $next_id );\n+\t\t\tif ( $next_item instanceof LP_Course_Item ) {\n+\t\t\t\t$next_item->set_course( $course->get_id() );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $prev_id ) {\n+\t\t\t$prev_item = $course->get_item( $prev_id );\n+\t\t\tif ( $prev_item instanceof LP_Course_Item ) {\n+\t\t\t\t$prev_item->set_course( $course->get_id() );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! $prev_item && ! $next_item ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fcontent-item\u002Fnav.php',\n+\t\t\tarray(\n+\t\t\t\t'next_item' => $next_item,\n+\t\t\t\t'prev_item' => $prev_item,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Display course curriculum.\n+\t *\n+\t * @since 4.1.6\n+\t * @since 4.2.5.5 remove code load old template user for course curriculum load page instead of via AJAX.\n+\t * @version 1.0.2\n+\t * @depreacted 4.2.8.7.1\n+\t *\u002F\n+\tpublic function course_curriculum() {\n+\t\t\u002F**\n+\t\t * @var CourseModel $lpCourseModel\n+\t\t *\u002F\n+\t\tglobal $lpCourseModel;\n+\t\t$courseModel = CourseModel::find( get_the_ID(), true );\n+\t\tif ( $lpCourseModel instanceof CourseModel ) {\n+\t\t\t$courseModel = $lpCourseModel;\n+\t\t}\n+\n+\t\t$course_item = LP_Global::course_item();\n+\t\t$userModel   = UserModel::find( get_current_user_id(), true );\n+\n+\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\t\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\n+\t}\n+\n+\t\u002F**\n+\t * Display course curriculum.\n+\t *\n+\t * @since 4.1.6\n+\t * @since 4.2.5.5 remove code load old template user for course curriculum load page instead of via AJAX.\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function course_curriculum_bk() {\n+\t\t\u002F**\n+\t\t * @var CourseModel $lpCourseModel\n+\t\t *\u002F\n+\t\tglobal $lpCourseModel;\n+\t\t$course_item = LP_Global::course_item();\n+\n+\t\tif ( $course_item ) { \u002F\u002F Check if current item is viewable\n+\t\t\t$course_id = 0;\n+\t\t\tif ( $lpCourseModel ) {\n+\t\t\t\t$course_id = $lpCourseModel->get_id();\n+\t\t\t}\n+\n+\t\t\t$item_id    = (int) $course_item->get_id();\n+\t\t\t$section_id = LP_Section_DB::getInstance()->get_section_id_by_item_id( $item_id, $course_id );\n+\t\t}\n+\t\t?>\n+\t\t\u003Cdiv class=\"learnpress-course-curriculum\" data-section=\"\u003C?php echo esc_attr( $section_id ?? '' ); ?>\"\n+\t\t\tdata-id=\"\u003C?php echo esc_attr( $item_id ?? '' ); ?>\">\n+\t\t\t\u003C?php lp_skeleton_animation_html( 10 ); ?>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\n+\t\u002F**\n+\t * Get template content item's course\n+\t *\u002F\n+\tpublic function course_content_item() {\n+\t\tlearn_press_get_template( 'single-course\u002Fcontent-item' );\n+\t}\n+\n+\tpublic function courses_loop_item_meta() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fmeta' );\n+\t}\n+\n+\tpublic function courses_loop_item_info_begin() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finfo-begin' );\n+\t}\n+\n+\tpublic function courses_loop_item_info_end() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Finfo-end' );\n+\t}\n+\n+\tpublic function courses_loop_item_price() {\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$price_html = $course->get_course_price_html();\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fprice', compact( 'course', 'price_html' ) );\n+\t}\n+\n+\tpublic function begin_courses_loop() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-begin.php' );\n+\t}\n+\n+\tpublic function end_courses_loop() {\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Floop-end.php' );\n+\t}\n+\n+\tpublic function course_item_content() {\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$item = LP_Global::course_item();\n+\n+\t\t\u002F**\n+\t\t * Fix only for WPBakery load style inline\n+\t\t * custom CSS is provided, load inline style.\n+\t\t *\n+\t\t * @editor tuanta\n+\t\t * @since 3.2.8.1\n+\t\t *\u002F\n+\t\t$shortcodes_custom_css = get_post_meta( $item->get_id(), '_wpb_shortcodes_custom_css', true );\n+\n+\t\tif ( ! empty( $shortcodes_custom_css ) ) {\n+\t\t\t$shortcodes_custom_css = strip_tags( $shortcodes_custom_css );\n+\t\t\techo '\u003Cstyle data-type=\"vc_shortcodes-custom-css\">';\n+\t\t\techo wp_kses_post( $shortcodes_custom_css );\n+\t\t\techo '\u003C\u002Fstyle>';\n+\t\t}\n+\t\t\u002F\u002F End\n+\n+\t\t$timestamp_remaining = $course->timestamp_remaining_duration();\n+\t\tif ( $timestamp_remaining > 0 ) {\n+\t\t\techo '\u003Cinput type=\"hidden\" name=\"lp-course-timestamp-remaining\" value=\"' . esc_attr( $timestamp_remaining ) . '\">';\n+\t\t}\n+\t\t\u002F\u002F End\n+\n+\t\t$item_template_name = learn_press_locate_template( 'single-course\u002Fcontent-item-' . $item->get_item_type() . '.php' );\n+\n+\t\tif ( file_exists( $item_template_name ) ) {\n+\t\t\tlearn_press_get_template( 'single-course\u002Fcontent-item-' . $item->get_item_type() . '.php' );\n+\t\t} else {\n+\t\t\techo esc_html( sprintf( 'File %s not exists', $item_template_name ) );\n+\t\t}\n+\t}\n+\n+\tpublic function item_lesson_title() {\n+\t\t$item            = LP_Global::course_item();\n+\t\t$format          = $item->get_format();\n+\t\t$format_template = learn_press_locate_template( \"content-lesson\u002F{$format}\u002Ftitle.php\" );\n+\n+\t\tif ( 'standard' !== $format && file_exists( $format_template ) ) {\n+\t\t\tinclude $format_template;\n+\n+\t\t\treturn;\n+\t\t}\n+\t\tlearn_press_get_template( 'content-lesson\u002Ftitle.php', array( 'lesson' => $item ) );\n+\t}\n+\n+\tpublic function item_lesson_content() {\n+\t\t$item            = LP_Global::course_item();\n+\t\t$format          = $item->get_format();\n+\t\t$format_template = learn_press_locate_template( \"content-lesson\u002F{$format}\u002Fcontent.php\" );\n+\n+\t\tif ( 'standard' !== $format && file_exists( $format_template ) ) {\n+\t\t\tinclude $format_template;\n+\n+\t\t\treturn;\n+\t\t}\n+\t\tdo_action( 'learn-press\u002Flesson-start', $item );\n+\n+\t\tTemplate::instance()->get_frontend_template( 'content-lesson\u002Fcontent.php', array( 'lesson' => $item ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get template button complete lesson\n+\t *\u002F\n+\tpublic function item_lesson_complete_button() {\n+\t\t$user   = learn_press_get_current_user();\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\t$item = LP_Global::course_item();\n+\t\t\tif ( ! $user || ! $user->is_course_in_progress( $course->get_id() ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F The complete button is not displayed when the course is locked --hungkv--\n+\t\t\tif ( $user->can_view_content_course( $course->get_id() )->key === LP_BLOCK_COURSE_DURATION_EXPIRE ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tlearn_press_get_template(\n+\t\t\t\t'content-lesson\u002Fbutton-complete.php',\n+\t\t\t\tarray(\n+\t\t\t\t\t'user'   => $user,\n+\t\t\t\t\t'course' => $course,\n+\t\t\t\t\t'item'   => $item,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\tpublic function item_lesson_material() {\n+\t\ttry {\n+\t\t\tdo_action( 'learn-press\u002Fcourse-material\u002Flayout', [] );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Template show count items\n+\t *\n+\t * @since 4.0.0\n+\t * @version 1.0.2\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic function count_object() {\n+\t\t$course = CourseModel::find( get_the_ID(), true );\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$lessons  = $course->count_items( LP_LESSON_CPT );\n+\t\t$quizzes  = $course->count_items( LP_QUIZ_CPT );\n+\t\t$students = $course->count_students();\n+\n+\t\t$counts = apply_filters(\n+\t\t\t'learnpress\u002Fcourse\u002Fcount\u002Fitems',\n+\t\t\tarray(\n+\t\t\t\t'lesson'  => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d lesson', '%d lessons', $lessons, 'learnpress' ) . '\u003C\u002Fspan>',\n+\t\t\t\t\t$lessons\n+\t\t\t\t),\n+\t\t\t\t'quiz'    => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d quiz', '%d quizzes', $quizzes, 'learnpress' ) . '\u003C\u002Fspan>',\n+\t\t\t\t\t$quizzes\n+\t\t\t\t),\n+\t\t\t\t'student' => sprintf(\n+\t\t\t\t\t'\u003Cspan class=\"meta-number\">' . _n( '%d student', '%d students', $students, 'learnpress' ) . '\u003C\u002Fspan>',\n+\t\t\t\t\t$students\n+\t\t\t\t),\n+\t\t\t),\n+\t\t\tarray( $lessons, $quizzes, $students )\n+\t\t);\n+\n+\t\tforeach ( $counts as $object => $count ) {\n+\t\t\tlearn_press_get_template(\n+\t\t\t\t'single-course\u002Fmeta\u002Fcount',\n+\t\t\t\tarray(\n+\t\t\t\t\t'count'  => $count,\n+\t\t\t\t\t'object' => $object,\n+\t\t\t\t)\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function course_extra_boxes() {\n+\t\t$course = LP_Course::get_course( get_the_ID() );\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$boxes = apply_filters(\n+\t\t\t'learn-press\u002Fcourse-extra-boxes-data',\n+\t\t\tarray(\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => __( 'Requirements', 'learnpress' ),\n+\t\t\t\t\t'items' => $course->get_extra_info( 'requirements' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => __( 'Features', 'learnpress' ),\n+\t\t\t\t\t'items' => $course->get_extra_info( 'key_features' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'title' => __( 'Target audiences', 'learnpress' ),\n+\t\t\t\t\t'items' => $course->get_extra_info( 'target_audiences' ),\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$is_checked = 0;\n+\t\tforeach ( $boxes as $box ) {\n+\n+\t\t\tif ( ! isset( $box['items'] ) || ! $box['items'] ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( ! $is_checked ) {\n+\t\t\t\t$box['checked'] = true;\n+\t\t\t\t$is_checked     = true;\n+\t\t\t}\n+\n+\t\t\tlearn_press_get_template( 'single-course\u002Fextra-info', $box );\n+\t\t}\n+\t}\n+\n+\t\u002F*public function metarials() {\n+\t\techo wp_kses_post( do_shortcode( '[learn_press_course_materials]' ) );\n+\t}*\u002F\n+\n+\tpublic function faqs() {\n+\t\t$course = LP_Course::get_course( get_the_ID() );\n+\t\t$faqs   = $course->get_faqs();\n+\t\tif ( ! $faqs ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $faqs as $faq ) {\n+\t\t\tlearn_press_get_template( 'single-course\u002Ftabs\u002Ffaqs', $faq );\n+\t\t}\n+\t}\n+\n+\tpublic function sidebar() {\n+\t}\n+\n+\tpublic function course_featured_review() {\n+\t\t$review_content = get_post_meta( $this->course->get_id(), '_lp_featured_review', true );\n+\n+\t\tif ( ! $review_content ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $user->has_enrolled_or_finished( $this->course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Ffeatured-review',\n+\t\t\tarray(\n+\t\t\t\t'review_content' => $review_content,\n+\t\t\t\t'review_value'   => 5,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic function has_sidebar() {\n+\t\t$actions = array(\n+\t\t\t'learn-press\u002Fbefore-course-summary-sidebar',\n+\t\t\t'learn-press\u002Fcourse-summary-sidebar',\n+\t\t\t'learn-press\u002Fafter-course-summary-sidebar',\n+\t\t);\n+\n+\t\tforeach ( $actions as $action ) {\n+\t\t\tif ( has_action( $action ) ) {\n+\t\t\t\treturn true;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F\u002F button readmore in archive courses\n+\tpublic function course_readmore() {\n+\t\t?>\n+\t\t\u003Cdiv class=\"course-readmore\">\n+\t\t\t\u003Ca href=\"\u003C?php the_permalink(); ?>\">\u003C?php echo esc_html__( 'View More', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php\n+\t}\n+\n+\tpublic function course_item_comments() {\n+\t\tglobal $post;\n+\t\t$course = learn_press_get_course();\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$item = LP_Global::course_item();\n+\t\tif ( ! $item ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user                 = learn_press_get_current_user();\n+\t\t$user_can_view_course = $user->can_view_content_course( $course->get_id() );\n+\t\t$user_can_view_item   = $user->can_view_item( $item->get_id(), $user_can_view_course );\n+\t\tif ( ! $user_can_view_item->flag ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $item->setup_postdata() ) {\n+\n+\t\t\tif ( comments_open() || get_comments_number() ) {\n+\t\t\t\tlearn_press_get_template( 'single-course\u002Fitem-comments' );\n+\t\t\t}\n+\t\t\t$item->reset_postdata();\n+\t\t}\n+\t}\n+\n+\n+\tpublic function course_comment_template() {\n+\t\tif ( comments_open() || get_comments_number() ) {\n+\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t\tcomments_template();\n+\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Show info time handle of user\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function user_time() {\n+\t\t$user = learn_press_get_current_user();\n+\n+\t\tif ( ! $user ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! $user->has_enrolled_or_finished( $this->course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @var LP_User_Item_Course\n+\t\t *\u002F\n+\t\t$user_course = $user->get_course_data( $this->course->get_id() );\n+\n+\t\tif ( ! $user_course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$status          = $user_course->get_status();\n+\t\t$start_time      = $user_course->get_start_time();\n+\t\t$end_time        = $user_course->get_end_time();\n+\t\t$expiration_time = $user_course->get_expiration_time();\n+\t\t$data            = [\n+\t\t\t'status'          => $status,\n+\t\t\t'start_time'      => $start_time,\n+\t\t\t'end_time'        => $end_time,\n+\t\t\t'expiration_time' => $expiration_time,\n+\t\t];\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'single-course\u002Fsidebar\u002Fuser-time',\n+\t\t\tcompact( 'data' )\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Animation placholder in user-progress file.\n+\t * Content will show in class-rest-lazy-load-controller file.\n+\t *\n+\t * @return void\n+\t * @throws Exception\n+\t * @author Nhamdv.\n+\t *\u002F\n+\tpublic function user_progress() {\n+\t\tif ( ! is_user_logged_in() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$course = learn_press_get_course();\n+\t\t$user   = learn_press_get_current_user();\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! $user->has_enrolled_or_finished( $course->get_id() ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( LP_LAZY_LOAD_ANIMATION ) {\n+\t\t\techo '\u003Cdiv class=\"lp-course-progress-wrapper\">';\n+\t\t\tlp_skeleton_animation_html();\n+\t\t\techo '\u003C\u002Fdiv>';\n+\t\t} else {\n+\t\t\t$course_data = $user->get_course_data( $course->get_id() );\n+\t\t\tif ( ! $course_data ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t$course_results = $course_data->calculate_course_results();\n+\n+\t\t\tlearn_press_get_template(\n+\t\t\t\t'single-course\u002Fsidebar\u002Fuser-progress',\n+\t\t\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\tpublic function course_extra_boxes_position_control() {\n+\t\t$course = LP_Course::get_course( get_the_ID() );\n+\t\t$user   = learn_press_get_current_user();\n+\t\tif ( ! $user || ! $course ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$enrolled = $user->has_enrolled_course( $course->get_id() );\n+\t\tif ( $enrolled ) {\n+\t\t\tremove_action(\n+\t\t\t\t'learn-press\u002Fcourse-content-summary',\n+\t\t\t\tLearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ),\n+\t\t\t\t40\n+\t\t\t);\n+\t\t} else {\n+\t\t\tremove_action(\n+\t\t\t\t'learn-press\u002Fcourse-content-summary',\n+\t\t\t\tLearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ),\n+\t\t\t\t70\n+\t\t\t);\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Template for case not any courses\n+\t *\n+\t * @author Nhamdv\n+\t * @since 4.1.2\n+\t *\u002F\n+\tpublic function no_courses_found() {\n+\t\tlearn_press_get_template( 'global\u002Fno-courses-found' );\n+\t}\n+}\n+\n+return new LP_Template_Course();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-general.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-general.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-general.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-general.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,59 +1,59 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Class LP_Course_Template\r\n- *\r\n- * Groups templates related course and items\r\n- *\r\n- * @since 3.x.x\r\n- *\u002F\r\n-class LP_Template_General extends LP_Abstract_Template {\r\n-\r\n-\t\u002F*public function filter_block_content_template( $located, $template_name, $args, $template_path, $default_path ) {\r\n-\t\tif ( $template_name == 'global\u002Fblock-content.php' ) {\r\n-\t\t\t$can_view_item = false;\r\n-\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\t$can_view_item = 'not-logged-in';\r\n-\t\t\t} elseif ( ! learn_press_current_user_enrolled_course() ) {\r\n-\t\t\t\t$can_view_item = 'not-enrolled';\r\n-\t\t\t}\r\n-\t\t\tlearn_press_get_template( 'single-course\u002Fcontent-protected.php', array( 'can_view_item' => $can_view_item ) );\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $located;\r\n-\r\n-\t}*\u002F\r\n-\r\n-\tpublic function term_conditions_template() {\r\n-\t\t$page_id = learn_press_get_page_id( 'term_conditions' );\r\n-\t\tif ( $page_id ) {\r\n-\t\t\t$page_link = get_page_link( $page_id );\r\n-\t\t\tlearn_press_get_template( 'checkout\u002Fterm-conditions.php', array( 'page_link' => $page_link ) );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function breadcrumb( $args = array() ) {\r\n-\t\techo Template::html_breadcrumb();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get header for course page\r\n-\t *\u002F\r\n-\tpublic function template_header() {\r\n-\t\tget_header( 'course' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get header for course page\r\n-\t *\u002F\r\n-\tpublic function template_footer() {\r\n-\t\tget_footer( 'course' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Template_General();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Class LP_Course_Template\n+ *\n+ * Groups templates related course and items\n+ *\n+ * @since 3.x.x\n+ *\u002F\n+class LP_Template_General extends LP_Abstract_Template {\n+\n+\t\u002F*public function filter_block_content_template( $located, $template_name, $args, $template_path, $default_path ) {\n+\t\tif ( $template_name == 'global\u002Fblock-content.php' ) {\n+\t\t\t$can_view_item = false;\n+\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\t$can_view_item = 'not-logged-in';\n+\t\t\t} elseif ( ! learn_press_current_user_enrolled_course() ) {\n+\t\t\t\t$can_view_item = 'not-enrolled';\n+\t\t\t}\n+\t\t\tlearn_press_get_template( 'single-course\u002Fcontent-protected.php', array( 'can_view_item' => $can_view_item ) );\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $located;\n+\n+\t}*\u002F\n+\n+\tpublic function term_conditions_template() {\n+\t\t$page_id = learn_press_get_page_id( 'term_conditions' );\n+\t\tif ( $page_id ) {\n+\t\t\t$page_link = get_page_link( $page_id );\n+\t\t\tlearn_press_get_template( 'checkout\u002Fterm-conditions.php', array( 'page_link' => $page_link ) );\n+\t\t}\n+\t}\n+\n+\tpublic function breadcrumb( $args = array() ) {\n+\t\techo Template::html_breadcrumb();\n+\t}\n+\n+\t\u002F**\n+\t * Get header for course page\n+\t *\u002F\n+\tpublic function template_header() {\n+\t\tget_header( 'course' );\n+\t}\n+\n+\t\u002F**\n+\t * Get header for course page\n+\t *\u002F\n+\tpublic function template_footer() {\n+\t\tget_footer( 'course' );\n+\t}\n+}\n+\n+return new LP_Template_General();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-profile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-profile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Ftemplates\u002Fclass-lp-template-profile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Ftemplates\u002Fclass-lp-template-profile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,327 +1,327 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\r\n-use LearnPress\\TemplateHooks\\UserTemplate;\r\n-\r\n-\u002F**\r\n- * Class LP_Profile_Template\r\n- *\r\n- * Group templates related user profile.\r\n- *\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Template_Profile extends LP_Abstract_Template {\r\n-\tpublic function header( $user ) {\r\n-\t\tlearn_press_get_template( 'profile\u002Fheader.php', array( 'user' => $user ) );\r\n-\t}\r\n-\r\n-\tpublic function sidebar() {\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\tif ( $profile->get_user()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $profile->get_user_current()->is_guest()\r\n-\t\t\t&& 'yes' !== LP_Profile::get_option_publish_profile() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user      = $profile->get_user();\r\n-\t\t$userModel = UserModel::find( $user->get_id(), true );\r\n-\t\t\u002F\u002F Display cover image\r\n-\t\techo ProfileTemplate::instance()->html_cover_image( $userModel );\r\n-\t\t\u002F\u002F Display Sidebar\r\n-\t\tlearn_press_get_template( 'profile\u002Fsidebar.php' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param LP_Profile $profile\r\n-\t *\r\n-\t * @since 3.0.0\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function content( LP_Profile $profile ) {\r\n-\t\t$user          = $profile->get_user();\r\n-\t\t$current_tab   = $profile->get_current_tab();\r\n-\t\t$user_can_view = $profile->current_user_can( 'view-tab-' . $current_tab );\r\n-\t\tif ( ! $user_can_view ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $profile->get_user_current()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$tabs        = $profile->get_tabs();\r\n-\t\t$tab_key     = $profile->get_current_tab();\r\n-\t\t$profile_tab = $tabs->get( $tab_key );\r\n-\r\n-\t\tlearn_press_get_template( 'profile\u002Fcontent.php', compact( 'user', 'profile_tab', 'tab_key', 'profile' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display avatar\r\n-\t *\r\n-\t * @return void\r\n-\t * @version 1.0.1\r\n-\t * @since 3.x.x\r\n-\t *\u002F\r\n-\tpublic function avatar() {\r\n-\t\t$lp_profile = LP_Profile::instance();\r\n-\t\t$user       = $lp_profile->get_user();\r\n-\t\t$userModel  = UserModel::find( $user->get_id(), true );\r\n-\t\tif ( ! $userModel instanceof UserModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$userTemplate = new UserTemplate();\r\n-\t\techo $userTemplate->html_avatar_edit( $userModel );\r\n-\t\t\u002F\u002Flearn_press_get_template( 'profile\u002Favatar.php' );\r\n-\t}\r\n-\r\n-\tpublic function socials() {\r\n-\t\tlearn_press_get_template( 'profile\u002Fsocials.php' );\r\n-\t}\r\n-\r\n-\tpublic function tabs( $user = null ) {\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\tif ( $profile->get_user_current()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'profile\u002Ftabs.php', compact( 'user', 'profile' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get template tab course\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.1.5\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic static function tab_courses() {\r\n-\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-courses' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = LP_Profile::instance()->get_user();\r\n-\r\n-\t\t$courses_created_tab = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fuser_courses_created\u002Fsubtask',\r\n-\t\t\tarray(\r\n-\t\t\t\t''        => esc_html__( 'All', 'learnpress' ),\r\n-\t\t\t\t'publish' => esc_html__( 'Publish', 'learnpress' ),\r\n-\t\t\t\t'pending' => esc_html__( 'Pending', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$args_query_user_courses_created = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_created',\r\n-\t\t\tarray(\r\n-\t\t\t\t'userID' => $user->get_id(),\r\n-\t\t\t\t'query'  => 'own',\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$args_query_user_courses_statistic = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic',\r\n-\t\t\tarray(\r\n-\t\t\t\t'userID' => $user->get_id(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tdo_action(\r\n-\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses',\r\n-\t\t\tcompact(\r\n-\t\t\t\t'user',\r\n-\t\t\t\t'courses_created_tab',\r\n-\t\t\t\t'args_query_user_courses_created',\r\n-\t\t\t\t'args_query_user_courses_statistic'\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic static function tab_my_courses() {\r\n-\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-my-courses' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user = LP_Profile::instance()->get_user();\r\n-\r\n-\t\t$courses_enrolled_tab = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fuser_courses_attend\u002Fsubtask',\r\n-\t\t\tarray(\r\n-\t\t\t\t''            => esc_html__( 'All', 'learnpress' ),\r\n-\t\t\t\t'in-progress' => esc_html__( 'In Progress', 'learnpress' ),\r\n-\t\t\t\t'finished'    => esc_html__( 'Finished', 'learnpress' ),\r\n-\t\t\t\t'passed'      => esc_html__( 'Passed', 'learnpress' ),\r\n-\t\t\t\t'failed'      => esc_html__( 'Failed', 'learnpress' ),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\t$courses_enrolled_tab_active = apply_filters( 'learnpress\u002Fprofile\u002Ftab\u002Fenrolled\u002Fsubtab-active', ! learn_press_user_maybe_is_a_teacher() ? 'in-progress' : '' );\r\n-\r\n-\t\t$args_query_user_courses_attend    = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_attend',\r\n-\t\t\tarray(\r\n-\t\t\t\t'userID' => $user->get_id(),\r\n-\t\t\t\t'query'  => 'purchased',\r\n-\t\t\t\t'layout' => 'list',\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t$args_query_user_courses_statistic = apply_filters(\r\n-\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic',\r\n-\t\t\tarray(\r\n-\t\t\t\t'userID' => $user->get_id(),\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tlearn_press_get_template(\r\n-\t\t\t'profile\u002Ftabs\u002Fmy_courses',\r\n-\t\t\tcompact(\r\n-\t\t\t\t'user',\r\n-\t\t\t\t'courses_enrolled_tab',\r\n-\t\t\t\t'courses_enrolled_tab_active',\r\n-\t\t\t\t'args_query_user_courses_attend',\r\n-\t\t\t\t'args_query_user_courses_statistic'\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display tab avatar image\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.8.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function tab_avatar() {\r\n-\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-avatar' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user      = LP_Profile::instance()->get_user();\r\n-\t\t$userModel = UserModel::find( $user->get_id(), true );\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo ProfileTemplate::instance()->html_upload_avatar( $userModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Display tab cover image\r\n-\t *\r\n-\t * @return void\r\n-\t * @since 4.2.7.2\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function tab_cover_image() {\r\n-\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-cover-image' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$user      = LP_Profile::instance()->get_user();\r\n-\t\t$userModel = UserModel::find( $user->get_id(), true );\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\techo ProfileTemplate::instance()->html_upload_cover_image( $userModel );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated v4.3.2.6\r\n-\t *\u002F\r\n-\tpublic function order_details() {\r\n-\t\t_deprecated_function( __METHOD__, '4.3.2.6' );\r\n-\t\treturn;\r\n-\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\t$order   = $profile->get_view_order();\r\n-\t\tif ( false === $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'order\u002Forder-details.php', array( 'order' => $order ) );\r\n-\t}\r\n-\r\n-\tpublic function order_recover() {\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\t$order   = $profile->get_view_order();\r\n-\r\n-\t\tif ( false === $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002Flearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Frecover-my-order.php', array( 'order' => $order ) );\r\n-\t}\r\n-\r\n-\tpublic function order_message() {\r\n-\t\t$profile = LP_Profile::instance();\r\n-\t\t$order   = $profile->get_view_order();\r\n-\r\n-\t\tif ( false === $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Forder-message.php', array( 'order' => $order ) );\r\n-\t}\r\n-\r\n-\tpublic function dashboard_not_logged_in() {\r\n-\t\tif ( is_user_logged_in() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'yes' === LP_Settings::get_option( 'enable_login_profile' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'profile\u002Fnot-logged-in.php' );\r\n-\t}\r\n-\r\n-\tpublic function login_form() {\r\n-\t\tif ( is_user_logged_in() && ! LP_Page_Controller::is_page_profile() ) {\r\n-\t\t\tTemplate::print_message(\r\n-\t\t\t\tesc_html__( 'You are already logged in.', 'learnpress' )\r\n-\t\t\t);\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_login_profile', 'no' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\r\n-\t}\r\n-\r\n-\tpublic function register_form() {\r\n-\t\tif ( is_user_logged_in() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_register_profile' ) || ! get_option( 'users_can_register' ) ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\r\n-\t}\r\n-}\r\n-\r\n-return new LP_Template_Profile();\r\n+\u003C?php\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileTemplate;\n+use LearnPress\\TemplateHooks\\UserTemplate;\n+\n+\u002F**\n+ * Class LP_Profile_Template\n+ *\n+ * Group templates related user profile.\n+ *\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Template_Profile extends LP_Abstract_Template {\n+\tpublic function header( $user ) {\n+\t\tlearn_press_get_template( 'profile\u002Fheader.php', array( 'user' => $user ) );\n+\t}\n+\n+\tpublic function sidebar() {\n+\t\t$profile = LP_Profile::instance();\n+\t\tif ( $profile->get_user()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $profile->get_user_current()->is_guest()\n+\t\t\t&& 'yes' !== LP_Profile::get_option_publish_profile() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user      = $profile->get_user();\n+\t\t$userModel = UserModel::find( $user->get_id(), true );\n+\t\t\u002F\u002F Display cover image\n+\t\techo ProfileTemplate::instance()->html_cover_image( $userModel );\n+\t\t\u002F\u002F Display Sidebar\n+\t\tlearn_press_get_template( 'profile\u002Fsidebar.php' );\n+\t}\n+\n+\t\u002F**\n+\t * @param LP_Profile $profile\n+\t *\n+\t * @since 3.0.0\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function content( LP_Profile $profile ) {\n+\t\t$user          = $profile->get_user();\n+\t\t$current_tab   = $profile->get_current_tab();\n+\t\t$user_can_view = $profile->current_user_can( 'view-tab-' . $current_tab );\n+\t\tif ( ! $user_can_view ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $profile->get_user_current()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$tabs        = $profile->get_tabs();\n+\t\t$tab_key     = $profile->get_current_tab();\n+\t\t$profile_tab = $tabs->get( $tab_key );\n+\n+\t\tlearn_press_get_template( 'profile\u002Fcontent.php', compact( 'user', 'profile_tab', 'tab_key', 'profile' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Display avatar\n+\t *\n+\t * @return void\n+\t * @version 1.0.1\n+\t * @since 3.x.x\n+\t *\u002F\n+\tpublic function avatar() {\n+\t\t$lp_profile = LP_Profile::instance();\n+\t\t$user       = $lp_profile->get_user();\n+\t\t$userModel  = UserModel::find( $user->get_id(), true );\n+\t\tif ( ! $userModel instanceof UserModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$userTemplate = new UserTemplate();\n+\t\techo $userTemplate->html_avatar_edit( $userModel );\n+\t\t\u002F\u002Flearn_press_get_template( 'profile\u002Favatar.php' );\n+\t}\n+\n+\tpublic function socials() {\n+\t\tlearn_press_get_template( 'profile\u002Fsocials.php' );\n+\t}\n+\n+\tpublic function tabs( $user = null ) {\n+\t\t$profile = LP_Profile::instance();\n+\t\tif ( $profile->get_user_current()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'profile\u002Ftabs.php', compact( 'user', 'profile' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get template tab course\n+\t *\n+\t * @return void\n+\t * @since 4.1.5\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic static function tab_courses() {\n+\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-courses' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = LP_Profile::instance()->get_user();\n+\n+\t\t$courses_created_tab = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fuser_courses_created\u002Fsubtask',\n+\t\t\tarray(\n+\t\t\t\t''        => esc_html__( 'All', 'learnpress' ),\n+\t\t\t\t'publish' => esc_html__( 'Publish', 'learnpress' ),\n+\t\t\t\t'pending' => esc_html__( 'Pending', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$args_query_user_courses_created = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_created',\n+\t\t\tarray(\n+\t\t\t\t'userID' => $user->get_id(),\n+\t\t\t\t'query'  => 'own',\n+\t\t\t)\n+\t\t);\n+\n+\t\t$args_query_user_courses_statistic = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic',\n+\t\t\tarray(\n+\t\t\t\t'userID' => $user->get_id(),\n+\t\t\t)\n+\t\t);\n+\n+\t\tdo_action(\n+\t\t\t'learn-press\u002Fprofile\u002Flayout\u002Fcourses',\n+\t\t\tcompact(\n+\t\t\t\t'user',\n+\t\t\t\t'courses_created_tab',\n+\t\t\t\t'args_query_user_courses_created',\n+\t\t\t\t'args_query_user_courses_statistic'\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\tpublic static function tab_my_courses() {\n+\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-my-courses' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user = LP_Profile::instance()->get_user();\n+\n+\t\t$courses_enrolled_tab = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fuser_courses_attend\u002Fsubtask',\n+\t\t\tarray(\n+\t\t\t\t''            => esc_html__( 'All', 'learnpress' ),\n+\t\t\t\t'in-progress' => esc_html__( 'In Progress', 'learnpress' ),\n+\t\t\t\t'finished'    => esc_html__( 'Finished', 'learnpress' ),\n+\t\t\t\t'passed'      => esc_html__( 'Passed', 'learnpress' ),\n+\t\t\t\t'failed'      => esc_html__( 'Failed', 'learnpress' ),\n+\t\t\t)\n+\t\t);\n+\n+\t\t$courses_enrolled_tab_active = apply_filters( 'learnpress\u002Fprofile\u002Ftab\u002Fenrolled\u002Fsubtab-active', ! learn_press_user_maybe_is_a_teacher() ? 'in-progress' : '' );\n+\n+\t\t$args_query_user_courses_attend    = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_attend',\n+\t\t\tarray(\n+\t\t\t\t'userID' => $user->get_id(),\n+\t\t\t\t'query'  => 'purchased',\n+\t\t\t\t'layout' => 'list',\n+\t\t\t)\n+\t\t);\n+\t\t$args_query_user_courses_statistic = apply_filters(\n+\t\t\t'lp\u002Fprofile\u002Fargs\u002Fuser_courses_statistic',\n+\t\t\tarray(\n+\t\t\t\t'userID' => $user->get_id(),\n+\t\t\t)\n+\t\t);\n+\n+\t\tlearn_press_get_template(\n+\t\t\t'profile\u002Ftabs\u002Fmy_courses',\n+\t\t\tcompact(\n+\t\t\t\t'user',\n+\t\t\t\t'courses_enrolled_tab',\n+\t\t\t\t'courses_enrolled_tab_active',\n+\t\t\t\t'args_query_user_courses_attend',\n+\t\t\t\t'args_query_user_courses_statistic'\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Display tab avatar image\n+\t *\n+\t * @return void\n+\t * @since 4.2.8.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function tab_avatar() {\n+\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-avatar' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user      = LP_Profile::instance()->get_user();\n+\t\t$userModel = UserModel::find( $user->get_id(), true );\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo ProfileTemplate::instance()->html_upload_avatar( $userModel );\n+\t}\n+\n+\t\u002F**\n+\t * Display tab cover image\n+\t *\n+\t * @return void\n+\t * @since 4.2.7.2\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function tab_cover_image() {\n+\t\tif ( ! LP_Profile::instance()->current_user_can( 'view-tab-cover-image' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$user      = LP_Profile::instance()->get_user();\n+\t\t$userModel = UserModel::find( $user->get_id(), true );\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\techo ProfileTemplate::instance()->html_upload_cover_image( $userModel );\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated v4.3.2.6\n+\t *\u002F\n+\tpublic function order_details() {\n+\t\t_deprecated_function( __METHOD__, '4.3.2.6' );\n+\t\treturn;\n+\n+\t\t$profile = LP_Profile::instance();\n+\t\t$order   = $profile->get_view_order();\n+\t\tif ( false === $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'order\u002Forder-details.php', array( 'order' => $order ) );\n+\t}\n+\n+\tpublic function order_recover() {\n+\t\t$profile = LP_Profile::instance();\n+\t\t$order   = $profile->get_view_order();\n+\n+\t\tif ( false === $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t\u002F\u002Flearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Frecover-my-order.php', array( 'order' => $order ) );\n+\t}\n+\n+\tpublic function order_message() {\n+\t\t$profile = LP_Profile::instance();\n+\t\t$order   = $profile->get_view_order();\n+\n+\t\tif ( false === $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Forders\u002Forder-message.php', array( 'order' => $order ) );\n+\t}\n+\n+\tpublic function dashboard_not_logged_in() {\n+\t\tif ( is_user_logged_in() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( 'yes' === LP_Settings::get_option( 'enable_login_profile' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'profile\u002Fnot-logged-in.php' );\n+\t}\n+\n+\tpublic function login_form() {\n+\t\tif ( is_user_logged_in() && ! LP_Page_Controller::is_page_profile() ) {\n+\t\t\tTemplate::print_message(\n+\t\t\t\tesc_html__( 'You are already logged in.', 'learnpress' )\n+\t\t\t);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_login_profile', 'no' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'global\u002Fform-login.php' );\n+\t}\n+\n+\tpublic function register_form() {\n+\t\tif ( is_user_logged_in() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( ! LP_Profile::instance()->get_user()->is_guest() ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( 'yes' !== LP_Settings::get_option( 'enable_register_profile' ) || ! get_option( 'users_can_register' ) ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tlearn_press_get_template( 'global\u002Fform-register.php' );\n+\t}\n+}\n+\n+return new LP_Template_Profile();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fupdates\u002Flearnpress-upgrade-4.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fupdates\u002Flearnpress-upgrade-4.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fupdates\u002Flearnpress-upgrade-4.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fupdates\u002Flearnpress-upgrade-4.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1606 +1,1606 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Upgrade_4\r\n- *\r\n- * Helper class for updating database to 4.0.0\r\n- *\r\n- * @version 1.0.0\r\n- * @author tungnx\r\n- * @since 4.0.0\r\n- *\u002F\r\n-class LP_Upgrade_4 extends LP_Handle_Upgrade_Steps {\r\n-\t\u002F**\r\n-\t * @var LP_Upgrade_4\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Get Instance\r\n-\t *\r\n-\t * @return LP_Upgrade_4\r\n-\t *\u002F\r\n-\tpublic static function get_instance(): self {\r\n-\t\tif ( null === self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * LP_Upgrade_4 constructor.\r\n-\t *\r\n-\t * @see create_tables\r\n-\t * @see clone_tables\r\n-\t * @see modify_tb_lp_user_items\r\n-\t * @see remove_course_status_cancelled\r\n-\t * @see convert_result_graduation_item\r\n-\t * @see convert_result_items\r\n-\t * @see convert_result_questions\r\n-\t * @see convert_retake_quiz\r\n-\t * @see create_col_extra_value_on_tb_lp_user_itemmeta\r\n-\t * @see convert_meta_value_longtext\r\n-\t * @see modify_tb_lp_user_itemmeta\r\n-\t * @see remove_data_lp_user_itemmeta\r\n-\t * @see modify_tb_lp_quiz_questions\r\n-\t * @see modify_tb_lp_question_answers\r\n-\t * @see update_question_answers\r\n-\t * @see modify_tb_lp_question_answermeta\r\n-\t * @see convert_question_type_fill_in_blank\r\n-\t * @see delete_columns_question_answers\r\n-\t * @see modify_tb_lp_order_items\r\n-\t * @see modify_tb_lp_order_itemmeta\r\n-\t * @see modify_tb_lp_sections\r\n-\t * @see modify_tb_lp_section_items\r\n-\t * @see convert_lp_settings\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$this->version = '4.0.0';\r\n-\t\t\u002F**\r\n-\t\t * Name key not > 50 character\r\n-\t\t *\u002F\r\n-\t\t$this->group_steps = apply_filters(\r\n-\t\t\t'lp\u002Fupgrade\u002F4\u002Fsteps',\r\n-\t\t\tarray(\r\n-\t\t\t\t'learnpress_user_items' => new LP_Group_Step(\r\n-\t\t\t\t\t'learnpress_user_items',\r\n-\t\t\t\t\t'',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'create_tables'                    => new LP_Step(\r\n-\t\t\t\t\t\t\t'create_tables',\r\n-\t\t\t\t\t\t\t'Create tables',\r\n-\t\t\t\t\t\t\t'learnpress_user_item_results'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'clone_tables'                     => new LP_Step(\r\n-\t\t\t\t\t\t\t'clone_tables',\r\n-\t\t\t\t\t\t\t'Backup Tables',\r\n-\t\t\t\t\t\t\t'learnpress_user_items, learnpress_user_itemmeta, learnpress_question_answers, postmeta, options'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_user_items'          => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_user_items',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_user_items',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_user_items, move the result of students on table learnpress_uset_itemmeta to learnpress_user_item_results'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'remove_course_status_cancelled'   => new LP_Step(\r\n-\t\t\t\t\t\t\t'remove_course_status_cancelled',\r\n-\t\t\t\t\t\t\t'Remove courses has status cancelled',\r\n-\t\t\t\t\t\t\t'learnpress_user_item_results'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_result_graduation_item'   => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_result_graduation_item',\r\n-\t\t\t\t\t\t\t'Convert Data Graduation items of courses',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_result_items'             => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_result_items',\r\n-\t\t\t\t\t\t\t'Convert Data Result courses, items\\' courses',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_result_questions'         => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_result_questions',\r\n-\t\t\t\t\t\t\t'Convert Data Result questions',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_retake_quiz'              => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_retake_quiz',\r\n-\t\t\t\t\t\t\t'Convert retake quizzes',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'create_col_extra_value_on_tb_lp_user_itemmeta' => new LP_Step(\r\n-\t\t\t\t\t\t\t'create_col_extra_value_on_tb_lp_user_itemmeta',\r\n-\t\t\t\t\t\t\t'Create column extra_value',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_meta_value_longtext'      => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_meta_value_longtext',\r\n-\t\t\t\t\t\t\t'Copy meta_value longtext to extra_value',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'remove_data_lp_user_itemmeta'     => new LP_Step(\r\n-\t\t\t\t\t\t\t'remove_data_lp_user_itemmeta',\r\n-\t\t\t\t\t\t\t'Remove data results of lp_user_itemmeta',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_user_itemmeta'       => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_user_itemmeta',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_user_itemmeta',\r\n-\t\t\t\t\t\t\t'Change type columns: meta_key, meta_value. Create Index: user_item_id, meta_key, meta_value'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_quiz_questions'      => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_quiz_questions',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_quiz_questions',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_question_answers'    => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_question_answers',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_question_answers',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'update_question_answers'          => new LP_Step(\r\n-\t\t\t\t\t\t\t'update_question_answers',\r\n-\t\t\t\t\t\t\t'Update data table learnpress_question_answers',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_question_answermeta' => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_question_answermeta',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_question_answermeta',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_question_type_fill_in_blank' => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_question_type_fill_in_blank',\r\n-\t\t\t\t\t\t\t'Update data question type \"Fill in blank\"',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'delete_columns_question_answers'  => new LP_Step(\r\n-\t\t\t\t\t\t\t'delete_columns_question_answers',\r\n-\t\t\t\t\t\t\t'Delete data table learnpress_question_answers',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_order_items'         => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_order_items',\r\n-\t\t\t\t\t\t\t'Modify data table learnpress_order_items',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_order_itemmeta'      => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_order_itemmeta',\r\n-\t\t\t\t\t\t\t'Modify data table learnpress_order_itemmeta',\r\n-\t\t\t\t\t\t\t''\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_sections'            => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_sections',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_sections',\r\n-\t\t\t\t\t\t\t'Create Index'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'modify_tb_lp_section_items'       => new LP_Step(\r\n-\t\t\t\t\t\t\t'modify_tb_lp_section_items',\r\n-\t\t\t\t\t\t\t'Modify table learnpress_section_items',\r\n-\t\t\t\t\t\t\t'Create Index'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'convert_lp_settings'              => new LP_Step(\r\n-\t\t\t\t\t\t\t'convert_lp_settings',\r\n-\t\t\t\t\t\t\t'Convert data settings learnpress',\r\n-\t\t\t\t\t\t\t'Courses thumbnail dimensions, Profile thumbnail dimensions, Profile rename dashboard to overview, Block course by duration, Block course when finished, Assessment course by quizzes - Evaluate, '\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Step Create Tables\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function create_tables( array $data ): LP_Step {\r\n-\t\t$response         = new LP_Step( __FUNCTION__, 'Create table' );\r\n-\t\t$key_create_table = 'create_table';\r\n-\t\t$create_table     = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F**\r\n-\t\t\t * All tables need create.\r\n-\t\t\t * key: name table\r\n-\t\t\t * value: function handle create this table\r\n-\t\t\t *\r\n-\t\t\t * @see LP_Database::create_tb_lp_user_item_results\r\n-\t\t\t * @see LP_Database::create_tb_lp_upgrade_db()\r\n-\t\t\t *\u002F\r\n-\t\t\t$lp_db = LP_Database::getInstance();\r\n-\r\n-\t\t\t$create_tables            = array(\r\n-\t\t\t\t'tb_lp_user_item_results',\r\n-\t\t\t\t'tb_lp_upgrade_db',\r\n-\t\t\t);\r\n-\t\t\t$total_tables_need_create = count( $create_tables );\r\n-\r\n-\t\t\t\u002F\u002F Check table need create.\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t$create_table = $create_tables[0];\r\n-\t\t\t} elseif ( ! empty( $data[ $key_create_table ] )\r\n-\t\t\t\t\t   && in_array( $data[ $key_create_table ], $create_tables ) ) {\r\n-\t\t\t\t$create_table = $data[ $key_create_table ];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $create_table ) ) {\r\n-\t\t\t\t\u002F\u002F Finish this step.\r\n-\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Create table.\r\n-\t\t\t\t$name_method = 'create_' . $create_table;\r\n-\t\t\t\tif ( ! method_exists( $lp_db, $name_method ) ) {\r\n-\t\t\t\t\tthrow new Exception( 'Not found method ' . $name_method . ' of Class ' . get_class( $lp_db ) );\r\n-\t\t\t\t}\r\n-\t\t\t\t$lp_db->{$name_method}();\r\n-\r\n-\t\t\t\t\u002F\u002F Set param to clone table next.\r\n-\t\t\t\t$index   = array_search( $create_table, $create_tables );\r\n-\t\t\t\t$percent = LP_Helper::progress_percent( $index, 1, $total_tables_need_create );\r\n-\t\t\t\t++ $index;\r\n-\r\n-\t\t\t\tif ( ! empty( $create_tables[ $index ] ) ) {\r\n-\t\t\t\t\t$response->status             = 'success';\r\n-\t\t\t\t\t$response->percent            = $percent;\r\n-\t\t\t\t\t$response->data->create_table = $create_tables[ $index ];\r\n-\t\t\t\t\t$response->message            = 'Table \"' . $create_table . '\" created';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Finish this step.\r\n-\t\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Step Clone Tables\r\n-\t *\r\n-\t * @param array $data | keys: clone_table .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function clone_tables( array $data ): LP_Step {\r\n-\t\t$response        = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$key_clone_table = 'clone_table';\r\n-\t\t$clone_table     = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F All tables need clone.\r\n-\t\t\t$lp_db = LP_Database::getInstance();\r\n-\t\t\t$lp_db->wpdb->query( \"SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'\" );\r\n-\r\n-\t\t\t$clone_tables = array(\r\n-\t\t\t\t$lp_db->tb_lp_user_items,\r\n-\t\t\t\t$lp_db->tb_lp_user_itemmeta,\r\n-\t\t\t\t$lp_db->tb_lp_question_answers,\r\n-\t\t\t\t$lp_db->tb_postmeta,\r\n-\t\t\t\t$lp_db->tb_options,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$total_tables_need_clone = count( $clone_tables );\r\n-\r\n-\t\t\t\u002F\u002F Check table need clone.\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t$clone_table = $clone_tables[0];\r\n-\t\t\t} elseif ( ! empty( $data[ $key_clone_table ] )\r\n-\t\t\t\t&& in_array( $data[ $key_clone_table ], $clone_tables, true ) ) {\r\n-\t\t\t\t$clone_table = $data[ $key_clone_table ];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $clone_table ) ) {\r\n-\t\t\t\t\u002F\u002F Finish this step.\r\n-\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t\t} else {\r\n-\t\t\t\t\u002F\u002F Clone table.\r\n-\t\t\t\t$lp_db->clone_table( $clone_table );\r\n-\r\n-\t\t\t\t\u002F\u002F Set param to clone table next.\r\n-\t\t\t\t$index   = array_search( $clone_table, $clone_tables );\r\n-\t\t\t\t$percent = LP_Helper::progress_percent( $index, 1, $total_tables_need_clone );\r\n-\t\t\t\t++ $index;\r\n-\r\n-\t\t\t\tif ( ! empty( $clone_tables[ $index ] ) ) {\r\n-\t\t\t\t\t$response->status            = 'success';\r\n-\t\t\t\t\t$response->percent           = $percent;\r\n-\t\t\t\t\t$response->data->clone_table = $clone_tables[ $index ];\r\n-\t\t\t\t\t$response->message           = 'Table \"' . $clone_table . '\" cloned';\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Finish this step.\r\n-\t\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_user_items .\r\n-\t * - Add column graduation varchar(20)\r\n-\t * - Add column access_level varchar(20)\r\n-\t * - Copy value start_time_gmt to start_time if value != '0000-00-00 00:00:00' | And delete column start_time_gmt\r\n-\t * - Copy value end_time_gmt to end_time if value != '0000-00-00 00:00:00' | And delete column end_time_gmt\r\n-\t * - Create indexs\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_user_items() : LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check column graduation, if not exist will be create\r\n-\t\t\t *\u002F\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_items, 'graduation', 'varchar(20)', 'status' );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check column access_level, if not exist will be create\r\n-\t\t\t *\u002F\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_items, 'access_level', 'varchar(20)', 'graduation' );\r\n-\r\n-\t\t\t\u002F\u002F Change type columns: start_time, end_time.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE $lp_db->tb_lp_user_items\r\n-\t\t\t\tMODIFY start_time datetime default null,\r\n-\t\t\t\tMODIFY end_time datetime default null;\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check column start_time_gmt exists.\r\n-\t\t\t *\r\n-\t\t\t * Copy value start_time_gmt to start_time\r\n-\t\t\t *\r\n-\t\t\t * Drop column start_time_gmt\r\n-\t\t\t *\u002F\r\n-\t\t\t$check_col_start_time_gmt = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\r\n-\t\t\tif ( $check_col_start_time_gmt ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET start_time = start_time_gmt\r\n-\t\t\t\t\tWHERE user_item_id > 0\r\n-\t\t\t\t\tAND start_time_gmt != '0000-00-00 00:00:00'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET start_time = null\r\n-\t\t\t\t\tWHERE start_time = '0000-00-00 00:00:00'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Check column end_time_gmt exists.\r\n-\t\t\t *\r\n-\t\t\t * Copy value end_time_gmt to end_time\r\n-\t\t\t *\r\n-\t\t\t * Drop column end_time_gmt\r\n-\t\t\t *\u002F\r\n-\t\t\t$check_col_end_time_gmt = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'end_time_gmt' );\r\n-\t\t\tif ( $check_col_end_time_gmt ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET end_time = end_time_gmt\r\n-\t\t\t\t\tWHERE user_item_id > 0\r\n-\t\t\t\t\tAND end_time_gmt != '0000-00-00 00:00:00'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET end_time = null\r\n-\t\t\t\t\tWHERE end_time_gmt = '0000-00-00 00:00:00'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_user_items, 'end_time_gmt' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Remove rows have status = 'canceled';\r\n-\r\n-\t\t\t\u002F\u002F Create index.\r\n-\t\t\t$indexs = array( 'user_id', 'item_id', 'item_type', 'status', 'ref_type', 'ref_id', 'parent_id' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_user_items, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove courses has status \"cancelled\" and items child, itemmeta\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function remove_course_status_cancelled() : LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_course_ids = $lp_db->wpdb->get_col(\r\n-\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_items\r\n-\t\t\t\t\tWHERE item_type = %s\r\n-\t\t\t\t\tAND status = %s\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\tLP_COURSE_CPT,\r\n-\t\t\t\t\t'cancelled'\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( empty( $user_course_ids ) ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_course_ids_str = implode( ',', $user_course_ids );\r\n-\r\n-\t\t\t$user_item_ids = $lp_db->wpdb->get_col(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_items\r\n-\t\t\t\tWHERE parent_id IN (\" . $user_course_ids_str . ')\r\n-\t\t\t\t'\r\n-\t\t\t);\r\n-\r\n-\t\t\t$user_item_ids_concat     = array_merge( $user_course_ids, $user_item_ids );\r\n-\t\t\t$user_item_ids_concat_str = implode( ',', $user_item_ids_concat );\r\n-\r\n-\t\t\t\u002F\u002F Delete on tb lp_user_items\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM $lp_db->tb_lp_user_items\r\n-\t\t\t\tWHERE user_item_id IN (\" . $user_item_ids_concat_str . ')\r\n-\t\t\t\t'\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Delete on tb lp_user_itemmeta\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE learnpress_user_item_id IN (\" . $user_course_ids_str . ')\r\n-\t\t\t\t'\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert value of meta_key \"grade\" table learnpress_user_itemmeta LP3 to column graduation LP4 table learnpress_user_item_results\r\n-\t *\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_result_graduation_item( array $data ): LP_Step {\r\n-\t\t$response        = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db           = LP_Database::getInstance();\r\n-\t\t$page            = 0;\r\n-\t\t$offset          = 0;\r\n-\t\t$limit           = 100;\r\n-\t\t$total_row       = 0;\r\n-\t\t$suffix_table_bk = '_bk';\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check total rows.\r\n-\t\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk}\r\n-\t\t\t\t\tWHERE meta_key = %s\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t'grade'\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page      = $data['p'];\r\n-\t\t\t\t$offset    = $limit * $page;\r\n-\t\t\t\t$total_row = $data['total_rows'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Select .\r\n-\t\t\t$query            = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\t    SELECT learnpress_user_item_id AS user_item_id, meta_value AS grade\r\n-\t\t\t\t    FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk}\r\n-\t\t\t\t    WHERE meta_key = %s\r\n-\t\t\t\t\tLIMIT %d, %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t'grade',\r\n-\t\t\t\t$offset,\r\n-\t\t\t\t$limit\r\n-\t\t\t);\r\n-\t\t\t$user_item_grades = $lp_db->wpdb->get_results( $query );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Copy value of meta_key \"grade\" table learnpress_user_itemmeta LP3\r\n-\t\t\t * to column \"graduation\" LP4 table learnpress_user_items\r\n-\t\t\t *\u002F\r\n-\t\t\tforeach ( $user_item_grades as $user_item_grade ) {\r\n-\t\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\r\n-\t\t\t\t\tSET graduation = %s\r\n-\t\t\t\t\tWHERE user_item_id = %d;\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$user_item_grade->grade,\r\n-\t\t\t\t\t$user_item_grade->user_item_id\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$lp_db->wpdb->query( $query );\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\r\n-\t\t\tif ( empty( $user_item_grades ) || 100 == $percent ) {\r\n-\t\t\t\t\u002F\u002F Update graduation for case grade wrong (null or lesson completed but still 'in-progress').\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\r\n-\t\t\t\t\tSET graduation = 'passed'\r\n-\t\t\t\t\tWHERE status = 'completed'\r\n-\t\t\t\t\tAND item_type = 'lp_lesson'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t\u002F\u002F Update graduation for case status empty and grade null\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\r\n-\t\t\t\t\tSET graduation = 'in-progress'\r\n-\t\t\t\t\tWHERE (status = '' OR status = 'enrolled')\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->message          = 'Insert success';\r\n-\t\t\t$response->percent          = $percent;\r\n-\t\t\t$response->data->p          = ++ $page;\r\n-\t\t\t$response->data->total_rows = $total_row;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert result items (lesson).\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_result_items( array $data ): LP_Step {\r\n-\t\t$response  = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db     = LP_Database::getInstance();\r\n-\t\t$page      = 0;\r\n-\t\t$offset    = 0;\r\n-\t\t$limit     = 100;\r\n-\t\t$total_row = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check total rows.\r\n-\t\t\t\t$query = \"\r\n-\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\t\tWHERE meta_key LIKE '%course_results_evaluate%'\r\n-\t\t\t\t\";\r\n-\r\n-\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page      = $data['p'];\r\n-\t\t\t\t$offset    = $limit * $page;\r\n-\t\t\t\t$total_row = $data['total_rows'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Convert rows.\r\n-\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS result\r\n-\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE meta_key LIKE '%course_results_evaluate%'\r\n-\t\t\t\tLIMIT %d offset %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$limit,\r\n-\t\t\t\t$offset\r\n-\t\t\t);\r\n-\r\n-\t\t\t$result_lessons = $lp_db->wpdb->get_results( $query );\r\n-\t\t\tif ( 0 === count( $result_lessons ) ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $result_lessons as $result_lesson_obj ) {\r\n-\t\t\t\t$result_lesson = maybe_unserialize( ( $result_lesson_obj->result ) );\r\n-\t\t\t\tif ( ! $result_lesson ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result_json = json_encode( $result_lesson );\r\n-\r\n-\t\t\t\t\u002F\u002F Check exists user_item_id value on table learnpress_user_item_results.\r\n-\t\t\t\t$check = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_item_results\r\n-\t\t\t\t\t\tWHERE user_item_id = %d\r\n-\t\t\t\t\t\t\",\r\n-\t\t\t\t\t\t$result_lesson_obj->user_item_id\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( empty( $check ) ) {\r\n-\t\t\t\t\t$lp_db->wpdb->insert(\r\n-\t\t\t\t\t\t$lp_db->tb_lp_user_item_results,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'result'       => $result_json,\r\n-\t\t\t\t\t\t\t'user_item_id' => $result_lesson_obj->user_item_id,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->message          = 'Insert lesson result success';\r\n-\t\t\t$response->percent          = $percent;\r\n-\t\t\t$response->data->p          = ++ $page;\r\n-\t\t\t$response->data->total_rows = $total_row;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert value of meta_key \"_question_answers\" table learnpress_user_itemmeta LP3 to column result LP4 table learnpress_user_item_results\r\n-\t *\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_result_questions( array $data ): LP_Step {\r\n-\t\t$response  = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db     = LP_Database::getInstance();\r\n-\t\t$page      = 0;\r\n-\t\t$offset    = 0;\r\n-\t\t$limit     = 100;\r\n-\t\t$total_row = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check total rows.\r\n-\t\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\t\tWHERE meta_key = '_question_answers'\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t1\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page      = $data['p'];\r\n-\t\t\t\t$offset    = $limit * $page;\r\n-\t\t\t\t$total_row = $data['total_rows'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Convert rows.\r\n-\t\t\t$query                    = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS answered\r\n-\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE meta_key = '_question_answers'\r\n-\t\t\t\tLIMIT %d offset %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$limit,\r\n-\t\t\t\t$offset\r\n-\t\t\t);\r\n-\t\t\t$quizs_questions_answered = $lp_db->wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( 0 === count( $quizs_questions_answered ) ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $quizs_questions_answered as $quiz_question_answered ) {\r\n-\t\t\t\t$query_quiz_result = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT meta_value AS quiz_result FROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\t\t\tWHERE learnpress_user_item_id = %d\r\n-\t\t\t\t\t\tAND meta_key = %s\r\n-\t\t\t\t\t\t\",\r\n-\t\t\t\t\t\t$quiz_question_answered->user_item_id,\r\n-\t\t\t\t\t\t'results'\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$quiz_result        = maybe_unserialize( ( $query_quiz_result ) );\r\n-\t\t\t\t$questions_answered = maybe_unserialize( $quiz_question_answered->answered );\r\n-\r\n-\t\t\t\tif ( ! $quiz_result || ! $questions_answered ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $questions_answered as $question_id => $question_answered ) {\r\n-\t\t\t\t\tif ( isset( $quiz_result['questions'][ $question_id ] ) ) {\r\n-\t\t\t\t\t\t$quiz_result['questions'][ $question_id ]['answered'] = $question_answered;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result_json = json_encode( $quiz_result );\r\n-\r\n-\t\t\t\t\u002F\u002F Check exists user_item_id value on table learnpress_user_item_results.\r\n-\t\t\t\t$check = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_item_results\r\n-\t\t\t\t\t\tWHERE user_item_id = %d\r\n-\t\t\t\t\t\t\",\r\n-\t\t\t\t\t\t$quiz_question_answered->user_item_id\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\tif ( empty( $check ) ) {\r\n-\t\t\t\t\t$lp_db->wpdb->insert(\r\n-\t\t\t\t\t\t$lp_db->tb_lp_user_item_results,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'result'       => $result_json,\r\n-\t\t\t\t\t\t\t'user_item_id' => $quiz_question_answered->user_item_id,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->message          = 'Insert success';\r\n-\t\t\t$response->percent          = $percent;\r\n-\t\t\t$response->data->p          = ++ $page;\r\n-\t\t\t$response->data->total_rows = $total_row;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert retake quiz.\r\n-\t *\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_retake_quiz( array $data ): LP_Step {\r\n-\t\t$response  = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db     = LP_Database::getInstance();\r\n-\t\t$page      = 0;\r\n-\t\t$offset    = 0;\r\n-\t\t$limit     = 100;\r\n-\t\t$total_row = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check total rows.\r\n-\t\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\t\tWHERE meta_key = '_retaken_items'\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t1\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page      = $data['p'];\r\n-\t\t\t\t$offset    = $limit * $page;\r\n-\t\t\t\t$total_row = $data['total_rows'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Convert rows.\r\n-\t\t\t$query                   = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS quizzes_retaken\r\n-\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\tWHERE meta_key = '_retaken_items'\r\n-\t\t\t\tLIMIT %d offset %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$limit,\r\n-\t\t\t\t$offset\r\n-\t\t\t);\r\n-\t\t\t$courses_quizzes_retaken = $lp_db->wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( 0 === count( $courses_quizzes_retaken ) ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $courses_quizzes_retaken as $quizzes_retaken ) {\r\n-\t\t\t\t$user_item_id = $quizzes_retaken->user_item_id;\r\n-\t\t\t\t$retaken      = maybe_unserialize( $quizzes_retaken->quizzes_retaken );\r\n-\r\n-\t\t\t\tif ( is_array( $retaken ) ) {\r\n-\t\t\t\t\tforeach ( $retaken as $quiz_id => $v ) {\r\n-\t\t\t\t\t\t$quiz_user_item_id = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\t\tSELECT user_item_id\r\n-\t\t\t\t\t\t\t\tFROM $lp_db->tb_lp_user_items\r\n-\t\t\t\t\t\t\t\tWHERE parent_id = %d\r\n-\t\t\t\t\t\t\t\tAND item_id = %d\r\n-\t\t\t\t\t\t\t\t\",\r\n-\t\t\t\t\t\t\t\t$user_item_id,\r\n-\t\t\t\t\t\t\t\t$quiz_id\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $quiz_user_item_id ) {\r\n-\t\t\t\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\t\tINSERT INTO $lp_db->tb_lp_user_itemmeta\r\n-\t\t\t\t\t\t\t\t(learnpress_user_item_id, meta_key, meta_value)\r\n-\t\t\t\t\t\t\t\tVALUES ($quiz_user_item_id, '_lp_retake_count', $v)\r\n-\t\t\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->message          = 'Convert success ';\r\n-\t\t\t$response->percent          = $percent;\r\n-\t\t\t$response->data->p          = ++ $page;\r\n-\t\t\t$response->data->total_rows = $total_row;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create column extra_value for table learnpress_user_itemmeta.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function create_col_extra_value_on_tb_lp_user_itemmeta(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_itemmeta, 'extra_value', 'longtext', 'meta_value' );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Copy meta_value longtext to extra_value.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_meta_value_longtext(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Copy meta_value to extra_value.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_lp_user_itemmeta SET extra_value = meta_value\r\n-\t\t\t\tWHERE meta_key = '_lp_assignment_answer_note'\r\n-\t\t\t\tOR meta_key = '_lp_assignment_answer_upload'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Empty meta_value.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_lp_user_itemmeta SET meta_value = ''\r\n-\t\t\t\tWHERE meta_key = '_lp_assignment_answer_note'\r\n-\t\t\t\tOR meta_key = '_lp_assignment_answer_upload'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_user_itemmeta .\r\n-\t * Must run after Step \"convert_result_questions\"\r\n-\t * Because change name column name 'learnpress_user_item_id' to 'user_item_id' and meta_key change type from 'text' to varchar(255)\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_user_itemmeta(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE {$lp_db->tb_lp_user_itemmeta}\r\n-\t\t\t\tCHANGE COLUMN `meta_key` `meta_key` VARCHAR(45) NOT NULL DEFAULT '',\r\n-\t\t\t\tCHANGE COLUMN `meta_value` `meta_value` VARCHAR(45) NOT NULL DEFAULT ''\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Create index.\r\n-\t\t\t$indexs = array( 'learnpress_user_item_id', 'meta_key', 'meta_value' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_user_itemmeta, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Remove data on table learnpress_user_itemmeta\r\n-\t *\u002F\r\n-\tprotected function remove_data_lp_user_itemmeta() {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F**\r\n-\t\t\t * 1. Remove results course.\r\n-\t\t\t * 2. Remove results item's course.\r\n-\t\t\t * 3. Remove _question_answers.\r\n-\t\t\t * 4. Remove grade.\r\n-\t\t\t * 5. Remove _last_status.\r\n-\t\t\t * 6. Remove _current_status.\r\n-\t\t\t * 7. Remove finishing_type.\r\n-\t\t\t * 8. Remove _retaken_items.\r\n-\t\t\t *\u002F\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tDELETE FROM {$lp_db->tb_lp_user_itemmeta}\r\n-\t\t\t\tWHERE meta_key LIKE 'course_results_evaluate_%'\r\n-\t\t\t\tOR meta_key = '_question_answers'\r\n-\t\t\t\tOR meta_key = 'results'\r\n-\t\t\t\tOR meta_key = 'grade'\r\n-\t\t\t\tOR meta_key = '_last_status'\r\n-\t\t\t\tOR meta_key = '_current_status'\r\n-\t\t\t\tOR meta_key = 'finishing_type'\r\n-\t\t\t\tOR meta_key = '_retaken_items'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step(\r\n-\t\t\t$response,\r\n-\t\t\t'Step ' . __FUNCTION__ . ' finished'\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_quiz_questions.\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_quiz_questions() {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$indexs = array( 'quiz_id', 'question_id' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_quiz_questions, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_question_answers\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t * @throws Exception .\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_question_answers(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Add column title.\r\n-\t\t\t$check_col_title = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'title' );\r\n-\t\t\tif ( ! $check_col_title ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\t\tADD `title` text NULL AFTER `question_id`\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Add column value.\r\n-\t\t\t$check_col_value = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'value' );\r\n-\t\t\tif ( ! $check_col_value ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\t\tADD `value` varchar(32) NULL AFTER `title`\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Add column order.\r\n-\t\t\t$check_col_order = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'order' );\r\n-\t\t\tif ( ! $check_col_order ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\t\tADD `order` bigint(20) NULL DEFAULT 1 AFTER `value`\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Add column is_true.\r\n-\t\t\t$check_col_is_true = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'is_true' );\r\n-\t\t\tif ( ! $check_col_is_true ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\t\tADD `is_true` varchar(3) NULL AFTER `order`\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$indexs = array( 'question_id' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_question_answers, $indexs );\r\n-\r\n-\t\t\tif ( ! empty( $lp_db->wpdb->last_error ) ) {\r\n-\t\t\t\tthrow new Exception( $lp_db->wpdb->last_error );\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert data on table learnpress_question_answers.\r\n-\t *\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function update_question_answers( array $data ): LP_Step {\r\n-\t\t$response  = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db     = LP_Database::getInstance();\r\n-\t\t$wpdb      = $lp_db->wpdb;\r\n-\t\t$page      = 0;\r\n-\t\t$offset    = 0;\r\n-\t\t$limit     = 100;\r\n-\t\t$total_row = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$offset = absint( get_transient( 'lp_upgrade_question_answers_offset' ) );\r\n-\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check total rows.\r\n-\t\t\t\t$query = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tSELECT COUNT(question_answer_id) FROM $lp_db->tb_lp_question_answers\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t1\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page      = $data['p'];\r\n-\t\t\t\t$offset    = $limit * $page;\r\n-\t\t\t\t$total_row = $data['total_rows'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT *\r\n-\t\t\t\tFROM {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\tLIMIT %d OFFSET %d\r\n-\t\t\t\t\",\r\n-\t\t\t\t$limit,\r\n-\t\t\t\t$offset\r\n-\t\t\t);\r\n-\r\n-\t\t\t$rows = $wpdb->get_results( $query );\r\n-\r\n-\t\t\tif ( ! $rows ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Finished ' . __FUNCTION__ );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $rows as $row ) {\r\n-\t\t\t\tif ( ! isset( $row->answer_data ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$answers    = wp_parse_args(\r\n-\t\t\t\t\tmaybe_unserialize( $row->answer_data ),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'text'    => '',\r\n-\t\t\t\t\t\t'value'   => '',\r\n-\t\t\t\t\t\t'is_true' => '',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t\t$update_sql = $lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t\tUPDATE {$lp_db->tb_lp_question_answers}\r\n-\t\t\t\t\tSET `title`= %s,\r\n-\t\t\t\t\t\t`value`= %s,\r\n-\t\t\t\t\t\t`is_true`= %s,\r\n-\t\t\t\t\t\t`order`= %s\r\n-\t\t\t\t\tWHERE question_answer_id=%d\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\t$answers['text'],\r\n-\t\t\t\t\t$answers['value'] ? $answers['value'] : learn_press_random_value(),\r\n-\t\t\t\t\t$answers['is_true'],\r\n-\t\t\t\t\t$row->answer_order,\r\n-\t\t\t\t\t$row->question_answer_id\r\n-\t\t\t\t);\r\n-\t\t\t\t$wpdb->query( $update_sql );\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\r\n-\r\n-\t\t\t$response->status           = 'success';\r\n-\t\t\t$response->message          = 'Insert success';\r\n-\t\t\t$response->percent          = $percent;\r\n-\t\t\t$response->data->p          = ++ $page;\r\n-\t\t\t$response->data->total_rows = $total_row;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_question_answermeta\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_question_answermeta() {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\r\n-\t\t\t\tMODIFY COLUMN `meta_key` VARCHAR(255) NOT NULL DEFAULT '',\r\n-\t\t\t\tMODIFY COLUMN `meta_value` longtext NULL DEFAULT ''\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Create index.\r\n-\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_question_answermeta );\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\r\n-\t\t\t\tADD INDEX question_answer_meta (`learnpress_question_answer_id`, `meta_key`(150))\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert question type fill in blank\r\n-\t *\r\n-\t * @param array $data .\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_question_type_fill_in_blank( array $data = array() ): LP_Step {\r\n-\t\t$response  = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db     = LP_Database::getInstance();\r\n-\t\t$wpdb      = $lp_db->wpdb;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE {$lp_db->tb_postmeta}\r\n-\t\t\t\tSET meta_value = %s\r\n-\t\t\t\tWHERE meta_key = %s\r\n-\t\t\t\tAND meta_value = %s\r\n-\t\t\t\t\",\r\n-\t\t\t\t'fill_in_blanks',\r\n-\t\t\t\t'_lp_type',\r\n-\t\t\t\t'fill_in_blank'\r\n-\t\t\t);\r\n-\t\t\t$lp_db->wpdb->query( $query );\r\n-\r\n-\t\t\tif ( $lp_db->wpdb->last_error ) {\r\n-\t\t\t\tthrow new Exception( $lp_db->wpdb->last_error );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete Columns question answers.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function delete_columns_question_answers(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_question_answers, 'answer_data' );\r\n-\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_question_answers, 'answer_order' );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_order_items .\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_order_items() {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_items, 'item_id', 'bigint(20)', 'order_id' );\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_items, 'item_type', 'varchar(45)', 'item_id' );\r\n-\r\n-\t\t\t$indexs = array( 'order_id', 'item_id', 'item_type' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_order_items, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Modify table learnpress_order_itemmeta.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_order_itemmeta(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE {$lp_db->tb_lp_order_itemmeta}\r\n-\t\t\t\tMODIFY COLUMN `meta_key` VARCHAR(45) NOT NULL DEFAULT '',\r\n-\t\t\t\tMODIFY COLUMN `meta_value` VARCHAR(45) NOT NULL DEFAULT ''\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_itemmeta, 'extra_value', 'longtext', 'meta_value' );\r\n-\r\n-\t\t\t$indexs = array( 'learnpress_order_item_id', 'meta_key', 'meta_value' );\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_order_itemmeta, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create index table learnpress_sections\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_sections() {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$indexs = array( 'section_course_id' );\r\n-\r\n-\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_sections, $indexs );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Create index table learnpress_section_items\r\n-\t *\u002F\r\n-\tprotected function modify_tb_lp_section_items(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_section_items );\r\n-\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tALTER TABLE {$lp_db->tb_lp_section_items}\r\n-\t\t\t\tADD INDEX section_item (`section_id`, `item_id`)\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert Learnpress Settings\r\n-\t * 1. Courses thumbnail dimensions convert.\r\n-\t * 2. Profile thumbnail dimensions convert.\r\n-\t * 3. Profile rename dashboard to overview.\r\n-\t * 4. Block course by duration.\r\n-\t * 5. Block course when finished.\r\n-\t * 6. Assessment course by quizzes - Evaluate.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function convert_lp_settings(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F**\r\n-\t\t\t * Update value on column option_name.\r\n-\t\t\t * Code update value option_name must write before re create indexes if not error \"Duplicate entry\".\r\n-\t\t\t *\u002F\r\n-\t\t\t\u002F\u002F Drop table options.\r\n-\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_options );\r\n-\r\n-\t\t\t\u002F\u002F Courses thumbnail dimensions convert.\r\n-\t\t\t$check_option_thumbnail_dimensions_exists = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT option_name FROM $lp_db->tb_options\r\n-\t\t\t\tWHERE option_name = 'learn_press_course_thumbnail_dimensions'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\tif ( empty( $check_option_thumbnail_dimensions_exists ) ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"UPDATE $lp_db->tb_options\r\n-\t\t\t\t\tSET option_name = 'learn_press_course_thumbnail_dimensions'\r\n-\t\t\t\t\tWHERE option_name = 'learn_press_course_thumbnail_image_size'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Profile thumbnail dimensions convert.\r\n-\t\t\t$check_option_avatar_dimensions_exists = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT option_name FROM $lp_db->tb_options\r\n-\t\t\t\tWHERE option_name = 'learn_press_avatar_dimensions'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\tif ( empty( $check_option_avatar_dimensions_exists ) ) {\r\n-\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\"UPDATE $lp_db->tb_options\r\n-\t\t\t\t\tSET option_name = 'learn_press_avatar_dimensions'\r\n-\t\t\t\t\tWHERE option_name = 'learn_press_profile_picture_thumbnail_size'\r\n-\t\t\t\t\t\"\r\n-\t\t\t\t);\r\n-\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Delete value same of column \"option_name\" before re-create indexes for table options.\r\n-\t\t\t$data_sames = $lp_db->wpdb->get_results(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT option_id, option_name, COUNT(option_name) as total\r\n-\t\t\t\tFROM $lp_db->tb_options\r\n-\t\t\t\tGROUP BY option_name\r\n-\t\t\t\tHAVING total > 1;\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\tif ( $data_sames ) {\r\n-\t\t\t\tforeach ( $data_sames as $data_same ) {\r\n-\t\t\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\t\"\r\n-\t\t\t\t\t\t\tDELETE FROM $lp_db->tb_options\r\n-\t\t\t\t\t\t\tWHERE option_name = %s\r\n-\t\t\t\t\t\t\tAND option_id != %d\r\n-\t\t\t\t\t\t\t\",\r\n-\t\t\t\t\t\t\t$data_same->option_name,\r\n-\t\t\t\t\t\t\t$data_same->option_id\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t$lp_db->check_execute_has_error();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Create indexes for table options.\r\n-\t\t\t$lp_db->create_indexes_tb_options();\r\n-\t\t\t\u002F\u002F End.\r\n-\r\n-\t\t\t\u002F\u002F Profile rename dashboard to overview.\r\n-\t\t\t$learn_press_profile_endpoints = $lp_db->wpdb->get_var(\r\n-\t\t\t\t\"\r\n-\t\t\t\tSELECT option_value FROM $lp_db->tb_options\r\n-\t\t\t\tWHERE option_name = 'learn_press_profile_endpoints'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$learn_press_profile_endpoints = maybe_unserialize( $learn_press_profile_endpoints );\r\n-\r\n-\t\t\t$learn_press_profile_endpoints_tmp = array();\r\n-\t\t\tif ( $learn_press_profile_endpoints ) {\r\n-\t\t\t\tforeach ( $learn_press_profile_endpoints as $k => $val ) {\r\n-\t\t\t\t\tif ( 'profile-dashboard' === $k ) {\r\n-\t\t\t\t\t\t$learn_press_profile_endpoints_tmp['overview'] = $val;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$learn_press_profile_endpoints_tmp[ str_replace( 'profile-', '', $k ) ] = $val;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t$lp_db->wpdb->prepare(\r\n-\t\t\t\t\t\"UPDATE $lp_db->tb_options\r\n-\t\t\t\t\tSET option_value = %s\r\n-\t\t\t\t\tWHERE option_name = 'learn_press_profile_endpoints'\r\n-\t\t\t\t\t\",\r\n-\t\t\t\t\tmaybe_serialize( $learn_press_profile_endpoints_tmp )\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Course settings.\r\n-\t\t\t\u002F\u002F Block course by duration.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"UPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_key = '_lp_block_expire_duration'\r\n-\t\t\t\tWHERE meta_key = '_lp_block_course_item_duration_content'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Block course when finished.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"UPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_key = '_lp_block_finished'\r\n-\t\t\t\tWHERE meta_key = '_lp_block_lesson_content'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Assessment course by quizzes - Evaluate.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"UPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_value = 'evaluate_quiz'\r\n-\t\t\t\tWHERE meta_key = '_lp_course_result'\r\n-\t\t\t\tAND meta_value = 'evaluate_quizzes'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F End course settings.\r\n-\r\n-\t\t\t\u002F\u002F Quiz settings.\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_key = 'lp_review'\r\n-\t\t\t\tWHERE meta_key = '_lp_review_questions'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_key = '_lp_negative_marking'\r\n-\t\t\t\tWHERE meta_key = '_lp_minus_points'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_value = 'yes'\r\n-\t\t\t\tWHERE meta_key = '_lp_negative_marking'\r\n-\t\t\t\tAND meta_value > 0\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t$lp_db->wpdb->query(\r\n-\t\t\t\t\"\r\n-\t\t\t\tUPDATE $lp_db->tb_postmeta\r\n-\t\t\t\tSET meta_value = 'no'\r\n-\t\t\t\tWHERE meta_key = '_lp_negative_marking'\r\n-\t\t\t\tAND meta_value != 'yes'\r\n-\t\t\t\t\"\r\n-\t\t\t);\r\n-\t\t\t$lp_db->check_execute_has_error();\r\n-\r\n-\t\t\t\u002F\u002F Delete some fields not use.\r\n-\r\n-\t\t\t\u002F\u002F Finish upgrade.\r\n-\t\t\tupdate_option( LP_KEY_DB_VERSION, 4 );\r\n-\t\t\t\u002F\u002F update_option( 'learnpress_version', LEARNPRESS_VERSION );\r\n-\t\t\t\u002F\u002F delete_option( 'lp_db_need_upgrade' );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-}\r\n-\r\n-LP_Upgrade_4::get_instance();\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Upgrade_4\n+ *\n+ * Helper class for updating database to 4.0.0\n+ *\n+ * @version 1.0.0\n+ * @author tungnx\n+ * @since 4.0.0\n+ *\u002F\n+class LP_Upgrade_4 extends LP_Handle_Upgrade_Steps {\n+\t\u002F**\n+\t * @var LP_Upgrade_4\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * Get Instance\n+\t *\n+\t * @return LP_Upgrade_4\n+\t *\u002F\n+\tpublic static function get_instance(): self {\n+\t\tif ( null === self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\t\u002F**\n+\t * LP_Upgrade_4 constructor.\n+\t *\n+\t * @see create_tables\n+\t * @see clone_tables\n+\t * @see modify_tb_lp_user_items\n+\t * @see remove_course_status_cancelled\n+\t * @see convert_result_graduation_item\n+\t * @see convert_result_items\n+\t * @see convert_result_questions\n+\t * @see convert_retake_quiz\n+\t * @see create_col_extra_value_on_tb_lp_user_itemmeta\n+\t * @see convert_meta_value_longtext\n+\t * @see modify_tb_lp_user_itemmeta\n+\t * @see remove_data_lp_user_itemmeta\n+\t * @see modify_tb_lp_quiz_questions\n+\t * @see modify_tb_lp_question_answers\n+\t * @see update_question_answers\n+\t * @see modify_tb_lp_question_answermeta\n+\t * @see convert_question_type_fill_in_blank\n+\t * @see delete_columns_question_answers\n+\t * @see modify_tb_lp_order_items\n+\t * @see modify_tb_lp_order_itemmeta\n+\t * @see modify_tb_lp_sections\n+\t * @see modify_tb_lp_section_items\n+\t * @see convert_lp_settings\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$this->version = '4.0.0';\n+\t\t\u002F**\n+\t\t * Name key not > 50 character\n+\t\t *\u002F\n+\t\t$this->group_steps = apply_filters(\n+\t\t\t'lp\u002Fupgrade\u002F4\u002Fsteps',\n+\t\t\tarray(\n+\t\t\t\t'learnpress_user_items' => new LP_Group_Step(\n+\t\t\t\t\t'learnpress_user_items',\n+\t\t\t\t\t'',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'create_tables'                    => new LP_Step(\n+\t\t\t\t\t\t\t'create_tables',\n+\t\t\t\t\t\t\t'Create tables',\n+\t\t\t\t\t\t\t'learnpress_user_item_results'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'clone_tables'                     => new LP_Step(\n+\t\t\t\t\t\t\t'clone_tables',\n+\t\t\t\t\t\t\t'Backup Tables',\n+\t\t\t\t\t\t\t'learnpress_user_items, learnpress_user_itemmeta, learnpress_question_answers, postmeta, options'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_user_items'          => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_user_items',\n+\t\t\t\t\t\t\t'Modify table learnpress_user_items',\n+\t\t\t\t\t\t\t'Modify table learnpress_user_items, move the result of students on table learnpress_uset_itemmeta to learnpress_user_item_results'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'remove_course_status_cancelled'   => new LP_Step(\n+\t\t\t\t\t\t\t'remove_course_status_cancelled',\n+\t\t\t\t\t\t\t'Remove courses has status cancelled',\n+\t\t\t\t\t\t\t'learnpress_user_item_results'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_result_graduation_item'   => new LP_Step(\n+\t\t\t\t\t\t\t'convert_result_graduation_item',\n+\t\t\t\t\t\t\t'Convert Data Graduation items of courses',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_result_items'             => new LP_Step(\n+\t\t\t\t\t\t\t'convert_result_items',\n+\t\t\t\t\t\t\t'Convert Data Result courses, items\\' courses',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_result_questions'         => new LP_Step(\n+\t\t\t\t\t\t\t'convert_result_questions',\n+\t\t\t\t\t\t\t'Convert Data Result questions',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_retake_quiz'              => new LP_Step(\n+\t\t\t\t\t\t\t'convert_retake_quiz',\n+\t\t\t\t\t\t\t'Convert retake quizzes',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'create_col_extra_value_on_tb_lp_user_itemmeta' => new LP_Step(\n+\t\t\t\t\t\t\t'create_col_extra_value_on_tb_lp_user_itemmeta',\n+\t\t\t\t\t\t\t'Create column extra_value',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_meta_value_longtext'      => new LP_Step(\n+\t\t\t\t\t\t\t'convert_meta_value_longtext',\n+\t\t\t\t\t\t\t'Copy meta_value longtext to extra_value',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'remove_data_lp_user_itemmeta'     => new LP_Step(\n+\t\t\t\t\t\t\t'remove_data_lp_user_itemmeta',\n+\t\t\t\t\t\t\t'Remove data results of lp_user_itemmeta',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_user_itemmeta'       => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_user_itemmeta',\n+\t\t\t\t\t\t\t'Modify table learnpress_user_itemmeta',\n+\t\t\t\t\t\t\t'Change type columns: meta_key, meta_value. Create Index: user_item_id, meta_key, meta_value'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_quiz_questions'      => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_quiz_questions',\n+\t\t\t\t\t\t\t'Modify table learnpress_quiz_questions',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_question_answers'    => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_question_answers',\n+\t\t\t\t\t\t\t'Modify table learnpress_question_answers',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'update_question_answers'          => new LP_Step(\n+\t\t\t\t\t\t\t'update_question_answers',\n+\t\t\t\t\t\t\t'Update data table learnpress_question_answers',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_question_answermeta' => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_question_answermeta',\n+\t\t\t\t\t\t\t'Modify table learnpress_question_answermeta',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_question_type_fill_in_blank' => new LP_Step(\n+\t\t\t\t\t\t\t'convert_question_type_fill_in_blank',\n+\t\t\t\t\t\t\t'Update data question type \"Fill in blank\"',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'delete_columns_question_answers'  => new LP_Step(\n+\t\t\t\t\t\t\t'delete_columns_question_answers',\n+\t\t\t\t\t\t\t'Delete data table learnpress_question_answers',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_order_items'         => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_order_items',\n+\t\t\t\t\t\t\t'Modify data table learnpress_order_items',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_order_itemmeta'      => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_order_itemmeta',\n+\t\t\t\t\t\t\t'Modify data table learnpress_order_itemmeta',\n+\t\t\t\t\t\t\t''\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_sections'            => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_sections',\n+\t\t\t\t\t\t\t'Modify table learnpress_sections',\n+\t\t\t\t\t\t\t'Create Index'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'modify_tb_lp_section_items'       => new LP_Step(\n+\t\t\t\t\t\t\t'modify_tb_lp_section_items',\n+\t\t\t\t\t\t\t'Modify table learnpress_section_items',\n+\t\t\t\t\t\t\t'Create Index'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'convert_lp_settings'              => new LP_Step(\n+\t\t\t\t\t\t\t'convert_lp_settings',\n+\t\t\t\t\t\t\t'Convert data settings learnpress',\n+\t\t\t\t\t\t\t'Courses thumbnail dimensions, Profile thumbnail dimensions, Profile rename dashboard to overview, Block course by duration, Block course when finished, Assessment course by quizzes - Evaluate, '\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Step Create Tables\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function create_tables( array $data ): LP_Step {\n+\t\t$response         = new LP_Step( __FUNCTION__, 'Create table' );\n+\t\t$key_create_table = 'create_table';\n+\t\t$create_table     = '';\n+\n+\t\ttry {\n+\t\t\t\u002F**\n+\t\t\t * All tables need create.\n+\t\t\t * key: name table\n+\t\t\t * value: function handle create this table\n+\t\t\t *\n+\t\t\t * @see LP_Database::create_tb_lp_user_item_results\n+\t\t\t * @see LP_Database::create_tb_lp_upgrade_db()\n+\t\t\t *\u002F\n+\t\t\t$lp_db = LP_Database::getInstance();\n+\n+\t\t\t$create_tables            = array(\n+\t\t\t\t'tb_lp_user_item_results',\n+\t\t\t\t'tb_lp_upgrade_db',\n+\t\t\t);\n+\t\t\t$total_tables_need_create = count( $create_tables );\n+\n+\t\t\t\u002F\u002F Check table need create.\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t$create_table = $create_tables[0];\n+\t\t\t} elseif ( ! empty( $data[ $key_create_table ] )\n+\t\t\t\t\t   && in_array( $data[ $key_create_table ], $create_tables ) ) {\n+\t\t\t\t$create_table = $data[ $key_create_table ];\n+\t\t\t}\n+\n+\t\t\tif ( empty( $create_table ) ) {\n+\t\t\t\t\u002F\u002F Finish this step.\n+\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Create table.\n+\t\t\t\t$name_method = 'create_' . $create_table;\n+\t\t\t\tif ( ! method_exists( $lp_db, $name_method ) ) {\n+\t\t\t\t\tthrow new Exception( 'Not found method ' . $name_method . ' of Class ' . get_class( $lp_db ) );\n+\t\t\t\t}\n+\t\t\t\t$lp_db->{$name_method}();\n+\n+\t\t\t\t\u002F\u002F Set param to clone table next.\n+\t\t\t\t$index   = array_search( $create_table, $create_tables );\n+\t\t\t\t$percent = LP_Helper::progress_percent( $index, 1, $total_tables_need_create );\n+\t\t\t\t++ $index;\n+\n+\t\t\t\tif ( ! empty( $create_tables[ $index ] ) ) {\n+\t\t\t\t\t$response->status             = 'success';\n+\t\t\t\t\t$response->percent            = $percent;\n+\t\t\t\t\t$response->data->create_table = $create_tables[ $index ];\n+\t\t\t\t\t$response->message            = 'Table \"' . $create_table . '\" created';\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Finish this step.\n+\t\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Step Clone Tables\n+\t *\n+\t * @param array $data | keys: clone_table .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function clone_tables( array $data ): LP_Step {\n+\t\t$response        = new LP_Step( __FUNCTION__, '' );\n+\t\t$key_clone_table = 'clone_table';\n+\t\t$clone_table     = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F All tables need clone.\n+\t\t\t$lp_db = LP_Database::getInstance();\n+\t\t\t$lp_db->wpdb->query( \"SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'\" );\n+\n+\t\t\t$clone_tables = array(\n+\t\t\t\t$lp_db->tb_lp_user_items,\n+\t\t\t\t$lp_db->tb_lp_user_itemmeta,\n+\t\t\t\t$lp_db->tb_lp_question_answers,\n+\t\t\t\t$lp_db->tb_postmeta,\n+\t\t\t\t$lp_db->tb_options,\n+\t\t\t);\n+\n+\t\t\t$total_tables_need_clone = count( $clone_tables );\n+\n+\t\t\t\u002F\u002F Check table need clone.\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t$clone_table = $clone_tables[0];\n+\t\t\t} elseif ( ! empty( $data[ $key_clone_table ] )\n+\t\t\t\t&& in_array( $data[ $key_clone_table ], $clone_tables, true ) ) {\n+\t\t\t\t$clone_table = $data[ $key_clone_table ];\n+\t\t\t}\n+\n+\t\t\tif ( empty( $clone_table ) ) {\n+\t\t\t\t\u002F\u002F Finish this step.\n+\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t\t} else {\n+\t\t\t\t\u002F\u002F Clone table.\n+\t\t\t\t$lp_db->clone_table( $clone_table );\n+\n+\t\t\t\t\u002F\u002F Set param to clone table next.\n+\t\t\t\t$index   = array_search( $clone_table, $clone_tables );\n+\t\t\t\t$percent = LP_Helper::progress_percent( $index, 1, $total_tables_need_clone );\n+\t\t\t\t++ $index;\n+\n+\t\t\t\tif ( ! empty( $clone_tables[ $index ] ) ) {\n+\t\t\t\t\t$response->status            = 'success';\n+\t\t\t\t\t$response->percent           = $percent;\n+\t\t\t\t\t$response->data->clone_table = $clone_tables[ $index ];\n+\t\t\t\t\t$response->message           = 'Table \"' . $clone_table . '\" cloned';\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Finish this step.\n+\t\t\t\t\t$this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_user_items .\n+\t * - Add column graduation varchar(20)\n+\t * - Add column access_level varchar(20)\n+\t * - Copy value start_time_gmt to start_time if value != '0000-00-00 00:00:00' | And delete column start_time_gmt\n+\t * - Copy value end_time_gmt to end_time if value != '0000-00-00 00:00:00' | And delete column end_time_gmt\n+\t * - Create indexs\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function modify_tb_lp_user_items() : LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F**\n+\t\t\t * Check column graduation, if not exist will be create\n+\t\t\t *\u002F\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_items, 'graduation', 'varchar(20)', 'status' );\n+\n+\t\t\t\u002F**\n+\t\t\t * Check column access_level, if not exist will be create\n+\t\t\t *\u002F\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_items, 'access_level', 'varchar(20)', 'graduation' );\n+\n+\t\t\t\u002F\u002F Change type columns: start_time, end_time.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE $lp_db->tb_lp_user_items\n+\t\t\t\tMODIFY start_time datetime default null,\n+\t\t\t\tMODIFY end_time datetime default null;\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F**\n+\t\t\t * Check column start_time_gmt exists.\n+\t\t\t *\n+\t\t\t * Copy value start_time_gmt to start_time\n+\t\t\t *\n+\t\t\t * Drop column start_time_gmt\n+\t\t\t *\u002F\n+\t\t\t$check_col_start_time_gmt = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\n+\t\t\tif ( $check_col_start_time_gmt ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET start_time = start_time_gmt\n+\t\t\t\t\tWHERE user_item_id > 0\n+\t\t\t\t\tAND start_time_gmt != '0000-00-00 00:00:00'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET start_time = null\n+\t\t\t\t\tWHERE start_time = '0000-00-00 00:00:00'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_user_items, 'start_time_gmt' );\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Check column end_time_gmt exists.\n+\t\t\t *\n+\t\t\t * Copy value end_time_gmt to end_time\n+\t\t\t *\n+\t\t\t * Drop column end_time_gmt\n+\t\t\t *\u002F\n+\t\t\t$check_col_end_time_gmt = $lp_db->check_col_table( $lp_db->tb_lp_user_items, 'end_time_gmt' );\n+\t\t\tif ( $check_col_end_time_gmt ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET end_time = end_time_gmt\n+\t\t\t\t\tWHERE user_item_id > 0\n+\t\t\t\t\tAND end_time_gmt != '0000-00-00 00:00:00'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items SET end_time = null\n+\t\t\t\t\tWHERE end_time_gmt = '0000-00-00 00:00:00'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_user_items, 'end_time_gmt' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Remove rows have status = 'canceled';\n+\n+\t\t\t\u002F\u002F Create index.\n+\t\t\t$indexs = array( 'user_id', 'item_id', 'item_type', 'status', 'ref_type', 'ref_id', 'parent_id' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_user_items, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Remove courses has status \"cancelled\" and items child, itemmeta\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function remove_course_status_cancelled() : LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$user_course_ids = $lp_db->wpdb->get_col(\n+\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_items\n+\t\t\t\t\tWHERE item_type = %s\n+\t\t\t\t\tAND status = %s\n+\t\t\t\t\t\",\n+\t\t\t\t\tLP_COURSE_CPT,\n+\t\t\t\t\t'cancelled'\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( empty( $user_course_ids ) ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t\t\t}\n+\n+\t\t\t$user_course_ids_str = implode( ',', $user_course_ids );\n+\n+\t\t\t$user_item_ids = $lp_db->wpdb->get_col(\n+\t\t\t\t\"\n+\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_items\n+\t\t\t\tWHERE parent_id IN (\" . $user_course_ids_str . ')\n+\t\t\t\t'\n+\t\t\t);\n+\n+\t\t\t$user_item_ids_concat     = array_merge( $user_course_ids, $user_item_ids );\n+\t\t\t$user_item_ids_concat_str = implode( ',', $user_item_ids_concat );\n+\n+\t\t\t\u002F\u002F Delete on tb lp_user_items\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tDELETE FROM $lp_db->tb_lp_user_items\n+\t\t\t\tWHERE user_item_id IN (\" . $user_item_ids_concat_str . ')\n+\t\t\t\t'\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Delete on tb lp_user_itemmeta\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tDELETE FROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\tWHERE learnpress_user_item_id IN (\" . $user_course_ids_str . ')\n+\t\t\t\t'\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Convert value of meta_key \"grade\" table learnpress_user_itemmeta LP3 to column graduation LP4 table learnpress_user_item_results\n+\t *\n+\t * @param array $data .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_result_graduation_item( array $data ): LP_Step {\n+\t\t$response        = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db           = LP_Database::getInstance();\n+\t\t$page            = 0;\n+\t\t$offset          = 0;\n+\t\t$limit           = 100;\n+\t\t$total_row       = 0;\n+\t\t$suffix_table_bk = '_bk';\n+\n+\t\ttry {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check total rows.\n+\t\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk}\n+\t\t\t\t\tWHERE meta_key = %s\n+\t\t\t\t\t\",\n+\t\t\t\t\t'grade'\n+\t\t\t\t);\n+\n+\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\n+\t\t\t} else {\n+\t\t\t\t$page      = $data['p'];\n+\t\t\t\t$offset    = $limit * $page;\n+\t\t\t\t$total_row = $data['total_rows'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Select .\n+\t\t\t$query            = $lp_db->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\t    SELECT learnpress_user_item_id AS user_item_id, meta_value AS grade\n+\t\t\t\t    FROM $lp_db->tb_lp_user_itemmeta{$suffix_table_bk}\n+\t\t\t\t    WHERE meta_key = %s\n+\t\t\t\t\tLIMIT %d, %d\n+\t\t\t\t\",\n+\t\t\t\t'grade',\n+\t\t\t\t$offset,\n+\t\t\t\t$limit\n+\t\t\t);\n+\t\t\t$user_item_grades = $lp_db->wpdb->get_results( $query );\n+\n+\t\t\t\u002F**\n+\t\t\t * Copy value of meta_key \"grade\" table learnpress_user_itemmeta LP3\n+\t\t\t * to column \"graduation\" LP4 table learnpress_user_items\n+\t\t\t *\u002F\n+\t\t\tforeach ( $user_item_grades as $user_item_grade ) {\n+\t\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\n+\t\t\t\t\tSET graduation = %s\n+\t\t\t\t\tWHERE user_item_id = %d;\n+\t\t\t\t\t\",\n+\t\t\t\t\t$user_item_grade->grade,\n+\t\t\t\t\t$user_item_grade->user_item_id\n+\t\t\t\t);\n+\n+\t\t\t\t$lp_db->wpdb->query( $query );\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t}\n+\n+\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\n+\t\t\tif ( empty( $user_item_grades ) || 100 == $percent ) {\n+\t\t\t\t\u002F\u002F Update graduation for case grade wrong (null or lesson completed but still 'in-progress').\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\n+\t\t\t\t\tSET graduation = 'passed'\n+\t\t\t\t\tWHERE status = 'completed'\n+\t\t\t\t\tAND item_type = 'lp_lesson'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t\u002F\u002F Update graduation for case status empty and grade null\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE $lp_db->tb_lp_user_items\n+\t\t\t\t\tSET graduation = 'in-progress'\n+\t\t\t\t\tWHERE (status = '' OR status = 'enrolled')\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\n+\t\t\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t\t}\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->message          = 'Insert success';\n+\t\t\t$response->percent          = $percent;\n+\t\t\t$response->data->p          = ++ $page;\n+\t\t\t$response->data->total_rows = $total_row;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Convert result items (lesson).\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_result_items( array $data ): LP_Step {\n+\t\t$response  = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db     = LP_Database::getInstance();\n+\t\t$page      = 0;\n+\t\t$offset    = 0;\n+\t\t$limit     = 100;\n+\t\t$total_row = 0;\n+\n+\t\ttry {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check total rows.\n+\t\t\t\t$query = \"\n+\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\t\tWHERE meta_key LIKE '%course_results_evaluate%'\n+\t\t\t\t\";\n+\n+\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\n+\t\t\t} else {\n+\t\t\t\t$page      = $data['p'];\n+\t\t\t\t$offset    = $limit * $page;\n+\t\t\t\t$total_row = $data['total_rows'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Convert rows.\n+\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS result\n+\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\tWHERE meta_key LIKE '%course_results_evaluate%'\n+\t\t\t\tLIMIT %d offset %d\n+\t\t\t\t\",\n+\t\t\t\t$limit,\n+\t\t\t\t$offset\n+\t\t\t);\n+\n+\t\t\t$result_lessons = $lp_db->wpdb->get_results( $query );\n+\t\t\tif ( 0 === count( $result_lessons ) ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $result_lessons as $result_lesson_obj ) {\n+\t\t\t\t$result_lesson = maybe_unserialize( ( $result_lesson_obj->result ) );\n+\t\t\t\tif ( ! $result_lesson ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$result_json = json_encode( $result_lesson );\n+\n+\t\t\t\t\u002F\u002F Check exists user_item_id value on table learnpress_user_item_results.\n+\t\t\t\t$check = $lp_db->wpdb->get_var(\n+\t\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_item_results\n+\t\t\t\t\t\tWHERE user_item_id = %d\n+\t\t\t\t\t\t\",\n+\t\t\t\t\t\t$result_lesson_obj->user_item_id\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tif ( empty( $check ) ) {\n+\t\t\t\t\t$lp_db->wpdb->insert(\n+\t\t\t\t\t\t$lp_db->tb_lp_user_item_results,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'result'       => $result_json,\n+\t\t\t\t\t\t\t'user_item_id' => $result_lesson_obj->user_item_id,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->message          = 'Insert lesson result success';\n+\t\t\t$response->percent          = $percent;\n+\t\t\t$response->data->p          = ++ $page;\n+\t\t\t$response->data->total_rows = $total_row;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Convert value of meta_key \"_question_answers\" table learnpress_user_itemmeta LP3 to column result LP4 table learnpress_user_item_results\n+\t *\n+\t * @param array $data .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_result_questions( array $data ): LP_Step {\n+\t\t$response  = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db     = LP_Database::getInstance();\n+\t\t$page      = 0;\n+\t\t$offset    = 0;\n+\t\t$limit     = 100;\n+\t\t$total_row = 0;\n+\n+\t\ttry {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check total rows.\n+\t\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\t\tWHERE meta_key = '_question_answers'\n+\t\t\t\t\t\",\n+\t\t\t\t\t1\n+\t\t\t\t);\n+\n+\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\n+\t\t\t} else {\n+\t\t\t\t$page      = $data['p'];\n+\t\t\t\t$offset    = $limit * $page;\n+\t\t\t\t$total_row = $data['total_rows'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Convert rows.\n+\t\t\t$query                    = $lp_db->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS answered\n+\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\tWHERE meta_key = '_question_answers'\n+\t\t\t\tLIMIT %d offset %d\n+\t\t\t\t\",\n+\t\t\t\t$limit,\n+\t\t\t\t$offset\n+\t\t\t);\n+\t\t\t$quizs_questions_answered = $lp_db->wpdb->get_results( $query );\n+\n+\t\t\tif ( 0 === count( $quizs_questions_answered ) ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $quizs_questions_answered as $quiz_question_answered ) {\n+\t\t\t\t$query_quiz_result = $lp_db->wpdb->get_var(\n+\t\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT meta_value AS quiz_result FROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\t\t\tWHERE learnpress_user_item_id = %d\n+\t\t\t\t\t\tAND meta_key = %s\n+\t\t\t\t\t\t\",\n+\t\t\t\t\t\t$quiz_question_answered->user_item_id,\n+\t\t\t\t\t\t'results'\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$quiz_result        = maybe_unserialize( ( $query_quiz_result ) );\n+\t\t\t\t$questions_answered = maybe_unserialize( $quiz_question_answered->answered );\n+\n+\t\t\t\tif ( ! $quiz_result || ! $questions_answered ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $questions_answered as $question_id => $question_answered ) {\n+\t\t\t\t\tif ( isset( $quiz_result['questions'][ $question_id ] ) ) {\n+\t\t\t\t\t\t$quiz_result['questions'][ $question_id ]['answered'] = $question_answered;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$result_json = json_encode( $quiz_result );\n+\n+\t\t\t\t\u002F\u002F Check exists user_item_id value on table learnpress_user_item_results.\n+\t\t\t\t$check = $lp_db->wpdb->get_var(\n+\t\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\t\"\n+\t\t\t\t\t\tSELECT user_item_id FROM $lp_db->tb_lp_user_item_results\n+\t\t\t\t\t\tWHERE user_item_id = %d\n+\t\t\t\t\t\t\",\n+\t\t\t\t\t\t$quiz_question_answered->user_item_id\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\tif ( empty( $check ) ) {\n+\t\t\t\t\t$lp_db->wpdb->insert(\n+\t\t\t\t\t\t$lp_db->tb_lp_user_item_results,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'result'       => $result_json,\n+\t\t\t\t\t\t\t'user_item_id' => $quiz_question_answered->user_item_id,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t} else {\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->message          = 'Insert success';\n+\t\t\t$response->percent          = $percent;\n+\t\t\t$response->data->p          = ++ $page;\n+\t\t\t$response->data->total_rows = $total_row;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Convert retake quiz.\n+\t *\n+\t * @param array $data .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_retake_quiz( array $data ): LP_Step {\n+\t\t$response  = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db     = LP_Database::getInstance();\n+\t\t$page      = 0;\n+\t\t$offset    = 0;\n+\t\t$limit     = 100;\n+\t\t$total_row = 0;\n+\n+\t\ttry {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check total rows.\n+\t\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT COUNT(learnpress_user_item_id) FROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\t\tWHERE meta_key = '_retaken_items'\n+\t\t\t\t\t\",\n+\t\t\t\t\t1\n+\t\t\t\t);\n+\n+\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\n+\t\t\t} else {\n+\t\t\t\t$page      = $data['p'];\n+\t\t\t\t$offset    = $limit * $page;\n+\t\t\t\t$total_row = $data['total_rows'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Convert rows.\n+\t\t\t$query                   = $lp_db->wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT learnpress_user_item_id AS user_item_id, meta_value AS quizzes_retaken\n+\t\t\t\tFROM $lp_db->tb_lp_user_itemmeta\n+\t\t\t\tWHERE meta_key = '_retaken_items'\n+\t\t\t\tLIMIT %d offset %d\n+\t\t\t\t\",\n+\t\t\t\t$limit,\n+\t\t\t\t$offset\n+\t\t\t);\n+\t\t\t$courses_quizzes_retaken = $lp_db->wpdb->get_results( $query );\n+\n+\t\t\tif ( 0 === count( $courses_quizzes_retaken ) ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Convert result question success' );\n+\t\t\t}\n+\n+\t\t\tforeach ( $courses_quizzes_retaken as $quizzes_retaken ) {\n+\t\t\t\t$user_item_id = $quizzes_retaken->user_item_id;\n+\t\t\t\t$retaken      = maybe_unserialize( $quizzes_retaken->quizzes_retaken );\n+\n+\t\t\t\tif ( is_array( $retaken ) ) {\n+\t\t\t\t\tforeach ( $retaken as $quiz_id => $v ) {\n+\t\t\t\t\t\t$quiz_user_item_id = $lp_db->wpdb->get_var(\n+\t\t\t\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\t\t\t\"\n+\t\t\t\t\t\t\t\tSELECT user_item_id\n+\t\t\t\t\t\t\t\tFROM $lp_db->tb_lp_user_items\n+\t\t\t\t\t\t\t\tWHERE parent_id = %d\n+\t\t\t\t\t\t\t\tAND item_id = %d\n+\t\t\t\t\t\t\t\t\",\n+\t\t\t\t\t\t\t\t$user_item_id,\n+\t\t\t\t\t\t\t\t$quiz_id\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $quiz_user_item_id ) {\n+\t\t\t\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\t\t\t\"\n+\t\t\t\t\t\t\t\tINSERT INTO $lp_db->tb_lp_user_itemmeta\n+\t\t\t\t\t\t\t\t(learnpress_user_item_id, meta_key, meta_value)\n+\t\t\t\t\t\t\t\tVALUES ($quiz_user_item_id, '_lp_retake_count', $v)\n+\t\t\t\t\t\t\t\t\"\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->message          = 'Convert success ';\n+\t\t\t$response->percent          = $percent;\n+\t\t\t$response->data->p          = ++ $page;\n+\t\t\t$response->data->total_rows = $total_row;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Create column extra_value for table learnpress_user_itemmeta.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function create_col_extra_value_on_tb_lp_user_itemmeta(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_user_itemmeta, 'extra_value', 'longtext', 'meta_value' );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Copy meta_value longtext to extra_value.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_meta_value_longtext(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Copy meta_value to extra_value.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_lp_user_itemmeta SET extra_value = meta_value\n+\t\t\t\tWHERE meta_key = '_lp_assignment_answer_note'\n+\t\t\t\tOR meta_key = '_lp_assignment_answer_upload'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Empty meta_value.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_lp_user_itemmeta SET meta_value = ''\n+\t\t\t\tWHERE meta_key = '_lp_assignment_answer_note'\n+\t\t\t\tOR meta_key = '_lp_assignment_answer_upload'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_user_itemmeta .\n+\t * Must run after Step \"convert_result_questions\"\n+\t * Because change name column name 'learnpress_user_item_id' to 'user_item_id' and meta_key change type from 'text' to varchar(255)\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function modify_tb_lp_user_itemmeta(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE {$lp_db->tb_lp_user_itemmeta}\n+\t\t\t\tCHANGE COLUMN `meta_key` `meta_key` VARCHAR(45) NOT NULL DEFAULT '',\n+\t\t\t\tCHANGE COLUMN `meta_value` `meta_value` VARCHAR(45) NOT NULL DEFAULT ''\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Create index.\n+\t\t\t$indexs = array( 'learnpress_user_item_id', 'meta_key', 'meta_value' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_user_itemmeta, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Remove data on table learnpress_user_itemmeta\n+\t *\u002F\n+\tprotected function remove_data_lp_user_itemmeta() {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F**\n+\t\t\t * 1. Remove results course.\n+\t\t\t * 2. Remove results item's course.\n+\t\t\t * 3. Remove _question_answers.\n+\t\t\t * 4. Remove grade.\n+\t\t\t * 5. Remove _last_status.\n+\t\t\t * 6. Remove _current_status.\n+\t\t\t * 7. Remove finishing_type.\n+\t\t\t * 8. Remove _retaken_items.\n+\t\t\t *\u002F\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tDELETE FROM {$lp_db->tb_lp_user_itemmeta}\n+\t\t\t\tWHERE meta_key LIKE 'course_results_evaluate_%'\n+\t\t\t\tOR meta_key = '_question_answers'\n+\t\t\t\tOR meta_key = 'results'\n+\t\t\t\tOR meta_key = 'grade'\n+\t\t\t\tOR meta_key = '_last_status'\n+\t\t\t\tOR meta_key = '_current_status'\n+\t\t\t\tOR meta_key = 'finishing_type'\n+\t\t\t\tOR meta_key = '_retaken_items'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step(\n+\t\t\t$response,\n+\t\t\t'Step ' . __FUNCTION__ . ' finished'\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_quiz_questions.\n+\t *\u002F\n+\tprotected function modify_tb_lp_quiz_questions() {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$indexs = array( 'quiz_id', 'question_id' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_quiz_questions, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_question_answers\n+\t *\n+\t * @return LP_Step\n+\t * @throws Exception .\n+\t *\u002F\n+\tprotected function modify_tb_lp_question_answers(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Add column title.\n+\t\t\t$check_col_title = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'title' );\n+\t\t\tif ( ! $check_col_title ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\n+\t\t\t\t\tADD `title` text NULL AFTER `question_id`\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Add column value.\n+\t\t\t$check_col_value = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'value' );\n+\t\t\tif ( ! $check_col_value ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\n+\t\t\t\t\tADD `value` varchar(32) NULL AFTER `title`\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Add column order.\n+\t\t\t$check_col_order = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'order' );\n+\t\t\tif ( ! $check_col_order ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\n+\t\t\t\t\tADD `order` bigint(20) NULL DEFAULT 1 AFTER `value`\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Add column is_true.\n+\t\t\t$check_col_is_true = $lp_db->check_col_table( $lp_db->tb_lp_question_answers, 'is_true' );\n+\t\t\tif ( ! $check_col_is_true ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"\n+\t\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answers}\n+\t\t\t\t\tADD `is_true` varchar(3) NULL AFTER `order`\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$indexs = array( 'question_id' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_question_answers, $indexs );\n+\n+\t\t\tif ( ! empty( $lp_db->wpdb->last_error ) ) {\n+\t\t\t\tthrow new Exception( $lp_db->wpdb->last_error );\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Convert data on table learnpress_question_answers.\n+\t *\n+\t * @param array $data .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function update_question_answers( array $data ): LP_Step {\n+\t\t$response  = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db     = LP_Database::getInstance();\n+\t\t$wpdb      = $lp_db->wpdb;\n+\t\t$page      = 0;\n+\t\t$offset    = 0;\n+\t\t$limit     = 100;\n+\t\t$total_row = 0;\n+\n+\t\ttry {\n+\t\t\t$offset = absint( get_transient( 'lp_upgrade_question_answers_offset' ) );\n+\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check total rows.\n+\t\t\t\t$query = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tSELECT COUNT(question_answer_id) FROM $lp_db->tb_lp_question_answers\n+\t\t\t\t\t\",\n+\t\t\t\t\t1\n+\t\t\t\t);\n+\n+\t\t\t\t$total_row = $response->data->total_rows = (int) $lp_db->wpdb->get_var( $query );\n+\t\t\t} else {\n+\t\t\t\t$page      = $data['p'];\n+\t\t\t\t$offset    = $limit * $page;\n+\t\t\t\t$total_row = $data['total_rows'];\n+\t\t\t}\n+\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tSELECT *\n+\t\t\t\tFROM {$lp_db->tb_lp_question_answers}\n+\t\t\t\tLIMIT %d OFFSET %d\n+\t\t\t\t\",\n+\t\t\t\t$limit,\n+\t\t\t\t$offset\n+\t\t\t);\n+\n+\t\t\t$rows = $wpdb->get_results( $query );\n+\n+\t\t\tif ( ! $rows ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Finished ' . __FUNCTION__ );\n+\t\t\t}\n+\n+\t\t\tforeach ( $rows as $row ) {\n+\t\t\t\tif ( ! isset( $row->answer_data ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$answers    = wp_parse_args(\n+\t\t\t\t\tmaybe_unserialize( $row->answer_data ),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'text'    => '',\n+\t\t\t\t\t\t'value'   => '',\n+\t\t\t\t\t\t'is_true' => '',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t\t$update_sql = $lp_db->wpdb->prepare(\n+\t\t\t\t\t\"\n+\t\t\t\t\tUPDATE {$lp_db->tb_lp_question_answers}\n+\t\t\t\t\tSET `title`= %s,\n+\t\t\t\t\t\t`value`= %s,\n+\t\t\t\t\t\t`is_true`= %s,\n+\t\t\t\t\t\t`order`= %s\n+\t\t\t\t\tWHERE question_answer_id=%d\n+\t\t\t\t\t\",\n+\t\t\t\t\t$answers['text'],\n+\t\t\t\t\t$answers['value'] ? $answers['value'] : learn_press_random_value(),\n+\t\t\t\t\t$answers['is_true'],\n+\t\t\t\t\t$row->answer_order,\n+\t\t\t\t\t$row->question_answer_id\n+\t\t\t\t);\n+\t\t\t\t$wpdb->query( $update_sql );\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t}\n+\n+\t\t\t$percent = LP_Helper::progress_percent( $offset, $limit, $total_row );\n+\n+\t\t\t$response->status           = 'success';\n+\t\t\t$response->message          = 'Insert success';\n+\t\t\t$response->percent          = $percent;\n+\t\t\t$response->data->p          = ++ $page;\n+\t\t\t$response->data->total_rows = $total_row;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_question_answermeta\n+\t *\u002F\n+\tprotected function modify_tb_lp_question_answermeta() {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\n+\t\t\t\tMODIFY COLUMN `meta_key` VARCHAR(255) NOT NULL DEFAULT '',\n+\t\t\t\tMODIFY COLUMN `meta_value` longtext NULL DEFAULT ''\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Create index.\n+\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_question_answermeta );\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE {$lp_db->tb_lp_question_answermeta}\n+\t\t\t\tADD INDEX question_answer_meta (`learnpress_question_answer_id`, `meta_key`(150))\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Convert question type fill in blank\n+\t *\n+\t * @param array $data .\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_question_type_fill_in_blank( array $data = array() ): LP_Step {\n+\t\t$response  = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db     = LP_Database::getInstance();\n+\t\t$wpdb      = $lp_db->wpdb;\n+\n+\t\ttry {\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE {$lp_db->tb_postmeta}\n+\t\t\t\tSET meta_value = %s\n+\t\t\t\tWHERE meta_key = %s\n+\t\t\t\tAND meta_value = %s\n+\t\t\t\t\",\n+\t\t\t\t'fill_in_blanks',\n+\t\t\t\t'_lp_type',\n+\t\t\t\t'fill_in_blank'\n+\t\t\t);\n+\t\t\t$lp_db->wpdb->query( $query );\n+\n+\t\t\tif ( $lp_db->wpdb->last_error ) {\n+\t\t\t\tthrow new Exception( $lp_db->wpdb->last_error );\n+\t\t\t}\n+\n+\t\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Delete Columns question answers.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function delete_columns_question_answers(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_question_answers, 'answer_data' );\n+\t\t\t$lp_db->drop_col_table( $lp_db->tb_lp_question_answers, 'answer_order' );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_order_items .\n+\t *\u002F\n+\tprotected function modify_tb_lp_order_items() {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_items, 'item_id', 'bigint(20)', 'order_id' );\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_items, 'item_type', 'varchar(45)', 'item_id' );\n+\n+\t\t\t$indexs = array( 'order_id', 'item_id', 'item_type' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_order_items, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Modify table learnpress_order_itemmeta.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function modify_tb_lp_order_itemmeta(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE {$lp_db->tb_lp_order_itemmeta}\n+\t\t\t\tMODIFY COLUMN `meta_key` VARCHAR(45) NOT NULL DEFAULT '',\n+\t\t\t\tMODIFY COLUMN `meta_value` VARCHAR(45) NOT NULL DEFAULT ''\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$lp_db->add_col_table( $lp_db->tb_lp_order_itemmeta, 'extra_value', 'longtext', 'meta_value' );\n+\n+\t\t\t$indexs = array( 'learnpress_order_item_id', 'meta_key', 'meta_value' );\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_order_itemmeta, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Create index table learnpress_sections\n+\t *\u002F\n+\tprotected function modify_tb_lp_sections() {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$indexs = array( 'section_course_id' );\n+\n+\t\t\t$lp_db->add_indexs_table( $lp_db->tb_lp_sections, $indexs );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Create index table learnpress_section_items\n+\t *\u002F\n+\tprotected function modify_tb_lp_section_items(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_lp_section_items );\n+\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tALTER TABLE {$lp_db->tb_lp_section_items}\n+\t\t\t\tADD INDEX section_item (`section_id`, `item_id`)\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+\n+\t\u002F**\n+\t * Convert Learnpress Settings\n+\t * 1. Courses thumbnail dimensions convert.\n+\t * 2. Profile thumbnail dimensions convert.\n+\t * 3. Profile rename dashboard to overview.\n+\t * 4. Block course by duration.\n+\t * 5. Block course when finished.\n+\t * 6. Assessment course by quizzes - Evaluate.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function convert_lp_settings(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F**\n+\t\t\t * Update value on column option_name.\n+\t\t\t * Code update value option_name must write before re create indexes if not error \"Duplicate entry\".\n+\t\t\t *\u002F\n+\t\t\t\u002F\u002F Drop table options.\n+\t\t\t$lp_db->drop_indexs_table( $lp_db->tb_options );\n+\n+\t\t\t\u002F\u002F Courses thumbnail dimensions convert.\n+\t\t\t$check_option_thumbnail_dimensions_exists = $lp_db->wpdb->get_var(\n+\t\t\t\t\"\n+\t\t\t\tSELECT option_name FROM $lp_db->tb_options\n+\t\t\t\tWHERE option_name = 'learn_press_course_thumbnail_dimensions'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\tif ( empty( $check_option_thumbnail_dimensions_exists ) ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"UPDATE $lp_db->tb_options\n+\t\t\t\t\tSET option_name = 'learn_press_course_thumbnail_dimensions'\n+\t\t\t\t\tWHERE option_name = 'learn_press_course_thumbnail_image_size'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Profile thumbnail dimensions convert.\n+\t\t\t$check_option_avatar_dimensions_exists = $lp_db->wpdb->get_var(\n+\t\t\t\t\"\n+\t\t\t\tSELECT option_name FROM $lp_db->tb_options\n+\t\t\t\tWHERE option_name = 'learn_press_avatar_dimensions'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\tif ( empty( $check_option_avatar_dimensions_exists ) ) {\n+\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\"UPDATE $lp_db->tb_options\n+\t\t\t\t\tSET option_name = 'learn_press_avatar_dimensions'\n+\t\t\t\t\tWHERE option_name = 'learn_press_profile_picture_thumbnail_size'\n+\t\t\t\t\t\"\n+\t\t\t\t);\n+\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Delete value same of column \"option_name\" before re-create indexes for table options.\n+\t\t\t$data_sames = $lp_db->wpdb->get_results(\n+\t\t\t\t\"\n+\t\t\t\tSELECT option_id, option_name, COUNT(option_name) as total\n+\t\t\t\tFROM $lp_db->tb_options\n+\t\t\t\tGROUP BY option_name\n+\t\t\t\tHAVING total > 1;\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\tif ( $data_sames ) {\n+\t\t\t\tforeach ( $data_sames as $data_same ) {\n+\t\t\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\t\t\"\n+\t\t\t\t\t\t\tDELETE FROM $lp_db->tb_options\n+\t\t\t\t\t\t\tWHERE option_name = %s\n+\t\t\t\t\t\t\tAND option_id != %d\n+\t\t\t\t\t\t\t\",\n+\t\t\t\t\t\t\t$data_same->option_name,\n+\t\t\t\t\t\t\t$data_same->option_id\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\n+\t\t\t\t\t$lp_db->check_execute_has_error();\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Create indexes for table options.\n+\t\t\t$lp_db->create_indexes_tb_options();\n+\t\t\t\u002F\u002F End.\n+\n+\t\t\t\u002F\u002F Profile rename dashboard to overview.\n+\t\t\t$learn_press_profile_endpoints = $lp_db->wpdb->get_var(\n+\t\t\t\t\"\n+\t\t\t\tSELECT option_value FROM $lp_db->tb_options\n+\t\t\t\tWHERE option_name = 'learn_press_profile_endpoints'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$learn_press_profile_endpoints = maybe_unserialize( $learn_press_profile_endpoints );\n+\n+\t\t\t$learn_press_profile_endpoints_tmp = array();\n+\t\t\tif ( $learn_press_profile_endpoints ) {\n+\t\t\t\tforeach ( $learn_press_profile_endpoints as $k => $val ) {\n+\t\t\t\t\tif ( 'profile-dashboard' === $k ) {\n+\t\t\t\t\t\t$learn_press_profile_endpoints_tmp['overview'] = $val;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$learn_press_profile_endpoints_tmp[ str_replace( 'profile-', '', $k ) ] = $val;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t$lp_db->wpdb->prepare(\n+\t\t\t\t\t\"UPDATE $lp_db->tb_options\n+\t\t\t\t\tSET option_value = %s\n+\t\t\t\t\tWHERE option_name = 'learn_press_profile_endpoints'\n+\t\t\t\t\t\",\n+\t\t\t\t\tmaybe_serialize( $learn_press_profile_endpoints_tmp )\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Course settings.\n+\t\t\t\u002F\u002F Block course by duration.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"UPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_key = '_lp_block_expire_duration'\n+\t\t\t\tWHERE meta_key = '_lp_block_course_item_duration_content'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Block course when finished.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"UPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_key = '_lp_block_finished'\n+\t\t\t\tWHERE meta_key = '_lp_block_lesson_content'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Assessment course by quizzes - Evaluate.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"UPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_value = 'evaluate_quiz'\n+\t\t\t\tWHERE meta_key = '_lp_course_result'\n+\t\t\t\tAND meta_value = 'evaluate_quizzes'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F End course settings.\n+\n+\t\t\t\u002F\u002F Quiz settings.\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_key = 'lp_review'\n+\t\t\t\tWHERE meta_key = '_lp_review_questions'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_key = '_lp_negative_marking'\n+\t\t\t\tWHERE meta_key = '_lp_minus_points'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_value = 'yes'\n+\t\t\t\tWHERE meta_key = '_lp_negative_marking'\n+\t\t\t\tAND meta_value > 0\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t$lp_db->wpdb->query(\n+\t\t\t\t\"\n+\t\t\t\tUPDATE $lp_db->tb_postmeta\n+\t\t\t\tSET meta_value = 'no'\n+\t\t\t\tWHERE meta_key = '_lp_negative_marking'\n+\t\t\t\tAND meta_value != 'yes'\n+\t\t\t\t\"\n+\t\t\t);\n+\t\t\t$lp_db->check_execute_has_error();\n+\n+\t\t\t\u002F\u002F Delete some fields not use.\n+\n+\t\t\t\u002F\u002F Finish upgrade.\n+\t\t\tupdate_option( LP_KEY_DB_VERSION, 4 );\n+\t\t\t\u002F\u002F update_option( 'learnpress_version', LEARNPRESS_VERSION );\n+\t\t\t\u002F\u002F delete_option( 'lp_db_need_upgrade' );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+}\n+\n+LP_Upgrade_4::get_instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fupdates\u002Flearnpress-upgrade-5.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fupdates\u002Flearnpress-upgrade-5.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fupdates\u002Flearnpress-upgrade-5.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fupdates\u002Flearnpress-upgrade-5.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,166 +1,166 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\CoursePostModel;\r\n-use LearnPress\\Models\\Courses;\r\n-\r\n-\u002F**\r\n- * Class LP_Upgrade_5\r\n- *\r\n- * Helper class for updating database to version 5\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.6.9\r\n- *\u002F\r\n-class LP_Upgrade_5 extends LP_Handle_Upgrade_Steps {\r\n-\t\u002F**\r\n-\t * @var LP_Upgrade_4\r\n-\t *\u002F\r\n-\tprotected static $instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * Get Instance\r\n-\t *\r\n-\t * @return LP_Upgrade_5\r\n-\t *\u002F\r\n-\tpublic static function get_instance(): self {\r\n-\t\tif ( null === self::$instance ) {\r\n-\t\t\tself::$instance = new self();\r\n-\t\t}\r\n-\r\n-\t\treturn self::$instance;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * LP_Upgrade_5 constructor.\r\n-\t *\r\n-\t * @see sync_table_courses\r\n-\t * @see finish_upgrade\r\n-\t *\u002F\r\n-\tprotected function __construct() {\r\n-\t\t$this->version = '5.0.0';\r\n-\t\t\u002F**\r\n-\t\t * Name key not > 50 character\r\n-\t\t *\u002F\r\n-\t\t$this->group_steps = apply_filters(\r\n-\t\t\t'lp\u002Fupgrade\u002F5\u002Fsteps',\r\n-\t\t\tarray(\r\n-\t\t\t\t'learnpress_user_items' => new LP_Group_Step(\r\n-\t\t\t\t\t'learnpress_user_items',\r\n-\t\t\t\t\t'Optimize database courses',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'sync_table_courses' => new LP_Step(\r\n-\t\t\t\t\t\t\t'sync_table_courses',\r\n-\t\t\t\t\t\t\t'Sync table courses',\r\n-\t\t\t\t\t\t\t'This process sync post type lp_course to table learnpress_courses'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t'finish_upgrade'     => new LP_Step(\r\n-\t\t\t\t\t\t\t'finish_upgrade',\r\n-\t\t\t\t\t\t\t'Update settings',\r\n-\t\t\t\t\t\t\t'Update settings'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t),\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Step Create Tables\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function sync_table_courses( array $data ): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, 'Sync table courses' );\r\n-\t\t$limit    = 5;\r\n-\t\t$page     = 1;\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( empty( $data ) ) {\r\n-\t\t\t\t\u002F\u002F Check table learnpress_courses exists.\r\n-\t\t\t\tLP_Install::instance()->create_table_courses();\r\n-\r\n-\t\t\t\t$total_row           = 0;\r\n-\t\t\t\t$filter              = new LP_Course_Filter();\r\n-\t\t\t\t$filter->post_status = [];\r\n-\t\t\t\t$filter->where[]     = \"AND p.post_status != 'auto-draft'\";\r\n-\t\t\t\t$filter->limit       = $limit;\r\n-\t\t\t\tCourses::get_courses( $filter, $total_row );\r\n-\t\t\t\t$total_pages = LP_Database::get_total_pages( $limit, $total_row );\r\n-\t\t\t} else {\r\n-\t\t\t\t$page        = $data['page'];\r\n-\t\t\t\t$total_pages = $data['total_pages'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get courses from table posts.\r\n-\t\t\t$filter                  = new LP_Course_Filter();\r\n-\t\t\t$filter->page            = $page;\r\n-\t\t\t$filter->limit           = $limit;\r\n-\t\t\t$filter->post_status     = [];\r\n-\t\t\t$filter->where[]         = \"AND p.post_status != 'auto-draft'\";\r\n-\t\t\t$filter->run_query_count = false;\r\n-\t\t\t$courses                 = Courses::get_courses( $filter );\r\n-\t\t\tforeach ( $courses as $course_obj ) {\r\n-\t\t\t\t$coursePostModel = new CoursePostModel( $course_obj );\r\n-\t\t\t\t$coursePostModel->get_all_metadata();\r\n-\t\t\t\t$courseModelNew = new CourseModel( $coursePostModel );\r\n-\t\t\t\t$courseModelNew->get_price();\r\n-\t\t\t\t$courseModelNew->save();\r\n-\t\t\t\t$bg = LP_Background_Single_Course::instance();\r\n-\t\t\t\t$bg->data(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'handle_name' => 'save_post',\r\n-\t\t\t\t\t\t'course_id'   => $courseModelNew->get_id(),\r\n-\t\t\t\t\t\t'data'        => [],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t)->dispatch();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $page >= $total_pages ) {\r\n-\t\t\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$percent                     = $filter->page * 100 \u002F $total_pages;\r\n-\t\t\t$percent                     = floatval( number_format( $percent, 2 ) );\r\n-\t\t\t$response->percent           = $percent;\r\n-\t\t\t$response->status            = 'success';\r\n-\t\t\t$response->data->page        = ++ $page;\r\n-\t\t\t$response->data->total_pages = $total_pages;\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Convert Learnpress Settings\r\n-\t * 1. Courses thumbnail dimensions convert.\r\n-\t * 2. Profile thumbnail dimensions convert.\r\n-\t * 3. Profile rename dashboard to overview.\r\n-\t * 4. Block course by duration.\r\n-\t * 5. Block course when finished.\r\n-\t * 6. Assessment course by quizzes - Evaluate.\r\n-\t *\r\n-\t * @return LP_Step\r\n-\t *\u002F\r\n-\tprotected function finish_upgrade(): LP_Step {\r\n-\t\t$response = new LP_Step( __FUNCTION__, '' );\r\n-\t\t$lp_db    = LP_Database::getInstance();\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F Finish upgrade.\r\n-\t\t\tupdate_option( LP_KEY_DB_VERSION, 5 );\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\r\n-\r\n-\t\t\treturn $response;\r\n-\t\t}\r\n-\r\n-\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\r\n-\t}\r\n-}\r\n-\r\n-LP_Upgrade_5::get_instance();\r\n+\u003C?php\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\CoursePostModel;\n+use LearnPress\\Models\\Courses;\n+\n+\u002F**\n+ * Class LP_Upgrade_5\n+ *\n+ * Helper class for updating database to version 5\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.6.9\n+ *\u002F\n+class LP_Upgrade_5 extends LP_Handle_Upgrade_Steps {\n+\t\u002F**\n+\t * @var LP_Upgrade_4\n+\t *\u002F\n+\tprotected static $instance = null;\n+\n+\t\u002F**\n+\t * Get Instance\n+\t *\n+\t * @return LP_Upgrade_5\n+\t *\u002F\n+\tpublic static function get_instance(): self {\n+\t\tif ( null === self::$instance ) {\n+\t\t\tself::$instance = new self();\n+\t\t}\n+\n+\t\treturn self::$instance;\n+\t}\n+\n+\t\u002F**\n+\t * LP_Upgrade_5 constructor.\n+\t *\n+\t * @see sync_table_courses\n+\t * @see finish_upgrade\n+\t *\u002F\n+\tprotected function __construct() {\n+\t\t$this->version = '5.0.0';\n+\t\t\u002F**\n+\t\t * Name key not > 50 character\n+\t\t *\u002F\n+\t\t$this->group_steps = apply_filters(\n+\t\t\t'lp\u002Fupgrade\u002F5\u002Fsteps',\n+\t\t\tarray(\n+\t\t\t\t'learnpress_user_items' => new LP_Group_Step(\n+\t\t\t\t\t'learnpress_user_items',\n+\t\t\t\t\t'Optimize database courses',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'sync_table_courses' => new LP_Step(\n+\t\t\t\t\t\t\t'sync_table_courses',\n+\t\t\t\t\t\t\t'Sync table courses',\n+\t\t\t\t\t\t\t'This process sync post type lp_course to table learnpress_courses'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t'finish_upgrade'     => new LP_Step(\n+\t\t\t\t\t\t\t'finish_upgrade',\n+\t\t\t\t\t\t\t'Update settings',\n+\t\t\t\t\t\t\t'Update settings'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t)\n+\t\t\t\t),\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Step Create Tables\n+\t *\n+\t * @param array $data\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function sync_table_courses( array $data ): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, 'Sync table courses' );\n+\t\t$limit    = 5;\n+\t\t$page     = 1;\n+\n+\t\ttry {\n+\t\t\tif ( empty( $data ) ) {\n+\t\t\t\t\u002F\u002F Check table learnpress_courses exists.\n+\t\t\t\tLP_Install::instance()->create_table_courses();\n+\n+\t\t\t\t$total_row           = 0;\n+\t\t\t\t$filter              = new LP_Course_Filter();\n+\t\t\t\t$filter->post_status = [];\n+\t\t\t\t$filter->where[]     = \"AND p.post_status != 'auto-draft'\";\n+\t\t\t\t$filter->limit       = $limit;\n+\t\t\t\tCourses::get_courses( $filter, $total_row );\n+\t\t\t\t$total_pages = LP_Database::get_total_pages( $limit, $total_row );\n+\t\t\t} else {\n+\t\t\t\t$page        = $data['page'];\n+\t\t\t\t$total_pages = $data['total_pages'];\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get courses from table posts.\n+\t\t\t$filter                  = new LP_Course_Filter();\n+\t\t\t$filter->page            = $page;\n+\t\t\t$filter->limit           = $limit;\n+\t\t\t$filter->post_status     = [];\n+\t\t\t$filter->where[]         = \"AND p.post_status != 'auto-draft'\";\n+\t\t\t$filter->run_query_count = false;\n+\t\t\t$courses                 = Courses::get_courses( $filter );\n+\t\t\tforeach ( $courses as $course_obj ) {\n+\t\t\t\t$coursePostModel = new CoursePostModel( $course_obj );\n+\t\t\t\t$coursePostModel->get_all_metadata();\n+\t\t\t\t$courseModelNew = new CourseModel( $coursePostModel );\n+\t\t\t\t$courseModelNew->get_price();\n+\t\t\t\t$courseModelNew->save();\n+\t\t\t\t$bg = LP_Background_Single_Course::instance();\n+\t\t\t\t$bg->data(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'handle_name' => 'save_post',\n+\t\t\t\t\t\t'course_id'   => $courseModelNew->get_id(),\n+\t\t\t\t\t\t'data'        => [],\n+\t\t\t\t\t)\n+\t\t\t\t)->dispatch();\n+\t\t\t}\n+\n+\t\t\tif ( $page >= $total_pages ) {\n+\t\t\t\treturn $this->finish_step( $response, 'Step ' . __FUNCTION__ . ' finished' );\n+\t\t\t}\n+\n+\t\t\t$percent                     = $filter->page * 100 \u002F $total_pages;\n+\t\t\t$percent                     = floatval( number_format( $percent, 2 ) );\n+\t\t\t$response->percent           = $percent;\n+\t\t\t$response->status            = 'success';\n+\t\t\t$response->data->page        = ++ $page;\n+\t\t\t$response->data->total_pages = $total_pages;\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Convert Learnpress Settings\n+\t * 1. Courses thumbnail dimensions convert.\n+\t * 2. Profile thumbnail dimensions convert.\n+\t * 3. Profile rename dashboard to overview.\n+\t * 4. Block course by duration.\n+\t * 5. Block course when finished.\n+\t * 6. Assessment course by quizzes - Evaluate.\n+\t *\n+\t * @return LP_Step\n+\t *\u002F\n+\tprotected function finish_upgrade(): LP_Step {\n+\t\t$response = new LP_Step( __FUNCTION__, '' );\n+\t\t$lp_db    = LP_Database::getInstance();\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F Finish upgrade.\n+\t\t\tupdate_option( LP_KEY_DB_VERSION, 5 );\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$response->message = $this->error_step( $response->name, $e->getMessage() );\n+\n+\t\t\treturn $response;\n+\t\t}\n+\n+\t\treturn $this->finish_step( $response, __FUNCTION__ . ' finished' );\n+\t}\n+}\n+\n+LP_Upgrade_5::get_instance();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fabstract-lp-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fabstract-lp-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fabstract-lp-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fabstract-lp-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1333 +1,1333 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_Abstract_User\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Abstract_User' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Abstract_User\r\n-\t *\u002F\r\n-\tclass LP_Abstract_User extends LP_Abstract_Object_Data {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var WP_User object\r\n-\t\t *\u002F\r\n-\t\tpublic $user = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tpublic $profile_picture_src = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tpublic $profile_picture_type = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_data = array(\r\n-\t\t\t'email'         => '',\r\n-\t\t\t'user_login'    => '',\r\n-\t\t\t'description'   => '',\r\n-\t\t\t'first_name'    => '',\r\n-\t\t\t'last_name'     => '',\r\n-\t\t\t'nickname'      => '',\r\n-\t\t\t'display_name'  => '',\r\n-\t\t\t'date_created'  => '',\r\n-\t\t\t'date_modified' => '',\r\n-\t\t\t'role'          => '',\r\n-\t\t\t'roles'         => array(),\r\n-\t\t);\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User_CURD\r\n-\t\t *\u002F\r\n-\t\tprotected $_curd = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Abstract_User constructor.\r\n-\t\t *\r\n-\t\t * @param int   $the_user\r\n-\t\t * @param array $args\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct( $the_user = 0, $args = array() ) {\r\n-\r\n-\t\t\tparent::__construct( $the_user, $args );\r\n-\r\n-\t\t\t$this->_curd = new LP_User_CURD();\r\n-\r\n-\t\t\tif ( is_numeric( $the_user ) && $the_user > 0 ) {\r\n-\t\t\t\t$this->set_id( $the_user );\r\n-\t\t\t} elseif ( $the_user instanceof self ) {\r\n-\t\t\t\t$this->set_id( absint( $the_user->get_id() ) );\r\n-\t\t\t} elseif ( ! empty( $the_user->ID ) ) {\r\n-\t\t\t\t$this->set_id( absint( $the_user->ID ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->get_id() > 0 ) {\r\n-\t\t\t\t$this->load();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Load user data from curd\r\n-\t\t *\u002F\r\n-\t\tpublic function load() {\r\n-\t\t\t$this->_curd->load( $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get data for a course user has enrolled.\r\n-\t\t *\r\n-\t\t * @param int $course_id .\r\n-\t\t *\r\n-\t\t * @return LP_User_Item_Course|bool\r\n-\t\t * @version  3.1.4\r\n-\t\t * @modify 4.1.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_data( int $course_id = 0 ) {\r\n-\t\t\t$lp_user_items_db   = LP_User_Items_DB::getInstance();\r\n-\t\t\t$object_course_data = false;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userCourseModel = UserCourseModel::find( $this->get_id(), $course_id, true );\r\n-\t\t\t\tif ( $userCourseModel ) {\r\n-\t\t\t\t\t$userCourseArr                 = (array) $userCourseModel;\r\n-\t\t\t\t\t$userCourseArr['user_item_id'] = $userCourseModel->get_user_item_id();\r\n-\t\t\t\t\t$object_course_data            = new LP_User_Item_Course( $userCourseArr );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F**\r\n-\t\t\t\t\t * Todo: some themes still not check false, so still use below code.\\\r\n-\t\t\t\t\t * @editor tungnx 4.1.6.9\r\n-\t\t\t\t\t *\u002F\r\n-\t\t\t\t\t$object_course_data = new LP_User_Item_Course( $course_id );\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$object_course_data = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $object_course_data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get course attend of user not Guest.\r\n-\t\t * Replace get_course_data method.\r\n-\t\t *\r\n-\t\t * @param int $course_id\r\n-\t\t * @return false|UserCourseModel\r\n-\t\t * @since 4.2.5\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_attend( int $course_id = 0 ) {\r\n-\t\t\tif ( $this instanceof LP_User_Guest ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter          = new LP_User_Items_Filter();\r\n-\t\t\t$filter->item_id = $course_id;\r\n-\t\t\t$filter->user_id = $this->get_id();\r\n-\t\t\treturn UserCourseModel::get_user_item_model_from_db( $filter );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user course item.\r\n-\t\t *\r\n-\t\t * @param int    $item_id\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param string $field - Optional. Value of field to return.\r\n-\t\t *\r\n-\t\t * @return LP_User_Item_Quiz|LP_User_Item|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_data( $item_id, $course_id, $field = '' ) {\r\n-\t\t\t$user_item = $this->get_user_item( $item_id, $course_id );\r\n-\r\n-\t\t\tswitch ( $field ) {\r\n-\t\t\t\tcase 'end_time':\r\n-\t\t\t\t\treturn $user_item->get_end_time();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $user_item;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get data for a item user started in table user-items\r\n-\t\t *\r\n-\t\t * @param int $item_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return LP_User_Item_Quiz|LP_User_Item|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_item( $item_id, $course_id ) {\r\n-\t\t\t$data = false;\r\n-\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data ) {\r\n-\t\t\t\t$data = $course_data->get_item( $item_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return TRUE if user has used function for checking the question.\r\n-\t\t *\r\n-\t\t * @param int $question_id\r\n-\t\t * @param int $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function has_checked_question( $question_id, $quiz_id, $course_id = 0 ) {\r\n-\t\t\t$checked = false;\r\n-\r\n-\t\t\tif ( $this->get_quiz_data( $quiz_id, $course_id ) ) {\r\n-\t\t\t\t$data    = $this->get_quiz_data( $quiz_id, $course_id );\r\n-\t\t\t\t$checked = $data->has_checked_question( $question_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser\u002Fchecked-question',\r\n-\t\t\t\t$checked,\r\n-\t\t\t\t$question_id,\r\n-\t\t\t\t$quiz_id,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Magic function to get user data\r\n-\t\t *\r\n-\t\t * @param $key\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function __get( $key ) {\r\n-\t\t\t$return = false;\r\n-\r\n-\t\t\tif ( strtolower( $key ) !== 'id' ) {\r\n-\t\t\t\t_deprecated_argument( __CLASS__ . '::' . $key, '3.0.0' );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! empty( $this->user->data->{$key} ) ) {\r\n-\t\t\t\t$return = $this->user->data->{$key};\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( isset( $this->{$key} ) ) {\r\n-\t\t\t\t\t$return = $this->{$key};\r\n-\t\t\t\t} elseif ( strpos( $key, '_lp_' ) === false ) {\r\n-\t\t\t\t\t$key    = '_lp_' . $key;\r\n-\t\t\t\t\t$return = get_user_meta( $this->get_id(), $key, true );\r\n-\t\t\t\t\tif ( ! empty( $value ) ) {\r\n-\t\t\t\t\t\t$this->$key = $return;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a course is exists then return it's ID.\r\n-\t\t * Try to get it from global.\r\n-\t\t *\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param string $return\r\n-\t\t *\r\n-\t\t * @return bool|false|int|LP_Course\r\n-\t\t *\u002F\r\n-\t\tprotected function _get_course( $course_id, $return = 'id' ) {\r\n-\r\n-\t\t\t\u002F\u002F if $course_id is not passed then try to get it from global\r\n-\t\t\tif ( ! $course_id && learn_press_is_course() ) {\r\n-\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Validate course\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( $course ) {\r\n-\t\t\t\tswitch ( $return ) {\r\n-\t\t\t\t\tcase 'id':\r\n-\t\t\t\t\t\treturn $course_id;\r\n-\t\t\t\t\tcase 'object':\r\n-\t\t\t\t\t\treturn $course;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t *\r\n-\t\t * @param int $item_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tprotected function _verify_course_item( $item_id, $course_id = 0 ) {\r\n-\t\t\t$course = $this->_get_course( $course_id, 'object' );\r\n-\r\n-\t\t\tif ( false !== $course ) {\r\n-\t\t\t\treturn $course->has_item( $item_id ) ? $course_id : false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return TRUE if an item has a status.\r\n-\t\t *\r\n-\t\t * @param array $statuses\r\n-\t\t * @param int   $item_id\r\n-\t\t * @param int   $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function has_item_status( $statuses, $item_id, $course_id ) {\r\n-\t\t\tsettype( $statuses, 'array' );\r\n-\t\t\t$status = $this->get_item_status( $item_id, $course_id );\r\n-\r\n-\t\t\t\u002F\u002FTodo: tungnx\r\n-\t\t\t\u002F\u002F$status = $this->getItemStatus( $item_id, $course_id );\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser-has-item-status',\r\n-\t\t\t\tin_array( $status, $statuses ),\r\n-\t\t\t\t$statuses,\r\n-\t\t\t\t$item_id,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all records of an item.\r\n-\t\t *\r\n-\t\t * @param int  $item_id\r\n-\t\t * @param int  $course_id\r\n-\t\t * @param bool $return_last\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_archive( $item_id, $course_id = 0, $return_last = false ) {\r\n-\t\t\t$records = LP_Object_Cache::get(\r\n-\t\t\t\t'course-item-' . $this->get_id() . '-' . $course_id . '-' . $item_id,\r\n-\t\t\t\t'lp-user-course-items'\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $records ) {\r\n-\t\t\t\t\u002F\u002F $records = array_filter( $records );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $return_last && is_array( $records ) ) {\r\n-\t\t\t\t$records = reset( $records );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $records;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check quiz can retake?\r\n-\t\t *\r\n-\t\t * @param [type] $quiz_id\r\n-\t\t * @param [type] $course_id\r\n-\t\t *\r\n-\t\t * @return boolean\r\n-\t\t *\u002F\r\n-\t\tpublic function has_retake_quiz( $quiz_id, $course_id ): bool {\r\n-\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\r\n-\t\t\t$flag      = false;\r\n-\r\n-\t\t\tif ( $user_quiz ) {\r\n-\t\t\t\t$retaken       = $user_quiz->get_retaken_count();\r\n-\t\t\t\t$retake_config = get_post_meta( $quiz_id, '_lp_retake_count', true );\r\n-\r\n-\t\t\t\tif ( $retake_config == '-1' ) { \u002F\u002F For no limit\r\n-\t\t\t\t\t$flag = true;\r\n-\t\t\t\t} elseif ( absint( $retaken ) \u003C absint( $retake_config ) ) {\r\n-\t\t\t\t\t$flag = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'lp\u002Fquiz\u002Fcan-retake', $flag );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz status for the user\r\n-\t\t *\r\n-\t\t * @param int $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz_status( $quiz_id, $course_id = 0 ) {\r\n-\t\t\treturn $this->get_item_status( $quiz_id, $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get quiz status for the user\r\n-\t\t *\r\n-\t\t * @param int $lesson_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_lesson_status( $lesson_id, $course_id = 0 ) {\r\n-\t\t\treturn $this->get_item_status( $lesson_id, $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int  $item_id\r\n-\t\t * @param int  $course_id\r\n-\t\t * @param bool $last\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item( $item_id, $course_id = 0, $last = false ) {\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\t\t\tif ( $course_data ) {\r\n-\t\t\t\treturn $course_data->get_item( $item_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param int $item_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_grade( $item_id, $course_id = 0 ) {\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$grade = false;\r\n-\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data ) {\r\n-\t\t\t\t$grade = $course_data->get_item_result( $item_id, 'grade' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-item-grade', $grade, $item_id, $this->get_id(), $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current status of an item for user.\r\n-\t\t *\r\n-\t\t * @param int $item_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool|mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_item_status( $item_id, $course_id = 0 ) {\r\n-\t\t\t$status = '';\r\n-\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t\treturn $status;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item = $this->get_item( $item_id, $course_id, true );\r\n-\t\t\tif ( $item instanceof LP_User_Item ) {\r\n-\t\t\t\t$status = $item->get_status();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-item-status', $status, $item_id, $this->get_id(), $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Checks if has status of a quiz for user\r\n-\t\t *\r\n-\t\t * @param string|array $statuses\r\n-\t\t * @param int          $quiz_id\r\n-\t\t * @param int          $course_id\r\n-\t\t * @param boolean      $force\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function has_quiz_status( $statuses, $quiz_id, $course_id = 0, $force = false ) {\r\n-\t\t\t$status = $this->get_quiz_status( $quiz_id, $course_id );\r\n-\r\n-\t\t\tsettype( $statuses, 'array' );\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn_press_user_has_quiz_status',\r\n-\t\t\t\tin_array( $status, $statuses ),\r\n-\t\t\t\t$statuses,\r\n-\t\t\t\t$status,\r\n-\t\t\t\t$quiz_id,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current results of a quiz\r\n-\t\t *\r\n-\t\t * @param int    $quiz_id\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param string $prop\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz_results( $quiz_id, $course_id = 0, $prop = 'result' ) {\r\n-\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\r\n-\r\n-\t\t\treturn $user_quiz ? $user_quiz->get_results( $prop ) : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current progress of user's quiz.\r\n-\t\t *\r\n-\t\t * @param int $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return LP_User_Item_Quiz|false\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz_data( $quiz_id, $course_id = 0 ) {\r\n-\t\t\t$result        = false;\r\n-\t\t\t$course_result = $this->get_course_data( $course_id );\r\n-\t\t\tif ( $course_result ) {\r\n-\t\t\t\t$result = $course_result->get_item( $quiz_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if user has at least one role.\r\n-\t\t *\r\n-\t\t * @param array|string $roles\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function has_role( $roles ) {\r\n-\t\t\tsettype( $roles, 'array' );\r\n-\r\n-\t\t\treturn array_intersect( $roles, $this->get_roles() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Detect the type of user\r\n-\t\t *\r\n-\t\t * @param string|int $type\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is( $type ) {\r\n-\t\t\t$is = false;\r\n-\t\t\tif ( $type === 'current' ) {\r\n-\t\t\t\t$is = $this->is( get_current_user_id() );\r\n-\t\t\t} elseif ( is_string( $type ) ) {\r\n-\t\t\t\t$name = preg_replace( '!LP_User(_?)!', '', get_class( $this ) );\r\n-\t\t\t\t$is   = strtolower( $name ) == strtolower( $type );\r\n-\t\t\t} elseif ( is_numeric( $type ) ) {\r\n-\t\t\t\t$is = $this->get_id() && ( $this->get_id() == $type );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $is;\r\n-\t\t}\r\n-\r\n-\t\tpublic function can_edit_item( $item_id, $course_id = 0 ) {\r\n-\t\t\t$return = $this->is_admin();\r\n-\r\n-\t\t\tif ( ! $return ) {\r\n-\t\t\t\t$course_id = $this->_get_course( $course_id );\r\n-\r\n-\t\t\t\t$course_author = learn_press_get_course_user( $course_id );\r\n-\t\t\t\tif ( $course_author && $course_author->get_id() == $this->get_id() ) {\r\n-\t\t\t\t\t$return = true;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_user_can_edit_item', $return, $item_id, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if course has any passed status for an user.\r\n-\t\t * Statuses: depending on value of column `status` in user_items.\r\n-\t\t *      - purchased: bought and order is completed, `start_date` and `end_date` is null\r\n-\t\t *      - enrolled: value of column `status` in user_items is enrolled\r\n-\t\t *      - started: value of column `status` in user_items is started\r\n-\t\t *      - enrolled: value of column `status` in user_items is enrolled\r\n-\t\t *\r\n-\t\t * @param int          $course_id\r\n-\t\t * @param string|array $statuses\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 2.0\r\n-\t\t *\u002F\r\n-\t\tpublic function has_course_status( $course_id, $statuses ) {\r\n-\t\t\t$status = $this->get_course_status( $course_id );\r\n-\r\n-\t\t\tif ( is_array( $statuses ) ) {\r\n-\t\t\t\treturn in_array( $status, $statuses );\r\n-\t\t\t} elseif ( is_string( $statuses ) ) {\r\n-\t\t\t\treturn $statuses == $status;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Finish course\r\n-\t\t *\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return int|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function finish_course( int $course_id ) {\r\n-\t\t\t$return = false;\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( $course ) {\r\n-\t\t\t\t$user_course = $this->get_course_data( $course_id );\r\n-\t\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\t\treturn $return;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result = $user_course->calculate_course_results();\r\n-\r\n-\t\t\t\t\u002F\u002F Save result for course\r\n-\t\t\t\tLP_User_Items_Result_DB::instance()->update( $user_course->get_user_item_id(), wp_json_encode( $result ) );\r\n-\r\n-\t\t\t\tif ( $result['pass'] ) {\r\n-\t\t\t\t\t$graduation = LP_COURSE_GRADUATION_PASSED;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$graduation = LP_COURSE_GRADUATION_FAILED;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_course->set_graduation( $graduation );\r\n-\t\t\t\t\u002F\u002F$user_course->save();\r\n-\t\t\t\t$return = $user_course->complete( LP_COURSE_FINISHED );\r\n-\r\n-\t\t\t\tif ( $return ) {\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fuser-course-finished', $course_id, $this->get_id(), $return );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-finished-data', $return, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user instructor.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_instructor(): bool {\r\n-\r\n-\t\t\t$roles = $this->get_data( 'roles' ) ? $this->get_data( 'roles' ) : array();\r\n-\r\n-\t\t\treturn in_array( LP_TEACHER_ROLE, $roles );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user admin.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_admin() {\r\n-\t\t\t$roles = $this->get_data( 'roles' ) ? $this->get_data( 'roles' ) : array();\r\n-\r\n-\t\t\treturn in_array( 'administrator', $roles );\r\n-\t\t}\r\n-\r\n-\r\n-\t\tpublic function can_create_course() {\r\n-\t\t\treturn $this->is_instructor() || $this->is_admin();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Wrap function to check this user is author of a post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @since 3.1.0\r\n-\t\t *\u002F\r\n-\t\tpublic function is_author_of( $post_id ) {\r\n-\t\t\treturn absint( get_post_field( 'post_author', $post_id ) ) === $this->get_id();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get( $role ) {\r\n-\t\t\t$args = func_get_args();\r\n-\t\t\tunset( $args[0] );\r\n-\t\t\t$method   = 'get_' . preg_replace( '!-!', '_', $role );\r\n-\t\t\t$callback = array( $this, $method );\r\n-\t\t\tif ( is_callable( $callback ) ) {\r\n-\t\t\t\treturn call_user_func_array( $callback, $args );\r\n-\t\t\t} else {\r\n-\t\t\t\tthrow new Exception( sprintf( __( 'The role %s for the user doesn\\'t exist', 'learnpress' ), $role ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check user has passed course.\r\n-\t\t *\r\n-\t\t * @param $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function has_passed_course( $course_id ) {\r\n-\t\t\t$user_course = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\treturn $user_course && $user_course->is_passed();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Checks if user has started a quiz\r\n-\t\t * - FALSE if user has not started quiz\r\n-\t\t * - String if user has started quiz (status of quiz)\r\n-\t\t *\r\n-\t\t * @param int $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function has_started_quiz( $quiz_id, $course_id = 0 ) {\r\n-\t\t\t$course_id = $this->_get_course( $course_id );\r\n-\t\t\t$started   = false;\r\n-\t\t\t$started   = $this->has_quiz_status( array( 'started', 'completed' ), $quiz_id, $course_id );\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_user_started_quiz', $started, $quiz_id, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if user has completed a quiz\r\n-\t\t *\r\n-\t\t * @param int $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\t\u002F*public function has_completed_quiz( $quiz_id, $course_id = 0 ): bool {\r\n-\t\t\treturn $this->get_item_status( $quiz_id, $course_id ) == 'completed';\r\n-\t\t}*\u002F\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Mark a lesson is completed for user\r\n-\t\t *\r\n-\t\t * @param int  $lesson_id\r\n-\t\t * @param int  $course_id\r\n-\t\t *\r\n-\t\t * @return bool|WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function complete_lesson( $lesson_id = 0, $course_id = 0 ) {\r\n-\t\t\t$result = true;\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\t\t\t\tif ( ! $course_data ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You must enroll course!', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * If user has stared a lesson, get user lesson information\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t$item = $course_data->get_item( $lesson_id );\r\n-\t\t\t\tif ( ! $item ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'Invalid lesson', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $item->is_completed() ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You have already completed this lesson.', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$item->set_graduation( 'passed' );\r\n-\t\t\t\t$updated = $item->complete();\r\n-\r\n-\t\t\t\tdo_action( 'learn-press\u002Fuser-completed-lesson', $lesson_id, $course_id, $this->get_id() );\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$result = new WP_Error( 'error_lesson_complete', $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Returns TRUE if user has already completed a lesson\r\n-\t\t *\r\n-\t\t * @param int  $lesson_id Lesson id.\r\n-\t\t * @param null $course_id Course id.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function has_completed_lesson( $lesson_id = 0, $course_id = null ): bool {\r\n-\t\t\treturn 'completed' === $this->get_item_status( $lesson_id, $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return current status of course for user\r\n-\t\t *\r\n-\t\t * @param int    $course_id\r\n-\t\t * @param string $field\r\n-\t\t * @param bool   $force\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_info( int $course_id, $field = null, $force = false ) {\r\n-\t\t\t$user_data = $this->get_course_data( $course_id );\r\n-\t\t\tif ( $user_data ) {\r\n-\t\t\t\treturn $user_data->get_results( $field );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $course_id\r\n-\t\t *\r\n-\t\t * @return int\r\n-\t\t * @deprecated 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_history_id( $course_id ) {\r\n-\t\t\t$history = $this->get_course_info( $course_id );\r\n-\r\n-\t\t\treturn ! empty( $history['history_id'] ) ? $history['history_id'] : 0;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current status of a course for user.\r\n-\t\t *\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t * @editor tungnx\r\n-\t\t * @modify 4.1.3\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_status( int $course_id ): string {\r\n-\t\t\t$status = '';\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$user_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\t\tif ( $user_data ) {\r\n-\t\t\t\t\t$status = $user_data->get_status();\r\n-\t\t\t\t}\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tif ( LP_Debug::is_debug() ) {\r\n-\t\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-status', $status, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get order status of a course.\r\n-\t\t *\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_order_status( $course_id ) {\r\n-\t\t\ttry {\r\n-\t\t\t\t$order = $this->get_course_order( $course_id );\r\n-\r\n-\t\t\t\tif ( ! $order ) {\r\n-\t\t\t\t\tthrow new Exception( 'Order not exists' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$order_status = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fcourse-order-status',\r\n-\t\t\t\t\tget_post_status( $order->get_id() ),\r\n-\t\t\t\t\t$course_id,\r\n-\t\t\t\t\t$this->get_id()\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\t$order_status = false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $order_status;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check item completed.\r\n-\t\t *\r\n-\t\t * @param      $item\r\n-\t\t * @param int  $course_id\r\n-\t\t * @param bool $force\r\n-\t\t *\r\n-\t\t * @return mixed|void\r\n-\t\t * @version 3.0.1\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function has_completed_item( $item, $course_id = 0, $force = false ) {\r\n-\t\t\t$course_id = $this->_get_course( $course_id );\r\n-\r\n-\t\t\t$return  = false;\r\n-\t\t\t$item_id = 0;\r\n-\t\t\tif ( is_numeric( $item ) ) {\r\n-\t\t\t\t$item_id = absint( $item );\r\n-\t\t\t} else {\r\n-\t\t\t\tsettype( $item, 'array' );\r\n-\t\t\t\tif ( ! empty( $item['ID'] ) ) {\r\n-\t\t\t\t\t$item_id = absint( $item['ID'] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $item_id ) {\r\n-\t\t\t\t$return = 'completed' === $this->get_item_status( $item_id, $course_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_user_has_completed_item', $return, $item );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the order that contains the course.\r\n-\t\t *\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool|LP_Order\r\n-\t\t * @editor tungnx\r\n-\t\t * @throws Exception\r\n-\t\t * @version 1.0.2\r\n-\t\t * @since 4.1.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_order( int $course_id ) {\r\n-\t\t\t$lp_order    = false;\r\n-\t\t\t$lp_order_db = LP_Order_DB::getInstance();\r\n-\t\t\t$lp_order_id = $lp_order_db->get_last_lp_order_id_of_user_course( $this->get_id(), $course_id );\r\n-\r\n-\t\t\tif ( $lp_order_id ) {\r\n-\t\t\t\t$lp_order = new LP_Order( $lp_order_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $lp_order;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param $question_id\r\n-\t\t *\r\n-\t\t * @return null|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quiz_by_question( $question_id ) {\r\n-\t\t\tglobal $wpdb;\r\n-\t\t\t$query = $wpdb->prepare(\r\n-\t\t\t\t\"\r\n-\t\t\tSELECT quiz_id\r\n-\t\t\tFROM {$wpdb->prefix}learnpress_user_items uq\r\n-\t\t\tINNER JOIN {$wpdb->prefix}learnpress_user_itemmeta uqm ON uqm.learnpress_user_item_id = uq.user_item_id AND uqm.meta_key = %s AND uqm.meta_value LIKE %s\r\n-\t\t\",\r\n-\t\t\t\t'questions',\r\n-\t\t\t\t'%i:' . $wpdb->esc_like( $question_id . '' ) . ';%'\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $wpdb->get_var( $query );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_roles() {\r\n-\t\t\treturn (array) $this->get_data( 'roles' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param     $question_id\r\n-\t\t * @param     $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function has_checked_answer( $question_id, $quiz_id, $course_id = 0 ) {\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\t$course_id = get_the_ID();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quiz_data = $this->get_item_data( $quiz_id, $course_id );\r\n-\r\n-\t\t\treturn $quiz_data ? $quiz_data->has_checked_question( $question_id ) : false;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return TRUE if user is already exists.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_exists() {\r\n-\t\t\treturn ! ! get_user_by( 'id', $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the user is logged in.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_logged_in() {\r\n-\t\t\treturn $this->get_id() == get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get upload profile src\r\n-\t\t * Option: null: get origin picture, \"thumbnail\": get thumbnail picture\r\n-\t\t *\r\n-\t\t * @param mixed $size\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_upload_profile_src() {\r\n-\t\t\treturn LP_Profile::instance( $this->get_id() )->get_upload_profile_src();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get profile avatar url\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 4.2.7.2\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_avatar_url(): string {\r\n-\t\t\t$avatar_url = $this->get_upload_profile_src();\r\n-\t\t\tif ( empty( $avatar_url ) ) {\r\n-\t\t\t\t$args       = learn_press_get_avatar_thumb_size();\r\n-\t\t\t\t$avatar_url = get_avatar_url( $this->get_id(), $args );\r\n-\t\t\t\tif ( empty( $avatar_url ) ) {\r\n-\t\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $avatar_url;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @param string $type\r\n-\t\t * @param int    $size\r\n-\t\t * @param bool   $src_only\r\n-\t\t *\r\n-\t\t * @return false|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_picture( $type = '', $size = 96, $src_only = false ) {\r\n-\t\t\treturn LP_Profile::instance( $this->get_id() )->get_profile_picture( $type, $size );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get links socials of use on Profile page\r\n-\t\t * Icon is font awesome\r\n-\t\t *\r\n-\t\t * @param int $user_id\r\n-\t\t * @return array\r\n-\t\t * @deprecated 4.2.3\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_socials( int $user_id = 0 ): array {\r\n-\t\t\t$socials    = array();\r\n-\t\t\t$extra_info = learn_press_get_user_extra_profile_info( $user_id );\r\n-\r\n-\t\t\tif ( $extra_info ) {\r\n-\t\t\t\tforeach ( $extra_info as $k => $v ) {\r\n-\t\t\t\t\tif ( empty( $v ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tswitch ( $k ) {\r\n-\t\t\t\t\t\tcase 'facebook':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-facebook-f\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'twitter':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-twitter\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'googleplus':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-google-plus\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'youtube':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-youtube-play\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'linkedin':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-linkedin\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t$i = sprintf( '\u003Ci class=\"lp-icon-%s\">\u003C\u002Fi>', $k );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$icon          = apply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\r\n-\t\t\t\t\t\t$i,\r\n-\t\t\t\t\t\t$k,\r\n-\t\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t\t$this\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$socials[ $k ] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $v ), $icon );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get links socials of use on Profile page\r\n-\t\t * Icon is svg\r\n-\t\t *\r\n-\t\t * @param int $user_id\r\n-\t\t * @return array\r\n-\t\t * @since 4.2.3\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_social( int $user_id = 0 ): array {\r\n-\t\t\t$socials    = array();\r\n-\t\t\t$extra_info = learn_press_get_user_extra_profile_info( $user_id );\r\n-\r\n-\t\t\tif ( $extra_info ) {\r\n-\t\t\t\tforeach ( $extra_info as $k => $v ) {\r\n-\t\t\t\t\tif ( empty( $v ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tswitch ( $k ) {\r\n-\t\t\t\t\t\tcase 'facebook':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'twitter':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'linkedin':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'youtube':\r\n-\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>';\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tdefault:\r\n-\t\t\t\t\t\t\t$i = sprintf( '\u003Ci class=\"lp-user-ico lp-icon-%s\">\u003C\u002Fi>', esc_attr( $k ) );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$icon          = apply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\r\n-\t\t\t\t\t\t$i,\r\n-\t\t\t\t\t\t$k,\r\n-\t\t\t\t\t\t$this->get_id(),\r\n-\t\t\t\t\t\t$this\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\t$socials[ $k ] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $v ), $icon );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check course of user has graduation is in-progress\r\n-\t\t *\r\n-\t\t * @param $course_id\r\n-\t\t * @return bool\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function is_course_in_progress( $course_id ): bool {\r\n-\t\t\t$user        = learn_press_get_user( $this->get_id() );\r\n-\t\t\t$user_course = $user->get_course_data( $course_id );\r\n-\r\n-\t\t\treturn $user_course && LP_COURSE_GRADUATION_IN_PROGRESS === $user_course->get_graduation();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return TRUE if user can do a quiz\r\n-\t\t *\r\n-\t\t * @param     $quiz_id\r\n-\t\t * @param int $course_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function can_do_quiz( $quiz_id, $course_id = 0 ) {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course->is_no_required_enroll() ) {\r\n-\t\t\t\t$can = $this->has_course_status( $course_id, array( 'enrolled' ) ) && ! $this->has_started_quiz( $quiz_id, $course_id );\r\n-\t\t\t} else {\r\n-\t\t\t\t$can = ! $this->has_started_quiz( $quiz_id, $course_id );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn_press_user_can_do_quiz', $can, $quiz_id, $this->get_id(), $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if all items in course completed.\r\n-\t\t *\r\n-\t\t * @return boolean\r\n-\t\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t\t *\u002F\r\n-\t\tpublic function is_completed_all_items( $course_id ) {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\t$course_results = $course_data->get_result();\r\n-\r\n-\t\t\tif ( ! isset( $course_results['completed_items'] ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $course_results['completed_items'] >= $course->count_items();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get role of user.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_role() {\r\n-\t\t\treturn $this->get_data( 'role' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get user course's grade.\r\n-\t\t * Possible values:\r\n-\t\t *        + passed        User has finished and passed course.\r\n-\t\t *        + failed        User has finished but failed.\r\n-\t\t *        + in-progress    User still is learning course.\r\n-\t\t *\r\n-\t\t * @param $course_id\r\n-\t\t *\r\n-\t\t * @return string|bool\r\n-\t\t *\u002F\r\n-\t\tpublic function get_course_grade( $course_id ) {\r\n-\t\t\t$grade       = false;\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data ) {\r\n-\t\t\t\t$grade = $course_data->get_status( 'graduation' );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-grade', $grade, $this->get_id(), $course_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if user is a GUEST by checking the meta _lp_temp_user is exists.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_guest(): bool {\r\n-\t\t\treturn $this instanceof LP_User_Guest;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if user can edit a post.\r\n-\t\t *\r\n-\t\t * @param int $post_id\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function can_edit( int $post_id ): bool {\r\n-\t\t\tif ( $this->get_id() !== get_current_user_id() ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn current_user_can( 'edit_post', $post_id );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get email of user\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_email(): string {\r\n-\t\t\treturn $this->get_data( 'email', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user_login of the user.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_username(): string {\r\n-\t\t\treturn $this->get_data( 'user_login', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user bio information.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_description(): string {\r\n-\t\t\treturn get_the_author_meta( 'description', $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user first name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_first_name(): string {\r\n-\t\t\treturn $this->get_data( 'first_name', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user last name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_last_name(): string {\r\n-\t\t\treturn $this->get_data( 'last_name', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user nickname.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_nickname(): string {\r\n-\t\t\treturn $this->get_data( 'nickname', '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return user display name.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_display_name(): string {\r\n-\t\t\treturn $this->get_data( 'display_name', '' );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_Abstract_User\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Abstract_User' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Abstract_User\n+\t *\u002F\n+\tclass LP_Abstract_User extends LP_Abstract_Object_Data {\n+\n+\t\t\u002F**\n+\t\t * @var WP_User object\n+\t\t *\u002F\n+\t\tpublic $user = false;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tpublic $profile_picture_src = null;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tpublic $profile_picture_type = null;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_data = array(\n+\t\t\t'email'         => '',\n+\t\t\t'user_login'    => '',\n+\t\t\t'description'   => '',\n+\t\t\t'first_name'    => '',\n+\t\t\t'last_name'     => '',\n+\t\t\t'nickname'      => '',\n+\t\t\t'display_name'  => '',\n+\t\t\t'date_created'  => '',\n+\t\t\t'date_modified' => '',\n+\t\t\t'role'          => '',\n+\t\t\t'roles'         => array(),\n+\t\t);\n+\n+\t\t\u002F**\n+\t\t * @var LP_User_CURD\n+\t\t *\u002F\n+\t\tprotected $_curd = null;\n+\n+\t\t\u002F**\n+\t\t * LP_Abstract_User constructor.\n+\t\t *\n+\t\t * @param int   $the_user\n+\t\t * @param array $args\n+\t\t *\u002F\n+\t\tpublic function __construct( $the_user = 0, $args = array() ) {\n+\n+\t\t\tparent::__construct( $the_user, $args );\n+\n+\t\t\t$this->_curd = new LP_User_CURD();\n+\n+\t\t\tif ( is_numeric( $the_user ) && $the_user > 0 ) {\n+\t\t\t\t$this->set_id( $the_user );\n+\t\t\t} elseif ( $the_user instanceof self ) {\n+\t\t\t\t$this->set_id( absint( $the_user->get_id() ) );\n+\t\t\t} elseif ( ! empty( $the_user->ID ) ) {\n+\t\t\t\t$this->set_id( absint( $the_user->ID ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->get_id() > 0 ) {\n+\t\t\t\t$this->load();\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Load user data from curd\n+\t\t *\u002F\n+\t\tpublic function load() {\n+\t\t\t$this->_curd->load( $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get data for a course user has enrolled.\n+\t\t *\n+\t\t * @param int $course_id .\n+\t\t *\n+\t\t * @return LP_User_Item_Course|bool\n+\t\t * @version  3.1.4\n+\t\t * @modify 4.1.3\n+\t\t *\u002F\n+\t\tpublic function get_course_data( int $course_id = 0 ) {\n+\t\t\t$lp_user_items_db   = LP_User_Items_DB::getInstance();\n+\t\t\t$object_course_data = false;\n+\n+\t\t\ttry {\n+\t\t\t\tif ( ! $course_id ) {\n+\t\t\t\t\t$course_id = get_the_ID();\n+\t\t\t\t}\n+\n+\t\t\t\t$userCourseModel = UserCourseModel::find( $this->get_id(), $course_id, true );\n+\t\t\t\tif ( $userCourseModel ) {\n+\t\t\t\t\t$userCourseArr                 = (array) $userCourseModel;\n+\t\t\t\t\t$userCourseArr['user_item_id'] = $userCourseModel->get_user_item_id();\n+\t\t\t\t\t$object_course_data            = new LP_User_Item_Course( $userCourseArr );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F**\n+\t\t\t\t\t * Todo: some themes still not check false, so still use below code.\\\n+\t\t\t\t\t * @editor tungnx 4.1.6.9\n+\t\t\t\t\t *\u002F\n+\t\t\t\t\t$object_course_data = new LP_User_Item_Course( $course_id );\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$object_course_data = false;\n+\t\t\t}\n+\n+\t\t\treturn $object_course_data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get course attend of user not Guest.\n+\t\t * Replace get_course_data method.\n+\t\t *\n+\t\t * @param int $course_id\n+\t\t * @return false|UserCourseModel\n+\t\t * @since 4.2.5\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_course_attend( int $course_id = 0 ) {\n+\t\t\tif ( $this instanceof LP_User_Guest ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$filter          = new LP_User_Items_Filter();\n+\t\t\t$filter->item_id = $course_id;\n+\t\t\t$filter->user_id = $this->get_id();\n+\t\t\treturn UserCourseModel::get_user_item_model_from_db( $filter );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user course item.\n+\t\t *\n+\t\t * @param int    $item_id\n+\t\t * @param int    $course_id\n+\t\t * @param string $field - Optional. Value of field to return.\n+\t\t *\n+\t\t * @return LP_User_Item_Quiz|LP_User_Item|bool\n+\t\t *\u002F\n+\t\tpublic function get_item_data( $item_id, $course_id, $field = '' ) {\n+\t\t\t$user_item = $this->get_user_item( $item_id, $course_id );\n+\n+\t\t\tswitch ( $field ) {\n+\t\t\t\tcase 'end_time':\n+\t\t\t\t\treturn $user_item->get_end_time();\n+\t\t\t}\n+\n+\t\t\treturn $user_item;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get data for a item user started in table user-items\n+\t\t *\n+\t\t * @param int $item_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return LP_User_Item_Quiz|LP_User_Item|bool\n+\t\t *\u002F\n+\t\tpublic function get_user_item( $item_id, $course_id ) {\n+\t\t\t$data = false;\n+\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data ) {\n+\t\t\t\t$data = $course_data->get_item( $item_id );\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return TRUE if user has used function for checking the question.\n+\t\t *\n+\t\t * @param int $question_id\n+\t\t * @param int $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function has_checked_question( $question_id, $quiz_id, $course_id = 0 ) {\n+\t\t\t$checked = false;\n+\n+\t\t\tif ( $this->get_quiz_data( $quiz_id, $course_id ) ) {\n+\t\t\t\t$data    = $this->get_quiz_data( $quiz_id, $course_id );\n+\t\t\t\t$checked = $data->has_checked_question( $question_id );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fuser\u002Fchecked-question',\n+\t\t\t\t$checked,\n+\t\t\t\t$question_id,\n+\t\t\t\t$quiz_id,\n+\t\t\t\t$course_id,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Magic function to get user data\n+\t\t *\n+\t\t * @param $key\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function __get( $key ) {\n+\t\t\t$return = false;\n+\n+\t\t\tif ( strtolower( $key ) !== 'id' ) {\n+\t\t\t\t_deprecated_argument( __CLASS__ . '::' . $key, '3.0.0' );\n+\t\t\t}\n+\n+\t\t\tif ( ! empty( $this->user->data->{$key} ) ) {\n+\t\t\t\t$return = $this->user->data->{$key};\n+\t\t\t} else {\n+\t\t\t\tif ( isset( $this->{$key} ) ) {\n+\t\t\t\t\t$return = $this->{$key};\n+\t\t\t\t} elseif ( strpos( $key, '_lp_' ) === false ) {\n+\t\t\t\t\t$key    = '_lp_' . $key;\n+\t\t\t\t\t$return = get_user_meta( $this->get_id(), $key, true );\n+\t\t\t\t\tif ( ! empty( $value ) ) {\n+\t\t\t\t\t\t$this->$key = $return;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $return;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a course is exists then return it's ID.\n+\t\t * Try to get it from global.\n+\t\t *\n+\t\t * @param int    $course_id\n+\t\t * @param string $return\n+\t\t *\n+\t\t * @return bool|false|int|LP_Course\n+\t\t *\u002F\n+\t\tprotected function _get_course( $course_id, $return = 'id' ) {\n+\n+\t\t\t\u002F\u002F if $course_id is not passed then try to get it from global\n+\t\t\tif ( ! $course_id && learn_press_is_course() ) {\n+\t\t\t\t$course_id = get_the_ID();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Validate course\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( $course ) {\n+\t\t\t\tswitch ( $return ) {\n+\t\t\t\t\tcase 'id':\n+\t\t\t\t\t\treturn $course_id;\n+\t\t\t\t\tcase 'object':\n+\t\t\t\t\t\treturn $course;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t *\n+\t\t * @param int $item_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tprotected function _verify_course_item( $item_id, $course_id = 0 ) {\n+\t\t\t$course = $this->_get_course( $course_id, 'object' );\n+\n+\t\t\tif ( false !== $course ) {\n+\t\t\t\treturn $course->has_item( $item_id ) ? $course_id : false;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return TRUE if an item has a status.\n+\t\t *\n+\t\t * @param array $statuses\n+\t\t * @param int   $item_id\n+\t\t * @param int   $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function has_item_status( $statuses, $item_id, $course_id ) {\n+\t\t\tsettype( $statuses, 'array' );\n+\t\t\t$status = $this->get_item_status( $item_id, $course_id );\n+\n+\t\t\t\u002F\u002FTodo: tungnx\n+\t\t\t\u002F\u002F$status = $this->getItemStatus( $item_id, $course_id );\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fuser-has-item-status',\n+\t\t\t\tin_array( $status, $statuses ),\n+\t\t\t\t$statuses,\n+\t\t\t\t$item_id,\n+\t\t\t\t$course_id,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all records of an item.\n+\t\t *\n+\t\t * @param int  $item_id\n+\t\t * @param int  $course_id\n+\t\t * @param bool $return_last\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function get_item_archive( $item_id, $course_id = 0, $return_last = false ) {\n+\t\t\t$records = LP_Object_Cache::get(\n+\t\t\t\t'course-item-' . $this->get_id() . '-' . $course_id . '-' . $item_id,\n+\t\t\t\t'lp-user-course-items'\n+\t\t\t);\n+\n+\t\t\tif ( $records ) {\n+\t\t\t\t\u002F\u002F $records = array_filter( $records );\n+\t\t\t}\n+\n+\t\t\tif ( $return_last && is_array( $records ) ) {\n+\t\t\t\t$records = reset( $records );\n+\t\t\t}\n+\n+\t\t\treturn $records;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check quiz can retake?\n+\t\t *\n+\t\t * @param [type] $quiz_id\n+\t\t * @param [type] $course_id\n+\t\t *\n+\t\t * @return boolean\n+\t\t *\u002F\n+\t\tpublic function has_retake_quiz( $quiz_id, $course_id ): bool {\n+\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\n+\t\t\t$flag      = false;\n+\n+\t\t\tif ( $user_quiz ) {\n+\t\t\t\t$retaken       = $user_quiz->get_retaken_count();\n+\t\t\t\t$retake_config = get_post_meta( $quiz_id, '_lp_retake_count', true );\n+\n+\t\t\t\tif ( $retake_config == '-1' ) { \u002F\u002F For no limit\n+\t\t\t\t\t$flag = true;\n+\t\t\t\t} elseif ( absint( $retaken ) \u003C absint( $retake_config ) ) {\n+\t\t\t\t\t$flag = true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'lp\u002Fquiz\u002Fcan-retake', $flag );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get quiz status for the user\n+\t\t *\n+\t\t * @param int $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_quiz_status( $quiz_id, $course_id = 0 ) {\n+\t\t\treturn $this->get_item_status( $quiz_id, $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get quiz status for the user\n+\t\t *\n+\t\t * @param int $lesson_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_lesson_status( $lesson_id, $course_id = 0 ) {\n+\t\t\treturn $this->get_item_status( $lesson_id, $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param int  $item_id\n+\t\t * @param int  $course_id\n+\t\t * @param bool $last\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function get_item( $item_id, $course_id = 0, $last = false ) {\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\t$course_id = get_the_ID();\n+\t\t\t}\n+\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\t\t\tif ( $course_data ) {\n+\t\t\t\treturn $course_data->get_item( $item_id );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param int $item_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function get_item_grade( $item_id, $course_id = 0 ) {\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\t$course_id = get_the_ID();\n+\t\t\t}\n+\n+\t\t\t$grade = false;\n+\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data ) {\n+\t\t\t\t$grade = $course_data->get_item_result( $item_id, 'grade' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-item-grade', $grade, $item_id, $this->get_id(), $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current status of an item for user.\n+\t\t *\n+\t\t * @param int $item_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool|mixed\n+\t\t *\u002F\n+\t\tpublic function get_item_status( $item_id, $course_id = 0 ) {\n+\t\t\t$status = '';\n+\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\t$course_id = get_the_ID();\n+\t\t\t\tif ( ! $course_id ) {\n+\t\t\t\t\treturn $status;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$item = $this->get_item( $item_id, $course_id, true );\n+\t\t\tif ( $item instanceof LP_User_Item ) {\n+\t\t\t\t$status = $item->get_status();\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-item-status', $status, $item_id, $this->get_id(), $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Checks if has status of a quiz for user\n+\t\t *\n+\t\t * @param string|array $statuses\n+\t\t * @param int          $quiz_id\n+\t\t * @param int          $course_id\n+\t\t * @param boolean      $force\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function has_quiz_status( $statuses, $quiz_id, $course_id = 0, $force = false ) {\n+\t\t\t$status = $this->get_quiz_status( $quiz_id, $course_id );\n+\n+\t\t\tsettype( $statuses, 'array' );\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn_press_user_has_quiz_status',\n+\t\t\t\tin_array( $status, $statuses ),\n+\t\t\t\t$statuses,\n+\t\t\t\t$status,\n+\t\t\t\t$quiz_id,\n+\t\t\t\t$course_id,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current results of a quiz\n+\t\t *\n+\t\t * @param int    $quiz_id\n+\t\t * @param int    $course_id\n+\t\t * @param string $prop\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_quiz_results( $quiz_id, $course_id = 0, $prop = 'result' ) {\n+\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\n+\n+\t\t\treturn $user_quiz ? $user_quiz->get_results( $prop ) : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current progress of user's quiz.\n+\t\t *\n+\t\t * @param int $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return LP_User_Item_Quiz|false\n+\t\t *\u002F\n+\t\tpublic function get_quiz_data( $quiz_id, $course_id = 0 ) {\n+\t\t\t$result        = false;\n+\t\t\t$course_result = $this->get_course_data( $course_id );\n+\t\t\tif ( $course_result ) {\n+\t\t\t\t$result = $course_result->get_item( $quiz_id );\n+\t\t\t}\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if user has at least one role.\n+\t\t *\n+\t\t * @param array|string $roles\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function has_role( $roles ) {\n+\t\t\tsettype( $roles, 'array' );\n+\n+\t\t\treturn array_intersect( $roles, $this->get_roles() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Detect the type of user\n+\t\t *\n+\t\t * @param string|int $type\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is( $type ) {\n+\t\t\t$is = false;\n+\t\t\tif ( $type === 'current' ) {\n+\t\t\t\t$is = $this->is( get_current_user_id() );\n+\t\t\t} elseif ( is_string( $type ) ) {\n+\t\t\t\t$name = preg_replace( '!LP_User(_?)!', '', get_class( $this ) );\n+\t\t\t\t$is   = strtolower( $name ) == strtolower( $type );\n+\t\t\t} elseif ( is_numeric( $type ) ) {\n+\t\t\t\t$is = $this->get_id() && ( $this->get_id() == $type );\n+\t\t\t}\n+\n+\t\t\treturn $is;\n+\t\t}\n+\n+\t\tpublic function can_edit_item( $item_id, $course_id = 0 ) {\n+\t\t\t$return = $this->is_admin();\n+\n+\t\t\tif ( ! $return ) {\n+\t\t\t\t$course_id = $this->_get_course( $course_id );\n+\n+\t\t\t\t$course_author = learn_press_get_course_user( $course_id );\n+\t\t\t\tif ( $course_author && $course_author->get_id() == $this->get_id() ) {\n+\t\t\t\t\t$return = true;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn_press_user_can_edit_item', $return, $item_id, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if course has any passed status for an user.\n+\t\t * Statuses: depending on value of column `status` in user_items.\n+\t\t *      - purchased: bought and order is completed, `start_date` and `end_date` is null\n+\t\t *      - enrolled: value of column `status` in user_items is enrolled\n+\t\t *      - started: value of column `status` in user_items is started\n+\t\t *      - enrolled: value of column `status` in user_items is enrolled\n+\t\t *\n+\t\t * @param int          $course_id\n+\t\t * @param string|array $statuses\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 2.0\n+\t\t *\u002F\n+\t\tpublic function has_course_status( $course_id, $statuses ) {\n+\t\t\t$status = $this->get_course_status( $course_id );\n+\n+\t\t\tif ( is_array( $statuses ) ) {\n+\t\t\t\treturn in_array( $status, $statuses );\n+\t\t\t} elseif ( is_string( $statuses ) ) {\n+\t\t\t\treturn $statuses == $status;\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Finish course\n+\t\t *\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return int|bool\n+\t\t *\u002F\n+\t\tpublic function finish_course( int $course_id ) {\n+\t\t\t$return = false;\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( $course ) {\n+\t\t\t\t$user_course = $this->get_course_data( $course_id );\n+\t\t\t\tif ( ! $user_course ) {\n+\t\t\t\t\treturn $return;\n+\t\t\t\t}\n+\n+\t\t\t\t$result = $user_course->calculate_course_results();\n+\n+\t\t\t\t\u002F\u002F Save result for course\n+\t\t\t\tLP_User_Items_Result_DB::instance()->update( $user_course->get_user_item_id(), wp_json_encode( $result ) );\n+\n+\t\t\t\tif ( $result['pass'] ) {\n+\t\t\t\t\t$graduation = LP_COURSE_GRADUATION_PASSED;\n+\t\t\t\t} else {\n+\t\t\t\t\t$graduation = LP_COURSE_GRADUATION_FAILED;\n+\t\t\t\t}\n+\n+\t\t\t\t$user_course->set_graduation( $graduation );\n+\t\t\t\t\u002F\u002F$user_course->save();\n+\t\t\t\t$return = $user_course->complete( LP_COURSE_FINISHED );\n+\n+\t\t\t\tif ( $return ) {\n+\t\t\t\t\tdo_action( 'learn-press\u002Fuser-course-finished', $course_id, $this->get_id(), $return );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-finished-data', $return, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user instructor.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_instructor(): bool {\n+\n+\t\t\t$roles = $this->get_data( 'roles' ) ? $this->get_data( 'roles' ) : array();\n+\n+\t\t\treturn in_array( LP_TEACHER_ROLE, $roles );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user admin.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_admin() {\n+\t\t\t$roles = $this->get_data( 'roles' ) ? $this->get_data( 'roles' ) : array();\n+\n+\t\t\treturn in_array( 'administrator', $roles );\n+\t\t}\n+\n+\n+\t\tpublic function can_create_course() {\n+\t\t\treturn $this->is_instructor() || $this->is_admin();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Wrap function to check this user is author of a post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @since 3.1.0\n+\t\t *\u002F\n+\t\tpublic function is_author_of( $post_id ) {\n+\t\t\treturn absint( get_post_field( 'post_author', $post_id ) ) === $this->get_id();\n+\t\t}\n+\n+\t\tpublic function get( $role ) {\n+\t\t\t$args = func_get_args();\n+\t\t\tunset( $args[0] );\n+\t\t\t$method   = 'get_' . preg_replace( '!-!', '_', $role );\n+\t\t\t$callback = array( $this, $method );\n+\t\t\tif ( is_callable( $callback ) ) {\n+\t\t\t\treturn call_user_func_array( $callback, $args );\n+\t\t\t} else {\n+\t\t\t\tthrow new Exception( sprintf( __( 'The role %s for the user doesn\\'t exist', 'learnpress' ), $role ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check user has passed course.\n+\t\t *\n+\t\t * @param $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function has_passed_course( $course_id ) {\n+\t\t\t$user_course = $this->get_course_data( $course_id );\n+\n+\t\t\treturn $user_course && $user_course->is_passed();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Checks if user has started a quiz\n+\t\t * - FALSE if user has not started quiz\n+\t\t * - String if user has started quiz (status of quiz)\n+\t\t *\n+\t\t * @param int $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function has_started_quiz( $quiz_id, $course_id = 0 ) {\n+\t\t\t$course_id = $this->_get_course( $course_id );\n+\t\t\t$started   = false;\n+\t\t\t$started   = $this->has_quiz_status( array( 'started', 'completed' ), $quiz_id, $course_id );\n+\n+\t\t\treturn apply_filters( 'learn_press_user_started_quiz', $started, $quiz_id, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if user has completed a quiz\n+\t\t *\n+\t\t * @param int $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\t\u002F*public function has_completed_quiz( $quiz_id, $course_id = 0 ): bool {\n+\t\t\treturn $this->get_item_status( $quiz_id, $course_id ) == 'completed';\n+\t\t}*\u002F\n+\n+\t\t\u002F**\n+\t\t * Mark a lesson is completed for user\n+\t\t *\n+\t\t * @param int  $lesson_id\n+\t\t * @param int  $course_id\n+\t\t *\n+\t\t * @return bool|WP_Error\n+\t\t *\u002F\n+\t\tpublic function complete_lesson( $lesson_id = 0, $course_id = 0 ) {\n+\t\t\t$result = true;\n+\n+\t\t\ttry {\n+\t\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\tthrow new Exception( __( 'Invalid course', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$course_data = $this->get_course_data( $course_id );\n+\t\t\t\tif ( ! $course_data ) {\n+\t\t\t\t\tthrow new Exception( __( 'You must enroll course!', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * If user has stared a lesson, get user lesson information\n+\t\t\t\t *\u002F\n+\t\t\t\t$item = $course_data->get_item( $lesson_id );\n+\t\t\t\tif ( ! $item ) {\n+\t\t\t\t\tthrow new Exception( __( 'Invalid lesson', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $item->is_completed() ) {\n+\t\t\t\t\tthrow new Exception( __( 'You have already completed this lesson.', 'learnpress' ) );\n+\t\t\t\t}\n+\n+\t\t\t\t$item->set_graduation( 'passed' );\n+\t\t\t\t$updated = $item->complete();\n+\n+\t\t\t\tdo_action( 'learn-press\u002Fuser-completed-lesson', $lesson_id, $course_id, $this->get_id() );\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$result = new WP_Error( 'error_lesson_complete', $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Returns TRUE if user has already completed a lesson\n+\t\t *\n+\t\t * @param int  $lesson_id Lesson id.\n+\t\t * @param null $course_id Course id.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\tpublic function has_completed_lesson( $lesson_id = 0, $course_id = null ): bool {\n+\t\t\treturn 'completed' === $this->get_item_status( $lesson_id, $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return current status of course for user\n+\t\t *\n+\t\t * @param int    $course_id\n+\t\t * @param string $field\n+\t\t * @param bool   $force\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_course_info( int $course_id, $field = null, $force = false ) {\n+\t\t\t$user_data = $this->get_course_data( $course_id );\n+\t\t\tif ( $user_data ) {\n+\t\t\t\treturn $user_data->get_results( $field );\n+\t\t\t}\n+\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $course_id\n+\t\t *\n+\t\t * @return int\n+\t\t * @deprecated 4.1.6.9\n+\t\t *\u002F\n+\t\tpublic function get_course_history_id( $course_id ) {\n+\t\t\t$history = $this->get_course_info( $course_id );\n+\n+\t\t\treturn ! empty( $history['history_id'] ) ? $history['history_id'] : 0;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current status of a course for user.\n+\t\t *\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t * @editor tungnx\n+\t\t * @modify 4.1.3\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_course_status( int $course_id ): string {\n+\t\t\t$status = '';\n+\n+\t\t\ttry {\n+\t\t\t\t$user_data = $this->get_course_data( $course_id );\n+\n+\t\t\t\tif ( $user_data ) {\n+\t\t\t\t\t$status = $user_data->get_status();\n+\t\t\t\t}\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tif ( LP_Debug::is_debug() ) {\n+\t\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-status', $status, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get order status of a course.\n+\t\t *\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_order_status( $course_id ) {\n+\t\t\ttry {\n+\t\t\t\t$order = $this->get_course_order( $course_id );\n+\n+\t\t\t\tif ( ! $order ) {\n+\t\t\t\t\tthrow new Exception( 'Order not exists' );\n+\t\t\t\t}\n+\n+\t\t\t\t$order_status = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fcourse-order-status',\n+\t\t\t\t\tget_post_status( $order->get_id() ),\n+\t\t\t\t\t$course_id,\n+\t\t\t\t\t$this->get_id()\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\t$order_status = false;\n+\t\t\t}\n+\n+\t\t\treturn $order_status;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check item completed.\n+\t\t *\n+\t\t * @param      $item\n+\t\t * @param int  $course_id\n+\t\t * @param bool $force\n+\t\t *\n+\t\t * @return mixed|void\n+\t\t * @version 3.0.1\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic function has_completed_item( $item, $course_id = 0, $force = false ) {\n+\t\t\t$course_id = $this->_get_course( $course_id );\n+\n+\t\t\t$return  = false;\n+\t\t\t$item_id = 0;\n+\t\t\tif ( is_numeric( $item ) ) {\n+\t\t\t\t$item_id = absint( $item );\n+\t\t\t} else {\n+\t\t\t\tsettype( $item, 'array' );\n+\t\t\t\tif ( ! empty( $item['ID'] ) ) {\n+\t\t\t\t\t$item_id = absint( $item['ID'] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $item_id ) {\n+\t\t\t\t$return = 'completed' === $this->get_item_status( $item_id, $course_id );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn_press_user_has_completed_item', $return, $item );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the order that contains the course.\n+\t\t *\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool|LP_Order\n+\t\t * @editor tungnx\n+\t\t * @throws Exception\n+\t\t * @version 1.0.2\n+\t\t * @since 4.1.1\n+\t\t *\u002F\n+\t\tpublic function get_course_order( int $course_id ) {\n+\t\t\t$lp_order    = false;\n+\t\t\t$lp_order_db = LP_Order_DB::getInstance();\n+\t\t\t$lp_order_id = $lp_order_db->get_last_lp_order_id_of_user_course( $this->get_id(), $course_id );\n+\n+\t\t\tif ( $lp_order_id ) {\n+\t\t\t\t$lp_order = new LP_Order( $lp_order_id );\n+\t\t\t}\n+\n+\t\t\treturn $lp_order;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param $question_id\n+\t\t *\n+\t\t * @return null|string\n+\t\t *\u002F\n+\t\tpublic function get_quiz_by_question( $question_id ) {\n+\t\t\tglobal $wpdb;\n+\t\t\t$query = $wpdb->prepare(\n+\t\t\t\t\"\n+\t\t\tSELECT quiz_id\n+\t\t\tFROM {$wpdb->prefix}learnpress_user_items uq\n+\t\t\tINNER JOIN {$wpdb->prefix}learnpress_user_itemmeta uqm ON uqm.learnpress_user_item_id = uq.user_item_id AND uqm.meta_key = %s AND uqm.meta_value LIKE %s\n+\t\t\",\n+\t\t\t\t'questions',\n+\t\t\t\t'%i:' . $wpdb->esc_like( $question_id . '' ) . ';%'\n+\t\t\t);\n+\n+\t\t\treturn $wpdb->get_var( $query );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_roles() {\n+\t\t\treturn (array) $this->get_data( 'roles' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param     $question_id\n+\t\t * @param     $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function has_checked_answer( $question_id, $quiz_id, $course_id = 0 ) {\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\t$course_id = get_the_ID();\n+\t\t\t}\n+\n+\t\t\t$quiz_data = $this->get_item_data( $quiz_id, $course_id );\n+\n+\t\t\treturn $quiz_data ? $quiz_data->has_checked_question( $question_id ) : false;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return TRUE if user is already exists.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_exists() {\n+\t\t\treturn ! ! get_user_by( 'id', $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the user is logged in.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_logged_in() {\n+\t\t\treturn $this->get_id() == get_current_user_id();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get upload profile src\n+\t\t * Option: null: get origin picture, \"thumbnail\": get thumbnail picture\n+\t\t *\n+\t\t * @param mixed $size\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_upload_profile_src() {\n+\t\t\treturn LP_Profile::instance( $this->get_id() )->get_upload_profile_src();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get profile avatar url\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 4.2.7.2\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function get_profile_avatar_url(): string {\n+\t\t\t$avatar_url = $this->get_upload_profile_src();\n+\t\t\tif ( empty( $avatar_url ) ) {\n+\t\t\t\t$args       = learn_press_get_avatar_thumb_size();\n+\t\t\t\t$avatar_url = get_avatar_url( $this->get_id(), $args );\n+\t\t\t\tif ( empty( $avatar_url ) ) {\n+\t\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $avatar_url;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @param string $type\n+\t\t * @param int    $size\n+\t\t * @param bool   $src_only\n+\t\t *\n+\t\t * @return false|string\n+\t\t *\u002F\n+\t\tpublic function get_profile_picture( $type = '', $size = 96, $src_only = false ) {\n+\t\t\treturn LP_Profile::instance( $this->get_id() )->get_profile_picture( $type, $size );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get links socials of use on Profile page\n+\t\t * Icon is font awesome\n+\t\t *\n+\t\t * @param int $user_id\n+\t\t * @return array\n+\t\t * @deprecated 4.2.3\n+\t\t *\u002F\n+\t\tpublic function get_profile_socials( int $user_id = 0 ): array {\n+\t\t\t$socials    = array();\n+\t\t\t$extra_info = learn_press_get_user_extra_profile_info( $user_id );\n+\n+\t\t\tif ( $extra_info ) {\n+\t\t\t\tforeach ( $extra_info as $k => $v ) {\n+\t\t\t\t\tif ( empty( $v ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tswitch ( $k ) {\n+\t\t\t\t\t\tcase 'facebook':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-facebook-f\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'twitter':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-twitter\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'googleplus':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-google-plus\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'youtube':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-youtube-play\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'linkedin':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-icon-linkedin\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t$i = sprintf( '\u003Ci class=\"lp-icon-%s\">\u003C\u002Fi>', $k );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$icon          = apply_filters(\n+\t\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\n+\t\t\t\t\t\t$i,\n+\t\t\t\t\t\t$k,\n+\t\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t\t$this\n+\t\t\t\t\t);\n+\t\t\t\t\t$socials[ $k ] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $v ), $icon );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get links socials of use on Profile page\n+\t\t * Icon is svg\n+\t\t *\n+\t\t * @param int $user_id\n+\t\t * @return array\n+\t\t * @since 4.2.3\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function get_profile_social( int $user_id = 0 ): array {\n+\t\t\t$socials    = array();\n+\t\t\t$extra_info = learn_press_get_user_extra_profile_info( $user_id );\n+\n+\t\t\tif ( $extra_info ) {\n+\t\t\t\tforeach ( $extra_info as $k => $v ) {\n+\t\t\t\t\tif ( empty( $v ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tswitch ( $k ) {\n+\t\t\t\t\t\tcase 'facebook':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-facebook\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'twitter':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-twitter\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'linkedin':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-linkedin\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'youtube':\n+\t\t\t\t\t\t\t$i = '\u003Ci class=\"lp-user-ico lp-icon-youtube-play\">\u003C\u002Fi>';\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tdefault:\n+\t\t\t\t\t\t\t$i = sprintf( '\u003Ci class=\"lp-user-ico lp-icon-%s\">\u003C\u002Fi>', esc_attr( $k ) );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$icon          = apply_filters(\n+\t\t\t\t\t\t'learn-press\u002Fuser-profile-social-icon',\n+\t\t\t\t\t\t$i,\n+\t\t\t\t\t\t$k,\n+\t\t\t\t\t\t$this->get_id(),\n+\t\t\t\t\t\t$this\n+\t\t\t\t\t);\n+\t\t\t\t\t$socials[ $k ] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $v ), $icon );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-socials', $socials, $this->get_id(), $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check course of user has graduation is in-progress\n+\t\t *\n+\t\t * @param $course_id\n+\t\t * @return bool\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function is_course_in_progress( $course_id ): bool {\n+\t\t\t$user        = learn_press_get_user( $this->get_id() );\n+\t\t\t$user_course = $user->get_course_data( $course_id );\n+\n+\t\t\treturn $user_course && LP_COURSE_GRADUATION_IN_PROGRESS === $user_course->get_graduation();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return TRUE if user can do a quiz\n+\t\t *\n+\t\t * @param     $quiz_id\n+\t\t * @param int $course_id\n+\t\t *\n+\t\t * @return bool\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function can_do_quiz( $quiz_id, $course_id = 0 ) {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course->is_no_required_enroll() ) {\n+\t\t\t\t$can = $this->has_course_status( $course_id, array( 'enrolled' ) ) && ! $this->has_started_quiz( $quiz_id, $course_id );\n+\t\t\t} else {\n+\t\t\t\t$can = ! $this->has_started_quiz( $quiz_id, $course_id );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn_press_user_can_do_quiz', $can, $quiz_id, $this->get_id(), $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if all items in course completed.\n+\t\t *\n+\t\t * @return boolean\n+\t\t * @author Nhamdv \u003Cemail@email.com>\n+\t\t *\u002F\n+\t\tpublic function is_completed_all_items( $course_id ) {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\t$course_results = $course_data->get_result();\n+\n+\t\t\tif ( ! isset( $course_results['completed_items'] ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn $course_results['completed_items'] >= $course->count_items();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get role of user.\n+\t\t *\n+\t\t * @return string\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_role() {\n+\t\t\treturn $this->get_data( 'role' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get user course's grade.\n+\t\t * Possible values:\n+\t\t *        + passed        User has finished and passed course.\n+\t\t *        + failed        User has finished but failed.\n+\t\t *        + in-progress    User still is learning course.\n+\t\t *\n+\t\t * @param $course_id\n+\t\t *\n+\t\t * @return string|bool\n+\t\t *\u002F\n+\t\tpublic function get_course_grade( $course_id ) {\n+\t\t\t$grade       = false;\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data ) {\n+\t\t\t\t$grade = $course_data->get_status( 'graduation' );\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-course-grade', $grade, $this->get_id(), $course_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if user is a GUEST by checking the meta _lp_temp_user is exists.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_guest(): bool {\n+\t\t\treturn $this instanceof LP_User_Guest;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if user can edit a post.\n+\t\t *\n+\t\t * @param int $post_id\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function can_edit( int $post_id ): bool {\n+\t\t\tif ( $this->get_id() !== get_current_user_id() ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\treturn current_user_can( 'edit_post', $post_id );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get email of user\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_email(): string {\n+\t\t\treturn $this->get_data( 'email', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user_login of the user.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_username(): string {\n+\t\t\treturn $this->get_data( 'user_login', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user bio information.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_description(): string {\n+\t\t\treturn get_the_author_meta( 'description', $this->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user first name.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_first_name(): string {\n+\t\t\treturn $this->get_data( 'first_name', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user last name.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_last_name(): string {\n+\t\t\treturn $this->get_data( 'last_name', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user nickname.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_nickname(): string {\n+\t\t\treturn $this->get_data( 'nickname', '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return user display name.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_display_name(): string {\n+\t\t\treturn $this->get_data( 'display_name', '' );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-profile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-profile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-profile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-profile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1157 +1,1157 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Databases\\UserItemsDB;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Helpers\\Config;\r\n-use LearnPress\\Models\\Courses;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Services\\UserService;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-require_once 'class-lp-profile-tabs.php';\r\n-\r\n-if ( ! class_exists( 'LP_Profile' ) ) {\r\n-\t\u002F**\r\n-\t * Class LP_Profile\r\n-\t *\r\n-\t * Main class to control the profile of a user\r\n-\t *\u002F\r\n-\tclass LP_Profile {\r\n-\t\t\u002F**\r\n-\t\t * The instances of all users has initialed a profile\r\n-\t\t *\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected static $_instances = array();\r\n-\r\n-\t\tprotected static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User Current user viewing profile\r\n-\t\t *\u002F\r\n-\t\tprotected $user_current = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User User of Profile\r\n-\t\t *\u002F\r\n-\t\tprotected $_user = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tprotected $_role = '';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var bool\r\n-\t\t *\u002F\r\n-\t\tprotected static $_hook_added = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t * @deprecated 4.2.6.2\r\n-\t\t *\u002F\r\n-\t\tprotected $_privacy = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_default_actions = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User_CURD\r\n-\t\t *\u002F\r\n-\t\tprotected $_curd = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var null\r\n-\t\t *\u002F\r\n-\t\tprotected $_tabs = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tprotected $_default_settings = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t *  Constructor\r\n-\t\t *\r\n-\t\t * @param        $user\r\n-\t\t * @param string $role\r\n-\t\t *\u002F\r\n-\t\tprotected function __construct( $user, $role = '' ) {\r\n-\t\t\t$this->_curd        = new LP_User_CURD();\r\n-\t\t\t$this->user_current = learn_press_get_current_user();\r\n-\t\t\t$this->_user        = learn_press_get_user( $user );\r\n-\t\t\t\u002F\u002F$this->get_user();\r\n-\r\n-\t\t\t\u002F*if ( ! $role ) {\r\n-\t\t\t\t$this->_role = $this->get_role();\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$this->_default_actions = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile-default-actions',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'basic-information' => esc_html__( 'Account information updated successfully.', 'learnpress' ),\r\n-\t\t\t\t\t'avatar'            => esc_html__( 'Account avatar updated successfully.', 'learnpress' ),\r\n-\t\t\t\t\t'password'          => esc_html__( 'Password updated successfully.', 'learnpress' ),\r\n-\t\t\t\t\t'privacy'           => esc_html__( 'Account privacy updated successfully.', 'learnpress' ),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! self::$_hook_added ) {\r\n-\t\t\t\tself::$_hook_added = true;\r\n-\r\n-\t\t\t\tadd_action( 'learn-press\u002Fprofile-content', array( $this, 'output' ), 10, 3 );\r\n-\t\t\t\tadd_action( 'learn-press\u002Fbefore-profile-content', array( $this, 'output_section' ), 10, 3 );\r\n-\t\t\t\tadd_action( 'learn-press\u002Fprofile-section-content', array( $this, 'output_section_content' ), 10, 3 );\r\n-\r\n-\t\t\t\t\u002F*foreach ( $this->_default_actions as $action => $message ) {\r\n-\t\t\t\t\tLP_Request::register( 'save-profile-' . $action, array( $this, 'save' ) );\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\tforeach ( $this->_default_actions as $action => $message ) {\r\n-\t\t\t\t\tif ( isset( $_REQUEST[ 'save-profile-' . $action ] ) ) {\r\n-\t\t\t\t\t\t$this->save( $_REQUEST[ 'save-profile-' . $action ] );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function is_guest() {\r\n-\t\t\treturn ! $this->_user || $this->_user && $this->_user->is_guest();\r\n-\t\t}\r\n-\r\n-\t\tpublic function output( $tab, $args, $user ) {\r\n-\t\t\t$location = learn_press_locate_template( 'profile\u002Ftabs\u002F' . $tab . '.php' );\r\n-\r\n-\t\t\tif ( $location && file_exists( $location ) ) {\r\n-\t\t\t\tinclude $location;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic function output_section( $tab_key, $tab_data, $user ) {\r\n-\t\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fsections.php', compact( 'tab_key', 'tab_data', 'user' ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function output_section_content( $section, $args, $user ) {\r\n-\t\t\tglobal $wp;\r\n-\r\n-\t\t\t$current = $this->get_current_section();\r\n-\r\n-\t\t\tif ( $current === $section ) {\r\n-\t\t\t\t$location = learn_press_locate_template( 'profile\u002Ftabs\u002F' . $this->get_current_tab() . '\u002F' . $section . '.php' );\r\n-\t\t\t\tif ( $location && file_exists( $location ) ) {\r\n-\t\t\t\t\tinclude $location;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get role of current user.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t * @deprecated 4.2.6.2\r\n-\t\t *\u002F\r\n-\t\tprotected function get_role() {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\t\treturn '';\r\n-\t\t\t$user = $this->get_user();\r\n-\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\tif ( ! $user->is_guest() ) {\r\n-\t\t\t\t\tif ( $this->_user->is_admin() ) {\r\n-\t\t\t\t\t\treturn 'admin';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $this->_user->is_instructor() ) {\r\n-\t\t\t\t\t\treturn 'instructor';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn 'user';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the user of a profile instance.\r\n-\t\t *\r\n-\t\t * @return bool|LP_User\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user() {\r\n-\t\t\treturn $this->_user;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current user viewing profile.\r\n-\t\t *\r\n-\t\t * @return bool|LP_User\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_current() {\r\n-\t\t\treturn $this->user_current;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check current user view self profile.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_current_user(): bool {\r\n-\t\t\treturn $this->get_user() instanceof LP_User && $this->get_user()->get_id() === $this->get_user_current()->get_id();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Wrap function for $user->get_data()\r\n-\t\t *\r\n-\t\t * @param string $field\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_data( $field ) {\r\n-\t\t\t$user_id   = 0;\r\n-\t\t\t$user_data = [];\r\n-\t\t\tif ( $this->_user instanceof LP_User ) {\r\n-\t\t\t\t$user_id   = $this->_user->get_id();\r\n-\t\t\t\t$user_data = $this->_user->get_data( $field );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn 'id' === strtolower( $field ) ? $user_id : $user_data;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.2.6.2\r\n-\t\t *\u002F\r\n-\t\tpublic function tab_dashboard() {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\t\treturn;\r\n-\t\t\tlearn_press_get_template( 'profile\u002Fdashboard.php', array( 'user' => $this->_user ) );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_login_url( $redirect = false ) {\r\n-\t\t\treturn learn_press_get_login_url( $redirect !== false ? $redirect : LP_Helper::getUrlCurrent() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get tabs.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.2.6.4\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_tabs_arr(): array {\r\n-\t\t\treturn Config::instance()->get( 'profile-tabs' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get default tabs for profile.\r\n-\t\t * Hide tabs if user is not Administrator\u002FInstructor.\r\n-\t\t *\r\n-\t\t * @return LP_Profile_Tabs\r\n-\t\t *\u002F\r\n-\t\tpublic function get_tabs() {\r\n-\t\t\t$user_of_profile = $this->get_user();\r\n-\t\t\t$tabs            = self::get_tabs_arr();\r\n-\r\n-\t\t\t\u002F*\r\n-\t\t\t * Check if user not Admin\u002FInstructor, will be hide tab Courses.\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( $user_of_profile instanceof LP_User\r\n-\t\t\t\t&& ! in_array( $user_of_profile->get_data( 'role' ), [ ADMIN_ROLE, LP_TEACHER_ROLE ] ) ) {\r\n-\t\t\t\tunset( $tabs['courses'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tabs        = apply_filters( 'learn-press\u002Fget-profile-tabs', $tabs, $user_of_profile, $this->user_current );\r\n-\t\t\t$this->_tabs = new LP_Profile_Tabs( $tabs, $this );\r\n-\r\n-\t\t\treturn $this->_tabs;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_slug( $data, $default = '' ) {\r\n-\t\t\treturn $this->get_tabs()->get_slug( $data, $default );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current tab slug in query string.\r\n-\t\t *\r\n-\t\t * @param string $default Optional.\r\n-\t\t * @param bool $key Optional. True if return the key instead of value.\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current_tab( $default = '', $key = true ) {\r\n-\t\t\treturn $this->get_tabs()->get_current_tab( $default, $key );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current section in query string.\r\n-\t\t *\r\n-\t\t * @param string $default\r\n-\t\t * @param bool $key\r\n-\t\t * @param string $tab\r\n-\t\t *\r\n-\t\t * @return bool|int|mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current_section( $default = '', $key = true, $tab = '' ) {\r\n-\t\t\treturn $this->get_tabs()->get_current_section( $default, $key, $tab );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get tab data at a position.\r\n-\t\t *\r\n-\t\t * @param int $position Optional. Indexed number or slug.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_tab_at( $position = 0 ) {\r\n-\t\t\treturn $this->get_tabs()->get_tab_at( $position );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get permalink of a tab and section if passed.\r\n-\t\t *\r\n-\t\t * @param bool $tab\r\n-\t\t * @param bool $with_section\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_tab_link( $tab = false, $with_section = false ) {\r\n-\t\t\t$user = $this->get_user();\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userModel = UserModel::find( $user->get_id(), true );\r\n-\t\t\tif ( ! $userModel ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_pretty_slug = $userModel->get_pretty_slug();\r\n-\t\t\t$url              = $this->get_tabs()->get_tab_link( $tab, $with_section, $user_pretty_slug );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @deprecated\r\n-\t\t\t *\u002F\r\n-\t\t\t$url = apply_filters( 'learn_press_user_profile_link', $url, $user->get_id(), $tab );\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-url', $url, $user->get_id(), $tab );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get current link of profile\r\n-\t\t *\r\n-\t\t * @param string $args - Optional. Add more query args to url.\r\n-\t\t * @param bool $with_permalink - Optional. TRUE to build url as friendly url.\r\n-\t\t *\r\n-\t\t * @return mixed|string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_current_url( $args = '', $with_permalink = false ) {\r\n-\t\t\treturn $this->get_tabs()->get_current_url( $args, $with_permalink );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the $key is current tab.\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_current_tab( $key ) {\r\n-\t\t\treturn $this->get_current_tab() === $key;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if the $key is current section.\r\n-\t\t *\r\n-\t\t * @param string $key\r\n-\t\t * @param string $tab\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_current_section( $key, $tab = '' ) {\r\n-\t\t\treturn $this->get_current_section() === $key;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if a tab or section is hidden.\r\n-\t\t *\r\n-\t\t * @param array $tab_or_section\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function is_hidden( $tab_or_section ) {\r\n-\t\t\treturn is_array( $tab_or_section ) && array_key_exists( 'hidden', $tab_or_section ) && $tab_or_section['hidden'];\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @deprecated 4.2.6.2\r\n-\t\t *\u002F\r\n-\t\tpublic function is_public() {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\t\treturn false;\r\n-\r\n-\t\t\treturn $this->current_user_can( 'view-tab-dashboard' ) || is_super_admin();\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_default_public_tabs() {\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fprivacy-tabs', [] );\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_public_tabs() {\r\n-\t\t\t$privacy     = get_user_meta( $this->get_user_data( 'id' ), '_lp_profile_privacy', true );\r\n-\t\t\t$public_tabs = $this->get_default_public_tabs();\r\n-\r\n-\t\t\tif ( $privacy ) {\r\n-\t\t\t\tforeach ( $privacy as $k => $is_yes ) {\r\n-\t\t\t\t\tif ( $is_yes === 'yes' || is_super_admin() ) {\r\n-\t\t\t\t\t\t$public_tabs[] = $k;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $public_tabs;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check if user can with a capability.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function current_user_can( $capability ) {\r\n-\t\t\t$privacy = array(\r\n-\t\t\t\t'view-tab-courses'    => self::get_option_publish_profile() === 'yes',\r\n-\t\t\t\t'view-tab-my-courses' => $this->get_privacy( 'courses' ) == 'yes',\r\n-\t\t\t\t'view-tab-quizzes'    => $this->get_privacy( 'quizzes' ) == 'yes',\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t\t$can = true;\r\n-\t\t\t} elseif ( $this->is_current_user() ) {\r\n-\t\t\t\t$can = true;\r\n-\t\t\t} else {\r\n-\t\t\t\t$can = ! empty( $privacy[ $capability ] ) && $privacy[ $capability ] === true;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fprofile-current-user-can', $can, $capability, $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Save profile.\r\n-\t\t *\r\n-\t\t * @param string $nonce . Value of nonce depending on the action requested from profile tab.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function save( $nonce ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\treturn new WP_Error( 2, 'The user is invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$message        = [\r\n-\t\t\t\t'status'  => 'error',\r\n-\t\t\t\t'content' => '',\r\n-\t\t\t];\r\n-\t\t\t$message_action = '';\r\n-\r\n-\t\t\tforeach ( $this->_default_actions as $_action => $message_action ) {\r\n-\t\t\t\tif ( wp_verify_nonce( $nonce, 'learn-press-save-profile-' . $_action ) ) {\r\n-\t\t\t\t\t$action = $_action;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t\t$action = '';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! isset( $action ) ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$return = false;\r\n-\t\t\tswitch ( $action ) {\r\n-\t\t\t\tcase 'basic-information':\r\n-\t\t\t\t\t$return = learn_press_update_user_profile_basic_information( true );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'password':\r\n-\t\t\t\t\t$return = learn_press_update_user_profile_change_password();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'privacy':\r\n-\t\t\t\t\t$privacy = LP_Request::get_array( 'privacy' );\r\n-\r\n-\t\t\t\t\tif ( ! $privacy ) {\r\n-\t\t\t\t\t\tupdate_user_meta( get_current_user_id(), '_lp_profile_privacy', array() );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tupdate_user_meta( get_current_user_id(), '_lp_profile_privacy', $privacy );\r\n-\t\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( is_wp_error( $return ) ) {\r\n-\t\t\t\t$message['content'] = $return->get_error_message();\r\n-\t\t\t} else {\r\n-\t\t\t\t$message['status']  = 'success';\r\n-\t\t\t\t$message['content'] = $message_action;\r\n-\t\t\t}\r\n-\r\n-\t\t\tlearn_press_set_message( $message );\r\n-\r\n-\t\t\tif ( 'basic-information' === $action && ! is_wp_error( $return ) ) {\r\n-\t\t\t\t$redirect = LP_Profile::instance( $user_id )->get_current_url();\r\n-\t\t\t} elseif ( ! empty( $_REQUEST['redirect'] ) ) {\r\n-\t\t\t\t$redirect = esc_url_raw( $_REQUEST['redirect'] );\r\n-\t\t\t} else {\r\n-\t\t\t\t$redirect = LP_Helper::getUrlCurrent();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$redirect = apply_filters( 'learn-press\u002Fprofile-updated-redirect', $redirect, $action );\r\n-\r\n-\t\t\tif ( $redirect ) {\r\n-\t\t\t\twp_safe_redirect( $redirect );\r\n-\t\t\t\texit;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get settings for profile privacy tab.\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_privacy_settings() {\r\n-\t\t\t$privacy = array(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'name'        => esc_html__( 'Courses', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'courses',\r\n-\t\t\t\t\t'default'     => 'yes',\r\n-\t\t\t\t\t'type'        => 'yes-no',\r\n-\t\t\t\t\t'description' => esc_html__( 'Public your profile courses attended.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'name'        => esc_html__( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t\t'id'          => 'quizzes',\r\n-\t\t\t\t\t'default'     => 'yes',\r\n-\t\t\t\t\t'type'        => 'yes-no',\r\n-\t\t\t\t\t'description' => esc_html__( 'Public your profile quizzes.', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fprofile-privacy-settings', $privacy );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get privacy profile settings.\r\n-\t\t *\r\n-\t\t * @param string $tab\r\n-\t\t *\r\n-\t\t * @return array|mixed\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function get_privacy( string $tab = '' ) {\r\n-\t\t\t$user_id = $this->get_user() ? $this->get_user()->get_id() : 0;\r\n-\t\t\t$privacy = get_user_meta( $user_id, '_lp_profile_privacy', true );\r\n-\r\n-\t\t\treturn $privacy[ $tab ] ?? '';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get all orders of profile's user.\r\n-\t\t *\r\n-\t\t * @param mixed $args\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 3.0.0\r\n-\t\t * @deprecated 4.2.3.x\r\n-\t\t *\u002F\r\n-\t\tpublic function get_user_orders( $args = '' ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.3.x' );\r\n-\t\t\treturn [];\r\n-\r\n-\t\t\t$args = wp_parse_args(\r\n-\t\t\t\t$args,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'group_by_order' => true,\r\n-\t\t\t\t\t'status'         => '',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $this->_curd->get_orders( $this->get_user_data( 'id' ), $args );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query order of user is viewing profile.\r\n-\t\t *\r\n-\t\t * @param string $args\r\n-\t\t *\r\n-\t\t * @return LP_Query_List_Table\r\n-\t\t *\u002F\r\n-\t\tpublic function query_orders( $args = '' ) {\r\n-\t\t\tglobal $wp_query;\r\n-\r\n-\t\t\t$query = array(\r\n-\t\t\t\t'items'      => array(),\r\n-\t\t\t\t'total'      => 0,\r\n-\t\t\t\t'num_pages'  => 0,\r\n-\t\t\t\t'pagination' => '',\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F*$query_args = array();\r\n-\r\n-\t\t\tif ( is_array( $args ) ) {\r\n-\t\t\t\tforeach ( array( 'status', 'group_by_order' ) as $k ) {\r\n-\t\t\t\t\tif ( isset( $args[ $k ] ) ) {\r\n-\t\t\t\t\t\t$query_args[ $k ] = $args[ $k ];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t\u002F*if ( empty( $query_args['status'] ) ) {\r\n-\t\t\t\t$query_args['status'] = 'completed processing cancelled pending';\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$default_args = array(\r\n-\t\t\t\t'paged' => 1,\r\n-\t\t\t\t'limit' => 10,\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $this->get_current_tab() === 'orders' && isset( $wp_query->query_vars['view_id'] ) ) {\r\n-\t\t\t\t$default_args['paged'] = $wp_query->query_vars['view_id'];\r\n-\t\t\t}\r\n-\r\n-\t\t\t$args   = wp_parse_args( $args, $default_args );\r\n-\t\t\t$offset = isset( $args['limit'] ) && $args['limit'] > 0 && $args['paged'] ? ( $args['paged'] - 1 ) * $args['limit'] : 0;\r\n-\r\n-\t\t\t$query_order = new WP_Query(\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'post_type'      => LP_ORDER_CPT,\r\n-\t\t\t\t\t'posts_per_page' => $args['limit'],\r\n-\t\t\t\t\t'offset'         => $offset,\r\n-\t\t\t\t\t'post_status'    => [\r\n-\t\t\t\t\t\tLP_ORDER_COMPLETED_DB,\r\n-\t\t\t\t\t\tLP_ORDER_PENDING_DB,\r\n-\t\t\t\t\t\tLP_ORDER_PROCESSING_DB,\r\n-\t\t\t\t\t\tLP_ORDER_CANCELLED_DB,\r\n-\t\t\t\t\t],\r\n-\t\t\t\t\t\u002F\u002F'post__in'       => array_keys( $order_ids ),\r\n-\t\t\t\t\t\u002F\u002F'orderby'        => 'post__in',\r\n-\t\t\t\t\t'fields'         => 'ids',\r\n-\t\t\t\t\t'meta_query'     => array(\r\n-\t\t\t\t\t\t'relation' => 'OR',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'key'     => '_user_id',\r\n-\t\t\t\t\t\t\t'value'   => $this->get_user_data( 'id' ),\r\n-\t\t\t\t\t\t\t'compare' => '=',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'key'     => '_user_id',\r\n-\t\t\t\t\t\t\t'value'   => '\"' . $this->get_user_data( 'id' ) . '\"',\r\n-\t\t\t\t\t\t\t'compare' => 'LIKE',\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $query_order->have_posts() ) {\r\n-\t\t\t\t$orders = ( isset( $args['fields'] ) && 'ids' === $args['fields'] ) ? $query_order->posts : array_filter( array_map( 'learn_press_get_order', $query_order->posts ) );\r\n-\r\n-\t\t\t\t$query['orders']     = $orders;\r\n-\t\t\t\t$query['total']      = $query_order->found_posts;\r\n-\t\t\t\t$query['num_pages']  = $query_order->max_num_pages;\r\n-\t\t\t\t$query['pagination'] = learn_press_paging_nav(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'num_pages' => $query['num_pages'],\r\n-\t\t\t\t\t\t'base'      => learn_press_user_profile_link( $this->get_user_data( 'id' ), LP_Settings::instance()->get( 'profile_endpoints.orders' ) ),\r\n-\t\t\t\t\t\t'format'    => $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( '%#%', '' ) : '?paged=%#%',\r\n-\t\t\t\t\t\t'echo'      => false,\r\n-\t\t\t\t\t\t'paged'     => $args['paged'],\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$query = new LP_Query_List_Table(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'total' => $query_order->found_posts,\r\n-\t\t\t\t\t\t'paged' => $args['paged'],\r\n-\t\t\t\t\t\t'limit' => $args['limit'],\r\n-\t\t\t\t\t\t'pages' => $query['num_pages'],\r\n-\t\t\t\t\t\t'items' => $orders,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\t$query = new LP_Query_List_Table( [] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $query;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Query user's courses\r\n-\t\t *\r\n-\t\t * @param string $type - Optional. [own, purchased, enrolled, etc]\r\n-\t\t * @param array $args - Optional.\r\n-\t\t *\r\n-\t\t * @return LP_Query_List_Table\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function query_courses( string $type = 'own', array $args = array() ): LP_Query_List_Table {\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t\t$courses          = array();\r\n-\r\n-\t\t\tswitch ( $type ) {\r\n-\t\t\t\tcase 'purchased':\r\n-\t\t\t\t\t$filter              = new UserItemsFilter();\r\n-\t\t\t\t\t$filter->only_fields = array( 'DISTINCT (item_id) AS item_id', 'ui.user_item_id' );\r\n-\t\t\t\t\t$filter->field_count = 'ui.item_id';\r\n-\t\t\t\t\t$filter->user_id     = $this->get_user_data( 'id' );\r\n-\t\t\t\t\t$filter->order_by    = 'ui.user_item_id';\r\n-\t\t\t\t\t$filter->order       = 'DESC';\r\n-\t\t\t\t\t$filter->item_type   = LP_COURSE_CPT;\r\n-\t\t\t\t\t$status              = $args['status'] ?? '';\r\n-\r\n-\t\t\t\t\tswitch ( $status ) {\r\n-\t\t\t\t\t\tcase '':\r\n-\t\t\t\t\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare(\r\n-\t\t\t\t\t\t\t\t\"AND ui.status != '%s'\",\r\n-\t\t\t\t\t\t\t\tUserItemModel::STATUS_CANCEL\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase UserItemModel::STATUS_FINISHED:\r\n-\t\t\t\t\t\t\t$filter->status = UserItemModel::STATUS_FINISHED;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase UserItemModel::GRADUATION_IN_PROGRESS:\r\n-\t\t\t\t\t\tcase UserItemModel::GRADUATION_PASSED:\r\n-\t\t\t\t\t\tcase UserItemModel::GRADUATION_FAILED:\r\n-\t\t\t\t\t\t\t$filter->graduation = $status;\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$filter->page   = $args['paged'] ?? 1;\r\n-\t\t\t\t\t$filter->limit  = $args['limit'] ?? $filter->limit;\r\n-\t\t\t\t\t$total_rows     = 0;\r\n-\t\t\t\t\t$filter         = apply_filters( 'lp\u002Fapi\u002Fprofile\u002Fcourses\u002Fpurchased\u002Ffilter', $filter, $args );\r\n-\t\t\t\t\t$result_courses = UserItemsDB::getInstance()->get_user_items( $filter, $total_rows );\r\n-\r\n-\t\t\t\t\t$course_ids = LP_Database::get_values_by_key( $result_courses, 'item_id' );\r\n-\r\n-\t\t\t\t\t$courses = array(\r\n-\t\t\t\t\t\t'total' => $total_rows,\r\n-\t\t\t\t\t\t'paged' => $filter->page,\r\n-\t\t\t\t\t\t'limit' => $filter->limit,\r\n-\t\t\t\t\t\t'items' => $course_ids,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'own':\r\n-\t\t\t\t\t\u002F\u002F$query = $this->_curd->query_own_courses( $this->get_user_data( 'id' ), $args );\r\n-\t\t\t\t\t$filter = new LP_Course_Filter();\r\n-\t\t\t\t\tif ( empty( $args['status'] ) ) {\r\n-\t\t\t\t\t\t$args['status'] = [ 'publish', 'pending', 'private' ];\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( ! is_array( $args['status'] ) ) {\r\n-\t\t\t\t\t\t$args['status'] = (array) $args['status'];\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tCourses::handle_params_for_query_courses( $filter, $args );\r\n-\t\t\t\t\t$filter->fields      = [ 'ID' ];\r\n-\t\t\t\t\t$filter->post_author = $this->get_user_data( 'id' );\r\n-\t\t\t\t\t$filter->post_status = $args['status'];\r\n-\t\t\t\t\t$filter->page        = $args['paged'] ?? 1;\r\n-\t\t\t\t\t$filter->limit       = $args['limit'] ?? $filter->limit;\r\n-\t\t\t\t\t$total_rows          = 0;\r\n-\t\t\t\t\t$filter              = apply_filters( 'lp\u002Fapi\u002Fprofile\u002Fcourses\u002Fown\u002Ffilter', $filter, $args );\r\n-\t\t\t\t\t$result_courses      = Courses::get_courses( $filter, $total_rows );\r\n-\r\n-\t\t\t\t\t$course_ids = LP_Database::get_values_by_key( $result_courses );\r\n-\r\n-\t\t\t\t\t$courses = array(\r\n-\t\t\t\t\t\t'total' => $total_rows,\r\n-\t\t\t\t\t\t'paged' => $filter->page,\r\n-\t\t\t\t\t\t'limit' => $filter->limit,\r\n-\t\t\t\t\t\t'items' => $course_ids,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn new LP_Query_List_Table( $courses );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the order is viewing details.\r\n-\t\t *\u002F\r\n-\t\tpublic function get_view_order() {\r\n-\t\t\tglobal $wp_query;\r\n-\r\n-\t\t\t$order = false;\r\n-\t\t\tif ( isset( $wp_query->query_vars['view_id'] ) ) {\r\n-\t\t\t\t$order = learn_press_get_order( $wp_query->query_vars['view_id'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $order;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get filters for purchased courses tab.\r\n-\t\t *\r\n-\t\t * @param string $current_filter\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t *\u002F\r\n-\t\tpublic function get_quizzes_filters( $current_filter = '' ) {\r\n-\t\t\t$url      = $this->get_tab_link( 'quizzes' );\r\n-\t\t\t$defaults = array(\r\n-\t\t\t\t'all'       => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $url ), __( 'All', 'learnpress' ) ),\r\n-\t\t\t\t'completed' => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-status', 'completed', $url ) ), __( 'Finished', 'learnpress' ) ),\r\n-\t\t\t\t'passed'    => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-graduation', 'passed', $url ) ), __( 'Passed', 'learnpress' ) ),\r\n-\t\t\t\t'failed'    => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-graduation', 'failed', $url ) ), __( 'Failed', 'learnpress' ) ),\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! $current_filter ) {\r\n-\t\t\t\t$keys           = array_keys( $defaults );\r\n-\t\t\t\t$current_filter = reset( $keys );\r\n-\t\t\t}\r\n-\r\n-\t\t\tforeach ( $defaults as $k => $v ) {\r\n-\t\t\t\tif ( $k === $current_filter ) {\r\n-\t\t\t\t\t$defaults[ $k ] = sprintf( '\u003Cspan>%s\u003C\u002Fspan>', strip_tags( $v ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fquizzes-filters',\r\n-\t\t\t\t$defaults\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Echo class for main div.\r\n-\t\t *\r\n-\t\t * @param bool $echo\r\n-\t\t * @param string $more\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function main_class( $echo = true, $more = '' ) {\r\n-\t\t\t$classes = array( 'lp-user-profile' );\r\n-\r\n-\t\t\tif ( $this->is_current_user() ) {\r\n-\t\t\t\t$classes[] = 'current-user';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_user_logged_in() ) {\r\n-\t\t\t\t$classes[] = 'guest';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( has_action( 'learn-press\u002Fbefore-user-profile' ) ) {\r\n-\t\t\t\t$classes[] = 'has-sidebar';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$classes = LP_Helper::merge_class( $classes, $more );\r\n-\r\n-\t\t\t$class = ' class=\"' . implode( ' ', apply_filters( 'learn-press\u002Fprofile\u002Fclass', $classes ) ) . '\"';\r\n-\r\n-\t\t\tif ( $echo ) {\r\n-\t\t\t\techo wp_kses_post( $class );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $class;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if the tab is visible for current user.\r\n-\t\t *\r\n-\t\t * @param string $tab_key\r\n-\t\t * @param array $tab_data\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function tab_is_visible_for_user( $tab_key, $tab_data = null ) {\r\n-\t\t\treturn $this->is_current_tab( $tab_key ) && $this->current_user_can( \"view-tab-{$tab_key}\" );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Return true if the section is visible for current user.\r\n-\t\t *\r\n-\t\t * @param string $section_key\r\n-\t\t * @param array $section_data\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t *\u002F\r\n-\t\tpublic function section_is_visible_for_user( $section_key, $section_data = array() ) {\r\n-\t\t\treturn $this->current_user_can( \"view-section-{$section_key}\" ) && ! $this->is_hidden( $section_data );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get queried user in profile link.\r\n-\t\t *\r\n-\t\t * @param string $return\r\n-\t\t *\r\n-\t\t * @return false|WP_User\r\n-\t\t * @since 3.0.0\r\n-\t\t * @deprecated 4.2.9.1\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_queried_user( $return = '' ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.9.1', 'LP_Profile::instance()->get_user_current()' );\r\n-\t\t\tglobal $wp_query;\r\n-\r\n-\t\t\tif ( isset( $wp_query->query['user'] ) ) {\r\n-\t\t\t\t$user = get_user_by( 'login', urldecode( $wp_query->query['user'] ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$user = get_user_by( 'id', get_current_user_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $return === 'id' && $user ? $user->ID : $user;\r\n-\t\t}\r\n-\r\n-\t\tpublic function get_upload_profile_src( $size = '' ) {\r\n-\t\t\t$user = $this->get_user();\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$uploaded_profile_src = $user->get_data( 'uploaded_profile_src' );\r\n-\r\n-\t\t\tif ( empty( $uploaded_profile_src ) ) {\r\n-\t\t\t\t$profile_picture = get_user_meta( $user->get_id(), '_lp_profile_picture', true );\r\n-\r\n-\t\t\t\tif ( $profile_picture ) {\r\n-\t\t\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\r\n-\t\t\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\r\n-\t\t\t\t\t$profile_picture = $slash . $profile_picture;\r\n-\t\t\t\t\t\u002F\u002F End check.\r\n-\t\t\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\r\n-\t\t\t\t\t$file_path = $upload['basedir'] . $profile_picture;\r\n-\r\n-\t\t\t\t\tif ( file_exists( $file_path ) ) {\r\n-\t\t\t\t\t\t$uploaded_profile_src = $upload['baseurl'] . $profile_picture;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$uploaded_profile_src = false;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$user->set_data( 'uploaded_profile_src', $uploaded_profile_src );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fget-upload-profile-src', $uploaded_profile_src, $user->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get profile cover image\r\n-\t\t * @return string image url if exist\r\n-\t\t *\u002F\r\n-\t\tpublic function get_cover_image_src() {\r\n-\t\t\t$user = $this->get_user();\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\t\t\t$cover_image_src = '';\r\n-\t\t\t$image_path      = get_user_meta( $user->get_id(), '_lp_profile_cover_image', true );\r\n-\r\n-\t\t\tif ( $image_path ) {\r\n-\t\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\r\n-\t\t\t\t$slash      = substr( $image_path, 0, 1 ) === '\u002F' ? '' : '\u002F';\r\n-\t\t\t\t$image_path = $slash . $image_path;\r\n-\t\t\t\t\u002F\u002F End check.\r\n-\t\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\r\n-\t\t\t\t$file_path = $upload['basedir'] . $image_path;\r\n-\r\n-\t\t\t\tif ( file_exists( $file_path ) ) {\r\n-\t\t\t\t\t$cover_image_src = $upload['baseurl'] . $image_path;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$cover_image_src = '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fget-profile-cover-image-src', $cover_image_src, $user->get_id() );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get profile image of user.\r\n-\t\t *\r\n-\t\t * @param $type\r\n-\t\t * @param $size\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function get_profile_picture( $type = '', $size = 96 ): string {\r\n-\t\t\t$avatar = '';\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$user = $this->get_user();\r\n-\t\t\t\t$args = [\r\n-\t\t\t\t\t'width'  => $size,\r\n-\t\t\t\t\t'height' => $size,\r\n-\t\t\t\t];\r\n-\t\t\t\tif ( 96 === $size ) {\r\n-\t\t\t\t\t$args = learn_press_get_avatar_thumb_size();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$avatar_url = $this->get_upload_profile_src();\r\n-\t\t\t\tif ( ! empty( $avatar_url ) ) {\r\n-\t\t\t\t\t$user->set_data( 'profile_picture_src', $avatar_url );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$avatar_url = get_avatar_url( $user->get_id(), $args );\r\n-\t\t\t\t\tif ( empty( $avatar_url ) ) {\r\n-\t\t\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$avatar = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Fuser-profile\u002Favatar',\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" \u002F>',\r\n-\t\t\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\r\n-\t\t\t\t\t\t$avatar_url,\r\n-\t\t\t\t\t\t$args['width'] ?? 96,\r\n-\t\t\t\t\t\t$args['height'] ?? 96\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t$avatar_url,\r\n-\t\t\t\t\t$args\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( $e->getMessage() );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $avatar;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get option enable \"Publish profile\"\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_option_publish_profile(): string {\r\n-\t\t\treturn LP_Settings::get_option( 'publish_profile', 'no' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get statistic info of user\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.1.6\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function get_statistic_info(): array {\r\n-\t\t\t$user      = $this->_user;\r\n-\t\t\t$statistic = array(\r\n-\t\t\t\t'enrolled_courses'  => 0,\r\n-\t\t\t\t'active_courses'    => 0,\r\n-\t\t\t\t'completed_courses' => 0,\r\n-\t\t\t\t'total_courses'     => 0,\r\n-\t\t\t\t'total_users'       => 0,\r\n-\t\t\t);\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\tif ( ! $user ) {\r\n-\t\t\t\t\tthrow new Exception( 'The user is invalid' );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_id          = $user->get_id();\r\n-\t\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t\t\t$lp_course_db     = LP_Course_DB::getInstance();\r\n-\r\n-\t\t\t\t\u002F\u002F Count status\r\n-\t\t\t\t$filter          = new LP_User_Items_Filter();\r\n-\t\t\t\t$filter->user_id = $user_id;\r\n-\t\t\t\t$count_status    = $lp_user_items_db->count_status_by_items( $filter );\r\n-\r\n-\t\t\t\t$count_users_attend_courses_of_author = 0;\r\n-\t\t\t\t$courses_of_author                    = 0;\r\n-\t\t\t\tif ( $user->can_create_course() ) {\r\n-\t\t\t\t\t\u002F\u002F Get total users attend course of author\r\n-\t\t\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\r\n-\t\t\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\r\n-\r\n-\t\t\t\t\t\u002F\u002F Get total courses publish of author\r\n-\t\t\t\t\t$filter_count_courses = $lp_course_db->count_courses_of_author( $user_id, [ 'publish' ] );\r\n-\t\t\t\t\t$courses_of_author    = $lp_course_db->get_courses( $filter_count_courses );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$statistic['enrolled_courses']  = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 ) + intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 ) + intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\r\n-\t\t\t\t$statistic['active_courses']    = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\r\n-\t\t\t\t$statistic['completed_courses'] = $count_status->{LP_COURSE_FINISHED} ?? 0;\r\n-\t\t\t\t$statistic['total_courses']     = $courses_of_author;\r\n-\t\t\t\t$statistic['total_users']       = $count_users_attend_courses_of_author;\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstatistic', $statistic, $user );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get register fields custom\r\n-\t\t *\r\n-\t\t * @return mixed|null\r\n-\t\t * @since 4.2.6.4\r\n-\t\t *\u002F\r\n-\t\tpublic static function get_register_fields_custom() {\r\n-\t\t\treturn apply_filters(\r\n-\t\t\t\t'learn-press\u002Fprofile\u002Fregister-fields-custom',\r\n-\t\t\t\tLP_Settings::get_option( 'register_profile_fields', [] )\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get an instance of LP_Profile for a user id\r\n-\t\t *\r\n-\t\t * @param $user_id\r\n-\t\t *\r\n-\t\t * @return LP_Profile mixed\r\n-\t\t * @throws Exception\r\n-\t\t * @version 1.0.4\r\n-\t\t * @since 3.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance( $user_id = 0 ) {\r\n-\t\t\t$is_page_profile  = LP_Page_Controller::page_is( 'profile' );\r\n-\t\t\t$userModelCurrent = UserModel::find( get_current_user_id(), true );\r\n-\r\n-\t\t\tif ( $is_page_profile && empty( $user_id ) ) {\r\n-\t\t\t\tif ( empty( self::$_instance ) ) {\r\n-\t\t\t\t\t$user_slug = (string) get_query_var( 'user' );\r\n-\t\t\t\t\tif ( ! empty( $user_slug ) ) {\r\n-\t\t\t\t\t\t$userModel = UserService::instance()->get_user_by_pretty_slug( $user_slug );\r\n-\t\t\t\t\t\tif ( $userModel ) {\r\n-\t\t\t\t\t\t\t$user_id = $userModel->get_id();\r\n-\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\u002F\u002F Get user by slug.\r\n-\t\t\t\t\t\t\t$wp_user = get_user_by( 'slug', $user_slug );\r\n-\t\t\t\t\t\t\t\u002F\u002F Only allow view instructor when user is administrator or view his\u002Fher profile.\r\n-\t\t\t\t\t\t\tif ( $wp_user ) {\r\n-\t\t\t\t\t\t\t\t$userModel = UserModel::find( $wp_user->ID, true );\r\n-\t\t\t\t\t\t\t\tif ( current_user_can( UserModel::ROLE_ADMINISTRATOR )\r\n-\t\t\t\t\t\t\t\t\t|| ( $userModelCurrent && $userModelCurrent->get_id() === $wp_user->ID ) ) {\r\n-\t\t\t\t\t\t\t\t\t$user_id = $userModelCurrent->get_id();\r\n-\t\t\t\t\t\t\t\t} elseif ( empty( $userModel->get_pretty_slug( false ) ) ) {\r\n-\t\t\t\t\t\t\t\t\t$user_id = $userModel->get_id();\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$user_id = get_current_user_id();\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tself::$_instance = new self( $user_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn self::$_instance;\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( empty( self::$_instances[ $user_id ] ) ) {\r\n-\t\t\t\t\tself::$_instances[ $user_id ] = new self( $user_id );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn self::$_instances[ $user_id ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Databases\\UserItemsDB;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Helpers\\Config;\n+use LearnPress\\Models\\Courses;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Services\\UserService;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+require_once 'class-lp-profile-tabs.php';\n+\n+if ( ! class_exists( 'LP_Profile' ) ) {\n+\t\u002F**\n+\t * Class LP_Profile\n+\t *\n+\t * Main class to control the profile of a user\n+\t *\u002F\n+\tclass LP_Profile {\n+\t\t\u002F**\n+\t\t * The instances of all users has initialed a profile\n+\t\t *\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected static $_instances = array();\n+\n+\t\tprotected static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_User Current user viewing profile\n+\t\t *\u002F\n+\t\tprotected $user_current = false;\n+\n+\t\t\u002F**\n+\t\t * @var LP_User User of Profile\n+\t\t *\u002F\n+\t\tprotected $_user = false;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tprotected $_role = '';\n+\n+\t\t\u002F**\n+\t\t * @var bool\n+\t\t *\u002F\n+\t\tprotected static $_hook_added = false;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t * @deprecated 4.2.6.2\n+\t\t *\u002F\n+\t\tprotected $_privacy = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_default_actions = array();\n+\n+\t\t\u002F**\n+\t\t * @var LP_User_CURD\n+\t\t *\u002F\n+\t\tprotected $_curd = null;\n+\n+\t\t\u002F**\n+\t\t * @var null\n+\t\t *\u002F\n+\t\tprotected $_tabs = null;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tprotected $_default_settings = array();\n+\n+\t\t\u002F**\n+\t\t *  Constructor\n+\t\t *\n+\t\t * @param        $user\n+\t\t * @param string $role\n+\t\t *\u002F\n+\t\tprotected function __construct( $user, $role = '' ) {\n+\t\t\t$this->_curd        = new LP_User_CURD();\n+\t\t\t$this->user_current = learn_press_get_current_user();\n+\t\t\t$this->_user        = learn_press_get_user( $user );\n+\t\t\t\u002F\u002F$this->get_user();\n+\n+\t\t\t\u002F*if ( ! $role ) {\n+\t\t\t\t$this->_role = $this->get_role();\n+\t\t\t}*\u002F\n+\n+\t\t\t$this->_default_actions = apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile-default-actions',\n+\t\t\t\tarray(\n+\t\t\t\t\t'basic-information' => esc_html__( 'Account information updated successfully.', 'learnpress' ),\n+\t\t\t\t\t'avatar'            => esc_html__( 'Account avatar updated successfully.', 'learnpress' ),\n+\t\t\t\t\t'password'          => esc_html__( 'Password updated successfully.', 'learnpress' ),\n+\t\t\t\t\t'privacy'           => esc_html__( 'Account privacy updated successfully.', 'learnpress' ),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( ! self::$_hook_added ) {\n+\t\t\t\tself::$_hook_added = true;\n+\n+\t\t\t\tadd_action( 'learn-press\u002Fprofile-content', array( $this, 'output' ), 10, 3 );\n+\t\t\t\tadd_action( 'learn-press\u002Fbefore-profile-content', array( $this, 'output_section' ), 10, 3 );\n+\t\t\t\tadd_action( 'learn-press\u002Fprofile-section-content', array( $this, 'output_section_content' ), 10, 3 );\n+\n+\t\t\t\t\u002F*foreach ( $this->_default_actions as $action => $message ) {\n+\t\t\t\t\tLP_Request::register( 'save-profile-' . $action, array( $this, 'save' ) );\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\tforeach ( $this->_default_actions as $action => $message ) {\n+\t\t\t\t\tif ( isset( $_REQUEST[ 'save-profile-' . $action ] ) ) {\n+\t\t\t\t\t\t$this->save( $_REQUEST[ 'save-profile-' . $action ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function is_guest() {\n+\t\t\treturn ! $this->_user || $this->_user && $this->_user->is_guest();\n+\t\t}\n+\n+\t\tpublic function output( $tab, $args, $user ) {\n+\t\t\t$location = learn_press_locate_template( 'profile\u002Ftabs\u002F' . $tab . '.php' );\n+\n+\t\t\tif ( $location && file_exists( $location ) ) {\n+\t\t\t\tinclude $location;\n+\t\t\t}\n+\t\t}\n+\n+\t\tpublic function output_section( $tab_key, $tab_data, $user ) {\n+\t\t\tlearn_press_get_template( 'profile\u002Ftabs\u002Fsections.php', compact( 'tab_key', 'tab_data', 'user' ) );\n+\t\t}\n+\n+\t\tpublic function output_section_content( $section, $args, $user ) {\n+\t\t\tglobal $wp;\n+\n+\t\t\t$current = $this->get_current_section();\n+\n+\t\t\tif ( $current === $section ) {\n+\t\t\t\t$location = learn_press_locate_template( 'profile\u002Ftabs\u002F' . $this->get_current_tab() . '\u002F' . $section . '.php' );\n+\t\t\t\tif ( $location && file_exists( $location ) ) {\n+\t\t\t\t\tinclude $location;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get role of current user.\n+\t\t *\n+\t\t * @return string\n+\t\t * @deprecated 4.2.6.2\n+\t\t *\u002F\n+\t\tprotected function get_role() {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\t\treturn '';\n+\t\t\t$user = $this->get_user();\n+\n+\t\t\tif ( $user ) {\n+\t\t\t\tif ( ! $user->is_guest() ) {\n+\t\t\t\t\tif ( $this->_user->is_admin() ) {\n+\t\t\t\t\t\treturn 'admin';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $this->_user->is_instructor() ) {\n+\t\t\t\t\t\treturn 'instructor';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn 'user';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the user of a profile instance.\n+\t\t *\n+\t\t * @return bool|LP_User\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function get_user() {\n+\t\t\treturn $this->_user;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current user viewing profile.\n+\t\t *\n+\t\t * @return bool|LP_User\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function get_user_current() {\n+\t\t\treturn $this->user_current;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check current user view self profile.\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_current_user(): bool {\n+\t\t\treturn $this->get_user() instanceof LP_User && $this->get_user()->get_id() === $this->get_user_current()->get_id();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Wrap function for $user->get_data()\n+\t\t *\n+\t\t * @param string $field\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_user_data( $field ) {\n+\t\t\t$user_id   = 0;\n+\t\t\t$user_data = [];\n+\t\t\tif ( $this->_user instanceof LP_User ) {\n+\t\t\t\t$user_id   = $this->_user->get_id();\n+\t\t\t\t$user_data = $this->_user->get_data( $field );\n+\t\t\t}\n+\n+\t\t\treturn 'id' === strtolower( $field ) ? $user_id : $user_data;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.2.6.2\n+\t\t *\u002F\n+\t\tpublic function tab_dashboard() {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\t\treturn;\n+\t\t\tlearn_press_get_template( 'profile\u002Fdashboard.php', array( 'user' => $this->_user ) );\n+\t\t}\n+\n+\t\tpublic function get_login_url( $redirect = false ) {\n+\t\t\treturn learn_press_get_login_url( $redirect !== false ? $redirect : LP_Helper::getUrlCurrent() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get tabs.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.2.6.4\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic static function get_tabs_arr(): array {\n+\t\t\treturn Config::instance()->get( 'profile-tabs' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get default tabs for profile.\n+\t\t * Hide tabs if user is not Administrator\u002FInstructor.\n+\t\t *\n+\t\t * @return LP_Profile_Tabs\n+\t\t *\u002F\n+\t\tpublic function get_tabs() {\n+\t\t\t$user_of_profile = $this->get_user();\n+\t\t\t$tabs            = self::get_tabs_arr();\n+\n+\t\t\t$userModelProfile = UserModel::find( $user_of_profile->get_id(), true );\n+\t\t\tif ( $userModelProfile ) {\n+\t\t\t\t$userModelProfileRoles = $userModelProfile->get_roles();\n+\n+\t\t\t\t\u002F*\n+\t\t\t\t * Check if user not Admin\u002FInstructor, will be hide tab Courses.\n+\t\t\t\t *\u002F\n+\t\t\t\tif ( ! array_intersect( $userModelProfileRoles, [ UserModel::ROLE_ADMINISTRATOR, UserModel::ROLE_INSTRUCTOR ] ) ) {\n+\t\t\t\t\tunset( $tabs['courses'] );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Filter tabs by role - only show tabs with role restriction to users with matching roles\n+\t\t\t$user_role = $user_of_profile instanceof LP_User ? $user_of_profile->get_data( 'role' ) : '';\n+\t\t\tforeach ( $tabs as $tab_key => $tab_data ) {\n+\t\t\t\tif ( ! empty( $tab_data['role'] ) && is_array( $tab_data['role'] ) ) {\n+\t\t\t\t\tif ( ! in_array( $user_role, $tab_data['role'] ) ) {\n+\t\t\t\t\t\tunset( $tabs[ $tab_key ] );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$tabs        = apply_filters( 'learn-press\u002Fget-profile-tabs', $tabs, $user_of_profile, $this->user_current );\n+\t\t\t$this->_tabs = new LP_Profile_Tabs( $tabs, $this );\n+\n+\t\t\treturn $this->_tabs;\n+\t\t}\n+\n+\t\tpublic function get_slug( $data, $default = '' ) {\n+\t\t\treturn $this->get_tabs()->get_slug( $data, $default );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current tab slug in query string.\n+\t\t *\n+\t\t * @param string $default Optional.\n+\t\t * @param bool $key Optional. True if return the key instead of value.\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_current_tab( $default = '', $key = true ) {\n+\t\t\treturn $this->get_tabs()->get_current_tab( $default, $key );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current section in query string.\n+\t\t *\n+\t\t * @param string $default\n+\t\t * @param bool $key\n+\t\t * @param string $tab\n+\t\t *\n+\t\t * @return bool|int|mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_current_section( $default = '', $key = true, $tab = '' ) {\n+\t\t\treturn $this->get_tabs()->get_current_section( $default, $key, $tab );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get tab data at a position.\n+\t\t *\n+\t\t * @param int $position Optional. Indexed number or slug.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_tab_at( $position = 0 ) {\n+\t\t\treturn $this->get_tabs()->get_tab_at( $position );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get permalink of a tab and section if passed.\n+\t\t *\n+\t\t * @param bool $tab\n+\t\t * @param bool $with_section\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_tab_link( $tab = false, $with_section = false ) {\n+\t\t\t$user = $this->get_user();\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$userModel = UserModel::find( $user->get_id(), true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$user_pretty_slug = $userModel->get_slug_link();\n+\t\t\t$url              = $this->get_tabs()->get_tab_link( $tab, $with_section, $user_pretty_slug );\n+\n+\t\t\t\u002F**\n+\t\t\t * @deprecated\n+\t\t\t *\u002F\n+\t\t\t$url = apply_filters( 'learn_press_user_profile_link', $url, $user->get_id(), $tab );\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fuser-profile-url', $url, $user->get_id(), $tab );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get current link of profile\n+\t\t *\n+\t\t * @param string $args - Optional. Add more query args to url.\n+\t\t * @param bool $with_permalink - Optional. TRUE to build url as friendly url.\n+\t\t *\n+\t\t * @return mixed|string\n+\t\t *\u002F\n+\t\tpublic function get_current_url( $args = '', $with_permalink = false ) {\n+\t\t\treturn $this->get_tabs()->get_current_url( $args, $with_permalink );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the $key is current tab.\n+\t\t *\n+\t\t * @param string $key\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_current_tab( $key ) {\n+\t\t\treturn $this->get_current_tab() === $key;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if the $key is current section.\n+\t\t *\n+\t\t * @param string $key\n+\t\t * @param string $tab\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_current_section( $key, $tab = '' ) {\n+\t\t\treturn $this->get_current_section() === $key;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if a tab or section is hidden.\n+\t\t *\n+\t\t * @param array $tab_or_section\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function is_hidden( $tab_or_section ) {\n+\t\t\treturn is_array( $tab_or_section ) && array_key_exists( 'hidden', $tab_or_section ) && $tab_or_section['hidden'];\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @deprecated 4.2.6.2\n+\t\t *\u002F\n+\t\tpublic function is_public() {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\t\treturn false;\n+\n+\t\t\treturn $this->current_user_can( 'view-tab-dashboard' ) || is_super_admin();\n+\t\t}\n+\n+\t\tpublic function get_default_public_tabs() {\n+\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fprivacy-tabs', [] );\n+\t\t}\n+\n+\t\tpublic function get_public_tabs() {\n+\t\t\t$privacy     = get_user_meta( $this->get_user_data( 'id' ), '_lp_profile_privacy', true );\n+\t\t\t$public_tabs = $this->get_default_public_tabs();\n+\n+\t\t\tif ( $privacy ) {\n+\t\t\t\tforeach ( $privacy as $k => $is_yes ) {\n+\t\t\t\t\tif ( $is_yes === 'yes' || is_super_admin() ) {\n+\t\t\t\t\t\t$public_tabs[] = $k;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn $public_tabs;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check if user can with a capability.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function current_user_can( $capability ) {\n+\t\t\t$privacy = array(\n+\t\t\t\t'view-tab-courses'    => self::get_option_publish_profile() === 'yes',\n+\t\t\t\t'view-tab-my-courses' => $this->get_privacy( 'courses' ) == 'yes',\n+\t\t\t\t'view-tab-quizzes'    => $this->get_privacy( 'quizzes' ) == 'yes',\n+\t\t\t);\n+\n+\t\t\tif ( current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t\t$can = true;\n+\t\t\t} elseif ( $this->is_current_user() ) {\n+\t\t\t\t$can = true;\n+\t\t\t} else {\n+\t\t\t\t$can = ! empty( $privacy[ $capability ] ) && $privacy[ $capability ] === true;\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fprofile-current-user-can', $can, $capability, $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Save profile.\n+\t\t *\n+\t\t * @param string $nonce . Value of nonce depending on the action requested from profile tab.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function save( $nonce ) {\n+\t\t\t$user_id = get_current_user_id();\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\treturn new WP_Error( 2, 'The user is invalid' );\n+\t\t\t}\n+\n+\t\t\t$message        = [\n+\t\t\t\t'status'  => 'error',\n+\t\t\t\t'content' => '',\n+\t\t\t];\n+\t\t\t$message_action = '';\n+\n+\t\t\tforeach ( $this->_default_actions as $_action => $message_action ) {\n+\t\t\t\tif ( wp_verify_nonce( $nonce, 'learn-press-save-profile-' . $_action ) ) {\n+\t\t\t\t\t$action = $_action;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t\t$action = '';\n+\t\t\t}\n+\n+\t\t\tif ( ! isset( $action ) ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$return = false;\n+\t\t\tswitch ( $action ) {\n+\t\t\t\tcase 'basic-information':\n+\t\t\t\t\t$return = learn_press_update_user_profile_basic_information( true );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'password':\n+\t\t\t\t\t$return = learn_press_update_user_profile_change_password();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'privacy':\n+\t\t\t\t\t$privacy = LP_Request::get_array( 'privacy' );\n+\n+\t\t\t\t\tif ( ! $privacy ) {\n+\t\t\t\t\t\tupdate_user_meta( get_current_user_id(), '_lp_profile_privacy', array() );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tupdate_user_meta( get_current_user_id(), '_lp_profile_privacy', $privacy );\n+\t\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( is_wp_error( $return ) ) {\n+\t\t\t\t$message['content'] = $return->get_error_message();\n+\t\t\t} else {\n+\t\t\t\t$message['status']  = 'success';\n+\t\t\t\t$message['content'] = $message_action;\n+\t\t\t}\n+\n+\t\t\tlearn_press_set_message( $message );\n+\n+\t\t\tif ( 'basic-information' === $action && ! is_wp_error( $return ) ) {\n+\t\t\t\t$redirect = LP_Profile::instance( $user_id )->get_current_url();\n+\t\t\t} elseif ( ! empty( $_REQUEST['redirect'] ) ) {\n+\t\t\t\t$redirect = esc_url_raw( $_REQUEST['redirect'] );\n+\t\t\t} else {\n+\t\t\t\t$redirect = LP_Helper::getUrlCurrent();\n+\t\t\t}\n+\n+\t\t\t$redirect = apply_filters( 'learn-press\u002Fprofile-updated-redirect', $redirect, $action );\n+\n+\t\t\tif ( $redirect ) {\n+\t\t\t\twp_safe_redirect( $redirect );\n+\t\t\t\texit;\n+\t\t\t}\n+\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get settings for profile privacy tab.\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.0.0\n+\t\t *\u002F\n+\t\tpublic function get_privacy_settings() {\n+\t\t\t$privacy = array(\n+\t\t\t\tarray(\n+\t\t\t\t\t'name'        => esc_html__( 'Courses', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'courses',\n+\t\t\t\t\t'default'     => 'yes',\n+\t\t\t\t\t'type'        => 'yes-no',\n+\t\t\t\t\t'description' => esc_html__( 'Public your profile courses attended.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\tarray(\n+\t\t\t\t\t'name'        => esc_html__( 'Quizzes', 'learnpress' ),\n+\t\t\t\t\t'id'          => 'quizzes',\n+\t\t\t\t\t'default'     => 'yes',\n+\t\t\t\t\t'type'        => 'yes-no',\n+\t\t\t\t\t'description' => esc_html__( 'Public your profile quizzes.', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fprofile-privacy-settings', $privacy );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get privacy profile settings.\n+\t\t *\n+\t\t * @param string $tab\n+\t\t *\n+\t\t * @return array|mixed\n+\t\t * @since 3.0.0\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function get_privacy( string $tab = '' ) {\n+\t\t\t$user_id = $this->get_user() ? $this->get_user()->get_id() : 0;\n+\t\t\t$privacy = get_user_meta( $user_id, '_lp_profile_privacy', true );\n+\n+\t\t\treturn $privacy[ $tab ] ?? '';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get all orders of profile's user.\n+\t\t *\n+\t\t * @param mixed $args\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 3.0.0\n+\t\t * @deprecated 4.2.3.x\n+\t\t *\u002F\n+\t\tpublic function get_user_orders( $args = '' ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.3.x' );\n+\t\t\treturn [];\n+\n+\t\t\t$args = wp_parse_args(\n+\t\t\t\t$args,\n+\t\t\t\tarray(\n+\t\t\t\t\t'group_by_order' => true,\n+\t\t\t\t\t'status'         => '',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $this->_curd->get_orders( $this->get_user_data( 'id' ), $args );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query order of user is viewing profile.\n+\t\t *\n+\t\t * @param string $args\n+\t\t *\n+\t\t * @return LP_Query_List_Table\n+\t\t *\u002F\n+\t\tpublic function query_orders( $args = '' ) {\n+\t\t\tglobal $wp_query;\n+\n+\t\t\t$query = array(\n+\t\t\t\t'items'      => array(),\n+\t\t\t\t'total'      => 0,\n+\t\t\t\t'num_pages'  => 0,\n+\t\t\t\t'pagination' => '',\n+\t\t\t);\n+\n+\t\t\t\u002F*$query_args = array();\n+\n+\t\t\tif ( is_array( $args ) ) {\n+\t\t\t\tforeach ( array( 'status', 'group_by_order' ) as $k ) {\n+\t\t\t\t\tif ( isset( $args[ $k ] ) ) {\n+\t\t\t\t\t\t$query_args[ $k ] = $args[ $k ];\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}*\u002F\n+\n+\t\t\t\u002F*if ( empty( $query_args['status'] ) ) {\n+\t\t\t\t$query_args['status'] = 'completed processing cancelled pending';\n+\t\t\t}*\u002F\n+\n+\t\t\t$default_args = array(\n+\t\t\t\t'paged' => 1,\n+\t\t\t\t'limit' => 10,\n+\t\t\t);\n+\n+\t\t\tif ( $this->get_current_tab() === 'orders' && isset( $wp_query->query_vars['view_id'] ) ) {\n+\t\t\t\t$default_args['paged'] = $wp_query->query_vars['view_id'];\n+\t\t\t}\n+\n+\t\t\t$args   = wp_parse_args( $args, $default_args );\n+\t\t\t$offset = isset( $args['limit'] ) && $args['limit'] > 0 && $args['paged'] ? ( $args['paged'] - 1 ) * $args['limit'] : 0;\n+\n+\t\t\t$query_order = new WP_Query(\n+\t\t\t\tarray(\n+\t\t\t\t\t'post_type'      => LP_ORDER_CPT,\n+\t\t\t\t\t'posts_per_page' => $args['limit'],\n+\t\t\t\t\t'offset'         => $offset,\n+\t\t\t\t\t'post_status'    => [\n+\t\t\t\t\t\tLP_ORDER_COMPLETED_DB,\n+\t\t\t\t\t\tLP_ORDER_PENDING_DB,\n+\t\t\t\t\t\tLP_ORDER_PROCESSING_DB,\n+\t\t\t\t\t\tLP_ORDER_CANCELLED_DB,\n+\t\t\t\t\t],\n+\t\t\t\t\t\u002F\u002F'post__in'       => array_keys( $order_ids ),\n+\t\t\t\t\t\u002F\u002F'orderby'        => 'post__in',\n+\t\t\t\t\t'fields'         => 'ids',\n+\t\t\t\t\t'meta_query'     => array(\n+\t\t\t\t\t\t'relation' => 'OR',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'key'     => '_user_id',\n+\t\t\t\t\t\t\t'value'   => $this->get_user_data( 'id' ),\n+\t\t\t\t\t\t\t'compare' => '=',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'key'     => '_user_id',\n+\t\t\t\t\t\t\t'value'   => '\"' . $this->get_user_data( 'id' ) . '\"',\n+\t\t\t\t\t\t\t'compare' => 'LIKE',\n+\t\t\t\t\t\t),\n+\t\t\t\t\t),\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( $query_order->have_posts() ) {\n+\t\t\t\t$orders = ( isset( $args['fields'] ) && 'ids' === $args['fields'] ) ? $query_order->posts : array_filter( array_map( 'learn_press_get_order', $query_order->posts ) );\n+\n+\t\t\t\t$query['orders']     = $orders;\n+\t\t\t\t$query['total']      = $query_order->found_posts;\n+\t\t\t\t$query['num_pages']  = $query_order->max_num_pages;\n+\t\t\t\t$query['pagination'] = learn_press_paging_nav(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'num_pages' => $query['num_pages'],\n+\t\t\t\t\t\t'base'      => $this->get_tab_link( LP_Settings::instance()->get( 'profile_endpoints.orders' ) ),\n+\t\t\t\t\t\t'format'    => $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( '%#%', '' ) : '?paged=%#%',\n+\t\t\t\t\t\t'echo'      => false,\n+\t\t\t\t\t\t'paged'     => $args['paged'],\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$query = new LP_Query_List_Table(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'total' => $query_order->found_posts,\n+\t\t\t\t\t\t'paged' => $args['paged'],\n+\t\t\t\t\t\t'limit' => $args['limit'],\n+\t\t\t\t\t\t'pages' => $query['num_pages'],\n+\t\t\t\t\t\t'items' => $orders,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\t$query = new LP_Query_List_Table( [] );\n+\t\t\t}\n+\n+\t\t\treturn $query;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Query user's courses\n+\t\t *\n+\t\t * @param string $type - Optional. [own, purchased, enrolled, etc]\n+\t\t * @param array $args - Optional.\n+\t\t *\n+\t\t * @return LP_Query_List_Table\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function query_courses( string $type = 'own', array $args = array() ): LP_Query_List_Table {\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t\t$courses          = array();\n+\n+\t\t\tswitch ( $type ) {\n+\t\t\t\tcase 'purchased':\n+\t\t\t\t\t$filter              = new UserItemsFilter();\n+\t\t\t\t\t$filter->only_fields = array( 'DISTINCT (item_id) AS item_id', 'ui.user_item_id' );\n+\t\t\t\t\t$filter->field_count = 'ui.item_id';\n+\t\t\t\t\t$filter->user_id     = $this->get_user_data( 'id' );\n+\t\t\t\t\t$filter->order_by    = 'ui.user_item_id';\n+\t\t\t\t\t$filter->order       = 'DESC';\n+\t\t\t\t\t$filter->item_type   = LP_COURSE_CPT;\n+\t\t\t\t\t$status              = $args['status'] ?? '';\n+\n+\t\t\t\t\tswitch ( $status ) {\n+\t\t\t\t\t\tcase '':\n+\t\t\t\t\t\t\t$filter->where[] = $lp_user_items_db->wpdb->prepare(\n+\t\t\t\t\t\t\t\t\"AND ui.status != '%s'\",\n+\t\t\t\t\t\t\t\tUserItemModel::STATUS_CANCEL\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase UserItemModel::STATUS_FINISHED:\n+\t\t\t\t\t\t\t$filter->status = UserItemModel::STATUS_FINISHED;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase UserItemModel::GRADUATION_IN_PROGRESS:\n+\t\t\t\t\t\tcase UserItemModel::GRADUATION_PASSED:\n+\t\t\t\t\t\tcase UserItemModel::GRADUATION_FAILED:\n+\t\t\t\t\t\t\t$filter->graduation = $status;\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$filter->page   = $args['paged'] ?? 1;\n+\t\t\t\t\t$filter->limit  = $args['limit'] ?? $filter->limit;\n+\t\t\t\t\t$total_rows     = 0;\n+\t\t\t\t\t$filter         = apply_filters( 'lp\u002Fapi\u002Fprofile\u002Fcourses\u002Fpurchased\u002Ffilter', $filter, $args );\n+\t\t\t\t\t$result_courses = UserItemsDB::getInstance()->get_user_items( $filter, $total_rows );\n+\n+\t\t\t\t\t$course_ids = LP_Database::get_values_by_key( $result_courses, 'item_id' );\n+\n+\t\t\t\t\t$courses = array(\n+\t\t\t\t\t\t'total' => $total_rows,\n+\t\t\t\t\t\t'paged' => $filter->page,\n+\t\t\t\t\t\t'limit' => $filter->limit,\n+\t\t\t\t\t\t'items' => $course_ids,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'own':\n+\t\t\t\t\t\u002F\u002F$query = $this->_curd->query_own_courses( $this->get_user_data( 'id' ), $args );\n+\t\t\t\t\t$filter = new LP_Course_Filter();\n+\t\t\t\t\tif ( empty( $args['status'] ) ) {\n+\t\t\t\t\t\t$args['status'] = [ 'publish', 'pending', 'private' ];\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( ! is_array( $args['status'] ) ) {\n+\t\t\t\t\t\t$args['status'] = (array) $args['status'];\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tCourses::handle_params_for_query_courses( $filter, $args );\n+\t\t\t\t\t$filter->fields      = [ 'ID' ];\n+\t\t\t\t\t$filter->post_author = $this->get_user_data( 'id' );\n+\t\t\t\t\t$filter->post_status = $args['status'];\n+\t\t\t\t\t$filter->page        = $args['paged'] ?? 1;\n+\t\t\t\t\t$filter->limit       = $args['limit'] ?? $filter->limit;\n+\t\t\t\t\t$total_rows          = 0;\n+\t\t\t\t\t$filter              = apply_filters( 'lp\u002Fapi\u002Fprofile\u002Fcourses\u002Fown\u002Ffilter', $filter, $args );\n+\t\t\t\t\t$result_courses      = Courses::get_courses( $filter, $total_rows );\n+\n+\t\t\t\t\t$course_ids = LP_Database::get_values_by_key( $result_courses );\n+\n+\t\t\t\t\t$courses = array(\n+\t\t\t\t\t\t'total' => $total_rows,\n+\t\t\t\t\t\t'paged' => $filter->page,\n+\t\t\t\t\t\t'limit' => $filter->limit,\n+\t\t\t\t\t\t'items' => $course_ids,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\treturn new LP_Query_List_Table( $courses );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the order is viewing details.\n+\t\t *\u002F\n+\t\tpublic function get_view_order() {\n+\t\t\tglobal $wp_query;\n+\n+\t\t\t$order = false;\n+\t\t\tif ( isset( $wp_query->query_vars['view_id'] ) ) {\n+\t\t\t\t$order = learn_press_get_order( $wp_query->query_vars['view_id'] );\n+\t\t\t}\n+\n+\t\t\treturn $order;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get filters for purchased courses tab.\n+\t\t *\n+\t\t * @param string $current_filter\n+\t\t *\n+\t\t * @return array\n+\t\t *\u002F\n+\t\tpublic function get_quizzes_filters( $current_filter = '' ) {\n+\t\t\t$url      = $this->get_tab_link( 'quizzes' );\n+\t\t\t$defaults = array(\n+\t\t\t\t'all'       => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $url ), __( 'All', 'learnpress' ) ),\n+\t\t\t\t'completed' => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-status', 'completed', $url ) ), __( 'Finished', 'learnpress' ) ),\n+\t\t\t\t'passed'    => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-graduation', 'passed', $url ) ), __( 'Passed', 'learnpress' ) ),\n+\t\t\t\t'failed'    => sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( add_query_arg( 'filter-graduation', 'failed', $url ) ), __( 'Failed', 'learnpress' ) ),\n+\t\t\t);\n+\n+\t\t\tif ( ! $current_filter ) {\n+\t\t\t\t$keys           = array_keys( $defaults );\n+\t\t\t\t$current_filter = reset( $keys );\n+\t\t\t}\n+\n+\t\t\tforeach ( $defaults as $k => $v ) {\n+\t\t\t\tif ( $k === $current_filter ) {\n+\t\t\t\t\t$defaults[ $k ] = sprintf( '\u003Cspan>%s\u003C\u002Fspan>', strip_tags( $v ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fquizzes-filters',\n+\t\t\t\t$defaults\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Echo class for main div.\n+\t\t *\n+\t\t * @param bool $echo\n+\t\t * @param string $more\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function main_class( $echo = true, $more = '' ) {\n+\t\t\t$classes = array( 'lp-user-profile' );\n+\n+\t\t\tif ( $this->is_current_user() ) {\n+\t\t\t\t$classes[] = 'current-user';\n+\t\t\t}\n+\n+\t\t\tif ( ! is_user_logged_in() ) {\n+\t\t\t\t$classes[] = 'guest';\n+\t\t\t}\n+\n+\t\t\tif ( has_action( 'learn-press\u002Fbefore-user-profile' ) ) {\n+\t\t\t\t$classes[] = 'has-sidebar';\n+\t\t\t}\n+\n+\t\t\t$classes = LP_Helper::merge_class( $classes, $more );\n+\n+\t\t\t$class = ' class=\"' . implode( ' ', apply_filters( 'learn-press\u002Fprofile\u002Fclass', $classes ) ) . '\"';\n+\n+\t\t\tif ( $echo ) {\n+\t\t\t\techo wp_kses_post( $class );\n+\t\t\t}\n+\n+\t\t\treturn $class;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if the tab is visible for current user.\n+\t\t *\n+\t\t * @param string $tab_key\n+\t\t * @param array $tab_data\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function tab_is_visible_for_user( $tab_key, $tab_data = null ) {\n+\t\t\treturn $this->is_current_tab( $tab_key ) && $this->current_user_can( \"view-tab-{$tab_key}\" );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Return true if the section is visible for current user.\n+\t\t *\n+\t\t * @param string $section_key\n+\t\t * @param array $section_data\n+\t\t *\n+\t\t * @return bool\n+\t\t *\u002F\n+\t\tpublic function section_is_visible_for_user( $section_key, $section_data = array() ) {\n+\t\t\treturn $this->current_user_can( \"view-section-{$section_key}\" ) && ! $this->is_hidden( $section_data );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get queried user in profile link.\n+\t\t *\n+\t\t * @param string $return\n+\t\t *\n+\t\t * @return false|WP_User\n+\t\t * @since 3.0.0\n+\t\t * @deprecated 4.2.9.1\n+\t\t *\u002F\n+\t\tpublic static function get_queried_user( $return = '' ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.9.1', 'LP_Profile::instance()->get_user_current()' );\n+\t\t\tglobal $wp_query;\n+\n+\t\t\tif ( isset( $wp_query->query['user'] ) ) {\n+\t\t\t\t$user = get_user_by( 'login', urldecode( $wp_query->query['user'] ) );\n+\t\t\t} else {\n+\t\t\t\t$user = get_user_by( 'id', get_current_user_id() );\n+\t\t\t}\n+\n+\t\t\treturn $return === 'id' && $user ? $user->ID : $user;\n+\t\t}\n+\n+\t\tpublic function get_upload_profile_src( $size = '' ) {\n+\t\t\t$user = $this->get_user();\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\n+\t\t\t$uploaded_profile_src = $user->get_data( 'uploaded_profile_src' );\n+\n+\t\t\tif ( empty( $uploaded_profile_src ) ) {\n+\t\t\t\t$profile_picture = get_user_meta( $user->get_id(), '_lp_profile_picture', true );\n+\n+\t\t\t\tif ( $profile_picture ) {\n+\t\t\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\n+\t\t\t\t\t$slash           = substr( $profile_picture, 0, 1 ) === '\u002F' ? '' : '\u002F';\n+\t\t\t\t\t$profile_picture = $slash . $profile_picture;\n+\t\t\t\t\t\u002F\u002F End check.\n+\t\t\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\n+\t\t\t\t\t$file_path = $upload['basedir'] . $profile_picture;\n+\n+\t\t\t\t\tif ( file_exists( $file_path ) ) {\n+\t\t\t\t\t\t$uploaded_profile_src = $upload['baseurl'] . $profile_picture;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$uploaded_profile_src = false;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$user->set_data( 'uploaded_profile_src', $uploaded_profile_src );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fget-upload-profile-src', $uploaded_profile_src, $user->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get profile cover image\n+\t\t * @return string image url if exist\n+\t\t *\u002F\n+\t\tpublic function get_cover_image_src() {\n+\t\t\t$user = $this->get_user();\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn '';\n+\t\t\t}\n+\t\t\t$cover_image_src = '';\n+\t\t\t$image_path      = get_user_meta( $user->get_id(), '_lp_profile_cover_image', true );\n+\n+\t\t\tif ( $image_path ) {\n+\t\t\t\t\u002F\u002F Check if hase slug \u002F at the beginning of the path, if not, add it.\n+\t\t\t\t$slash      = substr( $image_path, 0, 1 ) === '\u002F' ? '' : '\u002F';\n+\t\t\t\t$image_path = $slash . $image_path;\n+\t\t\t\t\u002F\u002F End check.\n+\t\t\t\t$upload    = learn_press_user_profile_picture_upload_dir();\n+\t\t\t\t$file_path = $upload['basedir'] . $image_path;\n+\n+\t\t\t\tif ( file_exists( $file_path ) ) {\n+\t\t\t\t\t$cover_image_src = $upload['baseurl'] . $image_path;\n+\t\t\t\t} else {\n+\t\t\t\t\t$cover_image_src = '';\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'learn-press\u002Fprofile\u002Fget-profile-cover-image-src', $cover_image_src, $user->get_id() );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get profile image of user.\n+\t\t *\n+\t\t * @param $type\n+\t\t * @param $size\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function get_profile_picture( $type = '', $size = 96 ): string {\n+\t\t\t$avatar = '';\n+\n+\t\t\ttry {\n+\t\t\t\t$user = $this->get_user();\n+\t\t\t\t$args = [\n+\t\t\t\t\t'width'  => $size,\n+\t\t\t\t\t'height' => $size,\n+\t\t\t\t];\n+\t\t\t\tif ( 96 === $size ) {\n+\t\t\t\t\t$args = learn_press_get_avatar_thumb_size();\n+\t\t\t\t}\n+\n+\t\t\t\t$avatar_url = $this->get_upload_profile_src();\n+\t\t\t\tif ( ! empty( $avatar_url ) ) {\n+\t\t\t\t\t$user->set_data( 'profile_picture_src', $avatar_url );\n+\t\t\t\t} else {\n+\t\t\t\t\t$avatar_url = get_avatar_url( $user->get_id(), $args );\n+\t\t\t\t\tif ( empty( $avatar_url ) ) {\n+\t\t\t\t\t\t$avatar_url = LP_PLUGIN_URL . 'assets\u002Fimages\u002Favatar-default.png';\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$avatar = apply_filters(\n+\t\t\t\t\t'learn-press\u002Fuser-profile\u002Favatar',\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t'\u003Cimg alt=\"%s\" class=\"avatar\" src=\"%s\" width=\"%d\" height=\"%d\" \u002F>',\n+\t\t\t\t\t\tesc_attr__( 'User Avatar', 'learnpress' ),\n+\t\t\t\t\t\t$avatar_url,\n+\t\t\t\t\t\t$args['width'] ?? 96,\n+\t\t\t\t\t\t$args['height'] ?? 96\n+\t\t\t\t\t),\n+\t\t\t\t\t$avatar_url,\n+\t\t\t\t\t$args\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( $e->getMessage() );\n+\t\t\t}\n+\n+\t\t\treturn $avatar;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get option enable \"Publish profile\"\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic static function get_option_publish_profile(): string {\n+\t\t\treturn LP_Settings::get_option( 'publish_profile', 'no' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get statistic info of user\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.1.6\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function get_statistic_info(): array {\n+\t\t\t$user      = $this->_user;\n+\t\t\t$statistic = array(\n+\t\t\t\t'enrolled_courses'  => 0,\n+\t\t\t\t'active_courses'    => 0,\n+\t\t\t\t'completed_courses' => 0,\n+\t\t\t\t'total_courses'     => 0,\n+\t\t\t\t'total_users'       => 0,\n+\t\t\t);\n+\n+\t\t\ttry {\n+\t\t\t\tif ( ! $user ) {\n+\t\t\t\t\tthrow new Exception( 'The user is invalid' );\n+\t\t\t\t}\n+\n+\t\t\t\t$user_id          = $user->get_id();\n+\t\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t\t\t$lp_course_db     = LP_Course_DB::getInstance();\n+\n+\t\t\t\t\u002F\u002F Count status\n+\t\t\t\t$filter          = new LP_User_Items_Filter();\n+\t\t\t\t$filter->user_id = $user_id;\n+\t\t\t\t$count_status    = $lp_user_items_db->count_status_by_items( $filter );\n+\n+\t\t\t\t$count_users_attend_courses_of_author = 0;\n+\t\t\t\t$courses_of_author                    = 0;\n+\t\t\t\tif ( $user->can_create_course() ) {\n+\t\t\t\t\t\u002F\u002F Get total users attend course of author\n+\t\t\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\n+\t\t\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\n+\n+\t\t\t\t\t\u002F\u002F Get total courses publish of author\n+\t\t\t\t\t$filter_count_courses = $lp_course_db->count_courses_of_author( $user_id, [ 'publish' ] );\n+\t\t\t\t\t$courses_of_author    = $lp_course_db->get_courses( $filter_count_courses );\n+\t\t\t\t}\n+\n+\t\t\t\t$statistic['enrolled_courses']  = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 ) + intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 ) + intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\n+\t\t\t\t$statistic['active_courses']    = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\n+\t\t\t\t$statistic['completed_courses'] = $count_status->{LP_COURSE_FINISHED} ?? 0;\n+\t\t\t\t$statistic['total_courses']     = $courses_of_author;\n+\t\t\t\t$statistic['total_users']       = $count_users_attend_courses_of_author;\n+\t\t\t} catch ( Throwable $e ) {\n+\n+\t\t\t}\n+\n+\t\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstatistic', $statistic, $user );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get register fields custom\n+\t\t *\n+\t\t * @return mixed|null\n+\t\t * @since 4.2.6.4\n+\t\t *\u002F\n+\t\tpublic static function get_register_fields_custom() {\n+\t\t\treturn apply_filters(\n+\t\t\t\t'learn-press\u002Fprofile\u002Fregister-fields-custom',\n+\t\t\t\tLP_Settings::get_option( 'register_profile_fields', [] )\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get an instance of LP_Profile for a user id\n+\t\t *\n+\t\t * @param $user_id\n+\t\t *\n+\t\t * @return LP_Profile mixed\n+\t\t * @throws Exception\n+\t\t * @version 1.0.5\n+\t\t * @since 3.0.0\n+\t\t *\u002F\n+\t\tpublic static function instance( $user_id = 0 ) {\n+\t\t\t$is_page_profile = LP_Page_Controller::page_is( 'profile' );\n+\n+\t\t\tif ( $is_page_profile && empty( $user_id ) ) {\n+\t\t\t\tif ( empty( self::$_instance ) ) {\n+\t\t\t\t\t$user_slug = (string) get_query_var( 'user' );\n+\t\t\t\t\tif ( ! empty( $user_slug ) ) {\n+\t\t\t\t\t\t$userModel = UserService::instance()->get_user_by_slug_link( $user_slug );\n+\t\t\t\t\t\tif ( $userModel ) {\n+\t\t\t\t\t\t\t$user_id = $userModel->get_id();\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$user_id = get_current_user_id();\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tself::$_instance = new self( $user_id );\n+\t\t\t\t}\n+\n+\t\t\t\treturn self::$_instance;\n+\t\t\t} else {\n+\t\t\t\tif ( empty( self::$_instances[ $user_id ] ) ) {\n+\t\t\t\t\tself::$_instances[ $user_id ] = new self( $user_id );\n+\t\t\t\t}\n+\n+\t\t\t\treturn self::$_instances[ $user_id ];\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-profile-tabs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-profile-tabs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-profile-tabs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-profile-tabs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,437 +1,437 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * Class LP_Profile_Tabs\r\n- *\u002F\r\n-class LP_Profile_Tabs {\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_data = array();\r\n-\t\u002F**\r\n-\t * @var LP_Profile_Tabs\r\n-\t *\u002F\r\n-\tprotected static $_instance = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_Profile\r\n-\t *\u002F\r\n-\tprotected $profile = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_Profile_Tabs constructor.\r\n-\t *\r\n-\t * @param array $tabs\r\n-\t * @param LP_Profile $profile\r\n-\t *\u002F\r\n-\tpublic function __construct( $tabs, $profile ) {\r\n-\t\t$tabs_tmp = [];\r\n-\t\tforeach ( $tabs as $k => $v ) {\r\n-\t\t\t$tabs_tmp[ $k ]              = $v;\r\n-\t\t\t$tabs_tmp[ $k ]['key_index'] = $k;\r\n-\t\t\tif ( ! array_key_exists( 'priority', $v ) ) {\r\n-\t\t\t\t$tabs_tmp[ $k ]['priority'] = 10;\r\n-\t\t\t}\r\n-\t\t\tif ( ! array_key_exists( 'slug', $v ) ) {\r\n-\t\t\t\t$tabs_tmp[ $k ]['slug'] = $k;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Sort tab by priority.\r\n-\t\tusort(\r\n-\t\t\t$tabs_tmp,\r\n-\t\t\tfunction ( $tab1, $tab2 ) {\r\n-\t\t\t\tif ( $tab1['priority'] \u003C $tab2['priority'] ) {\r\n-\t\t\t\t\treturn - 1;\r\n-\t\t\t\t} elseif ( $tab1['priority'] > $tab2['priority'] ) {\r\n-\t\t\t\t\treturn 1;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\treturn 0;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $tabs_tmp as $v ) {\r\n-\t\t\t$k                 = $v['key_index'];\r\n-\t\t\t$this->_data[ $k ] = new LP_Profile_Tab( $k, $v, $profile );\r\n-\t\t}\r\n-\r\n-\t\t$this->profile = $profile;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_Profile|null\r\n-\t *\u002F\r\n-\tpublic function get_profile() {\r\n-\t\treturn $this->profile;\r\n-\t}\r\n-\r\n-\tpublic function get_current_tab( $default = '', $key = true ) {\r\n-\t\tglobal $wp;\r\n-\t\t$current = $default;\r\n-\r\n-\t\tif ( ! empty( $_REQUEST['view'] ) ) {\r\n-\t\t\t$current = sanitize_text_field( $_REQUEST['view'] );\r\n-\t\t} elseif ( ! empty( $wp->query_vars['view'] ) ) {\r\n-\t\t\t$current = $wp->query_vars['view'];\r\n-\t\t} else {\r\n-\t\t\t$tab = $this->get_tab_at();\r\n-\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\r\n-\t\t\t\t$current = $tab->get( 'slug' );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $key ) {\r\n-\t\t\t$current_display = $current;\r\n-\t\t\t$current         = false;\r\n-\t\t\tforeach ( $this->get() as $_slug => $data ) {\r\n-\t\t\t\tif ( is_object( $data ) ) {\r\n-\t\t\t\t\tif ( $data->get( 'slug' ) === $current_display ) {\r\n-\t\t\t\t\t\t$current = $_slug;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( is_array( $data ) ) {\r\n-\t\t\t\t\tif ( $data['slug'] === $current_display ) {\r\n-\t\t\t\t\t\t$current = $_slug;\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $current;\r\n-\t}\r\n-\r\n-\tpublic function get_current_section( $default = '', $key = true, $tab = '' ) {\r\n-\t\tglobal $wp;\r\n-\r\n-\t\t$current = $default;\r\n-\r\n-\t\tif ( ! empty( $_REQUEST['section'] ) ) {\r\n-\t\t\t$current = sanitize_text_field( $_REQUEST['section'] );\r\n-\t\t} elseif ( ! empty( $wp->query_vars['section'] ) ) {\r\n-\t\t\t$current = $wp->query_vars['section'];\r\n-\t\t} else {\r\n-\t\t\tif ( false === $tab ) {\r\n-\t\t\t\t$current_tab = $this->get_current_tab();\r\n-\t\t\t} else {\r\n-\t\t\t\t$current_tab = $tab;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$tab = $this->get_tab_at( $current_tab );\r\n-\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\r\n-\t\t\t\tif ( ! empty( $tab->get( 'sections' ) ) ) {\r\n-\t\t\t\t\t$sections = $tab->get( 'sections' );\r\n-\t\t\t\t\t$section  = reset( $sections );\r\n-\t\t\t\t\tif ( array_key_exists( 'slug', $section ) ) {\r\n-\t\t\t\t\t\t$current = $tab->get( 'slug' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$sections = array_keys( $tab->get( 'sections' ) );\r\n-\t\t\t\t\t\t$current  = reset( $sections );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $key ) {\r\n-\t\t\t$current_display = $current;\r\n-\t\t\t$current         = false;\r\n-\r\n-\t\t\tforeach ( $this->get() as $_slug => $data ) {\r\n-\t\t\t\tif ( empty( $data->get( 'sections' ) ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tforeach ( $data->get( 'sections' ) as $_slug => $data ) {\r\n-\t\t\t\t\tif ( array_key_exists( 'slug', $data ) && ( $data['slug'] === $current_display ) ) {\r\n-\t\t\t\t\t\t$current = $_slug;\r\n-\t\t\t\t\t\tbreak 2;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $current;\r\n-\t}\r\n-\r\n-\r\n-\t\u002F**\r\n-\t * @param bool $tab\r\n-\t * @param bool $with_section\r\n-\t * @param string $user_slug\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function get_tab_link( $tab = false, $with_section = false, $user_slug = '' ) {\r\n-\t\t$url  = '';\r\n-\t\t$args = array( 'user' => $user_slug );\r\n-\r\n-\t\tif ( false === $tab ) {\r\n-\t\t\t$tab = $this->get_current_tab( null, false );\r\n-\t\t}\r\n-\r\n-\t\t$tab_data = $this->get_tab_at( $tab );\r\n-\t\tif ( $tab_data instanceof LP_Profile_Tab ) {\r\n-\t\t\t$slug = $this->get_slug( $tab_data, $tab );\r\n-\t\t\tif ( $slug ) {\r\n-\t\t\t\t$args['tab'] = $slug;\r\n-\t\t\t} else {\r\n-\t\t\t\tunset( $args['user'] );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $with_section && ! empty( $tab_data->get( 'sections' ) ) ) {\r\n-\t\t\t\tif ( $with_section === true ) {\r\n-\t\t\t\t\t$section_keys  = array_keys( $tab_data->get( 'sections' ) );\r\n-\t\t\t\t\t$first_section = reset( $section_keys );\r\n-\t\t\t\t\t$with_section  = $this->get_slug( $tab_data->get( 'sections' )[ $first_section ], $first_section );\r\n-\t\t\t\t}\r\n-\t\t\t\t$args['section'] = $with_section;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$profile_link = trailingslashit( learn_press_get_page_link( 'profile' ) );\r\n-\t\tif ( $profile_link ) {\r\n-\t\t\tif ( get_option( 'permalink_structure' ) ) {\r\n-\t\t\t\t$url = trailingslashit( $profile_link . join( '\u002F', array_values( $args ) ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$url = esc_url_raw( add_query_arg( $args, $profile_link ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fprofile\u002Ftab\u002Flink', $url, $tab, $with_section, $user_slug );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get the slug of tab or section if defined.\r\n-\t *\r\n-\t * @param $tab_or_section\r\n-\t * @param string $default\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_slug( $tab_or_section, $default = '' ) {\r\n-\t\tif ( is_array( $tab_or_section ) ) {\r\n-\t\t\treturn array_key_exists( 'slug', $tab_or_section ) ? $tab_or_section['slug'] : false;\r\n-\t\t}\r\n-\r\n-\t\tif ( is_string( $tab_or_section ) ) {\r\n-\t\t\treturn $tab_or_section;\r\n-\t\t}\r\n-\r\n-\t\treturn $tab_or_section ? $tab_or_section->get( 'slug' ) : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get current link of profile\r\n-\t *\r\n-\t * @param string $args - Optional. Add more query args to url.\r\n-\t * @param bool $with_permalink - Optional. TRUE to build url as friendly url.\r\n-\t *\r\n-\t * @return mixed|string\r\n-\t * @Todo tungnx - need check this function\r\n-\t *\u002F\r\n-\tpublic function get_current_url( $args = '', $with_permalink = false ) {\r\n-\t\t$current_tab = $this->get_current_tab();\r\n-\t\t$tab         = $this->get_tab_at( $current_tab );\r\n-\t\tif ( ! $tab instanceof LP_Profile_Tab ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$lp_profile = $this->get_profile();\r\n-\t\t\u002F**\r\n-\t\t * @var $lp_user LP_User\r\n-\t\t *\u002F\r\n-\t\t$lp_user              = $lp_profile->get_user();\r\n-\t\t$current_section_slug = $this->get_current_section();\r\n-\t\tif ( ! $lp_user instanceof WP_User ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$userModel = UserModel::find( $lp_user->get_id(), true );\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\r\n-\t\t$user_pretty_slug = $userModel->get_pretty_slug();\r\n-\t\t$url              = $this->get_tab_link( $this->get_current_tab(), $current_section_slug, $user_pretty_slug );\r\n-\t\tif ( is_array( $args ) && $args ) {\r\n-\t\t\tif ( ! $with_permalink ) {\r\n-\t\t\t\t$url = esc_url_raw( add_query_arg( $args, $url ) );\r\n-\t\t\t} else {\r\n-\t\t\t\t$parts = array();\r\n-\r\n-\t\t\t\tforeach ( $args as $k => $v ) {\r\n-\t\t\t\t\t$parts[] = \"{$k}\u002F{$v}\";\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$url = trailingslashit( $url ) . join( '\u002F', $parts ) . '\u002F';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $url;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get tab data at a position.\r\n-\t *\r\n-\t * @param int $position Optional. Indexed number or slug.\r\n-\t *\r\n-\t * @return false|LP_Profile_Tab\r\n-\t *\u002F\r\n-\tpublic function get_tab_at( $position = 0 ) {\r\n-\t\tif ( ! $position ) {\r\n-\t\t\t$position = 0;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->get() ) {\r\n-\t\t\t$tabs = $this->get();\r\n-\r\n-\t\t\tif ( is_numeric( $position ) ) {\r\n-\t\t\t\t$tabs = array_values( $tabs );\r\n-\t\t\t\tif ( ! empty( $tabs[ $position ] ) ) {\r\n-\t\t\t\t\treturn $tabs[ $position ];\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( ! empty( $tabs[ $position ] ) ) {\r\n-\t\t\t\t\treturn $tabs[ $position ];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function tabs() {\r\n-\t\treturn $this->get();\r\n-\t}\r\n-\r\n-\tpublic function get( $key = false ) {\r\n-\t\treturn false !== $key ? ( array_key_exists( $key, $this->_data ) ? $this->_data[ $key ] : false ) : $this->_data;\r\n-\t}\r\n-\r\n-\tprotected function _sort_tabs( $a, $b ) {\r\n-\t\tif ( $a['priority'] === $b['priority'] ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\treturn $a['priority'] \u003C $b['priority'] ? - 1 : 1;\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Class LP_Profile_Tab\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_Profile_Tab {\r\n-\tprotected $_data = array();\r\n-\t\u002F**\r\n-\t * @var LP_Profile\r\n-\t *\u002F\r\n-\tprotected $profile = null;\r\n-\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $id = '';\r\n-\r\n-\t\u002F**\r\n-\t * LP_Profile_Tab constructor.\r\n-\t *\r\n-\t * @param string $id\r\n-\t * @param array $data\r\n-\t * @param LP_Profile $profile\r\n-\t *\u002F\r\n-\tpublic function __construct( $id, $data, $profile ) {\r\n-\t\t\u002F\u002Fparent::__construct( $data );\r\n-\t\t$this->_data = is_array( $data ) ? $data : (array) $data;\r\n-\r\n-\t\t$this->profile = $profile;\r\n-\t\t$this->id      = $id;\r\n-\t}\r\n-\r\n-\tpublic function sections() {\r\n-\t\t$profile      = $this->get_profile();\r\n-\t\t$sections     = array();\r\n-\t\t$all_sections = $this->get( 'sections' );\r\n-\r\n-\t\tif ( $all_sections ) {\r\n-\t\t\tforeach ( $all_sections as $section_key => $section ) {\r\n-\r\n-\t\t\t\tif ( $profile->is_hidden( $section ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t$sections[ $section_key ] = $section;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $sections;\r\n-\t}\r\n-\r\n-\tpublic function get( $key = false ) {\r\n-\t\treturn false !== $key ? ( array_key_exists( $key, $this->_data ) ? $this->_data[ $key ] : false ) : $this->_data;\r\n-\t}\r\n-\r\n-\tpublic function get_profile() {\r\n-\t\treturn $this->profile;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.6.2\r\n-\t *\u002F\r\n-\tpublic function user_can_view() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\treturn false;\r\n-\t\tif ( $this->is_public() || current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\treturn true;\r\n-\t\t}\r\n-\r\n-\t\t$can = $this->get_profile()->current_user_can( \"view-tab-{$this->id}\" );\r\n-\r\n-\t\treturn $can;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.6.2\r\n-\t *\u002F\r\n-\tpublic function user_can_view_section( $section ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\treturn false;\r\n-\r\n-\t\treturn $this->get_profile()->current_user_can( \"view-section-{$section}\" );\r\n-\t}\r\n-\r\n-\tpublic function is_hidden() {\r\n-\t\treturn $this->get( 'hidden' );\r\n-\t}\r\n-\r\n-\tpublic function tab_is_visible_for_user() {\r\n-\t\treturn $this->is_current();\r\n-\t}\r\n-\r\n-\tpublic function is_current() {\r\n-\t\treturn isset( $this['is_current'] ) ? $this['is_current'] : false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Tab is public for all users can view.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @since 4.0.0\r\n-\t * @deprecated 4.2.6.2\r\n-\t *\u002F\r\n-\tpublic function is_public() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\r\n-\r\n-\t\treturn false;\r\n-\t\t$public_tabs = $this->profile->get_public_tabs();\r\n-\r\n-\t\treturn $public_tabs && in_array( $this->id, $public_tabs );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Class LP_Profile_Tabs\n+ *\u002F\n+class LP_Profile_Tabs {\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_data = array();\n+\t\u002F**\n+\t * @var LP_Profile_Tabs\n+\t *\u002F\n+\tprotected static $_instance = null;\n+\n+\t\u002F**\n+\t * @var LP_Profile\n+\t *\u002F\n+\tprotected $profile = null;\n+\n+\t\u002F**\n+\t * LP_Profile_Tabs constructor.\n+\t *\n+\t * @param array $tabs\n+\t * @param LP_Profile $profile\n+\t *\u002F\n+\tpublic function __construct( $tabs, $profile ) {\n+\t\t$tabs_tmp = [];\n+\t\tforeach ( $tabs as $k => $v ) {\n+\t\t\t$tabs_tmp[ $k ]              = $v;\n+\t\t\t$tabs_tmp[ $k ]['key_index'] = $k;\n+\t\t\tif ( ! array_key_exists( 'priority', $v ) ) {\n+\t\t\t\t$tabs_tmp[ $k ]['priority'] = 10;\n+\t\t\t}\n+\t\t\tif ( ! array_key_exists( 'slug', $v ) ) {\n+\t\t\t\t$tabs_tmp[ $k ]['slug'] = $k;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Sort tab by priority.\n+\t\tusort(\n+\t\t\t$tabs_tmp,\n+\t\t\tfunction ( $tab1, $tab2 ) {\n+\t\t\t\tif ( $tab1['priority'] \u003C $tab2['priority'] ) {\n+\t\t\t\t\treturn - 1;\n+\t\t\t\t} elseif ( $tab1['priority'] > $tab2['priority'] ) {\n+\t\t\t\t\treturn 1;\n+\t\t\t\t} else {\n+\t\t\t\t\treturn 0;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t);\n+\n+\t\tforeach ( $tabs_tmp as $v ) {\n+\t\t\t$k                 = $v['key_index'];\n+\t\t\t$this->_data[ $k ] = new LP_Profile_Tab( $k, $v, $profile );\n+\t\t}\n+\n+\t\t$this->profile = $profile;\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_Profile|null\n+\t *\u002F\n+\tpublic function get_profile() {\n+\t\treturn $this->profile;\n+\t}\n+\n+\tpublic function get_current_tab( $default = '', $key = true ) {\n+\t\tglobal $wp;\n+\t\t$current = $default;\n+\n+\t\tif ( ! empty( $_REQUEST['view'] ) ) {\n+\t\t\t$current = sanitize_text_field( $_REQUEST['view'] );\n+\t\t} elseif ( ! empty( $wp->query_vars['view'] ) ) {\n+\t\t\t$current = $wp->query_vars['view'];\n+\t\t} else {\n+\t\t\t$tab = $this->get_tab_at();\n+\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\n+\t\t\t\t$current = $tab->get( 'slug' );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $key ) {\n+\t\t\t$current_display = $current;\n+\t\t\t$current         = false;\n+\t\t\tforeach ( $this->get() as $_slug => $data ) {\n+\t\t\t\tif ( is_object( $data ) ) {\n+\t\t\t\t\tif ( $data->get( 'slug' ) === $current_display ) {\n+\t\t\t\t\t\t$current = $_slug;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( is_array( $data ) ) {\n+\t\t\t\t\tif ( $data['slug'] === $current_display ) {\n+\t\t\t\t\t\t$current = $_slug;\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $current;\n+\t}\n+\n+\tpublic function get_current_section( $default = '', $key = true, $tab = '' ) {\n+\t\tglobal $wp;\n+\n+\t\t$current = $default;\n+\n+\t\tif ( ! empty( $_REQUEST['section'] ) ) {\n+\t\t\t$current = sanitize_text_field( $_REQUEST['section'] );\n+\t\t} elseif ( ! empty( $wp->query_vars['section'] ) ) {\n+\t\t\t$current = $wp->query_vars['section'];\n+\t\t} else {\n+\t\t\tif ( false === $tab ) {\n+\t\t\t\t$current_tab = $this->get_current_tab();\n+\t\t\t} else {\n+\t\t\t\t$current_tab = $tab;\n+\t\t\t}\n+\n+\t\t\t$tab = $this->get_tab_at( $current_tab );\n+\t\t\tif ( $tab instanceof LP_Profile_Tab ) {\n+\t\t\t\tif ( ! empty( $tab->get( 'sections' ) ) ) {\n+\t\t\t\t\t$sections = $tab->get( 'sections' );\n+\t\t\t\t\t$section  = reset( $sections );\n+\t\t\t\t\tif ( array_key_exists( 'slug', $section ) ) {\n+\t\t\t\t\t\t$current = $tab->get( 'slug' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$sections = array_keys( $tab->get( 'sections' ) );\n+\t\t\t\t\t\t$current  = reset( $sections );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $key ) {\n+\t\t\t$current_display = $current;\n+\t\t\t$current         = false;\n+\n+\t\t\tforeach ( $this->get() as $_slug => $data ) {\n+\t\t\t\tif ( empty( $data->get( 'sections' ) ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $data->get( 'sections' ) as $_slug => $data ) {\n+\t\t\t\t\tif ( array_key_exists( 'slug', $data ) && ( $data['slug'] === $current_display ) ) {\n+\t\t\t\t\t\t$current = $_slug;\n+\t\t\t\t\t\tbreak 2;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $current;\n+\t}\n+\n+\n+\t\u002F**\n+\t * @param bool $tab\n+\t * @param bool $with_section\n+\t * @param string $user_slug\n+\t *\n+\t * @return string\n+\t * @since 3.0.0\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function get_tab_link( $tab = false, $with_section = false, $user_slug = '' ) {\n+\t\t$url  = '';\n+\t\t$args = array( 'user' => $user_slug );\n+\n+\t\tif ( false === $tab ) {\n+\t\t\t$tab = $this->get_current_tab( null, false );\n+\t\t}\n+\n+\t\t$tab_data = $this->get_tab_at( $tab );\n+\t\tif ( $tab_data instanceof LP_Profile_Tab ) {\n+\t\t\t$slug = $this->get_slug( $tab_data, $tab );\n+\t\t\tif ( $slug ) {\n+\t\t\t\t$args['tab'] = $slug;\n+\t\t\t} else {\n+\t\t\t\tunset( $args['user'] );\n+\t\t\t}\n+\n+\t\t\tif ( $with_section && ! empty( $tab_data->get( 'sections' ) ) ) {\n+\t\t\t\tif ( $with_section === true ) {\n+\t\t\t\t\t$section_keys  = array_keys( $tab_data->get( 'sections' ) );\n+\t\t\t\t\t$first_section = reset( $section_keys );\n+\t\t\t\t\t$with_section  = $this->get_slug( $tab_data->get( 'sections' )[ $first_section ], $first_section );\n+\t\t\t\t}\n+\t\t\t\t$args['section'] = $with_section;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$profile_link = trailingslashit( learn_press_get_page_link( 'profile' ) );\n+\t\tif ( $profile_link ) {\n+\t\t\tif ( get_option( 'permalink_structure' ) ) {\n+\t\t\t\t$url = trailingslashit( $profile_link . join( '\u002F', array_values( $args ) ) );\n+\t\t\t} else {\n+\t\t\t\t$url = esc_url_raw( add_query_arg( $args, $profile_link ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Fprofile\u002Ftab\u002Flink', $url, $tab, $with_section, $user_slug );\n+\t}\n+\n+\t\u002F**\n+\t * Get the slug of tab or section if defined.\n+\t *\n+\t * @param $tab_or_section\n+\t * @param string $default\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_slug( $tab_or_section, $default = '' ) {\n+\t\tif ( is_array( $tab_or_section ) ) {\n+\t\t\treturn array_key_exists( 'slug', $tab_or_section ) ? $tab_or_section['slug'] : false;\n+\t\t}\n+\n+\t\tif ( is_string( $tab_or_section ) ) {\n+\t\t\treturn $tab_or_section;\n+\t\t}\n+\n+\t\treturn $tab_or_section ? $tab_or_section->get( 'slug' ) : false;\n+\t}\n+\n+\t\u002F**\n+\t * Get current link of profile\n+\t *\n+\t * @param string $args - Optional. Add more query args to url.\n+\t * @param bool $with_permalink - Optional. TRUE to build url as friendly url.\n+\t *\n+\t * @return mixed|string\n+\t * @Todo tungnx - need check this function\n+\t *\u002F\n+\tpublic function get_current_url( $args = '', $with_permalink = false ) {\n+\t\t$current_tab = $this->get_current_tab();\n+\t\t$tab         = $this->get_tab_at( $current_tab );\n+\t\tif ( ! $tab instanceof LP_Profile_Tab ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$lp_profile = $this->get_profile();\n+\t\t\u002F**\n+\t\t * @var $lp_user LP_User\n+\t\t *\u002F\n+\t\t$lp_user              = $lp_profile->get_user();\n+\t\t$current_section_slug = $this->get_current_section();\n+\t\tif ( ! $lp_user instanceof WP_User ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$userModel = UserModel::find( $lp_user->get_id(), true );\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn '';\n+\t\t}\n+\n+\t\t$user_pretty_slug = $userModel->get_slug_link();\n+\t\t$url              = $this->get_tab_link( $this->get_current_tab(), $current_section_slug, $user_pretty_slug );\n+\t\tif ( is_array( $args ) && $args ) {\n+\t\t\tif ( ! $with_permalink ) {\n+\t\t\t\t$url = esc_url_raw( add_query_arg( $args, $url ) );\n+\t\t\t} else {\n+\t\t\t\t$parts = array();\n+\n+\t\t\t\tforeach ( $args as $k => $v ) {\n+\t\t\t\t\t$parts[] = \"{$k}\u002F{$v}\";\n+\t\t\t\t}\n+\n+\t\t\t\t$url = trailingslashit( $url ) . join( '\u002F', $parts ) . '\u002F';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $url;\n+\t}\n+\n+\t\u002F**\n+\t * Get tab data at a position.\n+\t *\n+\t * @param int $position Optional. Indexed number or slug.\n+\t *\n+\t * @return false|LP_Profile_Tab\n+\t *\u002F\n+\tpublic function get_tab_at( $position = 0 ) {\n+\t\tif ( ! $position ) {\n+\t\t\t$position = 0;\n+\t\t}\n+\n+\t\tif ( $this->get() ) {\n+\t\t\t$tabs = $this->get();\n+\n+\t\t\tif ( is_numeric( $position ) ) {\n+\t\t\t\t$tabs = array_values( $tabs );\n+\t\t\t\tif ( ! empty( $tabs[ $position ] ) ) {\n+\t\t\t\t\treturn $tabs[ $position ];\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( ! empty( $tabs[ $position ] ) ) {\n+\t\t\t\t\treturn $tabs[ $position ];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function tabs() {\n+\t\treturn $this->get();\n+\t}\n+\n+\tpublic function get( $key = false ) {\n+\t\treturn false !== $key ? ( array_key_exists( $key, $this->_data ) ? $this->_data[ $key ] : false ) : $this->_data;\n+\t}\n+\n+\tprotected function _sort_tabs( $a, $b ) {\n+\t\tif ( $a['priority'] === $b['priority'] ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\treturn $a['priority'] \u003C $b['priority'] ? - 1 : 1;\n+\t}\n+}\n+\n+\u002F**\n+ * Class LP_Profile_Tab\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_Profile_Tab {\n+\tprotected $_data = array();\n+\t\u002F**\n+\t * @var LP_Profile\n+\t *\u002F\n+\tprotected $profile = null;\n+\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $id = '';\n+\n+\t\u002F**\n+\t * LP_Profile_Tab constructor.\n+\t *\n+\t * @param string $id\n+\t * @param array $data\n+\t * @param LP_Profile $profile\n+\t *\u002F\n+\tpublic function __construct( $id, $data, $profile ) {\n+\t\t\u002F\u002Fparent::__construct( $data );\n+\t\t$this->_data = is_array( $data ) ? $data : (array) $data;\n+\n+\t\t$this->profile = $profile;\n+\t\t$this->id      = $id;\n+\t}\n+\n+\tpublic function sections() {\n+\t\t$profile      = $this->get_profile();\n+\t\t$sections     = array();\n+\t\t$all_sections = $this->get( 'sections' );\n+\n+\t\tif ( $all_sections ) {\n+\t\t\tforeach ( $all_sections as $section_key => $section ) {\n+\n+\t\t\t\tif ( $profile->is_hidden( $section ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t$sections[ $section_key ] = $section;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $sections;\n+\t}\n+\n+\tpublic function get( $key = false ) {\n+\t\treturn false !== $key ? ( array_key_exists( $key, $this->_data ) ? $this->_data[ $key ] : false ) : $this->_data;\n+\t}\n+\n+\tpublic function get_profile() {\n+\t\treturn $this->profile;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.6.2\n+\t *\u002F\n+\tpublic function user_can_view() {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\treturn false;\n+\t\tif ( $this->is_public() || current_user_can( ADMIN_ROLE ) ) {\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\t$can = $this->get_profile()->current_user_can( \"view-tab-{$this->id}\" );\n+\n+\t\treturn $can;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.6.2\n+\t *\u002F\n+\tpublic function user_can_view_section( $section ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\treturn false;\n+\n+\t\treturn $this->get_profile()->current_user_can( \"view-section-{$section}\" );\n+\t}\n+\n+\tpublic function is_hidden() {\n+\t\treturn $this->get( 'hidden' );\n+\t}\n+\n+\tpublic function tab_is_visible_for_user() {\n+\t\treturn $this->is_current();\n+\t}\n+\n+\tpublic function is_current() {\n+\t\treturn isset( $this['is_current'] ) ? $this['is_current'] : false;\n+\t}\n+\n+\t\u002F**\n+\t * Tab is public for all users can view.\n+\t *\n+\t * @return bool\n+\t * @since 4.0.0\n+\t * @deprecated 4.2.6.2\n+\t *\u002F\n+\tpublic function is_public() {\n+\t\t_deprecated_function( __METHOD__, '4.2.6.2' );\n+\n+\t\treturn false;\n+\t\t$public_tabs = $this->profile->get_public_tabs();\n+\n+\t\treturn $public_tabs && in_array( $this->id, $public_tabs );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user-factory.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user-factory.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user-factory.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user-factory.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,586 +1,586 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Background\\LPBackgroundAjax;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Class LP_User_Factory\r\n- *\u002F\r\n-class LP_User_Factory {\r\n-\t\u002F**\r\n-\t * Init hooks\r\n-\t *\u002F\r\n-\tpublic static function init() {\r\n-\t\tadd_action( 'learn-press\u002Forder\u002Fstatus-changed', array( __CLASS__, 'update_user_items' ), 10, 3 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle when order changed status\r\n-\t *\r\n-\t * @param $the_id\r\n-\t * @param $old_status\r\n-\t * @param $new_status\r\n-\t *\r\n-\t * @Todo tungnx - should write on class LP_Order\r\n-\t *\u002F\r\n-\tpublic static function update_user_items( $the_id, $old_status, $new_status ) {\r\n-\t\tini_set( 'max_execution_time', 0 );\r\n-\t\t$order = learn_press_get_order( $the_id );\r\n-\t\tif ( ! $order ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\ttry {\r\n-\t\t\tswitch ( $new_status ) {\r\n-\t\t\t\tcase LP_ORDER_PENDING:\r\n-\t\t\t\tcase LP_ORDER_PROCESSING:\r\n-\t\t\t\tcase LP_ORDER_CANCELLED:\r\n-\t\t\t\tcase LP_ORDER_FAILED:\r\n-\t\t\t\t\tself::_update_user_item_order_pending( $order, $old_status, $new_status );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase LP_ORDER_COMPLETED:\r\n-\t\t\t\t\tself::_update_user_item_order_completed( $order, $old_status, $new_status );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $ex ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $ex->getMessage() );\r\n-\t\t}\r\n-\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update lp_user_items has Order\r\n-\t * Only handle when change status LP Order from Completed to another status\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param string $old_status\r\n-\t * @param string $new_status\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @author Nhamdv \u003Cemail@email.com>\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tprotected static function _update_user_item_order_pending( $order, $old_status, $new_status ) {\r\n-\t\t$items = $order->get_all_items();\r\n-\t\tif ( ! $items ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tif ( $old_status !== LP_ORDER_COMPLETED ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $order->get_users() as $user_id ) {\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\tif ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {\r\n-\t\t\t\t\t$course_id = $item['item_id'];\r\n-\r\n-\t\t\t\t\tif ( $user_id ) {\r\n-\t\t\t\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t\t\t\t\u002F\u002F Check course is learning is sample order_id with order which is changing status\r\n-\t\t\t\t\t\tif ( ! $userCourse || $userCourse->ref_id != $order->get_id() ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\u002F\u002F Only change status of user_item to cancel, not delete user_item and user_item_results.\r\n-\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_CANCEL;\r\n-\t\t\t\t\t\t$userCourse->save();\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );\r\n-\t\t\t\t\t\t\u002F\u002F Check course is learning is sample order_id with order which is changing status\r\n-\t\t\t\t\t\tif ( ! $userCourseGuest || $userCourseGuest->ref_id != $order->get_id() ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$userCourseGuest->status = UserItemModel::STATUS_CANCEL;\r\n-\t\t\t\t\t\t$userCourseGuest->save();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F For buy other item type (not course)\r\n-\t\t\t\t\t\u002F\u002F For case item is Certificate, when update code of Certificate, should remove this code\r\n-\t\t\t\t\tif ( $item['item_type'] === 'lp_cert' ) {\r\n-\t\t\t\t\t\t$item['_lp_cert_id'] = $item['item_id'];\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdo_action( 'lp\u002Forder-pending\u002Fupdate\u002Fuser-item', $item, $order, $user );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Enroll course if Order completed\r\n-\t * 1. Check if order change is the latest order of user for course\r\n-\t * 2. Check if user_course was canceled, only update status to Enrolled\r\n-\t * 3. Handle repurchase course if allow repurchase\r\n-\t * 4. Create new user_course if first purchase course\r\n-\t * 5. Enroll course free or no enroll requirement\r\n-\t * 6. Enroll course for guest if auto enroll enable\r\n-\t * 7. Send email background when user enroll course\r\n-\t *\r\n-\t * @param LP_Order $order\r\n-\t * @param string $old_status\r\n-\t * @param string $new_status\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.2\r\n-\t * @version 1.0.6\r\n-\t *\u002F\r\n-\tprotected static function _update_user_item_order_completed( LP_Order $order, string $old_status, string $new_status ) {\r\n-\t\t$lp_order_db = LP_Order_DB::getInstance();\r\n-\t\t$items       = $order->get_all_items();\r\n-\t\tif ( ! $items ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$usersCourses = [];\r\n-\t\tforeach ( $order->get_users() as $user_id ) {\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\tif ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {\r\n-\t\t\t\t\t$course_id = $item['item_id'];\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check order_id of user_item current must \u003C new order_id\r\n-\t\t\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t\t\tif ( $user_id && $userCourse && $userCourse->ref_id > $order->get_id() ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t} elseif ( ! $user_id ) {\r\n-\t\t\t\t\t\t$userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );\r\n-\t\t\t\t\t\tif ( $userCourseGuest && $userCourseGuest->ref_id > $order->get_id() ) {\r\n-\t\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\u002F\u002F Check user course was canceled? If yes, only update status to Enrolled\r\n-\t\t\t\t\tif ( $user_id && $userCourse && $userCourse->ref_id == $order->get_id() ) {\r\n-\t\t\t\t\t\tif ( $userCourse->get_status() === UserItemModel::STATUS_CANCEL ) {\r\n-\t\t\t\t\t\t\tif ( ! empty( $userCourse->get_end_time() ) ) {\r\n-\t\t\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_FINISHED;\r\n-\t\t\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t$userCourse->save();\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $order->is_manual() ) {\r\n-\t\t\t\t\t\t$usersCourses[] = self::handle_item_manual_order_completed( $order, $user, $item );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$usersCourses[] = self::handle_item_order_completed( $order, $user, $item );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F For buy other item type (not course)\r\n-\t\t\t\t\t\u002F\u002F For case item is Certificate, when update code of Certificate, should remove this code\r\n-\t\t\t\t\tif ( $item['item_type'] === 'lp_cert' ) {\r\n-\t\t\t\t\t\t$item['_lp_cert_id'] = $item['item_id'];\r\n-\t\t\t\t\t\t\u002F\u002F Fixed for old Certificate \u003C= v4.1.2\r\n-\t\t\t\t\t\t$item['_lp_course_id_of_cert'] = learn_press_get_order_item_meta(\r\n-\t\t\t\t\t\t\t$item['order_item_id'],\r\n-\t\t\t\t\t\t\t'_lp_course_id_of_cert'\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tdo_action( 'lp\u002Forder-completed\u002Fupdate\u002Fuser-item', $item, $order, $user );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Run background send emails when users enroll courses (send for instructor, admin, student...)\r\n-\t\tif ( ! empty( $usersCourses ) ) {\r\n-\t\t\t$userCourseIds = [];\r\n-\t\t\tforeach ( $usersCourses as $userCourse ) {\r\n-\t\t\t\tif ( ! $userCourse instanceof UserCourseModel ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $userCourse->get_status() !== UserItemModel::STATUS_ENROLLED ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userCourseIds[] = [\r\n-\t\t\t\t\t'user_id'   => $userCourse->user_id,\r\n-\t\t\t\t\t'course_id' => $userCourse->item_id,\r\n-\t\t\t\t];\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $userCourseIds ) ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @uses SendEmailAjax::send_mail_users_enrolled_courses\r\n-\t\t\t *\u002F\r\n-\t\t\t$data_send = [\r\n-\t\t\t\t'user_course_ids' => $userCourseIds,\r\n-\t\t\t\t'lp-load-ajax'    => 'send_mail_users_enrolled_courses',\r\n-\t\t\t];\r\n-\t\t\tLPBackgroundAjax::handle( $data_send );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle something when Order completed\r\n-\t *\r\n-\t * @author  tungnx\r\n-\t * @since   4.1.3\r\n-\t * @version 1.1.1\r\n-\t *\u002F\r\n-\tprotected static function handle_item_order_completed( LP_Order $order, $user, $item ) {\r\n-\t\t$lp_user_items_db   = LP_User_Items_DB::getInstance();\r\n-\t\t$userCourseResponse = null;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id   = intval( $item['course_id'] ?? $item['item_id'] ?? 0 );\r\n-\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn null;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$auto_enroll                = LP_Settings::is_auto_start_course();\r\n-\t\t\t$keep_progress_items_course = false;\r\n-\r\n-\t\t\t$user_id = $user->get_id();\r\n-\t\t\tif ( $user instanceof LP_User_Guest ) {\r\n-\t\t\t\t$user_id = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F** Get the newest user_item_id of course for allow_repurchase *\u002F\r\n-\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\r\n-\r\n-\t\t\t$latest_user_item_id     = 0;\r\n-\t\t\t$allow_repurchase_option = $courseModel->get_type_repurchase();\r\n-\t\t\t$allow_repurchase_type   = '';\r\n-\r\n-\t\t\t\u002F\u002F Data user_item for save database\r\n-\t\t\t$user_item_data = [\r\n-\t\t\t\t'user_id'    => $user_id,\r\n-\t\t\t\t'item_id'    => $course_id,\r\n-\t\t\t\t'ref_id'     => $order->get_id(),\r\n-\t\t\t\t'start_time' => gmdate( LP_Datetime::$format, time() ),\r\n-\t\t\t\t'graduation' => UserItemModel::GRADUATION_IN_PROGRESS,\r\n-\t\t\t];\r\n-\r\n-\t\t\tif ( $user_id && $userCourse ) {\r\n-\t\t\t\t$latest_user_item_id = $userCourse->get_user_item_id();\r\n-\r\n-\t\t\t\t\u002F** Get allow_repurchase_type for reset, update. Add in: rest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-courses-controller.php: purchase_course *\u002F\r\n-\t\t\t\t$allow_repurchase_type = learn_press_get_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$is_no_required_enroll = $courseModel->has_no_enroll_requirement();\r\n-\t\t\t$is_in_stock           = $courseModel->is_in_stock();\r\n-\r\n-\t\t\t\u002F\u002F If > 1 time purchase same course and allow repurchase\r\n-\t\t\tif ( $courseModel->enable_allow_repurchase() && ! empty( $latest_user_item_id )\r\n-\t\t\t\t&& ! $courseModel->is_free() && ! $is_no_required_enroll ) {\r\n-\t\t\t\tif ( $allow_repurchase_option !== 'popup' ) {\r\n-\t\t\t\t\t$allow_repurchase_type = $allow_repurchase_option;\r\n-\t\t\t\t} elseif ( empty( $allow_repurchase_type ) ) {\r\n-\t\t\t\t\t\u002F\u002F For case course set repurchase Popup but buy via Upsell, PMS, Woo can't set allow_repurchase_type\r\n-\t\t\t\t\t$allow_repurchase_type = 'keep';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * If keep course progress will reset start_time, end_time, status, graduation\r\n-\t\t\t\t * where user_item_id = $latest_user_item_id\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tif ( $allow_repurchase_type === 'keep' ) {\r\n-\t\t\t\t\t$keep_progress_items_course = true;\r\n-\t\t\t\t\t\u002F\u002F Set data for update user item\r\n-\t\t\t\t\t$user_item_data['user_item_id'] = $latest_user_item_id;\r\n-\t\t\t\t\t$user_item_data['end_time']     = null;\r\n-\t\t\t\t\t$user_item_data['status']       = UserItemModel::STATUS_ENROLLED;\r\n-\r\n-\t\t\t\t\tdo_action( 'lp\u002Fallow_repurchase_options\u002Fcontinue\u002Fdb\u002Fupdate', $user_item_data, $latest_user_item_id );\r\n-\t\t\t\t} elseif ( $allow_repurchase_type === 'reset' ) {\r\n-\t\t\t\t\t$user_item_data['end_time'] = null;\r\n-\t\t\t\t\t$user_item_data['status']   = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tlearn_press_delete_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\r\n-\t\t\t} elseif ( ! $courseModel->is_free() && ! $is_no_required_enroll && $is_in_stock ) { \u002F\u002F First purchase course\r\n-\t\t\t\t\u002F\u002F Set data for create user_item\r\n-\t\t\t\tif ( $auto_enroll ) {\r\n-\t\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$user_item_data['status']     = UserItemModel::STATUS_PURCHASED;\r\n-\t\t\t\t\t$user_item_data['graduation'] = '';\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( $user_id && ( $is_in_stock || $is_no_required_enroll ) ) { \u002F\u002F Enroll course free or No enroll requirement.\r\n-\t\t\t\t\u002F\u002F Set data for create user_item\r\n-\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t} elseif ( LP_Checkout::instance()->is_enable_guest_checkout()\r\n-\t\t\t\t&& $auto_enroll && ( $is_in_stock || $is_no_required_enroll ) ) {\r\n-\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t} else {\r\n-\t\t\t\treturn null;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_item_data = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder\u002Fuser-course-data',\r\n-\t\t\t\t$user_item_data,\r\n-\t\t\t\t$order,\r\n-\t\t\t\t$item,\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$user_id\r\n-\t\t\t);\r\n-\r\n-\t\t\t$another_case = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder\u002Fcompleted\u002Fupdate-user-item\u002Fanother-case\u002Fbool',\r\n-\t\t\t\tfalse,\r\n-\t\t\t\t$user_item_data,\r\n-\t\t\t\t$order,\r\n-\t\t\t\t$item,\r\n-\t\t\t\t$courseModel,\r\n-\t\t\t\t$user_id\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $another_case ) { \u002F\u002F Handle another case to handle user_item\r\n-\t\t\t\t$userCourseResponse = apply_filters(\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Fcompleted\u002Fupdate-user-item\u002Fanother-case',\r\n-\t\t\t\t\tnull,\r\n-\t\t\t\t\t$user_item_data,\r\n-\t\t\t\t\t$order,\r\n-\t\t\t\t\t$item,\r\n-\t\t\t\t\t$courseModel,\r\n-\t\t\t\t\t$user_id\r\n-\t\t\t\t);\r\n-\t\t\t} elseif ( $keep_progress_items_course ) { \u002F\u002F Update user_item to keep course progress\r\n-\t\t\t\t$userCourse->ref_id     = $order->get_id();\r\n-\t\t\t\t$userCourse->status     = $user_item_data['status'];\r\n-\t\t\t\t$userCourse->graduation = $user_item_data['graduation'];\r\n-\t\t\t\t$userCourse->start_time = $user_item_data['start_time'];\r\n-\t\t\t\t$userCourse->end_time   = null;\r\n-\t\t\t\t$userCourse->save();\r\n-\t\t\t\t$userCourseResponse = $userCourse;\r\n-\t\t\t} else { \u002F\u002F Create new user_item\r\n-\t\t\t\t\u002F\u002F Delete items old\r\n-\t\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\t\t$userGuestCourse = self::get_user_course_guest( $course_id, $order->get_user_email() );\r\n-\t\t\t\t\tif ( $userGuestCourse ) {\r\n-\t\t\t\t\t\t$userGuestCourse->delete();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( $userCourse ) {\r\n-\t\t\t\t\t\u002F\u002F$lp_user_items_db->delete_user_items_old( $user_id, $course_id );\r\n-\t\t\t\t\t$userCourse->delete();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$userCourseNew = new UserCourseModel( $user_item_data );\r\n-\t\t\t\t$userCourseNew->save();\r\n-\t\t\t\t$userCourseResponse = $userCourseNew;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $user_item_data['status'] ) && UserItemModel::STATUS_ENROLLED == $user_item_data['status'] ) {\r\n-\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $userCourseResponse;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Handle something when Manual Order completed\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.4\r\n-\t *\u002F\r\n-\tprotected static function handle_item_manual_order_completed( LP_Order $order, $user, $item ) {\r\n-\t\t$userCourseResponse = null;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$courseModel = CourseModel::find( $item['course_id'] ?? $item['item_id'] ?? 0, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\treturn $userCourseResponse;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $user instanceof LP_User_Guest ) {\r\n-\t\t\t\treturn $userCourseResponse;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Data user_item for save database\r\n-\t\t\t$user_item_data = [\r\n-\t\t\t\t'user_id' => $user->get_id(),\r\n-\t\t\t\t'item_id' => $courseModel->get_id(),\r\n-\t\t\t\t'ref_id'  => $order->get_id(),\r\n-\t\t\t];\r\n-\r\n-\t\t\t$auto_enroll = LP_Settings::is_auto_start_course();\r\n-\t\t\tif ( $auto_enroll ) {\r\n-\t\t\t\t$user_item_data['status']     = UserItemModel::STATUS_ENROLLED;\r\n-\t\t\t\t$user_item_data['graduation'] = UserItemModel::GRADUATION_IN_PROGRESS;\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_PURCHASED;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_item_data = apply_filters(\r\n-\t\t\t\t'learn-press\u002Forder\u002Fmanual\u002Fuser-course-data',\r\n-\t\t\t\t$user_item_data,\r\n-\t\t\t\t$order,\r\n-\t\t\t\t$item,\r\n-\t\t\t\t$courseModel\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Delete lp_user_items old\r\n-\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user->get_id(), $courseModel->get_id() );\r\n-\t\t\t\u002F\u002F End\r\n-\r\n-\t\t\t$userCourseModelNew = new UserCourseModel( $user_item_data );\r\n-\t\t\t$userCourseModelNew->save();\r\n-\t\t\t$userCourseResponse = $userCourseModelNew;\r\n-\r\n-\t\t\tif ( UserItemModel::STATUS_ENROLLED == $userCourseResponse->get_status() ) {\r\n-\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $userCourseResponse;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user_course of user Guest\r\n-\t *\r\n-\t * @param $course_id\r\n-\t * @param $email_guest\r\n-\t *\r\n-\t * @return UserCourseModel|false\r\n-\t * @throws Exception\r\n-\t * @since 4.2.7.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic static function get_user_course_guest( $course_id, $email_guest ) {\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$filter           = new LP_User_Items_Filter();\r\n-\t\t$filter->user_id  = 0;\r\n-\t\t$filter->item_id  = $course_id;\r\n-\t\t$filter->join[]   = \"INNER JOIN {$lp_user_items_db->tb_postmeta} pm ON pm.post_id = ref_id\";\r\n-\t\t$filter->join[]   = \"INNER JOIN {$lp_user_items_db->tb_postmeta} pm2 ON pm2.post_id = ref_id\";\r\n-\t\t$filter->where[]  = \"AND pm.meta_key = '_checkout_email'\";\r\n-\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND pm2.meta_value = %s', $email_guest );\r\n-\r\n-\t\treturn UserCourseModel::get_user_item_model_from_db( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Hook into wp users list to exclude our temp users.\r\n-\t *\r\n-\t * @param array $args\r\n-\t *\r\n-\t * @return mixed\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\t\u002F*public static function exclude_temp_users( $args ) {\r\n-\t\tif ( LP_Request::get_string( 'lp-action' ) == 'pending-request' ) {\r\n-\t\t\t$args['include'] = self::get_pending_requests();\r\n-\t\t}\r\n-\r\n-\t\treturn $args;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get pending requests be come a Teacher.\r\n-\t *\r\n-\t * @return array\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\t\u002F*public static function get_pending_requests() {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT ID\r\n-\t\t\tFROM {$wpdb->users} u\r\n-\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s\r\n-\t\t\tWHERE um.meta_value = %s\r\n-\t\t\t\",\r\n-\t\t\t'_requested_become_teacher',\r\n-\t\t\t'yes'\r\n-\t\t);\r\n-\r\n-\t\treturn $wpdb->get_col( $query );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\t\u002F*public static function get_guest_id() {\r\n-\t\treturn 0;\u002F\u002F empty( $_COOKIE['learn_press_user_guest_id'] ) ? false : $_COOKIE['learn_press_user_guest_id'];\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * @param      $the_user\r\n-\t * @param bool $force\r\n-\t *\r\n-\t * @return LP_Abstract_User\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\t\u002F*public static function get_user( $the_user, $force = false ) {\r\n-\t\t$the_id = 0;\r\n-\t\tif ( is_numeric( $the_user ) ) {\r\n-\t\t\t$the_id = $the_user;\r\n-\t\t} elseif ( $the_user instanceof LP_Abstract_User ) {\r\n-\t\t\t$the_id = $the_user->id;\r\n-\t\t} elseif ( isset( $the_user->ID ) ) {\r\n-\t\t\t$the_id = $the_user->ID;\r\n-\t\t} elseif ( null === $the_user ) {\r\n-\t\t\t$the_id = get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\t$user_class = self::get_user_class( $the_id );\r\n-\t\tif ( $user_class instanceof LP_User_Guest ) {\r\n-\t\t\t$the_id = self::get_guest_id();\r\n-\t\t}\r\n-\t\tif ( empty( self::$_users[ $the_id ] ) || $force ) {\r\n-\t\t\tself::$_users[ $the_id ] = new $user_class( $the_id );\r\n-\t\t}\r\n-\r\n-\t\treturn self::$_users[ $the_id ];\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get class name for User Object\r\n-\t *\r\n-\t * @param int\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.2.7.3\r\n-\t *\u002F\r\n-\t\u002F\u002F  public static function get_user_class( $the_id = 0 ) {\r\n-\t\u002F\u002F      $deleted     = in_array( $the_id, self::$_deleted_users );\r\n-\t\u002F\u002F      $exists_user = ! $deleted ? get_userdata( $the_id ) : false;\r\n-\t\u002F\u002F      if ( $exists_user ) {\r\n-\t\u002F\u002F          $class = 'LP_User';\r\n-\t\u002F\u002F      } else {\r\n-\t\u002F\u002F          if ( ! $deleted ) {\r\n-\t\u002F\u002F              self::$_deleted_users[] = $the_id;\r\n-\t\u002F\u002F              \u002F**\r\n-\t\u002F\u002F               * Prevent loading user does not exists in database\r\n-\t\u002F\u002F               *\u002F\r\n-\t\u002F\u002F              $user = new LP_User_Guest( $the_id );\r\n-\t\u002F\u002F              wp_cache_add( $the_id, $user, 'users' );\r\n-\t\u002F\u002F              wp_cache_add( '', $the_id, 'userlogins' );\r\n-\t\u002F\u002F              wp_cache_add( '', $the_id, 'useremail' );\r\n-\t\u002F\u002F              wp_cache_add( '', $the_id, 'userslugs' );\r\n-\t\u002F\u002F          }\r\n-\t\u002F\u002F          $is_logged_in = function_exists( 'is_user_logged_in' ) && is_user_logged_in();\r\n-\t\u002F\u002F          $class        = $is_logged_in ? 'LP_User' : 'LP_User_Guest';\r\n-\t\u002F\u002F      }\r\n-\t\u002F\u002F\r\n-\t\u002F\u002F      return apply_filters( 'learn_press_user_class', $class );\r\n-\t\u002F\u002F  }\r\n-}\r\n-\r\n-LP_User_Factory::init();\r\n+\u003C?php\n+\n+use LearnPress\\Background\\LPBackgroundAjax;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Class LP_User_Factory\n+ *\u002F\n+class LP_User_Factory {\n+\t\u002F**\n+\t * Init hooks\n+\t *\u002F\n+\tpublic static function init() {\n+\t\tadd_action( 'learn-press\u002Forder\u002Fstatus-changed', array( __CLASS__, 'update_user_items' ), 10, 3 );\n+\t}\n+\n+\t\u002F**\n+\t * Handle when order changed status\n+\t *\n+\t * @param $the_id\n+\t * @param $old_status\n+\t * @param $new_status\n+\t *\n+\t * @Todo tungnx - should write on class LP_Order\n+\t *\u002F\n+\tpublic static function update_user_items( $the_id, $old_status, $new_status ) {\n+\t\tini_set( 'max_execution_time', 0 );\n+\t\t$order = learn_press_get_order( $the_id );\n+\t\tif ( ! $order ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\ttry {\n+\t\t\tswitch ( $new_status ) {\n+\t\t\t\tcase LP_ORDER_PENDING:\n+\t\t\t\tcase LP_ORDER_PROCESSING:\n+\t\t\t\tcase LP_ORDER_CANCELLED:\n+\t\t\t\tcase LP_ORDER_FAILED:\n+\t\t\t\t\tself::_update_user_item_order_pending( $order, $old_status, $new_status );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase LP_ORDER_COMPLETED:\n+\t\t\t\t\tself::_update_user_item_order_completed( $order, $old_status, $new_status );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t} catch ( Exception $ex ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $ex->getMessage() );\n+\t\t}\n+\t\tini_set( 'max_execution_time', LearnPress::$time_limit_default_of_sever );\n+\t}\n+\n+\t\u002F**\n+\t * Update lp_user_items has Order\n+\t * Only handle when change status LP Order from Completed to another status\n+\t *\n+\t * @param LP_Order $order\n+\t * @param string $old_status\n+\t * @param string $new_status\n+\t *\n+\t * @throws Exception\n+\t * @author Nhamdv \u003Cemail@email.com>\n+\t * @editor tungnx\n+\t * @modify 4.1.4\n+\t * @version 1.0.4\n+\t *\u002F\n+\tprotected static function _update_user_item_order_pending( $order, $old_status, $new_status ) {\n+\t\t$items = $order->get_all_items();\n+\t\tif ( ! $items ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tif ( $old_status !== LP_ORDER_COMPLETED ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $order->get_users() as $user_id ) {\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\tif ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {\n+\t\t\t\t\t$course_id = $item['item_id'];\n+\n+\t\t\t\t\tif ( $user_id ) {\n+\t\t\t\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t\t\t\t\u002F\u002F Check course is learning is sample order_id with order which is changing status\n+\t\t\t\t\t\tif ( ! $userCourse || $userCourse->ref_id != $order->get_id() ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\u002F\u002F Only change status of user_item to cancel, not delete user_item and user_item_results.\n+\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_CANCEL;\n+\t\t\t\t\t\t$userCourse->save();\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );\n+\t\t\t\t\t\t\u002F\u002F Check course is learning is sample order_id with order which is changing status\n+\t\t\t\t\t\tif ( ! $userCourseGuest || $userCourseGuest->ref_id != $order->get_id() ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$userCourseGuest->status = UserItemModel::STATUS_CANCEL;\n+\t\t\t\t\t\t$userCourseGuest->save();\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F For buy other item type (not course)\n+\t\t\t\t\t\u002F\u002F For case item is Certificate, when update code of Certificate, should remove this code\n+\t\t\t\t\tif ( $item['item_type'] === 'lp_cert' ) {\n+\t\t\t\t\t\t$item['_lp_cert_id'] = $item['item_id'];\n+\t\t\t\t\t}\n+\t\t\t\t\tdo_action( 'lp\u002Forder-pending\u002Fupdate\u002Fuser-item', $item, $order, $user );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Enroll course if Order completed\n+\t * 1. Check if order change is the latest order of user for course\n+\t * 2. Check if user_course was canceled, only update status to Enrolled\n+\t * 3. Handle repurchase course if allow repurchase\n+\t * 4. Create new user_course if first purchase course\n+\t * 5. Enroll course free or no enroll requirement\n+\t * 6. Enroll course for guest if auto enroll enable\n+\t * 7. Send email background when user enroll course\n+\t *\n+\t * @param LP_Order $order\n+\t * @param string $old_status\n+\t * @param string $new_status\n+\t *\n+\t * @throws Exception\n+\t * @editor tungnx\n+\t * @modify 4.1.2\n+\t * @version 1.0.6\n+\t *\u002F\n+\tprotected static function _update_user_item_order_completed( LP_Order $order, string $old_status, string $new_status ) {\n+\t\t$lp_order_db = LP_Order_DB::getInstance();\n+\t\t$items       = $order->get_all_items();\n+\t\tif ( ! $items ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$usersCourses = [];\n+\t\tforeach ( $order->get_users() as $user_id ) {\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\tforeach ( $items as $item ) {\n+\t\t\t\tif ( isset( $item['item_id'] ) && LP_COURSE_CPT === $item['item_type'] ) {\n+\t\t\t\t\t$course_id = $item['item_id'];\n+\n+\t\t\t\t\t\u002F\u002F Check order_id of user_item current must \u003C new order_id\n+\t\t\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t\t\tif ( $user_id && $userCourse && $userCourse->ref_id > $order->get_id() ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t} elseif ( ! $user_id ) {\n+\t\t\t\t\t\t$userCourseGuest = self::get_user_course_guest( $course_id, $order->get_user_email() );\n+\t\t\t\t\t\tif ( $userCourseGuest && $userCourseGuest->ref_id > $order->get_id() ) {\n+\t\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t\u002F\u002F Check user course was canceled? If yes, only update status to Enrolled\n+\t\t\t\t\tif ( $user_id && $userCourse && $userCourse->ref_id == $order->get_id() ) {\n+\t\t\t\t\t\tif ( $userCourse->get_status() === UserItemModel::STATUS_CANCEL ) {\n+\t\t\t\t\t\t\tif ( ! empty( $userCourse->get_end_time() ) ) {\n+\t\t\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_FINISHED;\n+\t\t\t\t\t\t\t} else {\n+\t\t\t\t\t\t\t\t$userCourse->status = UserItemModel::STATUS_ENROLLED;\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t$userCourse->save();\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $order->is_manual() ) {\n+\t\t\t\t\t\t$usersCourses[] = self::handle_item_manual_order_completed( $order, $user, $item );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$usersCourses[] = self::handle_item_order_completed( $order, $user, $item );\n+\t\t\t\t\t}\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F For buy other item type (not course)\n+\t\t\t\t\t\u002F\u002F For case item is Certificate, when update code of Certificate, should remove this code\n+\t\t\t\t\tif ( $item['item_type'] === 'lp_cert' ) {\n+\t\t\t\t\t\t$item['_lp_cert_id'] = $item['item_id'];\n+\t\t\t\t\t\t\u002F\u002F Fixed for old Certificate \u003C= v4.1.2\n+\t\t\t\t\t\t$item['_lp_course_id_of_cert'] = learn_press_get_order_item_meta(\n+\t\t\t\t\t\t\t$item['order_item_id'],\n+\t\t\t\t\t\t\t'_lp_course_id_of_cert'\n+\t\t\t\t\t\t);\n+\t\t\t\t\t}\n+\t\t\t\t\tdo_action( 'lp\u002Forder-completed\u002Fupdate\u002Fuser-item', $item, $order, $user );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Run background send emails when users enroll courses (send for instructor, admin, student...)\n+\t\tif ( ! empty( $usersCourses ) ) {\n+\t\t\t$userCourseIds = [];\n+\t\t\tforeach ( $usersCourses as $userCourse ) {\n+\t\t\t\tif ( ! $userCourse instanceof UserCourseModel ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $userCourse->get_status() !== UserItemModel::STATUS_ENROLLED ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$userCourseIds[] = [\n+\t\t\t\t\t'user_id'   => $userCourse->user_id,\n+\t\t\t\t\t'course_id' => $userCourse->item_id,\n+\t\t\t\t];\n+\t\t\t}\n+\n+\t\t\tif ( empty( $userCourseIds ) ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @uses SendEmailAjax::send_mail_users_enrolled_courses\n+\t\t\t *\u002F\n+\t\t\t$data_send = [\n+\t\t\t\t'user_course_ids' => $userCourseIds,\n+\t\t\t\t'lp-load-ajax'    => 'send_mail_users_enrolled_courses',\n+\t\t\t];\n+\t\t\tLPBackgroundAjax::handle( $data_send );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Handle something when Order completed\n+\t *\n+\t * @author  tungnx\n+\t * @since   4.1.3\n+\t * @version 1.1.1\n+\t *\u002F\n+\tprotected static function handle_item_order_completed( LP_Order $order, $user, $item ) {\n+\t\t$lp_user_items_db   = LP_User_Items_DB::getInstance();\n+\t\t$userCourseResponse = null;\n+\n+\t\ttry {\n+\t\t\t$course_id   = intval( $item['course_id'] ?? $item['item_id'] ?? 0 );\n+\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\n+\t\t\t$auto_enroll                = LP_Settings::is_auto_start_course();\n+\t\t\t$keep_progress_items_course = false;\n+\n+\t\t\t$user_id = $user->get_id();\n+\t\t\tif ( $user instanceof LP_User_Guest ) {\n+\t\t\t\t$user_id = 0;\n+\t\t\t}\n+\n+\t\t\t\u002F** Get the newest user_item_id of course for allow_repurchase *\u002F\n+\t\t\t$userCourse = UserCourseModel::find( $user_id, $course_id, true );\n+\n+\t\t\t$latest_user_item_id     = 0;\n+\t\t\t$allow_repurchase_option = $courseModel->get_type_repurchase();\n+\t\t\t$allow_repurchase_type   = '';\n+\n+\t\t\t\u002F\u002F Data user_item for save database\n+\t\t\t$user_item_data = [\n+\t\t\t\t'user_id'    => $user_id,\n+\t\t\t\t'item_id'    => $course_id,\n+\t\t\t\t'ref_id'     => $order->get_id(),\n+\t\t\t\t'start_time' => gmdate( LP_Datetime::$format, time() ),\n+\t\t\t\t'graduation' => UserItemModel::GRADUATION_IN_PROGRESS,\n+\t\t\t];\n+\n+\t\t\tif ( $user_id && $userCourse ) {\n+\t\t\t\t$latest_user_item_id = $userCourse->get_user_item_id();\n+\n+\t\t\t\t\u002F** Get allow_repurchase_type for reset, update. Add in: rest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-courses-controller.php: purchase_course *\u002F\n+\t\t\t\t$allow_repurchase_type = learn_press_get_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\n+\t\t\t}\n+\n+\t\t\t$is_no_required_enroll = $courseModel->has_no_enroll_requirement();\n+\t\t\t$is_in_stock           = $courseModel->is_in_stock();\n+\n+\t\t\t\u002F\u002F If > 1 time purchase same course and allow repurchase\n+\t\t\tif ( $courseModel->enable_allow_repurchase() && ! empty( $latest_user_item_id )\n+\t\t\t\t&& ! $courseModel->is_free() && ! $is_no_required_enroll ) {\n+\t\t\t\tif ( $allow_repurchase_option !== 'popup' ) {\n+\t\t\t\t\t$allow_repurchase_type = $allow_repurchase_option;\n+\t\t\t\t} elseif ( empty( $allow_repurchase_type ) ) {\n+\t\t\t\t\t\u002F\u002F For case course set repurchase Popup but buy via Upsell, PMS, Woo can't set allow_repurchase_type\n+\t\t\t\t\t$allow_repurchase_type = 'keep';\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * If keep course progress will reset start_time, end_time, status, graduation\n+\t\t\t\t * where user_item_id = $latest_user_item_id\n+\t\t\t\t *\u002F\n+\t\t\t\tif ( $allow_repurchase_type === 'keep' ) {\n+\t\t\t\t\t$keep_progress_items_course = true;\n+\t\t\t\t\t\u002F\u002F Set data for update user item\n+\t\t\t\t\t$user_item_data['user_item_id'] = $latest_user_item_id;\n+\t\t\t\t\t$user_item_data['end_time']     = null;\n+\t\t\t\t\t$user_item_data['status']       = UserItemModel::STATUS_ENROLLED;\n+\n+\t\t\t\t\tdo_action( 'lp\u002Fallow_repurchase_options\u002Fcontinue\u002Fdb\u002Fupdate', $user_item_data, $latest_user_item_id );\n+\t\t\t\t} elseif ( $allow_repurchase_type === 'reset' ) {\n+\t\t\t\t\t$user_item_data['end_time'] = null;\n+\t\t\t\t\t$user_item_data['status']   = UserItemModel::STATUS_ENROLLED;\n+\t\t\t\t}\n+\n+\t\t\t\tlearn_press_delete_user_item_meta( $latest_user_item_id, '_lp_allow_repurchase_type' );\n+\t\t\t} elseif ( ! $courseModel->is_free() && ! $is_no_required_enroll && $is_in_stock ) { \u002F\u002F First purchase course\n+\t\t\t\t\u002F\u002F Set data for create user_item\n+\t\t\t\tif ( $auto_enroll ) {\n+\t\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\n+\t\t\t\t} else {\n+\t\t\t\t\t$user_item_data['status']     = UserItemModel::STATUS_PURCHASED;\n+\t\t\t\t\t$user_item_data['graduation'] = '';\n+\t\t\t\t}\n+\t\t\t} elseif ( $user_id && ( $is_in_stock || $is_no_required_enroll ) ) { \u002F\u002F Enroll course free or No enroll requirement.\n+\t\t\t\t\u002F\u002F Set data for create user_item\n+\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\n+\t\t\t} elseif ( LP_Checkout::instance()->is_enable_guest_checkout()\n+\t\t\t\t&& $auto_enroll && ( $is_in_stock || $is_no_required_enroll ) ) {\n+\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_ENROLLED;\n+\t\t\t} else {\n+\t\t\t\treturn null;\n+\t\t\t}\n+\n+\t\t\t$user_item_data = apply_filters(\n+\t\t\t\t'learn-press\u002Forder\u002Fuser-course-data',\n+\t\t\t\t$user_item_data,\n+\t\t\t\t$order,\n+\t\t\t\t$item,\n+\t\t\t\t$courseModel,\n+\t\t\t\t$user_id\n+\t\t\t);\n+\n+\t\t\t$another_case = apply_filters(\n+\t\t\t\t'learn-press\u002Forder\u002Fcompleted\u002Fupdate-user-item\u002Fanother-case\u002Fbool',\n+\t\t\t\tfalse,\n+\t\t\t\t$user_item_data,\n+\t\t\t\t$order,\n+\t\t\t\t$item,\n+\t\t\t\t$courseModel,\n+\t\t\t\t$user_id\n+\t\t\t);\n+\n+\t\t\tif ( $another_case ) { \u002F\u002F Handle another case to handle user_item\n+\t\t\t\t$userCourseResponse = apply_filters(\n+\t\t\t\t\t'learn-press\u002Forder\u002Fcompleted\u002Fupdate-user-item\u002Fanother-case',\n+\t\t\t\t\tnull,\n+\t\t\t\t\t$user_item_data,\n+\t\t\t\t\t$order,\n+\t\t\t\t\t$item,\n+\t\t\t\t\t$courseModel,\n+\t\t\t\t\t$user_id\n+\t\t\t\t);\n+\t\t\t} elseif ( $keep_progress_items_course ) { \u002F\u002F Update user_item to keep course progress\n+\t\t\t\t$userCourse->ref_id     = $order->get_id();\n+\t\t\t\t$userCourse->status     = $user_item_data['status'];\n+\t\t\t\t$userCourse->graduation = $user_item_data['graduation'];\n+\t\t\t\t$userCourse->start_time = $user_item_data['start_time'];\n+\t\t\t\t$userCourse->end_time   = null;\n+\t\t\t\t$userCourse->save();\n+\t\t\t\t$userCourseResponse = $userCourse;\n+\t\t\t} else { \u002F\u002F Create new user_item\n+\t\t\t\t\u002F\u002F Delete items old\n+\t\t\t\tif ( ! $user_id ) {\n+\t\t\t\t\t$userGuestCourse = self::get_user_course_guest( $course_id, $order->get_user_email() );\n+\t\t\t\t\tif ( $userGuestCourse ) {\n+\t\t\t\t\t\t$userGuestCourse->delete();\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( $userCourse ) {\n+\t\t\t\t\t\u002F\u002F$lp_user_items_db->delete_user_items_old( $user_id, $course_id );\n+\t\t\t\t\t$userCourse->delete();\n+\t\t\t\t}\n+\n+\t\t\t\t$userCourseNew = new UserCourseModel( $user_item_data );\n+\t\t\t\t$userCourseNew->save();\n+\t\t\t\t$userCourseResponse = $userCourseNew;\n+\t\t\t}\n+\n+\t\t\tif ( isset( $user_item_data['status'] ) && UserItemModel::STATUS_ENROLLED == $user_item_data['status'] ) {\n+\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $userCourseResponse;\n+\t}\n+\n+\t\u002F**\n+\t * Handle something when Manual Order completed\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.3\n+\t * @version 1.0.4\n+\t *\u002F\n+\tprotected static function handle_item_manual_order_completed( LP_Order $order, $user, $item ) {\n+\t\t$userCourseResponse = null;\n+\n+\t\ttry {\n+\t\t\t$courseModel = CourseModel::find( $item['course_id'] ?? $item['item_id'] ?? 0, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\treturn $userCourseResponse;\n+\t\t\t}\n+\n+\t\t\tif ( $user instanceof LP_User_Guest ) {\n+\t\t\t\treturn $userCourseResponse;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Data user_item for save database\n+\t\t\t$user_item_data = [\n+\t\t\t\t'user_id' => $user->get_id(),\n+\t\t\t\t'item_id' => $courseModel->get_id(),\n+\t\t\t\t'ref_id'  => $order->get_id(),\n+\t\t\t];\n+\n+\t\t\t$auto_enroll = LP_Settings::is_auto_start_course();\n+\t\t\tif ( $auto_enroll ) {\n+\t\t\t\t$user_item_data['status']     = UserItemModel::STATUS_ENROLLED;\n+\t\t\t\t$user_item_data['graduation'] = UserItemModel::GRADUATION_IN_PROGRESS;\n+\t\t\t} else {\n+\t\t\t\t$user_item_data['status'] = UserItemModel::STATUS_PURCHASED;\n+\t\t\t}\n+\n+\t\t\t$user_item_data = apply_filters(\n+\t\t\t\t'learn-press\u002Forder\u002Fmanual\u002Fuser-course-data',\n+\t\t\t\t$user_item_data,\n+\t\t\t\t$order,\n+\t\t\t\t$item,\n+\t\t\t\t$courseModel\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Delete lp_user_items old\n+\t\t\tLP_User_Items_DB::getInstance()->delete_user_items_old( $user->get_id(), $courseModel->get_id() );\n+\t\t\t\u002F\u002F End\n+\n+\t\t\t$userCourseModelNew = new UserCourseModel( $user_item_data );\n+\t\t\t$userCourseModelNew->save();\n+\t\t\t$userCourseResponse = $userCourseModelNew;\n+\n+\t\t\tif ( UserItemModel::STATUS_ENROLLED == $userCourseResponse->get_status() ) {\n+\t\t\t\tdo_action( 'learnpress\u002Fuser\u002Fcourse-enrolled', $order->get_id(), $user_item_data['item_id'], $user_item_data['user_id'] );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $userCourseResponse;\n+\t}\n+\n+\t\u002F**\n+\t * Get user_course of user Guest\n+\t *\n+\t * @param $course_id\n+\t * @param $email_guest\n+\t *\n+\t * @return UserCourseModel|false\n+\t * @throws Exception\n+\t * @since 4.2.7.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic static function get_user_course_guest( $course_id, $email_guest ) {\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$filter           = new LP_User_Items_Filter();\n+\t\t$filter->user_id  = 0;\n+\t\t$filter->item_id  = $course_id;\n+\t\t$filter->join[]   = \"INNER JOIN {$lp_user_items_db->tb_postmeta} pm ON pm.post_id = ref_id\";\n+\t\t$filter->join[]   = \"INNER JOIN {$lp_user_items_db->tb_postmeta} pm2 ON pm2.post_id = ref_id\";\n+\t\t$filter->where[]  = \"AND pm.meta_key = '_checkout_email'\";\n+\t\t$filter->where[]  = $lp_user_items_db->wpdb->prepare( 'AND pm2.meta_value = %s', $email_guest );\n+\n+\t\treturn UserCourseModel::get_user_item_model_from_db( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Hook into wp users list to exclude our temp users.\n+\t *\n+\t * @param array $args\n+\t *\n+\t * @return mixed\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\t\u002F*public static function exclude_temp_users( $args ) {\n+\t\tif ( LP_Request::get_string( 'lp-action' ) == 'pending-request' ) {\n+\t\t\t$args['include'] = self::get_pending_requests();\n+\t\t}\n+\n+\t\treturn $args;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get pending requests be come a Teacher.\n+\t *\n+\t * @return array\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\t\u002F*public static function get_pending_requests() {\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT ID\n+\t\t\tFROM {$wpdb->users} u\n+\t\t\tINNER JOIN {$wpdb->usermeta} um ON um.user_id = u.ID AND um.meta_key = %s\n+\t\t\tWHERE um.meta_value = %s\n+\t\t\t\",\n+\t\t\t'_requested_become_teacher',\n+\t\t\t'yes'\n+\t\t);\n+\n+\t\treturn $wpdb->get_col( $query );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\t\u002F*public static function get_guest_id() {\n+\t\treturn 0;\u002F\u002F empty( $_COOKIE['learn_press_user_guest_id'] ) ? false : $_COOKIE['learn_press_user_guest_id'];\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * @param      $the_user\n+\t * @param bool $force\n+\t *\n+\t * @return LP_Abstract_User\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\t\u002F*public static function get_user( $the_user, $force = false ) {\n+\t\t$the_id = 0;\n+\t\tif ( is_numeric( $the_user ) ) {\n+\t\t\t$the_id = $the_user;\n+\t\t} elseif ( $the_user instanceof LP_Abstract_User ) {\n+\t\t\t$the_id = $the_user->id;\n+\t\t} elseif ( isset( $the_user->ID ) ) {\n+\t\t\t$the_id = $the_user->ID;\n+\t\t} elseif ( null === $the_user ) {\n+\t\t\t$the_id = get_current_user_id();\n+\t\t}\n+\n+\t\t$user_class = self::get_user_class( $the_id );\n+\t\tif ( $user_class instanceof LP_User_Guest ) {\n+\t\t\t$the_id = self::get_guest_id();\n+\t\t}\n+\t\tif ( empty( self::$_users[ $the_id ] ) || $force ) {\n+\t\t\tself::$_users[ $the_id ] = new $user_class( $the_id );\n+\t\t}\n+\n+\t\treturn self::$_users[ $the_id ];\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get class name for User Object\n+\t *\n+\t * @param int\n+\t *\n+\t * @return string\n+\t * @deprecated 4.2.7.3\n+\t *\u002F\n+\t\u002F\u002F  public static function get_user_class( $the_id = 0 ) {\n+\t\u002F\u002F      $deleted     = in_array( $the_id, self::$_deleted_users );\n+\t\u002F\u002F      $exists_user = ! $deleted ? get_userdata( $the_id ) : false;\n+\t\u002F\u002F      if ( $exists_user ) {\n+\t\u002F\u002F          $class = 'LP_User';\n+\t\u002F\u002F      } else {\n+\t\u002F\u002F          if ( ! $deleted ) {\n+\t\u002F\u002F              self::$_deleted_users[] = $the_id;\n+\t\u002F\u002F              \u002F**\n+\t\u002F\u002F               * Prevent loading user does not exists in database\n+\t\u002F\u002F               *\u002F\n+\t\u002F\u002F              $user = new LP_User_Guest( $the_id );\n+\t\u002F\u002F              wp_cache_add( $the_id, $user, 'users' );\n+\t\u002F\u002F              wp_cache_add( '', $the_id, 'userlogins' );\n+\t\u002F\u002F              wp_cache_add( '', $the_id, 'useremail' );\n+\t\u002F\u002F              wp_cache_add( '', $the_id, 'userslugs' );\n+\t\u002F\u002F          }\n+\t\u002F\u002F          $is_logged_in = function_exists( 'is_user_logged_in' ) && is_user_logged_in();\n+\t\u002F\u002F          $class        = $is_logged_in ? 'LP_User' : 'LP_User_Guest';\n+\t\u002F\u002F      }\n+\t\u002F\u002F\n+\t\u002F\u002F      return apply_filters( 'learn_press_user_class', $class );\n+\t\u002F\u002F  }\n+}\n+\n+LP_User_Factory::init();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * Class LP_User_Guest\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0\r\n- *\u002F\r\n-class LP_User_Guest extends LP_User {\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_Guest constructor.\r\n-\t *\r\n-\t * @param int $the_user\r\n-\t *\u002F\r\n-\tpublic function __construct( $the_user = 0 ) {\r\n-\t\tparent::__construct( $the_user );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return string, Certificate must user_id is int, so temporary comment.\r\n-\t *\u002F\r\n-\t\u002F*public function get_id(): string {\r\n-\t\treturn LP_Session_Handler::instance()->get_cookie_data();\r\n-\t}*\u002F\r\n-}\r\n+\u003C?php\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * Class LP_User_Guest\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0\n+ *\u002F\n+class LP_User_Guest extends LP_User {\n+\n+\t\u002F**\n+\t * LP_User_Guest constructor.\n+\t *\n+\t * @param int $the_user\n+\t *\u002F\n+\tpublic function __construct( $the_user = 0 ) {\n+\t\tparent::__construct( $the_user );\n+\t}\n+\n+\t\u002F**\n+\t * @return string, Certificate must user_id is int, so temporary comment.\n+\t *\u002F\n+\t\u002F*public function get_id(): string {\n+\t\treturn LP_Session_Handler::instance()->get_cookie_data();\n+\t}*\u002F\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Fclass-lp-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Fclass-lp-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,942 +1,941 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Filters\\FilterBase;\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * Class LP_User\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FClasses\r\n- * @version 1.0.1\r\n- *\u002F\r\n-class LP_User extends LP_Abstract_User {\r\n-\t\u002F**\r\n-\t * Check the user can view content items' course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return LP_Model_User_Can_View_Course_Item\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function can_view_content_course( int $course_id = 0 ): LP_Model_User_Can_View_Course_Item {\r\n-\t\t$view          = new LP_Model_User_Can_View_Course_Item();\r\n-\t\t$view->message = esc_html__(\r\n-\t\t\t'This content is protected. Please enroll in the course to view this content!',\r\n-\t\t\t'learnpress'\r\n-\t\t);\r\n-\r\n-\t\t$course = learn_press_get_course( $course_id );\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn $view;\r\n-\t\t}\r\n-\r\n-\t\tif ( $this->is_admin() || $this->is_author_of( $course_id ) ) {\r\n-\t\t\t$view->flag    = true;\r\n-\t\t\t$view->message = 'User can view because is Admin or author of course';\r\n-\r\n-\t\t\treturn $view;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Set view->flag is true if course is no required enroll\r\n-\t\tif ( $course->is_no_required_enroll() ) {\r\n-\t\t\t$view->flag = true;\r\n-\r\n-\t\t\treturn $view;\r\n-\t\t} elseif ( ! is_user_logged_in() ) {\r\n-\t\t\t$view->message = __(\r\n-\t\t\t\t'This content is protected. Please log in or enroll in the course to view this content!',\r\n-\t\t\t\t'learnpress'\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $view;\r\n-\t\t}\r\n-\r\n-\t\tif ( $course->is_publish() ) {\r\n-\t\t\t$is_enrolled_or_finished = $this->has_enrolled_or_finished( $course_id );\r\n-\r\n-\t\t\tif ( $is_enrolled_or_finished ) {\r\n-\t\t\t\t$is_finished_course            = $this->has_finished_course( $course_id );\r\n-\t\t\t\t$enable_block_item_when_finish = $course->enable_block_item_when_finish();\r\n-\r\n-\t\t\t\tif ( $is_finished_course && $enable_block_item_when_finish ) {\r\n-\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_FINISHED;\r\n-\t\t\t\t\t$view->message = __(\r\n-\t\t\t\t\t\t'You finished this course. This content is protected. Please enroll in the course to view this content!',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( 0 === $course->timestamp_remaining_duration() ) {\r\n-\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_DURATION_EXPIRE;\r\n-\t\t\t\t\t$view->message = __(\r\n-\t\t\t\t\t\t'The content of this item has been blocked because the course has exceeded its duration.',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} elseif ( $this->get_course_status( $course_id ) === LP_COURSE_PURCHASED ) {\r\n-\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_PURCHASE;\r\n-\t\t\t\t\t$view->message = __(\r\n-\t\t\t\t\t\t'This content is protected. Please enroll in the course to view this content!',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$view->key     = 'can_view_course';\r\n-\t\t\t\t\t$view->flag    = true;\r\n-\t\t\t\t\t$view->message = '';\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Todo: set cache - tungnx\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fcan-view-content', $view, $this->get_id(), $course );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check the user can access to an item inside course.\r\n-\t *\r\n-\t * @param int $item_id Course's item Id.\r\n-\t * @param LP_Model_User_Can_View_Course_Item $view Course Id.\r\n-\t *\r\n-\t * @author  tungnx\r\n-\t * @return LP_Model_User_Can_View_Course_Item\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tpublic function can_view_item( int $item_id = 0, $view = null ): LP_Model_User_Can_View_Course_Item {\r\n-\t\t$view_new = null;\r\n-\r\n-\t\tif ( ! $view instanceof LP_Model_User_Can_View_Course_Item ) {\r\n-\t\t\treturn new LP_Model_User_Can_View_Course_Item();\r\n-\t\t}\r\n-\r\n-\t\t$item = LP_Course_Item::get_item( $item_id );\r\n-\r\n-\t\tif ( ! $item ) {\r\n-\t\t\treturn $view;\r\n-\t\t}\r\n-\r\n-\t\tif ( $item instanceof LP_Course_Item && $item->is_preview() ) {\r\n-\t\t\t$view_new          = clone $view; \u002F\u002F or create new LP_Model_User_Can_View_Course_Item()\r\n-\t\t\t$view_new->flag    = true;\r\n-\t\t\t$view_new->key     = 'lesson_preview';\r\n-\t\t\t$view_new->message = '';\r\n-\t\t}\r\n-\r\n-\t\tif ( $view_new ) {\r\n-\t\t\t$view = $view_new;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fitem\u002Fcan-view', $view, $item, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check if user can retry course.\r\n-\t *\r\n-\t * @param int $course_id .\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 4.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function can_retry_course( int $course_id = 0 ): int {\r\n-\t\t$flag = 0;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( 'Course is not available' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$retake_option = (int) $course->get_data( 'retake_count' );\r\n-\r\n-\t\t\tif ( $retake_option > 0 ) {\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Check course is finished\r\n-\t\t\t\t * Check duration is blocked\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tif ( ! $this->has_finished_course( $course->get_id() ) ) {\r\n-\t\t\t\t\tif ( 0 !== $course->timestamp_remaining_duration() ) {\r\n-\t\t\t\t\t\tthrow new Exception();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$user_course_data = $this->get_course_data( $course_id );\r\n-\t\t\t\tif ( $user_course_data instanceof LP_User_Item_Course ) {\r\n-\t\t\t\t\t$retaken          = $user_course_data->get_retaken_count();\r\n-\t\t\t\t\t$can_retake_times = $retake_option - $retaken;\r\n-\r\n-\t\t\t\t\tif ( $can_retake_times > 0 ) {\r\n-\t\t\t\t\t\t$flag = $can_retake_times;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fcan-retry', $flag, $this->get_id(), $course_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if user has already purchased course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return bool\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function has_purchased_course( int $course_id ): bool {\r\n-\t\t$user_course = $this->get_course_data( $course_id );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-purchased-course', $user_course && $user_course->is_purchased(), $course_id, $this->get_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is enrolled\r\n-\t *\r\n-\t * @param integer $course_id Course ID\r\n-\t * @param boolean $return_bool\r\n-\t *\r\n-\t * @return bool|object\r\n-\t * @editor tungnx\r\n-\t * @since 4.1.2\r\n-\t * @version 1.0.2\r\n-\t *\r\n-\t * @author Nhamdv\r\n-\t *\u002F\r\n-\tpublic function has_enrolled_course( int $course_id, bool $return_bool = true ) {\r\n-\t\t$result_check          = new stdClass();\r\n-\t\t$result_check->check   = true;\r\n-\t\t$result_check->message = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F*$order = $this->get_course_order( $course_id );\r\n-\r\n-\t\t\tif ( ! $order || ! $order->is_completed() ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Order is not completed', 'learnpress' ) );\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$user_course = $this->get_course_data( $course_id );\r\n-\t\t\tif ( ! $user_course || ! $user_course->is_enrolled() ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is not enrolled.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $th ) {\r\n-\t\t\t$result_check->check   = false;\r\n-\t\t\t$result_check->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fis-course-enrolled', $return_bool ? $result_check->check : $result_check, $course_id, $return_bool );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if user has finished a course\r\n-\t *\r\n-\t * @param int $course_id .\r\n-\t *\r\n-\t * @return bool\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function has_finished_course( int $course_id ): bool {\r\n-\t\t$user_course = $this->get_course_data( $course_id );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-has-finished-course', $user_course && $user_course->is_finished(), $this->get_id(), $course_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course of user is enrolled or finished\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_enrolled_or_finished( int $course_id ): bool {\r\n-\t\t$status = true;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_course = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\t$status = false;\r\n-\t\t\t} elseif ( ! $user_course->is_enrolled() && ! $user_course->is_finished() ) {\r\n-\t\t\t\t$status = false;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$status = false;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-has-finished-course', $status, $this->get_id(), $course_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check user can enroll course\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @param bool $return_bool\r\n-\t *\r\n-\t * @return mixed|object|bool\r\n-\t *\u002F\r\n-\tpublic function can_enroll_course( int $course_id, bool $return_bool = true ) {\r\n-\t\t$course          = learn_press_get_course( $course_id );\r\n-\t\t$output          = new stdClass();\r\n-\t\t$output->check   = true;\r\n-\t\t$output->message = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$is_no_required_enroll = $course->get_data( 'no_required_enroll', 'no' ) === 'yes';\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\t$output->code = 'course_unavailable';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'No Course or User available', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $course->is_publish() ) {\r\n-\t\t\t\t$output->code = 'course_not_publish';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is not public', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->has_enrolled_course( $course_id ) ) {\r\n-\t\t\t\t$output->code = 'course_is_enrolled';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'This course is already enrolled.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $course->is_in_stock_enroll() && ! $this->has_purchased_course( $course_id )\r\n-\t\t\t\t&& ! $this->has_enrolled_or_finished( $course_id ) && ! $is_no_required_enroll ) {\r\n-\t\t\t\t$output->code = 'course_out_of_stock';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is full of students.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $course->get_external_link()\r\n-\t\t\t\t&& ! $this->has_purchased_course( $course_id )\r\n-\t\t\t\t&& ! $course->is_offline() ) {\r\n-\t\t\t\t$output->code = 'course_is_external';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is external', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->can_retry_course( $course_id ) ) {\r\n-\t\t\t\t$output->code = 'course_can_retry';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Course can retake.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $is_no_required_enroll && ! is_user_logged_in() ) {\r\n-\t\t\t\t$output->code = 'course_is_no_required_enroll_not_login';\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tesc_html__( 'Enrollment in the course is not mandatory. You can access course for learning now.', 'learnpress' )\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $course->is_free() && ! $is_no_required_enroll && ! $this->has_purchased_course( $course_id ) ) {\r\n-\t\t\t\t$output->code = 'course_is_not_purchased';\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is not purchased.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t} catch ( \\Throwable $th ) {\r\n-\t\t\t$output->check   = false;\r\n-\t\t\t$output->message = $th->getMessage();\r\n-\t\t}\r\n-\r\n-\t\tif ( $return_bool ) {\r\n-\t\t\t$output = $output->check;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll-course', $output, $course, $return_bool, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check can show purchase course button\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t *\r\n-\t * @return bool|WP_Error\r\n-\t * @author nhamdv\r\n-\t * @editor tungnx\r\n-\t * @since 4.0.8\r\n-\t * @version 1.0.6\r\n-\t *\u002F\r\n-\tpublic function can_purchase_course( int $course_id = 0 ) {\r\n-\t\t$can_purchase = true;\r\n-\t\t$course       = learn_press_get_course( $course_id );\r\n-\t\t$code_err     = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$can_enroll_course = $this->can_enroll_course( $course_id, false );\r\n-\t\t\tif ( ! $can_enroll_course->check &&\r\n-\t\t\t\t! in_array( $can_enroll_course->code, [ 'course_is_not_purchased', 'course_is_enrolled' ] ) ) {\r\n-\t\t\t\t$code_err = $can_enroll_course->code;\r\n-\t\t\t\tthrow new Exception( $can_enroll_course->message );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $course->is_free() ) {\r\n-\t\t\t\t$code_err = 'course_is_free';\r\n-\t\t\t\tthrow new Exception( __( 'Course is free, so you can not purchase', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Course is not require enrolling.\r\n-\t\t\t\u002F\u002F Not use $course->is_no_required_enroll() because it is not correct, it check with user logged.\r\n-\t\t\tif ( $course->get_data( 'no_required_enroll', 'no' ) === 'yes' ) {\r\n-\t\t\t\t$code_err = 'no_required_enroll';\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__(\r\n-\t\t\t\t\t\t'Enrollment in the course is not mandatory. You can access materials for learning or to take quizzes now.',\r\n-\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If the order contains course is processing\r\n-\t\t\t$order = $this->get_course_order( $course_id );\r\n-\t\t\tif ( $order && $order->get_status() === LP_ORDER_PROCESSING ) {\r\n-\t\t\t\t$code_err = 'order_processing';\r\n-\t\t\t\tthrow new Exception( __( 'Your order is waiting for processing', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->has_purchased_course( $course_id ) ) {\r\n-\t\t\t\t$code_err = 'course_purchased';\r\n-\t\t\t\tthrow new Exception( __( 'Course is purchased', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$is_blocked_course  = 0 === $course->timestamp_remaining_duration();\r\n-\t\t\t$is_enrolled_course = $this->has_enrolled_course( $course_id );\r\n-\t\t\tif ( $course->allow_repurchase() ) {\r\n-\t\t\t\tif ( $is_enrolled_course && ! $is_blocked_course ) {\r\n-\t\t\t\t\t$code_err = 'course_is_enrolled';\r\n-\t\t\t\t\tthrow new Exception( 'Course is enrolled' );\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $this->has_enrolled_or_finished( $course_id ) ) {\r\n-\t\t\t\t\t$code_err = 'course_is_enrolled_or_finished';\r\n-\t\t\t\t\tthrow new Exception( __( 'Course is enrolled or finished', 'learnpress' ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$can_purchase = new WP_Error( $code_err, $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\tif ( $can_purchase instanceof WP_Error ) {\r\n-\t\t\t$can_purchase = false;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase-course', $can_purchase, $this->get_id(), $course_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check condition show finish course button\r\n-\t *\r\n-\t * @param $course\r\n-\t *\r\n-\t * @return array\r\n-\t * @author nhamdv\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tpublic function can_show_finish_course_btn( $course ): array {\r\n-\t\t$return = array(\r\n-\t\t\t'status'  => 'success',\r\n-\t\t\t'message' => '',\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course or User available.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_id = $course->get_id();\r\n-\r\n-\t\t\tif ( $this->has_finished_course( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course has finished.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->has_enrolled_course( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'The course is not enrolled.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->is_course_in_progress( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: The course is not in progress.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data ) {\r\n-\t\t\t\t$course_result = $course_data->get_result();\r\n-\r\n-\t\t\t\tif ( ! $course_result['pass'] ) {\r\n-\t\t\t\t\t\u002F\u002F Get option Can finish course if completed all item without pass\r\n-\t\t\t\t\t$can_finish = get_post_meta( $course_id, '_lp_has_finish', true ) ?? 'yes';\r\n-\r\n-\t\t\t\t\tif ( $can_finish == 'yes' ) {\r\n-\t\t\t\t\t\t\u002F\u002F Check completed all items\r\n-\t\t\t\t\t\t$is_all_completed = $this->is_completed_all_items( $course_id );\r\n-\t\t\t\t\t\tif ( ! $is_all_completed ) {\r\n-\t\t\t\t\t\t\tthrow new Exception( 'All items not completed and Course not pass' );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tthrow new Exception( 'Course not pass' );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! apply_filters( 'lp_can_finish_course', true ) ) {\r\n-\t\t\t\tthrow new Exception( esc_html__( 'Error: Filter the disabled finished courses.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\t\t} catch ( Exception $e ) {\r\n-\t\t\t$return['status']  = 'false';\r\n-\t\t\t$return['message'] = $e->getMessage();\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Start quiz for the user.\r\n-\t *\r\n-\t * @param int $quiz_id\r\n-\t * @param int $course_id\r\n-\t * @param bool $wp_error Optional. Whether to return a WP_Error on failure. Default false.\r\n-\t *\r\n-\t * @return LP_User_Item_Quiz|bool|WP_Error\r\n-\t * @throws Exception\r\n-\t * @deprecated 4.2.9.1\r\n-\t *\u002F\r\n-\tpublic function start_quiz( int $quiz_id, int $course_id = 0, bool $wp_error = false ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.9.1' );\r\n-\t\treturn false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$item_is_preview = learn_press_get_request( 'lp-preview' );\r\n-\t\t\tif ( $item_is_preview ) {\r\n-\t\t\t\tthrow new Exception( __( 'You cannot start a quiz in preview mode.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Validate course and quiz\r\n-\t\t\t$course_id = $this->_verify_course_item( $quiz_id, $course_id );\r\n-\t\t\tif ( ! $course_id ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'The course does not exist or does not contain a quiz.', 'learnpress' ),\r\n-\t\t\t\t\tLP_INVALID_QUIZ_OR_COURSE\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t\u002F\u002F If user has already finished the course\r\n-\t\t\tif ( $this->has_finished_course( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'You have already finished the course of this quiz', 'learnpress' ),\r\n-\t\t\t\t\tLP_COURSE_IS_FINISHED\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $this->has_enrolled_course( $course_id ) || ! $this->is_course_in_progress( $course_id ) ) {\r\n-\t\t\t\tif ( ! $course->is_no_required_enroll() ) {\r\n-\t\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t\t__( 'Please enroll in the course before starting the quiz.', 'learnpress' ),\r\n-\t\t\t\t\t\tLP_COURSE_IS_FINISHED\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if user has already started or completed quiz\r\n-\t\t\tif ( $this->has_item_status( array( 'started', 'completed' ), $quiz_id, $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'The user has started or completed the quiz.', 'learnpress' ),\r\n-\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_current = learn_press_get_current_user();\r\n-\t\t\tif ( $user_current->is_guest() ) {\r\n-\t\t\t\t\u002F\u002F if course required enroll => print message \"You have to login for starting quiz\"\r\n-\t\t\t\tif ( ! $course->is_no_required_enroll() ) {\r\n-\t\t\t\t\tthrow new Exception( __( 'You have to log in to start the quiz.', 'learnpress' ), LP_REQUIRE_LOGIN );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Hook can start quiz\r\n-\t\t\t *\r\n-\t\t\t * @see learn_press_hk_before_start_quiz\r\n-\t\t\t *\u002F\r\n-\t\t\t$can_start_quiz = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fcan-start-quiz',\r\n-\t\t\t\ttrue,\r\n-\t\t\t\t$quiz_id,\r\n-\t\t\t\t$course_id,\r\n-\t\t\t\t$this->get_id()\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( ! $can_start_quiz ) {\r\n-\t\t\t\treturn false;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_quiz = false;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Hook quiz started\r\n-\t\t\t *\r\n-\t\t\t * @since 3.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-started', $quiz_id, $course_id, $this->get_id() );\r\n-\r\n-\t\t\t\u002F\u002F $return = $user_quiz->get_mysql_data();\r\n-\t\t\t$return = $user_quiz;\r\n-\t\t} catch ( Throwable $ex ) {\r\n-\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : false;\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Finish a quiz for the user and save all data needed\r\n-\t *\r\n-\t * @param int $quiz_id\r\n-\t * @param int $course_id\r\n-\t * @param bool $wp_error\r\n-\t *\r\n-\t * @return LP_User_Item_Quiz|bool|WP_Error\r\n-\t *\u002F\r\n-\tpublic function finish_quiz( int $quiz_id, int $course_id, bool $wp_error = false ) {\r\n-\t\t$return = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F If user has already finished the course\r\n-\t\t\tif ( $this->has_finished_course( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'The user has already finished the course of this quiz.', 'learnpress' ),\r\n-\t\t\t\t\tLP_COURSE_IS_FINISHED\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if user has already started or completed quiz\r\n-\t\t\tif ( $this->has_item_status( array( 'completed' ), $quiz_id, $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\t__( 'The user has completed the quiz', 'learnpress' ),\r\n-\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var LP_User_Item_Quiz $user_quiz\r\n-\t\t\t *\u002F\r\n-\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\r\n-\t\t\t$user_quiz->complete();\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-finished', $quiz_id, $course_id, $this->get_id() );\r\n-\t\t} catch ( Exception $ex ) {\r\n-\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : true;\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Retake a quiz for the user\r\n-\t *\r\n-\t * @param int $quiz_id\r\n-\t * @param int $course_id\r\n-\t * @param bool $wp_error\r\n-\t *\r\n-\t * @return bool|WP_Error|LP_User_Item_Quiz\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @deprecated 4.2.7.2\r\n-\t *\u002F\r\n-\t\u002F*public function retake_quiz( int $quiz_id, int $course_id, bool $wp_error = false ) {\r\n-\t\t$return = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course_id = $this->_verify_course_item( $quiz_id, $course_id );\r\n-\r\n-\t\t\tif ( false === $course_id ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'The course does not exist or does not contain a quiz.',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t__CLASS__,\r\n-\t\t\t\t\t\t__FUNCTION__\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tLP_INVALID_QUIZ_OR_COURSE\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F If user has already finished the course.\r\n-\t\t\tif ( $this->has_finished_course( $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( 'You can not redo a quiz in a finished course.', 'learnpress' ),\r\n-\t\t\t\t\t\t__CLASS__,\r\n-\t\t\t\t\t\t__FUNCTION__\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tLP_COURSE_IS_FINISHED\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Check if user has already started or completed quiz\r\n-\t\t\tif ( ! $this->has_item_status( array( 'completed' ), $quiz_id, $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( '%1$s::%2$s - The user has not completed the quiz.', 'learnpress' ),\r\n-\t\t\t\t\t\t__CLASS__,\r\n-\t\t\t\t\t\t__FUNCTION__\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$allow_attempts = learn_press_get_quiz_max_retrying( $quiz_id, $course_id );\r\n-\r\n-\t\t\tif ( ! $this->has_retake_quiz( $quiz_id, $course_id ) ) {\r\n-\t\t\t\tthrow new Exception(\r\n-\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t__( '%1$s::%2$s - Your quiz can\\'t be retaken.', 'learnpress' ),\r\n-\t\t\t\t\t\t__CLASS__,\r\n-\t\t\t\t\t\t__FUNCTION__\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$return = learn_press_user_retake_quiz( $quiz_id, false, $course_id, $wp_error );\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-retried', $quiz_id, $course_id, $this->get_id() );\r\n-\t\t} catch ( Exception $ex ) {\r\n-\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : false;\r\n-\t\t\tdo_action( 'learn-press\u002Fuser\u002Fretake-quiz-failure', $quiz_id, $course_id, $this->get_id() );\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get quiz's user learning or completed\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t *\r\n-\t * @return LP_Query_List_Table\r\n-\t *\u002F\r\n-\tpublic function get_user_quizzes( $filter ): LP_Query_List_Table {\r\n-\t\t$quizzes = [\r\n-\t\t\t'total' => 0,\r\n-\t\t\t'items' => [],\r\n-\t\t\t'pages' => 0,\r\n-\t\t];\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_quizzes = LP_User_Items_DB::getInstance()->get_user_quizzes( $filter );\r\n-\r\n-\t\t\tif ( $user_quizzes ) {\r\n-\t\t\t\t$count = LP_User_Items_DB::getInstance()->wpdb->get_var( 'SELECT FOUND_ROWS()' );\r\n-\r\n-\t\t\t\t$quizzes['total'] = $count;\r\n-\t\t\t\t$quizzes['pages'] = ceil( $count \u002F $filter->limit );\r\n-\r\n-\t\t\t\tforeach ( $user_quizzes as $item ) {\r\n-\t\t\t\t\t$quizzes['items'][] = new LP_User_Item_Quiz( $item );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quizzes['single'] = __( 'quiz', 'learnpress' );\r\n-\t\t\t$quizzes['plural'] = __( 'quizzes', 'learnpress' );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn new LP_Query_List_Table( $quizzes );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set item is viewing in single course.\r\n-\t *\r\n-\t * @param LP_Course_Item $item\r\n-\t *\r\n-\t * @return int|LP_Course_Item\r\n-\t * @since 4.1.6.9 - move from LP_Course\r\n-\t * @editor tungnx\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function set_viewing_item( LP_Course_Item $item ) {\r\n-\t\t$flag = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user = learn_press_get_current_user();\r\n-\t\t\tif ( $user instanceof LP_User_Guest ) {\r\n-\t\t\t\treturn $flag;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_id   = $item->get_course_id();\r\n-\t\t\t$item_id     = $item->get_id();\r\n-\t\t\t$course_data = $this->get_course_data( $course_id );\r\n-\r\n-\t\t\tif ( $course_data && $course_data->is_enrolled() ) {\r\n-\t\t\t\t$item = $course_data->get_item( $item_id );\r\n-\r\n-\t\t\t\tif ( ! $item ) {\r\n-\t\t\t\t\t$item = LP_User_Item::get_item_object( $item_id );\r\n-\r\n-\t\t\t\t\tif ( ! $item ) {\r\n-\t\t\t\t\t\treturn $flag;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $item instanceof LP_User_Item_Quiz ) {\r\n-\t\t\t\t\t\treturn $flag;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$item->set_ref_id( $course_id );\r\n-\t\t\t\t\t$item->set_parent_id( $course_data->get_user_item_id() );\r\n-\r\n-\t\t\t\t\t$flag = $item->update();\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $flag;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get statistic info of student user\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function get_student_statistic(): array {\r\n-\t\t$user      = $this;\r\n-\t\t$statistic = array(\r\n-\t\t\t'enrolled_courses'   => 0,\r\n-\t\t\t'in_progress_course' => 0,\r\n-\t\t\t'finished_courses'   => 0,\r\n-\t\t\t'passed_courses'     => 0,\r\n-\t\t\t'failed_courses'     => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\tthrow new Exception( 'The user is invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id          = $user->get_id();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\t\u002F\u002F Count status\r\n-\t\t\t$filter                 = new LP_User_Items_Filter();\r\n-\t\t\t$filter->user_id        = $user_id;\r\n-\t\t\t$count_status           = $lp_user_items_db->count_status_by_items( $filter );\r\n-\t\t\t$total_courses_enrolled = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 )\r\n-\t\t\t\t+ intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 )\r\n-\t\t\t\t+ intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\r\n-\r\n-\t\t\t$statistic['enrolled_courses']   = $total_courses_enrolled;\r\n-\t\t\t$statistic['in_progress_course'] = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\r\n-\t\t\t$statistic['finished_courses']   = $count_status->{LP_COURSE_FINISHED} ?? 0;\r\n-\t\t\t$statistic['passed_courses']     = $count_status->{LP_COURSE_GRADUATION_PASSED} ?? 0;\r\n-\t\t\t$statistic['failed_courses']     = $count_status->{LP_COURSE_GRADUATION_FAILED} ?? 0;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstudent\u002Fstatistic', $statistic, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get statistic info of instructor user\r\n-\t *\r\n-\t * @param array $params\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 4.1.6\r\n-\t * @version 1.0.1\r\n-\t *\u002F\r\n-\tpublic function get_instructor_statistic( array $params = [] ): array {\r\n-\t\t$statistic = array(\r\n-\t\t\t'total_course'        => 0,\r\n-\t\t\t'published_course'    => 0,\r\n-\t\t\t'pending_course'      => 0,\r\n-\t\t\t'total_student'       => 0,\r\n-\t\t\t'student_completed'   => 0,\r\n-\t\t\t'student_in_progress' => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_id          = $this->get_id();\r\n-\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t\t$lp_course_db     = LP_Course_DB::getInstance();\r\n-\r\n-\t\t\tif ( ! $this->can_create_course() ) {\r\n-\t\t\t\tthrow new Exception( 'The user is not Instructor' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Count total user completed course of author\r\n-\t\t\t$filter_course                      = new LP_Course_Filter();\r\n-\t\t\t$filter_course->only_fields         = array( 'ID' );\r\n-\t\t\t$filter_course->post_author         = $user_id;\r\n-\t\t\t$filter_course->post_status         = 'publish';\r\n-\t\t\t$filter_course->return_string_query = true;\r\n-\t\t\t$query_courses_str                  = LP_Course_DB::getInstance()->get_courses( $filter_course );\r\n-\r\n-\t\t\t$filter_count_users            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_count_users->item_type = LP_COURSE_CPT;\r\n-\t\t\t$filter_count_users->where[]   = \"AND item_id IN ({$query_courses_str})\";\r\n-\t\t\t$count_student_has_status      = $lp_user_items_db->count_status_by_items( $filter_count_users );\r\n-\t\t\t\u002F\u002F Count total user in progress course of author\r\n-\r\n-\t\t\t\u002F\u002F Get total users attend course of author\r\n-\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\r\n-\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses publish of author\r\n-\t\t\t$filter_count_courses            = $lp_course_db->count_courses_of_author( $user_id, [ 'publish' ] );\r\n-\t\t\t$total_courses_publish_of_author = $lp_course_db->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses of author\r\n-\t\t\t$filter_count_courses    = $lp_course_db->count_courses_of_author( $user_id );\r\n-\t\t\t$total_courses_of_author = $lp_course_db->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t\u002F\u002F Get total courses pending of author\r\n-\t\t\t$filter_count_courses            = $lp_course_db->count_courses_of_author( $user_id, [ 'pending' ] );\r\n-\t\t\t$total_courses_pending_of_author = $lp_course_db->get_courses( $filter_count_courses );\r\n-\r\n-\t\t\t$statistic['total_course']        = $total_courses_of_author;\r\n-\t\t\t$statistic['published_course']    = $total_courses_publish_of_author;\r\n-\t\t\t$statistic['pending_course']      = $total_courses_pending_of_author;\r\n-\t\t\t$statistic['total_student']       = $count_users_attend_courses_of_author;\r\n-\t\t\t$statistic['student_completed']   = $count_student_has_status->{LP_COURSE_FINISHED} ?? 0;\r\n-\t\t\t$statistic['student_in_progress'] = $count_student_has_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'lp\u002Fprofile\u002Finstructor\u002Fstatistic', $statistic, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get url instructor.\r\n-\t *\r\n-\t * @return string\r\n-\t * @version 1.0.0\r\n-\t * @since 4.2.3\r\n-\t *\u002F\r\n-\tpublic function get_url_instructor(): string {\r\n-\t\t$single_instructor_link = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t$author_id = $this->get_id();\r\n-\t\t\t$author    = get_userdata( $author_id );\r\n-\t\t\tif ( ! $author ) {\r\n-\t\t\t\treturn '';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$single_instructor_page_id = learn_press_get_page_id( 'single_instructor' );\r\n-\t\t\t$user_model                = new UserModel( $author );\r\n-\t\t\t$user_slug                 = $user_model->get_pretty_slug();\r\n-\t\t\t$single_instructor_link    = trailingslashit( trailingslashit( get_page_link( $single_instructor_page_id ) ) . $user_slug );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $single_instructor_link;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Filters\\FilterBase;\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Class LP_User\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FClasses\n+ * @version 1.0.1\n+ *\u002F\n+class LP_User extends LP_Abstract_User {\n+\t\u002F**\n+\t * Check the user can view content items' course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return LP_Model_User_Can_View_Course_Item\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function can_view_content_course( int $course_id = 0 ): LP_Model_User_Can_View_Course_Item {\n+\t\t$view          = new LP_Model_User_Can_View_Course_Item();\n+\t\t$view->message = esc_html__(\n+\t\t\t'This content is protected. Please enroll in the course to view this content!',\n+\t\t\t'learnpress'\n+\t\t);\n+\n+\t\t$course = learn_press_get_course( $course_id );\n+\t\tif ( ! $course ) {\n+\t\t\treturn $view;\n+\t\t}\n+\n+\t\tif ( $this->is_admin() || $this->is_author_of( $course_id ) ) {\n+\t\t\t$view->flag    = true;\n+\t\t\t$view->message = 'User can view because is Admin or author of course';\n+\n+\t\t\treturn $view;\n+\t\t}\n+\n+\t\t\u002F\u002F Set view->flag is true if course is no required enroll\n+\t\tif ( $course->is_no_required_enroll() ) {\n+\t\t\t$view->flag = true;\n+\n+\t\t\treturn $view;\n+\t\t} elseif ( ! is_user_logged_in() ) {\n+\t\t\t$view->message = __(\n+\t\t\t\t'This content is protected. Please log in or enroll in the course to view this content!',\n+\t\t\t\t'learnpress'\n+\t\t\t);\n+\n+\t\t\treturn $view;\n+\t\t}\n+\n+\t\tif ( $course->is_publish() ) {\n+\t\t\t$is_enrolled_or_finished = $this->has_enrolled_or_finished( $course_id );\n+\n+\t\t\tif ( $is_enrolled_or_finished ) {\n+\t\t\t\t$is_finished_course            = $this->has_finished_course( $course_id );\n+\t\t\t\t$enable_block_item_when_finish = $course->enable_block_item_when_finish();\n+\n+\t\t\t\tif ( $is_finished_course && $enable_block_item_when_finish ) {\n+\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_FINISHED;\n+\t\t\t\t\t$view->message = __(\n+\t\t\t\t\t\t'You finished this course. This content is protected. Please enroll in the course to view this content!',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( 0 === $course->timestamp_remaining_duration() ) {\n+\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_DURATION_EXPIRE;\n+\t\t\t\t\t$view->message = __(\n+\t\t\t\t\t\t'The content of this item has been blocked because the course has exceeded its duration.',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t);\n+\t\t\t\t} elseif ( $this->get_course_status( $course_id ) === LP_COURSE_PURCHASED ) {\n+\t\t\t\t\t$view->key     = LP_BLOCK_COURSE_PURCHASE;\n+\t\t\t\t\t$view->message = __(\n+\t\t\t\t\t\t'This content is protected. Please enroll in the course to view this content!',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\t$view->key     = 'can_view_course';\n+\t\t\t\t\t$view->flag    = true;\n+\t\t\t\t\t$view->message = '';\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Todo: set cache - tungnx\n+\n+\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fcan-view-content', $view, $this->get_id(), $course );\n+\t}\n+\n+\t\u002F**\n+\t * Check the user can access to an item inside course.\n+\t *\n+\t * @param int $item_id Course's item Id.\n+\t * @param LP_Model_User_Can_View_Course_Item $view Course Id.\n+\t *\n+\t * @author  tungnx\n+\t * @return LP_Model_User_Can_View_Course_Item\n+\t * @since 4.0.0\n+\t *\u002F\n+\tpublic function can_view_item( int $item_id = 0, $view = null ): LP_Model_User_Can_View_Course_Item {\n+\t\t$view_new = null;\n+\n+\t\tif ( ! $view instanceof LP_Model_User_Can_View_Course_Item ) {\n+\t\t\treturn new LP_Model_User_Can_View_Course_Item();\n+\t\t}\n+\n+\t\t$item = LP_Course_Item::get_item( $item_id );\n+\n+\t\tif ( ! $item ) {\n+\t\t\treturn $view;\n+\t\t}\n+\n+\t\tif ( $item instanceof LP_Course_Item && $item->is_preview() ) {\n+\t\t\t$view_new          = clone $view; \u002F\u002F or create new LP_Model_User_Can_View_Course_Item()\n+\t\t\t$view_new->flag    = true;\n+\t\t\t$view_new->key     = 'lesson_preview';\n+\t\t\t$view_new->message = '';\n+\t\t}\n+\n+\t\tif ( $view_new ) {\n+\t\t\t$view = $view_new;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Fcourse\u002Fitem\u002Fcan-view', $view, $item, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Check if user can retry course.\n+\t *\n+\t * @param int $course_id .\n+\t *\n+\t * @return int\n+\t * @since 4.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function can_retry_course( int $course_id = 0 ): int {\n+\t\t$flag = 0;\n+\n+\t\ttry {\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( 'Course is not available' );\n+\t\t\t}\n+\n+\t\t\t$retake_option = (int) $course->get_data( 'retake_count' );\n+\n+\t\t\tif ( $retake_option > 0 ) {\n+\t\t\t\t\u002F**\n+\t\t\t\t * Check course is finished\n+\t\t\t\t * Check duration is blocked\n+\t\t\t\t *\u002F\n+\t\t\t\tif ( ! $this->has_finished_course( $course->get_id() ) ) {\n+\t\t\t\t\tif ( 0 !== $course->timestamp_remaining_duration() ) {\n+\t\t\t\t\t\tthrow new Exception();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$user_course_data = $this->get_course_data( $course_id );\n+\t\t\t\tif ( $user_course_data instanceof LP_User_Item_Course ) {\n+\t\t\t\t\t$retaken          = $user_course_data->get_retaken_count();\n+\t\t\t\t\t$can_retake_times = $retake_option - $retaken;\n+\n+\t\t\t\t\tif ( $can_retake_times > 0 ) {\n+\t\t\t\t\t\t$flag = $can_retake_times;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcourse\u002Fcan-retry', $flag, $this->get_id(), $course_id );\n+\t}\n+\n+\t\u002F**\n+\t * Return true if user has already purchased course\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return bool\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function has_purchased_course( int $course_id ): bool {\n+\t\t$user_course = $this->get_course_data( $course_id );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-purchased-course', $user_course && $user_course->is_purchased(), $course_id, $this->get_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Check course is enrolled\n+\t *\n+\t * @param integer $course_id Course ID\n+\t * @param boolean $return_bool\n+\t *\n+\t * @return bool|object\n+\t * @editor tungnx\n+\t * @since 4.1.2\n+\t * @version 1.0.2\n+\t *\n+\t * @author Nhamdv\n+\t *\u002F\n+\tpublic function has_enrolled_course( int $course_id, bool $return_bool = true ) {\n+\t\t$result_check          = new stdClass();\n+\t\t$result_check->check   = true;\n+\t\t$result_check->message = '';\n+\n+\t\ttry {\n+\t\t\t\u002F*$order = $this->get_course_order( $course_id );\n+\n+\t\t\tif ( ! $order || ! $order->is_completed() ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Order is not completed', 'learnpress' ) );\n+\t\t\t}*\u002F\n+\n+\t\t\t$user_course = $this->get_course_data( $course_id );\n+\t\t\tif ( ! $user_course || ! $user_course->is_enrolled() ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is not enrolled.', 'learnpress' ) );\n+\t\t\t}\n+\t\t} catch ( Throwable $th ) {\n+\t\t\t$result_check->check   = false;\n+\t\t\t$result_check->message = $th->getMessage();\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fis-course-enrolled', $return_bool ? $result_check->check : $result_check, $course_id, $return_bool );\n+\t}\n+\n+\t\u002F**\n+\t * Return true if user has finished a course\n+\t *\n+\t * @param int $course_id .\n+\t *\n+\t * @return bool\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function has_finished_course( int $course_id ): bool {\n+\t\t$user_course = $this->get_course_data( $course_id );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-has-finished-course', $user_course && $user_course->is_finished(), $this->get_id(), $course_id );\n+\t}\n+\n+\t\u002F**\n+\t * Check course of user is enrolled or finished\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_enrolled_or_finished( int $course_id ): bool {\n+\t\t$status = true;\n+\n+\t\ttry {\n+\t\t\t$user_course = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( ! $user_course ) {\n+\t\t\t\t$status = false;\n+\t\t\t} elseif ( ! $user_course->is_enrolled() && ! $user_course->is_finished() ) {\n+\t\t\t\t$status = false;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$status = false;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-has-finished-course', $status, $this->get_id(), $course_id );\n+\t}\n+\n+\t\u002F**\n+\t * Check user can enroll course\n+\t *\n+\t * @param int $course_id\n+\t * @param bool $return_bool\n+\t *\n+\t * @return mixed|object|bool\n+\t *\u002F\n+\tpublic function can_enroll_course( int $course_id, bool $return_bool = true ) {\n+\t\t$course          = learn_press_get_course( $course_id );\n+\t\t$output          = new stdClass();\n+\t\t$output->check   = true;\n+\t\t$output->message = '';\n+\n+\t\ttry {\n+\t\t\t$is_no_required_enroll = $course->get_data( 'no_required_enroll', 'no' ) === 'yes';\n+\t\t\tif ( ! $course ) {\n+\t\t\t\t$output->code = 'course_unavailable';\n+\t\t\t\tthrow new Exception( esc_html__( 'No Course or User available', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $course->is_publish() ) {\n+\t\t\t\t$output->code = 'course_not_publish';\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is not public', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->has_enrolled_course( $course_id ) ) {\n+\t\t\t\t$output->code = 'course_is_enrolled';\n+\t\t\t\tthrow new Exception( esc_html__( 'This course is already enrolled.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $course->is_in_stock_enroll() && ! $this->has_purchased_course( $course_id )\n+\t\t\t\t&& ! $this->has_enrolled_or_finished( $course_id ) && ! $is_no_required_enroll ) {\n+\t\t\t\t$output->code = 'course_out_of_stock';\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is full of students.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $course->get_external_link()\n+\t\t\t\t&& ! $this->has_purchased_course( $course_id )\n+\t\t\t\t&& ! $course->is_offline() ) {\n+\t\t\t\t$output->code = 'course_is_external';\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is external', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->can_retry_course( $course_id ) ) {\n+\t\t\t\t$output->code = 'course_can_retry';\n+\t\t\t\tthrow new Exception( esc_html__( 'Course can retake.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $is_no_required_enroll && ! is_user_logged_in() ) {\n+\t\t\t\t$output->code = 'course_is_no_required_enroll_not_login';\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tesc_html__( 'Enrollment in the course is not mandatory. You can access course for learning now.', 'learnpress' )\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! $course->is_free() && ! $is_no_required_enroll && ! $this->has_purchased_course( $course_id ) ) {\n+\t\t\t\t$output->code = 'course_is_not_purchased';\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is not purchased.', 'learnpress' ) );\n+\t\t\t}\n+\t\t} catch ( \\Throwable $th ) {\n+\t\t\t$output->check   = false;\n+\t\t\t$output->message = $th->getMessage();\n+\t\t}\n+\n+\t\tif ( $return_bool ) {\n+\t\t\t$output = $output->check;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-enroll-course', $output, $course, $return_bool, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Check can show purchase course button\n+\t *\n+\t * @param int $course_id\n+\t *\n+\t * @return bool|WP_Error\n+\t * @author nhamdv\n+\t * @editor tungnx\n+\t * @since 4.0.8\n+\t * @version 1.0.6\n+\t *\u002F\n+\tpublic function can_purchase_course( int $course_id = 0 ) {\n+\t\t$can_purchase = true;\n+\t\t$course       = learn_press_get_course( $course_id );\n+\t\t$code_err     = '';\n+\n+\t\ttry {\n+\t\t\t$can_enroll_course = $this->can_enroll_course( $course_id, false );\n+\t\t\tif ( ! $can_enroll_course->check &&\n+\t\t\t\t! in_array( $can_enroll_course->code, [ 'course_is_not_purchased', 'course_is_enrolled' ] ) ) {\n+\t\t\t\t$code_err = $can_enroll_course->code;\n+\t\t\t\tthrow new Exception( $can_enroll_course->message );\n+\t\t\t}\n+\n+\t\t\tif ( $course->is_free() ) {\n+\t\t\t\t$code_err = 'course_is_free';\n+\t\t\t\tthrow new Exception( __( 'Course is free, so you can not purchase', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Course is not require enrolling.\n+\t\t\t\u002F\u002F Not use $course->is_no_required_enroll() because it is not correct, it check with user logged.\n+\t\t\tif ( $course->get_data( 'no_required_enroll', 'no' ) === 'yes' ) {\n+\t\t\t\t$code_err = 'no_required_enroll';\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__(\n+\t\t\t\t\t\t'Enrollment in the course is not mandatory. You can access materials for learning or to take quizzes now.',\n+\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If the order contains course is processing\n+\t\t\t$order = $this->get_course_order( $course_id );\n+\t\t\tif ( $order && $order->get_status() === LP_ORDER_PROCESSING ) {\n+\t\t\t\t$code_err = 'order_processing';\n+\t\t\t\tthrow new Exception( __( 'Your order is waiting for processing', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( $this->has_purchased_course( $course_id ) ) {\n+\t\t\t\t$code_err = 'course_purchased';\n+\t\t\t\tthrow new Exception( __( 'Course is purchased', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$is_blocked_course  = 0 === $course->timestamp_remaining_duration();\n+\t\t\t$is_enrolled_course = $this->has_enrolled_course( $course_id );\n+\t\t\tif ( $course->allow_repurchase() ) {\n+\t\t\t\tif ( $is_enrolled_course && ! $is_blocked_course ) {\n+\t\t\t\t\t$code_err = 'course_is_enrolled';\n+\t\t\t\t\tthrow new Exception( 'Course is enrolled' );\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( $this->has_enrolled_or_finished( $course_id ) ) {\n+\t\t\t\t\t$code_err = 'course_is_enrolled_or_finished';\n+\t\t\t\t\tthrow new Exception( __( 'Course is enrolled or finished', 'learnpress' ) );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$can_purchase = new WP_Error( $code_err, $e->getMessage() );\n+\t\t}\n+\n+\t\tif ( $can_purchase instanceof WP_Error ) {\n+\t\t\t$can_purchase = false;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fcan-purchase-course', $can_purchase, $this->get_id(), $course_id );\n+\t}\n+\n+\t\u002F**\n+\t * Check condition show finish course button\n+\t *\n+\t * @param $course\n+\t *\n+\t * @return array\n+\t * @author nhamdv\n+\t * @editor tungnx\n+\t * @version 1.0.2\n+\t *\u002F\n+\tpublic function can_show_finish_course_btn( $course ): array {\n+\t\t$return = array(\n+\t\t\t'status'  => 'success',\n+\t\t\t'message' => '',\n+\t\t);\n+\n+\t\ttry {\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: No Course or User available.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_id = $course->get_id();\n+\n+\t\t\tif ( $this->has_finished_course( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course has finished.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->has_enrolled_course( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'The course is not enrolled.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->is_course_in_progress( $course_id ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: The course is not in progress.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data ) {\n+\t\t\t\t$course_result = $course_data->get_result();\n+\n+\t\t\t\tif ( ! $course_result['pass'] ) {\n+\t\t\t\t\t\u002F\u002F Get option Can finish course if completed all item without pass\n+\t\t\t\t\t$can_finish = get_post_meta( $course_id, '_lp_has_finish', true ) ?? 'yes';\n+\n+\t\t\t\t\tif ( $can_finish == 'yes' ) {\n+\t\t\t\t\t\t\u002F\u002F Check completed all items\n+\t\t\t\t\t\t$is_all_completed = $this->is_completed_all_items( $course_id );\n+\t\t\t\t\t\tif ( ! $is_all_completed ) {\n+\t\t\t\t\t\t\tthrow new Exception( 'All items not completed and Course not pass' );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tthrow new Exception( 'Course not pass' );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! apply_filters( 'lp_can_finish_course', true ) ) {\n+\t\t\t\tthrow new Exception( esc_html__( 'Error: Filter the disabled finished courses.', 'learnpress' ) );\n+\t\t\t}\n+\t\t} catch ( Exception $e ) {\n+\t\t\t$return['status']  = 'false';\n+\t\t\t$return['message'] = $e->getMessage();\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Start quiz for the user.\n+\t *\n+\t * @param int $quiz_id\n+\t * @param int $course_id\n+\t * @param bool $wp_error Optional. Whether to return a WP_Error on failure. Default false.\n+\t *\n+\t * @return LP_User_Item_Quiz|bool|WP_Error\n+\t * @throws Exception\n+\t * @deprecated 4.2.9.1\n+\t *\u002F\n+\tpublic function start_quiz( int $quiz_id, int $course_id = 0, bool $wp_error = false ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.9.1' );\n+\t\treturn false;\n+\n+\t\ttry {\n+\t\t\t$item_is_preview = learn_press_get_request( 'lp-preview' );\n+\t\t\tif ( $item_is_preview ) {\n+\t\t\t\tthrow new Exception( __( 'You cannot start a quiz in preview mode.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Validate course and quiz\n+\t\t\t$course_id = $this->_verify_course_item( $quiz_id, $course_id );\n+\t\t\tif ( ! $course_id ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'The course does not exist or does not contain a quiz.', 'learnpress' ),\n+\t\t\t\t\tLP_INVALID_QUIZ_OR_COURSE\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t\u002F\u002F If user has already finished the course\n+\t\t\tif ( $this->has_finished_course( $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'You have already finished the course of this quiz', 'learnpress' ),\n+\t\t\t\t\tLP_COURSE_IS_FINISHED\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tif ( ! $this->has_enrolled_course( $course_id ) || ! $this->is_course_in_progress( $course_id ) ) {\n+\t\t\t\tif ( ! $course->is_no_required_enroll() ) {\n+\t\t\t\t\tthrow new Exception(\n+\t\t\t\t\t\t__( 'Please enroll in the course before starting the quiz.', 'learnpress' ),\n+\t\t\t\t\t\tLP_COURSE_IS_FINISHED\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if user has already started or completed quiz\n+\t\t\tif ( $this->has_item_status( array( 'started', 'completed' ), $quiz_id, $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'The user has started or completed the quiz.', 'learnpress' ),\n+\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$user_current = learn_press_get_current_user();\n+\t\t\tif ( $user_current->is_guest() ) {\n+\t\t\t\t\u002F\u002F if course required enroll => print message \"You have to login for starting quiz\"\n+\t\t\t\tif ( ! $course->is_no_required_enroll() ) {\n+\t\t\t\t\tthrow new Exception( __( 'You have to log in to start the quiz.', 'learnpress' ), LP_REQUIRE_LOGIN );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Hook can start quiz\n+\t\t\t *\n+\t\t\t * @see learn_press_hk_before_start_quiz\n+\t\t\t *\u002F\n+\t\t\t$can_start_quiz = apply_filters(\n+\t\t\t\t'learn-press\u002Fcan-start-quiz',\n+\t\t\t\ttrue,\n+\t\t\t\t$quiz_id,\n+\t\t\t\t$course_id,\n+\t\t\t\t$this->get_id()\n+\t\t\t);\n+\n+\t\t\tif ( ! $can_start_quiz ) {\n+\t\t\t\treturn false;\n+\t\t\t}\n+\n+\t\t\t$user_quiz = false;\n+\n+\t\t\t\u002F**\n+\t\t\t * Hook quiz started\n+\t\t\t *\n+\t\t\t * @since 3.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-started', $quiz_id, $course_id, $this->get_id() );\n+\n+\t\t\t\u002F\u002F $return = $user_quiz->get_mysql_data();\n+\t\t\t$return = $user_quiz;\n+\t\t} catch ( Throwable $ex ) {\n+\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : false;\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Finish a quiz for the user and save all data needed\n+\t *\n+\t * @param int $quiz_id\n+\t * @param int $course_id\n+\t * @param bool $wp_error\n+\t *\n+\t * @return LP_User_Item_Quiz|bool|WP_Error\n+\t *\u002F\n+\tpublic function finish_quiz( int $quiz_id, int $course_id, bool $wp_error = false ) {\n+\t\t$return = false;\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F If user has already finished the course\n+\t\t\tif ( $this->has_finished_course( $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'The user has already finished the course of this quiz.', 'learnpress' ),\n+\t\t\t\t\tLP_COURSE_IS_FINISHED\n+\t\t\t\t);\n+\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if user has already started or completed quiz\n+\t\t\tif ( $this->has_item_status( array( 'completed' ), $quiz_id, $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\t__( 'The user has completed the quiz', 'learnpress' ),\n+\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * @var LP_User_Item_Quiz $user_quiz\n+\t\t\t *\u002F\n+\t\t\t$user_quiz = $this->get_item_data( $quiz_id, $course_id );\n+\t\t\t$user_quiz->complete();\n+\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-finished', $quiz_id, $course_id, $this->get_id() );\n+\t\t} catch ( Exception $ex ) {\n+\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : true;\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Retake a quiz for the user\n+\t *\n+\t * @param int $quiz_id\n+\t * @param int $course_id\n+\t * @param bool $wp_error\n+\t *\n+\t * @return bool|WP_Error|LP_User_Item_Quiz\n+\t *\n+\t * @throws Exception\n+\t * @deprecated 4.2.7.2\n+\t *\u002F\n+\t\u002F*public function retake_quiz( int $quiz_id, int $course_id, bool $wp_error = false ) {\n+\t\t$return = false;\n+\n+\t\ttry {\n+\t\t\t$course_id = $this->_verify_course_item( $quiz_id, $course_id );\n+\n+\t\t\tif ( false === $course_id ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'The course does not exist or does not contain a quiz.',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\t__CLASS__,\n+\t\t\t\t\t\t__FUNCTION__\n+\t\t\t\t\t),\n+\t\t\t\t\tLP_INVALID_QUIZ_OR_COURSE\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F If user has already finished the course.\n+\t\t\tif ( $this->has_finished_course( $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( 'You can not redo a quiz in a finished course.', 'learnpress' ),\n+\t\t\t\t\t\t__CLASS__,\n+\t\t\t\t\t\t__FUNCTION__\n+\t\t\t\t\t),\n+\t\t\t\t\tLP_COURSE_IS_FINISHED\n+\t\t\t\t);\n+\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Check if user has already started or completed quiz\n+\t\t\tif ( ! $this->has_item_status( array( 'completed' ), $quiz_id, $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( '%1$s::%2$s - The user has not completed the quiz.', 'learnpress' ),\n+\t\t\t\t\t\t__CLASS__,\n+\t\t\t\t\t\t__FUNCTION__\n+\t\t\t\t\t),\n+\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$allow_attempts = learn_press_get_quiz_max_retrying( $quiz_id, $course_id );\n+\n+\t\t\tif ( ! $this->has_retake_quiz( $quiz_id, $course_id ) ) {\n+\t\t\t\tthrow new Exception(\n+\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t__( '%1$s::%2$s - Your quiz can\\'t be retaken.', 'learnpress' ),\n+\t\t\t\t\t\t__CLASS__,\n+\t\t\t\t\t\t__FUNCTION__\n+\t\t\t\t\t),\n+\t\t\t\t\tLP_QUIZ_HAS_STARTED_OR_COMPLETED\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$return = learn_press_user_retake_quiz( $quiz_id, false, $course_id, $wp_error );\n+\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fquiz-retried', $quiz_id, $course_id, $this->get_id() );\n+\t\t} catch ( Exception $ex ) {\n+\t\t\t$return = $wp_error ? new WP_Error( $ex->getCode(), $ex->getMessage() ) : false;\n+\t\t\tdo_action( 'learn-press\u002Fuser\u002Fretake-quiz-failure', $quiz_id, $course_id, $this->get_id() );\n+\t\t}\n+\n+\t\treturn $return;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get quiz's user learning or completed\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t *\n+\t * @return LP_Query_List_Table\n+\t *\u002F\n+\tpublic function get_user_quizzes( $filter ): LP_Query_List_Table {\n+\t\t$quizzes = [\n+\t\t\t'total' => 0,\n+\t\t\t'items' => [],\n+\t\t\t'pages' => 0,\n+\t\t];\n+\n+\t\ttry {\n+\t\t\t$user_quizzes = LP_User_Items_DB::getInstance()->get_user_quizzes( $filter );\n+\n+\t\t\tif ( $user_quizzes ) {\n+\t\t\t\t$count = LP_User_Items_DB::getInstance()->wpdb->get_var( 'SELECT FOUND_ROWS()' );\n+\n+\t\t\t\t$quizzes['total'] = $count;\n+\t\t\t\t$quizzes['pages'] = ceil( $count \u002F $filter->limit );\n+\n+\t\t\t\tforeach ( $user_quizzes as $item ) {\n+\t\t\t\t\t$quizzes['items'][] = new LP_User_Item_Quiz( $item );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$quizzes['single'] = __( 'quiz', 'learnpress' );\n+\t\t\t$quizzes['plural'] = __( 'quizzes', 'learnpress' );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn new LP_Query_List_Table( $quizzes );\n+\t}\n+\n+\t\u002F**\n+\t * Set item is viewing in single course.\n+\t *\n+\t * @param LP_Course_Item $item\n+\t *\n+\t * @return int|LP_Course_Item\n+\t * @since 4.1.6.9 - move from LP_Course\n+\t * @editor tungnx\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function set_viewing_item( LP_Course_Item $item ) {\n+\t\t$flag = false;\n+\n+\t\ttry {\n+\t\t\t$user = learn_press_get_current_user();\n+\t\t\tif ( $user instanceof LP_User_Guest ) {\n+\t\t\t\treturn $flag;\n+\t\t\t}\n+\n+\t\t\t$course_id   = $item->get_course_id();\n+\t\t\t$item_id     = $item->get_id();\n+\t\t\t$course_data = $this->get_course_data( $course_id );\n+\n+\t\t\tif ( $course_data && $course_data->is_enrolled() ) {\n+\t\t\t\t$item = $course_data->get_item( $item_id );\n+\n+\t\t\t\tif ( ! $item ) {\n+\t\t\t\t\t$item = LP_User_Item::get_item_object( $item_id );\n+\n+\t\t\t\t\tif ( ! $item ) {\n+\t\t\t\t\t\treturn $flag;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $item instanceof LP_User_Item_Quiz ) {\n+\t\t\t\t\t\treturn $flag;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$item->set_ref_id( $course_id );\n+\t\t\t\t\t$item->set_parent_id( $course_data->get_user_item_id() );\n+\n+\t\t\t\t\t$flag = $item->update();\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $flag;\n+\t}\n+\n+\t\u002F**\n+\t * Get statistic info of student user\n+\t *\n+\t * @return array\n+\t * @since 4.1.6\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function get_student_statistic(): array {\n+\t\t$user      = $this;\n+\t\t$statistic = array(\n+\t\t\t'enrolled_courses'   => 0,\n+\t\t\t'in_progress_course' => 0,\n+\t\t\t'finished_courses'   => 0,\n+\t\t\t'passed_courses'     => 0,\n+\t\t\t'failed_courses'     => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\tif ( ! $user ) {\n+\t\t\t\tthrow new Exception( 'The user is invalid' );\n+\t\t\t}\n+\n+\t\t\t$user_id          = $user->get_id();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\n+\t\t\t\u002F\u002F Count status\n+\t\t\t$filter                 = new LP_User_Items_Filter();\n+\t\t\t$filter->user_id        = $user_id;\n+\t\t\t$count_status           = $lp_user_items_db->count_status_by_items( $filter );\n+\t\t\t$total_courses_enrolled = intval( $count_status->{LP_COURSE_PURCHASED} ?? 0 )\n+\t\t\t\t+ intval( $count_status->{LP_COURSE_ENROLLED} ?? 0 )\n+\t\t\t\t+ intval( $count_status->{LP_COURSE_FINISHED} ?? 0 );\n+\n+\t\t\t$statistic['enrolled_courses']   = $total_courses_enrolled;\n+\t\t\t$statistic['in_progress_course'] = $count_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\n+\t\t\t$statistic['finished_courses']   = $count_status->{LP_COURSE_FINISHED} ?? 0;\n+\t\t\t$statistic['passed_courses']     = $count_status->{LP_COURSE_GRADUATION_PASSED} ?? 0;\n+\t\t\t$statistic['failed_courses']     = $count_status->{LP_COURSE_GRADUATION_FAILED} ?? 0;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Fprofile\u002Fstudent\u002Fstatistic', $statistic, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get statistic info of instructor user\n+\t *\n+\t * @param array $params\n+\t *\n+\t * @return array\n+\t * @since 4.1.6\n+\t * @version 1.0.1\n+\t *\u002F\n+\tpublic function get_instructor_statistic( array $params = [] ): array {\n+\t\t$statistic = array(\n+\t\t\t'total_course'        => 0,\n+\t\t\t'published_course'    => 0,\n+\t\t\t'pending_course'      => 0,\n+\t\t\t'total_student'       => 0,\n+\t\t\t'student_completed'   => 0,\n+\t\t\t'student_in_progress' => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user_id          = $this->get_id();\n+\t\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t\t$lp_course_db     = LP_Course_DB::getInstance();\n+\n+\t\t\tif ( ! $this->can_create_course() ) {\n+\t\t\t\tthrow new Exception( 'The user is not Instructor' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Count total user completed course of author\n+\t\t\t$filter_course                      = new LP_Course_Filter();\n+\t\t\t$filter_course->only_fields         = array( 'ID' );\n+\t\t\t$filter_course->post_author         = $user_id;\n+\t\t\t$filter_course->post_status         = 'publish';\n+\t\t\t$filter_course->return_string_query = true;\n+\t\t\t$query_courses_str                  = LP_Course_DB::getInstance()->get_courses( $filter_course );\n+\n+\t\t\t$filter_count_users            = new LP_User_Items_Filter();\n+\t\t\t$filter_count_users->item_type = LP_COURSE_CPT;\n+\t\t\t$filter_count_users->where[]   = \"AND item_id IN ({$query_courses_str})\";\n+\t\t\t$count_student_has_status      = $lp_user_items_db->count_status_by_items( $filter_count_users );\n+\t\t\t\u002F\u002F Count total user in progress course of author\n+\n+\t\t\t\u002F\u002F Get total users attend course of author\n+\t\t\t$filter_count_users                   = $lp_user_items_db->count_user_attend_courses_of_author( $user_id );\n+\t\t\t$count_users_attend_courses_of_author = $lp_user_items_db->get_user_courses( $filter_count_users );\n+\n+\t\t\t\u002F\u002F Get total courses publish of author\n+\t\t\t$filter_count_courses            = $lp_course_db->count_courses_of_author( $user_id, [ 'publish' ] );\n+\t\t\t$total_courses_publish_of_author = $lp_course_db->get_courses( $filter_count_courses );\n+\n+\t\t\t\u002F\u002F Get total courses of author\n+\t\t\t$filter_count_courses    = $lp_course_db->count_courses_of_author( $user_id );\n+\t\t\t$total_courses_of_author = $lp_course_db->get_courses( $filter_count_courses );\n+\n+\t\t\t\u002F\u002F Get total courses pending of author\n+\t\t\t$filter_count_courses            = $lp_course_db->count_courses_of_author( $user_id, [ 'pending' ] );\n+\t\t\t$total_courses_pending_of_author = $lp_course_db->get_courses( $filter_count_courses );\n+\n+\t\t\t$statistic['total_course']        = $total_courses_of_author;\n+\t\t\t$statistic['published_course']    = $total_courses_publish_of_author;\n+\t\t\t$statistic['pending_course']      = $total_courses_pending_of_author;\n+\t\t\t$statistic['total_student']       = $count_users_attend_courses_of_author;\n+\t\t\t$statistic['student_completed']   = $count_student_has_status->{LP_COURSE_FINISHED} ?? 0;\n+\t\t\t$statistic['student_in_progress'] = $count_student_has_status->{LP_COURSE_GRADUATION_IN_PROGRESS} ?? 0;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn apply_filters( 'lp\u002Fprofile\u002Finstructor\u002Fstatistic', $statistic, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Get url instructor.\n+\t *\n+\t * @return string\n+\t * @version 1.0.1\n+\t * @since 4.2.3\n+\t *\u002F\n+\tpublic function get_url_instructor(): string {\n+\t\t$single_instructor_link = '';\n+\n+\t\ttry {\n+\t\t\t$author_id = $this->get_id();\n+\t\t\t$userModel = UserModel::find( $author_id, true );\n+\t\t\tif ( ! $userModel ) {\n+\t\t\t\tthrow new Exception( 'User not found' );\n+\t\t\t}\n+\n+\t\t\t$single_instructor_page_id = learn_press_get_page_id( 'single_instructor' );\n+\t\t\t$user_slug                 = $userModel->get_slug_link();\n+\t\t\t$single_instructor_link    = trailingslashit( trailingslashit( get_page_link( $single_instructor_page_id ) ) . $user_slug );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $single_instructor_link;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Flp-user-functions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Flp-user-functions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser\u002Flp-user-functions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser\u002Flp-user-functions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1728 +1,1728 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-\u002F**\r\n- * Common functions to process actions about user\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FFunctions\u002FUser\r\n- * @version 1.0\r\n- *\u002F\r\n-function learn_press_get_user_profile_tabs() {\r\n-\treturn LP_Profile::instance()->get_tabs();\r\n-}\r\n-\r\n-\u002F**\r\n- * Ensure new users receive a public slug.\r\n- *\r\n- * @param int $user_id\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function learn_press_maybe_generate_user_pretty_slug_on_register( int $user_id ) {\r\n-\t$userModel = UserModel::find( $user_id, true );\r\n-\tif ( ! $userModel ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$userModel->generate_pretty_slug();\r\n-}\r\n-\r\n-add_action( 'user_register', 'learn_press_maybe_generate_user_pretty_slug_on_register' );\r\n-\r\n-\u002F**\r\n- * Delete user data by user ID\r\n- *\r\n- * @param int $user_id\r\n- * @param int $course_id\r\n- *\u002F\r\n-function learn_press_delete_user_data( $user_id, $course_id = 0 ) {\r\n-\tglobal $wpdb;\r\n-\t\u002F\u002F TODO: Should be deleted user's order and order data???\r\n-\r\n-\t$query_args = array( $user_id );\r\n-\r\n-\tif ( $course_id ) {\r\n-\t\t$query_args[] = $course_id;\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-        SELECT user_item_id\r\n-        FROM {$wpdb->prefix}learnpress_user_items\r\n-        WHERE user_id = %d\r\n-        \" . ( $course_id ? ' AND item_id = %d' : '' ) . '\r\n-    ',\r\n-\t\t$query_args\r\n-\t);\r\n-\r\n-\t\u002F\u002F delete all courses user has enrolled\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-        DELETE FROM {$wpdb->prefix}learnpress_user_items\r\n-        WHERE user_id = %d\r\n-        \" . ( $course_id ? ' AND item_id = %d' : '' ) . '\r\n-    ',\r\n-\t\t$query_args\r\n-\t);\r\n-\r\n-\t@$wpdb->query( $query );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get current user ID\r\n- *\r\n- * @return int|string LP_User is int, LP_User_Guest is string\r\n- *\u002F\r\n-function learn_press_get_current_user_id() {\r\n-\t$user = learn_press_get_current_user();\r\n-\r\n-\tif ( ! $user ) {\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\treturn $user->get_id();\r\n-}\r\n-\r\n-\u002F**\r\n- * Get the user by $user_id passed. If $user_id is NULL, get current user.\r\n- * If current user is not logged in, return a GUEST user\r\n- *\r\n- * @param bool $create_temp - Optional. Create temp user if user is not logged in.\r\n- *\r\n- * @return LP_User|LP_User_Guest\r\n- * @editor tungnx\r\n- * @modify 4.1.4\r\n- * @version 1.0.1\r\n- *\u002F\r\n-function learn_press_get_current_user( $create_temp = true ) {\r\n-\t$user_id = get_current_user_id();\r\n-\r\n-\tif ( $user_id ) {\r\n-\t\treturn learn_press_get_user( $user_id );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Return LP_User_Guest\r\n-\treturn learn_press_get_user( 0 );\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_get_user' ) ) {\r\n-\t\u002F**\r\n-\t * Get user by ID. Return false if the user does not exist.\r\n-\t * If user_id = 0, return a guest user.\r\n-\t *\r\n-\t * @param int $user_id\r\n-\t * @param bool $current\r\n-\t *\r\n-\t * @return LP_User|LP_User_Guest|false\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tfunction learn_press_get_user( $user_id = 0, $current = false, $force_new = false ) {\r\n-\t\t$userClass = $user_id && get_user_by( 'ID', $user_id ) ? 'LP_User' : ( $user_id == 0 ? 'LP_User_Guest' : false );\r\n-\t\tif ( false === $userClass ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn new $userClass( $user_id );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Add more 2 user roles teacher and student\r\n- *\u002F\r\n-function learn_press_add_user_roles() {\r\n-\t$course_cap = LP_COURSE_CPT . 's';\r\n-\t$lesson_cap = LP_LESSON_CPT . 's';\r\n-\t$order_cap  = LP_ORDER_CPT . 's';\r\n-\r\n-\tif ( ! get_role( LP_TEACHER_ROLE ) ) {\r\n-\t\tadd_role( LP_TEACHER_ROLE, 'LP Instructor' );\r\n-\t}\r\n-\r\n-\t$teacher = get_role( LP_TEACHER_ROLE );\r\n-\tif ( $teacher ) {\r\n-\t\t$teacher->add_cap( 'read_private_' . $course_cap );\r\n-\t\t$teacher->add_cap( 'delete_published_' . $course_cap );\r\n-\t\t$teacher->add_cap( 'edit_published_' . $course_cap );\r\n-\t\t$teacher->add_cap( 'edit_' . $course_cap );\r\n-\t\t$teacher->add_cap( 'delete_' . $course_cap );\r\n-\t\t\u002F\u002F $teacher->add_cap( 'unfiltered_html' );\r\n-\t\tif ( $teacher->has_cap( 'unfiltered_html' ) ) {\r\n-\t\t\t$teacher->remove_cap( 'unfiltered_html' );\r\n-\t\t}\r\n-\r\n-\t\tif ( LP_Settings::get_option( 'required_review', 'yes' ) == 'yes' ) {\r\n-\t\t\t$teacher->remove_cap( 'publish_' . $course_cap );\r\n-\t\t} else {\r\n-\t\t\t$teacher->add_cap( 'publish_' . $course_cap );\r\n-\t\t}\r\n-\r\n-\t\t$teacher->add_cap( 'read_private_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'delete_published_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'edit_published_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'edit_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'delete_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'publish_' . $lesson_cap );\r\n-\t\t$teacher->add_cap( 'upload_files' );\r\n-\t\t$teacher->add_cap( 'read' );\r\n-\t\t$teacher->add_cap( 'edit_posts' );\r\n-\t}\r\n-\r\n-\t\u002F\u002F administrator\r\n-\t$admin = get_role( 'administrator' );\r\n-\tif ( $admin ) {\r\n-\t\t$admin->add_cap( 'lp_mcp_access' );\r\n-\r\n-\t\t$admin->add_cap( 'read_private_' . $course_cap );\r\n-\t\t$admin->add_cap( 'delete_' . $course_cap );\r\n-\t\t$admin->add_cap( 'delete_published_' . $course_cap );\r\n-\t\t$admin->add_cap( 'edit_' . $course_cap );\r\n-\t\t$admin->add_cap( 'edit_published_' . $course_cap );\r\n-\t\t$admin->add_cap( 'publish_' . $course_cap );\r\n-\t\t$admin->add_cap( 'delete_private_' . $course_cap );\r\n-\t\t$admin->add_cap( 'edit_private_' . $course_cap );\r\n-\t\t$admin->add_cap( 'delete_others_' . $course_cap );\r\n-\t\t$admin->add_cap( 'edit_others_' . $course_cap );\r\n-\r\n-\t\t$admin->add_cap( 'read_private_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'delete_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'delete_published_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'edit_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'edit_published_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'publish_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'delete_private_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'edit_private_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'delete_others_' . $lesson_cap );\r\n-\t\t$admin->add_cap( 'edit_others_' . $lesson_cap );\r\n-\r\n-\t\t$admin->add_cap( 'delete_' . $order_cap );\r\n-\t\t$admin->add_cap( 'delete_published_' . $order_cap );\r\n-\t\t$admin->add_cap( 'edit_' . $order_cap );\r\n-\t\t$admin->add_cap( 'edit_published_' . $order_cap );\r\n-\t\t$admin->add_cap( 'publish_' . $order_cap );\r\n-\t\t$admin->add_cap( 'delete_private_' . $order_cap );\r\n-\t\t$admin->add_cap( 'edit_private_' . $order_cap );\r\n-\t\t$admin->add_cap( 'delete_others_' . $order_cap );\r\n-\t\t$admin->add_cap( 'edit_others_' . $order_cap );\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Remove capabilities added for MCP integration.\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function learn_press_remove_mcp_capabilities() {\r\n-\r\n-\t$admin = get_role( 'administrator' );\r\n-\tif ( $admin ) {\r\n-\t\t$admin->remove_cap( 'lp_mcp_access' );\r\n-\t}\r\n-}\r\n-\u002F*\r\n-function learn_press_current_user_is( $check_type = null ) {\r\n-\tglobal $current_user;\r\n-\t$user_roles = $current_user->roles;\r\n-\t$user_type  = '';\r\n-\r\n-\tif ( in_array( 'lpr_teacher', $user_roles ) ) {\r\n-\t\t$user_type = 'instructor';\r\n-\t} elseif ( in_array( 'lp_teacher', $user_roles ) ) {\r\n-\t\t$user_type = 'instructor';\r\n-\t} elseif ( in_array( 'administrator', $user_roles ) ) {\r\n-\t\t$user_type = 'administrator';\r\n-\t}\r\n-\r\n-\treturn $check_type ? $check_type == $user_type : $user_type;\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_user_has_roles( $roles, $user_id = null ) {\r\n-\t$has_role = false;\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user = wp_get_current_user();\r\n-\t} else {\r\n-\t\t$user = get_user_by( 'id', $user_id );\r\n-\t}\r\n-\t$available_roles = (array) $user->roles;\r\n-\tif ( is_array( $roles ) ) {\r\n-\t\tforeach ( $roles as $role ) {\r\n-\t\t\tif ( in_array( $role, $available_roles ) ) {\r\n-\t\t\t\t$has_role = true;\r\n-\t\t\t\tbreak; \u002F\u002F only need one of roles is in available\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} else {\r\n-\t\tif ( in_array( $roles, $available_roles ) ) {\r\n-\t\t\t$has_role = true;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $has_role;\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_current_user_can_view_profile_section( $section, $user ) {\r\n-\t$current_user = wp_get_current_user();\r\n-\t$view         = true;\r\n-\tif ( $user->get_data( 'user_login' ) != $current_user->user_login && $section == LP_Settings::instance()->get(\r\n-\t\t'profile_endpoints.orders',\r\n-\t\t'profile-orders'\r\n-\t) ) {\r\n-\t\t$view = false;\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_current_user_can_view_profile_section', $view, $section, $user );\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_profile_tab_quizzes_content( $current, $tab, $user ) {\r\n-\tlearn_press_get_template(\r\n-\t\t'profile\u002Ftabs\u002Fquizzes.php',\r\n-\t\tarray(\r\n-\t\t\t'user'    => $user,\r\n-\t\t\t'current' => $current,\r\n-\t\t\t'tab'     => $tab,\r\n-\t\t)\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_profile_tab_orders_content( $current, $tab, $user ) {\r\n-\tlearn_press_get_template(\r\n-\t\t'profile\u002Ftabs\u002Forders.php',\r\n-\t\tarray(\r\n-\t\t\t'user'    => $user,\r\n-\t\t\t'current' => $current,\r\n-\t\t\t'tab'     => $tab,\r\n-\t\t)\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get queried user in profile link\r\n- *\r\n- * @return false|WP_User\r\n- * @since 3.0.0\r\n- * @deprecated 4.2.9.1\r\n- *\u002F\r\n-function learn_press_get_profile_user() {\r\n-\treturn LP_Profile::instance()->get_user_current();\r\n-\r\n-\treturn LP_Profile::get_queried_user();\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Add instructor registration button to register page and admin bar\r\n- *\u002F\r\n-function learn_press_user_become_teacher_registration_form() {\r\n-\tif ( LP_Settings::instance()->get( 'instructor_registration' ) != 'yes' ) {\r\n-\t\treturn;\r\n-\t}\r\n-\t?>\r\n-\t\u003Cp>\r\n-\t\t\u003Clabel for=\"become_teacher\">\r\n-\t\t\t\u003Cinput type=\"checkbox\" name=\"become_teacher\" id=\"become_teacher\">\r\n-\t\t\t\u003C?php esc_html_e( 'Want to become an instructor?', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\t\u003C\u002Fp>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-add_action( 'register_form', 'learn_press_user_become_teacher_registration_form' );\r\n-\r\n-\u002F**\r\n- * Update data into table learnpress_user_items.\r\n- *\r\n- * @param array $fields - Fields and values to be updated.\r\n- *                                              Format: array(\r\n- *                                              field_name_1 => value 1,\r\n- *                                              field_name_2 => value 2,\r\n- *                                              ....\r\n- *                                              field_name_n => value n\r\n- *                                              )\r\n- * @param mixed $where - Optional. Fields with values for conditional update with the same format of $fields.\r\n- * @param bool $update_cache - Optional. Should be update to cache or not (since 3.0.0).\r\n- * @param bool $update_extra_fields_as_meta - Optional. Update extra fields as item meta (since 3.1.0).\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_update_user_item_field( array $fields = array(), $where = false, $update_cache = true, $update_extra_fields_as_meta = false ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t\u002F\u002F Table fields format.\r\n-\t$table_fields = array(\r\n-\t\t'user_item_id' => '%d',\r\n-\t\t'user_id'      => '%d',\r\n-\t\t'item_id'      => '%d',\r\n-\t\t'ref_id'       => '%d',\r\n-\t\t'start_time'   => '%s',\r\n-\t\t'end_time'     => '%s',\r\n-\t\t'access_level' => '%d',\r\n-\t\t'graduation'   => '%s',\r\n-\t\t'item_type'    => '%s',\r\n-\t\t'status'       => '%s',\r\n-\t\t'ref_type'     => '%s',\r\n-\t\t'parent_id'    => '%d',\r\n-\t);\r\n-\r\n-\t\u002F**\r\n-\t * Validate item status\r\n-\t *\u002F\r\n-\tif ( ! empty( $fields['item_id'] ) && ! empty( $fields['status'] ) ) {\r\n-\t\t$item_type = learn_press_get_post_type( $fields['item_id'] );\r\n-\r\n-\t\tif ( LP_COURSE_CPT === $item_type ) {\r\n-\t\t\tif ( 'completed' === $fields['status'] ) {\r\n-\t\t\t\t$fields['status'] = 'finished';\r\n-\t\t\t}\r\n-\t\t} elseif ( 'finished' === $fields['status'] ) {\r\n-\t\t\t\t$fields['status'] = 'completed';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$data        = array();\r\n-\t$data_format = array();\r\n-\tforeach ( $fields as $field => $value ) {\r\n-\t\tif ( ! empty( $table_fields[ $field ] ) ) {\r\n-\t\t\t$data[ $field ] = $value;\r\n-\r\n-\t\t\t\u002F\u002F Do not format the date-time field if it's value is NULL\r\n-\t\t\tif ( in_array( $field, array( 'start_time', 'end_time' ) ) && empty( $value ) ) {\r\n-\t\t\t\t$data[ $field ] = null;\r\n-\t\t\t\t$data_format[]  = '';\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $value instanceof LP_Datetime ) {\r\n-\t\t\t\t\t$data[ $field ] = $value->toSql();\r\n-\t\t\t\t}\r\n-\t\t\t\t$data_format[] = $table_fields[ $field ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( ! empty( $fields['user_item_id'] ) ) {\r\n-\t\t$where = wp_parse_args(\r\n-\t\t\t$where,\r\n-\t\t\tarray( 'user_item_id' => $fields['user_item_id'] )\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F\u002F Set where and where format\r\n-\t$where_format = array();\r\n-\tif ( is_array( $where ) && ! empty( $where ) ) {\r\n-\t\tif ( empty( $where['user_id'] ) ) {\r\n-\t\t\t$where['user_id'] = ! empty( $fields['user_id'] ) ? $fields['user_id'] : learn_press_get_current_user_id();\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $where as $field => $value ) {\r\n-\t\t\tif ( isset( $table_fields[ $field ] ) ) {\r\n-\t\t\t\t$where_format[] = $table_fields[ $field ];\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( ! $data ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t$inserted = false;\r\n-\t$updated  = false;\r\n-\r\n-\t\u002F\u002F Update to database.\r\n-\tif ( $where ) {\r\n-\t\t$updated = $wpdb->update(\r\n-\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t$data,\r\n-\t\t\t$where,\r\n-\t\t\t$data_format,\r\n-\t\t\t$where_format\r\n-\t\t);\r\n-\t} else {\r\n-\t\t\u002F\u002F Insert to database.\r\n-\t\tif ( $wpdb->insert(\r\n-\t\t\t$wpdb->learnpress_user_items,\r\n-\t\t\t$data,\r\n-\t\t\t$data_format\r\n-\t\t) ) {\r\n-\t\t\t$inserted = $wpdb->insert_id;\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( $updated && ! empty( $where['user_item_id'] ) ) {\r\n-\t\t$inserted = $where['user_item_id'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @var object|bool $updated_item\r\n-\t *\u002F\r\n-\t$updated_item = false;\r\n-\r\n-\t\u002F\u002F Get the item we just have updated or inserted.\r\n-\tif ( $inserted ) {\r\n-\t\t$updated_item = learn_press_get_user_item( $inserted );\r\n-\t} elseif ( $updated ) {\r\n-\t\t$updated_item = learn_press_get_user_item( $where );\r\n-\t}\r\n-\r\n-\t\u002F\u002F Clear caches.\r\n-\tif ( $updated_item ) {\r\n-\t\t\u002F\u002F Clear cache total students enrolled.\r\n-\t\tif ( isset( $updated_item->item_type )\r\n-\t\t\t&& LP_COURSE_CPT === $updated_item->item_type\r\n-\t\t\t&& isset( $updated_item->item_id ) ) {\r\n-\t\t\t$lp_course_cache = new LP_Course_Cache( true );\r\n-\t\t\t$lp_course_cache->clean_total_students_enrolled( $updated_item->item_id );\r\n-\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $updated_item->item_id );\r\n-\t\t\t\u002F\u002F Clear cache count students many courses.\r\n-\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\r\n-\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\r\n-\t\t}\r\n-\t\t\u002F\u002F Clear cache user item.\r\n-\t\t$lp_user_items_cache = new LP_User_Items_Cache();\r\n-\t\t$lp_user_items_cache->clean_user_item(\r\n-\t\t\tarray(\r\n-\t\t\t\t$updated_item->user_id,\r\n-\t\t\t\t$updated_item->item_id,\r\n-\t\t\t\t$updated_item->item_type,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t\u002F\u002F Clear cache userItemModel\r\n-\t\t$userItemModel = UserItemModel::find_user_item(\r\n-\t\t\t$updated_item->user_id,\r\n-\t\t\t$updated_item->item_id,\r\n-\t\t\t$updated_item->item_type,\r\n-\t\t\t$updated_item->ref_id,\r\n-\t\t\t$updated_item->ref_type,\r\n-\t\t\ttrue\r\n-\t\t);\r\n-\t\t$userItemModel->clean_caches();\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fupdated-user-item-field', $updated_item );\r\n-\r\n-\t\u002F**\r\n-\t * If there is some fields does not contain in the main table\r\n-\t * then consider update them as metadata.\r\n-\t *\r\n-\t * @comment by tungnx - 4.1.7.3\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tif ( $updated_item && $update_extra_fields_as_meta ) {\r\n-\t\t$extra_fields = array_diff_key( $fields, $table_fields );\r\n-\t\tif ( $extra_fields ) {\r\n-\t\t\tforeach ( $extra_fields as $meta_key => $meta_value ) {\r\n-\t\t\t\tif ( $meta_value == 'user_item_id' ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $meta_value === false ) {\r\n-\t\t\t\t\tlearn_press_delete_user_item_meta( $updated_item->user_item_id, $meta_key );\r\n-\t\t\t\t} else {\r\n-\r\n-\t\t\t\t\tif ( empty( $meta_value ) ) {\r\n-\t\t\t\t\t\t$meta_value = '';\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tlearn_press_update_user_item_meta( $updated_item->user_item_id, $meta_key, $meta_value );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\t\u002F\u002F do_action( 'learn-press\u002Fupdated-user-item-meta', $updated_item );\r\n-\r\n-\treturn $updated_item;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get user item row(s) from user items table by multiple WHERE conditional\r\n- *\r\n- * @param array|int $where\r\n- * @param bool $single\r\n- *\r\n- * @return array\r\n- *\u002F\r\n-function learn_press_get_user_item( $where, $single = true ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t\u002F\u002F Table fields\r\n-\t$table_fields = array(\r\n-\t\t'user_item_id' => '%d',\r\n-\t\t'user_id'      => '%d',\r\n-\t\t'item_id'      => '%d',\r\n-\t\t'ref_id'       => '%d',\r\n-\t\t'start_time'   => '%s',\r\n-\t\t'end_time'     => '%s',\r\n-\t\t'item_type'    => '%s',\r\n-\t\t'status'       => '%s',\r\n-\t\t'ref_type'     => '%s',\r\n-\t\t'parent_id'    => '%d',\r\n-\t);\r\n-\r\n-\t\u002F\u002F If $where is a number consider we are searching the record with unique user_item_id\r\n-\tif ( is_numeric( $where ) ) {\r\n-\t\t$where = array( 'user_item_id' => $where );\r\n-\t}\r\n-\r\n-\t$where_str = array();\r\n-\tforeach ( $where as $field => $value ) {\r\n-\t\tif ( ! empty( $table_fields[ $field ] ) ) {\r\n-\t\t\t$where_str[] = \"{$field} = \" . $table_fields[ $field ];\r\n-\t\t}\r\n-\t}\r\n-\t$item = false;\r\n-\r\n-\tif ( $where_str ) {\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->prefix}learnpress_user_items\r\n-\t\t\tWHERE \" . join( ' AND ', $where_str ) . '\r\n-\t\t\tORDER BY user_item_id DESC\r\n-\t\t\t',\r\n-\t\t\t$where\r\n-\t\t);\r\n-\t\tif ( $single || ! empty( $where['user_item_id'] ) ) {\r\n-\t\t\t$item = $wpdb->get_row( $query );\r\n-\t\t} else {\r\n-\t\t\t$item = $wpdb->get_results( $query );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $item;\r\n-}\r\n-\r\n-\u002F**\r\n- * Get user item meta from user_itemmeta table\r\n- *\r\n- * @param int $user_item_id .\r\n- * @param string $meta_key .\r\n- * @param bool $single .\r\n- *\r\n- * @return mixed\r\n- *\u002F\r\n-function learn_press_get_user_item_meta( $user_item_id = 0, $meta_key = '', $single = true ) {\r\n-\t$meta = false;\r\n-\tif ( metadata_exists( 'learnpress_user_item', $user_item_id, $meta_key ) ) {\r\n-\t\t$meta = get_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $single );\r\n-\t}\r\n-\r\n-\treturn $meta;\r\n-}\r\n-\r\n-\u002F**\r\n- * Add user item meta into table user_itemmeta\r\n- *\r\n- * @param int $user_item_id\r\n- * @param string $meta_key\r\n- * @param mixed $meta_value\r\n- * @param string $prev_value\r\n- *\r\n- * @return false|int\r\n- *\u002F\r\n-function learn_press_add_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn add_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-\u002F**\r\n- * Update user item meta to table user_itemmeta\r\n- *\r\n- * @param int $user_item_id\r\n- * @param string $meta_key\r\n- * @param mixed $meta_value\r\n- * @param string $prev_value\r\n- *\r\n- * @return bool|int\r\n- *\u002F\r\n-function learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev_value = '' ) {\r\n-\treturn update_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $meta_value, $prev_value );\r\n-}\r\n-\r\n-\r\n-\u002F**\r\n- * Update user item meta to table user_itemmeta\r\n- *\r\n- * @param int $object_id\r\n- * @param string $meta_key\r\n- * @param mixed $meta_value\r\n- * @param bool $delete_all\r\n- *\r\n- * @return bool|int\r\n- *\u002F\r\n-function learn_press_delete_user_item_meta( $object_id, $meta_key, $meta_value = '', $delete_all = false ) {\r\n-\treturn delete_metadata( 'learnpress_user_item', $object_id, $meta_key, $meta_value, $delete_all );\r\n-}\r\n-\r\n-if ( ! function_exists( 'learn_press_pre_get_avatar_callback' ) ) {\r\n-\t\u002F**\r\n-\t * Filter the avatar\r\n-\t *\r\n-\t * @param string $avatar\r\n-\t * @param string $id_or_email\r\n-\t * @param array  $args\r\n-\t *\r\n-\t * @return string\r\n-\t * @since 1.0.0\r\n-\t * @version 1.0.2\r\n-\t *\u002F\r\n-\tfunction learn_press_pre_get_avatar_callback( $avatar, $id_or_email = '', $args = array() ) {\r\n-\t\ttry {\r\n-\t\t\tif ( ( isset( $args['gravatar'] ) && $args['gravatar'] ) || ( $args['default'] && $args['force_default'] ) ) {\r\n-\t\t\t\treturn $avatar;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_id = 0;\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Get the ID of user from $id_or_email\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( ! is_numeric( $id_or_email ) && is_string( $id_or_email ) ) {\r\n-\t\t\t\t$user = get_user_by( 'email', $id_or_email );\r\n-\t\t\t\tif ( $user ) {\r\n-\t\t\t\t\t$user_id = $user->ID;\r\n-\t\t\t\t}\r\n-\t\t\t} elseif ( is_numeric( $id_or_email ) ) {\r\n-\t\t\t\t$user_id = $id_or_email;\r\n-\t\t\t} elseif ( is_object( $id_or_email ) && isset( $id_or_email->user_id ) && $id_or_email->user_id ) {\r\n-\t\t\t\t$user_id = $id_or_email->user_id;\r\n-\t\t\t} elseif ( $id_or_email instanceof WP_Comment ) {\r\n-\t\t\t\t$user = get_user_by( 'email', $id_or_email->comment_author_email );\r\n-\t\t\t\tif ( $user ) {\r\n-\t\t\t\t\t$user_id = $user->ID;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user_id ) {\r\n-\t\t\t\treturn $avatar;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = UserModel::find( $user_id, true );\r\n-\t\t\tif ( ! $user ) {\r\n-\t\t\t\treturn $avatar;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$class = array( 'avatar', 'avatar-' . (int) $args['size'], 'photo' );\r\n-\t\t\tif ( $args['class'] ) {\r\n-\t\t\t\tif ( is_array( $args['class'] ) ) {\r\n-\t\t\t\t\t$class = array_merge( $class, $args['class'] );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$class[] = $args['class'];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$avatar_url = $user->get_avatar_url();\r\n-\t\t\t$html_img   = sprintf(\r\n-\t\t\t\t\"\u003Cimg src='%s' srcset='%s' class='%s' height='%d' width='%d' decoding='async'\u002F>\",\r\n-\t\t\t\tesc_url( $avatar_url ),\r\n-\t\t\t\tesc_url( $avatar_url ) . ' 2x',\r\n-\t\t\t\tesc_attr( implode( ' ', $class ) ),\r\n-\t\t\t\t(int) $args['height'],\r\n-\t\t\t\t(int) $args['width']\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $html_img;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\r\n-\t\t\treturn $avatar;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-add_filter( 'pre_get_avatar', 'learn_press_pre_get_avatar_callback', 999, 3 );\r\n-\r\n-\r\n-function learn_press_user_profile_picture_upload_dir( $width_user = true ) {\r\n-\t$upload_dir = wp_upload_dir();\r\n-\t$subdir     = apply_filters( 'learn_press_user_profile_folder', 'learn-press-profile', $width_user );\r\n-\tif ( $width_user ) {\r\n-\t\t$subdir .= '\u002F' . get_current_user_id();\r\n-\t}\r\n-\t$subdir = '\u002F' . $subdir;\r\n-\r\n-\tif ( ! empty( $upload_dir['subdir'] ) ) {\r\n-\t\t$u_subdir = str_replace( '\\\\', '\u002F', $upload_dir['subdir'] );\r\n-\t\t$u_path   = str_replace( '\\\\', '\u002F', $upload_dir['path'] );\r\n-\r\n-\t\t$upload_dir['path'] = str_replace( $u_subdir, $subdir, $u_path );\r\n-\t\t$upload_dir['url']  = str_replace( $u_subdir, $subdir, $upload_dir['url'] );\r\n-\t} else {\r\n-\t\t$upload_dir['path'] = $upload_dir['path'] . $subdir;\r\n-\t\t$upload_dir['url']  = $upload_dir['url'] . $subdir;\r\n-\t}\r\n-\r\n-\t$upload_dir['subdir'] = $subdir;\r\n-\r\n-\t\u002F\u002F Point path\u002Furl to main site if we are in multisite\r\n-\tif ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) {\r\n-\t\tforeach ( array( 'path', 'url', 'basedir', 'baseurl' ) as $v ) {\r\n-\t\t\t$upload_dir[ $v ] = str_replace( '\u002Fsites\u002F' . get_current_blog_id(), '', $upload_dir[ $v ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $upload_dir;\r\n-}\r\n-\r\n-\u002F*\r\n-add_action( 'learn_press_before_purchase_course_handler', '_learn_press_before_purchase_course_handler', 10, 2 );\r\n-function _learn_press_before_purchase_course_handler( $course_id, $cart ) {\r\n-\t\u002F\u002F Redirect to login page if user is not logged in\r\n-\tif ( ! is_user_logged_in() ) {\r\n-\t\t$return_url = esc_url_raw( add_query_arg( $_POST, get_the_permalink( $course_id ) ) );\r\n-\t\t$return_url = apply_filters( 'learn_press_purchase_course_login_redirect_return_url', $return_url );\r\n-\t\t$redirect   = apply_filters(\r\n-\t\t\t'learn_press_purchase_course_login_redirect',\r\n-\t\t\tlearn_press_get_login_url( $return_url )\r\n-\t\t);\r\n-\t\tif ( $redirect !== false ) {\r\n-\t\t\tlearn_press_add_message( __( 'Please log in to enroll in this course', 'learnpress' ) );\r\n-\r\n-\t\t\tif ( learn_press_is_ajax() ) {\r\n-\t\t\t\tlearn_press_send_json(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'redirect' => $redirect,\r\n-\t\t\t\t\t\t'result'   => 'success',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\twp_redirect( $redirect );\r\n-\t\t\t\texit();\r\n-\t\t\t}\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$user     = learn_press_get_current_user();\r\n-\t\t$redirect = false;\r\n-\t\tif ( $user->has_finished_course( $course_id ) ) {\r\n-\t\t\tlearn_press_add_message( __( 'You have already finished the course', 'learnpress' ) );\r\n-\t\t\t$redirect = true;\r\n-\t\t} elseif ( $user->has_purchased_course( $course_id ) ) {\r\n-\t\t\tlearn_press_add_message( __( 'You have already enrolled in this course', 'learnpress' ) );\r\n-\t\t\t$redirect = true;\r\n-\t\t}\r\n-\t\tif ( $redirect ) {\r\n-\t\t\twp_redirect( get_the_permalink( $course_id ) );\r\n-\t\t\texit();\r\n-\t\t}\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_user_is( $role, $user_id = 0 ) {\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user = learn_press_get_current_user();\r\n-\t} else {\r\n-\t\t$user = learn_press_get_user( $user_id );\r\n-\t}\r\n-\tif ( $role == 'admin' ) {\r\n-\t\treturn $user->is_admin();\r\n-\t}\r\n-\tif ( $role == 'instructor' ) {\r\n-\t\treturn $user->is_instructor();\r\n-\t}\r\n-\r\n-\treturn $role;\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_profile_tab_edit_content( $current, $tab, $user ) {\r\n-\tlearn_press_get_template(\r\n-\t\t'profile\u002Ftabs\u002Fedit.php',\r\n-\t\tarray(\r\n-\t\t\t'user'    => $user,\r\n-\t\t\t'current' => $current,\r\n-\t\t\t'tab'     => $tab,\r\n-\t\t)\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_update_user_option( $name, $value, $id = 0 ) {\r\n-\tif ( ! $id ) {\r\n-\t\t$id = get_current_user_id();\r\n-\t}\r\n-\t$key              = 'learnpress_user_options';\r\n-\t$options          = get_user_option( $key, $id );\r\n-\t$options[ $name ] = $value;\r\n-\tupdate_user_option( $id, $key, $options, true );\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_delete_user_option( $name, $id = 0 ) {\r\n-\tif ( ! $id ) {\r\n-\t\t$id = get_current_user_id();\r\n-\t}\r\n-\t$key     = 'learnpress_user_options';\r\n-\t$options = get_user_option( $key, $id );\r\n-\tif ( is_array( $options ) && array_key_exists( $name, $options ) ) {\r\n-\t\tunset( $options[ $name ] );\r\n-\t\tupdate_user_option( $id, $key, $options, true );\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_get_user_option( $name, $id = 0 ) {\r\n-\tif ( ! $id ) {\r\n-\t\t$id = get_current_user_id();\r\n-\t}\r\n-\t$key     = 'learnpress_user_options';\r\n-\t$options = get_user_option( $key, $id );\r\n-\tif ( is_array( $options ) && array_key_exists( $name, $options ) ) {\r\n-\t\treturn $options[ $name ];\r\n-\t}\r\n-\r\n-\treturn false;\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Update user basic information.\r\n- *\r\n- * @param bool $wp_error - Optional. Return WP_Error object in case updating failed.\r\n- *\r\n- * @return bool|mixed|WP_Error\r\n- *\u002F\r\n-function learn_press_update_user_profile_basic_information( $wp_error = false ) {\r\n-\t$user_id = get_current_user_id();\r\n-\r\n-\tif ( ! $user_id ) {\r\n-\t\treturn new WP_Error( 2, 'The user is invalid' );\r\n-\t}\r\n-\r\n-\t$update_data = array(\r\n-\t\t'ID'           => $user_id,\r\n-\t\t'first_name'   => LP_Request::get_param( 'first_name' ),\r\n-\t\t'last_name'    => LP_Request::get_param( 'last_name' ),\r\n-\t\t'description'  => LP_Request::get_param( 'description', '', 'html' ),\r\n-\t\t'display_name' => LP_Request::get_param( 'account_display_name' ),\r\n-\t\t'user_email'   => LP_Request::get_param( 'account_email' ),\r\n-\t);\r\n-\r\n-\t$update_data = apply_filters( 'learn-press\u002Fupdate-profile-basic-information-data', $update_data );\r\n-\t$update_meta = LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register'] ?? '' );\r\n-\r\n-\t$return = LP_Forms_Handler::update_user_data( $update_data, $update_meta );\r\n-\r\n-\t\u002F\u002F Update for social.\r\n-\t$socials    = LP_Request::get_param( 'user_profile_social' );\r\n-\t$extra_data = get_user_meta( $user_id, '_lp_extra_info', true );\r\n-\r\n-\tif ( ! empty( $extra_data ) ) {\r\n-\t\t$socials = array_merge( $extra_data, $socials );\r\n-\t}\r\n-\r\n-\tupdate_user_meta( $user_id, '_lp_extra_info', $socials );\r\n-\r\n-\tif ( is_wp_error( $return ) ) {\r\n-\t\treturn $wp_error ? $return : false;\r\n-\t}\r\n-\r\n-\treturn $return;\r\n-}\r\n-\r\n-\u002F**\r\n- * Update new password.\r\n- *\r\n- * @version 1.0.1\r\n- *\u002F\r\n-function learn_press_update_user_profile_change_password() {\r\n-\ttry {\r\n-\t\t$user = wp_get_current_user();\r\n-\t\tif ( ! $user ) {\r\n-\t\t\tthrow new Exception( 'error_lp_profile_update_pass', 'The user is invalid' );\r\n-\t\t}\r\n-\r\n-\t\t$old_pass = LP_Request::get_param( 'pass0', '', 'text', 'post' );\r\n-\t\tif ( empty( $old_pass ) ) {\r\n-\t\t\tthrow new Exception( __( 'Enter the old password!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$check_old_pass = wp_check_password( $old_pass, $user->data->user_pass, $user->ID );\r\n-\t\tif ( ! $check_old_pass ) {\r\n-\t\t\tthrow new Exception( __( 'The old password is incorrect!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$new_pass         = LP_Request::get_param( 'pass1', '', 'text', 'post' );\r\n-\t\t$new_pass_confirm = LP_Request::get_param( 'pass2', '', 'text', 'post' );\r\n-\t\tif ( empty( $new_pass ) || empty( $new_pass_confirm )\r\n-\t\t\t|| $new_pass != $new_pass_confirm ) {\r\n-\t\t\tthrow new Exception( __( 'Incorrect confirmation password!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Update user password\r\n-\t\t\u002F\u002F wp_set_password( $new_pass, $user->ID );\r\n-\t\t$update_data = array(\r\n-\t\t\t'user_pass' => $new_pass,\r\n-\t\t\t'ID'        => $user->ID,\r\n-\t\t);\r\n-\r\n-\t\t$rs = wp_update_user( $update_data );\r\n-\t\tif ( is_wp_error( $rs ) ) {\r\n-\t\t\tthrow new Exception( $rs->get_error_message() );\r\n-\t\t}\r\n-\t} catch ( Exception $ex ) {\r\n-\t\treturn new WP_Error( 'error_lp_profile_update_pass', $ex->getMessage() );\r\n-\t}\r\n-\r\n-\treturn true;\r\n-}\r\n-\r\n-function learn_press_get_avatar_thumb_size() {\r\n-\t$option = LP_Settings::get_option(\r\n-\t\t'avatar_dimensions',\r\n-\t\tarray(\r\n-\t\t\t'width'  => 250,\r\n-\t\t\t'height' => 250,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( ! isset( $option['width'] ) || ! isset( $option['height'] ) ) {\r\n-\t\t$option = array(\r\n-\t\t\t'width'  => 250,\r\n-\t\t\t'height' => 250,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F\u002F For option get_avatar_url\r\n-\t$option['size'] = $option['width'];\r\n-\r\n-\treturn $option;\r\n-}\r\n-\r\n-function learn_press_get_course_thumbnail_dimensions() {\r\n-\t$option = LP_Settings::get_option(\r\n-\t\t'course_thumbnail_dimensions',\r\n-\t\tarray(\r\n-\t\t\t'width'  => 500,\r\n-\t\t\t'height' => 300,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\tif ( ! isset( $option['width'] ) || ! isset( $option['height'] ) ) {\r\n-\t\t$option = array(\r\n-\t\t\t'width'  => 500,\r\n-\t\t\t'height' => 300,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\treturn $option;\r\n-}\r\n-\r\n-\u002F*\r\n-function learn_press_get_user_avatar( $user_id = 0, $size = '' ) {\r\n-\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\treturn $user->get_profile_picture( '', $size );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get profile instance for an user to view.\r\n- *\r\n- * @param int $for_user\r\n- *\r\n- * @return LP_Profile|WP_Error\r\n- *\u002F\r\n-function learn_press_get_profile( $for_user = 0 ) {\r\n-\treturn LP_Profile::instance( $for_user );\r\n-}\r\n-\r\n-\u002F*\r\n-function learn_press_remove_user_items( $user_id, $item_id, $course_id, $include_course = false ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\tsettype( $item_id, 'array' );\r\n-\r\n-\t$format = array_fill( 0, sizeof( $item_id ), '%d' );\r\n-\t$where  = '';\r\n-\r\n-\t$args = array( $user_id );\r\n-\t$args = array_merge( $args, $item_id );\r\n-\r\n-\tif ( $course_id ) {\r\n-\t\t$args[] = $course_id;\r\n-\t\t$where  = 'AND ref_id = %d';\r\n-\t}\r\n-\r\n-\tif ( $include_course ) {\r\n-\t\t$where .= ' OR ( item_id = %d AND item_type = %s )';\r\n-\t\t$args[] = $course_id;\r\n-\t\t$args[] = LP_COURSE_CPT;\r\n-\t}\r\n-\r\n-\t$query = $wpdb->prepare(\r\n-\t\t\"\r\n-\t\tDELETE\r\n-\t\tFROM {$wpdb->learnpress_user_items}\r\n-\t\tWHERE user_id = %d\r\n-\t\tAND ( item_id IN(\" . join( ',', $format ) . \")\r\n-\t\t$where )\r\n-\t\",\r\n-\t\t$args\r\n-\t);\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Get user profile link\r\n- *\r\n- * @param int $user_id\r\n- * @param null $tab\r\n- *\r\n- * @return mixed|string\r\n- *\u002F\r\n-function learn_press_user_profile_link( $user_id = 0, $tab = '' ) {\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\r\n-\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\tif ( ! $user ) {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\tglobal $wp_query;\r\n-\t$wp_user = get_userdata( $user_id );\r\n-\tif ( ! $wp_user instanceof WP_User ) {\r\n-\t\treturn '';\r\n-\t}\r\n-\r\n-\t$user_model = new UserModel( $wp_user );\r\n-\t$args       = array(\r\n-\t\t'user' => $user_model->get_pretty_slug(),\r\n-\t);\r\n-\r\n-\tif ( $tab ) {\r\n-\t\t$args['tab'] = $tab;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * If no tab is selected in profile and is current user\r\n-\t * then no need the username in profile link.\r\n-\t *\u002F\r\n-\tif ( ( $user_id == get_current_user_id() ) && ! isset( $args['tab'] ) ) {\r\n-\t\tunset( $args['user'] );\r\n-\t}\r\n-\r\n-\t$profile_link = trailingslashit( learn_press_get_page_link( 'profile' ) );\r\n-\tif ( $profile_link ) {\r\n-\t\tif ( get_option( 'permalink_structure' ) ) {\r\n-\t\t\t$url = trailingslashit( $profile_link . join( '\u002F', array_values( $args ) ) );\r\n-\t\t} else {\r\n-\t\t\t$url = esc_url_raw( add_query_arg( $args, $profile_link ) );\r\n-\t\t}\r\n-\t} else {\r\n-\t\t$url = get_author_posts_url( $user_id );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn_press_user_profile_link', $url, $user_id, $tab );\r\n-}\r\n-\r\n-\u002F*\r\n-function learn_press_create_user_item( $args = array(), $wp_error = false ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$defaults = array(\r\n-\t\t'user_id'     => get_current_user_id(),\r\n-\t\t'item_id'     => '',\r\n-\t\t'start_time'  => time(),\r\n-\t\t'end_time'    => '',\r\n-\t\t'graduation'  => '',\r\n-\t\t'item_type'   => '',\r\n-\t\t'status'      => '',\r\n-\t\t'ref_id'      => 0,\r\n-\t\t'ref_type'    => '',\r\n-\t\t'parent_id'   => 0,\r\n-\t\t'create_meta' => array(),\r\n-\t);\r\n-\r\n-\t$item_data = wp_parse_args( $args, $defaults );\r\n-\r\n-\t\u002F\u002F Validate item_id and post type\r\n-\tif ( empty( $item_data['item_id'] ) ) {\r\n-\t\tif ( $wp_error ) {\r\n-\t\t\treturn new WP_Error( 'invalid_item_id', __( 'Invalid item id.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\t$post_type = learn_press_get_post_type( $item_data['item_id'] );\r\n-\tif ( empty( $item_data['item_type'] ) && $post_type ) {\r\n-\t\t$item_data['item_type'] = $post_type;\r\n-\t}\r\n-\r\n-\t\u002F\u002F Get id and type of ref if they are null\r\n-\tif ( ! empty( $item_data['parent_id'] ) && ( empty( $item_data['ref_id'] ) || ( empty( $item_data['ref_type'] ) ) ) ) {\r\n-\t\t$parent = $wpdb->get_row(\r\n-\t\t\t$wpdb->prepare(\r\n-\t\t\t\t\"SELECT * FROM {$wpdb->learnpress_user_items} WHERE %d\",\r\n-\t\t\t\t$item_data['parent_id']\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\tif ( $parent ) {\r\n-\t\t\tif ( empty( $item_data['ref_id'] ) ) {\r\n-\t\t\t\t$item_data['ref_id'] = $parent->item_id;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $item_data['ref_type'] ) ) {\r\n-\t\t\t\t$item_data['ref_type'] = $parent->item_type;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F\u002F Filter\r\n-\t$item_data = apply_filters( 'learn-press\u002Fcreate-user-item-data', $item_data );\r\n-\tif ( ! $item_data ) {\r\n-\t\tif ( $wp_error ) {\r\n-\t\t\treturn new WP_Error( 'invalid_item_data', __( 'Invalid item data.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fbefore-create-user-item', $item_data );\r\n-\r\n-\t$create_meta = ! empty( $item_data['create_meta'] ) ? $item_data['create_meta'] : false;\r\n-\r\n-\tif ( $create_meta ) {\r\n-\t\tunset( $item_data['create_meta'] );\r\n-\t}\r\n-\r\n-\t$user_item = new LP_User_Item( $item_data );\r\n-\t$result    = $user_item->update();\r\n-\tif ( ! $result || is_wp_error( $result ) ) {\r\n-\t\tif ( $wp_error && is_wp_error( $result ) ) {\r\n-\t\t\treturn $result;\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fcreated-user-item', $user_item, $item_data );\r\n-\r\n-\t$create_meta = apply_filters( 'learn-press\u002Fcreate-user-item-meta', $create_meta, $item_data );\r\n-\tif ( ! $create_meta ) {\r\n-\t\treturn $user_item;\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fbefore-create-user-item-meta', $create_meta );\r\n-\r\n-\tforeach ( $create_meta as $key => $value ) {\r\n-\t\tlearn_press_update_user_item_meta( $user_item->get_user_item_id(), $key, $value );\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fcreated-user-item-meta', $user_item, $create_meta );\r\n-\r\n-\treturn $user_item;\r\n-}*\u002F\r\n-\r\n-\u002F*\r\n-function learn_press_isset_user_item_for_quiz( $quiz_id, $course_id ) {\r\n-\tglobal $wpdb;\r\n-\r\n-\t$query = $wpdb->prepare( \"SELECT user_item_id FROM $wpdb->learnpress_user_items WHERE ref_id=%d AND item_id=%d\", $course_id, $quiz_id );\r\n-\t$col   = $wpdb->get_col( $query );\r\n-\r\n-\tif ( ! empty( $col ) ) {\r\n-\t\treturn $col;\r\n-\t} else {\r\n-\t\treturn false;\r\n-\t}\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * Prepares list of questions for rest api.\r\n- *\r\n- * @param int[] $question_ids\r\n- * @param array $args\r\n- *\r\n- * @return array\r\n- * @since 3.3.0\r\n- *\u002F\r\n-function learn_press_rest_prepare_user_questions( array $question_ids = array(), array $args = array() ): array {\r\n-\tif ( is_numeric( $args ) ) {\r\n-\r\n-\t} else {\r\n-\t\t$args = wp_parse_args(\r\n-\t\t\t$args,\r\n-\t\t\tarray(\r\n-\t\t\t\t'instant_hint'        => true,\r\n-\t\t\t\t'instant_check'       => true,\r\n-\t\t\t\t'quiz_status'         => '',\r\n-\t\t\t\t'checked_questions'   => array(),\r\n-\t\t\t\t'hinted_questions'    => array(),\r\n-\t\t\t\t'answered'            => array(),\r\n-\t\t\t\t'show_correct_review' => true,\r\n-\t\t\t)\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t$checkedQuestions = $args['checked_questions'];\r\n-\t$hintedQuestions  = $args['hinted_questions'];\r\n-\t$instantHint      = $args['instant_hint'];\r\n-\t$instantCheck     = $args['instant_check'];\r\n-\t$quizStatus       = $args['quiz_status'];\r\n-\t$answered         = $args['answered'];\r\n-\t$status           = $args['status'] ?? '';\r\n-\t$questions        = array();\r\n-\r\n-\tif ( $question_ids ) {\r\n-\t\tforeach ( $question_ids as $id ) {\r\n-\t\t\t$question       = learn_press_get_question( $id );\r\n-\t\t\t$hasHint        = false;\r\n-\t\t\t$hasExplanation = false;\r\n-\t\t\t$canCheck       = false;\r\n-\t\t\t$hinted         = false;\r\n-\t\t\t$checked        = false;\r\n-\t\t\t$theHint        = $question->get_hint();\r\n-\t\t\t$theExplanation = '';\r\n-\r\n-\t\t\tif ( $instantCheck || $status == 'completed' ) {\r\n-\t\t\t\t$theExplanation = $question->get_explanation();\r\n-\t\t\t\t$checked        = in_array( $id, $checkedQuestions );\r\n-\t\t\t\t$hasExplanation = (bool) $theExplanation;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$mark = $question->get_mark() ? $question->get_mark() : 1;\r\n-\r\n-\t\t\t$questionData = array(\r\n-\t\t\t\t'object' => $question,\r\n-\t\t\t\t'id'     => absint( $id ),\r\n-\t\t\t\t'title'  => $question->get_title(),\r\n-\t\t\t\t'type'   => $question->get_type(),\r\n-\t\t\t\t'point'  => $mark,\r\n-\t\t\t);\r\n-\r\n-\t\t\t$content = $question->get_content();\r\n-\t\t\tif ( $content ) {\r\n-\t\t\t\t$questionData['content'] = $content;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $theHint ) {\r\n-\t\t\t\t$questionData['hint'] = $theHint;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $status == 'completed' || ( $checked && $theExplanation ) ) {\r\n-\t\t\t\t$questionData['explanation'] = $theExplanation;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $hasExplanation ) {\r\n-\t\t\t\t$questionData['has_explanation'] = $hasExplanation;\r\n-\r\n-\t\t\t\tif ( $checked ) {\r\n-\t\t\t\t\t$questionData['explanation'] = $theExplanation;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$with_true_or_false = ( $checked || ( $quizStatus == 'completed' && $args['show_correct_review'] ) );\r\n-\r\n-\t\t\t\u002F\u002F if ( $question->is_support( 'answer-options' ) ) {\r\n-\t\t\t$questionData['options'] = learn_press_get_question_options_for_js(\r\n-\t\t\t\t$question,\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'include_is_true' => $with_true_or_false,\r\n-\t\t\t\t\t'answer'          => $answered[ $id ]['answered'] ?? '',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t\u002F\u002F }\r\n-\r\n-\t\t\t$questions[] = $questionData;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Remove answered\r\n-\t\t *\u002F\r\n-\t\tif ( $quizStatus !== 'completed' ) {\r\n-\t\t\tif ( $checkedQuestions && $quizStatus ) {\r\n-\r\n-\t\t\t\t$omitIds = array_diff( $question_ids, $checkedQuestions );\r\n-\r\n-\t\t\t\tif ( $omitIds ) {\r\n-\t\t\t\t\tforeach ( $omitIds as $omitId ) {\r\n-\t\t\t\t\t\tif ( ! empty( $answered[ $omitId ] ) ) {\r\n-\t\t\t\t\t\t\tunset( $answered[ $omitId ] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Flist-questions-data', $questions );\r\n-}\r\n-\r\n-\u002F**\r\n- * Update extra profile data upon update user.\r\n- *\r\n- * @param int $user_id\r\n- *\r\n- * @since 4.0.0\r\n- *\u002F\r\n-function learn_press_update_extra_user_profile_fields( $user_id ) {\r\n-\tif ( ! current_user_can( 'edit_user', $user_id ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tif ( array_key_exists( 'lp_user_slug', $_POST ) ) {\r\n-\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\tif ( ! $userModel ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$slug_result = $userModel->update_pretty_slug( (string) $_POST['lp_user_slug'] );\r\n-\t\tif ( is_wp_error( $slug_result ) ) {\r\n-\t\t\twp_safe_redirect(\r\n-\t\t\t\tadd_query_arg(\r\n-\t\t\t\t\t'lp-message',\r\n-\t\t\t\t\turlencode( $slug_result->get_error_message() ),\r\n-\t\t\t\t\twp_get_referer()\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\tdie();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tif ( isset( $_POST['_lp_extra_info'] ) ) {\r\n-\t\t$extra_info = LP_Request::get_param( '_lp_extra_info', array(), '', 'post' );\r\n-\t\tupdate_user_meta( $user_id, '_lp_extra_info', $extra_info );\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'personal_options_update', 'learn_press_update_extra_user_profile_fields' );\r\n-add_action( 'edit_user_profile_update', 'learn_press_update_extra_user_profile_fields' );\r\n-\r\n-\u002F**\r\n- * Get extra profile info data\r\n- *\r\n- * @param int $user_id\r\n- *\r\n- * @return array\r\n- * @since 4.0.1\r\n- *\u002F\r\n-function learn_press_get_user_extra_profile_info( $user_id = 0 ) {\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\r\n-\t$extra_profile_info = get_the_author_meta( '_lp_extra_info', $user_id );\r\n-\t$social_fields      = learn_press_social_profiles();\r\n-\r\n-\t$user_socials = array();\r\n-\tforeach ( $social_fields as $key => $label ) {\r\n-\t\t$key                  = sanitize_key( $key );\r\n-\t\t$user_socials[ $key ] = '';\r\n-\t\tif ( is_array( $extra_profile_info ) && isset( $extra_profile_info[ $key ] ) ) {\r\n-\t\t\t$user_socials[ $key ] = esc_url_raw( $extra_profile_info[ $key ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fuser-extra-profile-info', $user_socials, $user_id );\r\n-}\r\n-\r\n-\u002F**\r\n- * @return array\r\n- * @since 3.x.x\r\n- * @version 4.0.2\r\n- *\u002F\r\n-function learn_press_social_profiles() {\r\n-\treturn apply_filters(\r\n-\t\t'learn-press\u002Fsocial-profiles',\r\n-\t\tarray(\r\n-\t\t\t'facebook' => learn_press_social_profile_name( 'facebook' ),\r\n-\t\t\t'twitter'  => learn_press_social_profile_name( 'twitter' ),\r\n-\t\t\t'youtube'  => learn_press_social_profile_name( 'youtube' ),\r\n-\t\t\t'linkedin' => learn_press_social_profile_name( 'linkedin' ),\r\n-\t\t)\r\n-\t);\r\n-}\r\n-\r\n-function learn_press_social_profile_name( $key ) {\r\n-\t$name = '';\r\n-\tswitch ( $key ) {\r\n-\t\tcase 'facebook':\r\n-\t\t\t$name = esc_html__( 'Facebook Profile', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'twitter':\r\n-\t\t\t$name = esc_html__( 'X Profile', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'youtube':\r\n-\t\t\t$name = esc_html__( 'Youtube Channel', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tcase 'linkedin':\r\n-\t\t\t$name = esc_html__( 'Linkedin Profile', 'learnpress' );\r\n-\t\t\tbreak;\r\n-\t\tdefault:\r\n-\t\t\t$name = ucfirst( $key );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fsocial-profile-name', $name, $key );\r\n-}\r\n-\r\n-function lp_add_default_fields( $fields ) {\r\n-\t$first_name = LP_Settings::get_option( 'enable_register_first_name', 'no' );\r\n-\r\n-\tif ( $first_name === 'yes' ) {\r\n-\t\t?>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_first_name\">\u003C?php esc_html_e( 'First name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id=\"reg_first_name\" name=\"reg_first_name\" type=\"text\"\r\n-\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'First name', 'learnpress' ); ?>\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_first_name'] ?? '' ) ); ?>\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t$last_name = LP_Settings::instance()->get( 'enable_register_last_name' );\r\n-\r\n-\tif ( $last_name === 'yes' ) {\r\n-\t\t?>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_last_name\">\u003C?php esc_html_e( 'Last name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id=\"reg_last_name\" name=\"reg_last_name\" type=\"text\"\r\n-\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Last name', 'learnpress' ); ?>\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_last_name'] ?? '' ) ); ?>\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\t$display_name = LP_Settings::instance()->get( 'enable_register_display_name' );\r\n-\r\n-\tif ( $display_name === 'yes' ) {\r\n-\t\t?>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_display_name\">\u003C?php esc_html_e( 'Display name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id=\"reg_display_name\" name=\"reg_display_name\" type=\"text\"\r\n-\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Display name', 'learnpress' ); ?>\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_display_name'] ?? '' ) ); ?>\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003C?php\r\n-\t}\r\n-}\r\n-\r\n-add_filter( 'learn-press\u002Fafter-form-register-fields', 'lp_add_default_fields' );\r\n-\r\n-function lp_custom_register_fields_display() {\r\n-\t?>\r\n-\t\u003C?php $custom_fields = LP_Profile::get_register_fields_custom(); ?>\r\n-\r\n-\t\u003C?php if ( $custom_fields ) : ?>\r\n-\t\t\u003C?php foreach ( $custom_fields as $custom_field ) : ?>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$cf_class = '';\r\n-\t\t\tif ( $custom_field['required'] == 'yes' ) {\r\n-\t\t\t\t$cf_class = ' required';\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cstyle>\r\n-\t\t\t\t\t.required label {\r\n-\t\t\t\t\t\tfont-weight: bold;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t.required label:after {\r\n-\t\t\t\t\t\tcontent: ' *';\r\n-\t\t\t\t\t\tdisplay: inline;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\u003C\u002Fstyle>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( isset( $custom_field['id'] ) ) {\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003C?php $value = $custom_field['id']; ?>\r\n-\r\n-\t\t\t\t\u003Cli class=\"form-field\u003C?php echo esc_attr( $cf_class ); ?>\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tswitch ( $custom_field['type'] ) {\r\n-\t\t\t\t\t\tcase 'text':\r\n-\t\t\t\t\t\tcase 'number':\r\n-\t\t\t\t\t\tcase 'email':\r\n-\t\t\t\t\t\tcase 'url':\r\n-\t\t\t\t\t\tcase 'tel':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo esc_html( $custom_field['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\"\r\n-\t\t\t\t\t\t\t\t\ttype=\"\u003C?php echo esc_attr( $custom_field['type'] ); ?>\" class=\"regular-text\"\r\n-\t\t\t\t\t\t\t\t\tvalue=\"\"\u002F>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'textarea':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo esc_html( $custom_field['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\">\u003C\u002Ftextarea>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'checkbox':\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003Clabel>\r\n-\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\"\r\n-\t\t\t\t\t\t\t\t\t\ttype=\"\u003C?php echo esc_attr( $custom_field['type'] ); ?>\" value=\"1\">\r\n-\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $custom_field['name'] ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php } ?>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C?php endif; ?>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-add_action( 'learn-press\u002Fafter-form-register-fields', 'lp_custom_register_fields_display' );\r\n-\r\n-\u002F**\r\n- * Custom register fields\r\n- *\r\n- * @param [type] $user_id\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function lp_user_custom_register_fields( $user_id, $fields = array() ) {\r\n-\tif ( ! empty( $fields ) ) {\r\n-\t\tupdate_user_meta( $user_id, '_lp_custom_register', LP_Helper::sanitize_params_submitted( $fields ) );\r\n-\t} elseif ( isset( $_POST['_lp_custom_register'] ) ) {\r\n-\t\tupdate_user_meta( $user_id, '_lp_custom_register', LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register'] ) );\r\n-\t}\r\n-}\r\n-\r\n-add_action( 'personal_options_update', 'lp_user_custom_register_fields' );\r\n-add_action( 'edit_user_profile_update', 'lp_user_custom_register_fields' );\r\n-\r\n-function lp_get_user_custom_register_fields( $user_id = 0 ) {\r\n-\tif ( ! $user_id ) {\r\n-\t\t$user_id = get_current_user_id();\r\n-\t}\r\n-\r\n-\t$register_fields = get_the_author_meta( '_lp_custom_register', $user_id );\r\n-\t$defaults        = lp_get_user_custom_fields();\r\n-\r\n-\t$extra_profile_info = wp_parse_args( $register_fields, $defaults );\r\n-\r\n-\treturn apply_filters( 'lp\u002Fuser-custom-register-fields', $register_fields, $user_id );\r\n-}\r\n-\r\n-function lp_get_user_custom_fields() {\r\n-\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', array() );\r\n-\r\n-\t$output = array();\r\n-\r\n-\tif ( $custom_fields ) {\r\n-\t\tforeach ( $custom_fields as $field ) {\r\n-\t\t\t$output[ $field['id'] ] = '';\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn $output;\r\n-}\r\n-\r\n-\u002F**\r\n- * Check extra user data is a social profile.\r\n- *\r\n- * @param $key\r\n- *\r\n- * @return bool\r\n- * @since 4.0.0\r\n- * @deprecated 4.3.2\r\n- *\u002F\r\n-function learn_press_is_social_profile( $key ) {\r\n-\t_deprecated_function( __FUNCTION__, '4.3.2' );\r\n-\r\n-\treturn true;\r\n-\r\n-\t$is_socials = learn_press_social_profiles();\r\n-\r\n-\treturn in_array( $key, $is_socials );\r\n-}\r\n-\r\n-\u002F**\r\n- * Get extra profile fields will be registered in backend profile.\r\n- *\r\n- * @return array\r\n- * @since 4.0.0\r\n- * @deprecated 4.3.2\r\n- *\u002F\r\n-function learn_press_get_user_extra_profile_fields() {\r\n-\t_deprecated_function( __FUNCTION__, '4.3.2' );\r\n-\treturn array();\r\n-\r\n-\t$socials = learn_press_social_profiles();\r\n-\r\n-\treturn $socials;\r\n-\r\n-\t$fields = array();\r\n-\r\n-\tforeach ( $socials as $social ) {\r\n-\t\t$fields[ $social ] = learn_press_social_profile_name( $social );\r\n-\t}\r\n-\r\n-\treturn apply_filters( 'learn-press\u002Fuser-extra-profile-fields', $fields );\r\n-}\r\n-\r\n-\u002F**\r\n- * Show courses user enrolled on backend\r\n- *\r\n- * @param $user\r\n- *\r\n- * @return void\r\n- *\u002F\r\n-function learn_press_user_profile_data( $user ) {\r\n-\tif ( ! is_admin() ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tlearn_press_admin_view( 'backend-user-profile', array( 'user' => $user ) );\r\n-\tlearn_press_admin_view( 'user\u002Fcourses.php', array( 'user_id' => $user->ID ) );\r\n-}\r\n-\r\n-add_action( 'edit_user_profile', 'learn_press_user_profile_data', 1000 );\r\n-add_action( 'show_user_profile', 'learn_press_user_profile_data', 1000 );\r\n-\r\n-\u002F*\r\n-function learnpress_get_count_by_user( $user_id = '', $post_type = 'lp_course' ) {\r\n-\tif ( empty( $user_id ) ) {\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t$args = array(\r\n-\t\t'author'         => $user_id,\r\n-\t\t'posts_per_page' => - 1,\r\n-\t\t'post_type'      => $post_type,\r\n-\t\t'post_status'    => 'any',\r\n-\t);\r\n-\r\n-\t$posts = get_posts( $args );\r\n-\r\n-\t$output = array(\r\n-\t\t'all'     => count( $posts ),\r\n-\t\t'publish' => array(),\r\n-\t\t'pending' => array(),\r\n-\t);\r\n-\r\n-\t$pending = $public = array();\r\n-\r\n-\tif ( ! empty( $posts ) ) {\r\n-\t\tforeach ( $posts as $post ) {\r\n-\t\t\tswitch ( $post->post_status ) {\r\n-\t\t\t\tcase 'pending':\r\n-\t\t\t\t\t$pending[] = $post;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'publish':\r\n-\t\t\t\t\t$public[] = $post;\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\treturn array(\r\n-\t\t'all'     => count( $posts ),\r\n-\t\t'publish' => count( $public ),\r\n-\t\t'pending' => count( $pending ),\r\n-\t);\r\n-}*\u002F\r\n+\u003C?php\n+\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LearnPress\\Models\\UserModel;\n+\n+\u002F**\n+ * Common functions to process actions about user\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FFunctions\u002FUser\n+ * @version 1.0\n+ *\u002F\n+function learn_press_get_user_profile_tabs() {\n+\treturn LP_Profile::instance()->get_tabs();\n+}\n+\n+\u002F**\n+ * Ensure new users receive a public slug.\n+ *\n+ * @param int $user_id\n+ *\n+ * @return void\n+ *\u002F\n+function learn_press_maybe_generate_user_pretty_slug_on_register( int $user_id ) {\n+\t$userModel = UserModel::find( $user_id, true );\n+\tif ( ! $userModel ) {\n+\t\treturn;\n+\t}\n+\n+\t$userModel->generate_pretty_slug();\n+}\n+\n+\u002F\u002Fadd_action( 'user_register', 'learn_press_maybe_generate_user_pretty_slug_on_register' );\n+\n+\u002F**\n+ * Delete user data by user ID\n+ *\n+ * @param int $user_id\n+ * @param int $course_id\n+ *\u002F\n+function learn_press_delete_user_data( $user_id, $course_id = 0 ) {\n+\tglobal $wpdb;\n+\t\u002F\u002F TODO: Should be deleted user's order and order data???\n+\n+\t$query_args = array( $user_id );\n+\n+\tif ( $course_id ) {\n+\t\t$query_args[] = $course_id;\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+        SELECT user_item_id\n+        FROM {$wpdb->prefix}learnpress_user_items\n+        WHERE user_id = %d\n+        \" . ( $course_id ? ' AND item_id = %d' : '' ) . '\n+    ',\n+\t\t$query_args\n+\t);\n+\n+\t\u002F\u002F delete all courses user has enrolled\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+        DELETE FROM {$wpdb->prefix}learnpress_user_items\n+        WHERE user_id = %d\n+        \" . ( $course_id ? ' AND item_id = %d' : '' ) . '\n+    ',\n+\t\t$query_args\n+\t);\n+\n+\t@$wpdb->query( $query );\n+}\n+\n+\u002F**\n+ * Get current user ID\n+ *\n+ * @return int|string LP_User is int, LP_User_Guest is string\n+ *\u002F\n+function learn_press_get_current_user_id() {\n+\t$user = learn_press_get_current_user();\n+\n+\tif ( ! $user ) {\n+\t\treturn 0;\n+\t}\n+\n+\treturn $user->get_id();\n+}\n+\n+\u002F**\n+ * Get the user by $user_id passed. If $user_id is NULL, get current user.\n+ * If current user is not logged in, return a GUEST user\n+ *\n+ * @param bool $create_temp - Optional. Create temp user if user is not logged in.\n+ *\n+ * @return LP_User|LP_User_Guest\n+ * @editor tungnx\n+ * @modify 4.1.4\n+ * @version 1.0.1\n+ *\u002F\n+function learn_press_get_current_user( $create_temp = true ) {\n+\t$user_id = get_current_user_id();\n+\n+\tif ( $user_id ) {\n+\t\treturn learn_press_get_user( $user_id );\n+\t}\n+\n+\t\u002F\u002F Return LP_User_Guest\n+\treturn learn_press_get_user( 0 );\n+}\n+\n+if ( ! function_exists( 'learn_press_get_user' ) ) {\n+\t\u002F**\n+\t * Get user by ID. Return false if the user does not exist.\n+\t * If user_id = 0, return a guest user.\n+\t *\n+\t * @param int $user_id\n+\t * @param bool $current\n+\t *\n+\t * @return LP_User|LP_User_Guest|false\n+\t * @since 3.0.0\n+\t * @version 4.0.1\n+\t *\u002F\n+\tfunction learn_press_get_user( $user_id = 0, $current = false, $force_new = false ) {\n+\t\t$userClass = $user_id && get_user_by( 'ID', $user_id ) ? 'LP_User' : ( $user_id == 0 ? 'LP_User_Guest' : false );\n+\t\tif ( false === $userClass ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn new $userClass( $user_id );\n+\t}\n+}\n+\n+\u002F**\n+ * Add more 2 user roles teacher and student\n+ *\u002F\n+function learn_press_add_user_roles() {\n+\t$course_cap = LP_COURSE_CPT . 's';\n+\t$lesson_cap = LP_LESSON_CPT . 's';\n+\t$order_cap  = LP_ORDER_CPT . 's';\n+\n+\tif ( ! get_role( LP_TEACHER_ROLE ) ) {\n+\t\tadd_role( LP_TEACHER_ROLE, 'LP Instructor' );\n+\t}\n+\n+\t$teacher = get_role( LP_TEACHER_ROLE );\n+\tif ( $teacher ) {\n+\t\t$teacher->add_cap( 'read_private_' . $course_cap );\n+\t\t$teacher->add_cap( 'delete_published_' . $course_cap );\n+\t\t$teacher->add_cap( 'edit_published_' . $course_cap );\n+\t\t$teacher->add_cap( 'edit_' . $course_cap );\n+\t\t$teacher->add_cap( 'delete_' . $course_cap );\n+\t\t\u002F\u002F $teacher->add_cap( 'unfiltered_html' );\n+\t\tif ( $teacher->has_cap( 'unfiltered_html' ) ) {\n+\t\t\t$teacher->remove_cap( 'unfiltered_html' );\n+\t\t}\n+\n+\t\tif ( LP_Settings::get_option( 'required_review', 'yes' ) == 'yes' ) {\n+\t\t\t$teacher->remove_cap( 'publish_' . $course_cap );\n+\t\t} else {\n+\t\t\t$teacher->add_cap( 'publish_' . $course_cap );\n+\t\t}\n+\n+\t\t$teacher->add_cap( 'read_private_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'delete_published_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'edit_published_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'edit_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'delete_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'publish_' . $lesson_cap );\n+\t\t$teacher->add_cap( 'upload_files' );\n+\t\t$teacher->add_cap( 'read' );\n+\t\t$teacher->add_cap( 'edit_posts' );\n+\t}\n+\n+\t\u002F\u002F administrator\n+\t$admin = get_role( 'administrator' );\n+\tif ( $admin ) {\n+\t\t$admin->add_cap( 'lp_mcp_access' );\n+\n+\t\t$admin->add_cap( 'read_private_' . $course_cap );\n+\t\t$admin->add_cap( 'delete_' . $course_cap );\n+\t\t$admin->add_cap( 'delete_published_' . $course_cap );\n+\t\t$admin->add_cap( 'edit_' . $course_cap );\n+\t\t$admin->add_cap( 'edit_published_' . $course_cap );\n+\t\t$admin->add_cap( 'publish_' . $course_cap );\n+\t\t$admin->add_cap( 'delete_private_' . $course_cap );\n+\t\t$admin->add_cap( 'edit_private_' . $course_cap );\n+\t\t$admin->add_cap( 'delete_others_' . $course_cap );\n+\t\t$admin->add_cap( 'edit_others_' . $course_cap );\n+\n+\t\t$admin->add_cap( 'read_private_' . $lesson_cap );\n+\t\t$admin->add_cap( 'delete_' . $lesson_cap );\n+\t\t$admin->add_cap( 'delete_published_' . $lesson_cap );\n+\t\t$admin->add_cap( 'edit_' . $lesson_cap );\n+\t\t$admin->add_cap( 'edit_published_' . $lesson_cap );\n+\t\t$admin->add_cap( 'publish_' . $lesson_cap );\n+\t\t$admin->add_cap( 'delete_private_' . $lesson_cap );\n+\t\t$admin->add_cap( 'edit_private_' . $lesson_cap );\n+\t\t$admin->add_cap( 'delete_others_' . $lesson_cap );\n+\t\t$admin->add_cap( 'edit_others_' . $lesson_cap );\n+\n+\t\t$admin->add_cap( 'delete_' . $order_cap );\n+\t\t$admin->add_cap( 'delete_published_' . $order_cap );\n+\t\t$admin->add_cap( 'edit_' . $order_cap );\n+\t\t$admin->add_cap( 'edit_published_' . $order_cap );\n+\t\t$admin->add_cap( 'publish_' . $order_cap );\n+\t\t$admin->add_cap( 'delete_private_' . $order_cap );\n+\t\t$admin->add_cap( 'edit_private_' . $order_cap );\n+\t\t$admin->add_cap( 'delete_others_' . $order_cap );\n+\t\t$admin->add_cap( 'edit_others_' . $order_cap );\n+\t}\n+}\n+\n+\u002F**\n+ * Remove capabilities added for MCP integration.\n+ *\n+ * @return void\n+ *\u002F\n+function learn_press_remove_mcp_capabilities() {\n+\n+\t$admin = get_role( 'administrator' );\n+\tif ( $admin ) {\n+\t\t$admin->remove_cap( 'lp_mcp_access' );\n+\t}\n+}\n+\u002F*\n+function learn_press_current_user_is( $check_type = null ) {\n+\tglobal $current_user;\n+\t$user_roles = $current_user->roles;\n+\t$user_type  = '';\n+\n+\tif ( in_array( 'lpr_teacher', $user_roles ) ) {\n+\t\t$user_type = 'instructor';\n+\t} elseif ( in_array( 'lp_teacher', $user_roles ) ) {\n+\t\t$user_type = 'instructor';\n+\t} elseif ( in_array( 'administrator', $user_roles ) ) {\n+\t\t$user_type = 'administrator';\n+\t}\n+\n+\treturn $check_type ? $check_type == $user_type : $user_type;\n+}*\u002F\n+\n+\u002F*\n+function learn_press_user_has_roles( $roles, $user_id = null ) {\n+\t$has_role = false;\n+\tif ( ! $user_id ) {\n+\t\t$user = wp_get_current_user();\n+\t} else {\n+\t\t$user = get_user_by( 'id', $user_id );\n+\t}\n+\t$available_roles = (array) $user->roles;\n+\tif ( is_array( $roles ) ) {\n+\t\tforeach ( $roles as $role ) {\n+\t\t\tif ( in_array( $role, $available_roles ) ) {\n+\t\t\t\t$has_role = true;\n+\t\t\t\tbreak; \u002F\u002F only need one of roles is in available\n+\t\t\t}\n+\t\t}\n+\t} else {\n+\t\tif ( in_array( $roles, $available_roles ) ) {\n+\t\t\t$has_role = true;\n+\t\t}\n+\t}\n+\n+\treturn $has_role;\n+}*\u002F\n+\n+\u002F*\n+function learn_press_current_user_can_view_profile_section( $section, $user ) {\n+\t$current_user = wp_get_current_user();\n+\t$view         = true;\n+\tif ( $user->get_data( 'user_login' ) != $current_user->user_login && $section == LP_Settings::instance()->get(\n+\t\t'profile_endpoints.orders',\n+\t\t'profile-orders'\n+\t) ) {\n+\t\t$view = false;\n+\t}\n+\n+\treturn apply_filters( 'learn_press_current_user_can_view_profile_section', $view, $section, $user );\n+}*\u002F\n+\n+\u002F*\n+function learn_press_profile_tab_quizzes_content( $current, $tab, $user ) {\n+\tlearn_press_get_template(\n+\t\t'profile\u002Ftabs\u002Fquizzes.php',\n+\t\tarray(\n+\t\t\t'user'    => $user,\n+\t\t\t'current' => $current,\n+\t\t\t'tab'     => $tab,\n+\t\t)\n+\t);\n+}*\u002F\n+\n+\u002F*\n+function learn_press_profile_tab_orders_content( $current, $tab, $user ) {\n+\tlearn_press_get_template(\n+\t\t'profile\u002Ftabs\u002Forders.php',\n+\t\tarray(\n+\t\t\t'user'    => $user,\n+\t\t\t'current' => $current,\n+\t\t\t'tab'     => $tab,\n+\t\t)\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * Get queried user in profile link\n+ *\n+ * @return false|WP_User\n+ * @since 3.0.0\n+ * @deprecated 4.2.9.1\n+ *\u002F\n+function learn_press_get_profile_user() {\n+\treturn LP_Profile::instance()->get_user_current();\n+\n+\treturn LP_Profile::get_queried_user();\n+}\n+\n+\n+\u002F**\n+ * Add instructor registration button to register page and admin bar\n+ *\u002F\n+function learn_press_user_become_teacher_registration_form() {\n+\tif ( LP_Settings::instance()->get( 'instructor_registration' ) != 'yes' ) {\n+\t\treturn;\n+\t}\n+\t?>\n+\t\u003Cp>\n+\t\t\u003Clabel for=\"become_teacher\">\n+\t\t\t\u003Cinput type=\"checkbox\" name=\"become_teacher\" id=\"become_teacher\">\n+\t\t\t\u003C?php esc_html_e( 'Want to become an instructor?', 'learnpress' ); ?>\n+\t\t\u003C\u002Flabel>\n+\t\u003C\u002Fp>\n+\t\u003C?php\n+}\n+\n+add_action( 'register_form', 'learn_press_user_become_teacher_registration_form' );\n+\n+\u002F**\n+ * Update data into table learnpress_user_items.\n+ *\n+ * @param array $fields - Fields and values to be updated.\n+ *                                              Format: array(\n+ *                                              field_name_1 => value 1,\n+ *                                              field_name_2 => value 2,\n+ *                                              ....\n+ *                                              field_name_n => value n\n+ *                                              )\n+ * @param mixed $where - Optional. Fields with values for conditional update with the same format of $fields.\n+ * @param bool $update_cache - Optional. Should be update to cache or not (since 3.0.0).\n+ * @param bool $update_extra_fields_as_meta - Optional. Update extra fields as item meta (since 3.1.0).\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_update_user_item_field( array $fields = array(), $where = false, $update_cache = true, $update_extra_fields_as_meta = false ) {\n+\tglobal $wpdb;\n+\n+\t\u002F\u002F Table fields format.\n+\t$table_fields = array(\n+\t\t'user_item_id' => '%d',\n+\t\t'user_id'      => '%d',\n+\t\t'item_id'      => '%d',\n+\t\t'ref_id'       => '%d',\n+\t\t'start_time'   => '%s',\n+\t\t'end_time'     => '%s',\n+\t\t'access_level' => '%d',\n+\t\t'graduation'   => '%s',\n+\t\t'item_type'    => '%s',\n+\t\t'status'       => '%s',\n+\t\t'ref_type'     => '%s',\n+\t\t'parent_id'    => '%d',\n+\t);\n+\n+\t\u002F**\n+\t * Validate item status\n+\t *\u002F\n+\tif ( ! empty( $fields['item_id'] ) && ! empty( $fields['status'] ) ) {\n+\t\t$item_type = learn_press_get_post_type( $fields['item_id'] );\n+\n+\t\tif ( LP_COURSE_CPT === $item_type ) {\n+\t\t\tif ( 'completed' === $fields['status'] ) {\n+\t\t\t\t$fields['status'] = 'finished';\n+\t\t\t}\n+\t\t} elseif ( 'finished' === $fields['status'] ) {\n+\t\t\t\t$fields['status'] = 'completed';\n+\t\t}\n+\t}\n+\n+\t$data        = array();\n+\t$data_format = array();\n+\tforeach ( $fields as $field => $value ) {\n+\t\tif ( ! empty( $table_fields[ $field ] ) ) {\n+\t\t\t$data[ $field ] = $value;\n+\n+\t\t\t\u002F\u002F Do not format the date-time field if it's value is NULL\n+\t\t\tif ( in_array( $field, array( 'start_time', 'end_time' ) ) && empty( $value ) ) {\n+\t\t\t\t$data[ $field ] = null;\n+\t\t\t\t$data_format[]  = '';\n+\t\t\t} else {\n+\t\t\t\tif ( $value instanceof LP_Datetime ) {\n+\t\t\t\t\t$data[ $field ] = $value->toSql();\n+\t\t\t\t}\n+\t\t\t\t$data_format[] = $table_fields[ $field ];\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tif ( ! empty( $fields['user_item_id'] ) ) {\n+\t\t$where = wp_parse_args(\n+\t\t\t$where,\n+\t\t\tarray( 'user_item_id' => $fields['user_item_id'] )\n+\t\t);\n+\t}\n+\n+\t\u002F\u002F Set where and where format\n+\t$where_format = array();\n+\tif ( is_array( $where ) && ! empty( $where ) ) {\n+\t\tif ( empty( $where['user_id'] ) ) {\n+\t\t\t$where['user_id'] = ! empty( $fields['user_id'] ) ? $fields['user_id'] : learn_press_get_current_user_id();\n+\t\t}\n+\n+\t\tforeach ( $where as $field => $value ) {\n+\t\t\tif ( isset( $table_fields[ $field ] ) ) {\n+\t\t\t\t$where_format[] = $table_fields[ $field ];\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\tif ( ! $data ) {\n+\t\treturn false;\n+\t}\n+\n+\t$inserted = false;\n+\t$updated  = false;\n+\n+\t\u002F\u002F Update to database.\n+\tif ( $where ) {\n+\t\t$updated = $wpdb->update(\n+\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t$data,\n+\t\t\t$where,\n+\t\t\t$data_format,\n+\t\t\t$where_format\n+\t\t);\n+\t} else {\n+\t\t\u002F\u002F Insert to database.\n+\t\tif ( $wpdb->insert(\n+\t\t\t$wpdb->learnpress_user_items,\n+\t\t\t$data,\n+\t\t\t$data_format\n+\t\t) ) {\n+\t\t\t$inserted = $wpdb->insert_id;\n+\t\t}\n+\t}\n+\n+\tif ( $updated && ! empty( $where['user_item_id'] ) ) {\n+\t\t$inserted = $where['user_item_id'];\n+\t}\n+\n+\t\u002F**\n+\t * @var object|bool $updated_item\n+\t *\u002F\n+\t$updated_item = false;\n+\n+\t\u002F\u002F Get the item we just have updated or inserted.\n+\tif ( $inserted ) {\n+\t\t$updated_item = learn_press_get_user_item( $inserted );\n+\t} elseif ( $updated ) {\n+\t\t$updated_item = learn_press_get_user_item( $where );\n+\t}\n+\n+\t\u002F\u002F Clear caches.\n+\tif ( $updated_item ) {\n+\t\t\u002F\u002F Clear cache total students enrolled.\n+\t\tif ( isset( $updated_item->item_type )\n+\t\t\t&& LP_COURSE_CPT === $updated_item->item_type\n+\t\t\t&& isset( $updated_item->item_id ) ) {\n+\t\t\t$lp_course_cache = new LP_Course_Cache( true );\n+\t\t\t$lp_course_cache->clean_total_students_enrolled( $updated_item->item_id );\n+\t\t\t$lp_course_cache->clean_total_students_enrolled_or_purchased( $updated_item->item_id );\n+\t\t\t\u002F\u002F Clear cache count students many courses.\n+\t\t\t$lp_courses_cache = new LP_Courses_Cache( true );\n+\t\t\t$lp_courses_cache->clear_cache_on_group( LP_Courses_Cache::KEYS_COUNT_STUDENT_COURSES );\n+\t\t}\n+\t\t\u002F\u002F Clear cache user item.\n+\t\t$lp_user_items_cache = new LP_User_Items_Cache();\n+\t\t$lp_user_items_cache->clean_user_item(\n+\t\t\tarray(\n+\t\t\t\t$updated_item->user_id,\n+\t\t\t\t$updated_item->item_id,\n+\t\t\t\t$updated_item->item_type,\n+\t\t\t)\n+\t\t);\n+\t\t\u002F\u002F Clear cache userItemModel\n+\t\t$userItemModel = UserItemModel::find_user_item(\n+\t\t\t$updated_item->user_id,\n+\t\t\t$updated_item->item_id,\n+\t\t\t$updated_item->item_type,\n+\t\t\t$updated_item->ref_id,\n+\t\t\t$updated_item->ref_type,\n+\t\t\ttrue\n+\t\t);\n+\t\t$userItemModel->clean_caches();\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fupdated-user-item-field', $updated_item );\n+\n+\t\u002F**\n+\t * If there is some fields does not contain in the main table\n+\t * then consider update them as metadata.\n+\t *\n+\t * @comment by tungnx - 4.1.7.3\n+\t *\u002F\n+\t\u002F*\n+\tif ( $updated_item && $update_extra_fields_as_meta ) {\n+\t\t$extra_fields = array_diff_key( $fields, $table_fields );\n+\t\tif ( $extra_fields ) {\n+\t\t\tforeach ( $extra_fields as $meta_key => $meta_value ) {\n+\t\t\t\tif ( $meta_value == 'user_item_id' ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $meta_value === false ) {\n+\t\t\t\t\tlearn_press_delete_user_item_meta( $updated_item->user_item_id, $meta_key );\n+\t\t\t\t} else {\n+\n+\t\t\t\t\tif ( empty( $meta_value ) ) {\n+\t\t\t\t\t\t$meta_value = '';\n+\t\t\t\t\t}\n+\t\t\t\t\tlearn_press_update_user_item_meta( $updated_item->user_item_id, $meta_key, $meta_value );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}*\u002F\n+\n+\t\u002F\u002F do_action( 'learn-press\u002Fupdated-user-item-meta', $updated_item );\n+\n+\treturn $updated_item;\n+}\n+\n+\u002F**\n+ * Get user item row(s) from user items table by multiple WHERE conditional\n+ *\n+ * @param array|int $where\n+ * @param bool $single\n+ *\n+ * @return array\n+ *\u002F\n+function learn_press_get_user_item( $where, $single = true ) {\n+\tglobal $wpdb;\n+\n+\t\u002F\u002F Table fields\n+\t$table_fields = array(\n+\t\t'user_item_id' => '%d',\n+\t\t'user_id'      => '%d',\n+\t\t'item_id'      => '%d',\n+\t\t'ref_id'       => '%d',\n+\t\t'start_time'   => '%s',\n+\t\t'end_time'     => '%s',\n+\t\t'item_type'    => '%s',\n+\t\t'status'       => '%s',\n+\t\t'ref_type'     => '%s',\n+\t\t'parent_id'    => '%d',\n+\t);\n+\n+\t\u002F\u002F If $where is a number consider we are searching the record with unique user_item_id\n+\tif ( is_numeric( $where ) ) {\n+\t\t$where = array( 'user_item_id' => $where );\n+\t}\n+\n+\t$where_str = array();\n+\tforeach ( $where as $field => $value ) {\n+\t\tif ( ! empty( $table_fields[ $field ] ) ) {\n+\t\t\t$where_str[] = \"{$field} = \" . $table_fields[ $field ];\n+\t\t}\n+\t}\n+\t$item = false;\n+\n+\tif ( $where_str ) {\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->prefix}learnpress_user_items\n+\t\t\tWHERE \" . join( ' AND ', $where_str ) . '\n+\t\t\tORDER BY user_item_id DESC\n+\t\t\t',\n+\t\t\t$where\n+\t\t);\n+\t\tif ( $single || ! empty( $where['user_item_id'] ) ) {\n+\t\t\t$item = $wpdb->get_row( $query );\n+\t\t} else {\n+\t\t\t$item = $wpdb->get_results( $query );\n+\t\t}\n+\t}\n+\n+\treturn $item;\n+}\n+\n+\u002F**\n+ * Get user item meta from user_itemmeta table\n+ *\n+ * @param int $user_item_id .\n+ * @param string $meta_key .\n+ * @param bool $single .\n+ *\n+ * @return mixed\n+ *\u002F\n+function learn_press_get_user_item_meta( $user_item_id = 0, $meta_key = '', $single = true ) {\n+\t$meta = false;\n+\tif ( metadata_exists( 'learnpress_user_item', $user_item_id, $meta_key ) ) {\n+\t\t$meta = get_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $single );\n+\t}\n+\n+\treturn $meta;\n+}\n+\n+\u002F**\n+ * Add user item meta into table user_itemmeta\n+ *\n+ * @param int $user_item_id\n+ * @param string $meta_key\n+ * @param mixed $meta_value\n+ * @param string $prev_value\n+ *\n+ * @return false|int\n+ *\u002F\n+function learn_press_add_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn add_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+\u002F**\n+ * Update user item meta to table user_itemmeta\n+ *\n+ * @param int $user_item_id\n+ * @param string $meta_key\n+ * @param mixed $meta_value\n+ * @param string $prev_value\n+ *\n+ * @return bool|int\n+ *\u002F\n+function learn_press_update_user_item_meta( $user_item_id, $meta_key, $meta_value, $prev_value = '' ) {\n+\treturn update_metadata( 'learnpress_user_item', $user_item_id, $meta_key, $meta_value, $prev_value );\n+}\n+\n+\n+\u002F**\n+ * Update user item meta to table user_itemmeta\n+ *\n+ * @param int $object_id\n+ * @param string $meta_key\n+ * @param mixed $meta_value\n+ * @param bool $delete_all\n+ *\n+ * @return bool|int\n+ *\u002F\n+function learn_press_delete_user_item_meta( $object_id, $meta_key, $meta_value = '', $delete_all = false ) {\n+\treturn delete_metadata( 'learnpress_user_item', $object_id, $meta_key, $meta_value, $delete_all );\n+}\n+\n+if ( ! function_exists( 'learn_press_pre_get_avatar_callback' ) ) {\n+\t\u002F**\n+\t * Filter the avatar\n+\t *\n+\t * @param string $avatar\n+\t * @param string $id_or_email\n+\t * @param array  $args\n+\t *\n+\t * @return string\n+\t * @since 1.0.0\n+\t * @version 1.0.2\n+\t *\u002F\n+\tfunction learn_press_pre_get_avatar_callback( $avatar, $id_or_email = '', $args = array() ) {\n+\t\ttry {\n+\t\t\tif ( ( isset( $args['gravatar'] ) && $args['gravatar'] ) || ( $args['default'] && $args['force_default'] ) ) {\n+\t\t\t\treturn $avatar;\n+\t\t\t}\n+\n+\t\t\t$user_id = 0;\n+\n+\t\t\t\u002F**\n+\t\t\t * Get the ID of user from $id_or_email\n+\t\t\t *\u002F\n+\t\t\tif ( ! is_numeric( $id_or_email ) && is_string( $id_or_email ) ) {\n+\t\t\t\t$user = get_user_by( 'email', $id_or_email );\n+\t\t\t\tif ( $user ) {\n+\t\t\t\t\t$user_id = $user->ID;\n+\t\t\t\t}\n+\t\t\t} elseif ( is_numeric( $id_or_email ) ) {\n+\t\t\t\t$user_id = $id_or_email;\n+\t\t\t} elseif ( is_object( $id_or_email ) && isset( $id_or_email->user_id ) && $id_or_email->user_id ) {\n+\t\t\t\t$user_id = $id_or_email->user_id;\n+\t\t\t} elseif ( $id_or_email instanceof WP_Comment ) {\n+\t\t\t\t$user = get_user_by( 'email', $id_or_email->comment_author_email );\n+\t\t\t\tif ( $user ) {\n+\t\t\t\t\t$user_id = $user->ID;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( ! $user_id ) {\n+\t\t\t\treturn $avatar;\n+\t\t\t}\n+\n+\t\t\t$user = UserModel::find( $user_id, true );\n+\t\t\tif ( ! $user ) {\n+\t\t\t\treturn $avatar;\n+\t\t\t}\n+\n+\t\t\t$class = array( 'avatar', 'avatar-' . (int) $args['size'], 'photo' );\n+\t\t\tif ( $args['class'] ) {\n+\t\t\t\tif ( is_array( $args['class'] ) ) {\n+\t\t\t\t\t$class = array_merge( $class, $args['class'] );\n+\t\t\t\t} else {\n+\t\t\t\t\t$class[] = $args['class'];\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$avatar_url = $user->get_avatar_url();\n+\t\t\t$html_img   = sprintf(\n+\t\t\t\t\"\u003Cimg src='%s' srcset='%s' class='%s' height='%d' width='%d' decoding='async'\u002F>\",\n+\t\t\t\tesc_url( $avatar_url ),\n+\t\t\t\tesc_url( $avatar_url ) . ' 2x',\n+\t\t\t\tesc_attr( implode( ' ', $class ) ),\n+\t\t\t\t(int) $args['height'],\n+\t\t\t\t(int) $args['width']\n+\t\t\t);\n+\n+\t\t\treturn $html_img;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\n+\t\t\treturn $avatar;\n+\t\t}\n+\t}\n+}\n+add_filter( 'pre_get_avatar', 'learn_press_pre_get_avatar_callback', 999, 3 );\n+\n+\n+function learn_press_user_profile_picture_upload_dir( $width_user = true ) {\n+\t$upload_dir = wp_upload_dir();\n+\t$subdir     = apply_filters( 'learn_press_user_profile_folder', 'learn-press-profile', $width_user );\n+\tif ( $width_user ) {\n+\t\t$subdir .= '\u002F' . get_current_user_id();\n+\t}\n+\t$subdir = '\u002F' . $subdir;\n+\n+\tif ( ! empty( $upload_dir['subdir'] ) ) {\n+\t\t$u_subdir = str_replace( '\\\\', '\u002F', $upload_dir['subdir'] );\n+\t\t$u_path   = str_replace( '\\\\', '\u002F', $upload_dir['path'] );\n+\n+\t\t$upload_dir['path'] = str_replace( $u_subdir, $subdir, $u_path );\n+\t\t$upload_dir['url']  = str_replace( $u_subdir, $subdir, $upload_dir['url'] );\n+\t} else {\n+\t\t$upload_dir['path'] = $upload_dir['path'] . $subdir;\n+\t\t$upload_dir['url']  = $upload_dir['url'] . $subdir;\n+\t}\n+\n+\t$upload_dir['subdir'] = $subdir;\n+\n+\t\u002F\u002F Point path\u002Furl to main site if we are in multisite\n+\tif ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) {\n+\t\tforeach ( array( 'path', 'url', 'basedir', 'baseurl' ) as $v ) {\n+\t\t\t$upload_dir[ $v ] = str_replace( '\u002Fsites\u002F' . get_current_blog_id(), '', $upload_dir[ $v ] );\n+\t\t}\n+\t}\n+\n+\treturn $upload_dir;\n+}\n+\n+\u002F*\n+add_action( 'learn_press_before_purchase_course_handler', '_learn_press_before_purchase_course_handler', 10, 2 );\n+function _learn_press_before_purchase_course_handler( $course_id, $cart ) {\n+\t\u002F\u002F Redirect to login page if user is not logged in\n+\tif ( ! is_user_logged_in() ) {\n+\t\t$return_url = esc_url_raw( add_query_arg( $_POST, get_the_permalink( $course_id ) ) );\n+\t\t$return_url = apply_filters( 'learn_press_purchase_course_login_redirect_return_url', $return_url );\n+\t\t$redirect   = apply_filters(\n+\t\t\t'learn_press_purchase_course_login_redirect',\n+\t\t\tlearn_press_get_login_url( $return_url )\n+\t\t);\n+\t\tif ( $redirect !== false ) {\n+\t\t\tlearn_press_add_message( __( 'Please log in to enroll in this course', 'learnpress' ) );\n+\n+\t\t\tif ( learn_press_is_ajax() ) {\n+\t\t\t\tlearn_press_send_json(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'redirect' => $redirect,\n+\t\t\t\t\t\t'result'   => 'success',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\twp_redirect( $redirect );\n+\t\t\t\texit();\n+\t\t\t}\n+\t\t}\n+\t} else {\n+\t\t$user     = learn_press_get_current_user();\n+\t\t$redirect = false;\n+\t\tif ( $user->has_finished_course( $course_id ) ) {\n+\t\t\tlearn_press_add_message( __( 'You have already finished the course', 'learnpress' ) );\n+\t\t\t$redirect = true;\n+\t\t} elseif ( $user->has_purchased_course( $course_id ) ) {\n+\t\t\tlearn_press_add_message( __( 'You have already enrolled in this course', 'learnpress' ) );\n+\t\t\t$redirect = true;\n+\t\t}\n+\t\tif ( $redirect ) {\n+\t\t\twp_redirect( get_the_permalink( $course_id ) );\n+\t\t\texit();\n+\t\t}\n+\t}\n+}*\u002F\n+\n+\u002F*\n+function learn_press_user_is( $role, $user_id = 0 ) {\n+\tif ( ! $user_id ) {\n+\t\t$user = learn_press_get_current_user();\n+\t} else {\n+\t\t$user = learn_press_get_user( $user_id );\n+\t}\n+\tif ( $role == 'admin' ) {\n+\t\treturn $user->is_admin();\n+\t}\n+\tif ( $role == 'instructor' ) {\n+\t\treturn $user->is_instructor();\n+\t}\n+\n+\treturn $role;\n+}*\u002F\n+\n+\u002F*\n+function learn_press_profile_tab_edit_content( $current, $tab, $user ) {\n+\tlearn_press_get_template(\n+\t\t'profile\u002Ftabs\u002Fedit.php',\n+\t\tarray(\n+\t\t\t'user'    => $user,\n+\t\t\t'current' => $current,\n+\t\t\t'tab'     => $tab,\n+\t\t)\n+\t);\n+}*\u002F\n+\n+\u002F*\n+function learn_press_update_user_option( $name, $value, $id = 0 ) {\n+\tif ( ! $id ) {\n+\t\t$id = get_current_user_id();\n+\t}\n+\t$key              = 'learnpress_user_options';\n+\t$options          = get_user_option( $key, $id );\n+\t$options[ $name ] = $value;\n+\tupdate_user_option( $id, $key, $options, true );\n+}*\u002F\n+\n+\u002F*\n+function learn_press_delete_user_option( $name, $id = 0 ) {\n+\tif ( ! $id ) {\n+\t\t$id = get_current_user_id();\n+\t}\n+\t$key     = 'learnpress_user_options';\n+\t$options = get_user_option( $key, $id );\n+\tif ( is_array( $options ) && array_key_exists( $name, $options ) ) {\n+\t\tunset( $options[ $name ] );\n+\t\tupdate_user_option( $id, $key, $options, true );\n+\n+\t\treturn true;\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F*\n+function learn_press_get_user_option( $name, $id = 0 ) {\n+\tif ( ! $id ) {\n+\t\t$id = get_current_user_id();\n+\t}\n+\t$key     = 'learnpress_user_options';\n+\t$options = get_user_option( $key, $id );\n+\tif ( is_array( $options ) && array_key_exists( $name, $options ) ) {\n+\t\treturn $options[ $name ];\n+\t}\n+\n+\treturn false;\n+}*\u002F\n+\n+\u002F**\n+ * Update user basic information.\n+ *\n+ * @param bool $wp_error - Optional. Return WP_Error object in case updating failed.\n+ *\n+ * @return bool|mixed|WP_Error\n+ *\u002F\n+function learn_press_update_user_profile_basic_information( $wp_error = false ) {\n+\t$user_id = get_current_user_id();\n+\n+\tif ( ! $user_id ) {\n+\t\treturn new WP_Error( 2, 'The user is invalid' );\n+\t}\n+\n+\t$update_data = array(\n+\t\t'ID'           => $user_id,\n+\t\t'first_name'   => LP_Request::get_param( 'first_name' ),\n+\t\t'last_name'    => LP_Request::get_param( 'last_name' ),\n+\t\t'description'  => LP_Request::get_param( 'description', '', 'html' ),\n+\t\t'display_name' => LP_Request::get_param( 'account_display_name' ),\n+\t\t'user_email'   => LP_Request::get_param( 'account_email' ),\n+\t);\n+\n+\t$update_data = apply_filters( 'learn-press\u002Fupdate-profile-basic-information-data', $update_data );\n+\t$update_meta = LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register'] ?? '' );\n+\n+\t$return = LP_Forms_Handler::update_user_data( $update_data, $update_meta );\n+\n+\t\u002F\u002F Update for social.\n+\t$socials    = LP_Request::get_param( 'user_profile_social' );\n+\t$extra_data = get_user_meta( $user_id, '_lp_extra_info', true );\n+\n+\tif ( ! empty( $extra_data ) ) {\n+\t\t$socials = array_merge( $extra_data, $socials );\n+\t}\n+\n+\tupdate_user_meta( $user_id, '_lp_extra_info', $socials );\n+\n+\tif ( is_wp_error( $return ) ) {\n+\t\treturn $wp_error ? $return : false;\n+\t}\n+\n+\treturn $return;\n+}\n+\n+\u002F**\n+ * Update new password.\n+ *\n+ * @version 1.0.1\n+ *\u002F\n+function learn_press_update_user_profile_change_password() {\n+\ttry {\n+\t\t$user = wp_get_current_user();\n+\t\tif ( ! $user ) {\n+\t\t\tthrow new Exception( 'error_lp_profile_update_pass', 'The user is invalid' );\n+\t\t}\n+\n+\t\t$old_pass = LP_Request::get_param( 'pass0', '', 'text', 'post' );\n+\t\tif ( empty( $old_pass ) ) {\n+\t\t\tthrow new Exception( __( 'Enter the old password!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$check_old_pass = wp_check_password( $old_pass, $user->data->user_pass, $user->ID );\n+\t\tif ( ! $check_old_pass ) {\n+\t\t\tthrow new Exception( __( 'The old password is incorrect!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$new_pass         = LP_Request::get_param( 'pass1', '', 'text', 'post' );\n+\t\t$new_pass_confirm = LP_Request::get_param( 'pass2', '', 'text', 'post' );\n+\t\tif ( empty( $new_pass ) || empty( $new_pass_confirm )\n+\t\t\t|| $new_pass != $new_pass_confirm ) {\n+\t\t\tthrow new Exception( __( 'Incorrect confirmation password!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t\u002F\u002F Update user password\n+\t\t\u002F\u002F wp_set_password( $new_pass, $user->ID );\n+\t\t$update_data = array(\n+\t\t\t'user_pass' => $new_pass,\n+\t\t\t'ID'        => $user->ID,\n+\t\t);\n+\n+\t\t$rs = wp_update_user( $update_data );\n+\t\tif ( is_wp_error( $rs ) ) {\n+\t\t\tthrow new Exception( $rs->get_error_message() );\n+\t\t}\n+\t} catch ( Exception $ex ) {\n+\t\treturn new WP_Error( 'error_lp_profile_update_pass', $ex->getMessage() );\n+\t}\n+\n+\treturn true;\n+}\n+\n+function learn_press_get_avatar_thumb_size() {\n+\t$option = LP_Settings::get_option(\n+\t\t'avatar_dimensions',\n+\t\tarray(\n+\t\t\t'width'  => 250,\n+\t\t\t'height' => 250,\n+\t\t)\n+\t);\n+\n+\tif ( ! isset( $option['width'] ) || ! isset( $option['height'] ) ) {\n+\t\t$option = array(\n+\t\t\t'width'  => 250,\n+\t\t\t'height' => 250,\n+\t\t);\n+\t}\n+\n+\t\u002F\u002F For option get_avatar_url\n+\t$option['size'] = $option['width'];\n+\n+\treturn $option;\n+}\n+\n+function learn_press_get_course_thumbnail_dimensions() {\n+\t$option = LP_Settings::get_option(\n+\t\t'course_thumbnail_dimensions',\n+\t\tarray(\n+\t\t\t'width'  => 500,\n+\t\t\t'height' => 300,\n+\t\t)\n+\t);\n+\n+\tif ( ! isset( $option['width'] ) || ! isset( $option['height'] ) ) {\n+\t\t$option = array(\n+\t\t\t'width'  => 500,\n+\t\t\t'height' => 300,\n+\t\t);\n+\t}\n+\n+\treturn $option;\n+}\n+\n+\u002F*\n+function learn_press_get_user_avatar( $user_id = 0, $size = '' ) {\n+\t$user = learn_press_get_user( $user_id );\n+\n+\treturn $user->get_profile_picture( '', $size );\n+}*\u002F\n+\n+\u002F**\n+ * Get profile instance for an user to view.\n+ *\n+ * @param int $for_user\n+ *\n+ * @return LP_Profile|WP_Error\n+ *\u002F\n+function learn_press_get_profile( $for_user = 0 ) {\n+\treturn LP_Profile::instance( $for_user );\n+}\n+\n+\u002F*\n+function learn_press_remove_user_items( $user_id, $item_id, $course_id, $include_course = false ) {\n+\tglobal $wpdb;\n+\n+\tsettype( $item_id, 'array' );\n+\n+\t$format = array_fill( 0, sizeof( $item_id ), '%d' );\n+\t$where  = '';\n+\n+\t$args = array( $user_id );\n+\t$args = array_merge( $args, $item_id );\n+\n+\tif ( $course_id ) {\n+\t\t$args[] = $course_id;\n+\t\t$where  = 'AND ref_id = %d';\n+\t}\n+\n+\tif ( $include_course ) {\n+\t\t$where .= ' OR ( item_id = %d AND item_type = %s )';\n+\t\t$args[] = $course_id;\n+\t\t$args[] = LP_COURSE_CPT;\n+\t}\n+\n+\t$query = $wpdb->prepare(\n+\t\t\"\n+\t\tDELETE\n+\t\tFROM {$wpdb->learnpress_user_items}\n+\t\tWHERE user_id = %d\n+\t\tAND ( item_id IN(\" . join( ',', $format ) . \")\n+\t\t$where )\n+\t\",\n+\t\t$args\n+\t);\n+}*\u002F\n+\n+\u002F**\n+ * Get user profile link\n+ *\n+ * @param int $user_id\n+ * @param null $tab\n+ *\n+ * @return mixed|string\n+ *\u002F\n+function learn_press_user_profile_link( $user_id = 0, $tab = '' ) {\n+\tif ( ! $user_id ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\n+\t$user = learn_press_get_user( $user_id );\n+\n+\tif ( ! $user ) {\n+\t\treturn '';\n+\t}\n+\n+\tglobal $wp_query;\n+\t$wp_user = get_userdata( $user_id );\n+\tif ( ! $wp_user instanceof WP_User ) {\n+\t\treturn '';\n+\t}\n+\n+\t$user_model = new UserModel( $wp_user->data );\n+\t$args       = array(\n+\t\t'user' => $user_model->get_slug_link(),\n+\t);\n+\n+\tif ( $tab ) {\n+\t\t$args['tab'] = $tab;\n+\t}\n+\n+\t\u002F**\n+\t * If no tab is selected in profile and is current user\n+\t * then no need the username in profile link.\n+\t *\u002F\n+\tif ( ( $user_id == get_current_user_id() ) && ! isset( $args['tab'] ) ) {\n+\t\t\u002F\u002Funset( $args['user'] );\n+\t}\n+\n+\t$profile_link = trailingslashit( learn_press_get_page_link( 'profile' ) );\n+\tif ( $profile_link ) {\n+\t\tif ( get_option( 'permalink_structure' ) ) {\n+\t\t\t$url = trailingslashit( $profile_link . join( '\u002F', array_values( $args ) ) );\n+\t\t} else {\n+\t\t\t$url = esc_url_raw( add_query_arg( $args, $profile_link ) );\n+\t\t}\n+\t} else {\n+\t\t$url = get_author_posts_url( $user_id );\n+\t}\n+\n+\treturn apply_filters( 'learn_press_user_profile_link', $url, $user_id, $tab );\n+}\n+\n+\u002F*\n+function learn_press_create_user_item( $args = array(), $wp_error = false ) {\n+\tglobal $wpdb;\n+\n+\t$defaults = array(\n+\t\t'user_id'     => get_current_user_id(),\n+\t\t'item_id'     => '',\n+\t\t'start_time'  => time(),\n+\t\t'end_time'    => '',\n+\t\t'graduation'  => '',\n+\t\t'item_type'   => '',\n+\t\t'status'      => '',\n+\t\t'ref_id'      => 0,\n+\t\t'ref_type'    => '',\n+\t\t'parent_id'   => 0,\n+\t\t'create_meta' => array(),\n+\t);\n+\n+\t$item_data = wp_parse_args( $args, $defaults );\n+\n+\t\u002F\u002F Validate item_id and post type\n+\tif ( empty( $item_data['item_id'] ) ) {\n+\t\tif ( $wp_error ) {\n+\t\t\treturn new WP_Error( 'invalid_item_id', __( 'Invalid item id.', 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\t$post_type = learn_press_get_post_type( $item_data['item_id'] );\n+\tif ( empty( $item_data['item_type'] ) && $post_type ) {\n+\t\t$item_data['item_type'] = $post_type;\n+\t}\n+\n+\t\u002F\u002F Get id and type of ref if they are null\n+\tif ( ! empty( $item_data['parent_id'] ) && ( empty( $item_data['ref_id'] ) || ( empty( $item_data['ref_type'] ) ) ) ) {\n+\t\t$parent = $wpdb->get_row(\n+\t\t\t$wpdb->prepare(\n+\t\t\t\t\"SELECT * FROM {$wpdb->learnpress_user_items} WHERE %d\",\n+\t\t\t\t$item_data['parent_id']\n+\t\t\t)\n+\t\t);\n+\n+\t\tif ( $parent ) {\n+\t\t\tif ( empty( $item_data['ref_id'] ) ) {\n+\t\t\t\t$item_data['ref_id'] = $parent->item_id;\n+\t\t\t}\n+\n+\t\t\tif ( empty( $item_data['ref_type'] ) ) {\n+\t\t\t\t$item_data['ref_type'] = $parent->item_type;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F\u002F Filter\n+\t$item_data = apply_filters( 'learn-press\u002Fcreate-user-item-data', $item_data );\n+\tif ( ! $item_data ) {\n+\t\tif ( $wp_error ) {\n+\t\t\treturn new WP_Error( 'invalid_item_data', __( 'Invalid item data.', 'learnpress' ) );\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fbefore-create-user-item', $item_data );\n+\n+\t$create_meta = ! empty( $item_data['create_meta'] ) ? $item_data['create_meta'] : false;\n+\n+\tif ( $create_meta ) {\n+\t\tunset( $item_data['create_meta'] );\n+\t}\n+\n+\t$user_item = new LP_User_Item( $item_data );\n+\t$result    = $user_item->update();\n+\tif ( ! $result || is_wp_error( $result ) ) {\n+\t\tif ( $wp_error && is_wp_error( $result ) ) {\n+\t\t\treturn $result;\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fcreated-user-item', $user_item, $item_data );\n+\n+\t$create_meta = apply_filters( 'learn-press\u002Fcreate-user-item-meta', $create_meta, $item_data );\n+\tif ( ! $create_meta ) {\n+\t\treturn $user_item;\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fbefore-create-user-item-meta', $create_meta );\n+\n+\tforeach ( $create_meta as $key => $value ) {\n+\t\tlearn_press_update_user_item_meta( $user_item->get_user_item_id(), $key, $value );\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fcreated-user-item-meta', $user_item, $create_meta );\n+\n+\treturn $user_item;\n+}*\u002F\n+\n+\u002F*\n+function learn_press_isset_user_item_for_quiz( $quiz_id, $course_id ) {\n+\tglobal $wpdb;\n+\n+\t$query = $wpdb->prepare( \"SELECT user_item_id FROM $wpdb->learnpress_user_items WHERE ref_id=%d AND item_id=%d\", $course_id, $quiz_id );\n+\t$col   = $wpdb->get_col( $query );\n+\n+\tif ( ! empty( $col ) ) {\n+\t\treturn $col;\n+\t} else {\n+\t\treturn false;\n+\t}\n+}*\u002F\n+\n+\u002F**\n+ * Prepares list of questions for rest api.\n+ *\n+ * @param int[] $question_ids\n+ * @param array $args\n+ *\n+ * @return array\n+ * @since 3.3.0\n+ *\u002F\n+function learn_press_rest_prepare_user_questions( array $question_ids = array(), array $args = array() ): array {\n+\tif ( is_numeric( $args ) ) {\n+\n+\t} else {\n+\t\t$args = wp_parse_args(\n+\t\t\t$args,\n+\t\t\tarray(\n+\t\t\t\t'instant_hint'        => true,\n+\t\t\t\t'instant_check'       => true,\n+\t\t\t\t'quiz_status'         => '',\n+\t\t\t\t'checked_questions'   => array(),\n+\t\t\t\t'hinted_questions'    => array(),\n+\t\t\t\t'answered'            => array(),\n+\t\t\t\t'show_correct_review' => true,\n+\t\t\t)\n+\t\t);\n+\t}\n+\n+\t$checkedQuestions = $args['checked_questions'];\n+\t$hintedQuestions  = $args['hinted_questions'];\n+\t$instantHint      = $args['instant_hint'];\n+\t$instantCheck     = $args['instant_check'];\n+\t$quizStatus       = $args['quiz_status'];\n+\t$answered         = $args['answered'];\n+\t$status           = $args['status'] ?? '';\n+\t$questions        = array();\n+\n+\tif ( $question_ids ) {\n+\t\tforeach ( $question_ids as $id ) {\n+\t\t\t$question       = learn_press_get_question( $id );\n+\t\t\t$hasHint        = false;\n+\t\t\t$hasExplanation = false;\n+\t\t\t$canCheck       = false;\n+\t\t\t$hinted         = false;\n+\t\t\t$checked        = false;\n+\t\t\t$theHint        = $question->get_hint();\n+\t\t\t$theExplanation = '';\n+\n+\t\t\tif ( $instantCheck || $status == 'completed' ) {\n+\t\t\t\t$theExplanation = $question->get_explanation();\n+\t\t\t\t$checked        = in_array( $id, $checkedQuestions );\n+\t\t\t\t$hasExplanation = (bool) $theExplanation;\n+\t\t\t}\n+\n+\t\t\t$mark = $question->get_mark() ? $question->get_mark() : 1;\n+\n+\t\t\t$questionData = array(\n+\t\t\t\t'object' => $question,\n+\t\t\t\t'id'     => absint( $id ),\n+\t\t\t\t'title'  => $question->get_title(),\n+\t\t\t\t'type'   => $question->get_type(),\n+\t\t\t\t'point'  => $mark,\n+\t\t\t);\n+\n+\t\t\t$content = $question->get_content();\n+\t\t\tif ( $content ) {\n+\t\t\t\t$questionData['content'] = $content;\n+\t\t\t}\n+\n+\t\t\tif ( $theHint ) {\n+\t\t\t\t$questionData['hint'] = $theHint;\n+\t\t\t}\n+\n+\t\t\tif ( $status == 'completed' || ( $checked && $theExplanation ) ) {\n+\t\t\t\t$questionData['explanation'] = $theExplanation;\n+\t\t\t}\n+\n+\t\t\tif ( $hasExplanation ) {\n+\t\t\t\t$questionData['has_explanation'] = $hasExplanation;\n+\n+\t\t\t\tif ( $checked ) {\n+\t\t\t\t\t$questionData['explanation'] = $theExplanation;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$with_true_or_false = ( $checked || ( $quizStatus == 'completed' && $args['show_correct_review'] ) );\n+\n+\t\t\t\u002F\u002F if ( $question->is_support( 'answer-options' ) ) {\n+\t\t\t$questionData['options'] = learn_press_get_question_options_for_js(\n+\t\t\t\t$question,\n+\t\t\t\tarray(\n+\t\t\t\t\t'include_is_true' => $with_true_or_false,\n+\t\t\t\t\t'answer'          => $answered[ $id ]['answered'] ?? '',\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t\u002F\u002F }\n+\n+\t\t\t$questions[] = $questionData;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Remove answered\n+\t\t *\u002F\n+\t\tif ( $quizStatus !== 'completed' ) {\n+\t\t\tif ( $checkedQuestions && $quizStatus ) {\n+\n+\t\t\t\t$omitIds = array_diff( $question_ids, $checkedQuestions );\n+\n+\t\t\t\tif ( $omitIds ) {\n+\t\t\t\t\tforeach ( $omitIds as $omitId ) {\n+\t\t\t\t\t\tif ( ! empty( $answered[ $omitId ] ) ) {\n+\t\t\t\t\t\t\tunset( $answered[ $omitId ] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Flist-questions-data', $questions );\n+}\n+\n+\u002F**\n+ * Update extra profile data upon update user.\n+ *\n+ * @param int $user_id\n+ *\n+ * @since 4.0.0\n+ *\u002F\n+function learn_press_update_extra_user_profile_fields( $user_id ) {\n+\tif ( ! current_user_can( 'edit_user', $user_id ) ) {\n+\t\treturn;\n+\t}\n+\n+\tif ( array_key_exists( 'lp_user_slug', $_POST ) ) {\n+\t\t$userModel = UserModel::find( $user_id, true );\n+\t\tif ( ! $userModel ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$slug_result = $userModel->update_user_nicename( (string) $_POST['lp_user_slug'] );\n+\t\tif ( is_wp_error( $slug_result ) ) {\n+\t\t\twp_safe_redirect(\n+\t\t\t\tadd_query_arg(\n+\t\t\t\t\t'lp-message',\n+\t\t\t\t\turlencode( $slug_result->get_error_message() ),\n+\t\t\t\t\twp_get_referer()\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\tdie();\n+\t\t}\n+\t}\n+\n+\tif ( isset( $_POST['_lp_extra_info'] ) ) {\n+\t\t$extra_info = LP_Request::get_param( '_lp_extra_info', array(), '', 'post' );\n+\t\tupdate_user_meta( $user_id, '_lp_extra_info', $extra_info );\n+\t}\n+}\n+\n+add_action( 'personal_options_update', 'learn_press_update_extra_user_profile_fields' );\n+add_action( 'edit_user_profile_update', 'learn_press_update_extra_user_profile_fields' );\n+\n+\u002F**\n+ * Get extra profile info data\n+ *\n+ * @param int $user_id\n+ *\n+ * @return array\n+ * @since 4.0.1\n+ *\u002F\n+function learn_press_get_user_extra_profile_info( $user_id = 0 ) {\n+\tif ( ! $user_id ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\n+\t$extra_profile_info = get_the_author_meta( '_lp_extra_info', $user_id );\n+\t$social_fields      = learn_press_social_profiles();\n+\n+\t$user_socials = array();\n+\tforeach ( $social_fields as $key => $label ) {\n+\t\t$key                  = sanitize_key( $key );\n+\t\t$user_socials[ $key ] = '';\n+\t\tif ( is_array( $extra_profile_info ) && isset( $extra_profile_info[ $key ] ) ) {\n+\t\t\t$user_socials[ $key ] = esc_url_raw( $extra_profile_info[ $key ] );\n+\t\t}\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fuser-extra-profile-info', $user_socials, $user_id );\n+}\n+\n+\u002F**\n+ * @return array\n+ * @since 3.x.x\n+ * @version 4.0.2\n+ *\u002F\n+function learn_press_social_profiles() {\n+\treturn apply_filters(\n+\t\t'learn-press\u002Fsocial-profiles',\n+\t\tarray(\n+\t\t\t'facebook' => learn_press_social_profile_name( 'facebook' ),\n+\t\t\t'twitter'  => learn_press_social_profile_name( 'twitter' ),\n+\t\t\t'youtube'  => learn_press_social_profile_name( 'youtube' ),\n+\t\t\t'linkedin' => learn_press_social_profile_name( 'linkedin' ),\n+\t\t)\n+\t);\n+}\n+\n+function learn_press_social_profile_name( $key ) {\n+\t$name = '';\n+\tswitch ( $key ) {\n+\t\tcase 'facebook':\n+\t\t\t$name = esc_html__( 'Facebook Profile', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'twitter':\n+\t\t\t$name = esc_html__( 'X Profile', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'youtube':\n+\t\t\t$name = esc_html__( 'Youtube Channel', 'learnpress' );\n+\t\t\tbreak;\n+\t\tcase 'linkedin':\n+\t\t\t$name = esc_html__( 'Linkedin Profile', 'learnpress' );\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\t$name = ucfirst( $key );\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fsocial-profile-name', $name, $key );\n+}\n+\n+function lp_add_default_fields( $fields ) {\n+\t$first_name = LP_Settings::get_option( 'enable_register_first_name', 'no' );\n+\n+\tif ( $first_name === 'yes' ) {\n+\t\t?>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_first_name\">\u003C?php esc_html_e( 'First name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id=\"reg_first_name\" name=\"reg_first_name\" type=\"text\"\n+\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'First name', 'learnpress' ); ?>\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_first_name'] ?? '' ) ); ?>\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003C?php\n+\t}\n+\n+\t$last_name = LP_Settings::instance()->get( 'enable_register_last_name' );\n+\n+\tif ( $last_name === 'yes' ) {\n+\t\t?>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_last_name\">\u003C?php esc_html_e( 'Last name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id=\"reg_last_name\" name=\"reg_last_name\" type=\"text\"\n+\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Last name', 'learnpress' ); ?>\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_last_name'] ?? '' ) ); ?>\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003C?php\n+\t}\n+\n+\t$display_name = LP_Settings::instance()->get( 'enable_register_display_name' );\n+\n+\tif ( $display_name === 'yes' ) {\n+\t\t?>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_display_name\">\u003C?php esc_html_e( 'Display name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id=\"reg_display_name\" name=\"reg_display_name\" type=\"text\"\n+\t\t\t\t\tplaceholder=\"\u003C?php esc_attr_e( 'Display name', 'learnpress' ); ?>\"\n+\t\t\t\t\tvalue=\"\u003C?php echo esc_attr( wp_unslash( $_POST['reg_display_name'] ?? '' ) ); ?>\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003C?php\n+\t}\n+}\n+\n+add_filter( 'learn-press\u002Fafter-form-register-fields', 'lp_add_default_fields' );\n+\n+function lp_custom_register_fields_display() {\n+\t?>\n+\t\u003C?php $custom_fields = LP_Profile::get_register_fields_custom(); ?>\n+\n+\t\u003C?php if ( $custom_fields ) : ?>\n+\t\t\u003C?php foreach ( $custom_fields as $custom_field ) : ?>\n+\t\t\t\u003C?php\n+\t\t\t$cf_class = '';\n+\t\t\tif ( $custom_field['required'] == 'yes' ) {\n+\t\t\t\t$cf_class = ' required';\n+\t\t\t\t?>\n+\t\t\t\t\u003Cstyle>\n+\t\t\t\t\t.required label {\n+\t\t\t\t\t\tfont-weight: bold;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t.required label:after {\n+\t\t\t\t\t\tcontent: ' *';\n+\t\t\t\t\t\tdisplay: inline;\n+\t\t\t\t\t}\n+\t\t\t\t\u003C\u002Fstyle>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\n+\t\t\tif ( isset( $custom_field['id'] ) ) {\n+\t\t\t\t?>\n+\t\t\t\t\u003C?php $value = $custom_field['id']; ?>\n+\n+\t\t\t\t\u003Cli class=\"form-field\u003C?php echo esc_attr( $cf_class ); ?>\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tswitch ( $custom_field['type'] ) {\n+\t\t\t\t\t\tcase 'text':\n+\t\t\t\t\t\tcase 'number':\n+\t\t\t\t\t\tcase 'email':\n+\t\t\t\t\t\tcase 'url':\n+\t\t\t\t\t\tcase 'tel':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo esc_html( $custom_field['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\"\n+\t\t\t\t\t\t\t\t\ttype=\"\u003C?php echo esc_attr( $custom_field['type'] ); ?>\" class=\"regular-text\"\n+\t\t\t\t\t\t\t\t\tvalue=\"\"\u002F>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'textarea':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo esc_html( $custom_field['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003Ctextarea name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\">\u003C\u002Ftextarea>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'checkbox':\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003Clabel>\n+\t\t\t\t\t\t\t\t\u003Cinput name=\"_lp_custom_register_form[\u003C?php echo esc_attr( $value ); ?>]\"\n+\t\t\t\t\t\t\t\t\t\ttype=\"\u003C?php echo esc_attr( $custom_field['type'] ); ?>\" value=\"1\">\n+\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $custom_field['name'] ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php } ?>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C?php endif; ?>\n+\t\u003C?php\n+}\n+\n+add_action( 'learn-press\u002Fafter-form-register-fields', 'lp_custom_register_fields_display' );\n+\n+\u002F**\n+ * Custom register fields\n+ *\n+ * @param [type] $user_id\n+ *\n+ * @return void\n+ *\u002F\n+function lp_user_custom_register_fields( $user_id, $fields = array() ) {\n+\tif ( ! empty( $fields ) ) {\n+\t\tupdate_user_meta( $user_id, '_lp_custom_register', LP_Helper::sanitize_params_submitted( $fields ) );\n+\t} elseif ( isset( $_POST['_lp_custom_register'] ) ) {\n+\t\tupdate_user_meta( $user_id, '_lp_custom_register', LP_Helper::sanitize_params_submitted( $_POST['_lp_custom_register'] ) );\n+\t}\n+}\n+\n+add_action( 'personal_options_update', 'lp_user_custom_register_fields' );\n+add_action( 'edit_user_profile_update', 'lp_user_custom_register_fields' );\n+\n+function lp_get_user_custom_register_fields( $user_id = 0 ) {\n+\tif ( ! $user_id ) {\n+\t\t$user_id = get_current_user_id();\n+\t}\n+\n+\t$register_fields = get_the_author_meta( '_lp_custom_register', $user_id );\n+\t$defaults        = lp_get_user_custom_fields();\n+\n+\t$extra_profile_info = wp_parse_args( $register_fields, $defaults );\n+\n+\treturn apply_filters( 'lp\u002Fuser-custom-register-fields', $register_fields, $user_id );\n+}\n+\n+function lp_get_user_custom_fields() {\n+\t$custom_fields = LP_Settings::get_option( 'register_profile_fields', array() );\n+\n+\t$output = array();\n+\n+\tif ( $custom_fields ) {\n+\t\tforeach ( $custom_fields as $field ) {\n+\t\t\t$output[ $field['id'] ] = '';\n+\t\t}\n+\t}\n+\n+\treturn $output;\n+}\n+\n+\u002F**\n+ * Check extra user data is a social profile.\n+ *\n+ * @param $key\n+ *\n+ * @return bool\n+ * @since 4.0.0\n+ * @deprecated 4.3.2\n+ *\u002F\n+function learn_press_is_social_profile( $key ) {\n+\t_deprecated_function( __FUNCTION__, '4.3.2' );\n+\n+\treturn true;\n+\n+\t$is_socials = learn_press_social_profiles();\n+\n+\treturn in_array( $key, $is_socials );\n+}\n+\n+\u002F**\n+ * Get extra profile fields will be registered in backend profile.\n+ *\n+ * @return array\n+ * @since 4.0.0\n+ * @deprecated 4.3.2\n+ *\u002F\n+function learn_press_get_user_extra_profile_fields() {\n+\t_deprecated_function( __FUNCTION__, '4.3.2' );\n+\treturn array();\n+\n+\t$socials = learn_press_social_profiles();\n+\n+\treturn $socials;\n+\n+\t$fields = array();\n+\n+\tforeach ( $socials as $social ) {\n+\t\t$fields[ $social ] = learn_press_social_profile_name( $social );\n+\t}\n+\n+\treturn apply_filters( 'learn-press\u002Fuser-extra-profile-fields', $fields );\n+}\n+\n+\u002F**\n+ * Show courses user enrolled on backend\n+ *\n+ * @param $user\n+ *\n+ * @return void\n+ *\u002F\n+function learn_press_user_profile_data( $user ) {\n+\tif ( ! is_admin() ) {\n+\t\treturn;\n+\t}\n+\n+\tlearn_press_admin_view( 'backend-user-profile', array( 'user' => $user ) );\n+\tlearn_press_admin_view( 'user\u002Fcourses.php', array( 'user_id' => $user->ID ) );\n+}\n+\n+add_action( 'edit_user_profile', 'learn_press_user_profile_data', 1000 );\n+add_action( 'show_user_profile', 'learn_press_user_profile_data', 1000 );\n+\n+\u002F*\n+function learnpress_get_count_by_user( $user_id = '', $post_type = 'lp_course' ) {\n+\tif ( empty( $user_id ) ) {\n+\t\treturn false;\n+\t}\n+\n+\t$args = array(\n+\t\t'author'         => $user_id,\n+\t\t'posts_per_page' => - 1,\n+\t\t'post_type'      => $post_type,\n+\t\t'post_status'    => 'any',\n+\t);\n+\n+\t$posts = get_posts( $args );\n+\n+\t$output = array(\n+\t\t'all'     => count( $posts ),\n+\t\t'publish' => array(),\n+\t\t'pending' => array(),\n+\t);\n+\n+\t$pending = $public = array();\n+\n+\tif ( ! empty( $posts ) ) {\n+\t\tforeach ( $posts as $post ) {\n+\t\t\tswitch ( $post->post_status ) {\n+\t\t\t\tcase 'pending':\n+\t\t\t\t\t$pending[] = $post;\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'publish':\n+\t\t\t\t\t$public[] = $post;\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\treturn array(\n+\t\t'all'     => count( $posts ),\n+\t\t'publish' => count( $public ),\n+\t\t'pending' => count( $pending ),\n+\t);\n+}*\u002F\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-quiz-results.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-quiz-results.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-quiz-results.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-quiz-results.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,86 +1,86 @@\n-\u003C?php\r\n-class LP_Quiz_Results {\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $results = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_Quiz_Results constructor.\r\n-\t *\r\n-\t * @param $results\r\n-\t *\u002F\r\n-\tpublic function __construct( $results ) {\r\n-\t\t\u002F\u002F If $results is user_item_id.\r\n-\t\tif ( is_numeric( $results ) ) {\r\n-\t\t\t$this->results = LP_User_Items_Result_DB::instance()->get_result( $results );\r\n-\t\t} else {\r\n-\t\t\t$this->results = $results ? (array) $results : array();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $return\r\n-\t *\r\n-\t * @return array|bool|mixed\r\n-\t *\u002F\r\n-\tpublic function getQuestions( $return = '' ) {\r\n-\t\t$questions = $this->offsetGet( 'questions' );\r\n-\r\n-\t\tif ( ! $questions ) {\r\n-\t\t\t$questions = array();\r\n-\t\t}\r\n-\t\t$ids = array_keys( $questions );\r\n-\t\t$ids = apply_filters( 'lp-quiz\u002Fresults\u002Fgetquestions', $ids );\r\n-\r\n-\t\treturn $return === 'ids' ? $ids : $questions;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $id\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic function getAnswered( $id = 0 ) {\r\n-\t\t$questions = $this->getQuestions();\r\n-\r\n-\t\tif ( $id ) {\r\n-\t\t\treturn isset( $questions[ $id ] ) ? $questions[ $id ]['answered'] : false;\r\n-\t\t}\r\n-\r\n-\t\treturn wp_list_pluck( $questions, 'answered' );\r\n-\t}\r\n-\r\n-\tpublic function get( $prop = null, $default = '' ) {\r\n-\t\tif ( ! $prop ) {\r\n-\t\t\treturn $this->results ? $this->results : $default;\r\n-\t\t}\r\n-\r\n-\t\t$value = $this->offsetGet( $prop );\r\n-\r\n-\t\treturn $value ? $value : $default;\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\tif ( isset( $this->results[ $offset ] ) ) {\r\n-\t\t\tunset( $this->results[ $offset ] );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t$this->results[ $offset ] = $value;\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\treturn isset( $this->results[ $offset ] ) ? $this->results[ $offset ] : false;\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\treturn array_key_exists( $offset, $this->results );\r\n-\t}\r\n-\r\n-\tpublic function __toString() {\r\n-\t\treturn $this->get( 'result' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+class LP_Quiz_Results {\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $results = array();\n+\n+\t\u002F**\n+\t * LP_Quiz_Results constructor.\n+\t *\n+\t * @param $results\n+\t *\u002F\n+\tpublic function __construct( $results ) {\n+\t\t\u002F\u002F If $results is user_item_id.\n+\t\tif ( is_numeric( $results ) ) {\n+\t\t\t$this->results = LP_User_Items_Result_DB::instance()->get_result( $results );\n+\t\t} else {\n+\t\t\t$this->results = $results ? (array) $results : array();\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * @param string $return\n+\t *\n+\t * @return array|bool|mixed\n+\t *\u002F\n+\tpublic function getQuestions( $return = '' ) {\n+\t\t$questions = $this->offsetGet( 'questions' );\n+\n+\t\tif ( ! $questions ) {\n+\t\t\t$questions = array();\n+\t\t}\n+\t\t$ids = array_keys( $questions );\n+\t\t$ids = apply_filters( 'lp-quiz\u002Fresults\u002Fgetquestions', $ids );\n+\n+\t\treturn $return === 'ids' ? $ids : $questions;\n+\t}\n+\n+\t\u002F**\n+\t * @param int $id\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic function getAnswered( $id = 0 ) {\n+\t\t$questions = $this->getQuestions();\n+\n+\t\tif ( $id ) {\n+\t\t\treturn isset( $questions[ $id ] ) ? $questions[ $id ]['answered'] : false;\n+\t\t}\n+\n+\t\treturn wp_list_pluck( $questions, 'answered' );\n+\t}\n+\n+\tpublic function get( $prop = null, $default = '' ) {\n+\t\tif ( ! $prop ) {\n+\t\t\treturn $this->results ? $this->results : $default;\n+\t\t}\n+\n+\t\t$value = $this->offsetGet( $prop );\n+\n+\t\treturn $value ? $value : $default;\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\tif ( isset( $this->results[ $offset ] ) ) {\n+\t\t\tunset( $this->results[ $offset ] );\n+\t\t}\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\t$this->results[ $offset ] = $value;\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\treturn isset( $this->results[ $offset ] ) ? $this->results[ $offset ] : false;\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\treturn array_key_exists( $offset, $this->results );\n+\t}\n+\n+\tpublic function __toString() {\n+\t\treturn $this->get( 'result' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1219 +1,1219 @@\n-\u003C?php\r\n-\r\n-use LearnPress\\Filters\\UserItemsFilter;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-\r\n-\u002F**\r\n- * Class LP_User_Item_Course\r\n- *\u002F\r\n-\r\n-class LP_User_Item_Course extends LP_User_Item {\r\n-\tpublic $_item_type = LP_COURSE_CPT;\r\n-\tpublic $_ref_type  = LP_ORDER_CPT;\r\n-\r\n-\t\u002F**\r\n-\t * Course\r\n-\t *\r\n-\t * @var LP_Course\r\n-\t *\u002F\r\n-\tprotected $_course = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_User\r\n-\t *\u002F\r\n-\tprotected $_user = 0;\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_items_by_item_ids = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_items_by_order = array();\r\n-\r\n-\t\u002F**\r\n-\t * @var bool\r\n-\t *\u002F\r\n-\tprotected $_loaded = false;\r\n-\r\n-\t\u002F**\r\n-\t * @var LP_User_CURD\r\n-\t *\u002F\r\n-\tprotected $_curd = null;\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_Item_Course constructor.\r\n-\t *\r\n-\t * @param object|array $item\r\n-\t *\u002F\r\n-\tpublic function __construct( $item ) {\r\n-\t\t\u002F**\r\n-\t\t * Todo: Fix for item is course_id, will be removed when change all to array or object\r\n-\t\t * @editor tungnx 4.1.6.9\r\n-\t\t *\u002F\r\n-\t\tif ( gettype( $item ) == 'integer' ) {\r\n-\t\t\t$item_id         = $item;\r\n-\t\t\t$item            = [];\r\n-\t\t\t$item['item_id'] = $item_id;\r\n-\t\t}\r\n-\r\n-\t\t$item              = (array) $item;\r\n-\t\t$item['item_type'] = $this->_item_type;\r\n-\t\t$item['ref_type']  = $this->_ref_type;\r\n-\r\n-\t\tif ( isset( $item['item_id'] ) ) {\r\n-\t\t\t$this->_course = learn_press_get_course( $item['item_id'] );\r\n-\t\t}\r\n-\r\n-\t\tparent::__construct( $item );\r\n-\r\n-\t\t$this->_curd    = new LP_User_CURD();\r\n-\t\t$this->_changes = array();\r\n-\t}\r\n-\r\n-\t\u002F*public function load() {\r\n-\t\tif ( ! $this->_loaded ) {\r\n-\t\t\t$this->read_items();\r\n-\r\n-\t\t\t$this->_loaded = true;\r\n-\t\t}\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Read items' data of course for the user.\r\n-\t *\r\n-\t * @param bool $refresh .\r\n-\t *\r\n-\t * @return array|bool\r\n-\t *\u002F\r\n-\tpublic function read_items( $refresh = false ) {\r\n-\t\t$user_course_item_id = $this->get_user_item_id();\r\n-\r\n-\t\tif ( ! $this->_course || ( ! $user_course_item_id ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$course_items = $this->_course->get_item_ids();\r\n-\t\t$total_items  = $this->_course->count_items();\r\n-\r\n-\t\tif ( empty( $total_items ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$filter            = new LP_User_Items_Filter();\r\n-\t\t$filter->parent_id = $user_course_item_id;\r\n-\t\t$filter->user_id   = $this->get_user_id();\r\n-\t\t$user_course_items = LP_User_Items_DB::getInstance()->get_user_course_items( $filter );\r\n-\r\n-\t\tif ( $user_course_items ) {\r\n-\t\t\t$tmp = array();\r\n-\t\t\t\u002F\u002F Convert keys of array from numeric to keys is item id\r\n-\t\t\tforeach ( $user_course_items as $user_course_item ) {\r\n-\t\t\t\t$tmp[ $user_course_item->item_id ] = $user_course_item;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_course_items = $tmp;\r\n-\t\t\tunset( $tmp );\r\n-\t\t} else {\r\n-\t\t\t$user_course_items = array();\r\n-\t\t}\r\n-\r\n-\t\t$items = array();\r\n-\r\n-\t\tforeach ( $course_items as $item_id ) {\r\n-\t\t\tif ( ! empty( $user_course_items[ $item_id ] ) ) {\r\n-\t\t\t\t$user_course_item = (array) $user_course_items[ $item_id ];\r\n-\t\t\t} else {\r\n-\t\t\t\t$user_course_item = array(\r\n-\t\t\t\t\t'item_id'   => $item_id,\r\n-\t\t\t\t\t'ref_id'    => $this->get_id(),\r\n-\t\t\t\t\t'parent_id' => $user_course_item_id,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_item = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fuser-course-item',\r\n-\t\t\t\tLP_User_Item::get_item_object( $user_course_item ),\r\n-\t\t\t\t$user_course_item,\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( $course_item ) {\r\n-\t\t\t\t$items[ $item_id ] = $course_item;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $items;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Id of course.\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 3.3.0\r\n-\t *\u002F\r\n-\tpublic function get_course_id() {\r\n-\t\treturn $this->get_data( 'item_id' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic function get_finishing_type() {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\u002F*$type = $this->get_meta( 'finishing_type' );\r\n-\r\n-\t\tif ( ! $type ) {\r\n-\t\t\t$type = $this->is_exceeded() \u003C= 0 ? 'exceeded' : 'click';\r\n-\r\n-\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), 'finishing_type', $type );\r\n-\r\n-\t\t\t$this->set_meta( 'finishing_type', $type );\r\n-\t\t}\r\n-\r\n-\t\treturn $type;*\u002F\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t\u002F\u002F $this->set_data( $offset, $value );\r\n-\t\t\u002F\u002F Do not allow to set value directly!\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\t\u002F\u002F Do not allow to unset value directly!\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\t$items = $this->read_items();\r\n-\r\n-\t\treturn $items && array_key_exists( $offset, $items ) ? $items[ $offset ] : false;\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\t$items = $this->read_items();\r\n-\r\n-\t\treturn array_key_exists( $offset, (array) $items );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return LP_User_Item|bool\r\n-\t * @deprecated 4.1.6.9.2\r\n-\t *\u002F\r\n-\t\u002F*public function get_viewing_item() {\r\n-\t\t$item = LP_Global::course_item();\r\n-\t\tif ( $item ) {\r\n-\t\t\treturn $this[ $item->get_id() ];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get course.\r\n-\t *\r\n-\t * @param string $return\r\n-\t *\r\n-\t * @return bool|LP_Course|int|mixed\r\n-\t *\u002F\r\n-\tpublic function get_course( string $return = '' ) {\r\n-\t\t$course_id = $this->get_data( 'item_id', 0 );\r\n-\t\tif ( $return == '' ) {\r\n-\t\t\treturn $course_id ? learn_press_get_course( $course_id ) : false;\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get result\u002Fprocessing course\r\n-\t *\r\n-\t * @param string $prop\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_result( $prop = '' ) {\r\n-\t\t$results = $this->calculate_course_results();\r\n-\r\n-\t\t\u002F\u002F Fix temporary for case call 'grade' - addons called\r\n-\t\tif ( 'grade' === $prop ) {\r\n-\t\t\tif ( $results['pass'] ) {\r\n-\t\t\t\t$results['grade'] = 'passed';\r\n-\t\t\t} else {\r\n-\t\t\t\t$results['grade'] = 'failed';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $prop && $results && array_key_exists( $prop, $results ) ? $results[ $prop ] : $results;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get current progress of course for an user.\r\n-\t * Firstly, get data from cache if it is already loaded.\r\n-\t * If data is not loaded to cache then get from meta data.\r\n-\t * If meta data is not updated then calculate and update it\r\n-\t *\r\n-\t * @updated 3.1.0\r\n-\t *\r\n-\t * @param string $prop\r\n-\t *\r\n-\t * @return float|int\r\n-\t *\u002F\r\n-\tpublic function get_results( $prop = 'result' ) {\r\n-\t\t$course = $this->get_course();\r\n-\r\n-\t\tif ( ! $course ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$results = LP_Object_Cache::get(\r\n-\t\t\t'course-' . $this->get_item_id() . '-' . $this->get_user_id(),\r\n-\t\t\t'course-results'\r\n-\t\t);\r\n-\r\n-\t\tif ( $results === false ) {\r\n-\t\t\t$results = $this->calculate_course_results();\r\n-\r\n-\t\t\tLP_Object_Cache::set(\r\n-\t\t\t\t'course-' . $this->get_item_id() . '-' . $this->get_user_id(),\r\n-\t\t\t\t$results,\r\n-\t\t\t\t'course-results'\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn $prop && $results && array_key_exists( $prop, $results ) ? $results[ $prop ] : $results;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate course result\r\n-\t *\u002F\r\n-\tpublic function calculate_course_results( bool $force_cache = false ) {\r\n-\t\t$results = array(\r\n-\t\t\t'count_items'     => 0,\r\n-\t\t\t'completed_items' => 0,\r\n-\t\t\t'items'           => array(),\r\n-\t\t\t'evaluate_type'   => '',\r\n-\t\t\t'pass'            => 0,\r\n-\t\t\t'result'          => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $this->get_user_id(), $this->get_course_id(), true );\r\n-\t\t\tif ( ! $userCourseModel instanceof UserCourseModel ) {\r\n-\t\t\t\treturn $results;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$results = $userCourseModel->calculate_course_results();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $results;\r\n-\r\n-\t\t\u002F\u002F Code old\r\n-\t\t$items   = array();\r\n-\t\t$results = array(\r\n-\t\t\t'count_items'     => 0,\r\n-\t\t\t'completed_items' => 0,\r\n-\t\t\t'items'           => array(),\r\n-\t\t\t'evaluate_type'   => '',\r\n-\t\t\t'pass'            => 0,\r\n-\t\t\t'result'          => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = learn_press_get_course( $this->get_course_id() );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( 'Course invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$key_first_cache = 'calculate_course\u002F' . $this->get_user_id() . '\u002F' . $course->get_id();\r\n-\t\t\t$results_cache   = LP_Cache::cache_load_first( 'get', $key_first_cache );\r\n-\t\t\tif ( false !== $results_cache && ! $force_cache ) {\r\n-\t\t\t\treturn $results_cache;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->_course = $course;\r\n-\r\n-\t\t\tif ( $this->is_finished() ) {\r\n-\t\t\t\t\u002F\u002F Get result from lp_user_item_results\r\n-\t\t\t\t\u002F\u002F Todo: tungnx - set cache\r\n-\t\t\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $this->get_status() !== LP_COURSE_ENROLLED ) {\r\n-\t\t\t\treturn $results;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$count_items           = $course->count_items();\r\n-\t\t\t$count_items_completed = $this->count_items_completed();\r\n-\r\n-\t\t\t$evaluate_type = get_post_meta( $course->get_id(), '_lp_course_result', true );\r\n-\t\t\tif ( ! $evaluate_type ) {\r\n-\t\t\t\t$evaluate_type = 'evaluate_lesson';\r\n-\t\t\t}\r\n-\t\t\tswitch ( $evaluate_type ) {\r\n-\t\t\t\tcase 'evaluate_lesson':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_lesson( $count_items_completed, $course->count_items( LP_LESSON_CPT ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_final_quiz':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_final_quiz();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_quiz':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_quizzes_passed( $count_items_completed, $course->count_items( LP_QUIZ_CPT ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_questions':\r\n-\t\t\t\tcase 'evaluate_mark':\r\n-\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_question( $evaluate_type );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\t$results_evaluate = apply_filters( 'learn-press\u002Fevaluate_passed_conditions', $results, $evaluate_type, $this );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! is_array( $results_evaluate ) ) {\r\n-\t\t\t\t$results_evaluate = array(\r\n-\t\t\t\t\t'result' => 0,\r\n-\t\t\t\t\t'pass'   => 0,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$results_evaluate['result'] = round( $results_evaluate['result'], 2 );\r\n-\r\n-\t\t\t$completed_items = intval( $count_items_completed->count_status ?? 0 );\r\n-\r\n-\t\t\t$item_types = learn_press_get_course_item_types();\r\n-\t\t\tforeach ( $item_types as $item_type ) {\r\n-\t\t\t\t$item_type_key = str_replace( 'lp_', '', $item_type );\r\n-\r\n-\t\t\t\t$items[ $item_type_key ] = array(\r\n-\t\t\t\t\t'completed' => $count_items_completed->{$item_type . '_status_completed'} ?? 0,\r\n-\t\t\t\t\t'passed'    => $count_items_completed->{$item_type . '_graduation_passed'} ?? 0,\r\n-\t\t\t\t\t'total'     => $course->count_items( $item_type ),\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$results = array_merge(\r\n-\t\t\t\t$results_evaluate,\r\n-\t\t\t\tcompact( 'count_items', 'completed_items', 'items', 'evaluate_type' )\r\n-\t\t\t);\r\n-\r\n-\t\t\t$results = apply_filters(\r\n-\t\t\t\t'learn-press\u002Fupdate-course-results',\r\n-\t\t\t\t$results,\r\n-\t\t\t\t$this->get_item_id(),\r\n-\t\t\t\t$this->get_user_id(),\r\n-\t\t\t\t$this\r\n-\t\t\t);\r\n-\r\n-\t\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $results );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $results;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get graduation\r\n-\t *\r\n-\t * @param string $context\r\n-\t *\r\n-\t * @return string\r\n-\t * @deprecated 4.1.6.9.3\r\n-\t *\u002F\r\n-\tpublic function get_grade( string $context = '' ): string {\r\n-\t\t$grade = $this->get_graduation() ?? '';\r\n-\r\n-\t\treturn $context == 'display' ? learn_press_course_grade_html( $grade, false ) : $grade;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $decimal\r\n-\t *\r\n-\t * @return int|string\r\n-\t *\u002F\r\n-\tpublic function get_percent_result( $decimal = 1 ) {\r\n-\t\treturn round( $this->get_result( 'result' ), $decimal );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course result by lessons.\r\n-\t *\r\n-\t * @param $count_items_completed\r\n-\t * @param int $total_item_lesson\r\n-\t *\r\n-\t * @return array\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_lesson( $count_items_completed, int $total_item_lesson = 0 ): array {\r\n-\t\t$evaluate = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\t$count_items_completed = intval( $count_items_completed->{LP_LESSON_CPT . '_status_completed'} ?? 0 );\r\n-\r\n-\t\tif ( $total_item_lesson && $count_items_completed ) {\r\n-\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_lesson;\r\n-\t\t}\r\n-\r\n-\t\t$passing_condition = $this->_course->get_passing_condition();\r\n-\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t$evaluate['pass'] = 1;\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course result by final quiz.\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_final_quiz(): array {\r\n-\t\t$lp_user_items_db       = LP_User_Items_DB::getInstance();\r\n-\t\t$lp_user_item_result_db = LP_User_Items_Result_DB::instance();\r\n-\t\t$evaluate               = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$quiz_final_id = get_post_meta( $this->get_course_id(), '_lp_final_quiz', true );\r\n-\r\n-\t\t\tif ( ! $quiz_final_id ) {\r\n-\t\t\t\tthrow new Exception( '' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quiz_final = learn_press_get_quiz( $quiz_final_id );\r\n-\r\n-\t\t\tif ( ! $quiz_final ) {\r\n-\t\t\t\tthrow new Exception( 'Quiz final invalid' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_course = $this->get_last_user_course();\r\n-\r\n-\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\tthrow new Exception( 'User course not exists' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter             = new LP_User_Items_Filter();\r\n-\t\t\t$filter->query_type = 'get_row';\r\n-\t\t\t$filter->parent_id  = $user_course->user_item_id;\r\n-\t\t\t$filter->item_type  = LP_QUIZ_CPT;\r\n-\t\t\t$filter->item_id    = $quiz_final_id;\r\n-\t\t\t$user_quiz          = $lp_user_items_db->get_user_course_items_by_item_type( $filter );\r\n-\r\n-\t\t\tif ( ! $user_quiz ) {\r\n-\t\t\t\tthrow new Exception();\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get result did quiz\r\n-\t\t\t$quiz_result = $lp_user_item_result_db->get_result( $user_quiz->user_item_id );\r\n-\r\n-\t\t\tif ( $quiz_result ) {\r\n-\t\t\t\tif ( ! isset( $quiz_result['result'] ) ) {\r\n-\t\t\t\t\t$evaluate['result'] = $quiz_result['user_mark'] * 100 \u002F $quiz_result['mark'];\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$evaluate['result'] = $quiz_result['result'];\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$passing_condition = floatval( $quiz_final->get_data( 'passing_grade', 0 ) );\r\n-\t\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by count quizzes passed\u002Fall quizzes.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_quizzes_passed( $count_items_completed, $total_item_quizzes ): array {\r\n-\t\t$evaluate = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\t$count_items_completed = intval( $count_items_completed->{LP_QUIZ_CPT . '_graduation_passed'} ?? 0 );\r\n-\r\n-\t\tif ( $total_item_quizzes && $count_items_completed ) {\r\n-\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_quizzes;\r\n-\r\n-\t\t\t$passing_condition = $this->_course->get_passing_condition();\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by count questions true\u002Fall questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprivate function evaluate_course_by_questions( &$evaluate, $lp_quizzes, $total_questions ) {\r\n-\t\t$lp_user_item_results_db = LP_User_Items_Result_DB::instance();\r\n-\t\t$count_questions_correct = 0;\r\n-\r\n-\t\t\u002F\u002F get questions correct\r\n-\t\tforeach ( $lp_quizzes as $lp_quiz ) {\r\n-\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\r\n-\t\t\tif ( $lp_quiz_result ) {\r\n-\t\t\t\t$count_questions_correct += $lp_quiz_result['question_correct'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $total_questions && $count_questions_correct ) {\r\n-\t\t\t$evaluate['result'] = $count_questions_correct * 100 \u002F $total_questions;\r\n-\r\n-\t\t\t$passing_condition = $this->_course->get_passing_condition();\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by total mark of questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprivate function evaluate_course_by_mark( &$evaluate, $lp_quizzes, $total_mark_questions ) {\r\n-\t\t$lp_user_item_results_db       = LP_User_Items_Result_DB::instance();\r\n-\t\t$count_mark_questions_receiver = 0;\r\n-\r\n-\t\tforeach ( $lp_quizzes as $lp_quiz ) {\r\n-\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\r\n-\t\t\tif ( $lp_quiz_result ) {\r\n-\t\t\t\t$count_mark_questions_receiver += $lp_quiz_result['user_mark'];\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $count_mark_questions_receiver && $total_mark_questions ) {\r\n-\t\t\t$evaluate['result'] = $count_mark_questions_receiver * 100 \u002F $total_mark_questions;\r\n-\r\n-\t\t\t$passing_condition = floatval( $this->_course->get_passing_condition() );\r\n-\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\r\n-\t\t\t\t$evaluate['pass'] = 1;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Evaluate course results by total mark of questions.\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tprotected function evaluate_course_by_question( string $evaluate_type ): array {\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$evaluate         = array(\r\n-\t\t\t'result' => 0,\r\n-\t\t\t'pass'   => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user_course = $this->get_last_user_course();\r\n-\r\n-\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\tthrow new Exception( 'User course not exists!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F get quiz_ids\r\n-\t\t\t$filter_get_quiz_ids            = new LP_User_Items_Filter();\r\n-\t\t\t$filter_get_quiz_ids->parent_id = $user_course->user_item_id;\r\n-\t\t\t$filter_get_quiz_ids->item_type = LP_QUIZ_CPT;\r\n-\t\t\t$lp_quizzes                     = $lp_user_items_db->get_user_course_items_by_item_type( $filter_get_quiz_ids );\r\n-\r\n-\t\t\t\u002F\u002F Get total questions, mark\r\n-\t\t\t\u002F\u002F Todo: Tungnx - save (questions, mark) total when save quiz, course, if not query again\r\n-\t\t\t$course = $this->_course;\r\n-\t\t\tif ( is_int( $course ) ) {\r\n-\t\t\t\t$course = learn_press_get_course( $course );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$total_questions     = 0;\r\n-\t\t\t$total_mark_question = 0;\r\n-\r\n-\t\t\t\u002F\u002F Get all items' course\r\n-\t\t\t$sections_items = $course->get_full_sections_and_items_course();\r\n-\r\n-\t\t\tforeach ( $sections_items as $section_items ) {\r\n-\t\t\t\tforeach ( $section_items->items as $item ) {\r\n-\t\t\t\t\t$itemObj = $course->get_item( $item->id );\r\n-\r\n-\t\t\t\t\tif ( ! $itemObj instanceof LP_Course_Item ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $item->type == LP_QUIZ_CPT ) {\r\n-\t\t\t\t\t\t$total_questions     += count( $itemObj->get_question_ids() );\r\n-\t\t\t\t\t\t$total_mark_question += $itemObj->get_mark();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t\u002F\u002F End get total questions, mark\r\n-\r\n-\t\t\tswitch ( $evaluate_type ) {\r\n-\t\t\t\tcase 'evaluate_questions':\r\n-\t\t\t\t\t$this->evaluate_course_by_questions( $evaluate, $lp_quizzes, $total_questions );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'evaluate_mark':\r\n-\t\t\t\t\t$this->evaluate_course_by_mark( $evaluate, $lp_quizzes, $total_mark_question );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Get results of each quiz - has questions\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $evaluate;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course of use has enrolled\r\n-\t *\u002F\r\n-\tpublic function is_enrolled(): bool {\r\n-\t\treturn $this->get_status() == LP_COURSE_ENROLLED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course of use has purchased\r\n-\t * @author tungnx\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.0\r\n-\t *\u002F\r\n-\tpublic function is_purchased(): bool {\r\n-\t\treturn $this->get_status() == LP_COURSE_PURCHASED;\r\n-\t}\r\n-\r\n-\tpublic function get_level() {\r\n-\t\tif ( ! $this->is_exists() ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$level = 10;\r\n-\r\n-\t\tswitch ( $this->get_status() ) {\r\n-\t\t\tcase 'enrolled':\r\n-\t\t\t\t$level = 20;\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase 'finished':\r\n-\t\t\t\t$level = 30;\r\n-\t\t\t\tbreak;\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn $level;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.1.6.9.2\r\n-\t *\u002F\r\n-\t\u002F*protected function _is_passed( $result ) {\r\n-\t\t$is_passed = LP_COURSE_GRADUATION_FAILED;\r\n-\t\t$result    = round( $result, 2 );\r\n-\r\n-\t\tif ( $result >= $this->get_passing_condition() ) {\r\n-\t\t\t$is_passed = LP_COURSE_GRADUATION_PASSED;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learnpress\u002Fuser\u002Fcourse\u002Fis-passed', $is_passed, $result );\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get completed items.\r\n-\t *\r\n-\t * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed\r\n-\t * @param bool   $with_total - Optional. Include total if TRUE\r\n-\t * @param int    $section_id - Optional. Get in specific section\r\n-\t *\r\n-\t * @return array|bool|mixed\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic function get_completed_items( $type = '', $with_total = false, $section_id = 0 ) {\r\n-\r\n-\t\t$this->read_items();\r\n-\r\n-\t\t\u002F\u002F $completed_items = array(0,100);\r\n-\t\t\u002F\u002F return $with_total ? $completed_items : $completed_items[0];\r\n-\r\n-\t\tif ( ! $this->_course ) {\r\n-\t\t\treturn 0;\r\n-\t\t}\r\n-\r\n-\t\t$key = sprintf(\r\n-\t\t\t'%d-%d-%s',\r\n-\t\t\t$this->get_user_id(),\r\n-\t\t\t$this->_course->get_id(),\r\n-\t\t\tmd5( build_query( func_get_args() ) )\r\n-\t\t);\r\n-\r\n-\t\t$completed_items = LP_Object_Cache::get( $key, 'learn-press\u002Fuser-completed-items' );\r\n-\r\n-\t\tif ( false === $completed_items ) {\r\n-\t\t\t$completed     = 0;\r\n-\t\t\t$total         = 0;\r\n-\t\t\t$section_items = array();\r\n-\r\n-\t\t\tif ( $section_id ) {\r\n-\t\t\t\t$section = $this->_course->get_sections( 'object', $section_id );\r\n-\r\n-\t\t\t\tif ( $section ) {\r\n-\t\t\t\t\t$section_items = $section->get_items();\r\n-\r\n-\t\t\t\t\tif ( $section_items ) {\r\n-\t\t\t\t\t\t$section_items = array_keys( $section_items );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$items = $this->get_items();\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\r\n-\t\t\t\t\tif ( $section_id && ! in_array( $item->get_id(), $section_items ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $type ) {\r\n-\t\t\t\t\t\t$item_type = $item->get_data( 'item_type' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$item_type = '';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $type === $item_type ) {\r\n-\t\t\t\t\t\tif ( $item->get_status() == 'completed' ) {\r\n-\t\t\t\t\t\t\t++$completed;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$completed = apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fcourse-item\u002Fcompleted',\r\n-\t\t\t\t\t\t\t$completed,\r\n-\t\t\t\t\t\t\t$item,\r\n-\t\t\t\t\t\t\t$item->get_status()\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\u002F\u002F if ( ! $item->is_preview() ) {\r\n-\t\t\t\t\t\t++$total;\r\n-\t\t\t\t\t\t\u002F\u002F }\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$completed_items = array( $completed, $total );\r\n-\t\t\tLP_Object_Cache::set( $key, $completed_items, 'learn-press\u002Fuser-completed-items' );\r\n-\t\t}\r\n-\r\n-\t\treturn $with_total ? $completed_items : $completed_items[0];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get completed items.\r\n-\t *\r\n-\t * @return object\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1\r\n-\t * @since 4.0.0\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function count_items_completed() {\r\n-\t\t$lp_user_items_db      = LP_User_Items_DB::getInstance();\r\n-\t\t$count_items_completed = new stdClass();\r\n-\r\n-\t\ttry {\r\n-\t\t\t$course = learn_press_get_course( $this->get_course_id() );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tthrow new Exception( 'Course is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user_course = $this->get_last_user_course();\r\n-\t\t\tif ( ! $user_course ) {\r\n-\t\t\t\tthrow new Exception( 'User course is invalid!' );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$filter_count             = new LP_User_Items_Filter();\r\n-\t\t\t$filter_count->parent_id  = $user_course->user_item_id;\r\n-\t\t\t$filter_count->item_id    = $this->get_course_id();\r\n-\t\t\t$filter_count->user_id    = $this->get_user_id();\r\n-\t\t\t$filter_count->status     = 'completed';\r\n-\t\t\t$filter_count->graduation = LP_COURSE_GRADUATION_PASSED;\r\n-\t\t\t$count_items_completed    = $lp_user_items_db->count_items_of_course_with_status( $filter_count );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $count_items_completed;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get items completed by percentage.\r\n-\t *\r\n-\t * @param string $type - Optional. Filter by type or not\r\n-\t * @param int    $section_id - Optional. Get in specific section\r\n-\t *\r\n-\t * @return float|int\r\n-\t *\u002F\r\n-\tpublic function get_percent_completed_items( $type = '', $section_id = 0 ) {\r\n-\t\t$values = $this->get_completed_items( $type, true, $section_id );\r\n-\t\tif ( $values[1] ) {\r\n-\t\t\treturn $values[0] \u002F $values[1] * 100;\r\n-\t\t}\r\n-\r\n-\t\treturn 0;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get passing condition criteria.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_passing_condition() {\r\n-\t\treturn $this->_course->get_passing_condition();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all items in course.\r\n-\t *\r\n-\t * @param bool $refresh\r\n-\t *\r\n-\t * @return LP_User_Item[]\r\n-\t *\u002F\r\n-\tpublic function get_items( $refresh = false ) {\r\n-\t\treturn $this->read_items();\r\n-\r\n-\t\t\u002F*\r\n-\t\treturn LP_Object_Cache::get(\r\n-\t\t\t$this->get_user_id() . '-' . $this->get_id(),\r\n-\t\t\t'learn-press\u002Fuser-course-item-objects'\r\n-\t\t);*\u002F\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course is completed or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t *\u002F\r\n-\tpublic function is_finished(): bool {\r\n-\t\treturn $this->get_status() == LP_COURSE_FINISHED;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Check course graduation is passed or not.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_graduated() {\r\n-\t\treturn $this->get_graduation();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t * @deprecated 4.1.6.9.2\r\n-\t *\u002F\r\n-\t\u002F*public function can_graduated() {\r\n-\t\treturn $this->get_results( 'result' ) >= $this->get_passing_condition();\r\n-\t}*\u002F\r\n-\r\n-\tfunction __destruct() {\r\n-\t\t\u002F\u002F TODO: Implement __unset() method.\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item user attend on course by item_id.\r\n-\t *\r\n-\t * @param int $item_id\r\n-\t *\r\n-\t * @return bool|LP_User_Item\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.6.9\r\n-\t * @since 3.0.0\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function get_item( $item_id ) {\r\n-\t\t$item = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter          = new LP_User_Items_Filter();\r\n-\t\t\t$filter->item_id = $item_id;\r\n-\t\t\t$filter->ref_id  = $this->get_course_id();\r\n-\t\t\t$filter->user_id = $this->get_user();\r\n-\t\t\t$item_result     = LP_User_Items_DB::getInstance()->get_user_course_item( $filter );\r\n-\r\n-\t\t\tif ( $item_result ) {\r\n-\t\t\t\t$item_result = (array) $item_result;\r\n-\t\t\t\t$item        = LP_User_Item::get_item_object( $item_result );\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $item;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param        $item_id\r\n-\t * @param string $prop\r\n-\t *\r\n-\t * @return bool|float|int\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function get_item_result( $item_id, $prop = 'result' ) {\r\n-\t\t$item = $this->get_item( $item_id );\r\n-\r\n-\t\tif ( $item instanceof LP_User_Item_Quiz ) {\r\n-\t\t\t\u002F**\r\n-\t\t\t * @var LP_User_Item_Quiz $item\r\n-\t\t\t *\u002F\r\n-\t\t\treturn $item->get_graduation();\r\n-\t\t} elseif ( $item ) {\r\n-\t\t\treturn $item->get_result( $prop );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $id\r\n-\t *\r\n-\t * @return LP_User_Item_Quiz|bool\r\n-\t *\u002F\r\n-\tpublic function get_item_quiz( $id ) {\r\n-\r\n-\t\treturn $this->get_item( $id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number of retaken times for user course.\r\n-\t *\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_retaken_count(): int {\r\n-\t\treturn (int) ( learn_press_get_user_item_meta( $this->get_user_item_id(), '_lp_retaken_count' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Increase retaken count.\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function increase_retake_count() {\r\n-\t\t$count = $this->get_retaken_count();\r\n-\t\t++$count;\r\n-\r\n-\t\treturn $this->update_meta( '_lp_retaken_count', $count );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update course item and it's child.\r\n-\t *\r\n-\t * @TODO: tungnx - review to modify\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic function save() {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\u002F**\r\n-\t\t * @var LP_User_Item $item\r\n-\t\t *\u002F\r\n-\t\t$this->update();\r\n-\t\t$items = $this->get_items();\r\n-\t\tif ( ! $items ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $items as $item_id => $item ) {\r\n-\t\t\tif ( ! $item->get_status() ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Autofill the end-time if it isn't already set\r\n-\t\t\t *\u002F\r\n-\t\t\tif ( in_array( $item->get_status(), array( 'completed', 'finished' ) ) ) {\r\n-\t\t\t\tif ( ! $item->get_end_time() || $item->get_end_time()->is_null() ) {\r\n-\t\t\t\t\t$item->set_end_time( current_time( 'mysql', 1 ) );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$item->update();\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get passed items.\r\n-\t *\r\n-\t * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed\r\n-\t * @param bool   $with_total - Optional. Include total if TRUE\r\n-\t * @param int    $section_id - Optional. Get in specific section\r\n-\t *\r\n-\t * @return array|bool|mixed\r\n-\t * @deprecated 4.1.6.9\r\n-\t *\u002F\r\n-\tpublic function get_passed_items( $type = '', $with_total = false, $section_id = 0 ) {\r\n-\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\r\n-\t\t$this->read_items();\r\n-\r\n-\t\t$key          = sprintf(\r\n-\t\t\t'%d-%d-%s',\r\n-\t\t\t$this->get_user_id(),\r\n-\t\t\t$this->_course->get_id(),\r\n-\t\t\tmd5( build_query( func_get_args() ) )\r\n-\t\t);\r\n-\t\t$passed_items = LP_Object_Cache::get( $key, 'learn-press\u002Fuser-passed-items' );\r\n-\r\n-\t\tif ( false === $passed_items ) {\r\n-\t\t\t$passed        = 0;\r\n-\t\t\t$total         = 0;\r\n-\t\t\t$section_items = array();\r\n-\r\n-\t\t\t$section = $this->_course->get_sections( 'object', $section_id );\r\n-\r\n-\t\t\tif ( $section_id && $section ) {\r\n-\t\t\t\t$section_items = $section->get_items();\r\n-\r\n-\t\t\t\tif ( $section_items ) {\r\n-\t\t\t\t\t$section_items = array_keys( $section_items );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$items = $this->get_items();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\r\n-\t\t\t\t\tif ( $section_id && ! in_array( $item->get_id(), $section_items ) ) {\r\n-\t\t\t\t\t\tcontinue;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $type ) {\r\n-\t\t\t\t\t\t$item_type = $item->get_data( 'item_type' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$item_type = '';\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $type === $item_type ) {\r\n-\t\t\t\t\t\tif ( $item->get_status( 'graduation' ) == 'passed' ) {\r\n-\t\t\t\t\t\t\t++$passed;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$passed = apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Fcourse-item\u002Fpassed',\r\n-\t\t\t\t\t\t\t$passed,\r\n-\t\t\t\t\t\t\t$item,\r\n-\t\t\t\t\t\t\t$item->get_status()\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\u002F\u002F if ( ! $item->is_preview() ) {\r\n-\t\t\t\t\t\t++$total;\r\n-\t\t\t\t\t\t\u002F\u002F }\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$passed_items = array( $passed, $total );\r\n-\t\t\tLP_Object_Cache::set( $key, $passed_items, 'learn-press\u002Fuser-passed-items' );\r\n-\t\t}\r\n-\r\n-\t\treturn $with_total ? $passed_items : $passed_items[0];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Order ID\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function get_order_id() {\r\n-\t\treturn $this->get_data( 'ref_id', 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Order\r\n-\t *\r\n-\t * @throws Exception\r\n-\t * @since 4.1.3\r\n-\t * @version 1.0.0\r\n-\t * @author tungnx\r\n-\t *\u002F\r\n-\tpublic function get_order() {\r\n-\t\t$order = false;\r\n-\r\n-\t\tif ( $this->get_order_id() ) {\r\n-\t\t\t$order = new LP_Order( $this->get_order_id() );\r\n-\t\t}\r\n-\r\n-\t\treturn $order;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get child item ids by type item\r\n-\t *\r\n-\t * @return object|null\r\n-\t *\u002F\r\n-\tpublic function get_last_user_course() {\r\n-\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\r\n-\t\t$user_course      = null;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$filter_user_course          = new LP_User_Items_Filter();\r\n-\t\t\t$filter_user_course->item_id = $this->get_course_id();\r\n-\t\t\t$filter_user_course->user_id = $this->get_user_id();\r\n-\t\t\t$user_course                 = $lp_user_items_db->get_last_user_course( $filter_user_course );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $user_course;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get courses only by course's user are learning\r\n-\t *\r\n-\t * @param LP_User_Items_Filter|UserItemsFilter $filter\r\n-\t * @param int $total_rows return total row query\r\n-\t *\r\n-\t * @return array|null|int|string\r\n-\t *\u002F\r\n-\tpublic static function get_user_courses( $filter, int &$total_rows = 0 ) {\r\n-\t\ttry {\r\n-\t\t\t\u002F*$key_cache     = md5( json_encode( $filter ) );\r\n-\t\t\t$courses_cache = LP_Cache::instance()->get_cache( $key_cache );\r\n-\r\n-\t\t\tif ( false !== $courses_cache ) {\r\n-\t\t\t\treturn $courses_cache;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\t$courses = LP_User_Items_DB::getInstance()->get_user_courses( $filter, $total_rows );\r\n-\t\t\t\u002F\u002FLP_Cache::instance()->set_cache( $key_cache, $courses );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\t$courses = null;\r\n-\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\r\n-\t\t}\r\n-\r\n-\t\treturn $courses;\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+use LearnPress\\Filters\\UserItemsFilter;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+\n+\u002F**\n+ * Class LP_User_Item_Course\n+ *\u002F\n+\n+class LP_User_Item_Course extends LP_User_Item {\n+\tpublic $_item_type = LP_COURSE_CPT;\n+\tpublic $_ref_type  = LP_ORDER_CPT;\n+\n+\t\u002F**\n+\t * Course\n+\t *\n+\t * @var LP_Course\n+\t *\u002F\n+\tprotected $_course = 0;\n+\n+\t\u002F**\n+\t * @var LP_User\n+\t *\u002F\n+\tprotected $_user = 0;\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_items_by_item_ids = array();\n+\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_items_by_order = array();\n+\n+\t\u002F**\n+\t * @var bool\n+\t *\u002F\n+\tprotected $_loaded = false;\n+\n+\t\u002F**\n+\t * @var LP_User_CURD\n+\t *\u002F\n+\tprotected $_curd = null;\n+\n+\t\u002F**\n+\t * LP_User_Item_Course constructor.\n+\t *\n+\t * @param object|array $item\n+\t *\u002F\n+\tpublic function __construct( $item ) {\n+\t\t\u002F**\n+\t\t * Todo: Fix for item is course_id, will be removed when change all to array or object\n+\t\t * @editor tungnx 4.1.6.9\n+\t\t *\u002F\n+\t\tif ( gettype( $item ) == 'integer' ) {\n+\t\t\t$item_id         = $item;\n+\t\t\t$item            = [];\n+\t\t\t$item['item_id'] = $item_id;\n+\t\t}\n+\n+\t\t$item              = (array) $item;\n+\t\t$item['item_type'] = $this->_item_type;\n+\t\t$item['ref_type']  = $this->_ref_type;\n+\n+\t\tif ( isset( $item['item_id'] ) ) {\n+\t\t\t$this->_course = learn_press_get_course( $item['item_id'] );\n+\t\t}\n+\n+\t\tparent::__construct( $item );\n+\n+\t\t$this->_curd    = new LP_User_CURD();\n+\t\t$this->_changes = array();\n+\t}\n+\n+\t\u002F*public function load() {\n+\t\tif ( ! $this->_loaded ) {\n+\t\t\t$this->read_items();\n+\n+\t\t\t$this->_loaded = true;\n+\t\t}\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Read items' data of course for the user.\n+\t *\n+\t * @param bool $refresh .\n+\t *\n+\t * @return array|bool\n+\t *\u002F\n+\tpublic function read_items( $refresh = false ) {\n+\t\t$user_course_item_id = $this->get_user_item_id();\n+\n+\t\tif ( ! $this->_course || ( ! $user_course_item_id ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$course_items = $this->_course->get_item_ids();\n+\t\t$total_items  = $this->_course->count_items();\n+\n+\t\tif ( empty( $total_items ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$filter            = new LP_User_Items_Filter();\n+\t\t$filter->parent_id = $user_course_item_id;\n+\t\t$filter->user_id   = $this->get_user_id();\n+\t\t$user_course_items = LP_User_Items_DB::getInstance()->get_user_course_items( $filter );\n+\n+\t\tif ( $user_course_items ) {\n+\t\t\t$tmp = array();\n+\t\t\t\u002F\u002F Convert keys of array from numeric to keys is item id\n+\t\t\tforeach ( $user_course_items as $user_course_item ) {\n+\t\t\t\t$tmp[ $user_course_item->item_id ] = $user_course_item;\n+\t\t\t}\n+\n+\t\t\t$user_course_items = $tmp;\n+\t\t\tunset( $tmp );\n+\t\t} else {\n+\t\t\t$user_course_items = array();\n+\t\t}\n+\n+\t\t$items = array();\n+\n+\t\tforeach ( $course_items as $item_id ) {\n+\t\t\tif ( ! empty( $user_course_items[ $item_id ] ) ) {\n+\t\t\t\t$user_course_item = (array) $user_course_items[ $item_id ];\n+\t\t\t} else {\n+\t\t\t\t$user_course_item = array(\n+\t\t\t\t\t'item_id'   => $item_id,\n+\t\t\t\t\t'ref_id'    => $this->get_id(),\n+\t\t\t\t\t'parent_id' => $user_course_item_id,\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$course_item = apply_filters(\n+\t\t\t\t'learn-press\u002Fuser-course-item',\n+\t\t\t\tLP_User_Item::get_item_object( $user_course_item ),\n+\t\t\t\t$user_course_item,\n+\t\t\t\t$this\n+\t\t\t);\n+\n+\t\t\tif ( $course_item ) {\n+\t\t\t\t$items[ $item_id ] = $course_item;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $items;\n+\t}\n+\n+\t\u002F**\n+\t * Get Id of course.\n+\t *\n+\t * @return int\n+\t * @since 3.3.0\n+\t *\u002F\n+\tpublic function get_course_id() {\n+\t\treturn $this->get_data( 'item_id' );\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic function get_finishing_type() {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\u002F*$type = $this->get_meta( 'finishing_type' );\n+\n+\t\tif ( ! $type ) {\n+\t\t\t$type = $this->is_exceeded() \u003C= 0 ? 'exceeded' : 'click';\n+\n+\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), 'finishing_type', $type );\n+\n+\t\t\t$this->set_meta( 'finishing_type', $type );\n+\t\t}\n+\n+\t\treturn $type;*\u002F\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\t\u002F\u002F $this->set_data( $offset, $value );\n+\t\t\u002F\u002F Do not allow to set value directly!\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\t\u002F\u002F Do not allow to unset value directly!\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\t$items = $this->read_items();\n+\n+\t\treturn $items && array_key_exists( $offset, $items ) ? $items[ $offset ] : false;\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\t$items = $this->read_items();\n+\n+\t\treturn array_key_exists( $offset, (array) $items );\n+\t}\n+\n+\t\u002F**\n+\t * @return LP_User_Item|bool\n+\t * @deprecated 4.1.6.9.2\n+\t *\u002F\n+\t\u002F*public function get_viewing_item() {\n+\t\t$item = LP_Global::course_item();\n+\t\tif ( $item ) {\n+\t\t\treturn $this[ $item->get_id() ];\n+\t\t}\n+\n+\t\treturn false;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get course.\n+\t *\n+\t * @param string $return\n+\t *\n+\t * @return bool|LP_Course|int|mixed\n+\t *\u002F\n+\tpublic function get_course( string $return = '' ) {\n+\t\t$course_id = $this->get_data( 'item_id', 0 );\n+\t\tif ( $return == '' ) {\n+\t\t\treturn $course_id ? learn_press_get_course( $course_id ) : false;\n+\t\t}\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\t\u002F**\n+\t * Get result\u002Fprocessing course\n+\t *\n+\t * @param string $prop\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_result( $prop = '' ) {\n+\t\t$results = $this->calculate_course_results();\n+\n+\t\t\u002F\u002F Fix temporary for case call 'grade' - addons called\n+\t\tif ( 'grade' === $prop ) {\n+\t\t\tif ( $results['pass'] ) {\n+\t\t\t\t$results['grade'] = 'passed';\n+\t\t\t} else {\n+\t\t\t\t$results['grade'] = 'failed';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $prop && $results && array_key_exists( $prop, $results ) ? $results[ $prop ] : $results;\n+\t}\n+\n+\t\u002F**\n+\t * Get current progress of course for an user.\n+\t * Firstly, get data from cache if it is already loaded.\n+\t * If data is not loaded to cache then get from meta data.\n+\t * If meta data is not updated then calculate and update it\n+\t *\n+\t * @updated 3.1.0\n+\t *\n+\t * @param string $prop\n+\t *\n+\t * @return float|int\n+\t *\u002F\n+\tpublic function get_results( $prop = 'result' ) {\n+\t\t$course = $this->get_course();\n+\n+\t\tif ( ! $course ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$results = LP_Object_Cache::get(\n+\t\t\t'course-' . $this->get_item_id() . '-' . $this->get_user_id(),\n+\t\t\t'course-results'\n+\t\t);\n+\n+\t\tif ( $results === false ) {\n+\t\t\t$results = $this->calculate_course_results();\n+\n+\t\t\tLP_Object_Cache::set(\n+\t\t\t\t'course-' . $this->get_item_id() . '-' . $this->get_user_id(),\n+\t\t\t\t$results,\n+\t\t\t\t'course-results'\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn $prop && $results && array_key_exists( $prop, $results ) ? $results[ $prop ] : $results;\n+\t}\n+\n+\t\u002F**\n+\t * Calculate course result\n+\t *\u002F\n+\tpublic function calculate_course_results( bool $force_cache = false ) {\n+\t\t$results = array(\n+\t\t\t'count_items'     => 0,\n+\t\t\t'completed_items' => 0,\n+\t\t\t'items'           => array(),\n+\t\t\t'evaluate_type'   => '',\n+\t\t\t'pass'            => 0,\n+\t\t\t'result'          => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$userCourseModel = UserCourseModel::find( $this->get_user_id(), $this->get_course_id(), true );\n+\t\t\tif ( ! $userCourseModel instanceof UserCourseModel ) {\n+\t\t\t\treturn $results;\n+\t\t\t}\n+\n+\t\t\t$results = $userCourseModel->calculate_course_results();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $results;\n+\n+\t\t\u002F\u002F Code old\n+\t\t$items   = array();\n+\t\t$results = array(\n+\t\t\t'count_items'     => 0,\n+\t\t\t'completed_items' => 0,\n+\t\t\t'items'           => array(),\n+\t\t\t'evaluate_type'   => '',\n+\t\t\t'pass'            => 0,\n+\t\t\t'result'          => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$course = learn_press_get_course( $this->get_course_id() );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( 'Course invalid!' );\n+\t\t\t}\n+\n+\t\t\t$key_first_cache = 'calculate_course\u002F' . $this->get_user_id() . '\u002F' . $course->get_id();\n+\t\t\t$results_cache   = LP_Cache::cache_load_first( 'get', $key_first_cache );\n+\t\t\tif ( false !== $results_cache && ! $force_cache ) {\n+\t\t\t\treturn $results_cache;\n+\t\t\t}\n+\n+\t\t\t$this->_course = $course;\n+\n+\t\t\tif ( $this->is_finished() ) {\n+\t\t\t\t\u002F\u002F Get result from lp_user_item_results\n+\t\t\t\t\u002F\u002F Todo: tungnx - set cache\n+\t\t\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\t\t\t}\n+\n+\t\t\tif ( $this->get_status() !== LP_COURSE_ENROLLED ) {\n+\t\t\t\treturn $results;\n+\t\t\t}\n+\n+\t\t\t$count_items           = $course->count_items();\n+\t\t\t$count_items_completed = $this->count_items_completed();\n+\n+\t\t\t$evaluate_type = get_post_meta( $course->get_id(), '_lp_course_result', true );\n+\t\t\tif ( ! $evaluate_type ) {\n+\t\t\t\t$evaluate_type = 'evaluate_lesson';\n+\t\t\t}\n+\t\t\tswitch ( $evaluate_type ) {\n+\t\t\t\tcase 'evaluate_lesson':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_lesson( $count_items_completed, $course->count_items( LP_LESSON_CPT ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_final_quiz':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_final_quiz();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_quiz':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_quizzes_passed( $count_items_completed, $course->count_items( LP_QUIZ_CPT ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_questions':\n+\t\t\t\tcase 'evaluate_mark':\n+\t\t\t\t\t$results_evaluate = $this->evaluate_course_by_question( $evaluate_type );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\t$results_evaluate = apply_filters( 'learn-press\u002Fevaluate_passed_conditions', $results, $evaluate_type, $this );\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\tif ( ! is_array( $results_evaluate ) ) {\n+\t\t\t\t$results_evaluate = array(\n+\t\t\t\t\t'result' => 0,\n+\t\t\t\t\t'pass'   => 0,\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$results_evaluate['result'] = round( $results_evaluate['result'], 2 );\n+\n+\t\t\t$completed_items = intval( $count_items_completed->count_status ?? 0 );\n+\n+\t\t\t$item_types = learn_press_get_course_item_types();\n+\t\t\tforeach ( $item_types as $item_type ) {\n+\t\t\t\t$item_type_key = str_replace( 'lp_', '', $item_type );\n+\n+\t\t\t\t$items[ $item_type_key ] = array(\n+\t\t\t\t\t'completed' => $count_items_completed->{$item_type . '_status_completed'} ?? 0,\n+\t\t\t\t\t'passed'    => $count_items_completed->{$item_type . '_graduation_passed'} ?? 0,\n+\t\t\t\t\t'total'     => $course->count_items( $item_type ),\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$results = array_merge(\n+\t\t\t\t$results_evaluate,\n+\t\t\t\tcompact( 'count_items', 'completed_items', 'items', 'evaluate_type' )\n+\t\t\t);\n+\n+\t\t\t$results = apply_filters(\n+\t\t\t\t'learn-press\u002Fupdate-course-results',\n+\t\t\t\t$results,\n+\t\t\t\t$this->get_item_id(),\n+\t\t\t\t$this->get_user_id(),\n+\t\t\t\t$this\n+\t\t\t);\n+\n+\t\t\tLP_Cache::cache_load_first( 'set', $key_first_cache, $results );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $results;\n+\t}\n+\n+\t\u002F**\n+\t * Get graduation\n+\t *\n+\t * @param string $context\n+\t *\n+\t * @return string\n+\t * @deprecated 4.1.6.9.3\n+\t *\u002F\n+\tpublic function get_grade( string $context = '' ): string {\n+\t\t$grade = $this->get_graduation() ?? '';\n+\n+\t\treturn $context == 'display' ? learn_press_course_grade_html( $grade, false ) : $grade;\n+\t}\n+\n+\t\u002F**\n+\t * @param int $decimal\n+\t *\n+\t * @return int|string\n+\t *\u002F\n+\tpublic function get_percent_result( $decimal = 1 ) {\n+\t\treturn round( $this->get_result( 'result' ), $decimal );\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course result by lessons.\n+\t *\n+\t * @param $count_items_completed\n+\t * @param int $total_item_lesson\n+\t *\n+\t * @return array\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function evaluate_course_by_lesson( $count_items_completed, int $total_item_lesson = 0 ): array {\n+\t\t$evaluate = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\t$count_items_completed = intval( $count_items_completed->{LP_LESSON_CPT . '_status_completed'} ?? 0 );\n+\n+\t\tif ( $total_item_lesson && $count_items_completed ) {\n+\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_lesson;\n+\t\t}\n+\n+\t\t$passing_condition = $this->_course->get_passing_condition();\n+\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t$evaluate['pass'] = 1;\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course result by final quiz.\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tprotected function evaluate_course_by_final_quiz(): array {\n+\t\t$lp_user_items_db       = LP_User_Items_DB::getInstance();\n+\t\t$lp_user_item_result_db = LP_User_Items_Result_DB::instance();\n+\t\t$evaluate               = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$quiz_final_id = get_post_meta( $this->get_course_id(), '_lp_final_quiz', true );\n+\n+\t\t\tif ( ! $quiz_final_id ) {\n+\t\t\t\tthrow new Exception( '' );\n+\t\t\t}\n+\n+\t\t\t$quiz_final = learn_press_get_quiz( $quiz_final_id );\n+\n+\t\t\tif ( ! $quiz_final ) {\n+\t\t\t\tthrow new Exception( 'Quiz final invalid' );\n+\t\t\t}\n+\n+\t\t\t$user_course = $this->get_last_user_course();\n+\n+\t\t\tif ( ! $user_course ) {\n+\t\t\t\tthrow new Exception( 'User course not exists' );\n+\t\t\t}\n+\n+\t\t\t$filter             = new LP_User_Items_Filter();\n+\t\t\t$filter->query_type = 'get_row';\n+\t\t\t$filter->parent_id  = $user_course->user_item_id;\n+\t\t\t$filter->item_type  = LP_QUIZ_CPT;\n+\t\t\t$filter->item_id    = $quiz_final_id;\n+\t\t\t$user_quiz          = $lp_user_items_db->get_user_course_items_by_item_type( $filter );\n+\n+\t\t\tif ( ! $user_quiz ) {\n+\t\t\t\tthrow new Exception();\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get result did quiz\n+\t\t\t$quiz_result = $lp_user_item_result_db->get_result( $user_quiz->user_item_id );\n+\n+\t\t\tif ( $quiz_result ) {\n+\t\t\t\tif ( ! isset( $quiz_result['result'] ) ) {\n+\t\t\t\t\t$evaluate['result'] = $quiz_result['user_mark'] * 100 \u002F $quiz_result['mark'];\n+\t\t\t\t} else {\n+\t\t\t\t\t$evaluate['result'] = $quiz_result['result'];\n+\t\t\t\t}\n+\n+\t\t\t\t$passing_condition = floatval( $quiz_final->get_data( 'passing_grade', 0 ) );\n+\t\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by count quizzes passed\u002Fall quizzes.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function evaluate_course_by_quizzes_passed( $count_items_completed, $total_item_quizzes ): array {\n+\t\t$evaluate = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\t$count_items_completed = intval( $count_items_completed->{LP_QUIZ_CPT . '_graduation_passed'} ?? 0 );\n+\n+\t\tif ( $total_item_quizzes && $count_items_completed ) {\n+\t\t\t$evaluate['result'] = $count_items_completed * 100 \u002F $total_item_quizzes;\n+\n+\t\t\t$passing_condition = $this->_course->get_passing_condition();\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by count questions true\u002Fall questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprivate function evaluate_course_by_questions( &$evaluate, $lp_quizzes, $total_questions ) {\n+\t\t$lp_user_item_results_db = LP_User_Items_Result_DB::instance();\n+\t\t$count_questions_correct = 0;\n+\n+\t\t\u002F\u002F get questions correct\n+\t\tforeach ( $lp_quizzes as $lp_quiz ) {\n+\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\n+\t\t\tif ( $lp_quiz_result ) {\n+\t\t\t\t$count_questions_correct += $lp_quiz_result['question_correct'];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $total_questions && $count_questions_correct ) {\n+\t\t\t$evaluate['result'] = $count_questions_correct * 100 \u002F $total_questions;\n+\n+\t\t\t$passing_condition = $this->_course->get_passing_condition();\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by total mark of questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprivate function evaluate_course_by_mark( &$evaluate, $lp_quizzes, $total_mark_questions ) {\n+\t\t$lp_user_item_results_db       = LP_User_Items_Result_DB::instance();\n+\t\t$count_mark_questions_receiver = 0;\n+\n+\t\tforeach ( $lp_quizzes as $lp_quiz ) {\n+\t\t\t$lp_quiz_result = $lp_user_item_results_db->get_result( $lp_quiz->user_item_id );\n+\t\t\tif ( $lp_quiz_result ) {\n+\t\t\t\t$count_mark_questions_receiver += $lp_quiz_result['user_mark'];\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $count_mark_questions_receiver && $total_mark_questions ) {\n+\t\t\t$evaluate['result'] = $count_mark_questions_receiver * 100 \u002F $total_mark_questions;\n+\n+\t\t\t$passing_condition = floatval( $this->_course->get_passing_condition() );\n+\t\t\tif ( $evaluate['result'] >= $passing_condition ) {\n+\t\t\t\t$evaluate['pass'] = 1;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Evaluate course results by total mark of questions.\n+\t *\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t * @version 1.0.0\n+\t *\u002F\n+\tprotected function evaluate_course_by_question( string $evaluate_type ): array {\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$evaluate         = array(\n+\t\t\t'result' => 0,\n+\t\t\t'pass'   => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user_course = $this->get_last_user_course();\n+\n+\t\t\tif ( ! $user_course ) {\n+\t\t\t\tthrow new Exception( 'User course not exists!' );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F get quiz_ids\n+\t\t\t$filter_get_quiz_ids            = new LP_User_Items_Filter();\n+\t\t\t$filter_get_quiz_ids->parent_id = $user_course->user_item_id;\n+\t\t\t$filter_get_quiz_ids->item_type = LP_QUIZ_CPT;\n+\t\t\t$lp_quizzes                     = $lp_user_items_db->get_user_course_items_by_item_type( $filter_get_quiz_ids );\n+\n+\t\t\t\u002F\u002F Get total questions, mark\n+\t\t\t\u002F\u002F Todo: Tungnx - save (questions, mark) total when save quiz, course, if not query again\n+\t\t\t$course = $this->_course;\n+\t\t\tif ( is_int( $course ) ) {\n+\t\t\t\t$course = learn_press_get_course( $course );\n+\t\t\t}\n+\n+\t\t\t$total_questions     = 0;\n+\t\t\t$total_mark_question = 0;\n+\n+\t\t\t\u002F\u002F Get all items' course\n+\t\t\t$sections_items = $course->get_full_sections_and_items_course();\n+\n+\t\t\tforeach ( $sections_items as $section_items ) {\n+\t\t\t\tforeach ( $section_items->items as $item ) {\n+\t\t\t\t\t$itemObj = $course->get_item( $item->id );\n+\n+\t\t\t\t\tif ( ! $itemObj instanceof LP_Course_Item ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $item->type == LP_QUIZ_CPT ) {\n+\t\t\t\t\t\t$total_questions     += count( $itemObj->get_question_ids() );\n+\t\t\t\t\t\t$total_mark_question += $itemObj->get_mark();\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t\u002F\u002F End get total questions, mark\n+\n+\t\t\tswitch ( $evaluate_type ) {\n+\t\t\t\tcase 'evaluate_questions':\n+\t\t\t\t\t$this->evaluate_course_by_questions( $evaluate, $lp_quizzes, $total_questions );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'evaluate_mark':\n+\t\t\t\t\t$this->evaluate_course_by_mark( $evaluate, $lp_quizzes, $total_mark_question );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Get results of each quiz - has questions\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $evaluate;\n+\t}\n+\n+\t\u002F**\n+\t * Check course of use has enrolled\n+\t *\u002F\n+\tpublic function is_enrolled(): bool {\n+\t\treturn $this->get_status() == LP_COURSE_ENROLLED;\n+\t}\n+\n+\t\u002F**\n+\t * Check course of use has purchased\n+\t * @author tungnx\n+\t * @since 4.1.3\n+\t * @version 1.0.0\n+\t *\u002F\n+\tpublic function is_purchased(): bool {\n+\t\treturn $this->get_status() == LP_COURSE_PURCHASED;\n+\t}\n+\n+\tpublic function get_level() {\n+\t\tif ( ! $this->is_exists() ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$level = 10;\n+\n+\t\tswitch ( $this->get_status() ) {\n+\t\t\tcase 'enrolled':\n+\t\t\t\t$level = 20;\n+\t\t\t\tbreak;\n+\t\t\tcase 'finished':\n+\t\t\t\t$level = 30;\n+\t\t\t\tbreak;\n+\n+\t\t}\n+\n+\t\treturn $level;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.1.6.9.2\n+\t *\u002F\n+\t\u002F*protected function _is_passed( $result ) {\n+\t\t$is_passed = LP_COURSE_GRADUATION_FAILED;\n+\t\t$result    = round( $result, 2 );\n+\n+\t\tif ( $result >= $this->get_passing_condition() ) {\n+\t\t\t$is_passed = LP_COURSE_GRADUATION_PASSED;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learnpress\u002Fuser\u002Fcourse\u002Fis-passed', $is_passed, $result );\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get completed items.\n+\t *\n+\t * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed\n+\t * @param bool   $with_total - Optional. Include total if TRUE\n+\t * @param int    $section_id - Optional. Get in specific section\n+\t *\n+\t * @return array|bool|mixed\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic function get_completed_items( $type = '', $with_total = false, $section_id = 0 ) {\n+\n+\t\t$this->read_items();\n+\n+\t\t\u002F\u002F $completed_items = array(0,100);\n+\t\t\u002F\u002F return $with_total ? $completed_items : $completed_items[0];\n+\n+\t\tif ( ! $this->_course ) {\n+\t\t\treturn 0;\n+\t\t}\n+\n+\t\t$key = sprintf(\n+\t\t\t'%d-%d-%s',\n+\t\t\t$this->get_user_id(),\n+\t\t\t$this->_course->get_id(),\n+\t\t\tmd5( build_query( func_get_args() ) )\n+\t\t);\n+\n+\t\t$completed_items = LP_Object_Cache::get( $key, 'learn-press\u002Fuser-completed-items' );\n+\n+\t\tif ( false === $completed_items ) {\n+\t\t\t$completed     = 0;\n+\t\t\t$total         = 0;\n+\t\t\t$section_items = array();\n+\n+\t\t\tif ( $section_id ) {\n+\t\t\t\t$section = $this->_course->get_sections( 'object', $section_id );\n+\n+\t\t\t\tif ( $section ) {\n+\t\t\t\t\t$section_items = $section->get_items();\n+\n+\t\t\t\t\tif ( $section_items ) {\n+\t\t\t\t\t\t$section_items = array_keys( $section_items );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$items = $this->get_items();\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\n+\t\t\t\t\tif ( $section_id && ! in_array( $item->get_id(), $section_items ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $type ) {\n+\t\t\t\t\t\t$item_type = $item->get_data( 'item_type' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$item_type = '';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $type === $item_type ) {\n+\t\t\t\t\t\tif ( $item->get_status() == 'completed' ) {\n+\t\t\t\t\t\t\t++$completed;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$completed = apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fcourse-item\u002Fcompleted',\n+\t\t\t\t\t\t\t$completed,\n+\t\t\t\t\t\t\t$item,\n+\t\t\t\t\t\t\t$item->get_status()\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t\u002F\u002F if ( ! $item->is_preview() ) {\n+\t\t\t\t\t\t++$total;\n+\t\t\t\t\t\t\u002F\u002F }\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$completed_items = array( $completed, $total );\n+\t\t\tLP_Object_Cache::set( $key, $completed_items, 'learn-press\u002Fuser-completed-items' );\n+\t\t}\n+\n+\t\treturn $with_total ? $completed_items : $completed_items[0];\n+\t}\n+\n+\t\u002F**\n+\t * Get completed items.\n+\t *\n+\t * @return object\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1\n+\t * @since 4.0.0\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function count_items_completed() {\n+\t\t$lp_user_items_db      = LP_User_Items_DB::getInstance();\n+\t\t$count_items_completed = new stdClass();\n+\n+\t\ttry {\n+\t\t\t$course = learn_press_get_course( $this->get_course_id() );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tthrow new Exception( 'Course is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$user_course = $this->get_last_user_course();\n+\t\t\tif ( ! $user_course ) {\n+\t\t\t\tthrow new Exception( 'User course is invalid!' );\n+\t\t\t}\n+\n+\t\t\t$filter_count             = new LP_User_Items_Filter();\n+\t\t\t$filter_count->parent_id  = $user_course->user_item_id;\n+\t\t\t$filter_count->item_id    = $this->get_course_id();\n+\t\t\t$filter_count->user_id    = $this->get_user_id();\n+\t\t\t$filter_count->status     = 'completed';\n+\t\t\t$filter_count->graduation = LP_COURSE_GRADUATION_PASSED;\n+\t\t\t$count_items_completed    = $lp_user_items_db->count_items_of_course_with_status( $filter_count );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $count_items_completed;\n+\t}\n+\n+\t\u002F**\n+\t * Get items completed by percentage.\n+\t *\n+\t * @param string $type - Optional. Filter by type or not\n+\t * @param int    $section_id - Optional. Get in specific section\n+\t *\n+\t * @return float|int\n+\t *\u002F\n+\tpublic function get_percent_completed_items( $type = '', $section_id = 0 ) {\n+\t\t$values = $this->get_completed_items( $type, true, $section_id );\n+\t\tif ( $values[1] ) {\n+\t\t\treturn $values[0] \u002F $values[1] * 100;\n+\t\t}\n+\n+\t\treturn 0;\n+\t}\n+\n+\t\u002F**\n+\t * Get passing condition criteria.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_passing_condition() {\n+\t\treturn $this->_course->get_passing_condition();\n+\t}\n+\n+\t\u002F**\n+\t * Get all items in course.\n+\t *\n+\t * @param bool $refresh\n+\t *\n+\t * @return LP_User_Item[]\n+\t *\u002F\n+\tpublic function get_items( $refresh = false ) {\n+\t\treturn $this->read_items();\n+\n+\t\t\u002F*\n+\t\treturn LP_Object_Cache::get(\n+\t\t\t$this->get_user_id() . '-' . $this->get_id(),\n+\t\t\t'learn-press\u002Fuser-course-item-objects'\n+\t\t);*\u002F\n+\t}\n+\n+\t\u002F**\n+\t * Check course is completed or not.\n+\t *\n+\t * @return bool\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t *\u002F\n+\tpublic function is_finished(): bool {\n+\t\treturn $this->get_status() == LP_COURSE_FINISHED;\n+\t}\n+\n+\t\u002F**\n+\t * Check course graduation is passed or not.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_graduated() {\n+\t\treturn $this->get_graduation();\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t * @deprecated 4.1.6.9.2\n+\t *\u002F\n+\t\u002F*public function can_graduated() {\n+\t\treturn $this->get_results( 'result' ) >= $this->get_passing_condition();\n+\t}*\u002F\n+\n+\tfunction __destruct() {\n+\t\t\u002F\u002F TODO: Implement __unset() method.\n+\t}\n+\n+\t\u002F**\n+\t * Get item user attend on course by item_id.\n+\t *\n+\t * @param int $item_id\n+\t *\n+\t * @return bool|LP_User_Item\n+\t * @editor tungnx\n+\t * @modify 4.1.6.9\n+\t * @since 3.0.0\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function get_item( $item_id ) {\n+\t\t$item = false;\n+\n+\t\ttry {\n+\t\t\t$filter          = new LP_User_Items_Filter();\n+\t\t\t$filter->item_id = $item_id;\n+\t\t\t$filter->ref_id  = $this->get_course_id();\n+\t\t\t$filter->user_id = $this->get_user();\n+\t\t\t$item_result     = LP_User_Items_DB::getInstance()->get_user_course_item( $filter );\n+\n+\t\t\tif ( $item_result ) {\n+\t\t\t\t$item_result = (array) $item_result;\n+\t\t\t\t$item        = LP_User_Item::get_item_object( $item_result );\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $item;\n+\t}\n+\n+\t\u002F**\n+\t * @param        $item_id\n+\t * @param string $prop\n+\t *\n+\t * @return bool|float|int\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function get_item_result( $item_id, $prop = 'result' ) {\n+\t\t$item = $this->get_item( $item_id );\n+\n+\t\tif ( $item instanceof LP_User_Item_Quiz ) {\n+\t\t\t\u002F**\n+\t\t\t * @var LP_User_Item_Quiz $item\n+\t\t\t *\u002F\n+\t\t\treturn $item->get_graduation();\n+\t\t} elseif ( $item ) {\n+\t\t\treturn $item->get_result( $prop );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * @param $id\n+\t *\n+\t * @return LP_User_Item_Quiz|bool\n+\t *\u002F\n+\tpublic function get_item_quiz( $id ) {\n+\n+\t\treturn $this->get_item( $id );\n+\t}\n+\n+\t\u002F**\n+\t * Get number of retaken times for user course.\n+\t *\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_retaken_count(): int {\n+\t\treturn (int) ( learn_press_get_user_item_meta( $this->get_user_item_id(), '_lp_retaken_count' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Increase retaken count.\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function increase_retake_count() {\n+\t\t$count = $this->get_retaken_count();\n+\t\t++$count;\n+\n+\t\treturn $this->update_meta( '_lp_retaken_count', $count );\n+\t}\n+\n+\t\u002F**\n+\t * Update course item and it's child.\n+\t *\n+\t * @TODO: tungnx - review to modify\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic function save() {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\u002F**\n+\t\t * @var LP_User_Item $item\n+\t\t *\u002F\n+\t\t$this->update();\n+\t\t$items = $this->get_items();\n+\t\tif ( ! $items ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tforeach ( $items as $item_id => $item ) {\n+\t\t\tif ( ! $item->get_status() ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F**\n+\t\t\t * Autofill the end-time if it isn't already set\n+\t\t\t *\u002F\n+\t\t\tif ( in_array( $item->get_status(), array( 'completed', 'finished' ) ) ) {\n+\t\t\t\tif ( ! $item->get_end_time() || $item->get_end_time()->is_null() ) {\n+\t\t\t\t\t$item->set_end_time( current_time( 'mysql', 1 ) );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$item->update();\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get passed items.\n+\t *\n+\t * @param string $type - Optional. Filter by type (such lp_quiz, lp_lesson) if passed\n+\t * @param bool   $with_total - Optional. Include total if TRUE\n+\t * @param int    $section_id - Optional. Get in specific section\n+\t *\n+\t * @return array|bool|mixed\n+\t * @deprecated 4.1.6.9\n+\t *\u002F\n+\tpublic function get_passed_items( $type = '', $with_total = false, $section_id = 0 ) {\n+\t\t_deprecated_function( __FUNCTION__, '4.1.6.9' );\n+\t\t$this->read_items();\n+\n+\t\t$key          = sprintf(\n+\t\t\t'%d-%d-%s',\n+\t\t\t$this->get_user_id(),\n+\t\t\t$this->_course->get_id(),\n+\t\t\tmd5( build_query( func_get_args() ) )\n+\t\t);\n+\t\t$passed_items = LP_Object_Cache::get( $key, 'learn-press\u002Fuser-passed-items' );\n+\n+\t\tif ( false === $passed_items ) {\n+\t\t\t$passed        = 0;\n+\t\t\t$total         = 0;\n+\t\t\t$section_items = array();\n+\n+\t\t\t$section = $this->_course->get_sections( 'object', $section_id );\n+\n+\t\t\tif ( $section_id && $section ) {\n+\t\t\t\t$section_items = $section->get_items();\n+\n+\t\t\t\tif ( $section_items ) {\n+\t\t\t\t\t$section_items = array_keys( $section_items );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$items = $this->get_items();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $item ) {\n+\n+\t\t\t\t\tif ( $section_id && ! in_array( $item->get_id(), $section_items ) ) {\n+\t\t\t\t\t\tcontinue;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $type ) {\n+\t\t\t\t\t\t$item_type = $item->get_data( 'item_type' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$item_type = '';\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $type === $item_type ) {\n+\t\t\t\t\t\tif ( $item->get_status( 'graduation' ) == 'passed' ) {\n+\t\t\t\t\t\t\t++$passed;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$passed = apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Fcourse-item\u002Fpassed',\n+\t\t\t\t\t\t\t$passed,\n+\t\t\t\t\t\t\t$item,\n+\t\t\t\t\t\t\t$item->get_status()\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\t\u002F\u002F if ( ! $item->is_preview() ) {\n+\t\t\t\t\t\t++$total;\n+\t\t\t\t\t\t\u002F\u002F }\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$passed_items = array( $passed, $total );\n+\t\t\tLP_Object_Cache::set( $key, $passed_items, 'learn-press\u002Fuser-passed-items' );\n+\t\t}\n+\n+\t\treturn $with_total ? $passed_items : $passed_items[0];\n+\t}\n+\n+\t\u002F**\n+\t * Get Order ID\n+\t *\n+\t * @return array|mixed\n+\t * @since 4.1.3\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function get_order_id() {\n+\t\treturn $this->get_data( 'ref_id', 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Get Order\n+\t *\n+\t * @throws Exception\n+\t * @since 4.1.3\n+\t * @version 1.0.0\n+\t * @author tungnx\n+\t *\u002F\n+\tpublic function get_order() {\n+\t\t$order = false;\n+\n+\t\tif ( $this->get_order_id() ) {\n+\t\t\t$order = new LP_Order( $this->get_order_id() );\n+\t\t}\n+\n+\t\treturn $order;\n+\t}\n+\n+\t\u002F**\n+\t * Get child item ids by type item\n+\t *\n+\t * @return object|null\n+\t *\u002F\n+\tpublic function get_last_user_course() {\n+\t\t$lp_user_items_db = LP_User_Items_DB::getInstance();\n+\t\t$user_course      = null;\n+\n+\t\ttry {\n+\t\t\t$filter_user_course          = new LP_User_Items_Filter();\n+\t\t\t$filter_user_course->item_id = $this->get_course_id();\n+\t\t\t$filter_user_course->user_id = $this->get_user_id();\n+\t\t\t$user_course                 = $lp_user_items_db->get_last_user_course( $filter_user_course );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $user_course;\n+\t}\n+\n+\t\u002F**\n+\t * Get courses only by course's user are learning\n+\t *\n+\t * @param LP_User_Items_Filter|UserItemsFilter $filter\n+\t * @param int $total_rows return total row query\n+\t *\n+\t * @return array|null|int|string\n+\t *\u002F\n+\tpublic static function get_user_courses( $filter, int &$total_rows = 0 ) {\n+\t\ttry {\n+\t\t\t\u002F*$key_cache     = md5( json_encode( $filter ) );\n+\t\t\t$courses_cache = LP_Cache::instance()->get_cache( $key_cache );\n+\n+\t\t\tif ( false !== $courses_cache ) {\n+\t\t\t\treturn $courses_cache;\n+\t\t\t}*\u002F\n+\n+\t\t\t$courses = LP_User_Items_DB::getInstance()->get_user_courses( $filter, $total_rows );\n+\t\t\t\u002F\u002FLP_Cache::instance()->set_cache( $key_cache, $courses );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\t$courses = null;\n+\t\t\terror_log( __FUNCTION__ . ': ' . $e->getMessage() );\n+\t\t}\n+\n+\t\treturn $courses;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,808 +1,808 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_User_Item\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-class LP_User_Item extends LP_Abstract_Object_Data {\r\n-\t\u002F**\r\n-\t * Auto increment\r\n-\t *\r\n-\t * @var int\r\n-\t *\u002F\r\n-\tpublic $_user_item_id = 0;\r\n-\t\u002F**\r\n-\t * User id\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_user_id = 0;\r\n-\t\u002F**\r\n-\t * Item id (course, lesson, quiz ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_item_id = 0;\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_start_time = '';\r\n-\t\u002F**\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_end_time = '';\r\n-\t\u002F**\r\n-\t * Item type (course, lesson, quiz ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_item_type = '';\r\n-\t\u002F**\r\n-\t * Status\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_status = '';\r\n-\t\u002F**\r\n-\t * Graduation\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_graduation = '';\r\n-\t\u002F**\r\n-\t * Ref id (Order, course ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_ref_id = '';\r\n-\t\u002F**\r\n-\t * Ref type (Order, course ...)\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_ref_type = '';\r\n-\t\u002F**\r\n-\t * Parent id\r\n-\t *\r\n-\t * @var string\r\n-\t *\u002F\r\n-\tpublic $_parent_id = '';\r\n-\t\u002F**\r\n-\t * Key get data start time form DB.\r\n-\t *\u002F\r\n-\tconst KEY_DATA_START_TIME = 'start_time';\r\n-\t\u002F**\r\n-\t * Key get data end time form DB.\r\n-\t *\u002F\r\n-\tconst KEY_DATA_END_TIME = 'end_time';\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_Item constructor.\r\n-\t *\r\n-\t * @param array $item . A record fetched from table _learnpress_user_items\r\n-\t *\u002F\r\n-\tpublic function __construct( $item ) {\r\n-\t\tif ( is_numeric( $item ) ) {\r\n-\t\t\t$item = array( 'item_id' => $item );\r\n-\t\t} else {\r\n-\t\t\t$item = (array) $item;\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F $this->_data = self::get_empty_item();\r\n-\r\n-\t\tparent::__construct( $item );\r\n-\t\t$this->set_default_data( $item );\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set data from passed args\r\n-\t *\r\n-\t * @param array $item\r\n-\t *\u002F\r\n-\tprotected function set_default_data( $item ) {\r\n-\t\t$this->_changes = array();\r\n-\t\t$item_id        = 0;\r\n-\r\n-\t\tif ( ! empty( $item['user_item_id'] ) ) {\r\n-\t\t\t$this->set_data( 'user_item_id', absint( $item['user_item_id'] ) );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $item['item_id'] ) ) {\r\n-\t\t\t$item['item_id'] = absint( $item['item_id'] );\r\n-\r\n-\t\t\t$this->set_id( $item['item_id'] );\r\n-\t\t\t$this->set_data( 'item_id', $item['item_id'] );\r\n-\t\t\t$this->set_data( 'item_type', learn_press_get_post_type( $item['item_id'] ) );\r\n-\t\t\t$item_id = $item['item_id'];\r\n-\t\t}\r\n-\r\n-\t\t$this->set_start_time( $item[ self::KEY_DATA_START_TIME ] ?? time() );\r\n-\t\t$this->set_end_time( $item[ self::KEY_DATA_END_TIME ] ?? '' );\r\n-\t\t$this->set_user_id( absint( $item['user_id'] ?? get_current_user_id() ) );\r\n-\t\t$this->set_status( $item['status'] ?? '' );\r\n-\r\n-\t\tif ( ! empty( $item['ref_id'] ) ) {\r\n-\t\t\t$item['ref_id'] = absint( $item['ref_id'] );\r\n-\r\n-\t\t\t$this->set_ref_id( $item['ref_id'] );\r\n-\t\t\tif ( empty( $item['ref_type'] ) ) {\r\n-\t\t\t\t$this->set_data( 'ref_type', learn_press_get_post_type( $item['ref_id'] ) );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $item['ref_type'] ) ) {\r\n-\t\t\t$this->set_data( 'ref_type', $item['ref_type'] );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $item['parent_id'] ) ) {\r\n-\t\t\t$item['parent_id'] = absint( $item['parent_id'] );\r\n-\r\n-\t\t\t$this->set_parent_id( $item['parent_id'] );\r\n-\t\t}\r\n-\r\n-\t\tif ( ! empty( $item['access_level'] ) ) {\r\n-\t\t\t$this->set_data( 'access_level', $item['access_level'] );\r\n-\t\t}\r\n-\r\n-\t\t$this->set_data( 'graduation', $item['graduation'] ?? '' );\r\n-\t}\r\n-\r\n-\tpublic function set_user_id( $user_id ) {\r\n-\t\t$this->set_data( 'user_id', $user_id );\r\n-\t}\r\n-\r\n-\tpublic function get_user_id() {\r\n-\t\treturn $this->get_data( 'user_id' );\r\n-\t}\r\n-\r\n-\tpublic function set_ref_id( $ref_id ) {\r\n-\t\t$this->set_data( 'ref_id', $ref_id );\r\n-\t\t$this->set_data( 'ref_type', learn_press_get_post_type( $ref_id ) );\r\n-\t}\r\n-\r\n-\tpublic function get_parent_id() {\r\n-\t\treturn absint( $this->get_data( 'parent_id' ) );\r\n-\t}\r\n-\r\n-\tpublic function set_parent_id( $parent_id ) {\r\n-\t\t$this->set_data( 'parent_id', $parent_id );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get access level to a course.\r\n-\t *\r\n-\t * @return int\r\n-\t * @since 3.x.x\r\n-\t *\u002F\r\n-\tpublic function get_access_level() {\r\n-\t\treturn absint( $this->get_data( 'access_level' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get type of item. Consider is post-type.\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic function get_type() {\r\n-\t\treturn $this->get_data( 'item_type' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set start-time.\r\n-\t *\r\n-\t * @param mixed $time .\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function set_start_time( $time = '' ): LP_User_Item {\r\n-\t\t$this->set_data_date( 'start_time', $time );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get start-time.\r\n-\t *\r\n-\t * @param string $format\r\n-\t * @param bool   $local\r\n-\t *\r\n-\t * @return string|LP_Datetime|false\r\n-\t *\u002F\r\n-\tpublic function get_start_time( string $format = '', $local = false ) {\r\n-\t\t$date = $this->get_data( self::KEY_DATA_START_TIME );\r\n-\r\n-\t\treturn $this->format_time( $date, $format, $local );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set end-time for item.\r\n-\t *\r\n-\t * @param mixed $time\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function set_end_time( $time = '' ): LP_User_Item {\r\n-\t\t$this->set_data_date( 'end_time', $time );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get end-time.\r\n-\t *\r\n-\t * @param string $format\r\n-\t *\r\n-\t * @return string|LP_Datetime\r\n-\t *\u002F\r\n-\tpublic function get_end_time( string $format = '' ) {\r\n-\t\t$date = $this->get_data( self::KEY_DATA_END_TIME );\r\n-\r\n-\t\treturn $this->format_time( $date, $format );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string|int|LP_Datetime $date\r\n-\t * @param string                 $format\r\n-\t * @param bool                   $local\r\n-\t *\r\n-\t * @return bool|float|int|LP_Datetime|string\r\n-\t *\u002F\r\n-\tpublic function format_time( $date, $format = '', $local = false ) {\r\n-\t\tif ( ! $date ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( ! $date instanceof LP_Datetime ) {\r\n-\t\t\t$date = new LP_Datetime( $date );\r\n-\t\t}\r\n-\r\n-\t\treturn $format ? $date->format( $format, $local ) : $date;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get expiration time.\r\n-\t *\r\n-\t * @return string|LP_Datetime $time\r\n-\t * @since 3.3.0\r\n-\t * @version 3.3.2\r\n-\t *\u002F\r\n-\tpublic function get_expiration_time() {\r\n-\t\t$duration   = get_post_meta( $this->get_item_id(), '_lp_duration', true );\r\n-\t\t$start_time = $this->get_start_time()->getTimestamp();\r\n-\r\n-\t\tif ( ! absint( $duration ) || ! $start_time ) {\r\n-\t\t\t$expire = null;\r\n-\t\t} else {\r\n-\t\t\t\u002F\u002F Convert duration from string to seconds.\r\n-\t\t\tif ( ! is_numeric( $duration ) ) {\r\n-\t\t\t\t$duration = strtotime( $duration ) - time();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$expire_time = $start_time + $duration;\r\n-\t\t\t$expire      = new LP_Datetime( $expire_time );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-item\u002Fexpiration-time', $expire, $duration, $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set item-status.\r\n-\t *\r\n-\t * @param string $status .\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function set_status( string $status ): LP_User_Item {\r\n-\t\t$this->_set_data( 'status', $status );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get item status.\r\n-\t *\r\n-\t * @param string $field\r\n-\t * @param bool $force_cache Reset first cache\r\n-\t *\r\n-\t * @version 1.0.1\r\n-\t * @return string\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t *\u002F\r\n-\tpublic function get_status( string $field = 'status', bool $force_cache = false ): string {\r\n-\t\t$got_status = '';\r\n-\r\n-\t\ttry {\r\n-\t\t\t\u002F\u002F User is Guest\r\n-\t\t\tif ( (int) $this->get_user_id() === 0 ) {\r\n-\t\t\t\treturn $got_status;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( LP_COURSE_CPT === $this->get_type() ) {\r\n-\t\t\t\treturn $this->get_data( $field );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F*error_log('status user item id: ' . $this->get_id());\r\n-\t\t\terror_log('status user item type: ' . $this->get_type());\r\n-\t\t\terror_log('status user course status: ' . $this->get_data( $field ));*\u002F\r\n-\r\n-\t\t\t$lp_user_item = LP_User_Items_DB::getInstance();\r\n-\t\t\t$filter       = new LP_User_Items_Filter();\r\n-\r\n-\t\t\t$filter->user_id   = $this->get_user_id();\r\n-\t\t\t$filter->item_id   = $this->get_item_id();\r\n-\t\t\t$filter->ref_id    = $this->get_data( 'ref_id' );\r\n-\t\t\t$filter->parent_id = $this->get_parent_id();\r\n-\r\n-\t\t\t$user_item = $lp_user_item->get_user_course_item( $filter, $force_cache );\r\n-\r\n-\t\t\tif ( ! empty( $user_item ) && isset( $user_item->$field ) ) {\r\n-\t\t\t\t$got_status = $user_item->$field;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$this->set_data( $field, $got_status );\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t}\r\n-\r\n-\t\treturn $got_status;\r\n-\t}\r\n-\r\n-\tpublic function is_exists() {\r\n-\t\treturn ! ! $this->get_user_item_id();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param string $return\r\n-\t *\r\n-\t * @return LP_User|int\r\n-\t *\u002F\r\n-\tpublic function get_user( $return = '' ) {\r\n-\t\treturn $this->get_data( 'user_id', 0 );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get course.\r\n-\t *\r\n-\t * @param string $return\r\n-\t *\r\n-\t * @return bool|LP_Course|int|mixed\r\n-\t *\u002F\r\n-\tpublic function get_course( string $return = '' ) {\r\n-\t\t$course_id = $this->get_data( 'ref_id', 0 );\r\n-\t\tif ( $return == '' ) {\r\n-\t\t\treturn $course_id ? learn_press_get_course( $course_id ) : false;\r\n-\t\t}\r\n-\r\n-\t\treturn $course_id;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_user_item_id() {\r\n-\t\treturn intval( $this->get_data( 'user_item_id' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Change the primary key user_item_id of user-items.\r\n-\t * Only use zero value to force creating new item.\r\n-\t *\r\n-\t * @param int $user_item_id\r\n-\t *\u002F\r\n-\tpublic function set_user_item_id( $user_item_id ) {\r\n-\t\t$this->_set_data( 'user_item_id', absint( $user_item_id ) );\r\n-\t}\r\n-\r\n-\tpublic function get_item_id() {\r\n-\t\treturn $this->get_data( 'item_id' );\r\n-\t}\r\n-\r\n-\tpublic function get_parent() {\r\n-\t\t$user   = learn_press_get_user( $this->get_user_id() );\r\n-\t\t$ref_id = $this->get_data( 'ref_id' );\r\n-\r\n-\t\tif ( get_post_type( $ref_id ) === LP_COURSE_CPT ) {\r\n-\t\t\treturn $user->get_course_data( $ref_id );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function get_result( $prop = 'result' ) {\r\n-\t\t$result = array(\r\n-\t\t\t'result' => $this->is_completed() ? 100 : 0,\r\n-\t\t\t'grade'  => $this->is_completed() ? 'passed' : 'failed',\r\n-\t\t);\r\n-\r\n-\t\treturn $prop && array_key_exists( $prop, $result ) ? $result[ $prop ] : $result;\r\n-\t}\r\n-\r\n-\tpublic function read_meta() {\r\n-\t\tglobal $wpdb;\r\n-\t\t$query = $wpdb->prepare(\r\n-\t\t\t\"\r\n-\t\t\tSELECT *\r\n-\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\r\n-\t\t\tWHERE learnpress_user_item_id = %d\r\n-\t\t\",\r\n-\t\t\t$this->get_user_item_id()\r\n-\t\t);\r\n-\r\n-\t\t$results = $wpdb->get_results( $query );\r\n-\t\tif ( $results ) {\r\n-\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\t$result->meta_value = LP_Helper::maybe_unserialize( $result->meta_value );\r\n-\t\t\t\t$this->_meta_data[] = $result;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get structure of an user item.\r\n-\t *\r\n-\t * @return array\r\n-\t * @since 3.1.0\r\n-\t *\u002F\r\n-\tpublic static function get_empty_item() {\r\n-\t\treturn array(\r\n-\t\t\t'user_item_id' => 0,\r\n-\t\t\t'user_id'      => 0,\r\n-\t\t\t'item_id'      => 0,\r\n-\t\t\t'start_time'   => '',\r\n-\t\t\t'end_time'     => '',\r\n-\t\t\t'item_type'    => '',\r\n-\t\t\t'status'       => '',\r\n-\t\t\t'graduation'   => '',\r\n-\t\t\t'access_level' => 50,\r\n-\t\t\t'ref_id'       => '',\r\n-\t\t\t'ref_type'     => '',\r\n-\t\t\t'parent_id'    => 0,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user-item meta data.\r\n-\t * Check if meta data does not exist then return FALSE.\r\n-\t *\r\n-\t * @updated 3.1.0\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param bool   $single\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\tpublic function get_meta( $key, $single = true ) {\r\n-\t\tif ( ! metadata_exists( 'learnpress_user_item', $this->get_user_item_id(), $key ) ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn learn_press_get_user_item_meta( $this->get_user_item_id(), $key, $single );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update meta data\r\n-\t *\r\n-\t * @updated 3.1.0\r\n-\t *\r\n-\t * @param string $key\r\n-\t * @param string $value\r\n-\t * @param string $prev_value\r\n-\t *\r\n-\t * @editor tungnx add bk method\r\n-\t *\u002F\r\n-\tpublic function update_meta_bk( $key = '', $value = '', $prev_value = '' ) {\r\n-\t\tif ( func_num_args() === 0 ) {\r\n-\t\t\tif ( $this->_meta_data ) {\r\n-\t\t\t\tforeach ( $this->_meta_data as $meta_data ) {\r\n-\t\t\t\t\tif ( $meta_data->meta_value ) {\r\n-\t\t\t\t\t\tlearn_press_update_user_item_meta(\r\n-\t\t\t\t\t\t\t$this->get_user_item_id(),\r\n-\t\t\t\t\t\t\t$meta_data->meta_key,\r\n-\t\t\t\t\t\t\t$meta_data->meta_value\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $meta_data->meta_key );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tif ( is_array( $key ) ) {\r\n-\t\t\t\tforeach ( $key as $k => $v ) {\r\n-\t\t\t\t\tif ( $v === false ) {\r\n-\t\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $k );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $k, $v );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t} else {\r\n-\t\t\t\tif ( $value === false ) {\r\n-\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $key );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value, $prev_value );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update meta data\r\n-\t *\r\n-\t * @param string $key .\r\n-\t * @param string $value .\r\n-\t * @param string $prev_value .\r\n-\t *\r\n-\t * @return int|bool\r\n-\t * @editor tungnx\r\n-\t *\u002F\r\n-\tpublic function update_meta( $key = '', $value = '', $prev_value = '' ) {\r\n-\t\t$result = false;\r\n-\r\n-\t\tif ( is_array( $key ) ) {\r\n-\t\t\t$result = $this->update_meta_multiple_keys( $key );\r\n-\t\t} else {\r\n-\t\t\tif ( false === $value ) {\r\n-\t\t\t\t$result = learn_press_delete_user_item_meta( $this->get_user_item_id(), $key );\r\n-\t\t\t} else {\r\n-\t\t\t\t$result = learn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value, $prev_value );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update metadata with array keys values\r\n-\t *\r\n-\t * @param array $meta_datas .\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function update_meta_multiple_keys( $meta_datas = array() ) {\r\n-\t\t$result = false;\r\n-\r\n-\t\tforeach ( $meta_datas as $k => $v ) {\r\n-\t\t\tif ( false === $v ) {\r\n-\t\t\t\t$result = learn_press_delete_user_item_meta( $this->get_user_item_id(), $k );\r\n-\t\t\t} else {\r\n-\t\t\t\t$result = learn_press_update_user_item_meta( $this->get_user_item_id(), $k, $v );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\tpublic function get_mysql_data() {\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Datetime $v\r\n-\t\t *\u002F\r\n-\t\t$columns = array();\r\n-\r\n-\t\tforeach ( $this->get_data() as $k => $v ) {\r\n-\t\t\t$columns[ $k ] = $v;\r\n-\t\t}\r\n-\r\n-\t\treturn $columns;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param $data\r\n-\t *\r\n-\t * @return LP_User_Item|bool\r\n-\t *\u002F\r\n-\tpublic static function get_item_object( $data ) {\r\n-\t\t$item_id = 0;\r\n-\r\n-\t\tif ( is_array( $data ) && isset( $data['item_id'] ) ) {\r\n-\t\t\t$item_id = $data['item_id'];\r\n-\t\t} elseif ( is_object( $data ) && isset( $data->item_id ) ) {\r\n-\t\t\t$item_id = $data->item_id;\r\n-\t\t} elseif ( is_numeric( $data ) ) {\r\n-\t\t\t$item_id = absint( $data );\r\n-\t\t} elseif ( $data instanceof LP_User_Item ) {\r\n-\t\t\t$item_id = $data->get_id();\r\n-\t\t}\r\n-\r\n-\t\t$item      = false;\r\n-\t\t$item_type = learn_press_get_post_type( $item_id );\r\n-\r\n-\t\tswitch ( $item_type ) {\r\n-\t\t\tcase LP_LESSON_CPT:\r\n-\t\t\t\t$item = new LP_User_Item( $data );\r\n-\t\t\t\tbreak;\r\n-\t\t\tcase LP_QUIZ_CPT:\r\n-\t\t\t\t$item = new LP_User_Item_Quiz( $data );\r\n-\t\t\t\tbreak;\r\n-\t\t\tdefault:\r\n-\t\t\t\tbreak;\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-item-object', $item, $data, $item_type );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Set graduation\r\n-\t *\r\n-\t * @param string $graduation .\r\n-\t *\r\n-\t * @return $this\r\n-\t *\u002F\r\n-\tpublic function set_graduation( string $graduation ): LP_User_Item {\r\n-\t\t$this->_set_data( 'graduation', $graduation );\r\n-\r\n-\t\treturn $this;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get graduation\r\n-\t *\r\n-\t * @param string $context\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_graduation( string $context = '' ): string {\r\n-\t\t$grade = $this->get_data( 'graduation', '' );\r\n-\t\tif ( ! $grade ) {\r\n-\t\t\treturn '';\r\n-\t\t}\r\n-\t\treturn $context == 'display' ? learn_press_course_grade_html( $grade, false ) : $grade;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data from memory to database.\r\n-\t *\r\n-\t * @updated 3.1.0\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\tpublic function update( $force = false, $wp_error = false ) {\r\n-\t\t$data  = $this->get_mysql_data();\r\n-\t\t$data  = apply_filters( 'learn-press\u002Fupdate-user-item-data', $data, $this->get_user_item_id() );\r\n-\t\t$where = array();\r\n-\r\n-\t\tif ( $this->get_user_item_id() ) {\r\n-\t\t\t$where = array( 'user_item_id' => $this->get_user_item_id() );\r\n-\t\t}\r\n-\r\n-\t\t$rs = learn_press_update_user_item_field( $data, $where );\r\n-\r\n-\t\t\u002F\u002F Clear cache first status\r\n-\t\t$this->get_status( 'status', true );\r\n-\r\n-\t\tif ( $rs ) {\r\n-\t\t\tforeach ( (array) $rs as $k => $v ) {\r\n-\t\t\t\t$this->_set_data( $k, $v );\r\n-\t\t\t}\r\n-\t\t\t$this->_changes = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $rs;\r\n-\t}\r\n-\r\n-\tpublic function get_status_label( $status = '' ) {\r\n-\t\t$statuses = array(\r\n-\t\t\tLP_COURSE_ENROLLED  => esc_html__( 'Enrolled', 'learnpress' ),\r\n-\t\t\tLP_COURSE_PURCHASED => esc_html__( 'Purchased', 'learnpress' ),\r\n-\t\t\tLP_ITEM_COMPLETED   => esc_html__( 'Completed', 'learnpress' ),\r\n-\t\t\tLP_ITEM_STARTED     => esc_html__( 'Started', 'learnpress' ),\r\n-\t\t\tLP_COURSE_FINISHED  => esc_html__( 'Finished', 'learnpress' ),\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $status ) {\r\n-\t\t\t$status = $this->get_status();\r\n-\t\t}\r\n-\r\n-\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : esc_html__( 'Not Enrolled', 'learnpress' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get time from user started to ended.\r\n-\t *\r\n-\t * @param string $context\r\n-\t *\r\n-\t * @return bool|int\r\n-\t *\u002F\r\n-\tpublic function get_time_interval( $context = '' ) {\r\n-\t\t$start = $this->get_start_time();\r\n-\t\t$end   = $this->get_end_time();\r\n-\r\n-\t\tif ( ! $start instanceof LP_Datetime || ! $end instanceof LP_Datetime ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\tif ( $start->is_null() || $end->is_null() ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $end->getTimestamp() - $start->getTimestamp();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true of item is completed\u002Ffinished\r\n-\t *\r\n-\t * @param string $status\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_completed( $status = 'completed' ) {\r\n-\t\treturn $this->get_status() === $status;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Complete item\r\n-\t *\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1 - should review to improve\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function complete( $status = 'completed' ) {\r\n-\t\ttry {\r\n-\t\t\t$this->set_end_time( time() );\r\n-\t\t\t$this->set_status( $status );\r\n-\t\t\t$this->update();\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn true;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get post type of item.\r\n-\t *\r\n-\t * @return string\r\n-\t *\u002F\r\n-\tpublic function get_post_type() {\r\n-\t\treturn learn_press_get_post_type( $this->get_item_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_passed(): bool {\r\n-\t\treturn LP_COURSE_GRADUATION_PASSED === $this->get_graduation();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $decimal\r\n-\t *\r\n-\t * @return mixed|null\r\n-\t *\u002F\r\n-\tpublic function get_percent_result( $decimal = 1 ) {\r\n-\t\treturn apply_filters(\r\n-\t\t\t'learn-press\u002Fuser\u002Fitem-percent-result',\r\n-\t\t\tsprintf( '%s%', round( $this->get_result( 'result' ), $decimal ) ),\r\n-\t\t\t$this->get_user_id(),\r\n-\t\t\t$this->get_item_id()\r\n-\t\t);\r\n-\t}\r\n-\r\n-\tpublic function offsetSet( $offset, $value ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\t\u002F\u002F TODO: Implement offsetSet() method.\r\n-\t}\r\n-\r\n-\tpublic function offsetGet( $offset ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\tif ( is_callable( array( $this, 'get_' . $offset ) ) ) {\r\n-\t\t\treturn call_user_func( array( $this, 'get_' . $offset ) );\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function offsetUnset( $offset ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\t\u002F\u002F TODO: Implement offsetUnset() method.\r\n-\t}\r\n-\r\n-\tpublic function offsetExists( $offset ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\r\n-\t\t\u002F\u002F TODO: Implement offsetExists() method.\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_User_Item\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+class LP_User_Item extends LP_Abstract_Object_Data {\n+\t\u002F**\n+\t * Auto increment\n+\t *\n+\t * @var int\n+\t *\u002F\n+\tpublic $_user_item_id = 0;\n+\t\u002F**\n+\t * User id\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_user_id = 0;\n+\t\u002F**\n+\t * Item id (course, lesson, quiz ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_item_id = 0;\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $_start_time = '';\n+\t\u002F**\n+\t * @var string\n+\t *\u002F\n+\tpublic $_end_time = '';\n+\t\u002F**\n+\t * Item type (course, lesson, quiz ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_item_type = '';\n+\t\u002F**\n+\t * Status\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_status = '';\n+\t\u002F**\n+\t * Graduation\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_graduation = '';\n+\t\u002F**\n+\t * Ref id (Order, course ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_ref_id = '';\n+\t\u002F**\n+\t * Ref type (Order, course ...)\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_ref_type = '';\n+\t\u002F**\n+\t * Parent id\n+\t *\n+\t * @var string\n+\t *\u002F\n+\tpublic $_parent_id = '';\n+\t\u002F**\n+\t * Key get data start time form DB.\n+\t *\u002F\n+\tconst KEY_DATA_START_TIME = 'start_time';\n+\t\u002F**\n+\t * Key get data end time form DB.\n+\t *\u002F\n+\tconst KEY_DATA_END_TIME = 'end_time';\n+\n+\t\u002F**\n+\t * LP_User_Item constructor.\n+\t *\n+\t * @param array $item . A record fetched from table _learnpress_user_items\n+\t *\u002F\n+\tpublic function __construct( $item ) {\n+\t\tif ( is_numeric( $item ) ) {\n+\t\t\t$item = array( 'item_id' => $item );\n+\t\t} else {\n+\t\t\t$item = (array) $item;\n+\t\t}\n+\n+\t\t\u002F\u002F $this->_data = self::get_empty_item();\n+\n+\t\tparent::__construct( $item );\n+\t\t$this->set_default_data( $item );\n+\n+\t}\n+\n+\t\u002F**\n+\t * Set data from passed args\n+\t *\n+\t * @param array $item\n+\t *\u002F\n+\tprotected function set_default_data( $item ) {\n+\t\t$this->_changes = array();\n+\t\t$item_id        = 0;\n+\n+\t\tif ( ! empty( $item['user_item_id'] ) ) {\n+\t\t\t$this->set_data( 'user_item_id', absint( $item['user_item_id'] ) );\n+\t\t}\n+\n+\t\tif ( ! empty( $item['item_id'] ) ) {\n+\t\t\t$item['item_id'] = absint( $item['item_id'] );\n+\n+\t\t\t$this->set_id( $item['item_id'] );\n+\t\t\t$this->set_data( 'item_id', $item['item_id'] );\n+\t\t\t$this->set_data( 'item_type', learn_press_get_post_type( $item['item_id'] ) );\n+\t\t\t$item_id = $item['item_id'];\n+\t\t}\n+\n+\t\t$this->set_start_time( $item[ self::KEY_DATA_START_TIME ] ?? time() );\n+\t\t$this->set_end_time( $item[ self::KEY_DATA_END_TIME ] ?? '' );\n+\t\t$this->set_user_id( absint( $item['user_id'] ?? get_current_user_id() ) );\n+\t\t$this->set_status( $item['status'] ?? '' );\n+\n+\t\tif ( ! empty( $item['ref_id'] ) ) {\n+\t\t\t$item['ref_id'] = absint( $item['ref_id'] );\n+\n+\t\t\t$this->set_ref_id( $item['ref_id'] );\n+\t\t\tif ( empty( $item['ref_type'] ) ) {\n+\t\t\t\t$this->set_data( 'ref_type', learn_press_get_post_type( $item['ref_id'] ) );\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( ! empty( $item['ref_type'] ) ) {\n+\t\t\t$this->set_data( 'ref_type', $item['ref_type'] );\n+\t\t}\n+\n+\t\tif ( ! empty( $item['parent_id'] ) ) {\n+\t\t\t$item['parent_id'] = absint( $item['parent_id'] );\n+\n+\t\t\t$this->set_parent_id( $item['parent_id'] );\n+\t\t}\n+\n+\t\tif ( ! empty( $item['access_level'] ) ) {\n+\t\t\t$this->set_data( 'access_level', $item['access_level'] );\n+\t\t}\n+\n+\t\t$this->set_data( 'graduation', $item['graduation'] ?? '' );\n+\t}\n+\n+\tpublic function set_user_id( $user_id ) {\n+\t\t$this->set_data( 'user_id', $user_id );\n+\t}\n+\n+\tpublic function get_user_id() {\n+\t\treturn $this->get_data( 'user_id' );\n+\t}\n+\n+\tpublic function set_ref_id( $ref_id ) {\n+\t\t$this->set_data( 'ref_id', $ref_id );\n+\t\t$this->set_data( 'ref_type', learn_press_get_post_type( $ref_id ) );\n+\t}\n+\n+\tpublic function get_parent_id() {\n+\t\treturn absint( $this->get_data( 'parent_id' ) );\n+\t}\n+\n+\tpublic function set_parent_id( $parent_id ) {\n+\t\t$this->set_data( 'parent_id', $parent_id );\n+\t}\n+\n+\t\u002F**\n+\t * Get access level to a course.\n+\t *\n+\t * @return int\n+\t * @since 3.x.x\n+\t *\u002F\n+\tpublic function get_access_level() {\n+\t\treturn absint( $this->get_data( 'access_level' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get type of item. Consider is post-type.\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic function get_type() {\n+\t\treturn $this->get_data( 'item_type' );\n+\t}\n+\n+\t\u002F**\n+\t * Set start-time.\n+\t *\n+\t * @param mixed $time .\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function set_start_time( $time = '' ): LP_User_Item {\n+\t\t$this->set_data_date( 'start_time', $time );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get start-time.\n+\t *\n+\t * @param string $format\n+\t * @param bool   $local\n+\t *\n+\t * @return string|LP_Datetime|false\n+\t *\u002F\n+\tpublic function get_start_time( string $format = '', $local = false ) {\n+\t\t$date = $this->get_data( self::KEY_DATA_START_TIME );\n+\n+\t\treturn $this->format_time( $date, $format, $local );\n+\t}\n+\n+\t\u002F**\n+\t * Set end-time for item.\n+\t *\n+\t * @param mixed $time\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function set_end_time( $time = '' ): LP_User_Item {\n+\t\t$this->set_data_date( 'end_time', $time );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get end-time.\n+\t *\n+\t * @param string $format\n+\t *\n+\t * @return string|LP_Datetime\n+\t *\u002F\n+\tpublic function get_end_time( string $format = '' ) {\n+\t\t$date = $this->get_data( self::KEY_DATA_END_TIME );\n+\n+\t\treturn $this->format_time( $date, $format );\n+\t}\n+\n+\t\u002F**\n+\t * @param string|int|LP_Datetime $date\n+\t * @param string                 $format\n+\t * @param bool                   $local\n+\t *\n+\t * @return bool|float|int|LP_Datetime|string\n+\t *\u002F\n+\tpublic function format_time( $date, $format = '', $local = false ) {\n+\t\tif ( ! $date ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( ! $date instanceof LP_Datetime ) {\n+\t\t\t$date = new LP_Datetime( $date );\n+\t\t}\n+\n+\t\treturn $format ? $date->format( $format, $local ) : $date;\n+\t}\n+\n+\t\u002F**\n+\t * Get expiration time.\n+\t *\n+\t * @return string|LP_Datetime $time\n+\t * @since 3.3.0\n+\t * @version 3.3.2\n+\t *\u002F\n+\tpublic function get_expiration_time() {\n+\t\t$duration   = get_post_meta( $this->get_item_id(), '_lp_duration', true );\n+\t\t$start_time = $this->get_start_time()->getTimestamp();\n+\n+\t\tif ( ! absint( $duration ) || ! $start_time ) {\n+\t\t\t$expire = null;\n+\t\t} else {\n+\t\t\t\u002F\u002F Convert duration from string to seconds.\n+\t\t\tif ( ! is_numeric( $duration ) ) {\n+\t\t\t\t$duration = strtotime( $duration ) - time();\n+\t\t\t}\n+\n+\t\t\t$expire_time = $start_time + $duration;\n+\t\t\t$expire      = new LP_Datetime( $expire_time );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-item\u002Fexpiration-time', $expire, $duration, $this );\n+\t}\n+\n+\t\u002F**\n+\t * Set item-status.\n+\t *\n+\t * @param string $status .\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function set_status( string $status ): LP_User_Item {\n+\t\t$this->_set_data( 'status', $status );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get item status.\n+\t *\n+\t * @param string $field\n+\t * @param bool $force_cache Reset first cache\n+\t *\n+\t * @version 1.0.1\n+\t * @return string\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t *\u002F\n+\tpublic function get_status( string $field = 'status', bool $force_cache = false ): string {\n+\t\t$got_status = '';\n+\n+\t\ttry {\n+\t\t\t\u002F\u002F User is Guest\n+\t\t\tif ( (int) $this->get_user_id() === 0 ) {\n+\t\t\t\treturn $got_status;\n+\t\t\t}\n+\n+\t\t\tif ( LP_COURSE_CPT === $this->get_type() ) {\n+\t\t\t\treturn $this->get_data( $field );\n+\t\t\t}\n+\n+\t\t\t\u002F*error_log('status user item id: ' . $this->get_id());\n+\t\t\terror_log('status user item type: ' . $this->get_type());\n+\t\t\terror_log('status user course status: ' . $this->get_data( $field ));*\u002F\n+\n+\t\t\t$lp_user_item = LP_User_Items_DB::getInstance();\n+\t\t\t$filter       = new LP_User_Items_Filter();\n+\n+\t\t\t$filter->user_id   = $this->get_user_id();\n+\t\t\t$filter->item_id   = $this->get_item_id();\n+\t\t\t$filter->ref_id    = $this->get_data( 'ref_id' );\n+\t\t\t$filter->parent_id = $this->get_parent_id();\n+\n+\t\t\t$user_item = $lp_user_item->get_user_course_item( $filter, $force_cache );\n+\n+\t\t\tif ( ! empty( $user_item ) && isset( $user_item->$field ) ) {\n+\t\t\t\t$got_status = $user_item->$field;\n+\t\t\t}\n+\n+\t\t\t$this->set_data( $field, $got_status );\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t}\n+\n+\t\treturn $got_status;\n+\t}\n+\n+\tpublic function is_exists() {\n+\t\treturn ! ! $this->get_user_item_id();\n+\t}\n+\n+\t\u002F**\n+\t * @param string $return\n+\t *\n+\t * @return LP_User|int\n+\t *\u002F\n+\tpublic function get_user( $return = '' ) {\n+\t\treturn $this->get_data( 'user_id', 0 );\n+\t}\n+\n+\t\u002F**\n+\t * Get course.\n+\t *\n+\t * @param string $return\n+\t *\n+\t * @return bool|LP_Course|int|mixed\n+\t *\u002F\n+\tpublic function get_course( string $return = '' ) {\n+\t\t$course_id = $this->get_data( 'ref_id', 0 );\n+\t\tif ( $return == '' ) {\n+\t\t\treturn $course_id ? learn_press_get_course( $course_id ) : false;\n+\t\t}\n+\n+\t\treturn $course_id;\n+\t}\n+\n+\t\u002F**\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_user_item_id() {\n+\t\treturn intval( $this->get_data( 'user_item_id' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Change the primary key user_item_id of user-items.\n+\t * Only use zero value to force creating new item.\n+\t *\n+\t * @param int $user_item_id\n+\t *\u002F\n+\tpublic function set_user_item_id( $user_item_id ) {\n+\t\t$this->_set_data( 'user_item_id', absint( $user_item_id ) );\n+\t}\n+\n+\tpublic function get_item_id() {\n+\t\treturn $this->get_data( 'item_id' );\n+\t}\n+\n+\tpublic function get_parent() {\n+\t\t$user   = learn_press_get_user( $this->get_user_id() );\n+\t\t$ref_id = $this->get_data( 'ref_id' );\n+\n+\t\tif ( get_post_type( $ref_id ) === LP_COURSE_CPT ) {\n+\t\t\treturn $user->get_course_data( $ref_id );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function get_result( $prop = 'result' ) {\n+\t\t$result = array(\n+\t\t\t'result' => $this->is_completed() ? 100 : 0,\n+\t\t\t'grade'  => $this->is_completed() ? 'passed' : 'failed',\n+\t\t);\n+\n+\t\treturn $prop && array_key_exists( $prop, $result ) ? $result[ $prop ] : $result;\n+\t}\n+\n+\tpublic function read_meta() {\n+\t\tglobal $wpdb;\n+\t\t$query = $wpdb->prepare(\n+\t\t\t\"\n+\t\t\tSELECT *\n+\t\t\tFROM {$wpdb->learnpress_user_itemmeta}\n+\t\t\tWHERE learnpress_user_item_id = %d\n+\t\t\",\n+\t\t\t$this->get_user_item_id()\n+\t\t);\n+\n+\t\t$results = $wpdb->get_results( $query );\n+\t\tif ( $results ) {\n+\t\t\tforeach ( $results as $result ) {\n+\t\t\t\t$result->meta_value = LP_Helper::maybe_unserialize( $result->meta_value );\n+\t\t\t\t$this->_meta_data[] = $result;\n+\t\t\t}\n+\t\t}\n+\n+\t}\n+\n+\t\u002F**\n+\t * Get structure of an user item.\n+\t *\n+\t * @return array\n+\t * @since 3.1.0\n+\t *\u002F\n+\tpublic static function get_empty_item() {\n+\t\treturn array(\n+\t\t\t'user_item_id' => 0,\n+\t\t\t'user_id'      => 0,\n+\t\t\t'item_id'      => 0,\n+\t\t\t'start_time'   => '',\n+\t\t\t'end_time'     => '',\n+\t\t\t'item_type'    => '',\n+\t\t\t'status'       => '',\n+\t\t\t'graduation'   => '',\n+\t\t\t'access_level' => 50,\n+\t\t\t'ref_id'       => '',\n+\t\t\t'ref_type'     => '',\n+\t\t\t'parent_id'    => 0,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get user-item meta data.\n+\t * Check if meta data does not exist then return FALSE.\n+\t *\n+\t * @updated 3.1.0\n+\t *\n+\t * @param string $key\n+\t * @param bool   $single\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\tpublic function get_meta( $key, $single = true ) {\n+\t\tif ( ! metadata_exists( 'learnpress_user_item', $this->get_user_item_id(), $key ) ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn learn_press_get_user_item_meta( $this->get_user_item_id(), $key, $single );\n+\t}\n+\n+\t\u002F**\n+\t * Update meta data\n+\t *\n+\t * @updated 3.1.0\n+\t *\n+\t * @param string $key\n+\t * @param string $value\n+\t * @param string $prev_value\n+\t *\n+\t * @editor tungnx add bk method\n+\t *\u002F\n+\tpublic function update_meta_bk( $key = '', $value = '', $prev_value = '' ) {\n+\t\tif ( func_num_args() === 0 ) {\n+\t\t\tif ( $this->_meta_data ) {\n+\t\t\t\tforeach ( $this->_meta_data as $meta_data ) {\n+\t\t\t\t\tif ( $meta_data->meta_value ) {\n+\t\t\t\t\t\tlearn_press_update_user_item_meta(\n+\t\t\t\t\t\t\t$this->get_user_item_id(),\n+\t\t\t\t\t\t\t$meta_data->meta_key,\n+\t\t\t\t\t\t\t$meta_data->meta_value\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $meta_data->meta_key );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t} else {\n+\t\t\tif ( is_array( $key ) ) {\n+\t\t\t\tforeach ( $key as $k => $v ) {\n+\t\t\t\t\tif ( $v === false ) {\n+\t\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $k );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $k, $v );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\tif ( $value === false ) {\n+\t\t\t\t\tlearn_press_delete_user_item_meta( $this->get_user_item_id(), $key );\n+\t\t\t\t} else {\n+\t\t\t\t\tlearn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value, $prev_value );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Update meta data\n+\t *\n+\t * @param string $key .\n+\t * @param string $value .\n+\t * @param string $prev_value .\n+\t *\n+\t * @return int|bool\n+\t * @editor tungnx\n+\t *\u002F\n+\tpublic function update_meta( $key = '', $value = '', $prev_value = '' ) {\n+\t\t$result = false;\n+\n+\t\tif ( is_array( $key ) ) {\n+\t\t\t$result = $this->update_meta_multiple_keys( $key );\n+\t\t} else {\n+\t\t\tif ( false === $value ) {\n+\t\t\t\t$result = learn_press_delete_user_item_meta( $this->get_user_item_id(), $key );\n+\t\t\t} else {\n+\t\t\t\t$result = learn_press_update_user_item_meta( $this->get_user_item_id(), $key, $value, $prev_value );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Update metadata with array keys values\n+\t *\n+\t * @param array $meta_datas .\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function update_meta_multiple_keys( $meta_datas = array() ) {\n+\t\t$result = false;\n+\n+\t\tforeach ( $meta_datas as $k => $v ) {\n+\t\t\tif ( false === $v ) {\n+\t\t\t\t$result = learn_press_delete_user_item_meta( $this->get_user_item_id(), $k );\n+\t\t\t} else {\n+\t\t\t\t$result = learn_press_update_user_item_meta( $this->get_user_item_id(), $k, $v );\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\tpublic function get_mysql_data() {\n+\t\t\u002F**\n+\t\t * @var LP_Datetime $v\n+\t\t *\u002F\n+\t\t$columns = array();\n+\n+\t\tforeach ( $this->get_data() as $k => $v ) {\n+\t\t\t$columns[ $k ] = $v;\n+\t\t}\n+\n+\t\treturn $columns;\n+\t}\n+\n+\t\u002F**\n+\t * @param $data\n+\t *\n+\t * @return LP_User_Item|bool\n+\t *\u002F\n+\tpublic static function get_item_object( $data ) {\n+\t\t$item_id = 0;\n+\n+\t\tif ( is_array( $data ) && isset( $data['item_id'] ) ) {\n+\t\t\t$item_id = $data['item_id'];\n+\t\t} elseif ( is_object( $data ) && isset( $data->item_id ) ) {\n+\t\t\t$item_id = $data->item_id;\n+\t\t} elseif ( is_numeric( $data ) ) {\n+\t\t\t$item_id = absint( $data );\n+\t\t} elseif ( $data instanceof LP_User_Item ) {\n+\t\t\t$item_id = $data->get_id();\n+\t\t}\n+\n+\t\t$item      = false;\n+\t\t$item_type = learn_press_get_post_type( $item_id );\n+\n+\t\tswitch ( $item_type ) {\n+\t\t\tcase LP_LESSON_CPT:\n+\t\t\t\t$item = new LP_User_Item( $data );\n+\t\t\t\tbreak;\n+\t\t\tcase LP_QUIZ_CPT:\n+\t\t\t\t$item = new LP_User_Item_Quiz( $data );\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-item-object', $item, $data, $item_type );\n+\t}\n+\n+\t\u002F**\n+\t * Set graduation\n+\t *\n+\t * @param string $graduation .\n+\t *\n+\t * @return $this\n+\t *\u002F\n+\tpublic function set_graduation( string $graduation ): LP_User_Item {\n+\t\t$this->_set_data( 'graduation', $graduation );\n+\n+\t\treturn $this;\n+\t}\n+\n+\t\u002F**\n+\t * Get graduation\n+\t *\n+\t * @param string $context\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_graduation( string $context = '' ): string {\n+\t\t$grade = $this->get_data( 'graduation', '' );\n+\t\tif ( ! $grade ) {\n+\t\t\treturn '';\n+\t\t}\n+\t\treturn $context == 'display' ? learn_press_course_grade_html( $grade, false ) : $grade;\n+\t}\n+\n+\t\u002F**\n+\t * Update data from memory to database.\n+\t *\n+\t * @updated 3.1.0\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\tpublic function update( $force = false, $wp_error = false ) {\n+\t\t$data  = $this->get_mysql_data();\n+\t\t$data  = apply_filters( 'learn-press\u002Fupdate-user-item-data', $data, $this->get_user_item_id() );\n+\t\t$where = array();\n+\n+\t\tif ( $this->get_user_item_id() ) {\n+\t\t\t$where = array( 'user_item_id' => $this->get_user_item_id() );\n+\t\t}\n+\n+\t\t$rs = learn_press_update_user_item_field( $data, $where );\n+\n+\t\t\u002F\u002F Clear cache first status\n+\t\t$this->get_status( 'status', true );\n+\n+\t\tif ( $rs ) {\n+\t\t\tforeach ( (array) $rs as $k => $v ) {\n+\t\t\t\t$this->_set_data( $k, $v );\n+\t\t\t}\n+\t\t\t$this->_changes = array();\n+\t\t}\n+\n+\t\treturn $rs;\n+\t}\n+\n+\tpublic function get_status_label( $status = '' ) {\n+\t\t$statuses = array(\n+\t\t\tLP_COURSE_ENROLLED  => esc_html__( 'Enrolled', 'learnpress' ),\n+\t\t\tLP_COURSE_PURCHASED => esc_html__( 'Purchased', 'learnpress' ),\n+\t\t\tLP_ITEM_COMPLETED   => esc_html__( 'Completed', 'learnpress' ),\n+\t\t\tLP_ITEM_STARTED     => esc_html__( 'Started', 'learnpress' ),\n+\t\t\tLP_COURSE_FINISHED  => esc_html__( 'Finished', 'learnpress' ),\n+\t\t);\n+\n+\t\tif ( ! $status ) {\n+\t\t\t$status = $this->get_status();\n+\t\t}\n+\n+\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : esc_html__( 'Not Enrolled', 'learnpress' );\n+\t}\n+\n+\t\u002F**\n+\t * Get time from user started to ended.\n+\t *\n+\t * @param string $context\n+\t *\n+\t * @return bool|int\n+\t *\u002F\n+\tpublic function get_time_interval( $context = '' ) {\n+\t\t$start = $this->get_start_time();\n+\t\t$end   = $this->get_end_time();\n+\n+\t\tif ( ! $start instanceof LP_Datetime || ! $end instanceof LP_Datetime ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tif ( $start->is_null() || $end->is_null() ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $end->getTimestamp() - $start->getTimestamp();\n+\t}\n+\n+\t\u002F**\n+\t * Return true of item is completed\u002Ffinished\n+\t *\n+\t * @param string $status\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_completed( $status = 'completed' ) {\n+\t\treturn $this->get_status() === $status;\n+\t}\n+\n+\t\u002F**\n+\t * Complete item\n+\t *\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1 - should review to improve\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function complete( $status = 'completed' ) {\n+\t\ttry {\n+\t\t\t$this->set_end_time( time() );\n+\t\t\t$this->set_status( $status );\n+\t\t\t$this->update();\n+\t\t} catch ( Throwable $e ) {\n+\t\t\terror_log( __FUNCTION__ . ':' . $e->getMessage() );\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn true;\n+\t}\n+\n+\t\u002F**\n+\t * Get post type of item.\n+\t *\n+\t * @return string\n+\t *\u002F\n+\tpublic function get_post_type() {\n+\t\treturn learn_press_get_post_type( $this->get_item_id() );\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_passed(): bool {\n+\t\treturn LP_COURSE_GRADUATION_PASSED === $this->get_graduation();\n+\t}\n+\n+\t\u002F**\n+\t * @param int $decimal\n+\t *\n+\t * @return mixed|null\n+\t *\u002F\n+\tpublic function get_percent_result( $decimal = 1 ) {\n+\t\treturn apply_filters(\n+\t\t\t'learn-press\u002Fuser\u002Fitem-percent-result',\n+\t\t\tsprintf( '%s%', round( $this->get_result( 'result' ), $decimal ) ),\n+\t\t\t$this->get_user_id(),\n+\t\t\t$this->get_item_id()\n+\t\t);\n+\t}\n+\n+\tpublic function offsetSet( $offset, $value ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\t\u002F\u002F TODO: Implement offsetSet() method.\n+\t}\n+\n+\tpublic function offsetGet( $offset ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\tif ( is_callable( array( $this, 'get_' . $offset ) ) ) {\n+\t\t\treturn call_user_func( array( $this, 'get_' . $offset ) );\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function offsetUnset( $offset ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\t\u002F\u002F TODO: Implement offsetUnset() method.\n+\t}\n+\n+\tpublic function offsetExists( $offset ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.3.5' );\n+\t\t\u002F\u002F TODO: Implement offsetExists() method.\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,906 +1,906 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Class LP_User_Item_Quiz\r\n- *\u002F\r\n-class LP_User_Item_Quiz extends LP_User_Item {\r\n-\tpublic $_item_type = LP_QUIZ_CPT;\r\n-\tpublic $_ref_type  = LP_COURSE_CPT;\r\n-\t\u002F**\r\n-\t * @var array\r\n-\t *\u002F\r\n-\tprotected $_answers = array();\r\n-\r\n-\t\u002F**\r\n-\t * LP_User_Item_Quiz constructor.\r\n-\t *\r\n-\t * @param array $data\r\n-\t *\u002F\r\n-\tpublic function __construct( $data ) {\r\n-\t\t$this->_curd = new LP_Quiz_CURD();\r\n-\r\n-\t\tparent::__construct( $data );\r\n-\t\t$this->_parse_answers();\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t *\r\n-\t *\u002F\r\n-\tprotected function _parse_answers() {\r\n-\t\tforeach ( array( '_question_answers', 'question_answers' ) as $k ) {\r\n-\t\t\t$answers = learn_press_get_user_item_meta( $this->get_user_item_id(), $k, true );\r\n-\r\n-\t\t\tif ( $answers ) {\r\n-\t\t\t\t$this->_answers = $answers;\r\n-\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Add user answer to DB.\r\n-\t *\r\n-\t * @param int|array $id\r\n-\t * @param mixed $values\r\n-\t *\r\n-\t * @return array|bool|LP_Quiz_Results|mixed\r\n-\t * @throws Exception\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.4.1 - comment - not use\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tpublic function add_question_answer( $id, $values = null ) {\r\n-\t\t$results = $this->get_results( '' );\r\n-\r\n-\t\tif ( ! $results ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$questions = $results->get( 'questions', array() );\r\n-\r\n-\t\tif ( is_numeric( $id ) ) {\r\n-\t\t\t$values = array( $id => $values );\r\n-\t\t} else {\r\n-\t\t\t$values = (array) $id;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $values as $id => $answer ) {\r\n-\t\t\tif ( ! $this->has_checked_question( $id ) ) {\r\n-\t\t\t\tif ( ! empty( $questions[ $id ] ) ) {\r\n-\t\t\t\t\t$questions[ $id ]['answered'] = $answer;\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$questions[ $id ] = array( 'answered' => $answer );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$results['questions'] = $questions;\r\n-\r\n-\t\t\u002F\u002FLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), wp_json_encode( $results->get() ) );\r\n-\r\n-\t\t$this->calculate_results();\r\n-\r\n-\t\t$cache_key = sprintf( 'quiz-%d-%d-%d', $this->get_user_id(), $this->get_course_id(), $this->get_item_id() );\r\n-\r\n-\t\tLP_Object_Cache::set( $cache_key, false, 'learn-press\u002Fquiz-result' );\r\n-\r\n-\t\treturn $this->get_results( '' );\r\n-\t}*\u002F\r\n-\r\n-\tpublic function get_question_answer( $id ) {\r\n-\t\t$results = $this->get_results( '' );\r\n-\r\n-\t\tif ( ! $results ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$questions = $results->get( 'questions', false );\r\n-\r\n-\t\tif ( $questions && is_array( $questions[ $id ] ) ) {\r\n-\t\t\treturn $questions[ $id ]['answered'];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update data to database\r\n-\t *\r\n-\t * @param bool $force\r\n-\t * @param bool $wp_error\r\n-\t *\r\n-\t * @return bool|mixed\r\n-\t *\u002F\r\n-\t\u002F*\r\n-\tpublic function update( $force = false, $wp_error = false ) {\r\n-\t\t$return = parent::update( $force, $wp_error );\r\n-\t\t$this->calculate_results();\r\n-\r\n-\t\treturn $return;\r\n-\t}*\u002F\r\n-\r\n-\t\u002F**\r\n-\t * Get list of data to update to database\r\n-\t *\r\n-\t * @since 3.1.0\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_mysql_data() {\r\n-\t\t$columns = parent::get_mysql_data();\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fupdate-user-item-quiz-data', $columns, $this->get_item_id(), $this->get_course_id(), $this->get_user_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool|LP_Quiz\r\n-\t *\u002F\r\n-\tpublic function get_quiz() {\r\n-\t\treturn learn_press_get_quiz( $this->get_item_id() );\r\n-\t}\r\n-\r\n-\tpublic function get_status_label( $status = '' ) {\r\n-\t\t$statuses = array(\r\n-\t\t\t'started'     => __( 'In Progress', 'learnpress' ),\r\n-\t\t\t'in-progress' => __( 'In Progress', 'learnpress' ),\r\n-\t\t\t'completed'   => __( 'Completed', 'learnpress' ),\r\n-\t\t\t'passed'      => __( 'Passed', 'learnpress' ),\r\n-\t\t\t'failed'      => __( 'Failed', 'learnpress' ),\r\n-\t\t);\r\n-\r\n-\t\tif ( ! $status ) {\r\n-\t\t\t$status = $this->get_status();\r\n-\t\t}\r\n-\r\n-\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : __( 'Not Started', 'learnpress' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get ID of the course that this item assigned to.\r\n-\t *\r\n-\t * @return array|mixed\r\n-\t *\u002F\r\n-\tpublic function get_course_id() {\r\n-\t\treturn $this->get_data( 'ref_id' );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get result\r\n-\t *\r\n-\t * @param string $prop\r\n-\t *\r\n-\t * @return array|bool|mixed\r\n-\t *\u002F\r\n-\tpublic function get_result( $prop = '' ) {\r\n-\t\t$result = $this->calculate_quiz_result();\r\n-\r\n-\t\t\u002F\u002F Fix temporary for case call 'grade' - addons called\r\n-\t\tif ( 'grade' === $prop ) {\r\n-\t\t\tif ( $result['pass'] ) {\r\n-\t\t\t\t$result['grade'] = 'passed';\r\n-\t\t\t} else {\r\n-\t\t\t\t$result['grade'] = 'failed';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $prop && $result && array_key_exists( $prop, $result ) ? $result[ $prop ] : $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate result of quiz.\r\n-\t *\r\n-\t * @param string $prop\r\n-\t * @param bool   $force - Optional. Force to refresh cache.\r\n-\t *\r\n-\t * Clear cache on\r\n-\t * @see LP_REST_Users_Controller::start_quiz() | retake quiz\r\n-\t *\r\n-\t * @return LP_Quiz_Results|bool|mixed\r\n-\t * @throws Exception\r\n-\t * @editor tungnx\r\n-\t * @modify 4.1.3\r\n-\t * @version 4.0.1\r\n-\t *\u002F\r\n-\tpublic function get_results( string $prop = 'result', bool $force = false ) {\r\n-\t\tif ( ! $this->get_status() ) {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\r\n-\r\n-\t\t$key_cache = sprintf( '%d\u002Fuser\u002F%d\u002Fcourse\u002F%d', $this->get_item_id(), $this->get_user_id(), $this->get_course_id() );\r\n-\t\t$result    = $lp_quiz_cache->get_cache( $key_cache );\r\n-\r\n-\t\tif ( false === $result || $force ) {\r\n-\t\t\t\u002F\u002F $result = $this->_get_results();\r\n-\r\n-\t\t\t\u002F\u002F if ( false === $result ) {\r\n-\t\t\t$result = $this->calculate_results();\r\n-\t\t\t\u002F\u002F }\r\n-\r\n-\t\t\t$lp_quiz_cache->set_cache( $key_cache, $result );\r\n-\t\t}\r\n-\r\n-\t\t$result['user_item_id']   = $this->get_user_item_id();\r\n-\t\t$result['interval']       = array( $this->get_start_time(), $this->get_end_time() );\r\n-\t\t$result['graduation']     = $this->get_graduation();\r\n-\t\t$result['graduationText'] = $this->get_graduation_text();\r\n-\r\n-\t\treturn $prop ? $result[ $prop ] : new LP_Quiz_Results( $result );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user quiz graduation text for displaying purpose. [Passed, Failed, null]\r\n-\t *\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t * @return mixed\r\n-\t *\u002F\r\n-\tpublic function get_graduation_text() {\r\n-\t\t$graduation = $this->get_graduation();\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-quiz-graduation-text', learn_press_get_graduation_text( $graduation ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get Timestamp remaining when user doing quiz\r\n-\t *\r\n-\t * @author tungnx\r\n-\t * @version 1.0.1\r\n-\t * @sicne 4.1.4.1\r\n-\t * @return int\r\n-\t *\u002F\r\n-\tpublic function get_timestamp_remaining(): int {\r\n-\t\t$timestamp_remaining = - 1;\r\n-\t\t$quiz                = false;\r\n-\t\t$user_quiz           = false;\r\n-\r\n-\t\ttry {\r\n-\t\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\r\n-\t\t\tif ( ! $quiz || LP_ITEM_STARTED != $this->get_status() ) {\r\n-\t\t\t\treturn $timestamp_remaining;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$parent_id = $this->get_parent_id();\r\n-\t\t\t$duration  = $quiz->get_duration()->get() . ' second';\r\n-\r\n-\t\t\t$filter              = new LP_User_Items_Filter();\r\n-\t\t\t$filter->parent_id   = $parent_id;\r\n-\t\t\t$filter->item_id     = $this->get_item_id();\r\n-\t\t\t$filter->user_id     = get_current_user_id();\r\n-\t\t\t$user_quiz           = LP_User_Items_DB::getInstance()->get_user_course_item( $filter, true );\r\n-\t\t\t$course_start_time   = $user_quiz->start_time;\r\n-\t\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\r\n-\t\t\t$timestamp_current   = time();\r\n-\t\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\r\n-\r\n-\t\t\tif ( $timestamp_remaining \u003C 0 ) {\r\n-\t\t\t\t$timestamp_remaining = 0;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-course-quiz\u002Ftimestamp_remaining', $timestamp_remaining, $user_quiz, $quiz );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all attempts of a quiz.\r\n-\t *\r\n-\t * @param string $args\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_attempts( $limit = 3 ) {\r\n-\t\t$limit = $limit ?? 3;\r\n-\r\n-\t\t$limit = absint( apply_filters( 'lp\u002Fquiz\u002Fget-attempts\u002Flimit', $limit ) );\r\n-\r\n-\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\r\n-\t\t$output  = array();\r\n-\r\n-\t\tif ( ! empty( $results ) ) {\r\n-\t\t\tforeach ( $results as $result ) {\r\n-\t\t\t\tif ( $result && is_string( $result ) ) {\r\n-\t\t\t\t\t$result = json_decode( $result );\r\n-\r\n-\t\t\t\t\tunset( $result->questions );\r\n-\r\n-\t\t\t\t\t$output[] = $result;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $output;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get question ids user has started inside quiz.\r\n-\t *\r\n-\t * @since 4.0.0\r\n-\t *\r\n-\t * @return bool|array\r\n-\t *\u002F\r\n-\tpublic function get_questions() {\r\n-\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\r\n-\t\t$ids  = $quiz->get_question_ids();\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-item-quiz-questions', $ids, $this->get_user_id(), $this );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate results of quiz.\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t * @version 4.0.0\r\n-\t *\u002F\r\n-\tpublic function calculate_results(): array {\r\n-\t\t$quiz         = learn_press_get_quiz( $this->get_item_id() );\r\n-\t\t$last_results = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\r\n-\t\tif ( ! $last_results ) {\r\n-\t\t\t$last_results = array();\r\n-\t\t}\r\n-\r\n-\t\t$questions = $last_results['questions'] ?? array_fill_keys( $quiz->get_question_ids(), array() );\r\n-\r\n-\t\t$result = array(\r\n-\t\t\t'questions'         => array(),\r\n-\t\t\t'mark'              => $quiz->get_mark(),\r\n-\t\t\t'user_mark'         => 0,\r\n-\t\t\t'question_count'    => 0,\r\n-\t\t\t'question_empty'    => 0,\r\n-\t\t\t'question_answered' => 0,\r\n-\t\t\t'question_wrong'    => 0,\r\n-\t\t\t'question_correct'  => 0,\r\n-\t\t\t'status'            => $this->get_status(),\r\n-\t\t\t'result'            => 0,\r\n-\t\t\t'time_spend'        => $this->get_time_interval( 'display' ),\r\n-\t\t\t'passing_grade'     => $quiz->get_passing_grade(),\r\n-\t\t);\r\n-\r\n-\t\tif ( $questions ) {\r\n-\t\t\tforeach ( $questions as $question_id => $last_checked ) {\r\n-\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t\tif ( ! $question ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$answered          = array_key_exists( 'answered', $last_checked ) ? $last_checked['answered'] : '';\r\n-\t\t\t\t$check             = apply_filters( 'learn-press\u002Fquiz\u002Fcheck-question-result', $question->check( $answered ), $question_id, $this );\r\n-\t\t\t\t$check['answered'] = $answered;\r\n-\r\n-\t\t\t\tif ( $check['answered'] && $check['correct'] ) {\r\n-\t\t\t\t\t$result['question_correct'] ++;\r\n-\t\t\t\t\t$result['user_mark'] += array_key_exists( 'mark', $check ) ? floatval( $check['mark'] ) : $question->get_mark();\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t$negative_marking = apply_filters( 'learn-press\u002Fget-negative-marking-value', floatval( $question->get_mark() ), $question_id, $quiz->get_id() );\r\n-\r\n-\t\t\t\t\t\u002F\u002F If answered is empty consider user has skipped question\r\n-\t\t\t\t\tif ( ! $check['answered'] ) {\r\n-\t\t\t\t\t\tif ( $quiz->get_negative_marking() && $quiz->get_minus_skip_questions() ) {\r\n-\t\t\t\t\t\t\t$result['user_mark'] -= $negative_marking;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$result['question_empty'] ++;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\r\n-\t\t\t\t\t\t\t$result['user_mark'] -= $negative_marking;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$result['question_wrong'] ++;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$result['questions'][ $question_id ] = apply_filters( 'learn-press\u002Fquestion-results-data', $last_checked ? array_merge( $last_checked, $check ) : $check, $question_id, $quiz->get_id() );\r\n-\r\n-\t\t\t\tif ( $check['answered'] ) {\r\n-\t\t\t\t\t$result['question_answered'] ++;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result['user_mark'] = ( $result['user_mark'] >= 0 ) ? $result['user_mark'] : 0;\r\n-\r\n-\t\t\t$percent          = $result['mark'] ? ( $result['user_mark'] \u002F $result['mark'] ) * 100 : 0;\r\n-\t\t\t$result['result'] = $percent;\r\n-\t\t\t$grade            = '';\r\n-\r\n-\t\t\tif ( $this->get_status() === 'completed' ) {\r\n-\t\t\t\t$grade = $percent >= $this->get_quiz()->get_data( 'passing_grade' ) ? 'passed' : 'failed';\r\n-\t\t\t\t$this->_set_data( 'graduation', $grade );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$result['question_count'] = count( $questions );\r\n-\r\n-\t\t\tif ( $grade ) {\r\n-\t\t\t\tlearn_press_update_user_item_field(\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'graduation' => $grade,\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'user_item_id' => $this->get_user_item_id(),\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Calculate result of quiz.\r\n-\t *\r\n-\t * @param array $answered [question_id => answered, 'instant_check' => 0]\r\n-\t *\r\n-\t * @return array\r\n-\t * @version 1.0.1\r\n-\t * @author tungnx\r\n-\t * @since 4.1.4.1\r\n-\t *\u002F\r\n-\tpublic function calculate_quiz_result( array $answered = array() ): array {\r\n-\t\t$result = array(\r\n-\t\t\t'questions'         => array(),\r\n-\t\t\t'mark'              => 0,\r\n-\t\t\t'user_mark'         => 0,\r\n-\t\t\t'minus_point'       => 0,\r\n-\t\t\t'question_count'    => 0,\r\n-\t\t\t'question_empty'    => 0,\r\n-\t\t\t'question_answered' => 0,\r\n-\t\t\t'question_wrong'    => 0,\r\n-\t\t\t'question_correct'  => 0,\r\n-\t\t\t'status'            => '',\r\n-\t\t\t'result'            => 0,\r\n-\t\t\t'time_spend'        => '',\r\n-\t\t\t'passing_grade'     => '',\r\n-\t\t\t'pass'              => 0,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\tif ( LP_ITEM_COMPLETED === $this->get_status() ) {\r\n-\t\t\t\t$result_tmp = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\r\n-\t\t\t\tif ( $result_tmp ) {\r\n-\t\t\t\t\tif ( isset( $result_tmp['user_mark'] ) && $result_tmp['user_mark'] \u003C 0 ) {\r\n-\t\t\t\t\t\t$result_tmp['user_mark'] = 0;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t$result = $result_tmp;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\treturn $result;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\r\n-\r\n-\t\t\tif ( ! $quiz ) {\r\n-\t\t\t\tthrow new Exception();\r\n-\t\t\t}\r\n-\r\n-\t\t\t$question_ids             = $quiz->get_question_ids();\r\n-\t\t\t$result['mark']           = $quiz->get_mark();\r\n-\t\t\t$result['question_count'] = $quiz->count_questions();\r\n-\t\t\t$result['time_spend']     = $this->get_time_interval( 'display' );\r\n-\t\t\t$result['passing_grade']  = $quiz->get_passing_grade();\r\n-\t\t\t$checked_questions        = $this->get_checked_questions();\r\n-\r\n-\t\t\tforeach ( $question_ids as $question_id ) {\r\n-\t\t\t\t$question = LP_Question::get_question( $question_id );\r\n-\t\t\t\t$point    = floatval( $question->get_mark() );\r\n-\r\n-\t\t\t\t$result['questions'][ $question_id ]             = array();\r\n-\t\t\t\t$result['questions'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\r\n-\r\n-\t\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\r\n-\t\t\t\t\t$result['question_answered']++;\r\n-\r\n-\t\t\t\t\t$check = $question->check( $answered[ $question_id ] );\r\n-\t\t\t\t\t$point = apply_filters( 'learn-press\u002Fuser\u002Fcalculate-quiz-result\u002Fpoint', $point, $question, $check );\r\n-\t\t\t\t\tif ( $check['correct'] ) {\r\n-\t\t\t\t\t\t$result['question_correct']++;\r\n-\t\t\t\t\t\t$result['user_mark'] += $point;\r\n-\r\n-\t\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = true;\r\n-\t\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = $point;\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\r\n-\t\t\t\t\t\t\t$result['user_mark']   -= $point;\r\n-\t\t\t\t\t\t\t$result['minus_point'] += $point;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$result['question_wrong']++;\r\n-\r\n-\t\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\r\n-\t\t\t\t\tif ( $quiz->get_minus_skip_questions() ) {\r\n-\t\t\t\t\t\t$result['user_mark']   -= $point;\r\n-\t\t\t\t\t\t$result['minus_point'] += $point;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$result['question_empty']++;\r\n-\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$can_review_quiz = get_post_meta( $quiz->get_id(), '_lp_review', true ) === 'yes';\r\n-\t\t\t\tif ( $can_review_quiz && ! array_key_exists( 'instant_check', $answered ) ) {\r\n-\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\r\n-\t\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\r\n-\t\t\t\t\t\t$question,\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'include_is_true' => in_array( $question_id, $checked_questions ) || get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ) === 'yes',\r\n-\t\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $result['user_mark'] \u003C 0 ) {\r\n-\t\t\t\t$result['user_mark'] = 0;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\r\n-\t\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$passing_grade = $quiz->get_data( 'passing_grade', 0 );\r\n-\t\t\tif ( $result['result'] >= $passing_grade ) {\r\n-\t\t\t\t$result['pass'] = 1;\r\n-\t\t\t} else {\r\n-\t\t\t\t$result['pass'] = 0;\r\n-\t\t\t}\r\n-\t\t} catch ( Throwable $e ) {\r\n-\r\n-\t\t}\r\n-\r\n-\t\treturn $result;\r\n-\t}\r\n-\r\n-\tpublic function get_option_answer() {\r\n-\r\n-\t}\r\n-\r\n-\tprotected function _get_results() {\r\n-\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\t}\r\n-\r\n-\tpublic function get_percent_result( $decimal = 2 ) {\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fquiz-percent-result', sprintf( '%s%%', round( $this->get_result( 'result' ), $decimal ), $this->get_user_id(), $this->get_item_id() ) );\r\n-\t}\r\n-\r\n-\tpublic function get_time_interval( $context = '' ) {\r\n-\t\t$interval = parent::get_time_interval();\r\n-\r\n-\t\tif ( $context == 'display' ) {\r\n-\t\t\t$quiz = $this->get_quiz();\r\n-\r\n-\t\t\tif ( $quiz && $interval && $quiz->get_duration() ) {\r\n-\t\t\t\t$interval = new LP_Duration( $interval );\r\n-\t\t\t\t$interval = $interval->to_timer();\r\n-\t\t\t} else {\r\n-\t\t\t\t$interval = '--:--';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $interval;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return TRUE if user has pressed SKIP on this question\r\n-\t *\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_skipped( $question_id ) {\r\n-\t\treturn $this->get_question_answer( $question_id ) === '__SKIPPED__';\r\n-\t}\r\n-\r\n-\tpublic function is_answered( $question_id ) {\r\n-\t\t$result = $this->get_results();\r\n-\r\n-\t\tif ( ! empty( $result['questions'][ $question_id ] ) ) {\r\n-\t\t\treturn $result['questions'][ $question_id ]['answered'];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\tpublic function is_answered_true( $question_id ) {\r\n-\t\t$result = $this->get_results( false );\r\n-\r\n-\t\tif ( ! empty( $result['questions'][ $question_id ] ) ) {\r\n-\t\t\treturn $result['questions'][ $question_id ]['correct'];\r\n-\t\t}\r\n-\r\n-\t\treturn false;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get questions user has answered.\r\n-\t *\r\n-\t * @param bool $percent - Optional. TRUE will return by percentage with total questions.\r\n-\t *\r\n-\t * @return float|int|mixed\r\n-\t *\u002F\r\n-\tpublic function get_questions_answered( $percent = false ) {\r\n-\t\t$result = $this->get_results( '' );\r\n-\r\n-\t\tif ( $percent ) {\r\n-\t\t\tif ( $result['question_count'] ) {\r\n-\t\t\t\t$return = 0;\r\n-\t\t\t} else {\r\n-\t\t\t\t$return = $result['question_answered'] ? ( $result['question_answered'] \u002F $result['question_count'] ) * 100 : 0;\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\t$return = $result['question_answered'];\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get total mark user achieved.\r\n-\t *\r\n-\t * @param bool $percent - Optional. TRUE will return by percentage with total mark.\r\n-\t *\r\n-\t * @return float|int|mixed\r\n-\t *\u002F\r\n-\tpublic function get_mark( $percent = false ) {\r\n-\t\t$result = $this->get_results();\r\n-\r\n-\t\tif ( $percent ) {\r\n-\t\t\t$return = $result['mark'] ? ( $result['user_mark'] \u002F $result['mark'] ) * 100 : 0;\r\n-\t\t} else {\r\n-\t\t\t$return = $result['user_mark'];\r\n-\t\t}\r\n-\r\n-\t\treturn $return;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.0\r\n-\t *\u002F\r\n-\tpublic function get_total_questions() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.0' );\r\n-\t\t$quiz      = learn_press_get_quiz( $this->get_item_id() );\r\n-\t\t$questions = $quiz->get_question_ids();\r\n-\r\n-\t\treturn sizeof( $questions );\r\n-\t}\r\n-\r\n-\tpublic function get_quiz_mark() {\r\n-\t\t$result = $this->get_results();\r\n-\r\n-\t\treturn $result['mark'];\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return time remaining.\r\n-\t *\r\n-\t * @param string $return - Optional.\r\n-\t *\r\n-\t * @return LP_Duration\r\n-\t * @deprecated 4.1.7.3\r\n-\t *\u002F\r\n-\tpublic function get_time_remaining( $return = 'object' ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\r\n-\t\t\u002F*$time = parent::get_time_remaining( $return );\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Ftime-remaining', $time, $this->get_item_id(), $this->get_course_id(), $this->get_user_id() );*\u002F\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all questions user has already used \"Check\"\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function get_checked_questions(): array {\r\n-\t\t$value = $this->get_meta( '_lp_question_checked', true );\r\n-\r\n-\t\tif ( $value ) {\r\n-\t\t\t$value = (array) $value;\r\n-\t\t} else {\r\n-\t\t\t$value = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\tpublic function add_checked_question( $id ) {\r\n-\t\tsettype( $id, 'array' );\r\n-\t\t$checked = $this->get_checked_questions();\r\n-\t\t$checked = array_merge( $checked, $id );\r\n-\r\n-\t\t$this->update_meta( '_lp_question_checked', $checked );\r\n-\r\n-\t\treturn $checked;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if user has already checked a question.\r\n-\t *\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_checked_question( $question_id ) {\r\n-\t\treturn in_array( $question_id, $this->get_checked_questions() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Instant check question\r\n-\t *\r\n-\t * @param int   $question_id\r\n-\t * @param mixed $answered\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function instant_check_question( int $question_id, $answered = null ): array {\r\n-\t\t$question = learn_press_get_question( $question_id );\r\n-\t\tif ( ! $question ) {\r\n-\t\t\tthrow new Exception( __( 'The question is invalid!', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$can_check = $this->can_check_answer( $question_id );\r\n-\t\tif ( ! $can_check ) {\r\n-\t\t\tthrow new Exception( __( 'Cannot check the answer to the question.', 'learnpress' ) );\r\n-\t\t}\r\n-\r\n-\t\t$answered_check = array(\r\n-\t\t\t'instant_check' => 1,\r\n-\t\t\t$question_id    => $answered,\r\n-\t\t);\r\n-\r\n-\t\t\u002F\u002F For case save result when check instant answer\r\n-\t\t$result_instant_check = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\r\n-\t\tif ( $result_instant_check ) {\r\n-\t\t\tforeach ( $result_instant_check['questions'] as $question_answer_id => $question_answer ) {\r\n-\t\t\t\tif ( ! empty( $question_answer['answered'] ) ) {\r\n-\t\t\t\t\t$answered_check[ $question_answer_id ] = $question_answer['answered'];\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$result_answer = $this->calculate_quiz_result( $answered_check );\r\n-\r\n-\t\tLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), json_encode( $result_answer ) );\r\n-\t\t$this->add_checked_question( $question_id );\r\n-\r\n-\t\t$checked['answered'] = $answered;\r\n-\t\t$checked['mark']     = $result_answer['questions'][ $question_id ]['mark'];\r\n-\t\t$checked['correct']  = $result_answer['questions'][ $question_id ]['correct'];\r\n-\r\n-\t\treturn $checked;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @return int\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function hint( $question_id ) {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\treturn false;\r\n-\t\t$remain = $this->can_hint_answer();\r\n-\r\n-\t\tif ( $remain ) {\r\n-\t\t\tif ( ! $this->has_hinted_question( $question_id ) ) {\r\n-\t\t\t\t$checked   = $this->get_hint_questions();\r\n-\t\t\t\t$checked[] = $question_id;\r\n-\t\t\t\t$this->set_meta( '_lp_question_hint', $checked );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$count = $this->get_count_hint();\r\n-\t\t\t$this->update_meta();\r\n-\t\t\t$remain --;\r\n-\t\t} else {\r\n-\t\t\treturn false;\r\n-\t\t}\r\n-\r\n-\t\treturn $remain;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if user has already checked a question.\r\n-\t *\r\n-\t * @param int $question_id\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function has_hinted_question( $question_id ) {\r\n-\t\treturn in_array( $question_id, $this->get_hint_questions() );\r\n-\t}\r\n-\r\n-\tpublic function get_check_answer_count() {\r\n-\t\treturn count( $this->get_checked_questions() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @param int $question_id - Added since 3.3.0\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function can_check_answer( int $question_id = 0 ) : bool {\r\n-\t\t$can  = false;\r\n-\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\r\n-\r\n-\t\tif ( ! $quiz ) {\r\n-\t\t\treturn $can;\r\n-\t\t}\r\n-\r\n-\t\tif ( $quiz->get_instant_check() && $this->get_status() === 'started' ) {\r\n-\t\t\t$can = ! $this->has_checked_question( $question_id );\r\n-\t\t}\r\n-\r\n-\t\treturn apply_filters( 'learn-press\u002Fcan-instant-check-question', $can, $question_id, $this->get_item_id(), $this->get_course_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get number retaken count.\r\n-\t *\r\n-\t * @return integer\r\n-\t *\u002F\r\n-\tpublic function get_retaken_count(): int {\r\n-\t\treturn absint( learn_press_get_user_item_meta( $this->get_user_item_id(), '_lp_retaken_count' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Update learnpress_user_itemmeta retaken\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function update_retake_count() {\r\n-\t\t$count = $this->get_retaken_count();\r\n-\t\t$count ++;\r\n-\r\n-\t\treturn $this->update_meta( '_lp_retaken_count', $count );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get all questions user has already used \"Check\"\r\n-\t *\r\n-\t * @return array\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function get_hint_questions() {\r\n-\t\treturn [];\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\t$value = $this->get_meta( '_lp_question_hint', true );\r\n-\r\n-\t\tif ( $value ) {\r\n-\t\t\t$value = (array) $value;\r\n-\t\t} else {\r\n-\t\t\t$value = array();\r\n-\t\t}\r\n-\r\n-\t\treturn $value;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated 4.2.5\r\n-\t *\u002F\r\n-\tpublic function get_count_hint() {\r\n-\t\t_deprecated_function( __METHOD__, '4.2.5' );\r\n-\t\treturn 0;\r\n-\t\treturn count( $this->get_hint_questions() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Return true if check answer is enabled.\r\n-\t *\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function can_hint_answer() {\r\n-\t\treturn apply_filters( 'learn-press\u002Fuser-quiz\u002Fcan-hint-answer', true, $this->get_id(), $this->get_course_id() );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * @return bool\r\n-\t *\u002F\r\n-\tpublic function is_review_questions(): bool {\r\n-\t\treturn LP_Global::quiz_question() && ( $this->get_status() === 'completed' );\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Class LP_User_Item_Quiz\n+ *\u002F\n+class LP_User_Item_Quiz extends LP_User_Item {\n+\tpublic $_item_type = LP_QUIZ_CPT;\n+\tpublic $_ref_type  = LP_COURSE_CPT;\n+\t\u002F**\n+\t * @var array\n+\t *\u002F\n+\tprotected $_answers = array();\n+\n+\t\u002F**\n+\t * LP_User_Item_Quiz constructor.\n+\t *\n+\t * @param array $data\n+\t *\u002F\n+\tpublic function __construct( $data ) {\n+\t\t$this->_curd = new LP_Quiz_CURD();\n+\n+\t\tparent::__construct( $data );\n+\t\t$this->_parse_answers();\n+\t}\n+\n+\t\u002F**\n+\t *\n+\t *\u002F\n+\tprotected function _parse_answers() {\n+\t\tforeach ( array( '_question_answers', 'question_answers' ) as $k ) {\n+\t\t\t$answers = learn_press_get_user_item_meta( $this->get_user_item_id(), $k, true );\n+\n+\t\t\tif ( $answers ) {\n+\t\t\t\t$this->_answers = $answers;\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Add user answer to DB.\n+\t *\n+\t * @param int|array $id\n+\t * @param mixed $values\n+\t *\n+\t * @return array|bool|LP_Quiz_Results|mixed\n+\t * @throws Exception\n+\t * @editor tungnx\n+\t * @modify 4.1.4.1 - comment - not use\n+\t *\u002F\n+\t\u002F*\n+\tpublic function add_question_answer( $id, $values = null ) {\n+\t\t$results = $this->get_results( '' );\n+\n+\t\tif ( ! $results ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$questions = $results->get( 'questions', array() );\n+\n+\t\tif ( is_numeric( $id ) ) {\n+\t\t\t$values = array( $id => $values );\n+\t\t} else {\n+\t\t\t$values = (array) $id;\n+\t\t}\n+\n+\t\tforeach ( $values as $id => $answer ) {\n+\t\t\tif ( ! $this->has_checked_question( $id ) ) {\n+\t\t\t\tif ( ! empty( $questions[ $id ] ) ) {\n+\t\t\t\t\t$questions[ $id ]['answered'] = $answer;\n+\t\t\t\t} else {\n+\t\t\t\t\t$questions[ $id ] = array( 'answered' => $answer );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$results['questions'] = $questions;\n+\n+\t\t\u002F\u002FLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), wp_json_encode( $results->get() ) );\n+\n+\t\t$this->calculate_results();\n+\n+\t\t$cache_key = sprintf( 'quiz-%d-%d-%d', $this->get_user_id(), $this->get_course_id(), $this->get_item_id() );\n+\n+\t\tLP_Object_Cache::set( $cache_key, false, 'learn-press\u002Fquiz-result' );\n+\n+\t\treturn $this->get_results( '' );\n+\t}*\u002F\n+\n+\tpublic function get_question_answer( $id ) {\n+\t\t$results = $this->get_results( '' );\n+\n+\t\tif ( ! $results ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$questions = $results->get( 'questions', false );\n+\n+\t\tif ( $questions && is_array( $questions[ $id ] ) ) {\n+\t\t\treturn $questions[ $id ]['answered'];\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Update data to database\n+\t *\n+\t * @param bool $force\n+\t * @param bool $wp_error\n+\t *\n+\t * @return bool|mixed\n+\t *\u002F\n+\t\u002F*\n+\tpublic function update( $force = false, $wp_error = false ) {\n+\t\t$return = parent::update( $force, $wp_error );\n+\t\t$this->calculate_results();\n+\n+\t\treturn $return;\n+\t}*\u002F\n+\n+\t\u002F**\n+\t * Get list of data to update to database\n+\t *\n+\t * @since 3.1.0\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_mysql_data() {\n+\t\t$columns = parent::get_mysql_data();\n+\n+\t\treturn apply_filters( 'learn-press\u002Fupdate-user-item-quiz-data', $columns, $this->get_item_id(), $this->get_course_id(), $this->get_user_id() );\n+\t}\n+\n+\t\u002F**\n+\t * @return bool|LP_Quiz\n+\t *\u002F\n+\tpublic function get_quiz() {\n+\t\treturn learn_press_get_quiz( $this->get_item_id() );\n+\t}\n+\n+\tpublic function get_status_label( $status = '' ) {\n+\t\t$statuses = array(\n+\t\t\t'started'     => __( 'In Progress', 'learnpress' ),\n+\t\t\t'in-progress' => __( 'In Progress', 'learnpress' ),\n+\t\t\t'completed'   => __( 'Completed', 'learnpress' ),\n+\t\t\t'passed'      => __( 'Passed', 'learnpress' ),\n+\t\t\t'failed'      => __( 'Failed', 'learnpress' ),\n+\t\t);\n+\n+\t\tif ( ! $status ) {\n+\t\t\t$status = $this->get_status();\n+\t\t}\n+\n+\t\treturn ! empty( $statuses[ $status ] ) ? $statuses[ $status ] : __( 'Not Started', 'learnpress' );\n+\t}\n+\n+\t\u002F**\n+\t * Get ID of the course that this item assigned to.\n+\t *\n+\t * @return array|mixed\n+\t *\u002F\n+\tpublic function get_course_id() {\n+\t\treturn $this->get_data( 'ref_id' );\n+\t}\n+\n+\t\u002F**\n+\t * Get result\n+\t *\n+\t * @param string $prop\n+\t *\n+\t * @return array|bool|mixed\n+\t *\u002F\n+\tpublic function get_result( $prop = '' ) {\n+\t\t$result = $this->calculate_quiz_result();\n+\n+\t\t\u002F\u002F Fix temporary for case call 'grade' - addons called\n+\t\tif ( 'grade' === $prop ) {\n+\t\t\tif ( $result['pass'] ) {\n+\t\t\t\t$result['grade'] = 'passed';\n+\t\t\t} else {\n+\t\t\t\t$result['grade'] = 'failed';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $prop && $result && array_key_exists( $prop, $result ) ? $result[ $prop ] : $result;\n+\t}\n+\n+\t\u002F**\n+\t * Calculate result of quiz.\n+\t *\n+\t * @param string $prop\n+\t * @param bool   $force - Optional. Force to refresh cache.\n+\t *\n+\t * Clear cache on\n+\t * @see LP_REST_Users_Controller::start_quiz() | retake quiz\n+\t *\n+\t * @return LP_Quiz_Results|bool|mixed\n+\t * @throws Exception\n+\t * @editor tungnx\n+\t * @modify 4.1.3\n+\t * @version 4.0.1\n+\t *\u002F\n+\tpublic function get_results( string $prop = 'result', bool $force = false ) {\n+\t\tif ( ! $this->get_status() ) {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t$lp_quiz_cache = LP_Quiz_Cache::instance();\n+\n+\t\t$key_cache = sprintf( '%d\u002Fuser\u002F%d\u002Fcourse\u002F%d', $this->get_item_id(), $this->get_user_id(), $this->get_course_id() );\n+\t\t$result    = $lp_quiz_cache->get_cache( $key_cache );\n+\n+\t\tif ( false === $result || $force ) {\n+\t\t\t\u002F\u002F $result = $this->_get_results();\n+\n+\t\t\t\u002F\u002F if ( false === $result ) {\n+\t\t\t$result = $this->calculate_results();\n+\t\t\t\u002F\u002F }\n+\n+\t\t\t$lp_quiz_cache->set_cache( $key_cache, $result );\n+\t\t}\n+\n+\t\t$result['user_item_id']   = $this->get_user_item_id();\n+\t\t$result['interval']       = array( $this->get_start_time(), $this->get_end_time() );\n+\t\t$result['graduation']     = $this->get_graduation();\n+\t\t$result['graduationText'] = $this->get_graduation_text();\n+\n+\t\treturn $prop ? $result[ $prop ] : new LP_Quiz_Results( $result );\n+\t}\n+\n+\t\u002F**\n+\t * Get user quiz graduation text for displaying purpose. [Passed, Failed, null]\n+\t *\n+\t * @since 4.0.0\n+\t *\n+\t * @return mixed\n+\t *\u002F\n+\tpublic function get_graduation_text() {\n+\t\t$graduation = $this->get_graduation();\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-quiz-graduation-text', learn_press_get_graduation_text( $graduation ) );\n+\t}\n+\n+\t\u002F**\n+\t * Get Timestamp remaining when user doing quiz\n+\t *\n+\t * @author tungnx\n+\t * @version 1.0.1\n+\t * @sicne 4.1.4.1\n+\t * @return int\n+\t *\u002F\n+\tpublic function get_timestamp_remaining(): int {\n+\t\t$timestamp_remaining = - 1;\n+\t\t$quiz                = false;\n+\t\t$user_quiz           = false;\n+\n+\t\ttry {\n+\t\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\n+\t\t\tif ( ! $quiz || LP_ITEM_STARTED != $this->get_status() ) {\n+\t\t\t\treturn $timestamp_remaining;\n+\t\t\t}\n+\n+\t\t\t$parent_id = $this->get_parent_id();\n+\t\t\t$duration  = $quiz->get_duration()->get() . ' second';\n+\n+\t\t\t$filter              = new LP_User_Items_Filter();\n+\t\t\t$filter->parent_id   = $parent_id;\n+\t\t\t$filter->item_id     = $this->get_item_id();\n+\t\t\t$filter->user_id     = get_current_user_id();\n+\t\t\t$user_quiz           = LP_User_Items_DB::getInstance()->get_user_course_item( $filter, true );\n+\t\t\t$course_start_time   = $user_quiz->start_time;\n+\t\t\t$timestamp_expire    = strtotime( $course_start_time . ' +' . $duration );\n+\t\t\t$timestamp_current   = time();\n+\t\t\t$timestamp_remaining = $timestamp_expire - $timestamp_current;\n+\n+\t\t\tif ( $timestamp_remaining \u003C 0 ) {\n+\t\t\t\t$timestamp_remaining = 0;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-course-quiz\u002Ftimestamp_remaining', $timestamp_remaining, $user_quiz, $quiz );\n+\t}\n+\n+\t\u002F**\n+\t * Get all attempts of a quiz.\n+\t *\n+\t * @param string $args\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_attempts( $limit = 3 ) {\n+\t\t$limit = $limit ?? 3;\n+\n+\t\t$limit = absint( apply_filters( 'lp\u002Fquiz\u002Fget-attempts\u002Flimit', $limit ) );\n+\n+\t\t$results = LP_User_Items_Result_DB::instance()->get_results( $this->get_user_item_id(), $limit, true );\n+\t\t$output  = array();\n+\n+\t\tif ( ! empty( $results ) ) {\n+\t\t\tforeach ( $results as $result ) {\n+\t\t\t\tif ( $result && is_string( $result ) ) {\n+\t\t\t\t\t$result = json_decode( $result );\n+\n+\t\t\t\t\tunset( $result->questions );\n+\n+\t\t\t\t\t$output[] = $result;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $output;\n+\t}\n+\n+\t\u002F**\n+\t * Get question ids user has started inside quiz.\n+\t *\n+\t * @since 4.0.0\n+\t *\n+\t * @return bool|array\n+\t *\u002F\n+\tpublic function get_questions() {\n+\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\n+\t\t$ids  = $quiz->get_question_ids();\n+\n+\t\treturn apply_filters( 'learn-press\u002Fuser-item-quiz-questions', $ids, $this->get_user_id(), $this );\n+\t}\n+\n+\t\u002F**\n+\t * Calculate results of quiz.\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t * @version 4.0.0\n+\t *\u002F\n+\tpublic function calculate_results(): array {\n+\t\t$quiz         = learn_press_get_quiz( $this->get_item_id() );\n+\t\t$last_results = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\n+\t\tif ( ! $last_results ) {\n+\t\t\t$last_results = array();\n+\t\t}\n+\n+\t\t$questions = $last_results['questions'] ?? array_fill_keys( $quiz->get_question_ids(), array() );\n+\n+\t\t$result = array(\n+\t\t\t'questions'         => array(),\n+\t\t\t'mark'              => $quiz->get_mark(),\n+\t\t\t'user_mark'         => 0,\n+\t\t\t'question_count'    => 0,\n+\t\t\t'question_empty'    => 0,\n+\t\t\t'question_answered' => 0,\n+\t\t\t'question_wrong'    => 0,\n+\t\t\t'question_correct'  => 0,\n+\t\t\t'status'            => $this->get_status(),\n+\t\t\t'result'            => 0,\n+\t\t\t'time_spend'        => $this->get_time_interval( 'display' ),\n+\t\t\t'passing_grade'     => $quiz->get_passing_grade(),\n+\t\t);\n+\n+\t\tif ( $questions ) {\n+\t\t\tforeach ( $questions as $question_id => $last_checked ) {\n+\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t\tif ( ! $question ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\t$answered          = array_key_exists( 'answered', $last_checked ) ? $last_checked['answered'] : '';\n+\t\t\t\t$check             = apply_filters( 'learn-press\u002Fquiz\u002Fcheck-question-result', $question->check( $answered ), $question_id, $this );\n+\t\t\t\t$check['answered'] = $answered;\n+\n+\t\t\t\tif ( $check['answered'] && $check['correct'] ) {\n+\t\t\t\t\t$result['question_correct'] ++;\n+\t\t\t\t\t$result['user_mark'] += array_key_exists( 'mark', $check ) ? floatval( $check['mark'] ) : $question->get_mark();\n+\t\t\t\t} else {\n+\t\t\t\t\t$negative_marking = apply_filters( 'learn-press\u002Fget-negative-marking-value', floatval( $question->get_mark() ), $question_id, $quiz->get_id() );\n+\n+\t\t\t\t\t\u002F\u002F If answered is empty consider user has skipped question\n+\t\t\t\t\tif ( ! $check['answered'] ) {\n+\t\t\t\t\t\tif ( $quiz->get_negative_marking() && $quiz->get_minus_skip_questions() ) {\n+\t\t\t\t\t\t\t$result['user_mark'] -= $negative_marking;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$result['question_empty'] ++;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\n+\t\t\t\t\t\t\t$result['user_mark'] -= $negative_marking;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$result['question_wrong'] ++;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\t$result['questions'][ $question_id ] = apply_filters( 'learn-press\u002Fquestion-results-data', $last_checked ? array_merge( $last_checked, $check ) : $check, $question_id, $quiz->get_id() );\n+\n+\t\t\t\tif ( $check['answered'] ) {\n+\t\t\t\t\t$result['question_answered'] ++;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$result['user_mark'] = ( $result['user_mark'] >= 0 ) ? $result['user_mark'] : 0;\n+\n+\t\t\t$percent          = $result['mark'] ? ( $result['user_mark'] \u002F $result['mark'] ) * 100 : 0;\n+\t\t\t$result['result'] = $percent;\n+\t\t\t$grade            = '';\n+\n+\t\t\tif ( $this->get_status() === 'completed' ) {\n+\t\t\t\t$grade = $percent >= $this->get_quiz()->get_data( 'passing_grade' ) ? 'passed' : 'failed';\n+\t\t\t\t$this->_set_data( 'graduation', $grade );\n+\t\t\t}\n+\n+\t\t\t$result['question_count'] = count( $questions );\n+\n+\t\t\tif ( $grade ) {\n+\t\t\t\tlearn_press_update_user_item_field(\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'graduation' => $grade,\n+\t\t\t\t\t),\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'user_item_id' => $this->get_user_item_id(),\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\t\u002F**\n+\t * Calculate result of quiz.\n+\t *\n+\t * @param array $answered [question_id => answered, 'instant_check' => 0]\n+\t *\n+\t * @return array\n+\t * @version 1.0.1\n+\t * @author tungnx\n+\t * @since 4.1.4.1\n+\t *\u002F\n+\tpublic function calculate_quiz_result( array $answered = array() ): array {\n+\t\t$result = array(\n+\t\t\t'questions'         => array(),\n+\t\t\t'mark'              => 0,\n+\t\t\t'user_mark'         => 0,\n+\t\t\t'minus_point'       => 0,\n+\t\t\t'question_count'    => 0,\n+\t\t\t'question_empty'    => 0,\n+\t\t\t'question_answered' => 0,\n+\t\t\t'question_wrong'    => 0,\n+\t\t\t'question_correct'  => 0,\n+\t\t\t'status'            => '',\n+\t\t\t'result'            => 0,\n+\t\t\t'time_spend'        => '',\n+\t\t\t'passing_grade'     => '',\n+\t\t\t'pass'              => 0,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\tif ( LP_ITEM_COMPLETED === $this->get_status() ) {\n+\t\t\t\t$result_tmp = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\n+\t\t\t\tif ( $result_tmp ) {\n+\t\t\t\t\tif ( isset( $result_tmp['user_mark'] ) && $result_tmp['user_mark'] \u003C 0 ) {\n+\t\t\t\t\t\t$result_tmp['user_mark'] = 0;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\t$result = $result_tmp;\n+\t\t\t\t}\n+\n+\t\t\t\treturn $result;\n+\t\t\t}\n+\n+\t\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\n+\n+\t\t\tif ( ! $quiz ) {\n+\t\t\t\tthrow new Exception();\n+\t\t\t}\n+\n+\t\t\t$question_ids             = $quiz->get_question_ids();\n+\t\t\t$result['mark']           = $quiz->get_mark();\n+\t\t\t$result['question_count'] = $quiz->count_questions();\n+\t\t\t$result['time_spend']     = $this->get_time_interval( 'display' );\n+\t\t\t$result['passing_grade']  = $quiz->get_passing_grade();\n+\t\t\t$checked_questions        = $this->get_checked_questions();\n+\n+\t\t\tforeach ( $question_ids as $question_id ) {\n+\t\t\t\t$question = LP_Question::get_question( $question_id );\n+\t\t\t\t$point    = floatval( $question->get_mark() );\n+\n+\t\t\t\t$result['questions'][ $question_id ]             = array();\n+\t\t\t\t$result['questions'][ $question_id ]['answered'] = $answered[ $question_id ] ?? '';\n+\n+\t\t\t\tif ( isset( $answered[ $question_id ] ) ) { \u002F\u002F User's answer\n+\t\t\t\t\t$result['question_answered']++;\n+\n+\t\t\t\t\t$check = $question->check( $answered[ $question_id ] );\n+\t\t\t\t\t$point = apply_filters( 'learn-press\u002Fuser\u002Fcalculate-quiz-result\u002Fpoint', $point, $question, $check );\n+\t\t\t\t\tif ( $check['correct'] ) {\n+\t\t\t\t\t\t$result['question_correct']++;\n+\t\t\t\t\t\t$result['user_mark'] += $point;\n+\n+\t\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = true;\n+\t\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = $point;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tif ( $quiz->get_negative_marking() ) {\n+\t\t\t\t\t\t\t$result['user_mark']   -= $point;\n+\t\t\t\t\t\t\t$result['minus_point'] += $point;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$result['question_wrong']++;\n+\n+\t\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\n+\t\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\n+\t\t\t\t\t}\n+\t\t\t\t} elseif ( ! array_key_exists( 'instant_check', $answered ) ) { \u002F\u002F User skip question\n+\t\t\t\t\tif ( $quiz->get_minus_skip_questions() ) {\n+\t\t\t\t\t\t$result['user_mark']   -= $point;\n+\t\t\t\t\t\t$result['minus_point'] += $point;\n+\t\t\t\t\t}\n+\t\t\t\t\t$result['question_empty']++;\n+\n+\t\t\t\t\t$result['questions'][ $question_id ]['correct'] = false;\n+\t\t\t\t\t$result['questions'][ $question_id ]['mark']    = 0;\n+\t\t\t\t}\n+\n+\t\t\t\t$can_review_quiz = get_post_meta( $quiz->get_id(), '_lp_review', true ) === 'yes';\n+\t\t\t\tif ( $can_review_quiz && ! array_key_exists( 'instant_check', $answered ) ) {\n+\n+\t\t\t\t\t$result['questions'][ $question_id ]['explanation'] = $question->get_explanation();\n+\t\t\t\t\t$result['questions'][ $question_id ]['options']     = learn_press_get_question_options_for_js(\n+\t\t\t\t\t\t$question,\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'include_is_true' => in_array( $question_id, $checked_questions ) || get_post_meta( $quiz->get_id(), '_lp_show_correct_review', true ) === 'yes',\n+\t\t\t\t\t\t\t'answer'          => $answered[ $question_id ] ?? '',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tif ( $result['user_mark'] \u003C 0 ) {\n+\t\t\t\t$result['user_mark'] = 0;\n+\t\t\t}\n+\n+\t\t\tif ( $result['user_mark'] > 0 && $result['mark'] > 0 ) {\n+\t\t\t\t$result['result'] = round( $result['user_mark'] * 100 \u002F $result['mark'], 2, PHP_ROUND_HALF_DOWN );\n+\t\t\t}\n+\n+\t\t\t$passing_grade = $quiz->get_data( 'passing_grade', 0 );\n+\t\t\tif ( $result['result'] >= $passing_grade ) {\n+\t\t\t\t$result['pass'] = 1;\n+\t\t\t} else {\n+\t\t\t\t$result['pass'] = 0;\n+\t\t\t}\n+\t\t} catch ( Throwable $e ) {\n+\n+\t\t}\n+\n+\t\treturn $result;\n+\t}\n+\n+\tpublic function get_option_answer() {\n+\n+\t}\n+\n+\tprotected function _get_results() {\n+\t\treturn LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\t}\n+\n+\tpublic function get_percent_result( $decimal = 2 ) {\n+\t\treturn apply_filters( 'learn-press\u002Fuser\u002Fquiz-percent-result', sprintf( '%s%%', round( $this->get_result( 'result' ), $decimal ), $this->get_user_id(), $this->get_item_id() ) );\n+\t}\n+\n+\tpublic function get_time_interval( $context = '' ) {\n+\t\t$interval = parent::get_time_interval();\n+\n+\t\tif ( $context == 'display' ) {\n+\t\t\t$quiz = $this->get_quiz();\n+\n+\t\t\tif ( $quiz && $interval && $quiz->get_duration() ) {\n+\t\t\t\t$interval = new LP_Duration( $interval );\n+\t\t\t\t$interval = $interval->to_timer();\n+\t\t\t} else {\n+\t\t\t\t$interval = '--:--';\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $interval;\n+\t}\n+\n+\t\u002F**\n+\t * Return TRUE if user has pressed SKIP on this question\n+\t *\n+\t * @param int $question_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_skipped( $question_id ) {\n+\t\treturn $this->get_question_answer( $question_id ) === '__SKIPPED__';\n+\t}\n+\n+\tpublic function is_answered( $question_id ) {\n+\t\t$result = $this->get_results();\n+\n+\t\tif ( ! empty( $result['questions'][ $question_id ] ) ) {\n+\t\t\treturn $result['questions'][ $question_id ]['answered'];\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\tpublic function is_answered_true( $question_id ) {\n+\t\t$result = $this->get_results( false );\n+\n+\t\tif ( ! empty( $result['questions'][ $question_id ] ) ) {\n+\t\t\treturn $result['questions'][ $question_id ]['correct'];\n+\t\t}\n+\n+\t\treturn false;\n+\t}\n+\n+\t\u002F**\n+\t * Get questions user has answered.\n+\t *\n+\t * @param bool $percent - Optional. TRUE will return by percentage with total questions.\n+\t *\n+\t * @return float|int|mixed\n+\t *\u002F\n+\tpublic function get_questions_answered( $percent = false ) {\n+\t\t$result = $this->get_results( '' );\n+\n+\t\tif ( $percent ) {\n+\t\t\tif ( $result['question_count'] ) {\n+\t\t\t\t$return = 0;\n+\t\t\t} else {\n+\t\t\t\t$return = $result['question_answered'] ? ( $result['question_answered'] \u002F $result['question_count'] ) * 100 : 0;\n+\t\t\t}\n+\t\t} else {\n+\t\t\t$return = $result['question_answered'];\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * Get total mark user achieved.\n+\t *\n+\t * @param bool $percent - Optional. TRUE will return by percentage with total mark.\n+\t *\n+\t * @return float|int|mixed\n+\t *\u002F\n+\tpublic function get_mark( $percent = false ) {\n+\t\t$result = $this->get_results();\n+\n+\t\tif ( $percent ) {\n+\t\t\t$return = $result['mark'] ? ( $result['user_mark'] \u002F $result['mark'] ) * 100 : 0;\n+\t\t} else {\n+\t\t\t$return = $result['user_mark'];\n+\t\t}\n+\n+\t\treturn $return;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.0\n+\t *\u002F\n+\tpublic function get_total_questions() {\n+\t\t_deprecated_function( __METHOD__, '4.2.0' );\n+\t\t$quiz      = learn_press_get_quiz( $this->get_item_id() );\n+\t\t$questions = $quiz->get_question_ids();\n+\n+\t\treturn sizeof( $questions );\n+\t}\n+\n+\tpublic function get_quiz_mark() {\n+\t\t$result = $this->get_results();\n+\n+\t\treturn $result['mark'];\n+\t}\n+\n+\t\u002F**\n+\t * Return time remaining.\n+\t *\n+\t * @param string $return - Optional.\n+\t *\n+\t * @return LP_Duration\n+\t * @deprecated 4.1.7.3\n+\t *\u002F\n+\tpublic function get_time_remaining( $return = 'object' ) {\n+\t\t_deprecated_function( __METHOD__, '4.1.7.3' );\n+\t\t\u002F*$time = parent::get_time_remaining( $return );\n+\n+\t\treturn apply_filters( 'learn-press\u002Fquiz\u002Ftime-remaining', $time, $this->get_item_id(), $this->get_course_id(), $this->get_user_id() );*\u002F\n+\t}\n+\n+\t\u002F**\n+\t * Get all questions user has already used \"Check\"\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function get_checked_questions(): array {\n+\t\t$value = $this->get_meta( '_lp_question_checked', true );\n+\n+\t\tif ( $value ) {\n+\t\t\t$value = (array) $value;\n+\t\t} else {\n+\t\t\t$value = array();\n+\t\t}\n+\n+\t\treturn $value;\n+\t}\n+\n+\tpublic function add_checked_question( $id ) {\n+\t\tsettype( $id, 'array' );\n+\t\t$checked = $this->get_checked_questions();\n+\t\t$checked = array_merge( $checked, $id );\n+\n+\t\t$this->update_meta( '_lp_question_checked', $checked );\n+\n+\t\treturn $checked;\n+\t}\n+\n+\t\u002F**\n+\t * Return true if user has already checked a question.\n+\t *\n+\t * @param int $question_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_checked_question( $question_id ) {\n+\t\treturn in_array( $question_id, $this->get_checked_questions() );\n+\t}\n+\n+\t\u002F**\n+\t * Instant check question\n+\t *\n+\t * @param int   $question_id\n+\t * @param mixed $answered\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function instant_check_question( int $question_id, $answered = null ): array {\n+\t\t$question = learn_press_get_question( $question_id );\n+\t\tif ( ! $question ) {\n+\t\t\tthrow new Exception( __( 'The question is invalid!', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$can_check = $this->can_check_answer( $question_id );\n+\t\tif ( ! $can_check ) {\n+\t\t\tthrow new Exception( __( 'Cannot check the answer to the question.', 'learnpress' ) );\n+\t\t}\n+\n+\t\t$answered_check = array(\n+\t\t\t'instant_check' => 1,\n+\t\t\t$question_id    => $answered,\n+\t\t);\n+\n+\t\t\u002F\u002F For case save result when check instant answer\n+\t\t$result_instant_check = LP_User_Items_Result_DB::instance()->get_result( $this->get_user_item_id() );\n+\t\tif ( $result_instant_check ) {\n+\t\t\tforeach ( $result_instant_check['questions'] as $question_answer_id => $question_answer ) {\n+\t\t\t\tif ( ! empty( $question_answer['answered'] ) ) {\n+\t\t\t\t\t$answered_check[ $question_answer_id ] = $question_answer['answered'];\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t$result_answer = $this->calculate_quiz_result( $answered_check );\n+\n+\t\tLP_User_Items_Result_DB::instance()->update( $this->get_user_item_id(), json_encode( $result_answer ) );\n+\t\t$this->add_checked_question( $question_id );\n+\n+\t\t$checked['answered'] = $answered;\n+\t\t$checked['mark']     = $result_answer['questions'][ $question_id ]['mark'];\n+\t\t$checked['correct']  = $result_answer['questions'][ $question_id ]['correct'];\n+\n+\t\treturn $checked;\n+\t}\n+\n+\t\u002F**\n+\t * @param int $question_id\n+\t *\n+\t * @return int\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function hint( $question_id ) {\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\treturn false;\n+\t\t$remain = $this->can_hint_answer();\n+\n+\t\tif ( $remain ) {\n+\t\t\tif ( ! $this->has_hinted_question( $question_id ) ) {\n+\t\t\t\t$checked   = $this->get_hint_questions();\n+\t\t\t\t$checked[] = $question_id;\n+\t\t\t\t$this->set_meta( '_lp_question_hint', $checked );\n+\t\t\t}\n+\n+\t\t\t$count = $this->get_count_hint();\n+\t\t\t$this->update_meta();\n+\t\t\t$remain --;\n+\t\t} else {\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\treturn $remain;\n+\t}\n+\n+\t\u002F**\n+\t * Return true if user has already checked a question.\n+\t *\n+\t * @param int $question_id\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function has_hinted_question( $question_id ) {\n+\t\treturn in_array( $question_id, $this->get_hint_questions() );\n+\t}\n+\n+\tpublic function get_check_answer_count() {\n+\t\treturn count( $this->get_checked_questions() );\n+\t}\n+\n+\t\u002F**\n+\t * @param int $question_id - Added since 3.3.0\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function can_check_answer( int $question_id = 0 ) : bool {\n+\t\t$can  = false;\n+\t\t$quiz = learn_press_get_quiz( $this->get_item_id() );\n+\n+\t\tif ( ! $quiz ) {\n+\t\t\treturn $can;\n+\t\t}\n+\n+\t\tif ( $quiz->get_instant_check() && $this->get_status() === 'started' ) {\n+\t\t\t$can = ! $this->has_checked_question( $question_id );\n+\t\t}\n+\n+\t\treturn apply_filters( 'learn-press\u002Fcan-instant-check-question', $can, $question_id, $this->get_item_id(), $this->get_course_id() );\n+\t}\n+\n+\t\u002F**\n+\t * Get number retaken count.\n+\t *\n+\t * @return integer\n+\t *\u002F\n+\tpublic function get_retaken_count(): int {\n+\t\treturn absint( learn_press_get_user_item_meta( $this->get_user_item_id(), '_lp_retaken_count' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Update learnpress_user_itemmeta retaken\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function update_retake_count() {\n+\t\t$count = $this->get_retaken_count();\n+\t\t$count ++;\n+\n+\t\treturn $this->update_meta( '_lp_retaken_count', $count );\n+\t}\n+\n+\t\u002F**\n+\t * Get all questions user has already used \"Check\"\n+\t *\n+\t * @return array\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function get_hint_questions() {\n+\t\treturn [];\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\t$value = $this->get_meta( '_lp_question_hint', true );\n+\n+\t\tif ( $value ) {\n+\t\t\t$value = (array) $value;\n+\t\t} else {\n+\t\t\t$value = array();\n+\t\t}\n+\n+\t\treturn $value;\n+\t}\n+\n+\t\u002F**\n+\t * @deprecated 4.2.5\n+\t *\u002F\n+\tpublic function get_count_hint() {\n+\t\t_deprecated_function( __METHOD__, '4.2.5' );\n+\t\treturn 0;\n+\t\treturn count( $this->get_hint_questions() );\n+\t}\n+\n+\t\u002F**\n+\t * Return true if check answer is enabled.\n+\t *\n+\t * @return bool\n+\t *\u002F\n+\tpublic function can_hint_answer() {\n+\t\treturn apply_filters( 'learn-press\u002Fuser-quiz\u002Fcan-hint-answer', true, $this->get_id(), $this->get_course_id() );\n+\t}\n+\n+\t\u002F**\n+\t * @return bool\n+\t *\u002F\n+\tpublic function is_review_questions(): bool {\n+\t\treturn LP_Global::quiz_question() && ( $this->get_status() === 'completed' );\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FCourse\u002FFilterCourseWidget.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FCourse\u002FFilterCourseWidget.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FCourse\u002FFilterCourseWidget.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FCourse\u002FFilterCourseWidget.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Widgets\\Course;\r\n-use LearnPress\\Widgets\\LPWidgetBase;\r\n-\r\n-\u002F**\r\n- * Class AbstractWidget\r\n- *\r\n- * @package LearnPress\\Widgets\r\n- * @since 4.2.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class FilterCourseWidget extends LPWidgetBase {\r\n-\tpublic $lp_widget_id    = 'course_filter';\r\n-\tpublic $lp_widget_class = 'lp-widget-course-filter';\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$this->lp_widget_name        = __( 'LearnPress - Course Filter', 'learnpress' );\r\n-\t\t$this->lp_widget_description = __( 'Widget Course Filter', 'learnpress' );\r\n-\t\tparent::__construct();\r\n-\t}\r\n-\r\n-\tpublic function widget( $args, $instance ) {\r\n-\t\t$title   = $instance['title'] ?? '';\r\n-\t\t$content = $instance['content'] ?? '';\r\n-\r\n-\t\techo $args['before_widget'];\r\n-\t\techo '\u003Ch2 class=\"widget-title\">' . $title . '\u003C\u002Fh2>';\r\n-\t\techo '\u003Cp>' . $content . '\u003C\u002Fp>';\r\n-\t\techo $args['after_widget'];\r\n-\t}\r\n-\r\n-\tpublic function form( $instance ) {\r\n-\t\t$title   = esc_attr( $instance['title'] ?? '' );\r\n-\t\t$content = esc_textarea( $instance['content'] ?? '' );\r\n-\r\n-\t\t?>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Clabel for=\"\u003C?php echo $this->get_field_id( 'title' ); ?>\">Title:\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput type=\"text\" name=\"\u003C?php echo $this->get_field_name( 'title' ); ?>\" id=\"\u003C?php echo $this->get_field_id( 'title' ); ?>\" value=\"\u003C?php echo $title; ?>\" class=\"widefat\" \u002F>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Clabel for=\"\u003C?php echo $this->get_field_id( 'content' ); ?>\">Content:\u003C\u002Flabel>\r\n-\t\t\t\u003Ctextarea name=\"\u003C?php echo $this->get_field_name( 'content' ); ?>\" id=\"\u003C?php echo $this->get_field_id( 'content' ); ?>\" class=\"widefat\">\u003C?php echo $content; ?>\u003C\u002Ftextarea>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+namespace LearnPress\\Widgets\\Course;\n+use LearnPress\\Widgets\\LPWidgetBase;\n+\n+\u002F**\n+ * Class AbstractWidget\n+ *\n+ * @package LearnPress\\Widgets\n+ * @since 4.2.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class FilterCourseWidget extends LPWidgetBase {\n+\tpublic $lp_widget_id    = 'course_filter';\n+\tpublic $lp_widget_class = 'lp-widget-course-filter';\n+\n+\tpublic function __construct() {\n+\t\t$this->lp_widget_name        = __( 'LearnPress - Course Filter', 'learnpress' );\n+\t\t$this->lp_widget_description = __( 'Widget Course Filter', 'learnpress' );\n+\t\tparent::__construct();\n+\t}\n+\n+\tpublic function widget( $args, $instance ) {\n+\t\t$title   = $instance['title'] ?? '';\n+\t\t$content = $instance['content'] ?? '';\n+\n+\t\techo $args['before_widget'];\n+\t\techo '\u003Ch2 class=\"widget-title\">' . $title . '\u003C\u002Fh2>';\n+\t\techo '\u003Cp>' . $content . '\u003C\u002Fp>';\n+\t\techo $args['after_widget'];\n+\t}\n+\n+\tpublic function form( $instance ) {\n+\t\t$title   = esc_attr( $instance['title'] ?? '' );\n+\t\t$content = esc_textarea( $instance['content'] ?? '' );\n+\n+\t\t?>\n+\t\t\u003Cp>\n+\t\t\t\u003Clabel for=\"\u003C?php echo $this->get_field_id( 'title' ); ?>\">Title:\u003C\u002Flabel>\n+\t\t\t\u003Cinput type=\"text\" name=\"\u003C?php echo $this->get_field_name( 'title' ); ?>\" id=\"\u003C?php echo $this->get_field_id( 'title' ); ?>\" value=\"\u003C?php echo $title; ?>\" class=\"widefat\" \u002F>\n+\t\t\u003C\u002Fp>\n+\t\t\u003Cp>\n+\t\t\t\u003Clabel for=\"\u003C?php echo $this->get_field_id( 'content' ); ?>\">Content:\u003C\u002Flabel>\n+\t\t\t\u003Ctextarea name=\"\u003C?php echo $this->get_field_name( 'content' ); ?>\" id=\"\u003C?php echo $this->get_field_id( 'content' ); ?>\" class=\"widefat\">\u003C?php echo $content; ?>\u003C\u002Ftextarea>\n+\t\t\u003C\u002Fp>\n+\t\t\u003C?php\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-extra.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-extra.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-extra.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-extra.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,102 +1,102 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Course Progress Widget.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Course_Extra' ) ) {\r\n-\tclass LP_Widget_Course_Extra extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_extra';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Extra information in Course settings', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_extra';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Extra', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'     => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => esc_html__( 'Course Extra', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'type'      => array(\r\n-\t\t\t\t\t'label'   => esc_html__( 'Type', 'learnpress' ),\r\n-\t\t\t\t\t'type'    => 'select',\r\n-\t\t\t\t\t'options' => array(\r\n-\t\t\t\t\t\t'key_features'    => esc_html__( 'Key features', 'learnpress' ),\r\n-\t\t\t\t\t\t'target_audience' => esc_html__( 'Target audience', 'learnpress' ),\r\n-\t\t\t\t\t\t'requirements'    => esc_html__( 'Requirements', 'learnpress' ),\r\n-\t\t\t\t\t),\r\n-\t\t\t\t\t'std'     => 'key_features',\r\n-\t\t\t\t),\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\r\n-\t\t\t\t\t'type'      => 'autocomplete',\r\n-\t\t\t\t\t'post_type' => LP_COURSE_CPT,\r\n-\t\t\t\t\t'std'       => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class' => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Show widget in frontend.\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\tif ( empty( $instance['course_id'] ) ) {\r\n-\t\t\t\treturn new WP_Error( 'no_params', esc_html__( 'Error: Please select a Course.', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$classes = array( 'lp-widget-course-extra' );\r\n-\r\n-\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\r\n-\t\t\t$classes[]             = $instance['css_class'];\r\n-\r\n-\t\t\t$course_id = absint( $instance['course_id'] );\r\n-\t\t\t$course    = learn_press_get_course( $course_id );\r\n-\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'No Course found!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\r\n-\t\t\t\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"lp-widget-course-extra__content\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tswitch ( $instance['type'] ) {\r\n-\t\t\t\t\t\tcase 'key_features':\r\n-\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_key_features( $course_id );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'target_audience':\r\n-\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_target_audiences( $course_id );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t\tcase 'requirements':\r\n-\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_requirements( $course_id );\r\n-\t\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Course Progress Widget.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Course_Extra' ) ) {\n+\tclass LP_Widget_Course_Extra extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_extra';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Extra information in Course settings', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_extra';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Extra', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'     => array(\n+\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => esc_html__( 'Course Extra', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'type'      => array(\n+\t\t\t\t\t'label'   => esc_html__( 'Type', 'learnpress' ),\n+\t\t\t\t\t'type'    => 'select',\n+\t\t\t\t\t'options' => array(\n+\t\t\t\t\t\t'key_features'    => esc_html__( 'Key features', 'learnpress' ),\n+\t\t\t\t\t\t'target_audience' => esc_html__( 'Target audience', 'learnpress' ),\n+\t\t\t\t\t\t'requirements'    => esc_html__( 'Requirements', 'learnpress' ),\n+\t\t\t\t\t),\n+\t\t\t\t\t'std'     => 'key_features',\n+\t\t\t\t),\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\n+\t\t\t\t\t'type'      => 'autocomplete',\n+\t\t\t\t\t'post_type' => LP_COURSE_CPT,\n+\t\t\t\t\t'std'       => '',\n+\t\t\t\t),\n+\t\t\t\t'css_class' => array(\n+\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Show widget in frontend.\n+\t\t *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\tif ( empty( $instance['course_id'] ) ) {\n+\t\t\t\treturn new WP_Error( 'no_params', esc_html__( 'Error: Please select a Course.', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$classes = array( 'lp-widget-course-extra' );\n+\n+\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\n+\t\t\t$classes[]             = $instance['css_class'];\n+\n+\t\t\t$course_id = absint( $instance['course_id'] );\n+\t\t\t$course    = learn_press_get_course( $course_id );\n+\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'No Course found!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tob_start();\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\n+\t\t\t\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\n+\n+\t\t\t\t\u003Cdiv class=\"lp-widget-course-extra__content\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tswitch ( $instance['type'] ) {\n+\t\t\t\t\t\tcase 'key_features':\n+\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_key_features( $course_id );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'target_audience':\n+\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_target_audiences( $course_id );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t\tcase 'requirements':\n+\t\t\t\t\t\t\tLearnPress::instance()->template( 'course' )->course_extra_requirements( $course_id );\n+\t\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-filter.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-filter.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-filter.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-filter.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Course Filter Widget.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  1.0.0\r\n- * @since 4.2.3.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Config;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Course_Filter' ) ) {\r\n-\tclass LP_Widget_Course_Filter extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_filter';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Course Filter', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_filter';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Filter', 'learnpress' );\r\n-\t\t\t$this->settings           = Config::instance()->get( 'filter-course', 'widgets\u002Fcourse' );\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Show widget in frontend.\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$data = array_merge(\r\n-\t\t\t\t[ 'params_url' => $params['params_url'] ?? lp_archive_skeleton_get_args() ],\r\n-\t\t\t\t$instance\r\n-\t\t\t);\r\n-\r\n-\t\t\tob_start();\r\n-\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $data );\r\n-\t\t\treturn ob_get_clean();\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Course Filter Widget.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  1.0.0\n+ * @since 4.2.3.2\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Config;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Course_Filter' ) ) {\n+\tclass LP_Widget_Course_Filter extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_filter';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Course Filter', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_filter';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Filter', 'learnpress' );\n+\t\t\t$this->settings           = Config::instance()->get( 'filter-course', 'widgets\u002Fcourse' );\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Show widget in frontend.\n+\t\t *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$data = array_merge(\n+\t\t\t\t[ 'params_url' => $params['params_url'] ?? lp_archive_skeleton_get_args() ],\n+\t\t\t\t$instance\n+\t\t\t);\n+\n+\t\t\tob_start();\n+\t\t\tdo_action( 'learn-press\u002Ffilter-courses\u002Flayout', $data );\n+\t\t\treturn ob_get_clean();\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-info.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-info.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-info.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-info.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Course Info Widget.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Course_Info' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Widget_Course_Info\r\n-\t *\u002F\r\n-\tclass LP_Widget_Course_Info extends LP_Widget {\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP_Widget_Course_Info constructor.\r\n-\t\t *\u002F\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_info';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Course Infomation', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_info';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Info', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'     => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => esc_html__( 'Course Info', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\r\n-\t\t\t\t\t'type'      => 'autocomplete',\r\n-\t\t\t\t\t'post_type' => LP_COURSE_CPT,\r\n-\t\t\t\t\t'std'       => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class' => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\r\n-\r\n-\t\t\tif ( ! empty( $instance['course_id'] ) ) {\r\n-\t\t\t\t$course = learn_press_get_course( $instance['course_id'] );\r\n-\r\n-\t\t\t\tif ( $course ) {\r\n-\t\t\t\t\treturn learn_press_get_template_content(\r\n-\t\t\t\t\t\t'widgets\u002Fcourse-info.php',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'course'   => $course,\r\n-\t\t\t\t\t\t\t'instance' => $instance,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn new WP_Error( 'no_params', esc_html__( 'Error: Please select a Course.', 'learnpress' ) );\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Course Info Widget.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Course_Info' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Widget_Course_Info\n+\t *\u002F\n+\tclass LP_Widget_Course_Info extends LP_Widget {\n+\n+\t\t\u002F**\n+\t\t * LP_Widget_Course_Info constructor.\n+\t\t *\u002F\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_info';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Course Infomation', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_info';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Info', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'     => array(\n+\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => esc_html__( 'Course Info', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\n+\t\t\t\t\t'type'      => 'autocomplete',\n+\t\t\t\t\t'post_type' => LP_COURSE_CPT,\n+\t\t\t\t\t'std'       => '',\n+\t\t\t\t),\n+\t\t\t\t'css_class' => array(\n+\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\n+\n+\t\t\tif ( ! empty( $instance['course_id'] ) ) {\n+\t\t\t\t$course = learn_press_get_course( $instance['course_id'] );\n+\n+\t\t\t\tif ( $course ) {\n+\t\t\t\t\treturn learn_press_get_template_content(\n+\t\t\t\t\t\t'widgets\u002Fcourse-info.php',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'course'   => $course,\n+\t\t\t\t\t\t\t'instance' => $instance,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\treturn new WP_Error( 'no_params', esc_html__( 'Error: Please select a Course.', 'learnpress' ) );\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-progress.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-progress.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fcourse-progress.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fcourse-progress.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,89 +1,89 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Course Progress Widget.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Course_Progress' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Widget_Course_Progress\r\n-\t *\u002F\r\n-\tclass LP_Widget_Course_Progress extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_progress';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Course Progress', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_progress';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Progress', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'     => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => esc_html__( 'Course Progress', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'course_id' => array(\r\n-\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\r\n-\t\t\t\t\t'type'      => 'autocomplete',\r\n-\t\t\t\t\t'post_type' => LP_COURSE_CPT,\r\n-\t\t\t\t\t'std'       => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class' => array(\r\n-\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @throws Exception\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$user_id = get_current_user_id();\r\n-\r\n-\t\t\tif ( empty( $user_id ) ) {\r\n-\t\t\t\treturn new WP_Error( 'no_user', esc_html__( 'You need to log in to view the Course Progress', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( empty( $instance['course_id'] ) ) {\r\n-\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'Please choose a course!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course = learn_press_get_course( $instance['course_id'] );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'The course is invalid!', 'learnpress' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$user = learn_press_get_user( $user_id );\r\n-\r\n-\t\t\t$course_data = $user->get_course_data( $course->get_id() );\r\n-\t\t\tif ( ! $course_data ) {\r\n-\t\t\t\treturn new WP_Error( 'no_enroll', sprintf( esc_html__( 'You haven\\'t started %s', 'learnpress' ), $course->get_title() ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( ! $user->has_enrolled_or_finished( $instance['course_id'] ) ) {\r\n-\t\t\t\treturn new WP_Error( 'no_enroll', sprintf( esc_html__( 'You haven\\'t started %s', 'learnpress' ), $course->get_title() ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_results = $course_data->get_result();\r\n-\r\n-\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\r\n-\r\n-\t\t\treturn learn_press_get_template_content(\r\n-\t\t\t\t'widgets\u002Fcourse-progress',\r\n-\t\t\t\tcompact( 'user', 'course', 'instance', 'course_data', 'course_results' )\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Course Progress Widget.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Course_Progress' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Widget_Course_Progress\n+\t *\u002F\n+\tclass LP_Widget_Course_Progress extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_progress';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Course Progress', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_progress';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Course Progress', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'     => array(\n+\t\t\t\t\t'label' => esc_html__( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => esc_html__( 'Course Progress', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'course_id' => array(\n+\t\t\t\t\t'label'     => esc_html__( 'Select Course', 'learnpress' ),\n+\t\t\t\t\t'type'      => 'autocomplete',\n+\t\t\t\t\t'post_type' => LP_COURSE_CPT,\n+\t\t\t\t\t'std'       => '',\n+\t\t\t\t),\n+\t\t\t\t'css_class' => array(\n+\t\t\t\t\t'label' => esc_html__( 'CSS Class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * @throws Exception\n+\t\t *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$user_id = get_current_user_id();\n+\n+\t\t\tif ( empty( $user_id ) ) {\n+\t\t\t\treturn new WP_Error( 'no_user', esc_html__( 'You need to log in to view the Course Progress', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\tif ( empty( $instance['course_id'] ) ) {\n+\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'Please choose a course!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$course = learn_press_get_course( $instance['course_id'] );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\treturn new WP_Error( 'no_course', esc_html__( 'The course is invalid!', 'learnpress' ) );\n+\t\t\t}\n+\n+\t\t\t$user = learn_press_get_user( $user_id );\n+\n+\t\t\t$course_data = $user->get_course_data( $course->get_id() );\n+\t\t\tif ( ! $course_data ) {\n+\t\t\t\treturn new WP_Error( 'no_enroll', sprintf( esc_html__( 'You haven\\'t started %s', 'learnpress' ), $course->get_title() ) );\n+\t\t\t}\n+\n+\t\t\tif ( ! $user->has_enrolled_or_finished( $instance['course_id'] ) ) {\n+\t\t\t\treturn new WP_Error( 'no_enroll', sprintf( esc_html__( 'You haven\\'t started %s', 'learnpress' ), $course->get_title() ) );\n+\t\t\t}\n+\n+\t\t\t$course_results = $course_data->get_result();\n+\n+\t\t\t$instance['css_class'] = $instance['css_class'] ?? '';\n+\n+\t\t\treturn learn_press_get_template_content(\n+\t\t\t\t'widgets\u002Fcourse-progress',\n+\t\t\t\tcompact( 'user', 'course', 'instance', 'course_data', 'course_results' )\n+\t\t\t);\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Ffeatured-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Ffeatured-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Ffeatured-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Ffeatured-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,106 +1,106 @@\n-\u003C?php\r\n-\u002F**\r\n- * Feature Courses Widget.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Featured_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Widget_Featured_Courses\r\n-\t *\u002F\r\n-\tclass LP_Widget_Featured_Courses extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_featured';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Featured courses', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_featured';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Featured Courses', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'            => array(\r\n-\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => __( 'Featured Courses', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_teacher'     => array(\r\n-\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_thumbnail'   => array(\r\n-\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'limit'            => array(\r\n-\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 1,\r\n-\t\t\t\t\t'std'   => 4,\r\n-\t\t\t\t),\r\n-\t\t\t\t'desc_length'      => array(\r\n-\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 0,\r\n-\t\t\t\t\t'std'   => 10,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_price'       => array(\r\n-\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class'        => array(\r\n-\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'bottom_link_text' => array(\r\n-\t\t\t\t\t'label' => __( 'Go to courses', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => 'Go to Courses',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Send content for API\r\n-\t\t *\r\n-\t\t * @param array $instance Widget Instance\r\n-\t\t * @param array $params RestAPI param need for content.\r\n-\t\t * @return string || WP_Error\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\r\n-\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\r\n-\t\t\t$instance['limit']            = $instance['limit'] ?? 4;\r\n-\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\r\n-\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\r\n-\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\r\n-\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\r\n-\r\n-\t\t\t$filter        = new LP_Course_Filter();\r\n-\t\t\t$filter->limit = $instance['limit'];\r\n-\r\n-\t\t\t$courses = LP_Course_DB::getInstance()->get_featured_courses( $filter );\r\n-\r\n-\t\t\t$data = learn_press_get_template_content(\r\n-\t\t\t\t'widgets\u002Ffeatured-courses.php',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'courses'  => $courses,\r\n-\t\t\t\t\t'instance' => $instance,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Feature Courses Widget.\n+ *\n+ * @author  ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Featured_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Widget_Featured_Courses\n+\t *\u002F\n+\tclass LP_Widget_Featured_Courses extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_featured';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Featured courses', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_featured';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Featured Courses', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'            => array(\n+\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => __( 'Featured Courses', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'show_teacher'     => array(\n+\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'show_thumbnail'   => array(\n+\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'limit'            => array(\n+\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 1,\n+\t\t\t\t\t'std'   => 4,\n+\t\t\t\t),\n+\t\t\t\t'desc_length'      => array(\n+\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 0,\n+\t\t\t\t\t'std'   => 10,\n+\t\t\t\t),\n+\t\t\t\t'show_price'       => array(\n+\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'css_class'        => array(\n+\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t\t'bottom_link_text' => array(\n+\t\t\t\t\t'label' => __( 'Go to courses', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => 'Go to Courses',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Send content for API\n+\t\t *\n+\t\t * @param array $instance Widget Instance\n+\t\t * @param array $params RestAPI param need for content.\n+\t\t * @return string || WP_Error\n+\t\t *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\n+\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\n+\t\t\t$instance['limit']            = $instance['limit'] ?? 4;\n+\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\n+\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\n+\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\n+\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\n+\n+\t\t\t$filter        = new LP_Course_Filter();\n+\t\t\t$filter->limit = $instance['limit'];\n+\n+\t\t\t$courses = LP_Course_DB::getInstance()->get_featured_courses( $filter );\n+\n+\t\t\t$data = learn_press_get_template_content(\n+\t\t\t\t'widgets\u002Ffeatured-courses.php',\n+\t\t\t\tarray(\n+\t\t\t\t\t'courses'  => $courses,\n+\t\t\t\t\t'instance' => $instance,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $data;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FLPRegisterWidget.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FLPRegisterWidget.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FLPRegisterWidget.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FLPRegisterWidget.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Widgets;\r\n-\r\n-use LearnPress\\Helpers\\Singleton;\r\n-\r\n-\u002F**\r\n- * Class AbstractWidget\r\n- *\r\n- * @package LearnPress\\Widgets\r\n- * @since 4.2.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LPRegisterWidget {\r\n-\tuse Singleton;\r\n-\r\n-\tprotected function init() {\r\n-\t\tadd_action( 'widgets_init', array( $this, 'register_widgets' ) );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Register widgets of LearnPress.\r\n-\t *\r\n-\t * @return void\r\n-\t *\u002F\r\n-\tpublic function register_widgets() {\r\n-\t\t$widgets = apply_filters(\r\n-\t\t\t'learn-press\u002Fwidgets\u002Fregister',\r\n-\t\t\t[\r\n-\t\t\t\t\u002F\u002FFilterCourseWidget::class,\r\n-\t\t\t]\r\n-\t\t);\r\n-\r\n-\t\tforeach ( $widgets as $widget ) {\r\n-\t\t\tregister_widget( $widget );\r\n-\t\t}\r\n-\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+namespace LearnPress\\Widgets;\n+\n+use LearnPress\\Helpers\\Singleton;\n+\n+\u002F**\n+ * Class AbstractWidget\n+ *\n+ * @package LearnPress\\Widgets\n+ * @since 4.2.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class LPRegisterWidget {\n+\tuse Singleton;\n+\n+\tprotected function init() {\n+\t\tadd_action( 'widgets_init', array( $this, 'register_widgets' ) );\n+\t}\n+\n+\t\u002F**\n+\t * Register widgets of LearnPress.\n+\t *\n+\t * @return void\n+\t *\u002F\n+\tpublic function register_widgets() {\n+\t\t$widgets = apply_filters(\n+\t\t\t'learn-press\u002Fwidgets\u002Fregister',\n+\t\t\t[\n+\t\t\t\t\u002F\u002FFilterCourseWidget::class,\n+\t\t\t]\n+\t\t);\n+\n+\t\tforeach ( $widgets as $widget ) {\n+\t\t\tregister_widget( $widget );\n+\t\t}\n+\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FLPWidgetBase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FLPWidgetBase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002FLPWidgetBase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002FLPWidgetBase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\Widgets;\r\n-\r\n-use LearnPress\\MetaBox\\LPMetaBoxField;\r\n-use WP_Widget;\r\n-\r\n-\u002F**\r\n- * Class AbstractWidget\r\n- *\r\n- * @package LearnPress\\Widgets\r\n- * @since 4.2.3.2\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class LPWidgetBase extends WP_Widget {\r\n-\tprotected $prefix                = 'learnpress_';\r\n-\tprotected $lp_widget_id          = '';\r\n-\tprotected $lp_widget_name        = '';\r\n-\tprotected $lp_widget_description = '';\r\n-\tprotected $lp_widget_class       = '';\r\n-\tprotected $lp_widget_options     = [];\r\n-\tprotected $lp_widget_setting     = [];\r\n-\r\n-\tpublic function __construct() {\r\n-\t\t$id_base         = $this->prefix . $this->lp_widget_id;\r\n-\t\t$name            = $this->lp_widget_name;\r\n-\t\t$widget_options  = array_merge(\r\n-\t\t\t[\r\n-\t\t\t\t'description'                 => $this->lp_widget_description,\r\n-\t\t\t\t'classname'                   => $this->lp_widget_class,\r\n-\t\t\t\t'customize_selective_refresh' => true,\r\n-\t\t\t],\r\n-\t\t\t$this->lp_widget_options\r\n-\t\t);\r\n-\t\t$control_options = $this->control_options;\r\n-\t\tparent::__construct( $id_base, $name, $widget_options, $control_options );\r\n-\t}\r\n-\r\n-\tpublic function form( $instance ) {\r\n-\t\tif ( empty( $this->lp_widget_setting ) ) {\r\n-\t\t\techo '\u003Cp>' . esc_html__( 'There are no options for this widget.', 'learnpress' ) . '\u003C\u002Fp>';\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $this->lp_widget_setting as $key => $setting ) {\r\n-\t\t\t$extra            = $setting;\r\n-\t\t\t$extra['value']   = $instance[ $key ] ?? '';\r\n-\t\t\t$extra['default'] = $setting['std'] ?? '';\r\n-\t\t\t$extra['id']      = $this->get_field_id( $key );\r\n-\r\n-\t\t\tif ( isset( $setting['type'] ) && LPMetaBoxField::CHECKBOX === $setting['type'] ) {\r\n-\t\t\t\t$html_wrapper = [\r\n-\t\t\t\t\t'\u003Cp style=\"display:flex;flex-direction:row-reverse;justify-content:left;align-items:center\">' => '\u003C\u002Fp>',\r\n-\t\t\t\t\t'\u003Clabel for=\"' . $extra['id'] . '\">' . ( $setting['label'] ?? '' ) . '\u003C\u002Flabel>' => '',\r\n-\t\t\t\t];\r\n-\t\t\t} else {\r\n-\t\t\t\t$html_wrapper = [\r\n-\t\t\t\t\t'\u003Cp style=\"display:flex;flex-direction:column\">' => '\u003C\u002Fp>',\r\n-\t\t\t\t\t'\u003Clabel for=\"' . $extra['id'] . '\">' . ( $setting['label'] ?? '' ) . '\u003C\u002Flabel>' => '',\r\n-\t\t\t\t];\r\n-\t\t\t}\r\n-\r\n-\t\t\tLPMetaBoxField::render( $setting['type'], $this->get_field_name( $key ), $extra, $html_wrapper );\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n+\u003C?php\n+\n+namespace LearnPress\\Widgets;\n+\n+use LearnPress\\MetaBox\\LPMetaBoxField;\n+use WP_Widget;\n+\n+\u002F**\n+ * Class AbstractWidget\n+ *\n+ * @package LearnPress\\Widgets\n+ * @since 4.2.3.2\n+ * @version 1.0.0\n+ *\u002F\n+class LPWidgetBase extends WP_Widget {\n+\tprotected $prefix                = 'learnpress_';\n+\tprotected $lp_widget_id          = '';\n+\tprotected $lp_widget_name        = '';\n+\tprotected $lp_widget_description = '';\n+\tprotected $lp_widget_class       = '';\n+\tprotected $lp_widget_options     = [];\n+\tprotected $lp_widget_setting     = [];\n+\n+\tpublic function __construct() {\n+\t\t$id_base         = $this->prefix . $this->lp_widget_id;\n+\t\t$name            = $this->lp_widget_name;\n+\t\t$widget_options  = array_merge(\n+\t\t\t[\n+\t\t\t\t'description'                 => $this->lp_widget_description,\n+\t\t\t\t'classname'                   => $this->lp_widget_class,\n+\t\t\t\t'customize_selective_refresh' => true,\n+\t\t\t],\n+\t\t\t$this->lp_widget_options\n+\t\t);\n+\t\t$control_options = $this->control_options;\n+\t\tparent::__construct( $id_base, $name, $widget_options, $control_options );\n+\t}\n+\n+\tpublic function form( $instance ) {\n+\t\tif ( empty( $this->lp_widget_setting ) ) {\n+\t\t\techo '\u003Cp>' . esc_html__( 'There are no options for this widget.', 'learnpress' ) . '\u003C\u002Fp>';\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tforeach ( $this->lp_widget_setting as $key => $setting ) {\n+\t\t\t$extra            = $setting;\n+\t\t\t$extra['value']   = $instance[ $key ] ?? '';\n+\t\t\t$extra['default'] = $setting['std'] ?? '';\n+\t\t\t$extra['id']      = $this->get_field_id( $key );\n+\n+\t\t\tif ( isset( $setting['type'] ) && LPMetaBoxField::CHECKBOX === $setting['type'] ) {\n+\t\t\t\t$html_wrapper = [\n+\t\t\t\t\t'\u003Cp style=\"display:flex;flex-direction:row-reverse;justify-content:left;align-items:center\">' => '\u003C\u002Fp>',\n+\t\t\t\t\t'\u003Clabel for=\"' . $extra['id'] . '\">' . ( $setting['label'] ?? '' ) . '\u003C\u002Flabel>' => '',\n+\t\t\t\t];\n+\t\t\t} else {\n+\t\t\t\t$html_wrapper = [\n+\t\t\t\t\t'\u003Cp style=\"display:flex;flex-direction:column\">' => '\u003C\u002Fp>',\n+\t\t\t\t\t'\u003Clabel for=\"' . $extra['id'] . '\">' . ( $setting['label'] ?? '' ) . '\u003C\u002Flabel>' => '',\n+\t\t\t\t];\n+\t\t\t}\n+\n+\t\t\tLPMetaBoxField::render( $setting['type'], $this->get_field_name( $key ), $extra, $html_wrapper );\n+\t\t}\n+\t}\n+}\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fpopular-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fpopular-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Fpopular-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Fpopular-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,108 +1,108 @@\n-\u003C?php\r\n-\u002F**\r\n- * Popular Courses Widget.\r\n- *\r\n- * @author  ThimPress \u003Cnhamdv>\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Popular_Courses' ) ) {\r\n-\tclass LP_Widget_Popular_Courses extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_popular';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Popular courses', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_popular';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Popular Courses', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'            => array(\r\n-\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => __( 'Popular Courses', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_teacher'     => array(\r\n-\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_thumbnail'   => array(\r\n-\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'limit'            => array(\r\n-\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 1,\r\n-\t\t\t\t\t'std'   => 4,\r\n-\t\t\t\t),\r\n-\t\t\t\t'desc_length'      => array(\r\n-\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\r\n-\t\t\t\t\t'id'    => 'desc_length',\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 0,\r\n-\t\t\t\t\t'std'   => 10,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_price'       => array(\r\n-\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class'        => array(\r\n-\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'bottom_link_text' => array(\r\n-\t\t\t\t\t'label' => __( 'Go to Courses', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => 'Go to Courses',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Show widget in frontend.\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$data         = '';\r\n-\t\t\t$lp_course_db = LP_Course_DB::getInstance();\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\r\n-\t\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\r\n-\t\t\t\t$instance['limit']            = $instance['limit'] ?? 3;\r\n-\t\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\r\n-\t\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\r\n-\t\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\r\n-\t\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\r\n-\r\n-\t\t\t\t$filter        = new LP_Course_Filter();\r\n-\t\t\t\t$filter->limit = $instance['limit'];\r\n-\t\t\t\t$lp_course_db->get_courses_order_by_popular( $filter );\r\n-\t\t\t\t$courses = $lp_course_db->get_courses( $filter );\r\n-\t\t\t\t$courses = $lp_course_db->get_values_by_key( $courses, 'ID' );\r\n-\r\n-\t\t\t\t$data = learn_press_get_template_content(\r\n-\t\t\t\t\t'widgets\u002Fpopular-courses.php',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'courses'  => $courses,\r\n-\t\t\t\t\t\t'instance' => $instance,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\t}\r\n-\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Popular Courses Widget.\n+ *\n+ * @author  ThimPress \u003Cnhamdv>\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Popular_Courses' ) ) {\n+\tclass LP_Widget_Popular_Courses extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_popular';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Popular courses', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_popular';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Popular Courses', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'            => array(\n+\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => __( 'Popular Courses', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'show_teacher'     => array(\n+\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'show_thumbnail'   => array(\n+\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'limit'            => array(\n+\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 1,\n+\t\t\t\t\t'std'   => 4,\n+\t\t\t\t),\n+\t\t\t\t'desc_length'      => array(\n+\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\n+\t\t\t\t\t'id'    => 'desc_length',\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 0,\n+\t\t\t\t\t'std'   => 10,\n+\t\t\t\t),\n+\t\t\t\t'show_price'       => array(\n+\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'css_class'        => array(\n+\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t\t'bottom_link_text' => array(\n+\t\t\t\t\t'label' => __( 'Go to Courses', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => 'Go to Courses',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Show widget in frontend.\n+\t\t *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$data         = '';\n+\t\t\t$lp_course_db = LP_Course_DB::getInstance();\n+\n+\t\t\ttry {\n+\t\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\n+\t\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\n+\t\t\t\t$instance['limit']            = $instance['limit'] ?? 3;\n+\t\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\n+\t\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\n+\t\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\n+\t\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\n+\n+\t\t\t\t$filter        = new LP_Course_Filter();\n+\t\t\t\t$filter->limit = $instance['limit'];\n+\t\t\t\t$lp_course_db->get_courses_order_by_popular( $filter );\n+\t\t\t\t$courses = $lp_course_db->get_courses( $filter );\n+\t\t\t\t$courses = $lp_course_db->get_values_by_key( $courses, 'ID' );\n+\n+\t\t\t\t$data = learn_press_get_template_content(\n+\t\t\t\t\t'widgets\u002Fpopular-courses.php',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'courses'  => $courses,\n+\t\t\t\t\t\t'instance' => $instance,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tLP_Debug::error_log( $e );\n+\t\t\t}\n+\n+\t\t\treturn $data;\n+\t\t}\n+\t}\n+\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Frecent-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Frecent-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWidgets\u002Frecent-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWidgets\u002Frecent-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,101 +1,101 @@\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * Recent Courses Widget.\r\n- *\r\n- * @author  ThimPress \u003Cnhamdv>\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FWidgets\r\n- * @version  4.0.0\r\n- * @extends  LP_Widget\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LP_Widget_Recent_Courses' ) ) {\r\n-\r\n-\t\u002F**\r\n-\t * Class LP_Widget_Recent_Courses\r\n-\t *\u002F\r\n-\tclass LP_Widget_Recent_Courses extends LP_Widget {\r\n-\r\n-\t\tpublic function __construct() {\r\n-\t\t\t$this->widget_cssclass    = 'learnpress widget_course_recent';\r\n-\t\t\t$this->widget_description = esc_html__( 'Display the Recent courses', 'learnpress' );\r\n-\t\t\t$this->widget_id          = 'learnpress_widget_course_recent';\r\n-\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Recent Courses', 'learnpress' );\r\n-\t\t\t$this->settings           = array(\r\n-\t\t\t\t'title'            => array(\r\n-\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => __( 'Recent Courses', 'learnpress' ),\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_teacher'     => array(\r\n-\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_thumbnail'   => array(\r\n-\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'limit'            => array(\r\n-\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 1,\r\n-\t\t\t\t\t'std'   => 4,\r\n-\t\t\t\t),\r\n-\t\t\t\t'desc_length'      => array(\r\n-\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'number',\r\n-\t\t\t\t\t'min'   => 0,\r\n-\t\t\t\t\t'std'   => 10,\r\n-\t\t\t\t),\r\n-\t\t\t\t'show_price'       => array(\r\n-\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'checkbox',\r\n-\t\t\t\t\t'std'   => 1,\r\n-\t\t\t\t),\r\n-\t\t\t\t'css_class'        => array(\r\n-\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => '',\r\n-\t\t\t\t),\r\n-\t\t\t\t'bottom_link_text' => array(\r\n-\t\t\t\t\t'label' => __( 'Go to Courses', 'learnpress' ),\r\n-\t\t\t\t\t'type'  => 'text',\r\n-\t\t\t\t\t'std'   => 'Go to Courses',\r\n-\t\t\t\t),\r\n-\t\t\t);\r\n-\r\n-\t\t\tparent::__construct();\r\n-\t\t}\r\n-\r\n-\t\t\u002F** Send content for API *\u002F\r\n-\t\tpublic function lp_rest_api_content( $instance, $params ) {\r\n-\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\r\n-\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\r\n-\t\t\t$instance['limit']            = $instance['limit'] ?? 4;\r\n-\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\r\n-\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\r\n-\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\r\n-\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\r\n-\r\n-\t\t\t$filter        = new LP_Course_Filter();\r\n-\t\t\t$filter->limit = $instance['limit'];\r\n-\r\n-\t\t\t$courses = LP_Course_DB::getInstance()->get_recent_courses( $filter );\r\n-\r\n-\t\t\t$data = learn_press_get_template_content(\r\n-\t\t\t\t'widgets\u002Frecent-courses.php',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'courses'  => $courses,\r\n-\t\t\t\t\t'instance' => $instance,\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\treturn $data;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+\u002F**\n+ * Recent Courses Widget.\n+ *\n+ * @author  ThimPress \u003Cnhamdv>\n+ * @category Widgets\n+ * @package  Learnpress\u002FWidgets\n+ * @version  4.0.0\n+ * @extends  LP_Widget\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LP_Widget_Recent_Courses' ) ) {\n+\n+\t\u002F**\n+\t * Class LP_Widget_Recent_Courses\n+\t *\u002F\n+\tclass LP_Widget_Recent_Courses extends LP_Widget {\n+\n+\t\tpublic function __construct() {\n+\t\t\t$this->widget_cssclass    = 'learnpress widget_course_recent';\n+\t\t\t$this->widget_description = esc_html__( 'Display the Recent courses', 'learnpress' );\n+\t\t\t$this->widget_id          = 'learnpress_widget_course_recent';\n+\t\t\t$this->widget_name        = esc_html__( 'LearnPress - Recent Courses', 'learnpress' );\n+\t\t\t$this->settings           = array(\n+\t\t\t\t'title'            => array(\n+\t\t\t\t\t'label' => __( 'Title', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => __( 'Recent Courses', 'learnpress' ),\n+\t\t\t\t),\n+\t\t\t\t'show_teacher'     => array(\n+\t\t\t\t\t'label' => __( 'Show instructor', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'show_thumbnail'   => array(\n+\t\t\t\t\t'label' => __( 'Show thumbnail', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'limit'            => array(\n+\t\t\t\t\t'label' => __( 'Limit', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 1,\n+\t\t\t\t\t'std'   => 4,\n+\t\t\t\t),\n+\t\t\t\t'desc_length'      => array(\n+\t\t\t\t\t'label' => __( 'Description length', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'number',\n+\t\t\t\t\t'min'   => 0,\n+\t\t\t\t\t'std'   => 10,\n+\t\t\t\t),\n+\t\t\t\t'show_price'       => array(\n+\t\t\t\t\t'label' => __( 'Show price', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'checkbox',\n+\t\t\t\t\t'std'   => 1,\n+\t\t\t\t),\n+\t\t\t\t'css_class'        => array(\n+\t\t\t\t\t'label' => __( 'CSS class', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => '',\n+\t\t\t\t),\n+\t\t\t\t'bottom_link_text' => array(\n+\t\t\t\t\t'label' => __( 'Go to Courses', 'learnpress' ),\n+\t\t\t\t\t'type'  => 'text',\n+\t\t\t\t\t'std'   => 'Go to Courses',\n+\t\t\t\t),\n+\t\t\t);\n+\n+\t\t\tparent::__construct();\n+\t\t}\n+\n+\t\t\u002F** Send content for API *\u002F\n+\t\tpublic function lp_rest_api_content( $instance, $params ) {\n+\t\t\t$instance['show_teacher']     = $instance['show_teacher'] ?? 1;\n+\t\t\t$instance['show_thumbnail']   = $instance['show_thumbnail'] ?? 1;\n+\t\t\t$instance['limit']            = $instance['limit'] ?? 4;\n+\t\t\t$instance['desc_length']      = $instance['desc_length'] ?? 10;\n+\t\t\t$instance['show_price']       = $instance['show_price'] ?? 1;\n+\t\t\t$instance['css_class']        = $instance['css_class'] ?? '';\n+\t\t\t$instance['bottom_link_text'] = $instance['bottom_link_text'] ?? esc_html__( 'Go to Courses', 'learnpress' );\n+\n+\t\t\t$filter        = new LP_Course_Filter();\n+\t\t\t$filter->limit = $instance['limit'];\n+\n+\t\t\t$courses = LP_Course_DB::getInstance()->get_recent_courses( $filter );\n+\n+\t\t\t$data = learn_press_get_template_content(\n+\t\t\t\t'widgets\u002Frecent-courses.php',\n+\t\t\t\tarray(\n+\t\t\t\t\t'courses'  => $courses,\n+\t\t\t\t\t'instance' => $instance,\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\treturn $data;\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWPGDPR\u002FErasePersonalData.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWPGDPR\u002FErasePersonalData.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWPGDPR\u002FErasePersonalData.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWPGDPR\u002FErasePersonalData.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,271 +1,271 @@\n-\u003C?php\r\n-\r\n-namespace LearnPress\\WPGDPR;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Databases\\DataBase;\r\n-use LearnPress\\Databases\\PostDB;\r\n-use LearnPress\\Filters\\FilterBase;\r\n-use LearnPress\\Filters\\OrderPostFilter;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\UserItems\\UserItemModel;\r\n-use LP_Debug;\r\n-use LP_Helper;\r\n-use LP_Post_DB;\r\n-use LP_Order_Filter;\r\n-use LP_User_Items_Filter;\r\n-use LP_User_Items_DB;\r\n-use LP_Filter;\r\n-use LP_User_Items_Result_DB;\r\n-use Throwable;\r\n-use WP_User;\r\n-\r\n-\u002F**\r\n- * class ErasePersonalData\r\n- *\r\n- * @since 4.2.9.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class ErasePersonalData {\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter(\r\n-\t\t\t'wp_privacy_personal_data_erasers',\r\n-\t\t\tfunction ( $erasers ) {\r\n-\t\t\t\t$erasers['lp_user_eraser'] = array(\r\n-\t\t\t\t\t'eraser_friendly_name' => __( 'LP Data Eraser', 'learnpress' ),\r\n-\t\t\t\t\t'callback'             => array( $this, 'eraser_callback' ),\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\treturn $erasers;\r\n-\t\t\t}\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Erase personal data callback\r\n-\t *\r\n-\t * @param string $email\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function eraser_callback( $email, $page ) {\r\n-\t\t$response = array(\r\n-\t\t\t'items_removed'  => false,\r\n-\t\t\t'items_retained' => false,\r\n-\t\t\t'messages'       => array(),\r\n-\t\t\t'done'           => false,\r\n-\t\t);\r\n-\r\n-\t\ttry {\r\n-\t\t\t$user = get_user_by( 'email', $email );\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\t$this->eraser_user_data( $user );\r\n-\t\t\t} else {\r\n-\t\t\t\t$this->eraser_data_via_email( $email );\r\n-\t\t\t}\r\n-\r\n-\t\t\t$response['items_removed'] = true;\r\n-\t\t\t$response['messages']      = array(\r\n-\t\t\t\t__( 'LP erasers Personal Data done', 'learnpress' ),\r\n-\t\t\t\t__( '- Eraser Orders of User', 'learnpress' ),\r\n-\t\t\t\t__( '- Eraser attend course of User', 'learnpress' ),\r\n-\t\t\t\t__( '- Eraser attend lessons, quizzes... of User', 'learnpress' ),\r\n-\t\t\t);\r\n-\t\t\t$response['done']          = true;\r\n-\t\t} catch ( Throwable $e ) {\r\n-\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\t$response['messages'][] = $e->getMessage();\r\n-\t\t\t$response['done']       = true;\r\n-\t\t}\r\n-\r\n-\t\treturn $response;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete related data via email\r\n-\t *\r\n-\t * If not exists user, only email, it is Guest\r\n-\t * So only delete data on tables learnpress_user_items,\r\n-\t * posts type lp_order, learnpress_order_items, learnpress_order_itemmeta\r\n-\t *\r\n-\t * @param string $email\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function eraser_data_via_email( string $email ) {\r\n-\t\t$postDB                = PostDB::getInstance();\r\n-\t\t$filter                = new OrderPostFilter();\r\n-\t\t$filter->only_fields[] = 'p.ID';\r\n-\t\t$filter->join[]        = \"INNER JOIN $postDB->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$filter->where[]       = $postDB->wpdb->prepare(\r\n-\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\r\n-\t\t\t'_checkout_email',\r\n-\t\t\t$email\r\n-\t\t);\r\n-\t\t$order_ids             = $postDB->get_posts( $filter );\r\n-\t\tif ( ! $order_ids ) {\r\n-\t\t\treturn;\r\n-\t\t}\r\n-\r\n-\t\t$order_ids     = PostDb::get_values_by_key( $order_ids );\r\n-\t\t$order_ids     = array_map( 'absint', $order_ids );\r\n-\t\t$order_ids_str = implode( ',', $order_ids );\r\n-\r\n-\t\t\u002F\u002F Delete data on tables: order_items and order_itemmeta\r\n-\t\t$this->delete_order_itemmeta( $order_ids_str );\r\n-\t\t$this->delete_order_items( $order_ids_str );\r\n-\t\t\u002F\u002F Delete order post and meta.\r\n-\t\tforeach ( $order_ids as $order_id ) {\r\n-\t\t\t\u002F\u002F Delete data on tables: learnpress_order_items\r\n-\t\t\t$filter_user_items           = new LP_User_Items_Filter();\r\n-\t\t\t$filter_user_items->ref_type = LP_ORDER_CPT;\r\n-\t\t\t$filter_user_items->ref_id   = $order_id;\r\n-\t\t\t$userItemModel               = UserItemModel::get_user_item_model_from_db( $filter_user_items );\r\n-\t\t\tif ( $userItemModel ) {\r\n-\t\t\t\t$userItemModel->delete();\r\n-\t\t\t}\r\n-\r\n-\t\t\twp_delete_post( $order_id, true );\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Find order item ids on table learnpress_order_items\r\n-\t * Then delete data on table learnpress_order_itemmeta\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete_order_itemmeta( $order_ids_str ) {\r\n-\t\t$db                                     = DataBase::getInstance();\r\n-\t\t$filter_order_itemmeta                  = new FilterBase();\r\n-\t\t$filter_order_itemmeta->only_fields[]   = 'order_item_id';\r\n-\t\t$filter_order_itemmeta->run_query_count = false;\r\n-\t\t$filter_order_itemmeta->collection      = $db->tb_lp_order_items;\r\n-\t\t$filter_order_itemmeta->where[]         = \"AND order_id IN ($order_ids_str)\";\r\n-\t\t$filter_order_itemmeta->return_string_query = 1;\r\n-\t\t$query_order_item_ids_str                   = $db->execute( $filter_order_itemmeta );\r\n-\r\n-\t\t$filter             = new FilterBase();\r\n-\t\t$filter->where[]    = \"AND learnpress_order_item_id IN ($query_order_item_ids_str)\";\r\n-\t\t$filter->collection = $db->tb_lp_order_itemmeta;\r\n-\t\t$db->delete_execute( $filter );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Delete order ids on table learnpress_order_items\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function delete_order_items( $order_ids_str ) {\r\n-\t\t$db                            = DataBase::getInstance();\r\n-\t\t$filter_order_item             = new FilterBase();\r\n-\t\t$filter_order_item->where[]    = \"AND order_id IN ($order_ids_str)\";\r\n-\t\t$filter_order_item->collection = $db->tb_lp_order_items;\r\n-\t\t$db->delete_execute( $filter_order_item );\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Erase user data\r\n-\t *\r\n-\t * @param WP_User $user\r\n-\t *\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function eraser_user_data( WP_User $user ) {\r\n-\t\t$user_id = $user->ID;\r\n-\t\t$db      = DataBase::getInstance();\r\n-\r\n-\t\t\u002F\u002F Delete data uer meta which meta_key start with _lp\r\n-\t\t$filter_usermeta             = new FilterBase();\r\n-\t\t$filter_usermeta->where[]    = $db->wpdb->prepare(\r\n-\t\t\t'AND user_id = %d AND meta_key LIKE %s',\r\n-\t\t\t$user_id,\r\n-\t\t\t$db->wpdb->esc_like( '_lp' ) . '%'\r\n-\t\t);\r\n-\t\t$filter_usermeta->collection = $db->wpdb->usermeta;\r\n-\t\t$db->delete_execute( $filter_usermeta );\r\n-\t\t\u002F\u002F End delete user meta\r\n-\r\n-\t\t\u002F\u002F Find all user item ids of user\r\n-\t\t$filter_user_items          = new LP_User_Items_Filter();\r\n-\t\t$filter_user_items->user_id = $user_id;\r\n-\t\t$user_items_db              = LP_User_Items_DB::getInstance();\r\n-\t\t$user_items                 = $user_items_db->get_user_items( $filter_user_items );\r\n-\t\tif ( $user_items ) {\r\n-\t\t\tforeach ( $user_items as $user_item ) {\r\n-\t\t\t\t\u002F\u002F Delete user item and user itemmeta\r\n-\t\t\t\t$userItemModel = new UserItemModel( $user_item );\r\n-\t\t\t\t$userItemModel->delete();\r\n-\r\n-\t\t\t\t\u002F\u002F Delete user item results.\r\n-\t\t\t\t$filter_user_item_results             = new FilterBase();\r\n-\t\t\t\t$filter_user_item_results->where[]    = $db->wpdb->prepare(\r\n-\t\t\t\t\t'AND user_item_id = %d',\r\n-\t\t\t\t\t$userItemModel->get_user_item_id()\r\n-\t\t\t\t);\r\n-\t\t\t\t$filter_user_item_results->collection = $db->tb_lp_user_item_results;\r\n-\t\t\t\t$db->delete_execute( $filter_user_item_results );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F\u002F Find all orders of user\r\n-\t\t$postDB                         = PostDB::getInstance();\r\n-\t\t$orderPostFilter                = new OrderPostFilter();\r\n-\t\t$orderPostFilter->only_fields[] = 'p.ID';\r\n-\t\t$orderPostFilter->join[]        = \"INNER JOIN $postDB->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$orderPostFilter->where[]       = $postDB->wpdb->prepare(\r\n-\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\r\n-\t\t\t'_user_id',\r\n-\t\t\t$user_id\r\n-\t\t);\r\n-\t\t$order_ids                      = $postDB->get_posts( $orderPostFilter );\r\n-\t\tif ( $order_ids ) {\r\n-\t\t\t$order_ids     = PostDb::get_values_by_key( $order_ids );\r\n-\t\t\t$order_ids     = array_map( 'absint', $order_ids );\r\n-\t\t\t$order_ids_str = implode( ',', $order_ids );\r\n-\t\t\t$this->delete_order_itemmeta( $order_ids_str );\r\n-\t\t\t$this->delete_order_items( $order_ids_str );\r\n-\r\n-\t\t\tforeach ( $order_ids as $order_id ) {\r\n-\t\t\t\twp_delete_post( $order_id, true );\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t\u002F\u002F End delete orders of user\r\n-\r\n-\t\t\u002F\u002F Find user orders which have multiple user ids\r\n-\t\t$user_id_str            = $postDB->wpdb->prepare( '%\"%d\"%', $user_id );\r\n-\t\t$orderPostFilter->where = array(\r\n-\t\t\t$postDB->wpdb->prepare(\r\n-\t\t\t\t'AND pm.meta_key=%s AND pm.meta_value LIKE %s',\r\n-\t\t\t\t'_user_id',\r\n-\t\t\t\t$user_id_str\r\n-\t\t\t),\r\n-\t\t);\r\n-\r\n-\t\t$order_ids_multiple_users = $postDB->get_posts( $orderPostFilter );\r\n-\t\tif ( $order_ids_multiple_users ) {\r\n-\t\t\t$order_ids = PostDb::get_values_by_key( $order_ids_multiple_users );\r\n-\t\t\t$order_ids = array_map( 'absint', $order_ids );\r\n-\t\t\tforeach ( $order_ids as $order_id ) {\r\n-\t\t\t\t$user_ids = get_post_meta( $order_id, '_user_id', true );\r\n-\r\n-\t\t\t\tif ( count( $user_ids ) \u003C= 1 ) {\r\n-\t\t\t\t\t\u002F\u002F If only 1 user id, delete order\r\n-\t\t\t\t\t$this->delete_order_itemmeta( $order_id );\r\n-\t\t\t\t\t$this->delete_order_items( $order_id );\r\n-\t\t\t\t\twp_delete_post( $order_id, true );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\t\u002F\u002F Search and unset user id of user on array user ids\r\n-\t\t\t\t\t$current_user_order_pos = array_search( $user_id, $user_ids );\r\n-\t\t\t\t\tif ( $current_user_order_pos !== false ) {\r\n-\t\t\t\t\t\tunset( $user_ids[ $current_user_order_pos ] );\r\n-\t\t\t\t\t\tupdate_post_meta( $order_id, '_user_id', $user_ids );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-}\r\n+\u003C?php\n+\n+namespace LearnPress\\WPGDPR;\n+\n+use Exception;\n+use LearnPress\\Databases\\DataBase;\n+use LearnPress\\Databases\\PostDB;\n+use LearnPress\\Filters\\FilterBase;\n+use LearnPress\\Filters\\OrderPostFilter;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\UserItems\\UserItemModel;\n+use LP_Debug;\n+use LP_Helper;\n+use LP_Post_DB;\n+use LP_Order_Filter;\n+use LP_User_Items_Filter;\n+use LP_User_Items_DB;\n+use LP_Filter;\n+use LP_User_Items_Result_DB;\n+use Throwable;\n+use WP_User;\n+\n+\u002F**\n+ * class ErasePersonalData\n+ *\n+ * @since 4.2.9.3\n+ * @version 1.0.0\n+ *\u002F\n+class ErasePersonalData {\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter(\n+\t\t\t'wp_privacy_personal_data_erasers',\n+\t\t\tfunction ( $erasers ) {\n+\t\t\t\t$erasers['lp_user_eraser'] = array(\n+\t\t\t\t\t'eraser_friendly_name' => __( 'LP Data Eraser', 'learnpress' ),\n+\t\t\t\t\t'callback'             => array( $this, 'eraser_callback' ),\n+\t\t\t\t);\n+\n+\t\t\t\treturn $erasers;\n+\t\t\t}\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Erase personal data callback\n+\t *\n+\t * @param string $email\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function eraser_callback( $email, $page ) {\n+\t\t$response = array(\n+\t\t\t'items_removed'  => false,\n+\t\t\t'items_retained' => false,\n+\t\t\t'messages'       => array(),\n+\t\t\t'done'           => false,\n+\t\t);\n+\n+\t\ttry {\n+\t\t\t$user = get_user_by( 'email', $email );\n+\t\t\tif ( $user ) {\n+\t\t\t\t$this->eraser_user_data( $user );\n+\t\t\t} else {\n+\t\t\t\t$this->eraser_data_via_email( $email );\n+\t\t\t}\n+\n+\t\t\t$response['items_removed'] = true;\n+\t\t\t$response['messages']      = array(\n+\t\t\t\t__( 'LP erasers Personal Data done', 'learnpress' ),\n+\t\t\t\t__( '- Eraser Orders of User', 'learnpress' ),\n+\t\t\t\t__( '- Eraser attend course of User', 'learnpress' ),\n+\t\t\t\t__( '- Eraser attend lessons, quizzes... of User', 'learnpress' ),\n+\t\t\t);\n+\t\t\t$response['done']          = true;\n+\t\t} catch ( Throwable $e ) {\n+\t\t\tLP_Debug::error_log( $e );\n+\t\t\t$response['messages'][] = $e->getMessage();\n+\t\t\t$response['done']       = true;\n+\t\t}\n+\n+\t\treturn $response;\n+\t}\n+\n+\t\u002F**\n+\t * Delete related data via email\n+\t *\n+\t * If not exists user, only email, it is Guest\n+\t * So only delete data on tables learnpress_user_items,\n+\t * posts type lp_order, learnpress_order_items, learnpress_order_itemmeta\n+\t *\n+\t * @param string $email\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function eraser_data_via_email( string $email ) {\n+\t\t$postDB                = PostDB::getInstance();\n+\t\t$filter                = new OrderPostFilter();\n+\t\t$filter->only_fields[] = 'p.ID';\n+\t\t$filter->join[]        = \"INNER JOIN $postDB->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$filter->where[]       = $postDB->wpdb->prepare(\n+\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\n+\t\t\t'_checkout_email',\n+\t\t\t$email\n+\t\t);\n+\t\t$order_ids             = $postDB->get_posts( $filter );\n+\t\tif ( ! $order_ids ) {\n+\t\t\treturn;\n+\t\t}\n+\n+\t\t$order_ids     = PostDb::get_values_by_key( $order_ids );\n+\t\t$order_ids     = array_map( 'absint', $order_ids );\n+\t\t$order_ids_str = implode( ',', $order_ids );\n+\n+\t\t\u002F\u002F Delete data on tables: order_items and order_itemmeta\n+\t\t$this->delete_order_itemmeta( $order_ids_str );\n+\t\t$this->delete_order_items( $order_ids_str );\n+\t\t\u002F\u002F Delete order post and meta.\n+\t\tforeach ( $order_ids as $order_id ) {\n+\t\t\t\u002F\u002F Delete data on tables: learnpress_order_items\n+\t\t\t$filter_user_items           = new LP_User_Items_Filter();\n+\t\t\t$filter_user_items->ref_type = LP_ORDER_CPT;\n+\t\t\t$filter_user_items->ref_id   = $order_id;\n+\t\t\t$userItemModel               = UserItemModel::get_user_item_model_from_db( $filter_user_items );\n+\t\t\tif ( $userItemModel ) {\n+\t\t\t\t$userItemModel->delete();\n+\t\t\t}\n+\n+\t\t\twp_delete_post( $order_id, true );\n+\t\t}\n+\t}\n+\n+\t\u002F**\n+\t * Find order item ids on table learnpress_order_items\n+\t * Then delete data on table learnpress_order_itemmeta\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete_order_itemmeta( $order_ids_str ) {\n+\t\t$db                                     = DataBase::getInstance();\n+\t\t$filter_order_itemmeta                  = new FilterBase();\n+\t\t$filter_order_itemmeta->only_fields[]   = 'order_item_id';\n+\t\t$filter_order_itemmeta->run_query_count = false;\n+\t\t$filter_order_itemmeta->collection      = $db->tb_lp_order_items;\n+\t\t$filter_order_itemmeta->where[]         = \"AND order_id IN ($order_ids_str)\";\n+\t\t$filter_order_itemmeta->return_string_query = 1;\n+\t\t$query_order_item_ids_str                   = $db->execute( $filter_order_itemmeta );\n+\n+\t\t$filter             = new FilterBase();\n+\t\t$filter->where[]    = \"AND learnpress_order_item_id IN ($query_order_item_ids_str)\";\n+\t\t$filter->collection = $db->tb_lp_order_itemmeta;\n+\t\t$db->delete_execute( $filter );\n+\t}\n+\n+\t\u002F**\n+\t * Delete order ids on table learnpress_order_items\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function delete_order_items( $order_ids_str ) {\n+\t\t$db                            = DataBase::getInstance();\n+\t\t$filter_order_item             = new FilterBase();\n+\t\t$filter_order_item->where[]    = \"AND order_id IN ($order_ids_str)\";\n+\t\t$filter_order_item->collection = $db->tb_lp_order_items;\n+\t\t$db->delete_execute( $filter_order_item );\n+\t}\n+\n+\t\u002F**\n+\t * Erase user data\n+\t *\n+\t * @param WP_User $user\n+\t *\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function eraser_user_data( WP_User $user ) {\n+\t\t$user_id = $user->ID;\n+\t\t$db      = DataBase::getInstance();\n+\n+\t\t\u002F\u002F Delete data uer meta which meta_key start with _lp\n+\t\t$filter_usermeta             = new FilterBase();\n+\t\t$filter_usermeta->where[]    = $db->wpdb->prepare(\n+\t\t\t'AND user_id = %d AND meta_key LIKE %s',\n+\t\t\t$user_id,\n+\t\t\t$db->wpdb->esc_like( '_lp' ) . '%'\n+\t\t);\n+\t\t$filter_usermeta->collection = $db->wpdb->usermeta;\n+\t\t$db->delete_execute( $filter_usermeta );\n+\t\t\u002F\u002F End delete user meta\n+\n+\t\t\u002F\u002F Find all user item ids of user\n+\t\t$filter_user_items          = new LP_User_Items_Filter();\n+\t\t$filter_user_items->user_id = $user_id;\n+\t\t$user_items_db              = LP_User_Items_DB::getInstance();\n+\t\t$user_items                 = $user_items_db->get_user_items( $filter_user_items );\n+\t\tif ( $user_items ) {\n+\t\t\tforeach ( $user_items as $user_item ) {\n+\t\t\t\t\u002F\u002F Delete user item and user itemmeta\n+\t\t\t\t$userItemModel = new UserItemModel( $user_item );\n+\t\t\t\t$userItemModel->delete();\n+\n+\t\t\t\t\u002F\u002F Delete user item results.\n+\t\t\t\t$filter_user_item_results             = new FilterBase();\n+\t\t\t\t$filter_user_item_results->where[]    = $db->wpdb->prepare(\n+\t\t\t\t\t'AND user_item_id = %d',\n+\t\t\t\t\t$userItemModel->get_user_item_id()\n+\t\t\t\t);\n+\t\t\t\t$filter_user_item_results->collection = $db->tb_lp_user_item_results;\n+\t\t\t\t$db->delete_execute( $filter_user_item_results );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F\u002F Find all orders of user\n+\t\t$postDB                         = PostDB::getInstance();\n+\t\t$orderPostFilter                = new OrderPostFilter();\n+\t\t$orderPostFilter->only_fields[] = 'p.ID';\n+\t\t$orderPostFilter->join[]        = \"INNER JOIN $postDB->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$orderPostFilter->where[]       = $postDB->wpdb->prepare(\n+\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\n+\t\t\t'_user_id',\n+\t\t\t$user_id\n+\t\t);\n+\t\t$order_ids                      = $postDB->get_posts( $orderPostFilter );\n+\t\tif ( $order_ids ) {\n+\t\t\t$order_ids     = PostDb::get_values_by_key( $order_ids );\n+\t\t\t$order_ids     = array_map( 'absint', $order_ids );\n+\t\t\t$order_ids_str = implode( ',', $order_ids );\n+\t\t\t$this->delete_order_itemmeta( $order_ids_str );\n+\t\t\t$this->delete_order_items( $order_ids_str );\n+\n+\t\t\tforeach ( $order_ids as $order_id ) {\n+\t\t\t\twp_delete_post( $order_id, true );\n+\t\t\t}\n+\t\t}\n+\t\t\u002F\u002F End delete orders of user\n+\n+\t\t\u002F\u002F Find user orders which have multiple user ids\n+\t\t$user_id_str            = $postDB->wpdb->prepare( '%\"%d\"%', $user_id );\n+\t\t$orderPostFilter->where = array(\n+\t\t\t$postDB->wpdb->prepare(\n+\t\t\t\t'AND pm.meta_key=%s AND pm.meta_value LIKE %s',\n+\t\t\t\t'_user_id',\n+\t\t\t\t$user_id_str\n+\t\t\t),\n+\t\t);\n+\n+\t\t$order_ids_multiple_users = $postDB->get_posts( $orderPostFilter );\n+\t\tif ( $order_ids_multiple_users ) {\n+\t\t\t$order_ids = PostDb::get_values_by_key( $order_ids_multiple_users );\n+\t\t\t$order_ids = array_map( 'absint', $order_ids );\n+\t\t\tforeach ( $order_ids as $order_id ) {\n+\t\t\t\t$user_ids = get_post_meta( $order_id, '_user_id', true );\n+\n+\t\t\t\tif ( count( $user_ids ) \u003C= 1 ) {\n+\t\t\t\t\t\u002F\u002F If only 1 user id, delete order\n+\t\t\t\t\t$this->delete_order_itemmeta( $order_id );\n+\t\t\t\t\t$this->delete_order_items( $order_id );\n+\t\t\t\t\twp_delete_post( $order_id, true );\n+\t\t\t\t} else {\n+\t\t\t\t\t\u002F\u002F Search and unset user id of user on array user ids\n+\t\t\t\t\t$current_user_order_pos = array_search( $user_id, $user_ids );\n+\t\t\t\t\tif ( $current_user_order_pos !== false ) {\n+\t\t\t\t\t\tunset( $user_ids[ $current_user_order_pos ] );\n+\t\t\t\t\t\tupdate_post_meta( $order_id, '_user_id', $user_ids );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWPGDPR\u002FExportPersonalData.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWPGDPR\u002FExportPersonalData.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Finc\u002FWPGDPR\u002FExportPersonalData.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Finc\u002FWPGDPR\u002FExportPersonalData.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,608 +1,608 @@\n-\u003C?php\r\n-namespace LearnPress\\WPGDPR;\r\n-\r\n-use Exception;\r\n-use LearnPress\\Helpers\\Singleton;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LP_Post_DB;\r\n-use LP_Order_Filter;\r\n-use LP_User_Items_Filter;\r\n-use LP_User_Items_DB;\r\n-use LP_Datetime;\r\n-use LP_Course_DB;\r\n-use LP_Course_Filter;\r\n-\r\n-\u002F**\r\n- * Class ExportPersonalData\r\n- *\r\n- * @since 4.2.9.4\r\n- * @version 1.0.0\r\n- *\u002F\r\n-class ExportPersonalData {\r\n-\r\n-\tuse Singleton;\r\n-\r\n-\tpublic function init() {\r\n-\t\tadd_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporters' ), 6 );\r\n-\t}\r\n-\r\n-\tpublic function register_exporters( $exporters ) {\r\n-\t\t$exporters['learnpress-user-meta']        = array(\r\n-\t\t\t'exporter_friendly_name' => __( 'LearnPress User Meta Data Exporter', 'learnpress' ),\r\n-\t\t\t'callback'               => array( $this, 'export_user_meta' ),\r\n-\t\t);\r\n-\t\t$exporters['learnpress-created-courses']  = array(\r\n-\t\t\t'exporter_friendly_name' => __( 'LearnPress Created Courses Data Exporter', 'learnpress' ),\r\n-\t\t\t'callback'               => array( $this, 'export_user_created_courses' ),\r\n-\t\t);\r\n-\t\t$exporters['learnpress-attended-courses'] = array(\r\n-\t\t\t'exporter_friendly_name' => __( 'LearnPress Attended Courses Data Exporter', 'learnpress' ),\r\n-\t\t\t'callback'               => array( $this, 'export_user_attended_courses' ),\r\n-\t\t);\r\n-\t\t$exporters['learnpress-orders']           = array(\r\n-\t\t\t'exporter_friendly_name' => __( 'LearnPress Orders Data Exporter', 'learnpress' ),\r\n-\t\t\t'callback'               => array( $this, 'export_user_orders' ),\r\n-\t\t);\r\n-\t\treturn $exporters;\r\n-\t}\r\n-\r\n-\tpublic function export_user_meta( $email, $page = 1 ) {\r\n-\t\t$export_items = array();\r\n-\r\n-\t\t$user = get_user_by( 'email', $email );\r\n-\t\tif ( $user ) {\r\n-\t\t\t$user_id   = $user->ID;\r\n-\t\t\t$data      = array();\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\r\n-\t\t\tif ( $userModel->is_instructor() ) {\r\n-\t\t\t\t$instructor_statistic = $userModel->get_instructor_statistic();\r\n-\t\t\t\t$data                 = $this->map_instructor_statistics( $instructor_statistic, $data );\r\n-\t\t\t}\r\n-\t\t\t$student_statistic = $userModel->get_student_statistic();\r\n-\t\t\t$data              = $this->map_student_statistics( $student_statistic, $data );\r\n-\r\n-\t\t\t$social_fields = learn_press_social_profiles();\r\n-\t\t\t$socials       = learn_press_get_user_extra_profile_info( $user_id );\r\n-\t\t\tforeach ( $socials as $key => $value ) {\r\n-\t\t\t\tif ( ! empty( $value ) && isset( $social_fields[ $key ] ) ) {\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => $social_fields[ $key ],\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$export_items[] = array(\r\n-\t\t\t\t'group_id'          => 'learnpress-user-meta',\r\n-\t\t\t\t'group_label'       => __( 'LearnPress Profile Info', 'learnpress' ),\r\n-\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress User Profile Data.', 'learnpress' ),\r\n-\t\t\t\t'item_id'           => 'user_id-' . $user_id,\r\n-\t\t\t\t'data'              => $data,\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'data' => $export_items,\r\n-\t\t\t'done' => true,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map instructor statistics to exportable data\r\n-\t *\r\n-\t * @param array $statistic\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function map_instructor_statistics( array $statistic, array $data ): array {\r\n-\t\tforeach ( $statistic as $key => $value ) {\r\n-\t\t\tswitch ( $key ) {\r\n-\t\t\t\tcase 'total_course':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Total Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'published_course':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Published Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'pending_course':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Pending Course', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'total_student':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Total Student', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'student_completed':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Student Completed', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'student_in_progress':\r\n-\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t'name'  => __( 'Student In-progress', 'learnpress' ),\r\n-\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t);\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Map student statistics to exportable data\r\n-\t *\r\n-\t * @param array $statistic\r\n-\t * @param array $data\r\n-\t *\r\n-\t * @return array\r\n-\t *\u002F\r\n-\tpublic function map_student_statistics( array $statistic, array $data ): array {\r\n-\t\tforeach ( $statistic as $key => $value ) {\r\n-\t\t\tif ( $value ) {\r\n-\t\t\t\tswitch ( $key ) {\r\n-\t\t\t\t\tcase 'enrolled_courses':\r\n-\t\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t\t'name'  => __( 'Enrolled Course', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'in_progress_course':\r\n-\t\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t\t'name'  => __( 'Inprogress Course', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'finished_courses':\r\n-\t\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t\t'name'  => __( 'Finished Course', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'passed_courses':\r\n-\t\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t\t'name'  => __( 'Passed Course', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t\tcase 'failed_courses':\r\n-\t\t\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t\t\t'name'  => __( 'Failed Course', 'learnpress' ),\r\n-\t\t\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t\tbreak;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Export user attended courses data\r\n-\t *\r\n-\t * @param string $email\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function export_user_attended_courses( $email, $page = 1 ) {\r\n-\t\t$export_items = array();\r\n-\t\t$done         = true;\r\n-\t\t$user         = get_user_by( 'email', $email );\r\n-\t\tif ( $user ) {\r\n-\t\t\t$user_id = $user->ID;\r\n-\t\t\t$lpuidb  = LP_User_Items_DB::getInstance();\r\n-\r\n-\t\t\t$ui_filter              = new LP_User_Items_Filter();\r\n-\t\t\t$ui_filter->user_id     = $user_id;\r\n-\t\t\t$ui_filter->item_type   = LP_COURSE_CPT;\r\n-\t\t\t$ui_filter->only_fields = array( 'DISTINCT (item_id) AS item_id', 'ui.user_item_id' );\r\n-\t\t\t$ui_filter->field_count = 'ui.item_id';\r\n-\t\t\t$ui_filter->limit       = 10;\r\n-\t\t\t$ui_filter->page        = $page ?? 1;\r\n-\t\t\t$lp_ui_ids              = $lpuidb->get_user_items( $ui_filter );\r\n-\t\t\tif ( ! empty( $lp_ui_ids ) ) {\r\n-\t\t\t\tforeach ( $lp_ui_ids as $useritem ) {\r\n-\t\t\t\t\t$export_items[] = array(\r\n-\t\t\t\t\t\t'group_id'          => 'learnpress-attended-courses',\r\n-\t\t\t\t\t\t'group_label'       => __( 'LearnPress Attended Courses', 'learnpress' ),\r\n-\t\t\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress Attended Courses Data.', 'learnpress' ),\r\n-\t\t\t\t\t\t'item_id'           => 'user_item_id-' . $useritem->item_id,\r\n-\t\t\t\t\t\t'data'              => $this->get_user_course_personal_data( $useritem, $user_id ),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$done = 10 > count( $lp_ui_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'data' => $export_items,\r\n-\t\t\t'done' => $done,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user course personal data\r\n-\t *\r\n-\t * @param object $useritem\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function get_user_course_personal_data( $useritem, $user_id ) {\r\n-\t\t$data            = array();\r\n-\t\t$userCourseModel = UserCourseModel::find( $user_id, $useritem->item_id );\r\n-\t\t$props           = apply_filters(\r\n-\t\t\t'learnpress\u002Fexport-user-attended-courses-personal-data\u002Fprops',\r\n-\t\t\tarray(\r\n-\t\t\t\t'course_name' => __( 'Course name', 'learnpress' ),\r\n-\t\t\t\t'start_time'  => __( 'Start time', 'learnpress' ),\r\n-\t\t\t\t'end_time'    => __( 'End time', 'learnpress' ),\r\n-\t\t\t\t'status'      => __( 'Status', 'learnpress' ),\r\n-\t\t\t\t'result'      => __( 'Result', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t$userCourseModel\r\n-\t\t);\r\n-\t\t$date_format     = get_option( 'date_format' );\r\n-\t\tforeach ( $props as $prop => $name ) {\r\n-\t\t\t$value = '';\r\n-\t\t\tswitch ( $prop ) {\r\n-\t\t\t\tcase 'course_name':\r\n-\t\t\t\t\t$value = get_the_title( $useritem->item_id );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$value = $userCourseModel->is_finished() ? $userCourseModel->get_string_i18n( $userCourseModel->get_graduation() ) : $userCourseModel->get_string_i18n( $userCourseModel->get_status() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'start_time':\r\n-\t\t\t\t\t$value = wp_date( $date_format, strtotime( $userCourseModel->start_time ) );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'end_time':\r\n-\t\t\t\t\t$value = ! empty( $userCourseModel->end_time ) ? wp_date( $date_format, strtotime( $userCourseModel->end_time ) ) : '-';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'result':\r\n-\t\t\t\t\t$result = $userCourseModel->calculate_course_results();\r\n-\t\t\t\t\t$value  = ! empty( $result['result'] ) ? $result['result'] . '%' : '-';\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$value = apply_filters( 'learnpress\u002Fexport-user-attended-courses-personal-data-prop', $value, $prop, $userCourseModel );\r\n-\t\t\tif ( $value ) {\r\n-\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t'name'  => $name,\r\n-\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Export user created courses data\r\n-\t *\r\n-\t * @param string $email\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function export_user_created_courses( $email, $page = 1 ) {\r\n-\t\t$export_items = array();\r\n-\t\t$done         = true;\r\n-\t\t$user         = get_user_by( 'email', $email );\r\n-\t\t$userModel    = $user ? UserModel::find( $user->ID, true ) : null;\r\n-\t\tif ( $userModel && $userModel->is_instructor() ) {\r\n-\t\t\t$user_id                 = $user->ID;\r\n-\t\t\t$filter                  = new LP_Course_Filter();\r\n-\t\t\t$course_db               = LP_Course_DB::getInstance();\r\n-\t\t\t$filter->post_author     = $user_id;\r\n-\t\t\t$filter->only_fields[]   = 'p.ID as ID';\r\n-\t\t\t$filter->limit           = 10;\r\n-\t\t\t$filter->page            = (int) $page;\r\n-\t\t\t$filter->run_query_count = false;\r\n-\t\t\t$course_ids              = $course_db->get_courses( $filter );\r\n-\t\t\tif ( ! empty( $course_ids ) ) {\r\n-\t\t\t\tforeach ( $course_ids as $c ) {\r\n-\t\t\t\t\t$export_items[] = array(\r\n-\t\t\t\t\t\t'group_id'          => 'learnpress-created-courses',\r\n-\t\t\t\t\t\t'group_label'       => __( 'LearnPress Created Courses', 'learnpress' ),\r\n-\t\t\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress Created Courses Data.', 'learnpress' ),\r\n-\t\t\t\t\t\t'item_id'           => 'course_id-' . $c->ID,\r\n-\t\t\t\t\t\t'data'              => $this->get_user_created_courses_personal_data( $c->ID, $user_id ),\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t$done = 10 > count( $course_ids );\r\n-\t\t}\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'data' => $export_items,\r\n-\t\t\t'done' => $done,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get user created courses personal data\r\n-\t *\r\n-\t * @param int $course_id\r\n-\t * @param int $user_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function get_user_created_courses_personal_data( $course_id, $user_id ): array {\r\n-\t\t$data        = array();\r\n-\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t$props       = apply_filters(\r\n-\t\t\t'learn-press\u002Fexport-user-created-courses-personal-data\u002Fprops',\r\n-\t\t\tarray(\r\n-\t\t\t\t'title'         => __( 'Course name', 'learnpress' ),\r\n-\t\t\t\t'price'         => __( 'Price', 'learnpress' ),\r\n-\t\t\t\t'duration'      => __( 'Duration', 'learnpress' ),\r\n-\t\t\t\t'level'         => __( 'Level', 'learnpress' ),\r\n-\t\t\t\t'students'      => __( 'Total Students', 'learnpress' ),\r\n-\t\t\t\t'lp_lesson'     => __( 'Lessons', 'learnpress' ),\r\n-\t\t\t\t'lp_quiz'       => __( 'Quizzes', 'learnpress' ),\r\n-\t\t\t\t'lp_assignment' => __( 'Assignments', 'learnpress' ),\r\n-\t\t\t\t'lp_h5p'        => __( 'H5P Quizzes', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t$courseModel,\r\n-\t\t\t$user_id\r\n-\t\t);\r\n-\t\tforeach ( $props as $prop => $name ) {\r\n-\t\t\t$value = '';\r\n-\t\t\tswitch ( $prop ) {\r\n-\t\t\t\tcase 'lp_lesson':\r\n-\t\t\t\tcase 'lp_quiz':\r\n-\t\t\t\tcase 'lp_assignment':\r\n-\t\t\t\tcase 'lp_h5p':\r\n-\t\t\t\t\t$value = $courseModel->count_items( $prop );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'students':\r\n-\t\t\t\t\t$value = $courseModel->count_students();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'duration':\r\n-\t\t\t\t\t$duration        = $courseModel->get_meta_value_by_key( '_lp_duration', '' );\r\n-\t\t\t\t\t$duration_arr    = explode( ' ', $duration );\r\n-\t\t\t\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\r\n-\t\t\t\t\t$duration_type   = $duration_arr[1] ?? '';\r\n-\t\t\t\t\tif ( empty( $duration_number ) ) {\r\n-\t\t\t\t\t\t$value = __( 'Lifetime', 'learnpress' );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$value = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'level':\r\n-\t\t\t\t\t$level  = $courseModel->get_meta_value_by_key( '_lp_level', '' );\r\n-\t\t\t\t\t$levels = lp_course_level();\r\n-\t\t\t\t\t$value  = $levels[ $level ] ?? $levels['all'];\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'price':\r\n-\t\t\t\t\t$value = $courseModel->is_free() ? __( 'Free', 'learnpress' ) : learn_press_format_price( $courseModel->get_price() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tif ( is_callable( array( $courseModel, 'get_' . $prop ) ) ) {\r\n-\t\t\t\t\t\t$value = $courseModel->{\"get_$prop\"}();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\t\t\t$value = apply_filters( 'learnpress\u002Fexport-user-created-courses-personal-data\u002Fprop', $value, $prop, $courseModel, $user_id );\r\n-\t\t\tif ( $value ) {\r\n-\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t'name'  => $name,\r\n-\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Export user orders data\r\n-\t *\r\n-\t * @param string $email\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function export_user_orders( $email, $page = 1 ) {\r\n-\t\t$export_items = array();\r\n-\t\t$done         = true;\r\n-\t\t$user         = get_user_by( 'email', $email );\r\n-\t\tif ( $user ) {\r\n-\t\t\t$order_data   = $this->export_order_via_user( $user, $page );\r\n-\t\t\t$export_items = $order_data['data'];\r\n-\t\t\t$done         = $order_data['done'];\r\n-\t\t} else {\r\n-\t\t\t$order_data   = $this->export_order_via_email( $email, $page );\r\n-\t\t\t$export_items = $order_data['data'];\r\n-\t\t\t$done         = $order_data['done'];\r\n-\t\t}\r\n-\t\treturn array(\r\n-\t\t\t'data' => $export_items,\r\n-\t\t\t'done' => $done,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Export order via user ID\r\n-\t *\r\n-\t * @param \\WP_User $user\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function export_order_via_user( $user, $page = 1 ) {\r\n-\t\t$user_id                 = $user->ID;\r\n-\t\t$data_to_export          = array();\r\n-\t\t$done                    = true;\r\n-\t\t$lp_postdb               = LP_Post_DB::getInstance();\r\n-\t\t$filter                  = new LP_Order_Filter();\r\n-\t\t$filter->only_fields[]   = 'p.ID as ID';\r\n-\t\t$filter->join[]          = \"INNER JOIN $lp_postdb->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$filter->where           = array(\r\n-\t\t\t$lp_postdb->wpdb->prepare(\r\n-\t\t\t\t'AND pm.meta_key=%s AND ( pm.meta_value=%s OR pm.meta_value LIKE %s)',\r\n-\t\t\t\t'_user_id',\r\n-\t\t\t\t$user_id,\r\n-\t\t\t\t'%' . $lp_postdb->wpdb->esc_like( '\"' . $user_id . '\"' ) . '%'\r\n-\t\t\t),\r\n-\t\t);\r\n-\t\t$filter->limit           = 10;\r\n-\t\t$filter->page            = $page ?? 1;\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$lp_order_ids            = $lp_postdb->get_posts( $filter );\r\n-\t\tif ( ! empty( $lp_order_ids ) ) {\r\n-\t\t\t$data_to_export = $this->process_order_data( $lp_order_ids );\r\n-\t\t}\r\n-\t\t$done = 10 > count( $lp_order_ids );\r\n-\r\n-\t\treturn array(\r\n-\t\t\t'data' => $data_to_export,\r\n-\t\t\t'done' => $done,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Export order via email\r\n-\t *\r\n-\t * @param string $email\r\n-\t * @param int $page\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tpublic function export_order_via_email( $email, $page = 1 ) {\r\n-\t\t$data_to_export          = array();\r\n-\t\t$done                    = true;\r\n-\t\t$lp_postdb               = LP_Post_DB::getInstance();\r\n-\t\t$filter                  = new LP_Order_Filter();\r\n-\t\t$filter->only_fields[]   = 'p.ID as ID';\r\n-\t\t$filter->join[]          = \"INNER JOIN $lp_postdb->tb_postmeta AS pm ON p.ID = pm.post_id\";\r\n-\t\t$filter->where           = array(\r\n-\t\t\t$lp_postdb->wpdb->prepare(\r\n-\t\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\r\n-\t\t\t\t'_checkout_email',\r\n-\t\t\t\t$email\r\n-\t\t\t),\r\n-\t\t);\r\n-\t\t$filter->limit           = 10;\r\n-\t\t$filter->page            = $page ?? 1;\r\n-\t\t$filter->run_query_count = false;\r\n-\t\t$lp_order_ids            = $lp_postdb->get_posts( $filter );\r\n-\t\tif ( ! empty( $lp_order_ids ) ) {\r\n-\t\t\t$data_to_export = $this->process_order_data( $lp_order_ids );\r\n-\t\t}\r\n-\t\t$done = 10 > count( $lp_order_ids );\r\n-\t\treturn array(\r\n-\t\t\t'data' => $data_to_export,\r\n-\t\t\t'done' => $done,\r\n-\t\t);\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Process order data to export\r\n-\t *\r\n-\t * @param array $lp_order_ids\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function process_order_data( $lp_order_ids ): array {\r\n-\t\t$data_to_export = array();\r\n-\t\tforeach ( $lp_order_ids as $order ) {\r\n-\t\t\t$data_to_export[] = array(\r\n-\t\t\t\t'group_id'          => 'learnpress-orders',\r\n-\t\t\t\t'group_label'       => __( 'LearnPress Orders', 'learnpress' ),\r\n-\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress orders data.', 'learnpress' ),\r\n-\t\t\t\t'item_id'           => 'order-' . $order->ID,\r\n-\t\t\t\t'data'              => $this->get_order_personal_data( $order->ID ),\r\n-\t\t\t);\r\n-\t\t}\r\n-\t\treturn $data_to_export;\r\n-\t}\r\n-\r\n-\t\u002F**\r\n-\t * Get order personal data\r\n-\t *\r\n-\t * @param int $order_id\r\n-\t *\r\n-\t * @return array\r\n-\t * @throws Exception\r\n-\t *\u002F\r\n-\tprotected function get_order_personal_data( $order_id ): array {\r\n-\t\t$order = learn_press_get_order( $order_id );\r\n-\t\t$data  = array();\r\n-\t\t$props = apply_filters(\r\n-\t\t\t'learnpress\u002Fexport-order-personal-data\u002Fprops',\r\n-\t\t\tarray(\r\n-\t\t\t\t'order_number'    => __( 'Order Number', 'learnpress' ),\r\n-\t\t\t\t'order_date'      => __( 'Order Date', 'learnpress' ),\r\n-\t\t\t\t'total'           => __( 'Order Total', 'learnpress' ),\r\n-\t\t\t\t'items'           => __( 'Items Purchased', 'learnpress' ),\r\n-\t\t\t\t'status'          => __( 'Status', 'learnpress' ),\r\n-\t\t\t\t'payment_method'  => __( 'Payment method', 'learnpress' ),\r\n-\t\t\t\t'user_ip_address' => __( 'IP Address', 'learnpress' ),\r\n-\t\t\t\t'user_agent'      => __( 'Browser User Agent', 'learnpress' ),\r\n-\t\t\t),\r\n-\t\t\t$order\r\n-\t\t);\r\n-\t\tforeach ( $props as $prop => $name ) {\r\n-\t\t\t$value = '';\r\n-\t\t\tswitch ( $prop ) {\r\n-\t\t\t\tcase 'items':\r\n-\t\t\t\t\t$item_names = array();\r\n-\t\t\t\t\t$items      = $order->get_all_items();\r\n-\t\t\t\t\tif ( ! empty( $items ) ) {\r\n-\t\t\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\t\t\t$order_item_id   = $item['order_item_id'] ?? 0;\r\n-\t\t\t\t\t\t\t$order_item_name = $item['order_item_name'] ?? '';\r\n-\t\t\t\t\t\t\t$quantity        = learn_press_get_order_item_meta( $order_item_id, '_quantity' );\r\n-\t\t\t\t\t\t\t$item_names[]    = $order_item_name . ' x ' . $quantity;\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t$value = implode( ', ', $item_names );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'status':\r\n-\t\t\t\t\t$value = $order::get_status_label( $order->get_status() );\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tcase 'total':\r\n-\t\t\t\t\t$value = $order->get_formatted_order_total();\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\tif ( is_callable( array( $order, 'get_' . $prop ) ) ) {\r\n-\t\t\t\t\t\t$value = $order->{\"get_$prop\"}();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\tbreak;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$value = apply_filters( 'learnpress\u002Fexport-order-personal-data-prop', $value, $prop, $order );\r\n-\t\t\tif ( $value ) {\r\n-\t\t\t\t$data[] = array(\r\n-\t\t\t\t\t'name'  => $name,\r\n-\t\t\t\t\t'value' => $value,\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\treturn $data;\r\n-\t}\r\n-}\r\n+\u003C?php\n+namespace LearnPress\\WPGDPR;\n+\n+use Exception;\n+use LearnPress\\Helpers\\Singleton;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LP_Post_DB;\n+use LP_Order_Filter;\n+use LP_User_Items_Filter;\n+use LP_User_Items_DB;\n+use LP_Datetime;\n+use LP_Course_DB;\n+use LP_Course_Filter;\n+\n+\u002F**\n+ * Class ExportPersonalData\n+ *\n+ * @since 4.2.9.4\n+ * @version 1.0.0\n+ *\u002F\n+class ExportPersonalData {\n+\n+\tuse Singleton;\n+\n+\tpublic function init() {\n+\t\tadd_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporters' ), 6 );\n+\t}\n+\n+\tpublic function register_exporters( $exporters ) {\n+\t\t$exporters['learnpress-user-meta']        = array(\n+\t\t\t'exporter_friendly_name' => __( 'LearnPress User Meta Data Exporter', 'learnpress' ),\n+\t\t\t'callback'               => array( $this, 'export_user_meta' ),\n+\t\t);\n+\t\t$exporters['learnpress-created-courses']  = array(\n+\t\t\t'exporter_friendly_name' => __( 'LearnPress Created Courses Data Exporter', 'learnpress' ),\n+\t\t\t'callback'               => array( $this, 'export_user_created_courses' ),\n+\t\t);\n+\t\t$exporters['learnpress-attended-courses'] = array(\n+\t\t\t'exporter_friendly_name' => __( 'LearnPress Attended Courses Data Exporter', 'learnpress' ),\n+\t\t\t'callback'               => array( $this, 'export_user_attended_courses' ),\n+\t\t);\n+\t\t$exporters['learnpress-orders']           = array(\n+\t\t\t'exporter_friendly_name' => __( 'LearnPress Orders Data Exporter', 'learnpress' ),\n+\t\t\t'callback'               => array( $this, 'export_user_orders' ),\n+\t\t);\n+\t\treturn $exporters;\n+\t}\n+\n+\tpublic function export_user_meta( $email, $page = 1 ) {\n+\t\t$export_items = array();\n+\n+\t\t$user = get_user_by( 'email', $email );\n+\t\tif ( $user ) {\n+\t\t\t$user_id   = $user->ID;\n+\t\t\t$data      = array();\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\n+\t\t\tif ( $userModel->is_instructor() ) {\n+\t\t\t\t$instructor_statistic = $userModel->get_instructor_statistic();\n+\t\t\t\t$data                 = $this->map_instructor_statistics( $instructor_statistic, $data );\n+\t\t\t}\n+\t\t\t$student_statistic = $userModel->get_student_statistic();\n+\t\t\t$data              = $this->map_student_statistics( $student_statistic, $data );\n+\n+\t\t\t$social_fields = learn_press_social_profiles();\n+\t\t\t$socials       = learn_press_get_user_extra_profile_info( $user_id );\n+\t\t\tforeach ( $socials as $key => $value ) {\n+\t\t\t\tif ( ! empty( $value ) && isset( $social_fields[ $key ] ) ) {\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => $social_fields[ $key ],\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$export_items[] = array(\n+\t\t\t\t'group_id'          => 'learnpress-user-meta',\n+\t\t\t\t'group_label'       => __( 'LearnPress Profile Info', 'learnpress' ),\n+\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress User Profile Data.', 'learnpress' ),\n+\t\t\t\t'item_id'           => 'user_id-' . $user_id,\n+\t\t\t\t'data'              => $data,\n+\t\t\t);\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'data' => $export_items,\n+\t\t\t'done' => true,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Map instructor statistics to exportable data\n+\t *\n+\t * @param array $statistic\n+\t * @param array $data\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function map_instructor_statistics( array $statistic, array $data ): array {\n+\t\tforeach ( $statistic as $key => $value ) {\n+\t\t\tswitch ( $key ) {\n+\t\t\t\tcase 'total_course':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Total Course', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'published_course':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Published Course', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'pending_course':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Pending Course', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'total_student':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Total Student', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'student_completed':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Student Completed', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'student_in_progress':\n+\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t'name'  => __( 'Student In-progress', 'learnpress' ),\n+\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t);\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Map student statistics to exportable data\n+\t *\n+\t * @param array $statistic\n+\t * @param array $data\n+\t *\n+\t * @return array\n+\t *\u002F\n+\tpublic function map_student_statistics( array $statistic, array $data ): array {\n+\t\tforeach ( $statistic as $key => $value ) {\n+\t\t\tif ( $value ) {\n+\t\t\t\tswitch ( $key ) {\n+\t\t\t\t\tcase 'enrolled_courses':\n+\t\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t\t'name'  => __( 'Enrolled Course', 'learnpress' ),\n+\t\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'in_progress_course':\n+\t\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t\t'name'  => __( 'Inprogress Course', 'learnpress' ),\n+\t\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'finished_courses':\n+\t\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t\t'name'  => __( 'Finished Course', 'learnpress' ),\n+\t\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'passed_courses':\n+\t\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t\t'name'  => __( 'Passed Course', 'learnpress' ),\n+\t\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\tcase 'failed_courses':\n+\t\t\t\t\t\t$data[] = array(\n+\t\t\t\t\t\t\t'name'  => __( 'Failed Course', 'learnpress' ),\n+\t\t\t\t\t\t\t'value' => $value,\n+\t\t\t\t\t\t);\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Export user attended courses data\n+\t *\n+\t * @param string $email\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function export_user_attended_courses( $email, $page = 1 ) {\n+\t\t$export_items = array();\n+\t\t$done         = true;\n+\t\t$user         = get_user_by( 'email', $email );\n+\t\tif ( $user ) {\n+\t\t\t$user_id = $user->ID;\n+\t\t\t$lpuidb  = LP_User_Items_DB::getInstance();\n+\n+\t\t\t$ui_filter              = new LP_User_Items_Filter();\n+\t\t\t$ui_filter->user_id     = $user_id;\n+\t\t\t$ui_filter->item_type   = LP_COURSE_CPT;\n+\t\t\t$ui_filter->only_fields = array( 'DISTINCT (item_id) AS item_id', 'ui.user_item_id' );\n+\t\t\t$ui_filter->field_count = 'ui.item_id';\n+\t\t\t$ui_filter->limit       = 10;\n+\t\t\t$ui_filter->page        = $page ?? 1;\n+\t\t\t$lp_ui_ids              = $lpuidb->get_user_items( $ui_filter );\n+\t\t\tif ( ! empty( $lp_ui_ids ) ) {\n+\t\t\t\tforeach ( $lp_ui_ids as $useritem ) {\n+\t\t\t\t\t$export_items[] = array(\n+\t\t\t\t\t\t'group_id'          => 'learnpress-attended-courses',\n+\t\t\t\t\t\t'group_label'       => __( 'LearnPress Attended Courses', 'learnpress' ),\n+\t\t\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress Attended Courses Data.', 'learnpress' ),\n+\t\t\t\t\t\t'item_id'           => 'user_item_id-' . $useritem->item_id,\n+\t\t\t\t\t\t'data'              => $this->get_user_course_personal_data( $useritem, $user_id ),\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$done = 10 > count( $lp_ui_ids );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'data' => $export_items,\n+\t\t\t'done' => $done,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get user course personal data\n+\t *\n+\t * @param object $useritem\n+\t * @param int $user_id\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function get_user_course_personal_data( $useritem, $user_id ) {\n+\t\t$data            = array();\n+\t\t$userCourseModel = UserCourseModel::find( $user_id, $useritem->item_id );\n+\t\t$props           = apply_filters(\n+\t\t\t'learnpress\u002Fexport-user-attended-courses-personal-data\u002Fprops',\n+\t\t\tarray(\n+\t\t\t\t'course_name' => __( 'Course name', 'learnpress' ),\n+\t\t\t\t'start_time'  => __( 'Start time', 'learnpress' ),\n+\t\t\t\t'end_time'    => __( 'End time', 'learnpress' ),\n+\t\t\t\t'status'      => __( 'Status', 'learnpress' ),\n+\t\t\t\t'result'      => __( 'Result', 'learnpress' ),\n+\t\t\t),\n+\t\t\t$userCourseModel\n+\t\t);\n+\t\t$date_format     = get_option( 'date_format' );\n+\t\tforeach ( $props as $prop => $name ) {\n+\t\t\t$value = '';\n+\t\t\tswitch ( $prop ) {\n+\t\t\t\tcase 'course_name':\n+\t\t\t\t\t$value = get_the_title( $useritem->item_id );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$value = $userCourseModel->is_finished() ? $userCourseModel->get_string_i18n( $userCourseModel->get_graduation() ) : $userCourseModel->get_string_i18n( $userCourseModel->get_status() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'start_time':\n+\t\t\t\t\t$value = wp_date( $date_format, strtotime( $userCourseModel->start_time ) );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'end_time':\n+\t\t\t\t\t$value = ! empty( $userCourseModel->end_time ) ? wp_date( $date_format, strtotime( $userCourseModel->end_time ) ) : '-';\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'result':\n+\t\t\t\t\t$result = $userCourseModel->calculate_course_results();\n+\t\t\t\t\t$value  = ! empty( $result['result'] ) ? $result['result'] . '%' : '-';\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$value = apply_filters( 'learnpress\u002Fexport-user-attended-courses-personal-data-prop', $value, $prop, $userCourseModel );\n+\t\t\tif ( $value ) {\n+\t\t\t\t$data[] = array(\n+\t\t\t\t\t'name'  => $name,\n+\t\t\t\t\t'value' => $value,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Export user created courses data\n+\t *\n+\t * @param string $email\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function export_user_created_courses( $email, $page = 1 ) {\n+\t\t$export_items = array();\n+\t\t$done         = true;\n+\t\t$user         = get_user_by( 'email', $email );\n+\t\t$userModel    = $user ? UserModel::find( $user->ID, true ) : null;\n+\t\tif ( $userModel && $userModel->is_instructor() ) {\n+\t\t\t$user_id                 = $user->ID;\n+\t\t\t$filter                  = new LP_Course_Filter();\n+\t\t\t$course_db               = LP_Course_DB::getInstance();\n+\t\t\t$filter->post_author     = $user_id;\n+\t\t\t$filter->only_fields[]   = 'p.ID as ID';\n+\t\t\t$filter->limit           = 10;\n+\t\t\t$filter->page            = (int) $page;\n+\t\t\t$filter->run_query_count = false;\n+\t\t\t$course_ids              = $course_db->get_courses( $filter );\n+\t\t\tif ( ! empty( $course_ids ) ) {\n+\t\t\t\tforeach ( $course_ids as $c ) {\n+\t\t\t\t\t$export_items[] = array(\n+\t\t\t\t\t\t'group_id'          => 'learnpress-created-courses',\n+\t\t\t\t\t\t'group_label'       => __( 'LearnPress Created Courses', 'learnpress' ),\n+\t\t\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress Created Courses Data.', 'learnpress' ),\n+\t\t\t\t\t\t'item_id'           => 'course_id-' . $c->ID,\n+\t\t\t\t\t\t'data'              => $this->get_user_created_courses_personal_data( $c->ID, $user_id ),\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t$done = 10 > count( $course_ids );\n+\t\t}\n+\n+\t\treturn array(\n+\t\t\t'data' => $export_items,\n+\t\t\t'done' => $done,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Get user created courses personal data\n+\t *\n+\t * @param int $course_id\n+\t * @param int $user_id\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function get_user_created_courses_personal_data( $course_id, $user_id ): array {\n+\t\t$data        = array();\n+\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t$props       = apply_filters(\n+\t\t\t'learn-press\u002Fexport-user-created-courses-personal-data\u002Fprops',\n+\t\t\tarray(\n+\t\t\t\t'title'         => __( 'Course name', 'learnpress' ),\n+\t\t\t\t'price'         => __( 'Price', 'learnpress' ),\n+\t\t\t\t'duration'      => __( 'Duration', 'learnpress' ),\n+\t\t\t\t'level'         => __( 'Level', 'learnpress' ),\n+\t\t\t\t'students'      => __( 'Total Students', 'learnpress' ),\n+\t\t\t\t'lp_lesson'     => __( 'Lessons', 'learnpress' ),\n+\t\t\t\t'lp_quiz'       => __( 'Quizzes', 'learnpress' ),\n+\t\t\t\t'lp_assignment' => __( 'Assignments', 'learnpress' ),\n+\t\t\t\t'lp_h5p'        => __( 'H5P Quizzes', 'learnpress' ),\n+\t\t\t),\n+\t\t\t$courseModel,\n+\t\t\t$user_id\n+\t\t);\n+\t\tforeach ( $props as $prop => $name ) {\n+\t\t\t$value = '';\n+\t\t\tswitch ( $prop ) {\n+\t\t\t\tcase 'lp_lesson':\n+\t\t\t\tcase 'lp_quiz':\n+\t\t\t\tcase 'lp_assignment':\n+\t\t\t\tcase 'lp_h5p':\n+\t\t\t\t\t$value = $courseModel->count_items( $prop );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'students':\n+\t\t\t\t\t$value = $courseModel->count_students();\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'duration':\n+\t\t\t\t\t$duration        = $courseModel->get_meta_value_by_key( '_lp_duration', '' );\n+\t\t\t\t\t$duration_arr    = explode( ' ', $duration );\n+\t\t\t\t\t$duration_number = floatval( $duration_arr[0] ?? 0 );\n+\t\t\t\t\t$duration_type   = $duration_arr[1] ?? '';\n+\t\t\t\t\tif ( empty( $duration_number ) ) {\n+\t\t\t\t\t\t$value = __( 'Lifetime', 'learnpress' );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$value = LP_Datetime::get_string_plural_duration( $duration_number, $duration_type );\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'level':\n+\t\t\t\t\t$level  = $courseModel->get_meta_value_by_key( '_lp_level', '' );\n+\t\t\t\t\t$levels = lp_course_level();\n+\t\t\t\t\t$value  = $levels[ $level ] ?? $levels['all'];\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'price':\n+\t\t\t\t\t$value = $courseModel->is_free() ? __( 'Free', 'learnpress' ) : learn_press_format_price( $courseModel->get_price() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tif ( is_callable( array( $courseModel, 'get_' . $prop ) ) ) {\n+\t\t\t\t\t\t$value = $courseModel->{\"get_$prop\"}();\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\t$value = apply_filters( 'learnpress\u002Fexport-user-created-courses-personal-data\u002Fprop', $value, $prop, $courseModel, $user_id );\n+\t\t\tif ( $value ) {\n+\t\t\t\t$data[] = array(\n+\t\t\t\t\t'name'  => $name,\n+\t\t\t\t\t'value' => $value,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+\n+\t\u002F**\n+\t * Export user orders data\n+\t *\n+\t * @param string $email\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function export_user_orders( $email, $page = 1 ) {\n+\t\t$export_items = array();\n+\t\t$done         = true;\n+\t\t$user         = get_user_by( 'email', $email );\n+\t\tif ( $user ) {\n+\t\t\t$order_data   = $this->export_order_via_user( $user, $page );\n+\t\t\t$export_items = $order_data['data'];\n+\t\t\t$done         = $order_data['done'];\n+\t\t} else {\n+\t\t\t$order_data   = $this->export_order_via_email( $email, $page );\n+\t\t\t$export_items = $order_data['data'];\n+\t\t\t$done         = $order_data['done'];\n+\t\t}\n+\t\treturn array(\n+\t\t\t'data' => $export_items,\n+\t\t\t'done' => $done,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Export order via user ID\n+\t *\n+\t * @param \\WP_User $user\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function export_order_via_user( $user, $page = 1 ) {\n+\t\t$user_id                 = $user->ID;\n+\t\t$data_to_export          = array();\n+\t\t$done                    = true;\n+\t\t$lp_postdb               = LP_Post_DB::getInstance();\n+\t\t$filter                  = new LP_Order_Filter();\n+\t\t$filter->only_fields[]   = 'p.ID as ID';\n+\t\t$filter->join[]          = \"INNER JOIN $lp_postdb->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$filter->where           = array(\n+\t\t\t$lp_postdb->wpdb->prepare(\n+\t\t\t\t'AND pm.meta_key=%s AND ( pm.meta_value=%s OR pm.meta_value LIKE %s)',\n+\t\t\t\t'_user_id',\n+\t\t\t\t$user_id,\n+\t\t\t\t'%' . $lp_postdb->wpdb->esc_like( '\"' . $user_id . '\"' ) . '%'\n+\t\t\t),\n+\t\t);\n+\t\t$filter->limit           = 10;\n+\t\t$filter->page            = $page ?? 1;\n+\t\t$filter->run_query_count = false;\n+\t\t$lp_order_ids            = $lp_postdb->get_posts( $filter );\n+\t\tif ( ! empty( $lp_order_ids ) ) {\n+\t\t\t$data_to_export = $this->process_order_data( $lp_order_ids );\n+\t\t}\n+\t\t$done = 10 > count( $lp_order_ids );\n+\n+\t\treturn array(\n+\t\t\t'data' => $data_to_export,\n+\t\t\t'done' => $done,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Export order via email\n+\t *\n+\t * @param string $email\n+\t * @param int $page\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tpublic function export_order_via_email( $email, $page = 1 ) {\n+\t\t$data_to_export          = array();\n+\t\t$done                    = true;\n+\t\t$lp_postdb               = LP_Post_DB::getInstance();\n+\t\t$filter                  = new LP_Order_Filter();\n+\t\t$filter->only_fields[]   = 'p.ID as ID';\n+\t\t$filter->join[]          = \"INNER JOIN $lp_postdb->tb_postmeta AS pm ON p.ID = pm.post_id\";\n+\t\t$filter->where           = array(\n+\t\t\t$lp_postdb->wpdb->prepare(\n+\t\t\t\t'AND pm.meta_key=%s AND pm.meta_value=%s',\n+\t\t\t\t'_checkout_email',\n+\t\t\t\t$email\n+\t\t\t),\n+\t\t);\n+\t\t$filter->limit           = 10;\n+\t\t$filter->page            = $page ?? 1;\n+\t\t$filter->run_query_count = false;\n+\t\t$lp_order_ids            = $lp_postdb->get_posts( $filter );\n+\t\tif ( ! empty( $lp_order_ids ) ) {\n+\t\t\t$data_to_export = $this->process_order_data( $lp_order_ids );\n+\t\t}\n+\t\t$done = 10 > count( $lp_order_ids );\n+\t\treturn array(\n+\t\t\t'data' => $data_to_export,\n+\t\t\t'done' => $done,\n+\t\t);\n+\t}\n+\n+\t\u002F**\n+\t * Process order data to export\n+\t *\n+\t * @param array $lp_order_ids\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function process_order_data( $lp_order_ids ): array {\n+\t\t$data_to_export = array();\n+\t\tforeach ( $lp_order_ids as $order ) {\n+\t\t\t$data_to_export[] = array(\n+\t\t\t\t'group_id'          => 'learnpress-orders',\n+\t\t\t\t'group_label'       => __( 'LearnPress Orders', 'learnpress' ),\n+\t\t\t\t'group_description' => __( 'User&#8217;s LearnPress orders data.', 'learnpress' ),\n+\t\t\t\t'item_id'           => 'order-' . $order->ID,\n+\t\t\t\t'data'              => $this->get_order_personal_data( $order->ID ),\n+\t\t\t);\n+\t\t}\n+\t\treturn $data_to_export;\n+\t}\n+\n+\t\u002F**\n+\t * Get order personal data\n+\t *\n+\t * @param int $order_id\n+\t *\n+\t * @return array\n+\t * @throws Exception\n+\t *\u002F\n+\tprotected function get_order_personal_data( $order_id ): array {\n+\t\t$order = learn_press_get_order( $order_id );\n+\t\t$data  = array();\n+\t\t$props = apply_filters(\n+\t\t\t'learnpress\u002Fexport-order-personal-data\u002Fprops',\n+\t\t\tarray(\n+\t\t\t\t'order_number'    => __( 'Order Number', 'learnpress' ),\n+\t\t\t\t'order_date'      => __( 'Order Date', 'learnpress' ),\n+\t\t\t\t'total'           => __( 'Order Total', 'learnpress' ),\n+\t\t\t\t'items'           => __( 'Items Purchased', 'learnpress' ),\n+\t\t\t\t'status'          => __( 'Status', 'learnpress' ),\n+\t\t\t\t'payment_method'  => __( 'Payment method', 'learnpress' ),\n+\t\t\t\t'user_ip_address' => __( 'IP Address', 'learnpress' ),\n+\t\t\t\t'user_agent'      => __( 'Browser User Agent', 'learnpress' ),\n+\t\t\t),\n+\t\t\t$order\n+\t\t);\n+\t\tforeach ( $props as $prop => $name ) {\n+\t\t\t$value = '';\n+\t\t\tswitch ( $prop ) {\n+\t\t\t\tcase 'items':\n+\t\t\t\t\t$item_names = array();\n+\t\t\t\t\t$items      = $order->get_all_items();\n+\t\t\t\t\tif ( ! empty( $items ) ) {\n+\t\t\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\t\t\t$order_item_id   = $item['order_item_id'] ?? 0;\n+\t\t\t\t\t\t\t$order_item_name = $item['order_item_name'] ?? '';\n+\t\t\t\t\t\t\t$quantity        = learn_press_get_order_item_meta( $order_item_id, '_quantity' );\n+\t\t\t\t\t\t\t$item_names[]    = $order_item_name . ' x ' . $quantity;\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t$value = implode( ', ', $item_names );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'status':\n+\t\t\t\t\t$value = $order::get_status_label( $order->get_status() );\n+\t\t\t\t\tbreak;\n+\t\t\t\tcase 'total':\n+\t\t\t\t\t$value = $order->get_formatted_order_total();\n+\t\t\t\t\tbreak;\n+\t\t\t\tdefault:\n+\t\t\t\t\tif ( is_callable( array( $order, 'get_' . $prop ) ) ) {\n+\t\t\t\t\t\t$value = $order->{\"get_$prop\"}();\n+\t\t\t\t\t}\n+\t\t\t\t\tbreak;\n+\t\t\t}\n+\n+\t\t\t$value = apply_filters( 'learnpress\u002Fexport-order-personal-data-prop', $value, $prop, $order );\n+\t\t\tif ( $value ) {\n+\t\t\t\t$data[] = array(\n+\t\t\t\t\t'name'  => $name,\n+\t\t\t\t\t'value' => $value,\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn $data;\n+\t}\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flanguages\u002Fjs.pot \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flanguages\u002Fjs.pot\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flanguages\u002Fjs.pot\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flanguages\u002Fjs.pot\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,610 +1,610 @@\n-msgid \"\"\r\n-msgstr \"\"\r\n-\"Content-Type: text\u002Fplain; charset=utf-8\\n\"\r\n-\"X-Generator: babel-plugin-makepot\\n\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:118\r\n-msgid \"Reset Course Progress\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:120\r\n-msgid \"This action will reset course progress of all users who have enrolled.\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:121\r\n-msgid \"Search results only show if courses have user data.\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:124\r\n-msgid \"Search course by name\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:154\r\n-msgid \"ID\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:155\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:17\r\n-msgid \"Name\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:156\r\n-msgid \"Students\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:185\r\n-msgid \"Reset now\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:288\r\n-msgid \"Words fill\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:306\r\n-msgid \"Tip\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:313\r\n-msgid \"Remove\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:319\r\n-msgid \"Add Blank\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js:11\r\n-msgid \"Archive Course (Legacy)\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js:15\r\n-msgid \"\"\r\n-\"The block will display the full content of the course archive page. \"\r\n-\"Elements on it cannot be modified!\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:10\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:54\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:56\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:15\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:13\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:15\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:83\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:13\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:16\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:26\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:10\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:217\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:25\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js:16\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:10\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js:16\r\n-msgid \"Settings\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:12\r\n-msgid \"Show Home\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:22\r\n-msgid \"Home Label\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:50\r\n-msgid \"Navigation\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:56\r\n-msgid \"Path\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js:9\r\n-msgid \"Address\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:56\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:58\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:99\r\n-msgid \"Width\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:87\r\n-msgid \"Read more\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:88\r\n-msgid \"Buy Now\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:17\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:19\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:19\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:19\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:18\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:19\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:19\r\n-msgid \"Show Label\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:26\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:26\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:28\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:28\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:28\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:27\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:28\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:28\r\n-msgid \"Show Icon\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:45\r\n-msgid \"Capacity:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:15\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:15\r\n-msgid \"Show text 'by'\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:24\r\n-msgid \"Make the category a link\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:34\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:148\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:34\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:45\r\n-msgid \"Open is new tab\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js:10\r\n-msgid \"Curriculum\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:43\r\n-msgid \"Delivery type:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js:10\r\n-msgid \"FAQs\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js:9\r\n-msgid \"Featured Review\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js:9\r\n-msgid \"Featured\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js:10\r\n-msgid \"Features\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:116\r\n-msgid \"Height\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:120\r\n-msgid \"Auto\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:121\r\n-msgid \"px\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:138\r\n-msgid \"Make the image a link\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:85\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:19\r\n-msgid \"Size\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js:23\r\n-msgid \"Instructor Name\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:24\r\n-msgid \"Make the instructor a link\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js:13\r\n-msgid \"\"\r\n-\"Displays the course curriculum, including lessons, quizzes, and other \"\r\n-\"learning items, organized by sections or topics!\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js:9\r\n-msgid \"Course item curriculum (Legacy) - Don't remove\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:11\r\n-msgid \"Course Material\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:18\r\n-msgid \"Type\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:20\r\n-msgid \"Download\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:37\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:40\r\n-msgid \"Load more\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:44\r\n-msgid \"Lesson:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js:10\r\n-msgid \"Requirements\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js:10\r\n-msgid \"Share\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js:10\r\n-msgid \"Target audiences\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:21\r\n-msgid \"Course Title\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:28\r\n-msgid \"Tag\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:35\r\n-msgid \"Make the title a link\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js:8\r\n-msgid \"Reset\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js:8\r\n-msgid \"Apply\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js:9\r\n-msgid \"Author\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js:9\r\n-msgid \"Category\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js:9\r\n-msgid \"Level\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js:9\r\n-msgid \"Price\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js:9\r\n-msgid \"Search\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js:9\r\n-msgid \"Tags\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:12\r\n-msgid \"Show title\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:22\r\n-msgid \"Level of category to display on Frontend\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:34\r\n-msgid \"Load widget via REST\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:44\r\n-msgid \"Hide field has count is zero\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:54\r\n-msgid \"Enable Keyword Search Suggestion\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:66\r\n-msgid \"Course Filter\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:165\r\n-msgid \"Courses Fetching…\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:174\r\n-msgid \"Course One\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:178\r\n-msgid \"Course two\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:188\r\n-msgid \"Load More\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:219\r\n-msgid \"Layout\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:234\r\n-msgid \"Columns\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js:9\r\n-msgid \"Showing %d-%d of %d results\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:110\r\n-msgid \"Pagination\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:126\r\n-msgid \"Pagination Type\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:39\r\n-msgid \"Number\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:41\r\n-msgid \"Infinite Scroll\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:47\r\n-msgid \"Query Settings\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:49\r\n-msgid \"Posts per page\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:60\r\n-msgid \"Related Course\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:82\r\n-msgid \"Enable AJAX\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:97\r\n-msgid \"Order by\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:27\r\n-msgid \"Background Position\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:38\r\n-msgid \"Background Size\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:49\r\n-msgid \"Background Repeat\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js:18\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js:18\r\n-msgid \"Display Modes\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js:11\r\n-msgid \"Instructor's name\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:12\r\n-msgid \"Open links in new tab\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:21\r\n-msgid \"Add nofollow attribute\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js:11\r\n-msgid \"Single Course (Legacy)\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js:15\r\n-msgid \"Display full content of Single Course, can not edit.\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js:41\r\n-msgid \"OK\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js:44\r\n-msgid \"Cancel\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:147\r\n-msgid \"The render function should be overwritten from the base.\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:207\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:81\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:204\r\n-msgid \"Correct\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:207\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:82\r\n-msgid \"Incorrect\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:208\r\n-msgid \"%d\u002F%d point\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:98\r\n-msgid \"LP Error: can not set answers\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:79\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:196\r\n-msgid \"Points\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:80\r\n-msgid \"point\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js:34\r\n-msgid \"Question \u003Ccode>%s\u003C\u002Fcode> invalid!\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:15\r\n-msgid \"Last Attempt\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:21\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:200\r\n-msgid \"Questions\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:22\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:192\r\n-msgid \"Time spent\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:23\r\n-msgid \"Marks\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:24\r\n-msgid \"Passing grade\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:25\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:300\r\n-msgid \"Result\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js:54\r\n-msgid \"Check answers\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js:57\r\n-msgid \"You need to answer the question before checking the answer key.\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js:22\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:177\r\n-msgid \"Hint\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:106\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:55\r\n-msgid \"Are you sure to submit the quiz?\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:160\r\n-msgid \"Prev\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:17\r\n-msgid \"Are you sure you want to retake the quiz?\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:204\r\n-msgid \"Next\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:268\r\n-msgid \"Retake\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:268\r\n-msgid \"Start\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:289\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:116\r\n-msgid \"Finish Quiz\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:309\r\n-msgid \"Review\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:20\r\n-msgid \"Duration:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:25\r\n-msgid \"Passing grade:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:30\r\n-msgid \"Questions:\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:163\r\n-msgid \"Explanation\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:87\r\n-msgid \"Edit\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:165\r\n-msgid \"Passed\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:167\r\n-msgid \"Failed\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:174\r\n-msgid \"Your Result\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:208\r\n-msgid \"Wrong\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:212\r\n-msgid \"Skipped\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:217\r\n-msgid \"Minus points\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:107\r\n-msgid \"Earned Point: %s\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:116\r\n-msgid \"Submitting…\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:93\r\n-msgid \"Question \u003Cspan>%d to %d of %d\u003C\u002Fspan>\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:98\r\n-msgid \"Question \u003Cspan>%d of %d\u003C\u002Fspan>\"\r\n-msgstr \"\"\r\n-\r\n-#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js:506\r\n-msgid \"Are you sure ggggg?\"\r\n+msgid \"\"\n+msgstr \"\"\n+\"Content-Type: text\u002Fplain; charset=utf-8\\n\"\n+\"X-Generator: babel-plugin-makepot\\n\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:118\n+msgid \"Reset Course Progress\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:120\n+msgid \"This action will reset course progress of all users who have enrolled.\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:121\n+msgid \"Search results only show if courses have user data.\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:124\n+msgid \"Search course by name\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:154\n+msgid \"ID\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:155\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:17\n+msgid \"Name\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:156\n+msgid \"Students\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Fpages\u002Ftools\u002Freset-data\u002Fcourse.js:185\n+msgid \"Reset now\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:288\n+msgid \"Words fill\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:306\n+msgid \"Tip\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:313\n+msgid \"Remove\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:319\n+msgid \"Add Blank\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js:11\n+msgid \"Archive Course (Legacy)\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js:15\n+msgid \"\"\n+\"The block will display the full content of the course archive page. \"\n+\"Elements on it cannot be modified!\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:10\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:54\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:56\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:15\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:13\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:15\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:83\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:13\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:16\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:26\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:10\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:217\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:25\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js:16\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:10\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js:16\n+msgid \"Settings\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:12\n+msgid \"Show Home\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:22\n+msgid \"Home Label\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:50\n+msgid \"Navigation\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fbreadcrumb\u002Fedit.js:56\n+msgid \"Path\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js:9\n+msgid \"Address\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:56\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:58\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:99\n+msgid \"Width\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button-read-more\u002Fedit.js:87\n+msgid \"Read more\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:88\n+msgid \"Buy Now\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:17\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:19\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:19\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:19\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:18\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:19\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:19\n+msgid \"Show Label\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:26\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:26\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-duration\u002Fedit.js:28\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-lesson\u002Fedit.js:28\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-level\u002Fedit.js:28\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:27\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:28\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:28\n+msgid \"Show Icon\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-capacity\u002Fedit.js:45\n+msgid \"Capacity:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:15\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:15\n+msgid \"Show text 'by'\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:24\n+msgid \"Make the category a link\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-categories\u002Fedit.js:34\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:148\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:34\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:45\n+msgid \"Open is new tab\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-curriculum\u002Fedit.js:10\n+msgid \"Curriculum\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-delivery\u002Fedit.js:43\n+msgid \"Delivery type:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js:10\n+msgid \"FAQs\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-feature-review\u002Fedit.js:9\n+msgid \"Featured Review\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js:9\n+msgid \"Featured\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js:10\n+msgid \"Features\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:116\n+msgid \"Height\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:120\n+msgid \"Auto\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:121\n+msgid \"px\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:138\n+msgid \"Make the image a link\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:85\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:19\n+msgid \"Size\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor-info\u002Fedit.js:23\n+msgid \"Instructor Name\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-instructor\u002Fedit.js:24\n+msgid \"Make the instructor a link\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js:13\n+msgid \"\"\n+\"Displays the course curriculum, including lessons, quizzes, and other \"\n+\"learning items, organized by sections or topics!\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-item-curriculum\u002Fedit.js:9\n+msgid \"Course item curriculum (Legacy) - Don't remove\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:11\n+msgid \"Course Material\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:18\n+msgid \"Type\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:20\n+msgid \"Download\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:37\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:40\n+msgid \"Load more\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-offline-lesson\u002Fedit.js:44\n+msgid \"Lesson:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js:10\n+msgid \"Requirements\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-share\u002Fedit.js:10\n+msgid \"Share\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js:10\n+msgid \"Target audiences\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:21\n+msgid \"Course Title\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:28\n+msgid \"Tag\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:35\n+msgid \"Make the title a link\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js:8\n+msgid \"Reset\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js:8\n+msgid \"Apply\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js:9\n+msgid \"Author\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js:9\n+msgid \"Category\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js:9\n+msgid \"Level\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js:9\n+msgid \"Price\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js:9\n+msgid \"Search\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js:9\n+msgid \"Tags\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:12\n+msgid \"Show title\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:22\n+msgid \"Level of category to display on Frontend\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:34\n+msgid \"Load widget via REST\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:44\n+msgid \"Hide field has count is zero\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:54\n+msgid \"Enable Keyword Search Suggestion\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:66\n+msgid \"Course Filter\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:165\n+msgid \"Courses Fetching…\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:174\n+msgid \"Course One\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:178\n+msgid \"Course two\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:188\n+msgid \"Load More\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:219\n+msgid \"Layout\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:234\n+msgid \"Columns\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js:9\n+msgid \"Showing %d-%d of %d results\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:110\n+msgid \"Pagination\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:126\n+msgid \"Pagination Type\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:39\n+msgid \"Number\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:41\n+msgid \"Infinite Scroll\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:47\n+msgid \"Query Settings\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:49\n+msgid \"Posts per page\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:60\n+msgid \"Related Course\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:82\n+msgid \"Enable AJAX\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Flist-courses\u002Fedit.js:97\n+msgid \"Order by\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:27\n+msgid \"Background Position\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:38\n+msgid \"Background Size\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:49\n+msgid \"Background Repeat\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js:18\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js:18\n+msgid \"Display Modes\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-name\u002Fedit.js:11\n+msgid \"Instructor's name\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:12\n+msgid \"Open links in new tab\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:21\n+msgid \"Add nofollow attribute\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js:11\n+msgid \"Single Course (Legacy)\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js:15\n+msgid \"Display full content of Single Course, can not edit.\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js:41\n+msgid \"OK\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fmodal\u002Findex.js:44\n+msgid \"Cancel\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:147\n+msgid \"The render function should be overwritten from the base.\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:207\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:81\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:204\n+msgid \"Correct\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:207\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:82\n+msgid \"Incorrect\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:208\n+msgid \"%d\u002F%d point\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestion-base\u002Findex.js:98\n+msgid \"LP Error: can not set answers\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:79\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:196\n+msgid \"Points\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Fcomponents\u002Fquestions\u002Ffill-in-blanks\u002Findex.js:80\n+msgid \"point\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquestion-types\u002Findex.js:34\n+msgid \"Question \u003Ccode>%s\u003C\u002Fcode> invalid!\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:15\n+msgid \"Last Attempt\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:21\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:200\n+msgid \"Questions\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:22\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:192\n+msgid \"Time spent\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:23\n+msgid \"Marks\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:24\n+msgid \"Passing grade\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fattempts\u002Findex.js:25\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:300\n+msgid \"Result\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js:54\n+msgid \"Check answers\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-check.js:57\n+msgid \"You need to answer the question before checking the answer key.\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Fbutton-hint.js:22\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:177\n+msgid \"Hint\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:106\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:55\n+msgid \"Are you sure to submit the quiz?\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:160\n+msgid \"Prev\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:17\n+msgid \"Are you sure you want to retake the quiz?\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:204\n+msgid \"Next\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:268\n+msgid \"Retake\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:268\n+msgid \"Start\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:289\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:116\n+msgid \"Finish Quiz\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fbuttons\u002Findex.js:309\n+msgid \"Review\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:20\n+msgid \"Duration:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:25\n+msgid \"Passing grade:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fmeta\u002Findex.js:30\n+msgid \"Questions:\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:163\n+msgid \"Explanation\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fquestions\u002Fquestion.js:87\n+msgid \"Edit\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:165\n+msgid \"Passed\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:167\n+msgid \"Failed\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:174\n+msgid \"Your Result\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:208\n+msgid \"Wrong\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:212\n+msgid \"Skipped\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fresult\u002Findex.js:217\n+msgid \"Minus points\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:107\n+msgid \"Earned Point: %s\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:116\n+msgid \"Submitting…\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:93\n+msgid \"Question \u003Cspan>%d to %d of %d\u003C\u002Fspan>\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Ffrontend\u002Fquiz\u002Fcomponents\u002Fstatus\u002Findex.js:98\n+msgid \"Question \u003Cspan>%d of %d\u003C\u002Fspan>\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-quiz.js:506\n+msgid \"Are you sure ggggg?\"\n msgstr \"\"\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flanguages\u002Flearnpress.pot \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flanguages\u002Flearnpress.pot\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flanguages\u002Flearnpress.pot\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flanguages\u002Flearnpress.pot\t2026-05-03 17:09:04.000000000 +0000\n@@ -2,16 +2,16 @@\n # This file is distributed under the same license as the LearnPress plugin.\n msgid \"\"\n msgstr \"\"\n-\"Project-Id-Version: LearnPress 4.3.5\\n\"\n+\"Project-Id-Version: LearnPress 4.3.6\\n\"\n \"Report-Msgid-Bugs-To: https:\u002F\u002Fwordpress.org\u002Fsupport\u002Fplugin\u002Flearnpress\\n\"\n \"Last-Translator: FULL NAME \u003CEMAIL@ADDRESS>\\n\"\n \"Language-Team: LANGUAGE \u003CLL@li.org>\\n\"\n \"MIME-Version: 1.0\\n\"\n \"Content-Type: text\u002Fplain; charset=UTF-8\\n\"\n \"Content-Transfer-Encoding: 8bit\\n\"\n-\"POT-Creation-Date: 2026-04-10T14:11:39+03:00\\n\"\n+\"POT-Creation-Date: 2026-05-03T16:33:34+00:00\\n\"\n \"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n-\"X-Generator: WP-CLI 2.12.0\\n\"\n+\"X-Generator: WP-CLI 2.11.0\\n\"\n \"X-Domain: learnpress\\n\"\n \n #: assets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.min.js:118\n@@ -51,6 +51,7 @@\n #: assets\u002Fjs\u002Fdist\u002Fadmin\u002Fpages\u002Ftools.min.js:156\n #: config\u002Fsettings\u002Fopen-ai-modal.php:80\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php:35\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:358\n msgid \"Students\"\n msgstr \"\"\n \n@@ -69,7 +70,8 @@\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fadmin\u002Freact\u002Fquestion\u002Findex.js:313\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php:110\n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-unassign-course.php:97\n-#: inc\u002Fclass-lp-assets.php:145\n+#: inc\u002Fclass-lp-assets.php:177\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:168\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:185\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:281\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php:26\n@@ -80,6 +82,14 @@\n msgid \"Add Blank\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course\u002Fedit.js:11\n+msgid \"Archive Course\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course\u002Fedit.js:15\n+msgid \"This is an editor placeholder for the Archive Course page. Content will render content of list courses. Should be not remove it\"\n+msgstr \"\"\n+\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Farchive-course-legacy\u002Fedit.js:11\n msgid \"Archive Course (Legacy)\"\n msgstr \"\"\n@@ -103,17 +113,28 @@\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-quiz\u002Fedit.js:17\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-student\u002Fedit.js:17\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:26\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:10\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:10\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:217\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-background\u002Fedit.js:25\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-course\u002Fedit.js:16\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-social\u002Fedit.js:10\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Finstructor-elements\u002Finstructor-student\u002Fedit.js:16\n+#: config\u002Fcourse-builder\u002Fmenus.php:29\n+#: config\u002Fcourse-builder\u002Fmenus.php:49\n+#: config\u002Fcourse-builder\u002Fmenus.php:65\n+#: config\u002Fcourse-builder\u002Fmenus.php:71\n #: config\u002Fprofile-tabs.php:59\n-#: config\u002Fsettings\u002Fpermalink.php:156\n+#: config\u002Fsettings\u002Fpermalink.php:165\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php:22\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:181\n-#: learnpress.php:819\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:326\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:252\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:155\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:202\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:206\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:57\n+#: learnpress.php:859\n msgid \"Settings\"\n msgstr \"\"\n \n@@ -135,6 +156,7 @@\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-address\u002Fedit.js:9\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:330\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:388\n msgid \"Address\"\n msgstr \"\"\n \n@@ -152,7 +174,7 @@\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-button\u002Fedit.js:88\n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:271\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:776\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1931\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1943\n #: templates\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php:33\n msgid \"Buy Now\"\n msgstr \"\"\n@@ -208,9 +230,10 @@\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:43\n #: inc\u002Flp-template-functions.php:56\n #: inc\u002FModels\u002FWPTables\u002FCoursesTable.php:41\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:529\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:542\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php:264\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1502\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1514\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:248\n msgid \"Curriculum\"\n msgstr \"\"\n \n@@ -219,10 +242,11 @@\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-faqs\u002Fedit.js:10\n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:617\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:633\n #: inc\u002Flp-template-functions.php:72\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:673\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php:267\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1013\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1016\n msgid \"FAQs\"\n msgstr \"\"\n \n@@ -234,13 +258,13 @@\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-featured\u002Fedit.js:9\n #: config\u002Felementor\u002Fcourse\u002Flist-courses.php:75\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1347\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1359\n #: templates\u002Floop\u002Fcourse\u002Fbadge-featured.php:23\n msgid \"Featured\"\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-features\u002Fedit.js:10\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1143\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1152\n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:804\n msgid \"Features\"\n msgstr \"\"\n@@ -248,7 +272,7 @@\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-image\u002Fedit.js:85\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:19\n #: config\u002Felementor\u002Fcourse\u002Fmaterials.php:76\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:778\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:815\n #: inc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php:185\n msgid \"Size\"\n msgstr \"\"\n@@ -294,7 +318,7 @@\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-material\u002Fedit.js:11\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1256\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1268\n msgid \"Course Material\"\n msgstr \"\"\n \n@@ -327,8 +351,9 @@\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-requirements\u002Fedit.js:10\n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:602\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1095\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:618\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:658\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1101\n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:281\n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:800\n #: inc\u002FWidgets\u002Fcourse-extra.php:35\n@@ -341,13 +366,14 @@\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-target-audiences\u002Fedit.js:10\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1191\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1203\n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:333\n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:808\n msgid \"Target audiences\"\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-elements\u002Fcourse-title\u002Fedit.js:21\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:448\n msgid \"Course Title\"\n msgstr \"\"\n \n@@ -362,51 +388,22 @@\n msgid \"Make the title a link\"\n msgstr \"\"\n \n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:12\n-msgid \"Show title\"\n-msgstr \"\"\n-\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:22\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:14\n-msgid \"Level of category to display on Frontend\"\n-msgstr \"\"\n-\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:34\n-#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:135\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:25\n-msgid \"Load widget via REST\"\n-msgstr \"\"\n-\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:44\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:30\n-msgid \"Hide field has count is zero\"\n-msgstr \"\"\n-\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:54\n-#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:146\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:35\n-msgid \"Enable Keyword Search Suggestion\"\n-msgstr \"\"\n-\n-#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:66\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:11\n-#: inc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php:37\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:340\n-msgid \"Course Filter\"\n-msgstr \"\"\n-\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fbutton-reset-filter\u002Fedit.js:8\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-reset-filter\u002Fedit.js:8\n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user-item.php:26\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:791\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:158\n msgid \"Reset\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fbutton-submit-filter\u002Fedit.js:8\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fbutton-submit-filter\u002Fedit.js:8\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:350\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:387\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:763\n msgid \"Apply\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-author-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-author-filter\u002Fedit.js:9\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:43\n #: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:65\n@@ -415,10 +412,12 @@\n #: inc\u002Fcustom-post-types\u002Flesson.php:255\n #: inc\u002Fcustom-post-types\u002Fquestion.php:314\n #: inc\u002Fcustom-post-types\u002Fquiz.php:245\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:551\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:606\n msgid \"Author\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-categories-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-categories-filter\u002Fedit.js:9\n #: inc\u002Fcustom-post-types\u002Fcourse.php:110\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php:245\n@@ -426,17 +425,68 @@\n msgid \"Category\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:12\n+#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:430\n+#: config\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php:20\n+#: config\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php:46\n+#: config\u002Felementor\u002Flogin-user-form.php:19\n+#: config\u002Felementor\u002Fregister-user-form.php:19\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:9\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php:38\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php:58\n+#: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php:7\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:416\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:378\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:422\n+#: inc\u002FWidgets\u002Fcourse-extra.php:25\n+#: inc\u002FWidgets\u002Fcourse-info.php:32\n+#: inc\u002FWidgets\u002Fcourse-progress.php:29\n+#: inc\u002FWidgets\u002Ffeatured-courses.php:28\n+#: inc\u002FWidgets\u002Fpopular-courses.php:24\n+#: inc\u002FWidgets\u002Frecent-courses.php:29\n+msgid \"Title\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:22\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:22\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:14\n+msgid \"Level of category to display on Frontend\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:34\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:34\n+#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:135\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:25\n+msgid \"Load widget via REST\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:44\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:44\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:30\n+msgid \"Hide field has count is zero\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-filter\u002Fedit.js:54\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:54\n+#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:146\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:35\n+msgid \"Enable Keyword Search Suggestion\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-level-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-level-filter\u002Fedit.js:9\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:44\n #: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:69\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:200\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLevelBlockType.php:79\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:267\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:218\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php:237\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:357\n msgid \"Level\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-price-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-price-filter\u002Fedit.js:9\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:40\n #: config\u002Felementor\u002Fcourse\u002Flist-courses.php:123\n@@ -449,24 +499,42 @@\n msgid \"Price\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-search-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-search-filter\u002Fedit.js:9\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:488\n #: inc\u002Fadmin\u002Fviews\u002Fsearch-author-field.php:64\n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php:21\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:359\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:404\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:343\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:388\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:190\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:136\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:94\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:76\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:75\n msgid \"Search\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fcourse-tag-filter\u002Fedit.js:9\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter-elements\u002Fcourse-tag-filter\u002Fedit.js:9\n #: inc\u002Fadmin\u002Flp-admin-actions.php:224\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php:11\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-tags.php:12\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:526\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:867\n msgid \"Tags\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:12\n+msgid \"Show title\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourse-filter\u002Fedit.js:66\n+#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:11\n+#: inc\u002FGutenberg\u002FBlocks\u002FCourseFilter\u002FCourseFilterBlockType.php:37\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:324\n+msgid \"Course Filter\"\n+msgstr \"\"\n+\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-item-template\u002Fedit.js:165\n msgid \"Courses Fetching…\"\n msgstr \"\"\n@@ -498,7 +566,6 @@\n msgstr \"\"\n \n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fcourses\u002Fcourse-results\u002Fedit.js:9\n-#, js-format\n msgid \"Showing %d-%d of %d results\"\n msgstr \"\"\n \n@@ -574,6 +641,22 @@\n msgid \"Add nofollow attribute\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fitem-curriculum-course\u002Fedit.js:13\n+msgid \"Item Curriculum Course\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fitem-curriculum-course\u002Fedit.js:17\n+msgid \"This is an editor placeholder for the Item Curriculum Course page. Content will render content of single item curriculum course. Should be not remove it\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js:11\n+msgid \"Single Course\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course\u002Fedit.js:15\n+msgid \"This is an editor placeholder for the Single Course page. Content will render content of single course. Should be not remove it\"\n+msgstr \"\"\n+\n #: assets\u002Fsrc\u002Fapps\u002Fjs\u002Fblocks\u002Fsingle-course-legacy\u002Fedit.js:11\n msgid \"Single Course (Legacy)\"\n msgstr \"\"\n@@ -583,23 +666,49 @@\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:41\n-#: inc\u002Fclass-lp-assets.php:117\n+#: inc\u002Fclass-lp-assets.php:149\n #: inc\u002Flp-core-functions.php:2084\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:545\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:385\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:512\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:533\n msgid \"OK\"\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:44\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fdate.php:56\n-#: inc\u002Fclass-lp-assets.php:118\n+#: inc\u002Fclass-lp-assets.php:150\n #: inc\u002Flp-core-functions.php:2085\n #: inc\u002FModels\u002FUserItems\u002FUserItemModel.php:526\n-#: inc\u002Forder\u002Fclass-lp-order.php:1015\n+#: inc\u002Forder\u002Fclass-lp-order.php:1016\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:141\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:546\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:776\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:879\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:386\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:513\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:534\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:180\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:276\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php:28\n msgid \"Cancel\"\n msgstr \"\"\n \n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:131\n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:131\n+msgid \"The file size is too large. You need to upload a file \u003C 2MB.\"\n+msgstr \"\"\n+\n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:133\n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:133\n+msgid \"The image size must be greater than or equal to %1$sx%2$spx\"\n+msgstr \"\"\n+\n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:146\n+#: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fprofile.min.js:146\n+msgid \"Are you sure you want to remove your avatar?\"\n+msgstr \"\"\n+\n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:98\n msgid \"LP Error: can not set answers\"\n msgstr \"\"\n@@ -622,7 +731,6 @@\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:208\n-#, js-format\n msgid \"%d\u002F%d point\"\n msgstr \"\"\n \n@@ -639,7 +747,6 @@\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:34\n-#, js-format\n msgid \"Question \u003Ccode>%s\u003C\u002Fcode> invalid!\"\n msgstr \"\"\n \n@@ -649,6 +756,7 @@\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:21\n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:200\n+#: config\u002Fcourse-builder\u002Fmenus.php:55\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php:55\n #: inc\u002Fcustom-post-types\u002Fquestion.php:210\n #: inc\u002Fcustom-post-types\u002Fquiz.php:178\n@@ -656,6 +764,9 @@\n #: inc\u002Fcustom-post-types\u002Fquiz.php:454\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:159\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:356\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:327\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:48\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:191\n msgid \"Questions\"\n msgstr \"\"\n \n@@ -677,10 +788,10 @@\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:25\n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:300\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:149\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:147\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:448\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:702\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:165\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:184\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:485\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:739\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:140\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:257\n #: templates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-list.php:32\n@@ -718,11 +829,11 @@\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:204\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:97\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:96\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:103\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:404\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:658\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:110\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:110\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:140\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:441\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:695\n msgid \"Next\"\n msgstr \"\"\n \n@@ -762,6 +873,14 @@\n #: inc\u002Fadmin\u002Fclass-lp-install-sample-data.php:157\n #: inc\u002Fcustom-post-types\u002Fabstract.php:1001\n #: inc\u002Fcustom-post-types\u002Fquestion.php:359\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:528\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:481\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:368\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:325\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:495\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:314\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:516\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:311\n #: templates\u002Fcontent-lesson\u002Fcontent.php:27\n msgid \"Edit\"\n msgstr \"\"\n@@ -782,7 +901,7 @@\n #: inc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php:167\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:161\n #: inc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php:147\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:815\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:829\n msgid \"Passed\"\n msgstr \"\"\n \n@@ -796,7 +915,7 @@\n #: inc\u002FTemplateHooks\u002FUserItem\u002FUserItemBaseTemplate.php:170\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:162\n #: inc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php:148\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:816\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:830\n msgid \"Failed\"\n msgstr \"\"\n \n@@ -817,18 +936,15 @@\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:93\n-#, js-format\n msgid \"Question \u003Cspan>%d to %d of %d\u003C\u002Fspan>\"\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:95\n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:98\n-#, js-format\n msgid \"Question \u003Cspan>%d of %d\u003C\u002Fspan>\"\n msgstr \"\"\n \n #: assets\u002Fjs\u002Fdist\u002Ffrontend\u002Fquiz.min.js:107\n-#, js-format\n msgid \"Earned Point: %s\"\n msgstr \"\"\n \n@@ -836,10 +952,25 @@\n msgid \"Submitting…\"\n msgstr \"\"\n \n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fadmin.js:107\n+msgid \"Search by user\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-curriculum\u002Fedit-course-ai.js:700\n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-curriculum\u002Fedit-course-ai.js:705\n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-curriculum\u002Fedit-course-ai.js:710\n+#: assets\u002Fsrc\u002Fjs\u002Fadmin\u002Fedit-curriculum\u002Fedit-course-ai.js:723\n+msgid \"Edit with AI\"\n+msgstr \"\"\n+\n+#: assets\u002Fsrc\u002Fjs\u002Ffrontend\u002Fcourse-builder\u002Fbuilder-form-state.js:174\n+msgid \"You have unsaved changes. Are you sure you want to leave this page?\"\n+msgstr \"\"\n+\n #. Plugin Name of the plugin\n #: learnpress.php\n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:154\n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:162\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:158\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:166\n #: inc\u002Fadmin\u002Flp-admin-functions.php:1503\n #: inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-emails.php:153\n #: inc\u002FExternalPlugin\u002FElementor\u002FLPElementor.php:56\n@@ -868,6 +999,86 @@\n msgid \"http:\u002F\u002Fthimpress.com\"\n msgstr \"\"\n \n+#: config\u002Fcourse-builder\u002Fmenus.php:5\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:72\n+msgid \"Dashboard\"\n+msgstr \"\"\n+\n+#: config\u002Fcourse-builder\u002Fmenus.php:12\n+#: config\u002Fprofile-tabs.php:17\n+#: config\u002Fsettings\u002Fpermalink.php:99\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:28\n+#: inc\u002Fadmin\u002Flp-admin-actions.php:214\n+#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:22\n+#: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php:30\n+#: inc\u002Fclass-lp-page-controller.php:248\n+#: inc\u002Fcustom-post-types\u002Fcourse.php:50\n+#: inc\u002Fcustom-post-types\u002Fcourse.php:52\n+#: inc\u002Flp-template-functions.php:315\n+#: inc\u002Fsettings\u002Fclass-lp-settings-courses.php:16\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:70\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:210\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:190\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:549\n+#: templates\u002Fcheckout\u002Forder-received.php:56\n+msgid \"Courses\"\n+msgstr \"\"\n+\n+#: config\u002Fcourse-builder\u002Fmenus.php:19\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:302\n+#: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:43\n+#: inc\u002Fcustom-post-types\u002Flesson.php:191\n+#: inc\u002Fcustom-post-types\u002Flesson.php:192\n+#: inc\u002Fcustom-post-types\u002Flesson.php:195\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:360\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php:249\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:66\n+#: inc\u002FWPGDPR\u002FExportPersonalData.php:359\n+#: templates\u002Fwidgets\u002Fcourse-info.php:25\n+msgid \"Lessons\"\n+msgstr \"\"\n+\n+#: config\u002Fcourse-builder\u002Fmenus.php:25\n+#: config\u002Fcourse-builder\u002Fmenus.php:41\n+#: config\u002Fcourse-builder\u002Fmenus.php:61\n+#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:20\n+#: inc\u002Flp-template-functions.php:51\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php:263\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:325\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:244\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:151\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:198\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:198\n+msgid \"Overview\"\n+msgstr \"\"\n+\n+#: config\u002Fcourse-builder\u002Fmenus.php:35\n+#: config\u002Fprofile-tabs.php:31\n+#: config\u002Fsettings\u002Fpermalink.php:123\n+#: inc\u002Fcustom-post-types\u002Fquiz.php:87\n+#: inc\u002Fcustom-post-types\u002Fquiz.php:88\n+#: inc\u002Fcustom-post-types\u002Fquiz.php:92\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:47\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:556\n+#: inc\u002FWPGDPR\u002FExportPersonalData.php:360\n+#: templates\u002Fwidgets\u002Fcourse-info.php:30\n+msgid \"Quizzes\"\n+msgstr \"\"\n+\n+#: config\u002Fcourse-builder\u002Fmenus.php:45\n+#: config\u002Fsettings\u002Fadvanced.php:78\n+#: inc\u002Fclass-lp-helper.php:568\n+#: inc\u002Fcustom-post-types\u002Fquestion.php:209\n+#: inc\u002Fcustom-post-types\u002Fquiz.php:177\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:158\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:512\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:491\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:202\n+msgid \"Question\"\n+msgid_plural \"Questions\"\n+msgstr[0] \"\"\n+msgstr[1] \"\"\n+\n #: config\u002Fcourse-deliver-type.php:10\n msgid \"Private 1-1\"\n msgstr \"\"\n@@ -1052,7 +1263,7 @@\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:67\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:89\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:101\n-#: inc\u002Fclass-lp-assets.php:119\n+#: inc\u002Fclass-lp-assets.php:151\n #: inc\u002Flp-core-functions.php:2086\n msgid \"Yes\"\n msgstr \"\"\n@@ -1066,7 +1277,7 @@\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:68\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:90\n #: config\u002Felementor\u002Fcourse\u002Flist-courses-by-page.php:102\n-#: inc\u002Fclass-lp-assets.php:120\n+#: inc\u002Fclass-lp-assets.php:152\n #: inc\u002Flp-core-functions.php:2087\n msgid \"No\"\n msgstr \"\"\n@@ -1087,6 +1298,7 @@\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:19\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php:20\n #: inc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php:148\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:157\n msgid \"Filter\"\n msgstr \"\"\n \n@@ -1120,7 +1332,7 @@\n \n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:295\n #: inc\u002FModels\u002FWPTables\u002FCoursesTable.php:139\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:146\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:162\n msgid \"Section\"\n msgid_plural \"Sections\"\n msgstr[0] \"\"\n@@ -1146,8 +1358,8 @@\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:353\n #: inc\u002Fadmin\u002Fclass-lp-admin-assets.php:636\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php:66\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:159\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:260\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:175\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:276\n #: inc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php:319\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php:199\n #: templates\u002Fcheckout\u002Forder-received.php:93\n@@ -1163,24 +1375,6 @@\n msgid \"Toggle Offset Y (px)\"\n msgstr \"\"\n \n-#: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:430\n-#: config\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php:20\n-#: config\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php:46\n-#: config\u002Felementor\u002Flogin-user-form.php:19\n-#: config\u002Felementor\u002Fregister-user-form.php:19\n-#: config\u002Fwidgets\u002Fcourse\u002Ffilter-course.php:9\n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php:38\n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fextra-faq.php:58\n-#: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php:7\n-#: inc\u002FWidgets\u002Fcourse-extra.php:25\n-#: inc\u002FWidgets\u002Fcourse-info.php:32\n-#: inc\u002FWidgets\u002Fcourse-progress.php:29\n-#: inc\u002FWidgets\u002Ffeatured-courses.php:28\n-#: inc\u002FWidgets\u002Fpopular-courses.php:24\n-#: inc\u002FWidgets\u002Frecent-courses.php:29\n-msgid \"Title\"\n-msgstr \"\"\n-\n #: config\u002Felementor\u002Fcourse\u002Ffilter-course-el.php:441\n msgid \"Label\"\n msgstr \"\"\n@@ -1419,6 +1613,10 @@\n #: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:45\n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsetup-stripe.php:11\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:262\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:625\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:446\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:404\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:448\n msgid \"Description\"\n msgstr \"\"\n \n@@ -1443,7 +1641,7 @@\n msgstr \"\"\n \n #: config\u002Felementor\u002Finstructor\u002Fbecome-a-teacher.php:37\n-#: inc\u002Fclass-lp-assets.php:136\n+#: inc\u002Fclass-lp-assets.php:168\n #: inc\u002Forder\u002Fclass-lp-order.php:284\n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php:90\n msgid \"Processing\"\n@@ -1596,40 +1794,13 @@\n msgid \"Layout Type\"\n msgstr \"\"\n \n-#: config\u002Fprofile-tabs.php:17\n-#: config\u002Fsettings\u002Fpermalink.php:90\n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:27\n-#: inc\u002Fadmin\u002Flp-admin-actions.php:214\n-#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:22\n-#: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php:30\n-#: inc\u002Fclass-lp-page-controller.php:243\n-#: inc\u002Fcustom-post-types\u002Fcourse.php:50\n-#: inc\u002Fcustom-post-types\u002Fcourse.php:52\n-#: inc\u002Flp-template-functions.php:315\n-#: inc\u002Fsettings\u002Fclass-lp-settings-courses.php:16\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:535\n-#: templates\u002Fcheckout\u002Forder-received.php:56\n-msgid \"Courses\"\n-msgstr \"\"\n-\n #: config\u002Fprofile-tabs.php:24\n-#: config\u002Fsettings\u002Fpermalink.php:102\n+#: config\u002Fsettings\u002Fpermalink.php:111\n msgid \"My Courses\"\n msgstr \"\"\n \n-#: config\u002Fprofile-tabs.php:31\n-#: config\u002Fsettings\u002Fpermalink.php:114\n-#: inc\u002Fcustom-post-types\u002Fquiz.php:87\n-#: inc\u002Fcustom-post-types\u002Fquiz.php:88\n-#: inc\u002Fcustom-post-types\u002Fquiz.php:92\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:542\n-#: inc\u002FWPGDPR\u002FExportPersonalData.php:360\n-#: templates\u002Fwidgets\u002Fcourse-info.php:30\n-msgid \"Quizzes\"\n-msgstr \"\"\n-\n #: config\u002Fprofile-tabs.php:38\n-#: config\u002Fsettings\u002Fpermalink.php:122\n+#: config\u002Fsettings\u002Fpermalink.php:131\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:21\n #: inc\u002Fcustom-post-types\u002Forder.php:667\n #: inc\u002Fcustom-post-types\u002Forder.php:668\n@@ -1638,16 +1809,16 @@\n msgstr \"\"\n \n #: config\u002Fprofile-tabs.php:45\n-#: config\u002Fsettings\u002Fpermalink.php:130\n+#: config\u002Fsettings\u002Fpermalink.php:139\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fcontent-tab-preview-exports-invoice.php:55\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php:44\n msgid \"Order details\"\n msgstr \"\"\n \n #: config\u002Fprofile-tabs.php:52\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:59\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:60\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:74\n+#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-students-enrolled.php:14\n+#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-students-enrolled.php:15\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:58\n msgid \"Enrolled Students\"\n msgstr \"\"\n \n@@ -1672,6 +1843,7 @@\n \n #: config\u002Fprofile-tabs.php:85\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-users-v1-controller.php:124\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1122\n #: templates\u002Fcheckout\u002Faccount-login.php:35\n #: templates\u002Fcheckout\u002Faccount-login.php:36\n #: templates\u002Fcheckout\u002Faccount-register.php:32\n@@ -1686,6 +1858,7 @@\n msgstr \"\"\n \n #: config\u002Fprofile-tabs.php:96\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:277\n msgid \"Logout\"\n msgstr \"\"\n \n@@ -1694,7 +1867,7 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fadvanced.php:11\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:752\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:789\n msgid \"Style\"\n msgstr \"\"\n \n@@ -1712,7 +1885,6 @@\n \n #: config\u002Fsettings\u002Fadvanced.php:24\n #: config\u002Fsettings\u002Fadvanced.php:34\n-#, php-format\n msgid \"Default: %s\"\n msgstr \"\"\n \n@@ -1731,13 +1903,14 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fadvanced.php:57\n-#: config\u002Fsettings\u002Fpermalink.php:39\n+#: config\u002Fsettings\u002Fpermalink.php:40\n #: inc\u002Fadmin\u002Flp-admin-functions.php:57\n #: inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fcourse-permalink.php:22\n #: inc\u002Fclass-lp-helper.php:550\n #: inc\u002Fcustom-post-types\u002Fabstract.php:974\n #: inc\u002Fcustom-post-types\u002Fquiz.php:246\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:530\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:514\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:488\n #: inc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php:69\n #: templates\u002Femails\u002Forder-items-table.php:87\n msgid \"Course\"\n@@ -1746,34 +1919,37 @@\n msgstr[1] \"\"\n \n #: config\u002Fsettings\u002Fadvanced.php:64\n-#: config\u002Fsettings\u002Fpermalink.php:45\n+#: config\u002Fsettings\u002Fpermalink.php:46\n #: inc\u002Fclass-lp-helper.php:556\n #: inc\u002Fcourse\u002Flp-course-functions.php:411\n #: inc\u002Fcustom-post-types\u002Flesson.php:193\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseLessonBlockType.php:79\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseOfflineLessonBlockType.php:80\n #: inc\u002Flp-template-functions.php:1098\n-#: inc\u002FModels\u002FCourseModel.php:1503\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:467\n+#: inc\u002FModels\u002FCourseModel.php:1514\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:480\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:206\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:560\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:489\n msgid \"Lesson\"\n msgid_plural \"Lessons\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n #: config\u002Fsettings\u002Fadvanced.php:71\n-#: config\u002Fsettings\u002Fpermalink.php:53\n+#: config\u002Fsettings\u002Fpermalink.php:54\n #: inc\u002Fclass-lp-helper.php:562\n #: inc\u002Fcourse\u002Flp-course-functions.php:412\n #: inc\u002Fcustom-post-types\u002Fquestion.php:315\n #: inc\u002Fcustom-post-types\u002Fquiz.php:89\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseQuizBlockType.php:79\n #: inc\u002Flp-template-functions.php:1088\n-#: inc\u002FModels\u002FCourseModel.php:1506\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:514\n+#: inc\u002FModels\u002FCourseModel.php:1517\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:527\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:214\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:563\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:490\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:192\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:137\n #: templates\u002Fprofile\u002Ftabs\u002Fquizzes.php:56\n msgid \"Quiz\"\n@@ -1781,17 +1957,6 @@\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: config\u002Fsettings\u002Fadvanced.php:78\n-#: inc\u002Fclass-lp-helper.php:568\n-#: inc\u002Fcustom-post-types\u002Fquestion.php:209\n-#: inc\u002Fcustom-post-types\u002Fquiz.php:177\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:158\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:499\n-msgid \"Question\"\n-msgid_plural \"Questions\"\n-msgstr[0] \"\"\n-msgstr[1] \"\"\n-\n #: config\u002Fsettings\u002Fadvanced.php:81\n msgid \"Debug Mode\"\n msgstr \"\"\n@@ -1913,12 +2078,12 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fcourse.php:160\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1528\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1540\n msgid \"Expand all sections\"\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fcourse.php:161\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1532\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1544\n msgid \"Collapse all sections\"\n msgstr \"\"\n \n@@ -2711,7 +2876,6 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgateway\u002Fpaypal.php:50\n-#, php-format\n msgid \"How to get \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">Client ID\u003C\u002Fa>\"\n msgstr \"\"\n \n@@ -2720,7 +2884,6 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgateway\u002Fpaypal.php:59\n-#, php-format\n msgid \"How to get \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">Client Secret\u003C\u002Fa>\"\n msgstr \"\"\n \n@@ -2824,18 +2987,26 @@\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgeneral.php:144\n-msgid \"Instructor registration\"\n+msgid \"Redirect Instructors to Course Builder\"\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgeneral.php:145\n-msgid \"Enable the option in all registration forms.\"\n+msgid \"When enabled, Instructors will be redirected to Course Builder when trying to access wp-admin. Administrators are not affected.\"\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgeneral.php:151\n-msgid \"Store IP Guest to handle checkout\"\n+msgid \"Instructor registration\"\n msgstr \"\"\n \n #: config\u002Fsettings\u002Fgeneral.php:152\n+msgid \"Enable the option in all registration forms.\"\n+msgstr \"\"\n+\n+#: config\u002Fsettings\u002Fgeneral.php:158\n+msgid \"Store IP Guest to handle checkout\"\n+msgstr \"\"\n+\n+#: config\u002Fsettings\u002Fgeneral.php:159\n msgid \"Enable the option, IP of client is identifier user instead $_COOKIE\"\n msgstr \"\"\n \n@@ -2849,7 +3020,6 @@\n \n #. translators: %s: MCP documentation URL.\n #: config\u002Fsettings\u002Fmcp.php:21\n-#, php-format\n msgid \"Enable Model Context Protocol integration for AI-powered LMS operations. Review all AI actions before executing. \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Learn more\u003C\u002Fa>.\"\n msgstr \"\"\n \n@@ -2871,9 +3041,8 @@\n \n #. translators: 1. profile url\n #: config\u002Fsettings\u002Fopen-ai-admin.php:26\n-#, php-format\n msgid \"\"\n-\"Get your Open AI secret key from \u003Ca href=\\\"%1$s\\\" target=\\\"_blank\\\">here\u003C\u002Fa>.\\r\\n\"\n+\"Get your Open AI secret key from \u003Ca href=\\\"%1$s\\\" target=\\\"_blank\\\">here\u003C\u002Fa>.\\n\"\n \"                            Read more guide from \u003Ca href=\\\"%2$s\\\" target=\\\"_blank\\\">here\u003C\u002Fa>.\"\n msgstr \"\"\n \n@@ -3573,59 +3742,51 @@\n msgid \"Advanced\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:35\n+#: config\u002Fsettings\u002Fpermalink.php:36\n msgid \"Permalinks Course\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:61\n+#: config\u002Fsettings\u002Fpermalink.php:62\n msgid \"Category base\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:69\n+#: config\u002Fsettings\u002Fpermalink.php:70\n msgid \"Tag base\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:85\n+#: config\u002Fsettings\u002Fpermalink.php:78\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:242\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:575\n+#: inc\u002FTemplateHooks\u002FProfile\u002FProfileCoursesTemplate.php:69\n+#: templates\u002Fpages\u002Fcourse-builder.php:27\n+msgid \"Course Builder\"\n+msgstr \"\"\n+\n+#: config\u002Fsettings\u002Fpermalink.php:94\n msgid \"Permalinks Profile\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:97\n+#: config\u002Fsettings\u002Fpermalink.php:106\n msgid \"Courses created by user\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:109\n+#: config\u002Fsettings\u002Fpermalink.php:118\n msgid \"Courses enrolled by user\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:138\n-msgid \"Users pretty slug\"\n-msgstr \"\"\n-\n-#: config\u002Fsettings\u002Fpermalink.php:144\n-msgid \"Generate users slug\"\n-msgstr \"\"\n-\n-#: config\u002Fsettings\u002Fpermalink.php:145\n-msgid \"Generate public user slugs for existing users on old sites. Existing pretty slugs will be kept unchanged.\"\n-msgstr \"\"\n-\n-#: config\u002Fsettings\u002Fpermalink.php:146\n-msgid \"This slug replaces the default username in profile and instructor links to uniquely identify users.\"\n-msgstr \"\"\n-\n-#: config\u002Fsettings\u002Fpermalink.php:164\n+#: config\u002Fsettings\u002Fpermalink.php:173\n msgid \"Basic Information \u003Csmall>Settings\u003C\u002Fsmall>\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:172\n+#: config\u002Fsettings\u002Fpermalink.php:181\n msgid \"Avatar \u003Csmall>Settings\u003C\u002Fsmall>\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:180\n+#: config\u002Fsettings\u002Fpermalink.php:189\n msgid \"Change Password \u003Csmall>Settings\u003C\u002Fsmall>\"\n msgstr \"\"\n \n-#: config\u002Fsettings\u002Fpermalink.php:188\n+#: config\u002Fsettings\u002Fpermalink.php:197\n msgid \"Privacy \u003Csmall>Settings\u003C\u002Fsmall>\"\n msgstr \"\"\n \n@@ -3725,27 +3886,22 @@\n msgstr \"\"\n \n #: inc\u002Fabstracts\u002Fabstract-addon.php:169\n-#, php-format\n msgid \"\u003Cstrong>LearnPress version %1$s require %2$s\u003C\u002Fstrong> version %3$s or higher\"\n msgstr \"\"\n \n #: inc\u002Fabstracts\u002Fabstract-addon.php:190\n-#, php-format\n msgid \"\u003Cstrong>%1$s\u003C\u002Fstrong> add-on version %2$s requires \u003Cstrong>LearnPress\u003C\u002Fstrong> version %3$s or higher %4$s\"\n msgstr \"\"\n \n #: inc\u002Fabstracts\u002Fabstract-addon.php:257\n-#, php-format\n msgid \"%s plugin file does not exist.\"\n msgstr \"\"\n \n #: inc\u002Fabstracts\u002Fabstract-addon.php:276\n-#, php-format\n msgid \"%s plugin class does not exist.\"\n msgstr \"\"\n \n #: inc\u002Fabstracts\u002Fabstract-object-data.php:346\n-#, php-format\n msgid \"The following functions %1$s do not exist in %2$s\"\n msgstr \"\"\n \n@@ -3786,6 +3942,7 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fclass-lp-admin-ajax.php:546\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2227\n msgid \"Permission denied\"\n msgstr \"\"\n \n@@ -3812,10 +3969,14 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fclass-lp-admin-assets.php:69\n+#: inc\u002Fclass-lp-assets.php:230\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:661\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:65\n msgid \"Generate with AI\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fclass-lp-admin-assets.php:70\n+#: inc\u002Fclass-lp-assets.php:231\n msgid \"Are you sure you want to close? Generate data will stop.\"\n msgstr \"\"\n \n@@ -3873,8 +4034,8 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fclass-lp-admin-assets.php:637\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:160\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:261\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:176\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:277\n msgid \"Items\"\n msgstr \"\"\n \n@@ -4057,72 +4218,77 @@\n msgid \"Learning Management System\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:28\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:29\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php:31\n msgid \"Instructors\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:29\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:30\n msgid \"Single Instructors\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:30\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:31\n #: inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-profile.php:26\n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php:85\n msgid \"Profile\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:31\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:32\n msgid \"Checkout\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:32\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:33\n #: inc\u002Fadmin\u002Fsettings\u002Femail-groups\u002Fclass-lp-settings-become-teacher-emails.php:23\n msgid \"Become an Instructor\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:109\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:113\n msgid \"Available Courses\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:425\n-#, php-format\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:429\n msgid \"LearnPress Pages (%d)\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:481\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:485\n msgctxt \"pending-request\"\n msgid \"Accept\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:486\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:490\n msgctxt \"pending-request\"\n msgid \"Deny\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:606\n-#, php-format\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:610\n msgid \"Pending Request %s\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:674\n-#, php-format\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:678\n msgid \"A user has %s to become a teacher.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:703\n-#, php-format\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:707\n msgid \"If you like \u003Cstrong>LearnPress\u003C\u002Fstrong> please leave us a %1$s&#9733;&#9733;&#9733;&#9733;&#9733;%2$s rating. A huge thanks from the LearnPress team for your generosity.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:707\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:711\n msgid \"Thanks :)\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-admin.php:908\n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:912\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:195\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:320\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:468\n msgid \"Permalink is only available if the item is already assigned to a course.\"\n msgstr \"\"\n \n+#: inc\u002Fadmin\u002Fclass-lp-admin.php:961\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:579\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:598\n+msgid \"Edit with Course Builder\"\n+msgstr \"\"\n+\n #: inc\u002Fadmin\u002Fclass-lp-install-sample-data.php:71\n msgid \"Are you sure you want to install the sample course data?\"\n msgstr \"\"\n@@ -4132,7 +4298,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fclass-lp-install-sample-data.php:154\n-#, php-format\n msgid \"The Course \\\"%s\\\" has been created\"\n msgstr \"\"\n \n@@ -4145,7 +4310,7 @@\n #: inc\u002Fcustom-post-types\u002Fabstract.php:1121\n #: inc\u002Fcustom-post-types\u002Fabstract.php:1131\n #: inc\u002Fcustom-post-types\u002Fquestion.php:361\n-#: inc\u002Forder\u002Fclass-lp-order.php:1007\n+#: inc\u002Forder\u002Fclass-lp-order.php:1008\n msgid \"View\"\n msgstr \"\"\n \n@@ -4177,6 +4342,8 @@\n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php:92\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php:83\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminTemplate.php:104\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:777\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:880\n msgid \"Add\"\n msgstr \"\"\n \n@@ -4185,8 +4352,9 @@\n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fmodal-choose-items.php:66\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php:231\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fmodal-choose-items.php:58\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:642\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:655\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:100\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:88\n msgid \"Close\"\n msgstr \"\"\n \n@@ -4278,32 +4446,32 @@\n msgid \"Instructor\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:230\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:234\n msgid \"Welcome\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:232\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:236\n msgid \"Run Setup Wizard\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:235\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:239\n msgid \"Pages\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:245\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:249\n #: inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fpayment-order.php:7\n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpayment.php:16\n #: templates\u002Fcheckout\u002Fpayment.php:25\n msgid \"Payment\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:253\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:257\n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fcontent.php:67\n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Ffinish.php:12\n msgid \"Finish\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:370\n+#: inc\u002Fadmin\u002Fclass-lp-setup-wizard.php:374\n #: inc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php:87\n #: inc\u002Fgateways\u002Fpaypal\u002Fclass-lp-gateway-paypal.php:91\n msgid \"PayPal\"\n@@ -4326,6 +4494,7 @@\n \n #: inc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-question.php:113\n #: inc\u002Fcurds\u002Fclass-lp-question-curd.php:48\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:275\n msgid \"New Question\"\n msgstr \"\"\n \n@@ -4336,6 +4505,7 @@\n #: inc\u002Fadmin\u002Feditor\u002Fclass-lp-admin-editor-quiz.php:155\n #: inc\u002Fcurds\u002Fclass-lp-quiz-curd.php:88\n #: inc\u002Fcustom-post-types\u002Fquiz.php:94\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:221\n msgid \"New Quiz\"\n msgstr \"\"\n \n@@ -4346,19 +4516,16 @@\n \n #. translators: 1: Plugin name and version.\n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:241\n-#, php-format\n msgid \"Install %s now\"\n msgstr \"\"\n \n #. translators: 1: Plugin name and version\n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:248\n-#, php-format\n msgid \"Update %s now\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:255\n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:264\n-#, php-format\n msgid \"Disable %s now\"\n msgstr \"\"\n \n@@ -4369,7 +4536,6 @@\n \n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:257\n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:266\n-#, php-format\n msgid \"Enable %s now\"\n msgstr \"\"\n \n@@ -4379,7 +4545,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php:271\n-#, php-format\n msgid \"Buy %s now\"\n msgstr \"\"\n \n@@ -4387,6 +4552,8 @@\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php:11\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-categories.php:12\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:338\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:736\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:784\n msgid \"Categories\"\n msgstr \"\"\n \n@@ -4464,46 +4631,64 @@\n msgid \"HTML\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:1646\n-#: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:73\n-#: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:78\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:342\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:369\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:1649\n+msgctxt \"Duplicate item title suffix\"\n msgid \"Copy\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:1754\n-#, php-format\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:1758\n msgid \"Question id %s does not exist.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:1758\n-#, php-format\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:1762\n msgid \"Quiz id %s does not exist.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:2088\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:2092\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:264\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:250\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:116\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:158\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:813\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:827\n #: templates\u002Fwidgets\u002Fcourse-info.php:35\n msgid \"All\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:2093\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:2097\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:475\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:938\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1220\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1366\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1607\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1787\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1961\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2059\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:100\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:119\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:182\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1096\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:449\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:90\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:123\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:333\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:144\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:582\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:322\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:144\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:576\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:319\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:117\n msgid \"Publish\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:2098\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:2102\n+#: inc\u002FModels\u002FPostModel.php:618\n #: inc\u002Forder\u002Fclass-lp-order.php:281\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:118\n msgid \"Pending\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:2103\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:2107\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:164\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:266\n #: inc\u002FExternalPlugin\u002FElementor\u002FWidgets\u002FCourse\u002FFilterCourseElementor.php:235\n@@ -4511,7 +4696,7 @@\n msgid \"Paid\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Flp-admin-functions.php:2108\n+#: inc\u002Fadmin\u002Flp-admin-functions.php:2112\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:164\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:267\n #: inc\u002Fcourse\u002Fabstract-course.php:674\n@@ -4520,6 +4705,7 @@\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:880\n #: inc\u002FTemplateHooks\u002FCourse\u002FFilterCourseTemplate.php:248\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:445\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:581\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:396\n #: templates\u002Forder\u002Forder-details.php:50\n msgid \"Free\"\n@@ -4546,7 +4732,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Femail-content.php:95\n-#, php-format\n msgid \"This template has been overridden by your theme and can be found in: \u003Ccode>%s\u003C\u002Fcode>. \u003Cbr \u002F>Please open the file in an editor program to edit\"\n msgstr \"\"\n \n@@ -4563,6 +4748,9 @@\n #: inc\u002Fadmin\u002Fviews\u002Fquestion\u002Ffib-answer-editor.php:24\n #: inc\u002Fadmin\u002Fviews\u002Fquestion\u002Foption.php:22\n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fdatabase\u002Fhtml-clean-database.php:46\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:344\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:333\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:330\n msgid \"Delete\"\n msgstr \"\"\n \n@@ -4589,7 +4777,7 @@\n \n #: inc\u002Fadmin\u002Fmeta-box\u002Ffields\u002Fimage.php:27\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php:96\n-#: inc\u002Fclass-lp-assets.php:143\n+#: inc\u002Fclass-lp-assets.php:175\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php:40\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fcover-image.php:22\n msgid \"Upload\"\n@@ -4654,11 +4842,11 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-mcp.php:54\n-msgid \"learn more\"\n+msgid \"Learn more\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-mcp.php:59\n-msgid \"This feature requires the MCP Adapter plugin. Please install and activate it to access the settings.\"\n+msgid \"This feature requires the MCP Adapter plugin. Please install and activate it to access the settings. \"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fsettings\u002Fclass-lp-settings-open-ai.php:20\n@@ -4746,7 +4934,7 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php:18\n-#: learnpress.php:821\n+#: learnpress.php:861\n msgid \"Add-ons\"\n msgstr \"\"\n \n@@ -4760,7 +4948,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-addons.php:45\n-#, php-format\n msgid \"If you have purchased a premium add-on separately, you can enter your purchase code (%s) to download or update the add-ons here.\"\n msgstr \"\"\n \n@@ -4774,7 +4961,6 @@\n \n #. translators: 1: processed users, 2: generated slugs, 3: skipped users, 4: failed users\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-settings.php:74\n-#, php-format\n msgid \"User slug generation finished. Processed: %1$d, Generated: %2$d, Skipped: %3$d, Failed: %4$d.\"\n msgstr \"\"\n \n@@ -4790,12 +4976,6 @@\n msgid \"LearnPress Statistics\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:20\n-#: inc\u002Flp-template-functions.php:51\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseClassicTemplate.php:263\n-msgid \"Overview\"\n-msgstr \"\"\n-\n #: inc\u002Fadmin\u002Fsub-menus\u002Fclass-lp-submenu-statistics.php:23\n msgid \"Users\"\n msgstr \"\"\n@@ -4857,7 +5037,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:148\n-#, php-format\n msgid \"You have a license of for this item with %s days of update & support remaining. Please extend the update & support license to keep updating the latest versions & receive customer support from ThimPress before it expires.\"\n msgstr \"\"\n \n@@ -4900,7 +5079,7 @@\n \n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:245\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php:82\n-#: inc\u002Fclass-lp-assets.php:146\n+#: inc\u002Fclass-lp-assets.php:178\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:175\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:271\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php:27\n@@ -4915,6 +5094,22 @@\n #: inc\u002Fadmin\u002Fviews\u002Faddons.php:268\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php:45\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fexports-invoice.php:87\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:474\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1220\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1366\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1607\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1787\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1961\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:100\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:118\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:181\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:185\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:90\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:122\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:143\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:146\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:143\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:146\n msgid \"Update\"\n msgstr \"\"\n \n@@ -4963,7 +5158,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fadmin-notices\u002Fplugin-base.php:19\n-#, php-format\n msgid \"The LearnPress plugin base directory must be \u003Cstrong>learnpress\u002Flearnpres.php\u003C\u002Fstrong> (case-sensitive) to ensure all functions work properly and are fully operational (currently \u003Cstrong>%s\u003C\u002Fstrong>)\"\n msgstr \"\"\n \n@@ -4987,30 +5181,24 @@\n msgid \"Check Site Health\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:31\n+#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:30\n msgid \"LearnPress User Profile\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:43\n+#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:42\n msgid \"LP slug user name\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:60\n+#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:59\n msgid \"Custom slug to replace the WP login username, use for link lp profile\u002Finstructor. Must be unique.\"\n msgstr \"\"\n \n-#. translators: 1: link to permalink settings page\n-#: inc\u002Fadmin\u002Fviews\u002Fbackend-user-profile.php:63\n-#, php-format\n-msgid \"Set for all uses not exists pretty slug \u003Ca href=\\\"%s\\\">here\u003C\u002Fa>. Then click \\\"Generate users slug\\\"\"\n-msgstr \"\"\n-\n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fcurriculum.php:14\n #: inc\u002Fadmin\u002Fviews\u002Fquestion\u002Factions.php:12\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php:35\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-meta.php:12\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:148\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:136\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:152\n msgid \"Details\"\n msgstr \"\"\n \n@@ -5035,7 +5223,7 @@\n \n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fnew-section.php:16\n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection.php:17\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:365\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:381\n msgid \"Create a new section\"\n msgstr \"\"\n \n@@ -5052,7 +5240,7 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php:24\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:411\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:439\n msgid \"Enable\u002FDisable Preview\"\n msgstr \"\"\n \n@@ -5067,6 +5255,7 @@\n \n #: inc\u002Fadmin\u002Fviews\u002Fcourse\u002Fsection-item.php:37\n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php:41\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:127\n msgid \"Move to trash\"\n msgstr \"\"\n \n@@ -5084,8 +5273,14 @@\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:753\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:771\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:820\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:240\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:423\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:256\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:447\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:208\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:332\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:344\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:169\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:169\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:318\n msgid \"Are you sure?\"\n msgstr \"\"\n \n@@ -5095,7 +5290,6 @@\n \n #: inc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php:37\n #: inc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fhtml-orders.php:39\n-#, php-format\n msgid \"%d order\"\n msgid_plural \"%d orders\"\n msgstr[0] \"\"\n@@ -5114,6 +5308,12 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fdashboard\u002Fplugin-status\u002Fhtml-results.php:36\n+#: inc\u002FModels\u002FPostModel.php:608\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1060\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1104\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:100\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:575\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:569\n msgid \"Published\"\n msgstr \"\"\n \n@@ -5126,12 +5326,10 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php:35\n-#, php-format\n msgid \"There is a new update on LearnPress. You may need to update your theme \u003Cstrong>(%s)\u003C\u002Fstrong> to avoid outdated template files.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fhtml-admin-notice-templates.php:40\n-#, php-format\n msgid \"This is not a bug, don't worry. Read more about the outdated template files notice \u003Ca href=\\\\\\\"%s\\\\\\\" target=\\\\\\\"_blank\\\\\\\">here\u003C\u002Fa>.\"\n msgstr \"\"\n \n@@ -5147,6 +5345,9 @@\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fassigned.php:55\n #: inc\u002Fcustom-post-types\u002Fabstract.php:1016\n #: inc\u002Fcustom-post-types\u002Fquestion.php:364\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:277\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:338\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:382\n msgid \"Not assigned yet\"\n msgstr \"\"\n \n@@ -5175,30 +5376,37 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:119\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:187\n msgid \"Reset course progress: The course progress and results of student will be removed.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:126\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:194\n msgid \"Keep course progress: The course progress and results of student will remain.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:133\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:201\n msgid \"Open popup: The student can decide whether their course progress will be reset with the confirm popup.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:138\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:206\n msgid \"The maximum number of students that can join a course. Set 0 for unlimited.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:142\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:210\n msgid \"Not apply for case \\\"No enroll requirement\\\".\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:149\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:217\n msgid \"Fake students enrolled for the course.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:150\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:218\n msgid \"It only to display, not calculate\"\n msgstr \"\"\n \n@@ -5211,240 +5419,281 @@\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1370\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php:530\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php:636\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:224\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:210\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php:241\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:192\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:356\n msgid \"Duration\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:157\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:225\n msgid \"Set to 0 for the lifetime access.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:168\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:236\n msgid \"Block content\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:169\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:237\n msgid \"When the duration expires, the course is blocked.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:174\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:242\n msgid \"Block the course after the student finished this course.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:178\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:246\n msgid \"Allow Repurchase\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:179\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:247\n msgid \"Allow users to repurchase this course after it has been finished or blocked (Do not apply to free courses or Create Order manual).\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:183\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:251\n msgid \"Repurchase action\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:188\n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:498\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:256\n msgid \"Reset course progress\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:189\n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:499\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:257\n msgid \"Keep course progress\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:190\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:258\n msgid \"Open popup\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:201\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:268\n msgid \"Choose a difficulty level.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:208\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:275\n msgid \"Fake Students Enrolled\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:221\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:288\n msgid \"Max student\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:234\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:301\n msgid \"Re-take Course\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:235\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:302\n msgid \"The number of times a user can learn again from this course. To disable, set to 0.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:247\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:314\n msgid \"Finish button\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:248\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:315\n msgid \"Allow showing the finish button when the student has completed all items but has not passed the course assessment yet.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:252\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:319\n msgid \"Featured list\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:253\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:320\n msgid \"Add the course to the Featured List.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:257\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:324\n msgid \"Featured review\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:258\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:325\n msgid \"A good review to promote the course.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:261\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:328\n msgid \"External link\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:262\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:329\n msgid \"Normally used for offline classes. Ex: link to a contact page. Format: https:\u002F\u002Fgoogle.com\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:294\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:352\n msgid \"Enable offline course\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:295\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:353\n msgid \"When you enable the offline course feature, the system will disable certain online course functions, such as curriculum, finish button, re-take course, block content, repurchase. After checking the checkbox, make sure to click the \\\"Update\\\" button to apply the changes successfully.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:302\n-#: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:43\n-#: inc\u002Fcustom-post-types\u002Flesson.php:191\n-#: inc\u002Fcustom-post-types\u002Flesson.php:192\n-#: inc\u002Fcustom-post-types\u002Flesson.php:195\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseOfflineTemplate.php:249\n-#: inc\u002FWPGDPR\u002FExportPersonalData.php:359\n-#: templates\u002Fwidgets\u002Fcourse-info.php:25\n-msgid \"Lessons\"\n-msgstr \"\"\n-\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:303\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:361\n msgid \"Total lessons of the course.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:318\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:376\n msgid \"Delivery Type\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:319\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:377\n msgid \"How your content is conveyed to students.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:331\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:389\n msgid \"You can enter the physical address of your class or specify the meeting method (e.g., Zoom, Google Meet, etc.).\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:367\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:415\n msgid \"Regular price\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:368\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:416\n msgid \"Set a regular price (\u003Cstrong>%s\u003C\u002Fstrong>). Leave it blank for \u003Cstrong>Free\u003C\u002Fstrong>.\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:385\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:433\n msgid \"Sale price\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:386\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:434\n msgid \"Schedule\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:403\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:451\n msgid \"Sale start dates\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:408\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:456\n msgctxt \"placeholder\"\n msgid \"From&hellip;\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:416\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:464\n msgid \"Sale end dates\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:421\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:469\n msgctxt \"placeholder\"\n msgid \"To&hellip;\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:430\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:478\n msgid \"Price prefix\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:431\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:479\n msgid \"Show additional information placed before the price such as: Only, From, Up to...\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:435\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:483\n msgid \"Price Suffix\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:436\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:484\n msgid \"Show additional information placed after the price such as: Included Tax, Per Hour, (Per Week)...\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:440\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:488\n msgid \"There is no enrollment requirement\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:441\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:489\n msgid \"Students can see the content of all course items and take the quiz without logging in.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:532\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:534\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:580\n msgid \"The method of evaluating a student's performance in a course.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:535\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:537\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:583\n msgid \"Note: changing the evaluation type will affect the assessment results of student learning.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:539\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:541\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:587\n msgid \"\u003Cbr \u002F>\u003Cstrong>Note! \u003C\u002Fstrong>There is no final quiz in the course. Please add a final quiz.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:561\n-#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:81\n-#, php-format\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:577\n+#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:88\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:617\n msgid \"Edit: %s\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:572\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:588\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:628\n msgid \"Evaluation\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:580\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:596\n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fquiz\u002Fsettings.php:35\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:636\n msgid \"Passing Grade(%)\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:581\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:597\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:637\n msgid \"The conditions that must be achieved to finish the course.\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:607\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:187\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:276\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:218\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:522\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:623\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:200\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:292\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:255\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:559\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:663\n msgid \"Target Audience\"\n msgstr \"\"\n \n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:612\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fcourse\u002Fsettings.php:628\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditSettingTemplate.php:668\n msgid \"Key Features\"\n msgstr \"\"\n \n@@ -5455,7 +5704,7 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Ffile.php:85\n-#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php:374\n+#: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Flp-meta-box-functions.php:404\n msgid \"+ Add media\"\n msgstr \"\"\n \n@@ -5464,12 +5713,10 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php:63\n-#, php-format\n-msgid \"Maximum amount of files you can upload more: %d files (maximum file size is %s MB)\"\n+msgid \"Maximum amount of files you can upload more: %1$d files (maximum file size is %2$s MB)\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Ffields\u002Fmaterials.php:72\n-#, php-format\n msgid \"And allow upload only these types: %s.\"\n msgstr \"\"\n \n@@ -5533,6 +5780,9 @@\n #: inc\u002Fcustom-post-types\u002Flesson.php:165\n #: inc\u002Fcustom-post-types\u002Flesson.php:264\n #: inc\u002Flp-template-functions.php:1101\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:170\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:213\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:195\n #: templates\u002Floop\u002Fsingle-course\u002Floop-section-item.php:37\n #: templates\u002Fsingle-course\u002Fsection\u002Fitem-meta.php:32\n msgid \"Preview\"\n@@ -5561,6 +5811,9 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Factions.php:32\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:211\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:172\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:172\n msgid \"Move to Trash\"\n msgstr \"\"\n \n@@ -5620,7 +5873,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Forder\u002Fdetails.php:28\n-#, php-format\n msgid \"Order %s\"\n msgstr \"\"\n \n@@ -5781,6 +6033,7 @@\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:535\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:606\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:670\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:328\n msgid \"Answers\"\n msgstr \"\"\n \n@@ -5859,6 +6112,9 @@\n \n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Feditor.php:49\n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fcourse\u002Fhtml-user.php:31\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:214\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:196\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:195\n #: templates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php:34\n msgid \"Actions\"\n msgstr \"\"\n@@ -5881,6 +6137,13 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fquiz\u002Fquestion-actions.php:28\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:210\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:448\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:332\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:171\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:321\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:171\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:318\n msgid \"Duplicate\"\n msgstr \"\"\n \n@@ -5924,6 +6187,13 @@\n msgid \"Consumer Key\"\n msgstr \"\"\n \n+#: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:73\n+#: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:78\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:379\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:369\n+msgid \"Copy\"\n+msgstr \"\"\n+\n #: inc\u002Fadmin\u002Fviews\u002Fsettings\u002Fmcp-api-keys-form.php:76\n msgid \"Consumer Secret\"\n msgstr \"\"\n@@ -5943,7 +6213,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Ffooter.php:17\n-#, php-format\n msgid \"LearnPress %s. Designed by @ThimPress.\"\n msgstr \"\"\n \n@@ -6037,7 +6306,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fsetup\u002Fsteps\u002Fpages.php:17\n-#, php-format\n msgid \"If you are not sure, click \u003Ca href=\\\"%s\\\" id=\\\"create-pages\\\">here\u003C\u002Fa> to create pages automatically.\"\n msgstr \"\"\n \n@@ -6117,6 +6385,8 @@\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php:13\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:12\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php:13\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:327\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:361\n msgid \"This month\"\n msgstr \"\"\n \n@@ -6131,11 +6401,14 @@\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Forders.php:15\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:14\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fusers.php:15\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:329\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:362\n msgid \"This year\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:27\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:34\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:210\n #: templates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php:45\n msgid \"Total Courses\"\n msgstr \"\"\n@@ -6143,10 +6416,12 @@\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:31\n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:57\n #: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php:141\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:216\n msgid \"Published Courses\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Fcourses.php:35\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:222\n msgid \"Pending Courses\"\n msgstr \"\"\n \n@@ -6193,10 +6468,12 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:38\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:238\n msgid \"Total Instructors\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fstatistics\u002Foverview.php:42\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:228\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:358\n #: templates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php:49\n msgid \"Total Students\"\n@@ -6227,7 +6504,7 @@\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:251\n #: inc\u002Ftemplates\u002Fclass-lp-template-profile.php:160\n #: inc\u002Fuser-item\u002Fclass-lp-user-item.php:691\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:814\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:828\n msgid \"Finished\"\n msgstr \"\"\n \n@@ -6498,7 +6775,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php:30\n-#, php-format\n msgid \"Override Templates (%s)\"\n msgstr \"\"\n \n@@ -6507,17 +6783,14 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php:42\n-#, php-format\n msgid \"All (%d)\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php:50\n-#, php-format\n msgid \"Outdated (%d)\"\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Ftools\u002Fhtml-template.php:52\n-#, php-format\n msgid \"Unversioned (%d)\"\n msgstr \"\"\n \n@@ -6547,7 +6820,6 @@\n msgstr \"\"\n \n #: inc\u002Fadmin\u002Fviews\u002Fuser\u002Fcourse-progress.php:30\n-#, php-format\n msgid \"%1$d of %2$d items\"\n msgstr \"\"\n \n@@ -6563,16 +6835,17 @@\n \n #: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:40\n #: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:67\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:218\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:266\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:349\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:433\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:109\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:232\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:280\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:363\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:447\n #: inc\u002FAjax\u002FExportOrderCSVAjax.php:35\n msgid \"You do not have permission to perform this action.\"\n msgstr \"\"\n \n #: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:49\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:248\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:262\n msgid \"Generate prompt successfully!\"\n msgstr \"\"\n \n@@ -6581,154 +6854,529 @@\n msgstr \"\"\n \n #: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:91\n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:327\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:341\n msgid \"Generate course successfully!\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:110\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:117\n msgid \"Invalid data to create course!\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:198\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:212\n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:450\n msgid \"Redirecting...\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:200\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:214\n msgid \"Create Course Successfully! Redirecting to course detail...\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:289\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:303\n msgid \"Error: No data was generated. The requested data may be large, increase the Max Tokens in settings and try again.\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:401\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:415\n msgid \"Apply Image\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:410\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:424\n msgid \"Generate image successfully!\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:447\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:461\n msgid \"Invalid post ID.\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:467\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:481\n msgid \"No image data provided.\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:491\n+#: inc\u002FAjax\u002FAI\u002FOpenAiAjax.php:505\n msgid \"Apply image successfully!\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:63\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:109\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:148\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:189\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:231\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:283\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:342\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:392\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:438\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:494\n-#: inc\u002FModels\u002FCoursePostModel.php:193\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:48\n+msgid \"You are not allowed to edit courses\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:94\n+msgid \"Invalid user.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:98\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:321\n+msgid \"Course title is required.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:110\n+msgid \"Invalid course status.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:210\n+msgid \"Create course successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:211\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:471\n+msgid \"Update course successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:244\n+msgid \"Invalid request.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:260\n+msgid \"Duplicate course successfully. Redirecting...!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:269\n+msgid \"Update course status successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:276\n+msgid \"Restore course successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:281\n+msgid \"Course must be trashed before deleting.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCBEditCourseAjax.php:284\n+msgid \"Delete course successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:327\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:961\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1019\n+msgid \"You are not allowed to create courses\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:355\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:398\n+msgid \"Password is required for password protected visibility.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:369\n+msgid \"Failed to load course model\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:379\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:529\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:958\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1016\n+msgid \"You are not allowed to update this course\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:471\n+msgid \"Insert course successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:475\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:184\n+msgid \"Submit for Review\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:522\n+msgid \"Course not found. Please save the course first.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:545\n+msgid \"Settings saved successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:832\n+msgid \"You are not allowed to duplicate this course\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:866\n+msgid \"Course duplicated successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:889\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:894\n+msgid \"You are not allowed to delete this course\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:899\n+msgid \"Course has been deleted\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:910\n+msgid \"Course cannot be moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:913\n+msgid \"Course has been moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:921\n+msgid \"Course cannot be moved to trash\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:934\n+msgid \"Course moved to trash\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:965\n+msgid \"You are not allowed to create categories\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:998\n+msgid \"Insert category successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1023\n+msgid \"You are not allowed to create tags\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1036\n+msgid \"Insert term successfully!\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1059\n+msgid \"You are not allowed to duplicate this lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1077\n+msgid \"Lesson duplicated successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1119\n+msgid \"You are not allowed to create lessons\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1144\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1283\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:58\n+msgid \"Lesson not found\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1156\n+msgid \"You are not allowed to update this lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1223\n+msgid \"Lesson saved as draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1224\n+msgid \"Insert lesson successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1224\n+msgid \"Update lesson successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1287\n+msgid \"You are not allowed to delete this lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1299\n+msgid \"Cannot move this lesson to trash\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1311\n+msgid \"This lesson has been moved to trash.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1315\n+msgid \"Lesson must be trashed before deleting.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1321\n+msgid \"Cannot delete this lesson.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1323\n+msgid \"Delete this lesson successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1339\n+msgid \"Lesson cannot be moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1342\n+msgid \"Lesson cannot be moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1350\n+msgid \"Lesson has been moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1351\n+msgid \"Lesson has been moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1353\n+msgid \"Invalid lesson status transition\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1500\n+msgid \"You are not allowed to create quizzes\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1525\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1704\n+#: inc\u002FAjax\u002FEditQuizAjax.php:47\n+#: inc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php:175\n+#: inc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php:211\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:102\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:402\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:64\n+msgid \"Quiz not found\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1537\n+msgid \"You are not allowed to update this quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1609\n+msgid \"Quiz saved as draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1610\n+msgid \"Insert quiz successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1610\n+msgid \"Update quiz successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1665\n+msgid \"You are not allowed to duplicate this quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1681\n+msgid \"Quiz duplicated successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1708\n+msgid \"You are not allowed to delete this quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1720\n+msgid \"Cannot move this quiz to trash\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1732\n+msgid \"This quiz has been moved to trash.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1736\n+msgid \"Quiz must be trashed before deleting.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1742\n+msgid \"Cannot delete this quiz.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1744\n+msgid \"Delete this quiz successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1760\n+msgid \"Quiz cannot be moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1763\n+msgid \"Quiz cannot be moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1771\n+msgid \"Quiz has been moved to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1772\n+msgid \"Quiz has been moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1774\n+msgid \"Invalid quiz status transition\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1828\n+msgid \"You are not allowed to duplicate this question\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1844\n+msgid \"Question duplicated successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1876\n+msgid \"You are not allowed to create questions\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1899\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1999\n+#: inc\u002FAjax\u002FEditQuestionAjax.php:47\n+#: inc\u002FAjax\u002FEditQuestionAjax.php:76\n+#: inc\u002FAjax\u002FEditQuestionAjax.php:209\n+#: inc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php:226\n+#: inc\u002FModels\u002FQuizPostModel.php:323\n+#: inc\u002FModels\u002FQuizPostModel.php:383\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:92\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:64\n+msgid \"Question not found\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1909\n+msgid \"You are not allowed to update this question\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1964\n+msgid \"Question saved as draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1965\n+msgid \"Insert question successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:1965\n+msgid \"Update question successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2003\n+msgid \"You are not allowed to delete this question\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2010\n+msgid \"Cannot move this question to trash\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2012\n+msgid \"This question has been moved to trash.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2016\n+msgid \"Question must be trashed before deleting.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2022\n+msgid \"Cannot delete this question.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2024\n+msgid \"Delete this question successfully\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2035\n+msgid \"Question cannot be moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2038\n+msgid \"Question has been moved to publish\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2048\n+msgid \"Question cannot be restored to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2051\n+msgid \"Question has been restored to draft\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FCourseBuilder\u002FCourseBuilderAjax.php:2247\n+msgid \"Course Builder settings updated.\"\n+msgstr \"\"\n+\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:60\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:106\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:145\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:186\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:228\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:280\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:345\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:395\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:441\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:497\n+#: inc\u002FModels\u002FCoursePostModel.php:197\n #: inc\u002FModels\u002FCourseSectionModel.php:231\n #: inc\u002FModels\u002FCourseSectionModel.php:296\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:90\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:593\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:105\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:626\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:75\n msgid \"Course not found\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:68\n-#: inc\u002FModels\u002FCoursePostModel.php:136\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:310\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:366\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:65\n+#: inc\u002FModels\u002FCoursePostModel.php:140\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:326\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:382\n msgid \"Section title is required\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:82\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:79\n msgid \"Section added successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:114\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:153\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:236\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:288\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:347\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:443\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:111\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:150\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:233\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:285\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:350\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:446\n msgid \"Section not found\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:122\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:159\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:200\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:119\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:156\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:197\n msgid \"Section updated successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:184\n-#: inc\u002FModels\u002FCoursePostModel.php:187\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:181\n+#: inc\u002FModels\u002FCoursePostModel.php:191\n msgid \"Invalid section position\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:253\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:250\n msgid \"Item added to section successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:293\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:290\n msgid \"No items were added to the section\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:314\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:317\n msgid \"Items added to section successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:353\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:448\n-#: inc\u002FModels\u002FCoursePostModel.php:237\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:356\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:451\n+#: inc\u002FModels\u002FCoursePostModel.php:241\n msgid \"Item not found in section\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:361\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:364\n msgid \"Item deleted from section successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:399\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:402\n msgid \"Item position updated successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:433\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:436\n #: inc\u002FModels\u002FCourseSectionModel.php:241\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:448\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:516\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:481\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:549\n msgid \"Item title is required\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:456\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:506\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:459\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:509\n #: inc\u002FTemplateHooks\u002FCourse\u002FCourseMaterialTemplate.php:63\n msgid \"Item not found\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:466\n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:516\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:469\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:519\n msgid \"Item updated successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditCurriculumAjax.php:498\n+#: inc\u002FAjax\u002FEditCurriculumAjax.php:501\n msgid \"Only lesson can be set preview\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditQuestionAjax.php:47\n-#: inc\u002FAjax\u002FEditQuestionAjax.php:76\n-#: inc\u002FAjax\u002FEditQuestionAjax.php:209\n-#: inc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php:226\n-#: inc\u002FModels\u002FQuizPostModel.php:323\n-#: inc\u002FModels\u002FQuizPostModel.php:383\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQuestionTemplate.php:92\n-msgid \"Question not found\"\n-msgstr \"\"\n-\n #: inc\u002FAjax\u002FEditQuestionAjax.php:81\n #: inc\u002FModels\u002FQuizPostModel.php:242\n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:320\n@@ -6777,14 +7425,6 @@\n msgid \"Question answer deleted successfully\"\n msgstr \"\"\n \n-#: inc\u002FAjax\u002FEditQuizAjax.php:47\n-#: inc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php:175\n-#: inc\u002FModels\u002FQuiz\u002FQuizQuestionModel.php:211\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:102\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:402\n-msgid \"Quiz not found\"\n-msgstr \"\"\n-\n #: inc\u002FAjax\u002FEditQuizAjax.php:80\n #: inc\u002FAjax\u002FEditQuizAjax.php:114\n msgid \"Question added successfully\"\n@@ -6813,9 +7453,9 @@\n #: inc\u002Fcustom-post-types\u002Forder.php:558\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseStudentBlockType.php:79\n #: inc\u002FModels\u002FWPTables\u002FCoursesTable.php:49\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:344\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:389\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:526\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:328\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:373\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:510\n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:788\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:202\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:496\n@@ -6843,7 +7483,14 @@\n #: inc\u002FAjax\u002FExportOrderCSVAjax.php:69\n #: inc\u002Fcustom-post-types\u002Forder.php:562\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1628\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:542\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:526\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1102\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:145\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:212\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:588\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:194\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:582\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:194\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:256\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:561\n #: templates\u002Fcheckout\u002Forder-received.php:84\n@@ -6866,7 +7513,6 @@\n msgstr \"\"\n \n #: inc\u002FAjax\u002FExportOrderCSVAjax.php:174\n-#, php-format\n msgid \"User #%d (Deleted)\"\n msgstr \"\"\n \n@@ -6884,6 +7530,8 @@\n \n #: inc\u002FAjax\u002FLessonAjax.php:46\n #: inc\u002Fclass-lp-checkout.php:477\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:358\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:378\n msgid \"Course is invalid!\"\n msgstr \"\"\n \n@@ -6897,7 +7545,6 @@\n msgstr \"\"\n \n #: inc\u002FAjax\u002FLessonAjax.php:77\n-#, php-format\n msgid \"Congrats! You have completed \\\"%s\\\".\"\n msgstr \"\"\n \n@@ -6956,7 +7603,6 @@\n msgstr \"\"\n \n #: inc\u002Fclass-lp-ajax.php:100\n-#, php-format\n msgid \"The order %s has been successfully recovered.\"\n msgstr \"\"\n \n@@ -6984,24 +7630,26 @@\n msgid \"Course has been finished successfully.\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-assets.php:137\n+#: inc\u002Fclass-lp-assets.php:169\n msgid \"Redirecting\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-assets.php:138\n+#: inc\u002Fclass-lp-assets.php:170\n msgid \"Invalid field\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-assets.php:139\n+#: inc\u002Fclass-lp-assets.php:171\n msgid \"Unknown error\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-assets.php:140\n+#: inc\u002Fclass-lp-assets.php:172\n #: templates\u002Fcheckout\u002Fpayment.php:70\n msgid \"Place order\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-assets.php:144\n+#: inc\u002Fclass-lp-assets.php:176\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:998\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:169\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:170\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:266\n #: templates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php:25\n@@ -7013,23 +7661,19 @@\n msgstr \"\"\n \n #: inc\u002Fclass-lp-breadcrumb.php:228\n-#, php-format\n msgid \"Courses tagged &ldquo;%s&rdquo;\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-breadcrumb.php:286\n-#, php-format\n msgid \"Posts tagged &ldquo;%s&rdquo;\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-breadcrumb.php:364\n-#, php-format\n msgid \"Author: %s\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-breadcrumb.php:396\n #: inc\u002Fclass-lp-breadcrumb.php:400\n-#, php-format\n msgid \"Search results for &ldquo;%s&rdquo;\"\n msgstr \"\"\n \n@@ -7046,7 +7690,6 @@\n msgstr \"\"\n \n #: inc\u002Fclass-lp-checkout.php:306\n-#, php-format\n msgid \"Error %d: Unable to add item to order. Please try again.\"\n msgstr \"\"\n \n@@ -7070,64 +7713,56 @@\n #: inc\u002Fclass-lp-datetime.php:119\n #: inc\u002Fcustom-post-types\u002Forder.php:630\n #: inc\u002Forder\u002Fclass-lp-order.php:149\n-#, php-format\n msgid \"%s ago\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:305\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:330\n msgid \"%s Second\"\n msgid_plural \"%s Seconds\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:311\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:336\n msgid \"%s Minute\"\n msgid_plural \"%s Minutes\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:317\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:342\n msgid \"%s Hour\"\n msgid_plural \"%s Hours\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:323\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:348\n msgid \"%s Day\"\n msgid_plural \"%s Days\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:329\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:354\n msgid \"%s Week\"\n msgid_plural \"%s Weeks\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:335\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:360\n msgid \"%s Month\"\n msgid_plural \"%s Months\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:341\n-#, php-format\n+#: inc\u002Fclass-lp-datetime.php:366\n msgid \"%s Year\"\n msgid_plural \"%s Years\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:364\n+#: inc\u002Fclass-lp-datetime.php:389\n msgid \"Timezone: UTC\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-datetime.php:366\n+#: inc\u002Fclass-lp-datetime.php:391\n msgid \"Timezone:\"\n msgstr \"\"\n \n@@ -7272,7 +7907,7 @@\n msgid \"Update failed!\"\n msgstr \"\"\n \n-#: inc\u002Fclass-lp-page-controller.php:233\n+#: inc\u002Fclass-lp-page-controller.php:238\n #: inc\u002Flp-template-functions.php:313\n msgid \"Course Search Results\"\n msgstr \"\"\n@@ -7303,27 +7938,22 @@\n msgstr \"\"\n \n #: inc\u002Fclass-lp-strings.php:24\n-#, php-format\n msgid \"Do you want to redo the quiz \\\"%s\\\"?\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-strings.php:25\n-#, php-format\n msgid \"Do you want to complete the quiz \\\"%s\\\"?\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-strings.php:26\n-#, php-format\n msgid \"Do you want to complete the lesson \\\"%s\\\"?\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-strings.php:27\n-#, php-format\n msgid \"Do you want to finish the course \\\"%s\\\"?\"\n msgstr \"\"\n \n #: inc\u002Fclass-lp-strings.php:28\n-#, php-format\n msgid \"Do you want to retake the course \\\"%s\\\"?\"\n msgstr \"\"\n \n@@ -7336,12 +7966,10 @@\n #: inc\u002Fcourse\u002Fabstract-course.php:813\n #: inc\u002Flesson\u002Fclass-lp-lesson.php:104\n #: inc\u002Fquiz\u002Fclass-lp-quiz.php:651\n-#, php-format\n msgid \"The function %s doesn't exist\"\n msgstr \"\"\n \n #: inc\u002Fcourse\u002Fabstract-course.php:1344\n-#, php-format\n msgid \"This course will end within the next %s\"\n msgstr \"\"\n \n@@ -7409,21 +8037,28 @@\n msgid \"Require\"\n msgstr \"\"\n \n+#: inc\u002FCourseBuilder\u002FCourseBuilder.php:218\n+msgid \"New\"\n+msgstr \"\"\n+\n+#: inc\u002FCourseBuilder\u002FCourseBuilder.php:222\n+msgid \"Edit \\\"%1$s\\\" - %2$s\"\n+msgstr \"\"\n+\n #: inc\u002Fcurds\u002Fclass-lp-course-curd.php:27\n msgid \"The course does not exist.\"\n msgstr \"\"\n \n #: inc\u002Fcurds\u002Fclass-lp-lesson-curd.php:35\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:160\n msgid \"New Lesson\"\n msgstr \"\"\n \n #: inc\u002Fcurds\u002Fclass-lp-lesson-curd.php:139\n-#, php-format\n msgid \"Invalid lesson with ID \\\"%d\\\".\"\n msgstr \"\"\n \n #: inc\u002Fcurds\u002Fclass-lp-order-curd.php:478\n-#, php-format\n msgid \"Invalid order with ID \\\"%d\\\".\"\n msgstr \"\"\n \n@@ -7453,7 +8088,6 @@\n msgstr \"\"\n \n #: inc\u002Fcurds\u002Fclass-lp-question-curd.php:283\n-#, php-format\n msgid \"Invalid question with ID \\\"%d\\\".\"\n msgstr \"\"\n \n@@ -7463,7 +8097,6 @@\n msgstr \"\"\n \n #: inc\u002Fcurds\u002Fclass-lp-quiz-curd.php:43\n-#, php-format\n msgid \"Invalid quiz with ID \\\"%d\\\".\"\n msgstr \"\"\n \n@@ -7485,7 +8118,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fabstract.php:983\n-#, php-format\n msgid \"Course (%1$d %2$s)\"\n msgid_plural \"Course (%1$d %2$s)\"\n msgstr[0] \"\"\n@@ -7510,7 +8142,6 @@\n \n #. translators: %s: date and time of the revision\n #: inc\u002Fcustom-post-types\u002Fabstract.php:1106\n-#, php-format\n msgid \"The lesson has been restored to revision from %s\"\n msgstr \"\"\n \n@@ -7527,7 +8158,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fabstract.php:1111\n-#, php-format\n msgid \"scheduled for: \u003Cstrong>%1$s\u003C\u002Fstrong>.\"\n msgstr \"\"\n \n@@ -7566,6 +8196,9 @@\n #: inc\u002Fcustom-post-types\u002Flesson.php:197\n #: inc\u002Fcustom-post-types\u002Forder.php:674\n #: inc\u002Fcustom-post-types\u002Fquestion.php:213\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:792\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:875\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:561\n msgid \"Add New\"\n msgstr \"\"\n \n@@ -7582,7 +8215,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fcourse.php:60\n-#, php-format\n msgid \"You have not had any courses yet. Click \u003Ca href=\\\"%s\\\">Add new\u003C\u002Fa> to start\"\n msgstr \"\"\n \n@@ -7667,6 +8299,7 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Flesson.php:198\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:160\n msgid \"Edit Lesson\"\n msgstr \"\"\n \n@@ -7693,6 +8326,12 @@\n #: inc\u002Fcustom-post-types\u002Flesson.php:337\n #: inc\u002Fcustom-post-types\u002Fquestion.php:485\n #: inc\u002Fcustom-post-types\u002Fquiz.php:446\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:305\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:286\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:366\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:284\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:410\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:280\n msgid \"Assigned\"\n msgstr \"\"\n \n@@ -7701,7 +8340,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Forder.php:648\n-#, php-format\n msgid \"Pay via \u003Cstrong>%s\u003C\u002Fstrong>\"\n msgstr \"\"\n \n@@ -7791,6 +8429,7 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fquestion.php:214\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:275\n msgid \"Edit Question\"\n msgstr \"\"\n \n@@ -7803,6 +8442,7 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fquestion.php:217\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:137\n msgid \"No questions found\"\n msgstr \"\"\n \n@@ -7819,6 +8459,7 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fquiz.php:91\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:221\n msgid \"Edit Quiz\"\n msgstr \"\"\n \n@@ -7835,7 +8476,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fquiz.php:97\n-#, php-format\n msgid \"You haven't had any quizzes yet. Click \u003Ca href=\\\"%s\\\">Add new\u003C\u002Fa> to start\"\n msgstr \"\"\n \n@@ -7852,7 +8492,6 @@\n msgstr \"\"\n \n #: inc\u002Fcustom-post-types\u002Fquiz.php:294\n-#, php-format\n msgid \"%d question\"\n msgid_plural \"%d questions\"\n msgstr[0] \"\"\n@@ -8310,7 +8949,6 @@\n msgstr \"\"\n \n #: inc\u002Fgateways\u002Fclass-lp-gateway-abstract.php:227\n-#, php-format\n msgid \"%s has been deprecated. Please use % instead of.\"\n msgstr \"\"\n \n@@ -8358,6 +8996,7 @@\n #: inc\u002FGutenberg\u002FBlocks\u002FCourses\u002FCourseItemTemplateBlock.php:61\n #: inc\u002FShortcodes\u002FCourses\u002FListCoursesShortcode.php:64\n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:108\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:202\n msgid \"No courses found\"\n msgstr \"\"\n \n@@ -8373,6 +9012,8 @@\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseCategoriesBlockType.php:68\n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:291\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:94\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:378\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:494\n msgid \"in\"\n msgstr \"\"\n \n@@ -8384,6 +9025,8 @@\n #: inc\u002FGutenberg\u002FBlocks\u002FSingleCourseElements\u002FCourseInstructorBlockType.php:61\n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:308\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:126\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:416\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:513\n msgid \"by\"\n msgstr \"\"\n \n@@ -8444,7 +9087,6 @@\n msgstr \"\"\n \n #: inc\u002FHelpers\u002FTemplate.php:141\n-#, php-format\n msgid \"Path file %s not exists\"\n msgstr \"\"\n \n@@ -8576,6 +9218,7 @@\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-lessons-v1-controller.php:325\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-quiz-v1-controller.php:372\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:650\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:244\n #: inc\u002FWPGDPR\u002FExportPersonalData.php:385\n #: templates\u002Fsingle-course\u002Fsidebar\u002Fuser-time.php:42\n msgid \"Lifetime\"\n@@ -8600,31 +9243,26 @@\n #. translators: %s: post type\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:679\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php:148\n-#, php-format\n msgid \"Cannot create existing %s.\"\n msgstr \"\"\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1125\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php:160\n-#, php-format\n msgid \"%s days\"\n msgstr \"\"\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1126\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php:161\n-#, php-format\n msgid \"%s hours\"\n msgstr \"\"\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1127\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php:162\n-#, php-format\n msgid \"%s mins\"\n msgstr \"\"\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-courses-v1-controller.php:1128\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php:163\n-#, php-format\n msgid \"%s secs\"\n msgstr \"\"\n \n@@ -8959,7 +9597,6 @@\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php:14\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-posts-controller.php:475\n-#, php-format\n msgid \"The method '%s' not implemented. It must be overridden in the subclass.\"\n msgstr \"\"\n \n@@ -9123,7 +9760,7 @@\n \n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-section-items-v1-controller.php:44\n #: inc\u002Fjwt\u002Frest-api\u002Fversion1\u002Fclass-lp-rest-sections-v1-controller.php:40\n-#: inc\u002FModels\u002FCourseModel.php:1044\n+#: inc\u002FModels\u002FCourseModel.php:1055\n #: inc\u002Fuser\u002Fclass-lp-user.php:295\n msgid \"The course is not public\"\n msgstr \"\"\n@@ -9238,7 +9875,6 @@\n \n #: inc\u002Flp-core-functions.php:986\n #: inc\u002Flp-template-functions.php:1496\n-#, php-format\n msgid \"%s week\"\n msgid_plural \"%s weeks\"\n msgstr[0] \"\"\n@@ -9246,7 +9882,6 @@\n \n #: inc\u002Flp-core-functions.php:990\n #: inc\u002Flp-template-functions.php:1492\n-#, php-format\n msgid \"%s day\"\n msgid_plural \"%s days\"\n msgstr[0] \"\"\n@@ -9254,7 +9889,6 @@\n \n #: inc\u002Flp-core-functions.php:995\n #: inc\u002Flp-template-functions.php:1487\n-#, php-format\n msgid \"%s hour\"\n msgid_plural \"%s hours\"\n msgstr[0] \"\"\n@@ -9262,7 +9896,6 @@\n \n #: inc\u002Flp-core-functions.php:999\n #: inc\u002Flp-template-functions.php:1481\n-#, php-format\n msgid \"%s minute\"\n msgid_plural \"%s minutes\"\n msgstr[0] \"\"\n@@ -9301,6 +9934,11 @@\n msgstr \"\"\n \n #: inc\u002Flp-core-functions.php:2162\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1170\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1193\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:524\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:653\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:41\n msgid \"Loading...\"\n msgstr \"\"\n \n@@ -9353,7 +9991,7 @@\n msgstr \"\"\n \n #: inc\u002Flp-core-functions.php:2217\n-#: inc\u002FModels\u002FCourseModel.php:563\n+#: inc\u002FModels\u002FCourseModel.php:574\n msgid \"Evaluate via questions\"\n msgstr \"\"\n \n@@ -9397,7 +10035,6 @@\n msgstr \"\"\n \n #: inc\u002Flp-webhooks.php:85\n-#, php-format\n msgid \"LearnPress webhook %s process completed\"\n msgstr \"\"\n \n@@ -9483,13 +10120,11 @@\n \n #. translators: %s: capability.\n #: inc\u002FMCP\u002FAbilities.php:379\n-#, php-format\n msgid \"Current user does not have required base capability: %s.\"\n msgstr \"\"\n \n #. translators: 1: required scope, 2: granted scope.\n #: inc\u002FMCP\u002FAbilities.php:400\n-#, php-format\n msgid \"API key scope is insufficient. Required: %1$s. Granted: %2$s.\"\n msgstr \"\"\n \n@@ -9550,7 +10185,6 @@\n msgstr \"\"\n \n #: inc\u002FMCP\u002FConcerns\u002FAbilityHelpers.php:36\n-#, php-format\n msgid \"Invalid input for ability \\\"%s\\\". Input must be an object.\"\n msgstr \"\"\n \n@@ -9558,100 +10192,100 @@\n msgid \"An internal LearnPress MCP error occurred.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:551\n+#: inc\u002FModels\u002FCourseModel.php:562\n msgid \"Evaluate via completed lessons\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:552\n+#: inc\u002FModels\u002FCourseModel.php:563\n msgid \"Course will be completed when all lessons are completed.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:555\n+#: inc\u002FModels\u002FCourseModel.php:566\n msgid \"Evaluate via final quiz\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:556\n+#: inc\u002FModels\u002FCourseModel.php:567\n msgid \"Course will be completed when the final quiz is passed.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:559\n+#: inc\u002FModels\u002FCourseModel.php:570\n msgid \"Evaluate via quizzes\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:560\n+#: inc\u002FModels\u002FCourseModel.php:571\n msgid \"Course will be completed when all quizzes are passed.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:564\n+#: inc\u002FModels\u002FCourseModel.php:575\n msgid \"Course will be completed when all questions are answered correctly.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:567\n+#: inc\u002FModels\u002FCourseModel.php:578\n msgid \"Evaluate via marks\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:568\n+#: inc\u002FModels\u002FCourseModel.php:579\n msgid \"Course will be completed when the passing mark is achieved.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1054\n+#: inc\u002FModels\u002FCourseModel.php:1065\n #: inc\u002Fuser\u002Fclass-lp-user.php:318\n msgid \"Course can retake.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1061\n+#: inc\u002FModels\u002FCourseModel.php:1072\n #: inc\u002Fuser\u002Fclass-lp-user.php:306\n msgid \"The course is full of students.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1068\n+#: inc\u002FModels\u002FCourseModel.php:1079\n msgid \"This course is already enrolled!\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1071\n+#: inc\u002FModels\u002FCourseModel.php:1082\n msgid \"The course is finished.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1079\n-#: inc\u002FModels\u002FCourseModel.php:1181\n+#: inc\u002FModels\u002FCourseModel.php:1090\n+#: inc\u002FModels\u002FCourseModel.php:1192\n #: inc\u002Fuser\u002Fclass-lp-user.php:324\n msgid \"Enrollment in the course is not mandatory. You can access course for learning now.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1093\n+#: inc\u002FModels\u002FCourseModel.php:1104\n #: inc\u002Fuser\u002Fclass-lp-user.php:313\n msgid \"The course is external\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1099\n-#: inc\u002FModels\u002FCourseModel.php:1102\n+#: inc\u002FModels\u002FCourseModel.php:1110\n+#: inc\u002FModels\u002FCourseModel.php:1113\n #: inc\u002Fuser\u002Fclass-lp-user.php:330\n msgid \"The course is not purchased.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1174\n+#: inc\u002FModels\u002FCourseModel.php:1185\n msgid \"The course is free.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1190\n+#: inc\u002FModels\u002FCourseModel.php:1201\n #: inc\u002Fuser\u002Fclass-lp-user.php:394\n msgid \"Course is purchased\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCourseModel.php:1201\n+#: inc\u002FModels\u002FCourseModel.php:1212\n #: inc\u002Fuser\u002Fclass-lp-user.php:407\n msgid \"Course is enrolled or finished\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCoursePostModel.php:182\n+#: inc\u002FModels\u002FCoursePostModel.php:186\n msgid \"You do not have permission to update course sections\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCoursePostModel.php:215\n+#: inc\u002FModels\u002FCoursePostModel.php:219\n msgid \"You do not have permission to update course items position\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FCoursePostModel.php:226\n+#: inc\u002FModels\u002FCoursePostModel.php:230\n msgid \"Invalid item position\"\n msgstr \"\"\n \n@@ -9675,18 +10309,59 @@\n msgid \"You do not have permission to delete section\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FPostModel.php:291\n-#: inc\u002FModels\u002FPostModel.php:338\n+#: inc\u002FModels\u002FPostModel.php:270\n+#: inc\u002FModels\u002FPostModel.php:321\n msgid \"You do not have permission to create item.\"\n msgstr \"\"\n \n-#: inc\u002FModels\u002FPostModel.php:314\n-#: inc\u002FModels\u002FPostModel.php:350\n-#: inc\u002FModels\u002FPostModel.php:497\n+#: inc\u002FModels\u002FPostModel.php:293\n+#: inc\u002FModels\u002FPostModel.php:333\n+#: inc\u002FModels\u002FPostModel.php:494\n #: inc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php:177\n msgid \"You do not have permission to edit this item.\"\n msgstr \"\"\n \n+#: inc\u002FModels\u002FPostModel.php:610\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1059\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1105\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:101\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:352\n+msgid \"Scheduled\"\n+msgstr \"\"\n+\n+#: inc\u002FModels\u002FPostModel.php:612\n+#: inc\u002Forder\u002Fclass-lp-order.php:293\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:105\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:452\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:337\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:326\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:323\n+msgid \"Trash\"\n+msgstr \"\"\n+\n+#: inc\u002FModels\u002FPostModel.php:614\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1066\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:102\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:451\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:577\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:571\n+msgid \"Draft\"\n+msgstr \"\"\n+\n+#: inc\u002FModels\u002FPostModel.php:616\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1089\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:104\n+msgid \"Private\"\n+msgstr \"\"\n+\n+#: inc\u002FModels\u002FPostModel.php:620\n+msgid \"Auto Draft\"\n+msgstr \"\"\n+\n+#: inc\u002FModels\u002FPostModel.php:622\n+msgid \"Protected\"\n+msgstr \"\"\n+\n #: inc\u002FModels\u002FQuestion\u002FQuestionAnswerModel.php:165\n msgid \"You do not have permission to create answer.\"\n msgstr \"\"\n@@ -9852,8 +10527,7 @@\n msgstr \"\"\n \n #. translators: 1: user slug\n-#: inc\u002FModels\u002FUserModel.php:329\n-#, php-format\n+#: inc\u002FModels\u002FUserModel.php:287\n msgid \"This user slug \\\"%s\\\" already exists.\"\n msgstr \"\"\n \n@@ -9875,10 +10549,6 @@\n msgid \"Cancelled\"\n msgstr \"\"\n \n-#: inc\u002Forder\u002Fclass-lp-order.php:293\n-msgid \"Trash\"\n-msgstr \"\"\n-\n #: inc\u002Forder\u002Fclass-lp-order.php:296\n msgid \"On hold\"\n msgstr \"\"\n@@ -9888,17 +10558,15 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Fclass-lp-order.php:456\n-#, php-format\n msgid \"%s (Guest)\"\n msgstr \"\"\n \n-#: inc\u002Forder\u002Fclass-lp-order.php:1066\n-#, php-format\n+#: inc\u002Forder\u002Fclass-lp-order.php:1067\n msgctxt \"full name\"\n msgid \"%1$s\"\n msgstr \"\"\n \n-#: inc\u002Forder\u002Fclass-lp-order.php:1146\n+#: inc\u002Forder\u002Fclass-lp-order.php:1147\n msgid \"Order on\"\n msgstr \"\"\n \n@@ -9908,7 +10576,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:290\n-#, php-format\n msgid \"Completed \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Completed \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9920,7 +10587,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:298\n-#, php-format\n msgid \"Pending Payment \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Pending Payment \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9932,7 +10598,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:306\n-#, php-format\n msgid \"Processing \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Processing \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9944,7 +10609,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:314\n-#, php-format\n msgid \"Cancelled \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Cancelled \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9956,7 +10620,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:322\n-#, php-format\n msgid \"Failed \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Failed \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9968,7 +10631,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:330\n-#, php-format\n msgid \"Trash \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgid_plural \"Trash \u003Cspan class=\\\"count\\\">(%s)\u003C\u002Fspan>\"\n msgstr[0] \"\"\n@@ -9991,7 +10653,6 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:391\n-#, php-format\n msgid \"Order number \u003Cstrong>%s\u003C\u002Fstrong> not found\"\n msgstr \"\"\n \n@@ -10004,12 +10665,10 @@\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:404\n-#, php-format\n msgid \"Order number \u003Cstrong>%s\u003C\u002Fstrong> has been cancelled\"\n msgstr \"\"\n \n #: inc\u002Forder\u002Flp-order-functions.php:407\n-#, php-format\n msgid \"The order number \u003Cstrong>%s\u003C\u002Fstrong> can not be cancelled.\"\n msgstr \"\"\n \n@@ -10045,16 +10704,16 @@\n msgid \"Congrats! You have re-taken this quiz. Please wait a moment and the page will reload\"\n msgstr \"\"\n \n-#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:50\n+#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:51\n msgid \"No Course ID available!\"\n msgstr \"\"\n \n-#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:56\n+#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:57\n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-profile-controller.php:428\n msgid \"No Course available!\"\n msgstr \"\"\n \n-#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:88\n+#: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-course-controller.php:95\n msgid \"No Quiz in this course!\"\n msgstr \"\"\n \n@@ -10075,6 +10734,7 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Fadmin\u002Fclass-lp-admin-rest-statistics-controller.php:78\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:355\n msgid \"Net sales\"\n msgstr \"\"\n \n@@ -10147,13 +10807,11 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:294\n-#, php-format\n msgid \"Showing last course of %s results\"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:309\n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:487\n-#, php-format\n msgid \"Showing %1$s of %2$s results\"\n msgstr \"\"\n \n@@ -10183,7 +10841,6 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-courses-controller.php:566\n-#, php-format\n msgid \"\\\"%s\\\" has been added to your cart. Redirecting...\"\n msgstr \"\"\n \n@@ -10276,32 +10933,26 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:155\n-#, php-format\n msgid \"File \\\"%s\\\" title is not empty!\"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:160\n-#, php-format\n msgid \"File %s method is invalid!\"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:167\n-#, php-format\n msgid \"File %s size is too large!\"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:177\n-#, php-format\n msgid \"File %s type is invalid!\"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:191\n-#, php-format\n msgid \"File %s: \"\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:208\n-#, php-format\n msgid \"An error occurred while checking %1$s. %2$s\"\n msgstr \"\"\n \n@@ -10310,7 +10961,6 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-material-controller.php:234\n-#, php-format\n msgid \"Cannot save file %s\"\n msgstr \"\"\n \n@@ -10516,7 +11166,6 @@\n msgstr \"\"\n \n #: inc\u002Frest-api\u002Fv1\u002Ffrontend\u002Fclass-lp-rest-users-controller.php:124\n-#, php-format\n msgid \"%s was not registered as a request argument.\"\n msgstr \"\"\n \n@@ -10526,7 +11175,6 @@\n msgstr \"\"\n \n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-become-a-teacher.php:75\n-#, php-format\n msgid \"Please %s to send your request!\"\n msgstr \"\"\n \n@@ -10557,20 +11205,17 @@\n \n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-login-form.php:36\n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-register-form.php:38\n-#, php-format\n msgid \"Your are logged in as %1$s. \u003Ca href=\\\"%2$s\\\">Log out\u003C\u002Fa>?\"\n msgstr \"\"\n \n #: inc\u002FShortcodes\u002Fclass-lp-shortcode-profile.php:83\n-#, php-format\n msgid \"This shortcode LP Profile only use on the page \u003Ca href=\\\"%1$s\\\">%2$s\u003C\u002Fa>\"\n msgstr \"\"\n \n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:154\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:142\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:155\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:256\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:158\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:171\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:272\n msgid \"\u003Cspan class=\\\"count\\\">%1$s\u003C\u002Fspan> %2$s\"\n msgstr \"\"\n \n@@ -10580,7 +11225,7 @@\n msgstr \"\"\n \n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:242\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:220\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:236\n msgid \"Drag to reorder section\"\n msgstr \"\"\n \n@@ -10615,7 +11260,7 @@\n msgstr \"\"\n \n #: inc\u002FTemplateHooks\u002FAdmin\u002FAdminEditQizTemplate.php:435\n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:639\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:672\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileOrderTemplate.php:139\n msgid \"No items found\"\n msgstr \"\"\n@@ -10705,55 +11350,55 @@\n msgid \"Match any value in a set of words. Use fill, blank, or question to match any value in the set.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:169\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:153\n msgid \"You do not have permission to view enrolled students.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:341\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:325\n msgid \"Search course...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:345\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:390\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:329\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:374\n msgid \"Enter student name or email\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:348\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:393\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:332\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:377\n msgid \"Start Date\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:352\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:336\n #: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseModernLayout.php:504\n msgid \"End date\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:363\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:408\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:347\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:392\n msgid \"Clear Filter\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:397\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:381\n msgid \"End Date\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:432\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:416\n msgid \"Loading\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:493\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:477\n msgid \"No students found.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:534\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:518\n msgid \"Enrolled Date\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:538\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:522\n msgid \"Progress\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:558\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAdminListStudentsEnrolled.php:542\n msgid \"student\"\n msgid_plural \"students\"\n msgstr[0] \"\"\n@@ -10767,579 +11412,576 @@\n msgid \"The process of generating data has been canceled.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:63\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:76\n msgid \"AI Course Builder for LearnPress\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:96\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:95\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:102\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:403\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:657\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:109\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:109\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:139\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:440\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:694\n msgid \"Previous\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:104\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:104\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:111\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:412\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:666\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:117\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:118\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:148\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:449\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:703\n msgid \"Generate Prompt\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:111\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:124\n msgid \"Generate Data Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:118\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:131\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:665\n msgid \"Create Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:133\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:135\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:436\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:146\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:172\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:473\n msgid \"Course Goal\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:137\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:141\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:139\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:440\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:150\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:157\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:176\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:477\n msgid \"AI Settings\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:141\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:154\n msgid \"Course Structure\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:145\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:145\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:143\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:444\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:698\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:158\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:161\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:180\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:481\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:735\n msgid \"Prompt\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:152\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:165\n msgid \"Create course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:167\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:180\n msgid \"Step 1 — Course Goal\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:179\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:192\n msgid \"Role \u002F Persona\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:180\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:193\n msgid \"Defines who is creating the course so AI can tailor tone, expertise, and perspective.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:197\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:286\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:228\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:532\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:210\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:302\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:265\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:569\n msgid \"Identifies who will take the course so the content matches their background and skill level.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:205\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:218\n msgid \"Course objective\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:206\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:219\n msgid \"Enter description about course you want AI generate\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:207\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:220\n msgid \"Specifies what learners should achieve after completing the course, guiding AI to generate outcome-aligned content.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:229\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:309\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:251\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:555\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:242\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:325\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:288\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:592\n msgid \"Language\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:236\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:316\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:258\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:562\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:249\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:332\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:295\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:599\n msgid \"Sets the output language for all generated course content.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:243\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:293\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:235\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:539\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:256\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:309\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:272\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:576\n msgid \"Tone\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:252\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:302\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:244\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:548\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:265\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:318\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:281\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:585\n msgid \"Controls the writing style (e.g., friendly, formal, story-telling) so the content matches your brand and audience.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:260\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:273\n msgid \"Reading level\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:267\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:280\n msgid \"Determines the complexity of language (e.g., foundational, intermediate, advanced) so the AI can generate content appropriate for the learners’ comprehension level.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:275\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:288\n msgid \"SEO emphasis\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:276\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:289\n msgid \"Determines how strongly AI should optimize content for search engines.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:284\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:297\n msgid \"Target keywords (comma-separated)\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:285\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:298\n msgid \"Lists the keywords AI should integrate to improve SEO performance across titles and descriptions.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:294\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:264\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:206\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:510\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:307\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:280\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:243\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:547\n msgid \"Step 2 — AI Settings\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:298\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:268\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:210\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:514\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:311\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:284\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:247\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:551\n msgid \"Configure content quality controls for ChatGPT output.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:316\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:206\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:329\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:222\n msgid \"Sections number\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:317\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:330\n msgid \"Defines how many main sections\u002Fmodules the course will include.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:342\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:227\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:355\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:243\n msgid \"Lessons per Section\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:363\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:241\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:376\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:257\n msgid \"Quizzes per Section\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:369\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:382\n msgid \"Questions per Quiz\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:378\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:391\n msgid \"Step 3 — Course Structure\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:382\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:395\n msgid \"Define the LearnPress Curriculum structure. The Prompt will be generated based on these controls.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:401\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:414\n msgid \"Step 4 — Prompt Generated\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:408\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:341\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:292\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:594\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:834\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:421\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:357\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:329\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:631\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:871\n msgid \"Shows the auto-generated AI prompt, allowing further adjustments before submission.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:426\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:439\n msgid \"Step 5 — Create Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:430\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:443\n msgid \"Data preview before create course.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:564\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:577\n msgid \"Creating your LearnPress course...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:569\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:582\n msgid \"Please wait while we prepare sections, lessons...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:570\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:583\n msgid \"Don't reload page when creating\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:581\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:594\n msgid \"Creating sections...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:582\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:595\n msgid \"Creating lessons...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:583\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:596\n msgid \"Creating quizzes...\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:603\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:616\n msgid \"OpenAI API is not connected\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:607\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:620\n msgid \"Connect the OpenAI API to unlock LearnPress AI features.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:614\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:627\n msgid \"Please enter your \u003Cstrong>OpenAI Secret Key\u003C\u002Fstrong> and enable the option \u003Cstrong>Enable OpenAI\u003C\u002Fstrong> option\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:616\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:629\n msgid \"here.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:618\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:631\n msgid \"\"\n-\"LearnPress AI helps you create courses, lessons, quizzes, and\\r\\n\"\n+\"LearnPress AI helps you create courses, lessons, quizzes, and\\n\"\n \"\\t\\t\\t\\t\\tlearning content faster with intelligent AI assistance.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:629\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:642\n msgid \"Need help using LearnPress AI?\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:634\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:647\n msgid \"View LearnPress AI documentation.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:644\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminCreateCourseAITemplate.php:657\n msgid \"Go to Settings\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:62\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:76\n msgid \"Generate Course Sections Curriculum\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:112\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:126\n msgid \"Generate Sections Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:119\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:133\n msgid \"Apply Sections Data To Curriculum\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:137\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:153\n msgid \"Curriculum Goal\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:164\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:180\n msgid \"Step 1 — Curriculum Goal\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:168\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:184\n msgid \"Provide the main goal for the curriculum so the system can generate aligned sections and lessons.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:177\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:476\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:193\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:513\n msgid \"Title refer\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:178\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:194\n msgid \"You can edit the course title to better suit the curriculum generation.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:179\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:478\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:195\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:515\n msgid \"The course title is automatically imported from the previous step. It will guide the AI to build a structured curriculum.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:188\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:204\n msgid \"Description refer\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:189\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:205\n msgid \"You can edit the course description to better suit the curriculum generation.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:190\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:206\n msgid \"The course description is automatically imported from the previous step. It will guide the AI to build a structured curriculum.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:197\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:742\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:213\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:779\n msgid \"Goal\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:198\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:214\n msgid \"Defines the main objective of your curriculum. This helps the AI generate course sections and lessons that align with the intended learning outcomes.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:332\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:283\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:585\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:348\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:320\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:622\n msgid \"Step 3 — Prompt Generated\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:339\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:290\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:592\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:832\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:355\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:327\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:629\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:869\n msgid \"Generated Prompt\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:356\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:307\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:609\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditCourseCurriculumWithAITemplate.php:372\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:344\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:646\n msgid \"Step 4 — Result\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:73\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:110\n msgid \"Generate Course Title\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:120\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:157\n msgid \"Generate Title Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:162\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:199\n msgid \"Step 1 — Configure Course Title\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:166\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:203\n msgid \"Provide the basic information to generate your course title.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:173\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:210\n msgid \"Describe what your course is about\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:174\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:211\n msgid \"Provide a short explanation of the subject or skills your course covers. This helps AI understand the overall direction of your title.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:181\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:218\n msgid \"Describe the main goals of your course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:182\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:219\n msgid \"Summarize what learners will achieve. AI uses this to make the title more accurate and meaningful.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:190\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:227\n msgid \"Title Length (characters)\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:191\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:228\n msgid \"Set the maximum number of characters for the generated course title. Ideal for SEO and platform display constraints.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:265\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:568\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:808\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:302\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:605\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:845\n msgid \"Outputs\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:267\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:304\n msgid \"Select how many title options the system will generate for you.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:333\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:370\n msgid \"Result %d\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:374\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:411\n msgid \"Generate Course Description\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:421\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:458\n msgid \"Generate Description Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:463\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:500\n msgid \"Step 1 — Configure Course Description\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:467\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:504\n msgid \"Provide the information needed to generate your course description.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:477\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:514\n msgid \"The title refer to generate a relevant course description. Please enter title first\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:485\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:522\n msgid \"Describe what makes this course stand out?\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:486\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:523\n msgid \"Provide the main strengths or unique selling points to help the system build a compelling course description.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:494\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:531\n msgid \"Description Length (words)\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:495\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:532\n msgid \"Set the maximum number of characters for the generated description.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:629\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:666\n msgid \"Generate Course Image\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:675\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:712\n msgid \"Generate Image Course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:694\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:731\n msgid \"Course Image config\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:720\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:757\n msgid \"Step 1 — Config Image\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:724\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:761\n msgid \"Config your image you want, data will refer course title, course description to generate image.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:733\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:770\n msgid \"Title Refer\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:734\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:771\n msgid \"The title refer to generate a relevant course image. Please enter title first\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:735\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:772\n msgid \"The current course title that will be used as reference during image generation.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:743\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:780\n msgid \"A brief description of the image you want to generate.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:760\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:797\n msgid \"Select the visual style such as modern, minimalist, illustration, 3D, etc.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:785\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:822\n msgid \"Set the output.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:793\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:830\n msgid \"Quality\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:800\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:837\n msgid \"Select the desired image quality such as standard, high, or premium.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:809\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:846\n msgid \"Number of images you want the system to generate (model dall-e-3 only 1 supported).\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:825\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:862\n msgid \"Step 2 — Prompt Generated\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:849\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:886\n msgid \"Step 3 — Result\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:853\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:890\n msgid \"Note: when applying an image, the process can be very slow (about 1 minute or more), depends on the image size. Please wait until it finishes.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:900\n-#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:921\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:937\n+#: inc\u002FTemplateHooks\u002FAdmin\u002FAI\u002FAdminEditWithAITemplate.php:958\n msgid \"Generate Course Curriculum\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:97\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:113\n msgid \"You do not have permission to edit this course\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:147\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:163\n msgid \"Sections\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:226\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:242\n msgid \"Edit section title\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:241\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:257\n msgid \"This section will be deleted. The items in this section will no longer be assigned to this course, but will not be permanently deleted.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:242\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:258\n msgid \"Delete Section\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:309\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:325\n msgid \"Update section title\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:337\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:353\n msgid \"+ Add Description\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:379\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:395\n msgid \"Add Section\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:417\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:427\n msgid \"Edit item detail\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:424\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:448\n msgid \"This item will be removed from this section. This item will no longer be assigned to this course. It will not be permanently deleted from the system.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:425\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:449\n msgid \"Remove item\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:440\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:473\n msgid \"Drag to reorder item\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:479\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:512\n msgid \"Create a new %s\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:480\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:513\n msgid \"Add %s\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:481\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:514\n msgid \"New %s\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:493\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:526\n msgid \"Content Bank\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:599\n+#: inc\u002FTemplateHooks\u002FCourse\u002FAdminEditCurriculumTemplate.php:632\n msgid \"You do not have permission view list\"\n msgstr \"\"\n \n@@ -11394,7 +12036,6 @@\n \n #: inc\u002FTemplateHooks\u002FCourse\u002FListCoursesTemplate.php:600\n #: templates\u002Fcourses-top-bar.php:33\n-#, php-format\n msgid \"Switch to %s\"\n msgstr \"\"\n \n@@ -11478,55 +12119,500 @@\n msgid \"Start Now\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1482\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1494\n msgid \"There are no items in the curriculum yet.\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1509\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1521\n msgid \"%d Section\"\n msgid_plural \"%d Sections\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1516\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1528\n msgid \"%d Lesson\"\n msgid_plural \"%d Lessons\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1726\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1738\n msgid \"%d Question\"\n msgid_plural \"%d Questions\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1911\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1923\n msgid \"Enroll Now\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1921\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1933\n msgid \"Continue Learning\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1923\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1929\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1935\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1941\n msgid \"Start Learning\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1925\n-#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1933\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1937\n+#: inc\u002FTemplateHooks\u002FCourse\u002FSingleCourseTemplate.php:1945\n msgid \"View Detail\"\n msgstr \"\"\n \n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:58\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:66\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:49\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:55\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:55\n+msgid \"Sorry, you don't have permission to access this content\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:65\n+msgid \"Sorry, you don't have permission to create this item\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:87\n+msgid \"Toggle fullscreen\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:111\n+msgid \"Saving as draft will unpublish this item from the course. Are you sure?\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:112\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:183\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:145\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:145\n+msgid \"Save Draft\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FBuilderPopupTemplate.php:182\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:80\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:69\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:69\n+msgid \"You cannot edit this item because it is in the Trash. Please restore it and try again.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:52\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:57\n+msgid \"You do not have permission to create or edit courses\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:62\n+msgid \"Invalid course ID\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:124\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:54\n+msgid \"Add New Course\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:162\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:110\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:130\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:130\n+msgid \"Edit with WordPress\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:206\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:167\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:167\n+msgid \"More actions\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:209\n+msgid \"Are you sure you want to duplicate this course?\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:353\n+msgid \"Please save Course before add Section\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:373\n+msgid \"Please save Course before setting course\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:449\n+msgid \"%d characters\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:452\n+msgid \"example\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:525\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:364\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:423\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:463\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:492\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:512\n+msgid \"Permalink\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:544\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:384\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:511\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:532\n+msgid \"your-slug\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:756\n+msgid \"Parent Category\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:774\n+msgid \"Enter Category Name\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:789\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:802\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:803\n+msgid \"Search categories\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:849\n+msgid \"No tags found.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:850\n+msgid \"No matching tags.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:859\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:860\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:872\n+msgid \"Search tags\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:878\n+msgid \"Enter Tag Name\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:970\n+msgid \"Click to upload\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:974\n+msgid \"JPG, JPEG, PNG less than 1MB\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1010\n+msgid \"Featured Image\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1067\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:103\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:450\n+msgid \"Pending Review\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1071\n+msgid \"Scheduled for\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1072\n+msgid \"Published on\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1087\n+msgid \"Public\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1091\n+msgid \"Password protected\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1113\n+msgid \"Visibility\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderEditCourseTemplate.php:1277\n+msgid \"Edit in popup\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:99\n+msgid \"All Status\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:137\n+msgid \"Search by title\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:153\n+msgid \"Items per page\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:391\n+msgid \"Last Updated on\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:445\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:342\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:331\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:328\n+msgid \"Restore\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourse\u002FBuilderListCoursesTemplate.php:446\n+msgid \"Delete permanently\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:89\n+msgid \"Sorry, you don't have permission to access Course Builder\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:275\n #: inc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php:149\n msgid \"View Profile\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php:366\n-#, php-format\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:341\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:342\n+msgid \"Toggle Sidebar\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FCourseBuilderTemplate.php:425\n+msgid \"Back to WordPress\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:245\n+msgid \"Total In-progress Students\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:328\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:360\n+msgid \"This week\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:398\n+msgid \"No instructors found\"\n+msgstr \"\"\n+\n+#. translators: %s: number of courses\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:414\n+msgid \"%s course\"\n+msgid_plural \"%s courses\"\n+msgstr[0] \"\"\n+msgstr[1] \"\"\n+\n+#. translators: %s: number of students\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:419\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:518\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:605\n+msgid \"%s student\"\n+msgid_plural \"%s students\"\n+msgstr[0] \"\"\n+msgstr[1] \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:435\n+msgid \"Top Instructors\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:479\n+msgid \"No enrollment data available\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:533\n+msgid \"Top Enrolled Courses\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:534\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:629\n+#: inc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php:408\n+#: templates\u002Forder\u002Fconfirm.php:57\n+msgid \"Total:\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:536\n+msgid \"enrolled students\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:560\n+msgid \"No sales data available\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:601\n+msgid \"Instructor:\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:609\n+msgid \"Revenue\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:613\n+msgid \"sold\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:628\n+msgid \"Top Selling Courses\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:632\n+msgid \"revenue\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:671\n+msgid \"Create Lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:681\n+msgid \"Create Quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:687\n+msgid \"Create Question\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:750\n+msgid \"Quick Action\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:801\n+msgid \"No recent courses found\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FDashboard\u002FBuilderDashboardTemplate.php:811\n+#: inc\u002FWidgets\u002Frecent-courses.php:31\n+msgid \"Recent Courses\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:40\n+msgid \"You do not have permission to create or edit lessons\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:45\n+msgid \"Invalid lesson ID\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:86\n+msgid \"Add New Lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:88\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:107\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:107\n+msgid \"scheduled\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:229\n+msgid \"Please save Lesson before setting lesson\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderEditLessonTemplate.php:324\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:426\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:472\n+msgid \"Permalink will be available after saving.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:155\n+msgid \"No lessons found\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:209\n+msgid \"Lesson Title\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:211\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:193\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:193\n+msgid \"Create Date\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:306\n+msgid \"Toggle preview\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:332\n+msgid \"Are you sure you want to duplicate this lesson?\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FLesson\u002FBuilderListLessonsTemplate.php:344\n+msgid \"Are you sure you want to delete this lesson? This action cannot be undone.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:46\n+msgid \"You do not have permission to create or edit questions\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:51\n+msgid \"Invalid question ID\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:105\n+msgid \"Add New Question\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:170\n+msgid \"Are you sure you want to duplicate this question?\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:297\n+msgid \"Please save Question before setting question\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderEditQuestionTemplate.php:466\n+msgid \"Permalink is not available for this question.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuestion\u002FBuilderListQuestionsTemplate.php:191\n+msgid \"Question Title\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:46\n+msgid \"You do not have permission to create or edit quizzes\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:51\n+msgid \"Invalid quiz ID\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:105\n+msgid \"Add New Quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:170\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:318\n+msgid \"Are you sure you want to duplicate this quiz?\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:302\n+msgid \"Please save Quiz before add question\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderEditQuizTemplate.php:334\n+msgid \"Please save Quiz before setting quiz\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:135\n+#: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:217\n+msgid \"No quizzes found\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FQuiz\u002FBuilderListQuizzesTemplate.php:189\n+msgid \"Quiz Title\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:27\n+msgid \"Only administrators can manage instructor access in Course Builder.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:110\n+msgid \"Restrict Instructor Access\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:120\n+msgid \"When enabled, the admin menu will be hidden for instructors. Instructors will not be able to access wp-admin.\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:153\n+msgid \"Course Builder logo preview\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FCourseBuilder\u002FSettings\u002FBuilderSettingsTemplate.php:182\n+msgid \"Course Builder Logo\"\n+msgstr \"\"\n+\n+#: inc\u002FTemplateHooks\u002FInstructor\u002FSingleInstructorTemplate.php:349\n msgid \"%s does not have any courses\"\n msgstr \"\"\n \n@@ -11565,11 +12651,6 @@\n msgid \"Subtotal:\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php:408\n-#: templates\u002Forder\u002Fconfirm.php:57\n-msgid \"Total:\"\n-msgstr \"\"\n-\n #: inc\u002FTemplateHooks\u002FOrder\u002FAdminOrderItemsTemplate.php:425\n msgid \"Add item(s)\"\n msgstr \"\"\n@@ -11613,10 +12694,6 @@\n msgid \"Started Date\"\n msgstr \"\"\n \n-#: inc\u002FTemplateHooks\u002FProfile\u002FProfileQuizzesTemplate.php:217\n-msgid \"No quizzes found\"\n-msgstr \"\"\n-\n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:60\n msgid \"edit cover image\"\n msgstr \"\"\n@@ -11631,7 +12708,6 @@\n msgstr \"\"\n \n #: inc\u002FTemplateHooks\u002FProfile\u002FProfileTemplate.php:125\n-#, php-format\n msgid \"Accepted file types: JPG, PNG %1$d x %2$d (px)\"\n msgstr \"\"\n \n@@ -11671,12 +12747,10 @@\n \n #: inc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php:271\n #: templates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php:96\n-#, php-format\n msgid \"Passing condition: %s%%\"\n msgstr \"\"\n \n #: inc\u002FTemplateHooks\u002FUserItem\u002FUserCourseTemplate.php:337\n-#, php-format\n msgid \"%1$d of %2$d items completed\"\n msgstr \"\"\n \n@@ -11694,7 +12768,7 @@\n \n #: inc\u002FTemplateHooks\u002FUserTemplate.php:129\n #: inc\u002FTemplateHooks\u002FUserTemplate.php:191\n-#: inc\u002Fuser\u002Fclass-lp-profile.php:1013\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:1027\n msgid \"User Avatar\"\n msgstr \"\"\n \n@@ -11707,7 +12781,6 @@\n msgstr \"\"\n \n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:111\n-#, php-format\n msgid \"%1$d question\"\n msgid_plural \"%1$d questions\"\n msgstr[0] \"\"\n@@ -11723,21 +12796,18 @@\n msgstr \"\"\n \n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:764\n-#, php-format\n msgid \"%d lesson\"\n msgid_plural \"%d lessons\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:768\n-#, php-format\n msgid \"%d quiz\"\n msgid_plural \"%d quizzes\"\n msgstr[0] \"\"\n msgstr[1] \"\"\n \n #: inc\u002Ftemplates\u002Fclass-lp-template-course.php:772\n-#, php-format\n msgid \"%d student\"\n msgid_plural \"%d students\"\n msgstr[0] \"\"\n@@ -11764,7 +12834,6 @@\n msgstr \"\"\n \n #: inc\u002Fuser\u002Fabstract-lp-user.php:704\n-#, php-format\n msgid \"The role %s for the user doesn't exist\"\n msgstr \"\"\n \n@@ -11796,11 +12865,11 @@\n msgid \"Account privacy updated successfully.\"\n msgstr \"\"\n \n-#: inc\u002Fuser\u002Fclass-lp-profile.php:539\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:553\n msgid \"Public your profile courses attended.\"\n msgstr \"\"\n \n-#: inc\u002Fuser\u002Fclass-lp-profile.php:546\n+#: inc\u002Fuser\u002Fclass-lp-profile.php:560\n msgid \"Public your profile quizzes.\"\n msgstr \"\"\n \n@@ -12007,7 +13076,6 @@\n \n #: inc\u002FWidgets\u002Fcourse-progress.php:72\n #: inc\u002FWidgets\u002Fcourse-progress.php:76\n-#, php-format\n msgid \"You haven't started %s\"\n msgstr \"\"\n \n@@ -12089,10 +13157,6 @@\n msgid \"LearnPress - Recent Courses\"\n msgstr \"\"\n \n-#: inc\u002FWidgets\u002Frecent-courses.php:31\n-msgid \"Recent Courses\"\n-msgstr \"\"\n-\n #: inc\u002FWPGDPR\u002FErasePersonalData.php:37\n msgid \"LP Data Eraser\"\n msgstr \"\"\n@@ -12196,12 +13260,11 @@\n msgid \"Browser User Agent\"\n msgstr \"\"\n \n-#: learnpress.php:820\n+#: learnpress.php:860\n msgid \"Documentation\"\n msgstr \"\"\n \n #: templates\u002Fcheckout\u002Faccount-logged-in.php:25\n-#, php-format\n msgid \"Logged in as \u003Ca href=\\\"%1$s\\\">%2$s\u003C\u002Fa>.\"\n msgstr \"\"\n \n@@ -12274,7 +13337,6 @@\n msgstr \"\"\n \n #: templates\u002Fcheckout\u002Fform.php:22\n-#, php-format\n msgid \"Please %s in to enroll in the course!\"\n msgstr \"\"\n \n@@ -12310,7 +13372,6 @@\n msgstr \"\"\n \n #: templates\u002Fcheckout\u002Fguest-checkout.php:48\n-#, php-format\n msgid \"Or you can %1$s%2$s %3$s now.\"\n msgstr \"\"\n \n@@ -12327,7 +13388,6 @@\n msgstr \"\"\n \n #: templates\u002Fcheckout\u002Forder-received.php:52\n-#, php-format\n msgid \"Go to %1$s to continue browsing or go to %2$s\"\n msgstr \"\"\n \n@@ -12360,7 +13420,6 @@\n msgstr \"\"\n \n #: templates\u002Fcheckout\u002Fterm-conditions.php:30\n-#, php-format\n msgid \"By completing your purchase you agree to those \u003Ca href=\\\"%1$s\\\" target=\\\"_blank\\\">%2$s\u003C\u002Fa>.\"\n msgstr \"\"\n \n@@ -12404,12 +13463,10 @@\n msgstr \"\"\n \n #: templates\u002Femails\u002Fplain\u002Forder-items-table.php:76\n-#, php-format\n msgid \"Quantity: %s\"\n msgstr \"\"\n \n #: templates\u002Femails\u002Fplain\u002Forder-items-table.php:78\n-#, php-format\n msgid \"Cost: %s\"\n msgstr \"\"\n \n@@ -12450,7 +13507,6 @@\n msgstr \"\"\n \n #: templates\u002Fglobal\u002Fbefore-main-content.php:30\n-#, php-format\n msgid \"Please \u003Ca href=\\\\\\\"%s\\\\\\\" target=\\\\\\\"_blank\\\\\\\">setup\u003C\u002Fa> it so users can purchase courses.\"\n msgstr \"\"\n \n@@ -12523,7 +13579,6 @@\n msgstr \"\"\n \n #: templates\u002Fprofile\u002Fnot-logged-in.php:16\n-#, php-format\n msgid \"Please \u003Ca href=\\\"%s\\\">login\u003C\u002Fa> to see your profile content\"\n msgstr \"\"\n \n@@ -12565,12 +13620,10 @@\n msgstr \"\"\n \n #: templates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php:20\n-#, php-format\n msgid \"This order is paid for %s\"\n msgstr \"\"\n \n #: templates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php:24\n-#, php-format\n msgid \"This order is paid by %s\"\n msgstr \"\"\n \n@@ -12639,7 +13692,6 @@\n msgstr \"\"\n \n #: templates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-header.php:39\n-#, php-format\n msgid \"\u003Cspan class=\\\"items-completed\\\">%1$s\u003C\u002Fspan> of %2$d items\"\n msgstr \"\"\n \n@@ -12649,7 +13701,6 @@\n msgstr \"\"\n \n #: templates\u002Fsingle-course\u002Fcontent-protected.php:22\n-#, php-format\n msgid \"This content is protected, please %1$s and %2$s in the course to view this content!\"\n msgstr \"\"\n \n@@ -12668,7 +13719,6 @@\n msgstr \"\"\n \n #: templates\u002Fsingle-course\u002Floop-section.php:67\n-#, php-format\n msgid \"Section progress %s%%\"\n msgstr \"\"\n \n@@ -12689,12 +13739,10 @@\n msgstr \"\"\n \n #: templates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php:65\n-#, php-format\n msgid \"Failed %1$d, Passed %2$d\"\n msgstr \"\"\n \n #: templates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php:65\n-#, php-format\n msgid \"%1$d\u002F%2$d\"\n msgstr \"\"\n \ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flearnpress.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flearnpress.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Flearnpress.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Flearnpress.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,1078 +1,1118 @@\n-\u003C?php\r\n-\u002F**\r\n- * Plugin Name: LearnPress\r\n- * Plugin URI: https:\u002F\u002Fthimpress.com\u002Flearnpress\r\n- * Description: LearnPress is a WordPress complete solution for creating a Learning Management System (LMS). It can help you to create courses, lessons and quizzes.\r\n- * Author: ThimPress\r\n- * Version: 4.3.5\r\n- * Author URI: http:\u002F\u002Fthimpress.com\r\n- * Requires at least: 6.0\r\n- * Requires PHP: 7.4\r\n- * Text Domain: learnpress\r\n- * Domain Path: \u002Flanguages\u002F\r\n- *\r\n- * @package LearnPress\r\n- *\u002F\r\n-\r\n-use LearnPress\\Ajax\\EditQuestionAjax;\r\n-use LearnPress\\Ajax\\EditQuizAjax;\r\n-use LearnPress\\Ajax\\LessonAjax;\r\n-use LearnPress\\Ajax\\LoadContentViaAjax;\r\n-use LearnPress\\Ajax\\MCP\\McpApiKeysAjax;\r\n-use LearnPress\\Ajax\\AI\\OpenAiAjax;\r\n-use LearnPress\\Ajax\\ExportOrderCSVAjax;\r\n-use LearnPress\\Background\\LPBackgroundTrigger;\r\n-use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\r\n-use LearnPress\\ExternalPlugin\\RankMath\\LPRankMath;\r\n-use LearnPress\\ExternalPlugin\\YoastSeo\\LPYoastSeo;\r\n-use LearnPress\\Gutenberg\\GutenbergHandleMain;\r\n-use LearnPress\\Ajax\\EditCurriculumAjax;\r\n-use LearnPress\\Ajax\\SendEmailAjax;\r\n-use LearnPress\\MCP\\Abilities;\r\n-use LearnPress\\MCP\\Auth\\ApiKeyAuthenticator;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\Shortcodes\\Course\\FilterCourseShortcode;\r\n-use LearnPress\\Shortcodes\\CourseButtonShortcode;\r\n-use LearnPress\\Shortcodes\\Courses\\ListCoursesShortcode;\r\n-use LearnPress\\Shortcodes\\ListInstructorsShortcode;\r\n-use LearnPress\\Shortcodes\\SingleInstructorShortcode;\r\n-use LearnPress\\Shortcodes\\CourseMaterialShortcode;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminCreateCourseAITemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditCourseCurriculumWithAITemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditWithAITemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminEditQizTemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\r\n-use LearnPress\\TemplateHooks\\Admin\\AdminListStudentsEnrolled;\r\n-use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesRelatedTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseClassicTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\Instructor\\ListInstructorsTemplate;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileCoursesTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileGeneralInfoTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileInstructorStatisticsTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileQuizzesTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileStudentEnrolledTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileOrderTemplate;\r\n-use LearnPress\\TemplateHooks\\Profile\\ProfileStudentStatisticsTemplate;\r\n-use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\r\n-use LearnPress\\TemplateHooks\\Order\\AdminOrderItemsTemplate;\r\n-use LearnPress\\TemplateHooks\\Order\\AdminOrderListTemplate;\r\n-use LearnPress\\Widgets\\LPRegisterWidget;\r\n-use LearnPress\\WPGDPR\\ErasePersonalData;\r\n-use LearnPress\\WPGDPR\\ExportPersonalData;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! class_exists( 'LearnPress' ) ) {\r\n-\t\u002F**\r\n-\t * Class LearnPress\r\n-\t *\r\n-\t * Version 3.0.1\r\n-\t *\u002F\r\n-\tclass LearnPress {\r\n-\t\t\u002F**\r\n-\t\t * Current version of the plugin\r\n-\t\t *\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $version = '';\r\n-\t\t\u002F**\r\n-\t\t * Version database require, use for this LP source\r\n-\t\t *\r\n-\t\t * @var int\r\n-\t\t *\u002F\r\n-\t\tpublic $db_version = 5;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * The single instance of the class\r\n-\t\t *\r\n-\t\t * @var LearnPress object\r\n-\t\t *\u002F\r\n-\t\tprivate static $_instance = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Store the session class\r\n-\t\t *\r\n-\t\t * @var LP_Session_Handler\r\n-\t\t *\u002F\r\n-\t\tpublic $session = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Cart object\r\n-\t\t *\u002F\r\n-\t\tpublic $cart = false;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Settings\r\n-\t\t *\u002F\r\n-\t\tpublic $settings = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic $query_vars = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var array\r\n-\t\t *\u002F\r\n-\t\tpublic $global = array();\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Template\r\n-\t\t *\u002F\r\n-\t\tpublic $template = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Core_API\r\n-\t\t *\u002F\r\n-\t\tpublic $api = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Admin_Core_API\r\n-\t\t *\u002F\r\n-\t\tpublic $admin_api = null;\r\n-\r\n-\t\t\u002F**\r\n-\t\t * @var string\r\n-\t\t *\u002F\r\n-\t\tpublic $thim_core_version_require = '2.0.0';\r\n-\r\n-\t\tpublic static $time_limit_default_of_sever = 0;\r\n-\r\n-\t\tpublic static $doc_link = 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002F';\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LearnPress constructor.\r\n-\t\t *\u002F\r\n-\t\tprivate function __construct() {\r\n-\t\t\t\u002F*if ( isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\ttry {\r\n-\t\t\t\t$this->prepare_before_handle();\r\n-\r\n-\t\t\t\tif ( ! LP_Install::instance()->tables_install_done() ) {\r\n-\t\t\t\t\treturn;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F Must handle in hook init of WordPress, when loaded plugins, theme, user.\r\n-\t\t\t\tadd_action( 'init', [ $this, 'lp_main_handle' ], - 1000 );\r\n-\r\n-\t\t\t\t\u002F\u002F hooks .\r\n-\t\t\t\t$this->hooks();\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Prepare before handle.\r\n-\t\t * 1.Load constants and includes files.\r\n-\t\t * 2.Get default time limit of server.\r\n-\t\t * 3.Update version of LP undefined.\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @since 4.2.7.6\r\n-\t\t * @version 1.0.0\r\n-\t\t *\u002F\r\n-\t\tpublic function prepare_before_handle() {\r\n-\t\t\t\u002F\u002F Define constant .\r\n-\t\t\t$this->plugin_defines();\r\n-\r\n-\t\t\tself::$time_limit_default_of_sever = ini_get( 'max_execution_time' );\r\n-\r\n-\t\t\t\u002F\u002F Update for case compare version of LP if LEARNPRESS_VERSION undefined\r\n-\t\t\t$this->version = LEARNPRESS_VERSION;\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\t$learn_press_version = get_option( 'learnpress_version', '' );\r\n-\t\t\t\tif ( $learn_press_version !== $this->version ) {\r\n-\t\t\t\t\tif ( empty( $learn_press_version ) ) { \u002F\u002F Case user install new\r\n-\t\t\t\t\t\t\u002F\u002F Set using modern layout for new installation.\r\n-\t\t\t\t\t\tupdate_option( 'learn_press_layout_single_course', 'modern' );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tupdate_option( 'learnpress_version', $this->version );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F define table prefixes .\r\n-\t\t\t$this->define_tables();\r\n-\r\n-\t\t\t\u002F\u002F Include files .\r\n-\t\t\t$this->includes();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Define constant.\r\n-\t\t *\u002F\r\n-\t\tprotected function plugin_defines() {\r\n-\t\t\tif ( ! defined( 'LP_PLUGIN_FILE' ) ) {\r\n-\t\t\t\tdefine( 'LP_PLUGIN_FILE', __FILE__ );\r\n-\t\t\t\tinclude_once 'inc\u002Flp-constants.php';\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Defines database table names.\r\n-\t\t *\u002F\r\n-\t\tpublic function define_tables() {\r\n-\t\t\tglobal $wpdb;\r\n-\r\n-\t\t\t$tables = array(\r\n-\t\t\t\t'sessions',\r\n-\t\t\t\t'sections',\r\n-\t\t\t\t'section_items',\r\n-\t\t\t\t'user_items',\r\n-\t\t\t\t'user_itemmeta',\r\n-\t\t\t\t'user_item_results',\r\n-\t\t\t\t'order_items',\r\n-\t\t\t\t'order_itemmeta',\r\n-\t\t\t\t'quiz_questions',\r\n-\t\t\t\t'question_answers',\r\n-\t\t\t\t'question_answermeta',\r\n-\t\t\t);\r\n-\r\n-\t\t\tforeach ( $tables as $short_name ) {\r\n-\t\t\t\t$table_name            = $wpdb->prefix . LP_TABLE_PREFIX . $short_name;\r\n-\t\t\t\t$backward_key          = 'learnpress_' . $short_name;\r\n-\t\t\t\t$wpdb->{$backward_key} = $table_name;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Includes needed files.\r\n-\t\t *\u002F\r\n-\t\tpublic function includes() {\r\n-\t\t\tinclude_once LP_PLUGIN_PATH . 'vendor\u002Fautoload.php';\r\n-\r\n-\t\t\t\u002F\u002F Include required files load anywhere, both frontend and backend.\r\n-\t\t\t$this->include_files_global();\r\n-\r\n-\t\t\t\u002F\u002F include files when LP ready run - after setup success .\r\n-\t\t\tif ( ! LP_Install::instance()->tables_install_done() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Include required files Backend.\r\n-\t\t\t$this->include_files_admin();\r\n-\r\n-\t\t\t\u002F\u002F Include required files Frontend.\r\n-\t\t\t$this->include_files_frontend();\r\n-\r\n-\t\t\tnew LP_Query();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * load files anywhere, both frontend and backend\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tprivate function include_files_global() {\r\n-\r\n-\t\t\t\u002F\u002F Filter query .\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-post-type-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-post-meta-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-course-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-course-json-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-order-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-session-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-section-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-section-items-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-items-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-answers-filter.php';\r\n-\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php';\r\n-\r\n-\t\t\t\u002F\u002F Query Database .\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-course-json-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-order-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-post-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-post-meta-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-course-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-lesson-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-section-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-section-items-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-quiz-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-question-answers-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-sessions-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-question-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-items-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-item-results-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-thim-cache-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-material-db.php';\r\n-\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-statistics-db.php';\r\n-\r\n-\t\t\t\u002F\u002F File system .\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-file-system.php';\r\n-\r\n-\t\t\t\u002F\u002F File helper\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-helper.php';\r\n-\r\n-\t\t\t\u002F\u002F Template Hooks.\r\n-\t\t\tListCoursesTemplate::instance();\r\n-\t\t\tListCoursesRelatedTemplate::instance();\r\n-\t\t\tListInstructorsTemplate::instance();\r\n-\t\t\tSingleCourseTemplate::instance();\r\n-\t\t\tSingleCourseOfflineTemplate::instance();\r\n-\t\t\tSingleCourseModernLayout::instance();\r\n-\t\t\tSingleCourseClassicTemplate::instance();\r\n-\t\t\tSingleInstructorTemplate::instance();\r\n-\t\t\tProfileInstructorStatisticsTemplate::instance();\r\n-\t\t\tProfileStudentStatisticsTemplate::instance();\r\n-\t\t\tProfileOrdersTemplate::instance();\r\n-\t\t\tProfileOrderTemplate::instance();\r\n-\t\t\tProfileGeneralInfoTemplate::instance();\r\n-\t\t\tFilterCourseTemplate::instance();\r\n-\t\t\tProfileQuizzesTemplate::instance();\r\n-\t\t\tProfileCoursesTemplate::instance();\r\n-\t\t\tProfileStudentEnrolledTemplate::instance();\r\n-\r\n-\t\t\t\u002F\u002F Admin template hooks.\r\n-\t\t\tAdminEditCurriculumTemplate::instance();\r\n-\t\t\tAdminEditQizTemplate::instance();\r\n-\t\t\tAdminEditQuestionTemplate::instance();\r\n-\t\t\tCourseMaterialTemplate::instance();\r\n-\t\t\tAdminOrderItemsTemplate::instance();\r\n-\t\t\tAdminOrderListTemplate::instance();\r\n-\t\t\tAdminCreateCourseAITemplate::instance();\r\n-\t\t\tAdminEditWithAITemplate::instance();\r\n-\t\t\tAdminEditCourseCurriculumWithAITemplate::instance();\r\n-\t\t\tAdminListStudentsEnrolled::instance();\r\n-\t\t\t\u002F\u002F WP GDPR\r\n-\t\t\tErasePersonalData::instance();\r\n-\t\t\tExportPersonalData::instance();\r\n-\r\n-\t\t\t\u002F\u002F Models\r\n-\t\t\tinclude_once 'inc\u002FModels\u002Fclass-lp-rest-response.php';\r\n-\t\t\tinclude_once 'inc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php';\r\n-\t\t\tinclude_once 'inc\u002FModels\u002Fsteps\u002Fclass-lp-step.php';\r\n-\t\t\tinclude_once 'inc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php';\r\n-\r\n-\t\t\t\u002F\u002F Handle steps.\r\n-\t\t\tinclude_once 'inc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php';\r\n-\t\t\tinclude_once 'inc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php';\r\n-\r\n-\t\t\t\u002F\u002F LP Cache\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-courses-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-course-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-quiz-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-question-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-session-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-settings-cache.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-user-items-cache.php';\r\n-\r\n-\t\t\t\u002F\u002F Background processes.\r\n-\t\t\tLPBackgroundTrigger::instance();\r\n-\t\t\tinclude_once 'inc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php';\r\n-\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fabstract-lp-async-request.php';\r\n-\t\t\t\u002F\u002Finclude_once 'inc\u002Fbackground-process\u002Fabstract-lp-async-task.php';\r\n-\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fclass-lp-background-single-course.php';\r\n-\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fclass-lp-background-single-email.php';\r\n-\r\n-\t\t\t\u002F\u002F Assets object\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-asset-key.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-assets.php';\r\n-\r\n-\t\t\t\u002F\u002F Debug class\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-debug.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-settings.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstract-settings.php';\r\n-\t\t\tinclude_once 'inc\u002Fsettings\u002Fabstract-settings-page.php';\r\n-\t\t\tinclude_once 'inc\u002Fsettings\u002Fclass-lp-settings-courses.php';\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-global.php';\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-datetime.php';\r\n-\r\n-\t\t\t\u002F\u002F Register custom-post-type and taxonomies .\r\n-\t\t\t\u002F*include_once 'inc\u002Fcustom-post-types\u002Fabstract.php';\r\n-\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fcourse.php';\r\n-\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Flesson.php';\r\n-\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquiz.php';\r\n-\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquestion.php';\r\n-\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Forder.php';*\u002F\r\n-\r\n-\t\t\tinclude_once 'inc\u002Finterfaces\u002Finterface-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-array-access.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-object-data.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-post-data.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-course-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-section-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-lesson-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-quiz-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-question-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-order-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-user-curd.php';\r\n-\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-user-item-curd.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-item.php';\r\n-\t\t\tinclude_once 'inc\u002Fquestion\u002Fclass-lp-question.php';\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-section.php';\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-course.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Flp-deprecated.php'; \u002F\u002F Will remove if Eduma and guest update all 4.0.0\r\n-\t\t\tinclude_once 'inc\u002Flp-core-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-autoloader.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Flp-webhooks.php'; \u002F\u002F Addon learnpress-2checkout-payment v4.0.1 is using, when update v4.0.2 don't need load it.\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-request-handler.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php';\r\n-\r\n-\t\t\t\u002F\u002F Todo: tungnx check those files.\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-object-query.php';\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-course-query.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-addon.php';\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-thumbnail-helper.php';\r\n-\t\t\tinclude_once 'inc\u002Fcache.php';\r\n-\r\n-\t\t\t\u002F\u002F Class handle check db of LP need to upgrade?\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-updater.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Flp-course-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fabstract-course.php';\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course.php';\r\n-\t\t\tinclude_once 'inc\u002Fquiz\u002Flp-quiz-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Fquiz\u002Fclass-lp-quiz.php';\r\n-\t\t\t\u002F\u002Finclude_once 'inc\u002Flesson\u002Flp-lesson-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Forder\u002Flp-order-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Forder\u002Fclass-lp-order.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fuser\u002Flp-user-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-user-factory.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser\u002Fabstract-lp-user.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-user.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-profile.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-course.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php';\r\n-\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-quiz-results.php';\r\n-\r\n-\t\t\t\u002F\u002F Shortcodes.\r\n-\t\t\tSingleInstructorShortcode::instance();\r\n-\t\t\tListInstructorsShortcode::instance();\r\n-\t\t\tCourseMaterialShortcode::instance();\r\n-\t\t\tCourseButtonShortcode::instance();\r\n-\t\t\tFilterCourseShortcode::instance();\r\n-\t\t\tListCoursesShortcode::instance();\r\n-\t\t\t\u002F\u002FListCourseRecentShortcode::instance();\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-shortcodes.php';\r\n-\r\n-\t\t\t\u002F\u002F include template functions .\r\n-\t\t\tinclude_once 'inc\u002Flp-template-functions.php';\r\n-\t\t\tinclude_once 'inc\u002Ftemplates\u002Fabstract-template.php';\r\n-\t\t\t\u002F\u002Finclude_once 'inc\u002Fclass-lp-template.php';\r\n-\r\n-\t\t\t\u002F\u002F Cart\r\n-\t\t\tinclude_once 'inc\u002Fcart\u002Fclass-lp-cart.php';\r\n-\t\t\tinclude_once 'inc\u002Fcart\u002Flp-cart-functions.php';\r\n-\r\n-\t\t\t\u002F\u002F Block Templates\r\n-\t\t\t\u002F\u002Finclude_once 'inc\u002Fblock-template\u002Fclass-abstract-block-template.php';\r\n-\t\t\t\u002F\u002Finclude_once 'inc\u002Fblock-template\u002Fclass-block-template-handle.php';\r\n-\t\t\tGutenbergHandleMain::instance();\r\n-\r\n-\t\t\t\u002F\u002F API\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-rest-api.php';\r\n-\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-rest-controller.php';\r\n-\t\t\tinclude_once 'inc\u002Frest-api\u002Fclass-lp-core-api.php';\r\n-\t\t\tinclude_once 'inc\u002Frest-api\u002Fclass-lp-admin-core-api.php';\r\n-\r\n-\t\t\t\u002F** Jwt *\u002F\r\n-\t\t\tinclude_once 'inc\u002Fjwt\u002Fclass-jwt-auth.php';\r\n-\r\n-\t\t\tLPRegisterWidget::instance();\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-widget.php';\r\n-\t\t\tinclude_once 'inc\u002Flp-widget-functions.php';\r\n-\r\n-\t\t\t\u002F\u002F TODO: update frontend editor before move to function include_files_admin.\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-page-controller.php';\r\n-\t\t\tLP_Page_Controller::instance();\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fgateways\u002Fclass-lp-gateway-abstract.php';\r\n-\t\t\tinclude_once 'inc\u002Fgateways\u002Fclass-lp-gateways.php';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Include file run on backend\r\n-\t\t *\u002F\r\n-\t\tprivate function include_files_admin() {\r\n-\t\t\tif ( ! is_admin() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin-ajax.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin-notice.php';\r\n-\r\n-\t\t\t\u002F\u002F File handle install LP\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-install.php';\r\n-\r\n-\t\t\t\u002F\u002F Meta box helper\r\n-\t\t\tinclude_once 'inc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php';\r\n-\r\n-\t\t\t\u002F\u002F include_once 'inc\u002Fadmin\u002Fclass-lp-admin.php';\r\n-\t\t\t\u002F\u002F include_once 'inc\u002Fadmin\u002Fsettings\u002Fabstract-settings-page.php';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Include file run on frontend\r\n-\t\t *\u002F\r\n-\t\tprivate function include_files_frontend() {\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-assets.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-ajax.php';\r\n-\r\n-\t\t\tinclude_once 'inc\u002Fclass-lp-session-handler.php';\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Main instance of LearnPress.\r\n-\t\t * Must load on \"init\" hook of WordPress.\r\n-\t\t * 1. Load text domain.\r\n-\t\t * 2. Handle lp ajax.\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t * @version 4.2.7.6\r\n-\t\t * @version 1.0.2\r\n-\t\t *\u002F\r\n-\t\tpublic function lp_main_handle() {\r\n-\t\t\ttry {\r\n-\t\t\t\t\u002F\u002F Load text domain.\r\n-\t\t\t\t$this->load_plugin_text_domain();\r\n-\r\n-\t\t\t\t\u002F\u002F Register custom post type and taxonomies .\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fabstract.php';\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fcourse.php';\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Flesson.php';\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquiz.php';\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquestion.php';\r\n-\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Forder.php';\r\n-\r\n-\t\t\t\t\u002F\u002F Polylang\r\n-\t\t\t\tif ( defined( 'POLYLANG_VERSION' ) ) {\r\n-\t\t\t\t\tinclude_once 'inc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php';\r\n-\t\t\t\t\tLP_Polylang::instance();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For plugin Elementor\r\n-\t\t\t\tif ( defined( 'ELEMENTOR_VERSION' ) ) {\r\n-\t\t\t\t\tLPElementor::instance();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For plugin WPSEO\r\n-\t\t\t\tif ( defined( 'WPSEO_FILE' ) ) {\r\n-\t\t\t\t\tLPYoastSeo::instance();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F For plugin RankMath\r\n-\t\t\t\tif ( defined( 'RANK_MATH_VERSION' ) ) {\r\n-\t\t\t\t\tLPRankMath::instance();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$this->api       = new LP_Core_API();\r\n-\t\t\t\t$this->admin_api = new LP_Admin_Core_API();\r\n-\t\t\t\t$this->get_session();\r\n-\t\t\t\t$this->settings = $this->settings();\r\n-\t\t\t\t$this->get_cart();\r\n-\r\n-\t\t\t\t\u002F\u002F Init emails\r\n-\t\t\t\tLP_Emails::instance();\r\n-\t\t\t\t\u002F\u002F Email hook notify\r\n-\t\t\t\tinclude_once 'inc\u002Femails\u002Fclass-lp-email-hooks.php';\r\n-\r\n-\t\t\t\tif ( is_admin() ) {\r\n-\t\t\t\t\t$this->check_addons_version_valid();\r\n-\r\n-\t\t\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin.php';\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t\u002F\u002F let third parties know that we're ready .\r\n-\t\t\t\tdo_action( 'learn-press\u002Fready' );\r\n-\r\n-\t\t\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\r\n-\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) ) {\r\n-\t\t\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\r\n-\t\t\t\t\t\t$lp_addon_sorting_choice = new LP_Addon_Sorting_Choice();\r\n-\t\t\t\t\t\t$lp_addon_sorting_choice->init();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}*\u002F\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Init gateways, to load all payment gateways, catch callback.\r\n-\t\t\t\t * Must be call after learn-press\u002Fready to register hook of addon.\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tLP_Gateways::instance();\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * Fixed temporary for emails of Announcement v4.0.6, Assignment v4.1.1 addons.\r\n-\t\t\t\t * @since 4.2.7.4\r\n-\t\t\t\t * When 2 addons update to new version, will remove this code.\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Announcements_Preload' ) ) {\r\n-\t\t\t\t\tif ( version_compare( LP_ADDON_ANNOUNCEMENTS_VER, '4.0.6', '\u003C=' ) ) {\r\n-\t\t\t\t\t\t$addon_announcement = LP_Addon_Announcements_Preload::$addon;\r\n-\t\t\t\t\t\t$addon_announcement->emails_setting();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}*\u002F\r\n-\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Assignment_Preload' ) ) {\r\n-\t\t\t\t\tif ( version_compare( LP_ADDON_ASSIGNMENT_VER, '4.1.1', '\u003C=' ) ) {\r\n-\t\t\t\t\t\t$addon_assignment = LP_Addon_Assignment_Preload::$addon;\r\n-\t\t\t\t\t\t$addon_assignment->emails_setting();\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}*\u002F\r\n-\t\t\t} catch ( Throwable $e ) {\r\n-\t\t\t\tLP_Debug::error_log( $e );\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check version addons valid version require.\r\n-\t\t * If not valid will be to deactivate.\r\n-\t\t * Reload page, so not affect to hook \"learn-press\u002Fready\"\r\n-\t\t *\u002F\r\n-\t\tpublic function check_addons_version_valid() {\r\n-\t\t\t$addons_valid = true;\r\n-\t\t\t$plugins      = get_option( 'active_plugins' );\r\n-\r\n-\t\t\t$list_lp_addon_activated = preg_grep( '\u002F^learnpress-.*\u002Fi', $plugins );\r\n-\t\t\tforeach ( $list_lp_addon_activated as $lp_addon ) {\r\n-\t\t\t\t$lp_addon_info = get_file_data(\r\n-\t\t\t\t\tWP_PLUGIN_DIR . '\u002F' . $lp_addon,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'Require_LP_Version' => 'Require_LP_Version',\r\n-\t\t\t\t\t\t'Version'            => 'Version',\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t\t$lp_addon_version = $lp_addon_info['Version'];\r\n-\r\n-\t\t\t\t$addon                  = new Lp_Addon();\r\n-\t\t\t\t$addon->version         = $lp_addon_version;\r\n-\t\t\t\t$addon->plugin_base     = $lp_addon;\r\n-\t\t\t\t$addon->require_version = $lp_addon_info['Require_LP_Version'];\r\n-\t\t\t\t$addon_valid            = $addon->check_require_version_addon();\r\n-\r\n-\t\t\t\tif ( $addons_valid ) {\r\n-\t\t\t\t\t$addon_valid = $addon->check_require_version_lp();\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! $addon_valid ) {\r\n-\t\t\t\t\t$addons_valid = false;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Initial common hooks\r\n-\t\t *\u002F\r\n-\t\tpublic function hooks() {\r\n-\t\t\tadd_action( 'init', array( $this, 'maybe_init_mcp_abilities' ), 20 );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * Handle lp ajax.\r\n-\t\t\t * Set priority after register_post_type to register capabilities for post type of LP.\r\n-\t\t\t *\u002F\r\n-\t\t\tadd_action(\r\n-\t\t\t\t'init',\r\n-\t\t\t\tfunction () {\r\n-\t\t\t\t\tLoadContentViaAjax::catch_lp_ajax();\r\n-\t\t\t\t\tLessonAjax::catch_lp_ajax();\r\n-\t\t\t\t\tEditCurriculumAjax::catch_lp_ajax();\r\n-\t\t\t\t\tEditQuizAjax::catch_lp_ajax();\r\n-\t\t\t\t\tEditQuestionAjax::catch_lp_ajax();\r\n-\t\t\t\t\tSendEmailAjax::catch_lp_ajax();\r\n-\t\t\t\t\tOpenAiAjax::catch_lp_ajax();\r\n-\t\t\t\t\tExportOrderCSVAjax::catch_lp_ajax();\r\n-\t\t\t\t\tMcpApiKeysAjax::catch_lp_ajax();\r\n-\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fregister-ajax-handlers' );\r\n-\t\t\t\t},\r\n-\t\t\t\t11\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Add links setting|document|addon on plugins page.\r\n-\t\t\tadd_filter( 'plugin_action_links_' . LP_PLUGIN_BASENAME, array( $this, 'plugin_links' ) );\r\n-\r\n-\t\t\tregister_activation_hook( LP_PLUGIN_FILE, array( $this, 'on_activate' ) );\r\n-\t\t\tregister_deactivation_hook( LP_PLUGIN_FILE, array( $this, 'on_deactivate' ) );\r\n-\r\n-\t\t\tadd_action(\r\n-\t\t\t\t'plugin_loaded',\r\n-\t\t\t\tfunction ( $plugin ) {\r\n-\t\t\t\t\t\u002F\u002F For check wp_remote call normally of WP\r\n-\t\t\t\t\tif ( ! empty( LP_Request::get_param( 'lp_test_wp_remote' ) ) ) {\r\n-\t\t\t\t\t\techo '[TEST_REMOTE]';\r\n-\t\t\t\t\t\tdie;\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Check require version thim-core on Backend.\r\n-\t\t\tif ( is_admin() ) {\r\n-\t\t\t\tadd_action( 'before_thim_core_init', array( $this, 'check_thim_core_version_require' ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Save key purchase addon when install via file download from Thimpress.\r\n-\t\t\tadd_action(\r\n-\t\t\t\t'upgrader_process_complete',\r\n-\t\t\t\tfunction ( $plugin_upgrader ) {\r\n-\t\t\t\t\tif ( ! empty( $plugin_upgrader->result ) ) {\r\n-\t\t\t\t\t\t$res         = $plugin_upgrader->result;\r\n-\t\t\t\t\t\t$path_source = $res['destination'] ?? '';\r\n-\t\t\t\t\t\tif ( empty( $path_source ) ) {\r\n-\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$key_purchase_path = realpath( $path_source . '\u002Fpurchase-code.txt' );\r\n-\t\t\t\t\t\tif ( file_exists( $key_purchase_path ) ) {\r\n-\t\t\t\t\t\t\t$purchase_code_content = file_get_contents( $key_purchase_path );\r\n-\t\t\t\t\t\t\tif ( empty( $purchase_code_content ) ) {\r\n-\t\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t$addon_slug = $res['destination_name'] ?? '';\r\n-\t\t\t\t\t\t\tif ( empty( $addon_slug ) ) {\r\n-\t\t\t\t\t\t\t\treturn;\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t\u002F\u002F Call active purchase code for site.\r\n-\t\t\t\t\t\t\tLP_Manager_Addons::instance()->active_site( $addon_slug, $purchase_code_content );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F Clear cache UserModel when save user.\r\n-\t\t\tadd_action(\r\n-\t\t\t\t'wp_update_user',\r\n-\t\t\t\tfunction ( $user_id ) {\r\n-\t\t\t\t\t$user = UserModel::find( $user_id, true );\r\n-\t\t\t\t\t$user->clean_caches();\r\n-\t\t\t\t}\r\n-\t\t\t);\r\n-\r\n-\t\t\t\u002F\u002F For temporary fix issue security of wp comments. Is it error of WP, not LP, LP only call to comments_template function.\r\n-\t\t\tadd_filter(\r\n-\t\t\t\t'comments_array',\r\n-\t\t\t\tfunction ( $comments_flat, $post_id ) {\r\n-\t\t\t\t\t\u002F\u002F Check if post type is course or item's course (lesson, quiz...)\r\n-\t\t\t\t\t$post_type           = get_post_type( $post_id );\r\n-\t\t\t\t\t$course_item_types   = CourseModel::item_types_support();\r\n-\t\t\t\t\t$course_item_types[] = LP_COURSE_CPT;\r\n-\t\t\t\t\tif ( ! in_array( $post_type, $course_item_types ) ) {\r\n-\t\t\t\t\t\treturn $comments_flat;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tforeach ( $comments_flat as $key => $comment ) {\r\n-\t\t\t\t\t\t$comment->comment_content = wp_kses_post( $comment->comment_content );\r\n-\t\t\t\t\t\t$comments_flat[ $key ]    = $comment;\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\treturn $comments_flat;\r\n-\t\t\t\t},\r\n-\t\t\t\t10,\r\n-\t\t\t\t2\r\n-\t\t\t);\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Add links to Documentation and Extensions in plugin's list of action links\r\n-\t\t *\r\n-\t\t * @param array $links Array of action links\r\n-\t\t *\r\n-\t\t * @return array\r\n-\t\t * @since 4.3.11\r\n-\t\t *\r\n-\t\t *\u002F\r\n-\t\tpublic function plugin_links( array $links ): array {\r\n-\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( 'admin.php?page=learn-press-settings' ), __( 'Settings', 'learnpress' ) );\r\n-\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>', LearnPress::$doc_link, __( 'Documentation', 'learnpress' ) );\r\n-\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>', get_admin_url() . '\u002Fadmin.php?page=learn-press-addons', __( 'Add-ons', 'learnpress' ) );\r\n-\r\n-\t\t\treturn $links;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Trigger this function while activating Learnpress.\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t * @version 4.1.4.1\r\n-\t\t *\u002F\r\n-\t\tpublic function on_activate() {\r\n-\t\t\tLP_Install::instance()->on_activate();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Trigger this function while deactivating Learnpress.\r\n-\t\t *\r\n-\t\t * $since 3.0.0\r\n-\t\t *\r\n-\t\t * @hook learn_press_deactivate\r\n-\t\t *\u002F\r\n-\t\tpublic function on_deactivate() {\r\n-\t\t\tdo_action( 'learn-press\u002Fdeactivate', $this );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Conditionally bootstrap MCP abilities.\r\n-\t\t *\r\n-\t\t * @return void\r\n-\t\t *\u002F\r\n-\t\tpublic function maybe_init_mcp_abilities() {\r\n-\t\t\tif ( LP_Settings::get_option( 'enable_mcp_integration', 'no' ) !== 'yes' ) {\r\n-\t\t\t\treturn;\r\n-\t\t\t}\r\n-\r\n-\t\t\tApiKeyAuthenticator::init();\r\n-\t\t\tAbilities::init();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Handle load text domain for LearnPress.\r\n-\t\t *\r\n-\t\t * @since 4.2.7.4\r\n-\t\t * @version 1.0.1\r\n-\t\t *\u002F\r\n-\t\tpublic function load_plugin_text_domain() {\r\n-\t\t\t\u002F*$locale = determine_locale();\r\n-\t\t\t$locale = apply_filters( 'plugin_locale', $locale, 'learnpress' );\r\n-\r\n-\t\t\t$plugin_translation_path = WP_LANG_DIR . '\u002Fplugins\u002Flearnpress-' . $locale . '.mo';\r\n-\t\t\t$custom_translation_path = WP_LANG_DIR . '\u002Flearnpress\u002Flearnpress-' . $locale . '.mo';\r\n-\t\t\tif ( is_readable( $custom_translation_path ) ) {\r\n-\t\t\t\tunload_textdomain( LP_TEXT_DOMAIN );\r\n-\t\t\t\tload_textdomain( LP_TEXT_DOMAIN, $custom_translation_path );\r\n-\t\t\t\tload_textdomain( LP_TEXT_DOMAIN, $plugin_translation_path );\r\n-\t\t\t}*\u002F\r\n-\r\n-\t\t\tload_plugin_textdomain( LP_TEXT_DOMAIN, false, LP_PLUGIN_FOLDER_NAME . '\u002Flanguages' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get instance of class LP_Template.\r\n-\t\t *\r\n-\t\t * @param string $type\r\n-\t\t *\r\n-\t\t * @return LP_Template_Course|LP_Template_Profile|LP_Template_General|LP_Abstract_Template|LP_Template\r\n-\t\t *\r\n-\t\t * @throws Exception\r\n-\t\t * @since 3.3.0\r\n-\t\t *\u002F\r\n-\t\tpublic function template( $type = '' ) {\r\n-\t\t\t$this->template = LP_Template::instance();\r\n-\t\t\t$templates      = (array) $this->template->get_templates();\r\n-\r\n-\t\t\treturn $templates[ $type ] ?? $this->template;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get session object instance.\r\n-\t\t *\r\n-\t\t * @return mixed\r\n-\t\t *\u002F\r\n-\t\tpublic function get_session() {\r\n-\t\t\tif ( ! $this->session ) {\r\n-\t\t\t\t$this->session = LP_Session_Handler::instance();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->session;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get settings object instance.\r\n-\t\t *\r\n-\t\t * @return bool|LP_Settings\r\n-\t\t *\u002F\r\n-\t\tpublic function settings() {\r\n-\t\t\treturn LP_Settings::instance();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get cart object instance for online learning market.\r\n-\t\t *\r\n-\t\t * @return LP_Cart\r\n-\t\t *\u002F\r\n-\t\tpublic function get_cart(): LP_Cart {\r\n-\t\t\tif ( ! $this->cart ) {\r\n-\t\t\t\t$this->cart = LP_Cart::instance();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->cart;\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check type of request.\r\n-\t\t *\r\n-\t\t * @param string $type ajax, frontend or admin.\r\n-\t\t *\r\n-\t\t * @return bool\r\n-\t\t * @deprecated 4.2.9.4\r\n-\t\t *\u002F\r\n-\t\tpublic function is_request( $type ) {\r\n-\t\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\r\n-\t\t\treturn false;\r\n-\r\n-\t\t\tswitch ( $type ) {\r\n-\t\t\t\tcase 'admin':\r\n-\t\t\t\t\treturn is_admin();\r\n-\t\t\t\tcase 'ajax':\r\n-\t\t\t\t\treturn defined( 'LP_DOING_AJAX' );\r\n-\t\t\t\tcase 'cron':\r\n-\t\t\t\t\treturn defined( 'DOING_CRON' );\r\n-\t\t\t\tcase 'frontend':\r\n-\t\t\t\t\treturn ( ! is_admin() || defined( 'LP_DOING_AJAX' ) ) && ! defined( 'DOING_CRON' );\r\n-\t\t\t\tdefault:\r\n-\t\t\t\t\treturn strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the plugin url.\r\n-\t\t *\r\n-\t\t * @param string $sub_dir\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function plugin_url( $sub_dir = '' ) {\r\n-\t\t\treturn LP_PLUGIN_URL . ( $sub_dir ? \"{$sub_dir}\" : '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get the plugin path.\r\n-\t\t *\r\n-\t\t * @param string $sub_dir\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function plugin_path( $sub_dir = '' ) {\r\n-\t\t\treturn LP_PLUGIN_PATH . ( $sub_dir ? \"{$sub_dir}\" : '' );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Get checkout object instance\r\n-\t\t *\r\n-\t\t * @return LP_Checkout\r\n-\t\t *\u002F\r\n-\t\tpublic function checkout() {\r\n-\t\t\treturn LP_Checkout::instance();\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Short way to return image file is located in LearnPress directory.\r\n-\t\t *\r\n-\t\t * @param string\r\n-\t\t *\r\n-\t\t * @return string\r\n-\t\t *\u002F\r\n-\t\tpublic function image( $file ) {\r\n-\t\t\tif ( ! preg_match( '\u002F.(jpg|png)$\u002F', $file ) ) {\r\n-\t\t\t\t$file .= '.jpg';\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn $this->plugin_url( \"assets\u002Fimages\u002F{$file}\" );\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Check require version thim-core\r\n-\t\t *\u002F\r\n-\t\tpublic function check_thim_core_version_require() {\r\n-\t\t\t\u002F\u002F Get thim-core info for LP check .\r\n-\t\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\r\n-\t\t\t$thim_core_info = get_file_data(\r\n-\t\t\t\tWP_PLUGIN_DIR . '\u002Fthim-core\u002Fthim-core.php',\r\n-\t\t\t\tarray(\r\n-\t\t\t\t\t'Name'               => 'Plugin Name',\r\n-\t\t\t\t\t'Require_LP_Version' => 'Require_LP_Version',\r\n-\t\t\t\t\t'Version'            => 'Version',\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\r\n-\t\t\tif ( version_compare( $this->thim_core_version_require, $thim_core_info['Version'], '>' ) ) {\r\n-\t\t\t\tdeactivate_plugins( 'thim-core\u002Fthim-core.php' );\r\n-\r\n-\t\t\t\tif ( isset( $_GET['activate'] ) ) {\r\n-\t\t\t\t\tunset( $_GET['activate'] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\t$message = sprintf(\r\n-\t\t\t\t\t'%s %s You can download %s. Read guide on %s',\r\n-\t\t\t\t\t'LP4 require version Thim-core:',\r\n-\t\t\t\t\t$this->thim_core_version_require,\r\n-\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fthimpresswp.github.io\u002Fthim-core\u002Fthim-core.zip\">latest version\u003C\u002Fa>',\r\n-\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fdocspress.thimpress.com\u002Fupgrade-database-how-to-fix-some-issue\u002F\">here\u003C\u002Fa>'\r\n-\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cdiv class=\"notice notice-error\">\r\n-\t\t\t\t\t\u003Cp>\u003C?php echo wp_kses_post( $message ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tdie;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t\u002F**\r\n-\t\t * Main plugin instance.\r\n-\t\t *\r\n-\t\t * @return LearnPress\r\n-\t\t *\u002F\r\n-\t\tpublic static function instance() {\r\n-\t\t\tif ( is_null( self::$_instance ) ) {\r\n-\t\t\t\tself::$_instance = new self();\r\n-\t\t\t}\r\n-\r\n-\t\t\treturn self::$_instance;\r\n-\t\t}\r\n-\t}\r\n-}\r\n-\r\n-\u002F**\r\n- * Short way to load main instance of plugin\r\n- *\r\n- * @return LearnPress\r\n- * @since  1.0\r\n- * @author thimpress\r\n- *\u002F\r\n-function LP() {\r\n-\treturn LearnPress::instance();\r\n-}\r\n-\r\n-\u002F**\r\n- * Done! entry point of the plugin\r\n- * Create new instance of LearnPress and put it to global\r\n- *\u002F\r\n-$GLOBALS['LearnPress'] = LearnPress::instance();\r\n-\r\n-\u002F\u002F Load template hooks here, before theme add hooks remove.\r\n-\u002F\u002F Load here because this file call LearnPress::instance(), loop call.\r\n-require_once 'inc\u002Flp-template-hooks.php';\r\n+\u003C?php\n+\u002F**\n+ * Plugin Name: LearnPress\n+ * Plugin URI: https:\u002F\u002Fthimpress.com\u002Flearnpress\n+ * Description: LearnPress is a WordPress complete solution for creating a Learning Management System (LMS). It can help you to create courses, lessons and quizzes.\n+ * Author: ThimPress\n+ * Version: 4.3.6\n+ * Author URI: http:\u002F\u002Fthimpress.com\n+ * Requires at least: 6.0\n+ * Requires PHP: 7.4\n+ * Text Domain: learnpress\n+ * Domain Path: \u002Flanguages\u002F\n+ *\n+ * @package LearnPress\n+ *\u002F\n+\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Course\\BuilderListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Course\\BuilderCourseTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Course\\BuilderEditCourseTemplate;\n+use LearnPress\\Ajax\\AI\\OpenAiAjax;\n+use LearnPress\\Ajax\\BuilderDashboardAjax;\n+use LearnPress\\Ajax\\CourseBuilder\\CourseBuilderAjax;\n+use LearnPress\\Ajax\\EditCurriculumAjax;\n+use LearnPress\\Ajax\\EditQuestionAjax;\n+use LearnPress\\Ajax\\EditQuizAjax;\n+use LearnPress\\Ajax\\ExportOrderCSVAjax;\n+use LearnPress\\Ajax\\LessonAjax;\n+use LearnPress\\Ajax\\LoadContentViaAjax;\n+use LearnPress\\Ajax\\MCP\\McpApiKeysAjax;\n+use LearnPress\\Ajax\\CourseBuilder\\CBEditCourseAjax;\n+use LearnPress\\Ajax\\SendEmailAjax;\n+use LearnPress\\Background\\LPBackgroundTrigger;\n+use LearnPress\\ExternalPlugin\\Elementor\\LPElementor;\n+use LearnPress\\ExternalPlugin\\RankMath\\LPRankMath;\n+use LearnPress\\ExternalPlugin\\YoastSeo\\LPYoastSeo;\n+use LearnPress\\Gutenberg\\GutenbergHandleMain;\n+use LearnPress\\MCP\\Abilities;\n+use LearnPress\\MCP\\Auth\\ApiKeyAuthenticator;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\Shortcodes\\Course\\FilterCourseShortcode;\n+use LearnPress\\Shortcodes\\CourseButtonShortcode;\n+use LearnPress\\Shortcodes\\CourseMaterialShortcode;\n+use LearnPress\\Shortcodes\\Courses\\ListCoursesShortcode;\n+use LearnPress\\Shortcodes\\ListInstructorsShortcode;\n+use LearnPress\\Shortcodes\\SingleInstructorShortcode;\n+use LearnPress\\TemplateHooks\\Admin\\AdminEditQizTemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AdminEditQuestionTemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AdminListStudentsEnrolled;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminCreateCourseAITemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditCourseCurriculumWithAITemplate;\n+use LearnPress\\TemplateHooks\\Admin\\AI\\AdminEditWithAITemplate;\n+use LearnPress\\TemplateHooks\\Course\\AdminEditCurriculumTemplate;\n+use LearnPress\\TemplateHooks\\Course\\AdminEditSettingTemplate;\n+use LearnPress\\TemplateHooks\\Course\\CourseMaterialTemplate;\n+use LearnPress\\TemplateHooks\\Course\\FilterCourseTemplate;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesRelatedTemplate;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseClassicTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseModernLayout;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseOfflineTemplate;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\BuilderPopupTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\CourseBuilderTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Dashboard\\BuilderDashboardTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Lesson\\BuilderEditLessonTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Lesson\\BuilderLessonTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Lesson\\BuilderListLessonsTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Question\\BuilderEditQuestionTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Question\\BuilderListQuestionsTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Question\\BuilderQuestionTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Quiz\\BuilderEditQuizTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Quiz\\BuilderListQuizzesTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Quiz\\BuilderQuizTemplate;\n+use LearnPress\\TemplateHooks\\CourseBuilder\\Settings\\BuilderSettingsTemplate;\n+use LearnPress\\TemplateHooks\\Instructor\\ListInstructorsTemplate;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+use LearnPress\\TemplateHooks\\Order\\AdminOrderItemsTemplate;\n+use LearnPress\\TemplateHooks\\Order\\AdminOrderListTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileCoursesTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileGeneralInfoTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileInstructorStatisticsTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileOrdersTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileOrderTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileQuizzesTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileStudentEnrolledTemplate;\n+use LearnPress\\TemplateHooks\\Profile\\ProfileStudentStatisticsTemplate;\n+use LearnPress\\Widgets\\LPRegisterWidget;\n+use LearnPress\\WPGDPR\\ErasePersonalData;\n+use LearnPress\\WPGDPR\\ExportPersonalData;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! class_exists( 'LearnPress' ) ) {\n+\t\u002F**\n+\t * Class LearnPress\n+\t *\n+\t * Version 3.0.1\n+\t *\u002F\n+\tclass LearnPress {\n+\t\t\u002F**\n+\t\t * Current version of the plugin\n+\t\t *\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $version = '';\n+\t\t\u002F**\n+\t\t * Version database require, use for this LP source\n+\t\t *\n+\t\t * @var int\n+\t\t *\u002F\n+\t\tpublic $db_version = 5;\n+\n+\t\t\u002F**\n+\t\t * The single instance of the class\n+\t\t *\n+\t\t * @var LearnPress object\n+\t\t *\u002F\n+\t\tprivate static $_instance = null;\n+\n+\t\t\u002F**\n+\t\t * Store the session class\n+\t\t *\n+\t\t * @var LP_Session_Handler\n+\t\t *\u002F\n+\t\tpublic $session = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Cart object\n+\t\t *\u002F\n+\t\tpublic $cart = false;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Settings\n+\t\t *\u002F\n+\t\tpublic $settings = null;\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic $query_vars = array();\n+\n+\t\t\u002F**\n+\t\t * @var array\n+\t\t *\u002F\n+\t\tpublic $global = array();\n+\n+\t\t\u002F**\n+\t\t * @var LP_Template\n+\t\t *\u002F\n+\t\tpublic $template = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Core_API\n+\t\t *\u002F\n+\t\tpublic $api = null;\n+\n+\t\t\u002F**\n+\t\t * @var LP_Admin_Core_API\n+\t\t *\u002F\n+\t\tpublic $admin_api = null;\n+\n+\t\t\u002F**\n+\t\t * @var string\n+\t\t *\u002F\n+\t\tpublic $thim_core_version_require = '2.0.0';\n+\n+\t\tpublic static $time_limit_default_of_sever = 0;\n+\n+\t\tpublic static $doc_link = 'https:\u002F\u002Flearnpresslms.com\u002Fdocs\u002F';\n+\n+\t\t\u002F**\n+\t\t * LearnPress constructor.\n+\t\t *\u002F\n+\t\tprivate function __construct() {\n+\t\t\t\u002F*if ( isset( $_POST['action'] ) && 'heartbeat' === $_POST['action'] ) {\n+\t\t\t\treturn;\n+\t\t\t}*\u002F\n+\n+\t\t\ttry {\n+\t\t\t\t$this->prepare_before_handle();\n+\n+\t\t\t\tif ( ! LP_Install::instance()->tables_install_done() ) {\n+\t\t\t\t\treturn;\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F Must handle in hook init of WordPress, when loaded plugins, theme, user.\n+\t\t\t\tadd_action( 'init', [ $this, 'lp_main_handle' ], - 1000 );\n+\n+\t\t\t\t\u002F\u002F hooks .\n+\t\t\t\t$this->hooks();\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\terror_log( __METHOD__ . ': ' . $e->getMessage() );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Prepare before handle.\n+\t\t * 1.Load constants and includes files.\n+\t\t * 2.Get default time limit of server.\n+\t\t * 3.Update version of LP undefined.\n+\t\t *\n+\t\t * @return void\n+\t\t * @since 4.2.7.6\n+\t\t * @version 1.0.0\n+\t\t *\u002F\n+\t\tpublic function prepare_before_handle() {\n+\t\t\t\u002F\u002F Define constant .\n+\t\t\t$this->plugin_defines();\n+\n+\t\t\tself::$time_limit_default_of_sever = ini_get( 'max_execution_time' );\n+\n+\t\t\t\u002F\u002F Update for case compare version of LP if LEARNPRESS_VERSION undefined\n+\t\t\t$this->version = LEARNPRESS_VERSION;\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\t$learn_press_version = get_option( 'learnpress_version', '' );\n+\t\t\t\tif ( $learn_press_version !== $this->version ) {\n+\t\t\t\t\tif ( empty( $learn_press_version ) ) { \u002F\u002F Case user install new\n+\t\t\t\t\t\t\u002F\u002F Set using modern layout for new installation.\n+\t\t\t\t\t\tupdate_option( 'learn_press_layout_single_course', 'modern' );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tupdate_option( 'learnpress_version', $this->version );\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F define table prefixes .\n+\t\t\t$this->define_tables();\n+\n+\t\t\t\u002F\u002F Include files .\n+\t\t\t$this->includes();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Define constant.\n+\t\t *\u002F\n+\t\tprotected function plugin_defines() {\n+\t\t\tif ( ! defined( 'LP_PLUGIN_FILE' ) ) {\n+\t\t\t\tdefine( 'LP_PLUGIN_FILE', __FILE__ );\n+\t\t\t\tinclude_once 'inc\u002Flp-constants.php';\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Defines database table names.\n+\t\t *\u002F\n+\t\tpublic function define_tables() {\n+\t\t\tglobal $wpdb;\n+\n+\t\t\t$tables = array(\n+\t\t\t\t'sessions',\n+\t\t\t\t'sections',\n+\t\t\t\t'section_items',\n+\t\t\t\t'user_items',\n+\t\t\t\t'user_itemmeta',\n+\t\t\t\t'user_item_results',\n+\t\t\t\t'order_items',\n+\t\t\t\t'order_itemmeta',\n+\t\t\t\t'quiz_questions',\n+\t\t\t\t'question_answers',\n+\t\t\t\t'question_answermeta',\n+\t\t\t);\n+\n+\t\t\tforeach ( $tables as $short_name ) {\n+\t\t\t\t$table_name            = $wpdb->prefix . LP_TABLE_PREFIX . $short_name;\n+\t\t\t\t$backward_key          = 'learnpress_' . $short_name;\n+\t\t\t\t$wpdb->{$backward_key} = $table_name;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Includes needed files.\n+\t\t *\u002F\n+\t\tpublic function includes() {\n+\t\t\tinclude_once LP_PLUGIN_PATH . 'vendor\u002Fautoload.php';\n+\n+\t\t\t\u002F\u002F Include required files load anywhere, both frontend and backend.\n+\t\t\t$this->include_files_global();\n+\n+\t\t\t\u002F\u002F include files when LP ready run - after setup success .\n+\t\t\tif ( ! LP_Install::instance()->tables_install_done() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Include required files Backend.\n+\t\t\t$this->include_files_admin();\n+\n+\t\t\t\u002F\u002F Include required files Frontend.\n+\t\t\t$this->include_files_frontend();\n+\n+\t\t\tnew LP_Query();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * load files anywhere, both frontend and backend\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tprivate function include_files_global() {\n+\n+\t\t\t\u002F\u002F Filter query .\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-post-type-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-post-meta-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-course-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-course-json-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-order-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-session-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-section-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-section-items-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-items-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-user-item-meta-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-quiz-questions-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-answers-filter.php';\n+\t\t\tinclude_once 'inc\u002FFilters\u002Fclass-lp-question-answermeta-filter.php';\n+\n+\t\t\t\u002F\u002F Query Database .\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-course-json-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-order-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-post-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-post-meta-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-course-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-lesson-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-section-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-section-items-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-quiz-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-quiz-questions-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-question-answers-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-sessions-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-question-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-items-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-item-meta-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-user-item-results-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-thim-cache-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-material-db.php';\n+\t\t\tinclude_once 'inc\u002FDatabases\u002Fclass-lp-statistics-db.php';\n+\n+\t\t\t\u002F\u002F File system .\n+\t\t\tinclude_once 'inc\u002Fclass-lp-file-system.php';\n+\n+\t\t\t\u002F\u002F File helper\n+\t\t\tinclude_once 'inc\u002Fclass-lp-helper.php';\n+\n+\t\t\t\u002F\u002F Template Hooks.\n+\t\t\tListCoursesTemplate::instance();\n+\t\t\tListCoursesRelatedTemplate::instance();\n+\t\t\tListInstructorsTemplate::instance();\n+\t\t\tSingleCourseTemplate::instance();\n+\t\t\tSingleCourseOfflineTemplate::instance();\n+\t\t\tSingleCourseModernLayout::instance();\n+\t\t\tSingleCourseClassicTemplate::instance();\n+\t\t\tSingleInstructorTemplate::instance();\n+\t\t\tProfileInstructorStatisticsTemplate::instance();\n+\t\t\tProfileStudentStatisticsTemplate::instance();\n+\t\t\tProfileOrdersTemplate::instance();\n+\t\t\tProfileOrderTemplate::instance();\n+\t\t\tProfileGeneralInfoTemplate::instance();\n+\t\t\tFilterCourseTemplate::instance();\n+\t\t\tProfileQuizzesTemplate::instance();\n+\t\t\tCourseBuilderTemplate::instance();\n+\t\t\tBuilderCourseTemplate::instance();\n+\t\t\tBuilderListCoursesTemplate::instance();\n+\t\t\tBuilderDashboardTemplate::instance();\n+\t\t\tBuilderSettingsTemplate::instance();\n+\t\t\tBuilderDashboardAjax::instance();\n+\t\t\tBuilderEditCourseTemplate::instance();\n+\t\t\tBuilderLessonTemplate::instance();\n+\t\t\tBuilderListLessonsTemplate::instance();\n+\t\t\tBuilderEditLessonTemplate::instance();\n+\t\t\tBuilderQuizTemplate::instance();\n+\t\t\tBuilderListQuizzesTemplate::instance();\n+\t\t\tBuilderEditQuizTemplate::instance();\n+\t\t\tBuilderQuestionTemplate::instance();\n+\t\t\tBuilderListQuestionsTemplate::instance();\n+\t\t\tBuilderEditQuestionTemplate::instance();\n+\t\t\tBuilderPopupTemplate::instance();\n+\t\t\tProfileCoursesTemplate::instance();\n+\t\t\tProfileStudentEnrolledTemplate::instance();\n+\n+\t\t\t\u002F\u002F Admin template hooks.\n+\t\t\tAdminEditCurriculumTemplate::instance();\n+\t\t\tAdminEditSettingTemplate::instance();\n+\t\t\tAdminEditQizTemplate::instance();\n+\t\t\tAdminEditQuestionTemplate::instance();\n+\t\t\tCourseMaterialTemplate::instance();\n+\t\t\tAdminOrderItemsTemplate::instance();\n+\t\t\tAdminOrderListTemplate::instance();\n+\t\t\tAdminCreateCourseAITemplate::instance();\n+\t\t\tAdminEditWithAITemplate::instance();\n+\t\t\tAdminEditCourseCurriculumWithAITemplate::instance();\n+\t\t\tAdminListStudentsEnrolled::instance();\n+\t\t\t\u002F\u002F WP GDPR\n+\t\t\tErasePersonalData::instance();\n+\t\t\tExportPersonalData::instance();\n+\n+\t\t\t\u002F\u002F Models\n+\t\t\tinclude_once 'inc\u002FModels\u002Fclass-lp-rest-response.php';\n+\t\t\tinclude_once 'inc\u002FModels\u002Fsteps\u002Fclass-lp-group-step.php';\n+\t\t\tinclude_once 'inc\u002FModels\u002Fsteps\u002Fclass-lp-step.php';\n+\t\t\tinclude_once 'inc\u002FModels\u002Fclass-lp-course-extra-info-fast-query-model.php';\n+\n+\t\t\t\u002F\u002F Handle steps.\n+\t\t\tinclude_once 'inc\u002Fhandle-steps\u002Fclass-lp-handle-steps.php';\n+\t\t\tinclude_once 'inc\u002Fhandle-steps\u002Fclass-lp-handle-upgrade-db-steps.php';\n+\n+\t\t\t\u002F\u002F LP Cache\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-courses-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-course-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-quiz-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-question-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-session-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-settings-cache.php';\n+\t\t\tinclude_once 'inc\u002Fcache\u002Fclass-lp-user-items-cache.php';\n+\n+\t\t\t\u002F\u002F Background processes.\n+\t\t\tLPBackgroundTrigger::instance();\n+\t\t\tinclude_once 'inc\u002Flibraries\u002Fwp-background-process\u002Fwp-background-processing.php';\n+\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fabstract-lp-async-request.php';\n+\t\t\t\u002F\u002Finclude_once 'inc\u002Fbackground-process\u002Fabstract-lp-async-task.php';\n+\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fclass-lp-background-single-course.php';\n+\t\t\tinclude_once 'inc\u002Fbackground-process\u002Fclass-lp-background-single-email.php';\n+\n+\t\t\t\u002F\u002F Assets object\n+\t\t\tinclude_once 'inc\u002Fclass-lp-asset-key.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-assets.php';\n+\n+\t\t\t\u002F\u002F Debug class\n+\t\t\tinclude_once 'inc\u002Fclass-lp-debug.php';\n+\n+\t\t\tinclude_once 'inc\u002Fclass-lp-settings.php';\n+\t\t\tinclude_once 'inc\u002Fabstract-settings.php';\n+\t\t\tinclude_once 'inc\u002Fsettings\u002Fabstract-settings-page.php';\n+\t\t\tinclude_once 'inc\u002Fsettings\u002Fclass-lp-settings-courses.php';\n+\t\t\tinclude_once 'inc\u002Fclass-lp-global.php';\n+\t\t\tinclude_once 'inc\u002Fclass-lp-datetime.php';\n+\n+\t\t\t\u002F\u002F Register custom-post-type and taxonomies .\n+\t\t\t\u002F*include_once 'inc\u002Fcustom-post-types\u002Fabstract.php';\n+\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fcourse.php';\n+\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Flesson.php';\n+\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquiz.php';\n+\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquestion.php';\n+\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Forder.php';*\u002F\n+\n+\t\t\tinclude_once 'inc\u002Finterfaces\u002Finterface-curd.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-array-access.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-object-data.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-post-data.php';\n+\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-course-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-section-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-lesson-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-quiz-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-question-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-order-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-user-curd.php';\n+\t\t\tinclude_once 'inc\u002Fcurds\u002Fclass-lp-user-item-curd.php';\n+\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-item.php';\n+\t\t\tinclude_once 'inc\u002Fquestion\u002Fclass-lp-question.php';\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-section.php';\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course-no-required-enroll.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-course.php';\n+\n+\t\t\tinclude_once 'inc\u002Flp-deprecated.php'; \u002F\u002F Will remove if Eduma and guest update all 4.0.0\n+\t\t\tinclude_once 'inc\u002Flp-core-functions.php';\n+\t\t\tinclude_once 'inc\u002Fclass-lp-autoloader.php';\n+\n+\t\t\tinclude_once 'inc\u002Flp-webhooks.php'; \u002F\u002F Addon learnpress-2checkout-payment v4.0.1 is using, when update v4.0.2 don't need load it.\n+\t\t\tinclude_once 'inc\u002Fclass-lp-request-handler.php';\n+\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fhelpers\u002Fclass-lp-plugins-helper.php';\n+\n+\t\t\t\u002F\u002F Todo: tungnx check those files.\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-object-query.php';\n+\t\t\tinclude_once 'inc\u002Fclass-lp-course-query.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-addon.php';\n+\t\t\tinclude_once 'inc\u002Fclass-lp-thumbnail-helper.php';\n+\t\t\tinclude_once 'inc\u002Fcache.php';\n+\n+\t\t\t\u002F\u002F Class handle check db of LP need to upgrade?\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-updater.php';\n+\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Flp-course-functions.php';\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fabstract-course.php';\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-lp-course.php';\n+\t\t\tinclude_once 'inc\u002Fquiz\u002Flp-quiz-functions.php';\n+\t\t\tinclude_once 'inc\u002Fquiz\u002Fclass-lp-quiz.php';\n+\t\t\t\u002F\u002Finclude_once 'inc\u002Flesson\u002Flp-lesson-functions.php';\n+\t\t\tinclude_once 'inc\u002Forder\u002Flp-order-functions.php';\n+\t\t\tinclude_once 'inc\u002Forder\u002Fclass-lp-order.php';\n+\n+\t\t\tinclude_once 'inc\u002Fuser\u002Flp-user-functions.php';\n+\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-user-factory.php';\n+\t\t\tinclude_once 'inc\u002Fuser\u002Fabstract-lp-user.php';\n+\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-user.php';\n+\t\t\tinclude_once 'inc\u002Fuser\u002Fclass-lp-profile.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-course.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-user-item-quiz.php';\n+\t\t\tinclude_once 'inc\u002Fuser-item\u002Fclass-lp-quiz-results.php';\n+\n+\t\t\t\u002F\u002F Shortcodes.\n+\t\t\tSingleInstructorShortcode::instance();\n+\t\t\tListInstructorsShortcode::instance();\n+\t\t\tCourseMaterialShortcode::instance();\n+\t\t\tCourseButtonShortcode::instance();\n+\t\t\tFilterCourseShortcode::instance();\n+\t\t\tListCoursesShortcode::instance();\n+\t\t\t\u002F\u002FListCourseRecentShortcode::instance();\n+\t\t\tinclude_once 'inc\u002Fclass-lp-shortcodes.php';\n+\n+\t\t\t\u002F\u002F include template functions .\n+\t\t\tinclude_once 'inc\u002Flp-template-functions.php';\n+\t\t\tinclude_once 'inc\u002Ftemplates\u002Fabstract-template.php';\n+\t\t\t\u002F\u002Finclude_once 'inc\u002Fclass-lp-template.php';\n+\n+\t\t\t\u002F\u002F Cart\n+\t\t\tinclude_once 'inc\u002Fcart\u002Fclass-lp-cart.php';\n+\t\t\tinclude_once 'inc\u002Fcart\u002Flp-cart-functions.php';\n+\n+\t\t\t\u002F\u002F Block Templates\n+\t\t\t\u002F\u002Finclude_once 'inc\u002Fblock-template\u002Fclass-abstract-block-template.php';\n+\t\t\t\u002F\u002Finclude_once 'inc\u002Fblock-template\u002Fclass-block-template-handle.php';\n+\t\t\tGutenbergHandleMain::instance();\n+\n+\t\t\t\u002F\u002F API\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-rest-api.php';\n+\t\t\tinclude_once 'inc\u002Fabstracts\u002Fabstract-rest-controller.php';\n+\t\t\tinclude_once 'inc\u002Frest-api\u002Fclass-lp-core-api.php';\n+\t\t\tinclude_once 'inc\u002Frest-api\u002Fclass-lp-admin-core-api.php';\n+\n+\t\t\t\u002F** Jwt *\u002F\n+\t\t\tinclude_once 'inc\u002Fjwt\u002Fclass-jwt-auth.php';\n+\n+\t\t\tLPRegisterWidget::instance();\n+\t\t\tinclude_once 'inc\u002Fclass-lp-widget.php';\n+\t\t\tinclude_once 'inc\u002Flp-widget-functions.php';\n+\n+\t\t\t\u002F\u002F TODO: update frontend editor before move to function include_files_admin.\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fviews\u002Fmeta-boxes\u002Fclass-lp-meta-box.php';\n+\n+\t\t\tinclude_once 'inc\u002Fclass-lp-page-controller.php';\n+\t\t\tLP_Page_Controller::instance();\n+\n+\t\t\tinclude_once 'inc\u002Fgateways\u002Fclass-lp-gateway-abstract.php';\n+\t\t\tinclude_once 'inc\u002Fgateways\u002Fclass-lp-gateways.php';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Include file run on backend\n+\t\t *\u002F\n+\t\tprivate function include_files_admin() {\n+\t\t\tif ( ! is_admin() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin-ajax.php';\n+\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin-notice.php';\n+\n+\t\t\t\u002F\u002F File handle install LP\n+\t\t\tinclude_once 'inc\u002Fclass-lp-install.php';\n+\n+\t\t\t\u002F\u002F Meta box helper\n+\t\t\tinclude_once 'inc\u002Fadmin\u002Fmeta-box\u002Fclass-lp-meta-box-helper.php';\n+\n+\t\t\t\u002F\u002F include_once 'inc\u002Fadmin\u002Fclass-lp-admin.php';\n+\t\t\t\u002F\u002F include_once 'inc\u002Fadmin\u002Fsettings\u002Fabstract-settings-page.php';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Include file run on frontend\n+\t\t *\u002F\n+\t\tprivate function include_files_frontend() {\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tinclude_once 'inc\u002Fclass-lp-assets.php';\n+\n+\t\t\tinclude_once 'inc\u002Fcourse\u002Fclass-model-user-can-view-course-item.php';\n+\n+\t\t\tinclude_once 'inc\u002Fclass-lp-ajax.php';\n+\n+\t\t\tinclude_once 'inc\u002Fclass-lp-session-handler.php';\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Main instance of LearnPress.\n+\t\t * Must load on \"init\" hook of WordPress.\n+\t\t * 1. Load text domain.\n+\t\t * 2. Handle lp ajax.\n+\t\t *\n+\t\t * @return void\n+\t\t * @version 4.2.7.6\n+\t\t * @version 1.0.2\n+\t\t *\u002F\n+\t\tpublic function lp_main_handle() {\n+\t\t\ttry {\n+\t\t\t\t\u002F\u002F Load text domain.\n+\t\t\t\t$this->load_plugin_text_domain();\n+\n+\t\t\t\t\u002F\u002F Register custom post type and taxonomies .\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fabstract.php';\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fcourse.php';\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Flesson.php';\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquiz.php';\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Fquestion.php';\n+\t\t\t\tinclude_once 'inc\u002Fcustom-post-types\u002Forder.php';\n+\n+\t\t\t\t\u002F\u002F Polylang\n+\t\t\t\tif ( defined( 'POLYLANG_VERSION' ) ) {\n+\t\t\t\t\tinclude_once 'inc\u002FExternalPlugin\u002FPolylang\u002Fclass-lp-polylang.php';\n+\t\t\t\t\tLP_Polylang::instance();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For plugin Elementor\n+\t\t\t\tif ( defined( 'ELEMENTOR_VERSION' ) ) {\n+\t\t\t\t\tLPElementor::instance();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For plugin WPSEO\n+\t\t\t\tif ( defined( 'WPSEO_FILE' ) ) {\n+\t\t\t\t\tLPYoastSeo::instance();\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F For plugin RankMath\n+\t\t\t\tif ( defined( 'RANK_MATH_VERSION' ) ) {\n+\t\t\t\t\tLPRankMath::instance();\n+\t\t\t\t}\n+\n+\t\t\t\t$this->api       = new LP_Core_API();\n+\t\t\t\t$this->admin_api = new LP_Admin_Core_API();\n+\t\t\t\t$this->get_session();\n+\t\t\t\t$this->settings = $this->settings();\n+\t\t\t\t$this->get_cart();\n+\n+\t\t\t\t\u002F\u002F Init emails\n+\t\t\t\tLP_Emails::instance();\n+\t\t\t\t\u002F\u002F Email hook notify\n+\t\t\t\tinclude_once 'inc\u002Femails\u002Fclass-lp-email-hooks.php';\n+\n+\t\t\t\tif ( is_admin() ) {\n+\t\t\t\t\t$this->check_addons_version_valid();\n+\n+\t\t\t\t\tinclude_once 'inc\u002Fadmin\u002Fclass-lp-admin.php';\n+\t\t\t\t}\n+\n+\t\t\t\t\u002F\u002F let third parties know that we're ready .\n+\t\t\t\tdo_action( 'learn-press\u002Fready' );\n+\n+\t\t\t\t\u002F\u002F For addon sorting choice old \u003C= v4.0.1\n+\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Sorting_Choice_Preload' ) ) {\n+\t\t\t\t\tif ( version_compare( LP_ADDON_SORTING_CHOICE_VER, '4.0.1', '\u003C=' ) ) {\n+\t\t\t\t\t\t$lp_addon_sorting_choice = new LP_Addon_Sorting_Choice();\n+\t\t\t\t\t\t$lp_addon_sorting_choice->init();\n+\t\t\t\t\t}\n+\t\t\t\t}*\u002F\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Init gateways, to load all payment gateways, catch callback.\n+\t\t\t\t * Must be call after learn-press\u002Fready to register hook of addon.\n+\t\t\t\t *\u002F\n+\t\t\t\tLP_Gateways::instance();\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * Fixed temporary for emails of Announcement v4.0.6, Assignment v4.1.1 addons.\n+\t\t\t\t * @since 4.2.7.4\n+\t\t\t\t * When 2 addons update to new version, will remove this code.\n+\t\t\t\t *\u002F\n+\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Announcements_Preload' ) ) {\n+\t\t\t\t\tif ( version_compare( LP_ADDON_ANNOUNCEMENTS_VER, '4.0.6', '\u003C=' ) ) {\n+\t\t\t\t\t\t$addon_announcement = LP_Addon_Announcements_Preload::$addon;\n+\t\t\t\t\t\t$addon_announcement->emails_setting();\n+\t\t\t\t\t}\n+\t\t\t\t}*\u002F\n+\t\t\t\t\u002F*if ( class_exists( 'LP_Addon_Assignment_Preload' ) ) {\n+\t\t\t\t\tif ( version_compare( LP_ADDON_ASSIGNMENT_VER, '4.1.1', '\u003C=' ) ) {\n+\t\t\t\t\t\t$addon_assignment = LP_Addon_Assignment_Preload::$addon;\n+\t\t\t\t\t\t$addon_assignment->emails_setting();\n+\t\t\t\t\t}\n+\t\t\t\t}*\u002F\n+\t\t\t} catch ( Throwable $e ) {\n+\t\t\t\tLP_Debug::error_log( $e );\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check version addons valid version require.\n+\t\t * If not valid will be to deactivate.\n+\t\t * Reload page, so not affect to hook \"learn-press\u002Fready\"\n+\t\t *\u002F\n+\t\tpublic function check_addons_version_valid() {\n+\t\t\t$addons_valid = true;\n+\t\t\t$plugins      = get_option( 'active_plugins' );\n+\n+\t\t\t$list_lp_addon_activated = preg_grep( '\u002F^learnpress-.*\u002Fi', $plugins );\n+\t\t\tforeach ( $list_lp_addon_activated as $lp_addon ) {\n+\t\t\t\t$lp_addon_info = get_file_data(\n+\t\t\t\t\tWP_PLUGIN_DIR . '\u002F' . $lp_addon,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'Require_LP_Version' => 'Require_LP_Version',\n+\t\t\t\t\t\t'Version'            => 'Version',\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\n+\t\t\t\t$lp_addon_version = $lp_addon_info['Version'];\n+\n+\t\t\t\t$addon                  = new Lp_Addon();\n+\t\t\t\t$addon->version         = $lp_addon_version;\n+\t\t\t\t$addon->plugin_base     = $lp_addon;\n+\t\t\t\t$addon->require_version = $lp_addon_info['Require_LP_Version'];\n+\t\t\t\t$addon_valid            = $addon->check_require_version_addon();\n+\n+\t\t\t\tif ( $addons_valid ) {\n+\t\t\t\t\t\u002F\u002F$addon_valid = $addon->check_require_version_lp();\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! $addon_valid ) {\n+\t\t\t\t\t$addons_valid = false;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Initial common hooks\n+\t\t *\u002F\n+\t\tpublic function hooks() {\n+\t\t\tadd_action( 'init', array( $this, 'maybe_init_mcp_abilities' ), 20 );\n+\n+\t\t\t\u002F**\n+\t\t\t * Handle lp ajax.\n+\t\t\t * Set priority after register_post_type to register capabilities for post type of LP.\n+\t\t\t *\u002F\n+\t\t\tadd_action(\n+\t\t\t\t'init',\n+\t\t\t\tfunction () {\n+\t\t\t\t\tLoadContentViaAjax::catch_lp_ajax();\n+\t\t\t\t\tLessonAjax::catch_lp_ajax();\n+\t\t\t\t\tEditCurriculumAjax::catch_lp_ajax();\n+\t\t\t\t\tEditQuizAjax::catch_lp_ajax();\n+\t\t\t\t\tEditQuestionAjax::catch_lp_ajax();\n+\t\t\t\t\tSendEmailAjax::catch_lp_ajax();\n+\t\t\t\t\tCourseBuilderAjax::catch_lp_ajax();\n+\t\t\t\t\tOpenAiAjax::catch_lp_ajax();\n+\t\t\t\t\tExportOrderCSVAjax::catch_lp_ajax();\n+\t\t\t\t\tMcpApiKeysAjax::catch_lp_ajax();\n+\t\t\t\t\tCBEditCourseAjax::catch_lp_ajax();\n+\n+\t\t\t\t\tdo_action( 'learn-press\u002Fregister-ajax-handlers' );\n+\t\t\t\t},\n+\t\t\t\t11\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Add links setting|document|addon on plugins page.\n+\t\t\tadd_filter( 'plugin_action_links_' . LP_PLUGIN_BASENAME, array( $this, 'plugin_links' ) );\n+\n+\t\t\tregister_activation_hook( LP_PLUGIN_FILE, array( $this, 'on_activate' ) );\n+\t\t\tregister_deactivation_hook( LP_PLUGIN_FILE, array( $this, 'on_deactivate' ) );\n+\n+\t\t\tadd_action(\n+\t\t\t\t'plugin_loaded',\n+\t\t\t\tfunction ( $plugin ) {\n+\t\t\t\t\t\u002F\u002F For check wp_remote call normally of WP\n+\t\t\t\t\tif ( ! empty( LP_Request::get_param( 'lp_test_wp_remote' ) ) ) {\n+\t\t\t\t\t\techo '[TEST_REMOTE]';\n+\t\t\t\t\t\tdie;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Check require version thim-core on Backend.\n+\t\t\tif ( is_admin() ) {\n+\t\t\t\tadd_action( 'before_thim_core_init', array( $this, 'check_thim_core_version_require' ) );\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Save key purchase addon when install via file download from Thimpress.\n+\t\t\tadd_action(\n+\t\t\t\t'upgrader_process_complete',\n+\t\t\t\tfunction ( $plugin_upgrader ) {\n+\t\t\t\t\tif ( ! empty( $plugin_upgrader->result ) ) {\n+\t\t\t\t\t\t$res         = $plugin_upgrader->result;\n+\t\t\t\t\t\t$path_source = $res['destination'] ?? '';\n+\t\t\t\t\t\tif ( empty( $path_source ) ) {\n+\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$key_purchase_path = realpath( $path_source . '\u002Fpurchase-code.txt' );\n+\t\t\t\t\t\tif ( file_exists( $key_purchase_path ) ) {\n+\t\t\t\t\t\t\t$purchase_code_content = file_get_contents( $key_purchase_path );\n+\t\t\t\t\t\t\tif ( empty( $purchase_code_content ) ) {\n+\t\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t$addon_slug = $res['destination_name'] ?? '';\n+\t\t\t\t\t\t\tif ( empty( $addon_slug ) ) {\n+\t\t\t\t\t\t\t\treturn;\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t\u002F\u002F Call active purchase code for site.\n+\t\t\t\t\t\t\tLP_Manager_Addons::instance()->active_site( $addon_slug, $purchase_code_content );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F Clear cache UserModel when save user.\n+\t\t\tadd_action(\n+\t\t\t\t'wp_update_user',\n+\t\t\t\tfunction ( $user_id ) {\n+\t\t\t\t\t$user = UserModel::find( $user_id, true );\n+\t\t\t\t\t$user->clean_caches();\n+\t\t\t\t}\n+\t\t\t);\n+\n+\t\t\t\u002F\u002F For temporary fix issue security of wp comments. Is it error of WP, not LP, LP only call to comments_template function.\n+\t\t\tadd_filter(\n+\t\t\t\t'comments_array',\n+\t\t\t\tfunction ( $comments_flat, $post_id ) {\n+\t\t\t\t\t\u002F\u002F Check if post type is course or item's course (lesson, quiz...)\n+\t\t\t\t\t$post_type           = get_post_type( $post_id );\n+\t\t\t\t\t$course_item_types   = CourseModel::item_types_support();\n+\t\t\t\t\t$course_item_types[] = LP_COURSE_CPT;\n+\t\t\t\t\tif ( ! in_array( $post_type, $course_item_types ) ) {\n+\t\t\t\t\t\treturn $comments_flat;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tforeach ( $comments_flat as $key => $comment ) {\n+\t\t\t\t\t\t$comment->comment_content = wp_kses_post( $comment->comment_content );\n+\t\t\t\t\t\t$comments_flat[ $key ]    = $comment;\n+\t\t\t\t\t}\n+\n+\t\t\t\t\treturn $comments_flat;\n+\t\t\t\t},\n+\t\t\t\t10,\n+\t\t\t\t2\n+\t\t\t);\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Add links to Documentation and Extensions in plugin's list of action links\n+\t\t *\n+\t\t * @param array $links Array of action links\n+\t\t *\n+\t\t * @return array\n+\t\t * @since 4.3.11\n+\t\t *\n+\t\t *\u002F\n+\t\tpublic function plugin_links( array $links ): array {\n+\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', admin_url( 'admin.php?page=learn-press-settings' ), __( 'Settings', 'learnpress' ) );\n+\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>', LearnPress::$doc_link, __( 'Documentation', 'learnpress' ) );\n+\t\t\t$links[] = sprintf( '\u003Ca href=\"%s\" target=\"_blank\">%s\u003C\u002Fa>', get_admin_url() . '\u002Fadmin.php?page=learn-press-addons', __( 'Add-ons', 'learnpress' ) );\n+\n+\t\t\treturn $links;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Trigger this function while activating Learnpress.\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t * @version 4.1.4.1\n+\t\t *\u002F\n+\t\tpublic function on_activate() {\n+\t\t\tLP_Install::instance()->on_activate();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Trigger this function while deactivating Learnpress.\n+\t\t *\n+\t\t * $since 3.0.0\n+\t\t *\n+\t\t * @hook learn_press_deactivate\n+\t\t *\u002F\n+\t\tpublic function on_deactivate() {\n+\t\t\tdo_action( 'learn-press\u002Fdeactivate', $this );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Conditionally bootstrap MCP abilities.\n+\t\t *\n+\t\t * @return void\n+\t\t *\u002F\n+\t\tpublic function maybe_init_mcp_abilities() {\n+\t\t\tif ( LP_Settings::get_option( 'enable_mcp_integration', 'no' ) !== 'yes' ) {\n+\t\t\t\treturn;\n+\t\t\t}\n+\n+\t\t\tApiKeyAuthenticator::init();\n+\t\t\tAbilities::init();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Handle load text domain for LearnPress.\n+\t\t *\n+\t\t * @since 4.2.7.4\n+\t\t * @version 1.0.1\n+\t\t *\u002F\n+\t\tpublic function load_plugin_text_domain() {\n+\t\t\t\u002F*$locale = determine_locale();\n+\t\t\t$locale = apply_filters( 'plugin_locale', $locale, 'learnpress' );\n+\n+\t\t\t$plugin_translation_path = WP_LANG_DIR . '\u002Fplugins\u002Flearnpress-' . $locale . '.mo';\n+\t\t\t$custom_translation_path = WP_LANG_DIR . '\u002Flearnpress\u002Flearnpress-' . $locale . '.mo';\n+\t\t\tif ( is_readable( $custom_translation_path ) ) {\n+\t\t\t\tunload_textdomain( LP_TEXT_DOMAIN );\n+\t\t\t\tload_textdomain( LP_TEXT_DOMAIN, $custom_translation_path );\n+\t\t\t\tload_textdomain( LP_TEXT_DOMAIN, $plugin_translation_path );\n+\t\t\t}*\u002F\n+\n+\t\t\tload_plugin_textdomain( LP_TEXT_DOMAIN, false, LP_PLUGIN_FOLDER_NAME . '\u002Flanguages' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get instance of class LP_Template.\n+\t\t *\n+\t\t * @param string $type\n+\t\t *\n+\t\t * @return LP_Template_Course|LP_Template_Profile|LP_Template_General|LP_Abstract_Template|LP_Template\n+\t\t *\n+\t\t * @throws Exception\n+\t\t * @since 3.3.0\n+\t\t *\u002F\n+\t\tpublic function template( $type = '' ) {\n+\t\t\t$this->template = LP_Template::instance();\n+\t\t\t$templates      = (array) $this->template->get_templates();\n+\n+\t\t\treturn $templates[ $type ] ?? $this->template;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get session object instance.\n+\t\t *\n+\t\t * @return mixed\n+\t\t *\u002F\n+\t\tpublic function get_session() {\n+\t\t\tif ( ! $this->session ) {\n+\t\t\t\t$this->session = LP_Session_Handler::instance();\n+\t\t\t}\n+\n+\t\t\treturn $this->session;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get settings object instance.\n+\t\t *\n+\t\t * @return bool|LP_Settings\n+\t\t *\u002F\n+\t\tpublic function settings() {\n+\t\t\treturn LP_Settings::instance();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get cart object instance for online learning market.\n+\t\t *\n+\t\t * @return LP_Cart\n+\t\t *\u002F\n+\t\tpublic function get_cart(): LP_Cart {\n+\t\t\tif ( ! $this->cart ) {\n+\t\t\t\t$this->cart = LP_Cart::instance();\n+\t\t\t}\n+\n+\t\t\treturn $this->cart;\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check type of request.\n+\t\t *\n+\t\t * @param string $type ajax, frontend or admin.\n+\t\t *\n+\t\t * @return bool\n+\t\t * @deprecated 4.2.9.4\n+\t\t *\u002F\n+\t\tpublic function is_request( $type ) {\n+\t\t\t_deprecated_function( __METHOD__, '4.2.9.4' );\n+\t\t\treturn false;\n+\n+\t\t\tswitch ( $type ) {\n+\t\t\t\tcase 'admin':\n+\t\t\t\t\treturn is_admin();\n+\t\t\t\tcase 'ajax':\n+\t\t\t\t\treturn defined( 'LP_DOING_AJAX' );\n+\t\t\t\tcase 'cron':\n+\t\t\t\t\treturn defined( 'DOING_CRON' );\n+\t\t\t\tcase 'frontend':\n+\t\t\t\t\treturn ( ! is_admin() || defined( 'LP_DOING_AJAX' ) ) && ! defined( 'DOING_CRON' );\n+\t\t\t\tdefault:\n+\t\t\t\t\treturn strtolower( $_SERVER['REQUEST_METHOD'] ) == $type;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the plugin url.\n+\t\t *\n+\t\t * @param string $sub_dir\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function plugin_url( $sub_dir = '' ) {\n+\t\t\treturn LP_PLUGIN_URL . ( $sub_dir ? \"{$sub_dir}\" : '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get the plugin path.\n+\t\t *\n+\t\t * @param string $sub_dir\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function plugin_path( $sub_dir = '' ) {\n+\t\t\treturn LP_PLUGIN_PATH . ( $sub_dir ? \"{$sub_dir}\" : '' );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Get checkout object instance\n+\t\t *\n+\t\t * @return LP_Checkout\n+\t\t *\u002F\n+\t\tpublic function checkout() {\n+\t\t\treturn LP_Checkout::instance();\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Short way to return image file is located in LearnPress directory.\n+\t\t *\n+\t\t * @param string\n+\t\t *\n+\t\t * @return string\n+\t\t *\u002F\n+\t\tpublic function image( $file ) {\n+\t\t\tif ( ! preg_match( '\u002F.(jpg|png)$\u002F', $file ) ) {\n+\t\t\t\t$file .= '.jpg';\n+\t\t\t}\n+\n+\t\t\treturn $this->plugin_url( \"assets\u002Fimages\u002F{$file}\" );\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Check require version thim-core\n+\t\t *\u002F\n+\t\tpublic function check_thim_core_version_require() {\n+\t\t\t\u002F\u002F Get thim-core info for LP check .\n+\t\t\tinclude_once ABSPATH . 'wp-admin\u002Fincludes\u002Fplugin.php';\n+\t\t\t$thim_core_info = get_file_data(\n+\t\t\t\tWP_PLUGIN_DIR . '\u002Fthim-core\u002Fthim-core.php',\n+\t\t\t\tarray(\n+\t\t\t\t\t'Name'               => 'Plugin Name',\n+\t\t\t\t\t'Require_LP_Version' => 'Require_LP_Version',\n+\t\t\t\t\t'Version'            => 'Version',\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t\tif ( version_compare( $this->thim_core_version_require, $thim_core_info['Version'], '>' ) ) {\n+\t\t\t\tdeactivate_plugins( 'thim-core\u002Fthim-core.php' );\n+\n+\t\t\t\tif ( isset( $_GET['activate'] ) ) {\n+\t\t\t\t\tunset( $_GET['activate'] );\n+\t\t\t\t}\n+\n+\t\t\t\t$message = sprintf(\n+\t\t\t\t\t'%s %s You can download %s. Read guide on %s',\n+\t\t\t\t\t'LP4 require version Thim-core:',\n+\t\t\t\t\t$this->thim_core_version_require,\n+\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fthimpresswp.github.io\u002Fthim-core\u002Fthim-core.zip\">latest version\u003C\u002Fa>',\n+\t\t\t\t\t'\u003Ca href=\"https:\u002F\u002Fdocspress.thimpress.com\u002Fupgrade-database-how-to-fix-some-issue\u002F\">here\u003C\u002Fa>'\n+\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\t\u003Cdiv class=\"notice notice-error\">\n+\t\t\t\t\t\u003Cp>\u003C?php echo wp_kses_post( $message ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php\n+\t\t\t\tdie;\n+\t\t\t}\n+\t\t}\n+\n+\t\t\u002F**\n+\t\t * Main plugin instance.\n+\t\t *\n+\t\t * @return LearnPress\n+\t\t *\u002F\n+\t\tpublic static function instance() {\n+\t\t\tif ( is_null( self::$_instance ) ) {\n+\t\t\t\tself::$_instance = new self();\n+\t\t\t}\n+\n+\t\t\treturn self::$_instance;\n+\t\t}\n+\t}\n+}\n+\n+\u002F**\n+ * Short way to load main instance of plugin\n+ *\n+ * @return LearnPress\n+ * @since  1.0\n+ * @author thimpress\n+ *\u002F\n+function LP() {\n+\treturn LearnPress::instance();\n+}\n+\n+\u002F**\n+ * Done! entry point of the plugin\n+ * Create new instance of LearnPress and put it to global\n+ *\u002F\n+$GLOBALS['LearnPress'] = LearnPress::instance();\n+\n+\u002F\u002F Load template hooks here, before theme add hooks remove.\n+\u002F\u002F Load here because this file call LearnPress::instance(), loop call.\n+require_once 'inc\u002Flp-template-hooks.php';\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Freadme.txt \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Freadme.txt\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Freadme.txt\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Freadme.txt\t2026-05-03 17:09:04.000000000 +0000\n@@ -3,7 +3,7 @@\n Donate link:\r\n Tags: elearning, education, course, lms, learning management system\r\n Tested up to: 6.9\r\n-Stable tag: 4.3.5\r\n+Stable tag: 4.3.6\r\n License: GPLv3\r\n License URI: https:\u002F\u002Fwww.gnu.org\u002Flicenses\u002Fgpl-3.0.html\r\n \r\n@@ -279,8 +279,14 @@\n \r\n == Changelog ==\r\n \r\n+= 4.3.6 (2026-05-03) =\r\n+~ Feature: course builder. For teacher, admin manager course without access WP Admin screen.\r\n+~ Fixed: link profile.\r\n+~ Fixed: save lesson change data course assigned.\r\n+~ Fixed: save author via quick edit.\r\n+\r\n = 4.3.5 (2026-04-10) =\r\n-~ Added: MCP (Model Context Protocol) support for get information courses, curriculum, lessons... with AI.\r\n+~ Added: MCP (Model Context Protocol) support for get information courses, curriculum, lessons, users enroll... with AI.\r\n ~ Fixed: minor bugs.\r\n \r\n = 4.3.4 (2026-03-30) =\r\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Farchive-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Farchive-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Farchive-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Farchive-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template default for displaying content of archive courses page.\r\n- * If you want to override layout default, please override via hook 'learn-press\u002Flist-courses\u002Flayout', or another hook inside.\r\n- * Override file is will be soon not support on the feature. Because it is many risks.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-\u002F\u002Fuse LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * @since 4.0.0\r\n- *\r\n- * @see LP_Template_General::template_header()\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-header' );\r\n-}\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-main-content' );\r\n-\r\n-$page_title = learn_press_page_title( false );\r\n-$classes    = [];\r\n-\r\n-if ( is_active_sidebar( 'archive-courses-sidebar' ) ) {\r\n-\t$classes[] = 'has-sidebar';\r\n-}\r\n-\u002F**\r\n- * @since 4.2.3.4\r\n- *\r\n- *  filter lp\u002Fshow-archive-course\u002Ftitle\r\n- *\u002F\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-content-area \u003C?php echo esc_attr( implode( $classes ) ); ?>\">\r\n-\t\u003Cdiv class=\"lp-main-content\">\r\n-\t\u003C?php if ( $page_title && apply_filters( 'lp\u002Fshow-archive-course\u002Ftitle', true ) ) : ?>\r\n-\t\t\u003Cheader class=\"learn-press-courses-header\">\r\n-\t\t\t\u003Ch1>\u003C?php echo wp_kses_post( $page_title ); ?>\u003C\u002Fh1>\r\n-\r\n-\t\t\t\u003C?php do_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription' ); ?>\r\n-\t\t\u003C\u002Fheader>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Flist-courses\u002Flayout' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * LP Hook\r\n-\t *\r\n-\t * @since 4.0.0\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Farchive-course\u002Fsidebar' );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\u003C?php\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-main-content' );\r\n-\r\n-\u002F**\r\n- * @since 4.0.0\r\n- *\r\n- * @see   LP_Template_General::template_footer()\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-footer' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template default for displaying content of archive courses page.\n+ * If you want to override layout default, please override via hook 'learn-press\u002Flist-courses\u002Flayout', or another hook inside.\n+ * Override file is will be soon not support on the feature. Because it is many risks.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.2\n+ *\u002F\n+\n+\u002F\u002Fuse LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * @since 4.0.0\n+ *\n+ * @see LP_Template_General::template_header()\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-header' );\n+}\n+\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-main-content' );\n+\n+$page_title = learn_press_page_title( false );\n+$classes    = [];\n+\n+if ( is_active_sidebar( 'archive-courses-sidebar' ) ) {\n+\t$classes[] = 'has-sidebar';\n+}\n+\u002F**\n+ * @since 4.2.3.4\n+ *\n+ *  filter lp\u002Fshow-archive-course\u002Ftitle\n+ *\u002F\n+?>\n+\n+\u003Cdiv class=\"lp-content-area \u003C?php echo esc_attr( implode( $classes ) ); ?>\">\n+\t\u003Cdiv class=\"lp-main-content\">\n+\t\u003C?php if ( $page_title && apply_filters( 'lp\u002Fshow-archive-course\u002Ftitle', true ) ) : ?>\n+\t\t\u003Cheader class=\"learn-press-courses-header\">\n+\t\t\t\u003Ch1>\u003C?php echo wp_kses_post( $page_title ); ?>\u003C\u002Fh1>\n+\n+\t\t\t\u003C?php do_action( 'lp\u002Ftemplate\u002Farchive-course\u002Fdescription' ); ?>\n+\t\t\u003C\u002Fheader>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Flist-courses\u002Flayout' ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+\t\u002F**\n+\t * LP Hook\n+\t *\n+\t * @since 4.0.0\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Farchive-course\u002Fsidebar' );\n+\t?>\n+\u003C\u002Fdiv>\n+\n+\u003C?php\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-main-content' );\n+\n+\u002F**\n+ * @since 4.0.0\n+ *\n+ * @see   LP_Template_General::template_footer()\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-footer' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Farchive-courses-template-default.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Farchive-courses-template-default.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Farchive-courses-template-default.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Farchive-courses-template-default.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,67 +1,67 @@\n-\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Archive Course\"},\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group\">\r\n-\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\r\n-\t\u003C!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"left\":\"30px\"}}}} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"75%\",\"metadata\":{\"name\":\"Column Left\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:75%\">\u003C!-- wp:query-title {\"type\":\"archive\",\"showPrefix\":false} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Bar\"},\"style\":{\"spacing\":{\"margin\":{\"bottom\":\"var:preset|spacing|30\"}}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"space-between\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-bottom:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-search \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-order-by \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\u003C!-- wp:column {\"width\":\"25%\",\"metadata\":{\"name\":\"Column Right\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:25%\">\u003C!-- wp:learnpress\u002Fcourse-filter {\"title\":\"\",\"showInRest\":false,\"searchSuggestion\":false,\"metadata\":{\"categories\":[],\"patternName\":\"core\u002Fblock\u002F384\",\"name\":\"Course Filter\"}} -->\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-author-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-tag-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fbutton-submit-filter \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fbutton-reset-filter \u002F-->\r\n-\t\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-filter -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\r\n+\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Archive Course\"},\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group\">\n+\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\n+\t\u003C!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"left\":\"30px\"}}}} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"75%\",\"metadata\":{\"name\":\"Column Left\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:75%\">\u003C!-- wp:query-title {\"type\":\"archive\",\"showPrefix\":false} \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Bar\"},\"style\":{\"spacing\":{\"margin\":{\"bottom\":\"var:preset|spacing|30\"}}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"space-between\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-bottom:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-search \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-order-by \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\n+\n+\t\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\n+\n+\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\u003C!-- wp:column {\"width\":\"25%\",\"metadata\":{\"name\":\"Column Right\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:25%\">\u003C!-- wp:learnpress\u002Fcourse-filter {\"title\":\"\",\"showInRest\":false,\"searchSuggestion\":false,\"metadata\":{\"categories\":[],\"patternName\":\"core\u002Fblock\u002F384\",\"name\":\"Course Filter\"}} -->\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-author-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-tag-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fbutton-submit-filter \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fbutton-reset-filter \u002F-->\n+\t\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-filter -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course\u002Fsingle-course-legacy.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course\u002Fsingle-course-legacy.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course\u002Fsingle-course-legacy.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course\u002Fsingle-course-legacy.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\r\n-\u003C!-- wp:group -->\r\n-\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fsingle-course-legacy \u002F-->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\r\n+\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\n+\u003C!-- wp:group -->\n+\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fsingle-course-legacy \u002F-->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-item-template-default.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-item-template-default.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-item-template-default.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-item-template-default.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\r\n-\r\n-\u003C!-- wp:learnpress\u002Fcourse-item-curriculum \u002F-->\r\n-\r\n-\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\r\n-\r\n+\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\n+\n+\u003C!-- wp:learnpress\u002Fcourse-item-curriculum \u002F-->\n+\n+\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-offline-template-default.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-offline-template-default.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-offline-template-default.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-offline-template-default.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,153 +1,153 @@\n-\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Top info\"},\"style\":{\"color\":{\"background\":\"#f1f2f8\"}},\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group has-background\" style=\"background-color:#f1f2f8\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"35px\",\"bottom\":\"35px\"}}},\"layout\":{\"type\":\"constrained\",\"contentSize\":\"70%\",\"justifyContent\":\"left\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"padding-top:35px;padding-bottom:35px\">\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h1\",\"align\":\"wide\"} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Instructor \\u0026 Category\"},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"left\",\"orientation\":\"horizontal\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"4px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:paragraph -->\r\n-\t\t\t\t\u003Cp>Last updated:\u003C\u002Fp>\r\n-\t\t\t\t\u003C!-- \u002Fwp:paragraph -->\r\n-\t\t\t\t\r\n-\t\t\t\t\u003C!-- wp:post-date {\"displayType\":\"modified\",\"style\":{\"typography\":{\"fontSize\":\"1em\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\t\t\t\t\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-address \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Single Course Main\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"70%\",\"metadata\":{\"name\":\"Content Left\"},\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|30\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:70%\">\u003C!-- wp:learnpress\u002Fcourse-description \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-target-audiences \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-features \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-requirements \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-faqs \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-instructor-info \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:comments -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-comments\">\u003C!-- wp:comments-title {\"showPostTitle\":false,\"level\":3} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comment-template -->\r\n-\t\t\t\t\u003C!-- wp:columns -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-columns\">\u003C!-- wp:column {\"width\":\"40px\"} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:40px\">\u003C!-- wp:avatar {\"size\":40,\"style\":{\"border\":{\"radius\":\"20px\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:column -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-column\">\u003C!-- wp:comment-author-name {\"fontSize\":\"small\"} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"flex\"}} -->\r\n-\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px\">\u003C!-- wp:comment-date {\"fontSize\":\"small\"} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\u003C!-- wp:comment-edit-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:comment-content \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:comment-reply-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:columns -->\r\n-\t\t\t\t\u003C!-- \u002Fwp:comment-template -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination -->\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-previous \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-numbers \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-next \u002F-->\r\n-\t\t\t\t\u003C!-- \u002Fwp:comments-pagination -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:post-comments-form \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:comments -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\u003C!-- wp:column {\"width\":\"30%\",\"metadata\":{\"name\":\"Sidebar Right\"},\"className\":\"is-style-default\",\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|20\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column is-style-default\" style=\"flex-basis:30%\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Content Inner\"},\"className\":\" lp-block-course-sidebar\",\"style\":{\"position\":{\"type\":\"sticky\",\"top\":\"0px\"},\"border\":{\"color\":\"#e2e0db\",\"width\":\"1px\"},\"spacing\":{\"padding\":{\"top\":\"0\",\"bottom\":\"0\",\"left\":\"0\",\"right\":\"0\"}}},\"backgroundColor\":\"base\",\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group lp-block-course-sidebar has-border-color has-base-background-color has-background\" style=\"border-color:#e2e0db;border-width:1px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-image {\"isLink\":false} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Info\"},\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"blockGap\":\"var:preset|spacing|20\",\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-progress \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-delivery \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-capacity \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-duration \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-offline-lesson \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-share \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-feature-review \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Related Course\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":3,\"order_by\":\"post_date\",\"related\":true,\"pagination\":false,\"tag_id\":\"\",\"term_id\":\"\"},\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-learnpress-list-courses alignwide\">\u003C!-- wp:heading -->\r\n-\t\t\u003Ch2 class=\"wp-block-heading\">Releated Course\u003C\u002Fh2>\r\n-\t\t\u003C!-- \u002Fwp:heading -->\r\n-\r\n-\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\r\n-\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\r\n+\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Top info\"},\"style\":{\"color\":{\"background\":\"#f1f2f8\"}},\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group has-background\" style=\"background-color:#f1f2f8\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"35px\",\"bottom\":\"35px\"}}},\"layout\":{\"type\":\"constrained\",\"contentSize\":\"70%\",\"justifyContent\":\"left\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"padding-top:35px;padding-bottom:35px\">\n+\t\t\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h1\",\"align\":\"wide\"} \u002F-->\n+\n+\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Instructor \\u0026 Category\"},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"left\",\"orientation\":\"horizontal\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"4px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:paragraph -->\n+\t\t\t\t\u003Cp>Last updated:\u003C\u002Fp>\n+\t\t\t\t\u003C!-- \u002Fwp:paragraph -->\n+\t\t\t\t\n+\t\t\t\t\u003C!-- wp:post-date {\"displayType\":\"modified\",\"style\":{\"typography\":{\"fontSize\":\"1em\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\t\t\t\t\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-address \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Single Course Main\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"70%\",\"metadata\":{\"name\":\"Content Left\"},\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|30\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:70%\">\u003C!-- wp:learnpress\u002Fcourse-description \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-target-audiences \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-features \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-requirements \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-faqs \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-instructor-info \u002F-->\n+\n+\t\t\t\u003C!-- wp:comments -->\n+\t\t\t\u003Cdiv class=\"wp-block-comments\">\u003C!-- wp:comments-title {\"showPostTitle\":false,\"level\":3} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comment-template -->\n+\t\t\t\t\u003C!-- wp:columns -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-columns\">\u003C!-- wp:column {\"width\":\"40px\"} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:40px\">\u003C!-- wp:avatar {\"size\":40,\"style\":{\"border\":{\"radius\":\"20px\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\t\t\t\u003C!-- wp:column -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-column\">\u003C!-- wp:comment-author-name {\"fontSize\":\"small\"} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"flex\"}} -->\n+\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px\">\u003C!-- wp:comment-date {\"fontSize\":\"small\"} \u002F-->\n+\n+\t\t\t\t\t\t\t\u003C!-- wp:comment-edit-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\t\u003C!-- wp:comment-content \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:comment-reply-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:columns -->\n+\t\t\t\t\u003C!-- \u002Fwp:comment-template -->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination -->\n+\t\t\t\t\u003C!-- wp:comments-pagination-previous \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination-numbers \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination-next \u002F-->\n+\t\t\t\t\u003C!-- \u002Fwp:comments-pagination -->\n+\n+\t\t\t\t\u003C!-- wp:post-comments-form \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:comments -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\u003C!-- wp:column {\"width\":\"30%\",\"metadata\":{\"name\":\"Sidebar Right\"},\"className\":\"is-style-default\",\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|20\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column is-style-default\" style=\"flex-basis:30%\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Content Inner\"},\"className\":\" lp-block-course-sidebar\",\"style\":{\"position\":{\"type\":\"sticky\",\"top\":\"0px\"},\"border\":{\"color\":\"#e2e0db\",\"width\":\"1px\"},\"spacing\":{\"padding\":{\"top\":\"0\",\"bottom\":\"0\",\"left\":\"0\",\"right\":\"0\"}}},\"backgroundColor\":\"base\",\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group lp-block-course-sidebar has-border-color has-base-background-color has-background\" style=\"border-color:#e2e0db;border-width:1px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-image {\"isLink\":false} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Info\"},\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"blockGap\":\"var:preset|spacing|20\",\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-progress \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-delivery \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-capacity \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-duration \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-offline-lesson \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-share \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-feature-review \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Related Course\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":3,\"order_by\":\"post_date\",\"related\":true,\"pagination\":false,\"tag_id\":\"\",\"term_id\":\"\"},\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-learnpress-list-courses alignwide\">\u003C!-- wp:heading -->\n+\t\t\u003Ch2 class=\"wp-block-heading\">Releated Course\u003C\u002Fh2>\n+\t\t\u003C!-- \u002Fwp:heading -->\n+\n+\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\n+\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-template-default.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-template-default.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-template-default.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fhtml\u002Fsingle-course-template-default.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,153 +1,153 @@\n-\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Top info\"},\"style\":{\"color\":{\"background\":\"#f1f2f8\"}},\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group has-background\" style=\"background-color:#f1f2f8\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"35px\",\"bottom\":\"35px\"}}},\"layout\":{\"type\":\"constrained\",\"contentSize\":\"70%\",\"justifyContent\":\"left\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"padding-top:35px;padding-bottom:35px\">\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h1\",\"align\":\"wide\"} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Instructor \\u0026 Category\"},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"left\",\"orientation\":\"horizontal\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"4px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:paragraph -->\r\n-\t\t\t\t\u003Cp>Last updated:\u003C\u002Fp>\r\n-\t\t\t\t\u003C!-- \u002Fwp:paragraph -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:post-date {\"format\":null,\"displayType\":\"modified\",\"style\":{\"typography\":{\"fontSize\":\"1em\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Single Course Main\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"70%\",\"metadata\":{\"name\":\"Content Left\"},\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|30\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:70%\">\u003C!-- wp:learnpress\u002Fcourse-description \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-target-audiences \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-features \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-requirements \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-faqs \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-curriculum \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-material \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:learnpress\u002Fcourse-instructor-info \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:comments -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-comments\">\u003C!-- wp:comments-title {\"showPostTitle\":false,\"level\":3} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comment-template -->\r\n-\t\t\t\t\u003C!-- wp:columns -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-columns\">\u003C!-- wp:column {\"width\":\"40px\"} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:40px\">\u003C!-- wp:avatar {\"size\":40,\"style\":{\"border\":{\"radius\":\"20px\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:column -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-column\">\u003C!-- wp:comment-author-name {\"fontSize\":\"small\"} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"flex\"}} -->\r\n-\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px\">\u003C!-- wp:comment-date {\"fontSize\":\"small\"} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\t\u003C!-- wp:comment-edit-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:comment-content \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:comment-reply-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:columns -->\r\n-\t\t\t\t\u003C!-- \u002Fwp:comment-template -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination -->\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-previous \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-numbers \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:comments-pagination-next \u002F-->\r\n-\t\t\t\t\u003C!-- \u002Fwp:comments-pagination -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:post-comments-form \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:comments -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\u003C!-- wp:column {\"width\":\"30%\",\"metadata\":{\"name\":\"Sidebar Right\"},\"className\":\"is-style-default\",\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|20\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column is-style-default\" style=\"flex-basis:30%\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Content Inner\"},\"className\":\" lp-block-course-sidebar\",\"style\":{\"position\":{\"type\":\"sticky\",\"top\":\"0px\"},\"border\":{\"color\":\"#e2e0db\",\"width\":\"1px\"},\"spacing\":{\"padding\":{\"top\":\"0\",\"bottom\":\"0\",\"left\":\"0\",\"right\":\"0\"}}},\"backgroundColor\":\"base\",\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group lp-block-course-sidebar has-border-color has-base-background-color has-background\" style=\"border-color:#e2e0db;border-width:1px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\r\n-\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-image {\"isLink\":false} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Info\"},\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"blockGap\":\"var:preset|spacing|20\",\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-featured {\"textColor\":\"base\",\"style\":{\"elements\":{\"link\":{\"color\":{\"text\":\"var:preset|color|base\"}}},\"color\":{\"background\":\"#ff3b30\"},\"spacing\":{\"padding\":{\"top\":\"4px\",\"bottom\":\"4px\",\"left\":\"12px\",\"right\":\"12px\"}},\"border\":{\"radius\":\"5px\"}}} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-progress \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-duration \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-quiz \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-share \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-feature-review \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:group {\"metadata\":{\"name\":\"Related Course\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\r\n-\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":3,\"order_by\":\"post_date\",\"related\":true,\"pagination\":false,\"tag_id\":\"\",\"term_id\":\"\"},\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-learnpress-list-courses alignwide\">\u003C!-- wp:heading -->\r\n-\t\t\u003Ch2 class=\"wp-block-heading\">Related Course\u003C\u002Fh2>\r\n-\t\t\u003C!-- \u002Fwp:heading -->\r\n-\r\n-\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\r\n-\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:group -->\r\n-\r\n-\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\r\n+\u003C!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \u002F-->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Course Top info\"},\"style\":{\"color\":{\"background\":\"#f1f2f8\"}},\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group has-background\" style=\"background-color:#f1f2f8\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"\",\"style\":{\"spacing\":{\"padding\":{\"top\":\"35px\",\"bottom\":\"35px\"}}},\"layout\":{\"type\":\"constrained\",\"contentSize\":\"70%\",\"justifyContent\":\"left\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"padding-top:35px;padding-bottom:35px\">\n+\t\t\t\u003C!-- wp:learnpress\u002Fbreadcrumb {\"align\":\"wide\",\"style\":{\"elements\":{\"link\":{\":hover\":{\"color\":{\"text\":\"#ffb606\"}}}}}} \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h1\",\"align\":\"wide\"} \u002F-->\n+\n+\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Instructor \\u0026 Category\"},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"left\",\"orientation\":\"horizontal\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"4px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"left\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:paragraph -->\n+\t\t\t\t\u003Cp>Last updated:\u003C\u002Fp>\n+\t\t\t\t\u003C!-- \u002Fwp:paragraph -->\n+\n+\t\t\t\t\u003C!-- wp:post-date {\"format\":null,\"displayType\":\"modified\",\"style\":{\"typography\":{\"fontSize\":\"1em\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Single Course Main\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:columns {\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\u003C!-- wp:column {\"width\":\"70%\",\"metadata\":{\"name\":\"Content Left\"},\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|30\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:70%\">\u003C!-- wp:learnpress\u002Fcourse-description \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-target-audiences \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-features \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-requirements \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-faqs \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-curriculum \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-material \u002F-->\n+\n+\t\t\t\u003C!-- wp:learnpress\u002Fcourse-instructor-info \u002F-->\n+\n+\t\t\t\u003C!-- wp:comments -->\n+\t\t\t\u003Cdiv class=\"wp-block-comments\">\u003C!-- wp:comments-title {\"showPostTitle\":false,\"level\":3} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comment-template -->\n+\t\t\t\t\u003C!-- wp:columns -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-columns\">\u003C!-- wp:column {\"width\":\"40px\"} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis:40px\">\u003C!-- wp:avatar {\"size\":40,\"style\":{\"border\":{\"radius\":\"20px\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\t\t\t\u003C!-- wp:column -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-column\">\u003C!-- wp:comment-author-name {\"fontSize\":\"small\"} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"flex\"}} -->\n+\t\t\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px\">\u003C!-- wp:comment-date {\"fontSize\":\"small\"} \u002F-->\n+\n+\t\t\t\t\t\t\t\u003C!-- wp:comment-edit-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\t\u003C!-- wp:comment-content \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:comment-reply-link {\"fontSize\":\"small\"} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:columns -->\n+\t\t\t\t\u003C!-- \u002Fwp:comment-template -->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination -->\n+\t\t\t\t\u003C!-- wp:comments-pagination-previous \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination-numbers \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:comments-pagination-next \u002F-->\n+\t\t\t\t\u003C!-- \u002Fwp:comments-pagination -->\n+\n+\t\t\t\t\u003C!-- wp:post-comments-form \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:comments -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\u003C!-- wp:column {\"width\":\"30%\",\"metadata\":{\"name\":\"Sidebar Right\"},\"className\":\"is-style-default\",\"style\":{\"spacing\":{\"blockGap\":\"var:preset|spacing|20\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-column is-style-default\" style=\"flex-basis:30%\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Content Inner\"},\"className\":\" lp-block-course-sidebar\",\"style\":{\"position\":{\"type\":\"sticky\",\"top\":\"0px\"},\"border\":{\"color\":\"#e2e0db\",\"width\":\"1px\"},\"spacing\":{\"padding\":{\"top\":\"0\",\"bottom\":\"0\",\"left\":\"0\",\"right\":\"0\"}}},\"backgroundColor\":\"base\",\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group lp-block-course-sidebar has-border-color has-base-background-color has-background\" style=\"border-color:#e2e0db;border-width:1px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">\n+\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-image {\"isLink\":false} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:group {\"metadata\":{\"name\":\"Info\"},\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"blockGap\":\"var:preset|spacing|20\",\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-featured {\"textColor\":\"base\",\"style\":{\"elements\":{\"link\":{\"color\":{\"text\":\"var:preset|color|base\"}}},\"color\":{\"background\":\"#ff3b30\"},\"spacing\":{\"padding\":{\"top\":\"4px\",\"bottom\":\"4px\",\"left\":\"12px\",\"right\":\"12px\"}},\"border\":{\"radius\":\"5px\"}}} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-progress \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-duration \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-quiz \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-level \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-share \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-feature-review \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:group {\"metadata\":{\"name\":\"Related Course\"},\"align\":\"wide\",\"layout\":{\"type\":\"constrained\"}} -->\n+\u003Cdiv class=\"wp-block-group alignwide\">\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":3,\"order_by\":\"post_date\",\"related\":true,\"pagination\":false,\"tag_id\":\"\",\"term_id\":\"\"},\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-learnpress-list-courses alignwide\">\u003C!-- wp:heading -->\n+\t\t\u003Ch2 class=\"wp-block-heading\">Related Course\u003C\u002Fh2>\n+\t\t\u003C!-- \u002Fwp:heading -->\n+\n+\t\t\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\n+\t\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\",\"isLink\":true} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"radius\":\"9px\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:group -->\n+\n+\u003C!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \u002F-->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fgrid-courses-pattern.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fgrid-courses-pattern.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fgrid-courses-pattern.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fgrid-courses-pattern.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\r\n-\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\r\n-\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\r\n-\r\n-\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\r\n+\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\n+\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\n+\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\n+\n+\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\n+\n+\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Flist-courses-pattern.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Flist-courses-pattern.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Flist-courses-pattern.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Flist-courses-pattern.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\r\n-\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template -->\r\n-\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:columns {\"verticalAlignment\":\"top\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"0\",\"left\":\"0\"}},\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}}} -->\r\n-\t\t\u003Cdiv class=\"wp-block-columns are-vertically-aligned-top has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:column {\"verticalAlignment\":\"top\",\"width\":\"45%\"} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-column is-vertically-aligned-top\" style=\"flex-basis:45%\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"bottomLeft\":\"10px\",\"bottomRight\":\"0px\"}},\"layout\":{\"selfStretch\":\"fixed\",\"flexSize\":\"40%\"}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\t\u003C!-- wp:column {\"verticalAlignment\":\"top\",\"width\":\"55%\"} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-column is-vertically-aligned-top\" style=\"flex-basis:55%\">\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\",\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"space-between\"}} -->\r\n-\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\r\n+\u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\n+\u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template -->\n+\t\u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:columns {\"verticalAlignment\":\"top\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"0\",\"left\":\"0\"}},\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}}} -->\n+\t\t\u003Cdiv class=\"wp-block-columns are-vertically-aligned-top has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:column {\"verticalAlignment\":\"top\",\"width\":\"45%\"} -->\n+\t\t\t\u003Cdiv class=\"wp-block-column is-vertically-aligned-top\" style=\"flex-basis:45%\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"bottomLeft\":\"10px\",\"bottomRight\":\"0px\"}},\"layout\":{\"selfStretch\":\"fixed\",\"flexSize\":\"40%\"}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\t\u003C!-- wp:column {\"verticalAlignment\":\"top\",\"width\":\"55%\"} -->\n+\t\t\t\u003Cdiv class=\"wp-block-column is-vertically-aligned-top\" style=\"flex-basis:55%\">\u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\",\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\"}}},\"layout\":{\"type\":\"default\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\" style=\"padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"space-between\"}} -->\n+\t\t\t\t\t\u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+\t\t\t\t\t\t\u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:column -->\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:columns -->\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+\u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fsingle-instructor-pattern.html \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fsingle-instructor-pattern.html\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fsingle-instructor-pattern.html\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fblock\u002Fpatterns\u002Fsingle-instructor-pattern.html\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C!-- wp:group {\"align\":\"wide\",\"layout\":{\"type\":\"default\"}} -->\r\n-\u003Cdiv class=\"wp-block-group alignwide\">\r\n-\t\u003C!-- wp:columns {\"align\":\"wide\"} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\r\n-\t\t\u003C!-- wp:column -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\">\r\n-\t\t\t\u003C!-- wp:learnpress\u002Finstructor-background {\"position\":\"bottom\",\"size\":\"contain\"} \u002F-->\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\r\n-\r\n-\t\u003C!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"0\",\"left\":\"var:preset|spacing|40\"}}}} -->\r\n-\t\u003Cdiv class=\"wp-block-columns alignwide\">\r\n-\t\t\u003C!-- wp:column {\"width\":\"120px\"} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis: 120px\">\r\n-\t\t\t\u003C!-- wp:learnpress\u002Finstructor-avatar {\"style\":{\"border\":{\"radius\":\"50%\"}}} \u002F-->\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\r\n-\t\t\u003C!-- wp:column {\"width\":\"\"} -->\r\n-\t\t\u003Cdiv class=\"wp-block-column\">\r\n-\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\",\"flexWrap\":\"nowrap\",\"verticalAlignment\":\"space-between\"}} -->\r\n-\t\t\t\u003Cdiv class=\"wp-block-group\">\r\n-\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"space-between\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-name {\"style\":{\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-social \u002F-->\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\r\n-\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\"}} -->\r\n-\t\t\t\t\u003Cdiv class=\"wp-block-group\">\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-course \u002F-->\r\n-\r\n-\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-student \u002F-->\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C!-- \u002Fwp:group -->\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C!-- \u002Fwp:column -->\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C!-- \u002Fwp:columns -->\r\n-\r\n-    \u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\r\n-    \u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\r\n-        \u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\r\n-            \u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\r\n-\r\n-                \u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\r\n-                \u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\r\n-\r\n-                    \u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\r\n-                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\r\n-\r\n-                        \u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\r\n-                    \u003C!-- \u002Fwp:group -->\r\n-\r\n-                    \u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\r\n-                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\r\n-\r\n-                        \u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\r\n-                    \u003C!-- \u002Fwp:group -->\r\n-\r\n-                    \u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\r\n-                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\r\n-\r\n-                        \u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\r\n-                    \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-                \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-            \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\r\n-        \u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\r\n-    \u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C!-- wp:group {\"align\":\"wide\",\"layout\":{\"type\":\"default\"}} -->\n+\u003Cdiv class=\"wp-block-group alignwide\">\n+\t\u003C!-- wp:columns {\"align\":\"wide\"} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\n+\t\t\u003C!-- wp:column -->\n+\t\t\u003Cdiv class=\"wp-block-column\">\n+\t\t\t\u003C!-- wp:learnpress\u002Finstructor-background {\"position\":\"bottom\",\"size\":\"contain\"} \u002F-->\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\t\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\n+\n+\t\u003C!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"0\",\"left\":\"var:preset|spacing|40\"}}}} -->\n+\t\u003Cdiv class=\"wp-block-columns alignwide\">\n+\t\t\u003C!-- wp:column {\"width\":\"120px\"} -->\n+\t\t\u003Cdiv class=\"wp-block-column\" style=\"flex-basis: 120px\">\n+\t\t\t\u003C!-- wp:learnpress\u002Finstructor-avatar {\"style\":{\"border\":{\"radius\":\"50%\"}}} \u002F-->\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\n+\t\t\u003C!-- wp:column {\"width\":\"\"} -->\n+\t\t\u003Cdiv class=\"wp-block-column\">\n+\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\",\"flexWrap\":\"nowrap\",\"verticalAlignment\":\"space-between\"}} -->\n+\t\t\t\u003Cdiv class=\"wp-block-group\">\n+\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\",\"justifyContent\":\"space-between\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-name {\"style\":{\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-social \u002F-->\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\n+\t\t\t\t\u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"nowrap\"}} -->\n+\t\t\t\t\u003Cdiv class=\"wp-block-group\">\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-course \u002F-->\n+\n+\t\t\t\t\t\u003C!-- wp:learnpress\u002Finstructor-student \u002F-->\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C!-- \u002Fwp:group -->\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C!-- \u002Fwp:group -->\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C!-- \u002Fwp:column -->\n+\t\u003C\u002Fdiv>\n+\t\u003C!-- \u002Fwp:columns -->\n+\n+    \u003C!-- wp:learnpress\u002Flist-courses {\"courseQuery\":{\"limit\":6,\"order_by\":\"post_date\",\"pagination\":true,\"related\":false,\"term_id\":\"\",\"tag_id\":\"\"}} -->\n+    \u003Cdiv class=\"wp-block-learnpress-list-courses\">\u003C!-- wp:learnpress\u002Fcourse-item-template {\"layout\":\"grid\"} -->\n+        \u003Cdiv class=\"wp-block-learnpress-course-item-template\">\u003C!-- wp:group {\"metadata\":{\"name\":\"Item Inner\"},\"style\":{\"border\":{\"radius\":\"10px\",\"color\":\"#e2e0db\",\"width\":\"1px\"}},\"layout\":{\"type\":\"default\"}} -->\n+            \u003Cdiv class=\"wp-block-group has-border-color\" style=\"border-color:#e2e0db;border-width:1px;border-radius:10px\">\u003C!-- wp:learnpress\u002Fcourse-image {\"style\":{\"border\":{\"radius\":{\"topLeft\":\"10px\",\"topRight\":\"10px\",\"bottomLeft\":\"0px\",\"bottomRight\":\"0px\"}}}} \u002F-->\n+\n+                \u003C!-- wp:group {\"style\":{\"spacing\":{\"padding\":{\"right\":\"var:preset|spacing|30\",\"left\":\"var:preset|spacing|30\",\"top\":\"var:preset|spacing|30\",\"bottom\":\"var:preset|spacing|30\"},\"margin\":{\"top\":\"0px\",\"bottom\":\"0px\"}}},\"layout\":{\"type\":\"default\"}} -->\n+                \u003Cdiv class=\"wp-block-group\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\u003C!-- wp:learnpress\u002Fcourse-title {\"tag\":\"h3\"} \u002F-->\n+\n+                    \u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"orientation\":\"vertical\"}} -->\n+                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-instructor \u002F-->\n+\n+                        \u003C!-- wp:learnpress\u002Fcourse-categories \u002F-->\u003C\u002Fdiv>\n+                    \u003C!-- \u002Fwp:group -->\n+\n+                    \u003C!-- wp:group {\"style\":{\"spacing\":{\"blockGap\":\"8px\"}},\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\"}} -->\n+                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-lesson {\"showLabel\":false} \u002F-->\n+\n+                        \u003C!-- wp:learnpress\u002Fcourse-student {\"showLabel\":false} \u002F-->\u003C\u002Fdiv>\n+                    \u003C!-- \u002Fwp:group -->\n+\n+                    \u003C!-- wp:group {\"layout\":{\"type\":\"flex\",\"flexWrap\":\"wrap\",\"justifyContent\":\"stretch\",\"orientation\":\"vertical\"}} -->\n+                    \u003Cdiv class=\"wp-block-group\">\u003C!-- wp:learnpress\u002Fcourse-price \u002F-->\n+\n+                        \u003C!-- wp:learnpress\u002Fcourse-button-read-more {\"style\":{\"border\":{\"width\":\"1px\",\"color\":\"#686868\",\"radius\":\"9px\"},\"layout\":{\"selfStretch\":\"fit\",\"flexSize\":null}}} \u002F-->\u003C\u002Fdiv>\n+                    \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+                \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+            \u003C!-- \u002Fwp:group -->\u003C\u002Fdiv>\n+        \u003C!-- \u002Fwp:learnpress\u002Fcourse-item-template -->\u003C\u002Fdiv>\n+    \u003C!-- \u002Fwp:learnpress\u002Flist-courses -->\n+\n+\u003C\u002Fdiv>\n \u003C!-- \u002Fwp:group -->\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-logged-in.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-logged-in.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-logged-in.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-logged-in.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying logged in form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-logged-in.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! is_user_logged_in() ) {\r\n-\treturn;\r\n-}\r\n-\r\n-global $user_identity;\r\n-?>\r\n-\r\n-\u003Cdiv id=\"checkout-account-logged-in\" class=\"lp-checkout-block left\">\r\n-\t\u003Cp>\r\n-\t\t\u003C?php\r\n-\t\tprintf(\r\n-\t\t\t__( 'Logged in as \u003Ca href=\"%1$s\">%2$s\u003C\u002Fa>.', 'learnpress' ),\r\n-\t\t\tLP_Page_Controller::get_link_page( 'profile' ),\r\n-\t\t\t$user_identity\r\n-\t\t);\r\n-\t\t?>\r\n-\r\n-\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( wp_logout_url( get_permalink() ) ); ?>\" title=\"\u003C?php esc_attr_e( 'Log out of this account', 'learnpress' ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Log out &raquo;', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying logged in form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-logged-in.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! is_user_logged_in() ) {\n+\treturn;\n+}\n+\n+global $user_identity;\n+?>\n+\n+\u003Cdiv id=\"checkout-account-logged-in\" class=\"lp-checkout-block left\">\n+\t\u003Cp>\n+\t\t\u003C?php\n+\t\tprintf(\n+\t\t\t__( 'Logged in as \u003Ca href=\"%1$s\">%2$s\u003C\u002Fa>.', 'learnpress' ),\n+\t\t\tLP_Page_Controller::get_link_page( 'profile' ),\n+\t\t\t$user_identity\n+\t\t);\n+\t\t?>\n+\n+\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( wp_logout_url( get_permalink() ) ); ?>\" title=\"\u003C?php esc_attr_e( 'Log out of this account', 'learnpress' ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Log out &raquo;', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-login.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-login.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-login.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-login.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,70 +1,70 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying log in form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-login.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( is_user_logged_in() ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$checked = 'checked=\"checked\"';\r\n-if ( ! is_user_logged_in() && LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\r\n-\t$checked = '';\r\n-}\r\n-?>\r\n-\r\n-\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-login\" \u003C?php echo $checked ?> name=\"checkout-account-switch-form\" value=\"login\"\u002F>\r\n-\u003Cdiv id=\"checkout-account-login\" class=\"lp-checkout-block left\">\r\n-\r\n-\t\u003Ch4>\u003C?php esc_html_e( 'Sign in', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\r\n-\t\u003Cul class=\"lp-form-fields\">\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"username\">\u003C?php esc_html_e( 'Username or email', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput type=\"text\" name=\"username\" id=\"username\" placeholder=\"\u003C?php esc_attr_e( 'Email or username', 'learnpress' ); ?>\" autocomplete=\"username\" \u002F>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput type=\"password\" name=\"password\" id=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"current-password\" \u002F>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-account-login-fields' ); ?>\r\n-\r\n-\u003C!--\t\u003Cinput type=\"hidden\" name=\"learn-press-checkout-nonce\" value=\"-->\u003C?php \u002F\u002Fecho wp_create_nonce( 'learn-press-checkout-login' ); ?>\u003C!--\">-->\r\n-\t\u003Cp class=\"lp-checkout-remember\">\r\n-\t\t\u003Clabel>\r\n-\t\t\t\u003Cinput type=\"checkbox\" name=\"rememberme\"\u002F>\r\n-\t\t\t\u003C?php esc_html_e( 'Remember me', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\r\n-\t\t\u003Ca class=\"lp-lost-password-link\" href=\"\u003C?php echo esc_url_raw( wp_lostpassword_url() ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'Lost password?', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fa>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003C?php\r\n-\t\u002F\u002F Add hook of WordPress\r\n-\tdo_action( 'login_form' );\r\n-\tdo_action( 'login_enqueue_scripts' );\r\n-\t?>\r\n-\r\n-\t\u003Cp class=\"lp-checkout-sign-up-link\">\r\n-\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_register() ) : ?>\r\n-\t\t\t\u003C?php esc_html_e( 'Don\\'t have an account?', 'learnpress' ); ?>\r\n-\t\t\t\u003Ca href=\"javascript: void(0);\">\r\n-\t\t\t\t\u003Clabel for=\"checkout-account-switch-to-register\">\u003C?php echo esc_html_x( 'Sign up', 'checkout sign up link', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fa>.\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php learn_press_get_template( 'checkout\u002Fguest-checkout-link' ); ?>\r\n-\t\u003C\u002Fp>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying log in form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-login.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( is_user_logged_in() ) {\n+\treturn;\n+}\n+\n+$checked = 'checked=\"checked\"';\n+if ( ! is_user_logged_in() && LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\n+\t$checked = '';\n+}\n+?>\n+\n+\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-login\" \u003C?php echo $checked ?> name=\"checkout-account-switch-form\" value=\"login\"\u002F>\n+\u003Cdiv id=\"checkout-account-login\" class=\"lp-checkout-block left\">\n+\n+\t\u003Ch4>\u003C?php esc_html_e( 'Sign in', 'learnpress' ); ?>\u003C\u002Fh4>\n+\n+\t\u003Cul class=\"lp-form-fields\">\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"username\">\u003C?php esc_html_e( 'Username or email', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput type=\"text\" name=\"username\" id=\"username\" placeholder=\"\u003C?php esc_attr_e( 'Email or username', 'learnpress' ); ?>\" autocomplete=\"username\" \u002F>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput type=\"password\" name=\"password\" id=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"current-password\" \u002F>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-account-login-fields' ); ?>\n+\n+\u003C!--\t\u003Cinput type=\"hidden\" name=\"learn-press-checkout-nonce\" value=\"-->\u003C?php \u002F\u002Fecho wp_create_nonce( 'learn-press-checkout-login' ); ?>\u003C!--\">-->\n+\t\u003Cp class=\"lp-checkout-remember\">\n+\t\t\u003Clabel>\n+\t\t\t\u003Cinput type=\"checkbox\" name=\"rememberme\"\u002F>\n+\t\t\t\u003C?php esc_html_e( 'Remember me', 'learnpress' ); ?>\n+\t\t\u003C\u002Flabel>\n+\n+\t\t\u003Ca class=\"lp-lost-password-link\" href=\"\u003C?php echo esc_url_raw( wp_lostpassword_url() ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'Lost password?', 'learnpress' ); ?>\n+\t\t\u003C\u002Fa>\n+\t\u003C\u002Fp>\n+\n+\t\u003C?php\n+\t\u002F\u002F Add hook of WordPress\n+\tdo_action( 'login_form' );\n+\tdo_action( 'login_enqueue_scripts' );\n+\t?>\n+\n+\t\u003Cp class=\"lp-checkout-sign-up-link\">\n+\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_register() ) : ?>\n+\t\t\t\u003C?php esc_html_e( 'Don\\'t have an account?', 'learnpress' ); ?>\n+\t\t\t\u003Ca href=\"javascript: void(0);\">\n+\t\t\t\t\u003Clabel for=\"checkout-account-switch-to-register\">\u003C?php echo esc_html_x( 'Sign up', 'checkout sign up link', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fa>.\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php learn_press_get_template( 'checkout\u002Fguest-checkout-link' ); ?>\n+\t\u003C\u002Fp>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-register.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-register.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Faccount-register.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Faccount-register.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,63 +1,63 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying register form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-register.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-register\" name=\"checkout-account-switch-form\" value=\"register\"\u002F>\r\n-\u003Cdiv id=\"checkout-account-register\" class=\"lp-checkout-block left\">\r\n-\r\n-\t\u003Ch4>\u003C?php esc_html_e( 'Sign up', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\r\n-\t\u003Cul class=\"lp-form-fields\">\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register-fields' ); ?>\r\n-\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id =\"reg_email\" name=\"reg_email\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Email', 'learnpress' ); ?>\" autocomplete=\"email\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' ) ); ?>\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_username\">\u003C?php esc_html_e( 'Username', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id =\"reg_username\" name=\"reg_username\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Username', 'learnpress' ); ?>\" autocomplete=\"username\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' ) ); ?>\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id =\"reg_password\" name=\"reg_password\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"new-password\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"reg_password2\">\u003C?php esc_html_e( 'Confirm Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cinput id =\"reg_password2\" name=\"reg_password2\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"off\">\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-register-fields' ); ?>\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php\r\n-\t\u002F\u002F Add hook of WordPress\r\n-\tdo_action( 'register_form' );\r\n-\tdo_action( 'login_enqueue_scripts' );\r\n-\t?>\r\n-\r\n-\t\u003C?php \u002F\u002Fwp_nonce_field( 'learn-press-checkout-register', 'learn-press-checkout-nonce' ); ?>\r\n-\r\n-\t\u003Cp class=\"lp-checkout-sign-in-link\">\r\n-\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_login() ) : ?>\r\n-\t\t\t\u003C?php esc_html_e( 'Already had an account?', 'learnpress' ); ?>\r\n-\t\t\t\u003Ca href=\"javascript: void(0);\">\r\n-\t\t\t\t\u003Clabel for=\"checkout-account-switch-to-login\">\u003C?php esc_html_e( 'Sign in', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fa>.\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php learn_press_get_template( 'checkout\u002Fguest-checkout-link' ); ?>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-form-register' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying register form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform-register.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-register\" name=\"checkout-account-switch-form\" value=\"register\"\u002F>\n+\u003Cdiv id=\"checkout-account-register\" class=\"lp-checkout-block left\">\n+\n+\t\u003Ch4>\u003C?php esc_html_e( 'Sign up', 'learnpress' ); ?>\u003C\u002Fh4>\n+\n+\t\u003Cul class=\"lp-form-fields\">\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register-fields' ); ?>\n+\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id =\"reg_email\" name=\"reg_email\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Email', 'learnpress' ); ?>\" autocomplete=\"email\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' ) ); ?>\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_username\">\u003C?php esc_html_e( 'Username', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id =\"reg_username\" name=\"reg_username\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Username', 'learnpress' ); ?>\" autocomplete=\"username\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' ) ); ?>\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id =\"reg_password\" name=\"reg_password\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"new-password\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"reg_password2\">\u003C?php esc_html_e( 'Confirm Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cinput id =\"reg_password2\" name=\"reg_password2\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"off\">\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-register-fields' ); ?>\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php\n+\t\u002F\u002F Add hook of WordPress\n+\tdo_action( 'register_form' );\n+\tdo_action( 'login_enqueue_scripts' );\n+\t?>\n+\n+\t\u003C?php \u002F\u002Fwp_nonce_field( 'learn-press-checkout-register', 'learn-press-checkout-nonce' ); ?>\n+\n+\t\u003Cp class=\"lp-checkout-sign-in-link\">\n+\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_login() ) : ?>\n+\t\t\t\u003C?php esc_html_e( 'Already had an account?', 'learnpress' ); ?>\n+\t\t\t\u003Ca href=\"javascript: void(0);\">\n+\t\t\t\t\u003Clabel for=\"checkout-account-switch-to-login\">\u003C?php esc_html_e( 'Sign in', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fa>.\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php learn_press_get_template( 'checkout\u002Fguest-checkout-link' ); ?>\n+\t\u003C\u002Fp>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-form-register' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fempty-cart.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fempty-cart.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fempty-cart.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fempty-cart.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying notice empty cart form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fempty-cart.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-do_action( 'learn-press\u002Fbefore-empty-cart-message' );\r\n-\r\n-learn_press_display_message( esc_html__( 'Your cart is currently empty.', 'learnpress' ), 'error' );\r\n-\r\n-do_action( 'learn-press\u002Fafter-empty-cart-message' );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying notice empty cart form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fempty-cart.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+do_action( 'learn-press\u002Fbefore-empty-cart-message' );\n+\n+learn_press_display_message( esc_html__( 'Your cart is currently empty.', 'learnpress' ), 'error' );\n+\n+do_action( 'learn-press\u002Fafter-empty-cart-message' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fform.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fform.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fform.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fform.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying checkout form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.5\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$checkout = LearnPress::instance()->checkout();\r\n-?>\r\n-\u003C?php\r\n-if ( ! is_user_logged_in() ) {\r\n-\t?>\r\n-\t\u003Cdiv class=\"learn-press-message error\">\r\n-\t\t\u003C?php\r\n-\t\tprintf(\r\n-\t\t\t__( 'Please %s in to enroll in the course!', 'learnpress' ),\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Ca class=\"lp-link-login\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\tlearn_press_get_login_url( LP_Helper::getUrlCurrent() ),\r\n-\t\t\t\t__( 'login', 'learnpress' )\r\n-\t\t\t)\r\n-\t\t);\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n-\r\n-learn_press_show_message();\r\n-?>\r\n-\t\u003Cform method=\"post\" id=\"learn-press-checkout-form\" name=\"learn-press-checkout-form\" class=\"lp-checkout-form\"\r\n-\t\t  tabindex=\"0\" action=\"\u003C?php echo esc_url_raw( learn_press_get_checkout_url() ); ?>\"\r\n-\t\t  enctype=\"multipart\u002Fform-data\">\r\n-\t\t\u003C?php\r\n-\t\tif ( has_action( 'learn-press\u002Fbefore-checkout-form' ) ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"lp-checkout-form__before\">\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-checkout-form' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fcheckout-form' );\r\n-\r\n-\t\tif ( has_action( 'learn-press\u002Fafter-checkout-form' ) ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"lp-checkout-form__after\">\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-form' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\r\n-\t\twp_nonce_field( 'learn-press-checkout', 'learn-press-checkout-nonce', false );\r\n-\t\t?>\r\n-\t\u003C\u002Fform>\r\n-\u003C?php\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying checkout form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fform.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.5\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$checkout = LearnPress::instance()->checkout();\n+?>\n+\u003C?php\n+if ( ! is_user_logged_in() ) {\n+\t?>\n+\t\u003Cdiv class=\"learn-press-message error\">\n+\t\t\u003C?php\n+\t\tprintf(\n+\t\t\t__( 'Please %s in to enroll in the course!', 'learnpress' ),\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Ca class=\"lp-link-login\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\tlearn_press_get_login_url( LP_Helper::getUrlCurrent() ),\n+\t\t\t\t__( 'login', 'learnpress' )\n+\t\t\t)\n+\t\t);\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\n+\n+learn_press_show_message();\n+?>\n+\t\u003Cform method=\"post\" id=\"learn-press-checkout-form\" name=\"learn-press-checkout-form\" class=\"lp-checkout-form\"\n+\t\t  tabindex=\"0\" action=\"\u003C?php echo esc_url_raw( learn_press_get_checkout_url() ); ?>\"\n+\t\t  enctype=\"multipart\u002Fform-data\">\n+\t\t\u003C?php\n+\t\tif ( has_action( 'learn-press\u002Fbefore-checkout-form' ) ) {\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"lp-checkout-form__before\">\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-checkout-form' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\tdo_action( 'learn-press\u002Fcheckout-form' );\n+\n+\t\tif ( has_action( 'learn-press\u002Fafter-checkout-form' ) ) {\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"lp-checkout-form__after\">\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-checkout-form' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C?php\n+\t\t}\n+\n+\t\twp_nonce_field( 'learn-press-checkout', 'learn-press-checkout-nonce', false );\n+\t\t?>\n+\t\u003C\u002Fform>\n+\u003C?php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fguest-checkout-link.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fguest-checkout-link.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fguest-checkout-link.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fguest-checkout-link.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying link to show form for Guest checkout.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\r\n-\treturn;\r\n-}\r\n-\r\n-esc_html_e( 'Or quick checkout as', 'learnpress' ); ?>\r\n-\r\n-\u003Ca href=\"javascript: void(0);\">\r\n-\t\u003Clabel for=\"checkout-account-switch-to-guest\">\r\n-\t\t\u003C?php echo esc_html_x( 'Guest', 'checkout guest link', 'learnpress' ); ?>\r\n-\t\u003C\u002Flabel>\r\n-\u003C\u002Fa>.\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying link to show form for Guest checkout.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! LearnPress::instance()->checkout()->is_enable_guest_checkout() ) {\n+\treturn;\n+}\n+\n+esc_html_e( 'Or quick checkout as', 'learnpress' ); ?>\n+\n+\u003Ca href=\"javascript: void(0);\">\n+\t\u003Clabel for=\"checkout-account-switch-to-guest\">\n+\t\t\u003C?php echo esc_html_x( 'Guest', 'checkout guest link', 'learnpress' ); ?>\n+\t\u003C\u002Flabel>\n+\u003C\u002Fa>.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fguest-checkout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fguest-checkout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fguest-checkout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fguest-checkout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user email field which enable checkout as guest.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fguest-email.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$checkout  = LearnPress::instance()->checkout();\r\n-$is_exists = $checkout->checkout_email_exists();\r\n-?>\r\n-\r\n-\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-guest\" name=\"checkout-account-switch-form\" value=\"guest\" checked=\"checked\"\u002F>\r\n-\r\n-\u003Cdiv id=\"checkout-account-guest\" class=\"lp-checkout-block \u003C?php echo esc_attr( $is_exists ? 'email-exists' : '' ); ?>\">\r\n-\t\u003Ch4>\u003C?php esc_html_e( 'As Guest', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\u003Cul class=\"lp-form-fields\">\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Cinput size=\"30\" placeholder=\"\u003C?php esc_attr_e( 'Enter your email...', 'learnpress' ); ?>\" type=\"text\" id=\"guest_email\" name=\"guest_email\" autocomplete=\"off\">\r\n-\t\t\t\u003Cdiv class=\"lp-guest-checkout-notice\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'An order key to activate the course will be sent to your email after the payment has proceeded successfully.', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t$signin  = '';\r\n-\t\t\t$signup  = '';\r\n-\t\t\t$divider = '';\r\n-\r\n-\t\t\tif ( LearnPress::instance()->checkout()->is_enable_login() ) {\r\n-\t\t\t\t$signin = sprintf( '\u003Ca href=\"javascript:void(0)\">\u003Clabel for=\"checkout-account-switch-to-login\">%s\u003C\u002Flabel>\u003C\u002Fa>', esc_html( _x( 'Sign in', 'checkout sign in link', 'learnpress' ) ) );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( LearnPress::instance()->checkout()->is_enable_login() && LearnPress::instance()->checkout()->is_enable_register() ) {\r\n-\t\t\t\t$divider = ',';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( LearnPress::instance()->checkout()->is_enable_register() ) {\r\n-\t\t\t\t$signup = sprintf( '\u003Ca href=\"javascript:void(0)\">\u003Clabel for=\"checkout-account-switch-to-register\">%s\u003C\u002Flabel>\u003C\u002Fa>', esc_html( _x( 'Sign up', 'checkout sign up link', 'learnpress' ) ) );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_login() || LearnPress::instance()->checkout()->is_enable_register() ) : ?>\r\n-\t\t\t\t\u003Cdiv class=\"lp-guest-switch-login\">\u003C?php echo sprintf( __( 'Or you can %1$s%2$s %3$s now.', 'learnpress' ), $signin, $divider, $signup ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\u003C!--\t\u003Cinput type=\"hidden\" name=\"learn-press-checkout-nonce\" value=\"-->\u003C?php \u002F\u002Fecho esc_attr( wp_create_nonce( 'learn-press-guest-checkout' ) ); ?>\u003C!--\"\u002F>-->\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user email field which enable checkout as guest.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fguest-email.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$checkout  = LearnPress::instance()->checkout();\n+$is_exists = $checkout->checkout_email_exists();\n+?>\n+\n+\u003Cinput type=\"radio\" id=\"checkout-account-switch-to-guest\" name=\"checkout-account-switch-form\" value=\"guest\" checked=\"checked\"\u002F>\n+\n+\u003Cdiv id=\"checkout-account-guest\" class=\"lp-checkout-block \u003C?php echo esc_attr( $is_exists ? 'email-exists' : '' ); ?>\">\n+\t\u003Ch4>\u003C?php esc_html_e( 'As Guest', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\u003Cul class=\"lp-form-fields\">\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Cinput size=\"30\" placeholder=\"\u003C?php esc_attr_e( 'Enter your email...', 'learnpress' ); ?>\" type=\"text\" id=\"guest_email\" name=\"guest_email\" autocomplete=\"off\">\n+\t\t\t\u003Cdiv class=\"lp-guest-checkout-notice\">\n+\t\t\t\t\u003C?php esc_html_e( 'An order key to activate the course will be sent to your email after the payment has proceeded successfully.', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php\n+\t\t\t$signin  = '';\n+\t\t\t$signup  = '';\n+\t\t\t$divider = '';\n+\n+\t\t\tif ( LearnPress::instance()->checkout()->is_enable_login() ) {\n+\t\t\t\t$signin = sprintf( '\u003Ca href=\"javascript:void(0)\">\u003Clabel for=\"checkout-account-switch-to-login\">%s\u003C\u002Flabel>\u003C\u002Fa>', esc_html( _x( 'Sign in', 'checkout sign in link', 'learnpress' ) ) );\n+\t\t\t}\n+\n+\t\t\tif ( LearnPress::instance()->checkout()->is_enable_login() && LearnPress::instance()->checkout()->is_enable_register() ) {\n+\t\t\t\t$divider = ',';\n+\t\t\t}\n+\n+\t\t\tif ( LearnPress::instance()->checkout()->is_enable_register() ) {\n+\t\t\t\t$signup = sprintf( '\u003Ca href=\"javascript:void(0)\">\u003Clabel for=\"checkout-account-switch-to-register\">%s\u003C\u002Flabel>\u003C\u002Fa>', esc_html( _x( 'Sign up', 'checkout sign up link', 'learnpress' ) ) );\n+\t\t\t}\n+\t\t\t?>\n+\n+\t\t\t\u003C?php if ( LearnPress::instance()->checkout()->is_enable_login() || LearnPress::instance()->checkout()->is_enable_register() ) : ?>\n+\t\t\t\t\u003Cdiv class=\"lp-guest-switch-login\">\u003C?php echo sprintf( __( 'Or you can %1$s%2$s %3$s now.', 'learnpress' ), $signin, $divider, $signup ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003C?php endif; ?>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\u003C!--\t\u003Cinput type=\"hidden\" name=\"learn-press-checkout-nonce\" value=\"-->\u003C?php \u002F\u002Fecho esc_attr( wp_create_nonce( 'learn-press-guest-checkout' ) ); ?>\u003C!--\"\u002F>-->\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Forder-comment.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Forder-comment.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Forder-comment.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Forder-comment.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying order comment.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Forder-comment.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-checkout-comment\">\r\n-\t\u003Ch4>\u003C?php esc_html_e( 'Additional Information', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\t\u003Ctextarea name=\"order_comments\" class=\"order-comments\" placeholder=\"\u003C?php esc_attr_e( 'Note to administrator', 'learnpress' ); ?>\">\u003C\u002Ftextarea>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying order comment.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Forder-comment.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"learn-press-checkout-comment\">\n+\t\u003Ch4>\u003C?php esc_html_e( 'Additional Information', 'learnpress' ); ?>\u003C\u002Fh4>\n+\t\u003Ctextarea name=\"order_comments\" class=\"order-comments\" placeholder=\"\u003C?php esc_attr_e( 'Note to administrator', 'learnpress' ); ?>\">\u003C\u002Ftextarea>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Forder-received.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Forder-received.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Forder-received.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Forder-received.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,186 +1,186 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying order detail.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Forder-received.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.4\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$user_id   = get_current_user_id();\r\n-$lp_profile = learn_press_get_profile( $user_id );\r\n-$userModel = UserModel::find( $user_id, true );\r\n-?>\r\n-\u003Cdiv class=\"lp-content-area\">\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @var LP_Order $order_received\r\n-\t *\u002F\r\n-\tif ( ! isset( $order_received ) ) {\r\n-\t\techo wp_sprintf(\r\n-\t\t\t'\u003Cp>%s\u003C\u002Fp>',\r\n-\t\t\tesc_html(\r\n-\t\t\t\tapply_filters(\r\n-\t\t\t\t\t'learn-press\u002Forder\u002Freceived-invalid-order-message',\r\n-\t\t\t\t\t__( 'Invalid order.', 'learnpress' )\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t);\r\n-\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\techo wp_sprintf(\r\n-\t\t'\u003Cp>%s\u003C\u002Fp>\u003Cp>%s\u003C\u002Fp>',\r\n-\t\tesc_html(\r\n-\t\t\tapply_filters(\r\n-\t\t\t\t'learn-press\u002Forder\u002Freceived-order-message',\r\n-\t\t\t\t__( 'Thank you. Your order has been received.', 'learnpress' )\r\n-\t\t\t)\r\n-\t\t),\r\n-\t\tsprintf(\r\n-\t\t\t__( 'Go to %1$s to continue browsing or go to %2$s', 'learnpress' ),\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\tesc_url( learn_press_get_page_link( 'courses' ) ),\r\n-\t\t\t\tesc_html__( 'Courses', 'learnpress' )\r\n-\t\t\t),\r\n-\t\t\tsprintf(\r\n-\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\tesc_url( $lp_profile->get_tab_link( 'orders' ) ),\r\n-\t\t\t\tesc_html__( 'My Orders', 'learnpress' )\r\n-\t\t\t)\r\n-\t\t)\r\n-\t);\r\n-\tdo_action( 'learn-press\u002Forder\u002Fafter-received-order-message', $order_received->get_id() );\r\n-\r\n-\t?>\r\n-\t\u003Ctable class=\"order_details\">\r\n-\t\t\u003C?php if ( isset( $_GET['key'] ) && ! is_user_logged_in() ) : ?>\r\n-\t\t\t\u003Ctr class=\"order-key\">\r\n-\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Order Key', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003C?php echo esc_html( $_GET['key'] ); ?>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\t\u003Ctr class=\"order\">\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Order Number', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003C?php echo esc_html( $order_received->get_order_number() ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr class=\"status\">\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$status = $order_received->get_status();\r\n-\t\t\t\techo ucfirst( $order_received::get_status_label( $status ) );\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr class=\"item\">\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$links = array();\r\n-\t\t\t\t$items = $order_received->get_items();\r\n-\t\t\t\t$count = count( $items );\r\n-\r\n-\t\t\t\tforeach ( $items as $item ) {\r\n-\t\t\t\t\tif ( empty( $item['course_id'] ) || get_post_type( $item['course_id'] ) !== LP_COURSE_CPT ) {\r\n-\t\t\t\t\t\t$links[] = apply_filters(\r\n-\t\t\t\t\t\t\t'learn-press\u002Forder-item-not-course-id',\r\n-\t\t\t\t\t\t\t__( 'The course does not exist', 'learnpress' ),\r\n-\t\t\t\t\t\t\t$item\r\n-\t\t\t\t\t\t);\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t$course_id = $item['course_id'];\r\n-\t\t\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\r\n-\t\t\t\t\t\t$button_course = '';\r\n-\t\t\t\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\r\n-\t\t\t\t\t\tif ( $userCourseModel && $userModel ) {\r\n-\t\t\t\t\t\t\t\u002F\u002F For enrolled or purchased course.\r\n-\t\t\t\t\t\t\t$userCourseTemplate = UserCourseTemplate::instance();\r\n-\t\t\t\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\r\n-\t\t\t\t\t\t\t\u002F\u002F Load js button course.\r\n-\t\t\t\t\t\t\twp_enqueue_script( 'lp-single-course' );\r\n-\r\n-\t\t\t\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\r\n-\t\t\t\t\t\t\t\t$button_course = $userCourseTemplate->html_btn_continue( $userCourseModel );\r\n-\t\t\t\t\t\t\t} elseif ( $userCourseModel->has_purchased() ) {\r\n-\t\t\t\t\t\t\t\t$button_course = $singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel );\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t$link = sprintf(\r\n-\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s (#%s)\u003C\u002Fa> %s',\r\n-\t\t\t\t\t\t\tget_the_permalink( $item['course_id'] ),\r\n-\t\t\t\t\t\t\tget_the_title( $item['course_id'] ),\r\n-\t\t\t\t\t\t\t$item['course_id'],\r\n-\t\t\t\t\t\t\t$button_course\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tif ( $count > 1 ) {\r\n-\t\t\t\t\t\t\t$link = sprintf( '\u003Cli>%s\u003C\u002Fli>', $link );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t$links[] = apply_filters( 'learn-press\u002Forder-received-item-link', $link, $item );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( $count > 1 ) {\r\n-\t\t\t\t\techo sprintf( '\u003Col>%s\u003C\u002Fol>', join( '', $links ) );\r\n-\t\t\t\t} elseif ( 1 == $count ) {\r\n-\t\t\t\t\techo implode( '', $links );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\techo esc_html__( '(No item)', 'learnpress' );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr class=\"date\">\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\techo wp_kses_post(\r\n-\t\t\t\t\tdate_i18n(\r\n-\t\t\t\t\t\tget_option( 'date_format' ),\r\n-\t\t\t\t\t\tstrtotime( $order_received->get_order_date() )\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003Ctr class=\"total\">\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $order_received->get_formatted_order_total() ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php\r\n-\t\t$method_title = $order_received->get_payment_method_title();\r\n-\t\tif ( $method_title ) :\r\n-\t\t\t?>\r\n-\t\t\t\u003Ctr class=\"method\">\r\n-\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Payment Method', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003C?php echo esc_html( $method_title ); ?>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\t\u003C?php do_action( 'learn-press\u002Forder\u002Freceived\u002Fitems-table', $order_received ); ?>\r\n-\t\u003C\u002Ftable>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Forder\u002Freceived', $order_received ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying order detail.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Forder-received.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.4\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$user_id   = get_current_user_id();\n+$lp_profile = learn_press_get_profile( $user_id );\n+$userModel = UserModel::find( $user_id, true );\n+?>\n+\u003Cdiv class=\"lp-content-area\">\n+\t\u003C?php\n+\t\u002F**\n+\t * @var LP_Order $order_received\n+\t *\u002F\n+\tif ( ! isset( $order_received ) ) {\n+\t\techo wp_sprintf(\n+\t\t\t'\u003Cp>%s\u003C\u002Fp>',\n+\t\t\tesc_html(\n+\t\t\t\tapply_filters(\n+\t\t\t\t\t'learn-press\u002Forder\u002Freceived-invalid-order-message',\n+\t\t\t\t\t__( 'Invalid order.', 'learnpress' )\n+\t\t\t\t)\n+\t\t\t)\n+\t\t);\n+\n+\t\treturn;\n+\t}\n+\n+\techo wp_sprintf(\n+\t\t'\u003Cp>%s\u003C\u002Fp>\u003Cp>%s\u003C\u002Fp>',\n+\t\tesc_html(\n+\t\t\tapply_filters(\n+\t\t\t\t'learn-press\u002Forder\u002Freceived-order-message',\n+\t\t\t\t__( 'Thank you. Your order has been received.', 'learnpress' )\n+\t\t\t)\n+\t\t),\n+\t\tsprintf(\n+\t\t\t__( 'Go to %1$s to continue browsing or go to %2$s', 'learnpress' ),\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\tesc_url( learn_press_get_page_link( 'courses' ) ),\n+\t\t\t\tesc_html__( 'Courses', 'learnpress' )\n+\t\t\t),\n+\t\t\tsprintf(\n+\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\tesc_url( $lp_profile->get_tab_link( 'orders' ) ),\n+\t\t\t\tesc_html__( 'My Orders', 'learnpress' )\n+\t\t\t)\n+\t\t)\n+\t);\n+\tdo_action( 'learn-press\u002Forder\u002Fafter-received-order-message', $order_received->get_id() );\n+\n+\t?>\n+\t\u003Ctable class=\"order_details\">\n+\t\t\u003C?php if ( isset( $_GET['key'] ) && ! is_user_logged_in() ) : ?>\n+\t\t\t\u003Ctr class=\"order-key\">\n+\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Order Key', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003C?php echo esc_html( $_GET['key'] ); ?>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php endif; ?>\n+\t\t\u003Ctr class=\"order\">\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Order Number', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003C?php echo esc_html( $order_received->get_order_number() ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr class=\"status\">\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003C?php\n+\t\t\t\t$status = $order_received->get_status();\n+\t\t\t\techo ucfirst( $order_received::get_status_label( $status ) );\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr class=\"item\">\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003C?php\n+\t\t\t\t$links = array();\n+\t\t\t\t$items = $order_received->get_items();\n+\t\t\t\t$count = count( $items );\n+\n+\t\t\t\tforeach ( $items as $item ) {\n+\t\t\t\t\tif ( empty( $item['course_id'] ) || get_post_type( $item['course_id'] ) !== LP_COURSE_CPT ) {\n+\t\t\t\t\t\t$links[] = apply_filters(\n+\t\t\t\t\t\t\t'learn-press\u002Forder-item-not-course-id',\n+\t\t\t\t\t\t\t__( 'The course does not exist', 'learnpress' ),\n+\t\t\t\t\t\t\t$item\n+\t\t\t\t\t\t);\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t$course_id = $item['course_id'];\n+\t\t\t\t\t\t$courseModel = CourseModel::find( $course_id, true );\n+\t\t\t\t\t\t$button_course = '';\n+\t\t\t\t\t\t$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );\n+\t\t\t\t\t\tif ( $userCourseModel && $userModel ) {\n+\t\t\t\t\t\t\t\u002F\u002F For enrolled or purchased course.\n+\t\t\t\t\t\t\t$userCourseTemplate = UserCourseTemplate::instance();\n+\t\t\t\t\t\t\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\n+\t\t\t\t\t\t\t\u002F\u002F Load js button course.\n+\t\t\t\t\t\t\twp_enqueue_script( 'lp-single-course' );\n+\n+\t\t\t\t\t\t\tif ( $userCourseModel->has_enrolled() ) {\n+\t\t\t\t\t\t\t\t$button_course = $userCourseTemplate->html_btn_continue( $userCourseModel );\n+\t\t\t\t\t\t\t} elseif ( $userCourseModel->has_purchased() ) {\n+\t\t\t\t\t\t\t\t$button_course = $singleCourseTemplate->html_btn_enroll_course( $courseModel, $userModel );\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t$link = sprintf(\n+\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s (#%s)\u003C\u002Fa> %s',\n+\t\t\t\t\t\t\tget_the_permalink( $item['course_id'] ),\n+\t\t\t\t\t\t\tget_the_title( $item['course_id'] ),\n+\t\t\t\t\t\t\t$item['course_id'],\n+\t\t\t\t\t\t\t$button_course\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tif ( $count > 1 ) {\n+\t\t\t\t\t\t\t$link = sprintf( '\u003Cli>%s\u003C\u002Fli>', $link );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t\t$links[] = apply_filters( 'learn-press\u002Forder-received-item-link', $link, $item );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tif ( $count > 1 ) {\n+\t\t\t\t\techo sprintf( '\u003Col>%s\u003C\u002Fol>', join( '', $links ) );\n+\t\t\t\t} elseif ( 1 == $count ) {\n+\t\t\t\t\techo implode( '', $links );\n+\t\t\t\t} else {\n+\t\t\t\t\techo esc_html__( '(No item)', 'learnpress' );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr class=\"date\">\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003C?php\n+\t\t\t\techo wp_kses_post(\n+\t\t\t\t\tdate_i18n(\n+\t\t\t\t\t\tget_option( 'date_format' ),\n+\t\t\t\t\t\tstrtotime( $order_received->get_order_date() )\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003Ctr class=\"total\">\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\n+\t\t\t\t\u003C?php echo wp_kses_post( $order_received->get_formatted_order_total() ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\t\u003C?php\n+\t\t$method_title = $order_received->get_payment_method_title();\n+\t\tif ( $method_title ) :\n+\t\t\t?>\n+\t\t\t\u003Ctr class=\"method\">\n+\t\t\t\t\u003Cth>\u003C?php esc_html_e( 'Payment Method', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003C?php echo esc_html( $method_title ); ?>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php endif; ?>\n+\t\t\u003C?php do_action( 'learn-press\u002Forder\u002Freceived\u002Fitems-table', $order_received ); ?>\n+\t\u003C\u002Ftable>\n+\n+\t\u003C?php do_action( 'learn-press\u002Forder\u002Freceived', $order_received ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fpayment-method.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fpayment-method.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fpayment-method.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fpayment-method.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying single method payment in checkout form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fpayment-method.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Gateway_Abstract $gateway\r\n- *\u002F\r\n-if ( ! isset( $gateway ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$icon = $gateway->get_icon();\r\n-?>\r\n-\r\n-\u003Cli id=\"learn-press-payment-method-\u003C?php echo esc_attr( $gateway->id ); ?>\"\r\n-\tclass=\"lp-payment-method lp-payment-method-\u003C?php echo esc_attr( $gateway->id ); ?>\u003C?php echo esc_html( $gateway->is_selected ? ' selected' : '' ); ?>\">\r\n-\t\u003Clabel for=\"payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\">\r\n-\t\t\u003Cinput type=\"radio\" class=\"gateway-input\" name=\"payment_method\"\r\n-\t\t\t\tid=\"payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $gateway->id ); ?>\" \u003C?php checked( $gateway->is_selected, true ); ?>\r\n-\t\t\t\tdata-order_button_text=\"\u003C?php echo esc_attr( $gateway->order_button_text ); ?>\"\u002F>\r\n-\t\t\u003C?php echo wp_kses_post( ! empty( $icon ) ? $icon : $gateway->get_title() ); ?>\r\n-\t\u003C\u002Flabel>\r\n-\r\n-\t\u003C?php\r\n-\t$payment_form = $gateway->get_payment_form();\r\n-\t$style        = $gateway->is_selected ? 'display: block' : 'display: none';\r\n-\tif ( ! empty( $payment_form ) ) :\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"payment-method-form payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\"\r\n-\t\t\tstyle=\"\u003C?php echo esc_attr( $style ); ?>\">\r\n-\t\t\t\u003C?php echo $payment_form; ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying single method payment in checkout form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fpayment-method.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Gateway_Abstract $gateway\n+ *\u002F\n+if ( ! isset( $gateway ) ) {\n+\treturn;\n+}\n+\n+$icon = $gateway->get_icon();\n+?>\n+\n+\u003Cli id=\"learn-press-payment-method-\u003C?php echo esc_attr( $gateway->id ); ?>\"\n+\tclass=\"lp-payment-method lp-payment-method-\u003C?php echo esc_attr( $gateway->id ); ?>\u003C?php echo esc_html( $gateway->is_selected ? ' selected' : '' ); ?>\">\n+\t\u003Clabel for=\"payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\">\n+\t\t\u003Cinput type=\"radio\" class=\"gateway-input\" name=\"payment_method\"\n+\t\t\t\tid=\"payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $gateway->id ); ?>\" \u003C?php checked( $gateway->is_selected, true ); ?>\n+\t\t\t\tdata-order_button_text=\"\u003C?php echo esc_attr( $gateway->order_button_text ); ?>\"\u002F>\n+\t\t\u003C?php echo wp_kses_post( ! empty( $icon ) ? $icon : $gateway->get_title() ); ?>\n+\t\u003C\u002Flabel>\n+\n+\t\u003C?php\n+\t$payment_form = $gateway->get_payment_form();\n+\t$style        = $gateway->is_selected ? 'display: block' : 'display: none';\n+\tif ( ! empty( $payment_form ) ) :\n+\t\t?>\n+\t\t\u003Cdiv class=\"payment-method-form payment_method_\u003C?php echo esc_attr( $gateway->id ); ?>\"\n+\t\t\tstyle=\"\u003C?php echo esc_attr( $style ); ?>\">\n+\t\t\t\u003C?php echo $payment_form; ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fpayment.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fpayment.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fpayment.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fpayment.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,83 +1,83 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying payment form for checkout page.\r\n- *\r\n- * Edit by Nhamdv\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fpayment.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"checkout-payment\" class=\"lp-checkout-block left\">\r\n-\t\u003C?php\r\n-\tdo_action( 'learn-press\u002Fbefore-payment-methods' );\r\n-\r\n-\t\u002F\u002F Show payments if cart total > 0 and have at least one payment method.\r\n-\tif ( LearnPress::instance()->cart && LearnPress::instance()->cart->needs_payment() && $available_gateways ) {\r\n-\t\t?>\r\n-\t\t\u003Ch4>\r\n-\t\t\t\u003C?php esc_html_e( 'Payment', 'learnpress' ); ?>\r\n-\t\t\t\u003Cspan class=\"secure-connection\">\r\n-\t\t\t\t\u003Ci class=\"lp-icon-lock\">\u003C\u002Fi>\r\n-\t\t\t\t\u003C?php echo esc_html_x( 'Secure Connection', 'payment method', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fh4>\r\n-\r\n-\t\t\u003Cul class=\"payment-methods\">\r\n-\t\t\t\u003C?php\r\n-\t\t\t$order = 1;\r\n-\r\n-\t\t\tforeach ( $available_gateways as $gateway ) {\r\n-\t\t\t\tif ( $order == 1 ) {\r\n-\t\t\t\t\tlearn_press_get_template(\r\n-\t\t\t\t\t\t'checkout\u002Fpayment-method.php',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'gateway'  => $gateway,\r\n-\t\t\t\t\t\t\t'selected' => $gateway->id,\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tlearn_press_get_template(\r\n-\t\t\t\t\t\t'checkout\u002Fpayment-method.php',\r\n-\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t'gateway'  => $gateway,\r\n-\t\t\t\t\t\t\t'selected' => '',\r\n-\t\t\t\t\t\t)\r\n-\t\t\t\t\t);\r\n-\t\t\t\t}\r\n-\t\t\t\t$order ++;\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fpayment-form' );\r\n-\t?>\r\n-\r\n-\t\u003Cdiv id=\"checkout-order-action\" class=\"place-order-action\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-checkout-submit-button' ); ?>\r\n-\r\n-\t\t\u003Cbutton type=\"submit\" class=\"lp-button button alt\" name=\"learn_press_checkout_place_order\" id=\"learn-press-checkout-place-order\">\r\n-\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Fcheckout-proceed-button-text', esc_html__( 'Place order', 'learnpress' ) ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t\u002F*if ( is_user_logged_in() ) {\r\n-\t\t\twp_nonce_field( 'learn-press-user-logged', 'learn-press-checkout-nonce' );\r\n-\t\t}*\u002F\r\n-\r\n-\t\tdo_action( 'learn-press\u002Fafter-checkout-submit-button' );\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-payment-form' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying payment form for checkout page.\n+ *\n+ * Edit by Nhamdv\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fpayment.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv id=\"checkout-payment\" class=\"lp-checkout-block left\">\n+\t\u003C?php\n+\tdo_action( 'learn-press\u002Fbefore-payment-methods' );\n+\n+\t\u002F\u002F Show payments if cart total > 0 and have at least one payment method.\n+\tif ( LearnPress::instance()->cart && LearnPress::instance()->cart->needs_payment() && $available_gateways ) {\n+\t\t?>\n+\t\t\u003Ch4>\n+\t\t\t\u003C?php esc_html_e( 'Payment', 'learnpress' ); ?>\n+\t\t\t\u003Cspan class=\"secure-connection\">\n+\t\t\t\t\u003Ci class=\"lp-icon-lock\">\u003C\u002Fi>\n+\t\t\t\t\u003C?php echo esc_html_x( 'Secure Connection', 'payment method', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\u003C\u002Fh4>\n+\n+\t\t\u003Cul class=\"payment-methods\">\n+\t\t\t\u003C?php\n+\t\t\t$order = 1;\n+\n+\t\t\tforeach ( $available_gateways as $gateway ) {\n+\t\t\t\tif ( $order == 1 ) {\n+\t\t\t\t\tlearn_press_get_template(\n+\t\t\t\t\t\t'checkout\u002Fpayment-method.php',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'gateway'  => $gateway,\n+\t\t\t\t\t\t\t'selected' => $gateway->id,\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t} else {\n+\t\t\t\t\tlearn_press_get_template(\n+\t\t\t\t\t\t'checkout\u002Fpayment-method.php',\n+\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t'gateway'  => $gateway,\n+\t\t\t\t\t\t\t'selected' => '',\n+\t\t\t\t\t\t)\n+\t\t\t\t\t);\n+\t\t\t\t}\n+\t\t\t\t$order ++;\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fpayment-form' );\n+\t?>\n+\n+\t\u003Cdiv id=\"checkout-order-action\" class=\"place-order-action\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-checkout-submit-button' ); ?>\n+\n+\t\t\u003Cbutton type=\"submit\" class=\"lp-button button alt\" name=\"learn_press_checkout_place_order\" id=\"learn-press-checkout-place-order\">\n+\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Fcheckout-proceed-button-text', esc_html__( 'Place order', 'learnpress' ) ); ?>\n+\t\t\u003C\u002Fbutton>\n+\n+\t\t\u003C?php\n+\t\t\u002F*if ( is_user_logged_in() ) {\n+\t\t\twp_nonce_field( 'learn-press-user-logged', 'learn-press-checkout-nonce' );\n+\t\t}*\u002F\n+\n+\t\tdo_action( 'learn-press\u002Fafter-checkout-submit-button' );\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-payment-form' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Freview-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Freview-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Freview-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Freview-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,166 +1,166 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying reviewing before placing order.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Freview-order.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.3\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\u002F**\r\n- * @var LP_Cart $cart\r\n- *\u002F\r\n-if ( ! isset( $cart ) || ! $cart ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"checkout-order\" class=\"lp-checkout-block right\">\r\n-\r\n-\t\u003Ch4>\u003C?php esc_html_e( 'Your order', 'learnpress' ); ?>\u003C\u002Fh4>\r\n-\r\n-\t\u003Cdiv class=\"lp-checkout-order__inner\">\r\n-\t\t\u003Ctable>\r\n-\t\t\t\u003Ctbody>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tdo_action( 'learn_press_review_order_before_cart_contents' );\r\n-\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fbefore-cart-contents' );\r\n-\r\n-\t\t\t$items = $cart->get_items();\r\n-\r\n-\t\t\tif ( $items ) {\r\n-\t\t\t\tforeach ( $items as $cart_item_key => $cart_item ) {\r\n-\t\t\t\t\t$cart_item = apply_filters( 'learn-press\u002Freview-order\u002Fcart-item', $cart_item );\r\n-\t\t\t\t\t$item_id   = $cart_item['item_id'];\r\n-\r\n-\t\t\t\t\t$itemModel = apply_filters(\r\n-\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fitem',\r\n-\t\t\t\t\t\tCourseModel::find( $item_id, true ),\r\n-\t\t\t\t\t\t$cart_item\r\n-\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\tif ( has_filter( 'learn-press\u002Freview-order\u002Fcart-item-product' ) ) {\r\n-\t\t\t\t\t\t$itemModel = apply_filters( 'learn-press\u002Freview-order\u002Fcart-item-product', learn_press_get_course( $item_id ), $cart_item );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $itemModel instanceof LP_Course ) {\r\n-\t\t\t\t\t\t$itemModel = CourseModel::find( $itemModel->get_id(), true );\r\n-\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\tif ( $itemModel instanceof CourseModel ) {\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Ctr class=\"cart-item\">\r\n-\t\t\t\t\t\t\t\u003Ctd class=\"course-thumbnail\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\techo $singleCourseTemplate->html_image( $itemModel )\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\u003Ctd class=\"course-name\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\techo sprintf(\r\n-\t\t\t\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"course-name\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t\t\t\tesc_url_raw(\r\n-\t\t\t\t\t\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-link',\r\n-\t\t\t\t\t\t\t\t\t\t\t$itemModel->get_permalink(),\r\n-\t\t\t\t\t\t\t\t\t\t\t$cart_item\r\n-\t\t\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\twp_kses_post(\r\n-\t\t\t\t\t\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-name',\r\n-\t\t\t\t\t\t\t\t\t\t\t$singleCourseTemplate->html_title( $itemModel ),\r\n-\t\t\t\t\t\t\t\t\t\t\t$cart_item,\r\n-\t\t\t\t\t\t\t\t\t\t\t$cart_item_key\r\n-\t\t\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t?>\r\n-\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\tif ( $cart_item['quantity'] > 1 ) {\r\n-\t\t\t\t\t\t\t\t\techo wp_kses_post(\r\n-\t\t\t\t\t\t\t\t\t\tapply_filters(\r\n-\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-quantity',\r\n-\t\t\t\t\t\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t\t\t\t\t\t'\u003Cstrong class=\"course-quantity\"> &times; %s\u003C\u002Fstrong>',\r\n-\t\t\t\t\t\t\t\t\t\t\t\t$cart_item['quantity']\r\n-\t\t\t\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t\t\t\t$cart_item,\r\n-\t\t\t\t\t\t\t\t\t\t\t$cart_item_key\r\n-\t\t\t\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\t\u003Ctd class=\"course-total col-number\">\r\n-\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\techo apply_filters(\r\n-\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-subtotal',\r\n-\t\t\t\t\t\t\t\t\t$cart->get_item_subtotal( $itemModel, $cart_item['quantity'] ),\r\n-\t\t\t\t\t\t\t\t\t$cart_item,\r\n-\t\t\t\t\t\t\t\t\t$cart_item_key\r\n-\t\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003Ctr class=\"cart-item\">\r\n-\t\t\t\t\t\t\t\u003C?php do_action( 'learn-press\u002Fcheckout\u002Fcart-item', $itemModel, $cart_item ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fafter-cart-contents' );\r\n-\t\t\tdo_action( 'learn_press_review_order_after_cart_contents' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\r\n-\t\t\t\u003Ctfoot>\r\n-\t\t\t\u003Ctr class=\"cart-subtotal\">\r\n-\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fbefore-subtotal-row' ); ?>\r\n-\r\n-\t\t\t\t\u003Cth colspan=\"2\">\u003C?php _e( 'Subtotal', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Ctd class=\"col-number\">\u003C?php echo esc_html( $cart->get_subtotal() ); ?>\u003C\u002Ftd>\r\n-\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fafter-subtotal-row' ); ?>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tdo_action( 'learn_press_review_order_before_order_total' );\r\n-\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fbefore-order-total' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Ctr class=\"order-total\">\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fbefore-total-row' ); ?>\r\n-\r\n-\t\t\t\t\u003Cth colspan=\"2\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003Ctd class=\"col-number\">\u003C?php echo esc_html( $cart->get_total() ); ?>\u003C\u002Ftd>\r\n-\r\n-\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fafter-total-row' ); ?>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fafter-order-total' );\r\n-\t\t\tdo_action( 'learn_press_review_order_after_order_total' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003C\u002Ftfoot>\r\n-\t\t\u003C\u002Ftable>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying reviewing before placing order.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Freview-order.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.3\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\u002F**\n+ * @var LP_Cart $cart\n+ *\u002F\n+if ( ! isset( $cart ) || ! $cart ) {\n+\treturn;\n+}\n+\n+$singleCourseTemplate = SingleCourseTemplate::instance();\n+?>\n+\n+\u003Cdiv id=\"checkout-order\" class=\"lp-checkout-block right\">\n+\n+\t\u003Ch4>\u003C?php esc_html_e( 'Your order', 'learnpress' ); ?>\u003C\u002Fh4>\n+\n+\t\u003Cdiv class=\"lp-checkout-order__inner\">\n+\t\t\u003Ctable>\n+\t\t\t\u003Ctbody>\n+\n+\t\t\t\u003C?php\n+\t\t\tdo_action( 'learn_press_review_order_before_cart_contents' );\n+\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fbefore-cart-contents' );\n+\n+\t\t\t$items = $cart->get_items();\n+\n+\t\t\tif ( $items ) {\n+\t\t\t\tforeach ( $items as $cart_item_key => $cart_item ) {\n+\t\t\t\t\t$cart_item = apply_filters( 'learn-press\u002Freview-order\u002Fcart-item', $cart_item );\n+\t\t\t\t\t$item_id   = $cart_item['item_id'];\n+\n+\t\t\t\t\t$itemModel = apply_filters(\n+\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fitem',\n+\t\t\t\t\t\tCourseModel::find( $item_id, true ),\n+\t\t\t\t\t\t$cart_item\n+\t\t\t\t\t);\n+\n+\t\t\t\t\tif ( has_filter( 'learn-press\u002Freview-order\u002Fcart-item-product' ) ) {\n+\t\t\t\t\t\t$itemModel = apply_filters( 'learn-press\u002Freview-order\u002Fcart-item-product', learn_press_get_course( $item_id ), $cart_item );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $itemModel instanceof LP_Course ) {\n+\t\t\t\t\t\t$itemModel = CourseModel::find( $itemModel->get_id(), true );\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tif ( $itemModel instanceof CourseModel ) {\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Ctr class=\"cart-item\">\n+\t\t\t\t\t\t\t\u003Ctd class=\"course-thumbnail\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\techo $singleCourseTemplate->html_image( $itemModel )\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\u003Ctd class=\"course-name\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\techo sprintf(\n+\t\t\t\t\t\t\t\t\t'\u003Ca href=\"%s\" class=\"course-name\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t\t\t\tesc_url_raw(\n+\t\t\t\t\t\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-link',\n+\t\t\t\t\t\t\t\t\t\t\t$itemModel->get_permalink(),\n+\t\t\t\t\t\t\t\t\t\t\t$cart_item\n+\t\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\twp_kses_post(\n+\t\t\t\t\t\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-name',\n+\t\t\t\t\t\t\t\t\t\t\t$singleCourseTemplate->html_title( $itemModel ),\n+\t\t\t\t\t\t\t\t\t\t\t$cart_item,\n+\t\t\t\t\t\t\t\t\t\t\t$cart_item_key\n+\t\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t?>\n+\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\tif ( $cart_item['quantity'] > 1 ) {\n+\t\t\t\t\t\t\t\t\techo wp_kses_post(\n+\t\t\t\t\t\t\t\t\t\tapply_filters(\n+\t\t\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-quantity',\n+\t\t\t\t\t\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t\t\t\t\t\t'\u003Cstrong class=\"course-quantity\"> &times; %s\u003C\u002Fstrong>',\n+\t\t\t\t\t\t\t\t\t\t\t\t$cart_item['quantity']\n+\t\t\t\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t\t\t\t$cart_item,\n+\t\t\t\t\t\t\t\t\t\t\t$cart_item_key\n+\t\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\t\u003Ctd class=\"course-total col-number\">\n+\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\techo apply_filters(\n+\t\t\t\t\t\t\t\t\t'learn-press\u002Freview-order\u002Fcart-item-subtotal',\n+\t\t\t\t\t\t\t\t\t$cart->get_item_subtotal( $itemModel, $cart_item['quantity'] ),\n+\t\t\t\t\t\t\t\t\t$cart_item,\n+\t\t\t\t\t\t\t\t\t$cart_item_key\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003Ctr class=\"cart-item\">\n+\t\t\t\t\t\t\t\u003C?php do_action( 'learn-press\u002Fcheckout\u002Fcart-item', $itemModel, $cart_item ); ?>\n+\t\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fafter-cart-contents' );\n+\t\t\tdo_action( 'learn_press_review_order_after_cart_contents' );\n+\t\t\t?>\n+\n+\t\t\t\u003C\u002Ftbody>\n+\n+\t\t\t\u003Ctfoot>\n+\t\t\t\u003Ctr class=\"cart-subtotal\">\n+\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fbefore-subtotal-row' ); ?>\n+\n+\t\t\t\t\u003Cth colspan=\"2\">\u003C?php _e( 'Subtotal', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Ctd class=\"col-number\">\u003C?php echo esc_html( $cart->get_subtotal() ); ?>\u003C\u002Ftd>\n+\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fafter-subtotal-row' ); ?>\n+\t\t\t\u003C\u002Ftr>\n+\n+\t\t\t\u003C?php\n+\t\t\tdo_action( 'learn_press_review_order_before_order_total' );\n+\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fbefore-order-total' );\n+\t\t\t?>\n+\n+\t\t\t\u003Ctr class=\"order-total\">\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fbefore-total-row' ); ?>\n+\n+\t\t\t\t\u003Cth colspan=\"2\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003Ctd class=\"col-number\">\u003C?php echo esc_html( $cart->get_total() ); ?>\u003C\u002Ftd>\n+\n+\t\t\t\t\u003C?php do_action( 'learn-press\u002Freview-order\u002Fafter-total-row' ); ?>\n+\t\t\t\u003C\u002Ftr>\n+\n+\t\t\t\u003C?php\n+\t\t\tdo_action( 'learn-press\u002Freview-order\u002Fafter-order-total' );\n+\t\t\tdo_action( 'learn_press_review_order_after_order_total' );\n+\t\t\t?>\n+\n+\t\t\t\u003C\u002Ftfoot>\n+\t\t\u003C\u002Ftable>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fterm-conditions.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fterm-conditions.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fterm-conditions.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fterm-conditions.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying payment form for checkout page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fterm-conditions.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$term_link = learn_press_get_page_link( 'term_conditions' );\r\n-$term_text = learn_press_get_page_title( 'term_conditions' );\r\n-\r\n-if ( ! $term_link ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! $term_text ) {\r\n-\t$term_text = esc_html__( 'Terms of Service', 'learnpress' );\r\n-}\r\n-?>\r\n-\r\n-\u003Cp class=\"lp-terms-and-conditions\">\r\n-\t\u003C?php\r\n-\techo apply_filters(\r\n-\t\t'learn_press_content_item_protected_message',\r\n-\t\tsprintf( __( 'By completing your purchase you agree to those \u003Ca href=\"%1$s\" target=\"_blank\">%2$s\u003C\u002Fa>.', 'learnpress' ), $term_link, $term_text )\r\n-\t);\r\n-\t?>\r\n-\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying payment form for checkout page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcheckout\u002Fterm-conditions.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$term_link = learn_press_get_page_link( 'term_conditions' );\n+$term_text = learn_press_get_page_title( 'term_conditions' );\n+\n+if ( ! $term_link ) {\n+\treturn;\n+}\n+\n+if ( ! $term_text ) {\n+\t$term_text = esc_html__( 'Terms of Service', 'learnpress' );\n+}\n+?>\n+\n+\u003Cp class=\"lp-terms-and-conditions\">\n+\t\u003C?php\n+\techo apply_filters(\n+\t\t'learn_press_content_item_protected_message',\n+\t\tsprintf( __( 'By completing your purchase you agree to those \u003Ca href=\"%1$s\" target=\"_blank\">%2$s\u003C\u002Fa>.', 'learnpress' ), $term_link, $term_text )\n+\t);\n+\t?>\n+\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fuser-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fuser-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcheckout\u002Fuser-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcheckout\u002Fuser-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user form.\r\n- *\r\n- * Note: Use only LP3. In LP4 will remove, show don't use in LP4.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( is_user_logged_in() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-checkout-user-form\">\r\n-\t\u003C?php do_action( 'learn_press_checkout_user_form' ); ?>\r\n-\t\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user form.\n+ *\n+ * Note: Use only LP3. In LP4 will remove, show don't use in LP4.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( is_user_logged_in() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv id=\"learn-press-checkout-user-form\">\n+\t\u003C?php do_action( 'learn_press_checkout_user_form' ); ?>\n+\t\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,62 +1,62 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course content within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-course.php\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cli id=\"post-\u003C?php the_ID(); ?>\" \u003C?php post_class(); ?>>\r\n-\r\n-\t\u003Cdiv class=\"course-item\">\r\n-\t\t\u003C?php\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP Hook\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @called loop\u002Fcourse\u002Fthumbnail.php\r\n-\t\t * @echo DIV tag\r\n-\t\t *\u002F\r\n-\t\tdo_action( 'learn-press\u002Fbefore-courses-loop-item' );\r\n-        ?>\r\n-\r\n-\r\n-        \u003C?php\r\n-        \u002F**\r\n-         * @since  3.0.0\r\n-         *\r\n-         * @called loop\u002Fcourse\u002Ftitle.php\r\n-         *\u002F\r\n-        do_action('learn-press\u002Fcourses-loop-item-title');\r\n-        ?>\r\n-\r\n-\r\n-        \u003C?php\r\n-\r\n-\t\t\u002F**\r\n-\t\t * LP Hook\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @see LP_Template_Course::courses_loop_item_meta()\r\n-\t\t * @see LP_Template_Course::courses_loop_item_info_begin()\r\n-\t\t * @see LP_Template_Course::clearfix()\r\n-\t\t * @see LP_Template_Course::courses_loop_item_price()\r\n-\t\t * @see LP_Template_Course::courses_loop_item_info_end()\r\n-\t\t *\u002F\r\n-\t\tdo_action( 'learn-press\u002Fafter-courses-loop-item' );\r\n-\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course content within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-course.php\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cli id=\"post-\u003C?php the_ID(); ?>\" \u003C?php post_class(); ?>>\n+\n+\t\u003Cdiv class=\"course-item\">\n+\t\t\u003C?php\n+\n+\t\t\u002F**\n+\t\t * LP Hook\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @called loop\u002Fcourse\u002Fthumbnail.php\n+\t\t * @echo DIV tag\n+\t\t *\u002F\n+\t\tdo_action( 'learn-press\u002Fbefore-courses-loop-item' );\n+        ?>\n+\n+\n+        \u003C?php\n+        \u002F**\n+         * @since  3.0.0\n+         *\n+         * @called loop\u002Fcourse\u002Ftitle.php\n+         *\u002F\n+        do_action('learn-press\u002Fcourses-loop-item-title');\n+        ?>\n+\n+\n+        \u003C?php\n+\n+\t\t\u002F**\n+\t\t * LP Hook\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @see LP_Template_Course::courses_loop_item_meta()\n+\t\t * @see LP_Template_Course::courses_loop_item_info_begin()\n+\t\t * @see LP_Template_Course::clearfix()\n+\t\t * @see LP_Template_Course::courses_loop_item_price()\n+\t\t * @see LP_Template_Course::courses_loop_item_info_end()\n+\t\t *\u002F\n+\t\tdo_action( 'learn-press\u002Fafter-courses-loop-item' );\n+\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Fbutton-complete.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Fbutton-complete.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Fbutton-complete.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Fbutton-complete.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying complete button in content lesson.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fbutton-complete.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.5\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $item ) || ! isset( $user ) || ! isset( $course ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( $item->is_preview() && ! $user->has_enrolled_course( $course->get_id() ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$message_confirm_complete_item = sprintf(\r\n-\t'%s \"%s\"?',\r\n-\t__( 'Do you want to complete the lesson', 'learnpress' ),\r\n-\t$item->get_title()\r\n-);\r\n-$completed                     = $user->has_completed_item( $item->get_id(), $course->get_id() );\r\n-\r\n-if ( $completed ) :\r\n-\t$user_item_data = $user->get_item_data( $item->get_id(), $course->get_id() );\r\n-\tif ( empty( $user_item_data ) ) {\r\n-\t\treturn;\r\n-\t}\r\n-\t?>\r\n-\t\u003Cdiv class=\"learn-press-message success\">\r\n-\t\t\u003C?php\r\n-\t\techo sprintf(\r\n-\t\t\t'%s %s',\r\n-\t\t\tesc_html__( 'You have completed this lesson at ', 'learnpress' ),\r\n-\t\t\t$user_item_data->get_end_time()->format( LP_Datetime::I18N_FORMAT_HAS_TIME )\r\n-\t\t)\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cbutton class=\"lp-button completed\" disabled>\r\n-\t\t\u003Ci class=\"lp-icon-check\">\u003C\u002Fi>\u003C?php esc_html_e( 'Completed', 'learnpress' ); ?>\r\n-\t\u003C\u002Fbutton>\r\n-\t\u003C?php\r\n-else :\r\n-\t$item_id_next = $course->get_next_item();\r\n-\t\u002F**\r\n-\t * @use LessonAjax::user_complete_lesson\r\n-\t *\u002F\r\n-\t?>\r\n-\t\u003Cform method=\"post\" name=\"learn-press-form-complete-lesson\"\r\n-\t\taction=\"\u003C?php echo add_query_arg( [ 'complete-lesson' => '' ], LP_Settings::url_handle_lp_ajax() ); ?>\"\r\n-\t\tclass=\"learn-press-form form-button \u003C?php echo esc_attr( $completed ) ? 'completed' : ''; ?>\"\r\n-\t\tdata-title=\"\u003C?php echo esc_attr( __( 'Complete lesson', 'learnpress' ) ); ?>\"\r\n-\t\tdata-confirm=\"\u003C?php echo esc_attr( $message_confirm_complete_item ); ?>\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Flesson\u002Fbefore-complete-button' ); ?>\r\n-\r\n-\t\t\u003Cinput type=\"hidden\" name=\"lesson_id\" value=\"\u003C?php echo esc_attr( $item->get_id() ); ?>\"\u002F>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"course_id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"nonce\"\r\n-\t\t\tvalue=\"\u003C?php echo wp_create_nonce( 'wp_rest' ); ?>\"\u002F>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"lp-load-ajax\" value=\"user_complete_lesson\"\u002F>\r\n-\t\t\u003Cbutton class=\"lp-button button-complete-lesson lp-btn-complete-item\"\r\n-\t\t\ttype=\"submit\">\r\n-\t\t\t\u003C?php echo esc_html__( 'Complete', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Flesson\u002Fafter-complete-button' ); ?>\r\n-\r\n-\t\u003C\u002Fform>\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying complete button in content lesson.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fbutton-complete.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.5\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $item ) || ! isset( $user ) || ! isset( $course ) ) {\n+\treturn;\n+}\n+\n+if ( $item->is_preview() && ! $user->has_enrolled_course( $course->get_id() ) ) {\n+\treturn;\n+}\n+\n+$message_confirm_complete_item = sprintf(\n+\t'%s \"%s\"?',\n+\t__( 'Do you want to complete the lesson', 'learnpress' ),\n+\t$item->get_title()\n+);\n+$completed                     = $user->has_completed_item( $item->get_id(), $course->get_id() );\n+\n+if ( $completed ) :\n+\t$user_item_data = $user->get_item_data( $item->get_id(), $course->get_id() );\n+\tif ( empty( $user_item_data ) ) {\n+\t\treturn;\n+\t}\n+\t?>\n+\t\u003Cdiv class=\"learn-press-message success\">\n+\t\t\u003C?php\n+\t\techo sprintf(\n+\t\t\t'%s %s',\n+\t\t\tesc_html__( 'You have completed this lesson at ', 'learnpress' ),\n+\t\t\t$user_item_data->get_end_time()->format( LP_Datetime::I18N_FORMAT_HAS_TIME )\n+\t\t)\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\t\u003Cbutton class=\"lp-button completed\" disabled>\n+\t\t\u003Ci class=\"lp-icon-check\">\u003C\u002Fi>\u003C?php esc_html_e( 'Completed', 'learnpress' ); ?>\n+\t\u003C\u002Fbutton>\n+\t\u003C?php\n+else :\n+\t$item_id_next = $course->get_next_item();\n+\t\u002F**\n+\t * @use LessonAjax::user_complete_lesson\n+\t *\u002F\n+\t?>\n+\t\u003Cform method=\"post\" name=\"learn-press-form-complete-lesson\"\n+\t\taction=\"\u003C?php echo add_query_arg( [ 'complete-lesson' => '' ], LP_Settings::url_handle_lp_ajax() ); ?>\"\n+\t\tclass=\"learn-press-form form-button \u003C?php echo esc_attr( $completed ) ? 'completed' : ''; ?>\"\n+\t\tdata-title=\"\u003C?php echo esc_attr( __( 'Complete lesson', 'learnpress' ) ); ?>\"\n+\t\tdata-confirm=\"\u003C?php echo esc_attr( $message_confirm_complete_item ); ?>\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Flesson\u002Fbefore-complete-button' ); ?>\n+\n+\t\t\u003Cinput type=\"hidden\" name=\"lesson_id\" value=\"\u003C?php echo esc_attr( $item->get_id() ); ?>\"\u002F>\n+\t\t\u003Cinput type=\"hidden\" name=\"course_id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\n+\t\t\u003Cinput type=\"hidden\" name=\"nonce\"\n+\t\t\tvalue=\"\u003C?php echo wp_create_nonce( 'wp_rest' ); ?>\"\u002F>\n+\t\t\u003Cinput type=\"hidden\" name=\"lp-load-ajax\" value=\"user_complete_lesson\"\u002F>\n+\t\t\u003Cbutton class=\"lp-button button-complete-lesson lp-btn-complete-item\"\n+\t\t\ttype=\"submit\">\n+\t\t\t\u003C?php echo esc_html__( 'Complete', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Flesson\u002Fafter-complete-button' ); ?>\n+\n+\t\u003C\u002Fform>\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Fcontent.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Fcontent.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Fcontent.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Fcontent.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying description of lesson.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fdescription.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Lesson $lesson\r\n- *\u002F\r\n-if ( ! isset( $lesson ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$content = $lesson->get_content();\r\n-\r\n-if ( ! $content ) {\r\n-\t$message = esc_html__( 'The lesson content is empty.', 'learnpress' );\r\n-\r\n-\tif ( $lesson->current_user_can_edit() ) {\r\n-\t\t$message .= sprintf( '\u003Ca href=\"%s\" class=\"edit-content\">%s\u003C\u002Fa>', esc_url_raw( $lesson->get_edit_link() ), esc_html__( 'Edit', 'learnpress' ) );\r\n-\t}\r\n-\r\n-\tlearn_press_display_message( $message, 'notice' );\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"content-item-description lesson-description\">\r\n-\t\u003C?php\r\n-\tlearn_press_echo_vuejs_write_on_php( $content );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying description of lesson.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fdescription.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Lesson $lesson\n+ *\u002F\n+if ( ! isset( $lesson ) ) {\n+\treturn;\n+}\n+\n+$content = $lesson->get_content();\n+\n+if ( ! $content ) {\n+\t$message = esc_html__( 'The lesson content is empty.', 'learnpress' );\n+\n+\tif ( $lesson->current_user_can_edit() ) {\n+\t\t$message .= sprintf( '\u003Ca href=\"%s\" class=\"edit-content\">%s\u003C\u002Fa>', esc_url_raw( $lesson->get_edit_link() ), esc_html__( 'Edit', 'learnpress' ) );\n+\t}\n+\n+\tlearn_press_display_message( $message, 'notice' );\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"content-item-description lesson-description\">\n+\t\u003C?php\n+\tlearn_press_echo_vuejs_write_on_php( $content );\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-lesson\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-lesson\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying title of lesson.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $lesson ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$title = $lesson->get_title( 'display' );\r\n-\r\n-if ( ! $title ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Ch1 class=\"course-item-title lesson-title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying title of lesson.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $lesson ) ) {\n+\treturn;\n+}\n+\n+$title = $lesson->get_title( 'display' );\n+\n+if ( ! $title ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Ch1 class=\"course-item-title lesson-title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-quiz\u002Fjs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-quiz\u002Fjs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-quiz\u002Fjs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-quiz\u002Fjs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,181 +1,181 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for printing js code used for Quiz.\r\n- * Call from hook 'learn-press\u002Fcontent-item-summary\u002Flp_quiz'\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserQuizModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-global $lpCourseModel;\r\n-$courseModel = $lpCourseModel;\r\n-if ( ! $courseModel instanceof CourseModel ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$userModel = UserModel::find( get_current_user_id(), true );\r\n-\r\n-$quiz = LP_Global::course_item_quiz();\r\n-if ( ! $quiz ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$quizPostModel = QuizPostModel::find( $quiz->get_id(), true );\r\n-if ( ! $quizPostModel instanceof QuizPostModel ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$total_question      = $quizPostModel->count_questions();\r\n-$questions           = array();\r\n-$show_check          = $quizPostModel->has_instant_check();\r\n-$show_correct_review = $quizPostModel->has_show_correct_review();\r\n-$question_ids        = $quizPostModel->get_question_ids();\r\n-$user_js             = array();\r\n-\r\n-$answered          = array();\r\n-$status            = '';\r\n-$checked_questions = array();\r\n-\r\n-$crypto_js_aes = false;\r\n-$user          = learn_press_get_current_user();\r\n-$editable      = $user->is_admin() || get_post_field( $user->is_author_of( $courseModel->get_id() ) );\r\n-$max_retrying  = learn_press_get_quiz_max_retrying( $quiz->get_id(), $courseModel->get_id() );\r\n-$quiz_results  = null;\r\n-$userQuizModel = null;\r\n-\r\n-if ( $userModel ) {\r\n-\t$userQuizModel = UserQuizModel::find_user_item(\r\n-\t\t$userModel->get_id(),\r\n-\t\t$quiz->get_id(),\r\n-\t\tLP_QUIZ_CPT,\r\n-\t\t$courseModel->get_id(),\r\n-\t\tLP_COURSE_CPT,\r\n-\t\ttrue\r\n-\t);\r\n-\r\n-\tif ( $userQuizModel instanceof UserQuizModel ) {\r\n-\t\t$status            = $userQuizModel->get_status();\r\n-\t\t$quiz_results      = $userQuizModel->get_result();\r\n-\t\t$checked_questions = $userQuizModel->get_checked_questions();\r\n-\r\n-\t\t$start_time_obj       = new LP_Datetime( $userQuizModel->get_start_time() );\r\n-\t\t$start_time_timestamp = $start_time_obj->getTimestamp();\r\n-\r\n-\t\t$user_js = array(\r\n-\t\t\t'status'            => $status,\r\n-\t\t\t'attempts'          => $userQuizModel->get_history(),\r\n-\t\t\t'checked_questions' => $checked_questions,\r\n-\t\t\t'start_time'        => $userQuizModel->get_start_time(),\r\n-\t\t\t'time_spend'        => time() - $start_time_timestamp,\r\n-\t\t\t'retaken'           => $userQuizModel->get_retaken_count(),\r\n-\t\t\t'total_time'        => $userQuizModel->get_time_remaining(),\r\n-\t\t\t'results'           => $quiz_results,\r\n-\t\t);\r\n-\r\n-\t\t$answered = $quiz_results['questions'];\r\n-\t}\r\n-}\r\n-\r\n-if ( ! $userQuizModel ) {\r\n-\t\u002F\u002F Display quiz content.\r\n-\techo '\u003Cdiv class=\"quiz-content\">';\r\n-\tglobal $post;\r\n-\t$original_post = $post;\r\n-\t$post          = get_post( $quizPostModel->get_id() );\r\n-\tsetup_postdata( $post );\r\n-\r\n-\techo $quizPostModel->get_the_content();\r\n-\r\n-\t$post = $original_post;\r\n-\tsetup_postdata( $post );\r\n-\techo '\u003C\u002Fdiv>';\r\n-}\r\n-\r\n-$questions = learn_press_rest_prepare_user_questions(\r\n-\t$question_ids,\r\n-\tarray(\r\n-\t\t'instant_check'       => $show_check,\r\n-\t\t'quiz_status'         => $status,\r\n-\t\t'checked_questions'   => $checked_questions,\r\n-\t\t'answered'            => $answered,\r\n-\t\t'show_correct_review' => $show_correct_review,\r\n-\t\t'status'              => $status,\r\n-\t)\r\n-);\r\n-\r\n-$duration = $quiz->get_duration();\r\n-\r\n-$js = array(\r\n-\t'course_id'              => $courseModel->get_id(),\r\n-\t'nonce'                  => wp_create_nonce( sprintf( 'user-quiz-%d', get_current_user_id() ) ),\r\n-\t'id'                     => $quizPostModel->get_id(),\r\n-\t'title'                  => $quizPostModel->get_the_title(),\r\n-\t'content'                => '',\r\n-\t'questions'              => $questions,\r\n-\t'question_ids'           => $question_ids,\r\n-\t'number_questions_to_do' => $quiz->get_number_questions_to_do(),\r\n-\t'current_question'       => absint( reset( $question_ids ) ),\r\n-\t'question_nav'           => '',\r\n-\t'status'                 => '',\r\n-\t'attempts'               => array(),\r\n-\t'answered'               => $answered ? (object) $answered : new stdClass(),\r\n-\t'checked_questions'      => array(),\r\n-\t'passing_grade'          => $quizPostModel->get_passing_grade(),\r\n-\t'negative_marking'       => $quizPostModel->has_negative_marking(),\r\n-\t'show_correct_review'    => $show_correct_review,\r\n-\t'instant_check'          => $quizPostModel->has_instant_check(),\r\n-\t'retake_count'           => absint( $quizPostModel->get_retake_count() ),\r\n-\t'retaken'                => 0,\r\n-\t'questions_per_page'     => $quiz->get_pagination(),\r\n-\t'page_numbers'           => get_post_meta( $quiz->get_id(), '_lp_pagination_numbers', true ) === 'yes',\r\n-\t'review_questions'       => $quizPostModel->get_meta_value_by_key( QuizPostModel::META_KEY_REVIEW, 'yes' ) === 'yes',\r\n-\t'support_options'        => learn_press_get_question_support_answer_options(),\r\n-\t'duration'               => $duration ? $duration->get() : false,\r\n-\t'crypto'                 => $crypto_js_aes,\r\n-\t'edit_permalink'         => $editable ? $quizPostModel->get_edit_link() : '',\r\n-\t'results'                => array(),\r\n-\t'required_password'      => post_password_required( $quiz->get_id() ),\r\n-\t'allow_retake'           => $quizPostModel->get_retake_count() == - 1,\r\n-);\r\n-\r\n-global $post;\r\n-$original_post = $post;\r\n-$post          = get_post( $quizPostModel->get_id() );\r\n-setup_postdata( $post );\r\n-\r\n-$js['quiz_description'] = $quizPostModel->get_the_content();\r\n-\r\n-$post = $original_post;\r\n-setup_postdata( $post );\r\n-\r\n-$js = array_merge( $js, $user_js );\r\n-\r\n-\u002F\u002F To show data debug.\r\n-LP_Helper::print_inline_script_tag( 'lp_quiz_js_data', [ 'data' => $js ] );\r\n-\r\n-if ( $total_question ) {\r\n-\t?>\r\n-\t\u003Cdiv id=\"learn-press-quiz-app\">\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cscript>\r\n-\t\tdocument.addEventListener('DOMContentLoaded', () => {\r\n-\t\t\tif (typeof LP !== 'undefined') {\r\n-\t\t\t\tLP.quiz.init(\r\n-\t\t\t\t\t'#learn-press-quiz-app',\r\n-\t\t\t\t\t\u003C?php echo json_encode( $js ); ?>\r\n-\t\t\t\t)\r\n-\t\t\t}\r\n-\t\t});\r\n-\t\u003C\u002Fscript>\r\n-\t\u003C?php\r\n-} else {\r\n-\tesc_html_e( 'You haven\\'t any question!', 'learnpress' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for printing js code used for Quiz.\n+ * Call from hook 'learn-press\u002Fcontent-item-summary\u002Flp_quiz'\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.2\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItems\\UserQuizModel;\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+global $lpCourseModel;\n+$courseModel = $lpCourseModel;\n+if ( ! $courseModel instanceof CourseModel ) {\n+\treturn;\n+}\n+\n+$userModel = UserModel::find( get_current_user_id(), true );\n+\n+$quiz = LP_Global::course_item_quiz();\n+if ( ! $quiz ) {\n+\treturn;\n+}\n+\n+$quizPostModel = QuizPostModel::find( $quiz->get_id(), true );\n+if ( ! $quizPostModel instanceof QuizPostModel ) {\n+\treturn;\n+}\n+\n+$total_question      = $quizPostModel->count_questions();\n+$questions           = array();\n+$show_check          = $quizPostModel->has_instant_check();\n+$show_correct_review = $quizPostModel->has_show_correct_review();\n+$question_ids        = $quizPostModel->get_question_ids();\n+$user_js             = array();\n+\n+$answered          = array();\n+$status            = '';\n+$checked_questions = array();\n+\n+$crypto_js_aes = false;\n+$user          = learn_press_get_current_user();\n+$editable      = $user->is_admin() || get_post_field( $user->is_author_of( $courseModel->get_id() ) );\n+$max_retrying  = learn_press_get_quiz_max_retrying( $quiz->get_id(), $courseModel->get_id() );\n+$quiz_results  = null;\n+$userQuizModel = null;\n+\n+if ( $userModel ) {\n+\t$userQuizModel = UserQuizModel::find_user_item(\n+\t\t$userModel->get_id(),\n+\t\t$quiz->get_id(),\n+\t\tLP_QUIZ_CPT,\n+\t\t$courseModel->get_id(),\n+\t\tLP_COURSE_CPT,\n+\t\ttrue\n+\t);\n+\n+\tif ( $userQuizModel instanceof UserQuizModel ) {\n+\t\t$status            = $userQuizModel->get_status();\n+\t\t$quiz_results      = $userQuizModel->get_result();\n+\t\t$checked_questions = $userQuizModel->get_checked_questions();\n+\n+\t\t$start_time_obj       = new LP_Datetime( $userQuizModel->get_start_time() );\n+\t\t$start_time_timestamp = $start_time_obj->getTimestamp();\n+\n+\t\t$user_js = array(\n+\t\t\t'status'            => $status,\n+\t\t\t'attempts'          => $userQuizModel->get_history(),\n+\t\t\t'checked_questions' => $checked_questions,\n+\t\t\t'start_time'        => $userQuizModel->get_start_time(),\n+\t\t\t'time_spend'        => time() - $start_time_timestamp,\n+\t\t\t'retaken'           => $userQuizModel->get_retaken_count(),\n+\t\t\t'total_time'        => $userQuizModel->get_time_remaining(),\n+\t\t\t'results'           => $quiz_results,\n+\t\t);\n+\n+\t\t$answered = $quiz_results['questions'];\n+\t}\n+}\n+\n+if ( ! $userQuizModel ) {\n+\t\u002F\u002F Display quiz content.\n+\techo '\u003Cdiv class=\"quiz-content\">';\n+\tglobal $post;\n+\t$original_post = $post;\n+\t$post          = get_post( $quizPostModel->get_id() );\n+\tsetup_postdata( $post );\n+\n+\techo $quizPostModel->get_the_content();\n+\n+\t$post = $original_post;\n+\tsetup_postdata( $post );\n+\techo '\u003C\u002Fdiv>';\n+}\n+\n+$questions = learn_press_rest_prepare_user_questions(\n+\t$question_ids,\n+\tarray(\n+\t\t'instant_check'       => $show_check,\n+\t\t'quiz_status'         => $status,\n+\t\t'checked_questions'   => $checked_questions,\n+\t\t'answered'            => $answered,\n+\t\t'show_correct_review' => $show_correct_review,\n+\t\t'status'              => $status,\n+\t)\n+);\n+\n+$duration = $quiz->get_duration();\n+\n+$js = array(\n+\t'course_id'              => $courseModel->get_id(),\n+\t'nonce'                  => wp_create_nonce( sprintf( 'user-quiz-%d', get_current_user_id() ) ),\n+\t'id'                     => $quizPostModel->get_id(),\n+\t'title'                  => $quizPostModel->get_the_title(),\n+\t'content'                => '',\n+\t'questions'              => $questions,\n+\t'question_ids'           => $question_ids,\n+\t'number_questions_to_do' => $quiz->get_number_questions_to_do(),\n+\t'current_question'       => absint( reset( $question_ids ) ),\n+\t'question_nav'           => '',\n+\t'status'                 => '',\n+\t'attempts'               => array(),\n+\t'answered'               => $answered ? (object) $answered : new stdClass(),\n+\t'checked_questions'      => array(),\n+\t'passing_grade'          => $quizPostModel->get_passing_grade(),\n+\t'negative_marking'       => $quizPostModel->has_negative_marking(),\n+\t'show_correct_review'    => $show_correct_review,\n+\t'instant_check'          => $quizPostModel->has_instant_check(),\n+\t'retake_count'           => absint( $quizPostModel->get_retake_count() ),\n+\t'retaken'                => 0,\n+\t'questions_per_page'     => $quiz->get_pagination(),\n+\t'page_numbers'           => get_post_meta( $quiz->get_id(), '_lp_pagination_numbers', true ) === 'yes',\n+\t'review_questions'       => $quizPostModel->get_meta_value_by_key( QuizPostModel::META_KEY_REVIEW, 'yes' ) === 'yes',\n+\t'support_options'        => learn_press_get_question_support_answer_options(),\n+\t'duration'               => $duration ? $duration->get() : false,\n+\t'crypto'                 => $crypto_js_aes,\n+\t'edit_permalink'         => $editable ? $quizPostModel->get_edit_link() : '',\n+\t'results'                => array(),\n+\t'required_password'      => post_password_required( $quiz->get_id() ),\n+\t'allow_retake'           => $quizPostModel->get_retake_count() == - 1,\n+);\n+\n+global $post;\n+$original_post = $post;\n+$post          = get_post( $quizPostModel->get_id() );\n+setup_postdata( $post );\n+\n+$js['quiz_description'] = $quizPostModel->get_the_content();\n+\n+$post = $original_post;\n+setup_postdata( $post );\n+\n+$js = array_merge( $js, $user_js );\n+\n+\u002F\u002F To show data debug.\n+LP_Helper::print_inline_script_tag( 'lp_quiz_js_data', [ 'data' => $js ] );\n+\n+if ( $total_question ) {\n+\t?>\n+\t\u003Cdiv id=\"learn-press-quiz-app\">\u003C\u002Fdiv>\n+\n+\t\u003Cscript>\n+\t\tdocument.addEventListener('DOMContentLoaded', () => {\n+\t\t\tif (typeof LP !== 'undefined') {\n+\t\t\t\tLP.quiz.init(\n+\t\t\t\t\t'#learn-press-quiz-app',\n+\t\t\t\t\t\u003C?php echo json_encode( $js ); ?>\n+\t\t\t\t)\n+\t\t\t}\n+\t\t});\n+\t\u003C\u002Fscript>\n+\t\u003C?php\n+} else {\n+\tesc_html_e( 'You haven\\'t any question!', 'learnpress' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-quiz\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-quiz\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-quiz\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-quiz\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying title of quiz.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-quiz\u002Ftitle.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$quiz   = LP_Global::course_item_quiz();\r\n-$course = learn_press_get_course();\r\n-$title  = $quiz->get_heading_title( 'display' );\r\n-\r\n-if ( ! $title ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Ch1 class=\"course-item-title quiz-title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying title of quiz.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-quiz\u002Ftitle.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$quiz   = LP_Global::course_item_quiz();\n+$course = learn_press_get_course();\n+$title  = $quiz->get_heading_title( 'display' );\n+\n+if ( ! $title ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Ch1 class=\"course-item-title quiz-title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-single-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-single-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-single-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-single-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of course without header and footer\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * If course has set password\r\n- *\u002F\r\n-if ( post_password_required() ) {\r\n-\techo get_the_password_form();\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-single-course' );\r\n-\r\n-?>\r\n-\u003Cdiv id=\"learn-press-course\" class=\"course-summary\">\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @since 3.0.0\r\n-\t *\r\n-\t * @called single-course\u002Fcontent.php\r\n-\t * @called single-course\u002Fsidebar.php\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fsingle-course-summary' );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-single-course' );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of course without header and footer\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * If course has set password\n+ *\u002F\n+if ( post_password_required() ) {\n+\techo get_the_password_form();\n+\treturn;\n+}\n+\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-single-course' );\n+\n+?>\n+\u003Cdiv id=\"learn-press-course\" class=\"course-summary\">\n+\t\u003C?php\n+\t\u002F**\n+\t * @since 3.0.0\n+\t *\n+\t * @called single-course\u002Fcontent.php\n+\t * @called single-course\u002Fsidebar.php\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fsingle-course-summary' );\n+\t?>\n+\u003C\u002Fdiv>\n+\u003C?php\n+\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-single-course' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-single-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-single-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcontent-single-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcontent-single-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,69 +1,69 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course with curriculum and\r\n- * item's content inside it\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @since 4.0.0\r\n- *\r\n- * @see LP_Template_General::template_header()\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-header' );\r\n-}\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-main-content' );\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-single-item' );\r\n-?>\r\n-\t\u003Cdiv id=\"popup-course\" class=\"course-summary\">\r\n-\t\t\u003C?php\r\n-\t\t\u002F**\r\n-\t\t * Get content item's course\r\n-\t\t *\r\n-\t\t * @since 3.0.0\r\n-\t\t *\r\n-\t\t * @see LP_Template_Course::popup_content() - 30\r\n-\t\t *\u002F\r\n-\t\tdo_action( 'learn-press\u002Fsingle-item-summary' );\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-main-content' );\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\r\n- * @since 3.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-single-course' );\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\r\n- * @since 4.0.0\r\n- *\r\n- * @see LP_Template_General::template_footer()\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-footer' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course with curriculum and\n+ * item's content inside it\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @since 4.0.0\n+ *\n+ * @see LP_Template_General::template_header()\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-header' );\n+}\n+\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-main-content' );\n+\n+\u002F**\n+ * LP Hook\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-single-item' );\n+?>\n+\t\u003Cdiv id=\"popup-course\" class=\"course-summary\">\n+\t\t\u003C?php\n+\t\t\u002F**\n+\t\t * Get content item's course\n+\t\t *\n+\t\t * @since 3.0.0\n+\t\t *\n+\t\t * @see LP_Template_Course::popup_content() - 30\n+\t\t *\u002F\n+\t\tdo_action( 'learn-press\u002Fsingle-item-summary' );\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\u003C?php\n+\n+\u002F**\n+ * LP Hook\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-main-content' );\n+\n+\u002F**\n+ * LP Hook\n+ *\n+ * @since 3.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-single-course' );\n+\n+\u002F**\n+ * LP Hook\n+ *\n+ * @since 4.0.0\n+ *\n+ * @see LP_Template_General::template_footer()\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-footer' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcourses-top-bar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcourses-top-bar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fcourses-top-bar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fcourses-top-bar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying top-bar in archive course page.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$layouts = learn_press_courses_layouts();\r\n-$active  = learn_press_get_courses_layout();\r\n-$s       = LP_Request::get_param( 'c_search' );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-courses-bar \u003C?php echo esc_attr( $active ); ?>\">\r\n-\t\u003Cform class=\"search-courses\" method=\"get\" action=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\">\r\n-\t\t\u003Cinput type=\"hidden\" name=\"post_type\" value=\"\u003C?php echo esc_attr( LP_COURSE_CPT ); ?>\">\r\n-\t\t\u003Cinput type=\"hidden\" name=\"taxonomy\" value=\"\u003C?php echo esc_attr( get_queried_object()->taxonomy ?? $_GET['taxonomy'] ?? '' ); ?>\">\r\n-\t\t\u003Cinput type=\"hidden\" name=\"term_id\" value=\"\u003C?php echo esc_attr( get_queried_object()->term_id ?? $_GET['term_id'] ?? '' ); ?>\">\r\n-\t\t\u003Cinput type=\"hidden\" name=\"term\" value=\"\u003C?php echo esc_attr( get_queried_object()->slug ?? $_GET['term'] ?? '' ); ?>\">\r\n-\t\t\u003Cinput type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Search courses...', 'learnpress' ); ?>\" name=\"c_search\" value=\"\u003C?php echo esc_attr( $s ); ?>\">\r\n-\t\t\u003Cbutton type=\"submit\" name=\"lp-btn-search-courses\">\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\r\n-\t\u003C\u002Fform>\r\n-\r\n-\t\u003Cdiv class=\"switch-layout\">\r\n-\t\t\u003C?php foreach ( $layouts as $layout => $value ) : ?>\r\n-\t\t\t\u003Cinput type=\"radio\" name=\"lp-switch-layout-btn\"\r\n-\t\t\t\tvalue=\"\u003C?php echo esc_attr( $layout ); ?>\"\r\n-\t\t\t\tid=\"lp-switch-layout-btn-\u003C?php echo esc_attr( $layout ); ?>\" \u003C?php checked( $layout, $active ); ?>>\r\n-\t\t\t\u003Clabel class=\"switch-btn \u003C?php echo esc_attr( $layout ); ?>\"\r\n-\t\t\t\ttitle=\"\u003C?php echo sprintf( esc_attr__( 'Switch to %s', 'learnpress' ), $value ); ?>\"\r\n-\t\t\t\tfor=\"lp-switch-layout-btn-\u003C?php echo esc_attr( $layout ); ?>\">\u003C\u002Flabel>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying top-bar in archive course page.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$layouts = learn_press_courses_layouts();\n+$active  = learn_press_get_courses_layout();\n+$s       = LP_Request::get_param( 'c_search' );\n+?>\n+\n+\u003Cdiv class=\"lp-courses-bar \u003C?php echo esc_attr( $active ); ?>\">\n+\t\u003Cform class=\"search-courses\" method=\"get\" action=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\">\n+\t\t\u003Cinput type=\"hidden\" name=\"post_type\" value=\"\u003C?php echo esc_attr( LP_COURSE_CPT ); ?>\">\n+\t\t\u003Cinput type=\"hidden\" name=\"taxonomy\" value=\"\u003C?php echo esc_attr( get_queried_object()->taxonomy ?? $_GET['taxonomy'] ?? '' ); ?>\">\n+\t\t\u003Cinput type=\"hidden\" name=\"term_id\" value=\"\u003C?php echo esc_attr( get_queried_object()->term_id ?? $_GET['term_id'] ?? '' ); ?>\">\n+\t\t\u003Cinput type=\"hidden\" name=\"term\" value=\"\u003C?php echo esc_attr( get_queried_object()->slug ?? $_GET['term'] ?? '' ); ?>\">\n+\t\t\u003Cinput type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Search courses...', 'learnpress' ); ?>\" name=\"c_search\" value=\"\u003C?php echo esc_attr( $s ); ?>\">\n+\t\t\u003Cbutton type=\"submit\" name=\"lp-btn-search-courses\">\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\u003C\u002Fbutton>\n+\t\u003C\u002Fform>\n+\n+\t\u003Cdiv class=\"switch-layout\">\n+\t\t\u003C?php foreach ( $layouts as $layout => $value ) : ?>\n+\t\t\t\u003Cinput type=\"radio\" name=\"lp-switch-layout-btn\"\n+\t\t\t\tvalue=\"\u003C?php echo esc_attr( $layout ); ?>\"\n+\t\t\t\tid=\"lp-switch-layout-btn-\u003C?php echo esc_attr( $layout ); ?>\" \u003C?php checked( $layout, $active ); ?>>\n+\t\t\t\u003Clabel class=\"switch-btn \u003C?php echo esc_attr( $layout ); ?>\"\n+\t\t\t\ttitle=\"\u003C?php echo sprintf( esc_attr__( 'Switch to %s', 'learnpress' ), $value ); ?>\"\n+\t\t\t\tfor=\"lp-switch-layout-btn-\u003C?php echo esc_attr( $layout ); ?>\">\u003C\u002Flabel>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fbecome-an-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fbecome-an-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fbecome-an-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fbecome-an-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-{{header}}\r\n-\r\n-\u003Cp>User {{request_email}} has requested to become an Instructor at {{site_title}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>Phone: {{request_phone}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>Message: {{request_message}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please login to {{site_title}} and access {{admin_user_manager}} to manage the requesting.\u003C\u002Fp>\r\n-\r\n-\u003Cp>Accept the requesting: {{accept_url}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>Deny the requesting: {{deny_url}}\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>User {{request_email}} has requested to become an Instructor at {{site_title}}\u003C\u002Fp>\n+\n+\u003Cp>Phone: {{request_phone}}\u003C\u002Fp>\n+\n+\u003Cp>Message: {{request_message}}\u003C\u002Fp>\n+\n+\u003Cp>Please login to {{site_title}} and access {{admin_user_manager}} to manage the requesting.\u003C\u002Fp>\n+\n+\u003Cp>Accept the requesting: {{accept_url}}\u003C\u002Fp>\n+\n+\u003Cp>Deny the requesting: {{deny_url}}\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been cancelled\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n+{{header}}\n+\n+\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been cancelled\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>, \u003C\u002Fp>\r\n-\u003Cp>Your recent order at {{site_title}} has been cancelled.\u003Cp>\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>, \u003C\u002Fp>\n+\u003Cp>Your recent order at {{site_title}} has been cancelled.\u003Cp>\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been cancelled\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n+{{header}}\n+\n+\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been cancelled\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcancelled-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcancelled-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>,\u003C\u002Fp>\r\n-\r\n-\u003Cp>Your recent order at {{site_title}} has been cancelled.\u003Cp>\r\n-\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>,\u003C\u002Fp>\n+\n+\u003Cp>Your recent order at {{site_title}} has been cancelled.\u003Cp>\n+\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been completed\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n+{{header}}\n+\n+\u003Cp>Order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong> has been completed\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\r\n-\r\n-\u003Cp>Your recent order at {{site_title}} has been completed.\u003Cp>\r\n-\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-\u003Cp>Order key: {{order_key}}\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\n+\n+\u003Cp>Your recent order at {{site_title}} has been completed.\u003Cp>\n+\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+\u003Cp>Order key: {{order_key}}\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fcompleted-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fcompleted-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>,\u003C\u002Fp>\r\n-\r\n-\u003Cp>Your recent order at {{site_title}} has been completed.\u003Cp>\r\n-\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>,\u003C\u002Fp>\n+\n+\u003Cp>Your recent order at {{site_title}} has been completed.\u003Cp>\n+\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-footer.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-footer.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-footer.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-footer.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,32 +1,32 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying email footer.\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or exit();\r\n-?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C\u002Ftbody>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( ! empty( $footer_text ) ) {\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Ctfoot id=\"email-footer\">\r\n-\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $footer_text ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C\u002Ftfoot>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Ftable>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Ftable>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying email footer.\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or exit();\n+?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C\u002Ftbody>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( ! empty( $footer_text ) ) {\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Ctfoot id=\"email-footer\">\n+\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $footer_text ); ?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C\u002Ftfoot>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Ftable>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Ftable>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-header.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-header.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-header.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-header.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\r\n-if ( ! isset( $email_heading ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\u003C!DOCTYPE html>\r\n-\u003Chtml dir=\"\u003C?php echo is_rtl() ? 'rtl' : 'ltr'; ?>\">\r\n-\u003Chead>\r\n-\t\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=UTF-8\"\u002F>\r\n-\t\u003Ctitle>\u003C?php echo get_bloginfo( 'name', 'display' ); ?>\u003C\u002Ftitle>\r\n-\u003C\u002Fhead>\r\n-\u003Cbody \u003C?php echo is_rtl() ? 'rightmargin' : 'leftmargin'; ?>=\"0\" marginwidth=\"0\" topmargin=\"0\" marginheight=\"0\" offset=\"\r\n-0\">\r\n-\u003Cdiv id=\"wrapper\" dir=\"\u003C?php echo is_rtl() ? 'rtl' : 'ltr'; ?>\">\r\n-\t\u003Ctable border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\" width=\"100%\">\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Ctd align=\"center\" valign=\"top\">\r\n-\t\t\t\t\u003C?php if ( ! empty( $image_header ) ) { ?>\r\n-\t\t\t\t\t\u003Cdiv id=\"template_header_image\">\r\n-\t\t\t\t\t\t\u003Cp style=\"margin-top:0;\">\r\n-\t\t\t\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $image_header ); ?>\"\r\n-\t\t\t\t\t\t\t\talt=\"\u003C?php echo get_bloginfo( 'name', 'display' ); ?>\"\u002F>\r\n-\t\t\t\t\t\t\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\t\u003Ctable border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"600\" id=\"template_container\">\r\n-\t\t\t\t\t\u003Cthead id=\"email-header\">\r\n-\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\u003Ctd align=\"center\" valign=\"top\">\r\n-\t\t\t\t\t\t\t\u003Ch2 class=\"order-heading\">\r\n-\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $email_heading ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fh2>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C\u002Fthead>\r\n-\t\t\t\t\t\u003Ctbody id=\"email-body\">\r\n-\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\u003Ctd align=\"center\" valign=\"top\">\r\n+\u003C?php\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\n+if ( ! isset( $email_heading ) ) {\n+\treturn;\n+}\n+?>\n+\u003C!DOCTYPE html>\n+\u003Chtml dir=\"\u003C?php echo is_rtl() ? 'rtl' : 'ltr'; ?>\">\n+\u003Chead>\n+\t\u003Cmeta http-equiv=\"Content-Type\" content=\"text\u002Fhtml; charset=UTF-8\"\u002F>\n+\t\u003Ctitle>\u003C?php echo get_bloginfo( 'name', 'display' ); ?>\u003C\u002Ftitle>\n+\u003C\u002Fhead>\n+\u003Cbody \u003C?php echo is_rtl() ? 'rightmargin' : 'leftmargin'; ?>=\"0\" marginwidth=\"0\" topmargin=\"0\" marginheight=\"0\" offset=\"\n+0\">\n+\u003Cdiv id=\"wrapper\" dir=\"\u003C?php echo is_rtl() ? 'rtl' : 'ltr'; ?>\">\n+\t\u003Ctable border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\" width=\"100%\">\n+\t\t\u003Ctr>\n+\t\t\t\u003Ctd align=\"center\" valign=\"top\">\n+\t\t\t\t\u003C?php if ( ! empty( $image_header ) ) { ?>\n+\t\t\t\t\t\u003Cdiv id=\"template_header_image\">\n+\t\t\t\t\t\t\u003Cp style=\"margin-top:0;\">\n+\t\t\t\t\t\t\t\u003Cimg src=\"\u003C?php echo esc_url_raw( $image_header ); ?>\"\n+\t\t\t\t\t\t\t\talt=\"\u003C?php echo get_bloginfo( 'name', 'display' ); ?>\"\u002F>\n+\t\t\t\t\t\t\u003C\u002Fp>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php } ?>\n+\t\t\t\t\u003Ctable border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"600\" id=\"template_container\">\n+\t\t\t\t\t\u003Cthead id=\"email-header\">\n+\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\u003Ctd align=\"center\" valign=\"top\">\n+\t\t\t\t\t\t\t\u003Ch2 class=\"order-heading\">\n+\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $email_heading ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fh2>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C\u002Fthead>\n+\t\t\t\t\t\u003Ctbody id=\"email-body\">\n+\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\u003Ctd align=\"center\" valign=\"top\">\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-styles.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-styles.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Femail-styles.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Femail-styles.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,111 +1,111 @@\n-\u003C?php\r\n-ob_start();\r\n-?>\r\n-\t\u003Cstyle>\r\n-\t\t#wrapper {\r\n-\t\t\tcolor: #777;\r\n-\t\t}\r\n-\r\n-\t\t#template_container {\r\n-\t\t\tbackground: #f2fbff;\r\n-\t\t}\r\n-\r\n-\t\t#template_header_image {\r\n-\t\t\ttext-align: center;\r\n-\t\t}\r\n-\r\n-\t\t.order-heading {\r\n-\t\t\tbackground: #00adff;\r\n-\t\t\tpadding: 20px;\r\n-\t\t\tcolor: #FFF;\r\n-\t\t\tmargin: 0 0 20px 0;\r\n-\t\t\tfont-weight: lighter;\r\n-\t\t\tfont-size: 24px;\r\n-\t\t\tborder-radius: 3px;\r\n-\t\t\t-webkit-border-radius: 3px;\r\n-\t\t\t-moz-border-radius: 3px;\r\n-\t\t}\r\n-\r\n-\t\t.order-details {\r\n-\t\t\twidth: 100%;\r\n-\t\t\tmargin-bottom: 20px;\r\n-\t\t}\r\n-\r\n-\t\t.order-details th {\r\n-\t\t\ttext-align: left;\r\n-\t\t\tfont-weight: normal;\r\n-\t\t\tpadding: 5px 0;\r\n-\t\t}\r\n-\r\n-\t\t.order-details td {\r\n-\t\t\ttext-align: right;\r\n-\t\t\tpadding: 5px 0;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items-heading {\r\n-\t\t\tbackground: #dedede;\r\n-\t\t\tcolor: #656565;\r\n-\t\t\ttext-align: center;\r\n-\t\t\tpadding: 10px;\r\n-\t\t\ttext-transform: uppercase;\r\n-\t\t\tfont-weight: normal;\r\n-\t\t\tborder-radius: 3px;\r\n-\t\t\t-webkit-border-radius: 3px;\r\n-\t\t\t-moz-border-radius: 3px;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items {\r\n-\t\t\twidth: 100%;\r\n-\t\t\tfont-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;\r\n-\t\t\tborder: none;\r\n-\t\t\tfont-size: 14px;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items th {\r\n-\t\t\tborder-top: 1px solid #DDD;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items th,\r\n-\t\t.order-table-items td {\r\n-\t\t\ttext-align: left;\r\n-\t\t\tvertical-align: middle;\r\n-\t\t\tborder-bottom: 1px solid #DDD;\r\n-\t\t\tpadding: 8px 0;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items .column-name {\r\n-\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items .column-quantity {\r\n-\t\t\twidth: 100px;\r\n-\t\t\ttext-align: right;\r\n-\t\t}\r\n-\r\n-\t\t.order-table-items .column-number {\r\n-\t\t\twidth: 100px;\r\n-\t\t\ttext-align: right;\r\n-\t\t}\r\n-\r\n-\t\t#email-body > tr > td {\r\n-\t\t\tpadding: 0 20px 20px 20px;\r\n-\t\t}\r\n-\r\n-\t\t#template_container #email-footer td {\r\n-\t\t\ttext-align: center;\r\n-\t\t\tpadding: 20px;\r\n-\t\t\tborder-top: 1px solid #DDD;\r\n-\t\t}\r\n-\r\n-\t\t.order-heading-total {\r\n-\t\t\tdisplay: block;\r\n-\t\t\tfont-size: 32px;\r\n-\t\t}\r\n-\r\n-\t\tp {\r\n-\t\t\tmargin: 0 0 20px 0;\r\n-\t\t}\r\n-\r\n-\t\u003C\u002Fstyle>\r\n-\u003C?php\r\n-echo preg_replace( '!\u003C\u002F?style.*>!', '', ob_get_clean() );\r\n+\u003C?php\n+ob_start();\n+?>\n+\t\u003Cstyle>\n+\t\t#wrapper {\n+\t\t\tcolor: #777;\n+\t\t}\n+\n+\t\t#template_container {\n+\t\t\tbackground: #f2fbff;\n+\t\t}\n+\n+\t\t#template_header_image {\n+\t\t\ttext-align: center;\n+\t\t}\n+\n+\t\t.order-heading {\n+\t\t\tbackground: #00adff;\n+\t\t\tpadding: 20px;\n+\t\t\tcolor: #FFF;\n+\t\t\tmargin: 0 0 20px 0;\n+\t\t\tfont-weight: lighter;\n+\t\t\tfont-size: 24px;\n+\t\t\tborder-radius: 3px;\n+\t\t\t-webkit-border-radius: 3px;\n+\t\t\t-moz-border-radius: 3px;\n+\t\t}\n+\n+\t\t.order-details {\n+\t\t\twidth: 100%;\n+\t\t\tmargin-bottom: 20px;\n+\t\t}\n+\n+\t\t.order-details th {\n+\t\t\ttext-align: left;\n+\t\t\tfont-weight: normal;\n+\t\t\tpadding: 5px 0;\n+\t\t}\n+\n+\t\t.order-details td {\n+\t\t\ttext-align: right;\n+\t\t\tpadding: 5px 0;\n+\t\t}\n+\n+\t\t.order-table-items-heading {\n+\t\t\tbackground: #dedede;\n+\t\t\tcolor: #656565;\n+\t\t\ttext-align: center;\n+\t\t\tpadding: 10px;\n+\t\t\ttext-transform: uppercase;\n+\t\t\tfont-weight: normal;\n+\t\t\tborder-radius: 3px;\n+\t\t\t-webkit-border-radius: 3px;\n+\t\t\t-moz-border-radius: 3px;\n+\t\t}\n+\n+\t\t.order-table-items {\n+\t\t\twidth: 100%;\n+\t\t\tfont-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;\n+\t\t\tborder: none;\n+\t\t\tfont-size: 14px;\n+\t\t}\n+\n+\t\t.order-table-items th {\n+\t\t\tborder-top: 1px solid #DDD;\n+\t\t}\n+\n+\t\t.order-table-items th,\n+\t\t.order-table-items td {\n+\t\t\ttext-align: left;\n+\t\t\tvertical-align: middle;\n+\t\t\tborder-bottom: 1px solid #DDD;\n+\t\t\tpadding: 8px 0;\n+\t\t}\n+\n+\t\t.order-table-items .column-name {\n+\n+\t\t}\n+\n+\t\t.order-table-items .column-quantity {\n+\t\t\twidth: 100px;\n+\t\t\ttext-align: right;\n+\t\t}\n+\n+\t\t.order-table-items .column-number {\n+\t\t\twidth: 100px;\n+\t\t\ttext-align: right;\n+\t\t}\n+\n+\t\t#email-body > tr > td {\n+\t\t\tpadding: 0 20px 20px 20px;\n+\t\t}\n+\n+\t\t#template_container #email-footer td {\n+\t\t\ttext-align: center;\n+\t\t\tpadding: 20px;\n+\t\t\tborder-top: 1px solid #DDD;\n+\t\t}\n+\n+\t\t.order-heading-total {\n+\t\t\tdisplay: block;\n+\t\t\tfont-size: 32px;\n+\t\t}\n+\n+\t\tp {\n+\t\t\tmargin: 0 0 20px 0;\n+\t\t}\n+\n+\t\u003C\u002Fstyle>\n+\u003C?php\n+echo preg_replace( '!\u003C\u002F?style.*>!', '', ob_get_clean() );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-{{header}}\r\n-\r\n-\u003Cp>User {{user_display_name}} ({{user_email}}) has enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>User {{user_display_name}} ({{user_email}}) has enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-{{header}}\r\n-\r\n-\u003Cp>User {{user_display_name}} ({{user_email}}) has enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>User {{user_display_name}} ({{user_email}}) has enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>You have enrolled in the course \u003Ca target=\"_blank\" href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and start learning now.\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>You have enrolled in the course \u003Ca target=\"_blank\" href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa>\u003C\u002Fp>\n+\n+\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and start learning now.\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fenrolled-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fenrolled-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,5 +1,5 @@\n-{{header}}\r\n-\r\n-\u003Cp>Congrats! You have enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Congrats! You have enrolled course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>User {{user_display_name}} ({{user_email}}) has finished course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-\u003Cp>User has \u003Cstrong>{{course_grade}}\u003C\u002Fstrong> course with {{course_result_percent}} of total\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>User {{user_display_name}} ({{user_email}}) has finished course  \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n+\u003Cp>User has \u003Cstrong>{{course_grade}}\u003C\u002Fstrong> course with {{course_result_percent}} of total\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>User {{user_display_name}} ({{user_email}}) has finished course \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-\u003Cp>User has \u003Cstrong>{{course_grade}}\u003C\u002Fstrong> course with {{course_result_percent}} of total\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>User {{user_display_name}} ({{user_email}}) has finished course \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n+\u003Cp>User has \u003Cstrong>{{course_grade}}\u003C\u002Fstrong> course with {{course_result_percent}} of total\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-{{header}}\r\n-\r\n-\u003Cp>Dear \u003Cstrong>{{user_name}},\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-\u003Cp>You have finished the course \u003Ca target=\"_blank\" href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please go to your profile \u003Ca target=\"_blank\" href=\"{{user_profile_url}}\">{{user_name}}\u003C\u002Fa> and view your course results.\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Dear \u003Cstrong>{{user_name}},\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+\u003Cp>You have finished the course \u003Ca target=\"_blank\" href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa>\u003C\u002Fp>\n+\n+\u003Cp>Please go to your profile \u003Ca target=\"_blank\" href=\"{{user_profile_url}}\">{{user_name}}\u003C\u002Fa> and view your course results.\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Ffinished-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Ffinished-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>Congrats! You have finished course \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-\u003Cp>You achieved {{course_result_percent}} of course and your grade is \u003Cstrong>{{course_grade}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Congrats! You have finished course \u003Ca target=\"_blank\" href=\"{{course_url}}\">\"{{course_name}}\"\u003C\u002Fa>\u003C\u002Fp>\n+\n+\u003Cp>You achieved {{course_result_percent}} of course and your grade is \u003Cstrong>{{course_grade}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Finstructor-accepted.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Finstructor-accepted.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Finstructor-accepted.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Finstructor-accepted.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>Congrats! You become an Instructor at \u003Cstrong>{{site_title}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> to \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and start teaching\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Congrats! You become an Instructor at \u003Cstrong>{{site_title}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> to \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and start teaching\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Finstructor-denied.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Finstructor-denied.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Finstructor-denied.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Finstructor-denied.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-{{header}}\r\n-\r\n-\u003Cp>Your Become an Instructor request at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> has been denied\u003C\u002Fp>\r\n-\r\n+\n+{{header}}\n+\n+\u003Cp>Your Become an Instructor request at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> has been denied\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>A new course \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> has been submitted is waiting for your approval\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please review course\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>A new course \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> has been submitted is waiting for your approval\u003C\u002Fp>\n+\n+\u003Cp>Please review course\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>New order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n+{{header}}\n+\n+\u003Cp>New order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\r\n-\r\n-\u003Cp>\r\n-    Thank you for purchasing course with {{site_title}}!\r\n-    We have received your order and it is now being processed.\r\n-    We will send you an email once your order has been processed.\r\n-\u003Cp>\r\n-\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-\u003Cp>Order key: {{order_key}}\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\n+\n+\u003Cp>\n+    Thank you for purchasing course with {{site_title}}!\n+    We have received your order and it is now being processed.\n+    We will send you an email once your order has been processed.\n+\u003Cp>\n+\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+\u003Cp>Order key: {{order_key}}\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>New order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n+{{header}}\n+\n+\u003Cp>New order placed by \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fnew-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fnew-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-\u003Cp>We have received your order at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and send you the details.\u003Cp>\r\n-\r\n-\u003Cp>You can also login to your account to see more details.\u003Cp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+\u003Cp>We have received your order at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and send you the details.\u003Cp>\n+\n+\u003Cp>You can also login to your account to see more details.\u003Cp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Forder-items-table.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Forder-items-table.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Forder-items-table.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Forder-items-table.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,126 +1,126 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying email order items table.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Femails\u002Forder-items-table.php\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 3.0.3\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\UserModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\u002F**\r\n- * @var $order LP_Order\r\n- *\u002F\r\n-if ( ! isset( $order ) ) {\r\n-\terror_log( 'Invalid params on ' . __FILE__ );\r\n-\treturn;\r\n-}\r\n-\r\n-$items = $order->get_items();\r\n-\r\n-if ( ! $items ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$email_content = '';\r\n-\r\n-if ( $order->is_manual() ) {\r\n-\t$user_ids = $order->get_user_id();\r\n-\tif ( is_array( $user_ids ) ) {\r\n-\t\t$email_arr = [];\r\n-\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t$userModel = UserModel::find( $user_id, true );\r\n-\t\t\tif ( $userModel ) {\r\n-\t\t\t\t$email_arr[] = $userModel->get_email();\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$email_content = implode( ',', $email_arr );\r\n-\t} else {\r\n-\t\t$email_content = $order->get_user_email();\r\n-\t}\r\n-} else {\r\n-\t$email_content = $order->get_user_email();\r\n-}\r\n-?>\r\n-\r\n-\u003Ch3 class=\"order-table-items-heading\">\r\n-\t\u003C?php _e( 'Order summary', 'learnpress' ); ?>\r\n-\u003C\u002Fh3>\r\n-\r\n-\u003Ctable class=\"order-details\">\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Order Number', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_order_number() ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Purchase Date', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003C?php echo date_i18n( get_option( 'date_format' ), $order->get_order_date( 'timestamp' ) ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Payment Method', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003C?php echo wp_kses_post( $order->get_payment_method_title() ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003Ctr>\r\n-\t\t\u003Cth>\u003C?php _e( 'User Email', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Ctd>\u003C?php echo wp_kses_post( $email_content ); ?>\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\u003C\u002Ftable>\r\n-\r\n-\u003Ctable class=\"order-table-items\" cellspacing=\"0\" cellpadding=\"5\">\r\n-\t\u003Cthead>\r\n-\t\u003Ctr>\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-email-order-item-heading', $order ); ?>\r\n-\t\t\u003Cth class=\"column-name\">\u003C?php _e( 'Course', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"column-quantity\">\u003C?php _e( 'Quantity', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003Cth class=\"column-number\">\u003C?php _e( 'Price', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-email-order-item-heading', $order ); ?>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\t\u003Ctbody>\r\n-\t\u003C?php\r\n-\tforeach ( $items as $item_id => $item ) :\r\n-\t\tif ( ! isset( $item['course_id'] ) ) {\r\n-\t\t\tcontinue;\r\n-\t\t}\r\n-\t\t$course = apply_filters( 'learn-press\u002Femail-order-item-course', learn_press_get_course( $item['course_id'] ), $item );\r\n-\r\n-\t\t?>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-email-order-item', $item_id, $item, $order ); ?>\r\n-\t\t\t\u003Ctd class=\"column-name\">\r\n-\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-name', $item['name'], $item ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"column-quantity\">\r\n-\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-quantity', $item['quantity'], $item ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd class=\"column-number\">\r\n-\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-cost', learn_press_format_price( $item['total'], learn_press_get_currency_symbol( $order->get_currency() ) ), $item ); ?>\r\n-\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-email-order-item', $item_id, $item, $order ); ?>\r\n-\t\t\u003C\u002Ftr>\r\n-\r\n-\t\u003C?php endforeach; ?>\r\n-\t\u003C\u002Ftbody>\r\n-\t\u003Ctfoot>\r\n-\t\u003Ctr>\r\n-\t\t\u003Ctd colspan=\"2\" class=\"column-number\">\u003C?php _e( 'Total', 'learnpress' ); ?>\u003C\u002Ftd>\r\n-\t\t\u003Ctd class=\"column-number\">\r\n-\t\t\t\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\r\n-\t\t\u003C\u002Ftd>\r\n-\t\u003C\u002Ftr>\r\n-\t\u003C\u002Ftfoot>\r\n-\u003C\u002Ftable>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying email order items table.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Femails\u002Forder-items-table.php\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 3.0.3\n+ * @modify 4.1.3\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+\n+use LearnPress\\Models\\UserModel;\n+\n+defined( 'ABSPATH' ) || exit();\n+\u002F**\n+ * @var $order LP_Order\n+ *\u002F\n+if ( ! isset( $order ) ) {\n+\terror_log( 'Invalid params on ' . __FILE__ );\n+\treturn;\n+}\n+\n+$items = $order->get_items();\n+\n+if ( ! $items ) {\n+\treturn;\n+}\n+\n+$email_content = '';\n+\n+if ( $order->is_manual() ) {\n+\t$user_ids = $order->get_user_id();\n+\tif ( is_array( $user_ids ) ) {\n+\t\t$email_arr = [];\n+\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t$userModel = UserModel::find( $user_id, true );\n+\t\t\tif ( $userModel ) {\n+\t\t\t\t$email_arr[] = $userModel->get_email();\n+\t\t\t}\n+\t\t}\n+\n+\t\t$email_content = implode( ',', $email_arr );\n+\t} else {\n+\t\t$email_content = $order->get_user_email();\n+\t}\n+} else {\n+\t$email_content = $order->get_user_email();\n+}\n+?>\n+\n+\u003Ch3 class=\"order-table-items-heading\">\n+\t\u003C?php _e( 'Order summary', 'learnpress' ); ?>\n+\u003C\u002Fh3>\n+\n+\u003Ctable class=\"order-details\">\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Order Number', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_order_number() ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Purchase Date', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003C?php echo date_i18n( get_option( 'date_format' ), $order->get_order_date( 'timestamp' ) ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Payment Method', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003C?php echo wp_kses_post( $order->get_payment_method_title() ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003Ctr>\n+\t\t\u003Cth>\u003C?php _e( 'User Email', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Ctd>\u003C?php echo wp_kses_post( $email_content ); ?>\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\u003C\u002Ftable>\n+\n+\u003Ctable class=\"order-table-items\" cellspacing=\"0\" cellpadding=\"5\">\n+\t\u003Cthead>\n+\t\u003Ctr>\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-email-order-item-heading', $order ); ?>\n+\t\t\u003Cth class=\"column-name\">\u003C?php _e( 'Course', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth class=\"column-quantity\">\u003C?php _e( 'Quantity', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003Cth class=\"column-number\">\u003C?php _e( 'Price', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-email-order-item-heading', $order ); ?>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\t\u003Ctbody>\n+\t\u003C?php\n+\tforeach ( $items as $item_id => $item ) :\n+\t\tif ( ! isset( $item['course_id'] ) ) {\n+\t\t\tcontinue;\n+\t\t}\n+\t\t$course = apply_filters( 'learn-press\u002Femail-order-item-course', learn_press_get_course( $item['course_id'] ), $item );\n+\n+\t\t?>\n+\t\t\u003Ctr>\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-email-order-item', $item_id, $item, $order ); ?>\n+\t\t\t\u003Ctd class=\"column-name\">\n+\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-name', $item['name'], $item ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"column-quantity\">\n+\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-quantity', $item['quantity'], $item ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003Ctd class=\"column-number\">\n+\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Femail-order-item-cost', learn_press_format_price( $item['total'], learn_press_get_currency_symbol( $order->get_currency() ) ), $item ); ?>\n+\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-email-order-item', $item_id, $item, $order ); ?>\n+\t\t\u003C\u002Ftr>\n+\n+\t\u003C?php endforeach; ?>\n+\t\u003C\u002Ftbody>\n+\t\u003Ctfoot>\n+\t\u003Ctr>\n+\t\t\u003Ctd colspan=\"2\" class=\"column-number\">\u003C?php _e( 'Total', 'learnpress' ); ?>\u003C\u002Ftd>\n+\t\t\u003Ctd class=\"column-number\">\n+\t\t\t\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\n+\t\t\u003C\u002Ftd>\n+\t\u003C\u002Ftr>\n+\t\u003C\u002Ftfoot>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fbecome-an-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fbecome-an-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fbecome-an-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fbecome-an-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-== {{header}} ==\r\n-\r\n-** User {{request_email}} has requested to become an Instructor at {{site_title}} **\r\n-\r\n-** Phone:   {{request_phone}} **\r\n-\r\n-** Message: {{request_message}} **\r\n-\r\n-** Please login to {{site_title}} and access {{admin_user_manager}} to to manage the requesting. **\r\n-\r\n-** Accept the requesting: {{accept_url}} **\r\n-\r\n-** Deny the requesting: {{deny_url}} **\r\n-\r\n+== {{header}} ==\n+\n+** User {{request_email}} has requested to become an Instructor at {{site_title}} **\n+\n+** Phone:   {{request_phone}} **\n+\n+** Message: {{request_message}} **\n+\n+** Please login to {{site_title}} and access {{admin_user_manager}} to to manage the requesting. **\n+\n+** Accept the requesting: {{accept_url}} **\n+\n+** Deny the requesting: {{deny_url}} **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Order placed by \"{{order_user_name}}\" has been cancelled **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** Order placed by \"{{order_user_name}}\" has been cancelled **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,12 +1,12 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"Guest\", **\r\n-\r\n-** Your recent order at \"{{site_title}}\" has been cancelled. **\r\n-\r\n-** See your order details below: **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** Hi \"Guest\", **\n+\n+** Your recent order at \"{{site_title}}\" has been cancelled. **\n+\n+** See your order details below: **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Order placed by \"{{order_user_name}}\" has been cancelled **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** Order placed by \"{{order_user_name}}\" has been cancelled **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcancelled-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,12 +1,12 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"{{order_user_name}}\", **\r\n-\r\n-** Your recent order at \"{{site_title}}\" has been cancelled. **\r\n-\r\n-** See your order details below: **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"{{order_user_name}}\", **\n+\n+** Your recent order at \"{{site_title}}\" has been cancelled. **\n+\n+** See your order details below: **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-== {{header}} ==\r\n-\r\n-** Order placed by \"{{order_user_name}}\" has been completed **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+== {{header}} ==\n+\n+** Order placed by \"{{order_user_name}}\" has been completed **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"Guest\", **\r\n-\r\n-** Your recent order at \"{{site_title}}\" has been completed. **\r\n-\r\n-** See your order details below: **\r\n-\r\n-** Order key: {{order_key}} **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"Guest\", **\n+\n+** Your recent order at \"{{site_title}}\" has been completed. **\n+\n+** See your order details below: **\n+\n+** Order key: {{order_key}} **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fcompleted-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,12 +1,12 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"{{order_user_name}}\", **\r\n-\r\n-** Your recent order at \"{{site_title}}\" has been completed. **\r\n-\r\n-** See your order details below: **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"{{order_user_name}}\", **\n+\n+** Your recent order at \"{{site_title}}\" has been completed. **\n+\n+** See your order details below: **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** User {{user_display_name}} ({{user_email}}) has enrolled course \"{{course_name}}\" {{course_url}} **\r\n-\r\n+\n+== {{header}} ==\n+\n+** User {{user_display_name}} ({{user_email}}) has enrolled course \"{{course_name}}\" {{course_url}} **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** User {{user_display_name}} ({{user_email}}) has enrolled course \"{{course_name}}\" {{course_url}} **\r\n-\r\n+\n+== {{header}} ==\n+\n+** User {{user_display_name}} ({{user_email}}) has enrolled course \"{{course_name}}\" {{course_url}} **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-You have enrolled in the course  \"{{course_name}}\" {{course_url}}.\r\n-\r\n-Please login {{login_url}} and start learning now.\r\n-\r\n+\n+== {{email_heading}} ==\n+\n+You have enrolled in the course  \"{{course_name}}\" {{course_url}}.\n+\n+Please login {{login_url}} and start learning now.\n+\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fenrolled-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Congrats! You have enrolled course \"{{course_name}}\" {{course_url}} **\r\n-\r\n+\n+== {{header}} ==\n+\n+** Congrats! You have enrolled course \"{{course_name}}\" {{course_url}} **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** User {{user_display_name}} ({{user_email}}) has finished course \"{{course_name}}\" {{course_url}} **\r\n-\r\n-** User has \"{{course_grade}}\" course with {{course_result_percent}} of total **\r\n-\r\n+\n+== {{header}} ==\n+\n+** User {{user_display_name}} ({{user_email}}) has finished course \"{{course_name}}\" {{course_url}} **\n+\n+** User has \"{{course_grade}}\" course with {{course_result_percent}} of total **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** User {{user_display_name}} ({{user_email}}) has finished course \"{{course_name}}\" {{course_url}} **\r\n-\r\n-** User has \"{{course_grade}}\" course with {{course_result_percent}} of total **\r\n-\r\n+\n+== {{header}} ==\n+\n+** User {{user_display_name}} ({{user_email}}) has finished course \"{{course_name}}\" {{course_url}} **\n+\n+** User has \"{{course_grade}}\" course with {{course_result_percent}} of total **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-Dear {{user_name}}\r\n-\t\r\n-You have finished the course \"{{course_name}}\" {{course_url}}.\r\n-\r\n-Please go to your profile {{user_profile_url}} and view your course results.\r\n-\t\r\n+\n+== {{email_heading}} ==\n+\n+Dear {{user_name}}\n+\t\n+You have finished the course \"{{course_name}}\" {{course_url}}.\n+\n+Please go to your profile {{user_profile_url}} and view your course results.\n+\t\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Ffinished-course-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Congrats! You have finished course \"{{course_name}}\" {{course_url}} **\r\n-\r\n-** You achieved {{course_result_percent}} of course and your grade is {{course_grade}} **\r\n-\r\n+\n+== {{header}} ==\n+\n+** Congrats! You have finished course \"{{course_name}}\" {{course_url}} **\n+\n+** You achieved {{course_result_percent}} of course and your grade is {{course_grade}} **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Findex.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Findex.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Findex.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Findex.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php \u002F\u002F Silence is golden.\r\n+\u003C?php \u002F\u002F Silence is golden.\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-accepted.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-accepted.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-accepted.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-accepted.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-== {{header}} ==\r\n-\r\n-** Congrats! You become an Instructor at \"{{site_title}}\" **\r\n-\r\n-** Please login {{login_url}} to \"{{site_title}}\" and start teaching. **\r\n-\r\n+== {{header}} ==\n+\n+** Congrats! You become an Instructor at \"{{site_title}}\" **\n+\n+** Please login {{login_url}} to \"{{site_title}}\" and start teaching. **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-denied.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-denied.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-denied.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Finstructor-denied.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,6 +1,6 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Your Become an Instructor request at \"{{site_title}}\" has been denied **\r\n-\r\n+\n+== {{header}} ==\n+\n+** Your Become an Instructor request at \"{{site_title}}\" has been denied **\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-A new course \"{{course_name}}\" has been submitted is waiting for your approval\r\n-\r\n-Please review course at {{course_edit_url}}\r\n-\r\n+\n+== {{email_heading}} ==\n+\n+A new course \"{{course_name}}\" has been submitted is waiting for your approval\n+\n+Please review course at {{course_edit_url}}\n+\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-admin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-admin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-admin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-admin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** New order placed by \"{{order_user_name}}\" **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** New order placed by \"{{order_user_name}}\" **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"Guest\", **\r\n-\r\n-**\r\n-    Thank you for purchasing course with \"{{site_title}}\"!\r\n-    We have received your order and it is now being processed.\r\n-    We will send you an email once your order has been processed.\r\n-**\r\n-\r\n-** See your order details below: **\r\n-\r\n-** Order key: {{order_key}} **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"Guest\", **\n+\n+**\n+    Thank you for purchasing course with \"{{site_title}}\"!\n+    We have received your order and it is now being processed.\n+    We will send you an email once your order has been processed.\n+**\n+\n+** See your order details below: **\n+\n+** Order key: {{order_key}} **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-instructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-instructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-instructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-instructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** New order placed by \"{{order_user_name}}\" **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** New order placed by \"{{order_user_name}}\" **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fnew-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,12 +1,12 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"{{order_user_name}}\" **\r\n-\r\n-** We have received your order at \"{{site_title}}\" and send you the details. **\r\n-\r\n-** You can also login to your account to see more details. **\r\n-\r\n-{{order_items_table}}\r\n-\r\n+\n+== {{header}} ==\n+\n+** Hi \"{{order_user_name}}\" **\n+\n+** We have received your order at \"{{site_title}}\" and send you the details. **\n+\n+** You can also login to your account to see more details. **\n+\n+{{order_items_table}}\n+\n == {{footer}} ==\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Forder-items-table.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Forder-items-table.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Forder-items-table.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Forder-items-table.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,88 +1,88 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying the order information and items details.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 3.0.0\r\n- * @editor tungnx\r\n- * @modify 4.1.3\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit; \u002F\u002F Exit if accessed directly\r\n-}\r\n-\u002F**\r\n- * @var LP_Order $order\r\n- *\u002F\r\n-if ( ! isset( $order ) ) {\r\n-\terror_log( 'Invalid params on ' . __FILE__ );\r\n-\treturn;\r\n-}\r\n-\r\n-$items = $order->get_items();\r\n-\r\n-if ( ! $items ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$email_content = '';\r\n-\r\n-if ( $order->is_manual() ) {\r\n-\t$user_ids = $order->get_user_id();\r\n-\tif ( is_array( $user_ids ) ) {\r\n-\t\t$email_arr = [];\r\n-\t\tforeach ( $user_ids as $user_id ) {\r\n-\t\t\t$user = get_user_by( 'ID', $user_id );\r\n-\t\t\tif ( $user ) {\r\n-\t\t\t\t$email_arr[] = $user->user_email;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\t$email_content = implode( ',', $email_arr );\r\n-\t} else {\r\n-\t\t$email_content = $order->get_user_email( $user_ids );\r\n-\t}\r\n-} else {\r\n-\t$email_content = $order->get_user_email( $order->get_user_id() );\r\n-}\r\n-\r\n-echo '** ' . __( 'Order summary', 'learnpress' ) . \" **\\n\";\r\n-\r\n-echo '** ' . __( 'Order Number', 'learnpress' ) . ': ' . $order->get_order_number() . \" **\\n\";\r\n-\r\n-echo '** ' . __( 'Purchase Date', 'learnpress' ) . ': ' . $order->get_order_date() . \" **\\n\";\r\n-\r\n-echo '** ' . __( 'Payment Method', 'learnpress' ) . ': ' . $order->get_payment_method_title() . \" **\\n\";\r\n-\r\n-echo '** ' . __( 'Status', 'learnpress' ) . ': ' . strip_tags( $order->get_order_status_html() ) . \" **\\n\";\r\n-\r\n-echo '** ' . __( 'User Email', 'learnpress' ) . ': ' . $email_content . \" **\\n\\n\";\r\n-\r\n-\r\n-$count = 0;\r\n-foreach ( $items as $item_id => $item ) :\r\n-\r\n-\t$course = apply_filters( 'learn-press\u002Forder\u002Fitem-course', learn_press_get_course( $item['course_id'] ), $item );\r\n-\r\n-\tif ( $count ) {\r\n-\t\techo \"\\n*****************\\n\";\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fbefore-email-order-item', $item_id, $item, $order );\r\n-\r\n-\techo apply_filters( 'learn-press\u002Femail-order-item-name', $item['name'], $item );\r\n-\r\n-\techo \"\\n\" . sprintf( __( 'Quantity: %s', 'learnpress' ), apply_filters( 'learn-press\u002Femail-order-item-quantity', $item['quantity'], $item ) );\r\n-\r\n-\techo \"\\n\" . sprintf( __( 'Cost: %s', 'learnpress' ), apply_filters( 'learn-press\u002Femail-order-item-cost', $item['total'] . ' ' . $order->get_currency(), $item ) );\r\n-\r\n-\tdo_action( 'learn-press\u002Fafter-email-order-item', $item_id, $item, $order );\r\n-\r\n-\t$count ++;\r\n-\r\n-endforeach;\r\n-\r\n-echo \"\\n\\n+++++++++++++++++++++++++\\n\\n\";\r\n-\r\n-echo __( 'Total', 'learnpress' ) . ': ' . $order->get_formatted_order_total();\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying the order information and items details.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 3.0.0\n+ * @editor tungnx\n+ * @modify 4.1.3\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit; \u002F\u002F Exit if accessed directly\n+}\n+\u002F**\n+ * @var LP_Order $order\n+ *\u002F\n+if ( ! isset( $order ) ) {\n+\terror_log( 'Invalid params on ' . __FILE__ );\n+\treturn;\n+}\n+\n+$items = $order->get_items();\n+\n+if ( ! $items ) {\n+\treturn;\n+}\n+\n+$email_content = '';\n+\n+if ( $order->is_manual() ) {\n+\t$user_ids = $order->get_user_id();\n+\tif ( is_array( $user_ids ) ) {\n+\t\t$email_arr = [];\n+\t\tforeach ( $user_ids as $user_id ) {\n+\t\t\t$user = get_user_by( 'ID', $user_id );\n+\t\t\tif ( $user ) {\n+\t\t\t\t$email_arr[] = $user->user_email;\n+\t\t\t}\n+\t\t}\n+\n+\t\t$email_content = implode( ',', $email_arr );\n+\t} else {\n+\t\t$email_content = $order->get_user_email( $user_ids );\n+\t}\n+} else {\n+\t$email_content = $order->get_user_email( $order->get_user_id() );\n+}\n+\n+echo '** ' . __( 'Order summary', 'learnpress' ) . \" **\\n\";\n+\n+echo '** ' . __( 'Order Number', 'learnpress' ) . ': ' . $order->get_order_number() . \" **\\n\";\n+\n+echo '** ' . __( 'Purchase Date', 'learnpress' ) . ': ' . $order->get_order_date() . \" **\\n\";\n+\n+echo '** ' . __( 'Payment Method', 'learnpress' ) . ': ' . $order->get_payment_method_title() . \" **\\n\";\n+\n+echo '** ' . __( 'Status', 'learnpress' ) . ': ' . strip_tags( $order->get_order_status_html() ) . \" **\\n\";\n+\n+echo '** ' . __( 'User Email', 'learnpress' ) . ': ' . $email_content . \" **\\n\\n\";\n+\n+\n+$count = 0;\n+foreach ( $items as $item_id => $item ) :\n+\n+\t$course = apply_filters( 'learn-press\u002Forder\u002Fitem-course', learn_press_get_course( $item['course_id'] ), $item );\n+\n+\tif ( $count ) {\n+\t\techo \"\\n*****************\\n\";\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fbefore-email-order-item', $item_id, $item, $order );\n+\n+\techo apply_filters( 'learn-press\u002Femail-order-item-name', $item['name'], $item );\n+\n+\techo \"\\n\" . sprintf( __( 'Quantity: %s', 'learnpress' ), apply_filters( 'learn-press\u002Femail-order-item-quantity', $item['quantity'], $item ) );\n+\n+\techo \"\\n\" . sprintf( __( 'Cost: %s', 'learnpress' ), apply_filters( 'learn-press\u002Femail-order-item-cost', $item['total'] . ' ' . $order->get_currency(), $item ) );\n+\n+\tdo_action( 'learn-press\u002Fafter-email-order-item', $item_id, $item, $order );\n+\n+\t$count ++;\n+\n+endforeach;\n+\n+echo \"\\n\\n+++++++++++++++++++++++++\\n\\n\";\n+\n+echo __( 'Total', 'learnpress' ) . ': ' . $order->get_formatted_order_total();\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"Guest\", **\r\n-\r\n-**\r\n-    Thank you for purchasing course with \"{{site_title}}\"!\r\n-    We have received your order and it is now being processed.\r\n-    We will send you an email once your order has been processed.\r\n-**\r\n-\r\n-** See your order details below: **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"Guest\", **\n+\n+**\n+    Thank you for purchasing course with \"{{site_title}}\"!\n+    We have received your order and it is now being processed.\n+    We will send you an email once your order has been processed.\n+**\n+\n+** See your order details below: **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fprocessing-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\r\n-== {{header}} ==\r\n-\r\n-** Hi \"{{order_user_name}}\" **\r\n-\r\n-** We have received your order at \"{{site_title}}\" and send you the details. **\r\n-\r\n-** Your order is now processing. **\r\n-\r\n-** You can also login to your account to see more details. **\r\n-\r\n-{{order_items_table}}\r\n-\r\n-== {{footer}} ==\r\n+\n+== {{header}} ==\n+\n+** Hi \"{{order_user_name}}\" **\n+\n+** We have received your order at \"{{site_title}}\" and send you the details. **\n+\n+** Your order is now processing. **\n+\n+** You can also login to your account to see more details. **\n+\n+{{order_items_table}}\n+\n+== {{footer}} ==\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fpublished-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fpublished-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fpublished-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fpublished-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-Dear {{course_user_name}},\r\n-\r\n-Congratulation! The course you created here {{course_edit_url}} ({{course_name}}) is available now.\r\n-\r\n-Click {{course_url}} to view your course.\r\n-\r\n+\n+== {{email_heading}} ==\n+\n+Dear {{course_user_name}},\n+\n+Congratulation! The course you created here {{course_edit_url}} ({{course_name}}) is available now.\n+\n+Click {{course_url}} to view your course.\n+\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Frejected-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Frejected-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Frejected-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Frejected-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-Dear {{course_user_name}},\r\n-\r\n-Unfortunately! The course you created here {{course_edit_url}} ({{course_name}}) isn't ready for sale now.\r\n-\r\n-Please login {{login_url}} and update your course to meet our minimum requirements for quality and\u002For our policies\r\n-\r\n+\n+== {{email_heading}} ==\n+\n+Dear {{course_user_name}},\n+\n+Unfortunately! The course you created here {{course_edit_url}} ({{course_name}}) isn't ready for sale now.\n+\n+Please login {{login_url}} and update your course to meet our minimum requirements for quality and\u002For our policies\n+\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fupdate-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fupdate-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fupdate-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fupdate-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-\"{{course_url}}\" ({{course_name}}) has just been updated.\r\n-\r\n-Please login {{login_url}} and start learning now.\r\n-\r\n+\n+== {{email_heading}} ==\n+\n+\"{{course_url}}\" ({{course_name}}) has just been updated.\n+\n+Please login {{login_url}} and start learning now.\n+\n {{footer_text}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-changed-status.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-changed-status.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-changed-status.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-changed-status.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,10 +1,10 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-{{order_items_table}}\r\n-\r\n-Your order has just changed status to \u003Cstrong>{{order_status}}\u003C\u002Fstrong>\r\n-\r\n-View order: {{order_detail_url}}\r\n-\r\n-{{footer_text}}\r\n+\n+== {{email_heading}} ==\n+\n+{{order_items_table}}\n+\n+Your order has just changed status to \u003Cstrong>{{order_status}}\u003C\u002Fstrong>\n+\n+View order: {{order_detail_url}}\n+\n+{{footer_text}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-completed.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-completed.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-completed.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fplain\u002Fuser-order-completed.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,8 +1,8 @@\n-\r\n-== {{email_heading}} ==\r\n-\r\n-{order_items_table}\r\n-\r\n-View order: {{order_detail_url}}\r\n-\r\n-{{footer_text}}\r\n+\n+== {{email_heading}} ==\n+\n+{order_items_table}\n+\n+View order: {{order_detail_url}}\n+\n+{{footer_text}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fprocessing-order-guest.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fprocessing-order-guest.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fprocessing-order-guest.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fprocessing-order-guest.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\r\n-\r\n-\u003Cp>\r\n-    Thank you for purchasing course with {{site_title}}!\r\n-    We have received your order and it is now being processed.\r\n-    We will send you an email once your order has been processed.\r\n-\u003Cp>\r\n-\r\n-\u003Cp>See your order details below:\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>Guest\u003C\u002Fstrong>,\u003C\u002Fp>\n+\n+\u003Cp>\n+    Thank you for purchasing course with {{site_title}}!\n+    We have received your order and it is now being processed.\n+    We will send you an email once your order has been processed.\n+\u003Cp>\n+\n+\u003Cp>See your order details below:\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fprocessing-order-user.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fprocessing-order-user.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fprocessing-order-user.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fprocessing-order-user.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-\u003Cp>We have received your order at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and send you the details.\u003C\u002Fp>\r\n-\r\n-\u003Cp>Your order is now processing.\u003C\u002Fp>\r\n-\r\n-\u003Cp>You can also login to your account to see more details.\u003C\u002Fp>\r\n-\r\n-{{order_items_table}}\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi \u003Cstrong>{{order_user_name}}\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+\u003Cp>We have received your order at \u003Cstrong>{{site_title}}\u003C\u002Fstrong> and send you the details.\u003C\u002Fp>\n+\n+\u003Cp>Your order is now processing.\u003C\u002Fp>\n+\n+\u003Cp>You can also login to your account to see more details.\u003C\u002Fp>\n+\n+{{order_items_table}}\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fpublished-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fpublished-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fpublished-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fpublished-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-{{header}}\r\n-\r\n-\u003Cp>Dear \u003Cstrong>{{course_user_name}},\u003C\u002Fstrong>\u003C\u002Fp>\r\n-\r\n-\u003Cp>Congratulation! The course you created here \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> is available now.\u003C\u002Fp>\r\n-\r\n-\u003Cp>Click \u003Ca href=\"{{course_url}}\">{{course_url}}\u003C\u002Fa> to view your course.\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Dear \u003Cstrong>{{course_user_name}},\u003C\u002Fstrong>\u003C\u002Fp>\n+\n+\u003Cp>Congratulation! The course you created here \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> is available now.\u003C\u002Fp>\n+\n+\u003Cp>Click \u003Ca href=\"{{course_url}}\">{{course_url}}\u003C\u002Fa> to view your course.\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Frejected-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Frejected-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Frejected-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Frejected-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-{{header}}\r\n-\r\n-\u003Cp>Dear \u003Cstrong>{{course_user_name}}\u003C\u002Fstrong>,\r\n-\r\n-\u003Cp>Unfortunately! The course you created \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> isn't ready for sale now.\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and update your course to meet our minimum requirements for quality and\u002For our policies.\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>Dear \u003Cstrong>{{course_user_name}}\u003C\u002Fstrong>,\n+\n+\u003Cp>Unfortunately! The course you created \u003Ca href=\"{{course_edit_url}}\">{{course_name}}\u003C\u002Fa> isn't ready for sale now.\u003C\u002Fp>\n+\n+\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and update your course to meet our minimum requirements for quality and\u002For our policies.\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Freset-password.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Freset-password.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Freset-password.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Freset-password.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,11 +1,11 @@\n-{{header}}\r\n-\r\n-\u003Cp>Hi {{user_login}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>Someone has requested a new password for the following account on {{site_url}}\u003C\u002Fp>\r\n-\r\n-\u003Cp>If you didn\\'t make this request, just ignore this email. If you\\'d like to proceed:\u003C\u002Fp>\r\n-\r\n-\u003Cp>\u003Ca class=\"link\" href=\"{{reset_link}}\">Click here to reset your password\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n-{{footer}}\r\n+{{header}}\n+\n+\u003Cp>Hi {{user_login}}\u003C\u002Fp>\n+\n+\u003Cp>Someone has requested a new password for the following account on {{site_url}}\u003C\u002Fp>\n+\n+\u003Cp>If you didn\\'t make this request, just ignore this email. If you\\'d like to proceed:\u003C\u002Fp>\n+\n+\u003Cp>\u003Ca class=\"link\" href=\"{{reset_link}}\">Click here to reset your password\u003C\u002Fa>\u003C\u002Fp>\n+\n+{{footer}}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fupdate-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fupdate-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fupdate-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fupdate-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-\u003Cp>\u003Ca href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa> has just updated.\u003C\u002Fp>\r\n-\r\n-\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and start learning now.\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+\u003Cp>\u003Ca href=\"{{course_url}}\">{{course_name}}\u003C\u002Fa> has just updated.\u003C\u002Fp>\n+\n+\u003Cp>Please \u003Ca href=\"{{login_url}}\">login\u003C\u002Fa> and start learning now.\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fuser-order-changed-status.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fuser-order-changed-status.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fuser-order-changed-status.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fuser-order-changed-status.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,9 +1,9 @@\n-{{header}}\r\n-\r\n-{{order_items_table}}\r\n-\r\n-Your order has just changed status to \u003Cstrong>{{order_status}}\u003C\u002Fstrong>\r\n-\r\n-\u003Cp>View order: \u003Ca href=\"{{order_detail_url}}\">{{order_number}}\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+{{order_items_table}}\n+\n+Your order has just changed status to \u003Cstrong>{{order_status}}\u003C\u002Fstrong>\n+\n+\u003Cp>View order: \u003Ca href=\"{{order_detail_url}}\">{{order_number}}\u003C\u002Fa>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fuser-order-completed.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fuser-order-completed.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Femails\u002Fuser-order-completed.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Femails\u002Fuser-order-completed.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,7 +1,7 @@\n-{{header}}\r\n-\r\n-{{order_items_table}}\r\n-\r\n-\u003Cp>View order: \u003Ca href=\"{{order_detail_url}}\">{{order_number}}\u003C\u002Fa>\u003C\u002Fp>\r\n-\r\n+{{header}}\n+\n+{{order_items_table}}\n+\n+\u003Cp>View order: \u003Ca href=\"{{order_detail_url}}\">{{order_number}}\u003C\u002Fa>\u003C\u002Fp>\n+\n {{footer}}\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fafter-main-content.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fafter-main-content.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fafter-main-content.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fafter-main-content.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying after main content.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fafter-main-content.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying after main content.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fafter-main-content.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbecome-teacher-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbecome-teacher-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbecome-teacher-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbecome-teacher-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying the form let user fill out their information to become a teacher.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbecome-teacher-form.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.5.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$user        = learn_press_get_current_user();\r\n-$bat_name    = LP_Helper::sanitize_params_submitted( $_POST['bat_name'] ?? $user->get_display_name() );\r\n-$bat_email   = LP_Helper::sanitize_params_submitted( $_POST['bat_email'] ?? $user->get_email() );\r\n-$bat_phone   = LP_Helper::sanitize_params_submitted( $_POST['bat_phone'] ?? '' );\r\n-$bat_message = LP_Helper::sanitize_params_submitted( $_POST['bat_message'] ?? '' );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-become-teacher-form\" class=\"become-teacher-form learn-press-form\">\r\n-\t\u003C?php if ( ! empty( $title ) ) : ?>\r\n-\t\t\u003Ch3>\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh3>\r\n-\t\u003C?php endif ?>\r\n-\r\n-\t\u003Cform name=\"become-teacher-form\" method=\"post\" enctype=\"multipart\u002Fform-data\" action=\"\">\r\n-\t\t\u003C?php if ( ! empty( $description ) ) : ?>\r\n-\t\t\t\u003Cp class=\"become-teacher-form__description\">\u003C?php echo wp_kses_post( $description ); ?>\u003C\u002Fp>\r\n-\t\t\u003C?php endif ?>\r\n-\r\n-\t\t\u003Cul class=\"become-teacher-fields form-fields\">\r\n-\t\t\t\u003C?php do_action( 'learnpress\u002Fbecome-a-teacher\u002Fbefore-form' ); ?>\r\n-\r\n-\t\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\t\u003Clabel for=\"bat_name\">\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"bat_name\" required placeholder=\"\u003C?php esc_attr_e( 'Your name', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_name ); ?>\">\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\t\u003Clabel for=\"bat_email\">\u003C?php esc_html_e( 'Email', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"email\" name=\"bat_email\" required placeholder=\"\u003C?php esc_attr_e( 'Your email address', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_email ); ?>\">\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\t\u003Clabel for=\"bat_phone\">\u003C?php esc_html_e( 'Phone', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cinput type=\"text\" name=\"bat_phone\" placeholder=\"\u003C?php esc_attr_e( 'Your phone number', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_phone ); ?>\">\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\t\u003Clabel for=\"bat_message\">\u003C?php esc_html_e( 'Message', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Ctextarea name=\"bat_message\" placeholder=\"\u003C?php esc_attr_e( 'Your message', 'learnpress' ); ?>\">\u003C?php echo esc_attr( $bat_message ); ?>\u003C\u002Ftextarea>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learnpress\u002Fbecome-a-teacher\u002Fafter-form' ); ?>\r\n-\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003Cinput type=\"hidden\" name=\"request-become-a-teacher-nonce\" value=\"\u003C?php echo wp_create_nonce( 'request-become-a-teacher' ); ?>\">\r\n-\r\n-\t\t\u003Cbutton type=\"submit\" data-text=\"\u003C?php echo ! empty( $submit_button_process_text ) ? esc_attr( $submit_button_process_text ) : esc_attr__( 'Submitting', 'learnpress' ); ?>\">\r\n-\t\t\t\u003C?php echo ! empty( $submit_button_text ) ? esc_html( $submit_button_text ) : esc_html__( 'Submit', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fform>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying the form let user fill out their information to become a teacher.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbecome-teacher-form.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.5.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$user        = learn_press_get_current_user();\n+$bat_name    = LP_Helper::sanitize_params_submitted( $_POST['bat_name'] ?? $user->get_display_name() );\n+$bat_email   = LP_Helper::sanitize_params_submitted( $_POST['bat_email'] ?? $user->get_email() );\n+$bat_phone   = LP_Helper::sanitize_params_submitted( $_POST['bat_phone'] ?? '' );\n+$bat_message = LP_Helper::sanitize_params_submitted( $_POST['bat_message'] ?? '' );\n+?>\n+\n+\u003Cdiv id=\"learn-press-become-teacher-form\" class=\"become-teacher-form learn-press-form\">\n+\t\u003C?php if ( ! empty( $title ) ) : ?>\n+\t\t\u003Ch3>\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh3>\n+\t\u003C?php endif ?>\n+\n+\t\u003Cform name=\"become-teacher-form\" method=\"post\" enctype=\"multipart\u002Fform-data\" action=\"\">\n+\t\t\u003C?php if ( ! empty( $description ) ) : ?>\n+\t\t\t\u003Cp class=\"become-teacher-form__description\">\u003C?php echo wp_kses_post( $description ); ?>\u003C\u002Fp>\n+\t\t\u003C?php endif ?>\n+\n+\t\t\u003Cul class=\"become-teacher-fields form-fields\">\n+\t\t\t\u003C?php do_action( 'learnpress\u002Fbecome-a-teacher\u002Fbefore-form' ); ?>\n+\n+\t\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\t\u003Clabel for=\"bat_name\">\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"bat_name\" required placeholder=\"\u003C?php esc_attr_e( 'Your name', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_name ); ?>\">\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\t\u003Clabel for=\"bat_email\">\u003C?php esc_html_e( 'Email', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"email\" name=\"bat_email\" required placeholder=\"\u003C?php esc_attr_e( 'Your email address', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_email ); ?>\">\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\t\u003Clabel for=\"bat_phone\">\u003C?php esc_html_e( 'Phone', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cinput type=\"text\" name=\"bat_phone\" placeholder=\"\u003C?php esc_attr_e( 'Your phone number', 'learnpress' ); ?>\" value=\"\u003C?php echo esc_attr( $bat_phone ); ?>\">\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\t\u003Clabel for=\"bat_message\">\u003C?php esc_html_e( 'Message', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003Ctextarea name=\"bat_message\" placeholder=\"\u003C?php esc_attr_e( 'Your message', 'learnpress' ); ?>\">\u003C?php echo esc_attr( $bat_message ); ?>\u003C\u002Ftextarea>\n+\t\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\u003C?php do_action( 'learnpress\u002Fbecome-a-teacher\u002Fafter-form' ); ?>\n+\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003Cinput type=\"hidden\" name=\"request-become-a-teacher-nonce\" value=\"\u003C?php echo wp_create_nonce( 'request-become-a-teacher' ); ?>\">\n+\n+\t\t\u003Cbutton type=\"submit\" data-text=\"\u003C?php echo ! empty( $submit_button_process_text ) ? esc_attr( $submit_button_process_text ) : esc_attr__( 'Submitting', 'learnpress' ); ?>\">\n+\t\t\t\u003C?php echo ! empty( $submit_button_text ) ? esc_html( $submit_button_text ) : esc_html__( 'Submit', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fform>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbefore-main-content.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbefore-main-content.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbefore-main-content.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbefore-main-content.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,42 +1,42 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying before main content.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbefore-main-content.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003C?php $user = learn_press_get_current_user(); ?>\r\n-\r\n-\u003C?php if ( learn_press_is_course() ) { ?>\r\n-\r\n-\u003Cdiv id=\"lp-single-course\" class=\"lp-single-course\">\r\n-\r\n-\t\u003C?php if ( ! learn_press_get_page_link( 'checkout' ) && ( $user->is_admin() || $user->is_instructor() ) ) { ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t$message = __( 'The LearnPress \u003Cstrong>Checkout\u003C\u002Fstrong> page is not set up.', 'learnpress' );\r\n-\r\n-\t\tif ( $user->is_instructor() ) {\r\n-\t\t\t$message .= __( 'Please contact the administrator to set up this page.', 'learnpress' );\r\n-\t\t} else {\r\n-\t\t\t$message .= sprintf( __( 'Please \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">setup\u003C\u002Fa> it so users can purchase courses.', 'learnpress' ), admin_url( 'admin.php?page=learn-press-settings&tab=checkout' ) );\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php learn_press_display_message( $message, 'error' ); ?>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\t\u003C?php } else { ?>\r\n-\r\n-\t\u003Cdiv id=\"lp-archive-courses\" class=\"lp-archive-courses\">\r\n-\r\n-\t\t\u003C?php } ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying before main content.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbefore-main-content.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003C?php $user = learn_press_get_current_user(); ?>\n+\n+\u003C?php if ( learn_press_is_course() ) { ?>\n+\n+\u003Cdiv id=\"lp-single-course\" class=\"lp-single-course\">\n+\n+\t\u003C?php if ( ! learn_press_get_page_link( 'checkout' ) && ( $user->is_admin() || $user->is_instructor() ) ) { ?>\n+\n+\t\t\u003C?php\n+\t\t$message = __( 'The LearnPress \u003Cstrong>Checkout\u003C\u002Fstrong> page is not set up.', 'learnpress' );\n+\n+\t\tif ( $user->is_instructor() ) {\n+\t\t\t$message .= __( 'Please contact the administrator to set up this page.', 'learnpress' );\n+\t\t} else {\n+\t\t\t$message .= sprintf( __( 'Please \u003Ca href=\\\"%s\\\" target=\\\"_blank\\\">setup\u003C\u002Fa> it so users can purchase courses.', 'learnpress' ), admin_url( 'admin.php?page=learn-press-settings&tab=checkout' ) );\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php learn_press_display_message( $message, 'error' ); ?>\n+\n+\t\u003C?php } ?>\n+\n+\t\u003C?php } else { ?>\n+\n+\t\u003Cdiv id=\"lp-archive-courses\" class=\"lp-archive-courses\">\n+\n+\t\t\u003C?php } ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fblock-content.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fblock-content.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fblock-content.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fblock-content.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying block lesson content.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fblock-content.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-content-protected-message content-item-block\">\r\n-\t\u003C?php esc_html_e( 'The content of this item has been blocked because the course has exceeded its duration.', 'learnpress' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying block lesson content.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fcontent-lesson\u002Fblock-content.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"learn-press-content-protected-message content-item-block\">\n+\t\u003C?php esc_html_e( 'The content of this item has been blocked because the course has exceeded its duration.', 'learnpress' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbreadcrumb.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbreadcrumb.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fbreadcrumb.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fbreadcrumb.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying archive courses breadcrumb.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbreadcrumb.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( empty( $breadcrumb ) ) {\r\n-\treturn;\r\n-}\r\n-echo wp_kses_post( $wrap_before );\r\n-\r\n-foreach ( $breadcrumb as $key => $crumb ) {\r\n-\r\n-\techo wp_kses_post( $before );\r\n-\r\n-\techo '\u003Cli>';\r\n-\r\n-\tif ( ! empty( $crumb[1] ) ) {\r\n-\t\tprintf( '\u003Ca href=\"%s\">\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>', esc_url_raw( $crumb[1] ), esc_html( $crumb[0] ) );\r\n-\t} else {\r\n-\t\techo '\u003Cspan>' . esc_html( $crumb[0] ) . '\u003C\u002Fspan>';\r\n-\t}\r\n-\r\n-\techo '\u003C\u002Fli>';\r\n-\r\n-\techo wp_kses_post( $after );\r\n-\r\n-\tif ( sizeof( $breadcrumb ) !== $key + 1 ) {\r\n-\t\techo wp_kses_post( $delimiter );\r\n-\t}\r\n-}\r\n-\r\n-echo wp_kses_post( $wrap_after );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying archive courses breadcrumb.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fbreadcrumb.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( empty( $breadcrumb ) ) {\n+\treturn;\n+}\n+echo wp_kses_post( $wrap_before );\n+\n+foreach ( $breadcrumb as $key => $crumb ) {\n+\n+\techo wp_kses_post( $before );\n+\n+\techo '\u003Cli>';\n+\n+\tif ( ! empty( $crumb[1] ) ) {\n+\t\tprintf( '\u003Ca href=\"%s\">\u003Cspan>%s\u003C\u002Fspan>\u003C\u002Fa>', esc_url_raw( $crumb[1] ), esc_html( $crumb[0] ) );\n+\t} else {\n+\t\techo '\u003Cspan>' . esc_html( $crumb[0] ) . '\u003C\u002Fspan>';\n+\t}\n+\n+\techo '\u003C\u002Fli>';\n+\n+\techo wp_kses_post( $after );\n+\n+\tif ( sizeof( $breadcrumb ) !== $key + 1 ) {\n+\t\techo wp_kses_post( $delimiter );\n+\t}\n+}\n+\n+echo wp_kses_post( $wrap_after );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fclearfix.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fclearfix.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fclearfix.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fclearfix.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for rendering a div to stop all floating elements.\r\n- *\r\n- * @version 3.3.0\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for rendering a div to stop all floating elements.\n+ *\n+ * @version 3.3.0\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\n+\u003Cdiv class=\"clearfix\">\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fform-login.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fform-login.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fform-login.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fform-login.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,64 +1,64 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying template of login form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fform-login.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( is_user_logged_in() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-form-login learn-press-form\">\r\n-\r\n-\t\u003Ch3>\u003C?php echo esc_html_x( 'Login', 'login-heading', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-form-login' ); ?>\r\n-\r\n-\t\u003Cform name=\"learn-press-login\" method=\"post\" action=\"\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-login-fields' ); ?>\r\n-\r\n-\t\t\u003Cul class=\"form-fields\">\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"username\">\u003C?php esc_html_e( 'Username or email', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput type=\"text\" name=\"username\" id=\"username\" placeholder=\"\u003C?php esc_attr_e( 'Email or username', 'learnpress' ); ?>\" autocomplete=\"username\" \u002F>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput type=\"password\" name=\"password\" id=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"current-password\" \u002F>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-login-fields' ); ?>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Clabel>\r\n-\t\t\t\t\u003Cinput type=\"checkbox\" name=\"rememberme\"\u002F>\r\n-\t\t\t\t\u003C?php esc_html_e( 'Remember me', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Flabel>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003C?php\r\n-\t\tdo_action( 'login_form' );\r\n-\t\tdo_action( 'login_enqueue_scripts' );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Cinput type=\"hidden\" name=\"learn-press-login-nonce\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-login' ); ?>\">\r\n-\t\t\t\u003Cbutton type=\"submit\">\u003C?php esc_html_e( 'Login', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fp>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003Ca href=\"\u003C?php echo wp_lostpassword_url(); ?>\">\u003C?php esc_html_e( 'Lost your password?', 'learnpress' ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C\u002Fform>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-form-login' ); ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying template of login form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fform-login.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( is_user_logged_in() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"learn-press-form-login learn-press-form\">\n+\n+\t\u003Ch3>\u003C?php echo esc_html_x( 'Login', 'login-heading', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-form-login' ); ?>\n+\n+\t\u003Cform name=\"learn-press-login\" method=\"post\" action=\"\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-login-fields' ); ?>\n+\n+\t\t\u003Cul class=\"form-fields\">\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"username\">\u003C?php esc_html_e( 'Username or email', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput type=\"text\" name=\"username\" id=\"username\" placeholder=\"\u003C?php esc_attr_e( 'Email or username', 'learnpress' ); ?>\" autocomplete=\"username\" \u002F>\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput type=\"password\" name=\"password\" id=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"current-password\" \u002F>\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-login-fields' ); ?>\n+\t\t\u003Cp>\n+\t\t\t\u003Clabel>\n+\t\t\t\t\u003Cinput type=\"checkbox\" name=\"rememberme\"\u002F>\n+\t\t\t\t\u003C?php esc_html_e( 'Remember me', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Flabel>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003C?php\n+\t\tdo_action( 'login_form' );\n+\t\tdo_action( 'login_enqueue_scripts' );\n+\t\t?>\n+\n+\t\t\u003Cp>\n+\t\t\t\u003Cinput type=\"hidden\" name=\"learn-press-login-nonce\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-login' ); ?>\">\n+\t\t\t\u003Cbutton type=\"submit\">\u003C?php esc_html_e( 'Login', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fp>\n+\t\t\u003Cp>\n+\t\t\t\u003Ca href=\"\u003C?php echo wp_lostpassword_url(); ?>\">\u003C?php esc_html_e( 'Lost your password?', 'learnpress' ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fp>\n+\t\u003C\u002Fform>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-form-login' ); ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fform-register.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fform-register.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fform-register.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fform-register.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying global login form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fform-register.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( is_user_logged_in() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-form-register learn-press-form\">\r\n-\r\n-\t\u003Ch3>\u003C?php echo esc_html_x( 'Register', 'register-heading', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register' ); ?>\r\n-\r\n-\t\u003Cform name=\"learn-press-register\" method=\"post\" action=\"\">\r\n-\r\n-\t\t\u003Cul class=\"form-fields\">\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register-fields' ); ?>\r\n-\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"reg_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput id =\"reg_email\" name=\"reg_email\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Email', 'learnpress' ); ?>\" autocomplete=\"email\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' ) ); ?>\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"reg_username\">\u003C?php esc_html_e( 'Username', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput id =\"reg_username\" name=\"reg_username\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Username', 'learnpress' ); ?>\" autocomplete=\"username\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' ) ); ?>\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"reg_password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput id =\"reg_password\" name=\"reg_password\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"new-password\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"reg_password2\">\u003C?php esc_html_e( 'Confirm Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cinput id =\"reg_password2\" name=\"reg_password2\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"off\">\r\n-\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-register-fields' ); ?>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php\r\n-\t\tdo_action( 'register_form' );\r\n-\t\tdo_action( 'login_enqueue_scripts' );\r\n-\t\t?>\r\n-\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003C?php wp_nonce_field( 'learn-press-register', 'learn-press-register-nonce' ); ?>\r\n-\t\t\t\u003Cbutton type=\"submit\">\u003C?php esc_html_e( 'Register', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\u003C\u002Fform>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-form-register' ); ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying global login form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fform-register.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( is_user_logged_in() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"learn-press-form-register learn-press-form\">\n+\n+\t\u003Ch3>\u003C?php echo esc_html_x( 'Register', 'register-heading', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register' ); ?>\n+\n+\t\u003Cform name=\"learn-press-register\" method=\"post\" action=\"\">\n+\n+\t\t\u003Cul class=\"form-fields\">\n+\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-form-register-fields' ); ?>\n+\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"reg_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput id =\"reg_email\" name=\"reg_email\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Email', 'learnpress' ); ?>\" autocomplete=\"email\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_email'] ?? '' ) ); ?>\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"reg_username\">\u003C?php esc_html_e( 'Username', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput id =\"reg_username\" name=\"reg_username\" type=\"text\" placeholder=\"\u003C?php esc_attr_e( 'Username', 'learnpress' ); ?>\" autocomplete=\"username\" value=\"\u003C?php echo esc_attr( LP_Helper::sanitize_params_submitted( $_POST['reg_username'] ?? '' ) ); ?>\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"reg_password\">\u003C?php esc_html_e( 'Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput id =\"reg_password\" name=\"reg_password\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"new-password\">\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"reg_password2\">\u003C?php esc_html_e( 'Confirm Password', 'learnpress' ); ?>&nbsp;\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\t\u003Cinput id =\"reg_password2\" name=\"reg_password2\" type=\"password\" placeholder=\"\u003C?php esc_attr_e( 'Password', 'learnpress' ); ?>\" autocomplete=\"off\">\n+\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-form-register-fields' ); ?>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php\n+\t\tdo_action( 'register_form' );\n+\t\tdo_action( 'login_enqueue_scripts' );\n+\t\t?>\n+\n+\t\t\u003Cp>\n+\t\t\t\u003C?php wp_nonce_field( 'learn-press-register', 'learn-press-register-nonce' ); ?>\n+\t\t\t\u003Cbutton type=\"submit\">\u003C?php esc_html_e( 'Register', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fp>\n+\n+\t\u003C\u002Fform>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-form-register' ); ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-group-step.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-group-step.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-group-step.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-group-step.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for Step item.\r\n- *\r\n- * This template for js read and render each item.\r\n- * Purpose:\r\n- * 1. Define struct template group step\r\n- * 2. On js will read \".example-lp-item-step\" and clone content \".lp-item-step\"\r\n- * 3. Js will render data to template have just clone, and append to \".lp-group-step\"\r\n- *\r\n- * @author  tungnx\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  1.0.0\r\n- * @since   4.0.3\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cdiv class=\"example-lp-group-step\">\r\n-\t\u003Cdiv class=\"lp-group-step\">\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"example-lp-item-step\">\r\n-\t\t\u003Ch3>\u003C\u002Fh3>\r\n-\t\t\u003Cdiv class=\"lp-item-step\">\r\n-\t\t\t\u003Cdiv class=\"lp-item-step-left\">\r\n-\t\t\t\t\u003Cinput type=\"hidden\" name=\"\" value=\"\"  \u002F>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"lp-item-step-right\">\r\n-\t\t\t\t\u003Clabel for=\"\">\u003Cstrong>\u003C\u002Fstrong>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cdiv class=\"description\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cdiv class=\"percent\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003Cspan class=\"progress-bar\">\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for Step item.\n+ *\n+ * This template for js read and render each item.\n+ * Purpose:\n+ * 1. Define struct template group step\n+ * 2. On js will read \".example-lp-item-step\" and clone content \".lp-item-step\"\n+ * 3. Js will render data to template have just clone, and append to \".lp-group-step\"\n+ *\n+ * @author  tungnx\n+ * @package  Learnpress\u002FTemplates\n+ * @version  1.0.0\n+ * @since   4.0.3\n+ *\u002F\n+\n+?>\n+\n+\u003Cdiv class=\"example-lp-group-step\">\n+\t\u003Cdiv class=\"lp-group-step\">\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"example-lp-item-step\">\n+\t\t\u003Ch3>\u003C\u002Fh3>\n+\t\t\u003Cdiv class=\"lp-item-step\">\n+\t\t\t\u003Cdiv class=\"lp-item-step-left\">\n+\t\t\t\t\u003Cinput type=\"hidden\" name=\"\" value=\"\"  \u002F>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"lp-item-step-right\">\n+\t\t\t\t\u003Clabel for=\"\">\u003Cstrong>\u003C\u002Fstrong>\u003C\u002Flabel>\n+\t\t\t\t\u003Cdiv class=\"description\">\u003C\u002Fdiv>\n+\t\t\t\t\u003Cdiv class=\"percent\">\u003C\u002Fdiv>\n+\t\t\t\t\u003Cspan class=\"progress-bar\">\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-message.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-message.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-message.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-message.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying global message.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Flp-message.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  1.0.1\r\n- * @since  4.2.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $customer_message ) || ! isset( $customer_message['content'] ) || ! isset( $customer_message['status'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$classes = array( 'learn-press-message', $customer_message['status'], 'lp-content-area' );\r\n-?>\r\n-\u003Cdiv\r\n-\tclass=\"\u003C?php echo esc_attr( join( ' ', $classes ) ); ?>\">\u003C?php echo wp_kses_post( $customer_message['content'] ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying global message.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Flp-message.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  1.0.1\n+ * @since  4.2.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $customer_message ) || ! isset( $customer_message['content'] ) || ! isset( $customer_message['status'] ) ) {\n+\treturn;\n+}\n+\n+$classes = array( 'learn-press-message', $customer_message['status'], 'lp-content-area' );\n+?>\n+\u003Cdiv\n+\tclass=\"\u003C?php echo esc_attr( join( ' ', $classes ) ); ?>\">\u003C?php echo wp_kses_post( $customer_message['content'] ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-modal-overlay.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-modal-overlay.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Flp-modal-overlay.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Flp-modal-overlay.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying modal overlay.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Flp-modal-overlay.php.\r\n- *\r\n- * @author  tungnx\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  1.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-modal-dialog\">\r\n-\t\u003Cdiv class=\"lp-modal-content\">\r\n-\t\t\u003Cdiv class=\"lp-modal-header\">\r\n-\t\t\t\u003Ch3 class=\"modal-title\">Modal title\u003C\u002Fh3>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"lp-modal-body\">\r\n-\t\t\t\u003Cdiv class=\"main-content\">Main Content\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"lp-modal-footer\">\r\n-\t\t\t\u003Cbutton type=\"button\" class=\"lp-button btn-no\">\u003C?php esc_html_e( 'No' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003Cbutton type=\"button\" class=\"lp-button btn-yes\">\u003C?php esc_html_e( 'Yes' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying modal overlay.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Flp-modal-overlay.php.\n+ *\n+ * @author  tungnx\n+ * @package  Learnpress\u002FTemplates\n+ * @version  1.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cdiv class=\"lp-modal-dialog\">\n+\t\u003Cdiv class=\"lp-modal-content\">\n+\t\t\u003Cdiv class=\"lp-modal-header\">\n+\t\t\t\u003Ch3 class=\"modal-title\">Modal title\u003C\u002Fh3>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"lp-modal-body\">\n+\t\t\t\u003Cdiv class=\"main-content\">Main Content\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"lp-modal-footer\">\n+\t\t\t\u003Cbutton type=\"button\" class=\"lp-button btn-no\">\u003C?php esc_html_e( 'No' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003Cbutton type=\"button\" class=\"lp-button btn-yes\">\u003C?php esc_html_e( 'Yes' ); ?>\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fmessage.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fmessage.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fmessage.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fmessage.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying global message.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fmessage.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $messages ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003C?php foreach ( $messages as $type => $message ) { ?>\r\n-\t\u003C?php if ( $message ) { ?>\r\n-\t\t\u003C?php foreach ( $message as $content ) { ?>\r\n-\t\t\t\u003C?php\r\n-\t\t\t$options = array();\r\n-\r\n-\t\t\tif ( is_array( $content ) ) {\r\n-\t\t\t\t$options = $content['options'];\r\n-\t\t\t\t$content = $content['content'];\r\n-\t\t\t\t$options = wp_parse_args(\r\n-\t\t\t\t\t$options,\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'position'  => '',\r\n-\t\t\t\t\t\t'delay-in'  => 0,\r\n-\t\t\t\t\t\t'delay-out' => 0,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\t$classes = array( 'learn-press-message', esc_attr( $type ) );\r\n-\t\t\t$data    = array();\r\n-\r\n-\t\t\tif ( ! empty( $options['position'] ) ) {\r\n-\t\t\t\t$classes[] = $options['position'];\r\n-\t\t\t\tif ( ! empty( $options['delay-in'] ) ) {\r\n-\t\t\t\t\t$data[] = sprintf( 'data-delay-in=\"%s\"', $options['delay-in'] );\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tif ( ! empty( $options['delay-in'] ) ) {\r\n-\t\t\t\t\t$data[] = sprintf( 'data-delay-out=\"%s\"', $options['delay-out'] );\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( join( ' ', $classes ) ); ?>\" \u003C?php echo esc_attr( $data ? join( ' ', $data ) : '' ); ?>>\r\n-\t\t\t\t \u003C?php echo apply_filters( 'learn-press\u002Fmessage', wp_kses_post( $content ), $content ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\u003C?php } ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying global message.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fmessage.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $messages ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003C?php foreach ( $messages as $type => $message ) { ?>\n+\t\u003C?php if ( $message ) { ?>\n+\t\t\u003C?php foreach ( $message as $content ) { ?>\n+\t\t\t\u003C?php\n+\t\t\t$options = array();\n+\n+\t\t\tif ( is_array( $content ) ) {\n+\t\t\t\t$options = $content['options'];\n+\t\t\t\t$content = $content['content'];\n+\t\t\t\t$options = wp_parse_args(\n+\t\t\t\t\t$options,\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'position'  => '',\n+\t\t\t\t\t\t'delay-in'  => 0,\n+\t\t\t\t\t\t'delay-out' => 0,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\t$classes = array( 'learn-press-message', esc_attr( $type ) );\n+\t\t\t$data    = array();\n+\n+\t\t\tif ( ! empty( $options['position'] ) ) {\n+\t\t\t\t$classes[] = $options['position'];\n+\t\t\t\tif ( ! empty( $options['delay-in'] ) ) {\n+\t\t\t\t\t$data[] = sprintf( 'data-delay-in=\"%s\"', $options['delay-in'] );\n+\t\t\t\t}\n+\n+\t\t\t\tif ( ! empty( $options['delay-in'] ) ) {\n+\t\t\t\t\t$data[] = sprintf( 'data-delay-out=\"%s\"', $options['delay-out'] );\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"\u003C?php echo esc_attr( join( ' ', $classes ) ); ?>\" \u003C?php echo esc_attr( $data ? join( ' ', $data ) : '' ); ?>>\n+\t\t\t\t \u003C?php echo apply_filters( 'learn-press\u002Fmessage', wp_kses_post( $content ), $content ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php } ?>\n+\n+\t\u003C?php } ?>\n+\n+\u003C?php } ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fno-courses-found.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fno-courses-found.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fglobal\u002Fno-courses-found.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fglobal\u002Fno-courses-found.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Displayed when no course are found matching the current query\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fno-courses-found.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\r\n-\u003Cp class=\"learn-press-message error\">\u003C?php esc_html_e( 'No courses were found to match your selection.', 'learnpress' ); ?>\u003C\u002Fp>\r\n+\u003C?php\n+\u002F**\n+ * Displayed when no course are found matching the current query\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fglobal\u002Fno-courses-found.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\n+\u003Cp class=\"learn-press-message error\">\u003C?php esc_html_e( 'No courses were found to match your selection.', 'learnpress' ); ?>\u003C\u002Fp>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fbadge-featured.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fbadge-featured.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fbadge-featured.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fbadge-featured.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying 'Featured' badge in archive course page for each course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$course = learn_press_get_course();\r\n-\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! $course->is_featured() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cspan class=\"lp-badge featured-course\" data-text=\"\u003C?php esc_attr_e( 'Featured', 'learnpress' ); ?>\">\u003C\u002Fspan>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying 'Featured' badge in archive course page for each course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$course = learn_press_get_course();\n+\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+if ( ! $course->is_featured() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cspan class=\"lp-badge featured-course\" data-text=\"\u003C?php esc_attr_e( 'Featured', 'learnpress' ); ?>\">\u003C\u002Fspan>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fcategories.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fcategories.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fcategories.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fcategories.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying categories of a course in loop.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$categories = get_the_term_list( '', 'course_category' );\r\n-?>\r\n-\r\n-\u003C?php if ( ! empty( $categories ) ) : ?>\r\n-\t\u003Cdiv class=\"course-categories\">\r\n-\t\t\u003C?php echo wp_kses_post( $categories ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying categories of a course in loop.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$categories = get_the_term_list( '', 'course_category' );\n+?>\n+\n+\u003C?php if ( ! empty( $categories ) ) : ?>\n+\t\u003Cdiv class=\"course-categories\">\n+\t\t\u003C?php echo wp_kses_post( $categories ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-begin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-begin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-begin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-begin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course meta begin within the loop.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"separator\">\u003C\u002Fdiv>\r\n-\u003Cdiv class=\"course-info\">\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course meta begin within the loop.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"separator\">\u003C\u002Fdiv>\n+\u003Cdiv class=\"course-info\">\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-end.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-end.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-end.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finfo-end.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,13 +1,13 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course meta begin within the loop.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course meta begin within the loop.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finstructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finstructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Finstructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Finstructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying instructor of course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Finstructor.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$author_id  = $course->get_author( 'id' );\r\n-$instructor = learn_press_get_user( $author_id );\r\n-if ( ! $instructor ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-instructor\">\r\n-\t\u003C?php echo wp_kses_post( sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $instructor->get_url_instructor(), $instructor->get_display_name() ) ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying instructor of course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Finstructor.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+$author_id  = $course->get_author( 'id' );\n+$instructor = learn_press_get_user( $author_id );\n+if ( ! $instructor ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-instructor\">\n+\t\u003C?php echo wp_kses_post( sprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', $instructor->get_url_instructor(), $instructor->get_display_name() ) ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-begin.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-begin.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-begin.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-begin.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,14 +1,14 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying wrap start of archive course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Floop-begin.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-echo wp_kses_post( apply_filters( 'learn_press_course_loop_begin', '\u003Cul class=\"learn-press-courses\" data-layout=\"' . learn_press_get_courses_layout() . '\">' ) );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying wrap start of archive course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Floop-begin.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+echo wp_kses_post( apply_filters( 'learn_press_course_loop_begin', '\u003Cul class=\"learn-press-courses\" data-layout=\"' . learn_press_get_courses_layout() . '\">' ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-end.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-end.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-end.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Floop-end.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying wrap end of archive course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Floop-end.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-echo apply_filters( 'learn_press_course_loop_end', '\u003C\u002Ful>' );\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying wrap end of archive course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Floop-end.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+echo apply_filters( 'learn_press_course_loop_end', '\u003C\u002Ful>' );\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fmeta.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fmeta.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fmeta.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fmeta.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying meta data in course loop.\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-global $post;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-excerpt\">\u003C?php echo wp_trim_words( $post->post_content, 15 ); ?>\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying meta data in course loop.\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+global $post;\n+?>\n+\n+\u003Cdiv class=\"course-excerpt\">\u003C?php echo wp_trim_words( $post->post_content, 15 ); ?>\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fpagination.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fpagination.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fpagination.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fpagination.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying pagination of course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fpagination.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-global $wp_query;\r\n-\r\n-$total = $total ?? $wp_query->max_num_pages;\r\n-$paged = $paged ?? get_query_var( 'paged' );\r\n-$base  = $base ?? esc_url_raw( str_replace( 999999999, '%#%', get_pagenum_link( 999999999, false ) ) );\r\n-\r\n-if ( $total \u003C= 1 ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cnav class=\"learn-press-pagination navigation pagination\">\r\n-\t\u003C?php\r\n-\techo paginate_links(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn_press_pagination_args',\r\n-\t\t\tarray(\r\n-\t\t\t\t'base'      => $base,\r\n-\t\t\t\t'format'    => '',\r\n-\t\t\t\t'add_args'  => '',\r\n-\t\t\t\t'current'   => max( 1, $paged ),\r\n-\t\t\t\t'total'     => $total,\r\n-\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\r\n-\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\r\n-\t\t\t\t'type'      => 'list',\r\n-\t\t\t\t'end_size'  => 3,\r\n-\t\t\t\t'mid_size'  => 3,\r\n-\t\t\t)\r\n-\t\t)\r\n-\t);\r\n-\t?>\r\n-\u003C\u002Fnav>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying pagination of course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fpagination.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+global $wp_query;\n+\n+$total = $total ?? $wp_query->max_num_pages;\n+$paged = $paged ?? get_query_var( 'paged' );\n+$base  = $base ?? esc_url_raw( str_replace( 999999999, '%#%', get_pagenum_link( 999999999, false ) ) );\n+\n+if ( $total \u003C= 1 ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cnav class=\"learn-press-pagination navigation pagination\">\n+\t\u003C?php\n+\techo paginate_links(\n+\t\tapply_filters(\n+\t\t\t'learn_press_pagination_args',\n+\t\t\tarray(\n+\t\t\t\t'base'      => $base,\n+\t\t\t\t'format'    => '',\n+\t\t\t\t'add_args'  => '',\n+\t\t\t\t'current'   => max( 1, $paged ),\n+\t\t\t\t'total'     => $total,\n+\t\t\t\t'prev_text' => '\u003Ci class=\"lp-icon-arrow-left\">\u003C\u002Fi>',\n+\t\t\t\t'next_text' => '\u003Ci class=\"lp-icon-arrow-right\">\u003C\u002Fi>',\n+\t\t\t\t'type'      => 'list',\n+\t\t\t\t'end_size'  => 3,\n+\t\t\t\t'mid_size'  => 3,\n+\t\t\t)\n+\t\t)\n+\t);\n+\t?>\n+\u003C\u002Fnav>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fprice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fprice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fprice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fprice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying price of course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fprice.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) || ! isset( $price_html ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-price\">\r\n-\t\u003C?php echo wp_kses_post( $price_html ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying price of course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fprice.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) || ! isset( $price_html ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-price\">\n+\t\u003C?php echo wp_kses_post( $price_html ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fstudents.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fstudents.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fstudents.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fstudents.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,28 +1,28 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course students within the loop.\r\n- *\r\n- * Do not use in LP4.\r\n- * Will remove after LearnPress and Eduma and all guest update 4.0.0\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cspan class=\"course-students\">\r\n-\r\n-\t\u003C?php echo esc_html( $course->get_users_enrolled() ); ?>\r\n-\r\n-\u003C\u002Fspan>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course students within the loop.\n+ *\n+ * Do not use in LP4.\n+ * Will remove after LearnPress and Eduma and all guest update 4.0.0\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cspan class=\"course-students\">\n+\n+\t\u003C?php echo esc_html( $course->get_users_enrolled() ); ?>\n+\n+\u003C\u002Fspan>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fthumbnail.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fthumbnail.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Fthumbnail.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Fthumbnail.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying thumbnail of course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fthumbnail.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-thumbnail\">\r\n-\t\u003Ca href=\"\u003C?php the_permalink(); ?>\">\r\n-\u003C!--\t\t\u003Cdiv class=\"thumbnail\">-->\r\n-\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'course_thumbnail' ) ); ?>\r\n-\u003C!--\t\t\u003C\u002Fdiv>-->\r\n-\t\u003C\u002Fa>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying thumbnail of course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Fthumbnail.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+\n+if ( ! $course ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-thumbnail\">\n+\t\u003Ca href=\"\u003C?php the_permalink(); ?>\">\n+\u003C!--\t\t\u003Cdiv class=\"thumbnail\">-->\n+\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'course_thumbnail' ) ); ?>\n+\u003C!--\t\t\u003C\u002Fdiv>-->\n+\t\u003C\u002Fa>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fcourse\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fcourse\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying title of course within the loop.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Ftitle.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Ch2 class=\"wap-course-title\">\u003Ca href=\"\u003C?php the_permalink(); ?>\" class=\"course-permalink\">\u003C?php the_title(); ?>\u003C\u002Fa>\u003C\u002Fh2>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying title of course within the loop.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Floop\u002Fcourse\u002Ftitle.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Ch2 class=\"wap-course-title\">\u003Ca href=\"\u003C?php the_permalink(); ?>\" class=\"course-permalink\">\u003C?php the_title(); ?>\u003C\u002Fa>\u003C\u002Fh2>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying curriculum tab of single course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.5\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F\u002F PARAM: section_item, course_item, can_view_item, user, course_id is required.\r\n-\r\n-\u002F**\r\n- * @var LP_Model_User_Can_View_Course_Item $can_view_item\r\n- * @var LP_Course_Item $course_item\r\n- *\u002F\r\n-if ( empty( $section_item ) || empty( $course_item ) || empty( $can_view_item ) || empty( $course_id ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-?>\r\n-\r\n-\u003Cli class=\"course-item \u003C?php echo esc_attr( implode( ' ', $course_item->get_class_v2( $course_id, $section_item['ID'], $can_view_item ) ) ); ?> \"\r\n-\tdata-id=\"\u003C?php echo esc_attr( $section_item['ID'] ); ?>\">\r\n-\t\u003Ca class=\"section-item-link\" href=\"\u003C?php echo esc_url_raw( $course_item->get_permalink() ); ?>\">\r\n-\r\n-\t\t\u003Cdiv class=\"course-item-info\">\r\n-\t\t\t\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $section_item['post_title'] ); ?>\u003C\u002Fspan>\r\n-\t\t\t\u003Cdiv\r\n-\t\t\t\tclass=\"course-item-info-pre\">\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fbefore-' . $course_item->get_item_type() . '-meta', $course_item ); ?>\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"course-item-meta\">\r\n-\t\t\t\u003C?php if ( $course_item->is_preview() && isset( $user ) && ! $user->has_enrolled_or_finished( $course_id ) ) : ?>\r\n-\t\t\t\t\u003Cspan class=\"item-meta course-item-preview\"\r\n-\t\t\t\t\t  data-preview=\"\u003C?php esc_attr_e( 'Preview', 'learnpress' ); ?>\">\u003C\u002Fspan>\r\n-\t\t\t\u003C?php else: ?>\r\n-\t\t\t\t\u003Cspan class=\"item-meta course-item-status\"\r\n-\t\t\t\t\t  title=\"\u003C?php echo esc_attr( $course_item->get_status_title() ); ?>\">\u003C\u002Fspan>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fafter-' . $course_item->get_item_type() . '-meta', $course_item ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fa>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying curriculum tab of single course.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.5\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F\u002F PARAM: section_item, course_item, can_view_item, user, course_id is required.\n+\n+\u002F**\n+ * @var LP_Model_User_Can_View_Course_Item $can_view_item\n+ * @var LP_Course_Item $course_item\n+ *\u002F\n+if ( empty( $section_item ) || empty( $course_item ) || empty( $can_view_item ) || empty( $course_id ) ) {\n+\treturn;\n+}\n+\n+?>\n+\n+\u003Cli class=\"course-item \u003C?php echo esc_attr( implode( ' ', $course_item->get_class_v2( $course_id, $section_item['ID'], $can_view_item ) ) ); ?> \"\n+\tdata-id=\"\u003C?php echo esc_attr( $section_item['ID'] ); ?>\">\n+\t\u003Ca class=\"section-item-link\" href=\"\u003C?php echo esc_url_raw( $course_item->get_permalink() ); ?>\">\n+\n+\t\t\u003Cdiv class=\"course-item-info\">\n+\t\t\t\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $section_item['post_title'] ); ?>\u003C\u002Fspan>\n+\t\t\t\u003Cdiv\n+\t\t\t\tclass=\"course-item-info-pre\">\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fbefore-' . $course_item->get_item_type() . '-meta', $course_item ); ?>\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"course-item-meta\">\n+\t\t\t\u003C?php if ( $course_item->is_preview() && isset( $user ) && ! $user->has_enrolled_or_finished( $course_id ) ) : ?>\n+\t\t\t\t\u003Cspan class=\"item-meta course-item-preview\"\n+\t\t\t\t\t  data-preview=\"\u003C?php esc_attr_e( 'Preview', 'learnpress' ); ?>\">\u003C\u002Fspan>\n+\t\t\t\u003C?php else: ?>\n+\t\t\t\t\u003Cspan class=\"item-meta course-item-status\"\n+\t\t\t\t\t  title=\"\u003C?php echo esc_attr( $course_item->get_status_title() ); ?>\">\u003C\u002Fspan>\n+\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fafter-' . $course_item->get_item_type() . '-meta', $course_item ); ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fa>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Floop\u002Fsingle-course\u002Floop-section.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying curriculum tab of single course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( empty( $args ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( isset( $args['section'] ) ) {\r\n-\t$section = $args['section'];\r\n-} else {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cli id=\"section-\u003C?php echo esc_attr( $section['section_id'] ); ?>\" class=\"section\" data-section-id=\"\u003C?php echo esc_attr( $section['section_id'] ); ?>\">\r\n-\t\u003Cdiv class=\"section-header\">\r\n-\t\t\u003Cdiv class=\"section-left\">\r\n-\t\t\t\u003Cdiv class=\"wrapper-section-title\">\r\n-\t\t\t\t\u003Ch3 class=\"section-title\">\r\n-\t\t\t\t \u003C?php echo ! empty( $section['section_name'] ) ? esc_html( $section['section_name'] ) : _x( 'Untitled', 'template title empty', 'learnpress' ); ?>\r\n-\t\t\t\t\u003C\u002Fh3>\r\n-\t\t\t\t\u003C?php if ( ! empty( $section['section_description'] ) ) : ?>\r\n-\t\t\t\t\t\u003Cp class=\"section-desc\">\u003C?php echo wp_kses_post( $section['section_description'] ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003Cspan class=\"section-toggle\">\r\n-\t\t\t\t\u003Ci class=\"lp-icon-caret-down\">\u003C\u002Fi>\r\n-\t\t\t\t\u003Ci class=\"lp-icon-caret-up\">\u003C\u002Fi>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php\r\n-\t\t$controller = new LP_REST_Lazy_Load_Controller();\r\n-\t\t$request    = new WP_REST_Request();\r\n-\t\t$request->set_param( 'sectionId', $section['section_id'] );\r\n-\t\t$response    = $controller->course_curriculum_items( $request );\r\n-\t\t$object_data = $response->get_data();\r\n-\t?>\r\n-\t\u003Cdiv class=\"section-item\" data-section-id=\"\u003C?php echo esc_attr( $section['section_id'] ); ?>\">\r\n-\t\t\u003Cul class=\"section-content\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $object_data->data->content ?? $object_data->data ?? $object_data ? $object_data->data->content : '' ); ?>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php if ( isset( $object_data ) && ! empty( $object_data->data->pages ) && $object_data->data->pages > 1 ) : ?>\r\n-\t\t\t\u003Cdiv class=\"section-item__loadmore\" data-page=\"1\">\r\n-\t\t\t\t\u003Cbutton>\u003C?php esc_html_e( 'Show more items', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying curriculum tab of single course.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.3\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( empty( $args ) ) {\n+\treturn;\n+}\n+\n+if ( isset( $args['section'] ) ) {\n+\t$section = $args['section'];\n+} else {\n+\treturn;\n+}\n+?>\n+\n+\u003Cli id=\"section-\u003C?php echo esc_attr( $section['section_id'] ); ?>\" class=\"section\" data-section-id=\"\u003C?php echo esc_attr( $section['section_id'] ); ?>\">\n+\t\u003Cdiv class=\"section-header\">\n+\t\t\u003Cdiv class=\"section-left\">\n+\t\t\t\u003Cdiv class=\"wrapper-section-title\">\n+\t\t\t\t\u003Ch3 class=\"section-title\">\n+\t\t\t\t \u003C?php echo ! empty( $section['section_name'] ) ? esc_html( $section['section_name'] ) : _x( 'Untitled', 'template title empty', 'learnpress' ); ?>\n+\t\t\t\t\u003C\u002Fh3>\n+\t\t\t\t\u003C?php if ( ! empty( $section['section_description'] ) ) : ?>\n+\t\t\t\t\t\u003Cp class=\"section-desc\">\u003C?php echo wp_kses_post( $section['section_description'] ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003Cspan class=\"section-toggle\">\n+\t\t\t\t\u003Ci class=\"lp-icon-caret-down\">\u003C\u002Fi>\n+\t\t\t\t\u003Ci class=\"lp-icon-caret-up\">\u003C\u002Fi>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php\n+\t\t$controller = new LP_REST_Lazy_Load_Controller();\n+\t\t$request    = new WP_REST_Request();\n+\t\t$request->set_param( 'sectionId', $section['section_id'] );\n+\t\t$response    = $controller->course_curriculum_items( $request );\n+\t\t$object_data = $response->get_data();\n+\t?>\n+\t\u003Cdiv class=\"section-item\" data-section-id=\"\u003C?php echo esc_attr( $section['section_id'] ); ?>\">\n+\t\t\u003Cul class=\"section-content\">\n+\t\t\t\u003C?php echo wp_kses_post( $object_data->data->content ?? $object_data->data ?? $object_data ? $object_data->data->content : '' ); ?>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php if ( isset( $object_data ) && ! empty( $object_data->data->pages ) && $object_data->data->pages > 1 ) : ?>\n+\t\t\t\u003Cdiv class=\"section-item__loadmore\" data-page=\"1\">\n+\t\t\t\t\u003Cbutton>\u003C?php esc_html_e( 'Show more items', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Fconfirm.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Fconfirm.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Fconfirm.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Fconfirm.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,85 +1,85 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying confirm message after order is placed.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Fconfirm.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $order ) ) {\r\n-\t$order = learn_press_get_order();\r\n-}\r\n-?>\r\n-\r\n-\u003C?php if ( $order ) { ?>\r\n-\r\n-\t\u003C?php if ( $order->has_status( 'failed' ) ) : ?>\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003C?php esc_html_e( 'Unfortunately your order cannot be processed as the originating bank\u002Fmerchant has declined your transaction.', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\t\u003Cp>\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( is_user_logged_in() ) {\r\n-\t\t\t\tesc_html_e( 'Please attempt your purchase again or go to your account page.', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\tesc_html_e( 'Please attempt your purchase again.', 'learnpress' );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fp>\r\n-\r\n-\t\u003C?php else : ?>\r\n-\t\t\u003C?php $confirm_text = $order->get_confirm_order_received_text(); ?>\r\n-\r\n-\t\t\u003C?php if ( false !== $confirm_text ) : ?>\r\n-\t\t\t\u003Cp class=\"confirm-order-received-text\">\u003C?php echo esc_html( $confirm_text ); ?>\u003C\u002Fp>\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-confirm-order-details', $order->get_id() ); ?>\r\n-\r\n-\t\t\u003Cul class=\"order_details\">\r\n-\t\t\t\u003Cli class=\"order\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Order Number:', 'learnpress' ); ?>\r\n-\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_order_number() ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\u003Cli class=\"date\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Date:', 'learnpress' ); ?>\r\n-\t\t\t\t\u003Cstrong>\u003C?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\u003Cli class=\"total\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Total:', 'learnpress' ); ?>\r\n-\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\u003C?php $payment_method_title = $order->get_payment_method_title(); ?>\r\n-\t\t\t\u003C?php if ( $payment_method_title ) : ?>\r\n-\t\t\t\t\u003Cli class=\"method\">\r\n-\t\t\t\t\t\u003C?php esc_html_e( 'Payment Method:', 'learnpress' ); ?>\r\n-\t\t\t\t\t\u003Cstrong>\u003C?php echo wp_kses_post( $payment_method_title ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\u003Cli class=\"status\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Status:', 'learnpress' ); ?>\r\n-\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_status() ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-confirm-order-details', $order->get_id() ); ?>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php do_action( 'learn_press_confirm_order' . $order->transaction_method, $order->get_id() ); ?>\r\n-\t\u003C?php do_action( 'learn_press_confirm_order', $order->get_id() ); ?>\r\n-\r\n-\u003C?php } else { ?>\r\n-\r\n-\t\u003Cp>\u003C?php echo esc_html( $order->get_thankyou_message() ); ?>\u003C\u002Fp>\r\n-\r\n-\u003C?php } ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying confirm message after order is placed.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Fconfirm.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $order ) ) {\n+\t$order = learn_press_get_order();\n+}\n+?>\n+\n+\u003C?php if ( $order ) { ?>\n+\n+\t\u003C?php if ( $order->has_status( 'failed' ) ) : ?>\n+\t\t\u003Cp>\n+\t\t\t\u003C?php esc_html_e( 'Unfortunately your order cannot be processed as the originating bank\u002Fmerchant has declined your transaction.', 'learnpress' ); ?>\n+\t\t\u003C\u002Fp>\n+\n+\t\t\u003Cp>\n+\t\t\t\u003C?php\n+\t\t\tif ( is_user_logged_in() ) {\n+\t\t\t\tesc_html_e( 'Please attempt your purchase again or go to your account page.', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\tesc_html_e( 'Please attempt your purchase again.', 'learnpress' );\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fp>\n+\n+\t\u003C?php else : ?>\n+\t\t\u003C?php $confirm_text = $order->get_confirm_order_received_text(); ?>\n+\n+\t\t\u003C?php if ( false !== $confirm_text ) : ?>\n+\t\t\t\u003Cp class=\"confirm-order-received-text\">\u003C?php echo esc_html( $confirm_text ); ?>\u003C\u002Fp>\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-confirm-order-details', $order->get_id() ); ?>\n+\n+\t\t\u003Cul class=\"order_details\">\n+\t\t\t\u003Cli class=\"order\">\n+\t\t\t\t\u003C?php esc_html_e( 'Order Number:', 'learnpress' ); ?>\n+\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_order_number() ); ?>\u003C\u002Fstrong>\n+\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\u003Cli class=\"date\">\n+\t\t\t\t\u003C?php esc_html_e( 'Date:', 'learnpress' ); ?>\n+\t\t\t\t\u003Cstrong>\u003C?php echo date_i18n( get_option( 'date_format' ), strtotime( $order->order_date ) ); ?>\u003C\u002Fstrong>\n+\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\u003Cli class=\"total\">\n+\t\t\t\t\u003C?php esc_html_e( 'Total:', 'learnpress' ); ?>\n+\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Fstrong>\n+\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\u003C?php $payment_method_title = $order->get_payment_method_title(); ?>\n+\t\t\t\u003C?php if ( $payment_method_title ) : ?>\n+\t\t\t\t\u003Cli class=\"method\">\n+\t\t\t\t\t\u003C?php esc_html_e( 'Payment Method:', 'learnpress' ); ?>\n+\t\t\t\t\t\u003Cstrong>\u003C?php echo wp_kses_post( $payment_method_title ); ?>\u003C\u002Fstrong>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\u003Cli class=\"status\">\n+\t\t\t\t\u003C?php esc_html_e( 'Status:', 'learnpress' ); ?>\n+\t\t\t\t\u003Cstrong>\u003C?php echo esc_html( $order->get_status() ); ?>\u003C\u002Fstrong>\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-confirm-order-details', $order->get_id() ); ?>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php do_action( 'learn_press_confirm_order' . $order->transaction_method, $order->get_id() ); ?>\n+\t\u003C?php do_action( 'learn_press_confirm_order', $order->get_id() ); ?>\n+\n+\u003C?php } else { ?>\n+\n+\t\u003Cp>\u003C?php echo esc_html( $order->get_thankyou_message() ); ?>\u003C\u002Fp>\n+\n+\u003C?php } ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Forder-details.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Forder-details.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Forder-details.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Forder-details.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,137 +1,137 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying order details.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Forder-details.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- * @deprecated 4.3.2.6\r\n- *\u002F\r\n-\r\n-_deprecated_file( __FILE__, '4.3.2.6' );\r\n-return;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Order $order\r\n- *\u002F\r\n-if ( ! isset( $order ) ) {\r\n-\techo esc_html__( 'Invalid order', 'learnpress' );\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Ch3>\u003C?php esc_html_e( 'Order Details', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\u003Ctable class=\"lp-list-table order-table-details\">\r\n-\t\u003Cthead>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth class=\"course-name\">\u003C?php esc_html_e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"course-total\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\r\n-\t\u003Ctbody>\r\n-\t\u003C?php\r\n-\t$items = $order->get_items();\r\n-\tif ( $items ) {\r\n-\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\r\n-\r\n-\t\tforeach ( $items as $item_id => $item ) {\r\n-\t\t\tif ( ! isset( $item['course_id'] ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$price = (float) $item['subtotal'];\r\n-\t\t\tif ( $price \u003C= 0 ) {\r\n-\t\t\t\t$price = __( 'Free', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\t$price = learn_press_format_price( $price, $currency_symbol );\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( apply_filters( 'learn-press\u002Forder\u002Fitem-visible', true, $item ) ) {\r\n-\t\t\t\t$course = learn_press_get_course( $item['course_id'] );\r\n-\r\n-\t\t\t\tif ( ! $course || ! $course->exists() ) {\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003Ctr class=\"\u003C?php echo esc_attr( apply_filters( 'learn-press\u002Forder\u002Fitem-class', 'order-item', $item, $order ) ); ?>\">\r\n-\t\t\t\t\t\t\u003Ctd class=\"course-name\">\r\n-\t\t\t\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Forder\u002Fitem-name', sprintf( '%s', $item['name'] ), $item, $order ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003Ctd class=\"course-total\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\techo '\u003Cspan class=\"course-price\">' . esc_html( $price ) . '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\t\t\u003Ctr class=\"\u003C?php echo esc_attr( apply_filters( 'learn-press\u002Forder\u002Fitem-class', 'order-item', $item, $order ) ); ?>\">\r\n-\t\t\t\t\t\t\u003Ctd class=\"course-name\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\techo apply_filters(\r\n-\t\t\t\t\t\t\t\t'learn-press\u002Forder\u002Fitem-name',\r\n-\t\t\t\t\t\t\t\tsprintf(\r\n-\t\t\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t\t\t\t\tesc_url_raw( get_permalink( $item['course_id'] ) ),\r\n-\t\t\t\t\t\t\t\t\tesc_html( $item['name'] )\r\n-\t\t\t\t\t\t\t\t),\r\n-\t\t\t\t\t\t\t\t$item,\r\n-\t\t\t\t\t\t\t\t$order\r\n-\t\t\t\t\t\t\t);\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\r\n-\t\t\t\t\t\t\u003Ctd class=\"course-total\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t$origin_price = $course->get_regular_price_html();\r\n-\r\n-\t\t\t\t\t\t\tif ( $course->has_sale_price() ) {\r\n-\t\t\t\t\t\t\t\techo '\u003Cspan class=\"course-origin-price\">' . wp_kses_post( $origin_price ) . '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\techo '\u003Cspan class=\"course-price\">' . wp_kses_post( $price ) . '\u003C\u002Fspan>';\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t}\r\n-\t}\r\n-\t?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Forder\u002Fitems-table', $order ); ?>\r\n-\t\u003C\u002Ftbody>\r\n-\r\n-\t\u003Ctfoot>\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth scope=\"row\">\u003C?php esc_html_e( 'Subtotal', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_formatted_order_subtotal() ); ?>\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Forder\u002Fitems-table-foot', $order ); ?>\r\n-\r\n-\t\t\u003Ctr>\r\n-\t\t\t\u003Cth scope=\"row\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Ftfoot>\r\n-\u003C\u002Ftable>\r\n-\r\n-\u003Cp>\r\n-\t\u003Cstrong>\u003C?php echo esc_html__( 'Order key:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\u003C?php echo esc_html( $order->get_order_key() ); ?>\r\n-\u003C\u002Fp>\r\n-\r\n-\u003Cp>\r\n-\t\u003Cstrong>\u003C?php esc_html_e( 'Order status:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $order->get_status() ); ?>\">\r\n-\t\t\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\r\n-\t\u003C\u002Fspan>\r\n-\u003C\u002Fp>\r\n-\r\n-\u003C?php do_action( 'learn-press\u002Forder\u002Fafter-table-details', $order ); ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying order details.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Forder-details.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ * @deprecated 4.3.2.6\n+ *\u002F\n+\n+_deprecated_file( __FILE__, '4.3.2.6' );\n+return;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Order $order\n+ *\u002F\n+if ( ! isset( $order ) ) {\n+\techo esc_html__( 'Invalid order', 'learnpress' );\n+\treturn;\n+}\n+?>\n+\n+\u003Ch3>\u003C?php esc_html_e( 'Order Details', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\u003Ctable class=\"lp-list-table order-table-details\">\n+\t\u003Cthead>\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth class=\"course-name\">\u003C?php esc_html_e( 'Item', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"course-total\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\n+\t\u003Ctbody>\n+\t\u003C?php\n+\t$items = $order->get_items();\n+\tif ( $items ) {\n+\t\t$currency_symbol = learn_press_get_currency_symbol( $order->get_currency() );\n+\n+\t\tforeach ( $items as $item_id => $item ) {\n+\t\t\tif ( ! isset( $item['course_id'] ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$price = (float) $item['subtotal'];\n+\t\t\tif ( $price \u003C= 0 ) {\n+\t\t\t\t$price = __( 'Free', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\t$price = learn_press_format_price( $price, $currency_symbol );\n+\t\t\t}\n+\n+\t\t\tif ( apply_filters( 'learn-press\u002Forder\u002Fitem-visible', true, $item ) ) {\n+\t\t\t\t$course = learn_press_get_course( $item['course_id'] );\n+\n+\t\t\t\tif ( ! $course || ! $course->exists() ) {\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003Ctr class=\"\u003C?php echo esc_attr( apply_filters( 'learn-press\u002Forder\u002Fitem-class', 'order-item', $item, $order ) ); ?>\">\n+\t\t\t\t\t\t\u003Ctd class=\"course-name\">\n+\t\t\t\t\t\t\t\u003C?php echo apply_filters( 'learn-press\u002Forder\u002Fitem-name', sprintf( '%s', $item['name'] ), $item, $order ); ?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003Ctd class=\"course-total\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\techo '\u003Cspan class=\"course-price\">' . esc_html( $price ) . '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\t\t\u003Ctr class=\"\u003C?php echo esc_attr( apply_filters( 'learn-press\u002Forder\u002Fitem-class', 'order-item', $item, $order ) ); ?>\">\n+\t\t\t\t\t\t\u003Ctd class=\"course-name\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\techo apply_filters(\n+\t\t\t\t\t\t\t\t'learn-press\u002Forder\u002Fitem-name',\n+\t\t\t\t\t\t\t\tsprintf(\n+\t\t\t\t\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t\t\t\t\tesc_url_raw( get_permalink( $item['course_id'] ) ),\n+\t\t\t\t\t\t\t\t\tesc_html( $item['name'] )\n+\t\t\t\t\t\t\t\t),\n+\t\t\t\t\t\t\t\t$item,\n+\t\t\t\t\t\t\t\t$order\n+\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\n+\t\t\t\t\t\t\u003Ctd class=\"course-total\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t$origin_price = $course->get_regular_price_html();\n+\n+\t\t\t\t\t\t\tif ( $course->has_sale_price() ) {\n+\t\t\t\t\t\t\t\techo '\u003Cspan class=\"course-origin-price\">' . wp_kses_post( $origin_price ) . '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\techo '\u003Cspan class=\"course-price\">' . wp_kses_post( $price ) . '\u003C\u002Fspan>';\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t}\n+\t}\n+\t?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Forder\u002Fitems-table', $order ); ?>\n+\t\u003C\u002Ftbody>\n+\n+\t\u003Ctfoot>\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth scope=\"row\">\u003C?php esc_html_e( 'Subtotal', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_formatted_order_subtotal() ); ?>\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Forder\u002Fitems-table-foot', $order ); ?>\n+\n+\t\t\u003Ctr>\n+\t\t\t\u003Cth scope=\"row\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Ctd>\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Ftfoot>\n+\u003C\u002Ftable>\n+\n+\u003Cp>\n+\t\u003Cstrong>\u003C?php echo esc_html__( 'Order key:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\u003C?php echo esc_html( $order->get_order_key() ); ?>\n+\u003C\u002Fp>\n+\n+\u003Cp>\n+\t\u003Cstrong>\u003C?php esc_html_e( 'Order status:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $order->get_status() ); ?>\">\n+\t\t\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\n+\t\u003C\u002Fspan>\n+\u003C\u002Fp>\n+\n+\u003C?php do_action( 'learn-press\u002Forder\u002Fafter-table-details', $order ); ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Frecover-form.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Frecover-form.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Forder\u002Frecover-form.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Forder\u002Frecover-form.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying recover order form.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Frecover-form.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$order_key = isset( $order ) && is_a( $order, 'LP_Order' ) ? $order->get_order_key() : '';\r\n-?>\r\n-\r\n-\u003Cform class=\"lp-order-recover\" method=\"post\" action=\"\">\r\n-\t\u003Cinput type=\"text\" name=\"order-key\" value=\"\u003C?php echo esc_attr( $order_key ); ?>\" placeholder=\"\u003C?php esc_attr_e( 'Order key', 'learnpress' ); ?>\">\r\n-\t\u003Cinput type=\"hidden\" name=\"recover-order-nonce\" value=\"\u003C?php echo wp_create_nonce( 'recover-order' ); ?>\">\r\n-\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"recover-order\">\r\n-\t\u003Cbutton type=\"submit\" class=\"lp-button button-recover-order\">\u003C?php esc_html_e( 'Recover', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying recover order form.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forder\u002Frecover-form.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$order_key = isset( $order ) && is_a( $order, 'LP_Order' ) ? $order->get_order_key() : '';\n+?>\n+\n+\u003Cform class=\"lp-order-recover\" method=\"post\" action=\"\">\n+\t\u003Cinput type=\"text\" name=\"order-key\" value=\"\u003C?php echo esc_attr( $order_key ); ?>\" placeholder=\"\u003C?php esc_attr_e( 'Order key', 'learnpress' ); ?>\">\n+\t\u003Cinput type=\"hidden\" name=\"recover-order-nonce\" value=\"\u003C?php echo wp_create_nonce( 'recover-order' ); ?>\">\n+\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"recover-order\">\n+\t\u003Cbutton type=\"submit\" class=\"lp-button button-recover-order\">\u003C?php esc_html_e( 'Recover', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fpages\u002Fcheckout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fpages\u002Fcheckout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fpages\u002Fcheckout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fpages\u002Fcheckout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,46 +1,46 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of page for processing checkout feature.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  LearnPress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die;\r\n-\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-header' );\r\n-}\r\n-\r\n-do_action( 'learn-press\u002Fbefore-main-content' );\r\n-do_action( 'learnpress\u002Ftemplate\u002Fpages\u002Fcheckout\u002Fbefore-content' );\r\n-\r\n-\r\n-echo '\u003Ch1 class=\"lp-content-area\">' . get_the_title() . '\u003C\u002Fh1>';\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\r\n- * @since 4.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-checkout-page' );\r\n-\r\n-\u002F\u002F Shortcode for displaying checkout form\r\n-echo do_shortcode( '[learn_press_checkout]' );\r\n-\r\n-\u002F**\r\n- * LP Hook\r\n- *\r\n- * @since 4.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-checkout-page' );\r\n-?>\r\n-\r\n-\u003C?php\r\n-do_action( 'learnpress\u002Ftemplate\u002Fpages\u002Fcheckout\u002Fafter-content' );\r\n-do_action( 'learn-press\u002Fafter-main-content' );\r\n-\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-footer' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of page for processing checkout feature.\n+ *\n+ * @author   ThimPress\n+ * @package  LearnPress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die;\n+\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-header' );\n+}\n+\n+do_action( 'learn-press\u002Fbefore-main-content' );\n+do_action( 'learnpress\u002Ftemplate\u002Fpages\u002Fcheckout\u002Fbefore-content' );\n+\n+\n+echo '\u003Ch1 class=\"lp-content-area\">' . get_the_title() . '\u003C\u002Fh1>';\n+\n+\u002F**\n+ * LP Hook\n+ *\n+ * @since 4.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-checkout-page' );\n+\n+\u002F\u002F Shortcode for displaying checkout form\n+echo do_shortcode( '[learn_press_checkout]' );\n+\n+\u002F**\n+ * LP Hook\n+ *\n+ * @since 4.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-checkout-page' );\n+?>\n+\n+\u003C?php\n+do_action( 'learnpress\u002Ftemplate\u002Fpages\u002Fcheckout\u002Fafter-content' );\n+do_action( 'learn-press\u002Fafter-main-content' );\n+\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-footer' );\n+}\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fpages: course-builder.php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fpages\u002Fprofile.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fpages\u002Fprofile.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fpages\u002Fprofile.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fpages\u002Fprofile.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying main user profile page.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $profile ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\t\u003Cdiv id=\"learn-press-profile\" \u003C?php $profile->main_class(); ?>>\r\n-\t\t\u003Cdiv class=\"lp-content-area\">\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fuser-profile', $profile ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying main user profile page.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $profile ) ) {\n+\treturn;\n+}\n+?>\n+\t\u003Cdiv id=\"learn-press-profile\" \u003C?php $profile->main_class(); ?>>\n+\t\t\u003Cdiv class=\"lp-content-area\">\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fuser-profile', $profile ); ?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C?php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Favatar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Favatar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Favatar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Favatar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user profile avatar\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$user = LP_Profile::instance()->get_user();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-user-profile-avatar\">\r\n-\t\u003C?php echo wp_kses_post( $user->get_profile_picture() ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user profile avatar\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$user = LP_Profile::instance()->get_user();\n+?>\n+\n+\u003Cdiv class=\"lp-user-profile-avatar\">\n+\t\u003C?php echo wp_kses_post( $user->get_profile_picture() ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcontent.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcontent.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcontent.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcontent.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user profile content.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fcontent.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Profile_Tab $profile_tab\r\n- *\u002F\r\n-if ( ! isset( $user ) || ! isset( $tab_key ) || ! isset( $profile ) || ! isset( $profile_tab ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Carticle id=\"profile-content\" class=\"lp-profile-content\">\r\n-\t\u003Cdiv id=\"profile-content-\u003C?php echo esc_attr( $tab_key ); ?>\">\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-content', $tab_key, $profile_tab, $user ); ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t\tif ( empty( $profile_tab->get( 'sections' ) ) ) {\r\n-\t\t\tif ( $profile_tab->get( 'callback' ) && is_callable( $profile_tab->get( 'callback' ) ) ) {\r\n-\t\t\t\techo call_user_func_array(\r\n-\t\t\t\t\t$profile_tab->get( 'callback' ),\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t$tab_key,\r\n-\t\t\t\t\t\t$profile_tab,\r\n-\t\t\t\t\t\t$user,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\t\t\t} else {\r\n-\t\t\t\tdo_action( 'learn-press\u002Fprofile-content', $tab_key, $profile_tab, $user );\r\n-\t\t\t}\r\n-\t\t} else {\r\n-\t\t\tforeach ( $profile_tab->get( 'sections' ) as $key => $section ) {\r\n-\t\t\t\tif ( $profile->get_current_section( '', false, false ) === $section['slug'] ) {\r\n-\t\t\t\t\tif ( isset( $section['callback'] ) && is_callable( $section['callback'] ) ) {\r\n-\t\t\t\t\t\techo call_user_func_array( $section['callback'], array( $key, $section, $user ) );\r\n-\t\t\t\t\t} else {\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Fprofile-section-content', $key, $section, $user );\r\n-\t\t\t\t\t}\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-content' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Farticle>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user profile content.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fcontent.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Profile_Tab $profile_tab\n+ *\u002F\n+if ( ! isset( $user ) || ! isset( $tab_key ) || ! isset( $profile ) || ! isset( $profile_tab ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Carticle id=\"profile-content\" class=\"lp-profile-content\">\n+\t\u003Cdiv id=\"profile-content-\u003C?php echo esc_attr( $tab_key ); ?>\">\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-content', $tab_key, $profile_tab, $user ); ?>\n+\n+\t\t\u003C?php\n+\t\tif ( empty( $profile_tab->get( 'sections' ) ) ) {\n+\t\t\tif ( $profile_tab->get( 'callback' ) && is_callable( $profile_tab->get( 'callback' ) ) ) {\n+\t\t\t\techo call_user_func_array(\n+\t\t\t\t\t$profile_tab->get( 'callback' ),\n+\t\t\t\t\t[\n+\t\t\t\t\t\t$tab_key,\n+\t\t\t\t\t\t$profile_tab,\n+\t\t\t\t\t\t$user,\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\t\t\t} else {\n+\t\t\t\tdo_action( 'learn-press\u002Fprofile-content', $tab_key, $profile_tab, $user );\n+\t\t\t}\n+\t\t} else {\n+\t\t\tforeach ( $profile_tab->get( 'sections' ) as $key => $section ) {\n+\t\t\t\tif ( $profile->get_current_section( '', false, false ) === $section['slug'] ) {\n+\t\t\t\t\tif ( isset( $section['callback'] ) && is_callable( $section['callback'] ) ) {\n+\t\t\t\t\t\techo call_user_func_array( $section['callback'], array( $key, $section, $user ) );\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Fprofile-section-content', $key, $section, $user );\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-content' ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Farticle>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-container.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-container.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-container.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-container.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-$user = LP_Profile::instance()->get_user();\r\n-\r\n-$lp_profile_data = array(\r\n-\t'userID' => $user->get_id(),\r\n-);\r\n-?>\r\n-\t\u003Cul\r\n-\t\tclass=\"\u003C?php echo esc_attr( apply_filters( 'learnpress\u002Fprofile\u002Fcourse-list\u002Fcourse-container\u002Fclass', 'learnpress-course-container' ) ); ?>\"\r\n-\t>\r\n-\t\t\u003Cli class=\"lp-loading\">\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cinput class=\"lp_profile_data\" type=\"hidden\" name=\"lp_profile_data\"\r\n-\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $lp_profile_data ) ) ); ?>\">\r\n-\t\u003C\u002Ful>\r\n-\u003C?php\r\n+\u003C?php\n+$user = LP_Profile::instance()->get_user();\n+\n+$lp_profile_data = array(\n+\t'userID' => $user->get_id(),\n+);\n+?>\n+\t\u003Cul\n+\t\tclass=\"\u003C?php echo esc_attr( apply_filters( 'learnpress\u002Fprofile\u002Fcourse-list\u002Fcourse-container\u002Fclass', 'learnpress-course-container' ) ); ?>\"\n+\t>\n+\t\t\u003Cli class=\"lp-loading\">\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cinput class=\"lp_profile_data\" type=\"hidden\" name=\"lp_profile_data\"\n+\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $lp_profile_data ) ) ); ?>\">\n+\t\u003C\u002Ful>\n+\u003C?php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fcourse-list\u002Fcourse-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1 +1 @@\n-\u003C?php\r\n+\u003C?php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fdashboard.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fdashboard.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fdashboard.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fdashboard.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Dashboard of user profile.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fdashboard.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-profile-dashboard\">\r\n-\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * Before dashboard\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fprofile\u002Fbefore-dashboard' );\r\n-\r\n-\t\u002F**\r\n-\t * Dashboard summary\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fprofile\u002Fdashboard-summary' );\r\n-\r\n-\t\u002F**\r\n-\t * After dashboard\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fprofile\u002Fafter-dashboard' );\r\n-\r\n-\t?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Dashboard of user profile.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fdashboard.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"learn-press-profile-dashboard\">\n+\n+\t\u003C?php\n+\t\u002F**\n+\t * Before dashboard\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fprofile\u002Fbefore-dashboard' );\n+\n+\t\u002F**\n+\t * Dashboard summary\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fprofile\u002Fdashboard-summary' );\n+\n+\t\u002F**\n+\t * After dashboard\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fprofile\u002Fafter-dashboard' );\n+\n+\t?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-bio.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-bio.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-bio.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-bio.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,24 +1,24 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying profile user bio.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-$profile = LP_Profile::instance();\r\n-$user    = $profile->get_user();\r\n-\r\n-if ( ! isset( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$bio = $user->get_description();\r\n-?>\r\n-\u003C?php if ( $bio ) : ?>\r\n-\t\u003Cdiv class=\"lp-profile-user-bio\">\r\n-\t\t\u003C?php echo wpautop( $bio ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying profile user bio.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+$profile = LP_Profile::instance();\n+$user    = $profile->get_user();\n+\n+if ( ! isset( $user ) ) {\n+\treturn;\n+}\n+\n+$bio = $user->get_description();\n+?>\n+\u003C?php if ( $bio ) : ?>\n+\t\u003Cdiv class=\"lp-profile-user-bio\">\n+\t\t\u003C?php echo wpautop( $bio ); ?>\n+\t\u003C\u002Fdiv>\n+\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-name.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-name.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-name.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader\u002Fuser-name.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying profile username.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$profile = LP_Profile::instance();\r\n-$user    = $profile->get_user();\r\n-\r\n-if ( ! isset( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-?>\r\n-\t\u003Ch2 class=\"lp-profile-username\">\r\n-\t\t\u003C?php echo wp_kses_post( $user->get_display_name() ); ?>\r\n-\t\u003C\u002Fh2>\r\n-\u003C?php\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying profile username.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$profile = LP_Profile::instance();\n+$user    = $profile->get_user();\n+\n+if ( ! isset( $user ) ) {\n+\treturn;\n+}\n+\n+?>\n+\t\u003Ch2 class=\"lp-profile-username\">\n+\t\t\u003C?php echo wp_kses_post( $user->get_display_name() ); ?>\n+\t\u003C\u002Fh2>\n+\u003C?php\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fheader.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fheader.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,37 +1,37 @@\n-\u003C?php\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-\u002F**\r\n- * Template for displaying profile header.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$profile = LP_Profile::instance();\r\n-$user    = $profile->get_user();\r\n-\r\n-if ( ! isset( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$bio = $user->get_description();\r\n-?>\r\n-\u003Cdiv class=\"lp-profile-right\">\r\n-\t\u003C?php\r\n-\t$sections = apply_filters(\r\n-\t\t'learn-press\u002Fprofile\u002Fheader\u002Fsections',\r\n-\t\tarray(\r\n-\t\t\t'profile\u002Fheader\u002Fuser-name.php',\r\n-\t\t\t'profile\u002Fsocials.php',\r\n-\t\t\t'profile\u002Fheader\u002Fuser-bio.php',\r\n-\t\t),\r\n-\t\t$user\r\n-\t);\r\n-\r\n-\tTemplate::instance()->get_frontend_templates( $sections );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+use LearnPress\\Helpers\\Template;\n+\n+\u002F**\n+ * Template for displaying profile header.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$profile = LP_Profile::instance();\n+$user    = $profile->get_user();\n+\n+if ( ! isset( $user ) ) {\n+\treturn;\n+}\n+\n+$bio = $user->get_description();\n+?>\n+\u003Cdiv class=\"lp-profile-right\">\n+\t\u003C?php\n+\t$sections = apply_filters(\n+\t\t'learn-press\u002Fprofile\u002Fheader\u002Fsections',\n+\t\tarray(\n+\t\t\t'profile\u002Fheader\u002Fuser-name.php',\n+\t\t\t'profile\u002Fsocials.php',\n+\t\t\t'profile\u002Fheader\u002Fuser-bio.php',\n+\t\t),\n+\t\t$user\n+\t);\n+\n+\tTemplate::instance()->get_frontend_templates( $sections );\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fnot-logged-in.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fnot-logged-in.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fnot-logged-in.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fnot-logged-in.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,16 +1,16 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying message in profile dashboard if user is logged in.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fnot-logged-in.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Global::profile();\r\n-\r\n-learn_press_display_message( sprintf( __( 'Please \u003Ca href=\"%s\">login\u003C\u002Fa> to see your profile content', 'learnpress' ), $profile->get_login_url() ) );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying message in profile dashboard if user is logged in.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Fnot-logged-in.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Global::profile();\n+\n+learn_press_display_message( sprintf( __( 'Please \u003Ca href=\"%s\">login\u003C\u002Fa> to see your profile content', 'learnpress' ), $profile->get_login_url() ) );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fheader.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fheader.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fheader.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fheader.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying header in user profile.\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-?>\r\n-\u003Cdiv class=\"wrapper-profile-header wrap-fullwidth\">\r\n-\t\u003Cdiv class=\"lp-content-area lp-profile-content-area\">\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fuser-profile-account' ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying header in user profile.\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+?>\n+\u003Cdiv class=\"wrapper-profile-header wrap-fullwidth\">\n+\t\u003Cdiv class=\"lp-content-area lp-profile-content-area\">\n+\t\t\u003C?php do_action( 'learn-press\u002Fuser-profile-account' ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fsidebar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fsidebar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fsidebar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar\u002Fsidebar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,4 +1,4 @@\n-\r\n-\u003Caside id=\"profile-sidebar\">\r\n-\t\u003C?php do_action( 'learn-press\u002Fuser-profile-tabs' ); ?>\r\n-\u003C\u002Faside>\r\n+\n+\u003Caside id=\"profile-sidebar\">\n+\t\u003C?php do_action( 'learn-press\u002Fuser-profile-tabs' ); ?>\n+\u003C\u002Faside>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsidebar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsidebar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying sidebar in user profile.\r\n- *\r\n- * @author ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\r\n-$sections = apply_filters(\r\n-\t'learn-press\u002Fprofile\u002Fsidebar\u002Fsections',\r\n-\tarray(\r\n-\t\t'profile\u002Fsidebar\u002Fheader.php',\r\n-\t\t'profile\u002Fsidebar\u002Fsidebar.php',\r\n-\t)\r\n-);\r\n-\r\n-Template::instance()->get_frontend_templates( $sections );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying sidebar in user profile.\n+ *\n+ * @author ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\n+$sections = apply_filters(\n+\t'learn-press\u002Fprofile\u002Fsidebar\u002Fsections',\n+\tarray(\n+\t\t'profile\u002Fsidebar\u002Fheader.php',\n+\t\t'profile\u002Fsidebar\u002Fsidebar.php',\n+\t)\n+);\n+\n+Template::instance()->get_frontend_templates( $sections );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsocials.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsocials.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Fsocials.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Fsocials.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user socials\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-$user = LP_Profile::instance()->get_user();\r\n-\r\n-if ( ! $user ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$socials = $user->get_profile_social( $user->get_id() );\r\n-if ( empty( $socials ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-user-profile-socials\">\r\n-\t\u003C?php echo implode( \"\\n\", $socials ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user socials\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+$user = LP_Profile::instance()->get_user();\n+\n+if ( ! $user ) {\n+\treturn;\n+}\n+\n+$socials = $user->get_profile_social( $user->get_id() );\n+if ( empty( $socials ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"lp-user-profile-socials\">\n+\t\u003C?php echo implode( \"\\n\", $socials ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-grid.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-grid.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-grid.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-grid.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,72 +1,72 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying own courses in courses tab of user profile page.\r\n- * Edit by Nhamdv\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.12\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $user ) || ! isset( $course_ids ) || ! isset( $current_page ) || ! isset( $num_pages ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003C?php if ( $current_page === 1 ) : ?>\r\n-\u003Cdiv class=\"lp-archive-courses\">\r\n-\t\u003Cul \u003C?php lp_item_course_class( array( 'profile-courses-list' ) ); ?> data-layout=\"grid\" data-size=\"3\">\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t$template_is_override = Template::check_template_is_override( 'content-course.php' );\r\n-\t\t$listCoursesTemplate  = ListCoursesTemplate::instance();\r\n-\t\tif ( $template_is_override ) {\r\n-\t\t\tglobal $post;\r\n-\t\t}\r\n-\r\n-\t\tforeach ( $course_ids as $id ) {\r\n-\t\t\t$course = CourseModel::find( $id, true );\r\n-\t\t\tif ( ! $course ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $template_is_override ) {\r\n-\t\t\t\t$post = get_post( $id );\r\n-\t\t\t\tsetup_postdata( $post );\r\n-\r\n-\t\t\t\tlearn_press_get_template( 'content-course.php' );\r\n-\t\t\t} else {\r\n-\t\t\t\techo $listCoursesTemplate::render_course(\r\n-\t\t\t\t\t$course,\r\n-\t\t\t\t\t[\r\n-\t\t\t\t\t\t'show_view_students' => true,\r\n-\t\t\t\t\t]\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tif ( $template_is_override ) {\r\n-\t\t\twp_reset_postdata();\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php if ( $current_page === 1 ) : ?>\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n-\u003C?php endif; ?>\r\n-\r\n-\u003C?php if ( $num_pages > 1 && $current_page \u003C $num_pages && $current_page === 1 ) : ?>\r\n-\t\u003Cdiv class=\"lp_profile_course_progress__nav\">\r\n-\t\t\u003Cbutton class=\"lp-button\" data-paged=\"\u003C?php echo absint( $current_page + 1 ); ?>\"\r\n-\t\t\t\tdata-number=\"\u003C?php echo absint( $num_pages ); ?>\">\r\n-\t\t\t\u003C?php esc_html_e( 'View more', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying own courses in courses tab of user profile page.\n+ * Edit by Nhamdv\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.12\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $user ) || ! isset( $course_ids ) || ! isset( $current_page ) || ! isset( $num_pages ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003C?php if ( $current_page === 1 ) : ?>\n+\u003Cdiv class=\"lp-archive-courses\">\n+\t\u003Cul \u003C?php lp_item_course_class( array( 'profile-courses-list' ) ); ?> data-layout=\"grid\" data-size=\"3\">\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php\n+\t\t$template_is_override = Template::check_template_is_override( 'content-course.php' );\n+\t\t$listCoursesTemplate  = ListCoursesTemplate::instance();\n+\t\tif ( $template_is_override ) {\n+\t\t\tglobal $post;\n+\t\t}\n+\n+\t\tforeach ( $course_ids as $id ) {\n+\t\t\t$course = CourseModel::find( $id, true );\n+\t\t\tif ( ! $course ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tif ( $template_is_override ) {\n+\t\t\t\t$post = get_post( $id );\n+\t\t\t\tsetup_postdata( $post );\n+\n+\t\t\t\tlearn_press_get_template( 'content-course.php' );\n+\t\t\t} else {\n+\t\t\t\techo $listCoursesTemplate::render_course(\n+\t\t\t\t\t$course,\n+\t\t\t\t\t[\n+\t\t\t\t\t\t'show_view_students' => true,\n+\t\t\t\t\t]\n+\t\t\t\t);\n+\t\t\t}\n+\t\t}\n+\n+\t\tif ( $template_is_override ) {\n+\t\t\twp_reset_postdata();\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php if ( $current_page === 1 ) : ?>\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\n+\u003C?php endif; ?>\n+\n+\u003C?php if ( $num_pages > 1 && $current_page \u003C $num_pages && $current_page === 1 ) : ?>\n+\t\u003Cdiv class=\"lp_profile_course_progress__nav\">\n+\t\t\u003Cbutton class=\"lp-button\" data-paged=\"\u003C?php echo absint( $current_page + 1 ); ?>\"\n+\t\t\t\tdata-number=\"\u003C?php echo absint( $num_pages ); ?>\">\n+\t\t\t\u003C?php esc_html_e( 'View more', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-list.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-list.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-list.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fcourse-list.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,86 +1,86 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying own courses in courses tab of user profile page.\r\n- * Edit by Nhamdv\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.13\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $user ) || ! isset( $course_ids ) || ! isset( $current_page ) || ! isset( $num_pages ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$userCourseTemplate   = UserCourseTemplate::instance();\r\n-$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-?>\r\n-\r\n-\u003C?php if ( $current_page === 1 ) : ?>\r\n-\u003Ctable class=\"lp_profile_course_progress lp-list-table\">\r\n-\t\u003Cthead>\r\n-\t\t\u003Ctr class=\"lp_profile_course_progress__item lp_profile_course_progress__header\">\r\n-\t\t\t\u003Cth>\u003C\u002Fth>\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Result', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'Expiration time', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth>\u003C?php esc_html_e( 'End time', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\t\u003C?php endif; ?>\r\n-\t\u003Ctbody>\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $course_ids as $id ) {\r\n-\t\t\t$courseModel = CourseModel::find( $id, true );\r\n-\t\t\tif ( ! $courseModel ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$userCourseModel = UserCourseModel::find( $user->get_id(), $id, true );\r\n-\t\t\tif ( ! $userCourseModel ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$course_result = $userCourseModel->calculate_course_results();\r\n-\t\t\t?>\r\n-\t\t\t\u003Ctr class=\"lp_profile_course_progress__item\">\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_permalink(); ?>\" title=\"\u003C?php echo $courseModel->get_title(); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $singleCourseTemplate->html_image( $courseModel ) ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_permalink(); ?>\"\r\n-\t\t\t\t\t\ttitle=\"\u003C?php echo $courseModel->get_title(); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $singleCourseTemplate->html_title( $courseModel ) ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php echo esc_html( $course_result['result'] ); ?>%\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\r\n-\t\t\t\t\t\u003C?php echo $userCourseTemplate->html_expire_date_time( $userCourseModel ); ?>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd>\u003C?php echo $userCourseTemplate->html_end_date_time( $userCourseModel ); ?>\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\t\t?>\r\n-\t\u003C\u002Ftbody>\r\n-\t\u003C?php if ( $current_page === 1 ) : ?>\r\n-\u003C\u002Ftable>\r\n-\u003C?php endif; ?>\r\n-\r\n-\u003C?php if ( $num_pages > 1 && $current_page \u003C $num_pages && $current_page === 1 ) : ?>\r\n-\t\u003Cdiv class=\"lp_profile_course_progress__nav\">\r\n-\t\t\u003Cbutton class=\"lp-button\"\r\n-\t\t\t\tdata-paged=\"\u003C?php echo absint( $current_page + 1 ); ?>\"\r\n-\t\t\t\tdata-number=\"\u003C?php echo absint( $num_pages ); ?>\">\u003C?php esc_html_e( 'View more', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying own courses in courses tab of user profile page.\n+ * Edit by Nhamdv\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.13\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $user ) || ! isset( $course_ids ) || ! isset( $current_page ) || ! isset( $num_pages ) ) {\n+\treturn;\n+}\n+\n+$userCourseTemplate   = UserCourseTemplate::instance();\n+$singleCourseTemplate = SingleCourseTemplate::instance();\n+?>\n+\n+\u003C?php if ( $current_page === 1 ) : ?>\n+\u003Ctable class=\"lp_profile_course_progress lp-list-table\">\n+\t\u003Cthead>\n+\t\t\u003Ctr class=\"lp_profile_course_progress__item lp_profile_course_progress__header\">\n+\t\t\t\u003Cth>\u003C\u002Fth>\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Name', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Result', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'Expiration time', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth>\u003C?php esc_html_e( 'End time', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\t\u003C?php endif; ?>\n+\t\u003Ctbody>\n+\t\t\u003C?php\n+\t\tforeach ( $course_ids as $id ) {\n+\t\t\t$courseModel = CourseModel::find( $id, true );\n+\t\t\tif ( ! $courseModel ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$userCourseModel = UserCourseModel::find( $user->get_id(), $id, true );\n+\t\t\tif ( ! $userCourseModel ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$course_result = $userCourseModel->calculate_course_results();\n+\t\t\t?>\n+\t\t\t\u003Ctr class=\"lp_profile_course_progress__item\">\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_permalink(); ?>\" title=\"\u003C?php echo $courseModel->get_title(); ?>\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $singleCourseTemplate->html_image( $courseModel ) ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo $courseModel->get_permalink(); ?>\"\n+\t\t\t\t\t\ttitle=\"\u003C?php echo $courseModel->get_title(); ?>\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $singleCourseTemplate->html_title( $courseModel ) ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php echo esc_html( $course_result['result'] ); ?>%\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\n+\t\t\t\t\t\u003C?php echo $userCourseTemplate->html_expire_date_time( $userCourseModel ); ?>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd>\u003C?php echo $userCourseTemplate->html_end_date_time( $userCourseModel ); ?>\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C?php\n+\t\t}\n+\t\t?>\n+\t\u003C\u002Ftbody>\n+\t\u003C?php if ( $current_page === 1 ) : ?>\n+\u003C\u002Ftable>\n+\u003C?php endif; ?>\n+\n+\u003C?php if ( $num_pages > 1 && $current_page \u003C $num_pages && $current_page === 1 ) : ?>\n+\t\u003Cdiv class=\"lp_profile_course_progress__nav\">\n+\t\t\u003Cbutton class=\"lp-button\"\n+\t\t\t\tdata-paged=\"\u003C?php echo absint( $current_page + 1 ); ?>\"\n+\t\t\t\tdata-number=\"\u003C?php echo absint( $num_pages ); ?>\">\u003C?php esc_html_e( 'View more', 'learnpress' ); ?>\n+\t\t\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses\u002Fgeneral-statistic.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,60 +1,60 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying general statistic in user profile overview.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( empty( $statistic ) || empty( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-?>\r\n-\r\n-\u003Cdiv id=\"dashboard-statistic\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-general-statistic-row' ); ?>\r\n-\r\n-\t\u003Cdiv class=\"dashboard-statistic__row\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-user-general-statistic' ); ?>\r\n-\r\n-\t\t\u003Cdiv class=\" statistic-box\" title=\"\u003C?php esc_html_e( 'Total enrolled courses', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Enrolled Courses', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['enrolled_courses'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"statistic-box\"\r\n-\t\t\ttitle=\"\u003C?php esc_html_e( 'The total number of courses is being learned', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Active Courses', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['active_courses'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total courses have finished', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Completed Courses', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['completed_courses'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-user-general-statistic' ); ?>\r\n-\r\n-\t\t\u003C?php if ( $user->can_create_course() ) : ?>\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-instructor-general-statistic' ); ?>\r\n-\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total created courses', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['total_courses'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total attended students', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Total Students', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['total_users'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-instructor-general-statistic' ); ?>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fprofile-dashboard-general-statistic-row' ); ?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-general-statistic-row' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying general statistic in user profile overview.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( empty( $statistic ) || empty( $user ) ) {\n+\treturn;\n+}\n+\n+?>\n+\n+\u003Cdiv id=\"dashboard-statistic\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-general-statistic-row' ); ?>\n+\n+\t\u003Cdiv class=\"dashboard-statistic__row\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-user-general-statistic' ); ?>\n+\n+\t\t\u003Cdiv class=\" statistic-box\" title=\"\u003C?php esc_html_e( 'Total enrolled courses', 'learnpress' ); ?>\">\n+\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Enrolled Courses', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['enrolled_courses'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"statistic-box\"\n+\t\t\ttitle=\"\u003C?php esc_html_e( 'The total number of courses is being learned', 'learnpress' ); ?>\">\n+\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Active Courses', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['active_courses'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total courses have finished', 'learnpress' ); ?>\">\n+\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Completed Courses', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['completed_courses'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-user-general-statistic' ); ?>\n+\n+\t\t\u003C?php if ( $user->can_create_course() ) : ?>\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-dashboard-instructor-general-statistic' ); ?>\n+\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total created courses', 'learnpress' ); ?>\">\n+\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Total Courses', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['total_courses'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php esc_html_e( 'Total attended students', 'learnpress' ); ?>\">\n+\t\t\t\u003Cp class=\"statistic-box__text\">\u003C?php esc_html_e( 'Total Students', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cspan class=\"statistic-box__number\">\u003C?php echo esc_html( $statistic['total_users'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-instructor-general-statistic' ); ?>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fprofile-dashboard-general-statistic-row' ); ?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-profile-dashboard-general-statistic-row' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fcourses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying courses tab in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fcourses.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.12\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $user ) || ! isset( $courses_created_tab ) || ! isset( $args_query_user_courses_created ) ||\r\n-\t! isset( $args_query_user_courses_statistic ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-subtab-content\">\r\n-\t\u003Cdiv class=\"learn-press-profile-course__statistic\">\r\n-\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\"\r\n-\t\t\tvalue=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) ); ?>\">\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"learn-press-profile-course__tab\">\r\n-\t\t\u003Cdiv class=\"learn-press-course-tab-created learn-press-course-tab-filters\" data-tab=\"created\">\r\n-\t\t\t\u003Cdiv class=\"learn-press-tabs\">\r\n-\t\t\t\t\u003Cul class=\"learn-press-filters\">\r\n-\t\t\t\t\t\u003C?php foreach ( $courses_created_tab as $key => $created ) : ?>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca class=\"\u003C?php echo esc_attr( $key === '' ? 'active' : '' ); ?>\"\r\n-\t\t\t\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $created ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"learn-press-profile-course__progress\">\r\n-\t\t\t\t\u003C?php foreach ( $courses_created_tab as $key => $created ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"learn-press-course-tab__filter__content\"\r\n-\t\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\"\r\n-\t\t\t\t\t\tstyle=\"\u003C?php echo esc_attr( $key !== '' ? 'display: none' : '' ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\u003Cinput class=\"lp_profile_tab_input_param\" type=\"hidden\" name=\"args_query_user_courses_created\"\r\n-\t\t\t\t\tvalue=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_created ) ) ); ?>\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying courses tab in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fcourses.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.12\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $user ) || ! isset( $courses_created_tab ) || ! isset( $args_query_user_courses_created ) ||\n+\t! isset( $args_query_user_courses_statistic ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"learn-press-subtab-content\">\n+\t\u003Cdiv class=\"learn-press-profile-course__statistic\">\n+\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\n+\t\t\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\"\n+\t\t\tvalue=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) ); ?>\">\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"learn-press-profile-course__tab\">\n+\t\t\u003Cdiv class=\"learn-press-course-tab-created learn-press-course-tab-filters\" data-tab=\"created\">\n+\t\t\t\u003Cdiv class=\"learn-press-tabs\">\n+\t\t\t\t\u003Cul class=\"learn-press-filters\">\n+\t\t\t\t\t\u003C?php foreach ( $courses_created_tab as $key => $created ) : ?>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca class=\"\u003C?php echo esc_attr( $key === '' ? 'active' : '' ); ?>\"\n+\t\t\t\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $created ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"learn-press-profile-course__progress\">\n+\t\t\t\t\u003C?php foreach ( $courses_created_tab as $key => $created ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"learn-press-course-tab__filter__content\"\n+\t\t\t\t\t\tdata-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\"\n+\t\t\t\t\t\tstyle=\"\u003C?php echo esc_attr( $key !== '' ? 'display: none' : '' ); ?>\">\n+\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\u003Cinput class=\"lp_profile_tab_input_param\" type=\"hidden\" name=\"args_query_user_courses_created\"\n+\t\t\t\t\tvalue=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_created ) ) ); ?>\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fmy_courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fmy_courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fmy_courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fmy_courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,56 +1,56 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying courses tab in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fcourses.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.11\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $user ) || ! isset( $courses_enrolled_tab ) ||\r\n-\t ! isset( $courses_enrolled_tab_active ) ||\r\n-\t ! isset( $args_query_user_courses_attend ) ||\r\n-\t ! isset( $args_query_user_courses_statistic ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-subtab-content\">\r\n-\t\u003Cdiv class=\"learn-press-profile-course__statistic\">\r\n-\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\"\r\n-\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) ); ?>\">\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"learn-press-profile-course__tab\">\r\n-\t\t\u003Cdiv class=\"learn-press-course-tab-enrolled learn-press-course-tab-filters\" data-tab=\"enrolled\">\r\n-\t\t\t\u003Cdiv class=\"learn-press-tabs\">\r\n-\t\t\t\t\u003Cul class=\"learn-press-filters\">\r\n-\t\t\t\t\t\u003C?php foreach ( $courses_enrolled_tab as $key => $enrolled ) : ?>\r\n-\t\t\t\t\t\t\u003Cli>\r\n-\t\t\t\t\t\t\t\u003Ca class=\"\u003C?php echo esc_attr( $key === $courses_enrolled_tab_active ? 'active' : '' ); ?>\"\r\n-\t\t\t\t\t\t\t   data-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $enrolled ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\u003C\u002Ful>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003Cdiv class=\"learn-press-profile-course__progress\">\r\n-\t\t\t\t\u003C?php foreach ( $courses_enrolled_tab as $key => $enrolled ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"learn-press-course-tab__filter__content\"\r\n-\t\t\t\t\t\t data-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\"\r\n-\t\t\t\t\t\t style=\"\u003C?php echo esc_attr( $key !== $courses_enrolled_tab_active ? 'display: none' : '' ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\t\u003Cinput class=\"lp_profile_tab_input_param\" type=\"hidden\" name=\"args_query_user_courses_attend\"\r\n-\t\t\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_attend ) ) ); ?>\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying courses tab in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fcourses.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.11\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $user ) || ! isset( $courses_enrolled_tab ) ||\n+\t ! isset( $courses_enrolled_tab_active ) ||\n+\t ! isset( $args_query_user_courses_attend ) ||\n+\t ! isset( $args_query_user_courses_statistic ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"learn-press-subtab-content\">\n+\t\u003Cdiv class=\"learn-press-profile-course__statistic\">\n+\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\n+\t\t\u003Cinput type=\"hidden\" name=\"args_query_user_courses_statistic\"\n+\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_statistic ) ) ); ?>\">\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"learn-press-profile-course__tab\">\n+\t\t\u003Cdiv class=\"learn-press-course-tab-enrolled learn-press-course-tab-filters\" data-tab=\"enrolled\">\n+\t\t\t\u003Cdiv class=\"learn-press-tabs\">\n+\t\t\t\t\u003Cul class=\"learn-press-filters\">\n+\t\t\t\t\t\u003C?php foreach ( $courses_enrolled_tab as $key => $enrolled ) : ?>\n+\t\t\t\t\t\t\u003Cli>\n+\t\t\t\t\t\t\t\u003Ca class=\"\u003C?php echo esc_attr( $key === $courses_enrolled_tab_active ? 'active' : '' ); ?>\"\n+\t\t\t\t\t\t\t   data-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\">\n+\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $enrolled ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\u003C\u002Ful>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003Cdiv class=\"learn-press-profile-course__progress\">\n+\t\t\t\t\u003C?php foreach ( $courses_enrolled_tab as $key => $enrolled ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"learn-press-course-tab__filter__content\"\n+\t\t\t\t\t\t data-tab=\"\u003C?php echo esc_attr( $key === '' ? 'all' : $key ); ?>\"\n+\t\t\t\t\t\t style=\"\u003C?php echo esc_attr( $key !== $courses_enrolled_tab_active ? 'display: none' : '' ); ?>\">\n+\t\t\t\t\t\t\u003C?php lp_skeleton_animation_html( 4, 'random', 'height: 30px;border-radius:4px;' ); ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\t\u003Cinput class=\"lp_profile_tab_input_param\" type=\"hidden\" name=\"args_query_user_courses_attend\"\n+\t\t\t\t\t   value=\"\u003C?php echo sanitize_text_field( htmlentities( wp_json_encode( $args_query_user_courses_attend ) ) ); ?>\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forder-details.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forder-details.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forder-details.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forder-details.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying order details tab in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Forder-details.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- * @deprecated 4.2.6.4\r\n- *\u002F\r\n-return;\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-\r\n-do_action( 'learn-press\u002Fprofile\u002Forder-details' );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying order details tab in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Forder-details.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ * @deprecated 4.2.6.4\n+ *\u002F\n+return;\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+\n+do_action( 'learn-press\u002Fprofile\u002Forder-details' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Flist.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,78 +1,78 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying list orders in orders tab of user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Flist.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-\r\n-$query_orders = $profile->query_orders( array( 'fields' => 'ids' ) );\r\n-if ( ! $query_orders->get_items() ) {\r\n-\tTemplate::print_message( __( 'No orders!', 'learnpress' ), 'info' );\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Ch3 class=\"profile-heading\">\u003C?php esc_html_e( 'My Orders', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\u003Ctable class=\"lp-list-table profile-list-orders profile-list-table\">\r\n-\t\u003Cthead>\r\n-\t\t\u003Ctr class=\"order-row\">\r\n-\t\t\t\u003Cth class=\"column-order-number\">\u003C?php esc_html_e( 'Order', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"column-order-total\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"column-order-status\">\u003C?php esc_html_e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"column-order-date\">\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\u003Cth class=\"column-order-actions\">\u003C?php esc_html_e( 'Actions', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Fthead>\r\n-\r\n-\t\u003Ctbody>\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $query_orders->get_items() as $order_id ) {\r\n-\t\t\t$order = learn_press_get_order( $order_id );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Ctr class=\"order-row\">\r\n-\t\t\t\t\u003Ctd class=\"column-order-number\">\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_html( $order->get_view_order_url() ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo esc_html( $order->get_order_number() ); ?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"column-order-total\">\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"column-order-status\">\r\n-\t\t\t\t\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $order->get_status() ); ?>\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\r\n-\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"column-order-date\">\u003C?php echo esc_html( $order->get_order_date() ); ?>\u003C\u002Ftd>\r\n-\t\t\t\t\u003Ctd class=\"column-order-actions\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t$actions = $order->get_profile_order_actions();\r\n-\r\n-\t\t\t\t\tif ( $actions ) {\r\n-\t\t\t\t\t\tforeach ( $actions as $action ) {\r\n-\t\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $action['url'] ), $action['text'] );\r\n-\t\t\t\t\t\t}\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\u003C\u002Ftr>\r\n-\t\t\u003C?php } ?>\r\n-\t\u003C\u002Ftbody>\r\n-\r\n-\t\u003Ctfoot>\r\n-\t\t\u003Ctr class=\"list-table-nav\">\r\n-\t\t\t\u003Ctd colspan=\"3\" class=\"nav-text\">\u003C?php echo esc_html( $query_orders->get_offset_text() ); ?>\u003C\u002Ftd>\r\n-\t\t\t\u003Ctd colspan=\"2\" class=\"nav-pages\">\u003C?php $query_orders->get_nav_numbers( true ); ?>\u003C\u002Ftd>\r\n-\t\t\u003C\u002Ftr>\r\n-\t\u003C\u002Ftfoot>\r\n-\u003C\u002Ftable>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying list orders in orders tab of user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Flist.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+\n+$query_orders = $profile->query_orders( array( 'fields' => 'ids' ) );\n+if ( ! $query_orders->get_items() ) {\n+\tTemplate::print_message( __( 'No orders!', 'learnpress' ), 'info' );\n+\treturn;\n+}\n+?>\n+\n+\u003Ch3 class=\"profile-heading\">\u003C?php esc_html_e( 'My Orders', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\u003Ctable class=\"lp-list-table profile-list-orders profile-list-table\">\n+\t\u003Cthead>\n+\t\t\u003Ctr class=\"order-row\">\n+\t\t\t\u003Cth class=\"column-order-number\">\u003C?php esc_html_e( 'Order', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"column-order-total\">\u003C?php esc_html_e( 'Total', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"column-order-status\">\u003C?php esc_html_e( 'Status', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"column-order-date\">\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\u003Cth class=\"column-order-actions\">\u003C?php esc_html_e( 'Actions', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Fthead>\n+\n+\t\u003Ctbody>\n+\t\t\u003C?php\n+\t\tforeach ( $query_orders->get_items() as $order_id ) {\n+\t\t\t$order = learn_press_get_order( $order_id );\n+\t\t\t?>\n+\n+\t\t\t\u003Ctr class=\"order-row\">\n+\t\t\t\t\u003Ctd class=\"column-order-number\">\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_html( $order->get_view_order_url() ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo esc_html( $order->get_order_number() ); ?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"column-order-total\">\u003C?php echo esc_html( $order->get_formatted_order_total() ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"column-order-status\">\n+\t\t\t\t\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $order->get_status() ); ?>\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $order->get_order_status_html() ); ?>\n+\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"column-order-date\">\u003C?php echo esc_html( $order->get_order_date() ); ?>\u003C\u002Ftd>\n+\t\t\t\t\u003Ctd class=\"column-order-actions\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\t$actions = $order->get_profile_order_actions();\n+\n+\t\t\t\t\tif ( $actions ) {\n+\t\t\t\t\t\tforeach ( $actions as $action ) {\n+\t\t\t\t\t\t\tprintf( '\u003Ca href=\"%s\">%s\u003C\u002Fa>', esc_url_raw( $action['url'] ), $action['text'] );\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\u003C\u002Ftr>\n+\t\t\u003C?php } ?>\n+\t\u003C\u002Ftbody>\n+\n+\t\u003Ctfoot>\n+\t\t\u003Ctr class=\"list-table-nav\">\n+\t\t\t\u003Ctd colspan=\"3\" class=\"nav-text\">\u003C?php echo esc_html( $query_orders->get_offset_text() ); ?>\u003C\u002Ftd>\n+\t\t\t\u003Ctd colspan=\"2\" class=\"nav-pages\">\u003C?php $query_orders->get_nav_numbers( true ); ?>\u003C\u002Ftd>\n+\t\t\u003C\u002Ftr>\n+\t\u003C\u002Ftfoot>\n+\u003C\u002Ftable>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Forder-message.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- * @deprecated 4.2.6.4\r\n- *\u002F\r\n-return;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $order ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$profile = LP_Profile::instance();\r\n-?>\r\n-\r\n-\u003C?php if ( $order->get_user_id() != get_current_user_id() ) : ?>\r\n-\t\u003Cp>\u003C?php printf( __( 'This order is paid for %s', 'learnpress' ), $order->get_user_email() ); ?>\u003C\u002Fp>\r\n-\u003C?php else : ?>\r\n-\t\u003C?php $checkout_email = $order->get_checkout_email(); ?>\r\n-\t\u003C?php if ( $checkout_email && $checkout_email != $profile->get_user()->get_email() ) : ?>\r\n-\t\t\u003Cp>\u003C?php printf( __( 'This order is paid by %s', 'learnpress' ), $order->get_checkout_email() ); ?>\u003C\u002Fp>\r\n-\t\u003C?php endif; ?>\r\n-\u003C?php endif; ?>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ * @deprecated 4.2.6.4\n+ *\u002F\n+return;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $order ) ) {\n+\treturn;\n+}\n+\n+$profile = LP_Profile::instance();\n+?>\n+\n+\u003C?php if ( $order->get_user_id() != get_current_user_id() ) : ?>\n+\t\u003Cp>\u003C?php printf( __( 'This order is paid for %s', 'learnpress' ), $order->get_user_email() ); ?>\u003C\u002Fp>\n+\u003C?php else : ?>\n+\t\u003C?php $checkout_email = $order->get_checkout_email(); ?>\n+\t\u003C?php if ( $checkout_email && $checkout_email != $profile->get_user()->get_email() ) : ?>\n+\t\t\u003Cp>\u003C?php printf( __( 'This order is paid by %s', 'learnpress' ), $order->get_checkout_email() ); ?>\u003C\u002Fp>\n+\t\u003C?php endif; ?>\n+\u003C?php endif; ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-my-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-my-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-my-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-my-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying form allow user get back their order by the key in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Frecover-my-order.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003C?php if ( isset( $order ) && is_a( $order, 'LP_Order' ) ) : ?>\r\n-\t\u003C?php if ( $order->is_guest() ) : ?>\r\n-\t\t\u003Cdiv class=\"profile-recover-order\">\r\n-\t\t\t\u003Cp>\u003C?php esc_html_e( 'This order was checked out by you but there is no user was assigned to.' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cp>\u003C?php esc_html_e( 'If the order is made for another one, you can send the code below to them.' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003Cp>\u003C?php esc_html_e( 'If the order is made for yourself, you can assign it to you here.' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C?php learn_press_get_template( 'order\u002Frecover-form.php', array( 'order' => $order ) ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php\r\n-\tendif;\r\n-endif;\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying form allow user get back their order by the key in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Frecover-my-order.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003C?php if ( isset( $order ) && is_a( $order, 'LP_Order' ) ) : ?>\n+\t\u003C?php if ( $order->is_guest() ) : ?>\n+\t\t\u003Cdiv class=\"profile-recover-order\">\n+\t\t\t\u003Cp>\u003C?php esc_html_e( 'This order was checked out by you but there is no user was assigned to.' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cp>\u003C?php esc_html_e( 'If the order is made for another one, you can send the code below to them.' ); ?>\u003C\u002Fp>\n+\t\t\t\u003Cp>\u003C?php esc_html_e( 'If the order is made for yourself, you can assign it to you here.' ); ?>\u003C\u002Fp>\n+\t\t\t\u003C?php learn_press_get_template( 'order\u002Frecover-form.php', array( 'order' => $order ) ); ?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php\n+\tendif;\n+endif;\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders\u002Frecover-order.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying recover order in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Frecover-order.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"profile-recover-order\">\r\n-\t\u003Cp class=\"recover-order__title\">\u003C?php esc_html_e( 'If you have a valid order key, you can recover it here.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\u003Cp class=\"recover-order__description\">\u003C?php esc_html_e( 'When you checkout as a Guest, an order key will be sent to your email. You can use the order key to create an order.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\r\n-\t\u003C?php learn_press_get_template( 'order\u002Frecover-form.php' ); ?>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying recover order in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Forders\u002Frecover-order.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"profile-recover-order\">\n+\t\u003Cp class=\"recover-order__title\">\u003C?php esc_html_e( 'If you have a valid order key, you can recover it here.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\u003Cp class=\"recover-order__description\">\u003C?php esc_html_e( 'When you checkout as a Guest, an order key will be sent to your email. You can use the order key to create an order.', 'learnpress' ); ?>\u003C\u002Fp>\n+\n+\t\u003C?php learn_press_get_template( 'order\u002Frecover-form.php' ); ?>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Forders.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,18 +1,18 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying orders tab in user profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Forders.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- * @deprecated 4.2.6.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"profile-orders\">\r\n-\t\u003C?php do_action( 'learn-press\u002Fprofile\u002Forders' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying orders tab in user profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Forders.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ * @deprecated 4.2.6.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"profile-orders\">\n+\t\u003C?php do_action( 'learn-press\u002Fprofile\u002Forders' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fquizzes.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fquizzes.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fquizzes.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fquizzes.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,122 +1,122 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying quizzes tab in user profile page.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! LP_Profile::instance()->current_user_can( 'view-tab-quizzes' ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-global $wp;\r\n-\r\n-$profile      = learn_press_get_profile();\r\n-$user_profile = learn_press_get_user( $profile->get_user_data( 'id' ) );\r\n-\r\n-$filter             = new LP_User_Items_Filter();\r\n-$filter->user_id    = $user_profile->get_id();\r\n-$filter->limit      = apply_filters( 'learnpress\u002Fuser\u002Fquizzes\u002Flimit', 5 );\r\n-$filter->status     = LP_Request::get_param( 'filter-status' );\r\n-$filter->graduation = LP_Request::get_param( 'filter-graduation' );\r\n-$query              = $user_profile->get_user_quizzes( $filter );\r\n-$current_filter     = 'all';\r\n-\r\n-if ( ! empty( $filter->status ) ) {\r\n-\t$current_filter = $filter->status;\r\n-} elseif ( ! empty( $filter->graduation ) ) {\r\n-\t$current_filter = $filter->graduation;\r\n-}\r\n-\r\n-$filters = $profile->get_quizzes_filters( $current_filter );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-subtab-content\">\r\n-\t\u003C?php if ( $filters ) : ?>\r\n-\t\u003Cdiv class=\"learn-press-tabs\">\r\n-\t\t\u003Cul class=\"learn-press-filters\">\r\n-\t\t\t\u003C?php foreach ( $filters as $class => $link ) : ?>\r\n-\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $class ); ?>\u003C?php echo esc_attr( $class === $current_filter ? ' active' : '' ); ?>\">\r\n-\t\t\t\t\t\u003C?php echo wp_kses_post( $link ); ?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\t\u003C?php if ( $query->get_items() ) : ?>\r\n-\t\t\u003Ctable class=\"lp-list-table profile-list-quizzes profile-list-table\">\r\n-\t\t\t\u003Cthead>\r\n-\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\u003Cth class=\"column-quiz\">\u003C?php esc_html_e( 'Quiz', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-status\">\u003C?php esc_html_e( 'Result', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-time-interval\">\u003C?php esc_html_e( 'Time spent', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\t\u003Cth class=\"column-date\">\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Fthead>\r\n-\r\n-\t\t\t\u003Ctbody>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * @var LP_User_Item_Quiz $user_quiz\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tforeach ( $query->get_items() as $user_quiz ) :\r\n-\t\t\t\t\t$result_quiz = $user_quiz->get_result();\r\n-\t\t\t\t\t$quiz        = learn_press_get_quiz( $user_quiz->get_id() );\r\n-\t\t\t\t\t$courses     = learn_press_get_item_courses( array( $user_quiz->get_id() ) );\r\n-\t\t\t\t\t?>\r\n-\r\n-\t\t\t\t\t\u003Ctr>\r\n-\t\t\t\t\t\t\u003Ctd class=\"column-quiz column-quiz-\u003C?php echo esc_attr( $user_quiz->get_id() ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\tif ( $courses ) {\r\n-\t\t\t\t\t\t\t\tforeach ( $courses as $course ) {\r\n-\t\t\t\t\t\t\t\t\t$course = LP_Course::get_course( $course->ID );\r\n-\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_item_link( $user_quiz->get_id() ) ); ?>\">\r\n-\t\t\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $quiz->get_title( 'display' ) ); ?>\r\n-\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\r\n-\t\t\t\t\t\t\u003Ctd class=\"column-status\">\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"result-percent\">\u003C?php echo wp_kses_post( $user_quiz->get_percent_result() ); ?>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $user_quiz->get_status() ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( wp_sprintf( '%s', esc_attr( $user_quiz->get_status_label() ) ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003Ctd class=\"column-time-interval\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $user_quiz->get_time_interval( 'display' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\t\u003Ctd class=\"column-date\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $user_quiz->get_start_time( 'i18n' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003C\u002Ftr>\r\n-\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\u003C\u002Ftbody>\r\n-\r\n-\t\t\t\u003Ctfoot>\r\n-\t\t\t\t\u003Ctr class=\"list-table-nav\">\r\n-\t\t\t\t\t\u003Ctd colspan=\"2\" class=\"nav-text\">\r\n-\t\t\t\t\t\t\u003C?php echo wp_kses_post( $query->get_offset_text() ); ?>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\t\u003Ctd colspan=\"2\" class=\"nav-pages\">\r\n-\t\t\t\t\t\t\u003C?php $query->get_nav_numbers(); ?>\r\n-\t\t\t\t\t\u003C\u002Ftd>\r\n-\t\t\t\t\u003C\u002Ftr>\r\n-\t\t\t\u003C\u002Ftfoot>\r\n-\t\t\u003C\u002Ftable>\r\n-\r\n-\t\u003C?php else : ?>\r\n-\t\t\u003C?php Template::print_message( esc_html__( 'No quizzes!', 'learnpress' ), 'info' ); ?>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying quizzes tab in user profile page.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! LP_Profile::instance()->current_user_can( 'view-tab-quizzes' ) ) {\n+\treturn;\n+}\n+\n+global $wp;\n+\n+$profile      = learn_press_get_profile();\n+$user_profile = learn_press_get_user( $profile->get_user_data( 'id' ) );\n+\n+$filter             = new LP_User_Items_Filter();\n+$filter->user_id    = $user_profile->get_id();\n+$filter->limit      = apply_filters( 'learnpress\u002Fuser\u002Fquizzes\u002Flimit', 5 );\n+$filter->status     = LP_Request::get_param( 'filter-status' );\n+$filter->graduation = LP_Request::get_param( 'filter-graduation' );\n+$query              = $user_profile->get_user_quizzes( $filter );\n+$current_filter     = 'all';\n+\n+if ( ! empty( $filter->status ) ) {\n+\t$current_filter = $filter->status;\n+} elseif ( ! empty( $filter->graduation ) ) {\n+\t$current_filter = $filter->graduation;\n+}\n+\n+$filters = $profile->get_quizzes_filters( $current_filter );\n+?>\n+\n+\u003Cdiv class=\"learn-press-subtab-content\">\n+\t\u003C?php if ( $filters ) : ?>\n+\t\u003Cdiv class=\"learn-press-tabs\">\n+\t\t\u003Cul class=\"learn-press-filters\">\n+\t\t\t\u003C?php foreach ( $filters as $class => $link ) : ?>\n+\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $class ); ?>\u003C?php echo esc_attr( $class === $current_filter ? ' active' : '' ); ?>\">\n+\t\t\t\t\t\u003C?php echo wp_kses_post( $link ); ?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\t\u003C?php if ( $query->get_items() ) : ?>\n+\t\t\u003Ctable class=\"lp-list-table profile-list-quizzes profile-list-table\">\n+\t\t\t\u003Cthead>\n+\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\u003Cth class=\"column-quiz\">\u003C?php esc_html_e( 'Quiz', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-status\">\u003C?php esc_html_e( 'Result', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-time-interval\">\u003C?php esc_html_e( 'Time spent', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\t\u003Cth class=\"column-date\">\u003C?php esc_html_e( 'Date', 'learnpress' ); ?>\u003C\u002Fth>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Fthead>\n+\n+\t\t\t\u003Ctbody>\n+\t\t\t\t\u003C?php\n+\t\t\t\t\u002F**\n+\t\t\t\t * @var LP_User_Item_Quiz $user_quiz\n+\t\t\t\t *\u002F\n+\t\t\t\tforeach ( $query->get_items() as $user_quiz ) :\n+\t\t\t\t\t$result_quiz = $user_quiz->get_result();\n+\t\t\t\t\t$quiz        = learn_press_get_quiz( $user_quiz->get_id() );\n+\t\t\t\t\t$courses     = learn_press_get_item_courses( array( $user_quiz->get_id() ) );\n+\t\t\t\t\t?>\n+\n+\t\t\t\t\t\u003Ctr>\n+\t\t\t\t\t\t\u003Ctd class=\"column-quiz column-quiz-\u003C?php echo esc_attr( $user_quiz->get_id() ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\tif ( $courses ) {\n+\t\t\t\t\t\t\t\tforeach ( $courses as $course ) {\n+\t\t\t\t\t\t\t\t\t$course = LP_Course::get_course( $course->ID );\n+\t\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_item_link( $user_quiz->get_id() ) ); ?>\">\n+\t\t\t\t\t\t\t\t\t\t\u003C?php echo esc_html( $quiz->get_title( 'display' ) ); ?>\n+\t\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\n+\t\t\t\t\t\t\u003Ctd class=\"column-status\">\n+\t\t\t\t\t\t\t\u003Cspan class=\"result-percent\">\u003C?php echo wp_kses_post( $user_quiz->get_percent_result() ); ?>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003Cspan class=\"lp-label label-\u003C?php echo esc_attr( $user_quiz->get_status() ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( wp_sprintf( '%s', esc_attr( $user_quiz->get_status_label() ) ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003Ctd class=\"column-time-interval\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $user_quiz->get_time_interval( 'display' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\t\u003Ctd class=\"column-date\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $user_quiz->get_start_time( 'i18n' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003C\u002Ftr>\n+\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\u003C\u002Ftbody>\n+\n+\t\t\t\u003Ctfoot>\n+\t\t\t\t\u003Ctr class=\"list-table-nav\">\n+\t\t\t\t\t\u003Ctd colspan=\"2\" class=\"nav-text\">\n+\t\t\t\t\t\t\u003C?php echo wp_kses_post( $query->get_offset_text() ); ?>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\t\u003Ctd colspan=\"2\" class=\"nav-pages\">\n+\t\t\t\t\t\t\u003C?php $query->get_nav_numbers(); ?>\n+\t\t\t\t\t\u003C\u002Ftd>\n+\t\t\t\t\u003C\u002Ftr>\n+\t\t\t\u003C\u002Ftfoot>\n+\t\t\u003C\u002Ftable>\n+\n+\t\u003C?php else : ?>\n+\t\t\u003C?php Template::print_message( esc_html__( 'No quizzes!', 'learnpress' ), 'info' ); ?>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsections.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsections.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsections.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsections.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying sections in the top of user profile tab content.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fsections.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-\r\n-\r\n-if ( ! isset( $tab_key, $tab_data ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( empty( $tab_data->get( 'sections' ) ) || ( sizeof( $tab_data->get( 'sections' ) ) \u003C 2 ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$link         = $profile->get_tab_link( $tab_key );\r\n-$unique_group = uniqid( 'course-tab-' );\r\n-$sections     = $tab_data->get( 'sections' );\r\n-$visible_tabs = array();\r\n-$active_tab   = '';\r\n-?>\r\n-\r\n-\u003Cdiv class=\"learn-press-tabs\">\r\n-\t\u003C?php\r\n-\tforeach ( $sections as $section_key => $section_data ) {\r\n-\t\tif ( $profile->is_hidden( $section_data ) ) {\r\n-\t\t\tcontinue;\r\n-\t\t}\r\n-\r\n- \t\t$visible_tabs[] = $section_key;\r\n- \t\t$checked        = '';\r\n-\r\n-\t\tif ( $profile->is_current_section( $section_key, $section_key ) ) {\r\n-\t\t\t$active_tab = $section_key;\r\n-\u002F\u002F\t\t\t$checked    = checked( true, true, false );\r\n-\u002F\u002F\t\t\techo '\u003Cdiv class=\"mb-current-tab\">\u003Clabel>'.esc_html( $section_data['title'] ).'\u003C\u002Flabel>\u003C\u002Fdiv>';\r\n-\t\t}\r\n-\t\t?>\r\n-\t\u003C?php } ?>\r\n-\r\n-\t\u003Cul class=\"learn-press-tabs__nav\" data-tabs=\"\u003C?php echo esc_attr( count( $visible_tabs ) ); ?>\">\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $sections as $section_key => $section_data ) {\r\n-\t\t\tif ( ! in_array( $section_key, $visible_tabs ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$classes = array( 'learn-press-tabs__item', esc_attr( $section_key ) );\r\n-\r\n-\t\t\tif ( $active_tab == $section_key ) {\r\n-\t\t\t\t$classes[] = 'active';\r\n-\t\t\t}\r\n-\r\n-\t\t\t$section_slug = $profile->get_slug( $section_data, $section_key );\r\n-\t\t\t$section_link = $profile->get_tab_link( $tab_key, $section_slug );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $section_link ); ?>\">\u003C?php echo esc_html( $section_data['title'] ); ?>\u003C\u002Fa>\r\n-\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying sections in the top of user profile tab content.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Ftabs\u002Fsections.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+\n+\n+if ( ! isset( $tab_key, $tab_data ) ) {\n+\treturn;\n+}\n+\n+if ( empty( $tab_data->get( 'sections' ) ) || ( sizeof( $tab_data->get( 'sections' ) ) \u003C 2 ) ) {\n+\treturn;\n+}\n+\n+$link         = $profile->get_tab_link( $tab_key );\n+$unique_group = uniqid( 'course-tab-' );\n+$sections     = $tab_data->get( 'sections' );\n+$visible_tabs = array();\n+$active_tab   = '';\n+?>\n+\n+\u003Cdiv class=\"learn-press-tabs\">\n+\t\u003C?php\n+\tforeach ( $sections as $section_key => $section_data ) {\n+\t\tif ( $profile->is_hidden( $section_data ) ) {\n+\t\t\tcontinue;\n+\t\t}\n+\n+ \t\t$visible_tabs[] = $section_key;\n+ \t\t$checked        = '';\n+\n+\t\tif ( $profile->is_current_section( $section_key, $section_key ) ) {\n+\t\t\t$active_tab = $section_key;\n+\u002F\u002F\t\t\t$checked    = checked( true, true, false );\n+\u002F\u002F\t\t\techo '\u003Cdiv class=\"mb-current-tab\">\u003Clabel>'.esc_html( $section_data['title'] ).'\u003C\u002Flabel>\u003C\u002Fdiv>';\n+\t\t}\n+\t\t?>\n+\t\u003C?php } ?>\n+\n+\t\u003Cul class=\"learn-press-tabs__nav\" data-tabs=\"\u003C?php echo esc_attr( count( $visible_tabs ) ); ?>\">\n+\t\t\u003C?php\n+\t\tforeach ( $sections as $section_key => $section_data ) {\n+\t\t\tif ( ! in_array( $section_key, $visible_tabs ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$classes = array( 'learn-press-tabs__item', esc_attr( $section_key ) );\n+\n+\t\t\tif ( $active_tab == $section_key ) {\n+\t\t\t\t$classes[] = 'active';\n+\t\t\t}\n+\n+\t\t\t$section_slug = $profile->get_slug( $section_data, $section_key );\n+\t\t\t$section_link = $profile->get_tab_link( $tab_key, $section_slug );\n+\t\t\t?>\n+\n+\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\n+\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $section_link ); ?>\">\u003C?php echo esc_html( $section_data['title'] ); ?>\u003C\u002Fa>\n+\t\t\t\u003C\u002Fli>\n+\n+\t\t\u003C?php } ?>\n+\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Favatar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user avatar editor for changing avatar in user profile.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Favatar.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-$profile   = LP_Profile::instance();\r\n-if ( ! $profile ) {\r\n-\treturn;\r\n-}\r\n-$image_url = $profile->get_upload_profile_src();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learnpress-avatar-upload\">\r\n-\t\u003Cdiv class=\"learnpress_avatar\">\r\n-\t\t\u003Cdiv class=\"learnpress_avatar__cropper \u003C?php echo esc_attr( $image_url ? '' : 'lp-hidden' ); ?>\">\r\n-\t\t\t\u003Cimg class=\"learnpress-avatar-image\" src=\"\u003C?php echo esc_attr( $image_url ); ?>\" alt=\"\">\r\n-\t\t\t\u003Cdiv>\r\n-\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--replace\">\u003C?php esc_html_e( 'Replace', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--remove \">\u003C?php esc_html_e( 'Remove', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--save \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--cancel \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\u003C?php esc_html_e( 'Cancel', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cform class=\"learnpress-avatar-form \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\r\n-\t\t\t\u003Cdiv class=\"learnpress_avatar__form\">\r\n-\t\t\t\t\u003Cdiv class=\"learnpress_avatar__form-group\">\r\n-\t\t\t\t\t\u003Clabel for=\"avatar-file\">\r\n-\t\t\t\t\t\t\u003Cdiv class=\"learnpress_avatar__form__upload\">\r\n-\t\t\t\t\t\t\t\u003Cdiv>\u003Cspan>\u003Csvg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"plus\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\r\n-\t\t\t\t\t\t\t\t\u003Cpath d=\"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\">\u003C\u002Fpath>\r\n-\t\t\t\t\t\t\t\t\u003Cpath d=\"M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z\">\u003C\u002Fpath>\r\n-\t\t\t\t\t\t\t\u003C\u002Fsvg>\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003Cinput type=\"file\" id=\"avatar-file\" accept=\"image\u002F*\">\r\n-\t\t\t\t\u003C\u002Flabel>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fform>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user avatar editor for changing avatar in user profile.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Favatar.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+$profile   = LP_Profile::instance();\n+if ( ! $profile ) {\n+\treturn;\n+}\n+$image_url = $profile->get_upload_profile_src();\n+?>\n+\n+\u003Cdiv id=\"learnpress-avatar-upload\">\n+\t\u003Cdiv class=\"learnpress_avatar\">\n+\t\t\u003Cdiv class=\"learnpress_avatar__cropper \u003C?php echo esc_attr( $image_url ? '' : 'lp-hidden' ); ?>\">\n+\t\t\t\u003Cimg class=\"learnpress-avatar-image\" src=\"\u003C?php echo esc_attr( $image_url ); ?>\" alt=\"\">\n+\t\t\t\u003Cdiv>\n+\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--replace\">\u003C?php esc_html_e( 'Replace', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--remove \">\u003C?php esc_html_e( 'Remove', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--save \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\t\u003Cbutton class=\"learnpress_avatar__button lp-button learnpress_avatar__button--cancel \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\u003C?php esc_html_e( 'Cancel', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cform class=\"learnpress-avatar-form \u003C?php echo esc_attr( $image_url ? 'lp-hidden' : '' ); ?>\">\n+\t\t\t\u003Cdiv class=\"learnpress_avatar__form\">\n+\t\t\t\t\u003Cdiv class=\"learnpress_avatar__form-group\">\n+\t\t\t\t\t\u003Clabel for=\"avatar-file\">\n+\t\t\t\t\t\t\u003Cdiv class=\"learnpress_avatar__form__upload\">\n+\t\t\t\t\t\t\t\u003Cdiv>\u003Cspan>\u003Csvg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"plus\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\n+\t\t\t\t\t\t\t\t\u003Cpath d=\"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\t\t\u003Cpath d=\"M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z\">\u003C\u002Fpath>\n+\t\t\t\t\t\t\t\u003C\u002Fsvg>\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\u003Cdiv>\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003Cinput type=\"file\" id=\"avatar-file\" accept=\"image\u002F*\">\n+\t\t\t\t\u003C\u002Flabel>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fform>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fbasic-information.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fbasic-information.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fbasic-information.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fbasic-information.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,106 +1,106 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying editing basic information form of user in profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fbasic-information.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-\r\n-if ( ! isset( $section ) ) {\r\n-\t$section = 'basic-information';\r\n-}\r\n-\r\n-$user = $profile->get_user();\r\n-?>\r\n-\r\n-\u003Cform method=\"post\" id=\"learn-press-profile-basic-information\" name=\"profile-basic-information\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-basic-information-fields', $profile ); ?>\r\n-\r\n-\t\u003Cul class=\"form-fields\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbegin-profile-basic-information-fields', $profile ); ?>\r\n-\r\n-\r\n-\t\t\u003Cli class=\"form-field form-field__first-name form-field__50\">\r\n-\t\t\t\u003Clabel for=\"first_name\">\u003C?php esc_html_e( 'First name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"text\" name=\"first_name\" id=\"first_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'first_name' ) ); ?>\" class=\"regular-text\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\r\n-\t\t\t\u003Clabel for=\"last_name\">\u003C?php esc_html_e( 'Last name', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"text\" name=\"last_name\" id=\"last_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'last_name' ) ); ?>\" class=\"regular-text\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\r\n-\t\t\t\u003Clabel for=\"account_display_name\">\u003C?php esc_html_e( 'Display name', 'learnpress' ); ?>\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"text\" name=\"account_display_name\" id=\"account_display_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'display_name' ) ); ?>\" class=\"regular-text\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\r\n-\t\t\t\u003Clabel for=\"account_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"email\" name=\"account_email\" id=\"account_email\" value=\"\u003C?php echo esc_attr( $user->get_data( 'email' ) ); ?>\" class=\"regular-text\">\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003Cli class=\"form-field form-field__bio form-field__clear\">\r\n-\t\t\t\u003Clabel for=\"description\">\u003C?php esc_html_e( 'Biographical Info', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\techo sprintf(\r\n-\t\t\t\t\t'%s%s%s',\r\n-\t\t\t\t\t'\u003Ctextarea name=\"description\" id=\"description\" rows=\"5\" cols=\"30\">',\r\n-\t\t\t\t\tesc_html( $user->get_data( 'description' ) ),\r\n-\t\t\t\t\t'\u003C\u002Ftextarea>'\r\n-\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Share a little biographical information to fill out your profile. This may be shown publicly.', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003C?php\r\n-\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info-custom', $profile );\r\n-\r\n-\t\t\u002F\u002F Social button.\r\n-\t\t$socials = learn_press_get_user_extra_profile_info( $user->get_id() );\r\n-\t\tif ( $socials ) {\r\n-\t\t\tforeach ( $socials as $k => $v ) {\r\n-\t\t\t\t\u002F*if ( ! learn_press_is_social_profile( $k ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}*\u002F\r\n-\t\t\t\t?>\r\n-\r\n-\t\t\t\t\u003Cli class=\"form-field form-field__profile-social form-field__50 form-field__\u003C?php echo esc_attr( $k ); ?>\">\r\n-\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo learn_press_social_profile_name( $k ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\t\t\u003Cinput type=\"text\" value=\"\u003C?php echo esc_attr( $v ); ?>\" name=\"user_profile_social[\u003C?php echo esc_attr( $k ); ?>]\" placeholder=\"https:\u002F\u002F\">\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t}\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-basic-information-fields', $profile ); ?>\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-profile-basic-information-fields', $profile ); ?>\r\n-\r\n-\t\u003Cp>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"save-profile-basic-information\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-basic-information' ); ?>\"\u002F>\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003Cbutton class=\"lp-button\" type=\"submit\" name=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying editing basic information form of user in profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fbasic-information.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+\n+if ( ! isset( $section ) ) {\n+\t$section = 'basic-information';\n+}\n+\n+$user = $profile->get_user();\n+?>\n+\n+\u003Cform method=\"post\" id=\"learn-press-profile-basic-information\" name=\"profile-basic-information\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-basic-information-fields', $profile ); ?>\n+\n+\t\u003Cul class=\"form-fields\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbegin-profile-basic-information-fields', $profile ); ?>\n+\n+\n+\t\t\u003Cli class=\"form-field form-field__first-name form-field__50\">\n+\t\t\t\u003Clabel for=\"first_name\">\u003C?php esc_html_e( 'First name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"text\" name=\"first_name\" id=\"first_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'first_name' ) ); ?>\" class=\"regular-text\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\n+\t\t\t\u003Clabel for=\"last_name\">\u003C?php esc_html_e( 'Last name', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"text\" name=\"last_name\" id=\"last_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'last_name' ) ); ?>\" class=\"regular-text\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\n+\t\t\t\u003Clabel for=\"account_display_name\">\u003C?php esc_html_e( 'Display name', 'learnpress' ); ?>\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"text\" name=\"account_display_name\" id=\"account_display_name\" value=\"\u003C?php echo esc_attr( $user->get_data( 'display_name' ) ); ?>\" class=\"regular-text\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field form-field__last-name form-field__50\">\n+\t\t\t\u003Clabel for=\"account_email\">\u003C?php esc_html_e( 'Email address', 'learnpress' ); ?>\u003Cspan class=\"required\">*\u003C\u002Fspan>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"email\" name=\"account_email\" id=\"account_email\" value=\"\u003C?php echo esc_attr( $user->get_data( 'email' ) ); ?>\" class=\"regular-text\">\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003Cli class=\"form-field form-field__bio form-field__clear\">\n+\t\t\t\u003Clabel for=\"description\">\u003C?php esc_html_e( 'Biographical Info', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003C?php\n+\t\t\t\techo sprintf(\n+\t\t\t\t\t'%s%s%s',\n+\t\t\t\t\t'\u003Ctextarea name=\"description\" id=\"description\" rows=\"5\" cols=\"30\">',\n+\t\t\t\t\tesc_html( $user->get_data( 'description' ) ),\n+\t\t\t\t\t'\u003C\u002Ftextarea>'\n+\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\t\u003Cp class=\"description\">\u003C?php esc_html_e( 'Share a little biographical information to fill out your profile. This may be shown publicly.', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003C?php\n+\t\tdo_action( 'learn-press\u002Fprofile\u002Flayout\u002Fgeneral-info-custom', $profile );\n+\n+\t\t\u002F\u002F Social button.\n+\t\t$socials = learn_press_get_user_extra_profile_info( $user->get_id() );\n+\t\tif ( $socials ) {\n+\t\t\tforeach ( $socials as $k => $v ) {\n+\t\t\t\t\u002F*if ( ! learn_press_is_social_profile( $k ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}*\u002F\n+\t\t\t\t?>\n+\n+\t\t\t\t\u003Cli class=\"form-field form-field__profile-social form-field__50 form-field__\u003C?php echo esc_attr( $k ); ?>\">\n+\t\t\t\t\t\u003Clabel for=\"description\">\u003C?php echo learn_press_social_profile_name( $k ); ?>\u003C\u002Flabel>\n+\t\t\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\t\t\u003Cinput type=\"text\" value=\"\u003C?php echo esc_attr( $v ); ?>\" name=\"user_profile_social[\u003C?php echo esc_attr( $k ); ?>]\" placeholder=\"https:\u002F\u002F\">\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\t\u003C?php\n+\t\t\t}\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-basic-information-fields', $profile ); ?>\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-profile-basic-information-fields', $profile ); ?>\n+\n+\t\u003Cp>\n+\t\t\u003Cinput type=\"hidden\" name=\"save-profile-basic-information\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-basic-information' ); ?>\"\u002F>\n+\t\u003C\u002Fp>\n+\n+\t\u003Cbutton class=\"lp-button\" type=\"submit\" name=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fchange-password.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fchange-password.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fchange-password.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fchange-password.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying change password form in profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fchange-password.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-\r\n-if ( ! isset( $section ) ) {\r\n-\t$section = 'change-password';\r\n-}\r\n-?>\r\n-\r\n-\u003Cform method=\"post\" name=\"profile-change-password\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-change-password-fields', $profile ); ?>\r\n-\r\n-\t\u003Cul class=\"form-fields\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbegin-profile-change-password-fields', $profile ); ?>\r\n-\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"pass0\">\u003C?php esc_html_e( 'Current password', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"password\" id=\"pass0\" name=\"pass0\" autocomplete=\"off\" class=\"regular-text\"\u002F>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"pass1\">\u003C?php esc_html_e( 'New password', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput type=\"password\" name=\"pass1\" id=\"pass1\" class=\"regular-text\" value=\"\"\u002F>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\u003Clabel for=\"pass2\">\u003C?php esc_html_e( 'Confirm new password', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\u003Cinput name=\"pass2\" type=\"password\" id=\"pass2\" class=\"regular-text\" value=\"\"\u002F>\r\n-\t\t\t\t\u003Cp id=\"lp-password-not-match\" class=\"description lp-field-error-message hide-if-js\">\u003C?php esc_html_e( 'The new password does not match!', 'learnpress' ); ?>\u003C\u002Fp>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-change-password-fields', $profile ); ?>\r\n-\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-profile-change-password-fields', $profile ); ?>\r\n-\r\n-\t\u003Cp>\r\n-\t\t\u003Cinput type=\"hidden\" name=\"save-profile-password\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-password' ); ?>\">\r\n-\t\u003C\u002Fp>\r\n-\r\n-\t\u003Cbutton class=\"lp-button\" type=\"submit\" name=\"submit\" id=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying change password form in profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fchange-password.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+\n+if ( ! isset( $section ) ) {\n+\t$section = 'change-password';\n+}\n+?>\n+\n+\u003Cform method=\"post\" name=\"profile-change-password\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-change-password-fields', $profile ); ?>\n+\n+\t\u003Cul class=\"form-fields\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbegin-profile-change-password-fields', $profile ); ?>\n+\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"pass0\">\u003C?php esc_html_e( 'Current password', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"password\" id=\"pass0\" name=\"pass0\" autocomplete=\"off\" class=\"regular-text\"\u002F>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"pass1\">\u003C?php esc_html_e( 'New password', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput type=\"password\" name=\"pass1\" id=\"pass1\" class=\"regular-text\" value=\"\"\u002F>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\t\t\u003Cli class=\"form-field\">\n+\t\t\t\u003Clabel for=\"pass2\">\u003C?php esc_html_e( 'Confirm new password', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\u003Cinput name=\"pass2\" type=\"password\" id=\"pass2\" class=\"regular-text\" value=\"\"\u002F>\n+\t\t\t\t\u003Cp id=\"lp-password-not-match\" class=\"description lp-field-error-message hide-if-js\">\u003C?php esc_html_e( 'The new password does not match!', 'learnpress' ); ?>\u003C\u002Fp>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-change-password-fields', $profile ); ?>\n+\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-profile-change-password-fields', $profile ); ?>\n+\n+\t\u003Cp>\n+\t\t\u003Cinput type=\"hidden\" name=\"save-profile-password\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-password' ); ?>\">\n+\t\u003C\u002Fp>\n+\n+\t\u003Cbutton class=\"lp-button\" type=\"submit\" name=\"submit\" id=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fcover-image.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fcover-image.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fcover-image.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fcover-image.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,25 +1,25 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user avatar editor for changing avatar in user profile.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Favatar.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-$profile   = LP_Profile::instance();\r\n-$image_url = $profile->get_cover_image_src();\r\n-?>\r\n-\u003Cdiv id=\"lp-cover-image-upload\" class=\"learnpress-page\">\r\n-\t\u003Cdiv class=\"lp-cover-image-wrapper\">\r\n-\t\t\u003Cimg src=\"\u003C?php esc_attr_e( $image_url ); ?>\" id=\"lp-cover-image\" \u002F>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"lp-upload-button-wrapper\">\r\n-\t\t\u003Cinput id=\"lp-cover-image-file\" type=\"file\" name=\"lp-cover-image\" accept=\"image\u002Fpng, image\u002Fjpeg, image\u002Fwebp\" hidden \u002F>\r\n-\t\t\u003Cbutton id=\"lp-upload-cover-image\" class=\"lp-button\">\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton id=\"lp-save-cover-image\" class=\"lp-button\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\t\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user avatar editor for changing avatar in user profile.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Favatar.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+$profile   = LP_Profile::instance();\n+$image_url = $profile->get_cover_image_src();\n+?>\n+\u003Cdiv id=\"lp-cover-image-upload\" class=\"learnpress-page\">\n+\t\u003Cdiv class=\"lp-cover-image-wrapper\">\n+\t\t\u003Cimg src=\"\u003C?php esc_attr_e( $image_url ); ?>\" id=\"lp-cover-image\" \u002F>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"lp-upload-button-wrapper\">\n+\t\t\u003Cinput id=\"lp-cover-image-file\" type=\"file\" name=\"lp-cover-image\" accept=\"image\u002Fpng, image\u002Fjpeg, image\u002Fwebp\" hidden \u002F>\n+\t\t\u003Cbutton id=\"lp-upload-cover-image\" class=\"lp-button\">\u003C?php esc_html_e( 'Upload', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\t\u003Cbutton id=\"lp-save-cover-image\" class=\"lp-button\">\u003C?php esc_html_e( 'Save', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\t\u003C\u002Fdiv>\n \u003C\u002Fdiv>\n\\ No newline at end of file\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fprivacy.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fprivacy.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fprivacy.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fsettings\u002Fprivacy.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,53 +1,53 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying change password form in profile page.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fchange-password.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$profile = LP_Profile::instance();\r\n-$privacy = $profile->get_privacy_settings();\r\n-?>\r\n-\r\n-\u003Cform method=\"post\" name=\"profile-privacy\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-privacy-fields', $profile ); ?>\r\n-\r\n-\t\u003Cul class=\"form-fields\">\r\n-\r\n-\t\t\u003C?php\r\n-\t\tdo_action( 'learn-press\u002Fbegin-profile-privacy-fields', $profile );\r\n-\r\n-\t\tforeach ( $privacy as $item ) {\r\n-\t\t\t?>\r\n-\t\t\t\u003Cli class=\"form-field\">\r\n-\t\t\t\t\u003Clabel for=\"privacy-\u003C?php echo esc_attr( $item['id'] ); ?>\">\u003C?php echo esc_html( $item['name'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003Cdiv class=\"form-field-input\">\r\n-\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"privacy[\u003C?php echo esc_attr( $item['id'] ); ?>]\" value=\"no\"\u002F>\r\n-\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"privacy[\u003C?php echo esc_attr( $item['id'] ); ?>]\" value=\"yes\" id=\"privacy-\u003C?php echo esc_attr( $item['id'] ); ?>\" \u003C?php checked( $profile->get_privacy( $item['id'] ), 'yes' ); ?>\u002F>\r\n-\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $item['description'] ) ) : ?>\r\n-\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php echo esc_html( $item['description'] ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php\r\n-\t\t}\r\n-\t\t?>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-privacy-fields', $profile ); ?>\r\n-\r\n-\t\u003C\u002Ful>\r\n-\t\u003Cinput type=\"hidden\" name=\"save-profile-privacy\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-privacy' ); ?>\"\u002F>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-profile-privacy-fields', $profile ); ?>\r\n-\r\n-\t\u003Cbutton type=\"submit\" name=\"submit\" id=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\r\n-\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying change password form in profile page.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsettings\u002Ftabs\u002Fchange-password.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$profile = LP_Profile::instance();\n+$privacy = $profile->get_privacy_settings();\n+?>\n+\n+\u003Cform method=\"post\" name=\"profile-privacy\" enctype=\"multipart\u002Fform-data\" class=\"learn-press-form\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-privacy-fields', $profile ); ?>\n+\n+\t\u003Cul class=\"form-fields\">\n+\n+\t\t\u003C?php\n+\t\tdo_action( 'learn-press\u002Fbegin-profile-privacy-fields', $profile );\n+\n+\t\tforeach ( $privacy as $item ) {\n+\t\t\t?>\n+\t\t\t\u003Cli class=\"form-field\">\n+\t\t\t\t\u003Clabel for=\"privacy-\u003C?php echo esc_attr( $item['id'] ); ?>\">\u003C?php echo esc_html( $item['name'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003Cdiv class=\"form-field-input\">\n+\t\t\t\t\t\u003Cinput type=\"hidden\" name=\"privacy[\u003C?php echo esc_attr( $item['id'] ); ?>]\" value=\"no\"\u002F>\n+\t\t\t\t\t\u003Cinput type=\"checkbox\" name=\"privacy[\u003C?php echo esc_attr( $item['id'] ); ?>]\" value=\"yes\" id=\"privacy-\u003C?php echo esc_attr( $item['id'] ); ?>\" \u003C?php checked( $profile->get_privacy( $item['id'] ), 'yes' ); ?>\u002F>\n+\n+\t\t\t\t\t\u003C?php if ( ! empty( $item['description'] ) ) : ?>\n+\t\t\t\t\t\t\u003Cp class=\"description\">\u003C?php echo esc_html( $item['description'] ); ?>\u003C\u002Fp>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php\n+\t\t}\n+\t\t?>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fend-profile-privacy-fields', $profile ); ?>\n+\n+\t\u003C\u002Ful>\n+\t\u003Cinput type=\"hidden\" name=\"save-profile-privacy\" value=\"\u003C?php echo wp_create_nonce( 'learn-press-save-profile-privacy' ); ?>\"\u002F>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-profile-privacy-fields', $profile ); ?>\n+\n+\t\u003Cbutton type=\"submit\" name=\"submit\" id=\"submit\">\u003C?php esc_html_e( 'Save changes', 'learnpress' ); ?>\u003C\u002Fbutton>\n+\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Finstructor-statistics.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying instructor statistic in user profile overview.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( empty( $data ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$html_wrapper = apply_filters(\r\n-\t'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics\u002Fwrapper',\r\n-\t[\r\n-\t\t'\u003Cdiv id=\"dashboard-statistic\">'         => '\u003C\u002Fdiv>',\r\n-\t\t'\u003Cdiv class=\"dashboard-statistic__row\">' => '\u003C\u002Fdiv>',\r\n-\t]\r\n-);\r\n-\r\n-ob_start();\r\n-do_action( 'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics', $data );\r\n-$inner_html = ob_get_clean();\r\n-echo Template::instance()->nest_elements( $html_wrapper, $inner_html );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying instructor statistic in user profile overview.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 1.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( empty( $data ) ) {\n+\treturn;\n+}\n+\n+$html_wrapper = apply_filters(\n+\t'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics\u002Fwrapper',\n+\t[\n+\t\t'\u003Cdiv id=\"dashboard-statistic\">'         => '\u003C\u002Fdiv>',\n+\t\t'\u003Cdiv class=\"dashboard-statistic__row\">' => '\u003C\u002Fdiv>',\n+\t]\n+);\n+\n+ob_start();\n+do_action( 'learn-press\u002Fprofile\u002Flayout\u002Finstructor-statistics', $data );\n+$inner_html = ob_get_clean();\n+echo Template::instance()->nest_elements( $html_wrapper, $inner_html );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fitem-count.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying count item.\r\n- *\r\n- * @since 4.2.3\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-if ( ! defined( 'ABSPATH' ) ) {\r\n-\texit;\r\n-}\r\n-\r\n-if ( ! isset( $data ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-foreach ( $data as $key => $item ) {\r\n- \t?>\r\n-\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php echo esc_attr( $item['title'] ?? '' ); ?>\">\r\n-\t\t\u003Cdiv class=\"statistic-box__icon\">\r\n-\t\t\t\u003Cspan class=\"lp-icon-\u003C?php echo esc_attr($key) ?>\">\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003Cdiv class=\"statistic-box__text\">\r\n-\t\t\t\u003Clabel>\u003C?php echo esc_html( $item['label'] ?? '' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003Cspan class=\"statistic-box__text__number\">\u003C?php echo esc_html( $item['count'] ?? 0 ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying count item.\n+ *\n+ * @since 4.2.3\n+ * @version 1.0.0\n+ *\u002F\n+\n+if ( ! defined( 'ABSPATH' ) ) {\n+\texit;\n+}\n+\n+if ( ! isset( $data ) ) {\n+\treturn;\n+}\n+\n+foreach ( $data as $key => $item ) {\n+ \t?>\n+\t\u003Cdiv class=\"statistic-box\" title=\"\u003C?php echo esc_attr( $item['title'] ?? '' ); ?>\">\n+\t\t\u003Cdiv class=\"statistic-box__icon\">\n+\t\t\t\u003Cspan class=\"lp-icon-\u003C?php echo esc_attr($key) ?>\">\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003Cdiv class=\"statistic-box__text\">\n+\t\t\t\u003Clabel>\u003C?php echo esc_html( $item['label'] ?? '' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003Cspan class=\"statistic-box__text__number\">\u003C?php echo esc_html( $item['count'] ?? 0 ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs\u002Fstatistics\u002Fstudent-statistics.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying student statistic in user profile overview.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Helpers\\Template;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( empty( $data ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$html_wrapper = apply_filters(\r\n-\t'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics\u002Fwrapper',\r\n-\t[\r\n-\t\t'\u003Cdiv id=\"dashboard-statistic\">'         => '\u003C\u002Fdiv>',\r\n-\t\t'\u003Cdiv class=\"dashboard-statistic__row\">' => '\u003C\u002Fdiv>',\r\n-\t]\r\n-);\r\n-\r\n-ob_start();\r\n-do_action( 'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics', $data );\r\n-$inner_html = ob_get_clean();\r\n-echo Template::instance()->nest_elements( $html_wrapper, $inner_html );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying student statistic in user profile overview.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 1.0.0\n+ *\u002F\n+\n+use LearnPress\\Helpers\\Template;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( empty( $data ) ) {\n+\treturn;\n+}\n+\n+$html_wrapper = apply_filters(\n+\t'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics\u002Fwrapper',\n+\t[\n+\t\t'\u003Cdiv id=\"dashboard-statistic\">'         => '\u003C\u002Fdiv>',\n+\t\t'\u003Cdiv class=\"dashboard-statistic__row\">' => '\u003C\u002Fdiv>',\n+\t]\n+);\n+\n+ob_start();\n+do_action( 'learn-press\u002Fprofile\u002Flayout\u002Fstudent-statistics', $data );\n+$inner_html = ob_get_clean();\n+echo Template::instance()->nest_elements( $html_wrapper, $inner_html );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fprofile\u002Ftabs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fprofile\u002Ftabs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,114 +1,116 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user profile tabs.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Ftabs.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Profile $profile\r\n- *\u002F\r\n-if ( ! isset( $user ) || ! isset( $profile ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv id=\"profile-nav\" class=\"profile-nav\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-nav', $profile ); ?>\r\n-\r\n-\t\u003Cul class=\"lp-profile-nav-tabs\">\r\n-\t\t\u003C?php\r\n-\t\t\u002F**\r\n-\t\t * @var LP_Profile_Tab $profile_tab\r\n-\t\t *\u002F\r\n-\t\tforeach ( $profile->get_tabs()->tabs() as $tab_key => $profile_tab ) {\r\n-\t\t\tif ( ! is_object( $profile_tab ) || ! $profile_tab || $profile_tab->is_hidden() || ! $profile->current_user_can( 'view-tab-' . $tab_key ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t\u002F\u002F Admin view another user profile\r\n-\t\t\tif ( $profile->get_user()->get_id() !== $profile->get_user_current()->get_id() && current_user_can( ADMIN_ROLE ) ) {\r\n-\t\t\t\t$tab_key_hidden_admin_view_user = [ 'settings', 'logout', 'orders', 'gradebook' ];\r\n-\t\t\t\tif ( in_array( $tab_key, $tab_key_hidden_admin_view_user ) ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\t\t\t}\r\n-\r\n-\t\t\t$slug        = $profile->get_slug( $profile_tab, $tab_key );\r\n-\t\t\t$link        = $profile->get_tab_link( $tab_key, true );\r\n-\t\t\t$tab_classes = array( esc_attr( $tab_key ) );\r\n-\r\n-\t\t\t$sections = $profile_tab->sections();\r\n-\r\n-\t\t\tif ( $sections && sizeof( $sections ) > 1 ) {\r\n-\t\t\t\t$tab_classes[] = 'has-child';\r\n-\t\t\t}\r\n-\r\n-\t\t\tif ( $profile->is_current_tab( $tab_key ) ) {\r\n-\t\t\t\t$tab_classes[] = 'active';\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cli class=\"\u003C?php echo implode( ' ', $tab_classes ); ?>\">\r\n-\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link ); ?>\" data-slug=\"\u003C?php echo esc_attr( $link ); ?>\">\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tif ( ! empty( $profile_tab->get( 'icon' ) ) ) {\r\n-\t\t\t\t\t\techo wp_kses_post( str_replace(array('fas fa-','fa fa-'),'lp-icon-', $profile_tab->get( 'icon' ) ));\r\n-\t\t\t\t\t}\r\n-\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C?php echo apply_filters( 'learn_press_profile_' . $tab_key . '_tab_title', $profile_tab->get( 'title' ), $tab_key ); ?>\r\n-\t\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\t\u003C?php if ( $sections && sizeof( $sections ) > 1 ) { ?>\r\n-\r\n-\t\t\t\t\t\u003Cul class=\"profile-tab-sections\">\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tforeach ( $sections as $section_key => $section_data ) {\r\n-\r\n-\t\t\t\t\t\t\t$classes = array( esc_attr( $section_key ) );\r\n-\t\t\t\t\t\t\tif ( $profile->is_current_section( $section_key, $section_key ) ) {\r\n-\t\t\t\t\t\t\t\t$classes[] = 'active';\r\n-\t\t\t\t\t\t\t}\r\n-\r\n-\t\t\t\t\t\t\t$section_slug = $profile->get_slug( $section_data, $section_key );\r\n-\t\t\t\t\t\t\t$section_link = $profile->get_tab_link( $tab_key, $section_slug );\r\n-\t\t\t\t\t\t\t?>\r\n-\r\n-\t\t\t\t\t\t\t\u003Cli class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\r\n-\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $section_link ); ?>\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\t\t\t\tif ( ! empty( $section_data['icon'] ) ) {\r\n-\t\t\t\t\t\t\t\t\t\techo wp_kses_post( $section_data['icon'] );\r\n-\t\t\t\t\t\t\t\t\t}\r\n-\t\t\t\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo apply_filters(\r\n-\t\t\t\t\t\t\t\t\t\t'learn_press_profile_' . $tab_key . '_tab_title',\r\n-\t\t\t\t\t\t\t\t\t\t$section_data['title'],\r\n-\t\t\t\t\t\t\t\t\t\t$tab_key,\r\n-\t\t\t\t\t\t\t\t\t\t$section_key,\r\n-\t\t\t\t\t\t\t\t\t\t$section_data\r\n-\t\t\t\t\t\t\t\t\t); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\t\t\t\t\u003C?php } ?>\r\n-\r\n-\t\t\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\t\t\u003C?php } ?>\r\n-\r\n-\t\t\t\u003C\u002Fli>\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\u003C\u002Ful>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-profile-nav', $profile ); ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user profile tabs.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fprofile\u002Ftabs.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.4\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Profile $profile\n+ *\u002F\n+if ( ! isset( $user ) || ! isset( $profile ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv id=\"profile-nav\" class=\"profile-nav\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-profile-nav', $profile ); ?>\n+\n+\t\u003Cul class=\"lp-profile-nav-tabs\">\n+\t\t\u003C?php\n+\t\t\u002F**\n+\t\t * @var LP_Profile_Tab $profile_tab\n+\t\t *\u002F\n+\t\t$tabs = $profile->get_tabs()->tabs();\n+\t\tforeach ( $tabs as $tab_key => $profile_tab ) {\n+\t\t\tif ( ! is_object( $profile_tab ) || ! $profile_tab || $profile_tab->is_hidden() || ! $profile->current_user_can( 'view-tab-' . $tab_key ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t\u002F\u002F Admin view another user profile\n+\t\t\tif ( $profile->get_user()->get_id() !== $profile->get_user_current()->get_id() && current_user_can( ADMIN_ROLE ) ) {\n+\t\t\t\t$tab_key_hidden_admin_view_user = [ 'settings', 'logout', 'orders', 'gradebook' ];\n+\t\t\t\tif ( in_array( $tab_key, $tab_key_hidden_admin_view_user ) ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\t\t\t}\n+\n+\t\t\t$slug        = $profile->get_slug( $profile_tab, $tab_key );\n+\t\t\t$link        = $profile_tab->get( 'link' ) ? $profile_tab->get( 'link' ) : $profile->get_tab_link( $tab_key, true );\n+\t\t\t$target      = $profile_tab->get( 'target' ) ? $profile_tab->get( 'target' ) : '_self';\n+\t\t\t$tab_classes = array( esc_attr( $tab_key ) );\n+\n+\t\t\t$sections = $profile_tab->sections();\n+\n+\t\t\tif ( $sections && sizeof( $sections ) > 1 ) {\n+\t\t\t\t$tab_classes[] = 'has-child';\n+\t\t\t}\n+\n+\t\t\tif ( $profile->is_current_tab( $tab_key ) ) {\n+\t\t\t\t$tab_classes[] = 'active';\n+\t\t\t}\n+\t\t\t?>\n+\n+\t\t\t\u003Cli class=\"\u003C?php echo implode( ' ', $tab_classes ); ?>\">\n+\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $link ); ?>\" data-slug=\"\u003C?php echo esc_attr( $link ); ?>\" target=\"\u003C?php echo esc_attr( $target ); ?>\">\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tif ( ! empty( $profile_tab->get( 'icon' ) ) ) {\n+\t\t\t\t\t\techo wp_kses_post( str_replace(array('fas fa-','fa fa-'),'lp-icon-', $profile_tab->get( 'icon' ) ));\n+\t\t\t\t\t}\n+\t\t\t\t\t?>\n+\t\t\t\t\t\u003C?php echo apply_filters( 'learn_press_profile_' . $tab_key . '_tab_title', $profile_tab->get( 'title' ), $tab_key ); ?>\n+\t\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\t\u003C?php if ( $sections && sizeof( $sections ) > 1 ) { ?>\n+\n+\t\t\t\t\t\u003Cul class=\"profile-tab-sections\">\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tforeach ( $sections as $section_key => $section_data ) {\n+\n+\t\t\t\t\t\t\t$classes = array( esc_attr( $section_key ) );\n+\t\t\t\t\t\t\tif ( $profile->is_current_section( $section_key, $section_key ) ) {\n+\t\t\t\t\t\t\t\t$classes[] = 'active';\n+\t\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\t\t$section_slug = $profile->get_slug( $section_data, $section_key );\n+\t\t\t\t\t\t\t$section_link = $profile->get_tab_link( $tab_key, $section_slug );\n+\t\t\t\t\t\t\t?>\n+\n+\t\t\t\t\t\t\t\u003Cli class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\n+\t\t\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $section_link ); ?>\">\n+\t\t\t\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\t\t\t\tif ( ! empty( $section_data['icon'] ) ) {\n+\t\t\t\t\t\t\t\t\t\techo wp_kses_post( $section_data['icon'] );\n+\t\t\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t\t\t\t?>\n+\t\t\t\t\t\t\t\t\t\u003C?php echo apply_filters(\n+\t\t\t\t\t\t\t\t\t\t'learn_press_profile_' . $tab_key . '_tab_title',\n+\t\t\t\t\t\t\t\t\t\t$section_data['title'],\n+\t\t\t\t\t\t\t\t\t\t$tab_key,\n+\t\t\t\t\t\t\t\t\t\t$section_key,\n+\t\t\t\t\t\t\t\t\t\t$section_data\n+\t\t\t\t\t\t\t\t\t); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\t\t\u003C\u002Fli>\n+\n+\t\t\t\t\t\t\u003C?php } ?>\n+\n+\t\t\t\t\t\u003C\u002Ful>\n+\n+\t\t\t\t\u003C?php } ?>\n+\n+\t\t\t\u003C\u002Fli>\n+\t\t\u003C?php } ?>\n+\n+\t\u003C\u002Ful>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-profile-nav', $profile ); ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fshared\u002Fpagination.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fshared\u002Fpagination.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fshared\u002Fpagination.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fshared\u002Fpagination.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * The template for displaying archive pagination.\r\n- *\r\n- * @version 1.0.0\r\n- * @since 4.2.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $total ) || ! isset( $base )\r\n-\t|| ! isset( $format ) || ! isset( $current ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( $total \u003C= 1 ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\u003Cnav class=\"learn-press-pagination\">\r\n-\t\u003C?php\r\n-\techo paginate_links(\r\n-\t\tapply_filters(\r\n-\t\t\t'learn-press\u002Fpagination_args',\r\n-\t\t\tarray(\r\n-\t\t\t\t'base'      => $base,\r\n-\t\t\t\t'format'    => $format,\r\n-\t\t\t\t'add_args'  => false,\r\n-\t\t\t\t'current'   => max( 1, $current ),\r\n-\t\t\t\t'total'     => $total,\r\n-\t\t\t\t'prev_text' => is_rtl() ? '&rarr;' : '&larr;',\r\n-\t\t\t\t'next_text' => is_rtl() ? '&larr;' : '&rarr;',\r\n-\t\t\t\t'type'      => 'list',\r\n-\t\t\t\t'end_size'  => 3,\r\n-\t\t\t\t'mid_size'  => 3,\r\n-\t\t\t)\r\n-\t\t)\r\n-\t);\r\n-\t?>\r\n-\u003C\u002Fnav>\r\n+\u003C?php\n+\u002F**\n+ * The template for displaying archive pagination.\n+ *\n+ * @version 1.0.0\n+ * @since 4.2.3\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $total ) || ! isset( $base )\n+\t|| ! isset( $format ) || ! isset( $current ) ) {\n+\treturn;\n+}\n+\n+if ( $total \u003C= 1 ) {\n+\treturn;\n+}\n+?>\n+\u003Cnav class=\"learn-press-pagination\">\n+\t\u003C?php\n+\techo paginate_links(\n+\t\tapply_filters(\n+\t\t\t'learn-press\u002Fpagination_args',\n+\t\t\tarray(\n+\t\t\t\t'base'      => $base,\n+\t\t\t\t'format'    => $format,\n+\t\t\t\t'add_args'  => false,\n+\t\t\t\t'current'   => max( 1, $current ),\n+\t\t\t\t'total'     => $total,\n+\t\t\t\t'prev_text' => is_rtl() ? '&rarr;' : '&larr;',\n+\t\t\t\t'next_text' => is_rtl() ? '&larr;' : '&rarr;',\n+\t\t\t\t'type'      => 'list',\n+\t\t\t\t'end_size'  => 3,\n+\t\t\t\t'mid_size'  => 3,\n+\t\t\t)\n+\t\t)\n+\t);\n+\t?>\n+\u003C\u002Fnav>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fshortcode\u002Flist-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fshortcode\u002Flist-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fshortcode\u002Flist-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fshortcode\u002Flist-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying list courses shortcode.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $query ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-?>\r\n-\u003Cdiv class=\"lp-archive-courses\">\r\n-\t\u003Cdiv class=\"lp-content-area\">\r\n-\t\t\u003C?php if ( ! empty( $title ) ) : ?>\r\n-\t\t\t\u003Cheader class=\"learn-press-courses-header\">\r\n-\t\t\t\t\u003Ch1>\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\r\n-\t\t\t\u003C\u002Fheader>\r\n-\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t$posts = $query->posts;\r\n-\t\tif ( count( $posts ) > 0 ) :\r\n-\t\t\techo '\u003Cul class=\"learn-press-courses\" data-layout=\"grid\">';\r\n-\r\n-\t\t\tforeach ( $posts as $post ) {\r\n-\t\t\t\t$course = CourseModel::find( $post->ID, true );\r\n-\t\t\t\tif ( ! $course ) {\r\n-\t\t\t\t\tcontinue;\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\techo ListCoursesTemplate::render_course( $course );\r\n-\t\t\t}\r\n-\r\n-\t\t\techo '\u003C\u002Ful>';\r\n-\t\telse :\r\n-\t\t\t_e( 'No courses', 'learnpress' );\r\n-\t\tendif;\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying list courses shortcode.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.2\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Course\\ListCoursesTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $query ) ) {\n+\treturn;\n+}\n+\n+?>\n+\u003Cdiv class=\"lp-archive-courses\">\n+\t\u003Cdiv class=\"lp-content-area\">\n+\t\t\u003C?php if ( ! empty( $title ) ) : ?>\n+\t\t\t\u003Cheader class=\"learn-press-courses-header\">\n+\t\t\t\t\u003Ch1>\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh1>\n+\t\t\t\u003C\u002Fheader>\n+\t\t\u003C?php endif; ?>\n+\n+\t\t\u003C?php\n+\t\t$posts = $query->posts;\n+\t\tif ( count( $posts ) > 0 ) :\n+\t\t\techo '\u003Cul class=\"learn-press-courses\" data-layout=\"grid\">';\n+\n+\t\t\tforeach ( $posts as $post ) {\n+\t\t\t\t$course = CourseModel::find( $post->ID, true );\n+\t\t\t\tif ( ! $course ) {\n+\t\t\t\t\tcontinue;\n+\t\t\t\t}\n+\n+\t\t\t\techo ListCoursesTemplate::render_course( $course );\n+\t\t\t}\n+\n+\t\t\techo '\u003C\u002Ful>';\n+\t\telse :\n+\t\t\t_e( 'No courses', 'learnpress' );\n+\t\tendif;\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,21 +1,21 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Continue button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$user = learn_press_get_current_user();\r\n-?>\r\n-\r\n-\u003Cform name=\"continue-course\" class=\"continue-course form-button lp-form\" action=\"\" style=\"display:none\">\r\n-\t\u003Cbutton type=\"submit\" class=\"lp-button button\">\r\n-\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fcontinue-course-button-text', esc_html__( 'Continue', 'learnpress' ) ) ); ?>\r\n-\t\u003C\u002Fbutton>\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Continue button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$user = learn_press_get_current_user();\n+?>\n+\n+\u003Cform name=\"continue-course\" class=\"continue-course form-button lp-form\" action=\"\" style=\"display:none\">\n+\t\u003Cbutton type=\"submit\" class=\"lp-button button\">\n+\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fcontinue-course-button-text', esc_html__( 'Continue', 'learnpress' ) ) ); ?>\n+\t\u003C\u002Fbutton>\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fenroll.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fenroll.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fenroll.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fenroll.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Enroll button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fenroll.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) ) {\r\n-\t$course = learn_press_get_course();\r\n-}\r\n-?>\r\n-\r\n-\u003C?php do_action( 'learn-press\u002Fbefore-enroll-form' ); ?>\r\n-\r\n-\u003Cform name=\"enroll-course\" class=\"enroll-course\" method=\"post\" enctype=\"multipart\u002Fform-data\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-enroll-button' ); ?>\r\n-\r\n-\t\u003Cinput type=\"hidden\" name=\"enroll-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\r\n-\r\n-\t\u003Cbutton class=\"lp-button button button-enroll-course\">\r\n-\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fenroll-course-button-text', esc_html__( 'Start Now', 'learnpress' ) ) ); ?>\r\n-\t\u003C\u002Fbutton>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-enroll-button' ); ?>\r\n-\r\n-\u003C\u002Fform>\r\n-\r\n-\u003C?php do_action( 'learn-press\u002Fafter-enroll-form' ); ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Enroll button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fenroll.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) ) {\n+\t$course = learn_press_get_course();\n+}\n+?>\n+\n+\u003C?php do_action( 'learn-press\u002Fbefore-enroll-form' ); ?>\n+\n+\u003Cform name=\"enroll-course\" class=\"enroll-course\" method=\"post\" enctype=\"multipart\u002Fform-data\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-enroll-button' ); ?>\n+\n+\t\u003Cinput type=\"hidden\" name=\"enroll-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\n+\n+\t\u003Cbutton class=\"lp-button button button-enroll-course\">\n+\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fenroll-course-button-text', esc_html__( 'Start Now', 'learnpress' ) ) ); ?>\n+\t\u003C\u002Fbutton>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-enroll-button' ); ?>\n+\n+\u003C\u002Fform>\n+\n+\u003C?php do_action( 'learn-press\u002Fafter-enroll-form' ); ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fexternal-link.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fexternal-link.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fexternal-link.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fexternal-link.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Continue button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cform name=\"course-external-link\" class=\"course-external-link form-button lp-form\" method=\"post\" target=\"_blank\">\r\n-\r\n-\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"external-link\">\r\n-\t\u003Cinput type=\"hidden\" name=\"id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\">\r\n-\t\u003Cinput type=\"hidden\" name=\"nonce\" value=\"\u003C?php echo wp_create_nonce( 'external-link-' . $course->get_external_link() ); ?>\">\r\n-\t\u003Cbutton type=\"submit\" class=\"lp-button button\">\r\n-\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fexternal-course-button-text', esc_html( $course->get_external_link_text() )) ); ?>\r\n- \t\u003C\u002Fbutton>\r\n-\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Continue button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fcontinue.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cform name=\"course-external-link\" class=\"course-external-link form-button lp-form\" method=\"post\" target=\"_blank\">\n+\n+\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"external-link\">\n+\t\u003Cinput type=\"hidden\" name=\"id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\">\n+\t\u003Cinput type=\"hidden\" name=\"nonce\" value=\"\u003C?php echo wp_create_nonce( 'external-link-' . $course->get_external_link() ); ?>\">\n+\t\u003Cbutton type=\"submit\" class=\"lp-button button\">\n+\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fexternal-course-button-text', esc_html( $course->get_external_link_text() )) ); ?>\n+ \t\u003C\u002Fbutton>\n+\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Ffinish.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Ffinish.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Ffinish.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Ffinish.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Finish button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Ffinish.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cform class=\"lp-form form-button form-button-finish-course\" method=\"post\" data-confirm=\"\u003C?php echo LP_Strings::esc_attr( 'confirm-finish-course', '', array( $course->get_title() ) ); ?>\" data-title=\"\u003C?php echo esc_attr__( 'Finish course', 'learnpress' ); ?>\">\r\n-\t\u003Cbutton class=\"lp-button lp-btn-finish-course\">\r\n-\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Ffinish-course-button-text', esc_html__( 'Finish course', 'learnpress' ) ) ); ?>\r\n- \t\u003C\u002Fbutton>\r\n-\t\u003Cinput type=\"hidden\" name=\"course-id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\r\n-\t\u003Cinput type=\"hidden\" name=\"finish-course-nonce\" value=\"\u003C?php echo esc_attr( wp_create_nonce( sprintf( 'finish-course-%d-%d', $course->get_id(), $user->get_id() ) ) ); ?>\"\u002F>\r\n-\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"finish-course\"\u002F>\r\n-\t\u003Cinput type=\"hidden\" name=\"noajax\" value=\"yes\"\u002F>\r\n-\u003C\u002Fform>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Finish button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Ffinish.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cform class=\"lp-form form-button form-button-finish-course\" method=\"post\" data-confirm=\"\u003C?php echo LP_Strings::esc_attr( 'confirm-finish-course', '', array( $course->get_title() ) ); ?>\" data-title=\"\u003C?php echo esc_attr__( 'Finish course', 'learnpress' ); ?>\">\n+\t\u003Cbutton class=\"lp-button lp-btn-finish-course\">\n+\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Ffinish-course-button-text', esc_html__( 'Finish course', 'learnpress' ) ) ); ?>\n+ \t\u003C\u002Fbutton>\n+\t\u003Cinput type=\"hidden\" name=\"course-id\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\n+\t\u003Cinput type=\"hidden\" name=\"finish-course-nonce\" value=\"\u003C?php echo esc_attr( wp_create_nonce( sprintf( 'finish-course-%d-%d', $course->get_id(), $user->get_id() ) ) ); ?>\"\u002F>\n+\t\u003Cinput type=\"hidden\" name=\"lp-ajax\" value=\"finish-course\"\u002F>\n+\t\u003Cinput type=\"hidden\" name=\"noajax\" value=\"yes\"\u002F>\n+\u003C\u002Fform>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Purchase button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) ) {\r\n-\t$course = learn_press_get_course();\r\n-}\r\n-\r\n-$classes_purchase  = 'purchase-course';\r\n-$classes_purchase .= ( LearnPress::instance()->checkout()->is_enable_guest_checkout() ) ? ' guest_checkout' : '';\r\n-\r\n-$classes_purchase = apply_filters( 'lp\u002Fbtn\u002Fpurchase\u002Fclasses', $classes_purchase );\r\n-?>\r\n-\r\n-\u003C?php do_action( 'learn-press\u002Fbefore-purchase-form' ); ?>\r\n-\r\n-\t\u003Cform name=\"purchase-course\" class=\"\u003C?php echo esc_attr( $classes_purchase ); ?>\" method=\"post\" enctype=\"multipart\u002Fform-data\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-purchase-button' ); ?>\r\n-\r\n-\t\t\u003Cinput type=\"hidden\" name=\"purchase-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\r\n-\r\n-\t\t\u003Cbutton class=\"lp-button button button-purchase-course\">\r\n-\t\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fpurchase-course-button-text', esc_html__( 'Buy Now', 'learnpress' ), $course->get_id() ) ); ?>\r\n-\t\t\u003C\u002Fbutton>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-purchase-button' ); ?>\r\n-\r\n-\t\u003C\u002Fform>\r\n-\r\n-\u003C?php do_action( 'learn-press\u002Fafter-purchase-form' ); ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Purchase button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fpurchase.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) ) {\n+\t$course = learn_press_get_course();\n+}\n+\n+$classes_purchase  = 'purchase-course';\n+$classes_purchase .= ( LearnPress::instance()->checkout()->is_enable_guest_checkout() ) ? ' guest_checkout' : '';\n+\n+$classes_purchase = apply_filters( 'lp\u002Fbtn\u002Fpurchase\u002Fclasses', $classes_purchase );\n+?>\n+\n+\u003C?php do_action( 'learn-press\u002Fbefore-purchase-form' ); ?>\n+\n+\t\u003Cform name=\"purchase-course\" class=\"\u003C?php echo esc_attr( $classes_purchase ); ?>\" method=\"post\" enctype=\"multipart\u002Fform-data\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-purchase-button' ); ?>\n+\n+\t\t\u003Cinput type=\"hidden\" name=\"purchase-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\n+\n+\t\t\u003Cbutton class=\"lp-button button button-purchase-course\">\n+\t\t\t\u003C?php echo esc_html( apply_filters( 'learn-press\u002Fpurchase-course-button-text', esc_html__( 'Buy Now', 'learnpress' ), $course->get_id() ) ); ?>\n+\t\t\u003C\u002Fbutton>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-purchase-button' ); ?>\n+\n+\t\u003C\u002Fform>\n+\n+\u003C?php do_action( 'learn-press\u002Fafter-purchase-form' ); ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fretry.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fretry.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fretry.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons\u002Fretry.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,49 +1,49 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying Retake button in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fretake.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $can_retake_times ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$message_data_confirm = sprintf(\r\n-\t'%s \"%s\"',\r\n-\tesc_html__( 'Do you want to retake the course', 'learnpress' ),\r\n-\t$course->get_title()\r\n-);\r\n-?>\r\n-\r\n-\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fform\u002Fbefore' ); ?>\r\n-\r\n-\u003Cform name=\"lp-form-retake-course\" class=\"lp-form-retake-course\" method=\"post\" enctype=\"multipart\u002Fform-data\"\r\n-\tdata-confirm=\"\u003C?php echo esc_attr( $message_data_confirm ); ?>\">\r\n-\r\n-\t\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fbefore' ); ?>\r\n-\r\n-\t\u003Cinput type=\"hidden\" name=\"retake-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\r\n-\r\n-\t\u003Cbutton class=\"lp-button button button-retake-course\">\r\n- \t\t\u003C?php echo sprintf( '%s (%d)', apply_filters( 'learn-press\u002Fretake-course-button-text', esc_html__( 'Retake course', 'learnpress' ) ), $can_retake_times ); ?>\r\n-\t\u003C\u002Fbutton>\r\n-\r\n-\t\u003Cdiv class=\"lp-ajax-message\">\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fafter' ); ?>\r\n-\r\n-\u003C\u002Fform>\r\n-\r\n-\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fform\u002Fafter' ); ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying Retake button in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons\u002Fretake.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $can_retake_times ) ) {\n+\treturn;\n+}\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+$message_data_confirm = sprintf(\n+\t'%s \"%s\"',\n+\tesc_html__( 'Do you want to retake the course', 'learnpress' ),\n+\t$course->get_title()\n+);\n+?>\n+\n+\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fform\u002Fbefore' ); ?>\n+\n+\u003Cform name=\"lp-form-retake-course\" class=\"lp-form-retake-course\" method=\"post\" enctype=\"multipart\u002Fform-data\"\n+\tdata-confirm=\"\u003C?php echo esc_attr( $message_data_confirm ); ?>\">\n+\n+\t\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fbefore' ); ?>\n+\n+\t\u003Cinput type=\"hidden\" name=\"retake-course\" value=\"\u003C?php echo esc_attr( $course->get_id() ); ?>\"\u002F>\n+\n+\t\u003Cbutton class=\"lp-button button button-retake-course\">\n+ \t\t\u003C?php echo sprintf( '%s (%d)', apply_filters( 'learn-press\u002Fretake-course-button-text', esc_html__( 'Retake course', 'learnpress' ) ), $can_retake_times ); ?>\n+\t\u003C\u002Fbutton>\n+\n+\t\u003Cdiv class=\"lp-ajax-message\">\u003C\u002Fdiv>\n+\n+\t\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fafter' ); ?>\n+\n+\u003C\u002Fform>\n+\n+\u003C?php do_action( 'lp\u002Ftmpl\u002Fcourse\u002Fbutton-retry\u002Fform\u002Fafter' ); ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fbuttons.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fbuttons.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying buttons of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-course-buttons\">\r\n-\t\u003C?php\r\n-\tdo_action( 'learn-press\u002Fbefore-course-buttons' );\r\n-\r\n-\t\u002F**\r\n-\t * @see learn_press_course_retake_button - 10\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fcourse-buttons' );\r\n-\r\n-\tdo_action( 'learn-press\u002Fafter-course-buttons' );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying buttons of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fbuttons.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"lp-course-buttons\">\n+\t\u003C?php\n+\tdo_action( 'learn-press\u002Fbefore-course-buttons' );\n+\n+\t\u002F**\n+\t * @see learn_press_course_retake_button - 10\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fcourse-buttons' );\n+\n+\tdo_action( 'learn-press\u002Fafter-course-buttons' );\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fnav.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fnav.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fnav.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fnav.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,45 +1,45 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying next\u002Fprev item in course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $prev_item ) && ! isset( $next_item ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( $prev_item && $next_item ) {\r\n-\t$nav = 'all';\r\n-} elseif ( $prev_item ) {\r\n-\t$nav = 'prev';\r\n-} else {\r\n-\t$nav = 'next';\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-item-nav\" data-nav=\"\u003C?php echo esc_attr( $nav ); ?>\">\r\n-\t\u003C?php if ( $prev_item instanceof LP_Course_Item ) : ?>\r\n-\t\t\u003Cdiv class=\"prev\">\r\n-\t\t\t\u003Cdiv class=\"course-item-nav__name\">\u003C?php echo esc_html( $prev_item->get_title() ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $prev_item->get_permalink() ); ?>\">\r\n-\t\t\t\t\u003C?php echo esc_html_x( 'Prev', 'course-item-navigation', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php if ( $next_item instanceof LP_Course_Item ) : ?>\r\n-\t\t\u003Cdiv class=\"next\">\r\n-\t\t\t\u003Cdiv class=\"course-item-nav__name\">\u003C?php echo esc_html( $next_item->get_title() ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $next_item->get_permalink() ); ?>\">\r\n-\t\t\t\t\u003C?php echo esc_html_x( 'Next', 'course-item-navigation', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fdiv>\r\n-\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying next\u002Fprev item in course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $prev_item ) && ! isset( $next_item ) ) {\n+\treturn;\n+}\n+\n+if ( $prev_item && $next_item ) {\n+\t$nav = 'all';\n+} elseif ( $prev_item ) {\n+\t$nav = 'prev';\n+} else {\n+\t$nav = 'next';\n+}\n+?>\n+\n+\u003Cdiv class=\"course-item-nav\" data-nav=\"\u003C?php echo esc_attr( $nav ); ?>\">\n+\t\u003C?php if ( $prev_item instanceof LP_Course_Item ) : ?>\n+\t\t\u003Cdiv class=\"prev\">\n+\t\t\t\u003Cdiv class=\"course-item-nav__name\">\u003C?php echo esc_html( $prev_item->get_title() ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $prev_item->get_permalink() ); ?>\">\n+\t\t\t\t\u003C?php echo esc_html_x( 'Prev', 'course-item-navigation', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php if ( $next_item instanceof LP_Course_Item ) : ?>\n+\t\t\u003Cdiv class=\"next\">\n+\t\t\t\u003Cdiv class=\"course-item-nav__name\">\u003C?php echo esc_html( $next_item->get_title() ); ?>\u003C\u002Fdiv>\n+\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $next_item->get_permalink() ); ?>\">\n+\t\t\t\t\u003C?php echo esc_html_x( 'Next', 'course-item-navigation', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fdiv>\n+\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-content.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-content.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-content.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-content.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Content Poup.\r\n- * Use for React Quiz.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-?>\r\n-\r\n-\u003Cdiv id=\"popup-content\">\r\n-\t\u003C?php\r\n-\tLearnPress::instance()->template( 'course' )->course_content_item();\r\n-\r\n-\tLearnPress::instance()->template( 'course' )->course_item_comments();\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Content Poup.\n+ * Use for React Quiz.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+?>\n+\n+\u003Cdiv id=\"popup-content\">\n+\t\u003C?php\n+\tLearnPress::instance()->template( 'course' )->course_content_item();\n+\n+\tLearnPress::instance()->template( 'course' )->course_item_comments();\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-footer.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-footer.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-footer.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-footer.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying footer of single course popup.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ffooter.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-$user   = learn_press_get_current_user();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"popup-footer\">\r\n-\t\u003C?php do_action( 'learn-press\u002Fpopup-footer' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying footer of single course popup.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ffooter.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+$user   = learn_press_get_current_user();\n+?>\n+\n+\u003Cdiv id=\"popup-footer\">\n+\t\u003C?php do_action( 'learn-press\u002Fpopup-footer' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-header.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-header.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-header.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-header.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,61 +1,61 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying header of single course popup.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fheader.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.4\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) || ! isset( $user ) || ! isset( $percentage ) ||\r\n-\t! isset( $completed_items ) || ! isset( $total_items ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv id=\"popup-header\">\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @since 4.0.6\r\n-\t * @see single-button-toggle-sidebar - 5\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fsingle-button-toggle-sidebar' );\r\n-\t?>\r\n-\t\u003Cdiv class=\"popup-header__inner\">\r\n-\t\t\u003Ch2 class=\"course-title\">\r\n-\t\t\t\u003Ca\r\n-\t\t\t\thref=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fa>\r\n-\t\t\u003C\u002Fh2>\r\n-\r\n-\t\t\u003C?php if ( $user->has_enrolled_or_finished( $course->get_id() ) ) : ?>\r\n-\t\t\u003Cdiv class=\"items-progress\" data-total-items=\"\u003C?php echo esc_attr( $total_items ); ?>\">\r\n-\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t\tprintf(\r\n-\t\t\t\t\t\t__(\r\n-\t\t\t\t\t\t\t'\u003Cspan class=\"items-completed\">%1$s\u003C\u002Fspan> of %2$d items',\r\n-\t\t\t\t\t\t\t'learnpress'\r\n-\t\t\t\t\t\t),\r\n-\t\t\t\t\t\tesc_html( $completed_items ),\r\n-\t\t\t\t\t\tesc_html( $course->count_items() )\r\n-\t\t\t\t\t);\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\u003Cdiv class=\"learn-press-progress\">\r\n-\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"\u003C?php echo esc_attr( $percentage ); ?>%;\">\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\"\r\n-\t\tclass=\"back-course\"\r\n-\t\taria-label=\"\u003C?php esc_attr_e( 'Back to course', 'learnpress' ); ?>\"\r\n-\t>\r\n-\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\r\n-\t\u003C\u002Fa>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying header of single course popup.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fheader.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.4\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) || ! isset( $user ) || ! isset( $percentage ) ||\n+\t! isset( $completed_items ) || ! isset( $total_items ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv id=\"popup-header\">\n+\t\u003C?php\n+\t\u002F**\n+\t * @since 4.0.6\n+\t * @see single-button-toggle-sidebar - 5\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fsingle-button-toggle-sidebar' );\n+\t?>\n+\t\u003Cdiv class=\"popup-header__inner\">\n+\t\t\u003Ch2 class=\"course-title\">\n+\t\t\t\u003Ca\n+\t\t\t\thref=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fa>\n+\t\t\u003C\u002Fh2>\n+\n+\t\t\u003C?php if ( $user->has_enrolled_or_finished( $course->get_id() ) ) : ?>\n+\t\t\u003Cdiv class=\"items-progress\" data-total-items=\"\u003C?php echo esc_attr( $total_items ); ?>\">\n+\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t\tprintf(\n+\t\t\t\t\t\t__(\n+\t\t\t\t\t\t\t'\u003Cspan class=\"items-completed\">%1$s\u003C\u002Fspan> of %2$d items',\n+\t\t\t\t\t\t\t'learnpress'\n+\t\t\t\t\t\t),\n+\t\t\t\t\t\tesc_html( $completed_items ),\n+\t\t\t\t\t\tesc_html( $course->count_items() )\n+\t\t\t\t\t);\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\t\u003Cdiv class=\"learn-press-progress\">\n+\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"\u003C?php echo esc_attr( $percentage ); ?>%;\">\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\"\n+\t\tclass=\"back-course\"\n+\t\taria-label=\"\u003C?php esc_attr_e( 'Back to course', 'learnpress' ); ?>\"\n+\t>\n+\t\t\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>\n+\t\u003C\u002Fa>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-sidebar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-sidebar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-sidebar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item\u002Fpopup-sidebar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,38 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course curriculum in popup\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\Models\\UserModel;\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\r\n-\u003Cdiv id=\"popup-sidebar\">\r\n-\t\u003Cform method=\"post\" class=\"search-course\">\r\n-\t\t\u003Cinput\r\n-\t\t\ttype=\"text\"\r\n-\t\t\tname=\"s\" autocomplete=\"off\"\r\n-\t\t\tplaceholder=\"\u003C?php echo esc_attr_x( 'Search for course content', 'search course input placeholder', 'learnpress' ); ?>\"\r\n-\t\t\u002F>\r\n-\t\t\u003Cbutton\r\n-\t\t\tname=\"submit\"\r\n-\t\t\taria-label=\"\u003C?php echo esc_html_x( 'Search for course content', 'Search for course content', 'learnpress' ); ?>\">\r\n-\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\r\n-\t\t\u003C\u002Fbutton>\r\n-\t\t\u003Cbutton type=\"button\" class=\"clear\">\u003C\u002Fbutton>\r\n-\t\u003C\u002Fform>\r\n-\r\n-\t\u003C?php\r\n-\t$courseModel          = CourseModel::find( get_the_ID(), true );\r\n-\t$userModel            = UserModel::find( get_current_user_id(), true );\r\n-\t$singleCourseTemplate = SingleCourseTemplate::instance();\r\n-\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course curriculum in popup\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.2\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\Models\\UserModel;\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\n+\u003Cdiv id=\"popup-sidebar\">\n+\t\u003Cform method=\"post\" class=\"search-course\">\n+\t\t\u003Cinput\n+\t\t\ttype=\"text\"\n+\t\t\tname=\"s\" autocomplete=\"off\"\n+\t\t\tplaceholder=\"\u003C?php echo esc_attr_x( 'Search for course content', 'search course input placeholder', 'learnpress' ); ?>\"\n+\t\t\u002F>\n+\t\t\u003Cbutton\n+\t\t\tname=\"submit\"\n+\t\t\taria-label=\"\u003C?php echo esc_html_x( 'Search for course content', 'Search for course content', 'learnpress' ); ?>\">\n+\t\t\t\u003Ci class=\"lp-icon-search\">\u003C\u002Fi>\n+\t\t\u003C\u002Fbutton>\n+\t\t\u003Cbutton type=\"button\" class=\"clear\">\u003C\u002Fbutton>\n+\t\u003C\u002Fform>\n+\n+\t\u003C?php\n+\t$courseModel          = CourseModel::find( get_the_ID(), true );\n+\t$userModel            = UserModel::find( get_current_user_id(), true );\n+\t$singleCourseTemplate = SingleCourseTemplate::instance();\n+\techo $singleCourseTemplate->html_curriculum( $courseModel, $userModel );\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_lesson.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_lesson.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_lesson.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_lesson.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,27 +1,27 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying lesson item content in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item-lp_lesson.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$item = LP_Global::course_item();\r\n-?>\r\n-\r\n-\u003Cdiv \u003C?php learn_press_content_item_summary_class(); ?>>\r\n-\r\n-\t\u003C?php\r\n-\tdo_action( 'learn-press\u002Fbefore-content-item-summary\u002F' . $item->get_item_type() );\r\n-\r\n-\tdo_action( 'learn-press\u002Fcontent-item-summary\u002F' . $item->get_item_type() );\r\n-\r\n-\tdo_action( 'learn-press\u002Fafter-content-item-summary\u002F' . $item->get_item_type() );\r\n-\t?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying lesson item content in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item-lp_lesson.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$item = LP_Global::course_item();\n+?>\n+\n+\u003Cdiv \u003C?php learn_press_content_item_summary_class(); ?>>\n+\n+\t\u003C?php\n+\tdo_action( 'learn-press\u002Fbefore-content-item-summary\u002F' . $item->get_item_type() );\n+\n+\tdo_action( 'learn-press\u002Fcontent-item-summary\u002F' . $item->get_item_type() );\n+\n+\tdo_action( 'learn-press\u002Fafter-content-item-summary\u002F' . $item->get_item_type() );\n+\t?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item-lp_quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying quiz item content in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item-lp_quiz.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$quiz = LP_Global::course_item_quiz();\r\n-?>\r\n-\r\n-\u003Cdiv id=\"content-item-quiz\" class=\"content-item-summary\">\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @see learn_press_content_item_summary_title()\r\n-\t * @see learn_press_content_item_summary_content()\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fbefore-content-item-summary\u002F' . $quiz->get_item_type() );\r\n-\t?>\r\n-\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @see learn_press_content_item_summary_question()\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fcontent-item-summary\u002F' . $quiz->get_item_type() );\r\n-\t?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying quiz item content in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item-lp_quiz.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$quiz = LP_Global::course_item_quiz();\n+?>\n+\n+\u003Cdiv id=\"content-item-quiz\" class=\"content-item-summary\">\n+\t\u003C?php\n+\t\u002F**\n+\t * @see learn_press_content_item_summary_title()\n+\t * @see learn_press_content_item_summary_content()\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fbefore-content-item-summary\u002F' . $quiz->get_item_type() );\n+\t?>\n+\n+\t\u003C?php\n+\t\u002F**\n+\t * @see learn_press_content_item_summary_question()\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fcontent-item-summary\u002F' . $quiz->get_item_type() );\n+\t?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-item.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-item.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,71 +1,71 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying item content in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$user   = learn_press_get_current_user();\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$course_item             = LP_Global::course_item();\r\n-$can_view_content_course = $user->can_view_content_course( $course->get_id() );\r\n-$can_view_content_item   = $user->can_view_item( $course_item->get_id(), $can_view_content_course );\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-content-item\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fcourse-item-content-header' ); ?>\r\n-\r\n-\t\u003Cdiv class=\"content-item-scrollable\">\r\n-\t\t\u003Cdiv class=\"content-item-wrap\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-course-item-content' );\r\n-\r\n-\t\t\tif ( $can_view_content_item->flag ) {\r\n-\r\n-\t\t\t\tdo_action(\r\n-\t\t\t\t\t'learn-press\u002Fcourse-item-content',\r\n-\t\t\t\t\t$user,\r\n-\t\t\t\t\t$course,\r\n-\t\t\t\t\t$course_item,\r\n-\t\t\t\t\t$course_item,\r\n-\t\t\t\t\t$can_view_content_course,\r\n-\t\t\t\t\t$can_view_content_item\r\n-\t\t\t\t);\r\n-\r\n-\t\t\t} else {\r\n-\t\t\t\tlearn_press_get_template(\r\n-\t\t\t\t\t'single-course\u002Fcontent-protected.php',\r\n-\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t'can_view_item' => $can_view_content_item,\r\n-\t\t\t\t\t\t'course'        => $course,\r\n-\t\t\t\t\t)\r\n-\t\t\t\t);\r\n-\t\t\t}\r\n-\r\n-\t\t\tdo_action(\r\n-\t\t\t\t'learn-press\u002Fafter-course-item-content',\r\n-\t\t\t\t$user,\r\n-\t\t\t\t$course,\r\n-\t\t\t\t$course_item,\r\n-\t\t\t\t$can_view_content_course,\r\n-\t\t\t\t$can_view_content_item\r\n-\t\t\t);\r\n-\t\t\t?>\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fcourse-item-content-footer' ); ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying item content in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-item.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$user   = learn_press_get_current_user();\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+$course_item             = LP_Global::course_item();\n+$can_view_content_course = $user->can_view_content_course( $course->get_id() );\n+$can_view_content_item   = $user->can_view_item( $course_item->get_id(), $can_view_content_course );\n+?>\n+\n+\u003Cdiv id=\"learn-press-content-item\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fcourse-item-content-header' ); ?>\n+\n+\t\u003Cdiv class=\"content-item-scrollable\">\n+\t\t\u003Cdiv class=\"content-item-wrap\">\n+\t\t\t\u003C?php\n+\t\t\tdo_action( 'learn-press\u002Fbefore-course-item-content' );\n+\n+\t\t\tif ( $can_view_content_item->flag ) {\n+\n+\t\t\t\tdo_action(\n+\t\t\t\t\t'learn-press\u002Fcourse-item-content',\n+\t\t\t\t\t$user,\n+\t\t\t\t\t$course,\n+\t\t\t\t\t$course_item,\n+\t\t\t\t\t$course_item,\n+\t\t\t\t\t$can_view_content_course,\n+\t\t\t\t\t$can_view_content_item\n+\t\t\t\t);\n+\n+\t\t\t} else {\n+\t\t\t\tlearn_press_get_template(\n+\t\t\t\t\t'single-course\u002Fcontent-protected.php',\n+\t\t\t\t\tarray(\n+\t\t\t\t\t\t'can_view_item' => $can_view_content_item,\n+\t\t\t\t\t\t'course'        => $course,\n+\t\t\t\t\t)\n+\t\t\t\t);\n+\t\t\t}\n+\n+\t\t\tdo_action(\n+\t\t\t\t'learn-press\u002Fafter-course-item-content',\n+\t\t\t\t$user,\n+\t\t\t\t$course,\n+\t\t\t\t$course_item,\n+\t\t\t\t$can_view_content_course,\n+\t\t\t\t$can_view_content_item\n+\t\t\t);\n+\t\t\t?>\n+\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fcourse-item-content-footer' ); ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-content course-summary-content\">\r\n-\t\u003C?php do_action( 'learn-press\u002Fcourse-content-summary' ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Cdiv class=\"course-content course-summary-content\">\n+\t\u003C?php do_action( 'learn-press\u002Fcourse-content-summary' ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-protected.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-protected.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fcontent-protected.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fcontent-protected.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,41 +1,41 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying message for course content protected.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-protected.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $can_view_item ) || $can_view_item->flag ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$message = '';\r\n-\r\n-if ( ! is_user_logged_in() ) {\r\n-\t$message = sprintf(\r\n-\t\t__(\r\n-\t\t\t'This content is protected, please %1$s and %2$s in the course to view this content!',\r\n-\t\t\t'learnpress'\r\n-\t\t),\r\n-\t\tsprintf(\r\n-\t\t\t'\u003Ca class=\"lp-link-login\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\tlearn_press_get_login_url( LP_Helper::getUrlCurrent() ),\r\n-\t\t\t__( 'login', 'learnpress' )\r\n-\t\t),\r\n-\t\tisset( $course ) ? sprintf(\r\n-\t\t\t'\u003Ca class=\"lp-link-enroll\" href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t$course->get_permalink(),\r\n-\t\t\t__( 'enroll', 'learnpress' )\r\n-\t\t) : __( 'enroll', 'learnpress' )\r\n-\t);\r\n-} else {\r\n-\t$message = $can_view_item->message;\r\n-}\r\n-\r\n-learn_press_display_message( $message, 'learn-press-content-protected-message error' );\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying message for course content protected.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fcontent-protected.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $can_view_item ) || $can_view_item->flag ) {\n+\treturn;\n+}\n+\n+$message = '';\n+\n+if ( ! is_user_logged_in() ) {\n+\t$message = sprintf(\n+\t\t__(\n+\t\t\t'This content is protected, please %1$s and %2$s in the course to view this content!',\n+\t\t\t'learnpress'\n+\t\t),\n+\t\tsprintf(\n+\t\t\t'\u003Ca class=\"lp-link-login\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\tlearn_press_get_login_url( LP_Helper::getUrlCurrent() ),\n+\t\t\t__( 'login', 'learnpress' )\n+\t\t),\n+\t\tisset( $course ) ? sprintf(\n+\t\t\t'\u003Ca class=\"lp-link-enroll\" href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t$course->get_permalink(),\n+\t\t\t__( 'enroll', 'learnpress' )\n+\t\t) : __( 'enroll', 'learnpress' )\n+\t);\n+} else {\n+\t$message = $can_view_item->message;\n+}\n+\n+learn_press_display_message( $message, 'learn-press-content-protected-message error' );\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fextra-info.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fextra-info.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fextra-info.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fextra-info.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,38 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying extra info as toggle\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $title ) || ! isset( $items ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-extra-box\">\r\n-\t\u003Ch3 class=\"course-extra-box__title\">\r\n-\t\t\u003C?php echo esc_html( $title ); ?>\r\n-\t\u003C\u002Fh3>\r\n-\r\n-\t\u003Cdiv class=\"course-extra-box__content\">\r\n-\t\t\u003Cdiv class=\"course-extra-box__content-inner\">\r\n-\t\t\t\u003Cul>\r\n-\t\t\t\t\u003C?php foreach ( $items as $item ) : ?>\r\n-\t\t\t\t\u003Cli>\u003C?php echo wp_kses_post( $item ); ?>\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying extra info as toggle\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $title ) || ! isset( $items ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-extra-box\">\n+\t\u003Ch3 class=\"course-extra-box__title\">\n+\t\t\u003C?php echo esc_html( $title ); ?>\n+\t\u003C\u002Fh3>\n+\n+\t\u003Cdiv class=\"course-extra-box__content\">\n+\t\t\u003Cdiv class=\"course-extra-box__content-inner\">\n+\t\t\t\u003Cul>\n+\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( ! is_array( $items ) ) {\n+\t\t\t\t\t$items = array();\n+\t\t\t\t}\n+\n+\t\t\t\tforeach ( $items as $item ) :\n+\t\t\t\t\t?>\n+\t\t\t\t\u003Cli>\u003C?php echo wp_kses_post( $item ); ?>\u003C\u002Fli>\n+\t\t\t\t\u003C?php endforeach; ?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ffeatured-review.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ffeatured-review.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ffeatured-review.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ffeatured-review.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying featured review.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $review_content ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-featured-review margin-bottom\">\r\n-\t\u003Cdiv class=\"featured-review__title\">\u003C?php echo esc_html__( 'Featured Review', 'learnpress' ); ?>\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"featured-review__stars\">\r\n-\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"featured-review__content\">\r\n-\t\t\u003C?php echo wp_kses_post( wpautop( $review_content ) ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying featured review.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $review_content ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-featured-review margin-bottom\">\n+\t\u003Cdiv class=\"featured-review__title\">\u003C?php echo esc_html__( 'Featured Review', 'learnpress' ); ?>\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"featured-review__stars\">\n+\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\n+\t\t\u003Ci class=\"lp-icon-star\">\u003C\u002Fi>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"featured-review__content\">\n+\t\t\u003C?php echo wp_kses_post( wpautop( $review_content ) ); ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fgraduation.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fgraduation.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fgraduation.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fgraduation.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,34 +1,34 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course graduation.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die;\r\n-\r\n-if ( ! isset( $graduation ) ) {\r\n-\t$graduation = _x( 'un-graduated', 'course graduation', 'learnpress' );\r\n-}\r\n-\r\n-$classes = array(\r\n-\t'course-graduation',\r\n-\t'learn-press-message',\r\n-\t$graduation,\r\n-\t$graduation === 'passed' ? 'success' : ( $graduation === 'failed' ? 'error' : '' ),\r\n-);\r\n-?>\r\n-\r\n-\u003Cdiv class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\r\n-\t\u003C?php\r\n-\tif ( $graduation === 'passed' ) {\r\n-\t\techo '\u003Ci class=\"lp-icon-check-circle\">\u003C\u002Fi>';\r\n-\t} else {\r\n-\t\techo '\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>';\r\n-\t}\r\n-\t?>\r\n-\r\n-\t\u003Cspan>\u003C?php learn_press_course_grade_html( $graduation ); ?>\u003C\u002Fspan>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course graduation.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die;\n+\n+if ( ! isset( $graduation ) ) {\n+\t$graduation = _x( 'un-graduated', 'course graduation', 'learnpress' );\n+}\n+\n+$classes = array(\n+\t'course-graduation',\n+\t'learn-press-message',\n+\t$graduation,\n+\t$graduation === 'passed' ? 'success' : ( $graduation === 'failed' ? 'error' : '' ),\n+);\n+?>\n+\n+\u003Cdiv class=\"\u003C?php echo implode( ' ', $classes ); ?>\">\n+\t\u003C?php\n+\tif ( $graduation === 'passed' ) {\n+\t\techo '\u003Ci class=\"lp-icon-check-circle\">\u003C\u002Fi>';\n+\t} else {\n+\t\techo '\u003Ci class=\"lp-icon-times\">\u003C\u002Fi>';\n+\t}\n+\t?>\n+\n+\t\u003Cspan>\u003C?php learn_press_course_grade_html( $graduation ); ?>\u003C\u002Fspan>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Finstructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Finstructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Finstructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Finstructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,43 +1,43 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying instructor of single course.\r\n- *\r\n- * Do not use in LP4.\r\n- * Will remove after LearnPress and Eduma and all guest update 4.0.0\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.1\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$instructor = $course->get_instructor();\r\n-if ( ! $instructor instanceof LP_User ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$img_profile = $instructor->get_profile_picture();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-author\">\r\n-\r\n-\t\u003Ch3>\u003C?php _e( 'About the Instructor', 'learnpress' ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\u003Cp class=\"author-name\">\r\n-\t\t\u003C?php echo wp_kses_post( $img_profile ); ?>\r\n-\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\r\n-\t\u003C\u002Fp>\r\n-\t\u003Cdiv class=\"author-bio\">\r\n-\t\t\u003C?php echo wp_kses_post( wpautop( $course->get_author()->get_description() ) ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying instructor of single course.\n+ *\n+ * Do not use in LP4.\n+ * Will remove after LearnPress and Eduma and all guest update 4.0.0\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.1\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+$instructor = $course->get_instructor();\n+if ( ! $instructor instanceof LP_User ) {\n+\treturn;\n+}\n+\n+$img_profile = $instructor->get_profile_picture();\n+?>\n+\n+\u003Cdiv class=\"course-author\">\n+\n+\t\u003Ch3>\u003C?php _e( 'About the Instructor', 'learnpress' ); ?>\u003C\u002Fh3>\n+\n+\t\u003Cp class=\"author-name\">\n+\t\t\u003C?php echo wp_kses_post( $img_profile ); ?>\n+\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\n+\t\u003C\u002Fp>\n+\t\u003Cdiv class=\"author-bio\">\n+\t\t\u003C?php echo wp_kses_post( wpautop( $course->get_author()->get_description() ) ); ?>\n+\t\u003C\u002Fdiv>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fitem-comments.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fitem-comments.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fitem-comments.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fitem-comments.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,23 +1,23 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying comments of a course item.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( comments_open() || get_comments_number() ) {\r\n-\t?>\r\n-\t\u003Cdiv id=\"learn-press-item-comments\">\r\n-\t\t\u003Cdiv class=\"learn-press-comments\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t\tcomments_template();\r\n-\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php } ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying comments of a course item.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( comments_open() || get_comments_number() ) {\n+\t?>\n+\t\u003Cdiv id=\"learn-press-item-comments\">\n+\t\t\u003Cdiv class=\"learn-press-comments\">\n+\t\t\t\u003C?php\n+\t\t\tadd_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t\tcomments_template();\n+\t\t\tremove_filter( 'deprecated_file_trigger_error', '__return_false' );\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C?php } ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Floop-section.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Floop-section.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Floop-section.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Floop-section.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,123 +1,123 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying loop course of section.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Floop-section.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Course_Section $section\r\n- *\u002F\r\n-if ( ! isset( $section ) || ! isset( $can_view_content_course )\r\n-\t|| ! isset( $user_course ) || ! isset( $user ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$course = learn_press_get_course();\r\n-\r\n-if ( ! apply_filters( 'learn-press\u002Fsection-visible', true, $section, $course ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * List items of section\r\n- *\r\n- * @var LP_Course_Item[]\r\n- *\u002F\r\n-$items = $section->get_items();\r\n-?>\r\n-\r\n-\u003Cli \u003C?php $section->main_class(); ?>\r\n-\tid=\"section-\u003C?php echo esc_attr( $section->get_slug() ); ?>\"\r\n-\tdata-id=\"\u003C?php echo esc_attr( $section->get_slug() ); ?>\"\r\n-\tdata-section-id=\"\u003C?php echo esc_attr( $section->get_id() ); ?>\">\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-section-summary', $section, $course->get_id() ); ?>\r\n-\r\n-\t\u003Cdiv class=\"section-header\">\r\n-\t\t\u003Cdiv class=\"section-left\">\r\n-\t\t\t\u003Ch5 class=\"section-title\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$title = $section->get_title();\r\n-\t\t\t\techo wp_kses_post( ! $title ? _x( 'Untitled', 'template title empty', 'learnpress' ) : $title );\r\n-\t\t\t\t?>\r\n-\r\n-\t\t\t\t\u003C?php $description = $section->get_description(); ?>\r\n-\r\n-\t\t\t\t\u003C?php if ( $description ) : ?>\r\n-\t\t\t\t\t\u003Cp class=\"section-desc\">\u003C?php echo wp_kses_post( $description ); ?>\u003C\u002Fp>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\u003C\u002Fh5>\r\n-\r\n-\t\t\t\u003Cspan class=\"section-toggle\">\r\n-\t\t\t\t\u003Ci class=\"lp-icon-caret-down\">\u003C\u002Fi>\r\n-\t\t\t\t\u003Ci class=\"lp-icon-caret-up\">\u003C\u002Fi>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php if ( $user->has_enrolled_or_finished( $section->get_course_id() ) ) : ?>\r\n-\t\t\t\u003C?php $percent = $user_course->get_percent_completed_items( '', $section->get_id() ); ?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"section-meta\">\r\n-\t\t\t\t\u003Cdiv class=\"learn-press-progress\" title=\"\u003C?php echo esc_attr( sprintf( __( 'Section progress %s%%', 'learnpress' ), round( $percent, 2 ) ) ); ?>\">\r\n-\t\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"\u003C?php echo esc_attr( $percent ); ?>\">\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php do_action( 'learnpress\u002Fsingle-course\u002Fsection-header\u002Fafter', $section ); ?>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-section-content', $section, $course->get_id() ); ?>\r\n-\r\n-\t\u003C?php if ( ! $items ) : ?>\r\n-\t\t\u003C?php learn_press_display_message( __( 'No items in this section', 'learnpress' ) ); ?>\r\n-\t\u003C?php else : ?>\r\n-\r\n-\t\t\u003Cul class=\"section-content\">\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\tforeach ( $items as $item ) :\r\n-\t\t\t\t$can_view_item = $user->can_view_item( $item->get_id(), $can_view_content_course );\r\n-\t\t\t\t$class_item    = implode( ' ', $item->get_class_v2( $course->get_id(), $item->get_id(), $can_view_item ) );\r\n-\t\t\t\t?>\r\n-\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $class_item ); ?>\"\r\n-\t\t\t\t\tdata-id=\"\u003C?php echo esc_attr( $item->get_id() ); ?>\">\r\n-\r\n-\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fbefore-section-loop-item', $item, $section, $course );\r\n-\r\n-\t\t\t\t\t$item_link = $can_view_item->flag ? $item->get_permalink() : false;\r\n-\t\t\t\t\t$item_link = apply_filters( 'learn-press\u002Fsection-item-permalink', $item_link, $item, $section, $course );\r\n-\t\t\t\t\t?>\r\n-\r\n-\t\t\t\t\t\u003Ca class=\"section-item-link\" href=\"\u003C?php echo esc_url_raw( $item_link ? $item_link : 'javascript:void(0);' ); ?>\">\r\n-\r\n-\t\t\t\t\t\t\u003C?php\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Fbefore-section-loop-item-title', $item, $section, $course );\r\n-\r\n-\t\t\t\t\t\tlearn_press_get_template(\r\n-\t\t\t\t\t\t\t'single-course\u002Fsection\u002F' . $item->get_template(),\r\n-\t\t\t\t\t\t\tarray(\r\n-\t\t\t\t\t\t\t\t'item'    => $item,\r\n-\t\t\t\t\t\t\t\t'section' => $section,\r\n-\t\t\t\t\t\t\t)\r\n-\t\t\t\t\t\t);\r\n-\r\n-\t\t\t\t\t\tdo_action( 'learn-press\u002Fafter-section-loop-item-title', $item, $section, $course );\r\n-\t\t\t\t\t\t?>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-section-loop-item', $item, $section, $course ); ?>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-section-summary', $section, $course->get_id() ); ?>\r\n-\u003C\u002Fli>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying loop course of section.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Floop-section.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Course_Section $section\n+ *\u002F\n+if ( ! isset( $section ) || ! isset( $can_view_content_course )\n+\t|| ! isset( $user_course ) || ! isset( $user ) ) {\n+\treturn;\n+}\n+\n+$course = learn_press_get_course();\n+\n+if ( ! apply_filters( 'learn-press\u002Fsection-visible', true, $section, $course ) ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * List items of section\n+ *\n+ * @var LP_Course_Item[]\n+ *\u002F\n+$items = $section->get_items();\n+?>\n+\n+\u003Cli \u003C?php $section->main_class(); ?>\n+\tid=\"section-\u003C?php echo esc_attr( $section->get_slug() ); ?>\"\n+\tdata-id=\"\u003C?php echo esc_attr( $section->get_slug() ); ?>\"\n+\tdata-section-id=\"\u003C?php echo esc_attr( $section->get_id() ); ?>\">\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-section-summary', $section, $course->get_id() ); ?>\n+\n+\t\u003Cdiv class=\"section-header\">\n+\t\t\u003Cdiv class=\"section-left\">\n+\t\t\t\u003Ch5 class=\"section-title\">\n+\t\t\t\t\u003C?php\n+\t\t\t\t$title = $section->get_title();\n+\t\t\t\techo wp_kses_post( ! $title ? _x( 'Untitled', 'template title empty', 'learnpress' ) : $title );\n+\t\t\t\t?>\n+\n+\t\t\t\t\u003C?php $description = $section->get_description(); ?>\n+\n+\t\t\t\t\u003C?php if ( $description ) : ?>\n+\t\t\t\t\t\u003Cp class=\"section-desc\">\u003C?php echo wp_kses_post( $description ); ?>\u003C\u002Fp>\n+\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\u003C\u002Fh5>\n+\n+\t\t\t\u003Cspan class=\"section-toggle\">\n+\t\t\t\t\u003Ci class=\"lp-icon-caret-down\">\u003C\u002Fi>\n+\t\t\t\t\u003Ci class=\"lp-icon-caret-up\">\u003C\u002Fi>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php if ( $user->has_enrolled_or_finished( $section->get_course_id() ) ) : ?>\n+\t\t\t\u003C?php $percent = $user_course->get_percent_completed_items( '', $section->get_id() ); ?>\n+\n+\t\t\t\u003Cdiv class=\"section-meta\">\n+\t\t\t\t\u003Cdiv class=\"learn-press-progress\" title=\"\u003C?php echo esc_attr( sprintf( __( 'Section progress %s%%', 'learnpress' ), round( $percent, 2 ) ) ); ?>\">\n+\t\t\t\t\t\u003Cdiv class=\"learn-press-progress__active\" data-value=\"\u003C?php echo esc_attr( $percent ); ?>\">\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php do_action( 'learnpress\u002Fsingle-course\u002Fsection-header\u002Fafter', $section ); ?>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-section-content', $section, $course->get_id() ); ?>\n+\n+\t\u003C?php if ( ! $items ) : ?>\n+\t\t\u003C?php learn_press_display_message( __( 'No items in this section', 'learnpress' ) ); ?>\n+\t\u003C?php else : ?>\n+\n+\t\t\u003Cul class=\"section-content\">\n+\n+\t\t\t\u003C?php\n+\t\t\tforeach ( $items as $item ) :\n+\t\t\t\t$can_view_item = $user->can_view_item( $item->get_id(), $can_view_content_course );\n+\t\t\t\t$class_item    = implode( ' ', $item->get_class_v2( $course->get_id(), $item->get_id(), $can_view_item ) );\n+\t\t\t\t?>\n+\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( $class_item ); ?>\"\n+\t\t\t\t\tdata-id=\"\u003C?php echo esc_attr( $item->get_id() ); ?>\">\n+\n+\t\t\t\t\t\u003C?php\n+\t\t\t\t\tdo_action( 'learn-press\u002Fbefore-section-loop-item', $item, $section, $course );\n+\n+\t\t\t\t\t$item_link = $can_view_item->flag ? $item->get_permalink() : false;\n+\t\t\t\t\t$item_link = apply_filters( 'learn-press\u002Fsection-item-permalink', $item_link, $item, $section, $course );\n+\t\t\t\t\t?>\n+\n+\t\t\t\t\t\u003Ca class=\"section-item-link\" href=\"\u003C?php echo esc_url_raw( $item_link ? $item_link : 'javascript:void(0);' ); ?>\">\n+\n+\t\t\t\t\t\t\u003C?php\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Fbefore-section-loop-item-title', $item, $section, $course );\n+\n+\t\t\t\t\t\tlearn_press_get_template(\n+\t\t\t\t\t\t\t'single-course\u002Fsection\u002F' . $item->get_template(),\n+\t\t\t\t\t\t\tarray(\n+\t\t\t\t\t\t\t\t'item'    => $item,\n+\t\t\t\t\t\t\t\t'section' => $section,\n+\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t);\n+\n+\t\t\t\t\t\tdo_action( 'learn-press\u002Fafter-section-loop-item-title', $item, $section, $course );\n+\t\t\t\t\t\t?>\n+\t\t\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\t\t\u003C?php do_action( 'learn-press\u002Fafter-section-loop-item', $item, $section, $course ); ?>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Ful>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fafter-section-summary', $section, $course->get_id() ); ?>\n+\u003C\u002Fli>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcategory.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcategory.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcategory.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcategory.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,26 +1,26 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying categories of course in primary-meta section.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"meta-item meta-item-categories\">\r\n-\t\u003Cdiv class=\"meta-item__value\">\r\n-\t\t\u003Clabel>\u003C?php esc_html_e( 'Category', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\u003Cdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t\tif ( ! get_the_terms( get_the_ID(), 'course_category' ) ) {\r\n-\t\t\t\tesc_html_e( 'Uncategorized', 'learnpress' );\r\n-\t\t\t} else {\r\n-\t\t\t\techo get_the_term_list( get_the_ID(), 'course_category', '', '\u003Cspan>|\u003C\u002Fspan>' );\r\n-\t\t\t}\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying categories of course in primary-meta section.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\n+\u003Cdiv class=\"meta-item meta-item-categories\">\n+\t\u003Cdiv class=\"meta-item__value\">\n+\t\t\u003Clabel>\u003C?php esc_html_e( 'Category', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\u003Cdiv>\n+\t\t\t\u003C?php\n+\t\t\tif ( ! get_the_terms( get_the_ID(), 'course_category' ) ) {\n+\t\t\t\tesc_html_e( 'Uncategorized', 'learnpress' );\n+\t\t\t} else {\n+\t\t\t\techo get_the_term_list( get_the_ID(), 'course_category', '', '\u003Cspan>|\u003C\u002Fspan>' );\n+\t\t\t}\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcount.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcount.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcount.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fcount.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course level in secondary section.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- * @see LP_Template_Course::count_object()\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $object ) || ! isset( $count ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"meta-item meta-item-\u003C?php echo esc_attr( $object ); ?>\">\u003C?php echo wp_kses_post( $count ); ?>\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course level in secondary section.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ * @see LP_Template_Course::count_object()\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $object ) || ! isset( $count ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"meta-item meta-item-\u003C?php echo esc_attr( $object ); ?>\">\u003C?php echo wp_kses_post( $count ); ?>\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fduration.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fduration.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fduration.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Fduration.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course duration in secondary section.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) or die;\r\n-\r\n-$course = learn_press_get_course();\r\n-$duration_str = SingleCourseTemplate::instance()->html_duration( $course );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"meta-item meta-item-duration\">\u003C?php echo $duration_str; ?>\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course duration in secondary section.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+use LearnPress\\TemplateHooks\\Course\\SingleCourseTemplate;\n+\n+defined( 'ABSPATH' ) or die;\n+\n+$course = learn_press_get_course();\n+$duration_str = SingleCourseTemplate::instance()->html_duration( $course );\n+?>\n+\n+\u003Cdiv class=\"meta-item meta-item-duration\">\u003C?php echo $duration_str; ?>\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Finstructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Finstructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Finstructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Finstructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,44 +1,44 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course instructor in primary-meta section.\r\n- *\r\n- * @version 4.0.2\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$courseModel = CourseModel::find( get_the_ID(), true );\r\n-if ( ! $courseModel ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$instructor = $courseModel->get_author_model();\r\n-if ( ! $instructor ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"meta-item meta-item-instructor\">\r\n-\t\u003Cdiv class=\"meta-item__image\">\r\n-\t\t\u003C?php echo wp_kses_post( SingleInstructorTemplate::instance()->html_avatar( $instructor ) ); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003Cdiv class=\"meta-item__value\">\r\n-\t\t\u003Clabel>\u003C?php esc_html_e( 'Instructor', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\u003Cdiv>\r\n-\t\t\t\u003C?php\r\n-\t\t\techo wp_kses_post(\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\r\n-\t\t\t\t\t$instructor->get_url_instructor(),\r\n-\t\t\t\t\tSingleInstructorTemplate::instance()->html_display_name( $instructor )\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course instructor in primary-meta section.\n+ *\n+ * @version 4.0.2\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$courseModel = CourseModel::find( get_the_ID(), true );\n+if ( ! $courseModel ) {\n+\treturn;\n+}\n+\n+$instructor = $courseModel->get_author_model();\n+if ( ! $instructor ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"meta-item meta-item-instructor\">\n+\t\u003Cdiv class=\"meta-item__image\">\n+\t\t\u003C?php echo wp_kses_post( SingleInstructorTemplate::instance()->html_avatar( $instructor ) ); ?>\n+\t\u003C\u002Fdiv>\n+\t\u003Cdiv class=\"meta-item__value\">\n+\t\t\u003Clabel>\u003C?php esc_html_e( 'Instructor', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\u003Cdiv>\n+\t\t\t\u003C?php\n+\t\t\techo wp_kses_post(\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'\u003Ca href=\"%s\">%s\u003C\u002Fa>',\n+\t\t\t\t\t$instructor->get_url_instructor(),\n+\t\t\t\t\tSingleInstructorTemplate::instance()->html_display_name( $instructor )\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Flevel.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Flevel.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Flevel.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta\u002Flevel.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,20 +1,20 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course level in secondary section.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-$level = learn_press_get_post_level( get_the_ID() );\r\n-\r\n-if ( ! $level ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"meta-item meta-item-level\">\u003Cspan>\u003C?php echo esc_html( $level ); ?>\u003C\u002Fspan>\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course level in secondary section.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+$level = learn_press_get_post_level( get_the_ID() );\n+\n+if ( ! $level ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"meta-item meta-item-level\">\u003Cspan>\u003C?php echo esc_html( $level ); ?>\u003C\u002Fspan>\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta-primary.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta-primary.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta-primary.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta-primary.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying primary course meta data such as: Instructor, Categories, Reviews (addons)...\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die;\r\n-\r\n-$has_meta_left  = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-primary-left' );\r\n-$has_meta_right = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-primary-right' );\r\n-\r\n-\u002F\u002F Do not echo anything if there is no content hooked\r\n-if ( ! $has_meta_left && ! $has_meta_right ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-meta course-meta-primary\u003C?php echo esc_attr( $has_meta_right && $has_meta_left ? ' two-columns' : '' ); ?>\">\r\n-\r\n-\t\u003C?php if ( $has_meta_left ) { ?>\r\n-\r\n-\t\t\u003Cdiv class=\"course-meta__pull-left\">\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\u002F\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-meta-primary-left' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\t\u003C?php if ( $has_meta_right ) { ?>\r\n-\r\n-\t\t\u003Cdiv class=\"course-meta__pull-right\">\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\u002F\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-meta-primary-right' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying primary course meta data such as: Instructor, Categories, Reviews (addons)...\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die;\n+\n+$has_meta_left  = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-primary-left' );\n+$has_meta_right = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-primary-right' );\n+\n+\u002F\u002F Do not echo anything if there is no content hooked\n+if ( ! $has_meta_left && ! $has_meta_right ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-meta course-meta-primary\u003C?php echo esc_attr( $has_meta_right && $has_meta_left ? ' two-columns' : '' ); ?>\">\n+\n+\t\u003C?php if ( $has_meta_left ) { ?>\n+\n+\t\t\u003Cdiv class=\"course-meta__pull-left\">\n+\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\u002F\n+\n+\t\t\tdo_action( 'learn-press\u002Fcourse-meta-primary-left' );\n+\t\t\t?>\n+\n+\t\t\u003C\u002Fdiv>\n+\n+\t\u003C?php } ?>\n+\n+\t\u003C?php if ( $has_meta_right ) { ?>\n+\n+\t\t\u003Cdiv class=\"course-meta__pull-right\">\n+\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\u002F\n+\n+\t\t\tdo_action( 'learn-press\u002Fcourse-meta-primary-right' );\n+\t\t\t?>\n+\n+\t\t\u003C\u002Fdiv>\n+\n+\t\u003C?php } ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta-secondary.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta-secondary.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fmeta-secondary.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fmeta-secondary.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,55 +1,55 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying secondary course meta data such as: duration, level, lessons, quizzes, students, etc...\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) or die;\r\n-\r\n-$has_meta_left  = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-secondary-left' );\r\n-$has_meta_right = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-secondary-right' );\r\n-\r\n-\u002F\u002F Do not echo anything if there is no content hooked\r\n-if ( ! $has_meta_left && ! $has_meta_right ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-meta course-meta-secondary\u003C?php echo esc_attr( $has_meta_right && $has_meta_left ? ' two-columns' : '' ); ?>\">\r\n-\r\n-\t\u003C?php if ( $has_meta_left ) { ?>\r\n-\r\n-\t\t\u003Cdiv class=\"course-meta__pull-left\">\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\u002F\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-meta-secondary-left' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\t\u003C?php if ( $has_meta_right ) { ?>\r\n-\r\n-\t\t\u003Cdiv class=\"course-meta__pull-right\">\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\u002F\r\n-\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-meta-secondary-right' );\r\n-\t\t\t?>\r\n-\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php } ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying secondary course meta data such as: duration, level, lessons, quizzes, students, etc...\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) or die;\n+\n+$has_meta_left  = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-secondary-left' );\n+$has_meta_right = LearnPress::instance()->template()->has_content( 'learn-press\u002Fcourse-meta-secondary-right' );\n+\n+\u002F\u002F Do not echo anything if there is no content hooked\n+if ( ! $has_meta_left && ! $has_meta_right ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-meta course-meta-secondary\u003C?php echo esc_attr( $has_meta_right && $has_meta_left ? ' two-columns' : '' ); ?>\">\n+\n+\t\u003C?php if ( $has_meta_left ) { ?>\n+\n+\t\t\u003Cdiv class=\"course-meta__pull-left\">\n+\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\u002F\n+\n+\t\t\tdo_action( 'learn-press\u002Fcourse-meta-secondary-left' );\n+\t\t\t?>\n+\n+\t\t\u003C\u002Fdiv>\n+\n+\t\u003C?php } ?>\n+\n+\t\u003C?php if ( $has_meta_right ) { ?>\n+\n+\t\t\u003Cdiv class=\"course-meta__pull-right\">\n+\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\u002F\n+\n+\t\t\tdo_action( 'learn-press\u002Fcourse-meta-secondary-right' );\n+\t\t\t?>\n+\n+\t\t\u003C\u002Fdiv>\n+\n+\t\u003C?php } ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fprice.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fprice.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fprice.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fprice.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,22 +1,22 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying price of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fprice.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $price_html ) || ! isset( $course ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-price\">\r\n-\t\u003C?php echo wp_kses_post( $price_html ); ?>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying price of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fprice.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $price_html ) || ! isset( $course ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-price\">\n+\t\u003C?php echo wp_kses_post( $price_html ); ?>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying lesson item section in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $item ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $item->get_title( 'display' ) ); ?>\u003C\u002Fspan>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying lesson item section in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-lesson.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $item ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $item->get_title( 'display' ) ); ?>\u003C\u002Fspan>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-meta.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-meta.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-meta.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-meta.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,39 +1,39 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying item section meta in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-meta.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $item ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$user = learn_press_get_current_user();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-item-meta\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fbefore-' . $item->get_item_type() . '-meta', $item ); ?>\r\n-\r\n-\t\u003C?php if ( $item->is_preview() && $user && ! $user->has_completed_item( $item->get_id(), $course->get_id() ) ) : ?>\r\n-\t\t\u003Cspan class=\"item-meta course-item-preview\"\r\n-\t\t\t  data-preview=\"\u003C?php esc_attr_e( 'Preview', 'learnpress' ); ?>\">\u003C\u002Fspan>\r\n-\r\n-\t\u003C?php else : ?>\r\n-\t\t\u003Cspan class=\"item-meta course-item-status\" title=\"\u003C?php echo esc_attr( $item->get_status_title() ); ?>\">\u003C\u002Fspan>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fafter-' . $item->get_item_type() . '-meta', $item ); ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying item section meta in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-meta.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $item ) ) {\n+\treturn;\n+}\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\n+$user = learn_press_get_current_user();\n+?>\n+\n+\u003Cdiv class=\"course-item-meta\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fbefore-' . $item->get_item_type() . '-meta', $item ); ?>\n+\n+\t\u003C?php if ( $item->is_preview() && $user && ! $user->has_completed_item( $item->get_id(), $course->get_id() ) ) : ?>\n+\t\t\u003Cspan class=\"item-meta course-item-preview\"\n+\t\t\t  data-preview=\"\u003C?php esc_attr_e( 'Preview', 'learnpress' ); ?>\">\u003C\u002Fspan>\n+\n+\t\u003C?php else : ?>\n+\t\t\u003Cspan class=\"item-meta course-item-status\" title=\"\u003C?php echo esc_attr( $item->get_status_title() ); ?>\">\u003C\u002Fspan>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fcourse-section-item\u002Fafter-' . $item->get_item_type() . '-meta', $item ); ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,19 +1,19 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying quiz item section in single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $item ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $item->get_title( 'display' ) ); ?>\u003C\u002Fspan>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying quiz item section in single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Fsection\u002Fitem-quiz.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $item ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cspan class=\"item-name\">\u003C?php echo esc_html( $item->get_title( 'display' ) ); ?>\u003C\u002Fspan>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fcourse-extra.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fcourse-extra.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fcourse-extra.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fcourse-extra.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,31 +1,31 @@\n-\u003C?php\r\n-\u002F**\r\n- * Use for Course Extra widget.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-if ( ! isset( $type ) || ! isset( $content ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-?>\r\n-\u003Cdiv class=\"course-extras style-checks \u003C?php echo esc_attr( $type ); ?>\">\r\n-\t\u003C?php if ( isset( $title ) ) { ?>\r\n-\t\t\u003Ch4 class=\"course-extras__title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh4>\r\n-\t\u003C?php } ?>\r\n-\r\n-\t\u003Cdiv class=\"course-extras__content\">\r\n-\t\t\u003C?php if ( is_array( $content ) ) { ?>\r\n-\t\t\t\u003Cul>\r\n-\t\t\t\t\u003C?php foreach ( $content as $line ) { ?>\r\n-\t\t\t\t\t\u003Cli>\u003C?php echo wp_kses_post( $line ); ?>\u003C\u002Fli>\r\n-\t\t\t\t\u003C?php } ?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C?php } else { ?>\r\n-\t\t\t\u003C?php echo wp_kses_post( $content ); ?>\r\n-\t\t\u003C?php } ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Use for Course Extra widget.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+if ( ! isset( $type ) || ! isset( $content ) ) {\n+\treturn;\n+}\n+\n+?>\n+\u003Cdiv class=\"course-extras style-checks \u003C?php echo esc_attr( $type ); ?>\">\n+\t\u003C?php if ( isset( $title ) ) { ?>\n+\t\t\u003Ch4 class=\"course-extras__title\">\u003C?php echo esc_html( $title ); ?>\u003C\u002Fh4>\n+\t\u003C?php } ?>\n+\n+\t\u003Cdiv class=\"course-extras__content\">\n+\t\t\u003C?php if ( is_array( $content ) ) { ?>\n+\t\t\t\u003Cul>\n+\t\t\t\t\u003C?php foreach ( $content as $line ) { ?>\n+\t\t\t\t\t\u003Cli>\u003C?php echo wp_kses_post( $line ); ?>\u003C\u002Fli>\n+\t\t\t\t\u003C?php } ?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C?php } else { ?>\n+\t\t\t\u003C?php echo wp_kses_post( $content ); ?>\n+\t\t\u003C?php } ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fpreview.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fpreview.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fpreview.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fpreview.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-sidebar-preview\">\r\n-\t\u003Cdiv class=\"media-preview\">\r\n-\t\t\u003C?php\r\n-\t\tLearnPress::instance()->template( 'course' )->course_media_preview();\r\n-\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fbadge-featured' );\r\n-\t\t?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php\r\n-\t\u002F\u002F Price box.\r\n-\tLearnPress::instance()->template( 'course' )->course_pricing();\r\n-\r\n-\t\u002F\u002F Graduation.\r\n-\tLearnPress::instance()->template( 'course' )->course_graduation();\r\n-\r\n-\t\u002F\u002F Buttons.\r\n-\tLearnPress::instance()->template( 'course' )->course_buttons();\r\n-\r\n-\tLearnPress::instance()->template( 'course' )->user_time();\r\n-\r\n-\tLearnPress::instance()->template( 'course' )->user_progress();\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+?>\n+\n+\u003Cdiv class=\"course-sidebar-preview\">\n+\t\u003Cdiv class=\"media-preview\">\n+\t\t\u003C?php\n+\t\tLearnPress::instance()->template( 'course' )->course_media_preview();\n+\t\tlearn_press_get_template( 'loop\u002Fcourse\u002Fbadge-featured' );\n+\t\t?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php\n+\t\u002F\u002F Price box.\n+\tLearnPress::instance()->template( 'course' )->course_pricing();\n+\n+\t\u002F\u002F Graduation.\n+\tLearnPress::instance()->template( 'course' )->course_graduation();\n+\n+\t\u002F\u002F Buttons.\n+\tLearnPress::instance()->template( 'course' )->course_buttons();\n+\n+\tLearnPress::instance()->template( 'course' )->user_time();\n+\n+\tLearnPress::instance()->template( 'course' )->user_progress();\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-progress.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,109 +1,109 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying progress of single course.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.3\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\QuizPostModel;\r\n-use LearnPress\\Models\\UserItems\\UserCourseModel;\r\n-use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $user ) || ! isset( $course ) || ! isset( $course_data ) || ! isset( $course_results ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$passing_condition                = $course->get_passing_condition();\r\n-$progress_items_completed_percent = 0;\r\n-$userCourseModel                  = UserCourseModel::find( $user->get_id(), $course->get_id(), true );\r\n-if ( $userCourseModel && $user->get_id() > 0 ) {\r\n-\t$courseModel     = $userCourseModel->get_course_model();\r\n-\t$calculate       = $userCourseModel->calculate_course_results();\r\n-\t$total_items     = $courseModel->count_items();\r\n-\t$evaluation_type = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() );\r\n-\tif ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) {\r\n-\t\t$final_quiz = $courseModel->get_final_quiz();\r\n-\t\tif ( $final_quiz ) {\r\n-\t\t\t$quizModel         = QuizPostModel::find( $final_quiz, true );\r\n-\t\t\t$passing_condition = $quizModel->get_passing_grade();\r\n-\t\t}\r\n-\t}\r\n-\r\n-\t$progress_items_completed_percent = round(\r\n-\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\r\n-\t\t2\r\n-\t);\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-results-progress\">\r\n-\t\u003C?php\r\n-\tif ( ! empty( $course_results['items'] ) && $course_results['items']['lesson']['total'] ) :\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"items-progress\">\r\n-\t\t\t\u003Ch4 class=\"items-progress__heading\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Lessons completed:', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fh4>\r\n-\t\t\t\u003Cspan\r\n-\t\t\t\tclass=\"number\">\u003C?php echo esc_html( sprintf( '%1$d\u002F%2$d', $course_results['items']['lesson']['completed'], $course_results['items']['lesson']['total'] ) ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php\r\n-\tif ( ! empty( $course_results['items'] ) && $course_results['items']['quiz']['total'] ) :\r\n-\t\t$quiz_false = $course_results['items']['quiz']['completed'] - $course_results['items']['quiz']['passed'];\r\n-\t\t?>\r\n-\t\t\u003Cdiv class=\"items-progress\">\r\n-\t\t\t\u003Ch4 class=\"items-progress__heading\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Quizzes finished:', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fh4>\r\n-\t\t\t\u003Cspan class=\"number\"\r\n-\t\t\t\t\ttitle=\"\u003C?php echo esc_attr( sprintf( __( 'Failed %1$d, Passed %2$d', 'learnpress' ), $quiz_false, $course_results['items']['quiz']['passed'] ) ); ?>\">\u003C?php printf( __( '%1$d\u002F%2$d', 'learnpress' ), $course_results['items']['quiz']['completed'], $course_results['items']['quiz']['total'] ); ?>\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fuser-item-progress', $course_results, $course_data, $user, $course ); ?>\r\n-\r\n-\t\u003Cdiv class=\"course-progress\" style=\"margin-top: 10px;\">\r\n-\t\t\u003Ch4 class=\"items-progress__heading\">\r\n-\t\t\t\u003C?php esc_html_e( 'Course progress:', 'learnpress' ); ?>\r\n-\t\t\u003C\u002Fh4>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-course-status\">\r\n-\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\u003C?php echo esc_html( $progress_items_completed_percent ); ?>\r\n-\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php\r\n-\techo UserCourseTemplate::instance()->html_items_completed_progress_bar( $userCourseModel );\r\n-\t?>\r\n-\r\n-\t\u003Cdiv class=\"course-progress\" style=\"margin-top: 10px\">\r\n-\t\t\u003Ch4 class=\"items-progress__heading\">\r\n-\t\t\t\u003C?php\r\n-\t\t\tesc_html_e( 'Passing grade', 'learnpress' );\r\n-\t\t\tprintf(\r\n-\t\t\t\t' \u003Cspan class=\"lp-icon-question-circle\" title=\"%s\">\u003C\u002Fspan>',\r\n-\t\t\t\tsprintf(\r\n-\t\t\t\t\t'%s. %s',\r\n-\t\t\t\t\tisset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',\r\n-\t\t\t\t\tesc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )\r\n-\t\t\t\t)\r\n-\t\t\t)\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fh4>\r\n-\r\n-\t\t\u003Cdiv class=\"lp-course-status\">\r\n-\t\t\t\u003Cspan class=\"number\">\r\n-\t\t\t\t\u003C?php echo esc_html( $course_results['result'] ); ?>\r\n-\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\r\n-\t\t\t\u003C\u002Fspan>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying progress of single course.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.3\n+ *\u002F\n+\n+use LearnPress\\Models\\QuizPostModel;\n+use LearnPress\\Models\\UserItems\\UserCourseModel;\n+use LearnPress\\TemplateHooks\\UserItem\\UserCourseTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $user ) || ! isset( $course ) || ! isset( $course_data ) || ! isset( $course_results ) ) {\n+\treturn;\n+}\n+\n+$passing_condition                = $course->get_passing_condition();\n+$progress_items_completed_percent = 0;\n+$userCourseModel                  = UserCourseModel::find( $user->get_id(), $course->get_id(), true );\n+if ( $userCourseModel && $user->get_id() > 0 ) {\n+\t$courseModel     = $userCourseModel->get_course_model();\n+\t$calculate       = $userCourseModel->calculate_course_results();\n+\t$total_items     = $courseModel->count_items();\n+\t$evaluation_type = $courseModel::get_evaluation_types( $courseModel->get_evaluation_type() );\n+\tif ( array_key_first( $evaluation_type ) === 'evaluate_final_quiz' ) {\n+\t\t$final_quiz = $courseModel->get_final_quiz();\n+\t\tif ( $final_quiz ) {\n+\t\t\t$quizModel         = QuizPostModel::find( $final_quiz, true );\n+\t\t\t$passing_condition = $quizModel->get_passing_grade();\n+\t\t}\n+\t}\n+\n+\t$progress_items_completed_percent = round(\n+\t\t$total_items > 0 ? $calculate['completed_items'] * 100 \u002F $total_items : 0,\n+\t\t2\n+\t);\n+}\n+?>\n+\n+\u003Cdiv class=\"course-results-progress\">\n+\t\u003C?php\n+\tif ( ! empty( $course_results['items'] ) && $course_results['items']['lesson']['total'] ) :\n+\t\t?>\n+\t\t\u003Cdiv class=\"items-progress\">\n+\t\t\t\u003Ch4 class=\"items-progress__heading\">\n+\t\t\t\t\u003C?php esc_html_e( 'Lessons completed:', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fh4>\n+\t\t\t\u003Cspan\n+\t\t\t\tclass=\"number\">\u003C?php echo esc_html( sprintf( '%1$d\u002F%2$d', $course_results['items']['lesson']['completed'], $course_results['items']['lesson']['total'] ) ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php\n+\tif ( ! empty( $course_results['items'] ) && $course_results['items']['quiz']['total'] ) :\n+\t\t$quiz_false = $course_results['items']['quiz']['completed'] - $course_results['items']['quiz']['passed'];\n+\t\t?>\n+\t\t\u003Cdiv class=\"items-progress\">\n+\t\t\t\u003Ch4 class=\"items-progress__heading\">\n+\t\t\t\t\u003C?php esc_html_e( 'Quizzes finished:', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fh4>\n+\t\t\t\u003Cspan class=\"number\"\n+\t\t\t\t\ttitle=\"\u003C?php echo esc_attr( sprintf( __( 'Failed %1$d, Passed %2$d', 'learnpress' ), $quiz_false, $course_results['items']['quiz']['passed'] ) ); ?>\">\u003C?php printf( __( '%1$d\u002F%2$d', 'learnpress' ), $course_results['items']['quiz']['completed'], $course_results['items']['quiz']['total'] ); ?>\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\n+\t\u003C?php do_action( 'learn-press\u002Fuser-item-progress', $course_results, $course_data, $user, $course ); ?>\n+\n+\t\u003Cdiv class=\"course-progress\" style=\"margin-top: 10px;\">\n+\t\t\u003Ch4 class=\"items-progress__heading\">\n+\t\t\t\u003C?php esc_html_e( 'Course progress:', 'learnpress' ); ?>\n+\t\t\u003C\u002Fh4>\n+\n+\t\t\u003Cdiv class=\"lp-course-status\">\n+\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\u003C?php echo esc_html( $progress_items_completed_percent ); ?>\n+\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php\n+\techo UserCourseTemplate::instance()->html_items_completed_progress_bar( $userCourseModel );\n+\t?>\n+\n+\t\u003Cdiv class=\"course-progress\" style=\"margin-top: 10px\">\n+\t\t\u003Ch4 class=\"items-progress__heading\">\n+\t\t\t\u003C?php\n+\t\t\tesc_html_e( 'Passing grade', 'learnpress' );\n+\t\t\tprintf(\n+\t\t\t\t' \u003Cspan class=\"lp-icon-question-circle\" title=\"%s\">\u003C\u002Fspan>',\n+\t\t\t\tsprintf(\n+\t\t\t\t\t'%s. %s',\n+\t\t\t\t\tisset( $evaluation_type['label'] ) ? esc_attr( $evaluation_type['label'] ) : '',\n+\t\t\t\t\tesc_attr( sprintf( __( 'Passing condition: %s%%', 'learnpress' ), $passing_condition ) )\n+\t\t\t\t)\n+\t\t\t)\n+\t\t\t?>\n+\t\t\u003C\u002Fh4>\n+\n+\t\t\u003Cdiv class=\"lp-course-status\">\n+\t\t\t\u003Cspan class=\"number\">\n+\t\t\t\t\u003C?php echo esc_html( $course_results['result'] ); ?>\n+\t\t\t\t\u003Cspan class=\"percentage-sign\">%\u003C\u002Fspan>\n+\t\t\t\u003C\u002Fspan>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-time.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-time.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-time.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar\u002Fuser-time.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying user time on course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.2\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-if ( ! isset( $data ) || ! isset( $data['start_time'] ) || ! isset( $data['end_time'] )\r\n-\t|| ! isset( $data['status'] ) || ! isset( $data['expiration_time'] ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-\u002F**\r\n- * @var LP_Datetime $start_time\r\n- * @var LP_Datetime $end_time\r\n- * @var LP_Datetime $expiration_time\r\n- *\u002F\r\n-$start_time      = $data['start_time'];\r\n-$end_time        = $data['end_time'];\r\n-$status          = $data['status'];\r\n-$expiration_time = $data['expiration_time'];\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-time\">\r\n-\t\u003Cp class=\"course-time-row\">\r\n-\t\t\u003Cstrong>\u003C?php esc_html_e( 'You started on:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\t\u003Ctime class=\"entry-date enrolled\">\u003C?php echo esc_html( $start_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\r\n-\t\u003C\u002Fp>\r\n-\t\u003C?php if ( in_array( $status, array( learn_press_user_item_in_progress_slug(), 'enrolled' ) ) ) : ?>\r\n-\t\t\u003C?php if ( $expiration_time ) : ?>\r\n-\t\t\t\u003Cp class=\"course-time-row\">\r\n-\t\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'Course will end:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\t\u003Ctime class=\"entry-date expire\">\u003C?php echo esc_html( $expiration_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php else : ?>\r\n-\t\t\t\u003Cp class=\"course-time-row\">\r\n-\t\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'Duration:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\t\u003C?php esc_html_e( 'Lifetime', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fp>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C?php elseif ( $status === 'finished' && $end_time ) : ?>\r\n-\t\t\u003Cp class=\"course-time-row\">\r\n-\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'You finished on:', 'learnpress' ); ?>\u003C\u002Fstrong>\r\n-\t\t\t\u003Ctime class=\"entry-date finished\">\u003C?php echo esc_html( $end_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\r\n-\t\t\u003C\u002Fp>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying user time on course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.2\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+if ( ! isset( $data ) || ! isset( $data['start_time'] ) || ! isset( $data['end_time'] )\n+\t|| ! isset( $data['status'] ) || ! isset( $data['expiration_time'] ) ) {\n+\treturn;\n+}\n+\n+\u002F**\n+ * @var LP_Datetime $start_time\n+ * @var LP_Datetime $end_time\n+ * @var LP_Datetime $expiration_time\n+ *\u002F\n+$start_time      = $data['start_time'];\n+$end_time        = $data['end_time'];\n+$status          = $data['status'];\n+$expiration_time = $data['expiration_time'];\n+?>\n+\n+\u003Cdiv class=\"course-time\">\n+\t\u003Cp class=\"course-time-row\">\n+\t\t\u003Cstrong>\u003C?php esc_html_e( 'You started on:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\t\u003Ctime class=\"entry-date enrolled\">\u003C?php echo esc_html( $start_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\n+\t\u003C\u002Fp>\n+\t\u003C?php if ( in_array( $status, array( learn_press_user_item_in_progress_slug(), 'enrolled' ) ) ) : ?>\n+\t\t\u003C?php if ( $expiration_time ) : ?>\n+\t\t\t\u003Cp class=\"course-time-row\">\n+\t\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'Course will end:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\t\t\t\u003Ctime class=\"entry-date expire\">\u003C?php echo esc_html( $expiration_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C?php else : ?>\n+\t\t\t\u003Cp class=\"course-time-row\">\n+\t\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'Duration:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\t\t\t\u003C?php esc_html_e( 'Lifetime', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fp>\n+\t\t\u003C?php endif; ?>\n+\t\u003C?php elseif ( $status === 'finished' && $end_time ) : ?>\n+\t\t\u003Cp class=\"course-time-row\">\n+\t\t\t\u003Cstrong>\u003C?php esc_html_e( 'You finished on:', 'learnpress' ); ?>\u003C\u002Fstrong>\n+\t\t\t\u003Ctime class=\"entry-date finished\">\u003C?php echo esc_html( $end_time->format( 'i18n' ) ); ?>\u003C\u002Ftime>\n+\t\t\u003C\u002Fp>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fsidebar.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fsidebar.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,57 +1,57 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying course sidebar.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Hide sidebar if there is no content\r\n- *\u002F\r\n-if ( ! is_active_sidebar( 'course-sidebar' ) && ! LearnPress::instance()->template( 'course' )->has_sidebar() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Caside class=\"course-summary-sidebar\">\r\n-\t\u003Cdiv class=\"course-summary-sidebar__inner\">\r\n-\t\t\u003Cdiv class=\"course-sidebar-top\">\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\r\n-\t\t\t * @since 4.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fbefore-course-summary-sidebar' );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\r\n-\t\t\t * @since 4.0.0\r\n-\t\t\t *\r\n-\t\t\t * @see   LP_Template_Course::course_sidebar_preview() - 10\r\n-\t\t\t * @see   LP_Template_Course::course_featured_review() - 20\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fcourse-summary-sidebar' );\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\r\n-\t\t\t * @since 4.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fafter-course-summary-sidebar' );\r\n-\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003C?php if ( is_active_sidebar( 'course-sidebar' ) ) : ?>\r\n-\t\t\t\u003Cdiv class=\"course-sidebar-secondary\">\r\n-\t\t\t\t\u003C?php dynamic_sidebar( 'course-sidebar' ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Faside>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying course sidebar.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Hide sidebar if there is no content\n+ *\u002F\n+if ( ! is_active_sidebar( 'course-sidebar' ) && ! LearnPress::instance()->template( 'course' )->has_sidebar() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Caside class=\"course-summary-sidebar\">\n+\t\u003Cdiv class=\"course-summary-sidebar__inner\">\n+\t\t\u003Cdiv class=\"course-sidebar-top\">\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\n+\t\t\t * @since 4.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fbefore-course-summary-sidebar' );\n+\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\n+\t\t\t * @since 4.0.0\n+\t\t\t *\n+\t\t\t * @see   LP_Template_Course::course_sidebar_preview() - 10\n+\t\t\t * @see   LP_Template_Course::course_featured_review() - 20\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fcourse-summary-sidebar' );\n+\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\n+\t\t\t * @since 4.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fafter-course-summary-sidebar' );\n+\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003C?php if ( is_active_sidebar( 'course-sidebar' ) ) : ?>\n+\t\t\t\u003Cdiv class=\"course-sidebar-secondary\">\n+\t\t\t\t\u003C?php dynamic_sidebar( 'course-sidebar' ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Faside>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,65 +1,65 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying curriculum tab of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-$user   = learn_press_get_current_user();\r\n-\r\n-if ( ! $course || ! $user ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$can_view_content_course = $user->can_view_content_course( $course->get_id() );\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-curriculum learnpress-course-curriculum\" id=\"learn-press-course-curriculum\">\r\n-\t\u003Cdiv class=\"curriculum-scrollable\">\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fbefore-single-course-curriculum' ); ?>\r\n-\r\n-\t\t\u003C?php\r\n-\t\t$curriculum  = $course->get_curriculum();\r\n-\t\t$user_course = $user->get_course_data( get_the_ID() );\r\n-\t\t$user        = learn_press_get_current_user();\r\n-\r\n-\t\tif ( $curriculum ) :\r\n-\t\t\t?>\r\n-\t\t\t\u003Cul class=\"curriculum-sections\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tforeach ( $curriculum as $section ) {\r\n-\t\t\t\t\t$args = [\r\n-\t\t\t\t\t\t'section'                 => $section,\r\n-\t\t\t\t\t\t'can_view_content_course' => $can_view_content_course,\r\n-\t\t\t\t\t\t'user_course'             => $user_course,\r\n-\t\t\t\t\t\t'user'                    => $user,\r\n-\t\t\t\t\t];\r\n-\r\n-\t\t\t\t\tlearn_press_get_template( 'single-course\u002Floop-section.php', $args );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\r\n-\t\t\u003C?php else : ?>\r\n-\t\t\t\u003C?php\r\n-\t\t\techo wp_kses_post(\r\n-\t\t\t\tapply_filters(\r\n-\t\t\t\t\t'learnpress\u002Fcourse\u002Fcurriculum\u002Fempty',\r\n-\t\t\t\t\tesc_html__( 'The curriculum is empty', 'learnpress' )\r\n-\t\t\t\t)\r\n-\t\t\t);\r\n-\t\t\t?>\r\n-\t\t\u003C?php endif ?>\r\n-\r\n-\t\t\u003C?php do_action( 'learn-press\u002Fafter-single-course-curriculum' ); ?>\r\n-\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying curriculum tab of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+$user   = learn_press_get_current_user();\n+\n+if ( ! $course || ! $user ) {\n+\treturn;\n+}\n+\n+$can_view_content_course = $user->can_view_content_course( $course->get_id() );\n+?>\n+\n+\u003Cdiv class=\"course-curriculum learnpress-course-curriculum\" id=\"learn-press-course-curriculum\">\n+\t\u003Cdiv class=\"curriculum-scrollable\">\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fbefore-single-course-curriculum' ); ?>\n+\n+\t\t\u003C?php\n+\t\t$curriculum  = $course->get_curriculum();\n+\t\t$user_course = $user->get_course_data( get_the_ID() );\n+\t\t$user        = learn_press_get_current_user();\n+\n+\t\tif ( $curriculum ) :\n+\t\t\t?>\n+\t\t\t\u003Cul class=\"curriculum-sections\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tforeach ( $curriculum as $section ) {\n+\t\t\t\t\t$args = [\n+\t\t\t\t\t\t'section'                 => $section,\n+\t\t\t\t\t\t'can_view_content_course' => $can_view_content_course,\n+\t\t\t\t\t\t'user_course'             => $user_course,\n+\t\t\t\t\t\t'user'                    => $user,\n+\t\t\t\t\t];\n+\n+\t\t\t\t\tlearn_press_get_template( 'single-course\u002Floop-section.php', $args );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ful>\n+\n+\t\t\u003C?php else : ?>\n+\t\t\t\u003C?php\n+\t\t\techo wp_kses_post(\n+\t\t\t\tapply_filters(\n+\t\t\t\t\t'learnpress\u002Fcourse\u002Fcurriculum\u002Fempty',\n+\t\t\t\t\tesc_html__( 'The curriculum is empty', 'learnpress' )\n+\t\t\t\t)\n+\t\t\t);\n+\t\t\t?>\n+\t\t\u003C?php endif ?>\n+\n+\t\t\u003C?php do_action( 'learn-press\u002Fafter-single-course-curriculum' ); ?>\n+\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum-v2.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum-v2.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum-v2.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Fcurriculum-v2.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,51 +1,51 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying curriculum tab of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.6\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( empty( $args ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( isset( $args['sections'] ) && isset( $args['filters'] ) ) {\r\n-\t$sections = $args['sections'];\r\n-\t$filters  = $args['filters'];\r\n-} else {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-curriculum\" id=\"learn-press-course-curriculum\">\r\n-\t\u003Cdiv class=\"curriculum-scrollable\">\r\n-\t\t\u003C?php if ( $sections['total'] > 0 ) : ?>\r\n-\t\t\t\u003Cul class=\"curriculum-sections\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tforeach ( $sections['results'] as $section ) :\r\n-\t\t\t\t\t$args['section'] = $section;\r\n-\t\t\t\t\tlearn_press_get_template( 'loop\u002Fsingle-course\u002Floop-section', $args );\r\n-\t\t\t\tendforeach;\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Ful>\r\n-\t\t\u003C?php else : ?>\r\n-\t\t\t\u003C?php\r\n-\t\t\techo wp_kses_post( apply_filters( 'learnpress\u002Fcourse\u002Fcurriculum\u002Fempty', esc_html__( 'The curriculum is empty', 'learnpress' ) ) );\r\n-\t\t\t?>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003C?php if ( $sections['pages'] > 1 && $sections['pages'] > $filters->page ) : ?>\r\n-\t\t\u003Cdiv class=\"curriculum-more\">\r\n-\t\t\t\u003Cbutton class=\"curriculum-more__button\" data-page=\"\u003C?php echo esc_attr( $filters->page ); ?>\">\r\n-\t\t\t\t\u003C?php esc_html_e( 'Show more Sections', 'learnpress' ); ?>\r\n-\t\t\t\u003C\u002Fbutton>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C?php endif; ?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying curriculum tab of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Fcurriculum.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.6\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( empty( $args ) ) {\n+\treturn;\n+}\n+\n+if ( isset( $args['sections'] ) && isset( $args['filters'] ) ) {\n+\t$sections = $args['sections'];\n+\t$filters  = $args['filters'];\n+} else {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-curriculum\" id=\"learn-press-course-curriculum\">\n+\t\u003Cdiv class=\"curriculum-scrollable\">\n+\t\t\u003C?php if ( $sections['total'] > 0 ) : ?>\n+\t\t\t\u003Cul class=\"curriculum-sections\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tforeach ( $sections['results'] as $section ) :\n+\t\t\t\t\t$args['section'] = $section;\n+\t\t\t\t\tlearn_press_get_template( 'loop\u002Fsingle-course\u002Floop-section', $args );\n+\t\t\t\tendforeach;\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Ful>\n+\t\t\u003C?php else : ?>\n+\t\t\t\u003C?php\n+\t\t\techo wp_kses_post( apply_filters( 'learnpress\u002Fcourse\u002Fcurriculum\u002Fempty', esc_html__( 'The curriculum is empty', 'learnpress' ) ) );\n+\t\t\t?>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003C?php if ( $sections['pages'] > 1 && $sections['pages'] > $filters->page ) : ?>\n+\t\t\u003Cdiv class=\"curriculum-more\">\n+\t\t\t\u003Cbutton class=\"curriculum-more__button\" data-page=\"\u003C?php echo esc_attr( $filters->page ); ?>\">\n+\t\t\t\t\u003C?php esc_html_e( 'Show more Sections', 'learnpress' ); ?>\n+\t\t\t\u003C\u002Fbutton>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C?php endif; ?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ffaqs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ffaqs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ffaqs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ffaqs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,35 +1,35 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying FAQs tab of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Ffaqs.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $question ) || ! isset( $answer ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$unique_key = uniqid();\r\n-?>\r\n-\r\n-\u003Cinput type=\"checkbox\" name=\"course-faqs-box-ratio\" id=\"course-faqs-box-ratio-\u003C?php echo sanitize_key( $unique_key ); ?>\"\u002F>\r\n-\r\n-\u003C?php if ( $question && $answer ) : ?>\r\n-\t\u003Cdiv class=\"course-faqs-box\">\r\n-\t\t\u003Clabel class=\"course-faqs-box__title\" for=\"course-faqs-box-ratio-\u003C?php echo sanitize_key( $unique_key ); ?>\">\r\n-\t\t\t\u003C?php echo esc_html( $question ); ?>\r\n-\t\t\u003C\u002Flabel>\r\n-\r\n-\t\t\u003Cdiv class=\"course-faqs-box__content\">\r\n-\t\t\t\u003Cdiv class=\"course-faqs-box__content-inner\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $answer ); ?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C?php endif ?>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying FAQs tab of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Ffaqs.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $question ) || ! isset( $answer ) ) {\n+\treturn;\n+}\n+\n+$unique_key = uniqid();\n+?>\n+\n+\u003Cinput type=\"checkbox\" name=\"course-faqs-box-ratio\" id=\"course-faqs-box-ratio-\u003C?php echo sanitize_key( $unique_key ); ?>\"\u002F>\n+\n+\u003C?php if ( $question && $answer ) : ?>\n+\t\u003Cdiv class=\"course-faqs-box\">\n+\t\t\u003Clabel class=\"course-faqs-box__title\" for=\"course-faqs-box-ratio-\u003C?php echo sanitize_key( $unique_key ); ?>\">\n+\t\t\t\u003C?php echo esc_html( $question ); ?>\n+\t\t\u003C\u002Flabel>\n+\n+\t\t\u003Cdiv class=\"course-faqs-box__content\">\n+\t\t\t\u003Cdiv class=\"course-faqs-box__content-inner\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $answer ); ?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\u003C?php endif ?>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Finstructor.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Finstructor.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Finstructor.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Finstructor.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,86 +1,86 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying instructor of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Finstructor.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.3.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-\u002F**\r\n- * @var LP_User $instructor\r\n- *\u002F\r\n-$instructor               = $course->get_instructor();\r\n-$singleInstructorTemplate = SingleInstructorTemplate::instance();\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-author\">\r\n-\r\n-\t\u003C?php do_action( 'learn-press\u002Fbefore-single-course-instructor' ); ?>\r\n-\r\n-\t\u003Cdiv class=\"lp-course-author\">\r\n-\t\t\u003Cdiv class=\"course-author__pull-left\">\r\n-\t\t\t\u003C?php echo wp_kses_post( $instructor->get_profile_picture() ); ?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\u003Cdiv class=\"course-author__pull-right\">\r\n-\t\t\t\u003Ch4 class=\"author-title\">\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\u003C\u002Fh4>\r\n-\t\t\t\u003C?php\r\n-\t\t\t\techo $singleInstructorTemplate->html_social( $instructor );\r\n-\t\t\t?>\r\n-\t\t\t\u003Cdiv class=\"author-description\">\r\n-\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * LP Hook\r\n-\t\t\t\t *\r\n-\t\t\t\t * @since 4.0.0\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tdo_action( 'learn-press\u002Fbegin-course-instructor-description', $instructor );\r\n-\r\n-\t\t\t\techo wp_kses_post( $instructor->get_description() );\r\n-\r\n-\t\t\t\t\u002F**\r\n-\t\t\t\t * LP Hook\r\n-\t\t\t\t *\r\n-\t\t\t\t * @since 4.0.0\r\n-\t\t\t\t *\u002F\r\n-\t\t\t\tdo_action( 'learn-press\u002Fend-course-instructor-description', $instructor );\r\n-\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\r\n-\t\t\t\u003C?php\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\r\n-\t\t\t * @since 4.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fafter-course-instructor-description', $instructor );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003C?php\r\n-\r\n-\t\t\t\u002F**\r\n-\t\t\t * LP Hook\r\n-\t\t\t *\r\n-\t\t\t * @since 4.0.0\r\n-\t\t\t *\u002F\r\n-\t\t\tdo_action( 'learn-press\u002Fafter-course-instructor-socials', $instructor );\r\n-\r\n-\t\t\t?>\r\n-\t\t\u003C\u002Fdiv>\r\n-\t\u003C\u002Fdiv>\r\n-\t\u003C?php do_action( 'learn-press\u002Fafter-single-course-instructor' ); ?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying instructor of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Finstructor.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.3.1\n+ *\u002F\n+\n+use LearnPress\\TemplateHooks\\Instructor\\SingleInstructorTemplate;\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+\u002F**\n+ * @var LP_User $instructor\n+ *\u002F\n+$instructor               = $course->get_instructor();\n+$singleInstructorTemplate = SingleInstructorTemplate::instance();\n+?>\n+\n+\u003Cdiv class=\"course-author\">\n+\n+\t\u003C?php do_action( 'learn-press\u002Fbefore-single-course-instructor' ); ?>\n+\n+\t\u003Cdiv class=\"lp-course-author\">\n+\t\t\u003Cdiv class=\"course-author__pull-left\">\n+\t\t\t\u003C?php echo wp_kses_post( $instructor->get_profile_picture() ); ?>\n+\t\t\u003C\u002Fdiv>\n+\n+\t\t\u003Cdiv class=\"course-author__pull-right\">\n+\t\t\t\u003Ch4 class=\"author-title\">\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\u003C\u002Fh4>\n+\t\t\t\u003C?php\n+\t\t\t\techo $singleInstructorTemplate->html_social( $instructor );\n+\t\t\t?>\n+\t\t\t\u003Cdiv class=\"author-description\">\n+\n+\t\t\t\t\u003C?php\n+\t\t\t\t\u002F**\n+\t\t\t\t * LP Hook\n+\t\t\t\t *\n+\t\t\t\t * @since 4.0.0\n+\t\t\t\t *\u002F\n+\t\t\t\tdo_action( 'learn-press\u002Fbegin-course-instructor-description', $instructor );\n+\n+\t\t\t\techo wp_kses_post( $instructor->get_description() );\n+\n+\t\t\t\t\u002F**\n+\t\t\t\t * LP Hook\n+\t\t\t\t *\n+\t\t\t\t * @since 4.0.0\n+\t\t\t\t *\u002F\n+\t\t\t\tdo_action( 'learn-press\u002Fend-course-instructor-description', $instructor );\n+\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\n+\t\t\t\u003C?php\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\n+\t\t\t * @since 4.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fafter-course-instructor-description', $instructor );\n+\t\t\t?>\n+\n+\t\t\t\u003C?php\n+\n+\t\t\t\u002F**\n+\t\t\t * LP Hook\n+\t\t\t *\n+\t\t\t * @since 4.0.0\n+\t\t\t *\u002F\n+\t\t\tdo_action( 'learn-press\u002Fafter-course-instructor-socials', $instructor );\n+\n+\t\t\t?>\n+\t\t\u003C\u002Fdiv>\n+\t\u003C\u002Fdiv>\n+\t\u003C?php do_action( 'learn-press\u002Fafter-single-course-instructor' ); ?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Foverview.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Foverview.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Foverview.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Foverview.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,54 +1,54 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying overview tab of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Foverview.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-\u002F**\r\n- * @var LP_Course $course\r\n- *\u002F\r\n-$course = learn_press_get_course();\r\n-if ( ! $course ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-description\" id=\"learn-press-course-description\">\r\n-\r\n-\t\u003C?php\r\n-\t\u002F**\r\n-\t * @deprecated\r\n-\t *\u002F\r\n-\tdo_action( 'learn_press_begin_single_course_description' );\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fbefore-single-course-description' );\r\n-\r\n-\t\u002F*$content = apply_filters( 'the_content', $course->get_content() );\r\n-\techo str_replace( ']]>', ']]&gt;', $content );*\u002F\r\n-\tlearn_press_echo_vuejs_write_on_php( $course->get_content() );\r\n-\r\n-\t\u002F**\r\n-\t * @since 3.0.0\r\n-\t *\u002F\r\n-\tdo_action( 'learn-press\u002Fafter-single-course-description' );\r\n-\r\n-\t\u002F**\r\n-\t * @deprecated\r\n-\t *\u002F\r\n-\tdo_action( 'learn_press_end_single_course_description' );\r\n-\t?>\r\n-\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying overview tab of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Foverview.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+\u002F**\n+ * @var LP_Course $course\n+ *\u002F\n+$course = learn_press_get_course();\n+if ( ! $course ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-description\" id=\"learn-press-course-description\">\n+\n+\t\u003C?php\n+\t\u002F**\n+\t * @deprecated\n+\t *\u002F\n+\tdo_action( 'learn_press_begin_single_course_description' );\n+\n+\t\u002F**\n+\t * @since 3.0.0\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fbefore-single-course-description' );\n+\n+\t\u002F*$content = apply_filters( 'the_content', $course->get_content() );\n+\techo str_replace( ']]>', ']]&gt;', $content );*\u002F\n+\tlearn_press_echo_vuejs_write_on_php( $course->get_content() );\n+\n+\t\u002F**\n+\t * @since 3.0.0\n+\t *\u002F\n+\tdo_action( 'learn-press\u002Fafter-single-course-description' );\n+\n+\t\u002F**\n+\t * @deprecated\n+\t *\u002F\n+\tdo_action( 'learn_press_end_single_course_description' );\n+\t?>\n+\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ftabs.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ftabs.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ftabs.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftabs\u002Ftabs.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,81 +1,81 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying tab nav of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Ftabs.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-$tabs = learn_press_get_course_tabs();\r\n-\r\n-if ( empty( $tabs ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-$active_tab = 'overview';\r\n-\r\n-\u002F\u002F Show status course\r\n-$lp_user = learn_press_get_current_user();\r\n-\r\n-if ( $lp_user && ! $lp_user instanceof LP_User_Guest ) {\r\n-\t$can_view_course = $lp_user->can_view_content_course( get_the_ID() );\r\n-\r\n-\tif ( ! $can_view_course->flag ) {\r\n-\t\tif ( LP_BLOCK_COURSE_FINISHED === $can_view_course->key ) {\r\n-\t\t\tlearn_press_display_message(\r\n-\t\t\t\tesc_html__( 'You finished this course. This course has been blocked', 'learnpress' ),\r\n-\t\t\t\t'warning'\r\n-\t\t\t);\r\n-\t\t} elseif ( LP_BLOCK_COURSE_DURATION_EXPIRE === $can_view_course->key ) {\r\n-\t\t\tlearn_press_display_message(\r\n-\t\t\t\tesc_html__( 'This course has been blocked for expiration', 'learnpress' ),\r\n-\t\t\t\t'warning'\r\n-\t\t\t);\r\n-\t\t}\r\n-\t}\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv id=\"learn-press-course-tabs\" class=\"course-tabs\">\r\n-\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\r\n-\t\t\u003Cinput type=\"radio\" name=\"learn-press-course-tab-radio\" id=\"tab-\u003C?php echo esc_attr( $key ); ?>-input\"\r\n-\t\t\t\u003C?php checked( $active_tab === $key ); ?> value=\"\u003C?php echo esc_attr( $key ); ?>\"\u002F>\r\n-\t\u003C?php endforeach; ?>\r\n-\t\u003Cdiv class=\"wrapper-course-nav-tabs TabsDragScroll\">\r\n- \t\t\u003Cul class=\"learn-press-nav-tabs course-nav-tabs\" data-tabs=\"\u003C?php echo esc_attr( count( $tabs ) ); ?>\">\r\n-\t\t\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\t$classes = array( 'course-nav course-nav-tab-' . esc_attr( $key ) );\r\n-\r\n-\t\t\t\tif ( $active_tab === $key ) {\r\n-\t\t\t\t\t$classes[] = 'active';\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\r\n-\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\r\n-\t\t\t\t\t\u003Clabel for=\"tab-\u003C?php echo esc_attr( $key ); ?>-input\">\u003C?php echo esc_html( $tab['title'] ); ?>\u003C\u002Flabel>\r\n-\t\t\t\t\u003C\u002Fli>\r\n-\t\t\t\u003C?php endforeach; ?>\r\n-\t\t\u003C\u002Ful>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"course-tab-panels\">\r\n-\t\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\r\n-\t\t\t\u003Cdiv class=\"course-tab-panel-\u003C?php echo esc_attr( $key ); ?> course-tab-panel\"\r\n-\t\t\t\tid=\"\u003C?php echo esc_attr( $tab['id'] ); ?>\">\r\n-\t\t\t\t\u003C?php\r\n-\t\t\t\tif ( isset( $tab['callback'] ) && is_callable( $tab['callback'] ) ) {\r\n-\t\t\t\t\tcall_user_func( $tab['callback'], $key, $tab );\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tdo_action( 'learn-press\u002Fcourse-tab-content', $key, $tab );\r\n-\t\t\t\t}\r\n-\t\t\t\t?>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php endforeach; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying tab nav of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftabs\u002Ftabs.php.\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+$tabs = learn_press_get_course_tabs();\n+\n+if ( empty( $tabs ) ) {\n+\treturn;\n+}\n+\n+$active_tab = 'overview';\n+\n+\u002F\u002F Show status course\n+$lp_user = learn_press_get_current_user();\n+\n+if ( $lp_user && ! $lp_user instanceof LP_User_Guest ) {\n+\t$can_view_course = $lp_user->can_view_content_course( get_the_ID() );\n+\n+\tif ( ! $can_view_course->flag ) {\n+\t\tif ( LP_BLOCK_COURSE_FINISHED === $can_view_course->key ) {\n+\t\t\tlearn_press_display_message(\n+\t\t\t\tesc_html__( 'You finished this course. This course has been blocked', 'learnpress' ),\n+\t\t\t\t'warning'\n+\t\t\t);\n+\t\t} elseif ( LP_BLOCK_COURSE_DURATION_EXPIRE === $can_view_course->key ) {\n+\t\t\tlearn_press_display_message(\n+\t\t\t\tesc_html__( 'This course has been blocked for expiration', 'learnpress' ),\n+\t\t\t\t'warning'\n+\t\t\t);\n+\t\t}\n+\t}\n+}\n+?>\n+\n+\u003Cdiv id=\"learn-press-course-tabs\" class=\"course-tabs\">\n+\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\n+\t\t\u003Cinput type=\"radio\" name=\"learn-press-course-tab-radio\" id=\"tab-\u003C?php echo esc_attr( $key ); ?>-input\"\n+\t\t\t\u003C?php checked( $active_tab === $key ); ?> value=\"\u003C?php echo esc_attr( $key ); ?>\"\u002F>\n+\t\u003C?php endforeach; ?>\n+\t\u003Cdiv class=\"wrapper-course-nav-tabs TabsDragScroll\">\n+ \t\t\u003Cul class=\"learn-press-nav-tabs course-nav-tabs\" data-tabs=\"\u003C?php echo esc_attr( count( $tabs ) ); ?>\">\n+\t\t\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\n+\t\t\t\t\u003C?php\n+\t\t\t\t$classes = array( 'course-nav course-nav-tab-' . esc_attr( $key ) );\n+\n+\t\t\t\tif ( $active_tab === $key ) {\n+\t\t\t\t\t$classes[] = 'active';\n+\t\t\t\t}\n+\t\t\t\t?>\n+\n+\t\t\t\t\u003Cli class=\"\u003C?php echo esc_attr( implode( ' ', $classes ) ); ?>\">\n+\t\t\t\t\t\u003Clabel for=\"tab-\u003C?php echo esc_attr( $key ); ?>-input\">\u003C?php echo esc_html( $tab['title'] ); ?>\u003C\u002Flabel>\n+\t\t\t\t\u003C\u002Fli>\n+\t\t\t\u003C?php endforeach; ?>\n+\t\t\u003C\u002Ful>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"course-tab-panels\">\n+\t\t\u003C?php foreach ( $tabs as $key => $tab ) : ?>\n+\t\t\t\u003Cdiv class=\"course-tab-panel-\u003C?php echo esc_attr( $key ); ?> course-tab-panel\"\n+\t\t\t\tid=\"\u003C?php echo esc_attr( $tab['id'] ); ?>\">\n+\t\t\t\t\u003C?php\n+\t\t\t\tif ( isset( $tab['callback'] ) && is_callable( $tab['callback'] ) ) {\n+\t\t\t\t\tcall_user_func( $tab['callback'], $key, $tab );\n+\t\t\t\t} else {\n+\t\t\t\t\tdo_action( 'learn-press\u002Fcourse-tab-content', $key, $tab );\n+\t\t\t\t}\n+\t\t\t\t?>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php endforeach; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fthumbnail.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fthumbnail.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Fthumbnail.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Fthumbnail.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying thumbnail of single course.\r\n- *\r\n- * Do not use in LP4.\r\n- * Will remove after LearnPress and Eduma and all guest update 4.0.0\r\n- *\r\n- * @author   ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  3.0.0\r\n- *\u002F\r\n-\r\n-\u002F**\r\n- * Prevent loading this file directly\r\n- *\u002F\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-global $post;\r\n-\r\n-$course = learn_press_get_course();\r\n-\r\n-if ( ! has_post_thumbnail() ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"course-thumbnail\">\r\n-\t\u003C?php\r\n-\t$image_title   = get_the_title( get_post_thumbnail_id() ) ? esc_attr( get_the_title( get_post_thumbnail_id() ) ) : '';\r\n-\t$image_caption = get_post( get_post_thumbnail_id() ) ? esc_attr( get_post( get_post_thumbnail_id() )->post_excerpt ) : '\"\"';\r\n-\t$image_link    = wp_get_attachment_url( get_post_thumbnail_id() );\r\n-\t$image         = get_the_post_thumbnail(\r\n-\t\t$post->ID,\r\n-\t\tapply_filters( 'single_course_image_size', 'single_course' ),\r\n-\t\tarray(\r\n-\t\t\t'title' => $image_title,\r\n-\t\t\t'alt'   => $image_title,\r\n-\t\t)\r\n-\t);\r\n-\r\n-\techo apply_filters(\r\n-\t\t'learn_press_single_course_image_html',\r\n-\t\tsprintf( '\u003Ca href=\"%s\" class=\"learn-press-single-thumbnail\" title=\"%s\">%s\u003C\u002Fa>', $image_link, $image_caption, $image ),\r\n-\t\t$post->ID\r\n-\t);\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying thumbnail of single course.\n+ *\n+ * Do not use in LP4.\n+ * Will remove after LearnPress and Eduma and all guest update 4.0.0\n+ *\n+ * @author   ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  3.0.0\n+ *\u002F\n+\n+\u002F**\n+ * Prevent loading this file directly\n+ *\u002F\n+defined( 'ABSPATH' ) || exit();\n+\n+global $post;\n+\n+$course = learn_press_get_course();\n+\n+if ( ! has_post_thumbnail() ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"course-thumbnail\">\n+\t\u003C?php\n+\t$image_title   = get_the_title( get_post_thumbnail_id() ) ? esc_attr( get_the_title( get_post_thumbnail_id() ) ) : '';\n+\t$image_caption = get_post( get_post_thumbnail_id() ) ? esc_attr( get_post( get_post_thumbnail_id() )->post_excerpt ) : '\"\"';\n+\t$image_link    = wp_get_attachment_url( get_post_thumbnail_id() );\n+\t$image         = get_the_post_thumbnail(\n+\t\t$post->ID,\n+\t\tapply_filters( 'single_course_image_size', 'single_course' ),\n+\t\tarray(\n+\t\t\t'title' => $image_title,\n+\t\t\t'alt'   => $image_title,\n+\t\t)\n+\t);\n+\n+\techo apply_filters(\n+\t\t'learn_press_single_course_image_html',\n+\t\tsprintf( '\u003Ca href=\"%s\" class=\"learn-press-single-thumbnail\" title=\"%s\">%s\u003C\u002Fa>', $image_link, $image_caption, $image ),\n+\t\t$post->ID\n+\t);\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftitle.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftitle.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course\u002Ftitle.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course\u002Ftitle.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,15 +1,15 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying title of single course.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftitle.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.0\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-?>\r\n-\r\n-\u003Ch1 class=\"course-title\">\u003C?php the_title(); ?>\u003C\u002Fh1>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying title of single course.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fsingle-course\u002Ftitle.php.\n+ *\n+ * @author  ThimPress\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.0\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+?>\n+\n+\u003Ch1 class=\"course-title\">\u003C?php the_title(); ?>\u003C\u002Fh1>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-layout-classic.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-layout-classic.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-layout-classic.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-layout-classic.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course offline.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.2.7.6\r\n- * @version 1.0.0\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Header for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tget_header( 'course' );\r\n-}\r\n-\r\n-$course_id = get_the_ID();\r\n-if ( $course_id ) {\r\n-\t$course = CourseModel::find( $course_id, true );\r\n-\tdo_action( 'learn-press\u002Fsingle-course\u002Flayout\u002Fclassic', $course );\r\n-}\r\n-\r\n-\u002F**\r\n- * Footer for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tget_footer( 'course' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course offline.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.2.7.6\n+ * @version 1.0.0\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Header for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tget_header( 'course' );\n+}\n+\n+$course_id = get_the_ID();\n+if ( $course_id ) {\n+\t$course = CourseModel::find( $course_id, true );\n+\tdo_action( 'learn-press\u002Fsingle-course\u002Flayout\u002Fclassic', $course );\n+}\n+\n+\u002F**\n+ * Footer for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tget_footer( 'course' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-layout.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-layout.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-layout.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-layout.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,47 +1,47 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course offline.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.2.7.6\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Header for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tget_header( 'course' );\r\n-}\r\n-\r\n-$course_id = get_the_ID();\r\n-if ( $course_id ) {\r\n-\t\u002F**\r\n-\t * If course has set password\r\n-\t *\u002F\r\n-\tif ( post_password_required() ) {\r\n-\t\techo '\u003Cdiv class=\"lp-content-area\">';\r\n-\t\techo get_the_password_form();\r\n-\t\techo '\u003C\u002Fdiv>';\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\t$courseModel = CourseModel::find( $course_id, true );\r\n-\tif ( ! $courseModel ) {\r\n-\t\treturn;\r\n-\t}\r\n-\r\n-\tdo_action( 'learn-press\u002Fsingle-course\u002Flayout', $courseModel );\r\n-}\r\n-\r\n-\u002F**\r\n- * Footer for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tget_footer( 'course' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course offline.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.2.7.6\n+ * @version 1.0.1\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Header for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tget_header( 'course' );\n+}\n+\n+$course_id = get_the_ID();\n+if ( $course_id ) {\n+\t\u002F**\n+\t * If course has set password\n+\t *\u002F\n+\tif ( post_password_required() ) {\n+\t\techo '\u003Cdiv class=\"lp-content-area\">';\n+\t\techo get_the_password_form();\n+\t\techo '\u003C\u002Fdiv>';\n+\t\treturn;\n+\t}\n+\n+\t$courseModel = CourseModel::find( $course_id, true );\n+\tif ( ! $courseModel ) {\n+\t\treturn;\n+\t}\n+\n+\tdo_action( 'learn-press\u002Fsingle-course\u002Flayout', $courseModel );\n+}\n+\n+\u002F**\n+ * Footer for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tget_footer( 'course' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-offline.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-offline.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course-offline.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course-offline.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,33 +1,33 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course offline.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.2.7\r\n- * @version 1.0.1\r\n- *\u002F\r\n-\r\n-use LearnPress\\Models\\CourseModel;\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Header for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-header' );\r\n-}\r\n-\r\n-$course_id = get_the_ID();\r\n-if ( $course_id ) {\r\n-\t$course = CourseModel::find( $course_id, true );\r\n-\tdo_action( 'learn-press\u002Fsingle-course\u002Foffline\u002Flayout', $course );\r\n-}\r\n-\r\n-\u002F**\r\n- * Footer for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-footer' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course offline.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.2.7\n+ * @version 1.0.1\n+ *\u002F\n+\n+use LearnPress\\Models\\CourseModel;\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Header for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-header' );\n+}\n+\n+$course_id = get_the_ID();\n+if ( $course_id ) {\n+\t$course = CourseModel::find( $course_id, true );\n+\tdo_action( 'learn-press\u002Fsingle-course\u002Foffline\u002Flayout', $course );\n+}\n+\n+\u002F**\n+ * Footer for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-footer' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fsingle-course.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fsingle-course.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,75 +1,75 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of single course.\r\n- *\r\n- * @author  ThimPress\r\n- * @package LearnPress\u002FTemplates\r\n- * @version 4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit;\r\n-\r\n-\u002F**\r\n- * Header for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-header' );\r\n-}\r\n-\r\n-\u002F**\r\n- * @since 3.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fbefore-main-content' );\r\n-do_action( 'learn-press\u002Fbefore-main-content-single-course' );\r\n-\r\n-\u002F\u002F WP 6.4 with Block theme can't detect single course, so code while ( have_posts() ) not run.\r\n-$args = array(\r\n-\t'name'        => get_query_var( LP_COURSE_CPT ),\r\n-\t'post_type'   => LP_COURSE_CPT,\r\n-\t'numberposts' => 1,\r\n-\t'post_status' => 'any',\r\n-);\r\n-\r\n-\u002F\u002F Fix preview course\r\n-if ( isset( $_REQUEST['preview'] ) &&\r\n-\t( isset( $_REQUEST['p'] ) || isset( $_REQUEST['preview_id'] ) ) ) {\r\n-\tunset( $args['name'] );\r\n-\t$args['include'] = isset( $_REQUEST['p'] ) ? [ (int) $_REQUEST['p'] ] : [ (int) $_REQUEST['preview_id'] ];\r\n-}\r\n-\r\n-$posts = get_posts( $args );\r\n-$post  = $posts[0] ?? 0;\r\n-\r\n-if ( $post instanceof WP_Post ) {\r\n-\tif ( $post->post_status !== 'publish'\r\n-\t\t&& ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $post->post_author ) ) {\r\n-\t\t$template_404 = get_query_template( '404' );\r\n-\t\tif ( $template_404 ) {\r\n-\t\t\tinclude $template_404;\r\n-\t\t}\r\n-\t} else {\r\n-\t\tlearn_press_get_template( 'content-single-course' );\r\n-\t}\r\n-}\r\n-\u002F*while ( have_posts() ) {\r\n-\tthe_post();\r\n-\tlearn_press_get_template( 'content-single-course' );\r\n-}*\u002F\r\n-\r\n-\u002F**\r\n- * @since 3.0.0\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fafter-main-content-single-course' );\r\n-do_action( 'learn-press\u002Fafter-main-content' );\r\n-\r\n-\u002F**\r\n- * LP sidebar\r\n- *\u002F\r\n-do_action( 'learn-press\u002Fsidebar' );\r\n-\r\n-\u002F**\r\n- * Footer for page\r\n- *\u002F\r\n-if ( ! wp_is_block_theme() ) {\r\n-\tdo_action( 'learn-press\u002Ftemplate-footer' );\r\n-}\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of single course.\n+ *\n+ * @author  ThimPress\n+ * @package LearnPress\u002FTemplates\n+ * @version 4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit;\n+\n+\u002F**\n+ * Header for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-header' );\n+}\n+\n+\u002F**\n+ * @since 3.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fbefore-main-content' );\n+do_action( 'learn-press\u002Fbefore-main-content-single-course' );\n+\n+\u002F\u002F WP 6.4 with Block theme can't detect single course, so code while ( have_posts() ) not run.\n+$args = array(\n+\t'name'        => get_query_var( LP_COURSE_CPT ),\n+\t'post_type'   => LP_COURSE_CPT,\n+\t'numberposts' => 1,\n+\t'post_status' => 'any',\n+);\n+\n+\u002F\u002F Fix preview course\n+if ( isset( $_REQUEST['preview'] ) &&\n+\t( isset( $_REQUEST['p'] ) || isset( $_REQUEST['preview_id'] ) ) ) {\n+\tunset( $args['name'] );\n+\t$args['include'] = isset( $_REQUEST['p'] ) ? [ (int) $_REQUEST['p'] ] : [ (int) $_REQUEST['preview_id'] ];\n+}\n+\n+$posts = get_posts( $args );\n+$post  = $posts[0] ?? 0;\n+\n+if ( $post instanceof WP_Post ) {\n+\tif ( $post->post_status !== 'publish'\n+\t\t&& ( ! current_user_can( ADMIN_ROLE ) && get_current_user_id() != $post->post_author ) ) {\n+\t\t$template_404 = get_query_template( '404' );\n+\t\tif ( $template_404 ) {\n+\t\t\tinclude $template_404;\n+\t\t}\n+\t} else {\n+\t\tlearn_press_get_template( 'content-single-course' );\n+\t}\n+}\n+\u002F*while ( have_posts() ) {\n+\tthe_post();\n+\tlearn_press_get_template( 'content-single-course' );\n+}*\u002F\n+\n+\u002F**\n+ * @since 3.0.0\n+ *\u002F\n+do_action( 'learn-press\u002Fafter-main-content-single-course' );\n+do_action( 'learn-press\u002Fafter-main-content' );\n+\n+\u002F**\n+ * LP sidebar\n+ *\u002F\n+do_action( 'learn-press\u002Fsidebar' );\n+\n+\u002F**\n+ * Footer for page\n+ *\u002F\n+if ( ! wp_is_block_theme() ) {\n+\tdo_action( 'learn-press\u002Ftemplate-footer' );\n+}\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fcourse-info.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fcourse-info.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fcourse-info.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fcourse-info.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,40 +1,40 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of Course Info widget.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fcourse-info\u002Fdefault.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.3\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) || ! $course || ! isset( $instance ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp_widget_course_info \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\r\n-\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\u003Cul class=\"lp-course-info-fields\">\r\n-\t\t\u003Cli class=\"lp-course-info lessons\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Lessons', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C?php learn_press_label_html( $course->count_items( LP_LESSON_CPT ) ); ?>\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003Cli class=\"lp-course-info quizzes\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Quizzes', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C?php learn_press_label_html( $course->count_items( LP_QUIZ_CPT ) ); ?>\r\n-\t\t\u003C\u002Fli>\r\n-\r\n-\t\t\u003Cli class=\"lp-course-info all-items\">\r\n-\t\t\t\u003Clabel>\u003C?php esc_html_e( 'All', 'learnpress' ); ?>\u003C\u002Flabel>\r\n-\t\t\t\u003C?php learn_press_label_html( $course->count_items() ); ?>\r\n-\t\t\u003C\u002Fli>\r\n-\t\u003C\u002Ful>\r\n-\u003C\u002Fdiv>\r\n-\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of Course Info widget.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fcourse-info\u002Fdefault.php.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.3\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) || ! $course || ! isset( $instance ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"lp_widget_course_info \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\n+\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\n+\n+\t\u003Cul class=\"lp-course-info-fields\">\n+\t\t\u003Cli class=\"lp-course-info lessons\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Lessons', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C?php learn_press_label_html( $course->count_items( LP_LESSON_CPT ) ); ?>\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003Cli class=\"lp-course-info quizzes\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'Quizzes', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C?php learn_press_label_html( $course->count_items( LP_QUIZ_CPT ) ); ?>\n+\t\t\u003C\u002Fli>\n+\n+\t\t\u003Cli class=\"lp-course-info all-items\">\n+\t\t\t\u003Clabel>\u003C?php esc_html_e( 'All', 'learnpress' ); ?>\u003C\u002Flabel>\n+\t\t\t\u003C?php learn_press_label_html( $course->count_items() ); ?>\n+\t\t\u003C\u002Fli>\n+\t\u003C\u002Ful>\n+\u003C\u002Fdiv>\n+\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fcourse-progress.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fcourse-progress.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fcourse-progress.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fcourse-progress.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,29 +1,29 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of Course Progress widget.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fcourse-progress\u002Fdefault.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.4\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $course ) || ! isset( $user ) || ! isset( $instance ) || ! isset( $course_results ) || ! isset( $course_data ) ) {\r\n-\treturn;\r\n-}\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp_widget_course_progress \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\r\n-\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\r\n-\t\u003C?php\r\n-\tlearn_press_get_template(\r\n-\t\t'single-course\u002Fsidebar\u002Fuser-progress.php',\r\n-\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\r\n-\t);\r\n-\t?>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of Course Progress widget.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fcourse-progress\u002Fdefault.php.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.4\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $course ) || ! isset( $user ) || ! isset( $instance ) || ! isset( $course_results ) || ! isset( $course_data ) ) {\n+\treturn;\n+}\n+?>\n+\n+\u003Cdiv class=\"lp_widget_course_progress \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\n+\t\u003Ch3>\u003C?php echo wp_kses_post( $course->get_title() ); ?>\u003C\u002Fh3>\n+\n+\t\u003C?php\n+\tlearn_press_get_template(\n+\t\t'single-course\u002Fsidebar\u002Fuser-progress.php',\n+\t\tcompact( 'user', 'course', 'course_data', 'course_results' )\n+\t);\n+\t?>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Ffeatured-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Ffeatured-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Ffeatured-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Ffeatured-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,102 +1,102 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of Featured Courses widget.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Ffeatured-courses\u002Fdefault.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.1.4\r\n- *\r\n- * @author Nhamdv\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $instance ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! isset( $courses ) ) {\r\n-\tesc_html_e( 'No courses', 'learnpress' );\r\n-\r\n-\treturn;\r\n-}\r\n-\r\n-global $post;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-widget-featured-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\r\n-\t\u003Cdiv class=\"lp-widget-featured-courses__content\">\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $courses as $course_id ) {\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post = get_post( $course_id );\r\n-\t\t\tsetup_postdata( $post );\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"lp-widget-course\">\r\n-\r\n-\t\t\t\t\u003C!-- course thumbnail -->\r\n-\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\r\n-\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\r\n-\t\t\t\t\t\u003C!-- course title -->\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\r\n-\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\t\t\u003C!-- course content -->\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\r\n-\t\t\t\t\t\t\u003C!-- price -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\t\u003C!-- instructor -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-widget-course__instructor__avatar\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\t\u003C?php wp_reset_postdata(); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"lp-widget-featured-courses__footer\">\r\n-\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\r\n-\t\t\t\u003Ca class=\"lp-widget-featured-courses__footer__link\"\r\n-\t\t\t\thref=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of Featured Courses widget.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Ffeatured-courses\u002Fdefault.php.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.1.4\n+ *\n+ * @author Nhamdv\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $instance ) ) {\n+\treturn;\n+}\n+\n+if ( ! isset( $courses ) ) {\n+\tesc_html_e( 'No courses', 'learnpress' );\n+\n+\treturn;\n+}\n+\n+global $post;\n+?>\n+\n+\u003Cdiv class=\"lp-widget-featured-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\n+\t\u003Cdiv class=\"lp-widget-featured-courses__content\">\n+\t\t\u003C?php\n+\t\tforeach ( $courses as $course_id ) {\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$post = get_post( $course_id );\n+\t\t\tsetup_postdata( $post );\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"lp-widget-course\">\n+\n+\t\t\t\t\u003C!-- course thumbnail -->\n+\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\n+\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\n+\t\t\t\t\t\u003C!-- course title -->\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\n+\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\n+\t\t\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\t\t\u003C!-- course content -->\n+\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\n+\t\t\t\t\t\t\u003C!-- price -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\n+\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\t\u003C!-- instructor -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-widget-course__instructor__avatar\">\n+\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php } ?>\n+\n+\t\t\u003C?php wp_reset_postdata(); ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"lp-widget-featured-courses__footer\">\n+\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\n+\t\t\t\u003Ca class=\"lp-widget-featured-courses__footer__link\"\n+\t\t\t\thref=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fpopular-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fpopular-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Fpopular-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Fpopular-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,99 +1,99 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of Popular Courses widget.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fpopular-courses\u002Fdefault.php.\r\n- *\r\n- * @author   ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $instance ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! isset( $courses ) ) {\r\n-\tesc_html_e( 'No courses', 'learnpress' );\r\n-\r\n-\treturn;\r\n-}\r\n-\r\n-global $post;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-widget-popular-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\r\n-\t\u003Cdiv class=\"lp-widget-popular-courses__content\">\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $courses as $course_id ) {\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post = get_post( $course_id );\r\n-\t\t\tsetup_postdata( $post );\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"lp-widget-course\">\r\n-\r\n-\t\t\t\t\u003C!-- course thumbnail -->\r\n-\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\r\n-\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\r\n-\t\t\t\t\t\u003C!-- course title -->\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\r\n-\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\t\t\u003C!-- course content -->\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\r\n-\t\t\t\t\t\t\u003C!-- price -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\t\u003C!-- instructor -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan\r\n-\t\t\t\t\t\t\t\t\tclass=\"lp-widget-course__instructor__avatar\">\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\t\u003C?php wp_reset_postdata(); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"lp-widget-popular-courses__footer\">\r\n-\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\r\n-\t\t\t\u003Ca class=\"lp-widget-popular-courses__footer__link\"\r\n-\t\t\t\thref=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of Popular Courses widget.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Fpopular-courses\u002Fdefault.php.\n+ *\n+ * @author   ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $instance ) ) {\n+\treturn;\n+}\n+\n+if ( ! isset( $courses ) ) {\n+\tesc_html_e( 'No courses', 'learnpress' );\n+\n+\treturn;\n+}\n+\n+global $post;\n+?>\n+\n+\u003Cdiv class=\"lp-widget-popular-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\n+\t\u003Cdiv class=\"lp-widget-popular-courses__content\">\n+\t\t\u003C?php\n+\t\tforeach ( $courses as $course_id ) {\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$post = get_post( $course_id );\n+\t\t\tsetup_postdata( $post );\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"lp-widget-course\">\n+\n+\t\t\t\t\u003C!-- course thumbnail -->\n+\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\n+\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\n+\t\t\t\t\t\u003C!-- course title -->\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\n+\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\n+\t\t\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\t\t\u003C!-- course content -->\n+\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\n+\t\t\t\t\t\t\u003C!-- price -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\n+\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\t\u003C!-- instructor -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\n+\t\t\t\t\t\t\t\t\u003Cspan\n+\t\t\t\t\t\t\t\t\tclass=\"lp-widget-course__instructor__avatar\">\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php } ?>\n+\n+\t\t\u003C?php wp_reset_postdata(); ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"lp-widget-popular-courses__footer\">\n+\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\n+\t\t\t\u003Ca class=\"lp-widget-popular-courses__footer__link\"\n+\t\t\t\thref=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Frecent-courses.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Frecent-courses.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Ftemplates\u002Fwidgets\u002Frecent-courses.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Ftemplates\u002Fwidgets\u002Frecent-courses.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,100 +1,100 @@\n-\u003C?php\r\n-\u002F**\r\n- * Template for displaying content of Recent Courses widget.\r\n- *\r\n- * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Frecent-courses\u002Fdefault.php.\r\n- *\r\n- * @author  ThimPress\r\n- * @category Widgets\r\n- * @package  Learnpress\u002FTemplates\r\n- * @version  4.0.1\r\n- *\u002F\r\n-\r\n-defined( 'ABSPATH' ) || exit();\r\n-\r\n-if ( ! isset( $instance ) ) {\r\n-\treturn;\r\n-}\r\n-\r\n-if ( ! isset( $courses ) ) {\r\n-\tesc_html_e( 'No courses', 'learnpress' );\r\n-\r\n-\treturn;\r\n-}\r\n-\r\n-global $post;\r\n-?>\r\n-\r\n-\u003Cdiv class=\"lp-widget-recent-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\r\n-\t\u003Cdiv class=\"lp-widget-recent-courses__content\">\r\n-\t\t\u003C?php\r\n-\t\tforeach ( $courses as $course_id ) {\r\n-\t\t\tif ( empty( $course_id ) ) {\r\n-\t\t\t\tcontinue;\r\n-\t\t\t}\r\n-\r\n-\t\t\t$post = get_post( $course_id );\r\n-\t\t\tsetup_postdata( $post );\r\n-\t\t\t$course = learn_press_get_course( $course_id );\r\n-\t\t\t?>\r\n-\r\n-\t\t\t\u003Cdiv class=\"lp-widget-course\">\r\n-\r\n-\t\t\t\t\u003C!-- course thumbnail -->\r\n-\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\r\n-\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fa>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\r\n-\t\t\t\t\t\u003C!-- course title -->\r\n-\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\r\n-\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\r\n-\t\t\t\t\t\u003C\u002Fa>\r\n-\r\n-\t\t\t\t\t\u003C!-- course content -->\r\n-\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\r\n-\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\r\n-\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\r\n-\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\r\n-\t\t\t\t\t\t\u003C!-- price -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\r\n-\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\r\n-\t\t\t\t\t\t\u003C!-- instructor -->\r\n-\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\r\n-\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\r\n-\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-widget-course__instructor__avatar\">\r\n-\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\r\n-\t\t\t\t\t\t\t\t\u003C\u002Fspan>\r\n-\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\r\n-\t\t\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\t\t\u003C?php endif; ?>\r\n-\t\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\t\u003C\u002Fdiv>\r\n-\t\t\t\u003C\u002Fdiv>\r\n-\t\t\u003C?php } ?>\r\n-\r\n-\t\t\u003C?php wp_reset_postdata(); ?>\r\n-\t\u003C\u002Fdiv>\r\n-\r\n-\t\u003Cdiv class=\"lp-widget-recent-courses__footer\">\r\n-\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\r\n-\t\t\t\u003Ca class=\"lp-widget-recent-courses__footer__link\"\r\n-\t\t\t   href=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\r\n-\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\r\n-\t\t\t\u003C\u002Fa>\r\n-\t\t\u003C?php endif; ?>\r\n-\t\u003C\u002Fdiv>\r\n-\u003C\u002Fdiv>\r\n+\u003C?php\n+\u002F**\n+ * Template for displaying content of Recent Courses widget.\n+ *\n+ * This template can be overridden by copying it to yourtheme\u002Flearnpress\u002Fwidgets\u002Frecent-courses\u002Fdefault.php.\n+ *\n+ * @author  ThimPress\n+ * @category Widgets\n+ * @package  Learnpress\u002FTemplates\n+ * @version  4.0.1\n+ *\u002F\n+\n+defined( 'ABSPATH' ) || exit();\n+\n+if ( ! isset( $instance ) ) {\n+\treturn;\n+}\n+\n+if ( ! isset( $courses ) ) {\n+\tesc_html_e( 'No courses', 'learnpress' );\n+\n+\treturn;\n+}\n+\n+global $post;\n+?>\n+\n+\u003Cdiv class=\"lp-widget-recent-courses \u003C?php echo esc_attr( $instance['css_class'] ); ?>\">\n+\t\u003Cdiv class=\"lp-widget-recent-courses__content\">\n+\t\t\u003C?php\n+\t\tforeach ( $courses as $course_id ) {\n+\t\t\tif ( empty( $course_id ) ) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\t$post = get_post( $course_id );\n+\t\t\tsetup_postdata( $post );\n+\t\t\t$course = learn_press_get_course( $course_id );\n+\t\t\t?>\n+\n+\t\t\t\u003Cdiv class=\"lp-widget-course\">\n+\n+\t\t\t\t\u003C!-- course thumbnail -->\n+\t\t\t\t\u003C?php if ( ! empty( $instance['show_thumbnail'] ) && $course->get_image( 'medium' ) ) : ?>\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__image\">\n+\t\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( $course->get_permalink() ); ?>\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_image( 'medium' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fa>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\u003Cdiv class=\"lp-widget-course__content\">\n+\t\t\t\t\t\u003C!-- course title -->\n+\t\t\t\t\t\u003Ca href=\"\u003C?php echo esc_url_raw( get_the_permalink( $course->get_id() ) ); ?>\">\n+\t\t\t\t\t\t\u003Ch3 class=\"lp-widget-course__title\">\u003C?php echo esc_html( $course->get_title() ); ?>\u003C\u002Fh3>\n+\t\t\t\t\t\u003C\u002Fa>\n+\n+\t\t\t\t\t\u003C!-- course content -->\n+\t\t\t\t\t\u003C?php if ( ! empty( $instance['desc_length'] ) && absint( $instance['desc_length'] ) > 0 ) : ?>\n+\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__description\">\n+\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_content( 'raw', absint( $instance['desc_length'] ), '...' ) ); ?>\n+\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__meta\">\n+\t\t\t\t\t\t\u003C!-- price -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_price'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"course-price\">\n+\t\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__price\">\n+\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_course_price_html() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\n+\t\t\t\t\t\t\u003C!-- instructor -->\n+\t\t\t\t\t\t\u003C?php if ( ! empty( $instance['show_teacher'] ) ) : ?>\n+\t\t\t\t\t\t\t\u003Cdiv class=\"lp-widget-course__instructor\">\n+\t\t\t\t\t\t\t\t\u003Cspan class=\"lp-widget-course__instructor__avatar\">\n+\t\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor()->get_profile_picture() ); ?>\n+\t\t\t\t\t\t\t\t\u003C\u002Fspan>\n+\t\t\t\t\t\t\t\t\u003C?php echo wp_kses_post( $course->get_instructor_html() ); ?>\n+\t\t\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\t\t\u003C?php endif; ?>\n+\t\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\t\u003C\u002Fdiv>\n+\t\t\t\u003C\u002Fdiv>\n+\t\t\u003C?php } ?>\n+\n+\t\t\u003C?php wp_reset_postdata(); ?>\n+\t\u003C\u002Fdiv>\n+\n+\t\u003Cdiv class=\"lp-widget-recent-courses__footer\">\n+\t\t\u003C?php if ( ! empty( $instance['bottom_link_text'] ) && learn_press_get_page_link( 'courses' ) ) : ?>\n+\t\t\t\u003Ca class=\"lp-widget-recent-courses__footer__link\"\n+\t\t\t   href=\"\u003C?php echo esc_url_raw( learn_press_get_page_link( 'courses' ) ); ?>\" rel=\"nofllow\">\n+\t\t\t\t\u003C?php echo wp_kses_post( $instance['bottom_link_text'] ); ?>\n+\t\t\t\u003C\u002Fa>\n+\t\t\u003C?php endif; ?>\n+\t\u003C\u002Fdiv>\n+\u003C\u002Fdiv>\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Funinstall.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Funinstall.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Funinstall.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Funinstall.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -1,17 +1,17 @@\n-\u003C?php\r\n-\u002F**\r\n- * Uninstall LearnPress.\r\n- *\r\n- * Scope-limited cleanup for MCP capability.\r\n- *\u002F\r\n-\r\n-defined( 'WP_UNINSTALL_PLUGIN' ) || exit;\r\n-\r\n-$admin = get_role( 'administrator' );\r\n-if ( $admin ) {\r\n-\t$admin->remove_cap( 'lp_mcp_access' );\r\n-}\r\n-\r\n-global $wpdb;\r\n-$table_name = $wpdb->prefix . 'learnpress_mcp_api_keys';\r\n-$wpdb->query( \"DROP TABLE IF EXISTS {$table_name}\" );\r\n+\u003C?php\n+\u002F**\n+ * Uninstall LearnPress.\n+ *\n+ * Scope-limited cleanup for MCP capability.\n+ *\u002F\n+\n+defined( 'WP_UNINSTALL_PLUGIN' ) || exit;\n+\n+$admin = get_role( 'administrator' );\n+if ( $admin ) {\n+\t$admin->remove_cap( 'lp_mcp_access' );\n+}\n+\n+global $wpdb;\n+$table_name = $wpdb->prefix . 'learnpress_mcp_api_keys';\n+$wpdb->query( \"DROP TABLE IF EXISTS {$table_name}\" );\nOnly in \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fvendor: bin\ndiff -ru \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fvendor\u002Fcomposer\u002Finstalled.php \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fvendor\u002Fcomposer\u002Finstalled.php\n--- \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.5\u002Fvendor\u002Fcomposer\u002Finstalled.php\t2026-04-10 11:43:48.000000000 +0000\n+++ \u002Fhome\u002Fdeploy\u002Fwp-safety.org\u002Fdata\u002Fplugin-versions\u002Flearnpress\u002F4.3.6\u002Fvendor\u002Fcomposer\u002Finstalled.php\t2026-05-03 17:09:04.000000000 +0000\n@@ -3,7 +3,7 @@\n         'name' => 'learnpress\u002Flearnpress',\n         'pretty_version' => 'dev-develop',\n         'version' => 'dev-develop',\n-        'reference' => '48204efb257f105c2cda2898bb7395b5a33dd6d7',\n+        'reference' => 'f95ac89e6a1c9efafbe7e592ca6203f8e47a087d',\n         'type' => 'library',\n         'install_path' => __DIR__ . '\u002F..\u002F..\u002F',\n         'aliases' => array(),\n@@ -13,7 +13,7 @@\n         'learnpress\u002Flearnpress' => array(\n             'pretty_version' => 'dev-develop',\n             'version' => 'dev-develop',\n-            'reference' => '48204efb257f105c2cda2898bb7395b5a33dd6d7',\n+            'reference' => 'f95ac89e6a1c9efafbe7e592ca6203f8e47a087d',\n             'type' => 'library',\n             'install_path' => __DIR__ . '\u002F..\u002F..\u002F',\n             'aliases' => array(),\n","1. Authenticate as a Subscriber or any user level on the WordPress site.\n2. Identify a paid course and its associated ID.\n3. Send a POST request to the LearnPress REST API endpoint responsible for adding items to the cart (e.g., \u002Fwp-json\u002Flp\u002Fv1\u002Fcart\u002Fadd-item).\n4. Include the 'quantity' parameter in the request body and set its value to '0'.\n5. The backend logic merges this quantity into the order object without validation, causing the total cost to be calculated as 0.\n6. Proceed to complete the order\u002Fenrollment process; the system will treat the transaction as successful and free of charge.","gemini-3-flash-preview","2026-05-14 17:28:13","2026-05-14 17:29:08",{"type":41,"vulnerable_version":42,"fixed_version":11,"vulnerable_browse":43,"vulnerable_zip":44,"fixed_browse":45,"fixed_zip":46,"all_tags":47},"plugin","4.3.5","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Flearnpress\u002Ftags\u002F4.3.5","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flearnpress.4.3.5.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Flearnpress\u002Ftags\u002F4.3.6","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flearnpress.4.3.6.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Flearnpress\u002Ftags"]